ZGlmZiAtLWdpdCBhL0FCT1VULU5MUyBiL0FCT1VULU5MUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiYzcyZS4uMDAwMDAwMAotLS0gYS9BQk9VVC1OTFMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDY4ICswLDAgQEAKLTEgTm90ZXMgb24gdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKLWEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAotdG9nZXRoZXIsIHNvIHRoYXQgZnJlZSBzb2Z0d2FyZSB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55Ci1sYW5ndWFnZXMuICBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpcgotbWVzc2FnZXMuCi0KLSAgIElmIHlvdSBmb3VuZCB0aGlzIGBBQk9VVC1OTFMnIGZpbGUgaW5zaWRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgbWF5Ci1hc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0ZWQgcGFja2FnZSBkb2VzIHVzZSBHTlUgYGdldHRleHQnIGludGVybmFsbHksCi1pdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyBfbm90XwotbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKLXRoaXMgcGFja2FnZSB3aXRoIG1lc3NhZ2VzIHRyYW5zbGF0ZWQuCi0KLSAgIEluc3RhbGxlcnMgd2lsbCBmaW5kIGhlcmUgc29tZSB1c2VmdWwgaGludHMuICBUaGVzZSBub3RlcyBhbHNvCi1leHBsYWluIGhvdyB1c2VycyBzaG91bGQgcHJvY2VlZCBmb3IgZ2V0dGluZyB0aGUgcHJvZ3JhbXMgdG8gdXNlIHRoZQotYXZhaWxhYmxlIHRyYW5zbGF0aW9ucy4gIFRoZXkgdGVsbCBob3cgcGVvcGxlIHdhbnRpbmcgdG8gY29udHJpYnV0ZSBhbmQKLXdvcmsgb24gdHJhbnNsYXRpb25zIGNhbiBjb250YWN0IHRoZSBhcHByb3ByaWF0ZSB0ZWFtLgotCi0gICBXaGVuIHJlcG9ydGluZyBidWdzIGluIHRoZSBgaW50bC8nIGRpcmVjdG9yeSBvciBidWdzIHdoaWNoIG1heSBiZQotcmVsYXRlZCB0byBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91IHNob3VsZCB0ZWxsIGFib3V0IHRoZSB2ZXJzaW9uIG9mCi1gZ2V0dGV4dCcgd2hpY2ggaXMgdXNlZC4gIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlCi1gaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KLQotMS4xIFF1aWNrIGNvbmZpZ3VyYXRpb24gYWR2aWNlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91Ci1zaG91bGQgY29uZmlndXJlIGl0IHVzaW5nCi0KLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKLQotdG8gZm9yY2UgdXNhZ2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzCi1wYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKLW9wZXJhdGluZyBzeXN0ZW0gd2hlcmUgdGhpcyBwYWNrYWdlIGlzIGJlaW5nIGluc3RhbGxlZC4gIFNvIGZhciwgb25seQotdGhlIGBnZXR0ZXh0JyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgR05VIEMgbGlicmFyeSB2ZXJzaW9uIDIgcHJvdmlkZXMgYXMKLW1hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzLCBtZXNzYWdlIGluaGVyaXRhbmNlLCBhdXRvbWF0aWMKLWNoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCi1JdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBvbiB0b3AKLW9mIGEgYGNhdGdldHMnIGltcGxlbWVudGF0aW9uLiAgRnV0dXJlIHZlcnNpb25zIG9mIEdOVSBgZ2V0dGV4dCcgd2lsbAotdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKLXRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCi0KLSAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCi15b3UgaGF2ZSBpbnN0YWxsZWQgYSByZWNlbnQgY29weSBvZiB0aGUgR05VIGdldHRleHQgcGFja2FnZSB3aXRoIHRoZQotaW5jbHVkZWQgYGxpYmludGwnLgotCi0xLjIgSU5TVEFMTCBNYXR0ZXJzCi09PT09PT09PT09PT09PT09PT09Ci0KLVNvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcwotdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4gIE1vc3Qgc3VjaAotcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93biB3YXlzIHRvCi1pbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCi0KLSAgIEJ5IGRlZmF1bHQsIHRoaXMgcGFja2FnZSB3aWxsIGJlIGluc3RhbGxlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZgotbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5Ci1wcm92aWRlcyB0aGUgR05VIGBnZXR0ZXh0JyBmdW5jdGlvbnMuICBJZiBub3QsIHRoZSBpbmNsdWRlZCBHTlUKLWBnZXR0ZXh0JyBsaWJyYXJ5IHdpbGwgYmUgdXNlZC4gIFRoaXMgbGlicmFyeSBpcyB3aG9sbHkgY29udGFpbmVkCi13aXRoaW4gdGhpcyBwYWNrYWdlLCB1c3VhbGx5IGluIHRoZSBgaW50bC8nIHN1YmRpcmVjdG9yeSwgc28gcHJpb3IKLWluc3RhbGxhdGlvbiBvZiB0aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzIF9ub3RfIHJlcXVpcmVkLgotSW5zdGFsbGVycyBtYXkgdXNlIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nCi10aGUgZGVmYXVsdCBiZWhhdmlvdXIuICBUaGUgY29tbWFuZHM6Ci0KLSAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKLSAgICAgLi9jb25maWd1cmUgLS1kaXNhYmxlLW5scwotCi13aWxsLCByZXNwZWN0aXZlbHksIGJ5cGFzcyBhbnkgcHJlLWV4aXN0aW5nIGBnZXR0ZXh0JyB0byB1c2UgdGhlCi1pbnRlcm5hdGlvbmFsaXppbmcgcm91dGluZXMgcHJvdmlkZWQgd2l0aGluIHRoaXMgcGFja2FnZSwgb3IgZWxzZSwKLV90b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgotCi0gICBXaGVuIHlvdSBhbHJlYWR5IGhhdmUgR05VIGBnZXR0ZXh0JyBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHJ1bgotY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCi1wcm9iYWJseSBkZXRlY3QgdGhlIHByZXZpb3VzbHkgYnVpbHQgYW5kIGluc3RhbGxlZCBgbGliaW50bC5hJyBmaWxlIGFuZAotd2lsbCBkZWNpZGUgdG8gdXNlIHRoaXMuICBUaGlzIG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUuICBZb3Ugc2hvdWxkIHVzZQotdGhlIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgdGhlIEdOVSBgZ2V0dGV4dCcgbGlicmFyeS4gIEkuZS4gaWYgdGhlIGZpbGUKLWBpbnRsL1ZFUlNJT04nIHNob3dzIHRoYXQgdGhlIGxpYnJhcnkgd2hpY2ggY29tZXMgd2l0aCB0aGlzIHBhY2thZ2UgaXMKLW1vcmUgcmVjZW50LCB5b3Ugc2hvdWxkIHVzZQotCi0gICAgIC4vY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0Ci0KLXRvIHByZXZlbnQgYXV0by1kZXRlY3Rpb24uCi0KLSAgIFRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbgotYW5kIHRoZXJlZm9yZSBpdCB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbiBpcyB0aGF0IGV2ZW4gYW4KLWVtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCi1leHRlbnNpb25zIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuCi0KLSAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIHVzdWFsbHkgaGF2ZSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCi1MTCBnaXZlcyBhbiBJU08gNjM5IHR3by1sZXR0ZXIgY29kZSBpZGVudGlmeWluZyB0aGUgbGFuZ3VhZ2UuICBVbmxlc3MKLXRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gZm9yYmlkZGVuIGF0IGBjb25maWd1cmUnIHRpbWUgYnkgdXNpbmcgdGhlCi1gLS1kaXNhYmxlLW5scycgc3dpdGNoLCBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBhcmUgaW5zdGFsbGVkCi10b2dldGhlciB3aXRoIHRoZSBwYWNrYWdlLiAgSG93ZXZlciwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBMSU5HVUFTJwotbWF5IGJlIHNldCwgcHJpb3IgdG8gY29uZmlndXJhdGlvbiwgdG8gbGltaXQgdGhlIGluc3RhbGxlZCBzZXQuCi1gTElOR1VBUycgc2hvdWxkIHRoZW4gY29udGFpbiBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHR3by1sZXR0ZXIKLWNvZGVzLCBzdGF0aW5nIHdoaWNoIGxhbmd1YWdlcyBhcmUgYWxsb3dlZC4KLQotMS4zIFVzaW5nIFRoaXMgUGFja2FnZQotPT09PT09PT09PT09PT09PT09PT09PQotCi1BcyBhIHVzZXIsIGlmIHlvdXIgbGFuZ3VhZ2UgaGFzIGJlZW4gaW5zdGFsbGVkIGZvciB0aGlzIHBhY2thZ2UsIHlvdQotb25seSBoYXZlIHRvIHNldCB0aGUgYExBTkcnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZQotYExMX0NDJyBjb21iaW5hdGlvbi4gIElmIHlvdSBoYXBwZW4gdG8gaGF2ZSB0aGUgYExDX0FMTCcgb3Igc29tZSBvdGhlcgotYExDX3h4eCcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCwgeW91IHNob3VsZCB1bnNldCB0aGVtIGJlZm9yZQotc2V0dGluZyBgTEFORycsIG90aGVyd2lzZSB0aGUgc2V0dGluZyBvZiBgTEFORycgd2lsbCBub3QgaGF2ZSB0aGUKLWRlc2lyZWQgZWZmZWN0LiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLCBhbmQKLWBDQycgaXMgYW4gSVNPIDMxNjYgdHdvLWxldHRlciBjb3VudHJ5IGNvZGUuICBGb3IgZXhhbXBsZSwgbGV0J3MKLXN1cHBvc2UgdGhhdCB5b3Ugc3BlYWsgR2VybWFuIGFuZCBsaXZlIGluIEdlcm1hbnkuICBBdCB0aGUgc2hlbGwKLXByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAotYGV4cG9ydCBMQU5HOyBMQU5HPWRlX0RFJyAoaW4gYHNoJykgb3IgYGV4cG9ydCBMQU5HPWRlX0RFJyAoaW4gYGJhc2gnKS4KLVRoaXMgY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yCi1hbGwuCi0KLSAgIFlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBjb3VudHJ5IGNvZGUgc3BlY2lmaWNhdGlvbiBpcyByZWR1bmRhbnQuCi1CdXQgaW4gZmFjdCwgc29tZSBsYW5ndWFnZXMgaGF2ZSBkaWFsZWN0cyBpbiBkaWZmZXJlbnQgY291bnRyaWVzLiAgRm9yCi1leGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKLWNvdW50cnkgY29kZSBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpYWxlY3RzLgotCi0gICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKLWxhbmd1YWdlIGFuZCBgQ0MnIGRlbm90aW5nIHRoZSBjb3VudHJ5LCBpcyB0aGUgb25lIHVzZSBvbiBzeXN0ZW1zIGJhc2VkCi1vbiBHTlUgbGliYy4gIE9uIG90aGVyIHN5c3RlbXMsIHNvbWUgdmFyaWF0aW9ucyBvZiB0aGlzIHNjaGVtZSBhcmUKLXVzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKLWxvY2FsZXMgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtIGZvciB5b3VyIGxhbmd1YWdlIGJ5IHJ1bm5pbmcgdGhlCi1jb21tYW5kIGBsb2NhbGUgLWEgfCBncmVwICdeTEwnJy4KLQotICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCi1FbmdsaXNoIG1lc3NhZ2UgaXMgc2hvd24gaW4gcGxhY2Ugb2YgYSBub25leGlzdGVudCB0cmFuc2xhdGlvbi4gIElmIHlvdQotdW5kZXJzdGFuZCBvdGhlciBsYW5ndWFnZXMsIHlvdSBjYW4gc2V0IHVwIGEgcHJpb3JpdHkgbGlzdCBvZiBsYW5ndWFnZXMuCi1UaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCi1gTEFOR1VBR0UnLiAgR05VIGBnZXR0ZXh0JyBnaXZlcyBwcmVmZXJlbmNlIHRvIGBMQU5HVUFHRScgb3ZlciBgTEFORycKLWZvciB0aGUgcHVycG9zZSBvZiBtZXNzYWdlIGhhbmRsaW5nLCBidXQgeW91IHN0aWxsIG5lZWQgdG8gaGF2ZSBgTEFORycKLXNldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKLXN5c3RlbSBsaWJyYXJpZXMuICBGb3IgZXhhbXBsZSwgc29tZSBTd2VkaXNoIHVzZXJzIHdobyB3b3VsZCByYXRoZXIKLXJlYWQgdHJhbnNsYXRpb25zIGluIEdlcm1hbiB0aGFuIEVuZ2xpc2ggZm9yIHdoZW4gU3dlZGlzaCBpcyBub3QKLWF2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgotCi0gICBTcGVjaWFsIGFkdmljZSBmb3IgTm9yd2VnaWFuIHVzZXJzOiBUaGUgbGFuZ3VhZ2UgY29kZSBmb3IgTm9yd2VnaWFuCi1ib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQotdHJhbnNpdGlvbiBwZXJpb2QsIHdoaWxlIHNvbWUgbWVzc2FnZSBjYXRhbG9ncyBmb3IgdGhpcyBsYW5ndWFnZSBhcmUKLWluc3RhbGxlZCB1bmRlciBgbmInIGFuZCBzb21lIG9sZGVyIG9uZXMgdW5kZXIgYG5vJywgaXQncyByZWNvbW1lbmRlZAotZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKLW9sZGVyIHRyYW5zbGF0aW9ucyBhcmUgdXNlZC4KLQotICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJwotZW52aXJvbm1lbnQgdmFyaWFibGUsIGBMTF9DQycgY29tYmluYXRpb25zIGNhbiBiZSBhYmJyZXZpYXRlZCBhcyBgTEwnCi10byBkZW5vdGUgdGhlIGxhbmd1YWdlJ3MgbWFpbiBkaWFsZWN0LiAgRm9yIGV4YW1wbGUsIGBkZScgaXMgZXF1aXZhbGVudAotdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJwotKFBvcnR1Z3Vlc2UgYXMgc3Bva2VuIGluIFBvcnR1Z2FsKSBpbiB0aGlzIGNvbnRleHQuCi0KLTEuNCBUcmFuc2xhdGluZyBUZWFtcwotPT09PT09PT09PT09PT09PT09PT09Ci0KLUZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCi1wZW9wbGUgd2hvIGxpa2UgdGhlaXIgb3duIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCB3ZWxsLCBhbmQgd2hvIGFyZSBhbHNvCi1hYmxlIHRvIHN5bmVyZ2l6ZSB3aXRoIG90aGVyIHRyYW5zbGF0b3JzIHNwZWFraW5nIHRoZSBzYW1lIGxhbmd1YWdlLgotRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdC4gIFRoZSB1cC10by1kYXRlIGxpc3Qgb2YKLXRlYW1zIGNhbiBiZSBmb3VuZCBhdCB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0J3MgaG9tZXBhZ2UsCi1gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvJywgaW4gdGhlICJUZWFtcyIgYXJlYS4KLQotICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gX3dvcmtfIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKLXNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgotVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKLWAtcmVxdWVzdCcgYXBwZW5kZWQuICBGb3IgZXhhbXBsZSwgc3BlYWtlcnMgb2YgU3dlZGlzaCBjYW4gc2VuZCBhCi1tZXNzYWdlIHRvIGBzdi1yZXF1ZXN0QGxpLm9yZycsIGhhdmluZyB0aGlzIG1lc3NhZ2UgYm9keToKLQotICAgICBzdWJzY3JpYmUKLQotICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQotX2FjdGl2ZWx5XyBpbiB0cmFuc2xhdGlvbnMsIG9yIGF0IHNvbHZpbmcgdHJhbnNsYXRpb25hbCBkaWZmaWN1bHRpZXMsCi1yYXRoZXIgdGhhbiBtZXJlbHkgbHVya2luZyBhcm91bmQuICBJZiB5b3VyIHRlYW0gZG9lcyBub3QgZXhpc3QgeWV0IGFuZAoteW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bwotZ2V0IHN0YXJ0ZWQsIHBsZWFzZSB3cml0ZSB0byBgY29vcmRpbmF0b3JAdHJhbnNsYXRpb25wcm9qZWN0Lm9yZycgdG8KLXJlYWNoIHRoZSBjb29yZGluYXRvciBmb3IgYWxsIHRyYW5zbGF0b3IgdGVhbXMuCi0KLSAgIFRoZSBFbmdsaXNoIHRlYW0gaXMgc3BlY2lhbC4gIEl0IHdvcmtzIGF0IGltcHJvdmluZyBhbmQgdW5pZm9ybWl6aW5nCi10aGUgdGVybWlub2xvZ3kgaW4gdXNlLiAgUHJvdmVuIGxpbmd1aXN0aWMgc2tpbGxzIGFyZSBwcmFpc2VkIG1vcmUgdGhhbgotcHJvZ3JhbW1pbmcgc2tpbGxzLCBoZXJlLgotCi0xLjUgQXZhaWxhYmxlIFBhY2thZ2VzCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLUxhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKLW1hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgTm92ZW1iZXIKLTIwMDcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCi1QTyBmaWxlcyBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIHRyYW5zbGF0aW9uIGNvb3JkaW5hdGlvbiwgd2l0aCBhCi10cmFuc2xhdGlvbiBwZXJjZW50YWdlIG9mIGF0IGxlYXN0IDUwJS4KLQotICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbwotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKLSAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gW10gICAgIFtdICAgICAgfAotICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8Ci0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICBbXSAgICAgIHwKLSAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgW10gfAotICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwKLSAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBjb3JldXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gW10gICAgICAgICAgW10gfAotICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgIFtdICAgICAgfAotICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAoKSBbXSAgICAgW10gICAgICB8Ci0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgIFtdIHwKLSAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBnaXAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbXVsdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgKCkgKCkgICAgIFtdICAgICAgfAotICAgICBnbnVlZHUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAotICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBncmVwICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSB8Ci0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgW10gW10gICAgW10gW10gICAgICAgIFtdICAgICAgfAotICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICB8Ci0gICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBndGtzcGVsbCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSB8Ci0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAotICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBpbmRlbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSB8Ci0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gfAotICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gfAotICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICB8Ci0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgIHwKLSAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBsZWFmcGFkICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICB8Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBsaWJncGhvdG8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8Ci0gICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdIHwKLSAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgfAotICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKLSAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcG9wdCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgIFtdIFtdIFtdICAgICAgICAgIFtdIHwKLSAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAotICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdICAgICAgICBbXSAgICAgIHwKLSAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgICAgW10gfAotICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSAoKSBbXSAgICAgW10gICBbXSB8Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgIFtdIFtdIFtdICAgICAgICAgICAgIHwKLSAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoKSAgICAgICAgICAgICAgICB8Ci0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIFtdICAgICBbXSAgICAgIHwKLSAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAotICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSB8Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSAgICAgIHwKLSAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgIFtdICAgW10gfAotICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgICAgICAgICAgfAotICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICB8Ci0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgfAotICAgICB3ZGlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgW10gICAgICB8Ci0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIHwKLSAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gW10gICAgIFtdICAgICAgfAotICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBjeSBkYSBkZSBlbCBlbiBlbl9HQiBlbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgMCAgMiAgMSAgOCAyNiAgMiA0MCA0OCAgMiA1NiA4OCAxNSAgMSAgMTUgICAxOAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzIGV0IGV1IGZhIGZpIGZyICBnYSBnbCBndSBoZSBoaSBociBodSBpZCBpcyBpdAotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICBDb21wZW5kaXVtICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAotICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBiYXNoICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiZmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaWJzaGVsZiAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBiaW51dGlscyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBiaXNvbi1ydW50aW1lICAgICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBjZmxvdyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjbGlzcCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBjcGlvICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjcHBsaWIgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBjcnlwdG9uaXQgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBkaWFsb2cgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBkaWZmdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAotICAgICBkb29kbGUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgfAotICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBmaW5kdXRpbHMgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBmbGV4ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnYXMgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnYXdrICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgW10gICAgICAgICAgICAgICAgKCkgfAotICAgICBnY2FsICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnY2MgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBnaXAgICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBnbXVsdCAgICAgICAgICAgICAgfCAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAotICAgICBnbnVjYXNoICAgICAgICAgICAgfCAoKSAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgfAotICAgICBnbnVlZHUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVsaWIgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnVuZXQtZ3RrICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnbnV0bHMgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtYWVyaWFsICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtYmVhbSAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtY29udGFjdHMgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBncGUtZmlsZW1hbmFnZXIgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtZ28gICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtbG9naW4gICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBncGUtcGFja2FnZSAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtc2tldGNoYm9vayAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtc3UgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdGltZXNoZWV0ICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBncGUtdG9kYXkgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncGhvdG8yICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBncHJvZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBncmV0bCAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgfAotICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBnc3MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBnc3QtcGx1Z2lucy1iYWQgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3QtcGx1Z2lucy1nb29kICAgfCBbXSAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3QtcGx1Z2lucy11Z2x5ICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBndGthbSAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBndGtzcGVsbCAgICAgICAgICAgfCBbXSAgICBbXSAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBndXRlbnByaW50ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSBbXSBbXSAgW10gW10gICAgW10gICAgW10gW10gW10gICAgW10gfAotICAgICBoZXJyaWUgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBoeWxhZmF4ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBpc29fMTU5MjQgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBpc29fMzE2NiAgICAgICAgICAgfCBbXSBbXSBbXSAgICBbXSBbXSAgICAgW10gW10gW10gW10gW10gW10gW10gICAgW10gfAotICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBpc29fNjM5ICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBqcGlsb3QgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBqd2hvaXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICBrYmQgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBrZXl0b3VjaCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBrZXl0b3VjaC1rZXlib2EuLi4gfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsZCAgICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsZWFmcGFkICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgW10gICAgICAgW10gICAgICAgW10gfAotICAgICBsaWJjICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBsaWJleGlmICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJleHRyYWN0b3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gW10gICAgICAgfAotICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJncGhvdG8yICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsaWJncGhvdG8yX3BvcnQgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpY29udiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWJpZG4gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaWx5cG9uZCAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBseW54ICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWlsdXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBtYWtlICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gW10gICAgW10gICAgW10gICAgW10gICAgICAgfAotICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBtaW5pY29tICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBuYW5vICAgICAgICAgICAgICAgfCBbXSAgICBbXSAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBvcGNvZGVzICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gfAotICAgICBwaWxvdC1xb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgICAgICAgW10gICAgfAotICAgICBwc21pc2MgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBwd2R1dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICByYWRpdXMgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICByZWNvZGUgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgW10gW10gICAgW10gICAgICAgW10gW10gICAgW10gfAotICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgfAotICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gfAotICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBza2VuY2lsICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzb2xmZWdlICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAotICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICBzeXN0ZW0tdG9vbHMtYmEuLi4gfCBbXSAgICBbXSAgICBbXSBbXSAgW10gICAgICAgICAgICAgW10gW10gW10gICAgW10gfAotICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICBbXSBbXSAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgfAotICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICB1dGlsLWxpbnV4LW5nICAgICAgfCBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSBbXSAgICAgICAgICBbXSAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gfAotICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgW10gICAgICAgICAgICAgW10gW10gW10gICAgW10gfAotICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgW10gICAgW10gICAgW10gICAgICAgW10gfAotICAgICB4a2V5Ym9hcmQtY29uZmlnICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICB4cGFkICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICBlcyBldCBldSBmYSBmaSBmciAgZ2EgZ2wgZ3UgaGUgaGkgaHIgaHUgaWQgaXMgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgODUgMjIgMTQgIDIgNDggMTAxIDYxIDEyICAyICA4ICAyICA2IDUzIDI5ICAxIDUyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgamEga2Ega28ga3Uga3kgbGcgbHQgbHYgbWsgbW4gbXMgbXQgbmIgbmUgbmwgIG5uCi0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGFlZ2lzICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8Ci0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIGFwLXV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGJmZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGJpc29uICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIGJsdWV6LXBpbiAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNmbG93ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNvbnNvbGUtdG9vbHMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNwcGxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGNyeXB0b25pdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGRpZmZ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGRvb2RsZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGVuc2NyaXB0ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZldGNobWFpbCAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZpbmR1dGlsc19zdGFibGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZsZXggICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdhd2sgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdjYyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdldHRleHQtdG9vbHMgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdpcCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdsdW5hcmNsb2NrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdtdWx0ICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWNhc2ggICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICgpICAgICAgICB8Ci0gICAgIGdudWVkdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudWxpYiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdudW5ldCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudW5ldC1ndGsgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1hZXJpYWwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1iZWFtICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1jbG9jayAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1jb25mICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1lZGl0ICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1maWxlbWFuYWdlciAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1nbyAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1vd25lcmluZm8gICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwZS1za2V0Y2hib29rICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10aW1lc2hlZXQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwZS10b2RvICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwaG90bzIgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICB8Ci0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdyYW1hZG9pciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8Ci0gICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzYXNsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWJhc2UgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLWdvb2QgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGdzdHJlYW1lciAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0aWNrICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0a2FtICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0a29ycGhhbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd0a3NwZWxsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdIFtdIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICBbXSB8Ci0gICAgIGhlcnJpZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGlkdXRpbHMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGluZGVudCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICBbXSB8Ci0gICAgIGlzb18zMTY2XzIgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb180MjE3ICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGlzb182MzkgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICBbXSB8Ci0gICAgIGpwaWxvdCAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICB8Ci0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGp3aG9pcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtleXRvdWNoLWVkaXRvciAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGtleXRvdWNoLWtleWJvYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxkICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxlYWZwYWQgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmV4aWYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmV4dHJhY3RvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmdwZy1lcnJvciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwaG90bzIgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGxpYmdzYXNsICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmljb252ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpYmlkbiAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpbHlwb25kICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIGxwcm5nICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIGx5bnggICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIG1haWxmcm9tZCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIG1hbi1kYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG1pbmljb20gICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICB8Ci0gICAgIG9wY29kZXMgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHBhcnRlZCAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHBvcHQgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHBzbWlzYyAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICB8Ci0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHFvZiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJhZGl1cyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHJwbSAgICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNjcmVlbSAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIFtdICBbXSB8Ci0gICAgIHNlZCAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHNoYXJlZC1taW1lLWluZm8gICB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICBbXSB8Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHNoaXNoaSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgICAgICAoKSB8Ci0gICAgIHNvdW5kdHJhY2tlciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHNwICAgICAgICAgICAgICAgICB8ICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8IFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHRhciAgICAgICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHRleGluZm8gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICB8Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHR1eHBhaW50ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpICAgIFtdICBbXSB8Ci0gICAgIHVuaWNvZGUtaGFuLXRyYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHV0aWwtbGludXggICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHV0aWwtbGludXgtbmcgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgIHdhc3Rlc2VkZ2UgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgICAgICB8Ci0gICAgIHdnZXQgICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHhjaGF0ICAgICAgICAgICAgICB8IFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHhrZXlib2FyZC1jb25maWcgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICB8Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGphIGthIGtvIGt1IGt5IGxnIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5lIG5sICBubgotICAgICAgICAgICAgICAgICAgICAgICAgICA1MSAgMiAyNSAgMyAgMiAgMCAgNiAgMCAgMiAgMiAyMCAgMCAxMSAgMSAxMDMgIDYKLQotICAgICAgICAgICAgICAgICAgICAgICAgICBvciBwYSBwbCBwdCBwdF9CUiBybSBybyBydSBydyBzayBzbCBzcSBzciBzdiAgdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgQ29tcGVuZGl1bSAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgKCkgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgYmlic2hlbGYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgYmlzb24tcnVudGltZSAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgY3BwbGliICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZGlhbG9nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgIHwKLSAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgICAgIHwKLSAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZmluZHV0aWxzX3N0YWJsZSAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgW10gW10gICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251bGliICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZ251bmV0ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ251dGxzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXBhY2thZ2UgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3Nhc2wgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtYmFkICAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtYmFzZSAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0LXBsdWdpbnMtdWdseSAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3N0cmVhbWVyICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgZ3RrYW0gICAgICAgICAgICAgIHwgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3Rrb3JwaGFuICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgW10gW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgZ3V0ZW5wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgaHlsYWZheCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaWR1dGlscyAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgIHwKLSAgICAgaXNvXzE1OTI0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgW10gW10gW10gIFtdICAgICAgW10gW10gW10gW10gW10gW10gW10gW10gIFtdIHwKLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gICAgIHwKLSAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgW10gW10gICAgIHwKLSAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2V5dG91Y2ggICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2V5dG91Y2gtZWRpdG9yICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gIFtdIHwKLSAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZXhpZiAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gICAgICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgbGliZ3BnLWVycm9yICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGliZ3Bob3RvMl9wb3J0ICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGliZ3Nhc2wgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgIHwKLSAgICAgbGliaWRuICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgIHwKLSAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbHBybmcgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWFpbGZyb21kICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcGlsb3QtcW9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcG9wdCAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcHdkdXRpbHMgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcW9mICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgW10gICAgW10gW10gW10gICAgIHwKLSAgICAgc2VkICAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gIFtdICAgICAgW10gW10gICAgW10gW10gICAgW10gW10gICAgIHwKLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgW10gW10gIFtdICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgIHwKLSAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgIHwKLSAgICAgc2hpc2hpICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgc29sZmVnZSAgICAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgc3lzdGVtLXRvb2xzLWJhLi4uIHwgICAgW10gW10gW10gIFtdICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gIFtdIHwKLSAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgW10gICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gICAgIHwKLSAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgIHwKLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgW10gICAgICAgW10gICAgIHwKLSAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgW10gICAgIFtdICAgICAgW10gW10gICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gICAgIHwKLSAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gICAgIHwKLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgW10gICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGEgcGwgcHQgcHRfQlIgcm0gcm8gcnUgcncgc2sgc2wgc3Egc3Igc3YgIHRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAwICA1IDc3IDMxICA1MyAgICA0IDU4IDcyICAzIDQ1IDQ2ICA5IDQ1IDEyMiAgMwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRnIHRoIHRrIHRyIHVrIHZlbiB2aSAgd2EgeGggemhfQ04gemhfSEsgemhfVFcgenUKLSAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgIENvbXBlbmRpdW0gICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOQotICAgICBhMnBzICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTkKLSAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxCi0gICAgIGFudC1waG9uZSAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKLSAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgKCkgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0Ci0gICAgIGFzcGVsbCAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgotICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKLSAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIGJpYnNoZWxmICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNwotICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDkKLSAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIwCi0gICAgIGJpc29uLXJ1bnRpbWUgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAotICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjgKLSAgICAgY2Zsb3cgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQotICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4Ci0gICAgIGNwaW8gICAgICAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBjcHBsaWIgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTIKLSAgICAgY3J5cHRvbml0ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIGRpYWxvZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAgOQotICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKLSAgICAgZG9vZGxlICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIGUyZnNwcm9ncyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAotICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKLSAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCi0gICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBmaW5kdXRpbHNfc3RhYmxlICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTgKLSAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIGZzbGludCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE2Ci0gICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDcKLSAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDI5Ci0gICAgIGdldHRleHQtcnVudGltZSAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgfCAyOAotICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjAKLSAgICAgZ2lwICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDEzCi0gICAgIGdsaXYgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTUKLSAgICAgZ211bHQgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDE2Ci0gICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAgZ251ZWR1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIGdudWxpYiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAotICAgICBnbnVuZXQgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKLSAgICAgZ251bmV0LWd0ayAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCi0gICAgIGdudXRscyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMTQKLSAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgNwotICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICAgICAgICAgIHwgMjEKLSAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDE2Ci0gICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMAotICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjIKLSAgICAgZ3BlLWZpbGVtYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGdwZS1nbyAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAxOQotICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gIFtdICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKLSAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDIxCi0gICAgIGdwZS1wYWNrYWdlICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTYKLSAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgICAgICAgICB8IDIxCi0gICAgIGdwZS10YXNrbWFuYWdlciAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMQotICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKLSAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICBbXSAgICAgW10gICAgICAgICAgW10gICAgICB8IDIxCi0gICAgIGdwZS10b2RvICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAotICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjEKLSAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCi0gICAgIGdwc2RyaXZlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyCi0gICAgIGdyZXRsICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBnc2FzbCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgIDkKLSAgICAgZ3NzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGdzdC1wbHVnaW5zLWJhZCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMwotICAgICBnc3QtcGx1Z2lucy1iYXNlICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEKLSAgICAgZ3N0LXBsdWdpbnMtZ29vZCAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgW10gICAgW10gICAgICB8IDE2Ci0gICAgIGdzdC1wbHVnaW5zLXVnbHkgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMwotICAgICBnc3RyZWFtZXIgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTgKLSAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGd0a2FtICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgotICAgICBndGtvcnBoYW4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKLSAgICAgZ3Rrc3BlbGwgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICBbXSAgICAgW10gICAgW10gICAgW10gICAgICB8IDI3Ci0gICAgIGd1dGVucHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBoZWxsbyAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMzgKLSAgICAgaGVycmllICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4Ci0gICAgIGh5bGFmYXggICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAotICAgICBpZHV0aWxzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUKLSAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI4Ci0gICAgIGlzb18xNTkyNCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAgNAotICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSBbXSBbXSBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICBbXSAgICAgIHwgNTQKLSAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA0Ci0gICAgIGlzb180MjE3ICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgIFtdICAgICAgICAgICAgfCAyNAotICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gIFtdICAgICBbXSAgICBbXSAgICAgICAgICAgIHwgMjYKLSAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIGp0YWcgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKLSAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzCi0gICAgIGtleXRvdWNoICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAotICAgICBrZXl0b3VjaC1lZGl0b3IgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAga2V5dG91Y2gta2V5Ym9hLi4uIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGxhdHJpbmUgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQotICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTAKLSAgICAgbGVhZnBhZCAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgW10gICAgICB8IDI0Ci0gICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOQotICAgICBsaWJleGlmICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKLSAgICAgbGliZXh0cmFjdG9yICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1Ci0gICAgIGxpYmdwZXdpZGdldCAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMAotICAgICBsaWJncGctZXJyb3IgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKLSAgICAgbGliZ3Bob3RvMiAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5Ci0gICAgIGxpYmdwaG90bzJfcG9ydCAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMQotICAgICBsaWJnc2FzbCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKLSAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICBbXSAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCi0gICAgIGxpYmlkbiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAxMQotICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKLSAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2Ci0gICAgIGxpbmdvdGVhY2ggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgotICAgICBscHJuZyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKLSAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIG00ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxOAotICAgICBtYWlsZnJvbWQgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4Ci0gICAgIG1ha2UgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyMAotICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKLSAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIG5hbm8gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAyMAotICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAKLSAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCi0gICAgIHBpbG90LXFvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQotICAgICBwb3B0ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMTgKLSAgICAgcHNtaXNjICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDEwCi0gICAgIHB3ZHV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBxb2YgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKLSAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgfCAyNQotICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTMKLSAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCi0gICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgIFtdIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyNgotICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjMKLSAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgW10gICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDI5Ci0gICAgIHNoYXJ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMwotICAgICBzaGlzaGkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKLSAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3Ci0gICAgIHNvbGZlZ2UgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMwotICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKLSAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCi0gICAgIHN5c3RlbS10b29scy1iYS4uLiB8ICAgIFtdICAgIFtdIFtdICAgICBbXSAgICAgW10gIFtdICAgICAgICAgIFtdICAgICAgfCAzOAotICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKLSAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgW10gICAgICAgICAgICAgICAgICB8IDE1Ci0gICAgIHRpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQotICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTkKLSAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCi0gICAgIHVuaWNvZGUtdHJhbnNsYS4uLiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgotICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAKLSAgICAgdXRpbC1saW51eC1uZyAgICAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCi0gICAgIHZvcmJpcy10b29scyAgICAgICB8ICAgICAgICAgICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAotICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKLSAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIzCi0gICAgIHdnZXQgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAyMAotICAgICB4Y2hhdCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgW10gICAgICAgICBbXSAgICAgICAgICBbXSAgICAgIHwgMjkKLSAgICAgeGtleWJvYXJkLWNvbmZpZyAgIHwgICAgICAgICAgW10gW10gICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0Ci0gICAgIHhwYWQgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgfCAxNQotICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICA3NiB0ZWFtcyAgICAgICAgICAgdGcgdGggdGsgdHIgdWsgdmVuIHZpICB3YSB4aCB6aF9DTiB6aF9ISyB6aF9UVyB6dQotICAgICAgMTYzIGRvbWFpbnMgICAgICAgICAgMCAgMyAgMSA3NCA1MSAgMCAgMTQzIDIxICAxICA1NyAgICAgNyAgICA0NSAgICAwICAyMDM2Ci0KLSAgIFNvbWUgY291bnRlcnMgaW4gdGhlIHByZWNlZGluZyBtYXRyaXggYXJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YKLXZpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCi11c2VkIGZvciBpbXBsZW1lbnRpbmcgcmVnaW9uYWwgdmFyaWFudHMgb2YgbGFuZ3VhZ2VzLCBvciBsYW5ndWFnZQotZGlhbGVjdHMuCi0KLSAgIEZvciBhIFBPIGZpbGUgaW4gdGhlIG1hdHJpeCBhYm92ZSB0byBiZSBlZmZlY3RpdmUsIHRoZSBwYWNrYWdlIHRvCi13aGljaCBpdCBhcHBsaWVzIHNob3VsZCBhbHNvIGhhdmUgYmVlbiBpbnRlcm5hdGlvbmFsaXplZCBhbmQKLWRpc3RyaWJ1dGVkIGFzIHN1Y2ggYnkgaXRzIG1haW50YWluZXIuICBUaGVyZSBtaWdodCBiZSBhbiBvYnNlcnZhYmxlCi1sYWcgYmV0d2VlbiB0aGUgbWVyZSBleGlzdGVuY2UgYSBQTyBmaWxlIGFuZCBpdHMgd2lkZSBhdmFpbGFiaWxpdHkgaW4gYQotZGlzdHJpYnV0aW9uLgotCi0gICBJZiBOb3ZlbWJlciAyMDA3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkKLW9mIHRoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QKLXVwLXRvLWRhdGUgbWF0cml4IHdpdGggZnVsbCBwZXJjZW50YWdlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGF0Ci1gaHR0cDovL3RyYW5zbGF0aW9ucHJvamVjdC5vcmcvZXh0cmEvbWF0cml4Lmh0bWwnLgotCi0xLjYgVXNpbmcgYGdldHRleHQnIGluIG5ldyBwYWNrYWdlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgeW91IGFyZSB3cml0aW5nIGEgZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtIGFuZCB3YW50IHRvCi1pbnRlcm5hdGlvbmFsaXplIGl0IHlvdSBhcmUgd2VsY29tZSB0byB1c2UgR05VIGBnZXR0ZXh0JyBpbiB5b3VyCi1wYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIHdoaWNoIGNvdmVycyB0aGUgdXNlIG9mIHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBUaGlzIG1lYW5zCi1pbiBwYXJ0aWN1bGFyIHRoYXQgZXZlbiBub24tZnJlZSBwcm9ncmFtcyBjYW4gdXNlIGBsaWJpbnRsJyBhcyBhIHNoYXJlZAotbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKLWxpYnJhcnkgb3IgdXNlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGBsaWJpbnRsJy4KLQotICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQotdGhlIHVzZSBvZiBgZ2V0dGV4dCcgdGhlIG9ubHkgdGhpbmcgbWlzc2luZyBhcmUgdGhlIHRyYW5zbGF0aW9ucy4gIFRoZQotRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBwYWNrYWdlcyB3aGljaCBhcmUgbm90Ci1kZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKLWFwcGxpZXMgYWxzbyBmb3IgZXZlcnkgb3RoZXIgRnJlZSBTb2Z0d2FyZSBQcm9qZWN0LiAgQ29udGFjdAotYGNvb3JkaW5hdG9yQHRyYW5zbGF0aW9ucHJvamVjdC5vcmcnIHRvIG1ha2UgdGhlIGAucG90JyBmaWxlcyBhdmFpbGFibGUKLXRvIHRoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KLQpkaWZmIC0tZ2l0IGEvQVVUSE9SUyBiL0FVVEhPUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZWY1YTMuLjAwMDAwMDAKLS0tIGEvQVVUSE9SUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLUVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAdGVtcGxlLWJhcHRpc3QuY29tPgotTWF0dCBIb3dlbGwgPG1ob3dlbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotQnJlbnQgQnJhZGJ1cm4gPGJicmFkYnVybkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1XaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotUmljaGFyZCBCb3VsdG9uIDxyaWNoYXJkQHRhcnRhcnVzLm9yZz4KLVphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotRGF2aWQgSS4gTGVobiA8ZGxlaG5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotQ2hyaXMgRW1lcnNvbiA8Y2hyaXNAdGFydGFydXMub3JnPgotSmVucyBUaGllbGUgPGthcm1lQHVuZm9yZ2V0dGFibGUuY29tPgotVGhvbWFzIE55YmVyZyA8dGhvbWFzQGNvZGVmYWN0b3J5LnNlPgotQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8VXJhZXVzQGxpbnV4cmlzaW5nLm9yZz4KLVRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotQ2FtZXJvbiBIdXRjaGlzb24gPGNhbWhAeGRuYS5uZXQ+Ci1EYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLUJlbmphbWluIE90dGUgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci1KYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLUFyd2VkIHYuIE1lcmthdHogPHYubWVya2F0ekBnbXgubmV0PgpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZGQzMGEuLjAwMDAwMDAKLS0tIGEvQ09QWUlORworKysgL2Rldi9udWxsCkBAIC0xLDUwNCArMCwwIEBACi0JCSAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0JCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQotCi0gQ29weXJpZ2h0IChDKSAxOTkxLCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwotIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi1bVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCi0gYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKLSB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KLQotCQkJICAgIFByZWFtYmxlCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKLWZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KLQotICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCi1zcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCi1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKLWNhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKLXRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCi1zdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KLQotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCi1ub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0Ci15b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlCi1mb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0Ci1pdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKLWl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbwotdGhlc2UgdGhpbmdzLgotCi0gIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKLWRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKLXJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgoteW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgotCi0gIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCi1vciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCi15b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCi1jb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCi1jb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMsIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KLXdpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCi1pdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KLQotICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCi1saWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAotcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCi0KLSAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0Ci10aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzCi1tb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKLXRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAotYXV0aG9yJ3MgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlCi1pbnRyb2R1Y2VkIGJ5IG90aGVycy4KLQwKLSAgRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YKLWFueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKLWVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQotcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQKLWFueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKLWNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgotCi0gIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCi1vcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKLUdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kCi1pcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQotdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQotbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCi0KLSAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKLWEgc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYQotY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5Ci1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQotZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uICBUaGUgTGVzc2VyIEdlbmVyYWwKLVB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCi10aGUgbGlicmFyeS4KLQotICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0Ci1kb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAotUHVibGljIExpY2Vuc2UuICBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzCi1vZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCi1hcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKLWxpYnJhcmllcy4gIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4KLXNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KLQotICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bwotZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKLWEgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKLWFsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiAgQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUKLWxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcwotY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCi1zb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotCi0gIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQotcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mCi1mcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCi1ub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKLW9wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nCi1zeXN0ZW0uCi0KLSAgQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUKLXVzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCi1saW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KLXRoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCi0KLSAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLW1vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQotIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKLWZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKLWJlIGNvbWJpbmVkIHdpdGggdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gcnVuLgotDAotCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCi0KLSAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCi1wcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgotb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgotdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgotRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCi0KLSAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQotcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCi0od2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgotCi0gIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCi13aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCi1MaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgotY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKLXBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKLXN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKLWluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCi0KLSAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKLW1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKLWFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCi1pbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KLWFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKLXJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KLXN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKLW9uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKLXdyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKLWFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgotICAKLSAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCi1jb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoteW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KLWFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0Ci1hbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQotd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKLUxpYnJhcnkuCi0KLSAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKLWFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKLWZlZS4KLQwKLSAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgotb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAotZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCi1hYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgotCi0gICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgotCi0gICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KLQotICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwotICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgotCi0gICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCi0gICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcwotICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKLSAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKLSAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKLSAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgotICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KLQotICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCi0gICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQotICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55Ci0gICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKLSAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQotICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCi0KLVRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKLWlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCi1hbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KLXRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKLXNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQotZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCi1vbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKLXRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCi1lbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKLWl0LgotCi1UaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKLXlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwotZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCi1jb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgotCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Ci13aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKLWEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCi10aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCi1MaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCi10aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCi10aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCi1pbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCi1vcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Ci10aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCi10aGVzZSBub3RpY2VzLgotDAotICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCi10aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAotc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KLQotICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKLXRoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KLQotICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgotZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KLXVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQotaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAotbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCi1tZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCi0KLSAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKLWZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCi1zb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KLWRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKLWNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCi0KLSAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKLUxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKLWxpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCi13b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCi10aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKLWNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAotY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKLWxpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgotU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCi0KLSAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKLXRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQotZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCi1XaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQotbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKLXRocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCi0KLSAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKLXN0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQotZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAotZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQotd29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKLUxpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCi0KLSAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKLWRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgotQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCi13aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCi0MCi0gIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCi1saW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQotd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKLXVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKLW1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQotZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCi0KLSAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCi1MaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKLXRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKLWR1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCi1jb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCi1kaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCi1vZiB0aGVzZSB0aGluZ3M6Ci0KLSAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwotICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgotICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCi0gICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKLSAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKLSAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQotICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCi0gICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKLSAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKLSAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgotICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQotCi0gICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCi0gICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEKLSAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKLSAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKLSAgICB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmCi0gICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCi0gICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCi0KLSAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAotICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwotICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKLSAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCi0KLSAgICBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQotICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQotICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KLQotICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQotICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgotCi0gIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQotTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKLXJlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAotdGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKLW5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgotY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgotd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwotdGhlIGV4ZWN1dGFibGUuCi0KLSAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKLXJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKLWFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKLXVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKLWRpc3RyaWJ1dGUuCi0MCi0gIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5Ci1mYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCi1saWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KLXRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQotcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKLQotICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCi0gICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQotICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICAgIFNlY3Rpb25zIGFib3ZlLgotCi0gICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKLSAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwotICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KLQotICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQotdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKLWF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgotZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCi1yaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCi1vciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCi10ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCi0KLSAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Ci1zaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgotZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCi1wcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Ci1tb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLUxpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCi1hbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQotTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKLW9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKLXN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKLXJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KLVlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGgKLXRoaXMgTGljZW5zZS4KLQwKLSAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKLWluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCi1jb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi1vdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90Ci1leGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAotZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwotTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQotbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAotbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQotYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCi10aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCi1yZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgotCi1JZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55Ci1wYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCi1hbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgotCi1JdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55Ci1wYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQotc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQotaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKLWltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQotZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAotdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKLXN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKLXRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAotaW1wb3NlIHRoYXQgY2hvaWNlLgotCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KLWJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgotY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCi1vcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKLWFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAotc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCi1leGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZgotd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Ci12ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCi1TdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCi1idXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLUVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKLXNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAotImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAotY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQotdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQotbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKLXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0MCi0gIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKLXByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKLXdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCi1jb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgotZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cwotb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKLWFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCi0KLQkJCSAgICBOTyBXQVJSQU5UWQotCi0gIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTwotV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KLUVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCi1PVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQotS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQotTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKLVRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KLQotICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgotV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKLUFORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCi1GT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCi1DT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQotTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORwotUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKLUZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKLVNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLURBTUFHRVMuCi0KLQkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQwKLSAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcwotCi0gIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKLXBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAotZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCi1yZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLW9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgotCi0gIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKLXNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Ci1jb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKLSJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCi0KLSAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgotICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0KLUFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgotCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKLQotICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQotICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgotCi0gIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAotICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQotCi1UaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQotCi0KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4MDY1ZC4uMDAwMDAwMAotLS0gYS9DaGFuZ2VMb2cKKysrIC9kZXYvbnVsbApAQCAtMSwxMjgwOTggKzAsMCBAQAotPT09IHJlbGVhc2UgMS4xMC40ID09PQotCi0yMDE3LTAyLTIzICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0Bjb2F4aW9uLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgcmVsZWFzaW5nIDEuMTAuNAotCi0yMDE3LTAyLTEwIDIwOjUwOjE3ICswOTAwICBTZXVuZ2hhIFlhbmcgPHNoLnlhbmdAbGdlLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBFeHRyYWN0IHJlZGlyZWN0aW9uIHVyaSBvbiBsaWJzb3VwJ3MgcmVzdGFydGVkIGNhbGxiYWNrCi0JICBMZXQgbGlic291cCBoYW5kbGUgcmVkaXJlY3Rpb24gYXV0b21hdGljYWxseS4KLQkgIEFuZCB0aGVuLCB0byBmaWd1cmUgb3V0IHJlZGlyZWN0aW9uIHVyaSwgZXh0cmFjdCBpdCBvbiAicmVzdGFydGVkIgotCSAgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBmaXJlZCBiZWZvcmUgc291cF9zZXNzaW9uX3NlbmQoKSBpcyByZXR1cm5lZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg0MjgKLQotMjAxNy0wMS0wMiAxOToyOTowNCAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBVcGRhdGUgaW1hZ2Ugc2l6ZSB3aGVuIGV4dHJhcG9sYXRpbmcKLQkgIFVwZGF0ZSB0aGUgaW1hZ2Ugc2l6ZSBhY2NvcmRpbmcgdGhlIGFtb3VudCBvZiBkYXRhIHdlIGFyZSBnb2luZyB0bwotCSAgcmVhZC93cml0ZS4gVGhpcyB3b3JrYXJvdW5kIGJ1Z3MgaW4gZHJpdmVyIHdoZXJlIHRoZSBzaXplaW1hZ2UgcHJvdmlkZWQKLQkgIGJ5IFRSWS9TX0ZNVCByZXByZXNlbnQgdGhlIGJ1ZmZlciBsZW5ndGggKG1heGltdW0gc2l6ZSkgcmF0aGVyIHRoZW4gdGhlIGV4cGVjdGVkCi0JICBieXRlc3VzZWQgKGJ1ZmZlciBzaXplKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU1NjQKLQotMjAxNy0wMi0xNyAxNTo1MDozMiAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBmaXggdHlwbyBpbiBfYWNxdWlyZV9mb3JtYXQoKSBlcnJvciBtZXNzYWdlcwotCSAgRml4ZXM6Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4ODE1Ci0KLTIwMTctMDItMTAgMTA6MzI6NTcgLTAzMDAgIEp1YW4gUGFibG8gVWdhcnRlIDx1Z2FydGVAZW5kbGVzc20uY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBtYXJrIHNpbmdsZXRvbiBjYXBzIGFzICJtYXkgYmUgbGVha2VkIiBvYmplY3RzLgotCSAgU2V0IE1BWV9CRV9MRUFLRUQgZmxhZyBvbiBzdGF0aWMgcGFkcyByZXR1cm5lZCBieSBnc3RfdjRsMl9vYmplY3RfZ2V0XypfY2FwcygpCi0JICBmdW5jdGlvbnMuIE1hZGUgZnVuY3Rpb25zIHRocmVhZCBzYWZlIGJ5IHVzaW5nIGdfb25jZV9pbml0W2VudGVyfGxlYXZlXQotCSAgZnVudGlvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NDUzCi0KLTIwMTctMDEtMTcgMTY6NDE6NTggKzAxMDAgIEplYW4tQ2hyaXN0b3BoZSBUcm90aW4gPGplYW4tY2hyaXN0b3BoZS50cm90aW5Ac3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiByZWZlcmVuY2UgbWVtb3J5IGJlZm9yZSB0aGUgYnVmZmVyIGlzIHF1ZXVlZAotCSAgSW4gZ3N0X3Y0bDJfYWxsb2NhdG9yX3FidWYoKSwgdGhlIG1lbW9yeSBpcyByZWZlcmVuY2VkIGFmdGVyIHRoZQotCSAgYnVmZmVyIGlzIHF1ZXVlZC4gT25jZSBxdWV1ZWQgKFZJRElPQ19RQlVGKSwgdGhlIGJ1ZmZlciBtaWdodCBiZSBoYW5kbGVkCi0JICBieSB0aGUgVjRMMiBkcml2ZXIgKGUuZy4gZGVjb2RlZCkgYW5kIGRlcXVldWVkIChnc3RfdjRsMl9hbGxvY2F0b3JfZHFidWYpLAotCSAgdGhyb3VnaCBhIGRpZmZlcmVudCB0aHJlYWQsIGJlZm9yZSB0aGUgbWVtb3J5IGlzIHJlZmVyZW5jZWQgKGdzdF9tZW1vcnlfcmVmKS4KLQkgIEluIHRoaXMgY2FzZSwgaW4gZ3N0X3Y0bDJfYWxsb2NhdG9yX2RxYnVmKCksIHRoZSBtZW1vcnkgaXMgdW5yZWZlcmVuY2VkCi0JICAoZ3N0X21lbW9yeV91bnJlZikgYmVmb3JlIGhhdmluZyBiZWVuIHJlZmVyZW5jZWQ6IHRoZSBtZW1vcnkgcmVmY291bnQKLQkgIHJlYWNoZXMgMCwgYW5kIHRoZSBtZW1vcnkgaXMgZnJlZWQuCi0JICBTbywgdG8gYXZvaWQgdGhpcyBjcm9zc2luZyBjYXNlLCBpbiBnc3RfdjRsMl9hbGxvY2F0b3JfcWJ1ZigpLCB0aGUKLQkgIG1lbW9yeSBzaGFsbCBiZSByZWZlcmVuY2VkIGJlZm9yZSB0aGUgYnVmZmVyIGlzIHF1ZXVlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzczOTkKLQotMjAxNi0xMi0xNCAxOToxNTowMyArMDEwMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsIDx2amFxdWV6QGlnYWxpYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IERvbid0IGNoZWNrIHNpemUgaW4gYSBub24tbGlzdCB2YWx1ZQotCSAgQWZ0ZXIgY29tbWl0IDFlYTk3MzVhIEkgc2VlIHRoZXNlIGVycm9yIHdoaWxlIHVzaW5nIHRoZSB3ZWJjYW0KLQkgIGludGVncmF0ZWQgaW4gbXkgbGFwdG9wOgotCSAgR1N0cmVhbWVyLUNSSVRJQ0FMICoqOiBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZTogYXNzZXJ0aW9uICdHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpJyBmYWlsZWQKLQkgIFRoZSBpc3N1ZSBpcyBnc3RfdjRsMnNyY192YWx1ZV9zaW1wbGlmeSgpIHdhcyBkb2luZyBpdHMgam9iIG9mCi0JICBnZW5lcmF0aW5nIGEgc2luZ2xlIHZhbHVlLCByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgbGlzdC4gVGhhdCB3aHksCi0JICB3aGVuIGdldHRpbmcgdGhlIGxpc3Qgc2l6ZSwgYSBjcml0aWNhbCB3YXJuaW5nIHdhcyByYWlzZWQuCi0JICBUaGlzIHBhdGNoIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB0byB2ZXJpZnkKLQkgIGZpcnN0IGlmIHRoZSBsaXN0IHdhcyBzaW1wbGlmaWVkLCB0aHVzIHVzZSBpdCBkaXJlY3RseSwgb3RoZXJ3aXNlLAotCSAgaWYgaXQgaXMgYSBsaXN0LCB2ZXJpZnkgaXRzIHNpemUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2MTA2Ci0KLTIwMTYtMTItMDYgMTc6NDI6MzEgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCBzZXQgZW1wdHkgaW50ZXJsYWNlLW1vZGUgbGlzdAotCSAgSWYgZm9yIHNvbWUgcmVhc29uIHdlIGZhaWwgdG8gcHJvYmUgZm9ybWF0cyAoYWxsIHRyeV9mbXQgY2FsbHMgZmFpbCwgZm9yCi0JICBleGFtcGxlKSwgdGhpcyBpcyBub3QgYSBjcml0aWNhbCBlcnJvciwgYnV0IHdlIGVuZCB1cCB3aXRoIGFuIGVtcHR5IGxpc3QKLQkgIG9mIGludGVybGFjZSBtb2Rlcy4gVGhpcyBjYXVzZXMgYWxsIHN1YnNlcXVlbnQgbmVnb3RpYXRpb24gdG8gZmFpbC4KLQkgIFRoaXMgcGF0Y2ggZml4ZXMgaW50ZXJsYWNlLW1vZGUgc2V0dGluZyB0byBiZSBza2lwcGVkIGlmIHdlIGZhaWxlZCB0bwotCSAgZGV0ZWN0IGFueS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzU3MDIKLQotMjAxNi0xMS0xNCAyMjozMzoyNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bkBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGNvbmZpZy5oLm1lc29uOgotCSAgbWVzb246IEFkZCBkZWZpbmUgZm9yIHY0bDItcHJvYmUgY29uZmlnIG9wdGlvbgotCi0yMDE3LTAxLTI0IDE5OjIzOjQ0IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogUHJvcGVybHkgdXNlICc6JyBmb3IgZGVmaW5pbmcga2V5d29yZHMKLQotMjAxNy0wMi0xNSAwMDoxMzozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogVXNlIElQX01VTFRJQ0FTVF9BTEwgZm9yIGZpbHRlcmluZyBJUHY0IHBhY2tldHMgaWYgYXZhaWxhYmxlCi0JICBUaGlzIGdvZXMgYXJvdW5kIHRoZSBpbmVmZmljaWVudCBjb250cm9sIG1lc3NhZ2UgYmFzZWQgZmlsdGVyaW5nIGFuZAotCSAgZG9lcyBhbGwgdGhlIGZpbHRlcmluZyBrZXJuZWwtc2lkZS4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIExpbnV4LW9ubHkgYW5kCi0JICB0aGVyZSBpcyBubyBJUHY2IHZhcmlhbnQgb2YgaXQgKHlldCkuCi0KLTIwMTctMDItMTAgMTA6NTM6MDUgKzAxMDAgIFPDuHJlbiBKdXVsIDx6cG9uLmRrQGdtYWlsLmNvbT4KLQotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOgotCSAgaWN5ZGVtdXg6IHJlc2V0IHRhZ3Mgb24gZW1wdHkgdmFsdWUKLQkgIFNvbWUgcmFkaW8gc3RyZWFtcyB1c2VzIFN0cmVhbVRpdGxlPScnIHRvIHJlc2V0IHRoZSB0aXRsZSBhZnRlciBhCi0JICB0cmFjayBzdG9wcGVkIHBsYXlpbmcsIGUuZy4gd2hpbGUgdGhlIGhvc3QgdGFsa3MgYmV0d2VlbiB0cmFja3Mgb3IKLQkgIGR1cmluZyBuZXdzIHNlZ21lbnRzLgotCSAgVGhpcyBjaGFuZ2UgZm9yY2VzIGFuIGVtcHR5IHRhZyBvYmplY3QgdG8gYmUgZGlzdHJpYnV0ZWQgaWYKLQkgIFN0cmVhbVRpdGxlIG9yIFN0cmVhbVVybCBpcyByZWNlaXZlZCB3aXRoIGVtcHR5IHZhbHVlLCB0aHVzIGFsbG93aW5nCi0JICBkb3duc3RyZWFtIGVsZW1lbnRzIHRvIGdldCBub3RpZmllZCBhYm91dCB0aGlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODQzNwotCi0yMDE3LTAyLTA3IDEzOjEwOjE4ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHBhcnRyZWFkZXIuYzoKLQkgIHNwbGl0bXV4c3JjOiBBbGxvdyBmb3IgYnVmZmVycyBiZWZvcmUgdGhlIHNlZ21lbnQgd2hlbiBtZWFzdXJpbmcKLQkgIFVzZWQgc2lnbmVkIGNhbGN1bGF0aW9ucyB3aGVuIG1lYXN1cmluZyB0aGUgbWF4X3RzIG9mIGFuIGlucHV0Ci0JICBmcmFnbWVudCwgc28gYXMgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IGR1cmF0aW9uIGFuZCBvZmZzZXQKLQkgIHdoZW4gYnVmZmVycyBoYXZlIHRpbWVzdGFtcHMgcHJlY2VkaW5nIHRoZWlyIHNlZ21lbnQKLQotMjAxNy0wMS0zMCAyMDoyMDowOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzYW5pdHkgY2hlY2sgbnVtYmVyIG9mIHNlZ21lbnRzIGluIGVkaXQgbGlzdAotCSAgRml4ZXMgY3Jhc2ggd2l0aCBmdXp6ZWQgZmlsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzc5NDAKLQotPT09IHJlbGVhc2UgMS4xMC4zID09PQotCi0yMDE3LTAxLTMwIDE2OjI3OjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMS4xMC4zCi0KLTIwMTctMDEtMzAgMTU6NDI6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTctMDEtMzAgMTM6MzM6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2VsLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNy0wMS0yNyAxNjoxNDoxNiArMDIwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAdG9vbHNvbmFpci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkgIHF0bXV4OiBUaW1lY29kZSB0cmFjayBmaXhlcyBmb3IgU1RTRCBlbnRyeQotCSAgVGhlIG5fZnJhbWVzIGZpZWxkIChmcmFtZXMgcGVyIHNlY29uZCkgc2hvdWxkIGZvbGxvdyB0aGUgbm9taW5hbCBmcmFtZQotCSAgcmF0ZSBmb3IgZHJvcC1mcmFtZSB0aW1lY29kZXMuCi0JICBBbHNvLCB0aGUgdHJhaydzIHRpbWVzY2FsZSAoYW5kIGR1cmF0aW9uLCBhY2NvcmRpbmdseSkgc2hvdWxkIGZvbGxvdyB0aGUKLQkgIFNUU0QgZW50cnkncyB0aW1lc2NhbGUgYW5kIGZyYW1lIGR1cmF0aW9uIChmcHNfbiBhbmQgZnBzX2QgYWNjb3JkaW5nbHkpLAotCSAgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzgzMgotCi0yMDE3LTAxLTE5IDExOjA4OjExICswMTAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiByZXRyeSByZXF1ZXN0IG9uIGVhcmx5IHRlcm1pbmF0aW9uIGZyb20gdGhlIHNlcnZlcgotCSAgRml4IGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCAxODM2OTVjNjFhNTRmMSAocmVmYWN0b3IgdG8gdXNlCi0JICBTb3VwJ3Mgc3luYyBBUEkpLiBUaGUgY29kZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZWNvbm5lY3Qgd2hlbiB0aGUKLQkgIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gZWFybHksIGZvciBleGFtcGxlIHdoZW4gdGhlIHN0cmVhbSB3YXMgcHV0Ci0JICBpbiBwYXVzZSBmb3Igc29tZSB0aW1lLgotCSAgUmVpbnRyb2R1Y2UgdGhpcyBmZWF0dXJlIGJ5IGNoZWNraW5nIGlmIEVPUyBpcyByZWNlaXZlZCBiZWZvcmUgdGhlCi0JICBleHBlY3RlZCBjb250ZW50IHNpemUgaXMgZG93bmxvYWRlZC4gSW4gdGhpcyBjYXNlLCBkbyB0aGUgcmVxdWVzdAotCSAgc3RhcnRpbmcgYXQgdGhlIHByZXZpb3VzIHJlYWQgcG9zaXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2NzIwCi0KLTIwMTctMDEtMTAgMDk6NDA6NTYgLTA3MDAgIE1hdHQgU3RhcGxlcyA8c3RhcGxlczI1NUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpbmRfc3RyZWFtX2J5X2NoYW5uZWwgc2hvdWxkIGlnbm9yZSB1bmNvbmZpZ3VyZWQgc3RyZWFtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzEwMQotCi0yMDE3LTAxLTI1IDE4OjQzOjAwICswMDAwICBCcmVuZGFuIFNoYW5rcyA8YnJlbmRhbi5zaGFua3NAdGVyYWRlay5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGaXggZGVidWcgdHlwbyBhbmQgcmVtb3ZlIG1pc2xlYWRpbmcgd2FybmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzM2MgotCi0yMDE3LTAxLTI2IDEzOjU0OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmM6Ci0JICBSZXZlcnQgImF1dG9kZXRlY3Q6IGJyaW5nIHRoZSBlbGVtZW50IHN0YXRlIGRvd24gYWZ0ZXIgc3VjY2VzcyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNjdmNmQzMzU4ZTQ2MjAzMTkzMzUwNjVkYjI1ZWRhYWJhMWY1YWUwYS4KLQkgIEl0IGNhdXNlcyBwcm9ibGVtcyBpbiBjZXJ0YWluIHNjZW5hcmlvcyBhbmQgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0OTQ3I2M5Ci0KLTIwMTctMDEtMDkgMTE6MzI6MzUgKzA1MzAgIFJhaHVsIEJlZGFya2FyIDxyYWh1bC5iZWRhcmthckBpbWd0ZWMuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBjaGVjayBmb3Igbm90IE5VTEwgYmVmb3JlIGNsZWFyaW5nIGFkYXB0ZXIKLQkgIEluIGNhc2Ugd2F2cGFyc2UgcmVjZWl2ZXMgYSBtYW51YWxseSBpbmplY3RlZCBGTFVTSF9TVE9QIGV2ZW50Ci0JICB3aGlsZSBvcGVyYXRpbmcgaW4gcHVsbCBtb2RlIHdlIGdldCBjcml0aWNhbHMgYmVjYXVzZSB3ZSdkIHRyeQotCSAgdG8gY2xlYXIgYSBOVUxMIGFkYXB0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3MTIzCi0KLTIwMTctMDEtMjAgMTc6MTY6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBTdG9wIHJlYWRpbmcgYSBuY2R0IHN1Yi10YWcgaWYgaXQgZ29lcyBiZWhpbmQgdGhlIHN1cnJvdW5kaW5nIHRhZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzUzMgotCi0yMDE3LTAxLTIwIDA3OjU4OjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogRml4IHZhcmlvdXMgb3V0IG9mIGJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgbmNkdCB0YWdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NTAwCi0KLTIwMTctMDEtMTkgMTM6NDY6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogSW5jcmVtZW50IGN1cnJlbnQgc3R0cyBpbmRleCB3aGVuZXZlciB3ZSBmaW5pc2hlZCBvbmUgc3R0cyBlbnRyeQotCSAgT3RoZXJ3aXNlIHdlIGNvdWxkIHJlYWQgbW9yZSBjaHVua3MgdGhhbiB0aGVyZSBhcmUgYXZhaWxhYmxlLCBkb2luZyBhbgotCSAgb3V0IG9mIGJvdW5kcyByZWFkIGFuZCBwb3RlbnRpYWxseSBjcmFzaC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzc0NjkKLQotMjAxNy0wMS0xOSAxMzoyNTo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBSZXZlcnQgInF0ZGVtdXg6IEluY3JlbWVudCBjdXJyZW50IHN0dHMgaW5kZXggaW4gYWxsIGNvZGUgcGF0aHMgYWZ0ZXIgcmVhZGluZyBvbmUgY2h1bmsiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDk5ZDVkNzU3MGQwYjUzZGFkM2JjOGViNjUzYjEzMjBlZTQyMmFhY2UuIEl0IGJyb2tlCi0JICBwbGF5YmFjayBvZiB2YXJpb3VzIHZhbGlkIGZpbGVzLgotCi0yMDE3LTAxLTE5IDA3OjUyOjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEluY3JlbWVudCBjdXJyZW50IHN0dHMgaW5kZXggaW4gYWxsIGNvZGUgcGF0aHMgYWZ0ZXIgcmVhZGluZyBvbmUgY2h1bmsKLQkgIE90aGVyd2lzZSB3ZSBjb3VsZCByZWFkIG1vcmUgY2h1bmtzIHRoYW4gdGhlcmUgYXJlIGF2YWlsYWJsZSwgZG9pbmcgYW4KLQkgIG91dCBvZiBib3VuZHMgcmVhZCBhbmQgcG90ZW50aWFsbHkgY3Jhc2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NDY5Ci0KLTIwMTctMDEtMTMgMTY6NDA6NDMgKzAxMDAgIEFybmF1ZCBWcmFjIDxhdnJhY0BmcmVlYm94LmZyPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IHByb3Blcmx5IHRyYWNrIHJlZGlyZWN0aW9ucwotCSAgVGhlIGN1cnJlbnQgY29kZSBjb25maWd1cmVzIGxpYnNvdXAgdG8gaGFuZGxlIHJlZGlyZWN0aW9ucwotCSAgdHJhbnNwYXJlbnRseSwgd2l0aG91dCBpbmZvcm1pbmcgdGhlIGNhbGxlciwgdGh1cyBwcmV2ZW50aW5nIHRoZSBlbGVtZW50Ci0JICB0byByZWNvcmQgdGhlIHJlZGlyZWN0IGNvZGUgYW5kIGxvY2F0aW9uIHVyaS4KLQkgIEZpeCB0aGlzIGJ5IGFsd2F5cyBzZXR0aW5nIHRoZSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1QsIHByZXZlbnRpbmcKLQkgIGxpYnNvdXAgZnJvbSBoYW5kbGluZyB0aGUgcmVkaXJlY3Rpb24uIFdoZW4gd2UgcmVjZWl2ZSBhIHJlZGlyZWN0aW9uCi0JICByZXF1ZXN0IGFuZCBsaWJzb3VwIGNhbiBzYWZlbHkgaGFuZGxlIGl0LCByZXR1cm4gYSBjdXN0b20gZXJyb3Igd2hpY2gKLQkgIHRyaWdnZXJzIGEgcmV0cnkgd2l0aCB0aGUgbmV3IFVSSS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzcyMjIKLQotMjAxNy0wMS0xMyAwMDowMTowNiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBEb24ndCByZXNldCByZXF1ZXN0IHBhZCBudW1iZXJpbmcgYWNyb3NzIHVzZXMKLQkgIFdoZW4gcmVzZXQsIGRvbid0IHJlc3RhcnQgcmVxdWVzdCBwYWQgbnVtYmVyaW5ncywgYXMKLQkgIHJlcXVlc3QgcGFkcyBjYW4gc3Vydml2ZSBhY3Jvc3Mgc3RhdGUgY2hhbmdlcy4gT25seQotCSAgcmVzdGFydCBhdCAwIGlmIGFsbCByZXF1ZXN0IHBhZHMgYXJlIGhhbmRlZCBiYWNrIGZpcnN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzE3NAotCi0yMDE3LTAxLTExIDE3OjUzOjMyIC0wODAwICBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZyZWUgc2VxaCBhZnRlciBjYWxsaW5nIHF0ZGVtdXhfcGFyc2Vfc3ZxM19zdHNkX2RhdGEoKQotCSAgVGhlIHNlcWggYnVmZmVyIGFsbG9jYXRlZCBpbiBxdGRlbXV4X3BhcnNlX3N2cTNfc3RzZF9kYXRhKCkgbmVlZHMgdG8KLQkgIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXIgdXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NzE1NwotCSAgU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KLQotMjAxNy0wMS0xNiAxNToxNzoxNSArMDEwMCAgSmVhbi1DaHJpc3RvcGhlIFRyb3RpbiA8amVhbi1jaHJpc3RvcGhlLnRyb3RpbkBzdC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IGZpeCBtZW1vcnkgdHlwZSBpbiBhbGxvY2F0b3IgcHJvYmUKLQkgIFRoZSBidWZmZXIgbWVtb3J5IHR5cGUgcHJvdmlkZWQgdG8gdGhlIFZJRElPQ19DUkVBVEVfQlVGUyBpb2N0bCBzaGFsbAotCSAgYmUgc2V0IHdpdGggdGhlIHZhbHVlICgibWVtb3J5IikgZ2l2ZW4gYXMgaW5wdXQgcGFyYW1ldGVyIG9mIHRoZQotCSAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3Byb2JlKCkgZnVuY3Rpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3MzI3Ci0KLTIwMTYtMTEtMTEgMTQ6MzE6MDMgKzExMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5jOgotCSAgYXV0b2RldGVjdDogYnJpbmcgdGhlIGVsZW1lbnQgc3RhdGUgZG93biBhZnRlciBzdWNjZXNzCi0JICBPdGhlcndpc2Ugc29tZSBtZXNzYWdlcyB0aGF0IGFyZSBlbWl0dGVkIGJ5IHRoZSBlbGVtZW50IG9uIE5VTEwtPlJFQURZCi0JICB3aWxsIG5vdCByZWFjaCB0aGUgYXBwbGljYXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0OTQ3Ci0KLTIwMTYtMDQtMjQgMjE6Mzg6NTEgKzA5MDAgIFNldW5naGEgWWFuZyA8c2gueWFuZ0BsZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCBrZXlfdGltZSBpbiBnc3RfcXRkZW11eF9hZGp1c3Rfc2VlaygpCi0JICB0aW1lIGluIHNlZ21lbnQgc2hvdWxkIGJlIFBUUyBiYXNlZCAobm90IERUUykuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NDk4Ci0KLTIwMTctMDEtMDcgMjM6NTU6NDIgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IERvbid0IHJlc2V0IG91dHB1dCB0aW1lc3RhbXBzIHdoZW4gbm8gdGZkdAotCSAgSWYgYSBmcmFnbWVudGVkIHN0cmVhbSBkb2Vzbid0IGhhdmUgYSB0ZmR0LCBkb24ndAotCSAgcmVzZXQgdGhlIG91dHB1dCB0aW1lc3RhbXBzIGF0IGVhY2ggZnJhZ21lbnQgYm91bmRhcnkKLQkgIGJ5IGVycm9uZW91c2x5IHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDAuIEludHJvZHVjZWQKLQkgIGJ5IGNvbW1pdCA2OWZjNDgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQyMzAKLQotMjAxNi0xMi0xNCAyMTo0NToxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBkYXRhIGF2YWlsYWJsZSB3aGVuIHBhcnNpbmcgZWRpdCBsaXN0cwotCSAgQWxzbyBjb25zdW1lIHRoZSBkYXRhIGVudHJ5IGJ5IGVudHJ5IHRvIGdldCBjb21wbGljYXRlZCBpbmRleGluZyBvdXQgb2YKLQkgIHRoZSBjb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NjEwNwotCi0yMDE2LTEyLTE0IDEwOjE1OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IENoZWNrIHRoYXQgdGhlIFhpVGggc2l6ZSBpcyBiaWcgZW5vdWdoCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1Nzk0Ci0KLTIwMTYtMTItMDkgMjA6Mjc6NTMgKzA5MDAgIEhlZWt5b3VuZyBTZW8gPGhlZWt5b3VuZy5zZW9AbGdlLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBDaGVjayBub2RlIGxlbmd0aCBvZiB2aWRlbyBzYW1wbGUgZGVzY3JpcHRpb24KLQkgIEFkZCBjaGVjayBmb3Igbm9kZSBsZW5ndGggb2YgdmlkZW8gc2FtcGxlIGRlc2NyaXB0aW9uIGFuZCBpdHMgZmllbGRzIGFuZAotCSAgZm9yIHRoZSBYaVRoIGF0b20uCi0JICBBbHNvIHVuaWZ5IHRoZSBjb2RlIGEgYml0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTc5NAotCi0yMDE2LTEyLTExIDEzOjI3OjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBFbnN1cmUgdG8gcmVpbml0IGJ1ZmZlcnMgd2hlbmV2ZXIgdGhleSB3ZXJlIG5vdCBhbGxvY2F0ZWQgeWV0Ci0JICBUaGF0IGlzLCB3aGVuZXZlciB3ZSBnbyB0aHJvdWdoIHN0YXJ0L3N0b3Agd2UgaGF2ZSB0byBlbnN1cmUgdGhhdCBvbiB0aGUKLQkgIG5leHQgb3Bwb3J0dW5pdHkgdGhlIGJ1ZmZlcnMgYXJlIHJlYWxsb2NhdGVkIGFnYWluLiBPdGhlcndpc2UgdGhlCi0JICBidWZmZXJzIG1pZ2h0IGJlIE5VTEwgYmVjYXVzZSB0aGUgZWxlbWVudCB3YXMgcmV1c2VkIHdpdGggdGhlIHNhbWUKLQkgIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlIChpLmUuIHNldF9jYXBzKCkgd291bGRuJ3QgaGF2ZSByZWluaXRlZCB0aGUKLQkgIGJ1ZmZlcnMpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTg5OAotCi0yMDE2LTEyLTA5IDE3OjU1OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuaDoKLQkgIGZseGRlYzogT25seSBzZW5kIFNFR01FTlQgZXZlbnRzIGFmdGVyIENBUFMKLQkgIEkuZS4sIGRvbid0IGp1c3QgZm9yd2FyZCB0aGUgZXZlbnQgYnV0IGRlbGF5IGl0IGlmIHdlIGRvbid0IGhhdmUgY2FwcyBvbgotCSAgdGhlIHNyY3BhZCB5ZXQuCi0KLTIwMTYtMTItMDkgMTc6NDk6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JICBmbHhkZWM6IFVucmVmIGFuZCB1bm1hcCBidWZmZXJzIGluIGFsbCBjb2RlIHBhdGhzIGFzIG5lZWRlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTg4OAotCi0yMDE2LTEyLTA2IDA3OjQ4OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiBBbGxvY2F0ZSAwLWluaXRpYWxpemVkIG1lbW9yeSBmb3IgdGhlIGRlY29kZWQgZnJhbWUKLQkgIE90aGVyd2lzZSB3ZSBtaWdodCBsZWFrIGFyYml0cmFyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1bmluaXRpYWxpemVkCi0JICBtZW1vcnkgaWYgbm90IGV2ZXJ5IHBpeGVsIGlzIHdyaXR0ZW4uCi0JICBodHRwczovL3NjYXJ5YmVhc3RzZWN1cml0eS5ibG9nc3BvdC5nci8yMDE2LzEyLzFkYXlzLTBkYXlzLXBvY3MtbW9yZS1nc3RyZWFtZXItZmxpYy5odG1sCi0KLTIwMTYtMTItMDUgMDc6NTc6MTkgLTA3MDAgIE1hdHQgU3RhcGxlcyA8c3RhcGxlczI1NUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IEZpeCBzZXNzaW9uIGNsZWFudXAgd2hlbiBoYW5kbGluZyByZWRpcmVjdCBvbiBQTEFZCi0JICBSZWRpcmVjdCBvbiBQTEFZIHdhc24ndCBkb2luZyB0aGUgbmVjZXNzYXJ5IHNlc3Npb24gY2xlYW51cC4gRml4ZWQgYnkKLQkgIHJlbW92aW5nIGNvZGUgZnJvbSBnc3RfcnRzcHNyY19zZW5kIHRoYXQgY2hhbmdlZCB0aGUgc3RhdGUgdmFyYWJsZSB1cG9uCi0JICBlbmNvdW50ZXJpbmcgYSByZWRpcmVjdC4gQmV0dGVyIHRvIGxldCB0aGUgcmVkaXJlY3QgaGFuZGxlcnMgaW4KLQkgIGdzdF9ydHNwc3JjX3JldHJpZXZlX3NkcCBhbmQgZ3N0X3J0c3BzcmNfcGxheSBkbyB0aGVpciBvd24KLQkgIHN0YXRlLWRlcGVuZGVudCBjbGVhbnVwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTU0MwotCi0yMDE2LTEyLTAxIDE3OjA4OjA5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBEb24ndCBsZWFrIGR1cGxpY2F0ZSBpdGVtcwotCSAgV2hlbiBwcm92aWRpbmcgaXRlbXMgd2l0aCBhIHNlcW51bSwgdGhlcmUgaXMgYSAodmVyeSBzbWFsbCkgcHJvYmFiaWxpdHkKLQkgIHRoYXQgYW4gZWxlbWVudCB3aXRoIHRoZSBzYW1lIHNlcW51bSBhbHJlYWR5IGV4aXN0cy4gRG9uJ3QgZm9yZ2V0Ci0JICB0byBmcmVlIHRoYXQgaXRlbSBpZiBpdCB3YXNuJ3QgaW5zZXJ0ZWQuCi0JICBBbmQgYXZvaWQgcmV0dXJuaW5nIHVuZGVmaW5lZCB2YWx1ZXMgd2hlbiBkZWFsaW5nIHdpdGggZHVwbGljYXRlIGl0ZW1zCi0KLTIwMTYtMTEtMDMgMTU6MDM6NTkgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IHRpbWVyLXJldXNlIGJ1ZwotCSAgV2hlbiBkb2luZyBydHgsIHRoZSBqaXR0ZXJidWZmZXIgd2lsbCBhbHdheXMgYWRkIGFuIHJ0eC10aW1lciBmb3IgdGhlIG5leHQKLQkgIHNlcXVlbmNlIG51bWJlci4KLQkgIEluIHRoZSBjYXNlIG9mIHRoZSBwYWNrZXQgY29ycmVzcG9uZGluZyB0byB0aGF0IHNlcXVlbmNlIG51bWJlciBhcnJpdmluZywKLQkgIHRoYXQgc2FtZSB0aW1lciB3aWxsIGJlIHJldXNlZCwgYW5kIHNpbXBseSBtb3ZlZCBvbiB0byB3YWl0IGZvciB0aGUKLQkgIGZvbGxvd2luZyBzZXF1ZW5jZSBudW1iZXIgZXRjLgotCSAgT25jZSBhbiBydHgtdGltZXIgZXhwaXJlcyAoYWZ0ZXIgYWxsIHJldHJpZXMpLCBpdCB3aWxsIGJlIHJlc2NoZWR1bGVkIGFzCi0JICBhIGxvc3QtdGltZXIgaW5zdGVhZCBmb3IgdGhlIHNhbWUgc2VxdWVuY2UgbnVtYmVyLgotCSAgTm93LCBpZiB0aGlzIHBhcnRpY3VsYXIgc2VxdWVuY2UtbnVtYmVyIG5vdyBhcnJpdmVzIChhZnRlciB0aGUgdGltZXIgaGFzCi0JICBiZWNvbWUgYSBsb3N0LXRpbWVyKSwgdGhlIHJldXNlIG1lY2hhbmlzbSAqc2hvdWxkKiBub3cgc2V0IGEgbmV3Ci0JICBydHgtdGltZXIgZm9yIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciwgYnV0IHRoZSBidWcgaXMgdGhhdCBpdCBkb2VzCi0JICBub3QgY2hhbmdlIHRoZSB0aW1lci10eXBlLCBhbmQgaGVuY2Ugc2NoZWR1bGVzIGEgbG9zdC10aW1lciBmb3IgdGhhdAotCSAgZm9sbG93aW5nIHNlcXVlbmNlIG51bWJlciwgd2l0aCB0aGUgcmVzdWx0IHRoYXQgeW91IHdpbGwgaGF2ZSBhIHZlcnkKLQkgIGVhcmx5IGxvc3QtZXZlbnQgZm9yIGEgcGFja2V0IHRoYXQgbWlnaHQgc3RpbGwgYXJyaXZlLCBhbmQgeW91IHdpbGwKLQkgIG5ldmVyIGJlIGFibGUgdG8gc2VuZCBhbnkgcnR4IGZvciB0aGlzIHBhY2tldC4KLQkgIEZvdW5kIGJ5IEVybGVuZCBHcmFmZiAtIGVybGVuZEBwZXhpcC5jb20KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM4OTEKLQotMjAxNi0xMC0wOSAxNTo1OTowNSArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IGxvc3QtZXZlbnQgdXNpbmcgZHRzIGluc3RlYWQgb2YgcHRzCi0JICBUaGUgbG9zdC1ldmVudCB3YXMgdXNpbmcgYSBkaWZmZXJlbnQgdGltZS1kb21haW4gKGR0cykgdGhhbiB0aGUgb3V0Z29pbmcKLQkgIGJ1ZmZlcnMgKHB0cykuIEdpdmVuIGNlcnRhaW4gbmV0d29yay1jb25kaXRpb25zIHRoZXNlIHR3byB3b3VsZCBiZWNvbWUKLQkgIHN1ZmZpY2llbnRseSBkaWZmZXJlbnQgYW5kIHRoZSBsb3N0LWV2ZW50IGNvbnRhaW5lZCB0aW1lc3RhbXAvZHVyYXRpb24KLQkgIHRoYXQgd2FzIHJlYWxseSB3cm9uZy4gQXMgYW4gZXhhbXBsZSBHc3RBdWRpb0RlY29kZXIgY291bGQgcHJvZHVjZQotCSAgYSBzdHJlYW0gdGhhdCBqdW1wcyBiYWNrIGFuZCBmb3J0aCBpbiB0aW1lIGFmdGVyIHJlY2VpdmluZyBhIGxvc3QtZXZlbnQuCi0JICBUaGUgcHJldmlvdXMgYmVoYXZpb3IgY2FsY3VsYXRlZCB0aGUgcHRzIChiYXNlZCBvbiB0aGUgcnRwdGltZSkgaW5zaWRlIHRoZQotCSAgcnRwX2ppdHRlcl9idWZmZXJfaW5zZXJ0IGZ1bmN0aW9uLCBidXQgbm93IHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbgotCSAgcmVmYWN0b3JlZCBpbnRvIGEgbmV3IGZ1bmN0aW9uIHJ0cF9qaXR0ZXJfYnVmZmVyX2NhbGN1bGF0ZV9wdHMgdGhhdCBpcwotCSAgY2FsbGVkIG11Y2ggZWFybGllciBpbiB0aGUgX2NoYWluIGZ1bmN0aW9uIHRvIG1ha2UgcHRzIGF2YWlsYWJsZSB0bwotCSAgdmFyaW91cyBjYWxjdWxhdGlvbnMgdGhhdCB3cm9uZ2x5IHVzZWQgZHRzIHByZXZpb3VzbHkKLQkgIChsaWtlIHRoZSBsb3N0LWV2ZW50KS4KLQkgIFRoZXJlIGFyZSBob3dldmVyIHR3byBjYWxjdWxhdGlvbnMgd2hlcmUgdXNpbmcgZHRzIGlzIHRoZSByaWdodCB0aGluZyB0bwotCSAgZG86IGNhbGN1bGF0aW5nIHRoZSByZWNlaXZlLWppdHRlciBhbmQgdGhlIHJ0eC1yb3VuZC10cmlwLXRpbWUsIHdoZXJlIHRoZQotCSAgYXJyaXZhbCB0aW1lIG9mIHRoZSBidWZmZXIgZnJvbSB0aGUgbmV0d29yayBpcyB0aGUgcmlnaHQgbWV0cmljCi0JICAoYW5kIGlzIHdoYXQgZHRzIGluIGZhY3QgaXMgdG9kYXkpLgotCSAgVGhlIHBhdGNoIGFsc28gYWRkcyB0d28gdGVzdHMgcmVnYXJkaW5nIEItZnJhbWVzIG9yIHRoZQotCSAg4oCccnRwdGltZS1nb2luZy1iYWNrd2FyZHPigJ0tc2NlbmFyaW8sIGFzIHRoZXJlIHdlcmUgc29tZSBjb25jZXJucyB0aGF0IHRoaXMKLQkgIHBhdGNoIG1pZ2h0IGJyZWFrIHRoaXMgYmVoYXZpb3IgKHdoaWNoIHRoZSB0ZXN0cyBzaG93cyBpdCBkb2VzIG5vdCkuCi0KLTIwMTYtMTEtMDMgMTY6MzM6NTMgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IGJ1ZyBpbiByZXNjaGVkdWxlX3RpbWVyCi0JICBUaGUgbmV3IHRpbWVvdXQgaXMgYWx3YXlzIGdvaW5nIHRvIGJlICh0aW1lb3V0ICsgZGVsYXkpLCBob3dldmVyLCB0aGUKLQkgIG9sZCBiZWhhdmlvciBjb21wYXJlZCB0aGUgY3VycmVudCB0aW1lb3V0IHRvIGp1c3QgKHRpbWVvdXQpLCBiYXNpY2FsbHkKLQkgIGJlaW5nIChkZWxheSkgb2ZmLgotCSAgVGhpcyB3b3VsZCBoYXBwZW4gaWYgcnR4LWRlbGF5ID09IHJ0eC1yZXRyeS10aW1lb3V0LCB3aXRoIHRoZSByZXN1bHQgdGhhdAotCSAgYSBzZWNvbmQgcnR4IGF0dGVtcHQgZm9yIGFueSBidWZmZXJzIHdvdWxkIGJlIHNjaGVkdWxlZCBpbW1lZGlhdGVseSBpbnN0ZWFkCi0JICBvZiBhZnRlciBydHgtZGVsYXkgbXMuCi0JICBTaW1wbHkgY2FsY3VsYXRlIChuZXdfdGltZW91dCA9IHRpbWVvdXQgKyBkZWxheSkgYW5kIHRoZW4gdXNlIHRoYXQgaW5zdGVhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM5MDUKLQotMjAxNi0xMi0wMSAxNTowNjowNiArMDUzMCAgR2FyaW1hIEdhdXIgPGdhcmltYS5nQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzYmNkZXBheS5jOgotCSAgcnRwOiBGaXggc29tZSBtZW1vcnkgbGVha3MgaW4gdXNhZ2Ugb2YgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzUwNzEKLQotMjAxNi0xMi0wMSAxMToyMzowMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBTYW5pdGl6ZSB1bmtub3duIGNvZGVjIGNhcHMKLQkgIFdlIG1pZ2h0IGhhdmUgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoZSB1bmtub3duIGZvdXJjYywgcmVwbGFjZQotCSAgdGhlbSB3aXRoICdfJywgaW4gdGhlIHNhbWUgd2F5IHdlIGRvIGl0IGZvciB1bmtub3duIHRhZ3MuCi0KLTIwMTYtMTItMDEgMjA6MDQ6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBGcmVlIHZwcnAgY2h1bmsgYWxzbyBpZiBpdCBleGlzdGVkIGJ1dCB3ZSBtYWRlIG5vIHVzZSBvZiBpdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTQ3OQotCi0yMDE2LTEyLTAxIDE3OjM4OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IEZpeCBtZW1vcnkgbGVhayB3aGVuIHBhcnNpbmcgYXR0YWNobWVudHMKLQkgIGdzdF90YWdfaW1hZ2VfZGF0YV90b19pbWFnZV9zYW1wbGUoKSBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUKLQkgIHBhc3NlZCBtZW1vcnksIHNvIGRvbid0IHNldCBpdCB0byBOVUxMIHRvIGFsbG93IHVzIHRvIGZyZWUgaXQgbGF0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDcyCi0KLTIwMTYtMTItMDEgMTQ6NTY6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2FkZW11eDogVW5pZnkgemxpYi9iemlwMiBkZWNvbXByZXNzIGxvb3BzIHdpdGggdGhlIG9uZXMgZnJvbSBxdGRlbXV4Ci0JICBFc3BlY2lhbGx5LCBzaW1wbGlmeSB0aGUgY29kZSBhIGJpdC4KLQotMjAxNi0xMi0wMSAxNDo0MTo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBJbmNyZWFzZSBpbmZsYXRlIGJ1ZmZlciBpbiBiaWdnZXIgc3RlcHMKLQkgIDEwMjQgYnl0ZXMgaXMgcXVpdGUgc21hbGwsIGxldCdzIGRvIDQwOTYgYnl0ZXMgKG9yIG9uZSBwYWdlKS4KLQkgIEFsc28gcmVtb3ZlIHJlZHVuZGFudCBpZiwgd2UncmUgYWx3YXlzIGluIHRoYXQgY2FzZSB3aGVuIGdldHRpbmcgaGVyZS4KLQotMjAxNi0xMi0wMSAxNDozMDo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBFbnN1cmUgdGhhdCBzaXplIG9mIHRoZSBwYXNwIGF0b20gaXMgYXMgbXVjaCBhcyB3ZSBuZWVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDU1Ci0KLTIwMTYtMTItMDEgMTQ6Mjc6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHpsaWIgaW5mbGF0ZSBsb29wCi0JICBIYW5kbGUgZXJyb3JzIGNsZWFubHksIGRlYWxsb2NhdGUgYWxsIG1lbW9yeSBhbmQgcmV0dXJuIHRoZSBhY3R1YWwgc2l6ZQotCSAgb2YgdGhlIGluZmxhdGVkIGRhdGEuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDU1Ci0KLTIwMTYtMTItMDEgMTQ6MzA6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRnJlZSBjb21wcmVzc2VkIG1vb3Ygbm9kZSBhbmQgaXQncyBjb3JyZXNwb25kaW5nIGRlY29tcHJlc3NlZCBkYXRhCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDU1Ci0KLTIwMTYtMTItMDEgMTQ6Mjk6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQ2hlY2sgc2l6ZSBvZiBjb21wcmVzc2VkIE1PT1YgaGVhZGVyIGFnYWluc3QgYXZhaWxhYmxlIGRhdGEKLQkgIEFuZCBhY3R1YWxseSByZWFkIHRoZSBzaXplIG9mIHRoZSBjbXZkIGF0b20gZnJvbSB0aGUgcmlnaHQgcG9zaXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDU1Ci0KLTIwMTYtMTItMDEgMTM6Mzg6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBpbiB0aGUgY29kZWNfZGF0YSB0byBiZSBhYmxlIHRvIHBhcnNlIGl0Ci0JICBBbHNvIGVycm9yIG91dCBjbGVhbmx5IGlmIG1hcHBpbmcgdGhlIGJ1ZmZlciBmYWlsZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDUwCi0KLTIwMTYtMTItMDEgMTM6MzI6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IG91dCBvZiBib3VuZHMgcmVhZCBpbiB0YWcgcGFyc2luZyBjb2RlCi0JICBXZSBjYW4ndCBzaW1wbHkgYXNzdW1lIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgdGFnIHZhbHVlIGFzIGdpdmVuCi0JICBpbnNpZGUgdGhlIHN0cmVhbSBpcyBjb3JyZWN0IGJ1dCBzaG91bGQgYWxzbyBjaGVjayBhZ2FpbnN0IHRoZSBhbW91bnQgb2YKLQkgIGRhdGEgd2UgaGF2ZSBhY3R1YWxseSBhdmFpbGFibGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NDUxCi0KLTIwMTYtMTAtMjYgMTM6MjE6MjkgKzAyMDAgIEFsZWphbmRybyBHLiBDYXN0cm8gPGFsZXhAaWdhbGlhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwYmluOiBwaXBlbGluZSBnZXRzIGFuIEVPUyB3aGVuIGFueSBydHBzb3VyY2VzIGJ5ZXMKLQkgIEluc3RlYWQgb2Ygc2VuZGluZyBFT1Mgd2hlbiBhIHNvdXJjZSBieWVzIHdlIGhhdmUgdG8gd2FpdCBmb3IKLQkgIGFsbCB0aGUgc291cmNlcyB0byBiZSBnb25lLCB3aGljaCBtZWFucyB0aGV5IGFscmVhZHkgc2VudCBCWUUgYW5kCi0JICB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgc2Vzc2lvbi4gV2Ugbm93IGhhbmRsZSB0aGUgRU9TIGluIHRoZSBydGNwCi0JICBsb29wIGNoZWNraW5nIHRoZSBhbW91bnQgb2Ygc291cmNlcyBpbiB0aGUgc2Vzc2lvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMyMTgKLQotMjAxNi0xMC0yNCAxNjo1NjozMSArMDAwMCAgRW5yaXF1ZSBPY2HDsWEgR29uesOhbGV6IDxlb2NhbmhhQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogVXNlIHRoZSB0ZmR0IGRlY29kZSB0aW1lIG9uIGJ5dGUgc3RyZWFtcyB3aGVuIGl0J3Mgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgdGhhbiB0aGUgdGltZSBpbiB0aGUgbGFzdCBzYW1wbGUKLQkgIFdlIGNvbnNpZGVyIHRoZXJlJ3MgYSBzaWZuaWZpY2FudCBkaWZmZXJlbmNlIHdoZW4gaXQncyBsYXJnZXIgdGhhbiBvbiBzZWNvbmQKLQkgIG9yIHRoYW4gaGFsZiB0aGUgZHVyYXRpb24gb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIGZyYWdtZW50IGluIGNhc2UgdGhlIGxhdHRlciBpcwotCSAgbGFyZ2VyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDIzMAotCi09PT0gcmVsZWFzZSAxLjEwLjIgPT09Ci0KLTIwMTYtMTEtMjkgMTY6MjE6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjEwLjIKLQotMjAxNi0xMS0yOSAxNTozNDoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNi0xMS0yOSAxNDowOTo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vZWwucG86Ci0JKiBwby9oci5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTYtMTEtMjggMTM6NTE6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBFbnN1cmUgdGhhdCB0YWdzIGFyZSB2YWxpZCBVVEYtOCBiZWZvcmUgYWRkaW5nIHRoZW0gdG8gdGhlIHRhZ2xpc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzUyMTkKLQotMjAxNi0xMS0yOCAxMjoyMjo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgbXVsdGlwYXJ0ZGVtdXg6IFBvc3QgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIGlmIHdlIGdvdCBFT1Mgd2l0aG91dCBoYXZpbmcgYWRkZWQgYW55IHBhZHMKLQotMjAxNi0xMS0yOCAxMjowMDowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBIYW5kbGUgbm9uLVVURjggaGVhZGVycyBhbmQgZXJyb3IgcmVhc29ucyBtb3JlIGdyYWNlZnVsbHkKLQkgIEVzcGVjaWFsbHkgZG9uJ3QgcHV0IHRoZW0gaW50byBHc3RTdHJ1Y3R1cmVzIGluIG9uZSB3YXkgb3IgYW5vdGhlciwganVzdAotCSAgaWdub3JlIHRoZW0gb3IgZXJyb3Igb3V0IGNsZWFubHkgZGVwZW5kaW5nIG9uIHRoZSBpbXBvcnRhbmNlIG9mIHRoZWlyCi0JICBjb250ZW50LgotCi0yMDE2LTExLTI4IDA5OjMwOjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHZyYXdwYXk6IEVycm9yIG91dCBjbGVhbmx5IGlmIG1hcHBpbmcgdGhlIHZpZGVvIGZyYW1lIGZhaWxzCi0JICBJbnN0ZWFkIG9mIGxhdGVyIGRlcmVmZXJlbmNpbmcgTlVMTCBhbmQgY3Jhc2hpbmcuCi0KLTIwMTYtMDctMjggMTg6NTE6MjQgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICBnc3R2NGwyYnVmZmVycG9vbDogbG9jayBmbHVzaF9zdG9wIGFnYWluc3QgcmVndWxhciBxYnVmCi0JICBUaGVzZSBjYW4gYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHRocmVhZHMgYW5kIGJvdGggbWFuaXB1bGF0ZSB0aGUKLQkgIHBvb2wtPmJ1ZmZlcnMgYXJyYXkuIExvY2sgdGhlbSBwcm9wZXJseSBhbmQgbGV0IGZsdXNoX3N0b3AgbW92ZSB0aGUKLQkgIGFycmF5IGNvbnRlbnRzIGludG8gYSB0ZW1wb3JhcnkgYXJyYXkgb24gdGhlIHN0YWNrIHRvIGF2b2lkIGhhdmluZwotCSAgdG8gY2FsbCByZWxlYXNlX2J1ZmZlciB1bmRlciB0aGUgb2JqZWN0IGxvY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1MDE1Ci0KLTIwMTYtMTEtMjQgMTQ6MjU6MjIgKzAxMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICBnc3R2NGwyYnVmZmVycG9vbDogcmVtb3ZlIGNyaXRpY2FsIGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9jZXNzIGlzIGNhbGxlZCBvbiBhbiBpbmFjdGl2ZSBwb29sCi0JICBJZiB0aGUgcG9vbCBpcyBpbmFjdGl2ZSwgaXQgaXMgZ3VhcmFudGVlZCB0byBhbHNvIGJlIGZsdXNoaW5nLCBzbyB0aGUKLQkgIGZvbGxvd2luZyBjaGVjayB3aWxsIHJldHVybiBHU1RfRkxPV19GTFVTSElORyBhbnl3YXkuCi0JICBUaGlzIGNhbiBoYXBwZW4gaWYgYSB2NGwyc3JjIGlzIGJsb2NraW5nIG9uIERRQlVGIGluIGNyZWF0ZSBhbmQgaXMgc2VudAotCSAgYW4gRU9TIGV2ZW50IG9uIGFub3RoZXIgdGhyZWFkLiBJbiB0aGF0IGNhc2UgdGhlIHBvb2wgaXMgc2V0IHRvCi0JICBmbHVzaGluZy9pbmFjdGl2ZSB3aXRob3V0IGxvY2tpbmcsIHRoZSB2NGwyc3JjIGlzIHVuYmxvY2tlZCwgYW5kIG1heQotCSAgY2FsbCBwb29sX3Byb2Nlc3Mgd2l0aCBhIHZhbGlkIGJ1ZmZlciBvbiB0aGUgYWxyZWFkeSBpbmFjdGl2ZSBwb29sLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTAxNAotCi0yMDE2LTExLTI0IDE0OjQxOjUyICswMTAwICBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyc3JjOiByZWxlYXNlIGJ1ZmZlciBpZiBjcmVhdGUgZmFpbHMKLQkgIGdzdF9iYXNlX3NyY19nZXRfcmFuZ2UgZG9lcyBub3QgZXhwZWN0IGEgYnVmZmVyIHRvIGJlIHJldHVybmVkIGluCi0JICB0aGUgZXJyb3IgY2FzZSwgc28gd2UgYXJlIGxlYWtpbmcgYSByZWZlcmVuY2UgaGVyZSBpZiBjcmVhdGUgZmFpbHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1MDE0Ci0KLTIwMTYtMTEtMjAgMTM6MDg6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRW5zdXJlIHRoYXQgcmF3IGF1ZGlvIGFuZCB2aWRlbyBoYXZlIHByb3Blcmx5IGFsaWduZWQgYnVmZmVycwotCSAgVGhhdCBpcywgYWxpZ25lZCB0byB0aGUgYmFzaWMgdHlwZSBmb3IgYXVkaW8gYW5kIHRvIDMyIGJ5dGVzIGZvciB2aWRlby4KLQkgIEZpeGVzIGNyYXNoZXMgaWYgdGhlIHJhdyBidWZmZXJzIGFyZSBwYXNzZWQgdG8gU0lNRCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzQ0MjgKLQotMjAxNi0xMS0yMCAxMzoxNDowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgYXZpZGVtdXg6IEVuc3VyZSB0aGF0IHJhdyB2aWRlbyBoYXZlIHByb3Blcmx5IGFsaWduZWQgYnVmZmVycwotCSAgVGhhdCBpcywgYWxpZ25lZCB0byB0byAzMiBieXRlcyBmb3IgdmlkZW8uIEZpeGVzIGNyYXNoZXMgaWYgdGhlIHJhdwotCSAgYnVmZmVycyBhcmUgcGFzc2VkIHRvIFNJTUQgcHJvY2Vzc2luZyBmdW5jdGlvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0NDI4Ci0KLTIwMTYtMTAtMjYgMTI6NDY6MjggKzA1MzAgIEphZ2FkaXNoIDxqYWdhZGlzaGthbWF0aGtAZ21haWwuY29tPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JICBnZGtwaXhidWZvdmVybGF5OiBGaXhpbmcgeCBhbmQgeSBvZmZzZXQgY29tcHV0YXRpb24KLQkgIFdoaWxlIGNvbXB1dGluZyB0aGUgeCBhbmQgeSBvZmZzZXRzLCBpdCdzIHRoZSB2aWRlbyByZXNvbHV0aW9uIGFuZAotCSAgcmVzaXplZCBvdmVybGF5IHJlc29sdXRpb24gdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIGFjdHVhbCBvdmVybGF5IGltYWdlCi0JICByZXNvbHR1aW9uLiBEdWUgdG8gdGhpcywgdGhlIG92ZXJsYXkgaW1hZ2UgdXNlZCB0byBnZXQgd3JvbmdseSBvdmVybGF5ZWQKLQkgIGluIHVuZGVzaXJlZCBsb2NhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzI5MgotCi0yMDE2LTExLTIyIDIwOjMzOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdnB4L2dzdHZweGRlYy5jOgotCSAgdnB4ZGVjOiBsaWJ2cHgncyByZWxlYXNlIGJ1ZmZlciBpcyBzb21ldGltZXMgY2FsbGVkIHdpdGggZmItPnByaXY9PU5VTEwKLQkgIERvbid0IGFzc2VydCBvbiB0aGlzIGJ1dCBqdXN0IGlnbm9yZSB0aGVzZSBjYXNlcy4KLQotMjAxNi0xMS0yMiAyMDoyNDo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBGaXggY2x1c3RlciBzZWFyY2hpbmcgaWYgd2Ugc2VhcmNoIG11bHRpcGxlIHRpbWVzIGluIG9uZSBjaHVuawotCSAgQWZ0ZXIgZmluZGluZyBhIGNsdXN0ZXIgaWQgaW4gdGhlIGJ5dGUgcmVhZGVyLCB3ZSBza2lwIGFoZWFkIHRoZSByZWFkZXIKLQkgIHBvc2l0aW9uIGJ5IG9uZSBmdXJ0aGVyIGJ5dGUgdG8gYmUgYWJsZSB0byBjb250aW51ZSBzZWFyY2hpbmcgZnJvbSB0aGVyZQotCSAgaW5zaWRlIHRoZSBzYW1lIGNodW5rIGlmIHRoZSBjbHVzdGVyIGNhbmRpZGF0ZSB3YXMgYSBmYWxzZSBwb3NpdGl2ZS4KLQkgIFdlIGhhdmUgdG8gYWNjb21vZGF0ZSBmb3IgdGhhdCBhZGRpdGlvbmFsIGJ5dGUgd2hlbiByZXN1bWluZyB0aGUgc2VhcmNoLAotCSAgb3RoZXJ3aXNlIGFsbCBmb2xsb3dpbmcgcHVsbHMgYXJlIG9mZi1ieS1vbmUgZm9yIGV2ZXJ5IHJlc3VtZSBhbmQgd2UgcnVuCi0JICBpbnRvIGFuIGFzc2VydGlvbi4KLQotMjAxNi0xMS0yMiAyMDowMToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOgotCSAgbWF0cm9za2E6IEFkZCBzaXplIGNoZWNrcyB0byB0aGUgcGFyc2luZyBvZiBGTEFDIGhlYWRlcnMKLQotMjAxNi0xMS0yMyAwNzowOTowNiArMTEwMCAgTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx4L2ZseF9jb2xvci5jOgotCSogZ3N0L2ZseC9mbHhfZm10Lmg6Ci0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuaDoKLQkgIGZseGRlYzogcmV3cml0ZSBsb2dpYyBiYXNlZCBvbiBHc3RCeXRlUmVhZGVyL1dyaXRlcgotCSAgU29sdmVzIG92ZXJyZWFkaW5nL3dyaXRpbmcgdGhlIGdpdmVuIGFycmF5cyBhbmQgd2lsbCBlcnJvciBvdXQgaWYgdGhlCi0JICBzdHJlYW1zIGFza3MgdG8gZG8gdGhhdC4KLQkgIEFsc28gZG9lcyBtb3JlIGVycm9yIGNoZWNraW5nIHRoYXQgdGhlIHN0cmVhbSBpcyB2YWxpZCBhbmQgd29uJ3QKLQkgIG92ZXJydW4gYW55IGFsbG9jYXRlZCBhcnJheXMuICBBbHNvIG1pdGlnYXRlIGludGVnZXIgb3ZlcmZsb3cgZXJyb3JzCi0JICBjYWxjdWxhdGluZyBhbGxvY2F0aW9uIHNpemVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3NDg1OQotCi0yMDE2LTExLTIzIDExOjIwOjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiBEb24ndCB1bnJlZigpIHBhcmVudCBpbiB0aGUgY2hhaW4gZnVuY3Rpb24KLQkgIFdlIGRvbid0IG93biB0aGUgcmVmZXJlbmNlIGhlcmUsIGl0IGlzIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGdpdmVuIHRvCi0JICB1cyBmb3IgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24uIExlZnRvdmVyIG1pc3Rha2UgZnJvbSAwLjEwIHBvcnRpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0ODk3Ci0KLTIwMTYtMTEtMjIgMjM6NDY6MDAgKzExMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkgIGZseGRlYzogZml4IHNvbWUgd2FybmluZ3MgY29tcGFyaW5nIHVuc2lnbmVkIDwgMAotCSAgYmY0M2Y0NGZjZmFkYTVlYzRhM2NlNjBjYjM3NDM0MDQ4NmZlOWZhYyB3YXMgY29tcGFyaW5nIGFuIHVuc2lnbmVkCi0JICBleHByZXNzaW9uIHRvIGJlIDwgMCB3aGljaCB3YXMgYWx3YXlzIGZhbHNlLgotCSAgZ3N0Zmx4ZGVjLmM6IEluIGZ1bmN0aW9uIOKAmGZseF9kZWNvZGVfYnJ1buKAmToKLQkgIGdzdGZseGRlYy5jOjMyMjozMzogd2FybmluZzogY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBleHByZXNzaW9uIDwgMCBpcyBhbHdheXMgZmFsc2UgWy1XdHlwZS1saW1pdHNdCi0JICBpZiAoKGdsb25nKSByb3cgLSBjb3VudCA8IDApIHsKLQkgIF4KLQkgIGdzdGZseGRlYy5jOjMzMjozMzogd2FybmluZzogY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBleHByZXNzaW9uIDwgMCBpcyBhbHdheXMgZmFsc2UgWy1XdHlwZS1saW1pdHNdCi0JICBpZiAoKGdsb25nKSByb3cgLSBjb3VudCA8IDApIHsKLQkgIF4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzQ4MzQKLQotMjAxNi0xMS0yMiAxOTowNTowMCArMTEwMCAgTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiBhZGQgc29tZSB3cml0ZSBib3VuZHMgY2hlY2tpbmcKLQkgIFdpdGhvdXQgY2hlY2tpbmcgdGhlIGJvdW5kcyBvZiB0aGUgZnJhbWUgd2UgYXJlIHdyaXRpbmcgaW50bywgd2UgY2FuCi0JICB3cml0ZSBvZmYgdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotCSAgaHR0cHM6Ly9zY2FyeWJlYXN0c2VjdXJpdHkuYmxvZ3Nwb3QuZGsvMjAxNi8xMS8wZGF5LWV4cGxvaXQtYWR2YW5jaW5nLWV4cGxvaXRhdGlvbi5odG1sCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc0ODM0Ci0KLTIwMTYtMTEtMjAgMTQ6NTM6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IHVwZGF0ZSB2ZXJzaW9uCi0KLT09PSByZWxlYXNlIDEuMTAuMSA9PT0KLQotMjAxNi0xMS0xNyAxNTo1MjozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMTAuMQotCi0yMDE2LTExLTE3IDE1OjAwOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTExLTE3IDE0OjQ1OjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9lbC5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE2LTExLTE2IDEwOjUzOjUxICswNTMwICBWaW5vZCBLZXN0aSA8dmlub2RrZXN0aUB5YWhvby5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IHBhZCByZXF1ZXN0IGZhaWxzIGZvciBmbHZtdXgKLQkgIHNwbGl0bXV4c2luayByZXF1ZXN0cyBwYWQgZnJvbSBlbGVtZW50IHVzaW5nIHBhZCB0ZW1wbGF0ZSBsaWtlICJ2aWRlb18ldSIsICJhdWRpb18ldSIgYW5kICJzaW5rXyVkIi4gVGhpcyBpcyB0cnVlIGZvciBtb3N0IG9mIHRoZSBtdXhlcnMuCi0JICBCdXQgc3BsaXRtdXhzaW5rIG5vdCBhYmxlIHRvIHJlcXVlc3QgcGFkIHRvIGZsdm11eCBhcyBmbHZtdXggaGFzICJhdWRpbyIgYW5kICJ2aWRlbyIgYXMgcGFkIHRlbXBsYXRlcy4KLQkgIGZpeDogc3BsaXRtdXhzaW5rIHNob3VsZCBmYWxsYmFjayB0byAiYXVkaW8iIGFuZCAgInZpZGVvIiB3aGVuIHRlbXBsYXRlIG5vdCBmb3VuZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzQ1MDcKLQotMjAxNi0xMS0xNCAxNzozNzo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JICBkZWludGVybGVhdmU6IFJlc2V0IGNhcHMgYWNjdW11bGF0b3IgdG8gQU5ZIHdoZW4gcmVzeW5jaW5nIHRoZSBhZGFwdGVyLCBub3QgRU1QVFkKLQkgIFRoZSBhY2N1bXVsYXRvciBpcyBmaWxsZWQgYnkgaW50ZXJzZWN0aW5nIHdpdGggYWxsIHRoZSBwYWQgY2FwcywgYXMgc3VjaAotCSAgaXQgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIEFOWSAobGlrZSBpdCBpcyBiZWZvcmUgdGhlIGl0ZXJhdGlvbiBpcwotCSAgc3RhcnRlZCkgYW5kIG5vdCB0byBFTVBUWS4KLQkgIEZpeGVzIHRoZSBDQVBTIHF1ZXJ5IGFsd2F5cyByZXR1cm5pbmcgRU1QVFkgY2FwcyB3aGVuIHJlc3luY2luZyBoYXBwZW5lZAotCSAgZHVyaW5nIHRoZSBxdWVyeSwgZS5nLiBiZWNhdXNlIHBhZHMgd2VyZSBhZGRlZC9yZW1vdmVkLgotCi0yMDE2LTExLTEyIDIzOjM0OjIzICswMTAwICBQZXRyIEt1bGhhdnkgPGJyYWluQGppa29zLmN6PgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiByZWNlaXZlIGNvbnRyb2wgbWVzc2FnZXMgb25seSBpbiBtdWx0aWNhc3QKLQkgIENvbnRyb2wgbWVzc2FnZXMgYXJlIHVzZWQgb25seSBpbiBtdWx0aWNhc3QgbW9kZSAtIHRvIGRldGVjdCBpZiB0aGUgZGVzdGluYXRpb24KLQkgIGFkZHJlc3MgaXMgbm90IG91cnMgYW5kIHBvc3NpYmx5IGRyb3AgdGhlIHBhY2tldC4gSG93ZXZlciBpbiBub24tbXVsdGljYXN0Ci0JICBtb2RlcyB0aGUgbWVzc2FnZXMgYXJlIHN0aWxsIGFsbG9jYXRlZCBhbmQgZnJlZWQgZXZlbiBpZiBub3QgdXNlZC4gVGhlcmVmb3JlCi0JICByZXF1ZXN0IGNvbnRyb2wgbWVzc2FnZXMgZnJvbSBnX3NvY2tldF9yZWNlaXZlX21lc3NhZ2UoKSBvbmx5IGluIG11bHRpY2FzdAotCSAgbW9kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI4NDEKLQotMjAxNi0xMC0wOCAxODoxMToxNyArMDIwMCAgV2lsbGlhbSBNYW5sZXkgPHdpbGxAd2lsbGlhbW1hbmxleS5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDI6IFdhcm4sIGRvbid0IGFzc2VydCBpZiB2NGwgZ2l2ZXMgdXMgYSBidWZmZXIgd2l0aCBhIHRvbyBsYXJnZSBzaXplCi0JICBJJ3ZlIHNlZW4gcHJvYmxlbXMgd2hlcmUgdGhlIGBieXRlc3VzZWRgIGZpZWxkIG9mIGB2NGwyX2J1ZmZlcmAgd291bGQgYmUKLQkgIGEgc2lsbHkgbnVtYmVyIGNhdXNpbmcgdGhlIGxhdGVyIGNhbGwgdG86Ci0JICBnc3RfbWVtb3J5X3Jlc2l6ZSAoZ3JvdXAtPm1lbVtpXSwgMCwgZ3JvdXAtPnBsYW5lc1tpXS5ieXRlc3VzZWQpOwotCSAgdG8gcmVzdWx0IGluIHRoaXMgZXJyb3IgdG8gYmUgcHJpbnRlZDoKLQkgIChwdWxzZXZpZGVvOjExKTogR1N0cmVhbWVyLUNSSVRJQ0FMICoqOiBnc3RfbWVtb3J5X3Jlc2l6ZTogYXNzZXJ0aW9uICdzaXplICsgbWVtLT5vZmZzZXQgKyBvZmZzZXQgPD0gbWVtLT5tYXhzaXplJyBmYWlsZWQKLQkgIGJlc2lkZXMgY2F1c2luZyB3aG8ta25vd3Mgd2hhdCBvdGhlciBwcm9ibGVtcy4KLQkgIFdlIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGJ1ZmZlciBoYXMgc3RpbGwgYmVlbiBkZXF1ZXVlZCBjb3JyZWN0bHkKLQkgIHNvIGp1c3QgY2xhbXAgdG8gYSB2YWxpZCBzaXplIHNvIGRvd25zdHJlYW0gZWxlbWVudHMgd29uJ3QgZW5kIHVwIGluCi0JICB1bmRlZmluZWQgYmVoYXZpb3VyLgotCSAgVGhlIGludmFsaWQgYHY0bDJfYnVmZmVyYCBJIHNhdyBmcm9tIG15IGNhcHR1cmUgZGV2aWNlIHdhczoKLQkgIGJ1ZmZlciA9IHsKLQkgIGluZGV4ID0gMCwKLQkgIHR5cGUgPSAxLAotCSAgYnl0ZXN1c2VkID0gNTM0NzQ4OTI4LCAvLyA8LSBJbnZhbGlkCi0JICBmbGFncyA9IDgyNjAsIC8vIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQyB8IFY0TDJfQlVGX0ZMQUdfRVJST1IgfCBWNEwyX0JVRl9GTEFHX0RPTkUKLQkgIGZpZWxkID0gMDEzMzAsIC8vIDwtIEludmFsaWQKLQkgIHRpbWVzdGFtcCA9IHsKLQkgIHR2X3NlYyA9IDAsCi0JICB0dl91c2VjID0gMAotCSAgfSwKLQkgIHRpbWVjb2RlID0gewotCSAgdHlwZSA9IDAsCi0JICBmbGFncyA9IDAsCi0JICBmcmFtZXMgPSAwICdcMDAwJywKLQkgIHNlY29uZHMgPSAwICdcMDAwJywKLQkgIG1pbnV0ZXMgPSAwICdcMDAwJywKLQkgIGhvdXJzID0gMCAnXDAwMCcsCi0JICB1c2VyYml0cyA9ICJcMDAwXDAwMFwwMDAiCi0JICB9LAotCSAgc2VxdWVuY2UgPSAwLAotCSAgbWVtb3J5ID0gMiwKLQkgIG0gPSB7Ci0JICBvZmZzZXQgPSAzNTM3MjE5NTg0LAotCSAgdXNlcnB0ciA9IDE0MDcwNjY2NTgzNjU0NCwgLy8gQ291bGQgYmUgbm9uc2Vuc2UsIG5vdCBzdXJlCi0JICBwbGFuZXMgPSAweDdmZjhkMmQ1YjAwMCwKLQkgIGZkID0gLTc1Nzc0NzcxMgotCSAgfSwKLQkgIGxlbmd0aCA9IDI3NjQ4MDAsCi0JICByZXNlcnZlZDIgPSAwLAotCSAgcmVzZXJ2ZWQgPSAwCi0JICB9Ci0JICBUaGlzIGlzIGZyb20gZ2RiIHdpdGggbXkgb3duIGFubm90YXRpb25zIGFkZGVkLgotCSAgVGhpcyB3YXMgd2l0aCBnc3QtcGx1Z2lucy1nb29kIDEuOC4xLCBhIE1hZ2V3ZWxsIFhJMTAwRFVTQi1IRE1JIHZpZGVvCi0JICBjYXB0dXJlIGRldmljZSBhbmQga2VybmVsIDMuMTMgdXNpbmcgYSBkb2RneSBIRE1JIGNhYmxlIHdoaWNoIGlzIGdyZWF0IGF0Ci0JICBicmVha2luZyBIRE1JIGNhcHR1cmUgZGV2aWNlcy4gIEknbSB1c2luZyBpby1tb2RlPXVzZXJwdHIgYW5kIGhhdmUgYnVpbHQKLQkgIGdzdC1wbHVnaW5zLWdvb2Qgd2l0aG91dCBsaWJ2NGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY1Ci0KLTIwMTYtMDgtMzAgMTA6MjQ6NDMgKzAyMDAgIFBldHIgS3VsaGF2eSA8YnJhaW5Aamlrb3MuY3o+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFsbG93IG1pc3NpbmcgY29udHJvbCBhdHRyaWJ1dGUgaW4gY2FzZSBvZiBhIHNpbmdsZSBzdHJlYW0KLQkgIEltcHJvdmUgUkZDMjMyNiAtIGNoYXB0ZXIgQy4zIGNvbXBhdGliaWxpdHk6Ci0JICBJbiBjYXNlIGp1c3QgYSBzaW5nbGUgc3RyZWFtIGlzIHNwZWNpZmllZCBpbiBTRFAgYW5kIHRoZSBjb250cm9sIGF0dHJpYnV0ZQotCSAgaXMgbWlzc2luZyBkbyBub3QgZHJvcCB0aGUgc3RyZWFtIGJ1dCByYXRoZXIgYXNzdW1lICJhPWNvbnRyb2w6KiIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA1NjgKLQotMjAxNi0xMC0yMSAxNzozMTowMCArMDAwMCAgTWF0dCBTdGFwbGVzIDxzdGFwbGVzMjU1QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogQWxzbyBoYW5kbGUgcmVkaXJlY3Qgb24gUExBWQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjYxMAotCi0yMDE2LTEwLTIwIDEzOjE0OjEzICswMjAwICBBbGVqYW5kcm8gRy4gQ2FzdHJvIDxhbGV4QGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cGJpbjogYXZvaWQgZ2VuZXJhdGluZyBlcnJvcnMgd2hlbiBydGNwIG1lc3NhZ2VzIGFyZSBlbXB0eSBhbmQgY2hlY2sgdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eQotCSAgQWRkIGEgY2hlY2sgdG8gdmVyaWZ5IGFsbCB0aGUgb3V0cHV0IGJ1ZmZlcnMgd2VyZSBlbXB0eSBmb3IgdGhlCi0JICBzZXNzaW9uIGluIGEgdGltb3V0IGFuZCBsb2cgYW4gZXJyb3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczMjY5Ci0KLTIwMTYtMTAtMTggMTE6MDk6MTAgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgIHJ0cGgyNjNwYXk6IEZpeCBsZWFrIGZvciBCLWZyYWdtZW50cwotCSAgQWx0b3VnaCBjb21taXRzIDZhMTZiZTcsIDY0ZjlkMDggYW5kIDBjN2UzYTggZml4ZWQgc29tZSBpc3N1ZXMgdGhleQotCSAgaW50cm9kdWNlZCBvdGhlcnMuIFRoaXMgcGF0Y2ggZml4ZXMgdGhlIGxlYWsgb2Ygb25lIG1hY3JvYmxvY2sgZm9yIGV2ZXJ5Ci0JICBCIGZyYWdtZW50LgotCSAgTWFjcm9ibG9jayBzdHJ1Y3R1cmVzIG11c3Qgbm90IGJlIGZyZWVkIGltbWVkaWF0ZWx5IGFmdGVyIGZpbmRpbmcgdGhlCi0JICBib3VuZGFyaWVzIGFzIHRoZXkgYXJlIHN0b3JlZCBhbmQgdXNlZCBsYXRlci4gSG93ZXZlciB0aGUgaW5pdGFsIGR1bW15Ci0JICBzdHJ1Y3R1cmUgKHVzZWQgZm9yIGZpbmRpbmcgdGhlIGZpcnN0IGJvdW5kYXJ5KSBtdXN0IGJlIGZyZWVkLgotCSAgQ0lEICMxMjEyMTU2Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNTEyCi0KLTIwMTYtMDYtMjIgMTM6NTk6MzUgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaDI2My5jOgotCSAgcnRwaDI2M3BwYXk6IEZpeCBjYXBzIGxlYWsKLQkgIEZpeCBsZWFraW5nIGNhcHMgd2hlbiBkb3duc3RyZWFtIGhhcyBub3QtZml4ZWQgY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM1MTUKLQotMjAxNC0wNi0xNiAxNzoyMDozMiArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbi5zZWxuZXNAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgcnRwaDI2M2RlcGF5OiBEb24ndCBkcm9wIG1vZGUgYiBwYWNrZXRzIHdpdGggcGljdHVyZSBzdGFydCBjb2RlCi0JICBTb21lIGJ1Z2d5IHBheWxvYWRlcnMsIGUuZy4gcnRwaDI2M3BheSwgbWF5IHVzZSBtb2RlIEIgZm9yIHBhY2tldHMKLQkgIHRoYXQgc3RhcnRzIHdpdGggYSBwaWN0dXJlIChvciBHT0IpIHN0YXJ0IGNvZGUgYWx0aG91Z2ggaXQncyBub3QKLQkgIGFsbG93ZWQuIExldCdzIGJlIG5pY2UgYW5kIG5vdCBkcm9wIHRoZXNlIHBhY2tldHMvZnJhbWVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzUxNgotCi0yMDE2LTExLTAzIDEzOjI3OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYXJzZS5jOgotCSogdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9maWxlcy9hdWRpb3Rlc3RzcmMud2F2OgotCSAgdGVzdHM6IHdhdnBhcnNlOiBhZGQgdGVzdCBmb3IgcHJvY2Vzc2luZyBhbiBhY3R1YWwgLndhdiBmaWxlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczODYxCi0KLTIwMTYtMTEtMDMgMTI6MzQ6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IERvbid0IHNldCBjYXBzIHRvIE5VTEwgYWZ0ZXIgc2V0dGluZyB0aGVtIG9uIHRoZSBzcmNwYWQKLQkgIFdlIHdvdWxkIGxpa2UgdG8gY2hlY2sgbGF0ZXIgb24gRU9TIGlmIHdlIGZvdW5kIGEga25vd24gc3RyZWFtIHR5cGUgb3IKLQkgIG5vdCwgdG8gcG9zc2libHkgcG9zdCBhbiBlcnJvciBtZXNzYWdlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3Mzg2MQotCi0yMDE2LTExLTAyIDExOjAwOjEzICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogRml4IEdPYmplY3Qgd2FybmluZ3Mgb24gc2h1dGRvd24uCi0JICBDb21taXQgODNlNzE4IGFkZGVkIGEgcGFkIHRlbXBsYXRlIHRvIHNwbGl0bXV4IHJlcXVlc3QKLQkgIHBhZHMsIHdoaWNoIG1lYW5zIHRoYXQgR3N0RWxlbWVudCBub3cgcmVsZWFzZXMgdGhlIHBhZHMgb24KLQkgIGRpc3Bvc2UsIGJ1dCBhZnRlciBoYXZpbmcgcmVtb3ZlZCBhbGwgZWxlbWVudHMgaW4gdGhlIGJpbgotCSAgYW5kIHVubGlua2VkIHRoZW0uIE1ha2Ugc3VyZSB3ZSBjYW4gaGFuZGxlIGNsZWFudXAgaW4gdGhhdCBjYXNlCi0JICB3aXRob3V0IHRocm93aW5nIGFzc2VydGlvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNzg0Ci0KLTIwMTYtMTEtMDEgMTk6NDI6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IHVwZGF0ZSB2ZXJzaW9uCi0KLT09PSByZWxlYXNlIDEuMTAuMCA9PT0KLQotMjAxNi0xMS0wMSAxNzo1Nzo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMTAuMAotCi0yMDE2LTExLTAxIDE3OjQ3OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTExLTAxIDE3OjQxOjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9lbC5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTYtMTAtMjcgMTI6MDE6NTUgKzAyMDAgIFRvYmlhcyBTY2huZWlkZXIgPHRvYmlhcy5zY2huZWlkZXJAdm9pY2VpbnRlcmNvbm5lY3QuZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IGZpeCBleHRyYS1jb250cm9scyBsZWFrCi0JICBHc3Qgc3RydWN0IHY0bDJvYmplY3QtPmV4dHJhX2NvbnRyb2xzIGlzIGNyZWF0ZWQgaWYgdXNlciBzZXRzIGFwcHJvcHJpYXRlCi0JICBvcHRpb24gYnV0IGl0IGlzIG5vdCBmcmVlZCBvbiBkZXN0cnVjdGlvbiBvZiB2NGwyb2JqZWN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzU4MAotCi0yMDE2LTEwLTMxIDE4OjAwOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIFJldmVydCAic291cGh0dHBzcmM6IHJlZHVjZSByZWFkaW5nIGxhdGVuY3kgYnkgdXNpbmcgbm9uLWJsb2NraW5nIHJlYWQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDg4MTY3NjQxMTI0MDg3NjY4ODljOGI2ODBhM2FmNTExMTVkZjRiZjUuCi0JICBJdCBjYXVzZXMgaXNzdWVzIHdpdGggdGhlIHRpbWVvdXRzLCBhbmQgY2F1c2VzIGNvbm5lY3Rpb25zIHRvIGJlIGNsb3NlZAotCSAgd2l0aG91dCBhY3R1YWwgcmVhc29uLiBOZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNTA5Ci0KLTIwMTYtMTAtMzEgMDk6MDA6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IERvbid0IHRyeSB0byBhZGQgc3JjcGFkIGlmIHdlIGRvbid0IGtub3cgdmFsaWQgY2FwcyB5ZXQKLQkgIE90aGVyd2lzZSB3ZSdsbCBydW4gaW50byBhbiBhc3NlcnRpb24gb24gc3BlY2lhbGx5IGNyYWZ0ZWQgZmlsZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjQzCi0KLTIwMTYtMTAtMjcgMTE6MjM6NTEgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogUmVtb3ZlIHVzZWxlc3NseSBkdXBsaWNhdGVkIGRlcCBjaGVja3MKLQkgIFRoZXNlIGNoZWNrcyBhcmUgZG9uZSBpbnNpZGUgdGhlIG1lc29uLmJ1aWxkIGZpbGVzIGZvciBlYWNoIHBsdWdpbi4KLQotMjAxNi0xMC0yNyAxMToyMjo1OSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogZHYgcGx1Z2luIG5vdyB3b3JrcyBvbiBNU1ZDCi0JICBOZWVkcyBhIE1lc29uIHBhdGNoIHRvIGZpbHRlciBvdXQgdGhlIHVzZWxlc3MgLWxwdGhyZWFkCi0JICBodHRwczovL2dpdGh1Yi5jb20vbWVzb25idWlsZC9tZXNvbi9wdWxsLzk2MgotCi0yMDE2LTEwLTI3IDE0OjAzOjQ4ICswMjAwICBCcmFua28gU3ViYXNpYyA8YnJhbmtvQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogYWxsb3cgcmVzb2x1dGlvbnMgYWJvdmUgNDA5NgotCSAgTW9kaWZ5IHRoZSBjYXBzIHN0cmluZyB0byBhbGxvdyB3aWR0aCBhbmQgaGVpZ2h0IGdyZWF0ZXIgdGhhbiA0MDk2LgotCSAgVGhlcmUgaXMgbm8gbmVlZCB0byByZXN0cmljdCBpdCBzaW5jZSB0aGUgbWF0cm9za2EgZm9ybWF0IGFsbG93cyB0aGUKLQkgIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIHRvIGJlIHVwIHRvIGVpZ2h0IGJ5dGVzIGxvbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNTgyCi0KLTIwMTYtMTAtMjMgMTc6MjM6MTAgLTA3MDAgIFNjb3R0IEQgUGhpbGxpcHMgPHNjb3R0LmQucGhpbGxpcHNAaW50ZWwuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBDaGVjayBmb3IgR19QTEFURk9STV9XSU4zMiBmb3IgcHJlc2VuY2Ugb2YgaXBpX3NwZWNfZGVzdAotCSAgR19PU19XSU4zMiBpcyBvbmx5IHNldCB3aGVuIG5vdCBidWlsZGluZyB3aXRoIGN5Z3dpbiwgYnV0Ci0JICBpcGlfc3BlY19kZXN0IGlzIG1pc3NpbmcgYm90aCB3aXRoIGFuZCB3aXRob3V0IGN5Z3dpbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMxMTQKLQotMjAxNi0xMC0yNiAwODo1MTo0MCArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogcmVzZXQgcmVhZF9wb3NpdGlvbiB3aGVuIHJlYWRpbmcgZmFpbHMKLQkgIHNvdXBodHRwc3JjIG1haW50YWlucyB0d28gdmFyaWFibGVzIGZvciB0aGUgcG9zaXRpb246Ci0JICAqICdyZXF1ZXN0X3Bvc2l0aW9uJyBpcyB3aGVyZSB3ZSB3YW50IHRvIGJlCi0JICAqICdyZWFkX3Bvc2l0aW9uJyBpcyB3aGVyZSB3ZSBhcmUKLQkgIER1cmluZyBOb3JtYWwgb3BlcmF0aW9ucyBib3RoIGFyZSB1cGRhdGVkIGluIHN5bmMgd2hlbiBkYXRhIGFycml2ZXMuIEEgc2VlawotCSAgY2hhbmdlcyAncmVxdWVzdF9wb3NpdGlvbicgYnV0IG5vdCAncmVhZF9wb3NpdGlvbicuCi0JICBXaGVuIHRoZSB0d28gcG9zaXRpb25zIGdldCBvdXQgb2Ygc3luYywgdGhlbiBhIG5ldyByZXF1ZXN0IGlzIHNlbmQgYW5kIHRoZQotCSAgJ1JhbmdlJyBoZWFkZXIgaXMgYWRqdXN0ZWQgdG8gdGhlIGN1cnJlbnQgJ3JlcXVlc3RfcG9zaXRpb24nLgotCSAgV2l0aG91dCB0aGlzIHBhdGNoLCBpZiByZWFkaW5nIGZhaWxzLCB0aGVuIHRoZSBzb3VyY2UgaXMgZGVzdHJveWVkLiBUaGlzCi0JICB0cmlnZ2VycyBhIG5ldyByZXF1ZXN0LCBidXQgdGhlIHJhbmdlIHJlbWFpbnMgdW5jaGFuZ2VkLiBBcyBhIHJlc3VsdCwgdGhlCi0JICBvbGQgcmFuZ2UgaXMgdXNlZCBhbmQgb2xkIGRhdGEgd2lsbCBiZSByZWFkLgotCSAgQ2hhbmdpbmcgdGhlICdyZWFkX3Bvc2l0aW9uJyB0byAtMSBtYWtlcyBpdCBleHBsaWNpdGx5IGRpZmZlcmVudCBmcm9tCi0JICAncmVxdWVzdF9wb3NpdGlvbicgYW5kIGFzIGEgcmVzdWx0IHRoZSAnUmFuZ2UnIGhlYWRlciBpcyB1cGRhdGVkIGNvcnJlY3RseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM1MDkKLQotMjAxNi0xMC0yNSAwODo1NDozNCAtMDcwMCAgU2NvdHQgRCBQaGlsbGlwcyA8c2NvdHQuZC5waGlsbGlwc0BpbnRlbC5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IERvbid0IGRlcGVuZCBvbiBnc3RyZWFtZXItY2hlY2stMS4wIG9uIHdpbmRvd3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMxMTQKLQotMjAxNi0xMC0yNSAxNToyNDoyMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiByZXNldCBjb25uZWN0aW9uIGluZm8gdG8gbm9uLWZsdXNoaW5nIHdoZW4gY2xvc2luZwotCSAgVGhpcyBzb2x2ZXMgYSBoYW5naW5nIG1haW5sb29wIGluIGZvbGxvd2luZyBzY2VuYXJpbzoKLQkgICogY29ubmVjdCB0byBzb3VyY2UKLQkgICogbmV0d29yay9zZXJ2ZXIgZHJvcHMKLQkgICogcGlwZWxpbmUgc2V0IHRvIE5VTEwgKGFuZCBjb25uZWN0aW9uIHRvIGZsdXNoaW5nIGFzIHBhcnQpCi0JICAqIHBpcGVsaW5lIHNldCB0byBQQVVTRUQvUExBWUlORyAoY29ubmVjdGlvbiB0byBub24tZmx1c2hpbmcsIGJ1dCBub3QgcmVjb3JkZWQpCi0JICAqIFtjb25uZWN0aW5nIHN0aWxsIG5vdCBwb3NzaWJsZV0KLQkgICogcGlwZWxpbmUgc2V0IHRvIE5VTEwgPT4gbWFpbmxvb3AgaGFuZ3MgKHNpbmNlIG5vIGFjdHVhbCBmbHVzaGluZyBpcyBkb25lKQotCi0yMDE2LTEwLTI2IDE0OjMyOjQ4ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBzcGxpdG11eHNpbms6IE9ubHkgYWxsb3cgb25lIHZpZGVvIHJlcXVlc3QgcGFkCi0JICBUaGUgcGFjaW5nIG9mIHRoZSBvdmVyYWxsIG11eGluZyBpcyBjb250cm9sbGVkCi0JICBieSB0aGUgdmlkZW8gR09QcyBhcnJpdmluZywgc28gd2UgY2FuIG9ubHkgaGFuZGxlCi0JICAxIHZpZGVvIHN0cmVhbSwgYW5kIHRoZSByZXF1ZXN0IHBhZCBpcyBuYW1lZCBhY2NvcmRpbmdseS4KLQkgIElnbm9yZSBhIHJlcXVlc3QgZm9yIGEgMm5kIHZpZGVvIHBhZCBpZiB0aGVyZSdzIGFscmVhZHkKLQkgIGFuIGFjdGl2ZSBvbmUuCi0KLTIwMTYtMTAtMjYgMTE6NTk6MzIgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW5rOiBUYWtlIG93bmVyc2hpcCBvZiBmbG9hdGluZyByZWZzCi0JICBzaW5rIHRoZSBmbG9hdGluZyByZWYgd2hlbiBoYW5kZWQgYSBtdXhlciBvciBzaW5rIHRvIHVzZSBzbwotCSAgd2UgY2xlYXJseSB0YWtlIG93bmVyc2hpcC4KLQotMjAxNi0xMC0yNSAxNDo1MTo1MiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IFNldCBjaGlsZCBlbGVtZW50cyB0byBOVUxMIHdoZW4gcmVtb3ZpbmcuCi0JICBNYWtlIHN1cmUgdGhhdCBlbGVtZW50cyBhcmUgaW4gdGhlIE5VTEwgc3RhdGUgd2hlbiByZW1vdmluZy4KLQkgIEZpeGVzIGNyaXRpY2FsIHdhcm5pbmdzIHdoZW4gZXJyb3JzIG9jY3VyIGVhcmx5IG9uIGluIHN0YXJ0aW5nIHVwLgotCi0yMDE2LTEwLTI1IDE0OjUwOjUzICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogU2V0IHBhZCB0ZW1wbGF0ZSBvbiByZXF1ZXN0IHNpbmsgcGFkcwotCSAgRW5zdXJlIHRoYXQgdGhlIGdob3N0IHBhZCByZXR1cm5lZCBhcyBhIHJlcXVlc3QgcGFkCi0JICBoYXMgdGhlIHRlbXBsYXRlIHRoYXQgd2FzIHJlcXVlc3RlZAotCi0yMDE2LTEwLTI1IDEwOjUwOjQ3ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSogdGVzdHMvY2hlY2svbWVzb24uYnVpbGQ6Ci0JICBSZXZlcnQgIm1lc29uOiBtb3ZlIGdzdHJlYW1lci1jaGVjay0xLjAgZGVwZW5kZW5jeSB0byB0ZXN0cy9jaGVjayIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNDY2MzI2OTQ2NjJiOTZmZGRiODQ4YTFmMjA5MWEyMTViMjhhMmQzNS4KLQkgIERvZXMgbm90IGFjdHVhbGx5IHdvcmsuIFNlZToKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzMxMTQjYzMxCi0KLTIwMTYtMDYtMDggMTE6MjQ6MzcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogQXNzdW1lIFBUUyBpcyBEVFMgd2hlbiBQVFMgaXMgbWlzc2luZwotCSAgVGhpcyBmaXhlcyBpc3N1ZSBmb3IgZW5jb2RlcnMgdGhhdCBvbmx5IHNldHMgdGhlIERUUy4gV2UgYXNzdW1lIHRoYXQKLQkgIHRoZXJlIHdhcyBubyByZS1vcmRlcmluZyB3aGVuIHRoYXQgaGFwcGVucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMDcKLQotMjAxNi0xMC0yNCAwMDozNDoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogZml4IGJ1aWxkIG91dHNpZGUgb2YgZ3N0LWFsbAotCi0yMDE2LTEwLTIxIDAwOjQyOjU0IC0wNzAwICBTY290dCBEIFBoaWxsaXBzIDxzY290dC5kLnBoaWxsaXBzQGludGVsLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL21lc29uLmJ1aWxkOgotCSAgbWVzb246IGRpcmVjdHNvdW5kOiBBZGQgb2xlMzIgbGlicmFyeSBkZXBlbmRlbmN5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczMTE0Ci0KLTIwMTYtMTAtMjEgMDA6NDI6MTggLTA3MDAgIFNjb3R0IEQgUGhpbGxpcHMgPHNjb3R0LmQucGhpbGxpcHNAaW50ZWwuY29tPgotCi0JKiBtZXNvbi5idWlsZDoKLQkqIHRlc3RzL2NoZWNrL21lc29uLmJ1aWxkOgotCSAgbWVzb246IG1vdmUgZ3N0cmVhbWVyLWNoZWNrLTEuMCBkZXBlbmRlbmN5IHRvIHRlc3RzL2NoZWNrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczMTE0Ci0KLTIwMTYtMTAtMjAgMjI6MDg6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYzoKLQkgIHRlc3RzOiB2aWRlb21peGVyOiBkaXNhYmxlIHJhY3kgZmx1c2hfc3RhcnRfZmx1c2hfc3RvcCB0ZXN0Ci0JICBJdCdzIGJlZW4gYnJva2VuIGZvciB5ZWFycywgYW5kIGl0J3MgdW5saWtlbHkgaXQgd2lsbCBldmVyCi0JICBiZSBmaXhlZCBmb3IgY29sbGVjdHBhZHMvdmlkZW9taXhlciBub3cgdGhhdCB0aGVyZSdzIGNvbXBvc2l0b3IKLQkgIHdoaWNoIHdvcmtzIGZpbmUuIFNvIGxldCdzIGRpc2FibGUgaXQsIHNpbmNlIGFsbCBpdCBkb2VzCi0JICBpcyB0aGF0IGl0IGNyZWF0ZXMgbm9pc2UgdGhhdCBkaXN0cmFjdHMgZnJvbSBvdGhlciBmYWlsdXJlcy4KLQkgIEFsc28gc2VlIHRoZSBjb3JyZXNwb25kaW5nIGFkZGVyIGJ1ZyBhcyBpdCBmYWlsZWQgaW4gdGhlIHNhbWUgd2F5OgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODg5MQotCi0yMDE2LTEwLTA5IDE2OjU2OjEwICswMjAwICBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpIDxqYW4uc3RlZmZlbnNAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgdGVzdHM6IEZpeCBzb3VwaHR0cHNyYyB0ZXN0cyB3aXRob3V0IENLX0ZPUks9bm8KLQkgIEl0IHNlZW1zIHRoYXQgdGhlIGZvcmtlZCBwcm9jZXNzZXMgYWxsIGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBsaXN0ZW5pbmcKLQkgIHNvY2tldCBmcm9tIHRoZSBzZXJ2ZXIsIGFuZCBvbmx5IG9uZSBoYXMgdG8gc2h1dGRvd24gdGhlIHNvY2tldCB0byBicmVhawotCSAgdGhlIHNlcnZlciBjb21wbGV0ZWx5LgotCSAgQ3JlYXRlIGEgbmV3IHNlcnZlciBpbnNpZGUgZWFjaCB0ZXN0IHRvIGF2b2lkIHRoaXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNjU2Ci0KLTIwMTYtMTAtMDkgMTU6MjM6NTEgKzAyMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGphbi5zdGVmZmVuc0BnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICB0ZXN0czogRml4IGxldmVsIHRlc3QgaW4gQ0tfRk9SSz1ubyBtb2RlCi0JICBUaGUgdGVzdHMgYWNjdW11bGF0ZSBidWZmZXJzIGluIEdzdENoZWNrJ3MgYnVmZmVycyBsaXN0LCBhbmQgdGhlIGxpc3QgaXMKLQkgIG5vdCAoY29uc2lzdGVudGx5KSByZXNldCBiZXR3ZWVuIHRlc3RzLiBEbyB0aGF0IGFuZCByZW1vdmUgdGhlIG5vdwotCSAgY29uZmxpY3RpbmcgdW5yZWZzIGZvciBvdXRidWZmZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjY0NAotCi0yMDE2LTEwLTA3IDEzOjA0OjI3ICswNTMwICBHYXVyYXYgR3VwdGEgPGcuZ3VwdGFAc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkgIHdhdmVmb3Jtc2luazogRml4IE1lbW9yeSBsZWFrIHVzaW5nIEdTVF9QVFJfRk9STUFUCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyNDk3Ci0KLTIwMTYtMTAtMTggMTI6MjM6NDIgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21vbm9zY29wZS9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBBZGQgbWlzc2luZyBnc3RhdWRpbyBkZXAgdG8gbW9ub3Njb3BlCi0JICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOjQyOjA6Ci0JICAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1iYXNlL2dzdC1saWJzL2dzdC9hdWRpby9hdWRpby5oOjI2OjM5OiBmYXRhbCBlcnJvcjogZ3N0L2F1ZGlvL2F1ZGlvLWVudW10eXBlcy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Ci0JICAjaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWVudW10eXBlcy5oPgotCSAgXgotCSAgY29tcGlsYXRpb24gdGVybWluYXRlZC4KLQkgIGh0dHBzOi8vY2kuZ3N0cmVhbWVyLm5ldC9qb2IvR1N0cmVhbWVyLW1hc3Rlci1tZXNvbi8yNzEvY29uc29sZQotCi0yMDE2LTEwLTE2IDAyOjE4OjIyICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogQWRkIG1pc3NpbmcgcGJ1dGlscyBkZXBlbmRlbmN5IHRvIG11bHRpZmlsZQotCSAgRm91bmQgdmlhIHRoZSBKZW5raW5zIENJOgotCSAgRkFJTEVEOiBzdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1nb29kL2dzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlQHNoYS9nc3RzcGxpdG11eHNpbmsuYy5vCi0JICBbLi4uXQotCSAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWdvb2QvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuaDoyNDowLAotCSAgZnJvbSAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1nb29kL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6NTk6Ci0JICAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1iYXNlL2dzdC1saWJzL2dzdC9wYnV0aWxzL3BidXRpbHMuaDozMDo0MzogZmF0YWwgZXJyb3I6IGdzdC9wYnV0aWxzL3BidXRpbHMtZW51bXR5cGVzLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLQkgICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLWVudW10eXBlcy5oPgotCSAgXgotCSAgY29tcGlsYXRpb24gdGVybWluYXRlZC4KLQkgIGh0dHBzOi8vY2kuZ3N0cmVhbWVyLm5ldC9qb2IvR1N0cmVhbWVyLW1hc3Rlci1tZXNvbi8yNjMvY29uc29sZQotCi0yMDE2LTEwLTE1IDIyOjExOjA4ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSAgbWVzb246IERvbid0IHNldCBjX3N0ZCB0byBnbnU5OQotCSAgVXNlIHRoZSBkZWZhdWx0IGZvciBlYWNoIGNvbXBpbGVyIG9uIGV2ZXJ5IHBsYXRmb3JtIGluc3RlYWQuIFRoaXMKLQkgIGltcHJvdmVzIG91ciBjb21wYXRpYmlsaXR5IHdpdGggY29tcGlsZXJzIHRoYXQgZG9uJ3QgaGF2ZSBnbnU5OSBhcwotCSAgYSBjX3N0ZC4KLQotMjAxNi0xMC0wNCAxODowNDoxMSAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIG1lc29uLmJ1aWxkOgotCSogdGVzdHMvY2hlY2svZ2V0cGx1Z2luc2RpcjoKLQkqIHRlc3RzL2NoZWNrL21lc29uLmJ1aWxkOgotCSAgbWVzb246IE1ha2UgdXNlIG9mIG5ldyBlbnZpcm9ubWVudCBvYmplY3QgYW5kIHNldCBwbHVnaW4gcGF0aCB0byBidWlsZGRpcgotCSAgV29ya2Fyb3VuZCBzb3VyY2Vfcm9vdCBiZWluZyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgYWxsIHByb2plY3RzIGluIHRoZSBzdWJwcm9qZWN0Ci0JICBjYXNlIGFuZCByZW1vdmUgbm93IHVubmVlZGVkIGdldHBsdWdpbnNkaXIKLQkgIEJ1bXAgbWVzb24gcmVxdWlyZW1lbnQgdG8gMC4zNQotCi0yMDE2LTEwLTA2IDExOjE1OjU0ICswNTMwICBHYXVyYXYgR3VwdGEgPGcuZ3VwdGFAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtcnRwYXV4LmM6Ci0JICB0ZXN0czogRml4IG1lbW9yeSBsZWFrIGluIHRlc3QgcnRwYXV4IHRlc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI0OTYKLQotMjAxNi0xMC0wMyAxMToyNzo1NCArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBGb3J3YXJkIGxhdGVuY3kgcXVlcmllcyB0byB1cHN0cmVhbQotCSAgV2l0aG91dCB0aGlzLCBsYXRlbmN5IHF1ZXJpZXMgdG8gaW1hZ2VmcmVlemUgd2lsbCBmYWlsLgotCi0yMDE2LTA5LTMwIDExOjM1OjM5IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogaG9va3MvcHJlLWNvbW1pdC5ob29rOgotCSogbWVzb24uYnVpbGQ6Ci0JKiB0ZXN0cy9jaGVjay9nZXRwbHVnaW5zZGlyOgotCSAgbWVzb246IFNldHVwIHByZSBjb21taXQgaG9vayBhbmQgZml4IGdldHBsdWdpbnNkaXIgZm9yIHN0YW5kYWxvbmUgY2FzZQotCi0yMDE2LTA5LTI5IDA0OjU1OjE0ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXhzcmM6IEhhbmRsZSBzdG9wIHBvaW50IGZyb20gc2VnbWVudAotCSAgSWYgdGhlIHNlZWsgc3RvcCBwb2ludCAob3Igc3RhcnQsIGR1cmluZyByZXZlcnNlIHBsYXkpCi0JICB3YXMgd2l0aGluIHRoZSBzZWdtZW50IHdlIGp1c3QgZmluaXNoZWQsIGdvIEVPUyBpbW1lZGlhdGVseQotCSAgaW5zdGVhZCBvZiBwcm9jZWVkaW5nIHRocm91Z2ggYWxsIG90aGVyIHBhcnRzIGFuZCBzZW5kaW5nCi0JICAwIGxlbmd0aCBzZWVrcyB0byB0aGVtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjEzOAotCi0yMDE2LTA5LTI5IDAzOjIxOjI2ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXhzcmM6IERyb3AgbG9jayBzaHV0dGluZyBkb3duIHBhZHMKLQkgIEF2b2lkIGEgc3BvcmFkaWMgZGVhZGxvY2sgb24gc2h1dGRvd24gYnkgZHJvcHBpbmcKLQkgIHRoZSBzcGxpdG11eCBsb2NrIGFyb3VuZCBwYWQgc2h1dGRvd24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIxMzgKLQotMjAxNi0wOS0yOSAwMjo0NzozNiArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmM6Ci0JICBzcGxpdG11eHNyYzogRml4IGV4dHJhIHVucmVmIGhhbmRsaW5nIHF1ZXJpZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIxMzgKLQotMjAxNi0wOS0yOSAwNDo1MDoyNSArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5oOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXhzcmM6IEF2b2lkIHN0YWxsIHdoZW4gcGFydHMgZ2V0IG91dCBvZiBzeW5jCi0JICBXaGVuIG9uZSBwYXJ0IG1vdmVzIGFoZWFkIG9mIHRoZSBvdGhlcnMgLSBkdWUgdG8gZXhjZXNzaXZlCi0JICBkb3duc3RyZWFtIHF1ZXVlaW5nLCBvciByZWFsbHkgc21hbGwgaW5wdXQgZmlsZXMgLSB0aGVuCi0JICB3ZSBjYW4gZW5kIHVwIGFjdGl2YXRpbmcgcGFydHMgbW9yZSB0aGFuIG9uY2UuIFRoYXQgY2FuIGxlYWQgdG8KLQkgIGVmZmVjdHMgbGlrZSBzaHV0dGluZyBkb3duIHBhZCB0YXNrcyBwcmVtYXR1cmVseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIxMzgKLQotMjAxNi0wOS0zMCAxMTo0MToxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogdXBkYXRlIHZlcnNpb24KLQotPT09IHJlbGVhc2UgMS45LjkwID09PQotCi0yMDE2LTA5LTMwIDEzOjAyOjE5ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMS45LjkwCi0KLTIwMTYtMDktMzAgMTI6MTc6MjYgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTYtMDktMzAgMTE6NDM6NTQgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2VsLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNi0wOS0zMCAxMzoyMjozMiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bkBvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy90YWdzY2hlY2tpbmcuYzoKLQkgIHRlc3RzOiBGaXggdGFnc2NoZWNraW5nIGZhaWx1cmUgZHVlIHRvIG1pc3NpbmcgUFRTCi0JICBxdG11eCBub3cgbmVlZHMgdGhlIFBUUyAoY29tbWl0IGE5OTM4ODNiNyksIHNvIGxldCdzIG1ha2Ugc3VyZSB3ZQotCSAgcHJvZHVjZSBvbmUgd2l0aCBvdXIgYnVmZmVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIyMjgKLQotMjAxNi0wOS0yOCAyMzowMzo1OCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IERvbid0IGNhbGN1bGF0ZSBQVFMgb2Zmc2V0IGFuZCBEVFMgd2l0aCBHU1RfQ0xPQ0tfVElNRV9OT05FCi0JICBKdXN0IGVycm9yIG91dCBpZiB0aGVyZSBpcyBubyB2YWxpZCBQVFMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMTQzCi0KLTIwMTYtMDktMjkgMTc6Mzc6MjggKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jOgotCSAgcXRkZW11eDogQWRkIEpQRUcyMDAwIGloZHIgYXRvbSB0byB0aGUgbGlzdCBvZiBrbm93biBvbmVzCi0JICBPdGhlcndpc2UgcXRkZW11eCBpcyBhbHdheXMgZ29pbmcgdG8gY29tcGxhaW4gYWJvdXQgaXQgYmVpbmcgdW5rbm93bi4KLQotMjAxNi0wOS0yOSAxMDoxOTo1NiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IEFsd2F5cyB3cml0ZSB0aGUgZGVmYXVsdCBmcmFtZSBkdXJhdGlvbiBmb3IgVlA4LzkgdG9vCi0JICBUaGUgV2ViTSBzcGVjIGFsbG93cyB0aGlzIG5vdywgYW5kIGl0IGFsbG93cyB1cyB0byBndWVzcyBhIGZyYW1lcmF0ZS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMTQxIGFuZAotCSAgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0Mzc5Ci0KLTIwMTYtMDktMjcgMTU6MjY6MTkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2WzQ1XWRlcGF5OiBEb24ndCBoYW5kbGUgTkFMcyBpbnNpZGUgU1RBUCB1bml0cyB0d2ljZQotCSAgVGhleSd2ZSBhbHJlYWR5IGJlZW4gaGFuZGxlZCBiZWZvcmUgcHVzaGluZyB0aGVtIGludG8gdGhlIGFkYXB0ZXIuCi0KLTIwMTYtMDktMjcgMTI6Mzk6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL21lc29uLmJ1aWxkOgotCSAgbWVzb246IHRlc3RzOiBmaXggdnA4IGF2YWlsYWJpbGl0eSBjaGVja3MKLQkgIFRob3NlIHZhcmlhYmxlcyBhcmUgbm90IGRlZmluZWQgaWYgdnA4IHdhcyBub3QgZm91bmQuCi0KLTIwMTYtMDktMjcgMTA6MjM6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgUmV2ZXJ0ICJtdWx0aWZpbGVzaW5rOiBzdHJlYW1saW5lIHRoZSBmaWxlLXN3aXRjaCBjb2RlIGEgYml0IgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBmMWNlYWFiMDJmM2Y1NTdlMjNiNzdiMTQ3NzFhNTc1Nzg4ZjkyYmI0LgotCSAgVGhpcyBicm9rZSBhdG9taWMgZmlsZSB3cml0ZXMgaW4gImJ1ZmZlciIgbW9kZS4gSXQgZGlkIG1ha2UKLQkgIHN1cmUgdGhhdCBhbnkgc3RyZWFtaGVhZGVycyBhcmUgcHJlcGVuZGVkIHRvIGVhY2ggZmlsZSBpbgotCSAgYnVmZmVyIG1vZGUgYXMgd2VsbCwgYnV0IHRoYXQncyBub3QgcmVhbGx5IG5lZWRlZCBpbiBwcmFjdGljZSwKLQkgIHdoZXJlYXMgYXRvbWljIGZpbGUgd3JpdGVzIGFyZSwgc28gbGV0J3MgcmVzdG9yZSB0aGUgc3RhdHVzCi0JICBxdW8gYW50ZSBmb3Igbm93IHNpbmNlIHRoaXMgd2FzIHByaW1hcmlseSBhIGNvZGUgY2xlYW51cCBhbnl3YXksCi0JICBhbmQgaWYgYW55b25lIG5lZWRzIHRvIHN0cmVhbWhlYWRlcnMgaW4gYnVmZmVyIG1vZGUgdG9vIHRoZXkKLQkgIGNhbiBtYWtlIGEgcGF0Y2ggdG8gaW1wbGVtZW50IHRoYXQgZGlmZmVyZW50bHkuIFJlLWltcGxlbWVudGluZwotCSAgdGhlIGF0b21pYyB3cml0ZXMgaW4gdGhlIGVsZW1lbnQgYWxzbyBzZWVtcyB3YXkgdG9vIG11Y2ggd29yay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY5OTAKLQotMjAxNi0wOS0yNyAxMDoyMjo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBSZXZlcnQgIm11bHRpZmlsZXNpbms6IGNsb3NlIGZpbGUgb24gd3JpdGUgZXJyb3Igd2l0aCBuZXh0LWZpbGUgbW9kZSBpcyBzZXQgdG8gYnVmZmVyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4NGU0NDFkMjY4NWNmMjIzZDM0OGE5NWJlMGM1YmE2OTNiYmY2NjI0LgotCSAgVGhpcyB3aWxsIG5vIGxvbmdlciBiZSBuZWVkZWQgb25jZSB3ZSByZXZlcnQgZjFjZWFhYjAyLgotCi0yMDE2LTA5LTI2IDEzOjIyOjI5IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svbWVzb24uYnVpbGQ6Ci0JICBtZXNvbjogQWRkIGdzdC1wbHVnaW5zLWJhc2UgcGx1Z2lucyBkaXJlY3RvcmllcyB0byBiZSB1c2VkIGJ5IHRlc3RzCi0KLTIwMTYtMDktMjYgMTQ6MzA6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvbWVzb24uYnVpbGQ6Ci0JKiBtZXNvbi5idWlsZDoKLQkqIHRlc3RzL2NoZWNrL2dldHBsdWdpbnNkaXI6Ci0JKiB0ZXN0cy9jaGVjay9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBhZGQgdW5pdCB0ZXN0cwotCSAgT25seSB3b3JrcyBwcm9wZXJseSBpbiBhbiBpbnN0YWxsZWQgc2V0dXAgY3VycmVudGx5LCBtb3N0Ci0JICBsaWtlbHkgd29uJ3Qgd29yayB3aXRoIGEgc3VicHJvamVjdHMgc2V0dXAgeWV0LgotCi0yMDE2LTA5LTI0IDA5OjM2OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBtZXNvbi5idWlsZDoKLQkqIHBvL21lc29uLmJ1aWxkOgotCSAgbWVzb246IGhvb2sgdXAgdHJhbnNsYXRpb25zCi0KLTIwMTYtMDktMDggMTc6MzA6NDEgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogRG9uJ3QgbmVnb3RpYXRlIHRvIGxlc3MgdGhhbiB0d28gc2VnbWVudHMKLQkgIEdzdEF1ZGlvUmluZ0J1ZmZlciBkb2Vzbid0IG5lZWRzIHVzIHRvIGhhdmUgYXQgbGVhc3QgMiBzZWdtZW50cy4gV2UgbWFrZQotCSAgc3VyZSB0aGF0IGlmIG91ciBidWZmZXIgcGFyYW1ldGVycyBhcmUgc3VjaCB0aGF0IHRoZSBtYXhsZW5ndGggaXMgbm90IGF0Ci0JICBsZWFzdCAyeCBmcmFnc2l6ZSwgd2Ugc3RpbGwgcmVxdWVzdCB0aGUgcmluZ2J1ZmZlciB0byBrZWVwIHRoYXQgbXVjaAotCSAgc3BhY2Ugc28gaXQgY29udGludWVzIHRvIHdvcmsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwNDQ2Ci0KLTIwMTYtMDktMjQgMjM6MjI6MDEgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5Lmg6Ci0JICBydHBzYmNwYXk6IEZpeCB0aW1lc3RhbXBpbmcKLQkgIFdlIHdlcmUganVzdCBwaWNraW5nIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgYnVmZmVyIHB1c2hlZCBpbnRvIG91cgotCSAgYWRhcHRlciBiZWZvcmUgd2UgaGFkIGVub3VnaCBkYXRhIHRvIHB1c2ggb3V0LgotCSAgVGhpcyBmaXhlcyB0aGluZ3MgdG8gZmlndXJlIG91dCBob3cgbGFyZ2UgZWFjaCBmcmFtZSBpcyBhbmQgd2hhdAotCSAgZHVyYXRpb24gaXQgY292ZXJzLCBzbyB3ZSBjYW4gc2V0IGJvdGggdGhlIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24KLQkgIGNvcnJlY3RseS4KLQkgIEFsc28gYWRkcyBzb21lIERJU0NPTlQgaGFuZGxpbmcuCi0KLTIwMTYtMDctMTIgMTg6MTQ6NTIgKzAyMDAgIEdlb3JnIExpcHBpdHNjaCA8Z2xpcHBpdHNjaEB0b29sc29uYWlyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEZpeCBmb3VyY2MgZm9yIFByb1JlcyBQcm94eQotCSAgVGhpcyBpcyBhcGNvLCBhY2NvcmRpbmcgdG8KLQkgIGh0dHBzOi8vd2lraS5tdWx0aW1lZGlhLmN4L2luZGV4LnBocD90aXRsZT1BcHBsZV9Qcm9SZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkwNDgKLQotMjAxNi0wOS0xOCAyMDo1NTozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3ZweC9tZXNvbi5idWlsZDoKLQkgIG1lc29uOiBmaXggYnVpbGQgd2l0aCB2cHggMS4zLngKLQkgIHZweCA+PSAxLjQuMCBpcyBvcHRpb25hbAotCi0yMDE2LTA5LTE1IDE4OjE5OjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBVc2UgbmV3IGJpbiBzdXBwcmVzc2VkIGZsYWdzIEFQSSBmb3IgbWFuYWdpbmcgdGhlIGVsZW1lbnQgZmxhZ3MKLQotMjAxNi0wOS0xNSAwOTo1MjozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JKiBnc3QvcnRwL2Rib29saHVmZi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgZXh0LCBnc3Q6IGZpeCBpbmRlbnRhdGlvbgotCi0yMDE2LTA5LTE1IDA5OjUyOjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGgyNjMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwc2Vzc2lvbi5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwdnA5LmM6Ci0JICB0ZXN0czogZml4IGluZGVudGF0aW9uCi0KLTIwMTYtMDgtMTEgMTE6MDQ6MjIgLTA2MDAgIFRob21hcyBCbHVlbWVsIDx0Ymx1ZW1lbEBjb250cm9sNC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBGaXggY2FsY3VsYXRpbmcgbmV4dF9zZXFudW0gd2hlbiBkcm9wcGluZyBvbGQgYnVmZmVycyBmcm9tIGEgZnVsbCBxdWV1ZS4KLQkgIEZpeGVzIGNhbGN1bGF0aW5nIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB3aGVuIGEgSVRFTV9UWVBFX0xPU1Qgd2l0aCBtb3JlIHRoYW4gb25lCi0JICBkZWZpbml0ZWx5IGxvc3QgcGFja2V0cyBpcyBlbmNvdW50ZXJlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njk3NTcKLQotMjAxNi0wOC0xMSAyMzowNzo0NCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBpbXByb3ZlZCBydHgtcnR0IGF2ZXJhZ2luZwotCSAgVGhlIGJhc2ljIGlkZWEgaXMgdGhpczoKLQkgIDEuIEZvciAqbGFyZ2VyKiBydHgtcnR0LCB3ZWlnaCBhIG5ldyBtZWFzdXJlbWVudCBhcyBiZWZvcmUKLQkgIDIuIEZvciAqc21hbGxlciogcnR4LXJ0dCwgYmUgYSBiaXQgbW9yZSBjb25zZXJ2YXRpdmUgYW5kIHdlaWdoIGEgYml0IGxlc3MKLQkgIDMuIEZvciB2ZXJ5IGxhcmdlIG1lYXN1cmVtZW50cywgY29uc2lkZXIgdGhlbSAib3V0bGllcnMiCi0JICBhbmQgY291bnQgdGhlbSBhIGxvdCBsZXNzCi0JICBUaGUgaWRlYSBiZWluZyB0aGF0IHJlZHVjaW5nIHRoZSBydHgtcnR0IGlzIG11Y2ggbW9yZSBoYXJtZnVsIHRoZW4KLQkgIGluY3JlYXNpbmcgaXQsIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gYmUgdW5kZXJlc3RpbWF0aW5nIHRoZSBydHQgb2YgdGhlCi0JICBuZXR3b3JrLCBhbmQgd2hlbiB1c2luZyB0aGlzIG51bWJlciB0byBlc3RpbWF0ZSB0aGUgbGF0ZW5jeSB5b3UgbmVlZCBmb3IKLQkgIHlvdSBqaXR0ZXJidWZmZXIsIHlvdSB3b3VsZCByYXRoZXIgd2FudCBpdCB0byBiZSBhIGJpdCBsYXJnZXIgdGhlbiBhIGJpdAotCSAgc21hbGxlciwgcG90ZW50aWFsbHkgbG9zaW5nIHJ0eC1wYWNrZXRzLiBUaGUgIm91dGxpZXItZGV0ZWN0b3IiIGlzIHRoZXJlCi0JICB0byBwcmV2ZW50IGEgc2luZ2xlIHNrZXdlZCBtZWFzdXJlbWVudCB0byBhZmZlY3QgdGhlIG91dGNvbWUgdG9vIG11Y2guCi0JICBPbiB3aXJlbGVzcyBuZXR3b3JrcywgdGhlc2UgYXJlIHN1cnByaXNpbmdseSBjb21tb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY4Ci0KLTIwMTYtMDgtMDUgMTI6NTE6NTkgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBEZXRlY3Qgd2hldGhlciB0byBhc3N1bWUgZXF1aWRpc3RhbnQgc3BhY2luZyB3aGVuIGxvc3MKLQkgIEFzc3VtaW5nIGVxdWlkaXN0YW50IHBhY2tldCBzcGFjaW5nIHdoZW4gdGhhdCdzIG5vdCB0cnVlIGxlYWRzIHRvIG1vcmUKLQkgIGxvc3MgdGhhbiBuZWNlc3NhcnkgaW4gdGhlIGNhc2Ugb2YgcmVvcmRlcmluZyBhbmQgaml0dGVyLiBUeXBpY2FsbHkgdGhpcwotCSAgaXMgdHJ1ZSBmb3IgdmlkZW8gd2hlcmUgb25lIGZyYW1lIG9mdGVuIGNvbnNpc3RzIG9mIG11bHRpcGxlIHBhY2tldHMKLQkgIHdpdGggdGhlIHNhbWUgcnRwIHRpbWVzdGFtcC4gSW4gdGhpcyBjYXNlIGl0J3MgYmV0dGVyIHRvIGFzc3VtZSB0aGF0IHRoZQotCSAgbWlzc2luZyBwYWNrZXRzIGhhdmUgdGhlIHNhbWUgdGltZXN0YW1wIGFzIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCwgc28KLQkgIHRoYXQgdGhlIHNjaGVkdWxlZCBsb3N0IHRpbWVyIGRvZXMgbm90IHRpbWUgb3V0IHRvbyBlYXJseSBjYXVzaW5nIHRoZQotCSAgcGFja2V0cyB0byBiZSBjb25zaWRlcmVkIGxvc3QgZXZlbiB0aG91Z2ggdGhleSBtYXkgYXJyaXZlIGluIHRpbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY4Ci0KLTIwMTYtMDctMjcgMTA6Mzk6NTAgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBEb24ndCByZXF1ZXN0IHJ0eCBpZiAnbm93JyBpcyBwYXN0IHJldHJ5IHBlcmlvZAotCSAgVGhlcmUgaXMgbm8gbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIEVYUEVDVEVEIHRpbWVyIGlmIHdlJ3JlIGFscmVhZHkKLQkgIHBhc3QgdGhlIHJldHJ5IHBlcmlvZC4gVW5kZXIgbm9ybWFsIG9wZXJhdGlvbiB0aGlzIHdvbid0IGhhcHBlbiwgYnV0IGlmCi0JICB0aGVyZSBhcmUgbW9yZSB0aW1lcnMgdGhhbiB0aGUgaml0dGVyYnVmZmVyIGlzIGFibGUgdG8gcHJvY2VzcyBpbgotCSAgcmVhbC10aW1lLCBzY2hlZHVsaW5nIG1vcmUgdGltZXJzIHdpbGwganVzdCBtYWtlIHRoZSBzaXR1YXRpb24gd29yc2UuCi0JICBJbnN0ZWFkLCBjb25zaWRlciB0aGlzIHBhY2tldCBhcyBsb3N0IGFuZCBtb3ZlIG9uLiBUaGlzIHNjZW5hcmlvIGNhbgotCSAgb2NjdXIgd2l0aCBoaWdoIGxvc3MgcmF0ZSwgbG93IHJ0dCBhbmQgaGlnaCBjb25maWd1cmVkIGxhdGVuY3kuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY4Ci0KLTIwMTYtMDctMjYgMTg6MDE6NDggKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBGaXggbG9zdCBkdXJhdGlvbiB3aGVuIGdhcCBhZnRlciBsb3N0IHRpbWVyCi0JICBUaGlzIHBhdGNoIGZpeGVzIGFuIGlzc3VlIHdpdGggdGhlIGVzdGltYXRlZCBnYXAgZHVyYXRpb24gd2hlbiB0aGVyZSBpcwotCSAgYSBnYXAgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBsb3N0IHRpbWVyIGhhcyBiZWVuIHByb2Nlc3NlZC4gUHJldmlvdXNseQotCSAgdGhlcmUgd2FzIGEgZGlzY3JlcGFuY3kgYmV0ZWVuIHRoZSBnYXAgaW4gc2VxbnVtIGFuZCBnYXAgaW4gZHRzIHdoaWNoCi0JICB3b3VsZCBjYXVzZSB3cm9uZyBjYWxjdWxhdGVkIGR1cmF0aW9uLiBUaGUgaXNzdWUgd291bGQgb25seSBiZSBzZWVuIHdpdGgKLQkgIHJldHJhbm1pc3Npb24gZW5hYmxlZCBzaW5jZSB3aGVuIGl0J3MgZGlzYWJsZWQgbG9zdCB0aW1lcnMgYXJlIG9ubHkKLQkgIGNyZWF0ZWQgd2hlbiBhIHBhY2tldCBpcyByZWNlaXZlZCBhbmQgdGhlIGFjdHVhbCBnYXAgbGVuZ3RoIGFuZCBsYXN0IGR0cwotCSAgaXMga25vd24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY4Ci0KLTIwMTYtMDctMTkgMDE6MTE6NTggKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEV4cG9zZSBydHgtZGVhZGxpbmUgYXMgYSBwcm9wZXJ0eQotCSAgVGhlIGRlZmF1bHQgLTEgZ2l2ZXMgdGhlIG9sZCBiZWhhdmlvci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njk3NjgKLQotMjAxNi0wOC0xMSAxMjowMjoxOSArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBJbXByb3ZlZCBleHBlY3RlZC10aW1lciBoYW5kbGluZyB3aGVuIGdhcCA+IDAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njk3NjgKLQotMjAxNi0wOC0xMSAxMTo1MTo1MCArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IE1ham9yIGltcHJvdmVtZW50cyBmb3IgUlRYIHN0YXRzCi0JICBTdGF0cyBzaG91bGQgYWxzbyBiZSBjb2xsZWN0ZWQgZm9yIHVuc3VjY2Vzc2Z1bCBwYWNrZXRzLgotCSAgcnR4LXJ0dCBpcyB2ZXJ5IGltcG9ydGFudCBmb3IgZGV0ZXJtaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmVkCi0JICBsYXRlbmN5IG9uIHRoZSBqaXR0ZXJidWZmZXIuIEl0J3MgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gYmUgYWJsZSB0bwotCSAgaW5jcmVhc2UgdGhlIGxhdGVuY3kgd2hlbiByZXRyYW5zbWl0dGVkIHBhY2tldHMgYXJyaXZlIHRvbyBsYXRlIGFuZCBhcmUKLQkgIGNvbnNpZGVyZWQgbG9zdC4gVGhpcyBwYXRjaCBpbmNsdWRlcyB0aGVzZSBsYXRlIHBhY2tldHMgaW4gdGhlCi0JICBjYWxjdWxhdGlvbiBvZiB0aGUgdmFyaW91cyBydHggc3RhdHMsIG1ha2luZyB0aGVtIG1vcmUgY29ycmVjdCBhbmQKLQkgIHVzZWZ1bC4KLQkgIEFsc28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIG9yaWdpbmFsIHBhY2tldCBhcnJpdmVzIGFmdGVyIGEgTkFDSyBpcyBzZW50LAotCSAgdGhlIHJlY2VpdmVkIFJUWCBwYWNrZXQgc2hvdWxkIHVwZGF0ZSB0aGUgc3RhdHMgc2luY2UgaXQgcHJvdmlkZXMgdXNlZnVsCi0JICBpbmZvcm1hdGlvbiBhYm91dCBSVFQuCi0JICBUaGUgUlRUIGlzIG9ubHkgdXBkYXRlZCBpZiBhbmQgb25seSBpZiBhbGwgcmVxdWVzdGVkIHJldHJhbm1pc3Npb25zIGFyZQotCSAgcmVjZWl2ZWQuIFRoYXQgd2F5IHRoZSBSVFQgaXMgZ3VhcmFudGVlZCB0byBtYWtlIHNlbnNlLiBJZiBub3Qgd2UgZG9uJ3QKLQkgIGtub3cgd2hpY2ggcmVxdWVzdCB0aGUgcGFja2V0IGlzIGEgcmVzcG9uc2UgdG8gYW5kIHRoZSBSVFQgbWF5IGJlIGJvZ3VzLgotCSAgQSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgUlRUIGlzIG5vdCB1cGRhdGVkIGZvciBhIHJlcXVlc3QKLQkgIHdoZW4gb25lIG9mIHRoZSBSVFggcGFja2V0cyBmb3IgdGhhdCBzZXFudW0gaXMgbG9zdCwgYnV0IHRoYXQgc2luY2UKLQkgIG1lYXN1cmVkIFJUVCB3aWxsIGJlIG1vcmUgYWNjdXJhdGUuCi0JICBUaGUgaW1wbGVtZW50YXRpb24gc3RvcmUgdGhlIFJUWCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aW1lZCBvdXQgdGltZXJzCi0JICBhbmQgdXNlIHRoaXMgd2hlbiB0aGUgcmV0cmFuc21pdHRlZCBwYWNrZXQgYXJyaXZlcy4gRm9yIHBlcmZvcm1hbmNlCi0JICB0aGVzZSB0aW1lcnMgYXJlIHN0b3JlZCBzZXBhcmF0ZWx5IGZyb20gdGhlICJub3JtYWwiIHRpbWVycyBpbiBvcmRlciB0bwotCSAgbm90IGltcGFjdCBwZXJmb3JtYW5jZSAoc2VlIGF0dGFjaGVkIHBlcmZvcm1hbmNlIHRlc3QpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTc2OAotCi0yMDE2LTA4LTExIDExOjAyOjQ0ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEFkZCBhbmQgZXhwb3NlIG1vcmUgc3RhdHMgYW5kIGluY3JlYXNlIHRlc3Rpbmcgb2YgaXQKLQkgIEFkZCBudW0tcHVzaGVkIGFuZCBudW0tbG9zdC4KLQkgIEV4cG9zZSBudW0tbGF0ZSwgbnVtLWR1cGxpY2F0ZXMgYW5kIGF2Zy1qaXR0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY4Ci0KLTIwMTYtMDctMDcgMTA6MjA6MDIgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JICBydHhyZWNlaXZlOiBTZXQgYnVmZmVyIGZsYWcgZm9yIHJldHJhbnNtaXR0ZWQgcGFja2V0cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTc2OAotCi0yMDE2LTA3LTA5IDIzOjQ3OjQxICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBPcHRpb24gdG8gZGlzYWJsZSBydHgtZGVsYXktcmVvcmRlcgotCSAgV2hlbiBkaXNhYmxlZCB3ZSBjYW4gc2F2ZSBzb21lIGl0ZXJhdGlvbnMgb3ZlciB0aW1lcnMuCi0JICBUaGVyZSBpcyBwcm9iYWJseSBhbiBhcmd1bWVudCBmb3IgcnR4LWRlbGF5LXJlb3JkZXIgdG8gZXhpc3QsIGJ1dAotCSAgZm9yIG5vcm1hbCBvcGVyYXRpb25zLCBoYW5kbGluZyBqaXR0ZXIgKHJlb3JkZXJpbmcpIGlzIHNvbWV0aGluZyBhCi0JICBqaXR0ZXJidWZmZXIgc2hvdWxkIGRvLCBhbmQgdGhpcyB2YXJpYWJsZSBmZWVscyBsaWtlIGZ1bmN0aW9uYWxpdHkgdGhhdAotCSAgaXMgbm90ICJpbi1zeW5jIiB3aXRoIHdoYXQgdGhlIGppdHRlcmJ1ZmZlciBpcyB0cnlpbmcgdG8gYWNoaWV2ZS4KLQkgIEV4YW1wbGU6IFlvdSBoYXZlIDUwbXMgaml0dGVyIG9uIHlvdXIgbmV0d29yaywgYW5kIGFyZSByZWNlaXZpbmcKLQkgIGF1ZGlvIHBhY2tldHMgd2l0aCAxMG1zIGR1cmF0aW9ucy4gQW4gYXVkaW8gcGFja2V0IHNob3VsZCBub3QgYmUKLQkgIGNvbnNpZGVyZWQgbGF0ZSB1bnRpbCBpdHMgcnR4LXRpbWVvdXQgaGFzIGV4cGlyZWQgKGFuZCBoZW5jZSBhIHJ0eC1ldmVudAotCSAgaXMgc2VudCksIGJ1dCB3aXRoIHJ0eC1kZWxheS1yZW9yZGVyLCBldmVudHMgd2lsbCBiZSBzZW50IHByZXR0eSBtdWNoCi0JICBhbGwgdGhlIHRpbWUgZHVlIHRvIHRoZSBqaXR0ZXIgb24gdGhlIG5ldHdvcmsuCi0JICBQb2ludCBiZWluZzogVGhlIGppdHRlcmJ1ZmZlciBzaG91bGQgYWRhcHQgaXRzIHNpemUgdG8gdGhlIG1lYXN1cmVkIG5ldHdvcmsKLQkgIGppdHRlciwgYW5kIHRoZW4gcnR4LWRlbGF5LXJlb3JkZXIgbmVlZHMgdG8gYWRhcHQgYXMgd2VsbCwgb3Igc2ltcGx5Ci0JICBnZXQgb3V0IG9mIHRoZSB3YXkgYW5kIGxldCB0aGUgb3RoZXIgKGJldHRlcikgcnR4LW1lY2hhbmlzbXMgZG8gdGhlaXIgam9iLgotCSAgQWxzbyBjaGFuZ2UgZmluZF90aW1lciB0byBvbmx5IHVzZSBzZXFudW0gYXMgYW4gYXJndW1lbnQsIHNpbmNlIHRoZXJlCi0JICB3aWxsIG9ubHkgZXZlciBiZSBvbmUgdGltZXIgcGVyIHNlcW51bSBhdCBhbnkgZ2l2ZW4gdGltZS4gSW4gdGhlCi0JICBvbmUgY2FzZSB3aGVyZSB0aGUgdHlwZSBtYXR0ZXJzLCB0aGUgY2FsbGVyIHNpbXBseSBjaGVja3MgdGhlIHR5cGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NzY4Ci0KLTIwMTYtMDktMTQgMDk6NTg6NDEgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgcnRwaDI2M3BheTogRml4IGRvdWJsZSBmcmVlIGZyb20gY292ZXJpdHkKLQkgIENJRCAjMTM3Mjg4NwotCi0yMDE2LTA5LTE0IDA5OjU4OjM3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgIHJ0cGgyNjNwYXk6IEluZGVudCBhcyBwZXIgZ3N0LWluZGVudAotCi0yMDE2LTA5LTE0IDExOjMwOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IERlcGVuZCBvbiBnc3RyZWFtZXIgMS45LjIuMQotCi0yMDE2LTA5LTE0IDEwOjE3OjAyICswOTAwICBXb25jaHVsIExlZSA8d29uY2h1bC5sZWVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5jOgotCSAgYXV0b2RldGVjdDogVXNlIGdzdF9iaW5fc2V0X3N1cHByZXNzZWRfZmxhZ3MoKSBBUEkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzEzOTUKLQotMjAxNi0wOS0wOSAxNTozNjoxMiArMDIwMCAgVGhvbWFzIFNjaGV1ZXJtYW5uIDxUaG9tYXMuU2NoZXVlcm1hbm5AYmFyY28uY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuYzoKLQkgIGphY2s6IEZpeCBwaXBlbGluZSBoYW5nIHdoZW4gamFjayBjaGFuZ2VzIHNhbXBsZSByYXRlIG9yIGJ1ZmZlciBzaXplCi0JICBJZiBqYWNrZCBjaGFuZ2VzIHRoZSBidWZmZXIgc2l6ZSBvciBzYW1wbGUgcmF0ZSwgamFja2F1ZGlvc2luayBoYW5ncwotCSAgYW5kIGNhbid0IGJlIHN0b3BwZWQuIFRoaXMgYWxzbyBoYXBwZW5zIGlmIGphY2sgaXMgY29uZmlndXJlZCBhcyBzbGF2ZQotCSAgYW5kIGEgZ3N0cmVhbWVyIHBpcGVsaW5lIGlzIHN0YXJ0ZWQgb24gdGhlIHNsYXZlIG1hY2hpbmUgd2hpbGUgdGhlIGphY2sKLQkgIG1hc3RlciBpc24ndCBydW5uaW5nIHlldC4gSWYgdGhlIHRoZSBqYWNrIG1hc3RlciBpcyBzdGFydGVkIGl0IGNoYW5nZXMKLQkgIHRoZSBidWZmZXIgc2l6ZSAvIHNhbXBsZSByYXRlIGFuZCBqYWNrYXVkaW9zaW5rIGNhbid0IGJlIHN0b3BwZWQuCi0JICBUaGlzIGZpeCBjYWxscyBqYWNrX3NodXRkb3duX2NiIHdoZW4gamFja19zYW1wbGVfcmF0ZV9jYiBvcgotCSAgamFja19idWZmZXJfc2l6ZV9jYiBpcyBjYWxsZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcxMjcyCi0KLTIwMTYtMDktMTIgMjA6MDg6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBmaWVsZCBvcmRlcmluZyBmb3IgcmV2ZXJzZSBwbGF5YmFjawotCSAgQW5kIGFjdHVhbGx5IGNhbGN1bGF0ZSB0aGUgZmllbGQgZHVyYXRpb24gaW5zdGVhZCBvZiBhIGZyYW1lIGR1cmF0aW9uIHNvCi0JICB0aGF0IHdlIGNhbiBwcm9wZXJseSB0aW1lc3RhbXAgb3V0cHV0IGZyYW1lcyBpbiBmaWVsZHM9YWxsIG1vZGUuCi0JICBUaGlzIGlzIHByb2JhYmx5IHN0aWxsIGJyb2tlbiBmb3IgcmV2ZXJzZSBwbGF5YmFjayBpbiB0ZWxlY2luZSBtb2RlLgotCi0yMDE2LTA5LTEyIDA5OjAyOjAwICswMDAwICBUaG9tYXMgS2xhdXNuZXIgPHRrQGdpZ2Eub3IuYXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IEZpeCBjb21waWxhdGlvbiBvbiBOZXRCU0QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzEyNzgKLQotMjAxNi0wOS0xMCAyMDo1MToxMCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjE4ZDgyMCB0byBmOTgwZmQ5Ci0KLTIwMTYtMDktMDkgMTQ6MDI6MjUgKzAyMDAgIFhhYmllciBSb2RyaWd1ZXogQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG9mZnNldCBpcyBpcnJlbGV2YW50IHdoZW4gbm8gY3J5cHRvIGluZm8KLQkgIENhdXNlIGxhdGVyIGl0IHdpbGwgdHJ5IHRvIHVzZSB0aGUgY3J5cHRvIGluZm8gYXJyYXkgdG8gZ2V0IGFuIGluZGV4IGFuZAotCSAgYXR0YWNoIG9uIG9mIHRoZSBwb3NpdGlvbnMgYXMgYnVmZmVyJ3MgY3J5cHRvIGluZm8uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwOTUxCi0KLTIwMTYtMDktMTAgMDk6NTM6NTcgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGY0OWM1NWUgdG8gYjE4ZDgyMAotCi0yMDE2LTA5LTA3IDE1OjMzOjMwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbToKLQkgIG9zeGF1ZGlvOiBEaXN0cmlidXRlIGRldmljZSBwcm92aWRlciBmaWxlcwotCSAgVGhvc2Ugd2hlcmUgbWlzc2luZyB0aGUgdGhlIGRldiByZWxlYXNlIHRhcmJhbGxzIGZvciAxLjkuMiB3aGljaAotCSAgcHJldmVudGVkIGJ1aWxkaW5nIGZyb20gdGFyYmFsbCBvbiBPU1ggcGxhdGZvcm0KLQotMjAxNi0wOS0wNiAwOTo0OTozOSArMDIwMCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IGNyYXNoIHdpdGggbm8gY2VuYyBhdXggb2Zmc2V0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwOTUxCi0KLTIwMTYtMDktMDUgMDk6Mzk6MzMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogcGFyc2UgYSBiaXQgbW9yZSBvZiB0aGUgaHVtb25nb3VzIExPQVMgZGF0YQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTI3OAotCi0yMDE2LTA5LTA1IDA5OjM5OjA4ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IG1ha2UgaXQgY2xlYXIgd2hlbiBhIHBvdGVudGlhbCBMT0FTIGZyYW1lIGlzIG5vdCBvbmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkyNzgKLQotMjAxNi0wOS0wNSAwOTozODoyNiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBhZGQgYSBmZXcgY29tbWVudHMgdG8gYW5jaG9yIHBhcnNpbmcgdG8gdGhlIHNwZWMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkyNzgKLQotMjAxNi0wOS0wNSAwOTozNzowMiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuaDoKLQkgIGFhY3BhcnNlOiBpbXByb3ZlIGNoYW5uZWwvcmF0ZSBoYW5kbGluZwotCSAgS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBwYXJzZWQgY2hhbm5lbHMvcmF0ZSBmaWVsZHMgc28gdGhleSBjYW4gYmUKLQkgIHVzZWQgZXZlbiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IHlldCBjb25maWd1cmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTI3OAotCi0yMDE2LTA5LTA1IDA5OjM1OjUzICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGZpeCB2YXJsZW5ndGggbnVtYmVyIHJlYWRpbmcgYXMgcGVyIHNwZWMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkyNzgKLQotMjAxNi0wOS0wNSAwOTozNTowMiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBzdHJpcCB1bmVlZGVkIHN0YXRpYyBhcnJheXMgc2xhY2sKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkyNzgKLQotMjAxNi0wNy0xOCAxOToxODo1OCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5Lmg6Ci0JICBydHBtcDRhZGVwYXk6IE9ubHkgZGVjbGFyZSBhIHN0cmVhbSB0byBiZSBmcmFtZWQgb25jZSBhIG1hcmtlciBiaXQgaGFzIGJlZW4gc2VlbgotCSAgVGhpcyBtYXkgY2F1c2UgYSBmZXcgcGFja2V0cyB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHBhcnNlciwgYnV0IGl0J3MKLQkgIGJldHRlciB0aGFuIG5ldmVyIHB1c2hpbmcgb3V0IGJ1ZmZlcnMgZnJvbSBhIHNsaWdodGx5IGJyb2tlbiBzdHJlYW0KLQkgIHdoZXJlIG5vIG1hcmtlciBiaXRzIGFyZSBzZXQuCi0KLTIwMTYtMDktMDYgMTQ6MjU6NDIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JICBkdmRlbXV4OiBGaXggdGltZXN0YW1waW5nIGluIHJldmVyc2UgcGxheWJhY2sgbW9kZQotCSAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCByaWdodCBub3cgaWYgYWZ0ZXIgYSBkZW11eGVyIHRoYXQgc3VwcG9ydHMgcmV2ZXJzZQotCSAgcGxheWJhY2ssIGUuZy4gd2l0aCBEViBjb250YWluZXIgaW5zaWRlIEFWSSBjb250YWluZXIuCi0KLTIwMTYtMDktMDUgMTI6MjM6NTQgLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBtZXNvbi5idWlsZDoKLQkgIG1lc29uOiBCdW1wIHZlcnNpb24gdG8gMS45LjIKLQotMjAxNS0wNi0yNiAyMDoxMzoxNyArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBvcGVuY3JlZWQuY29tPgotCi0JKiBnc3QvaXNvbXA0L0dzdFFUTXV4LnByczoKLQkqIGdzdC9pc29tcDQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogSW1wbGVtZW50IHRoZSBwcmVzZXQgaW50ZXJmYWNlLgotCSAgKyBBbmQgcHJvdmlkZSBhICJ5b3V0dWJlIiBwcmVzZXQsIHdoaWNoIGJhc2VkIG9uCi0JICBodHRwczovL3N1cHBvcnQuZ29vZ2xlLmNvbS95b3V0dWJlL2Fuc3dlci8xNzIyMTcxIHNldHMKLQkgIGZhc3RzdGFydCB0byBUcnVlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTU1OQotCi0yMDE2LTA5LTAxIDEyOjI3OjM1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuOS4yID09PQotCi0yMDE2LTA5LTAxIDEyOjI3OjE1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjkuMgotCi0yMDE2LTA5LTAxIDExOjIzOjMzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNi0wOS0wMSAxMDo1OTo1MSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL2RlbW8uYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgdGVzdHMvZXhhbXBsZXM6ICNkZWZpbmUgR0RLX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQkgIFdlIHVzZSBnZGtfY2Fpcm9fY3JlYXRlKCkgd2hpY2ggaXMgZGVwcmVjYXRlZCBzaW5jZSAzLjIyLgotCi0yMDE2LTA4LTMxIDA1OjUwOjQ0ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL01ha2VmaWxlLmFtOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JICBvc3h2aWRlbzogUmVtb3ZlIFF1aWNrVGltZSByZWZlcmVuY2VzLgotCSAgUXVpY2tUaW1lLmggaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBvbiBPUyBYIDEwLjEyIChTaWVycmEpLAotCSAgYW5kIGJvdGggdGhlIGhlYWRlciBhbmQgdGhlIGZyYW1ld29yayBzZWVtIHVubmVjZXNzYXJ5Ci0JICBmb3IgY29tcGlsYXRpb24gLSBhdCBsZWFzdCBhcyBvZiAxMC4xMSAoRWwgQ2FwaXRhbikuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwNTI2Ci0KLTIwMTYtMDgtMTkgMTE6MTE6MDMgLTA3MDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgVXNlIHRoZSBuZXcgQVBJIHRvIHBvc3QgZmxvdyBFUlJPUiBtZXNzYWdlcyBvbiB0aGUgYnVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwMTU4Ci0KLTIwMTYtMDgtMjYgMjE6MzI6MDcgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIGdpdGlnbm9yZTogaWdub3JlIHF0ZGVtdXgsIHJ0cGgyNjEgYW5kIHJ0cHZwOSB0ZXN0cwotCi0yMDE2LTA4LTI2IDIxOjIyOjE2ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IHVzZSBHU1RfTkVUX0xJQlMgaW5zdGVhZCBvZiBoYXJkY29kZWQgLWxnc3RuZXQKLQkgIEZpeGVzIGJ1aWxkIGluIE9TWCB3aGVuIHJ1bm5pbmcgJ21ha2UgY2hlY2snIGluIGdzdC11bmluc3RhbGxlZC4KLQotMjAxNi0wOC0yNiAyMToxNDo0NyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IHJlbW92ZSBhIHdyb25nICdjb25zdCcgc3BlY2lmaWVyCi0JICBGaXhlcyAiZXJyb3I6IGR1cGxpY2F0ZSAnY29uc3QnIGRlY2xhcmF0aW9uIHNwZWNpZmllciIKLQotMjAxNi0wOC0yNiAyMToxMTo1OSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiBzaWxlbmNlIGVycm9yIGFib3V0IHB0aHJlYWQgZm9yICdtYWtlIGNoZWNrJyBpbiBvc3gKLQkgIEZpeGVzICJjbGFuZzogZXJyb3I6IGFyZ3VtZW50IHVudXNlZCBkdXJpbmcgY29tcGlsYXRpb246ICctcHRocmVhZCciCi0KLTIwMTYtMDgtMjYgMjA6MzE6MTAgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdnA5ZW5jOiBGaXggYnVpbGQgb2YgdW5pdCB0ZXN0IGJ5IGxldHRpbmcgaXQgbGluayB0byBsaWJnc3R2aWRlbwotCi0yMDE2LTA4LTI2IDEyOjA2OjM1IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgUmV2ZXJ0ICJydHBtdXg6IGZpeCBQUk9QX1RJTUVTVEFNUF9PRkZTRVQgcmFuZ2UgcHJvYmxlbXMiCi0JICBUaGlzIGJyb2tlIEFQSSwgc28gd2UgbmVlZCBhIGJldHRlciBzb2x1dGlvbiEKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYzc1NzlkMzFhNmU5ZDc4OGU5NGI4MzI1ODMwOTA2M2QwYWFlNDgxZS4KLQotMjAxNi0wNi0wOCAxNTowNjoyOCArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA5ZGVwYXkuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwdnA5LmM6Ci0JICBydHB2cDlkZXBheTogU3VwcG9ydCBmbGV4aWJsZSBtb2RlCi0KLTIwMTYtMDYtMDYgMTc6MDM6MzYgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDllbmMuYzoKLQkgIHZwOWVuYzogRml4IGxlYWsgb2YgdnB4X2ltYWdlX3QKLQotMjAxNi0wNS0wNiAxMzozMzoyMiArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaDI2My5jOgotCSAgcnRwaDI2M3BkZXBheTogRG9uJ3QgdHJ5IHRvIHB1c2ggZW1wdHkgZnJhbWUKLQkgIElmIHRoZSByZXN1bHQgb2YgZGVwYXlsb2FkaW5nIGlzIGFuIGVtcHR5IGZyYW1lLCBqdXN0IGRyb3AgaXQuIFRoaXMgaXMKLQkgIGxpa2VseSB0aGUgcmVzdWx0IG9mIGEgYnVnZ3kgcGF5bG9hZGVyLgotCi0yMDE2LTA1LTA2IDE2OjA2OjUzICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBtdXg6IGZpeCBQUk9QX1RJTUVTVEFNUF9PRkZTRVQgcmFuZ2UgcHJvYmxlbXMKLQkgIEl0IGNvdWxkIG5vdCBzZXQgdGhlIG9mZnNldCBmb3IgdGhlIGZ1bGwgZ3VpbnQzMiByYW5nZS4KLQotMjAxNi0wNS0wNiAwOTo0NDo0MiArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgcnRwYmluOiBpbnRyb2R1Y2UgbWF4LXN0cmVhbXMgcHJvcGVydHkKLQkgIFRvIGJlIGFibGUgdG8gY2FwIHRoZSBudW1iZXIgb2YgYWxsb3dlZCBzdHJlYW1zIGZvciBvbmUgc2Vzc2lvbi4KLQkgIFRoaXMgaXMgdXNlZnVsIGZvciBwcmV2ZW50aW5nIERvUyBhdHRhY2tzLCB3aGVyZSBhIHNlbmRlciBjYW4gY2hhbmdlCi0JICBTU1JDIGZvciBldmVyeSBidWZmZXIsIGVmZmVjdGl2ZWx5IGJyaW5naW5nIHJ0cGJpbiB0byBhIGhhbHQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwMjkyCi0KLTIwMTYtMDMtMzEgMDA6MTA6NDkgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IHJlb3JkZXJlZCBwYWNrZXRzIGFyZSB2ZXJ5IG5vcm1hbCwgYW5kIHNob3VsZCBub3QgYmUgYSB3YXJuaW5nCi0KLTIwMTYtMDItMDUgMTQ6MTk6MjUgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogZGVncmFkZSBnX3dhcm5pbmcgdG8gR1NUX0VSUk9SCi0JICBTbyB3ZSBkb24ndCBibG93IHVwIHdoaWxlIGludmVzdGlnYXRpbmcKLQotMjAxNi0wMi0wNCAxNDoxNjo0MCArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaDI2My5jOgotCSAgcnRwaDI2M3BkZXBheTogRml4IHBpY3R1cmUgaGVhZGVyIGZvciBub24td3JpdGFibGUgcGF5bG9hZAotCSAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkKCkgcmV0dXJucyBhIGNvcHkgb2YKLQkgIHRoZSBwYXlsb2FkLiBJbiB0aGlzIGNhc2UgdGhlIHBheWxvYWQgbW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBhZmZlY3QgdGhlCi0JICBydHAgYnVmZmVyLiBTbyBpbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgcGF5bG9hZCBidWZmZXIgZGlyZWN0bHkgd2UKLQkgIHNob3VsZCBtb2RpZnkgdGhlIGJ1ZmZlciB0aGF0IGFjdHVhbGx5IGdldHMgcHVzaGVkIG9uIHRoZSBhZGFwdGVyLgotCi0yMDE1LTExLTE5IDExOjUwOjQ3ICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYxZGVwYXkuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaDI2MS5jOgotCSAgcnRwaDI2MWRlcGF5OiBGaXggY2hlY2sgb2YgdmFsaWQgcGF5bG9hZCBsZW5ndGgKLQkgIFBhY2tldHMgd2l0aCBubyBILjI2MSBwYXlsb2FkIHNob3VsZCBiZSBkcm9wcGVkIHRvIGF2b2lkIGludmFsaWQKLQkgIHdyaXRlL3JlYWRzLgotCi0yMDE1LTExLTA5IDEwOjA2OjIxICswMTAwICBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBoMjYzLmM6Ci0JICBydHBoMjYzcGF5OiBGaXggZG91YmxlIGZyZWUsIGludmFsaWQgcmVhZHMgYW5kIGxlYWsKLQotMjAxNC0wNi0zMCAxNTo0Mzo1OCArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHNhbml0eSBjaGVjayBSVFQgYmVmb3JlIGlnbm9yaW5nIFBMSS9GSVIKLQotMjAxNC0wNi0zMCAxNTowNzo0NSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGhhbmRsZSBzZGVzIG1lc3NhZ2VzIHdpdGggbm9uLXV0ZjggbW9yZSBncmFjZWZ1bGx5Ci0KLTIwMTQtMDYtMTcgMDg6NTI6NTAgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW4uc2VsbmVzQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICBydHBoMjYzcGF5OiBjaGFuZ2UgbG9nIGxldmVsIG9uIGJpdHN0cmVhbSBwYXJzaW5nIG1lc3NhZ2VzCi0KLTIwMTYtMDctMDcgMTE6MTM6MTggKzAyMDAgIE1pa2hhaWwgRmx1ZGtvdiA8bWlzaGFAcGV4aXAuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBydHguYzoKLQkgIHRlc3RzL3J0cHJ0eDogcmVmYWN0b3IgdGhlIHRlc3RzIHRvIHVzZSBnc3RoYXJuZXNzCi0JICBUaGUgZnVuY3Rpb25hbGl0eSBvZiBhbGwgdGhlIHRlc3RzIHdhcyBrZXB0IGV4YWN0bHkgdGhlIHNhbWUuIFNvbWUgdGVzdHMKLQkgIHdlcmUgcmVuYW1lZDoKLQkgIHRlc3RfcHVzaF9mb3J3YXJkX3NlcSAtPiB0ZXN0X3J0eHNlbmRfcnR4cmVjZWl2ZQotCSAgdGVzdF9kcm9wX29uZV9zZW5kZXIgLT4gdGVzdF9ydHhzZW5kX3J0eHJlY2VpdmVfd2l0aF9wYWNrZXRfbG9zcwotCSAgdGVzdF9kcm9wX211bHRpcGxlX3NlbmRlciAtPiB0ZXN0X211bHRpX3J0eHNlbmRfcnR4cmVjZWl2ZV93aXRoX3BhY2tldF9sb3NzCi0JICB0ZXN0X3J0eHJlY2VpdmVfZGF0YV9yZWNvbnN0cnVjdGlvbiB3YXMgdGVzdGluZyB0aGF0IHJldHJhbnNtaXR0ZWQKLQkgIGJ1ZmZlciBwcm9kdWNlZCBieSBydHhzZW5kIHdhcyBjb3JyZWN0bHkgdHJhbnNmb3JtZWQgdG8gdGhlIG9yaWdpbmFsCi0JICBidWZmZXIgYnkgcnR4cmVjZWl2ZS4gTm93IHdlIGFyZSBjaGVja2luZyBmb3IgdGhpcyBpbiBhbGwgdGhlIHRlc3RzCi0JICB3aGVyZSBib3RoIHJ0eHNlbmQgJiBydHhyZWNlaXZlIGFyZSBpbnZvbHZlZC4gVGhhdCdzIHdoeSB0aGUgdGVzdCB3YXMKLQkgIHJlbW92ZWQuCi0KLTIwMTYtMDgtMjUgMTU6NTI6MzYgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuYzoKLQkgIHJ0cGgyNjVwYXk6IFNldCBSVFAgbWFya2VyIGJpdAotCSAgU2V0IHRoZSBSVFAgbWFya2VyIGJpdCBvbiB0aGUgbGFzdCBSVFAgcGFja2V0IG9mIGFuIEguMjY1IGFjY2VzcyB1bml0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDM5NAotCi0yMDE2LTA3LTI2IDE5OjM5OjU4ICswMjAwICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgdmlkZW9mbGlwOiBhZGRlZCBHc3RWaWRlb0RpcmVjdGlvbiBpbnRlcmZhY2UKLQkgIEl0IGltcGxlbWVudHMgbm93IHRoaXMgaW50ZXJmYWNlIHdpdGggaXRzIHZpZGVvLWRpcmVjdGlvbgotCSAgcHJvcGVydHkuIFZhbHVlcyBhcmUgY2hhbmdlZCB0byBHc3RWaWRlb09yaWVudGF0aW9uTWV0aG9kIGJ1dCB0aGV5IGhhdmUKLQkgIHRoZSBzYW1lIHZhbHVlIHRoYW4gdGhlIG9yaWdpbmFscy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg2ODcKLQotMjAxNS0xMS0wNiAxMDozOToxNiArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBnc3RydHBzZXNzaW9uOiByZWZhY3RvciBkdXBsaWNhdGUgY29kZSBpbnRvIGEgZnVuY3Rpb24KLQkgIExlc3MgY29kZSwgZWFzaWVyIHRvIHJlYWQsIG1vcmUgY29uc2lzdGVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzAyOTMKLQotMjAxNi0wOC0yMyAxNzowNjo0NCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBmaXggdHlwbyBpbiBtYXgtbWlzb3JkZXItdGltZSBwcm9wZXJ0eSBuYW1lCi0KLTIwMTYtMDgtMjIgMDA6MDU6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IGZpeCBwcmludGYgZm9ybWF0IGNvbXBpbGVyIHdhcm5pbmcgaW4gZGVidWcgbWVzc2FnZQotCSAgT24gMzItYml0IHg4NjogZ3N0c3BsaXRtdXhzaW5rLmM6OTY2OjMxOiB3YXJuaW5nOiBmb3JtYXQg4oCYJXXigJkgZXhwZWN0cwotCSAgYXJndW1lbnQgb2YgdHlwZSDigJh1bnNpZ25lZCBpbnTigJksIGJ1dCBhcmd1bWVudCA5IGhhcyB0eXBlCi0JICDigJhndWludDY0IHtha2EgbG9uZyBsb25nIHVuc2lnbmVkIGludH3igJkKLQotMjAxNi0wOC0xMiAyMToxMjozMCArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiAuZ2l0aWdub3JlOgotCSogY29uZmlnLmgubWVzb246Ci0JKiBleHQvY2Fpcm8vbWVzb24uYnVpbGQ6Ci0JKiBleHQvZHYvbWVzb24uYnVpbGQ6Ci0JKiBleHQvZmxhYy9tZXNvbi5idWlsZDoKLQkqIGV4dC9nZGtfcGl4YnVmL21lc29uLmJ1aWxkOgotCSogZXh0L2phY2svbWVzb24uYnVpbGQ6Ci0JKiBleHQvanBlZy9tZXNvbi5idWlsZDoKLQkqIGV4dC9saWJwbmcvbWVzb24uYnVpbGQ6Ci0JKiBleHQvbWVzb24uYnVpbGQ6Ci0JKiBleHQvcHVsc2UvbWVzb24uYnVpbGQ6Ci0JKiBleHQvc2hvdXQyL21lc29uLmJ1aWxkOgotCSogZXh0L3NvdXAvbWVzb24uYnVpbGQ6Ci0JKiBleHQvc3BlZXgvbWVzb24uYnVpbGQ6Ci0JKiBleHQvdGFnbGliL21lc29uLmJ1aWxkOgotCSogZXh0L3ZweC9tZXNvbi5idWlsZDoKLQkqIGV4dC93YXZwYWNrL21lc29uLmJ1aWxkOgotCSogZ3N0L2FscGhhL21lc29uLmJ1aWxkOgotCSogZ3N0L2FwZXRhZy9tZXNvbi5idWlsZDoKLQkqIGdzdC9hdWRpb2Z4L21lc29uLmJ1aWxkOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9tZXNvbi5idWlsZDoKLQkqIGdzdC9hdXBhcnNlL21lc29uLmJ1aWxkOgotCSogZ3N0L2F1dG9kZXRlY3QvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvYXZpL21lc29uLmJ1aWxkOgotCSogZ3N0L2N1dHRlci9tZXNvbi5idWlsZDoKLQkqIGdzdC9kZWJ1Z3V0aWxzL21lc29uLmJ1aWxkOgotCSogZ3N0L2RlaW50ZXJsYWNlL21lc29uLmJ1aWxkOgotCSogZ3N0L2R0bWYvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvZWZmZWN0di9tZXNvbi5idWlsZDoKLQkqIGdzdC9lcXVhbGl6ZXIvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvZmx2L21lc29uLmJ1aWxkOgotCSogZ3N0L2ZseC9tZXNvbi5idWlsZDoKLQkqIGdzdC9nb29tL21lc29uLmJ1aWxkOgotCSogZ3N0L2dvb20yazEvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvaWN5ZGVtdXgvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvaWQzZGVtdXgvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9tZXNvbi5idWlsZDoKLQkqIGdzdC9pc29tcDQvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvbGF3L21lc29uLmJ1aWxkOgotCSogZ3N0L2xldmVsL21lc29uLmJ1aWxkOgotCSogZ3N0L21hdHJvc2thL21lc29uLmJ1aWxkOgotCSogZ3N0L21lc29uLmJ1aWxkOgotCSogZ3N0L21vbm9zY29wZS9tZXNvbi5idWlsZDoKLQkqIGdzdC9tdWx0aWZpbGUvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvbXVsdGlwYXJ0L21lc29uLmJ1aWxkOgotCSogZ3N0L3JlcGxheWdhaW4vbWVzb24uYnVpbGQ6Ci0JKiBnc3QvcnRwL21lc29uLmJ1aWxkOgotCSogZ3N0L3J0cG1hbmFnZXIvbWVzb24uYnVpbGQ6Ci0JKiBnc3QvcnRzcC9tZXNvbi5idWlsZDoKLQkqIGdzdC9zaGFwZXdpcGUvbWVzb24uYnVpbGQ6Ci0JKiBnc3Qvc21wdGUvbWVzb24uYnVpbGQ6Ci0JKiBnc3Qvc3BlY3RydW0vbWVzb24uYnVpbGQ6Ci0JKiBnc3QvdWRwL21lc29uLmJ1aWxkOgotCSogZ3N0L3ZpZGVvYm94L21lc29uLmJ1aWxkOgotCSogZ3N0L3ZpZGVvY3JvcC9tZXNvbi5idWlsZDoKLQkqIGdzdC92aWRlb2ZpbHRlci9tZXNvbi5idWlsZDoKLQkqIGdzdC92aWRlb21peGVyL21lc29uLmJ1aWxkOgotCSogZ3N0L3dhdmVuYy9tZXNvbi5idWlsZDoKLQkqIGdzdC93YXZwYXJzZS9tZXNvbi5idWlsZDoKLQkqIGdzdC95NG0vbWVzb24uYnVpbGQ6Ci0JKiBtZXNvbi5idWlsZDoKLQkqIG1lc29uX29wdGlvbnMudHh0OgotCSogc3lzL2RpcmVjdHNvdW5kL21lc29uLmJ1aWxkOgotCSogc3lzL21lc29uLmJ1aWxkOgotCSogc3lzL3Y0bDIvbWVzb24uYnVpbGQ6Ci0JKiBzeXMveGltYWdlL21lc29uLmJ1aWxkOgotCSogdGVzdHMvY2hlY2svbWVzb24uYnVpbGQ6Ci0JKiB0ZXN0cy9tZXNvbi5idWlsZDoKLQkgIEFkZCBzdXBwb3J0IGZvciBNZXNvbiBhcyBhbHRlcm5hdGl2ZS9wYXJhbGxlbCBidWlsZCBzeXN0ZW0KLQkgIGh0dHBzOi8vZ2l0aHViLmNvbS9tZXNvbmJ1aWxkL21lc29uCi0JICBXaXRoIGNvbnRyaWJ1dGlvbnMgZnJvbToKLQkgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0JICBKdXNzaSBQYWtrYW5lbiA8anBha2thbmVAZ21haWwuY29tPiAob3JpZ2luYWwgcG9ydCkKLQkgIEhpZ2hsaWdodHMgb2YgdGhlIGZlYXR1cmVzIHByb3ZpZGVkIGFyZToKLQkgICogRmFzdGVyIGJ1aWxkcyBvbiBMaW51eCAofjQwLTUwJSBmYXN0ZXIpCi0JICAqIFRoZSBhYmlsaXR5IHRvIGJ1aWxkIHdpdGggTVNWQyBvbiBXaW5kb3dzCi0JICAqIEdlbmVyYXRlIFZpc3VhbCBTdHVkaW8gcHJvamVjdCBmaWxlcwotCSAgKiBHZW5lcmF0ZSBYQ29kZSBwcm9qZWN0IGZpbGVzCi0JICAqIE11Y2ggZmFzdGVyIGJ1aWxkcyBvbiBXaW5kb3dzIChvbi1wYXIgd2l0aCBMaW51eCkKLQkgICogU2VyaW91c2x5IGZhc3QgY29uZmlndXJlIGFuZCBidWlsZGluZyBvbiBlbWJlZGRlZAotCSAgLi4uIGFuZCBtYW55IG1vcmUuIEZvciBtb3JlIGRldGFpbHMgc2VlOgotCSAgaHR0cDovL2Jsb2cubmlyYmhlZWsuaW4vMjAxNi8wNS9nc3RyZWFtZXItYW5kLW1lc29uLW5ldy1ob3BlLmh0bWwKLQkgIGh0dHA6Ly9ibG9nLm5pcmJoZWVrLmluLzIwMTYvMDcvYnVpbGRpbmctYW5kLWRldmVsb3BpbmctZ3N0cmVhbWVyLXVzaW5nLmh0bWwKLQkgIEJ1aWxkaW5nIHdpdGggTWVzb24gc2hvdWxkIHdvcmsgb24gYm90aCBMaW51eCBhbmQgV2luZG93cywgYnV0IG1heQotCSAgbmVlZCBhIGZldyBtb3JlIHR3ZWFrcyBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KLQotMjAxNi0wOC0yMCAxNjo1OTozMCArMDgwMCAgSmllIEppYW5nIDxqaWFuZ2ppZUBudWR0LmVkdS5jbj4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBGaXhlZCBzcGxpdG11eHNpbmsgMzItYml0IG92ZXJmbG93IGJ1ZwotCSAgRXh0ZW5kIHRoZSBieXRlIHRyYWNraW5nIGNvdW50ZXJzIHRvIDY0LWJpdCBvbgotCSAgYWxsIHBsYXRmb3JtcywgaW5zdGVhZCBvZiB1c2luZyBnc2l6ZSwgd2hpY2ggb3ZlcmZsb3dzCi0JICBhZnRlciA0R0IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwMDE5Ci0KLTIwMTYtMDgtMTkgMTc6MTg6MTYgKzAzMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQHRvb2xzb25haXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JICBpc29tcDQ6IEZpeCBjb3Zlcml0eSB3YXJuaW5nCi0JICBJZiBhdG9tX2NvcHlfZGF0YSBmYWlscyB0byB3cml0ZSBhbnl0aGluZywgcmV0dXJuIDAKLQkgIENJRCAjMTM3MTQ1OAotCi0yMDE2LTA0LTA5IDA3OjUxOjAzICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vwcm92aWRlci5jOgotCSogc3lzL3Y0bDIvdjRsMi11dGlscy5jOgotCSAgdjRsMjogY29uc2lzdGVudGx5IGNoZWNrICNpZmRlZiBIQVZFX0dVREVWIGluc3RlYWQgb2YgI2lmCi0JICBCb3RoIHdvcmsgd2l0aCBhdXRvdG9vbHMgYnV0IHRoZXkgZGVmaW5pdGVseSBkb24ndCBtZWFuIHRoZSBzYW1lIHRoaW5nLCBjYXVzZQotCSAgcHJvYmxlbXMgd2l0aCBvdGhlciBidWlsZCBzeXN0ZW1zLCBhbmQgYXJlIGJhZCBmb3JtLiBFeGlzdGVuY2Ugc2hvdWxkIGFsd2F5cyBiZQotCSAgY2hlY2tlZCB3aXRoICNpZmRlZiBvciAjaWYgZGVmaW5lZC4KLQotMjAxNi0wNC0xOSAxMDo1MzowNSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JICBkaXJlY3Rzb3VuZDogcG9ydCBhd2F5IGZyb20gb2xkIERpcmVjdFggQVBJCi0JICBEM0RYIGhhcyBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSBsYXN0IDQgeWVhcnMgYW5kIGxhdGVzdCB2ZXJzaW9ucyBvZgotCSAgV2luZG93cyBubyBsb25nZXIgc2hpcCBoZWFkZXJzIGZvciBpdC4gVGhpcyBpcyBmaW5lIGFzIGxvbmcgYXMgeW91J3JlCi0JICBidWlsZGluZyB3aXRoIENlcmJlcm8ncyBXaW5lLWJhc2VkIERpcmVjdFggaGVhZGVycywgYnV0IHN1Y2tzIGlmIHlvdQotCSAgd2FudCB0byBidWlsZCBhZ2FpbnN0IHRoZSBhY3R1YWwgV2luZG93cyBTREsuCi0JICBXZSB3ZXJlIGp1c3QgdXNpbmcgaXQgdG8gZ2V0IGVycm9yIHN0cmluZ3MgYW55d2F5LCBzbyBqdXN0IHVzZSB0aGUKLQkgIGdlbmVyaWMgZXJyb3Igc3RyaW5nIEFQSS4KLQotMjAxNi0wOC0xOCAxMjowMjowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIFJldmVydCAiZmxhY3BhcnNlOiBBZGQgbWF4aW11bSBiaXRyYXRlIHRhZyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYzcwM2FiNjlmNTI2MDkyYmIyNmNjZTQxY2E2OTFhODk2YzgzODNkOC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkzOTIKLQotMjAxNi0wOC0xOCAwOTo1Nzo1MSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEZpeCB1bml0IHRlc3QgYnkgZGlzYWJsaW5nIGFkYXB0aXZlIG1pc29yZGVyL2Ryb3BvdXQgY2FsY3VsYXRpb25zCi0JICBOZWVkIHRvIHNldCBtYXgtbWlzb3JkZXItdGltZSBhbmQgbWF4LWRyb3BvdXQtdGltZSB0byAwIHNvIHRoZQotCSAgaml0dGVyYnVmZmVyIGRvZXMgbm90IGJhc2UgdGhlbSBvbiBwYWNrZXQgcmF0ZSBjYWxjdWxhdGlvbnMuCi0JICBJZiBpdCBkb2VzLCBvdXQgZ2FwIGlzIGJpZyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZCBhIG5ldyBzdHJlYW0gYW5kCi0JICB3ZSB3YWl0IGZvciBhIGZldyBjb25zZWN1dGl2ZSBwYWNrZXRzIGp1c3QgdG8gYmUgc3VyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTMxMQotCi0yMDE2LTA4LTA5IDEyOjU1OjU5ICswMzAwICBWaXZpYSBOaWtvbGFpZG91IDx2aXZpYUBhaGlydS5ldT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBzcGxpdG11eHNpbms6IEFkZCBvcHRpb24gdG8gc3BsaXQgYXQgZXhhY3RseSBtYXgtc2l6ZS10aW1lCi0JICBXaWxsIHRyeSB0byByZXF1ZXN0IGEga2V5ZnJhbWUgZnJvbSB0aGUgZW5jb2RlciB0byBiZSBzZW50IGF0IHRoZSB0YXJnZXQKLQkgIHJ1bm5pbmcgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njk2NjQKLQotMjAxNi0wOC0wOSAyMDoxNjoxNiArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAYWhpcnUuZXU+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IEFsbG93IHRpbWUgYW5kIGJ5dGVzIHRvIHJlYWNoIHRoZWlyIHJlc3BlY3RpdmUgdGhyZXNob2xkcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTY2NAotCi0yMDE2LTA4LTE3IDA5OjQ5OjA0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBBbGxvdyBtaW1ldHlwZXMgd2l0aCBwcm9wZXJ0aWVzIGFzIGxvbmcgYXMgdGhleSdyZSBhcHBsaWNhdGlvbi9zZHAKLQkgIFNvbWUgc2VydmVycyBhZGQgcHJvcGVydGllcyBsaWtlIGNoYXJzZXQsIGUuZy4KLQkgIGFwcGxpY2F0aW9uL3NkcDsgY2hhcnNldD11dGY4Ci0JICBJZGVhbGx5IHdlIHNob3VsZCBhbHNvIHBhcnNlIHRoZSBjaGFyc2V0IGFuZCBkbyBjb252ZXJzaW9uIG9mIGFsbCBtZXNzYWdlcywKLQkgIGJ1dCB0aGF0J3MgZm9yIGEgbGF0ZXIgdGltZS4KLQotMjAxNi0wNi0yNCAxNjozMjozNyArMDMwMCAgVml2aWEgTmlrb2xhaWRvdSA8dml2aWFAdG9vbHNvbmFpci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4Lmg6Ci0JICBxdG11eDogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyB0aW1lY29kZSB0cmFjawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Nzk1MAotCi0yMDE2LTA4LTExIDE2OjMyOjIxIC0wNjAwICBUaG9tYXMgQmx1ZW1lbCA8dGJsdWVtZWxAY29udHJvbDQuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBJbml0aWFsaXplIGJ5dGVzX3NlbnQgZmllbGQuCi0JICBUaGlzIGZpeGVzIGVuZHBvaW50cyBub3QgcmVjZWl2aW5nIGFueSBkYXRhIGludGVybWl0dGVudGx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2OTc3MwotCi0yMDE2LTA4LTEwIDExOjQ1OjEzIC0wNjAwICBUaG9tYXMgQmx1ZW1lbCA8dGJsdWVtZWxAY29udHJvbDQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEFjdHVhbGx5IGNhbGN1bGF0ZSB0aGUgcGFja2V0IHJhdGUgZm9yIG1heC1kcm9wb3V0IGFuZCBtYXgtbWlzb3JkZXIgY2FsY3VsYXRpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTMxMQotCi0yMDE2LTA4LTEwIDExOjI2OjE3IC0wNjAwICBUaG9tYXMgQmx1ZW1lbCA8dGJsdWVtZWxAY29udHJvbDQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogRG9uJ3Qgd2FybiBmb3IgZHVwbGljYXRlIHBhY2tldHMKLQkgIFRoaXMgaXMgYSBub3JtYWwgc2NlbmFyaW8gYW5kIHNob3VsZCBub3QgYmUgYSB3YXJuaW5nLiAgVGhpcyBjYW4KLQkgIGhhcHBlbiBmcmVxdWVudGx5IHdoZW4gcmUtdHJhbnNtaXRzIG9mIGxvc3QgcGFja2V0cyBhcmUgZW5hYmxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMDgKLQotMjAxNi0wOC0wOCAxMzo0OToxOSArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eDogRml4IHR5cG8gY29udmVydGluZyB0byBydW5uaW5nIHRpbWUuCi0JICBVc2UgdGhlIGNvcnJlY3QgY29sbGVjdGVkIHRpbWVzdGFtcC4KLQotMjAxNi0wOC0wOCAwMjo1Mzo0OCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5oOgotCSAgUmV2ZXJ0ICJzcGxpdG11eHNpbms6IFVzZSBHc3RCaW4gYXN5bmMtaGFuZGxpbmcgaW5zdGVhZCBvZiBvdXIgb3duLiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZmEwMDhmMjcxYTUyZjgyZGVkZWRjMjhiZDgxYjAyMGNhNzkzOWI0Ny4KLQkgIGFzeW5jLWhhbmRsaW5nIGluIEdzdEJpbiBjYXVzZXMgdGhlIHBpcGVsaW5lIHRvIHNwaW4gYXQgMTAwJQotCSAgQ1BVIGFzIHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgdHJpZXMgdG8gY2hhbmdlIHRoYXQgc3RhdGUKLQkgIHRvIFBMQVlJTkcgY29uc3RhbnRseS4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgY29yZQotCSAgcHJvYmxlbSwgZXNzZW50aWFsbHksIGJ1dCBhbiBpbXByb3ZlbWVudCBpbiB0aGlzIGNhc2UgZm9yIG5vdy4KLQotMjAxNi0wOC0wOCAwMDo1NjozOCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eDogUmVjaGVjayBzdGF0ZSBhZnRlciB1bmxvY2tpbmcgbXV0ZXguCi0JICBBZnRlciBkcm9wcGluZyB0aGUgc3BsaXRtdXggbG9jaywgcmUtY2hlY2sgdGhlIHN0YXRlLAotCSAgZG9uJ3QganVzdCBmYWxsIHRocm91Z2ggYW5kIHNsZWVwIHVuY29uZGl0aW9uYWxseSwKLQkgIGFzIHdlIG1heSBoYXZlIGFscmVhZHkgbWlzc2VkIHRoZSB3YWtldXAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5NTE0Ci0KLTIwMTYtMDgtMDMgMDM6MzI6MDcgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmM6Ci0JICBzcGxpdG11eHNyYzogRG9uJ3Qgc3RvcCBhbmQgZXJyb3Igb24gRU9TIGZsb3cgcmV0dXJuCi0JICBEb24ndCBpbW1lZGlhdGVseSBoYWx0IG9uIEVPUyBmbG93IHJldHVybiBmcm9tIGRvd25zdHJlYW0KLQkgIGR1ZSB0byBvdXQgb2Ygc2VnbWVudC4gTGV0IHRoZSBkZW11eGVyIGhhbmRsZSBpdCBhbmQgc2VuZAotCSAgRU9TLgotCi0yMDE2LTA4LTA0IDAwOjM2OjI4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc2FudG9zQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGF2b2lkIHVucmVmIG9mIG51bGwgYnVmZmVyCi0JICBUaGUgY3VycmVudCAnbCcgcG9pbnRlciB3aWxsIGJlIE5VTEwgd2hlbiB0aGUgbG9vcAotCSAgaXMgaW50ZXJydXB0ZWQgd2l0aCBhICdicmVhaycgc3RhdGVtZW50LiBOZWVkIHRvIGhhdmUKLQkgIGl0IGFkdmFuY2UgdG8gdGhlIG5leHQgbGlzdCBpdGVtIGJlZm9yZSBpbnRlcnJ1cHRpbmcuCi0KLTIwMTYtMDgtMDIgMTQ6MDE6MTQgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogZ3N0L3dhdnBhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogQWRkIHRhZ3MgZm9yIGNvbnRhaW5lciBmb3JtYXQgYW5kIGJpdHJhdGUgZm9yIHVuY29tcHJlc3NlZCBQQ00KLQkgIFRoZSBQQ00gYml0cmF0ZSBpcyBhZGRlZCB0byBoZWxwIGRvd25zdHJlYW0gZWxlbWVudHMgKGxpa2UgdXJpZGVjb2RlYmluKQotCSAgZmlndXJlIG91dCBhIHByb3BlciBuZXR3b3JrIGJ1ZmZlciBzaXplCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY5MzkwCi0KLTIwMTYtMDgtMDEgMTg6NTI6MjYgKzAyMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogQWRkIG1heGltdW0gYml0cmF0ZSB0YWcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjkzOTIKLQotMjAxNi0wNy0yOCAxNzo1ODoxNiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBXaGVuIHJlY2VpdmluZyBhIERJU0NPTlQgYnVmZmVyIHRoYXQgZG9lcyBub3QgcG9pbnQgdG8gYSBzYW1wbGUsIHJlbWVtYmVyIHRoZSBvZmZzZXQKLQkgIEFuZCBkb24ndCBqdXN0IHJlc2V0IGV2ZXJ5dGhpbmcuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGNhbiBjb250aW51ZSB0bwotCSAgaGFuZGxlIGRhdGEgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpbzoKLQkgIG1vb3Y6IGRpc2NvbnQKLQkgIG1vb2Y6IGRpc2NvbnQKLQkgIG1kYXQ6IGNvbnRpbnVvdXMKLQkgIFByZXZpb3VzbHkgdGhpcyB3b3VsZCBmYWlsIGJlY2F1c2UgdGhlIG9mZnNldCB3b3VsZCBiZSB0aGUgYWNjdW11bGF0ZWQgb2Zmc2V0Ci0JICBmcm9tIG1vb3YgYW5kIG1vb2YgYXQgdGhlIG1kYXQgcG9zaXRpb24sIHdoaWxlIHRoZSBidWZmZXIgb2Zmc2V0IG1pZ2h0IGJlCi0JICBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQuCi0KLTIwMTYtMDctMjUgMTM6MzQ6MDIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOgotCSAgcnRwOiBGaWx0ZXIgd2l0aCB0aGUgZmlsdGVyIGNhcHMgaW4gdGhlIHBheWxvYWRlcidzIGdldGNhcHMKLQotMjAxNi0wMy0wMyAxMTozNTowNiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogaW5jbHVkZSBodHRwLXN0YXR1cy1jb2RlIGluIGVycm9yIG1lc3NhZ2UgZGV0YWlscwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzAzOAotCi0yMDE2LTA3LTI1IDE4OjIwOjAzICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogRml4IGRlYnVnIHN0YXRlbWVudCBzaWduZWRuZXNzLgotCSAgVGhlIHRzIHZhcmlhYmxlIGlzIGEgR3N0Q2xvY2tUaW1lLCBkb24ndCBwcmludCBpdAotCSAgYXMgYSBHc3RDbG9ja1RpbWVEaWZmLgotCi0yMDE2LTA3LTE3IDIyOjQxOjAyICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBzcGxpdG11eHNpbms6IEhhbmRsZSBuZWdhdGl2ZSBydW5uaW5nIHRpbWUKLQkgIFVzZSBzaWduZWQgY2xvY2sgdGltZXMgZm9yIHJ1bm5pbmcgdGltZSBldmVyeXdoZXJlCi0JICBzbyB0aGF0IHdlIGhhbmRsZSBuZWdhdGl2ZSBydW5uaW5nIHRpbWVzIHdpdGhvdXQKLQkgIGdvaW5nIGhheXdpcmUsIHNpbWlsYXIgdG8gd2hhdCBxdWV1ZSBhbmQgbXVsdGlxdWV1ZQotCSAgZG8gdGhlc2UgZGF5cy4KLQotMjAxNi0wNy0xOCAwMDoxMjo1NSArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IERyb3AgbG9jayB3aGVuIHNlbmRpbmcgZHVtbXkgZXZlbnQKLQkgIFdoZW4gcHVzaGluZyB0aGUgZHVtbXkgZXZlbnQgaW50byB0aGUgbXVsdGlxdWV1ZSwKLQkgIGRyb3AgdGhlIHNwbGl0bXV4IGxvY2sgb3IgZWxzZSB3ZSBtaWdodCBkZWFkbG9jay4KLQotMjAxNi0wNi0zMCAwMTo1Njo0MSArMTAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IEludGVyc2VjdCB3aXRoIGZpbHRlciBjYXBzIGluIGdldGNhcHMgZnVuY3Rpb24uCi0JICBBbHdheXMgaW50ZXJzZWN0IHdpdGggdGhlIGZpbHRlciBjYXBzIGluIHRoZSBnZXRjYXBzIGZ1bmN0aW9uCi0JICB0byBtYWtlIHN1cmUgd2UgcmV0dXJuIGEgc3Vic2V0IG9mIHdoYXQgd2FzIHJlcXVlc3RlZC4KLQkgIE90aGVyIHBheWxvYWRlcnMgYWxzbyBoYXZlIHRoaXMgcHJvYmxlbSBhbmQgbmVlZCBmaXhpbmcKLQkgIGluIGZ1dHVyZSBjb21taXRzLgotCi0yMDE2LTA3LTEyIDE3OjMwOjU2ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRkZW11eC5jOgotCSAgdGVzdHM6IHF0ZGVtdXg6IGZpeCBlbGVtZW50IGFuZCBwYWQgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODczOQotCi0yMDE2LTA3LTEyIDE2OjQ1OjM2ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9ib3guYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9lZmZlY3R2LmM6Ci0JICB0ZXN0czogZml4IGJ1cyBsZWFrcwotCSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoKCkgdGFrZXMgYSByZWYgb24gdGhlIGJ1cyB3aGljaCBzaG91bGQgYmUKLQkgIHJlbGVhc2VkIHVzaW5nIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCgpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODczOQotCi0yMDE2LTA3LTE0IDAzOjA3OjExICswODAwICBUaW5nLVdlaSBMYW4gPGxhbnR3QHNyYy5nbm9tZS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogQ2FsbCBBR19HU1RfUEtHX0NPTkZJR19QQVRIIHRvIHNldCBHU1RfUEtHX0NPTkZJR19QQVRICi0JICBHU1RfUEtHX0NPTkZJR19QQVRIIGlzIHVzZWQgaW4gZG9jcy9wbHVnaW5zIGRpcmVjdG9yeSwgc28KLQkgIEFHX0dTVF9QS0dfQ09ORklHX1BBVEggbXVzdCBiZSBjYWxsZWQgdG8gc2V0IGl0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODc4NwotCi0yMDE2LTA3LTEyIDA3OjM5OjU4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IERvbid0IGRyb3AgZmluYWwgYnl0ZXMgb2YgYSByYW5nZSByZXF1ZXN0Ci0JICBBdCB0aGUgZW5kIG9mIGEgcmFuZ2UgcmVxdWVzdCwgd2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gR1NUX0ZMT1dfRU9TIG90aGVyd2lzZQotCSAgdGhlIGxhc3QgYnl0ZXMgd2UganVzdCByZWFkIHdpbGwgYmUgZHJvcHBlZCBieSBiYXNlc3JjLgotCSAgSW5zdGVhZCBqdXN0IHJldHVybiBHU1RfRkxPV19PSyAod2hpY2ggd2FzIHNldCBqdXN0IGJlZm9yZSkgYW5kIGxldCBiYXNlc3JjCi0JICBoYW5kbGUgdGhlIGZhY3Qgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQuCi0KLTIwMTYtMDctMTEgMTg6MzA6MTggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmRldmljZXByb3ZpZGVyLmM6Ci0JICB2NGwycHJvdmlkZXI6IEZpeCBkZXZpY2UgdHlwZSBkZXRlY3Rpb24KLQkgIFRoZSB0eXBlIGRldGVjdGlvbiB3b3VsZCBsZWFkIHRvIGFzc2VydGlvbiBhcyBpdCB3b3VsZCB0cnkKLQkgIHRvIGNyZWF0ZSBhIGRldmljZSB3aXRob3V0IGhhdmluZyBmb3VuZCBhbnkgdHlwZSBmb3IgaXQuIEl0Ci0JICBhbHNvIGRpZG4ndCBkZXRlY3QgTVBMQU5FIGRldmljZXMgcHJvcGVybHkuCi0KLTIwMTYtMDctMTEgMTg6Mjk6MDEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRG9uJ3QgYXNzZXJ0IHdoZW4gdXNlZCBieSB0aGUgbW9uaXRvcgotCSAgVGhlIG1vbml0b3Igc2V0cyB0aGUgb2JqZWN0LT5lbGVtZW50IG9iamVjdCBhcyBhIEdzdE9iamVjdC4gVGhpcwotCSAgd29ya3MgZm9yIGRlYnVnIHRyYWNlcywgYnV0IHdpbGwgYXNzZXJ0IGZvciBFTEVNRU5UX0VSUk9SLiBUaGlzCi0JICB3YXMgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGF0IGNvdWxkIGhhcHBlbi4gQWRkIGEgY2hlY2sgZm9yIHRoYXQuCi0KLTIwMTYtMDctMTEgMTc6Mzg6MDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogSW5kZW50IHZlcnkgbG9uZyBsaW5lCi0KLTIwMTYtMDctMTIgMDA6NDI6MDIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogQXQgdGhlIGVuZCBvZiBhIHJhbmdlIHJlcXVlc3QsIHJlYWQgYW5vdGhlciB0aW1lIHRvIGZpbmFsaXplIHRoZSByZXF1ZXN0Ci0JICBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIGEgcmFuZ2UgcmVxdWVzdCwgcmVhZCBhZ2FpbiB0byBsZXQgbGlic291cAotCSAgZmluYWxpemUgdGhlIHJlcXVlc3QuIFRoaXMgYWxsb3dzIHRvIHJldXNlIHRoZSBjb25uZWN0aW9uIGFnYWluIGxhdGVyLAotCSAgb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gY2FuY2VsIHRoZSBtZXNzYWdlIGFuZCBjbG9zZSB0aGUgY29ubmVjdGlvbi4KLQotMjAxNi0wNy0xMSAyMToxMzo0NyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGYzNjNiMzIgdG8gZjQ5YzU1ZQotCi0yMDE2LTA3LTExIDE5OjU3OjE4ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IEZpeCBrZWVwLWFsaXZlIGhhbmRsaW5nCi0JICBXZSBoYXZlIHRvIGdldCByaWQgb2YgdGhlIG1lc3NhZ2Ugb24gRU9TIHdoZW4gdGhlIGNvbXBsZXRlIHN0cmVhbSBpcyByZWFkIHRvCi0JICByZW1lbWJlciB0aGF0IHdlIHN1Y2Nlc3NmdWxseSBmaW5pc2hlZCBoYW5kbGluZyB0aGlzIHNwZWNpZmljIG1lc3NhZ2UuCi0JICBPdGhlcndpc2Ugd2Ugd2lsbCBjYW5jZWwgaXQgbGF0ZXIgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uIGluc3RlYWQgb2YgcmV1c2luZwotCSAgaXQgYXQgYSBsYXRlciB0aW1lLgotCSAgSXQgbWlnaHQgYWxzbyBtYWtlIHNlbnNlIHRvIHJldXNlIGNvbm5lY3Rpb25zIGlmIGEgbm9uLTIwMCByZXNwb25zZSBpcwotCSAgcmVjZWl2ZWQuIEFzIGxvbmcgYXMgdGhlcmUgd2FzIG5vIGNvbm5lY3Rpb24gZXJyb3IsIHRoZSBIVFRQIGNvbm5lY3Rpb24gc2hvdWxkCi0JICBiZSByZS11c2FibGUuCi0KLTIwMTYtMDctMTEgMTI6MDU6MDYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQWxzbyBlbmFibGUgVjRMMiBwcm9iZSBvbiBhYXJjaDY0IChha2EgQVJNIDY0Yml0KQotCi0yMDE2LTA3LTExIDExOjU5OjE5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYzoKLQkgIHJ0cCBleGFtcGxlOiBGaXggbGVhawotCSAgQWxzbyBzdG9wIGZldGNoaW5nIHRoZSBpbnRlcm5hbCBzb3VyY2UgYXMgdGhpcwotCSAgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBicm9rZW4uCi0KLTIwMTYtMDctMDggMTQ6NTg6MzcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgRW5hYmxlIHY0bDIgcHJvYmUgb24gTGludXgvQVJNCi0JICBNb3N0IG9mIHRob3NlIGhhdmUgVjRMMiBkcml2ZXJzIHRoZXNlIGRheXMgZW5hYmxpbmcgaXQgbWFrZSBzdXJlIHRoYXQgaXQKLQkgIHRoaXMgY29kZSBpcyBlbmFibGVkIGluIG1ham9yIGRpc3RyaWJ1dGlvbiwgaGVuY2UgdGhhdCBIVyBhY2NlbGVyYXRlZAotCSAgZGVjb2Rlci9lbmNvZGVyIGNhbiBiZSB1c2VkIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQuIFRoZSBwcm9iZXMgYXJlCi0JICBzbGlnaHRseSBpbmNyZWFzaW5nIHRoZSBmaXJzdCBpbml0IG9mIGdzdHJlYW1lciBsaWJyYXJ5LCB0aG91Z2ggdGhlCi0JICByZXN1bHQgaXMgY2FjaGVkIGluIHRoZSByZWdpc3RyeSBmb3IgbGF0ZXIgdXNlLgotCi0yMDE2LTA3LTExIDA5OjQ2OjQ5ICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgcnRwaDI2NXBheTogQWNjZXB0IGFycmF5X2NvbXBsZXRlbmVzcz0xCi0JICBXaGVuIHBhcnNpbmcgTkFMIHVuaXQgdHlwZSBpbiBjb2RlY19kYXRhLCBjaGVjayB0aGUgNmJpdHMgb2YKLQkgIE5BTF91bml0X3R5cGUgb25seSBhbmQgZG8gbm90IHJlcXVpcmUgdGhlIGFycmF5X2NvbXBsZXRlbmVzcyBiaXQgdG8gYmUKLQkgIDAsIHNpbmNlIHRoZSBkZWZhdWx0IGFuZCBtYW5kYXRvcnkgdmFsdWUgb2YgYXJyYXlfY29tcGxldGVuZXNzIGlzIDEgZm9yCi0JICBodmMxLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODY1MwotCi0yMDE2LTA3LTEwIDIxOjM1OjA2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IEFsc28gY29weSBkZXZpY2VfY2FwcyBpbiBnc3RfdjRsMl9kdXAKLQkgIFRoaXMgZml4ZXMgcmVncmVzc2lvbiB3aGVyZSBNMk0gZXJyb3Igb3V0IHNheWluZyB0aGV5IGhhdmUgbm8gb3V0cHV0Ci0JICBmb3JtYXQgKHRoZSBWNEwyIENBUFRVUkUgc2lkZSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4MTk1Ci0KLTIwMTYtMDctMTAgMjE6MzA6MjcgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IFVzZSBjb3JyZWN0IGluNl9wa3RpbmZvIHN0cnVjdCBpbnN0ZWFkIG9mIGluX3BrdGluZm8KLQkgIEZpeGVzIHRoZSBidWlsZCBvbiBGcmVlQlNELCB3aGljaCBkb2VzIG5vdCBoYXZlIHRoZSBsYXR0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NjIzCi0KLTIwMTYtMDctMDggMTc6Mjg6MTkgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGZpeCBtdWx0aXBsYW5hciBjYXB0dXJlCi0JICBBZnRlciBzd2l0Y2hpbmcgdG8gdXNpbmcgVjRMMl9DQVBfREVWSUNFX0NBUFMgd2UgbG9zdCBzdXBwb3J0IGZvcgotCSAgbXVsdGlwbGFuYXIgZGV2aWNlIHR5cGVzLiBBZnRlciBzb21lIHJlc2VhcmNoLCBpdCBsb29rcyBsaWtlCi0JICB2Y2FwLmNhcGFiaWxpdGllcyB0cmVhdGVkIHRoZSBtdWx0aXBsYW5hciBmbGFnIG9mIG91dHB1dCBhbmQgY2FwdHVyZQotCSAgZGV2aWNlcyBlcXVhbGx5LCBidXQgbm90IHRoZSBuZXcgZGV2aWNlX2NhcHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4MTk1Ci0KLTIwMTYtMDctMDggMTQ6NTY6MzAgKzAyMDAgIE1hdHMgTGluZGVzdGFtIDxtYXRzbG1AYXhpcy5jb20+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5oOgotCSAgbXVsdGlwYXJ0bXV4OiBVc2UgUFRTIGFuZCBEVFMgaW5zdGVhZCBvZiB0aW1lc3RhbXAKLQkgIEFuZCBwYXNzLXRocm91Z2ggYm90aCBvZiB0aGVtLgotCSAgQmFzZWQgb24gYSBwYXRjaCBieSBHw7ZyYW4gSsO2bnNzb24gPGdvcmFuam5AYXhpcy5jb20+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3OTAwCi0KLTIwMTYtMDYtMzAgMTQ6NDA6NDAgKzAyMDAgIFRob21hcyBTY2hldWVybWFubiA8VGhvbWFzLlNjaGV1ZXJtYW5uQGJhcmNvLmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JICBqYWNrOiBkb24ndCB3YWl0IGZvciBjYWxsYmFja3MgaWYgdGhlIGphY2sgc2VydmVyIHNodXQgZG93bgotCSAgT3RoZXJ3aXNlIHdlJ2xsIHdhaXQgZm9yZXZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcyNzUKLQotMjAxNi0wNi0yMyAxNTozMDoxOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBMZXQgdXBzdHJlYW0gZXZlbnRzIGdvIHRocm91Z2ggdXBzdHJlYW0KLQkgIFRoZXJlJ3Mgbm8gcmVhbCByZWFzb24gdG8gYXZvaWQgc2VuZGluZyBRT1MvTkFWSUdBVElPTiBldmVudHMgdXBzdHJlYS4KLQkgIFNvbWUgZWxlbWVudHMgbWlnaHQgd2FudCB0byBoYXZlIHRoYXQgaW5mb3JtYXRpb24uCi0KLTIwMTYtMDYtMjMgMTU6MjI6NTYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBMZXQgdXBzdHJlYW0gZXZlbnRzIGdvIHRocm91Z2ggdXBzdHJlYW0KLQkgIFRoZXJlJ3Mgbm8gcmVhbCByZWFzb24gdG8gYXZvaWQgc2VuZGluZyBRT1MvTkFWSUdBVElPTiBldmVudHMgdXBzdHJlYS4KLQkgIFNvbWUgZWxlbWVudHMgbWlnaHQgd2FudCB0byBoYXZlIHRoYXQgaW5mb3JtYXRpb24uCi0KLTIwMTYtMDYtMjMgMTU6MTc6MzYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JICBkdmRlbXV4OiBMZXQgdXBzdHJlYW0gZXZlbnRzIGdvIHRocm91Z2ggdXBzdHJlYW0KLQkgIFRoZXJlJ3Mgbm8gcmVhbCByZWFzb24gdG8gYXZvaWQgc2VuZGluZyBRT1MvTkFWSUdBVElPTiBldmVudHMgdXBzdHJlYS4KLQkgIFNvbWUgZWxlbWVudHMgbWlnaHQgd2FudCB0byBoYXZlIHRoYXQgaW5mb3JtYXRpb24uCi0JICBBbHNvIHJlbW92ZSBkb3duc3RyZWFtLW9ubHkgQ0FQUyBldmVudCBoYW5kbGluZyBhbmQgbWluaW1pemUgY29kZQotCi0yMDE2LTA3LTA3IDIzOjUzOjU0ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JICB2NGwyOiBmaXggdjRsMiBwcm9iZSBidWlsZCBlcnJvcgotCSAgQSB0eXBvIGluIGdzdF92NGwyX3Byb2JlX2FuZF9yZWdpc3RlcigpIGNhdXNlZCBhIGJ1aWxkIGVycm9yIHdoZW4gYnVpbGRpbmcKLQkgIHdpdGggLS1lbmFibGUtdjRsMi1wcm9iZS4gRml4aW5nIGl0LgotCSAgZ3N0djRsMi5jOiBJbiBmdW5jdGlvbiAnZ3N0X3Y0bDJfcHJvYmVfYW5kX3JlZ2lzdGVyJzoKLQkgIGdzdHY0bDIuYzoxNTA6MjU6IGVycm9yOiAnc3RydWN0IHY0bDJfY2FwYWJpbGl0eScgaGFzIG5vIG1lbWJlciBuYW1lZCAnY2FwYWJpbGl0aXRlcycKLQkgIGRldmljZV9jYXBzID0gdmNhcC5jYXBhYmlsaXRpdGVzOwotCi0yMDE2LTA3LTAxIDIyOjUzOjMzIC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IHVzZSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCBpbiBuZWdvdGlhdGUoKQotCSAgSW5zdGVhZCBvZiByZWltcGxlbWVudGluZyB0aGUgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUCi0JICBpbnRlcmVjdGlvbiBtb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODE5NQotCi0yMDE2LTA3LTAyIDAxOjU2OjA3IC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IHVzZSBvcGVuZWQgZGV2aWNlIGNhcHMgaW5zdGVhZCBvZiBwaHlzaWNhbCBkZXZpY2Ugb25lcwotCSAgVGhlIHNhbWUgcGh5c2ljYWwgZGV2aWNlIGNhbiBleHBvcnQgbXVsdGlwbGUgZGV2aWNlcy4gSW4KLQkgIHRoaXMgY2FzZSwgdGhlIGNhcGFiaWxpdGllcyBmaWVsZCBub3cgY29udGFpbnMgYSB1bmlvbiBvZgotCSAgYWxsIGNhcHMgYXZhaWxhYmxlIGZyb20gYWxsIGV4cG9ydGVkIFY0TDIgZGV2aWNlcyBhbG9uZ3NpZGUKLQkgIGEgVjRMMl9DQVBfREVWSUNFX0NBUFMgZmxhZyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRlY2lkZQotCSAgd2hhdCBjYXBhYmlsaXRpZXMgdG8gY29uc2lkZXIuIEluIG91ciBjYXNlLCB3ZSBuZWVkIHRoZQotCSAgb25lcyBmcm9tIHRoZSBleHBvcnRlZCBkZXZpY2Ugd2UgYXJlIHVzaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODE5NQotCi0yMDE2LTA3LTA3IDE4OjI0OjU5ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogUmVtb3ZlIHN1c3BpY2lvdXMgY2hlY2tzIGZvciBwYWRzIGJlaW5nIGFjdGl2ZSBhbmQgbGlua2VkCi0JICBXZSBzaG91bGQgYWRkIGFsbCBwYWRzLCBubyBtYXR0ZXIgaWYgdGhleSBhcmUgbGlua2VkIG9yIGFjdGl2ZSBvciBub3QgYXQgdGhpcwotCSAgcG9pbnQuIFNraXBwaW5nIHNvbWUgdGhhdCBhcmUgbm90IHdpbGwgY2F1c2UgZGlmZmVyZW50IGJlaGF2aW91ciB0aGFuIHdpdGgKLQkgIG90aGVyIG11eGVycy4KLQotMjAxNi0wNy0wNyAxODoyMzowNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IEVycm9yIG91dCBpZiB3ZSBzdGFydCB3cml0aW5nIGRhdGEgd2l0aCBzb21lIHBhZHMgbm90IGhhdmluZyBhIGNvZGVjIGlkIHlldAotCSAgVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgYSkgdXBzdHJlYW0gc29tZWhvdyBnZXRzIGFyb3VuZCB0aGUgQ0FQUyBldmVudCBmYWlsaW5nCi0JICBvciBiKSB0aGVyZSBuZXZlciBiZWluZyBhbnkgQ0FQUyBldmVudC4KLQkgIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIHBhZHMgaGF2ZSBhIGNvZGVjLWlkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODUwOQotCi0yMDE2LTA3LTA3IDE4OjE0OjQzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogQ29uc2lzdGVudGx5IHVzZSBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCgpIGZvciBzZXR0aW5nIHRoZSBjb2RlYyBpZAotCi0yMDE2LTA3LTA0IDA5OjUwOjExICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5Lmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgcnRwaDI2NXBheS9kZXBheTogU3luYyBhZ2FpbnN0IFJGQyA3Nzk4Ci0JICBIYW5kbGUgc3Byb3AtdnBzLCBzcHJvcC1zcHMgYW5kIHNwcm9wLXBwcyBpbiBjYXBzIGluc3RlYWQgb2YKLQkgIHNwcm9wLXBhcmFtZXRlci1zZXRzLgotCSAgcnRwaDI2NXBheSB3b3JrcyB3aXRoIGJ5dGUtc3RyZWFtIGFuZCBodmMxIGZvcm1hdHMgYnV0IG5vdCBoZXYxIHlldC4gSXQKLQkgIGhhbmRsZXMgcHJvZmlsZS1pZCwgdGllci1mbGFnIGFuZCBsZXZlbC1pZCBpbiBjYXBzIHF1ZXJ5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzc2MAotCi0yMDE2LTA3LTA2IDA5OjI1OjAwICswMjAwICBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpIDxqYW4uc3RlZmZlbnNAZ21haWwuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICBmbHZkZW11eDogUHVzaCBub21pbmFsIGJpdHJhdGUgdGFncwotCSAgQWRkIHBlci1zdHJlYW0gdGFnIGxpc3RzLCB3aGljaCBhcmUgdXNlZCB0byBzZW5kIG5vbWluYWwKLQkgIGJpdHJhdGUgdGFncy4gV2hlbiByZW11eGluZyBGTFYgPT4gRkxWLCB0aGlzIG5vdyBwYXNzZXMKLQkgIHRocm91Z2ggdGhlIHVwc3RyZWFtIGJpdHJhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4NDQwCi0KLTIwMTYtMDctMDYgMDk6MjQ6NDkgKzAyMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGphbi5zdGVmZmVuc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkgIGZsdmRlbXV4OiBSZWZhY3RvciBtZXRhZGF0YSB0YWcgaGFuZGxpbmcKLQkgIFRoZSBGTFYgaGVhZGVyIGNhbm5vdCBiZSB0cnVzdGVkIHRvIGluZGljYXRlIHZpZGVvIG9yCi0JICBhdWRpbyBwcmVzZW5jZSwgYXMgdGhlIGNvbW1lbnRzIGFscmVhZHkgbWVudGlvbi4gRG9uJ3QKLQkgIGRlbGF5IHB1c2hpbmcgdGFncyB3YWl0aW5nIGZvciBzdHJlYW1zIHRoYXQgbWlnaHQgbmV2ZXIKLQkgIGFwcGVhci4KLQkgIFRhZ3MgYXJlIG5vdyBwdXNoZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhleSBjaGFuZ2U6Ci0JICAtIEFmdGVyIHBhcnNpbmcgYW4gb25NZXRhRGF0YSBzY3JpcHQgb2JqZWN0Ci0JICAtIEFmdGVyIG5lZ290aWF0aW5nIGNhcHMgb24gYSBwYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njg0NDAKLQotMjAxNi0wNy0wNiAxMjo0NDoxMCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggQUFDIGNvZGVjX2RhdGEgdmFsdWVzCi0JICBBcyBzZWVuIGluIHRoZSBwYXJlbnQgc3dpdGNoIGZvciBvYmplY3RfdHlwZV9pZCwgdGhlIDQgcG9zc2libGUgdmFsdWVzIGFyZQotCSAgMHg0MCwgMHg2NiwgMHg2NyBhbmQgMHg2OC4gRml4aW5nIHRoZSBuZXN0ZWQgc3dpdGNoIHRvIG1hdGNoIHRoZXNlIHZhbHVlcy4KLQkgIExvb2tzIGxpa2UgaXQgd2FzIGEgdHlwbyBtYWtpbmcgdGhlbSBkZWNpbWFsIGluc3RlYWQgb2YgaGV4YWRlY2ltYWwuCi0JICBDSUQgMTM2MzMyOAotCi0yMDE2LTA3LTA2IDEzOjUxOjAzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuOS4xID09PQotCi0yMDE2LTA3LTA2IDEzOjA2OjQ0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjkuMQotCi0yMDE2LTA3LTA2IDExOjQ2OjI2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTA3LTA2IDExOjIyOjUzICswMzAwICBTdGV2ZW4gSG92aW5nIDxzaEBiaWdicm90aGVyLm5sPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBGaXggZXJyb3IgbWVzc2FnZXMgdG8gZmlyc3QgY29udmVydCB0byBkb3VibGVzIGJlZm9yZSBkaXZpc2lvbgotCi0yMDE2LTA3LTA2IDEwOjE4OjMwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9kYS5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9zay5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTYtMDctMDUgMjE6MTE6MzUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IFNldCB0byBQTEFZSU5HIGFmdGVyIGEgc2VlayBhZ2FpbiBhZnRlciBzZXR0aW5nIHVwIHRoZSBzZWdtZW50IGFuZCBldmVyeXRoaW5nIGVsc2UKLQkgIFRoZXJlJ3MgYSBzbWFsbCB3aW5kb3cgZm9yIGEgcmFjZSBjb25kaXRpb24gb3RoZXJ3aXNlLgotCi0yMDE2LTA3LTA0IDE3OjQ1OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgcXRtdXg6IFVzZSBjb21wbGV0ZSBBQUMgY2FwcyB3aXRoIGNvZGVjX2RhdGEgaW4gdGhlIHRlc3RzCi0KLTIwMTYtMDctMDQgMTY6NTg6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBSZWplY3QgcmF3IEFBQyBpZiBubyBjb2RlY19kYXRhIGlzIGZvdW5kIGluIHRoZSBjYXBzCi0JICBJZiBuZWNlc3NhcnksIGEgZGVtdXhlciB3aWxsIGhhdmUgdG8gaW52ZW50IHNvbWV0aGluZyBoZXJlIGJ1dCB0aGlzIGlzIG9ubHkgYQotCSAgcHJvYmxlbSB3aXRoIG5vbi1jb25mb3JtYW50IGZpbGVzIGFueXdheS4KLQotMjAxNi0wNy0wNCAxNjo1NTozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBJbnZlbnQgQUFDIGNvZGVjX2RhdGEgaWYgbm9uZSBpcyBwcmVzZW50Ci0JICBXaXRob3V0LCByYXcgQUFDIGNhbid0IGJlIGhhbmRsZWQgYW5kIHdlIGhhdmUgc29tZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4KLQkgIHRoZSBkZWNvZGVyIHRoYXQgbW9zdCBsaWtlbHkgYWxsb3dzIHVzIHRvIGRlY29kZSB0aGUgc3RyZWFtIGluIG9uZSB3YXkgb3IKLQkgIGFub3RoZXIuIFRoaXMgaXMgdGhlIHNhbWUgY29kZSBhbHJlYWR5IHVzZWQgYnkgbWF0cm9za2FkZW11eCBmb3IgdGhlIHNhbWUKLQkgIHJlYXNvbnMsIGFuZCBmZm1wZWcvdmxjIHBsYXkgc3VjaCBmaWxlcyBqdXN0IGZpbmUgdG9vIGJ5IGd1ZXNzd29yay4KLQotMjAxNi0wNy0wNCAxNDo1NDoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IFJlamVjdCByYXcgQUFDIGNhcHMgd2l0aG91dCBjb2RlY19kYXRhCi0JICBUaGUgcmVzdWx0aW5nIGZpbGUgaXMgbm90IGdvaW5nIHRvIGJlIHBsYXlhYmxlIHdpdGhvdXQgZ3Vlc3N3b3JrIGFuZCByYXcgY2FwcwotCSAgc2hvdWxkIGFsd2F5cyBoYXZlIGNvZGVjX2RhdGEuCi0KLTIwMTYtMDUtMTAgMTU6NDg6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkgIHF0ZGVtdXg6IEhhbmRsZSB1cHN0cmVhbSBHQVAgaW4gcHVzaC1tb2RlL3RpbWUgc2VnbWVudAotCSAgVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdXBzdHJlYW0gaGFuZGxlcyB0aGUgZnJhZ21lbnRlZCBzdHJlYW1pbmcgaW4gVElNRQotCSAgc2VnbWVudHMgYW5kIHNlbmRzIHVzIGRhdGEgd2l0aCBnYXBzIHdpdGhpbiBmcmFnbWVudHMuIFRoaXMgd291bGQgaGFwcGVuIHdoZW4gZGVhbGluZwotCSAgd2l0aCB0cmljay1tb2Rlcy4KLQkgIFdoZW4gdXBzdHJlYW0gKHB1c2gtYmFzZWQsIFRJTUUgU0VHTUVOVCkgd2lzaGVzIHRvIHNlbmQgZGlzY29udGludW91cyBzYW1wbGVzLAotCSAgaXQgbXVzdCBvYmV5IHRoZSBmb2xsb3dpbmcgcnVsZXM6Ci0JICAqIFRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgW21vb2ZdIG11c3QgaGF2ZSBhIHZhbGlkIEdTVF9CVUZGRVJfT0ZGU0VUCi0JICAqIFRoZSBidWZmZXJzIGNvbnRhaW5pbmcgdGhlIGZpcnN0IHNhbXBsZSBhZnRlciBhIGdhcDoKLQkgICogTVVTVCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2FtcGxlLAotCSAgKiBNVVNUIGhhdmUgdGhlIERJU0NPTlQgZmxhZyBzZXQsCi0JICAqIE1VU1QgaGF2ZSBhIHZhbGlkIEdTVF9CVUZGRVJfT0ZGU0VUIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZyYWdtZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzM1NAotCi0yMDE2LTA3LTAxIDExOjU0OjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvdjRsMi92NGwyLXV0aWxzLmM6Ci0JICB2NGwyOiBmaXggcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9mIGVycm9yIGRlYnVnIHN0cmluZwotCSAgZ3N0X3Y0bDJfY2xlYXJfZXJyb3IoKSBkb2Vzbid0IHdvcmsgbGlrZSBnX2NsZWFyX2Vycm9yKCksIGl0Ci0JICBkb2Vzbid0IE5VTExpZnkgdGhlIHBvaW50ZXIsIHNvIHNldCBmcmVlZCBkZWJ1ZyBzdHJpbmcgdG8gTlVMTAotCSAgc28gaXQgZG9lc24ndCBnZXQgZnJlZWQgYWdhaW4gaWYgZ3N0X3Y0bDJfY2xlYXJfZXJyb3IoKSBpcwotCSAgY2FsbGVkIHR3aWNlIG9uIHRoZSBlcnJvci4KLQkgIENJRCAxMzYyOTAxCi0KLTIwMTYtMDctMDEgMTA6MDU6MDAgKzAwMDAgIEJyYWQgTGFja2V5IDxibGFja2V5QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRG9uJ3QgZGlzYWJsZSBVRFAgcHJvdG9jb2xzIG9uIHJlZGlyZWN0aW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4MjMyCi0KLTIwMTYtMDctMDEgMTc6Mjg6MTcgKzA5MDAgIFNldW5naGEgWWFuZyA8c2gueWFuZ0BsZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFB1c2ggY2FwcyBvbmx5IHdoZW4gaXQgd2FzIHVwZGF0ZWQKLQkgIENvbW1pdCA3ODczYmVkZTMxMzRiMTVlNTA2NmU4ZDE0ZTU0ZDFmNTA1NGQyMDYzIGNhdXNlZCBuZXcgY2FwcwotCSAgZXZlbnQgcGVyIG1vb2Ygd2l0aG91dCBjb25zaWRlcmF0aW9uIG9mIGR1cGxpY2F0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2ODI2OAotCi0yMDE2LTA2LTMwIDE1OjAxOjQ2ICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkgIHJ0cGgyNjVkZXBheTogZml4IGludmFsaWQgbWVtb3J5IGFjY2VzcwotCSAgMTAgYnl0ZXMgd2FzIGFsbG9jYXRlZCBmb3Igc3RyZWFtX2Zvcm1hdCBidXQgc2l6ZSBvZiAiYnl0ZS1zdHJlYW0iIGlzCi0JICBtb3JlLiBVc2UgZ19zdHJkdXAoKSBpbnN0ZWFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzc2MAotCi0yMDE2LTA2LTI5IDIzOjMxOjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSAgc2hvdXQyOiBVc2UgYSBub24tdGltZXIgR3N0UG9sbAotCSAgT3RoZXJ3aXNlIHNldF9mbHVzaGluZygpIHdpbGwgaGF2ZSB1bmRlZmluZWQgc2VtYW50aWNzIGFuZCBub3dhZGF5cyBjYXVzZXMgYQotCSAgZ19jcml0aWNhbCgpIHRvIHdhcm4gYWJvdXQgdGhhdC4KLQotMjAxNi0wNi0xOSAwMjowODoyNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NhbnRvc0BnbWFpbC5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgc291cGh0dHBzcmM6IGR5bmFtaWNhbGx5IGFkanVzdCBibG9ja3NpemUKLQkgIFVwZGF0ZSB0aGUgYmxvY2tzaXplIGRlcGVuZGluZyBvbiBob3cgbXVjaCBpcyBvYnRhaW5lZCBmcm9tIGEgcmVhZAotCSAgb2YgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBhdm9pZHMgZG9pbmcgdG9vIG1hbnkgcmVhZHMgaW4gc21hbGwgY2h1bmtzCi0JICB3aGVuIGxhcmdlciBhbW91bnRzIG9mIGRhdGEgYXJlIGF2YWlsYWJsZSBhbmQgYWxzbyBwcmV2ZW50cyB1c2luZwotCSAgYSB2ZXJ5IGxhcmdlIG1lbW9yeSBhcmVhIHRvIHJlYWQgYSBzbWFsbCBjaHVuayBvZiBkYXRhLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzgzMwotCi0yMDE2LTA2LTI4IDE2OjQ0OjUwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBXaW5kb3dzIGhhcyBubyBpcGlfc3BlY19kc3QgaW4gc3RydWN0IGluX3BrdGluZm8KLQotMjAxNi0wNi0yOCAxNToxNToxNCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogI2RlZmluZSBfX0FQUExFX1VTRV9SRkNfMzU0MiB0byBiZSBhYmxlIHRvIHVzZSBJUFY2X1BLVElORk8gb24gT1NYL2lPUwotCi0yMDE2LTA2LTI4IDE1OjA4OjA0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBNb3ZlICNpbmNsdWRlcyBhcm91bmQgdG8gYSkgd29yayBhcm91bmQgYnJva2VuIGdsaWJjIGhlYWRlciBhbmQgYikgV2luZG93cwotCi0yMDE2LTA2LTI4IDE0OjI1OjAzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBGaXggY29tcGlsYXRpb24gb24gV2luZG93cyBhbmQgKkJTRC9PU1gKLQotMjAxNi0wNi0yMyAyMDoyMTo1OSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogRmlsdGVyIG91dCBtdWx0aWNhc3QgcGFja2V0cyB0aGF0IGFyZSBub3QgZm9yIG91ciBtdWx0aWNhc3QgYWRkcmVzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Nzk4MAotCi0yMDE2LTA2LTI4IDEwOjU3OjI3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBXaGVuIHNlZWtpbmcsIGNvbnNpZGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgc3RhdGUgb3IgcGVuZGluZyBzdGF0ZSBpbnN0ZWFkIG9mIHRoZSBSVFNQIHN0YXRlCi0JICBJZiB3ZSBjb25zaWRlciB0aGUgUlRTUCBzdGF0ZSwgd2hhdCBjYW4gaGFwcGVuIGlzIHRoYXQgaXQgaXMgUExBWUlORyBidXQgdGhlCi0JICBlbGVtZW50IGFscmVhZHkgYXN5bmNocm9ub3VzbHkgdHJpZWQgdG8gUEFVU0UgYW5kIGl0IGp1c3QgZGlkIG5vdCBoYXBwZW4geWV0LgotCSAgV2Ugd291bGQgdGhlbiBvdmVycmlkZSB0aGlzIHNldHRpbmcgdG8gUEFVU0VEICh3aGlsZSB0aGUgZWxlbWVudCBhY3R1YWxseSBpcwotCSAgaW4gUEFVU0VEKSBhbmQgc2V0IHRoZSBSVFNQIHN0YXRlIHRvIFBMQVlJTkcgYWdhaW4uIFRoaXMgd291bGQgdGhlbiBjYXVzZSB1cwotCSAgdG8gcHJvZHVjZSBwYWNrZXRzIHdoaWxlIHRoZSBzaW5rcyBhcmUgYWxsIFBBVVNFRCwgcGlsaW5nIHVwIHRob3VzYW5kcyBvZgotCSAgcGFja2V0cyBpbiB0aGUgcnRwaml0dGVyYnVmZmVyIGFuZCBvdGhlciBlbGVtZW50cyBhbmQgZmluYWxseSBmYWlsaW5nLgotCi0yMDE2LTA2LTI3IDA5OjIwOjM1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogQWRkIGNvbW1lbnQgYWJvdXQgSDI2My9NUEVHNFAyIGJlaW5nIG5vbi1zdGFuZGFyZCBmb3IgRkxWCi0JICBUaGV5IGFyZSBob3dldmVyIHN1cHBvcnRlZCBieSBmZm1wZWcgYW5kIGFwcGFyZW50bHkgdXNlZCBvdXQgdGhlcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4MDA2Ci0KLTIwMTYtMDYtMjQgMTQ6NDg6NTMgKzAzMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQGFoaXJ1LmV1PgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogQWRkIHN1cHBvcnQgZm9yIEgyNjMgYW5kIE1QRUc0IHBhcnQyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY4MDA2Ci0KLTIwMTYtMDYtMjEgMTc6MTA6NTYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgVXBkYXRlIHBsdWdpbnMgZG9jCi0JICBUaGlzIGlzIHBhcnRseSBhdXRvbWF0ZWQgdXNpbmcgIm1ha2UgdXBkYXRlIiBpbiBkb2NzL3BsdWdpbnMsIGJ1dCBhbHNvCi0JICByZXF1aXJlZCBtYW51YWwgbWVyZ2UuIEFkZGl0aW9uYWxseSwgbWlzc2luZyBwbHVnaW5zIGFuZCBlbGVtZW50cyBoYXZlCi0JICBiZWVuIGFkZGVkLgotCi0yMDE2LTA2LTIxIDE3OjUxOjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGxpdG11eC5jOgotCSAgdGVzdHM6IHNwbGl0bXV4OiBza2lwIHRlc3RzIGlmIHRoZW9yYSBvciBvZ2cgcGx1Z2lucyBhcmUgbm90IGF2YWlsYWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Nzg2MQotCi0yMDE2LTA2LTIxIDExOjQ2OjEzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBhYzJmNjQ3IHRvIGYzNjNiMzIKLQotMjAxNi0wNi0yMSAwNzo0MDo0MiAtMDQwMCAgQWFyb24gQm94ZXIgPGJveGVyYWJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgZ3N0cnRwajJrcGF5OiB1c2UgdGlsZSBiaXQgYW5kIHRpbGUgbnVtYmVyIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdGlsZXMgaW4gcGFja2V0Ci0JICBOb3cgd2UgZG9uJ3QgaGF2ZSB0byByZWx5IG9uIGEgc3BlY2lhbCB2YWx1ZSBmb3IgdGhlIHRpbGUgbnVtYmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzgxNwotCi0yMDE2LTA2LTIxIDA5OjM0OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgcnRwajJrcGF5OiBmaXggY29tcGlsZXIgd2FybmluZyBvbiBPUy9YCi0JICBnc3RydHBqMmtwYXkuYzozNjQ6MjE6IGVycm9yOiBpbXBsaWNpdCB0cnVuY2F0aW9uIGZyb20gJ2ludCcgdG8gYml0ZmllbGQgY2hhbmdlcyB2YWx1ZSBmcm9tIC0xIHRvIDY1NTM1Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3ODE3Ci0KLTIwMTYtMDYtMjEgMDk6MzQ6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JICBkb2NzOiB1cGRhdGUKLQotMjAxNi0wNS0xNiAxNzozMTo1OCArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNzZXR0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ljeWRlbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9qcGVnZW5jLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzcmMuYzoKLQkgIGZpeCBidWZmZXIgbGVha3MgaW4gdGVzdHMKLQkgIE5lZWQgdG8gY2FsbCBnc3RfY2hlY2tfZHJvcF9idWZmZXJzKCkgdG8gcmVsZWFzZSB0aGUgYnVmZmVycyBleGNoYW5nZWQKLQkgIGR1cmluZyB0aGUgdGVzdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY1NjEKLQotMjAxNi0wNS0xNyAxMjo1Mjo0MyArMDMwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IGZpeCBtZXNzYWdlIGxlYWtzIGluIHRlc3QKLQkgIEZsdXNoIHRoZSBidXMgd2hlbiBjbGVhbmluZyB1cCBzbyBwZW5kaW5nIG1lc3NhZ2VzIGFyZSBkZXN0cm95ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTYxCi0KLTIwMTYtMDUtMTcgMTI6NTg6MDYgKzAzMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBmaXggZXZlbnQgbGVha3MgaW4gdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjU2MQotCi0yMDE2LTA1LTEzIDE1OjEyOjIyICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JICBkZWludGVybGVhdmU6IGZpeCBsZWFrcwotCSAgLSBGbHVzaCB0aGUgYnVzIHNvIG1lc3NhZ2VzIGFyZW4ndCBsZWFrZWQKLQkgIC0gRml4IHBhZCBsZWFrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTYxCi0KLTIwMTYtMDYtMTcgMTU6Mjk6MTYgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogRGVwcmVjYXRlZCBzcHJvcC1wYXJhbWV0ZXItc2V0IHByb3BlcnR5Ci0JICBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIGVpdGhlciBpbiB0aGUgY29kZWNfZGF0YSAoYXZjIHN0cmVhbSBmb3JtYXQpIG9yIGluc2lkZQotCSAgdGhlIHN0cmVhbSwgYW5kIHdlIGV4dHJhY3QgaXQgZnJvbSB0aGVyZS4gSXQgc2hvdWxkIG5vdCBiZSBzZXQgZnJvbSBhCi0JICBwcm9wZXJ0eSBhcyBpdCdzIHN0cmVhbSBzcGVjaWZpYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc3ODkKLQotMjAxNi0wNi0xNyAxMjoxNjozMiAtMDcwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG1ha2UgYWxsIHNydHAgZW5jb2RlciBwcm9wZXJ0aWVzIGV4cGxpY2l0Ci0JICBUaGUgU2Vzc2lvbiBEYXRhIFByb3RvY29sIGRvZXNuJ3QgYWxsb3cgc3BlY2lmeWluZyBhIGNpcGhlciBmb3IgdGhlCi0JICBTUlRDUCwgc28gaXQgd2lsbCB1c2UgdGhlIFNSVFAgb25lLiBJbiB0aGUgInNydHBlbmMiIGVsZW1lbnQgdGhlIGNpcGhlcgotCSAgImFlcy0xMjgtaWNtIiBpcyB0aGUgZGVmYXVsdCBmb3IgU1JUUCBhbmQgU1JUQ1AsIGJ1dCBpZiB3ZSB3YW50IHRvIGhhdmUKLQkgIGFuIFNSVENQIHdpdGggdGhlICJhZXMtMjU2LWljbSIgY2lwaGVyIHRoZW4gd2UgYWxzbyBuZWVkIHRvIHNldCB0aGUgU1JUUAotCSAgY2lwaGVyIHRvICJhZXMtMjU2LWljbSIsIG90aGVyd2lzZSAiYWVzLTEyOC1pY20iIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Nzc5OQotCi0yMDE2LTA2LTE3IDE5OjU5OjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwLmM6Ci0JICBzb3VwOiB3b3JrIGFyb3VuZCBmcmVxdWVudCBkZWFkbG9ja3MgaW4gR0xpYiB0eXBlIGluaXRpYWxpc2F0aW9uCi0JICAuLiBieSByZWdpc3RlcmluZyB0aGUgdHlwZXMgZnJvbSB0aGUgcGx1Z2luIGluaXQgZnVuY3Rpb24uIFRoaXMKLQkgIHNlZW1zIHRvIGhlbHAsIGJ1dCB3ZSdsbCBzZWUgaWYgaXQncyBlbm91Z2ggKG1pZ2h0IG5lZWQgc2ltaWxhcgotCSAgdGhpbmdzIGVsc2V3aGVyZSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzOTExCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0ODg1Ci0KLTIwMTYtMDYtMTcgMTY6MDg6MDggKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBUaGUgcHJvcmVzIHZhcmlhbnQgaXMgc3RvcmVkIGluIHRoZSB2YXJpYW50IGZpZWxkLCBub3QgZm9ybWF0Ci0JICBBbmQgdGhlIGNhcHMgaW4gdGhlIHNpbmsgcGFkIHRlbXBsYXRlIGFscmVhZHkgdXNlZCB2YXJpYW50IChvbmx5KS4KLQotMjAxNi0wNi0xNyAxMzowMDo0OCArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzaGdAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5Lmg6Ci0JICBydHBoMjY1cGF5OiBSZW1vdmUgc3Byb3AtcGFyYW1ldGVyLXNldHMgcHJvcGVydHkKLQkgIFRoZXJlIGlzIG5vIHZhbGlkIHVzZSBjYXNlIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBuZWVkZWQgc2luY2UgdGhlIHZhbHVlcwotCSAgbXVzdCBiZSBpbiBlaXRoZXIgY29kZWNfZGF0YSBvciBidWZmZXIgZGF0YS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM3NjAKLQotMjAxNi0wNi0xMCAxNjoxNzoyNiArMDIwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzaGdAYXhpcy5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9zY2Fub2JqLWJ1aWxkLnN0YW1wOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JICBydHBoMjY1cGF5OiBSZWFkIE5BTFUgdHlwZSB0aGUgc2FtZSB3YXkgZXZlcnl3aGVyZQotCSAgQ29zbWV0aWMgY2hhbmdlIHRvIHJlYWQgTkFMVSB0eXBlIGluIGdzdF9ydHBfaDI2NV9wYXlfZGVjb2RlX25hbCgpIHRoZQotCSAgc2FtZSB3YXkgYXMgaW4gb3RoZXIgcGxhY2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzc2MAotCi0yMDE2LTA2LTE3IDEzOjU4OjMzICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IFJUUEppdHRlckJ1ZmZlck1vZGUgZG9jdW1lbnRhdGlvbgotCSAgRG9jdW1lbnRhdGlvbiBsYWNrcyAnQCcgYmVmb3JlIGVhY2ggZW51bSB2YWx1ZXMgYW5kIHRoZXJlIHdhcyBhbiBleHRyYQotCSAgbGluZSBhZnRlciBzeW1ib2wgc2VjdGlvbiB3aGljaCBjb25mdXNlcyBHVEstRG9jIHBhcnNlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc3ODgKLQotMjAxNi0wNS0yMyAxMDoxODo0OCArMDIwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHRha2UgdGhlIGxvY2sgd2hlbiBjaGFuZ2luZyBzdGF0cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjAyNQotCi0yMDE2LTA2LTE1IDExOjE5OjQzICswMjAwICBKw7xyZ2VuIFNsb3dhY2sgPGp1cmdlbi5zbG93YWNrQGJhcmNvLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JICBydHBoMjY1OiBmaXggTkFMIHVuaXQgdHlwZSBwYXJzaW5nIGFuZCBTUFMvUFBTL1ZQUyBkZXRlY3Rpb24KLQkgIEZpeGVzIHNwcy9wcHMvdnBzIGluc2VydGlvbiB2aWEgdGhlIGNvbmZpZy1pbnRlcnZhbCBwcm9wZXJ0eS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLy9zaG93X2J1Zy5jZ2k/aWQ9NzY3NjgwCi0KLTIwMTYtMDYtMTEgMTI6MTY6MDMgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JICBzaW1wbGUtbGF1bmNoLWxpbmVzOiBVc2UgY29ycmVjdCBKUEVHMjAwMCBjYXBzCi0KLTIwMTYtMDYtMTAgMTM6NDM6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBmaXggaW5kZW50YXRpb24KLQotMjAxNi0wNi0xMCAxMzo0MjowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGZpeCBkYXRlIHBhcnNpbmcgd2hlbiB0aGVyZSBhcmUgdHJhaWxpbmcgc3BhY2VzCi0JICBGaXhlcyBwYXJzaW5nIG9mICJUaHUgTWF5IDExIDE1OjU3OjQ2IDIwMDYgIi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Njc0OTYKLQotMjAxNi0wNS0xMyAxNTowODoyNCAtMDQwMCAgQWFyb24gQm94ZXIgPGJveGVyYWJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya2NvbW1vbi5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkgIGdzdHJ0cGoyazogc2V0IHNhbXBsaW5nIGZpZWxkIHJlcXVpcmVkIGJ5IFJGQwotCSAgVGhpcyBmaWVsZCBpcyBub3cgcmVxdWlyZWQgaW4gdGhlIHNpbmsgY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjYyMzYKLQotMjAxNi0wNi0wOSAwOTozMDo0OCArMDkwMCAgU2V1bmdoYSBZYW5nIDxzaC55YW5nQGxnZS5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBGaXggdW5yZWYgYXNzZXJ0aW9uIGZhaWx1cmUKLQkgIEZpeCB1bnJlZiBhc3NlcnRpb24gZmFpbHVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzQyNAotCi0yMDE2LTA1LTE0IDE0OjQ2OjE3ICswMjAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogV29yayB3aXRoIG5vbi1USU1FIHNlZ21lbnRzCi0JICBXaXRoIG5vbi10aW1lIHNlZ21lbnRzLCBpdCBub3cgYXNzdW1lcyB0aGF0IHRoZSBhcnJpdmFsIHRpbWUgb2YgcGFja2V0cwotCSAgaXMgbm90IHJlbGV2YW50IGFuZCB0aGF0IG9ubHkgdGhlIFJUUCB0aW1lc3RhbXAgbWF0dGVyIGFuZCBpdCBwcm9kdWNlcwotCSAgYW4gb3V0cHV0IHNlZ21lbnQgc3RhcnQgYXQgcnVubmluZyB0aW1lIDAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NDM4Ci0KLTIwMTYtMDYtMDcgMjA6NTM6MzQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogV2FpdCBmb3Igc2VnbWVudCBldmVudCBiZWZvcmUgY2hlY2tpbmcgaXQKLQkgIFRoZSBoZXVyaXN0aWMgdG8gY2hvb3NlIGJldHdlZW4gcGFja2V0aXNlIG9yIG5vdCB3YXMgY2hhbmdlZCB0byB1c2UgdGhlCi0JICBzZWdtZW50IGZvcm1hdC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGlzIGNoYW5nZSBpcyByZWFkaW5nIHRoZSBzZWdtZW50Ci0JICBkdXJpbmcgdGhlIGNhcHMgZXZlbnQgaGFuZGxpbmcuIFRoZSBzZWdtZW50IGV2ZW50IHdpbGwgb25seSBiZSBzZW50Ci0JICBhZnRlci4gVGhhdCBwcmV2ZW50ZWQgdGhlIGRlY29kZXIgdG8gZ28gaW4gcGFja2V0aXplIG1vZGUsIGFuZCBhdm9pZAotCSAgdXNlbGVzcyBwYXJzaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjI1MgotCi0yMDE2LTA2LTA2IDE3OjAwOjIyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IFdhaXQgZm9yIHNlZ21lbnQgZXZlbnQgYmVmb3JlIGNoZWNraW5nIGl0Ci0JICBUaGUgaGV1cmlzdGljIHRvIGNob29zZSBiZXR3ZWVuIHBhY2tldGlzZSBvciBub3Qgd2FzIGNoYW5nZSB0byB1c2UgdGhlCi0JICBzZWdtZW50IGZvcm1hdC4gVGhlIHByb2JsZW0gaXMgdGhhdCB0aGlzIGNoYW5nZSBpcyByZWFkaW5nIHRoZSBzZWdtZW50Ci0JICBkdXJpbmcgdGhlIGNhcHMgZXZlbnQgaGFuZGxpbmcuIFRoZSBzZWdtZW50IGV2ZW50IHdpbGwgb25seSBiZSBzZW50Ci0JICBhZnRlci4gVGhhdCBwcmV2ZW50ZWQgdGhlIGRlY29kZXIgdG8gZ28gaW4gcGFja2V0aXplIG1vZGUsIGFuZCBhdm9pZAotCSAgdXNlbGVzcyBwYXJzaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjI1MgotCi0yMDE2LTA2LTA3IDE2OjQyOjA5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBLZWVwIHBhcnQgb2YgdGhlIGlucHV0IGJ1ZmZlcgotCSAgSW5zdGVhZCBvZiBjb21wbGV0ZWx5IGdldHRpbmcgcmlkIG9mIHRoZSBpbnB1dCBidWZmZXIsIGNvcHkKLQkgIHRoZSBtZXRhZGF0YSwgdGhlIGZsYWdzIGFuZCB0aGUgdGltZXN0YW1wIGludG8gYW4gZW1wdHkgYnVmZmVyLgotCSAgVGhpcyB3YXkgdGhlIGRlY29kZXIgYmFzZSBjbGFzcyBjYW4gY29weSB0aGF0IGluZm9ybWF0aW9uIGFnYWluCi0JICB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg0MjQKLQotMjAxNi0wNi0wNyAxNjo0MTo1OCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogQ29kaW5nIHN0eWxlIGZpeGVzCi0KLTIwMTYtMDYtMDcgMTY6MDk6MjMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogQ29kaW5nIHN0eWxlIGZpeGVzCi0KLTIwMTYtMDYtMDcgMTY6MDQ6NTIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMjogQWRkIGFuIGVycm9yIHJldHVybiB0byBfdHJ5L19zZXRfZm9ybWF0Ci0JICBUaGlzIHdheSBvbmUgY2FuIGVhc2lseSBpZ25vcmUgZXJyb3JzLiBQcmV2aW91c2x5LCBlcnJvciB3ZXJlIGFsd2F5cwotCSAgcG9zdGVkIG9udCBoZSBidXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MTcyCi0KLTIwMTYtMDYtMDcgMTY6MDE6NTUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvdjRsMi11dGlscy5jOgotCSogc3lzL3Y0bDIvdjRsMi11dGlscy5oOgotCSAgdjRsMi11dGlsOiBJbnRyb2R1Y2UgR3N0VjRsMkVycm9yCi0JICBUaGlzIGlzIHRvIGFsbG93IHJldHVybmluZyBhbiBlcnJvciB0aGF0IGNhbiBlYXNpbHkgYmUgc2VudCBhcwotCSAgbWVzc2FnZSB0byB0aGUgYXBwbGljYXRpb24gaWYgdGhlIGVsZW1lbnQgbmVlZHMgaXQuIFVzaW5nIHRoaXMKLQkgIGFsc28gYWxsb3cgaWdub3JpbmcgZXJyb3JzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjE3MgotCi0yMDE2LTA2LTA3IDEyOjQxOjE5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IEF2b2lkIGRlY2lkZSBhbGxvY2F0aW9uIG9uIGFjdGl2ZSBwb29sCi0JICB2NGwyc3JjIHdpbGwgcmVuZWdvdGlhdGUgb25seSBpZiB0aGUgZm9ybWF0IGhhdmUgY2hhbmdlZC4gQXMgb2Ygbm93LAotCSAgaXQncyBub3QgcG9zc2libGUgdG8gY2hhbmdlIHRoZSBhbGxvY2F0aW9udyB3aXRob3V0IHJlc2V0dGluZyB0aGUKLQkgIGNhbWVyYS4gVG8gYXZvaWQgdW53YW50ZWQgc2lkZSBlZmZlY3QsIHNpbXBseSBrZWVwIHRoZSBvbGQgYWxsb2NhdGlvbgotCSAgaWYgbm8gcmVuZWdvdGlhdGlvbiBpcyB0YWtpbmcgcGxhY2UuIFRoaXMgZml4ZXMgYXNzZXJ0aW9uIGFuZCBwb3NzaWJsZQotCSAgZmFpbHVyZXMgaW4gVVNFUlBUUiBvciBETUFCVUYgaW1wb3J0IG1vZGUgKHdoZW4gdXNpbmcgZG93bnN0cmVhbSBwb29scykuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0MDQyCi0KLTIwMTYtMDQtMjggMTM6NDQ6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBTaG93IHN0YXRlIG5hbWUgaW4gZGVidWdnaW5nCi0JICBNYWtlcyBpdCBlYXNpZXIgdG8gdHJhY2Ugd2hhdCdzIGdvaW5nIG9uCi0KLTIwMTYtMDUtMTAgMTU6NDU6NDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogUmVtb3ZlIHVzZWxlc3MgdmFyaWFibGUKLQkgIFRoYXQgdmFyaWFibGUgaXMgb25seSBuZWVkZWQgZm9yIGEgZGVidWcgc3RhdGVtZW50LCBtb3ZlIGl0IHRoZXJlCi0KLTIwMTYtMDUtMTAgMTU6MTA6MzYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBBZGQvRml4IGNvbW1lbnRzIG9uIHRoZSB2YXJpb3VzIHN0cnVjdHVyZSB2YXJpYWJsZXMKLQkgIE5vIHZhcmlhYmxlcyB3ZXJlIGFkZGVkL3JlbW92ZWQuIFRoaXMgd2FzIGp1c3QgYSBnb29kIGV4Y3VzZSB0bzoKLQkgICogQ29tbWVudCB3aGF0IG1vc3QgdmFyaWFibGVzIGFyZSB1c2VkIGZvciAoYW5kIHdoZW4pCi0JICAqIE9yZGVyIHRoZW0gaW4gc3VjaCBhIHdheSBhcyB0byBzaG93IGZpcnN0IHRoZSBjb21tb24gdmFyaWFibGVzIHVzZWQKLQkgIGluIGFsbCBjYXNlcywgZm9sbG93ZWQgYnkgdGhvc2Ugb25seSB1c2VkIGluIHB1c2gtbW9kZQotCi0yMDE2LTA1LTEwIDE1OjA3OjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFJlbW92ZSB1bnVzZWQgc3RydWN0dXJlCi0JICBMZXQncyBqdXN0IHJlbW92ZSBpdCwgYmVlbiBjb21tZW50ZWQgZm9yIDcrIHllYXJzIDopCi0KLTIwMTUtMDktMDIgMTE6NDg6MjkgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiB1c2UgZGVjb2RlciBzdG9wIGNvbW1hbmQgaW5zdGVhZCBvZiBxdWV1ZWluZyBlbXB0eSBidWZmZXJzCi0JICBPbmx5IGlmIHRoZSBkZWNvZGVyIHN0b3AgY29tbWFuZCBmYWlscywga2VlcCBxdWV1ZWluZyBlbXB0eSBidWZmZXJzIHRvCi0JICBzaWduYWwgZW5kIG9mIHN0cmVhbSBhcyBiZWZvcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODY0Ci0KLTIwMTQtMTItMTIgMTQ6MzE6MzYgKzAxMDAgIFBldGVyIFNlaWRlcmVyIDxwcy5yZXBvcnRAZ214Lm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IGFkZCBnc3RfdjRsMl9kZWNvZGVyX2NtZCBoZWxwZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM4NjQKLQotMjAxNi0wNi0wMSAyMDoyODozOSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGb3J3YXJkIHNlZ21lbnRzIGRpcmVjdGx5IGlmIHdlIGFyZSBvcGVyYXRpbmcgaW4gUFVTSCBtb2RlIG9uIGZyYWdtZW50ZWQgc3RyZWFtcwotCSAgV2Ugc2hvdWxkbid0IGdvIHRocm91Z2ggc2VnbWVudCBhY3RpdmF0aW9uIGFzIHdlIHdpbGwgb25seSBoYXZlIGEgbGltaXRlZAotCSAgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHdob2xlIHN0cmVhbSB0aW1lbGluZSBsb29rcyBsaWtlIGZyb20gdGhlIG1vb2YuIFdlCi0JICBvbmx5IGtub3cgYWJvdXQgdGhlIGN1cnJlbnQgZnJhZ21lbnQsIHdoaWxlIHVwc3RyZWFtIGtub3dzIGFib3V0IHRoZSB3aG9sZQotCSAgc3RyZWFtLgotCSAgVGhpcyBmaXhlcyBzZWVraW5nIGluIERBU0ggc3RyZWFtcywgYm90aCBmb3Igc2Vla3MgYWZ0ZXIgdGhlIGN1cnJlbnQgbW9vZiBhbmQKLQkgIGZvciBzZWVrcyBpbnRvIHRoZSBjdXJyZW50IG1vb2YuIFRoZSBmb3JtZXIgd291bGQgZmFpbCBiZWNhdXNlIHRoZSBtb29mIGVuZHMKLQkgIGFuZCB3ZSBjYW4ndCBhY3RpdmF0ZSBhbnkgc2VnbWVudCwgdGhlIGxhdHRlciB3b3VsZCBjYXVzZSBhIHNlZ21lbnQgdGhhdCBzdG9wcwotCSAgYXQgdGhlIG1vb2YgZW5kLCBhbmQgbm8gZnVydGhlciBmcmFnbWVudHMgd291bGQgYmUgcGxheWVkIGJlY2F1c2Ugd2UgZW5kIHVwCi0JICBiZWluZyBFT1MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MDcxCi0KLTIwMTYtMDYtMDYgMTc6NTQ6MTAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogVXNlIGxvb3NlciBjYXBzIGZvciB1cHN0cmVhbQotCSAgV2hlbiB3ZSBmaXhhdGUgZm9yIHVwc3RyZWFtLCB0cnkgdG8gbm90IGludHJvZHVjZSBuZXcgZmllbGRzIHdoZW4gbm90Ci0JICBuZWVkZWQuIFRoaXMgd2FzIGltcG9ydGVkIGZyb20gdmlkZW9jb252ZXJ0IGVsZW1lbnQuCi0KLTIwMTUtMDEtMjggMTI6MDc6NTggKzAxMDAgIEVucmljbyBKb3JucyA8ZWpvQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JICBnc3R2NGwydHJhbnNmb3JtOiBmb3JtYXQgZml4YXRpb24gZm9yIHByZWZlcnJpbmcgcGFzc3Rocm91Z2gKLQkgICogSWYgb3V0Z29pbmcgZm9ybWF0IGlzIHVuZml4YXRlZCwgdHJ5IHRvIHNldCBpdCB0byBpbnB1dCBmb3JtYXQuCi0JICAqIENhbGwgZ3N0X2NhcHNfZml4YXRlICgpIGF0IGVuZCBvZiBmaXhhdGlvbiByb3V0aW5lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NzE5Ci0KLTIwMTYtMDUtMjAgMTI6NDk6NTMgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IGFsbG93IHRvIGNoYW5nZSBwaXhlbCBhc3BlY3QgcmF0aW8KLQkgIFNjYWxlcnMgbWF5IGNoYW5nZSB3aWR0aCBhbmQgaGVpZ2h0IGluZGVwZW5kZW50bHksCi0JICBhbGxvdyB0byBjaGFuZ2UgcGl4ZWwgYXNwZWN0IHJhdGlvLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjcxMgotCi0yMDE2LTA1LTIwIDEyOjMyOjI1ICswMjAwICBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JICB2NGwydHJhbnNmb3JtOiBmaXggc2NhbGluZyBpbiBjYXNlIG9mIGZpeGVkIHBpeGVsIGFzcGVjdCByYXRpbwotCSAgVG8gY2hhbmdlIHBpeGVsIGFzcGVjdCByYXRpbyBmcm9tIERBUiB0byBQQVIsIHRoZSBuZWNlc3Nhcnkgc2NhbGluZyBmYWN0b3IKLQkgIGlzIERBUi9QQVIsIG5vdCBEQVIqUEFSLgotCSAgRm9yIGdvb2QgbWVhc3VyZSwgYWRkIGRlYnVnIG91dHB1dCBzaW1pbGFyIHRvIHRoZSBmaXhlZC13aWR0aCBhbmQKLQkgIGZpeGVkLWhlaWdodCBjYXNlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY3MTEKLQotMjAxNi0wNS0xMyAxNjozOToyNSArMDIwMCAgUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogZmlsbCBjb2xvcmltZXRyeSBpbiBnc3RfdjRsMl9vYmplY3RfYWNxdWlyZV9mb3JtYXQKLQkgIEluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGVmYXVsdCBjb2xvcmltZXRyeSBjaG9zZW4gYnkKLQkgIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQoKSwgc2V0IGluZm8uY29sb3JpbWV0cnkgZnJvbSB0aGUKLQkgIHZhbHVlcyByZXR1cm5lZCBieSBHX0ZNVC4gVGhpcyBhbGxvd3MgZGVjb2RlcnMgdG8gcHJvcGFnYXRlCi0JICB0aGVpciBpbnB1dCBjb2xvcmltZXRyeSBkb3duc3RyZWFtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjM4MwotCi0yMDE2LTA1LTE4IDEwOjE3OjEyICswMjAwICBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiByZWZhY3RvciBnc3RfdjRsMl9vYmplY3RfZ2V0X2NvbG9yc3BhY2UgdG8gdGFrZSBhIHY0bDJfZm9ybWF0IHBhcmFtZXRlcgotCSAgTW92ZSB0aGUgZXh0cmFjdGlvbiBvZiBjb2xvcmltZXRyeSBwYXJhbWV0ZXJzIGZyb20gc3RydWN0IHY0bDJfZm9ybWF0IGFuZCB0aGUKLQkgIHNldHRpbmcgb2YgdGhlIGlkZW50aXR5IG1hdHJpeCBmb3IgUkdCIGZvcm1hdHMgaW50byB0aGUgZnVuY3Rpb24gdG8gYXZvaWQgY29kZQotCSAgZHVwbGljYXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MzgzCi0KLTIwMTYtMDUtMTMgMTQ6NTg6NDEgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiB1c2UgdmlzaWJsZSBzaXplLCBub3QgY29kZWQgc2l6ZSwgZm9yIGRvd25zdHJlYW0gbmVnb3RpYXRpb24gZmlsdGVyCi0JICBnc3RfdjRsMl9wcm9iZV9jYXBzKCkgcmV0dXJucyB0aGUgY29kZWQgc2l6ZSwgbm90IHRoZSB2aXNpYmxlIHNpemUuIFN1YnRyYWN0Ci0JICB0aGUga25vd24gcGFkZGluZyBmcm9tIHByb2JlZCBjYXBzIHdpdGggdGhlIGNvZGVkIHNpemUgYmVmb3JlIHVzaW5nIHRoZW0gYXMKLQkgIGZpbHRlciBmb3IgY2FwcyBuZWdvdGlhdGlvbiB3aXRoIGRvd25zdHJlYW0gZWxlbWVudHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MzgyCi0KLTIwMTYtMDUtMTMgMTQ6NDU6MDIgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IHVzZSBHX1NFTEVDVElPTiBpbnN0ZWFkIG9mIEdfQ1JPUCBpbiBnc3RfdjRsMl9vYmplY3RfYWNxdWlyZV9mb3JtYXQKLQkgIFRoZSBnc3RfdjRsMl9vYmplY3RfYWNxdWlyZV9mb3JtYXQoKSBmdW5jdGlvbiBpcyB1c2VkIGJ5IHY0bDJ2aWRlb2RlYyB0byBvYnRhaW4KLQkgIHRoZSBjdXJyZW50bHkgc2V0IGNhcHR1cmUgZm9ybWF0LiBTaW5jZSBHX0ZNVCByZXR1cm5zIHRoZSBjb2RlZCBzaXplLCB0aGUKLQkgIHZpc2libGUgc2l6ZSBuZWVkcyB0byBiZSBvYnRhaW5lZCBmcm9tIHRoZSBjb21wb3NlIHJlY3RhbmdsZSBpbiBvcmRlciB0bwotCSAgbmVnb3RpYXRlIGl0IHdpdGggZG93bnN0cmVhbSBlbGVtZW50cy4gVGhlIEdfQ1JPUCBjYWxsIGhhc24ndCB3b3JrZWQgb24gbWVtMm1lbQotCSAgY2FwdHVyZSBxdWV1ZXMgZm9yIGEgbG9uZyB0aW1lLiBJbnN0ZWFkIHVzZSB0aGUgR19TRUxFQ1RJT04gY2FsbCB0byBvYnRhaW4gdGhlCi0JICBjb21wb3NlIHJlY3RhbmdsZSBhbmQgb25seSBmYWxsIGJhY2sgdG8gR19DUk9QIGZvciBhbmNpZW50IGtlcm5lbHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MzgxCi0KLTIwMTYtMDEtMjcgMDk6NTc6MzggKzAxMDAgIEFuZHJlYXMgTmF1bWFubiA8YW5hdW1hbm5AdWx0cmF0cm9uaWsuZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogVXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVkgaWYgZHJpdmVyIGFkdmVydGlzZXMgaXQuCi0JICBPbiBtb2Rlcm4ga2VybmVscywgdGhlIEcvU19GTVQgaW9jdGxzIHdpbGwgYWx3YXlzIGZhaWwgdXNpbmcKLQkgIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSB3aXRoIFZGTF9ESVJfVFggKGUuZy4gcmVhbCBvdmVybGF5IG91dCBkcml2ZXJzKQotCSAgc2luY2UgdGhpcyBpcyBub3QgdGhlIGludGVudGVkIHVzZSAocmF0aGVyIHJ4LCBhY2NvcmRpbmcgdG8gdjRsMiBBUEkgZG9jKS4KLQkgIFByb2JhYmx5IHRoaXMgaXMgd2h5IHRoZSBWaWRlbyBPdXRwdXQgT3ZlcmxheSBpbnRlcmZhY2Ugd2FzIGNyZWF0ZWQsIHNvIGlmCi0JICB0aGUgZHJpdmVyIGFkdmVydGlzZXMgaXQgd2UgbWlnaHQgYXMgd2VsbCB1c2UuCi0JICBGb3Igb2xkIGtlcm5lbHMgKHByZSAyMDEyKSB0aGUgb2xkIHdheSBtaWdodCBzdGlsbCB3b3JrIHNvIGtlZXBpbmcgdGhpcyBmb3IKLQkgIGNvbXBhdGliaWxpdHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxMTY1Ci0KLTIwMTYtMDYtMDYgMTg6NTI6MDEgKzAxMDAgIEtpZXJhbiBCaW5naGFtIDxraWVyYW5AYmluZ2hhbS54eXo+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IFVzZSBub24tZGVwcmVjYXRlZCBWNEwyIHR5cGUgZm9yIFJHQjE1Ci0JICBTdXBwb3J0IGZvciB0aGUgdXBkYXRlZCBWNEwyX1BJWF9GTVRfWFJHQjU1NSB3YXMgYWRkZWQgaW4gY29tbWl0Ci0JICAyNTM4ZmVlMmZkOGZkYjc0YjA1ZjBhNTExMjgxYmM0NzA3ZTdjYzQ0IGhvd2V2ZXIsIHdoZW4gc2V0dGluZyB0aGUgZm9ybWF0Ci0JICBmb3IgdXNlIGluIHY0bDIgaW9jdGxzLCB0aGUgb2xkIGRlcHJlY2F0ZWQgZm9ybWF0IGlzIHN0aWxsIHVzZWQuIENvbnZlcnQKLQkgIHRoaXMgdG8gdGhlIG5ldyBhY2NlcHRlZCBmb3JtYXQgdHlwZSwgYXMgdGhlIHByZWZlcnJlZCBmb3JtYXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MzAwCi0KLTIwMTYtMDUtMDQgMTQ6NTA6MzIgKzAyMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHByZXNlcnZlIHNlZWsgZmxhZ3MKLQkgIFdpdGhvdXQgdGhpcyBzb21lIGZsYWdzIGdldCBsb3N0IGluIHN0cmVhbWluZyBtb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzE5NAotCi0yMDE2LTA2LTA2IDEwOjQ3OjUyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBSZXZlcnQgIldJUCByZXZlcnQgc291cCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZmRhYzNhN2EyMzFmMzg0ODY2NTYzNmNmODEyMmY5NjEwM2I0NmUzYi4KLQkgIFdhcyBub3Qgc3VwcG9zZWQgdG8gYmUgcHVzaGVkIGJ1dCBhIGxvY2FsIHdvcmthcm91bmQgZm9yCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzOTExI2MxMwotCi0yMDE2LTA2LTAzIDEzOjA5OjM1ICswMjAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IGNvbXBsZXRlIHdhcm4gbG9nIHdpdGggU1NSQwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzE5NQotCi0yMDE2LTA1LTMxIDE1OjI5OjEzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBXSVAgcmV2ZXJ0IHNvdXAKLQotMjAxNi0wNi0wMyAxMzoxODozMSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IFVucmVmIHNlZWsgZXZlbnQgaW4gYW55IGNhc2UKLQkgIEl0IHdvdWxkIGJlIGxlYWtlZCBpZiBubyBzZWVrIGhhbmRsZXIgd2FzIGN1cnJlbnRseSBzZXQuCi0KLTIwMTYtMDYtMDMgMTA6NDk6MTcgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSAgZHZkZW11eDogUHJvcGVybHkgc2V0IGV2ZW50L21lc3NhZ2Ugc2VxdWVuY2UgbnVtYmVycyBiYXNlZCBvbiB0aGUgcHJldmlvdXMgc2VlawotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5MzUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNTcKLQotMjAxNi0wNi0wMyAxMDozNjozMiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4Lmg6Ci0JICBkdmRlbXV4OiBSZW1lbWJlciBpZiB1cHN0cmVhbSBoYWQgYSB0aW1lIHNlZ21lbnQgYW5kIGlmIG5vdCBwcm9wZXJseSBjcmVhdGUgdGltZSBzZWdtZW50cwotCSAgUHJldmlvdXNseSB0aGUgc2VnbWVudC50aW1lIHdhcyB3cm9uZywgYW5kIHRoZSBwb3NpdGlvbiB3YXMgbm90IHVwZGF0ZWQKLQkgIGNvcnJlY3RseSwgcmVzdWx0aW5nIGluIHNlZWtzIGluIFBVU0ggbW9kZSB3aXRoIHVwc3RyZWFtIHByb3ZpZGluZyBhIEJZVEVTCi0JICBzZWdtZW50IHRvIG5vdCB3b3JrIGF0IGFsbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNTcKLQotMjAxNi0wNi0wMyAwOTo1NDo1MyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IEltcGxlbWVudCBTRUVLSU5HIHF1ZXJ5IHNvIHdlIGNhbiBhY3R1YWxseSBzZWVrIGlmIHVwc3RyZWFtIGNhbid0IHNlZWsgaW4gVElNRQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzE1NwotCi0yMDE2LTA2LTAyIDE0OjE5OjE1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZHZkZW11eDogUmVjYWxjdWxhdGUgdGhlIGZyYW1lIG9mZnNldHMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIEJZVEUgc2VnbWVudCBhbmQgd2hlbmV2ZXIgdXBzdHJlYW0gZ2l2ZXMgdXMgYSB0aW1lc3RhbXAKLQkgIFRoaXMgZml4ZXMgc2Vla2luZyBpbiBEViBzdHJlYW1zIHdoZXJlIHVwc3RyZWFtIG9wZXJhdGVzIGluIFBVU0ggbW9kZSB3aXRoIGEKLQkgIFRJTUUgc2VnbWVudCAoZS5nLiBhdmlkZW11eCkuIFdpdGhvdXQgdGhpcywgd2Ugd291bGQgZ2VuZXJhdGUgd3JvbmcgZHVyYXRpb25zCi0JICBhbmQgdGltZXN0YW1wcyBhZnRlciBhIHNlZWsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MTU3Ci0KLTIwMTYtMDYtMDIgMTM6NTM6NDQgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSAgZHZkZW11eDogUGFzcy10aHJvdWdoIGJ1ZmZlciBESVNDT05UIGZsYWdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MTU3Ci0KLTIwMTYtMDYtMDIgMTY6MTY6NDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA5ZGVwYXkuYzoKLQkgIHJ0cHZwOWRlcGF5OiBEb24ndCBhc3NlcnQgb24gZmxleGlibGUgbW9kZSBwYWNrZXRzCi0JICBJbnN0ZWFkIGp1c3QgcG9zdCBhIHdhcm5pbmcgb24gdGhlIGJ1cyBmb3Igbm93LgotCi0yMDE2LTA2LTAyIDE1OjAzOjE3ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICB0ZXN0czogcnRwYmluOiBmaXggY2FwcyBsZWFrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MTU2Ci0KLTIwMTYtMDYtMDIgMTU6MDA6MDEgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hbXJwYXJzZS5jOgotCSAgdGVzdHM6IGFtcnBhcnNlOiBjbGVhbiB1cCB0ZXN0Ci0JICAtIHVzZSBHU1RfQ0hFQ0tfTUFJTigpIHRvIHJlZHVjZSBib2lsZXJwbGF0ZQotCSAgLSB1bnJlZiB0aGUgaW5wdXQgY2FwcyB1c2luZyBhIHRlYXJkb3duIGZ1bmN0aW9uIHRvIHByZXZlbnQgbGVha3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNTYKLQotMjAxNi0wNS0yMCAxNToyMjozNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkgIGRlaW50ZXJsYWNlOiBFbnN1cmUgRElTQ09OVCBmbGFnIGlzIHByb3Blcmx5IHByb3BhZ2F0ZWQKLQkgIFRoZSBvdXRwdXQgb2YgZGVpbnRlcmxhY2UgYXQgc3RhcnR1cCwgb3Igd2hlbiByZWNlaXZpbmcgYSBuZXcgRElTQ09OVAotCSAgYnVmZmVyLCBzaG91bGQgaGF2ZSB0aGUgRElTQ09OVCBmbGFnIHNldCBvbiB0aGUgZmlyc3QgYnVmZmVyLgotCi0yMDE2LTA1LTMxIDIxOjM0OjA0ICswMjAwICBKb3NlcCBUb3JyYSA8YWRuNzcwQGdtYWlsLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJzcmM6IGNoZWNrIGZvciB2YWxpZCBzaXplIG9uIHJhdyB2aWRlbyBidWZmZXJzCi0JICBEaXNjYXJkIGJ1ZmZlcnMgdGhhdCBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGRhdGEgd2hlbiBkZWFsaW5nCi0JICB3aXRoIHJhdyB2aWRlbyBpbnB1dHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MDg2Ci0KLTIwMTYtMDUtMzEgMTc6MTA6MzYgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogVXNlIHRoZSBkZW11eGVyIHNlZ21lbnQgaW5zdGVhZCBvZiBhIG5ldyBvbmUgZm9yIE1TUyBzdHJlYW1zCi0JICBVcHN0cmVhbSBtaWdodCBoYXZlIHRvbGQgdXMgc29tZXRoaW5nIGFib3V0IHRoZSB0byBiZSBleHBlY3RlZCBzZWdtZW50LCBzbwotCSAgbGV0J3MgdXNlIHRoYXQgaW5mb3JtYXRpb24gaW5zdGVhZCBvZiBjb21pbmcgdXAgd2l0aCBhIFswLC0xXSBzZWdtZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzA3MQotCi0yMDE2LTA1LTMxIDE3OjA0OjMyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IE9ubHkgYWN0aXZhdGUgc2VnbWVudHMgYW5kIHNlbmQgU0VHTUVOVCBldmVudHMgaWYgd2UgaGF2ZSBzdHJlYW1zCi0JICBCdXQgaW4gdGhhdCBjYXNlIGFsc28gcmVtb3ZlIHRoZSBwZW5kaW5nIG5ld3NlZ21lbnQgZXZlbnQsIG90aGVyd2lzZSB3ZSB3b3VsZAotCSAgbGF0ZXIgc2VuZCBhIHBvc3NpYmx5IG91dGRhdGVkIGV2ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzA3MQotCi0yMDE2LTA1LTMxIDE2OjUzOjUwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEluIFBVTEwgbW9kZSwgbm90aGluZyBpcyBldmVyIGdvaW5nIHRvIHNlbmQgdXMgYSBTRUdNRU5UIGV2ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MDcxCi0KLTIwMTYtMDUtMzEgMTY6Mzg6MzQgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRG9uJ3Qgb3ZlcnJpZGUgVElNRSBzZWdtZW50cyBmcm9tIHVwc3RyZWFtIHRoYXQgd2UganVzdCBzYXcKLQkgIFRoZSBwb2ludCBvZiBkOGZiN2E5Yzk2YjEwODgxNGJlZWFhMGU2M2Y4MThkNDY0OGM3ZmU5IHdhcyB0byBub3QgaGF2ZSBhbnkKLQkgIHNwdXJpb3VzIHNlZ21lbnRzIHN0b3JlZCBmb3IgbGF0ZXIgaWYgd2UgZG8gQllURVMtPlRJTUUgY29udmVyc2lvbiwgYnV0Ci0JICBvdmVycmlkaW5nIGFueSBUSU1FIHNlZ21lbnRzIGZyb20gdXBzdHJlYW0gZG9lcyBub3QgbWFrZSBhbnkgc2Vuc2UuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzE2NQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzA3MQotCi0yMDE1LTA3LTE2IDA5OjQ4OjQ2ICswNTMwICBQcmFzaGFudCBHb3Rhcm5lIDxwcy5nb3Rhcm5lQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSAgbXVsdGlmaWxlc3JjOiBzZXQgcG9zaXRpb24gYXMgb2Zmc2V0IGZyb20gc3RhcnQtaW5kZXgKLQkgIHF1ZXJ5IHBvc2l0aW9uIGluIEdTVF9GT1JNQVRfQlVGRkVSIHJldHVybnMKLQkgIG9mZnNldCBmcm9tIHN0YXJ0LWluZGV4IHJhdGhlciB0aGFuIGluZGV4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjQ2MgotCi0yMDE2LTA1LTI3IDEyOjQ5OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSogdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9maWxlcy9ncmFkaWVudC5qMms6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgSlBFRy0yMDAwIHJ0cCBwYXlsb2FkZXIgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Njg3MAotCi0yMDE2LTA1LTI1IDE3OjExOjEzICswMjAwICBQaWVycmUgTGFtb3QgPHBpZXJyZS5sYW1vdEBvcGVud2lkZS5mcj4KLQotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkgIHJ0cGoya3BheTogRml4IGJ1ZmZlciBtZW1vcnkgbGVhawotCSAgSW5wdXQgYnVmZmVyIG1lbW9yeSB3YXMgbm90IHVubWFwcGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2ODcwCi0KLTIwMTYtMDUtMTggMTI6MTI6MTUgKzAzMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBmaXggY2FwcyBsZWFrCi0JICBnc3RfdjRsMl9vYmplY3RfcHJvYmVfY2FwcygpIHdhcyB0YWtpbmcgYW4gZXh0cmEgcmVmIG9uIHRoZSByZXR1cm5lZAotCSAgY2FwcyBmb3Igbm8gcmVhc29uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYxMAotCi0yMDE2LTA1LTIyIDIwOjE0OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSAgdmlkZW9jcm9wIG1hcmsgY3JvcCBwcm9wZXJ0aWVzIGFzIG11dGFibGUgaW4gcGxheWluZyBzdGF0ZQotCi0yMDE2LTA1LTIwIDE2OjQ3OjM1ICswMzAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBmaXggYnVmZmVyIGxlYWsgd2hlbiBmbHVzaGluZwotCSAgV2hlbiBlYXJseSByZXR1cm5pbmcgaW4gZ3N0X3NvdXBfaHR0cF9zcmNfcmVhZF9idWZmZXIoKSBiZWNhdXNlIHRoZQotCSAgZWxlbWVudCBpcyBGTFVTSElORywgd2UgbmVlZCB0byB1bm1hcCBhbmQgdW5yZWYgdGhlIGJ1ZmZlciB3aGljaCB3YXMganVzdCBjcmVhdGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjcxOAotCi0yMDE2LTA1LTIwIDExOjE1OjQ0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFNldCBzZWVrIGV2ZW50IHNlcW51bSBvbiBhbGwgU0VHTUVOVCBldmVudHMKLQkgIFNvbWUgd2VyZSBmb3Jnb3R0ZW4uCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTkzNQotCi0yMDE2LTA1LTIwIDExOjEyOjQ0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBhdmlkZW11eDogUGFzcyB0aHJvdWdoIHNlZWsgZXZlbnQgc2VxbnVtcyBpbiBhbGwgU0VHTUVOVC9FT1MgZXZlbnRzIGFuZCBTRUdNRU5UX0RPTkUgbWVzc2FnZXMvZXZlbnRzCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTkzNQotCi0yMDE2LTA1LTIwIDEwOjU2OjUyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFNldCBzZWVrIGV2ZW50IHNlcW51bSBpbiBFT1MgYW5kIFNFR01FTlRfRE9ORSBtZXNzYWdlcy9ldmVudHMKLQkgIEFsc28gYWN0dWFsbHkgc3RvcmUgdGhlIHNlcW51bSBpbiBwdWxsIG1vZGUgc2Vla3MuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTkzNQotCi0yMDE2LTA1LTE3IDEzOjQwOjM4ICswMzAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IGNhcHMgbGVhawotCSAgVGhlIGNhcHMgcmV0dXJuZWQgYnkgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgd2FzIG5ldmVyIHVucmVmZmVkIHdoZW4KLQkgIG5vdCBlYXJseSByZXR1cm5pbmcuCi0JICBGaXggYSBsZWFrIHdpdGggdGhlIGVsZW1lbnRzL2RlaW50ZXJsYWNlIHRlc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NTU4Ci0KLTIwMTYtMDEtMjUgMTY6MjU6NTEgKzAxMDAgIE1pa2hhaWwgRmx1ZGtvdiA8bWlzaGFAcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGRvbid0IGFjdCBvbiBzdXNwaWNpb3VzIEJZRSBSVENQCi0JICBTb21lIGVuZHBvaW50cyAobGlrZSBUYW5kYmVyZyBFMjApIGNhbiBzZW5kIEJZRSBwYWNrZXQgY29udGFpbmluZyBvdXIKLQkgIGludGVybmFsIFNTUkMuIEkgdGhpcyBjYXNlIHdlIHdvdWxkIGRldGVjdCBTU1JDIGNvbGxpc2lvbiBhbmQgZ2V0IHJpZAotCSAgb2YgdGhlIHNvdXJjZSBhdCBzb21lIHBvaW50LiBCdXQgYmVjYXVzZSB3ZSBhcmUgc3RpbGwgc2VuZGluZyBwYWNrZXRzCi0JICB3aXRoIHRoYXQgU1NSQyB0aGUgc291cmNlIHdpbGwgYmUgcmVjcmVhdGVkIGltbWVkaWF0ZWx5LgotCSAgVGhpcyBicmFuZCBuZXcgaW50ZXJuYWwgc291cmNlIHdpbGwgbm90IGhhdmUgc29tZSB2YXJpYWJsZXMgaW5jb3JyZWN0bHkKLQkgIHNldCBpbiBpdHMgc3RhdGUuIEZvciBleGFtcGxlICdzZXFudW0tYmFzZWAgYW5kIGBjbG9jay1yYXRlYCB2YWx1ZXMgd2lsbCBiZQotCSAgLTEuCi0JICBUaGUgZml4IGlzIG5vdCB0byBhY3Qgb24gQllFIFJUQ1AgaWYgaXQgY29udGFpbnMgaW50ZXJuYWwgb3IgdW5rbm93bgotCSAgU1NSQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMTkKLQotMjAxNS0xMS0xNSAxNDo1NDoyOCArMDEwMCAgTWlraGFpbCBGbHVka292IDxtaXNoYUBwZXhpcC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEFkZCB0ZXN0IGZvciBsb2NraW5nIG9mIHRoZSBzdGF0cyBzaWduYWwKLQkgIEtlZXBpbmcgdGhlIGxvY2sgd2hpbGUgZW1pdHRpbmcgdGhlIHN0YXRzIHNpZ25hbCBpbnRyb2R1Y2VzIHBvdGVudGlhbAotCSAgZGVhZGxvY2sgaW4gdGhvc2Ugc2l0dWF0aW9ucyB3aGVuIHRoZSBzaWduYWwgY2FsbGJhY2sgd2FudHMgdGhlIGFjY2VzcwotCSAgdG8gcnRwc2Vzc2lvbidzIHByb3BlcnRpZXMgd2hpY2ggYWxzbyByZXF1cmUgdGhlIGxvY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMjE2Ci0KLTIwMTYtMDUtMTkgMTU6MzY6NTcgKzA5MDAgIFNldW5naGEgWWFuZyA8c2gueWFuZ0BsZ2UuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGRvbid0IGhvbGQgb2JqZWN0IGxvY2sgd2hpbHN0IHB1c2hpbmcgb3V0IGhlYWRlcnMKLQkgIG1hdHJvc2thZGVtdXggd291bGQgdGFrZSB0aGUgR1NUX09CSkVDVF9MT0NLIGluCi0JICAtIGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2NvZGVjX2RhdGFfYWxsKCkKLQkgIC0gZ3N0X21hdHJvc2thX2RlbXV4X3F1ZXJ5KCkKLQkgIFNvbWUgcGFyc2UgZWxlbWVudCBzdWNoIGFzIEZMQUMgY2hlY2tzIHVwc3RyZWFtIHNlZWthYmlsaXR5LCBhbmQKLQkgIHRoZXJlIGlzIHNvbWUgdXNlIGNhc2VzIHRoYXQgbWF0cm9za2EtZGVtdXggaXMgbGlua2VkIHRvIGEgcGFyc2UgZWxlbWVudAotCSAgKGUuZy4sRkxBQyBmb3JtYXQpIHdpdGhvdXQgaW50ZXJtZWRpYXRlIGVsZW1lbnRzIChlLmcuLCBxdWV1ZSkuCi0JICBJbiB0aGlzIGNhc2UsIG1hdHJvc2thLWRlbXV4IG5ldmVyIHJldHVybnMgZnJvbSBfcHVzaF9jb2RlY19kYXRhX2FsbCgpCi0JICBiZWNhdXNlIHRoZSBwYXJzZXIgY2FuIHJldHVybiBvbmx5IGFmdGVyIGl0IHJlY2VpdmVzIHRoZSByZXNwb25zZSB0bwotCSAgdGhlIHVwc3RyZWFtIHF1ZXJ5LCBidXQgdGhhdCdzIG5vdCBnb2luZyB0byBoYXBwZW4gYmVjYXVzZSBpdCdzCi0JICBkZWFkbG9ja2VkLgotCSAgRWxlbWVudHMgbXVzdCBub3QgaG9sZCB0aGUgb2JqZWN0IGxvY2sgd2hpbHN0IHB1c2hpbmcgb3V0IGV2ZW50cwotCSAgb3IgZGF0YS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2NDUKLQotMjAxNi0wNS0xOSAxMjo0MzowMSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JICBzb3VwaHR0cGNsaWVudHNpbms6IFNldCBzZW50X2J1ZmZlcnMgYW5kIHN0cmVhbWhlYWRlcl9idWZmZXJzIHRvIE5VTEwgYWZ0ZXIgZnJlZWluZwotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IHVzZSBhbiBhbHJlYWR5IGZyZWVkIGxpc3QgbGF0ZXIgYW5kIGNyYXNoIG9yIHdvcnNlLgotCi0yMDE2LTA1LTE4IDE4OjMyOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBmaXggU2luY2UgdmVyc2lvbiBmb3IgbmV3ICJsb29wIiBwcm9wZXJ0eQotCi0yMDE2LTA1LTE2IDE2OjE4OjM3ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JICBydHBkZWM6IGZpeCBjbG9jayBsZWFrCi0JICBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbigpIHJldHVybnMgYSBuZXcgcmVmLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjUyMQotCi0yMDE2LTA1LTE3IDA1OjMzOjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBhZGQgZG9jIGJsdXJiIHdpdGggc2luY2UgbWFya2VyIGZvciBuZXcgImxvb3AiIHByb3BlcnR5Ci0KLTIwMTUtMTEtMTMgMTU6NTI6MzUgKzAxMDAgIERpbWl0cmlvcyBLYXRzYXJvcyA8cGF0Y2hlcndvcmtAZ21haWwuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBhZGQgc3VwcG9ydCBmb3IgcG5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDU5Ci0KLTIwMTYtMDUtMTUgMjI6MDc6MTQgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jOgotCSAgc3BsaXRtdXhzcmM6IENvbm5lY3QgdG8gZGVtdXggc2lnbmFscyBiZWZvcmUgYWN0aXZhdGluZwotCSAgRml4IGEgcmFjZSBpbiBzcGxpdG11eHNyYyBieSBwcm9wZXJseSBjb25uZWN0aW5nIHRvIHRoZQotCSAgZGVtdXhlciBzaWduYWxzIHdlJ3JlIGludGVyZXN0ZWQgaW4gKmJlZm9yZSogc2V0dGluZyBpdCBydW5uaW5nLgotCi0yMDE2LTA1LTE1IDEzOjMxOjM3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBkb2NzOiBVcGRhdGUgZm9yIGdpdCBtYXN0ZXIKLQotMjAxNi0wNS0xNSAxMjoxNjoyMyArMDIwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuaDoKLQkgIHJ0cG1wNGdwYXk6IERvbid0IHByb2R1Y2UgdGltZXN0YW1wcyBiYXNlZCBvbiBieXRlIGNvdW50Ci0JICBUaGUgR1NUX0JVRkZFUl9PRkZTRVQgb2Ygb3V0cHV0IGJ1ZmZlcnMgcmV0dXJuZWQgdG8gR3N0UnRwQmFzZVBheWxvYWQKLQkgIHNob3VsZCByZWZsZWN0IHRoZSBudW1iZXIgb2YgInNhbXBsZXMiIGluIHRoZSB1bml0IG9mIHRoZSBSVFAgY2xvY2sgaW4gdGhpcwotCSAgYnVmZmVyLiBJZiB0aGlzIGlzIG5vdCB0cnVlLCB0aGVuIGl0IHNob3VsZG4ndCBiZSBzZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxOTQzCi0KLTIwMTYtMDUtMTUgMTI6MjQ6MDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thLW11eDogRml4IHN0cmNtcCB1c2FnZQotCSAgSnVzdCB1c2UgZ19zdHJjbXAwIHdoaWNoIGNhbiBoYW5kbGUgTlVMTCBlbnRyaWVzCi0KLTIwMTYtMDMtMDQgMTA6MTQ6MDAgKzAxMDAgIENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBVc2UgYXVkaW8veC11bmFsaWduZWQtcmF3IGluc3RlYWQgb2YgYXVkaW8veC1yYXcgZm9yIEwxNiBkYXRhCi0JICBEaXJlY3RseSBzZXR0aW5nIGF1ZGlvL3gtcmF3IGNhcHMgbGVhZHMgdG8gcHJvYmxlbXMgd2hlbiB0aGUgZGVsaXZlcmVkCi0JICBkYXRhIGJsb2NrcyBkbyBub3QgYWxpZ24gcHJvcGVybHkgYXQgc2FtcGxlIGJvdW5kYXJpZXMgKGZvciBleGFtcGxlLCBhCi0JICBkYXRhIGJsb2NrIHdpdGggMzkxIGJ5dGVzKS4gU28sIGluc3RlYWQsIHNldCBhdWRpby94LXVuYWxpZ25lZC1yYXcgdG8KLQkgIGxldCBhIHBhcnNlciBiZSBhdXRvcGx1Z2dlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk0NjAKLQotMjAxNi0wNS0xMiAxMTo1MjowOSArMDkwMCAgU2V1bmdoYSBZYW5nIDxzaC55YW5nQGxnZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogUGFyc2luZyBlbHN0IGJveCBiYXNlZCBvbiB2ZXJzaW9uCi0JICBzZWdtZW50X2R1cmF0aW9uIGFuZCBtZWRpYV90aW1lIHNob3VsZCBiZSBwYXJzZWQgYmFzZWQgb24gdmVyc2lvbgotCSAgb2YgZWxzdCBib3guIFNwZWNpZmljYXRpb24gZGVmaW5lcyB0aGF0IGFuIGVsc3QgYm94IHdpdGggdmVyc2lvbiAxCi0JICBoYXMgdWludDY0IGFuZCBpbnQ2NCB2YWx1ZXMgZm9yIHNlZ21lbnRfZHVyYXRpb24gYW5kIG1lZGlhX3RpbWUsCi0JICByZXNwZWN0aXZlbHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MzAxCi0KLTIwMTYtMDUtMTQgMTI6NTc6NDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBjaGVjayBpZiByZXF1ZXN0IHdhcyBjYW5jZWxsZWQgd2hlbiBzZW5kaW5nIG1lc3NhZ2UKLQkgIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIHJlcXVlc3Qgd2FzIGFib3J0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZAotCSAgd2UgY2FuIHJldHVybiBpbW1lZGlhdGVsbHkKLQotMjAxNi0wNS0xNCAxMjo0Mzo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IHByb3h5IHJlc29sdmVyIGlzIG9uIGJ5IGRlZmF1bHQKLQkgIFJlbW92ZSBmcm9tIHRoZSBzZXNzaW9uIGNyZWF0aW9uIHBhcmFtZXRlcnMKLQotMjAxNi0wNS0xNCAxMjoxNTo0OCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkgIHNvdXA6IHVwZGF0ZSBidWlsZCB0byB3YXJuIGFib3V0IG5ld2VyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zCi0JICBXZSBhbHJlYWR5IGRlcGVuZCBvbiAyLjQ4Ci0KLTIwMTYtMDUtMTQgMTE6MDk6MzMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogcmVkdWNlIHJlYWRpbmcgbGF0ZW5jeSBieSB1c2luZyBub24tYmxvY2tpbmcgcmVhZAotCSAgTm9uLWJsb2NraW5nIHJlYWQgd2lsbCByZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZSB3aXRob3V0Ci0JICBibG9ja2luZyB0byB3YWl0IGZvciB0aGUgZnVsbCByZXF1ZXN0ZWQgc2l6ZS4KLQkgIFRoZSBkb3duc2lkZSBpcyB0aGF0IG5vdyBpdCBzb3VwaHR0cHNyYyBuZWVkcyB0byBoYXZlIGEgd2FpdGluZwotCSAgbWVjaGFuaXNtIGluIGNhc2UgdGhlcmUgaXMgbm8gZGF0YSBhdmFpbGFibGUgeWV0IHRvIGF2b2lkIGJ1c3kKLQkgIGxvb3BpbmcgYXJvbmQgdGhlIGlucHV0c3RyZWFtLgotCi0yMDE2LTA1LTE1IDEyOjMwOjUwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBUYWtlIHRoZSBsb2NrIGFscmVhZHkgd2hlbiByZWFkaW5nIHRoZSBvdGhlciBzdGF0cywgbm90IGp1c3QgZm9yIHRoZSBoYXNoIHRhYmxlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MDI1Ci0KLTIwMTYtMDUtMTQgMTc6MDQ6NTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkgIG1hdHJvc2thOiB1c2UgbWF0aC1jb21wYXQuaCBmb3IgTkFOIGRlZmluZQotCi0yMDE2LTA1LTE0IDIzOjM5OjIyICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBzcGxpdG11eHNpbms6IFVzZSBHc3RCaW4gYXN5bmMtaGFuZGxpbmcgaW5zdGVhZCBvZiBvdXIgb3duLgotCSAgU2V0IHRoZSBhc3luYy1oYW5kbGluZyBwcm9wZXJ0eSBvbiBHc3RCaW4gdG8gbGV0IGl0IG1hbmFnZQotCSAgYXN5bmMtaGFuZGxpbmcgaW5zdGVhZCBvZiB0aGUgbG9jYWwgaGFuZGxpbmcgZnJvbSB0aGUgcHJldmlvdXMKLQkgIGNvbW1pdC4gV29ya3MgYmVjYXVzZSBvZiAjMTc0YTVlIGluIGNvcmUKLQotMjAxNi0wNS0xMyAxMDoxNzozMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIHNvdXBodHRwc3JjOiByZWZhY3RvciB0byB1c2UgU291cCdzIHN5bmMgQVBJCi0JICBSZXBsYWNlIHRoZSBhc3luYyBBUEkgd2l0aCB0aGUgc3luYyBBUEkgdG8gcmVtb3ZlIGFsbCB0aGUgZXh0cmEgbWFpbmxvb3AKLQkgIGFuZCBjb250ZXh0IGhhbmRsaW5nLiBDdXJyZW50bHkgaXQgYmxvY2tzIHJlYWRpbmcgdW50aWwgJ2Jsb2Nrc2l6ZScKLQkgIGJ5dGVzIGFyZSBhdmFpbGFibGUgYnV0IHRoYXQgY2FuIGJlIGltcHJvdmVkIGJ5IHVzaW5nOgotCSAgaHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dpby91bnN0YWJsZS9HUG9sbGFibGVJbnB1dFN0cmVhbS5odG1sI2ctcG9sbGFibGUtaW5wdXQtc3RyZWFtLXJlYWQtbm9uYmxvY2tpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTM5MTEKLQotMjAxNi0wNS0xNCAwNDo1MDozNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgdGVzdHM6IHNvdXBodHRwc3JjOiByZXBsYWNlIGRlcHJlY2F0ZWQgQVBJCi0JICBBdm9pZCB1c2luZyBzb3VwX3NlcnZlcl9ydW5fYXN5bmMgYW5kIG9sZCBnZXRfcG9ydCgpIEFQSXMsCi0JICByZXBsYWNlIHdpdGggbWUgc291cF9zZXJ2ZXJfbGlzdGVuIGFuZCBnZXQgdGhlIHBvcnQgdGhyb3VnaCB0aGUKLQkgIFVSSXMgbGlzdCByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIuCi0KLTIwMTYtMDUtMTQgMTI6MzQ6MTAgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBVcGdyYWRlIGRlYnVnIG1lc3NhZ2UgdG8gZXJyb3IKLQkgIEl0IGNhdXNlcyB0aGUgZW50aXJlIHBpcGVsaW5lIHRvIGZhaWwsIGl0IHNob3VsZCBiZSBlYXNpZXIgdG8gZmluZC4KLQotMjAxNi0wNS0xNCAxODozMjo1MiArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5oOgotCSAgc3BsaXRtdXhzaW5rOiBIaWRlIGludGVybmFsIGFzeW5jIHN0YXRlIGNoYW5nZXMuCi0JICBXaGVuIHN3aXRjaGluZyBmcmFnbWVudHMsIGhpZGUgdGhlIGFzeW5jLXN0YXJ0L2FzeW5jLWRvbmUKLQkgIG1lc3NhZ2VzIGZyb20gdGhlIHBhcmVudCBiaW4sIGFzIG90aGVyd2lzZSB3ZSBzb21ldGltZXMgKHZlcnkgcmFyZWx5KQotCSAgaGFuZyBpbiBQQVVTRUQgaW5zdGVhZCBvZiByZXR1cm5pbmcgLyBjb250aW51aW5nIHRvIFBMQVlJTkcKLQkgIHN0YXRlLgotCi0yMDE2LTA1LTEzIDIxOjIwOjI4ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogUmVtb3ZlIHN0cmF5IGNhcnJpYWdlLXJldHVybiBmcm9tIGRlYnVnCi0KLTIwMTYtMDUtMTMgMTY6NDM6MjEgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICBydHA6IFNoaXAgZ3N0cnRwajJrY29tbW9uLmggZmlsZSB0byBmaXggZGlzdGNoZWNrCi0KLTIwMTUtMDQtMzAgMTQ6NDM6MDQgKzAyMDAgIEplc3BlciBMYXJzZW4gPGtub3JyLmplc3BlckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IERvIG5vdCB3cml0ZSBpbmRleCBhbmQgaGVhZGVyIGlmIGlkeCBpcyBOVUxMCi0JICBGaXhlcyBjcml0aWNhbHMgd2l0aCBlLmcuCi0JICB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MSAhIGlkZW50aXR5IGRyb3AtcHJvYmFiaWxpdHk9MS4wICEgYXZpbXV4ICEgZmFrZXNpbmsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg3MDAKLQotMjAxNi0wNS0xMiAwODo0MzozOSAtMDQwMCAgQWFyb24gQm94ZXIgPGJveGVyYWJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgcnRwajJrcGF5OiBtYW5hZ2UgVCB0aWxlIGludmFsaWRhdGlvbiBiaXQgY29ycmVjdGx5LCB1cGRhdGUgdGlsZSBpZCBpbiBoZWFkZXIgY29ycmVjdGx5LgotCSAgMS4gYWNjb3JkaW5nIHRvIFJGQywgVCBiaXQgaXMgb25seSBzZXQgd2hlbiBlaXRoZXIgdGhlIFJUUCBwYWNrZXQgb25seSBjb250YWlucyB0aGUgSjJLIG1haW4gaGVhZGVyLCBvciB0aGUgcGFja2V0IGNvbnRhaW5zIHRpbGUgcGFydHMgZnJvbSBtdWx0aXBsZSB0aWxlcy4gVGhpcyBpcyBub3cgYmVpbmcgbWFuYWdlZCBjb3JyZWN0bHkgaW4gdGhlIGNvZGUuIFRoZSBzZWNvbmQgc2NlbmFyaW8gY2Fubm90IGhhcHBlbiB3aXRoIG91ciBwYXlsb2FkZXIsIHNpbmNlIHRpbGUgaGVhZGVycyBhcmUgYWx3YXlzIHBsYWNlZCBpbiB0aGVpciBvd24gUlRQIHBhY2tldCwgYW5kIHNvIGEgcGFja2V0IGNhbm5vdCBjb250YWluIHRpbGUgcGFydHMgZnJvbSBtdWx0aXBsZSB0aWxlcy4KLQkgIEhvd2V2ZXIsIEkgaGF2ZSBhZGRlZCBjb2RlIHRvIHRyYWNrIGlmIG11bHRpcGxlIHRpbGUgcGFydHMgYXJlIGluY2x1ZGVkIGluIGEgc2luZ2xlIFJUUCBwYWNrZXQsIGluIGNhc2UgaW4gdGhlIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCBoZWFkZXIgYW5kIGRhdGEgaW4gc2FtZSBwYWNrZXQuCi0JICAyLiBPbGQgY29kZSB3b3VsZCBzZXQgdGhlIHRpbGUgaWQgdG8gemVybyBmb3IgYWxsIEoySyBwYWNrZXRzLiBUaGlzIGlzIG5vdyBzZXQgY29ycmVjdGx5IHRvIHRoZSBhcHByb3ByaWF0ZSB0aWxlIGlkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTE4NwotCi0yMDE2LTA1LTEyIDA4OjQxOjUxIC0wNDAwICBBYXJvbiBCb3hlciA8Ym94ZXJhYkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JICBydHBqMmtwYXk6IG1hbmFnZSBmcmFnbWVudGVkIGhlYWRlcnMgY29ycmVjdGx5Ci0JICBKMksgbWFpbiBoZWFkZXIgZnJhbWVudGF0aW9uIGFjcm9zcyBtdWx0aXBsZSBSVFAgcGFja2V0cyBpcyBub3cgaGFuZGxlZCBjb3JyZWN0bHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUxODcKLQotMjAxNi0wNS0xMSAxNTowNDoyNiAtMDQwMCAgQWFyb24gQm94ZXIgPGJveGVyYWJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya2NvbW1vbi5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5Lmg6Ci0JICBydHBqMms6IG1vdmUgY29tbW9uIGNvZGUgdG8gc2hhcmVkIGhlYWRlciwgY29kZSBjbGVhbiB1cAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTE4NwotCi0yMDE2LTA1LTExIDE1OjAxOjMyIC0wNDAwICBBYXJvbiBCb3hlciA8Ym94ZXJhYkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JICBydHBqMms6IHVwZGF0ZSBkb2N1bWVudGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MTg3Ci0KLTIwMTYtMDUtMTIgMTQ6NDM6NDMgKzAyMDAgIFBhdHJpY2lhIE11c2NhbHUgPHBhdHJpY2lhQGF4aXMuY29tPgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmg6Ci0JICBhdXBhcnNlOiBGaXggc3RpY2t5IGV2ZW50IG1pc29yZGVyaW5nIHdhcm5pbmcKLQkgIE1ha2Ugc3VyZSB0aGF0IHNyYyBwYWQgaGFzIGNhcHMgYmVmb3JlIHNlbmRpbmcgc2VnbWVudCBldmVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjYzNTkKLQotMjAxNi0wNS0xMSAwOToyODoxMyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRG9uJ3Qgbm90aWZ5IGFib3V0IHN0YXRzIHByb3BlcnR5IGNoYW5nZXMgd2hpbGUgdGFraW5nIHRoZSBzZXNzaW9uIGxvY2sKLQkgIFRoZSBzaWduYWwgaGFuZGxlcnMgbWlnaHQgd2FudCB0byBhY3R1YWxseSBnZXQgdGhlIHZhbHVlIG9mIHRoZSBzdGF0cwotCSAgcHJvcGVydHksIHdoaWNoIHdvdWxkIHRha2UgdGhlIHNlc3Npb24gbG9jayBhZ2FpbiBhbmQgZGVhZGxvY2suCi0JICBUaGlzIHdhcyBpbnRyb2R1Y2VkIGJ5IDJlOTYwZTcwNzUwYTBjYjdlMTExN2QwYzA5ZDA4NTk3ODY2YTI5ZWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MDI1Ci0KLTIwMTYtMDUtMDMgMTM6NTk6NTQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBpbXByb3ZlIGVkdHMgc2VnbWVudCBoYW5kbGluZyBhZnRlciBzZWVrcyBpbiBwdXNoIG1vZGUKLQkgIFByb3Blcmx5IGhhbmRsZSBlZHRzIHNlZ21lbnRzIGZvciBwdXNoLWJhc2VkIG9wZXJhdGlvbiBzZWVraW5nLgotCSAgV2Ugb25seSBzdXBwb3J0IGVkdHMgdGhhdCBhIHNpbmdsZSBzZWdtZW50IHRoYXQgaGFzIG1lZGlhIGF0IHRoZSBlbmQsCi0JICBiZWluZyBwcmVjZWVkZWQgYnkgYW55IG51bWJlciBvZiBnYXAgc2VnbWVudHMuCi0JICBUaGlzIGFsc28gYWxsb3dzIHRoZSBxdCBzZWdtZW50IHJhdGUgdG8gYmUgcmVzcGVjdGVkIGFmdGVyIHNlZWtzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NjY5Ci0KLTIwMTYtMDUtMDMgMTA6NDE6MDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwcm9wZXJseSBhY3RpdmF0ZSBzZWdtZW50IHdpdGggcmF0ZSAhPSAxLjAKLQkgIEFsc28gdXNlIHRoZSBxdCByYXRlIHRvIGlkZW50aWZ5IHRoZSBwb3NpdGlvbiB3aXRoaW4gYSBxdCBzZWdtZW50Ci0JICB0byBwcm9wZXJseSB0cmFuc2xhdGUgcGxheWJhY2sgdGltZSB0byBxdCBtZWRpYSB0aW1lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NjY5Ci0KLTIwMTYtMDUtMDMgMTE6NDU6MDEgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogRml4IHN0YWxsIHdoZW4gcmVjZWl2aW5nIGFscmVhZHkgbG9zdCBwYWNrZXQKLQkgIFdoZW4gYSBwYWNrZXQgYXJyaXZlcyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29uc2lkZXJlZCBsb3N0IGFzIHBhcnQgb2YgYQotCSAgbGFyZ2UgZ2FwIHRoZSAibG9zdCB0aW1lciIgZm9yIHRoaXMgd2lsbCBiZSBjYW5jZWxsZWQuIElmIHRoZSByZW1haW5pbmcKLQkgIHBhY2tldHMgb2YgdGhpcyBsYXJnZSBnYXAgbmV2ZXIgYXJyaXZlcywgdGhlcmUgd2lsbCBiZSBtaXNzaW5nIGVudHJpZXMKLQkgIGluIHRoZSBxdWV1ZSBhbmQgdGhlIGxvb3AgZnVuY3Rpb24gd2lsbCBrZWVwIHdhaXRpbmcgZm9yIHRoZXNlIHBhY2tldHMKLQkgIHRvIGFycml2ZSBhbmQgbmV2ZXIgcHVzaCBhbm90aGVyIHBhY2tldCwgZWZmZWN0aXZlbHkgc3RhbGxpbmcgdGhlCi0JICBwaXBlbGluZS4KLQkgIFRoZSBwcm9wb3NlZCBmaXggY29uY2lkZXJzIHBhcnRzIG9mIGEgbGFyZ2UgZ2FwIGRlZmluaXRlbHkgbG9zdCAoc2luY2UKLQkgIHRoZXkgYXJlIGNhbGN1bGF0ZWQgZnJvbSBsYXRlbmN5KSBhbmQgaWdub3JlcyB0aGUgbGF0ZSBhcnJpdmFscy4KLQkgIEluIHByYWN0aWNlIHRoZSBpc3N1ZSBpcyByYXJlIHNpbmNlIGxhcmdlIGdhcHMgYXJlIHNjaGVkdWxlZCBpbW1lZGlhdGVseSwKLQkgIGFuZCBmb3IgdGhlIHN0YWxsIHRvIGhhcHBlbiB0aGUgbGF0ZSBhcnJpdmFsIG5lZWRzIHRvIGJlIHByb2Nlc3NlZAotCSAgYmVmb3JlIHRoaXMgdGltZXMgb3V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTkzMwotCi0yMDE2LTA1LTA1IDE0OjE4OjIxICswMjAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogVGFrZSBzZXNzaW9uIGxvY2sgd2hlbiBjcmVhdGluZyBzdGF0cwotCSAgVGhlIGFjY2VzcyB0byB0aGUgc2Vzc2lvbiBoYXNoIHRhYmxlIG11c3QgaGFwcGVuIHdoaWxlIHRoZSBzZXNzaW9uIGxvY2sgaXMKLQkgIHRha2VuLCBvdGhlcndpc2UgYW5vdGhlciB0aHJlYWQgbWlnaHQgbW9kaWZ5IHRoZSBoYXNoIHRhYmxlIHdoaWxlIHdlJ3JlCi0JICBjcmVhdGluZyB0aGUgc3RhdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2MDI1Ci0KLTIwMTYtMDUtMDMgMjE6MTc6MDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1cGRhdGUgc2VnbWVudCB3aGVuIG5ldyBkdXJhdGlvbiBpcyBmb3VuZAotCSAgT3RoZXJ3aXNlIHRoZSBvbGQgc2VnbWVudCB3aWxsIGhhdmUgYSBzaG9ydGVyIHN0b3AgdGltZSBhbmQgd291bGQKLQkgIGNhdXNlIHRoZSBzdHJlYW0gdG8gZW5kIHRvbyBlYXJseS4KLQotMjAxNi0wNS0wNCAxMTozNzoyOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGRpc21lbWJlciBhY3RpdmF0ZV9zZWdtZW50IGludG8gMiBwYXJ0cwotCSAgT25lIHRoYXQgdXBkYXRlcyBhbmQgcHVzaCBhIG5ldyBzZWdtZW50LCB0aGUgb3RoZXIgd2lsbCBtb3ZlIHRoZQotCSAgc3RyZWFtIHRvIHRoZSBuZXcgc2VnbWVudCBzdGFydGluZyBwb3NpdGlvbgotCi0yMDE2LTA1LTA0IDA5OjMwOjI3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JICBkdjogVXNlIGNvcnJlY3QgcGl4ZWwtYXNwZWN0LXJhdGlvIHZhbHVlcwotCSAgVGhlIHByZXZpb3VzIG9uZXMgcmVzdWx0ZWQgaW4gb2RkIGRpc3BsYXkgYXNwZWN0IHJhdGlvcyBhbmQgd2VyZSBkaWZmZXJlbnQKLQkgIGZyb20gdGhlIG9uZXMgdXNlZCBieSBlLmcuIGZmbXBlZy4gVGhlIG5ldyBvbmVzIG5vdyByZXN1bHQgaW4gZGlzcGxheSBhc3BlY3QKLQkgIHJhdGlvcyBvZiA0OjMgYW5kIDE2OjkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTQ2Ci0KLTIwMTUtMTEtMDkgMTc6NTU6MDkgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NwbGl0bXV4LmM6Ci0JICB0ZXN0czogYWRkIHNwbGl0bXV4c3JjIHRlc3QgZm9yIG5ldyAiZm9ybWF0LWxvY2F0aW9uIiBzaWduYWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM2MjUKLQotMjAxNS0xMS0wOSAxNzo1MToxMiArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXhzcmM6IGFkZCBhIGZvcm1hdC1sb2NhdGlvbiBzaWduYWwgdGhhdCBhbGxvd3MgYnlwYXNzaW5nIHRoZSBsb2NhdGlvbiBwcm9wZXJ0eQotCSAgVGhpcyBzaWduYWwgYWxsb3dzIGEgdXNlciB0byBkaXJlY3RseSByZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZgotCSAgZmlsZXMgdG8gYmUgam9pbmVkLCBzbyB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSB0byBmb2xsb3cgdGhlCi0JICBmaWxlbmFtZSBwYXR0ZXJuIHRoYXQgdGhlICJsb2NhdGlvbiIgcHJvcGVydHkgZXhwZWN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM2MjUKLQotMjAxNi0wNS0wNCAxMToxNToyMCAtMDQwMCAgWGF2aWVyIENsYWVzc2VucyA8eGF2aWVyLmNsYWVzc2Vuc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW5rOiBGaXggZGVhZGxvY2sgY2FzZSB3aGVuIHNvdXJjZSByZWFjaGVzIEVPUwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTA3MgotCi0yMDE2LTA1LTAzIDIyOjU5OjI3IC0wNzAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBzaW1wbGlmeSBhbmQgY29ycmVjdCBoZWFkZXIgc2Nhbm5pbmcKLQkgIFRoZSB3YXYgc3BlYyB0ZWxscyB0aGF0ICdmbXQnIChhbmQgJ2JleHQnIGlmIHByZXNlbnQpIG11c3QgY29tZSBiZWZvcmUgJ2RhdGEnLgotCSAgVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgZm9yICdmbXQnIHRvIGJlIGZpcnN0LiBXZSBhbHJlYWR5IGhhZCBhIGxpc3Qgb2YgY2h1bmtzCi0JICB0byBza2lwLCBidXQgaXQgaXMgZWFzaWVyIHRvIGp1c3Qgc2tpcCBhbnkgY2h1bmsgd2hpbGUgc2Vla2luZyBmb3IgJ2ZtdCcuCi0JICBUaGlzIGZpeGVzIHJlYWRpbmcgZmlsZXMgZ2VuZXJhdGVkIGJ5IFByb1Rvb2xzLgotCi0yMDE2LTA0LTMwIDIyOjE1OjEzICswOTAwICBIeXVuanVuIEtvIDx6em9vbkBpZ2FsaWEuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaDoKLQkgIG9zeGF1ZGlvOiBTdXBwb3J0IGF1ZGlvIGRldmljZSBwcm92aWRlciBvbiBvc3gKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTMyNjUKLQotMjAxNi0wNS0wMSAxNTowOToyNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBzZXQgYXVkaW8gaGVhZGVyIHJhdGUgYWNjb3JkaW5nIHRvIGNhbGN1bGF0ZWQgYnBzIGluIHN0b3BfZmlsZQotCSAgLi4uIG5vdyB0aGF0IHNldF9maWVsZHMgaXMgbm8gbG9uZ2VyIGNhbGxlZCB0aGVyZSBieQotCSAgZTUzODYwOGIzZjkwNTM5MDAzZGUyMWMxZGIyMzhmM2M5Yjk0NmUzMAotCi0yMDE2LTA0LTI5IDE1OjA0OjExICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogU3RvcmUgdGhlIHNlZ21lbnQgc2VxdWVuY2UgbnVtYmVyIGluIHRoZSBFT1MgZXZlbnRzIGFuZCBTRUdNRU5UX0RPTkUgZXZlbnRzL21lc3NhZ2UKLQkgIEFsc28gaW5zdGVhZCBvZiBzdG9yaW5nIGl0IHBlciBzdHJlYW0sIHN0b3JlIGl0IGdsb2JhbGx5IGluIHRoZSBkZW11eGVyLiBJdCdzCi0JICB0aGUgc2FtZSBmb3IgZWFjaCBzdHJlYW0gYW55d2F5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTgwNgotCi0yMDE2LTA0LTExIDEwOjU0OjM4ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBBbHdheXMgYmluZCB0byBBTlkgd2hlbiBhZGRyZXNzIGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgYW5kIG5vdCBvbmx5IG9uIFdpbmRvd3MKLQkgIEZvciBJUHY2IGFkZHJlc3NlcywgYmluZGluZyB0byBhIG11bHRpY2FzdCBncm91cCBkb2VzIG5vdCB3b3JrIG9uIExpbnV4Ci0JICBlaXRoZXIuIEFsd2F5cyBiaW5kIHRvIEFOWSBhbmQgdGhlbiBsYXRlciBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0Njc5Ci0KLTIwMTYtMDQtMjYgMTc6MDE6NDkgKzA4MDAgIFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSAgeGltYWdldXRpbDogc2hvdWxkbid0IGltcGxlbWVudCB0cmFuc2Zvcm0gaWYgZG9uJ3Qgc3VwcG9ydCBpdAotCSAgc2hvdWxkbid0IGltcGxlbWVudCB0cmFuc2Zvcm0gaWYgZG9uJ3Qgc3VwcG9ydCBpdC4gT3IgZ3N0X2J1ZmZlcl9jb3B5X2ludG8oKQotCSAgd2lsbCBwcmludCBFUlJPUiBsb2cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1NTgzCi0KLTIwMTYtMDQtMjggMTY6MjQ6NTIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBBbGxvdyBNUEVHLTEgTGF5ZXIgMSBhbmQgMiBpbiBhZGRpdGlvbiB0byAzIGluIE1QNAotCSAgVmlhIHRoZSBNUEVHLTQgUGFydCAzIHNwZWMgd2UgY2FuIHN1cHBvcnQgdGhlIG90aGVyIGxheWVycyB0b28uCi0JICBBbHNvIGNvcnJlY3QgdGhlIHNhbXBsZXMgcGVyIGZyYW1lIGNhbGN1bGF0aW9uIGZvciBNUDMgaWYgaXQncyBNUEVHLTIgb3IKLQkgIE1QRUctMi41LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTcyNQotCi0yMDE2LTA0LTI3IDIwOjQ2OjM0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBVcGRhdGUgY2FwcyBmb3IgVENQIHdoZW5ldmVyIHRoZXkgY2hhbmdlCi0JICBXZSBvbmx5IGNoYW5nZWQgdGhlbSBmb3IgVURQIHNvIGZhciwgd2hpY2ggY2F1c2VkIHRoZSB3cm9uZyBzZXFudW0tYmFzZSBhbmQKLQkgIG90aGVyIGluZm9ybWF0aW9uIHRvIGJlIHBhc3NlZCB0byBydHBqaXR0ZXJidWZmZXIvZXRjIHdoZW4gc2Vla2luZy4gVGhpcwotCSAgdXN1YWxseSB3YXNuJ3QgdGhhdCBtdWNoIG9mIGEgcHJvYmxlbSBhcyB0aGUgY29kZSB0aGVyZSBpcyByb2J1c3QgZW5vdWdoLCBidXQKLQkgIGV2ZXJ5IG5vdyBhbmQgdGhlbiBpdCBjYXVzZXMgdXMgdG8gZHJvcCB1cCB0byAzMjc1NiBwYWNrZXRzIGJlZm9yZSB3ZQotCSAgY29udGludWUgZG9pbmcgYW55dGhpbmcgbWVhbmluZ2Z1bC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2ODkKLQotMjAxNi0wNC0yNyAyMDozMzozOCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEVuc3VyZSB0byBub3QgdGFrZSBjYXBzIHdpdGggdGhlIHdyb25nIHB0IGZvciBnZXR0aW5nIHRoZSBjbG9jay1yYXRlCi0JICBFc3BlY2lhbGx5IHRoZSBjYXBzIG9uIHRoZSBwYWQgbWlnaHQgYmUgb3V0IG9mIGRhdGUsIGFuZCB0aGUgbmV3IGNhcHMgd291bGQgYmUKLQkgIHByb3ZpZGVkIGZvciB0aGUgY3VycmVudCBwdCB2aWEgdGhlIHJlcXVlc3QtcHQtbWFwIHNpZ25hbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU2ODkKLQotMjAxNi0wNC0yNyAxODoyNzoxNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRG9uJ3QgcHJvcGFnYXRlIHNwdXJpb3VzIHN0YXRlIGNoYW5nZSByZXR1cm5zIGZyb20gaW50ZXJuYWwgZWxlbWVudHMgZnVydGhlcgotCSAgV2UgaGFuZGxlIHRoZW0gaW5zaWRlIHJ0c3BzcmMgYW5kIG92ZXJyaWRlIHRoZW0gaW4gYWxsIG90aGVyIGNhc2VzIGFueXdheSwgc28KLQkgIGRvIHRoZSBzYW1lIGZvciAiaW50ZXJuYWwiIHN0YXRlIGNoYW5nZXMgbGlrZSBQQVVTRUQtPlBBVVNFRCBhbmQKLQkgIFBMQVlJTkctPlBMQVlJTkcuCi0JICBUaGlzIGtlZXBzIHVuZXhwZWN0ZWQgTk9fUFJFUk9MTCB0byBjb25mdXNlIHN0YXRlIGNoYW5nZXMgaW4gR3N0QmluLgotCSAgU2VlIGFsc28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDUzMgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTY4OQotCi0yMDE2LTA0LTI3IDE0OjA5OjAzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBEb24ndCBvdmVycmlkZSBtYXhpbXVtIGF1ZGlvIGNodW5rIHNpemUgd2l0aCB0aGUgc2NhbGUgYWdhaW4ganVzdCBiZWZvcmUgd3JpdGluZyBpdAotCSAgc2V0X2ZpZWxkcygpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiB0aGUgYmVnaW5uaW5nLCBvdGhlcndpc2Ugd2Ugd2lsbCBuZXZlcgotCSAgcmVtZW1iZXIgdGhlIG1heGltdW0gYXVkaW8gY2h1bmsgc2l6ZSBhbmQgd3JpdGUgYSB3cm9uZyBibG9jayBhbGlnbi4uLiB3aGljaAotCSAgdGhlbiBjYXVzZXMgd3JvbmcgdGltZXN0YW1wcyBhbmQgb3RoZXIgcHJvYmxlbXMuCi0KLTIwMTYtMDQtMjcgMTM6NTM6MDAgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IEFjdHVhbGx5IHN0b3JlIHRoZSBsYXJnZXN0IGF1ZGlvIGNodW5rIHNpemUgZm9yIHRoZSBWQlIgY2FzZSBvZiBNUDIvTVAzCi0JICAzZWEzMzhjZTI3MWUxZjZhOTZkMmVkNDlkNDQ3MmIwOTFmNmY4YjdlIGNoYW5nZWQgYXZpbXV4IHRvIGRvIHRoYXQsIGJ1dCBpdAotCSAgbmV2ZXIgYWN0dWFsbHkga2VwdCB0cmFjayBvZiB0aGUgbWF4IGF1ZGlvIGNodW5rIGZvciBNUDMgYW5kIE1QMi4gVGhlc2UgYXJlCi0JICBrbm93aW5nIHRoZSBoZHIuc2NhbGUgb25seSBhZnRlciBwYXJzaW5nIHRoZSBmcmFtZXMgaW5zdGVhZCBvZiBhdCBzZXRjYXBzCi0JICB0aW1lLgotCi0yMDE2LTA0LTI1IDE1OjAzOjE0ICswMjAwICBNYXRzIExpbmRlc3RhbSA8bWF0c2xtQGF4aXMuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBBbGxvdyBzZXR0aW5nICJzb2NrZXQtdjYiIHdpdGhvdXQgc2V0dGluZyAic29ja2V0IiB0b28KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ4OTcKLQotMjAxNi0wNC0yMiAxNTowMjoxNiArMDEwMCAgTWFyaW8gU2FuY2hleiBQcmFkYSA8bWFyaW9AZW5kbGVzc20uY29tPgotCi0JKiBleHQvdnB4L2dzdHZweGVuYy5jOgotCSAgdnB4ZW5jOiBQcm9wZXJseSBoYW5kbGUgZnJhbWVzIHdpdGggdG9vIGxvdyBkdXJhdGlvbgotCSAgV2hlbiBhIGZyYW1lJ3MgZHVyYXRpb24gaXMgdG9vIGxvdywgY2FsbGluZyBnc3RfdXRpbF91aW50NjRfc2NhbGUoKQotCSAgdG8gc2NhbGUgaXRzIHZhbHVlIGNhbiByZXN1bHQgaW50byBpdCBiZWluZyB0cnVuY2F0ZWQgdG8gemVybywgd2hpY2gKLQkgIHdpbGwgY2F1c2UgdGhlIHZweCBlbmNvZGVyIHRvIHJldHVybiBhbiBWUFhfQ09ERUNfSU5WQUxJRF9QQVJBTSBlcnJvcgotCSAgd2hlbiB0cnlpbmcgdG8gZW5jb2RlLgotCSAgVG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nLCB3ZSBzaW1wbHkgaWdub3JlIHRoZSBkdXJhdGlvbiB3aGVuCi0JICBlbmNvZGluZyBpZiBpdCBiZWNvbWVzIHplcm8gYWZ0ZXIgc2NhbGluZywgbG9nZ2luZyBhIHdhcm5pbmcgbWVzc2FnZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUzOTEKLQotMjAxNi0wNC0yMiAxNTo0ODowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IGRlc2NyaXB0aW9uIG9mIGxpbmVhciBpbnRlcmxhY2luZyBtZXRob2QKLQotMjAxNi0wNC0yMSAxNDowODoxOSAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2OiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgZG8gbm90IGdldCBhbnkgQ29sbGVjdERhdGEgaW4gaGFuZGxlX2J1ZmZlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTMyMAotCi0yMDE2LTA0LTExIDIyOjQxOjIwICswOTAwICBTZXVuZ2hhIFlhbmcgPHNoLnlhbmdAbGdlLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBEbyBub3QgdXNlIHVucmVsaWFibGUgZnJhbWVyYXRlCi0JICB0aW1lc2NhbGUvMSBpcyB1bnJlbGlhYmxlIHZhbHVlIGZvciBmcmFtZXJhdGUuIER1ZSB0byBkb3duc3RyZWFtCi0JICBlbGVtZW50IHVzdWFsbHkgdXNlIGZyYW1lcmF0ZSBnZW5lcmF0ZWQgYnkgcXRkZW11eCwgbGV0IGl0IGJlIG9taXR0ZWQKLQkgIHVudGlsIHRoZSBmcmFtZXJhdGUgY2FuIGJlIHJlbGlhYmx5IGNhbGN1bGF0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0NzMzCi0KLTIwMTYtMDQtMjEgMTI6NTM6MzMgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBSZXZlcnQgInF0ZGVtdXg6IGV4cG9zZSBzdHJlYW1zIHdpdGggZmlyc3QgbW9vZiBmb3IgZnJhZ21lbnRlZCBmb3JtYXQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGQ4YmI2Njg3ZWEyNTE1NzBjMzMxMDM4Mjc5YTQzZDQ0ODE2N2Q2YWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0NzMzCi0KLTIwMTYtMDItMDkgMTc6MTc6MDkgKzAwMDAgIEFsZXggQXNobGV5IDxidWd6aWxsYUBhc2hsZXktZmFtaWx5Lm5ldD4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzdXBwb3J0IHNlZWtpbmcgb2YgQ0VOQyBlbmNyeXB0ZWQgc3RyZWFtcwotCSAgV2hlbiBwbGF5aW5nIGEgc3RyZWFtIHRoYXQgaGFzIGJlZW4gcHJvdGVjdGVkIGJ5IERBU0ggQ0VOQywgcGxheWJhY2sKLQkgIHdpbGwgZmFpbCBpZiBhIHNlZWsgaXMgcGVyZm9ybWVkLiBRdGRlbXV4IHByb2R1Y2VzIHRoZSBlcnJvciAic3RyZWFtCi0JICBpcyBwcm90ZWN0ZWQgdXNpbmcgY2VuYywgYnV0IG5vIGNlbmMgcHJvdGVjdGlvbiBzeXN0ZW0gaW5mb3JtYXRpb24KLQkgIGhhcyBiZWVuIGZvdW5kIiBhbmQgcGxheWJhY2sgc3RvcHMuCi0JICBUaGUgcHJvYmxlbSBpcyB0aGF0IGdzdF9xdGRlbXV4X3Jlc2V0KCkgZ2V0cyBjYWxsZWQgYXMgcGFydCBvZiB0aGUKLQkgIEZMVVNIIGR1cmluZyBhIHNlZWsuIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIHByb3RlY3Rpb25fc3lzdGVtX2lkcwotCSAgYXJyYXkuIFdoZW4gZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3Byb3RlY3RlZF9jYXBzKCkgaXMgY2FsbGVkIGFmdGVyIHRoZQotCSAgc2VlayBoYXMgY29tcGxldGVkLCB0aGUgcHJvdGVjdGlvbl9zeXN0ZW1faWRzIGFycmF5IGlzIGVtcHR5IGFuZAotCSAgcXRkZW11eCBpcyB1bmFibGUgdG8gY3JlYXRlIHRoZSBjb3JyZWN0IG91dHB1dCBjYXBzIGZvciB0aGUgcHJvdGVjdGVkCi0JICBzdHJlYW0uCi0JICBUaGlzIGNvbW1pdCBjaGFuZ2VzIGl0IHRvIG9ubHkgZnJlZSB0aGUgcHJvdGVjdGlvbl9zeXN0ZW1faWRzIG9uCi0JICBoYXJkIHJlc2V0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE3ODcKLQotMjAxNi0wNC0xOCAxNDozMzoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICB1ZHBzcmM6IGFkZCAicmV0cmlldmUtc2VuZGVyLWFkZHJlc3MiIHByb3BlcnR5Ci0JICBUaGlzIGFsbG93cyBkaXNhYmxpbmcgb2Ygc2VuZGVyIGFkZHJlc3MgcmV0cmlldmFsLCB3aGljaCBtaWdodAotCSAgYmUgdXNlZnVsIGluIGNlcnRhaW4gc2NlbmFyaW9zLCBsaWtlIHdoZW4gdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQsCi0JICBvciB0aGUgc2VuZGVyIGFkZHJlc3MgaXMgbm90IG9mIGludGVyZXN0IChlLmcuIHdoZW4gcmVjZWl2aW5nIGFuCi0JICBNUEVHLVRTIHN0cmVhbSkuIERpc2FibGluZyBzZW5kZXIgYWRkcmVzcyByZXRyaWV2YWwgaW4gdGhvc2UKLQkgIGNhc2VzIGNhbiBoYXZlIG1pbm9yIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYzMzIzCi0KLTIwMTUtMTEtMjYgMTM6MTU6MDYgKzAxMDAgIERpbWl0cmlvcyBLYXRzYXJvcyA8cGF0Y2hlcndvcmtAZ21haWwuY29tPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyOiBDaGFuZ2Ugd2FybmluZyBoYW5kbGluZyB0byBicmVhayBpbmZpbml0ZSBtZXNzYWdlIGxvb3AKLQkgIHY0bDJzcmMgY2FuIGNhdXNlIGFuICJpbmZpbml0ZSBtZXNzYWdlIGxvb3AiIHdoZW4gYSBiYXNlIGNvbnRyb2wgZXhwb3NlZCBhcyBhCi0JICBwcm9wZXJ0eSBpcyBub3QgcHJvdmlkZWQgYnkgdGhlIGRldmljZS4gSW4gdGhlc2UgY2FzZXMsIGlmIGluIHRoZSB3YXJuaW5nIG1lc3NhZ2UKLQkgIGhhbmRsaW5nIGZvciB0aGUgYnVzLCB0aGUgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRSogY2F0ZWdvcnkgb2YgZnVuY3Rpb25zIGFyZSB1c2VkLAotCSAgdGhlIHNyYyBsb29rdXAgY2F1c2VzIGEgbmV3IHdhcm5pbmcgdG8gYmUgcG9zdGVkIG9uIHRoZSBidXMsIGNhdXNpbmcgYSBsb29wLgotCSAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSB3YXJuaW5nIGZvciB0aGVzZSBjb250cm9scyBzbyB0aGV5IGFyZSBub3QgcG9zdGVkIG9uIHRoZSBidXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4NzAzCi0KLTIwMTYtMDQtMTUgMTA6NDQ6MDIgLTA0MDAgIFhhdmllciBDbGFlc3NlbnMgPHhhdmllci5jbGFlc3NlbnNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwaXRtdXhzaW5rOiBBdm9pZCBjcmVhdGluZyBzbWFsbCBmaWxlIGF0IEVPUwotCSAgV2hlbiBFT1MgaXMgcmVhY2hlZCwgdGhlIGN1cnJlbnQgZmlsZSBnZXQgY2xvc2VkIGFuZCB0aGUgbGFzdAotCSAgR09QIGluIHRoZSBtcSB3YXMgd3JpdHRlbiBpbiBhIG5ldyBmaWxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTA3MgotCi0yMDE2LTA0LTE1IDE5OjU5OjE1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBTMTYgdXNlcyBTMzIgdGVtcG9yYXJ5IGJ1ZmZlcnMsIGZsb2F0L2RvdWJsZSB0aGVpciBvd24gdHlwZQotCSAgTWFrZSBzdXJlIHRvIGFsbG9jYXRlIG5vdCBvbmx5IGEgUzE2IGJ1ZmZlciBmb3IgUzE2IGJ1dCBhIHR3aWNlIGFzIGJpZyBvbmUgdG8KLQkgIGhvbGQgUzMyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTExNgotCi0yMDE2LTA0LTE2IDAyOjE3OjI2ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgUmV2ZXJ0ICJwdWxzZXNpbms6IHVuY29yayBpZiBuZWVkZWQgdXBvbiBjb21taXQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDBkZDQ2YWNjZjZkMjgyZmYwNzA2NTg1MmJkOTFjODVjNzhhZjMzOTQuCi0JICBXaXRoIHNvbWUgYXVkaW9zaW5rcywgc3RhcnRpbmcgdGhlIHJpbmdidWZmZXIgb24gdGhlIGZpcnN0IGNvbW1pdAotCSAgY2F1c2VzIGF1ZGlvIGdsaXRjaGVzIGF0IHN0YXJ0dXAgYnkgc3RhcnRpbmcgdG8gb3V0cHV0IHNlZ21lbnRzCi0JICBmcm9tIHRoZSByaW5nYnVmZmVyIGJlZm9yZSBpdCBoYXMgYmVlbiBmaWxsZWQgLyBmdWxseSBwcmVyb2xsZWQuIFRoaXMKLQkgIGRvZXNuJ3QgdXN1YWxseSBoYXBwZW4gd2l0aCBwdWxzZXNpbmsgYmVjYXVzZSB3ZSBtYXAgdGhlIHB1bHNlYXVkaW8KLQkgIHJpbmdidWZmZXIgZGlyZWN0bHksIGJ1dCB3ZSBzaG91bGQga2VlcCB0aGluZ3MgY29uc2lzdGVudCB3aXRoCi0JICBvdGhlciBzaW5rcyB3aXRoIHJlZ2FyZHMgdG8gc3RhcnR1cCBsYXRlbmN5LCBwbHVzIGl0IGdpdmVzIG1vcmUKLQkgIGhlYWR3YXkgdG8gYXZvaWQgZ2xpdGNoaW5nLCBzaG91bGQgdGhlIGluaXRpYWwgMm5kIHNlZ21lbnQgdGFrZQotCSAgbW9yZSB0aGFuIDEwbXMgdG8gZ2VuZXJhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3MDc2Ci0KLTIwMTYtMDQtMTUgMDA6NDY6NTYgLTA3MDAgIEFsZWl4IENvbmNoaWxsbyBGbGFxdcOpIDxhbGVpeEBvYmxvbmcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhZGQgc3J0cCByb2xsb3ZlciBjb3VudGVycyBmcm9tIG1pa2V5IGNyeXB0byBzZXNzaW9ucwotCSAgVGhlIHNlcnZlciBjYW4gc2VuZCBtdWx0aXBsZSBjcnlwdG8gc2Vzc2lvbnMsIG9uZSBmb3IgZWFjaCBTU1JDIHdpdGggaXRzCi0JICBvd24gcm9sbG92ZXIgY291bnRlci4gV2UgcGFyc2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgcGFzcyBpdCB0byB0aGUgU1JUUAotCSAgZGVjb2RlciB2aWEgdGhlICJyZXF1ZXN0LWtleSIgc2lnbmFsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU0MAotCi0yMDE2LTA0LTE1IDE0OjM1OjA3ICswMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEZpeCBkZWJ1ZyBvdXRwdXQgd2hlbiByZXN5bmNpbmcKLQkgIERvbid0IG91dHB1dCB0aGUgcG9pbnRlciB2YWx1ZSBvZiB0aGUgdGltZSgpIGZ1bmN0aW9uIGFzIGEgdGltZXN0YW1wCi0JICBieSB1c2luZyB0aGUgY29ycmVjdCB2YXJpYWJsZS4KLQkgIEZpeGVzIGJ1aWxkIG9uIFJhc3BiZXJyeSBQaSAzLgotCi0yMDE2LTA0LTE1IDExOjM2OjM2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXBodHRwY2xpZW50c2luazogSWYgbm8gcHJveHkgaXMgc2V0IGJ5IHByb3BlcnRpZXMsIHVzZSB0aGUgZGVmYXVsdCBsaWJzb3VwIHByb3h5IHJlc29sdmVyCi0JICBUaGF0IGlzLCB1c2Ugd2hhdGV2ZXIgc3lzdGVtIHNldHRpbmdzIHRoZXJlIG1pZ2h0IGV4aXN0LiBUaGlzIGlzIHRoZSBzYW1lCi0JICBiZWhhdmlvdXIgd2UgdXNlIGluIHRoZSBIVFRQIHNvdXJjZS4KLQotMjAxNi0wNC0xNCAxMDowMToyOCArMDEwMCAgSnVsaWVuIElzb3JjZSA8ai5pc29yY2VAc2Ftc3VuZy5jb20+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2ZjJkMjA5IHRvIGFjMmY2NDcKLQotMjAxNi0wNC0xMyAxODo0NTowNyArMDEwMCAgRGFtaWFuIFppb2JybyA8ZGFtaWFuQHhtZW1lbnRvaXQuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuaDoKLQkgIHNwbGl0bXV4c2luazogQWRkIG1heF9maWxlc19udW1iZXIgcHJvcGVydHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ2MTIKLQotMjAxNi0wNC0xMyAxMDo1NzowMyAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogZHJvcCByZWZlcmVuY2UgdG8gdmlkZW9taXhlciAyCi0JICBGaXggYSBzbWFsbCBncmFtbWFyIG1pc3Rha2Ugb24gIm92ZXJsYXllZCIgd2hpbGUgYXQgaXQuCi0KLTIwMTYtMDQtMTMgMDk6NTc6MTYgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSAgeGltYWdlOiBJbml0aWFsaXplIGFsbCBmaWVsZHMgaW4gdGhlIG1ldGEgZXhwbGljaXRseQotCSAgVGhlIG1ldGEgaXMgbm90IGFsbG9jYXRlZCB3aXRoIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQgdG8gemVyb2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDkwMgotCi0yMDE2LTA0LTEyIDA5OjQxOjAwICswMDAwICBQYW9sbyBQZXR0aW5hdG8gPHBwZXR0aW5hQGNpc2NvLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IEZvcndhcmQgc3RpY2t5IGV2ZW50cyBvbiBidWZmZXIgbGlzdHMgdG9vLCBub3Qgb25seSBvbiBidWZmZXJzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0OTMzCi0KLTIwMTYtMDQtMTIgMTU6MDE6MjggKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IERyYWluIHRoZSBmaWVsZCBoaXN0b3J5IGlmIHRoZSBjYXBzIGFyZSBjaGFuZ2luZwotCSAgT3RoZXJ3aXNlIHdlIHdpbGwgdXNlIGZpZWxkcyBmcm9tIHRoZSBvbGQgY2FwcyB3aXRoIGV2ZXJ5dGhpbmcgc2V0IHVwIGZvciB0aGUKLQkgIG5ldyBjYXBzLCBjYXVzaW5nIGNyYXNoZXMgYW5kIHdvcnNlLgotCSAgQWxzbyBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgc2FtZSBjYXBzIGFyZSBzZXQgdHdpY2UuCi0KLTIwMTYtMDQtMTIgMTU6MDA6MzEgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEluc3RlYWQgb2YgY29uZnVzaW5nIGNyYXNoZXMgbGF0ZXIsIGp1c3QgZXJyb3Igb3V0IGltbWVkaWF0ZWx5IGlmIG1hcHBpbmcgYSB2aWRlbyBmcmFtZSBmYWlscwotCSAgVGhpcyBwcm9iYWJseSBzdGlsbCBjcmFzaGVzIGJ1dCBhdCBsZWFzdCB3ZSBnZXQgc29tZSBoaW50IGFib3V0IHdoYXQgZ29lcwotCSAgd3JvbmcgaW5zdGVhZCBvZiByYW5kb20gYmVoYXZpb3VyIGxhdGVyLgotCi0yMDE2LTA0LTEyIDExOjM4OjUxICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGNoZWNrIHN0cmVhbSBpcyBhdmFpbGFibGUgaW4gUElGRiBwYXJzZXIKLQkgIHF0ZGVtdXgtPnN0cmVhbXMgaXMgYW4gYXJyYXksIGl0IHdpbGwgbmV2ZXIgZXZhbHVhdGUgdG8gdHJ1ZSB3aGVuIGNvbXBhcmluZwotCSAgdG8gTlVMTC4gSW5zdGVhZCB3ZSB3YW50IHRvIGNoZWNrIHRoZSBudW1iZXIgb2Ygc3RyZWFtcyB0byBtYWtlIHN1cmUgdGhlCi0JICBzdHJlYW0gaXMgYXZhaWxhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzYxNAotCSAgQ0lEIDEzNTgzODkKLQotMjAxNi0wNC0xMiAxMTozNzozNiArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBSZXZlcnQgInF0ZGVtdXg6IHJlZHVuZGFudCBjaGVjayBpbiBQSUZGIHBhcnNlciIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNDFlMTA1MjRmM2JhYmRkOTJhYWM4YzhjOWQ1YjljZGYxODRjMmQ0ZS4KLQotMjAxNi0wNC0xMiAxMTowNTo1MCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZWR1bmRhbnQgY2hlY2sgaW4gUElGRiBwYXJzZXIKLQkgIHF0ZGVtdXgtPnN0cmVhbXMgaXMgYW4gYXJyYXkgb2Ygc2l6ZSBHU1RfUVRERU1VWF9NQVhfU1RSRUFNUywgaXQgd2lsbCBuZXZlcgotCSAgZXZhbHVhdGUgdG8gdHJ1ZSB3aGVuIGNvbXBhcmluZyB0byBOVUxMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzYxNAotCSAgQ0lEIDEzNTgzODkKLQotMjAxNi0wNC0xMiAxMTo1NjowOCArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGF2b2lkIGxlYWtpbmcgR1ZhbHVlcwotCSAgdW5zZXQgdGhlIEdWYWx1ZSBpZiB3ZSBkb24ndCB1c2UgaXQgYW55IG1vcmUgdG8gYXZvaWQgbGVha3MuCi0KLTIwMTYtMDQtMTIgMTA6MTU6MzkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBGaXggcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3RzX2RpZmYoKSBmaWxsIGxldmVsIGNhbGN1bGF0aW9uCi0JICBUaGUgaGVhZCBvZiB0aGUgcXVldWUgaXMgdGhlIG9sZGVzdCBwYWNrZXQgKGFzIGluIGxvd2VzdCBzZXFudW0pLCB0aGUgdGFpbCBpcwotCSAgdGhlIG5ld2VzdCBwYWNrZXQuIFRvIGNhbGN1bGF0ZSB0aGUgZmlsbCBsZXZlbCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSB0YWlsLWhlYWQKLQkgIHdoaWxlIGNvbnNpZGVyaW5nIHdyYXBhcm91bmRzLiBOb3QgdGhlIG90aGVyIHdheSBhcm91bmQuCi0JICBPdGhlciBjb2RlIGlzIGFscmVhZHkgZG9pbmcgdGhpcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ4ODkKLQotMjAxNi0wNC0xMSAxMDo0NDo1NiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JICBydHBtYW5hZ2VyOiBJdCdzIEdTVF9MSUJTLCBub3QgR1NUX0xJQlNfTElCUwotCi0yMDE2LTA0LTExIDA4OjMzOjE3ICswOTAwICBTZXVuZ2hhIFlhbmcgPHNoLnlhbmdAbGdlLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggcGFyc2luZyBzZWdtZW50IGR1cmF0aW9uIG9mIGVtcHR5IGVkaXQgbGlzdCBib3gKLQkgIEZvciBlbXB0eSBlZGl0IGxpc3QsIHNlZ21lbnQtZHVyYXRpb24gaW4gZWRpdCBsaXN0IGJveCBzaG91bGQgbm90IGJlCi0JICB1c2VkIGZvciBzZWdtZW50IGV2ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDg3MAotCi0yMDE2LTA0LTA4IDEzOjA1OjU3ICswMjAwICBOaWNvbGEgTXVyaW5vIDxuaWNvbGEubXVyaW5vQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IG1ha2UgdGltZWNvZGVzY2FsZSBjb25maWd1cmFibGUKLQkgIEluIHNvbWUgdXNlIGNhc2VzIHRoZSBkZWZhdWx0IHRpbWVjb2Rlc2NhbGUgd2lsbCBwcm9kdWNlIGJsb2NrcyB3aXRoIHRoZSBzYW1lIHRpbWVzdGFtcAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDc2OQotCi0yMDE2LTA0LTA3IDEzOjAxOjUyICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdGVyYnVmZmVyOiBNb3ZlIGFzc2VydGlvbiB0byB0aGUgcmlnaHQgbG9jYXRpb24KLQkgIFdlIHNob3VsZG4ndCBoYXZlICJsYXRlIiBsb3N0IHRpbWVycyBhdCB0aGF0IHBvaW50Ci0KLTIwMTYtMDMtMDIgMTQ6MjU6MjQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBTcGVlZCB1cCBsb3N0IHRpbWVvdXQgaGFuZGxpbmcKLQkgIFdoZW4gZG93bnN0cmVhbSBibG9ja3MsICJsb3N0IiB0aW1lcnMgYXJlIGNyZWF0ZWQgdG8gbm90aWZ5IHRoZQotCSAgb3V0Z29pbmcgdGhyZWFkIHRoYXQgcGFja2V0cyBhcmUgbG9zdC4KLQkgIFRoZSBwcm9ibGVtIGlzIHRoYXQgZm9yIGhpZ2ggcGFja2V0LXJhdGUgc3RyZWFtcywgd2UgbWlnaHQgZW5kIHVwIHdpdGgKLQkgIGEgYmlnIGxpc3Qgb2YgbG9zdCB0aW1lb3V0cyAoaGFkIGEgdXNlLWNhc2Ugd2l0aCB+MTAwMC4uLikuCi0JICBUaGUgcHJvYmxlbSBpc24ndCBzbyBtdWNoIHRoZSBhbW91bnQgb2YgbG9zdCB0aW1lb3V0cyB0byBoYW5kbGUsIGJ1dAotCSAgcmF0aGVyIHRoZSB3YXkgdGhleSB3ZXJlIGhhbmRsZWQuIEFsbCB0aW1lcnMgd291bGQgZmlyc3QgYmUgaXRlcmF0ZWQsCi0JICB0aGVuIHRoZSBvbmUgc2VsZWN0ZWQgd291bGQgYmUgaGFuZGxlZCAuLi4gdG8gcmUtaXRlcmF0ZSB0aGUgbGlzdCBhZ2Fpbi4KLQkgIEFsbCBvZiB0aGlzIGlzIGJlaW5nIGRvbmUgd2hpbGUgdGhlIGpidWYgbG9jayBpcyB0YWtlbiwgd2hpY2ggaW4gc29tZSB1c2UtY2FzZXMKLQkgIHdvdWxkIHJldHVybiBpbiBob2xkaW5nIHRoYXQgbG9jayBmb3IgMTBzLi4uIGJsb2NraW5nIGFueSBidWZmZXJzIGZyb20KLQkgIGJlaW5nIGFjY2VwdGVkIGluIGlucHV0Li4uIHdoaWNoIHdvdWxkIHRoZW4gYXJyaXZlIGxhdGUgLi4uIHdoaWNoIHdvdWxkCi0JICBjcmVhdGUgcGxlbnR5IG9mIGxvc3QgdGltZXJzIC4uLiB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc2FtZSBpc3N1ZS4KLQkgIEluIG9yZGVyIHRvIGF2b2lkIHRoYXQgc2l0dWF0aW9uLCBoYW5kbGUgdGhlIGxvc3QgdGltZXJzIGltbWVkaWF0ZWx5IHdoZW4KLQkgIGl0ZXJhdGluZyB0aGUgbGlzdCBvZiBwZW5kaW5nIHRpbWVycy4gVGhpcyBtb2RpZmllcyB0aGUgY29tcGxleGl0eSBmcm9tCi0JICBhIHF1YWRyYXRpYyB0byBhIGxpbmVhciBjb21wbGV4aXR5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjk4OAotCi0yMDE2LTAzLTAyIDE0OjIzOjAxICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogRG9uJ3QgY3JlYXRlIGxvc3QgZXZlbnRzIGlmIHdlIGRvbid0IG5lZWQgdGhlbQotCSAgV2hlbiAiZG8tbG9zdCIgaXMgc2V0IHRvIEZBTFNFIHdlIGRvbid0IHVzZS9zZW5kIHRoZSBsb3N0IGV2ZW50cy4KLQkgIEluIHRoYXQgY2FzZSwgZG9uJ3QgY3JlYXRlIHRoZW0gdG8gc3RhcnQgd2l0aCA6KQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjk4OAotCi0yMDE2LTAzLTAyIDEzOjU3OjA3ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogQWRkIHRyYWNpbmcgb2YgbG9jayB1c2FnZQotCSAgSGVscHMgd2l0aCBkZWJ1Z2dpbmcgbG9jayB1c2FnZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjk4OAotCi0yMDE2LTAyLTEwIDE5OjU2OjU5ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vwcm92aWRlci5jOgotCSAgdjRsMjogRG9uJ3QgbGVhayB2NGwyIG9iamVjdHMgYW5kIHByb3BzIG9uIHByb2JlIGVycm9ycwotCi0yMDE2LTA0LTA0IDE3OjQyOjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IGFkZCB1bml0IHRlc3QgZm9yIGpwZWcgZGVwYXlsb2FkZXIgcGFja2V0IGxvc3MgaGFuZGxpbmcKLQkgIE1ha2Ugc3VyZSBpdCBhbHdheXMgb3V0cHV0cyBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgdmFsaWQKLQkgIEpQRUcgZnJhbWUsIGllLiBzdGFydHMgd2l0aCBhbiBTT0kgbWFya2VyIGFuZCBlbmRzIHdpdGggYW4gRU9JCi0JICBtYXJrZXIuCi0KLTIwMTYtMDMtMTUgMDM6MjU6MjYgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkgIHJ0cGpwZWdkZXBheTogRG9uJ3Qgc2VuZCBpbnZhbGlkIGZyYW1lcyBkb3duc3RyZWFtIGFmdGVyIHBhY2tldCBsb3NzIG9yIGEgRElTQ09OVAotCSAgQWZ0ZXIgY2xlYXJpbmcgdGhlIGFkYXB0ZXIgZHVlIHRvIGEgRElTQ09OVCwgYXMgbWlnaHQgaGFwcGVuIHdoZW4gc29tZSBwYWNrZXQocykKLQkgIGhhdmUgYmVlbiBsb3N0LCB0aGUgZGVwYXlsb2FkZXIgd2FzIHB1c2hpbmcgZGF0YSBpbnRvIHRoZSBhZGFwdGVyICh3aGljaCBoYWQgbm8KLQkgIGhlYWRlciBkdWUgdG8gdGhlIGNsZWFyKSwgY3JlYXRpbmcgYSBoZWFkZXJsZXNzIGZyYW1lIG91dCBvZiBpdCwgYW5kIHNlbmRpbmcgaXQKLQkgIGRvd25zdHJlYW0uIFRoZSBkb3duc3RyZWFtIGRlY29kZXIgd291bGQgdGhlbiB1c3VhbGx5IGlnbm9yZSBpdDsgdW5sZXNzIHRoZXJlCi0JICB3ZXJlIGxvdHMgb2YgRElTQ09OVHMgZnJvbSB0aGUgaml0dGVyYnVmZmVyIGluIHdoaWNoIGNhc2UgdGhlIGRlY29kZXIgd291bGQgcmVhY2gKLQkgIGl0cyBtYXhfZXJyb3JzIGxpbWl0IGFuZCB0aHJvdyBhbiBlbGVtZW50IGVycm9yLiBOb3cgd2UganVzdCBkaXNjYXJkIHRoYXQgZGF0YS4KLQkgIEl0IGlzIHByb2JhYnkgbm90IHdvcnRoIHRyeWluZyB0byBzYWx2YWdlIHRoaXMgZGF0YSBiZWNhdXNlIG5vbi1wcm9ncmVzc2l2ZQotCSAganBlZyBkb2VzIG5vdCBkZWdyYWRlIGdyYWNlZnVsbHkgYW5kIG1ha2VzIHRoZSB2aWRlbyB1bndhdGNoYWJsZSBldmVuIHdpdGgKLQkgIGxvdyBwYWNrZXQgbG9zcyBzdWNoIGFzIDMtNSUuCi0KLTIwMTYtMDEtMDUgMTY6MTU6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEFkZCBSRkM3MjczIG1lZGlhIGNsb2NrIGhhbmRsaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMjU5Ci0KLTIwMTUtMDctMTAgMDk6NDQ6MTUgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogUElGRiBib3ggZGV0ZWN0aW9uIGFuZCBwYXJzaW5nIHN1cHBvcnQKLQkgIFRoZSBQSUZGIGRhdGEgaXMgc3RvcmVkIGluIGEgY3VzdG9tIFVVSUQgYm94IHdoaWNoIGlzIHBhcnNlZCBhbmQgdGhlCi0JICBjcnlwdG9faW5mbyBvZiB0aGUgZWxlbWVudCBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LiBUaGlzIGFsbG93cwotCSAgZG93bnN0cmVhbSBkZWNyeXB0b3JzIHRvIHByb2Nlc3MgYW5kIGRlY3J5cHQgdGhlIHByb3RlY3RlZCBjb250ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzYxNAotCi0yMDE2LTA0LTAxIDEyOjE1OjA1ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JICBydHB2b3JiaXNkZXBheTogcmVtb3ZlIGRlYWQgY29kZQotCSAgcGF5bG9hZF9idWZmZXIgaGFzbid0IGJlZW4gYXNzaWduZWQgYSB2YWx1ZSBiZWZvcmUgdGhlIGp1bXBzIHRvCi0JICBzd2l0Y2hfZmFpbGVkIG9yIHBhY2tldF9zaG9ydC4gU28gdGhlIHZhbHVlIG11c3QgYmUgTlVMTC4gTm8gbmVlZAotCSAgdG8gdW5tYXAgYW5kIHVucmVmLgotCSAgQ0lEICMxMzE2NDc2Ci0KLTIwMTYtMDMtMzEgMTQ6NTc6MjAgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgcnRwaDI2M3BheTogZml4IGxlYWsKLQkgIEZyZWUgbWVtb3J5IG9mIGN1cnJlbnQgbWFjcm9ibG9jayBvbmNlIGl0IGlzbid0IG5lZWRlZCBzbyBpdCBpc24ndCBsZWFrZWQKLQkgIGJ5IHRoZSBjYWxsIG9mIHRoZSBnc3RfcnRwX2gyNjNfcGF5X0JfbWJmaW5kZXIgZnVuY3Rpb24uCi0JICBpZiAoIShtYWMgPSBnc3RfcnRwX2gyNjNfcGF5X0JfbWJmaW5kZXIgKGNvbnRleHQsIGdvYiwgbWFjLCBtYikpKSB7Ci0JICBDSUQgMTIxMjE1NgotCi0yMDE2LTAzLTMxIDAyOjE1OjA0ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4OiBIYW5kbGUgYSBoYW5nIGRyYWluaW5nIG91dCBhdCBFT1MKLQkgIE1ha2Ugc3VyZSB0aGF0IGFsbCBkYXRhIGlzIGRyYWluZWQgb3V0IHdoZW4gdGhlIHJlZmVyZW5jZSBwYWQKLQkgIGdvZXMgRU9TLiBGaXhlcyBhIHByb2JsZW0gd2hlcmUgZGF0YSB0aGF0IGFycml2ZXMgb24gb3RoZXIKLQkgIHBhZHMgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBwYWQgZmluaXNoZXMgY2FuIHN0YWxsIGZvcmV2ZXIgYW5kCi0JICBuZXZlciBwYXNzIEVPUy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM3MTEKLQotMjAxNi0wMy0xOCAxNTo0NTowMSAtMDQwMCAgWGF2aWVyIENsYWVzc2VucyA8eGF2aWVyLmNsYWVzc2Vuc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW5rOiBGaXggb2NjYXNpb25hbCBkZWFkbG9jayB3aGVuIGVuZGluZyBmaWxlIHdpdGggc3VidGl0bGUKLQkgIERlYWRsb2NrIG9jY3VycyB3aGVuIHNwbGl0dGluZyBmaWxlcyBpZiBvbmUgc3RyZWFtIHJlY2VpdmVkIG5vIGJ1ZmZlciBkdXJpbmcKLQkgIHRoZSBmaXJzdCBHT1Agb2YgdGhlIG5leHQgZmlsZS4gVGhhdCBjYW4gaGFwcGVuIGluIHRoYXQgc2NlbmFyaW8gZm9yIGV4YW1wbGU6Ci0JICAxKSBUaGUgZmlyc3QgR09QIG9mIHZpZGVvIGlzIGNvbGxlY3RlZCwgaXQgaGFzIGEgZHVyYXRpb24gb2YgMTBzLgotCSAgbWF4X2luX3J1bm5pbmdfdGltZSBpcyBzZXQgdG8gMTBzLgotCSAgMikgT3RoZXIgc3RyZWFtcyBjYXRjaHVwIGFuZCB3ZSByZWNlaXZlIHRoZSBmaXJzdCBzdWJ0aXRsZSBidWZmZXIgYXQgdHM9MCBhbmQKLQkgIGhhcyBhIGR1cmF0aW9uIG9mIDFtaW4uCi0JICAzKSBXZSByZWNlaXZlIHRoZSAybmQgc3VidGl0bGUgYnVmZmVyIHdpdGggYSB0cz0xbWluLiBpbl9ydW5uaW5nX3RpbWUgaXMgc2V0IHRvCi0JICAxbWluLiBUaGF0IGJ1ZmZlciBpcyBibG9ja2VkIGluIGhhbmRsZV9tcV9pbnB1dCgpIGJlY2F1c2UKLQkgIG1heF9pbl9ydW5uaW5nX3RpbWUgaXMgc3RpbGwgMTBzLgotCSAgNCkgU2luY2UgYWxsIGluX3J1bm5pbmdfdGltZSBhcmUgbm93ID4gMTBzLCBtYXhfb3V0X3J1bm5pbmdfdGltZSBpcyBub3cgc2V0IHRvCi0JICAxMHMuIFRoYXQgZmlyc3QgR09QIGdldHMgcmVjb3JkZWQgaW50byB0aGUgZmlsZS4gVGhlIG11eGVyIHBvcCBidWZmZXJzIG91dAotCSAgb2YgdGhlIG1xLCB3aGVuIGl0IHRyaWVzIHRvIHBvcCBhIDJuZCBzdWJ0aXRsZSBidWZmZXIgaXQgYmxvY2tzIGJlY2F1c2UgdGhlCi0JICBHc3REYXRhUXVldWUgaXMgZW1wdHkuCi0JICA1KSBBIDJuZCBHT1Agb2YgdmlkZW8gaXMgY29sbGVjdGVkIGFuZCBoYXMgYSBkdXJhdGlvbiBvZiAxMHMgYXMgd2VsbC4KLQkgIG1heF9pbl9ydW5uaW5nX3RpbWUgaXMgbm93IDIwcy4gU2luY2Ugc3VidGl0bGUncyBpbl9ydW5uaW5nX3RpbWUgaXMgYWxyZWFkeQotCSAgMW1pbiwgdGhhdCBHT1AgaXMgYWxyZWFkeSBjb21wbGV0ZS4KLQkgIDYpIEJ1dCBsZXQncyBzYXkgd2Ugb3ZlcnJhbiB0aGUgbWF4IGZpbGUgc2l6ZSwgd2UgdGh1cyBzZXQgc3RhdGUgdG8KLQkgIFNQTElUTVVYX1NUQVRFX0VORElOR19GSUxFIG5vdy4gQXMgc29vbiBhcyBhIGJ1ZmZlciB3aXRoIHRzID4gMTBzIChlbmQgb2YKLQkgIHByZXZpb3VzIEdPUCkgYXJyaXZlcyBpbiBoYW5kbGVfbXFfb3V0cHV0KCksIEVPUyBldmVudCBpcyBzZW50IGRvd25zdHJlYW0KLQkgIGluc3RlYWQuIEJ1dCBzaW5jZSB0aGUgc3VidGl0bGUgcXVldWUgaXMgZW1wdHksIHRoYXQncyBuZXZlciBnb2luZyB0bwotCSAgaGFwcGVuLiBQaXBlbGluZSBpcyBub3cgZGVhZGxvY2tlZC4KLQkgIFRvIGZpeCB0aGlzIHNpdHVhdGlvbiB3ZSBoYXZlIHRvOgotCSAgLSBTZW5kIGEgZHVtbXkgZXZlbnQgdGhyb3VnaCB0aGUgcXVldWUgdG8gd2FrZXVwIG91dHB1dCB0aHJlYWQuCi0JICAtIFVwZGF0ZSBvdXRfcnVubmluZ190aW1lIHRvIGF0IGxlYXN0IG1heF9vdXRfcnVubmluZ190aW1lIHNvIGl0IHNlbmRzIEVPUy4KLQkgIC0gUmVzcGVjdCB0aW1lIG9yZGVyLCBzbyB3ZSBzZXQgb3V0X3J1bm5pbmdfdGltPW1heF9pbl9ydW5uaW5nX3RpbWUgYmVjYXVzZQotCSAgdGhhdCdzIGJpZ2dlciB0aGFuIHByZXZpb3VzIGJ1ZmZlciBhbmQgc21hbGxlciB0aGFuIG5leHQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNzExCi0KLTIwMTUtMTEtMTcgMTg6MTc6MzUgKzAxMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBBZGQgbmV3IHNpZ25hbCAnb24tYXBwLXJ0Y3AnCi0JICBTaW1pbGFyIHRvIHRoZSAnb24tZmVlZGJhY2stcnRjcCcgc2lnbmFsLCBidXQgZW1pdHRlZCBmb3IgUlRDUCBBUFAKLQkgIHBhY2tldHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMjE3Ci0KLTIwMTYtMDMtMjQgMTU6NTc6MTEgKzA5MDAgIE1pbmphZSBLaW0gPG5hdGUua2ltQGxnZS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwbWFuYWdlcjogU2V0IHRvIGluaXRpYWwgdmFsdWUgZm9yICdudHBucycgaW4gZ2V0X2N1cnJlbnRfdGltZXMoKQotCSAgSW5pdGlhbGl6ZSAibnRwbnMiIHZhcmlhYmxlIHRvIC0xIGFzIHRoZSBPRSBjb21waWxlciBmb3Igc29tZSByZWFzb24gZG9lc24ndAotCSAgcmVhbGl6ZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYWxsIGNvZGUgcGF0aHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MTE5Ci0KLTIwMTYtMDEtMzEgMTE6MDg6MzggKzExMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSAgcnRwanBlZ3BheTogQWxsb3cgZGlmZmVyZW50IHF1YW50aXphdGlvbiB0YWJsZXMgZm9yIGNvbXBvbmVudHMgMiBhbmQgMwotCSAgUkZDIDI0MzUgbWVudGlvbnMgaW4gc2VjdGlvbiA0LjEgdGhhdCBVL1YgdXNlIHRhYmxlIG51bWJlciAxLCBidXQgdGhpcyBzZWVtcwotCSAganVzdCBsaWtlIGFuIGV4YW1wbGUuIFNvbWUgZW5jb2RlcnMgYXJlIG5vdCBmb2xsb3dpbmcgdGhhdCBhbmQgdGhlcmUgc2VlbXMgdG8KLQkgIGJlIG5vIHJlYXNvbiB0byByZWplY3QgdGhlaXIgc3RyZWFtcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjEzNDUKLQotMjAxNi0wMy0yNCAxOToyMzoxMiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvdnB4L2dzdHZweGRlYy5jOgotCSAgdnB4ZGVjOiBVc2UgdGhyZWFkcyBvbiBtdWx0aS1jb3JlIHN5c3RlbXMKLQkgIFRoaXMgaXMgYSByZWRvIG9mIGNvbW1pdCBiODQ4YzFiNmZmZDFlNTA4MjI4ODIwYTAxM2Y5NGZiNDQ1ZTQ3NzdmLiBUaGUKLQkgIGNvZGUgd2FzIGxvc3Qgd2hlbiB0aGUgZWxlbWVudHMgd2hlcmUgcG9ydGVkIHRvIHVzZSBhIGJhc2VjbGFzcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQxNjkKLQotMjAxNi0wMi0yOSAyMzo0MDowMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BsaXRtdXguYzoKLQkgIHNwbGl0bXV4c2luazogb25seSB0cnkgdG8gY3JlYXRlIGludGVybmFsIHNpbmsgaWYgaXQgZG9lc24ndCBleGlzdAotCSAgVGhpcyBhbGxvd3Mgc3BsaXRtdXhzaW5rIHRvIGJlIHJldXNlZCBhZnRlciBiZWluZyBwdXQgdG8gTlVMTC4KLQkgIFRlc3QgaW5jbHVkZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI4OTMKLQotMjAxNS0xMC0wMSAxMzo0MToyMyArMDIwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogcHJvYmUgYWxsIGNvbG9yc3BhY2Ugc3VwcG9ydGVkIGJ5IGRldmljZQotCSAgQSBkZXZpY2UgY2FuIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjb2xvcnNwYWNlIGZvciBhIGdpdmVuIGltYWdlCi0JICBkaW1lbnNpb24gYW5kIHBpeGVsIGZvcm1hdC4gU28gd2UgaGF2ZSB0byBwcm9iZSBhbGwgdGhlIHN1cHBvcnRlZAotCSAgY29sb3JzcGFjZSBhbmQgbm90IG9ubHkgcmVseSBvbiB0aGUgZGVmYXVsdCBvbmUuIE90aGVyd2lzZSB3ZSBjb3VsZCBlbmQKLQkgIHVwIHdpdGggbmVnb3RpYXRpb24gZmFpbHVyZSBpZiB0aGUgY2FwcyBjb2xvcmltZXRyeSBmaWVsZCBkb24ndCBtYXRjaAotCSAgdGhlIHY0bDIgZGV2aWNlIGRlZmF1bHQgb25lIGV2ZW4gaWYgdGhlIHY0bDIgY291bGQgc3VwcG9ydCBzdWNoCi0JICBjb2xvcmltZXRyeS4KLQkgIFRoaXMgcGF0Y2ggZW5hYmxlIHByb2JpbmcgaWYgY29sb3JzcGFjZSBmb3IgYm90aCBjYXB0dXJlIGFuZCBvdXRwdXQKLQkgIGRldmljZS4gSXQgcmVhbGx5IG1ha2VzIHNlbnNlIGZvciBvdXRwdXQgZGV2aWNlIHNpbmNlIHRoZSBjb2xvcnNwYWNlCi0JICBzaGFsbCBiZSBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBhIGxpdHRsZSBsZXNzIGZvciBjYXB0dXJlIGRldmljZQotCSAgd2hpY2gsIGF0IHRoZSBtb21lbnQsIHNoYWxsIHByb3ZpZGUgdGhlIGNvbG9yc3BhY2U7IGllOiB0aGUgdjRsMgotCSAgc3BlY2lmaWNhdGlvbiBzZWVtcyB0byBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdCBhIGNhcHR1cmUKLQkgIGRldmljZSBjb3VsZCBkbyBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCi0JICBBcyBhIHNpZGUgZWZmZXQsIHByb2JpbmcgdGFrZXMgc29tZSB0aW1lcyBhbmQgc28gc2xpZ3RobHkgZGVsYXkgdjRsMgotCSAgaW5pdGlhbGl6YXRpb24uIE5vdGUgdGhhdCB0aGlzIHBhdGNoIG9ubHkgcHJvYmUgY29sb3JzcGFjZSBhbmQgbm90IGFsbAotCSAgY29sb3JzcGFjZSwgbWF0cml4LCB0cmFuc2ZlciBhbmQgcmFuZ2UgY29tYmluYXRpb24gdG8gYXZvaWQgdGFraW5nIHRvbwotCSAgbXVjaCB0aW1lLCBlc3BlY2lhbGx5IHdpdGggbG93LXNwZWVkIGRldmljZXMgYXMgZnVsbCBwcm9iaW5nIGRvIDE3ODIKLQkgIGlvY3RsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkzNwotCi0yMDE2LTAzLTI0IDE2OjIxOjU2ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZkZW11eC5jOgotCSAgY2hlY2s6IEZpeCBpbmRlbnRhdGlvbgotCi0yMDE2LTAzLTI0IDE2OjIwOjM5ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZkZW11eC5jOgotCSAgdGVzdHM6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCi0KLTIwMTYtMDMtMTYgMjA6MjY6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgZGVpbnRlcmxlYXZlOiBSZXR1cm4gdGhlIGN1cnJlbnQgY2FwcyBvbiB0aGUgc3JjcGFkcyBvbiBjYXBzIHF1ZXJpZXMKLQkgIEl0J3Mgbm90IGxpa2Ugd2UgY291bGQgYWNjZXB0IGFueSBvdGhlciBjYXBzIGhlcmUuIFRoZSBjYXBzIGFyZSBkZWNpZGVkIGJ5IHRoZQotCSAgdXBzdHJlYW0gY2FwcyBldmVudC4KLQkgIEFsc28ga2VlcCB0aGUgZmlsdGVyIG9yZGVyIGludGFjdCB3aGVuIGZpbHRlcmluZyB0aGUgcmVzdWx0cyBhZ2FpbnN0IHRoZQotCSAgZmlsdGVyIGNhcHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMzI2Ci0KLTIwMTYtMDMtMjQgMTU6MTQ6MjMgKzA5MDAgIEppbW15IE9obiA8eW9uZ2ppbi5vaG5AbGdlLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggcXRkZW11eCBtZW1vcnkgbGVhayBpbiBzcmNfY29udmVydCBmdW5jdGlvbgotCSAgSWYgd2UgZG9uJ3QgZmluZCB0aGUgaW5kZXggb2YgdGhlIHNhbXBsZSBjb3JyZWN0bHkgaW4gc3JjX2NvbnZlcnQgZnVuY3Rpb24sCi0JICB3ZSBoYXZlIHRvIHVucmVmIGFib3V0IHRoZSBxdGRlbXV4IGJlZm9yZSByZXR1cm5pbmcgdmFsdWUuCi0JICBTbywgSSBoYXZlIG1vZGlmeSBpdCBhYm91dCBpbnN0ZWFkIHBhc3MgcXRkZW11eCBhcyBhIHBhcmFtZXRlciBpbnRvCi0JICBzcmNfY29udmVydCBmdW5jdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM5NzMKLQotMjAxNi0wMy0yMiAxMzoxNToyMCArMDkwMCAgSmltbXkgT2huIDx5b25namluLm9obkBsZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEFkZCBjaGVjayBjb25kaXRpb24gZm9yIGZhaWwgY2FzZSBpbiBnZXRfZHVyYXRpb24gZnVuY3Rpb24KLQkgIEN1cnJlbnRseSwgZ2V0X2R1cmF0aW9uIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm4gdGhlIFRSVUUgZXZlbiB0aG91Z2gKLQkgIGl0IGNhbid0IGJlIHNldCBkdXJhdGlvbiBjb3JyZWN0bHkuIFNvLCB3ZSBuZWVkIHRvIGFkZCB0aGUgZWxzZSBjb25kaXRpb24KLQkgIGFib3V0IHRoZSBmYWlsIGNhc2UuIEFsc28sIHdlIGFscmVhZHkgc2V0IHRoZSBHU1RfQ0xPQ0tfVElNRV9OT05FCi0JICBpbiB0aGlzIGZ1bmN0aW9uLiBTbyBJIGhhdmUgbW9kaWZ5IGl0IHdoaWNoIGlzIHJlbGF0ZWQgY29kZSBpbiBzb21lCi0JICBmdW5jdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM5NjgKLQotMjAxNi0wMy0yMSAxMDoxMToyMyArMDkwMCAgSmltbXkgT2huIDx5b25namluLm9obkBsZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IE1vZGlmeSBkYXRhIHR5cGUgb2YgZHVyYXRpb24gaW4gaGFuZGxlX3NyY19xdWVyeSBmdW5jdGlvbgotCSAgRGF0YSB0eXBlIG9mIGR1cmF0aW9uIG5lZWQgdG8gbW9kaWZ5IGZyb20gZ3VpbnQ2NCB0byBHc3RDbG9ja1RpbWUKLQkgIGZvciBjb25zaXN0ZW5jeSBpbiBoYW5kbGVfc3JjX3F1ZXJ5IGZ1bmN0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mzk2NQotCi0yMDE2LTAzLTE4IDE0OjQwOjU4ICswMjAwICBWaXZpYSBOaWtvbGFpZG91IDx2aXZpYUBhaGlydS5ldT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBBZGRlZCB1bml0IHRlc3RzIGZvciBmaWVsZD1hdXRvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzODY5Ci0KLTIwMTYtMDMtMTcgMjE6MjE6MDIgKzAyMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQHRvb2xzb25haXIuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSAgZGVpbnRlcmxhY2U6IEFkZGVkICJhdXRvIiBmaWVsZHMgbW9kZQotCSAgVGhlICJhdXRvIiBmaWVsZHMgbW9kZSB3aWxsIGRldGVjdCB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZnJhbWVyYXRlcyBhbmQKLQkgIHdpbGwgZGVjaWRlIHRvIGRlaW50ZXJsYWNlIGFsbCBvciBvbmx5IHRvcCBmaWVsZHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzODY5Ci0KLTIwMTYtMDMtMTYgMjA6MTc6NTUgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBkb24ndCBlbWl0IHBhZC1hZGRlZCB1bnRpbCBjYXBzIGFyZSByZWFkeQotCSAgSW4gb3RoZXIgd29yZHMsIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyBzaG91bGQgbmV2ZXIgcmV0dXJuIE5VTEwKLQkgIGluIGEgcGFkLWFkZGVkIGNhbGxiYWNrIGZyb20gdGhlIGRlbXV4ZXIuCi0JICBBZGRlZCB0ZXN0cyBmb3IgdGhlIHR3byBzcGVjaWFsIGNhc2VzIHdpdGggQUFDIGFuZCBILjI2NCB3aGVyZSB0aGlzCi0JICB3b3VsZCBoYXBwZW4gZXZlcnkgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjM3ODAKLQotMjAxNi0wMy0wNCAxMDozMDoxMiArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvb3ZlcmxheS5jOgotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZXh0L3RhZ2xpYi9nc3RhcGV2Mm11eC5jYzoKLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0c2JjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzZGVidWcuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHBsdWdpbi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RvcC5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJhZGlvYWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzdHJlYWsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzcmMuYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2xpbWl0ZXIuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmM6Ci0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwTDI0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwTDI0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFjM3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2MWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwa2x2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwa2x2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdHJlYW1kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdHJlYW1wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cXVldWUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb21lZGlhbi5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOgotCSogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3Jtc2luay5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICBnb29kOiB1c2UgbmV3IGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMwNzYKLQotMjAxNi0wMy0wNCAwOTo0Mjo0NCArMDEwMCAgRGF2aWQgQnVjaG1hbm4gPGRhdmlkLmJ1Y2htYW5uQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmM6Ci0JICBmbHZtdXg6IFRlc3QgdG8gdmVyaWZ5IGZsdm11eCBoYW5kbGVzIERUUyB3aXRoIEdTVF9DTE9DS19USU1FIE5PTkUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMDcKLQotMjAxNS0xMS0wNCAxNDo1MToxOSArMDkwMCAgSmloYWUgWWkgPGppaGFlLnlpQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhdm9pZCBwb3RlbnRpYWxseSBvdmVyZmxvd2luZyBleHByZXNzaW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3NTY5Ci0KLTIwMTYtMDMtMjIgMTA6NDM6NDUgKzA5MDAgIEppbW15IE9obiA8eW9uZ2ppbi5vaG5AbGdlLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgdGhlIGZ1bmN0aW9uIHRvIGdldCBjaGFubmVscyBhbmQgc2FtcGxlIHJhdGUgZm9yIEFBQwotCSAgQWRkIGFhY19nZXRfY2hhbm5lbHMgYW5kIHNhbXBsZV9yYXRlIGZ1bmN0aW9uIHRvIGdldCB0aGVzZSB2YWx1ZSBmb3IKLQkgIEFBQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkxMTAKLQotMjAxNi0wMy0yNCAxMzozMzowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjguMCA9PT0KLQotMjAxNi0wMy0yNCAxMjoyNzozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuOC4wCi0KLTIwMTYtMDMtMjQgMTI6MDI6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTYtMDMtMTYgMjA6MTg6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgZGVpbnRlcmxlYXZlOiBVc2UgR3N0SXRlcmF0b3IgZm9yIGl0ZXJhdGluZyBhbGwgcGFkcyBpbnN0ZWFkIG9mIG1hbnVhbGx5IGl0ZXJhdGluZyB0aGVtIHdoaWxlIGhvbGRpbmcgdGhlIG9iamVjdCBsb2NrIGFsbCB0aGUgdGltZQotCSAgRG9pbmcgcXVlcmllcyB3aGlsZSBob2xkaW5nIHRoZSBvYmplY3QgbG9jayBpcyBhIGJpdCBkYW5nZXJvdXMsIGFuZCBpbiB0aGlzCi0JICBjYXNlIGNhdXNlcyBkZWFkbG9ja3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzMzI2Ci0KLTIwMTYtMDMtMTcgMjA6NTM6MjcgKzAyMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQHRvb2xzb25haXIuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBGaXggdHlwbyB0byBub3QgY2hhbmdlIHRoZSBpbnB1dCBjYXBzIGJ1dCBvdXIgZmlsdGVyZWQgY2FwcwotCSAgQ2hhbmdpbmcgdGhlIGlucHV0IGNhcHMgYW5kIG5vdCB1c2luZyB0aGVtIGFueW1vcmUgYWZ0ZXJ3YXJkcyBpcyB1c2VsZXNzLCBhbmQKLQkgIGl0IGJyZWFrcyBuZWdvdGlhdGlvbiBpbiBwaXBlbGluZXMgbGlrZToKLQkgIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhICJ2aWRlby94LXJhdyxmcmFtZXJhdGU9MjUvMSxpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIgIQotCSAgZGVpbnRlcmxhY2UgZmllbGRzPWFsbCAhICJ2aWRlby94LXJhdyxmcmFtZXJhdGU9NTAvMSxpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSIgIQotCSAgZmFrZXNpbmsKLQotPT09IHJlbGVhc2UgMS43LjkxID09PQotCi0yMDE2LTAzLTE1IDEyOjA0OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMS43LjkxCi0KLTIwMTYtMDMtMTUgMTE6NTM6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNi0wMy0xNSAxMTo0MToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vaHUucG86Ci0JKiBwby9zci5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTYtMDMtMTUgMDM6MjY6MTQgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cG1hbmFnZXI6IFNvbWUgY29tbWVudCBhbmQgZG9jdW1lbnRhdGlvbiBjbGFyaWZpY2F0aW9ucy9maXhlcwotCi0yMDE2LTAzLTEzIDEwOjMzOjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgUmV2ZXJ0ICJmbGFjcGFyc2U6IHB1c2ggdGFncyBpbiBwcmVfcHVzaF9mcmFtZSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNDA2NWZjYjgwYTQ5OTI0YjcwZjBjOGZjMTU5ZGVjMGZmNDc5NDNhMS4KLQkgIGZsYWNwYXJzZSBzaG91bGQgbm90IHB1c2ggdGFncyBieSBpdHNlbGYsIHRoZSBiYXNlIGNsYXNzIGlzIGdvaW5nIHRvIGRvIHRoYXQKLQkgIHdoaWxlIHByb3Blcmx5IG1lcmdpbmcgaW4gdXBzdHJlYW0gdGFncy4gSXQganVzdCBkaWRuJ3QgYmVjYXVzZSBvZiBhIGJ1ZyBpbgotCSAgdGhlIGJhc2UgY2xhc3MsIHdoaWNoIHdhcyBoaWRkZW4gYnkgdGhpcyBjb21taXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYzNTUzCi0KLTIwMTYtMDItMjUgMDU6MTc6NTEgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9kYm9vbGh1ZmYuYzoKLQkqIGdzdC9ydHAvZGJvb2xodWZmLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5jOgotCSAgd2luMzI6IERvbid0IHVzZSBfX2F0dHJpYnV0ZV9fIG9uIE1TVkMKLQkgIFVzZSBNU1ZDLWVxdWl2YWxlbnRzIGZvciBhbGlnbm1lbnQgYW5kIHBhY2tpbmcgY29tcGlsZXIgZGlyZWN0aXZlcyB3aGVuIGJ1aWxkaW5nCi0JICBvbiBNU1ZDCi0KLTIwMTYtMDItMjUgMDU6MTY6NDIgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSAgd2luMzI6IERvbid0IHRyeSB0byBpbmNsdWRlIHhtYXRoLmggb24gbmV3ZXIgVmlzdWFsIFN0dWRpbwotCi0yMDE2LTAyLTI1IDA1OjE2OjA5ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOgotCSAgZ3N0IEZhY3RvciBvdXQgZW5kaWFuLW9yZGVyIFJHQiBmb3JtYXRzCi0JICBNU1ZDIHNlZW1zIHRvIGlnbm9yZSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIGluc2lkZSBzdGF0aWMgcGFkCi0JICB0ZW1wbGF0ZSBtYWNyb3MuCi0KLTIwMTYtMDMtMDggMTc6Mzc6MTcgKzAxMDAgIFRob21hcyBSb29zIDx0aG9tYXMucm9vc0BpbmR1c3Ryb25pYy5kZT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyY3Rzb3VuZHNpbms6IFNldHRpbmcgdm9sdW1lIHNob3VsZCBub3QgdW5tdXRlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MTA2Ci0KLTIwMTYtMDMtMDggMTM6NTc6MjQgKzAxMDAgIFRob21hcyBSb29zIDx0aG9tYXMucm9vc0BpbmR1c3Ryb25pYy5kZT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyY3Rzb3VuZHNpbms6IEZpeCB2b2x1bWUgcmVzZXQgb24gdW5tdXRlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MTA2Ci0KLTIwMTYtMDMtMDggMTM6MDM6NTUgKzAxMDAgIEFsYmFuIEJlZGVsIDxhbGJhbi5iZWRlbEBhdmlvbmljLWRlc2lnbi5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogZml4IGNhcHR1cmUgd2l0aCBiYXllciBmb3JtYXRzIG90aGVyIHRoYW4gYmdncgotCSAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9jYXBzX2luZm8oKSBhbHdheXMgcmV0dXJuIFY0TDJfUElYX0ZNVF9TQkdHUjgKLQkgIGZvciBhbGwgYmF5ZXIgZm9ybWF0cy4gVGhpcyBpcyBvYnZpb3VzbHkgYnJva2VuIGlmIHRoZSBkZXZpY2UgdXNlCi0JICBhbm90aGVyIG9yZGVyaW5nLiBGaXggdGhpcyBieSBwcm9wZXJseSByZWFkaW5nIHRoZSBmb3JtYXQgcGFyYW1ldGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzMxOAotCi0yMDE2LTAzLTA3IDEwOjI4OjA2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVzZXQgcGVuZGluZyBzZWdtZW50IGlmIHdlIGFyZSBhbHJlYWR5IHB1c2hpbmcgb25lCi0JICBXaGVuIHVwc3RyZWFtIGlzIHJ1bm5pbmcgaW4gYnl0ZXMgaW4gcHVzaC1tb2RlLCBxdGRlbXV4IHdpbGwKLQkgIGNvbnZlcnQgc2Vla3MgZnJvbSB0aW1lIHRvIGJ5dGVzIGFuZCBzZW5kIGl0IHVwc3RyZWFtLiBVcHN0cmVhbQotCSAgZWxlbWVudCB3aWxsIHBlcmZvcm0gYSBieXRlIHNlZWsgYW5kIHNlbmQgYSBieXRlIHNlZ21lbnQgdG8gcXRkZW11eAotCSAgdGhhdCB3aWxsIGNvbnZlcnQgaXQgdG8gdGltZSBhbmQgcHVzaCBpdCBkb3duc3RyZWFtLgotCSAgVGhlcmUgaXMsIGhvd2V2ZXIsIHRoZSBwZW5kaW5nX3NlZ21lbnQgdmFyaWFibGUgdGhhdCBzdG9yZXMgYSBuZXcKLQkgIHNlZ21lbnQgZXZlbnQgdG8gYmUgcHVzaGVkIGJlZm9yZSB0aGUgbmV4dCBkYXRhLiBXaGVuIGhhbmRsaW5nIHNlZWtzCi0JICBhcyBtZW50aW9uZWQgYWJvdmUgdGhpcyB2YXJpYWJsZSB3YXMgYmVpbmcgaWdub3JlZCBhbmQsIGlmIGl0IGNvbnRhaW5lZAotCSAgc29tZSBzZWdtZW50IGV2ZW50LCBpdCB3b3VsZCBvdmVycmlkZSB0aGUgb25lIHJlc3VsdGluZyBmcm9tIHRoZSBzZWVrLgotCSAgVGhpcyB3b3VsZCByZXN0b3JlIGEgcHJldmlvdXMgc2VnbWVudCBhbmQgd291bGQgY2F1c2UgdGhlIHNlZWsgc2VnbWVudAotCSAgdG8gYmUgZGlzY2FyZGVkIGRvd25zdHJlYW0uCi0JICBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgaXNzdWUgYnkgdW5yZWZpbmcgYW55IHBlbmRpbmcgc2VnbWVudCBhcyB0aGUKLQkgIHNlZWsgZnJvbSB1cHN0cmVhbSBzaG91bGQgY29udGFpbiB0aGUgbGF0ZXN0IG9uZSB0aGF0IHNob3VsZCBiZQotCSAgdXNlZCwgYXMgcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMxNjUKLQotMjAxNi0wMy0wNyAxMDoyNzo0MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHJ1biBnc3QtaW5kZW50Ci0JICBPdGhlcndpc2UgY29tbWl0cyB3aWxsIGZhaWwgd2l0aCBvdXIgaW5kZW50IGNoZWNrIGhvb2sKLQotMjAxNi0wMy0wNCAxNTowOTo0NSArMDEwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBmaXggY29sb3JpbWV0cnkgZm9yIE5WMTIKLQkgIFJlcGxpY2F0ZSBWNEwyX01BUF9RVUFOVElaQVRJT05fREVGQVVMVCBtYWNybyBiZWhhdmlvci4KLQkgIEF0ICN2NGwgaXQgd2FzIGRlc2NyaWJlZCB0aGF0IGRvY3VtZW50YXRpb24gbWlnaHQgYmUgd3JvbmcgYW5kIHRoYXQKLQkgIHdlIHNob3VsZCB0cnVzdCB0aGlzIG1hY3JvIGluc3RlYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyNTI5Ci0KLTIwMTYtMDMtMDQgMTQ6MDc6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IEZpeCBtdWx0aWNhc3QgZ3JvdXAgam9pbmluZyB3aXRoIHByb3ZpZGVkIHNvY2tldHMgb24gV2luZG93cwotCSAgT24gV2luZG93cyB0aGUgc29ja2V0IHdpbGwgYmUgYm91bmQgdG8gQU5ZIGluc3RlYWQgb2YgdGhlIG11bHRpY2FzdCBncm91cCwKLQkgIGFzIGJpbmRpbmcgdG8gYSBtdWx0aWNhc3QgZ3JvdXAgZG9lcyBub3Qgd29yay4gV2hpY2ggd291bGQgbWVhbiB0aGF0IHdlCi0JICBvdmVycmlkZSBzcmMtPmFkZHIgdG8gYmVjb21lIEFOWSBhbmQgd29uJ3QgYXV0b21hdGljYWxseSBqb2luIGEgbXVsdGljYXN0Ci0JICBncm91cCBhbnltb3JlIG9uIFdpbmRvd3MuCi0JICBPbiBMaW51eCB3ZSB3b3VsZCBhdXRvbWF0aWNhbGx5IGpvaW4gYSBtdWx0aWNhc3QgZ3JvdXAsIGtlZXAgaXQgY29uc2lzdGVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMwOTMKLQotMjAxNi0wMy0wMiAxMzoxMzoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBSZXZlcnQgInJ0cGppdHRlcmJ1ZmZlcjogZG9uJ3QgZm9yZ2V0IHRvIHVubG9jayBtdXRleCBpbiBlcnJvciBjb2RlIHBhdGggaW4gdHdvIGNhc2VzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBhN2ZiN2I1MzU5MmQ4N2Y3OTgzNTQ0ZGViYjc0ZDM2NGZjMzI1N2FkLgotCSAgVGhlIG11dGV4IGlzIHRha2VuIGJ5IHRoZSBjYWxsZXIsIHdlIHNob3VsZCBrZWVwIGl0IGxvY2tlZCB3aGVuIHJldHVybmluZyBzbwotCSAgdGhlIGNhbGxlciBjYW4gdW5sb2NrIGl0IGFnYWluLgotCi0yMDE2LTAzLTAxIDE1OjAxOjIyICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBwdXNoIHRhZ3MgaW4gcHJlX3B1c2hfZnJhbWUKLQkgIFB1c2ggYSB0YWcgZXZlbnQgYmVmb3JlIHByZS1yb2xsIGlmIHdlIGhhdmUgdGFncy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI2NjAKLQotPT09IHJlbGVhc2UgMS43LjkwID09PQotCi0yMDE2LTAzLTAxIDE4OjE1OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjcuOTAKLQotMjAxNi0wMy0wMSAxNzowMzo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vdHIucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE2LTAzLTAxIDE2OjUzOjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9iZy5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNi0wMy0wMSAxNDoxNDowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGRvbid0IGZvcmdldCB0byB1bmxvY2sgbXV0ZXggaW4gZXJyb3IgY29kZSBwYXRoIGluIHR3byBjYXNlcwotCi0yMDE2LTAyLTI5IDEwOjEwOjI0ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiByZW1vdmUgaW1wb3NzaWJsZSBjb25kaXRpb24KLQkgIEl0IGlzIGltcG9zc2libGUgZm9yIGEgZ3VpbnQgdG8gaGF2ZSBhIG5lZ2F0aXZlIHZhbHVlLCBubyBuZWVkIHRvIGNoZWNrIGZvcgotCSAgdGhpcy4gSW50cm9kdWNlZCBpbiBjb21taXQgNjg2MWQxMWM0OWVhMGYzMGQyNDMyY2Y0ZWJmNjEwOGJjODk4OTdmMQotCSAgQ0lEIDEzNTQ1MDkKLQotMjAxNi0wMi0yOCAxMDoxMjozNiArMDEwMCAgUGV0ciBWaWt0b3JpbiA8ZW5jdWtvdUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IEZpeCBzYW1wbGUgcGlwZWxpbmUKLQkgIFVzZSB0aGUgem9yZGVyIHBhZCBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgdGhlIHNlbWl0cmFuc3BhcmVudAotCSAgdmlkZW8gaXMgb24gdG9wIG9mIHRoZSBiYWNrZ3JvdW5kLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjgwOQotCi0yMDE2LTAyLTI4IDEzOjQyOjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmd2b2x1bWUuYzoKLQkgIHJndm9sdW1lOiBtYWtlIHRhZyBsaXN0IHdyaXRhYmxlIGJlZm9yZSBtb2RpZnlpbmcgaXQKLQkgIE1ha2luZyB0aGUgZXZlbnQgaXRzZWxmIHdyaXRhYmxlIGlzIG5vdCBlbm91Z2gsIGl0IHdvbid0IG1ha2UKLQkgIHRoZSBhY3R1YWwgdGFnbGlzdCBpbiB0aGUgZXZlbnQgd3JpdGFibGUgYXMgd2VsbC4gSW5zdGVhZCwganVzdAotCSAgbWFrZSBhIGNvcHkgb2YgdGhlIHRhZ2xpc3QgYW5kIHRoZW4gY3JlYXRlIGEgbmV3IHRhZyBldmVudCBmcm9tCi0JICB0aGF0IGlmIHJlcXVpcmVkLCByZXBsYWNpbmcgdGhlIG9sZCBvbmUuIEJlZm9yZSB3ZSB3b3VsZAotCSAgaW5hZHZlcnRlbnRseSBtb2RpZnkgdGFnbGlzdHMgdXBzdHJlYW0gZWxlbWVudHMgbWlnaHQgc3RpbGwKLQkgIGJlIGhvbGRpbmcgb24gdG8uIEFkZCB1bml0IHRlc3QgZm9yIHRoaXMgYXMgd2VsbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI3OTMKLQotMjAxNi0wMi0yOCAxMzowMTozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogUHJvcGVybHkgZXJyb3Igb3V0IGlmIGJpbmRpbmcgdGhlIFVEUCBzb2NrZXRzIGZhaWxzCi0JICB1ZHBzcmMgaXMgbm90IHJldHVybmluZyB1cyBhIHNvY2tldCBpbiB0aGF0IGNhc2UuCi0KLTIwMTYtMDItMjcgMjA6MzM6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgIGdvb206IFVzZSBnb29tX3NldF9yZXNvbHV0aW9uKCkgaW5zdGVhZCBvZiByZWNyZWF0aW5nIHRoZSBnb29tIGluc3RhbmNlIHdoZW4gdGhlIHJlc29sdXRpb24gY2hhbmdlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2Mjc2NQotCi0yMDE2LTAyLTI3IDIwOjMyOjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBSZXZlcnQgImdvb206IEluaXRpYWxpemUgdGhlIGdvb20gc3RydWN0IG9ubHkgb25jZSB3ZSBrbm93IHdpZHRoL2hlaWdodCBhbmQgcmVjcmVhdGUgaXQgaWYgdGhvc2UgY2hhbmdlIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBjYzZlMTAyNjQzYzFiYWU5MjgzMTZkY2E5ZjM0ZGIwMjhmYjlhNjdlLgotCi0yMDE2LTAyLTI3IDIwOjMxOjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBnb29tOiBJbml0aWFsaXplIHRoZSBnb29tIHN0cnVjdCBvbmx5IG9uY2Ugd2Uga25vdyB3aWR0aC9oZWlnaHQgYW5kIHJlY3JlYXRlIGl0IGlmIHRob3NlIGNoYW5nZQotCSAgRml4ZXMgY3Jhc2ggd2hlbiB0aGUgd2lkdGggYW5kL29yIGhlaWdodCBpcyBjaGFuZ2luZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI3NjUKLQotMjAxNi0wMi0yNiAxMjo0MTowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGI2NGYwM2YgdG8gNmYyZDIwOQotCi0yMDE2LTAyLTI1IDIyOjU0OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgIGRvY3M6IGFkZCBydHBvcHVzZGVwYXkgYW5kIHJ0cG9wdXNwYXkgdG8gZG9jdW1lbnRhdGlvbgotCi0yMDE2LTAyLTE3IDE1OjE1OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuaDoKLQkgIHJ0cDogb3B1czogbW92ZSBPcHVzIFJUUCBwYXlsb2FkZXIvZGVwYXlsb2FkZXIgZnJvbSAtYmFkIHRvIC1nb29kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2MjgyCi0KLTIwMTYtMDItMTcgMTU6MTA6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkgIE1lcmdlIGJyYW5jaCAncGx1Z2luLW1vdmUtcnRwLW9wdXMnCi0JICBNb3ZlIE9wdXMgUlRQIGRlcGF5bG9hZGVyL3BheWxvYWRlciBmcm9tIC1iYWQgdG8gLWdvb2QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2MjgyCi0KLTIwMTYtMDItMjUgMTE6MzM6MTMgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogY2VuYyBhdXggaW5mbyBwYXJzaW5nIGZyb20gbWRhdCBzdXBwb3J0IGluIFBVTEwgbW9kZQotCSAgVGhpcyBpcyBhbHJlYWR5IHN1cHBvcnRlZCBmb3IgUFVTSCBtb2RlIGJ1dCB3YXMgZmFpbGluZyBpbiBQVUxMIG1vZGUuCi0JICBUaGUgYXV4IGluZm8gaXMgc29tZXRpbWVzIHN0b3JlZCBpbiB0aGUgbWRhdCBiZWZvcmUgdGhlIGZpcnN0IHNhbXBsZSwKLQkgIHNvIHRoZSBsb29wIHRhc2sgbmVlZHMgdG8gcHVsbCBkYXRhIHN0b3JlZCBhdCB0aGF0IGxvY2F0aW9uIGFuZAotCSAgcGVyZm9ybSB0aGUgYXV4IGluZm8gY2VuYyBwYXJzaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTcwMAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjUxNgotCi0yMDE2LTAyLTI0IDExOjI4OjA5ICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHByZXZlbnQgYnVmZmVyIGZsb3cgaWYgYW55IHN0cmVhbSBmYWlsZWQgdG8gYmUgZXhwb3NlZAotCSAgSW4gc29tZSBjYXNlcyB0aGUgc3RyZWFtIGNvbmZpZ3VyYXRpb24gY2FuIGZhaWwsIGZvciBpbnN0YW5jZSBpZiB0aGUKLQkgIHN0cmVhbSBpcyBwcm90ZWN0ZWQgYW5kIG5vIGRlY3J5cHRvciB3YXMgZm91bmQuIEZvciB0aG9zZSBzaXR1YXRpb25zCi0JICB0aGUgZGVtdXhlciBzaG91bGRuJ3QgZW1pdCBhbnkgZGF0YSBvbiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgcGFkIG9mCi0JICB0aGUgc3RyZWFtIGFuZCBiYWlsIG91dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI1MTYKLQotMjAxNi0wMi0yNCAwOToxMjowMyArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkb24ndCBwdXNoIGVuY3J5cHRlZCBidWZmZXIgd2l0aG91dCBjZW5jIG1ldGFkYXRhCi0JICBXaGVuIHRoZSBjZW5jIG1ldGFkYXRhIGlzIHN0b3JlZCBvdXRzaWRlIG9mIHRoZSBtb29mIGJveCBhbmQgdGhlCi0JICBzdHJlYW0gaXMgZXhwb3NlZCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjZW5jIG1ldGFkYXRhIGhhc24ndCBiZWVuCi0JICBwcm9jZXNzZWQgeWV0IHdoaWxlIHRoZSBmaXJzdCBidWZmZXIgaXMgYmVpbmcgcHVzaGVkLiBXaGVuIHRoaXMKLQkgIGhhcHBlbnMgdGhlIGJ1ZmZlciBjYW4ndCBwb3NzaWJseSBiZSBkZWNyeXB0ZWQgZG93bnN0cmVhbSBzbyBkb24ndAotCSAgcHVzaCBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI1MTYKLQotMjAxNS0xMC0yMSAxNjoyMTo0NSArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZWFkIHNhaW8gYXV4X2luZm9fdHlwZSBhcyBhIEZPVVJDQwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Njg5NwotCi0yMDE2LTAyLTIzIDE4OjI3OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZmRlYy5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkgIGdzdDogSGFuZGxlIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpIHJldHVybmluZyBOVUxMIGdyYWNlZnVsbHkKLQotMjAxNi0wMi0yMyAxODoxMjo1NCArMDIwMCAgRGF2ZSBDcmFpZyA8ZGNyYWlnQGJyaWdodHNpZ24uYml6PgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2NWRlcGF5OiBEb24ndCBhc3N1bWUgdGhhdCBnZXRfY3VycmVudF9jYXBzKCkgcmV0dXJucyBub24tTlVMTCBjYXBzIGFmdGVyIGhhc19jdXJyZW50X2NhcHMoKQotCSAgUmVtb3ZlIGNhbGxzIHRvIGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcygpIHdoaWNoIHRoZW4gZ28gb24gdG8gY2FsbAotCSAgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgYXMgdGhlIGNhcHMgY2FuIGdvIHRvIE5VTEwgaW4gYmV0d2Vlbi4gSW5zdGVhZCBqdXN0Ci0JICB1c2UgZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKCkgYW5kIGNoZWNrIGZvciBOVUxMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTUzOQotCi0yMDE1LTEyLTE2IDEyOjQwOjM5ICswMDAwICBEYXZlIENyYWlnIDxkY3JhaWdAYnJpZ2h0c2lnbi5iaXo+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkgIGdzdDogRG9uJ3QgYXNzdW1lIHRoYXQgZ2V0X2N1cnJlbnRfY2FwcygpIHJldHVybnMgbm9uLU5VTEwgY2FwcyBhZnRlciBoYXNfY3VycmVudF9jYXBzKCkKLQkgIFJlbW92ZSBjYWxscyB0byBnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMoKSB3aGljaCB0aGVuIGdvIG9uIHRvIGNhbGwKLQkgIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpIGFzIHRoZSBjYXBzIGNhbiBnbyB0byBOVUxMIGluIGJldHdlZW4uIEluc3RlYWQganVzdAotCSAgdXNlIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpIGFuZCBjaGVjayBmb3IgTlVMTC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk1MzkKLQotMjAxNS0xMi0xNiAxMDo1NDoxNyArMDAwMCAgRGF2ZSBDcmFpZyA8ZGNyYWlnQGJyaWdodHNpZ24uYml6PgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogSGFuZGxlIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpIHJldHVybmluZyBOVUxMIGdyYWNlZnVsbHkKLQkgIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBwaXBlbGluZSBpcyBjdXJyZW50bHkgc2h1dHRpbmcgZG93bi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk1MzkKLQotMjAxNi0wMi0yMyAxNTo1NzoxOCArMDEwMCAgTGludXMgU3ZlbnNzb24gPGxpbnVzc25AYXhpcy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IERvbid0IGhhbmRsZSBzZWVrIHVudGlsIHJlYWR5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyNTQyCi0KLTIwMTYtMDItMjMgMTU6NTU6MTMgKzAxMDAgIExpbnVzIFN2ZW5zc29uIDxsaW51c3NuQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiBVbnJlZiBzZWVrIGV2ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyNTQyCi0KLTIwMTYtMDItMjIgMTE6MDE6NDAgKzAxMDAgIEF1csOpbGllbiBaYW5lbGxpIDxhdXJlbGllbi56YW5lbGxpQHBhcnJvdC5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgbXVsdGlmaWxlc2luazogY2xvc2UgZmlsZSBvbiB3cml0ZSBlcnJvciB3aXRoIG5leHQtZmlsZSBtb2RlIGlzIHNldCB0byBidWZmZXIKLQkgIElmIHdlIGhhdmUgYW4gZXJyb3IgZHVyaW5nIGZ3cml0ZSBjYWxsLCBmaWxlIHN0YXlzIG9wZW4gYW5kIHRodXMgbmV4dAotCSAgaW5jb21pbmcgYnVmZmVyIHdpbGwgdHJpZ2dlciBhbiBhc3NlcnQgd2hlbiB0cnlpbmcgdG8gb3BlbmluZyBhIG5ldwotCSAgZmlsZS4KLQkgIFRoaXMgaGFwcGVucyBpZiB3ZSBkbyBub3QgcmVzdGFydCBlbGVtZW50LCBmaWxlIGlzIGNsb3NlZCBhdCBzdG9wLCBhbmQKLQkgIGlmIGFwcGxpY2F0aW9uIGhhbmRsZXMgdGhlIHJldHVybmVkIEdTVF9GTE9XX0VSUk9SIHRvIGtlZXAgYmluIGFsaXZlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjQzNAotCi0yMDE2LTAyLTE5IDIzOjQ0OjQyICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZG9uJ3Qgb3V0cHV0IGVtcHR5IHRhZ3MvdGFnIGVsZW1lbnRzCi0JICBTdWNoIGZpbGVzIHdpbGwgbm90IHBsYXkgb24gQW5kcm9pZCwgYmVjYXVzZSBvZiBidWcgaW4gbGlid2VibSBtYXRyb3NrYSBwYXJzaW5nLCB3aGljaCBpcyBzdGlsbCBwcmVzZW50IGluIDYuMC4xCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMzQ5Ci0KLTIwMTYtMDItMDQgMTU6NTk6MDQgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiBtYWtlIHVwIGFuIE9wdXNIZWFkIGJsb2NrIGlmIHBvc3NpYmxlIHdoZW4gbWlzc2luZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTQ4OQotCi0yMDE2LTAyLTA0IDEwOjQzOjE1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2EtbXV4OiBtYWtlIHVwIGFuIE9wdXNIZWFkIGJsb2NrIGlmIHBvc3NpYmxlIHdoZW4gbWlzc2luZwotCSAgVGhpcyBibG9jayBpcyBuZWVkZWQgaW4gdGhlIE1hdHJvc2thIGZpbGUsIGJ1dCBkYXRhIGNvbWluZyBmcm9tCi0JICBSVFAgbWF5IG5vdCBoYXZlIG9uZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE0ODkKLQotMjAxNi0wMi0yMiAxMzo1MzoyMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG1ha2Ugc3RyZWFtLWlkIG1vcmUgcmVhZGFibGUgYW5kIG9yZGVyLWZyaWVuZGx5Ci0JICAuLi4gYXMgc3RyZWFtcyBhcmUgc28gb3JkZXJlZCBieSBpZCBieSBlLmcuIGRlY29kZWJpbgotCSAgKGFuZCBhcyB0eXBpY2FsbHkgYWxyZWFkeSBob25vdXJlZCBieSBvdGhlciBkZW11eGVycykuCi0KLTIwMTYtMDItMjIgMTM6MjU6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IHJlbW92ZSBjb25mdXNpbmcgZHVwbGljYXRlIHRyYWNrIHVpZCBmaWVsZAotCi0yMDE2LTAyLTIyIDE0OjAzOjAyICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOXBheS5jOgotCSAgcnRwdnA5cGF5OiBhZGQgbWlzc2luZyBicmVhawotCSAgVlA5X1BBWV9QSUNUVVJFX0lEXzdCSVRTIGFuZCBWUDlfUEFZX1BJQ1RVUkVfSURfMTVCSVRTIGFyZSBtdXR1YWxseQotCSAgZXhjbHVzaXZlIG9wdGlvbnMgb2YgdGhlIHBpY3R1cmUtaWQtbW9kZS4gV2UgY2FuIGJyZWFrIGFmdGVyIHRoZQotCSAgZmlyc3QgY2FzZS4KLQkgIDEgb3IgMiBieXRlcyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBoZWFkZXIgbGVuZ3RoIGRlcGVuZGluZyBvbiB0aGUKLQkgIFBpY3R1cmVJRCBzaXplLgotCSAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXViZXJ0aS1wYXlsb2FkLXZwOS0wMCNzZWN0aW9uLTQuMgotCSAgQ0lEIDEzNTM0NzkKLQotMjAxNi0wMi0yMiAwOTowOTowMSArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEZpeCBidWZmZXIgbWVtb3J5IGxlYWsKLQkgIGJ1ZmZlciBiZWluZyBtYXBwZWQgaXMgbm90IGJlaW5nIHVubWFwcGVkIGluIHNvbWUgY2FzZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0MjAKLQotMjAxNS0xMS0wNCAxMDoxOTowMyArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwbWFuYWdlcjogRG9uJ3Qgd2FybiBmb3IgZHVwbGljYXRlL3Jlb3JkZXJlZCBwYWNrZXRzCi0JICBUaGlzIGlzIGEgbm9ybWFsIHNjZW5hcmlvIGFuZCBzaG91bGQgbm90IGJlIGEgd2FybmluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMDgKLQotMjAxNi0wMi0yMSAwOTo0Nzo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2FscGhhL2FscGhhLnZjcHJvajoKLQkqIGdzdC9hdXBhcnNlL2F1cGFyc2UudmNwcm9qOgotCSogZ3N0L2F2aS9hdmkudmNwcm9qOgotCSogZ3N0L2N1dHRlci9jdXR0ZXIudmNwcm9qOgotCSogZ3N0L2RlYnVndXRpbHMvZGVidWcudmNwcm9qOgotCSogZ3N0L2RlYnVndXRpbHMvbmF2aWdhdGlvbnRlc3QudmNwcm9qOgotCSogZ3N0L2VmZmVjdHYvZWZmZWN0di52Y3Byb2o6Ci0JKiBnc3QvZmx4L2ZseGRlYy52Y3Byb2o6Ci0JKiBnc3QvZ29vbS9nb29tLnZjcHJvajoKLQkqIGdzdC9nb29tMmsxL2dvb20udmNwcm9qOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS52Y3Byb2o6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXgudmNwcm9qOgotCSogZ3N0L2xhdy9hbGF3LnZjcHJvajoKLQkqIGdzdC9sYXcvbXVsYXcudmNwcm9qOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLnZjcHJvajoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0LnZjcHJvajoKLQkqIGdzdC9ydHAvcnRwLnZjcHJvajoKLQkqIGdzdC9zbXB0ZS9zbXB0ZS52Y3Byb2o6Ci0JKiBnc3Qvc3BlY3RydW0vc3BlY3RydW0udmNwcm9qOgotCSogZ3N0L3VkcC91ZHAudmNwcm9qOgotCSogZ3N0L3ZpZGVvYm94L3ZpZGVvYm94LnZjcHJvajoKLQkqIGdzdC92aWRlb2Nyb3AvdmlkZW9jcm9wLnZjcHJvajoKLQkqIGdzdC92aWRlb2ZpbHRlci9nYW1tYS52Y3Byb2o6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvdmlkZW9iYWxhbmNlLnZjcHJvajoKLQkqIGdzdC92aWRlb2ZpbHRlci92aWRlb2ZpbHRlci52Y3Byb2o6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvdmlkZW9mbGlwLnZjcHJvajoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIudmNwcm9qOgotCSogZ3N0L3dhdmVuYy93YXZlbmMudmNwcm9qOgotCSogZ3N0L3dhdnBhcnNlL3dhdnBhcnNlLnZjcHJvajoKLQkqIGdzdC95NG0veTRtZW5jLnZjcHJvajoKLQkqIHdpbjMyL01BTklGRVNUOgotCSogd2luMzIvdnM2L2F1dG9nZW4uZHNwOgotCSogd2luMzIvdnM2L2dzdF9wbHVnaW5zX2dvb2QuZHN3OgotCSogd2luMzIvdnM2L2xpYmdzdGFsYXcuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGFscGhhLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RhbHBoYWNvbG9yLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RhcGV0YWcuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF1ZGlvZnguZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF1cGFyc2UuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF1dG9kZXRlY3QuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF2aS5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0Y3V0dGVyLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RkaXJlY3Rzb3VuZC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0ZWZmZWN0di5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0Zmx4LmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3Rnb29tLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RpY3lkZW11eC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0aWQzZGVtdXguZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGludGVybGVhdmUuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGpwZWcuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGxldmVsLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RtYXRyb3NrYS5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0bWVkaWFuLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3Rtb25vc2NvcGUuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdG11bGF3LmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RtdWx0aXBhcnQuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHBuZy5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0cXRkZW11eC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0cnRwLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RydHNwLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RzbXB0ZS5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0c3BlZXguZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHVkcC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0dmlkZW9iYWxhbmNlLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb2JveC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0dmlkZW9jcm9wLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb2ZsaXAuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHZpZGVvbWl4ZXIuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHdhdmVmb3JtLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3R3YXZlbmMuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHdhdnBhcnNlLmRzcDoKLQkqIHdpbjMyL3ZzNy9saWJnc3RkaXJlY3Rzb3VuZC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvZ3N0LXBsdWdpbnMtZ29vZC5zbG46Ci0JKiB3aW4zMi92czgvbGliZ3N0MTM5NC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0YWFzaW5rLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RhbGF3LnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RhbHBoYS52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0YWxwaGFjb2xvci52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0YW5ub2RleC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0YXBldGFnLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RhdWRpb2Z4LnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RhdXBhcnNlLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RhdXRvZGV0ZWN0LnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RhdmkudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdGNhY2FzaW5rLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RjZGlvLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RjdXR0ZXIudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdGRpcmVjdHNvdW5kLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3Rkdi52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0ZWZmZWN0di52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0ZmxhYy52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0Zmx4ZGVjLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3Rnb29tLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RpY3lkZW11eC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0aWQzZGVtdXgudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdGpwZWcudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdGxhZHNwYS52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0bGV2ZWwudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdG1hdHJvc2thLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RtbmcudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdG1vbm9zY29wZS52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0bXVsYXcudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdG11bHRpcGFydC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0cG5nLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RydHAudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdHJ0c3AudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdHNob3V0Mi52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0c21wdGUudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdHNwZWV4LnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3R0YWdsaWIudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdHVkcC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0dmlkZW9iYWxhbmNlLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3R2aWRlb2JveC52Y3Byb2o6Ci0JKiB3aW4zMi92czgvbGliZ3N0dmlkZW9mbGlwLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3R2aWRlb21peGVyLnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3R3YXZlbmMudmNwcm9qOgotCSogd2luMzIvdnM4L2xpYmdzdHdhdnBhcnNlLnZjcHJvajoKLQkgIHdpbjMyOiByZW1vdmUgb3V0ZGF0ZWQgYnVpbGQgY3J1ZnQKLQkgIFRoaXMgaGFzbid0IGJlZW4gdG91Y2hlZCBmb3IgZ2VuZXJhdGlvbnMsIGRvZXNuJ3Qgd29yaywKLQkgIGFuZCBpcyBqdXN0IGNhdXNpbmcgY29uZnVzaW9uLiBXZSBhbHNvIGRvbid0IHdhbnQgdG8KLQkgIG1haW50YWluIHRoZXNlIGZpbGVzIG1hbnVhbGx5LgotCi0yMDE2LTAyLTIwIDExOjUxOjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogZG9uJ3QgdXNlIHVuZGVjbGFyZWQgY29yZSBkZWJ1ZyBjYXRlZ29yeSBzeW1ib2xzCi0KLTIwMTYtMDItMDYgMTQ6Mzk6MDUgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogd29ya2Fyb3VuZCBmb3IgZmlsZXMgd2l0aCB3cm9uZyBjb2xvcl90YWJsZV9pZCB2YWx1ZQotCSAgSW5zdGVhZCBvZiBlcnJvcmluZyBvdXQsIGp1c3QgdXNlIHRoZSBkZWZhdWx0IGNvbG9yIHRhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTYzNwotCi0yMDE2LTAyLTE5IDE1OjAyOjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDlkZXBheS5jOgotCSAgZmx2bXV4LCBydHB2cDlkZXBheTogZml4IGluZGVudGF0aW9uCi0KLTIwMTYtMDItMTkgMTU6MDM6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnNyYzogZml4IGluZGVudGF0aW9uCi0KLTIwMTUtMTItMDQgMDA6NDY6MzQgKzExMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogcGx1ZyBsZWFrKHMpIGluIGVycm9yLXNjZW5hcmlvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMjEwCi0KLTIwMTUtMTItMDQgMDA6NDY6MTIgKzExMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGZpeCBlb3MgZXZlbnQgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjIwOQotCi0yMDE2LTAyLTE5IDE0OjQxOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZkZW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBoMjYzLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHRlc3RzOiBmaXggaW5kZW50YXRpb24KLQotMjAxNi0wMi0xOCAxNjowOToyOSArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHRlc3RzOiBydHBqaXR0ZXJidWZmZXI6IHBvcnQgdGVzdGhhcm5lc3MgdG8gR3N0SGFybmVzcyBhbmQgY2xlYW51cC9pbXByb3ZlCi0JICBQcm9iYWJseSBmb3VuZCBhIGJ1ZyBhcyB3ZWxsLCBpbiB0aGF0IHRoZXJlIGFyZSBzb21lIHRpbWVzdGFtcHMgaW4KLQkgIHRoZXJlIHRoYXQgYXJlIGxvb2tpbmcgdmVyeSB3cm9uZy4gKG1hcmtlZCB3aXRoIEZJWE1FKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjI2NwotCi0yMDE2LTAyLTE4IDEwOjI3OjE5ICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgdGVzdHM6IHJ0cGppdHRlcmJ1ZmZlcjogdGVzdCBjbGVhbnVwcy9pbXByb3ZlbWVudHMKLQkgIFVzZSBmYWlsX3VubGVzcyBhbmQgZnJpZW5kcyBpbnN0ZWFkIG9mIGdfYXNzZXJ0Ci0JICBGYWN0b3Igc2VxLW51bSBjaGVja2luZyBvdXQgdG8gc2VwYXJhdGUgZnVuY3Rpb24KLQkgIENoZWNrIG1vcmUgcmV0dXJuLXZhbHVlcyBmcm9tIHB1c2ggYW5kIGNyYW5rIGFuZCBvdGhlcnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyNTQKLQotMjAxNS0xMi0wMyAxMTowNzowNSArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgdGVzdHM6IHJ0cGppdHRlcmJ1ZmZlcjogZml4IGxlYWtzIGluIHVuaXQgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MjIxNAotCi0yMDE2LTAyLTE5IDEyOjM4OjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuNy4yID09PQotCi0yMDE2LTAyLTE5IDExOjQ5OjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjcuMgotCi0yMDE2LTAyLTE5IDEwOjMxOjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNi0wMi0xOCAxODozMzoxMyArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwbHVnIGxlYWtzIGluIGNlbmMgYXV4IGluZm8gcGFyc2luZwotCi0yMDE2LTAyLTE4IDEzOjQzOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBmaXggc3B1cmlvdXMgc291cGh0dHBzcmMgdGVzdCB0aW1vdXRzCi0JICBTZXQgR1NFVFRJTkdTX0JBQ0tFTkQ9bWVtb3J5LCBhcHBhcmVudGx5IHRoZXJlJ3Mgc29tZXRoaW5nCi0JICBhYm91dCBmb3JrKCkgYW5kIHRoZSBkY29uZiBiYWNrZW5kIChvciB3aGF0ZXZlciBlbHNlIHRoYXQKLQkgIGRyYWdzIGluIG9yIGFjdGl2YXRlcykgdGhhdCBtZXNzZXMgdXAgbG9ja2luZyBhbmQgY2F1c2VzCi0JICB0aW1lb3V0cyBkdWUgdG8gZGVhZGxvY2tzIGluIGdfbXV0ZXhfbG9jaygpLCBzaW5jZQotCSAgZXZlcnl0aGluZyB3b3JrcyBmaW5lIHdpdGggQ0tfRk9SSz1ubyBhcyB3ZWxsLgotCi0yMDE2LTAyLTE4IDExOjEwOjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFVubWFwIHdhdnBhY2sgaGVhZGVyIGJ1ZmZlciBhZnRlciBjcmVhdGluZyBpdAotCSAgT3RoZXJ3aXNlIGl0IHdpbGwgYmUgbWFwcGVkIHdyaXRhYmxlIGFsbCB0aGUgdGltZSBhbmQgd2UgY2FuJ3QgcmVhZCBmcm9tIGl0Ci0JICBhbnl3aGVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIyMzkKLQotMjAxNS0xMi0wOCAxODo0OTo0MCArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBBZGQgdGVzdCBmb3IgYmlnIHNlcW51bSBnYXAgaGFuZGxpbmcKLQkgIE1ha2Ugc3VyZSB0aGF0IHRoZSBwYWNrZXRzIHF1ZXVlZCB3aGVuIGRldGVjdGluZyBhIGJpZyBnYXAgYXJlIHB1c2hlZAotCSAgYWZ0ZXIgcmVzZXQgKDUgY29uc2VjdGl2ZSBzZXFudW1zKSBhbmQgbm90IGRyb3BwZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMjExCi0KLTIwMTYtMDItMTcgMTU6MDM6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdXRpbHMuaDoKLQkgIHJ0cDogc3ByaW5rbGUgc29tZSBHX0dOVUNfSU5URVJOQUwgZm9yIGludGVybmFsIHV0aWxzIGZ1bmN0aW9ucwotCi0yMDE2LTAyLTA5IDEzOjE3OjAwICswMDAwICBBbGV4IEFzaGxleSA8YnVnemlsbGFAYXNobGV5LWZhbWlseS5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogb25seSB0cmFuc2Zvcm0gcHJvdGVjdGVkIGNhcHMgb25jZQotCSAgQ29tbWl0IDc4NzNiZWRlMzEzNGIxNWU1MDY2ZThkMTRlNTRkMWY1MDU0ZDIwNjMKLQkgIChodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzc0KSBjaGFuZ2VkIHRoZQotCSAgYmVoYXZpb3VyIG9mIHF0ZGVtdXggdG8gY2FsbCBnc3RfcXRkZW11eF9jb25maWd1cmVfc3RyZWFtKCkgZm9yCi0JICBldmVyeSBuZXcgbW9vZi4KLQkgIFdoZW4gcGxheWluZyBhIHByb3RlY3RlZCBzdHJlYW0sIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0oKQotCSAgY2FsbHMgZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3Byb3RlY3RlZF9jYXBzKCkuIFRoZQotCSAgZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3Byb3RlY3RlZF9jYXBzKCkgZnVuY3Rpb24gdGFrZXMgdGhlIG9yaWdpbmFsCi0JICBtZWRpYSBmb3JtYXQsIHB1dHMgdGhpcyBpbiBhIGZpZWxkIGNhbGxlZCAib3JpZ2luYWwtbWVkaWEtdHlwZSIKLQkgIGFuZCB0aGVuIGNoYW5nZXMgdGhlIGNhcHMgdG8gImFwcGxpY2F0aW9uL3gtY2VuYyIuCi0JICBUaGUgZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3Byb3RlY3RlZF9jYXBzKCkgZGlkIG5vdCBoYW5kbGUgdGhlIGNhc2UKLQkgIG9mIGJlaW5nIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgY2F1c2luZyBpdCB0byBpbmNvcnJlY3RseSBzZXQgdGhlCi0JICBjYXBzLiBUaGUgc2Vjb25kIGNhbGwgd2FzIGNhdXNpbmcgdGhlIGNhcHMgdG8gYmUgc2V0IHRvOgotCSAgYXBwbGljYXRpb24veC1jZW5jLCBvcmlnaW5hbC1tZWRpYS10eXBlImFwcGxpY2F0aW9uL3gtY2VuYyIKLQkgIFRoaXMgY29tbWl0IG1ha2VzIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9wcm90ZWN0ZWRfY2FwcygpIGNoZWNrIHRoYXQKLQkgIHRoZSBjYXBzIGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLCBzbyB0aGF0IGl0IG9ubHkgZ2V0cwotCSAgY2hhbmdlZCBvbmNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTc2OQotCi0yMDE1LTExLTAzIDE0OjUwOjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBvcHVzOiBBZGQgcHJvcGVyIHN1cHBvcnQgZm9yIG11bHRpY2hhbm5lbCBhdWRpbwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzE1MgotCi0yMDE1LTA2LTMwIDEzOjUxOjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBvcHVzOiBDb3B5IG1ldGFkYXRhIGluIHRoZSAoZGUpcGF5bG9hZGVyLCBidXQgb25seSB0aGUgcmVsZXZhbnQgb25lcwotCSAgVGhlIHBheWxvYWRlciBkaWRuJ3QgY29weSBhbnl0aGluZyBzbyBmYXIsIHRoZSBkZXBheWxvYWRlciBjb3BpZWQgZXZlcnkKLQkgIHBvc3NpYmxlIG1ldGEuIExldCdzIG1ha2UgaXQgY29uc2lzdGVudCBhbmQganVzdCBjb3B5IGFsbCBtZXRhcyB3aXRob3V0IHRhZ3Mgb3IKLQkgIHdpdGggb25seSB0aGUgYXVkaW8gdGFnLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTc3NAotCi0yMDE1LTA1LTA0IDExOjIzOjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5jOgotCSAgb3B1c2RlcGF5OiBTZXQgbXVsdGlzdHJlYW09RkFMU0Ugb24gdGhlIE9wdXMgY2FwcwotCSAgVGhlIFJUUCBPcHVzIG1hcHBpbmcgb25seSBhbGxvd3MgbW9uby9zdGVyZW8sIGFuZCBub3QgbXVsdGlzdHJlYW0gT3B1cwotCSAgc3RyZWFtcy4KLQotMjAxNS0wMy0yNCAxMzo1Nzo1NCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBydHBvcHVzcGF5OiBGb3J3YXJkIHN0ZXJlbyBwcmVmZXJlbmNlcyBmcm9tIGNhcHMgdXBzdHJlYW0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY2MTcKLQotMjAxNS0wMy0yNCAxMzo1NjoyMSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBydHBvcHVzcGF5OiBTZXQgdGhlIG51bWJlciBvZiBjaGFubmVscyB0byAyIGFzIHBlciBSRkMgZHJhZnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY2MTcKLQotMjAxNS0wMy0yMyAxMjoyNDo1NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c3BheS5jOgotCSAgb3B1czogSGFuZGxlIHNwcm9wLXN0ZXJlbyBhbmQgc3Byb3AtbWF4Y2FwdHVyZXJhdGUgUlRQIGNhcHMgZmllbGRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NjE3Ci0KLTIwMTUtMDItMTkgMTQ6MzA6MTAgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkgIHJ0cG9wdXNwYXk6IGRlZmF1bHQgZW5jb2RpbmcgbmFtZSB0byBPUFVTCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3ODEwCi0KLTIwMTUtMDItMTkgMTQ6MDU6MDYgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkgIHJ0cG9wdXNwYXk6IG1ha2UgY2FwcyB3cml0YWJsZSBiZWZvcmUgdHJ1bmNhdGluZyB0aGVtCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3ODEwCi0KLTIwMTUtMDItMDUgMTA6Mjc6NTEgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkgIHJ0cG9wdXNwYXk6IG5lZ290aWF0ZSB0aGUgZW5jb2RpbmcgbmFtZQotCSAgQ2hyb21lIHVzZXMgYSBkaWZmZXJlbnQgZW5jb2RpbmcgbmFtZSB0aGF0IGdzdHJlYW1lci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4MTAKLQotMjAxNC0xMS0wMSAxMDoxMDoyNyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkgIHJ0cG9wdXM6IFVzZSBPUFVTIGVuY29kaW5nIG5hbWUKLQkgIEJvdGggRmlyZWZveCBhbmQgQ2hyb21lIHVzZXMgT1BVUyBhcyB0aGUgZW5jb2RpbmcgaW4gdGhlaXIgU0RQLgotCSAgQWRkaW5nIHRoaXMgbm93IGRlZmFjdG8gc3RhbmRhcmQgbmFtZSByZW1vdmUgdGhlIG5lZWQgZm9yIHNwZWNpYWwKLQkgIGNhc2UgaW4gU0RQIHBhcnNpbmcgY29kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4MTAKLQotMjAxMy0wMS0zMSAxMjozMDo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBvcHVzcGF5OiBmaXggdGltZXN0YW1wcwotCSAgQ29weSB0aW1lc3RhbXBzIHRvIHBheWxvYWRlZCBidWZmZXIuCi0JICBBdm9pZCBpbnB1dCBidWZmZXIgbWVtb3J5IGxlYWsuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTI5Ci0KLTIwMTItMTEtMDMgMjA6Mzg6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuaDoKLQkgIEZpeCBGU0YgYWRkcmVzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzUyMAotCi0yMDEyLTEwLTIyIDEyOjA4OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkgIG9wdXNwYXk6IHJlbW92ZSBwb2ludGxlc3MgY2FwcyBzZXJpYWxpemF0aW9uCi0JICBSZW1vdmUgdGhlIGNhcHMgc2VyaWFsaXphdGlvbiBpbiB0aGUgcnRwIGNhcHMuIHRoZSBzcGVjIG5vciB0aGUgcmVjZWl2ZXIKLQkgIGRvZXMgYW55dGhpbmcgd2l0aCBpdC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY1NDcKLQotMjAxMi0xMC0xNyAxNzozNDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkgIFVzZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKCkKLQkgIHdoZXJlIHBvc3NpYmxlLiBBdm9pZHMgc29tZSBzdHJpbmcgY29waWVzLiBBbHNvIHJlLWluZGVudAotCSAgc29tZSBzdHVmZi4gQWxzbyBzb21lIGluZGVudCBmaXhlcyBoZXJlIGFuZCB0aGVyZS4KLQotMjAxMi0wOS0yMCAxODo0MToyNCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBydHBvcHVzcGF5OiBBbGxvY2F0ZSB0aGUgcnRwIGJ1ZmZlciBjb3JyZWN0bHkKLQkgIFVzZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIHRoZSBydHAgYnVmZmVyCi0KLTIwMTItMDktMTQgMTc6MDg6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICByZXBsYWNlIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSB3aXRoIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YQotCi0yMDEyLTAzLTA3IDE3OjE0OjI5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmM6Ci0JICBvcHVzOiBwb3J0IHRvIHVwZGF0ZWQgMC4xMQotCi0yMDExLTEyLTMwIDExOjQxOjE3ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBvcHVzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c3BheS5oOgotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExLXByZW1lcmdlCi0JICBDb25mbGljdHM6Ci0JICBkb2NzL2xpYnMvTWFrZWZpbGUuYW0KLQkgIGV4dC9rYXRlL2dzdGthdGV0aWdlci5jCi0JICBleHQvb3B1cy9nc3RvcHVzZGVjLmMKLQkgIGV4dC94dmlkL2dzdHh2aWRlbmMuYwotCSAgZ3N0LWxpYnMvZ3N0L2Jhc2VjYW1lcmFiaW5zcmMvTWFrZWZpbGUuYW0KLQkgIGdzdC1saWJzL2dzdC9iYXNlY2FtZXJhYmluc3JjL2dzdGJhc2VjYW1lcmFzcmMuYwotCSAgZ3N0LWxpYnMvZ3N0L2Jhc2VjYW1lcmFiaW5zcmMvZ3N0YmFzZWNhbWVyYXNyYy5oCi0JICBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0YmFzZXZpZGVvY29kZWMuYwotCSAgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2NvZGVjLmgKLQkgIGdzdC1saWJzL2dzdC92aWRlby9nc3RiYXNldmlkZW9kZWNvZGVyLmMKLQkgIGdzdC1saWJzL2dzdC92aWRlby9nc3RiYXNldmlkZW9lbmNvZGVyLmMKLQkgIGdzdC9hc2ZtdXgvZ3N0YXNmbXV4LmMKLQkgIGdzdC9hdWRpb3Zpc3VhbGl6ZXJzL2dzdHdhdmVzY29wZS5jCi0JICBnc3QvY2FtZXJhYmluMi9nc3RjYW1lcmFiaW4yLmMKLQkgIGdzdC9kZWJ1Z3V0aWxzL2dzdGNvbXBhcmUuYwotCSAgZ3N0L2ZyZWkwci9nc3RmcmVpMHJtaXhlci5jCi0JICBnc3QvbXBlZ3BzbXV4L21wZWdwc211eC5jCi0JICBnc3QvbXBlZ3RzbXV4L21wZWd0c211eC5jCi0JICBnc3QvbXhmL214Zm11eC5jCi0JICBnc3QvdmlkZW9tZWFzdXJlL2dzdHZpZGVvbWVhc3VyZV9zc2ltLmMKLQkgIGdzdC92aWRlb3BhcnNlcnMvZ3N0aDI2NHBhcnNlLmMKLQkgIGdzdC92aWRlb3BhcnNlcnMvZ3N0bXBlZzR2aWRlb3BhcnNlLmMKLQotMjAxMS0xMi0wOSAxNzoyNTo0MSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c3BheS5jOgotCSAgb3B1c2VuYzogYWRkIHVwc3RyZWFtIG5lZ290aWF0aW9uIGZvciBtdWx0aXN0cmVhbSBhYmlsaXR5Ci0JICBUaGlzIHdpbGwgaGVscCBlbGVtZW50cyB0aGF0IGNhbm5vdCBkZWFsIHdpdGggbXVsdGlzdHJlYW0sCi0JICBzdWNoIGFzIHRoZSBSVFAgcGF5bG9hZGVyLgotCSAgVGhlIGNhcHMgbm93IGRvIG5vdCBpbmNsdWRlIGEgInN0cmVhbXMiIGZpZWxkIGFueW1vcmUsIGJ1dAotCSAgYSAibXVsdGlzdHJlYW0iIGJvb2xlYW4sIHNpbmNlIHdlIGhhdmUgbm8gcmVhbCB1c2UgZm9yIGtub3dpbmcKLQkgIHRoZSBleGFjdCBhbW91bnQgb2Ygc3RyZWFtcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUwNzgKLQotMjAxMS0xMi0wNyAxNToxMzoxMSAtMDIwMCAgRGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhIDxkYW5pbG8uY2VzYXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwb3B1c3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBvcHVzcGF5Lmg6Ci0JICBBZGRpbmcgb3B1cyBSVFAgcGF5bG9hZGVyL2RlcGF5bG9hZGVyIGVsZW1lbnQKLQkgIEFkZGluZyBPUFVTIFJUUCBtb2R1bGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgZHJhZnQ6Ci0JICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaWQvZHJhZnQtc3BpdHRrYS1wYXlsb2FkLXJ0cC1vcHVzLTAwLnR4dAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDgxNwotCi0yMDE2LTAyLTE3IDEzOjI2OjAyICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdXRpbHMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdXRpbHMuaDoKLQkgIHJ0cDogaDI2NC9oMjY1OiBhdm9pZCBkdXBsaWNhdGlvbiBvZiByZWFkX2dvbG9tYigpCi0JICBUaGVyZSBpcyBubyBuZWVkIHRvIGhhdmUgdHdvIGlkZW50aWNhbCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHJlYWRfZ29sb21iCi0JICBmdW5jdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE2MDYKLQotMjAxNi0wMi0xNyAxNDozNzo0NCArMDEwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBTaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgVFJJQ0tNT0RFX0tFWV9VTklUUwotCSAgV2hlbiB0aGUgdHJpY2ttb2RlIGtleS11bml0cyBmbGFnIGlzIHNldCBvbiB0aGUgc2VnbWVudCwgc2ltcGx5IHNraXAKLQkgIGFueSBzYW1wbGUgb24gYSB2aWRlbyBzdHJlYW0gdGhhdCBpc24ndCBhIGtleWZyYW1lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYyMTg1Ci0KLTIwMTUtMDgtMjEgMTQ6MTU6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IHNlbmQgR0FQIGV2ZW50cyBmb3IgbGFnZ2luZyBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtcyB0b28KLQkgIFNlbmQgR0FQIGV2ZW50cyBmb3Igbm9uLXN1YnRpdGxlIHN0cmVhbXMgdG9vIGlmIHRoZXkgbGFnIHRvbyBtdWNoCi0JICBiZWhpbmQsIGJ1dCB1c2UgYSBoaWdoZXIgdGhyZXNob2xkIHRoYW4gZm9yIHN1YnRpdGxlcy4KLQkgIFRoaXMgaGVscHMgd2l0aCBmaXhpbmcgcHJlcm9sbGluZyB3aXRoIGEgZmlsZSB3aGVyZSBvbmUgb2YgdGhlCi0JICBhdWRpbyBzdHJlYW1zIG9ubHkgaGFzIGRhdGEgc3RhcnRpbmcgZnJvbSAxOXMgb253YXJkcy4gSXQncyBub3QKLQkgIGEgY29tcGxldGUgZml4IHlldCwgaXQgYWxzbyByZXF1aXJlcyBjaGFuZ2VzIGVsc2V3aGVyZSwgc3VjaCBhcwotCSAgaW4gYmFzZXBhcnNlLCB0byBtYWtlIHN1cmUgY2FwcyBhcmUgcHJvcGFnYXRlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQ0NjAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM4OTkKLQotMjAxNS0xMi0yMyAxOTo1NDoxMyArMDEwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDlkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cDlwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA5cGF5Lmg6Ci0JICBydHB2cDlwYXk6IHJ0cHZwOWRlcGF5OiBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGRyYWZ0IDAxCi0JICBRdWljayBhbmQgZGlydHkgaW1wbGVtZW50YXRpb24gb2YgYW4gUlRQIHBheWxvYWRlciBhbmQgZGVwYXlsb2FkZXIKLQkgIGZvciBWUDkuIEluIHBhcnRpY2FsdXIgaXQgYXNzdW1lcyBubyBzcGF0aWFsIG9yIHRlbXBvcmFsIGxheWVyaW5nLAotCSAgbm9uLWZsZXhpYmxlIG1vZGUsIGFuZCBzb21lIG90aGVyIGJpdHMgYW5kIHBpZWNlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ3NzMKLQotMjAxNi0wMi0xNiAwOTowMjozMCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEZpeCBzdHJpbmcgbWVtb3J5IGxlYWsKLQkgIGNvZGVjX25hbWUgaXMgbm90IGJlaW5nIGZyZWVkIGluIGFsbCBjb25kaXRpb25zIGxlYWRpbmcgdG8gbWVtb3J5IGxlYWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIxMTcKLQotMjAxNS0xMi0xMCAxMjoxNTo1MiArMDEwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IGFkZCAiZ2V0LXNlc3Npb24iIHNpZ25hbAotCSAgVGhpcyBnZXRzIHRoZSBHc3RSVFBTZXNzaW9uIGVsZW1lbnQsIGFzIGNvbXBhcmVkIHRvIHRoZSBSVFBTZXNzaW9uIG9iamVjdAotCSAgdGhhdCBpcyByZXR1cm5lZCBieSBnZXQtaW50ZXJuYWwtc2Vzc2lvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTkyOTMKLQotMjAxNi0wMi0xNiAwMDoxOTowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JICBydHA6IGgyNjU6IGhvb2sgdXAgbW92ZSBSVFAgSC4yNjUgcGF5bG9hZGVyL2RlcGF5bG9hZGVyIHRvIGJ1aWxkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNjA2Ci0KLTIwMTYtMDItMTYgMDA6MTQ6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JICBydHA6IGgyNjU6IHVzZSBjb21tb24gbWV0YSB1dGlsaXR5IGZ1bmN0aW9ucwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTYwNgotCi0yMDE2LTAyLTA1IDE4OjE4OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjV0eXBlcy5oOgotCSAgcnRwOiBoMjY1OiByZW1vdmUgY29kZWNwYXJzZXIgZGVwZW5kZW5jeSBmcm9tIGgyNjUgcGF5bG9hZGVyL2RlcGF5bG9hZGVyCi0JICBMb29rcyBsaWtlIGl0IGp1c3QgdXNlcyB0aGUgTkFMIGVudW1zIGFuZCBub3RoaW5nIGVsc2UgZnJvbQotCSAgdGhlIGNvZGVjcGFyc2VycywgYW5kIHRoYXQncyB0aGUgb25seSByZWFzb24gaXQgaGFkIHRvIGJlCi0JICBtb3ZlZCBmcm9tIC1nb29kIHRvIC1iYWQgd2hlbiBpdCB3YXMgb3JpZ2luYWxseSBhZGRlZC4gV2UKLQkgIGNhbiBwcm9iYWJseSBrZWVwIHRob3NlIE5BTCBlbnVtcyB1cCB0byBkYXRlIGVub3VnaCwgc28gbGV0J3MKLQkgIHJlbW92ZSB0aGUgY29kZWNwYXJzZXIgZGVwZW5kZW5jeSBzbyBpdCBjYW4gYmUgbW92ZWQgYmFjayBpbnRvCi0JICAtZ29vZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjE2MDYKLQotMjAxNi0wMi0xNiAwMDoyNDo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSAgTWVyZ2UgYnJhbmNoICdwbHVnaW4tbW92ZS1ydHAtaDI2NScKLQkgIE1vdmUgUlRQIEguMjY1IHBheWxvYWRlci9kZXBheWxvYWRlciBmcm9tIC1iYWQgdG8gLWdvb2QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNjA2Ci0KLTIwMTYtMDItMDUgMTU6MzQ6NTEgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oOgotCSAgZ3N0cnRwaDI2NWRlcGF5OiBrZWVwIGNvbnNpc3RlbmN5IHdpdGggcnRwaDI2NGRlcGF5Ci0JICBVc2UgZ3N0X3J0cF9kcm9wX21ldGEoKSBhbmQgdGhlIHNhbWUgZnVuY3Rpb24gcHJvdG90eXBlIGZvcgotCSAgZ3N0X3J0cF9jb3B5X21ldGEoKSB0byBrZWVwIGNvbnNpc3RlbmN5IHdpdGggdGhlIFJUUCBlbGVtZW50cyBpbgotCSAgZ3N0LXBsdWdpbnMtZ29vZAotCi0yMDE2LTAyLTA1IDEzOjU2OjM0ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2NWRlcGF5OiBmaXggdGVybWluYXRpb24gb2YgYWNjZXNzIHVuaXQKLQkgIE9ubHkgY29uc2lkZXIgdGhlIGFjY2VzcyB1bml0IGNvbXBsZXRlIHdoZW4gdGhlIG5leHQtb2NjdXJyaW5nIFZDTCBOQUwgdW5pdAotCSAgaGFzIHRoZSBmaXJzdCBiaXQgYWZ0ZXIgaXRzIE5BTCB1bml0IGhlYWRlciBlcXVhbCB0byAxLgotCi0yMDE2LTAxLTE1IDE2OjEwOjAyICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2NWRlcGF5OiBmaXggdW5uZWVkZWQgc3ViLWJ1ZmZlciBjcmVhdGlvbgotCSAgV2UgY3JlYXRlIGEgc3ViLWJ1ZmZlciBqdXN0IHRvIGNvcHkgb3ZlciBpdHMgbWV0YXMgYW5kIHRoZW4gdGhyb3cgaXQKLQkgIGF3YXkgaW1tZWRpYXRlbHksIGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBpbnB1dCBidWZmZXIgZGlyZWN0bHkuCi0KLTIwMTYtMDEtMTUgMTU6NTY6NTkgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSAgcnRwaDI2NXBheTogYWRkICJzZW5kIFZQUy9TUFMvUFBTIHdpdGggZXZlcnkga2V5IGZyYW1lIiBtb2RlCi0JICBJdCdzIG5vdCBlbm91Z2ggdG8gaGF2ZSB0aW1lb3V0IG9yIGV2ZW50IGJhc2VkIFZQUy9TUFMvUFBTIGluZm9ybWF0aW9uCi0JICBzZW50IGluIFJUUCBwYWNrZXRzLiBUaGVyZSBhcmUgc29tZSBzY2VuYXJpb3Mgd2hlbiBrZXkgZnJhbWVzIG1heSBhcHBlYXIKLQkgIG1vcmUgZnJlcXVlbnRseSB0aGFuIG9uY2UgYSBzZWNvbmQsIGluIHdoaWNoIGNhc2UgdGhlIG1pbmltdW0gdGltZW91dAotCSAgZm9yICJjb25maWctaW50ZXJ2YWwiIG9mIDEgc2Vjb25kIGZvciBzZW5kaW5nIFZQUy9TUFMvUFBTIGlzbid0IGVub3VnaC4KLQkgIEl0IG1pZ2h0IGFsc28gYmUgZGVzaXJhYmxlIGluIGdlbmVyYWwgdG8gbWFrZSBzdXJlIHRoZSBWUFMvU1BTL1BQUyBpcwotCSAgYXZhaWxhYmxlIHdpdGggZXZlcnkga2V5ZnJhbWUgKHBhY2tldCBsb3NzIGFzaWRlKSwgc28gcmVjZWl2ZXJzIGNhbgotCSAgYWN0dWFsbHkgcGljayB1cCBkZWNvZGluZyBpbW1lZGlhdGVseSBmcm9tIHRoZSBmaXJzdCBrZXlmcmFtZSBpZgotCSAgVlBTL1NQUy9QUFMgaXMgbm90IHNpZ25hbGVkIG91dCBvZiBiYW5kLgotCSAgVGhpcyBjb21taXQgYWRkcyB0aGUgcG9zc2liaWxpdHkgdG8gc2VuZCBWUFMvU1BTL1BQUyB3aXRoIGV2ZXJ5IGtleSBmcmFtZS4KLQkgIFRoaXMgbW9kZSBjYW4gYmUgZW5hYmxlZCBieSBzZXR0aW5nICJjb25maWctaW50ZXJ2YWwiIHByb3BlcnR5IHRvIC0xLiBJbgotCSAgdGhpcyBjYXNlIHRoZSBwYXlsb2FkZXIgd2lsbCBhZGQgVlBTLCBTUFMgYW5kIFBQUyBiZWZvcmUgZXZlcnkga2V5IChJRFIpCi0JICBmcmFtZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc4OTIKLQotMjAxNi0wMS0xNSAxNToxOTo0MSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuaDoKLQkgIHJ0cGgyNjVwYXk6IGNoYW5nZSBjb25maWctaW50ZXJ2YWwgcHJvcGVydHkgdHlwZSBmcm9tIHVpbnQgdG8gaW50Ci0JICBUaGlzIHdheSB3ZSBjYW4gdXNlIC0xIGFzIHNwZWNpYWwgdmFsdWUsIHdoaWNoIGlzIG5pY2VyIHRoYW4gTUFYVUlOVC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc4OTIKLQotMjAxNS0wOC0xNSAxNjoyMjoyMCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkgIHJ0cGgyNjVkZXBheTogbWFrZSBzdXJlIHdlIGNhbGwgaGFuZGxlX25hbCBmb3IgZWFjaCBOQUwKLQkgIENhbGwgaGFuZGxlX25hbCBmb3IgZWFjaCBOQUwgaW4gdGhlIFNUQVAtQSBSVFAgcGFja2V0LiBUaGlzIG1ha2VzIHN1cmUKLQkgIHdlIGNvcnJlY3RseSBleHRyYWN0IHRoZSBTUFMgYW5kIFBQUy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA5OTkKLQotMjAxNS0wOC0xNSAxNDo0NTozNCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JICBydHBoMjY1cGF5OiBDb3B5IG1ldGFkYXRhIGluIHRoZSBwYXlsb2FkZXIsIGJ1dCBvbmx5IHRoZSByZWxldmFudCBvbmVzCi0JICBUaGUgcGF5bG9hZGVyIGRpZG4ndCBjb3B5IGFueXRoaW5nIHNvIGZhciwgdGhlIGRlcGF5bG9hZGVyIGNvcGllZCBldmVyeQotCSAgcG9zc2libGUgbWV0YS4gTGV0J3MgbWFrZSBpdCBjb25zaXN0ZW50IGFuZCBqdXN0IGNvcHkgYWxsIG1ldGFzIHdpdGhvdXQKLQkgIHRhZ3Mgb3Igd2l0aCBvbmx5IHRoZSB2aWRlbyB0YWcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNzc0Ci0KLTIwMTUtMDgtMTUgMTE6NDE6NDAgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSAgcnRwaDI2NXBheTogVXNlIEdTVF9XQVJOSU5HX09CSkVDVCgpIGluc3RlYWQgb2YgR1NUX1dBUk5JTkcoKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzIyOAotCi0yMDE1LTA4LTE1IDExOjMwOjM2ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuYzoKLQkgIHJ0cGgyNjVwYXk6IGZpeCBwb3RlbnRpYWwgY3Jhc2ggd2hlbiBzaHV0dGluZyBkb3duCi0JICBBIHJhY2UgY29uZGl0aW9uIGluIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gbWF5IGNhdXNlIGJ1ZmZlcnMgdG8gYmUKLQkgIHVucmVmZmVkIHdoaWxlIHRoZXkgYXJlIHN0aWxsIHVzZWQgYnkgdGhlIHN0cmVhbWluZyB0aHJlYWQgaW4KLQkgIGdzdF9ydHBfaDI2NV9wYXlfc2VuZF92cHNfc3BzX3BwcygpIHJlc3VsdGluZyBpbiBhIGNyYXNoLiBDaGFpbiB1cCB0byB0aGUKLQkgIHBhcmVudCBjbGFzcyBmaXJzdCBpbiB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSBzdHJlYW1pbmcKLQkgIGhhcyBzdG9wcGVkIGFuZCBvbmx5IHRoZW4gZnJlZSB0aG9zZSBidWZmZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTM4MQotCi0yMDE1LTA4LTE0IDE1OjA4OjA4ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuYzoKLQkgIHJ0cGgyNjVwYXk6IGZpeCBidWZmZXIgbGVhayB3aGVuIHVzaW5nIFNQUy9QUFMKLQkgIEZpeGVzIGEgYnVmZmVyIGxlYWsgdGhhdCB3b3VsZCBvY2N1ciBpZiB0aGUgcGlwZWxpbmUgd2FzIHNodXRkb3duIHdoaWxlIGEKLQkgIFNQUy9QUFMgaGVhZGVyIHdhcyBiZWluZyBjcmVhdGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTI3MQotCi0yMDE1LTA4LTE0IDExOjQ5OjUxICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuaDoKLQkgIHJ0cGgyNjVkZXBheTogY29weSBtZXRhZGF0YSBpbiB0aGUgZGVwYXlsb2FkZXIsIGJ1dCBvbmx5IHRoZSByZWxldmFudCBvbmVzCi0JICBUaGUgcGF5bG9hZGVyIGRpZG4ndCBjb3B5IGFueXRoaW5nIHNvIGZhciwgdGhlIGRlcGF5bG9hZGVyIGNvcGllZCBldmVyeQotCSAgcG9zc2libGUgbWV0YS4gTGV0J3MgbWFrZSBpdCBjb25zaXN0ZW50IGFuZCBqdXN0IGNvcHkgYWxsIG1ldGFzIHdpdGhvdXQKLQkgIHRhZ3Mgb3Igd2l0aCBvbmx5IHRoZSB2aWRlbyB0YWcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNzc0Ci0KLTIwMTUtMDgtMTIgMTc6NTQ6NTIgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JICBydHBoMjY1ZGVwYXk6IGNoZWNraW5nIGlmIGRlcGF5IGhhcyBzcHMvcHBzIG5hbHMgYmVmb3JlIGluc2VydGlvbgotCSAgUmVsYXRlZCB0bzogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzQzMAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzIyOAotCi0yMDE1LTA4LTEyIDE3OjIyOjQyICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2NWRlcGF5OiBvbmx5IHVwZGF0ZSB0aGUgc3JjcGFkIGNhcHMgaWYgc29tZXRoaW5nIGVsc2UgdGhhbiB0aGUgY29kZWNfZGF0YSBjaGFuZ2VkCi0JICBoMjY0cGFyc2UgYW5kIGdzdHJ0cGgyNjRkZXBheSBkbyB0aGUgc2FtZSwgbGV0J3Mga2VlcCB0aGUgYmVoYXZpb3VyCi0JICBjb25zaXN0ZW50LiBBcyB3ZSBub3cgaW5jbHVkZSB0aGUgY29kZWNfZGF0YSBpbnNpZGUgdGhlIHN0cmVhbSwgdGhpcyBjYXVzZXMKLQkgIGxlc3MgY2FwcyByZW5lZ290aWF0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzIyOAotCi0yMDE1LTA4LTEyIDE2OjQzOjQ4ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2NWRlcGF5OiBQUFMgcmVwbGFjZXMgb2xkIFBQUyBpZiBpdCBoYXMgdGhlIHNhbWUgaWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTMyMjgKLQotMjAxNS0wOC0xMiAxNjoxMTowMCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkgIHJ0cGgyNjVkZXBheTogSW5zZXJ0IFNQUy9QUFMgTkFMcyBpbnRvIHRoZSBzdHJlYW0KLQkgIHJ0cGgyNjRkZXBheSBkb2VzIHRoZSBzYW1lIGFuZCB0aGlzIGZpeGVzIGRlY29kaW5nIG9mIHNvbWUgc3RyZWFtcyB3aXRoIDMyCi0JICBTUFMgKG9yIDI1NiBQUFMpLiBJdCBpcyBhbGxvd2VkIHRvIGhhdmUgU1BTIElEIDAgdG8gMzEgKG9yIFBQUyBJRCAwIHRvIDI1NSksCi0JICBidXQgdGhlIGZpZWxkIGluIHRoZSBjb2RlY19kYXRhIGZvciB0aGUgbnVtYmVyIG9mIFNQUyBvciBQUFMgaXMgb25seSA1Ci0JICAob3IgOCkgYml0LiBBcyBzdWNoLCAzMiBTUFMgKG9yIDI1NiBQUFMpIGFyZSBpbnRlcnByZXRlZCBhcyAwIGV2ZXJ5d2hlcmUuCi0JICBUaGlzIGxvb2tzIGxpa2UgYSBtaXN0YWtlIGluIHRoZSBwYXJ0IG9mIHRoZSBzcGVjdCBhYm91dCB0aGUgY29kZWNfZGF0YS4KLQotMjAxNS0wOC0xMiAxNTo0OTo1MCArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkgIHJ0cGgyNjVkZXBheTogaW1wbGVtZW50IHByb2Nlc3NfcnRwX3BhY2tldCgpIHZmdW5jCi0JICBGb3IgbW9yZSBvcHRpbWlzZWQgUlRQIHBhY2tldCBoYW5kbGluZzogbWVhbnMgd2UgZG9uJ3QgbmVlZCB0byBtYXAgdGhlCi0JICBpbnB1dCBidWZmZXIgYWdhaW4gYnV0IGNhbiBqdXN0IHJlLXVzZSB0aGUgbWFwcGluZyB0aGUgYmFzZSBjbGFzcyBoYXMKLQkgIGFscmVhZHkgZG9uZS4KLQkgIEJhc2VkIG9uOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMjM1Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzMjI4Ci0KLTIwMTUtMDgtMTIgMTU6MTQ6NTAgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JICBydHBoMjY1ZGVwYXk6IFVzZSBHU1RfQlVGRkVSX1BUUygpIGluc3RlYWQgb2YgR1NUX0JVRkZFUl9USU1FU1RBTVAoKQotCSAgU3dpdGNoaW5nIHRvIEdTVF9CVUZGRVJfVElNRVNUQU1QKCkgdG8gYmUgY29uc2lzdGVudCB3aXRoIG90aGVyIHJ0cCBjb2RlLgotCi0yMDE1LTA4LTEyIDE0OjU5OjUzICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwaDI2NWRlcGF5OiBwcmV2ZW50IHRyeWluZyB0byBnZXQgMCBieXRlcyBmcm9tIGFkYXB0ZXIKLQkgIFRoaXMgY2F1c2VzIGFuIGFzc2VydGlvbiBhbmQgd291bGQgbGVhZCB0byBnZXR0aW5nIGEgTlVMTCBpbnN0ZWFkCi0JICBvZiBhIGJ1ZmZlci4gV2l0aG91dCBwcm9wZXIgY2hlY2tpbmcgdGhpcyB3b3VsZCBlYXNpbHkgbGVhZCB0byBhCi0JICBzZWdmYXVsdC4KLQkgIFJlbGF0ZWQgdG8gcnB0aDI2NGRlcGF5OiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MTk5Ci0KLTIwMTUtMDctMjkgMTc6Mjk6MjggKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSAgcnRwOiByZW1vdmUgZGVhZCBhc3NpZ25tZW50Ci0JICBWYWx1ZSBzZXQgdG8gcmV0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYXQgbGVhc3Qgb25jZSBhdCB0aGUgZW5kIG9mIHRoZSB3aGlsZQotCSAgbG9vcCwgcmVtb3ZpbmcgYXNzaWdubWVudC4KLQotMjAxNS0wNC0yNCAxNjo0ODoyMyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JICByZW1vdmUgdW51c2VkIGVudW0gaXRlbXMgUFJPUF9MQVNUCi0JICBUaGlzIHdlcmUgcHJvYmFibHkgYWRkZWQgdG8gdGhlIGVudW1zIGR1ZSB0byBjYXJnbyBjdWx0IHByb2dyYW1taW5nIGFuZCBhcmUKLQkgIHVudXNlZC4KLQotMjAxNS0wMy0wNiAxNDo1NDo0MSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkgIHJ0cDogZG9ubF9wcmVzZW50IHZhcmlhYmxlIHVudXNlZAotCSAgZG9ubF9wcmVzZW50IGlzIG5vdCBpbXBsZW1lbnRlZCwgeWV0IHRoZSB2YWx1ZSBpcyBzZXQgYW5kIGNoZWNrZWQgYSBmZXcgdGltZXMuCi0JICBDbGVhbmluZyB0aGlzLgotCSAgQ0lEICMxMjQ5Njg3Ci0KLTIwMTUtMDEtMDggMTU6MzY6MDQgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NXBheS5jOgotCSAgcnRwOiB2YWx1ZSB0cnVuY2F0ZWQgdG9vIHNob3J0IGNyZWF0ZXMgZGVhZCBjb2RlCi0JICB0eXBlIGlzIHRydW5jYXRlZCB0byAwLTMxIHdpdGggIiYgMHgxZiIsIGJ1dCByaWdodCBhZnRlciB0aGF0IGl0IGlzIGNoZWNrcyBpZgotCSAgdGhlIHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gR1NUX0gyNjVfTkFMX1ZQUywgR1NUX0gyNjVfTkFMX1NQUywgYW5kCi0JICBHU1RfSDI2NV9OQUxfUFBTICh3aGljaCBhcmUgMzIsIDMzLCBhbmQgMzQgcmVzcGVjdGl2ZWx5KS4gT2J2aW91c2x5LCB0aGlzIHdpbGwKLQkgIG5ldmVyIGJlIFRydWUgaWYgdGhlIHZhbHVlIGlzIG1heGltdW0gMzEgYWZ0ZXIgdGhlIHRydW5jYXRpb24uCi0JICBUaGUgaW50ZW50aW9uIG9mIHRoZSBjb2RlIHdhcyB0byB0cnVuY2F0ZSB0byAwLTYzLgotCi0yMDE1LTAxLTA4IDE1OjI3OjQ0ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5jOgotCSAgcnRwOiBmaXggbmFsIHVuaXQgdHlwZSBjaGVjawotCSAgQWZ0ZXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRoZSBwcmV2aW91cyBjb21taXQgaXMgd3JvbmcuIFRoZSBjb2RlIGludGVuZGVkIHRvCi0JICBjaGVjayBpZiB0aGUgdHlwZSBpcyAzOSBvciB0aGUgcmFuZ2VzIDQxLTQ0IGFuZCA0OC01NS4gSnVzdCBsaWtlIGdzdGgyNjVwYXJzZS5jCi0JICBkb2VzLiBUeXBlIDQwIHdvdWxkIG5vdCBiZSBjb21wbGV0ZS4KLQotMjAxNS0wMS0wOCAxMzo0NzowOSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYzoKLQkgIHJ0cDogZml4IGRlYWQgY29kZSBhbmQgY2hlY2sgZm9yIGltcG9zc2libGUgdmFsdWVzCi0JICBuYWxfdHlwZSBpcyB0aGUgaW5kZXggZm9yIGEgR3N0SDI2NU5hbFVuaXRUeXBlIGVudW0uIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgZGVhZAotCSAgY29kZSBoZXJlOgotCSAgRmlyc3QsIGFmdGVyIGNoZWNraW5nIGlmIG5hbF90eXBlIGlzID49IDM5IHRoZXJlIGFyZSB0d28gT1IgY29uZGl0aW9uYWxzIHRoYXQKLQkgIGNoZWNrIGlmIHRoZSB2YWx1ZSBpcyBpbiByYW5nZXMgaGlnaGVyIHRoYW4gdGhhdCBudW1iZXIsIHNvIGlmIG5hbF90eXBlID49IDM5Ci0JICBmYWxscyBpbiB0aGUgVHJ1ZSBicmFuY2ggdGhvc2Ugb3RoZXIgY29uZGl0aW9ucyBhcmVuJ3QgY2hlY2tlZCBhbmQgaWYgaXQgZmFsbHMKLQkgIGluIHRoZSBGYWxzZSBicmFuY2ggYW5kIHRoZXkgYXJlIGNoZWNrZWQsIHRoZXkgd2lsbCBhbHdheXMgYWxzbyBiZSBGYWxzZS4gVGhleQotCSAgYXJlIHJlZHVuZGFudC4KLQkgIFNlY29uZCwgdGhlIGVudW0gaGFzIGEgcmFuZ2Ugb2YgMCB0byA0MC4gU28gdGhlIGNoZWNrcyBmb3IgcmFuZ2VzIGhpZ2hlciB0aGFuIDQxCi0JICBzaG91bGQgbmV2ZXIgYmUgVHJ1ZS4KLQkgIFJlbW92aW5nIHRoaXMgcmVkdW5kYW50IGNoZWNrcy4KLQkgIENJRCAxMjQ5Njg0Ci0KLTIwMTQtMTAtMTYgMTA6MzQ6MDEgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuaDoKLQkgIHJ0cDogYWRkIGgyNjUgUlRQIHBheWxvYWRlciArIGRlcGF5bG9hZGVyCi0KLTIwMTYtMDItMTUgMTE6NTE6NDYgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cG11eC5jOgotCSAgdGVzdHM6IHJ0cG11eDogRml4IGVsZW1lbnQgbWVtb3J5IGxlYWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjIwNTcKLQotMjAxNi0wMi0xMiAyMDo1NzoyOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuYzoKLQkgIG1vbm9zY29wZTogcmV3b3JrIHRoZSBzY2FsaW5nIGNvZGUKLQkgIFRoZSBydW5uaW5nIGF2ZXJhZ2Ugd2FzIHdyb25nIGFuZCB0aGUgcmVzdWx0aW5nIHNjYWxpbmcgZmFjdG9yIHdhcyBvbmx5IGhlbGQgaW4KLQkgIHBsYWNlIHVzaW5nIHRoZSBDTEFNUC4gSW4gYWRkdGlvbiB3ZSBhcmUgbm93IGNvbnZlcmluZyBxdWlja2x5IHRvIHZvbHVtZQotCSAgY2hhbmdlcy4KLQkgIEZJbmFsbHkgbm93IHdpdGggdGhpcyBjaGFuZ2UsIHdlIGNhbiBjaGFuZ2UgdGhlIHJlc29sdXRpb24gZGVmaW5lcyBhbmQKLQkgIGV2ZXJ5dGhpZ24gYWRqdXN0cy4KLQotMjAxNi0wMS0yOCAxNzowMDo1NSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jOgotCSogZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuYzoKLQkqIGdzdC9tb25vc2NvcGUvbW9ub3Njb3BlLmg6Ci0JICBtb25vc2NvcGU6IHVzZSBjb25zdGFudHMgaW4gdGhlIGRyYXdpbmcgY29kZQotCSAgTWFrZSBhbGwgdGhlIGRyYXdpbmcgb3BzIGJlIGJhc2VkIG9uIHRoZSBjb25zdGFudHMuIFRoaXMgd2F5IHdlIGNhbiBjaGFuZ2UKLQkgIHRoZSBmaXhlZCBzaXplIGF0IGxlYXN0IGF0IGNvbXBpbGUgdGltZS4KLQotMjAxNi0wMS0yOCAwOTo1MToxNyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzoKLQkgIG1vbm9zY29wZTogcmVwbGFjZSBoYXJkY29kZWQgdmFsdWVzIGJ5IGNvbnN0YW50cwotCSAgVGhpcyBhdCBsZWFzdCBlc3RhYmxpc2hlcyB0aGUgcmVsYXRpb25zaGlwLgotCi0yMDE2LTAxLTI4IDA5OjQzOjEyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbW9ub3Njb3BlL2NvbnZvbHZlLmM6Ci0JKiBnc3QvbW9ub3Njb3BlL2NvbnZvbHZlLmg6Ci0JKiBnc3QvbW9ub3Njb3BlL21vbm9zY29wZS5jOgotCSogZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuaDoKLQkgIG1vbm9zY3BlOiBtYWtlIHRoZSBjb252b2x2ZXIgdXNlIGR5bmFtaWMgbWVtb3J5Ci0JICBSZXBsYWNlIGFsbCAjZGVmaW5lcyB3aXRoIG1lbWJlcnMgYW5kIGluaXRpYWxpemUgdGhlIGNvbnZvbHZlciB3aXRoIGEgcGFyYW1ldGVyLgotCi0yMDE2LTAxLTI4IDA4OjU2OjQ0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbW9ub3Njb3BlL1JFQURNRToKLQkgIG1vbm9zY29wZTogdXBkYXRlIFJFQURNRQotCSAgV2UgY2FuIGFscmVhZHkgY3JlYXRlIG11bHRpcGxlIGluc3RhbmNlcy4KLQotMjAxNi0wMS0yOCAwODo1MzozNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jOgotCSogZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuYzoKLQkgIG1vbm9zY29wZTogY29kZSBjbGVhbnVwCi0JICBVc2UgY29uc3RhbnRzIG1vcmUgb2Z0ZW4uIENsZWFudXAgY29tbWVudHMgYW5kIGFkZCBtb3JlIHRvIGV4cGxhaW4gaG93IHRoaW5ncwotCSAgd29yay4KLQotMjAxNi0wMi0wOCAyMzo0MTozMiArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogcmVtb3ZlIGNoZWNrIGZvciBpbXBvc3NpYmxlIGNvbmRpdGlvbgotCSAgQ29tbWl0IGJkMjdhMWYzMGI0NDU4ZjJlZGVlNTNjNzZkZDA3ZmIzNTkwNGI2MWQgYWRkZWQgYSBmZXcgZXJyb3IgaGFuZGxpbmcKLQkgIG1lbW9yeSBtYW5hZ2VtZW50IGNoZWNrcy4gVGhlc2UgY2hlY2sgc3JjY2FwcyB0byBzZWUgaWYgaXQgbmVlZHMgdG8gYmUKLQkgIHVucmVmZXJlbmNlZCBiZWZvcmUgcmV0dXJuaW5nLCBpbiB0aGUgY2FzZSBvZiBpbnZhbGlkX2NhcHMgdGhpcyBnb3RvIGp1bXAKLQkgIGFsd2F5cyBoYXBwZW5zIGJlZm9yZSBzcmNjYXBzIGlzIHNldCwgc28gaXQgd2lsbCBhbHdheXMgYmUgTlVMTCBpbiB0aGlzCi0JICBlcnJvciBsYWJlbC4KLQkgIENJRCAjMTM1MjAzNQotCi0yMDE2LTAyLTA4IDEyOjQ4OjQ2ICswMTAwICBQaW90ciBEcsSFZyA8cGlvdHJkcmFnQGdtYWlsLmNvbT4KLQotCSogcG8vUE9URklMRVMuaW46Ci0JICBwbzogdXBkYXRlIFBPVEZJTEVTCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNzA1Ci0KLTIwMTYtMDItMDggMTU6MzE6NTUgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IEZpeCBzcGVsbGluZyBvZiByZWVucXVldWVpbmcKLQkgIFRvIG1hdGNoIGNvbW1pdCA3ZDcwNzRjZWYwMjcyY2Q1MTU1MDk4YmZjMmJkYTY4NDlkZDg5MjY3LiBJIGxvdmUgdGhlIGlkZWEKLQkgIG9mIGFpbWluZyBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHZvd2Vscy4KLQotMjAxNi0wMi0wOCAxMDoxNzo0OSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBGaXggc3BlbGxpbmcgb2YgcXVldWVpbmcKLQkgIERpZG4ndCBrbm93IHdoaWNoIG9uZSB0byBjaG9vc2UgYmV0d2VlbiBxdWV1aW5nIGFuZCBxdWV1ZWluZywgc28gSSBwaWNrZWQKLQkgIHRoZSBvbmUgd2l0aCB0aGUgYmlnZ2VzdCBhbW91bnQgb2Ygdm93ZWxzIGluIGEgcm93IDstUCAoYm90aCBhcmUKLQkgIGFjY2VwdGFibGUgYXBwYXJlbnRseSkKLQotMjAxNi0wMi0wNyAxNTowMjozNSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBEb24ndCBwYXNzIHRoZSBzYW1lIGRhdGEgb3ZlciBhbmQgb3ZlcgotCSAgV2UgYWxyZWFkeSBwYXNzIHRoZSBlbnRpcmUgZnJhbWUgdG8gdGhlIGRlY29kZXIuIElmIHRoZSBkZWNvZGVyIGFzayBmb3IKLQkgIG1vcmUgZGF0YSwgZG9uJ3QgcGFzcyB0aGUgc2FtZSBkYXRhIGFnYWluIGFzIHRoaXMgbGVhZHMgdG8gaW5maW5pdCBsb29wLgotCSAgSW5zdGVhZCwgc2ltcGx5IGZhaWwgdGhlIGZpbGwgZnVuY3Rpb24gdG8gc2lnbmFsIHRoZSBwcm9ibGVtIHdpdGggdGhhdAotCSAgZnJhbWUuIEl0IHdpbGwgdGhlbiBiZSBza2lwcGVkIHByb3Blcmx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTY3MAotCi0yMDE2LTAyLTA4IDAwOjEwOjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbHpvLmM6Ci0JICBtYXRyb3NrYTogZ2V0IHJpZCBvZiBfc3RkaW50LmggaW5jbHVkZQotCi0yMDE2LTAyLTA1IDIwOjAwOjU3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGV4dGVuZCB0aGUgQU1fVEVTVFNfRU5WSVJPTk1FTlQgZnJvbSBjaGVjay5tYWsKLQkgIFRvIGdldCB0aGUgQ0tfREVGQVVMVF9USU1FT1VUIGRlZmluZWQgZm9yIGFsbCB0ZXN0cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTQ3MgotCi0yMDE2LTAyLTA1IDE4OjA0OjMxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODZlNDY2MyB0byBiNjRmMDNmCi0KLTIwMTYtMDEtMzAgMTg6NDM6MzAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSAgcnRwanBlZ3BheTogU2tpcCBBUFAgYW5kIEpQRyBtYXJrZXJzIGFuZCBwcmludCB3YXJuaW5ncyBmb3IgdW5rbm93biBtYXJrZXJzCi0JICBGb3IgQVBQL0pQRyBtYXJrZXJzIHRoZSBzaXplIGlzIGZvbGxvd2luZyBhbmQgd2UgaGF2ZSB0byBza2lwIHRoYXQuIFRoaXMgaXMKLQkgIG5vdCByZWFsbHkgYSBwcm9ibGVtIHVubGVzcyB0aGUgbWFya2VyIGNvbnRhaW5zIGUuZy4gYSBwcmV2aWV3IEpQRUcgb3IKLQkgIHNvbWV0aGluZyBlbHNlIHRoYXQgd2UgbWlnaHQgaW50ZXJwcmV0ZSBhcyBhbm90aGVyIG1hcmtlci4KLQotMjAxNi0wMS0yNiAyMjozNzozMCArMDkwMCAgU2V1bmdoYSBZYW5nIDxzaC55YW5nQGxnZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGZyYW1lcmF0ZSBjYWxjdWxhdGlvbiBmb3IgZnJhZ21lbnRlZCBmb3JtYXQKLQkgIHF0ZGVtdXggY2FsY3VsYXRlcyBmcmFtZXJhdGUgdXNpbmcgZHVyYXRpb24gYW5kIHRoZSBudW1iZXIgb2Ygc2FtcGxlLgotCSAgSW4gY2FzZSBvZiBmcmFnbWVudGVkIG1wNCBmb3JtYXQsIGhvd2V2ZXIsIHRoZSBudW1iZXIgb2Ygc2FtcGxlIGNhbgotCSAgYmUgZmlndXJlIG91dCBhZnRlciBwYXJzaW5nIGV2ZXJ5IG1vb2YgYm94LiBCZWNhdXNlIHF0ZGVtdXggZG9lcyBub3QKLQkgIHBhcnNlIGV2ZXJ5IG1vb2YgaW4gUVRERU1VWF9TVEFURV9IRUFERVIgc3RhdGUsIGl0IHdpbGwgY2F1c2UgaW5jb3JyZWN0Ci0JICBmcmFtZXJhdGUgY2FsY3VsYXRpb24uCi0JICBUaGlzIHBhdGNoIHdpbGwgdHJpZ2VyIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0oKSBmb3IgZXZlcnkgbmV3IG1vb2YuCi0JICBUaGVuLCBmcmFtZXJhdGUgd2lsbCBiZSBjYWxjdWxhdGVkIGJ5IHVzaW5nIGR1cmF0aW9uIGFuZCBuX3NhbXBsZXMgb2YgdGhlIG1vb2YuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzc0Ci0KLTIwMTYtMDEtMjggMjI6MzY6MjMgKzA5MDAgIFNldW5naGEgWWFuZyA8c2gueWFuZ0BsZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGhhbmRsaW5nIHplcm8gc2VnbWVudC1kdXJhdGlvbiBlZGl0IGxpc3QKLQkgIEJhc2VkIG9uIGRvY3VtZW50IElTT19JRUNfMTQ0OTYtMTIsIGVkaXQgbGlzdCBib3ggY2FuIGhhdmUKLQkgIHNlZ21lbnQgZHVyYXRpb24gYXMgemVyby4gSXQgZG9lcyBub3QgaW1wbHkgdGhhdCBtZWRpYV9zdGFydCBlcXVhbHMgdG8KLQkgIG1lZGlhX3N0b3AuIEJ1dCwgaXQganVzdCBpbmRpY2F0ZXMgYSBzYW1wbGUgd2hpY2ggc2hvdWxkIGJlIHByZXNlbnRlZAotCSAgYXQgdGhlIGZpcnN0LiBUaGlzIHBhdGNoIGRlcml2ZXMgc2VnbWVudCBkdXJhdGlvbiB1c2luZyBtZWRpYV90aW1lCi0JICBhbmQgZHVyYXRpb24gb2YgZmlsZS4gQW5kIHNldCBkZXJpdmVkIGR1cmF0aW9uIHRvIHNlZ21lbnQtZHVyYXRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzgxCi0KLTIwMTYtMDEtMjggMjE6MzY6NTQgKzA5MDAgIFNldW5naGEgWWFuZyA8c2gueWFuZ0BsZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogZXhwb3NlIHN0cmVhbXMgd2l0aCBmaXJzdCBtb29mIGZvciBmcmFnbWVudGVkIGZvcm1hdAotCSAgSW4gY2FzZSBvZiBwdXNoIG1vZGUsIHF0ZGVtdXggZXhwb3NlIHN0cmVhbXMgYWZ0ZXIgZ290IG1vb3YgYm94LgotCSAgV2UgY2FuIG5vdCBndWFyYW50ZWUgdGhhdCBhIG1vb3YgYm94IGhhcyBzYW1wbGUgZGF0YSBzdWNoIGFzIHNhbXBsZSBkdXJhdGlvbgotCSAgYW5kIHRoZSBudW1iZXIgb2Ygc2FtcGxlIGluIHN0YmwgYm94IGZvciBmcmFnbWVudGVkIGZvcm1hdCBjYXNlLgotCSAgU28sIGlmIGEgbW9vdiBoYXMgbm8gc2FtcGxlIGRhdGEsIHN0cmVhbXMgd2lsbCBub3QgYmUgZXhwb3NlZCB1bnRpbCBnZXQgdGhlIGZpcnN0IG1vb2YuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwNzc5Ci0KLTIwMTYtMDEtMjcgMTg6NDg6MTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IENoZWNrIGZvciBzdWJzZXQgaW5zdGVhZCBvZiBub24tZW1wdHkgaW50ZXJzZWN0aW9uIGZvciBBQ0NFUFRfQ0FQUwotCi0yMDE2LTAxLTI3IDE4OjQ0OjIzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBVbnNldCBSRUNPTkZJR1VSRSBmbGFnIG9uIHNyY3BhZCB3aGVuZXZlciB3ZSBjb25maWd1cmUgbmV3IGNhcHMKLQkgIFByZXZlbnRzIGRvdWJsZS1uZWdvdGlhdGlvbiBkdXJpbmcgc3RhcnR1cCBhbmQgaW4gc29tZSBvdGhlciBjYXNlcy4KLQotMjAxNi0wMS0yNyAxNjo0MzoyMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBBZGQgbmVnb3RpYXRpb24gdW5pdCB0ZXN0cyBmb3IgYWxsIDQgbW9kZXMKLQkgIFRoZXNlIG5vdyBjaGVjayB0aGUgb3V0cHV0IGNhcHMgYmFzZWQgb24gdGhlIGlucHV0IGNhcHMgYW5kIGEgZm9sbG93aW5nCi0JICBjYXBzZmlsdGVyIGFuZCBtYWtlIHN1cmUgdGhlIGNhcHMgYXJlIGV4YWN0bHkgYXMgZXhwZWN0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYwOTk1Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwMzg4Ci0KLTIwMTYtMDEtMjYgMTc6Mzk6MjAgKzAxMDAgIFZpdmlhIE5pa29sYWlkb3UgPHZpdmlhQHRvb2xzb25haXIuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBEbyBwYXNzdGhyb3VnaCBpbiBhdXRvIG1vZGUgaWYgZG93bnN0cmVhbSBvbmx5IHN1cHBvcnRzIGludGVybGFjZWQKLQkgIElmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCSAgMSkgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY2FwcyBhcmUgY29tcGF0aWJsZQotCSAgMikgdXBzdHJlYW0gaXMgaW50ZXJsYWNlZAotCSAgMykgZG93bnN0cmVhbSBkb2Vzbid0IHN1cHBvcnQgcHJvZ3Jlc3NpdmUgbW9kZQotCSAgdGhlbiBkZWludGVybGFjZSB3aWxsIGp1c3QgZG8gcGFzc3Rocm91Z2ggaW5zdGVhZCBvZiBmYWlsaW5nIHRvIGxpbmsuCi0JICBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgZm9sbG93aW5nIHNjZW5hcmlvIGluIG1pbmQ6Ci0JICB2aWRlb3Rlc3RzcmMgISAidmlkZW8veC1yYXcsaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiICEgZGVpbnRlcmxhY2UKLQkgIG5hbWU9ZGVpbl9zcmMgISB0ZWUgbmFtZT10ICEgcXVldWUgISBkZWludGVybGFjZSBuYW1lPWRlaW5fZmlsZSAhIGZpbGVzaW5rIHQuICEKLQkgIHF1ZXVlICEgZGVpbnRlcmxhY2UgbmFtZT1kZWluX2Rlc2t0b3AgISBhdXRvdmlkZW9zaW5rCi0JICBJbiB0aGlzIGNhc2UsIGRlaW5fc3JjIHdpbGwgZG8gdGhlIGRlaW50ZXJsYWNpbmcuIEhvd2V2ZXIsCi0JICB2aWRlb3Rlc3RzcmMgISAidmlkZW8veC1yYXcsaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiICEgZGVpbnRlcmxhY2UKLQkgIG5hbWU9ZGVpbl9zcmMgISB0ZWUgbmFtZT10ICEgcXVldWUgISBkZWludGVybGFjZSBuYW1lPWRlaW5fZmlsZSAhIGZpbGVzaW5rIHQuICEKLQkgIHF1ZXVlICEgZGVpbnRlcmxhY2UgbmFtZT1kZWluX2Rlc2t0b3AgISBhdXRvdmlkZW9zaW5rIHQuICEgcXVldWUgIQotCSAgInZpZGVvL3gtcmF3LGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiAhIGZha2VzaW5rCi0JICBJbiB0aGlzIGNhc2UsIGNhcHMgYXV0by1uZWdvdGlhdGlvbiB3aWxsIG1ha2UgZGVpbl9maWxlIGFuZCBkZWluX2Rlc2t0b3AgZG8KLQkgIHRoZSBkZWludGVybGFjaW5nLCB3aGlsZSBkZWluX3NyYyB3aWxsIGJlIHBhc3N0aHJvdWdoLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MDk5NQotCi0yMDE2LTAxLTI2IDE4OjA1OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSAgZGVpbnRlcmxhY2U6IEFkZCBtb2RlPWF1dG8tc3RyaWN0Ci0JICBJbiB0aGlzIG1vZGUgd2Ugd2lsbCBwYXNzdGhyb3VnaCBhbGwgcHJvZ3Jlc3NpdmUgY2FwcyBidXQgaW50ZXJsYWNlZCBjYXBzIG11c3QgYmUKLQkgIGNhcHMgd2hlcmUgd2UgYWN0dWFsbHkgc3VwcG9ydCBkZWludGVybGFjaW5nLgotCSAgVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gYXV0byBhbmQgYXV0by1zdHJpY3QsIGF1dG8gd291bGQKLQkgIHBhc3N0aHJvdWdoIGFsbCB1bnN1cHBvcnRlZCBpbnRlcmxhY2VkIGNhcHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwMzg4Ci0KLTIwMTYtMDEtMjYgMTc6NTA6MzAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEltcGxlbWVudCByZWNvbmZpZ3VyYXRpb24gYSBiaXQgYmV0dGVyCi0JICBBbmQgZS5nLiBjb25zaWRlciByZWNvbmZpZ3VyYXRpb24gY2F1c2VkIGJ5IFJFQ09ORklHVVJFIGV2ZW50cyB0b28uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwMzg4Ci0KLTIwMTYtMDEtMjYgMTE6NTc6MDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IFJld3JpdGUgY2FwcyBuZWdvdGlhdGlvbgotCSAgUHJldmlvdXNseSB0aGUgcmVzdWx0IG9mIHRoZSBDQVBTIHF1ZXJ5IGFuZCBBQ0NFUFRfQ0FQUyBkZXBlbmRlZCBvbiB3aGF0IGtpbmQKLQkgIG9mIGNhcHMgd2VyZSBsYXN0IHNldCwgYW5kIGUuZy4gaWYgd2UgbGFzdCBoYWQgaW50ZXJsYWNlZCBjYXBzIG9yIG5vdC4gVGhhdCdzCi0JICBqdXN0IGJyb2tlbi4KLQkgIEFsc28gcHJldmlvdXNseSB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN5c21lbSBjYXBzIGZlYXR1cmVzIHdhcyByYXRoZXIgcmFuZG9tIGFuZAotCSAgdW51c3VhYmxlLgotCSAgTm93IHRoZSBiZWhhdmlvdXIgaXMgdGhlIGZvbGxvd2luZywgZGVwZW5kaW5nIG9uIHRoZSBtb2RlIHByb3BlcnR5OgotCSAgMSkgbW9kZT1kaXNhYmxlZAotCSAgQ29tcGxldGVseSBkbyBwYXNzdGhyb3VnaCBvZiBldmVyeXRoaW5nCi0JICAyKSBtb2RlPWludGVybGFjZWQKLQkgIE9ubHkgYWNjZXB0IGZvcm1hdHMgd2UgY2FuIGFjdHVhbGx5IGRlaW50ZXJsYWNlLCBhbmQgYWNjZXB0IGludGVybGFjZWQKLQkgIGFuZCBwcm9ncmVzc2l2ZSBjb250ZW50IGFuZCBhbHdheXMgcnVuIHRoZSBkZWludGVybGFjZXIgYW5kIG91dHB1dAotCSAgcHJvZ3Jlc3NpdmUgY29udGVudAotCSAgMykgbW9kZT1hdXRvIChpLmUuIHBsYXliaW4pCi0JICBBY2NlcHQgYWxsIHByb2dyZXNzaXZlIGZvcm1hdHMgYXMgcGFzc3Rocm91Z2gsIGFjY2VwdCBhbGwgZm9ybWF0cyB0aGF0IHdlCi0JICBjYW4gZGVpbnRlcmxhY2Ugb3Vyc2VsdmVzICh3aGljaCB3ZSBkbyB0aGVuKSwgYnV0IGFsc28gYWNjZXB0IGV2ZXJ5dGhpbmcKLQkgIGVsc2UgZm9yIHdoaWNoIHdlIHRoZW4ganVzdCBwYXNzdGhyb3VnaC4gSW4gYXV0byBtb2RlLCBkZWludGVybGFjaW5nIGlzIGJlc3QKLQkgIGVmZm9ydDogSWYgd2UgY2FuLCB3ZSBkZWludGVybGFjZSwgaWYgd2UgY2FuJ3Qgd2UganVzdCBvdXRwdXQgaW50ZXJsYWNlZAotCSAgY29udGVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjAzODgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA1NTMKLQotMjAxNi0wMS0yNiAxMTozNDo0MCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogUmVtb3ZlIHVudXNlZCwgb2Jzb2xldGUgYnVmZmVyYWxsb2MgY29kZQotCi0yMDE2LTAxLTI2IDE4OjUwOjM4ICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogdXNlIEFfQUFDIGluc3RlYWQgb2YgQV9BQUMvTVBFR3gveQotCSAgU29tZSBHb29nbGVDYXN0IGNvbXBhdGlibGUgZGV2aWNlcyBpZ25vcmUgQV9BQUMvTVBFR3gveSB0cmFja3M7IEFsc28gYWNjb3JkaW5nIHRvIGh0dHA6Ly93aWtpLm11bHRpbWVkaWEuY3gvaW5kZXgucGhwP3RpdGxlPU1hdHJvc2thIEFfQUFDL01QRUd4L3kgaXMgb2Jzb2xldGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjExNDQKLQotMjAxNi0wMS0yNSAxNzoyMToyNCArMDEwMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsIDx2amFxdWV6QGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYxcGF5LmM6Ci0JICBnc3Q6IEZpeCB1bmludGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MKLQkgIFdoaWxlIGNyb3NzLWNvbXBpbGluZyB3aXRoIExpbmFybyBHQ0MgNS4xLTIwMTUuMDgsIGl0IGNvbXBsYWluZWQKLQkgIGFib3V0IGEgY291cGxlIHVuaXRpYWxpemVkIHZhcmlhYmxlcy4KLQkgIFRoaXMgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlbSB0byB6ZXJvLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTA5NAotCi0yMDE2LTAxLTI1IDE1OjAzOjIzICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jOgotCSAgc3BsaXRtdXhzcmM6IHByaW50IHBvdGVudGlhbGx5IG5lZ2F0aXZlIG9mZnNldCB3aXRoIGEgc2lnbgotCi0yMDE2LTAxLTIxIDE3OjQxOjU1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IFJlLWFkZCBjb2xvcmltZXRyeSBmaWVsZCBmb3IgUkdCIGZvcm1hdHMKLQkgIFRoaXMgdGltZSwgY2hlY2sgaWYgaXQncyBhbiBSR0IgZm9ybWF0IGFuZCBzZXRzIHRoZSB0cmFuc2Zvcm1hdGlvbgotCSAgbWF0cml4IHRvIGlkZW50aXR5LiBUaGUgcmVzdCBvZiB0aGUgY29sb3JpbWV0cnkgaW5mb3JtYXRpb24gaXMKLQkgIG1lYW5pbmdmdWxsIGFuZCBzaGFsbCBiZSBrZXB0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTYyNAotCi0yMDE2LTAxLTIyIDEwOjAzOjUwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogZml4IHNSR0IgY29sb3JzcGFjZSBkZWZpbml0aW9uCi0JICBWNGwyIGNhbiBhbHNvIHVzZSB0aGUgc1JHQiBjb2xvcnNwYWNlIGZvciBZVVYgZm9ybWF0cyBhbmQgdGh1cyBuZWVkcyBhCi0JICBkZWZhdWx0IG1hdHJpeC4KLQotMjAxNi0wMS0yMSAxNToyOTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmM6Ci0JICB0YWdpbmplY3Q6IGZpeCBzYW1wbGUgcGlwZWxpbmUgaW4gZG9jcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTU3MQotCi0yMDE2LTAxLTIxIDEwOjQ5OjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogQWRkIGFkb2JlIGNvbG9yc3BhY2Ugc3VwcG9ydAotCSAgVXNlIHRoZSBuZXcgcHJpbWFyaWVzIGFuZCB0cmFuc2ZlciBmdW5jdGlvbiBmb3IgQWRvYmUgUkdCLgotCSAgRXhwbGljaXRseSBsaXN0IHRoZSBjb2xvcmltZXRyeSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IEdTdHJlYW1lcgotCSAgb25lcy4gVGhlIGRlZmF1bHRzIGZvciBCVDIwMjAsIGZvciBleGFtcGxlLCBkbyBub3QgbWF0Y2guCi0JICBFeHBsaWNpdGx5IHNldCB0aGUgbWF0cml4IG9mIFNSR0IgdG8gUkdCLgotCi0yMDE2LTAxLTIwIDEzOjQxOjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSAgdnA4ZW5jOiBFbnN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSB2YWxpZCBmcmFtZSB1c2VyIGRhdGEgYmVmb3JlIHVzaW5nIGl0Ci0JICBPdGhlcndpc2Ugd2UncmUgZ29pbmcgdG8gZGVyZWZlcmVuY2UgTlVMTCBwb2ludGVycy4KLQotMjAxNi0wMS0yMCAxMDowMjo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cHhkZWMuYzoKLQkgIHZweGRlYzogVW5yZWYgZnJhbWUgaW4gYWxsIGNvZGUgcGF0aHMgb2YgaGFuZGxlX2ZyYW1lKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA2NjYKLQotMjAxNi0wMS0xOSAyMjo0OToyMCArMDEwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBleHQvdnB4L2dzdHZweGVuYy5jOgotCSAgdnB4ZW5jOiBVbnJlZiBmcmFtZSBvbiBFUlJPUgotCSAgQWxsIGNvZGUgcGF0aHMgZm9yIGhhbmRsZV9mcmFtZSgpIG11c3Qgc29tZWhvdyB0YWtlIG93bmVyc2hpcCBvZiB0aGUgZnJhbWUsIGJlCi0JICBpdCBieSBhY3R1YWxseSB1bnJlZmZpbmcsIGZvcndhcmRpbmcgdGhlIGZyYW1lIGVsc2V3aGVyZSBvciBzdG9yaW5nIGl0IGZvcgotCSAgbGF0ZXIuCi0JICBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA2NjYKLQotMjAxNi0wMS0yMCAxODoyMDo0MyArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vwcm92aWRlci5jOgotCSAgdjRsMjogRG9uJ3QgZnJlZSBwcm9wcyBzdHJ1Y3R1cmUgdHdpY2UuCi0JICBnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfcHJvYmVfZGV2aWNlKCkgZnJlZXMgdGhlIHBhc3NlZCBwcm9wcwotCSAgc3RydWN0dXJlLCBkb24ndCBmcmVlIGl0IGFnYWluIGluIHRoZSBjYWxsZXIuCi0KLTIwMTYtMDEtMTkgMTU6MTU6MzUgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogQ2xlYW51cCB1bmVlZGVkIHJldHVybiBzdGF0ZW1lbnQKLQotMjAxNi0wMS0xOSAxNToxNDo1OSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCBzZXQgY29sb3JpbWV0cnkgZm9yIG5vbiBZVVYgZm9ybWF0cwotCSAgU2V0dGluZyBjb2xvcm1ldHJ5IGluIGNhcHMgZm9yIFJHQiBoYXZlIG5vIG1lYW5pbmcsIGJ1dCB3b3JzdCBpdAotCSAgY29uZnVzZXMgdGhlIGNvbnZlcnRlcnMgZG93bnN0cmVhbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk2MjQKLQotMjAxNi0wMS0xOSAxMzowMToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBjaGFubmVscy5jOgotCSogZ3N0L3J0cC9nc3RydHBjaGFubmVscy5oOgotCSAgcnRwOiBmaXggY29tcGlsZXIgd2FybmluZ3Mgd2l0aCBnY2MtNgotCSAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGdzdHJ0cEwxNmRlcGF5Lmg6Mjc6MCwKLQkgIGZyb20gZ3N0cnRwLmM6NzM6Ci0JICBnc3RydHBjaGFubmVscy5oOjE1NDozMzogZXJyb3I6ICdjaGFubmVsX29yZGVycycgZGVmaW5lZCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWNvbnN0LXZhcmlhYmxlXQotCSAgc3RhdGljIGNvbnN0IEdzdFJUUENoYW5uZWxPcmRlciBjaGFubmVsX29yZGVyc1tdID0KLQotMjAxNi0wMS0xOSAxNDo1NzowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogRG9uJ3QgcGxheSBhbnl0aGluZyBhZnRlciB0aGUgZW5kIG9mIHRoZSBkYXRhIGNodW5rIGV2ZW4gd2hlbiBzZWVraW5nCi0JICBFc3BlY2lhbGx5IGluIHB1c2ggbW9kZSB3ZSB3b3VsZCBjb21wbGV0ZWx5IGlnbm9yZSB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBjaHVuawotCSAgd2hlbiBub3Qgc3RvcCBwb3NpdGlvbiBpcyBnaXZlbiBmb3IgdGhlIHNlZWsuIEluc3RlYWQgbWFrZSBzdXJlIHRoYXQgdGhlIGVuZAotCSAgb2Zmc2V0IGlzIGF0IG1vc3QgdGhlIGVuZCBvZiB0aGUgZGF0YSBjaHVuayBpZiBrbm93bi4KLQkgIFdpdGhvdXQgdGhpcyB3ZSB3b3VsZCBvdXRwdXQgYW55dGhpbmcgYWZ0ZXIgdGhlIGRhdGEgY2h1bmssIHBvc3NpYmx5IGNhdXNpbmcKLQkgIGxvdWQgbm9pc2VzIGlmIHRoZSBtZWRpYSBmaWxlIGlzIGZvbGxvd2VkIGJ5IGFuIElORk8gY2h1bmsgb3IgYW4gSUQzIHRhZy4KLQotMjAxNi0wMS0xOSAxNDo1NTo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogRG9uJ3QgZG8gY2FsY3VsYXRpb25zIHdpdGggLTEgb2Zmc2V0cyB3aGVuIGhhbmRsaW5nIFNFR01FTlQgZXZlbnRzCi0JICBXZSB1c2UgdGhhdCB0byBzaWduYWwgImluZmluaXR5IiwgdGFraW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhhdCBhbmQgc29tZQotCSAgb3RoZXIgdmFsdWUgaXMgbm90IGdvaW5nIHRvIGdpdmUgdXMgYW55IHVzZWZ1bCByZXN1bHQgZm9yIHRoZSBlbmQgb2Zmc2V0cyBvZgotCSAgc2VnbWVudHMuCi0KLTIwMTYtMDEtMTggMTE6MzA6NDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIFJldmVydCAiV0lQOiBydHBqaXR0ZXJidWZmZXI6IEFkZCBSRkM3MjczIG1lZGlhIGNsb2NrIGhhbmRsaW5nIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyNzE1MDFmNjU3NmRlNGQxNDFlN2MyZjYxOGUyOGI5ZTNiMWU1YjM4LgotCSAgSXQgd2Fzbid0IG1lYW50IHRvIGJlIHB1c2hlZCB5ZXQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIGluZGljYXRlcy4KLQotMjAxNi0wMS0xMiAxNDowMToyMSAtMDgwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFjb25jaGlsbG9AZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBoYW5kbGUgcnRjcC9zcnRjcCBjYXBzIHByb3Blcmx5IHdoZW4gdXNpbmcgaW50ZXJsZWF2ZWQgZGF0YQotCSAgV2UgY2hlY2sgdGhlIHN0cmVhbSBwcm9maWxlIGFuZCB1c2UgdGhlIHByb3BlciBSVENQIGNhcHM6Ci0JICBhcHBsaWNhdGlvbi94LXNydGNwIGlmIHdlIGFyZSB1c2luZyBhIHNlY3VyZSBwcm9maWxlIGFuZAotCSAgYXBwbGljYXRpb24veC1ydGNwIG90aGVyd2lzZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA1NTYKLQotMjAxNi0wMS0wNSAxNjoxNToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgV0lQOiBydHBqaXR0ZXJidWZmZXI6IEFkZCBSRkM3MjczIG1lZGlhIGNsb2NrIGhhbmRsaW5nCi0KLTIwMTYtMDEtMTUgMTE6MzY6MzUgKzAwMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZXh0L3ZweC9nc3R2cHhlbmMuYzoKLQkgIHZwOGVuYzogUmV0dXJuIEZMT1dfRVJST1Igd2hlbiBhbiBlcnJvciBhY2N1cmVzCi0JICBGQUxTRSB3b3VsZCBtZWFuIEZMT1dfT0sKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjA2NjYKLQotMjAxNi0wMS0xNSAwMzo1Nzo0NSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmM6Ci0JICBvc3hhdWRpbzogYnJlYWsgYXMgc29vbiBhcyB0aGUgZGV2aWNlIGlzIGZvdW5kCi0JICBObyBuZWVkIHRvIGxvb3AgZnVydGhlciBpZiB0aGVyZSdzIG5vIHNpZGUtZWZmZWN0cyBmb3IgaXQKLQotMjAxNi0wMS0xNSAwMzo1Njo0OSArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmM6Ci0JICBvc3hhdWRpbzogRml4IGVycm9yIGhhbmRsaW5nIHdoZW4gc2VsZWN0aW5nL29wZW5pbmcgZGV2aWNlcwotCSAgUG9zdCBhbiBlbGVtZW50IGVycm9yIHdoZW4gdGhlIENvcmVBdWRpbyBkZXZpY2UgY2Fubm90IGJlIHNlbGVjdGVkIG9yIG9wZW5lZC4KLQkgIEFsc28gZW5zdXJlIHRoYXQgd2UgcG9zdCBhIEdTVF9FUlJPUiB3aXRoIG1vcmUgZGV0YWlsLgotCi0yMDE2LTAxLTEzIDIzOjQwOjIwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBXaGVuIGZsdXNoaW5nIG9uIEVPUywgZG9uJ3QgcHJvY2VzcyBtb3JlIGRhdGEgdGhhbiB0aGUgImRhdGEiIHNpemUKLQkgIEV2ZW4gaWYgd2UgaGF2ZSBtb3JlIGRhdGEgcXVldWVkIHVwIHdoZW4gZmx1c2hpbmcgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgZGF0YQotCSAgY2h1bmssIGRvbid0IHByb2Nlc3MgYW5kIG91dHB1dCBpdC4gSWYgdGhlIGRhdGEgc2l6ZSBpcyBrbm93biwgdGhpcyBsaWtlbHkKLQkgIGNvbnRhaW5zIGFub3RoZXIgY2h1bmsgKGUuZy4gYW4gSU5GTyBjaHVuaykgb3IgdGhpbmdzIGxpa2UgSUQzIHRhZ3MuIEp1c3QKLQkgIG91dHB1dHRpbmcgdGhlbSBhcyBpZiB0aGV5IHdlcmUgZGF0YSBpcyBnb2luZyB0byBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW91cgotCSAgYW5kIHVucGxlYXNhbnQgYXVkaW8gbm9pc2VzLgotCi0yMDE0LTA4LTI5IDE1OjQwOjIzICswMjAwICBBbnRvbmlvIE9zcGl0ZSA8YW8yQGFvMi5pdD4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jOgotCSAgdGVzdHM6IGZpeCBhIHRoaW5rbyBpbiB0aGUgd2F2ZW5jIGV4YW1wbGUKLQkgIFRoZSBjb2RlIGlzIHN1cHBvc2VkIHRvIGZvbGxvdyBzb21laG93IHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cywgdGhhdAotCSAgaXMgdG8gaGF2ZSBvbmUgY2hhbm5lbCB3aXRoIGEgd2F2ZSBvZiBmcmVxIDQ0MCBhbmQgdGhlIG90aGVyIGNoYW5uZWwKLQkgIHdpdGggYSB3YXZlIG9mIGZyZXEgODgwLCBidXQgYW4gb2ZmIGJ5IG9uZSBlcnJvciByZXN1bHRzIGluIGZyZXF1ZW5jaWVzCi0JICBvZiAwIGFuZCA0NDAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NjczCi0KLTIwMTQtMDgtMjkgMTU6MDc6NTggKzAyMDAgIEFudG9uaW8gT3NwaXRlIDxhbzJAYW8yLml0PgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxlYXZlOiBGaXggdGhlIGV4YW1wbGUgYnkgc2V0dGluZyBjaGFubmVsLW1hc2tzIGluIHRoZSBzaW5rIHBhZHMKLQkgIFRoZSBjdXJyZW50IGV4YW1wbGUgZG9lcyBub3Qgd29yaywgaXQgZmFpbHMgd2l0aDoKLQkgIEVSUk9SOiBmcm9tIGVsZW1lbnQgL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3REZWNvZGVCaW46ZGVjb2RlYmluMC9Hc3RXYXZQYXJzZTp3YXZwYXJzZTA6IEludGVybmFsIGRhdGEgZmxvdyBlcnJvci4KLQkgIGdzdHdhdnBhcnNlLmMoMjE3OCk6IGdzdF93YXZwYXJzZV9sb29wICgpOiAvR3N0UGlwZWxpbmU6cGlwZWxpbmUwL0dzdERlY29kZUJpbjpkZWNvZGViaW4wL0dzdFdhdlBhcnNlOndhdnBhcnNlMDoKLQkgIHN0cmVhbWluZyB0YXNrIHBhdXNlZCwgcmVhc29uIG5vdC1uZWdvdGlhdGVkICgtNCkKLQkgIFRoaXMgaXMgYmVjYXVzZSBuZWdvdGlhdGlvbiB3aXRoIHdhdmVuYyBnZXRzIG1lc3NlZCB1cCBieSB0aGUgbWlzc2luZwotCSAgY2hhbm5lbCBwb3NpdGlvbnMgY29uZmlndXJhdGlvbi4KLQkgIFRoZSBwcm9wZXIgd2F5IHRvIGRlZmluZSB0aGUgY2hhbm5lbCBsYXlvdXQgd2hlbiB1c2luZyB0aGUgaW50ZXJsZWF2ZQotCSAgZWxlbWVudCBpbiBjb2RlIHdvdWxkIGJlIHRvIHNldCB0aGUgY2hhbm5lbC1wb3NpdGlvbnMgcHJvcGVydHksIGJ1dAotCSAgZ3N0LWxhdW5jaC0xLjAgZG9lcyBub3Qga25vdyBob3cgdG8gZGVhbCB3aXRoIGFycmF5czsgc28gdGhlIGV4YW1wbGUKLQkgIHBpcGVsaW5lIHdvcmtzIGFyb3VuZCB0aGUgaXNzdWUgYnkgc2V0dGluZyB0aGUgY2hhbm5lbC1tYXNrcyBpbiB0aGUgc2luawotCSAgcGFkcy4KLQkgIEFsc28gZml4IGEgcmVwZXRpdGlvbiBpbiB0aGUgZGVpbnRlcmxlYXZlIGV4YW1wbGUgZGVzY3JpcHRpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU2NzMKLQotMjAxNi0wMS0xMSAxNjoyOTo1NSArMDAwMCAgVGltIFNoZXJpZGFuIDx0aW0uc2hlcmlkYW5AaW1ndGVjLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5jOgotCSAgc2JjcGFyc2U6IEZpeCBmcmFtZSBsZW5ndGggY2FsY3VsYXRpb24KLQkgIFNCQyBmcmFtZSBsZW5ndGggY2FsY3VsYXRpb24gd2Fzbid0IGJlaW5nIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgYnl0ZQotCSAgKGFzIHNwZWNpZmllZCBpbiB0aGUgQTJEUCAxLjAgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiAxMi45KS4gVGhpcyBjb3VsZAotCSAgY2F1c2UgJ3N0ZXJlbycgYW5kICdqb2ludCBzdGVyZW8nIG1vZGUgU0JDIHN0cmVhbXMgdG8gaGF2ZSBpbmNvcnJlY3RseQotCSAgY2FsY3VsYXRlZCBmcmFtZSBsZW5ndGhzLgotCSAgSW5jb3JyZWN0IGZyYW1lIGxlbmd0aCBjYWxjdWxhdGlvbiBjYXVzZXMgZnJhbWUgY29hbGVzY2luZyB0byBmYWlsLCBhcwotCSAgc3Vic2VxdWVudCBmcmFtZXMgaW4gdGhlIHN0cmVhbSBhcmVuJ3QgZm91bmQgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9ucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI0NDYKLQotMjAxNi0wMS0xMCAyMjo1NDoxMiAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBkZW1vdGUgd2FybmluZyBvbiB3cm9uZyByZXNlcnZlZCB2YWx1ZSB0byBmaXhtZQotCSAgV2UgYXJlIGxpa2VseSBqdXN0IHBhcnNpbmcgYSBiYWNrd2FyZC1jb21wYXRpYmxlIHN0cmVhbSB3ZQotCSAgZG9uJ3QgZnVsbHkgc3VwcG9ydC4KLQotMjAxNi0wMS0wOCAxNjoyNzowNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBzaW1wbGlmeSBjYXBzIHNlbGVjdGlvbgotCSAgVGhlIGRvd25zdHJlYW0gY2FwcyBxdWVyeSB3aXRoIGEgZmlsdGVyIGFscmFlZHkgZ2l2ZXMgdXMgdGhlIHBvc3NpYmxlCi0JICBpbnRlcnNlY3Rpb24gc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpdCBhZ2FpbiB3aXRoIGRvd25zdHJlYW0KLQkgIGlmIGl0IGlzIHN1cHBvcnRlZC4gSnVzdCB0cnkgdG8gc2V0IGl0IGRpcmVjdGx5LgotCi0yMDE2LTAxLTA3IDIwOjQyOjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiBmaXggdW5uZWNlc3Nhcnkgc3ViLWJ1ZmZlciBjcmVhdGlvbgotCSAgV2UgY3JlYXRlIGEgc3ViLWJ1ZmZlciBqdXN0IHRvIGNvcHkgb3ZlciBpdHMgbWV0YXMgYW5kIHRoZW4KLQkgIHRocm93IGl0IGF3YXkgaW1tZWRpYXRlbHksIGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBpbnB1dCBidWZmZXIKLQkgIGRpcmVjdGx5LgotCi0yMDE2LTAxLTA3IDIwOjM4OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuYzoKLQkgIHJ0cGR2ZGVwYXk6IGZpeCB1bm5lY2Vzc2FyeSBzdWItYnVmZmVyIGNyZWF0aW9uCi0JICBXZSBjcmVhdGUgYSBzdWItYnVmZmVyIGp1c3QgdG8gY29weSBvdmVyIGl0cyBtZXRhcyBhbmQgdGhlbgotCSAgdGhyb3cgaXQgYXdheSBpbW1lZGlhdGVseSwganVzdCB1c2UgdGhlIG9yaWdpbmFsIGlucHV0IGJ1ZmZlcgotCSAgZGlyZWN0bHkuCi0KLTIwMTYtMDEtMDcgMjA6MzQ6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkgIHJ0cGFtcmRlcGF5OiBmaXggdW5uZWNlc3Nhcnkgc3ViLWJ1ZmZlciBjcmVhdGlvbgotCSAgV2UgY3JlYXRlIGEgc3ViLWJ1ZmZlciBqdXN0IHRvIGNvcHkgb3ZlciBpdHMgbWV0YXMgYW5kIHRoZW4KLQkgIHRocm93IGl0IGF3YXkgaW1tZWRpYXRlbHksIGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBpbnB1dCBidWZmZXIKLQkgIGRpcmVjdGx5LgotCi0yMDE2LTAxLTA3IDIwOjI3OjI5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwdnJhd2RlcGF5OiBmaXggbWFqb3IgbWVtb3J5IGxlYWsgYW5kIHBlcmZvcm1hbmNlIGlzc3VlCi0JICBXZSBjYWxsIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkKCkgd2hpY2ggY3JlYXRlcyBhIHN1Yi1idWZmZXIKLQkgIG9mIGVhY2ggaW5wdXQgYnVmZmVyLCBqdXN0IHRvIGNvcHkgb3ZlciBtZXRhcywgYW5kIHRoZW4gbGVhayBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjAyODkKLQotMjAxNi0wMS0wOCAxNTozMjo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSAgcmdhbmFseXNpczogRml4IGNvbXBpbGVyIHdhcm5pbmdzIGluIHRoZSB1bml0IHRlc3QKLQkgIGVsZW1lbnRzL3JnYW5hbHlzaXMuYzo5MTk6NjY6IGVycm9yOiBzaGlmdGluZyBhIG5lZ2F0aXZlIHNpZ25lZCB2YWx1ZSBpcyB1bmRlZmluZWQKLQkgIFstV2Vycm9yLC1Xc2hpZnQtbmVnYXRpdmUtdmFsdWVdCi0JICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfc3RlcmVvICg4MDAwLCAxNiwgNTEyLCAtMSA8PCAxNCwgMCkpOwotCSAgfn4gXgotCSAgZWxlbWVudHMvcmdhbmFseXNpcy5jOjkyOTo2OTogZXJyb3I6IHNoaWZ0aW5nIGEgbmVnYXRpdmUgc2lnbmVkIHZhbHVlIGlzIHVuZGVmaW5lZAotCSAgWy1XZXJyb3IsLVdzaGlmdC1uZWdhdGl2ZS12YWx1ZV0KLQkgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9zdGVyZW8gKDgwMDAsIDE2LCA1MTIsIDAsIC0xIDw8IDE0KSk7Ci0JICB+fiBeCi0JICBlbGVtZW50cy9yZ2FuYWx5c2lzLmM6OTM5OjY0OiBlcnJvcjogc2hpZnRpbmcgYSBuZWdhdGl2ZSBzaWduZWQgdmFsdWUgaXMgdW5kZWZpbmVkCi0JICBbLVdlcnJvciwtV3NoaWZ0LW5lZ2F0aXZlLXZhbHVlXQotCSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2ludDE2X21vbm8gKDgwMDAsIDE2LCA1MTIsIC0xIDw8IDE0KSk7Ci0JICB+fiBeCi0KLTIwMTYtMDEtMDUgMTg6MTM6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGRvbid0IG1hcCBidWZmZXIgbXVsdGlwbGUgdGltZXMgd2hlbiBwYXJzaW5nCi0KLTIwMTYtMDEtMDcgMTg6MjA6MzAgKzAyMDAgIFN0ZXZlbiBIb3ZpbmcgPHNoQGJpZ2Jyb3RoZXIubmw+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2E6IFN0b3JlIHN1YnRpdGxlIHN0cmVhbSBjb3VudCBpbiB0aGUgY29ycmVjdCB2YXJpYWJsZQotCSAgQW5kIGRvbid0IG92ZXJyaWRlIHRoZSB2aWRlbyBzdHJlYW0gY291bnQgaW5zdGVhZC4KLQotMjAxNi0wMS0wNSAxODo1OTowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYzoKLQkgIGVxdWFsaXplcjogVGhlIGNoaWxkLXByb3h5IEFQSSBpcyBHT2JqZWN0IGJhc2VkIGluIDEueAotCSAgTm90IEdzdE9iamVjdCBhbnltb3JlLgotCi0yMDE1LTA1LTIxIDE3OjQxOjEyICswMjAwICBQYWJsbyBBbnRvbiA8cGFibG8uYW50b25Adm9kYWx5cy1sYWJzLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMi0qOiBDb25maWd1cmluZyBvdXRwdXQgcG9vbCBjb3JyZWN0bHkgZm9yIHVzaW5nIGRyaXZlcnMgbWluX2J1ZmZlciBpZiBwcmVzZW50LgotCSAgU2lnbmVkLW9mZi1ieTogUGFibG8gQW50b24gPHBhYmxvLmFudG9uQHZvZGFseXMtbGFicy5jb20+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NzM2Ci0KLTIwMTUtMTItMzEgMTU6NDY6MzEgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogYWRkIGRlYnVnIG1zZyBvbiBDUkMgbWlzbWF0Y2ggd2hpbGUgdmFsaWRhdGluZyBmcmFtZSBoZWFkZXIKLQotMjAxNS0xMi0zMSAxNjowMDo0OSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBkcm9wIHVubmVlZGVkIGJyYWNlcyBhdCBfcGFyc2VfZnJhbWUoKSBleGl0Ci0JICBBZGRpdGlvbmFsbHksIGRyb3AgcmVkdW5kYW50IGNvbW1lbnQgJiBsaW5lIGJyZWFrCi0KLTIwMTUtMTItMzEgMTU6NTU6MTggLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogbWlub3IgZ3JhbW1hciBjb3JyZWN0aW9uCi0KLTIwMTUtMTItMzEgMTU6MzQ6NTcgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogdXBkYXRlIFVSTHMgb24gcG9pbnRlcnMgdG8gb25saW5lIHNwZWMKLQotMjAxNS0xMi0zMSAxNDo0MDoxNSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBtYWtlIGJ1ZmZlciBEVFMgc2V0dGluZyBleHBsaWNpdGx5IHVuY29uZGl0aW9uYWwKLQkgIFdlIGFyZSBzZXR0aW5nIGl0IHRvIFBUUyByZWdhcmRsZXNzIG9mIGJsb2NrX3N0cmF0ZWd5Ci0KLTIwMTUtMTItMzEgMTQ6MjE6NDAgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogYWRkIGFjdHVhbCBpbnZhbGlkIGJsb2NrIHR5cGUgdG8gd2FybmluZwotCSAgRm9yIHNvbWVvbmUgdGhhdCByZWFkIHRoZSBzcGVjIGlzIGNsZWFyIHRoZSBvbmx5ICppbnZhbGlkKgotCSAgZGF0YSBibG9jayB0eXBlIGlzIDEyNy4gRm9yIHRoZSByZXN0LCBpdHMgdXNlZnVsIGluZm9ybWF0aW9uLgotCSAgQWRkaXRpb25hbGx5LiB2YWx1ZXMgNy0xMjYgYXJlIGN1cnJlbnRseSByZXNlcnZlZCBieSB0aGUKLQkgIHNwZWMgc28gdGhlIHNpdHVhdGlvbiBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KLQotMjAxNS0xMi0zMSAxNDoxMjozNiAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiB1c2Ugc2hpZnQgaW5zdGVhZCBvZiBtYXNrICYgY29tcAotCSAgV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBvbiB0aGUgZmlyc3QgYml0IG9mIHRoZSBmaXJzdAotCSAgYnl0ZSBvZiB0aGUgbWV0YWRhdGEgYmxvY2sgaGVhZGVyIHRvIGZpZ3VyZSBvdXQgd2hldGhlcgotCSAgaXMgbWFya2VkIGFzIHRoZSBsYXN0IG9uZS4gVGhlIHNoaWZ0IG1ha2VzIGl0IHF1aXRlCi0JICBjbGVhcmVyLgotCi0yMDE1LTEyLTMxIDEyOjUyOjEzIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IHdhcm4gb24gd2lzaGZ1bCBwYXJzaW5nIG9mIHdlaXJkIGhlYWRlcnMKLQkgIElmIHdlIGdldCBhbnl0aGluZyBmcm9tIDcgdG8gMTI2IGFzIHR5cGUgd2hlbiBwYXJzaW5nCi0JICBhIG1ldGFkYXRhIGJsb2NrIGhlYWRlciwgd2UgYXJlIGxpa2VseSBkZWFsaW5nIHdpdGggYQotCSAgRkxBQyBzdHJlYW0gdmVyc2lvbiB3ZSBkb24ndCBmdWxseSB1bmRlcnN0YW5kLiBJc3N1ZQotCSAgYSB3YXJuaW5nIGlmIHNvLgotCSAgRG9jdW1lbnQgZnVuY3Rpb24gYXNzdW1wdGlvbnMgcmVnYXJkaW5nIHRoZSBwYXNzZWQtb24KLQkgIHR5cGUgd2hpbGUgYXQgdGhpcy4KLQotMjAxNS0xMi0zMSAxMTozMzo0NSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBzaG93IG1lYW5pbmdmdWwgaW5mbyBvbiBmcmFtZSBDUkMgY2hlY2sKLQkgIEFzIENSQ3MgYXJlIGNhbGN1bGF0ZWQgZm9yIHRoZSBjb21wYXJpdGlvbiBhbHJlYWR5LCB3ZQotCSAgbWlnaHQgYXMgd2VsbCAoY2hlYXBseSkgaW5mb3JtIHRoZSB1c2VyIGhvdyB0aGUgbnVtYmVycwotCSAgZGlmZmVyIGlmIGEgbWlzc21hdGNoZWQgcGFpciBpcyBmb3VuZC4KLQkgIFdoaWxlIGF0IGl0OgotCSAgUmVwaHJhc2UgY2FuZGlkYXRlLWZyYW1lIG1lc3NhZ2UgdG8gbWFrZSBtb3JlIHNlbnNlCi0KLTIwMTUtMTItMzEgMDI6NDA6NDMgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZHJvcCByZW1haW5pbmcgdHJhaWxpbmcgd2hpdGVzcGFjZQotCi0yMDE1LTEyLTMxIDAyOjE1OjA2IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGRyb3Agc3VwZXJmbG91cyBlbHNlIGNsYXVzZXMKLQotMjAxNS0xMi0zMSAwMTowOTo1MSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBmYWN0b3Igb3V0IGJ1ZmZlciB0aW1lIGFuZCBvZmZzZXQgcmVzZXR0aW5nCi0JICBBdm9pZHMgbXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgcmVzZXR0aW5nIHBhdHRlcm4KLQotMjAxNS0xMi0zMSAwMDo1NDo0OCAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBtb3ZlIGJsb2NrIGhhbmRsaW5nIGJ5IHR5cGUgb3V0IG9mIF9wYXJzZV9mcmFtZSgpCi0KLTIwMTUtMTAtMDcgMTg6NTE6MjUgKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiByZXBsYWNlIGR1cGxpY2F0ZWQgY29kZXMgdG8gY2FsbCBuZXcgYmFzZSBzZHAgYXBpcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTg4MAotCi0yMDE1LTEyLTMwIDEyOjE2OjU2IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGRyb3AgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgb24gX2hlYWRlcl9pc192YWxpZCgpCi0JICBGaXggdGhlIHJhdGhlciB2YWd1ZSBlcnJvciBtZXNzYWdlIHdoaWxlIGF0IGl0LgotCi0yMDE1LTEyLTMwIDAxOjU2OjI2IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IHJld29yayBnc3RfZmxhY19wYXJzZV9mcmFtZV9pc192YWxpZCgpCi0JICBkcm9wIHVubmVjZXNzYXJ5IG5lc3RpbmcgbG9va2luZyBmb3IgZW5kIG9mIGZyYW1lCi0KLTIwMTUtMTItMzAgMDA6Mzc6MDQgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZmFjdG9yIG91dCBjb250ZXh0IGNsZWFyaW5nIHJvdXRpbmUKLQotMjAxNS0xMi0yOSAxODowNTo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBHdWFyZCBhZ2FpbnN0IG5vIGNvZGVjIGRhdGEgaW4gcHJvcmVzIGNhcHMgY3JlYXRpb24KLQkgIENJRCAxMzQ2NTMyCi0KLTIwMTUtMTItMjkgMTc6NTg6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnB4ZGVjLmM6Ci0JICB2cHhkZWM6IEluaXRpYWxpemUgYnVmZmVyIHZhcmlhYmxlIHRvIE5VTEwKLQkgIEZhbHNlIHBvc2l0aXZlIGJ1dCB0cml2aWFsIHRvIGZpeCBhbmQgcG9zc2libHkgY2F1c2luZyBjb21waWxlciB3YXJuaW5ncyBhdAotCSAgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlIHRvby4KLQkgIENJRCAxMzQ2NTM1Ci0KLTIwMTUtMDctMjcgMTU6NTM6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuYzoKLQkgIHY0bDJkZXZpY2Vwcm92aWRlcjogYWRkIHByb3BlcnRpZXMgdG8gdGhlIGRldmljZQotCSAgQWRkIHByb3BlcnRpZXMgdG8gdGhlIGRldmljZSB3aXRoIGV4YWN0bHkgdGhlIHNhbWUga2V5cyBhbmQgc2VtYXRpY3MKLQkgIGFzIHdoYXQgcHVsc2VhdWRpbyB1c2VzIGFzIHByb3BlcnR5IGtleXMuCi0JICBBbHNvIGhhbmRsZSB0aGUgY2FzZSB3aGVuIGEgZGV2aWNlIGlzIHByb2JlZCBtYW51YWxseSBhbmQgbm90IHRocm91Z2ggZ3VkZXYuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTc1OTc4MAotCi0yMDE1LTEyLTI1IDExOjQxOjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBGcmVlIHRoZSB2YXJpb3VzIGJ1ZmZlcnMgaW4gR3N0QmFzZVRyYW5zZm9ybTo6c3RvcCgpCi0JICBQcmV2aW91c2x5IHdlIGxlYWtlZCB0aGVtIGNvbXBsZXRlbHksIGJ1dCBhcyB0aGV5J3JlIHNwZWNpZmljIHRvIHRoZSBjYXBzCi0JICBmcmVlaW5nIHRoZW0gaW4gc3RvcCgpIGluc3RlYWQgb2YgZmluYWxpemUoKSBtYWtlcyBtb3N0IHNlbnNlLgotCi0yMDE1LTEyLTI0IDE1OjI4OjA2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuNy4xID09PQotCi0yMDE1LTEyLTI0IDE0OjE2OjIxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMS43LjEKLQotMjAxNS0xMi0yNCAxMzoxOToyNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNS0xMi0yNCAxMjoyMjozMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vY3MucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE1LTEyLTIxIDA5OjU3OjMzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBkcm9wIGZsdXNoZXMgZnJvbSBvdXIgb3duIG9mZnNldCBzZWVrCi0JICBQcmV2ZW50cyBkb3duc3RyZWFtIGZyb20gcmVjZWl2aW5nIGZsdXNoZXMgZm9yIGEgc2VlayBvbmx5IGluCi0JICB1cHN0cmVhbS4gVGhvc2Ugc2Vla3MgYXJlIG9ubHkgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSByaWdodAotCSAgb2Zmc2V0IHdoZW4gc2tpcHBpbmcgb3IgcmV0dXJuaW5nIHRvIHF0IGF0b21zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODkyOAotCi0yMDE1LTExLTExIDE2OjUzOjE5ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQWx3YXlzIHNldCB0aGUgY2hhbm5lbCBtYXNrIGZvciBQQ00gc3RyZWFtcwotCSAgSnVzdCB1c2UgdGhlIGdzdF9hdWRpb19jaGFubmVsX2dldF9mYWxsYmFja19tYXNrIGZ1bmN0aW9uIGZvciBub3cgYXMKLQkgIHRoZSBzcGVjaWZpY2F0aW9uIGlzIHRvbyBjb21wbGljYXRlZCBhbmQgbm9ib2R5IGltcGxlbWVudHMgaXQuCi0KLTIwMTUtMTItMjEgMTE6Mzc6MjYgKzAxMDAgIFRob21hcyBSb29zIDx0aG9tYXMucm9vc0BpbmR1c3Ryb25pYy5kZT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBGaXggc2xlZXAgZm9yIGJ1ZmZlci10aW1lIGxvd2VyIHRoYW4gMjAwMDAwCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4NjgwCi0KLTIwMTUtMTItMjEgMTI6MzE6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogVXNlIC1Cc3ltYm9saWMtZnVuY3Rpb25zIGlmIGF2YWlsYWJsZQotCSAgV2hpbGUgdGhpcyBpcyBtb3JlIHVzZWZ1bCBmb3IgbGlicmFyaWVzLCBzb21lIG9mIG91ciBwbHVnaW5zIHdpdGggbXVsdGlwbGUKLQkgIGZpbGVzIGFuZCBzb21lIGludGVybmFsIEFQSSBjYW4gYWxzbyBiZW5lZml0IGZyb20gdGhpcy4KLQotMjAxNS0xMi0xOCAxNTozNDo1MiArMDAwMCAgV2lsbGlhbSBNYW5sZXkgPHdpbGxAd2lsbGlhbW1hbmxleS5uZXQ+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5oOgotCSAgcHJvZ3Jlc3NyZXBvcnQ6IGFkZCBzdXBwb3J0IGZvciB1c2luZyBmb3JtYXQ9YnVmZmVycyB3aXRoIGRvLXF1ZXJ5PWZhbHNlCi0JICBUaGlzIGlzIHVzZWZ1bCBmb3IgaW52ZXN0aWdhdGluZyBhbmQgZGVidWdnaW5nIHBpcGVsaW5lcyB3aGljaCBhcmUKLQkgIHByb2R1Y2luZyBidWZmZXJzIGF0IGEgc2xvd2VyL2Zhc3RlciByYXRlIHRoYW4geW91IHdvdWxkIGV4cGVjdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk2MzUKLQotMjAxNS0xMi0xOCAxNTo0OTo0MyAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBVcGRhdGUgZm9ybWF0cyB0YWJsZQotCSAgVGhpcyBjaGFuZ2UgYWRkIGFsbCB0aGUgbmV3IFJHQiBiYXNlZCBmb3JtYXQuIFRob3NlIGZvcm1hdCByZW1vdmVzIHRoZQotCSAgYW1iaWd1aXR5IHdpdGggdGhlIEFMUEhBIGNoYW5uZWwuIFNvbWUgb3RoZXIgbWlzc2luZyBtdWx0aXBsYW5hciBmb3JtYXQKLQkgIGhhcyBiZWVuIGFkZGVkIHdpdGggc29tZSBhZGRpdGlvbmFsIGNsZWFudXAuCi0KLTIwMTUtMTItMTggMDU6MTc6MTUgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogRG9uJ3Qgd3JpdGUgaW52YWxpZCBlZGl0IGxpc3Qgc3RhcnQgdGltZS4KLQkgIEF2b2lkIHdyaXRpbmcgYSBuZWdhdGl2ZSBudW1iZXIgYXMgYSBsYXJnZSBwb3NpdGl2ZQotCSAgaW50ZWdlciBpbiBhbiBlZGl0IGxpc3Qgd2hlbiB0aGUgZmlyc3RfdHMgaXMgc21hbGxlcgotCSAgdGhhbiB0aGUgZmlyc3RfZHRzIC0gd2hpY2ggY2FuIGhhcHBlbiB3aGVuIHRoZSBmaXJzdAotCSAgcGFja2V0IHJlY2VpdmVkIGhhcyBhIFBUUyBidXQgbm8gRFRTLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTYxNQotCi0yMDE1LTEyLTA0IDIzOjE2OjQ1ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogT25seSB1cGRhdGUgcnVubmluZyB0aW1lIHdoZW4gaXQgaW5jcmVhc2VzLgotCSAgRG9uJ3QgaW5jcmVtZW50IHJ1bm5pbmcgdGltZSBmcm9tIGV2ZXJ5IGJ1ZmZlci4gVGhlIGNvcnJlY3QKLQkgIGxvZ2ljIHRvIG9ubHkgaW5jcmVtZW50IHdoZW4gcnVubmluZyB0aW1lIGFkdmFuY2VzIGlzIGEKLQkgIGxpdHRsZSBmdXJ0aGVyIGRvd24sIHNvIGRlbGV0ZSB0aGlzIGxlZnQtb3ZlciBsaW5lLgotCi0yMDE1LTExLTE4IDExOjAxOjIwICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thLW11eDogSW1wbGVtZW50IHByb3JlcyBzdXBwb3J0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MjU4Ci0KLTIwMTUtMTEtMTggMTY6MjA6MzggKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIG1hdHJvc2thLWRlbXV4OiBQbGF5IFByb1JlcyB2aWRlbyBzdHJlYW1zCi0JICBHZW5lcmF0ZSB2aWRlby94LXByb3JlcyBjYXBzIGZvciBQcm9SZXMgdmlkZW8gc3RyZWFtcy4KLQkgIEV2ZXJ5IGZyYW1lIG5lZWRzIGFuIDggYnl0ZSBoZWFkZXIgcHJlcGVuZGVkLCBhcyBkZXNjcmliZWQgaW4KLQkgIGh0dHA6Ly93aWtpLm11bHRpbWVkaWEuY3gvaW5kZXgucGhwP3RpdGxlPUFwcGxlX1Byb1JlcyNGcmFtZV9sYXlvdXQKLQkgIHNvIGRvIHRoYXQgaW4gYSBwb3N0LXByb2Nlc3NpbmcgY2FsbGJhY2suCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MjU4Ci0KLTIwMTUtMTItMTggMTA6MTg6MDkgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuaDoKLQkgIGR2ZGVjOiBSZW1vdmUgdW51c2VkIGZpZWxkcwotCSAgUmVtb3ZlIHVudXNlZCBmaWVsZHMgZnJhbWVfbGVuIGFuZCBzcGFjZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTYxNAotCi0yMDE1LTEyLTE3IDE2OjAzOjA0ICswMTAwICBWaW5jZW50IERlaG9ycyA8dmluY2VudC5kZWhvcnNAb3BlbndpZGUuZnI+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkgIHJ0cGoya2RlcGF5OiBQdXNoIG9uZSBKUEVHMjAwMCBmcmFtZSBwZXIgYnVmZmVyLCBub3QgYSBidWZmZXIgbGlzdCB3aXRoIG11bHRpcGxlIGJ1ZmZlcnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg5NDMKLQotMjAxNS0xMi0xNiAxMTo0Mzo1OCArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JICBkdjEzOTQ6IGxvZyBlcnJvciBpZiBmYWlsZWQgdG8gc2V0IHNvY2tldCBzdGF0dXMgZmxhZwotCSAgTG9nIGFuIGVycm9yIG1lc3NhZ2UgaWYgZmFpbGVkIHRvIHNldCB3cml0ZSBvciByZWFkIHNvY2tldCBhcwotCSAgbm9uLWJsb2NraW5nLgotCSAgQ0lEIDExMzk2MDgKLQkgIENJRCAxMTM5NjA5Ci0KLTIwMTUtMTItMTUgMTc6MTA6MDAgKzAwMDAgIERhdmUgQ3JhaWcgPGRhdmVjcmFpZ0B1bmJhbGFuY2VkYXVkaW8uY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogQ2hlY2sgZm9yIE5VTEwgcmV0dXJuIHZhbHVlIG9mIGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcygpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU5NTAzCi0KLTIwMTUtMTItMTYgMDk6MzU6NTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSAgZG9jczogdXBkYXRlIHRvIGdpdAotCi0yMDE1LTEyLTE1IDE0OjI3OjIyIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC92cHgvTWFrZWZpbGUuYW06Ci0JICB2cHg6IEFkZCBtaXNzaW5nIGhlYWRlcnMgaW4gTWFrZWZpbGUuYW0KLQkgIFRoaXMgZml4ZXMgZGlzdGNoZWNrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTUxMAotCi0yMDE1LTA5LTI0IDEyOjU3OjAwICswNTMwICBQcmFzaGFudCBHb3Rhcm5lIDxwcy5nb3Rhcm5lQHNhbXN1bmcuY29tPgotCi0JKiBleHQvdnB4L01ha2VmaWxlLmFtOgotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmg6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSogZXh0L3ZweC9nc3R2cDllbmMuaDoKLQkqIGV4dC92cHgvZ3N0dnB4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZweGVuYy5oOgotCSAgdnB4OiBjcmVhdGVkIGNvbW1vbiBiYXNlY2xhc3MgR3N0VlBYRW5jCi0JICBHc3RWUDhFbmMgYW5kIEdzdFZQOUVuYyBoYXMgYWxtb3N0IDgwJSBjb2RlIGluIGNvbW1vbi4KLQkgIGNyZWF0ZWQgY29tbW9uIGJhc2VjbGFzcyBHc3RWUFhFbmMgZm9yIEdzdFZQOEVuYyBhbmQgR3N0VlA5RW5jCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NTEwCi0KLTIwMTUtMTItMTUgMTI6NTc6NTMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDlkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnB4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZweGRlYy5oOgotCSAgdnB4ZGVjOiBSZW1vdmUgdW5uZWVkZWQgYWRkIHZpZGVvX21ldGEKLQkgIFRoaXMgYWxzbyByZW1vdmUgY29waWVzIGZvciBWUDgsIHdoaWNoIHdhcyBub3QgY29ycmVjdGx5IGluIHBsYWNlCi0JICBpbiBwcmV2aW91cyByZWxhdGVkIHBhdGNoLgotCi0yMDE1LTEyLTE1IDA5OjQ5OjI0ICswNTMwICBQcmFzaGFudCBHb3Rhcm5lIDxwcy5nb3Rhcm5lQHNhbXN1bmcuY29tPgotCi0JKiBleHQvdnB4L01ha2VmaWxlLmFtOgotCSogZXh0L3ZweC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmg6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSogZXh0L3ZweC9nc3R2cDlkZWMuaDoKLQkqIGV4dC92cHgvZ3N0dnB4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZweGRlYy5oOgotCSAgdnB4OiBjcmVhdGVkIGNvbW1vbiBiYXNlIGNsYXNzIEdzdFZQWGRlYyBmb3IgdnB4IGRlY29kZXJzCi0JICBCYXNlIGNsYXNzIGZvciB0aGUgdnA4ZGVjIGFuZCB2cDlkZWMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NTEwCi0KLTIwMTUtMDYtMTAgMDk6MTc6MDggLTA0MDAgIFhhdmllciBDbGFlc3NlbnMgPHhhdmllci5jbGFlc3NlbnNAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogQWRkIEdUbHNJbnRlcmFjdGlvbiBwcm9wZXJ0eQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDcwOQotCi0yMDE1LTEyLTE0IDA5OjA1OjA2IC0wNTAwICBFdmFuIENhbGxhd2F5IDxldmFuLmNhbGxhd2F5QGlwY29uZmlndXJlLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogUmV0cnkgY29ubmVjdGlvbiBpZiB0dW5uZWxpbmcgbmVlZHMgYXV0aGVudGljYXRpb24KLQkgIExldmVyYWdlIHJlc3BvbnNlIGZyb20gZ3N0X3J0c3BfY29ubmVjdGlvbl9jb25uZWN0X3dpdGhfcmVzcG9uc2UgdG8KLQkgIGRldGVybWluZSBpZiB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgcmV0cmllZCB1c2luZyBhdXRoZW50aWNhdGlvbi4gIElmCi0JICBzbywgYWRkIHRoZSBhcHByb3ByaWF0ZSBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIGJhc2VkIHVwb24gdGhlIHJlc3BvbnNlCi0JICBhbmQgcmV0cnkgdGhlIGNvbm5lY3Rpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTk2Ci0KLTIwMTUtMTItMTQgMTQ6MTk6MDUgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNoZWNrIHBvcnQtcmFuZ2UgZm9ybWF0Ci0JICBUaGUgc3RyaW5nIGNvdWxkIGV4aXN0IGJ1dCB3aXRoIGEgd3JvbmcgZm9ybWF0LCBpbiB0aGF0IGNhc2Ugd2Ugc3RpbGwgd2FudAotCSAgdG8gcmVzZXQgdGhlIHZhbHVlcyBvZiBjbGllbnRfcG9ydF9yYW5nZS5taW4gYW5kIG1heCBsaWtlIHdlIGRvIGlmIHRoZXJlIGlzCi0JICBubyBzdHJpbmcuCi0JICBDSUQgMTEzOTU5MwotCi0yMDE1LTEyLTE0IDE0OjU1OjEyICswMTAwICBUaG9tYXMgUm9vcyA8dGhvbWFzLnJvb3NAaW5kdXN0cm9uaWMuZGU+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogQ2hlY2sgZGV2aWNlIHByb3BlcnR5IGFuZCBmYWlsIGlmIGRldmljZSBjYW4ndCBiZSBmb3VuZAotCSAgRG9uJ3QgdXNlIGRlZmF1bHQgaWYgYSBzcGVjaWZpYyBkZXZpY2UgaXMgc2V0IGJ1dCBpdCBjYW4ndCBiZSBmb3VuZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTk0NTIKLQotMjAxNS0xMi0xNCAxNDoxNTowMCArMDEwMCAgVGhvbWFzIFJvb3MgPHRob21hcy5yb29zQGluZHVzdHJvbmljLmRlPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IEZpeCBoYW5kbGluZyBvZiB0aGUgbXV0ZSBwcm9wZXJ0eQotCSAgLSBzZXQgbXV0ZSB2YWx1ZSBhdCBzdGFydHVwCi0JICAtIGNvcnJlY3Qgc2V0IGFuZCBnZXQgbXV0ZSBmdW5jdGlvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUxMDYKLQotMjAxNS0xMi0xMSAxMToyMzoxMyArMDEwMCAgVGhvbWFzIFJvb3MgPHRob21hcy5yb29zQGluZHVzdHJvbmljLmRlPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IENoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgR2V0U3RhdHVzKCkgdG9vIHRvIGRlY2lkZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IKLQkgIElmIEdldFN0YXR1cygpIGZhaWxzLCB0aGUgc3RhdHVzIGl0c2VsZiB3b24ndCBiZSB2ZXJ5IG1lYW5pbmdmdWwgYnV0IHdlIGFsc28KLQkgIGhhdmUgdG8gbG9vayBhdCBpdHMgcmV0dXJuIHZhbHVlLiBUaGlzIGZpeGVzIGJsb2NraW5nIHBpcGVsaW5lcyB3aGVuIHJlbW92aW5nCi0JICBzb3VuZCBkZXZpY2VzIG9yIGR1cmluZyBvdGhlciBlcnJvcnMsIHdoZXJlIHdlIHdvdWxkbid0IG5vdGljZSB0aGUgZXJyb3IgYW5kCi0JICB0aGVuIHdhaXQgZm9yZXZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQwOTgKLQotMjAxNS0xMi0xMCAxNzo0MTo0NiArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgaXNvbXA0OiByZW1vdmUgdW51c2VkIHBhcmFtZXRlcnMgaW4gYnVpbGRfKl9leHRlbnNpb24KLQkgIEF0b21UUkFLIHBhcmFtZXRlciBpcyBub3QgdXNlZCBieSBidWlsZF9tb3ZfYWxhY19leHRlbnNpb24oKSwKLQkgIGJ1aWxkX2pwMmhfZXh0ZW5zaW9uKCksIG9yIGJ1aWxkX21vdl9hbGFjX2V4dGVuc2lvbigpICBhbmQgY2FuIGJlCi0JICByZW1vdmVkLgotCi0yMDE1LTEyLTEwIDE1OjExOjA3ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBpc29tcDQ6IHJlcGxhY2UgdmFyaWFibGUgb25seSB1c2VkIG9uY2UKLQkgIFJlcGxhY2UgaGFzX3NoaWZ0IHZhcmlhYmxlIHdpdGggdmFsdWUgc2luY2UgaXQgaXMgb25seSB1c2Ugb25jZS4KLQotMjAxNS0xMi0wOSAxMjoyNDowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEZpeCBwYWNrZXQgZHJvcHBpbmcgYWZ0ZXIgYSBiaWcgZGlzY29udAotCSAgV2Ugd291bGQgcXVldWUgNSBjb25zZWN0aXZlIHBhY2tldHMgYmVmb3JlIGNvbnNpZGVyaW5nIGEgcmVzZXQgYW5kIGEgcHJvcGVyCi0JICBkaXNjb250IGhlcmUuIEluc3RlYWQgb2YgZXhwZWN0aW5nIHRoZSBuZXh0IG91dHB1dCBwYWNrZXQgdG8gaGF2ZSB0aGUgY3VycmVudAotCSAgc2VxbnVtIChpLmUuIHRoZSBmaWZ0aCksIGV4cGVjdCBpdCB0byBoYXZlIHRoZSBmaXJzdCBzZXFudW0uIE90aGVyd2lzZSB3ZSdyZQotCSAgZ29pbmcgdG8gZHJvcCBhbGwgcXVldWVkIHVwIHBhY2tldHMuCi0KLTIwMTUtMTItMDkgMTE6NDk6MDIgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmg6Ci0JICBpbnRlcmxlYXZlOiBSZW1vdmUgdW5zZWQgZmllbGQKLQkgIFJlbW92ZSB1bnVzZWQgZmllbGQgY29sbGVjdF9ldmVudCBpbiBpbnRlcmxlYXZlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTIyNgotCi0yMDE1LTEyLTA3IDE2OjMzOjE0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFN0b3AgcHVzaGluZyBkYXRhIGFzIHNvb24gYXMgcG9zc2libGUgaW4gcHVzaC1tb2RlCi0JICBXaGVuIHdvcmtpbmcgaW4gcHVzaC1tb2RlLCB3ZSBhdHRlbXB0IHRvIHB1c2ggb3V0IGV2ZXJ5dGhpbmcgY3VycmVudGx5Ci0JICBidWZmZXJlZCBpbiB0aGUgYWRhcHRlci4KLQkgIFRoaXMgaGFzIHR3byBwaXRmYWxsczoKLQkgICogV2UgY291bGQgc3RvcCBlYXJsaWVyICh0aGUgbW9tZW50IHdlIGdldCBhIG5vbi1vayBvciBub24tbm90LWxpbmtlZCkKLQkgICogV2UgcmV0dXJuIHRoZSBsYXN0IGNvbWJpbmVkIGZsb3cgcmV0dXJuLCB3aGljaCBtaWdodCBiZSBjb21wbGV0ZWx5Ci0JICBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgY29tYmluZWQgZmxvdyByZXR1cm4KLQotMjAxNS0xMi0wNyAwOTowODowOSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjMxOTkwOSB0byA4NmU0NjYzCi0KLTIwMTUtMTItMDcgMTQ6NDE6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEFkZCBhIHdhcm5pbmcgaWYgYW4gZW1wdHkgUlRDUCBwYWNrZXQgaXMgdHJpZWQgdG8gYmUgc2VudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1OTExOQotCi0yMDE1LTExLTMwIDE5OjIwOjEzIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGRlYy5oOgotCSogZXh0L3ZweC9nc3R2cDlkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmg6Ci0JICB2cHhkZWM6IFVzZSBHc3RNZW1vcnkgdG8gYXZvaWQgY29waWVzCi0JICBXaXRoIHRoZSBWUFggZGVjb2RlcnMgaXQncyBub3Qgc2ltcGxlIHRvIHVzZSBkb3duc3RyZWFtIGJ1ZmZlciBwb29sLAotCSAgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBpbWFnZSBzaXplIGFuZCBhbGlnbm1lbnQgd2hlbiBidWZmZXJzIGdldAotCSAgYWxsb2NhdGVkLiBXZSBjYW4gdGhvdWdoIHVzZSBHc3RBbGxvY2F0b3IgKGZvciBkb3duc3RyZWFtLCBvciB0aGUgc3lzdGVtCi0JICBhbGxvY2F0b3IpIHRvIGF2b2lkIGEgY29weSBiZWZvcmUgcHVzaGluZyBpZiBkb3duc3RyZWFtIHN1cHBvcnRzCi0JICBHc3RWaWRlb01ldGEuIFRoaXMgd291bGQgc3RpbGwgY2F1c2UgYSBjb3B5IGZvciBzaW5rIHRoYXQgcmVxdWlyZXMKLQkgIHNwZWNpYWxpemVkIG1lbW9yeSBhbmQgZG9lcyBub3QgaGF2ZSBhIEdzdEFsbG9jYXRvciBmb3IgdGhhdCwgdGhvdWdoCi0JICBpdCB3aWxsIGdyZWF0bHkgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3Igc2luayBsaWtlIGdsaW1hZ2VzaW5rIGFuZAotCSAgY2x1dHRlcnNpbmsuIFRvIGF2b2lkIGFsbG9jYXRpbmcgZm9yIGV2ZXJ5IGJ1ZmZlciwgd2UgYWxzbyB1c2UgYQotCSAgaW50ZXJuYWwgYnVmZmVyIHBvb2wuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MzcyCi0KLTIwMTUtMTEtMzAgMDg6NDI6MzUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBBdm9pZCBvdmVyLXNraXBwaW5nIHdoZW4gY2hlY2tpbmcgTE9BUyBjb25maWcKLQkgIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIExPQVMgY29uZmlnIGluIGEgcm93IGluIGEgZnVsbCBmcmFtZS4gVGhlIGZpcnN0Ci0JICBvbmUgbWlnaHQgYmUgYSBtdWx0aS1sYXllciBjb25maWcgKHdoaWNoIHdlIGNhbid0IHByb3Blcmx5IHBhcnNlIHlldCkuLi4KLQkgIGJ1dCB0aGVuIGZvbGxvd2VkIGJ5IGEgdmFsaWQgKHNpbmdsZS1sYXllcikgb25lLgotCSAgVGhlIGNvZGUgd2FzIHByZXZpb3VzbHkgc2tpcHBpbmcgd2hvbGUgZnJhbWVzIChpbnN0ZWFkIG9mIGp1c3QgdGhlIExPQVMKLQkgIGNvbmZpZyB3ZSBmYWlsZWQgdG8gcmVhZCkgcmVzdWx0aW5nIGluIG11bHRpcGxlIGZyYW1lcyAoc2VlbiB1cCB0byA2cyBpbgotCSAgc29tZSBzaXR1YXRpb24pIGJlaW5nIGRyb3BwZWQgYmVmb3JlIGZpbmFsbHkgZ2V0dGluZyB0aGUgY29uZmlndXJhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg4MjYKLQotMjAxNS0xMS0yNSAxNzowODo1NiArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IFByb3Blcmx5IHNldCBTUEFSU0Ugc3RyZWFtIGZsYWdzIGZvciBzdWJwaWN0dXJlL3N1YnRpdGxlCi0JICBBbmQgd2hpbGUgd2UncmUgYXQgaXQsIGFsc28gZGV0ZWN0ICdEWFNBJyBhcyBiZWluZyBhIHZhcmlhbnQgZm91cmNjCi0JICBvZiAnRFhTQicgZm9yIFhTVUIKLQotMjAxNS0xMS0zMCAyMToyMzo1MiAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgdGVzdHM6IHNvdXBodHRwc3JjOiBncmFtbWFyIGZpeAotCi0yMDE1LTExLTMwIDIxOjAxOjE3IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogc291cGh0dHBzcmM6IHN3aXRjaCBzaG91dGNhc3Qgc3RyZWFtIHByb3ZpZGVyCi0JICBGaXhlcyBmYWlsaW5nIElDWSB0ZXN0LiBQcmV2aW91cyBwcm92aWRlciBoYXMKLQkgIHN0cmVhbWluZyBkaXNhYmxlZCBvdXRzaWRlIFVLLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODExNAotCi0yMDE1LTExLTE4IDE2OjEwOjExICswMTAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogZG9uJ3QgY3Jhc2ggaWYgd2UgbmV2ZXIgZ290IGF1ZGlvIGNhcHMgYmVmb3JlIHN0b3BwaW5nCi0JICBhdWRzLmJsb2NrYWxpZ24gaXMgc2V0IG9uY2UgdGhlIGZpcnN0IGNhcHMgYXJyaXZlLiBJZgotCSAgZ3N0X2F2aV9tdXhfc3RvcF9maWxlKCkgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMgdGhlbiBhdWRzLmJsb2NrYWxpZ24KLQkgIGlzIHplcm8gYW5kIGdzdF9hdmlfbXV4X2F1ZHNpbmtfc2V0X2ZpZWxkcygpIGNhdXNlIGEgY3Jhc2g6Ci0JICBbLi4uXQotCSAgYXZpcGFkLT5wYXJlbnQuaGRyLnJhdGUgPSBhdmlwYWQtPmF1ZHMuYXZfYnBzIC8gYXZpcGFkLT5hdWRzLmJsb2NrYWxpZ247Ci0JICBbLi4uXQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODkxMgotCi0yMDE1LTEyLTAxIDE4OjIwOjIzICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBkb24ndCBibG9jayB3aGVuIHJlc3VyZWN0aW5nIGEgYnVmZmVyCi0JICBXaGVuIHdlIGFyZSByZXN1cmVjdGluZyBhIGJ1ZmZlciwgZG9uJ3QgYmxvY2suIGluc3RlYWQgbGV0IHVzIGNvcHkgYQotCSAgYnVmZmVyLgotCi0yMDE1LTEyLTAxIDAwOjMwOjA4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IHJlbW92ZSBleHRyYSB2YXJpYWJsZSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5Ci0JICBNYWtlcyBpdCBlYXNpZXIgdG8gc2VlIHRoYXQgdGhlIGV2ZW50IGlzIGJlaW5nIHJlcGxhY2VkL3VucmVmZWQKLQotMjAxNS0xMi0wMSAwMDoyMjozNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiByZXNwZWN0IHNlcW51bSBpbiBzZWVrIGV2ZW50cwotCSAgUHJvcGFnYXRlIHRoZSBvcmlnaW5hbCBzZWVrIHNlcW51bSB0byBldmVudHMgb3JpZ2luYXRlZCBmcm9tCi0JICBzZWVraW5nIHRvIG1ha2Ugc3VyZSB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUKLQotMjAxNS0xMi0wMSAwMDowMzoyMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBmbHVzaCB1cHN0cmVhbSB3aGVuIHNlZWtpbmcgaW4gcHVsbCBtb2RlCi0JICBNYWtlcyBzdXJlIHVwc3RyZWFtIHdpbGwgdW5ibG9jayBhbmQgcmV0dXJuIHRoZSB0aHJlYWQgc28gdGhhdAotCSAgc2Vla2luZyBjYW4gY29udGludWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg4NjEKLQotMjAxNS0xMS0yNyAwOToyNzoyOSArMDEwMCAgQW50b24gQm9uZGFyZW5rbyA8YW50b25ib0BheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBhZGQgInNlbmQgU1BTL1BQUyB3aXRoIGV2ZXJ5IGtleSBmcmFtZSIgbW9kZQotCSAgSXQncyBub3QgZW5vdWdoIHRvIGhhdmUgdGltZW91dCBvciBldmVudCBiYXNlZCBTUFMvUFBTIGluZm9ybWF0aW9uIHNlbnQKLQkgIGluIFJUUCBwYWNrZXRzLiBUaGVyZSBhcmUgc29tZSBzY2VuYXJpb3Mgd2hlbiBrZXkgZnJhbWVzIG1heSBhcHBlYXIKLQkgIG1vcmUgZnJlcXVlbnRseSB0aGFuIG9uY2UgYSBzZWNvbmQsIGluIHdoaWNoIGNhc2UgdGhlIG1pbmltdW0gdGltZW91dAotCSAgZm9yICJjb25maWctaW50ZXJ2YWwiIG9mIDEgc2Vjb25kIGZvciBzZW5kaW5nIFNQUy9QUFMgaXMgbm90IHN1ZmZpY2llbnQuCi0JICBJdCBtaWdodCBhbHNvIGJlIGRlc2lyYWJsZSBpbiBnZW5lcmFsIHRvIG1ha2Ugc3VyZSB0aGUgU1BTL1BQUyBpcwotCSAgYXZhaWxhYmxlIHdpdGggZXZlcnkga2V5ZnJhbWUgKHBhY2tldCBsb3NzIGFzaWRlKSwgc28gcmVjZWl2ZXJzIGNhbgotCSAgYWN0dWFsbHkgcGljayB1cCBkZWNvZGluZyBpbW1lZGlhdGVseSBmcm9tIHRoZSBmaXJzdCBrZXlmcmFtZSBpZgotCSAgU1BTL1BQUyBpcyBub3Qgc2lnbmFsZWQgb3V0IG9mIGJhbmQuCi0JICBUaGlzIHBhdGNoIGFkZHMgdGhlIHBvc3NpYmlsaXR5IHRvIHNlbmQgU1BTL1BQUyB3aXRoIGV2ZXJ5IGtleSBmcmFtZS4gVGhpcwotCSAgbW9kZSBjYW4gYmUgZW5hYmxlZCBieSBzZXR0aW5nICJjb25maWctaW50ZXJ2YWwiIHByb3BlcnR5IHRvIC0xLiBJbiB0aGlzCi0JICBjYXNlIHRoZSBwYXlsb2FkZXIgd2lsbCBhZGQgU1BTIGFuZCBQUFMgYmVmb3JlIGV2ZXJ5IGtleSAoSURSKSBmcmFtZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc4OTIKLQotMjAxNS0xMS0yNyAwOTowMzo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICBydHBoMjY0cGF5OiBjaGFuZ2UgY29uZmlnLWludGVydmFsIHByb3BlcnR5IHR5cGUgZnJvbSB1aW50IHRvIGludAotCSAgVGhpcyB3YXkgd2UgY2FuIHVzZSAtMSBhcyBzcGVjaWFsIHZhbHVlLCB3aGljaCBpcyBuaWNlciB0aGFuIE1BWFVJTlQuCi0JICBUaGlzIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIGV2ZW4gd2l0aCB0aGUgR1ZhbHVlIEFQSSwgYXMgc2hvd24gYnkKLQkgIGEgdW5pdCB0ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Nzg5MgotCi0yMDE1LTExLTI2IDIxOjQ2OjExICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBzdXBwb3J0IGZvciBPcHVzCi0JICBBZGQgc3VwcG9ydCBmb3IgZGVtdXhpbmcgT3B1cyBlbmNhcHN1bGF0ZWQgaW4gTVA0IGZpbGVzLCBiYXNlZCBvbiB0aGUKLQkgIGZvbGxvd2luZyBzcGVjOiBodHRwczovL3d3dy5vcHVzLWNvZGVjLm9yZy9kb2NzL29wdXNfaW5faXNvYm1mZi5odG1sCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyNjQzCi0KLTIwMTUtMTEtMjUgMjI6NDg6MzIgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogdXNlIG1hY3JvIGZvciBjb2RlY19uYW1lCi0JICBVc2UgX2NvZGVjKCkgbWFjcm8gaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBjb2RlLgotCi0yMDE1LTAzLTI1IDE2OjMyOjU1ICswMTAwICBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDI6IHZpZGVvZGVjOiBjaG9vc2UgZm9ybWF0IGZyb20gY2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzgyNwotCi0yMDE1LTAzLTI3IDE1OjAyOjMzICswMTAwICBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICB2NGwyOiBhZGQgZ3N0X3Y0bDJfb2JqZWN0X3Byb2JlX2NhcHMKLQkgIEFkZCBhIHZhcmlhbnQgb2YgZ3N0X3Y0bDJfb2JqZWN0X2dldF9jYXBzIHRoYXQgYnlwYXNzZXMgdGhlIHByb2JlZF9jYXBzIGNhY2hlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzgyNwotCi0yMDE1LTExLTE5IDE3OjIwOjU1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkgIHY0bDItcHJvYmU6IFNraXAgZGV2aWNlcyB3aXRob3V0IHN1cHBvcnRlZCBmb3JtYXRzCi0KLTIwMTUtMTEtMTMgMTI6MzU6NTkgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgdjRsMjogVHJhY2sgL2Rldi92aWRlbyogdG8gdHJpZ2dlcmVkIHJlcXVpcmVkIHByb2JlCi0JICBJZiBzb21ldGhpbmcgaW4gL2Rldi92aWRlbyogZ2V0IGFkZGVkLCByZW1vdmVkIG9yIHJlcGxhY2VkLCB3ZSBuZWVkIHRvCi0JICBwcm9iZSB0aGUgZGV2aWNlcyBhZ2FpbiBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGR5bmFtaWMgZGV2aWNlcyBhcmUgdXAgdG8KLQkgIGRhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDg1Ci0KLTIwMTUtMTEtMjUgMTQ6NTE6NDAgKzExMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBtYW5hZ2VyOiBydHBzZXNzaW9uOiBkb24ndCBzZW5kIGVtcHR5IFJUQ1AgcGFja2V0cwotCSAgZ2VuZXJhdGVfcnRjcCBjYW4gcHJvZHVjZSBlbXB0eSBwYWNrZXRzIHdoZW4gcmVkdWNlZCBzaXplIFJUQ1AgaXMgdHVybmVkIG9uLgotCSAgU2tpcCB0aGVtIHNpbmNlIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBwdXNoIHRoZW0gYW5kIHRoZXkgY2F1c2UgZXJyb3JzIHdpdGgKLQkgIGVsZW1lbnRzIHRoYXQgZXhwZWN0IFJUQ1AgcGFja2V0cyB0byBjb250YWluIGRhdGEgKGxpa2Ugc3J0cGVuYykuCi0KLTIwMTUtMTEtMjQgMTA6NTc6MjggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZXN0b3JlIHRoZSBzZWdtZW50IG9uIGNhc2Ugb2Ygc29mdCByZXNldAotCSAgV2hlbiBzZWVraW5nIGJhY2sgdG8gcmVzdG9yZSB0aGUgbWRhdCBwb3NpdGlvbiBhIGZsdXNoIGlzIHB1c2hlZAotCSAgdGhyb3VnaCBhbmQgaXQgcmVzZXRzIGRvd25zdHJlYW0gc2VnbWVudCBpbmZvcm1hdGlvbi4gTWFrZSBzdXJlCi0JICB0aGF0IGFmdGVyIHRoZSBmbHVzaCAodGhhdCBkb2VzIGEgc29mdCByZXNldCkgYSBzZWdtZW50IHdpbGwKLQkgIGJlIHB1c2hlZCBhZ2FpbgotCSAgRml4ZXMgcmVncmVzc2lvbnMgc3BvdHRlZCBhdAotCSAgaHR0cHM6Ly9jaS5nc3RyZWFtZXIubmV0L2pvYi9HU3RyZWFtZXItbWFzdGVyLXZhbGlkYXRlLzIxMDAvCi0KLTIwMTUtMTEtMjAgMTI6NDQ6MjIgKzAwMDAgIEdyYWhhbSBMZWdnZXR0IDxtaW5mcmluQHNoYXJwLmZtPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IGZpeCBzcGVsbGluZyBvZiB2YXJpYWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODM5MAotCi0yMDE1LTExLTIwIDExOjA1OjUxICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1bml0ZSBkdXBsaWNhdGUgRm91ckNDCi0JICBVbml0ZSBpbiBmb3VyY2MuaCB0aGUgRm91ckNDcyB0aGF0IGFyZSB1c2VkIHR3aWNlIG9yIG1vcmUgaW4gcXRkZW11eAotCi0yMDE1LTExLTE5IDE1OjMzOjQ1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMjogRml4IGNhcHR1cmUvb3V0cHV0LWlvLW1vZGUgcHJvcGVydGllcwotCSAgVGhlcmUgd2FzIHNvbWUgbWlzcy1tYXRjaCBpbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgbWFrZXMgaXQKLQkgIGNvbmNpc3RlbnQsIHRob3VnaCBmdW5jdGlvbmFsbHkgaXQgd29ya2VkLCBleGNlcHQgdGhlIHZpZGVvIGRlY29kZXIKLQkgIG91dHB1dC1pby1tb2RlIGdldHRlci4KLQotMjAxNS0xMS0xOSAxOTo0ODowNiArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSAgYXRvbXM6IHJlbW92ZSB1bnVzZWQgYXJndW1lbnQgb2YgYnVpbGRfbW92X3dhdmVfZXh0ZW5zaW9uKCkKLQkgIEF0b21UcmFrICogdHJhayBhcmd1bWVudCBvZiBidWlsZF9tb3ZlX3dhdmVfZXh0ZW5zaW9uKCkgaXNuJ3QgdXNlZC4KLQkgIFJlbW92aW5nIGl0LgotCi0yMDE1LTExLTE5IDE5OjI4OjIwICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZW1vdmUgZHVwbGljYXRlIEZvdXJDQwotCSAgVXNlIHRoZSBhdmFpbGFibGUgRm91ckNDcyBpbiBmb3VyY2MuaCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZW0uCi0KLTIwMTUtMTEtMTkgMTg6MzY6MzkgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBpc29tcDQ6IGNlbnRyYWxpemUgYWxsIEZvdXJDQwotCSAgMTAgRm91ckNDcyBnZW5lcmF0ZWQgd2l0aCBHU1RfTUFLRV9GT1VSQ0MoKSBpbiBnc3RxdG11eC5jIGFuZCBhdG9tcy5jCi0JICBhbHJlYWR5IGV4aXN0IGluIGZvdXJjYy5oLiBEb24ndCBkdXBsaWNhdGUgdGhlc2UgYW5kIHVzZSB0aGVtIGRpcmVjdGx5LgotCSAgUGx1cyBtb3ZpbmcgNiB0byBmb3VyY2MuaCwgdG8gY2VudHJhbGl6ZSB0aGVtIGFsbC4KLQotMjAxNS0xMS0xOSAxNzozMjoxMiArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL3dlYm0tbXV4LmM6Ci0JICBtYXRyb3NrYS93ZWJtbXV4OiBmaXggb3V0ZGF0ZWQgZXhhbXBsZSBsYXVuY2ggbGluZXMKLQkgIFVwZGF0ZSBnc3QtbGF1bmNoLTAuMTAgbGluZXMgdG8gZ3N0LWxhdW5jaC0xLjAKLQotMjAxNS0xMS0xNiAxMzoyNjo1MCArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5oOgotCSogZ3N0L2lzb21wNC9mb3VyY2MuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIGlzb21wNDogYWRkIHN1cHBvcnQgZm9yIE9wdXMgaW4gbXA0bXB1eAotCSAgQWRkIHN1cHBvcnQgZm9yIG11eGluZyBNUDQgZmlsZXMgY29udGFpbmluZyBPcHVzLiBCYXNlZCBvbiB0aGUgc3BlYwotCSAgZGV0YWlsZWQgaGVyZToKLQkgIGh0dHBzOi8vd3d3Lm9wdXMtY29kZWMub3JnL2RvY3Mvb3B1c19pbl9pc29ibWZmLmh0bWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI2NDMKLQotMjAxNS0xMS0xOCAxOToxMDo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMKLQotMjAxNS0xMS0xOCAxOTowNzo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBDYXN0IHRvIHNpZ25lZCBpbnRlZ2VycyB0byBwcmV2ZW50IHVuc2lnbmVkIGNvbXBhcmUgYmV0d2VlbiBuZWdhdGl2ZSBhbmQgcG9zaXRpdmUgbnVtYmVycwotCSAgVGhpcyBmaXhlcyBzZWVraW5nIGlmIHRoZSBmaXJzdCBlbnRyaWVzIGluIHRoZSBzYW1wbGVzIHRhYmxlIGFyZSBuZWdhdGl2ZS4gVGhlCi0JICBiaW5hcnkgc2VhcmNoIHdvdWxkIGFsd2F5cyBmYWlsIG9uIHRoaXMgYXMgdGhlIGFycmF5IHdvdWxkIG5vdCBiZSBzb3J0ZWQgaWYKLQkgIGludGVycHJldGluZyB0aGUgbmVnYXRpdmUgbnVtYmVycyBhcyBodWdlIHBvc2l0aXZlIG51bWJlcnMuIFRoaXMgY2F1c2VkIHVzIHRvCi0JICBhbHdheXMgb3V0cHV0IGJ1ZmZlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIGFmdGVyIGEgc2VlayBpbnN0ZWFkIG9mIGNsb3NlIHRvIHRoZQotCSAgc2VlayBwb3NpdGlvbi4KLQkgIEFsc28gYWRkIGEgY2FzZSB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgZXF1YWxpdHkuCi0KLTIwMTUtMTEtMTggMTY6MDE6NDggKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiByZW1vdmUgZHVwbGljYXRlIGNoZWNrCi0JICBXZSB3YW50IDEgb3IgMiBzdHJlYW1oZWFkZXJzLCB0aGUgY2hlY2sgIGlmIChidWZhcnItPmxlbiAhPSAxICYmCi0JICBidWZhcnItPmxlbiAhPSAyKSBpcyBlbm91Z2guIE5vdCBuZWVkIHRvIGNoZWNrIGlmIGJ1ZmFyci0+bGVuIGlzIDw9IDAgb3IKLQkgID4gMjU1LgotCi0yMDE1LTExLTE4IDE0OjQ4OjM2ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXBodHRwY2xpZW50c2luazogRml4IGVycm9yIGxlYWsgYW5kIGhhbmRsZSBlcnJvcgotCSAgZ190aHJlYWRfdHJ5X25ldyBhbGxvd3MgZm9yIHBvc3NpYmxpdHkgb2YgZmFpbHVyZXMuIEluIGNhc2UgaXQgZmFpbHMsCi0JICBlcnJvciBpcyBub3QgaGFuZGxlZCBhbmQgbGVha2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODI2MAotCi0yMDE1LTExLTE1IDE3OjE2OjI5IC0wODAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkgIHJ0cGdzdGRlcGF5OiBQcm9wZXJseSBoYW5kbGUgYmFja3dhcmQgY29tcGF0IGZvciBldmVudCBkZXNlcmlhbGl6YXRpb24KLQkgIEFjdHVhbCBjb2RlIGlzIGNoZWNraW5nIGZvciBhIE5VTEwgdGVybWluYXRvciBhbmQgYSAnOycgdGVybWluYXRvciwKLQkgIGZvciBiYWNrd2FyZCBjb21wYXQsIGluIGEgY2hhaW5lZCB3YXkgdGhhdCBjYXVzZSBhbGwgZXZlbnRzIGJlaW5nIHJlamVjdGVkLgotCSAgVGhlIHByb3BlciBjb25kaXRpb24gaXMgdG8gcmVqZWN0IHRoZSBldmVudHMgd2hlbiB0ZXJtaW5hdG9yIGlzbid0Ci0JICBpbiBbJ1wwJywgJzsnXSBzZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MTUxCi0KLTIwMTUtMTEtMTUgMTc6MTE6MDIgLTA4MDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIHRlc3RzOiBydHAtcGF5bG9hZGluZzogVGVzdCBmb3IgaGFuZGxpbmcgb2YgY3VzdG9tIGV2ZW50cyBpbiBydHBnc3QKLQkgIEFkZCBhIHNpbXBsZSB0ZXN0IHRoYXQgY2hlY2tzIHByb3BlciBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbgotCSAgb2YgY3VzdG9tIGV2ZW50cyB3aXRoIHJ0cGdzdHBheSBhbmQgcnRwZ3N0ZGVwYXkuCi0KLTIwMTUtMTEtMTYgMTY6MjM6NDMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmM6Ci0JICB2cHhkZWM6IFVzZSB0aHJlYWRzIG9uIG11bHRpLWNvcmUgc3lzdGVtcwotCSAgVGhpcyBhZGRzIGFuIGF1dG9tYXRpYyBtb2RlIHRvIHRoZSB0aHJlYWRzIHByb3BlcnR5IG9mIHZweGRlYyBpbiBvcmRlciB0bwotCSAgdXNlIGFzIG1hbnkgdGhyZWFkcyBhcyB0aGVyZSBpcyBDUFUgb24gdGhlIHBsYXRmb3JtLiBUaGlzIGJyaW5ncyBiYWNrCi0JICBHU3RyZWFtZXIgVlBYIGRlY29kaW5nIHBlcmZvcm1hbmNlIGNsb3NlciB0byB3aGF0IGlzIGFjaGlldmVkIGJ5IG90aGVyCi0JICBwbGF5ZXJzLCBpbmNsdWRpbmcgQ2hyb21pdW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MTk1Ci0KLTIwMTUtMTEtMTYgMTA6NTg6MzIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBvbmx5IHNlbmQgaW5pdGlhbCBnYXBzIGZvciBub24tZnJhZ21lbnRlZCBzdHJlYW1zCi0JICBJdCB3b3VsZCBiZSB1bnVzdWFsIHRvIGhhdmUgdGhlIGhlYWRlciBzZWdtZW50IHdpdGggYW4gJ2VkdHMnIGF0b20KLQkgIGluZGljYXRpbmcgZ2FwcyBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gaGFuZGxpbmcgZnJhZ21lbnRlZCBzdHJlYW1zLgotCSAgVGhlIGhlYWRlciB1c3VhbGx5IGRvZXNuJ3QgY29udGFpbiBhbnkgdGltZXN0YW1waW5nIGluZm9ybWF0aW9uLCB0aGlzCi0JICBzaG91bGQgY29tZSBmcm9tIHRoZSBwbGF5bGlzdC9tYW5pZmVzdCBhbmQgdGhlIHNlZ21lbnRzIHdpdGggbWVkaWEKLQkgIGluIHRob3NlIHNjZW5hcmlvcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTgxNzEKLQotMjAxNS0xMS0xNyAwOTo0MTozNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIFJldmVydCAiUmV2ZXJ0ICJxdGRlbXV4OiByZXNwZWN0IHF0IHNlZ21lbnRzIGluIHB1c2gtbW9kZSBmb3IgZW1wdHkgc3RhcnRzIiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDg0MmZmMjg4YTlkMDEyMTRhMDQ2YmVjYmZkOWNiZmYzYTRhY2VhMC4KLQkgIFRoaXMgd2FzIHJldmVydGVkIGJ5IGFjY2lkZW50Ci0KLTIwMTUtMTEtMTcgMTI6Mzk6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgdWRwc3JjOiBBZGQgImxvb3AiIHByb3BlcnR5IGZvciBlbmFibGluZy9kaXNhYmxpbmcgbXVsdGljYXN0IGxvb3BiYWNrCi0JICBPbiBQT1NJWCwgSVBfTVVMVElDQVNUX0xPT1AgaXMgYSBzZXR0aW5nIGZvciB0aGUgc2VuZGVyIHNvY2tldC4gT24gV2luZG93cyBpdAotCSAgaXMgYSBzZXR0aW5nIGZvciB0aGUgcmVjZWl2ZXIgc29ja2V0LiBBcyBzdWNoIHdlIHdpbGwgbmVlZCBpdCBvbiB1ZHBzcmMgdG9vIHRvCi0JICBhbGxvdyBmaWx0ZXJpbmcgb3V0IG91ciBvd24gbXVsdGljYXN0IHBhY2tldHMuCi0KLTIwMTUtMTEtMTYgMTM6NTI6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgUmV2ZXJ0ICJxdGRlbXV4OiByZXNwZWN0IHF0IHNlZ21lbnRzIGluIHB1c2gtbW9kZSBmb3IgZW1wdHkgc3RhcnRzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAxNDJkOGUyZDIzZTU2MDJlNzM4Mjk3N2FmMTA0M2Q2MjE2MjVmOGM4LgotCi0yMDE1LTExLTE2IDE2OjU2OjA0ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCBzdHJpbmcgbWVtb3J5IGxlYWsKLQkgIFRoZSBzdHJpbmcgZ290IHVzaW5nIGdfc3RyZHVwX3ByaW50ZiB3aWxsIGJlIGFsbG9jYXRlZCBtZW1vcnkKLQkgIGFuZCBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIgdXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1ODE2MQotCi0yMDE1LTExLTE0IDIxOjUxOjExIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDIvb2JqZWN0OiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVjayBiZWZvcmUgZ19mcmVlKCkKLQotMjAxNS0xMS0xNCAyMTo0NToyOSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSAgb3Nzc3JjOiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVjayBiZWZvcmUgZ19mcmVlKCkKLQotMjAxNS0xMS0xNCAyMTo0MzoyNCAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzoKLQkgIHN1bmF1ZGlvc3JjOiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMjE6MzY6MzAgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDIxOjMxOjA4IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMjE6MjY6MjEgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYS9yZWFkLWNvbW1vbjogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDIwOjQzOjEwIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkgIGlzb21wNC9hdG9tczogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDIwOjM1OjU0IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBydHAvdGhlb3JhcGF5OiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMjA6MzM6NTQgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIHJ0cC92b3JiaXNwYXk6IHJlbW92ZSB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNrcyBiZWZvcmUgZ19mcmVlKCkKLQotMjAxNS0xMS0xNCAyMDozMTozNCAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cC9qcGVncGF5OiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMjA6Mjc6MDQgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkgIHJ0cGdzdHBheTogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDIwOjIyOjA5IC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHJlbW92ZSB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNrcyBiZWZvcmUgZ19mcmVlKCkKLQotMjAxNS0xMS0xNCAyMDoxNDoyNSAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVjayBiZWZvcmUgZ19mcmVlKCkKLQotMjAxNS0xMS0xNCAyMDowOTo1NCAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZWZmZWN0di9nc3RvcC5jOgotCSAgZWZmZWN0di9vcHR2OiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMjA6MDU6MDMgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSAgZWZmZWN0di9zaGFnYWRlbGljdHY6IHJlbW92ZSB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNrcyBiZWZvcmUgZ19mcmVlKCkKLQotMjAxNS0xMS0xNCAyMDowMTo0MyAtMDgwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkgIGVmZmVjdHYvcmlwcGxlOiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMTk6NTY6NTcgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSAgZWZmZWN0di9yYWRpb2FjOiByZW1vdmUgdW5uZWNlc3NhcnkgTlVMTCBjaGVja3MgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMTk6NTI6MTIgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmM6Ci0JICBlZmZlY3R2L3N0cmVhazogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2sgYmVmb3JlIGdfZnJlZSgpCi0KLTIwMTUtMTEtMTQgMTc6MDQ6NTUgLTA4MDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHJleW5hbGRvQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzoKLQkgIHNob3V0MjogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDE2OjU3OjEzIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmM6Ci0JICB2cDllbmM6IHJlbW92ZSB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNrIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDE2OjU0OjQyIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IHJlbW92ZSB1bm5lY2Vzc2FyeSBOVUxMIGNoZWNrIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTE0IDE2OjIwOjMzIC0wODAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogcmVtb3ZlIHVubmVjZXNzYXJ5IE5VTEwgY2hlY2tzIGJlZm9yZSBnX2ZyZWUoKQotCi0yMDE1LTExLTEzIDEzOjM0OjAyICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBhZGQgc3VwcG9ydCBvZiBOVjE2LCBOVjYxIGFuZCBOVjI0IGZvcm1hdHMKLQkgIE1hcHBlZCByZXNwZWN0aXZlbHkgdG8gVjRMMl9QSVhfRk1UX05WMTYvVjRMMl9QSVhfRk1UX05WMTZNLAotCSAgVjRMMl9QSVhfRk1UX05WNjEsVjRMMl9QSVhfRk1UX05WNjFNIGFuZCBWNEwyX1BJWF9GTVRfTlYyNCB2NGwyIGZvcm1hdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU4MDU4Ci0KLTIwMTUtMTEtMTEgMTQ6MTA6NTMgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmM6Ci0JICBzcGxpdG11eHBhcnRyZWFkZXI6IEZpeCBHQ29uZCBsZWFrCi0JICBpbmFjdGl2ZV9jb25kIGlzIG5vdCBiZWluZyBjbGVhcmVkIHJlc3VsdGluZyBpbiBtZW1vcnkgbGVhay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc5MjQKLQotMjAxNS0wOC0wNiAxMjo0NDoyMCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4IG91dHB1dCBzdGF0ZSBtZW1vcnkgbGVhawotCSAgV2hlbiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIGlzIGNhbGxlZCwgb3V0cHV0IHN0YXRlIHJlZmVyZW5jZSBpcyBiZWluZyBjcmVhdGVkLgotCSAgQnV0IGlmIHRoZXJlIGlzIGFueSBmYWlsdXJlcyBpbiBmaW5pc2hpbmcgZGVjb21wcmVzcywgaXQganVtcHMgdG8gc2V0am1wLAotCSAgYW5kIGF0IHRoYXQgcG9pbnQgc3RhdGUgd2FzIG5vdCByZWZlcmVuY2VkLiBSZXN1bHRpbmcgaW4gbGVhayBvZiBvdXRwdXQgc3RhdGUuCi0JICBIZW5jZSBhZGRpbmcgYW5vdGhlciBzZXRqbXAgYWZ0ZXIgb3V0cHV0IHN0YXRlIGlzIHJlZmVyZW5jZWQuCi0JICBTaW1pbGFybHkgYWRkaW5nIGFub3RoZXIgc2V0am1wIHRvIHVubWFwIHRoZSBmcmFtZSBpbiBjYXNlIGVycm9yIGhhcHBlbnMgYmVmb3JlCi0JICBmaW5pc2hfZGVjb21wcmVzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzA4NwotCi0yMDE1LTA4LTEwIDExOjIzOjQ1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVzcGVjdCBxdCBzZWdtZW50cyBpbiBwdXNoLW1vZGUgZm9yIGVtcHR5IHN0YXJ0cwotCSAgSW4gcHVzaC1tb2RlIGl0IGlzIGhhcmQgdG8gc3VwcG9ydCBxdCBzZWdtZW50cyBvdmVyYWxsIGJ1dCBpdCBpcwotCSAgcG9zc2libGUgdG8gc3VwcG9ydCB3aGVuIHRoZSBmaWxlIGlzbid0IGhlYXZpbHkgZWRpdGVkIGJ1dCBqdXN0IGNvbnRhaW4KLQkgIGEgc2VnbWVudCB0byBpbmRpY2F0ZSBhIGdhcCBhdCB0aGUgYmVnaW5uaW5nLiBUaGlzIGFsc28gYWxsb3dzIHByb3Blcmx5Ci0JICB0aW1lc3RhbXBpbmcgZGF0YSB0aGF0IGhhcyBuZWdhdGl2ZSBEVFMgaW4gcHVzaC1tb2RlLgotCSAgSXQgaXMgcmVsZXZhbnQgdG8gc3VwcG9ydCB0aG9zZSBmb3IgMiBzY2VuYXJpb3M6Ci0JICAxKSBmcmFnbWVudGVkIHN0cmVhbWluZwotCSAgMikgSFRUUCBwbGF5YmFjayBvZiAncmVndWxhcicgbXA0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNDg0Ci0KLTIwMTUtMTEtMDUgMTg6Mzk6MzMgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlcHJvdmlkZXIuYzoKLQkgIHB1bHNlOiBEb24ndCBsZWFrIGNhcHMgYW5kIHN0cnVjdHVyZXMgaW4gdGhlIGRldmljZSBwcm92aWRlcgotCi0yMDE1LTExLTA0IDE5OjAxOjIwICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwbWFuYWdlcjogRG9jdW1lbnQgcHJvcGVydGllcyB0aGF0IGFyZSBleHByZXNzZWQgaW4gYml0cyBwZXIgc2Vjb25kCi0JICBUaGlzIGNoYW5nZWQgaW4gOTI4Y2QxMTBiY2VhNWQxNDNjYWIzZWE3NDc5OTE4NTFkNTJlY2JhZCBhbmQKLQkgIDczYzBjMjkyMGY5YWNhOTY5ODJhNGRlMGMyMGIzNDE3YWExNDhiODEgYnV0IHdhcyBub3QgZG9jdW1lbnRlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc4NjMKLQotMjAxNS0xMS0wNCAxODo1MTozMiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cG1hbmFnZXI6IFRyaXZpYWwgZ3N0LWluZGVudCBmaXhlcwotCi0yMDE1LTA4LTEyIDEzOjM1OjQwICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogc3VwcG9ydCBmb3IgY2VuYyBhdXhpbGlhcnkgaW5mbyBwYXJzaW5nIG91dHNpZGUgb2YgbW9vZiBib3gKLQkgIFdoZW4gdGhlIGNlbmMgYXV4IGluZm8gaW5kZXggaXMgb3V0IG9mIG1vb2YgYm91bmRhcmllcywga2VlcCB0cmFjayBvZgotCSAgaXQgYW5kIHBhcnNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1kYXQgYm94LCBiZWZvcmUgdGhlIGZpcnN0IHNhbXBsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2MTQKLQotMjAxNS0xMS0wMyAyMDozMzoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBVc2UgY29kZWN1dGlscyBoZWxwZXJzIGZvciBjcmVhdGluZyBPcHVzIGNhcHMKLQkgIEFsc28gZml4IHVwIGNvZGVjIGRhdGEgd2l0aCB2YWx1ZXMgZnJvbSB0aGUgY29udGFpbmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzE1MgotCi0yMDE1LTExLTAzIDE0OjUxOjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFRoZXJlIGlzIG5vIG11bHRpc3RyZWFtIGZpZWxkIGZvciBPcHVzIGFueW1vcmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTcxNTIKLQotMjAxNS0xMS0wMyAxMjo0Mjo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL3dlYm0tbXV4LmM6Ci0JICBtYXRyb3NrYS93ZWJtbXV4OiBTdXBwb3J0IE9wdXMgaW4gd2VibW11eCBhbmQgVlA5IGluIG1hdHJvc2thbXV4Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5OTUwCi0KLTIwMTUtMTEtMDMgMTI6NDA6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUGFyc2UgYW5kIGhhbmRsZSBDb2RlY0RlbGF5LCBTZWVrUHJlcm9sbCBhbmQgRGlzY2FyZFBhZGRpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczMDUKLQotMjAxNS0xMS0wMyAxMjoxODoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IFdyaXRlIENvZGVjRGVsYXksIERpc2NhcmRQYWRkaW5nIGFuZCBTZWVrUHJlcm9sbCBmb3IgT3B1cwotCSAgQW5kIGFsc28gYWRqdXN0IHRpbWVzdGFtcHMgYW5kIGR1cmF0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGNvZGVjIGRlbGF5LCBib3RoCi0JICBzaG91bGQgaW5jbHVkZSBpdCBmb3Igd2hhdGV2ZXIgcmVhc29uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzMwNQotCi0yMDE1LTExLTAzIDExOjQ5OjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogT3B1cyBoZWFkZXJzIGFyZSBub3QgaW4tYmFuZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzMwNQotCi0yMDE1LTExLTAzIDIyOjAxOjA3ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgdjRsMjogU2V0IE9fQ0xPRVhFQyBvbiB0aGUgZGV2aWNlIGZkCi0JICBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCBjaGlsZCBwcm9jZXNzZXMgZG9uJ3QgaW5oZXJpdCB0aGUgdmlkZW8KLQkgIGRldmljZSBmZCB3aGljaCBjYW4gY2F1c2UgcHJvYmxlbXMgd2l0aCBzb21lIGRyaXZlcnMuCi0KLTIwMTUtMTEtMDMgMTQ6NDY6MzAgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwbWFuYWdlcjogc3dpdGNoIEdfR0lOVDY0X0ZPUk1BVCBmb3IgR1NUX1NUSU1FX0FSR1MKLQkgIE5vIG5lZWQgdG8gdXNlIEdfR0lOVDY0X0ZPUk1BVCBmb3IgcG90ZW50aWFsbHkgbmVnYXRpdmUgdmFsdWVzIG9mCi0JICBHc3RDbG9ja1RpbWVEaWZmLiBTaW5jZSAxLjYgdGhlc2UgY2FuIGJlIGhhbmRsZWQgd2l0aCBHU1RfU1RJTUVfQVJHUy4KLQkgIFBsdXMgaXQgY3JlYXRlcyBtb3JlIHJlYWRhYmxlIHZhbHVlcyBpbiB0aGUgbG9ncy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTc0ODAKLQotMjAxNS0xMS0wMyAxNDoyNjoyOSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc2JnQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBtYW5hZ2VyOiB1c2UgR1NUX1NUSU1FX0FSR1MgZm9yIEdzdENsb2NrVGltZURpZmYKLQkgIE5vIG5lZWQgdG8gbWFudWFsbHkgaGFuZGxlIG5lZ2F0aXZlIHZhbHVlcyBvZiBkaWZmLCBHU1RfU1RJTUVfQVJHUyBkb2VzCi0JICBleGFjdGx5IHRoaXMuCi0KLTIwMTUtMTEtMDIgMTY6NTM6MTUgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiB1c2UgR1NUX1NUSU1FX0FSR1MgZm9yIEdzdENsb2NrVGltZURpZmYKLQkgIE5vIG5lZWQgdG8gbWFudWFsbHkgaGFuZGxlIG5lZ2F0aXZlIHZhbHVlcyBvZiBkaWZmLCBHU1RfU1RJTUVfQVJHUyBkb2VzCi0JICBleGFjdGx5IHRoaXMuCi0KLTIwMTUtMTEtMDIgMTY6NDM6NDYgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHVzZSBHU1RfU1RJTUVfQVJHUyBmb3IgR3N0Q2xvY2tUaW1lRGlmZgotCSAgTm8gbmVlZCB0byBtYW51YWxseSBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIG9mIGRpZmYsIEdTVF9TVElNRV9BUkdTIGlzCi0JICBhdmFpbGFibGUgZm9yIHRoaXMuCi0KLTIwMTUtMTAtMzAgMTA6MDU6MzcgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JICBhdWRpb2NoZWJiYW5kOiBGaXggdHlwbyBpbiBleGFtcGxlIHBpcGVsaW5lCi0JICBGaXggdHlwbyBpbiBleGFtcGxlIHBpcGVsaW5lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NzM0MAotCi0yMDE1LTEwLTI4IDIzOjQ3OjMwICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vwcm92aWRlci5jOgotCSAgdjRsMjogZml4IGRvdWJsZS11bnJlZiBpbiB0aGUgdjRsMiBkZXZpY2UgcHJvdmlkZXIKLQotMjAxNS0xMC0yNyAxMDo0ODowMCArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkgIG1hdHJvc2thbXV4OiBkb24ndCBkcm9wIEpQRUcgZnJhbWVzIHRoYXQgb25seSBoYXZlIFBUUyBidXQgbm8gRFRTIHNldAotCSAgRm9yIHRoZSBNUy9WZlcgY29kZWMgaWRzLCB3ZSB3YW50IHRvIHdyaXRlIERUUyB0aW1lc3RhbXBzIGluc3RlYWQKLQkgIG9mIFBUUyBiZWNhdXNlIHRoYXQncyB3aGF0IGV2ZXJ5b25lIGVsc2Ugc2VlbXMgdG8gZG8gKGFuZCBpdCdzIGFsc28KLQkgIGhvdyBpdCBpcyBpbiBBVkkpLiBTbyBmb3IgdGhvc2UgaW5wdXQgZm9ybWF0cyB3ZSB1c2UgdGhlIGJ1ZmZlciBEVFMKLQkgIGluc3RlYWQgb2YgdGhlIFBUUy4gSG93ZXZlciwgaWYgdGhlcmUncyBubyBEVFMgc2V0IGJ1dCBvbmx5IHRoZSBQVFMKLQkgIHRoZW4ganVzdCB0YWtlIHRoZSBQVFMgaW5zdGVhZCBvZiBkcm9wcGluZyB0aGUgaW5wdXQgYnVmZmVyLiBUaGlzCi0JICBpcyB1c2VmdWwgZXNwZWNpYWxseSBmb3IgSS1mcmFtZSBvbmx5IGNvZGVjcyBsaWtlIEpQRUcgYW5kIGh1ZmZ5dXYsCi0JICBidXQgc2hvdWxkIGFsc28gYmUgZmluZSBhcyBmYWxsYmFjayBpbiBnZW5lcmFsLgotCSAgRml4ZXMgcmVncmVzc2lvbiB3aXRoIGlucHV0IEpQRUcgZnJhbWVzIHRoYXQgb25seSBoYXZlIFBUUyBzZXQgb24gdGhlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY5NjcKLQotMjAxNS0xMC0yNCAyMzo1NzozOCArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BsaXRtdXguYzoKLQkgIHRlc3RzL2NoZWNrL3NwbGl0bXV4OiB0ZXN0IHRoYXQgdGhlIHJlbGVhc2VfcGFkIHZmdW5jIG9mIHNwbGl0bXV4c2luayBhY3R1YWxseSByZWxlYXNlcyBwYWRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNjIyCi0KLTIwMTUtMTAtMjQgMjM6NTc6MjkgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IGRvIG5vdCBkZXN0cm95IHRoZSBtdWx0aXF1ZXVlICYgbXV4ZXIgd2hlbiBnb2luZyB0byBOVUxMCi0JICBJbnN0ZWFkLCBkZWxheSBpdCB1bnRpbCBhbGwgcmVxdWVzdCBwYWRzIGhhdmUgYmVlbiByZWxlYXNlZC4gVGhpcyBpcwotCSAgYmVjYXVzZSB0aGUgcmVsZWFzZV9wYWQoKSB2ZnVuYyByZXF1aXJlcyB0aGUgbXVsdGlxdWV1ZSBhbmQgbXV4ZXIgdG8KLQkgIGJlIHRoZXJlIGluIG9yZGVyIHRvIHJlbGVhc2UgdGhlaXIgcmVxdWVzdCBwYWRzIGFzIHdlbGwuIElmIHRob3NlCi0JICBlbGVtZW50cyBhcmUgZGVzdHJveWVkIGVhcmxpZXIsIHJlbGVhc2VfcGFkKCkgZG9lcyBub3Qgd29yaywgbm8KLQkgIHBhZHMgYXJlIHJlbGVhc2VkIGFuZCBzb21lIHJlc291cmNlcyBhcmUgbGVha2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzYyMgotCi0yMDE1LTEwLTIwIDE1OjI4OjEwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFJlYWQgYnVmZmVyIHRpbWVzdGFtcCAqYWZ0ZXIqIGFjdHVhbGx5IHNldHRpbmcgaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY4MDkKLQotMjAxNS0xMC0yNCAxNzoxNDowNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5oOgotCSAgc2NhbGV0ZW1wbzogRml4IGhhbmRsaW5nIG9mIHJhdGUgPCAwCi0JICBXZSBoYXZlIHRvIHJldmVyc2UgYWxsIHNhbXBsZXMgaW4gYSBidWZmZXIgYmVmb3JlIHByb2Nlc3NpbmcgdGhlbSB0byBwcm9wZXJseQotCSAgaGF2ZSBjb250aW51b3VzIGRhdGEgZnJvbSBvbmUgYnVmZmVyIHRvIGFub3RoZXIuIEFzIGEgcmVzdWx0IHdlIHdpbGwgaGF2ZSBhCi0JICBuZWdhdGl2ZSBhcHBsaWVkIHJhdGUgYW5kIGEgcmF0ZSBvZiAxLjAuCi0JICBBbHNvIG1ha2Ugc3VyZSB0aGF0IGlucHV0IGJ1ZmZlcnMgYXJlIGNvcnJlY3RseSBjbGlwcGVkIHRvIHRoZSBzZWdtZW50LAotCSAgb3RoZXJ3aXNlIG91ciBjYWxjdWxhdGlvbnMgYXJlIGdvaW5nIHRvIGdvIHdyb25nLgotCSAgQWxzbyBjb3B5IG92ZXIgdGhlIHNlZ21lbnQgZXZlbnQncyBzZXF1ZW5jZSBudW1iZXIgdG8gdGhlIG91dHB1dCBzZWdtZW50IHdoaWxlCi0JICB3ZSdyZSBhdCBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTcwMzMKLQotMjAxNS0xMC0xOSAxODowNDo1NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBicmVhayBhcyBzb29uIGFzIG5vbi1pbnRlcmxhY2VkIGlmIGZvdW5kCi0JICBJdCBsb29rcyBmb3IgYSBub24taW50ZXJsYWNlZCBlbnRyeSBvbiB0aGUgZmlsdGVyIGNhcHMsIGJyZWFrCi0JICBhcyBzb29uIGFzIG9uZSBpcyBmb3VuZCB0byBhdm9pZCB3YXN0aW5nIGNwdQotCi0yMDE1LTEwLTE5IDE3OjUwOjI4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGltcGxlbWVudCBhY2NlcHQtY2FwcwotCSAgSW1wbGVtZW50IGFjY2VwdC1jYXBzIGhhbmRsZXIgdG8gYXZvaWQgZG9pbmcgYSBmdWxsIGNhcHMgcXVlcnkKLQkgIGRvd25zdHJlYW0gdG8gaGFuZGxlIGl0LgotCSAgVGhpcyBjb21taXQgaW1wbGVtZW50cyBhY2NlcHQtY2FwcyBhcyBhIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBfZ2V0Y2FwcwotCSAgZnVuY3Rpb24sIHNvIGl0IGV4cG9zZXMgdGhlIHNhbWUgbGltaXRhdGlvbnMgdGhhdCBnZXRjYXBzIHdvdWxkLgotCSAgRm9yIGV4YW1wbGUsIG5vdCBhY2NlcHRpbmcgcmVuZWdvdGlhdGlvbiB0byBjYXBzIHdpdGggY2Fwc2ZlYXR1cmVzIHdoZW4KLQkgIGl0IHdhcyBsYXN0IGNvbmZpZ3VyZWQgdG8gYSBjYXBzIHRoYXQgaXQgaGFzIHRvIGRlaW50ZXJsYWNlLgotCi0yMDE1LTEwLTE5IDE3OjA2OjI4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICB0ZXN0czogZGVpbnRlcmxhY2U6IGZpeCBzbWFsbCB0eXBvIGluIGNvbW1lbnQKLQotMjAxNS0xMC0yNiAwMDo0MToyOCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2ZpbGVzL01ha2VmaWxlLmFtOgotCSAgY2hlY2s6IERpc3Qgc3BsaXR2aWRlbzBbMDEyXS5vZ2cgdGVzdCBmaWxlcy4KLQotMjAxNS0xMC0yMyAyMDoxNjoxNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5oOgotCSAgc2NhbGV0ZW1wbzogQWRkIHN1cHBvcnQgZm9yIEY2NAotCi0yMDE1LTEwLTIyIDE3OjQwOjM4IC0wNzAwICBNaXNjaGEgU3BpZWdlbG1vY2sgPG1zcGllZ2VsbW9ja0BnbWFpbC5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L3J0cC9SRUFETUU6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIGRvY3M6IE1pbm9yIGZpeGVzIGluIHZhcmlvdXMgcGxhY2VzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2OTk2Ci0KLTIwMTUtMTAtMjEgMTc6NDM6MzEgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6Ci0JICBnb29tOiByZW1vdmUgY29tcGlsZXIgdHJpY2sKLQkgIEFmdGVyIGNvbW1pdCAyY2I2Y2ZlZDIyMTY2YjI2MmFlNTBjYjU4ZjNmZjExZGQ4YmE5MWY5IHRoZXJlIGlzIG5vIG5lZWQgdG8KLQkgIHRyaWNrIHRoZSBjb21waWxlciBhbnltb3JlIGFib3V0IHRoZSB1c2FnZSBvZiB2YXJpYWJsZSBjcHVGbGF2b3VyLgotCi0yMDE1LTEwLTIxIDE0OjM1OjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjk5ODAwYSB0byBiMzE5OTA5Ci0KLTIwMTUtMTAtMjEgMTc6NDE6MzggKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5oOgotCSAgYXVkaW9meDogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgUmVtb3ZlIHVuc3VlZCB2YXJpYWJsZSBoYXZlX2NvZWZmcyBpbiBhdWRpb2Z4YmFzZWlpcmZpbHRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjkwNQotCi0yMDE1LTEwLTIwIDE3OjI5OjQyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBVc2UgbmV3IEdTVF9FTkFCTEVfRVhUUkFfQ0hFQ0tTICNkZWZpbmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY4NzAKLQotMjAxNS0xMC0yMSAxNDoyNTo1NSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogUkVBRE1FOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDlhZWQxZDcgdG8gYjk5ODAwYQotCi0yMDE1LTEwLTIxIDExOjUzOjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogcmVsYXggY3JlYXRpb24gdGltZSBwYXJzaW5nCi0JICBQYXJzZSB3cm9uZyB0aW1lc3RhbXBzIGxpa2Ugd2UgdXNlZCB0byB3cml0ZSBhcyB3ZWxsLAotCSAgZS5nLiAxMDo5OjQyLCBhbmQgdGhlIGhvdXIgbWlnaHQgYmUgd2l0aG91dCBhIGxlYWRpbmcKLQkgIHplcm8gaW4gYW55IGNhc2UuCi0KLTIwMTUtMTAtMjEgMTE6NDU6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBmaXggaW5kZW50YXRpb24KLQotMjAxNS0xMC0yMSAxMTo0NDo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGV4dHJhY3QgYm90aCBjcmVhdGlvbiBkYXRlIGFuZCB0aW1lCi0JICBCZWZvcmUgd2Ugb25seSBleHRyYWN0ZWQgdGhlIGRhdGUgcGFydC4KLQotMjAxNS0xMC0yMSAxMToxNjowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogZml4IHdyaXRpbmcgb2YgY3JlYXRpb24gdGltZQotCSAgRG9uJ3Qgd3JpdGUgdGltZSBhcyBlLmcuIDExOjk6NDIKLQotMjAxNS0xMC0xMyAxMjo0Mjo1NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgcnRwajJrcGF5OiB1cGRhdGUgZnJhZ21lbnQgb2Zmc2V0Ci0JICBJdCB3YXMgYWx3YXlzIGJlaW5nIHNldCB0byAwLCBtYWtpbmcgdGhlIHJlc3VsdGluZyBzdHJlYW0gYnJva2VuCi0JICBmb3IgdGhlIHJlY2VpdmVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NDIyCi0KLTIwMTUtMTAtMTkgMTU6MzY6MzcgKzAzMDAgIFJ5YW4gSGVuZHJpY2tzb24gPHJ5YW4uaGVuZHJpY2tzb25AYWx1bS5taXQuZWR1PgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogRG9uJ3QgdW5jb25kaXRpb25hbGx5IHVzZSBzdHJubGVuKCkKLQkgIEl0J3Mgbm90IGF2YWlsYWJsZSBvbiBvbGRlciBPU1ggYW5kIHdlIGNhbiBhcyB3ZWxsIHVzZSBtZW1jaHIoKSBoZXJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjE1NAotCi0yMDE1LTEwLTE5IDE3OjM4OjMyICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBhdXBhcnNlOiBGaXggZXZlbnQgbWVtb3J5IGxlYWsKLQkgIEZyZWUgdGhlIGV2ZW50IGFmdGVyIGJlaW5nIGhhbmRsZWQgdG8gcHJldmVudCBtZW1vcnkgbGVhay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY3OTkKLQotMjAxNS0xMC0xOSAwOToxNDoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jOgotCSAgcXRtdXg6IHVuaWZ5IHJhdyBhdWRpbyBjYXBzIGludG8gYSBzaW5nbGUgY2FwcyBzdHJ1Y3R1cmUKLQotMjAxNS0xMC0xNCAxNTo0Mjo1MCAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8cmV5bmFsZG9Ab3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBzdXBwb3J0IGZvciBGRlYxIGNvZGVkIHN0cmVhbXMgaW4gbW92Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNDk1Ci0KLTIwMTUtMTAtMTQgMTU6NTM6MjYgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogRU9TIGltbWVkaWF0ZWx5IGlmIHdlIGhhdmUgYW4gZW1wdHkgc2VlayBzZWdtZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4MzE2Ci0KLTIwMTUtMTAtMTQgMTA6NDM6MTkgKzAzMDAgIFN0YXZyb3MgVmFnaW9uaXRpcyA8c3RhdnJvc3ZAZGlnaXNvZnQudHY+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogTWFrZSBub24taW5jbHVzaXZlIHNlZ21lbnQgYm91bmRhcmllcyBpbmNsdXNpdmUKLQkgIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGZpbGVzcmMgYW5kIHNvdXBodHRwc3JjIGFyZSBiZWhhdmluZwotCSAgZGlmZmVyZW50bHkgcmVnYXJkaW5nIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgc2VnbWVudCBib3VuZGFyaWVzLiBUaGUKLQkgIGZpbGVzcmMgaXMgdXNpbmcgYSBub24taW5jbHVzaXZlIGJvdW5kYXJpZXMsIHdoaWxlIHRoZSBzb3VwaHR0cHNyYwotCSAgdXNlcyBpbmNsdXNpdmUuIEN1cnJlbnRseSB0aGUgaGxzZGVtdXggY2FsY3VsYXRlcyB0aGUgYm91bmRhcmllcyBhcwotCSAgaW5jbHVzaXZlLCBzbyBmb3IgdGhpcyByZWFzb24gdGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoIHRoZSBzb3VwaHR0cHNyYywKLQkgIGJ1dCB0aGVyZSBpcyBhbiBpc3N1ZSBpbiB0aGUgZmlsZXNyYy4KLQkgIFRoZSBHc3RTZWdtZW50IGlzIG5vbi1pbmNsdXNpdmUsIHNvIHRoZSBwcm9wb3NlZCBzb2x1dGlvbiBpcyB0byB1c2UKLQkgIG5vbi1pbmNsdXNpdmUgYm91bmRhcmllcyBpbiB0aGUgaGxzZGVtdXggaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudC4KLQkgIE1ha2UgdGhlIGNoYW5nZSBpbiB0aGUgaGxzZGVtdXgsIHdpbGwgYnJlYWsgdGhlIHNvdXBodHRwc3JjLCB3aGljaAotCSAgd2lsbCBleHBlY3QgaW5jbHVzaXZlIGJvdW5kYXJpZXMsIGJ1dCB0aGUgaGxzZGVtdXggd2lsbCBvZmZlcgotCSAgbm9uLWluY2x1c2l2ZS4gVGhpcyBjaGFuZ2UgbWFrZXMgc3VyZSB0aGF0IHRoZSBub24taW5jbHVzaXZlCi0JICBib3VuZGFyaWVzIGFyZSBjb252ZXJ0ZWQgdG8gaW5jbHVzaXZlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODMxNgotCi0yMDE1LTEwLTExIDIyOjA3OjU0ICswMDAwICBHcmFoYW0gTGVnZ2V0dCA8bWluZnJpbkBzaGFycC5mbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuaDoKLQkgIHNvdXBodHRwY2xpZW50c2luazogQWRkIHRoZSByZXRyeSBhbmQgcmV0cnktZGVsYXkgcHJvcGVydGllcwotCSAgVGhlc2UgYWxsb3cgYSBmYWlsZWQgcmVxdWVzdCB0byBiZSByZXRyaWVkIGFmdGVyIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcwotCSAgaW5zdGVhZCBvZiBmYWlsaW5nIHRoZSBwaXBlbGluZS4gVGFrZSBhY2NvdW50IG9mIHRoZSBSZXRyeS1BZnRlciBoZWFkZXIgaWYKLQkgIHByZXNlbnQuIEFkZCByZXRyaWVzIHBhcmFtZXRlciB0aGF0IGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgYW4gSFRUUAotCSAgcmVxdWVzdCB3aWxsIGJlIHJldHJpZWQgYmVmb3JlIGZhaWxpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2MzE4Ci0KLTIwMTUtMTAtMTQgMTI6MDM6MTUgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBjYXBzIGxlYWsKLQkgIElmIHRoZSBRdERlbXV4U3RyZWFtIGFyZSByZS11c2VkIHRoZXkgbWF5IGFscmVhZHkgaGF2ZSBjYXBzIHdoaWNoIHVzZWQKLQkgIHRvIGJlIGxlYWtlZC4KLQkgIFJlcHJvZHVjZWQgdXNpbmcgdGhlCi0JICB2YWxpZGF0ZS5kYXNoLnBsYXliYWNrLnNlZWtfZm9yd2FyZC5kYXNoX2V4TVBEX0JJUF9UQzEgdmFsaWRhdGUKLQkgIHNjZW5hcmlvLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjU2MQotCi0yMDE1LTEwLTE0IDA5OjI5OjUwICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCB0YWdsaXN0IG1lbW9yeSBsZWFrCi0JICBGcmVlIHRoZSBzdHJlYW0gYW5kIGl0cyBzdWIgaXRlbXMgaW5zdGVhZCBvZiBqdXN0IHRoZSBzdHJlYW0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY1NDQKLQotMjAxNS0xMC0xMSAxMjowNjoyNiArMDEwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JICBxdG11eDogQWxsb3cgbmVnb3RpYXRpbmcgdG8gUzggYXMgYSByYXcgZm9ybWF0IGJ1dCBzdG9wIG1ha2luZyBpdCBiZXN0IGNob2ljZQotCSAgTmVnb3RpYXRpb24gdG8gYXVkaW8veC1yYXcsZm9ybWF0PVM4IHdhcyBub3QgcG9zc2libGUgYmVjYXVzZSBTOCBkb2VzCi0JICBub3QgaGF2ZSBhIGJpdCBvcmRlciBzbyB3ZSBlbmRlZCB1cCBkb2luZyBgaWYgKCFlbnRyeS5mb3VyY2MpIGdvdG8gcmVmdXNlX2NhcHM7YAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjM4NwotCi0yMDE1LTEwLTExIDA5OjE4OjQwICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBBZGQgcHJvcmVzIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTYzODgKLQotMjAxNS0xMC0xMiAxODo1NjozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogYWRkIEdTVF9QTFVHSU5TX0JBU0VfTElCUyBmb3IgZmx2ZGVtdXggY2hlY2sKLQkgIFNvIGl0IHB1bGxzIGluIHRoZSByaWdodCBsaWJnc3R0YWctMS4wLgotCi0yMDE1LTEwLTExIDIyOjI3OjQ3ICswMTAwICBKdWxpZW4gSXNvcmNlIDxqLmlzb3JjZUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dvb20vTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ29vbS9nc3RhdWRpb3Zpc3VhbGl6ZXIuYzoKLQkqIGdzdC9nb29tL2dzdGF1ZGlvdmlzdWFsaXplci5oOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5oOgotCSogZ3N0L2dvb20yazEvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ29vbTJrMS9nc3RhdWRpb3Zpc3VhbGl6ZXIuYzoKLQkqIGdzdC9nb29tMmsxL2dzdGF1ZGlvdmlzdWFsaXplci5oOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5oOgotCSAgZ29vbS9nb29tMmsxOiByZW1vdmUgb2Jzb2xldGUgbGVmdCBvdmVyIGZpbGVzCi0JICBUaGV5IG5vdyB1c2UgdGhlIG5ldyBHc3RBdWRpb1Zpc3VhbGl6ZXIgYmFzZSBjbGFzcwotCSAgZnJvbSBnc3QtcGx1Z2lucy1iYXNlL2dzdC1saWJzL2dzdC9wYnV0aWxzCi0JICBBbHNvIGZpeGVkIHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gZ3N0X2F1ZGlvX3Zpc3VhbGl6ZXJfZ2V0X3R5cGUKLQkgIEFkZGVkIEdTVF9QTFVHSU5TX0JBU0VfTElCUyB0byBNYWtlZmlsZS5hbSBhbmQgcmUtb3JkZXIgTElCQURELgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjg3NQotCi0yMDE1LTEwLTEyIDEwOjQ4OjIzICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogRml4IGJ1ZmZlciBtZW1vcnkgbGVhayBkdXJpbmcgZmFpbHVyZXMKLQkgIG1hcHBlZCBidWZmZXIgaXMgbm90IGJlaW5nIHVubWFwcGVkIGR1cmluZyBmYWlsdXJlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjIzMQotCi0yMDE1LTEwLTEyIDExOjE4OjUxICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXBodHRwY2xpZW50c2luazogQ2hlY2sgaWYgc291cCBtZXNzYWdlIGlzIGNyZWF0ZWQKLQkgIElmIHNvdXAgbWVzc2FnZSBpcyBub3QgY3JlYXRlZCB0aGVuIHRoZSBzYW1lIHNob3VsZCBub3QgYmUgcGFzc2VkCi0JICBvbiwgd2hpY2ggaXMgcmVzdWx0aW5nIGluIHNlZ2ZhdWx0LiBIZW5jZSB0aHJvd2luZyBhIHdhcm5pbmcgbWVzc2FnZQotCSAgYW5kIHJldHVybmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTMyNgotCi0yMDE1LTEwLTEyIDExOjE1OjE1ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXBodHRwY2xpZW50c2luazogQ2hlY2sgaWYgbG9jYXRpb24gYmVpbmcgc2V0IGlzIHZhbGlkCi0JICBBZGRpbmcgYSBjaGVjayBpbiBzZXRfcHJvcGVydHkgdG8gZmluZCBpZiB0aGUgbG9jYXRpb24gdXJpIGlzIHZhbGlkCi0JICBhbmQgcHJpbnRpbmcgd2FybmluZyBpZiBub3QgdmFsaWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1MzI2Ci0KLTIwMTUtMTAtMTIgMTE6MDk6MzAgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSAgc291cGh0dHBjbGllbnRzaW5rOiBGaXggbWVtb3J5IGxlYWtzIGR1cmluZyBmYWlsdXJlcwotCSAgZnJlZWluZyBzdHJlYW1oZWFkZXJfYnVmZmVycyBhbmQgc2VudF9idWZmZXJzIGR1cmluZyBmYWlsdXJlIGNhc2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTMyNgotCi0yMDE1LTEwLTEyIDExOjAzOjE3ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXBodHRwY2xpZW50c2luazogUmVwbGFjZSByZWR1bmRhbnQgZnJlZV9idWZmZXJfbGlzdCBmdW5jdGlvbgotCSAgUmVtb3ZpbmcgZnJlZV9idWZmZXJfbGlzdCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggYWxyZWFkeSBhdmFpbGFibGUgZnVuY3Rpb24KLQkgIGdfbGlzdF9mcmVlX2Z1bGwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUzMjYKLQotMjAxNS0xMC0xMSAxNjo0MDowMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjaGVjazogRG9uJ3QgZm9yZ2V0IGJhc2UgQ0ZMQUdTIGZvciBmbHZkZW11eCBjaGVjawotCSAgZWxlbWVudHMvZmx2ZGVtdXguYzoyNToyNTogZmF0YWwgZXJyb3I6IGdzdC90YWcvdGFnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKLQotMjAxNS0xMC0xMSAxMTozNzo1MSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBtYXRyb3NrYW11eDogQ3JlYXRlIGEgVElNRSBzZWdtZW50IHdoZW4gY3JlYXRpbmcgc3RyZWFtYWJsZSBvdXRwdXQKLQkgIFJlbGF0ZWQgdG8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDQzNSB3aGljaAotCSAgZG9lcyB0aGUgc2FtZSBmb3IgZmx2bXV4LgotCi0yMDE1LTA5LTIzIDEzOjUwOjUyICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9mbHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogb3V0cHV0IHNwZWV4IHZvcmJpc2NvbW1lbnQgYXMgYSBHc3RUYWdMaXN0Ci0JICBUaGlzIGlzIHdoYXQgc3BlZXhkZWMgZXhwZWN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU0NzgKLQotMjAxNS0wOS0yMiAyMjo1OToxNiArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmM6Ci0JICBmbHZtdXg6IEdTVF9CVUZGRVJfT0ZGU0VUcyBzaG91bGQgYmUgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORQotCSAgT3IgZWxzZSBmbHZkZW11eCBkb24ndCB1bmRlcnN0YW5kIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0NDM1Ci0KLTIwMTUtMDktMDIgMTA6NDQ6NTkgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQGdtYWlsLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zsdm11eC5jOgotCSAgZmx2bXV4OiB1c2UgdGltZSBzZWdtZW50IGFuZCBjb3B5IHRpbWVzdGFtcHMgd2hlbiBzdHJlYW1hYmxlCi0JICBBZGQgYSBiYXNpYyB0ZXN0IHVzaW5nIHNwZWV4IGRhdGEgdG8gdmVyaWZ5IHRpbWVzdGFtcGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ0MzUKLQotMjAxNS0wOS0yMyAxMzoxNDowMyArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogc3BlZXggaXMgYWxzbyBhbHdheXMgMTZLSHoKLQkgIFRoaXMgaXMganVzdCBhIGNvc21ldGljIGNoYW5nZSBmb3IgdGhlIGxvZ3MsIHNpbmNlIHRoZSByaWdodCBjYXBzCi0JICBmb3IgU3BlZXggaXMgYmVpbmcgc2V0IGVsc2V3aGVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU0NzkKLQotMjAxNS0wNy0xNCAxNToxOTo0NCArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cG1hbmFnZXI6IEFkZCAnc291cmNlLXN0YXRzJyB0byBzdGF0cyBhbmQgbm90aWZ5Ci0JICBBZGQgc3RhdGl0aWNzIGZyb20gZWFjaCBydHAgc291cmNlIHRvIHRoZSBydHAgc2Vzc2lvbiBwcm9wZXJ0eS4KLQkgICdzb3VyY2Utc3RhdHMnIGlzIGEgR1ZhbHVlQXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgR3N0U3RydWN0dXJlIG9mCi0JICBzdGF0cyBmb3Igb25lIHJ0cCBzb3VyY2UuCi0JICBUaGUgYXZhaWxhYmlsaXR5IG9mIG5ldyBzdGF0cyBpcyBzaWduYWxlZCB2aWEgZ19vYmplY3Rfbm90aWZ5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjY2OQotCi0yMDE1LTA2LTA1IDE3OjIwOjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBJbXBsZW1lbnQgc2VuZGluZyBvZiByZWR1Y2VkIHNpemUgUlRDUCBwYWNrZXRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNDU2Ci0KLTIwMTUtMTAtMDggMTU6MDE6MTMgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuaDoKLQkgIGF1ZGlvZng6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQkgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgJ2RlZ3JlZScgaW4gYXVkaW9keW5hbWljCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2MjM0Ci0KLTIwMTUtMTAtMDggMTQ6NDQ6MDcgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IG1lbW9yeSBsZWFrIGZvciBjb3JydXB0ZWQgZmlsZQotCSAgRnJlZSBicmFuZHMgYmVmb3JlIG92ZXJyaWRpbmcgdGhlbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTYyMjYKLQotMjAxNS0xMC0wOCAxMTo0NDowNCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmM6Ci0JICBnZGtwaXhidWZkZWM6IEZpeCBwaXhidWZfbG9hZGVyIGxlYWsgZHVyaW5nIGZhaWx1cmVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2MjE5Ci0KLTIwMTUtMTAtMDcgMjM6MjM6NDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBBZGQgbWlzc2luZyBicmVhawotCi0yMDE1LTEwLTA3IDEzOjAzOjAyICswMjAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBtYW5hZ2VyOiBUYWtlIGludG8gYWNjb3VudCBwYWNrZXQgcmF0ZSBmb3IgbWF4LWRyb3BvdXQgYW5kIG1heC1taXNvcmRlciBjYWxjdWxhdGlvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzMTEKLQotMjAxNS0xMC0wNyAxMzowMjoxMiArMDIwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBydHBtYW5hZ2VyOiBhZGQgIm1heC1kcm9wb3V0LXRpbWUiIGFuZCAibWF4LW1pc29yZGVyLXRpbWUiIHByb3BzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMzExCi0KLTIwMTUtMTAtMDcgMTc6MTQ6NTcgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGaXggZGF0ZSBtZW1vcnkgbGVhawotCSAgV2hlbiBnZXR0aW5nIGRhdGUgZnJvbSB0YWdsaXN0LCB0aGUgbWVtb3J5IHNob3VsZCBiZSBmcmVlZCBhZnRlcgotCSAgdXNpbmcgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2MTcxCi0KLTIwMTUtMTAtMDUgMTE6MDM6MzggKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGaXggc2FtcGxlIG1lbW9yeSBsZWFrCi0JICBXaGVuIGdldHRpbmcgc2FtcGxlIGZyb20gdGFnbGlzdCwgdGhlIG1lbW9yeSBzaG91bGQgYmUgZnJlZWQgYWZ0ZXIKLQkgIHVzaW5nIGl0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NjA2OAotCi0yMDE1LTEwLTA1IDEzOjEwOjU2ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOgotCSAgY3V0dGVyOiBGaXggYnVmZmVyIGxlYWsKLQkgIEJ1ZmZlciBpcyBhZGRlZCB0byB0aGUgaW50ZXJuYWwgY2FjaGUsIGFuZCBwdXNoZWQgb25seSB3aGVuIGFjY3VtdWxhdGVkCi0JICBidWZmZXIgZHVyYXRpb24gY3Jvc3NlcyAyMDAgbXMuIFNvIHdoZW4gdGhlIGNoYWluIGVuZHMsIHRoZSBidWZmZXIgYWNjdW11bGF0ZWQKLQkgIGlzIG5vdCBmcmVlZC4gRnJlZWluZyB0aGUgY2FjaGUgd2hlbiB0aGUgc3RhdGUgY2hhbmdlcyBmcm9tIFBBVVNFRCB0byBSRUFEWS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQyMTIKLQotMjAxNS0wOC0zMSAyMToxMDoxNiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFVzZSBkZWZhdWx0IHVwc3RyZWFtIGV2ZW50IGhhbmRsaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNjk0Ci0KLTIwMTUtMDgtMzEgMjE6MDU6MDMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBtdXg6IEFzIDB4RkZGRkZGRkYgaXMgYSB2YWxpZCBzc3JjLCBjaGVjayBpZiBpdCBoYXMgYmVlbiBzZXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI2OTQKLQotMjAxNS0wNy0yMiAwOTo0NzoyMiArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmM6Ci0JICBnc3RydHBtdXg6IGFsbG93IHRoZSBzc3JjLXByb3BlcnR5IHRvIGRlY2lkZSBzc3JjIG9uIG91dGdvaW5nIGJ1ZmZlcnMKLQkgIEJ5IG5vdCBkb2luZyB0aGlzLCB0aGUgbXV4ZXIgaXMgbm90IGVmZmVjdGl2ZWx5IGEgcnRwbXV4ZXIsIHJhdGhlciBhCi0JICBmdW5uZWwsIHNpbmNlIGl0IHNob3VsZCBiZSBhIHNpbmdsZSBzdHJlYW0gdGhhdCBleGlzdHMgdGhlIG11eGVyLgotCSAgSWYgbm90IHNwZWNpZmllZCwgdGFrZSB0aGUgZmlyc3Qgc3NyYyBzZWVuIG9uIGEgc2lua3BhZCwgYWxsb3dpbmcgdXBzdHJlYW0KLQkgIHRvIGRlY2lkZSBzc3JjIGluICJwYXNzdGhyb3VnaCIgd2l0aCBvbmx5IG9uZSBzaW5rcGFkLgotCSAgQWxzbywgbGV0IGRvd25zdHJlYW0gc3NyYyBvdmVycnVsZSBpbnRlcm5hbCBjb25maWd1cmVkIG9uZQotCSAgV2UgaGVuY2UgaGFzIHRoZSBmb2xsb3dpbmcgb3JkZXIgZm9yIGRldGVybWluaW5nIHRoZSBzc3JjIHVzZWQgYnkKLQkgIHJ0cG11eDoKLQkgIDAuIFN1Z2dlc3Rpb24gZnJvbSBHc3RSVFBDb2xsaXNpb24gZXZlbnQKLQkgIDEuIERvd25zdHJlYW0gY2FwcwotCSAgMi4gc3NyYy1Qcm9wZXJ0eQotCSAgMy4gKEZpcnN0KSB1cHN0cmVhbSBjYXBzIGNvbnRhaW5pbmcgc3NyYwotCSAgNC4gUmFuZG9tbHkgZ2VuZXJhdGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNjk0Ci0KLTIwMTUtMTAtMDIgMjI6NDI6MjAgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IEZpeHVwIGxhc3QgY29tbWl0Ci0KLTIwMTUtMTAtMDIgMjI6MjE6NDUgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBVcGRhdGUgR0xpYiBkZXBlbmRlbmN5IHRvIDIuNDAuMAotCi0yMDE1LTA2LTMwIDE2OjU2OjE5ICswMjAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBzdGF0czogYWRkIHV0aWxpdHkgZm9yIGNhbGN1bGF0aW5nIFJUUCBwYWNrZXQgcmF0ZQotCi0yMDE1LTA4LTEwIDE4OjE0OjM5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogaGFuZGxlIGVtcHR5IHNlZ21lbnRzIGluIHNlZWtpbmcgYWRqdXN0Ci0JICBJZiBzZWVraW5nIHRhcmdldHMgYW4gZW1wdHkgc2VnbWVudCBza2lwIGl0IGFzIHRoZXJlIGlzIG5vIG1lZGlhCi0JICBvZmZzZXQgdG8gZ2V0IGZyb20gaXQuIEluc3RlYWQgbG9vayBmb3IgdGhlIG5leHQgb25lLgotCSAgVGhpcyBkb2Vzbid0IG1ha2Ugc2Vla2luZyBpbiBwdXNoLW1vZGUgd29yayBpZiB5b3Ugc2VlayB0byBhbgotCSAgZW1wdHkgc2VnbWVudCBidXQgYXQgbGVhc3Qgd29uJ3QgZ2V0IHlvdSB0byB3cm9uZyBvZmZzZXRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzQ4NAotCi0yMDE1LTA0LTE3IDE0OjI1OjQzICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuaDoKLQkgIHNwbGl0bXV4c2luazogcG9zdCBtZXNzYWdlcyB3aGVuIGZyYWdtZW50cyBhcmUgYmVpbmcgb3BlbmVkIGFuZCBjbG9zZWQKLQkgIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byB0cmFjayB0aGUgY3JlYXRlZCBmcmFnbWVudHMKLQkgICh0byBsb2cgdGhlbSBpbiBhIHJlY29yZGluZyBkYXRhYmFzZSwgZm9yIGV4YW1wbGUpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMTA4Ci0KLTIwMTUtMDQtMjkgMTg6MjM6MjggKzAxMDAgIFJhbWlybyBQb2xsYSA8cmFtaXJvLnBvbGxhQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBzcGxpdG11eHNpbms6IGFsbG93IG5vbi12aWRlbyBzdHJlYW1zIHRvIHNlcnZlIGFzIHJlZmVyZW5jZQotCSAgSW4gdGhlIGFic2VuY2Ugb2YgYSB2aWRlbyBzdHJlYW0sIHRoZSBmaXJzdCBzdHJlYW0gd2lsbCBiZSB1c2VkIGFzCi0JICByZWZlcmVuY2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNjE3Ci0KLTIwMTUtMDctMjIgMTc6NDU6MTIgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IGluaXRpYWxpemUgbXV4X3N0YXJ0X3RpbWUgcHJvcGVybHkKLQkgIG11eF9zdGFydF90aW1lIHJlZmVycyB0byB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBidWZmZXIKLQkgIHRoYXQgZ29lcyBmaXJzdCBpbiB0aGUgb3V0cHV0IGZpbGUuIE5vcm1hbGx5IHRoaXMgdGltZSBpcwotCSAgMCwgc28gdGhpcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byAwIGR1cmluZyB0aGUgc3RhdGUKLQkgIGNoYW5nZSB0byBQQVVTRUQuCi0JICBIb3dldmVyLCB3aGVuIGRlYWxpbmcgd2l0aCBkeW5hbWljIHBpcGVsaW5lcyBhbmQgc3RhcnRpbmcKLQkgIGEgcmVjb3JkaW5nIHdoaWxlIHRoZSBwaXBlbGluZSBoYXMgYWxyZWFkeSBydW4gZm9yIGEgd2hpbGUsCi0JICB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBmaXJzdCBidWZmZXIgaXMgPiAwIGFuZCB0aGlzIGNhdXNlcwotCSAgYSBwcm9ibGVtIHdpdGggZGV0ZWN0aW5nIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGZpbGUocykgd2hlbgotCSAgc3BsaXR0aW5nIGJ5IGR1cmF0aW9uLCBiZWNhdXNlIHRoZSBjb2RlIHdpbGwgbGF0ZXIgY29tcGFyZQotCSAgdGhlIHRocmVzaG9sZF90aW1lIHdpdGggKGxhc3QgYnVmZmVyIHJ1bm5pbmdfdGltZSAtIG11eF9zdGFydF90aW1lKQotCSAgYW5kIHdpbGwgZ2V0IGl0IHdyb25nIHVudGlsIG11eF9zdGFydF90aW1lIGFkdmFuY2VzIGVub3VnaAotCSAgdG8gbWFrZSB0aGlzIGRpZmZlcmVuY2UgPCB0aHJlc2hvbGRfdGltZSwgY3JlYXRpbmcgZW1wdHkgZmlsZXMKLQkgIGluIHRoZSBtZWFudGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM2MjQKLQotMjAxNS0wOS0xNiAxNjowMzowMiArMDkwMCAgVmluZWV0aCBUIE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBSZXZlcnNlIHBsYXliYWNrIGRvZXMgbm90IGNvbnNpZGVyIHNlZ21lbnQuc3RhcnQKLQkgIER1cmluZyByZXZlcnNlIHBsYXliYWNrLCB0aGUgbWVkaWEgc2hvdWxkIHN0b3AgcGxheWluZyBhdCBzZWdtZW50LnN0YXJ0Ci0JICBUaGlzIGRvZXMgbm90IGhhcHBlbiwgYW5kIGF2aWRlbXV4IGNvbnRpbnVlcyB0byBwcm9jZXNzIGRhdGEgZXZlbiB3aGVuCi0JICBjdXJyZW50IHRpbWVzdGFtcCBpcyBsZXNzIHRoYXQgc2VnbWVudC5zdGFydC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUwOTQKLQotMjAxNS0wOS0yMyAxMjozOTozNSArMDkwMCAgTWFuYXNhIEF0aHJleWEgPG1hbmFzYS5hdGhyZXlhQGxnZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQ2hlY2sgbXVsdGkgdHJleCB0byBmaW5kIHRyYWNrIGlkIGluIG1wNCBtcGVnLWRhc2ggc3RyZWFtCi0JICBJZiBzdHJlYW0gaGFzIG1vcmUgdGhhbiBvbmUgdHJleCBib3ggd2hpY2ggaXMgbm90IG1hdGNoZWQgdG8gYWN0dWFsCi0JICB0cmFjayBpZCwgaXQgbWFrZXMgcXRkZW11eCBjcmFzaGVkLgotCSAgQXV0aG9yIDogTWFuYXNhIEF0aHJleWEgKG1hbmFzYS5hdGhyZXlhQGxnZS5jb20pCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0ODY0Ci0KLTIwMTUtMDktMDQgMTQ6MjQ6NDUgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkgIHNtcHRlOiBnZXQgc2l6ZSwgc3RyaWRlIGluZm8gdXNpbmcgVmlkZW9JbmZvCi0JICBVc2UgVmlkZW9JbmZvIGRhdGEgdG8gZ2V0IHNpemUgc3RyaWRlIGFuZAotCSAgb2Zmc2V0LCBpbnN0ZWFkIG9mIGhhcmQgY29kZWQgbWFjcm9zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDU1OAotCi0yMDE1LTA5LTA0IDE0OjE4OjUwICswNTMwICBSYXZpIEtpcmFuIEsgTiA8cmF2aS5raXJhbkBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JICBzbXB0ZTogZnJlZSBtYXNrCi0JICBGcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvICdtYXNrJyB0byBhdm9pZAotCSAgbWVtb3J5IGxlYWsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0NTU1Ci0KLTIwMTUtMDgtMjAgMTE6MDI6NTggKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOgotCSogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmM6Ci0JKiB0ZXN0cy9pY2xlcy9nZGtwaXhidWZzaW5rLXRlc3QuYzoKLQkqIHRlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jOgotCSogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzoKLQkgIGdzdHJlYW1lcjogZ29vZDogdGVzdHM6IEZpeCBtZW1vcnkgbGVha3Mgd2hlbiBjb250ZXh0IHBhcnNlIGZhaWxzLgotCSAgV2hlbiBnX29wdGlvbl9jb250ZXh0X3BhcnNlIGZhaWxzLCBjb250ZXh0IGFuZCBlcnJvciB2YXJpYWJsZXMgYXJlIG5vdCBnZXR0aW5nIGZyZWUnZAotCSAgd2hpY2ggcmVzdWx0cyBpbiBtZW1vcnkgbGVha3MuIEZyZWUnaW5nIHRoZSBzYW1lLgotCSAgQW5kIHJlcGxhY2luZyBnX2Vycm9yX2ZyZWUgd2l0aCBnX2NsZWFyX2Vycm9yLCB3aGljaCBjaGVja3MgaWYgdGhlIGVycm9yIGJlaW5nIHBhc3NlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzg1MwotCi0yMDE1LTEwLTAyIDE2OjE4OjE1ICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IGRvZXNuJ3QgaGFuZGxlIHByb2JhdGlvbiBhbmQgcnRwIGdhcCBpbiBjYXNlIG9mIHNlbmRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDU0OAotCi0yMDE1LTEwLTAyIDE2OjE2OjMyICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cG1hbmFnZXI6IGFkZCBuZXcgb24tbmV3LXNlbmRlci1zc3JjLCBvbi1zZW5kZXItc3NyYy1hY3RpdmUgc2lnbmFscwotCSAgQWxsb3dzIGZvciBhcHBsaWNhdGlvbnMgdG8gZ2V0IGludGVybmFsIHNvdXJjZSdzIFJUUCBzdGF0aXN0aWNzLgotCSAgKGVnLiBzZW5kZXIgc291cmNlcyBmb3IgYSBzZXJ2ZXIvY2xpZW50KQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Njc0NwotCi0yMDE1LTEwLTAyIDE0OjE3OjQ4ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIHhpbWFnZXNyYzogR2F0aGVyIGFuZCBjb2FsZXNjZSBhbGwgZGFtYWdlZCBhcmVhcyBiZWZvcmUgcmV0cmlldmluZy4KLQkgIFRoZXNlIGRheXMgdGhlIHhzZXJ2ZXIgc2VlbXMgdG8gZ2l2ZSB1cyB0aGUgc2FtZSBkYW1hZ2UgcmVnaW9ucwotCSAgb3ZlciBhbmQgb3ZlciBmb3IgZW50aXJlIHdpbmRvd3MsIGFuZCB3ZSByZXRyaWV2ZSB0aGVtIG11bHRpcGxlCi0JICB0aW1lcywgd2hpY2ggZ2l2ZXMgdGltZSBmb3IgbW9yZSBkYW1hZ2UgdG8gYXBwZWFyLiBJbnN0ZWFkLCBqdXN0Ci0JICBxdWlja2x5IGdhdGhlciBhbGwgZGFtYWdlZCBhcmVhcyBpbnRvIGEgcmVnaW9uIGxpc3QgYW5kIGNvcHkKLQkgIG91dCBvbmNlLgotCi0yMDE1LTEwLTAxIDE2OjI0OjMyICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbTJrMS9NYWtlZmlsZS5hbToKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uaDoKLQkgIGdvb20yazE6IHVzZSB0aGUgbmV3IGF1ZGlvdmlzdWFsaXplciBiYXNlIGNsYXNzCi0JICBSZWJhc2UgdG8gaGF2ZSBnb29tIHVzaW5nIHRoZSBHc3RBdWRpb1Zpc3VhbGl6ZXIgYmFzZSBjbGFzcyBpbgotCSAgZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvcGJ1dGlscwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjg3NQotCi0yMDE1LTEwLTAxIDE2OjE2OjA4ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzYmdAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkqIGdzdC9nb29tL2dzdGdvb20uaDoKLQkgIGdvb206IHVzZSB0aGUgbmV3IGF1ZGlvdmlzdWFsaXplciBiYXNlIGNsYXNzCi0JICBSZWJhc2UgdG8gaGF2ZSBnb29tIHVzaW5nIHRoZSBHc3RBdWRpb1Zpc3VhbGl6ZXIgYmFzZSBjbGFzcyBpbgotCSAgZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvcGJ1dGlscwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjg3NQotCi0yMDE1LTA5LTMwIDE3OjM1OjMzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JICBkZWludGVybGVhdmU6IGltcGxlbWVudCBhY2NlcHQtY2FwcwotCSAgQXZvaWQgdXNpbmcgZGVmYXVsdCBhY2NlcHQtY2FwcyBoYW5kbGVyIHRoYXQgd2lsbCBxdWVyeSBkb3duc3RyZWFtCi0JICBhbmQgaXMgbW9yZSBleHBlbnNpdmUuIEp1c3QgY2hlY2sgaWYgdGhlIGNhcHMgaXMgY29tcGF0aWJsZSB3aXRoCi0JICB0aGUgdGVtcGxhdGUgYW5kIGNoZWNrIGlmIHRoZSBjaGFubmVscyBhcmUgdGhlIHNhbWUuCi0KLTIwMTUtMDktMzAgMDk6MzU6MzkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JICB0ZXN0czogZGVpbnRlcmxlYXZlOiBhbHNvIGNoZWNrIGZvciBjYXBzIHF1ZXJ5IHJlc3VsdHMKLQotMjAxNS0wOS0zMCAxMjozMDo1OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIGRlaW50ZXJsZWF2ZTogdXNlIHRoZSBjYXBzIHF1ZXJ5IGZpbHRlcgotCSAgSXQgd2FzIGJlaW5nIGlnbm9yZWQgYW5kIHdvdWxkIGxlYWQgdG8gd3JvbmcgcmVzdWx0cyBpZiB0aGUKLQkgIGVsZW1lbnQgZG9pbmcgdGhlIHF1ZXJ5IHdvdWxkIHJlbHkgb24gdGhlIGludGVyc2VjdGlvbiBiZWluZyBtYWRlLgotCi0yMDE1LTA5LTMwIDEwOjAwOjMxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgZGVpbnRlcmxlYXZlOiBpbXBsZW1lbnQgYSBjYXBzIHF1ZXJ5IGhhbmRsZXIgZm9yIHRoZSBzaW5rcGFkCi0JICBJdCB3YXMgbWlzc2luZyBhbmQgYXBwYXJlbnRseSBjb2RlIHJlbGllZCBvbiBoYXZpbmcgaXQgdGhlcmUKLQkgIGZvciBub3QgYWxsb3dpbmcgYSBjaGFuZ2UgaW4gdGhlIG51bWJlciBvZiBjaGFubmVscwotCi0yMDE1LTA5LTMwIDA5OjA1OjAzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgZGVpbnRlcmxlYXZlOiBmaXggY2FwcyBsZWFrCi0JICBDYXBzIGZyb20gdGhlIHBhZCB0ZW1wbGF0ZSBhcmUgYmVpbmcgbGVha2VkLiBJbiBhbnkgY2FzZSBpdCBpcwotCSAgZnJvbSBhIHN0YXRpYyBwYWQgdGVtcGxhdGUgYW5kIHdpbGwgJ2xlYWsnIGluIHRoZSBlbmQsIGp1c3QgZG9pbmcKLQkgIHRoZSBjbGVhbnVwIGZvciB0aGUgZ29vZCBwcmFjdGljZS4KLQotMjAxNS0wOS0yOSAxMToxNTowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheS5jOgotCSAgdGVzdHM6IGdka3BpeGJ1Zm92ZXJsYXk6IGFkZCBtaW5pbWFsIHVuaXQgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTc3MwotCi0yMDE1LTA5LTI5IDExOjEyOjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JICBnZGtwaXhidWZzaW5rOiBkb24ndCBsZWFrIG9sZCBwaXhlbCBidWZmZXIgd2hlbiBzZXR0aW5nIGEgbmV3IG92ZXJsYXkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU3NzMKLQotMjAxNS0wOS0yOCAyMDoyNToyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogYXZvaWQgcG90ZW50aWFsIHN0cmluZyBvdmVyZmxvdwotCSAgV2UgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgaW5wdXQgdGFncywgc28KLQkgIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgSVNSQyB0YWcgY29udGFpbnMgYSBsb25nZXIgc3RyaW5nIHRoYW4KLQkgIGV4cGVjdGVkLCBpbiB3aGljaCBjYXNlIHdlJ2Qgd3JpdGUgb3ZlciB0aGUgZW5kIG9mIHRoZSBzdGF0aWMtc2l6ZQotCSAgMTMgYnl0ZSBidWZmZXIgdGhhdCBpcyBGTEFDX19TdHJlYW1NZXRhZGF0YV9DdWVTaGVldF9UcmFjazo6aXNyYy4KLQkgIE1ha2Ugc3VyZSB0byBvbmx5IGNvcHkgdGhlIElTUkMgaWYgaXQncyBub3QgdG9vIGxvbmcsIGFuZCBtYWtlCi0JICBzdXJlIHRoZSBidWZmZXIgd2Ugd3JpdGUgdG8gaXMgYWx3YXlzIE5VTC10ZXJtaW5hdGVkIGJ5IHVzaW5nCi0JICBnX3N0cmxjcHkoKS4KLQkgIENJRCAxMzI0OTMxLgotCi0yMDE1LTA5LTI4IDE4OjAzOjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFJlbW92ZSBsZWZ0b3ZlciBhc3NlcnRpb24gZnJvbSAwLjEwCi0JICBXZSBub3cgYWxsb2NhdGUgbWVtb3J5IHZpYSBHc3RBbGxvY2F0b3IgYW5kIGFzIHN1Y2ggY2FuIGhhbmRsZSBhcmJpdHJhcnkKLQkgIGFsaWdubWVudHMsIG5vdCBvbmx5IDw9IEdfTUVNX0FMSUdOLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTcwOAotCi0yMDE1LTA5LTI1IDEwOjAxOjM3ICswMjAwICBHdWlsbGF1bWUgTWFycXVlYmllbGxlIDxndWlsbGF1bWUubWFycXVlYmllbGxlQHBhcnJvdC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBmaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gTE9BUyBjb25maWcgcmVhZGluZwotCSAgT24gcmVhZGluZyBMT0FTIGNvbmZpZywgZmxhZyB2PTEgYW5kIHZBPTEgY29tYmluYXRpb24gY2FuIG9jY3VyLCBsZWFkaW5nIHRvIHdhcm5pbmcKLQkgICJTcGVjIHNheXMgIlRCRCIuLi4iLiBSZXR1cm5pbmcgVFJVRSBvbiB0aGlzIGNhc2Ugd2hpbGUgcGFyYW1ldGVycyAnc2FtcGxlX3JhdGUnIGFuZAotCSAgJ2NoYW5uZWxzJyBhcmUgcG9pbnRpbmcgdG8gdW5pbml0aWFsaXplZCB2YWx1ZXMgY2FuIGVuZCBvbiBzZXR0aW5nIHJhbmRvbSB2YWx1ZXMgYXMKLQkgIHJhdGUgYW5kIGNoYW5uZWxzIG9uIHNyYyBjYXBzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTYxMQotCi0yMDE1LTA5LTE4IDAwOjU4OjIzICsxMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgRml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBidWlsZGluZyB3aXRoIEdfRElTQUJMRV9BU1NFUlQKLQkgIFRvdWNoZXMgcnRwbWFuYWdlciBhbmQgZ2RrcGl4YnVmc2luawotCi0yMDE1LTA4LTE4IDE0OjMwOjU3ICswMTAwICBDaHJpcyBCYXNzIDxmbG9vYmxlZmxhbUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jOgotCSAgcXRkZW11eDogc3VwcG9ydCB0aW1lZC10ZXh0IHN1YnRpdGxlIHRyYWNrcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI4MTgKLQotMjAxNS0wOS0yNiAwMDoxMjo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgZ3N0OiBEb24ndCB1c2UgZGVwcmVjYXRlZCBnc3Rfc2VnbWVudF90b19wb3NpdGlvbigpCi0KLTIwMTUtMDktMjEgMTM6NDc6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0cGJpbi9ydHBqaXR0ZXJidWZmZXIvcnRzcHNyYzogQWRkIHByb3BlcnR5IHRvIHNldCBtYXhpbXVtIG1zIGJldHdlZW4gUlRDUCBTUiBSVFAgdGltZSBhbmQgbGFzdCBvYnNlcnZlZCBSVFAgdGltZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTEyNQotCi0yMDE1LTA5LTE2IDE5OjI4OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwYmluL3Nlc3Npb246IEFsbG93IFJUQ1Agc3luYyB0byBoYXBwZW4gYmFzZWQgb24gY2FwdHVyZSB0aW1lIG9yIHNlbmQgdGltZQotCSAgU2VuZCB0aW1lIGlzIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgYW5kIHRoZSBkZWZhdWx0LCBidXQgdGhlcmUgYXJlIHVzZSBjYXNlcwotCSAgd2hlcmUgeW91IHdhbnQgdG8gc3luY2hyb25pemUgYmFzZWQgb24gdGhlIGNhcHR1cmUgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUxMjUKLQotMjAxNS0wOS0yNSAyMzo1MTowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjYuMCA9PT0KLQotMjAxNS0wOS0yNSAyMzoxNTo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuNi4wCi0KLTIwMTUtMDktMjUgMjI6NTc6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTUtMDktMjUgMTQ6MDg6MDkgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkgIHNtcHRlYWxwaGE6IERvIG5vdCBzZXQgd2lkdGgvaGVpZ2h0IGJlZm9yZSBjb21wYXJpbmcgd2l0aCBvbGQgdmFsdWVzCi0JICBPdGhlcndpc2Ugd2UgZW5kIHVwIGNvbnNpZGVyaW5nIHRoZSB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2UgYW5kIHdlIHdyb25nbHkKLQkgIHdvcmsgd2l0aCB0aGUgb2xkIHZpZGVvIGZvcm1hdCAod2hpY2ggd2lsbCBsZWFkIHRvIHdyb25nCi0JICBiZWhhdmlvdXIvc2VnZmF1bHRzKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU2MjEKLQotMjAxNS0wOS0yMyAyMDo1OTowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBY2N1bXVsYXRlIHNlZ21lbnRzIGZvciBlZGl0IGxpc3RzIGJlZm9yZSBhY3RpdmF0aW5nIHRoZSBuZXh0IHNlZ21lbnQKLQkgIGVjZWIyY2NjNzM5MDkyZDk2NGQ3ODk0NWUxOWMyZWNlZGJkMjE0ZTIgYnJva2Ugc2VnbWVudCBzZWVrcyBieSBhbHdheXMKLQkgIGFjY3VtdWxhdGluZyBzZWdtZW50cyBtYW51YWxseSB3aGVuIGFjdGl2YXRpbmcgYSBzZWdtZW50LiBUaGlzIGlzIG9ubHkKLQkgIG5lZWRlZCB3aGVuIGhhbmRsaW5nIGVkaXQgbGlzdHMsIG5vdCB3aGVuIGFjdGl2YXRpbmcgYSBzZWdtZW50IGJlY2F1c2Ugb2YgYQotCSAgc2Vlay4gRG8gdGhlIGFjY3VtdWxhdGlvbiB3aGVuIHN3aXRjaGluZyBlZGl0IGxpc3Qgc2VnbWVudHMgaW5zdGVhZC4KLQkgIFRoaXMgZml4ZXMgc2VnbWVudCBzZWVrcyBhZ2Fpbiwgd2hpbGUga2VlcGluZyBlZGl0IGxpc3RzIHBsYXliYWNrIHdvcmtpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU1NDcxCi0KLTIwMTUtMDktMjMgMTc6NDM6NTEgKzA1MzAgIFZpa3JhbSBGdWdybyA8dmlrcmFtLmZ1Z3JvQGdtYWlsLmNvbT4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogc2VuZCBwaGFzZSB2YWx1ZXMgaW4gdGhlIEdzdE1lc3NhZ2UgZm9yIFBoYXNlIGluZm8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU0NjMKLQotMjAxNS0wOS0yMiAwMDo0NjowMSArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thLW11eDogRG9uJ3Qgb3V0cHV0IGEgd2FybmluZyBvbiBNT05PIG11bHRpdmlldyBtb2RlLgotCi0yMDE1LTA5LTE5IDE3OjAyOjE4ICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkgIHJ0cHRoZW9yYWRlcGF5OiBGaXggbWVtb3J5IGxlYWtzCi0JICBUaGUgc2FtZSBtZW1vcnkgbGVha3Mgd2VyZSBmaXhlZCBpbiBpZGVudGljYWwgZmFzaGlvbiBmb3IKLQkgIHZvcmJpc2RlcGF5IGluIDA2ZWZlZmY1ZDk3OTU3NmEyNTJlNWRhZTU3ZjQ2ZDY0NDViMWRmMTIgaW4gMjAwOS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyNzcKLQotMjAxNS0wOS0xOSAxNzowNDowNyArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIHJ0cHt2b3JiaXMsdGhlb3JhfXtwYXksZGVwYXl9OiBDb3NtZXRpYyBjbGVhbnVwCi0JICAqIHVzZSBnX2xpc3RfZnJlZV9mdWxsKCksIGRvbid0IGl0ZXJhdGUgZWxlbWVudHMgbWF1YWxseSB3aGVuIGZyZWVpbmcKLQkgICogY2FsbCBnc3RfcnRwXypfcGF5X2NsZWFyX3BhY2tldCgpLCBkb24ndCBkdXBsaWNhdGUgaXRzIGNvZGUKLQkgICogdXNlIGdzdF9idWZmZXJfdW5yZWYoKSB0byBjbGFyaWZ5IHRoYXQgaXQgaXMgYnVmZmVycyBiZWluZyByZWxlYXNlZCwKLQkgIGluc3RlYWQgb2YgcmVmZXJpbmcgZGlyZWN0bHkgdG8gZ3N0X21pbmlfb2JqZWN0X3VucmVmKCkKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyNzcKLQotMjAxNS0wOS0xOSAxODo0NDoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICBydHB7dm9yYmlzLHRoZW9yYX1wYXk6IFN0b3JlIGhlYWRlcnMgaW4gdGhlIHBhY2tldCBidWZmZXJzIGxpc3RzLCBub3QgYSBOVUxMIGJ1ZmZlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTI2NQotCi09PT0gcmVsZWFzZSAxLjUuOTEgPT09Ci0KLTIwMTUtMDktMTggMTk6MzM6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjUuOTEKLQotMjAxNS0wOS0xOCAxOToyMzo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNS0wOS0xOCAxMTo1MDozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vemhfQ04ucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE1LTA5LTE3IDEwOjUwOjAxICswOTAwICBFdW5oYWUgQ2hvaSA8ZXVuaGFlMS5jaG9pQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogRml4IHRhZ2xpc3QgbGVhawotCSAgZ3N0X3RhZ19saXN0X2luc2VydCgpIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBpbnNlcnRlZCB0YWdsaXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTEzOAotCi0yMDE1LTA5LTE2IDA3OjA1OjM2ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IFNraXAgTE9BUyBBQUMgdW50aWwgYSB2YWxpZCBjb25maWcgaXMgc2Vlbi4KLQkgIEl0J3Mgbm9ybWFsIHdoZW4gZHJvcHBpbmcgaW50byB0aGUgbWlkZGxlIG9mIGEgc3RyZWFtIHRvCi0JICBub3QgYWx3YXlzIGhhdmUgdGhlIGNvbmZpZyBhdmFpbGFibGUgaW1tZWRpYXRlbHksIHNvIHNraXAgTE9BUwotCSAgdW50aWwgYSB2YWxpZCBjb25maWcgaXMgc2VlbiB3aXRob3V0IGVpdGhlciBzZXR0aW5nIGludmFsaWQKLQkgIGNhcHMgb3IgZXJyb3Jpbmcgb3V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTM4NgotCi0yMDE1LTA5LTEzIDE1OjQxOjM4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiByZXNldCBqdXN0IGEgYml0IG1vcmUgdXBvbiBmbHVzaF9zdG9wCi0KLTIwMTUtMDktMTMgMTU6NDA6MDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHJlbW92ZSBkZWFkIHN0cnVjdCBtZW1iZXIKLQotMjAxNS0wOS0xMSAxNzowOToyOCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogZml4IEdFcnJvciBtZW1vcnkgbGVhayB3aGVuIGhvc3RuYW1lIHJlc29sdXRpb24gZmFpbHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ4NjkKLQotMjAxNS0wOS0xMCAxNToyNjo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2FtdXg6IGRyb3AgSEVBREVSIGZsYWcgZnJvbSBvdXRwdXQgYnVmZmVycwotCSAgRHJvcCBIRUFERVIgZmxhZyBmcm9tIG91dHB1dCBidWZmZXJzIGlmIHRoZXkgYXJlIG5vdCBpbmRlZWQKLQkgIGhlYWRlcnMuCi0JICBGaXhlcyByZXNlbmRpbmcgb2YgaGVhZGVycyBpbiB0Y3AgY29ubmVjdGlvbiBoYW5kbGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDc2OAotCi0yMDE1LTA5LTEwIDE2OjAwOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2FtdXg6IGZpeCBtYXRyb3NrYW11eCAhIG1hdHJvc2thZGVtdXgKLQkgIERvbid0IGNhcnJ5IG92ZXIgRElTQ09OVCBmbGFncyBmcm9tIHRoZSBpbnB1dCBidWZmZXJzIHRvIHRoZQotCSAgb3V0cHV0IGJ1ZmZlciwgb3IgdGhlIGRlbXV4ZXIgbWlnaHQgcmVzZXQgaXRzIHN0YXRlIHdoZW4gaXQKLQkgIHJlY2VpdmVzIHRoZSBmaXJzdCBkYXRhIGJ1ZmZlciBqdXN0IGFmdGVyIHBhcnNpbmcgdGhlIHNpbXBsZQotCSAgYmxvY2sgaGVhZGVyLCBhbmQgdGhlbiBleHBlY3Qgc2FuZSBkYXRhIHRvIGZvbGxvdy4KLQkgIEZpeGVzIG1hdHJvc2thbXV4ICEgZGVtdXggZXJyb3Jpbmcgb3V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDc2OAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzgwNQotCi0yMDE1LTA5LTA5IDEyOjUxOjQwIC0wNzAwICBNYXJ0aW4gS2VsbHkgPG1hcnRpbkBzdXJyb3VuZC5pbz4KLQotCSogZ3N0L3J0c3AvUkVBRE1FOgotCSAgcnRzcDogZml4IHNtYWxsIFJFQURNRSB0eXBvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0ODA3Ci0KLTIwMTUtMDktMDQgMTk6NDU6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICB3YXZwYWNrcGFyc2U6IHNldCBib3RoIHB0cyBhbmQgZHRzIHNvIGJhc2VwYXJzZSBkb2Vzbid0IG1ha2UgdXAgd3JvbmcgZHRzIGFmdGVyIHNlZWtzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMTA2Ci0KLTIwMTUtMDktMDQgMTk6MzQ6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IHNldCBib3RoIHB0cyBhbmQgZHRzIHNvIGJhc2VwYXJzZSBkb2Vzbid0IG1ha2UgdXAgd3JvbmcgZHRzIGFmdGVyIGEgc2VlawotCSAgZmxhYyBjb250YWlucyB0aGUgc2FtcGxlIG9mZnNldCBpbiB0aGUgZnJhbWUgaGVhZGVyLCBzbyBhZnRlciBhIHNlZWsKLQkgIHdpdGhvdXQgaW5kZXggZmxhY3BhcnNlIHdpbGwga25vdyB0aGUgZXhhY3QgcG9zaXRpb24gd2UgbGFuZGVkIG9uIGFuZAotCSAgdGltZXN0YW1wIGJ1ZmZlcnMgYWNjb3JkaW5nbHkuIEl0IG9ubHkgc2V0IHRoZSBwdHMgdGhvdWdoLCB3aGljaCBtZWFucwotCSAgdGhlIGJhc2VwYXJzZS1zZXQgZHRzIHdoaWNoIHdhcyBzZXQgdG8gdGhlIHNlZWsgcG9zaXRpb24gcHJldmFpbHMsIGFuZAotCSAgc2luY2UgdGhlIHNlZWsgd2FzIGJhc2VkIG9uIGFuIGVzdGltYXRlLCB0aGVyZSdzIGxpa2VseSBhIGRpc2NyZXBhbmN5Ci0JICBiZXR3ZWVuIHdoZXJlIHdlIHdhbnRlZCB0byBsYW5kIGFuZCB3aGVyZSB3ZSBkaWQgbGFuZCwgc28gZnJvbSBoZXJlIG9uCi0JICB0aGF0IGR0cy9wdHMgZGlmZmVyZW5jZSB3aWxsIGJlIG1haW50YWluZWQsIHdpdGggZHRzIHBvc3NpYmx5IG11bHRpcGxlCi0JICBzZWNvbmRzIGFoZWFkIG9mIHB0cywgd2hpY2ggaXMganVzdCB3cm9uZy4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzCi0JICBpcyB0byBqdXN0IHNldCBib3RoIHB0cyBhbmQgZHRzIGJhc2VkIG9uIHRoZSBzYW1wbGUgb2Zmc2V0LCBidXQgcGVyaGFwcwotCSAgcGFyc2VkIGF1ZGlvIHNob3VsZCBqdXN0IG5vdCBoYXZlIGR0cyBzZXQgYXQgYWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjEwNgotCi0yMDE1LTA5LTA2IDE2OjMzOjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JICBkb2NzOiByZW1vdmUgcHJvcGVydGllcyBhbmQgc2lnbmFscyB0aGF0IG5vIGxvbmdlciBleGlzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjQ0MwotCi0yMDEzLTEwLTExIDE1OjEzOjAwICswMDAwICBHZW9yZ2UgQ2hyaXNzIDxnc2Nocmlzc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IE1ha2UgdGhlIGVsZW1lbnQgY291bnQgaW4gYXJyYXlzIG5vdCBpbmNsdWRlIGVuZAotCSAgT25lLWxpbmUgcmVtb3ZhbCBvZiB0YWdzX3dyaXR0ZW4rKwotCSAgVGhpcyBzaG91bGQgZml4IHJ0bXAgb3V0cHV0IHRvIGNydG1wc2VydmVyLCBhbmQgaG9wZWZ1bGx5Ci0JICBub29uZSBpcyBleHBlY3RpbmcgdGhhdCB0aGUgZWxlbWVudCBjb3VudCBpbmNsdWRlcyB0aGUgZW5kCi0JICBlbGVtZW50LCBhcyBkaWZmZXJlbnQgYml0cyBvZiBkb2N1bWVudGF0aW9uIHNheSBkaWZmZXJlbnQKLQkgIHRoaW5ncyBhYm91dCB3aGV0aGVyIGl0IHNob3VsZCBvciBub3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxNjI0Ci0KLTIwMTUtMDctMzAgMDA6NTk6MTUgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkgIGZsdm11eDogU3RvcmUgaW5jb21pbmcgYml0cmF0ZSB0YWdzIGFuZCBzZW5kIGluIHRoZSBtZXRhZGF0YQotCSAgQXBwYXJlbnRseSB0aGUgTWljcm9zb2Z0IEF6dXJlIFJUTVAgc2VydmVyIHJlcXVpcmVzIHRoYXQgdGhlCi0JICB2aWRlb2RhdGFyYXRlIGFuZCBhdWRpb2RhdGFyYXRlIG1ldGFkYXRhIGJlIHByb3ZpZGVkLCBzbwotCSAgc2V0IHRob3NlLCBldmVuIGlmIGl0J3MgdG8gMC4gVXNlIHRoZSBhY3R1YWwgaW5wdXQgYml0cmF0ZQotCSAgdGFncyBpZiBhdmFpbGFibGUuCi0KLTIwMTUtMDktMDQgMDA6MDY6MjkgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBEb24ndCBwYXJzZSBrZXkgZGF0YSBtb3JlIHRoYW4gbmVlZGVkLgotCSAgV2hlbiBhbiBhdXhpbGxpYXJ5IHN0cmVhbXMgYXJlIHByZXNlbnQgaW4gdGhlIFNEUCBtZWRpYSwKLQkgIHRoZXJlJ3Mgbm8gbmVlZCB0byByZS1wYXJzZSB0aGUgU0RQIGF0dHJpYnV0ZXMgbXVsdGlwbGUKLQkgIHRpbWVzLgotCi0yMDE1LTA5LTAzIDIwOjU2OjU1ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRml4IFNSVFAgKyBSVFgsIGF1dGggYWNjZXNzLCBhIGxlYWssIGFuZCBhbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MuCi0JICBJbiBwYXJzZV9rZXltZ210KCksIGRvbid0IG11dGF0ZSB0aGUgaW5wdXQgc3RyaW5nIHRoYXQncyBiZWVuIHBhc3NlZAotCSAgYXMgY29uc3QsIGVzcGVjaWFsbHkgc2luY2Ugd2UgbWlnaHQgbmVlZCB0aGUgb3JpZ2luYWwgdmFsdWUgYWdhaW4gaWYKLQkgIHRoZSBzYW1lIGtleSBpbmZvIGFwcGxpZXMgdG8gbXVsdGlwbGUgc3RyZWFtcyAoUlRYLCBmb3IgZXhhbXBsZSkuCi0JICBXaGVuIGEgcmVzb3VyY2UgaXMgNDA0LCBhbmQgd2UgaGF2ZSBhdXRoIGluZm8gLSByZXRyeSB3aXRoIHRoZSBhdXRoCi0JICBpbmZvIHRoZSBzYW1lIGFzIGlmIHdlIGhhZCByZWNlaXZlIHVuYXV0aG9yaXNlZCwgaW4gY2FzZSB0aGUgcmVzb3VyY2UKLQkgIGlzbid0IGV2ZW4gdmlzaWJsZSB1bnRpbCBjcmVkZW50aWFscyBhcmUgc3VwcGxpZWQuCi0JICBGaXggYSBtZW1vcnkgbGVhayBoYW5kbGluZyBNaWtleSBkYXRhLgotCSAgV2hlbiBnZW5lcmF0aW5nIGEgcmFuZG9tIGtleXN0cmluZywgZG9uJ3Qgb3ZlcnJ1biB0aGUgMzAgYnl0ZQotCSAgYnVmZmVyIGJ5IGdlbmVyYXRpbmcgMzIgYnl0ZXMgaW50byBpdC4KLQotMjAxNS0wOS0wNCAxNToxODowNSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogRml4IGJ1aWxkIHdpdGggR0xpYiA8IDIuNDQKLQkgIEdfSU9fRVJST1JfQ09OTkVDVElPTl9DTE9TRUQgd2FzIGFkZGVkIGluIDIuNDQuCi0KLTIwMTUtMDktMDQgMTI6MDE6NTIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IElnbm9yZSBHX0lPX0VSUk9SX0NPTk5FQ1RJT05fQ0xPU0VEIHdoZW4gcmVjZWl2aW5nIGRhdGEKLQkgIFRoaXMgaGFwcGVucyBvbiBXaW5kb3dzIGlmIHdlIHVzZSB0aGUgc2FtZSBzb2NrZXQgZm9yIHNlbmRpbmcgcGFja2V0cywKLQkgIGFuZCB0aGUgcmVtb3RlIHNlbmRzIElDTVAgcG9ydC9ob3N0IHVucmVhY2hhYmxlIG1lc3NhZ2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1NDUzNAotCi0yMDE1LTA5LTAyIDIxOjEyOjQxICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JICBydHB2b3JiaXMvdGhlb3JhZGVwYXk6IEZpeCBoYW5kbGluZyBvZiBmcmFnbWVudGVkIHBhY2tldHMKLQkgIFRoaXMgd2FzIGJyb2tlbiBpbiBiMTA4OWZiNTIwIGJ5IG5vdCBjb25zaWRlcmluZyB0aGUgZnVsbCBwYWNrZXQgbGVuZ3RoIG9mIGEKLQkgIGZyYWdtZW50ZWQgcGFja2V0IGJ1dCBvbmx5IHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IG9uZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ0MTcKLQotMjAxNS0wOS0wMSAxNTozOToyMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgZHRtZnNyYzogUmVwbHkgdG8gbGF0ZW5jeSBxdWVyeQotCi0yMDE1LTA4LTMxIDE2OjQyOjMwIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBzZXNzaW9uLmM6Ci0JICB0ZXN0czogRml4IHJ0cHNlc3Npb24gdGVzdCBmYWlsdXJlCi0JICBUaGUgdGltZSBvZiB0aGUgZmlyc3QgUlRDUCBwYWNrZXQgaXMgc2VtaS1yYW5kb20sIHNvCi0JICBzb21ldGltZXMgaXQgd2FzIHByb2R1Y2VkIGJlZm9yZSBlbm91Z2ggcGFja2V0cyBmcm9tCi0JICB0aGUgc2Vjb25kIFNTUkMgd2VyZSByZWNlaXZlZC4gRmlyc3QgZHJvcCBxdWV1ZWQgUlRDUAotCSAgcGFja2V0cywgdGhlbiBhZHZhbmNlIHRoZSBjbG9jayBlbm91Z2ggdG8gZW5zdXJlCi0JICB0aGF0IGF0IGxlYXN0IG9uZSBuZXcgUlRDUCBwYWNrZXQgaXMgcHJvZHVjZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNzMxCi0KLTIwMTUtMDgtMzEgMTM6NTY6MDQgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBsZXZlbDogaW1wcm92ZSB0aGUgdGVzdCBmb3IgbXVsdGktY2hhbm5lbCBtb2RlCi0JICBDaGFuZ2UgdGhlIHRlc3QgdG8gdmVyaWZ5IHRoZSByZWFkLWluZGV4IGZvciBtdWx0aXBsZSBtZXNzYWdlcyBwZXIgYnVmZmVyLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQxNDQKLQotMjAxNS0wOC0zMSAxMjo0Njo1MiArMDIwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8amFuLnN0ZWZmZW5zQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBBbGlnbiByYXcgdmlkZW8gZnJhbWVzIHRvIDMyIGJ5dGVzCi0JICBPdXRwdXR0aW5nIHVuYWxpZ25lZCB2aWRlbyBmcmFtZXMgY2F1c2VzIHZpZGVvc2NhbGUgZXQgYWwgdG8KLQkgIGNyYXNoIHdoZW4gYXR0ZW1wdGluZyBTSU1ELWFjY2VsZXJhdGVkIGNvbnZlcnNpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2OTY1Ci0KLTIwMTUtMDgtMjYgMjM6MTY6NDYgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IGZpeCBsZXZlbCBjYWxjdWxhdGlvbnMgZm9yIG11dGxpcGxlIGNoYW5uZWxzCi0JICBUaGlzIHdhcyBicm9rZW4gd2l0aCA3YjkwYmYzMjE1MDg5N2ExNDFhMjlhMTJlY2FiNTU1ZDhjNWI3ZmFiLgotCi0yMDE1LTA4LTI3IDEwOjI4OjU1ICswNTMwICBSYXZpIEtpcmFuIEsgTiA8cmF2aS5raXJhbkBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JICBzbXB0ZTogRml4IG1lbW9yeSBsZWFrCi0JICBJbiBnc3Rfc21wdGVfY29sbGVjdGVkKCksIGNoZWNrIHVwZnJvbnQgaWYgaW5wdXQgZm9ybWF0cyBhcmUgc2FtZQotCSAgb3Igbm90LiBUaGlzIGF2b2lkcyBhbGxvY2F0aW9uIG9mIGluMSBhbmQgaW4yIGJ1ZmZlcnMgYW5kCi0JICBzdWJzZXF1ZW50IG1lbW9yeSBsZWFrIHdoZW4gaW5wdXQgZm9ybWF0cyBkbyBub3QgbWF0Y2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU0MTUzCi0KLTIwMTUtMDgtMjEgMTE6NTI6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogc291cGh0dHBzcmM6IGRvbid0IHRyeSB0byBjb25uZWN0IHRvIGRlYWQgcmFkaW8gc2VydmVyCi0KLTIwMTUtMDgtMjEgMTY6Mjk6MTYgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IFRyaXZpYWwgZml4IHRvIGNoZWNrIGNvcnJlY3QgY29uZGl0aW9uCi0JICBXaGVuIGNoZWNraW5nIGZvciBkZXNjcmliZSBtZXRob2QsIGJlY2F1c2Ugb2YgbWlzc2luZyBwYXJlbnRoZXNlcywgd3JvbmcKLQkgIGNvbmRpdGlvbiBpcyBiZWluZyBjaGVja2VkLCB3aGljaCB3aWxsIHJlc3VsdCBpbiB3cm9uZyBiZWhhdmlvci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM5MTIKLQotMjAxNS0wOC0yMSAxMzoxOTowMiArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYTogcmVhZDogZml4IHRhZyBsaXN0IG1lbW9yeSBsZWFrCi0JICBnc3RfdG9jX2VudHJ5X21lcmdlX3RhZ3MgbWFrZXMgYSBuZXcgcmVmIG9mIHRoZSB0YWdsaXN0LCBzbyBpdCBzaG91bGQKLQkgIGJlIHVucmVmJ2VkIGFzIHNvb24gYXMgdGhlIHRhZ3MgYXJlIG1lcmdlZCB0byB0aGUgdG9jZW50cnkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM5MDQKLQotMjAxNS0wOC0yMSAxMjoyMDo1OSArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSAgd2F2cGFja2RlYzogZml4IHRhZ2xpc3QgbWVtb3J5IGxlYWsKLQkgIFdoZW4gcGFzc2luZyB0aGUgdGFnbGlzdCB0byBnc3RfYXVkaW9fZGVjb2Rlcl9tZXJnZV90YWdzLCB0aGUgcmVmZXJlbmNlIGlzIGluY3JlYXNlZAotCSAgYnkgYXVkaW9kZWNvZGVyIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBmcmVlIHRoZSB0YWdsaXN0IGJlaW5nIHBhc3NlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM5MDMKLQotMjAxNS0wOC0yMCAxNDo0NTozMyArMDIwMCAgSmVhbi1NaWNoZWwgSGF1dGJvaXMgPGplYW4tbWljaGVsLmhhdXRib2lzQHZlby1sYWJzLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogZml4IHBhZCBjbG9zaW5nCi0JICBTaWduZWQtb2ZmLWJ5OiBKZWFuLU1pY2hlbCBIYXV0Ym9pcyA8amVhbi1taWNoZWwuaGF1dGJvaXNAdmVvLWxhYnMuY29tPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mzg3NQotCi09PT0gcmVsZWFzZSAxLjUuOTAgPT09Ci0KLTIwMTUtMDgtMTkgMTM6Mjk6NTMgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuNS45MAotCi0yMDE1LTA4LTE5IDEyOjQ3OjQyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE1LTA4LTE5IDExOjI5OjU1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9lbC5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNS0wOC0xMyAxNzoyOTo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkgIG11bHRpZmlsZXNyYzogZml4IHJlZ3Jlc3Npb24gd2l0aCBzdGFydGluZyBmcm9tIGluZGV4IHNldCB2aWEgaW5kZXggcHJvcGVydHkKLQkgIFdoZW4gd2UgaGF2ZW4ndCBzdGFydGVkIHlldCwgc2V0IHRoZSBzdGFydF9pbmRleCB3aGVuIHdlIHNldCB0aGUgaW5kZXggcHJvcGVydHksCi0JICBzbyB0aGF0IHdlIHN0YXJ0IGF0IHRoZSByaWdodCBpbmRleCBwb3NpdGlvbiBhZnRlciB0aGUgaW5pdGlhbCBzZWVrLiBUaGUgaW5kZXgKLQkgIHByb3BlcnR5IHdhcyBuZXZlciByZWFsbHkgbWVhbnQgdG8gYmUgZm9yIHdyaXRpbmcsIGJ1dCBpdCB1c2VkIHRvIHdvcmssIHNvIGxldCdzCi0JICBzdXBwb3J0IGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk0NzIKLQotMjAxNS0wOC0xOCAxMDo1MjoxMSArMDEwMCAgQWxleCBBc2hsZXkgPGJ1Z3ppbGxhQGFzaGxleS1mYW1pbHkubmV0PgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBvZmZzZXQgY2FsY3VsYXRpb24gd2hlbiBwYXJzaW5nIENFTkMgYXV4IGluZm8KLQkgIENvbW1pdCA3ZDdlNTRjZTY4NjNmZjUzZTE4OGQwMjc2ZDI2NTFiNjUwODJmZmRiIGFkZGVkIHN1cHBvcnQgZm9yCi0JICBEQVNIIGNvbW1vbiBlbmNyeXB0aW9uLCBob3dldmVyIGNvbW1pdAotCSAgYmIzMzY4NDBjMGIwYjAyZmExOGRjNDQzN2NlMGRlZDNkOTE0MjgwMSB0aGF0IHdlbnQgb250byBtYXN0ZXIKLQkgIHNob3J0bHkgYmVmb3JlIHRoZSBDRU5DIGNvbW1pdCBjYXVzZWQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBDRU5DCi0JICBhdXggaW5mbyBvZmZzZXQgdG8gYmUgaW5jb3JyZWN0LgotCSAgVGhlIGJhc2Vfb2Zmc2V0IHdhcyBiZWluZyBhZGRlZCBpZiBwcmVzZW50LCBidXQgaWYgdGhlIGJhc2Vfb2Zmc2V0Ci0JICBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIG1vb2YsIHRoZSBvZmZzZXQgd2FzIGJlaW5nIGFkZGVkIHR3aWNlLgotCSAgVGhlIGNvcnJlY3QgYXBwcm9hY2ggaXMgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCi0JICBtb29mIGFuZCB1c2UgdGhhdCBvZmZzZXQgd2hlbiBwYXJzaW5nIHRoZSBDRU5DIGF1eCBpbmZvLgotCi0yMDE1LTA4LTE3IDE0OjI4OjI0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IGFjdHVhbGx5IHJldHVybiB0cnVlIGZvciBhY2NlcHQtY2FwcyBxdWVyeSBoYW5kbGluZwotCi0yMDE1LTA4LTE3IDE0OjA3OjEwICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBrbHZwYXkuYzoKLQkgIHJ0cDogY29weSBtZXRhZGF0YSBpbiB0aGUgKGRlKXBheWxvYWRlcnMgd2hpY2ggaXMgbWlzc2VkIGJlZm9yZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzcwNgotCi0yMDE1LTA4LTE2IDE1OjIxOjUxIC0wNDAwICBEdXN0aW4gU3BpY3V6emEgPGR1c3RpbkB2aXJ0dWFscm9hZHNpZGUuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IGFsbG93IHNwZWNpZnlpbmcgYXVkaW8gcGxheWJhY2sgZGV2aWNlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNjcwCi0KLTIwMTUtMDgtMTYgMTM6NTE6NDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogcmVtb3ZlIHNpbmdsZSBlbnRyeSBpZiBmcm9tIGxvb3AKLQkgIEl0ZXJhdGUgZnJvbSB0aGUgMm5kIGNoYW5uZWwgb24gYW5kIGNyZWF0ZSB0aGUgMSBjaGFubmVsIHN0cnVjdAotCSAgb3V0c2lkZSB0byBtYWtlIGxvb3Agc3RydWN0dXJlIHNpbXBsZXIgYW5kIG9ubHkgc2xpZ2h0bHkgZmFzdGVyLgotCi0yMDE1LTA4LTE2IDEzOjIxOjQxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IGltcGxlbWVudCBwcm9wZXIgYWNjZXB0LWNhcHMKLQkgIFNob3VsZCBqdXN0IGNvbXBhcmUgd2l0aCB3aGF0IGNhbiBiZSBpbW1lZGlhdGVsbHkgYWNjZXB0ZWQgYnkKLQkgIHRoZSBlbGVtZW50LiBmbGFjZW5jIGNhbid0IHJlbmVnb3RpYXRlIHNvIGlmIGl0IGhhcyBhIGNhcHMgYWxyZWFkeQotCSAgaXQgc2hvdWxkIG9ubHkgYWNjZXB0IGlmIGl0IGlzIHRoYXQgY2FwcyBvdGhlcndpc2UganVzdCB1c2UgdGhlCi0JICB0ZW1wbGF0ZSBjYXBzCi0KLTIwMTUtMDgtMTYgMTM6MDM6MzYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogaW1wcm92ZSBzaW5rIHBhZCB0ZW1wbGF0ZSBjYXBzCi0JICBSZW1vdmVzIHRoZSBuZWVkIGZvciBjdXN0b20gY2FwcyBxdWVyeSBoYW5kbGluZyBhbmQgbWFrZXMgaXQgbW9yZQotCSAgY29ycmVjdCBmcm9tIHRoZSBiZWdpbm5pbmcgb24gdGhlIHRlbXBsYXRlLiBJdCBpcyBhIGJpdCB1Z2xpZXIKLQkgIHRvIHJlYWQgYmVjYXVzZSB0aGVyZSBpcyAxIGVudHJ5IHBlciBjaGFubmVsIGJ1dCBtYWtlcyBjb2RlIGVhc2llcgotCSAgdG8gbWFpbnRhaW4uCi0KLTIwMTUtMDgtMTYgMTI6NDE6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIHk0bWVuY29kZTogZml4IGdzdC1sYXVuY2ggdmVyc2lvbiBpbiBkb2N1bWVudGF0aW9uCi0KLTIwMTUtMDgtMTUgMjI6MzI6MjEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSAgYXVkaW9lbmNvZGVyczogdXNlIHRlbXBsYXRlIHN1YnNldCBjaGVjayBmb3IgYWNjZXB0LWNhcHMKLQkgIEl0IGlzIGZhc3RlciB0aGFuIGRvaW5nIGEgcXVlcnkgdGhhdCBwcm9wYWdhdGVzIGRvd25zdHJlYW0gYW5kCi0JICBzaG91bGQgYmUgZW5vdWdoCi0JICBFbGVtZW50czogc3BlZXhlbmMsIHdhdnBhY2tlbmMsIG11bGF3ZW5jLCBhbGF3ZW5jCi0KLTIwMTUtMDgtMTUgMjI6Mjk6NDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIHZpZGVvZW5jb2RlcnM6IHVzZSB0ZW1wbGF0ZSBzdWJzZXQgY2hlY2sgZm9yIGFjY2VwdC1jYXBzCi0JICBJdCBpcyBmYXN0ZXIgdGhhbiBkb2luZyBhIHF1ZXJ5IHRoYXQgcHJvcGFnYXRlcyBkb3duc3RyZWFtIGFuZAotCSAgc2hvdWxkIGJlIGVub3VnaAotCSAgRWxlbWVudHM6IGpwZWdlbmMsIHBuZ2VuYywgdnA4ZW5jLCB2cDllbmMsIHk0bWVuYwotCi0yMDE1LTA4LTE2IDE3OjIxOjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogdXNlIG5ldyBiYXNlcGFyc2UgQVBJIHRvIGZpeCB0YWcgaGFuZGxpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzk3NjgKLQotMjAxNS0wMy0xNyAxNzo1MDozNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogdXNlIG5ldyBiYXNlIHBhcnNlIEFQSSB0byBmaXggdGFnIGhhbmRsaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5NzY4Ci0KLTIwMTUtMDgtMTYgMTQ6Mzc6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IHVzZSBuZXcgYmFzZXBhcnNlIEFQSSBhbmQgZml4IHRhZyBoYW5kbGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTc2OAotCi0yMDE1LTA4LTE2IDEzOjA0OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFVzZSBzaWduZWQgaW50ZWdlciB0eXBlIHRvIGJlIGFibGUgdG8gY2hlY2sgZm9yIG5lZ2F0aXZlIHN1YnRyYWN0aW9uIHJlc3VsdHMKLQkgIENJRCAxMzE1ODI5Ci0KLTIwMTUtMDgtMTYgMTE6NTA6MzQgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkgIHJ0cHZvcmJpc2RlcGF5OiByZW1vdmUgZGVhZCBjb2RlCi0JICBwYXlsb2FkX2J1ZmZlciBtdXN0IGJlIE5VTEwgaW4gaWdub3JlX3Jlc2VydmVkLiBDaGVjayB3aWxsIGFsd2F5cyBiZSBmYWxzZS4KLQkgIEludHJvZHVjZWQgYnkgYjEwODlmYjUyMDc2OTdiYTI2ZWRiNGZmNjZlZDBmNDY1YzZkZjNjZgotCSAgQ0lEICMxMzE2NDc2Ci0KLTIwMTUtMDgtMTUgMjI6NDU6NTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5oOgotCSAgYWxhd2VuYzogcG9ydCB0byBBdWRpb0VuY29kZXIgYmFzZSBjbGFzcwotCi0yMDE1LTA4LTE1IDA5OjE2OjIzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkgIGF1ZGlvZGVjb2RlcnM6IHVzZSBkZWZhdWx0IHBhZCBhY2NlcHQtY2FwcyBoYW5kbGluZwotCSAgQXZvaWRzIHVzZWxlc3MgY2hlY2sgb2YgZG93bnN0cmVhbSBjYXBzIHdoZW4gaGFuZGxpbmcgYW4KLQkgIGFjY2VwdC1jYXBzIHF1ZXJ5Ci0JICBFbGVtZW50czogZmxhY2RlYywgc3BlZXhkZWMsIHdhdnBhY2tkZWMsIG11bGF3ZGVjLCBhbGF3ZGVjCi0KLTIwMTUtMDgtMTUgMDg6NDk6NTcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSAgdmlkZW9kZWNvZGVyczogdXNlIGRlZmF1bHQgcGFkIGFjY2VwdC1jYXBzIGhhbmRsaW5nCi0JICBBdm9pZHMgdXNlbGVzcyBjaGVjayBvZiBkb3duc3RyZWFtIGNhcHMgd2hlbiBoYW5kbGluZyBhbgotCSAgYWNjZXB0LWNhcHMgcXVlcnkKLQkgIEVsZW1lbnRzOiBqcGVnZGVjLCBwbmdkZWMsIHZwOGRlYywgdnA5ZGVjCi0KLTIwMTUtMDgtMTUgMTE6MzE6MDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSAgYWxhd2RlYzogbWFrZSBlcnJvciBoYW5kbGluZyBhIGJpdCBuaWNlcgotCSAgUHJpbnQgdGhlIGVsZW1lbnQgYWxvbmcgd2l0aCB0aGUgZGVidWcgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdHJhY2UKLQkgIHRoZSBmYWlsdXJlcwotCi0yMDE1LTA4LTE1IDExOjA0OjE2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuaDoKLQkgIGFsYXdkZWM6IHBvcnQgdG8gYXVkaW9kZWNvZGVyIGJhc2UgY2xhc3MKLQkgIG11bGF3ZGVjIHdhcyBhbHJlYWR5IHBvcnRlZCwgYWxhd2RlYyB3YXMgbGVmdCBiZWhpbmQuCi0KLTIwMTUtMDgtMTUgMTA6MzQ6MTQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBvbmx5IGxvb2sgZm9yIG1vcmUgc2FtcGxlcyBpbiBtb29mcyBpbiBwdWxsLW1vZGUKLQkgIEZvciBwbGF5YmFjayBvZiBzb21lIGZyYWdtZW50ZWQgZm9ybWF0cyB3aXRoIHF0ZGVtdXggaXQgd2lsbAotCSAgdHJ5IHRvIGxvb2sgZm9yIHRoZSBuZXh0IG1vb2YgYWZ0ZXIgZmluaXNoaW5nIG9uZSBidXQgaXQgaXMgb25seQotCSAgcG9zc2libGUgZm9yIHB1bGwtbW9kZS4gRm9yIHBsYXliYWNrIG9mIHN0cmVhbWluZyBmcmFnbWVudGVkIGZvcm1hdHMKLQkgIHN1Y2ggYXMgREFTSCBpdCBzaG91bGQganVzdCBub3QgdHJ5IHRvIGxvb2sgZm9yIGFub3RoZXIgbW9vZiBidXQKLQkgIGluc3RlYWQgd2FpdCBmb3IgbW9yZSBkYXRhLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjYwMgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjYwMwotCi0yMDE1LTA4LTE1IDEyOjU4OjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JICBkY2FwYXJzZTogRG9uJ3QgbG9vayBmb3IgYSBzZWNvbmQgc3luY3dvcmQKLQkgIFRoZXJlIGFyZSBzdHJlYW1zIG91dCB0aGVyZSB0aGF0IGNvbnNpc3RlbnRseSBjb250YWluIGdhcmJhZ2UgYmV0d2VlbgotCSAgZXZlcnkgZnJhbWUgc28gd2UgbmV2ZXIgZXZlciBmaW5kIGEgc2Vjb25kIGNvbnNlY3V0aXZlIHN5bmN3b3JkLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgyMzcKLQotMjAxNS0wOC0xNSAxMToxMjowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmM6Ci0JICB2cDhlbmMsIHZwOWVuYzogcmVzZXQgbXVsdGlwYXNzIGZpbGUgaW5kZXggd2hlbiBzdG9wcGluZyBlbmNvZGVyCi0JICBGaXhlcyBtdWx0aXBhc3MgZW5jb2Rpbmcgd2hlbiByZS11c2luZyB0aGUgc2FtZSBlbGVtZW50L3BpcGVsaW5lCi0JICBmb3Igc3Vic2VxdWVudCBlbmNvZGluZyBydW5zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzcyOAotCi0yMDE1LTA4LTE1IDExOjA5OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSogZXh0L3ZweC9nc3R2cDllbmMuaDoKLQkgIHZwOWVuYzogcHJvdmlkZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBwYXNzIGNhY2hlIGZpbGVzCi0JICBTb21lIGZpbGVzIG1heSBwcm92aWRlIGRpZmZlcmVudCBjYXBzIGluc2lnaHQgb2Ygb25lIHN0cmVhbS4gU2luY2UKLQkgIHZwOWVuYyBzdXBwb3J0IGNhcHMgcmVpbml0LCB3ZSBzaG91bGQgc3VwcG9ydCBjYWNoZSByZWluaXQgdG9vLgotCSAgSWYgbW9yZSB0aGVuIGZpbGUgY2FjaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQsIHRoZSBuYW1pbmcgd2lsbCBiZToKLQkgIGNhY2hlIGNhY2hlLjEgY2FjaGUuMiAuLi4KLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBPbGVrc2lqIFJlbXBlbCA8bGludXhAcmVtcGVsLXByaXZhdC5kZT4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc3MjgKLQotMjAxNS0wOC0xNCAxMTo0MTo0MiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hYWNwYXJzZS5jOgotCSAgdGVzdHM6IGFhY3BhcnNlOiB1c2UgY2FwcyBxdWVyeSBpbnN0ZWFkIG9mIGFjY2VwdC1jYXBzCi0JICBUaGUgYWNjZXB0LWNhcHMgcXVlcnkganVzdCBkb2VzIGEgc2hhbGxvdyBjaGVjayBhdCB0aGUgY3VycmVudAotCSAgZWxlbWVudCB3aGlsZSBhdCB0aGlzIHRlc3Qgd2Ugd2FudCBpdCB0byBhbHNvIGxvb2sgYXQgZG93bnN0cmVhbS4KLQkgIFNvIHVzZSBjYXBzIHF1ZXJ5IHRoZXJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzYyMwotCi0yMDE1LTA4LTE0IDExOjQwOjIyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBlbmFibGUgYWNjZXB0LXRlbXBsYXRlIGZsYWcKLQkgIERvIGEgcXVpY2sgY2hlY2sgd2l0aCB0aGUgcGFkIHRlbXBsYXRlIGNhcHMgYXMgaXQgaXMgZW5vdWdoLiBVc2VycwotCSAgc2hvdWxkIGhhdmUgZmlndXJlZCB0aGUgYXBwcm9wcmlhdGUgZnVsbCBjYXBzIG9uIGEgcHJldmlvdXMgY2FwcyBxdWVyeQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzYyMwotCi0yMDE1LTA4LTE0IDE1OjQ2OjUzICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBzZW5kIHRoZSBVc2VyLUFnZW50IGhlYWRlcgotCSAgU29tZXRpbWVzIGl0IGlzIHVzZWZ1bCB0byBrbm93IHRoaXMgaW5mb3JtYXRpb24gb24gdGhlCi0JICBzZXJ2ZXIgc2lkZS4gT3RoZXIgcG9wdWxhciBpbXBsZW1lbnRhdGlvbnMgKHZsYywgZmZtcGVnLCAuLi4pCi0JICBhbHNvIHNlbmQgdGhpcyBoZWFkZXIgb24gZXZlcnkgbWVzc2FnZS4KLQkgIFRoaXMgaW5jbHVkZXMgYSBuZXcgInVzZXItYWdlbnQiIHByb3BlcnR5IHRoYXQgdGhlIHVzZXIKLQkgIGNhbiBzZXQgdG8gdXNlIGEgY3VzdG9tIFVzZXItQWdlbnQgc3RyaW5nLiBUaGUgZGVmYXVsdAotCSAgaXMgIkdTdHJlYW1lci88dmVyc2lvbj4iCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMTAxCi0KLTIwMTUtMDgtMTQgMTU6NDI6NDIgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHdyYXAgZ3N0X3J0c3BfbWVzc2FnZV9pbml0X3JlcXVlc3QgaW4gYSBsb2NhbCBmdW5jdGlvbgotCSAgVGhpcyB3aWxsIGFsbG93IGFkZGluZyBjb21tb24gcmVxdWVzdCBpbml0aWFsaXphdGlvbiwgbGlrZSB0aGUKLQkgIHVzZXIgYWdlbnQgc3RyaW5nLCBpbiBqdXN0IG9uZSBwbGFjZS4KLQotMjAxNS0wOC0xNCAwOTozNjowOSArMDUzMCAgUHJhc2hhbnQgR290YXJuZSA8cHMuZ290YXJuZUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JICBhdWRpb2VjaG86IG1ha2Ugc3VyZSBidWZmZXIgZ2V0cyByZWFsbG9jYXRlZCBpZiBtYXhfZGVsYXkgY2hhbmdlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzQ5MAotCi0yMDE1LTA3LTA5IDA5OjUxOjI2ICswMjAwICBPbGVrc2lqIFJlbXBlbCA8bGludXhAcmVtcGVsLXByaXZhdC5kZT4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmg6Ci0JICB2cDhlbmM6IHByb3ZpZGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgcGFzcyBjYWNoZSBmaWxlcwotCSAgU29tZSBmaWxlcyBtYXkgcHJvdmlkZSBkaWZmZXJlbnQgY2FwcyBpbnNpZ2h0IG9mIG9uZSBzdHJlYW0uIFNpbmNlIHZwOGVuYwotCSAgc3VwcG9ydCBjYXBzIHJlaW5pdCwgd2Ugc2hvdWxkIHN1cHBvcnQgY2FjaGUgcmVpbml0IHRvby4KLQkgIElmIG1vcmUgdGhlbiBmaWxlIGNhY2hlIGZpbGUgd2lsbCBiZSBjcmVhdGVkLCB0aGUgbmFtaW5nIHdpbGwgYmU6Ci0JICBjYWNoZQotCSAgY2FjaGUuMQotCSAgY2FjaGUuMgotCSAgLi4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NzI4Ci0KLTIwMTUtMDQtMTUgMjI6NTE6NTEgKzAyMDAgIFJhbWlybyBQb2xsYSA8cmFtaXJvLnBvbGxhQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgIHJ0cG1wNGdkZXBheTogZml4IHRpbWVzdGFtcHMgZm9yIFJUUCBwYWNrZXRzIHdpdGggbXVsdGlwbGUgQVVzCi0JICBVc2UgY29uc3RhbnREdXJhdGlvbiB0byBjYWxjdWxhdGUgdGhlIHRpbWVzdGFtcCBvZiBub24tZmlyc3QgQVUgaW4gdGhlCi0JICBSVFAgcGFja2V0LgotCSAgSWYgY29uc3RhbnREdXJhdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGUgTUlNRSBwYXJhbWV0ZXJzLCBpdHMgdmFsdWUKLQkgIG11c3QgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gdHdvIGNvbnNlY3V0aXZlCi0JICBSVFAgcGFja2V0cyB3aXRoIEFVLUluZGV4IGVxdWFsIHRvIDAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3ODgxCi0KLTIwMTUtMDgtMTQgMDY6NDM6MTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiByZW1vdmUgdW5uZWNlc3NhcnkgaWYsIGdfZnJlZSBpcyBudWxsIHNhZmUKLQotMjAxNS0wOC0xNCAwODozMzo1NiArMDEwMCAgQWxleCBBc2hsZXkgPGJ1Z3ppbGxhQGFzaGxleS1mYW1pbHkubmV0PgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIHNvdXBodHRwc3JjOiBhZGQgcHJvcGVydHkgdG8gc2V0IEhUVFAgbWV0aG9kCi0JICBUbyBhbGxvdyBzb3VwaHR0cHNyYyB0byBiZSB1c2UgSFRUUCBtZXRob2RzIG90aGVyIHRoYW4gR0VUCi0JICAoZS5nLiBIRUFEKSwgYWRkIGEgIm1ldGhvZCIgcHJvcGVydHkgdGhhdCBpcyBhIHN0cmluZy4gSWYgdGhpcwotCSAgcHJvcGVydHkgaXMgbm90IHNldCwgR0VUIGlzIHVzZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNDEzCi0KLTIwMTUtMDgtMTQgMTE6MTM6MDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICBjaGVjazogUmVuYW1lIHN0YXRlcyB1bml0IHRlc3QKLQkgIE1ha2VzIGl0IGVhc2llciB0byBkaWZmZXJlbnRpYXRlIGZyb20gb3RoZXIgbW9kdWxlcyBzdGF0ZXMgdW5pdCB0ZXN0Ci0KLTIwMTUtMDgtMTQgMDk6MjE6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nb29tL2dzdGF1ZGlvdmlzdWFsaXplci5jOgotCSogZ3N0L2dvb20vZ3N0YXVkaW92aXN1YWxpemVyLmg6Ci0JKiBnc3QvZ29vbTJrMS9nc3RhdWRpb3Zpc3VhbGl6ZXIuYzoKLQkqIGdzdC9nb29tMmsxL2dzdGF1ZGlvdmlzdWFsaXplci5oOgotCSAgZ29vbTogUmVuYW1lIGdldF90eXBlKCkgZnVuY3Rpb24gb2YgYmFzZSBjbGFzcyB0byBwcmV2ZW50IHN5bWJvbCBjb25mbGljdHMKLQkgIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gc3RhdGljYWxseSBsaW5raW5nLgotCi0yMDE1LTA4LTEzIDE2OjMyOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogS2VlcCB0aGUgRFRTIGVzdGltYXRlIGlmIHdlIGdvdCBubyBEVFMgYWZ0ZXIgYSBqaXR0ZXJidWZmZXIgcmVzZXQKLQkgIE90aGVyd2lzZSB3ZSB3aWxsIGp1c3Qgb3V0cHV0IGJ1ZmZlcnMgd2l0aG91dCB0aW1lc3RhbXBzIGFmdGVyIGEgcmVzZXQgaWYgbm8KLQkgIHRpbWVzdGFtcHMgYXJlIHByb3ZpZGVkIGJ5IHVwc3RyZWFtLCBlLmcuIHdoZW4gdXNpbmcgUlRTUCBvdmVyIFRDUC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1MzYKLQotMjAxNS0wOC0xMiAxNzoxNjowMSArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmg6Ci0JICBtYXRyb3NrYTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzU1NgotCi0yMDE1LTA4LTA0IDIwOjU5OjE3ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYxZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2MXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAxc2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdXRpbHMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdXRpbHMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cDhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHJ0cDogQ29weSBtZXRhZGF0YSBpbiB0aGUgKGRlKXBheWxvYWRlciwgYnV0IG9ubHkgdGhlIHJlbGV2YW50IG9uZXMKLQkgIFRoZSBwYXlsb2FkZXIgZGlkbid0IGNvcHkgYW55dGhpbmcgc28gZmFyLCB0aGUgZGVwYXlsb2FkZXIgY29waWVkIGV2ZXJ5Ci0JICBwb3NzaWJsZSBtZXRhLiBMZXQncyBtYWtlIGl0IGNvbnNpc3RlbnQgYW5kIGp1c3QgY29weSBhbGwgbWV0YXMgd2l0aG91dAotCSAgdGFncyBvciB3aXRoIG9ubHkgdGhlIHZpZGVvIHRhZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE3NzQKLQotMjAxNS0wOC0xMCAxODoyMDoxNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBzbWFsbCB0eXBvIGluIGNvbW1lbnQKLQotMjAxNS0wOC0xMCAxNjoxOToxOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBnb29tMmsxL2RvYzogRml4dXAgcHJldmlvdXMgY29tbWl0Ci0KLTIwMTUtMDgtMTAgMTU6NTU6MTkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmg6Ci0JICBnb29tMmsxL2RvYzogVXNlIEdzdEdvb20yazEgbmFtZXNwYWNlCi0JICBUaGUgZG9jIGdlbmVyYXRvciBpc24ndCBoYXBweSB3aGVuIHdlIGhhdmUgY2xhc3MgbmFtZSBjbGFzaC4gU2ltcGx5Ci0JICB1c2UgaXQncyBvd24gbmFtZXNwYWNlLgotCi0yMDE1LTA4LTEwIDE3OjEwOjQyICswNTMwICBQcmFzaGFudCBHb3Rhcm5lIDxwcy5nb3Rhcm5lQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2VjaG8uYzoKLQkgIGF1ZGlvZWNobzogcmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUgaW4gc2V0X3Byb3BlcnR5Ci0JICB1bnVzZWQgbG9jYWwgdmFyaWFibGUgJ2RlbGF5JyBpcyByZW1vdmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzQ1MAotCi0yMDE1LTA4LTEwIDEyOjQ1OjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBzdWJvcHRpbWFsIHF1ZXVlIGl0ZXJhdGlvbiBjb2RlCi0KLTIwMTUtMDgtMDkgMTc6MjU6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG9uJ3QgdXNlIGdsaWIgMi40NC1vbmx5IEFQSQotCi0yMDE1LTA3LTI5IDE0OjE0OjUwICswMTAwICBBbGV4IEFzaGxleSA8YnVnemlsbGFAYXNobGV5LWZhbWlseS5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBxdGRlbXV4OiBhZGQgc3VwcG9ydCBmb3IgSVNPQk1GRiBDb21tb24gRW5jcnlwdGlvbgotCSAgVGhpcyBjb21taXQgYWRkcyBzdXBwb3J0IGZvciBJU09CTUZGIENvbW1vbiBFbmNyeXB0aW9uIChjZW5jKSwgYXMKLQkgIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwMS03LiBJdCB1c2VzIGEgR3N0UHJvdGVjdGlvbiBldmVudCB0bwotCSAgcGFzcyB0aGUgY29udGVudHMgb2YgUFNTSCBib3hlcyB0byBkb3duc3RyZWFtIGRlY3J5cHRvciBlbGVtZW50cwotCSAgYW5kIGF0dGFjaGVkIEdzdFByb3RlY3Rpb25NZXRhIHRvIGVhY2ggc2FtcGxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTk5MQotCi0yMDE1LTA4LTEwIDE0OjEzOjUwICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogY2hlY2tpbmcgaWYgZGVwYXkgaGFzIHNwcy9wcHMgbmFscyBiZWZvcmUgaW5zZXJ0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzNDMwCi0KLTIwMTUtMDgtMDggMTY6NDQ6NDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBmaXggb3V0ZGF0ZWQgY29tbWVudAotCSAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIHdhcyBjaGFuZ2VkIGluIHRoZSAwLjEwIC0+IDEueAotCSAgdHJhbnNpdGlvbiwgYnV0IHRoZSBjb21tZW50IHdhcyBub3QgdXBkYXRlZC4KLQotMjAxNS0wOC0wOCAxNzo0MjoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIHJ0cHRoZW9yYXBheTogSWYgZmx1c2hpbmcgYSBwYWNrZXQgZmFpbGVkLCBnbyBvdXQgb2YgdGhlIGxvb3AgaW1tZWRpYXRlbHkKLQotMjAxNS0wOC0wOCAxNzo0MTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIHJ0cHZvcmJpc3BheTogSWYgZmx1c2hpbmcgYSBwYWNrZXQgZmFpbGVkLCBnbyBvdXQgb2YgdGhlIGxvb3AgaW1tZWRpYXRlbHkKLQotMjAxNS0wOC0wOCAxNzozNDo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5Lmg6Ci0JICBydHB0aGVvcmFwYXk6IEV4dHJhY3QgcGl4ZWwgZm9ybWF0IGZyb20gdGhlIGlkZW50IGhlYWRlciB0byBwdXQgaXQgaW50byB0aGUgc2FtcGxpbmcgZmllbGQgb2YgdGhlIGNhcHMKLQkgIFdlIGFsd2F5cyBwdXQgNDoyOjAgaW50byB0aGUgY2FwcyBiZWZvcmUsIHdoaWNoIG9idmlvdXNseSBpcyB3cm9uZyBmb3IgNDoyOjIKLQkgIGFuZCA0OjQ6NCBmb3JtYXRzLgotCi0yMDE1LTA4LTA2IDE3OjQ2OjEzICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGtsdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGtsdnBheS5jOgotCSAgcnRwa2x2KGRlKXBheTogYWRkICJSVFAiIGluIHRoZSBrbGFzcyBzdHJpbmcKLQkgIEdzdFJUU1BNZWRpYSB1c2VzIHRoaXMgY2xhc3NpZmljYXRpb24gdG8gZGV0ZWN0IHRoZSByZWFsIHBheWxvYWRlcgotCSAgaW5zaWRlIGEgZHlucGF5IGJpbiBhbmQgYXNzZXJ0cyBpZiBpdCBkb2Vzbid0IGZpbmQgaXQsIHRoZXJlZm9yZQotCSAgaXQgaXMgcmVxdWlyZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTMzMjUKLQotMjAxNS0wOC0wNSAxMToxMzowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBhdXguYzoKLQkgIHRlc3RzOiBydHBhdXg6IHVzZSBhIGR5bmFtaWMgcHQgaW4gdGhlIHRlc3QKLQkgIDEpIFRlc3RzIHRoYXQgdXNpbmcgZHluYW1pYyBQVCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZXMgd29yawotCSAgMikgSWYgd2UgZXZlciBkZWNpZGUgdG8gY2hhbmdlIHRoZSBjb2RlYyBoZXJlIHdlIGRvbid0IG5lZWQgdG8KLQkgIHdvcnJ5IGFib3V0IGNoYW5nZSB0aGUgUFQgZm9yIHRoZSBkZWZhdWx0IG9uZSBvZiB0aGUgbmV3IGNvZGVjCi0JICBpbiB0aGUgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjQ0NQotCi0yMDE1LTA4LTA1IDEwOjUzOjE1ICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSAgcnRwcnR4c2VuZDogcHJpbnQgdmFsaWQgdHlwZSB3aGVyZSBndWludDMyIGlzIGV4cGVjdGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NDQ1Ci0KLTIwMTUtMDgtMDYgMTE6MzM6MzcgKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2MXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSAgcnRwcGF5bG9hZDogc2V0IHN0YW5kYXJkIHBheWxvYWQgdHlwZSBhcyBkZWZhdWx0Ci0JICBJbml0aWFsaXplIHRoZSBQVCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgY29kZWMgYW5kIGNoZWNrIGlmCi0JICBpdCBpcyBzdGlsbCB0aGUgZGVmYXVsdCBiZWZvcmUgZGVjbGFyaW5nIHRoZSBwdCB0byBiZSBkeW5hbWljIG9yCi0JICBub3Qgd2hlbiBzZXR0aW5nIHRoZSBjYXBzLgotCSAgQWxzbyB1c2UgdGhlIFBUIGNvbnN0YW50cyBmcm9tIHRoZSBydHAgbGliIHdoZW4gcG9zc2libGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc5NjUKLQotMjAxNS0wNy0yNiAxMjowNzo1NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHN0b3JlIHRoZSBtb29mLW9mZnNldCBhbHNvIGZvciBwdXNoIG1vZGUKLQkgIEl0IHdpbGwgYmUgdXNlZCBpbiBzb21lIGNhc2VzIGZvciBnZXR0aW5nIHRoZSBjb3JyZWN0IG9mZnNldHMKLQkgIGZyb20gdHJ1biBhdG9tcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI2MDMKLQotMjAxNS0wNy0yNiAwMjowOToyNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5oOgotCSAgcXRkZW11eDogaGFuZGxlIGRlZmF1bHQtYmFzZS1pcy1tb29mIGZsYWcKLQkgIEhhbmRsZSB0aGUgZmxhZyBmcm9tIHRoZSB0ZmhkIHRoYXQgc2lnbmFscyB0aGUgYmFzZSBvZmZzZXQgdG8KLQkgIHN0YXJ0IGZyb20gdGhlIG1vb2YgYXRvbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjYwMwotCi0yMDE1LTA3LTI5IDE4OjU0OjM1IC0wNjAwICBHbGVuIERpZW5lciA8Z3JkQGxvZ2FubWlsbC5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thZGVtdXg6IFByZXNlcnZlIGZvcndhcmQgcmVmZXJlbmNlZCB0cmFjayB0YWdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyODUwCi0KLTIwMTUtMDgtMDQgMTg6MDc6MzUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYXV4LmM6Ci0JICB0ZXN0czogcnRwYXV4OiBmaXggdGVzdCBmYWlsdXJlCi0JICBUaGUgUlRQIFBUIGZvciBhbGF3IGlzIDguCi0JICBMZXNzIHRoYW4gNTAgcGFja2V0cyBhcmUgcmVjZWl2ZWQgaW4gdGhlIGxlbmd0aCBvZiB0aGlzIHRlc3Qgc28gaXQKLQkgIHdvdWxkIG5ldmVyIGRyb3AgYSBidWZmZXIgb3Igd291bGQgZHJvcCBvbmx5IHRoZSBsYXN0IGJ1ZmZlciBhbmQKLQkgIGl0IHdvdWxkIGZhaWwgc29tZXRpbWVzIHdoZW4gdGhlIHJlY2VpdmVkIHdvdWxkbid0IHJlY2VpdmUgdGhlCi0JICByZXRyYW5zbWlzc2lvbiBwYWNrZXQgaW4gdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY0NDUKLQotMjAxNS0wOC0wNCAyMDo1OToxNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBzdHJlYW1kZXBheS5jOgotCSAgcnRwc3RyZWFtZGVwYXk6IE9ubHkgYWxsb3cgYWN0aXZhdGlvbiBpbiBwdXNoIG1vZGUKLQkgIFdlIG5lZWQgYSBwcm9wZXIgY2FwcyBldmVudCBmcm9tIHVwc3RyZWFtIHdpdGggdGhlIGZ1bGwgUlRQIGNhcHMgYXMgd2UgY2FuJ3QKLQkgIGNyZWF0ZSBjYXBzIG91cnNlbHZlcyBmcm9tIHRoaW4gYWlyLiBGaXhlcyB1c2FnZSBvZiBydHBzdHJlYW1kZXBheSBhZnRlciBlLmcuCi0JICBhIGZpbGVzcmMgb3IgYW55IG90aGVyIGVsZW1lbnQgdGhhdCBzdXBwb3J0cyBwdWxsIG1vZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUzMDY2Ci0KLTIwMTUtMDgtMDQgMTY6Mjg6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBmaXggdHlwbyBpbiB0cmFuc2xhdGVkIHN0cmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzI0MAotCi0yMDE1LTA4LTA0IDEyOjI1OjQ2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiBQdXQgdGhlIHByb2ZpbGUgYW5kIGxldmVsIGludG8gdGhlIGNhcHMKLQotMjAxNS0wOC0wNCAxMjowOToxMiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogT25seSB1cGRhdGUgdGhlIHNyY3BhZCBjYXBzIGlmIHNvbWV0aGluZyBlbHNlIHRoYW4gdGhlIGNvZGVjX2RhdGEgY2hhbmdlZAotCSAgaDI2NHBhcnNlIGRvZXMgdGhlIHNhbWUsIGxldCdzIGtlZXAgdGhlIGJlaGF2aW91ciBjb25zaXN0ZW50LiBBcyB3ZSBub3cKLQkgIGluY2x1ZGUgdGhlIGNvZGVjX2RhdGEgaW5zaWRlIHRoZSBzdHJlYW0gdG9vIGhlcmUsIHRoaXMgY2F1c2VzIGxlc3MgY2FwcwotCSAgcmVuZWdvdGlhdGlvbi4KLQotMjAxNS0wOC0wNCAxMTo0ODoyNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogUFBTIHJlcGxhY2VzIGFuZCBvbGQgUFBTIGlmIGl0IGhhcyB0aGUgc2FtZSBpZCwgaW5kZXBlbmRlbnQgb2YgU1BTIGlkCi0JICBUaGUgc3BlYyBzYXlzOgotCSAgV2hlbiBhIHBpY3R1cmUgcGFyYW1ldGVyIHNldCBOQUwgdW5pdCB3aXRoIGEgcGFydGljdWxhciB2YWx1ZSBvZgotCSAgcGljX3BhcmFtZXRlcl9zZXRfaWQgaXMgcmVjZWl2ZWQsIGl0cyBjb250ZW50IHJlcGxhY2VzIHRoZSBjb250ZW50IG9mIHRoZQotCSAgcHJldmlvdXMgcGljdHVyZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0LCBpbiBkZWNvZGluZyBvcmRlciwgd2l0aCB0aGUgc2FtZQotCSAgdmFsdWUgb2YgcGljX3BhcmFtZXRlcl9zZXRfaWQgKHdoZW4gYSBwcmV2aW91cyBwaWN0dXJlIHBhcmFtZXRlciBzZXQgTkFMIHVuaXQKLQkgIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgcGljX3BhcmFtZXRlcl9zZXRfaWQgd2FzIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbSkuCi0KLTIwMTUtMDgtMDMgMTM6NDU6NTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogcmVtb3ZlIGV4dHJhIFxuIGF0IGRlYnVnIG1lc3NhZ2UKLQotMjAxNS0wOC0wMyAxMzo0MjoyMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW5rOiBwcmV2ZW50IGRlYWRsb2NrIHdoZW4gc3RhdGVzIGNoYW5nZSB0b28gZmFzdAotCSAgSWYgdGhlIEdPUCBpcyBjb21wbGV0ZWQsIHBhZHMgaGF2ZSB0byBzdGFydCBnYXRoZXJpbmcgZm9yIHRoZQotCSAgbmV4dCBvbmUgYnV0IGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHRoZSBzdGF0ZSBtaWdodCBnbyB0bwotCSAgQ09MTEVDVElOR19HT1BfU1RBUlQgYW5kIGJhY2sgdG8gV0FJVElOR19HT1BfQ09NUExFVEUgYmVmb3JlIHRoZQotCSAgdGhyZWFkIGhhcyBhIGNoYW5jZSB0byB3YWtlIHVwIGFuZCBwcm9jZWVkLCBsZWF2aW5nIGl0IHRyYXBwZWQgaW4KLQkgIHRoZSBjaGVja19jb21wbGV0ZWRfZ29wIGxvb3AgYW5kIGRlYWRsb2NraW5nIHRoZSBvdGhlciB0aHJlYWRzCi0JICB3YWl0aW5nIGZvciBpdCB0byBhZHZhbmNlLgotCSAgVG8gc29sdmUgaXQsIHRoaXMgcGF0Y2ggYWxzbyBjaGVja3MgdGhhdCB0aGEgaW5wdXQgcnVubmluZyB0aW1lCi0JICBoYXNuJ3QgY2hhbmdlZCB0byBwcmV2ZW50IHRoaXMgc2NlbmFyaW8uCi0KLTIwMTUtMDgtMDMgMTc6NTU6MDEgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IEluc2VydCBTUFMvUFBTIE5BTHMgaW50byB0aGUgc3RyZWFtCi0JICBoMjY0cGFyc2UgZG9lcyB0aGUgc2FtZSBhbmQgdGhpcyBmaXhlcyBkZWNvZGluZyBvZiBzb21lIHN0cmVhbXMgd2l0aCAzMiBTUFMKLQkgIChvciAyNTYgUFBTKS4gSXQgaXMgYWxsb3dlZCB0byBoYXZlIFNQUyBJRCAwIHRvIDMxIChvciBQUFMgSUQgMCB0byAyNTUpLCBidXQKLQkgIHRoZSBmaWVsZCBpbiB0aGUgY29kZWNfZGF0YSBmb3IgdGhlIG51bWJlciBvZiBTUFMgb3IgUFBTIGlzIG9ubHkgNSAob3IgOCkgYml0LgotCSAgQXMgc3VjaCwgMzIgU1BTIChvciAyNTYgUFBTKSBhcmUgaW50ZXJwcmV0ZWQgYXMgMCBldmVyeXdoZXJlLgotCSAgVGhpcyBsb29rcyBsaWtlIGEgbWlzdGFrZSBpbiB0aGUgcGFydCBvZiB0aGUgc3BlYyBhYm91dCB0aGUgY29kZWNfZGF0YS4KLQotMjAxNS0wNy0zMCAxMToyOToyNyArMDkwMCAgRXVuaGFlIENob2kgPGV1bmhhZTEuY2hvaUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBoYW5kbGUgZW1wdHkgaHR0cCBwcm94eSBzdHJpbmcKLQkgIDEpIElmIHRoZSBzeXN0ZW0gaHR0cF9wcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0Ci0JICBvciBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3ZSBtdXN0IG5vdCBzZXQgcHJveHkgdG8gYXZvaWQKLQkgIGh0dHAgY29ubmVjdGlvbiBlcnJvci4KLQkgIDIpIEluIGNhc2Ugb2YgcHJveHkgcHJvcGVydHkgc2V0dGluZywgaWYgdXNlciB3YW50IHRvIGNsZWFyCi0JICB0aGUgcHJveHkgc2V0dGluZywgdGhleSBzaG91bGQgYmUgYWJsZSB0byBzZXQgaXQgdG8gTlVMTCBvcgotCSAgYW4gZW1wdHkgc3RyaW5nIGFnYWluLCBzbyB0aGlzIGlzIGZpeGVkIHRvby4KLQkgIDMpIENoZWNrIGlmIHRoZSBwcm94eSBzdHJpbmcgd2FzIHBhcnNlZCBjb3JyZWN0bHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyODY2Ci0KLTIwMTUtMDctMjkgMTU6NDY6MjAgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguaDoKLQkgIGR2ZGVtdXg6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQkgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgJ2ZyYW1lY291bnQnIGZyb20gZHZkZW11eAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzAwOAotCi0yMDE1LTA3LTMwIDE1OjMyOjA5ICswOTAwICBWaW5lZXRoIFRNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhc3NlcnRpb24gZXJyb3IgZHVlIHRvIHdyb25nIGNvbmRpdGlvbiBjaGVjawotCSAgSW4gbWVkaWEgdG8gY2FwcyBmdW5jdGlvbiwgcmVzZXJ2ZWRfa2V5cyBhcnJheSBpcyBiZWluZyB1c2VkIGZvciB2YXJpYWJsZSBpLAotCSAgbGVhZGluZyB0byBHTGliLUNSSVRJQ0FMICoqOiBnX2FzY2lpX3N0cmNhc2VjbXA6IGFzc2VydGlvbiAnczEgIT0gTlVMTCcgZmFpbGVkCi0JICBjaGFuZ2VkIGl0IHRvIHZhcmlhYmxlIGoKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTMwMDkKLQotMjAxNS0wNy0zMCAxNToyMToyMCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkgIHJ0cG1wNHZkZXBheTogcnRwYnVmZmVyIGlzIGJlaW5nIHVucmVmJ2VkIHR3aWNlCi0JICBwcm9jZXNzX3J0cF9wYWNrZXQgZG9lc24ndCB0cmFuc2ZlciB0aGUgcnRwIGJ1ZmZlciB0byBtcDR2X3Byb2Nlc3NfZGVwYXkKLQkgIHRoZSByZWZlcm5jZSBzaG91bGQgbm90IGJlIHJlbW92ZWQgaGVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzA0MgotCi0yMDE1LTA3LTI5IDExOjI2OjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBTdHJpcCBrZXlzIGZyb20gdGhlIGZtdHAgdGhhdCB3ZSB1c2UgaW50ZXJuYWxseSBpbiBvdXIgY2FwcwotCSAgU2tpcCBrZXlzIGZyb20gdGhlIGZtdHAsIHdoaWNoIHdlIGFscmVhZHkgdXNlIG91cnNlbHZlcyBmb3IgdGhlCi0JICBjYXBzLiBTb21lIHNvZnR3YXJlIGlzIGFkZGluZyByYW5kb20gdGhpbmdzIGxpa2UgY2xvY2stcmF0ZSBpbnRvCi0JICB0aGUgZm10cCwgYW5kIHdlIHdvdWxkIG90aGVyd2lzZSBoZXJlIHNldCBhIHN0cmluZy10eXBlZCBjbG9jay1yYXRlCi0JICBpbiB0aGUgY2Fwcy4uLiBhbmQgdGh1cyBmYWlsIHRvIGNyZWF0ZSB2YWxpZCBSVFAgY2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MzAwOQotCi0yMDE1LTA3LTI5IDE5OjI4OjMzICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogU3VwcG9ydCBtcGVndHNtdXggYXMgYSBtdXhlci4KLQkgIEFzIGEgZmFsbGJhY2ssIGxvb2sgZm9yIGEgcGFkIHRlbXBsYXRlIHNpbmtfJWQgb24KLQkgIHRoZSBtdXhlciB3aGVuIHJlcXVlc3RpbmcgcGFkcywgdG8gc3VwcG9ydCBtcGVndHNtdXgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI5OTkKLQotMjAxNS0wNi0yNSAwMTozNToyNyArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5oOgotCSAgc3BsaXRtdXhzcmM6IFVzZSBhIHNlcGFyYXRlIGxvY2sgdG8gZGVsYXkgdHlwZWZpbmQuCi0JICBEb24ndCBob2xkIHRoZSBtYWluIHNwbGl0bXV4IHBhcnQgbG9jayBvdmVyCi0JICB0aGUgcGFyZW50IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiwgYXMgaXQgcHJldmVudHMKLQkgIHBvc3RpbmcgZXJyb3IgbWVzc2FnZXMgdGhhdCBoYXBwZW4uIFNpbmNlIHRoZSBwdXJwb3NlCi0JICBpcyB0byBwcmV2ZW50IHR5cGVmaW5kaW5nIGZyb20gcHJvY2VlZGluZywgdXNlIGEKLQkgIHNlcGFyYXRlIG11dGV4IGp1c3QgZm9yIHRoYXQuCi0KLTIwMTUtMDctMjkgMTM6NDM6NTAgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2E6IGZpeCBtZW1vcnkgbGVhawotCSAgQWZ0ZXIgYWRkaW5nIHRvIHRhZyBsaXN0LCBrZXlfdmFsIGlzIG5vdCBiZWluZyBmcmVlJ2QKLQkgIHJlc3VsdGluZyBpbiBtZW1vcnkgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mjk5MgotCi0yMDE1LTA3LTI3IDEzOjM0OjE0ICswOTAwICBNYW5hc2EgQXRocmV5YSA8bWFuYXNhLmF0aHJleWFAbGdlLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggMTYtYml0IFBDTSBhdWRpbyBhZHZlcnRpc2VkIHdpdGggJ3JhdyAnIGZvdXJjYwotCSAgJ05PTkUnIGFuZCAncmF3ICcgZm91cmNjIGRvbid0IGFsd2F5cyBjb250YWluIFU4IGF1ZGlvLCBpdCBjYW4KLQkgIGJlIG1vcmUgYml0cyBhcyB3ZWxsLCBpbiB3aGljaCBjYXNlIGl0J3MganVzdCBsaWtlICd0d29zJy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI2MTMKLQotMjAxNS0wNy0yNCAxNToxMDowNSArMDIwMCAgRGltaXRyaW9zIEthdHNhcm9zIDxwYXRjaGVyd29ya0BnbWFpbC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDI6IEFsbG93IGZyYW1lcmF0ZSB0byBiZSBsYXJnZSB0aGVuIDEwMHBmcwotCSAgVGhpcyBsaW1pdCB3YXMgYXJiaXRyYXJ5LiBXZSBzdGlsbCBmaXhhdGUgbmVhciAxMDBwZnMgZm9yIGNvbXBhdGliaWxpdHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyODI1Ci0KLTIwMTUtMDctMjUgMDM6MjU6MjggLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQG9jcmV0ZS5jYT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IFN0b3Agd2l0aG91dCBwb3N0aW5nIGVycm9yIG9uIGZsdXNoaW5nCi0JICBUaGlzIGNvdWxkIGp1c3QgYmUgYSBub3JtYWwgcGlwZWxpbmUgc2h1dGRvd24uCi0KLTIwMTUtMDctMjMgMTU6MDA6MDggKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IHNldCBHU1RfQlVGRkVSX0NPUFlfRkxBR1MgdG8gY29weSBmbGFncyBhbHNvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNjE4Ci0KLTIwMTUtMDctMTYgMTg6MDk6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thZGVtdXguYzoKLQkgIHRlc3RzOiBhZGQgbWlubWFsIG1hdHJvc2thZGVtdXggdGVzdCBmb3Igc3VidGl0bGUgb3V0cHV0Ci0JICBTb21lIG9mIHRoZSBzdWJ0aXRsZSBjaHVua3Mgd2lsbCBoYXZlIGVtYmVkZGVkCi0JICBOVUwtdGVybWluYXRvcnMgKGxhc3QgdGhyZWUpLCBzb21lIGRvbid0IChmaXJzdCB0aHJlZSksCi0JICBzb21lIHdpbGwgaGF2ZSBtYXJrdXAsIHNvbWUgd29uJ3QsIHNvbWUgd2lsbCBiZSB2YWxpZAotCSAgVVRGLTggKGFsbCBidXQgbGFzdCksIHNvbWUgd29uJ3QgKGxhc3Qgc3RhbnphKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI0MjEKLQotMjAxNS0wNy0xNiAxODo0OToyNiArMDMwMCAgRGltaXRyaW9zIENocmlzdGlkaXMgPGRjaHJpc3RpZGlzQG15a29sYWIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGZpeCBmb3Igc3VidGl0bGUgYnVmZmVycyB3aXRoIE5VTCB0ZXJtaW5hdG9ycwotCSAgQ29tbWl0IDQ1ODkyZWM4IGNyZWF0ZWQgYSByZWdyZXNzaW9uIHdoZXJlIGdfdXRmOF92YWxpZGF0ZSgpIHdvdWxkIGZhaWwKLQkgIGlmIHRoZSBzdWJ0aXRsZSBidWZmZXIgaGFkIGEgTlVMIHRlcm1pbmF0b3IgYXMgcGFydCBvZiB0aGUgZGF0YS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI0MjEKLQotMjAxNS0wNy0yMSAxMzozMTowNSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkgIHJ0cHZwOGRlcGF5OiBDaGVjayBhdmFpbGFibGUgYnl0ZXMgYmVmb3JlIGNvcHkKLQkgIE5lZWQgdG8gY2hlY2sgdGhhdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHdhbnQgdG8gY29weSBmcm9tIHRoZSBhZGFwdGVyCi0JICBhY3R1YWxseSBpcyBhdmFpbGFibGUgYW5kIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSBncmFjZWZ1bGx5LiBUaGlzIGVycm9yCi0JICBtYXkgaGFwcGVuIGlmIG1hbGZvcm1lZCBwYWNrZXRzIGFyZSByZWNlaXZlZCBhbmQgd2UgZG9uJ3QgaGF2ZSBhCi0JICBjb21wbGV0ZSBmcmFtZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTI2NjMKLQotMjAxNS0wNy0xNiAwOTozMjozNiArMDkwMCAgUGF1bCBIeXVuaWwgPHBhdWwuaHl1bmlsQGxnZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFN1cHBvcnQgc3VidGl0bGUgd2hlbiB0cmFjayBzdWJ0eXBlIGlzIGZvdXJjY19zdWJ0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNjU1Ci0KLTIwMTUtMDctMjAgMTY6NTk6NDAgKzA4MDAgIFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogU2V0IHRpbWVzdGFtcCB3aGVuIHF1ZXVlIGJ1ZmZlci4KLQkgIFNob3VsZCBzZXQgdGltZXN0YW1wIHdoZW4gcXVldWUgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjYxOAotCi0yMDE1LTA3LTE2IDE1OjEyOjE3ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmM6Ci0JICBydHBtdXg6IGhhbmRsZSBkaWZmZXJlbnQgc3NyYydzIG9uIHNpbmtwYWRzCi0JICBEbyB0aGlzIGJ5IG5vdCBwdXR0aW5nIHRoZSBzc3JjIGZyb20gdGhlIHNyYyBwYWRzIGluIHRoZSBjYXBzIHVzZWQgdG8KLQkgIHByb2JlIG90aGVyIHNpbmtwYWRzLCBhbmQgdGhlbiAgaW50ZXJzZWN0aW5nIHdpdGggaXQgbGF0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNDkxCi0KLTIwMTUtMDctMTYgMTc6MTk6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL3dlYm0tbXV4LmM6Ci0JICBVcGRhdGUgbWFpbGluZyBsaXN0IGFkZHJlc3MgZnJvbSBzb3VyY2Vmb3JnZSB0byBmcmVlZGVza3RvcAotCi0yMDE1LTA3LTE1IDEzOjQ0OjUyICswMzAwICBEaW1pdHJpb3MgQ2hyaXN0aWRpcyA8ZGNocmlzdGlkaXNAbXlrb2xhYi5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZml4IHRyYWlsaW5nICcqJyBkaXNwbGF5ZWQgd2l0aCBzb21lIHRleHQgc3VidGl0bGVzCi0JICBUaGUgc3VidGl0bGUgYnVmZmVyIHdlIHB1c2ggb3V0IHNob3VsZCBub3QgaW5jbHVkZSBhIE5VTCB0ZXJtaW5hdG9yCi0JICBhcyBwYXJ0IG9mIHRoZSBkYXRhLCB3ZSBqdXN0IGFkZCBzdWNoIGEgdGVybWluYXRvciBmb3Igc2FmZXR5LCBidXQKLQkgIGl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGJ1ZmZlciBzaXplLgotCSAgQSBOVUwgdGVybWluYXRvciBpcyBub3QgdmFsaWQgVVRGLTgsIHNvIGNoZWNrcyB3aWxsIGZhaWwgaWYgaXQncwotCSAgaW5jbHVkZWQgaW4gdGhlIHNpemUsIGFuZCB0aGUgTlVMIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGZhbGxiYWNrCi0JICBjaGFyYWN0ZXIgc3BlY2lmaWVkIHdoZW4gY29udmVydGluZywgaS5lLiAnKicuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyNDIxCi0KLTIwMTUtMDctMTUgMTg6MjM6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VkZXZpY2Vwcm92aWRlci5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5oOgotCSAgcHVsc2U6IGFkZCBwcm9wZXJ0aWVzIHRvIEdzdERldmljZQotCSAgQWRkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIHdlIGdldCBmcm9tIHB1bHNlIHRvIHRoZSBHc3REZXZpY2Ugd2UgZXhwb3NlCi0JICB3aXRoIHRoZSBkZXZpY2UgbW9uaXRvcgotCi0yMDE1LTA3LTE1IDE3OjIwOjIwICswNTMwICBSYXZpIEtpcmFuIEsgTiA8cmF2aS5raXJhbkBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JICBhdWRpb2Z4OiBGaXggdHlwbyBpbiBleGFtcGxlIHBpcGVsaW5lcwotCSAgRml4IHR5cG8gaW4gZXhhbXBsZSBwaXBlbGluZXMgb2YgYXVkaW93c2luY2JhbmQgYW5kIGF1ZGlvaW52ZXJ0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MjQxNgotCi0yMDE1LTA0LTE1IDE4OjI3OjA0ICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW5rOiBhZGQgYSAiZm9ybWF0LWxvY2F0aW9uIiBzaWduYWwgdGhhdCBhbGxvd3MgYmV0dGVyIGNvbnRyb2wgb3ZlciBmaWxlbmFtZXMKLQkgIEluIGNlcnRhaW4gYXBwbGljYXRpb25zLCBzcGxpdHRpbmcgaW50byBmaWxlcyBuYW1lZCBhZnRlciBhIGJhc2UKLQkgIGxvY2F0aW9uIHRlbXBsYXRlIGFuZCBhbiBpbmNyZW1lbnRhbCBzZXF1ZW5jZSBudW1iZXIgaXMgbm90IGVub3VnaC4KLQkgIFRoaXMgc2lnbmFsIGdpdmVzIG1vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wgdG8gdGhlIGFwcGxpY2F0aW9uIHRvCi0JICBkZWNpZGUgaG93IHRvIG5hbWUgdGhlIGZpbGVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDEwNgotCi0yMDE1LTA0LTE1IDIwOjEzOjI3ICswMzAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JICBvc3hhdWRpb3NyYzogbm8gcmVzYW1wbGluZyBvbiBPUyBYCi0JICBVbmxpa2UgUmVtb3RlIElPLCBBVUhBTCBkb2Vzbid0IGhhdmUgYnVpbHQtaW4gcmVzYW1wbGluZwotCSAgZm9yIHNvdXJjZXMgLS0gY29uZmlybWVkIGJ5IENvcmUgQXVkaW8gZW5naW5lZXIgRG91ZyBXeWF0dDoKLQkgIGh0dHA6Ly9saXN0cy5hcHBsZS5jb20vYXJjaGl2ZXMvY29yZWF1ZGlvLWFwaS8yMDA2L1NlcC9tc2cwMDA4OC5odG1sCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNzU4Ci0KLTIwMTUtMDQtMTUgMTg6Mjk6MTQgKzAzMDAgIElseWEgS29uc3RhbnRpbm92IDxpbHlhLmtvbnN0YW50aW5vdkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uYzoKLQkgIG9zeGF1ZGlvc3JjOiBhdm9pZCBnZXRfY2hhbm5lbF9sYXlvdXQKLQkgIFRoaXMgb25seSBwcm9kdWNlcyBhIHdhcm5pbmcgYW5kIHNlcnZlcyBubyBwdXJwb3NlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mzc1OAotCi0yMDE1LTA0LTA3IDE1OjQwOjE0ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSAgb3N4YXVkaW86IEF2b2lkIG1ha2luZyBhIGR1cGxpY2F0ZSBzdHJ1Y3R1cmUgaW4gY2FwcyBmb3IgbW9uby9zdGVyZW8gY2FzZQotCSAgRm9yIDFjaCBvciAyY2ggZGV2aWNlcywgd2UganVzdCBuZWVkIHRvIHNldCB0aGUgY2FwcyB0byBhbGxvdyBib3RoCi0JICBvcHRpb25zIHNpbmNlIENvcmVBdWRpbyB3aWxsIHVwL2Rvd25taXggYXBwcm9wcmlhdGVseS4KLQkgIEFsc28gZml4ZXMgdGhlIGNvbmRpdGlvbiBmb3IgdGhlIDJjaCBjYXNlIHRvIGJlIGV4YWN0LCByYXRoZXIgdGhhbiBhdAotCSAgbGVhc3QgMiBjaGFubmVscyBzaW5jZSB0aGUgZG93bm1peCB3aWxsIG5vdCB0YWtlIHBsYWNlIGluIHRoZSA+c3RlcmVvCi0JICBjYXNlLgotCi0yMDE1LTA0LTA2IDE2OjIyOjM0ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmM6Ci0JICBvc3hhdWRpbzogRG9uJ3Qgc2V0IHRoZSBmb3JtYXQgb24gYW4gaW5pdGlhbGl6ZWQgQXVkaW9Vbml0Ci0JICBXZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIEF1ZGlvVW5pdCBlYXJseSB0byBiZSBhYmxlIHRvIHByb2JlIHRoZQotCSAgdW5kZXJseWluZyBkZXZpY2UsIGJ1dCBhY2NvcmRpbmcgdG8gdGhlIEF1ZGlvVW5pdEluaXRpYWxpemUoKSBhbmQKLQkgIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSgpIGRvY3VtZW50YXRpb24sIGZvcm1hdCBjaGFuZ2VzIHNob3VsZCBiZSBkb25lCi0JICB3aGlsZSB0aGUgQXVkaW9Vbml0IGlzIHVuaW5pdGlhbGl6ZWQuIFNvIHdlIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplIHRoZQotCSAgQXVkaW9Vbml0IGR1cmluZyBhIGZvcm1hdCBjaGFuZ2UgYW5kIHJlaW5pdGlhbGl6ZSBpdCB3aGVuIHdlJ3JlIGRvbmUuCi0KLTIwMTUtMDQtMDYgMTU6NTU6NTkgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JICBvc3hhdWRpbzogTWlub3Igc3BlbGxpbmcgZml4ICh1bml0aWFsaXplIC0+IHVuaW5pdGlhbGl6ZSkKLQotMjAxNS0wMy0yMSAyMDozNDoyNSArMDIwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JICBvc3hhdWRpbzogRml4IGxvY2t1cCBpbiBfYXVkaW9fdW5pdF9wcm9wZXJ0eV9saXN0ZW5lcgotCSAgX2F1ZGlvX3VuaXRfcHJvcGVydHlfbGlzdGVuZXIgaXMgY2FsbGVkIGVpdGhlciBmcm9tIGEgQ29yZSBBdWRpbyB0aHJlYWQKLQkgIG9yIGFzIGEgcmVzdWx0IG9mIGEgQ29yZSBBdWRpbyBBUEkgKGUuZy4gQXVkaW9Vbml0SW5pdGlhbGl6ZSkKLQkgIGZyb20gb3VyIG93biB0aHJlYWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgb3N4YnVmIGNhbiBiZSBhbHJlYWR5IGxvY2tlZAotCSAgKEdTdHJlYW1lcidzIG11dGV4IGlzIG5vdCByZWN1cnNpdmUpLgotCSAgV2UgaW50cm9kdWNlIHRoZSBmbGFnIGNhY2hlZF9jYXBzX3ZhbGlkIGFuZCB1c2UgaXQgaW5zdGVhZCBvZiBudWxsaWZ5aW5nCi0JICBjYWNoZWRfY2FwcyB3aGVuIHdlIGNhbm5vdCBsb2NrIG9uIG9zeGJ1Zi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM3NTgKLQotMjAxNS0wMy0xMiAxMjoxNToxMiArMDIwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSAgb3N4YXVkaW86IEludmFsaWRhdGUgY2FjaGVkIGNhcHMgb24gZm9ybWF0IGNoYW5nZQotCSAgTGlzdGVuIGZvciBjaGFuZ2VzIGluIGhhcmR3YXJlIHN0cmVhbSBmb3JtYXQgYW5kIGNoYW5uZWwgbGF5b3V0LCBhbmQKLQkgIGludmFsaWRhdGUgY2FjaGVkIGNhcHMgKHNpbmNlIHRoZXkgY29udGFpbiB0aGUgcHJlZmVycmVkIGNhcHMpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mzc1OAotCi0yMDE1LTAzLTA5IDIzOjM0OjA2ICswMjAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmM6Ci0JICBvc3hhdWRpbzogT3ZlcmhhdWwgb2YgcHJvYmluZyBjYXBzCi0JICAtIFByb2JpbmcgY2FwcyBpcyB1bmlmaWVkIGJldHdlZW4gc291cmNlIGFuZCBzaW5rCi0JICAtIEhhcmR3YXJlIHN0cmVhbSBmb3JtYXQgaXMgbm93IHJlcG9ydGVkIGFzIHByZWZlcnJlZCBjYXBhYmlsaXRpZXMKLQkgIChkeW5hbWljYWxseSB1cGRhdGVkIHdoZW4gaGFyZHdhcmUgY29uZmlndXJhdGlvbiBjaGFuZ2VzKQotCSAgLSBHZXQgaGFyZHdhcmUgY2hhbm5lbCBsYXlvdXQgZnJvbSBSZW1vdGUgSU8ganVzdCBsaWtlIGZyb20gSEFMCi0JICAtIE1vcmUgY29tcHJlaGVuc2l2ZSBtYXBwaW5nIGJldHdlZW4gQXVkaW9DaGFubmVsTGFiZWwgYW5kCi0JICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbgotCSAgLSBTdXBwb3J0IGZvciB1bnBvc2l0aW9uZWQgY2hhbm5lbCBsYXlvdXRzCi0JICAtIEFubm91bmNlIHN0ZXJlby1tb25vIHVwbWl4aW5nL2Rvd25taXhpbmcgaW4gY2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mzc1OAotCi0yMDE1LTAzLTA5IDIzOjE1OjU2ICswMjAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JICBvc3hhdWRpbzogQXVkaW9Vbml0SW5pdGlhbGl6ZSBvbiBvcGVuCi0JICBDYWxsIEF1ZGlvVW5pdEluaXRpYWxpemUgdXBvbiBvcGVuLiBPdGhlcndpc2UsIHdlIGNhbm5vdCBnZXQKLQkgIChoYXJkd2FyZSkgc3RyZWFtIGZvcm1hdCBub3IgY2hhbm5lbCBsYXlvdXQgZnJvbSB0aGUgb3V0ZXIgc2NvcGUuCi0KLTIwMTUtMDctMTIgMTQ6Mjc6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwTDI0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2MWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGtsdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkgIHJ0cDogZGVwYXlsb2FkZXJzOiBpbXBsZW1lbnQgcHJvY2Vzc19ydHBfcGFja2V0KCkgdmZ1bmMKLQkgIEZvciBtb3JlIG9wdGltaXNlZCBSVFAgcGFja2V0IGhhbmRsaW5nOiBtZWFucyB3ZSBkb24ndAotCSAgbmVlZCB0byBtYXAgdGhlIGlucHV0IGJ1ZmZlciBhZ2FpbiBidXQgY2FuIGp1c3QgcmUtdXNlCi0JICB0aGUgbWFwcGluZyB0aGUgYmFzZSBjbGFzcyBoYXMgYWxyZWFkeSBkb25lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDIzNQotCi0yMDE1LTA1LTI3IDE5OjE5OjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwdnJhd2RlcGF5OiBpbXBsZW1lbnQgcHJvY2Vzc19ydHBfcGFja2V0KCkgdmZ1bmMKLQkgIEZvciBtb3JlIG9wdGltaXNlZCBSVFAgcGFja2V0IGhhbmRsaW5nOiBtZWFucyB3ZSBkb24ndAotCSAgbmVlZCB0byBtYXAgdGhlIGlucHV0IGJ1ZmZlciBhZ2FpbiBidXQgY2FuIGp1c3QgcmUtdXNlCi0JICB0aGUgbWFwIHRoZSBiYXNlIGNsYXNzIGhhcyBhbHJlYWR5IGRvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwMjM1Ci0KLTIwMTUtMDctMTAgMDA6MTM6MzIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBGaXggaW5kZW50aW9uCi0KLTIwMTUtMDctMDkgMjM6NTk6MTAgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBBbHdheXMgZXN0aW1hdGUgRFRTIGZyb20gdGhlIGN1cnJlbnQgY2xvY2sgdGltZQotCSAgRXN0aW1hdGluZyBpdCBmcm9tIHRoZSBSVFAgdGltZSB3aWxsIGdpdmUgdXMgdGhlIFBUUywgc28gaW4gY2FzZXMgb2YgUFRTIT1EVFMKLQkgIHdlIHdvdWxkIHByb2R1Y2Ugd3JvbmcgRFRTLiBBcyBub3cgdGhlIGVzdGltYXRlZCBEVFMgaXMgYmFzZWQgb24gdGhlIGNsb2NrLAotCSAgZG9uJ3Qgc3RvcmUgaXQgaW4gdGhlIGppdHRlcmJ1ZmZlciBpdGVtcyBhcyBpdCB3b3VsZCBvdGhlcndpc2UgYmUgdXNlZCBpbiB0aGUKLQkgIHNrZXcgY2FsY3VsYXRpb25zIGFuZCB3b3VsZCBpbmZsdWVuY2UgdGhlIHJlc3VsdHMuIFdlIG9ubHkgcmVhbGx5IG5lZWQgdGhlIERUUwotCSAgZm9yIHRpbWVyIGNhbGN1bGF0aW9ucy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1MzYKLQotMjAxNS0wNy0wOSAwOToyNjowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgZ2l0aWdub3JlOiBpZ25vcmUgcnRwaDI2MyB0ZXN0Ci0KLTIwMTUtMDctMDggMjM6NDc6NDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGZpeCBidWlsZCBlcnJvciB3aXRoIGdjYyAoRGViaWFuIDQuOS4yLTIxKSA0LjkuMgotCSAgUmVwbGFjZSBzdGF0aWMgY29uc3RhbnRzIHdpdGggbWFjcm9zIHRvIG1ha2UgZ2NjIGhhcHB5Ci0JICBDQyAgICAgICBlbGVtZW50cy9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLm8KLQkgIGVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOjM4NzoxOiBlcnJvcjogaW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgY29uc3RhbnQKLQkgIHN0YXRpYyBjb25zdCBHc3RDbG9ja1RpbWUgUENNVV9CVUZfRFVSQVRJT04gPSBQQ01VX0JVRl9NUyAqIEdTVF9NU0VDT05EOwotCSAgXgotCSAgZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Mzg4OjE6IGVycm9yOiBpbml0aWFsaXplciBlbGVtZW50IGlzIG5vdCBjb25zdGFudAotCSAgc3RhdGljIGNvbnN0IGd1aW50IFBDTVVfQlVGX1NJWkUgPSA2NDAwMCAqIFBDTVVfQlVGX01TIC8gMTAwMDsKLQkgIF4KLQkgIGVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOjM5MDo1OiBlcnJvcjogaW5pdGlhbGl6ZXIgZWxlbWVudCBpcyBub3QgY29uc3RhbnQKLQkgIFBDTVVfQlVGX0NMT0NLX1JBVEUgKiBQQ01VX0JVRl9NUyAvIDEwMDA7Ci0KLTIwMTUtMDctMDggMjM6NDA6NDUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHJ1biBpbmRlbnQgYW5kIGZpeCBzb21lIGNvbW1lbnRzCi0JICBGaXggaW5kZW50IG9uIHRoaXMgZmlsZSBhbmQgYnJlYWsgc29tZSBjb21tZW50IGxpbmVzIGludG8gdHdvIHRvIG1ha2UKLQkgIGl0IGZpdCA4MCBjaGFycyBwZXIgbGluZQotCi0yMDE1LTA3LTA4IDE1OjAyOjI0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmV3b3JrIHNlZ21lbnQgZXZlbnQgaGFuZGxpbmcgZm9yIGFkYXB0aXZlIHN0cmVhbWluZwotCSAgV2hlbiBhIG5ldyB0aW1lIHNlZ21lbnQgaXMgcmVjZWl2ZWQgdXBzdHJlYW0gaXMgZ29pbmcgdG8gcmVzdGFydAotCSAgd2l0aCBhIG5ldyBhdG9tLiBNYWtlIHRoZSBuZWVkZWRieXRlcyBhbmQgdG9kcm9wIHZhcmlhYmxlcwotCSAgcmVmbGVjdCB0aGF0IHRvIGF2b2lkIHdhaXRpbmcgdG9vIG11Y2ggb3IgZHJvcHBpbmcgdGhlCi0JICBpbml0aWFsIGJ5dGVzIHRoYXQgY29udGFpbiB0aGUgaGVhZGVyLgotCi0yMDE1LTA3LTA4IDEyOjM1OjU1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcHVzaCBkYXRhIGZyb20gYWRhcHRlciBiZWZvcmUgc3RhcnRpbmcgbmV3IHNlZ21lbnQKLQkgIFRoZSBhZGFwdGVyIG1pZ2h0IGhhdmUgZGF0YSByZW1haW5pbmcgZnJvbSB0aGUgcHJldmlvdXMgc2VnbWVudCwKLQkgIHB1c2ggaXQgYWxsIGJlZm9yZSBjbGVhcmluZyB0aGUgYWRhcHRlciBhbmQgc3RhcnRpbmcgYSBuZXcgc2VnbWVudC4KLQkgIEl0IGNhbiBhY2N1bXVsYXRlIGRhdGEgaWYgaXQgaGFkIHB1c2hlZCBhbmQgZ290IG5vdC1saW5rZWQsIHJldHVybmluZwotCSAgaW1tZWRpYXRlbHkgd2l0aG91dCBwcm9jZXNzaW5nIGFsbCB0aGUgZGF0YS4gQmVmb3JlIHN0YXJ0aW5nIGEgbmV3Ci0JICBzZWdtZW50IHRoaXMgZGF0YSBzaG91bGQgYmUgaGFuZGxlZC4KLQotMjAxNS0wNy0wOCAxOTo1OToxMyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IENhbGN1bGF0ZSBEVFMgZnJvbSB0aGUgY2xvY2sgaWYgd2UgaGFkIG5vbmUgZm9yIHRoZSBmaXJzdCBwYWNrZXQgYWZ0ZXIgYSByZXNldAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTUzNgotCi0yMDE1LTA3LTA4IDIxOjA4OjM2ICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGZpeCBnYXAtdGltZSBjYWxjdWxhdGlvbiBhbmQgcmVtb3ZlICJsYXRlIgotCSAgVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgaXMgY29tcGxldGVseSBleHBpcmVkIGFuZCBub3Qgd29ydGggd2FpdGluZyBmb3IsCi0JICBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIHBhY2tldHMgaW4gdGhlIGdhcCAoZ2FwICogZHVyYXRpb24pIC0gdGhlCi0JICBsYXRlbmN5IChzaXplKSBvZiB0aGUgaml0dGVyYnVmZmVyIChwcml2LT5sYXRlbmN5X25zKS4gVGhpcyBpcyB0aGUgZHVyYXRpb24KLQkgIHRoYXQgd2UgbWFrZSBhICJtdWx0aS1sb3N0IiBwYWNrZXQgZm9yLgotCSAgVGhlICJsYXRlIiBjb25jZXB0IG1hZGUgc29tZSBzZW5zZSBpbiAwLjEwIGFzIGl0IHJlZmxlY3RlZCB0aGF0IGEgYnVmZmVyCi0JICBjb21pbmcgaW4gaGFkIG5vdCBiZWVuIHdhaXRlZCBmb3IgYXQgYWxsLCBidXQgaGFkIGEgdGltZXN0YW1wIHRoYXQgd2FzCi0JICBvdXRzaWRlIHRoZSBqaXR0ZXJidWZmZXIgdG8gd2FpdCBmb3IuIFdpdGggdGhlIHJld3JpdGUgb2YgdGhlIHdhaXRpbmcKLQkgICh0aW1lb3V0KSBtZWNoYW5pc20gaW4gMS4wLCB0aGlzIG5vIGxvbmdlciBtYWtlcyBhbnkgc2Vuc2UsIGFuZCB0aGUKLQkgIHZhcmlhYmxlIG5vIGxvbmdlciByZWZsZWN0cyBhbnl0aGluZyBtZWFuaW5nZnVsIChudW0gPiAwIGlzIHVzZWxlc3MsCi0JICB0aGUgZHVyYXRpb24gaXMgd2hhdCBtYXR0ZXJzKQotCSAgRml4ZWQgdXAgdGhlIHRlc3RzIHRoYXQgaGFkIGJlZW4gc2xpZ2h0bHkgbW9kaWZpZWQgaW4gMS4wIHRvIGFsbG93IGZhdWx0eQotCSAgYmVoYXZpb3IgdG8gc25lYWsgaW4sIGFuZCBwb3J0IHNvbWUgb2YgdGhlbSB0byB1c2UgR3N0SGFybmVzcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgzNjMKLQotMjAxNS0wNi0zMCAxMToyMTozMSArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgUmV2ZXJ0ICJydHBqaXR0ZXJidWZmZXI6IEZpeCBleHBlY3RlZF9kdHMgY2FsYyBpbiBjYWxjdWxhdGVfZXhwZWN0ZWQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDA1YmQ3MDhmYzVlODgxMzkwZmU4Mzk4MDNiNTMxNDQzOTNkOTVhYjAuCi0JICBUaGUgcmV2ZXJ0ZWQgcGF0Y2ggaXMgd3JvbmcgYW5kIGludHJvZHVjZXMgYSByZWdyZXNzaW9uIGJlY2F1c2UgdGhlcmUKLQkgIG1heSBzdGlsbCBiZSB0aW1lIHRvIHJlY2VpdmUgc29tZSBvZiB0aGUgcGFja2V0cyBpbmNsdWRlZCBpbiB0aGUgZ2FwCi0JICBpZiB0aGV5IGFyZSByZW9yZGVyZWQuCi0KLTIwMTUtMDctMDcgMjM6NTM6MDIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmbHVzaCBzYW1wbGVzIGJlZm9yZSBhZGRpbmcgbW9yZSBmcm9tIG1vb2YKLQkgIEF2b2lkcyBhY2N1bXVsYXRpbmcgYWxsIHNhbXBsZXMgZnJvbSBhIGZyYWdtZW50ZWQgc3RyZWFtIHRoYXQgY291bGQKLQkgIGxlYWQgdG8gYSAnaW5kZXgtdG9vLWJpZycgZXJyb3Igb25jZSBpdCBnb2VzIG92ZXIgNTBNQiBvZiBkYXRhLiBJdAotCSAgY291bGQgcmVhY2ggdGhhdCBiZWZvcmUgMmggb2YgcGxheWJhY2sgc28gaXQgZG9lc24ndCB0YWtlIHRoYXQgbG9uZy4KLQkgIEFzIHVwc3RyZWFtIGVsZW1lbnRzIGFyZSBwcm92aWRpbmcgZGF0YSBpbiB0aW1lIGZvcm1hdCB0aGV5IHNob3VsZAotCSAgYmUgdGhlIG9uZXMgdGhhdCBoYXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bGwgbWVkaWEgaW5kZXgKLQkgIGFuZCBzaG91bGQgYmUgYWJsZSB0byBzZWVrIGlmIHBvc3NpYmxlLgotCi0yMDE1LTA3LTA3IDIzOjU2OjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiByZW5hbWUgdXBzdHJlYW1fbmV3c2VnbWVudCB0byB1cHN0cmVhbV9mb3JtYXRfaXNfdGltZQotCSAgdXBzdHJlYW1fbmV3c2VnbWVudCBpc24ndCByZWFsbHkgY2xlYXIgb24gd2hhdCBpdCBtZWFucywgaXQgaXMgc2V0Ci0JICB0byBUUlVFIHdoZW4gdGhlIHVwc3RyZWFtIGVsZW1lbnQgc2VuZHMgYSBzZWdtZW50IGluIFRJTUUgZm9ybWF0LCBzbwotCSAgcmVuYW1lIGl0IHRvIGJlIG1vcmUgY2xlYXIgYWJvdXQgaXQuCi0JICBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGlzIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCB1cHN0cmVhbSBoYXMKLQkgIGEgbm90aW9uIG9mIHRpbWUgYW5kIHF0ZGVtdXggaXMgbGlrZWx5IGJlaW5nIGRyaXZlbiBieSBhbiB1cHN0cmVhbQotCSAgZWxlbWVudCB0aGF0IGlzIHJlYWRpbmcgZnJvbSBhIGhpZ2hlciBsZXZlbCBhYnN0cmFjdGlvbiB0aGFuIGEgZmlsZSwKLQkgIHN1Y2ggYXMgYSBEQVNILCBNU1Mgb3IgRExOQSBlbGVtZW50LgotCi0yMDE1LTA3LTA3IDIxOjMxOjA4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGxlYWsgYnkgZmx1c2hpbmcgcHJldmlvdXMgc2FtcGxlIGluZm8gZnJvbSB0cmFrCi0JICBJbiBmcmFnbWVudGVkIHN0cmVhbWluZywgbXVsdGlwbGUgbW9vdi9tb29mIHdpbGwgYmUgcGFyc2VkIGFuZCB0aGVpcgotCSAgcHJldmlvdXNseSBzdG9yZWQgc2FtcGxlcyBhcnJheSBtaWdodCBsZWFrIHdoZW4gbmV3IHZhbHVlcyBhcmUgcGFyc2VkLgotCSAgVGhlIHBhcnNlX3RyYWsgYW5kIGNhbGxlZXMgd29uJ3QgZnJlZSB0aGUgcHJldmlvdXNseSBzdG9yZWQgdmFsdWVzCi0JICBiZWZvcmUgcGFyc2luZyB0aGUgbmV3IG9uZXMuCi0JICBJbiBzdGVwLWJ5LXN0ZXAsIHRoaXMgaXMgd2hhdCBoYXBwZW5zOgotCSAgMSkgaW5pdGlhbCBtb292IGlzIHBhcnNlZCwgdHJha3MgYXMgd2VsbCwgc3RyZWFtcyBhcmUgY3JlYXRlZC4gVGhlCi0JICB0cmFrIGRvZXNuJ3QgY29udGFpbiBzYW1wbGVzIGJlY2F1c2UgdGhleSBhcmUgaW4gdGhlIG1vb2YncyB0cnVuCi0JICBib3hlcy4gbl9zYW1wbGVzIGlzIHNldCB0byAwIHdoaWxlIHBhcnNpbmcgdGhlIHRyYWsgYW5kIHRoZSBzYW1wbGVzCi0JICBhcnJheSBpcyBzdGlsbCBOVUxMLgotCSAgMikgbW9vZnMgYXJlIHBhcnNlZCwgYW5kIHRoZWlyIHRydW4gYm94ZXMgd2lsbCBpbmNyZWFzZSBuX3NhbXBsZXMgYW5kCi0JICBjcmVhdGUvZXh0ZW5kIHRoZSBzYW1wbGVzIGFycmF5Ci0JICAzKSBBdCBzb21lIHBvaW50IGEgbmV3IG1vb3YgbWlnaHQgYmUgc2VudCAoYml0cmF0ZSBzd2l0Y2hpbmcsIGZvciBleGFtcGxlKQotCSAgYW5kIHBhcnNpbmcgdGhlIHRyYWsgd2lsbCBvdmVyd3JpdGUgbl9zYW1wbGVzIHdpdGggdGhlIHZhbHVlcyBmcm9tCi0JICB0aGlzIHRyYWsuIElmIHRoZSBuX3NhbXBsZXMgaXMgc2V0IHRvIDAgcXRkZW11eCB3aWxsIGFzc3VtZSB0aGF0Ci0JICB0aGUgc2FtcGxlcyBhcnJheSBpcyBOVUxMIGFuZCB3aWxsIGxlYWsgaXQgd2hlbiBhIG5ldyBvbmUgaXMKLQkgIGNyZWF0ZWQgZm9yIHRoZSBzdWJzZXF1ZW50IG1vb2ZzLgotCSAgVGhpcyBwYXRjaCBtYWtlcyBxdGRlbXV4IHByb3Blcmx5IGZyZWUgcHJldmlvdXMgc2FtcGxlIGRhdGEgYmVmb3JlCi0JICBjcmVhdGluZyBuZXcgb25lcyBhbmQgYWRkcyBhbiBhc3NlcnQgdG8gY2F0Y2ggZnV0dXJlIG9jY3VycmVuY2VzIG9mCi0JICB0aGlzIGlzc3VlIHdoZW4gdGhlIGNvZGUgY2hhbmdlcy4KLQotMjAxNS0wNy0wNyAxNjo0NjozMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBpbmRleCBzaXplIGNoZWNrIGFuZCBkZWJ1ZyBtZXNzYWdlCi0JICBJdCBpcyBhbGxvY2F0aW5nIHNhbXBsZXNfY291bnQgKyBuX3NhbXBsZXMsIG5vdCBvbmx5IG5fc2FtcGxlcwotCi0yMDE1LTA3LTA4IDE3OjAyOjA1ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogQ2FsY3VsYXRlIHJlY2VpdmUgdGltZSBpZiB3ZSBkb24ndCBoYXZlIGFueQotCSAgVGhpcyBpcyByZXF1aXJlZCB0byBwcm9wZXJseSBzY2hlZHVsZSBwYWNrZXQgbG9zcyB0aW1lcnMgYW5kIG1ha2UKLQkgIHN1cmUgYWxsIG91ciBjYWxjdWxhdGlvbnMgd29yayBwcm9wZXJseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1MzYKLQotMjAxNS0wNy0wOCAxNToxMzoxNyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEhhbmRsZSBzZXFudW0gZ2FwcyBpbiBUQ1Agc3RyZWFtcyB3aXRob3V0IGVycm9yaW5nIG91dCBvciBvdmVyZmxvd2luZyBjYWxjdWxhdGlvbnMKLQkgIFRoYXQgaXMsIGhhbmRsZSBEVFM9PUdTVF9DTE9DS19USU1FX05PTkUgY29ycmVjdGx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTUzNgotCi0yMDE1LTA3LTA4IDIwOjMxOjQyICswOTAwICBWaW5lZXRoIFQgTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBldmVudCBsZWFrCi0JICB3aGVuIHNlZWsgZmFpbHMgaW4gYXZpZGVtdXgsIGV2ZW50IGlzIG5vdCBiZWluZyBmcmVlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTIxMTcKLQotMjAxNS0wNy0wOCAxMjowMjoyMiArMDIwMCAgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGgyNjMuYzoKLQkgIHJ0cGgyNjNkZXBheTogTWFrZSBzdXJlIHBheWxvYWQgaXMgbGFyZ2UgZW5vdWdoCi0JICBQbHVzIG5ldyB1bml0IHRlc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMTEyCi0KLTIwMTUtMDctMDggMDg6NTk6NDkgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwa2x2ZGVwYXkuYzoKLQkgIHJ0cGtsdmRlcGF5OiBmaXggcHJpbnRmIGZvcm1hdCBjb21waWxlciB3YXJuaW5nCi0JICB2X2xlbiBpcyBvZiB0eXBlIGd1aW50NjQsIGJ1dCB3aGlsZSBwcmludCB0aGUgdmFsdWUoMTYgKyBsZW5fc2l6ZSArIHZfbGVuKQotCSAgR19HU0laRV9GT1JNQVQgaXMgYmVpbmcgdXNlZCBpbnN0ZWFkIG9mIEdfR1VJTlQ2NF9GT1JNQVQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTIxMDAKLQotMjAxNS0wNy0wNyAyMDoyNTo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JICBkb2NzOiBhZGQgbmV3IFJUUCBlbGVtZW50cyB0byBkb2NzCi0KLTIwMTUtMDctMDcgMjA6MDc6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICB0ZXN0czogcnRwLXBheWxvYWRpbmc6IGFkZCBiYXNpYyB1bml0IHRlc3QgZm9yIEtMViBwYXlsb2FkaW5nCi0JICBBbHNvIG1ha2UgaXQgc28gdGhhdCB0aGUgbXR1IGlzIGFsd2F5cyBzZXQgaWYgc3BlY2lmaWVkLCBub3QKLQkgIG9ubHkgaW4gY2FzZSBvZiB0aGUgcmF0aGVyIHdlaXJkIGJ1ZmZlcmxpc3QgdGVzdCBjb2RlIHBhdGguCi0JICBUaGlzIGFsbG93cyB1cyB0byBlYXNpbHkgbWFrZSB0aGUgcGF5bG9hZGVyIGZyYWdtZW50IGEgcGF5bG9hZAotCSAgYWNyb3NzIG11bHRpcGxlIG91dHB1dCBwYWNrZXRzIGJ5IHNldHRpbmcgYSBzbWFsbCBNVFUgb24gaXQuCi0KLTIwMTUtMDctMDcgMTk6NTg6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwa2x2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwa2x2ZGVwYXkuaDoKLQkgIHJ0cGtsdmRlcGF5OiBpbXByb3ZlIHN0YXJ0IGRldGVjdGlvbiBhbmQgaGFuZGxlIGZyYWdtZW50ZWQgS0xWIHVuaXRzCi0KLTIwMTUtMDctMDUgMjA6MjU6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBrbHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBrbHZkZXBheS5oOgotCSAgcnRwOiBhZGQgU01QVEUgMzM2TSBLTFYgbWV0YWRhdGEgZGVwYXlsb2FkZXIKLQkgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1OTcKLQotMjAxNC0wOC0wOSAxMDowODo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGtsdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBrbHZwYXkuaDoKLQkgIHJ0cDogYWRkIFNNUFRFIDMzNk0gS0xWIG1ldGFkYXRhIHBheWxvYWRlcgotCSAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU5NwotCi0yMDE1LTA3LTA3IDE2OjU5OjIwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zLmg6Ci0JKiBnc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuYzoKLQkqIGdzdC9pc29tcDQvcHJvcGVydGllcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBkb2NzOiBmaXggIlN5bWJvbCBuYW1lIG5vdCBmb3VuZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbW1lbnQgYmxvY2siCi0JICBBZGQgc3ltYm9scyBvciBjaGFuZ2UgY29tbWVudCBpbnRvIGEgcmVndWxhciBjb21tZW50LgotCi0yMDE1LTA3LTA3IDE2OjU4OjUzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmg6Ci0JICBkb2NzOiByZW1vdmUgb3V0ZGF0ZWQgZG9jIHN0cmluZ3MKLQotMjAxNS0wNy0wMyAyMzoxMDo0MCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICBkb2NzOiBhZGQgbWlzc2luZyBwbHVnaW5zIGFuZCBlbnN1cmUgbWFzdGVyIGRvYyBpcyBzb3J0ZWQKLQotMjAxNS0wNy0wNyAxNTo1NDo0MSArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBSZXZlcnQgImltYWdlZnJlZXplOiBSZW1vdmUgaW1wb3NzaWJsZSBlcnJvciBjb25kaXRpb24iCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGQ0NjYzMWM1YzczMTJhZDYxMzM5N2Y4MjM4YzdhOTcxNGFlM2FlOTQuCi0JICBwYWQgb25seSBoYW5kbGUgRU9TIGV2ZW50cyBidXQgbm90IEVPUyBmbG93LCBhbmQgd2lsbCBwdXNoIHRoZSBidWZmZXIgYWdhaW4KLQkgIHJlc3VsdGluZyBpbiBhbiBhc3NlcnRpb24gZXJyb3IuIFNvIHdlIHNob3VsZCBub3QgaGFuZGxlIHRoZSBidWZmZXIKLQkgIGFuZCByZXR1cm4gRU9TIGZsb3cuCi0KLTIwMTUtMDctMDcgMTU6NTA6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JICBydHBnNzI5ZGVwYXk6IHVubWFwIHJ0cCBidWZmZXIgaW4gZXJyb3IgcGF0aAotCi0yMDE1LTA3LTA3IDE1OjQ4OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkgIHJ0cGc3MjlwYXk6IGZpeCBidWZmZXIgbGVhawotCSAgVGhlIGhhbmRsZV9idWZmZXIgdmZ1bmMgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBpbnB1dCBidWZmZXIuCi0JICBGaXhlcyBlbGVtZW50cy9ydHAtcGF5bG9hZGluZyB1bmRlciB2YWxncmluZC4KLQotMjAxNS0wNy0wMiAwODo1Mjo0MyArMDIwMCAgVG9iaWFzIE11ZWxsZXIgPG11ZWxsaUBjcnlwdG9iaXRjaC5kZT4KLQotCSogZ3N0L2dvb20vZ29vbV9jb3JlLmM6Ci0JICBnb29tOiBJbml0aWFsaXNlZCB2YXJpYWJsZXMgdG8gcmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmdzCi0JICBnb29tX2NvcmUuYzogSW4gZnVuY3Rpb24gJ2dvb21fdXBkYXRlJzoKLQkgIGdvb21fY29yZS5jOjY4NTo1OiBlcnJvcjogJ3BhcmFtMicgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCi0JICBnb29tX2xpbmVzX3N3aXRjaF90byAoZ29vbUluZm8tPmdtbGluZTIsIG1vZGUsIHBhcmFtMiwgYW1wbGl0dWRlLCBjb3VsZXVyKTsKLQkgIF4KLQkgIGdvb21fY29yZS5jOjY4NDo1OiBlcnJvcjogJ3BhcmFtMScgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uIFstV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWRdCi0JICBnb29tX2xpbmVzX3N3aXRjaF90byAoZ29vbUluZm8tPmdtbGluZTEsIG1vZGUsIHBhcmFtMSwgYW1wbGl0dWRlLCBjb3VsZXVyKTsKLQkgIF4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTIwNTMKLQotMjAxNS0wNy0wNyAwOToxODozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYxcGF5LmM6Ci0JICBydHBoMjYxcGF5OiBmaXggaW5kZW50YXRpb24KLQotMjAxNS0wNy0wNiAxOToxMTowMCArMDkwMCAgSmltbXkgT2huIDx5b25namluLm9obkBsZ2UuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYzoKLQkgIHJ0cGgyNjFwYXk6IEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIGVycm9yCi0JICBlbmRwb3MgdmFyaWFibGUgZG9lcyBub3QgY29ycmVjdGx5IHVuZGVyc3RhbmQgaW4gdGhlCi0JICA0LjYuMyBHQ0MgdmVyc2lvbi4gU28gY29tcGlsZSBlcnJvciBhcHBlYXJzIHdoZW4gd2UgZG8KLQkgIGNvbXBpbGUgcnRwaDI2MXBheSB1c2luZyBqaGJ1aWxkLgotCSAgVGhpcyBwYXRjaCBpcyBmaXhlZCB0aGUgY29tcGlsZSBlcnJvciBpbiA0LjYuMyBHQ0MgdmVyc2lvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE5ODUKLQotMjAxNC0xMS0xMiAxMjowODo1OCArMDEwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8anN0ZWZmZW5zQG1ha2UudHY+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBIYW5kbGUgc2VlayBmbGFncyBwcm9wZXJseQotCSAgQWxsb3dzIGZvciBub24ta2V5ZnJhbWUgc2Vla3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NTcwCi0KLTIwMTUtMDItMjQgMTA6NTA6NTIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhdm9pZCBsb29waW5nIHJlYWRpbmcgdGhlICdtb29mJyBhdG9tIGZvcmV2ZXIKLQkgIEl0IGdldHMgc3R1Y2sgaWYgaXQgb25seSBmaW5kcyBhIG1vb2YgYW5kIG5vIG1mcmEvbWZybyBvciBtb292Ci0JICBhdG9tcy4gU2tpcCB0aGUgbW9vZiB0byBjb250aW51ZSB0aGUgcGFyc2luZyB0byBoYXZlIGl0IGVpdGhlcgotCSAgcGxheSBvciBlcnJvciBvdXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MDg5Ci0KLTIwMTUtMDYtMjYgMTM6MjQ6MTcgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IGltcHJvdmUgZXJyb3IgaGFuZGxpbmcKLQkgIGZvciBmaWxlcyB3aGljaCBoYXZlIGNvcnJ1cHRlZCBoZWFkZXIsIGxpYmZsYWMgaXMgbm90IGFibGUgdG8KLQkgIHByb2Nlc3MgdGhlIG1ldGFkYXRhIHByb3Blcmx5LiBXZSBqdXN0IHRyeSB0byBpZ25vcmUgdGhlIGVycm9yCi0JICBhbmQgY29udGludWUgd2l0aCB0aGUgcHJvY2Vzc2luZywgc2luY2UgbWV0YWRhdGEgcGFyc2luZyBpcyBub3QKLQkgIG1ha2luZyBtdWNoIG9mIGEgZGlmZmVyZW5jZSB0byBsaWJmbGFjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMzM0Ci0KLTIwMTUtMDctMDYgMjA6MTY6MzggKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkgIHhpbWFnZXNyYzogYWRkIG1ldGEgdHJhbnNmb3JtIGZ1bmN0aW9uCi0JICB4aW1hZ2UgbWV0YWRhdGEgY2FuJ3QgYmUgdHJhbnNmb3JtZWQgb3IgY29waWVkLCBidXQgcHJvdmlkZSBhbiBlbXB0eQotCSAgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gaW5zdGVhZCBvZiBOVUxMIHRvIGFsbG93IHVuY29uZGl0aW9uYWwgY2FsbGluZwotCSAgb2YgbWV0YXMnIHRyYW5zZm9ybSBmdW5jdGlvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNzc4Ci0KLTIwMTQtMDYtMTYgMTY6MTQ6MjggKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW4uc2VsbmVzQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JICBydHBoMjYzcGRlcGF5OiBpbml0IGRlYnVnIGNhdGVnb3J5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMDEyCi0KLTIwMTQtMDYtMjAgMTA6NTk6MTQgKzAyMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmM6Ci0JICBydHB2OGRlcGF5OiBpZ25vcmUgcmVzZXJ2ZWQgYml0IGluIHBheWxvYWQgZGVzY3JpcHRvcgotCSAgRHJhZnQgMTYgb2YgIlJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgVlA4IiBzdGF0ZXMgaW4gc2VjdGlvbiA0LjIgdGhhdDoKLQkgIFI6IEJpdCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gIE1VU1QgYmUgc2V0IHRvIHplcm8gYW5kIE1VU1QgYmUKLQkgIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTkyOQotCi0yMDE1LTA3LTA0IDIwOjU2OjQyICswMjAwICBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2MWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYzoKLQkgIHJ0cGgyNjFwYXk6IHJ0cGgyNjFkZXBheTogQWRkIGRvY3VtZW50YXRpb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE5ODIKLQotMjAxNS0wNy0wMyAyMTo1ODoxNCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGY3NGIyZGYgdG8gOWFlZDFkNwotCi0yMDE1LTA3LTAzIDE0OjI5OjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYzoKLQkgIHJ0cGgyNjFwYXk6IEZpeCBjb21waWxlciB3YXJuaW5nCi0JICBnc3RydHBoMjYxcGF5LmM6IEluIGZ1bmN0aW9uICdnc3RfcnRwX2gyNjFfcGF5X2NsYXNzX2luaXQnOgotCSAgZ3N0cnRwaDI2MXBheS5jOjEwMDM6MTc6IGVycm9yOiB2YXJpYWJsZSAnZ29iamVjdF9jbGFzcycgc2V0IGJ1dCBub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZV0KLQkgIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotMjAxNS0wNy0wMyAxNDowMzowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYxZGVwYXkuYzoKLQkgIHJ0cGgyNjFkZXBheTogTGV0IHRoZSBiYXNlIGNsYXNzIHB1c2ggdGhlIGJ1ZmZlciBzbyBpdCBjYW4gZGVhbCB3aXRoIHRoZSBmbG93IHJldHVybgotCi0yMDE1LTA3LTAzIDE0OjExOjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYzoKLQkgIHJ0cGgyNjFwYXk6IFJlbW92ZSB1bnVzZWQgYWRhcHRlcgotCi0yMDE1LTA3LTAzIDEzOjE3OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JICBzcGVleHBheTogRGlyZWN0bHkgYXR0YWNoIHBheWxvYWQgdG8gdGhlIG91dHB1dCBidWZmZXIgaW5zdGVhZCBvZiBjb3B5aW5nIGl0Ci0KLTIwMTUtMDctMDMgMTM6MDc6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JICBzYmNwYXk6IEF0dGFjaCBwYXlsb2FkIGRpcmVjdGx5IHRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiBjb3B5aW5nCi0KLTIwMTQtMTItMDEgMTQ6MTg6NDAgKzAxMDAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2MWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYxcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjFwYXkuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICBydHA6IGFkZCBILjI2MSBSVFAgcGF5bG9hZGVyIGFuZCBkZXBheWxvYWRlcgotCSAgSW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIFJGQyA0NTg3LgotCSAgUGF5bG9hZGVyIGNyZWF0ZSBmcmFnbWVudHMgb24gTUIgYm91bmRhcmllcyBpbiBvcmRlciB0byBtYXRjaCBNVFUgc2l6ZQotCSAgdGhlIGJlc3QgaXQgY2FuLiBTb21lIGRlY29kZXJzL2RlcGF5bG9hZGVycyBpbiB0aGUgd2lsZCBhcmUgdmVyeSBzdHJpY3QKLQkgIGFib3V0IHJlY2VpdmluZyBhIGNvbnRpbnVvdXMgYml0LXN0cmVhbSAoZS5nLiBubyBuby1vcCBiaXRzIGJldHdlZW4KLQkgIGZyYW1lcyksIHNvIHRoZSBwYXlsb2FkZXIgd2lsbCBzaGlmdCB0aGUgY29tcHJlc3NlZCBiaXQtc3RyZWFtIG9mIGEKLQkgIGZyYW1lIHRvIGFsaWduIHdpdGggdGhlIGxhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSBwcmV2aW91cyBmcmFtZS4KLQkgIERlcGF5bG9hZGVyIGRvZXMgbm90IHRyeSB0byBiZSBmYW5jeSBpbiBjYXNlIG9mIHBhY2tldCBsb3NzLiBJdCBzaW1wbHkKLQkgIGRyb3BzIGFsbCBwYWNrZXRzIGZvciBhIGZyYW1lIGlmIHRoZXJlIGlzIGEgbG9zcywga2VlcGluZyBpdCBzaW1wbGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxODg2Ci0KLTIwMTUtMDctMDMgMTI6MTg6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkgIHJ0cG1wdmRlcGF5OiBEb24ndCBmb3JnZXQgdG8gdW5tYXAgdGhlIGlucHV0IGJ1ZmZlcgotCi0yMDE1LTA3LTAzIDEyOjE0OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSAgcnRwbXB2cGF5OiBDcmVhdGUgYnVmZmVyIGxpc3RzIGluc3RlYWQgb2YgcHVzaGluZyBlYWNoIGJ1ZmZlciBpbmRpdmlkdWFsbHkKLQotMjAxNS0wNy0wMyAxMjowMzo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgIHJ0cG1wYXBheTogVXNlIGJ1ZmZlciBsaXN0cyBpbnN0ZWFkIG9mIHB1c2hpbmcgZWFjaCBmcmFnbWVudCBpbmRpdmlkdWFsbHkKLQotMjAxNS0wNy0wMyAxMDo1MTo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6Ci0JICBydHBtcDRhcGF5OiBDcmVhdGUgYnVmZmVyIGxpc3RzIGFuZCBkb24ndCBjb3B5IHBheWxvYWQgbWVtb3J5Ci0KLTIwMTUtMDYtMjkgMTY6MTQ6MTggKzAyMDAgIE1pZ3VlbCBQYXLDrXMgRMOtYXogPG1wYXJpc2RpYXpAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogQ29uc2lkZXIgdGltZXJzIGxlbiB0byBjb21wYXJlIHdpdGggUlRQX01BWF9EUk9QT1VUCi0JICBXaGVuIHRoZXJlIGFyZSBhIGxvdCBvZiBzbWFsbCBnYXBzLCB3ZSBjYW4gY29uc2lkZXIgdGhhdCB0aGVyZSBpcwotCSAgYSBiaWcgZ2FwICh0b28gbG9zc2VzKSB0byByZXNldCB0aGUgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTYzNgotCi0yMDE1LTA2LTI5IDE1OjUzOjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBJZiBwb3NzaWJsZSwgYWx3YXlzIHVwZGF0ZSB0aGUgY3VycmVudCB0aW1lIGJlZm9yZSBsb29waW5nIG92ZXIgYWxsIHRpbWVycwotCSAgSWYgd2UgaGF2ZSBhIGNsb2NrLCB1cGRhdGUgIm5vdyIgbm93IHdpdGggdGhlIHZlcnkgbGF0ZXN0IHJ1bm5pbmcgdGltZSB3ZSBoYXZlLgotCSAgSWYgdGltZXJzIGFyZSB1bnNjaGVkdWxlZCBiZWxvdyB3ZSBvdGhlcndpc2Ugd291bGRuJ3QgdXBkYXRlIG5vdyAoaXQncyBvbmx5IHVwZGF0ZWQKLQkgIHdoZW4gdGltZXJzIGV4cGlyZSksIGFuZCBhbHNvIGZvciB0aGUgdmVyeSBmaXJzdCBsb29wIGl0ZXJhdGlvbiBub3cgd291bGQgb3RoZXJ3aXNlCi0JICBhbHdheXMgYmUgMC4KLQkgIEFsc28gdGhlIHRpbWUgaXMgdXNlZCBmb3IgdGhlIHRpbWVvdXQgZnVuY3Rpb25zLCBlLmcuIHRvIGNhbGN1bGF0ZSBhbnkgdGltZXMKLQkgIGZvciB0aGUgbmV4dCB0aW1lb3V0cyBhbmQgd2Ugd291bGQgb3RoZXJ3aXNlIHBhc3MgdG9vIG9sZCB0aW1lcyB0aGVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTE2MzYKLQotMjAxNS0wNy0wMiAxNDozNDo1NyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogZml4IG1lbW9yeSBsZWFrCi0JICB0bXAgbmVlZHMgdG8gYmUgZnJlZWQgYmVmb3JlIGdvaW5nIG91dCBvZiBzY29wZSBpbiAnZG9uZScuCi0JICBDSUQgIzEzMDg5NTQKLQotMjAxNS0wNy0wMiAxMjoyMzo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSAgcnRwaDI2M3BwYXk6IEdlbmVyYXRlIGJ1ZmZlciBsaXN0cyBhbmQgYXR0YWNoIHRoZSBwYXlsb2FkIGRpcmVjdGx5IGluc3RlYWQgb2YgY29weWluZyBpdAotCi0yMDE1LTA3LTAyIDA5OjQ4OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkgIHJ0cGgyNjNwZGVwYXk6IFNpbXBsaWZ5IGNvZGUgYSBiaXQgYW5kIGRvIGxlc3MgZGlyZWN0IG1lbWNweSBhbmQgbGV0IEdzdEJ1ZmZlciBkbyB0aGF0IGZvciB1cwotCi0yMDE1LTA3LTAyIDA5OjE3OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgcnRwaDI2M3BheTogU3RvcCB1c2luZyBhbiBhZGFwdGVyIGFuZCBkaXJlY3RseSB1c2UgdGhlIGJ1ZmZlcgotCSAgV2UgYWx3YXlzIHB1c2hlZCBvbmUgYnVmZmVyIGludG8gdGhlIGFkYXB0ZXIsIHRoZW4gaGFuZGxlZCBleGFjdGx5IHRoYXQgb25lCi0JICBidWZmZXIgYW5kIGZsdXNoZWQgaXQgZnJvbSB0aGUgYWRhcHRlci4gTm93IGFsc28gZG9uJ3QgbWVtY3B5KCkgdGhlIGFjdHVhbAotCSAgcGF5bG9hZCBidXQganVzdCBhdHRhY2ggdGhlIGlucHV0IGJ1ZmZlcidzIGRhdGEgdG8gdGhlIG91dHB1dCBidWZmZXIuCi0JICBUaGlzIGNvZGUgc3RpbGwgbmVlZHMgc29tZSBzZXJpb3VzIHJlZmFjdG9yaW5nL3Jld3JpdGluZy4KLQotMjAxNS0wNy0wMSAyMTo1NzoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkgIHJ0cGdzbXBheTogUmVtb3ZlIG5vbi1leGlzdGluZyBpbmNsdWRlcyBmb3Igbm93Ci0JICBnaXQgYWRkIC1wIG1pc3Rha2UuCi0KLTIwMTUtMDctMDEgMTk6Mjk6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBydHBnc3RwYXk6IFVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGdzdF9idWZmZXJfYXBwZW5kKCkKLQotMjAxNS0wNy0wMSAxOToxOToxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkgIHJ0cGdzbXBheTogQXR0YWNoIHBheWxvYWQgdG8gdGhlIG91dHB1dCBidWZmZXIgaW5zdGVhZCBvZiBjb3B5aW5nIGl0Ci0KLTIwMTUtMDctMDEgMTc6NTg6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSAgcnRwZzcyOXBheTogQXR0YWNoIHBheWxvYWQgZGlyZWN0bHkgdG8gb3V0cHV0IGJ1ZmZlcnMgaW5zdGVhZCBvZiBjb3B5aW5nCi0KLTIwMTUtMDctMDEgMTc6NDM6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM3BheS5jOgotCSAgcnRwZzcyM3BheTogQXR0YWNoIHBheWxvYWQgYnVmZmVyIHRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiBjb3B5aW5nCi0KLTIwMTUtMDctMDEgMTc6MzA6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jOgotCSAgcnRwZHZkZXBheTogTWFwIHRoZSBvdXRwdXQgYnVmZmVyIG9uY2UgaW5zdGVhZCBvZiBvbmNlIGV2ZXJ5IDgwIGJ5dGVzCi0KLTIwMTUtMDctMDEgMjE6NDY6NDYgKzA5MDAgIEppbW15IE9obiA8eW9uZ2ppbi5vaG5AbGdlLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCByZXR1cm4gdHlwZSBvZiBpbmRleF9lbnRyeV9vZmZzZXRfc2VhcmNoKCkKLQkgIEl0J3MgYSBjb21wYXJlIGZ1bmN0aW9uIGFuZCBtYXkgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUsCi0JICBzbyBzaG91bGQgZm9yIGNvcnJlY3RuZXNzIGFuZCBjb25zaXN0ZW5jeSByZXR1cm4gYSBzaWduZWQKLQkgIGludGVnZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNzgwCi0KLTIwMTUtMDctMDEgMTQ6MTI6NTcgKzAyMDAgIE1pZ3VlbCBQYXLDrXMgRMOtYXogPG1wYXJpc2RpYXpAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVmYWN0b3IgaGFuZGxlX25leHRfYnVmZmVyCi0JICBUaGUgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIG1ha2luZyBoYW5kbGVfbmV4dF9idWZmZXIgZnVuY3Rpb24KLQkgIG1vcmUgcmVhZGFibGUgYXZvaWRpbmcgdW5uZWNlc2FyeSBnb3RvcyBhbmQgYWRkaW5nIG90aGVyCi0JICBjb3NtZXRpYyBjaGFuZ2VzLgotCi0yMDE1LTA3LTAxIDE1OjQwOjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFjM3BheS5jOgotCSAgcnRwYWMzcGF5OiBBdHRhY2ggdGhlIHBheWxvYWQgdG8gdGhlIG91dHB1dCBidWZmZXIgaW5zdGVhZCBvZiBjb3B5aW5nIGl0Ci0JICBNaWdodCBhbHNvIHdhbnQgdG8gcHJvZHVjZSBidWZmZXIgbGlzdHMgaGVyZSBpZiBuZWVkZWQuCi0KLTIwMTUtMDctMDEgMTU6Mzg6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkgIHJ0cDogRml4IGluZGVudGlvbgotCi0yMDE1LTA3LTAxIDEyOjM3OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVZQOC1PUFVTLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1WVFMtVlA4LUFUUy1PUFVTLnNoOgotCSAgcnRwOiBBZGQgZXhhbXBsZXMgd2l0aCBWVFMvQVRTIGZvciBWUDgvT1BVUwotCSAgTGV0J3MgaGF2ZSBhbiBleGFtcGxlIHdpdGggbW9kZXJuIGNvZGVjcy4KLQotMjAxNS0wNi0zMCAxODoxMTozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBVc2UgR1NUX1dBUk5JTkdfT0JKRUNUKCkgaW5zdGVhZCBvZiBHU1RfV0FSTklORygpCi0KLTIwMTUtMDYtMzAgMTQ6MDY6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkgIHZwOGRlcGF5OiBEb24ndCBsb2NrL21hcCBldmVyeSBub24ta2V5ZnJhbWUgYnVmZmVyIHR3aWNlCi0JICBKdXN0IGNvcHkgdGhlIGNvbXBsZXRlIGhlYWRlciBpbnN0ZWFkIG9mIGZpcnN0IGxvb2tpbmcgYXQgdGhlIGZpcnN0IGJ5dGUKLQkgIGFuZCB0aGVuIGF0IHRoZSByZW1haW5pbmcgMTAgYnl0ZXMuCi0KLTIwMTUtMDYtMjkgMTY6MDU6NDQgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGRvY3VtZW50IGZhbGx0aHJvdWdoIGNhc2VzCi0JICBQYWNpZnkgY292ZXJpdHkgYW5kIGRvY3VtZW50IGZhbGx0aHJvdWdoIGNhc2VzIGluIHN3aXRjaCBzdGF0ZW1lbnRzLgotCSAgQ0lEICMxMzA4OTQ4LCAjMTMwODk0NywgIzEzMDg5NDYKLQotMjAxNS0wNi0yOSAxMDozNjo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBSZXZlcnQgInJ0cGppdHRlcmJ1ZmZlcjogSWYgd2UgaGF2ZSBhbiBpbW1lZGlhdGUgdGltZW91dCwgZG9uJ3QgdHJ5IHRvIGZpbmQgYW4gZWFybGllciB0aW1lb3V0IgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAwYzIxY2Q3MTc3ZWE4ODNjNzEwOTk5MTQ3ZGRjZWRiMTkwMDRkMTgyLgotCSAgSWYgd2UgaGF2ZSBtdWx0aXBsZSBpbW1lZGlhdGUgdGltZXJzLCB3ZSB3YW50IHRvIGZpcnN0IGhhbmRsZSB0aGUgb25lIHdpdGggdGhlCi0JICBsb3dlc3Qgc2VxdWVuY2UgbnVtYmVyLi4uIHdoaWNoIHdvdWxkIGJlIGJyb2tlbiBub3cuCi0JICBJbnN0ZWFkIG9mIHRoaXMgd2Ugc2hvdWxkIGp1c3QgdXNlIGEgR1NlcXVlbmNlIGZvciB0aGUgdGltZXJzLCBhbmQgaGF2ZSB0aGVtCi0JICBzb3J0ZWQgZmlyc3QgYnkgdGltZXN0YW1wLCBhbmQgZm9yIGVxdWFsIHRpbWVzdGFtcHMgYnkgc2VxdWVuY2UgbnVtYmVyLiBUaGVuCi0JICB3ZSB3b3VsZCBhbHdheXMgb25seSBoYXZlIHRvIHRha2UgdGhlIHZlcnkgZmlyc3QgdGltZXIgZnJvbSB0aGUgbGlzdCBhbmQgbmV2ZXIKLQkgIGhhdmUgdG8gbG9vayBhdCBhbnkgb3RoZXJzLgotCi0yMDE1LTA2LTI5IDEwOjE0OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogSWYgd2UgaGF2ZSBhbiBpbW1lZGlhdGUgdGltZW91dCwgZG9uJ3QgdHJ5IHRvIGZpbmQgYW4gZWFybGllciB0aW1lb3V0Ci0JICBJZiB3ZSBoYXZlIGxvdHMgb2Ygc3VjaCBpbW1lZGlhdGUgdGltZW91dHMsIHdlIHdvdWxkIG90aGVyd2lzZSBoYXZlIHF1YWRyYXRpYwotCSAgcnVudGltZSBpbiB0aGUgbnVtYmVyIG9mIHRpbWVvdXRzLgotCi0yMDE1LTA2LTE5IDE4OjAxOjAzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzcmMuYzoKLQkgIHNwbGl0bXV4c3JjOiBzdGlja3kgZXZlbnRzIGFyZSBzZW50IGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGFkCi0JICBObyBuZWVkIHRvIHNlbmQgdGhlbSBleHBsaWNpdGx5IGZyb20gdGhlIGVsZW1lbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEyNDAKLQotMjAxNS0wNi0xOSAxODowMDo0MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmM6Ci0JICBzcGxpdG11eHNyYzogbWFrZSBzdXJlIHRvIHB1c2ggc3RpY2t5IGV2ZW50cyBiZWZvcmUgYWRkaW5nIHBhZAotCSAgSXQgYWxsb3dzIHRoZSBjYXBzIHRvIGJlIHNldCBvbiB0aGUgcGFkIGJlZm9yZSBiZWluZyBhZGRlZCBmb3IKLQkgIGR5bmFtaWMgYXV0b3BsdWdnaW5nIHRvIHdvcmsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMjQwCi0KLTIwMTUtMDYtMjYgMDA6MDU6MjkgKzA5MDAgIEh5dW5qdW4gS28gPHp6b29uLmtvQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBBZGQgbmV3IG50cC10aW1lLXNvdXJjZSBwcm9wZXJ0eSBhbmQgZGVwcmVjYXRlIHVzZS1waXBlbGluZS1jbG9jayBwcm9wZXJ0eQotCSAgRW5hYmxlIHRvIHVzZSBuZXcgbnRwLXRpbWUtc291cmNlIHByb3BlcnR5IG9mIHJ0cGJpbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTQ5NgotCi0yMDE1LTA2LTI1IDIzOjE5OjU4ICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBiaW4vc2Vzc2lvbjogZml4IGRlc2NyaXB0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxNDk2Ci0KLTIwMTUtMDYtMjUgMTA6NTc6MjUgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYzoKLQkgIGRvY3M6IGRlY29kZWJpbjIgLT4gZGVjb2RlYmluCi0KLTIwMTUtMDYtMjUgMTA6NDc6MDYgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHVwZGF0ZSBleGFtcGxlIHBpcGVsaW5lCi0JICBVcGRhdGUgcmVmZXJlbmNlIHRvIGRlY29kZWJpbjIgdG8gZGVjb2RlYmluCi0KLTIwMTUtMDYtMjUgMTA6NDU6MzUgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNiZ0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCi0JICBWYWx1ZXMgaW4gZmllbGRzX3JlcXVpcmVkIGFuZCBzYW1lX2J1ZmZlciBhcmUgb3ZlcndyaXR0ZW4gYmVmb3JlIHVzZWQuIFJlbW92aW5nCi0JICBhc3NpZ25tZW50Ci0KLTIwMTUtMDYtMjUgMTA6MDY6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9taWttb2QvTWFrZWZpbGUuYW06Ci0JKiBleHQvbWlrbW9kL1JFQURNRToKLQkqIGV4dC9taWttb2QvZHJ2X2dzdC5jOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzoKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmg6Ci0JKiBleHQvbWlrbW9kL21pa21vZF9yZWFkZXIuYzoKLQkqIGV4dC9taWttb2QvbWlrbW9kX3R5cGVzLmM6Ci0JKiBleHQvbWlrbW9kL21pa21vZF90eXBlcy5oOgotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9saWJtaWttb2QubTQ6Ci0JKiB3aW4zMi9NQU5JRkVTVDoKLQkqIHdpbjMyL3ZzOC9saWJnc3RtaWttb2QudmNwcm9qOgotCSAgbWlrbW9kOiByZW1vdmUgYW5jaWVudCB1bnBvcnRlZCBwbHVnaW4KLQkgIFRoaXMgaGFzbid0IGJlZW4gdG91Y2hlZCBpbiAxMSB5ZWFycywgYW5kCi0JICBjbGVhcmx5IG5vIG9uZSdzIGJlZW4gbWlzc2luZyBpdC4KLQotMjAxNS0wNi0yMyAyMDoxNToxMyArMDkwMCAgR2lsYm9rIExlZSA8Z2lsYm9rLmxlZUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkb2VzIG5vdCBkZXRlY3Qgb3JpZW50YXRpb24KLQkgIE1vc3QgZmlsZXMgZG9uJ3QgY29udGFpbiB0aGUgdmFsdWVzIGZvciB0cmFuc3Bvc2luZyB0aGUgY29vcmRpbmF0ZXMKLQkgIGJhY2sgdG8gdGhlIHBvc2l0aXZlIHF1YWRyYW50IHNvIHF0ZGVtdXggd2FzIGlnbm9yaW5nIHRoZSByb3RhdGlvbgotCSAgdGFnLiBUbyBiZSBhYmxlIHRvIHByb3Blcmx5IGhhbmRsZSB0aG9zZSBmaWxlcyBxdGRlbXV4IHdpbGwgYWxzbyBpZ25vcmUKLQkgIHRoZSB0cmFuc3Bvc2luZyB2YWx1ZXMgdG8gb25seSBkZXRlY3QgdGhlIHJvdGF0aW9uIHVzaW5nIHRoZSB2YWx1ZXMKLQkgIGFiZGUgZnJvbSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4OgotCSAgW2EgYiBjXQotCSAgW2QgZSBmXQotCSAgW2cgaCBpXQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODY4MQotCi0yMDE1LTA2LTI1IDAwOjA0OjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuNS4yID09PQotCi0yMDE1LTA2LTI0IDIzOjMwOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjUuMgotCi0yMDE1LTA2LTI0IDIyOjU2OjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE1LTA2LTI0IDExOjE1OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9ubC5wbzoKLQkgIHBvOiBVcGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTUtMDYtMjMgMTg6NDI6NTkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkgIHF0bXV4OiBDb3JyZWN0bHkgdGVzdCBlYWNoIHNlZ21lbnRzCi0JICBJbiBwcmVzZW5jZSBvZiBnYXBzLCBxdGRlbXV4IHdpbGwgZW1pdCBtdWx0aXBsZSBzZWdtZW50cy4gVGhlCi0JICBzZWNvbmQgc2VnbWVudCBzdGFydCBzaG91bGQgbWF0Y2ggdGhlIENUVFMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMzYxCi0KLTIwMTUtMDYtMjMgMTc6NTQ6MzEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IENvcnJlY3RseSBjYWxjdWxhdGUgdGhlIGVsc3QgbWVkaWEgc3RhcnQKLQkgIFRoZSBtZWRpYSBzdGFydCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBzaGlmdCB3ZSBoYXZlIGFwcGxpZWQKLQkgIGJ1dCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgUFRTLiBUaGlzIGlzIGRlZmluZWQgYXM6Ci0JICBEdCgwKSA9IDAKLQkgIEN0KDApID0gRHQoMCkgKyBDVFRTKDApCi0JICBTbyB0aGUgbWVkaWEgc3RhcnQgaXMgYWx3YXlzIHRoZSBmaXJzdCBDVFRTLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTM2MQotCi0yMDE1LTA2LTIzIDExOjQ5OjMyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWNjdW11bGF0ZSBwcmV2aW91cyBlZHRzIGVudHJpZXMgaW50byBzZWdtZW50LmJhc2UKLQkgIEFsbG93cyBwbGF5aW5nIGVkdHMgZWRpdHRlZCBmaWxlcyB3aXRoIHByb3BlciBzeW5jaHJvbml6YXRpb24gb2YKLQkgIHN0cmVhbXMuIFRoaXMgcGF0Y2ggZml4ZXMgdGhlIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieQotCSAgYmY5NWY5M2MwMTg5YWEwNGYxOGUyNjRiODZiNjUyN2U0MzFjNWQ1MyB0aGF0IHdhcyBhZGRlZCB0byBmaXgKLQkgIHNlZ21lbnQgc2Vla3MgaGFuZGxpbmcuCi0JICBIYXZpbmcgdGhlIGFjY3VtdWxhdGVkX2Jhc2Ugc2VwYXJhdGVkIGZyb20gdGhlIG1haW4gc2VnbWVudC5iYXNlCi0JICBhbGxvd3MgaGFuZGxpbmcgYm90aCBzZWdtZW50IHNlZWtzIGFuZCBlZHRzIGVkaXR0ZWQgZmlsZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMzYxCi0KLTIwMTUtMDYtMjMgMDA6NTY6MTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBpbXByb3ZlIHNvbWUgZGVidWcgbWVzc2FnZXMKLQkgIFRob3NlIG1lc3NhZ2VzIGFyZSBhYm91dCB0aGUgc3RyZWFtLCB1c2UgdGhlIHBhZCBhcyB0aGUKLQkgIGRlYnVnIG9iamVjdCB0byBtYWtlIGl0IGNsZWFyIGZyb20gdGhlIGxvZ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzNjEKLQotMjAxNS0wNi0yMiAyMjoyMjowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogc3RvcmUgbGFzdF9kdHMgb2YgdGhlIGZpcnN0IGJ1ZmZlcgotCSAgQnVmZmVycyBuZWVkIG5vdCB0byBzdGFydCBhdCBydW5uaW5nLXRpbWUgMCBzbyB0aGUgbGFzdF9kdHMgbmVlZHMKLQkgIHRvIGJlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgYnVmZmVyJ3MgZHRzIGFzIGl0IGlzIHVzZWQgdG8gY29tcHV0ZQotCSAgdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXJzLiBJZiBpdCB3YXMgbGVmdCBhdCAwIHRoZSBmaXJzdCBidWZmZXIKLQkgIHdvdWxkIGhhdmUgYSBsYXJnZXIgZHVyYXRpb24gd2hlbiBpdCBzaG91bGRuJ3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzNjEKLQotMjAxNS0wNi0yMyAxNzoxMTo1NyArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZml4IHBvc3NpYmxlIG1lbW9yeSBsZWFrCi0JICB3aGVuIGJ1ZmZlciBpcyBzdG9yZWQgdG8gc2Vla3RhYmxlLCBhbmQgc3RvcCBnZXRzIGNhbGxlZCBkdWUgdG8KLQkgIGNvcnJ1cHQgZmxhYyBmaWxlLCB0aGVuIHRoZSBzZWVrdGFibGUgaXMgbm90IGJlaW5nIHJlbGVhc2VkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMzY0Ci0KLTIwMTUtMDYtMjMgMTY6Mjg6NDAgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuaDoKLQkgIFJldmVydCAic3BsaXRtdXhzaW5rOiBNYXNrIGFzeW5jLXN0YXJ0L2RvbmUgd2hpbGUgc3dpdGNoaW5nIGZpbGVzLiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDYxZTUzOTNmMTEwZWQ0ODI4MTVkNzc4MDcyNDVkNzhiNTJlZmY0Ni4KLQkgIENhdXNlcyBmYWlsdXJlcyBtdXhpbmcgbGFyZ2VyIEdPUCBzaXplcyBmb3Igc29tZSByZWFzb24uIFJldmVydGluZwotCSAgd2hpbGUgSSBmaWd1cmUgaXQgb3V0Ci0KLTIwMTUtMDYtMTggMjM6MjI6MDYgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXhzcmM6IEZpeCBzdGFydHVwIGFuZCBzaHV0ZG93biByYWNlcy4KLQkgIEZpeCAyIHN0YXJ0dXAgcmFjZXMgd2hlbiB0aGluZ3MgaGFwcGVuIHRvbyBxdWlja2x5LCBhbmQgMQotCSAgYXQgc2h1dGRvd24gYnkgaG9sZGluZyBhIHJlZiB0byB0aGUgcGFkcyBpbiB1c2UgdW50aWwgdGhlCi0JICBsb29wIGZ1bmN0aW9ucyBleGl0LgotCSAgSGFuZGxlIGVycm9ycyBhY3RpdmF0aW5nIGZpbGUgcGFydHMgYW5kIHB1Ymxpc2ggdGhlbSBvbgotCSAgdGhlIGJ1cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA3NDcKLQotMjAxNS0wNi0xOCAwOToyNjoxMyArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5oOgotCSAgc3BsaXRtdXhzaW5rOiBNYXNrIGFzeW5jLXN0YXJ0L2RvbmUgd2hpbGUgc3dpdGNoaW5nIGZpbGVzLgotCSAgU29tZXRpbWVzLCBleHRyYSBhc3luYy1zdGFydC9kb25lIGZyb20gdGhlIGludGVybmFsIHNpbmsKLQkgIHdoaWxlIHRoZSBlbGVtZW50IGlzIHN0aWxsIHN0YXJ0aW5nIHVwIGNhbiBjYXVzZSBzcGxpdG11eHNpbmsKLQkgIHRvIHN0YWxsIGluIFBBVVNFRCBzdGF0ZSB3aGVuIGl0IGhhcyBiZWVuIHNldCB0byBQTEFZSU5HCi0JICBieSB0aGUgYXBwLiBEcm9wIHRoZSBjaGlsZCdzIGFzeW5jLXN0YXJ0L2RvbmUgbWVzc2FnZXMgd2hpbGUKLQkgIHN3aXRjaGluZywgc28gdGhleSBkb24ndCBjYXVzZSBzdGF0ZSBjaGFuZ2VzIGF0IHRoZQotCSAgc3BsaXRtdXhzaW5rIGxldmVsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDc0NwotCi0yMDE1LTA2LTE1IDE2OjEyOjEwICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYS1kZW11eDogVXNlIGdzdF92aWRlb19tdWx0aXZpZXdfZ3Vlc3NfaGFsZl9hc3BlY3QoKQotCSAgVXNlIHRoZSBnc3RfdmlkZW9fbXVsdGl2aWV3X2d1ZXNzX2hhbGZfYXNwZWN0KCkgdXRpbGl0eSBmdW5jdGlvbgotCSAgdG8gc2V0IHRoZSBoYWxmLWFzcGVjdCBmbGFnIChvciBub3QpIG9uIHN0ZXJlb3Njb3BpYyBmcmFtZS1wYWNrZWQKLQkgIHZpZGVvcy4KLQotMjAxNS0wNi0xNSAxNjoxMDozNyArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogTW92ZSBtdWx0aXZpZXcgY2FwcyBjYWxjdWxhdGlvbnMsIGFkZCBoYWxmLWFzcGVjdCBoZXVyaXN0aWNzCi0JICBNb3ZlIHRoZSBtdWx0aXZpZXcgY2FwcyBjYWxjdWxhdGlvbnMgdG8gdGhlIGNvbmZpZ3VyZV9zdHJlYW0oKQotCSAgZnVuY3Rpb24sIHNvIHRoZSByZXN0IG9mIHRoZSB2aWRlbyBpbmZvIGlzIGF2YWlsYWJsZSwgYW5kCi0JICB1c2UgdGhlIGdzdF92aWRlb19tdWx0aXZpZXdfZ3Vlc3NfaGFsZl9hc3BlY3QoKSBmdW5jdGlvbiB0bwotCSAgZGV0ZXJtaW5lIGlmIHRoZSBoYWxmLWFzcGVjdCBmbGFnIHNob3VsZCBiZSBzZXQgb24gZnJhbWUtcGFja2VkCi0JICB2aWRlby4KLQotMjAxNS0wNi0xOCAxNjowNjowMiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEFkZCBjc2xnIHN1cHBvcnQKLQkgIFRoZSBjc2xnIGF0b20gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgRFRTIHNoaWZ0LiBUaGlzIGlzCi0JICBuZWVkZWQgaW4gcmVjZW50IHZlcnNpb24gb2YgY3R0cyBhdG9tIHdoZXJlIHRoZSBvZmZzZXQgY2FuIGJlCi0JICBuZWdhdGl2ZS4gV2hlbiBjc2xnIGlzIG1pc3NpbmcsIHdlIHBhcnNlIHRoZSBDVFRTIHRhYmxlIGFzIHByb3Bvc2VkCi0JICBpbiB0aGUgc3BlYyB0byBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzLgotCSAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgd2Ugb25seSBuZWVkIHRvIGtub3cgdGhlIHNoaWZ0LiBBcyBHU3RyZWFtZXIKLQkgIGNhbm5vdCB0cmFuc3BvcnQgbmVnYXRpdmUgdGltZXN0YW1wcywgd2Ugc2hpZnQgdGhlIHRpbWVzdGFtcHMgZm9yd2FyZAotCSAgdXNpbmcgdGhhdCB2YWx1ZSBhbmQgYWRhcHQgdGhlIHNlZ21lbnQgdG8gY29tcGVuc2F0ZS4gVGhpcyBwYXRjaCBhbHNvCi0JICByZW1vdmVzIGJvZ3VzIG9mZnNldCBvZiBjdHRzX3NvZmZzZXQsIHRoaXMgb2Zmc2V0IHNoYWxsIGJlIGluY2x1ZGVkCi0JICBpbiB0aGUgZWRpdCBsaXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTEwMwotCi0yMDE1LTA2LTE5IDE4OjM3OjU5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICBxdG11eDogVGVzdCBnYXBzIGF0IHN0YXJ0IG9mIHN0cmVhbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI0MgotCi0yMDE1LTA2LTE5IDE4OjQwOjQzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBVc2UgUFRTIHRvIGZpZ3VyZS1vdXQgcHJlc2VuY2Ugb2YgZ2FwcwotCSAgV2UgbmVlZCB0byBsb29rIGF0IHRoZSBwcmVzZW50YXRpb24gdGltZXN0YW1wIGluIG9yZGVyIHRvIGNvbmNsdWRlIGlmCi0JICB0aGVyZSBpcyBhIGdhcCBhdCB0aGUgc3RhcnQgb2YgYSBzdHJlYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMjQyCi0KLTIwMTUtMDYtMTkgMTY6NDU6MDIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IFNldCBlZGl0IGxpc3QgdG8gY29tcGVuc2F0ZSBEVFMgc2hpZnQKLQkgIFdlIHNoaWZ0IERUUyBmb3J3YXJkIHRvIGF2b2lkIG5lZ2F0aXZlIHRpbWVzdGFtcHMgd2hpY2ggY2Fubm90IGJlCi0JICByZXByZXNlbnRlZCB3aXRoIHZlcnNpb24gMCBvZiB0aGUgQ1RUUyB0YWJsZS4gVG8gc3RpY2sgd2l0aCB0aGF0Ci0JICB2ZXJzaW9uIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSwgdGhlIHNwZWMgcmVjb21tZW5kIHVzaW5nIGFuCi0JICBlZGl0IGxpc3QgZW50cnkgdG8gbW92ZSBiYWNrIHRoZSBwcmVzZW50YXRpb24gdGltZSB0byB3aGVyZSBpdAotCSAgc2hvdWxkIGJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTI0MgotCi0yMDE1LTA2LTIyIDE0OjM1OjUyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogSW5zZXJ0IEFWQyBlbmQgb2Ygc2VxdWVuY2UKLQkgIFRoaXMgRkxWIHNwZWNpZmljIG1hcmsgaXMgbmVlZGVkIHRvIHByZXZlbnQgRmxvdyBQbGF5ZXIgKG1vc3QgbGlrZWx5Ci0JICBhbGwgRmxhc2ggYmFzZSBwbGF5ZXIpIGZyb20gZ29pbmcgaW50byBidWZmZXJpbmcgc3RhdGUgd2hlbiBuZWFyIEVPUy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzMjAKLQotMjAxNS0wNi0yMiAxMzowNToyOSArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkgIG1hdHJvc2thOiByZW1vdmUgdXNlbGVzcyBjaGVjawotCSAgTm8gbmVlZCB0byBjaGVjayBmb3IgY29udGV4dCBhdmFpbGFiaWxpdHkgd2hpbGUgZnJlZWluZy4gV2UgYXJlIGluc2lkZQotCSAgaW5zaWRlIGEgY29kZSBibG9jayB3aXRoIGEgY29uZGl0aW9uIHRoYXQgZGVyZWZlcmVuY2VzIGNvbnRleHQuCi0JICBpZiAoY29udGV4dC0+dHlwZSA9PSAwIC4uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTMwNgotCi0yMDE1LTA2LTIyIDE5OjM1OjU3ICswOTAwICBWaW5lZXRoIFQgTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2x6by5jOgotCSAgbHpvOiBmaXggbWVtb3J5IGxlYWsKLQkgIHRoZSBvcGVuZWQgZmlsZSBpcyBub3QgYmVpbmcgY2xvc2VkIGR1cmluZyB0ZXN0LCB3aGljaCB3aWxsIHJlc3VsdAotCSAgaW4gbWVtb3J5IGxlYWsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUxMzA2Ci0KLTIwMTUtMDYtMjIgMTk6MzA6NTggKzA5MDAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvbWlrbW9kL21pa21vZF9yZWFkZXIuYzoKLQkgIG1pa21vZF9yZWFkZXI6IFBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZToKLQkgIGdzdF9yZWFkZXIgdmFyaWFibGUgaXMgYmVpbmcgdXNlZCBiZWZvcmUgYWN0dWFsbHkgY2hlY2tpbmcgaWYgaXQKLQkgIGFsbG9jYXRlZCBwcm9wZXJseQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTMwNgotCi0yMDE1LTA2LTIyIDE5OjQ1OjE0ICswOTAwICBTYW5na3l1IFBhcmsgPHNrMTEyMi5wYXJrQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBNaW5vciBjbGVhbi11cAotCSAgMS4gRml4IHRoZSBjb2RlIHdoaWNoIGlzIHdyb25nIGNvZGluZyBzdHlsZS4KLQkgIDIuIEZpeCBhIHR5cGluZyBlcnJvciBvZiBjb21tZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTMxNgotCi0yMDE1LTA2LTIyIDExOjI4OjEzICswMjAwICBKb3NlIEFudG9uaW8gU2FudG9zIENhZGVuYXMgPHNhbnRvc2NhZGVuYXNAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogRG8gbm90IHRyeSB0byBwdXNoIE5VTEwgYnVmZmVycwotCSAgSWYgdXBkYXRlX3JlY2VpdmVyX3N0YXRzKCkgZmFpbHMsIHdlIGNhbid0IHJlYWxseSBkbyBhbnl0aGluZyB3aXRoIHRoaXMgYnVmZmVyCi0JICBhbnltb3JlIGFuZCBoYXZlIHRvIGRyb3AgaXQuIFRoaXMgaGFwcGVucyBpZiB0aGVyZSdzIGEgYmlnIHNlcW51bQotCSAgZGlzY29udGludWl0eSBmb3IgZXhhbXBsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzMTEKLQotMjAxNS0wNi0yMiAxMzoxMDowMiArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IHRyaXZpYWwgY2xlYW51cAotCSAgdHJpdmlhbCBwYXRjaCB0byBhZGQgcHJvcGVyICggd2hpbGUgY2hlY2tpbmcgZm9yIGlmKEdfVU5MSUtFTFkoKSkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzMDYKLQotMjAxNS0wNi0yMiAxMzoxNjowOCArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSAgZGNhcGFyc2U6IGluaXRpYWxpemUgc2l6ZSB2YXJpYWJsZQotCSAgc2l6ZSBjYW4gYmUgdXNlZCBpbiBjbGVhbnVwIHdpdGhvdXQgYmVpbmcgaW5pdGlhbGl6ZWQuIEhlbmNlCi0JICBzZXR0aW5nIGl0IHRvIDAgd2hlbiBkZWNsYXJpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEzMDYKLQotMjAxNS0wNi0yMiAxMzoxMzoyOSArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IGluaXRpYWx6ZSBicGYgdmFyaWFibGUKLQkgIGJwZiB2YXJpYWJsZSBtaWdodCBiZSB1c2VkIGluIGNsZWFudXAgd2l0aG91dCBiZWluZyBpbnRpYWxpemVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTMwNgotCi0yMDE1LTA2LTE5IDE0OjUwOjU5ICswMjAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cXVldWUuYzoKLQkgIHJ0cHJ0eHF1ZXVlOiByZXZlcnNlIHBlbmRpbmcgbGlzdCBiZWZvcmUgcHVzaGluZyBidWZmZXJzCi0JICBXaXRoIHRoaXMgd2Ugc2VuZCB0aGUgUlRYIGJ1ZmZlcnMgaW4gdGhlIHNhbWUgb3JkZXIKLQkgIHRoYXQgdGhleSB3ZXJlIHJlcXVlc3RlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEyOTcKLQotMjAxNS0wNi0yMSAxOToyMjoxMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IEZpeCBEVFMgdmFsaWRpdHkgY2hlY2sKLQkgIFRoaXMgY2hlY2sgd2FzIHVwLXNpZGUtZG93biwgY2F1c2luZyBhIGJhZCB0aW1lc3RhbXAgYXQgc3RhcnQKLQkgIGFuZCB0aGVuIGFsbCB0aW1lc3RhbXAgYmVpbmcgZGVsYXllZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTEyOTgKLQotMjAxNS0wNi0xNyAxNToxOTo0NyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIGNzbGc6IEFkZCBDb21wb3NpdGlvbiBTaGlmdCBMZWFzdCBHcmVhdGVzdCBBdG9tCi0JICBUaGlzIHNpbXBseSBhZGQgZm91cmNjIGFuZCBkdW1wIGZ1bmN0aW9uIGZvciB0aGUgY3NsZyBBdG9tLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTEwMwotCi0yMDE1LTA2LTE3IDE1OjE4OjM4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmM6Ci0JICBjdHRzX2R1bXA6IEZpeCBzaWduZXNzIGlzc3VlcwotCSAgSXQgZGlkbid0IGJ1ZywgYnV0IHVzZSBjb3JyZWN0IHNpZ25lc3MgaW4gdHJhY2VzLiBUaGUgbnVtYmVyIG9mCi0JICBlbnRyaWVzIGlzIHVuc2lnbmVkIHdoaWxlIHRoZSBvZmZzZXQgY2FuIGJlIHNpZ25lZCBhY2NvcmRpbmcgdG8KLQkgIHJlY2VudCBzcGVjLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTEwMwotCi0yMDE1LTA2LTE2IDE3OjQ4OjA4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDYwMTVkMjYgdG8gZjc0YjJkZgotCi0yMDE1LTA2LTE2IDExOjQzOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZ3N0X3J0cF9idWZmZXJfZXh0X3RpbWVzdGFtcCgpIG1vZGlmaWVzIGl0cyBmaXJzdCBhcmd1bWVudCwga2VlcCBhIGNvcHkgYXJvdW5kCi0KLTIwMTUtMDYtMTYgMTA6MzA6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBDb21wYXJlIGV4dCBSVFAgdGltZXMsIG5vdCBwbGFpbiBSVFAgdGltZSBhbmQgZXh0IFJUUCB0aW1lIHdoZW4gY2FsY3VsYXRpbmcgZWxhcHNlZCB0aW1lCi0JICBPdGhlcndpc2UgYWxsIFJUUCB0aW1lcyBhZnRlciBhIHdyYXBhcm91bmQgd291bGQgYmUgY29uc2lkZXJlZCBhcyBnb2luZwotCSAgYmFja3dhcmRzLCB0aGV5IHdpbGwgYWx3YXlzIGJlIHNtYWxsZXIgdGhhbiB0aGUgZXh0IFJUUCB0aW1lLgotCi0yMDE1LTA2LTE1IDE5OjI1OjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogVGhlIGRlZmF1bHQgcnRwLXByb2ZpbGUgc2hvdWxkIGJlIEFWUCwgbm90IEFWUEYKLQotMjAxNS0wNi0xNSAxNDozMjoyMSArMDkwMCAgU2FuZ2t5dSBQYXJrIDxzazExMjIucGFya0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogTWlub3IgY2xlYW51cAotCSAgMS4gQWRkIE51bGwgY2hlY2sgaW4gJ2ZyZWVfaXRlbScgZnVuY3Rpb24uCi0JICAyLiBGaXggYSB0eXBpbmcgZXJyb3Igb2YgY29tbWVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA5NjUKLQotMjAxNS0wNi0xMiAxNzo0NDo1MSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmxtdXg6IE1ha2Ugc3VyZSBiZXN0X3RpbWUgaXMgaW5pdGlhbGl6ZWQKLQotMjAxNS0wNi0xMiAyMzoyOToxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uaDoKLQkgIHJ0cGJpbi9zZXNzaW9uOiBBZGQgbmV3IG50cC10aW1lLXNvdXJjZSBwcm9wZXJ0eSBhbmQgZGVwcmVjYXRlIHVzZS1waXBlbGluZS1jbG9jayBwcm9wZXJ0eQotCSAgVGhlIG5ldyBwcm9wZXJ0eSBhbGxvd3MgdG8gc2VsZWN0IHRoZSB0aW1lIHNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUKLQkgIE5UUCB0aW1lIGluIFJUQ1AgcGFja2V0cy4gQnkgZGVmYXVsdCBpdCB3aWxsIGNvbnRpbnVlIHRvIGNhbGN1bGF0ZSB0aGUgTlRQCi0JICB0aW1lc3RhbXAgKDE5MDAgZXBvY2gpIGJhc2VkIG9uIHRoZSByZWFsdGltZSBjbG9jay4gQWx0ZXJuYXRpdmVseSBpdCBjYW4gdXNlCi0JICB0aGUgVU5JWCB0aW1lc3RhbXAgKDE5NzAgZXBvY2gpLCB0aGUgcGlwZWxpbmUncyBydW5uaW5nIHRpbWUgb3IgdGhlIHBpcGVsaW5lJ3MKLQkgIGNsb2NrIHRpbWUuIFRoZSBsYXR0ZXIgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIHN5bmNocm9uaXppbmcgbXVsdGlwbGUKLQkgIHJlY2VpdmVycyBpZiBhbGwgb2YgdGhlbSBzaGFyZSB0aGUgc2FtZSBjbG9jay4KLQkgIElmIHVzZS1waXBlbGluZS1jbG9jayBpcyBzZXQgdG8gVFJVRSwgaXQgd2lsbCBvdmVycmlkZSB0aGUgbnRwLXRpbWUtc291cmNlCi0JICBzZXR0aW5nIGFuZCBjb250aW51ZSB0byB1c2UgdGhlIHJ1bm5pbmcgdGltZSBwbHVzIDcwIHllYXJzLiBUaGlzIGlzIG9ubHkga2VwdAotCSAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi0yMDE1LTA0LTA3IDE2OjAzOjQyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICB0ZXN0czogcXRtdXg6IHRlc3QgZm9yIG11eGluZyB3aXRoIERUUyBvdXRzaWRlIHRoZSBzZWdtZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNTc1Ci0KLTIwMTUtMDYtMTEgMTc6MjY6NDkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGp1c3Qgc2VnbWVudCBhY2NvcmRpbmcgdG8gY3R0cyBvZmZzZXQKLQkgIEluIHByZXNlbmNlIG9mIGEgQ1RUUywgdGhlIHNlZ21lbnQgc3RhcnQvc3RvcCBtdXN0IGJlIG9mZnNldCBzbwotCSAgdGhlIHNlZ21lbnQgc3RhcnQvc3RvcCBpbmNsdWRlIHRoZSBQVFMuIFRoaXMgaXMgbmVlZGVkIHNpbmNlIHRoZQotCSAgUFRTIGNhbm5vdCBiZSBuZWdhdGl2ZSBpbiB0aGlzIGZvcm1hdC4gVGhpcyBmaXhlcyBpc3N1ZXMgd2hlcmUgdGhlCi0JICBydW5uaW5nIHRpbWUgb2YgdGhlIGZpcnN0IGJ1ZmZlciBpc24ndCBhdCB0aGUgc3RhcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNTc1Ci0KLTIwMTUtMDQtMDMgMjA6MzQ6NDIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IEhhbmRsZSBEVFMgd2l0aCBuZWdhdGl2ZSBydW5uaW5nIHRpbWUKLQkgIEFzIFFUIHdvcmtzIHdpdGggZHVyYXRpb24sIHNpbXBseSBicmluZyBiYWNrIGZpcnN0IERUUyB0byAwIGFuZCBzaGlmdAotCSAgZm9yd2FyZCB0aGUgUFRTIG9mIHRoZSBzYW1lIGFtb3VudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wNi0xMCAxODoxNTo1MiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkgIGZsdm11eDogQWRkIG5lZ2F0aXZlIHJ1bnRpbWUgRFRTIHN1cHBvcnQKLQkgIFRoaXMgaXMgZG9uZSBieSB1c2luZyBuZXcgZmVhdHVyZSBvZiB0aGUgQ29sbGVjdFBhZCBjbGlwIGZ1bmN0aW9uCi0JICB3aGljaCBzZXRzIHRoZSBEVFMgYXMgYSBnaW50NjQgaW4gdGhlIGNvbGxlY3RlZCBkYXRhLiBJdCBhbHNvIHNpbXBsaWZ5Ci0JICB0aGUgY29kZSBhIGJpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NzUKLQotMjAxNS0wNi0xMiAyMzowNjoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IFJlbmFtZSBzb21lIHZhcmlhYmxlcyBhbmQgZGVidWcgb3V0cHV0IHRvIG1ha2UgbW9yZSBzZW5zZQotCSAgTG9jYWwgYW5kIHJlbW90ZSB3ZXJlIG1peGVkIHVwIGluIGEgZmV3IHBsYWNlcywgYW5kIHRoZSB0aW1lIHdlIHN0b3JlIGhlcmUgaXMKLQkgIG5vdCBVTklYIHRpbWUgKDE5NzAgZXBvY2gpLCBidXQgTlRQIHRpbWUgKDE5MDAgZXBvY2gpIGluIG5hbm9zZWNvbmRzLgotCi0yMDE1LTA2LTEyIDE5OjIxOjEwICswMzAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvcmVtb3RlaW8uYzoKLQkgIG9zeGF1ZGlvOiBmaXggbGF0ZW5jeSBwcm9wZXJ0eSBxdWVyeSBvbiBSZW1vdGVJTwotCSAgQXVkaW9Vbml0R2V0UHJvcGVydHkgd291bGQgZmFpbCB3aXRoIGtQYXJhbUVyciAoLTUwKSBldmVyeSB0aW1lLAotCSAgc2ltcGx5IGJlY2F1c2Ugc2l6ZSB3YXNuJ3QgaW5pdGlhbGl6ZWQuCi0JICBOb3cgaXQgcmV0dXJucyB6ZXJvIGxhdGVuY3ksIGJ1dCBhdCBsZWFzdCBpdCBkb2Vzbid0IGZhaWwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwODY4Ci0KLTIwMTUtMDQtMDcgMTQ6MDY6MTYgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBGaXggbWFwcGluZyBvZiBsYXRlbmN5IHBhcmFtZXRlcnMgdG8gYnVmZmVyIGF0dHJpYnV0ZXMKLQotMjAxNS0wNi0xMiAwMTo1NjozNyArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IEFjdHVhbGx5IHNldCBkZXRlY3RlZCAzRCBpbmZvIGludG8gb3V0cHV0IGNhcHMuCi0JICBVc2UgdGhlIGluZm9ybWF0aW9uIHJlYWQgZnJvbSB0aGUgU3RlcmVvTW9kZSBpbmZvCi0JICB0byBjb25maWd1cmUgbXVsdGl2aWV3LW1vZGUgYW5kIG11bHRpdmlldy1mbGFncyBpbiB0aGUKLQkgIHZpZGVvIGNhcHMuCi0KLTIwMTUtMDYtMTEgMTM6MzY6NTQgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmg6Ci0JICBzcGxpdG11eHNpbms6IFRha2UgcmVsZWFzZWQtYnV0LW5vdC15ZXQtb3V0cHV0IGJ5dGVzIGludG8gYWNjb3VudAotCSAgV2hlbiBkZWNpZGluZyB3aGV0aGVyIGl0J3MgdGltZSB0byBzd2l0Y2ggdG8gYSBuZXcgZmlsZSwgdGFrZSBpbnRvCi0JICBhY2NvdW50IGRhdGEgdGhhdCdzIGJlZW4gcmVsZWFzZWQgZm9yIHB1c2hpbmcsIGJ1dCBoYXNuJ3QgeWV0Ci0JICBiZWVuIHB1c2hlZCAtIGJlY2F1c2UgZG93bnN0cmVhbSBpcyBzbG93IG9yIHRoZSB0aHJlYWRzIGhhdmVuJ3QgYmVlbgotCSAgc2NoZWR1bGVkLgotCSAgRml4ZXMgYSByYWNlIGluIHRoZSB1bml0IHRlc3QgYW5kIHByb2JhYmx5IGluIHByYWN0aWNlIC0gc29tZXRpbWVzCi0JICBmYWlsaW5nIHRvIHN3aXRjaCB3aGVuIGl0IHNob3VsZCBmb3IgYW4gZXh0cmEgR09QIG9yIHR3by4KLQkgIEFsc28gZml4IGEgcHJvYmxlbSBpbiBzcGxpdG11eHNyYyB3aGVyZSBwbGF5YmFjayBzb21ldGltZXMKLQkgIHN0YWxscyBhdCBzdGFydHVwIGlmIHR5cGVzIGFyZSBmb3VuZCB0b28gcXVpY2tseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA3NDcKLQotMjAxNS0wNi0xMSAwMTowNDo1MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JICBhdG9tczogcmVtb3ZlIGN1c3RvbSBnc3RfYnVmZmVyX25ldyBmdW5jdGlvbiBpbiBmYXZvciBvZiBjb3JlIHZlcnNpb24KLQkgIFJlbW92ZSBhIGN1c3RvbSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgYnkKLQkgIHVzaW5nIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCBpbnNpZGUgYSBtYWNybyB0byBzaW1wbGlmeQotCSAgcGFyYW1ldGVycyBhbmQgZ2l2ZSBpdCBhIG1vcmUgbWVhbmluZ2Z1bCBuYW1lLgotCSAgSXQgaXMgb25seSB1c2VkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgYnVmZmVycyB0byBoYXZlIGl0cyBkYXRhIGNvcGllZC4KLQotMjAxNS0wNi0xMSAwMDoxNDo0MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JICBhdG9tczogc2ltcGxpZnkgZnJlZSBmb3JtIGRhdGEgYXRvbXMgY3JlYXRpb24KLQkgIEF2b2lkIGNyZWF0aW5nIGFuIGludGVybWVkaWFyeSBidWZmZXIgb3IgbWVtb3J5IGFyZWEganVzdAotCSAgdG8gY29weSBpbnRvIGFuIGF0b20ncyBkYXRhIGFyZWEuCi0KLTIwMTUtMDYtMTAgMjI6Mjc6MjcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5oOgotCSogZ3N0L2lzb21wNC9mb3VyY2MuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBhZGQgQUMtMyBtdXhpbmcgc3VwcG9ydAotCSAgQWRkcyBBQy0zIG11eGluZyBzdXBwb3J0LiBJdCBpcyBkZWZpbmVkIGZvciBtcDQgYW5kIDNncCBmb3JtYXRzLgotCSAgT25lIGV4dHJhIGZlYXR1cmUgdGhhdCB3YXMgYWRkZWQgd2FzIHRoZSBhYmlsaXR5IHRvIGFkZCBleHRlbnNpb24KLQkgIGF0b21zIGFmdGVyIHNldF9jYXBzIGFzIHRoZSBBQy0zIGV4dGVuc2lvbiBhdG9tIG5lZWRzIHNvbWUgZGF0YQotCSAgdGhhdCBoYXMgdG8gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHN0cmVhbSBpdHNlbGYgYW5kIGlzIG5vdAotCSAgcHJlc2VudCBvbiBjYXBzLgotCi0yMDE1LTA2LTEwIDIyOjM2OjU5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkgIHF0bXV4OiByZW1vdmUgdW51c2VkIHR5cGUgTVA0UwotCi0yMDE1LTA2LTEwIDIyOjI5OjAxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiByZW1vdmUgZHVwbGljYXRlIGF0dHJpYnV0ZSB2YWx1ZSBzZXQKLQkgIEl0IGlzIGFsc28gc2V0IGEgZmV3IGxpbmVzIGJlbG93Ci0KLTIwMTUtMDYtMTEgMDA6MjI6NTQgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBJbXBsZW1lbnQgYmFzaWMgc3RlcmVvc2NvcGljIHZpZGVvIHN1cHBvcnQKLQkgIEltcGxlbWVudCBzdXBwb3J0IGZvciB0aGUgcGFja2VkIHZpZGVvIGZvcm1hdHMgV2ViTQotCSAgdXNlcywgbm90IGFsbCB0aGUgdmFsdWVzIHRoYXQgTWF0cm9za2EgbWlnaHQgdXNlLgotCSAgSW4gcHJhY3RpY2UsIGl0J3MgcmVhbGx5IGhhcmQgdG8gZmluZCBhbnkgc2FtcGxlcyBpbiB0aGUKLQkgIHdpbGQgb2YgYW55LgotCSAgU3VwcG9ydGVkIGluIGJvdGggdGhlIG11eGVyIGFuZCBkZW11eGVyLgotCi0yMDE1LTA2LTEwIDAxOjI2OjE1ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9mb3VyY2MuaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIHF0ZGVtdXg6IEFkZCBiYXNpYyBzdXBwb3J0IGZvciBNUEVHLUEgc3RlcmVvc2NvcGljIHZpZGVvCi0JICBUaGUgTVBFRy1BIGZvcm1hdCBwcm92aWRlcyBhbiBleHRlbnNpb24gdG8gdGhlIElTTyBiYXNlIG1lZGlhCi0JICBmaWxlIGZvcm1hdCB0byBzdG9yZSBzdGVyZW9zY29waWMgY29udGVudCBlbmNvZGVkIHdpdGggZGlmZmVyZW50Ci0JICBjb2RlY3MgbGlrZSBILjI2NCBhbmQgTVBFRy00OjIuIFRoZSBzdGVyZW8gdmlkZW8gbWVkaWEgaW5mb3JtYXRpb24oc3ZtaSkKLQkgIGF0b20gZGVjbGFyZXMgdGhlIHByZXNlbmNlIGFuZCBzdG9yYWdlIG1ldGhvZCBmb3IgdGhlIHZpZGVvLgotCSAgU3RlcmVvIHZpZGVvIGluZm9ybWF0aW9uIGZvciBNUEVHLUEgY2FuIGFsc28gYmUgc3VwcGxpZWQgdGhyb3VnaAotCSAgdGhlICdzdHZpJyBhdG9tIChyZWY6IElTTy9JRUNfMTQ0OTYtMTIsIElTTy9JRUNfMjMwMDAtMTEpLCB3aGljaAotCSAgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgcGF0Y2guCi0JICBBbHNvIG1pc3NpbmcgaXMgc3VwcG9ydCBmb3Igc3RlcmVvIHZpZGVvIGVuY29kZWQgYXMgc2VwYXJhdGUgdmlkZW8gdHJhY2tzCi0JICBmb3Igbm93LgotCSAgQmFzZWQgb24gYSBwYXRjaCBieSBTcmVlcmVuaiBCYWxhY2hhbmRyYW4gPHNyZWVyZW5qLmJhbGFjaGFuZHJhbkBpbnRlbC5jb20+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjExMTU3Ci0KLTIwMTUtMDYtMDIgMTY6MTU6MzUgLTA0MDAgIFhhdmllciBDbGFlc3NlbnMgPHhhdmllci5jbGFlc3NlbnNAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogQWRkIHRscy1kYXRhYmFzZSBwcm9wZXJ0eQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDI5OAotCi0yMDE1LTA2LTEwIDE0OjMzOjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwOiBVc2UgR1NUX0JVRkZFUl9QVFMoKSBpbnN0ZWFkIG9mIEdTVF9CVUZGRVJfVElNRVNUQU1QKCkKLQkgIFRoZSBtaXggYmV0d2VlbiBhbGwgdGhlc2UgaW4gdGhlIFJUUCBjb2RlIGlzIGNvbmZ1c2luZywgbGV0J3MgdHJ5IHRvIGJlCi0JICBjb25zaXN0ZW50LgotCi0yMDE1LTA2LTEwIDE0OjQ5OjUwICswMzAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cG1hbmFnZXI6IGNsYXJpZnkgbmVnYXRpdmUgbG9zdCBwYWNrZXRzIGluIHN0YXRzCi0JICBBbHNvOgotCSAgLSBNb3ZlIG5vdGVzIG9uIHVuaXRzIGJlZm9yZSBmaWVsZCBkb2N1bWVudGF0aW9uLgotCSAgLSBVbmlmeSBkb2N1bWVudGF0aW9uIHN0eWxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDY1MwotCi0yMDE1LTA2LTEwIDA2OjM4OjM5IC0wNDAwICBYYXZpZXIgQ2xhZXNzZW5zIDx4YXZpZXIuY2xhZXNzZW5zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogZml4IGdldHRlciBvZiAic3NsLXVzZS1zeXN0ZW0tY2EtZmlsZSIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAyOTgKLQotMjAxNS0wNi0xMCAwOTo0OTo0NyArMDkwMCAgVmluZWV0aCBUTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggcmV2ZXJzZSBwbGF5YmFjawotCSAgV2hlbiBwZXJmb3JtaW5nIHNlZWssIHNlZ21lbnQtPnN0YXJ0IGlzIGJlaW5nIHVwZGF0ZWQgd2l0aCBkZXNpcmVkX29mZnNldCwKLQkgIGJ1dCBpbiBjYXNlIG9mIHJldmVyc2UgcGxheWJhY2sgc2VnbWVudC0+c3RhcnQgc2hvdWxkIGJlIDAgYW5kCi0JICBzZWdtZW50LT5zdG9wIHNob3VsZCBiZSB1cGRhdGVkIHdpdGggZGVzaXJlZCBvZmZzZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNjc1Ci0KLTIwMTUtMDEtMjEgMTg6MDk6MDMgKzAxMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICBnc3R2NGwyYnVmZmVycG9vbDogaGFuZGxlIC1FUElQRSBmcm9tIERRQlVGIHRvIHNpZ25hbCBFT1MKLQkgIFRoZSBWNEwyIGRlY29kZXIgc2lnbmFscyBFT1MgYnkgcmV0dXJuaW5nIC1FUElQRSBmcm9tIERRQlVGIGFmdGVyIHRoZQotCSAgbGFzdCBidWZmZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMzM4Ci0KLTIwMTUtMDYtMDYgMjE6MDk6MTkgLTA0MDAgIFhhdmllciBDbGFlc3NlbnMgPHhhdmllci5jbGFlc3NlbnNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogQWRkIGEgR1Rsc0ludGVyYWN0aW9uIHByb3BlcnR5Ci0JICBJdCBjYW4gYmUgdXNlZCBmb3IgVExTIGNsaWVudCBhdXRoZW50aWNhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA0NzEKLQotMjAxNS0wMS0wOSAxMTozNjoxMSArMDEwMCAgRW5yaWNvIEpvcm5zIDxlam9AcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDI6IEFsbG93IHNjYWxpbmcgaW4gdGhlIHY0bDIqY29udmVydCBlbGVtZW50Ci0JICBUaGlzIGlzIGluc3BpcmVkIG9mIHZpZGVvc2NhbGUgYW5kIHZpZGVvY29udmVydCBlbGVtZW50cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI5MTcKLQotMjAxNS0wNi0wOSAxOTowMjo1NSArMDMwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgcnRwbWFuYWdlcjogZG9jdW1lbnQgdW5pdHMgb2Ygc3RhdHMgYW5kIGFyZ3VtZW50cwotCSAgQWxzbywgbWlub3Igc3BlbGxpbmcgYW5kIHN0eWxlIGNvcnJlY3Rpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDY1MwotCi0yMDE1LTA2LTA5IDE0OjQyOjI3ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGNydWZ0OiBhZGQgdGhlIG9ic29sZXRlIHRtcGwgZGlyIHRvIGNydWZ0LWRpcnMKLQotMjAxNS0wNi0wOSAxMTozMDoyMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGQ5YTMzNTMgdG8gNjAxNWQyNgotCi0yMDE1LTA2LTA5IDA3OjA0OjA3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb21tb246Ci0JICBGaXggY29tbW9uIHZlcnNpb24KLQkgIFdhcyBhY2NpZGVudGx5IGRvd25ncmFkZWQgYnkgODdhNDg4NGFjZDg2NTVhNjU5MWQ3MzVhMWQ5NDRlY2I1ZWEzZGUxNgotCi0yMDE1LTA2LTA4IDE5OjExOjQxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IEFsc28gc2V0IGNvbG9yaW1ldHJ5IG9uIG91dHB1dCBkZXZpY2VzCi0JICBUaGlzIGNvbXBsZXRlcyB0aGUgY29kZSB0aGF0IHNldCB0aGUgY29sb3JpbWV0cnkgb24gb3V0cHV0Ci0JICBkZXZpY2UuCi0KLTIwMTUtMDYtMDggMTk6MTA6MzQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29tbW9uOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogQWRkIG1pc3NpbmcgU01UUDI0ME0gbWF0cml4Ci0JICBUaGlzIGlzIG1pc3NpbmcgaW4gdGhlIGRvYywgYnV0IHdhcyBpbiB0aGUgaGVhZGVyLgotCi0yMDE1LTA2LTA4IDIzOjAwOjE2ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbS9nb29tX2NvcmUuYzoKLQkgIGdvb206IHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHdhcm5pbmcKLQkgIEJ1aWxkIGZhaWxzIHdpdGggdGhlIGxhdGVzdCBzbmFwc2hvdCBvZiBnY2MtNC45IGJlY2F1c2UgcGFyYW0xIGFuZCBwYXJhbTIgbWlnaHQKLQkgIHBvc3NpYmx5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gVGhleSBhcmUgc2V0IGRlcGVuZGluZyBvbiB0aGUgY2FzZXMgb2YgYSBzd2l0Y2gKLQkgIHN0YXRlbWVudCBhbmQgdGhlIGNvbXBpbGVyIHNlZXMgdGhpcyBhcyBub3QgYSBjb21wbGV0ZSBndWFyYW50ZWUuCi0JICBTZXQgdGhlbSB0byAwIGlmIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGZhbGxzIGRvd24gdG8gdGhlIGRlZmF1bHQgY2FzZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTA1NjYjYzYKLQotMjAxNS0wNi0wOCAxNzoyNDozOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBGdWxseSBpbXBsZW1lbnQgY29sb3JpbWV0cnkgc3VwcG9ydAotCSAgVGhpcyBmaXhlcyB3cm9uZyBtYXBwaW5nIGZvciBzUkdCIGFzIGluIEdTdHJlYW1lciBzUkdCIGNvcnJlY3RseQotCSAgYXBwbHkgdG8gUkdCIGZvcm1hdHMsIHdoaWxlIGluIFY0TDIgaXQncyBhbiBhbGlhcyBmb3Igc1lDQy4gQWxzbwotCSAgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgcXVhbnRpemF0aW9uIChyYW5nZSksIHljYmNyX2VuY29kaW5nIChtYXRyaXgpCi0JICBhbmQgeGZlcl9mdW5jICh0cmFuc2ZlcikgZW51bWVyYXRpb24uCi0KLTIwMTUtMDYtMDggMTc6MDE6MTUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZXh0L3R5cGVzLWNvbXBhdC5oOgotCSogc3lzL3Y0bDIvZXh0L3Y0bDItY29tbW9uLmg6Ci0JKiBzeXMvdjRsMi9leHQvdjRsMi1jb250cm9scy5oOgotCSogc3lzL3Y0bDIvZXh0L3ZpZGVvZGV2Mi5oOgotCSAgdjRsMjogVXBkYXRlIGtlcm5lbCBoZWFkZXJzIHRvIGxhdGVzdCBmcm9tIG1lZGlhIHRyZWUKLQkgIFRoaXMgaXMgdGhlIGxhdGVzdCBmcm9tIG1lZGlhIHRyZWUuIFRoaXMgc2hvdWxkIGVuYWJsZSBtb3JlIGRldmVsb3BtZW50Ci0JICBvZiB0aGUgdjRsMiBlbGVtZW50cy4gVGhpcyBpbmNsdWRlcyBuZXcgZmxhZ3MgcmVxdWlyZXMgdG8gZml4IGRyYWluaW5nCi0JICBwYXRoIGluIGRlY29kZXIsIGNvbG9yaW1ldHJ5IGFuZCBtdWNoIG1vcmUuCi0KLTIwMTUtMDYtMDggMjM6MDc6NTUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkMzdhZjMyIHRvIGQ5YTMzNTMKLQotMjAxNS0wNi0wOCAxOTo0MjozMCArMDEwMCAgQ2hyaXMgQ2xheXRvbiA8Y2hyaXMyNTUzQGdvb2dsZW1haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSAgcnRwdnA4ZGVwYXk6IHBvdGVudGlhbCBhY2Nlc3MgYmV5b25kIGVuZCBvZiBhcnJheQotCSAgQ29tcGlsaW5nICh3aXRoIGdjYy00LjktMjAxNTA2MDMpIHByb2R1Y2VzIGFuIGVycm9yIGJlY2F1c2Ugb2YgYW4gYWNjZXNzIGJleW9uZAotCSAgdGhlIGVuZCBvZiBhbiBhcnJheS4gVGhpcyBwYXRjaCBmaXhlcyB0aGUgZXJyb3IgYnkgaW5pdGlhbGl6aW5nIHRoZSBsb29wCi0JICBjb250cm9sL2FycmF5IGluZGV4IHZhcmlhYmxlIChpKSB0byAxIGFuZCByZXR1cm5pbmcgaSAtIDEgd2hlbiBhIG1hdGNoIGlzIGZvdW5kLgotCSAgQWxzbywgYmVjYXVzZSB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgYXJyYXkgaW5jcmVhc2UgaW4gdmFsdWUgYXMgdGhlIGluZGV4Ci0JICBpbmNyZWFzZXMsIHRoZSA+PSB0ZXN0IHVubmVjZXNzYXJ5LCBzbyBpdCBpcyByZW1vdmVkLgotCi0yMDE1LTA0LTMwIDAyOjUyOjU4ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogRG9uJ3QgYWNjdW11bGF0ZSBtb3JlIHRoYW4gMiBHT1BzCi0JICBEb24ndCBhbGxvdyBsYXJnZSBhbW91bnRzIG9mIGRhdGEgdG8gcXVldWUgdXAgLSB3ZSBvbmx5IG5lZWQKLQkgIHRoZSBHT1Agd2UncmUgd3JpdGluZywgYW5kIHRoZSBHT1Agd2UncmUgYWNjdW11bGF0aW5nLgotCi0yMDE1LTA0LTE2IDEwOjQ0OjQ5ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgaXNvbXA0OiBmc3luYyBhZnRlciBzZW5kaW5nIHVwZGF0ZXMgaW4gcm9idXN0IG1vZGUKLQkgIFVzZSB0aGUgbmV3IEdzdEJ1ZmZlciBTWU5DX0FGVEVSIGZsYWcgdG8gdHJpZ2dlciBhbiBmc3luYwotCSAgYWZ0ZXIgdXBkYXRpbmcgdGhlIG1vb3Ygb3IgbWRhdCBhdG9tLCBhbmQgYWZ0ZXIgdXBkYXRpbmcgdGhlIGZyZWUKLQkgIGF0b20gdG8gbWFrZSBpdCB2aXNpYmxlLgotCi0yMDE1LTA0LTAzIDAwOjU3OjIwICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgaXNvbXA0OiBPbmx5IHNldCBtb292IGhlYWRlciBpbnRvIHN0cmVhbWhlYWRlciBhdCBFT1MKLQkgIE9ubHkgdXBkYXRlIHRoZSBtb292IGhlYWRlciBpbnRvIHRoZSBjYXBzIGlmIGl0J3MgdGhlIGZpbmFsaXNlZAotCSAgbW9vdiBhdCBFT1MgdGltZS4gQXZvaWRzIHBvc3RpbmcgYSBib2d1cyBtb292IGF0IHN0YXJ0dXAgYW5kCi0JICByZXBlYXRlZCB1cGRhdGVzIGluIHJvYnVzdC1yZWNvcmRpbmcgbW9kZQotCi0yMDE1LTA0LTAzIDAxOjQ0OjE1ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkgIHRlc3RzOiBVcGRhdGUgbXA0IG11eCB0ZXN0IGZvciBtZGF0IHBsYWNlaG9sZGVyIGNoYW5nZQotCSAgVGhlIG1wNCBtdXhlciBub3cgd3JpdGVzIGEgcGxhY2UtaG9sZGVyIG1kYXQgYXMgYSBmcmVlCi0JICBhdG9tIGZvbGxvd2VkIGJ5IGEgMC1ieXRlIG1kYXQgdGhhdCBjb3ZlcnMgdGhlIHJlc3Qgb2YgdGhlCi0JICBmaWxlLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gcmV3cml0ZSBpdCBhcyA2NC1iaXQsIG9yIGxlYXZlCi0JICBpdCBhcy1pcyBpZiBub3RoaW5nIGVsc2UgaXMgd3JpdHRlbiBhZnRlcndhcmQKLQotMjAxNS0wNC0wMSAxMToxNTozOCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkqIGdzdC9pc29tcDQvYXRvbXNyZWNvdmVyeS5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgaXNvbXA0OiBJbXBsZW1lbnQgcm9idXN0IG11eGluZyB1c2luZyBwaW5nLXBvbmcgc3RyYXRlZ3kKLQkgIEltcGxlbWVudCBhIHJvYnVzdCByZWNvcmRpbmcgbW9kZSwgd2hlcmUgdGhlIG91dHB1dAotCSAgZmlsZSBpcyBhbHdheXMgaW4gYSBwbGF5YWJsZSBzdGF0ZSwgc2Vla2luZyBhbmQgcmV3cml0aW5nCi0JICB0aGUgbW9vdiBoZWFkZXIgYXQgYSBjb25maWd1cmFibGUgaW50ZXJ2YWwuIFJld3JpdGluZwotCSAgbW9vdiBpcyBkb25lIHVzaW5nIHJlc2VydmVkIHNwYWNlIGF0IHRoZSBzdGFydCBvZgotCSAgdGhlIGZpbGUsIGFuZCBhIHBpbmctcG9uZyBzdHJhdGVneSB3aGVyZSB0aGUgbW9vdgotCSAgaXMgcmVwbGFjZWQgYXRvbWljYWxseSBzbyBpdCdzIG5ldmVyIGludmFsaWQuCi0JICBUcmFjayB3aGVuIHRhZ3MgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLCBhbmQgZG9uJ3Qgd3JpdGUgdGhlbSBpbnRvCi0JICB0aGUgbW9vdiB1bmxlc3MgdGhleSd2ZSBjaGFuZ2VkLiBDbGVhciBhbnkgZXhpc3RpbmcgdGFncyB3aGVuCi0JICByZS13cml0aW5nIHRoZW0sIHNvIHdlIGNhbiBkbyBwcm9ncmVzc2l2ZSBtb292IHVwZGF0aW5nIGluIHJvYnVzdAotCSAgcmVjb3JkaW5nIG1vZGUuCi0JICBXcml0ZSBwbGFjZWhvbGRlciBtZGF0IGFzIGEgZnJlZSBhdG9tIHBsdXMgYSAzMi1iaXQgbWRhdAotCSAgd2l0aCAnMCcgc2l6ZSwgd2hpY2ggbWVhbnMgInJlc3Qgb2YgdGhlIGZpbGUiIGluIHRoZSBzcGVjLgotCSAgUmUtd3JpdGUgaXQgbGF0ZXIgdG8gYSBmdWxsIDY0LWJpdCBleHRlbmRlZCBzaXplIGF0b20gaWYgbmVlZGVkLgotCi0yMDE1LTA0LTAxIDAwOjU4OjUyICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgaXNvbXA0OiBVcGRhdGUgZWRpdCBsaXN0IHdoZW4gcmUtd3JpdGluZyBtb292Ci0JICBDb3JyZWN0bHkgdXBkYXRlIGFueSBlZGl0IGxpc3RzIGVhY2ggdGltZSB0aGUgbW9vdiBpcyByZWNhbGN1bGF0ZWQsCi0JICB1cGRhdGluZyBleGlzdGluZyB0YWJsZSBlbnRyaWVzIGlmIHRoZXkgYWxyZWFkeSBleGlzdCBpbnN0ZWFkIG9mIGp1c3QKLQkgIGFkZGluZyBuZXcgb25lcy4KLQotMjAxNS0wNC0wOCAwMTo0MToxOCArMTAwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIGlzb21wNDogUmVtb3ZlIGFuIGV4dHJhIGJyYWNrZXQgaW4gYSBjb21tZW50LgotCi0yMDE1LTAzLTE5IDIwOjI5OjQ0ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXhzcmM6IFByb3RlY3QgdG90YWxfZHVyYXRpb24gc3RhdGUgdmFyaWFibGUgd2l0aCB0aGUgb2JqZWN0IGxvY2suCi0JICBQcmV2ZW50IGRlYWRsb2NrcyBmcm9tIGRvd25zdHJlYW0gcXVlcnlpbmcgZHVyYXRpb24gZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLQotMjAxNS0wNi0wNyAyMzowNjoyMCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDIxYmEyZTUgdG8gZDM3YWYzMgotCi0yMDE1LTA2LTA3IDE5OjI0OjIwICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbS9nc3RhdWRpb3Zpc3VhbGl6ZXIuYzoKLQkgIGdvb206IGNsZWFuIGRlcmVmZXJlbmNlcyBvZiBwcml2YXRlIHN0cnVjdHVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjg3NQotCi0yMDE1LTA2LTA3IDE5OjIwOjA0ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbTJrMS9nc3RhdWRpb3Zpc3VhbGl6ZXIuYzoKLQkgIGdvb20yazE6IGNsZWFuIGRlcmVmZXJlbmNlcyBvZiBwcml2YXRlIHN0cnVjdHVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjg3NQotCi0yMDE1LTA2LTA3IDE3OjMyOjAxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYzQwODU4MyB0byAyMWJhMmU1Ci0KLTIwMTUtMDYtMDcgMTc6MDE6MzcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IHJlbW92ZSB2YXJpYWJsZXMgdGhhdCB3ZSBkZWZpbmUgaW4gdGhlIHNuaXBwZXQgZnJvbSBjb21tb24KLQkgIFRoaXMgaXMgc3luY2luZyBvdXIgTWFrZWZpbGUuYW0gd2l0aCB1cHN0cmVhbSBndGtkb2MuCi0KLTIwMTUtMDYtMDcgMTc6MTY6MTkgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZDY3Njk5MyB0byBjNDA4NTgzCi0KLTIwMTUtMDYtMDcgMTY6NDQ6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS41LjEgPT09Ci0KLTIwMTUtMDYtMDcgMTA6NDY6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXJvcmMtZGlzdC5jOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjUuMQotCi0yMDE1LTA2LTA3IDEwOjM4OjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE1LTA2LTA3IDEwOjMyOjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBPdmVycmlkZSB0aGUgU1NSQyBmcm9tIHRoZSBwYWNrZXRzJyBTU1JDIGlmIG5vbmUgd2FzIGdpdmVuIHZpYSBjYXBzIG9yIHByb3BlcnR5Ci0KLTIwMTUtMDYtMDcgMDk6MzU6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE1LTA2LTA1IDE1OjMyOjEwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogRG9uJ3Qgd2FybiB3aGVuIG9wdGlvbmFsIENJRCBhcmUgbm90IGltcGxlbWVudAotCSAgZ3N0X3Y0bDJfZ2V0X2F0dHJpYnV0cmUoKSBzaGFsbCBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgQ0lEIGlzIGV4cGVjdGVkCi0JICB0byBiZSBzdXBwb3J0ZWQuIE90aGVyd2lzZSwgd2UgZ2V0IHVud2FudGVkIHdhcm5pbmcgcG9zdGVkIHRvIHRoZSBidXMuCi0KLTIwMTUtMDYtMDUgMTY6NDM6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IE9ubHkgc3VnZ2VzdCBvdXIgaW50ZXJuYWwgc3NyYyBpZiBpdCdzIG5vdCBhIHJhbmRvbSBvbmUgYW5kIHdhcyBzZWxlY3RlZCBhcyBpbnRlcm5hbCBzc3JjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTgxCi0KLTIwMTUtMDYtMDQgMTQ6MTg6MDEgKzA5MDAgIFZpbmVldGggVE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IGVycm9yIHdoZW4gY2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dD1GYWxzZQotCSAgc2VsZi0+Y2hhbm5lbHMgaXMgYmVpbmcgaW5jcmVtZW50ZWQgb25seSB3aGVuCi0JICBjaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV0IGlzIHNldCBhcyBUUlVFLiBTbyBpbiBjYXNlIG9mIEZBTFNFCi0JICBzZWxmLT5mdW5jIGlzIG5vdCBzZXQgYW5kIGhlbmNlIGNyZWF0aW5nIGFzc2VydGlvbiBlcnJvci4KLQkgIEhlbmNlIHJlbW92aW5nIHRoZSBjb25kaXRpb24gdG8gaW5jcmVtZW50IHNlbGYtPmNoYW5uZWxzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDIxMQotCi0yMDE1LTA2LTA1IDEwOjMzOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogQWRkIHN1cHBvcnQgZm9yIHJlY2VpdmluZyByZWR1Y2VkIHNpemUgUlRDUAotCSAgSXQgd29ya2VkIGJlZm9yZSBidXQgZ2F2ZSB3YXJuaW5ncywgbm93IHdlIGp1c3QgaWdub3JlIFJUQ1AKLQkgIHBhY2tldHMgdGhhdCBkb24ndCBzdGFydCB3aXRoIGEgU1IuIEFzIGFsbCB3ZSdyZSBpbnRlcmVzdGVkCi0JICBpbiBoZXJlIGFyZSBTUnMuCi0KLTIwMTUtMDYtMDMgMTI6MjI6NDIgKzAyMDAgIEpvc2UgQW50b25pbyBTYW50b3MgQ2FkZW5hcyA8c2FudG9zY2FkZW5hc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBBZGQgc3VwcG9ydCBmb3IgcmVkdWNlIHNpemUgcnRjcAotCSAgQWNjb3JkaW5nIHRvIFJGQyA1NTA2LCByZWR1Y2Ugc2l6ZSBwYWNrYWdlcyBjYW4gYmUgc2VudCwgdGhpcwotCSAgcGFja2FnZXMgbWF5IG5vdCBiZSBjb21wb3VuZCwgc28gd2UgbmVlZCB0byBhZGQgc3VwcG9ydCBmb3IKLQkgIGdldHRpbmcgc3NyYyBmcm9tIG90aGVyIHR5cGVzIG9mIHBhY2thZ2VzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDMyNwotCi0yMDE1LTA2LTAzIDEzOjE0OjQ0ICswMjAwICBKb3NlIEFudG9uaW8gU2FudG9zIENhZGVuYXMgPHNhbnRvc2NhZGVuYXNAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBBZGQgc3VwcG9ydCBmb3IgcmVjZWl2aW5nIHJlZHVjZWQgc2l6ZSBydGNwCi0JICBTZWUgUkZDIDU1MDYKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAzMzIKLQotMjAxNS0wNi0wNCAxNjowOTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IEFkZCBzdXBwb3J0IGZvciBjaGFubmVsIGNvbmZpZ3VyYXRpb25zIDExLCAxMiBhbmQgMTQgYW5kIDcgYWN0dWFsbHkgaGFzIDggY2hhbm5lbHMKLQkgIElTTy9JRUMgMTQ0OTYtMzoyMDA5L1BEQU0gNCBhZGRlZCAxMSwgMTIgYW5kIDE0LgotCi0yMDE1LTA2LTAzIDA4OjU3OjU3IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkgIGFzdGVyaXNraDI2MzogVW4tcmFuayBjbGFzaGluZyBkZXBheWxvYWRlcgotCSAgVGhpcyBkZXBheWxvYWRlciBjbGFzaCB3aXRoIHRoZSBzdGFuZGFyZCBvbmUgZm9yIEgyNjNwLiBJdCBwcm9kdWNlcyBhbgotCSAgSDI2M3Agc3RyZWFtIHdpdGggYSBtb2RpZmllZCBoZWFkZXIuIEl0IHVzZXMgZW5jb2RpbmctbmFtZSB0aGF0IGlzIHRoZQotCSAgc2FtZSBhcyBIMjYzcCAoSDI2My0xOTk4KSB0aG91Z2ggdGhlIHJlc3VsdGluZyBFUyBpcyBub3QgZGVjb2RhYmxlIG9yCi0JICBwYXJzYWJsZSBpbiBHU3RyZWFtZXIsIG1ha2luZyBpdCB1bnN1YWJsZSBpbiBkeW5hbWljIHBpcGVsaW5lLiBUaGlzCi0JICBwYXRjaCB1bnJhbmsgdGhpcyBzcGVjaWFsaXplZCBkZXBheWxvYWRlciBzaW5jZSBpdCBjYW4gb25seSBiZSB1c2VkIGluCi0JICBjdXN0b20gcGlwZWxpbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5OTM1Ci0KLTIwMTUtMDYtMDIgMTg6MDk6NDggKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uaDoKLQkgIGdvb20yazE6IHJlbW92ZSB2YXJpYWJsZXMgbm90IG5lZWRlZCBhbnltb3JlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyODc1Ci0KLTIwMTUtMDYtMDIgMTc6NTI6NDYgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9nb29tMmsxL01ha2VmaWxlLmFtOgotCSogZ3N0L2dvb20yazEvZ3N0YXVkaW92aXN1YWxpemVyLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3RhdWRpb3Zpc3VhbGl6ZXIuaDoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uaDoKLQkgIGdvb20yazE6IHJlYmFzZSB0byB1c2UgdGhlIGF1ZGlvdmlzdWFsaXplciBjbGFzcwotCSAgUmViYXNlIHRvIGhhdmUgZ29vbTJrMSB1c2luZyB0aGUgY29tbW9uIEdzdEF1ZGlvVmlzdWFsaXplciBjbGFzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjg3NQotCi0yMDE1LTA2LTAyIDE3OjI5OjM2ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkqIGdzdC9nb29tL2dzdGF1ZGlvdmlzdWFsaXplci5jOgotCSogZ3N0L2dvb20vZ3N0YXVkaW92aXN1YWxpemVyLmg6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmg6Ci0JICBnb29tOiByZWJhc2UgdG8gdXNlIHRoZSBhdWRpb3Zpc3VhbGl6ZXIgY2xhc3MKLQotMjAxNS0wNi0wMiAxNjoyNzoyNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWFjcGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FjM3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hcGV2Mm11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2FtcGxpZnkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2R5bmFtaWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2VxdWFsaXplci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmxhY3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDN2Mm11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2RlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2VuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21wZWdhdWRpb3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2xpbWl0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHNlc3Npb24uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NwZWN0cnVtLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2JveC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2ZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2RlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2cGFjay5jOgotCSAgY2hlY2s6IFVzZSBHU1RfQ0hFQ0tfTUFJTiAoKSBtYWNybyBldmVyeXdoZXJlCi0JICBNYWtlcyBzb3VyY2UgY29kZSBzbWFsbGVyLCBhbmQgZW5zdXJlcyB3ZSBnbyB0aHJvdWdoIGNvbW1vbiBpbml0aWFsaXphdGlvbgotCSAgcGF0aCAobGlrZSB0aGUgb25lIHRoYXQgc2V0cyB1cCBYTUwgdW5pdCB0ZXN0IG91dHB1dCAuLi4pCi0KLTIwMTUtMDUtMjYgMTQ6NDc6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IE9ubHkgc2NoZWR1bGUgYSB0aW1lciB3aGVuIHdlIGFjdHVhbGx5IGhhdmUgdG8gc2VuZCBSVENQCi0JICBPdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIDEwcy0xMDBzIG9mIHRocmVhZCB3YWtldXBzIGluIGZlZWRiYWNrIHByb2ZpbGVzLCBjcmVhdGUKLQkgIFJUQ1AgcGFja2V0cywgZXRjLiBqdXN0IHRvIHN1cHByZXNzIHRoZW0gaW4gOTklIG9mIHRoZSBjYXNlcyAoaS5lLiBpZiBubwotCSAgZmVlZGJhY2sgaXMgYWN0dWFsbHkgcGVuZGluZyBhbmQgbm8gcmVndWxhciBSVENQIGhhcyB0byBiZSBzZW50KS4KLQkgIFRoaXMgaW1wcm92ZXMgQ1BVIHVzYWdlIGFuZCBiYXR0ZXJ5IGxpZmUgcXVpdGUgYSBsb3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NTQzCi0KLTIwMTUtMDUtMjIgMTM6NDQ6MDMgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IFJlbW92ZSB1c2VsZXNzIGdvdG8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY1NDMKLQotMjAxNS0wNS0yMSAxMjo1NDo0NyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LXJ0eC5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtcnRwYXV4LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1IMjY0LXJ0eC5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItcnRwYXV4LmM6Ci0JICBleGFtcGxlczogU2V0IFJUUCBwcm9maWxlIHRvIEFWUEYgZm9yIHJ0cGF1eCBleGFtcGxlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjU0MwotCi0yMDE1LTA1LTA0IDE2OjQxOjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBTZXQgUlRQIHByb2ZpbGUgb24gdGhlIHJ0cHNlc3Npb24gb2JqZWN0cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjU0MwotCi0yMDE1LTA1LTIxIDE0OjEzOjU2ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgcnRwYmluOiBBZGQgcnRwLXByb2ZpbGUgcHJvcGVydHkgZm9yIHNldHRpbmcgdGhlIGRlZmF1bHQgcHJvZmlsZSBvZiBuZXdseSBjcmVhdGVkIHNlc3Npb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NTQzCi0KLTIwMTUtMDUtMDQgMTE6NTE6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IE9ubHkgcHV0IFJScyBhbmQgZnVsbCBTREVTIGludG8gcmVndWxhciBSVENQIHBhY2tldHMKLQkgIElmIHdlIG1heSBzdXBwcmVzcyB0aGUgcGFja2V0IGR1ZSB0byB0aGUgcnVsZXMgb2YgUkZDNDU4NSAoaS5lLiB3aGVuCi0JICBiZWxvdyB0aGUgdC1yci1pbnQpLCB3ZSBjYW4gc2VuZCBhIHNtYWxsZXIgUlRDUCBwYWNrZXQgd2l0aG91dCBSUnMKLQkgIGFuZCBmdWxsIFNERVMuIEluIHRoZW9yeSB3ZSBjb3VsZCBldmVuIHNlbmQgYSBtaW5pbWFsIFJUQ1AgcGFja2V0Ci0JICBhY2NvcmRpbmcgdG8gUkZDNTUwNiwgYnV0IHdlIGRvbid0IHN1cHBvcnQgdGhhdCB5ZXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NTQzCi0KLTIwMTUtMDUtMDQgMTM6NTE6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IEtlZXAgdHJhY2sgb2YgdHAvdG4gYW5kIHRfcnJfbGFzdCBzZXBhcmF0ZWx5Ci0JICBPdGhlcndpc2Ugd2UgY2FuJ3QgcHJvcGVybHkgc2NoZWR1bGUgUlRDUCBpbiBmZWVkYmFjayBwcm9maWxlcyBhcyB3ZSBuZWVkIHRvCi0JICBkaXN0aW5ndWlzaCB0aGUgdGltZSB3aGVuIHdlIGxhc3QgY2hlY2tlZCBmb3Igc2VuZGluZyBSVENQICh0cCkgYnV0IG1pZ2h0IGhhdmUKLQkgIHN1cHByZXNzZWQgaXQsIGFuZCB0aGUgdGltZSB3aGVuIHdlIGxhc3QgYWN0dWFsbHkgc2VudCBhIG5vbi1lYXJseSBSVENQCi0JICBwYWNrZXQuCi0JICBUaGlzIHRvZ2V0aGVyIHdpdGggdGhlIG90aGVyIGNoYW5nZXMgc2hvdWxkIG5vdyBwcm9wZXJseSBpbXBsZW1lbnQgUlRDUAotCSAgc2NoZWR1bGluZyBhY2NvcmRpbmcgdG8gUkZDNDU4NSwgYW5kIGVzcGVjaWFsbHkgYWxsb3cgdXMgdG8gc2VuZCBmZWVkYmFjawotCSAgcGFja2V0cyBhIGxvdCBpZiBuZWVkZWQgYnV0IG9ubHkgc2VuZCByZWd1bGFyIFJUQ1AgcGFja2V0cyBldmVyeSBvbmNlIGluIGEKLQkgIHdoaWxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjU0MwotCi0yMDE1LTA1LTA0IDExOjQyOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgcnRwc2Vzc2lvbjogQWRkIHByb3BlcnR5IGZvciBzZWxlY3RpbmcgUlRQIHByb2ZpbGUgKEFWUC9BVlBGL2V0YykKLQkgIEFuZCBtb2RpZnkgb3VyIFJUQ1Agc2NoZWR1bGluZyBhbGdvcml0aG0gYWNjb3JkaW5nbHkuIFdlIG5vdyBjYW4gc2VuZCBtb3JlCi0JICBSVENQIHBhY2tldHMgaWYgbmVlZGVkIGZvciBmZWVkYmFjaywgYnV0IHdpbGwgdGhyb3R0bGUgZnVsbCBSVENQIHBhY2tldHMgYnkKLQkgIHJ0Y3AtbWluLWludGVydmFsICh0LXJyLWludCBmcm9tIFJGQzQ1ODUpLgotCSAgSW4gbm9uLWZlZWRiYWNrIG1vZGUsIHJ0Y3AtbWluLWludGVydmFsIGlzIFRtaW4gZnJvbSBSRkMzNTUwLCB3aGljaCBpcwotCSAgc3RhdGljYWxseSBzZXQgdG8gMXMgb3IgMHMgYnkgUkZDNDU4NS4gVG1pbiBkZWZpbmVzIGhvdyBvZnRlbiB3ZSBzaG91bGQKLQkgIHNlbmQgUlRDUCBwYWNrZXRzIGF0IG1vc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NTQzCi0KLTIwMTUtMDUtMzAgMTc6NDE6MDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JICBtdWxhd2RlYzogTGV0IGJhc2VjbGFzcyBlc3RpbWF0ZSBiaXRyYXRlCi0JICBUaGlzIG1ha2VzIHBsYXliYWNrIGRpcmVjdGx5IGZyb20gYSBmaWxlIHdvcmsgd2l0aCB0aGUgcmlnaHQgY2Fwcy4KLQotMjAxNS0wNS0yNyAxNjozMToyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkgIGR5bnVkcHNpbms6IGtlZXAgR0NhbmNlbGxhYmxlIGZkIGFyb3VuZCBpbnN0ZWFkIG9mIHJlLWNyZWF0aW5nIGl0IGNvbnN0YW50bHkKLQkgIEFuZCBjcmVhdGUgaXQgb25seSB3aGVuIHN0YXJ0aW5nIHRoZSBlbGVtZW50LgotCi0yMDE1LTA1LTI3IDE1OjU1OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIHVkcHNpbmssIG11bHRpdWRwc2luazoga2VlcCBHQ2FuY2VsbGFibGUgZmQgYXJvdW5kIGluc3RlYWQgb2YgcmUtY3JlYXRpbmcgaXQgY29uc3RhbnRseQotCSAgT3RoZXJ3aXNlIHdlIGNvbnN0YW50bHkgY3JlYXRlL2Nsb3NlIGV2ZW50IGZpbGUgZGVzY3JpcHRvcnMsCi0JICBldmVyeSB0aW1lIHdlIGNhbGwgZ19zb2NrZXRfY29uZGl0aW9uX3RpbWVkX3dhaXQoKSBvcgotCSAgZ19zb2NrZXRfc2VuZF9tZXNzYWdlKHMpKCksIGkuZS4gYSBsb3QuIFdoaWNoIGlzIG5vdAotCSAgcGFydGljdWxhcmx5IGdvb2QgZm9yIHBlcmZvcm1hbmNlLgotCSAgQ2FuJ3QgY3JlYXRlIEdDYW5jZWxsYWJsZSBpbiA6OnN0YXJ0KCkgaGVyZSBiZWNhdXNlIGl0J3MgdXNlZAotCSAgaW4gY2xpZW50X25ldygpIHdoaWNoIG1heSBiZSBjYWxsZWQgdmlhIHRoZSBhZGQtY2xpZW50IGFjdGlvbgotCSAgc2lnbmFsIHdoaWNoIG1heSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBlbGVtZW50IGlzIHVwIGFuZCBydW5uaW5nLgotCi0yMDE1LTA1LTE5IDE4OjEzOjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQkgIHVkcHNyYzoga2VlcCBHQ2FuY2VsbGFibGUgZmQgYXJvdW5kIGluc3RlYWQgb2YgcmUtY3JlYXRpbmcgaXQgY29uc3RhbnRseQotCSAgT3RoZXJ3aXNlIHdlIGNvbnN0YW50bHkgY3JlYXRlL2Nsb3NlIGV2ZW50IGZpbGUgZGVzY3JpcHRvcnMsCi0JICBldmVyeSBzaW5nbGUgdGltZSB3ZSBjYWxsIGdfc29ja2V0X2NvbmRpdGlvbl90aW1lZF93YWl0KCkgb3IKLQkgIGdfc29ja2V0X3JlY2VpdmVfbWVzc2FnZSgpLCBpLmUuIHR3aWNlIHBlciBwYWNrZXQgcmVjZWl2ZWQhCi0JICBUaGlzIHdhcyBub3QgcGFydGljdWxhcmx5IGdvb2QgZm9yIHBlcmZvcm1hbmNlLgotCSAgQWxzbyBvbmx5IGNyZWF0ZSBHQ2FuY2VsbGFibGUgb24gc3RhcnQtdXAuCi0KLTIwMTUtMDUtMjYgMTU6MzM6MzcgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2E6IG92ZXJ3cml0dGVuIHZhbHVlIGFzc2lnbm1lbnQKLQkgIGN1cnBvcyBpcyBzZXQgYW5kIGltbWVkaWF0ZWx5IGFmdGVyLCBzZXQgYWdhaW4uIFJlbW92ZSB0aGUgcmVkdW5kYW50Ci0JICBhc3NpZ25tZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTkwOQotCi0yMDE1LTA1LTIzIDEzOjQ3OjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwdnJhd2RlcGF5OiBkb24ndCBzaGFkb3cgZXhpc3Rpbmcgb3V0YnVmIHZhcmlhYmxlCi0JICBBbmQgZml4IHVucmVmIG9mIHRoZSB3cm9uZyBvbmUgd2hpY2ggd2lsbCBjb250YWluIE5VTEwKLQkgIGluIGFuIGVycm9yIGNvZGUgcGF0aC4KLQotMjAxNS0wNS0yMyAxMzoyMzoyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5Lmg6Ci0JICBydHB2cmF3ZGVwYXk6IG1hcC91bm1hcCBvdXRwdXQgZnJhbWUgb25seSBvbmNlLCBub3QgZm9yIGV2ZXJ5IGlucHV0IHBhY2tldAotCSAgTWFwIG91dHB1dCBidWZmZXIgYWZ0ZXIgY3JlYXRpbmcgaXQgYW5kIGtlZXAgaXQgbWFwcGVkCi0JICB1bnRpbCB3ZSdyZSBkb25lIHdpdGggaXQgaW5zdGVhZCBvZiBtYXBwaW5nL3VubWFwcGluZwotCSAgaXQgZm9yIGV2ZXJ5IHNpbmdsZSBpbnB1dCBidWZmZXIuCi0KLTIwMTUtMDUtMjUgMDg6NDc6NDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZW1vdmUgZml4bWUgZnJvbSAyMDA2Ci0JICBJdCBoYXMgYmVlbiB2ZXJpZmllZCBieSB1c2Ugb3ZlciB0aW1lLgotCi0yMDE1LTA1LTIzIDE0OjM2OjQxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IHJldmVyc2UgcGxheWJhY2sgb2YgZnJhZ21lbnRlZCBtZWRpYQotCSAgcXRkZW11eCBjcmVhdGVzIGEgc2FtcGxlcyBhcnJheSBhbmQgZ2V0cyB0aGUgdGltZXN0YW1wcyBmb3IgYnVmZmVycyBieQotCSAgYWNjdW11bGF0aW5nIHRoZWlyIGR1cmF0aW9ucy4gV2hlbiBkb2luZyByZXZlcnNlIHBsYXliYWNrIG9mIGZyYWdtZW50cywKLQkgIGFjY3VtdWxhdGluZyBzYW1wbGVzIHdpbGwgbGVhZCB0byB3cm9uZyB0aW1lc3RhbXBzIGFzIHRoZSB0aW1lc3RhbXBzCi0JICBzaG91bGQgZ28gZGVjcmVhc2luZyBmcm9tIGZyYWdtZW50IHRvIGZyYWdtZW50IGFuZCB0aGUgYWNjdW11bGF0aW9uCi0JICB3aWxsIHByb2R1Y2Ugd3JvbmcgcmVzdWx0cy4KLQkgIEluIHRoaXMgY2FzZSwgd2hlbiByZWNlaXZpbmcgYSBkaXNjb250IGZvciBmcmFnbWVudGVkIHJldmVyc2UgcGxheWJhY2ssCi0JICB0aGUgcHJldmlvdXMgc2FtcGxlcyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZmx1c2hlZCBiZWZvcmUgbmV3IGRhdGEKLQkgIGlzIHByb2Nlc3NlZC4KLQotMjAxNS0wNS0yMyAwMTowMzoxOCArMDkwMCAgSmltbXkgT2huIDx5b25namluLm9obkBsZ2UuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSAgc3BsaXRmaWxlc3JjOiBJbXBsZW1lbnQgYmluYXJ5IHNlYXJjaCBpbiBmaW5kX3BhcnRfZm9yX29mZnNldAotCSAgSW1wbGVtZW50IGJpbmFyeSBzZWFyY2ggdXNpbmcgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTY5MAotCi0yMDE1LTA1LTIxIDEzOjI2OjUzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBEb24ndCBjcmFzaCBpZiB3ZSByZWNlaXZlIEZJUi9QTEkgZnJvbSBhIHNvdXJjZSB3ZSBkb24ndCBrbm93Ci0KLTIwMTUtMDUtMjEgMDk6MzU6NTggKzAyMDAgIFNhbnRpYWdvIENhcm90LU5lbWVzaW8gPHNhbmNhbmVAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBGaXggY29sbGVjdGlvbiBvZiBzdGF0aXN0aWNzCi0JICBTdGF0cyBzaG91bGQgYmUgY29sbGVjdGVkIG9uIHRoZSBtZWRpYSBydHAgc291cmNlIG5vdCBpbiB0aGUKLQkgIHNlbmRlciBvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NjY5Ci0KLTIwMTUtMDQtMjAgMTA6MDc6MzAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBtdWx0aWZpbGVzaW5rOiBBZGQgYSBuZXcgbWF4LWR1cmF0aW9uIGZpbGUgc3dpdGNoaW5nIG1vZGUKLQkgIFRoaXMgbmV3IG1vZGUgZW5zdXJlcyB0aGF0IGZpbGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbiBkdXJhdGlvbgotCSAgYmFzZWQgb24gaW5jb21pbmcgYnVmZmVyIFBUUyAoYW5kIGR1cmF0aW9uIGlmIHByZXNlbnQpCi0JICBOb3RlOgotCSAgKiBZb3UgbmVlZCB0aW1lc3RhbXBlZCBidWZmZXJzIChkdWgpLiBJZiBzb21lIG9mIHRoZSBpbmNvbWluZyBidWZmZXJzIGRvbid0Ci0JICBoYXZlIFBUUywgdGhlbiBpdCB3aWxsIGp1c3QgYWNjZXB0IHRoZW0gaW4gdGhlIGN1cnJlbnQgZmlsZQotCi0yMDE1LTA0LTE3IDE2OjE4OjMyICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IHN0cmVhbWxpbmUgdGhlIGZpbGUtc3dpdGNoIGNvZGUgYSBiaXQKLQkgIFVzZSB0aGUgc2FtZSBmdW5jdGlvbnMgcmVnYXJkbGVzcyBvZiB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcKLQotMjAxNS0wNC0wMiAxMzozNToxOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkgIG11bHRpZmlsZXNpbms6IGFkZCAiYWdncmVnYXRlLWdvcHMiIHByb3BlcnR5IHRvIHByb2Nlc3MgR09QcyBhcyBhIHdob2xlCi0JICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbmV4dC1maWxlPW1heC1zaXplCi0JICAoYW5kIHBlcmhhcHMgYSBmdXR1cmUgbmV4dC1maWxlPW1heC1kdXJhdGlvbikgdG8gbWFrZSBzdXJlIHRoYXQKLQkgIGVhY2ggZmlsZSBwYXJ0IHN0YXJ0cyBjbGVhbmx5IHdpdGggYSBrZXkgZnJhbWUgYW5kIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXJzLgotCSAgSW4gb3JkZXIgZm9yIHRoaXMgcHJvcGVydHkgdG8gd29yayBjb3JyZWN0bHksIHVwc3RyZWFtIGVsZW1lbnRzIHNob3VsZCBtYWtlCi0JICBzdXJlIHRoYW4gYW55IGhlYWRlcnMgdGhhdCBuZWVkIHRvIGJlIHdyaXR0ZW4gaW4gYSBzdGFuZGFsb25lIGZpbGUgYXJlOgotCSAgMSkgaW4gdGhlIHN0cmVhbWhlYWRlciBjYXBzIGZpZWxkCi0JICAyKSBhbmQvb3IgaW4gdGhlIHN0cmVhbSBhcyBvbmUgb3IgbW9yZSBidWZmZXJzIG1hcmtlZCB3aXRoIEdTVF9CVUZGRVJfRkxBR19IRUFERVIKLQkgIHRoYXQgYXJlIGp1c3QgYmVmb3JlIHRoZSBrZXlmcmFtZSBidWZmZXIKLQkgIFRoaXMgaXMgdXNlZnVsIGZvciBNUEVHLVRTL01QRUctUFMgZmlsZSBzZWdtZW50aW5nIGluCi0JICBjb21iaW5hdGlvbiB3aXRoIG1wZWd0c211eCBvciBtcGVncHNtdXguCi0JICBPcmlnaW5hbCBwYXRjaCBieTogVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotMjAxNS0wNS0yMCAxNjozNzoyMiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogVXNlIHNpbmdsZS1pbmNsdWRlIGhlYWRlciBmb3IgdGhlIFJUU1AgbGlicmFyeQotCi0yMDE0LTEwLTI0IDIzOjQ3OjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwOiBkb24ndCB1c2Ugc29vbi10by1iZS1kZXByZWNhdGVkIGdfY2FuY2VsbGFibGVfcmVzZXQoKQotCSAgRnJvbSB0aGUgQVBJIGRvY3VtZW50YXRpb246ICJOb3RlIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IG5vdAotCSAgYSBnb29kIGlkZWEgdG8gcmV1c2UgYW4gZXhpc3RpbmcgY2FuY2VsbGFibGUgZm9yIG1vcmUKLQkgIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgaGFzIGJlZW4gY2FuY2VsbGVkIG9uY2UsIGFzIHRoaXMKLQkgIGZ1bmN0aW9uIG1pZ2h0IHRlbXB0IHlvdSB0byBkby4gVGhlIHJlY29tbWVuZGVkIHByYWN0aWNlCi0JICBpcyB0byBkcm9wIHRoZSByZWZlcmVuY2UgdG8gYSBjYW5jZWxsYWJsZSBhZnRlciBjYW5jZWxsaW5nCi0JICBpdCwgYW5kIGxldCBpdCBkaWUgd2l0aCB0aGUgb3V0c3RhbmRpbmcgYXN5bmMgb3BlcmF0aW9ucy4KLQkgIFlvdSBzaG91bGQgY3JlYXRlIGEgZnJlc2ggY2FuY2VsbGFibGUgZm9yIGZ1cnRoZXIgYXN5bmMKLQkgIG9wZXJhdGlvbnMuIgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTEzMgotCi0yMDE1LTA1LTE4IDIwOjEzOjAxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIFJldmVydCAiZG9jOiBXb3JrYXJvdW5kIGd0a2RvYyBpc3N1ZSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMTc5N2M4ZjhiMTJkN2Y0YzdhOTQ0NGM5NGYzNGY0ZDA4ZWM4NTk0NS4KLQkgIFRoaXMgaXMgZml4ZWQgYnkgdGhlIGd0ay1kb2MgMS4yMyByZWxlYXNlLgotCSAgPHBhcmE+IGNhbm5vdCBjb250YWluIDxyZWZzZWN0Mj46Ci0JICBodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3RkZy9lbi9odG1sL3BhcmEuaHRtbAotCSAgaHR0cDovL3d3dy5kb2Nib29rLm9yZy90ZGcvZW4vaHRtbC9yZWZzZWN0Mi5odG1sCi0KLTIwMTUtMDUtMTggMTY6NDA6MjEgKzAyMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkgIHJ0cGc3MjZwYXk6IGZpeCBjYXBzIGxlYWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1NDQKLQotMjAxNS0wNS0xOCAxNjozNDoxMyArMDIwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JICBydHBnNzI2ZGVwYXk6IGRvbid0IGxlYWsgaW5wdXQgYnVmZmVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5NTQzCi0KLTIwMTUtMDUtMTggMTc6Mzg6MzEgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiBRdWV1ZSBiYWQgcGFja2V0cyBpbnN0ZWFkIG9mIGRyb3BwaW5nIHRoZW0KLQkgIFNvIHdlIGNhbiBzZW5kIHRoZW0gb3V0IG9uY2Ugd2UgZm91bmQgdGhlIG5leHQsIGNvbnNlY3V0aXZlIHNlcXVlbmNlIG51bWJlciBpbgotCSAgY2FzZSBvbmUgaXMgZm9sbG93aW5nLgotCi0yMDE1LTA1LTE4IDE3OjM4OjE0ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogVXNlIGdfcXVldWVfZm9yZWFjaCgpIHRvIHVucmVmIGFsbCBidWZmZXJzIGluIHF1ZXVlcwotCi0yMDE1LTA1LTE4IDE3OjE5OjMxICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogUmVmYWN0b3Igc2VxbnVtIGNvbXBhcmlzb24gY29kZSBhIGJpdAotCi0yMDE1LTA1LTE4IDE3OjA4OjUzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogQWxsb3cgc2VxdWVuY2UgbnVtYmVyIHdyYXBhcm91bmQgZHVyaW5nIHByb2JhdGlvbgotCi0yMDE1LTA1LTE4IDE3OjA3OjIzICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogTWFrZSBzZXF1ZW5jZSBudW1iZXIgY29tcGFyaXNvbiBjb2RlIG1vcmUgcmVhZGFibGUKLQkgIC4uLiBieSB1c2luZyBnc3RfcnRwX2J1ZmZlcl9jb21wYXJlX3NlcW51bSgpIGFuZCBzaWduZWQgaW50ZWdlcnMKLQkgIGluc3RlYWQgb2YgaW1wbGljdGx5IHVzaW5nIGVmZmVjdHMgb2YgaW50ZWdlciBvdmVyL3VuZGVyZmxvd3MuCi0KLTIwMTUtMDQtMjIgMTg6NTQ6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBXaGVuIGRldGVjdGluZyBhIGh1Z2Ugc2VxbnVtIGdhcCwgd2FpdCBmb3IgNSBjb25zZWN1dGl2ZSBwYWNrZXRzIGJlZm9yZSByZXNldHRpbmcgZXZlcnl0aGluZwotCSAgSXQgbWlnaHQganVzdCBiZSBhIGxhdGUgcmV0cmFuc21pc3Npb24gb3Igc3B1cmlvdXMgcGFja2V0IGZyb20gZWxzZXdoZXJlLCBidXQKLQkgIHJlc2V0dGluZyBldmVyeXRoaW5nIHdvdWxkIG1lYW4gdGhhdCB3ZSB3aWxsIGNhdXNlIGEgbm90aWNlYWJsZSBoaWNrdXAuIExldCdzCi0JICBnZXQgc29tZSBjb25maWRlbmNlIGZpcnN0IHRoYXQgdGhlIHNlcXVlbmNlIG51bWJlcnMgY2hhbmdlZCBmb3Igd2hhdGV2ZXIKLQkgIHJlYXNvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc5MjIKLQotMjAxNS0wNS0xNiAyMzozNzowNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgZG9jOiBXb3JrYXJvdW5kIGd0a2RvYyBpc3N1ZQotCSAgV2l0aCBndGtkb2MgMS4yMiwgdGhlIFhNTCBnZW5lcmF0b3IgZmFpbHMgd2hlbiBhIGl0ZW1pemVkbGlzdCBpcwotCSAgZm9sbG93ZWQgYnkgYSByZWZzZWN0Mi4gV29ya2Fyb3VuZCB0aGUgaXNzdWUgYnkgd3JhcHBpbmcgdGhlCi0JICByZWZzZWN0MiBpbnRvIHBhcmEuCi0KLTIwMTUtMDEtMjMgMTM6NTc6NDAgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jOgotCSAgcXRkZW11eDogYXZvaWQgd3Jvbmcgd2FybmluZ3Mgb24gdW5rbm93biBub2RlIHR5cGVzCi0JICBBZGQgJ25hbWUnIGFuZCAnbWVhbicgZm91cmNjcywgYXMgd2UgaGFuZGxlIHRoZW0uIFJpZ2h0IG5vdyBlYWNoIHVzZSB3b3VsZAotCSAgdHJpZ2dlciBhIHdhcm5pbmcuCi0KLTIwMTUtMDUtMDggMTk6MTM6MDAgKzAyMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuaDoKLQkgIHJ0cGc3MjZkZXBheTogYWRkIGJsb2NrX2FsaWduIHRvIG91dHB1dCBjYXBzCi0JICBJdCBpcyBuZWVkZWQgdG8gY29ycmVjdGx5IG5lZ290aWF0ZSBjYXBzIHdpdGggbWF0cm9za2FtdXgKLQkgIGFuZCBtb3N0IG90aGVyIG11eGVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkxMjkKLQotMjAxNS0wNS0xMiAxMzo0MTo1OCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBGaXggdGltZS1kb21haW4gY29udm9sdXRpb24gd2l0aCA+MSBjaGFubmVscwotCSAgaW5wdXRfc2FtcGxlcyBpcyB0aGUgbnVtYmVyIG9mIGZyYW1lcywgYnV0IHdlIHVzZWQgaXQgYXMgdGhlIG51bWJlciBvZgotCSAgc2FtcGxlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcyMDQKLQotMjAxNS0wNS0xMiAxMjoxMzoxNiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmM6Ci0JICB2cFs4OV1lbmM6IFByb3Blcmx5IGNvbnZlcnQgYmV0d2VlbiBHU3RyZWFtZXIgYW5kIGVuY29kZXIgdGltZWJhc2UKLQkgIC4uLiBieSBzd2l0Y2hpbmcgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciB3aGVuIHNjYWxpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MTIyCi0KLTIwMTUtMDUtMTEgMTM6MzM6MjYgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnBbODldZW5jOiBEb24ndCBzZXQgdGltZWJhc2UgZnJvbSB0aGUgZnJhbWVyYXRlCi0JICBUaGUgZnJhbWVyYXRlIHZlcnkgb2Z0ZW4gaXMganVzdCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBpZGVhbCBmcmFtZXJhdGUsIG5vdCB0aGUKLQkgIGFjdHVhbCBmcmFtZXJhdGUgb2YgdGhlIHN0cmVhbS4gQnkganVzdCB1c2luZyB0aGUgZnJhbWVyYXRlLCB3ZSBjb25mdXNlIHRoZQotCSAgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBhbGdvcml0aG0gYXMgbXVsdGlwbGUgZnJhbWVzIHdpbGwgbWFwIHRvIHRoZSBzYW1lIFBUUwotCSAgb3IgaGF2ZSBkdXJhdGlvbnMgb2YgMC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkxMjIKLQotMjAxNS0wNS0xMCAxNDoyMTowNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrcGFyc2UuYzoKLQkgIHRlc3RzOiB3YXZwYWNrcGFyc2U6IGZpeCB1bml0IHRlc3QKLQkgIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgyMzcKLQotMjAxNS0wNS0xMCAxMTowNTowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZweC9nc3R2cDlkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2ZW5jLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLmM6Ci0JICBkb2NzOiB1cGRhdGUgZXhhbXBsZSBwaXBlbGluZXMgaW4gZWxlbWVudCBkb2NzCi0JICBNb3N0bHkgZ3N0LWxhdW5jaCAtPiBnc3QtbGF1bmNoLTEuMAotCSAgVXNlIGF1dG92aWRlb3NpbmsvYXV0b2F1ZGlvc2luayBtb3JlIG9mdGVuLgotCSAgU3ByaW5rbGUgc29tZSBjb252ZXJ0ZXJzIGhlcmUgYW5kIHRoZXJlLgotCi0yMDE1LTA1LTA5IDE5OjQ4OjU1ICswMjAwICBQaW90ciBEcsSFZyA8cGlvdHJkcmFnQGdtYWlsLmNvbT4KLQotCSogcG8vUE9URklMRVMuaW46Ci0JICBwbzogdXBkYXRlIFBPVEZJTEVTLmluCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MTYzCi0KLTIwMTUtMDUtMTAgMTA6NTI6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzcmMuYzoKLQkgIHNwbGl0bXV4c3JjOiBtaW5vciBlcnJvciBtZXNzYWdlIGNsZWFuLXVwCi0JICBEb24ndCBwdXQgZmlsZW5hbWUgaW4gZXJyb3IgbWVzc2FnZSBzaG93biB0byB1c2VyLgotCi0yMDE1LTA1LTA3IDE2OjI1OjM2ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZml4IGJ1ZmZlciBsZWFrIHdoZW4gc3RvcmVkIHRvIHNlZWt0YWJsZQotCSAgRml4IGEgbGVhayB3aXRoIHRoZQotCSAgdmFsaWRhdGUuZmlsZS5wbGF5YmFjay5jaGFuZ2Vfc3RhdGVfaW50ZW5zaXZlLnNhbXBsZXNfbXVsdGltZWRpYV9jeF9mbGFjX1llc3RlcmRheV9mbGFjCi0JICBzY2VuYXJpby4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkwNzIKLQotMjAxNS0wNS0wNyAxNzoxMDozNyArMDkwMCAgUGF1bCBIeXVuaWwgPHBhdWwuaHl1bmlsQGxnZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGV4YW1wbGUgcGlwZWxpbmUgaW4gZG9jcwotCSAgVGhlIGdzdC1sYXVuY2ggc2NyaXB0IGZvciBleGFtcGxlIGxhdW5jaCBsaW5lIHRvIHRlc3QgcXRkZW11eCBpcwotCSAgbWlzc2luZyBhIHF1ZXVlIGJlZm9yZSB0aGUgZGVjb2RlYmlucywgb3RoZXJ3aXNlIHRoZSBnc3QtbGF1bmNoLTEuMAotCSAgY29tbWFuZCB3b24ndCB3b3JrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0OTA1NAotCi0yMDE1LTA1LTA3IDE0OjUxOjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBSZXZlcnQgInJ0cHNlc3Npb246IEFsc28gcmVwb3J0IGludGVybmFsIHNvdXJjZXMgaW4gb24tbmV3LXNzcmMgYW5kIG9uLXNzcmMtYWN0aXZlIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBkMjJlYzQ5NjMyOGU2YmE4ZWRiZjJkMDcxZDU2MDhiMmFmMjgzMWU4LgotCSAgQXBwbGljYXRpb24gY29kZSBtaWdodCBleHBlY3QgdGhhdCBpdCBvbmx5IGdldHMgZXh0ZXJuYWwgc291cmNlcyBvbiB0aG9zZQotCSAgc2lnbmFscywgYW5kIGdldCBjb25mdXNlZCBieSB0aGlzLiBJZiBhbnl0aGluZyB3ZSB3b3VsZCBuZWVkIHRvIGFkZCBuZXcKLQkgIHNpZ25hbHMuCi0KLTIwMTUtMDMtMjUgMTU6Mjc6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEFsc28gcmVwb3J0IGludGVybmFsIHNvdXJjZXMgaW4gb24tbmV3LXNzcmMgYW5kIG9uLXNzcmMtYWN0aXZlCi0JICBXaXRob3V0IHRoaXMgaXQgc2VlbXMgaW1wb3NzaWJsZSBmb3IgYW4gYXBwbGljYXRpb24gdG8gZWFzaWx5IGdldCBub3RpZmllZAotCSAgYWJvdXQgdGhlIGludGVybmFsIHNzcmNzIHRoYXQgYXJlIGNyZWF0ZWQsIGUuZy4gc2VuZGVyIHNvdXJjZXMsIGFuZCBhbHNvCi0JICB0byBrbm93IHdoZW4gdGhleSBhcmUgYWN0aXZlIGFuZCBwcm9kdWNlIFJUQ1AgcGFja2V0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY3NDcKLQotMjAxNS0wNS0wNCAxOToyNjoxNCArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGZpeCBmcmFtZSBsZWFrcyBpbiBoYW5kbGVfZnJhbWUoKSBpbXBsZW1lbnRhdGlvbgotCSAgaGFuZGxlX2ZyYW1lKCkgaXMgc3VwcG9zZWQgdG8gY29uc3VtZSBAZnJhbWUsIHNvIGlmIHdlIGRvbid0IGNhbGwKLQkgIGdzdF92aWRlb19kZWNvZGVyX2Ryb3BfZnJhbWUoKSBvciBnc3RfdmlkZW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUoKSB3ZSBoYXZlIHRvCi0JICByZWxlYXNlIGl0IG1hbnVhbGx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODkwOQotCi0yMDE1LTA1LTA0IDE2OjUwOjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBGaXggdXAgbGFzdCBjb21taXQKLQotMjAxNS0wNS0wNCAxNjo0NjowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogT25seSBkbyBSVFggd2hlbiB1c2luZyBhIGZlZWRiYWNrIHByb2ZpbGUKLQotMjAxNS0wNS0wNCAxMzo1MDozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogVGhlIHN0YXRzIG1pbl9pbnRlcnZhbCBpcyBpbiBzZWNvbmRzLCBub3QgbmFub3NlY29uZHMKLQkgIFdlIGhhdmUgdG8gc2NhbGUgaXQgdG8gY29tcGFyZSBpdCBhZ2FpbnN0IG91ciBjbG9jayB0aW1lcy4KLQotMjAxNS0wNS0wNCAxMTozODoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogT25seSByZXR1cm4gVFJVRSBpZiBlYXJseSBmZWVkYmFjayB3YXMgcmVxdWVzdGVkIGFscmVhZHkgYW5kIGl0J3MgZWFybHkgZW5vdWdoCi0KLTIwMTUtMDQtMzAgMTU6NDI6MzQgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2E6IHJlbW92ZSB1bnVzZWQgcHJvcGVydHkgZW51bSBpdGVtcwotCi0yMDE1LTA0LTMwIDEyOjEzOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBidWZmZXIgbGVhayBvbiBlb3MgaW4gcHVzaCBtb2RlCi0JICBCYXNlZCBvbiBwYXRjaCBieSBHdWlsbGF1bWUgRGVzbW90dGVzLgotCSAgc2NlbmFyaW86IHZhbGlkYXRlLmh0dHAucGxheWJhY2suc2Vla193aXRoX3N0b3AucmF3X2gyNjRfMV9tcDQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg2MTcKLQotMjAxNS0wNC0yOSAxOTo0MToyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBDaGVjayBmb3Igc2l6ZXMgb2YgdGhlIHJkcmYgKHJlZGlyZWN0KSBhdG9tIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGRhdGEgYW5kIHVzZSBnX3N0cm5kdXAoKSBpbnN0ZWFkIG9mIGdfc3RyZHVwKCkKLQkgIFRoYW5rcyB0byBSYWxwaCBHaWxlcyBmb3IgcmVwb3J0aW5nIHRoaXMuCi0KLTIwMTUtMDQtMjkgMTU6NTI6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IE9ubHkgZW5hYmxlIHJldHJhbnNtaXNzaW9ucyBpZiB0aGVyZSBpcyByZXRyYW5zbWlzc2lvbiBpbmZvIGluIHRoZSBTRFAKLQkgIE90aGVyd2lzZSB3ZSdyZSBnb2luZyB0byBzZW5kIGVhcmx5IFJUQ1AgYW5kIE5BQ0tzIGluIG5vbi1mZWVkYmFjayBzZXNzaW9ucwotCSAgdG9vLCB3aGljaCB3aWxsIGNvbmZ1c2Ugc2VydmVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg2MjcKLQotMjAxNS0wMi0xMSAxODowOToyNCArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JICBkdmRlbXV4OiBleHRyYWN0IHJlY29yZGluZyB0aW1lCi0JICBFeHRyYWN0cyB0aGUgcmVjb3JkZWQgdGltZSBvZiB0aGUgZHYgZmlsZSBmcm9tCi0JICB0aGUgbWV0YWRhdGEgYW5kIHB1dHMgaXQgaW50byB0aGUgZ2xvYmFsIHRhZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNjU3Ci0KLTIwMTUtMDQtMjggMTU6NTk6MjUgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGZpeCBzZWVrIGV2ZW50IGxlYWsKLQkgIGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCgpIGRvZXNuJ3QgY29uc3VtZSB0aGUKLQkgIGV2ZW50IHNvIHdlIGhhdmUgdG8gdW5yZWYgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4NTg0Ci0KLTIwMTUtMDQtMjggMTU6NDI6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IFNlbmQgcGVuZGluZyB0YWdzIHdoZW4gYWRkaW5nIGEgbmV3IHBhZAotCSAgV2UgbWlnaHQndmUgcGFyc2VkIHRob3NlIHRhZ3MgYmVmb3JlIGFscmVhZHkgYW5kIHRyaWVkIHRvIHB1c2ggdGhlbSB0bwotCSAgbm9uLWV4aXN0aW5nIHBhZHMgYmVmb3JlLiBOb3cgbGV0J3MgZG8gaXQgZm9yIHJlYWwuCi0KLTIwMTUtMDQtMjMgMTg6NTc6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JICBydHBzdGF0czogQXZlcmFnZSBSVENQIHBhY2tldCBzaXplIGlzIGluIGJ5dGVzLCBiYW5kd2lkdGhzIGluIGJpdHMKLQkgIFdlIG5lZWQgdG8gY29udmVydCB0aGUgc2l6ZSB0byBiaXRzIGZvciBvdXIgY2FsY3VsYXRpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Nzg2MwotCi0yMDE1LTA0LTIzIDE4OjUzOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5jOgotCSAgcnRwc3RhdHM6IFVzZSB0aGUgc2FtZSBsb3dlciBsaW1pdCBmb3IgUlRDUCBiYW5kd2lkdGggdG8gc3RvcCBzZW5kaW5nIFJUQ1AgZXZlcnl3aGVyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0Nzg2MwotCi0yMDE1LTA0LTE0IDE4OjQxOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBVc2UgYmFuZHdpZHRoIGNhbGN1bGF0aW9uIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiBzb21lIGFyYml0cmFyeSBoYXJkY29kZWQgdmFsdWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc4NjMKLQotMjAxNS0wNC0yMyAxODo0OTozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogQmFuZHdpZHRoIGlzIHN1cHBvc2VkIHRvIGJlIGluIGJpdHMvcywgbm90IGJ5dGVzL3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc4NjMKLQotMjAxNS0wNC0yNyAxNjozNjoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEZpeCBSVFggdW5pdCB0ZXN0Ci0JICBUaGUgY2FsY3VsYXRpb25zIHdlcmUgYSBiaXQgb2ZmIGV2ZXJ5d2hlcmUsIGV2ZW4gYmVmb3JlIHRoZSBjaGFuZ2VzIGRvbmUKLQkgIHJlY2VudGx5IHRvIHRoZSBkZWxheSBmb3IgUlRYIG9mIGV4cGVjdGVkIGZ1dHVyZSBwYWNrZXRzLiBJdCBvbmx5IHdvcmtlZCBieQotCSAgYWNjaWRlbnQsIGJ1dCBub3cgdGhlIGNhbGN1bGF0aW9ucyBhcmUgYWxsIGNvcnJlY3QgYWdhaW4uIEhvcGVmdWxseS4KLQotMjAxNS0wNC0yNyAxMToyMjoxMSArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2JyZWFrbXlkYXRhLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9jcHVyZXBvcnQuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdnNlZWsuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9mbHYvZ3N0aW5kZXguYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgUmVuYW1lIHByb3BlcnR5IGVudW1zIGZyb20gQVJHXyB0byBQUk9QXwotCSAgUHJvcGVydHkgZW51bSBpdGVtcyBzaG91bGQgYmUgbmFtZWQgUFJPUF8gZm9yIGNvbnNpc3RlbmN5IGFuZCByZWFkYWJpbGl0eS4KLQotMjAxNS0wNC0yNSAwMjo0OTo1OCArMDMwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEZpeCAic3RhdHMiIHByb3BlcnR5IGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDg0MzYKLQotMjAxNS0wNC0yNiAxNzo1NDo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQW5kcm9pZC5tazoKLQkqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hcGV0YWcvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdXBhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSogZ3N0L2N1dHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2R0bWYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSogZ3N0L2ZseC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nb29tL01ha2VmaWxlLmFtOgotCSogZ3N0L2dvb20yazEvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaWN5ZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaWQzZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaW1hZ2VmcmVlemUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9pc29tcDQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbGF3L01ha2VmaWxlLmFtOgotCSogZ3N0L2xldmVsL01ha2VmaWxlLmFtOgotCSogZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtOgotCSogZ3N0L21vbm9zY29wZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9tdWx0aWZpbGUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbXVsdGlwYXJ0L01ha2VmaWxlLmFtOgotCSogZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkqIGdzdC9zaGFwZXdpcGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvY3JvcC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3dhdmVuYy9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgb2Jzb2xldGUgQW5kcm9pZCBidWlsZCBjcnVmdAotCSAgVGhpcyBpcyBub3QgbmVlZGVkIGFueSBsb25nZXIuCi0KLTIwMTUtMDQtMjQgMTM6NTU6MDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgIHZpZGVvY3JvcDogcHJpbnQgdGhlIHByb3BlcnR5IHZhbHVlcyB3aGVuIHNldAotCSAgSW5zdGVhZCBvZiBwcmludGluZyB0aGUgY3VycmVudGx5IHVzZWQgdmFsdWVzLiBUaGUgbG9nIGlzIG1lYW50Ci0JICB0byBzaG93IHdoYXQgdGhlIHByb3BlcnRpZXMgY2hhbmdlZCB0bywgbm90IHdoYXQgaXMgYmVpbmcgY3VycmVudGx5Ci0JICB1c2VkLgotCi0yMDE1LTA0LTI0IDE3OjAxOjEwICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHF1ZXVlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgcmVtb3ZlIHVudXNlZCBlbnVtIGl0ZW1zIFBST1BfTEFTVAotCSAgVGhpcyB3ZXJlIHByb2JhYmx5IGFkZGVkIHRvIHRoZSBlbnVtcyBkdWUgdG8gY2FyZ28gY3VsdCBwcm9ncmFtbWluZyBhbmQgYXJlCi0JICB1bnVzZWQuIFJlbW92aW5nIHRoZW0uCi0KLTIwMTUtMDQtMjQgMDA6MzA6MzUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IGZpeCBpbmZpbml0ZSBsb29wIGZvciB2ZXJ5IGxvdyBpbnRlcnZhbCB2YWx1ZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU1MTUKLQotMjAxNS0wNC0yMyAxNjowODo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogZGVmaW5lIEdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTgotCSAgTWFrZSBzdXJlIHRoZSB0ZXN0IGVudmlyb25tZW50IGlzIHNldCB1cC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NjI0Ci0KLTIwMTUtMDQtMjMgMTY6MDg6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYnVtcCBhdXRvbWFrZSByZXF1aXJlbWVudCB0byAxLjE0IGFuZCBhdXRvY29uZiB0byAyLjY5Ci0JICBUaGlzIGlzIG9ubHkgcmVxdWlyZWQgZm9yIGJ1aWxkcyBmcm9tIGdpdCwgcGVvcGxlIGNhbiBzdGlsbAotCSAgYnVpbGQgdGFyYmFsbHMgaWYgdGhleSBvbmx5IGhhdmUgb2xkZXIgYXV0b3Rvb2xzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03NDc2MjQKLQotMjAxNS0wNC0yMyAxNjowNjo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogLmdpdGlnbm9yZToKLQkgIFVwZGF0ZSAuZ2l0aWdub3JlCi0KLTIwMTUtMDQtMjMgMDk6NTU6NTkgKzAyMDAgIEplc3BlciBMYXJzZW4gPGtub3JyLmplc3BlckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IEZpeCBSVENQIGNhcHMgbGVhawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03NDgzNTMKLQotMjAxNS0wNC0yMiAyMDoyNDoyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IFdoZW4gcmVxdWVzdCByZXRyYW5zbWlzc2lvbnMgZm9yIGZ1dHVyZSBwYWNrZXRzLCBjb25zaWRlciB0aGUgcGFja2V0IHNwYWNpbmcgaW4gdGhlIGV4dHJhIGRlbGF5Ci0JICBXZSBub3cgdGFrZSB0aGUgbWF4aW11bSBvZiAyKmppdHRlciBhbmQgMC41KnBhY2tldF9zcGFjaW5nIGZvciB0aGUgZXh0cmEKLQkgIGRlbGF5LiBJZiBqaXR0ZXIgaXMgdmVyeSBsb3csIHRoaXMgc2hvdWxkIHByZXZlbnQgdW5uZWNlc3NhcnkgcmV0cmFuc21pc3Npb24KLQkgIHJlcXVlc3RzIHRvIHNvbWUgZGVncmVlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODA0MQotCi0yMDE1LTA0LTIyIDE5OjQxOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogVGFrZSBhIHJ1bm5pbmcgYXZlcmFnZSBvZiB0aGUgcGFja2V0IHNwYWNpbmdzIGluc3RlYWQgb2YganVzdCB0aGUgbGF0ZXN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ4MDQxCi0KLTIwMTUtMDQtMTMgMTE6MjA6NDAgKzAyMDAgIE1pZ3VlbCBQYXLDrXMgRMOtYXogPG1wYXJpc2RpYXpAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogQWRkICJydHgtbmV4dC1zZXFudW0iIHByb3BlcnR5Ci0JICBJZiB0aGlzIGlzIHNldCB0byBGQUxTRSwgcnRwaml0dGVyYnVmZmVyIHdpbGwgbm90IHJlcXVlc3QgcmV0cmFuc21pc3Npb25zIGZvcgotCSAgZnV0dXJlIHBhY2tldHMgYmFzZWQgb24gd2hlbiB0aGV5IGFyZSBlc3RpbWF0ZWQgdG8gYXJyaXZlLgotCSAgU2VlIGFsc28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODA0MQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTg2OAotCi0yMDE1LTA0LTIyIDE5OjI5OjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JICBydHhyZWNlaXZlOiBQdXQgZGVidWcgb3V0cHV0IGZvciByZXRyYW5zbWlzc2lvbiByZXF1ZXN0cyBhdCB0aGUgcmlnaHQgcGxhY2UKLQkgIEJlZm9yZSBpdCB3YXMgb25seSBldmVyIHByaW50ZWQgb25jZSBmb3IgZXZlcnkgdGltZSBhIHNzcmMgd2FzIGFzc29jaWF0ZWQgd2l0aAotCSAgYSBzcGVjaWZpYyBzdHJlYW0uCi0KLTIwMTUtMDQtMjIgMTg6MDU6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBkb24ndCBhZGQgdGhlIHNhbWUgaW50ZXJsYWNlIG1vZGUgdHdpY2UKLQkgIFNvbWUgZHJpdmVycyBtb2RpZnkgdGhlIGludGVybGFjZSBtb2RlIHRvIHByb2dyZXNzaXZlLCBubyBtYXR0ZXIgd2hhdAotCSAgaW5wdXQgeW91IGdpdmUgdGhlbSwgbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgYWRkIHRoZSBzYW1lIGludGVybGFjZSBtb2RlCi0JICB0d2ljZS4KLQotMjAxNS0wNC0yMSAxNjozNDoyMSArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIGVxdWFsaXplcjogZml4IGR5bmFtaWMgY2hhbmdlcyBvbiBiYW5kcwotCSAgV2hlbiB3ZSBhcmUgaW4gcGFzc3Rocm91Z2gsIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gZG9lc24ndCBydW4gYW5kIGlmIHRoZQotCSAgcGFzc3Rocm91Z2ggY2hlY2sgaXMgaW4gdGhpcyBmdW5jdGlvbiBpdCB3aWxsIG5ldmVyIGJlIGRlYWN0aXZhdGVkLiBGaXggdGhpcyBieQotCSAgY2hlY2tpbmcgZGlyZWN0bHkgd2hlbmV2ZXIgYSBnYWluIGlzIGNoYW5nZWQuCi0JICBBbHNvIHNldCB0aGUgcGFzc3Rocm91Z2ggdG8gVFJVRSBhdCBpbml0IGJlY2F1c2UgdGhlIGdhaW5zIGRlZmF1bHQgdG8gMCwgc28gd2UKLQkgIGNhbiBwYXNzdGhyb3VnaCB1bnRpbCBhbnkgZ2FpbiBwcm9wZXJ0eSBpcyBjaGFuZ2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0ODA2OAotCi0yMDE1LTA0LTIyIDEwOjMwOjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBJTlNUQUxMOgotCSAgUmVtb3ZlIElOU1RBTEwgZmlsZQotCSAgYXV0b3Rvb2xzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhpcywgYW5kIHdoZW4gdXNpbmcgZGlmZmVyZW50IHZlcnNpb25zCi0JICBmb3IgYXV0b2dlbi5zaCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBjaGFuZ2VzIHRvIGEgZmlsZSB0cmFja2VkIGJ5IGdpdC4KLQotMjAxNS0wNC0yMiAxMDozMDoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogTElDRU5TRV9yZWFkbWU6Ci0JICBSZW1vdmUgTElDRU5TRV9yZWFkbWUKLQkgIEl0J3MgY29tcGxldGVseSBvdXRkYXRlZCBhbmQganVzdCBjb25mdXNpbmcsIGJldHRlciBpZiBwZW9wbGUgYXJlCi0JICBmb3JjZWQgdG8gbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgaW4gcXVlc3Rpb24gdGhhbiB0cnVzdGluZyB0aGlzIGZpbGUuCi0KLTIwMTUtMDQtMjEgMTU6MjE6MzMgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGNhc3QgdW51c2VkIHJldHVybiB0byB2b2lkCi0JICBRdWVsbCB1bmNoZWNrZWQgcmV0dXJuIHZhbHVlIGRlZmVjdCBieSBjYXN0aW5nIHRoZSByZXR1cm4gdmFsdWUgdG8gdm9pZCBhbmQKLQkgIG1ha2luZyBpdCBleHBsaWNpdCBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLgotCSAgQ0lEICMyMDYwMzEKLQotMjAxNS0wNC0xNyAxMzowODowMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSAgdnA4ZGVjOiBvcHRpbWl6ZSB2cHggaW1hZ2UgdG8gZ3N0YnVmZmVyIGNvcHkgd2hlbiBzdHJpZGVzIG1hdGNoCi0JICBTb2x2aW5nIHRoaXMgRklYTUUuIENvcHkgdGhlIGZ1bGwgcGxhbmUgd2hlbiBzdHJpZGVzIGFyZSB0aGUgc2FtZQotCi0yMDE1LTA0LTE2IDE1OjExOjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmM6Ci0JICB2cDlkZWM6IG9wdGltaXplIHZweCBpbWFnZSB0byBnc3RidWZmZXIgY29weSB3aGVuIHN0cmlkZXMgbWF0Y2gKLQkgIFNvbHZpbmcgdGhpcyBGSVhNRS4gQ29weSB0aGUgZnVsbCBwbGFuZSB3aGVuIHN0cmlkZXMgYXJlIHRoZSBzYW1lCi0KLTIwMTUtMDQtMTcgMTM6MzI6NTQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogZml4IG1lbW9yeSBsZWFrCi0KLTIwMTUtMDQtMTcgMDY6NTE6NDYgKzAwMDAgIEFsZXggTydLb25za2kgPGFsZXhhbmRlcm9rb25za2lAZ21haWwuY29tPgotCi0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkgIGljeWRlbXV4OiBGaXggc2VnZmF1bHQgaWYgbWV0YWRhdGEtaW50ZXJ2YWwgaXMgMAotCSAgUHJldmVudHMgYW4gZXh0cmEgdW5yZWYgb2YgR3N0QnVmZmVyIHdoZW4gcGFzc2luZyBhIG5vbi1pY3kgc3RyZWFtIHRocm91Z2gKLQkgIGljeWRlbXV4IHdpdGggbWV0YWRhdGEtaW50ZXJ2YWwgc2V0IHRvIDAuCi0JICBSZXByb2R1Y2libGUgd2l0aDoKLQkgIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249fi90ZXN0c29uZy5tcDMgISBcCi0JICAnYXBwbGljYXRpb24veC1pY3ksbWV0YWRhdGEtaW50ZXJ2YWw9KGludCkwJyAhIGljeWRlbXV4ICEgZGVjb2RlYmluICEgd2F2ZW5jICEgXAotCSAgZmlsZXNpbmsgbG9jYXRpb249fi90ZXN0c29uZy53YXYKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDgwMjQKLQotMjAxNS0wNC0xNyAxMTo1NDoyMyArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JICBhdWRpb2Z4OiBmaXggdHlwbyBpbiBleGFtcGxlIHBpcGVsaW5lcwotCSAgRml4IHR5cG8gaW4gZXhhbXBsZSBwaXBlbGluZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDgwMjIKLQotMjAxNS0wNC0xNSAxODoyMjozNyArMDMwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSAgb3N4YXVkaW86IGZpeCBzcGVsbGluZyBpbiBkZWJ1ZyBtZXNzYWdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTc0NzkzNgotCi0yMDE1LTA0LTE2IDE2OjMzOjQ0ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvZGVtby5jOgotCSAgdGVzdHM6IHNlbGVjdGFibGUgYW1vdW50IG9mIGJhbmRzIGluIGVxdWFsaXplciBkZW1vCi0JICBBZGRpbmcgYW4gb3B0aW9uIGluIHRoZSBlcXVhbGl6ZXIgZGVtbyB0byBtYWtlIHRoZSBudW1iZXIgb2YgYmFuZHMgc2VsZWN0YWJsZS4KLQotMjAxNS0wNC0xNiAxNTozMToyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2UvcnRwcnR4c2VuZDogQWxzbyBwYXNzIGNvcnJlY3Qgc2VxbnVtLW9mZnNldCBhbmQgcGF5bG9hZCB0byB0aGUgUlRYIHJ0cHNvdXJjZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzM5NAotCi0yMDE1LTA0LTA2IDEyOjU2OjUwICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogVHJhY2sgUlRYIHNzcmMgY2FwcwotCSAgVGhpcyBpcyBuZWVkZWQgc28gdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgU1IgZm9yIFJUWCBzdHJlYW0gY29ycmVjdGx5ICh0aGUKLQkgIGNsb2NrIHJhdGUgaXMgcmVxdWlyZWQpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzM5NAotCi0yMDE1LTA0LTE0IDEzOjU2OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JICBydHBydHhzZW5kOiBDb3B5IG92ZXIgdGltZXN0YW1wcyBmcm9tIHRoZSBvcmlnbmFsIGJ1ZmZlcnMgdG8gdGhlIFJUWCBidWZmZXJzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3Mzk0Ci0KLTIwMTUtMDQtMTYgMTY6MDE6NTAgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JICB0ZXN0czogc3dpdGNoIGVxdWFsaXplciBkZW1vIHRvIHBsYXkgZnJvbSB1cmkKLQkgIFN3aXRjaCB0aGUgZXF1YWxpemVyLW5iYW5kcyBkZW1vIHRvIHVzZSB1cmlkZWNvZGViaW4sIHNvIHVzZXJzIGNhbiBsaXN0ZW4gdG8KLQkgIHNvbWV0aGluZyBtb3JlIHBsZWFzYW50IHRoYW4gd2hpdGUgbm9pc2UuIElmIGFueWJvZHkgbWlzc2VzIHRoZSB3aGl0ZSBub2lzZQotCSAgYSB1cmkgaGFuZGxlciB0byBhdWRpb3Rlc3RzcmMgY2FuIGJlIHVzZWQuCi0KLTIwMTUtMDQtMTYgMTE6MTc6MzggKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JICB0ZXN0czogaW1wcm92ZSByZWFkYWJpbGl0eSBvZiBlcXVhbGl6ZXIgZGVtbwotCSAgUmVuYW1lIHZhcmlhYmxlIG5hbWUgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlLCBhZGQgY29tbWVudHMgZm9yIHRoZSB0aHJlZQotCSAgc2NhbGVzIGNyZWF0ZWQgcGVyIGJsb2NrLCBhbmQgc2V0IHRoZSB3aW5kb3cgdGl0bGUuCi0KLTIwMTUtMDQtMTUgMTc6MzI6MzcgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JICB0ZXN0czogYWRkIG1pc3NpbmcgbGljZW5zZSBoZWFkZXIgZm9yIGVxdWFsaXplciBkZW1vCi0KLTIwMTUtMDQtMTYgMTM6MDk6MTkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCB0YWcgbGlzdCBsZWFrcyBvbiBlcnJvciBwYXRocwotCi0yMDE1LTA0LTE2IDEyOjIzOjM4ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggdGFnIGxpc3QgbGVhayBvbiB1bmtub3duIHN0cmVhbSB0eXBlCi0KLTIwMTUtMDQtMDkgMTM6MTk6NDkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9nc3QtcGx1Z2lucy1nb29kLnN1cHA6Ci0JICBzdXBwcmVzc2lvbnM6IGlnbm9yZSBhbiBhcHBhcmVudCBidWcgaW4gc3RydG9kCi0JICBBIGJ1ZmZlciBvdmVycmVhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1NTQKLQotMjAxNS0wNC0xNSAxMTowNzoyNyArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogZG8gbm90IGFjY2VzcyBwcm9wZXJ0eSB2YXJpYWJsZSB3aXRob3V0IHRoZSBvYmplY3QgbG9jaywgdXNlIHRoZSBsb2NhbCBzdGFjayBjb3B5IGluc3RlYWQKLQotMjAxNS0wNC0xNCAxODo0NTo0NCArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogYWRkIHByb2JlIG9uIHRoZSBtdWx0aXF1ZXVlJ3Mgc2luayBwYWQgaW5zdGVhZCBvZiB0aGUgZ2hvc3QgcGFkCi0JICBiZWNhdXNlIF9yZWxlYXNlX3BhZCB0cmllcyB0byByZWxlYXNlIGl0IGZyb20gY3R4LT5zaW5rcGFkLCB3aGljaCBpcwotCSAgbXVsdGlxdWV1ZSdzIHNpbmsgcGFkLCBhbmQgY3VycmVudGx5IGZhaWxzIGJlY2F1c2UgdGhlIHByb2JlIGlzIG5vdAotCSAgaW5zdGFsbGVkIHRoZXJlCi0KLTIwMTUtMDQtMTQgMTk6MDg6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkgIHJ0cHJ0eCo6IEZpeCB0eXBvcwotCi0yMDE1LTA0LTE0IDE3OjI0OjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBOb3Qgc2VuZGluZyBlYXJseSBSVENQIG5vdyBiZWNhdXNlIG9mIGRpdGhlcmluZyBtZWFucyB3ZSBzZW5kIGl0IHdpdGggdGhlIG5leHQgY29tcG91bmQgcGFja2V0Ci0KLTIwMTUtMDQtMTQgMTY6Mjc6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEltcHJvdmUgZGVidWcgb3V0cHV0IGEgYml0IGlmIHdlIGNhbid0IGFsbG93IGVhcmx5IGZlZWRiYWNrCi0KLTIwMTUtMDQtMDcgMTg6MDA6NTMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkgIHJ0cHZwOGRlcGF5OiBXaGVuIGRyb3BwaW5nIGludHJhIHBhY2tldCwgcmVxdWVzdCBrZXlmcmFtZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzIwOAotCi0yMDE1LTA0LTEzIDIwOjI1OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogQ2hhbmdlIHJlc3luY2luZyBHU1RfV0FSTklORyB0byBHU1RfSU5GTwotCSAgVGhpcyBhbHNvIGhhcHBlbnMgaW4gdGhlIHZlcnkgYmVnaW5uaW5nIHdoZW4gd2UgcmVjZWl2ZSB0aGUgZmlyc3QgcGFja2V0LCBhCi0JICB3YXJuaW5nIHdvdWxkIGJlIHZlcnkgY29uZnVzaW5nIGhlcmUuIEluIGFsbCBwbGFjZXMgd2hlcmUgd2Ugc2hvdWxkIHdhcm4gYWJvdXQKLQkgIHRoaXMsIHdlIHdvdWxkJ3ZlIHByaW50ZWQgYSB3YXJuaW5nIGFscmVhZHkgYmVmb3JlLgotCi0yMDE1LTA0LTAyIDEzOjI2OjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IG1pbm9yIGRvY3MgaW1wcm92ZW1lbnQKLQotMjAxNC0xMS0wNiAxMjowODowMyArMDEwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBBZGQgInJ0eC1tYXgtcmV0cmllcyIgcHJvcGVydHkKLQkgIFRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbgotCSAgZm9yIGEgc3BlY2lmaWMgcGFja2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTg2OAotCi0yMDE0LTExLTA0IDE1OjAwOjUyICswMTAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IEZpeCBleHBlY3RlZF9kdHMgY2FsYyBpbiBjYWxjdWxhdGVfZXhwZWN0ZWQKLQkgIFJpZ2h0IGFib3ZlIHdlIGNvbnNpZGVyIGxvc3RfcGFja2V0IHBhY2tldHMsIGVhY2ggb2YgdGhlbSBoYXZpbmcgZHVyYXRpb24sCi0JICBhcyBsb3N0IGFuZCB0cmlnZ2VyZWQgdGhlaXIgdGltZXJzIGltbWVkaWF0ZWx5LiBCZWxvdyB3ZSB1c2UgZXhwZWN0ZWRfZHRzCi0JICB0byBzY2hlZHVsZSByZXRyYW5zbWlzc2lvbiBvciBzY2hlZHVsZSBsb3N0IHRpbWVycyBmb3IgdGhlIHBhY2tldHMgdGhhdAotCSAgY29tZSBhZnRlciBleHBlY3RlZF9kdHMuCi0JICBBcyB3ZSBqdXN0IHRyaWdnZXJlZCBsb3N0X3BhY2tldHMgcGFja2V0cyBhcyBsb3N0LCB0aGVyZSdzIG5vIHBvaW50IGluCi0JICBzY2hlZHVsaW5nIG5ldyB0aW1lcnMgZm9yIHRoZW0gYW5kIHdlIGNhbiBqdXN0IHNraXAgb3ZlciBhbGwgbG9zdCBwYWNrZXRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTg2OAotCi0yMDE1LTAzLTIwIDE4OjIxOjU3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogTWFrZSB0aGUgbmV4dCBvdXRwdXQgYnVmZmVyIGRpc2NvbnQgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBqaXR0ZXJidWZmZXIKLQkgIFJlc2V0dGluZyB0aGUgaml0dGVyYnVmZmVyIGRyb3BzIGFsbCBwYWNrZXRzIGFuZCBvdGhlciB0aGluZ3MsIGFuZCB3aWxsIGNhdXNlCi0JICBhIGRpc2NvbnRpbnVpdHkgaW4gdGhlIHBhY2tldHMgcmVjZWl2ZWQgYnkgdGhlIGRlcGF5bG9hZGVycy4gVGhleSBzaG91bGQgbm93Ci0JICBhbHNvIGZsdXNoIGFueXRoaW5nIHRoZXkgaGFkIHBlbmRpbmcgYXMgdGhlIG5ldyBkYXRhIHdpbGwgc3RhcnQgYXQgYSBkaWZmZXJlbnQKLQkgIHBvc2l0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTg2OAotCi0yMDE1LTA0LTEwIDA5OjE3OjI2ICswOTAwICBIeXVuanVuIEtvIDx6em9vbi5rb0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBVcGRhdGUgc2VnbWVudC5zdGFydCBhZnRlciBrZXktdW5pdCBzZWVrCi0JICBXaGVuIGRvaW5nIGtleSB1aW50IHNlZWssIHF0ZGVtdXggY2FsbHMgZ3N0X3F0ZGVtdXhfYWRqdXN0X3NlZWsKLQkgIHRvIGdldCBwcm9wZXIgb2Zmc2V0LiBBbmQgdGhlbiB0aGlzIG9mZnNldCBpcyBzZXQgdG8KLQkgIHNlZ21lbnQucG9zaXRpb24gYW5kIHNlZ21lbnQudGltZSBpbiBnc3RfcXRkZW11eF9wZXJmb3JtX3NlZWsgYnV0Ci0JICBzZWdtZW50LnN0YXJ0IGlzIG5vdCB1cGRhdGVkLgotCSAgQWZ0ZXIgdGhhdCwgYXBwbGljYXRpb24gc2VuZHMgc2VnbWVudCBxdWVyeSwKLQkgIHF0ZGVtdXggc2V0cyBzdGFydCBhbmQgc3RvcCB0byBxdWVyeSB1c2luZyBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZS4gRHVlCi0JICB0byB0aGUgd3JvbmcgdmFsdWUgaW4gc2VnbWVudC5zdGFydCwgdGhlIHN0b3AgcG9zaXRpb24gaXMgc21hbGxlciB0aGFuCi0JICBpdCBzaG91bGQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODIyCi0KLTIwMTUtMDQtMDcgMTY6MTI6NDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHJlbW92ZSB1c2VsZXNzIHZhcmlhYmxlIGRvX3B0cwotCSAgV2UgYWx3YXlzIHdyaXRlIHRoZSBDVFRTIGluIHF0bXV4LiBJZGVhbGx5IHdlIG9ubHkgd2FudCB0byBkbyB0aGF0Ci0JICBmb3Igc3RyZWFtcyB0aGF0IG5lZWQgRFRTLCBpdCBzaG91bGQgYmUgcHJlc2VudCBvbiB0aGUgdHJhY2sgaW5mb3JtYXRpb24KLQkgIHJhdGhlciB0aGFuIGJlIGRlY2lkZWQgYmFzZWQgb24gZWFjaCBidWZmZXIKLQotMjAxNS0wNC0wNyAwMDo1MzozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcmVtb3ZlIHN1YnRyYWN0aW9uIHRoYXQgbWFrZXMgUFRTL0RUUyBzdGFydCBmcm9tIDAKLQkgIEFzIHF0IHVzZXMgZHVyYXRpb25zLCBpdCBkb2Vzbid0IG1hdHRlciwgb25seSB0aGUgZGlmZmVyZW5jZQotCSAgYmV0d2VlbiBjb25zZWN1dGl2ZSBidWZmZXJzIGlzIGltcG9ydGFudC4gQWxzbywgY29sbGVjdHBhZHMKLQkgIGFscmVhZHkgcmVwbGFjZXMgUFRTL0RUUyB3aXRoIHRoZSBydW5uaW5nIHRpbWVzIGZvciB0aGVtLgotCi0yMDE1LTA0LTA2IDIyOjM2OjQzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICB0ZXN0czogcXRtdXg6IGFkZCB0ZXN0cyB0byB2ZXJpZnkgaXQgaGFuZGxlcyBub24tMCBzZWdtZW50cwotCSAgQm90aCBpbnB1dCBzdHJlYW1zIGluIHRoaXMgdGVzdCBoYXZlIGEgc2VnbWVudC5zdGFydCA9IDEwcywgc28KLQkgIG91dHB1dCBzaG91bGQgc3RhcnQgZnJvbSAwIGFueXdheS4KLQkgIEFub3RoZXIgdGVzdCBoYXMgYm90aCBzdGFydGluZyBhdCBub24tMCBzZWdtZW50cywgYnV0IHRoZSBydW5uaW5nCi0JICB0aW1lIG9mIGJvdGggc3RyZWFtcyBzaG91bGQgc3RpbGwgc3RhcnQgZnJvbSAwCi0KLTIwMTUtMDQtMDYgMjA6MDM6MTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkgIHRlc3RzOiBxdG11eDogc2ltcGxlIG11eGluZyB0ZXN0Ci0JICBBZGRzIGEgbmV3IHNpbXBsZSB0ZXN0IHRoYXQgdmVyaWZpZXMgdGhhdCBkYXRhIGlzIHByb3Blcmx5IG11eGVkCi0JICBhbmQgcHJlc2VydmVkLiAgUFRTLCBEVFMsIGR1cmF0aW9uIGFuZCBjYXBzIGFyZSB2ZXJpZmllZC4KLQotMjAxNS0wNC0xMCAxMDo1OToyNiArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5oOgotCSAgc21wdGU6IHJlbW92ZSB1bnVzZWQgZmllbGRzCi0JICBSZW1vdmUgdGhlIGZpZWxkcyAtIGZvcm1hdCBhbmQgZnBzIGZyb20gc21wdGUKLQkgIGFzIHRoZXkgYXJlIHVudXNlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1OTcKLQotMjAxNS0wNC0xMCAxMDoyOTo0NyArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FscGhhLmM6Ci0JICB0ZXN0czogYWRkIHRlc3Qgc3VpdGUgZm9yIGFscGhhCi0JICBBZGRlZCB0ZXN0IHN1aXRlIGZvciBhbHBoYSBlbGVtZW50IHdpdGggdGVzdCBjYXNlcwotCSAgMS4gYWxwaGEKLQkgIDIuIGNocm9tYSBrZXlpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc1OTUKLQotMjAxNS0wNC0wOSAxMjo1ODo0NiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2dzdC1wbHVnaW5zLWdvb2Quc3VwcDoKLQkgIHN1cHByZXNzaW9uczogYWRkIGEgd2VsbCBrbm93biB6bGliIGluZmxhdGUgYnVnCi0KLTIwMTUtMDQtMDkgMTI6NTg6MjYgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW5rOiBmaXggbXV0ZXggbGVhawotCi0yMDE1LTA0LTA5IDEyOjU4OjA0ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICB0ZXN0czogRml4IHJ0cHJ0eCB0ZXN0IGJ5IGhhbmRsaW5nIGJ1ZmZlciBsaXN0cwotCSAgQ29tbWl0ICMxMDE4YWEgbWFkZSBydHBydHhzZW5kIGhhbmRsZSBidWZmZXIgbGlzdHMsIGJyZWFraW5nCi0JICB0aGUgdGVzdCB3aGljaCBwcm9iZXMgZm9yIGJ1ZmZlcnMsIGJ1dCBub3QgYnVmZmVyIGxpc3RzLgotCSAgVXNlIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBydW4gdGhlIHByb2JlIGNhbGxiYWNrIG9uIGVhY2ggYnVmZmVyCi0JICBpbiB0aGUgbGlzdCBpbiB0dXJuIGFuZCByZW1vdmUgYW55IGJ1ZmZlcnMgdGhhdCBhcmUgZHJvcHBlZC4KLQotMjAxNS0wNC0wMSAxMToxNTozOCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguaDoKLQkgIGlzb21wNDogUmVmYWN0b3IgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMgaW50byBhIG11eF9tb2RlIHZhcgotCSAgSW5zdGVhZCBvZiBjaGVja2luZyB2YXJpb3VzIHN0YXRlIHZhcmlhYmxlcyBhcm91bmQgdGhlIG11eGVyLAotCSAgdHJhY2sgdGhlIGN1cnJlbnQgbXV4aW5nIG1vZGUgaW4gYSBzaW5nbGUgJ211eF9tb2RlJyBlbnVtLgotCSAgQWRkIHNvbWUgaW1wbGVtZW50YXRpb24gbm90ZXMgYWJvdXQgdGhlIGRpZmZlcmVudCBtdXggbW9kZXMKLQotMjAxNS0wNC0wOCAxNjo0MDowMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogVXNlIEFNX1RFU1RTX0VOVklST05NRU5UCi0JICBOZWVkZWQgYnkgdGhlIG5ldyBhdXRvbWFrZSB0ZXN0IHJ1bm5lcgotCi0yMDE1LTA0LTA4IDExOjE3OjMxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgcnRwaDI2M2RlcGF5OiBGaXggZnJhbWVzaXplIHBhcnNpbmcKLQkgIFRoZSBzdHJpbmcgcGFzc2VkIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIG9ubHkgY29udGFpbnMgYSBmcmFtZXNpemUsIGFuZAotCSAgbm90IDxwdD4gKyA8ZnJhbWVzaXplPgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjQxNgotCi0yMDE1LTAzLTIwIDEyOjE4OjM3ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogY2xpcCBjaHVuayBzaXplIGFib3ZlIHRoZSB2YWxpZCBtYXhpbXVtICgweDdmZmZmZmZmKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjU2NwotCi0yMDE1LTAzLTIwIDA5OjA3OjM1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogY2xpcCBjaHVuayBsZW5ndGggdG8gYXZhaWxhYmxlIGRhdGEgKHdoZW4ga25vd24pCi0JICBUaGlzIHByZXZlbnRzIHNpbGx5IGNodW5rIGxlbmd0aHMgZnJvbSBwb3NzaWJseSBvdmVyZmxvd2luZwotCSAgKGF0IGxlYXN0IHdoZW4gd2Uga25vdyB0aGUgYWN0dWFsIGRhdGEgbGVuZ3RoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjI1NjcKLQotMjAxNS0wNC0wNiAyMDoxNzo1MiAtMDcwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBEb24ndCBhY2N1bXVsYXRlIHNlZ21lbnQgYmFzZXMgbWFudWFsbHkKLQkgIGdzdF9zZWdtZW50X2RvX3NlZWsoKSBkb2VzIHRoYXQgZm9yIHVzIGFscmVhZHksIGFuZCBkb2luZyBpdCB0d2ljZQotCSAgd2lsbCBicmVhayBub24tZmx1c2hpbmcgc2Vla3MgaW4gaW50ZXJlc3Rpbmcgd2F5cy4gTGVmdG92ZXIgZnJvbSAxLjAKLQkgIHBvcnRpbmcuCi0JICBBbHNvIGNvcHkgb3ZlciBzZWdtZW50IG9mZnNldCBhbmQgYXBwbGllZF9yYXRlLCBqdXN0IGluIGNhc2UuCi0KLTIwMTUtMDQtMDYgMTk6MDg6MTAgLTA3MDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2ljbGVzL3Rlc3Qtc2VnbWVudC1zZWVrcy5jOgotCSAgaWNsZXM6IEZpeCB3YWl0aW5nIGZvciBzZWdtZW50LWRvbmUgaWYgaXQgaGFwcGVucyB0b28gZmFzdAotCSAgU29tZXRpbWVzIHdlIGNhbiBnZXQgc2VnbWVudC1kb25lIGJlZm9yZSB3ZSBnb3QgYXN5bmMtZG9uZS4gSWYgd2Ugd2FpdGVkCi0JICBmb3IgYXN5bmMtZG9uZSBvbmx5LCB0aGUgc2VnbWVudC1kb25lIHdvdWxkIGJlIGRyb3BwZWQgYW5kIHdlIHdvdWxkIHdhaXQKLQkgIGZvcmV2ZXIgZm9yIGl0IGEgZmV3IGxpbmVzIGJlbG93LgotCi0yMDE1LTA0LTA2IDE4OjU1OjA4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc3RibF9pbmRleCBpcyB2YWxpZCBmcm9tIDAgb253YXJkcwotCSAgSXQgaW5kaWNhdGVzIHRoZSBsYXN0IHNhbXBsZSBwYXJzZWQsIG5vdCB0aGUgbmV4dCBvbmUgdG8gcGFyc2UuCi0JICBBcyBpdCBzdGFydHMgaW4gLTEsIGFueSB2YWx1ZSBmcm9tIDAgb253YXJkcyBtZWFucyB0aGF0IGl0IGhhcwotCSAgc29tZSB2YWxpZCBkYXRhLgotCi0yMDE1LTA0LTA1IDIwOjA2OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBkb2NzOiBtYWtlIEdzdFJUQ1BTeW5jIGVudW0gc2hvdyB1cCBpbiBydHBiaW4gZG9jcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzM1OAotCi0yMDE1LTA0LTA1IDExOjQ1OjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGFkZCBSVFBKaXR0ZXJCdWZmZXJNb2RlIGVudW0gdG8gcnRwYmluIGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDczNTgKLQotMjAxNS0wNC0wNCAxMTo1NTowMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IGNsb3NlIGZpbGVzIGJlZm9yZSBwb3N0aW5nIG1lc3NhZ2UKLQkgIE1ha2VzIHN1cmUgdGhlIGZpbGVzIHdlcmUgcHJvcGVybHkgZmx1c2hlZCBhbmQgY2xvc2VkIGJlZm9yZQotCSAgdGhlIG1lc3NhZ2UgcmVhY2hlcyB0aGUgYXBwbGljYXRpb24KLQotMjAxNS0wMy0zMCAxMzo1NDoyMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYzoKLQkgIHRlc3RzOiBtdWx0aWZpbGU6IGluY3JlbWVudCB0ZXN0cyB0byBjaGVjayBmb3IgbXVsdGlmaWxlIG1lc3NhZ2VzCi0JICBBbHNvIHZlcmlmeSB0aGF0IHRoZSBtdWx0aWZpbGVzaW5rIGZpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIGNvcnJlY3RseQotCSAgcG9zdGVkIHRvIHRoZSBidXMKLQotMjAxNS0wMy0zMCAxMjo1MTozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYzoKLQkgIHRlc3RzOiBtdWx0aWZpbGU6IGhhbmRsZSBGSVhNRSBmb3IgcHJvcGVyIGNoZWNraW5nIHdoZW4gdGVzdCBmaW5pc2hlZAotCSAgVXNlIGEgR3N0QnVzIGFuZCB3YWl0IGZvciBFT1MgdG8gZmluaXNoIHRoZSB0ZXN0cyBpbnN0ZWFkIG9mCi0JICByZWx5aW5nIG9uIHNsZWVwaW5nCi0KLTIwMTUtMDMtMzAgMTE6MTQ6MDkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiBwb3N0IGZpbGUgbWVzc2FnZSBvbiBFT1MKLQkgIFdoZW4gbXVsdGlmaWxlc2luayBpcyBvcGVyYXRpbmcgaW4gYW55IG1vZGUgb3RoZXIgdGhhbiBvbmUgZmlsZQotCSAgcGVyIGJ1ZmZlciwgdGhlIGxhc3QgZmlsZSBjcmVhdGVkIHdvbid0IGhhdmUgYSBmaWxlIG1lc3NhZ2UgcG9zdGVkCi0JICBhcyBtdWx0aWZpbGVzaW5rIGRvZXNuJ3QgaGFuZGxlIHRoZSBFT1MgZXZlbnQuCi0JICBUaGlzIHBhdGNoIGZpeGVzIGl0IGJ5IHVzaW5nIHRoZSBsYXN0IHBvc2l0aW9uIHRvIHBvc3QgYSBmaWxlCi0JICBtZXNzYWdlIHdoZW4gRU9TIGlzIHJlY2VpdmVkLiBUaGlzIHNob3VsZCBlbnN1cmUgYXQgbGVhc3QgdGhlCi0JICB0aW1lIHJlbGF0ZWQgZGF0YSBhbmQgdGhlIGZpbGVuYW1lIGFyZSBwb3N0ZWQgdG8gdGhlIGFwcGxpY2F0aW9uCi0JICBvciBvdGhlciBlbGVtZW50cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzAwMAotCi0yMDE1LTA0LTAzIDE4OjU3OjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGJjNzZhOGIgdG8gYzhmYjM3MgotCi0yMDE1LTA0LTAzIDAyOjA4OjUwICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBHdWFyZCBhZ2FpbnN0IDY0LWJpdCBvdmVyZmxvdwotCSAgRm9yIGxhcmdlLWZpbGUgYXRvbXMsIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgaW4gdGhlIHNpemUgZmllbGQsCi0JICB3aGljaCBjb3VsZCBtYWtlIHVzIGp1bXAgYmFja3dhcmQgaW4gdGhlIGZpbGUgYW5kIGNhdXNlCi0JICBpbmZpbml0ZSBsb29wcy4KLQotMjAxNS0wNC0wMSAyMzo0NjoxMyArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICBpc29tcDQ6IE1ha2Ugbm9uLXNlZWthYmxlIGRvd25zdHJlYW0gYW4gZXJyb3IgaW4gbm9ybWFsIG1vZGUKLQkgIFdoZW4gbm90IGluIGZhc3Qtc3RhcnQgb3IgZnJhZ21lbnRlZCBtb2RlLCB3ZSBuZWVkIHRvIGJlIGFibGUKLQkgIHRvIHJld3JpdGUgdGhlIHNpemUgb2YgdGhlIG1kYXQgYXRvbSwgb3IgZWxzZSB0aGUgb3V0cHV0IGp1c3QKLQkgIHdvbid0IGJlIHBsYXlhYmxlIC0gdGhlIG1kYXQgcGxhY2Vob2xkZXIgd2l0aCBzaXplID09IDAgd2lsbAotCSAgY292ZXIgdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIGluY2x1ZGluZyBhbnkgbW9vdiBhdG9tIHdlIHdyaXRlIG91dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg4MDgKLQotMjAxNC0wMy0xNSAxNToyMzowMSArMDEwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgcnRwaDI2M3BheS8tZGVwYXk6IGFkZCBmcmFtZXNpemUgU0RQIGF0dHJpYnV0ZQotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjQxNgotCi0yMDE0LTAzLTE1IDEzOjMzOjU2ICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXkvLWRlcGF5OiBSZW1vdmUgaW5jb3JyZWN0bHkgaW50cm9kdWNlZCBmcmFtZXNpemUgU0RQIGF0dHJpYnV0ZQotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjQxNQotCi0yMDE1LTAzLTI3IDIxOjA5OjQ0ICswMTAwICBQZXRlciBTZWlkZXJlciA8cHMucmVwb3J0QGdteC5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkgIHY0bDJzcmM6IGRldmljZSBzZXF1ZW5jZS9vZmZzZXQgY29ycmVjdGlvbiBpbiBjYXNlIG9mIHJlbmVnb3RpYXRpb24KLQkgIFRoZSB2NGwyIGRldmljZSByZXN0YXJ0cyB0aGUgc2VxdWVuY2UgY291bnRlciBpbiBjYXNlIG9mIHN0cmVhbW9mZi9zdHJlYW1vbiwKLQkgIHRoZSBHU1Qgb2Zmc2V0IHZhbHVlcyBhcmUgc3VwcG9zZWQgdG8gaW5jcmVtZW50IHN0cmljdGx5IG1vbm90b25pYywgc28KLQkgIGFkanVzdCB0aGUgc2VxdWVuY2UgY291bnRlci9vZmZzZXQgdmFsdWVzIGluIGNhc2Ugb2YgY2FwcwotCSAgcmVuZWdvdGlhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU0NDEKLQotMjAxNC0xMS0xNCAxNDoxODo1MSArMDEwMCAgUGV0ZXIgU2VpZGVyZXIgPHBzLnJlcG9ydEBnbXgubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyc3JjOiBhZGQgZnJhbWUgbG9zcyBkZXRlY3Rpb24KLQkgIEluIGNhc2Ugb2YgdjRsMiBkcml2ZXIgZmlsbGVkIG9mZnNldC9zZXF1ZW5jZSB2YWx1ZXMgYWRkIGZyYW1lCi0JICBsb3NzIGRldGVjdGlvbiAoYW5kIHdyaXRlIGEgd2FybmluZyBtZXNzYWdlKS4KLQkgIE1vdmUgb2Zmc2V0IG1ldGEgZGF0YSBzZXR0aW5nIGFuZCBmcmFtZSBsb3NzIGNoZWNraW5nIGFmdGVyIHRoZQotCSAgdGltZXN0YW1wIGFkanVzdG1lbnQgY29kZSB0byBnZXQgcHJvcGVyIHRpbWVzdGFtcHMgZm9yIHRoZQotCSAgd2FybmluZyBtZXNzYWdlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTQ0MQotCi0yMDE0LTExLTE0IDEzOjQ4OjUxICswMTAwICBQZXRlciBTZWlkZXJlciA8cHMucmVwb3J0QGdteC5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiB1c2UgdjRsMiBjYXB0dXJlIGRldmljZSBzZXF1ZW5jZSBjb3VudGVyCi0JICBVc2UgdGhlIHY0bDIgY2FwdHVyZSBkZXZpY2Ugc2VxdWVuY2UgY291bnRlciBmb3IKLQkgIHNldHRpbmcgdGhlIEdzdEJ1ZmZlciBvZmZzZXQvb2Zmc2V0X2VuZCB2YWx1ZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1NDQxCi0KLTIwMTUtMDMtMzAgMTM6MTI6MzUgKzAyMDAgIFRvYmlhcyBNb2RzY2hpZWRsZXIgPHRvYmlhcy5tb2RzY2hpZWRsZXJAY2V0aXRlYy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBBc2sgdGhlIGRyaXZlciBhYm91dCBpdHMgcmVxdWlyZW1lbnRzIGZvciBtaW5fYnVmZmVycyBiZWZvcmUgaW5pdGlhdGluZyBidWZmZXIgcG9vbC4KLQkgIElmIHByb3Bvc2VfYWxsb2NhdGlvbigpIGhhZCBub3QgYmVlbiBjYWxsZWQgeWV0LCBpdCB3YXMgcG9zc2libGUgdGhhdCB0aGUgZHJpdmVyIHdhcyBub3QgYXNrZWQgYXQgYWxsLgotCSAgSW4gYnVmZmVyIHBvb2w6IENvbnNpZGVyIG1pbmltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgcmVxdWVzdGVkIGJ5IGRyaXZlciB3aGVuIHNldHRpbmcgY29uZmlnLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjgzNAotCi0yMDE1LTA0LTAxIDE5OjMwOjI3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5Lmg6Ci0JICBydHB2cDhkZXBheTogUGFyc2Ugd2lkdGgvaGVpZ2h0L3Byb2ZpbGUgZnJvbSBrZXlmcmFtZXMKLQkgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbXV4IHRoZSByZXN1bHQgaW50byBhIGNvbnRhaW5lcgotCSAgc3VjaCBhcyBtYXRyb3NrYS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDcyMDgKLQotMjAxNS0wNC0wMSAxOTowMTo0OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIHZwOGVuYzogRXhwb3NlIFZQOCB3aWR0aC9oZWlnaHQgbGltaXRhdGlvbnMgaW4gdGhlIGNhcHMgdGVtcGxhdGUKLQkgIFRoZSBWUDggZm9ybWF0IHNwZWNpZmljYXRpb24gKFJGQyA2Mzg2IHNlY3Rpb24gMTguMSkgc3BlY2lmaWVzCi0JICB0aGF0IHRoZSBtYXhpbXVtIHNpemUgaXMgMTYzODN4MTYzODMuCi0KLTIwMTUtMDMtMzEgMDA6MjA6MTMgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHY6IFdoZW4gcGFzc2luZyBzZWVrIGV2ZW50IHVwc3RyZWFtLCBob2xkIGEgcmVmLgotCSAgSW4gY2FzZSB1cHN0cmVhbSBjYW4ndCBoYW5kbGUgdGhlIHNlZWssIG1ha2Ugc3VyZSB3ZQotCSAga2VlcCBhIHJlZiBvbiB0aGUgZXZlbnQgdG8gYXR0ZW1wdCB0byBoYW5kbGUgaXQgb3Vyc2VsdmVzLgotCi0yMDE1LTAzLTI2IDEzOjM0OjUzICswMTAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYTogZml4IEdWYWx1ZSBsZWFrcyB3aGVuIHBhcnNpbmcgdGFncwotCSAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSgpIGRvZXNuJ3QgY29uc3VtZSB0aGUgR1ZhbHVlIHdlIHBhc3MgdG8gaXQgc28gdGhlcmUgaXMKLQkgIG5vIHBvaW50IGNvcHlpbmcgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2ODEwCi0KLTIwMTUtMDMtMjMgMjA6NTg6MjUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZXN1cnJlY3Qgc29tZSBmbG93IHJldHVybiBoYW5kbGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDU3MgotCi0yMDE1LTAzLTIzIDIwOjU3OjU2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiByZXN1cnJlY3Qgc29tZSBmbG93IHJldHVybiBoYW5kbGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDU3MgotCi0yMDE1LTAzLTIzIDIwOjU2OjQxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogcmVzdXJyZWN0IHNvbWUgZmxvdyByZXR1cm4gaGFuZGxpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ1NzIKLQotMjAxNS0wMy0yNyAxODo1ODozMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2E6IHN0b3JlIHN0cmVhbSB0YWdzIGFuZCBwdXNoIGFzIHVwZGF0ZWQKLQkgIE5ldyB0YWdzIGNhbiBiZSBmb3VuZCBvbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGZpbGUsIHNvIHRoaXMgcGF0Y2gKLQkgIGtlZXBzIHRoZSBzdHJlYW0gdGFnbGlzdHMgYXJvdW5kIGZvciB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgcGFkCi0JICBhbmQgYWRkcyB0aG9zZSBuZXcgdGFncyBhcyBmb3VuZC4gVGhlbiBhIG5ldyB0YWcgaXMgZm91bmQsIHRoZQotCSAgcGFkJ3MgaXMgbWFya2VkIHdpdGggYSB0YWdzIGNoYW5nZWQgZmxhZywgbWFraW5nIHRoZSBlbGVtZW50IHB1c2gKLQkgIGEgbmV3IHRhZyBldmVudCBvbiB0aGUgbmV4dCBjaGVjay4gQmVmb3JlIHRoaXMsIHdlIHdlcmUgc2VuZGluZwotCSAgb25seSB0aGUgbmV3bHkgZm91bmQgdGFncywgYXMgdGhlIGVsZW1lbnQgd2FzIGxvc2luZyBpdHMgdGFnbGlzdAotCSAgd2hlbiBwdXNoaW5nIHRoZSBldmVudC4KLQotMjAxNS0wMy0xNSAxNDo0MDozNiArMDEwMCAgUmFtaXJvIFBvbGxhIDxyYW1pcm8ucG9sbGFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHNlbmQgZ2xvYmFsIHRhZ3MgaW5jcmVtZW50YWxseQotCSAgSW5zdGVhZCBvZiBzZW5kaW5nIG9ubHkgbmV3IHRhZ3Mgb25jZSB0aGV5IGFyZSBmb3VuZCwgbWVyZ2UgdGhlIHRhZ2xpc3QKLQkgIGFuZCBzZW5kIHRoZW0gaW5jcmVtZW50YWxseS4KLQotMjAxNS0wMy0xNCAxNzowNzowNSArMDEwMCAgUmFtaXJvIFBvbGxhIDxyYW1pcm8ucG9sbGFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYXBhcnNlOiBzZW5kIGdsb2JhbCB0YWdzCi0JICBHbG9iYWwgdGFncyBhcmUgYWxyZWFkeSBiZWluZyByZWFkIGluIG1hdHJvc2thcGFyc2UsIGJ1dCB0aGV5IGFyZSBub3QKLQkgIGN1cnJlbnRseSBiZWluZyBzZW50LgotCSAgVGhpcyBwYXRjaCBtYWtlcyBnbG9iYWwgdGFncyBnZXQgc2VudCBpbmNyZW1lbnRhbGx5IHdoZW5ldmVyIG5ldyBvbmVzCi0JICBhcmUgZm91bmQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2MjQyCi0KLTIwMTUtMDItMDMgMTA6MTg6NTggKzA1MzAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSAgcXVhcmt0djogZml4ICJwbGFuZXMiIHByb3BlcnR5IHJhbmdlLCBhIHZhbHVlIG9mIDAgaXMgbm90IGFsbG93ZWQKLQkgIFdoZW4gcGxhbmVzIHByb3BlcnR5IGlzIHNldCB0byAwLCB0aGUgcGlwZWxpbmUgZXhlY3V0ZXMgaW4KLQkgIGFuIGluZmluaXRlIGxvb3AgYW5kIG5ldmVyIGV4aXRzLiBTaW5jZSBwbGFuZXMgbXVzdCBuZXZlcgotCSAgYmUgMCwgc2V0IHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbgotCSAgdG8gMS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM5MDYKLQotMjAxNS0wMy0yNiAxMzo0MjowMiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IEZpeCB1cCBjb21tZW50cyByZWdhcmRpbmcgRFRTCi0KLTIwMTUtMDMtMjUgMTU6MTE6MzQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogRml4IHNlZ21lbnQgaW4gVENQIG1vZGUKLQkgIEl0IGlzIGV4cGVjdGVkIHRoYXQgYnVmZmVycyBhcmUgdGltZS1zdGFtcGVkIHdpdGggcnVubmluZyB0aW1lLiBTZXQKLQkgIGEgc2VnbWVudCBhY2NvcmRpbmdseS4gSW4gdGhpcyBjYXNlIHdlIHBpY2sgMCwtMSBhcyB0aGlzIGlzIHdoYXQgdWRwc3JjCi0JICB3b3VsZCBkby4gRGVwYXlsb2FkZXJzIHdpbGwgdXBkYXRlIHRoZSBzZWdtZW50IHRvIHJlZmxlY3QgdGhlIHBsYXliYWNrCi0JICBwb3NpdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzU3MDEKLQotMjAxNS0wMy0yNiAxMjoyMToyNSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGJlIG1vcmUgc3RyaWN0IGFib3V0IHR5cGVmaW5kaW5nIERUUwotCSAgQ29kZSBub3cgbWF0Y2hlcyBjb21tZW50cy4KLQotMjAxNS0wMy0yNSAxNToxMDo1MyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBSZW1vdmUgdXNlbGVzcyBmdW5jdGlvbgotCSAgVGhpcyBmdW5jdGlvbiBkaWRuJ3QgZG8gYW55dGhpbmcgc3BlY2lhbCwgbGV0J3Mgbm90IHVzZSBhIGZ1bmN0aW9uIGZvcgotCSAgdGhhdC4KLQotMjAxNS0wMy0yMCAxMzowMzowOSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcjogQWNjb3VudCBmb3IgcnR4X3JldHJ5IGluIG92ZXJmbG93IGNoZWNrCi0JICBBcyBydHhfcmV0cnkgaXMgcGFydCBvZiB0aGUgc3Vic3RyYWN0aW9uLCB3ZSBuZWVkIHRvIHRha2UgaXQgaW50bwotCSAgYWNjb3VudCwgb3RoZXJ3aXNlIHdlIG1heSBlbmR1cCB3aXRoIGEgYmlnIHZhbHVlLgotCi0yMDE1LTAzLTI0IDIzOjE1OjE1ICswMDAwICBKdWxpZW4gSXNvcmNlIDxqLmlzb3JjZUBzYW1zdW5nLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06Ci0JICBvc3h2aWRlb3Npbms6IGNoZWNrIGZvciBkZXByZWNhdGVkIGNvbnN0YW50cyBwcmlvciB0byBPU1ggMTAuMTAKLQkgIGNvY29hd2luZG93Lm06MzM5OjU6IGVycm9yOiAnTlNPcGVuR0xQRkFXaW5kb3cnCi0JICBpcyBkZXByZWNhdGVkOiBmaXJzdCBkZXByZWNhdGVkIGluIE9TIFggMTAuOQotCSAgY29jb2F3aW5kb3cubTo1NzY6NzogZXJyb3I6ICdOU09wZW5HTFBGQUZ1bGxTY3JlZW4nCi0JICBpcyBkZXByZWNhdGVkOiBmaXJzdCBkZXByZWNhdGVkIGluIE9TIFggMTAuNgotCSAgY29jb2F3aW5kb3cubTo2MDU6MjQ6IGVycm9yOiAnc2V0RnVsbFNjcmVlbicKLQkgIGlzIGRlcHJlY2F0ZWQ6IGZpcnN0IGRlcHJlY2F0ZWQgaW4gT1MgWCAxMC43Ci0KLTIwMTUtMDMtMjQgMTY6NTE6MTIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBGaXggc2Vla2luZyBxdWVyeQotCSAgVGhlIHNlZ21lbnQgc3RhcnQvc3RvcCBpbiB0aGUgcXVlcnkgaXMgbWVhbnQgdG8gcmVwcmVzZW50IHRoZSBzZWVrYWJsZQotCSAgcG9ydGlvbiBvZiB0aGUgc3RyZWFtLiBJdCBkb2VzIG5vdCBtYXRjaCB0aGUgc2VnbWVudCBzdGFydC9zdG9wLiBJbnN0ZWFkCi0JICBleHBvcnQgMCB0byBkdXJhdGlvbi4KLQotMjAxNS0wMy0yNCAxNjoxODo1MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IE9ubHkgc2V0IGNhcHMgb25jZSBpZiB0aGV5IGRvbid0IGNoYW5nZQotCSAgUHJldmlvdXNseSB3ZSB3ZXJlIHNldHRpbmcgbmV3IGNhcHMgd2l0aCB0aGUgc2FtZSBjb250ZW50IGZvciBldmVyeSBIMjY0IG9yCi0JICBBQUMgY29kZWNfZGF0YSB3ZSBmb3VuZCBpbiB0aGUgc3RyZWFtLCBzcGFtbWluZyBldmVyeXRoaW5nIGFuZCBjYXVzaW5nCi0JICByZW5lZ290aWF0aW9ucy4KLQotMjAxNS0wMy0yNCAxMjo0NjoxOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IERvbid0IGNyZWF0ZSBBQUMvSDI2NCBjYXBzIHdpdGhvdXQgY29kZWNfZGF0YQotCSAgSW5zdGVhZCBkZWxheSBjcmVhdGluZyB0aGUgY2FwcyB1bnRpbCB3ZSByZWFkIHRoZSBjb2RlY19kYXRhIGZyb20gdGhlIHN0cmVhbSwKLQkgIG9yIGZhaWwgaWYgd2UgZ2V0IG5vcm1hbCBkYXRhIGJlZm9yZSB0aGUgY29kZWNfZGF0YS4KLQkgIEFBQyByYXcgY2FwcyBhbmQgSDI2NCBhdmMgY2FwcyBhbHdheXMgbmVlZCBjb2RlY19kYXRhLCBzZXR0aW5nIGNhcHMgb24gdGhlIHBhZAotCSAgd2l0aG91dCB0aGVtIGlzIGdvaW5nIHRvIG1ha2UgbmVnb3RpYXRpb24gZmFpbCBtb3N0IG9mIHRoZSB0aW1lLiBFdmVuIGlmIHdlCi0JICBsYXRlciBzZXQgbmV3IGNhcHMgd2l0aCB0aGUgY29kZWNfZGF0YSwgdGhhdCdzIHVzdWFsbHkgZ29pbmcgdG8gYmUgdG9vIGxhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2NjgyCi0KLTIwMTUtMDMtMjQgMTU6Mzk6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBGaXggaW5kZW50aW9uCi0KLTIwMTUtMDMtMjIgMTM6MjM6NDQgKzAyMDAgIElseWEgS29uc3RhbnRpbm92IDxpbHlhLmtvbnN0YW50aW5vdkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uaDoKLQkgIG9zeGF1ZGlvOiBGaXggc3RyaW5nIGZvcm1hdCB3YXJuaW5nIG9uIDMyLWJpdAotCSAgVUludDMyIChEYXJ3aW4sIG5vdCBDOTkncyB1aW50MzJfdCkgaXMgJ3Vuc2lnbmVkIGxvbmcnIG9uIDMyLWJpdAotCSAgcGxhdGZvcm1zLgotCi0yMDE1LTAzLTIxIDE3OjUwOjQwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBGaXggYW5vdGhlciBpbnN0YW5jZSBvZiBzdGlja3kgZXZlbnQgbWlzb3JkZXJpbmcgd2FybmluZ3MKLQkgIE1ha2Ugc3VyZSB0aGF0IHRoZSBzeW5jX3NyYyBwYWQgaGFzIGNhcHMgYmVmb3JlIHRoZSBzZWdtZW50IGV2ZW50LgotCSAgT3RoZXJ3aXNlIHdlIG1pZ2h0IGdldCBhIHNlZ21lbnQgZXZlbnQgYmVmb3JlIGNhcHMgZnJvbSB0aGUgcmVjZWl2ZQotCSAgUlRDUCBwYWQsIGFuZCB0aGVuIGxhdGVyIHdoZW4gcmVjZWl2aW5nIFJUQ1AgcGFja2V0cyB3aWxsIHNldCBjYXBzLgotCSAgVGhpcyB3aWxsIHJlc3VsdHMgaW4gYSBzdGlja3kgZXZlbnQgbWlzb3JkZXJpbmcgd2FybmluZwotCSAgVGhpcyBmaXhlcyB3YXJuaW5ncyBpbiB0aGUgcnRwYXV4IHVuaXQgdGVzdCBidXQgYWxzbyBpbiB0aGUKLQkgIHJ0cGF1eCBhbmQgcnR4IGV4YW1wbGVzIGluIHRlc3RzL2V4YW1wbGVzL3J0cAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NjQ0NQotCi0yMDE1LTAzLTIxIDE3OjE4OjQ3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBBbHNvIHN0YXJ0IHRoZSBSVENQIHNlbmQgdGhyZWFkIHdoZW4gcmVjZWl2aW5nIFJUUCBvciBSVENQCi0JICBCZWZvcmUgd2Ugb25seSBzdGFydGVkIGl0IHdoZW4gZWl0aGVyOgotCSAgLSB0aGVyZSBpcyBubyBzZW5kIFJUUCBzdHJlYW0KLQkgIG9yCi0JICAtIHdlIHJlY2VpdmVkIGFuIFJUUCBwYWNrZXQgZm9yIHNlbmRpbmcKLQkgIFRoaXMgY291bGQgbWVhbiB0aGF0IGlmIHRoZSBzZW5kIFJUUCBwYWRzIGFyZSBjb25uZWN0ZWQgYnV0IG5ldmVyIHJlY2VpdmUgYW55Ci0JICBSVFAgZGF0YSwgYW5kIHRoZSBzYW1lIHNlc3Npb24gaXMgYWxzbyB1c2VkIGZvciByZWNlaXZpbmcgUlRQL1JUQ1AsIHdlIHdvdWxkCi0JICBuZXZlciBzdGFydCB0aGUgUlRDUCB0aHJlYWQgYW5kIHdvdWxkIG5ldmVyIHNlbmQgUlRDUCBmb3IgdGhlIHJlY2VpdmluZyBwYXJ0Ci0JICBvZiB0aGUgc2Vzc2lvbi4KLQkgIFRoaXMgY2FuIGJlIHJlcHJvZHVjZWQgd2l0aCBhIHBpcGVsaW5lIGxpa2U6Ci0JICBnc3QtbGF1bmNoLTEuMCBydHBiaW4gbmFtZT1ydHBiaW4gXAotCSAgdWRwc3JjIHBvcnQ9NTAwMCAhICJhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9dmlkZW8sIGNsb2NrLXJhdGU9OTAwMDAsIGVuY29kaW5nLW5hbWU9SDI2NCIgISBydHBiaW4ucmVjdl9ydHBfc2lua18wIFwKLQkgIHVkcHNyYyBwb3J0PTUwMDEgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMCBcCi0JICBydHBiaW4uc2VuZF9ydGNwX3NyY18wICEgZmFrZXNpbmsgbmFtZT1ydGNwX2Zha2VzaW5rIHNpbGVudD1mYWxzZSBhc3luYz1mYWxzZSBzeW5jPWZhbHNlIFwKLQkgIHJ0cGJpbi5yZWN2X3J0cF9zcmNfMF8yNTUzMjI1NTMxXzk2ICEgZGVjb2RlYmluICEgeHZpbWFnZXNpbmsgXAotCSAgZmFrZXNyYyAhIHZhbHZlIGRyb3A9dHJ1ZSAhIHJ0cGJpbi5zZW5kX3J0cF9zaW5rXzAgXAotCSAgcnRwYmluLnNlbmRfcnRwX3NyY18wICEgZmFrZXNpbmsgbmFtZT1ydHBfZmFrZXNpbmsgc2lsZW50PWZhbHNlIGFzeW5jPWZhbHNlIHN5bmM9ZmFsc2UgLXYKLQkgIEJlZm9yZSB0aGlzIGNoYW5nZSB0aGUgcnRjcF9mYWtlc2luayB3b3VsZCBuZXZlciBzZW5kIFJUQ1AgZm9yIHRoZSByZWNlaXZpbmcKLQkgIHBhcnQgb2YgdGhlIHNlc3Npb24gKGkuZS4gbm8gcmVjZWl2ZXIgcmVwb3J0cyEpLCBhZnRlciB0aGUgY2hhbmdlIGl0IGRvZXMuCi0JICBBbmQgYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNoYW5nZSBpdCB3b3VsZCBzZW5kIFJUQ1AgZm9yIHRoZSByZWNlaXZpbmcgcGFydCBvZgotCSAgdGhlIHNlc3Npb24gaWYgdGhlIHNlbmRlciBwYXJ0IHdhcyBvbWl0dGVkICh0aGUgbGFzdCB0d28gbGluZXMpLgotCi0yMDE1LTAzLTE5IDExOjU0OjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JICBydHBydHhzZW5kOiBBZGQgc3VwcG9ydCBmb3IgYnVmZmVyIGxpc3RzCi0KLTIwMTUtMDMtMTkgMTE6Mzk6MzggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHF1ZXVlLmM6Ci0JICBydHBydHhxdWV1ZTogSW1wbGVtZW50IHN1cHBvcnQgZm9yIGJ1ZmZlciBsaXN0cwotCi0yMDE1LTAzLTE4IDE3OjMyOjM2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IEltcHJvdmUgdHJhY2UgcmVhZGFiaWxpdHkKLQkgIENoYW5nZSB0aGUgY29tbWFuZCBudW1iZXIgaW50byBzdHJpbmdzLgotCi0yMDE1LTAxLTIwIDEwOjE4OjU2ICswMTAwICBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpIDxqc3RlZmZlbnNAbWFrZS50dj4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSAgZmx2ZGVtdXg6IERvbid0IHJlcGVhdGVkbHkgd2FybiBhZnRlciBub19tb3JlX3BhZHMgKHYyKQotCSAgVGhpcyBjYW4gZ2V0IHJhdGhlciBzcGFtbXkgZm9yIHN1Y2ggYSBoaWdoIGxvZyBsZXZlbC4KLQkgIE9ubHkgd2FybiBvbmNlIHBlciBzdHJlYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2Mjc0Ci0KLTIwMTUtMDMtMTYgMTE6MjM6NTIgKzAxMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGpzdGVmZmVuc0BtYWtlLnR2PgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogSW50cm9kdWNlIGNvbnN0YW50IGZvciBuby1tb3JlLXBhZHMgdGhyZXNob2xkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2Mjc0Ci0KLTIwMTUtMDEtMjAgMTA6MTg6MjkgKzAxMDAgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGpzdGVmZmVuc0BtYWtlLnR2PgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogRml4IHdhcm5pbmcgdG8gY29udGFpbiAndmlkZW8nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2Mjc0Ci0KLTIwMTUtMDMtMTEgMjE6MjU6NDAgKzAxMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIG1hdHJvc2thZGVtdXg6IGZvciBkdHMgb25seSBzdHJlYW0gc2V0IHB0cz1kdHMgZm9yIGludHJhIG9ubHkgZm9ybWF0cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTE5MgotCi0yMDE1LTAzLTE0IDE2OjM5OjA5ICswMTAwICBSYW1pcm8gUG9sbGEgPHJhbWlyby5wb2xsYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBmaXggc2VuZGluZyBvZiB0YWdzCi0JICAqIEZpeCBjcml0aWNhbCB3aGVuIG5ldyB0YWdzIGFyZSBmb3VuZCBhZnRlciBzZWdtZW50IGV2ZW50IGhhcyBhbHJlYWR5Ci0JICBiZWVuIHNlbnQuCi0JICAqIFNlbmQgZ2xvYmFsIHRhZ3MgYmVmb3JlIHN0cmVhbSB0YWdzLgotCSAgKiBTcGxpdCBzZW5kaW5nIG9mIHRhZ3Mgb3V0IG9mIGdzdF9tYXRyb3NrYV9kZW11eF9zZW5kX2V2ZW50KCkgaW50byBpdHMKLQkgIG93biBmdW5jdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU5NzMKLQotMjAxNS0wMy0xMyAxODoyNjowNiArMDAwMCAgUmFtaXJvIFBvbGxhIDxyYW1pcm8ucG9sbGFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwcm9wZXJseSBlc2NhcGUgcGVyY2VudCBzaWduIGluIGRvY3VtZW50YXRpb24KLQotMjAxNS0wMy0xMyAxODoyNjo0NCArMDAwMCAgUmFtaXJvIFBvbGxhIDxyYW1pcm8ucG9sbGFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBydHBkdG1mbXV4OiBwcm9wZXJseSBlc2NhcGUgcGVyY2VudCBzaWduIGluIGRvY3VtZW50YXRpb24KLQotMjAxNS0wMy0xMyAxODo0ODowMyArMDAwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JICB2NGwyc3JjOiBkZWxheSByZW5lZ290aWF0aW9uIHVudGlsIGl0IGlzIGxpa2VseSBidWZmZXJzIHdlcmUgcmVjbGFpbWVkCi0JICBBbGxvdyByZW5lZ290aWF0aW9uIHRvIGhhcHBlbiB3aGVuIGJ1ZmZlcnMgaGF2ZSByZXR1cm5lZCBhZnRlciBhbiBhbGxvY2F0aW9uCi0JICBxdWVyeS4gQXMgdGhlIGFsbG9jYXRpb24gcXVlcnkgaXMgc2VyaWFsaXplZCwgYWxsIGJ1ZmZlcnMgZnJvbSB0aGUgcG9vbAotCSAgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYW5kIHdlIGNhbiBzdG9wIGl0IHRvIGNyZWF0ZSBhIG5ldyBvbmUgZm9yIHRoZQotCSAgbmV3IGZvcm1hdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Mjc3MAotCi0yMDE1LTAzLTEzIDE4OjQ3OjU1ICswMDAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IGFkZCBnc3RfdjRsMl9vYmplY3RfdHJ5X2Zvcm1hdAotCSAgU2ltaWxhciB0byBzZXRfZm9ybWF0IGJ1dCBpdCB1c2VzIFRSWV9GTVQgaW5zdGVhZCBvZiBTX0ZNVAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Mjc3MAotCi0yMDE1LTAzLTEzIDE4OjM4OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBmaXggY3Jhc2ggd2l0aCBHU1RfREVCVUcgZW5hYmxlZAotCSAgZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzKCkgZG9lcyBub3QgZ2l2ZQotCSAgdXMgYSByZWYgdG8gdGhlIGFkZHJlc3MsIHNvIGRvbid0IHVucmVmIGl0LgotCi0yMDE1LTAzLTEyIDEzOjQ5OjU2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIGxldmVsOiBEb24ndCByZWFkIG92ZXIgdGhlIGVuZCBvZiB0aGUgaW5wdXQgbWVtb3J5Ci0JICBQcmV2aW91c2x5IHdlIGFkdmFuY2VkIHRoZSBpbl9kYXRhIHBvaW50ZXIgYnkgYnBzIGZvciBldmVyeSBjaGFubmVsLCBhbmQgdGhlbgotCSAgbGF0ZXIgYWdhaW4gZm9yIGJsb2NrX3NpemUqYnBzLiBUaGlzIGNhdXNlZCB1cyB0byBiZSBvbmUgc2FtcGxlIGZ1cnRoZXIgdGhhbgotCSAgZXhwZWN0ZWQgaWYgYW4gaW5wdXQgYnVmZmVyIGNvdmVyZWQgdHdvIGFuYWx5c2lzIGZyYW1lcy4gQW5kIGluIHRoZSBlbmQgbGVhZAotCSAgdG8gY29tcGxldGVseSBib2d1cyB2YWx1ZXMgcmVwb3J0ZWQgYnkgbGV2ZWwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ2MDY1Ci0KLTIwMTUtMDMtMTIgMDE6Mzc6MDggKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvb3NzL2dzdG9zc2RtYWJ1ZmZlci5jOgotCSAgUmVtb3ZlIGEgY291cGxlIG9mIHN1cGVyZmx1b3VzIHRyYWlsaW5nIHNlbWktY29sb25zCi0KLTIwMTUtMDMtMTAgMDk6MzE6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9pc29tcDQvZ3N0aXNvZmYuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmM6Ci0JICBGaXggZG91YmxlIHNlbWljb2xvbnMKLQotMjAxNS0wMy0xMCAxNTo0Njo0MCArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzcmMuYzoKLQkgIHNwbGl0bXV4OiBTaHV0IGRvd24gZWxlbWVudCBiZWZvcmUgZG93bndhcmQgc3RhdGUgY2hhbmdlCi0JICBNYWtlIHN1cmUgdGhlIHN0YXRlIGNoYW5nZSB3b24ndCBoYW5nIHRyeWluZyB0byBzaHV0IGRvd24gcGFkcwotCSAgYnkgbWFraW5nIHN1cmUgdGhlIHN0cmVhbWluZyBoYXMgc3RvcHBlZCBiZWZvcmUgY2hhaW5pbmcgdXAuCi0KLTIwMTUtMDMtMDkgMjI6NTg6MDUgKzAyMDAgIElseWEgS29uc3RhbnRpbm92IDxpbHlhLmtvbnN0YW50aW5vdkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uaDoKLQkgIG9zeGF1ZGlvOiBzdHJlYW0gZm9ybWF0IGlzIGFuIFNQRElGLW9ubHkgZmllbGQKLQotMjAxNS0wMy0wOSAyMjo1Mzo0MSArMDIwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmg6Ci0JICBvc3hhdWRpbzogZml4IHNwYWNlcwotCi0yMDE1LTAzLTA5IDIyOjUyOjQ2ICswMjAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaDoKLQkgIG9zeGF1ZGlvOiBhZGQgdHlwZSBjaGVjayBtYWNybwotCi0yMDE1LTAzLTA5IDIyOjUxOjUxICswMjAwICBJbHlhIEtvbnN0YW50aW5vdiA8aWx5YS5rb25zdGFudGlub3ZAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmM6Ci0JICBvc3hhdWRpbzogcmVuYW1lIGdzdF9jb3JlX2F1ZGlvX3NldF9jaGFubmVsc19sYXlvdXQoKQotCSAgdG8gZ3N0X2NvcmVfYXVkaW9fZ2V0X2NoYW5uZWxfbGF5b3V0KCkuCi0KLTIwMTUtMDMtMDkgMjI6MzA6MjggKzAyMDAgIElseWEgS29uc3RhbnRpbm92IDxpbHlhLmtvbnN0YW50aW5vdkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYzoKLQkgIG9zeGF1ZGlvOiByZW1vdmUgdW51c2VkIGZpbmFsaXplCi0KLTIwMTUtMDMtMDkgMTY6MjU6NDMgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmM6Ci0JICB2cDllbmM6IHJlbW92ZSBkdXBsaWNhdGUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24KLQotMjAxNS0wMy0wOSAxNjoyMjoyOSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogcmVtb3ZlIHVudXNlZCB2YWx1ZQotCSAgQ0lEICMxMjI2NDc0Ci0KLTIwMTUtMDMtMDkgMTY6MTQ6MzQgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgcnRwaDI2M3BheTogZml4IGxlYWsKLQkgIENJRCAxMjEyMTU2Ci0KLTIwMTUtMDMtMDkgMTU6NTg6MzMgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgcnRwaDI2M3BheTogcmVtb3ZlIHVuZWVkZWQgdmFyaWFibGUKLQkgIFdlIGp1c3QgbmVlZCB0byBzYXZlIHRoZSBlYml0IGluZm9ybWF0aW9uIGluIGNhc2UgdGhlcmUgaXMgYW4gZXJyb3IgZGVjb2RpbmcuCi0KLTIwMTUtMDMtMDkgMTY6NDY6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnBbODldZW5jOiBSZXNldCB0aGUgZW5jb2RlciB3aGVuIGZsdXNoaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1NzA0Ci0KLTIwMTUtMDMtMDkgMTI6NTE6MTcgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2E6IGVycm9yIG1vZGUgaWYgY2FuJ3QgcHVzaCBidWZmZXIKLQkgIElmIGdzdF9wYWRfcHVzaCgpIGZhaWxzLCBpbmZvcm0gYW5kIHJldHVybiBmbG93IGVycm9yLgotCi0yMDE1LTAzLTA5IDEyOjEzOjM0ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkgIG1hdHJvc2thOiB1bnVzZWQgdmFsdWUKLQkgIFZhbHVlIHNldCBpbiByZXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBqdXN0IGJlZm9yZSBleGl0aW5nIHRoZSBmdW5jdGlvbi4KLQkgIENJRCAjMTIyNjQ2OQotCi0yMDE1LTAzLTA5IDExOjEwOjM1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogRHJvcCBwYWNrZXRzIHdpdGggc2VxdWVuY2UgbnVtYmVycyBiZWZvcmUgdGhlIHNlcW51bS1iYXNlCi0JICBUaGVzZSBhcmUgb3V0c2lkZSB0aGUgZXhwZWN0ZWQgcmFuZ2Ugb2Ygc2VxdWVuY2UgbnVtYmVycyBhbmQgc2hvdWxkIGJlCi0JICBjbGlwcGVkLCBlc3BlY2lhbGx5IGZvciBSVFNQIHRoZXkgbWlnaHQgYmVsb25nIHRvIHBhY2tldHMgZnJvbSBiZWZvcmUgYSBzZWVrCi0JICBvciBhIHByZXZpb3VzIHN0cmVhbSBpbiBnZW5lcmFsLgotCi0yMDE0LTAyLTI3IDEwOjUyOjE2ICswMTAwICBMaW51cyBTdmVuc3NvbiA8bGludXNzbkBheGlzLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRG9uJ3QgaW5jbHVkZSBwYXlsb2FkIHR5cGUgaW4gdGhlIGNhcHMgZm9yIGZyYW1lc2l6ZQotCSAgV2hlbiB0aGUgc2RwIG1lZGlhIGF0dHJpYnV0ZSBmcmFtZXNpemUgYXJlIGNvbnZlcnRlZCB0byBjYXBzCi0JICB0aGUgPHBheWxvYWQ+IHNob3VsZCBub3QgYmUgaW5jbHVkZWQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1MzM1Ci0KLTIwMTUtMDMtMDkgMTA6MDU6MTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBEb24ndCBmb3JnZXQgdG8gdW5sb2NrIHRoZSBtdXRleCB3aGVuIHJlY2VpdmluZyBHQVBzIGluIFRDUCBzdHJlYW1zCi0KLTIwMTUtMDMtMDkgMTE6MjQ6NTggKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IE1ha2Ugc3VyZSB0byBmaWx0ZXIgY2FwcyBpbiBhbGwgY2FzZXMgZHVyaW5nIENBUFMgcXVlcnkKLQkgIFdlIHdlcmUgc2tpcHBpbmcgdGhlIGZpbHRlciBzdGVwIHdoaWxlIHJldHVybmluZyB0ZW1wbGF0ZSBjYXBzLCBmb3IKLQkgIGV4YW1wbGUuCi0KLTIwMTUtMDMtMDggMjE6MTU6NTMgKzAwMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBEb24ndCB1cGRhdGUgYnVmZmVyIGZvciBPVVRQVVQKLQkgIEZvciBvdXRwdXQgZGV2aWNlLCB3ZSBzaG91bGQgbm90IHVwZGF0ZSB0aGUgYnVmZmVyIHdpdGggZmxhZ3MgYW5kCi0JICB0aW1lc3RhbXAgd2hlbiB3ZSBkZXF1ZXVlLiBUaGUgaW5mb3JtYXRpb24gaW4gdGhlIHY0bDJfYnVmZmVyIGlzIG5vdAotCSAgbWVhbmluZ2Z1bCBhbmQgaXQgYnJlYWtzIHRoZSBjYXNlIHdoZXJlIHRoZSBidWZmZXIgaXMgcmVuZGVyZWQgYXQKLQkgIG11bHRpcGxlIHBsYWNlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU0MzgKLQotMjAxNS0wMy0wOCAxODowNDozNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JICBzb3VwaHR0cGNsaWVudHNpbms6IEltcGxlbWVudCBjb29raWVzIHByb3BlcnR5Ci0KLTIwMTUtMDMtMDggMTg6MDI6NTEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSAgc291cGh0dHBjbGllbnRzaW5rOiBJbXBsZW1lbnQgYXV0b21hdGljLXJlZGlyZWN0IHByb3BlcnR5Ci0KLTIwMTUtMDMtMDggMTc6NTQ6MDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSAgc291cGh0dHBjbGllbnRzaW5rOiBJbXBsZW1lbnQgcHJveHkgc3VwcG9ydAotCSAgVGhlIHByb3BlcnRpZXMgd2VyZSB0aGVyZSBiZWZvcmUsIGJ1dCBub3QgdXNlZCBhbnl3aGVyZS4KLQotMjAxNS0wMi0yMSAyMDowNToyNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcmVzdXJyZWN0IHNvbWUgZmxvdyByZXR1cm4gaGFuZGxpbmcKLQotMjAxNS0wMy0wNCAxMDoyNzoxNyArMDEwMCAgTmljb2xhcyBIdWV0IDxuaWNvbGFzLmh1ZXRAcGFycm90LmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGZpeCBMT0FTIHBhcnNpbmcgaXNzdWUKLQkgIEZpeCBtaXNzaW5nIGluZGV4IGluIHN5bmN3b3JkIHNlYXJjaGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTU4NQotCi0yMDE1LTAzLTA1IDE3OjU0OjQzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogZml4IG1vZHVsbyBtYXRoIHdpdGggcmluZ2J1ZmZlciBwYXJhbWV0ZXJzCi0JICBUbyBnZXQgYSBtdWx0aXBsZSBvZiBicGYgdXNlIGEgc3VidHJhY3Rpb24gYW5kIG5vdCBhbiBhZGRpdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTY4NAotCi0yMDE1LTAzLTA3IDAwOjU1OjQ3ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogUHJvdGVjdCBwcm9wZXJ0eSB2YXJpYWJsZXMgd2l0aCB0aGUgb2JqZWN0IGxvY2suCi0JICBVc2UgdGhlIG9iamVjdCBsb2NrIGluc3RlYWQgb2YgdGhlIHNwbGl0bXV4IGxvY2sgdG8gcHJvdGVjdAotCSAgaW50ZXJuYWwgcHJvcGVydHkgdmFyaWFibGVzLCBzbyB0aGV5J3JlIG5vdCBsb2NrZWQgd2hlbgotCSAgc3dpdGNoaW5nIHRvIGEgbmV3IGZpbGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0NDIwCi0KLTIwMTUtMDMtMDYgMTE6Mzk6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGNoZWNrOiBhZGQgaml0dGVyYnVmZmVyIHVuaXQgdGVzdAotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU1MzkKLQotMjAxNS0wMy0wNSAwOToxODo1MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRml4IGhhbmRsaW5nIG9mIGludGVybGVhdmVkIChUQ1ApIHN0cmVhbXMKLQkgIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSB0cmFuc3BvcnQgaW4gYW55IGNhc2UsIG5vdCBqdXN0IGlmIHdlIGhhdmUgYSBjb250YWluZXIKLQkgIHN0cmVhbSBvciBhIG5vbi1pbnRlcmxlYXZlZCBzdHJlYW0uIE9ubHkgaWYgd2UgaGF2ZSBhbiBpbnRlcmxlYXZlZCBzdHJlYW0gYW5kCi0JICBhcmUgcmV0cnlpbmcsIHdlIHNob3VsZCBub3Qgc2V0IHVwIHRoZSBzdHJlYW0gYWdhaW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1NTk5Ci0KLTIwMTUtMDMtMDUgMTA6MDA6MzMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSAgdnBbODldZGVjOiBEcm9wIGZyYW1lcyB0aGF0IGhhdmUgbm8gb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIG9mIGVycm9ycwotCSAgZmluaXNoX2ZyYW1lKCkgYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGFuIG91dHB1dCBidWZmZXIuCi0KLTIwMTUtMDMtMDUgMDk6NTY6MjMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IERvbid0IHVucmVmIGNhcHMgd2UgZG9uJ3Qgb3duCi0KLTIwMTUtMDMtMDUgMDk6NDY6MTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IFB1c2ggUlRDUCBjYXBzIG9uIHRoZSBSVENQIHBhZHMKLQkgIE90aGVyd2lzZSB3ZSB3aWxsIGdldCBub3QtbmVnb3RpYXRlZCBsYXRlciBmcm9tIHJ0cGJpbiwgYW5kIHdpbGwgbmV2ZXIgYmUgYWJsZQotCSAgdG8gc2VuZCBSVENQIHBhY2tldHMgYmFjayB0byB0aGUgc2VydmVyLiBOb3RlIHRoYXQgZXJyb3IgZmxvdyByZXR1cm5zIGZyb20gdGhlCi0JICBSVENQIHBhZHMgYXJlIGlnbm9yZWQsIHRoYXQncyB3aHkgaXQgZGlkbid0IGZhaWwgbW9yZSB2aXNpYmxlIGJlZm9yZS4KLQotMjAxNS0wMy0wNSAwOTozNTozMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogTWFrZSBzdXJlIHRvIHNlbmQgU0VHTUVOVCBldmVudHMgb24gYWxsIHBhZHMKLQotMjAxNS0wMy0wMyAxNjoyMzoxNSArMDEwMCAgU2FudGlhZ28gQ2Fyb3QtTmVtZXNpbyA8c2FuY2FuZUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIHJ0cDogQWRkIEZ1bGwgSW50cmEgUmVxdWVzdCAoRklSKSBwYWNrZXRzIHRvIHN0YXRpc3RpY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU1ODcKLQotMjAxNS0wMy0wMyAxNjowMTo1MyArMDEwMCAgU2FudGlhZ28gQ2Fyb3QtTmVtZXNpbyA8c2FuY2FuZUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIHJ0cDogQWRkIFBhY2tldCBMb3NzIEluZGljYXRpb24gKFBMSSkgdG8gc3RhdGlzdGljcwotCSAgVGhpcyBpcyBoZWxwZnVsIHRvIHByb3ZpZGUgc3RhdGlzdGljcyBpbiB0aGUgZm9ybWF0IGRlZmluZWQgaW4KLQkgIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1zdGF0cy8jZGljdGlvbmFyeS1ydGNydHBzdHJlYW1zdGF0cy1tZW1iZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTU4NwotCi0yMDE1LTAzLTAzIDE5OjE5OjUwICswMTAwICBOaWNvbGEgTXVyaW5vIDxuaWNvbGEubXVyaW5vQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgbWF0cm9za2FtdXg6IFJlbW92ZSBkdXJhdGlvbiBhY2N1bXVsYXRpb24gbG9naWMKLQkgIER1cmF0aW9uIGFjY3VtdWxhdGlvbiBjYW4gY2F1c2Ugcm91bmRpbmcgZXJyb3JzIGFuZCBnZW5lcmF0ZSB3cm9uZwotCSAgZHVyYXRpb24gd2l0aCBkaWZmZXJlbnQgYnVmZmVycyB0aGF0IHNoYXJlIHRoZSBzYW1lIHRpbWVzdGFtcC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUxOTIKLQotMjAxNS0wMy0wMyAxODo0MDoxNiArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IEFkZCBhbiBoZWxwZXIgbWV0aG9kIHRvIGdldCBidWZmZXIgdGltZXN0YW1wcwotCSAgLi4uIGFuZCByZXBsYWNlIEdTVF9CVUZGRVJfVElNRVNUQU1QIHRoYXQgYWx3YXlzIHJldHVybiBQVFMgd2l0aCB0aGlzIG1ldGhvZAotCSAgdGhhdCByZXR1cm4gUFRTIG9yIERUUyBiYXNlZCBvbiBzdHJlYW0gdHlwZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDUxOTIKLQotMjAxNS0wMy0wNCAxMToyODoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogQWRkIGV4cGxhbmF0aW9uIHdoeSB3ZSBoYXZlIHNwYWNlIGZvciAzMiBoYXNoIHRhYmxlcwotCSAgQW5kIGFsc28gY3JlYXRlIG9ubHkgb25lLCB0aGVyZSdzIG5vIG5lZWQgeWV0IHRvIGNyZWF0ZSBhbGwgMzIgdW50aWwKLQkgIHdlIGltcGxlbWVudCBSRkMyNzYyLgotCi0yMDE1LTAzLTA0IDExOjI2OjU3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBSZXZlcnQgInJ0cHNlc3Npb246IERvIG5vdCB1c2UgYW4gYXJyYXkgb2YgbWFwcyBpZiB0aGV5IGFyZSBub3QgYmVpbmcgdXNlZCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMTU5MWFkZjRjZDg0M2QxM2Q4NjIyYTMwYzYxOTQyNTY5MWE4NDEyOC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU1ODYjYzE6Ci0JICBJdCdzIHRoZSBiZWdpbm5pbmcgb2YgYW4gaW1wbGVtZW50YXRpb24gb2YgUkZDIDI3NjIsIHdoaWNoIGlzIG5lZWRlZCBmb3IKLQkgIGxhcmdlIG11bHRpY2FzdCBncm91cHMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgeWV0IGNvbXBsZXRlIGJ1dCB3aHkKLQkgIG5vdCBsZWF2ZSB3aGF0IGlzIHRoZXJlIGFuZCBpbXBsZW1lbnQgUkZDIDI3NjIgaW5zdGVhZD8KLQotMjAxNS0wMy0wNCAxMDozNToxMiArMDEwMCAgU2FudGlhZ28gQ2Fyb3QtTmVtZXNpbyA8c2FuY2FuZUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IERvIG5vdCB1c2UgYW4gYXJyYXkgb2YgbWFwcyBpZiB0aGV5IGFyZSBub3QgYmVpbmcgdXNlZAotCSAgcnRwc2Vzc2lvbiBkZWNsYXJlcyBhbiBhcnJheSBvZiBtYXBzIHRvIHN0b3JlIHNycmNzIGJ1dCBvbmx5IHRoZQotCSAgdGhlIGtleSAwIGlzIGJlaW5nIHVzZWQuIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIGFycmF5IG9mIG1hcHMKLQkgIGZvciBqdXN0IG9uZSBtYXAgYW5kIHJlbW92ZSB1c2VsZXNzIHBhcmFtZXRlcnMgaW4gcnRwc2Vzc2lvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTU4NgotCi0yMDE1LTAyLTI3IDE4OjEyOjA5ICswOTAwICBKaW1teSBPaG4gPHlvbmdqaW4ub2huQGxnZS5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiByZW1vdmUgbm90IG5lZWRlZCBjb2RlCi0JICBJbiBnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnksIHRoZXJlIGlzIG5vdCBuZWVkZWQgY29kZS4KLQkgIFdlIGFscmVhZHkgY2hlY2sgYWJvdXQgc3RyZWFtIGlzIHZiciBvciBub3QgYXQgdGhlIHVwcGVyIGxpbmUuCi0JICBvLCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoaXMgY29uZGl0aW9uIGJlY2FzZSBzdHJlYW0gaXMgbm90Ci0JICB2YnIgMTAwJSBpbiB0aGlzIGNhc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1Mjc2Ci0KLTIwMTUtMDMtMDMgMjM6MjU6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1Zm92ZXJsYXktdGVzdC5jOgotCSAgdGVzdHM6IGdka3BpeGJ1Zm92ZXJsYXktdGVzdDogcmVwbGFjZSBkZXByZWNhdGVkIGZ1bmN0aW9uCi0JICBKdXN0IGF2b2lkIHVzaW5nIHRoZSBkZXByZWNhdGVkIGZ1bmN0aW9uIGVudGlyZWx5LAotCSAgaXQncyBlYXN5IGVub3VnaC4gRGVmaW5pbmcgdGhlIG1hY3JvIGlzIG5vdCBlbm91Z2guCi0KLTIwMTUtMDMtMDMgMTk6MDQ6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1Zm92ZXJsYXktdGVzdC5jOgotCSAgdGVzdHM6IGdka3BpeGJ1Zm92ZXJsYXktdGVzdDogZml4IGNvbXBpbGF0aW9uIGFnYWluc3QgbmV3ZXIgZ2RrLXBpeGJ1ZgotCSAgZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9pbmxpbmUoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91cgotCSAgb2YgR1Jlc291cmNlLgotCi0yMDE1LTAzLTAzIDE4OjM5OjE1ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JICBvc3hhdWRpb3NyYzogQWxsb3cgY2FwcyByZW5lZ290aWF0aW9uCi0JICBUaGUgcmluZ2J1ZmZlciBkb2VzIGFsbG93IHJlbmVnb3RpYXRpb24sIHNvIHdlIGRvIG5vdCBoYXZlIHRvIHJlcG9ydAotCSAgZml4ZWQgY2FwcyBvbmNlIGl0IGlzIGFjcXVpcmVkIChiYXNlZCBvbiBhIHNpbWlsYXIgcGF0Y2ggZm9yIHRoZSBzaW5rCi0JICBzaWRlIGJ5IElseWEgS29uc3RhbnRpbm92IDxpbHlhLmtvbnN0YW50aW5vdkBnbWFpbC5jb20+KS4KLQotMjAxNS0wMi0yMSAxNDo0MTowOCArMDIwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgb3N4YXVkaW9zaW5rOiBBbGxvdyByZW5lZ290aWF0aW5nIGNhcHMKLQkgIE9uY2Ugb3N4YXVkaW9zaW5rJ3MgZGV2aWNlIGlzIG9wZW4sIGl0IGZpeGF0ZXMgb24gdGhlIGluaXRpYWwgY2FwcyBhbmQKLQkgIHJlZnVzZXMgdG8gYWNjZXB0IG5ldyBjYXBzLiBUaGlzIGlzIGVycm9uZW91cyBzaW5jZSB0aGUgQXVkaW8gVW5pdCBpcwotCSAgY2FuIGFjY2VwdCBhIG5ldyBBU0JELCBhbmQgR3N0QXVkaW9SaW5nQnVmZmVyIHN1cHBvcnRzIHJlY29uZmlndXJhdGlvbgotCSAgYXMgd2VsbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM5MjUKLQotMjAxNS0wMy0wMiAxMjowNDowMCArMDEwMCAgR3dlbm9sZSBCZWF1Y2hlc25lIDxnd2Vub2xlLmJlYXVjaGVzbmVAaW50ZWwuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmFsbG9jYXRvcjogZml4IGZkIGxlYWsgaW4gRE1BQlVGIGltcG9ydCBtb2RlLgotCSAgRW5zdXJlIGdzdF92NGwyX2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyKCkgcmVsZWFzZXMgdGhlIGFzc29jaWF0ZWQKLQkgIEdzdFY0bDJNZW1vcnlHcm91cC4gSW4gcGFydGljdWxhciwgdGhpcyBhbGxvd3MgZm9yIGNsb3NpbmcgdGhlIERNQUJVRgotCSAgaGFuZGxlcyBwcmlvciB0byBpbnN0YW50aWF0aW5nIG5ldyBvbmVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTQ0MwotCi0yMDE1LTAzLTAyIDE1OjA2OjA5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSAgdnA4ZW5jOiBVc2UgMCBhcyBkdXJhdGlvbiBmb3IgdGhlIEVPUyAiZnJhbWUiCi0KLTIwMTUtMDMtMDIgMTU6MDI6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGVuYy5oOgotCSogZXh0L3ZweC9nc3R2cDllbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmg6Ci0JICB2cHs4LDl9ZW5jOiBUZWxsIHRoZSBlbmNvZGVyIGFib3V0IGFjdHVhbCB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgb2YgZnJhbWVzCi0JICAuLi4gaW5zdGVhZCBvZiBqdXN0IGNvdW50aW5nIGZyYW1lcy4gVGhlIHZhbHVlcyBhcmUgc3VwcG9zZWQgdG8gYmUgaW4gdGltZWJhc2UKLQkgIHVuaXRzLCBub3QgZnJhbWUgdW5pdHMuIFRoaXMgZml4ZXMgdmFyaW91cyBxdWFsaXR5IHByb2JsZW1zIHdpdGggVlA4L1ZQOQotCSAgZW5jb2RpbmcgYW5kIGluIGdlbmVyYWwgbWFrZXMgdGhlIGVuY29kZXIgYmVoYXZlIGJldHRlci4KLQkgIFRoYW5rcyB0byBOaXJiaGVlayBDaGF1aGFuIGZvciBub3RpY2luZyB0aGlzIGJ1Zy4KLQotMjAxNS0wMy0wMSAxMzo1NjoxNyAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSAgdnB4ZGVjOiBGaXggY2FsY3VsYXRpb24gb2Ygd2lkdGggaW4gYnl0ZXMKLQkgIFJpZ2h0IG5vdyB3ZSBvbmx5IHN1cHBvcnQgSTQyMCwgYnV0IHZweCBzZWVtcyB0byBzdXBwb3J0IG1vcmUgZm9ybWF0cy4KLQkgIFRoaXMgd2lsbCBwcmV2ZW50IGhhcmQgdG8gZmluZCBidWcgaW4gdGhlIGZ1dHVyZS4KLQotMjAxNS0wMy0wMSAxMzo1Mjo1MCAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSAgdnB4ZGVjOiBEb24ndCBtZW1jcHkgaW4gZnJhbWUgbWFwIGZhaWxlZAotCSAgVGhpcyBhdm9pZCBhIGNyYXNoIGlmIG1hcHBpbmcgdGhlIGZyYW1lIGZhaWxlZC4KLQotMjAxNS0wMy0wMSAxMzo0ODo0NSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogQWRkIG1pc3NpbmcgYnJlYWsKLQkgIFRoaXMgaXMgY29zbWV0aWMgY2hhbmdlLgotCi0yMDE1LTAzLTAxIDEzOjQ2OjE4IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JICB2NGwyOiBXb3JrYXJvdW5kIGRyaXZlciBub3Qgc2V0dGluZyBmaWVsZCBjb3JyZWN0bHkKLQkgIEFzIGl0J3MgdmVyeSBjb21tb24sIGhhbmRsZSBkcml2ZXIgbm90IHNldHRpbmcgZmllbGQgaW4gYnVmZmVycwotCSAgYnkgdXNpbmcgdGhlIGZpZWxkIHZhbHVlIGZyb20gdGhlIGZvcm1hdC4gVGhpcyB3b3JrYXJvdW5kIGEgbG9uZyB0aW1lCi0JICBidWcgaW4gVVZDIGRyaXZlci4gRm9yIGV2ZW4gYnVnZ2llciBkcml2ZXIsIHdlIHNpbXBseSBhc3N1bWUKLQkgIHByb2dyZXNzaXZlIGFzIGJlZm9yZS4gV2UgYWxzbyBvbmx5IHdhcm4gb25jZSwgdG8gYXZvaWQgc3BhbW1pbmcuCi0KLTIwMTUtMDItMjggMTg6MTA6MDYgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGtleSB1bml0IHNlZWsKLQkgIFVubGlrZSBtYW55IG90aGVyIHNlZWsgZmxhZ3MsIHRoZSBLRVlfVU5JVCBzZWVrCi0JICBmbGFnIGlzIG5vdCBjb3BpZWQgb3ZlciBpbnRvIHRoZSBHc3RTZWdtZW50LAotCSAgc2luY2UgaXQncyBvbmx5IHJlbGV2YW50IGZvciB0aGUgc2VlayBpdHNlbGYsCi0JICBzbyB3ZSBuZWVkIHRvIHBhc3MgaXQgZXhwbGljaXRseSB0byB0aGUgc2VlawotCSAgaGFuZGxlciBoZXJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTMzOQotCi0yMDE1LTAyLTI3IDA5OjM4OjAxICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSAgZG9jcy9wbHVnaW5zOiBVcGRhdGVzCi0KLTIwMTUtMDItMjYgMjM6NDE6NDcgKzAxMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4L2RlbXV4OiBpbml0aWFsaXplIGR0c19vbmx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MTkyCi0KLTIwMTUtMDItMjYgMjM6Mjg6MTEgKzAxMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogc3RvcmUgRFRTIGZvciBWX01TL1ZGVy9GT1VSQ0Mgc3RyZWFtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NTE5MgotCi0yMDE1LTAyLTI2IDE5OjQ4OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgbXVsdGlmaWxlOiBhdHRlbXB0IHRvIGZpeCBkb2NzIGJ1aWxkIGlzc3VlIG9uIGJ1aWxkIGJvdAotCi0yMDE1LTAyLTI3IDAwOjQxOjQ2ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogRHJvcCBjdXN0b20gbGF0ZW5jeSBxdWVyeSBoYW5kbGluZwotCSAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIG5vdy4KLQotMjAxNS0wMi0yNyAwMDo0MDowNSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBEcm9wIGN1c3RvbSBsYXRlbmN5IHF1ZXJ5aW5nIGxvZ2ljCi0JICBUaGlzIGlzIG5vdyBpbXBsZW1lbnRlZCBpbiB0aGUgZGVmYXVsdCBsYXRlbmN5IHF1ZXJ5IGhhbmRsZXIuCi0KLTIwMTUtMDItMjYgMTY6MTA6NDEgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgcnRwdm9yYmlzcGF5OiBmaXggcGF5bG9hZGVyIGRlc2NyaXB0aW9uIGFuZCBhdXRob3IgZS1tYWlsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MjI2Ci0KLTIwMTQtMDktMDUgMTY6MzQ6MjYgKzAyMDAgIEF1csOpbGllbiBaYW5lbGxpIDxhdXJlbGllbi56YW5lbGxpQHBhcnJvdC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyOiBxdWVyeSBjcm9wIGNvbmZpZ3VyYXRpb24gYWZ0ZXIgZWFjaCBjYWxsIG9mIFNfQ1JPUAotCSAgU19DUk9QIGlvY3RsIGlzIHdyaXRlLW9ubHkgYW5kIHRoZSBkZXZpY2UgY2FuIGFkanVzdCBjcm9wIHJlY3RhbmdsZSBzbwotCSAgd2UgcXVlcnkgYmFjayB0aGUgY3JvcCBjb25maWd1cmF0aW9uIGFmdGVyIGVhY2ggU19DUk9QIHRvIGtub3cgd2hhdCBoYXMKLQkgIGJlZW4gZG9uZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYxMzMKLQotMjAxNS0wMi0yNiAwMjoxMjoxOCArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBWX01TL1ZGVy9GT1VSQ0Mgc3RyZWFtcyBoYXZlIERUUyBpbnN0ZWFkIG9mIFBUUwotCSAgV2hlbiBzdWNoIHN0cmVhbSBpcyBwcmVzZW50IGRlbXV4ZXIgc2hvdWxkIHNldCBEVFMgb24gYnVmZmVycyBpbnN0ZWFkCi0JICBvZiBQVFMuIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBWTEMgYW5kIGxpYmF2L2ZmbXBlZyBoYW5kbGUgVkZXCi0JICBzdHJlYW1zLgotCSAgU2FtcGxlIGZpbGUKLQkgIGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9NYXRlaksvU2FtcGxlcy9NYXRyb3NrYS1WRlctRFRTLU9ubHkubWt2Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MTkyCi0KLTIwMTUtMDItMjUgMTY6NDU6MTEgLTA4MDAgIEFsZWl4IENvbmNoaWxsbyBGbGFxdcOpIDxhbGVpeEBvYmxvbmcuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IENoZWNrIGNvcnJ1cHRpb24gZmxhZyBvbiB0aGUgcmlnaHQgYnVmZmVyCi0JICBXZSB3aGVyZSBjaGVja2luZyB0aGUgYnVmZmVyIHdlIGFyZSBjb3B5aW5nIHRvIGluc3RlYWQgb2YgdGhlIGJ1ZmZlciB3ZQotCSAgYXJlIGNvcHlpbmcgZnJvbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDAwNDAKLQotMjAxNS0wMS0xOSAxNToyOToyNCArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogc2V0IGNvbG9yc3BhY2UgaW4gY2FwcyBmb3IgY2FwdHVyZSBkZXZpY2VzCi0JICBUaGlzIGluZm9ybWF0aW9uIGlzIHNldCBieSB0aGUgZHJpdmVyIGZvciBhIGNhcHR1cmUgZGV2aWNlLCBhbmQgc28gY291bGQKLQkgIGJlIGZvcndhcmRlZCB0byBwaXBlbGluZSBieSBzZXR0aW5nIHRoZSBjb2xvcmltZXRyeSBpbiBjYXBzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzE4NgotCi0yMDE0LTEwLTA2IDE3OjMwOjA2ICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IGZpeCBpbXBvcnRfdXNlcnB0cigpIGluIHNpbmdsZS1wbGFuYXIgQVBJIHdoZW4gbl9wbGFuZXMgPiAxCi0JICBJbiB0aGUgVjRMMiBzaW5nbGUtcGxhbmFyIEFQSSwgd2hlbiBmb3JtYXQgaXMgc2VtaS1wbGFuYXIvcGxhbmFyLAotCSAgZHJpdmVycyBleHBlY3QgdGhlIHBsYW5lcyB0byBiZSBjb250aWd1b3VzIGluIG1lbW9yeS4KLQkgIFNvIHRoaXMgY29tbWl0IGNoYW5nZSB0aGUgd2F5IHdlIGhhbmRsZSBzZW1pLXBsYW5hci9wbGFuYXIgZm9ybWF0Ci0JICAobl9wbGFuZXMgPiAxKSB3aGVuIHdlIHVzZSB0aGUgc2luZ2xlLXBsYW5hciBBUEkgKGdyb3VwLT5uX21lbSA9PSAxKS4KLQkgIFRvIGNoZWNrIHRoYXQgcGxhbmVzIGFyZSBjb250aWd1b3VzIGFuZCBoYXZlIGV4cGVjdGVkIHNpemUsIGllOiBubwotCSAgcGFkZGluZy4gV2UgdGVzdCB0aGUgZmFjdCB0aGF0IHBsYW5lICdpJyBzdGFydCBhZGRyZXNzICsgcGxhbmUgJ2knCi0JICBleHBlY3RlZCBzaXplIGVxdWFscyB0byBwbGFuZSAnaSArIDEnIHN0YXJ0IGFkZHJlc3MuIElmIG5vdCwgd2UgcmV0dXJuCi0JICBpbiBlcnJvci4KLQkgIE1hdGggYXJlIGRvbmUgaW4gYnVmZmVycG9vbCByYXRoZXIgdGhhbiBpbiBhbGxvY2F0b3IgYmVjYXVzZSB0aGUKLQkgIGZvcm1lciBpcyBhd2FyZSBvZiB2aWRlbyBpbmZvLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODAxMwotCi0yMDE1LTAxLTIzIDEwOjE1OjQ2ICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmFsbG9jYXRvcjogbGV0IGJ1ZmZlcnBvb2wgY2FsY3VsYXRlIGltYWdlIHNpemUgd2hlbiBpbXBvcnRpbmcgdXNlcnB0cgotCSAgT2Zmc2V0IGFyZSByZWxhdGl2ZSB0byB0aGUgYnVmZmVyIGFuZCB0aGVyZSBpcyBubyBndWFyYW50ZWUgc3Vic3RyYWN0aW5nCi0JICB0aGVtIHdpbGwgZ2l2ZSB1cyB0aGUgcGxhbmUgc2l6ZS4gU28gd2UgbGV0IGJ1ZmZlcnBvb2wgbWFrZSB0aGUgbWF0aCBhcwotCSAgaXQgaXMgbW9yZSBhd2FyZSBvZiB2aWRlbyBpbmZvIHRoYW4gYWxsb2NhdG9yIGFuZCBwYXNzIGEgc2l6ZSBhcnJheSB0bwotCSAgYWxsb2NhdG9yIGltcG9ydCBmdW5jdGlvbi4KLQkgIFBvaW50ZWQgb3V0IGJ5IE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgwMTMKLQotMjAxNC0xMi0xMSAxNjoxMzoxNSArMDEwMCAgUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQG1hY3FlbC5iZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogcmVjb2duaXplIGFuZCBkaXN0aW5ndWlzaCBhbGwgYmF5ZXIgYXJyYW5nZW1lbnRzCi0JICBVcCB0byBub3csIHY0bDJzcmMgcmVjb2duaXplZCBvbmx5ICJiZ2dyIiBhbW9uZ3N0IHRoZSBiYXllciBhcnJhbmdlbWVudHMuCi0JICBSZWNvZ25pemUgbm93IGFsc28gdGhlICJyZ2diIiwgImdicmciIGFuZCAiZ3JiZyIgYXJyYW5nZW1lbnRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjM2MwotCi0yMDE1LTAxLTE1IDE2OjExOjUzICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IHNldCB2NGwyX2J1ZmZlci5maWVsZCB3aGVuIHF1ZXVpbmcgYnVmZmVyIGluIGFuIG91dHB1dCBkZXZpY2UKLQkgIEFjY29yZGluZyB0byB0aGUgY3VycmVudCBzcGVjaWZpY2F0aW9uLCBhcHBsaWNhdGlvbiBtdXN0IHNldCB0aGlzIGZpZWxkCi0JICBmb3IgYW4gb3V0cHV0IGRldmljZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDMwMTMKLQotMjAxNS0wMi0yNCAwNTo1NzoyNCArMDIwMCAgSWx5YSBLb25zdGFudGlub3YgPGlseWEua29uc3RhbnRpbm92QGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmg6Ci0JICBvc3hhdWRpb3NyYzogaU9TIHJlc2FtcGxpbmcgY2F1c2VzIHN0dXR0ZXJpbmcKLQkgIEZpeGVzIHN0dXR0ZXJpbmcgYXVkaW8gd2hlbiBpT1MgQVUgaXMgcmVzYW1wbGluZy4gVG8gbWFrZSBBVSByZXNhbXBsZSwKLQkgIG9uZSBoYXMgdG8gcmVxdWVzdCBhIHJhdGUgdGhhdCBkaWZmZXJzIGZyb20gQVZBdWRpb1Nlc3Npb24ncwotCSAgc2FtcGxlUmF0ZS4gVGhlIHJlc2FtcGxpbmcgaXRzZWxmIGlzIG5vdCB0aGUgY3VscHJpdCwgYnV0IHJhdGhlciBvdXIKLQkgIEFQSSBtaXN1c2UuCi0JICBBdWRpb1VuaXRSZW5kZXIgbW9kaWZpZXMgdGhlIG1EYXRhQnl0ZVNpemUgbWVtYmVycyB3aXRoIHRoZQotCSAgYWN0dWFsIHJlYWQgYnl0ZXMgY291bnQuIFRoZXJlZm9yZSwgdGhleSBtdXN0IGJlIHJlaW5pdGlhbGl6ZWQKLQkgIGJlZm9yZSBlYWNoIEF1ZGlvVW5pdFJlbmRlci4gKFRoZSBidWZmZXJzIHRoZW1zZWx2ZXMgY2FuIGJlCi0JICBwcmVhbGxvY2F0ZWQuKQotCSAgVGhlICJzdHV0dGVyIiB3YXMgY2F1c2VkIGJ5IG9uZSBBdWRpb1VuaXRSZW5kZXIgbWFraW5nIHRoZSBidWZmZXIKLQkgIHRvbyBzbWFsbCBmb3Igb3RoZXIgQXVkaW9Vbml0UmVuZGVyIGludm9jYXRpb25zLCBtYWtpbmcgdGhlbSBmYWlsCi0JICB3aXRoIC01MCAocGFyYW1FcnIpLiBCeSB3YXkgb2YgbHVjaywgd2hlbiBBVSBkaWRuJ3QgcmVzYW1wbGUsIGFsbAotCSAgQXVkaW9Vbml0UmVuZGVyIGludm9jYXRpb25zIHJlYWQgdGhlIHNhbWUgbnVtYmVyIG9mIGJ5dGVzLgotCSAgKFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNvbWUgbm9uLWludGVybGVhdmVkIGF1ZGlvIGNvbmNlcm5zLCBidXQKLQkgIGF0IHRoaXMgbW9tZW50IHRoZSBlbGVtZW50cyBkbyBub3Qgc3VwcG9ydCBub24taW50ZXJsZWF2ZWQgYXVkaW8KLQkgIGFuZCBub24taW50ZXJsZWF2ZWQgaXMgdW50ZXN0ZWQuKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDkyMgotCi0yMDE1LTAyLTIyIDAxOjQ5OjUyICswMTAwICBLcnp5c3p0b2YgS290bGVuZ2EgPHBvY2VrQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogaW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gdW5hdXRob3JpemVkCi0JICBNYWtlIHVzZSBvZiBOT1RfQVVUSE9SSVpFRCBlcnJvciBjb2RlIGluc3RlYWQgb2YgZmFsbGluZyBiYWNrIHRvIGdlbmVyaWMKLQkgIFJFQUQgZXJyb3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAxNzMzCi0KLTIwMTUtMDItMjMgMjA6MDY6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSAgeGltYWdlc3JjOiByZW1vdmUgcG9pbnRsZXNzIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCkKLQkgIHhpbWFnZSB3b24ndCBldmVyIGJlIE5VTEwgaGVyZSBiZWNhdXNlIHRoZSBkaXNwb3NlCi0JICBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIHhpbWFnZS0+ZGlzcG9zZSgpLgotCi0yMDE1LTAyLTIzIDE5OjQwOjI1ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQWxsIHNlZ21lbnQgcmVzdWx0aW5nIGZyb20gYSBzZWVrIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNlcW51bQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDk4MwotCi0yMDE1LTAyLTE5IDIzOjEyOjMxIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBFbmFibGUgY29weSB3aGVuIG5vIGtub3duIGFsbG9jYXRpb24gcGFyYW1zCi0JICBXaGVuIHRoZXJlIGlzIG5vIGFsbG9jYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgcXVlcnksIGVuYWJsZSBjb3B5Ci0JICB0aHJlc2hvbGQuIFdoZW4gdGhpcyB0aHJlc2hvbGQgaXMgcmVhY2hlZCwgdGhlIGJ1ZmZlciBwb29sIHdpbGwgc3RhcnQKLQkgIGNvcHlpbmcgd2hlbiB0aGUgcG9vbCByZWFjaGVzIGEgY3JpdGljYWwgbGV2ZWwuIElmIHRoZSBkcml2ZXIgc3VwcG9ydHMKLQkgIENSRUFURV9CVUZTLCB0aGlzIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgotCi0yMDE1LTAyLTE5IDIzOjA4OjM0IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBVcGRhdGUgYWxsb2NhdG9yIGZsYWdzCi0JICBXaGVuIHdlIGhpdCBlbXVsYXRlZCBmb3JtYXRzLCB3ZSBkaXNhYmxlIENSRUFURV9CVUZTIHNpbmNlIGxpYnY0bDIKLQkgIGNvcGUgdmVyeSBiYWRseSB3aXRoIGl0LiBBbHNvIGNsZWFyIHRoZSBhbGxvY2F0b3IgZmxhZ3Mgc28gd2Ugd2lsbAotCSAgbmV2ZXIgdHJ5IHRvIGFsbG9jYXRlIG1vcmUgYnVmZmVycy4gVGhpcyBmaXhlcyBmYWlsdXJlIHdoZW4gdGhlIGNvcHkKLQkgIHRocmVzaG9sZCBpcyByZWFjaGVkIGFzIHdlIHdoZXJlIGNhbGxpbmcgQ1JFQVRFX0JVRlMsIHdoaWNoIGxlYWQgdG8KLQkgIGxpYnY0bDIgaW5zdGFiaWxpdHkuCi0KLTIwMTUtMDItMTkgMjM6MDc6MjMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IFVzZSBzcGVjaWZpYyBkZWJ1ZyBjYXRlZ29yeQotCSAgVGhlIHBvb2wgaGFzIGdyb3duIGVub3VnaCB0aGF0IGl0IGlzIG5vdyBoYW5keSB0byBzZXBlcmF0ZSB2NGwyb2JqZWN0Ci0JICB0cmFjZSBmcm9tIHY0bDJidWZmZXJwb29sIHRyYWNlLgotCi0yMDE1LTAyLTE5IDE0OjI5OjAyICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkgIHJ0cHZwOHBheTogZGVmYXVsdCBlbmNvZGluZyBuYW1lIHRvIFZQOAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzgxMAotCi0yMDE1LTAyLTE5IDE0OjA2OjUxICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkgIHJ0cHZwOHBheTogbWFrZSBjYXBzIHdyaXRhYmxlIGJlZm9yZSB0cnVuY2F0aW5nIHRoZW0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4MTAKLQotMjAxNS0wMi0wNSAxMDoyOToyNiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDhwYXk6IG5lZ290aWF0ZSBlbmNvZGluZyBuYW1lCi0JICBDaHJvbWUgdXNlcyBhIGRpZmZlcmVudCBvbmUgdGhhbiBnc3RyZWFtZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3ODEwCi0KLTIwMTUtMDItMTkgMTI6MzU6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IFNlbmQgaW5pdGlhbCBldmVudHMgb24gc3luY19ydGNwIHBhZCB3aGVuIHVzaW5nIFJUUC9SVENQIG11eGluZwotCSAgT3RoZXJ3aXNlIHdlIHdpbGwganVzdCBzZW5kIGJ1ZmZlcnMgb24gdGhlIHBhZCB3aXRob3V0IGFueSBldmVudHMgYmVmb3JlaGFuZAotCSAgYW5kIHdpbGwgZ2V0IGdfd2FybmluZ3MoKSBhYm91dCB0aGF0LgotCi0yMDE1LTAyLTE5IDExOjIwOjUxICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGNhc2UgbWlzc2luZyBicmVhayBzdGF0ZW1lbnQKLQkgIGNvbW1pdCBiMTA5OGMyZWE1ZWFiZWE3YWYwOGNlNTFkMjJiODY3ZWFlZDJiYmUyIGFkZGVkIGEgbmV3IGNhc2UgaW4KLQkgIGdzdF9qYWNrX2F1ZGlvX3NyY19nZXRfcHJvcGVydHkoKSBidXQgZm9yZ290IHRvIGFkZCB0aGUgYnJlYWsgc3RhdGVtZW50IHRvIGl0LgotCi0yMDE1LTAyLTE4IDE5OjE4OjAwICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICBSZXZlcnQgInY0bDI6IGZyYWN0aW9uIGlzIHJldmVyc2VkIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiOTFmZTM2NjQ0YjE1YWUwNzBkNzJiOWU4YTljNzA4N2U4MmFlZjEyLgotCi0yMDE1LTAyLTE4IDE3OjQ5OjI5ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyOiBmcmFjdGlvbiBpcyByZXZlcnNlZAotCSAgSW4gdGhlIGZyYWN0aW9uIDEgLyAyLiAxIGlzIHRoZSBudW1lcmF0b3IgYW5kIDIgaXMgdGhlIGRlbm9taW5hdG9yLgotCSAgVGhlIGFyZ3VtZW50cyBvZiBmcmFjdGlvbiBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9ucygpIGFyZSB2YWx1ZSwKLQkgIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuCi0JICBBbHNvLCBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uKCkgZmFpbHMgaWYgZGVub21pbmF0b3IgaXMgMCBmb3Igb2J2aW91cwotCSAgcmVhc29ucy4KLQotMjAxNS0wMi0xNyAyMDoyNjo1NSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwycG9vbDogRGVhY3RpdmF0ZSBvdGhlciBwb29sCi0JICBXaGVuIGltcG9ydGluZyBidWZmZXJzIGZyb20gYSBkb3duc3RyZWFtIHBvb2wsIHdlIG5lZWQgdG8gZGVhY3RpdmF0ZQotCSAgdGhhdCBwb29sIHRvIGVuc3VyZSBpdCB3aWxsIGJlIHVzYWJsZSBhZ2FpbiBsYXRlci4gUmVseWluZyBvbiB0aGUKLQkgIHJlZmNvdW50IHRvIHJlYWNoIHplcm8gZG9lcyBub3Qgd29yaywgc2luY2UgZWxlbWVudHMgbGlrZSB4dmltYWdlc2luawotCSAga2VlcHMgYSByZWZlcmVuY2Ugb24gdGhlaXIgcHJvcG9zZWQgcG9vbC4KLQotMjAxNS0wMi0xOCAxMDoxMDo1MyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0bXV4OiByZW1vdmUgbm90IG5lZWRlZCBjb25kaXRpb24KLQkgIGdzdF9idWZmZXJfcmVwbGFjZSBjYW4gaGFuZGxlIE5VTEwgaW5wdXRzIGJ5IGl0c2VsZgotCi0yMDE1LTAyLTE4IDA5OjQwOjE0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcHJlZmVyIHRoZSB0ZmR0IHRpbWVzdGFtcCBvdmVyIHRoZSBidWZmZXIncyB0aGF0IGlzIGxlc3MgYWNjdXJhdGUKLQkgIFRoZSB0ZmR0IHNob3VsZCBiZSBtb3JlIGFjY3VyYXRlIGFzIHRoZSBidWZmZXIgdGltZXN0YW1wIGlzIHByb3ZpZGVkCi0JICBieSB0aGUgZnJhZ21lbnRlZCBmb3JtYXQgbWFuaWZlc3QgYW5kIGl0IG1pZ2h0IGp1c3QgYmUgYW4gYXBwcm94aW1hdGlvbi4KLQotMjAxNS0wMi0xNyAxNjo1Nzo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IFdoZW4gcmVzZXR0aW5nIHRoZSBqaXR0ZXJidWZmZXIgYmVjYXVzZSBvZiBwYWNrZXQgZGlzY29udCwgZG9uJ3QgZmx1c2ggc3RpY2t5IGV2ZW50cwotCSAgV2Ugd2lsbCBvdGhlcndpc2UgZmx1c2ggYXdheSBTVFJFQU1fU1RBUlQsIENBUFMgb3IgU0VHTUVOVCBldmVudHMgYW5kIHdpbGwKLQkgIGNvbmZ1c2UgZG93bnN0cmVhbSB3aXRoIGJ1ZmZlcnMgdGhhdCBjb21lIGJlZm9yZSBzdWNoIGV2ZW50cy4KLQotMjAxNS0wMi0xNyAxMjoyMDo1NyArMDEwMCAgaGFyayA8aGFya0BwdXNjaWkubmw+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmg6Ci0JICBqYWNrOiBBZGQgcHJvcGVydHkgcG9ydC1wYXR0ZXJuIHRvIHNwZWNpZnkgd2hpY2ggSkFDSyBwb3J0cyB0byBjb25uZWN0IHRvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwNzE5Ci0KLTIwMTUtMDItMTcgMTI6MzE6MDYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0aXNvZmYuYzoKLQkqIGdzdC9pc29tcDQvZ3N0aXNvZmYuaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgaXNvbXA0OiBSZWRlZmluZSBnc3RfaXNvZmZfIHN5bWJvbHMgdG8gZ3N0X2lzb2ZmX3F0XwotCSAgV2UgbmVlZCBkaWZmZXJlbnQgc3ltYm9sIG5hbWVzLCBiZWNhdXNlIHRoZXNlIHN5bWJvbHMgYXJlIGFsc28gcHJlc2VudAotCSAgaW4gdGhlIGZyYWdtZW50ZWQgcGx1Z2luIC4uLiB3aGljaCB3aWxsIGNhdXNlIGNvbmZsaWN0cyB3aGVuIGRvaW5nCi0JICBzdGF0aWMgbGlua2luZwotCi0yMDE1LTAyLTE2IDE0OjMxOjA1ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvZ29vbTJrMS9saW5lcy5jOgotCSAgZ29vbTJrMTogdXNlIGZyYWN0aW9uYWwgcGFydCBvZiBmbG9hdCBkaXZpc2lvbgotCi0yMDE1LTAyLTE2IDEzOjU5OjE0ICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXhzaW46IHJlbW92ZSBkZWFkIGNvZGUKLQkgIEV2ZXJ5IGluc3RhbmNlIG9mIGdvdG8gYmVhY2ggaGFzIGJ1Zl9pbmZvIGVxdWFsIE5VTEwuIERvbid0IGNoZWNrCi0JICBmb3IgYSBjb25kaXRpb24gdGhhdCBuZXZlciBoYXBwZW5zLgotCSAgQ0lEICMxMjY4Mzk5Ci0KLTIwMTUtMDItMTUgMjE6NDU6MjQgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGxpdG11eC5jOgotCSAgc3BsaXRtdXgtdGVzdDogUGFyc2UgZXJyb3IgbWVzc2FnZQotCSAgVGhlIHRlc3QgaGFkIGEgZnVuY3Rpb24gdG8gcHJpbnQgdGhlIGVycm9yLCBidXQgd2FzIG5vdCBwYXJzaW5nIGl0LgotCSAgVGhpcyB3YXMgY2F1c2luZyB3YXJuaW5nIGFib3V0IGRiZ19pbmZvIGJlaW5nIHVzZWQgdW5pbml0aWFsaXplZC4gSWYKLQkgIHRoZSB0ZXN0IHdhcyB0ZXN0aW5nIGFueSBlcnJvcnMsIHRoaXMgd291bGQgaGF2ZSBjcmFzaGVkLgotCi0yMDE1LTAyLTE1IDIxOjM0OjI4IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogRml4IG1pbiBhbmQgbWF4IGZvciBiYW5kcyBwcm9wZXJ0eQotCSAgVGhlIG51bWJlciBvZiBGRlRzIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm11bGE6Ci0JICBndWludCBuZmZ0ID0gMiAqIGJhbmRzIC0gMjsKLQkgIG5mZnQgaXMgcGFzc2VkIHRvIGdzdF9mZnRfZjMyX25ldygpIGFzIHRoZSBsZW4gYXJndW1lbnQgYW5kIGlzIG9mIHR5cGUKLQkgIHVuc2lnbmVkIGludGVnZXIuIFRoaXMgbWV0aG9kIHJlcXVpcmVkIHRoYXQgbGVuIGlzIGF0IGxlYXMgMSwgdGhlbgotCSAgbWF4aW11bSBHX01BWElOVCwgYXMgb3RoZXIgdmFsdWVzIHdvdWxkIGJlIG5lZ2F0aXZlLiBJZiB3ZSBleHRyYXBvbGF0ZQotCSAgZnJvbSB0aGUgZm9ybXVsYSBhYm92ZSBpdCBtZWFucyB3ZSBuZWVkICJiYW5kcyIgdG8gYmUgYmV0d2VlbiAyIGFuZAotCSAgKChndWludClHX01BWElOVCArIDIpIC8gMikuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MjEzCi0KLTIwMTUtMDItMTUgMTU6NTE6NTUgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBGaXggZnJlZWluZyBvZiBzaGFyZWQgbWVtb3J5Ci0JICBXaGVuIG1lbW9yeSAodGhhdCBoYXMgYmVlbiBzaGFyZWQgdXNpbmcgZ3N0X21lbW9yeV9zaGFyZSgpKSBhcmUgZnJlZWQsCi0JICB0aGUgbWVtb3J5IChvciB0aGUgRE1BQlVGIEZEKSBzaG91bGQgbm90IGJlZSBmcmVlZC4gVGhlc2UgbWVtb3JpZXMgaGF2ZQotCSAgYSBwYXJlbnQuIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBleHRyYSBfdjRsMm1lbV9mcmVlIGZ1bmN0aW9uIGFuZCBhdm9pZAotCSAgY2FsbGluZyBjbG9zZSB0d2ljZSBvbiB0aGUgRE1BQlVGIEZELgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDU3MwotCi0yMDE1LTAyLTE0IDExOjExOjMwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG8gbm90IHVzZSBzcGFyc2Ugc3RyZWFtcyBpbiBwdXNoLWJhc2VkIHNlZWtpbmcKLQkgIFVzaW5nIHRoZSBzcGFyc2Ugc3RyZWFtcyBjYW4gbWFrZSB0aGUgcHVzaC1iYXNlZCBzZWVraW5nIHJldHVybgotCSAgdG9vIGZhciBpbiB0aGUgc3RyZWFtLiBJdCBhbHNvIGNhbiBsZWFkIHRvIGlzc3VlcyBhcyB0aGUKLQkgIHNwYXJzZSBzdHJlYW1zIHdpbGwgYmUgaWdub3JlZCB3aGVuIHJlc3RhcnRpbmcgcGxheWJhY2sgYW5kLAotCSAgaWYgdGhlIHNwYXJzZSBzdHJlYW0gaXMgdGhlIG9uZSB0aGF0IGhhcyB0aGUgZWFybGllc3Qgc2FtcGxlLAotCSAgaXQgd2lsbCBjb25mdXNlIHF0ZGVtdXgncyBvZmZzZXRzIGFzIG9uZSBzdHJlYW0gd2lsbCBoYXZlCi0JICBhbiBlYXJsaWVyIG9mZnNldCB0aGFuIHRoZSBkZW11eGVyJ3Mgb25lIHdoaWNoIG1pZ2h0IGxlYWQgdG8KLQkgIGVhcmx5IEVPUy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI2NjEKLQotMjAxNS0wMi0xMyAxOTo0MzoxNiArMDkwMCAgSmltbXkgT2huIDx5b25namluLm9obkBsZ2UuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IEVuaGFuY2UgY29kZSByZWFkYWJpbGl0eSBpbiBwdWxzZXNpbmtfcXVlcnkKLQkgIEluIHB1bHNlc2lua19xdWVyeSBmdW5jdGlvbiwgd2UgdXNlIGEgc3dpdGNoIGZvciB0aGUgcXVlcnkKLQkgIHR5cGUuIEluIHRoZSBDQVBTIGNhc2UsIHRoZXJlIGlzIG5vICdicmVhaycsIGluc3RlYWQgd2UKLQkgIHJldHVybiByaWdodCBhd2F5LiBVc2UgYSBicmVhayBhbmQgcmV0dXJuIGF0IHRoZSBlbmQgb2YKLQkgIHRoZSBmdW5jdGlvbiBpbnN0ZWFkIGZvciBiZXR0ZXIgY29kZSByZWFkYWJpbGl0eS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQ0NjEKLQotMjAxNS0wMi0xMyAyMDo0MDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYzoKLQkgIHNwbGl0bXV4c2luazogZmxhZyBhcyBzaW5rIGZyb20gdGhlIHN0YXJ0Ci0KLTIwMTUtMDItMTEgMTU6MzA6NDQgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9nc3Rpc29mZi5jOgotCSogZ3N0L2lzb21wNC9nc3Rpc29mZi5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IEluaXRpYWwgJ3NpZHgnIGF0b20gcGFyc2luZyBzdXBwb3J0Ci0JICBQYXJzZSB0aGUgJ3NpZHgnIGF0b20gYW5kIHVwZGF0ZSB0aGUgdG90YWwgZHVyYXRpb24gYWNjb3JkaW5nIHRvIHRoZQotCSAgcGFyc2VyIHJlc3VsdC4gVGhlIGlzb2ZmIHBhcnNlciBjb2RlIGlzIGltcG9ydGVkIGZyb20KLQkgIGdzdC1wbHVnaW5zLWJhZCdzIGRhc2hkZW11eCBhbmQgYSBnc3RfaXNvZmZfc2lkeF9wYXJzZXJfYWRkX2RhdGEoKQotCSAgZnVuY3Rpb24gd2FzIGZhY3RvcmVkIG91dCBvZiB0aGUgZ3N0X2lzb2ZmX3NpZHhfcGFyc2VyX2FkZF9idWZmZXIoKQotCSAgZnVuY3Rpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNTc4Ci0KLTIwMTUtMDItMTEgMDU6MDY6NDUgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IFVzZSBnc3RfdmlkZW9fZ3Vlc3NfZnJhbWVyYXRlKCkKLQkgIFVzZSBnc3RfdmlkZW9fZ3Vlc3NfZnJhbWVyYXRlKCkgZnJvbSBsaWJnc3R2aWRlbyB0byBndWVzcwotCSAgc2Vuc2libGUgY29tbW9uIGZyYW1lcmF0ZXMgd2hlcmUgcG9zc2libGUgZnJvbSB0aGUKLQkgIGZsb2F0aW5nIHBvaW50IGZwcyBpbiB0aGUgc3RyZWFtLgotCi0yMDE1LTAyLTExIDEzOjUzOjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgSW1wcm92ZSBhbmQgZml4IExBVEVOQ1kgcXVlcnkgaGFuZGxpbmcKLQkgIFRoaXMgbm93IGZvbGxvd3MgdGhlIGRlc2lnbiBkb2NzIGV2ZXJ5d2hlcmUsIGVzcGVjaWFsbHkgdGhlIG1heGltdW0gbGF0ZW5jeQotCSAgaGFuZGxpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTA2Ci0KLTIwMTUtMDItMTEgMTA6Mjk6NTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEhhbmRsZSBmaXJzdCBSVENQIHBhY2tldCBhbmQgZWFybHkgZmVlZGJhY2sgY29ycmVjdGx5Ci0JICBBY2NvcmRpbmcgdG8gUkZDIDQ1ODUgc2VjdGlvbiAzLjUuMyBzdGVwIDEgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHNlbmQKLQkgIGFuIGVhcmx5IFJUQ1AgcGFja2V0IGZvciB0aGUgdmVyeSBmaXJzdCBvbmUuIEl0IG11c3QgYmUgYSByZWd1bGFyIG9uZS4KLQkgIEFsc28gbWFrZSBzdXJlIHRvIG5vdCB1c2UgbGFzdF9ydGNwX3NlbmRfdGltZSBpbiBhbnkgY2FsY3VsYXRpb25zIHVudGlsCi0JICB3ZSBhY3R1YWxseSBzZW50IGFuIFJUQ1AgcGFja2V0IGFscmVhZHkuIEluIHNwZWNpZmljIHRoaXMgbWVhbnMgdGhhdCB3ZQotCSAgbXVzdCBub3QgdXNlIGl0IGZvciBmb3J3YXJkIHJlY29uc2lkZXJhdGlvbiBvZiB0aGUgY3VycmVudCBSVENQIHNlbmQgdGltZS4KLQkgIEluc3RlYWQgd2UgZG9uJ3QgZG8gYW55IGZvcndhcmQgcmVjb25zaWRlcmF0aW9uIGZvciB0aGUgZmlyc3QgUlRDUCBwYWNrZXQuCi0KLTIwMTUtMDItMTAgMTg6NTM6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgcnRwaDI2M2RlcGF5OiBmaXggY29tcGlsYXRpb24gd2l0aCBnY2MgNS4wCi0KLTIwMTUtMDItMTAgMTY6MDA6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eHNpbms6IGZpeCBleGFtcGxlIHBpcGVsaW5lIHByb3Blcmx5Ci0JICB4MjY0ZW5jIG1pZ2h0IG5vdCBoYXZlIGEgbWF4LWtleS1pbnQgcHJvcGVydHksIGJ1dCBpdAotCSAgaGFzIGEga2V5LWludC1tYXggcHJvcGVydHkuLi4KLQotMjAxNS0wMi0xMCAxNDo1Nzo1NSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSAgc3BsaXRtdXg6IGZpeCB0eXBvCi0KLTIwMTUtMDItMTAgMTQ6NTY6MjMgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JICBzcGxpdG11eDogdXBkYXRlIGV4YW1wbGUgcGlwZWxpbmUKLQkgIEVsZW1lbnQgeDI2NGVuYyBkb2Vzbid0IGhhdmUgYSBtYXgta2V5LWludCBwcm9wZXJ0eQotCi0yMDE1LTAyLTEwIDEzOjI5OjMyICswMDAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzLmJnQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSAgc3BsaXRtdXg6IGZpeCBtZW1vcnkgbGVhawotCSAgSWYgZXhlY3V0aW9uIGdvZXMgdG8gdGhlIGJlYWNoIGluIGxpbmUgOTgxLCBidWZfaW5mbyBnb2VzIG91dCBvZiBzY29wZSB3aXRob3V0Ci0JICB0aGUgbWVtb3J5IGJlaW5nIGZyZWUnZC4gSGFuZGxlIHRoaXMgY2FzZS4KLQkgIENJRCAjMTI2ODQwMwotCi0yMDE1LTAyLTA4IDEyOjAzOjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggYXdrd2FyZCBpZiBjbGF1c2UKLQotMjAxNS0wMi0wNyAwMTo0MTo0OSArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BsaXRtdXguYzoKLQkgIHNwbGl0bXV4OiBBZGQgdW5pdCB0ZXN0IGZvciBmaWxlIHNwbGl0dGluZwotCSAgQWRkIGEgdW5pdCB0ZXN0IGZvciBmaWxlIHNwbGl0dGluZywgYW5kIGZpeCB0aGUgbGVha3MgaW4gdGhlCi0JICBzcGxpdG11eHNpbmsgaXQgZm91bmQKLQotMjAxNS0wMi0wNiAxNDo0MzoyMiArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogZml4IHdoaWNoIHN0b3AgdmFyaWFibGUgaXMgdXNlZCBpbiBhc3NpZ25tZW50Ci0JICBBc3NpZ25tZW50IGlzIGRvbmUgdG8gdmFyaWFibGUgc2VnbWVudC5zdG9wIHdoZW4gdGhlIGludGVudGlvbiB3YXMgdG8gYXNzaWduIHRvCi0JICBsb2NhbCB2YXJpYWJsZSBzdG9wLiBJbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIGl0LCB0aGUgdmFsdWUgaXMgbm93IGNsYW1wZWQgYW5kCi0JICBzZWdtZW50LnN0b3AgaXMgc2V0IHRvIGl0IHNvb24gYWZ0ZXIuCi0JICBDSUQgIzEyNjU3NzMKLQotMjAxNS0wMi0wNyAwMDoxOTozNiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGxpdG11eC5jOgotCSAgc3BsaXRtdXg6IEZpeCBtZW1vcnkgbGVha3MgdW50aWwgdGhlIHRlc3QgdmFsZ3JpbmRzIGNsZWFuCi0KLTIwMTUtMDItMDYgMDY6NDI6MTcgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jOgotCSAgc3BsaXRtdXg6IEhhbmRsZSBlYXJseSBFT1MgZHVyaW5nIHBhcnQgcHJlcGFyYXRpb24KLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIHNob3J0IGZpbGUgcmVhY2hlcyBFT1Mgd2hpbGUgd2UncmUgc3RpbGwKLQkgIHdhaXRpbmcgZm9yIG5vLW1vcmUtcGFkcywgYW5kIG1ha2Ugc3VyZSB3ZSBjb250aW51ZSB0byB0aGUgaW50ZXJuYWwKLQkgIFJFQURZIHN0YXRlIGZvciByZWFsIHBsYXliYWNrIHRvIHdvcmsgcHJvcGVybHkgbGF0ZXIuCi0KLTIwMTUtMDItMDYgMDU6MDM6MTkgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9maWxlcy9zcGxpdHZpZGVvMDAub2dnOgotCSogdGVzdHMvZmlsZXMvc3BsaXR2aWRlbzAxLm9nZzoKLQkqIHRlc3RzL2ZpbGVzL3NwbGl0dmlkZW8wMi5vZ2c6Ci0JICB0ZXN0czogQ2hhbmdlIHNwbGl0bXV4IHRlc3QgdmlkZW8gZmlsZXMKLQkgIEF2b2lkIHRlc3QgZmFpbHVyZSBieSBjaGFuZ2luZyB0aGUgc3RvcmVkIHZpZGVvIHJlc29sdXRpb24KLQkgIGZyb20gODB4NjAgdG8gODB4NjQsIHdoaWNoIG5lZWRzIGJ1ZyA3NDEwMzAgdG8gYmUgZml4ZWQuCi0KLTIwMTQtMDgtMDEgMDA6MDc6NTMgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGUuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHBhcnRyZWFkZXIuaDoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5oOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5oOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdHV0aWxzLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0dXRpbHMuaDoKLQkqIGdzdC9tdWx0aWZpbGUvdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NwbGl0bXV4LmM6Ci0JKiB0ZXN0cy9maWxlcy9zcGxpdHZpZGVvMDAub2dnOgotCSogdGVzdHMvZmlsZXMvc3BsaXR2aWRlbzAxLm9nZzoKLQkqIHRlc3RzL2ZpbGVzL3NwbGl0dmlkZW8wMi5vZ2c6Ci0JICBzcGxpdG11eDogSW1wbGVtZW50IG5ldyBlbGVtZW50cyBmb3Igc3BsaXR0aW5nIGZpbGVzIGF0IG11eCBsZXZlbC4KLQkgIEltcGxlbWVudCAyIG5ldyBlbGVtZW50cyAtIHNwbGl0bXV4c2luayBhbmQgc3BsaXRtdXhzcmMuCi0JICBzcGxpdG11eHNpbmsgaXMgYSBiaW4gd2hpY2ggd3JhcHMgYSBtdXhlciBhbmQgdGFrZXMgMSB2aWRlbyBzdHJlYW0sCi0JICBwbHVzIGF1ZGlvL3N1YnRpdGxlIHN0cmVhbXMsIGFuZCBzdGFydHMgYSBuZXcgZmlsZQotCSAgd2hlbmV2ZXIgbmVjZXNzYXJ5IHRvIGF2b2lkIG92ZXJydW5uaW5nIGEgdGhyZXNob2xkIG9mIGVpdGhlciBieXRlcwotCSAgb3IgdGltZS4gTmV3IGZpbGVzIGFyZSBzdGFydGVkIGF0IGEga2V5ZnJhbWUsIGFuZCBjb3JyZXNwb25kaW5nIGF1ZGlvCi0JICBhbmQgc3VidGl0bGUgc3RyZWFtcyBhcmUgc3BsaXQgYXQgcGFja2V0IGJvdW5kYXJpZXMgdG8gbWF0Y2gKLQkgIHZpZGVvIEdPUCB0aW1lc3RhbXBzLgotCSAgc3BsaXRtdXhzcmMgaXMgYSBjb3JyZXNwb25kaW5nIHNvdXJjZSBlbGVtZW50IHdoaWNoIGhhbmRsZXMKLQkgIHRoZSBzcGxpdG11eDovLyBVUkwgYW5kIHBsYXlzIGJhY2sgYWxsIGNvbXBvbmVudCBmaWxlcywKLQkgIHJlY29uc3RydWN0aW5nIHRoZSBvcmlnaW5hbCBlbGVtZW50YXJ5IHN0cmVhbXMgYXMgaXQgZ29lcy4KLQotMjAxNS0wMi0wNCAxNjozMjoxNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSogdGVzdHMvZmlsZXMvdGVzdC1jZXJ0LnBlbToKLQkqIHRlc3RzL2ZpbGVzL3Rlc3Qta2V5LnBlbToKLQkgIHRlc3RzOiBzb3VwaHR0cHNyYzogdXBkYXRlIHNzbCBrZXkvY2VydCBwYWlyCi0JICBPdXIgb25lcyB3ZXJlIGV4cGlyZWQuIFRoZSBuZXcgb25lcyB3ZXJlIGNvcGllZCBmcm9tIGxpYnNvdXAncwotCSAgdGVzdHMgZmlsZXMuCi0JICBBbHNvIHNldHMgdGhlIHByb3BlcnR5IHRvIHVzZSBvdXIgb3duIGNlcnQgdG8gdmFsaWRhdGUgdGhlCi0JICBzZXJ2ZXIsIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBzeXN0ZW0gY2VydHMgd291bGQgYmUgdXNlZAotCSAgYW5kIGl0IHdvdWxkIGZhaWwuCi0KLTIwMTUtMDItMDQgMDI6MjU6NDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogcHJldmVudCB0cnlpbmcgdG8gZ2V0IDAgYnl0ZXMgZnJvbSBhZGFwdGVyCi0JICBUaGlzIGNhdXNlcyBhbiBhc3NlcnRpb24gYW5kIHdvdWxkIGxlYWQgdG8gZ2V0dGluZyBhIE5VTEwgaW5zdGVhZAotCSAgb2YgYSBidWZmZXIuIFdpdGhvdXQgcHJvcGVyIGNoZWNraW5nIHRoaXMgd291bGQgZWFzaWx5IGxlYWQgdG8KLQkgIGEgc2VnZmF1bHQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcxOTkKLQotMjAxNS0wMi0wNCAyMTo1MDo1MSArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogU2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIEdTVF9TRUdNRU5UX0ZMQUdfVFJJQ0tNT0RFX0tFWV9VTklUUwotCSAgV2hlbiB0aGUgdHJpY2ttb2RlIGtleS11bml0cyBmbGFnIGlzIHNldCBvbiB0aGUgc2VnbWVudCwgc2ltcGx5IHNraXAKLQkgIGFueSBzYW1wbGUgb24gYSB2aWRlbyBzdHJlYW0gdGhhdCBpc24ndCBhIGtleWZyYW1lCi0KLTIwMTUtMDItMDMgMTc6MzU6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggY29udGFpbmVyIGhhbmRsaW5nCi0JICBXZSBkZXRlY3QgYSBjb250YWluZXIgY29ycmVjdGx5IG5vdyBzbyB3ZSBuZWVkIHRvIHJldmVydCB0aGUgd2VpcmQKLQkgIGNoZWNrIHRoZXJlIHdhcyBiZWZvcmUuCi0JICBVc2UgZ3N0X3J0c3BzcmNfc3RyZWFtX3B1c2hfZXZlbnQoKSB0byBwdXNoIHRoZSBjYXBzIGV2ZW50IG9uIHRoZQotCSAgcmlnaHQgcGFkLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzkzOTEKLQotMjAxNS0wMi0wMiAxOTo0NjoyNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBtYXRyb3NrYW11eDogc3RvcmUgYW5kIHdyaXRlIHN0cmVhbSB0YWdzCi0JICBTZXBhcmF0ZSBnbG9iYWwgZnJvbSBzdHJlYW0gdGFncyBzdG9yYWdlIGFuZCB3cml0ZSB0aGVtIHRvIHRoZQotCSAgYXBwcm9wcmlhdGUgdGFncyBlbnRyeSBpbiB0aGUgb3V0cHV0Ci0KLTIwMTUtMDItMDIgMTM6MzU6NTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwYXJzZSBzdHJlYW0gdGFncwotCSAgS2VlcCBnbG9iYWwgYW5kIHN0cmVhbSB0YWdzIHNlcGFyYXRlbHkgYW5kIHBhcnNlIHRoZSB1ZHRhIG5vZGUKLQkgIHRoYXQgY2FuIGJlIGZvdW5kIHVuZGVyIHRoZSB0cmFrIGF0b20uIFRoZSB1ZHRhIHdpbGwgY29udGFpbgotCSAgc3RyZWFtIHNwZWNpZmljIHRhZ3MgYW5kIHdpbGwgYmUgcHVzaGVkIGFzIHN1Y2gKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI0NzMKLQotMjAxNS0wMS0zMSAxNDozMjozNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4Lmg6Ci0JICBxdG11eDogc3RvcmUgc3RyZWFtIGFuZCBjb250YWluZXIgdGFncyBzZXBhcmF0ZWx5Ci0JICBUYWdzIHJlY2VpdmVkIHZpYSBldmVudHMsIHdoZW4gbWFya2VkIGFzIHN0cmVhbSB0YWdzLCB3aWxsCi0JICBiZSBzdG9yZWQgb24gdGhhdCBzdHJlYW0ncyB0cmFrIGF0b20gaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQKLQkgIGluIHRoZSBtYWluIHRhZ3MgYXRvbS4gVGhpcyBhbGxvd3MgdGhlIHJlc3VsdGluZyBmaWxlIHRvIGhhdmUKLQkgIGdsb2JhbCBhbmQgc3RyZWFtIHRhZ3Mgc3RvcmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjQ3MwotCi0yMDE1LTAxLTMxIDEzOjE0OjQ0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiByZWZhY3RvciB0YWdzIGZ1bmN0aW9ucyB0byBhY2NvbW9kYXRhIFVEVEEgYXQgdHJhayBsZXZlbAotCSAgUmVmYWN0b3IgdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgYm91bmQgdG8gdGhlICdtb292JyBhdG9tIHRvCi0JICBkaXJlY3RseSBwYXNzIHRoZSBkZXNpcmVkICd1ZHRhJyB0aGF0IHNob3VsZCByZWNlaXZlIHRoZSB0YWdzLgotCSAgVGhpcyBhbGxvd3MgdGhlIHRhZ3MgdG8gYmUgd3JpdHRlbiB0byAndWR0YScgYXQgdGhlICdtb292JyBvcgotCSAgdGhlICd0cmFrJyBsZXZlbCwgY3JlYXRpbmcgdGFncyB0aGF0IGFyZSBmb3IgdGhlIGNvbnRhaW5lciBvcgotCSAgZm9yIGEgc3RyZWFtIG9ubHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNDczCi0KLTIwMTUtMDEtMzEgMTA6NDc6NDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IG1hcCBhcHBsaWNhdGlvbiBuYW1lIHRvIF9zd3IgdGFnCi0JICBJdCByZWZlcnMgdG8gdGhlIGFwcGxpY2F0aW9uIG5hbWUgYW5kIHZlcnNpb24gdXNlZCB0byBjcmVhdGUgdGhlCi0JICBmaWxlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyNDczCi0KLTIwMTUtMDEtMzEgMDI6MzA6NDAgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiBGaXggc2Vla2luZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUgaW4gcmV2ZXJzZSBtb2RlLgotCSAgU25hcCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHdoZW4gc2Vla2luZyBwYXN0IHRoZSBlbmQgaW4gcmV2ZXJzZSBtb2RlLAotCSAgYW5kIGFsc28gZml4IEdTVF9TRUVLX1RZUEVfRU5EIGFuZCBHU1RfU0VFS19UWVBFX05PTkUgaGFuZGxpbmcKLQkgIGZvciB0aGUgc3RvcCBwb3NpdGlvbiBieSBhbHdheXMgc2Vla2luZyBvbiBhIHNlZ21lbnQgaW4gc3RyZWFtIHRpbWUKLQotMjAxNS0wMS0zMCAxODoyMjozMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRml4IHNpZ25hbCBuYW1lCi0JICBUaGlzIHdhc24ndCBtZWFudCB0byBiZSBwdXNoZWQgYXQgYWxsIHlldCwgYnV0IG5vdyB0aGF0IGl0J3MgdGhlcmUKLQkgIGFscmVhZHkgaXQgd29uJ3QgaHVydCB0byBtYWtlIGl0IGNvcnJlY3QgYXQgbGVhc3QuCi0KLTIwMTUtMDEtMzAgMTY6NTY6MzUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBzdGF0czogRml4IHR5cG8gaW4gZG9jdW1lbnRhdGlvbgotCi0yMDE1LTAxLTMwIDE2OjUwOjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBBZGQgbmV3IG9uLXJlY2VpdmluZy1ydGNwIHNpZ25hbAotCSAgVGhpcyB3aWxsIGJlIGVtaXR0ZWQgd2hlbmV2ZXIgYW4gUlRDUCBwYWNrZXQgaXMgcmVjZWl2ZWQuIERpZmZlcmVudCB0bwotCSAgb24tZmVlZGJhY2stcnRjcCwgdGhpcyBzaWduYWwgZ2V0cyBldmVyeSBjb21wbGV0ZSBSVENQIHBhY2tldCBhbmQgbm90Ci0JICBqdXN0IHRoZSBpbmRpdmlkdWFsIGZlZWRiYWNrIHBhY2tldHMuCi0KLTIwMTUtMDEtMjggMTQ6MDI6MTUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IHNpbXBsaWZ5IHNlZ21lbnQuYmFzZSBtYXRoCi0JICBSZW1vdmUgYSBmaXggZm9yIGhlYXZpbHkgZWRpdGVkIGZpbGVzIGFkZGVkIGZvciBmaXhpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDU4MzAgdG8gd29yawotCSAgd2l0aCBzZWVrcyBhbmQgcHJvcGVyIGdhcHMgcGxheWJhY2suIFRoZSBmaXggd2FzIHJlcGxhY2VkCi0JICBmb3IgYSBtb3JlIGdlbmVyYWwgc29sdXRpb24gdGhhdCBiYXNlcyBvbiB1c2luZyBwcmV2aW91cwotCSAgc2VnbWVudCdzIGR1cmF0aW9uLCBqdXN0IGxpa2UgaXQgd29ya3MgZm9yIG1lZGlhIHNlZ21lbnRzCi0JICBwbGF5YmFjay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM1MTgKLQotMjAxNS0wMS0yNyAxNDowMDozNSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy1kaXN0LmM6Ci0JICB2aWRlb21peGVyOiB1cGRhdGUgb3JjIGZpbGVzCi0KLTIwMTUtMDEtMjYgMTc6MDg6MTIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggZGF0YSBkcm9wcGluZyBmb3IgZnJhZ21lbnRlZCBzdHJlYW1zCi0JICBGb3IgZnJhZ21lbnRlZCBzdHJlYW1zIHdpdGggZXh0cmEgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBtZGF0Ci0JICBxdGRlbXV4IHdhcyBub3QgZHJvcHBpbmcgdGhvc2UgYnl0ZXMgYW5kIHdvdWxkIHRyeSB0byB1c2UKLQkgIHRoYXQgZXh0cmEgZGF0YSBhcyB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGF0b20sIGNhdXNpbmcgdGhlCi0JICBzdHJlYW0gdG8gZmFpbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDM0MDcKLQotMjAxNS0wMS0yNSAxNzozMDozMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRGVwcmVjYXRlIHJ0Y3AtaW1tZWRpYXRlLWZlZWRiYWNrLXRocmVzaG9sZCBwcm9wZXJ0eQotCSAgSXQgaGFkIG5vIGVmZmVjdCBzaW5jZSBxdWl0ZSBzb21lIHRpbWUgYW5kIGFsc28gaXMgbm90IG5lZWRlZCBpbiBnZW5lcmFsLAotCSAgZXNwZWNpYWxseSBub3QgdG8gc3dpdGNoIGJldHdlZW4gaW1tZWRpYXRlIGZlZWRiYWNrIG1vZGUgYW5kIGVhcmx5IGZlZWRiYWNrCi0JICBtb2RlLiBUaGUgbGF0ZXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIFJGQyBpcyB0aGF0IGZyb20gdGhlIGVuZHBvaW50IHBvaW50IG9mCi0JICB2aWV3LCBib3RoIG1vZGVzIGFyZSBleGFjdGx5IHRoZSBzYW1lLiBSVENQIGlzIG9ubHkgYWxsb3dlZCB0byB1c2UgdGhlCi0JICBiYW5kd2lkdGggYXMgZ2l2ZW4gYnkgdGhlIFJGQyBjb25zdHJhaW50cywgYXMgc3VjaCBpdCBpcyBvbmx5IGV2ZXIgcG9zc2libGUKLQkgIHRvIHNjaGVkdWxlIGEgUlRDUCBwYWNrZXQgZWFybHkgYnV0IGl0J3MgYWdhaW5zdCB0aGUgUkZDIHRvIHNjaGVkdWxlIG1vcmUgUlRDUAotCSAgcGFja2V0cy4KLQkgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaW1tZWRpYXRlIGZlZWRiYWNrIG1vZGUgYW5kIGVhcmx5IGZlZWRiYWNrIG1vZGUgaXMgdGhhdAotCSAgdGhlIGZvcm1lciBndWFyYW50ZWVzIHRoYXQgYW4gUlRDUCBwYWNrZXQgY2FuIGJlIHNlbnQgZm9yIGV2ZXJ5IGV2ZW50Ci0JICAiaW1tZWRpYXRlbHkiLCB3aGljaCBtZWFucyB0aGF0IHRoZSBiYW5kd2lkdGggY2FsY3VsYXRpb25zIGZyb20gdGhlIFJGQyBoYXZlCi0JICByZXN1bHRlZCBpbiBhbiBSVENQIHNjaGVkdWxpbmcgaW50ZXJ2YWwgdGhhdCBpcyBzbWFsbCBlbm91Z2guIEVhcmx5IGZlZWRiYWNrCi0JICBtb2RlIG9uIHRoZSBvdGhlciBoYW5kIG1lYW5zIHRoYXQgd2UgY2FuIHNjaGVkdWxlIHNvbWUgcGFja2V0cyBlYXJseSB0byBtYWtlCi0JICB0aGF0IGhhcHBlbiwgYnV0IGl0J3Mgbm90IGd1YXJhbnRlZWQgYXQgYWxsIHRoYXQgaXQncyBwb3NzaWJsZSB0byBzY2hlZHVsZQotCSAgYW4gUlRDUCBwYWNrZXQgcGVyIGV2ZW50IChpLmUuIHRoZXkgbmVlZCB0byBiZSBhY2N1bXVsYXRlZCBvciBkcm9wcGVkKS4KLQotMjAxNS0wMS0yMiAxMDoyOTozOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRGVsYXkgdGhlIG5leHQgcmVndWxhciBSVENQIHBhY2tldCBhZnRlciBlYXJseSBSVENQCi0JICBUaGlzIGlzIHJlcXVpcmVkIHRvIG5vdCBleGNlZWQgdGhlIHNob3J0IHRlcm0gYXZlcmFnZSBSVENQIGJpdHJhdGUgd2hlbgotCSAgdXNpbmcgZWFybHkgZmVlZGJhY2sgYXMgY29tcGFyZWQgdG8gd2l0aG91dCBlYXJseSBmZWVkYmFjay4KLQotMjAxNS0wMS0yMiAxMDoyODo1MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogQWRkIG5ldyBzZW5kLXJ0Y3AtZnVsbCBzaWduYWwKLQkgIFRoaXMgaW5kaWNhdGVzIHdpdGggYSBib29sZWFuIHJldHVybiB2YWx1ZSBpZiBzY2hlZHVsaW5nIGEgbmV3IFJUQ1AgcGFja2V0Ci0JICB3aXRoaW4gdGhlIHJlcXVlc3RlZCBkZWxheSB3YXMgcG9zc2libGUuIE90aGVyd2lzZSBpdCBiZWhhdmVzIGV4YWN0bHkgbGlrZQotCSAgc2VuZC1ydGNwLiBUaGUgb25seSByZWFzb24gZm9yIGFkZGluZyBhIG5ldyBzaWduYWwgaXMgQUJJIGNvbXBhdGliaWxpdHkuCi0KLTIwMTUtMDEtMjAgMDA6MzI6MDAgKzAwMDAgIEppbW15IE9obiA8eW9uZ2ppbi5vaG5AbGdlLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGcmVlIGZvcm1hdF9pbmZvIGluIHF1ZXJ5X2dldGNhcHMKLQkgIElmIHdlIGNhbiBub3QgY3JlYXRlIHByb2JlIHN0cmVhbSBpbiBxdWVyeV9nZXRjYXBzIGZ1bmN0aW9uLCBpdCB3aWxsIGFwcGVhcgotCSAgbWVtb3J5IGxlYWthZ2UgZnJvbSBmb3JtYXQgaW5mby4KLQkgIFRoZSBmb2xsb3dpbmcgcGF0Y2ggcHJldmVudCBtZW1vcnkgbGVha2FnZSBpbiBwdWxzZXNpbmsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzMTc4Ci0KLTIwMTUtMDEtMjMgMTc6MzU6NTEgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2FkZW11eDogcmVtb3ZlIHVubmVjZXNzYXJ5IGNoZWNrCi0JICBObyBtYXR0ZXIgaWYgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2luZGV4X2N1ZXRyYWNrICgpIHJldHVybnMgdGhhdCB0aGUKLQkgIGZsb3cgaXMgT0sgb3Igbm90LCB0aGUgY2hlY2sgdGhlcmUgd2lsbCBiZSBhIGJyZWFrIGZyb20gdGhlIHN3aXRjaC4gUmVtb3ZpbmcgdGhlCi0JICBjaGVjayBzaW5jZSB0aGUgb3V0Y29tZSBpcyB0aGUgc2FtZS4KLQkgIENJRCAjMTI2NTc2MgotCi0yMDE1LTAxLTIzIDE1OjE2OjI1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogQXZvaWQgdXNpbmcgZnJlZWQgdmFyaWFibGUKLQkgIHRoZSBuYW1lIHZhcmlhYmxlIG1pZ2h0IGhhdmUgYmVlbiBhdHRyaWJ1dGVkIHRvIHBhZF9uYW1lLCBtYWtlIHN1cmUgd2UKLQkgIGZyZWUgaXQgb25seSAqYWZ0ZXIqIHBhZF9uYW1lIGhhcyBiZWVuIHVzZWQuCi0JICBDb3Zlcml0eSBDSUQgOiAxMjY1Nzc0Ci0KLTIwMTUtMDEtMjMgMTU6MTM6NTUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IEF2b2lkIHVzaW5nIGZyZWVkIHZhcmlhYmxlCi0JICB0aGUgbmFtZSB2YXJpYWJsZSBtaWdodCBoYXZlIGJlZW4gYXR0cmlidXRlZCB0byBwYWRfbmFtZSwgbWFrZSBzdXJlIHdlCi0JICBmcmVlIGl0IG9ubHkgKmFmdGVyKiBwYWRfbmFtZSBoYXMgYmVlbiB1c2VkLgotCSAgQ292ZXJpdHkgQ0lEIDogMTI2NTc3NQotCi0yMDE0LTExLTE0IDEyOjU5OjMxICswMTAwICBQZXRlciBTZWlkZXJlciA8cHMucmVwb3J0QGdteC5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IHJldXNlIGNhcHMgZnJhbWVyYXRlIGlmIG5vdCBvdmVyd3JpdHRlbiBieSB2NGwyIGRldmljZQotCSAgRW5hYmxlcyBkdXJhdGlvbiBzZXR0aW5nIGluIHY0bDJzcmMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNDAzCi0KLTIwMTUtMDEtMjIgMTA6Mjk6MjQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEZpeCBpbmRlbnRpb24KLQotMjAxNS0wMS0yMSAxNzozNjoyNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXhfZHVtcDogQnlwYXNzIGV2ZW4gbW9yZSBjb2RlIGlmIGRlYnVnZ2luZyBpcyBkaXNhYmxlZAotCSAgQW5kIGF2b2lkIHVzaW5nIHZhcmlhYmxlcyB0aGF0IHdvbid0IGV4aXN0IHdoZW4gZGVidWdnaW5nIGlzIGRpc2FibGVkCi0KLTIwMTUtMDEtMjEgMTU6MzA6MzMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmM6Ci0JICBxdGRlbXV4OiBPbmx5IHRyYXZlcnNlL2R1bXAgbm9kZXMgaWYgZ3VhcmFudGVlZCB0byBiZSB1c2VkCi0JICBfX2dzdF9kZWJ1Z19taW4gaXMgdGhlICJnbG9iYWwiIGxvd2VzdCBkZWJ1ZyBsZXZlbCBzZXQuIFRoZXJlJ3Mgbm8KLQkgIGd1YXJhbnRlZSB0aGUgcXRkZW11eCBkZWJ1ZyBjYXRlZ29yeSBpcyBhY3R1YWxseSBzZXQgYXQgdGhhdCBsZXZlbC4KLQotMjAxNC0xMi0yMCAxNzowOToxNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSAgbWF0cm9za2E6IEF2b2lkIGRlYnVnZ2luZyBiZWxvdyBjYXRlZ29yeSB0aHJlc2hvbGQKLQkgIFRoaXMgcGFydCBhbG9uZSB3YXMgd2hhdCBtYWRlIHRoZSBtYXRyb3NrYSB0aHJlYWQgdGFrZSBhIGZ1bGwgY29yZQotCSAgb24gYW4gYW5kcm9pZCBwaG9uZSAuLi4KLQotMjAxNS0wMS0yMSAwOTo1NTozMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuYzoKLQkqIGV4dC9taWttb2QvbWlrbW9kX3R5cGVzLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJhZGlvYWMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvdGVtcGxhdGUuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgQ29uc3RpZnkgc29tZSBzdGF0aWMgYXJyYXlzIGV2ZXJ5d2hlcmUKLQotMjAxNS0wMS0xOSAxNzo0OTo1NCArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGRlYWRsb2NrIHNlZWtpbmcgaW4gZmlsZXMgd2l0aG91dCBzZWVrIGVudHJpZXMKLQkgIEEgbXV0ZXggdW5sb2NrIHdhcyBtaXNzaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTk3NQotCi0yMDE1LTAxLTE5IDEyOjM0OjI1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuYzoKLQkgIHZpZGVvbWl4ZXI6IGZpeCBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3MgaW4gYmxlbmQgZnVuY3Rpb24gd2l0aCBuZWdhdGl2ZSB5cG9zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMTE1Ci0KLTIwMTUtMDEtMTMgMTY6NDk6MzQgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IFByb3h5IGdldGNhcHMKLQkgIFJlcGxhY2UgdGhlIHNpbmtfcXVlcnkgd2l0aCBuZXcgZ2V0Y2FwcygpIHZpcnR1YWwgYW5kIHVzZSB0aGUgcHJveHkKLQkgIGhlbHBlciB3aXRoIHRoZSBwcm9iZWQgY2Fwcy4gVGhpcyBhbGxvdyB1cHN0cmVhbSBlbGVtZW50IHRha2luZyBkZWNpc2lvbgotCSAgYmFzZSBvbiB3aGF0IGlzIHN1cHBvcnRlZCBkb3duc3RyZWFtLgotCi0yMDE1LTAxLTEzIDE5OjA1OjIwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jOgotCSAgcXRtdXg6IEFkZCBzdXBwb3J0IGZvciB2MjEwCi0KLTIwMTUtMDEtMTMgMTg6NTg6MDEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogdjIxMCBpcyB2MjEwLCBub3QgVVlWWSBhbmQgeXV2MiBpcyBZVVkyLCBub3QgSTQyMAotCSAgQWxzbyBhZGQgYSBmZXcgb3RoZXIgcmF3IHZpZGVvIGZvcm1hdHMgd2Ugc3VwcG9ydDogdjMwOCwgdjIxNgotCSAgYW5kIGFkZCBjb21tZW50cyBmb3IgYSBmZXcgb3RoZXJzIHdlIGRvbid0IHN1cHBvcnQgeWV0LgotCSAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3RlY2hub3Rlcy90bjIxNjIvCi0KLTIwMTUtMDEtMTIgMTU6NTY6MjkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBmMmM2Yjk1IHRvIGJjNzZhOGIKLQotMjAxNS0wMS0xMCAxNTo1MToxNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogRGlzYWJsZSBoYWNrIGZvciBOU0FwcCBpdGVyYXRpb24gd2l0aCBhIHNwZWNpYWwgI2RlZmluZQotCSAgVGhlIGhhY2sgY2F1c2VzIGRlYWRsb2NrcyBhbmQgb3RoZXIgaW50ZXJlc3RpbmcgcHJvYmxlbXMgYW5kIGl0IHJlYWxseQotCSAgY2FuIG9ubHkgYmUgZml4ZWQgcHJvcGVybHkgaW5zaWRlIEdMaWIuIFdlIHdpbGwgaW5jbHVkZSBhIHBhdGNoIGZvcgotCSAgR0xpYiBpbiBvdXIgYnVpbGRzIGZvciBub3cgdGhhdCBoYW5kbGVzIHRoaXMsIGFuZCBob3BlZnVsbHkgYXQgc29tZQotCSAgcG9pbnQgR0xpYiB3aWxsIGFsc28gbWVyZ2UgYSBwcm9wZXIgc29sdXRpb24uCi0JICBBIHByb3BlciBzb2x1dGlvbiB3b3VsZCBmaXJzdCByZXF1aXJlIHRvIHJlZmFjdG9yIHRoZSBwb2xsaW5nIGluCi0JICBHTWFpbkNvbnRleHQgdG8gb25seSBwcm92aWRlIGEgc2luZ2xlIGZkLCBlLmcuIHZpYSBlcG9sbC9rcXVldWUKLQkgIG9yIGEgdGhyZWFkIGxpa2UgdGhlIG9uZSBhZGRlZCBieSBvdXIgcGF0Y2guIFRoZW4gdGhpcyBzaW5nbGUKLQkgIGZkIGNvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBHTWFpbkNvbnRleHQgYW5kIGRpcmVjdGx5IGludGVncmF0ZWQKLQkgIGludG8gYSBOU1J1bkxvb3AuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDUwCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0Mzc0Ci0KLTIwMTUtMDEtMDggMjE6MDc6MDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiB1bmNvcmsgaWYgbmVlZGVkIHVwb24gY29tbWl0Ci0JICAuLi4gdG8gcHJvdmlkZSBmb3IgYSBydW5uaW5nIGNsb2NrLgotCi0yMDE1LTAxLTA5IDE2OjU5OjUzIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBQcmV2ZW50IHJlbmVnb3RpYXRpb24KLQkgIFJlbmVnb3RpYXRpb24gaXNuJ3Qgc3VwcG9ydGVkLCBzaW1wbHkgcHJldmVudCBpdCB0aGUgd2F5IHdlIGRvIGluCi0JICB2NGwyc3JjLgotCi0yMDE1LTAxLTA2IDEzOjU0OjI1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBEb24ndCB1bmxvY2sgdGhlIHN0cmVhbSBsb2NrIHR3aWNlCi0KLTIwMTUtMDEtMDkgMTE6NDA6NDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggc3RyZWFtIHRpbWUgY29udmVyc2lvbgotCSAgVXNlIHRoZSByaWdodCBtYWNybyB0byBjb252ZXJ0IHRvIHRoZSBjb3JyZWN0IHNjYWxlIG9yIHRoZQotCSAgc2VnbWVudCBpbmZvcm1hdGlvbiB3aWxsIGJlIHdyb25nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyNTcyCi0KLTIwMTUtMDEtMDcgMTg6NDg6NTggLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBBZGQgcHJvdGVjdGlvbiBhZ2FpbnN0IGRyaXZlciBidWcKLQkgIHY0bDJsb29wYmFjayBkcml2ZXIgaGFzIGEgdGhpcyBuYXN0eSBidWcgdGhhdCBpZiB0aGUgcXVldWUgaXMgbGFyZ2VyCi0JICB0aGVuIDIgYnVmZmVycywgaXQgcmV0dXJucyByYW5kb20gaW5kZXggb24gZHFidWYuIFNvIGZhciB3ZSBhc3N1bWVkCi0JICB0aGF0IHRoZSBpbmRleCB3YXMgYWx3YXlzIHJpZ2h0LCB3aGljaCB3b3VsZCBsZWFkIHRvIG1lbW9yeSBiZWluZwotCSAgdW5yZWYgdHdpY2UsIGFuZCBldmVudHVhbGx5IGNyYXNoLgotCi0yMDE1LTAxLTA3IDE3OjU4OjA1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IERvbid0IHVzZSBhbGxvY2F0b3Igc2l6ZSB0byBpdGVyYXRlCi0JICBBcyB0aGUgYnVmZmVyIGFycmF5IGlzIGZpeGVkIHNpemUgYW5kIHNtYWxsLCBpdCdzIHNhZmVyIHRvIHNpbXBseQotCSAgdXNlIHRoaXMgc3RhdGljIHNpemUgdG8gY2xlYW51cCB0aGUgYnVmZmVycy4gVGhpcyBpcyBhbHNvIG1vcmUKLQkgIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdC4gVGhlIGFzc29jaWF0ZWQgbWV0aG9kIGlzIG5vIGxvbmdlcgotCSAgcmVxdWlyZWQgYW5kIGNhbiBiZSBkcm9wcGVkLgotCi0yMDE1LTAxLTA3IDE3OjU1OjE0IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBEb24ndCBjbGVhbiBidWZmZXIgYXJyYXkgaW4gZGlzcG9zZQotCSAgVGhpcyBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZG9uZSwgcGx1cyB0aGlzIGNvZGUgaXMgaW5jb3JyZWN0Ci0JICBhbmQgbWF5IGxlYWQgdG8gY3Jhc2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDc0Ci0KLTIwMTUtMDEtMDcgMTc6NDg6MzEgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IERvbid0IHJlZiBxdWV1ZWQgb3V0cHV0IGJ1ZmZlcgotCSAgVGhpcyBwYXJ0bHkgcmV2ZXJ0IHRvIHRoZSBvbGQgMS4yIGJlaGF2aW9yLiBJbnN0ZWFkIG9mIGtlZXBpbmcgYQotCSAgcmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHF1ZXVlZCwgd2Ugc2ltcGx5IHJlbGVhc2UgdGhlbSBidXQKLQkgIGRvbid0IGZvcndhcmQgaXQgdG8gR3N0QnVmZmVyUG9vbC4gVGhpcyB3YXksIHRoZSBidWZmZXIgcG9vbCBkb24ndAotCSAgbmVlZCB0byBiZSBmbHVzaGVkIHRvIGJlIHN0b3BwZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMDc0Ci0KLTIwMTUtMDEtMDggMTE6Mzc6MjMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IE5ldmVyIGZhaWwgb24gc3RyZWFtb2ZmCi0JICBGYWlsaW5nIHN0cmVhbW9mZiBwcmV2ZW50cyBhbGxvY2F0b3IgZnJvbSBiZWluZyBkaXNwb3NlZCBoZW5jZQotCSAgbGVhZCB0byBkZXZpY2UgRkQgbGVhay4gVGhlcmUgaXMgbm8ga25vd24gY2FzZXMgd2hlcmUgc3RyZWFtb2ZmCi0JICBtYXkgZmFpbHMgZm9yIHdoaWNoIHdlJ2Qgc3RpbGwgYmUgc3RyZWFtaW5nLiBzdHJlYW1vZmYgaXMga25vd24KLQkgIHRvIGZhaWwgd2hlbiBhIGRldmljZSBpcyBiZWluZyB1bnBsdWdnZWQgKGluIHdoaWNoIGNhc2UgZXJybm8KLQkgIDE5L0VOT0RFViBpcyBzZXQpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjczNAotCi0yMDE1LTAxLTA3IDIxOjUyOjE3IC0wNTAwICBCcmFkIFNtaXRoIDxicmFkQGNvbXN0eWxlLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgdjRsMjogQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyB0aGUgcHJlc2VuY2Ugb2YgVjRMMiBzdXBwb3J0IG9uIE9wZW5CU0QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Jldmlldz9idWc9NzQyNTAzCi0KLTIwMTUtMDEtMDQgMTU6NTc6MTAgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiByZXF1ZXN0IGF0IGxlYXN0IDggYnl0ZXMgdG8gcHJvcGVybHkgcGFyc2UgaGVhZGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyMzI1Ci0KLTIwMTUtMDEtMDcgMTY6MjA6MDMgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1pY2hhZWwuc21pdGhAcmRpby5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IHNraXAgYW4gYWRkaXRpb25hbCB1bmludGVyZXN0aW5nIGNodW5rIHR5cGUgYmVmb3JlIHRoZSBmbXQgY2h1bmsuCi0KLTIwMTUtMDEtMDcgMTg6MTY6MTIgKzAwMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXMuYmdAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOgotCSAgYXVkaW9keW5hbWljOiBhc3NlcnQgZnVuY19pbmRleCBpcyBpbnNpZGUgYm91bmRzCi0JICBCcmluZ2luZyBiYWNrIHRoZSBjaGVjayByZW1vdmVkIGluIHRoZSBwcmV2aW91cyBjb21taXQgYnV0IGhhdmUgdGhhdCBjaGVjayBiZSBhCi0JICBnX2Fzc2VydC4gQ2hhbmdpbmcgdGhlIGZ1bmN0aW9uIHRvIHN0YXRpYyB2b2lkIHNpbmNlIHJldHVybiBjYW4gbmV2ZXIgYmUgRmFsc2UsCi0JICBiZWNhdXNlIGF1ZGlvIGZvcm1hdCB3aWxsIG5ldmVyIGJlIHVua293bi4KLQotMjAxNS0wMS0wNyAxNzozMTozOSArMDAwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JICBhdWRpb2R5bmFtaWM6IHJlbW92ZSBhbHdheXMtdHJ1ZSBjb25kaXRpb25hbAotCSAgZnVuY19pbmRleCBpcyBzZXQgYnkgdGhlIHN1bSBvZiB0aHJlZSB0ZXJuYXJ5IG9wZXJhdG9ycyB3aGljaCBhZGQsIDA6NCwgMDoyLAotCSAgYW5kIDE6MC4gTWluaW11bSB2YWx1ZSB3b3VsZCBiZSAwKzArMD0wLCBhbmQgbWF4aW11bSB3b3VsZCBiZSA0KzIrMT03LgotCSAgVGhlIGNvbmRpdGlvbmFsIGNoZWNraW5nIGlmIGZ1bmNfaW5kZXggaXMgPj0gMCBhbmQgPCA4IHdpbGwgYWx3YXlzIGJlIHRydWUuCi0JICBSZW1vdmluZyBpdC4KLQkgIENJRCAxMjI2NDQyCi0KLTIwMTUtMDEtMDcgMTg6MDU6MTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBJZiB3ZSBnZXQgYSBnYXAgd2l0aCBhIGJ1ZmZlciB3aXRob3V0IERUUywgZXJyb3Igb3V0Ci0JICBXZSAoY3VycmVudGx5PykgY2FuJ3QgcmVhbGx5IGhhbmRsZSBnYXBzIGJldHdlZW4gUlRQIHBhY2tldHMgaWYgdGhleSdyZSBub3QKLQkgIHByb3Blcmx5IHRpbWVzdGFtcGVkLiBUaGUgY3VycmVudCBjb2RlIHdvdWxkIGdvIGludG8gY2FsY3VsYXRpb25zIHdpdGgKLQkgIEdTVF9DTE9DS19USU1FX05PTkUgYW5kIHRoZW4gY2F1c2UgYXNzZXJ0aW9ucyBldmVyeXdoZXJlLiBJdCdzIHByb2JhYmx5Ci0JICBiZXR0ZXIgdG8gZXJyb3Igb3V0IGNsZWFubHkgaW5zdGVhZC4KLQotMjAxNC0xMS0yMSAxMTozOToxOSAtMDgwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHNldCBQTEFZSU5HIHN0YXRlIGFmdGVyIGNvbmZpZ3VyaW5nIGNhcHMKLQkgIFdlIHNldCB0byBQTEFZSU5HIGFmdGVyIHdlIGhhdmUgY29uZmlndXJlZCB0aGUgY2Fwcywgb3RoZXJ3aXNlIHdlCi0JICBtaWdodCBlbmQgdXAgY2FsbGluZyByZXF1ZXN0X2tleSAod2l0aCBTUlRQKSB3aGlsZSBjYXBzIGFyZSBzdGlsbAotCSAgYmVpbmcgY29uZmlndXJlZCwgZW5kaW5nIGluIGEgY3Jhc2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNTA1Ci0KLTIwMTQtMTItMzAgMTg6MDM6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1Zm92ZXJsYXktdGVzdC5jOgotCSAgdGVzdHM6IGdka3BpeGJ1Zm92ZXJsYXktdGVzdDogcmVtb3ZlIG91dGRhdGVkIEZJWE1FCi0KLTIwMTQtMTItMzAgMTc6MTk6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jOgotCSAgdGVzdHM6IHJ0cGNvbGxpc2lvbjogdXNlIGFsYXdlbmMvZGVjIGluIHRoZXNlIHRlc3RzIGluc3RlYWQgb2YgU3BlZXgKLQkgIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBidWlsdCwgd2hpbGUgdGhlIHNwZWV4IGVsZW1lbnRzIGFyZSBub3QuCi0JICBOZWVkIHRvIGNoZWNrIGZvciBhIHNtYWxsZXIgbnVtYmVyIG9mIGJ1ZmZlcnMgdGhlbiAoNy0+NCkgYmVjYXVzZQotCSAgc3BlZXhlbmMgd2lsbCBhZGQgMyBoZWFkZXIgYnVmZmVycyB3aGlsZSBhbGF3ZW5jIHdpbGwganVzdCBvdXRwdXQKLQkgIGFzIG1hbnkgYnVmZmVycyBhcyBpdCByZWNlaXZlcyBhcyBpbnB1dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDIwOTgKLQotMjAxNC0xMi0zMCAxNjozNjowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgIHRlc3RzOiBzaW1wbGUtbGF1bmNoLWxpbmVzOiBvbmx5IHJ1biBqcGVnL3BuZyB0ZXN0cyBpZiBlbGVtZW50cyBhcmUgYXZhaWxhYmxlCi0KLTIwMTQtMTItMzAgMTY6MjY6NTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogRG9uJ3QgcmV0dXJuIGEgYnVmZmVyIHdoZW4gcmV0dXJuaW5nIG5vdCBHU1RfRkxPV19PSwotCSAgYmFzZXNyYyBhc3N1bWVzIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGEgYnVmZmVyIGlmCi0JICBzb21ldGhpbmcgZWxzZSB0aGFuIE9LIGlzIHJldHVybmVkLiBJdCB3aWxsIGp1c3QKLQkgIGxlYWsgYW55IGJ1ZmZlciB3ZSBtaWdodCBhY2NpZGVudGlhbGx5IHByb3ZpZGUKLQkgIGhlcmUuCi0JICBUaGlzIGNhbiBwb3RlbnRpYWxseSBoYXBwZW4gZHVyaW5nIGZsdXNoaW5nLgotCSAgTWF5YmUgZml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTk5MwotCi0yMDE0LTEyLTMwIDE0OjUyOjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBhdXguYzoKLQkgIHRlc3RzOiBydHBhdXg6IHVzZSBhbGF3ZW5jL2RlYyBpbiB0aGVzZSB0ZXN0cyBpbnN0ZWFkIG9mIFNwZWV4Ci0JICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYnVpbHQsIHdoaWxlIHRoZSBzcGVleCBlbGVtZW50cyBhcmUgbm90LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MjA5OAotCi0yMDE0LTEyLTI5IDE1OjM1OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEltcHJvdmUgZGV0ZWN0aW9uIG9mIGJlaW5nIHN0dWNrIGF0IHRoZSBzYW1lIG9mZnNldAotCSAgT25seSBlcnJvciBvdXQgaWYgd2UgcmVhZCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIGFnYWluIGFuZCBnb3QgdGhlCi0JICBzYW1lIGxlbmd0aC4gSnVzdCB0aGUgc2FtZSBwb3NpdGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgZW5vdWdoLgotCi0yMDE0LTEyLTI5IDE1OjAwOjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IERvbid0IGdldCBzdHVjayBhdCB0aGUgc2FtZSBvZmZzZXQgd2hlbiBzZWFyY2hpbmcgZm9yIGNsdXN0ZXJzCi0JICBUaGlzIGNvdWxkIGhhcHBlbiBpZiB0aGVyZSBpcyBhbiBpbnZhbGlkIGNsdXN0ZXIgd2l0aCBzaXplIDAsIGFuZCBpbiB0aGF0Ci0JICBjYXNlIGp1c3QgZXJyb3Igb3V0IGluc3RlYWQgb2YgbG9vcGluZyBmb3JldmVyLgotCi0yMDE0LTEyLTI1IDIxOjMyOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZml4IEFMQUMgbXV4aW5nCi0JICBBY3R1YWxseSBjb3B5IHRoZSBjb2RlYyBkYXRhIGluc3RlYWQgb2YgY29weWluZyBub3RoaW5nCi0JICBhbmQgdGhlbiBib21iaW5nIG91dCBiZWNhdXNlIHRoZXJlJ3Mgbm8gZGF0YS4KLQkgIEZpeGVzOiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgISBhdmVuY19hbGFjICEgcXRtdXggISBmYWtlc2luawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTc4MwotCi0yMDE0LTEyLTI1IDE1OjQ4OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICBydHBwdGRlbXV4OiBqdXN0IGRyb3AgaW52YWxpZCBydHAgcGFja2V0cyBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dAotCSAgQXBwYXJlbnRseSBsaW5waG9uZSBzZW5kcyBhbiBpbnZhbGlkIFJUUCBwYWNrZXQgYXMgdmVyeQotCSAgZmlyc3QgcGFja2V0LiBXZSB3YW50IHRvIGlnbm9yZSB0aGF0IGluc3RlYWQgb2YgZXJyb3JpbmcKLQkgIG91dCAoc2FtZSBmb3IgYW55IG90aGVyIGludmFsaWQgcGFja2V0cyByZWFsbHkpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTM5OAotCi0yMDE0LTEyLTI1IDE1OjQ0OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICBydHBwdGRlbXV4OiBmaXggMC4xMC1pc20gaW4gZG9jcwotCi0yMDE0LTEyLTI1IDE0OjU4OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9pY2xlcy9nZGtwaXhidWZvdmVybGF5LXRlc3QuYzoKLQkgIHRlc3RzOiBnZGtwaXhidWZvdmVybGF5LXRlc3Q6IHVzZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyB0byBmaXggZGVtbwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU2NgotCi0yMDE0LTEyLTI1IDE0OjUzOjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5Lmg6Ci0JICBnZGtwaXhidWZvdmVybGF5OiBhZGQgInBvc2l0aW9uaW5nLW1vZGUiIHByb3BlcnR5IHRvIGFsbG93IGFic29sdXRlIHBvc2l0aW9ucwotCSAgU2V0IHBvc2l0aW9uaW5nLW1vZGU9cGl4ZWxzLWFic29sdXRlIHRvIGFsbG93IHBvc2l0aW9uaW5nIHdpdGgKLQkgIGFic29sdXRlIGNvb3JkaW5hdGVzLCBtZWFuaW5nIG5lZ2F0aXZlIHgveSBvZmZzZXRzIHdpbGwgYmUKLQkgIGludGVycHJldGVkIGFzIGJlaW5nIHRvIHRoZSBsZWZ0L2Fib3ZlIHRoZSB2aWRlbyBmcmFtZSBpbnN0ZWFkCi0JICBvZiBiZWluZyBpbnRlcnByZXRlZCBhcyByZWxhdGl2ZSB0byB0aGUgcmlnaHQvYm90dG9tIGVkZ2Ugb2YKLQkgIHRoZSB2aWRlbyBmcmFtZSAod2hpY2ggaXMgYSBzaWxseSBkZWZhdWx0LCBidXQgdGhhdCdzIGhvdyBpdCBpcykuCi0JICBUaGlzIG1lYW5zIHdlIGNhbiBuaWNlbHkgc2xpZGUgaW1hZ2VzIGludG8gYW5kIG91dCBvZiB0aGUgZnJhbWUsCi0JICBzZWUgZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU2NgotCi0yMDE0LTEyLTIyIDE1OjMzOjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgIG9zeGF1ZGlvOiBEaXJlY3RseSByZXR1cm4gdGhlIHJpbmdidWZmZXIncyBjYXBzIGlmIGl0IGlzIGFjcXVpcmVkCi0KLTIwMTQtMTItMjIgMTI6NTY6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgb3N4YXVkaW86IFB1dCBhbGwgYXVkaW8gZm9ybWF0cyBpbnRvIHRoZSB0ZW1wbGF0ZSBjYXBzCi0JICBXZSByZXBvcnQgdGhlIHByb3BlciBjYXBzIGxhdGVyIGZyb20gdGhlIGdldF9jYXBzKCkgdmZ1bmMgaW1wbGVtZW50YXRpb24gYWZ0ZXIKLQkgIHByb2JpbmcgdGhlIHNlbGVjdGVkIGRldmljZS4KLQotMjAxNC0xMi0yMiAxMjo1NjowNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jOgotCSAgb3N4YXVkaW86IEFsc28gc2V0IHRoZSBiaWcgZW5kaWFuIGZsYWcgZm9yIGZsb2F0aW5nIHBvaW50IHNhbXBsZXMKLQotMjAxNC0xMi0yMiAxMTo0NTo1OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogTUFJTlRBSU5FUlM6Ci0JICBNQUlOVEFJTkVSUzogVXBkYXRlIG15IG1haWwgYWRkcmVzcwotCi0yMDE0LTEyLTIyIDEwOjIzOjAxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgIG9zeGF1ZGlvOiBGaXggZGVhZGxvY2sgYW5kIHByb3BlcnR5IGNoYW5nZSBub3RpZmljYXRpb24gaW4gZGV2aWNlIHNlbGVjdGlvbiBjb2RlCi0JICBBZnRlciBjcmVhdGluZyB0aGUgcmluZ2J1ZmZlciB3ZSBoYXZlIHRvIHNldCB0aGUgZGV2aWNlIG9uIHRoZSByaW5nYnVmZmVyIGFzCi0JICBpdCBkZWZhdWx0cyB0byBrQXVkaW9EZXZpY2VVbmtub3duLiBBdCB0aGlzIHBvaW50IGl0IGNhbid0IGhhdmUgY2hhbmdlZCB0bwotCSAgYW55dGhpbmcgZWxzZSB5ZXQgYW5kIHdlIGRvbid0IGhhdmUgdG8gbm90aWZ5IGFib3V0IGNoYW5nZXMgdG8gdGhlIHNpbmsvc3JjCi0JICAiZGV2aWNlIiBwcm9wZXJ0eS4gSXQncyBhbHNvIG5vdCBhIGdvb2QgaWRlYSBiZWNhdXNlIEdzdEF1ZGlvQmFzZVNyYyBoYXMgdGhlCi0JICBvYmplY3QgbG9jayB0YWtlbiB3aGlsZSB0aGUgcmluZ2J1ZmZlciBpcyBjcmVhdGVkLCB3aGljaCBtaWdodCBjYXVzZSBhCi0JICBkZWFkbG9jayBpZiBzb21ldGhpbmcgY2FsbHMgYmFjayBpbnRvIHRoZSBlbGVtZW50IGZyb20gIm5vdGlmeTo6ZGV2aWNlIi4KLQkgIE9uY2UgdGhlIGJhc2UgY2xhc3MgaXMgZG9uZSB3aXRoIHRoZSBOVUxMX1RPX1JFQURZIHN0YXRlIGNoYW5nZSwgaXQgaGFzIG9wZW5lZAotCSAgdGhlIGRldmljZSB2aWEgdGhlIHJpbmdidWZmZXIgYW5kIHRoaXMgbWlnaHQgaGF2ZSBjaG9zZW4gYSBkaWZmZXJlbnQgZGV2aWNlLgotCSAgRXNwZWNpYWxseSBpZiB3ZSBpbml0aWFsbHkgdXNlZCBrQXVkaW9EZXZpY2VVbmtub3duLiBBbHNvIG5vdGlmeSBhYm91dCB0aGlzCi0JICBwcm9wZXJ0eSBjaGFuZ2UgYXMgaW5pdGlhbGx5IGludGVuZGVkIGJ5IHRoaXMgY29kZS4KLQotMjAxNC0xMi0xOSAxMjozMDowMyAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMnBvb2w6IFVwZGF0ZSBjb25maWd1cmF0aW9uIHNpemUKLQkgIFdlIGFscmVhZHkgdXBkYXRlIG91ciBjb3B5IG9mIFZpZGVvSW5mby5zaXplIHRvIHByb3BlciBzaXplLCBub3cgYWxzbwotCSAgdGhlIGNvbmZpZ3VyYXRpb24gc28gdGhlIHNpemUgbWF0Y2hlcyBvbiByZWxlYXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTQyMAotCi0yMDE0LTEyLTE5IDEwOjU3OjI5ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgbWF0cm9za2EtZGVtdXg6IENhY2hlIHVwc3RyZWFtIGxlbmd0aAotCSAgSW5zdGVhZCBvZiBjb25zdGFudGx5IHF1ZXJ5aW5nIHVwc3RyZWFtLCBqdXN0IGNhY2hlIHRoZSBsYXN0IGR1cmF0aW9uLAotCSAgYW5kIGluIHRoZSB1bmxpa2VseW5lc3Mgd2UgbWlnaHQgaGF2ZSBnb25lIG92ZXIgcXVlcnkgYWdhaW4gYmVmb3JlCi0JICBkZWNpZGluZyB3ZSBhcmUgRU9TLgotCSAgQ3V0IDE1JSBjcHUgb2ZmIG1hdHJvc2thZGVtdXggc3RyZWFtaW5nIHRocmVhZCAoc3JzbHkuLi4pCi0KLTIwMTQtMTItMTcgMTc6MzY6MTggKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBtdXgvZGVtdXggdGhlIE9wdXNIZWFkIGhlYWRlcgotCSAgVGhpcyBpcyBtZWFudCB0byBiZSBzbyAoaHR0cHM6Ly93aWtpLnhpcGgub3JnL01hdHJvc2thT3B1cyAtIHdoaWxlCi0JICBpdCBpcyBtYXJrZWQgYXMgYSBkcmFmdCwgdGhpcyBwYXJ0IHdhcyBjb25maXJtZWQgdG8gYmUgY29ycmVjdCBvbgotCSAgSVJDKSwgYW5kIGFsbG93cyBvbmUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZW11eGVkIHN0cmVhbSBpcwotCSAgbXVsdGlzdHJlYW0gb3Igbm90LCBhbmQgdGh1cyBzZXQgdGhlIG11bHRpc3RyZWFtIGNhcHMgZmllbGQKLQkgIGFjY29yZGluZ2x5LiBJbiB0dXJuLCB0aGlzIG1lYW5zIGRvd25zdHJlYW0gZG9lcyBub3QgaGF2ZSB0byBndWVzcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA3NDQKLQotMjAxNC0xMi0xOCAxMTo1MDozMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTCBpZiBhIHN1aXRhYmxlIHN0cmVhbSBmb3IgdGhlIEFVWCBlbGVtZW50IGNhbid0IGJlIGZvdW5kCi0JICBDSUQgMTI1ODcxNwotCi0yMDE0LTEyLTE4IDEwOjUzOjM5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZWYxZmZkYyB0byBmMmM2Yjk1Ci0KLTIwMTQtMTItMTIgMjM6MDY6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSAgdWRwc2luazogYWxsb2NhdGUgc2NyYXRjaCBzcGFjZSBmb3IgcmVuZGVyIGZ1bmN0aW9ucyBvbiB0aGUgaGVhcAotCSAgYW5kIG5vdCB0aGUgc3RhY2suIE91ciBhbGxvY2F0aW9ucyBjb3VsZCBnZXQgYSBiaXQgdG9vIGxhcmdlCi0JICB0byBiZSBzdXJlIGl0J3Mgbm90IGdvaW5nIHRvIGNhdXNlIHRyb3VibGUgdXNpbmcgdGhlIHN0YWNrLgotCi0yMDE0LTA2LTI0IDAxOjE2OjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiByZS11c2Ugc2VuZF9idWZmZXJzKCkgY29kZSBwYXRoIGZvciByZW5kZXIoKSBmdW5jdGlvbgotCSAgSXQncyBsaWtlIHJlbmRlcmluZyBhIGJ1ZmZlciBsaXN0LCBqdXN0IHdpdGggb25lIGJ1ZmZlci4KLQkgIEhhcyB0aGUgYWRkZWQgYWR2YW50YWdlIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGNsaWVudHMKLQkgIHdlIGNhbiBzZW5kIHRoZSBidWZmZXIgdG8gYWxsIHRoZSBjbGllbnRzIGluIG9uZSBnby4KLQotMjAxNC0wNi0yNCAwMToxNToyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBtdWx0aXVkcHNpbms6IGtlZXAgY2xpZW50IGxpc3QgY29uc2lzdGVudCBkdXJpbmcgcmVtb3ZhbHMKLQkgIFdlIHVubG9jayBhbmQgcmUtbG9jayB0aGUgY2xpZW50IGxvY2sgd2hpbGUgZW1pdHRpbmcgdGhlCi0JICByZW1vdmVkIHNpZ25hbCwgd2hpY2ggY2F1c2VzIGluY29uc2lzdGVuY2llcyBpbiB0aGUgY2xpZW50Ci0JICBsaXN0IHZzLiB0aGUgY2xpZW50IGNvdW50cy4gSW5zdGVhZCwgcmVtb3ZlIHRoZSBjbGllbnQgZnJvbQotCSAgdGhlIGxpc3QgYWxyZWFkeSBiZWZvcmUgZW1pdHRpbmcgdGhlIHNpZ25hbCBhbmQgcHV0IGl0IGludG8KLQkgIGEgdGVtcG9yYXJ5IGxpc3Qgb2YgY2xpZW50cyB0byBiZSByZW1vdmVkLiBUaGF0IHdheSB0aGluZ3MKLQkgIGxvb2sgY29uc2lzdGVudCB0byB0aGUgc3RyZWFtaW5nIHRocmVhZCwgYnV0IHNpZ25hbCBjYWxsYmFja3MKLQkgIGNhbiBzdGlsbCBkbyB0aGluZ3MgbGlrZSBnZXQgc3RhdHMgZnJvbSByZW1vdmVkIGNsaWVudHMuCi0KLTIwMTQtMDYtMjQgMDA6NTY6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IGZpeCBjbGllbnQgY291bnQgYWZ0ZXIgcmVtb3ZhbAotCi0yMDE0LTA2LTIzIDE4OjQzOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBrZWVwIGNsaWVudCBsaXN0IHNvcnRlZCBieSBzb2NrZXQgZmFtaWx5Ci0JICBXZSBtYWtlIHVzZSBvZiBpbiB0aGUgc2VuZF9idWZmZXJzKCkgZnVuY3Rpb24gaWYgd2UKLQkgIG5lZWQgdG8gdXNlIGRpZmZlcmVudCBzb2NrZXRzIHRvIHNlbmQgdG8gSVB2NCBhbmQKLQkgIElQdjYgZGVzdGluYXRpb25zLgotCi0yMDE0LTA2LTIwIDExOjM2OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIG11bHRpdWRwc2luazogYWRkIHNlbmRtbXNnLXJlYWR5IHJlbmRlcl9saXN0IGZ1bmN0aW9uIHByb3RvdHlwZQotCSAgQWRkIHByb3RvdHlwZSBmb3IgYSByZW5kZXJfbGlzdCgpIGZ1bmN0aW9uIHRoYXQgY2FuIHVzZSBhCi0JICBzZW5kbW1zZy1zdHlsZSBnX3NvY2tldF9zZW5kX21lc3NhZ2VzKCkgZnVuY3Rpb24gb25jZSBpdCBsYW5kcwotCSAgaW4gR0xpYi4gV2UgY2FuIHVzZSB0aGlzIGluZnJhc3RydWN0dXJlIHRvIHNlbmQgbXVsdGlwbGUgYnVmZmVycwotCSAgbWFkZSB1cCBieSBtdWx0aXBsZSBtZW1vcmllcyB0byBtdWx0aXBsZSBjbGllbnRzIGluIG9uZSBnbywgd2hpY2gKLQkgIGRyYXN0aWNhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBzeXNjYWxscyBtYWRlIHdoZW4gc2VuZGluZwotCSAgaGlnaC1iaXRyYXRlIHZpZGVvIHN0cmVhbXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyMTUyCi0KLTIwMTQtMDYtMTkgMTk6MTY6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSAgbXVsdGl1ZHBzaW5rOiBtYWtlIHVkcCBjbGllbnQgc3RydWN0dXJlIHJlZmNvdW50ZWQKLQkgIFVzZSB0aGUgcmVmY291bnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBrZWVwIHRyYWNrCi0JICBvZiB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZSBjbGllbnRzIGluIGEgc2VwYXJhdGUKLQkgIHZhcmlhYmxlLiBUaGlzIHdpbGwgYmUgdXNlZnVsIGxhdGVyLCBhbmQgbWVhbnMgd2UKLQkgIGRvbid0IGhhdmUgdG8gaG9sZCB0aGUgT0JKRUNUX0xPQ0sgYWxsIHRoZSB0aW1lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjg2NgotCi0yMDE0LTA2LTE5IDE4OjMxOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIG11bHRpdWRwc2luazoga2VlcCBjb3VudCBvZiBudW1iZXIgb2YgdW5pcXVlIGFuZCBub24tdW5pcXVlIElQdjQgYW5kIElQdjYgY2xpZW50cwotCSAgVGhpcyB3aWxsIGNvbWUgaW4gaGFuZHkgbGF0ZXIuCi0KLTIwMTQtMTItMTYgMTU6MDA6MjIgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBEaXNhYmxlIGNyZWF0ZV9idWYgd2l0aCBsaWJ2NGwyCi0JICBMaWJ2NGwyIGRvZXMgbm90IHdvcmsgd2l0aCBDUkVBVEVfQlVGUy4gSW5zdGVhZCBvZiBmYWlsaW5nIG9uIHJhbmRvbQotCSAgZXJyb3IgY2F1c2VkIGJ5IGxpYnY0bDIsIGRpc2FibGUgQ1JFQVRFX0JVRlMgd2hlbiBhbiBlbXVsYXRlZCBmb3JtYXQgaXMKLQkgIGRldGVjdGVkLgotCi0yMDE0LTEyLTA5IDE3OjM5OjEyIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IEFkZCBwcm90ZWN0aW9uIGFnYWluc3QgYnJva2VuIGxpYnY0bDIKLQkgIEl0IGxvb2tzIGxpa2UgbGlidjRsMiBzdXBwb3J0IGZvciBDUkVBVEVfQlVGIGlzIGluY29tcGxldGUuIFRoYXQKLQkgIGNvbWJpbmUgd2l0aCBleGlzdGluZyBidWdzIG1heSBsZWFkIHRvIGNyYXNoIGluIEdTdHJlYW1lci4gVGhlc2UKLQkgIGNoZWNrIHdpbGwgbWFrZSBpdCByb2J1c3QgYnk6Ci0JICAtIENoZWNraW5nIGNyZWF0ZSBidWYgaW5kZXggaXNuJ3QgYW4gYWxyZWFkeSBpbiB1c2VkIGluZGV4Ci0JICAtIENoZWNraW5nIHRoYXQgdGhlIGluZGV4IG91dCBvZiBRVUVSWUJVRiBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQKLQkgIGluZGV4Ci0KLTIwMTQtMTItMTYgMTY6Mzc6MjQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IEFkZCBzb21ldGhpbmcgdG8gdGhlIGRlYnVnIGxvZ3MgaWYgYW4gUlRYIEFVWCBlbGVtZW50IGNhbid0IGJlIGFkZGVkCi0JICAuLi4gYmVjYXVzZSB0aGUgYXBwbGljYXRpb24gYWxyZWFkeSBoYXMgYSBzaWduYWwgaGFuZGxlciBzZXQgdXAgaGVyZS4KLQotMjAxNC0xMS0yMSAxNDoxMzozNCArMTEwMCAgTWF0dGhldyBXYXRlcnMgPG1hdHRoZXdAY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhZGQgcmV0cmFuc21pc3Npb24gc3VwcG9ydCBhY2NvcmRpbmcgdG8gUkZDNDU4OAotCSAgQmFzZWQgb24gdGhlIGNsaWVudC1ydHBhdXggZXhhbXBsZQotCi0yMDE0LTEyLTE2IDEzOjI1OjAxICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBjbGVhciByZWN0YW5nbGUgc3RydWN0dXJlcyBiZWZvcmUgdXNlCi0KLTIwMTQtMTItMDkgMTU6MDk6NTYgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogQWx3YXlzIHNldCBmb3JtYXQKLQkgIFJpZ2h0IG5vdyB3ZSB0cnkgdG8gYmUgY2xldmVyIGJ5IGRldGVjdGluZyBpZiBkZXZpY2UgZm9ybWF0IGhhdmUKLQkgIGNoYW5nZWQgb3Igbm90LCBhbmQgc2tpcCBzZXR0aW5nIGZvcm1hdCBpbiB0aGlzIGNhc2UuIFRoaXMgaXMgdmFsaWQKLQkgIGJlaGF2aW91ciB3aXRoIFY0TDIsIGJ1dCBpdCdzIGFsc28gdmVyeSBlcnJvciBwcm9uZS4gVGhlIHJhdGlvbmFsCi0JICBmb3Igbm90IHNldHRpbmcgdGhlc2UgYWxsIHRoZSB0aW1lIGlzIGZvciBzcGVlZCwgdGhvdWdoIEkgY2FuJ3QKLQkgIG1lYXN1cmUgYW55IG5vdGljZWFibGUgZ2FpbiBvbiBhbnkgSFcgSSBvd24uIEFsc28sIHVudGlsIHJlY2VudGx5LAotCSAgd2Ugd2hlcmUgZG9pbmcgZ2V0L3NldCBvbiB0aGUgZm9ybWF0IGZvciBlYWNoIGZvcm1hdCB3ZSB3aGVyZQotCSAgcHJvYmluZywgbWFraW5nIGl0IG5lYXIgdG8gaW1wb3NzaWJsZSB0aGF0IHRoZSBmb3JtYXQgd291bGQgbWF0Y2guCi0JICBUaGlzIGFsc28gZml4ZXMgYnVnIHdoZXJlIHdlIHdoZXJlIHNraXBwaW5nIGZyYW1lLXJhdGUgc2V0dGluZyBpZgotCSAgZm9ybWF0IGRpZG4ndCBjaGFuZ2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNjM2Ci0KLTIwMTQtMTItMTUgMTg6MzA6MDEgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgIHZpZGVvY3JvcDogUmVtb3ZlIHRvZG8gYWJvdXQgY2FwcyBmaWx0ZXIKLQkgIFRoZSBmaWx0ZXIgaXMgYWxyZWFkeSBpbnRlcmVjdGVkLgotCi0yMDE0LTEyLTE1IDE4OjE5OjA1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5oOgotCSAgdmlkZW9jcm9wOiBNYWtlIHN1cmUgbmV3IGNyb3AgaXMgYXBwbGllZAotCSAgU2luY2UgImJhc2V0cmFuc2Zvcm06IEZpeCBjYXBzIGVxdWFsaXR5IGNoZWNrIiBjb21taXQgYTdmMzU3LAotCSAgc2V0X2luZm8oKSB3aWxsIG5vdCBiZSBjYWxsZWQgYW55bW9yZSBpZiBjcm9wIGRpZG4ndCBjaGFuZ2UKLQkgIHRoZSBjYXBzLiBUaGlzIGlzIGZpeGVkIGJ5IHNldHRpbmcgIm5lZWRfdXBkYXRlIiBib29sZWFuIHdoZW4KLQkgIGNyb3BwaW5nIHByb3BlcnRpZXMgaGFzIGJlZW4gY2hhbmdlZCwgYW5kIHRoZW4gYXBwbHlpbmcgdGhlc2UKLQkgIGlmIHRoZXkgd2hlcmUgbm90IGFwcGxpZWQgYmVmb3JlIHJlbmRlcmluZyB0aGUgbmV4dCBmcmFtZS4gVGhpcwotCSAgcGF0Y2ggYWxzbyBmaXhlZCB0aGUgbG9ja2luZywgZHJvcHBpbmcgdW4tbmVlZGVkIGN1c3RvbSBsb2NrLAotCSAgYW5kIG5vIGhvbGRpbmcgbmVlZGxlc3MgbG9jayB3aGlsZSBkb2luZyB0aGUgb3BlcmF0aW9uIGFzIHdlCi0JICBhbHJlYWR5IGhvbGQgdGhlIHN0cmVhbWluZyBsb2NrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDc4NwotCi0yMDE0LTEyLTEyIDE4OjEwOjM1ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgb3N4YXVkaW9zaW5rOiBQcmVmZXIgZmlsdGVyIGNhcHMgb3JkZXIgd2hpbGUgZ2V0dGluZyBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTg3Ci0KLTIwMTQtMTItMDkgMTM6Mzg6MjYgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICBvc3hhdWRpb3Npbms6IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nIGFyb3VuZCBjaGFubmVsIGxheW91dCBwYXJzaW5nCi0JICBGb3Igbm93IHdlIGp1c3Qgc3BpdCBhIHdhcm5pbmcgYW5kIGlnbm9yZSB0aGUgY2hhbm5lbCBsYXlvdXQgaWYgd2UgY2FuJ3QKLQkgIHN1cHBvcnQgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTg3Ci0KLTIwMTQtMTItMDggMjI6Mzg6MjIgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgIG9zeGF1ZGlvOiBUYWtlIGxvY2sgYXJvdW5kIHNpbmsvc291cmNlIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHJpbmdidWZmZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA5ODcKLQotMjAxNC0xMi0wMSAyMTowNjoyNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmM6Ci0JICBvc3hhdWRpb3NyYzogUHJvYmUgY2hhbm5lbCBsYXlvdXQgdG9vCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTg3Ci0KLTIwMTQtMTItMDEgMjA6MzI6MDQgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICBvc3hhdWRpb3Npbms6IE9ubHkgZml4IHVwIGNoYW5uZWxzL2xheW91dCBmb3IgUENNIGNhcHMgd2hpbGUgcHJvYmluZwotCSAgSXQncyB1bmxpa2VseSB0aGF0IHNldHRpbmcgYSBjaGFubmVsIGxheW91dCB3aWxsIGRvIG11Y2ggZm9yIEFDMy9EVFMKLQkgIHN0cmVhbXMuIElmIHdlIGZpbmQgYXQgc29tZSBwb2ludCB0aGF0IGl0IGRvZXMgbWFrZSBzZW5zZSwgd2UgY2FuCi0JICBwZXJmb3JtIHRoZSBzdHJ1Y3R1cmUgY29weWluZyB1bmNvbmRpdGlvbmFsbHkgKGkuZS4sIHRoZSBjdXJyZW50IGNvZGUgaXMKLQkgIHdyb25nLCBzaW5jZSBBQzMvRFRTIHdpbGwgZ2V0IHR3byBzdHJ1Y3R1cmVzIG5vdyAtIG9uZSB3aXRoIHRoZSBjaGFubmVsCi0JICBsYXlvdXQsIG9uZSB3aXRob3V0KS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA5ODcKLQotMjAxNC0xMi0wMSAxOTo0MTozNSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JICBvc3hhdWRpb3NyYzogSW1wbGVtZW50IGNhcHMgcHJvYmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk4NwotCi0yMDE0LTEyLTAxIDE5OjI5OjU3ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSAgb3N4YXVkaW86IEJpbmQgYXVkaW8gZGV2aWNlIHRvIGF1ZGlvIHVuaXQgZWFybHkKLQkgIFdlIHdhbnQgdG8gYmluZCB0aGUgZGV2aWNlIGR1cmluZyBvcGVuIHNvIHRoYXQgc3Vic2VxdWVudCBmb3JtYXQgcXVlcmllcwotCSAgb24gdGhlIGF1ZGlvIHVuaXQgYXJlIGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlIGZyb20gdGhhdCBwb2ludCBvbndhcmRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk4NwotCi0yMDE0LTExLTI5IDIzOjE2OjMwICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgb3N4YXVkaW9zaW5rOiBGaXggdXAgY2FwcyBxdWVyeWluZyBhIGJpdAotCSAgVGhpcyBzaG91bGQgbWFrZSBjYXBzIHF1ZXJpZXMgY29ycmVjdCBpbiBQQVVTRUQgYW5kIGhpZ2hlciBhcyB3ZWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk4NwotCi0yMDE0LTExLTI4IDIyOjMyOjM2ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JICBvc3hhdWRpbzogTW92ZSBvc3hhdWRpb3NyYy1zcGVjaWZpYyBjb2RlIG91dCBvZiB0aGUgZ2VuZXJpYyBwYXRoCi0JICBBdm9pZHMgb25lIGxheWVyaW5nIHZpb2xhdGlvbiAoR3N0Q29yZUF1ZGlvIHJlZmVycmluZyB0bwotCSAgR3N0T3N4QXVkaW9TcmMpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk4NwotCi0yMDE0LTExLTI4IDIyOjIzOjE3ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvcmVtb3RlaW8uYzoKLQkgIG9zeGF1ZGlvOiBDbGVhbiB1cCBhIEdzdENvcmVBdWRpbyAtPiBHc3RPc3hBdWRpb1NyYy9TaW5rIHJlZmVyZW5jZQotCSAgTm93IHRoYXQgZGV2aWNlIHNlbGVjdGlvbiBoYXMgbm8gc2luay9zb3VyY2Utc3BlY2lmaWMgYml0cywgd2UgY2FuIGhhdmUKLQkgIGdlbmVyaWMgZGV2aWNlIHNlbGVjdGlvbiBmb3IgdGhpcyBwYXRoLiBXZSBkbyBuZWVkIHRvIG5vdyB0cmFjayBzdGF0ZQotCSAgY2hhbmdlcyBzbyB3ZSBjYW4gbG9vayB1cCB0aGUgZmluYWwgZGV2aWNlX2lkIG9uY2UgdGhlIGRldmljZSBpcyBvcGVuLAotCSAgdGhvdWdoLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDk4NwotCi0yMDE0LTExLTI4IDE5OjQwOjUyICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgb3N4YXVkaW9zaW5rOiBNb3ZlIGRldmljZSBjYXBzIHByb2JpbmcgdG8gZ2V0X2NhcHMoKQotCSAgVGhpcyBzaG91bGQgYmUgcHJlZmVycmVkIHRvIHJ1bm5pbmcgdGhlIHByb2JlIGF0IGRldmljZSBvcGVuIHRpbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTg3Ci0KLTIwMTQtMTEtMjggMTg6Mzc6MDIgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmM6Ci0JICBvc3hhdWRpbzogTWFrZSBzb21lIGRlYnVnIGNvZGUgY29tcGlsZSBjb25kaXRpb25hbGx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTg3Ci0KLTIwMTQtMTEtMjggMTU6MDY6MzUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgIG9zeGF1ZGlvOiBNb3ZlIGRldmljZSBzZWxlY3Rpb24gdG8gcmluZ2J1ZmZlci0+b3Blbl9kZXZpY2UoKQotCSAgVGhpcyBpcyBjb25jZXB0dWFsbHkgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBhbmQgYWxsb3dzIHVzIHRvIGNvcnJlY3RseQotCSAgY2F0Y2ggZXJyb3JzIGluIGRldmljZSBzZWxlY3Rpb24gYXMgd2VsbCwgd2hpY2ggd2UgY291bGQgbm90IGRvIHdoaWxlCi0JICBjcmVhdGluZyB0aGUgcmluZ2J1ZmZlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA5ODcKLQotMjAxNC0xMS0yOCAxNDozNDozNCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmM6Ci0JICBvc3hhdWRpbzogQ29uc29saWRhdGUgaW5wdXQgYW5kIG91dHB1dCBjb2RlIHBhdGhzIGEgYml0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTg3Ci0KLTIwMTQtMTEtMjEgMTE6NTQ6MTggKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBEZWludGVybGFjZTogaW4gcXVlcnlfY2FwcyByZXR1cm4gb25seSBzdXBwb3J0ZWQgZm9ybWF0cyBpZiBmaWx0ZXIgaXMgaW50ZXJsYWNlZAotCSAgSW4gc29tZSBjYXNlcyB0aGUgY3VycmVudGx5IHNldCBHc3RWaWRlb0luZm8gaXMgbm90IGludGVybGFjZWQsIGJ1dAotCSAgdXBzdHJlYW0gY2FwcyBhcmUgaW50ZXJsYWNlZCBhbmQgdGhlIGluZm8gaXMgcGFzc2VkIGluIHRoZSBmaWx0ZXIsCi0JICB3ZSBzaG91bGQgdGFrZSB0aGF0IGluZm8gaW50byBhY2NvdW50IGFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QKLQkgIGNvbnNpZGVyIHRoYXQgY2FzZSBhcyBhICJwYXNzIHRocm91Z2giIGNhc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNDA3Ci0KLTIwMTQtMTItMTIgMTE6MDY6MTcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IGRlYnVnIHN0YXRlbWVudAotCSAgSXQgd2FzIHVzaW5nIHRoZSBub24taW5jcmVhc2luZyBvZmZzZXQgdmFyaWFibGUsIHdoaWNoIG1hZGUgdGhhdCBzdGF0ZW1lbnQKLQkgIG5vdCBzbyB1c2VmdWwgOikKLQotMjAxNC0xMi0xMiAxMTowMzoxNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgbWFjcm9zIGZvciB0aGUgdmFyaW91cyB0aW1lc2NhbGUgY29udmVyc2lvbnMKLQkgIFRoaXMgaGVscHMgbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBhdm9pZCBmdXR1cmUgYmFkIHVzYWdlIG9mCi0JICBzY2FsaW5nIGZ1bmN0aW9uIGFyZ3VtZW50IG9yZGVyLgotCi0yMDE0LTEyLTExIDEwOjE2OjA2ICswMTAwICBQYXRyaWNrIFJhZGl6aSA8cGF0cmlja3JAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogZml4IHBvdGVudGlhbCBjcmFzaCB3aGVuIHNodXR0aW5nIGRvd24KLQkgIEEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBtYXkgY2F1c2UgYnVmZmVycwotCSAgdG8gYmUgdW5yZWZmZWQgd2hpbGUgdGhleSBhcmUgc3RpbGwgdXNlZCBieSB0aGUgc3RyZWFtaW5nIHRocmVhZAotCSAgaW4gZ3N0X3J0cF9oMjY0X3BheV9zZW5kX3Nwc19wcHMoKSByZXN1bHRpbmcgaW4gYSBjcmFzaC4gQ2hhaW4KLQkgIHVwIHRvIHRoZSBwYXJlbnQgY2xhc3MgZmlyc3QgaW4gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiB0bwotCSAgbWFrZSBzdXJlIHN0cmVhbWluZyBoYXMgc3RvcHBlZCBhbmQgb25seSB0aGVuIGZyZWUgdGhvc2UgYnVmZmVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDEzODEKLQotMjAxNC0xMi0xMiAwMDo0MjowNiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQ29weSBmbGFncyBvZiB0aGUgb3ZlcmFsbCBzZWdtZW50IHRvIG91dHB1dCBzZWdtZW50cwotCSAgUHJlc2VydmUgdGhlIHNlZ21lbnQgZmxhZ3Mgb2YgdGhlIG92ZXJhbGwgZGVtdXggc2VnbWVudCBvbiB0aGUgb3V0cHV0Ci0JICBzZWdtZW50cyBmb3IgZWFjaCBwYWQuCi0KLTIwMTQtMTItMDkgMDI6NDM6MDAgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiB1c2UgNjRiaXQgY2h1bmtfb2Zmc2V0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMjc5Ci0KLTIwMTQtMTItMTAgMTc6Mzk6MTcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHJvdW5kaW5nIGVycm9ycyBpbiBkdXJhdGlvbiB1cGRhdGUKLQkgIE1ha2Ugc3VyZSB3ZSBzdG9yZSB1cGRhdGVkIHNlZ21lbnQgc3RvcC9kdXJhdGlvbiB3aXRoIHRoZSBzYW1lCi0JICBncmFudWxhcml0eSBhcyB0aGUgZHVyYXRpb24gdGltZXNjYWxlLgotCSAgQW5kIGFkZCBtb3JlIGRlYnVnCi0KLTIwMTQtMTItMTAgMTY6NTU6NDQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogVXBkYXRlIGR1cmF0aW9uIHdoZW4gd2UgZ2V0IG1vcmUgaW5mb3JtYXRpb24KLQkgIFdoZW4gZGVhbGluZyB3aXRoIGZyYWdtZW50ZWQgZmlsZXMsIHdlIHdpbGwgZ2V0IG1vcmUgYWNjdXJhdGUgZHVyYXRpb24KLQkgIGluZm9ybWF0aW9uIHZpYSB0aGUgbWZyYSBhbmQgbW9vZiBhdG9tcy4KLQkgIEluIG9yZGVyIGZvciBwbGF5YmFjayB0byBub3Qgc3RvcCBhdCB0aGUgaW5pdGlhbCBkdXJhdGlvbiAoZnJvbSB0aGUKLQkgIG1vb3YgYXRvbSksIHdlIG5lZWQgdG8gY2hlY2sgYW5kIHVwZGF0ZSB0aGUgdmFyaW91cyBkdXJhdGlvbiB2YXJpYWJsZXMKLQkgIHdoZW4gd2UgZmluZCBtb3JlIGluZm9ybWF0aW9uLgotCSAgRml4ZXMgcGxheWJhY2sgb2YgZnJhZ21lbnRlZCBmaWxlcyBpbiBwdWxsIG1vZGUKLQotMjAxNC0xMi0xMCAxNTowODo0MCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBSZW1vdmUgdmFyaWFibGUgYXNzaWdubWVudHMgbmV2ZXIgcmVhZAotCSAgQXMgZGV0ZWN0ZWQgYnkgY2xhbmcvc2Nhbi1idWlsZAotCi0yMDE0LTEyLTEwIDE0OjU2OjA2ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogVXNlIEdzdENsb2NrVGltZSBmb3IgbmFub3NlY29uZC1iYXNlZCB0aW1lIHZhcmlhYmxlcy9maWVsZHMKLQkgIEF2b2lkcyBjb25mdXNpb24gd2l0aCB0aW1lc2NhbGVkLWJhc2VkIHZhcmlhYmxlcyBhbmQgYnl0ZXMgKG9mZnNldCkKLQkgIHZhcmlhYmxlcy4KLQkgIEFuZCB1c2UgR1NUX0NMT0NLX1RJTUVfTk9ORSB3aGVyZSBhcHBsaWNhYmxlCi0KLTIwMTQtMTItMDMgMTQ6NDc6MDUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5oOgotCSAgcHVzaGZpbGVzcmM6IEFkZCBUSU1FIFNFR01FTlQgY2FwYWJpbGl0eQotCSAgQWRkcyBhIG5ldyBzZXQgb2YgcHJvcGVydGllcyB0byBtYWtlIHB1c2hmaWxlc3JjIG91dHB1dCBhIFRJTUUgU0VHTUVOVAotCSAgKGluc3RlYWQgb2YgdGhlIGZpbGVzcmMgQllURSBTRUdNRU5UKS4KLQkgIFdoZW4gdGltZS1zZWdtZW50IGlzIHNldCB0byBUcnVlIHRoZSBmb2xsb3dpbmcgd2lsbCBoYXBwZW46Ci0JICAqIFNlZWtzIGFyZSByZWZ1c2VkIChkYXRhIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUpCi0JICAqIFRoZSBCWVRFIHNlZ21lbnQgd2lsbCBiZSByZXBsYWNlZCBieSBhIFRJTUUgc2VnbWVudCB3aXRoIHRoZSB2YWx1ZXMKLQkgIHNwZWNpZmllZCBpbiB0aGUgdmFyaW91cyBwcm9wZXJ0aWVzCi0JICAqIFRoZSBmaXJzdCBvdXRnb2luZyBidWZmZXIgd2lsbCBoYXZlIGEgdGltZXN0YW1wIHNldCBvbiBpdCAoYnkgZGVmYXVsdAotCSAgaXQgaGFzIGEgdmFsdWUgb2YgR1NUX0NMT0NLX1RJTUVfTk9ORSkKLQotMjAxNC0xMi0xMCAxMTozNToyOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IEFsc28gb25seSB1bnJlZiBjYXBzIGlmIHRoZXkncmUgbm90IE5VTEwKLQotMjAxNC0xMi0xMCAxMTozNDo0MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcygpIHdpbGwgcmV0dXJuIE5VTEwgaWYgdGhlcmUgaXMgbm8gcGVlcgotCi0yMDE0LTEyLTA5IDE2OjM4OjM4ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnBYZW5jOiBDTE9DS19USU1FX05PTkUgaXMgbm90IGEgdmFsaWQgbWluX2xhdGVuY3kgdmFsdWUKLQkgIFdlIHNob3VsZCBqdXN0IHVzZSAwIGlmIHdlIGRvIG5vdCBoYXZlIHRoZSBpbmZvcm1hdGlvbgotCi0yMDE0LTEyLTAzIDE3OjI2OjU2ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IFVzZSBhbiBlbXB0eSBpdGVyYXRvciBpbiBpdGVyYXRlX2ludGVybmFsX2xpbmsgd2hlbiBubyBsaW5rcwotCSAgQW5kIG5vdCBhIE5VTEwgSXRlcmF0b3IsIHNvIGl0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IGl0IHVzdWFsbHkKLQkgIHdvcmtzIGFuZCBhdm9pZCB1c2VyIHRvIG5lZWQgYSBkaWZmZXJlbnQgY29kZSBwYXRocyB0byBoYW5kbGUgdGhhdC4KLQotMjAxNC0xMi0wOSAxNDowMTo1MCArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBzZXQgYnVmZmVyIGludGVybGFjZSBmbGFncyB3aGVuIGZpZWxkIGlzIFY0TDJfRklFTERfSU5URVJMQUNFRAotCSAgSWYgdjRsMl9idWZmZXIuZmllbGQgaXMgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELCB3ZSBzZXQgY29ycmVzcG9uZGluZwotCSAgR3N0VmlkZW9CdWZmZXIgZmxhZ3MgZGVwZW5kaW5nIG9uIHRoZSB2aWRlbyBzdGFuZGFyZC4KLQkgIEFjY29yZGluZyB0byBWNEwyIHNwZWNpZmljYXRpb24sIE0vTlRTQyB0cmFuc21pdHMgdGhlIGJvdHRvbSBmaWVsZAotCSAgZmlyc3QsIGFsbCBvdGhlciBzdGFuZGFyZHMgdGhlIHRvcCBmaWVsZCBmaXJzdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc2MDMKLQotMjAxNC0xMi0wOCAyMToyNjoxOCArMDEwMCAgUGF0cmljayBSYWRpemkgPHBhdHJpY2tyQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IEZpeGVzIGJ1ZmZlciBsZWFrIHdoZW4gdXNpbmcgU1BTL1BQUwotCSAgRml4ZXMgYSBidWZmZXIgbGVhayB0aGF0IHdvdWxkIG9jY3VyciBpZiB0aGUgcGlwZWxpbmUgd2FzIHNodXRkb3duCi0JICB3aGlsZSBhIFNQUy9QUFMgaGVhZGVyIHdhcyBiZWluZyBjcmVhdGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTI3MQotCi0yMDE0LTEyLTA5IDA0OjQzOjI5ICswMTAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQG9wZW5jcmVlZC5jb20+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JICBhZ2luZ3R2OiBmaXggbWVtY3B5IHdoZW4gbm8gY29sb3IgYWdpbmcgcmVxdWVzdGVkLgotCSAgdmlkZW9fc2l6ZSBpcyB0aGUgc2l6ZSBpbiBwaXhlbHMsIGFjdHVhbCBzaXplIG9mIHRoZSBtZW1jcHkKLQkgIGhhcyB0byBiZSBzdHJpZGUgKiBoZWlnaHQuCi0KLTIwMTQtMTItMDcgMTc6MzM6NTEgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogV29ya2Fyb3VuZCBsaWJ2NGwyIFJXIGVtdWxhdGlvbiBidWcKLQkgIFdoZW4gbGlidjRsMiBlbXVsYXRlcyBSVyBtb2RlIG9uIHRvcCBvZiBNTUFQIGRldmljZXMsIHRoZSBxdWV1ZXMgYXJlCi0JICBvbmx5IGluaXRpYWxpemVkIG9uIGZpcnN0IHJlYWQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgcG9sbCgpIHdpbGwgZmFpbAotCSAgaWYgY2FsbGVkIGJlZm9yZSB0aGUgcXVldWVzIGFyZSBpbml0aWFsaXplZCBhbmQgc3RyZWFtaW5nLiBXb3JrYXJvdW5kCi0JICB0aGlzIGJ5IGRvaW5nIGEgemVybyBzaXplIHJlYWQgd2hlbiBwb29sIGlzIHN0YXJ0ZWQgaW4gdGhhdCBJTyBtb2RlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDYzMwotCi0yMDE0LTEyLTA3IDE3OjI3OjM3IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IEZpeCBSVyBpbyBtb2RlCi0JICBJbiBSVywgYWxsb2NhdG9yIGNhbiBiZSBudWxsLCBtYXhfYnVmZmVycyBjYW4gYmUgemVybywgYW5kIHdlIG5lZWQgbm90Ci0JICB0byB3YWl0IHdoaWxlIHRoZSBxdWV1ZSBpcyBlbXB0eSBzaW5jZSB0aGVyZSBpcyBubyBxdWV1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA2MzMKLQotMjAxNC0xMi0wMyAxNjo0MDo0OSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IENsZWFudXAgdW5lZWRlZCBjaGVjayBhbmQgY2FzZXMKLQkgIFRoZXJlIGlzIG5vdGhpbmcgaW4gYmV0d2VlbiB0aGUgYnJlYWsgYW5kIHRoZSAiZG9uZToiIGFueW1vcmUsIHBsdXMKLQkgIFVTRVJQVFIgYW5kIERNQUJVRl9JTVBPUlQgY2FzZSBpcyBleGFjdGx5IHRoZSBzYW1lLgotCi0yMDE0LTEyLTAzIDE3OjA3OjQ5IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwycG9vbDogRml4IENSRUFURV9CVUZTIHN1cHBvcnQgZm9yIGNhcHR1cmUKLQkgIFRoaXMgcGF0Y2ggZml4ZXMgQ1JFQVRFX0JVRlMgc3VwcG9ydCBmb3IgY2FwdHVyZSBkZXZpY2VzLiBJbml0aWFsbHkgd2UKLQkgIHdvdWxkIG9ubHkgdHJ5IGFuZCBhbGxvY2F0ZSBtb3JlIGJ1ZmZlcnMgd2hlbiB0aGUgY29weSB0aHJlc2hvbGQKLQkgIGlzIHJlYWNoZWQuIFdoZW4gdGhlIHRocmVzaG9sZCB3YXMgbm90IHNldCAobmVlZGVkKSBpdCB3b3VsZCBuZXZlcgotCSAgaGFwcGVuLiBBbm90aGVyIHByb2JsZW0gaXMgdGhhdCBvbiBjYXB0dXJlIHNpZGUsIGFjcXVpcmUgcmV0dXJucwotCSAgZmlsbGVkIGJ1ZmZlciwgaGVuY2UgbmVlZCB0byBwb29sLiBXZSBuZWVkIHRvIHNldCBhIHNwZWNpYWwgZmxhZyB0bwotCSAgZm9yY2UgYWxsb2NhdGlvbiB0byBoYXBwZW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMTM0Ci0KLTIwMTQtMTItMDMgMTY6Mjc6NTkgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSAgdjRsMmFsbG9jYXRvcjogRml4IENSRUFURV9CVUYgcHJvYmluZwotCSAgQ3VycmVudCBmb3IgZXZlcnkgbWVtb3J5IHR5cGUgd2Ugd2hlcmUgcHJvYmluZyBNTUFQIENSRUFURV9CVUZTIGlvY3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMTM0Ci0KLTIwMTQtMTEtMTggMTY6NTI6NDAgKzAxMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHNldCBmcmFtZXJhdGUgMC8xIHdoZW4gZHVyYXRpb24gaXMgbm90IGtub3duCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwMTMwCi0KLTIwMTQtMTItMDQgMTc6MjU6NTUgKzExMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IE1vcmUgZml4ZXMgZm9yIHJldmVyc2UgcGxheWJhY2sKLQkgIFdoZW4gc2Vla2luZyBvciBmaW5kaW5nIHRoZSBwcmV2aW91cyBrZXlmcmFtZSwgZG8KLQkgIGNvbXBhcmlzb25zIGFnYWluc3QgdGFyZ2V0cyBhbmQgc2VnbWVudHMgdXNpbmcgY29tcG9zaXRpb24gdGltZQotCSAgdG8gY29ycmVjdGx5IGRlY2lkZSB3aGljaCBzYW1wbGUgdGltZXMgbWF0Y2guCi0KLTIwMTQtMTItMDMgMTE6MTI6NTUgKzAxMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IFVzZSBhbiBlbXB0eSBpdGVyYXRvciBpbiBpdGVyYXRlX2ludGVybmFsX2xpbmsgd2hlbiBubyBsaW5rcwotCSAgV2UgdXNlZCB0byBzZXR1cCBhbiBpdGVyYXRvciB3aXRoIDEgR1ZhbHVlIHNldCB3aXRoIGEgTlVMTCBvYmplY3QKLQkgIHBvaW50ZXIgd2hpY2ggaXMgbm90IHRoZSBub3JtYWwgd2F5IHRvIGRvIHRoYXQuIEluc3RlYWQgd2Ugc2hvdWxkIG1ha2UKLQkgIHN1cmUgdGhhdCB0aGUgZmlyc3QgY2FsbCB0byBnc3RfaXRlcmF0b3JfbmV4dCByZXR1cm5zIEdTVF9JVEVSQVRPUl9ET05FLgotCi0yMDE0LTEyLTAzIDEzOjIwOjU3ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBIYW5kbGUgc2Vla3MgcGFzdCBFT1MgYXMgYSBzZWVrIHRvIHRoZSBlbmQKLQkgIEZpeCByZXZlcnNlIHBsYXliYWNrIG9mIGV2ZXJ5IGZyYW1lIGJ5IG1ha2luZyBzZWVrcyBwYXN0L3RvIEVPUwotCSAgZmluZCB0aGUgbGFzdCBzZWdtZW50IGFuZCBzdGFydCB0aGVyZS4KLQotMjAxNC0xMi0wMiAxNTozMzoyNSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSAgcnRwbXBhZGVwYXk6IFJlbGF4IGNhcHMgdG8gYWxsb3cgYW55IGNsb2NrLXJhdGUKLQkgIFNvbWUgV293emEgc2V0dXBzIHNlZW0gdG8gc2VuZCBhbiBpbnZhbGlkIG5vbi05MDAwMCBjbG9jay1yYXRlLgotCi0yMDE0LTEyLTAxIDIxOjA0OjAyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG9uJ3QgdXNlIEdTVF9DTE9DS19USU1FX05PTkUgaW4gbm9uIEdzdENsb2NrVGltZSB2YXJpYWJsZXMKLQkgIFVzZSAtMSBpbnN0ZWFkIGFzIHRob3NlIGFyZSBnaW50NjQvZ3VpbnQ2NCB2YXJpYWJsZXMgYW5kIG5vdCBHc3RDbG9ja1RpbWUKLQotMjAxNC0xMS0wNyAxNzowNjo0OSArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5oOgotCSAgdjRsMmFsbG9jYXRvcjogZml4IGdzdF92NGwyX2FsbG9jYXRvcl9zdG9wIHByb3RvdHlwZQotCSAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3N0b3AgcmV0dXJucyBhIEdzdFY0bDJSZXR1cm4sIG5vdCBhIGdib29sZWFuLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTc5MgotCi0yMDE0LTExLTA3IDE2OjQxOjUyICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IHVucmVmIHBvb2wgd2hlbiB2NGwyX2FsbG9jYXRvcl9uZXcoKSBmYWlscwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTc5MQotCi0yMDE0LTExLTMwIDE3OjUyOjQ3IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSAgdjRsMjogUmVtb3ZlIGxhc3QgaW5jbHVkZSB0byBsaW51eC92aWRlb2RldjIuaAotCSAgV2Ugbm93IHVzZSBhbmQgdXBkYXRlIG91ciBpbnRlcm5hbCBjb3B5IHNvIHdlIG5vIGxvbmdlciBoYXZlIHRvIGlmZGVmCi0JICB0aGUgZW50aXJlIGNvZGUgZm9yIGZlYXR1cmVzIGFuZCBkZWZpbmVzIHRoYXQgd2hlcmUgYWRkZWQgb3ZlciB0aGUKLQkgIHllYXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDkwNQotCi0yMDE0LTA4LTI0IDEzOjM4OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogaW1wbGVtZW50IHNlZWtpbmcgaW4gZnJhZ21lbnRlZCBtcDQgZmlsZXMgaW4gcHVsbCBtb2RlIGJhc2VkIG9uIHRoZSBtZnJhIHRhYmxlCi0KLTIwMTQtMTEtMjkgMTU6MjU6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogdXNlIHRyYWNrIGZyYWdtZW50IGRlY29kaW5nIHRpbWUgKHRmZHQpIGluIHBhcnNlX3RydW4oKSBmb3IgaW50ZXJwb2xhdGlvbgotCSAgQXMgZmFsbGJhY2sgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgZXhpc3Rpbmcgc2FtcGxlcwotCSAgYXMgcmVmZXJlbmNlIHBvaW50IHlldC4KLQkgIEJhc2VkIG9uIHBhdGNoIGJ5IERhdmlkIENvcnZveXNpZXIgPGRhdmlkLmNvcnZveXNpZXJAb3JhbmdlLmNvbT4KLQotMjAxNC0xMS0yOSAxNDozNzoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IHBhcnNlIG1mcmEgcmFuZG9tIGFjY2VzcyBib3ggZm9yIGZyYWdtZW50ZWQgbXA0IGZpbGVzCi0JICBJZiBpdCdzIHByZXNlbnQsIGFuZCB3ZSBvcGVyYXRlIGluIHB1bGwgbW9kZS4KLQotMjAxNC0wOC0xNSAxNDo1ODoyNiArMDIwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzdG9wIHBhcnNpbmcgaGVhZGVycyBmb3IgZnJhZ21lbnRlZCBtcDRzIGF0IHRoZSBmaXJzdCBtb29mCi0JICBDdXJyZW50bHkgZHVyaW5nIGhlYWRlciBwYXJzaW5nLCB3ZSBzY2FuIHRocm91Z2ggdGhlIGVudGlyZSBmaWxlCi0JICBhbmQgc2tpcCBldmVyeSBtb29mK21kYXQgY2h1bmsgZm9yIGZyYWdtZW50ZWQgbXA0cywgd2hpY2ggbWFrZXMKLQkgIHN0YXJ0LXVwIGluY3JlZGlibHkgc2xvdy4gSW5zdGVhZCwganVzdCBzdG9wIGF0IHRoZSBmaXJzdCBtb29mCi0JICBjaHVuayB3aGVuIGhhdmUgYSBtb292LCBhbmQgc3RhcnQgZXhwb3NpbmcgdGhlIHN0cmVhbXMsIHNvIHdlCi0JICBjYW4gZ28gYW5kIHN0YXJ0IGhhbmRsaW5nIHRoZSBtb29mcyBmb3IgcmVhbC4KLQotMjAxNC0xMS0yOSAxMzo1OTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvaWNsZXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmM6Ci0JICB0ZXN0czogYWRkIGludGVyYWN0aXZlIGdka3BpeGJ1Zm92ZXJsYXkgdGVzdAotCSAgSnVzdCBuZWVkIHRvIGZpeCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gbm93IHNvCi0JICB0aGF0IG5lZ2F0aXZlIG9mZnNldHMgYXJlIGFjdHVhbGx5IG5lZ2F0aXZlCi0JICBhbmQgbm90IGZsaXBwZWQgdG8gcG9zaXRpb24gdGhpbmdzIGZyb20gdGhlCi0JICBvcHBvc2l0ZSBib3JkZXIuCi0KLTIwMTQtMTEtMjkgMTM6NTM6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuaDoKLQkgIGdka3BpeGJ1Zm92ZXJsYXk6IGFkZCAicGl4YnVmIiBwcm9wZXJ0eQotCSAgU28gd2UgY2FuIHNldCBhIEdka1BpeGJ1ZiBkaXJlY3RseSBpbnN0ZWFkIG9mCi0JICByZWFkaW5nIGl0IGZyb20gYW4gaW1hZ2UgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uCi0KLTIwMTQtMTEtMjkgMTM6MjM6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmg6Ci0JICBnZGtwaXhidWY6IHJlbW92ZSBwaXhidWZzY2FsZSBjb2RlIHRoYXQgd2FzIG5ldmVyIHBvcnRlZAotCSAgRG9uJ3QgdGhpbmsgd2UnbGwgbmVlZCB0aGlzIGFnYWluLgotCi0yMDE0LTExLTI5IDE4OjM1OjQyIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JICBydHBydHhyZWNlaXZlOiBVc2Ugb2Zmc2V0IHdoZW4gY29weWluZyBoZWFkZXIKLQkgIFRoZSBoZWFkZXIgaXMgbm90IGFsd2F5cyBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhY2tldCwgc28gd2UgbmVlZCB0byBjb21wdXRlCi0JICB0aGUgb2Zmc2V0IGZpcnN0LgotCi0yMDE0LTExLTI4IDEzOjEyOjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdGFnbGliL2dzdGFwZXYybXV4LmNjOgotCSAgYXBldjJtdXg6IHdyaXRlIEFQRSB0YWdzIGF0IGVuZCBmb3Igd2F2cGFjayBmaWxlcwotCSAgaHR0cDovL3d3dy53YXZwYWNrLmNvbS9maWxlX2Zvcm1hdC50eHQ6Ci0JICAiQm90aCB0aGUgQVBFdjIgdGFncyBhbmQvb3IgSUQzdjEgdGFncyBtdXN0IGNvbWUgYXQgdGhlIGVuZCBvZiB0aGUKLQkgIFdhdlBhY2sgZmlsZSwgd2l0aCB0aGUgSUQzdjEgY29taW5nIGxhc3QgaWYgYm90aCBhcmUgcHJlc2VudC4iCi0JICBXYXZQYWNrIGZpbGVzIHRoYXQgY29udGFpbiBBUEV2MiB0YWdzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVzCi0JICBhcmUgdW5wbGF5YWJsZSBvbiBwbGF5ZXJzIHRoYXQgdXNlIEZGbXBlZyAobGlrZSBWTEMpIGFuZCBtb3N0IG90aGVyCi0JICBzb2Z0d2FyZSAoZXhjZXB0IEJhbnNoZWUpLiBQbGF5ZXJzIHRoYXQgdXNlIGxpYndhdnBhY2sgZGlyZWN0bHkgY2FuCi0JICBwbGF5IHRoZSBmaWxlcyBiZWNhdXNlIGl0IHNraXBzIHRoZSB0YWdzLCBidXQgZG9lcyBub3QgcmVjb2duaXplIHRoZQotCSAgdGFnIGRhdGEgYXQgdGhhdCBsb2NhdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTE0MzcKLQotMjAxNC0xMS0yOCAxMDo0MTo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvaWNsZXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvdGVzdC1zZWdtZW50LXNlZWtzLmM6Ci0JICB0ZXN0czogYWRkIGludGVyYWN0aXZlIHRlc3QgZm9yIGdhcGxlc3MgcGxheWJhY2sgdXNpbmcgU0VHTUVOVCBzZWVrcwotCSAgTm90IHdvcmtpbmcgdG9vIHdlbGwgeWV0LCB0aGVyZSBhcmUgZ2xpdGNoZXMgZXZlbiB3aXRoIFdBViBvciBGTEFDLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjM2OAotCi0yMDE0LTExLTI2IDEwOjMzOjA5ICswMzAwICBBbmRyZWkgU2FyYWtlZXYgPHNhcmFrdXNoYUBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5oOgotCSAgYXNwZWN0cmF0aW9jcm9wOiBIYW5kbGUgcmVzb2x1dGlvbiBjaGFuZ2VzIHByb3Blcmx5Ci0JICBXaGVuIGFuIGNhcHMtZXZlbnQgaXMgcmVjZWl2ZWQsIHdlIG11c3QgaW1tZWRpYXRlbHkgY2hhbmdlIHRoZSBjcm9wCi0JICB0byB2aWRlb2Nyb3AgY29ycmVjdGx5IGNoYW5nZWQgY2Fwcy1ldmVudCBkaW1lbnNpb24sIG90aGVyd2lzZSB0aGUKLQkgIHZpZGVvY3JvcCB3aWxsIGZpcnN0IHVzZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGNyb3AgdGhhdCB3aGVuCi0JICByZXNpemluZyB2aWRlbyB0byBhIHNtYWxsZXIgcmVzb2x1dGlvbiBtYXkgY2F1c2UgYW4gZXJyb3IuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwNjcxCi0KLTIwMTQtMTEtMjcgMTc6MTA6NTMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA3YmIyYmNlIHRvIGVmMWZmZGMKLQotMjAxNC0xMS0yNyAxMToyMDozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvaWNsZXMvdGVzdC1hY2N1cmF0ZS1zZWVrLmM6Ci0JICB0ZXN0OiB1c2UgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kKCkgZm9yIHRpbWVzdGFtcCB0byBzYW1wbGUgY2FsY3VsYXRpb24KLQotMjAxNC0xMS0yNyAxMToxNjozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvaWNsZXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvdGVzdC1hY2N1cmF0ZS1zZWVrLmM6Ci0JICB0ZXN0czogYWRkIGludGVyYWN0aXZlIHRlc3QgZm9yIGFjY3VyYXRlIHNlZWtpbmcKLQkgIEZvciBzb21lIGF1ZGlvIGZvcm1hdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU1Mjc2Ci0KLTIwMTQtMTEtMjYgMTY6MDQ6MjYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgaXNvbXA0OiBDaGVjayBwcmVzZW5jZSBvZiBtZmhkIGluIG1vb2YKLQkgIFRoZSAnbWZoZCcgYXRvbSBpcyBtYW5kYXRvcnkgaW4gJ21vb2YnLiBXZSBjYW4gbGF0ZXIgb24gY2hlY2sgd2hldGhlcgotCSAgdGhlIGZyYWdtZW50IG51bWJlciBwcm9wZXJseSBpbmNyZWFzZXMKLQotMjAxNC0xMS0yNiAxNTo1OTozNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkgIGlzb21wNDogRml4IG1mcm8gYW5kIHRmcmEgYXRvbSBkdW1waW5nCi0JICBtZnJvIHdhcyBza2lwcGluZyB0aGUgdmVyc2lvbi9mbGFncwotCSAgdGZyYSBoYWQgd3JvbmcgYnl0ZV9yZWFkZXIgcmV0dXJuIHZhbHVlIGNoZWNrcwotCi0yMDE0LTExLTI2IDE1OjU4OjI2ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jOgotCSAgaXNvbXA0OiBBZGQgbWZoZCBhdG9tIGR1bXBpbmcKLQotMjAxNC0xMS0yNyAwMDoxNTowMiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogSGFuZGxlIGVtcHR5IHNlZ21lbnRzIHdoZW4gc2Vla2luZyBpbiByZXZlcnNlIHBsYXkuCi0JICBFbXB0eSBzZWdtZW50cyBpbiBhbiBlZGl0IGxpc3QgaGF2ZSBhIG1lZGlhX3N0YXJ0IHRpbWUgb2YgLTEsCi0JICBhcyB0aGV5IGRvbid0IGFjdHVhbGx5IHBsYXkgYW55IG1lZGlhLiBBbGxvdyBmb3IgdGhhdCB3aGVuCi0JICBhbGlnbmluZyB0byB0aGUgcmVmZXJlbmNlIHN0cmVhbSBpbiByZXZlcnNlIHBsYXkuCi0KLTIwMTQtMTEtMjQgMTA6MzY6NTQgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICBSZXZlcnQgInY0bDJhbGxvY2F0b3I6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGFkNDQ4MGQ1MzQwOGE0ZDk3YWI1MzExNzRlZjM3ZjI1OGYzMjUzYzAuCi0KLTIwMTQtMTEtMjQgMTA6MzY6MzAgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgUmV2ZXJ0ICJ2NGwyOiBtb3ZlIHZiX3F1ZXVlIHByb2JpbmcgZnJvbSBhbGxvY2F0b3IgdG8gdjRsMm9iamVjdCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZWM2YjhiODRhZjcxOWQ4MjhkZGQ5MWM3MjRlNzE1YzBiNGE1NTZiYy4KLQotMjAxNC0xMS0yNCAxMDozMzoyOSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBSZXZlcnQgInY0bDJvYmplY3Q6IGFsbG93IHRvIGF1dG9tYXRpYyBzZWxlY3Rpb24gb2YgZG1hYnVmIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBlNmMyYWQ1NTcxZTVkZWRiMjEyMjg3ZWZlMjM4ZWI0NTAwMzJjZDRmLgotCi0yMDE0LTExLTIzIDE2OjM0OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBSRVFVSVJFTUVOVFM6Ci0JICBSRVFVSVJFTUVOVFM6IHVwZGF0ZSBhIGxpdHRsZQotCSAgUGVvcGxlIGFjdHVhbGx5IGxvb2sgYXQgdGhhdCBpdCBzZWVtcy4KLQotMjAxNC0xMS0yMyAxNjoyMjoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2ljeWRlbXV4L01ha2VmaWxlLmFtOgotCSAgaWN5ZGVtdXg6IGRvZXMgbm90IG5lZWQgdG8gbGluayBhZ2FpbnN0IHpsaWIKLQotMjAxNC0xMS0yMiAyMToyODozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuaDoKLQkgIHNwZWV4OiByZW1vdmUgc3VwcG9ydCBmb3IgYW5jaWVudCBzcGVleCB2ZXJzaW9ucwotCi0yMDE0LTExLTIxIDExOjIxOjE4ICswMTAwICBCcmFuaXNsYXYgS2F0cmVuaWFrIDxia2F0cmVuaWFrQG51dm90ZWNobm9sb2dpZXMuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IGxvZyBjb25uZWN0aW9uIGV2ZW50cyBhdCBpbmZvIGxldmVsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5MzA1Ci0KLTIwMTQtMTAtMjAgMTM6MDA6MzcgKzAyMDAgIE1pZ3VlbCBQYXLDrXMgRMOtYXogPG1wYXJpc2RpYXpAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZW5zdXJlIHJ0eF9yZXRyeV9wZXJpb2QgPj0gMAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTM0NAotCi0yMDE0LTExLTIxIDExOjQ0OjI0IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSAgdjRsMmFsbG9jYXRvcjogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgdGhpcyB3YXMgaW50cm9kdWNlZCBieSBjb21taXQgZWM2YjhiCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MzgyCi0KLTIwMTQtMTEtMTYgMTI6MzQ6MTcgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMjogSGFuZGxlIGNvcnJ1cHRlZCBidWZmZXIgd2l0aCBlbXB0eSBwYXlsb2FkCi0JICBUaGlzIGFsbG93IHNraXBwaW5nIGJ1ZmZlciBmbGFnZ2VkIHdpdGggRVJST1IgdGhhdCBoYXMgbm8gcGF5bG9hZC4KLQkgIFRoaXMgaXMgdHlwaWNhbCBiZWhhdmlvdXIgd2hlbiBhIHJlY292ZXJlcmFibGUgZXJyb3Igb2NjdXJlZCBkdXJpbmcKLQkgIGNhcHR1cmUgaW4gdGhlIGRyaXZlciwgYnV0IHRoYXQgbm8gdmFsaWQgZGF0YSB3YXMgZXZlciB3cml0dGVuIGludG8gdGhhdAotCSAgYnVmZmVyLiBUaGlzIHBhdGNoIGFsc28gdHJhbnNsYXRlIFY0TDJfQlVGX0ZMQUdfRVJST1IgaW50bwotCSAgR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRC4gSGVuY2UgZGVjb2RpbmcgZXJyb3IgcHJvZHVjZQotCSAgYnkgZGVjb2RlciBkdWUgdG8gbWlzc2luZyBmcmFtZXMgd2lsbCBub3cgYmUgY29ycmVjdGx5IG1hcmtlZC4gRmluYWxseSwKLQkgIHRoaXMgZml4ZXMgYSBidWZmZXIgbGVhayB3aGVuIEVPUyBpcyByZWFjaGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDA0MAotCi0yMDE0LTExLTIxIDE2OjM2OjE1ICswMTAwICBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IGFsbG93IHRvIGF1dG9tYXRpYyBzZWxlY3Rpb24gb2YgZG1hYnVmCi0JICBJZiB0aGUgdjRsMiBxdWV1ZSBzdXBwb3J0IGRtYWJ1ZiBzZWxlY3QgdGhpcyBidWZmZXIgcG9vbCBtb2RlCi0JICBhbmQgdXBkYXRlIHRoZSBxdWVyeSB3aXRoIGFsbG9jYXRvci4KLQkgIFRoaXMgcGF0Y2ggb25seSBjb25jZXJuIGV4cG9ydGluZyBkbWFidWYgYW5kIG5vdCBpbXBvcnRpbmcgZG1hYnVmCi0JICBmZCBmcm9tIGRvd25zdHJlYW0gZWxlbWVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTkzODIKLQotMjAxNC0xMS0yMSAxNjoxMzowNSArMDEwMCAgQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICB2NGwyOiBtb3ZlIHZiX3F1ZXVlIHByb2JpbmcgZnJvbSBhbGxvY2F0b3IgdG8gdjRsMm9iamVjdAotCSAgVGhlIGdvYWwgaXMgdG8gbWFrZSB0aG9zZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdjRsMl9vYmplY3QKLQkgIHRvIGJlIGFibGUgbGF0ZXIgdG8gc2VsZWN0IHRoZSBiZXN0IGFsbG9jYXRpb24gbWV0aG9kIGZvciB0aGUgcG9vbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTM4MgotCi0yMDE0LTExLTIwIDIyOjQyOjU5ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IEZpeCB1cCBuZXdfaml0dGVyYnVmZmVyIHNpZ25hbCBwcm90b3R5cGUKLQotMjAxNC0xMS0yMCAyMDoxOToyNSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Z2l0QGFydW5yYWdoYXZhbi5uZXQ+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBEb2N1bWVudCBob3cgdG8gY29udHJvbCBwZXItU1NSQyByZXRyYW5zbWlzc2lvbgotCi0yMDE0LTExLTIwIDIwOjE4OjQ1ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxnaXRAYXJ1bnJhZ2hhdmFuLm5ldD4KLQotCSogZG9jcy9kZXNpZ24vZGVzaWduLXJ0cHJldHJhbnNtaXNzaW9uLnR4dDoKLQkgIGRvYzogVHJpdmlhbCBzcGVsbGluZyBhbmQgY29uc2lzdGVuY3kgdXBkYXRlCi0KLTIwMTQtMTEtMjAgMTM6MTQ6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBwdXQgMC1ieXRlIGF0IHRoZSBlbmQgb2YgZXZlbnRzCi0JICBQdXQgYSAwLWJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgc3RyaW5nLiBEb2VzIG5vdCBicmVhayBBQkkgYmVjYXVzZQotCSAgb2xkIGRlcGF5bG9hZGVycyB3aWxsIHNraXAgdGhlIDAgYnl0ZSAod2hpY2ggaXMgaW5jbHVkZWQgaW4gdGhlIGxlbmd0aCkuCi0JICBFeHBlY3QgYSAwLWJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUgZXZlbnQgc3RyaW5nIG9yIGEgOyBmb3Igb2xkCi0JICBwYXlsb2FkZXJzLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc1OTEKLQotMjAxNC0xMS0yMCAxMjo0MDoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkgIHJ0cGdzdGRlcGF5OiBhdm9pZCBidWZmZXIgb3ZlcnJlYWQuCi0JICBDaGVjayB0aGF0IGEgY2FwcyBldmVudCBzdHJpbmcgaXMgMCB0ZXJtaW5hdGVkIGFuZCB0aGUgZXZlbnQgc3RyaW5nIGlzCi0JICB0ZXJtaW5hdGVkIHdpdGggYSA7IHRvIGF2b2lkIGJ1ZmZlciBvdmVycmVhZHMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NTkxCi0KLTIwMTQtMTEtMjAgMTA6NDU6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBkb24ndCBsaW1pdCBtYXggdmlkZW8gcmVzb2x1dGlvbiB0byA0MDk2eDQwOTYKLQkgIE1BWCBpc24ndCBlbnRpcmVseSBjb3JyZWN0IGFzIHVwcGVyIGxpbWl0IGVpdGhlciwKLQkgIGl0IHNob3VsZCByZWFsbHkgYmUgTUFYVUlOVDMyLCBidXQgaXQncyB1bmxpa2VseQotCSAgdG8gYmUgYSBwcm9ibGVtIGluIHRoZSBuZWFyIGZ1dHVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA0MDcKLQotMjAxNC0xMS0xOSAxNTowNjowMCAtMDgwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBsZWFrIGZvciBtaWtleSBiYXNlNjQgZGVjb2RlZCBrZXktbWdtdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDM5MgotCi0yMDE0LTExLTIwIDA5OjAxOjM4ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgdmlkZW9iYWxhbmNlOiBmaXggdW5oYW5kbGVkIGZvcm1hdCBpbiBwYXNzdGhyb3VnaAotCSAgSW4gcGFzc3Rocm91Z2ggd2UgY2FuIGhhbmRsZSBhbGwgZm9ybWF0cy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDAzODcKLQotMjAxNC0xMS0xOSAxNjoxMjozOCArMDEwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8anN0ZWZmZW5zQG1ha2UudHY+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBSZXN0cmljdCByZXN5bmNpbmcgdG8gVFMgcmVncmVzc2lvbnMKLQkgIFRoZSBiZWhhdmlvciBvZiByZXN5bmNpbmcgdmlkZW8gYW5kIGF1ZGlvIGluZGVwZW4tCi0JICBkZW50bHkgY2FuIGNhdXNlIEEvViBkZXN5bmNzLiBMZXRzIHJlc3RyaWN0IHJlc3luY3MKLQkgIHRvIGp1bXBzIGJhY2t3YXJkIGZvciBub3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2Mzk3Ci0KLTIwMTQtMTEtMTcgMjM6MTY6MDMgKzExMDAgIE1hdHRoZXcgV2F0ZXJzIDxtYXR0aGV3QGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmg6Ci0JICB2aWRlb21peGVyOiBmaXggdXAgUW9TIGhhbmRsaW5nIGZvciBsaXZlIHNvdXJjZXMKLQkgIE9ubHkgYXR0ZW1wdCBhZGFwdGl2ZSBkcm9wIHdoZW4gd2UgYXJlIG5vdCBsaXZlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5OTk2Ci0KLTIwMTQtMTEtMTAgMjI6MzQ6MzkgKzAxMDAgIEhlbm5pbmcgSGVpbm9sZCA8aGVubmluZ0BpdGNvbnN1bHRpbmctaGVpbm9sZC5kZT4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1QQ01BLnB5OgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEucHk6Ci0JICBleGFtcGxlczogcG9ydCBweXRob24gcnRwIFBDTUEgY2xpZW50L3NlcnZlciB0ZXN0cyB0byAxLjAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk5MzAKLQotMjAxNC0wNi0wNCAxMjoxMToxMCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IHNldCB0aGUgY2hhbm5lbCBwb3NpdGlvbnMgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIEFQSQotCSAgVGhpcyBhdm9pZHMgX3NldF9mb3JtYXQgc2V0dGluZyB0aGUgdW5wb3NpdGlvbmVkIGZsYWcgd2hlbiBwYXNzZWQKLQkgIE5VTEwgYXMgY2hhbm5lbCBwb3NpdGlvbnMsIGFzIGl0IHdvdWxkIG5vdCBiZSBjbGVhcmVkIHdoZW4gc2V0dGluZwotCSAgYWN0dWFsIGNoYW5uZWwgcG9zaXRpb25zIGxhdGVyLgotCi0yMDE0LTExLTAxIDIyOjM5OjQxICswMTAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBkYXJrb3NwaGVyZS5mcj4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmM6Ci0JICB2cHg6IG1hcmsgYXJuci10eXBlIHByb3BlcnRpZXMgYXMgZGVwcmVjYXRlZCBhbmQgc2V0IHRoZW0gdG8gbm8tb3AKLQkgIEFSTlIgdHlwZSBjb250cm9sIGluIGxpYnZweCBoYXMgYmVlbiBkZXByZWNhdGVkIHNvIHRoaXMgY29tbWl0IG1hcmsgdGhlCi0JICB2cDhlbmMgYW5kIHZwOWVuYyBhc3NvY2lhdGVkIHByb3BlcnRpZXMgYXMgZGVwcmVjYXRlZCBhbmQgY2hhbmdlIHRoZWlyCi0JICBiZWhhdmlvciB0byBqdXN0IGRpc3BsYXkgYSB3YXJuaW5nIG1lc3NhZ2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5NDc2Ci0KLTIwMTQtMTEtMTAgMTM6MTY6MDEgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGdpdEBhcnVucmFnaGF2YW4ubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cG1hbmFnZXI6IFRyaXZpYWwgdHlwbyBmaXgKLQotMjAxNC0xMS0wOSAxMTowNDozMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2EtbXV4OiBVc2UgR19ERUZJTkVfVFlQRSgpIHRvIHJlZ2lzdGVyIHRoZSBwYWQgaW5zdGVhZCBvZiBtYW51YWxseSByZWdpc3RlcmluZyBpdAotCi0yMDE0LTExLTA2IDE1OjM3OjI4ICswMTAwICBHw7ZyYW4gSsO2bnNzb24gPGdvcmFuam5AYXhpcy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBtYWtlIEdzdE1hdHJvc2thbXV4UGFkIGdldF90eXBlKCkgZnVuY3Rpb24gdGhyZWFkLXNhZmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk3MjIKLQotMjAxNC0xMS0wNyAxNjoxMToyNCArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSAgdjRsMmFsbG9jYXRvcjogZml4IGVycm9yIG1lc3NhZ2UgaWYgYWxsb2NhdG9yIGlzIGFscmVhZHkgYWN0aXZlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM5Nzg5Ci0KLTIwMTQtMTEtMDYgMjE6MjE6NDAgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IEltcHJvdmUgYnVmZmVyIHZhbGlkYXRpb24KLQkgIEltcHJvdmUgYnVmZmVyIHZhbGlkYXRpb24gYnkgbWFraW5nIHN1cmUgZWFjaCBtZW1vcnkgYXJlIHRoZSByaWdodAotCSAgb25lIGFuZCB0aGF0IGVhY2ggbWVtb3J5IGlzIHdyaXRhYmxlLiBUaGlzIGZpeGVzIHRlYXJpbmcgaXNzdWVzIGluCi0JICBjYXNlIGRvd25zdHJlYW0gdXNlcyBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSBvciBvdGhlciB0eXBlCi0JICBvZiBHc3RCdWZmZXIgY29weSB3aGVyZSBtZW1vcnkgYXJlIG9ubHkgcmVmZmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTc1NAotCi0yMDE0LTExLTA2IDIxOjM4OjQzICswMTAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSAgcnRzcDogZml4IGJ1aWxkIGluIGdzdC11bmluc3RhbGxlZCBzZXR1cAotCi0yMDE0LTEwLTI5IDE4OjQ0OjQzICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmg6Ci0JICBpbWFnZWZyZWV6ZTogSGFuZGxlIHNlcW51bXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzkzNjYKLQotMjAxNC0xMS0wNCAwODoxODo0MSArMDUzMCAgVmluZWV0aCBUIE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5oOgotCSAgcG5nZGVjOiBjaGFuZ2UgcGFyc2UgbG9naWMKLQkgIFJpZ2h0IG5vdyBpbiBwYXJzZSBsb2dpYyB0aGUgc2lnbmF0dXJlIGlzIGNoZWNrZWQgZXZlcnkgdGltZSB0aGUgcGFyc2UgZnVuY3Rpb24KLQkgIGlzIGNhbGxlZCwgYW5kIHRoZSB3aG9sZSBkYXRhIGlzIHRoZSBzY2FubmVkIGVhY2ggYW5kIGV2ZXJ5IHRpbWUsIGV2ZW4gdGhvdWdoIHRoZQotCSAgZGF0YSBpcyBzY2FubmVkIGluIHRoZSBwcmV2aW91cyBpbnN0YW5jZS4gQ2hhbmdpbmcgdGhlIGxvZ2ljIHN1Y2ggdGhhdCwgd2Ugc2tpcAotCSAgdGhlIGJ5dGVzIHdoaWNoIGFyZSBhbHJlYWR5IHNjYW5uZWQgaW4gdGhlIHByZXZpb3VzIGluc3RhbmNlcyBvZiBwYXJzZS4gVGhpcwotCSAgaGVscHMgaW4gYXZvaWRpbmcgbXVsdGlwbGUgc2NhbiBvZiBhbHJlYWR5IHNjYW5uZWQgZGF0YS9zaWduYXR1cmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NzA4Ci0KLTIwMTQtMTEtMDMgMTU6MjY6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjI6IHJldmVyc2Ugb3JkZXIgb2YgcGFyYW1zIGZvciBjb252ZXJ0ZXIKLQotMjAxNC0xMS0wMyAxMTo0NDoyOCArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBmaXggdHlwbyBpbiBmbGFncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTU0OQotCi0yMDE0LTExLTAyIDIzOjMzOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyc3JjOiBmaXggYSBjb3VwbGUgb2YgbWlub3IgbGVha3MKLQotMjAxNC0xMS0wMiAxOTo0MjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5oOgotCSAgZ29vbTJrMTogcG9zdCBRb1MgbWVzc2FnZXMgd2hlbiBkcm9wcGluZyBmcmFtZXMgZHVlIHRvIFFvUwotCi0yMDE0LTExLTAyIDE5OjI5OjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmg6Ci0JICBnb29tOiBwb3N0IFFvUyBtZXNzYWdlcyB3aGVuIGRyb3BwaW5nIGZyYW1lcyBkdWUgdG8gUW9TCi0KLTIwMTQtMTEtMDIgMTk6MDI6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiB0d2VhayB3cml0aW5nIGFwcCB0YWcgc3RyaW5nIGEgbGl0dGxlCi0KLTIwMTQtMTEtMDIgMTY6NTE6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBTcHJpbmtsZSBzb21lIEdfUEFSQU1fREVQUkVDQVRFRCBhbmQgI2lmbmRlZiBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKLQotMjAxNC0xMS0wMiAxNjo1ODowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkgIHRlc3RzOiBkb24ndCB1c2UgZGVwcmVjYXRlZCBwcm9wZXJ0eSBpbiBsZXZlbCB1bml0IHRlc3QKLQotMjAxNC0xMS0wMiAxMzowNjozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGltcGxlbWVudCBnZXQvc2V0IGZvciBuZXcgcnR4LW1pbi1yZXRyeS10aW1lb3V0IHByb3BlcnR5Ci0JICBQcm9wZXJ0aWVzIGFyZSBzbyBtdWNoIG1vcmUgdXNlZnVsIGlmIHlvdSBjYW4gYWN0dWFsbHkgc2V0Ci0JICBhbmQgZ2V0IHRoZWlyIHZhbHVlcy4KLQotMjAxNC0xMC0zMCAxNzo0MToxOSArMDAwMCAgU2ltb24gRmFybnN3b3J0aCA8c2ltb24uZmFybnN3b3J0aEBvbmVsYW4uY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBDbGVhbiB1cCBpbnRlcmxhY2Ugc3VwcG9ydAotCSAgUmF0aGVyIHRoYW4gdHJ5IGFuZCBndWVzcyBpbnRlcmxhY2Ugc3VwcG9ydCBhcyBwYXJ0IG9mIGNoZWNraW5nIHN1cHBvcnRlZAotCSAgc2l6ZXMsIGxvb2sgZm9yIGludGVybGFjZSBzdXBwb3J0IHNwZWNpZmljYWxseSBpbiBpdHMgb3duIGZ1bmN0aW9uLgotCSAgQXMgYSBjbGVhbnVwLCB1c2UgVjRMMl9GSUVMRF9BTlkgd2hlbiBwcm9iaW5nIHNpemVzLCB3aGljaCBzaG91bGQgcmVzdWx0IGluCi0JICB0aGUgZHJpdmVyIGRvaW5nIHRoZSByaWdodCB0aGluZy4KLQkgIFdpdGggbXkgY2FwdHVyZSBzZXR1cCwgdGhpcyBnZXRzIG1lIHRoZSBmb2xsb3dpbmcgc2FtcGxlIGNhcHM6Ci0JICBGb3IgMTA4MGkgcmVzb2x1dGlvbjoKLQkgIHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVVkyLCB3aWR0aD0oaW50KTE5MjAsIGhlaWdodD0oaW50KTEwODAsIHBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pMS8xLCBpbnRlcmxhY2UtbW9kZT0oc3RyaW5nKWludGVybGVhdmVkLCBmcmFtZXJhdGU9KGZyYWN0aW9uKXsgMjUvMSwgMzAvMSB9Ci0JICBGb3IgNzIwcCByZXNvbHV0aW9uOgotCSAgdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlVWTIsIHdpZHRoPShpbnQpMTI4MCwgaGVpZ2h0PShpbnQpNzIwLCBwaXhlbC1hc3BlY3QtcmF0aW89KGZyYWN0aW9uKTEvMSwgaW50ZXJsYWNlLW1vZGU9KHN0cmluZylwcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPShmcmFjdGlvbil7IDUwLzEsIDYwLzEgfQotCSAgRm9yIDU3NmkvcCByZXNvbHV0aW9uIChib3RoIHBvc3NpYmxlIGF0IHRoZSBwb2ludCBvZiBxdWVyeSk6Ci0JICB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVVZMiwgd2lkdGg9KGludCk3MjAsIGhlaWdodD0oaW50KTU3NiwgcGl4ZWwtYXNwZWN0LXJhdGlvPShmcmFjdGlvbikxLzEsIGludGVybGFjZS1tb2RlPShzdHJpbmcpeyBwcm9ncmVzc2l2ZSwgaW50ZXJsZWF2ZWQgfSwgZnJhbWVyYXRlPShmcmFjdGlvbil7IDI1LzEsIDUwLzEgfQotCSAgVGhpcywgaW4gdHVybiwgbWFrZXMgNTc2aSB3b3JrIGNvcnJlY3RseTsgd2l0aCB0aGUgb2xkIGNvZGUsCi0JICB0aGUgY2FwcyB3b3VsZCBiZSBpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSBmb3IgaW50ZXJsYWNlZCB2aWRlby4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjYxOTQKLQotMjAxNC0xMS0wMSAxMjoxODowMiArMDEwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAZGFya29zcGhlcmUuZnI+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4dXRpbHMuaDoKLQkgIHZweDogcmVtb3ZlIGNvbXBhdGliaWxpdHkgZGVmaW5lcwotCSAgV2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBWUFhfSU1HX0ZNVF9JNDIwLCBWUFhfUExBTkVfWSwKLQkgIFZQWF9QTEFORV9VIGFuZCBWUFhfUExBTkVfViBhcyB3ZSByZXF1aXJlIGxpYnZweCA+IDEuMS4wLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczOTQ3NgotCi0yMDE0LTExLTAxIDE1OjMzOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICB3YXZwYWNrOiByZW1vdmUgc3VwcG9ydCBmb3IgYW5jaWVudCBBUEkgdmVyc2lvbgotCi0yMDE0LTExLTAxIDEwOjE0OjMxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkgIHJ0cHZwODogVXNlIFZQOCBlbmNvZGluZyBuYW1lCi0JICBCb3RoIEZpcmVmb3ggYW5kIENocm9tZSB1c2VzIFZQOCBhcyB0aGUgZW5jb2RpbmcgaW4gdGhlaXIgU0RQLgotCSAgQWRkaW5nIHRoaXMgbm93IGRlZmFjdG8gc3RhbmRhcmQgbmFtZSByZW1vdmVzIHRoZSBuZWVkIGZvciBzcGVjaWFsCi0JICBjYXNlIGluIFNEUCBwYXJzaW5nIGNvZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3ODEwCi0KLTIwMTQtMTEtMDEgMTE6NTk6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSAgcnRwbXAydHBheTogZml4IHVwIHRlbXBsYXRlIGNhcHMgc28gd2UgY2FuIG91dHB1dCB0aGUgZGVmYXVsdCBwdCAzMwotCSAgQWRkIGZpeGVkIHBheWxvYWQgdHlwZSBmb3IgbXAydCB0byB0ZW1wbGF0ZSBjYXBzIGFzIHdlbGwsIHNvCi0JICBvdXIgb3V0cHV0IGNhcHMgbWF0Y2ggdGhlIGFkdmVydGlzZWQgZGVmYXVsdCBwdC4gRml4ZXMgYQotCSAgcmVncmVzc2lvbiBmcm9tIDEuMi4KLQkgIFRoZXJlJ3Mgc3RpbGwgc29tZXRoaW5nIHdyb25nIHdpdGggY2FwcyBuZWdvdGlhdGlvbiB0aG91Z2gsCi0JICBydHBtcDJ0cGF5IHBheWxvYWQ9OTYgISBmYWtlc2luayB3aWxsIG5vdCBvdXRwdXQgY2FwcyB3aXRoCi0JICBwYXlsb2FkPTk2LgotCi0yMDE0LTEwLTMwIDE1OjM3OjM2IC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogbWlrZXkgcmVsYXRlZCBtZW1vcnkgbGVha3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk0MzAKLQotMjAxNC0wNi0xMCAxMDowNDowNyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JICBzcGVleGVuYzogdXBkYXRlIG91dHB1dCBzZWdtZW50IHN0b3AgdGltZSB0byBtYXRjaCBjbGlwcGVkIHNhbXBsZXMKLQkgIFRoaXMgd2lsbCBsZXQgb2dnbXV4IGdlbmVyYXRlIGEgZ3JhbnBvcyBvbiB0aGUgbGFzdCBwYWdlIHRoYXQgcHJvcGVybHkKLQkgIHJlcHJlc2VudHMgdGhlIGNsaXBwZWQgc2FtcGxlcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uCi0KLTIwMTQtMDYtMTAgMTA6NTk6MTMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmg6Ci0JICBmbGFjZW5jOiB1cGRhdGUgb3V0cHV0IHNlZ21lbnQgc3RvcCB0aW1lIHRvIG1hdGNoIGNsaXBwZWQgc2FtcGxlcwotCSAgVGhpcyB3aWxsIGxldCBvZ2dtdXggZ2VuZXJhdGUgYSBncmFucG9zIG9uIHRoZSBsYXN0IHBhZ2UgdGhhdCBwcm9wZXJseQotCSAgcmVwcmVzZW50cyB0aGUgY2xpcHBlZCBzYW1wbGVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KLQotMjAxNC0xMC0wNyAxNToyOTozMyArMDIwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBjbGVhbmx5IGhhbmRsZSBzdHJlYW1vbiBmYWlsdXJlIGZvciBvdXRwdXQgZGV2aWNlCi0JICBPbiBzdHJlYW1vbiBmYWlsdXJlLCB0aGUgcXVldWVkIGJ1ZmZlciBpcyBub3QgcmVsZWFzZWQgZnJvbSB0aGUKLQkgIGJ1ZmZlcnBvb2wgY2xhc3MgcG9pbnQgb2YgdmlldyBiZWNhdXNlIGl0IGlzIHF1ZXVlZCB0byB0aGUgZHJpdmVyIGFuZAotCSAgdGhlIGZsdXNoIGxvZ2ljIGlzIG5vdCBwZXJmb3JtZWQgc2luY2Ugd2UgYXJlIG5vdCBpbiBzdHJlYW1pbmcgc3RhdGUuCi0JICBJdCBjYXVzZXMgdGhlIHY0bDIgYnVmZmVycG9vbCB0byBhbHdheXMgcmV0dXJuIHRoYXQgc3RvcCBtZXRob2QgZmFpbGVkCi0JICBhbmQgdG8gbGVhayB2NGwyIG9iamVjdHMgYW5kIGJ1ZmZlcnMuCi0JICBUaGlzIGNvbW1pdCBzb2x2ZSB0aGlzIGJ5IHBlcmZvcm1pbmcgdGhlIGZsdXNoIGxvZ2ljIGluIGVycm9yIGNhc2UsIGllCi0JICBmbHVzaGluZyB0aGUgYWxsb2NhdG9yIGFuZCByZXN0b3JpbmcgcXVldWVkIGJ1ZmZlciBzdGF0ZSB0byBub24tcXVldWVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODEwMgotCi0yMDE0LTEwLTA4IDEwOjMxOjIxICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IGltcGxlbWVudCBkaXNwb3NlIG1ldGhvZAotCSAgVW5yZWYgb2JqZWN0cyBpbiBkaXNwb3NlIG1ldGhvZCByYXRoZXIgdGhhbiBpbiBmaW5hbGl6ZSBpbiBvcmRlciB0bwotCSAgcHJldmVudCBjaXJjdWxhciByZWZlcmVuY2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4MTAyCi0KLTIwMTQtMTAtMDggMTA6MzU6MTQgKzAyMDAgIEF1csOpbGllbiBaYW5lbGxpIDxhdXJlbGllbi56YW5lbGxpQHBhcnJvdC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogY2hlY2sgdGhhdCBhbGxvY2F0b3IgaXMgbm9uIG51bGwgd2hlbiBzdG9wcGluZyBwb29sCi0JICBPdGhlcndpc2UsIHdlIGNvdWxkIGRlcmVmZXJlbmNlIE5VTEwgYWxsb2NhdG9yIHdoZW4gdGhlIHN0b3AgbWV0aG9kIGlzCi0JICBjYWxsZWQgYnkgdGhlIEdzdEJ1ZmZlclBvb2wncyBmaW5hbGl6ZSBtZXRob2QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4MTAyCi0KLTIwMTQtMTAtMDkgMTI6MTU6MDUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDJzaW5rOiBJbXBsZW1lbnQgdW5sb2NrL3VubG9ja19zdG9wCi0JICBUaGlzIHdpbGwgcHJldmVudCBkZWFkbG9ja3MsIGJ1dCB3aWxsIGFsc28gcHJvcGVybHkgZmx1c2ggdGhlIHBvb2wgYW5kIGFsbG9jYXRvcgotCSAgd2hlbiBnb2luZyB0byBSRUFEWSBzdGF0ZS4gSXQgc2hvdWxkIGFsc28gZml4IGlzc3VlcyByZXBvcnRlZCBvbiBtYWlsaW5nIGxpc3QKLQkgIHdoZW4gc2Vla2luZyBpcyBwZXJmb3JtZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4MTUyCi0KLTIwMTQtMTAtMjggMjE6MzI6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWRldmljZXByb3ZpZGVyLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5oOgotCSAgcHVsc2UsIHY0bDI6IGFkZCBtaXNzaW5nIEdfRU5EX0RFQ0xTIGluIHNvbWUgcGxhY2VzCi0KLTIwMTQtMTAtMjcgMTc6NTc6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA4NGQwNmNkIHRvIDdiYjJiY2UKLQotMjAxNC0xMC0yNyAxMTowODoyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBGaXggdW5pdCB0ZXN0IG5vdyB0aGF0IHdlIGFsd2F5cyBoYXZlIHByb2ZpbGUvbGV2ZWwgaW4gdGhlIGNhcHMKLQotMjAxNC0xMC0yNiAxNDo1NTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBQYXJhbGxlbGlzZSAnbWFrZSBjaGVjay12YWxncmluZCcKLQkgIFNvbWUgb2YgdGhlIFJUUCB1bml0IHRlc3RzIGFyZSB2ZXJ5IGZsYWt5IGFuZCB3aWxsCi0JICBmYWlsIG1vcmUgb2Z0ZW4gd2l0aCB0aGUgQ1BVIG1heGVkIG91dCBmdWxseS4gVGhvc2UKLQkgIHRlc3RzIG5lZWQgdG8gYmUgZml4ZWQgaW4gYW55IGNhc2UgdGhvdWdoLCB0aGV5IGFsc28KLQkgIGZhaWwgb24gc2xvd2VyIG1hY2hpbmVzIGFuZCBhbHNvIG9jY2FzaW9uYWxseSB3aXRoCi0JICBub3JtYWwgJ21ha2UgY2hlY2snLgotCi0yMDE0LTEwLTI2IDExOjQ3OjI1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogQWx3YXlzIHNldCBwcm9maWxlL2xldmVsIG9uIHRoZSBjYXBzCi0JICBXZSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBhbHJlYWR5LCBzbyB3aHkgbm90IHVzZSBpdD8KLQotMjAxNC0xMC0yNSAxMjozNjowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGZpeCBjcmFzaCBvbiBzb21lIDMyLWJpdCBzeXN0ZW1zCi0JICBNYWtlIHN1cmUgdG8gcGFzcyByaWdodCBudW1iZXIgb2YgYml0cyB0byBnc3Rfc3RydWN0dXJlX25ldygpCi0JICB3aGljaCBpcyBhIHZhcmFyZyBmdW5jdGlvbi4KLQkgIEZpeGVzIGVsZW1lbnRzL3J0cGF1eCB1bml0IHRlc3Qgb24gcHBjMzIuCi0KLTIwMTQtMTAtMjUgMDA6NTY6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmM6Ci0JICB0ZXN0czogZml4IHJndm9sdW1lIHRlc3Qgb24gYmlnLWVuZGlhbiBzeXN0ZW1zCi0KLTIwMTQtMTAtMjUgMDA6NTM6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsYXdkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZW5jLmM6Ci0JICB0ZXN0czogZml4IG11bGF3ZGVjL211bGF3ZW5jIHRlc3QgZm9yIGJpZyBlbmRpYW4gc3lzdGVtcwotCi0yMDE0LTEwLTI0IDIzOjQ4OjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxlYXZlOiBpbnRlcnNlY3QgcmVzdWx0IHdpdGggZmlsdGVyIGNhcHMgaW4gY2FwcyBxdWVyeQotCSAgRml4ZXMgY3Jhc2ggaW4gYXVkaW90ZXN0c3JjIGJlY2F1c2Ugb2YgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0Ci0JICBnZXR0aW5nIG5lZ290aWF0ZWQgb24gYmlnLWVuZGlhbiBzeXN0ZW1zIHdpdGgKLQkgIGF1ZGlvdGVzdHNyYyAhIGludGVybGVhdmUgISBhdWRpb2NvbnZlcnQgISB3YXZlbmMKLQotMjAxNC0xMC0yMyAxNTo0NjoxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlcHJvdmlkZXIuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZWRldmljZXByb3ZpZGVyLmg6Ci0JICBwdWxzZTogcmVtb3ZlIHNvbWUgdW51c2VkIHR5cGVkZWZzCi0KLTIwMTQtMTAtMjIgMTU6Mjg6NDQgKzAyMDAgIEFuYW5kYSA8YW5hbmRhQGxhdGVsaWVyMjMuY29tPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSAgc3BlZXg6IEZpeCBzZWdmYXVsdCB3aGVuIHJlc2V0dGluZyB0aGUgY29kZWNzIG11bHRpcGxlIHRpbWVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NzkzCi0KLTIwMTQtMTAtMjIgMjI6NTA6NTQgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW5AYWNjb3N0ZWQubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IFRlbXBvcmFyaWx5IGRpc2FibGUgc3RyZWFtIHN0YXR1cyBwb3N0aW5nCi0JICBXZSBuZWVkIGEgbWVjaGFuaXNtIGluIFB1bHNlQXVkaW8gdG8gYWxsb3cgcnVubmluZyBjb2RlIG91dHNpZGUgdGhlCi0JICBtYWlubG9vcCBsb2NrLiBUaGVuIHdlJ2QgYmUgYWJsZSB0byBwb3N0IHRvIHRoZSBidXMgKHRha2luZyB0aGUKLQkgIEdTVF9PQkpFQ1RfTE9DSyksIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgbG9ja2luZyBvcmRlciB3aXRoIHRoZSBtYWlubG9vcAotCSAgbG9jaywgd2hpY2ggaXMgdGhlIGN1cnJlbnQgY2F1c2Ugb2YgZGVhZGxvY2tzIHdoaWxlIHRyeWluZyB0byBwb3N0IHRoZQotCSAgc3RyZWFtIHN0YXR1cyBtZXNzYWdlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYwNzEKLQotMjAxNC0xMC0yMiAxNTowNDoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBsaW1pdCB0aGUgcmV0cnkgZnJlcXVlbmN5Ci0JICBXaGVuIHRoZSBSVFQgYW5kIGppdHRlciBhcmUgdmVyeSBsb3cgKHN1Y2ggYXMgb24gYSBsb2NhbCBuZXR3b3JrKSwgdGhlCi0JICBjYWxjdWxhdGVkIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgaXMgdmVyeSBzbWFsbC4gU2V0IHNvbWUgc2Vuc2libGUgbG93ZXIKLQkgIGJvdW5kYXJ5IHRvIHRoZSB0aW1lb3V0IGJ5IGFkZGluZyBhIG5ldyBwcm9wZXJ0eS4gV2UgdXNlIHRoZSBwYWNrZXQKLQkgIHNwYWNpbmcgYXMgYSBsb3dlciBib3VuZGFyeSBieSBkZWZhdWx0LgotCi0yMDE0LTEwLTIyIDEzOjQwOjU4ICswMjAwICBNaWd1ZWwgUGFyw61zIETDrWF6IDxtcGFyaXNkaWF6QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBnc3RydHBqaXR0ZXJidWZmZXI6IGFkZCAicnR4LW1pbi1kZWxheSIgcHJvcGVydHkKLQkgIFRoaXMgcHJvcGVydHkgaXMgdXNlZnVsIHRvIHNldCBhIG1pbiB0aW1lIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgYQotCSAgcmV0cmFuc21pc3Npb24gZXZlbnQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1Mzc4Ci0KLTIwMTQtMTAtMjIgMTM6Mjk6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogUmVmYWN0b3IgY29kZQotCSAgUmVmYWN0b3Igc29tZSBjb2RlIGRlYWxpbmcgd2l0aCBjYWxjdWxhdGluZyB2YXJpb3VzIHRpbWVvdXRzLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzUzNzgKLQotMjAxNC0xMC0xMCAxOTo1MDowNiArMDIwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IGZpeCBFYXJseSBGZWVkYmFjayBUcmFuc21pc3Npb24KLQkgIEluIGVhcmx5IHJldHJhbnNtaXNzaW9uIHdlIGFyZSBhbGxvd2VkIHRvIHNjaGVkdWxlIDEgcmVndWxhciBSVENQIHBhY2tldAotCSAgYXQgYW4gZWFybGllciB0aW1lLiBXaGVuIHdlIGRvIHRoYXQsIHdlIG5lZWQgdG8gc2V0IGFsbG93X2Vhcmx5IHRvIEZBTFNFCi0JICBhbmQgaWdub3JlL2Ryb3AgKG9yIG1lcmdlKSBhbGwgZnV0dXJlIHJlcXVlc3RzIGZvciBlYXJseSB0cmFuc21pc3Npb24uCi0JICBXZSBub3cgZmlyc3QgY2hlY2sgaWYgd2UgY2FuIHNjaGVkdWxlIGFuIGVhcmx5IFJUQ1AgYW5kIGlmIHdlIGNhbiwKLQkgIGFjdHVhbGx5IHByZXBhcmUgdGhlIGRhdGEgZm9yIHRoZSBuZXh0IFJUQ1AgaW50ZXJ2YWwuCi0JICBBZnRlciB3ZSBzZW5kIHRoZSBuZXh0IHJlZ3VsYXIgUlRDUCBhZnRlciB0aGUgZWFybHkgUlRDUCwgd2Ugc2V0Ci0JICBhbGxvd19lYXJseSB0byBUUlVFIGFnYWluIHRvIGFsbG93IG1vcmUgZWFybHkgcmVxdWVzdHMuCi0JICBSZW1vdmUgdGhlIGNvbmRpdGlvbiBmb3IgdGhlIGltbWVkaWF0ZSBmZWVkYmFjayBmb3Igbm93LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODMxOQotCi0yMDE0LTEwLTIxIDEzOjAxOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYThjODkzOSB0byA4NGQwNmNkCi0KLTIwMTQtMTAtMjEgMTM6MTA6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogbWFrZSBkZWJ1ZyBsaW5lIGxlc3MgY29uZnVzaW5nCi0KLTIwMTQtMTAtMjEgMTI6NTg6MTMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAzNjM4OGExIHRvIGE4Yzg5MzkKLQotMjAxNC0wNy0wMiAxNzo1MDozNSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBqaXR0ZXJidWZmZXI6IHJld29yayByZXN5bmMgaGFuZGxpbmcKLQkgIEFkZCBhIG5lZWQtcmVzeW5jIHN0YXRlLCB0aGlzIGlzIHdoZW4gd2UgbmVlZCB0byB0cnkgdG8gbG9jayBvbiB0byBhCi0JICB0aW1lL1JUUHRpbWUgcGFpci4KLQkgIEFsd2F5cyBjaGVjayB0aGUgUlRQIHRpbWVzdGFtcHMgYW5kIGlmIHRoZXkgZ28gYmFja3dhcmRzLCBtYXJrIG91cnNlbHZlcwotCSAgYXMgbmVlZC1yZXN5bmMuCi0JICBPbmx5IHJlc3luYyB3aGVuIG5lZWQtcmVzeW5jIGlzIFRSVUUgYW5kIHdlIGhhdmUgYSB2YWxpZCB0aW1lLiBPdGhlcndpc2UKLQkgIHdlIGtlZXAgdGhlIG9sZCB2YWx1ZXMuIFRoaXMgYXZvaWRzIGxvY2tpbmcgb24gdG8gYW4gaW52YWxpZCB0aW1lIGFuZAotCSAgY2F1c2luZyB1cyB0byB0aW1lc3RhbXAgZXZlcnl0aGluZyB3aXRoIC0xLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQxNwotCi0yMDE0LTEwLTAzIDE3OjI4OjA2IC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2V0IGZ1bGwgc3RyZWFtIGNhcHMgb24gaW50ZXJuYWwgc3JjIFRDUCBwYWRzCi0JICBTZXQgdGhlIGNvbXBsZXRlIHN0cmVhbSBjYXBzIG9uIHRoZSBUQ1AgaW50ZXJuYWwgc3JjIHBhZHMuIE90aGVyd2lzZSwKLQkgIHB0ZGVtdXggd2lsbCBub3QgcHJvcGVybHkgZGV0ZWN0IHRoZSBjYXBzIGNoYW5nZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4NjgKLQotMjAxNC0xMC0xNyAyMjoyMzoyNyArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cG11eC5jOgotCSAgcnRwbXV4OiBEb24ndCBzZXQgUFJPWFlfQ0FQUyBmbGFnIG9uIHRoZSBzcmMgcGFkCi0JICBydHBtdXggYmVoYXZlcyBsaWtlIGEgZnVubmVsIGluIHRoYXQgaXQgZm9yd2FyZHMgd2hhdGV2ZXIgdXBzdHJlYW0gaXMKLQkgIHNlbmRpbmcgYnVmZmVycy4gU28gc2V0dGluZyBwcm94eSBjYXBzIGRvZXNuJ3QgbWFrZSBzZW5zZSBhcyB0aGUKLQkgIHVwc3RyZWFtIGRvbid0IGhhdmUgdG8gaGF2ZSBjb21wYXRpYmxlIGNhcHMsIHRodXMgcmVzdWx0aW5nIGluIGFuIGVtcHR5Ci0JICBjYXBzIHNldCBhcyBhIHJlc3VsdCBvZiBhIGNhcHMgcXVlcnkuIEluc3RlYWQgc2V0IGZpeGVkIGNhcHMganVzdAotCSAgYXMgZnVubmVsIGRvZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM4NzIyCi0KLTIwMTQtMTAtMjAgMTE6NTc6MzggKzA1MzAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBjcml0aWNhbCBlcnJvciB3aGVuIGVsZW1lbnQgcHJvcGVydGllcyBzZXQgYXMgbWF4L21pbgotCSAgbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tIGNhbiBiZSBzZXQgZnJvbSByYW5nZSBvZiAtMjE0NzQ4MzY0OCB0byAyMTQ3NDgzNjQ3Ci0JICB3aGVuIGkgbGF1bmNoIHRoZSB2aWRlb2JveCBlbGVtZW50IHdpdGggdGhhdCB2YWx1ZXMsIGl0IGdpdmVzIGEgY3JpdGljYWwgZXJyb3IKLQkgIChnc3QtY2hlY2stMS4wOjI5ODY5KTogR1N0cmVhbWVyLUNSSVRJQ0FMICoqOiBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZV9zdGVwOiBhc3NlcnRpb24gJ3N0YXJ0IDwgZW5kJyBmYWlsZWQKLQkgIFRoaXMgaGFwcGVucyBiZWNhdXNlIG1pbiBjYW5ub3QgYmUgZXF1YWwgdG8gbWF4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczODgzOAotCi0yMDE0LTEwLTE1IDE3OjQ1OjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuaDoKLQkgIFJldmVydCAicnRwOiBhZGQgaDI2NSBSVFAgcGF5bG9hZGVyICsgZGVwYXlsb2FkZXIiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGQwNmJhOTA1MWY5MDRhN2ViNDgyYzA3YTk3YTE4MjcxNjkxNTg2NjMuCi0JICBUaGlzIGJyZWFrcyB0aGUgYnVpbGQsIGFzIGl0IGRlcGVuZHMgb24gcGFyc2VyIEFQSSBpbiAtYmFkLgotCi0yMDE0LTEwLTE1IDE3OjM0OjUwICswMjAwICBKdXJnZW4gU2xvd2FjayA8anVyZ2VuLnNsb3dhY2tAYmFyY28uY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjVwYXkuaDoKLQkgIHJ0cDogYWRkIGgyNjUgUlRQIHBheWxvYWRlciArIGRlcGF5bG9hZGVyCi0KLTIwMTQtMTAtMDUgMjE6MjQ6MjcgKzAyMDAgIFBldGVyIEcuIEJhdW0gPHBldGVyQGRyLWJhdW0ubmV0PgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaDoKLQkgIHdhdmVuYzogU3VwcG9ydCBSRjY0IGZvcm1hdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTE0NQotCi0yMDE0LTEwLTExIDExOjE4OjQyICsxMTAwICBEYXZpZCBTYW5zb21lIDxtZUBkYXZpZHNhbnNvbWUuY29tPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBEb24ndCBjYWxsIGlpcmVxdWFsaXplcidzIHRyYW5zZm9ybV9pcCBpbiBwYXNzdGhyb3VnaCBtb2RlCi0JICBJdCB0cmllcyB0byBtYXAgdGhlIHJlYWQtb25seSBidWZmZXIgd2l0aCBHU1RfTUFQX1JFQURXUklURSBhbmQgY3Jhc2hlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4ODYKLQotMjAxNC0xMC0xMCAxODozMDowNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAb2NyZXRlLmNhPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgcnRwc291cmNlOiBSZW5hbWUgc2VxbnVtLWJhc2UgdG8gc2VxbnVtLW9mZnNldCBpbiBjYXBzCi0JICBUaGlzIHdhcyBtb2RpZmllZCBiYWNrIGluIDEuMCBpbiBHc3RSdHBCYXNlUGF5bG9hZAotCi0yMDE0LTEwLTEwIDE4OjExOjE5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBvY3JldGUuY2E+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2R0bWYuYzoKLQkgIHJ0cGR0bWZzcmM6IGNsb2NrLWJhc2UgYW5kIHNlcW51bS1iYXNlIC0+IHRpbWVzdGFtcC1vZmZzZXQgYW5kIHNlcW51bS1vZmZzZXQKLQkgIFRoZXNlIHdlcmUgcmVuYW1lZCBpbiBHc3RSVFBCYXNlUGF5bG9hZCBpbiAxLjAKLQotMjAxNC0xMC0xMCAxNzozMDoyNCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAb2NyZXRlLmNhPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmM6Ci0JICBydHBtdXg6IGNsb2NrLWJhc2UgYW5kIHNlcW51bS1iYXNlIC0+IHRpbWVzdGFtcC1vZmZzZXQgYW5kIHNlcW51bS1vZmZzZXQKLQkgIFRoZXNlIHdlcmUgcmVuYW1lZCBpbiBHc3RSVFBCYXNlUGF5bG9hZCBpbiAxLjAKLQotMjAxNC0xMC0wNiAxNDoyMzoyMiArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5iZ0BzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dvb20yazEvZmlsdGVycy5jOgotCSAgZ29vbTJrMTogcmVtb3ZpbmcgYmxvY2sgb2YgY29kZSB0aGF0IGRvZXMgbm90aGluZwotCSAgVGhlIGxvb3AgaW4gem9vbUZpbHRlclNldFJlc29sdXRpb24gaXMgbWVhbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZXMgaW4gdGhlCi0JICB6Zi0+ZmlyZWRlY1tdIGFycmF5LiBFYWNoIGl0ZXJhdGlvbiB3cml0ZXMgdGhlIHZhbHVlIG9mIGRlY2Mgb250byB0aGUgYXJyeWEsCi0JICBidXQgbm8gY29uZGl0aW9ucyB0aGF0IGNoYW5nZSB0aGUgdmFsdWUgb2YgZGVjYyBhcmUgZXZlciBtZXQgYW5kIHRoZSBhcnJheSBpcwotCSAgZmlsbGVkIHdpdGggemVybyBmb3IgZWFjaCBlbGVtZW50LiBXaGljaCBpcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUKLQkgIGFycmF5IGJlZm9yZSB0aGUgbG9vcCBiZWdpbnMuCi0JICBUaGUgbG9vcCBkb2VzIG5vdGhpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MzUzCi0KLTIwMTQtMTAtMDQgMTc6MTc6MTMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBkb24ndCBsb2cgYWxsIGNsb2NrX3JhdGUgY2hhbmdlcyBhcyB3YXJuaW5ncy4KLQkgIFdlIG5ldmVyIGluaXRpYWxpemUgY2xvY2tfcmF0ZSBleHBsaWNpdGx5LCB0aGVyZWZvcmUgaXQgaXMgMCBieSBkZWZhdWx0LiBUaGUKLQkgIHBhcmFtZXRlciBpcyBhIHVpbnQzMiBhbmQgdGhlIG9ubHkgY2FsbGVyIGVuc3VyZSB0aGF0IGl0IGlzID4wLCB0aGVyZWZvcmUgaXQKLQkgIHdvbid0IGJlY29tZSAtMSBldmVyLgotCi0yMDE0LTEwLTAyIDE0OjI2OjA4ICswNTMwICBOaXJiaGVlayBDaGF1aGFuIDxuaXJiaGVla0BjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSAgc291cGh0dHBjbGllbnRzaW5rOiBGaXggbGlmZXRpbWUgb2Ygc3RyZWFtIGhlYWRlcnMgYW5kIHF1ZXVlZCBidWZmZXJzCi0JICBTdHJlYW0gaGVhZGVycyBhcmUgdXBkYXRlZCB3aGVuZXZlciA6OnNldF9jYXBzIGlzIGNhbGxlZCwgc28gd2UgY2FuJ3QgYXNzdW1lCi0JICB0aGV5J2xsIGJlIHZhbGlkIGJlZm9yZSB0aGUgbWVzc2FnZSBib2R5IGlzIHdyaXR0ZW4gb3V0LiBXZSAqY2FuKiBhc3N1bWUgdGhhdAotCSAgZm9yIHF1ZXVlZCBidWZmZXJzLCBidXQgU09VUF9NRU1PUllfU1RBVElDIGlzIHN0aWxsIHdyb25nIGZvciB0aG9zZS4KLQkgIEFsc28sIGFkZCBzb21lIGRlYnVnIGxvZ2dpbmcgZm9yIHN0cmVhbSBoZWFkZXIgaW50ZXJhY3Rpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzc3MQotCi0yMDE0LTEwLTAyIDAzOjI2OjIyICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogZml4IG1lbW9yeSBsZWFrIHdoZW4gcHJlcGVuZGluZyBBRFRTIGhlYWRlcnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc3NjEKLQotMjAxNC0wOS0yMyAxMDo0ODowOSArMDIwMCAgQW50b25pbyBPc3BpdGUgPGFvMkBhbzIuaXQ+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaDoKLQkgIGludGVybGVhdmU6IGludGVybGVhdmUgc2FtcGxlcyBmb2xsb3dpbmcgdGhlIERlZmF1bHQgQ2hhbm5lbCBPcmRlcmluZwotCSAgSW4gb3JkZXIgdG8gaGF2ZSBhIGZ1bGwgbWFwcGluZyBiZXR3ZWVuIGNoYW5uZWwgcG9zaXRpb25zIGluIHRoZSBhdWRpbwotCSAgc3RyZWFtIGFuZCBsb3Vkc3BlYWtlciBwb3NpdGlvbnMsIHRoZSBjaGFubmVsLW1hc2sgYWxvbmUgaXMgbm90IGVub3VnaDoKLQkgIHRoZSBjaGFubmVscyBtdXN0IGJlIGludGVybGVhdmVkIGZvbGxvd2luZyBzb21lIERlZmF1bHQgQ2hhbm5lbCBPcmRlcmluZwotCSAgYXMgbWVudGlvbmVkIGluIHRoZSBXQVZFRk9STUFURVhURU5TSUJMRVsxXSBzcGVjaWZpY2F0aW9uLgotCSAgQXMgYSBEZWZhdWx0IENoYW5uZWwgT3JkZXJpbmcgdXNlIHRoZSBvbmUgaW1wbGllZCBieQotCSAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gd2hpY2ggZm9sbG93cyB0aGUgb3JkZXJpbmcgZGVmaW5lZCBpbiBTTVBURQotCSAgMjAzNi0yLTIwMDhbMl0uCi0JICBOT1RFIHRoYXQgdGhlIHJlbGF0aXZlIG9yZGVyIGluIHRoZSBUb3AgTGF5ZXIgaXMgbm90IGV4YWN0bHkgdGhlIHNhbWUgYXMKLQkgIHRoZSBvbmUgZnJvbSB0aGUgV0FWRUZPUk1BVEVYVEVOU0lCTEVbMV0gc3BlY2lmaWNhdGlvbjsgbGV0J3MgaG9wZSB1c2VycwotCSAgdXNpbmcgc28gbWF5IGNoYW5uZWxzIGFyZSBhbHJlYWR5IGF3YXJlIG9mIHN1Y2ggZGlzY3JlcGFuY2llcy4KLQkgIFsxXSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9oYXJkd2FyZS9kbjY1MzMwOCUyOHY9dnMuODUlMjkuYXNweAotCSAgWzJdIGh0dHA6Ly93d3cuaXR1LmludC9kbXNfcHViL2l0dS1yL29wYi9yZXAvUi1SRVAtQlMuMjE1OS0yLTIwMTEtUERGLUUucGRmCi0JICBGaXhlczogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzEyNwotCi0yMDE0LTEwLTAyIDEwOjEwOjExICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBTZW5kIENBUFMgZXZlbnQgYWZ0ZXIgdGhlIHBhZCB3YXMgYWN0aXZhdGVkCi0JICBPdGhlcndpc2UgdGhlIENBUFMgZXZlbnQgd2lsbCBiZSBkcm9wcGVkIGFuZCB3ZSBuZXZlciBjb25maWd1cmUgYW55IGNhcHMgYXQKLQkgIGFsbCwgbGVhZGluZyB0byB3ZWlyZCBiZWhhdmlvdXIgaW4gbWFueSBzaXR1YXRpb25zLiBFc3BlY2lhbGx5IGhlYWRlcgotCSAgcmV3cml0aW5nIGlzIG5vdCBnb2luZyB0byB3b3JrIGlmIGEgY2Fwc2ZpbHRlciBpcyBhZnRlciB3YXZlbmMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3NzM1Ci0KLTIwMTQtMTAtMDEgMjM6MTI6MzAgKzA1MzAgIE5pcmJoZWVrIENoYXVoYW4gPG5pcmJoZWVrQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JICBzb3VwaHR0cGNsaWVudHNpbms6IEFkZCBzb21lIG1vcmUgdXNlZnVsIGRlYnVnIGxvZ2dpbmcKLQotMjAxNC0xMC0wMSAyMzowNTowMyArMDUzMCAgTmlyYmhlZWsgQ2hhdWhhbiA8bmlyYmhlZWtAY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXBodHRwY2xpZW50c2luazogRnJlZSBxdWV1ZWQgYnVmZmVycyBpbiA6OnJlc2V0Ci0JICA6OnJlbmRlciBzZXRzIGEgbmV3IGNhbGxiYWNrIGZvciB3cml0aW5nIG91dCBuZXcgYnVmZmVycyBvbmx5IGlmIHRoZXJlIGFyZW4ndAotCSAgYWxyZWFkeSBidWZmZXJzIHF1ZXVlZCBmb3Igd3JpdGluZyB3aXRoIGEgcHJldmlvdXNseS1zY2hlZHVsZWQgY2FsbGJhY2suCi0JICBIb3dldmVyLCBpZiB0aGUgcHJldmlvdXNseS1zY2hlZHVsZWQgY2FsbGJhY2sgaXMgaW50ZXJydXB0ZWQgYnkgYSBzdGF0ZSBjaGFuZ2UKLQkgIChlaXRoZXIgbWFudWFsbHkgb3IgZHVlIHRvIGFuIGVycm9yKSBhbmQgdGhlcmUgYXJlIHN0aWxsIGJ1ZmZlcnMgaW4gdGhlIHF1ZXVlLAotCSAgcmVzdGFydGluZyB0aGUgcGlwZWxpbmUgd2lsbCByZXN1bHQgaW4gYnVmZmVycyBiZWluZyBxdWV1ZWQgZm9yZXZlciwgYW5kIG5vCi0JICBjYWxsYmFja3Mgd2lsbCBldmVyIGJlIHNjaGVkdWxlZCwgYW5kIG5vIGJ1ZmZlcnMgd2lsbCBiZSB3cml0dGVuIG91dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc3MzkKLQotMjAxNC0xMC0wMSAxNzoyOToyOSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IEFjdHVhbGx5IHVzZSB0aGUgY29ycmVjdCBHc3RWaWRlb0luZm8gZm9yIGNvbnZlcnNpb24KLQotMjAxNC0xMC0wMSAxNzoyNDo1OSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IFJldmVydCB0aGUgbGFzdCBjb21taXQgYW5kIGhhbmRsZSByZXNvbHV0aW9ucyBkaWZmZXJlbmNlcyBwcm9wZXJseQotCSAgVGhpcyBpcyBhYm91dCBjb252ZXJ0aW5nIHRoZSBmb3JtYXQsIG5vdCBhYm91dCBjb252ZXJ0aW5nIGFueSB3aWR0aHMgYW5kCi0JICBoZWlnaHRzLiBTdWJjbGFzc2VzIGFyZSBleHBlY3RlZCB0byBoYW5kbGVyIGRpZmZlcmVudCByZXNvbHV0aW9ucyB0aGVtc2VsdmVzLAotCSAgbGlrZSB0aGUgdmlkZW9taXhlcnMgYWxyZWFkeSBkbyBwcm9wZXJseS4KLQotMjAxNC0xMC0wMSAxNzoxMjo1OSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IEdzdFZpZGVvQ29udmVydGVyIGN1cnJlbnRseSBjYW4ndCByZXNjYWxlIGFuZCB3aWxsIGFzc2VydAotCSAgTGVhZHMgdG8gdWdseSBhc3NlcnRpb25zIGluc3RlYWQgb2YgcHJvcGVybHkgZXJyb3Jpbmcgb3V0OgotCSAgQ1JJVElDQUwgKio6IGdzdF92aWRlb19jb252ZXJ0ZXJfbmV3OiBhc3NlcnRpb24gJ2luX2luZm8tPndpZHRoID09IG91dF9pbmZvLT53aWR0aCcgZmFpbGVkCi0KLTIwMTQtMDktMzAgMTE6MzU6MTIgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnA4ZW5jL3ZwOWVuYzogUHJvdGVjdCB0aGUgZW5jb2RlciB3aXRoIGEgbXV0ZXggaW4gYWxsIHNpdHVhdGlvbnMKLQotMjAxNC0wOS0zMCAxMTozMTo0MyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDllbmMuYzoKLQkgIHZwOWVuYzogQWxsb3cgY2FwcyByZW5lZ290aWF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2MzI5Ci0KLTIwMTQtMDktMzAgMTE6Mjg6MzkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IGZpbmlzaCgpIGFuZCBkcmFpbigpIHNob3VsZCByZXR1cm4gYSBHc3RGbG93UmV0dXJuCi0KLTIwMTQtMDMtMTQgMTI6NTk6MDIgKzAxMDAgIEpvc2UgQW50b25pbyBTYW50b3MgQ2FkZW5hcyA8c2FudG9zY2FkZW5hc0BnbWFpbC5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IEFsbG93IGNhcHMgcmVuZWdvdGlhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjMyOQotCi0yMDE0LTA5LTI5IDExOjQ5OjQ1ICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBzZXQgY29sb3JzcGFjZSBmb3Igb3V0cHV0IGRldmljZXMKLQkgIFdoZW4gdGhlIHY0bDIgZGV2aWNlIGlzIGFuIG91dHB1dCBkZXZpY2UsIHRoZSBhcHBsaWNhdGlvbiBzaGFsbCBzZXQgdGhlCi0JICBjb2xvcnNwYWNlLiBTbyBtYXAgR1N0cmVhbWVyIGNvbG9yaW1ldHJ5IGluZm8gdG8gVjRMMiBjb2xvcnNwYWNlIGFuZCBzZXQKLQkgIG9uIHNldF9mb3JtYXQuIEluIGNhc2Ugd2UgaGF2ZSBubyBjb2xvcmltZXRyeSBpbmZvcm1hdGlvbiwgd2UgdHJ5IHRvCi0JICBndWVzcyBpdCBhY2NvcmRpbmcgdG8gcGl4ZWwgZm9ybWF0IGFuZCB2aWRlbyBzaXplLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzU3OQotCi0yMDE0LTA5LTI5IDIyOjQ4OjE2ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGFjY29zdGVkLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZTogQWRkIHNvbWUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aHJlYWRpbmcgYW5kIHN5bmNocm9uaXNhdGlvbgotCSAgVGhpcyBnaXZlcyBhIHF1aWNrIGludHJvZHVjdGlvbiB0byBob3cgdGhlIHB1bHNlc2luay9wdWxzZXNyYyBjb2RlCi0JICBpbnRlcmFjdHMgd2l0aCB0aGUgcGFfdGhyZWFkZWRfbWFpbmxvb3AgdGhhdCB3ZSBzdGFydCB1cCB0byBjb21tdW5pY2F0ZQotCSAgd2l0aCB0aGUgc2VydmVyLgotCi0yMDE0LTA5LTI5IDIwOjE4OjA4ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuQGFjY29zdGVkLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBNYWtlIGVtaXR0aW5nIHN0cmVhbSBzdGF0dXMgbWVzc2FnZXMgc3luY2hyb25vdXMKLQkgIFRoZSBzdHJlYW0gc3RhdHVzIG1lc3NhZ2VzIGFyZSBlbWl0dGVkIGluIHRoZSBQQSBtYWlubG9vcCB0aHJlYWQsIHdoaWNoCi0JICBtZWFucyB0aGUgbWFpbmxvb3AgbG9jayBpcyB0YWtlbiwgZm9sbG93ZWQgYnkgdGhlIEdzdCBvYmplY3QgbG9jayAoYnkKLQkgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSgpKS4gSW4gYWxsIG90aGVyIGxvY2F0aW9ucywgdGhlIG9yZGVyIG9mCi0JICBsb2NraW5nIGlzIHJldmVyc2VkICh0aGlzIGlzIHVuYXZvaWRhYmxlIGluIGEgYnVuY2ggb2YgY2FzZXMgd2hlcmUgdGhlCi0JICBvYmplY3QgbG9jayBpcyB0YWtlbiBieSBHc3RCYXNlU2luayBvciBHc3RBdWRpb0Jhc2VTaW5rLCBhbmQgdGhlbiB3ZSBnZXQKLQkgIGNvbnRyb2wgdG8gdGFrZSB0aGUgbWFpbmxvb3AgbG9jaykuCi0JICBUaGUgb25seSB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRlZmVyIGNhbGxiYWNrIGZvciBzdHJlYW0gc3RhdHVzCi0JICBtZXNzYWdlcyBkb2Vzbid0IGRlYWRsb2NrIGlzIHRvIGVpdGhlciBzdG9wIHBvc3RpbmcgdGhvc2UgbWVzc2FnZXMsIG9yCi0JICBtYWtlIHN1cmUgdGhhdCB0aGUgbWVzc2FnZSBlbWlzc2lvbiBpcyBjb21wbGV0ZWQgYmVmb3JlIHdlIHByb2NlZWQgdG8KLQkgIGFueSBwb2ludCB0aGF0IG1pZ2h0IHRha2UgdGhlIG9iamVjdCBsb2NrIGJlZm9yZSB0aGUgbWFpbmxvb3AgbG9jawotCSAgKHdoaWNoIGlzIHdoYXQgd2UgZG8gYWZ0ZXIgdGhpcyBwYXRjaCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDcxCi0KLTIwMTQtMDktMTYgMTI6MTI6NDkgKzAyMDAgIEFudG9uaW8gT3NwaXRlIDxhbzJAYW8yLml0PgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBwcmludCBjaGFubmVsIG1hc2tzIGluIGhleGFkZWNpbWFsCi0KLTIwMTQtMDktMjcgMTY6MDE6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vwcm92aWRlci5oOgotCSAgdjRsMjogcmVtb3ZlIHJlZHVuZGFudCBzdHJ1Y3QgZGVjbGFyYXRpb24KLQotMjAxNC0wOS0yNiAxMzo0NjoxNiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRml4IGNvbXBpbGVyIHdhcm5pbmdzCi0JICBnc3RydHNwc3JjLmM6NzkzOToxMTogZXJyb3I6IGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBlbnVtZXJhdGlvbiB0eXBlICdHc3RTRFBSZXN1bHQnIHRvIGRpZmZlcmVudCBlbnVtZXJhdGlvbiB0eXBlCi0JICAnR3N0UlRTUFJlc3VsdCcgWy1XZXJyb3IsLVdlbnVtLWNvbnZlcnNpb25dCi0JICByZXMgPSBnc3Rfc2RwX21lc3NhZ2VfbmV3ICgmc2RwKTsKLQkgIH4gXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQkgIGdzdHJ0c3BzcmMuYzo3OTQ0OjExOiBlcnJvcjogaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGVudW1lcmF0aW9uIHR5cGUgJ0dzdFNEUFJlc3VsdCcgdG8gZGlmZmVyZW50IGVudW1lcmF0aW9uIHR5cGUKLQkgICdHc3RSVFNQUmVzdWx0JyBbLVdlcnJvciwtV2VudW0tY29udmVyc2lvbl0KLQkgIHJlcyA9IGdzdF9zZHBfbWVzc2FnZV9wYXJzZV91cmkgKHVyaSwgc2RwKTsKLQkgIH4gXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLTIwMTQtMDktMjUgMTU6MDE6MTQgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG1ha2UgZGVtdXhlciByZXVzYWJsZQotCSAgUmVtb3ZlIHBhZHMgZnJvbSBmbG93IGNvbWJpbmVyIGFuZCByZXNldCBsYXN0Ci0JICBmbG93IHJldHVybiB0byBGTE9XX09LIGJ5IHJlc2V0dGluZyB0aGUgZmxvdyBjb21iaW5lci4KLQkgIFRoaXMgcHJldmVudHMgRkxPV19GTFVTSElORyB3aGVuIHRyeWluZyB0byByZS11c2UgdGhlCi0JICBkZW11eGVyIGFmdGVyIHNldHRpbmcgaXQgYmFjayB0byBOVUxML1JFQURZIHN0YXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzM1OQotCi0yMDE0LTA5LTI0IDE2OjQ2OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9nc3RjbXMuYzoKLQkqIGdzdC92aWRlb21peGVyL2dzdGNtcy5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9jb252ZXJ0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb2NvbnZlcnQuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMnBhZC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXJvcmMub3JjOgotCSAgdmlkZW9taXhlcjogdXNlIHZpZGVvIGxpYnJhcnkgY29kZSBpbnN0ZWFkIG9mIGNvcHkKLQotMjAxNC0wOS0xOCAxNjozOToxOSArMDUzMCAgU2FuamF5IE5NIDxzYW5qYXkubm1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogQWRkZWQgaW5kZXggY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSBpbmRleAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjg3OAotCi0yMDE0LTA5LTIzIDIzOjMzOjM3ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogRG8gbm90IGluZmVyIERUUyBvbiBidWZmZXJzIGZyb20gc3BhcnNlIHN0cmVhbXMuCi0JICBEVFMgZGVsdGEgaXMgdXNlZCB0byBjYWxjdWxhdGUgc2FtcGxlIGR1cmF0aW9uLiBJZiBidWZmZXIgaGFzIG1pc3NpbmcgRFRTLCB3ZSB0YWtlIGVpdGhlciBzZWdtZW50IHN0YXJ0IG9yIHByZXZpb3VzIGJ1ZmZlciBlbmQgdGltZSwgd2hpY2hldmVyIGlzIGxhdGVyLgotCSAgVGhpcyBtdXN0IG9ubHkgYmUgZG9uZSBmb3Igbm9uIHNwYXJzZSBzdHJlYW1zLCBzcGFyc2Ugc3RyZWFtcyBjYW4gaGF2ZSBnYXBzIGJldHdlZW4gYnVmZmVycyAod2hpY2ggaXMgaGFuZGxlZCBsYXRlciBieSBhZGRpbmcgZXh0cmEgZW1wdHkgYnVmZmVyIHdpdGggZHVyYXRpb24gdGhhdCBmaWxscyB0aGUgZ2FwKQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzA5NQotCi0yMDE0LTA5LTE4IDE3OjA4OjM3ICswNTMwICBTYW5qYXkgTk0gPHNhbmpheS5ubUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2dvb20vaWZzLmM6Ci0JICBnb29tOiBDbGFyaWZpZWQgcHJlY2VkZW5jZSBiZXR3ZWVuICUgYW5kID8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4ODcKLQotMjAxNC0wOS0xOCAxNzo1OTozMSArMDUzMCAgU2FuamF5IE5NIDxzYW5qYXkubm1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3A6IGNsYXJpZnkgZXhwcmVzc2lvbiBzbyBvcGVyYXRvciBwcmVjZWRlbmNlIGlzIGNsZWFyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2OTAzCi0KLTIwMTQtMDktMTggMTY6MDQ6MDMgKzA1MzAgIFNhbmpheSBOTSA8c2FuamF5Lm5tQHNhbXN1bmcuY29tPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgTWlzY2VsbGFuZW91cyBtaW5vciBjbGVhbnVwcwotCSAgRml4IHJlZHVuZGFudCB2YXJpYWJsZXMgYW5kIGFzc2lnbm1lbnRzLAotCSAgYW5kIHVucmVhY2hhYmxlIGJyZWFrcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4NzUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4NzYKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4NzkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4ODAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4ODEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4ODgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4OTAKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4OTIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4OTMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4OTQKLQotMjAxNC0wOS0yNCAwMDoxMjoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogcmVtb3ZlIGR1cGxpY2F0ZSBhc3NpZ25tZW50cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjg5NwotCi0yMDE0LTA5LTIzIDIyOjU1OjQ4ICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBPbmx5IGNhbGN1bGF0ZSB3aXRoIGR1cmF0aW9ucyAhPSAtMQotCi0yMDE0LTA5LTIzIDE5OjA4OjQ4ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogY29sbGVjdCBwYWQgZm9yIHNwYXJzZSBzdHJlYW0gc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBsb2NrIHNldCB0byBmYWxzZQotCSAgQXZvaWRzIHdhaXRpbmcgZm9yIGJ1ZmZlcnMgZnJvbSBzcGFyc2Ugc3RyZWFtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNzA5NQotCi0yMDE0LTA5LTIzIDE5OjA3OjI1ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZml4IHN1YnRpdGxlIGJ1ZmZlciBkdXJhdGlvbiBhbmQgc3RyaXAgbnVsbCB0ZXJtaW5hdGlvbgotCSAgU3RyaXAgdGhlIFwwIG9mZiB0aGUgc3VidGl0bGUgYXMgd2UgYWxyZWFkeSBrbm93IHRoZSBzaXplIGFuZCBhbHNvIHJlbWVtYmVyCi0JICB0byBzZXQgdGhlIGR1cmF0aW9uIGFzIGJ1ZmZlciBjb3B5aW5nIGRvZXNuJ3QgZG8gaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM3MDk1Ci0KLTIwMTQtMDktMjMgMTk6MDY6MTggKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkgIHF0bXV4OiBtb3ZlIHN1YnRpdGxlIGxheWVyIGFib3ZlIHZpZGVvIGFuZCBzZXQgYWx0ZXJuYXRlIGdyb3VwCi0JICBsYXllciAtMSBpcyBhYm92ZSB2aWRlbywgdGhhdCBpcyAwCi0JICBBbmQgaGF2aW5nIGFsbCBzdWJ0aXRsZXMgaW4gYWx0ZXJuYXRlIGdyb3VwIDIgbWVhbnMgdGhhdCBvbmx5IG9uZQotCSAgc2hvdWxkIGJlIHNlbGVjdGVkIGF0IGEgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcwOTUKLQotMjAxNC0wOS0yMyAwOTo0NzozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIGNoZWNrL3NvdXA6IFRlbXBvcmFyaWx5IGRpc2FibGUgR19FTkFCTEVfRElBR05PU1RJQwotCSAgVGhlIFNPVVBfU0VSVkVSX1BPUlQgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiByZWNlbnQgbGlic291cAotCSAgdmVyc2lvbnMuCi0KLTIwMTQtMDktMjMgMDk6NDM6MDUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICBjaGVjay9zb3VwOiBEZWZpbmUgbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVkCi0JICBUbyBhdm9pZCBkZXByZWNhdGlvbiB3YXJuaW5ncwotCi0yMDE0LTA5LTE5IDE5OjE0OjI4ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEhhbmRsZSBtcDRhIHdpdGhvdXQgRVNEUyBhdG9tCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2OTg2Ci0KLTIwMTQtMDktMjIgMTY6MTU6MjcgKzAyMDAgIExpbnVzIFN2ZW5zc29uIDxsaW51c3NuQGF4aXMuY29tPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBGaXggYnVpbGQgcHJvYmxlbSB3aXRob3V0IFhGSVhFUwotCi0yMDE0LTA5LTE5IDE0OjM0OjEzICswNTMwICBTYW5qYXkgTk0gPHNhbmpheS5ubUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JICBkdG1mOiBSZW1vdmVkIHVudXNlZCBzdHJ1Y3R1cmUgbWVtYmVycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjg4MwotCi0yMDE0LTA5LTExIDEzOjQ4OjQ0IC0wMzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkgIGlzb21wNDogZml4IHdyb25nIERBUiBjYWxjdWxhdGlvbiBmb3IgUEFSIDw9IDEKLQkgIENJRCAjMTIyNjQ1MgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM5NgotCi0yMDE0LTA5LTE4IDE2OjU5OjUyICswNTMwICBTYW5qYXkgTk0gPHNhbmpheS5ubUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2OiBSZW1vdmVkIHVucmVhY2hhYmxlIGJyZWFrIHN0YXRlbWVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4ODQKLQotMjAxNC0wOS0xNyAxNjozNzoxMSArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGRvIG5vdCBsZWFrIGVuY3NpbmsgcGFkIGluIGVycm9yIGNhc2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4MDcKLQotMjAxNC0wOS0xNyAxNjoyMzoyMSArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgbXVsdGlwYXJ0ZGVtdXg6IGRvIG5vdCBsZWFrIG5ldyBzdHJlYW0gZXZlbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY4MDUKLQotMjAxNC0wOS0xNSAwOTowODoxOCArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSAgeTRtZW5jOiBwb3J0IHk0bWVuYyB0byB1c2UgR3N0VmlkZW9FbmNvZGVyIGJhc2UgY2xhc3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzUwODUKLQotMjAxNC0wOS0xNyAxMzo1NToxOCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmM6Ci0JICBvc3hhdWRpbzogT1NTdGF0dXMgaXMgbm90IGEgZm91cmNjLCBzbyBkb24ndCBwcmludCBpdCBhcyBvbmUuLi4KLQotMjAxNC0wOS0xNiAxNDoyNjowOCArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZG8gbm90IGxlYWsgdWlkIGFmdGVyIHBhcnNpbmcgVE9DIGV2ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NzM5Ci0KLTIwMTQtMDktMTYgMjI6NDc6MTMgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JICBydHB2cmF3ZGVwYXk6IERlY2xhcmUgc29tZSBtb3JlIHJlcXVpcmVkIGNhcHMgZmllbGRzIGluIHRoZSBzaW5rIHRlbXBsYXRlIGNhcHMKLQkgIE5vdyBvbmx5IG1pc3NpbmcgYXJlIHdpZHRoIGFuZCBoZWlnaHQsIHdoaWNoIGFyZSBleHByZXNzZWQgYXMgc3RyaW5ncwotCSAgZm9yIFJUUC4uLiBzbyB3ZSBjYW4ndCBwdXQgdGhlbSBpbnRvIHRoZSB0ZW1wbGF0ZSBjYXBzLgotCi0yMDE0LTA5LTE2IDE2OjQ2OjA3ICswNTMwICBWaW5lZXRoIFQgTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuaDoKLQkgIGdka3BpeGJ1ZmRlYzogbW9kaWZ5IHdyb25nIHBhY2tldGl6ZWQgbW9kZSBsb2dpYwotCSAgcGFja2V0aXplZCBtb2RlIGlzIGJlaW5nIHNldCB3aGVuIGZyYW1lcmF0ZSBpcyBiZWluZyBzZXQKLQkgIHdoaWNoIGlzIG5vdCBjb3JyZWN0LiBDaGFuZ2luZyB0aGUgc2FtZSBieSBjaGVja2luZyB0aGUKLQkgIGlucHV0IHNlZ2VtZW50IGZvcm1hdC4gSWYgaW5wdXQgc2VnbWVudCBpcyBpbiBUSU1FIGl0IGlzCi0JICBQYWNrZXRpemVkLCBhbmQgaWYgaXQgaXMgaW4gQllURVMgaXQgaXMgbm90LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjI1MgotCi0yMDE0LTA5LTE2IDExOjI2OjIyICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGFuZCB1c2UgY29ycmVjdCBkZWNvZGVyIHZhcmlhYmxlIG5hbWUKLQotMjAxNC0wOS0xNiAxMToyNTo0MiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCi0yMDE0LTA5LTE2IDEzOjI0OjE1ICswNTMwICBWaW5lZXRoIFQgTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2dkZWM6IG1vZGlmeSB3cm9uZyBwYWNrZXRpemVkIG1vZGUgbG9naWMKLQkgIHBhY2tldGl6ZWQgbW9kZSBpcyBiZWluZyBzZXQgd2hlbiBmcmFtZXJhdGUgaXMgYmVpbmcgc2V0Ci0JICB3aGljaCBpcyBub3QgY29ycmVjdC4gQ2hhbmdpbmcgdGhlIHNhbWUgYnkgY2hlY2tpbmcgdGhlCi0JICBpbnB1dCBzZWdlbWVudCBmb3JtYXQuIElmIGlucHV0IHNlZ21lbnQgaXMgaW4gVElNRSBpdCBpcwotCSAgUGFja2V0aXplZCwgYW5kIGlmIGl0IGlzIGluIEJZVEVTIGl0IGlzIG5vdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYyNTIKLQotMjAxNC0wOS0xNiAxMzoyMzoxNiArMDUzMCAgVmluZWV0aCBUIE0gPHZpbmVldGgudG1Ac2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IG1vZGlmeSB3cm9uZyBwYWNrZXRpemVkIG1vZGUgbG9naWMKLQkgIHBhY2tldGl6ZWQgbW9kZSBpcyBiZWluZyBzZXQgd2hlbiBmcmFtZXJhdGUgaXMgYmVpbmcgc2V0Ci0JICB3aGljaCBpcyBub3QgY29ycmVjdC4gQ2hhbmdpbmcgdGhlIHNhbWUgYnkgY2hlY2tpbmcgdGhlCi0JICBpbnB1dCBzZWdlbWVudCBmb3JtYXQuIElmIGlucHV0IHNlZ21lbnQgaXMgaW4gVElNRSBpdCBpcwotCSAgUGFja2V0aXplZCwgYW5kIGlmIGl0IGlzIGluIEJZVEVTIGl0IGlzIG5vdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYyNTIKLQotMjAxNC0wOS0xNSAxNDozOTo0MSArMDIwMCAgQW50b25pbyBPc3BpdGUgPGFvMkBhbzIuaXQ+Ci0KLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5oOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuaDoKLQkgIHhpbWFnZXNyYzogUmVtb3ZlIHVudXNlZCBzY3JlZW4tbnVtIHByb3BlcnR5Ci0JICBUaGUgc2NyZWVuIG51bWJlciBjYW4gYmUgc3RpbGwgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlIGRpc3BsYXktbmFtZQotCSAgcHJvcGVydHkgKGUuZy4gZm9yIHNjcmVlbiAxIG9mIGRpc3BsYXkgMCB1c2UgZGlzcGxheS1uYW1lPSI6MC4xIikuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MTIyCi0KLTIwMTQtMDktMDQgMTY6MTA6NTEgKzAyMDAgIEFudG9uaW8gT3NwaXRlIDxhbzJAYW8yLml0PgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBEcmF3IHRoZSBjdXJzb3Igb25seSB3aGVuIGl0IGlzIGFjdGl2ZSBpbiB0aGUgY2FwdHVyaW5nIHJlZ2lvbgotCSAgVXNlIFhRdWVyeVBvaW50ZXIgdG8gY2hlY2sgdGhhdCB0aGUgcG9pbnRlciBpcyBhY3R1YWxseSBhY3RpdmUgaW5zaWRlCi0JICB0aGUgY2FwdHVyaW5nIHJlZ2lvbi4KLQkgIFRoaXMgcHJldmVudHMgZHJhd2luZyB0aGUgY3Vyc29yIHdoZW4gdGhlIHBvaW50ZXIgaXMgcGFydGlhbGx5IG91dHNpZGUKLQkgIG9mIHRoZSBjYXB0dXJlZCByZWdpb24gYnV0IG5vdCBhY3RpdmUgaW5zaWRlIHRoZSByZWdpb247IGluIHBhcnRpY3VsYXIKLQkgIHRoaXMgYXZvaWRzIGRyYXdpbmcgdGhlICJ3aW5kb3cgcmVzaXplIiBjdXJzb3Igc2hhcGVzIHRvIHRoZSBjYXB0dXJlZAotCSAgaW1hZ2Ugd2hlbiB0aGUgbW91c2UgcG9pbnRlciBjcm9zc2VzIGEgd2luZG93IGJvcmRlci4KLQkgIE5PVEUgdGhhdCB0aGlzIGlzIG5vdCBvbmx5IGFuIG9wdGltaXphdGlvbiwgdGhpcyBhbHNvIGhhcHBlbiB0byBmaXgKLQkgIGEgc2VyaW91cyBwcm9ibGVtIGluIG11bHRpLXNjcmVlbiBzZXR1cHMuCi0JICBCZWNhdXNlIFhGaXhlcyBnaXZlcyBubyBpbmZvcm1hdGlvbiBvZiB3aGF0IHNjcmVlbiB0aGUgcG9pbnRlciBpcyBvbiwKLQkgIHhpbWFnZXNyYyB3YXMgYWx3YXlzIGRyYXdpbmcgdGhlIGN1cnNvciBvbiB0aGUgY2FwdHVyZWQgc2NyZWVuIGV2ZW4gaWYKLQkgIHRoZSBtb3VzZSBwb2ludGVyIHdhcyBvbiBhbm90aGVyIHNjcmVlbi4KLQkgIEZvciBleGFtcGxlLCB3aGVuIGNhcHR1cmluZyBmcm9tIHNjcmVlbiAxIChpLmUuIGRpc3BsYXktbmFtZT0iOjAuMSIpIHRoZQotCSAgY3Vyc29yIHdhcyBkcmF3biBpbiB0aGUgY2FwdHVyZWQgaW1hZ2UgZXZlbiB3aGVuIHRoZSBtb3VzZSBwb2ludGVyIHdhcwotCSAgYWN0dWFsbHkgb24gc2NyZWVuIDAsIHdoaWNoIGlzIHdyb25nIGFuZCB2aXN1YWxseSBjb25mdXNpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwNjQ2Ci0KLTIwMTQtMDktMDUgMTE6MzM6MzEgKzAyMDAgIEFudG9uaW8gT3NwaXRlIDxhbzJAYW8yLml0PgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBGaXggZHJhd2luZyB0aGUgY3Vyc29yIHdoZW4gaXQgaXMgb3V0c2lkZSB0aGUgY2FwdHVyaW5nIHJlZ2lvbgotCSAgV2hlbiB0aGUgY3Vyc29yIGlzIHBhcnRpYWxseSBvciB0b3RhbGx5IG91dCBvZiB0aGUgY2FwdHVyaW5nIHJlZ2lvbiBvbgotCSAgdGhlIHRvcCBzaWRlIG9yIG9uIHRoZSBsZWZ0IHNpZGUsIGl0IGdldHMgZHJhd24gZnVsbHkgaW5zaWRlIG9mIHRoZQotCSAgcmVnaW9uIHdpdGggaXRzIGNvb3JkaW5hdGVzIHJvdW5kZWQgdXAgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHRvcCBib3JkZXIuCi0JICBUaGlzIGlzIGltbWVkaWF0ZWx5IG5vdGljZWFibGUgd2hlbiB1c2luZyB0aGUgeGlkIHByb3BlcnR5IHRvIGNhcHR1cmUKLQkgIGEgc3BlY2lmaWMgd2luZG93LgotCSAgVG8gZml4IHRoZSBpc3N1ZSwgYWxsb3cgbmVnYXRpdmUgY3ggYW5kIGN4IGNvb3JkaW5hdGVzIHdoZW4gY2hlY2tpbmcgdGhlCi0JICBib3VuZGFyaWVzIGJlZm9yZSBkcmF3aW5nIHRoZSBjdXJzb3IuCi0JICBOT1RFIHRoYXQgdGhlIGJvdW5kYXJpZXMgY2hlY2tpbmcgY2FsY3VsYXRpb25zIHN0aWxsIGFsbG93cyB0aGUgY3Vyc29yCi0JICB0byBiZSBkcmF3biB3aGVuIGl0IGlzIG9ubHkgcGFydGlhbGx5IG91dHNpZGUgb2YgdGhlIGNhcHR1cmluZyByZWdpb24sCi0JICBidXQgdGhpcyBtYWtlcyBzZW5zZSBhbmQgZ2l2ZXMgYSBtb3JlIHBsZWFzaW5nIHZpc3VhbCBiZWhhdmlvdXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwNjQ2Ci0KLTIwMTQtMDktMDUgMDA6MTU6MzAgKzAyMDAgIEFudG9uaW8gT3NwaXRlIDxhbzJAYW8yLml0PgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaDoKLQkgIHhpbWFnZXNyYzogRml4IHRoZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBvZiB0aGUgY3Vyc29yCi0JICBYRml4ZXMgcHJvdmlkZXMgdGhlIGN1cnNvciBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgcm9vdCB3aW5kb3csIHRoaXMKLQkgIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiB1c2luZyB0aGUgeGlkIHByb3BlcnR5IHRvIGNhcHR1cmUKLQkgIGEgc3BlY2lmaWMgd2luZG93LCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlIGN1cnNvciBnZXRzIGRyYXduIGF0IHRoZSB3cm9uZwotCSAgcG9zaXRpb24uCi0JICBJbiBvcmRlciB0byBmaXggdGhpcyBjb25zaWRlciB0aGUgd2luZG93IGxvY2F0aW9uIHdoZW4gY2FsY3VsYXRpbmcgdGhlCi0JICBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDY0NgotCi0yMDE0LTA5LTE1IDE0OjUxOjI0ICswMjAwICBQZXRlciBLb3JzZ2FhcmQgPHBldGVyQGtvcnNnYWFyZC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IE9fQ0xPRVhFQyBuZWVkcyBfR05VX1NPVVJDRQotCSAgU2ltaWxhciB0byA5NGYzZDZmYyAvIGJ6IDcwOTQyMwotCSAgT24gc29tZSBzeXN0ZW1zIChFLkcuIHVDbGliYyBhbmQgb2xkZXIgR2xpYmMgdmVyc2lvbnMpLCBPX0NMT0VYRUMgaXMgb25seQotCSAgZGVmaW5lZCB3aGVuIF9HTlVfU09VUkNFIGlzIHNwZWNpZmllZCwgc28gZG8gc28uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NjcwCi0KLTIwMTQtMDktMTUgMTg6MTE6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmM6Ci0JICBjYXBzc2V0dGVyOiB1cGRhdGUgdG8gMS4wIHRyYW5zZm9ybV9jYXBzIHNlbWF0aWNzCi0JICBJbiAxLjAsIHdlIHBhc3MgdGhlIGNvbXBsZXRlIGNhcHMgdG8gdHJhbnNmb3JtX2NhcHMgdG8gYWxsb3cgZm9yIGJldHRlcgotCSAgb3B0aW1pemF0aW9ucy4gTWFrZSB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHdvcmsgb24gbm9uLXNpbXBsZSBjYXBzCi0JICBpbnN0ZWFkIG9mIGp1c3QgaWdub3JpbmcgdGhlIGNvbmZpZ3VyZWQgZmlsdGVyIGNhcHMuCi0KLTIwMTQtMDktMDggMTQ6MDY6MDAgKzAyMDAgIFBldGVyIEcuIEJhdW0gPHBldGVyQGRyLWJhdW0ubmV0PgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaDoKLQkgIHdhdmVuYzogdXNlIFdBVkVfRk9STUFUX0VYVEVOU0lCTEUgZm9yIG1vcmUgdGhhbiAyIGNoYW5uZWxzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNDQ0Ci0KLTIwMTQtMDktMTIgMTU6MDY6NTAgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IEZpeCBwYXJzaW5nIG9mIGFkdGwgY2h1bmtzCi0JICBXZSBoYXZlIHRvIHNraXAgMTIgYnl0ZXMgb2YgZGF0YSBmb3IgdGhlIGNodW5rLCBhbmQgdGhlIGRhdGEgc2l6ZQotCSAgcGFzc2VkIHRvIHRoZSBzdWItY2h1bmsgcGFyc2luZyBmdW5jdGlvbnMgc2hvdWxkIGhhdmUgNCBieXRlcyBsZXNzCi0JICB0aGFuIHRoZSBkYXRhIHNpemUuCi0JICBBbHNvIHdoZW4gcGFyc2luZyB0aGUgc3ViLWNodW5rcywgY2hlY2sgaWYgd2UgYWN0dWFsbHkgaGF2ZSBlbm91Z2gKLQkgIGRhdGEgdG8gcmVhZCBpbnN0ZWFkIG9mIGp1c3QgY3Jhc2hpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MjY2Ci0KLTIwMTQtMDktMTIgMTA6NTU6MjMgKzA1MzAgIFNhbmpheSBOTSA8c2FuamF5Lm5tQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwOiBpbmNsdWRlIHN0cmluZy5oIGZvciBtZW1jbXAgYW5kIG1lbXNldAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03MzY1MjgKLQotMjAxNC0wOS0xMiAxMzozNjoxOCArMDUzMCAgQW51aiBKYWlzd2FsIDxhbnVqLmphaXN3YWxAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBkb24ndCBiaXR3aXNlIE9SIHRoZSBzYW1lIGZsYWcgdHdpY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLy9zaG93X2J1Zy5jZ2k/aWQ9NzM2NTQzCi0KLTIwMTQtMDktMTIgMTA6MzU6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogaGFuZGxlIHJlYWwgYXVkaW8gMjhfOAotCSAgRml4ZXMgZHVwbGljYXRlIGNoZWNrIGZvciAxNF80LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvL3Nob3dfYnVnLmNnaT9pZD03MzY1NDMKLQotMjAxNC0wOS0xMSAxNDo0NjowOSArMDUzMCAgQW51aiBKYWlzd2FsIDxhbnVqLmphaXN3YWxAc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgbXVsdGlmaWxlc2luazogZG9uJ3QgT1IgdGhlIHNhbWUgZmxhZyB0d2ljZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjQ2MgotCi0yMDE0LTA5LTExIDEyOjUyOjExICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IElmIHRoZSBzZXJ2ZXIgcmVwb3J0cyAiQWNjZXB0LVJhbmdlczogbm9uZSIgZG9uJ3QgdHJ5IHJhbmdlIHJlcXVlc3RzCi0KLTIwMTQtMDktMTAgMDk6NTA6NDUgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogVW5yZWYgcG9vbCBhZnRlciB1c2FnZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjM4NAotCi0yMDE0LTA5LTA5IDE5OjAzOjUwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogRG9uJ3QgcmFuayBpdCBmb3Igbm93Ci0JICBUaGlzIHdpbGwgcHJldmVudCB0aGUgY29udmVydGVyIHRvIGJlIHBpY2tlZCBhdXRvbWF0aWNhbGx5IGluIGNhc2UKLQkgIHNvbWVvbmUgaW1wbGVtZW50IGR5bmFtaWMgY29udmVydGVyIHNlbGVjdGlvbiBzdXBwb3J0LiBJJ2QgbGlrZSB0aGlzCi0JICB0byBiZSByYW5rZWQgb25seSBmb3Iga25vd24gZGV2aWNlLCBhcyBpdCdzIGhhcmQgdG8gYmUgc3VyZSBhIGRldmljZSBpcwotCSAgYSBjb252ZXJ0ZXIgc3VpdGVkIGZvciBnZW5lcmFsIHB1cnBvc2UuIFJlLW5lZ290aWF0aW9uIGlzIGFsc28gbmVlZGVkCi0JICBiZWZvcmUgd2UgY2FuIHJhbmsgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzNjA3Ci0KLTIwMTQtMDktMDUgMDg6Mjk6MjAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JICB2NGwyOiBEZXRlY3QgYmFkIGRyaXZlcnMgdGltZXN0YW1wcwotCSAgRXZlbiB0aG91Z2ggdGhlIFVWQyBkcml2ZXIgZG8gYSBncmVhdCBkZWFsIG9mIGVmZm9ydCB0byBwcmV2ZW50IGJhZAotCSAgdGltZXN0YW1wIHRvIGJlIHNlbnQgdG8gdXNlcnNwYWNlLCB0aGVyZSBzdGlsbCBleGlzdCBVVkMgaGFyZHdhcmUgdGhhdAotCSAgYXJlIHNvIGJ1Z2d5IHRoYXQgdGhlIHRpbWVzdGFtcCBlbmR1cCBuZWFybHkgcmFuZG9tLiBUaGlzIGNvZGUgZGV0ZWN0Ci0JICBhbmQgaWdub3JlIHRpbWVzdGFtcCBmcm9tIHRoZXNlIGRyaXZlcnMsIG1ha2luZyB0aGVzZSBjYW1lcmEgdXNhYmxlLgotCSAgVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgb24gYm90aCBpbnZhbGlkIGFuZCB2YWxpZCBjYW1lcmFzLCBtYWtpbmcgc3VyZSBpdAotCSAgZG9lcyBub3QgdHJpZ2dlciBmb3IgdmFsaWQgY2FtZXJhcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI5MTAKLQotMjAxNC0wOC0yOSAxNzowOTozMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBXb3JrYXJvdW5kIGRyaXZlciB0aGF0IGRvbid0IHN1cHBvcnQgUkVRQlVGUygwKQotCSAgVGhlcmUgaXMgc3RpbGwgYXJvdW5kIDE4IGRyaXZlcnMgbm90IHlldCBwb3J0ZWQgdG8gdmlkZW9idWYyLiBUaGVzZSBkcml2ZXIKLQkgIGRvbid0IHN1cHBvcnQgZnJlZWluZyBidWZmZXRycyB0aHJvdWdoIFJFUUJVRlMoMCkgaGVuY2UgZm9yIHRoZXNlIHRoZQotCSAgbWVtb3J5IHR5cGUgcHJvYmluZyBmYWlscy4gSW4gb3JkZXIgdG8gZ2FpbiBiYWNrIG91ciBwcmV2aW91cyBiZWhhdmlvdXIgaW4KLQkgIHByZXNlbmNlIG9mIHRoZXNlLCB3ZSBpbXBsZW1lbnQgYSB3b3JrYXJvdW5kIHRoYXQgYXNzdW1pbmcgTU1BUCBpcwotCSAgc3VwcG9ydGVkLiBOb3RlIHRoYXQgYW4gYWxsb2NhdG9yIGlzIG9ubHkgY3JlYXRlZCBmb3IgZGV2aWNlIHdpdGgKLQkgIFNUUkVBTUlORyBzdXBwb3J0IGluIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLiBJbiBzdWNoIGNhc2Ugb25lIG9mIE1NQVAsCi0JICBVU0VSUFRSIGFuZCBETUFCVUYgaXMgcmVxdWlyZWQuIFRob3VnaCBETUFCVUYgY2FtZSBhZnRlcndhcmQsIHNvIGlzCi0JICBub3QgYW4gb3B0aW9uIGFuZCBpbiBwcmFjdGljZSBub25lIG9mIHRoZXNlIGRyaXZlcnMgd2lsbCBvbmx5IGRvIFVTRVJQVFIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NjYwCi0JICBBbHNvLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotCi0yMDE0LTA5LTA0IDE1OjExOjQwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMjogTWVyZ2UgbWluX2J1ZmZlcnNfZm9yKiB2YXJpYWJsZSBpbnRvIG9uZQotCSAgUmV1c2UgdGhlIHNhbWUgbWluX2J1ZmZlcnMgdmFyaWFibGUgZm9yIGJvdGggY2FwdHVyZSBhbmQgb3V0cHV0LCB0aGlzCi0JICByZWR1Y2UgdGhlIGxlbmd0aCBvZiBsaW5lcyBhbmQgbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjA3MgotCi0yMDE0LTA5LTA0IDE4OjM1OjQ2ICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMjogc2V0IG1pbl9sYXRlbmN5IGZvciBvdXRwdXQgZGV2aWNlIGFjY29yZGluZyB0byByZXF1aXJlZCBtaW5pbXVtIG51bWJlciBvZiBidWZmZXJzCi0JICBTaW5jZSB3ZSBjYW4gZ2V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBidWZmZXJzIG5lZWRlZCBieSBhbiBvdXRwdXQKLQkgIGRldmljZSB0byB3b3JrLCB1c2UgaXQgdG8gc2V0IG1pbl9sYXRlbmN5IHdoaWNoIHdpbGwgZGV0ZXJtaW5lIGhvdyBtYW55Ci0JICBidWZmZXJzIGFyZSBxdWV1ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2MDcyCi0KLTIwMTQtMDktMDkgMTY6MTA6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNyYy5jOgotCSAgdGVzdHM6IHVkcHNyYzogYWRkIGNoZWNrIHRvIG1ha2Ugc3VyZSBtdWx0aXBsZSBtZW1vcnkgY2h1bmtzIGFyZSB1c2VkCi0KLTIwMTQtMDktMDkgMTU6NTU6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNyYy5jOgotCSAgdGVzdHM6IHVkcHNyYzogd2FpdCBmb3IgYnVmZmVycyB3aXRoIEdDb25kIGluc3RlYWQgb2Ygc2xlZXBpbmcKLQkgIEF2b2lkcyBoYWxmLXNlY29uZCBzbGVlcCBmb3Igbm8gcmVhc29uLgotCi0yMDE0LTA5LTA5IDE1OjMxOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzcmMuYzoKLQkgIHRlc3RzOiB1ZHBzcmM6IHNwbGl0IG91dCBzb2NrZXQgc2V0dXAKLQotMjAxNC0wOS0wOSAxMzo0Njo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogbW9yZSBlZmZpY2llbnQgbWVtb3J5IGhhbmRsaW5nCi0JICBEcm9wIHVzZSBvZiBnX3NvY2tldF9nZXRfYXZhaWxhYmxlX2J5dGVzKCkgd2hpY2ggaXMKLQkgIG5vdCB1c2VmdWwgb24gYWxsIHN5c3RlbXMgKHdoZXJlIGl0IHJldHVybnMgdGhlIHNpemUKLQkgIG9mIHRoZSBlbnRpcmUgYnVmZmVyIG5vdCB0aGF0IG9mIHRoZSBuZXh0IHBlbmRpbmcKLQkgIHBhY2tldCksIGFuZCBpcyB5ZXQgYW5vdGhlciBzeXNjYWxsIGFuZCBhcHBhcmVudGx5Ci0JICB2ZXJ5IGluZWZmaWNpZW50IG9uIFdpbmRvd3MgaW4gdGhlIFVEUCBjYXNlLgotCSAgSW5zdGVhZCwgd2hlbiByZWFkaW5nIFVEUCBwYWNrZXRzLCB1c2UgdGhlIG1vcmUgZmVhdHVyZWZ1bAotCSAgZ19zb2NrZXRfcmVjZWl2ZV9tZXNzYWdlKCkgY2FsbCB0aGF0IGFsbG93cyB0byByZWFkIGludG8KLQkgIHNjYXR0ZXJlZCBtZW1vcnksIGFuZCBhbGxvY2F0ZSBvbmUgbWVtb3J5IGNodW5rIHdoaWNoIGlzCi0JICBsaWtlbHkgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvciBhIHBhY2tldCwgd2hpbGUgYWxzbyBwcm92aWRpbmcKLQkgIGEgbGFyZ2VyIGFsbG9jYXRlZCBtZW1vcnkgY2h1bmsganVzdCBpbiBjYXNlIHRoZSBwYWNrZXQKLQkgIGlzIGxhcmdlciB0aGFuIGV4cGVjdGVkLiBJZiB0aGUgcmVjZWl2ZWQgZGF0YSBmaXRzIGludG8gdGhlCi0JICBmaXJzdCBjaHVuaywgd2UnbGwganVzdCBhZGQgdGhhdCB0byB0aGUgYnVmZmVyIHdlIHJldHVybgotCSAgYW5kIHJlLXVzZSB0aGUgZmFsbGJhY2sgYnVmZmVyIGZvciBuZXh0IHRpbWUsIG90aGVyd2lzZSB3ZQotCSAgYWRkIGJvdGggY2h1bmtzIHRvIHRoZSBidWZmZXIuCi0JICBUaGlzIHJlZHVjZXMgbWVtb3J5IHdhc3RlIG1vcmUgcmVsaWFibHkgb24gc3lzdGVtcyB3aGVyZQotCSAgZ2V0X2F2YWlsYWJsZV9ieXRlcygpIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KLQkgIEluIGEgbXVsdGltZWRpYSBzdHJlYW1pbmcgc2NlbmFyaW8sIGluY29taW5nIFVEUCBwYWNrZXRzCi0JICBhcmUgYWxtb3N0IG5ldmVyIGZyYWdtZW50ZWQgYW5kIHRodXMgYWxtb3N0IGFsd2F5cyBzbWFsbGVyCi0JICB0aGFuIHRoZSBNVFUgc2l6ZSwgd2hpY2ggaXMgYWxzbyB3aHkgd2UgZG9uJ3QgdHJ5IHRvIGRvCi0JICBzb21ldGhpbmcgc21hcnRlciB3aXRoIG1vcmUgZmFsbGJhY2sgbWVtb3J5IGNodW5rcyBvZgotCSAgZGlmZmVyZW50IHNpemVzLiBUaGUgZmFsbGJhY2sgc2NlbmFyaW8gaXMganVzdCBmb3Igd2hlbgotCSAgc29tZW9uZSBidWlsdCBhIGJyb2tlbiBzZW5kZXIgcGlwZWxpbmUgKG5vdCB1c2luZyBhCi0JICBwYXlsb2FkZXIgb3Igc29tZXN1Y2gpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwMzY0Ci0KLTIwMTQtMDktMDkgMTI6MTU6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgdWRwc3JjOiByZXdvcmsgbWVtb3J5IGFsbG9jYXRpb24gYml0cyBhbmQgZW5zdXJlIHdlIGFsd2F5cyBoYXZlIHR3byBjaHVua3Mgb2YgbWVtb3JpZXMgdG8gcmVhZCBpbnRvCi0JICBGaXJzdCBjaHVuayBpcyB0aGUgbGlrZWx5L2V4cGVjdGVkIGJ1ZmZlciBzaXplLCBzZWNvbmQgaXMgYXMKLQkgIGZhbGxiYWNrIGluIGNhc2UgdGhlIHBhY2tldCBpcyBsYXJnZXIgaW4gdGhlIGVuZC4KLQkgIE5leHQgc3RlcDogYWN0dWFsbHkgdXNlIHRoZXNlLgotCi0yMDE0LTA5LTA5IDA5OjQyOjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQkgIHVkcHNyYzogdHJhY2sgbWF4IHBhY2tldCBzaXplIGFuZCBzYXZlIGFsbG9jYXRvciBuZWdvdGlhdGVkIGJ5IEdzdEJhc2VTcmMKLQotMjAxNC0wOS0wOCAxNjoxNTowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JICBhdWRpb2VjaG86IGZpeCBleGFtcGxlIGNvbW1hbmQgbGluZQotCi0yMDE0LTA5LTA3IDEyOjQ2OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZml4IGNyYXNoIHdpdGggY2VydGFpbiB2aWRlb3MKLQkgIFRoaXMgaXMgYSByZWdyZXNzaW9uIGZyb20gMS4yIGNhdXNlZCBieSB0aGUgcG9ydAotCSAgdG8gdGhlIHBhZCBmbG93IGNvbWJpbmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjE5MgotCi0yMDE0LTA5LTA0IDE2OjIxOjIwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2EtZGVtdXg6IERvbid0IGhhbmRsZSBwYXJzZSBlcnJvcnMgYXQgdGhlIGVuZCBvZiBmaWxlIGFzIGFuIGVycm9yCi0JICBCdXQgb25seSBpZiB0aGV5IGhhcHBlbiBhZnRlciB0aGUgTWF0cm9za2Egc2VnbWVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4MzMKLQotMjAxNC0wOS0wNCAxMjoxNDoxMSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBJbmNsdWRlIHJlZGlyZWN0aW9uIHRhcmdldCBpbiBlcnJvciBtZXNzYWdlcwotCSAgSnVzdCBnaXZpbmcgdGhlIG9yaWdpbmFsIFVSSSBjYW4gZ2l2ZSB0aGUgZmFsc2UgaW1wcmVzc2lvbiB0aGF0IGUuZy4KLQkgIHRoYXQgb25lIGZhaWxlZCBob3N0IG5hbWUgcmVzb2x1dGlvbiwgd2hpbGUgYWN0dWFsbHkgdGhlIHJlZGlyZWN0aW9uIHRhcmdldAotCSAgZGlkLgotCi0yMDE0LTA5LTAyIDExOjEzOjQ0ICswNDAwICBBbmRyZWkgU2FyYWtlZXYgPHNhcmFrdXNoYUBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBGaXggc3luY2hyb25pemF0aW9uIGlmIGR5bmFtaWNhbGx5IGNoYW5naW5nIHRoZSBGUFMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4NTkKLQotMjAxNC0wOS0wMiAxMzo1Mjo0MyArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSAgc21wdGU6IENoZWNrIGlmIGlucHV0IGNhcHMgYXJlIHRoZSBzYW1lIGFuZCBjcmVhdGUgb3V0cHV0IGNhcHMgZnJvbSB2aWRlbyBpbmZvCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBhbHNvIHByb3BlcnRpZXMgbGlrZSB0aGUgcGl4ZWwtYXNwZWN0LXJhdGlvIGFyZSB0aGUgc2FtZQotCSAgYmV0d2VlbiBib3RoIHN0cmVhbXMgYW5kIHRoYXQgdGhlIG91dHB1dCBjYXBzIGNvbnRhaW4gYWxsIGZpZWxkcyBuZWNlc3NhcnkgZm9yCi0JICBjb21wbGV0ZSB2aWRlbyBjYXBzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTgwNAotCi0yMDE0LTA5LTAyIDE3OjIyOjA3ICswNTMwICBWaW5lZXRoIFQgTSA8dmluZWV0aC50bUBzYW1zdW5nLmNvbT4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogcmVwbGFjZSB3aXRoIGdzdF9idWZmZXJfY29weQotCSAgZ3N0X2J1ZmZlcl9yZWYgYW5kIGdzdF9idWZmZXJfd3JpdGFibGUgaXMgYmVpbmcgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBjb3B5IG9mIHNvdXJjZSBidWZmZXIuCi0JICByZXBsYWNpbmcgdGhlIHNhbWUgd2l0aCBnc3RfYnVmZmVyX2NvcHkgYXMgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgc2FtZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4ODAKLQotMjAxNC0wOS0wMyAyMzowNjo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBtYXJrIGpwZWcgYW5kIHBuZyBhcyBwYXJzZWQgc28gYXZkZWNfbWpwZWcgY2FuIGJlIHVzZWQgdG9vCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1OTcxCi0KLTIwMTQtMDktMDMgMTE6NDY6MTMgKzA1MzAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuYzoKLQkgIGdka3BpeGJ1ZmRlYzogZnJlZSBxdWVyeSBhZnRlciB1c2UKLQkgIEluIGdzdF9nZGtfcGl4YnVmX2RlY19zZXR1cF9wb29sKCksIHF1ZXJ5IGlzIGJlaW5nIGFsbG9jYXRlZCB1c2luZwotCSAgZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uKCksIGJ1dCB0aGUgc2FtZSBpcyBub3QgdW5yZWZlcmVuY2VkCi0JICBoZW5jZSBjYWxsaW5nIGdzdF9xdWVyeV91bnJlZigpIGFmdGVyIHVzYWdlIG9mIHF1ZXJ5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTk1MAotCi0yMDE0LTA5LTAzIDIzOjQ2OjM0ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIHF0ZGVtdXg6IFNpbGVuY2Ugc29tZSB3YXJuaW5ncyBmb3Igbm9ybWFsIGZpbGUgY29udGVudHMKLQotMjAxNC0wOS0wMSAwOTo1NjowMiArMDIwMCAgTmljb2xhcyBIdWV0IDxuaWNvbGFzLmh1ZXRAcGFycm90LmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IEZpeCBwYXJzaW5nIGlzc3VlIHdoZW4gdGhlIGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEgY29tcGxldGUgQURUUy9MT0FTIGZyYW1lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NTIwCi0KLTIwMTQtMDktMDIgMDk6MDk6NDkgKzAzMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmM6Ci0JICB2cDlkZWM6IEdldCBpbnB1dCB3aWR0aC9oZWlnaHQgZnJvbSB0aGUgY29kZWMgaW5zdGVhZCBvZiB0aGUgaW5wdXQgY2FwcwotCSAgVGhleSBhcmUgcmVwb3J0ZWQgcHJvcGVybHkgYnkgbGlidnB4IGlmIHRoZSBjb3JyZWN0IHN0cnVjdCBtZW1iZXJzIGFyZSB1c2VkLgotCSAgVGhpcyBhbHNvIGZpeGVzIGhhbmRsaW5nIG9mIHJlc29sdXRpb24gY2hhbmdlcyB3aXRob3V0IGlucHV0IGNhcHMgY2hhbmdlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTkzNTkKLQotMjAxMy0xMC0yMiAxODo0OToyMiArMDEwMCAgVG9tIEdyZWVud29vZCA8dGNkZ3JlZW53b29kQGhvdG1haWwuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSAgdnA4ZGVjOiBGaXggZm9yIGhhbmRsaW5nIHJlc29sdXRpb24gY2hhbmdlcyB3aGVuIGRlY29kaW5nIFZQOAotCSAgSWYgdGhlIHJlc29sdXRpb24gY2hhbmdlcyBpbiB0aGUgYml0c3RyZWFtIHdpdGhvdXQgdGhlIGlucHV0IGNhcHMgY2hhbmdpbmcgd2UKLQkgIHdvdWxkIHByZXZpb3VzbHkgb3V0cHV0IGNvcnJ1cHRlZCB2aWRlbyBvciBjcmFzaC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTkzNTkKLQotMjAxNC0wOS0wMiAwMDo1NToxNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSAgdnA5ZGVjOiBGaXggc2VnZmF1bHQgd2hlbiBhIG5ldyBjYXBzIGlzIHJlY2VpdmVkCi0JICBSZW1lbWJlciB0byB1bnJlZiB0aGUgb3V0cHV0IGNhcHMgd2hlbiBhIG5ldyBjYXBzIGV2ZW50IGlzIHJlY2VpdmVkCi0JICBhcyBpdCBzaG91bGQgZ2VuZXJhdGUgYSBuZXcgb25lIGJhc2VkIG9uIHRoZSBuZXcgY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQyNjYKLQotMjAxNC0wOS0wMiAwMDo1NDozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAb3NnLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDhkZWMuYzoKLQkgIHRlc3RzOiB2cDhkZWM6IGFkZCB0ZXN0IGZvciBjYXBzIHJlbmVnb3RpYXRpb24KLQkgIENoZWNrIHRoYXQgdnA4ZGVjIGNhbiBwcm9wZXJseSBhY2NlcHQgYSBuZXcgY2FwcyB3aGVuIHVwc3RyZWFtCi0JICBjaGFuZ2VzIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MjY2Ci0KLTIwMTQtMDgtMDUgMTA6MzQ6MzkgKzAyMDAgIEpvc2UgQW50b25pbyBTYW50b3MgQ2FkZW5hcyA8c2FudG9zY2FkZW5hc0BnbWFpbC5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JICB2cDhkZWM6IFJlc2V0IG91dHB1dCBhbmQgaW5wdXQgc3RhdGVzIHdoZW4gY2hhbmdpbmcgZm9ybWF0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0MjY2Ci0KLTIwMTQtMDktMDEgMTY6Mzk6MjMgKzA1MzAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBEb24ndCBjYWxsIGdzdF9jYXBzX3VucmVmKCkgb24gdGVtcGxhdGUgY2FwcyB3aGVuIGFscmVhZHkgdW5yZWZlcmVuY2VkCi0JICBBZGRpbmcgYW4gZXh0cmEgY29uZGl0aW9uIHdoaWxlIGNhbGxpbmcgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsKQotCSAgYW5kIHJlcGxhY2luZyBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChnc3RfY2Fwc19yZWYgKGNhcHMpKSB3aXRoCi0JICBnc3RfY2Fwc19jb3B5IChjYXBzKSBpbiBsaW5lIDE3Nywgc2luY2UgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgc2FtZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU3OTUKLQotMjAxNC0wOC0yOSAxMjowMToyNyArMDIwMCAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogZ2V0X25lYXJlc3Rfc2l6ZTogRml4ICJVbnN1cHBvcnRlZCBmaWVsZCB0eXBlIiBlcnJvcnMKLQkgIE1vc3QgVjRMMiBpb2N0bHMgbGlrZSB0cnlfZm10IHdpbGwgYWRqdXN0IGlucHV0IGZpZWxkcyB0byBtYXRjaCB3aGF0IHRoZQotCSAgaGFyZHdhcmUgY2FuIGRvIHJhdGhlciB0aGVuIHJldHVybmluZyAtRUlOVkFMLiBBcyBpcyBkb2NtZW50ZWQgaGVyZToKLQkgIGh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvdjRsLWR2Yi1hcGlzL3ZpZGlvYy1nLWZtdC5odG1sCi0JICBFSU5WQUwgaXMgb25seSByZXR1cm5lZCBpZiB0aGUgYnVmZmVyIHR5cGUgZmllbGQgaXMgaW52YWxpZCBvciBub3Qgc3VwcG9ydGVkLgotCSAgU28gdXBvbiByZXF1ZXN0aW5nIFY0TDJfRklFTERfTk9ORSBkZXZpY2VzIHdoaWNoIGNhbiBvbmx5IGRvIGludGVybGFjZWQKLQkgIG1vZGUgd2lsbCBjaGFuZ2UgdGhlIGZpZWxkIHZhbHVlIHRvIGUuZy4gVjRMMl9GSUVMRF9CT1RUT00gYXMgb25seSByZXR1cm5pbmcKLQkgIGhhbGYgdGhlIGxpbmVzIGlzIHRoZSBjbG9zZXN0IHRoZXkgY2FuIGRvIHRvIHByb2dyZXNzaXZlIG1vZGVzLgotCSAgSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UndmUgZmFpbGVkIHRvIGdldCBhICh1c2FibGUpIHByb2dlc3NpdmUgbW9kZQotCSAgYW5kIHNob3VsZCBmYWxsIGJhY2sgdG8gaW50ZXJsYWNlZCBtb2RlLgotCSAgVGhpcyBjb21taXQgYWRkcyBhIGNoZWNrIGZvciBoYXZpbmcgZ290dGVuIGEgdXNhYmxlIGZpZWxkIHZhbHVlIGFmdGVyIHRoZSBmaXJzdAotCSAgdHJ5X2ZtdCwgdG8gZm9yY2UgZmFsbGJhY2sgdG8gaW50ZXJsYWNlZCBtb2RlIGV2ZW4gaWYgdGhlIHRyeV9mbXQgc3VjY2VlZGVkLAotCSAgdGhlcmVieSBmaXhpbmcgZ2V0X25lYXJlc3Rfc2l6ZSBmYWlsaW5nIG9uIHRoZXNlIGRldmljZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NjYwCi0KLTIwMTQtMDgtMjkgMTA6NTc6MjAgKzAyMDAgIEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGdldF9uZWFyZXN0X3NpemU6IEFsd2F5cyByZWluaXQgYWxsIHN0cnVjdCBmaWVsZHMgb24gcmV0cnkKLQkgIFRoZXkgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBieSB0aGUgaW9jdGwgZXZlbiBpZiBpdCBmYWlsZWQuIFRoaXMgYWxzbyBtYWtlcwotCSAgdGhlIFNfRk1UIGZhbGxiYWNrIHBhdGggdHJ5IHByb2dyZXNzaXZlIGZpcnN0LCBtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoIHRoZQotCSAgcHJlZmVycmVkIFRSWV9GTVQgcGF0aC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU2NjAKLQotMjAxNC0wOC0yOSAxMTo1NToyNiArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogU3RvcmUgc2l6ZSBvZiBkYXRhIHRhZyBpbiBhIDY0IGJpdCBpbnRlZ2VyIGxvY2FsbHkgdG9vCi0JICBPdGhlcndpc2Ugd2Ugd2lsbCBjbGlwIHRoZSBEUzY0IHZhbHVlIG9mIFJGNjQgZmlsZXMgdG8gMzIgYml0cyBhZ2Fpbi4KLQotMjAxNC0wOC0yOSAxMTo1MzoyMyArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogVXNlIDY0IGJpdCBzY2FsaW5nIGZ1bmN0aW9ucyBub3cgdGhhdCBmYWN0IGlzIGEgNjQgYml0IGludGVnZXIKLQotMjAxNC0wOC0yNyAxODo1NToxOCArMDIwMCAgUGV0ZXIgRy4gQmF1bSA8cGV0ZXJAZHItYmF1bS5uZXQ+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JICB3YXZwYXJzZTogc3VwcG9ydCByZjY0IGZvcm1hdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTYyNwotCi0yMDE0LTA4LTI4IDEzOjQ4OjUwIC0wNjAwICBKYXNvbiBMaXR6aW5nZXIgPGpsaXR6aW5nZXJAY29udHJvbDQuY29tPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICBtdWx0aXBhcnRkZW11eDogRW5zdXJlIGNhcHMgYmVmb3JlIHBhZCBhZGRlZC4KLQkgIFRoaXMgc3RvcmVzIHRoZSBzdHJlYW0tc3RhcnQsIHNldHMgY2FwcywgYW5kIHRoZW4gYWRkcyB0aGUgcGFkLAotCSAgd2hpY2ggZW5zdXJlcyB0aGF0IHRoZSBjYXBzIGFyZSBzZXQgZm9yIHRoZSAicGFkLWFkZGVkIiBjYWxsYmFjay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU2MjYKLQotMjAxNC0wOC0yOCAxNTowMzo1MCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IEZhbGxiYWNrIHRvIFBUUyBpZiBEVFMgaXMgbWlzc2luZwotCSAgRml4aW5nIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2Ugd2hlbiBmaXhpbmc6Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMzUyCi0KLTIwMTQtMDgtMjggMTY6MTM6MjkgKzA1MzAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBSZW1vdmUgaW1wb3NzaWJsZSBlcnJvciBjb25kaXRpb24KLQkgIFdlIHJldHVybiBFT1MgYWZ0ZXIgdGhlIGZpcnN0IGJ1ZmZlciwgYW5kIEdzdFBhZCB3aWxsIG1ha2Ugc3VyZSBub3cgdGhhdCB3ZQotCSAgd29uJ3QgZ2V0IGFueSBvdGhlciBidWZmZXIgYWZ0ZXJ3YXJkcyB1bnRpbCBhIGZsdXNoIGhhcHBlbnMuIE5vIG5lZWQgdG8gY2hlY2sKLQkgIGZvciBpdCBvdXJzZWx2ZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM1NTgxCi0KLTIwMTQtMDgtMjggMTM6NTM6MjMgKzA1MzAgIFZpbmVldGggVCBNIDx2aW5lZXRoLnRtQHNhbXN1bmcuY29tPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuYzoKLQkgIGdka3BpeGJ1ZmRlYzogRU9TIGFuZCBOT1RfTElOS0VEIGFyZSBubyBlcnJvcnMgaW4gZ2VuZXJhbAotCSAgRG9uJ3QgcG9zdCBhbiBlcnJvciBtZXNzYWdlIGZvciB0aGVtIGJ1dCBsZXQgdXBzdHJlYW0gaGFuZGxlCi0JICBhbnl0aGluZyBhY2NvcmRpbmdseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU1NjQKLQotMjAxNC0wOC0yNyAyMTowNzoyNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkgIGZsdm11eDogQ29ycmVjdGx5IG9mZnNldCB0aW1lc3RhbXAKLQkgIFRoZSBwcmV2aW91cyBtZXRob2Qgd291bGQgYnJlYWsgQVYgc3luYyBpbiB0aGUgY2FzZSBhdWRpbyBvciB2aWRlbwotCSAgZGlkbid0IHN0YXJ0IGF0IHRoZSBzYW1lIHBvaW50IGluIHJ1bm5pbmcgdGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEzNTIKLQotMjAxNC0wOC0yNyAyMDo1NjoxMiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBTYXZlIGR0cyBmcm9tIGJ1ZmZlcgotCSAgV2Ugbm8gbG9uZ2VyIHNldCBkdHMgaW4gbXV4ZWQgYnVmZmVyLiBUaGlzIHdvdWxkIGxlYWQgdG8gZW5jb2RpbmcgdGFncwotCSAgd2l0aCB0aW1lc3RhbXAgMCBpbnN0ZWFkIG9mIHRoZSB0aW1lc3RhbXAgb2YgcHJldmlvdXMgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMTM1MgotCi0yMDE0LTA3LTI4IDIwOjU4OjU5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4Lmg6Ci0JICBmbHZtdXg6IEVuc3VyZSBUaW1lc3RhbXAgc3RhcnRzIGF0IDAKLQkgIEZMViBkb2N1bWVudGF0aW9uIHN0aXB1bGF0ZXMgdGhhdCB0aW1lc3RhbXAgbXVzdCBzdGFydCBhdCB6ZXJvLgotCSAgSW4gb3JkZXIgdG8gcmVzcGVjdCB0aGlzIHJ1bGUsIGtlZXAgdGhlIGZpcnN0IHRpbWVzdGFtcCBhcm91bmQKLQkgIGFuZCBvZmZzZXQgdGhlIHRpbWVzdGFtcCBmcm9tIHRoaXMgdmFsdWUuIFRoaXMgYWxsb3cgZm9yIGxvbmdlcgotCSAgcmVjb3JkaW5nIHRpbWUgaW4gcHJlc2VuY2Ugb2YgdGltZXN0YW1wIHRoYXQgZG9lcyBub3Qgc3RhcnQKLQkgIGF0IDAgYWxyZWFkeS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEzNTIKLQotMjAxNC0wNi0wNiAyMzoxNzo1MiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHY6IFRhZyB0aW1lc3RhbXAgYXJlIERUUyBub3QgUFRTCi0JICBUaGUgdGFncyBpbiBGTFYgYXJlIERUUy4gSW4gYXVkaW8gY2FzZXMsIGFuZCBmb3IgbWFueSB2aWRlbyBmb3JtYXQgdGhpcyBtYWtlcwotCSAgbm8gZGlmZmVyZW5jZSwgYnV0IGZvciBBVkMgd2l0aCBCLUZyYW1lcywgUFRTIG5lZWQgdG8gYmUgY29tcHV0ZWQgZnJvbQotCSAgY29tcG9zaXRpb24gdGltZXN0YW1wIENUUywgd2l0aCBQVFMgPSBEVFMgKyBDVFMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxMzUyCi0KLTIwMTQtMDgtMDcgMjE6NTg6MTQgLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDxrYWthcm90b0BrYWthcm90by5ob21lbGludXgubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogQWxsb3cgcnRwIGNhcHMgd2l0aG91dCBjbG9jay1yYXRlCi0JICBUaGUgaml0dGVyYnVmZmVyIHNob3VsZG4ndCBmb3JjZSBjbG9jay1yYXRlIG9uIGl0cyBzaW5rIHBhZCwgdGhpcyB3aWxsIGNhdXNlIGEgbmVnb3RpYXRpb24gaXNzdWUgc2luY2UgcnRwc3NyY2RlbXV4IGRvZXNuJ3QgaGF2ZSB0aGUgY2xvY2stcmF0ZSBhbmQgZG9lc24ndCBhZGQgaXQgdG8gdGhlIGNhcHMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IHRoZSBjbG9jay1yYXRlIGNhbiBlaXRoZXIgYmUgc3BlY2lmaWVkIHRocm91Z2ggdGhlIGNhcHMgb3IgdGhyb3VnaCB0aGUgcmVxdWVzdC1wdC1tYXAgc2lnbmFsLCBzbyB3ZSBtdXN0IHJlbW92ZSBjbG9jay1yYXRlIGZyb20gdGhlIHBhZCB0ZW1wbGF0ZXMgYW5kIHdlIG11c3QgYWNjZXB0IHRoZSBHU1RfRVZFTlRfQ0FQUyBpZiB0aGUgY2FwcyBkb24ndCBoYXZlIHRoZSBjbG9jay1yYXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDMyMgotCi0yMDE0LTA4LTE4IDE0OjA1OjUyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYXZvaWQgY3Jhc2hpbmcgb24gZGFzaCBzdHJlYW1zCi0JICBEQVNIL2ZyYWdtZW50ZWQgbW9vdiBtaWdodCBoYXZlIG5vIHNhbXBsZXMgYXMgdGhvc2UgYXJlIGNhcnJpZWQKLQkgIGluIG1vb2YgZnJhZ21lbnRzLiBBdm9pZCBjcmFzaGluZyBvciBmYWlsaW5nIHRoZSBzdHJlYW0gYmVjYXVzZQotCSAgb2YgdGhhdC4KLQotMjAxNC0wOC0xOCAxMDozMzo0OCArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgIGV4YW1wbGVzOiB1c2UgJ3Bvc3QtbWVzc2FnZXMnIHByb3BlcnR5IGluc3RlYWQgb2YgZGVwcmVjYXRlZCAnbWVzc2FnZScgcHJvcGVydHkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ5NzkKLQotMjAxNC0wOC0xOCAxMTo0NTo1NCArMDIwMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsIDx2amFxdWV6QGlnYWxpYS5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHA6IGZpeCB1ZHBzcmMgZG9jdW1lbnRhdGlvbgotCSAgdWRwc3JjIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gc29ja2ZkIGFuZCBjbG9zZWZkIHByb3BlcnRpZXMgd2hpY2ggaGFzCi0JICBiZWVuIHJlbW92ZWQuIFRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhvc2UgcmVmZXJlbmNlcyB0byBzb2NrZXQgYW5kIGNsb3NlLXNvY2tldAotCSAgcmVzcGVjdGl2ZWx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDk4NwotCi0yMDE0LTA4LTE1IDEwOjA5OjU2ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IE1ha2UgdGhlIGRlZmF1bHQgdGltZXNjYWxlIDEvMTgwMCBzZWNvbmQKLQkgIFRoZSBvbGQgZGVmYXVsdCB0aW1lc2NhbGUgb2YgMSBtaWxsaXNlY29uZCBwcm9kdWNlcyBpcnJhdGlvbmFsCi0JICBudW1iZXJzIGZvciBhIGxvdCBvZiBmcmFtZXJhdGUvYXVkaW8tcGFja2V0LWR1cmF0aW9uIG11bHRpcGxlcy4KLQkgIDEvMTgwMCBpcyBhIG5pY2VyIG51bWJlciwgYXMgaXQgdGVuZHMgdG8gcHJvZHVjZSBiZXR0ZXIgZnJhY3Rpb25zCi0JICBhbmQgdGhlcmVmb3JlIHNsaWdodGx5IGhpZ2hlciBhY2N1cmFjeSBvdmVyYWxsCi0KLTIwMTQtMDgtMTUgMDE6MTc6MjcgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thOiBVc2UgZ3N0X3ZpZGVvX2d1ZXNzX2ZyYW1lcmF0ZSgpIGZ1bmN0aW9uCi0JICBSZW1vdmUgbG9jYWwgZnJhbWVyYXRlIGd1ZXNzaW5nIGZ1bmN0aW9uIGluIGZhdm91ciBvZgotCSAgdGhlIG5ldyBnc3RfdmlkZW9fZ3Vlc3NfZnJhbWVyYXRlKCkgZnVuY3Rpb24uCi0KLTIwMTQtMDgtMTUgMDE6MTI6MjAgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L01ha2VmaWxlLmFtOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBJbXByb3ZlIGZyYW1lcmF0ZSBjYWxjdWxhdGlvbi9ndWVzc2luZwotCSAgQ2hhbmdlIHRoZSB3YXkgdGhlIG91dHB1dCBmcmFtZXJhdGUgaXMgY2FsY3VsYXRlZAotCSAgdG8gaWdub3JlIHRoZSBmaXJzdCBzYW1wbGUgKHdoaWNoIGlzIHNvbWV0aW1lcyB0cnVuY2F0ZWQKLQkgIGluIG15IHRlc3RpbmcpIGFuZCB1c2UgdGhlIG5ldyBnc3RfdmlkZW9fZ3Vlc3NfZnJhbWVyYXRlKCkKLQkgIGZ1bmN0aW9uIHRvIHJlY29nbmlzZSBjb21tb24gc3RhbmRhcmQgZnJhbWVyYXRlcyBiZXR0ZXIuCi0JICBSZW1vdmUgdGhlIGNvZGUgdGhhdCB3YXMgc29ydGluZyB0aGUgZmlyc3QgMjAgc2FtcGxlCi0JICBkdXJhdGlvbnMgYW5kIHRoZW4gaWdub3JpbmcgdGhlIHJlc3VsdC4KLQotMjAxNC0wOC0xNCAxNjozNjo0NCArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IFVzZSB0aGUgYmVzdCB3aWR0aC9oZWlnaHQvZXRjIGlmIGRvd25zdHJlYW0gY2FuIGhhbmRsZSB0aGF0Ci0JICBCZWZvcmUgaXQgd2FzIGFsd2F5cyB1c2luZyB3aGF0ZXZlciBkb3duc3RyZWFtIHByZWZlcnJlZCwgd2hpbGUKLQkgIHRoZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGNsYWltZWQgc29tZXRoaW5nIGRpZmZlcmVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcxODAKLQotMjAxNC0wOC0xNCAxMToyOTowMCArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBBdm9pZCBkb3VibGUgZnJlZSBvZiBWaWRlb0NvbnZlcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ3NjQKLQotMjAxNC0wOC0xMyAxMTo1ODozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGZpeCBpbmRlbnRhdGlvbgotCi0yMDE0LTA4LTEzIDExOjU0OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogdW4tYnJlYWsgZHVyYXRpb24gcXVlcnlpbmcKLQkgIENvbW1pdCAyYjk0OTNiNSBicm9rZSB0aGlzIGluIHR3byB3YXlzOiBhKSB3ZSBzaG91bGQgb25seQotCSAgcGFzcyBkdXJhdGlvbiBxdWVyaWVzIGluIFRJTUUgZm9ybWF0IHVwc3RyZWFtIChvciBhdCBsZWFzdAotCSAgbm90IHRob3NlIGluIERFRkFVTFQgb3IgQllURSBmb3JtYXQpLCBhbmQgYikgd2UgbXVzdG4ndAotCSAgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdyZXMnIGZyb20gVFJVRSB0byBGQUxTRQotCSAgYW5kIG5vdCBzZXQgaXQgYWdhaW4gbGF0ZXIuIFRoaXMgbGVkIHRvIGJvZ3VzIGR1cmF0aW9ucwotCSAgYmVpbmcgcmVwb3J0ZWQgZm9yIEZMViBwbGF5YmFjayBmcm9tIGZpbGUsIGJlY2F1c2UgVElNRQotCSAgcXVlcmllcyB3b3VsZCBmYWlsIChhcyAncmVzJyBoYWQgYmVlbiBzZXQgdG8gRkFMU0UpIGFuZAotCSAgcGFyc2VycyB0aGVuIGRvIGEgQllURSBxdWVyeSBhcyBmYWxsYmFjayBhbmQgdHJ5IHRvCi0JICBndWVzc3RpbWF0ZSBzb21ldGhpbmcgaW4gcmV0dXJuLCB3aGljaCBvZiBjb3Vyc2UgZ29lcwotCSAgaG9ycmlibHkgd3Jvbmcgc2luY2UgdGhlIEJZVEUgc2l6ZSByZXR1cm5lZCBpcyBmb3IgdGhlCi0JICBtdXhlZCBmaWxlLgotCi0yMDE0LTA4LTEzIDEzOjIzOjEwICswMzAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2JhbGFuY2U6IEFsbG93IGFueSByYXcgY2FwcyBpbiBwYXNzdGhyb3VnaCBtb2RlLCBub3QganVzdCB0aGUgb25lcyB3ZSBoYW5kbGUKLQotMjAxNC0wOC0xMyAxMzowNDoyMSArMDMwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgdmlkZW9iYWxhbmNlOiBBbGxvdyBBTlkgY2Fwc2ZlYXR1cmVzLCBidXQgb25seSBpbiBwYXNzdGhyb3VnaCBtb2RlCi0JICBXaGVuIGNoYW5naW5nIHRoZSBwcm9wZXJ0aWVzIHRvIG5vdCBiZSBpbiBwYXNzdGhyb3VnaCBtb2RlIGFueW1vcmUsCi0JICB3ZSB3aWxsIG9ubHkgYWNjZXB0IGNhcHMgd2UgY2FuIHByb2Nlc3Mgb3Vyc2VsdmVzLCBwb3RlbnRpYWxseSBjYXVzaW5nCi0JICBhIG5vdC1uZWdvdGlhdGVkIGVycm9yLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDM0NQotCi0yMDE0LTA4LTEyIDExOjM0OjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBkb2NzOiB1cGRhdGUgZm9yIGdpdAotCi0yMDE0LTA4LTEyIDExOjMzOjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGJ1aWxkIHhpbWFnZXNyYyBhZ2FpbiB3aGVuIGNoZWNrcyBzdWNjZWVkCi0JICBUaGlyZCB0aW1lIGx1Y2t5LCBob3BlZnVsbHkuCi0KLTIwMTQtMDgtMTEgMDk6MjY6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZml4IHgxMSBjaGVja3MgdG8gYmUgbm9uLWZhdGFsIGFnYWluCi0JICBNdXN0IHBhc3MgYW4gYWN0aW9uLWlmLW5vdC1mb3VuZCBhcmd1bWVudCB0bwotCSAgUEtHX0NIRUNLX01PRFVMRVMgb3IgaXQgd2lsbCBlcnJvciBvdXQgd2hlbgotCSAgaXQgY2FuJ3QgZmluZCB0aGUgbW9kdWxlIHJlcXVlc3RlZC4gQWxzbyBmaXgKLQkgIEFDX0NIRUNLX0xJQiB1c2FnZSwgZXh0cmEgbGlicyBhcmd1bWVudCB3YXMKLQkgIGluIHRoZSB3cm9uZyBwbGFjZS4KLQotMjAxNC0wOC0wNyAxNzoxMjozOCArMDMwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmb3J3YXJkIERJU0NPTlQgZnJvbSB1cHN0cmVhbSB0byB0aGUgb3V0cHV0IHN0cmVhbXMKLQkgIFRoaXMgbWFrZXMgc2Vuc2UgaW4gREFTSCByZXZlcnNlIHBsYXliYWNrLCB3aGVyZSB0aGUgdXBzdHJlYW0gZGFzaGRlbXV4Ci0JICB3aWxsIGRvd25sb2FkIERBU0ggc2VnbWVudHMgaW4gcmV2ZXJzZSBvcmRlciwgYnV0IHB1c2ggdGhlaXIgYnVmZmVycwotCSAgZm9yd2FyZCB0byBxdGRlbXV4IGFuZCBtYXJrIGVhY2ggc2VnbWVudCBzdGFydCBhcyBESVNDT05ULiBUaGlzIG5lZWRzCi0JICB0byBiZSBmb3J3YXJkZWQgZG93bnN0cmVhbSB0byB0aGUgcGFyc2VyL2RlY29kZXIsIG90aGVyd2lzZSBpdCB3b24ndCB3b3JrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDQ0MwotCi0yMDE0LTA4LTEwIDE4OjU1OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHVzZSBwa2ctY29uZmlnIHRvIGRldGVjdCB4MTEgYW5kIHNpbXBsaWZ5IGNoZWNrcwotCSAgQUNfUEFUSF9YVFJBIG1hY3JvIHVubmVjZXNzYXJpbHkgcHVsbHMgaW4gbGliU00gYW5kIGxpYklDRS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEwNDcKLQotMjAxNC0wOC0xMCAxMjozMDowNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IHJ0cC1wYXlsb2FkaW5nOiBhZGp1c3QgdGVzdCBkYXRhIHRvIGF2b2lkIE5BTCBjaG9wcGluZwotCSAgLi4uIGFuZCBjb3JyZXNwb25kaW5nbHkgdW5leHBlY3RlZCBidWZmZXIgc2l6ZXMuCi0KLTIwMTQtMDgtMDkgMTQ6MjI6NDIgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleGVuYzogSW1wcm92ZSBhbm5vdGF0aW9uIG9mIGludGVybmFsIGZ1bmN0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NTQyCi0KLTIwMTQtMDgtMDggMTI6NTQ6MzAgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSAgc2hhcGV3aXBlOiBVbnJlZiBjYXBzIGFuZCBlbGVtZW50IGFmdGVyIHVzYWdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NDc4Ci0KLTIwMTQtMDgtMDkgMjA6NDc6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogaW1wcm92ZSBkZWJ1ZyBsb2dnaW5nIG9mIGZvdXJjY3MKLQkgIElmIHdlIGNhbid0IHNob3cgQVNDSUksIGF0IGxlYXN0IHNob3cgdGhlbQotCSAgaW4gYmlnIGVuZGlhbiBvcmRlci4KLQotMjAxNC0wOC0wOSAyMDo0NjowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhZGQgc3VwcG9ydCBmb3IgJ3dtYSAnIG1hcHBpbmcgYXMgZm91bmQgaW4gc29tZSBpc212IGZpbGVzCi0JICBlLmcuIFRvX1RoZV9MaW1pdF83MjBfMjk2Mi5pc212Ci0KLTIwMTQtMDgtMDkgMTg6MzE6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWRkIHN1cHBvcnQgZm9yICd2Yy0xJyBtYXBwaW5nIGFzIGZvdW5kIGluIHNvbWUgaXNtdiBmaWxlcwotCSAgZS5nLiBUb19UaGVfTGltaXRfNzIwXzI5NjIuaXNtdgotCi0yMDE0LTA4LTA3IDE2OjM0OjM2ICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgIHJ0cGgyNjNwcGF5OiBVbnJlZiBwYWQgdGVtcGxhdGUgY2FwcyBhZnRlciB1c2UKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ0MzUKLQotMjAxNC0wOC0wOCAxMjozNjowMSArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogVW5yZWYgYWxsb3dlZCBjYXBzIGFmdGVyIHVzYWdlCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM0NDc0Ci0KLTIwMTQtMDgtMDggMTI6NDA6NDkgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogVW5yZWYgcGFkIHRlbXBsYXRlIGNhcHMgYWZ0ZXIgdXNhZ2UKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQ0NzUKLQotMjAxNC0wOC0wOCAxMjo0NDowOSArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JICBuYXZzZWVrOiBVbnJlZiBwZWVyIHBhZCBhZnRlciB1c2FnZQotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDQ3NgotCi0yMDE0LTA4LTA4IDEyOjI5OjUyICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBVbnJlZiBwYWQgdGVtcGxhdGUgY2FwcyBhZnRlciB1c2FnZQotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNDQ3MwotCi0yMDE0LTA4LTA1IDExOjQ3OjM5ICswMjAwICBTcmltYW50YSBQYW5kYSA8c3JpbWFudGFAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogYXBwZW5kIHBhY2tldGl6YXRpb24gbW9kZSBwYXJhbWV0ZXIgdG8gU0RQCi0JICBBcHBlbmQgcGFja2V0aXphdGlvbi1tb2RlIHBhcmFtZXRlciB0byBTRFAgZGVzY3JpcHRpb24uCi0JICBQYWNrZXRpemF0aW9uIG1vZGUgc2lnbmFscyB0aGUgcHJvcGVydGllcyBvZiBhbiBSVFAgcGF5bG9hZCB0eXBlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzU1NgotCi0yMDE0LTA4LTA4IDAzOjU4OjE0ICsxMDAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBpc29tcDQvcXRtdXg6IFdyaXRlIGNvcnJlY3QgZmlsZSBkdXJhdGlvbiB3aGVuIGdhcHMgZXhpc3QuCi0JICBXaGVuIHdyaXRpbmcgb3V0IGEgdHJhayB3aXRoIGFuIGVkaXQgbGlzdCwgbWFrZSBzdXJlIHRoZQotCSAgb3ZlcmFsbCBmaWxlIGR1cmF0aW9uIGlzIGFsc28gdXBkYXRlZCB0byByZWZsZWN0IHRoZQotCSAgbGVuZ3RoZW5pbmcgb2YgdGhlIHN0cmVhbS4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgdG8gcXRkZW11eCB0byB3YXJuIGFib3V0IHN0cmVhbXMgdGhhdAotCSAgYXJlIGxvbmdlciB0aGFuIHRoZSBmaWxlIGFuZCBnZXQgdHJ1bmNhdGVkLgotCi0yMDE0LTA4LTA0IDE1OjM5OjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBQdXNoIHRoZSBjb3JyZWN0IHNlZ21lbnQgaW4gVENQIG1vZGUgd2hlbiBzZWVraW5nCi0KLTIwMTQtMDgtMDMgMTI6MzM6MzIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiB1bmJyZWFrIGF1IGFsaWduZWQgYnl0ZS1zdHJlYW0gcGF5bG9hZGluZwotCi0yMDE0LTA3LTIyIDEzOjI0OjA5ICswMjAwICBTcmltYW50YSBQYW5kYSA8c3JpbWFudGFAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogYXBwZW5kIHByb2ZpbGUtbGV2ZWwtaWQgdG8gU0RQCi0JICBBcHBlbmQgcHJvZmlsZS1sZXZlbC1pZCB0byBTRFAgaWYgYXZhaWxhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzUzOQotCi0yMDE0LTA3LTMxIDE4OjQ3OjQ5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb21tb246Ci0JICBNYWtlZmlsZTogQWRkIHVzYWdlIG9mIGJ1aWxkLWNoZWNrcyBzdGVwCi0JICBBbGxvd3MgYnVpbGRpbmcgY2hlY2tzIHdpdGhvdXQgcnVubmluZyB0aGVtCi0KLTIwMTQtMDctMzEgMDk6NTM6NTMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkgIHhpbWFnZXNyYzogRml4IHdhcm5pbmcgYWJvdXQgbWlzc2luZyByZXR1cm4gdmFsdWUKLQotMjAxNC0wNy0yNCAxNToyODowOSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuaDoKLQkgIHhpbWFnZXNyYzogQWRkIG1pc3NpbmcgcmV0dXJuIHZhbHVlIHRvIEJ1ZmZlciBkaXNwb3NlIGZ1bmN0aW9uCi0JICBEZXBlbmRpbmcgb250IGhlIGJ1aWxkLCB0aGUgbWV0aG9kIGNvdWxkIHJldHVybiBGQUxTRSwgaGVuY2UgbmV2ZXIKLQkgIGZyZWUgdGhlIGJ1ZmZlcnMsIG9yIGFscmVhZHkgVFJVRSBhbmQgbGVhZCB0byBhIGNyYXNoOgotCSAgRml4ZXM6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM2OTUKLQotMjAxNC0wNy0yOCAxNjo0OToxNiArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogc2V0IG91dHB1dCBjYXBzIGxheW91dCB0byBpbnRlcmxlYXZlZAotCSAgU2V0IG91dHB1dCBjYXBzIGxheW91dCBpbmRlcGVuZGVudGx5IGZyb20gaW5wdXQgY2FwcyBsYXlvdXQgd2hpY2ggY2FuCi0JICBiZSBlaXRoZXIgbm9uLWludGVybGVhdmVkIG9yIGludGVybGVhdmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzg2NgotCi0yMDE0LTA3LTI2IDEyOjA2OjM5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAb3NnLnNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogY2xlYXIgZ2NvbmQKLQotMjAxNC0wNy0yNSAxNDozMDozMyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICBSZXZlcnQgInY0bDJidWZmZXJwb29sOiBXb3JrYXJvdW5kIGVsZW1lbnRzIG5vdCByZXF1ZXN0aW5nIGFueSBidWZmZXJzIgotCSAgVGhpcyB3YXMgYSB0ZW1wb3J5IHdvcmthcm91bmQsIHdlIHNob3VsZCBmaXggdGhlIGVuY29kZXJzIHRoYXQgZG8gbm90Ci0JICBuZWdvdGF0aWF0ZSB0aGUgYW1vdW50IG9mIGJ1ZmZlcnMgdGhleSBuZWVkLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBkMDNiY2JhM2RiMTVkMDZkYmRlYTZiNzc2YTZmMjhlZDJmMDMyNzJhLgotCi0yMDE0LTA3LTA4IDE0OjMxOjU5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IERvbid0IHNoYXJlIG93biBwb29sIGlmIG1pbiBleGNlZWQgVjRMMiBjYXBhY2l0eQotCSAgSWYgdGhlIG1pbmltdW0gcmVxdWlyZWQgYnVmZmVyIGV4Y2VlZCBWNEwyIGNhcGFjaXR5LCBkb24ndCBzaGFyZSBkb3duCi0JICBwb29sLiBUaGlzIGFsbG93IHN1cHBvcnQgdmVyeSBoaWdoIGxhdGVuY3ksIGxpa2Ugd2l0aCB4MjY0ZW5jIGRlZmF1bHQKLQkgIGVuY29kaW5nIHNldHRpbmdzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjI4OAotCi0yMDE0LTA3LTI1IDE3OjQyOjIwICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBxdWVyeSBtaW5pbXVtIHJlcXVpcmVkIGJ1ZmZlcnMgZm9yIG91dHB1dAotCSAgU29tZSB2NGwyIGRldmljZXMgY291bGQgcmVxdWlyZSBhIG1pbmltdW0gYnVmZmVycyBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0Ci0JICB2YWx1ZXMuIFJhdGhlciB0aGFuIGJsaW5kbHkgcHJvcG9zZSBhIHBvb2wgd2l0aCBtaW4tYnVmZmVycyBzZXQgdG8gdGhlCi0JICBkZWZhdWx0IHZhbHVlLCBpdCBhc2sgdGhlIGRldmljZSB1c2luZyBjb250cm9sIGlvY3RsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzc1MAotCi0yMDE0LTA3LTIzIDE4OjQwOjEwICswMjAwICBBdXLDqWxpZW4gWmFuZWxsaSA8YXVyZWxpZW4uemFuZWxsaUBwYXJyb3QuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IHVzZSBkaXJlY3RseSAnb2JqJyBpbnN0ZWFkIG9mICd2NGwyc2luay0+djRsMm9iamVjdCcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM2MTYKLQotMjAxNC0wNy0yMyAxODozOTo1MCArMDIwMCAgQXVyw6lsaWVuIFphbmVsbGkgPGF1cmVsaWVuLnphbmVsbGlAcGFycm90LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDI6IHNldCBkZWJ1ZyBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gZGV2aWNlIHR5cGUgYW5kIElPIG1vZGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzM2MTYKLQotMjAxNC0wNS0yNCAxOTowMjo1OSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IFJlbW92ZSBpc19hY3RpdmUgY2hlY2tzCi0JICBUaGVzZSBjaGVja3MgYXJlIG5vIGxvbmdlciByZXF1aXJlZCB3aXRoIHJlY2VudCBjaGFuZ2UgdG8gdGhlIGJ1ZmZlcnBvb2wuIFRoaXMKLQkgIHNob3VsZCBhbGxvdyBjaGFuZ2luZyB0aGUgY29uZmlndWFydGlvbiwgaGVuY2UgdGhlIHdheSBmb3J3YXJkIHJlbmVnb3RpYXRpb24KLQkgIHN1cHBvcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MjY4Ci0KLTIwMTQtMDctMjEgMTg6MTE6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2xhbmcuYzoKLQkgIHF0ZGVtdXg6IGZpeCBsYW5ndWFnZSBjb2RlIHBhcnNpbmcgZm9yIDMtbGV0dGVyIGNvZGVzIHN0YXJ0aW5nIHdpdGggJ2EnCi0JICBBbmQgaGFuZGxlIHNwZWNpYWwgdmFsdWUgZm9yICd1bnNwZWNpZmllZCcgZXhwbGljaXRseS4KLQkgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L21hYy9kb2N1bWVudGF0aW9uL1F1aWNrVGltZS9RVEZGL1FURkZDaGFwNC9xdGZmNC5odG1sCi0KLTIwMTQtMDctMDggMDI6MTg6MjcgKzAyMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBBZGQgc3VwcG9ydCBmb3IgZW5jb2RpbmcgZnJvbSBOVjIxIGFuZCBOVjEyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyODcwCi0KLTIwMTQtMDctMTkgMTg6MDQ6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS40LjAgPT09Ci0KLTIwMTQtMDctMTkgMTc6MjA6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjQuMAotCi0yMDE0LTA3LTE5IDE2OjM1OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA3LTE5IDEyOjMyOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNC0wNy0xOSAxMTozMDozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogRG9uJ3Qgb3ZlcndyaXRlIHRoZSBmaXJzdCBjb21wb25lbnQgd2l0aCB0aGUgYWxwaGEgdmFsdWUgZm9yIEJHUngKLQkgIEluc3RlYWQgbGVhdmUgdGhlIHggY29tcG9uZW50IHVuc2V0IHdoZW4gZmlsbGluZyB0aGUgYm9yZGVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMzODAKLQotMjAxNC0wNy0xNiAxNzoxODo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IFByb3Blcmx5IHJlcG9ydCBpbiB0aGUgQ0FQUyBxdWVyeSB0aGF0IHdlIGNhbiBjb252ZXJ0IEFEVFM8LT5SQVcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMxOTAKLQotMjAxNC0wNy0xMyAxNjowNTo1NiArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgcmd2b2x1bWU6IEF2b2lkIHRha2luZyB1bm5lY2Vzc2FyeSByZWZzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMTIyCi0KLTIwMTQtMDctMTMgMTY6MDQ6MjMgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwZHRtZm11eDogQXZvaWQgdGFraW5nIGFuIHVubmVjZXNzYXJ5IHJlZgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMzEyMgotCi0yMDE0LTA3LTE1IDE2OjU5OjA2ICswMjAwICBQaW90ciBEcsSFZyA8cGlvdHJkcmFnQGdtYWlsLmNvbT4KLQotCSogcG8vUE9URklMRVMuaW46Ci0JICBwbzogdXBkYXRlIFBPVEZJTEVTCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzMjA4Ci0KLTIwMTQtMDctMTEgMTM6MzU6MTAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IEZpeCBjb3B5IHRocmVzaG9sZCBpbXBsZW1lbnRhdGlvbgotCSAgV2UgY2Fubm90IGFsbG9jYXRlIG5ldyBidWZmZXIgaW4gYWNxdWlyZSwgb3RoZXJ3aXNlIHRoZSBiYXNlIGNsYXNzCi0JICBpcyBub3QgYXdhcmUgYW5kIGdldCBjb25mdXNlZC4gSW5zdGVhZCwgY29weSBpbiBfcHJvY2VzcygpLiBUaGlzIGxlYWRzCi0JICB0byBjcmFzaCBvbiBmaW5hbGl6ZS4KLQkgIEZpeGVzIHJlZ3Jlc3Npb24sIHNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyOTEyCi0KLT09PSByZWxlYXNlIDEuMy45MSA9PT0KLQotMjAxNC0wNy0xMSAxMTozODo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMy45MQotCi0yMDE0LTA3LTExIDEwOjU4OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA3LTEwIDE4OjExOjIwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBVc2UgcWRhdGEgaW5zdGVhZCBvZiBwYXJlbnRpbmcgdG8gRG1hYnVmTWVtb3J5Ci0JICBQYXJlbnRpbmcgVjRsMk1lbW9yeSB0byBEbWFidWZNZW1vcnkgd2FzIGluIGNvbmZsaWN0IHdpdGggcmVjZW50Ci0JICBvcHRpbWl6YXRpb24gaW4gRG1hYnVmTWVtb3J5IHRvIGF2b2lkIGR1cCgpLCBhbmQgZGlkbid0IHdvcmsgd2l0aAotCSAgbWVtb3J5IHNoYXJpbmcuIEluc3RlYWQsIHVzZSBhIHFkYXRhIGFuZCBpdCdzIGRlc3Ryb3kgbm90aWZ5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQ0MQotCi0yMDE0LTA3LTExIDA4OjUyOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNC0wNy0wOCAxNzo1MDo0NyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IFdvcmthcm91bmQgZWxlbWVudHMgbm90IHJlcXVlc3RpbmcgYW55IGJ1ZmZlcnMKLQkgIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBlbGVtZW50IHRoYXQgZG9uJ3QgcmVxdWVzdCBidWZmZXJzIHdoZW4KLQkgIHRoZXkgc2hvdWxkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjI4OAotCi0yMDE0LTA3LTA2IDExOjI3OjM2ICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIHRlc3RzL2ljbGVzL3ZpZGVvY3JvcC10ZXN0LmM6Ci0JICB0ZXN0czogZml4IHBpcGVsaW5lIGxlYWsgaW4gdmlkZW9jcm9wIHRlc3QKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI5NzYKLQotMjAxNC0wNy0wNiAxMToyNjo0NiArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LXJ0cGF1eC5jOgotCSAgZXhhbXBsZXM6IGNsaWVudC1ydHBhdXg6IFJlbGVhc2UgcmVmZXJlbmNlIHRvIHBhcmVudCB3aGVuIGRvbmUKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI5NzYKLQotMjAxNC0wNy0xMCAxNzoxOTo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZml4IHF1ZXJ5IGxlYWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzMwMDMKLQotMjAxNC0wNy0xMCAxMjoxMDo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkgIHdhdmVuYzogUmV0dXJuIG5vdC1uZWdvdGlhdGVkIGlmIHdlIGdvdCBubyBjYXBzIG9yIGNhcHMgbmVnb3RpYXRpb24gZmFpbGVkCi0JICBBbmQgZG8gaXQgYWx3YXlzLCBub3QgaW5zaWRlIGEgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyOTM5Ci0KLTIwMTQtMDctMDggMTM6MzQ6MjggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogRW5zdXJlIGludGVybmFsIHBvb2wgYWN0aXZhdGlvbgotCSAgQmVmb3JlIHdlIHdvdWxkIGhpdCBhbiBhc3NlcnRpb24gIidnc3RfYnVmZmVyX3Bvb2xfaXNfYWN0aXZlIChicG9vbCknIGZhaWxlZCIKLQkgIGlmIHRoZSBpbnRlcm5hbCBwb29sIHdhcyBub3QgdXNlZCB0byBwdXNoIGJ1ZmZlciBkb3duc3RyZWEsIGhlbmNlIG5vdAotCSAgZ2l2ZW4gdG8gdGhlIGJhc2VjbGFzcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI5MTIKLQotMjAxNC0wNy0wNCAyMDoyMjoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IGZpeCBkb3VibGUgdW5sb2NrIGluIHNlZ21lbnQgc2VlayBzZWdtZW50IGNvZGUgcGF0aAotCSAgV2Ugb25seSB3YW50IHRvIHVubG9jayBpZiB3ZSBwdXNoIGFuIGV2ZW50IGRvd25zdHJlYW0gYW5kCi0JICBqdW1wIHRvIGRvbmVfdW5sb2NrIGxhYmVsIGFmdGVyd2FyZHMuIFdlIHdvdWxkIGFsc28gdW5sb2NrCi0JICBpbiBjYXNlIG9mIGEgc2VnbWVudCBzZWVrIGFuZCB0aGVuIHVubG9jayBhZ2FpbiBsYXRlciwgYW5kCi0JICBub3RoaW5nIGdvb2QgY2FuIGNvbWUgb2YgdGhhdC4KLQkgIChUaGlzIGNvZGUgbG9va3MgYSBiaXQgZG9kZ3kgYW55d2F5IHRob3VnaCwgc2hvdWxkbid0IGl0Ci0JICBhbHNvIGJhaWwgb3V0IHdpdGggRkxPV19FT1MgaGVyZSBpbiBjYXNlIG9mIGEgc2VnbWVudCBzZWVrCi0JICBzY2VuYXJpbywganVzdCB3aXRob3V0IHRoZSBldmVudD8pCi0KLTIwMTQtMDctMDQgMTk6NDU6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICB0ZXN0czogcXRtdXg6IHN1cHByZXNzIGdsaWIgY3JpdGljYWxzIGNhdXNlZCBieSB0ZXN0aW5nIGRlcHJlY2F0ZWQgZHRzIG1ldGhvZHMKLQotMjAxNC0wNy0wNCAwMzoyMTozMCArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGhvdG1haWwuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIGF2aWRlbXV4LCB3YXZwYXJzZTogUHJpbnQgaW52YWxpZCBmb3VyY2MgaW4gaGV4Ci0JICBQcmV2aW91c2x5IHRoaXMgd2FzIHByaW50ZWQgYXMgY2hhcmFjdGVycyB3aGljaCBjYXVzZWQgbGF0ZXIgcHJvY2Vzc2luZwotCSAgb2YgdGhlIGVycm9yIG1lc3NhZ2UgdG8gc29tZXRpbWVzIHdhcm4gYWJvdXQgbm9uLVVURi04IGNoYXJhY3RlcnMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyNzE0Ci0KLTIwMTQtMDctMDMgMTU6MjE6MTggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogUG9vbCBtaWdodCBiZSBOVUxMIGluIGRlY2lkZSBhbGxvY2F0aW9uCi0JICBJZiBzcGVjaWFsIHN0cmlkZSBpcyBuZWVkZWQgYW5kIGRvd25zdHJlYW0gZG9uJ3Qgc3VwcG9ydCBWaWRlb01ldGEsCi0JICBwb29sIG1pZ2h0IGJlIE5VTEwgaW4gb3JkZXIgdG8gbGV0IHRoZSBiYXNlY2xhc3MgY3JlYXRlIGEgZ2VuZXJpYwotCSAgcG9vbMKtLiBUaGlzIHdvdWxkIGxlYWQgdG8gYXNzZXJ0aW9uIHdpdGggb24gRXh5bm9zIHdpdGg6Ci0JICBnc3QtbGF1bmNoLTEuMCAtdiBmaWxlc3JjIGxvY2F0aW9uPW1vdiAhIHF0ZGVtdXggISBoMjY0cGFyc2UgISBcCi0JICB2NGwydmlkZW84ZGVjICEgZmFrZXNpbmsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzI3MDcKLQotMjAxNC0wNy0wMyAxNToyOTo1NCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDJidWZmZXJwb29sOiBIYW5kbGUgRkQgZXJyb3IgZHVyaW5nIHBvbGwKLQkgIFRoaXMgd2lsbCBlbnN1cmUgd2UgZmFpbCBlYXJsaWVyIGlmIHNvbWV0aGluZyB1bnJlY292ZXJhYmxlCi0JICBoYXBwZW5zLgotCi0yMDE0LTA3LTAzIDE1OjI4OjQ1IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IFdhaXQgYmVmb3JlIHBvbGxpbmcgaWYgcXVldWUgaXMgZW1wdHkKLQkgIEluIGtlcm5lbCBiZWZvcmUgMy4xNywgcG9sbGluZyBkdXJpbmcgcXVldWUgdW5kZXJydW4gd291bGQgdW5ibG9jayByaWdodAotCSAgYXdheSBhbmQgdHJpZ2dlciBQT0xMRVJSLiBBcyB3ZSBhcmUgbm90IGhhbmRsaW5nIFBPTExFUlIsIHdlIHdvdWxkIGVuZHVwCi0JICBibG9ja2luZyBpbiBEUUJVRiBjYWxsLCB3aGljaCB3b24ndCBiZSB1bmJsb2NrZWQgY29ycmVjdGx5IHdoZW4gZ29pbmcKLQkgIHRvIE5VTEwgc3RhdGUuIEEgZGVhZGxvY2sgYXQgc3RhcnQgY2F1c2VkIGJ5IGxvY2tpbmcgZXJyb3IgaW4gbGlidjRsMiB3YXMKLQkgIGFsc28gc2VlbiBiZWZvcmUgdGhpcyBwYXRjaC4gSW5zdGVhZCwgd2Ugd2FpdCB1bnRpbCB0aGUgcXVldWUgaXMgbm8gbG9uZ2VyCi0JICBlbXB0eSBiZWZvcmUgcG9sbGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEwMTUKLQotMjAxNC0wNy0wMiAxNjowMTo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBmb3IgbWlrZXkgYXBpIGNoYW5nZQotCi0yMDE0LTA2LTMwIDEwOjI5OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBmaXggcHJvYmluZyBhbmQgZW51bWVyYXRpb24gb2Ygc3RlcHdpc2UgZnJhbWUgc2l6ZXMKLQkgIFRoZSBjb2RlIGVudW1lcmF0aW5nIFNURVBXSVNFIGZyYW1lc2l6ZXMgd291bGQgc3RhcnQgZnJvbQotCSAgKG1pbl93LCBtaW5faCkgYW5kIHRoZW4gYWRkIChzdGVwX3csIHN0ZXBfaCkgdG8gZ2V0IHRoZQotCSAgbmV4dCBmcmFtZXNpemUuIEhvd2V2ZXIsIGl0IHNob3VsZCByZWFsbHkgYWxsb3cgYW55IHdpZHRoCi0JICBmcm9tIG1pbl93IHRvIG1heF93IHdpdGggc3RlcF93IGFuZCBzYW1lIGZvciBoZWlnaHRzLgotCSAgU2Vjb25kbHksIHdlIHdvdWxkIGFkZCBhbmQgcHJvYmUgZWFjaCBpbmRpdmlkdWFsIHN0ZXBwZWQKLQkgIGZyYW1lIHNpemUgdG8gdGhlIGNhcHMgYXMgc2VwYXJhdGUgc3RydWN0dXJlLCB3aGljaCB3b3VsZAotCSAgbGVhZCB0byBodW5kcmVkcyBpZiBub3QgdGhvdXNhbmRzIG9mIHN0cnVjdHMgZW5kaW5nIHVwIGluCi0JICB0aGUgcHJvYmVkIGNhcHMuIFVzZSBpbnRlZ2VyIHJhbmdlcyB3aXRoIHN0ZXBzIGluc3RlYWQuCi0JICBUaGlzIHdhcyBwYXJ0aWN1bGFybHkgbm90aWNhYmxlIHdpdGggdGhlIFJhc3BiZXJyeSBQaSBDYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NTIxCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyNDU4Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2NTIxCi0KLTIwMTQtMDYtMjcgMTE6MzM6MDYgKzAxMDAgIERhbmllbCBEcmFrZSA8ZHJha2VAZW5kbGVzc20uY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBkcm9wIHdvcmthcm91bmQgZm9yIG1pc2JlaGF2aW5nIFRSWV9GTVQKLQkgIFRoaXMgd29ya2Fyb3VuZCBmcm9tIDIwMTEgd2FzIGNhdXNpbmcgMjUgU19GTVQgaW9jdGxzIHRvIGJlIHNlbnQKLQkgIHRvIG15IFVWQyB3ZWJjYW0gZnJvbSB1bmRlciBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHMgYXMgaXQgcHJvYmVzCi0JICBhbGwgdGhlIGZvcm1hdHMuIEluIHRvdGFsLCB0aGlzIGFkZHMgdXAgdG8gYWJvdXQgNSBzZWNvbmRzIG9mCi0JICBleGVjdXRpb24gdGltZSwgb3IgYSAxMCBzZWNvbmQgZGVsYXkgd2hpbGUgc3RhcnRpbmcgdXAgY2hlZXNlLgotCSAgVGhlc2UgaW9jdGxzIGNvbWUgZnJvbSBhIHdvcmthcm91bmQgZnJvbSAyMDExIHdoZXJlIFRSWV9GTVQgbWlnaHQKLQkgIG1ha2UgY2hhbmdlcyB0byBoYXJkd2FyZSBzZXR0aW5ncywgc28gU19GTVQgd2FzIHVzZWQgdG8gcmVzdG9yZQotCSAgdGhlIG9yaWdpbmFsIGNvbmZpZzoKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkwNjcKLQkgIFRoZSBkcml2ZXIgYnVnIGlzIG5vdyBhc3N1bWVkIGZpeGVkLiBSZW1vdmUgdGhlIHdvcmthcm91bmQgdG8gZml4IHRoZQotCSAgbG9uZyBzdGFydHVwIGRlbGF5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjMyNgotCi0yMDE0LTA3LTAxIDEyOjUwOjMxICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IHJlc2V0IFFvUyBvbiBzZWdtZW50IGV2ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyNTQwCi0KLTIwMTQtMDctMDEgMTU6MTQ6MzQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHNlbmQgZ2FwIGV2ZW50cyBpbnN0ZWFkIG9mIHNlZ21lbnQgdHJpY2tzCi0JICBUaGlzIGZpeGVzIG1pc3NpbmcgZnJhbWVzIGZyb20gYmVpbmcgdGltZSBza2lwcGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjM3MgotCi0yMDE0LTA2LTMwIDAwOjAwOjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBGaXggbWVtb3J5IGxlYWtzIGluIHVuaXQgdGVzdAotCi0yMDE0LTA2LTI5IDIzOjU1OjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogRG9uJ3QgbGVhayBjYXBzCi0KLTIwMTQtMDYtMjkgMjA6MDI6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IEZpeCBjb21waWxlciB3YXJuaW5nIHdoZW4gY29tcGlsaW5nIHdpdGggR19ESVNBQkxFX0FTU0VSVAotCi0yMDE0LTA2LTI5IDE5OjU5OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogRml4IGNvbXBpbGVyIHdhcm5pbmcgd2hlbiBjb21waWxpbmcgd2l0aCBHX0RJU0FCTEVfQVNTRVJUCi0KLTIwMTQtMDYtMjkgMTk6NTc6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBGaXggY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCBHX0RJU0FCTEVfQVNTRVJUCi0KLTIwMTQtMDYtMjkgMTk6NTQ6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBjb21waWxlciB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIEdfRElTQUJMRV9BU1NFUlQKLQotMjAxNC0wNi0yOSAxNzowNToxMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlcHJvdmlkZXIuYzoKLQkgIHB1bHNlOiBmaXggY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCAtREdfRElTQUJMRV9BU1NFUlQKLQkgIENvbXBpbGVyIGNvbXBsYWlucyBhYm91dCB1bmluaXRpYWxpc2VkIHZhcmlhYmxlcyBpbiB0aGUgaW1wb3NzaWJsZQotCSAgJ2RlZmF1bHQnIGNvZGUgcGF0aCBpbiBkZXZpY2UgcHJvdmlkZXIgc291cmNlL3Npbmsgc3dpdGNoLWNhc2UuCi0KLTIwMTQtMDYtMjkgMTc6MDM6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vwcm92aWRlci5jOgotCSAgdjRsMjogZml4IGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gY29tcGlsaW5nIHdpdGggLURHX0RJU0FCTEVfQVNTRVJUCi0JICBDb21waWxlciBjb21wbGFpbnMgYWJvdXQgdW5pbml0aWFsaXNlZCB2YXJpYWJsZXMgaW4gdGhlIGltcG9zc2libGUKLQkgICdkZWZhdWx0JyBjb2RlIHBhdGggaW4gZGV2aWNlIHByb3ZpZGVyIHNvdXJjZS9zaW5rIHN3aXRjaC1jYXNlLgotCi0yMDE0LTA2LTI4IDE3OjQwOjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tYXRyb3NrYXBhcnNlLmM6Ci0JICB0ZXN0czogbWF0cm9za2FwYXJzZTogZmFpbCBvbiBlcnJvcnMgYW5kIGRpc2FibGUgcHVsbCBtb2RlIHRlc3QKLQkgIEFjdHVhbGx5IGxvb2sgZm9yIGVycm9yIG1lc3NhZ2VzIG9uIHRoZSBidXMgYW5kIGZhaWwgaWYgdGhlcmUKLQkgIGlzIG9uZSBiZWZvcmUgdGhlIEVPUyBtZXNzYWdlLiBEaXNhYmxlIHB1bGwgbW9kZSB0ZXN0IHdoaWNoIGlzCi0JICBwb2ludGxlc3MgYXMgbG9uZyBhcyBtYXRyb3NrYXBhcnNlIG9ubHkgc3VwcG9ydHMgcHVzaCBtb2RlCi0JICAocHVsbCBtb2RlIHN1cHBvcnQgaGFzIG5vdCBiZWVuIHBvcnRlZCBvdmVyIHRvIDEuMCkuCi0KLTIwMTQtMDYtMjggMTc6Mzc6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FwYXJzZTogZG9uJ3QgZXJyb3Igb3V0IGlmIHRoZXJlJ3Mgbm90IGVub3VnaCBkYXRhIGluIHRoZSBhZGFwdGVyCi0JICBnc3RfbWF0cm9za2FfcGFyc2VfdGFrZSgpIHdvdWxkIHJldHVybiBGTE9XX0VSUk9SIGluc3RlYWQgb2YKLQkgIEZMT1dfRU9TIGluIGNhc2UgdGhlcmUncyBsZXNzIGRhdGEgaW4gdGhlIGFkYXB0ZXIgdGhhbiByZXF1ZXN0ZWQsCi0JICBiZWNhdXNlIGJ1ZmZlciBpcyBOVUxMIGluIHRoYXQgY2FzZSB3aGljaCB0cmlnZ2VycyB0aGUgZXJyb3IKLQkgIGNvZGUgcGF0aC4gVGhpcyBtYWRlIHRoZSB1bml0IHRlc3QgZmFpbCAob2NjYXNpb25hbGx5IGF0IGxlYXN0LAotCSAgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgdW5pdCB0ZXN0IHRoZXJlJ3MgYSByYWNlIGFuZCBpdCB3b3VsZAotCSAgaGFwcGVuIG9ubHkgc3BvcmFkaWNhbGx5KS4KLQotMjAxNC0wNi0yOCAxNjo1Mzo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuaDoKLQkgIHZpZGVvbWl4ZXI6IFVwZGF0ZSBkaXN0IGdlbmVyYXRlZCBPUkMgZmlsZXMKLQotMjAxNC0wNi0yOCAxNjo0ODoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvZ3N0Y21zLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9nc3RjbXMuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvY29udmVydC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9jb252ZXJ0Lmg6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLm9yYzoKLQkgIHZpZGVvbWl4ZXI6IFVwZGF0ZSB2aWRlb2NvbnZlcnQgY29kZSBmcm9tIC1iYXNlCi0JICBBbmQgYWxzbyByZW5hbWUgdGhlIHJlbWFpbmluZyBzeW1ib2xzIHRvIHByZXZlbnQgY29uZmxpY3RzCi0JICBkdXJpbmcgc3RhdGljIGxpbmtpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4NDQzCi0KLTIwMTQtMDYtMjggMTM6MDE6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b3ZpZGVvc3JjOiB1c2UgdmlkZW90ZXN0c3JjIGFzIGZhbGxiYWNrIGVsZW1lbnQgaW5zdGVhZCBvZiBmYWtlc3JjCi0JICBmYWtlc3JjIGRvZXNuJ3QgYW5ub3VuY2UgdmlkZW8gY2Fwcywgc28gbW9zdCB2aWRlbyBwaXBlbGluZXMgd2lsbAotCSAganVzdCBlcnJvciBvdXQgd2l0aCBub3QtbmVnb3RpYXRlZCBpZiBhIGZhbGxiYWNrIGVsZW1lbnQgaXMgY3JlYXRlZC4KLQotMjAxNC0wNi0yOCAxMjo0NDozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0Lmg6Ci0JICBhdXRvYXVkaW9zcmM6IHVzZSBhdWRpb3Rlc3RzcmMgYXMgZmFsbGJhY2sgZWxlbWVudCBpbnN0ZWFkIG9mIGZha2VzcmMKLQkgIGZha2VzcmMgZG9lc24ndCBhbm5vdW5jZSBhdWRpbyBjYXBzLCBzbyBtb3N0IGF1ZGlvIHBpcGVsaW5lcyB3aWxsCi0JICBqdXN0IGVycm9yIG91dCB3aXRoIG5vdC1uZWdvdGlhdGVkIGlmIGEgZmFsbGJhY2sgZWxlbWVudCBpcyBjcmVhdGVkLgotCi09PT0gcmVsZWFzZSAxLjMuOTAgPT09Ci0KLTIwMTQtMDYtMjggMTE6MjE6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMy45MAotCi0yMDE0LTA2LTI4IDExOjA4OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA2LTI2IDE0OjUyOjU3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvTWFrZWZpbGUuYW06Ci0JKiBleHQvcHVsc2UvcGx1Z2luLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VkZXZpY2Vwcm92aWRlci5jOgotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlcHJvdmlkZXIuaDoKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmRldmljZXByb3ZpZGVyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuaDoKLQkgIFJlbmFtZSBHc3REZXZpY2VNb25pdG9yIHRvIEdzdERldmljZVByb3ZpZGVyCi0KLTIwMTQtMDYtMjQgMDk6MTQ6NDAgKzA1MzAgIFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEFkZCB1bml0IHRlc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzIxNDQKLQotMjAxNC0wNi0xNiAxMTozNTozOSArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogRGVjbGFyZSBhcyBDb21wb3NpdG9yIGluICdrbGFzcycKLQotMjAxNC0wNi0yNiAxMzo1MDoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGZpeCBzcGVleCBjYXBzCi0JICBEZWNvZGVyIGNvbXBsYWlucyBhYm91dCAibm90aWZpY2F0aW9uOiBJbnZhbGlkIG1vZGUgZW5jb3VudGVyZWQuCi0JICBUaGUgc3RyZWFtIGlzIGNvcnJ1cHRlZCIgdGhvdWdoLCBldmVuIGlmIGl0IHdvcmtzLCBzbyB0aGVyZSdzCi0JICBwcm9iYWJseSBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgZ2VuZXJhdGVkIGNvZGVjIGhlYWRlcnMuCi0KLTIwMTQtMDYtMjYgMTM6NDM6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IGZpeCBzcGVleCBpbiBGTFYKLQkgIFNwZWV4IGluIEZMViBpcyBhbHdheXMgbW9ubyBAIDE2a0h6LCBzZWUKLQkgIGh0dHA6Ly9kb3dubG9hZC5tYWNyb21lZGlhLmNvbS9mNHYvdmlkZW9fZmlsZV9mb3JtYXRfc3BlY192MTBfMS5wZGYKLQkgIHNlY3Rpb24gRS40LjIuMTogIklmIHRoZSBTb3VuZEZvcm1hdCBpbmRpY2F0ZXMgU3BlZXgsIHRoZSBhdWRpbyBpcwotCSAgY29tcHJlc3NlZCBtb25vIHNhbXBsZWQgYXQgMTYga0h6LCB0aGUgU291bmRSYXRlIHNoYWxsIGJlIDAsIHRoZQotCSAgU291bmRTaXplIHNoYWxsIGJlIDEsIGFuZCB0aGUgU291bmRUeXBlIHNoYWxsIGJlIDAiCi0JICBBbHNvIHNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzNjIyCi0KLTIwMTQtMDYtMjYgMDU6MTk6NTcgKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIGlzb21wNDogQWRkIG9iamVjdCB0eXBlIGlkIGFuZCBmb3VyY2MgZm9yIERUUy9EVFMtSEQKLQkgIEVuYWJsZXMgcGxheWJhY2sgZm9yIGZpbGVzIHdpdGggRFRTIGF1ZGlvIHRyYWNrcy4KLQkgIEFsc28gYWRkIGFuIGV4dHJhIEFDLTMgdmFyaWFudCBmb3VyY2MgZnJvbSBOZXJvCi0KLTIwMTQtMDMtMTMgMTA6MzU6MzAgKzAxMDAgIERhdmlkIEZlcm5hbmRleiA8ZC5mZXJuYW5kZXpsb3BAZ21haWwuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjI6IFNvbHZlIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNyYyBjYXBzIGFyZSBjb25maWd1cmVkCi0JICBDaGFuZ2UgZnVuY3Rpb24gcG9pbnRlcnMgdG8gTlVMTCB3aGlsZSBob2xkaW5nIHRoZSBsb2NrIHRvIGF2b2lkCi0JICByYWNlIGNvbmRpdGlvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDExMTAKLQotMjAxNC0wNi0yNSAxNDozNDoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBpbXByb3ZlIFNSIHBhY2tldCBoYW5kbGluZwotCSAgSW1wbGVtZW50IDMgZGlmZmVyZW50IGNhc2VzIGZvciBoYW5kbGluZyB0aGUgU1I6Ci0JICAxKSB3ZSBkb24ndCBoYXZlIGVub3VnaCB0aW1pbmcgaW5mb3JtYXRpb24gdG8gaGFuZGxlIHRoZSBTUiBwYWNrZXQgYW5kCi0JICB3ZSBuZWVkIHRvIHdhaXQgYSBsaXR0bGUgZm9yIG1vcmUgUlRQIHBhY2tldHMuIEluIHRoYXQgY2FzZSB3ZSBrZWVwCi0JICB0aGUgU1IgcGFja2V0IGFyb3VuZCBhbmQgcmV0cnkgd2hlbiB3ZSBnZXQgYW4gUlRQIHBhY2tldCBpbiB0aGUKLQkgIGNoYWluIGZ1bmN0aW9uLgotCSAgMikgdGhlIFNSIHBhY2tldCBoYXMgYSB0b28gb2xkIHRpbWVzdGFtcCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZC4gSXQgaXMKLQkgIGxhYmVsZWQgaW52YWxpZCBhbmQgdGhlIGxhc3Rfc3IgaXMgY2xlYXJlZC4KLQkgIDMpIHRoZSBTUiBwYWNrZXQgaXMgb2sgYW5kIHRoZXJlIGlzIGVub3VnaCB0aW1pbmcgaW5mb3JtYXRpb24sIHByb2NlZWQKLQkgIHdpdGggcHJvY2Vzc2luZyB0aGUgU1IgcGFja2V0LgotCSAgQmVmb3JlIHRoaXMgcGF0Y2gsIGNhc2UgMikgYW5kIDEpIHdlcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXksCi0JICByZXN1bHRpbmcgdGhhdCBTUiBwYWNrZXRzIHdpdGggdG9vIG9sZCB0aW1lc3RhbXBzIHdlcmUgY2hlY2tlZCBvdmVyIGFuZAotCSAgb3ZlciBhZ2FpbiBmb3IgZWFjaCBSVFAgcGFja2V0LgotCi0yMDE0LTA2LTI0IDEwOjQ3OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzaW5rLmM6Ci0JICB0ZXN0czogYWRkIHVkcHNpbmsgdGVzdCB0byBjaGVjayBjbGllbnQgYWRkL3JlbW92ZQotCi0yMDE0LTA2LTIzIDE2OjEzOjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzaW5rLmM6Ci0JICB0ZXN0czogcG9ydCB1ZHBzaW5rIHRlc3RzIHRvIDEuMAotCSAgVGhleSBhbGwgc2VlbSBhIGJpdCBwb2ludGxlc3MgdGhvdWdoLgotCi0yMDE0LTA2LTIzIDE5OjU1OjI5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBBZGQgVVlWWSBmb3JtYXQKLQotMjAxNC0wNi0wNiAxMToyMDoyMSArMDIwMCAgTWlndWVsIFBhcsOtcyBEw61heiA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgZ3N0cnRwc3NyY2RlbXV4OiBtYW5hZ2Ugc3NyYyBvZiBSVENQIFJSIHBhY2tldHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEzMjQKLQotMjAxNC0wNi0yMyAyMDo1Mzo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogVXBkYXRlIG9mZnNldCBhZnRlciBwYXJzaW5nIGFkdGwgY2h1bmsKLQkgIE90aGVyd2lzZSB3ZSB3aWxsIHBhcnNlIGl0IG92ZXIgYW5kIG92ZXIgYWdhaW4gd2l0aG91dCBldmVyCi0JICBnZXR0aW5nIHBhc3QgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNTMzCi0KLTIwMTMtMDctMDcgMjA6MTg6MjcgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogcmVtb3ZlIGxlZ2FjeSBjb2RlIGZvciBwYXNzaW5nIGEgd2luZG93IGhhbmRsZQotCSAgImhhdmUtbnMtdmlldyIgYW5kIHRoZSAiZW1iZWQiIHByb3BlcnR5IHdhcyBrZXB0IGluIDAuMTAgZm9yCi0JICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBidXQgaXQncyBubyBsb25nZXIgdXNlZCBpbiBmYXZvciBvZgotCSAgdGhlIEdzdFZpZGVvT3ZlcmxheSBpbnRlcmZhY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDM3NTMKLQotMjAxNC0wNi0yMiAxOTozNjoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi0yMDE0LTA2LTIyIDE5OjI2OjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IERvbid0IGNhbGwgR1NUX0RFQlVHX09CSkVDVCgpIGFuZCBvdGhlciBtYWNyb3Mgd2l0aCBub24tR09iamVjdCBvYmplY3RzCi0JICBJdCB3aWxsIGNyYXNoIHdpdGggbGF0ZXN0IEdMaWIgR0lUIGFuZCB3YXMgbmV2ZXIgc3VwcG9zZWQgdG8gd29yayBiZWZvcmUKLQkgIGVpdGhlci4KLQotPT09IHJlbGVhc2UgMS4zLjMgPT09Ci0KLTIwMTQtMDYtMjIgMTg6MDg6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjMuMwotCi0yMDE0LTA2LTIyIDE3OjM2OjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDE0LTA2LTIyIDE0OjI0OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxNC0wNi0yMSAwMTozMjowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlbW9uaXRvci5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmRldmljZW1vbml0b3IuYzoKLQkgIHB1bHNlLCB2NGwyOiB1cGRhdGUgZm9yIGRldmljZSAia2xhc3MiIC0+ICJkZXZpY2UtY2xhc3MiIHJlbmFtZQotCi0yMDE0LTA2LTIwIDEyOjIxOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBvcHRpbWlzYXRpb246IGF2b2lkIHVubmVjZXNzYXJ5IG1lbW9yeSByZWYvdW5yZWZzCi0JICBXZSBrbm93IHRoZSBidWZmZXIgd2lsbCBzdGF5IHZhbGlkIGFuZCB3ZSB3aWxsIGFsc28gbm90Ci0JICBtb2RpZnkgdGhlIGJ1ZmZlciwgd2UganVzdCB3YW50IHRvIHNlbmQgb3V0IHRoZSBkYXRhLgotCi0yMDE0LTA2LTE5IDE0OjU5OjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIG11bHRpdWRwc2luazogYXZvaWQgc29tZSB1bm5lY2Vzc2FyeSBydW4tdGltZSB0eXBlIGNoZWNrcwotCi0yMDE0LTA2LTE5IDE2OjE3OjIzICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcGFzcyB0aGUgc3RyZWFtIGlkIHdoZW4gYXNraW5nIGZvciBjcnlwdG8gcGFyYW1zCi0JICBUaGlzIHdheSB0aGUgYXBwIGNhbiBjaG9vc2UgZGlmZmVyZW50IHBhcmFtZXRlcnMgZm9yIGVhY2ggc3RyZWFtLgotCi0yMDE0LTA1LTIwIDE0OjU4OjA3IC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogYWRkIHN1cHBvcnQgZm9yIGtleSBsZW5ndGggcGFyYW1ldGVycwotCSAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnRzIGZvciB0aGUgaW5jb21pbmcga2V5IG1hbmFnZW1lbnQgcGFyYW1ldGVycyBmb3IKLQkgIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGtleSBsZW5ndGhzLgotCSAgSXQgYWxzbyBhZGRzIGEgbmV3IHNpZ25hbCByZXF1ZXN0LXJ0Y3Ata2V5IHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvCi0JICBwcm92aWRlIHRoZSBjcnlwdG8gcGFyYW1ldGVycyBhbmQga2V5IGZvciB0aGUgUlRDUCBzdHJlYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNDczCi0KLTIwMTQtMDYtMTkgMTU6MjU6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmM6Ci0JICB2cDhkZXBheTogZml4IGhlYWRlciBzaXplIGNoZWNraW5nCi0JICBVc2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZSB0byBtYWtlIGl0IGNsZWFyIHRoYXQgd2UgYXJlIGNhbGN1bGF0aW5nCi0JICB0aGUgaGVhZGVyIHNpemUuCi0JICBDb3JyZWN0bHkgY2hlY2sgdGhhdCB3ZSBoYXZlIGVub3VnaCBieXRlcyB0byByZWFkIHRoZSBoZWFkZXIgYml0cy4gV2UKLQkgIHdlcmUgY2hlY2tpbmcgaWYgdGhlcmUgd2VyZSA1IGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgaGVhZGVyIHdoaWxlIHdlCi0JICBvbmx5IG5lZWRlZCAzLCBjYXVzaW5nIHRoZSBwYWNrZXQgdG8gYmUgZGlzY2FyZGVkIGFzIHRvbyBzbWFsbC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjM1OTUKLQotMjAxNC0wNS0yMCAxMjozOTozMSArMDIwMCAgR3VpbGxhdW1lIERlc21vdHRlcyA8Z3VpbGxhdW1lLmRlc21vdHRlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5Lmg6Ci0JICBydHBoMjY0cGF5OiBwcm9wYWdhdGUgdGhlIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UIGZsYWcKLQkgIFNpbWlsYXJseSB0byB3aGF0IHdlIGRpZCB3aXRoIHRoZSBERUxUQV9VTklUIGZsYWcsIHRoaXMgcGF0Y2gKLQkgIHByb3BhZ2F0ZXMgdGhlIERJU0NPTlQgZmxhZyB0byB0aGUgZmlyc3QgUlRQIHBhY2tldCBiZWluZyB1c2VkIHRvIHRyYW5zZmVyIGEKLQkgIERJU0NPTlQgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU2MwotCi0yMDE0LTA1LTA2IDE3OjQyOjE0ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IHByb3BhZ2F0ZSB0aGUgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQgZmxhZwotCSAgRG93bnN0cmVhbSBlbGVtZW50cyBtYXkgYmUgaW50ZXJlc3RlZCBrbm93aW5nIGlmIGEgUlRQIHBhY2tldCBpcyB0aGUgc3RhcnQKLQkgIG9mIGEga2V5IGZyYW1lICh0byBpbXBsZW1lbnQgYSBSVFAgZXh0ZW5zaW9uIGFzIGRlZmluZWQgaW4gdGhlCi0JICBPTlZJRiBTdHJlYW1pbmcgU3BlYyBmb3IgZXhhbXBsZSkuCi0JICBXZSBkbyB0aGlzIGJ5IGNoZWNraW5nIHRoZSBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCBmbGFnIHdlIHJlY2VpdmUgZnJvbQotCSAgdXBzdHJlYW0gYW5kIHByb3BhZ2F0ZSBpdCB0byB0aGUgKmZpcnN0KiBSVFAgcGFja2V0IG91dHB1dHRlZCB0byB0cmFuc2ZlciB0aGlzCi0JICBidWZmZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNTYzCi0KLTIwMTQtMDUtMjAgMTM6NTg6MjAgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOgotCSAgZ3N0cnRwbXA0Z3BheTogcHJvcGFnYXRlIHRoZSBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCBmbGFnCi0JICBQcm9wYWdhdGUgdGhlIERJU0NPTlQgZmxhZyB0byB0aGUgZmlyc3QgUlRQIHBhY2tldCBiZWluZyB1c2VkIHRvIHRyYW5zZmVyCi0JICBhIERJU0NPTlQgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDU2MwotCi0yMDE0LTA1LTIwIDEzOjU4OjIwICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiBwcm9wYWdhdGUgdGhlIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UIGZsYWcKLQkgIFByb3BhZ2F0ZSB0aGUgRElTQ09OVCBmbGFnIHRvIHRoZSBmaXJzdCBSVFAgcGFja2V0IGJlaW5nIHVzZWQgdG8gdHJhbnNmZXIKLQkgIGEgRElTQ09OVCBidWZmZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNTYzCi0KLTIwMTQtMDYtMTggMTU6MDM6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBkb24ndCBsZWFrIGZsb3cgY29tYmluZXIKLQotMjAxNC0wNi0xOCAxNDozODo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkgIHJ0cGpwMmtwYXk6IHByZS1hbGxvY2F0ZSBidWZmZXItbGlzdCBvZiB0aGUgcmlnaHQgc2l6ZQotCi0yMDE0LTA2LTE4IDE0OjM0OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXk6IHByZS1hbGxvY2F0ZSBidWZmZXIgbGlzdCBvZiB0aGUgcmlnaHQgc2l6ZQotCi0yMDE0LTA2LTE4IDE0OjE5OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkgIHJ0cG1wNHZwYXk6IHByZS1hbGxvY2F0ZSBidWZmZXIgbGlzdCBvZiB0aGUgcmlnaHQgc2l6ZQotCi0yMDE0LTA2LTE4IDEzOjQ0OjMxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSAgcnRwdnA4cGF5OiBhbGxvY2F0ZSBiaXRyZWFkZXIgb24gdGhlIHN0YWNrCi0KLTIwMTQtMDYtMTggMTM6Mjk6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDhwYXk6IHBvc3QgZXJyb3IgbWVzc2FnZSBvbiBidXMgb24gZXJyb3IgYW5kIGRvbid0IHVzZSBnX21lc3NhZ2UoKQotCi0yMDE0LTA2LTE4IDEzOjIwOjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSAgcnRwdnA4cGF5OiBjb3VwbGUgb2YgbWlub3Igb3B0aW1pc2F0aW9ucwotCSAgUHJlLWFsbG9jYXRlIGJ1ZmZlciBsaXN0IG9mIHRoZSByaWdodCBzaXplIHRvIGF2b2lkIHJlLWFsbG9jcy4KLQkgIEF2b2lkIHBsZW50eSBvZiBkb3VibGUgcnVudGltZSBjYXN0IGNoZWNrcyBhbmQgcmUtZG9pbmcgdGhlCi0JICBzYW1lIGNhbGN1bGF0aW9uIG92ZXIgYW5kIG92ZXIgYWdhaW4gaW4gcnRwX3ZwOF9jYWxjX3BheWxvYWRfbGVuKCkuCi0JICBPbmx5IGNhbGwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSgpIG9uY2UuCi0KLTIwMTQtMDYtMTggMDg6MTA6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBydHBnc3RwYXk6IHByZS1hbGxvY2F0ZSBidWZmZXIgbGlzdCBvZiB0aGUgcmlnaHQgc2l6ZQotCSAgVG8gYXZvaWQgcmUtYWxsb2NzLgotCi0yMDE0LTA2LTE4IDA3OjUyOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IHByZS1hbGxvY2F0ZSBidWZmZXJsaXN0IG9mIHRoZSByaWdodCBzaXplCi0JICBUbyBhdm9pZCB1bm5lY2Vzc2FyeSByZS1hbGxvY3MuCi0KLTIwMTQtMDYtMTYgMjA6MTU6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIHJ0cGgyNjRwYXk6IHB1c2ggc2luZ2xlIGJ1ZmZlciBkaXJlY3RseSwgbm8gbmVlZCB0byB3cmFwIGl0IGluIGEgYnVmZmVybGlzdAotCSAgTm8gcG9pbnQgaW4gYSBidWZmZXIgbGlzdCBpZiB3ZSBqdXN0IGhhdmUgb25lIHNpbmdsZQotCSAgYnVmZmVyIHRvIHB1c2guIEZpeCB1cCB1bml0IHRlc3QgdG8gaGFuZGxlIHRoYXQgY2FzZQotCSAgYXMgd2VsbC4KLQotMjAxNC0wNi0xNiAxNTozNToxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuaDoKLQkgIHJ0cHZyYXdwYXk6IG1ha2UgY2h1bmtzIHBlciBmcmFtZSBjb25maWd1cmFibGUKLQkgIEJpdCBvZiBhIG1pc25vbWVyIGJlY2F1c2UgaXQncyByZWFsbHkgY2h1bmtzIHBlciBmaWVsZAotCSAgYW5kIG5vdCBwZXIgZnJhbWUsIGJ1dCB3ZSdyZSBnb2luZyB0byBpZ25vcmUgdGhhdCBmb3IKLQkgIHRoZSB0aW1lIGJlaW5nLgotCi0yMDE0LTA2LTE2IDE0OjUyOjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5oOgotCSAgcnRwdnJhd3BheTogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKLQotMjAxNC0wNi0xNiAxNDo0NDoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBydHB2cmF3cGF5OiBwcmUtYWxsb2NhdGUgYnVmZmVyIGxpc3RzIG9mIHN1ZmZpY2llbnQgc2l6ZQotCSAgQXZvaWRzIHVubmVjZXNzYXJ5IHJlYWxsb2NzIHdoZW4gYXBwZW5kaW5nIGJ1ZmZlcnMKLQkgIHRvIHRoZSBidWZmZXJsaXN0LgotCi0yMDE0LTA2LTE2IDEzOjUxOjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHJ0cHZyYXdwYXk6IG1pY3JvLW9wdGltaXNlIHZhcmlhYmxlIGFjY2VzcyBpbiBpbm5lciBsb29wCi0JICBTdG9yZSBzb21lIHZhbHVlcyB0aGF0IGRvbid0IGNoYW5nZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbgotCSAgb2YgdGhlIGlubmVyIGxvb3BzIGxvY2FsbHksIHNvIHRoZSBjb21waWxlciBrbm93cyB0aGF0IHRvby4KLQotMjAxNC0wNi0xNiAxMzozODo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBydHB2cmF3cGF5OiB1c2UgYnVmZmVyIGxpc3RzCi0JICBDb2xsZWN0IGJ1ZmZlcnMgdG8gc2VuZCBvdXQgaW4gYnVmZmVyIGxpc3RzIGluc3RlYWQgb2YKLQkgIHB1c2hpbmcgb3V0IHNpbmdsZSBidWZmZXJzIG9uZSBhdCBhIHRpbWUuIEZvciBIRCB2aWRlbwotCSAgZWFjaCBmcmFtZSBtaWdodCBlYXNpbHkgYWRkIHVwIHRvIGEgY291cGxlIG9mIHRob3VzYW5kCi0JICBwYWNrZXRzLCBtdWx0aXBseSB0aGF0IGJ5IHRoZSBmcmFtZSByYXRlIGFuZCB0aGF0J3MgYQotCSAgbG90IG9mIHB1c2goKSBhbmQgc2VuZG1zZygpIGNhbGxzIHBlciBzZWNvbmQuCi0JICBBIGdvb2QgcmVhc29uIHRvIHB1c2ggb3V0IGJ1ZmZlcnMgYXMgZWFybHkgYXMgcG9zc2libGUgaXMKLQkgIGxhdGVuY3ksIHNvIHdlIGRvbid0IGFjY3VtdWxhdGUgdGhlIHdob2xlIGZyYW1lIGluIGEgc2luZ2xlCi0JICBidWZmZXIgbGlzdCwgYnV0IGluc3RlYWQgcHVzaCBpdCBvdXQgaW4gYSBmZXcgY2h1bmtzLCB3aGljaAotCSAgaXMgaG9wZWZ1bGx5IGEgcmVhc29uYWJsZSBjb21wcm9taXNlLgotCi0yMDE0LTA2LTE2IDE2OjQwOjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICB1ZHA6IGltcHJvdmUgZWxlbWVudCBkZXNjcmlwdGlvbnMgZm9yIGR5bnVkcHNpbmsgYW5kIG11bHRpdWRwc2luawotCi0yMDE0LTA2LTE2IDE2OjE3OjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICB1ZHA6IHJlbW92ZSBzdXBwcmVzc2lvbiBvZiBjb21waWxlciB3YXJuaW5ncyBmb3IgZGVwcmVjYXRlZCBHTGliIEFQSQotCSAgTm90IG5lZWRlZCBhbnkgbW9yZS4KLQotMjAxNC0wNi0xNyAxMzoxNjoyNyArMDUzMCAgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEZpeCBjYXBzIG5lZ290aWF0aW9uIGlzc3VlCi0JICBNYWtlIHN1cmUgdGhhdCBpZiBBWVVWIGlzIHJlY2VpdmVkIGl0IHdpbGwgZGV0ZWN0IHRoYXQgaXQgY2FuIHByb2R1Y2UKLQkgIGJvdGggUkdCIGFuZCBZVVYgZm9ybWF0cwotCSAgU2lnbmVkLW9mZi1ieTogUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1MjQ4Ci0KLTIwMTQtMDYtMTYgMTI6MDI6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkgIHJ0cHRoZW9yYWRlcGF5OiBmaXggZG91YmxlIGZyZWVzCi0JICBGaXggZG91YmxlLWZyZWVzIGludHJvZHVjZWQgdG8gZml4IGFub3RoZXIgY292ZXJpdHkgcmVwb3J0LgotCSAgQ0lEIDEyMjMwNTMKLQotMjAxNC0wNi0xMyAxMDoxMjowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JICBkeW51ZHBzaW5rOiByZXR1cm4gRkxVU0hJTkcgd2hlbiBzZW5kdG8gZ290IGNhbmNlbGVkLCBub3QgYW4gZXJyb3IKLQotMjAxNC0wNi0xMyAwOTo1MjowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzoKLQkgIG9zczogc2ltcGxpZnkgcHJvYmVkIGNhcHMgYmVmb3JlIHJldHVybmluZyB0aGVtCi0JICBFeHBvc2VzIGFsbCBmb3JtYXRzIGluIHRoZSBmaXJzdCBzdHJ1Y3R1cmUgaWYgdGhlCi0JICByZXN0IGlzIHRoZSBzYW1lIGZvciBhbGwgb2YgdGhlbS4KLQotMjAxNC0wNi0xMyAwOTo0NToyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzoKLQkgIG9zczogbWFrZSBzdXJlIDE2LWJpdCBmb3JtYXRzIGFyZSBiZWZvcmUgOC1iaXQgZm9ybWF0cyBpbiBwcm9iZWQgY2FwcwotCSAgUHJvYmUgc3VwcG9ydGVkIGZvcm1hdHMgaW4gb3JkZXIgb2YgZGVzaXJhYmlsaXR5IHJhdGhlciB0aGFuIGluCi0JICB3aGF0IG9yZGVyIHRoZXkgbWF5IGhhcHBlbiB0byBiZSBpbiB0aGUgZm9ybWF0cyBiaXRtYXNrLiBGaXhlcwotCSAgYWNjaWRlbnRhbGx5IGV4cG9zdXJlIG9mIDgtYml0IGZvcm1hdHMgaW4gY2FwcyBiZWZvcmUgMTYtYml0IGZvcm1hdHMKLQkgIChpbiBjYXNlIHdoZXJlIFUxNiB3YXMgbm90IHN1cHBvcnRlZCBTOCBtaWdodCBiZSBsaXN0ZWQgYmVmb3JlIFMxNikuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2ODg0Ci0KLTIwMTQtMDYtMTIgMTY6MzY6MjQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBDbGVhbmx5IGhhbmRsZSB2NGwyX2FsbG9jYXRvcl9uZXcgZmFpbHVyZQotCi0yMDE0LTA2LTEyIDExOjI0OjE1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSAgcnRwdGhlb3JkZXBheTogZml4IGxlYWtzCi0JICBDb3Zlcml0eSAxMjEyMTYzCi0KLTIwMTQtMDYtMTIgMTE6MTY6MDggKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkgIHJ0cGc3MjlwYXk6IGxlYWsgZml4ZXMKLQkgIENvdmVyaXR5IDEyMTIxNTkKLQotMjAxNC0wNi0xMiAxMToxMTozOCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgcnRwaDI2M3BheTogZml4IGxlYWsKLQkgIENvdmVyaXR5IDEyMTIxNTcKLQotMjAxNC0wNi0xMiAxMDo0Mzo1MyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgcnRwaDI2M3BheTogZml4IGxlYWtzCi0JICBDb3Zlcml0eSAxMjEyMTQ5Ci0KLTIwMTQtMDYtMTIgMTA6MzE6NDcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JICBydHBkdnBheTogY2F0Y2ggZmFpbHVyZXMgdG8gbWFwIGJ1ZmZlcgotCSAgQ292ZXJpdHkgMTEzOTc0MQotCi0yMDE0LTA2LTExIDE3OjQzOjQyICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgbXVsdGlwYXJ0ZGVtdXg6IGd1YXJkIGFnYWluc3QgaGF2aW5nIG5vIE1JTUUgdHlwZQotCSAgVGhlIGNvZGUgd291bGQgcHJldmlvdXNseSBjcmFzaCB0cnlpbmcgdG8gaW5zZXJ0IGEgTlVMTCBzdHJpbmcKLQkgIGludG8gYSBoYXNoIHRhYmxlLgotCSAgSXQgZG9lcyBzZWVtIGEgbGl0dGxlIGJyb2tlbiB0aGF0IGluZGV4aW5nIGlzIGRvbmUgYnkgTUlNRSB0eXBlCi0JICBhbmQgbm90IGJ5IGluZGV4IHRob3VnaCwgdW5sZXNzIHRoZSBzcGVjIHNheXMgdGhlcmUgY2Fubm90IGJlCi0JICB0d28gcGFydHMgd2l0aCB0aGUgc2FtZSBNSU1FIHR5cGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU5NTczCi0KLTIwMTQtMDYtMTAgMTU6NDI6MTQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4Lmg6Ci0JICBtdWx0aXBhcnRkZW11eDogU2VuZCBzdHJlYW0tc3RhcnQgZXZlbnQKLQkgIFRoaXMgZXZlbnQgd2FzIG5vdCBzZW50LiBTZW5kIGl0IGJlZm9yZSBjYXBzLCB0aGlzIHJlcXVpcmVzIHRoZSBwYWQgdG8KLQkgIGJlIHBhcmVudGVkLiBUaGlzIHJlbW92ZXMgd2FybmluZyBsaWtlOiAiR290IGRhdGEgZmxvdyBiZWZvcmUKLQkgIHN0cmVhbS1zdGFydCBldmVudCIuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMxNDc1Ci0KLTIwMTQtMDYtMTAgMTU6MzM6MzMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGF2b2lkIGxvb3BpbmcgaW5kZWZpbml0ZWx5IGluIGJyb2tlbiBzdnEzIGZpbGVzCi0JICBBYm9ydCBpZiBhbiBhdG9tIHdpdGggc2l6ZSAwIGlzIHJlYWQgZnJvbSB3aXRoaW4gdGhlIHN2cTMgc3RzZAotCSAgYXRvbXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY1MTIKLQotMjAxNC0wNi0xMCAxMDo1MjoyMyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IGFkZCBjb25zdCB3aGVyZSBhcHByb3ByaWF0ZQotCi0yMDE0LTA2LTA5IDEwOjM5OjIwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4ZW5jOiBhZGQgbWlzc2luZyB2YV9lbmQgaW4gdmFyaWFkaWMgZnVuY3Rpb24KLQkgIENvdmVyaXR5IDExMzk5NDQKLQotMjAxNC0wNi0wOSAxMDowNDozOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IEF0dGVtcHQgdXBzdHJlYW0gc2VlayBmaXJzdAotCSAgSWYgd2UgaGF2ZSBhbiB1cHN0cmVhbSBlbGVtZW50IHRoYXQgY2FuIGhhbmRsZSB0aGUgc2VlayAoc3VjaCBhcwotCSAgcnRtcHNyYyksIHRyeSB0byBkbyB0aGF0IGZpcnN0IGJlZm9yZSBhdHRlbXB0aW5nIGl0IG91cnNlbGYuCi0KLTIwMTQtMDYtMDQgMTE6MzQ6MjcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBkbyBub3QgaW5jbHVkZSBjb2RlY19kYXRhIG9uIHJhdyBhdWRpbyBjYXBzCi0JICBJZiB0aGUgd2F2IGhlYWRlciBjb250YWlucyBhbiBleHRlbmRlZCBjaHVuaywgd2Ugd2FudCB0byBrZWVwCi0JICB0aGUgY29kZWNfZGF0YSBmaWVsZCwgYnV0IG5vdCBmb3IgcmF3IGF1ZGlvLgotCSAgVGhpcyBmaXhlcyBzb21lIGVsZW1lbnRzIChzdWNoIGFzIGFkZGVyKSBmcm9tIGZhaWxpbmcgdG8gaW50ZXJzZWN0Ci0JICByYXcgYXVkaW8gY2FwcyB3aGljaCB3b3VsZCBvdGhlcndpc2UgYmUgaW50ZXJzZWN0YWJsZS4KLQotMjAxNC0wNi0wNSAwOTozODoyOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IFF1ZXJ5IGR1cmF0aW9uIHVwc3RyZWFtIGZpcnN0Ci0JICBVcHN0cmVhbSBlbGVtZW50cyAobGlrZSBydG1wc3JjKSBtaWdodCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIGR1cmF0aW9uCi0JICBtb3JlIGFjY3VyYXRlbHkgdGhhbiBmbHZkZW11eC4gRXNwZWNpYWxseSB3aXRoIGluZGV4LWxlc3Mgdm9kIGZpbGVzCi0KLTIwMTQtMDUtMzAgMTk6Mzc6NTcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBDbGVhbnVwIHBvbGwgbWV0aG9kIGFuZCByZXRyeSBvbiBFSU5UUi9FQUdBSU4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzEwMTUKLQotMjAxNC0wMy0wNiAxNjozNzo1MSArMDEwMCAgSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8amFuLnN0ZWZmZW5zQGdtYWlsLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IHNldCBSRVNZTkMgYnVmZmVyIGZsYWcgd2hlbiBicmlkZ2luZyBsYXJnZSBQVFMgZ2FwcwotCSAgU28gZG93bnN0cmVhbSBnZXRzIG5vdGlmaWVkIHdoZW4gdGhpcyBoYXBwZW5zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTkwMwotCi0yMDE0LTA2LTAzIDE3OjU5OjMyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBydHguYzoKLQkgIHJ0cHJ0eDogUmVzZXQgc3RhdGUgb24gZWFjaCBpdGVyYXRpb24KLQkgIE90aGVyd2lzZSBpdCBkaWRuJ3Qgd2FpdCBmb3IgdGhlIHRlc3QgdG8gZmluaXNoIGJlZm9yZSBjaGVja2luZyB0aGUgcmVzdWx0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjg1MDEKLQotMjAxNC0wNS0wOSAxNDoyMjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBkb24ndCBsZWFrIGRvY3R5cGUgc3RyaW5nIGluIGVycm9yIGNvZGUgcGF0aAotCSAgQ0lEIDEyMTIxNDUuCi0KLTIwMTQtMDUtMjAgMDg6MjA6NDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnA5ZW5jOiBEb24ndCBkZXJlZmVyZW5jZSBOVUxMIGNoZWNrcwotCSAgQ0lEICMxMTk3NzAzCi0KLTIwMTQtMDUtMjAgMDg6MjM6MDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSAgdnA4ZW5jOiBEb24ndCBkZXJlZmVyZW5jZSBOVUxMIHZhcmlhYmxlCi0JICBDSUQgIzExMzk4MzgKLQotMjAxNC0wNS0zMCAxNDozMjo0MiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogdXBzdHJlYW0gaGFuZGxlcyBzZWVrIGlmIGZyYWdtZW50ZWQgYW5kIG9uIHRpbWUgc2VnbWVudAotCSAgT3RoZXJ3aXNlIHdlIGNhbiByZWplY3Qgc2Vla3Mgb24gbG9jYWwgZmlsZXMgdGhhdCBjb250YWluIGZyYWdtZW50ZWQtbGlrZQotCSAgYXRvbXMgbGlrZSAnbXZleCcuIEFsc28gaW1wcm92ZSBhIG1lc3NhZ2UgbG9nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNzIyCi0KLTIwMTQtMDUtMzAgMTY6NDM6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgaDI2NGRlcGF5OiBtYWtlIHN1cmUgd2UgY2FsbCBoYW5kbGVfbmFsIGZvciBlYWNoIE5BTAotCSAgQ2FsbCBoYW5kbGVfbmFsIGZvciBlYWNoIE5BTCBpbiB0aGUgU1RBUC1BIFJUUCBwYWNrZXQuIFRoaXMgbWFrZXMKLQkgIHN1cmUgd2UgY29ycmVjdGx5IGV4dHJhY3QgdGhlIFNQUyBhbmQgUFBTLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDk5OQotCi0yMDE0LTA1LTA3IDE0OjA5OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIHNvdXBodHRwc3JjOiBBZGQgY3VzdG9tIHN0aWNreSBldmVudCB0byBjb250YWluIHRoZSBIVFRQIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhlYWRlcnMKLQkgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBlLmcuIGdldCBjb29raWUgaW5mb3JtYXRpb24gZG93bnN0cmVhbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk3MDcKLQotMjAxNC0wNS0yNiAxOTo0NzozOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiByZW1vdmUgc3RyZWFtIGxhc3QgZmxvdyByZXR1cm4KLQkgIEdzdFBhZCBhbHJlYWR5IHN0b3JlcyB0aGF0IGluZm9ybWF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MjI0Ci0KLTIwMTQtMDUtMjYgMTk6Mzc6NDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHJlbW92ZSBsYXN0IGZsb3cgcmV0dXJuIGZyb20gc3RyZWFtIHN0cnVjdAotCSAgSXQgaXMgYWxyZWFkeSBzdG9yZWQgb24gR3N0UGFkIG9uIGNvcmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkyMjQKLQotMjAxNC0wNS0yNiAxOToxOTo0NSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkgIGZsdmRlbXV4OiBVc2UgR3N0Rmxvd0NvbWJpbmVyCi0JICBVc2UgdGhlIGZsb3cgY29tYmluZXIgdG8gaGF2ZSB0aGUgc3RhbmRhcmQgY29tYmluYXRpb24gcmVzdWx0cyBhbmQgYXZvaWQKLQkgIHJlcGVhdGluZyB0aGUgc2FtZSBjb2RlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MjI0Ci0KLTIwMTQtMDUtMjYgMTM6MjE6MjUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IHVzZSBHc3RGbG93Q29tYmluZXIKLQkgIFVzZSB0aGUgZmxvdyBjb21iaW5lciB0byBoYXZlIHRoZSBzdGFuZGFyZCBjb21iaW5hdGlvbiByZXN1bHRzIGFuZCBhdm9pZAotCSAgcmVwZWF0aW5nIHRoZSBzYW1lIGNvZGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkyMjQKLQotMjAxNC0wNS0yNiAxMzowNDoxMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiB1c2UgR3N0Rmxvd0NvbWJpbmVyCi0JICBSZW1vdmVzIGZsb3cgcmV0dXJuIGNvbWJpbmF0aW9uIGNvZGUgdG8gdXNlIHRoZSBuZXdseSBhZGRlZCBHc3RGbG93Q29tYmluZXIKLQotMjAxNC0wNS0yMyAxNzo1MzowMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiB1c2UgR3N0Rmxvd0NvbWJpbmVyCi0JICBSZW1vdmVzIHRoZSBjb21tb24gY29kZSB0byBjb21iaW5pbmcgZmxvdyByZXR1cm5zIHRvIGxldCBpdCBiZQotCSAgaGFuZGxlZCBieSBjb3JlIGdzdHV0aWxzJyBHc3RGbG93Q29tYmluZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkyMjQKLQotMjAxNC0wNS0yNiAxMDo1OTo1NSAtMDQwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogaW1wbGVtZW50IGdzdHZpZGVvc2luay5zaG93X2ZyYW1lIGluc3RlYWQgb2YgZ3N0YmFzZXNpbmsucmVuZGVyCi0JICBJdCBhbGxvd3MgdG8gc2hvdyBwcmVyb2xsIGZyYW1lLiBFc3BlY2lhbGx5IGl0IGFsbG93cyB0byB1cGRhdGUgdGhlCi0JICBmcmFtZSB3aGVuIHNlZWtpbmcgaW4gUEFVU0VEIHN0YXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjMwMwotCi0yMDE0LTA1LTI2IDEwOjU5OjA2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogQ2xlYW51cCBvbGQgcGFkIGFsbG9jIGRlY2xhcmF0aW9uCi0KLTIwMTQtMDUtMjYgMTI6MzQ6NDIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogQ29weSBhbHJlYWR5IHF1ZXVlZCBidWZmZXIKLQkgIFRoaXMgaXMgcmVxdWlyZWQgYXMgZHVyaW5nIHByZXJvbGwgd2UgcGFzcyB0aGUgZmlyc3QgYnVmZmVyIHR3aWNlLCBoZW5jZSBhbHJlYWR5Ci0JICBxdWV1ZWQuIEl0IGlzIGFsc28gdXNlZnVsLCB0byBhbGxvdyBmaWx0ZXJzIHJlcGxheWluZyBhIHByZXZpb3VzIHJlbmRlcmVkIGJ1ZmZlcnMuCi0JICBUaGlzIHdpbGwgcmVxdWlyZSAxIG1vcmUgYnVmZmVyIGluIHNpbmsgaWYgbGFzdC1zYW1wbGUgaXMgZW5hYmxlZCwgc2luY2UgdGhlIGxhc3QKLQkgIHNhbXBsZSB3aWxsIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudGx5IHF1ZXVlZCBidWZmZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyMzAzCi0KLTIwMTQtMDUtMjQgMjA6MjA6MDcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IFBvcnQgdG8gYnVmZmVycG9vbCBmbHVzaF9zdGFydC9zdG9wIG1ldGhvZAotCSAgUG9ydCB0aGUgYnVmZmVyIHBvb2wgdG8gdXNlIHRoZSBuZXcgZmx1c2hfc3RhcnQvZmx1c2hfc3RvcCB2aXJ0dWFsCi0JICBtZXRob2RzIGFkZGVkIHRvIEdzdEJ1ZmZlclBvb2wuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3NjExCi0KLTIwMTQtMDUtMjUgMTc6NDA6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlCi0KLTIwMTQtMDUtMjUgMTY6NTQ6MTggKzAyMDAgIFBpb3RyIERyxIVnIDxwaW90cmRyYWdAZ21haWwuY29tPgotCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIHBvOiB1cGRhdGUgUE9URklMRVMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY1NTYKLQotMjAxNC0wNS0yNCAyMzo1MTo1OCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogRG9uJ3QgcXVldWUgYWxsIHRoZSBidWZmZXJzIGJlZm9yZSBkZXF1ZXVlaW5nIGZpcnN0Ci0JICBGb3Igb3V0cHV0IGRldmljZSwgd2Ugd2hlcmUgcXVldWluZyBhbGwgdGhlIGJ1ZmZlcnMsIGFuZCB0aGVuIHdlIHdvdWxkCi0JICBkZXF1ZXVlIG9uZS4gVGhpcyBtZWFucyB3ZSBvbmx5IGhhdmUgMSBidWZmZXIgZm9yIHRoZSBwaXBlbGluZSwgbm8gbWF0dGVyCi0JICB0aGUgc2l6ZSBvZiB0aGUgcXVldWUuIEluc3RlYWQsIHN0YXJ0IGRlcXVldWVkIHdoZW4gbWluX2xhdGVuY3kgaXMgcmVhY2hlZC4KLQkgIEV2ZW50dWFsbHksIHRoaXMgdGhlIG1pbl9sYXRlbmN5IHNob3VsZCBhbHNvIGJlIGFmZmVjdGVkIGJ5IGNvbnRyb2wKLQkgIE1JTl9CVUZGRVJTX0ZPUl9PVVRQVVQgKHVzZSBieSBlbmNvZGVycykuCi0KLTIwMTQtMDUtMjQgMjM6NDk6MTkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBTaW1wbHkgcmVhZCBiYWNrIHRoZSBjb25maWcgdG8gdXBkYXRlIHRoZSBxdWVyeQotCSAgSXQncyBlYXN5IHRvIGdldCB0aGUgbWluL21heCBvdXRkYXRlIHdoZW4gaGFja2luZyBkZWNpZGUgYWxsb2NhdGlvbi4gSW4KLQkgIG9yZGVyIHRvIGF2b2lkIHRoaXMsIHNpbXBseSByZWFkIGJhY2sgdGhlIGNob29zZW4gdmFsdWUgZnJvbSB0aGUgY29uZmlnLgotCi0yMDE0LTA1LTI0IDIzOjMxOjI0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBDbGVhbnVwIGFuZCBmaXggY2FsY3VsYXRpb24gb2YgbGF0ZW5jeQotCSAgQ2FsY3VsYXRpb24gb2YgbnVtX2J1ZmZlcnMgKHRoZSBtYXggbGF0ZW5jeSBpbiBidWZmZXJzKSB3YXMKLQkgIHVwLXNpZGUtZG93bi4gIElmIHdlIGNhbiBhbGxjb2F0ZSwgdGhlbiBvdXIgbWF4aW11bSBsYXRlbmN5IG1hdGNoCi0JICBwb29sIG1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMuIEFsc28gcmVuYW1lZCBpdCB0byBtYXggbGF0ZW5jeS4gRmluYWxseQotCSAgaW50cm9kdWNlZCBhIG1pbl9sYXRlbmN5IGZvciBjbGFyaXR5LgotCi0yMDE0LTA1LTI0IDIwOjAwOjE0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIFJldmVydCAidjRsMmJ1ZmZlcnBvb2w6IFBvcnQgdG8gYnVmZmVycG9vbCBmbHVzaF9zdGFydC9zdG9wIG1ldGhvZCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMmUwZmI0MmU4NjhmYzlmNmQ5OGIwMjhkZWY4MGEzZTk1MzUyNzMwNy4KLQkgIENvbmZsaWN0czoKLQkgIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYwotCSAgc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYwotCSAgc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmMKLQotMjAxNC0wNS0yNCAxODo1NjozMiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEZpeCBjb25maWd1cmF0aW9uIG9mIG90aGVyX3Bvb2wgYW5kIGltcG9ydGF0aW9uIGNhc2UKLQkgIEZpeCB0aGUgY2hvaWNlIG9mIG1pbi9tYXgsIGRvbid0IG92ZXJyaWRlIHRoZSBtaW4vbWF4IHdpdGggb3duIHBvb2wgc2VsZWN0ZWQKLQkgIHNpemUsIGNvcnJlY3Qgb3RoZXJfcG9vbCBpc19hY3RpdmUgY2hlY2ssIHN0YXJ0IGZyb20gb3RoZXJfcG9vbCBjb25maWcgd2hlbgotCSAgY29uZmlndXJpbmcgdGhlIG90aGVyIHBvb2wgYW5kIGZpbmFsbHkgdmFsaWRhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCi0KLTIwMTQtMDUtMjQgMTg6NDU6MzAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBVc2UgcHJvcG9zZWQgYWxsb2NhdG9yIGFzIGRlZmF1bHQKLQotMjAxNC0wNS0yNCAxODo0MzoyOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogRml4IFVTRVJQVFIgbWFwIGZsYWdzCi0JICBXZSBuZWVkIHRvIG1hcCBSRUFEIG9ubHkgZm9yIG91dHB1dCBhbmQgd3JpdGUgb25seSBmb3IgY2FwdHVyZSwgd2Ugd2hlcmUKLQkgIGRvaW5nIHRoZSBvcHBvc2l0ZS4gVGhpcyBmaXhpbmcgVVNFUlBUUiB3aXRoIGdsaW1hZ2VzaW5rCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNjk4Ci0KLTIwMTQtMDUtMjQgMTE6MTY6MzUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHBhcnNlIHRraGQgdHJhbnNmb3JtYXRpb24gbWF0cml4IGFuZCBhZGQgdGFncyBpZiBhcHByb3ByaWF0ZQotCSAgSGFuZGxlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggY2FzZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgc2ltcGxlIHJvdGF0aW9ucwotCSAgKDkwLCAxODAgb3IgMjcwIGRlZ3JlZXMpIGFuZCB1c2UgYSB0YWcgZm9yIHRob3NlIGNhc2VzLiBUaGlzIGlzIGEgY29tbW9uIHNjZW5hcmlvCi0JICB3aGVuIHJlY29yZGluZyB3aXRoIG1vYmlsZSBkZXZpY2VzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5NTIyCi0KLTIwMTQtMDUtMjMgMTk6MTA6MjEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBQcmV2ZW50IG51bV9xdWV1ZWQgZnJvbSBnb2luZyBuZWdhdGl2ZQotCi0yMDE0LTA1LTIzIDE4OjI1OjQ5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBkb24ndCBzdG9wIGlmIGxvb3AgcmV0dXJuZWQgRkxVU0hJTkcKLQkgIFRoZSBkZWNvZGVpbmcgdGhyZWFkIHJldHVybmluZyBmbHVzaGluZyBpc24ndCBhbiBlcnJvciwgd2Ugc2hvdWxkIHNpbXBseQotCSAgdHJ5IHN0YXJ0aW5nIHRoZSB0YXNrIGFnYWluLiBJZiBpdCdzIGFjdHVhbGx5IGZsdXNoaW5nLCBpdCB3aWxsIHN0b3AgYWdhaW4gYnkgaXRzZWxmLgotCi0yMDE0LTA1LTIzIDE3OjU0OjIwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBIYW5kbGUgZWFybHkgdGFzayBzdG9wCi0KLTIwMTQtMDUtMjMgMTc6Mjg6MTMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IEhhbmRsZSBnc3RfcGFkX3N0YXJ0X3Rhc2soKSBmYWlsdXJlCi0KLTIwMTQtMDUtMjMgMTc6MTk6MDcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IEFkZCB0cmFjZSBmb3IgRkxVU0hfU1RBUlQvU1RPUCBoYW5kbGluZwotCi0yMDE0LTA1LTIzIDE3OjE4OjE2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBGaXggdXNlIG9mIGF0b21pYyB2YWx1ZQotCi0yMDE0LTA1LTIzIDE3OjAxOjUzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogSW1wcm92ZSBkZWJ1Z2dpbmcKLQkgIE5vIG5lZWQgdG8gdXNlIG9iai0+ZWxlbWVudCwgdGhlIHBvb2wgbm93IGhhdmUgYSBzaWduaWZpY2FudCBuYW1lLiBBbHNvIGRvbid0Ci0JICB3YXJuIGlmIGZsdXNoaW5nLgotCi0yMDE0LTA1LTIzIDE3OjAxOjAyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBGaXggaGFuZGxlX2ZyYW1lIGVycm9yIGhhbmRsaW5nCi0KLTIwMTQtMDUtMjMgMTU6NTY6MjQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBBZGQgYSB0cmFjZSB3aGVuIF9zdGFydCgpIGlzIGNhbGxlZAotCi0yMDE0LTA1LTIzIDE1OjU2OjAyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IEFkZCBkZWJ1ZyBhc3NlcnQgdG8gZGV0ZWN0IGNhbGxzIGluIHRoZSB3cm9uZyBzdGF0ZQotCi0yMDE0LTA1LTIzIDE1OjU1OjI2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IFJlc2V0IGNvdW50IHdoZW4gc3RvcHBlZAotCi0yMDE0LTA1LTIzIDE1OjU1OjA4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBSZXR1cm4gYSBHc3RGbG93UmV0dXJuIGluc3RlYWQgb2YgYm9vbGVhbiBpbiBhbGxvYwotCi0yMDE0LTA1LTIzIDE1OjE3OjI3IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IERvbid0IGxlYWsgY29uZmlnIHN0cnVjdHVyZQotCi0yMDE0LTA1LTIzIDE0OjEyOjEwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogUG9ydCB0byBidWZmZXJwb29sIGZsdXNoX3N0YXJ0L3N0b3AgbWV0aG9kCi0KLTIwMTQtMDUtMjMgMDM6MDA6NTAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhZGQgdGFnIG1hcHBpbmdzIGZvciBfc3dyLCBfbWFrIGFuZCBfbW9kIHRhZ3MKLQkgIHN3ciAtPiBBcHBsaWNhdGlvbiBuYW1lCi0JICBtYWsgLT4gZGV2aWNlIG1hbnVmYWN0dXJlcgotCSAgbW9kIC0+IGRldmljZSBtb2RlbAotCi0yMDE0LTA1LTIwIDE3OjM3OjQ5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICB4aW1hZ2VzcmM6IEZpeCB4aW1hZ2UgbGVha3Mgd2hlbiBidWZmZXIgaGFzIG1vcmUgdGhlbiBvbmUgeGltYWdlCi0JICBGcm9tIHRpbWUgdG8gdGltZSwgd2hlbiB0aGUgaW1hZ2VfcG9vbCBsaXN0IGhhcyBtb3JlIHRoZW4gMSBlbGVtZW50Ci0JICBhbmQgSSBzdXBwb3NlIGF0IHN0YXJ0LCBhbGwgYnV0IDEgcG9vbGVkIHhpbWFnZSBhcmUgbGVha2VkLiBUaGlzIGlzCi0JICBkdWUgdG8gYnJva2VuIGFsZ29yaXRobSBpbiBnc3RfeGltYWdlc2lua19zcmNfeGltYWdlX2dldCgpLiBUaGVyZSB3YXMKLQkgIGFsc28gYSByaXNrIG9mIHVzZSBhZnRlciBmcmVlIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgeGltYWdlIHNpemUgaGFzCi0JICBjaGFuZ2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODUwMgotCi0yMDE0LTA1LTIxIDEzOjIzOjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMy4yID09PQotCi0yMDE0LTA1LTIxIDEzOjA2OjM1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QtYnVpbGQuc3RhbXA6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC5zdGFtcDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMS4zLjIKLQotMjAxNC0wNS0yMSAxMjoxOTozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNC0wNS0yMSAxMDo1MToxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDIxMWZhNWYgdG8gMWY1ZDNjMwotCi0yMDE0LTA1LTIwIDA4OjIzOjA2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIHZwOGVuYzogRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTCB2YXJpYWJsZQotCSAgQ0lEICMxMTM5ODM4Ci0KLTIwMTQtMDUtMjAgMDg6MjA6NDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnA5ZW5jOiBEb24ndCBkZXJlZmVyZW5jZSBOVUxMIGNoZWNrcwotCSAgQ0lEICMxMTk3NzAzCi0KLTIwMTQtMDUtMTkgMTE6MjY6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogRXhwbGljaXRseSBjYXN0IGVudW0gInN1YnR5cGUiIHRvIGl0cyAic3VwZXJ0eXBlIgotCSAgZ3N0djRsMmJ1ZmZlcnBvb2wuYzo2MDg6MTg6IGVycm9yOiBpbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gZW51bWVyYXRpb24gdHlwZQotCSAgJ2VudW0gX0dzdFY0bDJCdWZmZXJQb29sQWNxdWlyZUZsYWdzJyB0byBkaWZmZXJlbnQgZW51bWVyYXRpb24gdHlwZQotCSAgJ0dzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MnIFstV2Vycm9yLC1XZW51bS1jb252ZXJzaW9uXQotCSAgcGFyYW1zLmZsYWdzID0gR1NUX1Y0TDJfUE9PTF9BQ1FVSVJFX0ZMQUdfUkVTVVJFQ1Q7Ci0JICB+IF5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLTIwMTQtMDUtMTkgMTE6MjQ6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nb29tL3RlbnRhY2xlM2QuYzoKLQkgIGdvb206IFVzZSBmYWJzKCkgaW5zdGVhZCBvZiBhYnMoKSB0byBjYWxjdWxhdGUgdGhlIGZsb2F0aW5nIHBvaW50IGFic29sdXRlIHZhbHVlCi0JICB0ZW50YWNsZTNkLmM6MjY4Ojc6IGVycm9yOiB1c2luZyBpbnRlZ2VyIGFic29sdXRlIHZhbHVlIGZ1bmN0aW9uICdhYnMnIHdoZW4KLQkgIGFyZ3VtZW50IGlzIG9mIGZsb2F0aW5nIHBvaW50IHR5cGUgWy1XZXJyb3IsLVdhYnNvbHV0ZS12YWx1ZV0KLQkgIGlmIChhYnMgKHRtcCAtIGZ4X2RhdGEtPnJvdCkgPiBhYnMgKHRtcCAtIChmeF9kYXRhLT5yb3QgKyAyLjAgKiBHX1BJKSkpIHsKLQkgIF4KLQotMjAxNC0wNS0xOSAxMToyMTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHMuYzoKLQkgIGRlYnVndXRpbHM6IFByb3Blcmx5IGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSB3aXRoIHVuc2lnbmVkIHR5cGVzCi0JICB0ZXN0cy5jOjE2MToxNjogZXJyb3I6IHRha2luZyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdW5zaWduZWQgdHlwZQotCSAgJ3Vuc2lnbmVkIGxvbmcnIGhhcyBubyBlZmZlY3QgWy1XZXJyb3IsLVdhYnNvbHV0ZS12YWx1ZV0KLQkgIHQtPmRpZmYgKz0gbGFicyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgLSB0LT5leHBlY3RlZCk7Ci0KLTIwMTQtMDUtMTYgMTc6NDY6MzAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IEhhbmRsZSBmbHVzaCB3aGlsZSBpbiBzdGFydF9zdHJlYW1pbmcKLQkgIFdlIG5lZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgZmx1c2ggb2NjdXJlIHdoaWxlIHRoZSBzdHJlYW1pbmcKLQkgIHRocmVhZCBpcyBiZWluZyBicm91Z2h0IHVwLiBJbiB0aGlzIGNhc2UsIHRoZSBmbHVzaGluZyBzdGF0ZSBvZiB0aGUgcG9sbAotCSAgb2JqZWN0IGlzIGNsZWFyZWQuIFRvIHNvbHZlIHRoaXMsIHdlIHNpbXBseSBzZXQgdGhlIGNhcHR1cmUgcG9sbCB0byBmbHVzaGluZwotCSAgYWdhaW4sIHRoaXMgd2F5IHdlIGtub3cgdGhlIHRocmVhZCB3aWxsIGV4aXQuIFRoZSBkZWNvZGVyIHN0cmVhbWxvY2sKLQkgIGlzIHVzZWQgdG8gc3luY2hyb25pemUgd2l0aCBoYW5kbGUgZnJhbWUuCi0KLTIwMTQtMDUtMTYgMTY6NDQ6MzcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSAgdjRsMmFsbG9jYXRvcjogRG9uJ3QgdHJhY2UgdHdpY2UgdGhlIHNhbWUgbWVzc2FnZQotCi0yMDE0LTA1LTE1IDExOjI1OjUwIC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogYWx3YXlzIHVzZSBhIHJhbmRvbSBzc3JjIGZvciB0aGUgaW50ZXJuYWwgc2Vzc2lvbgotCSAgVXNlIGEgcmFuZG9tIFNTUkMgZGlmZmVyZW50IHRoYW4gMCBmb3IgdGhlIGludGVybmFsIHNlc3Npb24gU1NSQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAyMTIKLQotMjAxNC0wNS0xNiAxNjo1MjoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHVwZGF0ZSBsYXN0X2FjdGl2aXR5IHdoZW4gc2VuZGluZyBSVFAKLQkgIEFsc28gdXBkYXRlIGxhc3RfYWN0aXZpdHkgd2hlbiBkb2luZyBzb21ldGhpbmcgd2l0aCB0aGUgaW50ZXJuYWwKLQkgIHNvdXJjZSB0byBtYWtlIHN1cmUgZG9uJ3QgdGltZW91dCBlYXJseS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMjE3Ci0KLTIwMTQtMDUtMTUgMTg6MDg6NTMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwyOiBDbGVhbnVwIE0yTSBwcm9wZXJ0aWVzCi0JICBNMk0gZGV2aWNlcyB3ZXJlIHNoYXJpbmcgdGhlIHNhbWUgcHJvcGVydGllcyBhcyBzcmMgYW5kIHNpbmsuIE1vc3Qgb2YKLQkgIHRoZXNlIG1hZGUgbm8gc2Vuc2UuIFRoaXMgcGF0Y2ggcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHByb3BldGllcyBhbmQKLQkgIG1ha2VzIGlvLW1vZGUgY2xlYXJlciBieSBoYXZpbmcgY2FwdHVyZS1pby1tb2RlIGFuZCBvdXRwdXQtaW8tbW9kZS4gVGhpcwotCSAgYWxzbyBhY2NpZGVudGx5IGZpeGVkIGEgYnVnIGluIGdzdHY0bDJ0cmFuc2Zvcm0gaW8tbW9kZSBjb2RlLCB3aGVyZSB0aGUKLQkgIGNhcHR1cmUgaW8tbW9kZSBjb3VsZCBub3QgYmUgc2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTU5MQotCi0yMDE0LTA1LTE1IDE3OjM5OjM5ICswMjAwICBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBVcGRhdGUgcG9vbCBsaW1pdCB3aXRoIGhhcmR3YXJlIHJlcXVpcmVtZW5zdAotCSAgSWYgdGhlIGRyaXZlciBuZWVkIG1vcmUgYnVmZmVycyB0aGFuIHJlcXVlc3RlZCBieSB0aGUgY29uZmlnLAotCSAgdXBkYXRlIHRoZSBwb29sIG1pbi9tYXggdmFsdWVzLiBUaGUgbWluaW11bSB2YWx1ZSBmb3IgdGhlIHBvb2wKLQkgIGNvdWxkIGJlIHByb3ZpZGVkIGVpdGhlciBieSB0aGUgZHJpdmVyIG9yIGJ5IHRoZSBwb29sLiBUaGlzIGlzCi0JICBiZXN0IGVmZm9ydCBmb3IgZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQKLQkgIENJRCBWNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfQ0FQVFVSRS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAyMDAKLQotMjAxNC0wNS0xNSAxMDo0NDoyOSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogSGFuZGxlIHN0YXJ0X3N0cmVhbWluZyBlcnJvcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDIwNwotCi0yMDE0LTA1LTE1IDEwOjM5OjQwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBQcmludCB0aGUgZmxvdyByZXR1cm4gY2F1c2luZyB0aGUgbG9vcCB0byBsZWF2ZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDIwNwotCi0yMDE0LTA1LTE1IDEwOjMxOjQwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBEb24ndCBsb2NrIHRoZSBkZWNvZGVyIHdoZW4gc3RvcHBpbmcgdGFzawotCSAgVGhhdCBzcmMgcGFkIHRhc2sgbWF5IG5lZWQgdG8gdGFrZSB0aGUgbG9jayB3aGVuIGJlaW5nIHB1bGxlZAotCSAgZG93bi4gdGFrZWluZyB0aGF0IGxvY2sgY2FuIGxlYWQgdG8gYSBkZWFkbG9jay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAyMDcKLQotMjAxNC0wNS0xNCAxNzoxODo1MiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JICB2NGwydHJhbnNmb3JtOiBEb24ndCBsZWFrIHBvb2wgaWYgYWN0aXZhdGlvbiBmYWlsZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAyMDcKLQotMjAxNC0wNS0xNCAxNzoxODozNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMjogU3BsaXQgZmx1c2ggaW4gc3RhcnQvc3RvcF9zdHJlYW1pbmcKLQkgIFRoaXMgYWxsb3cgY2FsbGluZyBzdGFydCBzdHJlYW1pbmcgbGF0ZXIgZm9yIGNhcHR1cmUgZGV2aWNlLiBDdXJyZW50bHkgaXQgYnJlYWtzCi0JICBpbiBkbWFidWYtaW1wb3J0IGJlY2F1c2UgZG93bnN0cmVhbSBpcyBob2xkaW5nIGEgYnVmZmVyIHRoYXQgd2lsbCBvbmx5IGJlCi0JICByZWxlYXNlZCBhZnRlciBzdHJlYW0tc3RhcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMjA3Ci0KLTIwMTQtMDUtMTQgMTU6MTI6MjYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogRmx1c2ggYnVmZmVyIHBvb2xzIG9uIGZsdXNoIHN0b3AKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAyMDcKLQotMjAxNC0wNS0xNCAxMzoyODozMSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBGaXggdXNlIG9mIGF0b21pYyBhY3RpdmUgbWFya2VyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMjA3Ci0KLTIwMTQtMDUtMTQgMTM6MDU6NDIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBEb24ndCBkZWFjdGl2YXRlIG90aGVycG9vbAotCSAgV2Ugc2hvdWxkIG5vdCBzdG9wIHRoZSBvdGhlcnBvb2wgdW5sZXNzIHdlIGFsc28gc3RvcCBvdXIgb3duCi0JICBwb29sLCBvdGhlcndpc2UgaXQgd2lsbCBuZXZlciBnZXQgcmVzdGFydGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDIwNwotCi0yMDE0LTA1LTE0IDEyOjMzOjU4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogQWxzbyB1cGRhdGUgbnVtX2J1ZmZlcnMgZm9yIGltcG9ydCBjYXNlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMDIwNwotCi0yMDE0LTA1LTE0IDEzOjQyOjI1IC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHVwZGF0ZSBydHAgZW5jb2Rlci9kZWNvZGVyIGRvY3MKLQkgIFVzZSAldSBpbiBSVFAgZW5jb2Rlci9kZWNvZGVyIHBhZHMgdG8gbWF0Y2ggb3RoZXIgcnRwYmluIHBhZHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwMTQ2Ci0KLTIwMTMtMTItMjcgMTE6NTU6MTggKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHNlc3Npb24uYzoKLQkgIHRlc3RzL2NoZWNrOiBydHBzZXNzaW9uOiB0ZXN0IGludGVybmFsIHNvdXJjZXMgdGltaW5nIG91dAotCi0yMDEzLTEyLTI2IDE3OjMwOjQyICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiByZW1vdmUgdW51c2VkIGlmIGJyYW5jaAotCSAgMSkgc291cmNlcyB0aGF0IGhhdmUgc2VudCBCWUUgaW4gdGhlIHBhc3QgY2Fubm90IGJlIHNlbmRlcnMsIHNpbmNlCi0JICB0aGV5IHdvdWxkIGhhdmUgdGltZWQgb3V0IHRvIGJlaW5nIHJlY2VpdmVycyBpbiB0aGUgbWVhbnRpbWUuLi4KLQkgIDIpIHNvdXJjZXMgdGhhdCBoYXZlIHNlbnQgQllFIGFyZSBub3cgYmVpbmcgcmVtb3ZlZCBlYXJsaWVyIGluc2lkZQotCSAgdGhpcyBmdW5jdGlvbgotCi0yMDEzLTEyLTI2IDE3OjI5OjQyICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBjbGVhbnVwIHNvdXJjZXMgdGhhdCBoYXZlIHNlbnQgQllFCi0KLTIwMTMtMTItMjYgMTc6MjQ6NTEgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHVuaWZ5IG5lc3RlZCBpZiBjbGF1c2VzCi0KLTIwMTMtMTItMjYgMTc6MjE6NDQgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHRpbWVvdXQgaW50ZXJuYWwgc291cmNlcyB0aGF0IGFyZSBpbmFjdGl2ZSBmb3IgYSBsb25nIHRpbWUgYW5kIHNlbmQgQllFCi0KLTIwMTQtMDUtMTMgMTI6MjU6MDQgLTA3MDAgIEFsZWl4IENvbmNoaWxsbyBGbGFxdcOpIDxhbGVpeEBvYmxvbmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZG9uJ3Qgc3RvcCBsb29waW5nIGlmIGV2ZW50IGZvdW5kIGluIHRoZSBxdWV1ZQotCSAgSWYgd2UgYXJlIGluc2VydGluZyBhIHBhY2tldCBpbnRvIHRoZSBqaXR0ZXIgcXVldWUgd2UgbmVlZCB0byBrZWVwCi0JICBsb29waW5nIHRocm91Z2ggdGhlIGl0ZW1zIHVudGlsIHRoZSByaWdodCBwb3NpdGlvbiBpcyBmb3VuZC4gQ3VycmVudGx5LAotCSAgdGhlIGNvZGUgc3RvcHMgYXMgc29vbiBhcyBhbiBldmVudCBpcyBmb3VuZCBpbiB0aGUgcXVldWUuCi0JICBSZWdhcmRpbmcgZXZlbnRzLCB3ZSBzaG91bGQgb25seSBtb3ZlIHBhY2tldHMgYmVmb3JlIGFuIGV2ZW50IGlmIHRoZXJlCi0JICBpcyBhbm90aGVyIHBhY2tldCBiZWZvcmUgdGhlIGV2ZW50IHRoYXQgaGFzIGEgbGFyZ2VyIHNlcW51bS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzAwNzgKLQotMjAxNC0wNC0xNyAxMzowNDowMCArMDAwMCAgQWRyaWVuIFNDSCA8YWRyaWVuLnNjaHdhcnR6ZW50cnViZXJAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZml4IHRoZSBtZW1vcnkgbGVhayBvZiBsYW5ndWFnZSBhdHRyaWJ1dGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjg0MTgKLQotMjAxNC0wNS0xMyAxMzo0NDoyMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBGaXggcmVncmVzc2lvbiBpbiBvZmZzZXQgZXh0cmFwb2xhdGlvbgotCSAgV2hlbiBleHRyYXBvbGF0aW5nIHRoZSBvZmZzZXQsIHdlIG5lZWQgdG8gdXNlIHRoZSBleHRyYXBvbGF0ZQotCSAgc3RyaWRlIHJhdGhlciB0aGVuIHRoZSBiYXNlIHN0cmlkZS4gVGhpcyBzaG91bGQgZml4IHN1cHBvcnQgZm9yIGZvcm1hdAotCSAgd2l0aCBtb3JlIHRoZW4gdHdvIHBsYW5lcyAoSTQyMCwgWTQyQiwgZXRjKS4KLQotMjAxNC0wNS0xMiAxODowMzoxOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDJidWZmZXJwb29sOiBVc2UgZGVmYXVsdCBWaWRlb0luZm8gZm9yIGZyYW1lIG9wZXJhdGlvbgotCSAgV2hlbiBkb2luZyBmcmFtZSBvcGVyYXRpb24sIHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IFZpZGVvSW5mbwotCSAgYW5kIGxldCB0aGUgZnJhbWUgQVBJIHJlYWQgdGhlIHZpZGVvIG1ldGEgaW4gb3JkZXIgdG8gZ2V0IHRoZSBzdHJpZGUKLQkgIGFuZCBvZmZzZXQgcmlnaHQuIEN1cnJlbnRseSB3ZSB3aGVyZSB1c2luZyB0aGUgc3BlY2lhbGl6ZWQgVmlkZW9JbmZvCi0JICB3aGljaCByZWZsZWN0cyB3aGF0IHRoZSBIVyBpcyBzZXR1cCB0by4KLQotMjAxNC0wNS0xMiAxNzoyMzoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogbWlub3IgR1ZhbHVlIGhhbmRsaW5nIG9wdGltaXNhdGlvbiBpbiBwcm9iaW5nIGNvZGUKLQotMjAxNC0wNS0xMiAxNzoyMDoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogYXZvaWQgbGlzdHMgd2l0aCBvbmUgc2luZ2xlIGZyYW1lcmF0ZSBpbiBwcm9iZWQgY2FwcwotCSAgU2ltcGxpZnkgZnJhbWVyYXRlIGZpZWxkIGlmIHBvc3NpYmxlLCBzbyB3ZSBkb24ndCBlbmQgdXAgd2l0aAotCSAgZS5nLiBmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIHsgMzAvMSB9LiBNYXliZSB0aGUgaGVscGVyIGZ1bmN0aW9uCi0JICBzaG91bGQgYmUgbW92ZWQgdG8gY29yZSwgYnV0IHdlIGNhbiBkbyB0aGlzIGxhdGVyLgotCi0yMDE0LTA1LTEyIDE2OjU2OjM1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCBsZWFrIG9mIHBhbGV0dGVfZGF0YSBpbiBlcnJvciBjYXNlcwotCSAgQ0lEICMxMjEyMTUxCi0KLTIwMTQtMDUtMTIgMTY6NTM6MzIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGcmVlIG5vZGVfaGVhZGVyIGluIGVycm9yIGNhc2VzCi0JICBDSUQgIzEyMTIxMzQKLQotMjAxNC0wNS0xMiAxMzo0NjowMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBEb24ndCB1c2UgV0FSTklORyBmb3Igbm90LWxpbmtlZCBmbG93IHJldHVybgotCSAgUG9sbHV0ZXMgZGVidWcgbG9ncyBmb3Igbm8gcmVhc29uLiBJdCdzIG9ubHkgYW4gZXJyb3IgaWYgYWxsIHBhZHMKLQkgIHJldHVybiBub3QtbGlua2VkCi0KLTIwMTQtMDUtMTIgMTM6NDU6MDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICBmbHZkZW11eDogU2tpcCB1bmtub3duIHRhZ3MgaW4gcHVzaC1tb2RlCi0JICBXZSBhZGQgYSBuZXcgbW9kZSAoU0tJUCkgaW4gcHVzaC1tb2RlIHRvIHNraXAgdGFncyB0aGF0IHdlIGRvbid0IGtub3duIGFib3V0Ci0JICBQYXJ0aWFsbHkgZml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MDcxMgotCi0yMDE0LTA1LTEwIDA5OjE0OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBBZGQgc3VwcG9ydCBmb3IgdmFyaWFibGUgYmxvY2sgc2l6ZSBmaWxlcyBhbmQgcmVtb3ZlIGRlYWQgY29kZQotCSAgVGhpcyBkZWFkIGNvZGUgd2Fzbid0IHVzZWQgc2luY2UgdGhlIDEuMCBwb3J0IGFuZCB3b3VsZCBuZWVkIHRvCi0JICBiZSBtb2RpZmllZCBoZWF2aWx5IGZvciB2YXJpYWJsZSBibG9jayBzaXplIHN1cHBvcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5ODk0Ci0KLTIwMTQtMDUtMDkgMTI6MTQ6MjMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JICB2NGwydHJhbnNmb3JtOiBGaXggTlVMTCBjaGVjayBjb3B5IHBhc3RlIGVycm9yCi0JICBDSUQgMTIxMjEyOQotCi0yMDE0LTA1LTA5IDEyOjExOjU0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogRml4IHBvdGVudGlhbCBkZWFkbG9jayBkdWUgdG8gbWlzc2luZyBicmVhawotCSAgQ0lEIDEyMTIxMzEKLQotMjAxNC0wNS0wOSAxODowMToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGluY3JlbWVudCBhY2NlcHRlZCBwYWNrZXRzIGFmdGVyIGxvc3MKLQkgIFdoZW4gd2UgZGV0ZWN0IGEgbG9zdCBwYWNrZXQsIGV4cGVjdCBwYWNrZXRzIHdpdGggaGlnaGVyCi0JICBzZXFudW0gb24gdGhlIGlucHV0LgotCSAgQWxzbyB1cGRhdGUgdGhlIHVuaXQgdGVzdC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk1MjQKLQotMjAxNC0wNS0wNCAxMToxMjo1NCAtMDYwMCAgSmFzb24gTGl0emluZ2VyIDxqbGl0emluZ2VyZGV2QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIEFkZCBuZXcgdGVzdCBjYXNlLgotCi0yMDE0LTA1LTA5IDE2OjE0OjIxICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2hhcGV3aXBlLmM6Ci0JICBzaGFwZXdpcGU6IG5vIG5lZWQgdG8gYWN0aXZhdGUgcGFkcwotCSAgQWN0aXZhdGlvbiB3aWxsIGhhcHBlbiBpbiB0aGUgc3RhdGUgY2hhbmdlCi0KLTIwMTQtMDUtMDkgMTI6MTA6MDQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCBsZWFrIGNvbmZpZyBzdHJ1Y3R1cmUKLQkgIHRoaXMgZml4ZXMgYSBsZWFrIG9mIHRoZSBjb25maWcgc3RydWN0dXJlIGFuZCB0YWtlIGNhcmUgb2YgbWFraW5nIHN1cmUKLQkgIGNhcHMgY2FuJ3QgcmVhY2ggcmVmIDAgYmVmb3JlIHdlIGFyZSBkb25lIGRvaW5nIG91ciBjaGVjay4KLQkgIENJRCAxMjEyMTQ0Ci0KLTIwMTQtMDUtMDkgMTI6MDg6MTEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBSZW1vdmUgdW5lZWRlZCBjYXN0IGZvciBjb2RlIGNsYXJpdHkKLQotMjAxNC0wNS0wOSAxMTo1Njo1MiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwycG9vbDogRml4IGxlYWsgb2YgY29uZmlnIHN0cnVjdHVyZSBpbiBlcnJvciBjYXNlCi0JICBDSURzIDEyMTIxNjcgYW5kICAxMjEyMTY3Ci0KLTIwMTQtMDUtMDkgMTE6NTE6MjYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBGaXggdXNlIG9mIHVuaXRpbGl6ZWQgcG9vbCBwb2ludGVyCi0JICBDSUQgIzEyMTIxNzMKLQotMjAxNC0wNS0wOSAxNjo0ODo1OCArMDIwMCAgRXJpYyBUcm91c3NldCA8ZXRyb3Vzc2V0QGF3b3guY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGRvbid0IHJlc3BvbmQgdG8gYSBwb3NpdGlvbiBxdWVyeSBpbiBCWVRFIGZvcm1hdCB3aXRoIGEgVElNRSBwb3NpdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTU1MwotCi0yMDE0LTA1LTA5IDE0OjIyOjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IGRvbid0IGxlYWsgZG9jdHlwZSBzdHJpbmcgaW4gZXJyb3IgY29kZSBwYXRoCi0JICBDSUQgMTIxMjE0NS4KLQotMjAxNC0wNS0wNiAxMzozNzo0NyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IFJlYWRiYWNrIHBvb2wgY29uZmlnIGlmIHVzZWQgd2l0aGluIHRoZSBiYXNlY2xhc3MKLQotMjAxNC0wNS0wNiAxMjo1ODo1OSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwyOiBSZXBsYWNlIG1pc3MtdXNlIG9mIGNyb3AgbWV0YSBpbiBmYXZvdXIgb2YgcHJvcGVyIG9mZnNldAotCSAgVGhpcyBtb3ZlcyBhd2F5IGZyb20gY29weWluZyBpbmZvcm1hdGlvbiBhbmQgc3RvcmUgZXZlcnl0aGluZyBpbnNpZGUKLQkgIHRoZSBHc3RWaWRlb0luZm8gc3RydWN0dXJlLiBUaGUgYWxpZ25lbWVudCBleHBvc2VkIGJ5IHY0bDIgYXBpCi0JICBpcyBub3cgaGFuZGxlZCB1c2luZyBwcm9wZXIgb2Zmc2V0LgotCi0yMDE0LTA1LTA2IDEyOjU1OjMwIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMm9iamVjdDogU3R5bGUgZml4Ci0KLTIwMTQtMDUtMDUgMTI6Mzg6MzMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBSZXNldCBpbXBvcnRlZCBidWZmZXIgc2l6ZSB3aXRoIGV4cGVjdGVkIHNpemUKLQkgIFRoaXMgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBwb29sIHdvbid0IGFsd2F5cyBkaXNjYXJkIGJ1ZmZlciB3aXRoIHRoZXNlCi0JICBtZW1vcnkgd2hlbiB0aGV5IGFyZSByZWxlYXNlZC4KLQotMjAxNC0wNS0wNSAxMjozNzo0MyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkgIHY0bDJhbGxvY2F0b3I6IFJlc2V0IGZsdXNoZWQgZ3JvdXAKLQkgIFRoaXMgZW5zdXJlIHRoYXQgYSBmbHVzaGVkIGdyb3VwIG1lbW9yeSBhcmUgdGhlIHNhbWUgc2l6ZSBhcyB3aGVuIHRoZXkKLQkgIHdoZXJlIG9yaWdpbmFsbHkgYWxsb2NhdGVkIC8gaW1wb3J0ZWQuCi0KLTIwMTQtMDUtMDUgMTI6MDc6MzEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDJidWZmZXJwb29sOiBHZXQgbnVtYmVyIG9mIGFsbG9jYXRlZCBidWZmZXJzIGZyb20gYWxsb2NhdG9yCi0JICBUaGUgdmFsdWUgb2YgbnVtX2FsbG9jYXRlZCBidWZmZXIgd291bGQgZ2V0IGNvbmZ1c2VkIHdoZW4KLQkgIGJ1ZmZlciBhcmUgYmVpbmcgZGlzY2FyZGVkLgotCi0yMDE0LTA1LTA1IDEyOjA2OjQ0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5oOgotCSAgdjRsMmFsbG9jYXRvcjogQWRkIGEgbWV0aG9kIHRvIHJlYWQgbnVtYmVyIG9mIGFsbG9jYXRlZCBncm91cAotCi0yMDE0LTA1LTA0IDIwOjIzOjQyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBJbXByb3ZlIGRlYnVnZ2luZwotCi0yMDE0LTA1LTA0IDE5OjUxOjQ4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JICB2NGwyYnVmZmVycG9vbDogRW5zdXJlIHdlIGRvbid0IHJlLWVucXVldWUgYnVmZmVyIGR1cmluZyBmbHVzaAotCi0yMDE0LTA1LTA0IDE5OjEzOjM3IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogSW5pdGlsaWFsaXplIGRlYnVnIGNhdGVnb3J5Ci0KLTIwMTQtMDUtMDQgMTY6MTE6MDkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBGaXggbGlidjRsMiBzdXBwb3J0Ci0JICBOZWVkIHRvIGluY2x1ZGUgY29uZmlnLmgsIG90aGVyd2lzZSB3ZSBlbmR1cCBkaXJlY3RseSB1c2luZyB0aGUKLQkgIGlvY3QvbW1hcC9tdW5tYXAgY2FsbHMgYW5kIG5lZWQgdG8gdmFsbCB2NGwyX211bm1hcC4KLQotMjAxNC0wNS0wMSAxMzowNDowOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBTZXQgdGhlIGZsYWdzIG9uIHRoZSBvYmplY3QKLQkgIFdlIHdoZXJlIG5vdCBzZXR0aW5nIHRoZSBwcm9iZWQgZmxhZ3Mgb24gdGhlIGFsbG9jYXRvciwgd2hpY2ggbWVhbiBldmVuIGlmCi0JICBDUkVBVEVfQlVGUyB3YXMgc3VwcG9ydGVkIG9uIHNvbWUgZHJpdmVyLCBpdCB3b3VsZCBlbmR1cCBiZWluZyBpZ25vcmVkLgotCi0yMDE0LTA0LTI5IDE2OjQ5OjUyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogUmUtZW5xdWV1ZSBidWZmZXIgYXQgc3RyZWFtIHN0YXJ0Ci0KLTIwMTQtMDQtMjkgMTY6MDY6MDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jOgotCSAgdjRsMmFsbG9jYXRvcjogVGhlcmUgaXMgbm90IGdyb3VwIG9uIGVycm9yCi0KLTIwMTQtMDQtMjkgMTQ6NTY6MzEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogSGFuZGxlIEZMVVNIX1NUT1AgZXZlbnQKLQotMjAxNC0wNC0yOSAxMzowNTo0MSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBBY3F1aXJlIGNhbm5vdCByZXR1cm4gYSBidWZmZXIgZnJvbSBhbm90aGVyIHBvb2wKLQkgIFJldHVybiBhIGJ1ZmZlciBmcm9tIGFuIG90aGVycG9vbCBoYXMgdW53YW50ZWQgc2lkZSBlZmZlY3RzIHRoYXQgbGVhZCB0byBsZWFrcyBhbmQKLQkgIHByZXZlbnRzIGRlYWN0aXZhdGluZyB0aGUgcG9vbC4gSW5zdGVhZCwgd2UgY2hhbmdlIHRoZSBfcHJvY2VzcygpIEFQSSBzbyBpdCBjYW4KLQkgIHJlcGxhY2UgdGhlIGludGVybmFsIGJ1ZmZlciB3aXRoIHRoZSBidWZmZXIgZnJvbSB0aGUgZG93bnN0cmVhbSBwb29sLiBUaGlzIGltcGxpZWQKLQkgIG1vdmluZyBmcm9tIF9maWxsKCkgdG8gX2NyZWF0ZSgpIG1ldGhvZCBpbiB0aGUgc3JjLgotCi0yMDE0LTA0LTI5IDEzOjAwOjMyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogUmVtb3ZlIHVucmVhY2hlZCBhY3F1aXJlIGNvZGUKLQkgIFRoZSBhY3F1aXJlIGlzIGRvbmUgaW4gX3ByZXBhcmUgbm93LgotCi0yMDE0LTA0LTI5IDEyOjU3OjA4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogU2FuZXRpemUgYnVmZmVyIHJlZm91bnQgaGFuZGxpbmcKLQkgIEJ1ZmZlciByZWZjb3VudGluZyBpcyBhIGJpdCBoYXJkLCBiZWNhdXNlIG9mIHRoZSBkdWFsaXR5IGJldHdlZW4gQ0FQVFVSRSBhbmQKLQkgIE9VVFBVVCBtb2RlLiBJbiB0aGUgbG9uZyB0ZXJtLCB3ZSBzaG91bGQgY29uc2lkZXIgaGF2aW5nIHR3byBzZXBlcmF0ZSBwb29sCi0JICBpbnN0ZWFkIG9mIHRoaXMgbWVzcy4gQXQgbGVhc3Qgc3RhdGUgc2hvdWxkIGJlIGJldHRlciBrZXB0IHRoaXMgd2F5LgotCi0yMDE0LTA0LTI5IDEyOjQ4OjA0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IEFkZCBtb3JlIHRyYWNlcwotCi0yMDE0LTA0LTI4IDA4OjQ4OjI2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuaDoKLQkgIHY0bDItYWxsb2NhdG9yOiBBZGQgUyB0byBSRVFCVUZTL0NSRUFURV9CVUZTIGVudW0KLQkgIEFsbCBlbnVtIHRoYXQgaGFzIFJFUUJVRlMgYW5kIENSRUFURV9CVUZTIHdoZXJlIG1pc3NpbmcgUywgd2hpY2ggd2FzCi0JICBjb25mdXNpbmcgc2luY2UgdGhleSBhcmUgc3VwcG9zZWQgdG8gbWF0Y2ggd2l0aCBhc3NvY2ljYXRlZCBpb2N0bCBuYW1lLiBUaGlzCi0JICBhbHNvIGZpeGVzIHRoZSB5ZXQgdW51c2VkIENBTl9SRVFVRVNUIGZsYWcgY2hlY2suCi0KLTIwMTQtMDQtMTggMTc6NTE6MDcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogRW5hYmxlZCBRb1MKLQotMjAxNC0wNC0xOCAxNzowMjo1MCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogRml4dXAgVVNFUlBUUi9ETUFCVUYgY2FwdHVyZSBzdXBwb3J0Ci0KLTIwMTQtMDQtMTggMTQ6NDU6MDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogSW1wcm92ZSBzZWxlY3RvbiBvZiBtaW4vbWF4IGluIGRlY2lkZSBhbGxvY2F0aW9uCi0KLTIwMTQtMDQtMTggMTM6MDk6MDAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBVcGRhdGUgY29uZmlnIGlmIG1ldGEgaXMgbWlzc2luZwotCSAgUmF0aGVyIHRoZW4gaGFyZCBmYWlsdXJlLCB3ZSBzaG91bGQgdXBkYXRlIHRoZSBjb25maWcgd2l0aCB0aGUgbWV0YSBvcHRpb24gd2UKLQkgIG5lZWQgYW5kIHJldHVybiBmYWxzZS4KLQotMjAxNC0wNC0xMSAxNzoxMDoxMSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDI6IEFkZCBETUFCVUYgYW5kIFVTRVJQVFIgaW1wb3J0YXRpb24KLQotMjAxNC0wNC0xNyAyMTo0NTo1OCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBWYWxpZCBGRCBhcmUgYmlnZ2VyIG9yIGVxdWFsIHRvIHplcm8KLQotMjAxNC0wNC0xNiAxNzowNDo0MiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCBsZWFrIGRvd25zdHJlYW0gcG9vbCBpbiBwcm9wb3NlX2FsbG9jYXRpb24KLQkgIHBhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2woKSBnaXZlIGEgcmVmIG9uIHRoZSBwb29sLCB3ZSBuZWVkIHRvIHVucmVmIGl0Ci0JICB3aGVuIGRvbmUuCi0KLTIwMTQtMDQtMTQgMTI6MTk6MzkgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDI6IEludHJvZHVjZSBETUFCVUZfSU1QT1JUIElPIG1vZGUKLQotMjAxNC0wNC0xMCAxNjoyNjozNCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogQWRkIGRtYWJ1ZiBleHBvcnQgc3VwcG9ydAotCSAgVGhpcyBjYW4gYmUgZW5hYmxlZCBzaW5nIGlvLW1vZGU9ZG1hYnVmLiBUaGlzIHdpbGwgZW5hYmxlZCBtbWFwIGJhc2UKLQkgIGRyaXZlcnMgdG8gZXhwb3J0IHRoZSBidWZmZXJzIGFzIGRtYWJ1Zi4KLQotMjAxNC0wNC0xNiAxNTo1MTowMyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JICB2NGwyYWxsb2NhdG9yOiBHdWFyYW50eSBxdWV1ZWQgc3RhdGUgaW50ZWdyZXR5Ci0JICBCZWNhdXNlIG9mIHRoZSBidWYgaW4gdmlkZW9idWYyLCBkcWJ1ZiBtYXkgbGVhdmUgdGhlIERPTkUgZmxhZyBiZWluZywKLQkgIHdoaWNoIHdvdWxkIGltcGxpZWQgdGhhdCB0aGUgYnVmZmVyIGlzIHF1ZXVlZC4gQXMgdGhpcyBoYXMgYmVlbiBicm9rZW4KLQkgIGZvciA0IHllYXJzLCBzaW1wbHkgZ3VhcmFudHkgdGhlIHN0YXRlIGZsYWdzIGludGVncml0eSB3aGVuIGRvaW5nCi0JICBxYnVmL2RxYnVmLgotCSAgU2VlIGh0dHBzOi8vcGF0Y2h3b3JrLmxpbnV4dHYub3JnL3BhdGNoLzIzNjQxLwotCi0yMDE0LTA0LTE1IDE3OjMxOjQyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IEltcGxlbWVudCBvcGVuL2Nsb3NlCi0KLTIwMTQtMDQtMTUgMTY6NDM6NDEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogRW5zdXJlIG91dHB1dCBwb29sIGlzIGNvbmZpZ3VyZWQKLQotMjAxNC0wNC0xNSAxNjo0MzoxNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmg6Ci0JICB2NGwydHJhbnNmb3JtOiBDaGVjayBpZiBjYXBzIGhhdmUgY2hhbmdlcyBiZWZvcmUgYXNzZXJ0aW5nCi0JICBJbiBzZXRfY2Fwcywgbm93IGNoZWNrcyBpZiBjYXBzIGFjdHVhbGx5IGNoYW5nZWQgYW5kIHN1Y2NlZWQgaWYgdGhleSBkaWRuJ3QKLQkgIGNoYW5nZS4KLQotMjAxNC0wNC0xNSAxNjo0MTo0NiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogRW5zdXJlIHBvb2wgaXMgY29uZmlndXJlZAotCi0yMDE0LTA0LTA4IDE4OjU0OjA5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEFsd2F5cyBzZXQgYSBzaXplIHdoZW4gZGVjaWRpbmcgYWxsb2NhdGlvbgotCi0yMDE0LTA0LTA4IDE4OjIwOjI1IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEltcHJvdmVkIGRlY2lkZSBhbGxvY2F0aW9uCi0JICBJbXByb3ZlIGRlY2lkZSBhbGxvY2F0aW9uIHNvIGl0IHByb3Blcmx5IGNvbmZpZ3VyZSBib3RoIGxvY2FsIGFuZCBkb3duc3RyZWFtCi0JICBidWZmZXIgcG9vbHMuIEFsc28gcmVhZCBiYWNrIHRoZSBwb29sIGNvbmZpZyBpZiBpdCB3YXMgY2hhbmdlZCB0byB0byBkcml2ZXIKLQkgIGxpbWl0YXRpb25zLgotCi0yMDE0LTA0LTE1IDEzOjMwOjAyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogRG8gbm90IHByZS1jb25maWd1cmUgdGhlIHBvb2wKLQkgIFByZS1jb25maWd1cmluZyB0aGUgcG9vbCBpcyBlcnJvciBwcm9uZSwgc2luY2UgaXQgbWF5IGhpZGUgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgYW5kCi0JICBlbmR1cCB3aXRoIGEgcG9vbCB0aGF0IGlzIG5vdCBjb25maWd1cmVkIHRoZSB3YXkgaXQgc2hvdWxkIChlLmcuIG5vIHZpZGVvIG1ldGEsIHdyb25nCi0JICBxdWV1ZSBzaXplLCBldGMuKQotCi0yMDE0LTA0LTE1IDEzOjIzOjMzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogUHJlc2VydmUgZG93bnN0cmVhbSBtaW5pbXVtIGV2ZW4gaW4gUlcKLQotMjAxNC0wNC0xNSAxMzoyMDoxMiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDJidWZmZXJwb29sOiBUdXJuIGNyb3BtZXRhIGludG8gYSBjdXN0b20gb3B0aW9uCi0JICBUdXJuIGNyb3AgbWV0YSBpbnRvIGEgY3VzdG9tIG9wdGlvbiBhbmQgbWFrZSBzdXJlIGl0J3MgdGhlcmUgaXMgbmVlZGVkLgotCi0yMDE0LTA0LTA5IDEyOjUzOjE5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBFYXJseSBjYXRjaCBzaG9ydCBhbGxvY2F0aW9uCi0JICBDYXRjaCBzaG9ydCBhbGxvY2F0aW9uIGFmdGVyIHNhdmluZyB0aGUgZm9ybWF0LiBUaGlzIGlzIG5vdCBhIGNhdGNoIGFsbCwgYnV0IHNob3VsZCBjYXRjaAotCSAgbW9zdCBvZiB0aGUgbWlzcy1iZWhhdmluZyBkcml2ZXJzIHdoZW4gZG9pbmcgU19GTVQvR19GTVQgYW5kIGF2b2lkIHBvdGVudGlhbCBjcmFzaC4KLQotMjAxNC0wNC0wNCAyMjo0Njo0MCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDJidWZmZXJwb29sOiBQb3J0IHRvIHVzZSBHc3RWNGwyQWxsb2NhdG9yCi0KLTIwMTQtMDQtMDQgMjI6MzU6NDggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYWxsb2NhdG9yLmg6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0JICBJbXBsZW1lbnQgVjRsMiBBbGxvY2F0b3IKLQkgIFRoaXMgZ29hbCBvZiB0aGlzIGFsbG9jYXRvciBpcyBtYWlubHkgdG8gYWxsb3cgdHJhY2tpbmcgdGhlIG1lbW9yeS4KLQkgIEN1cnJlbnRseSwgd2hlbiBhIGJ1ZmZlciBtZW1vcnkgaGFzIGJlZW4gbW9kaWZpZWQsIHRoZSBidWZmZXIgYW5kIGl0J3MKLQkgIG1lbW9yeSBpcyBkaXNwb3NlZCBhbmQgbG9zdCB1bnRpbCB0aGUgc3RyZWFtIGlzIHJlc3RhcnRlZC4KLQotMjAxNC0wNC0xNiAxNjozNTo0OSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCBhZHZlcnRpc2UgY3JvcCBtZXRhCi0JICBDdXJyZW50bHkgd2UgYWR2ZXJ0aXNlIGNyb3AgbWV0YSwgYnV0IG5vdCBlbGVtZW50IGhhbmRsZSBzdXBwb3J0IHRoaXMgbWV0YS4KLQotMjAxNC0wNC0wOCAxODoxODo1NyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBTZXR1cCBwb29sIGFscmVhZHkgc2VuZCBlbGVtZW50IGVycm9yCi0KLTIwMTQtMDQtMDggMTg6MTc6MzEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogV29ya2Fyb3VuZCBkZWNvZGVyIHRoYXQgc2V0IG51bV9wbGFuZXMgdG8gMCBpbiB0aGUgZm9ybWF0Ci0JICBTb21lIHdlbGwga25vd24gZGVjb2RlciB3cm9uZ2x5IHNldCBudW1fcGxhbmVzIHRvIDAgaW4gdGhlaXIgZm9ybWF0IGluc3RlYWQgb2YKLQkgIG9uZS4gSW4gdGhpcyBjYXNlIHdlIHdvdWxkIGVuZHVwIHdpdGggbm8gc2l6ZSB3aGVuIGRlY2lkaW5nIGJ1ZmZlciBhbGxvY2F0aW9uLgotCi0yMDE0LTA0LTA4IDE3OjM0OjE5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEVuc3VyZSBzaXplIGJlZm9yZSBjb25maWd1cmluZyB0aGUgcG9vbAotCi0yMDE0LTA0LTA0IDIyOjM4OjA1IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IFNldCBtaW5pbXVtIGJ1ZmZlcnMgdG8gMgotCSAgQWxsIHRoZSBlbGVtZW50IHJlcXVpcmVzIGF0IGxlYXN0IHR3byBidWZmZXJzLiBUaGlzIGlzIG5vdCB1c2VkIGZvciBSVyBtb2RlLgotCi0yMDE0LTA0LTA0IDIyOjM3OjE0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IFJlbW92ZSB1bnVzZWQgTUFYX0JVRkZFUlMgZGVmaW5lCi0KLTIwMTQtMDQtMDQgMjI6MzY6MzcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRG9uJ3QgaGFyZGNvZGUgbWluL21heCB1c2UgZGVmYXVsdCBpbnN0ZWFkCi0KLTIwMTQtMDQtMTAgMTc6NDk6NDEgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogSW5zdGFsbCBQUk9QX0NBUFRVUkVfSU9fTU9ERSB3aXRoIHJpZ2h0IElECi0KLTIwMTQtMDQtMDggMTg6NTQ6NTAgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogZGVjaWRlX2FsbG9jYXRpb24gcmV0dXJucyBhIGJvb2xlYW4KLQotMjAxNC0wNC0xMCAxNzo0OToyOSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogSW5zdGFsbCBQUk9QX0NBUFRVUkVfSU9fTU9ERSB3aXRoIHJpZ2h0IElECi0KLTIwMTQtMDMtMjcgMTM6MjE6MjUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogQWRkIHByb3Bvc2VfYWxsb2NhdGlvbgotCSAgVGhpcyBzaG91bGQgcmVtb3ZlIDEgY29weSBiZXR3ZWVuIHRoZSBkZWNvZGVyIGFuZCB0aGUgdHJhbnNmb3JtLgotCi0yMDE0LTAzLTI3IDEzOjIwOjUzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyOiBNb3ZlIHByb3Bvc2UgYWxsb2NhdGlvbiB0byB2NGwyb2JqZWN0Ci0KLTIwMTQtMDMtMjAgMTc6MjY6MDUgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSAgdjRsMnRyYW5zZm9ybTogRml4dXAgY2FwcyBxdWVyeQotCi0yMDE0LTAzLTIwIDE1OjMxOjIyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IFNldHVwIGNyb3BwaW5nIGlmIG5lZWRlZAotCi0yMDE0LTAzLTE5IDE3OjI1OjE2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IEV4cG9zZSBCR1JBIGFuZCBBUkdCIGZvcm1hdHMKLQotMjAxNC0wMy0xOCAxNzozMzozOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JICB2NGwydHJhbnNmb3JtOiBFbnN1cmUgb3V0cHV0IHBvb2wgaXMgYWN0aXZhdGVkCi0JICBUaGF0IHBvb2wgbWF5IGJlIGRpZmZlcmVudCB0aGVuIHRoZSBpbnRlcm5hbCBwb29sLgotCi0yMDE0LTAzLTE2IDE5OjExOjE2ICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IEVuc3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbHMgYWN0aWNhdGlvbgotCi0yMDE0LTAzLTE2IDExOjM2OjE5ICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IE1vdmUgc3ViaW5zdGFuY2Ugc3ViY2xhc3MgaW5pdCBuZWFyIG90aGVyIGluaXQKLQotMjAxNC0wMy0xNSAxODo1Njo1MSArMDEwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6Ci0JICB2NGwydHJhbnNmb3JtOiBTdG9wIHN0cmVhbSBiZWZvcmUgY2xvc2luZyB0aGUgZGV2aWNlcy4KLQotMjAxNC0wMy0xNSAxNjo1Mzo1NCArMDAwMCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsIDx2amFxdWV6QGlnYWxpYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uYzoKLQkgIHY0bDJ0cmFuc2Zvcm06IGNvcHkgbWV0ZGF0YQotCi0yMDE0LTAzLTA0IDE4OjMxOjI3IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5oOgotCSAgSW1wbGVtZW50IEdzdFY0bDJUcmFuc2Zvcm0KLQkgIEltcGxlbWVudCBhIHY0bDIgZWxlbWVudCB0aGF0IHdyYXBzIEhXIHZpZGVvIGNvbnZlcnRlcnMuCi0KLTIwMTQtMDMtMjcgMTg6NDE6MDcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDI6IFByb2JlIGZvciBDUkVBVEVfQlVGUyBpbiBvcmRlciB0byBjb3JyZWN0bHkgc2V0IHBvb2wgbWluL21heAotCSAgSW4gb3JkZXIgdG8gY29ycmVjdGx5IHNldCB0aGUgcG9vbCBtaW4vbWF4LCB3ZSBuZWVkIHRvIHByb2JlIGZvciBDUkVBVEVfQlVGUwotCSAgaW9jdGwuIFRoaXMgY2FuIGJlIGRvbmUgYXMgc29vbiBhcyB0aGUgZm9ybWF0IGhhcyBiZWVuIG5lZ290aWF0ZWQgdXNpbmcgYQotCSAgY291bnQgb2YgMC4KLQotMjAxNC0wMy0yNSAxNToyMTowMyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwyOiBNb3ZlIGNhcHR1cmUgZW9zIGhhbmRsaW5nIGluIF9wcm9jZXNzKCkKLQkgIE5vdyB0aGF0IHdlIG1pZ2h0IGJlIGNvcHlpbmcgb3V0IGJ1ZmZlciAoZS5nLiBkb3duc3RyZWFtIGRvbid0IHN1cHBvcnQgdmlkZW8KLQkgIG1ldGEgYnVnIHdlIG5lZWQgaXQpIHdlIG5lZWQgdG8gbW92ZSB0aGUgRU9TIGhhbmRsaW5nIGluc2lkZSB0aGUgcHJvY2VzcwotCSAgbWV0aG9kLgotCi0yMDE0LTAzLTI1IDEwOjQ5OjM5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEZpeCBzdXBwb3J0IGZvciBwbGFuYXIgZm9ybWF0IGluIDEgdjRsMiBtcGxhbmUKLQkgIFNvIGZhciB3ZSB3aGVyZSBvbmx5IHNldHRpbmcgc2F2aW5nIHRoZSBmaXJzdCBwbGFuZSBzdHJpZGUgaW4gdGhlIG1ldGEuIFRoaXMgd2FzCi0JICBsZWFkaW5nIHRvIHdyb25nIHZhbHVlcyBpbiBHc3RWaWRlb01ldGEuCi0KLTIwMTQtMDMtMTkgMTc6NTI6MDggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IENsZWFubHkgZmFpbCBpZiBzZXRfZm9ybWF0IGlzIG5ldmVyIGNhbGxlZAotCi0yMDE0LTAzLTE5IDE3OjAwOjU2IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IEV4cG9zZSBSR0IzMiBmb3JtYXRzIHdpdGggYW5kIHdpdGhvdXQgYWxwaGEKLQkgIEFzIHNvb24gYSB0aGUgYWxwaGEgY29tcG9uZW50IGNhbiBiZSBzZXQsIHdlIGNhbiBleHBvc2UgdGhlIFJHQjMyIGFuZCBCR1IzMgotCSAgZm9ybWF0IGFzIEFSR0IgYW5kIEJHUkEgYXMgbG9uZyB3ZSBjYW4gZGV0ZXJtaW5pc3RpY2FsbHkgc2V0IHRoZSBhbHBoYSBwYWRkaW5nCi0JICB2YWx1ZS4KLQotMjAxNC0wMy0xOCAxNTo0OTo0OSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogQ29ycmVjdGx5IGNoZWNrIGlmIHZpZGVvIG1ldGEgaXMgbmVlZGVkCi0JICBDb3JyZWN0bHkgY2hlY2sgaWYgdmlkZW8gbWV0YSBpcyBuZWVkZWQuIEluIGJ1ZmZlciBwb29sLCB0cnVzdCBuZWVkX3ZpZGVvX21ldGEKLQkgIGZsYWcgaW4gb3JkZXIgdG8gZGVjaWRlIGlmIGNvbmZpZ3VyYXRpb24gc2hvdWxkIHN1Y2NlZWQuCi0KLTIwMTQtMDMtMTggMTU6NDU6MTggLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRml4IHRpbGVkIHN0cmlkZSByZXF1ZXN0Ci0JICBGaXggc3RyaWRlIHJlcXVlc3QgZm9yIHRpbGVkIGZvcm1hdCBhbmQgaW1wcm92ZSBsb2dnaW5nLgotCi0yMDE0LTAzLTE4IDExOjUzOjU3IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBFbnN1cmUgdmlkZW8gYW5kIGNyb3AgbWV0YSBhcmUgZW5hYmxlZCBpZiBuZWVkZWQKLQkgIEluIGNlcnRhaW4gY2FzZXMgd2UgY2Fubm90IGxpdmUgd2l0aG91dCB2aWRlbyBtZXRhIGFuZC9vciBjcm9wIG1ldGEKLQkgIGJlaW5nIGVuYWJsZWQgaW4gb3VyIGludGVybmFsIGJ1ZmZlciBwb29sLiBFbnN1cmUgdGhpcyBpcyBhbHdheXMgdGhlIGNhc2UsCi0JICByZWdhcmRsZXNzIG9mIGhhdmluZyBzdXBwb3J0IGZvciBhbGxvY2F0aW9uIHF1ZXJ5LgotCi0yMDE0LTAzLTE2IDE4OjM5OjMyICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBFbnN1cmUgaW50ZXJuYWwgcG9vbCBhcmUgYWN0aXZhdGVkCi0KLTIwMTQtMDMtMTYgMTc6MDE6MTAgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IENoZWNrIHRoYXQgcG9vbCB3aGVyZSBhbGxvY2F0ZWQgYmVmb3JlIGZsdXNoaW5nIHRoZW0KLQkgIFVwb24gZXJyb3IsIHRoZSBwb29scyBtaWdodCBub3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCB5ZXQsIGhlbmNlIHdlIHNob3VsZCBub3QKLQkgIHRyeSBhbmQgZmx1c2ggdGhlbSAoZXZlbiB0aG91Z2ggd2Ugc3RpbGwgd2FudCB0byBtYWtlIHN1cmUgdGhlIHByb2Nlc3NpbmcgdGhyZWFkCi0JICBpcyBmdWxseSBzdG9wcGVkKS4KLQotMjAxNC0wMy0xNiAxNjo1NTo0MyArMDEwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBFbmZvcmNlIGFjdGl2YXRpb24gb3V0c2lkZSBvZiBwcm9jZXNzCi0JICBFbmZvcmNlIHBvb2wgYmVpbmcgYWN0aXZhdGUgZnJvbSBiZWZvcmUgY2FsbGluZyBwb29sIHByb2Nlc3MuIFRoaXMgc2hvdWxkCi0JICBoZWxwIGNhdGNoaW5nIGJhc2ljIGVycm9ycyBpbiB0aGUgdXNhZ2Ugb2YgYnVmZmVyIHBvb2wuCi0KLTIwMTQtMDMtMTYgMTI6NDQ6MTQgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogZG9uJ3QgdXNlIG93biBwb29sIGlmIGRvd25zdHJlYW0gZG9uJ3Qgc3VwcG9ydCB2aWRlbyBtZXRhCi0KLTIwMTQtMDMtMTQgMDA6MzE6MzIgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBVc2Ugb2JqLT5uX3Y0bDJfcGxhbmVzIGZvciBjb3JyZWN0IG51bWJlciBvZiBwbGFuZXMKLQkgIEJ1ZmZlciBwb29sIHdhcyBndWVzc2luZyB3cm9uZ2x5IHRoZSBudW1iZXIgb2YgcGxhbmVzIHJhdGhlcgotCSAgdGhlbiByZWFkaW5nIHRoZSB2YWx1ZSBmcm9tIG9iai0+bl92NGwyX3BsYW5lcy4gVGhpcyB3YXMgY2F1c2luZwotCSAgZm9ybWF0IFlVMTIgKEk0MjApIHRvIGZhaWwgdXBvbiBjaGVjay4KLQotMjAxNC0wMy0wNyAxNjozOToyOSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBGaXggaGFuZGxpbmcgb2YgY29udGl1b3VzIHZzIG5vbi1jb250aWd1b3VzIHN1cHBvcnQKLQkgIFRoZSBjb21wbGV4IG1lY2hhbmljIHRvIHRyeSBhbmQgY2hvb3NlIHRoZSByaWdodCB0aGluZyBkaWQgbm90IHdvcmsuIEluc3RlYWQsCi0JICBzaW1wbHkgcHJvYmUgdGhlIG5vbi1jb250aWd1b3VzIGZvcm1hdCBmaXJzdCBhbmQgdGhlbiB0aGUgY29udGlndW91cyBvbmUuCi0JICBUaGlzIGlzIGluIGZhY3QgdmVyeSBsb3cgb3ZlcmhlYWQsIGFzIHRoZXJlIGlzIGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YKLQkgIHBpeGVsIGZvcm1hdCBzdXBwb3J0ZWQgYnkgZWFjaCBkZXZpY2VzLgotCi0yMDE0LTA0LTE1IDE1OjA3OjIzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmg6Ci0JICB2NGwyOiBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBhbGlnbm1lbnQgYW5kIGNyb3BwaW5nCi0KLTIwMTQtMDMtMTMgMTk6MjQ6NTEgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwyb2JqZWN0OiBSZW5hbWUgc2V0dXBfZm9ybWF0KCkgbWV0aG9kIGludG8gYWNxdWlyZV9mb3JtYXQoKQotCSAgVGhlIHNldHVwX2Zvcm1hdCgpIHdhcyBjb25mdXNpbmcgc2luY2UgaXQgZG9lcyBub3Qgc2V0IGFueXRoaW5nLCBpbiBmYWN0Ci0JICBpdCByZWFkcyB0aGUgc2V0dXAgZnJvbSB0aGUgZHJpdmVyIGFuZCBzYXZlIGl0LgotCi0yMDE0LTAzLTEzIDE4OjIxOjQxICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IE1vdmUgdHlwZSBkZWNsYXJhdGlvbiB0byB0aGUgdG9wCi0KLTIwMTQtMDMtMTIgMTg6MDc6MzggKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IFByb3RlY3QgTlVMTCBwb29sIHdoaWxlIGdvaW5nIHRvIFJFQURZCi0JICBXaGVuIHRoZSBwaXBlbGluZSBmYWlscyBlYXJseSwgdGhlIHBvb2wgbWlnaHQgYmUgdW5zZXQgYmVmb3JlIHRoZSBwcm9jZXNzaW5nCi0JICB0aHJlYWQgaGFzIHJ1biBvbmNlLiBBZGQgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoYXQuCi0KLTIwMTQtMDMtMTIgMTg6MDE6MDkgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRmFpbCBjbGVhbmx5IGlmIHBpeGVsIGZvcm1hdCBpcyB1bmtvd24gb3Igbm90IHJhdyB2aWRlbwotCSAgQ2VydGFpbiBkZWNvZGVyIGhhcyBiZWVuIGZvdW5kIHRvIG5vdCBjaG9vc2UgYSBmb3JtYXQgYXV0b21hdGljYWxseS4gUnVubmluZwotCSAgdjRsMnZpZGVvZGVjIG9uIHRoZXNlIHdvdWxkIGFzc2VydC4gVGhpcyBwYXRjaCB3aWxsIG1ha2UgaXQgZmFpbCBjbGVhbmx5Ci0JICBpbnN0ZWFkLgotCi0yMDE0LTAzLTEyIDE3OjU2OjE4ICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBDbGVhciB0aGUgaW5wdXQgc3RhdGUgcG9pbnRlciBhZnRlciB1bnJlZgotCSAgSWYgY2FwcyBhcmUgc2V0IGFnYWluLCB3ZSBoYXZlIGEgcmlzayBvZCByZXR1cm5pbmcgZnJvbSBzZXRfZm9ybWF0IHdpdGggYQotCSAgaW5wdXRfc3RhdGUgcG9pbnRpbmcgdG8gZGVhZCBtZW1vcnkuIENsZWFyaW5nIHRoZSBwb2ludGVyIGFmdGVyIHVucmVmIGZpeAotCSAgdGhpcyBpc3N1ZS4KLQotMjAxNC0wMy0xMiAxNzoxMToxNiArMDEwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogaGFuZGxlIHN0b3AgYmVpbmcgY2FsbGVkIHdpdGhvdXQgZmx1c2gKLQkgIFVwcG9uIGNlcnRhaW4gZG93bnN0cmVhbSBlcnJvciwgc3RvcCgpIGlzIGNhbGxlZCB3aXRob3V0IGEgZmx1c2goKS4gVGhpcyBtZWFuIHRoYXQKLQkgIHRoZSBzdHJlYW1pbmcgdGhyZWFkIG1heSBzdGlsbCBiZSBydW5uaW5nIGV2ZW4gdGhvdWdoIHVubG9jayBoYXMgYmVlbiBjYWxsZWQuCi0JICBOb3cgY2FsbGluZyBmbHVzaCB0byByZXNldCB0aGUgZGVjb2RlciBzdGF0ZSBpZiB3ZSBhcmUgcHJvY2Vzc2luZy4KLQotMjAxNC0wMy0wNiAxODoxMzoxNCAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogRGVmYXVsdCB0byB0ZW1wbGF0ZSBpbiBjYXBzIHF1ZXJ5Ci0KLTIwMTQtMDMtMTEgMTQ6MjM6MzIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IEVuc3VyZSBwcm9jZXNzaW5nIHRocmVhZCBoYXMgc3RvcHBlZCB3aGVuIGRyYWluaW5nCi0KLTIwMTQtMDMtMTEgMTQ6MDE6MjcgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JICB2NGwydmlkZW9kZWM6IERvbid0IGRyYWluIGlmIHByb2Nlc3NpbmcgdGhyZWFkIGlzIGluYWN0aXZlCi0KLTIwMTQtMDUtMDggMDk6NDk6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogQ2xlYW4gdXAgYWxsIHBlbmRpbmcgb3BlcmF0aW9ucyBmcm9tIGxpYnNvdXAgYmVmb3JlIHVucmVmZmluZyBvdXIgY29udGV4dAotCSAgV2hlbiB3ZSBjYW5jZWwgY29ubmVjdGlvbiBhdHRlbXB0cyBhbmQgc2ltaWxhciB0aGluZ3MsIHRoZXJlIGFyZSBzdGlsbAotCSAgc29tZSBvcGVyYXRpb25zIHBlbmRpbmcgb24gb3VyIG1haW4gY29udGV4dCBmcm9tIHRoZSBHQ2FuY2VsbGFibGVzLiBXZQotCSAgc2hvdWxkIGxldCB0aGVtIGFsbCBydW4gYmVmb3JlIHVucmVmZmluZyBvdXIgY29udGV4dCwgb3RoZXJ3aXNlIHdlIGxlYWsKLQkgIGZpbGUgZGVzY3JpcHRvcnMuCi0JICBVbmZvcnR1bmF0ZWx5IHRoaXMgcmVxdWlyZXMgbGlic291cCAyLjQ3LjAgb3IgbmV3ZXIgYXMgZWFybGllciB2ZXJzaW9ucwotCSAgc3RlYWwgb3VyIG1haW4gY29udGV4dCBmcm9tIHVzIGFuZCB3ZSBjYW4ndCB1c2UgaXQgZm9yIGNsZWFudXAgbGF0ZXIKLQkgIHdpdGhvdXQgYXNzZXJ0aW9ucyBhbmQgZnVubnkgY3Jhc2hlcy4KLQkgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgRG1pdHJ5IFNoYXRyb3YgPHNoYXRyb3ZAZ21haWwuY29tPi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM5NDQKLQotMjAxNC0wNS0wNyAxNTo0OTozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIHRlc3RzOiBmaXggY29tcGlsYXRpb24gb2Ygc291cGh0dHBzcmMgdGVzdCBmb3IgbGlic291cCAyLjQwIGZvciByZWFsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MzI5Ci0KLTIwMTQtMDUtMDcgMTM6MjM6NTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogZml4IGNvbXBpbGF0aW9uIG9mIHNvdXBodHRwc3JjIHRlc3QgZm9yIGxpYnNvdXAgMi40MAotCSAgU09VUF9DSEVDS19WRVJTSU9OIHdhcyBvbmx5IGFkZGVkIGluIDIuNDEsIGJ1dCB3ZSBvbmx5Ci0JICBkZXBlbmQgb24gMi40MC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczMjkKLQotMjAxNC0wNS0wNyAwMDo1ODoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogc2tpcCBQSUNUVVJFIGhlYWRlcnMgd2l0aG91dCBhbnkgaW1hZ2UgZGF0YQotCSAgRml4ZXMgd2FybmluZyBpZiB0aGUgaW1hZ2UgbGVuZ3RoIGlzIDAuCi0KLTIwMTQtMDUtMDYgMDk6MjI6MTggKzAwMDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHVzZSBYMTEgZGV0ZWN0aW9uIG1hY3JvIGZyb20gY29tbW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5NjIxCi0KLTIwMTQtMDQtMzAgMTE6MTM6MTIgKzAyMDAgIEd1aWxsYXVtZSBEZXNtb3R0ZXMgPGd1aWxsYXVtZS5kZXNtb3R0ZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL1JFQURNRToKLQkgIHJ0cC9SRUFETUU6IHVwZGF0ZSBwaXBlbGluZXMgdG8gd29yayB3aXRoIDEuMAotCSAgLSBVc2UgZ3N0LWxpYmF2IGVuY29kZXJzL2RlY29kZXJzIGluc3RlYWQgb2YgZ3N0LWZmbXBlZwotCSAgLSBnc3RydHBqaXR0ZXJidWZmZXIgLT4gcnRwaml0dGVyYnVmZmVyCi0JICAtIGdzdC1sYXVuY2gtMC4xMCAtPiBnc3QtbGF1bmNoLTEuMAotCSAgLSBBZGQgJ3ZpZGVvY29udmVydCcgZWxlbWVudAotCSAgLSB4dmltYWdlc2luayAtPiBhdXRvdmlkZW9zaW5rCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MjQ3Ci0KLTIwMTQtMDUtMDUgMTQ6NDE6MDUgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2E6IHJlamlnIHRlc3QgdG8gYXZvaWQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yCi0JICBDb3Zlcml0eSAxMTk1MTIxLCAxMTk1MTIwCi0KLTIwMTQtMDUtMDUgMTQ6MzM6MzggKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnB4L2dzdHZwOWVuYy5jOgotCSAgdnA5ZW5jOiBkbyBub3QgZGVyZWZlcmVuY2UgTlVMTCBwb2ludGVyCi0JICBDb3Zlcml0eSAxMTk3NzAzCi0KLTIwMTQtMDUtMDUgMTQ6MzI6MDYgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZW5zdXJlIHdlIGRvbid0IGRlcmVmZXJlbmNlIGEgTlVMTCBwb2ludGVyCi0JICB3aGlsZSB3b3JraW5nIG91dCB0aGUgY29kZWMgSUQuCi0JICBDb3Zlcml0eSAxMTk1MTQ4Ci0KLTIwMTQtMDUtMDUgMTI6MDc6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkgIHY0bDI6IG1pbm9yIGZpeCBmb3IgY2xvc2luZyB0aGUgZmQKLQkgIFRoZSBmZCByZXR1cm5lZCBieSBvcGVuKCkgY291bGQgdGhlb3JldGljYWxseSBiZSAwIGFzIHdlbGwuCi0JICBDb3Zlcml0eSBDSUQgMTIxMTgyMy4KLQotMjAxNC0wNS0wNCAyMDoyMzoyOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAb2NyZXRlLmNhPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBhdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgcnRwYXV4L3J0cHJ0eDogTWFrZSB0ZXN0cyBub24tcmFjeQotCSAgRml4IHRoZSByYWNpbmVzcyBieSBpdGVyYXRpbmcgb24gYSBjb25kaXRpb24gaW5zdGVhZCBvZiB1c2luZyB0aGUgZ21haW5sb29wLgotCSAgRG9uJ3QgdXNlIHRoZSBFT1MgYXMgdGhlIHRhcmdldCwgb3RoZXJ3aXNlIHRoZSByZXRyYW5zbWlzc2lvbiBvZiB0aGUgbGFzdAotCSAgcGFja2V0cyBhcmUgbG9zdC4gQWxzbyBjb3VudCB0aGUgcmV0cmFubWlzc2lvbnMgcmVxdWVzdHMgdGhhdCBhcmUgZHJvcHBlZC4KLQkgIENoZWNrIHRoZSBjb25kaXRpb24gYmVmb3JlIGJsb2NraW5nIG9uIHRoZSBHQ29uZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODUwMQotCi0yMDE0LTA1LTA0IDIyOjMyOjU0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBvY3JldGUuY2E+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuaDoKLQkgIHJ0cHJ0eHJlY2VpdmU6IFdhaXQgdW50aWwgdGltZW91dCB0byBjbGVhciBhc3NvY2lhdGlvbiByZXF1ZXN0cwotCSAgSWYgdHdvIHN0cmVhbXMgcmVxdWVzdCBhIHJldHJhbm1pc3Npb24gZm9yIHRoZSBzYW1lIFNTUkMsIGlnbm9yZSB0aGUgc2Vjb25kCi0JICBvbmUgaWYgdGhlIGZpcnN0IG9lbiBpcyBsZXNzIHRoYW4gb25lIHNlY29uZCBvbGQsIG90aGVyd2lzZSB0aW1lIG91dCB0aGUgZmlyc3QKLQkgIG9uZSBhbmQgaWdub3JlIHRoZSBzZWNvbmQuCi0KLTIwMTQtMDUtMDQgMTg6NTk6MzMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQG9jcmV0ZS5jYT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBtdXguYzoKLQkgIHJ0cG11eDogQWx3YXlzIGxldCB1cHN0cmVhbSBjaG9zZSB0aGUgc3NyYyBpZiBpdCB3aXNoZXMKLQotMjAxNC0wNS0wNCAxMzozNzo0NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogYXZvaWQgc3RhbGwgYnkgY29ycnVwdGVkIHNlcW51bSBhY2NvdW50aW5nCi0KLTIwMTQtMDUtMDQgMDE6MTQ6MzMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQG9jcmV0ZS5jYT4KLQotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlbW9uaXRvci5jOgotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlbW9uaXRvci5oOgotCSAgcHVsc2VkZXZpY2Vtb25pdG9yOiBJbmRleCBhcmUgcGVyIGZhY2lsaXR5LCBub3QgZ2xvYmFsCi0JICBTbyBuZWVkIHRvIGtlZXAgdGhlIHR5cGUgb2YgZGV2aWNlIGluIHRoZSBkZXZpY2Ugb2JqZWN0Ci0KLTIwMTQtMDUtMDQgMDE6MTM6MjQgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQG9jcmV0ZS5jYT4KLQotCSogZXh0L3B1bHNlL3B1bHNlZGV2aWNlbW9uaXRvci5jOgotCSAgcHVsc2VkZXZpY2Vtb25pdG9yOiBwYV9zdWJzY3JpcHRpb25fZXZlbnRfdCBhcmUgZW51bXMsIG5vdCBmbGFncwotCSAgQ292ZXJpdHkgMTE5NTEzMgotCi0yMDE0LTA1LTAyIDIyOjQyOjU0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmRldmljZW1vbml0b3IuYzoKLQkgIHY0bDJkZXZpY2Vtb25pdG9yOiBQb3J0IHRvIHVzZSBHc3RWNGwySXRlcmF0b3IKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc5MjUKLQotMjAxNC0wNS0wMiAyMTozODozMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmg6Ci0JICB2NGwyOiBVc2Ugc2luZ2xlIHBhc3MgaXRlcmF0b3IgZm9yIE0yTSBwcm9iZQotCSAgSW5zdGVhZCBvZiBoYXZpbmcgZWFjaCBNMk0gY2xhc3MgZG8gdGhlaXIgb3duIHByb2JpbmcsIHVzZSB0aGUKLQkgIEdzdFY0bDJJdGVyYXRvciBhbmQgcHJvYmUgYWxsIGRldmljZXMgaW4gYSBzaW5nbGUgcGFzcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc5MjUKLQotMjAxNC0wNS0wMiAxNjo1NTowNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL3Y0bDItdXRpbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDItdXRpbHMuaDoKLQkgIHY0bDI6IEFkZCBhIGNvbW1vbiBkZXZpY2UgZW51bWVyYXRvcgotCSAgVGhpcyB3aWxsIGFsbG93IHJlbW92aW5nIGNvZGUgZHVwbGljYXRpb24gKGhlbmNlIGJ1Z3MgZHVwbGljYXRpb24pLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzkyNQotCi0yMDE0LTAzLTE2IDExOjM4OjA3ICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmg6Ci0JICB2NGwydmlkZW9kZWM6IFNpbXBsaWZ5IHN1Yi1pbnN0YW5jaWF0aW9uIG1lY2hhbmlzbQotCSAgU2ltcGxpZnkgc3ViLWluc3RhbmNpYXRpb24gYnkgZGVmaW5pbmcgYW4gYWJzcmFjdCB0eXBlIGFuZCB1c2luZyBzdWJ0eXBlCi0JICBjbGFzcyBhbmQgaW5zdGFuY2UgaW5pdCBjYWxsYmFjay4gVGhpcyBhbHNvIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSB0ZW1wbGF0ZQotCSAgcGFkcyBnZXQgaW5pdGlhbGl6ZWQgdG9vIGxhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3OTI1Ci0KLTIwMTQtMDUtMDIgMTg6MTg6MjYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JICB2NGwyOiBDbGVhbnVwIHBsdWdpbiByZWdpc3RyYXRpb24KLQkgIFRoZXJlIGlzIG5vIHBsYW4gdG8gaW50cm9kdWNlIHNwZWNpYWwgc291cmNlcyBmb3IganBlZywgdGUgdjRsMnNyYyB3b3JrcyBmaW5lCi0JICBmb3IgdGhpcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc5MjUKLQotMjAxNC0wNS0wMyAxODozMDoyMCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAb2NyZXRlLmNhPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwY29sbGlzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBLZWVwIGxvY2FsIGNvbmZsaWN0aW5nIGFkZHJlc3NlcyBpbiB0aGUgc2Vzc2lvbgotCSAgQXMgd2Ugbm93IHJlcGxhY2UgdGhlIGxvY2FsIFJUUFNvdXJjZSBvbiBhIGNvbmZsaWN0LCBpdCdzIG5vIGxvbmdlciBwb3NzaWJsZQotCSAgdG8ga2VlcCBsb2NhbCBjb25mbGljdHMgaW4gdGhlIFJUUFNvdXJjZSwgc28gdGhleSBpbnN0ZWFkIG5lZWQgdG8gYmUga2VwdAotCSAgaW4gdGhlIFJUUFNlc3Npb24uCi0JICBBbHNvIGZpeCB0aGUgcnRwY29sbGlzaW9uIHRlc3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgY29sbGlzaW9ucyBpbnN0ZWFkIG9mCi0JICBvbmUgYnkgY2hhbmdlIHRoZSBhZGRyZXNzLCBhcyBvdGhlcndpc2Ugd2UgZGV0ZWN0ZWQgdGhhdCBpdCB3YXMgYSBzaW5nbGUgb25lLgotCi0yMDE0LTA1LTAzIDIwOjQ4OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMy4xID09PQotCi0yMDE0LTA1LTAzIDE4OjAyOjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYW9yYy1kaXN0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMS4zLjEKLQotMjAxNC0wNS0wMyAxODowMjowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxNC0wNS0wMyAxNzoyMjo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vemhfQ04ucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDE0LTA1LTAzIDExOjQzOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zaGFwZXdpcGUuYzoKLQkgIHNoYXBld2lwZTogU2VuZCBpbml0aWFsIGV2ZW50cyBhZnRlciBzZXR0aW5nIHRoZSBlbGVtZW50cyB0byBQTEFZSU5HCi0JICBPdGhlcndpc2Ugd2Ugc2VuZCB0aGVtIHRvbyBlYXJseSwgYW5kIHNldHRpbmcgdGhlIGVsZW1lbnRzIHRvIFBMQVlJTkcKLQkgIGFmdGVyd2FyZHMgd2lsbCBkcm9wIGFsbCB0aGUgZXZlbnRzIGFnYWluLgotCi0yMDE0LTA1LTAzIDEwOjE1OjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYmNiMTUxOCB0byAyMTFmYTVmCi0KLTIwMTQtMDUtMDIgMTc6MTI6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IFNldCBzZWdtZW50IHBvc2l0aW9uIHRvIHRoZSBzdG9wIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIKLQotMjAxNC0wNS0wMiAxNzoxMDoxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogUHJvcGVybHkgcmVwb3J0IGVycm9ycyBiZWZvcmUgc3RvcHBpbmcgdGhlIHNyY3BhZCB0YXNrCi0KLTIwMTQtMDUtMDIgMTc6MDI6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IEVycm9yIG91dCBpZiB3ZSBoYXZlIG5vIGNhcHMgeWV0Ci0KLTIwMTQtMDUtMDIgMTQ6NDk6MjcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBhdm9pZCBkaXZpZGluZyBieSBhIDAgYmxvY2thbGlnbgotCSAgVGhpcyBjYW4gYmUgMC4gSW4gdGhhdCBjYXNlLCBkbyBub3QgdHJ5IHRvIGN1dCBvZmYgdGhlIGxhc3QgZmV3Ci0JICBieXRlcyBmcm9tIHRoZSBsYXN0IGJ1ZmZlci4KLQkgIENvdmVyaXR5IDExNDY5NzEKLQotMjAxNC0wNS0wMiAxNDoyNTowMSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBkbyBub3QgdXNlIHVpbml0aWFsaXplZCBjbHV0IG9uIGVycm9yCi0JICBJZiB3ZSdyZSBtaXNzaW5nIHBhcnQgb2YgdGhlIGNsdXQsIGRvIG5vdCB0cnkgdG8gdXNlIGl0LiBJdCBzZWVtcwotCSAgdmVyeSBsaWtlbHkgdGhlIGJyZWFrIHdhcyBtZWFudCB0byBicmVhayBvdXQgb2YgdGhlIHN3aXRjaCByYXRoZXIKLQkgIHRoYW4gZnJvbSB0aGUgbG9vcC4KLQkgIENvdmVyaXR5IDExMzk4NzgKLQotMjAxNC0wNS0wMiAxNDoxODowOCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JICBmbHhkZWM6IGZpeCBpbnRlZ2VyIG92ZXJmbG93Ci0JICBDb3Zlcml0eSAxMTM5ODU5Ci0KLTIwMTQtMDUtMDIgMTQ6MDk6MDIgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JICBydHBxZG1kZXBheTogcmVtb3ZlIHBvaW50bGVzcyBjaGVjawotCSAgQmVzaWRlcywgdGhlIHBvaW50ZXIgd2FzIGRlcmVmZXJlbmNlZCBlYXJsaWVyIGFueXdheS4KLQkgIENvdmVyaXR5IDExMzk4NTMKLQotMjAxNC0wNS0wMiAxNDowNjoyNSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHJlbW92ZSBkdXBsaWNhdGUgdGVzdAotCSAgaXRlbSB3YXMgZGVyZWZlcmVuY2UgcHJldmlvdXNseS4KLQkgIFdoaWxlIHRoZXJlLCByZW9yZGVyIHNvbWUgdGVzdCBmb3IgZmFzdGVyIGVhcmx5IG91dC4KLQkgIENvdmVyaXR5IDExMzk4NDQKLQotMjAxNC0wNS0wMiAxNDowMjo1MiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IGd1YXJkIGFnYWluc3QgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlCi0JICBDb3Zlcml0eSAxMTM5ODM4Ci0KLTIwMTQtMDUtMDIgMTM6NTk6MDcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBmaXggdGhlb3JldGljYWwgaW50ZWdlciBvdmVyZmxvdwotCSAgVGhpcyBjb2RlIGlzbid0IGFjdHVhbGx5IHVzZWQgYXQgdGhlIG1vbWVudCwgdW5zdXJlIGlmIEkgc2hvdWxkCi0JICBqdXN0IHJlbW92ZSBpdCBvciBub3QuLi4KLQkgIENvdmVyaXR5IDExMzk4MTEKLQotMjAxNC0wNS0wMiAxMzozMzowMiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JICBtYXRyb3NrYTogYmxpbmRseSBmaXggd3JpdGluZyB2YXJpYWJsZSBsZW5ndGggbmVnYXRpdmUgdmFsdWVzCi0JICBTcG90dGVkIHdoaWxlIGZpeGluZyBzb21ldGhpbmcgZWxzZSBpbiB0aGUgYXJlYS4KLQkgIE5vdGhpbmcgY2FsbHMgdGhpcyB3aXRoIGEgbmVnYXRpdmUgdmFsdWUuCi0KLTIwMTQtMDUtMDIgMTM6Mjk6MzMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2E6IGRvIG5vdCBsb3NlIHRoZSB0b3AgYml0cyB3aGVuIHdyaXRpbmcgYSA+IDMyIGJpdCB2YWx1ZQotCSAgQ292ZXJpdHkgMTEzOTgwNgotCi0yMDE0LTA1LTAyIDEyOjEwOjI2ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBhZGQgbWlzc2luZyBicmVhayBpbiBzd2l0Y2gKLQkgIENvdmVyaXR5IDExMzk3NTUKLQotMjAxNC0wNS0wMiAxMTozOTozOSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2E6IGRvIG5vdCB0cnkgdG8gY2FsbCBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgb24gYSBOVUxMIHBhZAotCSAgZ3N0X21hdHJvc2thX3BhcnNlX3F1ZXJ5IGNhbiBiZSBjYWxsZWQgZXhwbGljaXRlbHkgd2l0aCBhIE5VTEwgcGFkLgotCSAgSWYgd2UgcmVhY2ggdGhpcyBwb2ludCB3aXRoIGEgTlVMTCBwYWQsIGZhaWwgdGhlIHF1ZXJ5LgotCSAgQ292ZXJpdHkgMTEzOTcxNQotCi0yMDE0LTA1LTAyIDExOjI4OjAxICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JICBtYXRyb3NrYTogZG8gbm90IHJldHVybiBHU1RfRkxPV19PSyBpZiB3ZSBkaWQgbm90IGdldCBhIGJ1ZmZlcgotCSAgQ292ZXJpdHkgMTEzOTcxNCAod2hpY2ggd2lsbCBsaWtlbHkgY29tZSBiYWNrIGluIGFub3RoZXIgZ3Vpc2UsCi0JICBhcyB0aGUgX3JlYWRfaW5pdCBjYWxsIGNhbiBoYXZlIGEgZmFpbGluZyBfbWFwKQotCi0yMDE0LTA1LTAyIDExOjIwOjMzICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkgIG1hdHJvc2thOiBjYXRjaCBmYWlsdXJlIHRvIG1hcCBidWZmZXIKLQkgIEF2b2lkcyBkZXJlZmVyZW5jaW5nIE5VTEwuCi0JICBDb3Zlcml0eSAxMTM5NzEyCi0KLTIwMTQtMDUtMDIgMTA6NTI6NDQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiByZWZ1c2UgY2FwcyB3aXRoIGludmFsaWQgZnJhbWVyYXRlCi0JICBDb3Zlcml0eSAxMTM5NzAxCi0KLTIwMTQtMDUtMDIgMTA6MjE6MDkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogaGFuZGxlIDAgc2l6ZSBwYWNrZXRzIHdpdGhvdXQgZGl2aWRpbmcgYnkgMAotCSAgQ292ZXJpdHkgMTEzOTY5MQotCi0yMDE0LTA1LTAyIDA5OjQ5OjMyICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBndWFyZCBhZ2FpbnN0IGludmFsaWQgZnJhbWUgc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSAwCi0JICBDb3Zlcml0eSAxMTM5NjkwCi0KLTIwMTQtMDUtMDIgMDk6NDk6MTcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHRyaXZpYWwgdHlwbyBmaXgKLQotMjAxNC0wNS0wMiAwOTo0Mzo1NCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSAgc3BlZXhkZWM6IHJlbW92ZSBkZWFkIGNvZGUKLQkgIGZwcCBjYW4gbmV2ZXIgZXF1YWwgMCBoZXJlLCBvciB0aGUgbG9vcCB3b3VsZCBub3QgZXhlY3V0ZSBhdCBhbGwuCi0JICBaZXJvIGZwcCB3YXMgcG9zc2libGUgYmVmb3JlIGFzIHRoZSBsb29wIGNvbmRpdGlvbiB3YXMgYWxsb3dpbmcKLQkgIGl0IHNwZWNpZmljYWxseSwgYnV0IG5vIG1vcmUuCi0JICBDb3Zlcml0eSAxMTM5NjgxCi0KLTIwMTQtMDUtMDIgMDk6NDE6MTkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzNC9vc3M0LXByb3BlcnR5LXByb2JlLmM6Ci0JICBvc3M0OiByZW1vdmUgZGVhZCBtaXhlciBjb2RlCi0JICBUaGlzIHdhcyBwYXJ0bHkgcmVtb3ZlZCBpbiB0aGUgcG9ydCB0byAwLjExLiBJZiBzdGlsbCBuZWVkZWQsCi0JICBpdCdzIHN0aWxsIHRoZXJlIGluIHRoZSBoaXN0b3J5LgotCSAgQ292ZXJpdHkgMTEzOTY4NwotCi0yMDE0LTA1LTAyIDA5OjMzOjUxICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zczQvb3NzNC1wcm9wZXJ0eS1wcm9iZS5jOgotCSAgb3NzNDogZml4IGEgbWlzc2luZyB1bmxvY2sgYW5kIGEgcmV0dXJuLW9ubHktd2hlbi1hc3NlcnRpb25zLWVuYWJsZWQKLQkgIFNwb3R0ZWQgb24gdGhlIHNpZGUgd2hpbGUgbG9va2luZyBhdCBhbm90aGVyIGlzc3VlLgotCi0yMDE0LTAzLTA3IDE3OjMxOjI5IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IENvcnJlY3RseSBtYXAgUkdCMzIgZm9ybWF0Ci0JICBJbiB2NGwyIHNwZWNpZmljYXRpb24sIFJHQjMyIGhhcyB0aGUgYWxwaGEsIG9yIHBhZGluZywgZmlyc3QsIG5vdCBsYXN0LgotCSAgU2VlIGh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvdjRsLWR2Yi1hcGlzL3BhY2tlZC1yZ2IuaHRtbCAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQwOTQxCi0KLTIwMTQtMDQtMzAgMTg6MDY6NDAgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiByZW1vdmUgZGVhZCBjb2RlCi0JICBGb3IgOCBiaXQgd2lkdGgsIHdlIGFsd2F5cyBoYXZlIGRlcHRoPT1nZGVwdGg9PXdpZHRoPT04LgotCSAgQ292ZXJpdHkgMTEzOTY3OAotCi0yMDE0LTA0LTMwIDE3OjQ4OjUzICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IHJlbW92ZSBkZWFkIGNvZGUKLQkgIEEgc3RyaWNlciBjaGVjayBpcyBhbHJlYWR5IGRvbmUgZWFybGllciwgYW5kIGludGVnZXIgb3ZlcmZsb3dzCi0JICBkbyBub3Qgc2VlbSBwb3NzaWJsZSBoZXJlLgotCSAgQ292ZXJpdHkgMTEzOTY3NQotCi0yMDE0LTA0LTMwIDE0OjUwOjQ0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBydHB2cmF3cGF5OiBndWFyZCBhZ2FpbnN0IHBhdGhvbG9naWNhbCAibm8gc3BhY2UiIGNvbmRpdGlvbgotCSAgRXZlbiBpZiBvbmUgd291bCBob3BlIG9uZSBwaXhlbCBjYW4gZml0IGluIGEgTVRVLCBlbnN1cmUgd2UgZG8gbm90Ci0JICBvdmVyd3JpdGUgYSBidWZmZXIgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCi0JICBTcG90dGVkIHdoaWxlIGxvb2tpbmcgYXQgQ292ZXJpdHkgMTIwODc4NgotCi0yMDE0LTA0LTMwIDExOjUyOjEwICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkgIHJ0cGpwZWdkZXBheTogc2FuaXR5IGNoZWNrIGZvciBOVUxMIHF0YWJsZQotCSAgQ2FuIGhhcHBlbiAoYXQgbGVhc3QgaW4gY3JhZnRlZCBzdHJlYW0pCi0JICBDb3Zlcml0eSAxMjA4Nzc4Ci0KLTIwMTQtMDQtMzAgMDE6MDg6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IHBhc3Mgb24gdGFncyBmcm9tIHVwc3RyZWFtIGlmIHRoZXJlIGFyZSBhbnkKLQkgIERvbid0IGp1c3QgaWdub3JlIHVwc3RyZWFtIHRhZ3MgZnJvbSBlLmcuIGFuIElEMyB0YWcgYmVmb3JlCi0JICB0aGUgLndhdiBkYXRhLCBwYXNzIHRoZW0gb24gZG93bnN0cmVhbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjkyMjMKLQotMjAxNC0wNC0yOSAxNjoyNjo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBvcHRpbWl6ZSB0aW1lciB1cGRhdGUKLQkgIFdoZW4gd2UgYXJlIG5vdCBkb2luZyByZXRyYW5zbWlzc2lvbiwgd2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIGN1cnJlbnQKLQkgIHNlcW51bSBzbyB3ZSBjYW4gc3RvcCB3aGVuIHdlIGZvdW5kIGl0LgotCi0yMDE0LTA0LTI5IDE2OjIxOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc21hbGwgb3B0aW1pemF0aW9ucwotCSAgU21hbGwgb3B0aW1pemF0aW9ucyB3aGVyZSB3ZSBjYW4uCi0JICBBZGQgc29tZSBtb3JlIGRlYnVnLgotCi0yMDE0LTA0LTI5IDE2OjE2OjE3ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHNpZ25hbCB3aGVuIG5leHRfc2VxbnVtIGNoYW5nZWQKLQkgIFNpZ25hbCB0aGUgcHVzaGluZyB0aHJlYWQgd2hlbiB0aGUgbmV4dF9zZXFudW0gY2hhbmdlZCBhbmQgd2UgbWlnaHQgYmUKLQkgIGFibGUgdG8gcHVzaCBhIGJ1ZmZlciBub3cuCi0KLTIwMTQtMDQtMjkgMTY6MTI6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogb25seSBzaWduYWwgZXZlbnQgd2hlbiBoZWFkIGNoYW5nZWQKLQkgIEFmdGVyIGFkZGluZyBhIGJ1ZmZlciwgb25seSBzaWduYWwgdGhlIHB1c2hpbmcgdGhyZWFkIHdoZW4gdGhlIGhlYWQKLQkgIGJ1ZmZlciBjaGFuZ2VkIG9yIGVsc2Ugd2UgY2F1c2UgYSB1c2VsZXNzIHdha2V1cC4KLQotMjAxNC0wNC0yOSAxNToyOTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHJld29yayBwYWNrZXQgaW5zZXJ0Ci0JICBSZXdvcmsgdGhlIHBhY2tldCBxdWV1ZSBzbyB0aGF0IHRoZSBtb3N0IGNvbW1vbiBhY3Rpb24gKGluc2VydCBhIHBhY2tldAotCSAgYXQgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlKSBnb2VzIHZlcnkgZmFzdC4KLQkgIFJlcG9ydCBpZiBhIHBhY2tldCB3YXMgaW5zZXJ0ZWQgYXQgdGhlIGhlYWQgaW5zdGVhZCBvZiB0aGUgdGFpbCBzbyB0aGF0Ci0JICB3ZSBjYW4ga25vdyB3aGVuIHRvIHJldHJ5IF9wb3Agb3IgX3BlZWsuCi0KLTIwMTQtMDQtMjggMTQ6NDE6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBydHB2cmF3OiB1c2UgcGxhbmUgcG9pbnRlcnMgd2hlbiBuZWVkZWQKLQkgIFBhY2svdW5wYWNrIHBsYW5hciBmb3JtYXRzIHRvL2Zyb20gdGhlIGZpcnN0IHBsYW5lLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTA1OAotCi0yMDE0LTA0LTI4IDA5OjQ3OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIHNvdXBodHRwc3JjOiBSZW1lbWJlciBpZiBhIHJlZGlyZWN0IGlzIHBlcm1hbmVudCBvciBub3QgYW5kIHN0b3JlIGl0IGluIHRoZSBxdWVyeQotCi0yMDE0LTA0LTI3IDIxOjU3OjMxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vY29uZmlnX3BhcmFtLmM6Ci0JICBnb29tOiBSZW1vdmUgZnJlbmNoIGNvbW1lbnQgc2F5aW5nIHRvIHByZWZpeCBmdW5jdGlvbnMKLQkgIEFsbCBub24tc3RhdGljIGZ1bmN0aW9uIGluIHRoaXMgZmlsZSBhcmUgYWxyZWFkeSBwcmVmaXhlZCB3aXRoIGdvb21fLgotCi0yMDE0LTA0LTI4IDAwOjIwOjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZ29vbS9maWx0ZXJzLmM6Ci0JICBnb29tOiBmaXggY29tcGlsYXRpb24gb24gaW9zLWFybTctMTAuOSBhbmQgb3N4LXg4Nl82NAotCSAgdWludCBpcyBub3QgYSBzdGFuZGFyZCB0eXBlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgdXNlcwotCSAgVWludCB3aGljaCBpcyBsb2NhbGx5IHR5cGVkZWZlZCB0byB1bnNpZ25lZCBpbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5MDY3Ci0KLTIwMTQtMDQtMjcgMTg6Mjk6MTEgLTA0MDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9nb29tL2ZpbHRlcnMuYzoKLQkgIGdvb206IGZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9mIGxlZnQtc2hpZnQKLQkgIERvbid0IGxlZnQtc2hpZnQgaW50byB0aGUgc2lnbiBiaXQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGFuZCBwb3RlbnRpYWxseQotCSAgYW4gb3ZlcmZsb3cgY291bGQgZmxpcCB0aGUgc2lnbi4KLQotMjAxNC0wNC0yNiAyMDo1MTozNiAtMDQwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBjaGVjayByZXR1cm4gZnJvbSBxdF9kZW11eF92aWRlb19jYXBzCi0JICBOb3cgcXRkZW11eF92aWRlb19jYXBzKCkgY2FuIHJldHVybiBOVUxMLiBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgcmV0dXJuIGJlZm9yZQotCSAgdXNpbmcgaXQncyB2YWx1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjg5ODcKLQotMjAxNC0wNC0yNiAyMzozNToxNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC1kb2MuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgZG9jczogcmVtb3ZlIG91dGRhdGVkIGFuZCBwb2ludGxlc3MgJ0xhc3QgcmV2aWV3ZWQnIGxpbmVzIGZyb20gZG9jcwotCSAgVGhleSBhcmUgdmVyeSBjb25mdXNpbmcgZm9yIHBlb3BsZSwgYW5kIG1vcmUgb2Z0ZW4gdGhhbiBub3QKLQkgIGFsc28ganVzdCBub3QgdmVyeSBhY2N1cmF0ZS4gU2VlaW5nICdsYXN0IHJldmlld2VkOiAyMDA1JyBpbgotCSAgeW91ciBkb2NzIGlzIG5vdCB2ZXJ5IGNvbmZpZGVuY2UtaW5zcGlyaW5nLiBMZXQncyBqdXN0IHJlbW92ZQotCSAgdGhvc2UgY29tbWVudHMuCi0KLTIwMTQtMDQtMjUgMTc6NTg6NDIgLTA0MDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogaW5pdGlhbGl6ZSBjYXBzIHBvaW50ZXIgdG8gbnVsbAotCSAgTWFrZSBzdXJlIHRoZSBjYXBzIHBvaW50ZXIgcmV0dXJucyBpbml0aWFsaXplZCB3aGVuIHVzaW5nIGl0IGluCi0JICBxdGRlbXV4X3BhcnNlX3RyZWUgKCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4OTg3Ci0KLTIwMTQtMDQtMjIgMTc6MDc6MzggKzEwMDAgIEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogQ2xlYXIgbGFzdF9wdCBvbiBmbHVzaC1zdG9wLgotCSAgT3RoZXJ3aXNlLCB3ZSBkb24ndCByZWNoZWNrIHRoZSBidWZmZXIgY2FwcyBmb3IgY2xvY2stcmF0ZQotCSAgcHJvcGVybHkgb24gdGhlIG5leHQgY2hhaW4uCi0KLTIwMTQtMDQtMjIgMTc6Mjk6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBjb21waWxlciB3YXJuaW5nCi0JICBnc3RkZWludGVybGFjZS5jOiBJbiBmdW5jdGlvbiAnZ3N0X2RlaW50ZXJsYWNlX291dHB1dF9mcmFtZSc6Ci0JICBnc3RkZWludGVybGFjZS5jOjE1Mzc6NTc6IGVycm9yOiAncGF0dGVybi5sZW5ndGgnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkXQotCSAgVGhpcyBhY3R1YWxseSBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGlzIHVzZWQgdGhlcmUsIGJ1dAotCSAgbGV0J3MganVzdCBzaWxlbmNlIGdjYyBoZXJlLgotCi0yMDE0LTA0LTIxIDE1OjU4OjQ1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IGZpeCBidWZmZXIgbGlzdCBkcm9wIGNoZWNrCi0JICBXaGlsZSBwb3J0aW5nIHRvIDAuMTEsIHRoZSBjaGVjayB3YXMgbWlzdGFrZW5seSBtYWRlIGNvbnN0YW50LAotCSAgaW5zdGVhZCBvZiB0ZXN0aW5nIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHByb2Nlc3NfYnVmZmVyX2xvY2tlZC4KLQkgIENvdmVyaXR5IDExMzk2NjMKLQotMjAxNC0wNC0yMSAxMzo0NDoxNSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2E6IGZpeCBjb250ZW50IGVuY29kaW5nIHNjb3BlIHZhbGlkaXR5IGNoZWNrCi0JICBJdCdzIDMgYml0cywgYW5kIGh0dHA6Ly9tYXRyb3NrYS5vcmcvdGVjaG5pY2FsL3NwZWNzL2luZGV4Lmh0bWwKLQkgIHNheXMgaXQgY2FuJ3QgYmUgMC4KLQkgIENvdmVyaXR5IDExMzk2NjAKLQotMjAxNC0wNC0yMSAxMzozNDozNyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBmaXggUEFSIGZyYWN0aW9uIHNhbml0eSBjaGVjawotCSAgSXQgd2FzIGNoZWNraW5nIHBhcl9udW0gdHdpY2UsIGFuZCBuZXZlciBwYXJfZGVudW0uCi0JICBDb3Zlcml0eSAxMTM5NjM0Ci0KLTIwMTQtMDQtMjEgMTM6MzI6NDAgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGlpZHBzaW5rOiB3YXJuIHdoZW4gc2V0c29ja29wdCBmYWlscwotCSAgVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgZmF0YWwsIGJ1dCBpdCdzIGdvb2QgdG8gbGV0IHRoZSB1c2VyIGtub3cKLQkgIGluIHRoZSBsb2dzLgotCSAgQ292ZXJpdHkgMTEzOTYzMAotCi0yMDE0LTA0LTIxIDEzOjI3OjI0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxhY2U6IGNhdGNoIGZhaWx1cmUgdG8gY3JlYXRlIGF1ZGlvIGluZm8gZnJvbSBjYXBzCi0JICBDb3Zlcml0eSAxMTM5NjI3LCAxMTM5NjI4Ci0KLTIwMTQtMDMtMTMgMDk6Mzc6NDggKzAxMDAgIEfDtnJhbiBKw7Zuc3NvbiA8Z29yYW5qbkBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBnc3RydHBoMjY0cGF5OiBSZXNldCBzcHMgcHBzIHZhcmlhYmxlIHdoZW4gc3RhdGUgY2hhbmdlLgotCSAgUmVzZXQgbGFzdF9zcHNwcHMgYW5kIHNwcy9wcHMgYXJyYXlzICB3aGVuIHN0YXRlIHRyYW5zaXRpb24KLQkgIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjAxNQotCi0yMDE0LTA0LTE4IDExOjExOjE0ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgaml0dGVyYnVmZmVyOiBpbXByb3ZlIEVPUyBoYW5kbGluZwotCSAgTWFrZSBhIG5ldyBtZXRob2QgdG8gZGlzYWJsZSB0aGUgaml0dGVyYnVmZmVyIGJ1ZmZlcmluZy4KLQkgIFJld29yayB0aGUgdXBkYXRlX2VzdGltYXRlZF9lb3MoKSBtZXRob2QuIENhbGN1bGF0ZSBob3cgbXVjaCB0aW1lCi0JICB0aGVyZSBpcyBsZWZ0IHRvIHBsYXkuIElmIHdlIGhhdmUgbGVzcyB0aGFuIHRoZSBkZWxheSBvZiB0aGUKLQkgIGppdHRlcmJ1ZmZlciwgd2UgZGlzYWJsZWQgYnVmZmVyaW5nIGJlY2F1c2Ugd2UgbWlnaHQgbmV2ZXIgYmUgYWJsZSB0bwotCSAgZmlsbCB0aGUgY29tcGxldGUgaml0dGVyYnVmZmVyIGFnYWluLgotCSAgSWYgd2UgcmVjZWl2ZSBhbiBFT1MgZXZlbnQsIGRpc2FibGUgYnVmZmVyaW5nLiBXZSB3aWxsIGRyYWluIHRoZQotCSAgYnVmZmVyIGFuZCBldmVudHVhbGx5IHB1c2ggdGhlIEVPUyBldmVudCBvdXQuCi0JICBXaGVuIHdlIHJlYWNoIHRoZSBlc3RpbWF0ZWQgTlBUIHRpbWVvdXQgYW5kIHdlIGRpZG4ndCByZWNlaXZlIGFuIEVPUwotCSAgZXZlbnQsIG1ha2Ugb25lIGFuZCBxdWV1ZSBpdCBzbyB0aGF0IGl0IGNhbiBiZSBwdXNoZWQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI4MDE3Ci0KLTIwMTQtMDQtMTggMTA6MjE6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBzZW5kIHJlY29uZmlndXJlIHdoZW4gaW50ZXJuYWwtc3NyYyBjaGFuZ2VzCi0JICBXaGVuIHRoZSBpbnRlcm5hbC1zc3JjIHByb3BlcnR5IGNoYW5nZXMsIHdlIHdhbnQgdG8gc2VuZCBhIHJlY29uZmlndXJlCi0JICB1cHN0cmVhbSB0byBtYWtlIHBheWxvYWRlcnMgdXNlIHRoZSBuZXcgc3VnZ2VzdGVkIHNzcmMuCi0JICBVc2luZyB0aGUgaW50ZXJuYWwtc3NyYyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIFNTUkMgb2YgYSBzdHJlYW0gaXMgbm90IGEKLQkgIGdvb2QgaWRlYSBhbmQgZG9lc24ndCB3b3JrIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHNlbmRlcnMsIHdlIHdhbnQgdG8KLQkgIHNldCB0aGUgU1NSQyBkaXJlY3RseSBvbiB0aGUgcGF5bG9hZGVycy4gVGhlcmVmb3JlLCBkZXByZWNhdGUgdGhpcwotCSAgcHJvcGVydHkuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1MzYxCi0KLTIwMTQtMDQtMTggMDQ6MjM6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYXNzdW1lIGEgZnVsbCBidWZmZXIgd2hlbiBlb3MKLQkgIFJld29yayB0aGUgbG9naWMgdG8gbWFrZSBidWZmZXJpbmcgbWVzc2FnZXMgYSBsaXR0bGUsIG1ha2Ugc3VyZSB3ZQotCSAgZG9uJ3QgbWFrZSB0aGUgc2FtZSBtZXNzYWdlIG11bHRpcGxlIHRpbWVzLgotCSAgQ29uc2lkZXIgdGhlIGJ1ZmZlciBmdWxsIHdoZW4gRU9TIHdhcyByZWNlaXZlZC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjgwMTcKLQotMjAxNC0wNC0xNyAxODowNzowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICBydHBydHg6IERvbid0IGZvcmdldCB0byB1bm1hcCBydHAgYnVmZmVyIGluIHRoZSB0ZXN0Ci0KLTIwMTQtMDQtMTcgMTc6NTg6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkgIHJ0cHJ0eHNlbmQ6IFJlcXVpcmUgY2xvY2stcmF0ZSBpbiB0aGUgY2FwcyBhbmQgaGFuZGxlIG5vIHNzcmMgaW4gdGhlIGNhcHMgcHJvcGVybHkKLQotMjAxNC0wNC0xNyAxNzo0MzoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICBydHBydHg6IFByb3ZpZGUgYW4gc3NyYyBpbiB0aGUgdGVzdAotCSAgQW5kIGluY3JlYXNlIHRpbWVvdXQgdG8gYWxsb3cgYWxsIHRlc3RzIHRvIHJ1biBpbiB2YWxncmluZC4KLQotMjAxNC0wNC0xNyAxNzozMzo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRml4IG1lbW9yeSBsZWFrcyBpbiB0ZXN0Ci0KLTIwMTQtMDQtMTcgMTc6MjY6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBGaXggaHVuZHJlZHMgb2YgbWVtb3J5IGxlYWtzIGluIHRoZSB0ZXN0Ci0KLTIwMTQtMDQtMTcgMTc6MDA6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBVbnJlZiBjbG9jayBpZCB3aGVuIHdhaXRpbmcgZm9yIHRoZSBjbG9jayBpcyBpbnRlcnJ1cHRlZAotCi0yMDE0LTA0LTE3IDE2OjM5OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBjb2xsaXNpb24uYzoKLQkgIHJ0cGNvbGxpc2lvbjogRml4IG1lbW9yeSBsZWFrcyBpbiB1bml0IHRlc3QKLQotMjAxNC0wNC0xNiAyMTo0MDo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IG5hbWUgY29sbGVjdHBhZHMgb2JqZWN0IGJhc2VkIG9uIHZpZGVvbWl4ZXIgbmFtZQotCSAgTWFrZXMgaXQgZWFzaWVyIHRvIHRyYWNrIHRoaW5ncyBpbiBkZWJ1ZyBsb2dzIHdoZW4gdGhlcmUKLQkgIGFyZSBtdWx0aXBsZSBtaXhlcnMgYW5kIG11eGVycy4KLQotMjAxNC0wNC0xNiAyMTozNzoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IGJldHRlciBsb2dnaW5nIG9mIGluY29taW5nIGV2ZW50cwotCSAgVGhlIHBhZCBhbmQgcGFyZW50IG5hbWVzIGFyZSBhbHJlYWR5IGxvZ2dlZCBhcyBwYXJ0IG9mIGxvZ2dpbmcKLQkgIHRoZSBvYmplY3QuIEluc3RlYWQgbG9nIHRoZSBmdWxsIGV2ZW50IGRldGFpbHMuCi0KLTIwMTQtMDQtMTYgMTk6MDM6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IEZpeCBtZW1vcnkgbGVhayBpbiB1bml0IHRlc3QKLQotMjAxNC0wNC0xNiAxODo0OTo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBsZXZlbDogVXNlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBzYW1wbGVzIHRvIGl0ZXJhdGUgb3ZlciB0aGUgaW5wdXQgYXJyYXkKLQkgIEZpeGVzIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBhY2Nlc3NlcyB0byB1bmluaXRpYWxpc2VkIGRhdGEuCi0KLTIwMTQtMDQtMTYgMTg6MDA6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSAgaWN5ZGVtdXg6IFVucmVmIGRyb3BwZWQgZXZlbnRzCi0KLTIwMTQtMDQtMTYgMTc6Mjk6MzAgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JICBtYXRyb3NrYTogZml4IGNoZWNrIGZvciBhbW91bnQgb2YgZGF0YSB0byByZWFkCi0JICBIaXN0b3J5IHNob3dzIGxlbmd0aD09MCBzaG91bGQgc2V0IGRhdGEgdG8gTlVMTCBhbmQgcmV0dXJuLAotCSAgc28gd2UgZG8gdGhhdCB0b28gaW5zdGVhZCBvZiB0cnlpbmcgdG8gcmVhZCBub3RoaW5nLgotCSAgQ292ZXJpdHkgMjA2MjA1Ci0KLTIwMTQtMDQtMTYgMTc6MjU6NDQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBmaXggc2lnbiBjb21wYXJpc29uCi0JICBoaXN0b3J5X2NvdW50IGlzIHVuc2lnbmVkLCBzbyB0aGUgd2hvbGUgY29tcGFyaXNvbiB3aWxsIGJlIG1hZGUKLQkgIGFzIHVuc2lnbmVkLCBhbmQgZmFpbCB0byByZWplY3Qgd2hhdCBpdCB3YXMgbWVhbnQgdG8uCi0JICBDb3Zlcml0eSAyMDYyMDQKLQotMjAxNC0wNC0xNiAxNzowNDo1MCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiByZW1vdmUgZGVhZCBjb2RlCi0JICBzdWIgbWF5IG5vdCBiZSBOVUxMIGluIHRoaXMgc3dpdGNoLCB0aGVyZSBpcyBhIGJhaWwgb3V0IGp1c3QKLQkgIGJlZm9yZSBpdCBpZiBzby4KLQkgIENvdmVyaXR5IDIwNjA5OAotCi0yMDE0LTA0LTE2IDE2OjU5OjQzICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogcmVtb3ZlIGRlYWQgY29kZQotCSAgVGhlIGJsb2NrX3NpemUgPT0gMCB3YXMgc2hvcnRjdXQgZWFybGllciwgYW5kIHRoZSB2YXJpYWJsZSBpcyBub3QKLQkgIG1vZGlmaWVkIGluIHRoZSBtZWFudGltZS4KLQkgIENvdmVyaXR5IDIwNjA5NwotCi0yMDE0LTA0LTE2IDE2OjU2OjU0ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9jb252ZXJ0LmM6Ci0JICB2aWRlb21peGVyOiByZW1vdmUgZGVhZCBjb2RlCi0JICBXaGlsZSBpdCBzZWVtcyB0byBrZWVwIGEgY29tcGlsZSB0aW1lIHNlbGVjdGlvbiwgSSB0cmFjZWQgaXQKLQkgIHRvIHNvbWUgY29kZSBjb3BpZWQgZnJvbSB2aWRlb2NvbnZlcnQsIHdoZXJlIGl0IHdhcyByZW1vdmVkLAotCSAgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1lbnQ6Ci0JICBBbHNvIHJlbW92ZSB0aGUgaGlnaC1xdWFsaXR5IEk0MjAgdG8gQkdSQSBmYXN0LXBhdGggYXMgaXQgbmVlZHMKLQkgIHRoZSBzYW1lIGZpeCwgd2hpY2ggY2F1c2VzIGFuIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb24sIHdoaWNoIGNhdXNlcwotCSAgb3JjIHRvIGVtaXQgbW9yZSB0aGFuIDk2IHZhcmlhYmxlcywgd2hpY2ggdGhlbiBqdXN0IGNyYXNoZXMuCi0JICBUaGlzIGNhbiBvbmx5IGJlIGZpeGVkIGluIG9yYyBieSBicmVha2luZyBBQkkgYW5kIGFsbG93aW5nIG1vcmUKLQkgIHZhcmlhYmxlcy4KLQkgIFRodXMsIEkgcmVtb3ZlIGl0IGhlcmUgYXMgd2VsbC4KLQkgIENvdmVyaXR5IDIwNjA2NAotCi0yMDE0LTA0LTE2IDE2OjUwOjMwICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBpc29tcDQ6IGZpeCBpbmNvcnJlY3QgbWFza2luZyBmb3IgbXVsdGlwbGUgdGFncwotCSAgQ292ZXJpdHkgMjA2MDU4Ci0KLTIwMTQtMDQtMTYgMTY6NDU6MDggKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JICBpc29tcDQ6IGZpeCB3cm9uZyBhdG9tIGZsYWdzIHNldCB3aGVuIGFkZGluZyBzYW1wbGVzCi0JICBDb3Zlcml0eSAyMDYwNTcKLQotMjAxNC0wNC0xNiAxNjo0MDowMiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4OiBmaXggY29tcGFyaXNvbiBvZiBkZWx0YSB0aW1lIHRvIGEgdGhyZXNob2xkCi0JICBDb3Zlcml0eSAyMDYwNTUKLQotMjAxNC0wNC0xNiAxNjozMjoyNiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGRvIG5vdCByZWx5IG9uIGNhbGwgZmFpbHVyZSBrZWVwaW5nIHJldHVybiBkYXRhIHVubW9kaWZpZWQKLQkgIFRoaXMgaXMgY2xlYXJlciB0aGlzIHdheSB0b28uCi0JICBDb3Zlcml0eSAyMDYwMjkKLQotMjAxNC0wNC0xNiAxNjoyODo0OSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXNyZWNvdmVyeS5jOgotCSAgaXNvbXA0OiBjYXRjaCBmc2VlayBlcnJvcgotCSAgQ292ZXJpdHkgMjA2MDI4Ci0KLTIwMTQtMDQtMTYgMTY6MjU6NDQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JICBpc29tcDQ6IHJlcG9ydCBmYWlsdXJlcyB0byBjYWxsZXIKLQkgIENvdmVyaXR5IDIwNjAyNwotCi0yMDE0LTA0LTE2IDE4OjA1OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHJlZnVzZSBzZXJpYWxpZWQgcXVlcnkgd2hlbiBidWZmZXJpbmcKLQkgIFdoZW4gd2UgYXJlIGJ1ZmZlcmluZywgd2UgY2FuJ3QgYmxvY2sgYW5kIHdhaXQgZm9yIHRoZSBzZXJpYWxpemVkIHF1ZXJ5Ci0JICB0byBjb21wbGV0ZSBiZWNhdXNlIHRoZSBqaXR0ZXJidWZmZXIgd2lsbCBub3QgdHJ5IHRvIGZvcndhcmQgdGhlIHF1ZXJ5Ci0JICB3aGlsZSBidWZmZXJpbmcuIEluc3RlYWQsIGp1c3QgcmVmdXNlIHRoZSBxdWVyeS4KLQotMjAxNC0wNC0xNiAxNjo1MToxNSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBkb24ndCBmcmVlIHRoZSBzZXJpYWxpemVkIHF1ZXJ5Ci0JICBXZSBzaG91bGQgbmV2ZXIgZnJlZSBhIHNlcmlhbGl6ZWQgcXVlcnkgaW4gdGhlIHF1ZXVlLCBpdCBpcyB0aGUgdXBzdHJlYW0KLQkgIGNhbGxlciB0aGF0IHdpbGwgZnJlZSBpdC4KLQotMjAxNC0wNC0xNiAxNzozNTo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBGaXggbWVtb3J5IGxlYWsgaW4gdGhlIHRlc3QKLQotMjAxNC0wNC0xNiAxNzozMzo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IENyZWF0ZSBoYXNodGFibGUgb25seSB3aGVuIHdlIGFjdHVhbGx5IHVzZSBpdAotCSAgSW4gZXJyb3IgY2FzZXMgd2UgcHJldmlvdXNseSByZXR1cm5lZCB3aXRob3V0IGZyZWVpbmcgaXQuCi0KLTIwMTQtMDQtMTYgMTc6MzA6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBDaGFpbiB1cCB0byB0aGUgcGFyZW50IGNsYXNzJyBkaXNwb3NlIGZ1bmN0aW9uCi0KLTIwMTQtMDQtMTYgMTc6MjM6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBJbml0aWFsaXNlIGlvY3RsIHN0cnVjdCB3aXRoIHplcm9lcyBiZWZvcmUgcGFzc2luZyBpdCB0byBpb2N0bCgpCi0KLTIwMTQtMDQtMTYgMTM6NDc6NDMgKzAyMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGNvcnJlY3QgTE9HIG1zZyBmb3IgLTEKLQkgIFNpZ25lZC1vZmYtYnk6IE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLTIwMTQtMDQtMTUgMjE6MzY6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IEZpeCBuZWdvdGlhdGlvbiB0byB3b3JrIGF0IGFsbCBhZ2FpbgotCSAgVGhlIGNhcHMgcXVlcnkgaGFuZGxpbmcgZnVuY3Rpb24gZm9yIHRoZSBzaW5rcGFkcyB3YXMgY2FsbGVkIGZvcgotCSAgdGhlIHNyY3BhZCwgYW5kIHRoZSBzaW5rcGFkcyBoYWQgbm9uZS4gVGhpcyBjb21taXQgbW92ZXMgaXQgdG8gdGhlCi0JICByaWdodCBwYWQsIGJ1dCBub25ldGhlbGVzcyB0aGUgbmVnb3RpYXRpb24gc3RpbGwgbG9va3Mgd3JvbmcuCi0JICBUaGlzIG1ha2VzIHRoZSB0ZXN0IHBhc3MgYWdhaW4gYWZ0ZXIgdGhlIHJlY2VudCBjb3Zlcml0eSBmaXgKLQkgIGFuZCBhbHNvIGFsbG93cyBpbnRlcmxlYXZlIHRvIHdvcmsgYWdhaW4sIGJ1dCBzb21lb25lIHNob3VsZAotCSAgcmVhbGx5IHJldmlldyB0aGUgbmVnb3RpYXRpb24gY29kZSBhbmQgZml4IGl0LgotCi0yMDE0LTA0LTEzIDA5OjAzOjQxICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL29zczQvb3NzNC1hdWRpby5jOgotCSAgb3NzNDogTWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMgc3VwcG9ydCBpcyA4Ci0JICBBdm9pZHMgZG9pbmcgcG90ZW50aWFsIG92ZXJ3cml0ZXMgaW4gY2hfbGF5b3V0ICh3aGljaCBvbmx5IGhhcyA4Ci0JICBmaWVsZHMpLgotCSAgQ0lEICMxMTM5ODI2Ci0KLTIwMTQtMDQtMTIgMjI6MTY6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogU2V0IHJhbmsgdG8gTUFSR0lOQUwKLQkgIElmIGF2YWlsYWJsZSB3ZSBwcmVmZXIgdXNpbmcgZ2xpbWFnZXNpbmsgb3ZlciBvc3h2aWRlb3NpbmsuIEl0IHN1cHBvcnRzCi0JICBtb3JlIGZvcm1hdHMgYW5kIGluIGdlbmVyYWwgaGFzIG1vcmUgZmVhdHVyZXMgdGhhbiBvc3h2aWRlb3NpbmsuCi0KLTIwMTQtMDQtMTEgMTg6MTk6NDkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogb25seSBndWVzcyBBVSBib3VuZGFyaWVzIHdoZW4gYXJlbid0IGluZGljYXRlZCBieSBtYXJrZXIKLQkgIFRoZSBtYXJrZXIgYml0IGlzbid0IG1hbmRhdG9yeSBhbmQgd2UgaGFkIGluIHBsYWNlIGNvZGUgdG8gZ3Vlc3MgQVUKLQkgIGJvdW5kYXJpZXMgYnkgZGV0ZWN0aW5nIGEgbmV3IHBpY3R1cmUgc3RhcnQuIFRoaXMgZ3Vlc3NpbmcgY29kZQotCSAgZGlkbid0IHdvcmsgd2l0aCBpbnRlcmxhY2VkIGNvbnRlbnQgdGhhdCBoYXMgcHJvcGVyIG1hcmtlciBiaXRzCi0JICB0byBpbmRpY2F0ZSB0aGUgQVUgYm91bmRhcmllcy4gSXQgd2FzIGxlYWtpbmcgdGhlIGZpcnN0IGZpZWxkIGJ1ZmZlcgotCSAgYW5kIHByb2R1Y2luZyBhIGNvcnJ1cHRlZCBvdXRwdXQuCi0JICBmaXhlczogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyODA0MQotCi0yMDE0LTA0LTEwIDEwOjM4OjE5IC0wMzAwICBSYWZhxYIgTXXFvHnFgm8gPGdhbHRnZW5kb0BvMi5wbD4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogZW5hYmxlIGxpYnBuZyBpbnRlcmxhY2VkIHBpY3R1cmUgaGFuZGxpbmcKLQkgIE1ha2VzIGxpYnBuZyBkZWludGVybGFjZSBBZGFtNyBpbnRlcmxhY2VkIHBpY3R1cmVzCi0JICBieSBkZWZhdWx0LiBJdCBpcyB0aGUgb25seSBpbnRlcmxhY2VkIGZvcm1hdCBhdmFpbGFibGUKLQkgIGFuZCBpZiB0aGUgcGljdHVyZSBpc24ndCBpbnRlcmxhY2VkIHRoZSBjb2RlIHNob3VsZCBiZWhhdmUKLQkgIGFzIGJlZm9yZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjYxNjEKLQotMjAxNC0wNC0xMSAxMzoyNzo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBPbmx5IGtlZXAtYWxpdmUgdGhlIGNvbm5lY3Rpb24gaW4gc3RvcCgpIGlmIHdlIGhhdmUgZmluaXNoZWQgYWxsIHByZXZpb3VzIG1lc3NhZ2VzCi0JICBBZnRlciBjYW5jZWxsaW5nIGEgcmVxdWVzdCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uLgotCi0yMDE0LTA0LTExIDExOjU0OjEyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkgIGR2ZGVjOiBEb24ndCBzZXQgYm9ndXMgdGltZXN0YW1wL2R1cmF0aW9uCi0JICBUaGlzIHdpbGwgaGFwcGVuIGlmIHdlIGhhdmUgYW4gaW5jb21pbmcgc3RyZWFtIHdpdGggYSBub24tVElNRSBzZWdtZW50Ci0JICBDb3VsZCBiZSBpbXByb3ZlZCBsYXRlciB0byBmaWd1cmUgb3V0IHByb3BlciBwdHMvZHVyYXRpb24uCi0JICBDSUQgIzExOTk3MDIKLQkgIENJRCAjMTE5OTcwMwotCi0yMDE0LTA0LTExIDExOjUzOjQyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkgIGR2ZGVjOiBQcm9wZXJseSByZWZ1c2UgaW5jb21pbmcgc3RyZWFtIHdpdGhvdXQgZnJhbWVyYXRlCi0JICBUaGUgcmV0dXJuIHZhbHVlIHdhc24ndCBwcm9wZXJseSBwcm9wYWdhdGVkIGJhY2sgaWYgdGhlIGNhcHMKLQkgIGRpZG4ndCBjb250YWluIGEgZnJhbWVyYXRlCi0KLTIwMTQtMDQtMTAgMTY6MzU6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogQWxzbyByZXRyeSBvbiB1bmV4cGVjdGVkIG5ldHdvcmsgZmFpbHVyZXMKLQotMjAxNC0wNC0xMCAxNTo0NTo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogTmV3IHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgYmVmb3JlIHdlIGdpdmUgdXAKLQotMjAxNC0wMy0xMyAxMDo1NjoxMSArMDEwMCAgQWxleGFuZGVyIFphbGxlc292IDx6YWxsZXNvdkBnbWFpbC5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogQ2hhbmdlIGRlZmF1bHQgdGltZW91dCB0byAxNSBzZWNvbmRzCi0JICBJZiBub3RoaW5nIGhhcHBlbnMgYWZ0ZXIgMTUgc2Vjb25kcywgY2hhbmNlcyBhcmUgZ29vZCB0aGF0Ci0JICBvdXIgY29ubmVjdGlvbiB3aWxsIG5ldmVyIHdpbGwgd29yay4gU3RvcCBhZnRlciAxNSBzZWNvbmRzCi0JICBpbnN0ZWFkIG9mIHdhaXRpbmcgdW50aWwgdGhlIHN5c3RlbSdzIGRlZmF1bHQgdGltZW91dCwgd2hpY2gKLQkgIGNhbiBiZSA+IDEgbWludXRlLgotCi0yMDE0LTA0LTA5IDE3OjMwOjU0ICswOTAwICBKaW1teSBPaG4gPHlvbmdqaW4ub2huQGxnZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVwbGFjZSBkdXBsaWNhdGVkIHZhcmlhYmxlIHdoZW4gcGFyc2luZyB0cmV4IGF0b20KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc4NzgKLQotMjAxNC0wNC0wOSAxMDo1NjoyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBVc2UgR1NUX0ZMT1dfRkxVU0hJTkcgd2hlbiBmbHVzaGluZywgbm90IEdTVF9GTE9XX0VPUwotCSAgLi4uIGFuZCByZXNldCBpdCBwcm9wZXJseSBhZnRlciBmbHVzaGluZyBpcyBkb25lLiBGaXhlcyBwbGF5YmFjawotCSAgaW4gbWFueSBjYXNlcyB3aGVuIGJ1ZmZlcmluZyBpcyB1c2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzgyMQotCi0yMDE0LTA0LTA5IDA4OjU4OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFByb3Blcmx5IHJldHVybiBzdHJlYW0gZmxhZ3Mgd2hlbiBwYXJzaW5nIHRyZXggYXRvbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzg2NwotCi0yMDE0LTAzLTE5IDE5OjE4OjExICswMDAwICBNYXR0aGlldSBCb3Vyb24gPG1hdHRoaWV1LmJvdXJvbkBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IHVzZSB0aGUgdmlkZW8gZnJhbWUgQVBJIGluc3RlYWQgb2YgdGhlIHZpZGVvIG1ldGEgQVBJCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2NzM4Ci0KLTIwMTQtMDMtMTkgMTg6NDc6MzkgKzAwMDAgIE1hdHRoaWV1IEJvdXJvbiA8bWF0dGhpZXUuYm91cm9uQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogYWR2ZXJ0aXplIHZpZGVvIG1ldGEgQVBJIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY3MzcKLQotMjAxNC0wNC0wOCAxMTozMTowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IEFkZCBtaXNzaW5nIGJyZWFrIGluIHN3aXRjaCBzdGF0ZW1lbnQKLQkgIFRoZSBjYXBzIHF1ZXJ5IGlzIGhhbmRsZWQgZW50aXJlbHkgYWxyZWFkeSBiZWZvcmUuCi0JICBDSUQgIzExMzk3NTcKLQotMjAxNC0wNC0wNiAxODowMzoxMSAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogc291cGh0dHBzcmM6IHVzZSBTb3VwS25vd25TdGF0dXNDb2RlIGlmIG5lZWRlZAotCSAgRnJvbSBsaWJzb3VwIGRvY3M6Ci0JICBQcmlvciB0byAyLjQ0IFNvdXBTdGF0dXMgd2FzIGNhbGxlZCBTb3VwS25vd25TdGF0dXNDb2RlLAotCSAgYnV0IHRoZSBpbmRpdmlkdWFsIHZhbHVlcyBoYXZlIGFsd2F5cyBoYWQgdGhlIG5hbWVzIHRoZXkKLQkgIGhhdmUgbm93LgotCSAgRml4ZXM6Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MzI5Ci0KLTIwMTQtMDQtMDcgMTI6NTg6MjMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogdXNlIGZyYW1lcywgbm90IGJ5dGVzLCBmb3IgcG9zaXRpb24gcXVlcnkgaW4gVkJSIHN0cmVhbXMKLQkgIENvdmVyaXR5IDExMzk2NDgKLQotMjAxNC0wNC0wNyAxMjo0MjoxNCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSAgc21wdGU6IGZpeCBjb3B5L3Bhc3RlIGVycm9yIGNhdXNpbmcgdW5tYXAgb24gd3JvbmcgYnVmZmVyCi0JICBDb3Zlcml0eSAxMTM5NjQ3Ci0KLTIwMTQtMDQtMDcgMTI6MTY6MTcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBndWFyZCBhZ2FpbnN0IGZpbmRpbmcgbm8gc3VpdGFibGUgcGF0dGVybgotCSAgVGhlIGNvZGUgaGFuZGxlcyBhIC0xIHBhdHRlcm4gaW5kZXgsIGFuZCBpdCBzZWVtcyBwbGF1c2libGUKLQkgIHRoYXQgYSBwYXR0ZXJuIG1pZ2h0IGJlIGZvdW5kIGxhdGVyLCBzbyBpdCBzZWVtcyBiZXN0IHRvIG5vdAotCSAgc2VuZCBhbiBlbGVtZW50IGVycm9yIGhlcmUuCi0JICBDb3Zlcml0eSAxMTM5NzY2Ci0KLTIwMTQtMDQtMDQgMTc6Mzg6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiB1cGRhdGUgZm9yIG5ldyBNSUtFWSBBUEkKLQotMjAxNC0wNC0wMyAxNzo0MDowMSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IHNlbmQgc2VuZGVyIFNTUkMgaW4gdGhlIE1JS0VZIG1lc3NhZ2UKLQkgIEFsbG9jYXRlIGEgbmV3IFNTUkMgZm9yIG91ciBSVENQIG1lc3NhZ2VzIGJhY2sgdG8gdGhlIHNlcnZlciBhbmQgc2V0Ci0JICB0aGlzIGluIHRoZSBNSUtFWSBtZXNzYWdlLgotCi0yMDE0LTA0LTAzIDE3OjM5OjMwICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogbWFrZSByYW5kb20gbnVtYmVyIGZvciB0aGUgQ1NCCi0JICBBcyByZWNvbW1lbmRlZCBpbiB0aGUgUkZDCi0KLTIwMTQtMDMtMjYgMTI6MTA6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBkb24ndCBwdXQgc3BhY2VzIGluIGtleW1nbXQgaGVhZGVyCi0KLTIwMTQtMDMtMjUgMTc6NDc6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBjcmVhdGUgYW5kIHNlbmQgdGhlIFJUQ1AgZW5jcnlwdGlvbiBrZXkKLQkgIENyZWF0ZSBhbmQgbWFrZSBhIGtleSBmb3IgZW5jcnlwdGluZyB0aGUgUlRDUCBwYWNrZXRzIGJhY2sgdG8gdGhlIHNlcnZlcgotCSAgYW5kIHdyYXAgdGhpcyBpbiBhIE1JS0VZIG1lc3NhZ2UgdGhhdCB3ZSBzZW5kIGFzIGEgaGVhZGVyIGluIHRoZSBTRVRVUAotCSAgcmVxdWVzdC4KLQotMjAxNC0wNC0wMyAxMjoxODozOSArMDIwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZyZWUgdGhlIHNydHBkZWMgZWxlbWVudAotCi0yMDE0LTA0LTAzIDEyOjE2OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogY2xlYW51cCBzdHJlYW1fZnJlZSBmdW5jdGlvbgotCSAgVGhlcmUgaXMgbm8gcmVhc29uIHRvIE5VTEwgYWxsIGZpZWxkcywgd2Ugd2lsbCBmcmVlIHRoZSBzdHJlYW0gYW55d2F5LgotCi0yMDE0LTA0LTAzIDEyOjA3OjMxICswMjAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGRlbW90ZSB3YXJuaW5nIHRvIGRlYnVnCi0JICBGb3IgVENQLCBpdCBpcyBub3JtYWwgdGhhdCB3ZSBkb24ndCBoYXZlIHRpbWVzdGFtcHMgc28gZG9uJ3QgV0FSTiBvbgotCSAgaXQuCi0KLTIwMTQtMDMtMjkgMTk6MTM6MDYgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMjogRml4IHN1cHBvcnQgZm9yIGNhcHMgd2l0aG91dCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUgb3IgZm9ybWF0Ci0JICBGb3IgZm9ybWF0IGxpa2UgbXBlZ3RzLCB3aWR0aCBhbmQgaGVpZ2h0IGlzIHJhcmVseSBpbiB0aGUgbmVnb3RpYXRlZCBjYXBzLiBUaGlzCi0JICBwYXRjaCBmaXhlcyBmYWlsdXJlIHdoZW4gc2V0dGluZyBmb3JtYXQsIGFuZCBwcmV2ZW50IGludHJvZHVjaW5nIHdpZHRoLCBoZWlnaHQsCi0JICBmcmFtZXJhdGUgYW5kIGZvcm1hdCB0byB0aGUgY2FwcyB3aGVuIGZpeGF0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTg2MAotCi0yMDE0LTAzLTMxIDE4OjM0OjEzICswMjAwICBUaGliYXVsdCBTYXVuaWVyIDx0c2F1bmllckBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBBbHdheXMgc2V0IFBUUz1EVFMgb24gcmF3IHZpZGVvIHN0cmVhbXMKLQotMjAxNC0wMy0zMSAxODozMToyMiArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dHNhdW5pZXJAZ25vbWUub3JnPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogQWx3YXlzIHNldCBwaXhlbC1hc3BlY3QtcmF0aW8gb24gcmF3IHZpZGVvIHN0cmVhbXMKLQkgIFRoYXQgZmllbGQgaXMgbWFuZGF0b3J5IGluIGNhcHMgYW5kIGlmIGl0IGlzIG5vdCBwcmVzZW50IGluIHRoZQotCSAgQVZJIGNvbnRhaW5lciwgaXQgbWVhbnMgc3F1YXJlIHBpeGVscyB0aHVzIDEvMS4KLQotMjAxNC0wMy0zMCAwMDozNTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2EtbXV4OiBhZGQgbWFwcGluZyBmb3IgT3B1cyBhdWRpbwotCSAgTWlnaHQgd2FudCB0byBjb25zaWRlciBhZGRpbmcgY2hhbm5lbHMvcmF0ZQotCSAgcmVxdWlyZW1lbnQgdG8gdGVtcGxhdGUgY2FwcywgYnV0IHJlcXVpcmVzCi0JICBmaXhpbmcgdXAgb2YgZW5jb2RlciBhbmQgcGFyc2VyIGZpcnN0LgotCi0yMDE0LTAzLTMwIDAwOjMxOjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIG1hdHJvc2thLWRlbXV4OiBhZGQgbWFwcGluZyBmb3IgT3B1cyBhdWRpbyBjb2RlYwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzMwNQotCi0yMDE0LTAzLTI5IDE3OjIxOjE3IC0wNDAwICBXaWxsaWFtIE1hbmxleSA8d2lsbEB3aWxsaWFtbWFubGV5Lm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogRml4IHN1cHBvcnQgZm9yIG1wZWd0cyBzdHJlYW1zCi0JICBJdCBzZWVtcyB0aGF0IEdTdHJlYW1lcidzIG1wZWd0cyBlbGVtZW50cyAodHNkZW11eCwgdHNwYXJzZSkgcmVxdWlyZSBjYXBzCi0JICBgdmlkZW8vbXBlZ3RzLHN5c3RlbXN0cmVhbT10cnVlYC4gIEFzIGZhciBhcyBJIGNhbiBzZWUgdGhlIHNpZ25pZmljYW5jZQotCSAgb2Ygc3lzdGVtc3RyZWFtIGlzIHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIGNvbnRhaW5lciBmb3JtYXQgcmF0aGVyIHRoYW4KLQkgIGFuIGVsZW1lbnRhcnkgc3RyZWFtLiAgQXMgdGhpcyBpcyB0aGUgY2FzZSAoYW5kIEkgY2FuJ3QgdW5kZXJzdGFuZCBob3cgaXQKLQkgIGNvdWxkIG5vdCBiZSB0aGUgY2FzZSB3aXRoIG1wZWd0cykgSSBhZGQgc3lzdGVtc3RyZWFtPXRydWUgdG8gdjRsMnNyYydzCi0JICBjYXBzLgotCSAgVGhpcyBhbGxvd3MgdjRsMnNyYyB0byBiZSBsaW5rZWQgd2l0aCB0c2RlbXV4IGZvciBwbGF5YmFjayBmcm9tIG15Ci0JICBIYXVwcGF1Z2UgSEQtUFZSIHdpdGggdGhlIHBpcGVsaW5lOgotCSAgdjRsMnNyYyAhIHF1ZXVlICEgdHNkZW11eCAhIHZpZGVvL3gtaDI2NCAhIGRlY29kZWJpbiAhIHh2aW1hZ2VzaW5rCi0JICBJbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBuZXh0IGNvbW1pdCB0aGlzIGZpeGVzIHVzaW5nIEhhdXBwYXVnZSBIRC1QVlIgd2l0aAotCSAgR1N0cmVhbWVyIDEuMCsuCi0KLTIwMTQtMDEtMTQgMTQ6NDg6NDIgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyOiBhdHRlbXB0IHRvIGZpeCBpbmZpbml0ZSAoZm9yIHNtYWxsIHZlcnNpb24gb2YgaW5maW5pdGUpIGxvb3AKLQotMjAxNC0wMy0yOSAxMzoyMDozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBtYW5hZ2VyOiBjb3B5IHN0aWNreSBldmVudHMgd2hlbiBleHBvc2luZyBwYWRzIGluIG1vcmUgcGxhY2VzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NzEyCi0KLTIwMTQtMDMtMjggMjA6MTE6MzYgKzAxMDAgIFJpY28gVHpzY2hpY2hob2x6IDxyaWNvdHpAdWJ1bnR1LmNvbT4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JICB2NGwyOiBmaXggZGlzdGNoZWNrCi0JICBNYWtlIHN1cmUgZXh0LyouaCBhcmUgZGlzdCdlZAotCi0yMDE0LTAzLTI3IDE5OjUxOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBvbmx5IGV4dHJhcG9sYXRlIGFscGhhIG1hc2sgZm9yIDMyLWJpdCBkZXB0aAotCSAgSW5zdGVhZCBvZiBwYXNzaW5nIGJvZ3VzIGFscGhhIG1hc2sgdmFsdWVzIHdoZW4gdGhlcmUncyBubyBhbHBoYS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY4MzMKLQotMjAxNC0wMy0yMSAxMzowMzoxNyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBBZGQgQVJHQi9CR1JBIHN1cHBvcnQKLQotMjAxNC0wMy0yMCAxNToyODoyNiArMDEwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBqcGVncGF5OiBjb25zaWRlciBoZWFkZXIgbGVuIHdoZW4gY2FsY3VsYXRpbmcgcGF5bG9hZCBsZW4KLQkgIEZpeGVkIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjY3NzcKLQotMjAxNC0wMy0yNiAwODowMzoyMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogQWxsIGZyYW1lcyBhcmUgc3luYyBwb2ludHMKLQotMjAxNC0wMy0yNiAwODowMjo0MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogQWxsIGZyYW1lcyBhcmUgc3luYyBwb2ludHMKLQotMjAxNC0wMy0yMiAxNzowNzo0NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHNlZ21lbnQgY2xvc2luZyBub3QgbmVlZGVkIGluIDEueAotCSAgLi4uIGFzIHNlbmRlciBzaG91bGQga2VlcCB0cmFjayBvZiBzZWdtZW50IGJhc2UgYWNjdW11bGF0aW9uLgotCSAgUmF0aGVyLCBpdCBtYXkgaGF2ZSBzb21lIGFkdmVyc2UgZWZmZWN0cyBhcyBhIHNwdXJpb3VzIHNlZ21lbnQgZXZlbnQsCi0JICBlLmcuIGluIGNvbGxlY3RwYWRzLgotCi0yMDE0LTAzLTIyIDE3OjA1OjE3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZWFybHkgc2VuZGluZyBwZW5kaW5nIGNvZGVjLWRhdGEgZm9yIGFsbCBzdHJlYW1zCi0JICAuLi4gYXQgbGVhc3QgYmVmb3JlIHN5bmNpbmcgYWNyb3NzIGFsbCBzdHJlYW1zIG1pZ2h0IGNhdXNlIHNvbWUgZ2FwCi0JICBhY3Rpdml0eSBvbiBhbnkgb2YgdGhvc2Ugc3RyZWFtcywgbm90YWJseSBzcGFyc2Ugc3RyZWFtcy4KLQkgIFNlZSBhbHNvICM3MTIxMzQKLQotMjAxNC0wMy0yMiAxNzowMToyNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogaGFuZGxlIGJvdGggc3RpY2t5IGFuZCBub24tc3RpY2t5IGN1c3RvbSBldmVudAotCi0yMDE0LTAzLTI1IDExOjQ0OjI3ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogb25seSBleHBvc2Ugc3RyZWFtcyBvbiBkYXRhZmxvdwotCSAgT25seSBwcm9iZSBvbiBidWZmZXJzLCB3ZSBkb24ndCB3YW50IHRvIGV4cG9zZSB0aGUgc3RyZWFtcyBvbiBldmVudHMuCi0KLTIwMTQtMDMtMjUgMTE6MzY6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNvcHkgc3RpY2t5IGV2ZW50cyB0byBnaG9zdHBhZAotCSAgV2hlbiB3ZSBleHBvc2UgaW50ZXJuYWwgcGFkcyBhcyBnaG9zdHBhZHMsIGZpcnN0IGNvcHkgdGhlIHN0aWNreSBldmVudHMKLQkgIHNvIHRoYXQgd2UgaGF2ZSB0aGUgY2FwcyBhbmQgc2VnbWVudCBldGMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NzEyCi0KLTIwMTQtMDMtMjQgMTQ6MjU6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBzcnRwIGhhbmRsaW5nCi0KLTIwMTQtMDMtMjUgMTA6MjM6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBzZXQgU1NSQyBvbiBjYXBzIGlmIGtub3duCi0KLTIwMTQtMDMtMjQgMTY6NTg6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwdXQgY2FwcyBvbiB1ZHBzcmMgaW5zdGVhZCBvZiB1c2luZyB0aGUgc2lnbmFscwotCSAgVHJ5IHRvIGF2b2lkIHVzaW5nIHRoZSByZXF1ZXN0LXB0LW1hcCB0byBnZXQgY2FwcyBidXQgc2V0IHRoZW0gZGlyZWN0bHkKLQkgIG9uIHRoZSB1ZHBzcmMgZWxlbWVudC4gVGhhdCB3YXksIHRoZSBjYXBzIGdldCBuaWNlbHkgdHJhbnNmb3JtZWQgYXMgdGhleQotCSAgcGFzcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgZWxlbWVudHMgaW4gdGhlIHJ0cGJpbiwgaW5jbHVkaW5nIHRoZSBBVVggYW5kCi0JICBkZWNvZGVyL2VuY29kZXIgZWxlbWVudHMuCi0KLTIwMTQtMDMtMjQgMTU6MzU6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiB1c2UgcHJvZmlsZSB0byBzZXQgcnRjcCBjYXBzCi0JICBVc2UgdGhlIG5lZ290aWF0ZWQgcHJvZmlsZSB0byBzZXQgeC1ydGNwIG9yIHgtc3J0Y3AgY2FwcwotCi0yMDE0LTAzLTI0IDE1OjM0OjI2ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2V0IHVkcHNyYyB0byBSRUFEWQotCSAgUkVBRFkgaXMgZW5vdWdoIHRvIGFsbG9jYXRlIHBvcnRzIG5vdwotCi0yMDE0LTAzLTI0IDE0OjI1OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogaW1wcm92ZSBjYXBzIGhhbmRsaW5nCi0JICBQcm90ZWN0IGNhcHMgd2l0aCB0aGUgbG9jay4KLQkgIERvbid0IHB1c2ggdGhlIGNhcHMgZXZlbnQgZnJvbSB0aGUgc2V0X3Byb3BlcnR5IGZ1bmN0aW9uIGJ1dCBtYXJrIHRoZQotCSAgcGFkIGZvciByZWNvbmZpZ3VyYXRpb24gc28gdGhhdCBpdCB3aWxsIHJlbmVnb3RpYXRlIGFuZCBwdXNoIHRoZSBuZXcKLQkgIGNhcHMgZXZlbnQgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0KLTIwMTQtMDMtMjQgMTU6MTU6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBvcGVuL2Nsb3NlIHNvY2tldCBpbiBOVUxMPC0+UkVBRFkgc3RhdGUKLQkgIFdlIHNob3VsZCBvcGVuIHRoZSBzb2NrZXQgd2hlbiBnb2luZyB0byBOVUxMPC0+UkVBRFkgYW5kIG5vdCBpbiB0aGUKLQkgIHN0YXJ0L3N0b3AgdmVtdGhvZCwgd2hpY2ggaXMgY2FsbGVkIGluIFJFQURZPC0+UEFVU0VELiBUaGlzIG1ha2VzIGl0Ci0JICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhIHNvY2tldCB3aXRob3V0IGdvaW5nIHRvIFBBVVNFRCAoYW5kIHN0YXJ0aW5nIHRoZQotCSAgbmVnb3RpYXRpb24pLgotCi0yMDE0LTAzLTI0IDE0OjM1OjAxICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZnJlZSBjYXBzIGluIHB0bWFwIGFycmF5Ci0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2Njk2Ci0KLTIwMTQtMDMtMjAgMTE6MTI6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBoYW5kbGUgTlVMTCBydHBtYXAgYW5kIHBhcnNlIGVycm9yIGJldHRlcgotCi0yMDE0LTAzLTE2IDIzOjQ2OjIyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBEb24ndCBjaGVjayBmb3IgZ3VkZXYgaWYgdmlkZW80bGludXgyIGlzIG5vdCBwcmVzZW50Ci0KLTIwMTQtMDMtMTYgMjM6MTk6NTUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IERvbid0IGZhaWwgaWYgZ3VkZXYgaXMgbm90IHByZXNlbnQKLQkgIFBLR19DSEVDS19NT0RVTEVTIGhhcyB0aGUgYmFkIGhhYml0IG9mIGZhaWxpbmcgdGhlIGJ1aWxkIGlmIGl0IGRvZXNuJ3QKLQkgIGdldCB3aGF0IGl0IHdhbnRzLCBwcmV2ZW50IHRoYXQuCi0KLTIwMTItMTEtMDIgMTM6MzM6MTMgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmRldmljZW1vbml0b3IuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJkZXZpY2Vtb25pdG9yLmg6Ci0JICB2NGwyOiBJbXBsZW1lbnQgR3N0RGV2aWNlTW9uaXRvciBzdWJjbGFzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODQwMgotCi0yMDEzLTA4LTEyIDExOjQ5OjIxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvTWFrZWZpbGUuYW06Ci0JKiBleHQvcHVsc2UvcGx1Z2luLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VkZXZpY2Vtb25pdG9yLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VkZXZpY2Vtb25pdG9yLmg6Ci0JICBwdWxzZTogQWRkIGRldmljZSBtb25pdG9ycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODQwMgotCi0yMDE0LTAzLTE2IDE5OjI0OjI2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogUmVtb3ZlIEdzdFByb3BlcnR5UHJvYmUgbGVmdG92ZXJzCi0KLTIwMTQtMDItMTkgMDM6MDQ6MDMgKzAxMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1kdXBvbmNoZWxsZTFAZ21haWwuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaDoKLQkgIHZpZGVvbWl4ZXI6IFBvcnQgdG8gbmV3IGNvbGxlY3RwYWRzIEFQSQotCSAgU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NzA1Ci0KLTIwMTQtMDMtMTYgMTU6MjY6MDQgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZXh0L3R5cGVzLWNvbXBhdC5oOgotCSogc3lzL3Y0bDIvZXh0L3ZpZGVvZGV2Mi5oOgotCSAgdjRsMjogQWRkIHR5cGVzIGNvbXBhdGlibGl0eSBmb3Igb3RoZXIgT1MKLQkgIEFkZHMgdHlwZSBjb21wYXRpYmxpdHkgd2l0aCBvdGhlciBPUyBsaWtlIEJTRC4gVGhpcyB1c2VzIHR5cGVzIG1hcHBpbmcgbWFjcm8gdG8KLQkgIGF2b2lkIGNvbmZsaWN0IHdpdGggZXhpc3RpbmcgZGVmaW5lZCB0eXBlcy4gV2UgcmVzdXNlIGdsaWIgdHlwZXMgYXMgdGhlc2UgYXJlCi0JICBhbHJlYWR5IGF2YWlsYWJsZSBvbiBzdXBwb3J0ZWQgcGxhdGZvcm1zLiBUaGlzIGlzIEdDQyBvbmx5IGJlY2F1c2Ugb2YgdGhlCi0JICBsZTMyIHR5cGUgdGhhdCB1c2VzIGJpdHdpc2UgYXR0cmlidXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNjQ1MwotCi0yMDE0LTAzLTE2IDE1OjU1OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZTogZml4IGZvcm1hdCBpbmZvIHRvIGNhcHMgY29udmVyc2lvbiBmb3IgbXVsYXcKLQotMjAxMy0wOC0xMyAxMjoxMDo0MiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5oOgotCSAgcHVsc2U6IE1ha2UgZ3N0X3B1bHNlX2Zvcm1hdF9pbmZvX3RvX2NhcHMoKSBzaGFyZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzg0MDIKLQotMjAxNC0wMy0xNSAxODo0MToxNiArMDEwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvTWFrZWZpbGUuYW06Ci0JICB2NGwyOiBGaXggdHlwbyBWNExfRElSIGludGVhZCBvZiBWNEwyX0RJUgotCi0yMDE0LTAzLTE1IDE4OjA1OjMyICswMTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHY0bDItYnVpbGQ6IFNldCBIQVZFX0dTVF9WNEwyIGlmIGhlYWRlcnMgYXJlIHByZXNlbnQKLQkgIFRoZSBuYW1lIG9mIEhBVkVfIG5lZWQgdG8gbWF0Y2ggdGhlIFVTRV8uIE5vdyBzZXQgSEFWRV9HU1RfVjRMMiBpZgotCSAgdmlkZW9kZXYyLmggaXMgZm91bmQuCi0KLTIwMTQtMDMtMTUgMTY6NDc6NTEgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL01ha2VmaWxlLmFtOgotCSAgdjRsMjogQWN0dWFsbHkgYnVpbGQgdGhlIHBsdWdpbgotCSAgVGhlIGNoZWNrcyB3ZXJlIHJlbW92ZWQgaW5hZHZlcnRlZGx5IGluIHByZXZpb3VzIHBhdGNoIGFuZCBub3QgcmVwbGFjZWQuCi0JICBSZS1pbnRyb2R1Y2UgdGhlIGNvbmZpZ3VyZSBjaGVja3MgYW5kIHNvbWUgb2YgdGhlIGNoZWNrcyBpbiBvcmRlciB0byBlbmFibGUKLQkgIHRoaXMgcGx1Z2luIGFnYWluLiBXZSBvbmx5IGNoZWNrIGlmIHZpZGVvZGV2Mi5oIGV4aXN0IG9uIHRoZSBwbGF0Zm9ybSB0bwotCSAgYXZvaWQgYnVpbGRpbmcgb24gV2luZG93cyBvciBPU1gsIHRob3VnaCB3ZSBidWlsZCBhZ2FpbnN0IG91ciBvd24gY29weS4gVGhpcwotCSAgd2FzIGJyZWFraW5nIHRoZSBidWlsZCBvbiBidWlsdC1ib3QuCi0KLTIwMTQtMDMtMTUgMTM6NDc6NDIgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHRyYW5zbGF0aW9uOiBQTyBmaWxlIGNoYW5nZXMgY2F1c2VkIGJ5IFBPVEZJTEUuaW4gdXBkYXRlCi0KLTIwMTQtMDMtMTUgMTM6MTc6MjEgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogcG8vUE9URklMRVMuaW46Ci0JKiBwby9QT1RGSUxFUy5za2lwOgotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvb3ZlcmxheS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvb3ZlcmxheS5oOgotCSAgdjRsMjogUmVtb3ZlIFhWIHN1cHBvcnQKLQkgIFhWIHN1cHBvcnQgZm9yIHY0bDIgbmV2ZXIgYmVjYW1lIHVwc3RyZWFtIGFuZCBlbmRlZCB1cCBiZWluZwotCSAgY29tbWVudGVkIG91dCB3aXRoIGFuIHVuZGVmIGZvciBhIGxvbmcgdGltZSBub3cuCi0KLTIwMTQtMDMtMTUgMTE6MTM6MDUgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSogc3lzL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZXh0L3Y0bDItY29tbW9uLmg6Ci0JKiBzeXMvdjRsMi9leHQvdjRsMi1jb250cm9scy5oOgotCSogc3lzL3Y0bDIvZXh0L3ZpZGVvZGV2Mi5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRvcmllbnQuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgdjRsMjogVXNlIGEgY29weSBvZiB2aWRlb2RldjIuaCBoZWFkZXIKLQkgIFdpdGggeWVhcnMgdGhlIGFtb3VudCBvZiBpZmRlZiBoYXZlIGdyb3duIHVwIGFuZCB3ZSBhcmUgbm90IGV2ZW4gc3VyZSBpZiB0aGUKLQkgIG9sZCBjb2RlIHBhdGggY29tcGlsZXMuIEVhY2ggdGltZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgdjRsMiBmcmFtZXdvcmsgdG8gYWRkCi0JICB0aGUgbmV3IGZlYXR1cmUsIHdlIGJyZWFrIGNvbXBpbGF0aW9uIG9uIG9sZGVyIGtlcm5lbC4gV2l0aCBleGNlcHRpb24gb2YgdHdvCi0JICBjb250cm9scyBpbiB0aGUgdmlkZW8gb3JpZW50YXRpb24gY29udHJvbCwgdGhpcyBwYXRjaCBnZXQgcmlkIG9mIGFsbCBpZmRlZiBieQotCSAgaW5jbHVkaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB2aWRlb2RldjIuaCBpbnNpZGUgR1N0cmVhbWVyLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzQ0NgotCi0yMDE0LTAzLTEyIDE1OjMyOjU1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIHNvdXBodHRwc3JjOiBBZGQgcHJvcGVydGllcyBmb3Igc2VsZWN0aW5nIFNTTC9UTFMgY2VydGlmaWNhdGUgY2hlY2tpbmcKLQkgIEFuZCBieSBkZWZhdWx0IHByb3Blcmx5IGNoZWNrIGNlcnRpZmljYXRlcyBhZ2FpbnN0IHRoZSBzeXN0ZW0ncyBDQQotCSAgY2VydGlmaWNhdGVzLiBFdmVyeXRoaW5nIGVsc2UgaXMgbm90IGEgZ29vZCBkZWZhdWx0IGF0IGFsbC4KLQotMjAxNC0wMy0xMSAxNDo1NjozMCArMDEwMCAgUGVyIHggSm9oYW5zc29uIDxwZXJ4am9oQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGZpeCBhc3NlcnQgb24gZnBzIGxvd2VyIHRoYW4gMQotCSAgRml4ZXMgYXNzZXJ0IGNhdXNlZCBieSBnc3RfZHVyYXRpb25fdG9fZnJhY3Rpb24gY2FsbGluZwotCSAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCB3aXRoIGEgZGVub21pbmF0b3Igb2YgMCB3aGVuIGZwcyBpcyBsZXNzCi0JICB0aGFuIDEuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI2MTA2Ci0KLTIwMTQtMDMtMTEgMDA6NDY6MDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjI6IHN0b3JlIHZpZGVvIGluZm8gd2l0aCBidWZmZXJzIHRvIGtlZXAgaXQgaW4gc3luYwotCSAgSW5zdGVhZCB0aGUgcXVldWVkIGJ1ZmZlciBtaWdodCBoYXZlIGFuIG9sZCBjYXBzIHdoaWxlIHRoZSBwYWQKLQkgIGlzIGFscmVhZHkgc3RvcmluZyB0aGUgaW5mb3JtYXRpb24gZm9yIGEgbmV3IGNhcHMuIE1peGluZyB0aG9zZQotCSAgd2hpbGUgaGFuZGxpbmcgYnVmZmVycyB3aWxsIG9mdGVuIGxlYWQgdG8gaXNzdWVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1OTQ4Ci0KLTIwMTQtMDMtMDggMTk6Mjk6NTggLTA1MDAgIFdpbGxpYW0gTWFubGV5IDx3aWxsQHdpbGxpYW1tYW5sZXkubmV0PgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyOiBGaXggdHlwbyBjb250b2wgLT4gY29udHJvbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTYzMgotCi0yMDE0LTAzLTA0IDAxOjE1OjQ5ICswMDAwICBXaWxsaWFtIE1hbmxleSA8d2lsbEB3aWxsaWFtbWFubGV5Lm5ldD4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogTm9ybWFsaXNlIGNvbnRyb2wgbmFtZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHY0bDItY3RsCi0JICBWNEwyIGtlcm5lbCBkcml2ZXJzIGFsbG93IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGhhcmR3YXJlIHNldHRpbmdzIHZpYSBhCi0JICBtZWNoYW5pc20gY2FsbGVkIGNvbnRyb2xzLiAgVGhlc2UgY2FuIGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUgc3VjaCBhcwotCSAgIkJyaWdodG5lc3MiIGFuZCAiV2hpdGUgQmFsYW5jZSBUZW1wZXJhdHVyZSIuICBUaGUgdXNlci1zcGFjZSBjb21tYW5kIGxpbmUKLQkgIGNsaWVudCBmb3Igc2V0dGluZyB0aGVzZSBjb250cm9scyAodjRsMi1jdGwpIG5vcm1hbGlzZXMgdGhlc2UgbmFtZXMgc3VjaAotCSAgdGhhdCB0aGV5IG9ubHkgY29udGFpbiBsb3dlciBjYXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB0aGUKLQkgIHVuZGVyc2NvcmUgJ18nLiAgZS5nOgotCSAgS2VybmVsICAgICAgICAgICAgICAgICAgICAgdjRsMi1jdGwKLQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgIEJyaWdodG5lc3MgICAgICAgICAgICAgICAgIGJyaWdodG5lc3MKLQkgIFdoaXRlIEJhbGFuY2UgVGVtcGVyYXR1cmUgIHdoaXRlX2JhbGFuY2VfdGVtcGVyYXR1cmUKLQkgIEZvY3VzIChhYnNvbHV0ZSkgICAgICAgICAgIGZvY3VzX2Fic29sdXRlCi0JICBHU3RyZWFtZXIgc2VlbXMgdG8gd2FudCB0byBmb2xsb3cgdGhpcyBwYXR0ZXJuIGJ1dCBmYWlsZWQgZm9yIGNvbnRyb2xzIHdpdGgKLQkgIG1vcmUgdGhhbiBvbmUgY29uc2VjdXRpdmUgbm9uLWFscGhhbnVtIGNoYXJhY3Rlci4gIGUuZy4gR1N0cmVhbWVyIHdvdWxkCi0JICBwcm9kdWNlICJmb2N1c19fYWJzb2x1dGVfIiByYXRoZXIgdGhhbiAiZm9jdXNfYWJzb2x1dGUiLgotCSAgVGhpcyBjb21taXQgZml4ZXMgdGhhdCBpc3N1ZS4gIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzIHByZXNlcnZlZCBieQotCSAgbm9ybWFsaXNpbmcgYWxsIGNvbnRyb2wgbmFtZXMgYmVmb3JlIGNvbXBhcmlzb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1NjMyCi0KLTIwMTQtMDMtMDcgMTY6MTc6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogTWFrZSBzdXJlIHRvIG5vdCByZXR1cm4gRU9TIGltbWVkaWF0ZWx5IGlmIHdlIGZpbmlzaGVkIGEgcmFuZ2UgcmVxdWVzdAotCSAgT25seSByZXR1cm4gRU9TIHRoZSBuZXh0IHRpbWUgY3JlYXRlKCkgaXMgY2FsbGVkLCBpZiBhdCBhbGwuIGJhc2VzcmMKLQkgIHNob3VsZCBhbHJlYWR5IHRha2UgY2FyZSBvZiBub3QgY2FsbGluZyBpdCBhZ2Fpbi4KLQkgIEFsc28gYWx3YXlzIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGUgcHJldmlvdXMgZmxvdyByZXR1cm4gd2FzCi0JICBub3QgT0suIFRoaXMgaW5kaWNhdGVzIGFuIGVycm9yIHNvbWV3aGVyZS4KLQotMjAxNC0wMy0wNiAxMjowNjo0MyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JICBydHA6IFJlbW92ZSBjYXBzIHJlc3RyaWN0aW9ucyBmcm9tIFJUUCBkZXBheWxvYWRlciBzaW5rIGNhcHMKLQkgIFJlbW92ZSBjYXBzIHJlc3RyaWN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGRlZmF1bHQgYW5kIGFyZSBub3QKLQkgIHJlcXVpcmVkIGluIFNEUC4gV2l0aCB0aGUgbmV3IHVzYWdlIG9mIGhhdmluZyBwYWRzIHJlcXVpcmUgYSBzdWJzZXQKLQkgIG9mIHRoZSBjYXBzLCB0aGV5IHdpbGwgbWFrZSB0aGUgbmVnb3RpYXRpb24gZmFpbC4KLQotMjAxNC0wMy0wNiAxMTowMjowOSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JICBydHBzcGVleGRlcGF5OiBSZW1vdmUgY2FwcyByZXN0cmljdGlvbnMgZm9yIGRlcGF5bG9hZGVyCi0JICBUaGUgImVuY29kaW5nLXBhcmFtcyIgaXMgb3B0aW9uYWwgaW4gdGhlIFNEUCwgYmVjYXVzZSB3ZSBub3cgcmVxdWlyZQotCSAgYSBzdWJzZXQgb2YgdGhlIGNhcHMsIGl0IHdvdWxkIGZhaWwgY2FwcyBuZWdvdGlhdGlvaW4gaWYgaXQgd2Fzbid0IHByZXNlbnQuCi0JICBTbyByZW1vdmVkIGl0IGZyb20gdGhlIHRlbXBsYXRlIGNhcHMuCi0KLTIwMTQtMDMtMDYgMTM6Mzg6MDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogRG9uJ3QgZm9yZ2V0IHRvIHF1aXQgbWFpbmxvb3AgYWZ0ZXIgd2UgY2FuY2VsbGVkIHdoZW4gd2UgZ290IGRhdGEgYWZ0ZXIgdGhlIHN0b3AgcG9zaXRpb24KLQotMjAxNC0wMy0wNiAxMzozNTo0NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBJZiB3ZSBoYWQgYSBzdG9wIHBvc2l0aW9uLCBhbGxvdyBmb3IgdGhlIHNlcnZlciB0byBmaW5pc2ggb3VyIGNvbm5lY3Rpb24gaW5zdGVhZCBvZiBqdXN0IGNhbmNlbGxpbmcKLQkgIE90aGVyd2lzZSBrZWVwLWFsaXZlIGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBhbmQgYWxzbyB0aGUgc2VydmVyIHdpbGwgaGF2ZQotCSAgY29uZnVzaW5nIHRoaW5ncyBpbiB0aGUgbG9ncy4KLQotMjAxNC0wMy0wNiAxMjoyNDowMSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IHNraXAgc3RyZWFtcyB3aXRoIHNhbWUgY29udHJvbCB1cmwKLQkgIEtlZXAgdHJhY2sgb2Ygd2hhdCBzdHJlYW1zIHdlIGRpZCB0aGUgU0VUVVAgZm9yLiBXZSBvbmx5IG5lZWQgdG8KLQkgIGNvbmZpZ3VyZSBjYXBzLCB3YWl0IGZvciBwYWRzIGFuZCBwdXNoIGV2ZW50cyBvbiBzZXR1cCBzdHJlYW1zLiBXZSBjYW4KLQkgIHJlbW92ZSB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHN0cmVhbSBhbmQgc2ltcGxpZnkgc29tZSBjaGVja3MuCi0JICBBZnRlciB3ZSBzZXR1cCBhIHN0cmVhbSwgc2tpcCB0aGUgb3RoZXIgc3RyZWFtcyB0aGF0IGhhdmUgdGhlIHNhbWUKLQkgIGNvbnRyb2wgdXJsLiBVc2UgYSBza2lwcGVkIGZsYWcgdG8gbWFyayBzdHJlYW1zIHRoYXQgc2hvdWxkIGJlIHNraXBwZWQuCi0KLTIwMTQtMDMtMDYgMTI6MjI6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiByZW1vdmUgb2Jzb2xldGUgY29kZQotCi0yMDE0LTAzLTA1IDE2OjE5OjE5ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzoganVzdCB1c2UgdGhlIFNEUCBpbmRleCBhcyB0aGUgc3RyZWFtIGlkCi0JICBVc2UgdGhlIGluZGV4IG9mIHRoZSBtZWRpYSBzdHJlYW0gaW4gdGhlIFNEUCBhcyB0aGUgc3RyZWFtIGlkIGluc3RlYWQgb2YKLQkgIGtlZXBpbmcgYSBzZXBhcmF0ZSBjb3VudGVyLgotCi0yMDE0LTAzLTA1IDEzOjM1OjE5ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvOiBmaXggYnVpbGQgb24gTWFjIE9TWCBNYXZlcmlja3MgYW5kIHB1dCBuZXcgd2luZG93IGluIGZyb250Ci0JICBHZXRDdXJyZW50UHJvY2Vzcy9TZXRGcm9udFByb2Nlc3MvVHJhbnNmb3JtUHJvY2Vzc1R5cGUgd2FzIGRlcHJlY2F0ZWQKLQkgIGFuZCBub3cgcmVtb3ZlZCBpbiBNYWMgT1NYIDEwLjkuIG9yZGVyRnJvbnRSZWdhcmRsZXNzIGlzIHVzZWQgdG8gbWFrZQotCSAgdGhlIHZpZGVvIHdpbmRvdyB0aGUgbW9zdCBmcm9udCB3aW5kb3cuCi0KLTIwMTQtMDMtMDUgMTc6MzM6NTYgKzAxMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luZy5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIEFkZCBkb2NzIGRpcmVjdG9yeSB0byBzcGVjIGZpbGUKLQotMjAxNC0wMy0wNSAxNTo0NDoyNSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGhhbmRsZSBOVUxMIGNvbnRyb2wgdXJscyBiZXR0ZXIKLQotMjAxNC0wMy0wNSAxNDoyODoyNiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IHNtYWxsIGNsZWFudXBzCi0JICBJdCdzIG5pY2VyIHRvIGV4cGxpY2l0bHkgY2hlY2sgZm9yIE5VTEwgb24gcG9pbnRlciB0eXBlcyB0byBtYWtlIGl0Ci0JICBjbGVhciB0aGF0IGl0J3MgYSBwb2ludGVyIGFuZCBub3QgYSBib29sZWFuLgotCi0yMDE0LTAzLTA1IDE0OjI2OjAyICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogaGFuZGxlIHVua25vd24gU1NSQyBpbiBGSVIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU3MTIKLQotMjAxNC0wMy0wNSAxMTozOTowOSArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBzZWVraW5nCi0JICBDYWxsIGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fZmx1c2ggKHNyYywgRkFMU0UpIHRvIHJlc2V0IGNvbm5lY3Rpb25zIGFzCi0JICBub24tZmx1c2hpbmcgYmVmb3JlIHNlbmRpbmcgUEFVU0UgYW5kIFBMQVkgd2l0aCB0aGUgbmV3IG5wdCByYW5nZS4gV2l0aG91dCB0aGlzCi0JICBwYXRjaCwgdGhvc2UgY29tbWFuZHMgd291bGQgZmFpbCB3aXRoIEVJTlRSIGFzIHRoZSBjb25uZWN0aW9ucyB3ZXJlIHN0aWxsCi0JICBmbHVzaGluZy4KLQotMjAxNC0wMy0wMyAxNjozOToyNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBleHBvc2UgeHN1YiBhcyBhIHN1YnRpdGxlIGluc3RlYWQgb2YgYXMgYSB2aWRlbwotCSAgSXQgaXMgcGxhY2VkIGluc2lkZSBhICd2aWRzJyBzdHJ1Y3QsIHNvIGl0IHdhcyBiZWluZyBleHBvc2VkIG9uCi0JICBhIHBhZCBuYW1lZCB2aWRlb18lZC4gWFNVQiBhcmUgc3VidGl0bGVzIGFuZCB0aGlzIHBhdGNoIGFkZHMKLQkgIGFuIHNwZWNpYWwgY2FzZSBmb3IgaXQgdG8gYmUgZXhwb3NlZCBpbiBhIHN1YnBpY3R1cmVfJWQgcGFkCi0KLTIwMTQtMDMtMDMgMTY6Mzg6NDUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZG8gbm90IHRyeSB0byBhZGQgYSB0YWcgd2l0aCB0YWdfbmFtZSBzZXQgdG8gTlVMTAotCSAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZXJlIGFyZSBzdWJ0aXRsZXMgaW4gdGhlIHN0cmVhbSwgbGVhZGluZyB0bwotCSAgYW4gYXNzZXJ0aW9uCi0KLTIwMTQtMDMtMDQgMTY6NDA6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgcGF5bG9hZCB0eXBlcwotCSAgQSBtZWRpYSBzdHJlYW0gY2FuIGhhdmUgbXVsdGlwbGUgcGF5bG9hZCB0eXBlcy4gUGFyc2UgYWxsIHRoZSBwYXlsb2FkCi0JICB0eXBlcyBhbmQgY29sbGVjdCB0aGUgY2FwcyBpbmZvcm1hdGlvbi4gV2UgdGhlbiBoYXZlIHRvIHN0b3JlIHRoZQotCSAgcHQ8LT5jYXBzIG1hcHBpbmcgaW5zdGVhZCBvZiAxIHB0IGFuZCAxIGNhcHMuCi0JICBQYXJzZSB0aGUgcHJvZmlsZSBmcm9tIHRoZSBTRFAgYW5kIHVzZSB0aGF0IHRvIG5lZ290aWF0ZSB0aGUgdHJhbnNwb3J0Ci0JICBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyBBVlAuCi0JICBSZXdvcmsgaG93IHdlIGRvIHNvbWUgdHdlYWtzIGZvciBBU0YgYW5kIFJlYWxtZWRpYS4KLQotMjAxNC0wMy0wNCAxMTozNDozOSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHJlZmFjdG9yIHBheWxvYWQgaGFuZGxpbmcKLQotMjAxNC0wMy0wMyAxMTozNDowMCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBmaXggYnVmZmVyIGxldmVsIHdpdGggaW52YWxpZCBEVFMKLQkgIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIERUUyBpcyBpbnZhbGlkICh3aGVuIHdlIHJlY2VpdmUgUlRQIHBhY2tldHMgZnJvbQotCSAgVENQLCBmb3IgZXhhbXBsZSkuIEFzIGEgZmFsbGJhY2ssIHVzZSB0aGUgcmVjb25zdHJ1Y3RlZCBQVFMgdmFsdWUgdG8KLQkgIGNhbGN1bGF0ZSB0aGUgYnVmZmVyIGxldmVsLgotCi0yMDE0LTAzLTAyIDA1OjEwOjEzICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJyYXNAaG90bWFpbC5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBJZ25vcmUgZ2NvdiBpbnRlcm1lZGlhdGUgZmlsZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjU0ODAKLQotMjAxNC0wMi0yOCAwOTozNDo0NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGZlMTY3MmUgdG8gYmNiMTUxOAotCi0yMDE0LTAyLTI3IDIzOjE1OjA0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgUmV2ZXJ0ICJhYWNwYXJzZTogcHV0IGNvZGVjIGRhdGEgb24gY2FwcyBmb3IgbG9hcyBmb3JtYXQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGU0NTljZjNlMDFhMDhmMWEzZWYxZmI5NTRhNDFjZmEzNmIzZTUxMGMuCi0JICBUaGlzIHdhcyBwdXNoZWQgYnkgYWNjaWRlbnQsIHRoZSBidWcgc2hvdWxkIGxpa2VseSBiZSBmaXhlZCBpbgotCSAgbGliYXYgaHR0cHM6Ly9idWd6aWxsYS5saWJhdi5vcmcvc2hvd19idWcuY2dpP2lkPTY0NAotCi0yMDE0LTAyLTI3IDE4OjU1OjA0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogbWFyayBhbGwgcGFyc2VkIGZyYW1lcyBhcyBzeW5jIHBvaW50cwotCSAgYWxsIGpwZWcgZnJhbWVzIGFyZSBzeW5jIHBvaW50cywgc28gbWFyayB0aGVtIGFzIHN1Y2ggc28KLQkgIHJldmVyc2UgcGxheWJhY2sgY2FuIHByb3Blcmx5IHdvcmsgd2l0aCB0aGUgdmlkZW8gZGVjb2RlcgotCSAgYmFzZSBjbGFzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTEwNAotCi0yMDE0LTAyLTI1IDAxOjEyOjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IHB1dCBjb2RlYyBkYXRhIG9uIGNhcHMgZm9yIGxvYXMgZm9ybWF0Ci0JICBnc3QtbGliYXYgYXVkaW8gZGVjb2RlciBhbHNvIG5lZWRzIGNvZGVjIGRhdGEgZm9yIExPQVMgZm9ybWF0LCBvdGhlcndpc2UKLQkgIGl0IHdpbGwgY29tcGxhaW4gYWJvdXQgbm90IGhhdmluZyBhIGRlY29kZXIgY29uZmlnIGFuZCBza2lwIGFsbCBwYWNrZXRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NzcyCi0KLTIwMTQtMDItMjcgMDA6NDM6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYWxpZ24gcmF3IGF1ZGlvIG1lbW9yeSB0byBwb3dlcnMgb2YgdHdvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1MDA4Ci0KLTIwMTQtMDItMjcgMDA6Mzc6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogY2FsY3VsYXRlIGFsaWdubWVudCBwcm9wZXJseSBmb3IgYXVkaW8gZGVwdGhzIG5vdCBhIG11bHRpcGxlIG9mIDgKLQotMjAxNC0wMi0yMyAxOTowOToyNCArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBmaXggY3Jhc2ggd2l0aCAyNC1iaXQgcmF3IGF1ZGlvCi0JICBEbyBub3QgdHJ5IHRvIGFsaWduIGF1ZGlvIGJ1ZmZlcnMgdG8gb2RkIG51bWJlcnMsCi0JICB3aGljaCB3aWxsIGdldCB1cyBhIE5VTEwgYnVmZmVyIHdoaWNoIHdlIHRoZW4KLQkgIGNyYXNoIG9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTAwOAotCi0yMDE0LTAyLTI3IDAwOjExOjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgIHJ0cG1hbmFnZXI6IHJlLWVuYWJsZSAtV2Vycm9yCi0KLTIwMTQtMDItMjcgMDA6MTE6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBmaXggY29tcGlsZXIgd2FybmluZwotCSAgZ3N0cnRwaml0dGVyYnVmZmVyLmM6IEluIGZ1bmN0aW9uICdnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCc6Ci0JICBnc3RydHBqaXR0ZXJidWZmZXIuYzoyOTc4OjM6IGVycm9yOiAncmVzdWx0JyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24KLQkgIHdoaWxlIChyZXN1bHQgPT0gR1NUX0ZMT1dfT0spOwotCSAgXgotCi0yMDE0LTAyLTI2IDIyOjExOjQxICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMWEwN2RhOSB0byBmZTE2NzJlCi0KLTIwMTQtMDItMjYgMjE6MTE6MjMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nCi0KLTIwMTQtMDItMjYgMDc6MzI6MzIgLTA1MDAgIEpha2UgRm95dGlrIDxqYWtlLmZveXRpa0BpcGNvbmZpZ3VyZS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBSZW1vdmUgcmF3IGNvbXBhcmlzb25zIG9mIFJUUCBzZXF1ZW5jZSBudW1iZXJzCi0JICBTZXZlcmFsIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgcGVyZm9ybSBjb21wYXJpc29uIG9uIFJUUCBzZXF1ZW5jZQotCSAgbnVtYmVycyB3aXRob3V0IHRha2luZyB0aGUgc2VxdWVuY2UgbnVtYmVyIHJvbGxvdmVyIGludG8gYWNjb3VudC4KLQkgIEluc3RlYWQsIHVzZSB0aGUgZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUKLQkgIGNvbXBhcmlzb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI1MTU5Ci0KLTIwMTQtMDItMDMgMDE6NDQ6MjEgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogRG9uJ3QgYnVpbGQgZGlzYWJsZWQgcGx1Z2lucycgY2hlY2sgdGVzdHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjM1MDIKLQotMjAxNC0wMi0yNiAxMToyOTo0NSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IGluc3RhbGwgcHJlYnVpbHQgcGx1Z2luIGRvY3MgaWYgZ3RrLWRvYyBpcyBkaXNhYmxlZAotCSAgU3luYyB0byB0aGUgTWFrZWZpbGUuYW0gZnJvbSBnc3QtcGx1Z2luLWJhc2Ugd2hlcmUgaXQgaXMgZG9uZSByaWdodC4KLQkgIEZpeGVzICM3MjUwMzQKLQotMjAxNC0wMi0yNSAxNjoxMDo1NCAtMDUwMCAgSHVndWVzIEZydWNoZXQgPGh1Z3Vlcy5mcnVjaGV0QHN0LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogZG8gbm90IGVtaXQgInBhcnNlZCIgY2FwcyBmb3IgdnA4Ci0JICBWUDggZG9lc24ndCByZXF1aXJlIHBhcnNpbmcgKHZwOHBhcnNlIGRvZXNuJ3QgZXhpc3QsIHNvIG5lZ290aWF0aW9uIHdpdGggZGVtdXggZmFpbHMKLQkgIGlmICJwYXJzZWQiIGlzIHNldCBpbiBjYXBzKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQ2MzYKLQotMjAxNC0wMi0xMSAxNjoyNzowOCAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBEb24ndCByZXF1aXJlIHBhcnNlciBmb3IgVlA4Ci0JICBVbnRpbCBHU3RyZWFtZXIgaGFzIG9uZSAoc2VlIGJ1ZzcyMjc2MCksIHdlIHNob3VsZCBub3QgcmVxdWlyZSBhIHBhcnNlciBmb3IgVlA4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjEyOAotCi0yMDE0LTAyLTEwIDE3OjA4OjI1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IENBUFRVUkVfTVBMQU5FIGlzIHdlbGwgdGVzdGVkIG5vdwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjEyOAotCi0yMDEzLTEyLTE4IDA5OjU2OjM1ICswMTAwICBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuaDoKLQkgIHY0bDJ2aWRlb2RlYzogQ3JlYXRlIG9uZSBlbGVtZW50IHBlciBkZXZpY2UKLQkgIEZvciBlYWNoIHZpZGVvQ2RldmljZSBwcm9iZSBpdCBpbnB1dC9vdXRwdXQgY2FwYWJpbGl0aWVzCi0JICBpZiBpdCBtYXRjaCB3aXRoIHZpZGVvIGRlY29kZXIgcmVxdWlyZW1lbnQgcmVnaXN0ZXIgYSBuZXcgZWxlbWVudC4KLQkgIFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBsaW5hcm8ub3JnPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjEyOAotCi0yMDEzLTEyLTE5IDE1OjI2OjUyIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jOgotCSAgdjRsMnZpZGVvZGVjOiBDYWxjdWxhdGUgbGF0ZW5jeSBmcm9tIGRldmljZSBpbmZvcm1hdGlvbgotCSAgRGVjb2RlcnMgb3Igb3RoZXIgZGV2aWNlcyB0aGF0IGV4cG9zZSBhIG1pbmltdW0gYnVmZmVycyByZXF1aXJlZCBwcm9kdWNlCi0JICBhbiBmaXJzdCBvdXRwdXQuIFdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGNhbGN1bGF0ZSBsYXRlbmN5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjEyOAotCi0yMDEzLTExLTI4IDE3OjE0OjE4IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDJ2aWRlb2RlYzogSW1wbGVtZW50IHY0bDJ2aWRlb2RlYwotCSAgSW1wbGVtZW50IGFuIGVsZW1lbnQgdGhhdCBjYW4gZHJpdmVyIFY0TDIgTTJNIGRlY29kZXIgZGV2aWNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjEyOAotCi0yMDE0LTAyLTExIDEyOjQxOjI5ICswMTAwICBHw7ZyYW4gSsO2bnNzb24gPGdvcmFuam5AYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogb25seSB1cGRhdGUgbGFzdF9zcHNwcHMgdGltZSBpZiBhbGwgc3BzL3BwcyBnb3Qgc2VudCBzdWNjZXNzZnVsbHkKLQkgIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2l0aCBnc3QtcnRzcC1zZXJ2ZXIgd2hlcmUgbm8gc3BzIGFuZCBwcHMgYXJlCi0JICBzZW50IGZvciB0aGUgZmlyc3QgaW50cmEgZnJhbWUsIGJlY2F1c2UgdGhlIHBheWxvYWRlciBzdGFydHMgd29ya2luZwotCSAgYWxyZWFkeSB3aGVuIHJlY2VpdmluZyBERVNDUklCRSBidXQgdGhlcmUgaXMgbm8gdHJhbnNwb3J0cyBzbyBpdCB0cmllcwotCSAgdG8gc2VuZCBzcHMgYW5kIHBwcywgYnV0IHRoYXQgZmFpbHMgd2l0aCBhIEZMVVNISU5HIGZsb3cuIEJ1dCB0aGUgdGltZQotCSAgZm9yIGxhc3Qgc2VudCBzcHMgYW5kIHBwcyB3b3VsZCBzdGlsbCBiZSBzZXQsIHNvIHdoZW4gUExBWSBhcnJpdmVzIGFuZAotCSAgdGhlIGZpcnN0IGludHJhIGZyYW1lIGlzIHRvIGJlIHNlbnQgdGhlcmUgaXMgbm8gc3BzIGFuZCBwcHMgc2VudCBkdWUgdG8KLQkgIHRoYXQgdGltZSBzaW5jZSBsYXN0IHNwcyBwcHMgaXMgbGVzcyB0aGFuIHNwc3Bwc19pbnRlcnZhbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQyMTMKLQotMjAxNC0wMi0yNSAwOTowMDo0NSArMDEwMCAgU2FudGlhZ28gQ2Fyb3QtTmVtZXNpbyA8c2FuY2FuZUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IEZpeCBkZWFkbG9jayB3aGVuIHRhc2sgY3JlYXRpb24gaXMgbm8gc3VjY2Vzc2Z1bAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNTEyNAotCi0yMDE0LTAyLTIyIDIwOjE5OjQ5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmM6Ci0JICBhdXRvZGV0ZWN0OiBkZW1vdGUgY2FuZGlkYXRlIGVycm9yIHRvIHdhcm5pbmcgYW5kIHBsdWcgZmFrZXtzaW5rLHNyY30KLQkgIEluIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgbm8gc3VpdGFibGUgY2FuZGlkYXRlIHdlIHBvc3QgYSB3YXJuaW5nIGFuZCBwbHVnIGEKLQkgIGZha2UtZWxlbWVudC4gRG8gdGhlIHNhbWUgd2hlbiBub24gb2YgdGhlIGNhbmRpZGF0ZSB3b3JrLgotCSAgVGhpcyBpcyBtb3JlIGNvbnNpc3RlbnQgYW5kIHBsdWdpbiB0aGUgZmFrZXNpbmsgYXMgYSBmYWxsYmFjayBpcyBwcm9iYWJseQotCSAgaGVscGZ1bCBmb3IgcnVubmluZyB1bml0IHRlc3RzIHdpdGhvdXQgcmVxdWlyaW5nIGhhcmR3YXJlIHNyYy9zaW5rIGVsZW1lbnRzLgotCSAgRml4ZXMgIzcyMjk4MQotCi0yMDE0LTAyLTIzIDEyOjM0OjQ4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogbWFrZSBzb21lIG1vcmUgY29udHJvbHMgY29uZmlndXJhYmxlCi0JICAuLi4gYXQgbGVhc3QgaWYgb25lIHRyaWVzIGhhcmQgZW5vdWdoIHVzaW5nIGV4dHJhLWNvbnRyb2xzIHByb3BlcnR5LgotCi0yMDE0LTAyLTIzIDEwOjM5OjIwICswMTAwICBEYW4gS2VnZWwgPGRhbmtAa2VnZWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICB2NGwyOiBSZXF1aXJlIG1wbGFuYXIgc3VwcG9ydCBmb3Igbm93IGluIGNvbmZpZ3VyZQotCSAgVGhlIGNvZGUgZmFpbHMgdG8gY29tcGlsZSB3aXRob3V0IGN1cnJlbnRseSwgc2VlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzNDQ2Ci0JICBJdCdzIGJldHRlciB0byBkaXNhYmxlIGl0IGluc3RlYWQgb2YgZmFpbGluZyBjb21waWxhdGlvbgotCSAgdW50aWwgdGhpcyBpcyBmaXhlZCBwcm9wZXJseS4KLQotMjAxNC0wMi0yMyAwMDoxNDowNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JICBqYWNrOiBhZGQgc29tZSBzaW1wbGUgbG9nIGhhbmRsZXJzIGZvciBqYWNrCi0JICBBZGQgbG9nIGhhbmRsZXJzIGZvciBqYWNrIHRoYXQgd3JpdGUgdG8gdGhlIGdzdCBkZWJ1ZyBsb2cuIFRoaXMgYXZvaWRzIHNwYW1taW5nCi0JICB0aGUgY29uc29sZSB3aGVuIGUuZy4gdXNpbmcgYXV0b2F1ZGlvc2luaywgaGF2aW5nIHRoZSBqYWNrIGVsZW1lbnRzIGluc3RhbGxlZCwKLQkgIGJ1dCBub3QgcnVubmluZyBqYWNrLgotCi0yMDE0LTAyLTIyIDIxOjMxOjIxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IGhhbmRsZSBvbGQgYW5kIG9kZCBkcml2ZXIgYmVoYXZpb3VyIHdoZW4gbGlzdGluZyBjb250cm9scwotCi0yMDEzLTExLTI4IDE2OjU0OjU4IC0wODAwICBEYXJyeWwgR2Ftcm90aCA8ZGdhbXJvdGhAdXZpYy5jYT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlaWlyZmlsdGVyOiBjaGVjayBpZiBjb2VmZmljaWVudHMgYXJlIHByb3ZpZGVkIGluc2lkZSBmaWx0ZXIgbG9jawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTUyNAotCi0yMDE0LTAyLTIxIDE5OjQ2OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMnNyYzogYWxzbyB1bnNldCBJTlRFUkxBQ0VEIGZsYWcgb24gYnVmZmVycyBpZiBmcmFtZSBpcyBub3QgaW50ZXJsYWNlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDg5OQotCi0yMDE0LTAyLTIxIDE0OjMxOjU5ICswMDAwICBTaW1vbiBGYXJuc3dvcnRoIDxzaW1vbi5mYXJuc3dvcnRoQG9uZWxhbi5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJzcmM6IEZsYWcgaW50ZXJsYWNlZCBidWZmZXJzIGFzIGludGVybGFjZWQuCi0JICBXZSBjb3JyZWN0bHkgaW5kaWNhdGUgdGhlIGZpZWxkIG9yZGVyaW5nIG9uIGludGVybGFjZWQgYnVmZmVycywgYnV0IGZhaWwgdG8KLQkgIGZsYWcgdGhlbSBhcyBjb250YWluaW5nIGludGVybGFjZWQgdmlkZW8sIHdoaWNoIHdlIG5lZWQgdG8gZG8gaGVyZSBiZWNhdXNlCi0JICB3ZSBzaWduYWwgaW50ZXJsYWNlLW1vZGU9bWl4ZWQgaW4gb3VyIGNhcHMuIFRoaXMgbWVhbnMgdGhhdCBkb3duc3RyZWFtCi0JICBlbGVtZW50cyAobGlrZSB2YWFwaXBvc3Rwcm9jIGZyb20gZ3N0cmVhbWVyLXZhYXBpKSBkb24ndCByZWNvZ25pc2UgdGhlc2UKLQkgIGJ1ZmZlcnMgYXMgaW4gbmVlZCBvZiBkZWludGVybGFjaW5nLgotCSAgRml4IHRoaXMgYnkgc2V0dGluZyB0aGUgaW50ZXJsYWNlZCBmbGFnIG9uIGFsbCBpbnRlcmxhY2VkIGJ1ZmZlcnMuCi0JICBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBGYXJuc3dvcnRoIDxzaW1vbi5mYXJuc3dvcnRoQG9uZWxhbi5jby51az4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQ4OTkKLQotMjAxNC0wMi0xOSAxMzo1NjozNyAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBiZSBtb3JlIHN0cmljdCBhdCBBRFRTIGhlYWRlciBwYXJzaW5nCi0JICBBZGRzIHR3byBleHRyYSBjaGVja3M6Ci0JICAtIFNhbXBsaW5nIGZyZXF1ZW5jeSBvbiBoZWFkZXIgY2FuJ3QgYmUgMTUuCi0JICAtIEZyYW1lIHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IDkgb3IgNywgZGVwZW5kaW5nCi0JICBvbiB3aGV0aGVyIENSQyBwcm90ZWN0aW9uIGlzIHByZXNlbnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0NjM4Ci0KLTIwMTQtMDItMTkgMTM6MzU6NTkgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIEFEVFMgZGF0YQotCSAgV2UgbmVlZCBhdCBsZWFzdCA2IGJ5dGVzIHRvIHBhc3Mgb3ZlciB0byBfZ2V0X2ZyYW1lX2xlbigpCi0JICBidXQgd2Ugd2VyZSBqdXN0IGNoZWNraW5nIGZvciBhIG1pbmltdW0gb2YgMiBieXRlcyBmb3IgdGhlCi0JICBzeW5jd29yZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQ2MzgKLQotMjAxNC0wMi0yMCAyMjo1Mjo1NyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5oOgotCSAgYXV0b2RldGVjdDogY2hlY2sgaWYgdGhlIGtpZCBoYXMgYSBzeW5jIHByb3BlcnR5Ci0JICBwcmV2aW91c2x5IGF1dG92aWRlb3NyYyBkaWQgbm90IGhhdmUgYSBzeW5jIHByb3BlcnR5IGFuZCB2NGwyc3JjIGhhcyBub25lIGVpdGhlci4KLQotMjAxNC0wMi0xOSAyMTo1NTo1MiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuaDoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9kZXRlY3QuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9kZXRlY3QuaDoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuaDoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmg6Ci0JICBhdXRvZGV0ZWN0OiB1c2UgYSBjb21tb24gYmFzZWNsYXNzCi0JICBUaGlzIG1ha2VzIHRoZSBhY3R1YWwgZWxlbWVudHMgc3VwZXIgc2ltcGxlLiBXZSdyZSB1c2luZyB0aGUgRUxFTUVOVF9GTEFHIHRvCi0JICBjb25maWd1cmUgc291cmNlL3NpbmsgYW5kIGEgc3RyaW5nIGZvciB0aGUgQXVkaW8vVmlkZW8gdHlwZS4KLQotMjAxNC0wMi0xNCAxNzoxNDo0MiAtMDgwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IGFkZCB0bHMtZGF0YWJhc2UgcHJvcGVydHkKLQkgIEFkZCBzdXBwb3J0IGZvciBhIG5ldyBwcm9wZXJ0eTogdGxzLWRhdGFiYXNlLiBJZiB0aGUgcHJvcGVydHkgaXMgc2V0LAotCSAgdGhlIGNlcnRpZmljYXRlIGRhdGFiYXNlIHdpbGwgYmUgZ2l2ZW4gdG8gdGhlIHJ0c3AgY29ubmVjdGlvbiBpZiBUTFMKLQkgIHByb3RvY29sIGlzIGJlaW5nIHVzZWQuIElmIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgY2FuJ3QgYmUgdmVyaWZpZWQgd2l0aAotCSAgdGhlIGRlZmF1bHQgZGF0YWJhc2UsIHRoaXMgYWRkaXRpb25hbCBkYXRhYmFzZSB3aWxsIGJlIHVzZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0Mzk2Ci0KLTIwMTQtMDItMTkgMjI6MjE6NTQgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkgIG9zeGF1ZGlvOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlcwotCi0yMDE0LTAyLTE5IDIxOjI2OjAzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9kZXRlY3QuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9kZXRlY3QuaDoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b2RldGVjdDogZXh0cmFjdCBjb21tb24gaGVscGVyIGNvZGUKLQkgIFRoZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGUgcHJldHR5IG5hbWVzIGlzIGJhc2ljYWxseSB0aGUgc2FtZS4gVXNlIG9uZSBhbmQgYWRkCi0JICBhIHBhcmFtZXRlci4KLQotMjAxNC0wMi0xOSAyMTowMTozOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdXRvZGV0ZWN0LmM6Ci0JICBhdXRvZGV0ZWN0OiBpbXByb3ZlIHRoZSB0ZXN0cwotCSAgQWRkIGZha2UgYXVkaW8vdmlkZW8gc2lua3MuIFByZXZpb3VzbHkgcnVubmluZyB0aGUgdGVzdCBtaWdodCBiZSBmbGFreSBkdWUgdG8KLQkgIHRoZSB1c2Ugb2YgcmVhbCBlbGVtZW50cyAoaGFyZHdhcmUgaW4gdXNlKSwgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byB0ZXN0IGhlcmUuCi0JICBBZGQgdHdvIG1vcmUgdGVzdHMgdGhhdCBjaGVjayB0aGF0IHRoZSBmYWtlcyBhcmUgY2hvc2VuLgotCi0yMDE0LTAyLTE5IDE1OjE5OjMwICswMTAwICBCcmFuaXNsYXYgS2F0cmVuaWFrIDxia2F0cmVuaWFrQG51dm90ZWNobm9sb2dpZXMuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IGRvIG5vdCBlbWl0IGVycm9yIHdoZW4gY29ubmVjdGlvbiB3aXRoIHVua25vd24gc2l6ZSBlbmRzCi0JICBDb21taXQgNDZmZDEyYWU1ZWM1MzIwMGIxNmRmZDdmMTcwNDhkNmJjNjBmYmZiYyBpbnRyb2R1Y2VkIGNvbm5lY3Rpb24KLQkgIHJlY292ZXJ5LiBCdXQgd2hlbiBzZXJ2ZXIgZG9lcyBub3Qgc3BlY2lmeSBjb250ZW50LXNpemUsCi0JICBzb3VwaHR0cHNyYyB0cmllcyB0byByZWNvbm5lY3QgZXZlbiBhZnRlciByZWd1bGFyIGVuZCBvZiBzdHJlYW0uCi0JICBIdHRwIHNlcnZlciByZXBsaWVzICB3aXRoIFNPVVBfU1RBVFVTX1JFUVVFU1RFRF9SQU5HRV9OT1RfU0FUSVNGSUFCTEUKLQkgIGJ1dCBzb3VwaHR0cHNyYyBzdGlsbCBlbWl0cyBlcnJvciBpbnN0ZWFkIG9mIEVPUy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQ3MTcKLQkgIFNpZ25lZC1vZmYtYnk6IEJyYW5pc2xhdiBLYXRyZW5pYWsgPGJrYXRyZW5pYWtAbnV2b3RlY2hub2xvZ2llcy5jb20+Ci0KLTIwMTQtMDItMTkgMTE6MjY6MjIgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYzoKLQkgIGF1dG9kZXRlY3Q6IGZpeCB0aGUgZGlzYWJsZWQgdGVzdAotCSAgVXNlIGEgc2hhcmVkIGhlbHBlciBmb3IgYm90aCB0ZXN0cy4gSXQgdHVybnMgb3V0IHRoYXQgdGhlIHZhbGdyaW5kIHZhcmlhbnQgaXMKLQkgIGZpbmUgKG1heWJlIGR1ZSB0byBwaWNraW5nIHVwIHB1bHNlc2luayB0aG91Z2gpLgotCi0yMDE0LTAyLTE5IDExOjA1OjM1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdXRvZGV0ZWN0LmM6Ci0JICBhdXRvZGV0ZWN0OiByZW1vdmUgY3J1ZnQgZnJvbSB0aGUgdGVzdAotCSAgUmVtb3ZlIHRoZSBvYnNvbGV0ZSB2ZXJzaW9uIGNoZWNrIGFuZCB1c2UgdGhlIGlnbm9yZSBtYWNybyBmb3IgdGhlIGRpc2FibGVkIHRlc3QuCi0KLTIwMTQtMDItMTggMjI6NTQ6NDUgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIGRvY3M6IHVzZSBkb2Nib29rIG1hcmt1cCBmb3IgeGk6aW5jbHVkZQotCSAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIGNoYW5nZSBpbiBndGstZG9jLTEuMjAgd2hpY2ggd3JhcHMgdGhlIHxbXXwgY29udGVudCBpbgotCSAgQ0RBVEEgYnJlYWsgeGk6aW5sY3VkZSBleGFtcGxlcy4gQXMgaW4gYSB3aG9sZSBqaGJ1aWxkIGNoZWNrb3V0IHRoZXNlIHdoZXJlCi0JICB0aGUgb25seSA0LCB3ZSdyZSBmaXhpbmcgdGhlbSBpbnN0ZWFkLgotCi0yMDE0LTAyLTE4IDIyOjM1OjQ1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LWRvYy5oOgotCSAgaXNvbXA0bXV4OiBmaXggY29weSBhbmQgcGFzdGUKLQkgIFRoaXMgZml4ZXMgZG9jIHdhcm5pbmdzLgotCi0yMDE0LTAyLTE4IDIxOjQ0OjI0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LWRvYy5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgZG9jczogdXNlIHRoZSBndGstZG9jIHN5bnRheCB0byBsaW5rIHRvIHByb3BlcnRpZXMKLQkgIERvbid0IHVzZSBkb2Nib29rIHVubGVzcyBuZWVkZWQuIEFsc28gc3RpcCBvdGhlciBkb2Nib29rIHRhZ3MgaW4gdGhlIHRoZSBmaWxlcyB3ZSBmaXguCi0KLTIwMTQtMDItMTggMTE6Mjg6MTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZml4IGNyYXNoIHdoZW4gZ2V0dGluZyB0aGUgY3VycmVudC1kZXZpY2UgaW4gTlVMTC0+UkVBRFkKLQkgIFRoZSAiZ290byB1bmxvY2siIGlzIHdyb25nIGFzIGluIHRoaXMgY29kZSBwYXRoIHdlIGhhdmVuJ3QgdGFrZSB0aGUgbG9jayB5ZXQuCi0JICBGaXhlcyAjNzI0NjE5Ci0KLTIwMTQtMDItMTQgMjI6NTA6NDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHNvdXA6IFdlIG5lZWQgbGlic291cCA+PSAyLjQwIGZvciBwcm9wZXIgdXNhZ2Ugb2YgdGhlIGNvbnRlbnQgZGVjb2RlcgotCSAgUHJldmlvdXMgdmVyc2lvbnMgZGlkIG5vdCBjb25zaWRlciBvdXIgY2h1bmsgYWxsb2NhdG9yIGFuZCBhbGxvY2F0ZWQKLQkgIG1lbW9yeSBieSB0aGVtc2VsdmVzLCB3aGljaCBjYXVzZWQgY3Jhc2hlcyBhbmQgYnJva2VuIGJlaGF2aW91ci4KLQotMjAxNC0wMi0xNCAxNToyNzoyMCAtMDUwMCAgV2lsbGlhbSBKb24gTWNDYW5uIDx3aWxsaWFtLmpvbi5tY2Nhbm5AZ21haWwuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIGRvY3M6IGZpeCBtaXNtYXRjaGVkIHBhcmEgdGFncwotCSAgbmV3ZXIgZ3RrZG9jIGlzIG1vcmUgc2Vuc2l0aXZlIHRvIG1pc21hdGNoZWQgZG9jYm9vayB0YWdzLgotCSAgVGhpcyBmaXhlcyB0aGUgYnVpbGQgaW4gbWFzdGVyLgotCi0yMDE0LTAyLTE0IDE1OjU5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGFkZCBzdXBwb3J0IGZvciBzZXJpYWxpemVkIHF1ZXJpZXMKLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzODUwCi0KLTIwMTQtMDItMTQgMTU6NTM6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgdGVzdHM6IGZpeCB0eXBlY2FzdCB0byBmaXggY29tcGlsYXRpb24KLQotMjAxNC0wMi0xNCAxMjowMTowMCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHByb3h5IGNhcHMgYW5kIGFsbG9jYXRpb24gb24gUlRQIHBhZHMKLQkgIHJlY3ZfcnRwX3Npbms6IGFsbG93IHByb3h5aW5nIG9mIHRoZSBhbGxvY2F0aW9uIHF1ZXJ5LgotCSAgc2VuZF9ydHBfc2luazogYWxsb3cgcHJveHlpbmcgb2YgY2FwcyBhbmQgYWxsb2NhdGlvbi4gVGhpcyBhbGxvd3MgdXMgdG8KLQkgIHF1ZXJ5IGNhcHMgZG93bnN0cmVhbSBhcyB3ZWxsIGFzIGdldCBhbiBhbGxvY2F0b3IgZnJvbSBkb3duc3RyZWFtLgotCSAgc2VuZF9ydHBfc3JjOiBhbGxvdyBwcm94eSBvZiBjYXBzLCB0aGlzIG1ha2VzIHRoZSBjYXBzIHF1ZXJ5IGRvCi0JICB1cHN0cmVhbS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzODUwCi0KLTIwMTQtMDItMTMgMTI6Mjk6MTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGhhbmRsZSB0YWdzIGluIG1hYyBlbmNvZGluZwotCSAgQ2hlY2sgdGhlIGNoYXJzZXQgZnJvbSAoQykqKiogdGFncyBhbmQgc2V0IHRoZSBjaGFyc2V0Ci0JICB0byBjb252ZXJ0IGZyb20gTUFDIGVuY29kaW5nIGlmIHN1aXRhYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzE2NgotCi0yMDE0LTAyLTEzIDEyOjA5OjEzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IFVzZSBuZXcgYXV0b21hdGljX2VvcyBBUEkgZnJvbSBiYXNlc3JjCi0JICBXZSB3YW50IHRvIG5vdGljZSBvdXJzZWx2ZXMgdGhhdCB3ZSdyZSBFT1MuIE90aGVyd2lzZSB3ZSB3aWxsCi0JICBhbHdheXMgY2FuY2VsIHJlcXVlc3RzIGluIHRoZSB2ZXJ5IGVuZCBhbmQgY29uZnVzZSB0aGUgc2VydmVyLi4uCi0JICBhbmQgYWxzbyBtYWtlIGl0IGltcG9zc2libGUgdG8gdXNlIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuCi0KLTIwMTQtMDItMTMgMTE6MTE6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogQ29uc2lzdGVudGx5IHVzZSBoYXZlX3NpemUgaW5zdGVhZCBvZiBjb250ZW50X3NpemUhPTAKLQotMjAxNC0wMi0xMyAxMDozMDowOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBGcmVlIGV4dHJhIGhlYWRlcnMgd2hlbiBmaW5hbGl6aW5nIHRoZSBlbGVtZW50Ci0JICBJdCdzIHNldCBhcyBwcm9wZXJ0eSBieSB0aGUgYXBwbGljYXRpb24sIHdlIHNob3VsZCBub3QganVzdCByZXNldAotCSAgcHJvcGVydGllcyB3aGVuIGdvaW5nIGJhY2sgdG8gUkVBRFkuCi0KLTIwMTQtMDItMTMgMTA6Mjg6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogUHJvcGVybHkgY2xvc2UgdGhlIHNlc3Npb24gd2hlbiBnb2luZyBiYWNrIHRvIE5VTEwKLQkgIERvbid0IHdhaXQgZm9yIHRoYXQgdW50aWwgdGhlIGVsZW1lbnQgaXMgZGlzcG9zZWQuCi0KLTIwMTMtMDItMjggMTI6MjA6NTIgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgc291cGh0dHBzcmM6IGFkZCBzdXBwb3J0IGZvciBrZWVwLWFsaXZlIHNlc3Npb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5OTI2Ci0KLTIwMTQtMDItMTIgMTM6MDA6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgc291cGh0dHBzcmM6IEFkZCAiY29tcHJlc3MiIHByb3BlcnR5IHRvIGVuYWJsZS9kaXNhYmxlIGF1dG9tYXRpYyBnemlwL2RlZmxhdGUgY29udGVudCBlbmNvZGluZyBoYW5kbGluZwotCi0yMDE0LTAyLTEyIDEyOjM5OjEwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IFJldHJ5IGNvbm5lY3Rpb24gaWYgd2UncmUgZmluaXNoZWQgYmVmb3JlIHRoZSBjb250ZW50IHNpemUgb25seSBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgY29udGVudCBzaXplCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyMTg1Ci0KLTIwMTQtMDItMTIgMTA6MDg6NTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXB1dGlscy5jOgotCSAgc291cHV0aWxzOiBGaXggY29tcGlsZXIgd2FybmluZwotCSAgZ3N0c291cHV0aWxzLmM6MzU6MjU6IGVycm9yOiBjb21wYXJpc29uIG9mIGNvbnN0YW50IDkgd2l0aCBleHByZXNzaW9uIG9mIHR5cGUKLQkgICdTb3VwTG9nZ2VyTG9nTGV2ZWwnIGlzIGFsd2F5cyBmYWxzZQotCSAgWy1XZXJyb3IsLVd0YXV0b2xvZ2ljYWwtY29uc3RhbnQtb3V0LW9mLXJhbmdlLWNvbXBhcmVdCi0KLTIwMTQtMDEtMDcgMjM6MDA6NTYgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkqIGV4dC9zb3VwL2dzdHNvdXAuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmg6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkqIGV4dC9zb3VwL2dzdHNvdXB1dGlscy5jOgotCSogZXh0L3NvdXAvZ3N0c291cHV0aWxzLmg6Ci0JICBzb3VwaHR0cCo6IGFkZCBhYmlsaXR5IHRvIGRvIEhUVFAgc2Vzc2lvbiBsb2dnaW5nCi0JICBUaGlzIGNoYW5nZXNldCBhZGRzIHRoZSBsb2dnaW4gaW5mcmFzdHJ1Y3R1cmUgYW5kCi0JICBtb2RzIGJvdGggc291cGh0dHBzcmMgYW5kIHNvdXBodHRjbGllbnRzaW5rIHRvIHVzZSBpdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjE3NjQKLQotMjAxNC0wMi0wNyAxNDowMDoxNSArMDEwMCAgZGl2aGFlcmUgPGRpcmsudmFuaGFlcmVuYm9yZ2hAdWdlbnQuYmU+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IGFkZCBzdXBwb3J0IGZvciBHUkFZOCwgQkdSIGFuZCBSR0IgdmlkZW8gY29sb3Vyc3BhY2VzIGluIFZfVU5DT01QUkVTU0VEIGNvZGVjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzODQ5Ci0KLTIwMTQtMDItMTEgMTM6MjU6NDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogQWRkIG1hcHBpbmcgZm9yIE5PVF9GT1VORCBhbmQgTk9UX0FVVEhPUklaRUQgZXJyb3JzCi0KLTIwMTQtMDItMTEgMTM6MjU6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogRG9uJ3QgZHVwbGljYXRlIHN0YXR1c19jb2RlIHRvIEdTdHJlYW1lciBlcnJvciBtYXBwaW5nCi0KLTIwMTQtMDItMDkgMjM6Mzg6NDQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9nb29tL2ZpbHRlcnMuYzoKLQkqIGdzdC9nb29tMmsxL2ZpbHRlcnMuYzoKLQkgIGdvb206IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb25zCi0KLTIwMTQtMDItMDkgMjM6MjE6MjAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FwYXJzZTogQ29tbWVudCBvdXQgc29tZSB1bnVzZWQgZnVuY3Rpb25zIHVzZWQgb25seSBmcm9tIHRoZSBjb21tZW50ZWQgb3V0IHB1bGwtbW9kZSBjb2RlCi0KLTIwMTQtMDItMDggMjE6MDE6MzIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICBpZDN2Mm11eDogRml4IGFub3RoZXIgY29tcGlsZXIgd2FybmluZwotCi0yMDE0LTAyLTA4IDE3OjQzOjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IEZpeCBpbXBsaWNpdCBlbnVtIGNvbnZlcnNpb24gY29tcGlsZXIgd2FybmluZwotCSAgZXJyb3I6IGltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBlbnVtZXJhdGlvbiB0eXBlCi0JICAnU291cFN0YXR1cycgdG8gZGlmZmVyZW50IGVudW1lcmF0aW9uIHR5cGUgJ1NvdXBLbm93blN0YXR1c0NvZGUnCi0KLTIwMTQtMDItMDggMTc6NDE6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nIGluIHRlc3QKLQkgIGVycm9yOiB2YXJpYWJsZSAnbWFzaycgaXMgdXNlZCB1bmluaXRpYWxpemVkCi0JICB3aGVuZXZlciAnaWYnIGNvbmRpdGlvbiBpcyBmYWxzZSBbLVdlcnJvciwtV3NvbWV0aW1lcy11bmluaXRpYWxpemVkXQotCi0yMDE0LTAyLTA4IDE3OjI3OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgaWQzdjJtdXg6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nCi0JICBlcnJvcjogdmFyaWFibGUgJ2ltYWdlX3R5cGUnIGlzIHVzZWQgdW5pbml0aWFsaXplZAotCSAgd2hlbmV2ZXIgJ2lmJyBjb25kaXRpb24gaXMgZmFsc2UgWy1XZXJyb3IsLVdzb21ldGltZXMtdW5pbml0aWFsaXplZF0KLQotMjAxNC0wMi0wOCAxNzoyNToyNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zczQvb3NzNC1hdWRpby5oOgotCSAgb3NzNDogRml4IHR5cG8gaW4gaGVhZGVyIGluY2x1ZGUgZ3VhcmQKLQkgIGVycm9yOiAnR1NUX09TUzRfQVVESU9fSCcgaXMgdXNlZCBhcyBhIGhlYWRlciBndWFyZCBoZXJlLAotCSAgZm9sbG93ZWQgYnkgI2RlZmluZSBvZiBhIGRpZmZlcmVudCBtYWNybyBbLVdlcnJvciwtV2hlYWRlci1ndWFyZF0KLQotMjAxNC0wMi0wOCAxNzoyNDowNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSAgcnRwcnR4c2VuZDogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQkgIHZhcmlhYmxlICdydHhfc3NyYycgaXMgdXNlZCB1bmluaXRpYWxpemVkIHdoZW5ldmVyCi0JICAnaWYnIGNvbmRpdGlvbiBpcyBmYWxzZSBbLVdlcnJvciwtV3NvbWV0aW1lcy11bmluaXRpYWxpemVkXQotCi0yMDE0LTAyLTA4IDE3OjIxOjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5LmM6Ci0JICBydHBhYzNkZXBheTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCi0yMDE0LTAyLTA4IDE3OjE5OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvZmx4L2ZseF9mbXQuaDoKLQkgIGZseDogRml4IHR5cG8gaW4gaGVhZGVyIGluY2x1ZGUgZ3VhcmQKLQkgIGVycm9yOiAnX19HU1RfRkxYX0ZNVF9fSF9fJyBpcyB1c2VkIGFzIGEgaGVhZGVyIGd1YXJkIGhlcmUsCi0JICBmb2xsb3dlZCBieSAjZGVmaW5lIG9mIGEgZGlmZmVyZW50IG1hY3JvIFstV2Vycm9yLC1XaGVhZGVyLWd1YXJkXQotCi0yMDE0LTAyLTA3IDEwOjA3OjQxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IHJlbW92ZSBoYXZlX2R0cyBmbGFnIGZyb20gcGFkcwotCSAgSXQgd2FzIHVzZWQgaW4gdGhlIHBhc3QgaW4gMC4xMCB3aGVuIHRoZXJlIHdhcyBubyBleHBsaWNpdCBEVFMKLQkgIGZpZWxkIGluIGJ1ZmZlcnMsIG5vdyB3ZSBoYXZlIGl0IGluIDEueCBzZXJpZXMgYW5kIHdlIGNhbgotCSAgY2hlY2sgaXQgZGlyZWN0bHkgd2l0aCBHU1RfQlVGRkVSX0RUU19JU19WQUxJRAotCi0yMDE0LTAyLTA3IDAxOjQ5OjI2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IGltcHJvdmUgc3VwcG9ydCBmb3Igc3BhcnNlIHN0cmVhbXMKLQkgIERvIG5vdCB0cnkgdG8gdXNlIHN1YnNlcXVlbnQgYnVmZmVyIHRpbWVzdGFtcHMgdG8gY2FsY3VsYXRlCi0JICBzcGFyc2Ugc3RyZWFtcyBkdXJhdGlvbnMgYmVjYXVzZSB0aGUgc3RyZWFtIGlzIHNwYXJzZSBhbmQKLQkgIHRoZSBidWZmZXJzIG1pZ2h0IG5vdCBiZSAndGltZSBhZGphY2VudCcuIFNvIHJlbHkgb24gdGhlCi0JICBkdXJhdGlvbiBhbmQgZ2l2ZSB0aGUgb3B0aW9uIHRvIHRoZSBwYWQgdG8gcHJvdmlkZQotCSAgY3VzdG9tICdlbXB0eScgYnVmZmVycyB0byByZXByZXNlbnQgdGhlIGdhcHMgaW4gdGhlCi0JICBzdHJlYW0sIHRoaXMgY2FuIHZhcnkgb24gaG93IHRoZSBkYXRhIGlzIHJlcHJlc2VudGVkLgotCSAgUmlnaHQgbm93LCB0aGUgb25seSBzcGFyc2Ugc3RyZWFtIHN1cHBvcnRlZCBpcyB0eDNnIHN1YnRpdGxlcy4KLQotMjAxNC0wMi0wNiAxMjoxNToyMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBhZGQgc3VwcG9ydCBmb3IgdGV4dC94LXJhdyBzdWJ0aXRsZXMKLQkgIEFkZHMgaXQgdG8gbXA0bXV4LCBxdG11eCBhbmQgZ3BwbXV4LgotCSAgQnVmZmVycyBuZWVkIHRvIGJlIHByZWZpeGVkIHdpdGggMiBieXRlcyBmb3IgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZQotCSAgYmVpbmcgbXV4ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgxMjk1Ci0KLTIwMTQtMDItMDYgMTI6MDk6MDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zLmg6Ci0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSAgcXRtdXg6IGFkZCBzdXBwb3J0IGZvciB0aGUgVFgzRyBhdG9tcwotCSAgQWRkcyBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGFuZCBzZXR0aW5nIHZhbHVlcyByZWxhdGVkIHRvIHRoZQotCSAgdHgzZyBhdG9tIGZvciByYXcgdGV4dCBzdWJ0aXRsZSBzdXBwb3J0LgotCSAgUVRGRiBzcGVjIGhhcyBpbmZvcm1hdGlvbiBvbiB0aG9zZSBhdG9tcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU4MTI5NQotCi0yMDE0LTAyLTA1IDEwOjI3OjU0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5oOgotCSAgcXRtdXg6IGFkZCBzdWJ0aXRsZSBzdXBwb3J0IHRvIHF0bXV4bWFwIHN0cnVjdHVyZXMKLQkgIGFkZHMgYmFzaWMgc3R1YnMgZm9yIHN1YnRpdGxlIHN1cHBvcnQgYXJvdW5kIHRoZSBxdG11eCBhbmQKLQkgIHF0bXV4bWFwIHN0cnVjdHVyZXMuIFN0aWxsIG5vIHJlYWwgc3VidGl0bGUgaW1wbGVtZW50ZWQsIGJ1dAotCSAgYmFzaWMgZnVuY3Rpb25zIGluIHBsYWNlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgxMjk1Ci0KLTIwMTQtMDEtMjAgMTc6MzE6MTQgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiBmYWN0b3Igb3V0IHJlYWQgY29udGV4dCBpbml0L3Jlc2V0Ci0JICBXaGlsZSBhdCB0aGlzLCBtb3ZlIF90cmFja19yZXNldCgpIHRvIHRyYWNrLWlkcwotCSAgc28gaXQgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBjb21tb24gcmVhZCBjb250ZXh0Ci0JICByZXNldCByb3V0aW5lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjcwNQotCi0yMDE0LTAyLTA2IDEyOjIxOjA3ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JICBlZmZlY3R2OiBmaXggZG9jIHNlY3Rpb24gb2YgcmV2dHYgZWxlbWVudAotCi0yMDE0LTAyLTA1IDEyOjQ2OjU0ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW06Ci0JICBvc3h2aWRlbzogRml4IGxpYnRvb2wgdXNhZ2UKLQkgIC0tdGFnPUNDIGlzIG5lZWRlZCBmb3Igc3RhdGljIGJ1aWxkCi0KLTIwMTQtMDEtMTYgMTE6MjY6NDEgKzAwMDAgIE1hdHRoaWV1IEJvdXJvbiA8bWF0dGhpZXUuYm91cm9uQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGRvIG5vdCB0cnkgc2V0IGRlaW50ZXJsYWNlIG1ldGhvZCBpZiBwYXNzdGhyb3VnaCBpcyBlbmFibGVkCi0JICBGaXhlcyBhbiBpc3N1ZSB3aXRoIHByb2dyZXNzaXZlIGNvbnRlbnQgYW5kIHVuc3VwcG9ydGVkIHZpZGVvIGZvcm1hdHMKLQkgIGZvciB0aGUgZGVpbnRlcmxhY2UgbWV0aG9kLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTYzNgotCi0yMDE0LTAyLTA0IDIxOjI2OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBvcmRlciBmb3JtYXQgaW4gdGVtcGxhdGUgY2FwcyBieSBwcmVmZXJlbmNlCi0JICBUbyBtaW5pbWlzZSByaXNrIG9mIGJhZCBmaXhhdGlvbiwgdGhvdWdoIGF1ZGlvY29udmVydAotCSAgYXQgbGVhc3Qgc2hvdWxkIGJlIHNtYXJ0IGVub3VnaCB0byBhdm9pZCBpdC4KLQotMjAxNC0wMi0wMiAwOTo1NzowMyAtMDgwMCAgRGFuIEtlZ2VsIDxkYW5rQGtlZ2VsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgdjRsMjogUmVtb3ZlIG9ic29sZXRlIGRlZmluaXRpb24gR1NUX1Y0TDJfTUlTU0lOR19CVUZERUNMCi0JICBUaGUgb25seSB1c2Ugd2FzIHJlbW92ZWQgYnkgOWVkYzBjMDM2NWY3OWFiMDdmZjJlNjU0NjFjNjY5NmUzOTMxYTNmMAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzQ0NgotCi0yMDE0LTAyLTA0IDEzOjQzOjU2ICswMTAwICBSYWZhxYIgTXXFvHnFgm8gPGdhbHRnZW5kb0BvMi5wbD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkgIGdzdDogRG9uJ3QgdXNlIGVuZGlhbm5lc3Mtc3BlY2lmaWMgUzggYXVkaW8gZm9ybWF0Ci0JICBJdCBkb2VzIG5vdCBleGlzdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjMzMzEKLQotMjAxNC0wMS0zMSAxNDoxNzo1NCArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9jYWlyby9nc3RjYWlyb292ZXJsYXkuYzoKLQkgIGNhaXJvb3ZlcmxheTogYWRkIHN1cHBvcnQgZm9yIFJHQjE2Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMjg5Ci0KLTIwMTQtMDEtMzAgMDk6NDM6NTAgKzAxMDAgIFBlciB4IEpvaGFuc3NvbiA8cGVyeGpvaEBheGlzLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgbWF0cm9za2FtdXg6IEZpeCBjb25zdGFudGx5IGdyb3dpbmcgdXNlZCB1aWQgbGlzdAotCSAgTW92ZXMgdGhlIHVzZWQgdWlkIGxpc3QgdG8gdGhlIGNsYXNzIHRvIGF2b2lkIGhhdmluZyBpdCBncm93IGZvcmV2ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMjY5Ci0KLTIwMTQtMDEtMzAgMTA6NDQ6MDUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkNDhiZWQzIHRvIDFhMDdkYTkKLQotMjAxNC0wMS0yNCAwMTo1MjowOCArMDAwMCAgTWlrZSBTaGVsZG9uIDxlbGxlb0BnbnUub3JnPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBJZ25vcmUgQnJvYWRjYXN0IFdhdmUgRm9ybWF0IChCV0YpIHRhZ3Mgd2hlbiBzZWFyY2hpbmcgZm9yICdmbXQnIGNodW5rCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMTI1Ci0KLTIwMTQtMDEtMjkgMTA6Mzc6NTMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGF1eC5jOgotCSAgY2hlY2s6IFVzZSBmYWtlc2luayBzeW5jPVRydWUgaW5zdGVhZCBvZiBhbiBhdWRpbyBzaW5rCi0JICBFbnN1cmVzIHRoZSB0ZXN0IGNhbiBydW4gb24gc3lzdGVtcyB3aXRob3V0IGFsc2EgKG9yIGFueSBhdWRpbyBvdXRwdXQgZm9yCi0JICB0aGF0IG1hdHRlciksIGFuZCB3aWxsIGF2b2lkIHBlb3BsZSBydW5uaW5nIGJ1aWxkIHNsYXZlcyB3b25kZXJpbmcgd2hhdAotCSAgdGhlIGhlbGwgd2FzIGJlZXBpbmcgZHVyaW5nIHRoZSBuaWdodCA6KQotCi0yMDE0LTAxLTI3IDIwOjA1OjQyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBjdXN0b20gZ2V0X3NpbmtfY2FwcyBoYW5kbGluZyBmb3IgcHJpdmF0ZSBzdHJlYW0gY2FwcwotCSAgLi4uIG5vdyB0aGF0IHRob3NlIGFyZSB0cmFuc2Zvcm1lZCByYXRoZXIgdGhhbiBwYXJzZWQsIHNvbWUgdHJhbnNmb3JtaW5nCi0JICBvZiBjYXBzIGlzIHJlcXVpcmVkIGFzIHdlbGwgdG8gbWFrZSBhdXRvLXBsdWdnaW5nIHN1Y2NlZWQuCi0KLTIwMTQtMDEtMjUgMDI6MDY6MDAgLTA1MDAgIFJ5YW4gTG9ydGllIDxkZXNydEBkZXNydC5jYT4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogZ3VhcmQgdXNlIG9mIEVOT0RBVEEgd2l0aCAjaWZkZWYKLQkgIE5vdCBhbGwgc3lzdGVtcyB3aXRoIHY0bCBoYXZlIEVOT0RBVEEgZGVmaW5lZCwgc28gY2hlY2sgdGhhdCB3ZSBoYXZlIGl0Ci0JICBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyOTUzCi0KLTIwMTQtMDEtMjQgMTI6Mzc6MzkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIFJldmVydCAicnRzcHNyYzogUHJveHkgcnRwaml0dGVyYnVmZmVyIGRvLXJldHJhbnNtaXNzaW9uIHByb3BlcnR5IgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5ZjdiMTEyOGIxZjAwYTJiODdhMjMyZmY4OTA4Njc1NDlhYjk1YmE1LgotCSAgVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJlIHJ0c3BzcmMgaWYgdGhlIEFWUEYgcHJvZmlsZQotCSAgaXMgdXNlZCwgYW5kIG1hbnVhbCBlbmFibGluZyBvZiBpdCBjYW4gYmUgZG9uZSB3aXRoIHRoZSBuZXctbWFuYWdlcgotCSAgc2lnbmFsLgotCi0yMDE0LTAxLTI0IDEwOjIxOjExICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogYWRkIHNpZ25hbCB0byBub3RpZnkgb2YgbmV3IG1hbmFnZXIKLQkgIFNvIHRoYXQgeW91IGNhbiBjb25maWd1cmUgYW5kIGNvbm5lY3QgdG8gc2lnbmFscyBvbiB0aGUgcnRwYmluLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjI4NjYKLQotMjAxNC0wMS0yMyAxNToxNzo1OCAtMDgwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IFByb3h5IHJ0cGppdHRlcmJ1ZmZlciBkby1yZXRyYW5zbWlzc2lvbiBwcm9wZXJ0eQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjg2NgotCi0yMDE0LTAxLTIxIDE3OjUyOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGhhbmRsZSBleHBlY3RlZCBwYWNrZXQgYmVpbmcgYW4gUlRYIHBhY2tldAotCSAgSWYgdGhlIGV4cGVjdGVkIHBhY2tldCAoZG9fbmV4dF9zZXFudW0gaXMgVFJVRSkgaXMgdGhlIG9uZSB3ZSByZXF1ZXN0ZWQKLQkgIGZvciByZXRyYW5taXNzaW9uIGVhcmxpZXIsIGRvIHRoZSBsb2dpYyB0byB1cGRhdGUgdGhlIHJldHJhbnNtaXNzaW9uCi0JICBzdGF0aXN0aWNzIGFzIHdlbGwgYmVmb3JlIHNldHRpbmcgdXAgdGhlIHRpbWVycyBmb3IgdGhlIG5leHQgZXhwZWN0ZWQKLQkgIHBhY2tldC4KLQkgIEFsc28gcmVzZXQgdGhlIHJldHJhbnNtaXNzaW9uIGNvdW50ZXIgaWYgdGhlIHRpbWVyIGlzIHJldXNlZCBmb3IgYW5vdGhlcgotCSAgc2VxbnVtLgotCi0yMDE0LTAxLTIxIDE1OjQ4OjIwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGFkZCBhIGNhcHMgYWNjdW11bGF0b3IgZm9yIHRoZSByZXF1ZXN0LXB0LW1hcCBzaWduYWwKLQkgIEFkZCBhbiBhY2N1bXVsYXRvciB0aGF0IHN0b3BzIHRoZSBzaWduYWwgZW1pc3Npb24gYXMgc29vbiBhcyBhIGNhcHMgaGFzCi0JICBiZWVuIHJldHJpZXZlZC4gT3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGhhbmRsZXIgd291bGQgY29udGludWUgZW1pdHRpbmcKLQkgIHRoZSBzaWduYWwgYW5kIHBvc3NpYmx5IG92ZXJ3cml0ZSB0aGUgcmVzdWx0IHdpdGggTlVMTCBhZ2Fpbi4KLQotMjAxNC0wMS0yMSAxNToyNTo1NCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkgIHJ0eHJlY2VpdmU6IGNvcHkgZmxhZ3MgYW5kIHRpbWVzdGFtcHMgZnJvbSBvcmlnaW5hbCBidWZmZXIKLQotMjAxNC0wMS0yMSAxNToyNDo1MiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBpZ25vcmUgaW52YWxpZCB0aW1lc3RhbXBzIGluIHJ0dCBjYWxjdWxhdGlvbgotCSAgV2hlbiB0aGUgaW5wdXQgYnVmZmVyIGRvZXMgbm90IGhhdmUgYSB2YWxpZCB0aW1lc3RhbXAsIGRvbid0IHRyeSB0bwotCSAgY2FsY3VsYXRlIHRoZSByb3VuZC10cmlwLXRpbWUuCi0KLTIwMTQtMDEtMTYgMTQ6MjM6MTMgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thcGFyc2U6IGJldHRlciBkZWZhdWx0IGNhcHMgd2hlbiBub25lIHNldAotCSAgVXNlcyBpbmZvcm1hdGlvbiBnYXRoZXJlZCBkdXJpbmcgRUJNTCBwYXJzaW5nIHRvCi0JICBmb3JnZSBhIG1vcmUgc3VpdGFibGUgc2V0IG9mIGNhcHMgaW5zdGVhZCBvZiBibGluZGx5Ci0JICBhc3N1bWluZyBldmVyeXRoaW5nIGlzIHZpZGVvL3gtbWF0cm9za2EuCi0JICBGb3IgY29uc2lzdGVuY3ksIHN0cmVhbSB0eXBlIHJlc2V0IHdhcyBhZGRlZCB0bwotCSAgbWF0cm9za2EtZGVtdXggdG9vLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjMxMQotCi0yMDE0LTAxLTE1IDE3OjI5OjM1ICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBydHguYzoKLQkgIHRlc3RzOiBydHBydHg6OnRlc3RfcnR4cmVjZWl2ZV9kYXRhX3JlY29uc3RydWN0aW9uOiByZW1vdmUgdXNlbGVzcyBjb2RlIGZvciB0cmlnZ2VyaW5nIHJldHJhbnNtaXNzaW9uCi0JICBUaGVyZSBpcyBubyBuZWVkIGFueW1vcmUgdG8gcHVzaCB5ZXQgYW5vdGhlciBidWZmZXIgaW4gcnR4c2VuZAotCSAgaW4gb3JkZXIgdG8gdHJpZ2dlciB0aGUgcHJldmlvdXNseSByZXF1ZXN0ZWQgcmV0cmFuc21pc3Npb25zCi0JICB0byBhY3R1YWxseSBoYXBwZW4uCi0KLTIwMTQtMDEtMTUgMTc6Mjc6MTkgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdHM6IHJ0cHJ0eDo6dGVzdF9ydHhyZWNlaXZlX2RhdGFfcmVjb25zdHJ1Y3Rpb246IGZpeCByYWNlIGNvbmRpdGlvbgotCSAgTm93IHdpdGggcnRwcnR4c2VuZCBwdXNoaW5nIHJ0eCBidWZmZXJzIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLAotCSAgdGhpcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBpcyBkZXRlcm1pbmlzdGljLgotCSAgVGhpcyBjb2RlIG1ha2VzIHVzZSBvZiBHc3RDaGVjaydzIGdsb2JhbCBHTXV0ZXggYW5kIEdDb25kIHRoYXQgYXJlCi0JICBiZWluZyB1c2VkIGluc2lkZSBHc3RDaGVjaydzIHNpbmsgcGFkIGNoYWluKCkgZnVuY3Rpb24gaW4gb3JkZXIKLQkgIHRvIHN5bmNocm9uaXplIHdpdGggaXQuCi0KLTIwMTQtMDEtMTUgMTc6MTc6NTcgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdHM6IHJ0cHJ0eDo6dGVzdF9ydHhzZW5kZXJfcGFja2V0X3JldGVudGlvbjogZml4IHJhY2UgY29uZGl0aW9uCi0JICBOb3cgd2l0aCBydHBydHhzZW5kIHB1c2hpbmcgcnR4IGJ1ZmZlcnMgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQsCi0JICB0aGlzIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0IGlzIGRldGVybWluaXN0aWMuCi0JICBUaGlzIGNvZGUgbWFrZXMgdXNlIG9mIEdzdENoZWNrJ3MgZ2xvYmFsIEdNdXRleCBhbmQgR0NvbmQgdGhhdCBhcmUKLQkgIGJlaW5nIHVzZWQgaW5zaWRlIEdzdENoZWNrJ3Mgc2luayBwYWQgY2hhaW4oKSBmdW5jdGlvbiBpbiBvcmRlcgotCSAgdG8gc3luY2hyb25pemUgd2l0aCBpdC4KLQotMjAxNC0wMS0xNSAxMToyNjozMyArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICB0ZXN0czogcnRwcnR4Ojp0ZXN0X3B1c2hfZm9yd2FyZF9zZXE6IGZpeCByYWNlIGNvbmRpdGlvbgotCSAgTm93IHdpdGggcnRwcnR4c2VuZCBwdXNoaW5nIHJ0eCBidWZmZXJzIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLAotCSAgdGhpcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdCBpcyBkZXRlcm1pbmlzdGljLgotCSAgVGhpcyBjb2RlIG1ha2VzIHVzZSBvZiBHc3RDaGVjaydzIGdsb2JhbCBHTXV0ZXggYW5kIEdDb25kIHRoYXQgYXJlCi0JICBiZWluZyB1c2VkIGluc2lkZSBHc3RDaGVjaydzIHNpbmsgcGFkIGNoYWluKCkgZnVuY3Rpb24gaW4gb3JkZXIKLQkgIHRvIHN5bmNocm9uaXplIHdpdGggaXQuCi0KLTIwMTQtMDEtMTUgMDk6NDc6MDMgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdHM6IHJ0cHJ0eDo6dGVzdF9wdXNoX2ZvcndhcmRfc2VxOiBmaXggYnVmZmVyIHJlZmNvdW50aW5nCi0KLTIwMTQtMDEtMjEgMTM6NDI6MzggKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkgIHJ0cHJ0eHNlbmQ6IGVuc3VyZSB0aGF0IG5vIHJ0eCBidWZmZXJzIGFyZSBzZW50IGFmdGVyIEVPUwotCSAgVG8gZG8gdGhhdCwgZW5xdWV1ZSB0aGUgRU9TIGV2ZW50IHRvIGJlIHNlbnQgZnJvbSB0aGUgc3JjcGFkIHRhc2sKLQkgIHRocmVhZCBhbmQgZmx1c2ggdGhlIHF1ZXVlIHJpZ2h0IGFmdGVyd2FyZHMsIHNvIHRoYXQgbm8gbW9yZSBydHgKLQkgIGJ1ZmZlcnMgY2FuIGJlIHNlbnQsIGV2ZW4gaWYgdGhlcmUgYXJlIG1vcmUgcmVxdWVzdHMgY29taW5nIGluLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjM3MAotCi0yMDE0LTAxLTE1IDA5OjQ2OjE0ICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmg6Ci0JICBydHBydHhzZW5kOiBydW4gYSBuZXcgR3N0VGFzayBvbiB0aGUgc3JjIHBhZAotCSAgVGhlIHJlYXNvbiBiZWhpbmQgdGhpcyBpcyB0byBtaW5pbWl6ZSB0aGUgcmV0cmFuc21pc3Npb24gZGVsYXkuCi0JICBQcmV2aW91c2x5LCB3aGVuIGEgTkFDSyB3YXMgcmVjZWl2ZWQsIHJ0cHJ0eHNlbmQgd291bGQgcHV0IGEKLQkgIHJldHJhbnNtaXNzaW9uIHBhY2tldCBpbiBhIHF1ZXVlIGFuZCBpdCB3b3VsZCBzZW5kIGl0IGZyb20gY2hhaW4oKSwKLQkgIGkuZS4gb25seSBhZnRlciBhIG5ldyBidWZmZXIgd291bGQgYXJyaXZlLgotCSAgVGhpcyB1bmZvcnR1bmF0ZWx5IHdhcyBjYXVzaW5nIGJpZyBkZWxheXMsIGluIHRoZSBvcmRlciBvZiA2MC0xMDAgbXMsCi0JICB3aGljaCBjYW4gYmUgY3JpdGljYWwgZm9yIHRoZSByZWNlaXZlciBzaWRlLgotCSAgQnkgaGF2aW5nIGEgc2VwYXJhdGUgR3N0VGFzayBmb3IgcHVzaGluZyBidWZmZXJzIG91dCBvZiBydHhzZW5kLAotCSAgd2UgY2FuIHB1c2ggYnVmZmVycyBvdXQgcmlnaHQgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBldmVudCwgd2l0aG91dAotCSAgd2FpdGluZyBmb3IgY2hhaW4oKSB0byBnZXQgY2FsbGVkLgotCi0yMDE0LTAxLTAzIDE3OjQ3OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuaDoKLQkgIHNob3V0MnNlbmQ6IGVycm9yIG91dCBpZiBubyBjYXBzIHdlcmUgcmVjZWl2ZWQKLQkgIEluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCBpbnB1dCBpcyBvZ2cuCi0KLTIwMTQtMDEtMDMgMTc6MzA6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDJzZW5kOiBhY2NlcHQgYXVkaW8vd2VibSwgYXVkaW8vb2dnIGFuZCB2aWRlby9vZ2cgYXMgd2VsbAotCSAgVGhvc2UgYXJlIGFkdmVydGlzZWQgaW4gdGhlIHRlbXBsYXRlIGNhcHMsIGJ1dCB0aGUKLQkgIHNldGNhcHMgaGFuZGxlciBkaWRuJ3QgaGFuZGxlIHRoZW0uIEJ1dCB0aGVuIG9nZ211eAotCSAgYW5kIG9nZ3BhcnNlIGF0IGxlYXN0IGZvciBub3cgc3RpbGwgYWx3YXlzIG91dHB1dAotCSAgYXBwbGljYXRpb24vb2dnIGFueXdheSwgc28gdGhhdCB3YXNuJ3QgYSByZWFsIHByb2JsZW0uCi0KLTIwMTQtMDEtMjAgMTA6MTI6NDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDhwYXk6IERvbid0IGxlYWsgaW5wdXQgYnVmZmVycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjQxNAotCi0yMDE0LTAxLTE5IDE3OjQwOjU2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IHJlc2V0IHNvbWUgbW9yZSBhdWRpbyBwYWQgZGF0YSB3aGVuIG5lZWRlZAotCi0yMDE0LTAxLTE5IDE3OjM4OjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5oOgotCSAgYXZpbXV4OiB3cml0ZSBjb3JyZWN0IGJsb2NrYWxpZ24gZm9yIHZiciBhdWRpbwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDY1OQotCi0yMDE0LTAxLTE2IDE3OjM2OjEyIC0wODAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGRvIG5vdCBkcm9wIHNlcmlhbGl6ZWQgZXZlbnRzIHdoZW4gbGF0ZW5jeSBpcyBzZXQKLQkgIFNlcmlhbGl6ZWQgZXZlbnRzIGFyZSBub3cgcXVldWVkIGluIHRoZSBqaXR0ZXIgYnVmZmVyLCBzbyB3ZSBkb24ndAotCSAgd2FudCB0byBkcm9wIHRoZW0gZXZlbiBsYXRlbmN5IGlzIHNldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjIzNzIKLQotMjAxMy0xMi0xMSAwOTozNjoyMiArMDEwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGRvbid0IG1ha2UgdGhlIGJ1ZmZlciB3cml0YWJsZSB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjIzOTYKLQotMjAxMy0wOS0xMiAxNjo1Njo1NiArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBzZXQgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQgd2hlbiBhcHByb3ByaWF0ZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjM5NAotCi0yMDE0LTAxLTE3IDA3OjQ2OjA5ICswMTAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBkb24ndCByZWYgdGhlIG5ld2x5IGNyZWF0ZWQgYWxsb2NhdG9yCi0JICBPdGhlcndpc2UgdGhlIGFsbG9jYXRvciB3aWxsIG5ldmVyIGJlIGRlbGV0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNjEyCi0KLTIwMTQtMDEtMTUgMjI6NDc6MTIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRG9uJ3Qgc2tpcCBhbGwgdmlkZW8gZnJhbWVzIHVudGlsIHRoZSBmaXJzdCBrZXlmcmFtZQotCSAgSW5zdGVhZCBkbyBpdCBsaWtlIGFsbCBvdGhlciBkZW11eGVycyBhbmQgbGV0IHBhcnNlcnMgYW5kIGRlY29kZXJzCi0JICBoYW5kbGUgdGhhdC4gVGhlIGtleWZyYW1lIGluZm9ybWF0aW9uIGluc2lkZSB0aGUgY29udGFpbmVyIG1pZ2h0Ci0JICBiZSBjb21wbGV0ZWx5IHdyb25nIGxpa2UgaW4gdGhlIHNhbXBsZSBmaWxlIG9mIHRoZSBidWcgcmVwb3J0LAotCSAgYW5kIGlmIGl0IGlzIGNvcnJlY3QgYW5kIHdlIHB1c2ggbm8ga2V5ZnJhbWVzLCB0aGVuIHRoZSBwYXJzZXJzCi0JICBhbmQgZGVjb2RlcnMgd2lsbCBoYW5kbGUgdGhhdCBwcm9wZXJseSBhbnl3YXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyMjc2Ci0KLTIwMTQtMDEtMTMgMTA6MDg6MDkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogcmVtb3ZlIGVsc3Rfb2Zmc2V0IHZhcmlhYmxlcwotCSAgVGhleSBhcmUgbm90IHVzZWQgYW55bW9yZQotCi0yMDE0LTAxLTA2IDIxOjM2OjE3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZW1lbWJlciByZXZlcnNlIHBsYXliYWNrIHdoZW4gdmVyaWZ5aW5nIHRoZSBzZWdtZW50IGVuZAotCSAgQ2hlY2sgaWYgdGhlIHJhdGUgaXMgcG9zaXRpdmUgb3IgbmVnYXRpdmUgdG8gY29ycmVjdGx5IGNvbXBhcmUgdGhlIGN1cnJlbnQKLQkgIHBvc2l0aW9uIHdpdGggdGhlIHNlZ21lbnQgdG8gbWFrZSByZXZlcnNlIHBsYXliYWNrIHdvcmsKLQotMjAxNC0wMS0wMyAxMDo1OTozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBkbyBub3QgaWdub3JlIGVtcHR5IHNlZ21lbnRzCi0JICBNYWtlIHN1cmUgZW1wdHkgc2VnbWVudHMgYXJlIHVzZWQgYW5kIHB1c2hlZCB3aXRoIGEgZ2FwIGV2ZW50Ci0JICB0byByZXByZXNlbnQgaXRzIGRhdGEgKG9yIGxhY2sgb2YgaXQpCi0JICBFYWNoIFF0U2VnbWVudCBpcyBtYXBwZWQgaW50byBhIEdzdFNlZ21lbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZwotCSAgbWVkaWEgcmFuZ2UuIEZvciBlbXB0eSBRdFNlZ21lbnRzIGEgZ2FwIGV2ZW50IGlzIHB1c2hlZCBpbnN0ZWFkCi0JICBvZiBHc3RCdWZmZXJzIGFuZCBpdCBhZHZhbmNlcyB0byB0aGUgbmV4dCBRdFNlZ21lbnQuCi0JICBUbyBtYWtlIHRoaXMgd29yayB3aXRoIHNlZWtzLCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHN0YXJ0aW5nCi0JICAnYmFzZScgdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgY29uc2lzdGVudGx5IGluY3JlYXNpbmcgd2hlbgotCSAgcHVzaGluZyBuZXcgc2VnbWVudCBldmVudHMuCi0JICBGb3IgZXhhbXBsZTogaWYgYSBzZWVrIG1ha2VzIHF0ZGVtdXggc3RhcnQgZnJvbSA1cywgdGhlIGZpcnN0Ci0JICBzZWdtZW50IHdpbGwgaGF2ZSBhIGJhc2U9MC4gV2hlbiB0aGUgbmV4dCBzZWdtZW50IGlzIGFjdGl2YXRlZCwKLQkgIGl0cyBiYXNlIHRpbWUgd2lsbCBiZSBRdFNlZ21lbnQudGltZSAtIHF0ZGVtdXguc2VnbWVudF9iYXNlIHNvCi0JICB0aGF0IGl0IGRvZXNuJ3QgaW5jbHVkZSB0aGUgZmlyc3QgNXMgdGhhdCB3ZXJlbid0IHBsYXllZCBhbmQKLQkgIHNob3VsZG4ndCBiZSBhY2NvdW50ZWQgb24gdGhlIHJ1bm5pbmcgdGltZQotCSAgVGhpcyBwdXJwb3NlZGx5IHdpbGwgcmVtb3ZlIHRoZSBmaXggbWFkZSBmb3IKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAyNjQsIGF0IHRoaXMKLQkgIHBvaW50IGl0IHdhcyBkZWNpZGVkIHRvIHJlc3BlY3QgdGhlIGdhcHMsIGV2ZW4gaWYgdGhleSBjYXVzZQotCSAgYSBkZWxheSBvbiBwbGF5YmFjaywgYmVjYXVzZSB0aGF0J3MgdGhlIHdheSB0aGUgZmlsZSB3YXMgY3JhZnRlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDU4MzAKLQotMjAxMy0xMi0xMiAyMzowNTo0MyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICB0ZXN0czogUmVtb3ZlIHVzYWdlIG9mIHRoZSBzeXN0ZW0gY2xvY2sgZnJvbSB0aGUgcnRwcnR4IHRlc3QKLQotMjAxMy0xMi0xMiAyMzoyMjo0MSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwY29sbGlzaW9uLmM6Ci0JICB0ZXN0czogSW5pdGlhbCBzZWdtZW50IGluIHJ0cGNvbGxpc2lvbiB0ZXN0Ci0KLTIwMTQtMDEtMTQgMTU6NTY6NDIgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtcnRwYXV4LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXJ0cGF1eC5jOgotCSAgZXhhbXBsZXMvKi1ydHBhdXg6IHNwZWNpZnkgcGF5bG9hZCB0eXBlIGFzc29jaWF0aW9uIGZvciB0aGUgYXVkaW8gc3RyZWFtLCBzbyB0aGF0IHJ0eCB3b3JrcyBhbHNvIGZvciBhdWRpbwotCi0yMDE0LTAxLTE0IDEzOjA4OjE4ICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JICBydHBydHhzZW5kOiByZW1vdmUgd3JvbmcgY2hlY2sgZm9yIHBheWxvYWQgdHlwZSBub3QgaGF2aW5nIGJlZW4gc2V0Ci0JICAxKSBwdCBjYW4gYmUgbG93ZXIgdGhhbiA5NgotCSAgMikgdGhlcmUgaXMgbm8gcG9pbnQgaW4gY2hlY2tpbmcgdGhhdCBiZWNhdXNlIHJ0cHJ0eHNlbmQgd2lsbCBub3QKLQkgIGV2ZW4gc3RvcmUgYnVmZmVycyBmb3IgcGF5bG9hZCB0eXBlcyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCwKLQkgIHNvIHRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJlYWNoZWQKLQotMjAxNC0wMS0xNCAxMzowMTo0MSArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSAgcnRwcnR4c2VuZDogZml4IGRhdGEgbG9ja2luZyB3aGVuIGNyZWF0aW5nIHJ0eCBwYWNrZXRzCi0JICBUaGlzIHBhdGNoIG1vdmVzIHRoZSBjcmVhdGlvbiBvZiBydHggcGFja2V0cyB0byBiZSBkb25lIGVhcmx5LAotCSAgaW4gdGhlIHNyY19ldmVudCgpIGZ1bmN0aW9uLCB3aGVuIHRoZXkgYXJlIHJlcXVlc3RlZC4gVGhlIHB1cnBvc2UKLQkgIGlzIHRvIHJ1biBnc3RfcnRwX3J0eF9idWZmZXJfbmV3KCkgd2l0aCB0aGUgb2JqZWN0IGxvY2tlZCB0bwotCSAgcHJvdGVjdCBpbnRlcm5hbCBkYXRhLCBiZWNhdXNlIGlmIGl0IGlzIGRvbmUgYXQgdGhlIHB1c2hpbmcgc3RhZ2UsCi0JICB3ZSB3b3VsZCBoYXZlIHRvIGxvY2sgYW5kIHVubG9jayBtdWx0aXBsZSB0aW1lcyBpbiBhIHJvdyB3aGlsZSB3ZQotCSAgYXJlIHB1c2hpbmcgdGhlIHJ0eCBidWZmZXJzLgotCSAgUHJldmlvdXNseSB0aGVyZSB3YXMgbm8gbG9ja2luZyBhdCBhbGwsIHdoaWNoIHdhcyB0ZXJyaWJseSB3cm9uZy4KLQotMjAxNC0wMS0xNCAxMjo1MDoyMyArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSAgcnRwcnR4c2VuZDogbG9jayBhY2Nlc3MgdG8gaW50ZXJuYWwgZGF0YSBpbiBzaW5rX2V2ZW50KCkgZnVuY3Rpb24KLQotMjAxNC0wMS0xNCAxMjo0NDowNiArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSAgcnRwcnR4c2VuZDogcmVtb3ZlIHVubmVjZXNzYXJ5IGNhbGwgdG8gcmVzZXQoKSBmcm9tIGZpbmFsaXplKCkKLQkgIC4uLmFuZCB1c2UgX2ZyZWVfZnVsbCgpIG9uIHRoZSBwZW5kaW5nIGJ1ZmZlcnMgcXVldWUgbm93IHRoYXQKLQkgIHJlc2V0KCkgaXMgbm90IGJlaW5nIGNhbGxlZAotCi0yMDE0LTAxLTE0IDEyOjM4OjUxICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JICBydHBydHhzZW5kOiByZW1vdmUgdW51c2VkIHBhcmFtZXRlciBmcm9tIHRoZSBpbnRlcm5hbCByZXNldCgpIG1ldGhvZAotCi0yMDE0LTAxLTE0IDEyOjMyOjM4ICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JICBydHBydHhzZW5kOiBVc2UgZ19zbGljZV8qIGZvciBhbGxvY2F0aW5nIGludGVybmFsIHN0cnVjdHVyZXMKLQotMjAxNC0wMS0xNCAxMjoyODowMSArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5jOgotCSAgcnRwcnR4cmVjZWl2ZTogcmVtb3ZlIHN0dXBpZCBtdXRleCB1bmxvY2sgaW4gdGhlIG1pZGRsZSBvZiBjaGFpbigpCi0KLTIwMTQtMDEtMTQgMTI6MjU6MzYgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkgIHJ0cHJ0eHJlY2VpdmU6IHVzZSBHU1RfREVCVUdfT0JKRUNUIC8gR1NUX1dBUk5JTkdfT0JKRUNUIGluc3RlYWQgb2YgR1NUX0RFQlVHIC8gZ193YXJuaW5nCi0KLTIwMTQtMDEtMTQgMTI6MTk6NTggKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkgIHJ0cHJ0eHJlY2VpdmU6IGZpeCBpbnRlZ2VyIGZvcm1hdCBzcGVjaWZpZXJzIGluIEdTVF9ERUJVRwotCSAgc2VxbnVtIGluIHRoaXMgZnVuY3Rpb24gaXMgMzItYml0LCBzbyBHX0dVSU5UMTZfRk9STUFUIHdvdWxkCi0JICBwcm9kdWNlIHVuZGVmaW5lZCBvdXRwdXQgb24gYmlnIGVuZGlhbiBzeXN0ZW1zCi0KLTIwMTQtMDEtMTQgMTI6MTM6NDkgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaDoKLQkgIHJ0cHJ0eHNlbmQ6IGNoYW5nZSB0aGUgcnR4X3B0X21hcCBkaXJlY3RseSBpbiBzZXRfcHJvcGVydHkoKSBpbnN0ZWFkIG9mIGRlbGF5aW5nIGl0IGZvciBjaGFpbigpCi0JICBUaGUgc2FtZSBsb2NrIGlzIGhlbGQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIGNvbXBsaWNhdGluZyBpdC4uLgotCi0yMDE0LTAxLTE0IDEyOjA3OjU4ICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmg6Ci0JICBydHBydHhyZWNlaXZlOiBjaGFuZ2UgdGhlIHJ0eF9wdF9tYXAgZGlyZWN0bHkgaW4gc2V0X3Byb3BlcnR5KCkgaW5zdGVhZCBvZiBkZWxheWluZyBpdCBmb3IgY2hhaW4oKQotCSAgVGhlIHNhbWUgbG9jayBpcyBoZWxkLCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiBjb21wbGljYXRpbmcgaXQuLi4KLQotMjAxNC0wMS0xNCAxMTo1NTowMCArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5jOgotCSAgcnRwcnR4cmVjZWl2ZTogc2ltcGxpZnkgdGhlIGNvZGUgb2YgZmluYWxpemUoKQotCi0yMDE0LTAxLTE0IDExOjUyOjIxICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmg6Ci0JICBydHBydHhyZWNlaXZlOiB1c2UgdGhlIEdzdE9iamVjdCBsb2NrIGluc3RlYWQgb2YgYSBuZXcgb25lCi0KLTIwMTQtMDEtMTQgMTE6NDU6NTIgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaDoKLQkgIHJ0cHJ0eHNlbmQ6IHVzZSB0aGUgR3N0T2JqZWN0IGxvY2sgaW5zdGVhZCBvZiBhIG5ldyBvbmUKLQotMjAxMy0xMi0xMCAxNDoyOTo1NSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogQWRkIE5WMTJfNjRaMzIgc3VwcG9ydAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjEyNwotCi0yMDE0LTAxLTE0IDE5OjA4OjQ5ICswOTAwICBKdXN0aW4gSm95IDxqdXN0aW4uam95Ljl0bzVAZ21haWwuY29tPgotCi0JKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5jOgotCSAgb3NzaGVscGVyOiBEb24ndCBsZWFrIGZkIHdoZW4gZ2V0dGluZyBjYXJkIG5hbWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjIxNjMKLQotMjAxNC0wMS0xNCAwOTo0MzozMyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIFJldmVydCAiYWFjcGFyc2U6IHJlbGF4IHRoZSBkZXRlY3Rpb24gb2YgQURUUyIKLQkgIFRoaXMgd2FzIHB1c2hlZCBieSBtaXN0YWtlIGFsb25nIHdpdGggdGhlIFY0TDIgZml4LgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4ZWI0YjAzMmJlZjQ0NDM5N2M0ZDIxMWYyMDk1YzE3M2JhMTE0MTg3LgotCi0yMDE0LTAxLTE0IDE1OjQyOjAxICswOTAwICBKdXN0aW4gSm95IDxqdXN0aW4uam95Ljl0bzVAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkgIHJ0cGc3MjZwYXk6IGRvbid0IGxlYWsgZW5jb2RpbmdfbmFtZSBzdHJpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjIxNTkKLQotMjAxNC0wMS0xMyAwOToxNDowMCArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGZpeCBidWlsZCBicmVhayB1c2luZyBWNEwyX0NBUF9WSURFT19NMk1fTVBMQU5FCi0JICBUaGlzIG1heSBub3QgYmUgZGVmaW5lZC4gU2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb24gdXNlZAotCSAgb25seSB0aGUgb3RoZXIgZGVmaW5lIChWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FKSwgZmFsbAotCSAgYmFjayBvbiB0aGlzIG9ubHkgd2hlbiBub3QgYXZhaWxhYmxlLgotCi0yMDEzLTAyLTI3IDAxOjQ1OjUyICswOTAwICBBa2loaXJvIFRzdWthZGEgPGF0c3VrYWRhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IHJlbGF4IHRoZSBkZXRlY3Rpb24gb2YgQURUUwotCSAgQWNjb3JkaW5nIHRvIElTTy9JRUMgMTM4MTgtNywgImNoYW5uZWxfY29uZmlnIiBmaWVsZCBpbiBBRFRTIGhlYWRlcgotCSAgbWF5IGhhdmUgdmFsdWUgb2YgMCwgYXMgaW4gdGhlIGNhc2Ugb2YgZnJhbWUgd2l0aCBQQ0UuCi0JICBnc3RfYWFjX3BhcnNlX2RldGVjdF9zdHJlYW1zKCkgcmV0dXJuZWQgRkFMU0UgZm9yIHRob3NlIGZyYW1lcwotCSAgYW5kIGRpc2NhcmRlZCB0aGVtLgotCi0yMDE0LTAxLTA3IDExOjU4OjIzICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBjaGVjayBzZXRfY29uZmlnIHJldHVybiB2YWx1ZSBpbiBnc3RfdjRsMl9idWZmZXJfcG9vbF9uZXcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxNC0wMS0xMCAxMjo0MDozMSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBBZGQgcGFyc2VkPTEgZmllbGQgZm9yIGVuY29kZWQgb3V0cHV0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTQtMDEtMTAgMTI6Mzk6MTYgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRG9uJ3QgbGVhayBlbXB0eSBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTQtMDEtMDggMTY6NTE6MjEgKzAwMDAgIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IGRvIG5vdCBzdG9wIGEgc3RyZWFtIG5vdCBwcmV2aW91c2x5IHN0YXJ0ZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0xMiAxNjoyNzoyMSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCBlbmZvcmNlIGRpbWVuc2lvbiBmaWVsZCBvbiBlbmNvZGVkIGZvcm1hdHMKLQkgIERvbid0IGVuZm9yY2UgaGF2aW5nIHdpZHRoLCBoZWlnaHQgYW5kIGZyYW1lcmF0ZSBpbiB0ZW1wbGF0ZSBjYXBzIGZvciBlbmNvZGVkCi0JICBmb3JtYXRzLiBUaGVzZSBkb24ndCBhbHdheXMgbmVlZCB0byBiZSBleHBvc2VkIGFuZCBtYXkgYnJlYWsgbmVnb3RpYXRpb24gZm9yCi0JICBkZWNvZGVyIGFuZCBkZWNvZGluZyBzaW5rLiBJZiBuZWVkZWQsIHRoZXNlIGZpZWxkIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZAotCSAgd2hlbiBwcm9iZWQgY2FwcyBhcmUga25vd24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMTIgMTc6MDk6NTkgKzAwMDAgIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiB1bnJlZiBkb3duc3RyZWFtIHBvb2wKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0xOCAxMzozNzoyMyAtMDUwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IGFkZCBnc3RfdjRsMl9idWZmZXJfcG9vbF9mbHVzaAotCSAgU1RSRUFNT0ZGIHNldCBhbGwgdjRsMmJ1ZmZlcnMgdG8gREVRVUVVRSBzdGF0ZS4KLQkgIFRoZW4gZm9yIENBUFRVUkUgd2UgY2FsbCBRQlVGIG9uIGVhY2ggYnVmZmVyLgotCSAgRm9yIE9VVFBVVCB0aGUgYnVmZmVycyBhcmUganVzdCBwdXNoIGJhY2sgaW4gdGhlIEdzdEJ1ZmZlclBvb2wKLQkgIGJhc2UgY2xhc3MgJ3MgcXVldWUuCi0JICBCdXQgdGhlIGxvb3AgYWN0dWFsbHkgbG9va3MgbGlrZSB0aGUgc2FtZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0xNiAxNzoyOTozMCAtMDUwMCAgQmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEFkZCB2cDggc3VwcG9ydAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTEyIDE2OjQ2OjA5IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IERvbid0IGZvcmNlIGZyYW1lcmF0ZSBmaWVsZCBmb3IgT1VUUFVUCi0JICBJZiB0aGVyZSBpcyBub3RoaW5nIHRoYXQgc2VlbXMgdG8gZm9yY2UgYSBjZXJ0YWluIGZyYW1lcmF0ZSBvbiBvdXRwdXQgZGV2aWNlLCBpdCBpcwotCSAgcHJlZmVyYWJsZSB0byBzaW1wbHkgbm90IHNldCB0aGF0IGZlaWxkLiBUaGlzIGFsbG93IG5lZ290aWF0aW9uIHdpdGggdHNkZW11eCBpbiBhCi0JICBkZWNvZGVyIGZvciBleGFtcGxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTEyIDE0OjA3OjAzIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IF92NGwyZm91cmNjX3RvX3N0cnVjdHVyZSgpIGNhbiBiZSBzdGF0aWMKLQkgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgYW55bW9yZSBvdXRzaWRlIHY0bDJvYmplY3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMTIgMTQ6MjI6MjYgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogQWRkIE1QRUcxLzIgc3VwcG9ydAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTEyIDEyOjE4OjQ1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEFzayBmb3IgYSBkZWNlbnQgYnVmZmVyIHNpemUgd2hlbiBkZWFsaW5nIHdpdGggZW5jb2RlZCBmb3JtYXRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMDcgMTQ6MDM6NTMgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBPbiB3YXJuIG9uIHNpemUgY2hhbmdlIGlmIG5fcGxhbmVzID4gMQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTMxIDE2OjM4OjA5ICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogY2hlY2sgaWYgdHJhbnNsYXRlZCBmb3JtYXQgaXMgdmFsaWQKLQkgIEFsc28gYWRkIGEgRklYTUUgaW4gZ3N0X3Y0bDJfb2JqZWN0X3NldHVwX2Zvcm1hdAotCSAgdG8gbm90ZSB0aGF0IHRoZSB3aG9sZSBmdW5jdGlvbiBoYXMgdG8gYmUgaW1wcm92ZWQKLQkgIGluIG9yZGVyIHRvIHN1cHBvcnQgRU5DT0RFRCBmb3JtYXRzLgotCSAgSXQgcmVxdWlyZXMgdG8gaGF2ZSBhbiBlbmNvZGVyIGRldmljZSB3aGljaCB3ZSBkbyBub3QKLQkgIGhhdmUgcmlnaHQgbm93LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTA3IDEwOjMxOjE1IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IFZhbGlkYXRlIHJldHVybmVkIGRpbWVuc2lvbnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0wNSAxOTozNjoyNSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBFbnN1cmUgbWF4IGlzIG5vdCBzbWFsbGVyIHRoZW4gbWluIGluIGRlY2lkZV9hbGxvY2F0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMDUgMTk6MzY6MDYgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRG9uJ3Qga2VlcCB0aGUgbWF4IHBhcmFtdGVyIHdoZW4gdXNpbmcgb3VyIG93biBwb29sCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMDUgMTk6MzQ6NDQgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBSZXNwZWN0IHRoZSBzdWdnZXN0ZWQgbWluIGJ1ZmZlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTA1IDE4OjQ4OjQ0IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IEFsbG9jYXRlIHBvb2wgaWYgbmVlZGVkIGluIGRlY2lkZV9hbGxvY2F0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMDUgMTg6NDk6MTkgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogQWRkIFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9DQVBUVVJFIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0wNSAxODo0ODoxNSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBNb3ZlIGRlY2lkZSBhbGxvY2F0aW9uIGludG8gdjRsMm9iamVjdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTA1IDEzOjUxOjEzIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IEltcGxlbWVudCBfc2V0dXBfZm9ybWF0KCkKLQkgIFRoaXMgbWV0aG9kIGFsbG93IHNldHRpbmcgdXAgdGhlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBmb3JtYXQgb24gdGhlCi0JICBkZXZpY2UuIFRoaXMgaXMgdXNlZnVsIGZvciBNMk0gZWxlbWVudCB3aGVyZSBpbnB1dCBkYXRhIGRlY2lkZXMgdGhlIGZvcm1hdCB0aGF0IHdpbGwKLQkgIGJlIHNldCBvbiBjYXB0dXJlIHNpZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMTAgMTQ6MzQ6MTcgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogU3BsaXQgb3V0IHNhdmluZyBmb3JtYXQgZnJvbSBzZXRfZm9ybWF0KCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0zMSAxNTozNzoyNiArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IHNldCBvbmx5IG9uZSBwbGFuZSBmb3IgZW5jb2RlZCBmb3JtYXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0wNCAxNjo0OToxMyAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBNb3ZlIGNvZGUgYmxvY2sgd2hlcmUgaXQgYmVsb25ncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTA0IDE2OjI2OjEyIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IERvbid0IGNoZWNrIGZvcm1hdCBzcGVjaWZpYyBpbmZvcm1hdGlvbgotCSAgVGhlIG51bWJlciBvZiBwbGFuZSwgYW5kIHRoZSBzdHJpZGUgZG9lcyBub3QgcmVwcmVzZW50IGEgY2FwYWJpbGl0eSBjaGFuZ2UuIFNhbWUgY2FwcwotCSAgY2FuIGhhdmUgZGlmZmVyZW50IHN0cmlkZSBmcm9tIHRoZSBkZWZhdWx0IEdzdFZpZGVvSW5mbyBhbmQgdGhlIG51bWJlciBvZiBwbGFuZXMgd2lsbAotCSAgbmV2ZXIgY2hhbmdlIGZvciAxIGZvcm1hdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0wNCAxNjoyMzoxOCAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogTW92ZSB0aGUgZXh0cmFwb2xhdGlvbiBvZiBzdHJpZGUgYXQgdGhlIHJpZ2h0IHBsYWNlCi0JICBOb3cgdGhhdCB3ZSBoYXZlIGEgc3RyaWRlIGFycmF5LCB3ZSBzaG91bGQgZXh0cmFwb2xhdGUgb25seSB3aGVuCi0JICBlZWRlZCAobm9uIG11bHRpLXBsYW5hciBidWZmZXIpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTA0IDE1OjA5OjQ0IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IE1vdmUgYmFjayBhc3NlcnRpb25zIHdoZXJlIHRoZXkgc2hvdWxkIGJlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTItMDQgMTU6MDk6MTAgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogTW92ZSBtcGxhbmUgbG9naWMgaW50byBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHNfaW5mbygpCi0JICBJdCBtYWtlcyB0aGUgZ3N0X3Y0bDJfb2JqZWN0X3NldF9mb3JtYXQoKSBzbGlnaHRseSBzaW1wbGllciBhbmQgd2lsbCBtYWtlIHRoYXQKLQkgIGxvZ2ljIHJldXNhYmxlLiBOb3RlIHRoYXQgZ3N0X3Y0bDJfb2JqZWN0X2hhc19tcGxhbmUoKSB3aWxsIGFsd2F5cyByZXR1cm4gdGhlCi0JICBzYW1lIHZhbHVlIGZvciBvbmUgZGV2aWNlLiBUaGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGNhcHMgYXMgdGhpcwotCSAgaGFzIGFscmVhZHkgYmVlbiBkb25lIGJ5IF9vcGVuLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTAzIDE4OjI3OjQ3IC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IFNwbGl0IF92NGwyZm91cmNjX3RvX3ZpZGVvX2Zvcm1hdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTAyIDE4OjA1OjExIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogUmVxdWVzdCBidWZmZXJzIG9ubHkgb25jZQotCSAgVklESU9DX1JFUUJVRlMgYWxsb2NhdGVzIGJ1ZmZlciwgaXQgaGFzIG5vIHBsYWNlIGluc2lkZSBzZXRfY29uZmlnLiBBbHNvLCBzb21lIGRyaXZlciBkbwotCSAgbm8gYWxsb3cgbXVsdGlwbGUgY2FsbHMgdG8gdGhpcyBpb2N0bC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMi0wMiAxNToyNjo1MCAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0OiBEb24ndCB2YWxpZGF0ZSBkaW1lbnNpb24gZm9yIGVuY29kZWQgZm9ybWF0Ci0JICBXZSBzZXQgdGhlIGRpbWVuc2lvbnMganVzdCBpbiBjYXNlIGJ1dCBkb24ndCB2YWxpZGF0ZSB0aGVtCi0JICBhZnRlcndhcmRzLiBGb3Igc29tZSBjb2RlY3MgdGhlIGRpbWVuc2lvbnMgYXJlICpub3QqIGluIHRoZQotCSAgYml0c3RyZWFtLCBJSVJDIFZDMSBpbiBBU0YgbW9kZSBmb3IgZXhhbXBsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMS0yOCAxNzoxMDoyOSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICB2NGwyb2JqZWN0OiBRdWlya3MgZm9yIGRldiB3aXRob3V0IGluaXRpYWwgZm9ybWF0Ci0JICBNb3N0IE0yTSBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW5pdGlhbGx5IHdoZW4gVklESU9DX0dfRk1UIGlzIGNhbGxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMS0yOCAxNzowOToyNiAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICB2NGwyb2JqZWN0OiBBZGQgZ3N0X3Y0bDJfb2JqZWN0X29wZW5fc2hhcmVkKCkKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0xMS0yOCAxNzowNzowNSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0JICB2NGwyb2JqZWN0OiBJbXBsZW1lbnQgZ3N0X3Y0bDJfZHVwKCkKLQkgIFRoaXMgd2lsbCBkdXBsaWNhdGVkIHRoZSBGRCBmcm9tIGFub3RoZXIgb2JqZWN0IGFuZCBjb3B5IG92ZXIgdGhlIHByb2JlZCByZXN1bHQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTY4Ci0KLTIwMTMtMTEtMjggMTY6NTk6NTkgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMm9iamVjdDogbWFrZSBJT19NT0RFIGVudW0gcHVibGljCi0JICBUaGlzIGlzIHRvIGFsbG93IGFkZGluZyBhIHNlY29uZCBpby1tb2RlIHByb3BlcnR5IG9uIE0yTSBkZXZpY2UgbGlrZSBkZWNvZGVyIHNvCi0JICBpbnB1dCBhbmQgb3V0cHV0IGNhbiBiZSBjb250cm9sbGVkIHNlcGFyYXRseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxMy0wNi0wNCAyMzo0MjoyNCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGJldHRlciBoYW5kbGUgcXVpcmtzIGFjdGl2YXRpb24KLQkgIFRoaXMgd2F5IHdlIGNhbiBhY3RpdmF0ZSBkZWFjdGl2YXRlIHRob3NlIHF1aXJrcyBhbGwgYXQgb25jZSBhdCBvbmUKLQkgIHBsYWNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTA2LTA0IDIzOjM0OjA0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogRml4IGgyNjQgY2FwcwotCSAgVjRMMl9QSVhfRk1UX0gyNjQgaXMgZG9jdW1lbnRhdGVkIGFzIGJ5dGUtc3RyZWFtICh3aXRoIHN0YXJ0IGNvZGUpLiBUaGUgZW5zdXJlIHByb3BlcgotCSAgbmVnb3RpYXRpb24gd2l0aCBlbGVtZW50IGxpa2UgaDI2NHBhcnNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDU2OAotCi0yMDEzLTEyLTA2IDE0OjQ0OjUxIC0wNTAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDJvYmplY3Q6IFNwbGl0IGNhcHMgaW4gZGlmZmVyZW50IGNhdGVnb3JpZXMKLQkgIFRoaXMgaXMgbmVlZCB0byBjb3JyZWN0bHkgZXhwb3NlIGNhcGFiaWxpdGllcyBvbiBzcGVjaWFsaXplZCBkZXZpY2VzCi0JICBsaWtlIGRlY29kZXJzIGFuZCBlbmNvZGVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1NjgKLQotMjAxNC0wMS0xMCAxNDoxNjowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBkb24ndCBsZWFrIFRPQyBjaGFwdGVyIGxpc3QKLQotMjAxNC0wMS0xMCAwODo1MjoxNiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiByZW1vdmUgb2Jzb2xldGUgd3JpdGUtZHVtbXktYW5kLW92ZXJ3cml0ZS1vbi1lb3MgY29kZQotCSAgVGhlIG5lZWQgZm9yIHJld3JpdGluZyBhcHBhcmVudGx5IGlzIG9ic29sZXRlIDAuMTAgbGVmdG92ZXIuCi0JICBXZSBub3cgaGF2ZSBjYXBzIGZvciBzdWJ0aXRsZXMgd2hlbiB3ZSBjcmVhdGUgdGhlIGhlYWRlcnMsCi0JICBzbyB3ZSBhbHdheXMgd3JpdGUgdGhlIGNvcnJlY3QgZGF0YSBpbiB0aGUgZmlyc3QgcGxhY2UuCi0KLTIwMTQtMDEtMDkgMjM6NTU6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkgIHJ0cHJ0eHNlbmQ6IHJlbW92ZSBkdXBsaWNhdGUgYXNzaWdubWVudAotCSAgQ292ZXJpdHkgQ0lEIDExNTE2ODAKLQotMjAxNC0wMS0wOSAxODoyNTowNCArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiB3cml0ZSBzdWJ0aXRsZSBjb2RlYyBJRCBhbmQgZGF0YSBhdCBzdGFydCB3aGVuIGtub3duCi0JICBUaGlzIGF2b2lkcyBpc3N1ZXMgd2l0aCB3cml0aW5nIGR1bW15IGRhdGEgZmlyc3QsIHRoZW4gaGF2aW5nCi0JICB0byBjb21lIGJhY2sgYW5kIHdyaXRlIGNvcnJlY3QgZGF0YSBsYXRlci4gRG9pbmcgc28gcHJldmVudHMKLQkgIHRoZSBtdXhlZCBzdHJlYW0gZnJvbSBiZWluZyBhY3R1YWxseSBzdHJlYW1hYmxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjEzNAotCi0yMDE0LTAxLTA5IDE3OjMyOjE1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEluY2x1ZGUgQXZhaWxhYmlsaXR5TWFjcm9zLmggZm9yIG9zeHZpZGVvIGNoZWNrCi0JICBPdGhlcndpc2UgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgbWlnaHQgbm90IGJlIGRlZmluZWQKLQotMjAxNC0wMS0wOSAxMTo1NjozMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkgIHF0bXV4OiByZXNwZWN0IHRoZSBIRExSIGJveCBzdHJpbmcgZm9ybWF0IGZvciBtb3YgYW5kIGlzb21lZGlhCi0JICBNb3Ygc3BlYyBzYXlzIGl0IHVzZXMgYSBwYXNjYWwgc3R5bGUgc3RyaW5nLCB3aGlsZSBpc29tZWRpYSB1c2VzCi0JICBhIG51bGwgdGVybWluYXRlZCBvbmUuIFN0b3JlIHRoZSBjdXJyZW50IGF0b21zIGZsYXZvciBpbnRvIHRoZSBIRExSCi0JICB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0IG91dHB1dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU5ODIKLQotMjAxNC0wMS0wOCAxMToyODowNCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIFJldmVydCAibWF0cm9za2FtdXg6IFVzZSB0aGUgcnVubmluZyB0aW1lIGZvciBjb250YWluZXIgdGltZXN0YW1wcywgbm90IGJ1ZmZlciB0aW1lc3RhbXBzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiM2FhODc1NWZlMDc2MzlmMjJlNDEwNGY0OTMyZDc2OWQ2YzkwNzVhLgotCSAgV2UgYXJlIGFscmVhZHkgdXNpbmcgdGhlIHJ1bm5pbmctdGltZSBiZWNhdXNlIHRoZXkgd2VyZSBwbGFjZWQgb24gdGhlCi0JICBidWZmZXJzIHdpdGggZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZSgpLiBBcmd1YWJseSBpdCB3b3VsZCBiZQotCSAgYmV0dGVyIHRvIG5vdCBtb2RpZnkgdGhlIGluY29tbWluZyBidWZmZXJzIGJ1dCBjb2xsZWN0cGFkcyBzZWVtcyB0byB3YW50Ci0JICB0byB1c2UgYWJzb2x1dGUgdGltZXN0YW1wcyBmcm9tIHRoZSBidWZmZXJzIGZvciBmaW5kaW5nIHRoZSBiZXN0IGJ1ZmZlcgotCSAgKHRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCBhIGN1c3RvbSBjb21wYXJlIGZ1bmN0aW9uLi4pLgotCi0yMDE0LTAxLTA4IDEwOjQxOjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEZpeCBBQ19DT01QSUxFX0lGRUxTRSB1c2FnZQotCi0yMDE0LTAxLTA4IDEwOjMxOjE4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBvc3h2aWRlb3Npbms6IEltcHJvdmUgY29uZmlndXJlIGNoZWNrIGZvciBPU1ggPj0gMTAuNgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTI0NQotCi0yMDE0LTAxLTA3IDEyOjEzOjUxIC0wODAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXXDqSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHJlbW92ZSB1bnVzZWQgbGlzdCBvZiBkZWNvZGVycwotCSAgcmVtb3ZlIGxpc3Qgb2YgZGVjb2RlcnMsIHdoaWNoIGFyZSBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIGxpc3Qgb2YgZWxlbWVudHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5OTM4Ci0KLTIwMTQtMDEtMDggMDk6NDY6NTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBFcnJvciBvdXQgaWYgQURQQ00gY2FwcyBkb24ndCBjb250YWluIHRoZSBsYXlvdXQgZmllbGQKLQotMjAxNC0wMS0wMyAxNToyNToyMyArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBBZGQgc3VwcG9ydCBmb3IgZzcyNiBBRFBDTQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMDk5NQotCi0yMDE0LTAxLTA3IDE1OjA0OjAyICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogdXNlIG5ldyBtZXRob2QgdG8gZ2V0IG1lZGlhLXR5cGUKLQkgIFVzZSB0aGUgbmV3IG1ldGhvZCB0byBnZXQgdGhlIG1lZGlhIHR5cGUgb2YgYSB0cmFuc3BvcnQuCi0KLTIwMTQtMDEtMDYgMjE6MTI6MTcgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogc3BsaXQgdGhlIHRlc3QKLQkgIFRoaXMgd2F5IG9uZSBmYWlsdXJlIHdvbid0IHNoYWRvdyB0aGUgb3RoZXIgdGVzdCBhbmQgYWxzbyBpZiBvbmUgZmFpbHMgd2UgZ2V0Ci0JICBiZXR0ZXIgZGlzZ25vc3RpY3MgdGhyb3VnaCB0aGUgdGVzdC1uYW1lLgotCi0yMDE0LTAxLTA2IDE0OjU0OjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogQWRkIEhFVkMgLyBoMjY1IHN1cHBvcnQKLQotMjAxNC0wMS0wNiAxNDo1NDozOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBBZGQgSEVWQyAvIGgyNjUgc3VwcG9ydAotCi0yMDE0LTAxLTA2IDEzOjM2OjM4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiByZW1vdmUgaWZkZWYnZWQgY29kZQotCSAgV2UgZG8gaGF2ZSBhZHRsIGFuZCBjdWUgcGFyc2UgYXMgcGFydCBvZiB0b2MgaGFuZGxpbmcgYWxyZWRheS4gVGhlIGZtdCBjb2RlIGlzIGEgbGVmdCBvdmVyIGZyb20gPDAuMTAgdGltZXMuCi0KLTIwMTQtMDEtMDYgMTM6MzI6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgYXZpZGVtdXgsIHdhdmVwYXJzZTogbW9yZSBsb2dnaW5nIGZvciB1bmhhbmRsZWQgY2h1bmtzCi0JICBBbHdheXMgcHJpbnQgYSB3YXJuaW5nIHdpdGggdGhlIHRhZyBhbmQgaWYgcG9zc2libGUgZG8gYSBtZW1kdW1wLgotCi0yMDE0LTAxLTA1IDIyOjQ3OjQyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZXhwb3NlICdzdHJuJyAtIHN0cmVhbSBuYW1lIC0gYXMgdGl0bGUgdGFnCi0KLTIwMTQtMDEtMDUgMjI6NDE6MjQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBwYXJzZSBmdWppIHN0cmQKLQkgIFdlIGNhbiBnZXQgbWFrZXIsIG1vZGVsIGFuZCBjYXB0dXJlIGRhdGUgZnJvbSB0aGlzIGNodW5rLgotCSAgRml4ZXMgIzYzNjE0MwotCi0yMDE0LTAxLTA1IDIxOjQ2OjMzICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogLi4uIGFuZCB1c2UgdGhlIGxvY2FsIGFwaSBib3RoIHRpbWVzCi0KLTIwMTQtMDEtMDUgMjE6Mzg6MTQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBjb3B5IHRoZSByaWZmIGFwaSBmb3IgbmNkdCBpbnRvIHRoZSBlbGVtZW50Ci0JICBUaGlzIGNodW5rIGlzIGF2aSBzcGVjaWZpYywgbm8gbmVlZCB0byBleHBvc2UgdGhpcyBhcyBwdWJsaWMgYXBpLgotCi0yMDE0LTAxLTA1IDEwOjI4OjIxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogQWRkIG1pc3Npbmcgc2VtaWNvbG9uIGZyb20gbGFzdCBjb21taXQKLQotMjAxNC0wMS0wNSAxMDoyMjozNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IFVzZSB0aGUgcnVubmluZyB0aW1lIGZvciBjb250YWluZXIgdGltZXN0YW1wcywgbm90IGJ1ZmZlciB0aW1lc3RhbXBzCi0JICBCdWZmZXIgdGltZXN0YW1wcyBoYXZlIG5vIHJlYWwgbWVhbmluZyBoZXJlLCBhbmQgZm9yIHNlbGVjdGluZyB0aGUgbmV4dAotCSAgYnVmZmVyIHdlIGFscmVhZHkgdXNlIHRoZSBydW5uaW5nIHRpbWUgYW55d2F5LgotCi0yMDE0LTAxLTA0IDIxOjM0OjM4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IHVzZSBuZXcgcmlmZiBhcGkgdG8gZXh0cmFjdCBuaWtvbiBtZXRhZGF0YQotCSAgRml4ZXMgIzYzNjE0MwotCi0yMDEzLTExLTAxIDE2OjQxOjQzICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSAgcnRwcnR4c2VuZC9ydHBydHhyZWNlaXZlOiBnZW5lcmF0ZSBndGsgZG9jCi0KLTIwMTMtMTItMDIgMTE6MjY6MDkgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdC9jaGVjazogVmVyaWZ5IHJ0cHJ0eHNlbmQ6OnNzcmMtbWFwIHByb3BlcnR5IHdvcmtzIGFzIGV4cGVjdGVkCi0KLTIwMTMtMTEtMjkgMTk6MzU6NDQgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGF1eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LXJ0cGF1eC5jOgotCSAgcnRwcnR4cmVjZWl2ZTogbW9kaWZ5IHRvIHVzZSBhIHBheWxvYWQtdHlwZSBtYXAgbGlrZSBydHBydHhzZW5kCi0KLTIwMTMtMTEtMjkgMTk6NTg6MjYgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkgIHJ0cHJ0eHNlbmQ6IGRvIG5vdCBrZWVwIGhpc3Rvcnkgb2YgcGFja2V0cyB3aXRoIGFuIHVua25vd24gcGF5bG9hZCB0eXBlCi0JICBUaGlzIGFsbG93cyB0byBkaXNhYmxlIHJldHJhbnNtaXNzaW9uIHBlciBwYXlsb2FkIHR5cGUgYnkgbm90IHB1dHRpbmcKLQkgIGEgY2VydGFpbiBwYXlsb2FkIHR5cGUgaW4gdGhlIG1hcC4KLQotMjAxNC0wMS0wMiAxNToxODo1MiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGF1eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwY29sbGlzaW9uLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBydHguYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItcnRwYXV4LmM6Ci0JICBydHBydHhzZW5kOiBBbGxvdyBTU1JDLW11bHRpcGxleGluZyBhbmQgbXVsdGlwbGUgcGF5bG9hZCB0eXBlcyBpbiB0aGUgb3JpZ2luYWwgc3RyZWFtCi0JICBDb25mbGljdHM6Ci0JICB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXJ0cGF1eC5jCi0KLTIwMTMtMTEtMjUgMTU6MDA6NDUgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkgIHJ0cHJ0eHNlbmQ6IEFkZCBhbiBydHgtc3NyYyBwcm9wZXJ0eSB0byBhbGxvdyBleHRlcm5hbCBjb250cm9sIG9mIHRoZSBzc3JjCi0JICBUaGlzIGlzIHVzZWZ1bCB3aGVuIG9uZSBuZWVkcyB0byBrbm93IHRoZSBTU1JDIGJlZm9yZWhhbmRzLCBzbyB0aGF0IGl0IGNhbgotCSAgYmUgdXNlZCBmb3IgU1JUUCBmb3IgZXhhbXBsZS4KLQotMjAxMy0xMS0xMyAxNToxMTozNSAtMDUwMCAgVG9ycmllIEZpc2NoZXIgPHRvcnJpZS5maXNjaGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LXJ0cGF1eC5jOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1ydHBhdXguYzoKLQkgIGV4YW1wbGVzOiBydHA6IEFkZCBlbmQtdG8tZW5kIHJ0cGJpbiBleGFtcGxlIHdpdGggUlRYIGVsZW1lbnRzCi0JICBUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgcnRwYmluIHdpdGggcmV0cmFuc21pc3Npb24gKHJ0eCkKLQkgIGVsZW1lbnRzIHNldCBpbiB0aGUgcGxhY2Ugb2YgcnRwYmluJ3MgImF1eCIgZWxlbWVudHMgaW4gb3JkZXIgdG8KLQkgIGVuYWJsZSBSVFAgcmV0cmFuc21pc3Npb24gYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiBSRkM0NTg4LgotCi0yMDEzLTExLTA1IDE3OjM1OjAxICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9kZXNpZ24vTWFrZWZpbGUuYW06Ci0JKiBkb2NzL2Rlc2lnbi9kZXNpZ24tcnRwYXV4aWxpYXJ5LnR4dDoKLQkgIGRvYzogYWRkIGRlc2lnbi1ydHBhdXhpbGlhcnkudHh0IHRvIGRlc2NyaWJlIGhvdyBydHBiaW4gZGVhbHMgd2l0aCBhdXhpbGlhcnkgZWxlbWVudHMKLQotMjAxNC0wMS0wMiAxNDo0ODo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IGFsc28gcHVzaCBFT1MgZXZlbnQgdG8gUlRDUCBzcmNwYWQKLQotMjAxNC0wMS0wMiAxNDo0NjoxMSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHNlc3Npb246IHBsYWNlIFNTUkMgaW4gUmV0cmFuc21pc3Npb24gZXZlbnQKLQotMjAxMy0xMS0wMSAxNjo1NzoxNSArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGF1eC5jOgotCSAgdGVzdHMvY2hlY2s6IGFkZCBydHBhdXg6OnRlc3Rfc2ltcGxlX3J0cGJpbl9hdXgKLQkgIEl0IHNob3dzIGhvdyB0byB1c2UgInNldC1hdXgtcmVjZWl2ZSIgYW5kICJzZXQtYXV4LXNlbmQiCi0JICBwcm9wZXJ0aWVzIG9mIHJ0cGJpbiB0byBzZXQgcnRwcnR4c2VuZCBhbmQgcnRwcnR4cmVjZWl2ZQotCSAgQnVpbGQgMiBwaXBlbGluZXMsIG9uZSBmb3IgcnRwYmluIGFzIGEgc2VuZGVyIGFuZCBvbmUgZm9yCi0JICBydG9iaW4gYXMgYSByZWNlaXZlLiBUaGVuIHRyYW5zbWl0IGFuIGF1ZGlvIHN0cmVhbS4KLQkgIEl0IGFsc28gZHJvcHMgc29tZSBwYWNrZXRzIHRvIGFjdGl2YXRlIHJlc3RyYW5zbWlzc2lvbiBhbmQKLQkgIGNoZWNrIHRoZXkgYXJlIGFjdHVhbGx5IHJldHJhbnNtaXRlZC4KLQotMjAxMy0xMS0wMSAxNzowOTo0MiArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jOgotCSAgdGVzdHMvY2hlY2s6IGFkZCBydHBjb2xsaXNpb246OnRlc3RfcnR4X3NzcmNfY29sbGlzaW9uIHVuaXQgdGVzdAotCSAgY2hlY2sgdGhhdCBydHhydHBzZW5kIGNoYW5nZXMgaXRzIHJldHJhbnNtaXNzaW9uIHNzcmMgd2hlbgotCSAgY29sbGlzaW9uIGhhcHBlbnMKLQotMjAxMy0xMS0wNiAxMjozNDoxMyArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICB0ZXN0cy9jaGVjazogYWRkIHJ0cHJ0eDo6dGVzdF9ydHhyZWNlaXZlX2RhdGFfcmVjb25zdHJ1Y3Rpb24KLQkgIFRoaXMgdW5pdCB0ZXN0IHZlcmlmaWVzIHRoYXQgcmV0cmFuc21pdHRlZCBydHAgcGFja2V0cyBjb21pbmcgb3V0Ci0JICBvZiBydHBydHhyZWNlaXZlIGFyZSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwgb25lcy4KLQotMjAxMy0xMS0wNSAwOTozMzo1MSArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4c2VuZC5jOgotCSAgcnRwcnR4c2VuZDogdXNlIGEgcmVhbGlzdGljIGxpbWl0IGZvciB0aGUgdmFsdWUgb2YgbWF4LXNpemUtcGFja2V0cwotCSAgR19NQVhJTlQxNiBpcyBjaG9zZW4gYmVjYXVzZSBpZiB0aGUgcXVldWUgY29udGFpbnMgbW9yZSB0aGFuCi0JICBHX01BWElOVDE2IHBhY2tldHMsIHNlcW51bSBjb21wYXJpc29uIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuCi0KLTIwMTMtMTEtMDQgMjA6MDU6MDMgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaDoKLQkgIHJ0cHJ0eHNlbmQ6IHVzZSBhIEdTZXF1ZW5jZSB0byBpbXBsZW1lbnQgdGhlIGJ1ZmZlciBxdWV1ZQotCSAgVGhpcyBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHNlYXJjaGluZyB0aGUgcXVldWUgdG8gZmluZCB0aGUKLQkgIGJ1ZmZlciB3aXRoIHRoZSByZXF1ZXN0ZWQgc2VxbnVtIGlzIGRvbmUgd2l0aCBiaW5hcnkgc2VhcmNoLgotCi0yMDEzLTExLTA0IDE4OjM4OjI0ICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBydHguYzoKLQkgIHJ0cHJ0eHNlbmQ6IHJldHJhbnNtaXQgcGFja2V0cyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgcnR4IHJlcXVlc3RzCi0KLTIwMTMtMTEtMDIgMTk6NTY6NDQgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdHMvY2hlY2s6IEFkZCB1bml0IHRlc3QgZm9yIHJ0eHNlbmQncyBtYXhfc2l6ZV90aW1lIHByb3BlcnR5Ci0KLTIwMTMtMTAtMjkgMTg6Mjc6MDAgKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaDoKLQkgIHJ0cHJ0eHNlbmQ6IEhhbmRsZSB0aGUgbWF4X3NpemVfdGltZSBwcm9wZXJ0eQotCSAgVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiBidWZmZXJzCi0JICB0byBrZWVwIGluIHRoZSByZXRyYW5zbWlzc2lvbiBxdWV1ZSBleHByZXNzZWQgYXMgdGltZSAobXMpCi0JICBpbnN0ZWFkIG9mIGJ1ZmZlciBjb3VudCAod2hpY2ggaXMgdGhlIG1heF9zaXplX2J1ZmZlcnMgcHJvcGVydHkpLgotCi0yMDEzLTExLTAyIDE1OjIxOjA4ICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JICBydHBydHhzZW5kOiBrZWVwIGltcG9ydGFudCBidWZmZXIgaW5mb3JtYXRpb24gaW4gYSBwcml2YXRlIHN0cnVjdHVyZQotCSAgVGhpcyBpcyB0byBhdm9pZCBtYXBwaW5nIGEgYnVmZmVyIGV2ZXJ5IHRpbWUgd2UgbmVlZCB0byByZWFkIGEgc2VxbnVtCi0JICBvciBhIHRpbWVzdGFtcC4KLQotMjAxMy0xMS0wMSAxMTo1ODo0NyArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICB0ZXN0cy9jaGVjazogQWRkIHJ0cHJ0eDo6dGVzdF9ydHhzZW5kZXJfcGFja2V0X3JldGVudGlvbgotCSAgVGhpcyB1bml0IHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUgcnR4c2VuZCBlbGVtZW50IGNvcnJlY3RseSBtYWludGFpbnMKLQkgIGEgYnVmZmVyIG9mIGFscmVhZHkgdHJhbnNtaXR0ZWQgcnRwIHBhY2tldHMgYW5kIHRoYXQgaXQgY2FuCi0JICByZS10cmFuc21pdCBhbGwgb2YgdGhlbSBjb3JyZWN0bHkgb24gZGVtYW5kLiBJdCBhbHNvIHZlcmlmaWVzCi0JICB0aGF0IHRoZSBsaW1pdCBvZiB0aGlzIGJ1ZmZlciAobWF4LXNpemUtcGFja2V0cyBwcm9wZXJ0eSkgaXMgcmVzcGVjdGVkLgotCi0yMDEzLTExLTAxIDE2OjIyOjEzICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwcnR4LmM6Ci0JICB0ZXN0cy9jaGVjazogYWRkIHJ0cHJ0eDo6dGVzdF9kcm9wX211bHRpcGxlX3NlbmRlciB1bml0IHRlc3QKLQkgIFNldmVyYWwgc2VuZGVycyAvIG9uZSByZWNlaXZlcgotCSAgU2ltaWxhciB0aGFuIHRlc3RfZHJvcF9vbmVfc2VuZGVyIGJ1dCB3aXRoIG11bHRpcGxlIHNlbmRlcnMKLQkgIG1peGVkIHRocm91Z2ggdGhlIGZ1bm5lbCBlbGVtZW50LgotCSAgSXQgZHJvcHMgc29tZSBwYWNrZXRzIGFuZCBjaGVja3MgdGhhdCB0aGV5IGFyZSByZXRyYW5zbWl0ZWQKLQkgIGNvcnJlY3RseS4KLQotMjAxMy0xMS0wMSAxNjoyMTowMCArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdHMvY2hlY2s6IGFkZCBydHBydHg6OnRlc3RfZHJvcF9vbmVfc2VuZGVyIHVuaXQgdGVzdAotCSAgVGVzdCBmb3Igb25lIHNlbmRlciAvIG9uZSByZWNlaXZlcgotCSAgQnVpbGQgdGhlIHBpcGVsaW5lCi0JICB2aWRlb3Rlc3RzcmMgISBydHB2cmF3cGF5ICEgcnRwcnR4c2VuZCAhIHJ0cHJ0eHJlY2VpdmUgISBmYWtlc2luawotCSAgYW5kIGRyb3Agc29tZSBidWZmZXJzIGJldHdlZW4gcnRwcnR4c2VuZCBhbmQgcnRwcnR4cmVjZWl2ZQotCSAgVGhlbiBpdCBjaGVja3MgdGhhdCBldmVyeSBkcm9wcGVkIHBhY2tldCBoYXMgYmVlbiByZS1zZW50LgotCSAgSXQgYWxzbyBjaGVja3MgdGhhdCBub3QgdG9vIG11Y2ggcmVxdWVzdHMgaGFzIGJlZW4gc2VudC4KLQotMjAxMy0xMS0wMSAxNjoxNzo1MSArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jOgotCSAgdGVzdHMvY2hlY2s6IGFkZCBydHBydHg6OnRlc3RfcHVzaF9mb3J3YXJkX3NlcQotCSAgYWRkIHNpbXBsZSB1bml0IHRlc3QgdGhhdCBtYW51YWxseSBwdXNoIGJ1ZmZlcnMKLQkgIGluIHJ0cHJ0eHNlbmQgY29ubmVjdGVkIHRvIHJ0cHJ0eHJlY2VpdmUuCi0JICBEcm9wcyBzb21lIGJ1ZmZlcnMgYW5kIG1ha2Ugc3VyZSB0aGV5IGFyZSByZXRyYW5zbWlzdGVkLgotCi0yMDEzLTExLTAxIDE1OjUyOjAzICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtYW5hZ2VyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmg6Ci0JICBydHBtYW5hZ2VyOiBhZGQgbmV3IHJ0cHJ0eHNlbmQgLyBydHBydHhyZWNlaXZlIGVsZW1lbnRzCi0JICBUaGUgcHVycG9zZSBvZiB0aGUgc2VuZGVyIFJUWCBvYmplY3QgaXMgdG8ga2VlcCBhIGhpc3RvcnkKLQkgIG9mIFJUUCBwYWNrZXRzIHVwIHRvIGEgY29uZmlndXJhYmxlIGxpbWl0IChpbiB0aW1lKS4gSXQgd2lsbAotCSAgbGlzdGVuIGZvciBjdXN0b20gcmV0cmFuc21pc3Npb24gZXZlbnRzIGZyb20gZG93bnN0cmVhbS4gV2hlbgotCSAgaXQgcmVjZWl2ZXMgYSByZXF1ZXN0IGZvciByZXRyYW5zbWlzc2lvbiwgaXQgd2lsbCBsb29rIHVwIHRoZQotCSAgcmVxdWVzdGVkIHNlcW51bSBpbiBpdHMgbGlzdCBvZiBzdG9yZWQgcGFja2V0cy4gSWYgdGhlIHBhY2tldAotCSAgaXMgYXZhaWxhYmxlLCBpdCB3aWxsIGNyZWF0ZSBhIFJUWCBwYWNrZXQgYWNjb3JkaW5nIHRvIFJGQyA0NTg4Ci0JICBhbmQgc2VuZCB0aGlzIGFzIGFuIGF1eGlsaWFyeSBzdHJlYW0uCi0JICBUaGUgcmVjZWl2ZXIgd2lsbCBsaXN0ZW4gdG8gdGhlIGN1c3RvbSByZXRyYW5zbWlzc2lvbiBldmVudHMKLQkgIGZyb20gdGhlIGRvd25zdHJlYW0gaml0dGVyYnVmZmVyIGFuZCB3aWxsIHJlbWVtYmVyIHRoZSBTU1JDMQotCSAgb2YgdGhlIHN0cmVhbSBhbmQgc2VxbnVtIHRoYXQgd2FzIHJlcXVlc3RlZC4gV2hlbiBpdCBzZWVzIGEKLQkgIHBhY2tldCB3aXRoIG9uZSBvZiB0aGUgc3RvcmVkIHNlcW51bSwgaXQgYXNzb2NpYXRlcyB0aGUgU1NSQzIKLQkgIG9mIHRoZSBzdHJlYW0gd2l0aCB0aGUgU1NSQzEgb2YgdGhlIG1hc3RlciBzdHJlYW0uIEZyb20gdGhlbgotCSAgb24gaXQga25vd3MgdGhhdCBTU1JDMiBpcyB0aGUgcmV0cmFuc21pc3Npb24gc3RyZWFtIG9mIFNTUkMxLgotCSAgVGhpcyBhbGdvcml0aG0gaXMgc3RhdGVkIGluIFJGQyA0NTg4LiBGb3IgdGhpcyBhbGdvcml0aG0gdG8KLQkgIHdvcmssIFJGQzQ1ODggYWxzbyBzdGF0ZXMgdGhhdCBubyB0d28gcGVuZGluZyByZXRyYW5zbWlzc2lvbgotCSAgcmVxdWVzdHMgY2FuIGV4aXN0IGZvciB0aGUgc2FtZSBzZXFudW0gYW5kIGRpZmZlcmVudCBTU1JDcyBvcgotCSAgZWxzZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFzc29jaWF0ZSB0aGUgcmV0cmFuc21pc3Npb24gd2l0aAotCSAgdGhlIG9yaWdpbmFsIHJlcXVlc3RlciBTU1JDLgotCSAgV2hlbiB0aGUgUlRYIHJlY2VpdmVyIGhhcyBhc3NvY2lhdGVkIHRoZSByZXRyYW5zbWlzc2lvbiBwYWNrZXRzLAotCSAgaXQgY2FuIGRlcGF5bG9hZCBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBzb3VyY2UgcGFkIG9mIHRoZSBlbGVtZW50LgotCSAgUlRYIGlzIFNTUkMtbXVsdGlwbGV4ZWQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEwODQKLQotMjAxMy0xMS0wNSAxNjozNjo0NiArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSogZG9jcy9kZXNpZ24vZGVzaWduLXJ0cHJldHJhbnNtaXNzaW9uLnR4dDoKLQkgIGRvYzogYWRkIGRlc2lnbiBmb3IgcnRwIHJldHJhbnNtaXNzaW9uCi0JICBEZXNjcmliZSBob3cgcnRwcnR4c2VuZCBhbmQgcnRwcnR4cmVjZWl2ZSBnZW5lcmFsbHkgd29yawotCSAgYnV0IGFsc28gaG93IHRoZSBhc3NvY2lhdGlvbiBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQuCi0KLTIwMTQtMDEtMDIgMjA6MjM6MDUgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IHVzZSBzdGF0dXMgY29kZSBtYWNybyBpbnN0ZWFkIG9mIDQwNwotCSAgUmVzdCBvZiB0aGUgY29kZSBpcyB1c2luZyB0aGUgX1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVECi0JICBtYWNybyB0b28uIEVhc2llciB0byB1bmRlcnN0YW5kIGlmIHlvdSBkb24ndCByZWNhbGwgSFRUUAotCSAgZXJyb3IgY29kZXMgYnkgaGVhcnQuCi0KLTIwMTMtMTItMzEgMjE6MzE6NDMgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuaDoKLQkgIHNob3V0MnNlbmQ6IGNoYW5nZSBhdWRpb19mb3JtYXQgZmllbGQgdG8gZm9ybWF0Ci0JICBUaGlzIGVsZW1lbnQgYW5kIHRoZSB1bmRlcmx5aW5nIGxpYnNob3V0MiBsaWJyYXJ5Ci0JICBjYW4gaGFuZGxlIHZpZGVvIG1lZGlhIGZpbGVzIHRvby4gVGhlIGNvZGUgYWxyZWFkeQotCSAgaGFuZGxlcyB2aWRlby93ZWJtIHNvIHRoZSBuYW1lIGdldHMgY29uZnVzaW5nLiBBbHNvCi0JICBhZGQgYW5kIHVzZSBERUZBVUxUX0ZPUk1BVCBtYWNybyBJbnN0ZWFkIG9mIGhhcmR3aXJpbmcKLQkgIFNIT1VUX0ZPUk1BVF9WT1JCSVMgYXQgaW5pdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTM0MgotCi0yMDEzLTEyLTMxIDIwOjA5OjI5IC0wMzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9Ac2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzoKLQkgIHNob3V0MnNlbmQ6IGNsYXJpZnkgbWVhbmluZyBvZiB0aGUgVVJMIHByb3AKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEzNDIKLQotMjAxMy0xMi0yNyAxMjoyNzozMiAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSAgc2hvdXQyc2VuZDogZG9jcywgYWRkIGEgc2FtcGxlIHBpcGVsaW5lCi0JICBBbmQgZmluaXNoIGFkZGluZyBzaG91dDJzZW5kIHRvIHRoZSBkb2NzIHdoaWxlIGF0IGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMzQyCi0KLTIwMTMtMTItMzEgMTU6MDA6MjIgLTAzMDAgIFJleW5hbGRvIEguIFZlcmRlam8gUGlub2NoZXQgPHIudmVyZGVqb0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JICBnZGtwaXhidWZvdmVybGF5OiByZW1vdmUgc3B1cmlvdXMgQHNlZV9hbHNvCi0KLTIwMTMtMTItMDYgMTc6MDg6NTQgKzAwMDAgIE1hdHRoaWV1IEJvdXJvbiA8bWF0dGhpZXUuYm91cm9uQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHN1cHBvcnQgYW55IHZpZGVvIGZvcm1hdHMgYW5kIGFueSBjYXBzIGZlYXR1cmVzIGlmIGRlaW50ZXJsYWNlIG1vZGUgYWxsb3dzIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5NjM2Ci0KLTIwMTMtMTItMzEgMTM6MzE6NTIgKzAxMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0Bob3RtYWlsLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogSGFuZGxlIHY0bDJfaW9jdGwoKSBlcnJvcnMgZXZlbiBpbiBlcnJvciBoYW5kbGluZwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTI2OAotCi0yMDE0LTAxLTAxIDEyOjExOjQzIC0wODAwICBKZXJlbXkgSHVkZGxlc3RvbiBTZXF1b2lhIDxqZXJlbXlodUBhcHBsZS5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvOiB1bmlmZGVmIC1EUlVOX05TX0FQUF9USFJFQUQKLQotMjAxNC0wMS0wMSAxMjoxMDowMSAtMDgwMCAgSmVyZW15IEh1ZGRsZXN0b24gU2VxdW9pYSA8amVyZW15aHVAYXBwbGUuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkgIG9zeHZpZGVvOiBBc3N1bWUgU0RLIGFuZCBkZXBsb3ltZW50IHRhcmdldCBhcmUgYXQgbGVhc3QgU25vdyBMZW9wYXJkCi0KLTIwMTQtMDEtMDEgMTI6MjM6NTAgLTA4MDAgIEplcmVteSBIdWRkbGVzdG9uIFNlcXVvaWEgPGplcmVteWh1QGFwcGxlLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBEaXNhYmxlIG9zeHZpZGVvIG9uIExlb3BhcmQgYW5kIGVhcmxpZXIKLQkgIFRoaXMgYWxzbyBtb3ZlcyB0aGUgIm90aGVyIHBsYXRmb3JtcyIgY2hlY2sgaW4gT1MgWCB2aWRlbyB0byBiZWZvcmUgdGhlCi0JICB2YXJpYWJsZSBpcyByZWFkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxMjQ1Ci0KLTIwMTMtMTItMzEgMTQ6NTc6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkgIHRlc3RzOiBhZGQgQVVYIHJlY2VpdmVyIHVuaXQgdGVzdAotCi0yMDEzLTEyLTMxIDEzOjIwOjAxICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICB0ZXN0czogaW1wcm92ZSBydHBiaW4gdGVzdAotCi0yMDEzLTEyLTMxIDEzOjE2OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGFkZCBzb21lIGRvY3MgYWJvdXQgQVVYIGVsZW1lbnRzCi0KLTIwMTMtMTItMzEgMTM6MDE6MjIgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkgIHRlc3RzOiBhZGQgQVVYIHNlbmRlciB1bml0IHRlc3QKLQotMjAxMy0xMi0zMSAxMjozMToyNSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IGFkZCBzdXBwb3J0IGZvciBBVVggc2VuZGVyIGFuZCByZWNlaXZlcgotCSAgQVVYIGVsZW1lbnRzIGFyZSBlbGVtZW50cyB0aGF0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBydHBiaW4KLQkgIHBpcGVsaW5lIHJpZ2h0IGJlZm9yZSBvciBhZnRlciAxIG9yIG1vcmUgc2Vzc2lvbiBlbGVtZW50cy4KLQkgIFRoZSBBVVggZWxlbWVudHMgYXJlIGVzc2VudGlhbCBmb3IgaW1wbGVtZW50aW5nIGZ1bmN0aW9uYWxpdHkgc3VjaAotCSAgYXMgZXJyb3IgY29ycmVjdGlvbiAoRkVDKSBhbmQgcmV0cmFuc21pc3Npb24gKFJUWCkuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMDg3Ci0KLTIwMTMtMTItMzEgMTI6MjI6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkgIHRlc3RzOiBhZGQgZGVjb2RlciB0ZXN0Ci0KLTIwMTMtMTItMzAgMTc6MzY6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogbWFrZSByZXF1ZXN0X2VsZW1lbnQgbWV0aG9kIGludGVybmFsbHkKLQkgIFdlIGNhbiB1c2UgdGhlIHNhbWUgbWV0aG9kIHRvIGNyZWF0ZSBlbmNvZGVyIGFuZCBkZWNvZGVyIGVsZW1lbnRzLCB0aGV5Ci0JICBhcmUganVzdCBpbnRlcm5hbCBlbGVtZW50cyB0aGF0IHdlIGNyZWF0ZS4KLQotMjAxMy0xMi0zMSAxMDoyNToyOCArMDEwMCAgU3TDqXBoYW5lIENlcnZlYXUgPHNjZXJ2ZWF1QGdtYWlsLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogU2tpcCBpZDMgdGFnCi0JICBTa2lwIGlkMyB0YWcgZHVyaW5nIHdhdiBwYXJzZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEyNDEKLQotMjAxMy0xMi0zMSAxMDoxMDowNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JICBvc3g6IE1ha2UgT1NYIHZlcnNpb24gY2hlY2tzIG1vcmUgY29uc2lzdGVudAotCSAgQW5kIGVzcGVjaWFsbHkgYWxzbyBjb25zaWRlciB1cGRhdGUgdmVyc2lvbnMsIGUuZy4gMTAuNSB3aXRoIHVwZGF0ZXMKLQkgIHdpbGwgYmUgMTA1MSBvciBzaW1pbGFyIGFuZCB0aHVzIGJpZ2dlciB0aGFuIE1BQ19PU19YX1ZFUlNJT05fMTBfNSBidXQKLQkgIHN0aWxsIHdvbid0IGhhdmUgdGhlIEFQSSB3ZSB3YW50IHRvIHVzZS4KLQotMjAxMy0xMi0zMSAxMDowNzoyMiArMDEwMCAgSmVyZW15IEh1ZGRsZXN0b24gPGplcmVteWh1QGZyZWVkZXNrdG9wLm9yZz4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgb3N4dmlkZW9zaW5rOiBGaXggYnVpbGQgb24gdXBkYXRlZCBPUyBYIExlb3BhcmQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEyNDUKLQotMjAxMy0xMi0zMCAxNzoyMzoyMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogQWRkIG1pc3NpbmcgYnJlYWsKLQkgIEkgZ3Vlc3Mgbm8tb25lIG5vdGljZWQgd2Ugbm8gbG9uZ2VyIGNvdWxkIG11eCBXTVYzIC4uLgotCSAgQ09WRVJJVFkgQ0lEIDExMzk3NTkKLQotMjAxMy0xMi0zMCAxNzoyMDozNyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBydHB2cmF3cGF5OiBBZGQgbWlzc2luZyBicmVhawotCSAgQ09WRVJJVFkgQ0lEIDExMzk3NjIKLQotMjAxMy0xMi0zMCAxNzowMDo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGludGVybmFsLXNzcmMgaXMgbm8gbG9uZ2VyIGRlcHJlY2F0ZWQKLQotMjAxMy0xMi0zMCAxNjo1OToyMCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBhZGQgU2luY2UgdGFncwotCi0yMDEzLTEyLTMwIDE2OjUyOjI4ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIHJ0cGJpbjogYWRkIHNpZ25hbCBmb3IgbmV3IGppdHRlcmJ1ZmZlcgotCSAgRW1pdCBhIHNpZ25hbCB3aGVuIGEgbmV3IGppdHRlcmJ1ZmZlciBpcyBjcmVhdGVkIHNvIHRoYXQgdGhlIGFwcCBjYW4KLQkgIGhhdmUgYSBjaGFuY2UgdG8gY29uZmlndXJlIGl0LgotCi0yMDEzLTEyLTMwIDE2OjI4OjU3ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkgIHJ0cGJpbjogaGFuZGxlIG11bHRpcGxlIGVuY29kZXIgaW5zdGFuY2VzCi0JICBLZWVwIHRyYWNrIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGFkZGVkIHRvIG11bHRpcGxlIHNlc3Npb25zIGFuZCBtYWtlIHN1cmUKLQkgIHdlIG9ubHkgYWRkIHRoZW0gdG8gdGhlIHJ0cGJpbiBvbmNlIGFuZCB0aGF0IHdlIGNsZWFuIHRoZW0gd2hlbiBubwotCSAgc2Vzc2lvbiByZWZlcnMgdG8gdGhlbSBhbnltb3JlLgotCi0yMDEzLTEyLTMwIDE1OjE2OjA5ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICB0ZXN0czogYWRkIHVuaXQgdGVzdCBmb3IgZW5jb2RlciBlbGVtZW50Ci0KLTIwMTMtMTItMzAgMTU6MTU6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogZml4IG1lbW9yeSBsZWFrcwotCi0yMDEzLTEyLTMwIDE1OjAzOjM0ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICB0ZXN0czogZml4IGxlYWsKLQotMjAxMy0xMi0zMCAxNTowMDo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBleHBlY3QgdGhlIHBhZHMgb24gdGhlIGVuY29kZXJzCi0JICBEb24ndCB1c2UgcmVxdWVzdCBwYWRzIGZvciB0aGUgZW5jb2RlciBlbGVtZW50cywgdGhlIHNpZ25hbCBoYW5kbGVyCi0JICBzaG91bGQgcmVxdWVzdCB0aGUgcGFkcyBhbmQgbWFrZSBzdXJlIHRoZXkgYXJlIGF2YWlsYWJsZSB3aXRoIHRoZSByaWdodAotCSAgbmFtZS4KLQotMjAxMy0xMi0zMCAxNDo1NjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IHJlcXVlc3QtcnRwLWVuY29kZXIgYXJlIG5vIGFjdGlvbiBzaWduYWxzCi0JICBUaGUgcmVxdWVzdC1ydHAtZW5jb2RlciBzaWduYWxzIGFyZSBub3QgYWN0aW9uIHNpZ25hbHMgc28gbWFyayB0aGVtCi0JICBjb3JyZWN0bHkgYW5kIHVzZSBhbiBhY2N1bXVsYXRvciB0byBjb2xsZWN0IHRoZSByZXN1bHQgdmFsdWUuCi0KLTIwMTMtMTItMzAgMTQ6MzY6NDUgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGVtaXQgbWlkaS1iYXNlLW5vdGUgdGFnIGZyb20gZGF0YSBpbiAnc21wbCcgY2h1bmsKLQkgIEFkZCBwYXJzaW5nIG9mIHRoZSAnc21wbCcgY2h1bmsuIFJpZ2h0IG5vdyB3ZSBvbmx5IGdyYWIgdGhlIG1pZGktYmFzZS1ub3RlIGFuZAotCSAgZW1pdCBpdCBhcyBhIHRhZy4KLQotMjAxMy0xMi0yNiAxMjowNToxOSArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgZ3N0cnRwc2Vzc2lvbjogc3VnZ2VzdCB1cHN0cmVhbSB0byB1c2UgdGhlIG5ldyAiaW50ZXJuYWwtc3NyYyIgYWZ0ZXIgYSBjb2xsaXNpb24KLQkgIFdoZW4gYSBjb2xsaXNpb24gaXMgZm91bmQgb24gdGhlIGludGVybmFsIHNzcmMsIHdlIGhhdmUgdG8gY2hhbmdlIGl0LgotCSAgSWRlYWxseSwgd2Ugd2FudCBhbHNvIHRoZSBwYXlsb2FkZXIgdXBzdHJlYW0gdG8gZm9sbG93IHRoaXMgY2hhbmdlIGFuZCB1c2UKLQkgIHRoZSBuZXcgaW50ZXJuYWwgc3NyYy4gSWRlYWxseSB3ZSB3YW50IHRoaXMgY29uZGl0aW9uIHRvIGJlIGFsd2F5cyBtZXQ6Ci0JICBpZiB0aGVyZSBpcyBvbmUgcGF5bG9hZGVyIHNlbmRpbmcgb24gdGhpcyBzZXNzaW9uLCBpdHMgc3NyYyBzaG91bGQgbWF0Y2ggdGhlCi0JICBpbnRlcm5hbCBzc3JjLgotCi0yMDEzLTEyLTI2IDExOjA0OjI5ICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBhbGxvdyBzZXR0aW5nIGludGVybmFsLXNzcmMgYWdhaW4KLQotMjAxMy0xMi0zMCAxMzozMTo0NSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIHk0bWVuY29kZTogUmVtb3ZlIGRlYWQgY29kZQotCSAgc2V0L2dldCBwcm9wZXJ0eSBpc24ndCB1c2VkCi0KLTIwMTMtMTItMzAgMTM6MzA6MjQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwcWNlbHBkZXBheS5jOgotCSAgcnRwcWNlbHBkZXBheTogUmVtb3ZlIHVuZWVkZWQgdmFyaWFibGUKLQotMjAxMy0xMi0wNSAxNTo1Mzo1MiAtMDgwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1w6kgPGFsZWl4QG9ibG9uZy5jb20+Ci0KLQkgIHJ0cGJpbjogYWxsb3cgZHluYW1pYyBSVFAvUlRDUCBlbmNvZGVycy9kZWNvZGVycwotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uW2NoXTogZm91ciBuZXcgYWN0aW9uIHNpZ25hbHMgaGF2ZSBiZWVuCi0JICBhZGRlZCAocmVxdWVzdC1ydHAtZW5jb2RlciwgcmVxdWVzdC1ydHAtZGVjb2RlciwgcmVxdWVzdC1ydGNwLWVuY29kZXIKLQkgIGFuZCByZXF1ZXN0LXJ0Y3AtZGVjb2RlcikuIFRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBwcm92aWRlIGVuY29kZXJzCi0JICBvciBkZWNvZGVycyBkeW5hbWljYWxseS4gVGhlIGVuY29kZXJzIG11c3QgZm9sbG93IHRoZSBzcnRwZW5jIEFQSSBhbmQKLQkgIHRoZSBkZWNvZGVycyB0aGUgc3J0cGRlYyBBUEkuIEhhdmluZyBzZXBhcmF0ZSBzaWduYWxzIGZvciBSVFAgYW5kIFJUQ1AKLQkgIGFsbG93cyB0aGUgdXNlciB0byB1c2UgZGlmZmVyZW50IGVuY29kZXJzL2RlY29kZXJzIG9yIHByb3ZpZGUgdGhlIHNhbWUKLQkgIG9uZSAoZS5nLiB0aGF0IHdvdWxkIGJlIHRoZSBjYXNlIGZvciBzcnRwZW5jKS4KLQkgIEFsc28sIHJ0cGJpbiBub3cgYWxsb3dzIGFwcGxpY2F0aW9uL3gtc3J0cCBpbiBpdHMgcGFkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTk5MzgKLQotMjAxMy0xMi0yNyAxNjo1MTozMiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBkeW5hbWljYWxseSByZWNhbGN1bGF0ZSBSVFggcGFyYW1ldGVycwotCSAgVXNlIHRoZSByb3VuZC10cmlwLXRpbWUgYW5kIGF2ZXJhZ2Ugaml0dGVyIHRvIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZSB0aGUKLQkgIHJldHJhbnNtaXNzaW9uIGludGVydmFsIGFuZCBleHBlY3RlZCBwYWNrZXQgYXJyaXZhbCB0aW1lLgotCSAgQmFzZWQgb24gcGF0Y2hlcyBmcm9tIFRvcnJpZSBGaXNjaGVyIDx0b3JyaWUuZmlzY2hlckBjb2xsYWJvcmEuY28udWs+Ci0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExNDEyCi0KLTIwMTMtMTItMjcgMTY6NTA6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogY2FsY3VsYXRlIGF2ZXJhZ2Ugaml0dGVyCi0KLTIwMTMtMTItMjcgMTY6NDg6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHVzZSBSVFQgZnJvbSB0aGUgUmV0cmFuc21pc3Npb24gZXZlbnQKLQkgIFBsYWNlIHRoZSBlc3RpbWF0ZWQgUlRUIGluIHRoZSBSZXRyYW5zbWlzc2lvbiBldmVudCBhbmQgbGV0IHRoZSBzZXNzaW9uCi0JICBtYW5hZ2VyIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIGhhcmRjb2RlZCB2YWx1ZS4KLQotMjAxMy0xMi0yNyAxNTo1NzozOSArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiB0YWtlIG1vcmUgYWNjdXJhdGUgcnVubmluZy10aW1lIGZvciBOQUNLCi0JICBEb24ndCB1c2UgdGhlIGN1cnJlbnQgdGltZSBjYWxjdWxhdGVkIGZyb20gdGhlIHRtaWVvdXQgbG9vcCBmb3Igd2hlbiB3ZQotCSAgbGFzdCBzY2hlZHVsZWQgdGhlIE5BQ0sgYmVjYXVzZSBpdCBtaWdodCBiZSB1bnNjaGVkdWxlZCBiZWNhdXNlIG9mIGEgbWF4Ci0JICBwYWNrZXQgbWlzb3JkZXIgYW5kIHRoZW4gd2UgZG9uJ3QgYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgdGltZS4KLQkgIEluc3RlYWQsIHRha2UgdGhlIGN1cnJlbnQgZWxlbWVudCBydW5uaW5nIHRpbWUgdXNpbmcgdGhlIGNsb2NrLgotCi0yMDEzLTEyLTMwIDExOjA2OjM4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrZGVjLmM6Ci0JICB3YXZwYWNrZGVjOiBTZW5kIGEgQ0FQUyBldmVudCBpbiB0aGUgdW5pdCB0ZXN0Ci0KLTIwMTMtMTItMjcgMDI6MTQ6MDIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogaW1wcm92ZSBtc3NfbW9kZS9mcmFnbWVudGVkIHNwZWNpYWwgaGFuZGxpbmcKLQkgIE1ha2UgaXQgY2xlYXIgd2hhdCBzaG91bGQgYmUgaGFuZGxlZCBwdXJlbHkgYnkgbXNzIG1vZGU6Ci0JICAxKSBFeHBvc2UgdGhlIHN0cmVhbXMgb24gdGhlIGZpcnN0IG1vb2YgYXMgdGhlcmUgYXJlIG5vIG1vb3YgYXRvbXMKLQkgIDIpIFByb3Blcmx5IGNsZWFudXAgc3RyZWFtcyBvbiBmbHVzaGVzCi0JICBBZGQgYSBub3RlIGFib3V0IHRoZSBtZWFuaW5nIG9mIHVwc3RyZWFtX25ld3NlZ21lbnQgYW5kIG1zc19tb2RlCi0JICBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KLQkgIE1ha2UgYWxsIG90aGVyIHNwZWNpYWwgZnJhZ21lbnQgaGFuZGxpbmcgc2hhcmVkIGZvciBib3RoIGRhc2gKLQkgIGFuZCBtc3Mgc3RyZWFtcy4KLQotMjAxMy0xMi0xMiAxMDo1MDoyNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZHJhaW4gdGhlIGFkYXB0ZXIgYmVmb3JlIHB1c2hpbmcgRU9TCi0JICBJbiBhIGZyYWdtZW50ZWQgc2NlbmFyaW8sIHF0ZGVtdXggaXMgb3BlcmF0aW5nIGluIHB1c2ggbW9kZQotCSAgYW5kIGl0IGdldHMgYSBmcmFnbWVudGVkIGJ1ZmZlci4gV2hpbGUgcHJvY2Vzc2luZyBpdHMgZGF0YQotCSAgZG93bnN0cmVhbSBnZXRzIHVubGlua2VkIChvciBhIGlucHV0LXNlbGVjdG9yIGNoYW5nZXMgaXRzCi0JICBhY3RpdmUgcGFkIGFuZCByZXR1cm5zIG5vdC1saW5rZWQpLiBRdGRlbXV4IHN0b3BzIHByb2Nlc3NpbmcKLQkgIHRoaXMgZnJhZ21lbnQgYW5kIHJldHVybnMgbm90LWxpbmtlZCB1cHN0cmVhbSwgbGVhdmluZyB0aGUKLQkgIHJlbWFpbmluZyBkYXRhIGluIGl0cyBhZGFwdGVyLgotCSAgV2hlbiBpdCBnZXRzIGFuIEVPUyBpdCBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBkYXRhIGl0Ci0JICBoYWQgcmVjZWl2ZWQgaXMgcHVzaGVkIGJlZm9yZSBwdXNoaW5nIEVPUy4KLQotMjAxMy0xMi0yNiAyMzoyMTo0NyAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDJzZW5kOiBkcm9wIElQIG9ubHkgcmVxdWlyZW1lbnQgZm9yIF9zZXRfaG9zdCgpCi0JICBsaWJzaG91dDIgKHdlIHJlcXVpcmUgPiAyLjAgYXQgY29uZmlnIHRpbWUpIHN1cHBvcnRzCi0JICBib3RoIElQIGFuZCBob3N0bmFtZSBmb3IgX3NldF9ob3N0KCkuIERyb3BwZWQgYW4KLQkgIG91dGRhdGVkIEZJWE1FIHJlZ2FyZGluZyB0aGlzIGxpbWl0YXRpb24sIGFkanVzdGVkCi0JICBzb21lIGNvbW1lbnRzIGFuZCBjaGFuZ2VkIHRoZSBwYXJhbSBibHVyYiB0byByZWZsZWN0Ci0JICB0aGlzIHRvby4KLQotMjAxMy0xMi0yNiAyMTo0MzozNCAtMDMwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDJzZW5kOiBSZXRhcmdldCBGSVhNRSB0byAyLjAKLQotMjAxMy0xMi0yNiAxMToyMTozNiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHVzZSBhZ2dyZWdhdGUgY29udHJvbCBmb3IgUExBWS9QQVVTRS9URUFSRE9XTgotCSAgVXNlIHRoZSBhZ2dyZWdhdGUgY29udHJvbCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHVybCB0byBwZXJmb3JtCi0JICBQQVVTRS9QTEFZIGFuZCBURUFSRE9XTi4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjEwMDMKLQotMjAxMy0xMi0yNCAxNDo0MDoyNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSAgcm5kYnVmZmVyc2l6ZTogUHJveHkgQ0FQUywgQUxMT0NBVElPTiwgU0NIRURVTElORyBhbmQgc3JjcGFkIGV2ZW50cyBwcm9wZXJseQotCi0yMDEzLTEyLTI0IDAwOjQzOjM5ICswMTAwICBOaWNvbGEgTXVyaW5vIDxuaWNvbGEubXVyaW5vQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGFkcGNtIG1heCBibG9jayBhbGlnbiBpcyA4MTkyCi0KLTIwMTMtMTItMjMgMTI6MjM6MjcgLTA2MDAgIEJyZW5kYW4gTG9uZyA8Yi5sb25nQGNhYmxlbGFicy5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHZwOWRlYzogUmVxdWlyZSB2cHggPj0gMS4zLjAgZm9yIGJ1aWxkaW5nIHZwOWRlYyBhbmQgdnA5ZW5jCi0JICBQcmV2aW91cyB2ZXJzaW9ucyBkaWQgbm90IGhhdmUgYSBzdGFibGUgYml0c3RyZWFtIGZvciBWUDkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwOTg2Ci0KLTIwMTMtMTItMjMgMTU6NDY6NDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBVc2UgY29ycmVjdCBjb2RlYyBpZCBmb3IgQURQQ00vRFZJCi0KLTIwMTMtMTItMjMgMTU6NDQ6MzAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQ2hlY2sgZm9yIHRoZSBjb3JyZWN0IHNpemUgb2YgY29kZWNfZGF0YSBpbiB0aGUgQUNNIGNhc2UKLQotMjAxMi0wMS0xNCAxOTo1ODoxNyArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBiYXNpYyBhZHBjbSBzdXBwb3J0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0MzM5Ci0KLTIwMTMtMTItMjAgMTE6NDU6MzggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZGVzY3JpcHRvcnMuYzoKLQkgIHF0ZGVtdXg6IEZpeCBjYWxjdWF0aW9uIG9mIGRlc2NyaXB0b3IgbGVuZ3RoCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwODEzCi0KLTIwMTMtMTItMjIgMjI6MzM6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZGJlZGFhMCB0byBkNDhiZWQzCi0KLTIwMTMtMTItMjIgMjE6NTY6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIHBvL01ha2V2YXJzOgotCSAgcG86IHNldCBnZXR0ZXh0IGRvbWFpbiBpbiBNYWtldmFycyBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhdGNoIHRoZSBnZW5lcmF0ZWQgTWFrZWZpbGUuaW4uaW4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU0NTUKLQotMjAxMy0xMi0xOSAxNjo1MDoxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogb24gcmVjZWl2ZSBlcnJvciBvbmx5IHVubWFwIGFuZCB1bnJlZiBidWZmZXIgaWYgb25lIHdhcyBhbGxvY2VkIGFuZCBtYXBwZWQKLQkgIGNvdmVyaXR5IENJRCAxMTM5ODY2LgotCi0yMDEzLTEyLTE5IDEyOjQ3OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBmaXggbWlzbGVhZGluZyBjb21tZW50Ci0JICBUaG9zZSBhcmUgbm90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suCi0KLTIwMTMtMTItMTcgMTg6Mjg6MjUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHZweDogTWFyayBWUDkgc3VwcG9ydCBhcyBub24tZXhwZXJpbWVudGFsCi0JICBUaGVyZSB3YXMgYSBsaWJ2cHggcmVsZWFzZSB3aXRoIFZQOSBzdXBwb3J0IG5vdyBhbmQgdGhlIGJpdHN0cmVhbQotCSAgaXMgZnJvemVuIHRvby4KLQotMjAxMy0xMi0xNSAyMTowNDoxMSAtMDgwMCAgVG9kZCBBZ3VsbmljayA8dG9kZEBhZ3Vsbmljay5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgU29tZSBjb21waWxlciB3YXJuaW5nIGZpeGVzIHRvIHNhdGlzZnkgWENvZGUgY29tcGlsZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjA1MTMKLQotMjAxMy0xMi0xNiAxNjoxNzowNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIGlkM3YybXV4OiBTZXQgcGljdHVyZSB0eXBlIGluIHRoZSBBUElDIGZyYW1lcwotCi0yMDEzLTEyLTE2IDE2OjE0OjUyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgaWQzdjJtdXg6IFNldCBpbWFnZS1kZXNjcmlwdGlvbiBmcm9tIHRoZSBpbmZvIHN0cnVjdCwgbm90IHRoZSBjYXBzCi0KLTIwMTMtMTItMTYgMTA6MDI6MzcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5oOgotCSAgd2F2cGFja3BhcnNlOiBQb3N0IEFVRElPX0NPREVDIHRhZwotCi0yMDEzLTEyLTE2IDEwOjAwOjM3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmg6Ci0JICBzYmNwYXJzZTogUG9zdCBBVURJT19DT0RFQyB0YWcKLQotMjAxMy0xMi0xNiAwOTo1ODozMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IFBvc3QgQVVESU9fQ09ERUMgdGFnCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIwNTEyCi0KLTIwMTMtMTItMTYgMDk6NTY6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuaDoKLQkgIGRjYXBhcnNlOiBQb3N0IEFVRElPX0NPREVDIHRhZwotCi0yMDEzLTEyLTE2IDA5OjU0OjM4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmg6Ci0JICBhbXJwYXJzZTogUG9zdCBBVURJT19DT0RFQyB0YWcKLQotMjAxMy0xMi0xNiAwOTo0OTo0OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5oOgotCSAgYWMzcGFyc2U6IFBvc3QgQVVESU9fQ09ERUMgdGFnCi0KLTIwMTMtMTItMTYgMDk6NDY6MTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuaDoKLQkgIGFhY3BhcnNlOiBQb3N0IEFVRElPX0NPREVDIHRhZwotCi0yMDEzLTEyLTE2IDA5OjQxOjE0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogVXNlIHBidXRpbHMgZnVuY3Rpb25hbGl0eSB0byBjcmVhdGUgdGhlIEFVRElPX0NPREVDIHRhZwotCi0yMDEzLTEyLTEzIDE3OjM2OjM2IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBBZGQgZXJyb3IgbWVzc2FnZSBpZiB0aGUgYXBwIHRyaWVzIHRvIHNldCB0aGUgaW50ZXJuYWwtc3NyYwotCi0yMDEzLTEyLTEzIDE2OjA4OjM1IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBPbmx5IGNvdW50IG5hY2tzIHdoZW4gYSBuYWNrIHBhY2tldCBpcyByZWNlaXZlZAotCSAgTm90IHdoZW4gYW55IFJUQ1AgZmVlZGJhY2sgcGFja2V0IGlzLgotCi0yMDEzLTEyLTEyIDIzOjIyOjQxIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBjb2xsaXNpb24uYzoKLQkgIHRlc3RzOiBJbml0aWFsaXplIHNlZ21lbnQgaW4gcnRwY29sbGlzaW9uIHRlc3QKLQotMjAxMy0xMi0xMyAxNTo1NzozNiAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogUHJvY2VzcyBQU0ZCIEZJUiByZXF1ZXN0cyB3aGljaCBsYWNrIHRoZSBtZWRpYSBzc3JjCi0JICBBY2NvcmRpbmcgdG8gUkZDIDUxMDQgc2VjdGlvbiA0LjMuMS4yLCBSVENQIFBTRkIgRklSIG1lc3NhZ2UgU0hBTEwKLQkgIGhhdmUgYSBtZWRpYV9zc3JjIGZpZWxkIHNldCB0byAwLiBUaGUgYWN0dWFsIG1lZGlhIHNzcmMgaXMgaW4gdGhlIEZDSS4KLQkgIFNvIGluIHRoYXQgY2FzZSwgd2UgaWdub3JlIHRoZSByZXRhaW5lZCBmZWVkYmFjayBhbmQganVzdCBsZXQgaXQgdGhyb3VnaAotCSAgdG8gdGhlIHJ0cF9zZXNzaW9uX3Byb2Nlc3NfZmlyKCkgZnVuY3Rpb24gd2hpY2ggd2lsbCBjaGVjayBmb3IgdGhlIGFjdHVhbAotCSAgU1NSQyBpbnNpZGUgdGhlIEZDSS4KLQkgIEZpeGVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCA1N2MyN2VjMwotCi0yMDEzLTExLTE0IDE2OjE5OjI5ICswMjAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgcnRwc2Vzc2lvbjogZml4IHJiIGJsb2NrcyBkaXNhcHBlYXJpbmcgYWZ0ZXIgdGhlIGZpcnN0IHJ0Y3AgY3ljbGUgd2l0aCBtdWx0aXBsZSBzZW5kZXJzCi0JICBQcmV2aW91c2x5LCB3aGVuIHRoZSBzZXNzaW9uIGhhZCBtdWx0aXBsZSBpbnRlcm5hbCBzZW5kZXIgU1NSQ3MsIGl0IHdvdWxkCi0JICBpc3N1ZSBTUiByZXBvcnRzIHdpdGggUkIgYmxvY2tzIG9ubHkgb24gdGhlIGZpcnN0IFJUQ1AgdGltZW91dCBhbmQgYWZ0ZXJ3YXJkcwotCSAgU1IgcmVwb3J0cyB3b3VsZCBiZSBzZW50IGVtcHR5LiBUaGlzIHdhcyBiZWNhdXNlIHRoZSAiZ2VuZXJhdGlvbiIgbnVtYmVyCi0JICBpbiBSVFBTb3VyY2Ugd291bGQgaW5jcmVhc2UgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBzYW1lIGN5Y2xlIGFuZCBhZnRlcndhcmRzCi0JICBpdCB3b3VsZCBhbHdheXMgYmUgZ3JlYXRlciB0aGFuIHRoZSBzZXNzaW9uJ3MgZ2VuZXJhdGlvbiwgd2hpY2ggd291bGQgY2F1c2UKLQkgIGl0IHRvIGJlIHNraXBwZWQgZnJvbSBiZWluZyBpbmNsdWRlZCBpbiBSQnMuCi0JICBUaGlzIGNvbW1pdCBmaXhlcyB0aGlzIHByb2JsZW0gYnk6Ci0JICAxKSBJbmNyZWFzaW5nIHRoZSBSVFBTb3VyY2UgZ2VuZXJhdGlvbiBvbmx5IGF0IHRoZSBlbmQgb2YgZWFjaCBjeWNsZSwKLQkgIHdoaWNoIGVzc2VudGlhbGx5IGZpeGVzIHRoZSBwcm9ibGVtIGJ1dCBvbmx5IHdoZW4gdGhlIGludGVybmFsIHNlbmRlcnMKLQkgIGFyZSBsZXNzIHRoYW4gR1NUX1JUQ1BfTUFYX1JCX0NPVU5ULgotCSAgMikgS2VlcGluZyBmb3IgZWFjaCBSVFBTb3VyY2UgYSBzZXQgb2YgU1NSQ3Mgd2hpY2ggc3RvcmVzIHdoaWNoIFNTUkMncwotCSAgU1IgdGhlIGdpdmVuIFJUUFNvdXJjZSBoYXMgYmVlbiByZXBvcnRlZCBpbiwgd2hpY2ggYWxzbyBmaXhlcyB0aGUgcHJvYmxlbQotCSAgd2hlbiB0aGUgaW50ZXJuYWwgc2VuZGVycyBhcmUgbW9yZSB0aGFuIEdTVF9SVENQX01BWF9SQl9DT1VOVC4gVGhpcyBpcwotCSAgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGZhY3QgdGhhdCBhbnkgUlRQU291cmNlIGlzIG1hcmtlZCBhcyByZXBvcnRlZAotCSAgaW4gaXRzZWxmJ3MgU1IgYW5kIG1ha2VzIGl0IGltcG9zc2libGUgdG8ga25vdyBpZiBpdCBoYXMgYmVlbiByZXBvcnRlZAotCSAgaW4gb3RoZXIgU1JzIHRvbyBvciBub3QsIGFuZCB3aGljaC4KLQotMjAxMy0xMS0xNCAxNjoyMzozNSArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwc2Vzc2lvbi5jOgotCSAgdGVzdHMvY2hlY2s6IGFkZCBhbiBydHBzZXNzaW9uIHVuaXQgdGVzdCB0byB2ZXJpZnkgYWxsIFJCcyBhcmUgaW5jbHVkZWQgaW4gYWxsIFNScywgcm91bmRyb2JpbgotCSAgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBpbnRlcm5hbCBzZW5kZXIgc291cmNlcwotCSAgaW4gcnRwc2Vzc2lvbiwgU1JzIGNvbnRhaW4gUkJzIGZvciBldmVyeSBvdGhlciBzZW5kZXIgc291cmNlLCBhbmQgdGhhdAotCSAgdGhleSBhcmUgaW5jbHVkZWQgcm91bmRyb2JpbiB3aGVuIHRoZXkgZXhjZWVkIFNUX1JUQ1BfTUFYX1JCX0NPVU5ULAotCSAgd2hpY2ggaXMgdGhlIG1heCBudW1iZXIgb2YgUkJzIHRoYXQgY2FuIGZpdCBpbiBhIFNSLgotCi0yMDEzLTEyLTEyIDE2OjAxOjEwICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZG9jcy9kZXNpZ24vZGVzaWduLXJ0cGNvbGxpc2lvbi50eHQ6Ci0JICBkb2NzOiBpbXByb3ZlIGRvY3MKLQotMjAxMy0xMS0wNSAxODowMzo0OCArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvZGVzaWduL01ha2VmaWxlLmFtOgotCSogZG9jcy9kZXNpZ24vZGVzaWduLXJ0cGNvbGxpc2lvbi50eHQ6Ci0JICBkb2M6IGFkZCBkZXNpZ24tcnRwY29sbGlzaW9uLnR4dCB0aGF0IGV4cGxhaW5zIHdoZW4gR3N0UlRQQ29sbGlzaW9uIGlzIGNyZWF0ZWQKLQkgIEl0IGFsc28gdGFsa3MgYWJvdXQgIkJZRSBvbmx5IHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSwgbm90IHRoZSB3aG9sZSBzZXNzaW9uLiIKLQotMjAxMy0xMS0wNSAxMjozMTo1NCArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jOgotCSAgdGVzdHMvY2hlY2s6IGltcHJvdmUgcnRwY29sbGlzaW9uOjp0ZXN0X21hc3Rlcl9zc3JjX2NvbGxpc2lvbiB0byBlbnN1cmUgdGhhdCBhIGNvbGxpc2lvbiBkb2VzIG5vdCBCWUUgdGhlIHdob2xlIHNlc3Npb24KLQkgIENvbmZsaWN0czoKLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jCi0KLTIwMTMtMTEtMDEgMTc6MDc6NTcgKzAwMDAgIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBjb2xsaXNpb24uYzoKLQkgIHRlc3RzL2NoZWNrOiBhZGQgcnRwY29sbGlzaW9uOjp0ZXN0X21hc3Rlcl9zc3JjX2NvbGxpc2lvbiB1bml0IHRlc3QKLQkgIEl0IGNoZWNrcyB0aGUgcGF5bG9hZGVyIGNoYW5nZXMgaXRzIHNzcmMgd2hlbiBjb2xsaXNpb24gaGFwcGVucwotCi0yMDEzLTEyLTEyIDEwOjM4OjQzICswMTAwICBHZW9yZ2UgS2lhZ2lhZGFraXMgPGdlb3JnZS5raWFnaWFkYWtpc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBrZWVwIGV4dHJhIHN0YXRzIGZvciBzY2hlZHVsaW5nIEJZRQotCSAgS2VlcCBhbiBleHRyYSBzdGF0cyBzdHJ1Y3R1cmUgZm9yIHNjaGVkdWxpbmcgdGhlIEJZRSBwYWNrZXRzLiBXaGVuIHdlCi0JICBkZWNpZGUgdG8gc2NoZWR1bGUgQllFLCBtYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCBzdGF0cyBpbnRvIHRoZQotCSAgYnllX3N0YXRzLiBUaGVuIHdoaWxlIHdlIHNjaGVkdWxlIHRoZSBCWUUsIHVwZGF0ZSBhbmQgdXNlIG9ubHkgdGhlCi0JICBieWVfc3RhdHMuIFdoZW4gd2UgZmluaXNoZWQgc2NoZWR1bGluZyB0aGUgQllFIHBhY2tldCwgd2UgdXNlIHRoZQotCSAgcmVndWxhciBzdGF0cyBhZ2Fpbi4KLQotMjAxMy0xMi0xMiAxMDozNDozOCArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogd2hlbiB3ZSBzY2hlZHVsZSBCWUUsIG9ubHkgZGVhbCB3aXRoIEJZRSBzb3VyY2VzCi0JICBXaGVuIHdlIGFyZSBkb2luZyB0aGUgUlRDUCB0aW1lb3V0IHRvIHNjaGVkdWxlIEJZRSBwYWNrZXRzLCBkb24ndAotCSAgZ2VuZXJhdGUgUlRDUCBmb3IgYWxsIHNvdXJjZXMgYnV0IG9ubHkgZm9yIHRoZSBzb3VyY2VzIG1hcmtlZCBhcyBCWUUuCi0KLTIwMTMtMTItMTIgMTA6MzI6NDggKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHJlc2V0IHN0YXRlIGFmdGVyIHNjaGVkdWxpbmcgQllFCi0JICBBZnRlciB3ZSBkbyBSVENQLCB3ZSBhcmUgbm90IHNjaGVkdWxpbmcgYnllIGFueW1vcmUuCi0KLTIwMTMtMTItMTIgMTA6MzE6MzggKzAxMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGFsc28gY291bnQgTkFDS1Mgd2hlbiBubyBzaWduYWwgd2FzIHBlbmRpbmcKLQotMjAxMy0xMi0xMiAxMDowOToyNSArMDEwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogaWdub3JlIFJUQ1AgcGFja2V0cyBmb3IgdGhlIEJZRSBzb3VyY2VzCi0JICBXaGVuIHdlIGFyZSBzY2hlZHVsaW5nIEJZRSBwYWNrZXRzLCBpZ25vcmUgYWxsIFJUQ1AgZm9yIHRoZSBzb3VyY2VzIHRoYXQKLQkgIGFyZSBzY2hlZHVsaW5nIGEgQllFIHBhY2tldC4gT3RoZXIgc291cmNlcyB0aGF0IGFyZSBub3Qgc2NoZWR1bGluZyBCWUUKLQkgIHNob3VsZCBjb250aW51ZSByZWNlaXZpbmcgUlRDUCBwYWNrZXRzIGFzIHVzdWFsLgotCi0yMDEzLTExLTA0IDExOjQ4OjIxICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogZGV0ZXJtaW5lIGlmIHRoZSBzZXNzaW9uIGlzIGRvaW5nIHBvaW50LXRvLXBvaW50Ci0JICBJbiB0aGlzIGNhc2UgVF9kaXRoZXJfbWF4IGlzIHNldCB0byAwIGFjY29yZGluZyB0byBSRkMgNDU4NQotCi0yMDEzLTEyLTEwIDExOjU3OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc2VyaWFsaXplIGV2ZW50cyBpbiB0aGUgYnVmZmVyCi0JICBTZXJpYWxpemUgZXZlbnRzIGludG8gdGhlIGppdHRlcmJ1ZmZlciBieSBpbnNlcnRpbmcgdGhlbSB3aXRoIGEgLTEKLQkgIHNlcW51bS4KLQkgIFVwZGF0ZSB1bml0IHRlc3QgdG8gZXhwZWN0IGV2ZW50cyBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1Mjk4NgotCi0yMDEzLTEyLTEwIDExOjA0OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGRldGVjdCAtMSBzZXFudW0KLQkgIEtlZXAgdGhlIHNlcW51bSBhcyBhIGZ1bGwgZ3VpbnQgc28gdGhhdCB3ZSBjYW4gY2hlY2sgZm9yIC0xIGVudHJpZXMgYW5kCi0JICBkZWFsIHdpdGggdGhlbSBjb3JyZWN0bHkuCi0JICBJbW1lZGlhdGVseSB0cnkgdG8gcHVzaCAtMSBzZXFudW0uCi0KLTIwMTMtMTItMTAgMTE6MDE6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVvcmdhbml6ZSBqaXR0ZXJidWZmZXIgaXRlbXMKLQkgIEtlZXAgdGhlIG9sZGVzdCBpdGVtIGF0IHRoZSBoZWFkIGFuZCB0aGUgbmV3ZXN0IGl0ZW1zIG9uIHRoZSB0YWlsLiBUaGlzCi0JICBtYWtlcyBpdCBlYXNpZXIgdG8gZGVhbCB3aXRoIC0xIHNlcW51bXMuCi0KLTIwMTMtMTItMDkgMjM6MzQ6MTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgaml0dGVyYnVmZmVyOiBjb3JyZWN0bHkgY2hlY2sgZm9yIGludmFsaWQgdmFsdWVzCi0JICBDaGVjayBmb3IgLTEgb24gdGhlIGd1aW50IGZyb20gdGhlIGJ1ZmZlciBpdGVtIGluc3RlYWQgb2Ygb24gdGhlIGd1aW50MTYKLQkgIG9yIGd1aW50MzIuCi0JICBBbHNvIGluc2VydCAtMSBzZXFudW0gYXQgdGhlIGhlYWQgb2YgdGhlIGppdHRlcmJ1ZmZlci4KLQotMjAxMy0xMi0wOCAxNjo0OTo1NSArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBmaXggc2VnZmF1bHQgd2hlbiBkZWFsaW5nIHdpdGggcGFkZGVkIGZyYW1lcwotCSAgRml4ZXMgY3Jhc2hlcyB3aXRoIHZ0ZGVjICEgb3N4dmlkZW9zaW5rIHdoZXJlIFZpZGVvVG9vbGJveCBvdXRwdXRzIHBhZGRlZCBVWVZZCi0KLTIwMTMtMTItMDUgMTI6MTU6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JICBtdWxhd2RlYzogUmVxdWlyZSBjYXBzIHRvIGJlIHNldCBiZWZvcmUgYWNjZXB0aW5nIGFueSBkYXRhCi0KLTIwMTMtMTItMDUgMTI6MTU6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzoKLQkgIHdhdnBhY2tkZWM6IFJlcXVpcmUgY2FwcyB0byBiZSBzZXQgYmVmb3JlIGFjY2VwdGluZyBhbnkgZGF0YQotCi0yMDEzLTEyLTA1IDEyOjEzOjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkgIHNwZWV4ZGVjOiBSZXF1aXJlIGNhcHMgdG8gYmUgc2V0IGJlZm9yZSBhY2NlcHRpbmcgYW55IGRhdGEKLQotMjAxMy0xMi0wNSAxMjoxMzoxMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogUmVxdWlyZSBjYXBzIHRvIGJlIHNldCBiZWZvcmUgYWNjZXB0aW5nIGFueSBkYXRhCi0KLTIwMTMtMTItMDUgMTE6NDI6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSAgdnB4OiBVc2UgbmV3IGdzdF92aWRlb19kZWNvZGVyX3NldF9uZWVkc19mb3JtYXQoKSBBUEkKLQotMjAxMy0xMi0wNCAxNjoyMzo0MyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGcmVlIGRldmljZV9pbmZvIGluIGFjY2VwdHMgY2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTgxMQotCi0yMDEzLTEyLTA0IDIxOjU3OjQ4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSAgcnRwdGhlb3JhcGF5OiBEb24ndCBzZW5kIGhlYWRlcnMgdHdpY2UgaWYgd2UgZ290IHRoZW0gZnJvbSB0aGUgY2FwcyBhbHJlYWR5Ci0KLTIwMTMtMTItMDQgMjE6NTc6MDQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBydHB0aGVvcmFwYXk6IERvbid0IGxlYWsgY29uZmlnIGRhdGEgd2hlbiByZWNlaXZpbmcgYSBzZWNvbmQgQ0FQUyBldmVudAotCi0yMDEzLTEyLTA0IDIxOjU1OjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgcnRwdm9yYmlzcGF5OiBEb24ndCBzZW5kIGhlYWRlcnMgdHdpY2UgaWYgd2UgZ290IHRoZW0gZnJvbSB0aGUgY2FwcyBhbHJlYWR5Ci0KLTIwMTMtMTItMDQgMjE6NTQ6MTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICBydHB2b3JiaXNwYXk6IERvbid0IGxlYWsgY29uZmlnIGRhdGEgd2hlbiByZWNlaXZpbmcgYSBzZWNvbmQgQ0FQUyBldmVudAotCi0yMDEzLTEyLTA0IDIxOjE3OjAzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3RyZWFtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3RyZWFtZGVwYXkuaDoKLQkgIHJ0cHN0cmVhbWRlcGF5OiBBZGQgUkZDNDU3MSBSVFAgc3RyZWFtIGRlcGF5bG9hZGluZyBlbGVtZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5ODI5Ci0KLTIwMTMtMTItMDQgMTA6MTI6NDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBzdHJlYW1wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3RyZWFtcGF5Lmg6Ci0JICBydHBzdHJlYW1wYXk6IEFkZCBSRkM0NTcxIFJUUCBzdHJlYW0gcGF5bG9hZGluZyBlbGVtZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5ODI5Ci0KLTIwMTMtMTItMDMgMTU6MDg6MjUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogaW1wcm92ZSBmcmFnbWVudC1zdGFydCB0cmFja2luZwotCSAgU29tZSBidWZmZXJzIGNhbiBoYXZlIG11bHRpcGxlIG1vb3YgYXRvbXMgaW5zaWRlIGFuZCB0aGUgc3RyYXRlZ3kKLQkgIG9mIHVzaW5nIHRoZSBnc3RfYWRhcHRlcl9wcmV2X3B0cyB0aW1lc3RhbXAgdG8gZ2V0IHRoZSBiYXNlIHRpbWVzdGFtcAotCSAgZm9yIHRoZSBtZWRpYSBvZiB0aGUgZnJhZ21lbnQgd291bGQgZmFpbCBhcyBpdCB3b3VsZCByZXVzZSB0aGUgc2FtZQotCSAgYmFzZSB0aW1lc3RhbXAgZm9yIGFsbCBtb29mcyBpbiB0aGUgYnVmZmVyIGluc3RlYWQgb2YgYWNjdW11bGF0aW5nCi0JICB0aGUgZHVyYXRpb25zIGZvciBhbGwgb2YgdGhlbS4KLQkgIEhlcmVzIGEgYmV0dGVyIGV4cGxhbmF0aW9uIG9mIHRoZSBpc3N1ZToKLQkgIHF0ZGVtdXggcmVjZWl2ZXMgYSBidWZmZXIgd2hlcmUgUFRTKGJ1ZikgPSBYCi0JICBidWYgLT4gbW9vZkEgfCBtb29mQiB8IG1vb2ZDCi0JICBUaGUgcHJvYmxlbSB3YXMgdGhhdCBQVFMoYnVmKSB3YXMgdXNlZCBhcyB0aGUgYmFzZSB0aW1lc3RhbXAgZm9yCi0JICBhbGwgMyBtb29mcywgY2F1c2luZyBhbGwgYnVmZmVycyB0byBiZSBYIGJhc2VkLiBJbiB0aGlzIGNhc2Ugd2Ugd2FudAotCSAgb25seSBtb29mQSB0byBiZSBYIGJhc2VkIGFzIGl0IGlzIHdoYXQgdGhlIFBUUyBvbiBidWYgbWVhbnMsIGFuZCB0aGUKLQkgIG90aGVyIG1vb2ZCIGFuZCBtb29mQyBqdXN0IHVzZSB0aGUgYWNjdW11bGF0ZWQgdGltZXN0YW1wIGZyb20gdGhlCi0JICBwcmV2aW91cyBtb29mcyBkdXJhdGlvbnMuCi0JICBUbyBzb2x2ZSB0aGlzLCB0aGlzIHBhdGNoIHVzZXMgZ3N0X2FkYXB0ZXJfcHJldl9wdHMgZGlzdGFuY2UKLQkgIHJlc3VsdCwgdGhpcyBhbGxvd3MgcXRkZW11eCB0byBjYWxjdWxhdGUgaWYgaXQgc2hvdWxkIHVzZSB0aGUKLQkgIHJlc3VsdGluZyBwdHMgb3IganVzdCBhY2N1bXVsYXRlIHRoZSBzYW1wbGVzIGFzIGl0IGNhbiBpZGVudGlmeQotCSAgaWYgdGhlIG1vb2ZzIGJlbG9uZyB0byB0aGUgc2FtZSB1cHN0cmVhbSBidWZmZXIgb3Igbm90LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTc4MwotCi0yMDEzLTExLTIxIDEyOjI5OjI4ICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDJidWZmZXJwb29sOiBhZGQgc3VwcG9ydCBmb3IgbXVsdGktcGxhbmFyIFY0bDIgQVBJIGluIERNQUJVRiBtb2RlCi0JICBGaXhlcyBidWcgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjc1NAotCi0yMDEzLTExLTE5IDE3OjE2OjI3ICswMDAwICBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JICB2NGwyOiByZWZhY3RvciBieSBlbXVsYXRpbmcgb25lIHY0bDJfcGxhbmUgaW4gbm9uLU1QTEFORSBtb2RlCi0JICBzbyB0aGF0IHRoZSBidWZmZXIgaW5mb3JtYXRpb25zIGNhbiBiZSByZXRyaWV2ZWQgdGhlIHNhbWUgd2F5Ci0JICBpbiBib3RoIE1QTEFORSBhbmQgbm9uLU1QTEFORSBtb2RlLgotCSAgSGVyZSAiZW11bGF0aW5nIiBtZWFucyAibWFudWFsbHkgZmlsbCBpbiB0aGUgcGxhbmUiLgotCSAgRml4ZXMgYnVnIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NTQKLQotMjAxMy0xMS0xMyAxMjowNTo0MCArMDAwMCAgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogYWRkIHN1cHBvcnQgZm9yIG11bHRpLXBsYW5hciBWNEwyIEFQSQotCSAgVGhpcyBhcGkgaXMgaW4gbGludXgga2VybmVsIHNpbmNlIHZlcnNpb24gMi42LjM5LAotCSAgYW5kIHByZXNlbnQgaW4gYWxsIHZlcnNpb24gMy4KLQkgIFRoZSBjb21taXQgdGhhdCBhZGRzIHRoZSBBUEkgaW4gbWFzdGVyIGJyYW5jaCBvZiB0aGUKLQkgIGxpbnV4IGtlcm5lbCBzb3VyY2UgaXM6Ci0JICBodHRwczovL2dpdGh1Yi5jb20vdG9ydmFsZHMvbGludXgvY29tbWl0L2Y4ZjM5MTRjZjkyMmY1ZjllMWQ2MGU5ZTEwZjZmYjkyNzQyOTA3YWQKLQkgIHY0bDIgZG9jOiAiU29tZSBkZXZpY2VzIHJlcXVpcmUgZGF0YSBmb3IgZWFjaCBpbnB1dAotCSAgb3Igb3V0cHV0IHZpZGVvIGZyYW1lIHRvIGJlIHBsYWNlZCBpbiBkaXNjb250aWd1b3VzCi0JICBtZW1vcnkgYnVmZmVycyIKLQkgIFRoZXJlIGFyZSBuZXdlciBzdHJ1Y3R1cmVzICdzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZScKLQkgIGFuZCAnc3RydWN0IHY0bDJfcGxhbmUnLgotCSAgU28gdGhlIHBpeGVsIGZvcm1hdCBpcyBub3Qgc2V0dXAgd2l0aCB0aGUgc2FtZSBBUEkgd2hlbiB1c2luZwotCSAgbXVsdGktcGxhbmFyLgotCSAgQWxzbyBmb3IgZ3N0LXY0bDIsIG9uZSBvZiB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGluIEdzdFY0bDJNZXRhCi0JICB0aGVyZSBhcmUgbm93IG9uZSBtZW0gcG9pbnRlciBmb3IgZWFjaCBtYXBlZCBwbGFuZS4KLQkgIFdoZW4gbm90IHVzaW5nIG11bHRpLXBsYW5hciwgdGhpcyBjb21taXQgdGFrZXMgY2FyZSBvZiBrZWVwaW5nCi0JICB0aGUgc2FtZSBjb2RlIHBhdGggdGhhbiBwcmV2aW91c2x5LiBTbyB0aGF0IHRoZSAyIGNhc2VzIGFyZQotCSAgaW4gdHdvIGRpZmZlcmVudCBibG9ja3MgdHJpZ2dlcmVkIGZyb20gVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSLgotCSAgRml4ZXMgYnVnIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NTQKLQotMjAxMy0xMi0wNCAwOToxMjowNyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBkb24ndCBsZWFrIHRlbXBsYXRlIGNhcHMKLQotMjAxMy0xMi0wMyAyMTo0MToyOCArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWFjcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogdXNlIEFDQ0VQVF9JTlRFUlNFQ1QgZmxhZwotCSAgVGhlIHBhcnNlciBjYW4gYWNjZXB0IGlucHV0IHRoYXQgaXMgbm90IGNvbXBsZXRlbHkgc3BlY2lmaWVkLiBVc2UgdGhlCi0JICBBQ0NFUFRfSU5URVJTRUNUIGZsYWcgb24gdGhlIHNpbmtwYWQgdG8gdHdlYWsgdGhlIGFjY2VwdGNhcHMgZnVuY3Rpb24gdG8KLQkgIGNoZWNrIGZvciBpbnRlcnNlY3Rpb24gb25seS4gVGhpcyBhbGxvd3MgdXMgdG8gcHJveHkgZG93bnN0cmVhbQotCSAgY29uc3RyYWludHMgd2hpbGUgc3RpbGwgYWxsb3dpbmcgbm9uLXN1YnNldCBjYXBzIGFzIGlucHV0LgotCSAgV2UgY2FuIHRoZW4gYWxzbyByZW1vdmUgdGhlIGFwcGVuZGVkIHRlbXBsYXRlIGNhcHMgd29ya2Fyb3VuZC4KLQkgIE1ha2UgYSB1bml0LXRlc3QgdG8gY2hlY2sgdGhlIG5ldyBmZWF0dXJlLgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyNjA0MGVlMzhjYjllN2M0MmYzZDlhMDI4MmIzZTVjYWNlN2NhNDJkCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MDI0Ci0KLTIwMTMtMTItMDMgMjE6MzY6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogcmVtb3ZlIGZpZWxkcyBmcm9tIGZpbHRlcgotCSAgV2UgbmVlZCB0byByZW1vdmUgdGhlIGZpZWxkcyBmcm9tIHRoZSBmaWx0ZXIgd2hlbiB3ZSBjYW4gY29udmVydAotCSAgYmV0d2VlbiB0aGVtLgotCi0yMDEzLTEyLTAzIDIxOjI5OjEzICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0c2JjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IHJlZmFjdG9yIGNvZGUgdG8gcmVtb3ZlIGNhcHMgZmllbGRzCi0KLTIwMTMtMTItMDIgMDA6MTA6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IG1pY3Jvb3B0aW1pc2F0aW9uOiBhdm9pZCBzb21lIHVubmVjZXNzYXJ5IEdWYWx1ZSBjb3BpZXMKLQotMjAxMy0xMi0wMSAyMzozMjoyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IG9mZi1ieS1vbmUgY3Jhc2ggd2hlbiBkb3duc3RyZWFtIGNhcHMgY29udGFpbiBhIGxpc3Qgb2YgZnJhbWVyYXRlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTU0NAotCi0yMDEzLTExLTI5IDExOjI2OjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBVc2UgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbW9vZiBhcyB0aGUgYmFzZSBmcmFnbWVudCBzdGFydAotCSAgSW4gU21vb3RoU3RyZWFtaW5nIGZyYWdtZW50ZWQgc2NlbmFyaW8sIHRoZSB0aW1lc3RhbXBzIGFyZSBjYWxjdWxhdGVkCi0JICBzdGFydGluZyBmcm9tIHRoZSBmcmFnbWVudCBidWZmZXIgdGltZXN0YW1wLiBXaGVuIHRoZXJlIGlzIGEgbm90LWxpbmtlZAotCSAgcmV0dXJuIGZyb20gZG93bnN0cmVhbSwgcXRkZW11eCB3aWxsIHJldHVybiB1cHN0cmVhbSBhbmQgd2lsbCBrZWVwIHRoZQotCSAgbm9uLXB1c2hlZCBkYXRhIGludG8gaXRzIGFkYXB0ZXIuCi0JICBPbiBhIG5ldyBmcmFnbWVudCBidWZmZXIgcHVzaGVkIHRvIHF0ZGVtdXgsIHRoZSBuZXcgYnVmZmVyIHRpbWVzdGFtcAotCSAgd291bGQgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBvbmUgdGhhdCBzaG91bGQgYmUgdXNlZCBvbiB0aGUgc3RpbGwKLQkgIHRvIGJlIHB1c2hlZCBidWZmZXJzLiBCZWNhdXNlIG9mIHRoaXMsIHRoaXMgcGF0Y2ggd2lsbCBhbHNvCi0JICB1cGRhdGUgdGhlIGZyYWdtZW50X3N0YXJ0IHRpbWVzdGFtcCBmcm9tIHRoZSBhZGFwdGVyIGxhc3QgcHRzCi0JICB0byBtYWtlIHN1cmUgdGhlIG1vb2YgYW5kIHRpbWVzdGFtcHMgYXJlIGluIHN5bmMgYW5kIHdpbGwgcmVzdWx0Ci0JICBpbiBjb3JyZWN0IHRpbWVzdGFtcHMgZm9yIGFsbCBmcmFnbWVudHMuCi0KLTIwMTMtMTEtMTUgMDg6NTQ6MDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogYXZvaWQgcmUtcmVhZGluZyB0aGUgc2FtZSBtb292IGFuZCBlbnRlcmluZyBpbnRvIGxvb3AKLQkgIEluIHRoZSBzY2VuYXJpbyBvZiAibWRhdCB8IG1vb3YgKHdpdGggZnJhZ21lbnRlZCBhcnRpZmFjdHMpIiBxdGRlbXV4Ci0JICBjb3VsZCByZWFkIHRoZSBtb292IGFnYWluIGFmdGVyIHRoZSBtZGF0IGJlY2F1c2UgaXQgd2FzIGNvbnNpZGVyaW5nIHRoZQotCSAgbWVkaWEgYXMgYSBmcmFnbWVudGVkIG9uZS4KLQkgIFRvIGF2b2lkIHRoaXMgbG9vcCB0aGlzIHBhdGNoIG1ha2VzIGl0IHN0b3JlCi0JICB0aGUgbGFzdCBwcm9jZXNzZWQgbW9vdl9vZmZzZXQgdG8gYXZvaWQgcGFyc2luZyBpdCBhZ2Fpbi4KLQkgIEFuZCBpdCBhbHNvIGNoZWNrcyBpZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgdG8gcGxheSBiZWZvcmUKLQkgIHJlc3R1cm5pbmcgdG8gdGhlIG1kYXQsIHNvIHRoYXQgaXQga25vd3MgdGhlcmUgaXMgbmV3IGRhdGEgdG8gYmUgcGxheWVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTU3MAotCi0yMDEzLTExLTE1IDAwOjUyOjUzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkbyBub3QgZnJlZSBzdHJlYW1zIGlmIHRoZXkgd2VyZSBub3QgY3JlYXRlZCBsb2NhbGx5Ci0JICBXaGVuIHBhcnNpbmcgYSB0cmFrIG9ubHkgZnJlZSBzdHJlYW1zIG9uIGZhaWx1cmVzIGlmIHRob3NlIHN0cmVhbXMKLQkgIHdlcmUgY3JlYXRlZCBsb2NhbGx5LiBUaGV5IGNvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGZyb20gYSBwcmV2aW91cwotCSAgZnJhZ21lbnQsIGluIHRoaXMgY2FzZSB3ZSB0aGV5IGhhdmUgdmFsaWQgaW5mbyBmcm9tIHRoZSBvdGhlciBmcmFnbWVudC4KLQkgIEluY2x1ZGluZyBwYWRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTU3MAotCi0yMDEzLTExLTI5IDE5OjU3OjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSAgdmlkZW9taXhlcjogU2ltcGxpZnkgTlYxMi8yMSBibGVuZGluZyBjb2RlIG1hY3JvcwotCi0yMDEzLTExLTI5IDE5OjUwOjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSAgdmlkZW9taXhlcjogRml4IHNlZ2ZhdWx0IHdoZW4gZmlsbGluZyB0aGUgYmFja2dyb3VuZCBvZiBhIFVZVlkgZnJhbWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI0MDEKLQotMjAxMy0xMS0yOSAwOToyMTo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggY29tcGlsYXRpb24gd2l0aCBnc3QgZGVidWdpbmcgZGlzYWJsZWQKLQkgIHF0ZGVtdXguYzo5NDUyOjE6IGVycm9yOiBsYWJlbCBhdCBlbmQgb2YgY29tcG91bmQgc3RhdGVtZW50Ci0KLTIwMTMtMTEtMjcgMTc6MDI6MDAgKzAxMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IE1hcCBpbmJ1ZmZlciBvbmNlIG9ubHkKLQkgIERvIG5vdCBjYWxsIGdzdF9idWZmZXJfZXh0cmFjdCgpIHR3aWNlIHNpbmNlIGVhY2ggY2FsbCB3aWxsIG1hcCBhbmQKLQkgIHVubWFwIHRoZSBiaWZmZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5NDM0Ci0KLTIwMTMtMTEtMjggMTE6NTg6NDIgLTA1MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYzoKLQkgIHZpZGVvZmxpcDogQWRkIHVuaXQgdGVzdCBmb3IgdGhlICdhdXRvbWF0aWMnIG1ldGhvZAotCSAgVGhlc2UgbmV3IHRlc3RzIHNlbmQgYSB0YWcgZXZlbnQgYmVmb3JlIHNlZGluZyB0aGUgYnVmZmVyLiBUZXN0ZWQgY2FzZSBhcmUgYW4KLQkgIGVtcHR5IHRhZyBsaXN0LCBhIHRhZyBsaXN0IHdpdGggb3JpZW50YXRpb24tMTgwIHNldCBhbmQgYW4gaW52YWxpZCBvcmllbnRhdGlvbiB2YWx1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTk0OTcKLQotMjAxMy0xMS0yOCAxNjowOTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBkb24ndCBjcmFzaCBvbiB0YWcgZXZlbnRzIHdpdGhvdXQgb3JpZW50YXRpb24gdGFnCi0JICBXb3VsZCBjcmFzaCBpbiBnX2ZyZWUoKSB0cnlpbmcgdG8gZnJlZSBhbiB1bmluaXRpYWxpc2VkIHBvaW50ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE5NDk3Ci0KLTIwMTMtMTEtMjggMTY6NTA6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBkb24ndCB1bnJlZiBidWZmZXIgdHdpY2UKLQkgIENsZWFuaW5nIHRoZSBwYWNrZXQgaW5mbyB3aWxsIGFscmVhZHkgdW5yZWYgdGhlIGJ1ZmZlci4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTUwNzgKLQotMjAxMy0xMS0yOCAyMjozNTowMiArMTEwMCAgSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQWRkIEh5ZHJvZ2VuQXVkaW8gUmVwbGF5R2FpbiB0YWdzCi0JICBJZGVudGljYWwgdG8gdGhlIGl0dW5lcyAodG0pIHZlcnNpb24sIGJ1dCBsYWJlbGxlZCB3aXRoCi0JICBvcmcuaHlkcm9nZW5hdWRpby5yZXBsYXlnYWluIGFzIHRoZSBwcm9kdWNlci4KLQotMjAxMy0xMS0yNyAxNjoxNToxMiArMDEwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWR1cG9uY2hlbGxlMUBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBleHBsaWNpdGx5IGZhaWwgd2hlbiBhbHBoYSBpbmZvcm1hdGlvbiB3b3VsZCBoYXZlIGJlZW4gbG9zdC4KLQotMjAxMy0wNS0yOSAxNjowNjowNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICBnaXRpZ25vcmU6IFVwZGF0ZWQgdG8gaWdub3JlICouc3dwIGFuZCAuZGlyc3RhbXAKLQotMjAxMy0xMS0yNiAxMToxNzo0MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYS1kZW11eDogQWxsb3cgYSBiaXQgbW9yZSB2YXJpYXRpb24gd2hlbiBkZXRlY3RpbmcgY29tbW9uIGZyYW1lcmF0ZXMKLQkgIEluc3RlYWQgb2YgKy8tIDFucyB3ZSBhbGxvdyAybnMgbm93LiBEdWUgdG8gcm91bmRpbmcgZXJyb3JzIHRoZXJlIGFyZQotCSAgc29tZSBNYXRyb3NrYSBmaWxlcyBvdXQgdGhlcmUgd2l0aCAzMy4zMzMzMzFtcyBwZXIgZnJhbWUgZm9yIDMwZnBzLgotCi0yMDEzLTExLTI2IDEwOjIwOjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiBVc2UgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKCkgaW5zdGVhZCBvZiBHVmFsdWUgbWFnaWMKLQotMjAxMy0xMS0yNSAxNDowMzoyMSAtMDUwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB2aWRlb2ZsaXA6IFNldCBkZWZhdWx0IG1ldGhvZCBhdCBjb250cnVjdGlvbgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjMzMwotCi0yMDEzLTA1LTI5IDE1OjU3OjA5IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogVXNlIHNwYWNlIGluc3RlYWQgb2YgdGFicwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjc1NAotCi0yMDEzLTA1LTI5IDE1OjQ0OjMxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMm9iamVjdDogRml4IGhlYWRlciBpbmRlbnRhdGlvbiBzbyBpdCdzIHJlYWRhYmxlIGFnYWluCi0JICBJdCdzIHVuZm9ydHVuYXRlIHRvIGhhdmUgdG8gZG8gdGhpcywgYnV0IHdpdGggdGhlIG1peCBvZiB0YWJzIGFuZCBzcGFjZSwgcGx1cyBhbGwgdGhlIHJhbmRvbQotCSAgaW5kZW50YXRpb24gdGhpcyBoZWFkZXIgaGFzIGJlY29tZSB2ZXJ5IGhhcmQgdG8gcmVhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NTQKLQotMjAxMy0xMS0yNSAxNzozODowNiArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgY2hlY2s6IGZpeCBqaXR0ZXJidWZmZXIgY2hlY2sKLQkgIERvbid0IGFkdmFuY2UgdGhlIGNsb2NrIHRvIDI0MG1zIHRvbyBlYXJseS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAwMTMKLQotMjAxMy0xMS0yNSAxMTo0NTozMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHNpc2Euc2Ftc3VuZy5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGRlcHJlY2F0ZSBtYXgtZXJyb3JzCi0JICBUaGUgcHJvcGVydHkgd2Fzbid0IHVzZSBpbnRlcm5hbGx5LCBsZXQgdGhlIGJhc2UgY2xhc3MgaGFuZGxlIHRoZQotCSAgbnVtYmVyIG9mIGVycm9ycyB0byB0b2xlcmF0ZS4KLQotMjAxMy0xMS0yNSAxNTo0OTowNyArMDEwMCAgV2ltIFRheW1hbnMgPHd0YXltYW5zQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGltcHJvdmUgY2xlYXItcHQtbWFwIGhhbmRsaW5nCi0JICBEb24ndCByZXNldCB0aGUgZXhwZWN0ZWQgb3V0cHV0IHNlcW51bSB3aGVuIGNsZWFyaW5nIHRoZSBwdCBtYXAgYmVjYXVzZSB0aGlzCi0JICBjb3VsZCBzdGFsbCB0aGUgaml0dGVyYnVmZmVyIGZvcmV2ZXIuCi0JICBBZGQgYSB1bml0IHRlc3QgZm9yIHRoaXMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5ODAwCi0KLTIwMTMtMTAtMjggMjE6MzM6MjIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BzaXNhLnNhbXN1bmcuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBsZXQgdGhlIGJhc2UgY2xhc3MgZGVjaWRlIHdoZW4gdG8gcmV0dXJuIGFuIGVycm9yCi0JICBUaGUgYmFzZSB2aWRlb2RlY29kZXIgY2xhc3MgaGFzIGFuIGVycm9yIGNvdW50aW5nIGZlYXR1cmUgdG8gdG9sZXJhdGUKLQkgIGEgZmV3IGVycm9ycyBiZWZvcmUgcG9zdGluZyBhbiBlcnJvciBtZXNzYWdlLiBTbyBkb24ndCBmb3JjZSB0aGUKLQkgIGVycm9yIGFuZCBsZXQgdGhlIGJhc2UgY2xhc3MgZGVjaWRlIHdoZW4gaXQgc2hvdWxkIGhhcHBlbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDc2MgotCi0yMDEzLTEwLTI4IDIxOjI4OjMzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAc2lzYS5zYW1zdW5nLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogQWRkIGRhdGEgc2tpcHBpbmcgb24gaW5wdXQKLQkgIEFkZCBtaXNzaW5nIGJ5dGVzIHNraXBwaW5nIHdoZW4gYmFkIGlucHV0IGlzIHJlY2VpdmVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDc2MgotCi0yMDEzLTExLTI1IDEyOjEzOjQzICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBEaXNjYXJkIDIgYnl0ZSBzdWJwaWN0dXJlIHBhY2tldHMKLQkgIEFzIGZvciB0ZXh0IHN1YnRpdGxlcyBhbmQgYXMgc3VnZ2VzdGVkIGluICM3MTI2NDMsIHRocm93Ci0JICBhd2F5IHRoZSAyIGJ5dGUgdGVybWluYXRvciBwYWNrZXRzIHRoYXQgc29tZSBlbmNvZGVycyBpbnNlcnQuCi0JICBUaGlzIHdpbGwgbWFrZSB0aGluZ3MgYmV0dGVyIHdoZW4gcmVtdXhpbmcgYW5kIGNhdXNlcyBnZW5lcmF0aW9uCi0JICBvZiBnYXAgZXZlbnRzLgotCi0yMDEzLTExLTI1IDAwOjM0OjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IHdha2UtdXAgd2hlbiBuZXcgYnVmZmVycyBjb21lIGluIGFmdGVyIHJ1bm5pbmcgZW1wdHkKLQkgIFNwb3R0ZWQgYnkgJ2dyYXRpYXMnIG9uIElSQy4gUHJvYmFibHkgaW50cm9kdWNlZCBpbiByZWNlbnQgcmVmYWN0b3JpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE1MDM5Ci0KLTIwMTMtMTEtMjMgMTI6MTU6NDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGNvcnJlY3RseSBoYW5kbGUgbmVnYXRpdmUgcmVsYXRpdmUgdGltZXN0YW1wcwotCSAgLi4uIHJhdGhlciB0aGFuIHNjYWxpbmcgdGhlc2UgYXMgdW5zaWduZWQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNzQ0Ci0JICBCYXNlZCBvbiBwYXRjaCBieSBLcnp5c3p0b2YgS290bGVuZ2EgPHBvY2VrQHVzZXJzLnNmLm5ldD4KLQotMjAxMy0wOS0xNCAwMzoyNzowOSArMDIwMCAgTWF0aGlldUR1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQGVwaXRlY2guZXU+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSAgdmlkZW9taXhlcjI6IE1lcmdlIHRhZyBldmVudHMgdG8gc2VuZCB0aGVtIGluIGNvbGxlY3RlZC4KLQkgIE90aGVyd2lzZSB0aGVyZSB3ZXJlIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3ZSB3b3VsZCBzZW5kIHRhZ3MKLQkgIG9uIGEgZmx1c2hpbmcgc3JjcGFkLgotCSAgV2UgaGF2ZSBhIHRlc3QgZm9yIHRoYXQgaW4gR0VTLCBidXQgdGhpcyBzaG91bGQgYmUgdGVzdGVkCi0JICBzeXN0ZW1hdGljYWxseSB3aXRoIGhhcm5lc3MgaW4gdGhlIGZ1dHVyZSBhcyBJIGJlbGlldmUgaXQKLQkgIGlzIHVzZWZ1bCBmb3IgZXhhY3RseSB0aGF0IGtpbmQgb2YgY2FzZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4MTY1Ci0KLTIwMTMtMTEtMTQgMTc6Mjk6NTAgLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBVc2UgR3N0VmlkZW9JbmZvIGhlbHBlciB0byBjcmVhdGUgY2FwcyBmb3IgcmF3IHZpZGVvCi0JICBUaGlzIHdheSB3ZSBkbyBub3QgbWlzcyBtYW5kYXRvcnkgZmllbGRzIGluIGNhcHMuCi0JICBBdCB0aGUgc2FtZSB0aW1lIHVzZSB0aGUgZ3N0X3BiX3V0aWxzX2dldF9jb2RlY19kZXNjcmlwdGlvbgotCSAgaGVscGVyIHRvIGdldCBjb2RlYyBkZXNjcmlwdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTIzMzUKLQotMjAxMy0xMS0xNCAxNjoxMTozOCAtMDMwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFVzZSBHc3RWaWRlb0luZm8gaGVscGVyIHRvIGNyZWF0ZSBjYXBzIGZvciByYXcgdmlkZW8KLQkgIFRoaXMgd2F5IHdlIGRvIG5vdCBtaXNzIG1hbmRhdG9yeSBmaWVsZHMgaW4gY2Fwcy4KLQkgIEF0IHRoZSBzYW1lIHRpbWUgdXNlIHRoZSBnc3RfcGJfdXRpbHNfZ2V0X2NvZGVjX2Rlc2NyaXB0aW9uIGhlbHBlciB0bwotCSAgZ2V0IGNvZGVjIGRlc2NyaXB0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjMyOAotCi0yMDEzLTExLTEzIDIwOjE4OjE3IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oOgotCSAgbXVsdGlmaWxlc3JjOiBJbXBsZW1lbnQgc2Vla2luZyBpbiBjYXNlIG9mIG11bHRpcGxlIGltYWdlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjI1NAotCi0yMDEzLTExLTIyIDEyOjI2OjIxICswMTAwICBXaW0gVGF5bWFucyA8d3RheW1hbnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHBhc3MgZG93bnN0cmVhbSBmbG93cmV0dXJuIHRvIHVwc3RyZWFtCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNzIyCi0KLTIwMTMtMTEtMTggMTQ6Mjc6NDggKzAxMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBjbGVhciBjYWNoZWQgY2FwcyBvbiBjbG9zZQotCSAgQSBkaWZmZXJlbnQgZGV2aWNlIHdpdGggZGlmZmVyZW50IGNhcHMgbWF5IGJlIHVzZWQgZm9yIHRoZSBuZXh0IG9wZW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNjExCi0KLTIwMTMtMTEtMjEgMTU6MzA6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYzoKLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIGdfbWVtbW92ZSgpIGlzIGRlcHJlY2F0ZWQKLQkgIEp1c3QgdXNlIHBsYWluIG1lbW1vdmUoKSwgZ19tZW1tb3ZlKCkgaXMgZGVwcmVjYXRlZCBpbgotCSAgcmVjZW50IEdMaWIgdmVyc2lvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyODExCi0KLTIwMTMtMTEtMjEgMTE6MzI6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgcnRwdm9yYmlzZGVwYXk6IGhhbmRsZSBwYWNrZXRzID4gMHhmZmZmCi0JICBIYW5kbGUgaW5wdXQgcGFja2V0IHNpemVzIGxhcmdlciB0aGFuIDE2IGJpdHMgaW4gdGhlIGRlcGF5bG9hZGVyLgotCSAgUmVtb3ZlIHNpemUgcmVzdHJpY3Rpb25zIG9uIHRoZSBwYXlsb2FkZXIuCi0KLTIwMTMtMTEtMjEgMTE6MzA6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3dGF5bWFuc0ByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSAgcnRwdGhlb3JhZGVwYXk6IGhhbmRsZSBwYWNrZXRzID4gMHhmZmZmCi0JICBSZW9yZ2FuaXplIHNvbWUgdGhpbmdzIGluIHRoZSBkZXBheWxvYWRlciBzbyB0aGF0IGl0IGNhbiBoYW5kbGUgcGFja2V0cyBsYXJnZXIKLQkgIHRoYW4gMTYgYml0cy4KLQkgIFJlbW92ZSB0aGUgc2l6ZSByZXN0cmljdGlvbiBvbiB0aGUgcGF5bG9hZGVyLgotCi0yMDEzLTExLTIxIDAyOjI4OjI3ICsxMTAwICBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBpc29tcDQ6IEhhbmRsZSBtcDRzIHN1YnBpY3R1cmUgc3RyZWFtcyBiZXR0ZXIuCi0JICBDbGVhbiB1cCB0aGUgaGFuZGxpbmcgb2YgbXA0cyBzdHJlYW1zLiBVc2UgdGhlIGdlbmVyaWMgZXNkcwotCSAgZGVzY3JpcHRvciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBwYWxldHRlLCBpbnN0ZWFkIG9mIGhhcmQgY29kaW5nCi0JICBhIHdyb25nIG1hZ2ljIG9mZnNldC4KLQkgIEFkZCBzb21lIG1vcmUgc2l6ZSBzYWZldHkgY2hlY2tzIHdoZW4gcGFyc2luZyBFUyBkZXNjcmlwdG9ycywgYW5kCi0JICByZXBsYWNlIG1hZ2ljIG51bWJlcnMgd2l0aCB0aGUgZGVzY3JpcHRpdmUgY29uc3RhbnRzIHRoYXQgYXJlIGFscmVhZHkKLQkgIGRlZmluZWQuCi0JICBFbmhhbmNlIGR1bXAgb3V0cHV0IGZvciBzdHNkIGF0b21zLgotCSAgU3RyZWFtcyBmcm9tIGJvdGggYnVnIDcxMjY0MyBhbmQgaGlzdG9yaWMgYnVnIDU2ODI3OCBub3cgYm90aCB3b3JrCi0JICBjb3JyZWN0bHkuCi0JICBGaXhlczogIzcxMjY0MwotCi0yMDEzLTExLTIwIDIyOjA4OjI1ICsxMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JICBxdGRlbXV4OiBTb3J0IGZvdXJjYyBkZWNsYXJhdGlvbnMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCi0KLTIwMTMtMTEtMjAgMjE6NDE6NDcgKzExMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2lzb21wNC9NYWtlZmlsZS5hbToKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L2Z0eXBjYy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBxdGRlbXV4OiBNZXJnZSBhbGwgdGhlIGZvdXJjYyBoZWFkZXJzIGludG8gb25lCi0JICBSZW1vdmUgcXRkZW11eF9mb3VyY2MuaCBhbmQgZnR5cGNjLmggYW5kIHB1dCBpdCBhbGwgaW4gZm91cmNjLmgKLQotMjAxMy0xMS0xOSAxMDoxMDo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGF2b2lkIG1hcHBpbmcgdGhlIGJ1ZmZlcgotCSAgUmV1c2UgdGhlIHBhcnNlZCBzdHJ1Y3R1cmUgdG8gZ2V0IHRoZSB0aW1lc3RhbXBzLgotCi0yMDEzLTExLTE4IDE3OjEzOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggJ21ha2UgY2hlY2snCi0JICBGaXggZ2VuZXJpYy9zdGF0ZXMgY2hlY2suIEFsc28sIGdfcmV0dXJuX2lmX2ZhaWwoKSBpcwotCSAgbm90IGZvciBpbnRlcm5hbCBzdGF0ZSBjaGVja2luZy4KLQotMjAxMy0xMS0xOCAxNDo0NDozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmb3ZlcmxheS5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSogZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkqIHN5cy9vc3M0L29zczQtc2luay5jOgotCSogc3lzL29zczQvb3NzNC1zb3VyY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICBkb2NzOiBnZXQgcmlkIG9mICdTaW5jZTogMC4xMC54JyBtYXJrZXJzCi0JICBBbmQgc29tZSBndGstZG9jIG1hcmt1cCBmaXhlcy4KLQotMjAxMy0xMS0xNiAxMjoxNToxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBtYW5hZ2VyOiBmaXggU2luY2UgbWFya2VycwotCSAgU2hvdWxkIGJlIG5leHQgc3RhYmxlIHJlbGVhc2Ugc2VyaWVzIHZlcnNpb24KLQotMjAxMy0xMS0xNSAxMzo0ODowNyArMDIwMCAgR2VvcmdlIEtpYWdpYWRha2lzIDxnZW9yZ2Uua2lhZ2lhZGFraXNAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogRml4IHN0YXRzIHByb3BlcnR5IGZpZWxkIG5hbWVzIGFuZCBkb2N1bWVudGF0aW9uCi0KLTIwMTMtMTEtMTUgMTU6MjA6MTQgKzAxMDAgIFRvcnJpZSBGaXNjaGVyIDx0b3JyaWUuZmlzY2hlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgZ3N0cnRwc2Vzc2lvbjogSW1wbGVtZW50IGEgbnVtYmVyIG9mIGZlZWRiYWNrIHBhY2tldCBzdGF0aXN0aWNzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExNjkzCi0KLTIwMTMtMTEtMTMgMTc6MTE6MDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHJlbW92ZSBtYXRoIG9wZXJhdGlvbiBmcm9tIGxvb3AKLQkgIFRoZSBlbHN0X29mZnNldCBkb2Vzbid0IGNoYW5nZSBpbnNpZGUgdGhlIGxvb3AsIHNvIGNvbXB1dGUgaXQKLQkgIG91dHNpZGUKLQotMjAxMy0xMS0xNCAyMDo1NDozMiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdG11eDogZml4IHBsYXliYWNrIHJlZ3Jlc3Npb24KLQkgIEluIGFlMTE1MGU4NWNmOTlkNzQ4MjkzM2FhNmY3ZTRmMDEyZmU0NWEzZWMgZmxpcHBpbmcgYSBjb25kaXRpb24gbWlzYWxpZ25lZCB0aGUKLQkgIGVsc2UgYnJhbmNoLCB3aGVyZSBmb3IgdGhlcmUgY29uZGl0aW9uIHRoYXQgd2FzIGNoYW5nZSB0aGVyZSBpcyBub25lLgotCSAgRml4ZXMgIzcxMjMwMwotCi0yMDEzLTExLTE0IDA5OjIwOjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVuYW1lIHByb3BlcnR5IHRvICdzdGF0cycKLQkgIFRoaXMgbWFrZXMgdGhlIHVuaXQgdGVzdCB3b3JrLgotCSAgV2UgY2FuIGxhdGVyIGFsc28gYWRkIG1vcmUgc3RhdHMsIG5vdCBzcGVjaWZpYyB0byByZXRyYW5zbWlzc2lvbi4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTE0MTEKLQotMjAxMy0xMS0xMiAxMToxOToyNSAtMDUwMCAgVG9ycmllIEZpc2NoZXIgPHRvcnJpZS5maXNjaGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogaW1wbGVtZW50IHJ0eCBzdGF0aXN0aWNzCi0KLTIwMTMtMTEtMTMgMTA6NDI6MjEgKzAwMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJvYmplY3Q6IHByaW50IEZPVVJDQ19GT1JNQVQgd2hlbiBlbnVtZXJhdGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjIwNgotCi0yMDEzLTExLTA2IDEyOjQwOjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYWR2YW5jZSBleHBlY3RlZCBzZXFudW0gYWZ0ZXIgZHJvcHBpbmcKLQkgIEFmdGVyIGRyb3BwaW5nIGEgYnVmZmVyLCBtb3ZlIG91ciBleHBlY3RlZCBzZXFudW0KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jCi0KLTIwMTMtMTEtMDQgMTU6NDY6MjIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBnc3RwYXk6IG9ubHkgc2VuZCBvbmUgY2FwcwotCSAgT25seSBzZW5kIG9uZSBjYXBzIGluIGEgcGFja2V0LiBUd28gY2FwcyBjYW4gaGFwcGVuIHdoZW4gc2V0Y2FwcyBpcyBjYWxsZWQgYW5kCi0JICB0aGUgY29uZmlnLWludGVydmFsIGV4cGlyZXMgYXQgdGhlIHNhbWUgdGltZS4KLQotMjAxMy0xMS0xMyAxMDoyMzoxOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogVXNlIHRoZSBzeW5jZWQgYnVmZmVyIG1vZGUgaW4gYXV0byBtb2RlIGlmIGEgY2xvY2sgcHJvdmlkZXIgaXMgaW4gdGhlIFNEUAotCi0yMDEzLTExLTA4IDExOjA5OjIxICswMDAwICBNYXJjIExlZW1hbiA8bWFyYy5sZWVtYW5AZ21haWwuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogaW5pdCB2NGwyX2J1ZmZlciB0byAweDAgYmVmb3JlIGlvY3RsCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyMTM3Ci0KLTIwMTMtMTEtMTEgMTU6Mjc6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHJlbW92ZSBjb2xsaXNpb24gcmVjb25maWd1cmUgZXZlbnQKLQkgIFJlbW92ZSBib2d1cyByZWNvbmZpZ3VyZSBldmVudCBvbiBjb2xsaXNpb24sIHdlIGRvbid0IHdhbnQgdG8gc2VuZCB0aGUgZXZlbnQgb24KLQkgIHRoZSByZWNlaXZpbmcgUlRQIHBhZCBhbmQgdGhlIGNvbGxpc2lvbiBldmVudCBpcyBub3cgaGFuZGxpbmcgdGhpcwotCSAgY2FzZS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExNTYwCi0KLTIwMTMtMTEtMDEgMTc6MDQ6MjggKzAwMDAgIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBnc3RydHBzZXNzaW9uOiBzZW5kIGN1c3RvbSB1cHN0cmVhbSBldmVudCAiR3N0UlRQQ29sbGlzaW9uIiBvbiBzZW5kX3J0cF9zaW5rIHBhZAotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTE1NjAKLQotMjAxMy0xMS0xMSAxNDoyNTo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwc2Vzc2lvbi5jOgotCSAgY2hlY2s6IGFkZCBydHBzZXNzaW9uIHRlc3QKLQkgIEFkZCBhIGJhc2ljIHJ0cHNlc3Npb24gdGVzdCB0byBlbnN1cmUgdGhhdCBSUiBibG9ja3MgYXJlIGdlbmVyYXRlZCB3aGVuCi0JICBtdWx0aXBsZSBTU1JDIHNlbmRlcnMgYXJlIGFjdGl2ZS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEyNzAKLQotMjAxMy0xMS0xMSAxMzoxNzoyNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogY29ycmVjdGx5IGhhbmRsZSB0aW1lc3RhbXBzIHdoZW4gcGFyc2luZyB4LXByaXZhdGUxLWFjMwotCSAgLi4uIHRoZSB3YXkgaXQgaGFzIGFsd2F5cyB3b3JrZWQgZmluZSBpbiBhNTJkZWMuCi0KLTIwMTMtMTEtMDUgMTA6NDg6MzMgKzAyMDAgIEdlb3JnZSBLaWFnaWFkYWtpcyA8Z2VvcmdlLmtpYWdpYWRha2lzQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBmaXggY3Jhc2ggd2hlbiBkby1yZXRyYW5zbWlzc2lvbj10cnVlIGFuZCBhIGxvdCBvZiBidWZmZXJzIGFyZSBsb3N0Ci0JICBUaGUgcHJvYmxlbSBoZXJlIHdhcyB0aGF0IHRoZSBqaXR0ZXJidWZmZXIgbG9jayB3YXMgdW5sb2NrZWQgdG8gcHVzaAotCSAgdGhlIGV2ZW50LCBidXQgdGhhdCBjYXVzZWQgYW5vdGhlciB0aHJlYWQgdG8gcmVtb3ZlIHRoZSB0aW1lciBjdXJyZW50bHkKLQkgIGJlaW5nIHByb2Nlc3NlZCwgcHJvYmFibHkgYmVjYXVzZSB0aGUgYW1vdW50IG9mIHJ0eCBldmVudHMKLQkgIChhbmQgdGhlcmVmb3JlIHRpbWVycykgd2FzIGdldHRpbmcgdG9vIGhpZ2guIFRoZSBzb2x1dGlvbiBpcyB0bwotCSAgdW5sb2NrIGFuZCBwdXNoIHRoZSBldmVudCBvbmx5IGFmdGVyIHRpbWVyIHByb2Nlc3NpbmcgaGFzIGZpbmlzaGVkLgotCSAgZml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTEzMQotCi0yMDEzLTEwLTI0IDEzOjE2OjQyICswMjAwICBQZXIgeCBKb2hhbnNzb24gPHBlcnhqb2hAYXhpcy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQXZvaWQgZGl2aXNpb24gYnkgemVybyBhc3NlcnQgaW4gZ3N0X21hdHJvc2thX2RlbXV4X3NlYXJjaF9wb3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTE4MjkKLQotMjAxMy0xMS0wOCAxNzo1OToyNCArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkgIHdhdmVuYzogZ2VuZXJhdGUgYSBub24tZW1wdHkgZGF0YSBoZWFkZXIKLQkgIFJlc3RvcmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBlbGVtZW50IHRvIHRoZSBzdGF0ZSBiZWZvcmUgY29tbWl0Ci0JICBkYjI5NTIyYTQzMGU0NDQ1MDQxNWNhMzY3NmFiZDFiNzdlZTkyM2Q5LiBBIG5vbi1lbXB0eSBoZWFkZXIgaXMKLQkgIGdlbmVyYXRlZCBhbmQgd2hlbiB0aGUgRU9TIGV2ZW50IGlzIHJlY2VpdmVkIHRoZSBoZWFkZXIgaXMgZ2VuZXJhdGVkCi0JICBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggdGhlIGNvcnJlY3Qgc2l6ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTE2OTkKLQotMjAxMy0xMS0wNyAxNjoxNzoxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IHVwZGF0ZSByZWNlaXZlciBzdGF0cyBmb3Igc2VuZGVyCi0JICBBbiBpbnRlcm5hbCBzZW5kZXIgaW4gYSBzZXNzaW9uIGlzIGFsc28gYSByZWNlaXZlciBvZiBpdHMgb3duIHBhY2tldHMgc28gdXBkYXRlCi0JICB0aGUgcmVjZWl2ZXIgc3RhdHMuIE90aGVyIHNlbmRlcnMgaW4gdGhlIHNlc3Npb24gd2lsbCB1c2UgdGhpcyBpbmZvIHRvIGdlbmVyYXRlCi0JICBjb3JyZWN0IFJCIGJsb2NrcyBpbiB0aGVpciBTUiByZXBvcnRzLgotCi0yMDEzLTExLTA3IDE2OjEzOjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogcmVmYWN0b3IgcmVjZWl2ZXIgc3RhdHMgdXBkYXRlCi0KLTIwMTMtMTAtMjUgMTg6MjI6MDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGhhbmRsZSBmcmFnbWVudGVkIGZpbGVzIHdpdGggbWRhdCBiZWZvcmUgbW9vZnMKLQkgIEFzc3VtZSBhIGZpbGUgd2l0aCBhdG9tcyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOiBtb292LCBtZGF0LCBtb29mLAotCSAgbWRhdCwgbW9vZiAuLi4KLQkgIFRoZSBmaXJzdCBtb292IHVzdWFsbHkgZG9lc24ndCBjb250YWluIGFueSBzYW1wbGUgZW50cmllcyBhdG9tcyAob3IKLQkgIHRoZXkgYXJlIGFsbCBzZXQgdG8gMCBsZW5ndGgpLCBiZWNhdXNlIHRoZSByZWFsIHNhbXBsZXMgYXJlIHNpZ25hbGVkCi0JICBhdCB0aGUgbW9vZnMuIEluIHB1c2ggbW9kZSwgcXRkZW11eCBwYXJzZXMgdGhlIG1vb3YgYW5kIHRoZW4gZmluZHMgdGhlIG1kYXQsCi0JICBidXQgdGhlbiBpdCBoYXMgMCBlbnRyaWVzIGFuZCBhc3N1bWVzIGl0IGlzIEVPUy4KLQkgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgY29udGludWUgcGFyc2luZyBpbiBjYXNlIGl0IGlzIGEgZnJhZ21lbnRlZCBmaWxlIHNvIHRoYXQKLQkgIGl0IG1pZ2h0IGZpbmQgdGhlIG1vb2ZzIGFuZCBwbGF5IHRoZSBtZWRpYS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA2MjMKLQotMjAxMy0xMC0yNSAxMTo0MjozNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dHMuc2FudG9zQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBXaGVuIHVzaW5nIGEgYnVmZmVyZWQgbWRhdCwgc3RvcmUgYWxsIHJlY2VpdmVkIGRhdGEgZm9yIGxhdGVyIHVzZQotCSAgSW4gcHVzaCBtb2RlLCB3aGVuIHF0ZGVtdXggY2FuJ3QgdXNlIGEgc2VlayB0byBza2lwIHRoZSBtZGF0IGJ1ZmZlciBpdCBoYXMKLQkgIHRvIGJ1ZmZlciBpdCBmb3IgbGF0ZXIgdXNlLgotCSAgVGhlIGlzc3VlIGlzIHRoYXQgYWZ0ZXIgcGFyc2luZyB0aGUgbmV4dCBtb292L21vb2YsIHRoZXJlIG1pZ2h0IGJlIHNvbWUKLQkgIHRyYWlsaW5nIGJ5dGVzIGZyb20gdGhlIG5leHQgYXRvbSBpbiB0aGUgZmlsZS4gVGhpcyBkYXRhIHdhcyBiZWluZyBkaXNjYXJkZWQKLQkgIGFsb25nIHdpdGggdGhlIGFscmVhZHkgcGFyc2VkIG1vb3YvbW9vZiBhbmQgcGxheWJhY2sgd291bGQgZmFpbCB0byBjb250aW51ZQotCSAgYWZ0ZXIgdGhlIGNvbnRlbnRzIG9mIHRoaXMgbW9vdi9tb29mIGFyZSBwbGF5ZWQuCi0JICBUaGlzIGlzIHBhcnRpY3VsYXJseSBiYWQgb24gZnJhZ21lbnRlZCBmaWxlcyB0aGF0IGhhdmUgdGhlIG1kYXQgYmVmb3JlIHRoZQotCSAgY29ycmVzcG9uZGluZyBtb29mLiBTbyB5b3UnZCBnZXQ6Ci0JICBtZGF0fG1vb2Z8bWRhdHxtb29mIC4uLgotCSAgV2hlbiBhIG1vb2Ygd2FzIHJlY2VpdmVkLCBpdCB1c3VhbGx5IGNhbWUgd2l0aCBzb21lIGV4dHJhIGJ5dGVzIHRoYXQgd291bGQKLQkgIGJlbG9uZyB0byB0aGUgbmV4dCBtZGF0IChiZWNhdXNlIHVwc3RyZWFtIGRvZXNuJ3QgY2FyZSBhYm91dCBhdG9tcyBhbGlnbm1lbnQpLgotCSAgU28gdGhvc2UgYnl0ZXMgd2VyZSBiZWluZyBkaXNjYXJkZWQgYW5kIHBsYXliYWNrIHdvdWxkIGZhaWwuCi0JICBUaGlzIHBhdGNoIG1ha2VzIHF0ZGVtdXggc3RvcmUgdGhvc2UgZXh0cmEgYnl0ZXMgdG8gcmV1c2UgdGhlbSBsYXRlciBhZnRlciB0aGUKLQkgIG1kYXQgaXMgZW1wdGllZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA2MjMKLQotMjAxMy0xMS0wNyAwOTo0OTo1NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogQWxzbyB1c2UgdGhlIGJpbmQtcG9ydCBwcm9wZXJ0eSBpZiBubyBiaW5kLWFkZHJlc3Mgd2FzIGdpdmVuCi0KLTIwMTMtMTEtMDcgMDA6NTE6MTIgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW9oYWwuYzoKLQkgIG9zeGF1ZGlvc2luazogZml4IHNlZ2ZhdWx0IHdoZW4gd2UgY2FuJ3QgZ2V0IHRoZSBjaGFubmVscyBsYXlvdXQKLQotMjAxMy0xMS0wNSAxNzoyNjo0OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkgIHJ0cHZwOHBheTogTWFrZSBQaWN0dXJlIElEIG1vZGUgY29uZmlndXJhYmxlIGFuZCBkZWZhdWx0IHRvIG5vIHBpY3R1cmUgSUQKLQkgIFNvbWUgaW1wbGVtZW50YXRpb25zIChsaW5waG9uZSkgb25seSBzdXBwb3J0IG5vIHBpY3R1cmUgYXQgYWxsIGluIHRoZQotCSAgc3RyZWFtIGFuZCB3aWxsIGZhaWwgaWYgb25lIGlzIHByb3ZpZGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTQ5NwotCi0yMDEzLTExLTA1IDExOjE4OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODY1YWEyMCB0byBkYmVkYWEwCi0KLTIwMTMtMDEtMjkgMTA6NTE6MDcgKzAxMDAgIFBhdWwgSEVOUllTIDx2aXNlY2hlbGxlQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBBZGQgY2FsbCB0byBnc3RfcnRwX2gyNjRfcGF5X2NsZWFyX3Nwc19wcHMoKSB3aGVuIHJlY2VpdmluZyBhIFNUUkVBTV9TVEFSVCBldmVudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjc4NwotCi0yMDEzLTExLTAyIDIyOjUwOjQ3ICswMTAwICBSaWNvIFR6c2NoaWNoaG9seiA8cmljb3R6QHVidW50dS5jb20+Ci0KLQkqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcDogQWRkIG1pc3NpbmcgZ2lvLTIuMCBkZXBzIGFuZCBpbmNsdWRlcwotCi0yMDEzLTExLTAxIDE4OjMxOjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5jOgotCSAgYXVkaW9paXJmaWx0ZXI6IEZpeCBpbml0aWFsaXphdGlvbiBjb2VmZmljaWVudCBoYW5kbGluZwotCSAgQnJva2UgdW5pdCB0ZXN0LgotCi0yMDEzLTEwLTMxIDE0OjA1OjQzIC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXVlIDxhbGVpeEBvYmxvbmcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhbGxvdyBzZXR0aW5nIHRscyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGZsYWdzCi0JICBBZGRlZCBhIG5ldyBwcm9wZXJ0eSAidGxzLXZhbGlkYXRpb24tZmxhZ3MiLiBJZiB0aGUgdXJsIHRyYW5zcG9ydCBpcwotCSAgVExTLCB0aGUgdmFsaWRhdGlvbiBmbGFncyB3aWxsIGJlIHNldCB0byB0aGUgcnRzcCBjb25uZWN0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTIzMAotCi0yMDEzLTEwLTMxIDIyOjQzOjQ5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkgIGF1ZGlvaWlyZmlsdGVyOiBEb24ndCBjcmFzaCBpZiBubyBmaWx0ZXIgY29lZmZpY2llbnRzIGFyZSBwcm92aWRlZAotCSAgLi4uYW5kIGJ5IGRlZmF1bHQgdXNlIGEgaWRlbnRpdHkgZmlsdGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDIxNQotCi0yMDEzLTEwLTMxIDE5OjE1OjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICB3YXZwYWNrZW5jOiBGaXggd3JpdGluZyBvZiBNRDUgc3VtcyBhbmQgb3RoZXIgbWV0YWRhdGEgYmxvY2tzCi0JICBUaGVzZSBkb24ndCBoYXZlIHRoZSBGSU5BTF9CTE9DSyBmbGFnIHNldC4KLQotMjAxMy0xMC0zMSAxMzowMjoxMSAtMDIwMCAgRGphbG1hIEzDumNpbyBTb2FyZXMgZGEgU2lsdmEgPGRsdWNpb0BpbXBhLmJyPgotCi0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JICBoZHYxMzk0c3JjOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHNlbGVjdCBhIGNhbWVyYSBieSBpdHMgR1VJRAotCSAgVGhlIHNvdXJjZSBoZHYxMzk0c3JjIGhhcyB0aGUgZ3VpZCBwcm9wZXJ0eSB0aGF0IHBlcm1pdHMgc2VsZWN0IGEgY2FtZXJhCi0JICBjb25uZWN0ZWQgZnJvbSBpdHMgR1VJRCBudW1iZXIuCi0JICBIb3dldmVyIHdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXR0ZWQgdGhlIHNlbGVjdGVkIGNhbWVyYSBpcyBub3QgY2hhbmdlZC4KLQkgIFRoZSBzb3VyY2UgY29udGludWVzIHVzaW5nIHRoZSBkZWZhdWx0IGNhbWVyYS4KLQkgIFRoaXMgcHJvYmxlbSB3YXMgc29sdmVkIHVzaW5nIHRoZSBmdW5jdGlvbiBpZWM2MTg4M19jbXBfY29ubmVjdC4KLQkgIFRoZSByZWZlcmVuY2UgZm9yIHRoZSBmdW5jdGlvbiBjb3VsZCBiZSBmb3VuZCBoZXJlOgotCSAgaHR0cDovL3d3dy5kZW5uZWR5Lm9yZy9saWJpZWM2MTg4My9BUEktaWVjNjE4ODMtY21wLWNvbm5lY3QuaHRtbAotCSAgVGhlIHNvbHV0aW9uIGNhbWUgZnJvbSBkdmdyYWIgc291cmNlIGNvZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDE1Ci0KLTIwMTMtMTAtMzEgMTM6MjA6NDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgdGVzdHM6IHNvdXBodHRwc3JjOiBhZGQgZXhwbGljaXQgY2FzdCB0byBzaWxlbmNlIHdhcm5pbmcKLQkgIFNpbGVuY2luZyB0aGlzIHdhcm5pbmc6Ci0JICBlbGVtZW50cy9zb3VwaHR0cHNyYy5jOjUzMzoxNDogZXJyb3I6IGNvbXBhcmlzb24gYmV0d2VlbiDigJhTb3VwS25vd25TdGF0dXNDb2Rl4oCZIGFuZCDigJhlbnVtIDxhbm9ueW1vdXM+4oCZIFstV2Vycm9yPWVudW0tY29tcGFyZV0KLQkgIGlmIChzdGF0dXMgIT0gU09VUF9TVEFUVVNfT0sgJiYgIXNlbmRfZXJyb3JfZG9jKQotCSAgV2l0aCBnY2MgNC44LjIgKGRlYmlhbikKLQotMjAxMy0xMC0zMSAxMDozODozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwcm94eSBuZXcgYnVmZmVyIG1vZGUKLQotMjAxMy0xMC0zMCAxNjo0OTozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIGppdHRlcmJ1ZmZlcjogYWRkIG5ldyB0aW1lc3RhbXAgbW9kZQotCSAgQWRkIGEgbmV3IHRpbWVzdGFtcCBtb2RlIHRoYXQgYXNzdW1lcyB0aGUgbG9jYWwgYW5kIHJlbW90ZSBjbG9jayBhcmUKLQkgIHN5bmNocm9uaXplZC4gSXQgdGFrZXMgdGhlIGZpcnN0IHRpbWVzdGFtcCBhcyBhIGJhc2UgdGltZSBhbmQgdGhlbiB1c2VzIHRoZSBSVFAKLQkgIHRpbWVzdGFtcHMgZm9yIHRoZSBvdXRwdXQgUFRTLgotCi0yMDEzLTEwLTMwIDIyOjEyOjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiBGaXggY29tcGlsZXIgd2FybmluZwotCSAgbWF0cm9za2EtZGVtdXguYzogSW4gZnVuY3Rpb24gJ2dzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtJzoKLQkgIG1hdHJvc2thLWRlbXV4LmM6MTM3OTo3OiBlcnJvcjogZm9ybWF0ICcldScgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlICd1bnNpZ25lZCBpbnQnLCBidXQgYXJndW1lbnQgNCBoYXMgdHlwZSAnZ3VpbnQ2NCcgWy1XZXJyb3I9Zm9ybWF0PV0KLQkgICIlMDN1IiwgY29udGV4dC0+dWlkKTsKLQkgIF4KLQotMjAxMy0xMC0yOCAxMzoyMToxNSArMDAwMCAgTWF0dGhpZXUgQm91cm9uIDxtYXR0aGlldS5ib3Vyb25AY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9jb252ZXJ0LmM6Ci0JICB2aWRlb21peGVyOiByZW1vdmUgdW5uZWVkZWQgZ3VpbnQgY29tcGFyYWlzb24KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEwMTAKLQotMjAxMy0xMC0yOCAxNDoxMzoxMiArMDAwMCAgTWF0dGhpZXUgQm91cm9uIDxtYXR0aGlldS5ib3Vyb25AY29sbGFib3JhLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkgIG9zeHZpZGVvc2luazogZml4IG1pc3Npbmcgc2VsZWN0b3IgbmFtZSB3YXJuaW5ncwotCSAgVGhlIHNwYWNlcyBtYXR0ZXIgaW4gT2JqQwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTAxMwotCi0yMDEzLTEwLTI4IDEzOjMxOjM0ICswMDAwICBNYXR0aGlldSBCb3Vyb24gPG1hdHRoaWV1LmJvdXJvbkBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgeTRtZW5jOiBmaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMDExCi0KLTIwMTMtMTAtMjUgMTE6MzA6MzYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRzLnNhbnRvc0BwYXJ0bmVyLnNhbXN1bmcuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGNoZWNrIGlmIHRoZSBlbmRfdGltZSBpcyBkZWZpbmVkIGJlZm9yZSB1c2luZyBpdAotCSAgQXZvaWRzIHNlbmRpbmcgRU9TIHRvbyBzb29uIGJlY2F1c2Ugb2Ygb3ZlcmZsb3cuIENhbiBoYXBwZW4gb24KLQkgIGZyYWdtZW50ZWQgbXA0IHBsYXliYWNrLgotCi0yMDEzLTEwLTIzIDEzOjM4OjIwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1c2UgY29ycmVjdCB1bnJlZiBmdW5jdGlvbgotCSAgRXZlbnRzIGFyZW4ndCBHc3RPYmplY3RzLCBidXQgR3N0TWluaU9iamVjdHMKLQotMjAxMy0xMC0xNSAwODoxNjoyMCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZW5hbWUgY2h1bmtzX2FyZV9jaHVua3MgdG8gY2h1bmtzX2FyZV9zYW1wbGVzIGFuZCBmbGlwIHRoZSBsb2dpYwotCSAgQXMgdGhlIHZhcmlhYmxlIG5hbWUgc3VnZ2VzdHMsIHNvbWV0aW1lcyBjaHVua3MgYXJlIGNodW5rcy4gUmVuYW1lIHRoZSB2YXJpYWJsZQotCSAgdG8gdGVsbCB3aGF0IHRoZXkgYXJlIHdoZW4gdGhleSBhcmUgbm90IGNodW5rcy4KLQotMjAxMy0xMC0wOSAwODowNDoyMCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggdHlwb3MgYW5kIGFkZCBtb3JlIGxvZ2dpbmcgZm9yIHVuaGFuZGxlZCBwYXJ0cwotCi0yMDEzLTEwLTE0IDE2OjIzOjI1ICswMjAwICBPZ255YW4gVG9uY2hldiA8b2dueWFuQGF4aXMuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBGaXggbWVtb3J5IGxlYWsKLQkgIFVubWFwIGFsbCBHc3RNZW1vcnkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIHdoZW4gZmx1c2hpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwMTEwCi0KLTIwMTMtMTAtMTIgMjA6NDQ6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IGZpeCBicm9rZW4gc2FtcGxlIHBpcGVsaW5lCi0JICB3aGljaCB3YXMgbXV4aW5nIHJhdyBhdWRpbyBhbmQgdmlkZW8gaW50byBmbHZtdXgsIHdoaWNoIHdvbid0IHdvcmssCi0JICBldmVuIGlmIHRoZXJlIHdlcmUgY29udmVydGVycy4KLQotMjAxMy0xMC0xMiAyMDozNzo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogcmVxdWlyZSBzdHJlYW0tZm9ybWF0PXJhdyBmb3IgbXBlZy0yIHRvbywgYnV0IGRvbid0IHJlcXVpcmUgZnJhbWVkIGZpZWxkCi0JICByYXcgaW1wbGllcyB0aGF0IGl0J3MgZnJhbWVkIGFscmVhZHkuIEZpeGVzIC4uICEgZmFhYyAhIGZsdm11eAotCi0yMDEzLTEwLTA3IDE0OjI3OjIxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0cy5zYW50b3NAcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogZG8gbm90IGVtaXQgRU9TIHdoZW4gY29ubmVjdGlvbiBkcm9wcwotCSAgSWYgdGhlIHBpcGVsaW5lIGlzIHN0YWxsZWQgZm9yIHRvbyBsb25nLCBzb3VwaHR0cHNyYyB3aWxsIGJsb2NrIGFuZAotCSAgc3RvcCBmZXRjaGluZyBkYXRhIGZyb20gdGhlIG5ldHdvcmsuIFRoaXMgY2FuIGNhdXNlIHRoZSBjb25uZWN0aW9uIHRvCi0JICBkcm9wIGFuZCBzb3VwaHR0cHNyYyB3b3VsZCBoYW5kbGUgaXQgYXMgYW4gRU9TLiBUaGlzIHBhdGNoIG1ha2VzIGl0Ci0JICBwZXJzaXN0IGFuZCB0cnkgdG8gZmV0Y2ggbW9yZSBkYXRhIHVudGlsIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgbGVuZ3RoCi0JICBvciB1bnRpbCByZWNlaXZpbmcgYW4gZXJyb3IgdGhhdCBpdCBpcyBiZXlvbmcgbGltaXRzIGluIGNhc2UgdGhlIGNvbnRlbnQKLQkgIGlzIHVua25vd24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzNTM2Ci0KLTIwMTMtMTAtMTAgMTM6NTI6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuaDoKLQkgIGR2ZGVjOiBEb24ndCBzZW5kIHNlZ21lbnQgZXZlbnQgYmVmb3JlIGNhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk3MjgKLQotMjAxMy0xMC0wOSAxNzo0NjozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZHZkZW11eDogU2VuZCBzdHJlYW0tc3RhcnQsIGNhcHMgYW5kIHNlZ21lbnQgZXZlbnRzIGluIHRoZSByaWdodCBvcmRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTcyOAotCi0yMDEzLTEwLTA4IDExOjI4OjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICB3YXZlbmM6IEEtTGF3IGFuZCBNdS1MYXcgZG9uJ3QgaGF2ZSB3aWR0aC9kZXB0aC9zaWduZWQgY2FwcyBmaWVsZHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk2MTQKLQotMjAxMy0xMC0wNyAxMjo1NDoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYzoKLQkgIGRlaW50ZXJsYWNlOiBGaXggaGFuZGxpbmcgb2YgcGxhbmFyIHZpZGVvIGZvcm1hdHMgaW4gZ3JlZWR5aCBtZXRob2QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk1MDcKLQotMjAxMy0xMC0wNiAxMDowMToyNiAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBUcml2aWFsIGdyYW1tYXIgZml4IG9uIGRlYnVnIG1zZwotCi0yMDEzLTEwLTA2IDA5OjE3OjAwIC0wNzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyLnZlcmRlam9AcGFydG5lci5zYW1zdW5nLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSogZ3N0L21hdHJvc2thL3dlYm0tbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogQWRkIGNvbnRleHQgZmxhZyBmb3IgV2ViTQotCSAgV2ViTSBoYXMgYSBjb3VwbGUgb2Ygc3BlY2lmaWMgcmVxdWlyZW1lbnRzIHdlIG5lZWQgdG8gaGFuZGxlLgotCSAgSWRlYSBpcyB0byBzZXQgdGhpcyBmbGFnIG9uY2UgYW5kIGp1c3QgcmVseSBvbiBtdXgtPmlzX3dlYm0KLQkgIGF0IHJ1biB0aW1lIGluc3RlYWQgb2YgcmVwZWF0ZWRseSBmaWd1cmluZyB0aGlzIG91dCBmcm9tCi0JICBHU1RfTUFUUk9TS0FfRE9DVFlQRV9XRUJNICh3aGljaCByZXF1aXJlcyBhIHN0cmNtcCgpKS4KLQotMjAxMy0xMC0wNCAxNDo0Mjo1OSAtMDcwMCAgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHBhcnRuZXIuc2Ftc3VuZy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBEbyBub3Qgd3JpdGUgU2VnbWVudFVJRCBmb3IgV2ViTSBtdXgKLQkgIFdlYk0gc3BlYyBzdGF0ZXMgU2VnbWVudFVJRCBpcyBVbnN1cHBvcnRlZC4gRmlsZXMgcHJvZHVjZWQKLQkgIHdpdGggZ3N0cmVhbWVyIHdpdGhvdXQgdGhpcyBjaGFuZ2Ugd2lsbCBzcGl0IGFuIGVycm9yIGxpa2UKLQkgIHRoaXMgd2hlbiBwYXNzZWQgdG8gbWt2YWxpZGF0b3I6Ci0JICBFUlIyMDE6IEludmFsaWQgJ1NlZ21lbnRVSUQnIGZvciBwcm9maWxlICd3ZWJtJyBpbiBJbmZvIGF0IDE5MgotCi0yMDEzLTEwLTA1IDAwOjAwOjAzICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG1ha2UgZHZkIHBhbGV0dGUgY2hhbmdlIGV2ZW50IHN0aWNreQotCSAgU28gdGhleSBkb24ndCBnZXQgbG9zdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk0NTQKLQotMjAxMy0xMC0wMyAxNjozOToyNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmg6Ci0JICB2aWRlb2ZsaXA6IEFkZCBhdXRvbWF0aWMgZmxpcCBtb2RlIGRyaXZlbiBieSBpbWFnZS1vcmllbnRhdGlvbiB0YWcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkzMTIKLQotMjAxMy0xMC0wNCAxMzozNDowOSArMDIwMCAgUGV0ZXIgS29yc2dhYXJkIDxwZXRlckBrb3JzZ2FhcmQuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IE9fQ0xPRVhFQyBuZWVkcyBfR05VX1NPVVJDRQotCSAgT24gc29tZSBzeXN0ZW1zIChFLkcuIHVDbGliYyBhbmQgb2xkZXIgR2xpYmMgdmVyc2lvbnMpLCBPX0NMT0VYRUMgaXMgb25seQotCSAgZGVmaW5lZCB3aGVuIF9HTlVfU09VUkNFIGlzIHNwZWNpZmllZCwgc28gZG8gc28uCi0JICBfR05VX1NPVVJDRSBuZWVkcyB0byBiZSBkZWZpbmVkIGJlZm9yZSBhbnkgc3lzdGVtIGhlYWRlcnMgYXJlIGluY2x1ZGVkLAotCSAgc28gbW92ZSB0aGUgZmNudGwuaCBzZWN0aW9uIHVwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTQyMwotCi0yMDEzLTEwLTA0IDEyOjExOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogZml4IHJhY2UgaW4gZmx1c2gtc3RhcnQvZmx1c2gtc3RvcAotCSAgV2hlbiBmbHVzaC1zdG9wIGFycml2ZXMgYmVmb3JlIHdlIHByb2Nlc3MgdGhlIHJlc3VsdCBvZiB0aGUgX3B1c2goKSBpbiB0aGUKLQkgIGxvb3AgZnVuY3Rpb24sIHdlIG1pZ2h0IHBhdXNlIGV2ZW4gdGhvdWdoIHdlIGFyZSBub3QgZmx1c2hpbmcgYW55bW9yZS4gRml4IHRoaXMKLQkgIHJhY2UgYnkgd2FpdGluZyBmb3IgdGhlIHNyY3BhZCBsb29wIGZ1bmN0aW9uIHRvIGNvbXBsZXRlbHkgcGF1c2UgYWZ0ZXIgZG9pbmcgdGhlCi0JICBmbHVzaC1zdGFydC4KLQotMjAxMy0xMC0wMyAyMjozODo0MyArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWR1cG9uY2hlbGxlMUBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvY29udmVydC5jOgotCSAgdmlkZW9taXhlcjogVXBkYXRlIHZpZGVvY29udmVydCBjb3B5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MzkwCi0KLTIwMTMtMTAtMDMgMjE6MzY6MzQgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1kdXBvbmNoZWxsZTFAZ21haWwuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogQ2hlY2sgaWYgdGhlIHBhZCBuZWVkcyByZWNvbmZpZ3VyYXRpb24gaW4gY29sbGVjdGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5Mzg0Ci0KLTIwMTMtMTAtMDMgMTQ6Mzk6MzUgKzAxMDAgIE1hdHRoaWV1IEJvdXJvbiA8bWF0dGhpZXUuYm91cm9uQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IFJlbGF4IHNpbmsgY2FwcwotCSAgU2luY2UganBlZ2RlYyBhbHJlYWR5IHBhcnNlIHRoZSBqcGVnIHN0cmVhbSwgdGhlIHNpbmsgY2FwcyBjb3VsZCBiZQotCSAgcmVsYXhlZC4gVGhpcyB3aWxsIGFsbG93IGpwZWdkZWMgdG8gYmUgc2VsZWN0ZWQgaW4gbW9yZSBjYXNlIGFuZCBpbgotCSAgcGFydGljdWxhciB3aGVuIHRoZSBqcGVnIHR5cGVmaW5kZXIgZG9lcyBub3QgZmluZCB0aGUgd2lkdGggYW5kIGhlaWdodC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkzNTIKLQotMjAxMy0xMC0wMyAxODozMzowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogcHJpbnQgcHJvYmVkIGNhcHMgYXMgY2FwcyBhZ2FpbiBpbiBkZWJ1ZyBsb2cKLQkgIFRoaXMgZ290IGxvc3QgZHVyaW5nIHJlZmFjdG9yaW5nLgotCi0yMDEzLTEwLTAzIDExOjU5OjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQWRkIHN1cHBvcnQgZm9yIHRoZSBtcDJ2IGZvdXJjYyBmb3IgTVBFRy0yIHZpZGVvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MjcwCi0KLTIwMTMtMTAtMDIgMTU6NTY6NTMgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRml4IG1lbW9yeSBsZWFrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MjY2Ci0KLTIwMTMtMDktMzAgMTI6MzE6NDIgKzAzMDAgIFNyZWVyZW5qIEJhbGFjaGFuZHJhbiA8c3JlZXJlbmouYmFsYWNoYW5kcmFuQGludGVsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIHF0ZGVtdXg6IEFkZCBIRVZDIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDkwOTMKLQotMjAxMy0wOS0zMCAxMjoyNDozMiArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkgIHJ0cGdzdHBheTogRml4IG1lbW9yeSBsZWFrCi0JICBXZSB3ZXJlIGxlYWtpbmcgdGhlIEdMaXN0IG5vZGVzIG9mIHRoZSBwZW5kaW5nIGJ1ZmZlcnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5MDc5Ci0KLTIwMTMtMDktMzAgMTI6MzE6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGZpeCByYWNlIHdoZW4gdXBkYXRpbmcgdGhlIG5leHRfc2VxbnVtCi0JICBJZiB3ZSB3ZXJlIG5vdCB3YWl0aW5nIGZvciB0aGUgbWlzc2luZyBzZXFudW0gd2hlbiB3ZSBpbnNlcnQgdGhlIGxvc3QgcGFja2V0Ci0JICBldmVudCBpbiB0aGUgaml0dGVyYnVmZmVyLCB3ZSBlbmQgdXAgbm90IHVwZGF0aW5nIHRoZSBuZXh0X3NlcW51bSBhbmQgd2FpdAotCSAgZm9yZXZlciBmb3IgdGhlIGxvc3QgcGFja2V0cyB0byBhcnJpdmUuIEluc3RlYWQsIGtlZXAgdHJhY2sgb2YgdGhlIGFtb3VudCBvZgotCSAgcGFja2V0cyBjb250YWluZWQgYnkgdGhlIGppdHRlcmJ1ZmZlciBpdGVtIGFuZCB1cGRhdGUgdGhlIG5leHQgZXhwZWN0ZWQKLQkgIHNlcW51bSBvbmx5IGFmdGVyIHB1c2hpbmcgdGhlIGJ1ZmZlci9ldmVudC4gVGhpcyBtYWtlcyBzdXJlIHdlIGNvcnJlY3RseSBoYW5kbGUKLQkgIEdBUFMgaW4gdGhlIHNlcXVlbmNlIG51bWJlcnMuCi0KLTIwMTMtMDktMzAgMTI6MzA6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBzbWFsbCBkZWJ1ZyBpbXByb3ZlbWVudAotCi0yMDEzLTA5LTMwIDExOjUzOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVzZXQgc2tldyBkb2VzIG5vdCByZXNldCBjbG9jay1yYXRlCi0JICBEb24ndCByZXNldCB0aGUgY2xvY2stcmF0ZSB3aGVuIHdlIHJlc2V0IHRoZSBza2V3IGNvcnJlY3Rpb24gYWxnb3JpdGhtLgotCSAgUmVzZXQgdGhlIHNrZXcgY29ycmVjdGlvbiBhbGdvcml0aG0gd2hlbiB3ZSBjaGFuZ2UgdGhlIGNsb2NrLXJhdGUuCi0KLTIwMTMtMDktMzAgMTE6MTY6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBwYXVzZSB0aW1lciB3aGVuIFBBVVNFRAotCSAgQWxzbyBwYXVzZSB0aGUgdGltZXIgd2hlbiB3ZSBnbyB0byB0aGUgUEFVU0VEIHN0YXRlLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlCi0JICBkb24ndCBoYXZlIGEgY2xvY2sgb3IgYmFzZS10aW1lIGluIFBBVVNFRCB0byBwZXJmb3JtIHRoZSB0aW1lb3V0cy4KLQotMjAxMy0wOS0zMCAxMToxNToyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGltcHJvdmUgZGVidWcKLQotMjAxMy0wOS0yNiAyMDo0MToyNiArMDIwMCAgSGFucyBNw6Vuc3NvbiA8aGFuc21AYXhpcy5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkgIG1wNG11eDogRG8gbm90IHJlcXVpcmUgZnJhbWVyYXRlIGluIHBlZXIgdmlkZW8gY2FwcwotCSAgUmVtb3ZlIHRoZSBmcmFtZXJhdGUgcmVzdHJpY3Rpb24gb24gdGhlIGNhcHMuCi0JICBSZWZlcmVuY2U6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDg4NjQKLQotMjAxMy0wOS0yNyAxNTowNTowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogYWxzbyBnbyBpbnRvIHRoZSBsb29wIGZ1bmN0aW9uIGFmdGVyIGNvbm5lY3QKLQkgIFdoZW4gd2UgaGF2ZSBvcGVuZWQgdGhlIHN0cmVhbSwgZ28gaW50byB0aGUgbG9vcCBmdW5jdGlvbiBzbyB0aGF0IHdlIGNhbgotCSAgcmVjZWl2ZSBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIuCi0KLTIwMTMtMDktMjcgMTI6NTM6MDYgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogbW92ZSB0aGUgY2hlY2sgZm9yIHN1YnRpdGxlIGJ1ZmZlciBiZWluZyBudWxsIHRlcm1pbmF0ZWQgYmVmb3JlIHZhbGlkYXRpbmcgVVRGLTgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc5MzMKLQotMjAxMy0wOS0yNiAxNjoyMDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGRvbid0IGNhbGN1bGF0ZSBza2V3IHdpdGhvdXQgcnRwdGltZQotCSAgU2tpcCB0cnlpbmcgdG8gY2FsY3VsYXRlIHRoZSBza2V3IHdoZW4gd2UgZG9uJ3QgaGF2ZSBhbiBydHB0aW1lLgotCSAgSXQgY2F1c2VzIHByb2JsZW1zIHdoZW4gbG9zdCBwYWNrZXQgZXZlbnRzIGFyZSBwbGFjZWQgaW4gdGhlIGppdHRlcmJ1ZmZlci4KLQotMjAxMy0wOS0yNSAyMzo0NjoxNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBnZXQgcmlkIG9mIEFTX1NDUlVCX0lOQ0xVREUKLQkgIFNob3VsZCBub3QgYmUgbmVlZGVkIGFueSBtb3JlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzY1OAotCi0yMDEzLTA5LTI1IDE3OjQyOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBkaXNhYmxlIGNoZWNrcyB3aGVuIGxpbmtpbmcgcGFkcwotCSAgV2Uga25vdyB0aGUgcGFkIGxpbmtzIHdpbGwgd29yayAoYW5kIHdlIGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUKLQkgIGFueXdheSkuCi0KLTIwMTMtMDktMjUgMTc6MzY6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBhdm9pZCBzb21lIHBhZCBsaW5rIGNoZWNrcwotCSAgTGluayBwYWRzIHdpdGhvdXQgY2hlY2tzLCB3ZSBrbm93IGl0IHdpbGwgd29yay4KLQotMjAxMy0wOS0yNSAxMjo1NToyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogRG9uJ3QgZXJyb3Igb3V0IGlmIGRvd25zdHJlYW0gaXMgbm90IHNlZWthYmxlIGZvciBub24tZnJhZ21lbnRlZCB2YXJpYW50cwotCSAgRG9pbmcgc28gd291bGQgYmUgYSByZWdyZXNzaW9uIG92ZXIgMS4wIGFuZCBicmVha3MgdGhlIHVuaXQgdGVzdC4KLQkgIEhvd2V2ZXIgdGhlIHJlc3VsdCB3aWxsIGJlIG1vc3QgbGlrZWx5IHVudXNhYmxlLCBzbyBsZXQncyBwb3N0Ci0JICBhIHdhcm5pbmcgbWVzc2FnZSBvbiB0aGUgYnVzLgotCi0yMDEzLTA5LTI0IDA0OjAyOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogY2FsY3VsYXRlIHNvbWUgc3RhdHMKLQotMjAxMy0wOS0yMyAxNzowNTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IG1vdmUgc2VuZF9sb3N0X2V2ZW50IGZ1bmN0aW9uCi0JICBNb3ZlIHRoZSBzZW5kX2xvc3RfZXZlbnQgZnVuY3Rpb24gdG8gdGhlIGRvX2xvc3RfZXZlbnQgaGFuZGxpbmcsIHRoZXJlIGlzIG5vCi0JICBuZWVkIHRvIGhhdmUgYSBzZXBhcmF0ZSBmdW5jdGlvbi4KLQotMjAxMy0wOS0xNiAxMToyMDo1MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBjb2RlIHRvIHBhcnNlIGNyZWF0aW9uIHRpbWUgZWFybGllciB0aGFuIDE5NzAKLQkgIFVzZSBnX2RhdGVfdGltZSBzZWNvbmRzIG1hbmlwdWxhdGlvbiB0byBhbGxvdyB0byBjb3ZlciB0aGUgcXVpY2t0aW1lCi0JICBzcGVjIGZvciBjcmVhdGlvbl90aW1lLiBJdCB1c2VzIHNlY29uZHMgc2luY2UgMTkwNC4KLQkgIEJvdGggcGF0aHMgY291bGQgYmUgZG9uZSB1c2luZyB0aGUgZ2VuZXJpYyBhcHByb2FjaCBvZiBzZWNvbmRzIHNpbmNlCi0JICAxOTA0IHdpdGggR0RhdGVUaW1lIGhhbmRsaW5nLCBidXQgdGhlIGZpcnN0IHBhdGggdXNpbmcgc2Vjb25kcyBmcm9tCi0JICAxOTcwIHNob3VsZCBiZSBtb3JlIGNvbW1vbmx5IGZvdW5kIGFuZCBhdm9pZHMgYSBmZXcgb2JqZWN0cyBjcmVhdGlvbiBhbmQKLQkgIHJlZi91bnJlZiwgc28ga2VlcCBpdCB0aGVyZSBmb3IgcGVyZm9ybWFuY2UuCi0JICBBZGRpdGlvbmFsbHksIHRoZSBjb2RlIGZvciBoYW5kbGluZyBzZWNvbmRzIHNpbmNlIDE5NzAgY2hhbmdlZCBmcm9tID4KLQkgIHRvID49IGJlY2F1c2UgaGF2aW5nIDAgc2Vjb25kcyBzaW5jZSAxOTcwIGlzIGFsc28gYSB2YWxpZCBjYXNlIGZvciB0aGF0Ci0JICBwYXRoIHRvIGhhbmRsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc5NzUKLQotMjAxMy0wOS0yMSAwMDo1NToyNiArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiB1cGRhdGUgc3RyZWFtLT5wb3Mgd2hlbiBzZW5kaW5nIGJ1ZmZlcnMgc28gdGhhdCBnYXAgZXZlbnRzIGFyZSBub3Qgc2VudCB1bm5lY2Vzc2FyaWx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA4NTA1Ci0KLTIwMTMtMDktMjQgMTg6MzA6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIFJFQURNRToKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2YjAzYmE3IHRvIDg2NWFhMjAKLQotMjAxMy0wOS0yNCAxNTowNToyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEFjdHVhbGx5IHVzZSAxLjMuMC4xIGFzIHZlcnNpb24gdG8gbWFrZSBjb25maWd1cmUgaGFwcHkKLQotMjAxMy0wOS0yNCAxNTowMDoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMi4wID09PQotCi0yMDEzLTA5LTI0IDE0OjIxOjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMi4wCi0KLTIwMTMtMDktMjQgMTQ6MjA6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMy0wOS0yMCAxOTo0MzoyMSArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBmaXggc2VnZmF1bHQgcmVsZWFzaW5nIHRoZSBzaW5rCi0JICBzaG93X2ZyYW1lIGlzIGRlZmVycmVkIHRvIHRoZSBtYWluIHRocmVhZCBhbmQgY2FuIGJlIGNhbGxlZAotCSAgd2hlbiB0aGUgc2luayBoYXMgYmVlbiByZWxlYXNlZCwgc28gd2UgbmVlZCB0byBrZWVwIGFuIGV4dHJhIHJlZgotCSAgb24gT2JqZWN0aXZlQyBvYmplY3QgaGVscGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODUwMQotCi0yMDEzLTA5LTE5IDE3OjExOjM0IC0wNDAwICBSb2JlcnQgS3Jha29yYSA8cm9iLmtyYWtvcmFAbWVzc2FnZW5ldHN5c3RlbXMuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IFJlc3RvcmUgb3JpZ2luYWwgR3N0TWVtb3J5IGluIGJ1ZmZlciBpZiBpdCBoYXMgYmVlbiBjaGFuZ2VkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2MDgzCi0KLTIwMTMtMDktMjMgMTY6MzQ6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwbWFuYWdlcjogdXBkYXRlIGRvY3MKLQotMjAxMy0wOS0yMyAxNTozNjozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgZG9jczogdXBkYXRlIGRvY3Mgd2l0aCAxLjAgZWxlbWVudCBuYW1lcwotCi0yMDEzLTA5LTIzIDE0OjEzOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHRlc3RzOiBhZGQgdGVzdCBmb3IgcmV0cmFuc21pc3Npb24gYmVjYXVzZSBvZiByZW9yZGVyaW5nCi0KLTIwMTMtMDktMjMgMTQ6MTI6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBhbHdheXMgc3RvcmUgbG9zdCBldmVudCBpbiBqaXR0ZXJidWZmZXIKLQkgIEFsd2F5cyBwcmVwYXJlIGEgbG9zdCBldmVudCBpbiB0aGUgaml0dGVyYnVmZmVyLCBpdCBpcyB0byB3YWtlIHVwIGFuZCBtYWtlIHRoZQotCSAgcHVzaGluZyB0aHJlYWQgY29udGludWUuIFdlIGRyb3AgdGhlIGV2ZW50IHdoZW4gd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBwdXNoIGxvc3QKLQkgIGV2ZW50cyBkb3duc3RyZWFtLgotCi0yMDEzLTA5LTIzIDExOjE4OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc2NoZWR1bGUgbG9zdCBldmVudCBkaWZmZXJlbnRseQotCSAgU2NoZWR1bGUgdGhlIGxvc3QgZXZlbnQgYnkgcGxhY2luZyBpdCBpbnNpZGUgdGhlIGppdHRlcmJ1ZmZlciB3aXRoIHRoZSBzZXFudW0KLQkgIHRoYXQgd2FzIGxvc3Qgc28gdGhhdCB0aGUgcHVzaGluZyB0aHJlYWQgY2FuIGludGVybGVhdmUgYW5kIHB1c2ggaXQgcHJvcGVybHkuCi0KLTIwMTMtMDktMjMgMTE6MTc6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgdGVzdHM6IHJlbW92ZSB0aW1lb3V0cyBmcm9tIGNoZWNrCi0JICBUaW1lb3V0cyBtYWtlIHRoZSB0ZXN0IHVucmVsaWFibGUgYW5kIGFyZSBub3QgbmVlZGVkLgotCi0yMDEzLTA5LTIzIDExOjE1OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVtb3ZlIGxpc3QgZGVidWcKLQotMjAxMy0wOS0yMyAxMToxNDowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogYWRkIHR5cGUgdG8gdGhlIGl0ZW0KLQkgIFNvIHRoYXQgdGhlIHVwcGVyIGxheWVyIGNhbiBrbm93IHdoYXQgZGF0YSBpcyBjb250YWluZWQgaW4gdGhlIGl0ZW0uCi0KLTIwMTMtMDktMjMgMDk6NTg6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IGZsdXNoCi0JICBQYXNzIGZ1bmN0aW9uIHRvIGZsdXNoIHRvIHByb3Blcmx5IGZyZWUgdGhlIHF1ZXVlIGl0ZW1zLgotCi0yMDEzLTA5LTIxIDAwOjA4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogYXBwZW5kIHNlcW51bSAtMSBwYWNrZXRzCi0KLTIwMTMtMDktMjAgMjM6NDg6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogdXNlIHN0cnVjdHVyZSB0byBob2xkIHBhY2tldCBpbmZvcm1hdGlvbgotCSAgTWFrZSB0aGUgaml0dGVyYnVmZmVyIG9wZXJhdGUgb24gYSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgdGhlIHBhY2tldAotCSAgaW5mb3JtYXRpb24uIFRoaXMgYXZvaWRzIG1hcHBpbmcgdGhlIGJ1ZmZlciBtdWx0aXBsZSB0aW1lcyBqdXN0IHRvIGdldCB0aGUgUlRQCi0JICBpbmZvcm1hdGlvbi4gSXQgd2lsbCBhbHNvIG1ha2UgaXQgcG9zc2libGUgdG8gc3RvcmUgb3RoZXIgbWluaW9iamVjdHMgc3VjaCBhcwotCSAgZXZlbnRzIGxhdGVyLgotCi0yMDEzLTA5LTIwIDE3OjQ4OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogdXBkYXRlIGV4cGVjdGVkIHRpbWVyIHdoZW4gcG9zc2libGUKLQkgIFdoZW4gd2UgcmVjZWl2ZSBhIHBhY2tldCBhbmQgd2UgaGF2ZSBzb21lIG1pc3NpbmcgcGFja2V0cywgd2UgY2FuIHVwZGF0ZSB0aGVpcgotCSAgZXN0aW1hdGVkIGFycml2YWwgdGltZXMgYmFzZWQgb24gdGhlIHRpbWVzdGFtcCBkaWZmZXJlbmNlLgotCi0yMDEzLTA5LTIwIDE3OjE4OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IG9yZGVyIG9mIHRpbWVvdXQgZXZlbnRzCi0JICBJbXByb3ZlIHRoZSBvcmRlciBvZiB0aGUgdGltZW91dCBldmVudHMsIGlmIHRoZXJlIGFyZSB0aW1lcnMgd2l0aCB0aGUgc2FtZQotCSAgdGltZW91dCwgd2Ugd2FudCB0byB0cmlnZ2VyIHRoZSBsb3dlc3Qgc2VxbnVtIGZpcnN0LiBGb3IgdGhpcyB3ZSBuZWVkIHRvIGxvb3AKLQkgIG92ZXIgdGhlIGNvbXBsZXRlIGFycmF5IG9mIHRpbWVycyB0byBmaW5kIHRoZSBiZXN0IG9uZSBiZWZvcmUgdHJpZ2dlcmluZyB0aGUKLQkgIHRpbWVvdXQuCi0KLTIwMTMtMDktMjAgMTY6NTg6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBzZW5kIGxvc3QgZXZlbnQgYmVmb3JlIHNpZ25hbGluZyBuZXh0IGJ1ZmZlcgotCSAgRmlyc3Qgc2VuZCB0aGUgbG9zdCBldmVudCwgdGhlbiB1cGRhdGUgdGhlIG5leHRfc2VxbnVtIGNvdW50ZXIgYW5kIHRoZW4KLQkgIHNlbmQgdGhlIHNpZ25hbCB0byB0aGUgcHVzaGluZyB0aHJlYWQgdGhhdCBpdCBjYW4gcmV0cnkgdG8gcHVzaCBhIGJ1ZmZlci4gVGhpcwotCSAgYXZvaWRzIHB1c2hpbmcgb3V0IGJ1ZmZlcnMgYmVmb3JlIHRoZSBsb3N0IGV2ZW50IGlzIHB1c2hlZC4KLQotMjAxMy0wOS0yMCAxNTozNToyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgaml0dGVyYnVmZmVyOiBjb25maWd1cmUgY2xvY2stcmF0ZSBvbiBqaXR0ZXJidWZmZXIKLQkgIEFkZCBhIGdldCBhbmQgc2V0dGVyIHRvIGNvbmZpZ3VyZSB0aGUgY2xvY2stcmF0ZSBpbiB0aGUgaml0dGVyYnVmZmVyIGluc3RlYWQgb2YKLQkgIHBhc3NpbmcgaXQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGluc2VydCBtZXRob2QuCi0KLTIwMTMtMDktMjAgMTI6Mjk6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgdGVzdHM6IGFkZCB0ZXN0IGZvciBwYWNrZXQgZGVsYXkgYW5kIHJldHJhbnNtaXNzaW9uCi0KLTIwMTMtMDktMjAgMTI6Mjc6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBhZGQgb3B0aW9uIHRvIHJlc2V0IHJldHJhbnNtaXNzaW9uIHRpbWVycwotCi0yMDEzLTA5LTIwIDEyOjI1OjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc3RvcCB0aGUgdGltZXIgdGhyZWFkCi0JICBUaGUgdGltZW91dCBjb2RlIGNvdWxkIHJlbGVhc2UgdGhlIGxvY2sgc28gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0bwotCSAgd2FpdCBmb3IgdGhlIGNsb2NrIHNvbWUgbW9yZS4KLQotMjAxMy0wOS0yMCAxMjoyNToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHVubG9jayBvbmx5IG9uY2UKLQotMjAxMy0wOS0yMCAxMTozMDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICB0ZXN0czogY2hlY2sgYm90aCBQVFMgYW5kIERUUwotCi0yMDEzLTA5LTIwIDEwOjU1OjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHRlc3RzOiBhZGQgdW5pdC10ZXN0IGZvciBtdWx0aXBsZSBtaXNzaW5nIHBhY2tldHMKLQkgIENoZWNrIGlmIG11bHRpcGxlIG1pc3NpbmcgcGFja2V0cyBnZW5lcmF0ZSByZXRyYW5zbWlzc2lvbiBldmVudHMgYW5kIHRoYXQgdGhlCi0JICByZXRyYW5taXNzaW9uIHJlcXVlc3RzIGFyZSBjYW5jZWxlZCB3aGVuIHRoZSBtaXNzaW5nIHBhY2tldCBhcnJpdmVzLgotCi0yMDEzLTA5LTIwIDEwOjUzOjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogaW1wcm92ZSBmbHVzaCBhbmQgc2h1dGRvd24KLQkgIFRoZXJlIGlzIG5vIG5lZWQgdG8gdW5zY2hlZHVsZSB0aGUgdGltZXIgaW4gZmx1c2gtc3RhcnQsIGZsdXNoLXN0b3Agd2lsbCByZW1vdmUKLQkgIHRoZSB0aW1lcnMgYW5kIHVuc2NoZWR1bGUuCi0JICBVbnNjaGVkdWxlIHRoZSBjdXJyZW50IHRpbWVyIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGpvaW4gdGhlIHRpbWVyIHRocmVhZC4KLQotMjAxMy0wOS0yMCAxMDo0Mzo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICB0ZXN0czogaW1wcm92ZSBkZWJ1ZwotCi0yMDEzLTA5LTIwIDEwOjQyOjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc2V0IGNvcnJlY3QgZXhwZWN0ZWQgdGltZQotCSAgV2hlbiB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBmb3IgYSBwYWNrZXQsIHNraXAgaXQgYnV0IGRvbid0IGZvcmdldCB0byBhZGp1c3QKLQkgIHRoZSBkdHMgdG8gdGhlIGV4cGVjdGVkIGR0cyBvZiB0aGUgbmV4dCBwYWNrZXQuCi0KLTIwMTMtMDktMjAgMTA6NDE6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBpbXByb3ZlIGRlYnVnCi0KLTIwMTMtMDktMTkgMTY6NTU6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IHVzZSBQT0ZGU0VUIGluc3RlYWQgb2YgT0ZGU0VUCi0JICBVc2UgdGhlIG1vcmUgY29ycmVjdCBQT0ZGU0VUIG1hY3JvIHRvIGdldCB0aGUgb2Zmc2V0IG9mIGEgY29tcG9uZW50IGluIGl0cwotCSAgcGxhbmUuIFRoZSBvZmZzZXQgbWFjcm8gZ2l2ZXMgdGhlIG9mZnNldCBvZiB0aGUgY29tcG9uZW50IHJlbGF0aXZlIHRvIHRoZSBzdGFydAotCSAgb2YgdGhlIGZyYW1lLgotCi0yMDEzLTA5LTIxIDE4OjQ2OjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nb29tL21teC5oOgotCSAgZ29vbTogRml4IE1NWCBhc3NlbWJseSBjb21waWxhdGlvbiB3aXRoIGNsYW5nCi0JICBjbGFuZyBkb2VzIG5vdCB3YW50IG9yIG5lZWQgYSBjbG9iYmVyIGxpc3QgZm9yIGVtbXM6Ci0JICBlcnJvcjogY2xvYmJlcnMgbXVzdCBiZSBsYXN0IG9uIHRoZSB4ODcgc3RhY2sKLQkgIFBhdGNoIHRha2VuIGZyb20gdGhlIEZyZWVCU0QgcG9ydHMsIHByb3ZpZGVkIGJ5Ci0JICBEYW4gTWNHcmVnb3IgPGRhbi5tY2dyZWdvckB1c2Fzay5jYT4KLQotMjAxMy0wOS0yMCAxNjoxNjo1NyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBiNjEzNjYxIHRvIDZiMDNiYTcKLQotMjAxMy0wOS0yMCAxMDoxOToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiBNYWtlIHN1cmUgdGhhdCBzdWJ0aXRsZSBidWZmZXJzIGFyZSBcMC10ZXJtaW5hdGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3OTMzCi0KLTIwMTMtMDktMTcgMTI6MTc6NTQgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBoYW5kbGUgaXNzdWVzIGNvcnJlY3RseSB3aGVuIGRvd25zdHJlYW0gaXMgbm90IHNlZWthYmxlCi0JICBUaGUgc3RyZWFtYWJsZSBwcm9wZXJ0eSBvbmx5IG1ha2Ugc2Vuc2UgZm9yIGZyYWdtZW50ZWQgZm9ybWF0cy4KLQkgIEZvciByZWd1bGFyIE1QNCwgd2hlbiBkb3duc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSB3ZSBjYW4ndCByZXdyaXRlCi0JICB0aGUgaGVhZGVycywgc28gcXRtdXggY2FuIG9ubHkgd29yayB3aXRoIGZhc3Qtc3RhcnQ9VFJVRSwgd2hlcmUKLQkgIHRoZSBoZWFkZXJzIGFyZSB3cml0dGVuIGZpbmlzaGluZyB0aGUgZmlsZS4KLQkgIEZvciBmcmFnbWVudGVkIE1QNCwgd2hlbiBzdHJlYW1hYmxlIGlzIG5vdCBzZWVrYWJsZSBhbmQgdGhlIHN0cmVhbWFibGUKLQkgIHByb3BlcnR5IGlzIEZBTFNFLCB3ZSBtdXN0IGVuZm9yY2Ugc3RyZWFtYWJsZT1UUlVFIHdhcm5pbmcgdGhlIHVzZXIKLQkgIGFib3V0IHRoaXMgY2hhbmdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MjQyCi0KLTIwMTMtMDktMTcgMTI6MDY6MDYgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBtYWtlICJzdHJlYW1hYmxlIiBUUlVFIGFzIGRlZmF1bHQKLQkgIFRoZSBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgZnJhZ21lbnRlZCBNUDQgKERhc2ggYW5kIFNtb290aCBTdHJlYW1pbmcpCi0JICBpcyBwcm9kdWNpbmcgc3RyZWFtYWJsZSBjb250ZW50IChldmVuIGZvciBWT0QpLiBzdHJlYW1hYmxlPUZBTFNFIHdvdWxkIG9ubHkKLQkgIGJlIHVzZWQgdG8gZ2VuZXJhdGUgZnJhZ21lbnRlZCBNUDQgd2l0aCBhbmQgaW5kZXggb2YgTU9PRidzIHRoYXQgY291bGQKLQkgIGJlIHJlcHJvZHVjZWQgd2l0aG91dCBhIHBsYXlsaXN0L21hbmlmZXN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MjQyCi0KLTIwMTMtMDktMTcgMTI6MDE6MzAgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBkZXByZWNhdGUgdGhlIHN0cmVhbWFibGUgcHJvcGVydHkgZm9yIG5vbi1mcmFnbWVudGVkIE1QNAotCSAgVGhlIHN0cmVhbWFibGUgcHJvcGVydHkgb25seSBtYWtlcyBzZW5zZSBmb3IgZnJhZ21lbnRlZCBNUDQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MjQyCi0KLTIwMTMtMDktMTkgMTc6MDg6MTkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JICB2NGwyOiBSZW1vdmUgY29tbWVudGVkIG91dCBsaW5lCi0KLTIwMTMtMDktMTkgMTg6NDM6MDggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA3NGE2ODU3IHRvIGI2MTM2NjEKLQotMjAxMy0wOS0xOSAxNzozNToyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwOThjMGQ3IHRvIDc0YTY4NTcKLQotMjAxMy0wOS0xOSAxNjo1MDo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogZG9uJ3QgYXNzdW1lIHBsYW5hciBmb3JtYXRzIGhhdmUganVzdCAxIGJsb2NrCi0JICBEb24ndCBhc3N1bWUgcGxhbmFyIGZvcm1hdHMgaGF2ZSBqdXN0IG9uZSBtZW1vcnkgYmxvY2sgd2l0aCB0aGUgZGF0YSBidXQgdXNlIHRoZQotCSAgbWFjcm9zIHRvIGFjY2VzcyB0aGUgcmlnaHQgbWVtb3J5IGJsb2NrIHdoZXJlIGEgY29tcG9uZW50IGNhbiBiZSBmb3VuZC4KLQotMjAxMy0wOS0xOSAxNDoxNDo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICB0ZXN0czogYWRkIHJldHJhbnNtaXNzaW9uIGppdHRlcmJ1ZmZlciB0ZXN0Ci0JICBTdG9yZSBib3RoIERUUyBhbmQgUFRTIG9uIGJ1ZmZlcnMuCi0JICBNYWtlIGEgcXVldWUgZm9yIHNyY3BhZCBldmVudHMuCi0JICBBY3RpdmF0ZSBwYWRzIGFmdGVyIGxpbmtpbmcgc28gdGhhdCB3ZSBkb24ndCBnZXQgUkVDT05GSUdVUkUgZXZlbnRzLgotCSAgQWRkIHRlc3QgZm9yIHJldHJhbnNtaXNzaW9uLgotCi0yMDEzLTA5LTE5IDE0OjEyOjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjoga2VlcCBkZWxheSBhcyBhIHNlcGFyYXRlIHZhcmlhYmxlIGluIHRpbWVyCi0JICBLZWVwIGEgc2VwYXJhdGUgZGVsYXkgaW4gdGhlIHRpbWVyIHNvIHRoYXQgd2Ugc3RpbGwga25vdyB0aGUgb3JpZ2luYWwgdGltZXN0YW1wCi0JICBvZiB0aGUgcGFja2V0IHRoYXQgdGhpcyB0aW1lciByZWZlcnMgdG8uIFdlIGNhbiB0aGVuIHBsYWNlIHRoZSBjb3JyZWN0Ci0JICBydW5uaW5nLXRpbWUgaW4gdGhlIFJldHJhbnNtaXNzaW9uIGV2ZW50LgotCi0yMDEzLTA5LTE5IDE0OjA4OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IHdyaXRhYmlsaXR5IG9mIHByb3BlcnRpZXMKLQotMjAxMy0wOS0xOSAxMTozNDo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMS45MCA9PT0KLQotMjAxMy0wOS0xOSAxMDo1MDoyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjEuOTAKLQotMjAxMy0wOS0xOSAxMDoyMTo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9oci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEzLTA5LTE5IDA5OjQ1OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBvL2NzLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JICBwbzogVXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEzLTA5LTExIDE0OjI3OjAyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IGRtYWJ1ZiBpcyBub3QgYSBzaW5nbGV0b24gYW55bW9yZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzc5MwotCi0yMDEzLTA5LTE2IDEzOjUzOjQ1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogZG8gbm90IGRvIGh0dHAgcmVxdWVzdHMgaW4gUkVBRFkKLQkgIEhFQUQgcmVxdWVzdHMgdG8gZGlzY292ZXIgaWYgdGhlIHNlcnZlciBpcyBzZWVrYWJsZSBzaG91bGRuJ3QgYmUgZG9uZSBpbgotCSAgUkVBRFkgYXMgaXQgbWlnaHQgbG9jayB0aGUgbWFpbiB0aHJlYWQgdGhhdCBpcyBkb2luZyB0aGUgc3RhdGUgY2hhbmdlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTM3MQotCi0yMDEzLTA5LTE4IDE2OjMyOjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVldmFsdWF0ZSB0aGUgY3VycmVudCB0aW1lciBhZnRlciB0aW1lb3V0Ci0JICBXaGVuIHdlIHRyaWdnZXIgdGhlIHRpbWVvdXQgbG9naWMgb2YgYSB0aW1lciwgcmVldmFsdWF0ZSBpdCBiZWNhdXNlIGl0IGlzCi0JICBwb3NzaWJsZSB0aGF0IGl0IHN0aWxsIGhhcyB0aGUgbG93ZXN0IHRpbWVvdXQuCi0KLTIwMTMtMDktMTggMTY6MzE6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBkb24ndCB1cGRhdGUgdGltZSB3aGVuIHVuc2NoZWR1bGVkCi0JICBEb24ndCB0cnkgdG8gZXN0aW1hdGUgdGhlIGN1cnJlbnQgdGltZSB3aGVuIHdlIGdvdCB1bnNjaGVkdWxlZC4KLQotMjAxMy0wOS0xOCAxNjoyOTozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGluaXQgcGFja2V0IHNwYWNpbmcgb24gZmlyc3QgYnVmZmVyCi0JICBBbHJlYWR5IGluaXQgdGhlIHBhY2tldCBzcGFjaW5nIHZhcmlhYmxlcyBvbiB0aGUgZmlyc3QgYnVmZmVyIHNvIHRoYXQgd2UgY2FuCi0JICBjYWxjdWxhdGUgdGhlIHNwYWNpbmcgb24gdGhlIHNlY29uZCBidWZmZXIgYWxyZWFkeS4KLQotMjAxMy0wOS0xOCAxNTowODo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICB0ZXN0czogZml4IGNvbW1lbnRzCi0KLTIwMTMtMDktMTggMTQ6NTc6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBwdXNoIHRoZSBsb3N0IGV2ZW50IGZyb20gdGhlIHRpbWVyIHRocmVhZAotCSAgSW5zdGVhZCBvZiBwdXNoaW5nIHRoZSBsb3N0IGV2ZW50IGZyb20gdGhlIGNoYWluIGZ1bmN0aW9uLCBzY2hlZHVsZSBhIHRpbWVvdXQKLQkgIHRoYXQgd2lsbCBwdXNoIHRoZSBsb3N0IGV2ZW50IGZyb20gdGhlIHRpbWVyIHRocmVhZC4gVGhpcyBhdm9pZCBibG9ja2luZyB0aGUKLQkgIHVwc3RyZWFtIHRocmVhZCB3aGlsZSB3ZSBwdXNoIGFuZCBzeW5jIHRoZSBldmVudC4KLQotMjAxMy0wOS0xOCAxNDoyMzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGFkZCBhbm90aGVyIHRlc3QKLQkgIFRoZSB0ZXN0IGlzIG1vZGlmaWVkIHNsaWdodGx5IGJlY2F1c2UgdGhlIGxhdGUgbG9zdCBwYWNrZXRzIGFyZSBvbmx5Ci0JICBnZW5lcmF0ZWQgbm93IHdoZW4gYSBsYXJnZSBnYXAgaXMgcmVjZWl2ZWQuCi0KLTIwMTMtMDktMTggMTQ6MTI6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHJvdW5kIGdhcCBkdXJhdGlvbiB0byBtdWx0aXBsZSBvZiBkdXJhdGlvbgotCSAgTWFrZSBzdXJlIHRoZSBnYXAgZHVyYXRpb24gaW4gdGhlIGxvc3QgZXZlbnQgaXMgYSBtdWx0aXBsZSBvZiB0aGUgcGFja2V0Ci0JICBkdXJhdGlvbi4KLQkgIEVuYWJsZSBhbm90aGVyIHRlc3QuCi0KLTIwMTMtMDktMTggMTI6Mjk6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjoga2VlcCB0cmFjayBvZiBkdXJhdGlvbgotCSAgS2VlcCB0cmFjayBvZiB0aGUgZXN0aW1hdGVkIGR1cmF0aW9uIG9mIG1pc3NpbmcgcGFja2V0cyBhbmQgdXNlIGl0IGluIHRoZSBsb3N0Ci0JICBldmVudC4KLQkgIEVuYWJsZSBhbm90aGVyIHVuaXQgdGVzdAotCi0yMDEzLTA5LTE4IDExOjU5OjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBoYW5kbGUgbGFyZ2UgZ2FwcyB3aXRoIG9uZSBsb3N0IGV2ZW50Ci0JICBXaGVuIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgbWlzc2luZyBwYWNrZXRzLCBnZW5lcmF0ZSBvbmUgbG9zdCBldmVudCBmb3IgYWxsCi0JICB0aGUgcGFja2V0cyB0aGF0IGhhdmUgbm8gY2hhbmNlIG9mIGJlaW5nIHB1c2hlZCBvdXQgaW4gdGltZS4KLQkgIEZpeCBhbmQgYWN0aXZhdGUgdW5pdCB0ZXN0IGZvciBsYXJnZSBnYXBzLgotCi0yMDEzLTA5LTE4IDExOjU2OjM4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogcmVmYWN0b3IgbG9zdCBldmVudCBzZW5kaW5nCi0JICBBbHNvIG1ha2Ugc3VyZSB3ZSBvbmx5IGluY3JlbWVudCB0aGUgZXhwZWN0ZWQgc2VxbnVtIGFuZCBsYXN0Ci0JICBvdXRwdXQgdGltZXN0YW1wLgotCi0yMDEzLTA5LTE3IDIzOjIxOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVmYWN0b3IgdGltZW91dCB0cmlnZ2VycwotCi0yMDEzLTA5LTE3IDIzOjAzOjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogc2ltcGxpZnkgdGhlIHRpbWVvdXQgY29kZQotCSAgS2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCB0aW1lIGluIHRoZSB0aW1lb3V0IGxvb3AuCi0JICBMb29wIG92ZXIgYWxsIHRpbWVycyBhbmQgdHJpZ2dlciBhbGwgdGhlIGV4cGlyZWQgb25lcywgd2UgY2FuIGRvIHRoaXMgaW4gdGhlCi0JICBzYW1lIGxvb3AgdGhhdCBzZWxlY3RzIHRoZSBuZXcgYmVzdCB0aW1lci4KLQotMjAxMy0wOS0xNyAyMzowMToxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlYXJyYW5nZSB0aW1lciB1cGRhdGUgY29kZQotCSAgQWxzbyB1cGRhdGUgdGhlIHRpbWVycyB3aGVuIHJldHJhbnNtaXNzaW9uIGlzIGRpc2FibGVkLiBXZSBuZWVkIHRvCi0JICBkbyB0aGlzIGJlY2F1c2Ugd2hlbiB3ZSBhZGRlZCBMT1NUIHRpbWVycyB3aGVuIHdlIGRldGVjdGVkIG1pc3NpbmcgcGFja2V0cyBhbmQKLQkgIHdlIG5lZWQgdG8gcmVtb3ZlIHRob3NlIHRpbWVycyB3aGVuIHRoZSBwYWNrZXQgZmluYWxseSBhcnJpdmVzLgotCi0yMDEzLTA5LTE3IDIyOjAyOjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkgIHZpZGVvbWl4ZXI6IGxpbmsgdG8gbGlibSBmb3IgbWF0aHMgc3R1ZmYKLQkgIEZpeGVzIHVuZGVmaW5lZCByZWZlcmVuY2VzIHRvIHJpbnQgYW5kIHBvdyBvbiB1YnVudHUKLQkgIGJ1aWxkIGJvdC4KLQotMjAxMy0wOS0xNyAxNToxOTo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlbGVhc2UgbG9jayBvbiBzaHV0ZG93bgotCi0yMDEzLTA5LTE3IDE1OjExOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGNoZWNrOiBjaGFuZ2UgZm9yIHZpZGVvbWl4ZXIgcmVuYW1lZCBvcmMgZmlsZQotCi0yMDEzLTA5LTE0IDE2OjAzOjIwICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcmVtb3ZlIE1BWF9UT0xFUkFURURfTEFURU5FU1MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc0MTEKLQotMjAxMy0wOS0xNiAxNTo1NDozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LXJ0eC5zaDoKLQkgIGV4YW1wbGVzOiB3ZSBkb24ndCBuZWVkIHRoZSBxdWV1ZSBhbnltb3JlCi0KLTIwMTMtMDktMTYgMTU6NTM6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiB1c2Ugc2VwYXJhdGUgdGhyZWFkIGZvciB0aW1lb3V0cwotCSAgVXNlIGEgc2VwYXJhdGUgdGhyZWFkIGZvciBzY2hlZHVsaW5nIHRoZSB0aW1lb3V0cyBpbnN0ZWFkIG9mIHVzaW5nIHRoZQotCSAgZG93bnN0cmVhbSBzdHJlYW1pbmcgdGhyZWFkIHRoYXQgbWlnaHQgYmxvY2sgYXQgYW55IHRpbWUuCi0KLTIwMTMtMDktMTQgMTU6NTY6MDQgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBzZXQgZmlyc3RfdHMgdG8gRFRTIGZvciBzdHJlYW1zIHRoYXQgaGF2ZSBEVFMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDczNDAKLQotMjAxMy0wOS0xNCAxNTo1NToyMiArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IG1ha2Ugc3VyZSBkdXJhdGlvbiBpcyBhIHZhbGlkIG51bWJlciBmb3IgbGFzdCBidWZmZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDczNDAKLQotMjAxMy0wOS0xNCAxNTo1NDoyOSArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHVzZSBzZWdtZW50LnN0YXJ0IG9yIGxhc3QgYnVmZmVyIGVuZCB0aW1lIGluIGNhc2Ugb2YgbWlzc2luZyBEVFMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDczNDAKLQotMjAxMy0wOS0wMyAxODoxNDowNCArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgUmV2ZXJ0IHF0bXV4OiBVc2UgYnVmZmVyIFBUUyBpZiBEVFMgaXMgbm90IHNldCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZjcyYzNjZjcxZmRlNjIyMDY3ZjQxZjMxYTUzOTc4YmE0Yzk0NDY5ZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDczNDAKLQotMjAxMy0wOS0xNiAxMTowMzowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXJvcmMtZGlzdC5oOgotCSAgdmlkZW9taXhlcjogVXBkYXRlIG9yYyBnZW5lcmF0ZWQgZmlsZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDgxMzEKLQotMjAxMy0wOS0xMyAxNjoyNTo0OSArMDIwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogRGVtdXggUlRDUCBidWZmZXJzIGZyb20gdGhlIFJUUCBzdHJlYW0KLQkgIElmIHRoZXJlIGFyZSBSVENQIGJ1ZmZlcnMgaW4gdGhlIFJUUCBzdHJlYW0sIHByb2Nlc3MgdGhlbSBhcwotCSAgUlRDUC4gVGhpcyB3YXksIHdlIHdhbnQgcmVjZWl2ZSBzdHJlYW1zIGZvbGxvd2luZyBSRkMgNTc2MQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzY1NwotCi0yMDEzLTA5LTEzIDIzOjI2OjIxICsxMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwTDI0ZGVwYXkuYzoKLQkgIHJ0cDogUmVtb3ZlIGJvZ3VzIGV4dHJhIGNhcHMgZnJvbSBMMjQgdGVtcGxhdGUuCi0JICBUaGUgZXh0cmEgY2FwcyBlbnRyeSBpbiB0aGUgdGVtcGxhdGUgd2FzIG1ha2luZyBpdCBzb21ldGltZXMKLQkgIGdldCBwbHVnZ2VkIGZvciBhbnkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHBheWxvYWQgdHlwZS4KLQotMjAxMy0wOS0xMyAxMjo0MDo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBiaW46IHVzZSBQYWNrZXRJbmZvIGZvciB0aGUgc2VuZGVyCi0JICBBdm9pZCBtYXBwaW5nIHRoZSBwYWNrZXQgbXVsdGlwbGUgdGltZXMgd2hlbiBzZW5kaW5nIFJUUC4KLQotMjAxMy0wOS0xMyAxMjoyMjozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBiaW46IHN0b3JlIG1vcmUgaW4gdGhlIFBhY2tldEluZm8KLQkgIFN0b3JlIGFsbCBpbmZvIGluIHRoZSBQYWNrZXRJbmZvIHNvIHRoYXQgd2UgY2FuIGF2b2lkIG1hcHBpbmcgdGhlIHBhY2tldAotCSAgbXVsdGlwbGUgdGltZXMuCi0KLTIwMTMtMDktMTMgMTE6MzI6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBzZXNzaW9uOiBzdG9yZSBtb3JlIGluIHRoZSBQYWNrZXRJbmZvIHN0cnVjdHVyZQotCi0yMDEzLTA5LTEzIDExOjA4OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIHJ0cGJpbjogUlRQQXJyaXZhbFN0YXRzIC0+IFJUUFBhY2tldEluZm8KLQkgIFJlbmFtZSBhIHN0cnVjdHVyZSBiZWNhdXNlIHdlIGFyZSBhbHNvIGdvaW5nIHRvIHVzZSB0aGlzIGZvciB0aGUgc2VuZGVyCi0JICBiaXRzLgotCi0yMDEzLTA5LTEzIDEwOjU1OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgc291cmNlOiBzbWFsbCBjbGVhbnVwcwotCi0yMDEzLTA5LTEyIDEzOjMxOjAxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogb25seSB1cGRhdGUgc3RvcCBwb3NpdGlvbiBpZiBzZWVrIHJlcXVlc3RzIGl0Ci0JICBDaGVjayBmb3IgR1NUX1NFRUtfVFlQRV9OT05FIGZvciBzdG9wIHBvaXN0aW9uIGFuZCBvbmx5IHVwZGF0ZQotCSAgdGhlIHN0b3AgdGltZSBpZiBpdCBpcyByZXF1ZXN0ZWQuIE90aGVyd2lzZSBqdXN0IG1haW50YWluIHdoYXRldmVyCi0JICB3YXMgc3RvcmVkIGF0IHRoZSBzZWdtZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NTMwCi0KLTIwMTMtMDktMTMgMDg6NTM6MjUgKzAyMDAgIFJpY28gVHpzY2hpY2hob2x6IDxyaWNvdHpAdWJ1bnR1LmNvbT4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgIHJ0cDogQWRkIG1pc3NpbmcgaGVhZGVycyB0cCBmaXggbWFrZSBkaXN0Ci0JICBJbiBhZGRpdGlvbiB0byBhOTU2YTZjZWIyZGViODdjYzEzNjFhZWUxZDY2MjY0NDlmNDZkYWIyCi0KLTIwMTMtMDktMTIgMTU6MDc6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGRhdGEgdG8gcmVhZCBpbWFnZSB0YWdzCi0JICBUaGFua3MgdG8gaXB1dGluZWkgZm9yIHJlcG9ydGluZyB0aGlzIG9uIElSQy4KLQotMjAxMy0wOS0xMiAxNTowMTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGhhbmRsZSBzZWdtZW50cyB3aXRoIG5vbi0wIHN0YXJ0Ci0JICBXZSBrZWVwIHRoZSBEVFMgYW5kIFBUUyBpbiBydW5uaW5nLXRpbWUgaW5zaWRlIHRoZSBqaXR0ZXJidWZmZXIuIE1ha2Ugc3VyZSB0bwotCSAgdHJhbnNmb3JtIGl0IGJhY2sgdG8gYSBidWZmZXIgdGltZXN0YW1wIGJlZm9yZSBwdXNoaW5nIG91dCB0aGUgYnVmZmVyLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzkzMQotCi0yMDEzLTA5LTExIDEzOjExOjU4IC0wNjAwICBTZcOhbiBkZSBCw7pyY2EgPGxlZnRtb3N0Y2F0QGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBGaXggb2ZmLWJ5LW9uZSBpbiB2YWxpZGF0aW9uIG9mIFVURi04Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3OTMzCi0KLTIwMTMtMDktMTEgMTQ6MzI6MTcgLTAzMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IERvIG5vdCBjaGVjayBpZiBjYXBzIGFyZSBlbXB0eSB3aGVuIHRoZXkgYXJlIE5VTEwKLQkgIEluIHRoZSBjYXNlIHRoZSBjYXBzIGFyZSBhY3R1YWxseSBOVUxMLCB3ZSBzaG91bGQganVzdCBjb25jaWRlciBpdCB0aGUKLQkgIHNhbWUgd2F5IGFzIGVtcHR5IGNhcHMgaW4gdGhhdCBjYXNlLgotCi0yMDEzLTA5LTEwIDE2OjQ0OjUzIC0wNjAwICBTZcOhbiBkZSBCw7pyY2EgPGxlZnRtb3N0Y2F0QGdtYWlsLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuaDoKLQkgIHZpZGVvbWl4ZXI6IGZpeCBidWlsZCBpZiBvcmMgaXMgbm90IGluc3RhbGxlZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzg4NgotCi0yMDEzLTA5LTEwIDE3OjU3OjQ5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUHJlc2VydmUgc2VxbnVtIHdoZW4gcHVzaGluZyBzZWVrIHVwc3RyZWFtCi0JICBBZnRlciBjb252ZXJ0aW5nIGEgc2VlayBmcm9tIHRpbWUgdG8gYnl0ZXMsIHVzZSB0aGUgc2FtZSBzZXFudW0KLQkgIG9uIHRoZSBldmVudCB0aGF0IGdvZXMgdXBzdHJlYW0KLQotMjAxMy0wOS0wNSAwMDoxNzoxNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHRyYWNrIHN0cmVhbXMgdGhhdCBhcmUgRU9TIG9uIHB1c2ggbW9kZSB0byBmaW5pc2ggZWFybGllcgotCSAgV2hlbiB0aGUgc2VnbWVudCBoYXMgYSBkZWZpbmVkIHN0b3AgcG9zaXRpb24sIHF0ZGVtdXggc2hvdWxkIGNoZWNrCi0JICB3aGVuIHN0cmVhbXMgcmVhY2ggdGhpcyBwb3NpdGlvbiBhbmQgbWFyayB0aG9zZSBhcyBFT1MuIFdoZW4gYWxsCi0JICBzdHJlYW1zIGFyZSBFT1MgaXQgd2lsbCByZXR1cm4gR1NUX0ZMT1dfRU9TIHRvIHVwc3RyZWFtIHRvIGFsbG93Ci0JICB0aGUgcGlwZWxpbmUgdG8gZmluaXNoIGluc3RlYWQgb2YgY29udGludW91c2x5IGNvbnN1bWUgYnVmZmVycwotCSAgZnJvbSB1cHN0cmVhbSB0aGF0IGFyZSBub3QgdXNlZnVsIGZvciB0aGUgc2VnbWVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc1MzAKLQotMjAxMy0wOS0wNCAxNTozNDozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogcHJlc2VydmUgc3RvcCBvZiBzZWdtZW50IHdoZW4gZG9pbmcgc2Vla3MgaW4gcHVzaCBtb2RlCi0JICBXaGVuIGhhbmRsaW5nIHNlZWtzIGluIHB1c2ggbW9kZSwgcXRkZW11eCBjb252ZXJ0cyB0aGUgc2VlayB0byBieXRlcwotCSAgYW5kIHB1c2hlcyB1cHN0cmVhbS4gSXQgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiB0aGUgc2VlayBhbmQgdGhlCi0JICBzdWJzZXF1ZW50IHNlZ21lbnQgdG8gYmUgYWJsZSB0byBtYXAgdGhlbSBiYWNrIHRvIHRoZSByZXF1ZXN0ZWQKLQkgIHNlZWsgdGltZSBhbmQgcHJvcGVybHkgcHJlc2VydmUgdGhlIHNlZ21lbnQgc3RvcCBvZiB0aGUgc2Vlay4KLQkgIFRoaXMgaXMgZG9uZSBieSB1c2luZyB0aGUgc3RhcnQgb2Zmc2V0IGluIGJ5dGVzIG9mIHRoZSBzZWVrLAotCSAgdGhhdCBzaG91bGQgYmUgdGhlIHNhbWUgb2YgdGhlIHNlZ21lbnQgZnJvbSB1cHN0cmVhbS4gQW5kIHRoaXMKLQkgIGlzIGFsc28gYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB3aGF0IHF0ZGVtdXggYWxyZWFkeSB3YXMgdXNpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NTMwCi0KLTIwMTMtMDctMjYgMTk6NDA6NTMgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIycGFkLmg6Ci0JICB2aWRlb21peGVyOiBBZGQgY29sb3JzcGFjZSBjb252ZXJzaW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0OTUwCi0KLTIwMTMtMDgtMDYgMTU6Mzg6MzkgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IERvbid0IHNlbmQgcmVjb25maWd1cmUgZXZlbnQgd2hlbiBmb3JtYXRzIG9yIFBBUiBhcmUgZGlmZmVyZW50Ci0JICBJdCBpcyByYWN5IHdpdGggbXVsdGlwbGUgcGFkcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQ5NTAKLQotMjAxMy0wNy0yNSAxMzo0OTo1NyArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBlcGl0ZWNoLmV1PgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZG9yYy5vcmM6Ci0JKiBnc3QvdmlkZW9taXhlci9nc3RjbXMuYzoKLQkqIGdzdC92aWRlb21peGVyL2dzdGNtcy5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9jb252ZXJ0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb2NvbnZlcnQuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLm9yYzoKLQkgIHZpZGVvbWl4ZXI6IEJ1bmRsZSBwcml2YXRlIGNvcGllcyBvZiB2aWRlb2NvbnZlcnQgY29kZQotCSAgSWRlYWxseSwgdGhpcyB3b3VsZCBiZSBwYXJ0IG9mIGxpYmdzdHZpZGVvLgotCSAgUHJlZml4ZXMgdmlkZW9jb252ZXJ0IHN5bWJvbHMgd2l0aCB2aWRlb21peGVyXy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQ5NTAKLQotMjAxMy0wOC0yMiAwMDowMzo0OCArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBlcGl0ZWNoLmV1PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogVXNlIG5ld2x5ICNkZWZpbmVkIG1ldGFkYXRhIG5hbWVzLgotCi0yMDEzLTA5LTA5IDE1OjExOjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBvbmx5IHdhaXQgaWYgd2UgZmx1c2hlZAotCSAgT25seSB3YWl0IGZvciB0aGUgU1RSRUFNX0xPQ0sgd2hlbiB3ZSBmbHVzaGVkIHNvbWV0aGluZyB3aGVuIHNlbmRpbmcKLQkgIGEgY29tbWFuZCBmb3IgUEFVU0VEIG9yIFBMQVlJTkcuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NjExCi0KLTIwMTMtMDktMDkgMTU6MDk6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHJldHVybiB3aGVuIGEgZmx1c2ggd2FzIGlzc3VlZAotCSAgTWFrZSBnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kKCkgcmV0dXJuIFRSVUUgd2hlbiB0aGUgY3VycmVudAotCSAgYWN0aW9uIGhhcyBiZWVuIGZsdXNoZWQKLQotMjAxMy0wOS0wOSAxMToxNjo0MCArMDIwMCAgRGF2aWQgSG9scm95ZCA8ZGF2ZUBiYWRnZXJzLWluLWZvaWwuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBMMjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMjRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBMMjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwTDI0cGF5Lmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgcnRwOiBhZGQgTDI0IHBheSBhbmQgZGVwYXlsb2FkZXIKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc3MzQKLQotMjAxMy0wOS0wOSAxNDo0Njo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IEZpeCBtaXNzaW5nIGNvbmRpdGlvbiBpbiBwcmV2aW91cyBjb21taXQKLQotMjAxMy0wOS0wOSAxNDo0NDo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMmJ1ZmZlcnBvb2w6IEFsc28gZml4IHN0cmlkZXMgZm9yIG90aGVyIHNlbWktcGxhbmFyIHZpZGVvIGZvcm1hdHMKLQotMjAxMy0wOS0wOSAxNDo0MTo0MiArMDIwMCAgQW5kcmVlYSBGdWxnZXIgPGFuZHJlZWEuZnVsZ2VyQHBhcnJvdC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyYnVmZmVycG9vbDogRml4IHN0cmlkZSBmb3IgTlYxMi9OVjIxCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NzU4Ci0KLTIwMTMtMDktMDcgMTY6Mzc6MDMgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2FkZW11eDogZml4IGxlYWtpbmcgYnVmZmVyIGFuZCBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3Njg4Ci0KLTIwMTMtMDktMDUgMTk6NDY6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGZpeCBidWlsZCBvbiB3aW4zMgotCSAgZ3N0dWRwc3JjLmM6ODU1OjE1OiBlcnJvcjogI2lmIHdpdGggbm8gZXhwcmVzc2lvbgotCi0yMDEzLTA5LTA0IDE1OjUwOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogaGFuZGxlIHVuc2Vla2FibGUgc3RyZWFtcwotCSAgSGFuZGxlIHN0cmVhbXMgdGhhdCB3ZSBjYW4ndCBzZWVrIGluIGFuZCBpZ25vcmUgdGhlbSBpbiB0aGUKLQkgIHNlZWsgbG9naWMuCi0KLTIwMTMtMDktMDQgMTU6MjU6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBvbmx5IGNoZWNrIHZpZGVvIGNvbXByZXNzaW9uIGZvciB2aWRlbyBzdHJlYW1zCi0JICBPciBlbHNlIHdlIG1pZ2h0IGRlcmVmIGEgc3RyZWFtIHdpdGggYSBOVUxMIHN0cmYudmlkcyBhbmQgc2VnZmF1bHQKLQotMjAxMy0wNi0xOCAxMzoyNzoyMCArMDEwMCAgQWxleCBBc2hsZXkgPGJ1Z3ppbGxhQGFzaGxleS1mYW1pbHkubmV0PgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JKiBnc3QvaXNvbXA0L2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9mdHlwY2MuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBxdGRlbXV4OiBBZGQgc3VwcG9ydCBmb3IgdGhlIGF2YzMgc2FtcGxlIGVudHJ5IGZvcm1hdCBvZiB0aGUgQVZDIGZpbGUgZm9ybWF0Ci0JICBBbWVuZG1lbnQgMiBvZiBJU08vSUVDIDE0NDk2LTE1IChBVkMgZmlsZSBmb3JtYXQpIGlzIGRlZmluaW5nIGEgbmV3Ci0JICBzdHJ1Y3R1cmUgZm9yIGZyYWdtZW50ZWQgTVA0IGNhbGxlZCAiYXZjMyIuIFRoZSBwcmluY2lwYWwgZGlmZmVyZW5jZQotCSAgYmV0d2VlbiBBVkMxIGFuZCBBVkMzIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZWMgaW5pdGlhbGlzYXRpb24KLQkgIGRhdGEgKGUuZy4gU1BTLCBQUFMpLiBJbiBBVkMxIHRoaXMgZGF0YSBpcyBwbGFjZWQgaW4gdGhlIGluaXRpYWwKLQkgIE1PT1YgYm94IChtb292LnRyYWsubWRpYS5taW5mLnN0Ymwuc3RzZC5hdmMxKSBidXQgaW4gQVZDMyB0aGlzIGRhdGEKLQkgIGdvZXMgaW4gdGhlIGZpcnN0IHNhbXBsZSBvZiBldmVyeSBmcmFnbWVudCAoaS5lLiB0aGUgZmlyc3Qgc2FtcGxlIGluCi0JICBlYWNoIG1kYXQgYm94KS4gIFRoZSBwcmluY2lwYWwgcmVhc29uIGZvciBhdmMzIGlzIHRvIG1ha2UgaXQgZWFzaWVyCi0JICBmb3IgY2xpZW50IGltcGxlbWVudGF0aW9ucywgYmVjYXVzZSBpdCByZW1vdmVzIHRoZSByZXF1aXJlbWVudCB0bwotCSAgaW5zZXJ0IHRoZSBTUFMrUFBTIGluIHRvIHRoZSBkZWNvZGVyIHBpcGVsaW5lIGV2ZXJ5IHRpbWUgdGhlcmUgaXMgYQotCSAgcmVwcmVzZW50YXRpb24gY2hhbmdlLgotCSAgVGhpcyBjb21taXQgYWRkcyBzdXBwb3J0IGZvciB0aGUgImF2YzMiIGF0b20sIHdoaWNoIGlzIGFsbW9zdCBpZGVudGljYWwKLQkgIHRvIHRoZSAiYXZjMSIgYXRvbSwgZXhjZXB0IGl0IGRvZXMgbm90IGNvbnRhaW4gYW55IFNQUyBvciBQUFMgZGF0YS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDIwMDQKLQotMjAxMy0wOS0wNCAwMDoyNzo1MCArMDIwMCAgTWF0aGlldSBEdXBvbmNoZWxsZSA8bWF0aGlldS5kdXBvbmNoZWxsZUBlcGl0ZWNoLmV1PgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogRG9uJ3Qgc2V0IEVPUyB0byBGQUxTRSB3aGVuIHRoZSBjb2xsZWN0cGFkICppcyogRU9TCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MjM4Ci0KLTIwMTMtMDktMDMgMTc6MzI6NDEgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGNsZWFudXAgb24gZXJyb3IgYWZ0ZXIgc3RhdGUgY2hhbmdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3MjI5Ci0KLTIwMTMtMDktMDMgMTE6MjM6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICB1ZHBzcmM6IEJpbmQgdG8gbXVsdGljYXN0IGFkZHJlc3NlcyBvbiBub24tV2luZG93cyBzeXN0ZW1zCi0JICBPbiBXaW5kb3dzIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGJpbmQgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcwotCSAgYnV0IHRoZSBPUyB3aWxsIG1ha2Ugc3VyZSB0byBmaWx0ZXIgb3V0IGFsbCBwYWNrZXRzIHRoYXQKLQkgIGFycml2ZSBub3QgZm9yIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyB0aGUgc29ja2V0IGpvaW5lZC4KLQkgIE9uIExpbnV4IGFuZCBvdGhlcnMgaXQgaXMgbmVjZXNzYXJ5IHRvIGJpbmQgdG8gYSBtdWx0aWNhc3QKLQkgIGFkZHJlc3MgdG8gbGV0IHRoZSBPUyBmaWx0ZXIgb3V0IGFsbCBwYWNrZXRzIHRoYXQgYXJlIHJlY2VpdmVkCi0JICBvbiB0aGUgc2FtZSBwb3J0IGJ1dCBmb3IgZGlmZmVyZW50IGFkZHJlc3NlcyB0aGFuIHRoZSBtdWx0aWNhc3QKLQkgIGFkZHJlc3MKLQkgIEFuZCBkZXByZWNhdGUgdGhlIG11bHRpY2FzdC1ncm91cCBwcm9wZXJ0eSBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZQotCSAgYWRkcmVzcyBwcm9wZXJ0eS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDcwNDIKLQotMjAxMy0wOS0wMyAxMDoxMDowMSArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogRnJlZSBHc3RCYXNlUGFyc2VGcmFtZSBpZiBwdXNoaW5nIGEgaGVhZGVyIGZhaWxlZAotCi0yMDEzLTA5LTAyIDE2OjAyOjM3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IFJlZmFjdG9yIGFkZHJlc3MgcmVzb2x2YWwgaW50byBpdHMgb3duIGZ1bmN0aW9uCi0KLTIwMTMtMDktMDIgMjM6MDA6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkgIHJlcGxheWdhaW46IGZpeCB0YWdsaXN0IGxlYWsgaW4gcmdhbmFseXNpcwotCSAgQW5kIGFkZCBzb21lIEZJWE1Fcy4KLQotMjAxMy0wOS0wMiAyMjo1MDo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSAgdGVzdHM6IHJnYW5hbHlzaXM6IHJlbmFtZSBmdW5jdGlvbiBmb3IgY2xhcml0eQotCi0yMDEzLTAzLTE4IDE0OjMyOjA3ICswMTAwICBDaHJpc3RvcGggUmVpdGVyIDxyZWl0ZXIuY2hyaXN0b3BoQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSAgdGVzdHM6IGZpeCBza2lwcGVkIHJnYW5hbHlzaXMgdGVzdHMKLQkgIEluIDAuMTAgZWxlbWVudHMgd291bGQgcG9zdCB0YWcgbWVzc2FnZXMgb24gdGhlIGJ1cwotCSAgZGlyZWN0bHksIGFuZCByZ2FuYWx5c2lzIHdvdWxkIG9ubHkgcG9zdCBhIHRhZyBtZXNzYWdlCi0JICB3aGVuIGl0IGNoYW5nZWQgdGFncy4gSW4gMS4wLCBvbmx5IHNpbmtzIHBvc3QgdGFnCi0JICBtZXNzYWdlcyB3aGVuIHRoZXkgcmVjZWl2ZSB0aGUgc2VyaWFsaXNlZCB0YWcgZXZlbnQuCi0JICBUaGlzIG1lYW5zIHRoYXQgd2UgZ2V0IGFuIGFkZGl0aW9uYWwgdGFnIG1lc3NhZ2Ugb24KLQkgIHRoZSBidXMgbm93IHdoZXJlIHdlIGRpZG4ndCBleHBlY3Qgb25lIGJlZm9yZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTUwOTAKLQotMjAxMy0wOS0wMiAxMTo0Njo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBQcm9wZXJseSBwcm9wYWdhdGUgZG93bnN0cmVhbSBmbG93IHJldHVybnMgdXBzdHJlYW0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDcyMjkKLQotMjAxMy0wOS0wMSAyMToxODozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpLmM6Ci0JKiBnc3QvaXNvbXA0L2lzb21wNC1wbHVnaW4uYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3AuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgRG9uJ3QgdXNlIHNldGxvY2FsZSBpbiBwbHVnaW5zKCkKLQkgIE9ubHkgYXBwcyBzaG91bGQgY2FsbCBzZXRsb2NhbGUoKSwgbm90IGxpYnJhcmllcy4KLQotMjAxMy0wOC0yOSAxMzoxNToxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkgIHJ0cG1wdnBheTogRml4IFJUUCBidWZmZXIgYWxsb2NhdGlvbiBpbiBydHBtcHZwYXkKLQkgIFJUUCBidWZmZXIgYWxsb2NhdGlvbiBzaG91bGQgbm90IGJlIGRvbmUgd2l0aCBwYWRkaW5nIGZvciB0aGUgc3BlY2lmaWMgTVBFRzIKLQkgIGhlYWRlciBhcyB0aGUgcGFkZGluZyBpcyBkb25lIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhbmQgdGhlIGxhc3QgYnl0ZSBpcwotCSAgdGhlIHNpemUgb2YgdGhlIHBhZGRpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2OTcwCi0KLTIwMTMtMDgtMjggMTA6NTE6MzIgKzAyMDAgIEJlcm5oYXJkIE1pbGxlciA8YmVybmhhcmQubWlsbGVyQHN0cmVhbXVubGltaXRlZC5jb20+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuaDoKLQkgIGF1dG92aWRlb3Npbms6IGFkZCBzeW5jIHByb3BlcnR5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2OTU1Ci0KLTIwMTMtMDgtMjggMDc6MTU6MDAgKzAyMDAgIEJlcm5oYXJkIE1pbGxlciA8YmVybmhhcmQubWlsbGVyQHN0cmVhbXVubGltaXRlZC5jb20+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuaDoKLQkgIGF1dG9hdWRpb3Npbms6IGludHJvZHVjZSBzeW5jIHByb3BlcnR5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2OTU1Ci0KLTIwMTMtMDgtMjcgMTc6MzM6NDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwdXNoIGJ1ZmZlcnMgYWZ0ZXIgc2VnbWVudCBzdG9wIHVudGlsIHJlYWNoaW5nIGEga2V5ZnJhbWUKLQkgIFRoaXMgc2hvdWxkIG1ha2UgZGVjb2RlcnMgYWJsZSB0byBwcmVjaXNlbHkgcHVzaCBidWZmZXJzIHVudGlsIHRoZSBzdG9wCi0JICB0aW1lIGluIGNhc2UgdGhleSBuZWVkIHRoZSBuZXh0IGtleWZyYW1lIHRvIGRvIGl0LgotCSAgQWxzbywgYWNjb3JkaW5nIHRvIGdzdF9zZWdtZW50X2NsaXAsIGl0IHNob3VsZCBvbmx5IHB1c2ggYSBidWZmZXIgdGhhdAotCSAgdGhlIHN0YXJ0aW5nIHRzIGlzIHN0cmljdGx5IHNtYWxsZXIgdGhhbiB0aGUgc2VnbWVudCBzdG9wLCBzbyB3ZSBjaGFuZ2UKLQkgIHRoZSBtaW4gPCBjb21wYXJpc29uIGZvciA8PQotCi0yMDEzLTA4LTI4IDEzOjI2OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS4xLjQgPT09Ci0KLTIwMTMtMDgtMjggMTI6NTI6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWFvcmMtZGlzdC5jOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjEuNAotCi0yMDEzLTA4LTI4IDEyOjUyOjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTMtMDgtMjggMTI6MzI6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcG8vcHRfQlIucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEzLTA4LTI3IDE1OjI1OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYS1tdXg6IHJlbW92ZSBmcmFtZXJhdGUgcmVzdHJpY3Rpb24KLQkgIFJlbW92ZSB0aGUgZnJhbWVyYXRlIHJlc3RyaWN0aW9uIG9uIHRoZSBjYXBzLgotCi0yMDEzLTA4LTI3IDA5OjM4OjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBvbmx5IHVwZGF0ZSBuZXh0IGNoZWNrIHRpbWUgd2hlbiByZWNvbnNpZGVyaW5nCi0JICBEb24ndCB1cGRhdGUgdGhlIG5leHQgUlRDUCBjaGVjayB0aW1lIGluIGFsbCBjYXNlcyBidXQgb25seSB3aGVuIHdlCi0JICByZWNvbnNpZGVyZWQuIFRoaXMgYXZvaWRzIGRlbGF5aW5nIHNlbmRpbmcgYSBmdWxsIFJUQ1AgcGFja2V0IHdoZW4gd2UKLQkgIGFyZSBkb2luZyBlYXJseSBmZWVkYmFjay4KLQotMjAxMy0wOC0yNyAwOTozNzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogYWRkIG1vcmUgZGVidWcKLQotMjAxMy0wOC0yNyAwOTozNDo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGZpeCB0eXBlcyBvZiB0aGUgcmV0cmFuc21pc3Npb24gZXZlbnQKLQotMjAxMy0wOC0yNyAwOTozMzowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IG9ubHkgdGltZW91dCBFWFBFQ1RFRCB0aW1lcnMgb24gZ2FwCi0JICBPbmx5IHRpbWVvdXQgdGhlIEVYUEVDVEVEIHRpbWVycyB3aGVuIHdlIGRldGVjdCBhIGxhcmdlIHNlcW51bSBnYXAuCi0KLTIwMTMtMDgtMjYgMTM6NDc6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiBEb24ndCBzZXQgQloyX0xJQlMgaWYgYnoyIGlzIG5vdCBmb3VuZAotCi0yMDEzLTA4LTI2IDExOjUwOjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHNlc3Npb246IGZpeCBsb2NraW5nCi0JICBXZSBuZWVkIHRvIHRha2UgdGhlIHNlc3Npb24gbG9jayB3aGVuIGdldHRpbmcgYW5kIG1hbmlwdWxhdGluZyB0aGUKLQkgIHNvdXJjZS4KLQotMjAxMy0wOC0yNiAxMTo1MDoxMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogYWRkIHNvbWUgbW9yZSBkZWJ1ZwotCi0yMDEzLTA4LTIwIDIyOjEyOjAzICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQGVwaXRlY2guZXU+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBkb24ndCBzZW5kIGZsdXNoX3N0b3AgdHdpY2UuCi0JICBJZiB3ZSBnZXQgZmx1c2ggc3RhcnQgYW5kIGEgc2VlayB3ZSBuZWVkIHRvIG9ubHkgc2VuZCBmbHVzaF9zdG9wIG9uY2UuCi0JICBNb3JlIGluZm8gYXQgIzcwNjQ0MQotCi0yMDEzLTA4LTIzIDE1OjU2OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4Lmg6Ci0JICBtdWx0aXBhcnRkZW11eDogcHJvcGFnYXRlIGRpc2NvbnQKLQotMjAxMy0wOC0yMyAxNTo0OTo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgbXVsdGlwYXJ0ZGVtdXg6IHJlbW92ZSBkeW5hbWljIHNvdXJjcGFkcyB3aGVuIGdvaW5nIGZyb20gUEFVU0VEIHRvIFJFQURZCi0KLTIwMTMtMDgtMjMgMTU6Mjk6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaDoKLQkgIG11bHRpcGFydGRlbXV4OiB0aW1lc3RhbXAgb3V0cHV0IGJ1ZmZlcnMgYmFzZWQgb24gZmlyc3QgaW5wdXQgYnVmZmVyIHRoYXQgcHJvdmlkZWQgYnl0ZXMgbm90IGxhc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzc3NTQKLQotMjAxMy0wOC0yMyAxNTo0NzoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cXVldWUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHF1ZXVlLmg6Ci0JICBydHhxdWV1ZTogYWRkIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSBxdWV1ZSBzaXplCi0KLTIwMTMtMDgtMjMgMTI6MDc6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC1ydHguc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1IMjY0LXJ0eC5zaDoKLQkgIHRlc3RzOiBhZGQgcmV0cmFuc21pc3Npb24gZXhhbXBsZQotCi0yMDEzLTA4LTIzIDExOjU1OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgcnRwYmluOiBwcm94eSBqaXR0ZXJidWZmZXIgZG8tcmV0cmFuc21pc3Npb24gcHJvcGVydHkKLQotMjAxMy0wOC0yMyAxMToxNzo0NSArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IHVubWFwIHRoZSBjb3JyZWN0IGJ1ZmZlcgotCSAgVGhlIGF1ZGlvIGJ1ZmZlciB3YXMgbWFwcGVkIHNvIHVubWFwIGl0IGFuZCBub3QgdGhlIHZpZGVvIGJ1ZmZlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjY0MgotCi0yMDEzLTA4LTE4IDIzOjMyOjIyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICBwdWxzZXNpbms6IEFkZCBwcm9wZXJ0eSB0byBmaW5kIG91dCB0aGUgZGV2aWNlIGN1cnJlbnRseSBpbiB1c2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA3NjgKLQotMjAxMy0wOC0xOCAyMzozMToxNSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBEZS1kdXBsaWNhdGUgY29kZSB0byBnZXQgdGhlIGN1cnJlbnQgc2luayBpbnB1dCBpbmZvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkwNzY4Ci0KLTIwMTMtMDgtMTggMjI6Mjc6MzcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogSW1wbGVtZW50IGNoYW5naW5nIHRoZSBkZXZpY2Ugd2hpbGUgcGxheWluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDc2OAotCi0yMDEzLTA4LTE4IDIzOjMyOjIyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5oOgotCSAgcHVsc2VzcmM6IEFkZCBwcm9wZXJ0eSB0byBmaW5kIG91dCB0aGUgZGV2aWNlIGN1cnJlbnRseSBpbiB1c2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA3NjgKLQotMjAxMy0wOC0xOCAyMzozMToxNSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogRGUtZHVwbGljYXRlIGNvZGUgdG8gZ2V0IHRoZSBjdXJyZW50IHNvdXJjZSBvdXRwdXQgaW5mbwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5MDc2OAotCi0yMDEzLTA4LTE4IDIyOjI3OjM3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBJbXBsZW1lbnQgY2hhbmdpbmcgdGhlIGRldmljZSB3aGlsZSBwbGF5aW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkwNzY4Ci0KLTIwMTMtMDgtMjIgMTQ6NTU6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBGaXggYnoyIGNvbmZpZ3VyZSBjaGVjayBmb3IgV2luZG93cwotCSAgRHVlIHRvIGZ1bmN0aW9uIGRlY29yYXRpb25zIG9uIFdpbmRvd3MgQUNfQ0hFQ0tfTElCIGNhbid0IGJlIHVzZWQgdG8gY2hlY2sgZm9yIGJ6Mi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD00NjU5MjQKLQotMjAxMy0wMi0yMiAyMDo1NzowMCArMDkwMCAgQWtpaGlybyBUc3VrYWRhIDxhdHN1a2FkYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkgIHB1bHNlc2luazogQWRkIHN1cHBvcnQgZm9yIEFBQyBwYXNzLXRocm91Z2gKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQ0NDUKLQotMjAxMy0wNi0yNCAxNzoyOTozNyArMDIwMCAgS2lzaG9yZSBBcmVwYWxsaSA8a2lzaG9yZS5hcmVwYWxsaUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkgIGdka3BpeGJ1Zm92ZXJsYXk6IGNyYXNoZXMgaWYgYW55IHByb3BlcnR5IGNoYW5nZXMgZHVyaW5nIHBsYXliYWNrIHdoZW4gbG9jYXRpb24gcHJvcGVydHkgaXMgbm90IHNldAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjk4OAotCi0yMDEzLTA4LTIxIDE0OjU0OjI2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkgIHB1bHNlOiBTaGFyZSBzdGF0aWMgY2FwcyBkZWZpbml0aW9uIGJldHdlZW4gc3JjIGFuZCBzaW5rCi0JICBUaGUgc3JjIHdhcyBhbHNvIG1pc3NpbmcgMjQtYml0IHNhbXBsZSBmb3JtYXRzCi0KLTIwMTMtMDgtMjEgMTY6NTM6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHF1ZXVlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBydHhxdWV1ZS5oOgotCSAgcnR4OiB2YXJpb3VzIGltcHJvdmVtZW50cwotCSAgVXNlIGxvY2tpbmcKLQkgIERvbid0IHB1c2ggZnJvbSB0aGUgZXZlbnQgaGFuZGxlciwgY29sbGVjdGVkIHBhY2tldHMgaW4gYSBxdWV1ZSBhbmQgcHVzaCBmcm9tCi0JICB0aGUgY2hhaW4gZnVuY3Rpb24uCi0JICBDbGVhciBxdWV1ZXMgb24gc2h1dGRvd24uCi0KLTIwMTMtMDgtMjEgMTY6NTA6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IGdlbmVyYXRlIGV2ZW50cyBjb3JyZWN0bHkKLQkgIERvIGNvcnJlY3Qgc2hpZnRpbmcgb2YgdGhlIGJpdG1hc2sgZm9yIGxvc3QgcGFja2V0cy4KLQotMjAxMy0wOC0yMSAxNjo0Nzo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jOgotCSAgcnRwOiByZWdpc3RlciBydHggZWxlbWVudCBiZXR0ZXIKLQotMjAxMy0wOC0yMSAxNjozMjo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IFdBVkVGT1JNQVRFWCBpcyB1bnNpZ25lZCBmb3IgOCBiaXQgaW50ZWdlcnMsIGFuZCBzaWduZWQgZm9yIG90aGVycwotCSAgUHJvYmFibHkgZml4ZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU0NzcKLQotMjAxMy0wOC0yMSAxMzowMzozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogZG9uJ3QgaWdub3JlIHJldHVybiB2YWx1ZSBmcm9tIF9maW5pc2hfZnJhbWUoKQotCSAgZ3N0X3ZpZGVvX2VuY29kZXJfZmluaXNoX2ZyYW1lKCkgd2lsbCByZXR1cm4gRkxPV19PSyBoZXJlIGlmCi0JICB0aGVyZSdzIG5vIG91dHB1dCBidWZmZXIuCi0KLTIwMTMtMDgtMjEgMTI6NTY6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JICBqcGVnZGVwYXk6IGFkZCBzb21lIG1vcmUgZGVidWcKLQotMjAxMy0wOC0yMSAxMjoxMDowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5oOgotCSAgcnRwZ3N0ZGVwYXk6IG9ubHkgcHVzaCBldmVudHMgd2hlbiB0aGV5IGNoYW5nZWQKLQkgIEtlZXAgdHJhY2sgb2YgdGhlIFNUUkVBTV9TVEFSVCBhbmQgVEFHIGV2ZW50cyBhbmQgb25seSBwdXNoIHRoZW0KLQkgIHdoZW4gdGhleSBjaGFuZ2VkLgotCi0yMDEzLTA4LTIxIDEwOjUyOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiB0YWdsaXN0cyBzaG91bGQgbm90IGJlIG1lcmdlZCBpbiAxLjAKLQotMjAxMy0wOC0yMSAxMDoyODo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSAgcnRwZ3N0ZGVwYXk6IGZsdXNoIG9uIEZMVVNIX1NUT1AgZXZlbnQKLQotMjAxMy0wOC0yMSAxMDowMzo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkgIHJ0cGdzdHBheTogcmVzZXQgb24gc3RhdGUgY2hhbmdlCi0JICBEbyBmdWxsIHJlc2V0IG9uIHN0YXRlIGNoYW5nZSB0byBSRUFEWQotCi0yMDEzLTA4LTIxIDA5OjU1OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiByZXNldCBvbiBGTFVTSF9TVE9QCi0JICBDbGVhciB0aGUgYWRhcHRlciBhbmQgcGVuZGluZyBidWZmZXIgbGlzdCBvbiBGTFVTSF9TVE9QLgotCi0yMDEzLTA4LTIxIDA5OjM5OjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBkb24ndCB1c2UgY2xvY2sgZm9yIGNvbmZpZyBpbnRlcnZhbAotCSAgV2UgY2FuJ3QgdXNlIHRoZSBjbG9jayB0byB0aW1lIG91ciBjb25maWctaW50ZXJ2YWwgYmVjYXVzZSB3ZSBhcmUgbm90Ci0JICBsaXZlIChvciB0aGVyZSBtaWdodCBub3QgYmUgYSBjbG9jayBvciB0aGUgY2xvY2sgbWlnaHQgbm90IGJlIHJ1bm5pbmcpLgotCSAgSW5zdGVhZCBqdXN0IHNpbXBseSB0YWtlIHRoZSB0aW1lc3RhbXAgZGlmZi4KLQotMjAxMy0wOC0yMSAwOTozMzowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuaDoKLQkgIHJ0cGdzdGF5OiBkb24ndCB1c2UgLy8gY29tbWVudHMKLQotMjAxMy0wOC0wOCAxMTo1NToyMiAtMDQwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRml4IHJlc3BvbnNlIGFyZ3VtZW50IGluIGhhbmRsZS1yZXF1ZXN0IHNpZ25hbAotCi0yMDEzLTA4LTA4IDExOjU0OjQxIC0wNDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBBZGQgc2RlcyBwcm9wZXJ0eSBhbmQgcHJveHkgaXQgdG8gcnRwYmluCi0KLTIwMTMtMDgtMDcgMDk6NDc6MzUgLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5oOgotCSAgU2VuZCBhIHN0cmVhbS1zdGFydCB3aGVuZXZlciB3ZSBzZW5kIHRhZ3MgVGhpcyBpcyB0byBtYWtlIHN1cmUgdGFncyBhcmUgY2xlYXJlZCBvbiB0aGUgY2xpZW50IGlmIHRoZSBzdHJlYW0tc3RhcnQgd2FzIHByZXZpb3VzbHkgbG9zdCwgb3RoZXJ3aXNlLCB0aGUgY2xpZW50IG1heSBlbmQgdXAgd2l0aCBhIG1lcmdlZCB0YWdsaXN0IG9mIG11bHRpcGxlIHNvbmdzCi0KLTIwMTMtMDctMjUgMjE6MTI6MDUgLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5oOgotCSAgcnRwZ3N0cGF5OiBBZGQgYSBjb25maWctaW50ZXJ2YWwgcHJvcGVydHkgdG8gcmVzZW5kIHRoZSBjYXBzL3RhZ3MgYXQgYSByZWd1bGFyIGludGVydmFsIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UgdGhlIHBhY2tldCBjb250YWluaW5nIHRoZSBpbmxpbmVkIGNhcHMgd2FzIGxvc3Qgb3IgaWYgbmV3IGNsaWVudCBqb2lucyBhbiBhbHJlYWR5IHJ1bm5pbmcgUlRQIHN0cmVhbSBhbmQgdGhleSBtaXNzZWQgdGhlIHByZXZpb3VzIHRhZyBldmVudHMuIFRoaXMgYWxzbyBtYWtlcyB0aGUgcGF5bG9hZGVyIGtlZXAgYSBsaXN0IG9mIG1lcmdlZCB0YWdzIHNvIHRoZSByZXRyYW5zbWl0dGVkIHRhZyBldmVudCBjb250YWlucyBhbGwgcHJldmlvdXNseSByZWNlaXZlZC4gQSBTVFJFQU1fU1RBUlQgZXZlbnQgd2lsbCBmbHVzaCB0aGUgbGlzdCBvZiB0YWdzLgotCi0yMDEzLTA3LTI1IDIxOjEwOjEwIC0wNDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBSZWZhY3RvciB0aGUgc2V0Y2FwcyBhbmQgdXNlIG5ldyBtZXRob2QgdG8gc2VuZCBhcmJpdHJhcnkgY2FwcyBhdCBhbnkgdGltZQotCi0yMDEzLTA3LTI1IDIxOjAzOjM0IC0wNDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBEbyBub3QgZmx1c2ggZXZlbnRzIGZvciBzdHJlYW0tc3RhcnQgYW5kIGF2b2lkIGNvbmZsaWN0IGJldHdlZW4gZXZlbnQgYW5kIHBlbmRpbmcgaW5saW5lIGNhcHMKLQotMjAxMy0wNy0yNSAyMDo1NDo1MCAtMDQwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5Lmg6Ci0JICBydHBnc3RwYXk6IEFkZCBhIGNyZWF0ZV9mcm9tX2FkYXB0ZXIgQVBJIGFuZCB1c2UgYSBsaXN0IG9mIEdzdEJ1ZmZlckxpc3QgVGhpcyBpcyBuZWNlc3NhcnkgdG8gZml4IGV2ZW50L2NhcHMgc2VuZGluZy4gSWYgd2Ugc2VuZCBhIFNUUkVBTV9TVEFSVCBwYWNrZXQsIGl0IHdpbGwgY2F1c2UgYW4gZXJyb3IgYmVjYXVzZSB0aGUgc3RyZWFtIGRpZG4ndCByZWNlaXZlIGl0cyBjYXBzIGFuZCBuZXctc2VnbWVudCBldmVudHMsIHNvIHdlIG11c3Qgd2FpdCBmb3IgdGhlIGZpcnN0IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50IGJ1ZmZlci4gSG93ZXZlciwgdGhlIGNhcHMgd2lsbCBiZSBzZW50IGF0IHRoZSBzYW1lIHRpbWUgYW5kIHNvIHRoZSAnaW5saW5lIGNhcHMnIHdpbGwgYmUgc2V0IGZvciB0aGUgZXZlbnQuIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBwYXlsb2FkIGluZGl2aWR1YWwgcGFja2V0cyAoZGF0YSwgY2FwcyBvciBldmVudHMpIGFuZCBvbmx5IHNlbmQgdGhlbSB3aGVuIHdlIGNhbGwgZmx1c2guCi0KLTIwMTMtMDctMjUgMTc6NTY6MzggLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBydHBnc3RwYXk6IEFkZCBldHlwZT00IGZvciBwYXlsb2FkaW5nIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQKLQotMjAxMy0wNy0yNSAxNzo1MjoxNiAtMDQwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkgIHJ0cGdzdHBheTogRml4IHR5cG8sIEdTVF9FVkVOVF9DVVNUT01fQk9USCBoYXMgZXR5cGUgb2YgMwotCi0yMDEzLTA4LTIwIDE0OjM2OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogaGFuZGxlIEVPUwotCSAgV2hlbiB0aGUgcXVldWUgaXMgZW1wdHksIGFuZCB3ZSByZWNlaXZlZCBFT1MsIHBhdXNlIGFuZCBwdXNoIGFuIEVPUwotCSAgZXZlbnQgZG93bnN0cmVhbS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDYzODcKLQotMjAxMy0wOC0yMCAxMDoyNjoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHVwZGF0ZSBkb2NzCi0KLTIwMTMtMDgtMjAgMTA6MjU6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiB1cGRhdGUgYWxsIHRpbWVycwotCSAgS2VlcCBsb29waW5nIG92ZXIgYWxsIHJlZ2lzdGVyZWQgdGltZXJzIHNvIHRoYXQgd2UgY2FuIG1hcmsgdGhlbSBsb3N0IGluc3RlYWQgb2YKLQkgIHN0b3BwaW5nIGFzIHNvb24gYXMgd2UgZmluZCB0aGUgdGltZXIgZm9yIHRoZSBjdXJyZW50IHNlcW51bS4KLQotMjAxMy0wOC0yMCAwODo1NTo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCi0KLTIwMTMtMDgtMTkgMjE6MTA6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiByZW9yZ2FuaXplIHRpbWVyIGhhbmRsaW5nCi0JICBSZXN0cnVjdHVyZSBoYW5kbGluZyBvZiBpbmNvbW1pbmcgcGFja2V0IGFuZCB0aGUgZ2FwIHdpdGggdGhlIGV4cGVjdGVkIHNlcW51bQotCSAgYW5kIHJlZ2lzdGVyIGFsbCB0aW1lcnMgZnJvbSB0aGUgX2NoYWluIGZ1bmN0aW9uLgotCSAgQ29udmVydCBhIHRpbWVyIHRvIGEgTE9TVCBwYWNrZXQgdGltZXIgd2hlbiB0aGUgbWF4IGFtb3VudCBvZiByZXRyYW5zbWlzc2lvbgotCSAgcmVxdWVzdHMgaGFzIGJlZW4gcmVhY2hlZC4KLQotMjAxMy0wOC0xOSAyMTozNzo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlZmFjdG9yIHBhY2tldCBzcGFjaW5nIGNhbGN1bGF0aW9uCi0KLTIwMTMtMDgtMTkgMjE6MzQ6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBrZWVwIHRyYWNrIG9mIGxhc3Qgc2VxbnVtIGFuZCBkdHMKLQotMjAxMy0wOC0xOSAyMToyOTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHNtYWxsIGNsZWFudXBzCi0KLTIwMTMtMDgtMTkgMjE6MjE6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiByZXNldCByZXRyYW5zbWlzc2lvbiB0aW1lcnMgaW4gYWRkL3Jlc2NoZWR1bGUKLQkgIFJlc2V0IHRoZSByZXRyYW5zbWlzc2lvbiB0aW1lcnMgd2hlbiBhZGRpbmcgYW5kIHJlc2NoZWR1bGluZyBhIHRpbWVyLgotCi0yMDEzLTA4LTE5IDIxOjEyOjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVuYW1lIHZhcmlhYmxlcyBmb3IgcGFja2V0IHNwYWNpbmcKLQotMjAxMy0wOC0xOSAxNDo1ODowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlbW92ZSBsb3N0IHRpbWVyIHdoZW4gd2UgZ2V0IHRoZSBwYWNrZXQKLQkgIFdoZW4gd2UgcmVjZWl2ZSBhIHBhY2tldCwgYWxzbyByZW1vdmUgdGhlIExPU1QgdGltZXIgZm9yIGl0LgotCi0yMDEzLTA4LTE5IDE0OjU2OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogZXhwZWN0ZWQgc2VxbnVtIG11c3QgaW5jcmVhc2UKLQkgIE9ubHkgdXBkYXRlIHRoZSBleHBlY3RlZCBzZXFudW0gd2hlbiBpdCBpcyBiaWdnZXIgdGhhbiB0aGUgcHJldmlvdXMgZXhwZWN0ZWQKLQkgIHNlcW51bS4KLQotMjAxMy0wOC0xOSAxNDo1NTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGFkZCBtb3JlIGRlYnVnCi0KLTIwMTMtMDgtMTIgMTY6MTU6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cXVldWUuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHF1ZXVlLmg6Ci0JICBydHhxdWV1ZTogYWRkIHJldHJhbnNtaXNzaW9uIHF1ZXVlIGVsZW1lbnQKLQotMjAxMy0wOC0xMiAxNDo1MzozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogYWRkIHNvbWUgZG9jcwotCi0yMDEzLTA4LTA2IDE2OjI5OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBzZXNzaW9uOiBoYW5kbGUgTkFDSyBmZWVkYmFjayBhbmQgZ2VuZXJhdGUgZXZlbnRzCi0JICBIYW5kbGUgYW5kIHBhcnNlIHRoZSBmZWVkYmFjayBOQUNLIHBhY2tldHMgYW5kIGdlbmVyYXRlIGEgUmV0cmFuc21pc3Npb24KLQkgIGV2ZW50IGZvciBlYWNoIE5BQ0tlZCBwYWNrZXQKLQotMjAxMy0wOC0xOSAxMzoxOTo0MiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogQWRkIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIGdzdF92NGwyX29iamVjdF9nZXRfZm9ybWF0X2xpc3QKLQotMjAxMi0xMC0yMiAxNzo1ODowNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JICB2NGwyOiBEZS1kdXBsaWNhdGUgY2FwcyBwcm9iaW5nIGJldHdlZW4gc3JjIGFuZCBzaW5rCi0KLTIwMTMtMDgtMTMgMTc6MzI6MTcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9wdWxzZS9NYWtlZmlsZS5hbToKLQkqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5oOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkgIHB1bHNlOiBSZW1vdmUgdW51c2VkIEdzdFB1bHNlUHJvYmUKLQotMjAxMy0wOC0xOSAxMjo0Njo0NSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6Ci0JKiBzeXMvdjRsMi90dW5lci5jOgotCSogc3lzL3Y0bDIvdHVuZXJjaGFubmVsLmM6Ci0JKiBzeXMvdjRsMi90dW5lcm5vcm0uYzoKLQkgIHY0bDI6IFVzZSBHX0RFRklORV8gbWFjcm9zIGZvciBhZGRlZCB0aHJlYWQgc2FmZXR5Ci0KLTIwMTMtMDgtMTcgMTE6Mjg6MTMgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmg6Ci0JICB2aWRlb21peGVyOiBEbyBub3Qgc2VuZCBmbHVzaF9zdG9wIG91cnNlbGYgYWZ0ZXIgYSBmbHVzaF9zdGFydAotCSAgV2hlbiB3ZSByZWNlaXZlIGEgZmx1c2hfc3RhcnQsIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgbmV4dCBmbHVzaF9zdG9wCi0JICBhbmQgZm93YXJkIGl0LCBub3QgY3JlYXRlIGEgZmx1c2hfc3RvcCBvdXJzZWxmLgotCi0yMDEzLTA4LTE2IDE3OjEwOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgaDI2NGRlcGF5OiBpbml0IGRlYnVnIGNhdGVnb3J5IGVhcmx5Ci0JICBJbml0IHRoZSBkZWJ1ZyB2YXJpYWJsZSB3aGVuIHdlIHJlZ2lzdGVyIHRoZSBlbGVtZW50IGJlY2F1c2UgaXQgaXMgYWxzbyB1c2VkIGJ5Ci0JICB0aGUgcGF5bG9hZGVyIGVsZW1lbnQgd2hlbiBpdCBjYWxscyB0aGUgYWRkX3Nwc19wcHMgbWV0aG9kLgotCi0yMDEzLTA4LTE2IDEzOjI2OjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IFByb3Blcmx5IHNldCBoZWFkZXJzIHZpYSB0aGUgYmFzZSBjbGFzcyBpbnN0ZWFkIG9mIGp1c3QgcHVzaGluZyB0aGVtIGRvd25zdHJlYW0KLQkgIFByZXZlbnRzIGJ1ZmZlcnMgZnJvbSBiZWluZyBzZW5kIGJlZm9yZSB0aGUgY2FwcyBhbmQgc2VnbWVudCBldmVudHMuCi0KLTIwMTMtMDgtMTUgMTA6NTk6MTAgKzAxMDAgIENocmlzIEJhc3MgPGZsb29ibGVmbGFtQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBjaGVjayBkZW5vbWluYXRvciBpc24ndCB6ZXJvIGJlZm9yZSBzY2FsaW5nIGR1cmF0aW9uLgotCSAgV2hlbiBnc3RfcXRkZW11eF9jb25maWd1cmVfc3RyZWFtIHNldHMgZnBzX2QsIGNoZWNrIHRoYXQgbl9zYW1wbGVzIGlzCi0JICBub24temVybyBiZWZvcmUgdXNpbmcgaXQgYXMgYSBkZW5vbWluYXRvciB0byBzY2FsZSB0aGUgc3RyZWFtIGR1cmF0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjA3NgotCi0yMDEzLTA4LTE1IDE1OjA4OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZweC9nc3R2cDlkZWMuYzoKLQkgIGV4dDogVXNlIG5ldyBmbHVzaCB2ZnVuYyBvZiB2aWRlbyBjb2RlYyBiYXNlIGNsYXNzZXMgYW5kIHJlbW92ZSByZXNldCBpbXBsZW1lbnRhdGlvbnMKLQotMjAxMy0wOC0xNCAxNjoxOTozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGZvcndhcmQgZmx1c2ggYmVmb3JlIHN0b3BwaW5nIGRhdGFmbG93Ci0JICBGaXJzdCBmb3J3YXJkIHRoZSBmbHVzaCBldmVudCBhbmQgdGhlbiBzdG9wIG91ciBsb29wIGZ1bmN0aW9uLgotCi0yMDEzLTA4LTE0IDEzOjEwOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHJlcXVpcmUgbGlic291cCA+PSAyLjM4Ci0JICBCdW1wIGxpYnNvdXAgcmVxdWlyZW1lbnQgZm9yIG5ld2VyIEFQSSB1c2VkLCBsaWtlIGhlYWRlcnNfZ2V0X29uZSgpLgotCSAgMi4zOCBpcyBmcm9tIGVhcmx5IDIwMTIgYW5kIGlzIGluIGxpbmVuIHdpdGggb3VyIEdMaWIgcmVxdWlyZW1lbnQuCi0KLTIwMTMtMDgtMTQgMTE6NTQ6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBkb24ndCB1c2UgZGVwcmVjYXRlZCBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoKSBBUEkKLQotMjAxMy0wOC0xMyAxNzo0NDo1MCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBJZ25vcmUgZmlsZXMgZnJvbSBhdXRvbWFrZSB0ZXN0LWRyaXZlcgotCi0yMDEzLTA4LTEyIDE1OjI4OjM0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSAgcnRwaDI2NHBheTogVXNlIHRoZSBTUFMvUFBTIGhhbmRsaW5nIGZ1bmN0aW9uIGZyb20gdGhlIGRlcGF5bG9hZGVyCi0JICBSZW1vdmUgZHVwbGljYXRlZCBjb3BpZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDU1NTMKLQotMjAxMy0wOC0xMiAxNToyNjowOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5Lmg6Ci0JICBydHBoMjY0ZGVwYXk6IE1ha2UgdGhlIFNQUy9QUFMgZGVkdXBsaWNhdGlvbiBmdW5jdGlvbiBnZW5lcmljCi0JICBNYWtlIGl0IG5vdCB0b3VjaCBhbnkgaW50ZXJuYWxzIG9mIHRoZSBkZXBheWxvYWRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTU1MwotCi0yMDEzLTA4LTEzIDE0OjA5OjIwICswMTAwICBDaHJpcyBCYXNzIDxmbG9vYmxlZmxhbUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBhbGxvdyBjb252ZXJzaW9uIGZyb20gcmF3IEFBQyB0byBBRFRTCi0JICBUaGlzIHBhdGNoIHdpbGwgcHJlcGVuZCBBRFRTIGhlYWRlcnMgdG8gcmF3IEFBQyBhdWRpbyBmcmFtZXMsIGFsbG93aW5nCi0JICB1cHN0cmVhbSBlbGVtZW50cyB0byBsaW5rIHRvIGRlY29kZXJzIHRoYXQgb25seSBzdXBwb3J0IEFBQyBpbiBBRFRTIGZvcm1hdC4KLQkgIE5vdGUgdGhhdCBubyBlcnJvciBjb3JyZWN0aW9uIGJpdHMgYXJlIGFkZGVkIHRvIEFEVFMgZnJhbWVzIGluIHRoaXMgY29kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTU3NDAKLQotMjAxMy0wOC0xMyAxMjo0NDoxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBPbmx5IGZyZWUgR0NoZWNrU3VtIGFmdGVyIGl0cyBsYXN0IHVzYWdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1NzYwCi0KLTIwMTMtMDgtMTMgMTI6MDI6MjkgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogZml4IGNyaXRpY2FsIHNldHRpbmcgYSBOVUxMIHVyaSByZWRpcmVjdGlvbgotCi0yMDEzLTA3LTEzIDAxOjUwOjU2ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIHNvdXBodHRwc3JjOiBhZGQgcmVkaXJlY3Rpb24gdG8gdGhlIFVSSSBxdWVyeQotCi0yMDEzLTA3LTMxIDEwOjQyOjA3ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGVsc3Qgc2hvdWxkIG9mZnNldCBzYW1wbGVzIGluc3RlYWQgb2YgYnVmZmVycwotCSAgVGhlIGN1cnJlbnQgYXBwcm9hY2ggd2hlcmUgYnVmZmVycyBhcmUgb2Zmc2V0IGlzIG5vdCBpZGVhbCwgYXMgZHVyaW5nIHNlZWsKLQkgIGFuZCBsb29wIGN1cnJlbnQgdGltZSBpcyBjb21wYXJlZCB0byBzYW1wbGUgdGltZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMjY0Ci0KLTIwMTMtMDgtMDcgMTk6MzI6MDcgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IFNlbmQgRU9TIGlmIGJ1Zl9lbmQgPj0gc2VnbWVudC5zdG9wCi0JICBUaGF0IG1lYW5zIHRoZSB3aG9sZSBzZWdtZW50IGlzIGFscmVhZHkgcGxheWVkLCBhbmQgd2UgYXJlIHN1cmUgd2UKLQkgIGFyZSBFT1MgYXQgdGhhdCBwb2ludC4KLQkgIEFsc28gaGFuZGxlIHNlZ21lbnQgc2Vla3MsIGFuZCBkbyBub3Qgc2VuZCBFT1MgaW4gdGhhdCBjYXNlLgotCi0yMDEzLTA4LTA0IDE0OjQwOjM4ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogc2VuZCBwcm9wZXIgc3RyZWFtX3N0YXJ0IGV2ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8vc2hvd19idWcuY2dpP2lkPTcwNTQ0OQotCi0yMDEzLTA4LTA4IDExOjUxOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRG9uJ3QgcHJpbnQgd2FybmluZ3MgZHVyaW5nIGZsdXNoaW5nIGFuZCBzdG9wIGFzIHNvb24gYXMgcG9zc2libGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLy9zaG93X2J1Zy5jZ2k/aWQ9NzA1NDQyCi0KLTIwMTMtMDgtMDcgMTE6MTQ6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkgIHJ0cHZwOGRlcGF5OiBtYXJrIGtleSBmcmFtZXMgYW5kIGRlbHRhIGZyYW1lcyBwcm9wZXJseQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTU1MAotCi0yMDEzLTA4LTA1IDIzOjIzOjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBhZGQgTkFDSyBmZWVkYmFjayBpbiBSVENQCi0KLTIwMTMtMDgtMDUgMjM6MjI6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBzb3VyY2U6IGFkZCBtZXRob2RzIHRvIHJlZ2lzdGVyIE5BQ0sKLQkgIEFkZCBhIG1ldGhvZCB0byByZWdpc3RlciBhIG1pc3NpbmcgcGFja2V0IGZvciBhbiBzc3JjIGFsb25nIHdpdGgKLQkgIG1ldGhvZHMgdG8gZ2V0IHRoZSBtaXNzaW5nIHBhY2tldHMgYW5kIGNsZWFyIHRoZW0uCi0KLTIwMTMtMDgtMDQgMjM6MDU6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHNlc3Npb246IGhhbmRsZSBSZXRyYW5zbWlzc2lvbiBldmVudCBhbmQgc2NoZWR1bGUgTkFDSwotCSAgSGFuZGxlIHRoZSByZXRyYW5zbWlzc2lvbiBldmVudCBmcm9tIGRvd25zdHJlYW0gYW5kIHVzZSBpdCB0byBzY2hlZHVsZSBhIE5BQ0sKLQkgIHJlcXVlc3QuCi0KLTIwMTMtMDgtMDUgMjM6MjA6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IHBhc3MgZGF0YSB0byByZW1vdmUgZnVuYwotCSAgUGFzcyB0aGUgZGF0YSB0byB0aGUgcmVtb3ZlIGZ1bmN0aW9uIGJlY2F1c2Ugd2UgYXJlIGdvaW5nIHRvIGRlcmVmIGl0IHdoZW4gdGhlcmUKLQkgIGlzIHBsaSBvciBmaXIuCi0KLTIwMTMtMDgtMDYgMTU6Mjg6NTAgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggY29tcGlsYXRpb24KLQotMjAxMy0wOC0wNiAxNToxNzo0NCArMDIwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFJhdyBidWZmZXIgRFRTIHNob3VsZCBhbHdheXMgYmUgQ0xPQ0tfVElNRV9OT05FCi0KLTIwMTMtMDgtMDYgMTE6NTg6MzggKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IE1ha2Ugc3VyZSB0byBzZW5kIEVPUyBpZiB0aGUgYnVmZmVyIGVuZCB0aW1lIGVxdWFscyB0aGUgc2VnbWVudCBlbmQgdGltZQotCSAgT3RoZXJ3aXplIEVPUyBuZXZlciBnZXRzIHNlbnQgaW4gdGhhdCBwYXJ0aWN1bGFyIGNhc2UuCi0KLTIwMTMtMDgtMDUgMDg6NDk6NTAgKzAyMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBnb29tOiBFbnN1cmUgc3JjIGNhcHMgYXJlIHdyaXRhYmxlCi0JICBJbiBzb21lIGNhc2VzIHRoZSBzcmMgY2FwcyBkZXRlcm1pbmVkIGJ5IGdvb20gd2VyZW4ndCB3cml0YWJsZSwgY2F1c2luZwotCSAgYSBidW5jaCBvZiBhc3NlcnRpb24gZmFpbHVyZXMgYW5kIGZhaWxlZCBjYXBzLiBGaXhlZCBieSBhbHdheXMKLQkgIGV4cGxpY2l0ZWx5IG1ha2luZyB0aGUgY2FwcyB3cml0YWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTQ3NQotCi0yMDEzLTA4LTA0IDIzOjE4OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBzZXNzaW9uOiB1c2UgY29tbW9uIHNlbmRfcnRjcCBtZXRob2QKLQkgIFJldXNlIHRoZSBzZW5kX3J0Y3AgbWV0aG9kIHRoYXQgYWxyZWFkeSBhc2tzIGZvciB0aGUgY3VycmVudCB0aW1lIHdoZW4KLQkgIHJlcXVlc3RpbmcgYSBrZXlmcmFtZS4KLQotMjAxMy0wOC0wNCAyMzoxMjo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgc2Vzc2lvbjogRG9uJ3QgdXNlIENsb2NrVGltZURpZmYgZm9yIHVuc2lnbmVkIGRlbGF5cwotCi0yMDEzLTA4LTA0IDE2OjUyOjE1ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IFVzZSBidWZmZXIgUFRTIGlmIERUUyBpcyBub3Qgc2V0Ci0JICBBdm9pZHMgZW5kaW5nIHVwIHdpdGggY29tcGxldGVseSBib2d1cyBzY2FsZWQgZHVyYXRpb24vcHRzIHdoZW4gbmV3Ci0JICBidWZmZXJzIGhhdmUgaW52YWxpZCBEVFMuCi0KLTIwMTMtMDgtMDQgMTQ6MzI6NDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogc2tpcCBodHRwcyB0ZXN0IGlmIHRoZXJlJ3Mgbm8gVExTIHN1cHBvcnQgaW4gc291cC9nbGliCi0KLTIwMTMtMDgtMDQgMTE6MjA6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSAgcnRwZGVjOiB1c2UgZ2VuZXJpYyBtYXJzaGFsbGVyCi0KLTIwMTMtMDgtMDQgMTA6NTI6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvLmdpdGlnbm9yZToKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi1tYXJzaGFsLmxpc3Q6Ci0JKiBzeXMvdjRsMi90dW5lci1tYXJzaGFsLmxpc3Q6Ci0JKiBzeXMvdjRsMi90dW5lci5jOgotCSogc3lzL3Y0bDIvdHVuZXIuaDoKLQkqIHdpbjMyL01BTklGRVNUOgotCSogd2luMzIvY29tbW9uL3R1bmVyLWVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL3R1bmVyLWVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL3R1bmVyLW1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi90dW5lci1tYXJzaGFsLmg6Ci0JICB2NGwyOiByZW1vdmUgdW51c2VkIGVudW10eXBlcyBhbmQgdXNlIGdlbmVyaWMgbWFyc2hhbGxlcgotCi0yMDEzLTA4LTA0IDEwOjQ3OjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGdzdC91ZHAvLmdpdGlnbm9yZToKLQkqIHdpbjMyL2NvbW1vbi9nc3R1ZHAtZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dWRwLWVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHVkcC1tYXJzaGFsLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dWRwLW1hcnNoYWwuaDoKLQkgIHVkcDogcmVtb3ZlIHVudXNlZCBtYXJzaGFsIGFuZCBlbnVtdHlwZXMgZmlsZXMKLQotMjAxMy0wOC0wNCAwOTozODoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci8uZ2l0aWdub3JlOgotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogd2luMzIvTUFOSUZFU1Q6Ci0JKiB3aW4zMi9jb21tb24vZ3N0cnRwYmluLW1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RydHBiaW4tbWFyc2hhbC5oOgotCSAgcnRwbWFuYWdlcjogdXNlIGdlbmVyaWMgbWFyc2hhbGxlcgotCi0yMDEzLTA4LTA0IDAwOjEzOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogc2VuZCBldmVudCBpbiByaWdodCBkaXJlY3Rpb24KLQotMjAxMy0wOC0wMiAxNzozODozNCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGNyZWF0ZS9yZW1vdmUgb3JjIGRpcmVjdG9yeSBhdCBwcm9wZXIgdGltZQotCSAgQmVmb3JlIGF1dG9tYWtlIGNyZWF0ZXMgLmRlcHMgZGlyZWN0b3JpZXMsIGFuZCBkdXJpbmcgZGlzdGNsZWFuLgotCi0yMDEzLTA4LTAzIDAwOjI1OjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBhZGQgRklSIGFuZCBQTEkgbGlrZSBvdGhlciBSVENQIHBhY2tldHMKLQkgIEFkZCB0aGUgRklSIGFuZCBQTEkgcGFja2V0cyBsaWtlIHRoZSBvdGhlciBSVENQIHBhY2tldCBpbnN0ZWFkIG9mIGZyb20gdGhlCi0JICBvbi1zZW5kaW5nLXJ0Y3AgZGVmYXVsdCBzaWduYWwgaGFuZGxlci4KLQotMjAxMy0wOC0wMiAxNzoyMjo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGZpeCBwcm9wZXJ0eSByYW5nZXMKLQotMjAxMy0wOC0wMiAxNjo0Mjo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHB1c2ggcmV0cmFuc21pc3Npb24gZXZlbnRzCi0KLTIwMTMtMDgtMDIgMTQ6MTI6MTYgKzAyMDAgIEx1Ym9zeiBTYXJuZWNraSA8bHVib3N6QGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYnVpbGQ6IGFkZCBzdWJkaXItb2JqZWN0cyB0byBBTV9JTklUX0FVVE9NQUtFCi0JICBGaXhlcyB3YXJuaW5ncyB3aXRoIGF1dG9tYWtlIDEuMTQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUzNTAKLQotMjAxMy0wOC0wMiAxNDo1NDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGFkZCBzdXBwb3J0IGZvciByZXRyYW5zbWlzc2lvbiByZXRyeQotCSAgV2hlbiB3ZSBkaWRuJ3QgcmVjZWl2ZSBhIHBhY2tldCBhZnRlciByZXF1ZXN0aW5nIHJldHJhbnNtaXNzaW9uLCByZXRyeQotCSAgYXNraW5nIGZvciByZXRyYW5zbWlzc2lvbiBmb3IgYSBjZXJ0YWluIHBlcmlvZC4KLQotMjAxMy0wOC0wMiAxNDoxOTo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGFkZCBwcm9wZXJ0aWVzCi0JICBBZGQgcHJvcGVydGllcyB0byBjb250cm9sIHJldHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMKLQotMjAxMy0wOC0wMiAxMjo0NDo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHVzZSBjb3JyZWN0ZWQgdGltZW91dCB3aGVuIHJlc2NoZWR1bGluZwotCSAgV2hlbiB3ZSByZWNhbGN1bGF0ZSB0aGUgdGltZW91dCwgdXNlIHRoZSBjb3JyZWN0ZWQgdGltZW91dCB2YWx1ZSBkZXBlbmRpbmcgb24KLQkgIHRoZSB0aW1lciB0eXBlLgotCi0yMDEzLTA4LTAyIDEyOjQzOjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogdXBkYXRlIHRpbWVycyBhZnRlciBxdWV1ZWluZwotCSAgRWxzZSB3ZSBtaWdodCB1cGRhdGUgdGhlIHRpbWVyIG5lZWRsZXNzbHkgZm9yIGR1cGxpY2F0ZXMuCi0KLTIwMTMtMDgtMDIgMTI6NDI6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBtb3ZlIG1ldGhvZCB1cAotCi0yMDEzLTA4LTAyIDA2OjI4OjMyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogc21hbGwgY2xlYW51cAotCi0yMDEzLTA4LTAxIDIzOjI2OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogdW5zY2hlZHVsZSBvbGQgZXhwZWN0ZWQgcGFja2V0cwotCSAgV2hlbiB3ZSByZWNlaXZlIGEgbmV3IHBhY2tldCwgdW5zY2hlZHVsZSBvbGQgb3V0c3RhbmRpbmcgcGFja2V0cyB3aGVuIHRoZWlyCi0JICBzZXFudW0gaXMgdG9vIGZhciBhd2F5LgotCi0yMDEzLTA4LTAxIDIzOjI5OjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVmYWN0b3IgdGltZXIgdXBkYXRlCi0KLTIwMTMtMDgtMDEgMjM6MjQ6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiB1cGRhdGUgdGltZXJzIHdoZW4gcmVtb3ZpbmcKLQkgIFVwZGF0ZSB0aGUgdGltZXJzIHdoZW4gd2UgcmVtb3ZlIGEgdGltZXIuCi0JICBIYW5kbGUgY2FuY2VsZWQgdGltZXJzLCBtYWtlIHRoZW0gdW5zY2hlZHVsZSB0aGUgY3VycmVudCB0aW1lciBhbmQKLQkgIHRyaWdnZXIgdGhlIHRpbWVvdXQgY29kZS4KLQotMjAxMy0wOC0wMSAyMzoyMjowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGZpeCB0eXBvCi0KLTIwMTMtMDgtMDEgMTU6NDA6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBpbXByb3ZlIHRpbWVvdXQgbWFuYWdlbWVudAotCSAgSWYgd2UgY2hhbmdlIHRoZSBzZXFudW0gb2YgYW4gZXhpc3RpbmcgdGltZXIgYW5kIHdlIHdlcmUgd2FpdGluZyBmb3IKLQkgIHRoYXQgdGltZXIsIHVuc2NoZWR1bGUgaXQuIElmIHdlIGNoYW5nZSB0aGUgdGltZW91dCBvZiBhbiBleGlzdGluZyB0aW1lciBhbmQgd2UKLQkgIHdlcmUgd2FpdGluZyBvbiBpdCwgb25seSB1bnNjaGVkdWxlIHdoZW4gdGhlIG5ldyB0aW1lIGlzIHNtYWxsZXIuCi0KLTIwMTMtMDgtMDEgMTU6MDU6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBpbnN0YWxsIHRpbWVyIGZvciBleHBlY3RlZCBhcnJpdmFsCi0JICBJbnN0YWxsIGEgdGltZXIgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZXhwZWN0ZWQgYXJyaXZhbCB0aW1lIG9mIGEgcGFja2V0Ci0JICBleHBpcmVkLgotCi0yMDEzLTA4LTAxIDE0OjU2OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogaW1wcm92ZSB1bnNjaGVkdWxlIG9mIHRpbWVycwotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmMKLQotMjAxMy0wOC0wMSAxMjoyMTo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IG1vdmUgY29kZSBhcm91bmQKLQotMjAxMy0wOC0wMSAxMjowNzoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGVzdGltYXRlIGludGVyIHBhY2tldCBzcGFjaW5nCi0JICBXaGVuIHdlIHNlZSB0d28gcGFja2V0cyB3aXRoIGNvbnNlY3V0aXZlIHNlcW51bXMgYW5kIGEgZGlmZmVyZW50IFJUUCB0aW1lLCB1c2UKLQkgIHRoZSBEVFMgZGlmZmVyZW5jZSBhcyB0aGUgaW50ZXIgcGFja2V0IHNwYWNpbmcgZXN0aW1hdGUuCi0KLTIwMTMtMDgtMDEgMTI6MDE6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgdGltZW91dAotCi0yMDEzLTA4LTAxIDExOjQ5OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogY2xlYW51cCB0aW1lciBoYW5kbGluZwotCi0yMDEzLTA4LTAxIDExOjQwOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVzZXQgaXMgb25seSBwb3NzaWJsZSB3aXRoIGEgR0FQCi0KLTIwMTMtMDgtMDEgMTE6Mjk6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IG9wZXJhdGUgb24gRFRTCi0JICBNYWtlIHRoZSBqaXR0ZXJidWZmZXIgc2NoZWR1bGUgdGhlIHRpbWVvdXRzIGJhc2VkIG9uIHRoZSBEVFMgaW5zdGVhZAotCSAgb2YgdGhlIFBUUy4gVGhpcyBtYWtlcyBpdCBhbGwgc21vb3RoZXIgd2l0aCByZW9yZGVyZWQgZnJhbWVzIGFuZCBnaXZlcwotCSAgdGhlIGRlY29kZXIgdGltZSB0byByZW9yZGVyIHRoZSBmcmFtZXMgaW4gdGltZS4KLQotMjAxMy0wOC0wMSAxMToxNDoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlbmFtZSB0aW1vdXQgdmFyaWFibGUKLQotMjAxMy0wNy0zMSAxNzowODo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHNtYWxsIGNsZWFudXAKLQotMjAxMy0wNy0zMSAxNjo1OTo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGJsb2NrIG91dHB1dCBpbiBwYXVzZWQgb3IgYnVmZmVyaW5nCi0KLTIwMTMtMDctMzEgMTY6NTk6MDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBzdG9yZSBwdHMgaW4gdGltZXIKLQkgIE9ubHkgc3RvcmUgdGhlIHB0cyBpbiB0aGUgdGltZXIgc28gdGhhdCB3ZSBjYW4gYm90aCBkbyB0aW1lb3V0cyB3aXRoIHRpbWluZ3Mgb24KLQkgIHRoZSBpbnB1dCBhbmQgb3V0cHV0IG9mIHRoZSBqaXR0ZXJidWZmZXIuCi0KLTIwMTMtMDctMzAgMjM6MTQ6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiByZWZhY3RvciBqaXR0ZXJidWZmZXIKLQkgIFJlZmFjdG9yIHRoZSBqaXR0ZXJidWZmZXIgY29kZS4gTWFrZSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgcGVla2luZyBhIGJ1ZmZlciwKLQkgIHB1c2hpbmcgdGhlIG5leHQgYnVmZmVyLCB3YWl0aW5nIGZvciB0aW1lb3V0cyBhbmQgaGFuZGxpbmcgdGhlIHRpbWVvdXRzLgotCSAgVGhlIG1haW4gbG9vcCBub3cgdHJpZXMgdG8gcHVzaCBhcyBtYW55IGJ1ZmZlcnMgYXMgaXQgY2FuIHVudGlsIGl0IHJ1bnMgb3V0IG9mCi0JICBidWZmZXJzIG9yIHdoZW4gaXQgZGV0ZWN0cyBhIHNlcW51bSBkaXNjb250LiBUaGVuIGl0IHdpbGwgd2FpdCBmb3Igc29tZSBldmVudCB0bwotCSAgaGFwcGVuIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHB1c2ggbW9yZSBidWZmZXJzLgotCSAgTWFrZSBtZXRob2RzIHRvIHJlZ2lzdGVyIHRpbWVvdXRzIGluIGFuIGFycmF5LiBUaGVzZSB0aW1lb3V0cyBhcmUgcmVnaXN0ZXJlZAotCSAgd2hlbiB3ZSBkZXRlY3QgYSBtaXNzaW5nIHBhY2tldCwgc3luYyBmb3IgdGhlIGZpcnN0IHBhY2tldCBvciB3aGVuIHdlIGZpbmQgYW4KLQkgIGVzdGltYXRpb24gZm9yIHRoZSBlbmQtb2Ytc3RyZWFtLgotCSAgVGhpcyBncmVhdGx5IHNpbXBsaWZpZXMgYW5kIGNsYXJpZmllcyB0aGUgY29kZSBhbmQgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0bwotCSAgcmVnaXN0ZXIgbW9yZSBjb21wbGljYXRlZCB0aW1lb3V0IHNjaGVtZXMgbGF0ZXIuCi0KLTIwMTMtMDctMzAgMTg6NTI6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiB1c2UgTlVMTCB0byBpZ25vcmUgcGVyY2VudAotCSAgSWYgd2UgcGFzcyBOVUxMIHRvIHBvcCBhbmQgcHVzaCB3ZSBpZ25vcmUgdGhlIHBlcmNlbnQgcmVzdWx0LgotCi0yMDEzLTA3LTMwIDA3OjAwOjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVmYWN0b3IKLQkgIE1vdmUgZW9zIGVzdGltYXRpb24gaW50byBzZXBhcmF0ZSBmdW5jdGlvbgotCi0yMDEzLTA3LTMwIDE0OjI4OjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogZG9uJ3QgbGVhayBzdHJlYW1faWQgc3RyaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MTQyCi0KLTIwMTMtMDctMjkgMTk6NTM6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2hyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2wucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTMtMDctMjkgMTk6NDg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICB0ZXN0czogaWdub3JlIG5ldyB0ZXN0IGJpbmFyaWVzCi0KLTIwMTMtMDctMjkgMTQ6NDc6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjEuMyA9PT0KLQotMjAxMy0wNy0yOSAxMzo0MjoxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjEuMwotCi0yMDEzLTA3LTI5IDEzOjQyOjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEzLTA3LTI5IDEyOjEyOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBnc3Q6IERvbid0IHN3YXAgc3RhcnQvc3RvcCBmb3IgbmVnYXRpdmUgcmF0ZXMgaW4gdGhlIFNFR01FTlQgcXVlcnkKLQotMjAxMy0wNy0yOSAxMToxODo0MCArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBDaGVjayBmb3IgZGF0YSBzaXplIHdoZW4gcGFyc2luZyBoMjY0IGNvZGVjIGRhdGEgZnJvbSBzdHJmIGF0b20KLQotMjAxMy0wNy0yOSAxMDo1Mzo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEltcGxlbWVudCBTRUdNRU5UIHF1ZXJ5Ci0KLTIwMTMtMDctMjkgMTA6NTM6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IEltcGxlbWVudCBTRUdNRU5UIHF1ZXJ5Ci0KLTIwMTMtMDctMjkgMTA6NTA6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEltcGxlbWVudCBTRUdNRU5UIHF1ZXJ5Ci0KLTIwMTMtMDctMjcgMTg6MTA6MjIgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogU3VwcG9ydCBIMjY0IGZvdXJjYwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDk5NgotCi0yMDEzLTA3LTI4IDE4OjA5OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IEZpeCBoYW5kbGluZyBvZiBpbWFnZSB0YWdzCi0JICBUaGUgY2FwcyBzaG91bGQgYmUgdXNlZCB0byBnZXQgdGhlIG1pbWV0eXBlIGFuZCB0aGVyZSBpcwotCSAgb25seSBhbiBpbmZvIHN0cnVjdHVyZSBmb3IgdGhlIEdzdFNhbXBsZSBpZiB0aGUgaW1hZ2UtdHlwZQotCSAgaXMgbm90IE5PTkUuCi0KLTIwMTMtMDctMjggMTg6MDQ6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogRG9uJ3QgY3Jhc2ggaWYgdGhlcmUgaXMgbm8gaW1hZ2UgdGFnIGluZm9ybWF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA1MDE4Ci0KLTIwMTMtMDctMjggMTc6Mzg6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEZpeCBkdXJhdGlvbiByZXBvcnRpbmcgaW4gcHVzaCBtb2RlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwOTMzCi0KLTIwMTMtMDctMjggMTc6MzI6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IERvbid0IGZvcmdldCB1bm1hcHBpbmcgYW5kIHVucmVmZmluZyBidWZmZXIKLQotMjAxMy0wNy0yNiAyMTowNjoxNyArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHVubWFwIGJ1ZmZlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDk1MQotCi0yMDEzLTA3LTI2IDIyOjMxOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBkb24ndCBtYWtlIGJ1ZmZlciB3cml0YWJsZSBwcmVtYXR1cmVseQotCSAgVGhlcmUgaXMgbm8gcmVhc29uIHRvIG1ha2UgdGhlIFNSIGJ1ZmZlciB3cml0YWJsZSBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIGJldHRlcgotCSAgZGVsYXllZCB1bnRpbCBuZWVkZWQuCi0KLTIwMTMtMDctMjYgMjI6MjU6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IGlnbm9yZSBSVENQIGZvciBpbmFjdGl2ZSBzb3VyY2VzCi0KLTIwMTMtMDctMjYgMjI6MjU6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IHNtYWxsIGNsZWFudXAKLQotMjAxMy0wNy0yNiAxNzoxNzozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBzZXNzaW9uOiBoYW5kbGUgcGFydGlhbCBSVENQIHJlcG9ydCBibG9ja3MKLQkgIFdoZW4gd2UgaGF2ZSBtb3JlIFNTUkNzIHRvIHJlcG9ydCB0aGFuIHdoYXQgZml0IGluIGFuIFJUQ1AgcGFja2V0LCB1c2UgYQotCSAgZ2VuZXJhdGlvbiBjb3VudGVyIHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlbSBlbmQgdXAgaW4gYSBwYWNrZXQgZXZlbnR1YWxseS4KLQotMjAxMy0wNy0yNiAxNzoyMzoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogY3JlYXRlIFNTUkMgYmVmb3JlIGRvaW5nIHNlc3Npb24gY2xlYW51cAotCSAgTWFrZSB0aGUgaW50ZXJuYWwgc291cmNlIGJlZm9yZSB3ZSBkbyBzZXNzaW9uIGNsZWFudXAKLQotMjAxMy0wNy0yNiAxNzoyMTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogcmVvcmdhbml6ZSB0aGUgcmVwb3J0IGJsb2NrIGNvZGUKLQotMjAxMy0wNy0yNiAxNjowMjowMSArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBmaXggbWVtb3J5IGxlYWsgaW4gY2hlY2tfc3VidGl0bGVfYnVmZmVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0OTIxCi0KLTIwMTMtMDctMjYgMTQ6MjE6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IHJlZmFjdG9yIGFjdGl2ZSBhbmQgc2VuZGVyIGNoZWNrcwotCi0yMDEzLTA3LTI2IDEyOjA2OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiByZW1vdmUgaW50ZXJuYWwgc291cmNlcyBvbiB0aW1lb3V0Ci0JICBXaGVuIGFuIGludGVybmFsIHNvdXJjZSB0aW1lcyBvdXQgYW5kIGJlY29tZXMgYSByZWNlaXZlciwgcmVtb3ZlIGl0LgotCi0yMDEzLTA3LTI2IDExOjQ3OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBjcmVhdGUgYW4gaW50ZXJuYWwgc291cmNlIGZvciBSVENQCi0JICBXaGVuIHdlIG5lZWQgdG8gZG8gUlRDUCBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBpbnRlcm5hbCBzb3VyY2UgeWV0LAotCSAgbWFrZSBvbmUuCi0KLTIwMTMtMDctMjYgMTA6NDc6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgc2Vzc2lvbjogcmVtb3ZlIG9sZCBjb2RlIHRvIGNoYW5nZSBTU1JDCi0JICBSZW1vdmUgY29kZSB1c2VkIHRvIGNoYW5nZSB0aGUgU1NSQyBhZnRlciBhIGNvbGxpc2lvbi4gV2Ugbm93IHNlbmQKLQkgIGEgUkVDT05GSUdVUkUgZXZlbnQgdXBzdHJlYW0gdG8gbWFrZSB0aGUgdXBzdHJlYW0gZWxlbWVudCBjaGFuZ2UgdGhlIFNTUkMuCi0KLTIwMTMtMDctMjYgMTA6NDI6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgc291cmNlOiBkb24ndCB1cGRhdGUgcGFja2V0IFNTUkMKLQkgIFJlbW92ZSB0aGUgY29kZSB0byB1cGRhdGUgdGhlIFNTUkMgaW4gcGFja2V0cywgaXQgY2FuIG5ldmVyIGJlIGNhbGxlZCBub3cgdGhhdAotCSAgd2UgYWx3YXlzIHVzZSBhIHNvdXJjZSB3aXRoIG1hdGNoaW5nIHBhY2tldCBTU1JDLgotCi0yMDEzLTA3LTI2IDEwOjI0OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBzZXNzaW9uOiBkZWxheSBhbGxvY2F0aW9uIG9mIGludGVybmFsIHNvdXJjZQotCSAgQWxsb2NhdGUgdGhlIGludGVybmFsIHNvdXJjZSB3aGVuIHdlIHJlY2VpdmUgYSBjYXBzIHdpdGggdGhlIFNTUkMgb3Igd2hlbiB3ZSBzZWUKLQkgIGEgYnVmZmVyIHdpdGggdGhlIFNTUkMuCi0KLTIwMTMtMDctMjYgMTA6MDA6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IGdlbmVyYXRlIHJlY29uZmlndXJlIG9uIGNvbGxpc2lvbgotCSAgV2hlbiB3ZSBkZXRlY3QgYSBjb2xsaXNpb24sIGNoYW5nZSB0aGUgU1NSQyB0aGF0IHdlIHN1Z2dlc3QgdXBzdHJlYW0KLQkgIGFuZCB0cmlnZ2VyIFJFQ09ORklHVVJFLiBUaGlzIHNob3VsZCBtYWtlIHVwc3RyZWFtIHNlbGVjdCBhIG5ldyBTU1JDLgotCi0yMDEzLTA3LTI2IDA5OjM3OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBzZXNzaW9uOiBwcm9kdWNlIFJUQ1AgZm9yIGFsbCBpbnRlcm5hbCBzb3VyY2VzCi0JICBMb29wIG92ZXIgYWxsIHRoZSBpbnRlcm5hbCBzb3VyY2VzIGFuZCBwcm9kdWNlIFJUQ1AuIFdlIGFsc28gbmVlZAotCSAgdG8gcXVldWUgdGhlIFJUQ1AgcGFja2V0cyBhbmQgc2VuZCB0aGVtIHdoZW4gd2UgYXJlIGZpbmlzaGVkLgotCi0yMDEzLTA3LTI2IDAxOjQwOjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBzZXNzaW9uOiBkZXByZWNhdGUgaW50ZXJuYWwgc291cmNlIGFuZCBzc3JjIHByb3BlcnRpZXMKLQkgIERlcHJlY2F0ZSB0aGUgaW50ZXJuYWwgc291cmNlIGFuZCBpbnRlcm5hbCBzc3JjIHByb3BlcnRpZXMuIFRoZXJlIG1pZ2h0Ci0JICBiZSBtb3JlIHRoYW4gb25lIGludGVybmFsIHNvdXJjZS4KLQotMjAxMy0wNy0yNiAwMToyOTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogaW50ZXJuYWwgc291cmNlcyBkb24ndCB1c2UgcHJvYmF0aW9uCi0KLTIwMTMtMDctMjYgMDE6MjQ6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IGdpdmUgY2FwcyB0byBzZXNzaW9uCi0JICBMZXQgdGhlIHNlc3Npb24gcGFyc2UgdGhlIGNhcHMgYW5kIHVwZGF0ZSBpdHMgU1NSQyB3aGVuIG5lZWRlZC4KLQotMjAxMy0wNy0yNiAwMToxNDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgc2Vzc2lvbjogbWFrZSBtZXRob2QgdG8gc3VnZ2VzdCBhdmFpbGFibGUgU1NSQwotCSAgTWFrZSBhIG1ldGhvZCB0byBzdWdnZXN0IHRoZSBiZXN0IGF2YWlsYWJsZSBTU1JDLiBUaGlzIGlzIHRoZSBTU1JDIG9mIHRoZSBsYXN0Ci0JICBjcmVhdGVkIGludGVybmFsIHNvdXJjZSBhbmQgaXMgdXNlZCB0byBpbnN0cnVjdCB1cHN0cmVhbSB0byBwcm9kdWNlIHRoaXMKLQkgIFNTUkMuCi0KLTIwMTMtMDctMjYgMDE6MDE6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHNlc3Npb246IGtlZXAgU0RFUyBhbmQgc2V0IG9uIG5ldyBpbnRlcm5hbCBzb3VyY2VzCi0JICBLZWVwIHRyYWNrIG9mIHRoZSBTREVTIG91cnNlbHZlcyBhbmQgc2V0IGl0IG9uIGFsbCBuZXdseSBjcmVhdGVkCi0JICBpbnRlcm5hbCBzb3VyY2VzLgotCi0yMDEzLTA3LTI2IDAwOjQ4OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBtYWtlIG1ldGhvZCB0byBtYWtlIGludGVybmFsIHNvdXJjZXMKLQkgIEFkZCBhIG1ldGhvZCB0byBvYnRhaW4gYW4gaW50ZXJuYWwgc291cmNlIGFuZCB1c2UgaXQgdG8gY3JlYXRlCi0JICBvdXIgaW50ZXJuYWwgc291cmNlCi0KLTIwMTMtMDctMjYgMDA6Mjk6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBzZXNzaW9uOiBjb3VudCBpbnRlcm5hbCBzb3VyY2VzIGFuZCBob3cgbWFueSBhcmUgc2VuZGVycwotCi0yMDEzLTA3LTI2IDAwOjE0OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBzZXBhcmF0ZSBCWUUgbWFya2luZyBhbmQgc2NoZWR1bGluZwotCSAgRmlyc3QgbWFyayBzb3VyY2VzIHdpdGggQllFIGFuZCB0aGVuIHNjaGVkdWxlIHRoZSBCWUUgUlRDUCBtZXNzYWdlLgotCi0yMDEzLTA3LTI1IDIzOjU2OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBnZXQgU1NSQyBmcm9tIFJUQ1AgcGFja2V0IGl0c2VsZgotCSAgR2V0IHRoZSBTU1JDIGZyb20gdGhlIFJUQ1AgcGFja2V0IGluc3RlYWQuCi0KLTIwMTMtMDctMjUgMjM6NTE6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IGZpeCBiYW5kd2lkdGggY2FsY3VsYXRpb24KLQkgIFdlIGl0ZXJhdGUgb3ZlciBhbGwgc291cmNlcyBhbmQgdGhlIGludGVybmFsIG9uZSBpcyBhbHNvIGluIHRoZQotCSAgaGFzaHRhYmxlIHNvIGF2b2lkIGFkZGluZyBpdCB0d2ljZS4KLQotMjAxMy0wNy0yNSAyMzozODowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogYWRkIHNvbWUgZG9jcwotCi0yMDEzLTA3LTI1IDIzOjExOjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBSZWFycmFuZ2UgUlRDUCByZXBvcnRpbmcgYSBsaXR0bGUKLQkgIE1ha2UgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhbiBSVENQIHBhY2tldCBmb3IgYSBzb3VyY2UsIHBhc3MgdGhlIHNvdXJjZSBhcyBhCi0JICBwYXJhbWV0ZXIuCi0JICBNb3ZlIHRpbWVvdXQgb2YgY29sbGlzaW9ucyB0byBzZXNzaW9uIGNsZWFudXAgcGhhc2UuCi0KLTIwMTMtMDctMjUgMjI6Mzk6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IG1vdmUgY2hlY2sgZm9yIGlzX2Vhcmx5IGFyb3VuZAotCSAgTW92ZSB0aGUgY2hlY2sgZm9yIHRoZSBlYXJseSBSVENQIHRvIHdoZXJlIGl0IGlzIG5lZWRlZCBhbmQgdXNlZC4KLQotMjAxMy0wNy0yNSAxNzozNTowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogcGFyc2UgcGFja2V0IG91dHNpZGUgb2YgdGhlIHNlc3Npb24gbG9jawotCi0yMDEzLTA3LTI1IDE3OjM0OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBkbyBuaWNlciBjaGVja3MgZm9yIGludGVybmFsIHNvdXJjZXMKLQotMjAxMy0wNy0yNSAxNzoxNTozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHNlc3Npb246IGxldCBzb3VyY2Uga2VlcCB0cmFjayBpZiBpdCBzZW50IEJZRQotCi0yMDEzLTA3LTI1IDE3OjA2OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHNvdXJjZTogcmVzZXQgbW9yZQotCi0yMDEzLTA3LTI1IDE2OjQ5OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgc291cmNlOiBhbHNvIHVzZSB0aGUgc291cmNlIGZvciBieWVfcmVhc29uCi0JICBTdG9yZSB0aGUgQllFIHJlYXNvbiBpbiBvdXIgaW50ZXJuYWwgc291cmNlIG9iamVjdC4gUmVuYW1lIHRoZSBtZXRob2RzIG9uIHRoZQotCSAgc291cmNlIG9iamVjdCBhIGxpdHRsZSBiZWNhdXNlIG5vdyB0aGUgQllFIGNhbiBiZSByZWNlaXZlZCBpbiBSVENQIG9yCi0JICBzZXQgd2hlbiB0aGUgc2Vzc2lvbiB3YW50cyB0byBzZW5kIEJZRS4KLQotMjAxMy0wNy0yNSAxNjoyNDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHNlc3Npb246IGNvbmZpZ3VyZSBzZGVzIHdpdGggc3RydWN0dXJlIG9ubHkKLQkgIFJlbW92ZSBjb2RlIHRvIGNvbmZpZ3VyZSB0aGUgU0RFUyB3aXRoIG1ldGhvZHMgYW5kIHR5cGVzLCBvbmx5Ci0JICBhbGxvdyBjb25maWd1cmF0aW9uIHdpdGggR3N0U3RydWN0dXJlCi0KLTIwMTMtMDctMjUgMTU6NTY6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IHJlZmFjdG9yIGFkZCBhbmQgZmluZCBzb3VyY2UKLQkgIE1ha2UgZnVuY3Rpb25zIHRvIGZpbmQgYW5kIGFkZCBhIHNvdXJjZSB0byB0aGUgaGFzaHRhYmxlLgotCi0yMDEzLTA3LTI1IDE1OjQzOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBzZXNzaW9uOiByZW1vdmUgc291cmNlIGZyb20gc3luY19ydGNwCi0JICBXZSBkb24ndCBuZWVkIHRvIGtub3cgdGhlIHNlbmRlciBzb3VyY2Ugb2YgdGhlIHNlc3Npb24gaW4gdGhlCi0JICBjYWxsYmFjaywgdGhlIFNSIHBhY2tldCBpcyBmb3IgYWxsIHBhcnRpY2lwYW50cyBpbiB0aGUgc2Vzc2lvbi4KLQotMjAxMy0wNy0yNCAxNDoxODoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGFkZCBzb21lIG1vcmUgZGVidWcKLQotMjAxMy0wNy0xNSAxNzoxMTo0NSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmg6Ci0JICBhYWNwYXJzZTogYWxsb3cgY29udmVyc2lvbiBmcm9tIEFEVFMgdG8gcmF3IEFBQwotCSAgU29tZSBtdXhlcnMgKGVnLCBxdG11eCkgb25seSBzdXBwb3J0IHJhdyBBQUMsIHNvIHRoaXMgYWxsb3dzIGxpbmtpbmcKLQkgIGFuIGVuY29kZXIgdGhhdCBvdXRwdXRzIEFEVFMgb25seSB0byB0aG9zZSBtdXhlcnMuCi0JICBUaGUgY29udmVyc2lvbiBpcyBzaW1wbGUgKG9taXQgdGhlIGZpcnN0IDcgb3IgOSBieXRlcyBvZiB0aGUgZnJhbWUpLAotCSAgYnV0IGhhcyB0byBiZSBkb25lIGluIHByZV9wdXNoIGluc3RlYWQgb2YgaGFuZGxlX2ZyYW1lIGFzIDEuMCBkb2VzCi0JICBub3Qgc2VlbSB0byBhbGxvdyBza2lwcGluZyBieXRlcyB0aGVyZSBhcyAwLjEwIHVzZWQgdG8uCi0JICBPdGhlciBjb252ZXJzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCAoeWV0KS4KLQotMjAxMy0wNy0xNSAxNzoxNTo0NCArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBmaXggb2JqZWN0X3R5cGUgcGFyc2luZyBvZmYtYnktb25lIGluIEFEVFMgZnJhbWUKLQkgIEFjY29yZGluZyB0byBodHRwOi8vd2lraS5tdWx0aW1lZGlhLmN4L2luZGV4LnBocD90aXRsZT1BRFRTLAotCSAgdGhlIHZhbHVlIHN0b3JlZCBpbiBBRFRTIGhlYWRlcnMgaXMgb25lIGxlc3MgdGhhbiB0aGUgb2JqZWN0Ci0JICB0eXBlIG9mIHRoZSBBQUMgc3RyZWFtLgotCSAgQSBsb29rIGF0IGZmbXBlZyBzaG93cyBpdCBhbHNvIGFkZHMgMSB0byB0aGUgdmFsdWUgcmVhZCBvZmYKLQkgIHRoZSBBRFRTIGhlYWRlci4KLQkgIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IGJyZWFrIG90aGVyIHRoaW5ncyB0aGF0IGhhcHBlbiB0byBoYXZlCi0JICBhbiBpbnZlcnNlIG9mZiBieSBvbmUgdG8gbWF0Y2ggdGhlIGV4aXN0aW5nIGNvZGUuCi0KLTIwMTMtMDctMjUgMTE6MTM6MDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBzZXFudW0gaGFuZGxpbmcgZm9yIHNlZWtzCi0JICBVc2UgdGhlIHNhbWUgc2VxbnVtIGFzIHRoZSBzZWVrIGZvciBmbHVzaGVzL3NlZ21lbnRzIHRoYXQgYXJlCi0JICBjYXVzZWQgYnkgdGhlIHNlZWsuIEFsc28gZG8gdGhlIHNhbWUgZm9yIHNlZ21lbnQgZXZlbnRzCi0JICBGaXhlcyAjNjc2MjQyCi0KLTIwMTMtMDctMjUgMDE6Mzk6NTggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IGZpeCBzZXFudW0gaGFuZGxpbmcgZm9yIHNlZWtzCi0JICBVc2UgdGhlIHNhbWUgc2VxbnVtIGFzIHRoZSBzZWVrIGZvciBmbHVzaGVzL3NlZ21lbnRzIHRoYXQgYXJlCi0JICBjYXVzZWQgYnkgdGhlIHNlZWsuIEFsc28gZG8gdGhlIHNhbWUgZm9yIHNlZ21lbnQgZXZlbnRzCi0JICBGaXhlcyAjNjc2MjQyCi0KLTIwMTMtMDctMjUgMDE6MTE6MzEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBjb3JyZWN0bHkgaGFuZGxlIHNlcW51bSBmb3Igc2Vla3MgYW5kIHNlZ21lbnRzCi0JICBVc2UgdGhlIHNhbWUgc2VxbnVtIG9uIG1lc3NhZ2VzIGFuZCBldmVudHMgZm9yIGRlcml2ZWQgZXZlbnRzLgotCSAgRml4ZWQgZm9yIGZsdXNoZXMgLyBzdHJlYW0tc3RhcnQgLyBzZWdtZW50IGFmdGVyIGEgc2VlaywgYW5kIHNlZ21lbnQKLQkgIGFmdGVyIGEgc2VnbWVudC4KLQkgIEZpeGVzICM2NzYyNDIKLQotMjAxMy0wNy0xMiAyMDowMTo0MiArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogYWx3YXlzIGlnbm9yZSBIRUFEIGVycm9ycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDI0MQotCi0yMDEzLTA3LTI1IDE0OjI2OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IENsZWFuIHVwIHJlc2V0L3N0YXJ0L3N0b3AgaGFuZGxpbmcKLQotMjAxMy0wNy0yNSAxNDoxMzoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiBVc2UgYmFzZSBjbGFzcyBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiBpbnN0ZWFkIG9mIHJlcGxpY2F0aW5nIGl0IGhlcmUKLQotMjAxMy0wNy0yNSAxNDoxMjo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBDbGVhbiB1cCBoYW5kbGluZyBvZiByZXNldC9zdGFydC9zdG9wCi0KLTIwMTMtMDctMjUgMTA6NDE6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9maWxlcy9pZDMtNDA3MzQ5LTEudGFnOgotCSogdGVzdHMvZmlsZXMvaWQzLTQwNzM0OS0yLnRhZzoKLQkqIHRlc3RzL2ZpbGVzL2lkMy00NDcwMDAtd2NvcC50YWc6Ci0JICB0ZXN0czogZml4IHRlc3QgSUQzIHRhZ3MgdXAgbm90IHRvIHJlbHkgb24gZG9kZ3kgdHlwZWZpbmRpbmcgY29kZQotCSAgQ2hhbmdlIDB4ZmYgMHhmYiAnbXAzJyBtYXJrZXIgdG8gJ2ZMYUMnIG1hcmtlciwgc28gd2UgY2FuIGZpeAotCSAgdGhlIHR5cGVmaW5kZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMzY4Ci0KLTIwMTMtMDctMjUgMDg6MjI6NDUgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICBvc3hhdWRpb3Npbms6IGludGVyc2VjdCB0aGUgcHJvYmVkIGNhcHMgd2l0aCB0aGUgZmlsdGVyIHBhc3NlZCB0byBnZXRfY2FwcygpCi0KLTIwMTMtMDctMjQgMTQ6MTc6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgYmluOiBmaXggY29tcGlsYXRpb24KLQotMjAxMy0wNy0yNCAxMjo0MjozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkgIHZyYXdkZXBheTogZml4IFVZVlAgZm9ybWF0Ci0KLTIwMTMtMDctMjQgMTI6NDE6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgdnJhd3BheTogZml4IFVZVlAgZm9ybWF0Ci0KLTIwMTMtMDctMjQgMTI6NDE6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgdnJhd3BheTogZml4IGNhcHMKLQotMjAxMy0wNy0yNCAxMDo0OTowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGZpeCBsb2NraW5nCi0JICBUYWtlIHRoZSBsb2NrIGVhcmxpZXIgc28gdGhhdCB3ZSBkbyB0aGluZ3MgdGhhdCBmb2xsb3cgd2l0aCB0aGUgcmlnaHQKLQkgIGxvY2tpbmcuCi0KLTIwMTMtMDctMjMgMTc6NDA6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGRvbid0IHVzZSBpbnZhbGlkIHRpbWVzIGluIFJUQ1AgdGltZW91dHMKLQkgIEFuIGludmFsaWQgdGltZW91dCBjYW4gYmUgY2FsY3VsYXRlZCB3aGVuIHdlIGRpc2FibGVkIFJUQ1AgYnkgc2V0dGluZyB0aGUKLQkgIGJhbmR3aWR0aCB0byAwLiBNYWtlIHN1cmUgYWxsIGNvZGUgY2FuIGhhbmRsZSB0aGlzIGNhc2UuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NjI2Ci0KLTIwMTMtMDctMjMgMTc6Mzg6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGxvY2sgc2Vzc2lvbiB3aGVuIGNoYW5naW5nIGJhbmR3aWR0aAotCSAgVGFrZSB0aGUgc2Vzc2lvbiBsb2NrIHdoZW4gY2hhbmdpbmcgdGhlIGJhbmR3aWR0aCBwcm9wZXJ0aWVzIHNvIHRoYXQgd2UgZG9uJ3QKLQkgIGVuZCB1cCB3aXRoIGluY29uc2lzdGVudCBiZWhhdmlvdXIuCi0KLTIwMTMtMDctMjMgMTc6Mzc6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IHJlc2V0IHNvbWUgUlRDUCB2YXJpYWJsZXMKLQkgIFRoZSBlYXJseV9zZW5kIHRpbWUgd2FzIHNldCB0byAwIGFuZCBhbHdheXMgdHJpZ2dlcmluZyBhbiBlYXJseSBSVENQIHBhY2tldC4KLQotMjAxMy0wNy0yMyAxNTowMzozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQWRkIGFsbCB0aGUgbXBlZyBYRENBTSB2YXJpYW50cwotCSAgVGhpcyBzaG91bGQgY292ZXIgYWxsIGtub3duIFhEQ0FNIHZhcmlhbnRzICh3aGljaCBhcmUgYWxsIG1wZWcyIHZpZGVvKQotCSAgRml4ZXMgIzY3MjIyNwotCi0yMDEzLTA3LTAzIDE4OjQxOjQyICswMjAwICBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IGFkZGVkIGN1c3RvbSBkb3duc3RyZWFtIHN5bmMgZXZlbnQKLQkgIHJ0cGJpbiBjYW4gbm93IHNlbmQgYSBjdXN0b20gaW4tYmFuZCBkb3duc3RyZWFtIGV2ZW50IHdoaWNoIGluZm9ybXMKLQkgIGRvd25zdHJlYW0gdGhhdCB0aGUgYmluIGhhcyByZWNlaXZlZCBhbiBSVENQIFNSIHBhY2tldC4gVGhpcyBpcyB1c2VmdWwKLQkgIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggd2FudCB0byBkcm9wIHRoZSBpbml0aWFsIHVuc3luY2hyb25pemVkIHJlY2VpdmVkCi0JICBSVFAgcGFja2V0cy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDM1NjAKLQkgIFNpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KLQotMjAxMy0wNy0yMiAxODowMDoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGZpeCBvbi10aGUtZmx5IGNoYW5naW5nIG9mICJtb2RlIiBhbmQgImZpZWxkcyIgcHJvcGVydGllcwotCSAgV2UgY2FsbCBzZXRjYXBzKCkgdG8gcmVjb25maWd1cmUgb3Vyc2VsdmVzLCBidXQgd2UgbmVlZCB0byBwYXNzCi0JICB0aGUgY3VycmVudCAqc2luayogY2Fwcywgbm90IHRoZSBzb3VyY2UgY2FwcyB0aGVuLiBBbHNvIGZpeCBhCi0JICBjYXBzIGxlYWsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQxNTk5Ci0KLTIwMTMtMDctMjIgMTU6MjM6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogQWRkIHN1cHBvcnQgZm9yIGdyb3VwLWlkIGluIHRoZSBzdHJlYW0tc3RhcnQgZXZlbnQKLQotMjAxMy0wNy0yMiAxNToyMzoyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBBZGQgc3VwcG9ydCBmb3IgZ3JvdXAtaWQgaW4gdGhlIHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEzLTA3LTIyIDE1OjIzOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEFkZCBzdXBwb3J0IGZvciBncm91cC1pZCBpbiB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTMtMDctMjIgMTU6MjI6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IEFkZCBzdXBwb3J0IGZvciBncm91cC1pZCBpbiB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTMtMDctMjIgMTU6MjI6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IEFkZCBzdXBwb3J0IGZvciBncm91cC1pZCBpbiB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTMtMDctMjIgMTU6MjI6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSAgZmx2ZGVtdXg6IEFkZCBzdXBwb3J0IGZvciBncm91cC1pZCBpbiB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTMtMDctMjIgMTU6MjI6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgYXZpZGVtdXg6IEFkZCBzdXBwb3J0IGZvciBncm91cC1pZCBpbiB0aGUgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTMtMDctMjIgMTU6MjE6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4Lmg6Ci0JICBkdmRlbXV4OiBBZGQgc3VwcG9ydCBmb3IgZ3JvdXAtaWQgaW4gdGhlIHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEzLTA3LTE5IDIyOjU5OjE1ICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQGVwaXRlY2guZXU+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiB1c2UgZ3N0X3V0aWxfdWludDY0X3NjYWxlKl9yb3VuZC4KLQkgIFRoZXJlIGNvdWxkIGJlIGEgY2FzZSB3aGVyZToKLQkgIDEpIHlvdSBkbyBhIG5ldyBzZXRfY2FwcyBhZnRlciBidWZmZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQuCi0JICAyKSB0c19vZmZzZXQgZ2V0cyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUsIGVnIDAuMDMzMzMzMzMzCi0JICAzKSB5b3VyIHBhZHMgZ2V0IEVPUywgYnV0IHRoZSBjaGVjayBkb3IgdGhhdCBkb2Vzbid0IHdvcmsKLQkgIGJlY2F1c2UgeW91IHVzZSB0c19vZmZzZXQgKyBhIHRydW5jYXRlZCB2YWx1ZSA8IHNlZ21lbnQuc3RvcAotCSAgNCkgc28gaW4gdGhlIG5leHQgY29sbGVjdGVkLCB5b3UgZW5kIHVwIGNvbXBhcmluZyBmb3IgZXhhbXBsZToKLQkgIDAuOTk5OTk5OTk5OSA+IDEuLCB3aGljaCBpcyBmYWxzZSBhbmQgbWVhbnMgeW91IGRvbid0IHNlbmQgRU9TLgotCSAgQWxzbyBhZGRzIHNjYWxlX3JvdW5kIGluIHR3byBvdGhlciBwbGFjZXMgd2hlcmUgaXQgcG90ZW50aWFsbHkgY291bGQKLQkgIGhhdmUgY2F1c2VkIHByb2JsZW1zLgotCi0yMDEzLTA3LTE1IDE3OjU1OjE5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IEFkZCBXUkxFIHN1cHBvcnQKLQotMjAxMy0wNy0xOSAxOTozNToyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogbWFrZSBmaWxlcyBmcm9tIFZpdm90ZWsgY2FtZXJhIHBsYXkKLQkgIFNraXAgdHJhY2tzIG9mICd2aXZvJyBzdWJ0eXBlIHdpdGggZW1wdHkgc3RzZCBpbnN0ZWFkIG9mCi0JICBlcnJvcmluZyBvdXQgc2F5aW5nIHRoYXQgdGhlIGZpbGUgaXMgYnJva2VuLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTc5MQotCi0yMDEzLTA3LTE5IDE3OjE0OjA2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHdoZW4gc3RyZWFtaW5nIGRvbid0IHRyeSB0byBzZWVrIHdoZW4gc3RvcHBpbmcKLQkgIEl0IG1pZ2h0IGNhdXNlIGVycm9ycyBpbiBzaW5rcyB0aGF0IGFyZSBub3Qgc2Vla2FibGUgYW5kCi0JICBoYXZlIHJlcG9ydGVkIHRoaXMgKGxpa2UgZS5nLiBmZHNpbmspCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2MjI4Ci0KLTIwMTMtMDctMTkgMTc6MjY6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2ltcGxpZnkgc29tZSBoZWxwZXJzCi0JICBTb21lIGhlbHBlciBmdW5jdGlvbnMgYXJlIG5vdCBuZWVkZWQgYW55bW9yZSBvciBjYW4gYmUgc2ltcGxpZmllZC4KLQotMjAxMy0wNy0xOSAxNzoxMjozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmb3Igbm9uLXJhdyB2aWRlbywgbW92ZSBwYWxldHRlIGluIGNhcHMKLQkgIFdlIG9ubHkgbmVlZCB0byBhcHBlbmQgdGhlIHBhbGV0dGUgdG8gcmF3IHZpZGVvIGJ1ZmZlcnMsIG5vbi1yYXcgdmlkZW8gaGFzIHRoZQotCSAgcGFsZXR0ZSBpbiB0aGUgY2FwcyBzdGlsbC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQyOTIKLQotMjAxMy0wNy0xOSAwMTo0OToyMCArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogbml0cGlja2luZyBpbiBlc2RzIHBhcnNpbmcKLQotMjAxMy0wNy0xOSAwMTo0OTowNyArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2V0IHByb3BlciBjYXBzIGZvciBtcGVnLTEgYXVkaW8KLQkgIFJlbW92ZSBBQUMgc3BlY2lmaWMgZmllbGRzIGZyb20gbXBlZy0xIGF1ZGlvIGNhcHMsIHJlbW92ZSBhc3N1bXB0aW9uCi0JICB0aGF0IHRoZSBtcGVnMSBhdWRpbyBsYXllciBpcyAzLCBhbmQgc2V0IGBwYXJzZWQnIGZpZWxkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDU0OAotCi0yMDEzLTA2LTE3IDIxOjI3OjM3ICswMjAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogZXh0L3ZweC9nc3R2cDhkZWMuaDoKLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmg6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5oOgotCSogZXh0L3ZweC9nc3R2cDllbmMuaDoKLQkgIHZweDogZml4IGNvbXBpbGF0aW9uIHdoZW4gZW5jb2RlciBvciBkZWNvZGVyIGhlYWRlcnMgYXJlIG5vdCBpbnN0YWxsZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQ1NDcKLQotMjAxMy0wNy0xNiAyMDo0MToxNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzoKLQkgIHZpZGVvY3JvcDogRml4IHVuaXQgZm9yIEdSQVkxNiBmb3JtYXRzCi0KLTIwMTMtMDctMTYgMjI6MTc6MTcgKzAyMDAgIEFybmF1ZCBWcmFjIDxhdnJhY0BmcmVlYm94LmZyPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHJlbW92ZSBjaGFwdGVyIHN0cmVhbQotCSAgUmVtb3ZlIGFsbCBzdHJlYW1zIHRoYXQgYXJlIGFjdHVhbGx5IHRhYmxlIG9mIGNvbnRlbnRzLCBzaW5jZSB3ZSB3aWxsCi0JICBuZXZlciBuZWVkIHRoZSBkYXRhIGFmdGVyIHBhcnNpbmcgdGhlbS4KLQotMjAxMy0wNy0xNiAyMTo1OTozNyArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2VuZCBnYXAgZXZlbnQgZm9yIHNwYXJzZSBzdHJlYW1zIGluIHB1c2ggbW9kZQotCSAgVGhpcyBhbGxvd3MgdG8gcHJlLXJvbGwgYXQgbGVhc3QgaWYgdGhlIG5leHQgc3VidGl0bGUgYnVmZmVyCi0JICBpcyBmYXIgYXdheS4KLQotMjAxMy0wNy0xNiAyMTo1NjowNyArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG8gbm90IHVzZSBpbmRleGVzIGZyb20gc3BhcnNlIHN0cmVhbSB3aGVuIHNlZWtpbmcgaW4gcHVzaCBtb2RlCi0JICBUaGlzIG1ha2VzIHNlZWtpbmcgbW9yZSBhY2N1cmF0ZSBpbiBwdXNoIG1vZGUsIHNpbmNlIHRoZSBwcmV2aW91cwotCSAga2V5ZnJhbWUgb24gYSBzcGFyc2Ugc3RyZWFtIG1pZ2h0IGJlIGZhciBhd2F5LgotCi0yMDEzLTA3LTE2IDIxOjA0OjA3ICswMjAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhZHZlcnRpc2Ugc3VidGl0bGUgc3RyZWFtcyBhcyBzcGFyc2UKLQotMjAxMy0wNy0xNyAxNzoxMTo0NCArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWFzdHJva2FkZW11eDogZG8gbm90IHB1c2ggZGlzY29udCBidWZmZXJzIGlmIHRoZXkgYXJlbid0IGRpc2NvbnQKLQkgIFVuc2V0IHRoZSBkaXNjb250IGZsYWcgaW5zdGVhZCBvZiBwb3Nzc2libHkgcHVzaGluZyBhIGJ1ZmZlciB3aXRoCi0JICBhIGZsYWcgdGhhdCdzIHN0aWxsIHNldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODIxMTAKLQotMjAxMy0wNy0xNyAxNToxMDowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBleHRyYWN0IHRoZSBwYWxldHRlIGZyb20gc3RzZAotCSAgU29tZXRpbWVzIGEgcGFsZXR0ZSBpcyBpbnNpZGUgdGhlIHN0c2QsIGV4dHJhY3QgaXQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcKLQkgIHRoZSBkZWZhdWx0IG9uZQotCi0yMDEzLTA3LTE3IDE0OjMwOjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkgIGdvb20yazE6IEZpeCBldmVudCBoYW5kbGluZyBhbmQgbmVnb3RpYXRlIGFzIHNvb24gYXMgcG9zc2libGUKLQotMjAxMy0wNy0xNyAxNDoyNzo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBnb29tOiBGaXggZXZlbnQgaGFuZGxpbmcgYW5kIG5lZ290aWF0ZSBhcyBzb29uIGFzIHBvc3NpYmxlCi0KLTIwMTMtMDctMTEgMTk6NDU6MTcgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogd2FybiBhYm91dCB0aGUgZnV0dXJlIGRlcHJlY2F0aW9uIG9mIHRoZSAiZW1iZWQiIHByb3BlcnR5Ci0KLTIwMTMtMDctMTcgMDk6NTY6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWRkIHN1cHBvcnQgZm9yIFdSQVcKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQyOTIKLQotMjAxMy0wNy0xNyAwOTo1NDo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwYWxldHRlIGlzIGFwcGVuZGVkIHRvIGJ1ZmZlcnMsIG5vdCBpbiBjYXBzCi0JICBGaXggdGhlIHBhbGV0dGUgaGFuZGxpbmcsIGluIDEuMCB3ZSBhcHBlbmQgdGhlIHBhbGV0dGUgdG8gdGhlIGJ1ZmZlciBpbnN0ZWFkIG9mCi0JICBwbGFjaW5nIGl0IG9uIHRoZSBjYXBzLgotCSAgU2VlIGFsc28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDI5MgotCi0yMDEzLTA3LTE2IDE1OjM3OjQ5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JICBydHA6IFVzZSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0KCkgd2hlcmUgcG9zc2libGUgaW4gUlRQIHBheWxvYWRlcnMKLQotMjAxMy0wNy0xNSAxNjoyNDowNyArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVzZXQgc2VnbWVudCBvbiBmbHVzaCBzdG9wCi0JICBjY2EyZjU1NWQxNCBpbnRyb2R1Y2VzIGEgcmVncmVzc2lvbiwgd2hlcmUgdGhlIGRlbXV4IHNlZ21lbnQgaXMgbm90Ci0JICByZXNldCBvbiBmbHVzaCBzdG9wLCBzbyB0aGUgbmV4dCB1cHN0cmVhbSBzZWdtZW50IGV2ZW50IHdpbGwgY2FsY3VsYXRlCi0JICBhbiBpbnZhbGlkIGJhc2UgdGltZSBvbiB0aGUgbmV3IHNlZ21lbnQgdG8gYmUgc2VudCBkb3duc3RyZWFtLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwNDI1NQotCi0yMDEzLTA3LTA2IDE3OjIwOjQ5ICswMjAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogb2Zmc2V0IHNhbXBsZXMgYWNjb3JkaW5nIHRvIGVkaXQgbGlzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMDI2NAotCi0yMDEzLTA3LTE0IDEyOjUwOjEzICsxMjAwICBEb3VnbGFzIEJhZ25hbGwgPGRvdWdsYXNAaGFsby5nZW4ubno+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL3NwZWN0cnVtLWV4YW1wbGUuYzoKLQkgIGxldmVsOiBGaXggdGhlIHNwZWN0cnVtIGV4YW1wbGUgZm9yIDEuMAotCSAgVGhlICJtZXNzYWdlIiBwcm9wZXJ0eSBoYXMgYmVlbiByZXBsYWNlZCBieSAicG9zdC1tZXNzYWdlcyIuCi0JICBQcmUtcGF0Y2ggb3V0cHV0OgotCSAgKHRlc3Rfc3BlY3RydW06MjMxMDEpOiBHTGliLUdPYmplY3QtV0FSTklORyAqKjogZ19vYmplY3Rfc2V0X3ZhbGlzdDoKLQkgIG9iamVjdCBjbGFzcyBgR3N0U3BlY3RydW0nIGhhcyBubyBwcm9wZXJ0eSBuYW1lZCBgbWVzc2FnZScKLQkgIE5ldyBzcGVjdHJ1bSBtZXNzYWdlLCBlbmR0aW1lIDA6MDA6MDAuMTAwMDAwMDAwCi0JICAodGVzdF9zcGVjdHJ1bToyMzEwMSk6IEdTdHJlYW1lci1DUklUSUNBTCAqKjoKLQkgIGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZTogYXNzZXJ0aW9uIGBHU1RfVkFMVUVfSE9MRFNfTElTVCAodmFsdWUpJyBmYWlsZWQKLQkgIFsuLi5dCi0JICBQb3N0LXBhdGNoOgotCSAgTmV3IHNwZWN0cnVtIG1lc3NhZ2UsIGVuZHRpbWUgMDowMDowMC4xMDAwMDAwMDAKLQkgIGJhbmQgMCAoZnJlcSA0MDApOiBtYWduaXR1ZGUgLTY1Ljk4ODc3NyBkQiBwaGFzZSAxLjUzMzM5NwotCSAgYmFuZCAxIChmcmVxIDEyMDApOiBtYWduaXR1ZGUgLTY1LjU0NTU2MyBkQiBwaGFzZSAtMC43ODA5MDAKLQkgIGJhbmQgMiAoZnJlcSAyMDAwKTogbWFnbml0dWRlIC02NC43OTE5NDYgZEIgcGhhc2UgLTAuNzk5NjExCi0JICBiYW5kIDMgKGZyZXEgMjgwMCk6IG1hZ25pdHVkZSAtNjQuNTU2MTc1IGRCIHBoYXNlIC0wLjA2MzYxNQotCSAgWy4uLl0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQxNzkKLQotMjAxMy0wNy0xMyAyMDo1NjoyNiArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGJlIGxlc3MgdmVyYm9zZSB3aGVuIHBhcnNpbmcgTE9BUyBzdHJlYW1zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MTYyCi0KLTIwMTMtMDctMTIgMTI6MzE6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkgIHNpbms6IGFsYXcvbXVsYXcgY2FwcyBkb24ndCBoYXZlIGEgbGF5b3V0IHByb3BlcnR5Ci0KLTIwMTMtMDctMTIgMTI6Mjc6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuYzoKLQkgIHB1bHNlOiByZWxheCBtdWxhdyBhbmQgYWxhdyBmb3JtYXQgY2hlY2tzCi0JICBUaGUgYXVkaW8gbGlicmFyeSBjb25zaWRlcnMgdGhlbSBhcyBlbmNvZGVkIGZvcm1hdHMgYW5kIGRvZXMgbm90IGZpbGwgaW4gdGhlCi0JICBzYW1wbGUgd2lkdGguIFRoZSBhdWRpbyByaW5nYnVmZmVycyBpZGVudGlmaWVzIHRoZSBmb3JtYXQgYXMgYWxhdy9tdWxhdyBhbmQgdGhhdAotCSAgaXMgYWx3YXlzIDggYml0cy4KLQotMjAxMy0wNy0xMSAxNjoxMzowNSArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9mb3VyY2MuaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jOgotCSAgcXRkZW11eDogdW5zZWxlY3QgaW5zdGVhZCBvZiBpZ25vcmluZyBkaXNhYmxlZCB0cmFjaywgZGV0ZWN0IGNoYXB0ZXIgdHJhY2sKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDQwMDcKLQotMjAxMy0wNy0xMSAyMDo0MToyMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IGlnbm9yZSBlcnJvcnMgZnJvbSBIRUFEIHJlcXVlc3QKLQkgIEhFQUQgcmVxdWVzdHMgYXJlIHVzZWQgdG8gY2hlY2sgdGhlIHNlcnZlciBoZWFkZXJzIHRvIHNlZSBpZiBpdAotCSAgc2Vla2FibGUuIElnbm9yZSBlcnJvcnMgZnJvbSB0aG9zZSByZXF1ZXN0cyBhcyB0aGV5IHNob3VsZG4ndCBiZQotCSAgY3JpdGljYWwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MDUzCi0KLTIwMTMtMDctMTIgMDM6MjQ6MDggKzA4MDAgIEt5b3N1a2UgTmVrb211cmEgPHN1cGVyY2F0ZXhwZXJ0QGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JICBhdWRpb2VjaG86IEZpeCBoYW5kbGluZyBvZiBkZWxheSBwcm9wZXJ0eSBpbiBQTEFZSU5HL1BBVVNFRCBzdGF0ZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzkwMQotCi0yMDEzLTA3LTA5IDE3OjU2OjU3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogRW5hYmxlIHByb3h5IGNhcHMgb24gdGhlIHNyYyBwYWRzCi0KLTIwMTMtMDctMTEgMTY6NTc6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAxLjEuMiA9PT0KLQotMjAxMy0wNy0xMSAxNTo1ODo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMS4yCi0KLTIwMTMtMDctMTEgMTU6NTg6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTMtMDctMDkgMTU6MzQ6MDQgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogZGVmZXIgdGhlIHdpbmRvdyBoYW5kbGUgc2V0dXAgdG8gdGhlIG1haW4gdGhyZWFkCi0KLTIwMTMtMDctMDkgMTU6MzM6MTggKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogZGVmYXVsdCB0byB0aGUgbWFpbiBpbiBjYXNlIHdlIGFyZSBub3Qgc2V0dXAgeWV0Ci0KLTIwMTMtMDctMDcgMjI6MTY6MDUgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogY2xvc2UgdGhlIGludGVybmFsIHdpbmRvdyBjb3JyZWN0bHkKLQotMjAxMy0wNy0wNyAyMToxNDoyMiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBvbmx5IGNyZWF0ZSB0aGUgTlMgYXBwIHRocmVhZCBmb3IgQ29jb2Egb25jZQotCSAgVGhlIGhlbHBlciB0aHJlYWQgZm9yIENvY29hLCBpbiBjYXNlIG5vIE5TIHJ1biBsb29wIGlzIHJ1bm5pbmcsCi0JICBzaG91bGQgYmUgc3RhcnRlZCBvbmx5IG9uY2UgYW5kIHNoYXJlZCBhY3Jvc3MgYWxsIHRoZSBpbnN0YW5jZXMKLQkgIHJ1bm5pbmcKLQotMjAxMy0wNy0wOSAxOToxMDoxNyArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBjb3JyZWN0IGFyZ3VtZW50IG9yZGVyIGluIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDMzNTAKLQotMjAxMy0wNy0wOSAxNzo0Mjo1OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IEtlZXAgY2FwcyBvcmRlciBmcm9tIHRoZSBwZWVyIG9yIHRoZSBmaWx0ZXIKLQotMjAxMy0wNy0wOSAxMjo0MjoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogRml4IGhhbmRsaW5nIG9mIGJ1ZmZlcnMgd2l0aG91dCBhIGR1cmF0aW9uCi0JICBXZSdsbCBoYXZlIHRvIHBvcCBidWZmZXIgZnJvbSBjb2xsZWN0cGFkcyBhbmQgc3RvcmUgaXQKLQkgIGludGVybmFsbHkgb25seSB0byBnZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbmV4dCBidWZmZXIuCi0JICBJZiB3ZSBjb250aW51ZSB0byBrZWVwIGl0IGluIGNvbGxlY3RwYWRzLCBubyBuZXcgYnVmZmVyCi0JICB0byBjYWxjdWxhdGUgdGhlIGVuZCB0aW1lIHdpbGwgZXZlciBhcnJpdmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzNzQzCi0KLTIwMTMtMDctMDkgMTE6NTM6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IEZpeCBuZWdvdGlhdGlvbiB3aXRoIDAvMSBmcmFtZXJhdGVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzNzQzCi0KLTIwMTMtMDctMDkgMTE6MTc6NTkgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFVubG9jayBzdHJlYW0gbG9jayBhZnRlciB1c2UKLQkgIFN0cmVhbSBsb2NrIG9mIHNpbmsgcGFkIHdhcyBub3QgdW5sb2NrZWQgYWZ0ZXIgbm9uLXVwZGF0aW5nIHNlZWsuCi0KLTIwMTMtMDYtMjcgMTM6MjY6MzEgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JICBtdWx0aXBhcnRtdXg6IFJlLXNldCBuZWVkX3NlZ21lbnQgZmxhZyBhZnRlciBGTFVTSF9TVE9QCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAzMTgyCi0KLTIwMTMtMDctMDUgMTE6NTE6MDQgKzAyMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogYnVmZmVycG9vbDogZG9uJ3QgZm9yZ2V0IHRvIHJlbGVhc2UgYnVmZmVyIG9uIGVycm9yCi0JICBJZiB0aGUgcG9vbCBpcyBzdG9wcGVkIHdoaWxlIGdzdF92NGwyX2J1ZmZlcl9wb29sX2RxYnVmKCkgd2FpdHMgZm9yIGEKLQkgIGJ1ZmZlciB0aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgR1NUX0ZMT1dfRkxVU0hJTkcuIEluIHRoaXMgY2FzZSB0aGUgYnVmZmVyCi0JICB0byBxdWV1ZSBtdXN0IGFsc28gYmUgcmVsZWFzZWQuIE90aGVyd2lzZSBpcyB3aWxsIG5ldmVyIGJlIGRlbGV0ZWQgb3IKLQkgIHJldHVybmVkIHRvIGl0cyBwb29sLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzc2NAotCi0yMDEzLTA3LTA4IDE0OjE1OjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICBydHA6IEZhaWwgcGF5bG9hZGluZyB1bml0IHRlc3QgaWYgYW4gZXJyb3IgbWVzc2FnZSBpcyByZWNlaXZlZAotCi0yMDEzLTA3LTA4IDE0OjA5OjM3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgIHJ0cGgyNjNwcGF5OiBEb24ndCBwYXNzIHVwc3RyZWFtIGZpbHRlciBjYXBzIHRvIGRvd25zdHJlYW0KLQkgIERvd25zdHJlYW0gdXN1YWxseSBjYW4ndCBhY2NlcHQgdmlkZW8veC1oMjYzIGJ1dCBvbmx5IGFwcGxpY2F0aW9uL3gtcnRwLAotCSAgc28gd2Ugd291bGQgYWx3YXlzIGdldCBhbiBlbXB0eSBpbnRlcnNlY3Rpb24gaGVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI2MzIKLQotMjAxMy0wNy0wNSAyMjowMDozNyArMDIwMCAgUGlvdHIgRHLEhWcgPHBpb3RyZHJhZ0BnbWFpbC5jb20+Ci0KLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgcG86IHVwZGF0ZSBQT1RGSUxFUy5pbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzY4NQotCi0yMDEzLTA3LTAyIDExOjEzOjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhdm9pZCBzb21lIHN0cmR1cAotCi0yMDEzLTA3LTAyIDEwOjM3OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgc2VsZWN0LXN0cmVhbSBzaWduYWwKLQkgIEFkZCBhIHNpZ25hbCB0byBsZXQgdGhlIGFwcCBzZWxlY3Qgd2hhdCBzdHJlYW1zIHdpbGwgYmUgc2VsZWN0ZWQuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDQxOQotCi0yMDEzLTA3LTAyIDEwOjM3OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhdm9pZCBzdHJkdXAKLQotMjAxMy0wNy0wMiAxMDoxMjoxNyArMDIwMCAgSi4gUmljayBSYW1zdGV0dGVyIDxyaWNrLnJhbXN0ZXR0ZXJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL1JFQURNRToKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwOiBGaXggZG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudHMgdG8gdXNlIHJ0cGJpbiBpbnN0ZWFkIG9mIG9sZCBnc3RydHBiaW4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDM0MjYKLQotMjAxMy0wNy0wMSAxNjo1NTowMSArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGRvbid0IGV4dHJhY3QgZGF0YSBmcm9tIGNhcHMgdHdpY2UKLQkgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygpIGFsd2F5cyBleHRyYWN0IHdpZHRoLCBoZWlnaHQsIGludGVybGFjZSBtb2RlIGFuZAotCSAgZnJhbWVyYXRlIG5vdy4gSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBkbyBpdCBhZ2FpbiBmb3IgZW5jb2RlZAotCSAgZm9ybWF0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDMzOTkKLQotMjAxMy0wNi0yMCAwOTo0MTo0OCAtMDMwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogYWxzbyBjb25zaWRlciBzdG9wIHBvc2l0aW9ucyBpbiBzZWVrcwotCSAgVXNlIHNlZWsgc3RvcCBwb3NpdGlvbiBhcyByYW5nZSBlbmQgZm9yIHJlcXVlc3RzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMjA2Ci0KLTIwMTMtMDYtMTkgMTQ6MDY6NDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogYWxsb3cgc2Vla3MgaW4gcmVhZHkKLQkgIE9uIGlzX3NlZWthYmxlLCBjaGVjayBpZiB0aGUgc2VydmVyJ3MgaGVhZGVycyBoYXZlIGFscmVhZHkgYmVlbgotCSAgcmVjZWl2ZWQuIElmIG5vdCwgZG8gYSBIRUFEIHJlcXVlc3QgdG8gZ2V0IHRoZW0gYmVmb3JlIHJlc3BvbmRpbmcKLQkgIHRvIGJhc2VzcmMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMjA2Ci0KLTIwMTMtMDctMDEgMTc6Mjg6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFkZCBzaWduYWwgdG8gbm90aWZ5IG9mIHRoZSBTRFAKLQkgIFRoaXMgd2F5LCB0aGUgYXBwIGNhbiBsb29rIGFuZCBtb2RpZnkgdGhlIFNEUC4KLQotMjAxMy0wNi0yMSAxODoxMDoyOCArMDIwMCAgS2lzaG9yZSBBcmVwYWxsaSA8a2lzaG9yZS5hcmVwYWxsaUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkgIGdka3BpeGJ1Zm92ZXJsYXk6IEFsbG93IG5lZ2F0aXZlIG9mZnNldHMgdG8gc3BlY2lmeSBvZmZzZXQgZnJvbSBib3R0b20vcmlnaHQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI4MjYKLQotMjAxMy0wNi0zMCAyMTowMToyMCArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9NYWtlZmlsZS5hbToKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogY29tcHV0ZSBmcmFtZXJhdGUgZnJvbSBhdmVyYWdlIHNhbXBsZSBkdXJhdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzM1MAotCi0yMDEzLTA2LTI1IDIxOjE2OjM4ICswMjAwICBBbGJhbiBCcm93YWV5cyA8cHJhaGFsQHlhaG9vLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IEFkZCBmbHZ2ZXJzaW9uIDEgdG8gdGhlIGZsYXNoLXZpZGVvIGNhcHMKLQkgIFRoaXMgYWxsb3dzIHVzaW5nIGF2ZGVjX2ZsdiB3aGljaCByZXF1aXJlcyB0aGlzIGZpZWxkIHRvIGJlCi0JICBwcmVzZW50IGluIHRoZSBjYXBzLiBGTFYgb25seSBzdXBwb3J0cyBmbGFzaC12aWRlbyB2ZXJzaW9uIDEKLQkgIHJpZ2h0IG5vdy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDMwNzYKLQotMjAxMy0wNy0wMSAxMTozNzowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIGRlaW50ZXJsZWF2ZTogRG9uJ3QgaG9sZCBvYmplY3QgbG9jayB3aGlsZSBzZW5kaW5nIGV2ZW50cyBkb3duc3RyZWFtCi0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEtpc2hvcmUgQXJlcGFsbGkgPGtpc2hvcmUuYXJlcGFsbGlAZ21haWwuY29tPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzExNAotCi0yMDEzLTA3LTAxIDEwOjU5OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQWRkIE1QRUc0IHZpZGVvIHByb2ZpbGUvbGV2ZWwgdG8gdGhlIGNhcHMKLQotMjAxMy0wNy0wMSAxMDo1NjoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEFkZCBBQUMgcHJvZmlsZS9sZXZlbCB0byB0aGUgY2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzMxMgotCi0yMDEzLTA2LTI4IDE1OjIxOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuaDoKLQkgIHZvcmJpc3BheTogYWRkIHN1cHBvcnQgZm9yIGNvbmZpZy1pbnRlcnZhbAotCSAgQWxpZ24gY29kZSB3aXRoIHRoZSB0aGVvcmEgcGF5bG9hZGVyIGFuZCBhZGQgc3VwcG9ydCBmb3IgdGhlIGNvbmZpZy1pbnRlcnZhbCB0bwotCSAgcGVyaW9kaWNhbGx5IHNlbmQgb3V0IHRoZSBjb25maWcgaGVhZGVycy4KLQotMjAxMy0wNi0yOCAxNToyMToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIHRoZW9yYXBheTogc21hbGwgY2xlYW51cHMKLQotMjAxMy0wNi0yOCAxMjowODoxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIHRoZW9yYXBheTogaGFuZGxlIHN0cmVhbWhlYWRlcnMgYXMgd2VsbAotCi0yMDEzLTA2LTI4IDEyOjA2OjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgdm9yYmlzcGF5OiBhbHdheXMgY29sbGVjdCBoZWFkZXJzIG9uIGRhdGEKLQkgIFdoZW4gd2Ugc2VlIGEgZGF0YSBwYWNrZXQsIGFsd2F5cyBjaGVjayBpZiB3ZSBuZWVkIHRvIGNvbGxlY3QgYW55IHByZXZpb3VzCi0JICBoZWFkZXJzLgotCi0yMDEzLTA2LTI4IDExOjQzOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgdm9yYmlzcGF5OiBoYW5kbGUgc3RyZWFtaGVhZGVyIGFzIHdlbGwKLQkgIFRha2UgY29uZmlnIHN0cmluZ3MgZnJvbSB0aGUgc3RyZWFtaGVhZGVyIHdoZW4gd2UgY2FuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0MzEyCi0KLTIwMTMtMDYtMjcgMDc6NDA6MjkgKzAyMDAgIERhdmlkIFN2ZW5zc29uIEZvcnMgPGRhdmlkc2ZAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogYXZvaWQgZG91YmxlIGJ1ZmZlciB1bm1hcCBvbiBlcnJvcgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzE3MQotCi0yMDEzLTA2LTI3IDE3OjAyOjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiByZXNldC1zeW5jIGJlZm9yZSBwbGF5Ci0JICBDYWxsIHJlc2V0LXN5bmMgb24gdGhlIHJ0cGJpbiBiZWZvcmUgd2UgZ28gdG8gcGxheWluZy4gVGhpcyBtYWtlcyB1cyByZXF1aXJlIFNSCi0JICBwYWNrZXRzIGZvciBhbGwgc3RyZWFtcyBhZ2FpbiBiZWZvcmUgd2UgYXR0ZW1wdCB0byBzeW5jIHRoZW0uIElmIHdlIGRvbid0IHJlc2V0LAotCSAgaXQgbWlnaHQgYmUgdGhhdCB3ZSBjb21iaW5lIFNSIHBhY2tldHMgZnJvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBQQVVTRS9QTEFZSU5HCi0JICBzdGF0ZSBjaGFuZ2UgYW5kIGVuZCB1cCB3aXRoIGh1Z2UgYm9ndXMgb2Zmc2V0cy4KLQotMjAxMy0wNi0yNyAxNjoyMzoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGltcHJvdmUgc3luYyBvbiBmaXJzdCBwYWNrZXRzCi0JICBEb24ndCB0aHJvdyBhd2F5IHRoZSBmaXJzdCBSVENQIHBhY2tldCBpZiBpdCBhcnJpdmVzIGJlZm9yZSB0aGUgZmlyc3QKLQkgIFJUUCBwYWNrZXQgYnV0IHJlbWVtYmVyIGFuZCB1c2UgaXQgdG8gc2lnbmFsIHN5bmMgb25jZSB3ZSBnZXQgdGhlCi0JICBSVFAgcGFja2V0LgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE0MDAKLQotMjAxMy0wNi0yNyAxNjoxNTo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IG9ubHkgc2lnbmFsIGxvb3Agd2hlbiBhY3RpdmUKLQkgIE9ubHkgc2lnbmFsIHRoZSBsb29wIGZ1bmN0aW9uIHdoZW4gaXQgaXMgYWN0aXZlLgotCi0yMDEzLTA2LTI3IDE2OjEzOjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogc2lnbmFsIHRpbWVzdGFtcCBkaXNjb250Ci0JICBXZSBjYW4gbm93IHVzZSB0aGUgUkVTWU5DIGJ1ZmZlciBmbGFnIHRvIG1hcmsgYSB0aW1lc3RhbXAgZGlzY29udCB3aGVuIHdlIHVwZGF0ZQotCSAgdGhlIHRzLW9mZnNldCBwcm9wZXJ0eS4KLQotMjAxMy0wNi0yNiAyMDo0OTo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBqcGVncGF5OiB0dXJuIHNvbWUgZXJyb3JzIGludG8gd2FybmluZ3MKLQkgIFR1cm4gc29tZSBlcnJvcnMgaW50byB3YXJuaW5ncywgd2UgY2FuIGNvbnRpbnVlIHByb2Nlc3Npbmcgc28gdGhpcyBzaG91bGQKLQkgIG5vdCBiZSBmYXRhbC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTcwNzkKLQotMjAxMy0wNi0yNiAxNDo1ODo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogYXZvaWQgc29tZSBmbHVzaGVzCi0KLTIwMTMtMDYtMjYgMTQ6NDE6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGhhbmRsZSBkYXRhIG1lc3NhZ2Ugd2hlbiB3YWl0aW5nIGZvciByZXBseQotCSAgV2hlbiB3ZSBhcmUgd2FpdGluZyBmb3IgYSBzZXJ2ZXIgcmVwbHksIGhhbmRsZSBkYXRhIG1lc3NhZ2VzIGluc3RlYWQgb2YKLQkgIGlnbm9yaW5nIHRoZW0uCi0KLTIwMTMtMDYtMjYgMTQ6Mjc6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGhhbmRsZSBkYXRhIG1lc3NhZ2VzIGluIHNlcGFyYXRlIG1ldGhvZAotCSAgUmVmYWN0b3IgYW5kIG1ha2UgYSBtZXRob2QgdG8gaGFuZGxlIGEgZGF0YSBtZXNzYWdlLgotCi0yMDEzLTA2LTI1IDIwOjM2OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgc29tZSBtb3JlIGRvY3MgdG8gaGFuZGxlLXJlcXVlc3Qgc2lnbmFsCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjcwNQotCi0yMDEzLTA2LTEwIDE3OjIwOjMwIC0wNDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBTZW5kIGEgY2xvY2tfcHJvdmlkZSBtZXNzYWdlIG9uIHRoZSBidXMgd2hlbiB3ZSBnZXQgYSBuZXRjbG9jawotCi0yMDEzLTA2LTEwIDE3OjIwOjE0IC0wNDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBFeHBvc2UgdXNlLXBpcGVsaW5lLWNsb2NrIHByb3BlcnR5Ci0KLTIwMTMtMDYtMjQgMTc6MTE6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICB1ZHBzaW5rOiBiaW5kIHRvIHRoZSBnaXZlbiBpbnRlcmZhY2UKLQkgIEFjdHVhbGx5IGNhbGwgQklORFRPREVWSUNFIHRvIGJpbmQgdG8gdGhlIGludGVyZmFjZSBhcyBnaXZlbiBieSB0aGUKLQkgIHByb3BlcnR5LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjgxOQotCi0yMDEzLTA2LTIyIDEwOjU5OjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JICB2cDhkZWM6IEVycm9yIG91dCBncmFjZWZ1bGx5IGlmIHdlIGdldCBhbiB1bnN1cHBvcnRlZCBjb2xvciBmb3JtYXQKLQkgIEluIHRoZW9yeSB3ZSBjYW4gb25seSBnZXQgSTQyMCB0aG91Z2gsIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KLQotMjAxMy0wNi0yMiAxMDo1Nzo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBleHQvdnB4L2dzdHZwOWRlYy5jOgotCSogZXh0L3ZweC9nc3R2cDllbmMuYzoKLQkgIHZwOTogQWRkIHN1cHBvcnQgZm9yIFlWMTIsIFk0MkIgYW5kIFk0NDQgY29sb3IgZm9ybWF0cwotCSAgVGhlIGVuY29kZXIgZG9lcyBub3Qgd29yayB3aXRoIFk0MkIgYW5kIFk0NDQgeWV0IGl0IHNlZW1zLgotCi0yMDEzLTA2LTIyIDEwOjI2OjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmM6Ci0JICB2cDlkZWM6IFVwZGF0ZSBkZWZhdWx0IHBvc3Rwcm9jIHNldHRpbmdzIGZyb20gdnA5X2R4X2lmYWNlLmMKLQotMjAxMy0wNi0yMSAxMzoxMTozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS93ZWJtLW11eC5jOgotCSAgbWF0cm9za2E6IEFkZCBpbml0aWFsIFZQOSBzdXBwb3J0Ci0KLTIwMTMtMDYtMjEgMTM6MDc6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3ZweC9NYWtlZmlsZS5hbToKLQkqIGV4dC92cHgvZ3N0dnA5ZGVjLmM6Ci0JKiBleHQvdnB4L2dzdHZwOWRlYy5oOgotCSogZXh0L3ZweC9nc3R2cDllbmMuYzoKLQkqIGV4dC92cHgvZ3N0dnA5ZW5jLmg6Ci0JKiBleHQvdnB4L3BsdWdpbi5jOgotCSAgdnB4OiBBZGQgaW5pdGlhbCwgZXhwZXJpbWVudGFsIFZQOSBzdXBwb3J0Ci0KLTIwMTMtMDYtMjEgMTA6MzI6MzAgKzAyMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aSBhdCBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3A6IGdvIGJhY2sgaW50byB0aGUgbG9vcCBhZnRlciBkb2luZyBwYXVzZQotCSAgQWZ0ZXIgd2UgZG8gYSBwYXVzZSByZXF1ZXN0LCBnbyBiYWNrIHRvIGxvb3AgbW9kZSBzbyB0aGF0IHdlIGNhbiBsaXN0ZW4KLQkgIGZvciBzZXJ2ZXIgbWVzc2FnZXMgYWdhaW4uCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjcwNQotCi0yMDEzLTA2LTIwIDIzOjE2OjE3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICBydHBwdGRlbXV4OiBXYWl0IGFmdGVyIHRoZSBjYXBzIHRvIGZvcndhcmQgdGhlIG90aGVyIGV2ZW50cwotCSAgRmlyc3QgZm9yd2FyZCB0aGUgc3RyZWFtLXN0YXJ0LCB0aGVuIHRoZSBjYXBzLCB0aGVuIHRoZSByZXN0Ci0KLTIwMTMtMDYtMjEgMDA6NDI6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICB4aW1hZ2VzcmM6IGNsZWFyIGR0cyBvbiBidWZmZXIgYWNxdWlyZWQgZnJvbSBwb29sCi0JICBXaGVuIHNldHRpbmcgdGltZXN0YW1wcyBvbiBvdXRnb2luZyBidWZmZXJzLCBjbGVhciB0aGUKLQkgIGR0cyBleHBsaWNpdGx5LCBvdGhlcndpc2UgaXQgbWF5IGVuZCB1cCBiZWluZyBzZXQgdG8gYQotCSAgYm9ndXMgdmFsdWUgZnJvbSBsYXN0IHRpbWUgaXQgd2FzIHVzZWQuIEF2b2lkcyBldmVyeQotCSAgc2Vjb25kIG9yIHNvIGJ1ZmZlcidzIGR0cyBiZWluZyBzZXQgdG8gMC4gTm90IHRoYXQgaXQKLQkgIHNob3VsZCBtYXR0ZXIgZm9yIHJhdyB2aWRlby4KLQotMjAxMy0wNi0yMCAxNTozNToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgdjRsMjogZG9uJ3QgcmVkZWZpbmUgdGhlIFBFUkZPUk1BTkNFIGRlYnVnIHZhcmlhYmxlCi0JICBJdCBpcyBhbHJlYWR5IGRlZmluZWQgaW4gY29yZS4KLQkgIGZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI3MzIKLQotMjAxMy0wNi0yMCAxNDo0Mzo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZml4IHJhY2UgaW4gc3RhdGUgY2hhbmdlIHRvIHBhdXNlZAotCSAgV2hlbiB3ZSBnbyB0byBwYXVzZWQsIHdlIGZpcnN0IGZsdXNoIHRoZSBjb25uZWN0aW9uIGFuZCB0aGVuIHNlbmQgdGhlIHBhdXNlCi0JICBjb21tYW5kLiBBcyBhIHJlc3VsdCBvZiB0aGUgZmx1c2hpbmcsIHRoZSBzY2hlZHVsZWQgcGF1c2VkIGNvbW1hbmQgY2FuIGdldAotCSAgbG9zdC4gV2FpdCB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBjb21wbGV0ZWx5IGZsdXNoZWQgYW5kIHRoZSBydHNwIHRhc2sgaXMKLQkgIHdhaXRpbmcgYmVmb3JlIGlzc3VpbmcgdGhlIHBhdXNlZCBvciBwbGF5aW5nIHJlcXVlc3QuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyNzA1Ci0KLTIwMTMtMDYtMjAgMTE6MzE6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogaGFuZGxlIFNFR01FTlQgcXVlcnkKLQotMjAxMy0wNi0xOSAxMjozNzozMSArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDI6IE9wdGltaXplIG5lZ290aWF0aW9uIGJ5IHJlbW92aW5nIHRoZSBxdWVyeSBmaWx0ZXIKLQkgIEFzIGNhbWVyYXMgdGVuZCB0byBoYXZlIGEgcXVpdGUgc3BlY2lmaWMgc2V0IG9mIGNhcGFiaWxpdGllcyAoc3BlY2lmaWMKLQkgIGZyYW1lcmF0ZXMgZm9yIGVhY2ggcmVzb2x1dGlvbiksIGdldHRpbmcgdGhlIHBlZXIgY2FwcyBmaWx0ZXJlZCBieSBvdXIKLQkgIHByb2JlZCBjYXBzIGNhbiBjYXVzZSBhIGJpZyBpbmNyZWFzZSBpbiB0aGUgY2FwcyBzaXplIHdoaWNoIHNsb3dzIGRvd24KLQkgIHRoaW5ncyBxdWlyZSBhIGJpdC4KLQkgIEFzIGZvciBuZWdvdGlhdGlvbiB2NGwyIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGNhcHMgb2YgdGhlIHBlZXIgdG8gZmluZCB0aGUKLQkgIGZpcnN0IGludGVyc2VjdGlvbiB3aXRoIHRoZSBwcm9iZWQgY2FwcywgZ2V0dGluZyB0aGUgZnVsbHkgZXhwYW5kZWQKLQkgIGludGVyc2VjdGlvbiBvZiBjYXBhYmlsaXRpZXMgaXMgbm90IHVzZWZ1bC4KLQkgIFVzaW5nIHRoZSBzYW1lIHRlc3RjYXNlIGFzIGZvciBidWcgIzcwMjYzMiwgYWRkaW5nIHRoaXMgcGF0Y2ggb24gdG9wIG9mCi0JICB0aGUgcGF0Y2hlcyBzdWdnZXN0ZWQgdGhlcmUgc3BlZWRzIHVwIGdldHRpbmcgdGhlIGluaXRhbCBmcmFtZSBmcm9tCi0JICBhcm91bmQgfjE0LTE1IHNlY29uZHMgdG8gYXJvdW5kIH4zLTQgc2Vjb25kcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI2MzgKLQotMjAxMy0wNi0xOSAxMDozMDo1NiArMDIwMCAgS2lzaG9yZSBBcmVwYWxsaSA8a2lzaG9yZS5hcmVwYWxsaUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBkdXJhdGlvbiBxdWVyeSByZXR1cm5zIHplcm8gZm9yIERWIHZpZGVvIGluIGF2aQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMjYyNQotCi0yMDEzLTA2LTE5IDExOjA2OjM3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRGlzYWJsZSB1c2FnZSBvZiBhbGxvY2F0aW9uIHF1ZXJpZXMKLQkgIFRoaXMgY2FuIG9ubHkgcmVsaWFibHkgd29yayBpZiBkZW11eGVycyBoYXZlIGEKLQkgIHNlcGFyYXRlIHN0cmVhbWluZyB0aHJlYWQgcGVyIHNyY3BhZC4gVGhpcyBzaG91bGQgYmUKLQkgIGRvbmUgaW4gYSBkZW11eGVyIGJhc2UgY2xhc3MsIHdoaWNoIGludGVncmF0ZXMgcGFydHMKLQkgIG9mIG11bHRpcXVldWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4NTYKLQotMjAxMy0wNi0xMSAxNTowMjoyMSArMDEwMCAgQWxleCBBc2hsZXkgPGJ1Z3ppbGxhQGFzaGxleS1mYW1pbHkubmV0PgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIEF2b2lkIHNraXBwaW5nIG1vb3YgYXRvbXMgZm9yIGZyYWdtZW50ZWQgTVA0IGZpbGVzLgotCSAgYnVnICM3MDA1MDUKLQkgIEZvbGxvd2luZyBhIHJlcHJlc2VudGF0aW9uIGNoYW5nZSB0aGF0IGNhdXNlcyBhIHJlc29sdXRpb24gY2hhbmdlLAotCSAgdGhlIHZpZGVvIGRlY29kZXIgZmFpbHMgdG8gZGVjb2RlIGNvcnJlY3RseS4gRGFzaGRlbXV4IGRldGVjdHMgdGhlCi0JICByZXByZXNlbnRhdGlvbiBjaGFuZ2UgYW5kIHB1c2hlcyBhIG5ldyBjYXBzIGV2ZW50IGFuZCBhbgotCSAgaW5pdGlhbGl6YXRpb24gc2VnbWVudCAoYSBuZXcgbW9vdiBhdG9tKSB0byB0aGUgZG93bnN0cmVhbSBxdGRlbXV4LAotCSAgYnV0IGl0IGRvZXNuJ3QgaGFuZGxlIHRoaXMgbmV3IG1vb3YgeWV0LCBpdCB3aWxsIG9ubHkgcGFyc2UgdGhlCi0JICBmaXJzdCBvbmUgaXQgcmVjZWl2ZXMuCi0JICBUaGlzIGNvbW1pdCBjaGFuZ2VzIHF0ZGVtdXggdG8gYWNjZXB0IGEgbmV3IG1vb3YgaW4gYSBkYXNoIGJpdHN0cmVhbQotCSAgc3dpdGNoaW5nIHNjZW5hcmlvLgotCi0yMDEzLTA2LTE5IDAwOjQyOjU0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2VuZCBzdHJlYW0tc3RhcnQgb25seSBvbmNlIGZvciBlYWNoIHN0cmVhbQotCSAgRG8gbm90IHNlbmQgc3RyZWFtIHN0YXJ0IGFnYWluIHdoZW4gcmVjb25maWd1cmluZyBhIHBhZCBmb3IgbmV3IGNhcHMuCi0JICBUaGF0IGlzIGNvbW1vbiBmb3IgYWRhcHRpdmUgc3RyZWFtcwotCi0yMDEzLTA2LTA1IDE3OjAyOjQ5ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogZml4IHN1cHBvcnQgaW4gVk0ncyB3aXRob3V0IGhhcmR3YXJlIGFjY2VsZXJhdGlvbgotCi0yMDEzLTA2LTE1IDEyOjI5OjMxICswMjAwICBKZW5zIEdlb3JnIDxtYWlsQGplbnNnZS5vcmc+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JICBydHBtcDJ0ZGVwYXk6IGFjY2VwdCBtaXNsYWJlbGxlZCBzdHJlYW1zIGZyb20gR1N0cmVhbWVyIDAuMTAgYXMgd2VsbAotCSAgVGhlIG1wMnQgcGF5bG9hZGVyIGluIDAuMTAgbWlzbGFiZWxsZWQgdGhlIHN0cmVhbXMgYXMgTVAyVC1FUwotCSAgaW5zdGVhZCBvZiBNUDJULCBzbyBhY2NlcHQgdGhhdCBhcyB3ZWxsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyNDU3Ci0KLTIwMTMtMDYtMTYgMDU6NDA6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG1hbmFnZSBlbGVtZW50IHN0YXRlIG91cnNlbHZlcwotCSAgTG9jayB0aGUgc3RhdGUgb2YgdGhlIGFsbCBvdXIgZWxlbWVudHMgYW5kIG1hbmFnZSB0aGVpciBzdGF0ZXMKLQkgIG91dHNlbHZlcy4gQmVjYXVzZSB3ZSBhcmUgd29ya2luZyBhc3luYywgd2UgY2FuJ3QgcmVseSBvbiB0aGUgc3RhdGUKLQkgIGNoYW5nZSBmdW5jdGlvbiB0byBzZXQgdGhlIHN0YXRlIGF0IHRoZSByaWdodCB0aW1lIG9yIHRvIHJldHVybiB0aGUKLQkgIHJpZ2h0IHJldHVybiB2YWx1ZSBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24uCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMDQ2Ci0KLTIwMTMtMDYtMTQgMTQ6MDk6NTAgKzAyMDAgIEJydW5vIEdvbnphbGV6IDxzdGVueWFrQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBEb24ndCB1bmxvY2sgc3RyZWFtIGxvY2sgd2l0aG91dCBsb2NraW5nIGl0IGZpcnN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyMTY3Ci0KLTIwMTMtMDYtMTMgMTY6MDA6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IFVzZSB0aGUgcmlnaHQgaGFzaHRhYmxlIHRvIGNhbGN1bGF0ZSBiYW5kd2lkdGgKLQkgIERvbid0IHVzZSBhbiB1bnVzZWQgaGFzaHRhYmxlIHRvIGl0ZXJhdGUgc291cmNlIHRvIGNhbGN1bGF0ZSBiYW5kd2lkdGguCi0JICBSZW1vdmUgdW51c2VkIGNvZGUuCi0KLTIwMTMtMDYtMTIgMTY6Mjc6MjQgLTA2MDAgIEJyZW5kYW4gTG9uZyA8Yi5sb25nQGNhYmxlbGFicy5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHB1bHNlc2luazogUmVxdWlyZSBQdWxzZUF1ZGlvID49IDIuMAotCSAgVGhpcyBpcyBuZWVkZWQgZm9yIHBhX2Zvcm1hdF9pbmZvX2dldF9wcm9wXyogZnVuY3Rpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjQ1OQotCi0yMDEzLTA2LTEzIDE0OjIzOjA4ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgUmV2ZXJ0ICJwdWxzZXNpbms6IE1ha2UgMi4wIGRlcGVuZGVuY3kgb3B0aW9uYWwiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDAxNDU3MDI3ZTBkMzg0YWNhM2U1NTFhZTY4NGUwYWEwNzRlZTU0OTguCi0JICBXZSdsbCBqdXN0IGRlcGVuZCBvbiBQdWxzZUF1ZGlvIDIuMCBvciBhYm92ZSBpbnN0ZWFkIG9mIGhhdmluZyB0aGUgYnVnCi0JICBwYXJ0aWFsbHkgZml4ZWQgYmFzZWQgb24gdGhlIGluc3RhbGxlZCBsaWJwdWxzZSB2ZXJzaW9uLgotCi0yMDEzLTA2LTEzIDEyOjQwOjE1ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgcHVsc2VzaW5rOiBNYWtlIDIuMCBkZXBlbmRlbmN5IG9wdGlvbmFsCi0JICBUaGUgZ2V0Y2FwcyBmdW5jdGlvbiB3ZSBhZGRlZCB1c2VzIHNvbWUgcGFfZm9ybWF0X2luZm9fZ2V0X3Byb3AuLi4KLQkgIGFjY2Vzc29yIGZ1bmN0aW9ucyB0aGF0IHdlcmUgb25seSBhZGRlZCBpbiAyLjAsIHNvIHdlIG9ubHkgaGF2ZSBvdXIKLQkgIGdldGNhcHMgaW1wbGVtZW50YXRpb24gZXhpc3QgaWYgd2UncmUgY29tcGlsaW5nIGFnYWluc3QgbGlicHVsc2UgMi4wIG9yCi0JICBhYm92ZS4KLQkgIEV2ZW50dWFsbHksIHdlIGNvdWxkIGJ1bXAgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnQgdG8gMi4wIG9yIGFib3ZlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjQ1OQotCi0yMDEzLTA2LTEyIDE4OjIzOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICBSZXZlcnQgInZpZGVvbWl4ZXI6IFdoZW4gYWxsIHNpbmtwYWRzIGFyZSBlb3MsIHVwZGF0ZSBvdXRwdXQgc2VnbWVudCBzdG9wIGFuZCBmb3J3YXJkIGl0IgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyZDM5MTBmYzc5MDFiNWYyOWUxNmMwZmRkNGU5MDY3YTZkN2Y2NmZlLgotCSAgSXQncyBub3Qgc29sdmluZyBhbnkgcHJvYmxlbSBhbmQgaW5zdGVhZCBjYXVzZXMgY29kZSB0byBmYWxsIGFwYXJ0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTUxOQotCi0yMDEzLTAxLTA5IDA5OjM5OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG1hcmsgc3VidGl0bGUgc3RyZWFtcyBhcyBzcGFyc2UgaW4gc3RyZWFtLXN0YXJ0IGV2ZW50Ci0JICBBbmQgYWxzbyBtYXJrIHRoZSBzdHJlYW1zIHRoYXQgc2hvdWxkIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQgaWYKLQkgIG1hcmtlZCBzbyBpbiB0aGUgaGVhZGVycy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDA2NDgKLQotMjAxMy0wNi0xMSAyMjoxMjo1OCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYW9yYy1kaXN0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hb3JjLWRpc3QuaDoKLQkgIGF1ZGlvcGFub3JhbWE6IGFkZCBwcmVidWlsdCBmaWxlcwotCi0yMDEzLTA2LTExIDIwOjI3OjUxICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmM6Ci0JICBhdWRpb3Bhbm9yYW1hOiBjbGVhbnVwIGFuZCBleHBhbmQgdGhlIHRlc3RzCi0JICBTcGxpdCBvdXQgdHdvIG1vcmUgdGVzdHMuIEV4dHJhY3QgbW9yZSBjb21tb24gY29kZSBpbnRvIGhlbHBlcnMuIEFkZCBjb3ZlcmFnZSBmb3IgZmxvYXQuCi0KLTIwMTMtMDYtMTAgMjE6MTU6MjAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYzoKLQkgIGF1ZGlvcGFub3JhbWE6IGNsZWFudXAgb2YgdHJhbnNmb3JtKCkKLQkgIE9ubHkgbWFwIGlucHV0IGlmIHdlIGFyZSByZWFkaW5nIGl0LiBDbGVhbnVwIHRoZSBsb2dnaW5nIGFuZCB0aGUgY29tbWVudHMgYSBiaXQuCi0KLTIwMTMtMDYtMDkgMjA6MzU6MTggKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5oOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYW9yYy5vcmM6Ci0JICBhdWRpb3Bhbm9yYW1hOiB1c2Ugb3JjIHRvIHNwZWVkdXAgcHJvY2Vzc2luZwotCSAgVXNlIHNwZWNpYWwgdmFyaWFudHMgZm9yIHRoZSBjYXNlIHdoZW4gd2UgZG9uJ3QgY2hhbmdlIHRoZSBwYW5vcmFtYSAocGFuPTAuMCkuCi0JICBTaW1wbGlmeSB0aGUgcHJvY2Vzc2luZyBmdW5jdGlvbnMgYnkgcGFzc2luZyB0aGUgcGFub3JhbWEgdmFsdWUgZGlyZWN0eSBpbnN0ZWFkCi0JICBvZiB0aGUgaW5zdGFuY2UuIFVzZSBvcmMgZm9yIGNsZWFyaW5nIGJ1ZmZlcnMgdG9vLgotCi0yMDEzLTA2LTExIDE5OjI0OjQ5ICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQGVwaXRlY2guZXU+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBjaGVjayBsYXN0IGVuZF90aW1lIGFmdGVyIGNvbnZlcnNpb24gdG8gcnVubmluZyBzZWdtZW50Ci0JICBUaGUgbGFzdCBlbmRfdGltZSB3YXMgc2F2ZWQgYWZ0ZXIgY29udmVyc2lvbiwgc28gdGhlIGNvbXBhcmlzb24KLQkgIGhhZCB0byBiZSBtYWRlIGFmdGVyIGNvbnZlcnNpb24gZm9yIGl0IHRvIG1ha2Ugc2Vuc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMzg1Ci0KLTIwMTMtMDYtMTEgMTk6MjI6MjAgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IGFkZCBtaXgtPnNlZ21lbnQuc3RhcnQgdG8gb3V0cHV0X2VuZF90aW1lCi0JICBXaGVuIHRoZSBzZWdtZW50IHN0YXJ0IGlzIG5vdCAwLCB0aGlzIGNyZWF0ZWQgYSBzaXR1YXRpb24gd2hlcmUKLQkgIHRoZSBvdXRwdXRfZW5kX3RpbWUgaXMgaW5mZXJpb3IgdG8gb3V0cHV0X3N0YXJ0X3RpbWUsIGFuZCB0aGUgZHVyYXRpb24KLQkgIG9mIHRoZSBuZXh0IGJ1ZmZlciBlbmRlZCB1cCB1bmRlcmZsb3dpbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMzg1Ci0KLTIwMTMtMDYtMTEgMTM6NTQ6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBTZW5kIHN0cmVhbSBoZWFkZXJzIGFmdGVyIHRoZSBzZWdtZW50IGV2ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNzk5Ci0KLTIwMTMtMDYtMTEgMTI6MjY6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBEbyBhbGxvY2F0aW9uIHF1ZXJ5IGFmdGVyIGV4cG9zaW5nIGFsbCBwYWRzIGFuZCBuby1tb3JlLXBhZHMKLQkgIEFsc28gY29uZmlndXJlIHZpZGVvIHN0cmVhbXMgYXMgZWFybHkgYXMgcG9zc2libGUuCi0JICBSZWxhdGVkIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4NTYKLQkgIGJ1dCBub3QgZml4aW5nIHRoYXQuCi0KLTIwMTMtMDYtMTEgMTI6MjU6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IERvbid0IGZvcndhcmQgQ0FQUyBldmVudHMgZnJvbSB1cHN0cmVhbQotCSAgSnVzdCB1c2UgdGhlIGRlZmF1bHQgcGFkIGV2ZW50IGhhbmRsZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxOTc2Ci0KLTIwMTMtMDUtMjYgMDg6MTg6MDQgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IENhY2hlIHRoZSBnZXRjYXBzL2FjY2VwdGNhcHMgcHJvYmUgc3RyZWFtCi0JICBnZXRjYXBzIGlzIGNhbGxlZCBmcmVxdWVudGx5IGR1cmluZyBzdHJlYW0gc2V0dXAsIGFuZCBjcmVhdGluZyBhIG5ldwotCSAgc3RyZWFtIGVhY2ggdGltZSBpcyB2ZXJ5IGluZWZmaWNpZW50LiBUaGVyZSdzIHNvbWUgbW9yZSByb29tIGZvcgotCSAgb3B0aW1pc2F0aW9uIGJ5IGNhY2hpbmcgdGhlIHF1ZXJpZWQgc2luayBmb3JtYXRzIGFzIHdlbGwsIGJ1dCB0aGlzIG5lZWRzCi0JICBzb21lIG1vcmUgY2hhbmdlcyB0byBsaXN0ZW4gZm9yIGZvcm1hdCBjaGFuZ2VzIG9uIHRoZSBzaW5rIChmb3Igd2hlbgotCSAgc3VwcG9ydGVkIGZvcm1hdHMgY2hhbmdlIGJldHdlZW4gcHJvYmUgc3RyZWFtIGNyZWF0aW9uIGFuZCBzaW5rCi0JICBxdWVyeWluZykuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg2NDU5Ci0KLTIwMTMtMDUtMjMgMjE6Mzk6MDggKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmg6Ci0JICBwdWxzZXNpbms6IEFkZCBhIGdldGNhcHMgZnVuY3Rpb24KLQkgIFRoaXMgYWxsb3dzIHVzIHRvIGhhdmUgbW9yZSBmaW5lLXR1bmVkIGNhcHMgaW4gUkVBRFkgb3IgYWJvdmUuIEhvd2V2ZXIsCi0JICB0aGlzIGlzIF9yZWFsbHlfIGluZWZmaWNpZW50IHNpbmNlIHdlIGNyZWF0ZSBhIG5ldyBzdHJlYW0gYW5kIHF1ZXJ5IHNpbmsKLQkgIGZvciBldmVyeSBnZXRjYXBzIGluIFJFQURZLCB3aGljaCBvbiBhIHNpbXBsZSBnc3QtbGF1bmNoIGxpbmUgaGFwcGVucwotCSAgYWJvdXQgMzUgdGltZXMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gY2FjaGUgZ2V0Y2FwcyByZXN1bHRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjQ1OQotCi0yMDEzLTA1LTEwIDExOjMyOjQ0ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBUYWtlIGEgbG9jayBvbiB0aGUgcmluZ2J1ZmZlciBpbiBhY2NlcHRjYXBzCi0JICBUaGlzIGlzIG5lZWRlZCBhcyBhIGNvbmN1cnJlbnQgc3RhdGUgY2hhbmdlIGNvdWxkIHB1bGwgdGhlIGNvbnRleHQgb3IKLQkgIHN0cmVhbSBvdXQgZnJvbSB1bmRlciBvdXIgZmVldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY0NTkKLQotMjAxMy0wNi0wOSAyMDoyOTowOSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5oOgotCSAgYXVkaW9wYW5vcmFtYTogbW92ZSB0aGUgZW51bSB0byB0aGUgaGVhZGVyIGFuZCB1c2UgaW5zdGVhZCBvZiBnaW50Ci0JICBNb3ZlIHRoZSBlbnVtIGZvciB0aGUgcHJvY2Vzc2luZyBtZXRob2QgdG8gdGhlIGhlYWRlciBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlCi0JICB0eXBlIGZvciB0aGUgaW5zdGFuY2Ugc3RydWN0LgotCi0yMDEzLTA2LTA5IDIwOjMyOjIyICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSAgbGV2ZWw6IHJld29yayB0aGUgdGVzdHMgdG8gY292ZXIgb3RoZXIgZm9ybWF0cyB0b28KLQotMjAxMy0wNi0wNSAxNjozMjozMCArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBtYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgbm90IGRlbGV0ZWQgYmVmb3JlIHRoZSBwb29sCi0JICBUaGUgcG9vbCBhY2Nlc3NlcyBkYXRhIGZyb20gdGhlIHY0bDJvYmplY3Qgc28gaXQgbXVzdCBleGlzdCBhdCBsZWFzdAotCSAgYXMgbG9uZyBhcyB0aGUgcG9vbC4gUmVmY291bnQgdGhlIGVsZW1lbnQgd2hpY2ggY29udHJvbHMgdGhlIG9iamVjdAotCSAgbGl2ZS10aW1lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTY1MAotCi0yMDEzLTA2LTA3IDE1OjM4OjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2xpYnBuZy9NYWtlZmlsZS5hbToKLQkgIHBuZzogTGluayB3aXRoIGxpYmdzdGJhc2UgZm9yIEdzdEJ5dGVSZWFkZXIgYW5kIEdzdEFkYXB0ZXIKLQotMjAxMy0wNi0wNyAxNToxNToxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZlbmMvTWFrZWZpbGUuYW06Ci0JICB3YXZlbmM6IExpbmsgd2l0aCBsaWJnc3RiYXNlIGZvciBHc3RCeXRlV3JpdGVyCi0KLTIwMTMtMDYtMDcgMTM6MjY6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBQdXNoIHN0cmVhbS1zdGFydCBldmVudCBpbiBwdWxsIG1vZGUgYmVmb3JlIGFueXRoaW5nIGVsc2UKLQotMjAxMy0wNS0xMCAxMjowOToxOSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkgIHB1bHNlc2luazogR2V0IHJpZCBvZiBhY2NlcHRjYXBzIHNpZGUtZWZmZWN0cwotCSAgVGhlIHNpbmsgaW5mbyBjYWxsYmFjayBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzIG9uIHRoZSBHc3RQdWxzZVNpbmsKLQkgIG9iamVjdCBzaW5jZSB3ZSBhcmUgc29tZXRpbWVzIHVzaW5nIHdpdGggYSBkdW1teSBzdHJlYW0gaW4gYWNjZXB0Y2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY0NTkKLQotMjAxMy0wNi0wNSAxODozNjo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMS4xLjEgPT09Ci0KLTIwMTMtMDYtMDUgMTc6NTg6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuaDoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5oOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAxLjEuMQotCi0yMDEzLTA2LTA1IDE2OjM1OjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTMtMDYtMDUgMTU6NTA6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBGaXggdGFnbGlzdCByZWYgaGFuZGxpbmcgdGhhdCBtYWRlIHRoZSB1bml0IHRlc3QgZmFpbAotCi0yMDEzLTA2LTA1IDE1OjE0OjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwOThjMGQ3IHRvIDAxYTdhNDYKLQotMjAxMy0wNi0wMyAwOToxNzo0MyArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGl0ZXJhdGUgY29udHJvbHMgd2l0aCBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgaWYgcG9zc2libGUKLQkgIEluIHYyLjYuMTggY29udHJvbCBjbGFzc2VzIHdoZXJlIGFkZGVkIHRvIHRoZSB2NGwyIEFQSS4KLQkgIEl0ZXJhdGluZyBvdmVyIENJRHMgc3RhcnRpbmcgd2l0aCBWNEwyX0NJRF9CQVNFIHdpbGwgb25seSBmaW5kIGNvbnRyb2xzIGZvcgotCSAgdGhlIGZpcnN0IGNvbnRyb2wgY2xhc3MuCi0JICBCeSBpdGVyYXRpbmcgd2l0aCBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgYWxsIGNvbnRyb2xzIGFyZSBmb3VuZC4KLQkgIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgY29udHJvbHMgZnJvbSBvdGhlciBjb250cm9sIGNsYXNzZXMgYXZhaWxhYmxlIGluCi0JICB0aGUgZXh0cmEtY29udHJvbHMgcHJvcGVydHkuCi0JICBJZiBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgaXMgbm90IGRlZmluZWQgYXQgY29tcGlsZSB0aW1lIG9yIG5vdCBzdXBwb3J0ZWQKLQkgIGF0IHJ1bnRpbWUgdGhlbiB0aGUgb2xkIG1lY2hhbmlzbSBmb3IgaXRlcmF0aW5nIGlzIHVzZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxNTQwCi0KLTIwMTMtMDYtMDUgMTI6MTI6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5jOgotCSAgdWRwc2luazogYXZvaWQgbGVha2luZyB0aGUgaG9zdAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTU4NgotCi0yMDEzLTA2LTA0IDA4OjI2OjMzICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMjogaW1wcm92ZSBwaXhlbCBhc3BlY3QgcmF0aW8gaGFuZGxpbmcKLQkgIEluc3RlYWQgb2YganVzdCBhc3N1bWluZyBhIGFzcGVjdCByYXRpbyBvZiAxLzEgdXNlIFZJRElPQ19DUk9QQ0FQIHRvIGFzawotCSAgdGhlIGRldmljZS4KLQkgIFRoaXMgYWxzbyBhZGQgYSBwaXhlbC1hc3BlY3QtcmF0aW8gcHJvcGVydHkgdG8gb3ZlcndyaXRlIHRoZSB2YWx1ZSBmcm9tIHRoZQotCSAgZHJpdmVyIGFuZCBhIGZvcmNlLWFzcGVjdC1yYXRpbyBwcm9wZXJ0eSB0byBpZ25vcmUgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMjg1Ci0KLTIwMTMtMDYtMDQgMTc6MDQ6MTEgKzAyMDAgIFN0aXJsaW5nIFdlc3RydXAgPHN3ZXN0cnVwQGdtYWlsLmNvbT4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogRml4IGNvbXBpbGF0aW9uIHdpdGggb2xkZXIga2VybmVscwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTU5NQotCi0yMDEzLTA2LTAzIDE3OjA3OjEwICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGNhbGwgVklESU9DX1JFUUJVRlMgd2l0aCBjb3VudCA9IDAgaW4gcG9vbF9maW5hbGl6ZQotCSAgV2l0aG91dCB0aGlzIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgZmFpbHM6Ci0JICAtIHNldF9jYXBzKCkKLQkgIC0gb2JqZWN0X3N0b3AoKSAoZG9lcyBub3RoaW5nKQotCSAgLSBzZXRfZm9ybWF0KCkgLT4gVklESU9DX1NfRk1UCi0JICAtIHNldF9jb25maWcoKSAtPiBWSURJT0NfUkVRQlVGUyB3aXRoIGNvdW50ID0gTgotCSAgLSBzZXRfY2FwcygpCi0JICAtIG9iamVjdF9zdG9wKCkKLQkgIC0gcG9vbF9maW5hbGl6ZSgpCi0JICAtIHNldF9mb3JtYXQoKSAtPiBWSURJT0NfU19GTVQgPT4gRUJVU1kKLQkgIFVzdWFsbHkgdGhlIHBvb2wgaXMgc3RhcnRlZCBhZnRlciBzZXRfY29uZmlnKCksIGluIHdoaWNoIGNhc2Ugb2JqZWN0X3N0b3AoKQotCSAgd2lsbCByZXN1bHQgaW4gYSBwb29sX3N0b3AgYW5kIHRoZXJlZm9yZSBWSURJT0NfUkVRQlVGUyB3aXRoIGNvdW50ID0gMCBidXQKLQkgIHRoYXQgaXMgbm90IGd1YXJhbnRlZWQuCi0JICBBbHNvIGNhbGxpbmcgVklESU9DX1JFUUJVRlMgd2l0aCBjb3VudCA9IDAgaW4gcG9vbF9maW5hbGl6ZSgpIGlmIG5lY2Vzc2FyeQotCSAgZml4ZXMgdGhpcyBwcm9ibGVtLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMTU0MwotCi0yMDEzLTA1LTI4IDE5OjE0OjE1ICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IHJld29yayBzaW5rIGJ1ZmZlciByZWZjb3VudGluZwotCSAgVGhpcyBpcyBhIGZvbGxvd3VwIHBhdGNoIGZvciAjNzAwNzgxLCB3aGljaCBpcyBub3QgcXVpdGUgY29ycmVjdC4KLQkgIFRoZSBidWZmZXIgaGFuZGxpbmcgaXMgcXVpdGUgY29tcGxpY2F0ZWQgaGVyZS4KLQkgIFRoZSBvcmlnaW5hbCBjb2RlIGludGVuZGVkIHRvIHRoZSB0aGUgZm9sbG93aW5nOgotCSAgLSBnc3RfdjRsMl9idWZmZXJfcG9vbF9wcm9jZXNzKCkgY2FsbHMgUUJVRiBhbmQgYWRkcyB0aGUgYnVmZmVyIHRvIHRoZQotCSAgbG9jYWwgbGlzdC4KLQkgIC0gVGhlIHNpbmsgY2FsbHMgZ3N0X2J1ZmZlcl91bnJlZigpIHdoaWNoIHJldHVybnMgdGhlIGJ1ZmZlciB0byB0aGUgcG9vbAotCSAgYnV0IG5vdCB0aGUgJ2ZyZWUgbGlzdCcuCi0JICAtIFNvbWUgdGltZSBsYXRlciBEUUJVRiByZXR1cm5zIHRoZSBidWZmZXIgYW5kCi0JICBnc3RfdjRsMl9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlcigpIHB1dHMgaW4gb24gdGhlICdmcmVlIGxpc3QnLgotCSAgSWYgdGhlIGJ1ZmZlciBtdXN0IGJlIGNvcGllZCB0aGVuIChwYXJlbnRfY2xhc3MpLT5hY3F1aXJlX2J1ZmZlcigpIGlzCi0JICBjYWxsZWQgZGlyZWN0bHkgdG8ga2VlcCB0aGUgYnVmZmVyIGluIHRoZSBwb29sLgotCSAgVGhpcyBoYXMgdHdvIHByb2JsZW1zOgotCSAgMS4gSWYgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIoKSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBidWZmZXIgaXMKLQkgIHJldHVybmVkIHRvIHRoZSBwb29sLCB0aGVuIHRoZSBidWZmZXIgaXMgcHV0IG9uIHRoZSAnZnJlZSBsaXN0JyB0d2ljZS4KLQkgIFRoaXMgY2FuIGhhcHBlbiBpZiBhIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyIGlzIGtlcHQgb3V0c2lkZSB0aGUgc2luaywKLQkgIG9mIGlmIERRQlVGIHJldHVybnMgdGhlIGJ1ZmZlciwgdGhhdCB3YXMganVzdCBxdWV1ZWQgd2l0aCBRQlVGLgotCSAgMi4gSWYgYnVmZmVycyBhcmUgY29waWVkLCB0aGVuIGFsbCBidWZmZXJzIGFyZSBpbiB0aGUgcG9vbCBhdCBhbGwgdGltZXMuIEFzCi0JICBhIHJlc3VsdCBnc3RfdjRsMl9idWZmZXJfcG9vbF9zdG9wKCkgYW5kIGdzdF92NGwyX2J1ZmZlcl9wb29sX2RxYnVmKCkKLQkgIGNhbiBhY2Nlc3MgcG9vbC0+YnVmZmVycyBhdCB0aGUgc2FtZSB0aW1lLCB3aGljaCBjYW4gbGVhZCB0byBtZW1vcnkKLQkgIGNvcnJ1cHRpb24uCi0JICBUaGUgcGF0Y2ggZm9yICM3MDA3ODEgZml4ZXMgdGhvc2UgcHJvYmxlbXMsIGJ1dCB3aXRoIHRoZSBzaWRlIGVmZmVjdCB0aGF0Ci0JICB0aGVyZSBhcmUgYWx3YXlzIGJ1ZmZlcnMgb3V0c2lkZSB0aGUgcG9vbCAoYmVjYXVzZSB0aGV5IGFyZSBxdWV1ZWQpIGFuZAotCSAgdGhlIHBvb2wgaXMgbmV2ZXIgc3RvcHBlZC4KLQkgIFRoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSByZWxlYXNpbmcgdGhlIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyIGFmdGVyCi0JICBoYW5kbGluZyBpdCAodG8gYXZvaWQgcHJvYmxlbSAyLikgc28gaXQgY2FuIGJlIHJldHVybmVkIHRvIHRoZSBwb29sLgotCSAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIoKSBpcyBvbmx5IGNhbGxlZCBpZiB0aGUgYnVmZmVyIGlzCi0JICBhbHJlYWR5IGluIHRoZSBwb29sICh0byBhdm9pZCBwcm9ibGVtIDEuKS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDEzNzUKLQotMjAxMy0wNi0wMiAxNToyNDozOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG1ha2Ugc3VyZSB0YWdsaXN0IGlzIHdyaXRhYmxlIGJlZm9yZSBhZGRpbmcgdGFncwotCSAgQXZvaWRzIGFzc2VydGlvbnMKLQotMjAxMy0wNS0zMCAxOToyNDoxMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGVmZmVjdGl2ZWx5IHNraXAgdHJhY2tzIHRoYXQgd2VyZW4ndCBsaXN0ZWQgb24gdGhlIDFzdCBtb292Ci0JICBXaXRob3V0IHRoaXMsIHN0cmVhbSBpcyBOVUxMIGFuZCB0aGUgY29kZSB3aWxsIHRyeSB0byBhY2Nlc3MgaXQsIGxlYWRpbmcKLQkgIHRvIHNlZ2ZhdWx0cy4KLQotMjAxMy0wNS0zMCAxOToyMzo1MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNraXAgcmVkdW5kYW50IGNoZWNrCi0JICAhZ290X21vb3YgaXMgYWxyZWFkeSBjaGVja2VkIHRoZSBsaW5lIGFib3ZlCi0KLTIwMTMtMDYtMDIgMTM6MDM6NDAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICB0ZXN0czogY2xlYW51cCBsZXZlbCB0ZXN0cwotCSAgU3BsaXQgb3V0IGEgZmV3IG1vcmUgdGVzdHMgdG8gYXZvaWQgY2hlY2tpbmcgdGhlIHNhbWUgc3R1ZmYgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4KLQotMjAxMy0wNi0wMSAyMTozMzo0NiArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmg6Ci0JICBsZXZlbDogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgaW4gaW5zdGFuY2Ugc3RydWN0Ci0KLTIwMTMtMDUtMzEgMTg6MTM6MDIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBsZXZlbDogYWRkIGEgdGVzdCBmb3IgY29udGlub3VzIHRpbWVzdGFtcHMKLQkgIEEgdGVzdCB0aGF0IGNoZWNrcyB0aGF0IG1zZ1tuXS50cyArIG1zZ1tuXS5kdXIgPT0gbXNnW24rMV0udHMuCi0KLTIwMTMtMDQtMTIgMTY6MDI6NDQgKzAzMDAgIEFudG9uIEJlbGthIDxhbnRvbmJlbGthQGdtYWlsLmNvbT4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmg6Ci0JICB3YXZlbmM6IGFkZCB0YWdzICYgdG9jIHN1cHBvcnQKLQkgIFdyaXRlIHRhZ3MgYXMgTElTVCBJTkZPIGNodW5rLiBGb3JtYXQgdGhlIHRvYyBhcyBjdWUgKyBMSVNUIGFkdGwgY2h1bmsuIFJlbW92ZQotCSAgb2xkICNpZmRlZidlZCBjb2RlLgotCi0yMDEzLTA1LTMxIDE1OjEyOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIFJldmVydCAicnRwaDI2NHBheTogUmVzdHJ1Y3R1cmluZyB0byBhbGxvdyBmb3IgYWRkaW5nIG9wdGlvbmFsIGNhcHMiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDYxNjY2ODk4Y2ZlODlhMWIyMWQzZTY4NTBhYjQ0ZjViMTYzM2VkNzkuCi0JICBUaGlzIGNvbW1pdCBjaGFuZ2VzIHdoYXQgdGhlIHNldF9zcHNfcHBzKCkgZnVuY3Rpb24gZG9lcywgbm90IGl0IGRvZXNuJ3QKLQkgIHNldCBjYXBzIGFueW1vcmUgKGFuZCBzaG91bGQgaGF2ZSBiZWVuIHJlbmFtZWQpLiBUaGUgbWFpbiBwcm9ibGVtIGlzIHRoYXQKLQkgIG5vdCBhbGwgY2FsbCBzaXRlcyBhcmUgdXBkYXRlZCBhbmQgdGh1cyBsZWFrIHRoZSBzdHJpbmcuCi0KLTIwMTMtMDUtMzEgMTU6MTE6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgUmV2ZXJ0ICJydHBoMjY0cGF5L2RlcGF5OiBBZGQgZnJhbWUgZGltZW5zaW9ucyBhIHBheWxvYWRlZCBjYXBzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAzZGNhNzU2YTVkYmE1NTI2NjI1NmYyMzllM2UxMmEzZDA1OGUxODVhLgotCSAgVGhlIEgyNjQgUlRQIHNwZWMgaGFzIG5vIGF0dHJpYnV0ZXMgZm9yIHdpZHRoIGFuZCBoZWlnaHQuCi0KLTIwMTMtMDUtMzEgMTU6MDk6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBSZXZlcnQgInJ0cGgyNjRwYXkvZGVwYXk6IEFkZCBvcHRpb25hbCBmcmFtZXJhdGUgY2FwcyBmb3IgdXNlIGluIFNEUCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDg4MjVlMmE1YzBiZmI4ODNmZjg4ZTJjOWRhNDk5YzgwMGViY2EwYS4KLQkgIFRoZXJlIGlzIG5vIGZyYW1lcmF0ZSBhdHRyaWJ1dGUgaW4gdGhlIGgyNjQgUlRQIHNwZWMuCi0KLTIwMTMtMDUtMzEgMTU6MDg6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIFJldmVydCAicnRwanBlZ3BheS9kZXBheTogUmVwbGFjZSBmcmFtZXNpemUgY2FwcyB3aXRoIHdpZHRoL2hlaWdodCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgMDA3NWQxMTFiNDc1Y2EyNzg5NWVlOTQ3NjE1NDI2MGI2OTAyOTQwYi4KLQkgIEV4dHJhIGFwcGxpY2F0aW9uL3gtcnRwIGFyZSBTRFAgZmllbGRzLCB3aGljaCBhcmUgc3RyaW5ncy4KLQotMjAxMy0wNS0zMSAxNTowNTo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIFJldmVydCAicnRwanBlZ3BheS9kZXBheTogUmVwbGFjZSBmcmFtZXJhdGUgY2FwcyBmaWVsZCB3aXRoIGZyYWN0aW9uIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA5ZmQyNWE4MTBiODU5ZTBlYzIwNTE3NjU3ODczNTEwMGQ4M2RlNGFmLgotCSAgV2UgZGVhbCB3aXRoIHNkcCBhdHRyaWJ1dGVzIGluIGFwcGxpY2F0aW9uL3NkcCwgd2hpY2ggYXJlIGFsd2F5cyBzdHJpbmdzLgotCi0yMDEzLTA1LTMxIDEyOjMzOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgZXh0cmEgVExTIHVybCBwcm90b2NvbHMKLQkgIFdlIGFsc28gc3VwcG9ydCBUTFMgcHJvdG9jb2xzIG5vdy4KLQotMjAxMy0wNS0zMCAxNDo0ODo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogQWRkIEZJWE1FIGNvbW1lbnQgYWJvdXQgdGhlIERVUkFUSU9OIHF1ZXJ5IGZyb20gYWRkZXIKLQkgIEN1cnJlbnRseSB0aGUgY29kZSBqdXN0IHRha2VzIHdpdGggbWF4aW11bSB1cHN0cmVhbSBkdXJhdGlvbiwgd2hpY2gKLQkgIGlzIHdyb25nLiBJdCBzaG91bGQgYmUgdGhlIG1heGltdW0gdXBzdHJlYW0gZHVyYXRpb24gaW4gcnVubmluZyB0aW1lLgotCi0yMDEzLTA1LTMwIDIxOjIwOjU5ICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQGVwaXRlY2guZXU+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBTZXQgYSByZWZlcmVuY2UgdG8gbWl4LT5jdXJyZW50X2NhcHMgYXMgdGhlIFFVRVJZX0NBUFMgcmVzdWx0LgotCi0yMDEzLTA1LTMwIDE3OjM3OjEzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIGxldmVsOiBtaXNjIGNsZWFudXBzCi0JICBGaXggc29tZSBvdWRhdGVkIGNvbW1lbnRzLiBTb3J0IG91dCBzb21lIGNvbmZ1c2lvbiBvZiBpbnRlcnZhbF9mcmFtZXMgYW5kIG51bV9mcmFtZXMuCi0KLTIwMTMtMDUtMjkgMjA6MzU6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyOiBPbmx5IGNvbmRpdGlvbmFsbHkgdXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVJfTUVOVSwgaXQncyBub3QgYXZhaWxhYmxlIGluIG9sZGVyIHZlcnNpb25zCi0KLTIwMTMtMDUtMjAgMTY6NDU6MzcgKzAyMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0JICB2NGwyOiBhZGQgYSBwcm9wZXJ0eSBmb3IgYXJiaXRyYXJ5IHY0bDIgY29udHJvbHMKLQkgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc2V0IGFueSBjb250cm9scyB0aGF0IGNhbiBiZSBzZXQgd2l0aAotCSAgVklESU9DX1NfQ1RSTC4KLQkgIFRoZSBjb250cm9scyBhcmUgc2V0IHdoZW4gdGhlIHByb3BlcnR5IGlzIHNldCAoaWYgdGhlIGRldmljZSBpcyBvcGVuKQotCSAgYW5kIHdoZW4gdGhlIGRldmljZSBpcyBvcGVuZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4ODM3Ci0KLTIwMTMtMDUtMjggMTg6MzE6MDcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IGZpeCBkaXNjb250aW51aXRpZXMgaW4gdGltZXN0YW1wcwotCi0yMDEzLTA1LTI4IDE1OjQ2OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrYW5pbWF0aW9uLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZmRlYy5oOgotCSAgZ2RrcGl4YnVmZGVjOiBLZWVwIHNlcmlhbGl6ZWQgZXZlbnRzIGluIG9yZGVyLCBhbmQgZG9uJ3Qgc2VuZCBTRUdNRU5UIGJlZm9yZSBDQVBTCi0KLTIwMTMtMDUtMjggMTU6NDU6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNyZWF0ZSBhbmQgcHVzaCBzdHJlYW0tc3RhcnQgaW4gVENQIG1vZGUKLQotMjAxMy0wNS0yOCAxNToxMDowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmVtb3ZlIHNvbWUgb2Jzb2xldGUgY29kZQotCSAgSXQgaXMgbm90IG5lZWRlZCB0byBkbyBhIHN0YXRlIGNoYW5nZSBmcm9tIHRoZSBfcGxheSgpIGZ1bmN0aW9uIG9uCi0JICBvdXJzZWx2ZXMuIFRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gYWxyZWFkeSBkaWQgdGhhdCBhbmQgd2UgZG9uJ3Qgd2FudCB0bwotCSAgaW50ZXJmZXJlIHdpdGggdGhhdCAob3IgdXNlIGhhY2tzIHRvIGF2b2lkIGludGVyZmVyZW5jZSkuCi0KLTIwMTMtMDUtMjggMTI6MjQ6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHNldCBSVENQIGNhcHMgb24gdGhlIFJUQ1AgcGFkcwotCi0yMDEzLTA1LTI4IDEyOjIzOjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBzZW5kIHN0cmVhbS1zdGFydCBhbmQgc2VnbWVudCBldmVudHMKLQkgIEFsc28gc2VuZCBzdHJlYW0tc3RhcnQgYW5kIHNlZ21lbnQgZXZlbnQgb24gdGhlIFJUQ1AgcGFkLgotCSAgV2UgZG9uJ3QgbmVlZCB0byBzZW5kIGFueXRoaW5nIG9uIHRoZSBzeW5jX3NyYyBwYWQgYmVjYXVzZSB3ZQotCSAgYWxyZWFkeSBmb3J3YXJkZWQgYWxsIGluY29tbWluZyBldmVudHMuCi0KLTIwMTMtMDQtMjUgMTU6MjU6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFkZCBzaWduYWwgdG8gaGFuZGxlIHNlcnZlciByZXF1ZXN0cwotCSAgQWRkIGEgc2lnbmFsIHRvIGJlIG5vdGlmaWVkIG9mIGEgc2VydmVyIHJlcXVlc3QuIFRoZSBzaWduYWwgaGFuZGxlciBjYW4gdGhlbgotCSAgY29uc3RydWN0IHRoZSByZXNwb25zZSBtZXNzYWdlIGZvciB0aGUgc2VydmVyLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzIyMDcKLQotMjAxMy0wNS0yNyAyMjo0MzoyNSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBNYWludGFpbiB6LW9yZGVyIHdoZW4gbmV3IHBhZCBhcmUgYWRkZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDExMDkKLQotMjAxMy0wMy0wNiAxMzoxNzo1NCArMDAwMCAgVG9tIEdyZWVud29vZCA8dGNkZ3JlZW53b29kQGhvdG1haWwuY29tPgotCi0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZweC9nc3R2cDhlbmMuaDoKLQkgIHZwOGVuYzogQWRkIHByb3BlcnR5IHRvIG1hbnVhbGx5IHNwZWNpZnkgdGhlIHRpbWViYXNlIG9mIHRoZSBlbmNvZGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NzA5Ci0KLTIwMTMtMDUtMjUgMTI6MTc6NDAgLTA0MDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IEFsd2F5cyBoYW5kbGUgZmx1c2hfc3RvcF9wZW5kaW5nIGF0b21pY2FsbHkKLQkgIEl0IGlzIG5vdCBwcm90ZWN0ZWQgd2l0aCB0aGUgQ09MTEVDVF9QQURTX1NUUkVBTV9MT0NLIGFueW1vcmUKLQotMjAxMy0wNS0yMyAxODoxNDoxNyAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYzoKLQkgIHRlc3RzOiB2aWRlb21peGVyOiBBZGQgYSB0ZXN0c3VpdGUgZm9yIHZpZGVvbWl4ZXIKLQkgIFRoaXMgaXMgbW9zdGx5IGNvcHkgcGFzdGVkIGZyb20gLWJhc2UvdGVzdHMvY2hlY2svZWxlbWVudHMvYWRkZXIuYwotCi0yMDEzLTA1LTI1IDEwOjU3OjAyIC0wNDAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBEbyBub3QgdGFrZSBDT0xMRUNUX1BBRFNfU1RSRUFNX0xPQ0sgd2hlbiB1bm5lY2Vzc2FyeQotCSAgQ29sbGVjdHBhZCB0YWtlcyB0aGUgbG9jayBpdHNlbGYgd2hlbiByZWNlaXZpbmcgc2VyaWFsaXplZCBldmVudHMKLQkgIGFuZCB3ZSBzaG91bGQgbm90IHRha2UgaXQgZm9yIG5vdCBzZXJpYWxpemVkIG9uZXMKLQotMjAxMy0wNS0yNCAxOTozNDowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiBQcm9wZXJseSBza2lwIG5vbi1mcmFtZSBjaHVua3MKLQotMjAxMy0wNS0yNCAxOTozMToxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiBGbHVzaCBkYXRhIGZyb20gYWRhcHRlciBhZnRlciByZWFkaW5nIGl0Ci0JICBPdGhlcndpc2Ugd2UncmUgZ29pbmcgaW4gYW4gaW5maW5pdGUgbG9vcCwgcmVhZGluZyB0aGUgc2FtZSBkYXRhCi0JICBvdmVyIGFuZCBvdmVyIGFnYWluLgotCi0yMDEzLTA0LTI0IDE1OjM5OjU0ICswMDAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBnc3QvZ29vbTJrMS9NYWtlZmlsZS5hbToKLQkgIGdvb20yazE6IGZpeCBtb3JlIGR1cGxpY2F0ZWQgc3ltYm9scwotCi0yMDEzLTA1LTIyIDAyOjQwOjUyICswMjAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIHJ0cGpwZWdwYXkvZGVwYXk6IFJlcGxhY2UgZnJhbWVyYXRlIGNhcHMgZmllbGQgd2l0aCBmcmFjdGlvbgotCSAgVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGhhZCB0aGUgZm9ybWF0dGluZyBvZiBTRFAgYXR0cmlidXRlcyBoYXBwZW4KLQkgIGluIGVhY2ggUlRQIHBheWxvYWRlciwgbm93IGluc3RlYWQgdGhlIGNvbnN0aXR1ZW50IHZhbHVlcyBhcmUgcHJvcGFnYXRlZAotCSAgYXMgY2FwcyBmaWVsZHMuIFRoaXMgYWxsb3dzIGZvciBhcHBsaWNhdGlvbnMgdG8gZG8gU0RQIG9mZmVyL2Fuc3dlcgotCSAgYmFzZWQgb24gY2FwcyBuZWdvdGlhdGlvbi4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA3NDgKLQotMjAxMy0wNS0yMiAwMTo1ODo1NyArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXkvZGVwYXk6IFJlcGxhY2UgZnJhbWVzaXplIGNhcHMgd2l0aCB3aWR0aC9oZWlnaHQKLQkgIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBoYWQgdGhlIGZvcm1hdHRpbmcgb2YgU0RQIGF0dHJpYnV0ZXMgaGFwcGVuCi0JICBpbiBlYWNoIFJUUCBwYXlsb2FkZXIsIG5vdyBpbnN0ZWFkIHRoZSBjb25zdGl0dWVudCB2YWx1ZXMgYXJlIHByb3BhZ2F0ZWQKLQkgIGFzIGNhcHMgZmllbGRzLiBUaGlzIGFsbG93cyBmb3IgYXBwbGljYXRpb25zIHRvIGRvIFNEUCBvZmZlci9hbnN3ZXIKLQkgIGJhc2VkIG9uIGNhcHMgbmVnb3RpYXRpb24uCi0JICBLZWVwIHBhcnNpbmcgYS1mcmFtZXJhdGUsIHgtZnJhbWVyYXRlIGFuZCB4LWRpbWVuc2lvbnMgaW4gcnRwanBlZ2RlcGF5Ci0JICB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIHBheWxvYWRlcnMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNzQ4Ci0KLTIwMTMtMDUtMjIgMDM6MTg6MDcgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheS9kZXBheTogQWRkIG9wdGlvbmFsIGZyYW1lcmF0ZSBjYXBzIGZvciB1c2UgaW4gU0RQCi0JICBUaGlzIGFsbG93cyBmb3IgYXBwbGljYXRpb25zIHRvIGZvcm1hdCBTRFAgYXR0cmlidXRlcyBhbmQgc3RpbGwgZG8gU0RQCi0JICBvZmZlci9hbnN3ZXIgYmFzZWQgb24gY2FwcyBuZWdvdGlhdGlvbi4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA3NDkKLQotMjAxMy0wNS0yMiAwMzowOTo0NCArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgcnRwaDI2NHBheS9kZXBheTogQWRkIGZyYW1lIGRpbWVuc2lvbnMgYSBwYXlsb2FkZWQgY2FwcwotCSAgVGhpcyBhbGxvd3MgZm9yIGFwcGxpY2F0aW9ucyB0byBmb3JtYXQgU0RQIGF0dHJpYnV0ZXMgYW5kIHN0aWxsIGRvIFNEUAotCSAgb2ZmZXIvYW5zd2VyIGJhc2VkIG9uIGNhcHMgbmVnb3RpYXRpb24uCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNzQ5Ci0KLTIwMTMtMDUtMjAgMjI6MTQ6NDQgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IFJlc3RydWN0dXJpbmcgdG8gYWxsb3cgZm9yIGFkZGluZyBvcHRpb25hbCBjYXBzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNzQ5Ci0KLTIwMTMtMDUtMjMgMTg6NDI6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSAgKGR5bnxtdWx0aSl1ZHBzaW5rOiBBZGQgcHJvcGVydGllcyB0byBzcGVjaWZ5IHRoZSBiaW5kIGFkZHJlc3MgYW5kIHBvcnQKLQkgIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSBhbnkgYWRkcmVzc2VzIGFuZCBhIHJhbmRvbSBwb3J0IGZvciBiaW5kaW5nIHRoZSBzb2NrZXQuCi0KLTIwMTMtMDUtMjMgMTg6MDU6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgKGR5bnxtdWx0aSl1ZHBzaW5rOiBCaW5kIHNvY2tldCBiZWZvcmUgdXNpbmcgaXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA4NzgKLQotMjAxMy0wNS0yMyAxNzoyNToyOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgKG11bHRpKXVkcHNpbms6IEFkZCBtaXNzaW5nIGdldHRlcnMgZm9yIHNvY2tldC12NiBhbmQgdXNlZC1zb2NrZXQtdjYgcHJvcGVydGllcwotCi0yMDEzLTA1LTIyIDIxOjAxOjQ4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IERvbid0IGhvbGQgc3RyZWFtLWxvY2sgd2hpbGUgcHVzaGluZyBub24tc2VyaWFsaXplZCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA4NjgKLQotMjAxMy0wNS0yMiAyMTowMDo0NSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBEb24ndCBob2xkIG9iamVjdCBsb2NrIHdoaWxlIHNlbmRpbmcgZXZlbnRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwODY4Ci0KLTIwMTMtMDUtMjIgMTc6MzI6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogVGhlIHJldHVybiB2YWx1ZSBvZiBnc3RfcGFkX3NldF9jYXBzKCkgaXMgbm90IHJlbGV2YW50IGFueW1vcmUKLQkgIENhcHMgY2FuIGZhaWwgdG8gYmUgc2V0IGJlY2F1c2UgdGhlIHBhZCBpcyBub3QgbGlua2VkIHlldCBmb3IgZXhhbXBsZS4KLQotMjAxMy0wNS0xNSAxNjozOTozNiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQWRkIGVycm9yIGlmIGZpbGUgaGFzIHBsYXlyZWFkeSBkcm0KLQotMjAxMy0wNS0xOCAxNTowNjo0OSAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogU2VuZCBhIHJlY29uZmlndXJlIGV2ZW50IHVwc3RyZWFtIGlmIHNpbmtwYWQgY2FwcyBhcmUgbm90IHVzYWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDIzNwotCi0yMDEzLTA1LTIxIDEyOjAyOjUxICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGtlZXAgYSByZWZlcmVuY2UgdG8gYWxsIHF1ZXVlZCBidWZmZXJzCi0JICBXaXRob3V0IHRoaXMsIGEgcXVldWVkIGJ1ZmZlciBtYXkgYmUgcmVxdWlyZWQsIGZpbGxlZCBhbmQgcXVldWVkIGJlZm9yZSBpdAotCSAgaXMgZGVxdWV1ZWQuCi0JICBDYWxsaW5nIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlcigpIGVuc3VyZXMgdGhhdCB0aGUgYnVmZmVyIGlzIHNldCB1cAotCSAgY29ycmVjdGx5IGFuZCBnc3RfYnVmZmVyX3VucmVmKCkgY2FsbHMgYnVmZmVyX3JlbGVhc2UoKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA3ODEKLQotMjAxMy0wNS0yMSAxMzozMzo1OSArMDIwMCAgQWxleGFuZGVyIFNjaHJhYiA8YWxleGFzQGF4aXMuY29tPgotCi0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSAgbXVsYXdkZWM6IEhhbmRsZSBOVUxMIGJ1ZmZlcnMgaW4gaGFuZGxlX2ZyYW1lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4ODk0Ci0KLTIwMTMtMDUtMjAgMjE6NDQ6MTMgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5L2RlcGF5OiBBZGQgZnJhbWVzaXplIGNhcHMgZm9yIHVzZSBpbiBTRFAKLQkgIFRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGFkaGVyZXMgdG8gUkZDNjA2NCBhbmQgaXQgaXMgbWVhbnQgdG8gYmUgcGFyc2VkCi0JICBhbmQgaW5jbHVkZWQgaW4gdGhlIFNEUCBzZW50IGJ5IGdzdC1ydHNwLXNlcnZlciB0byBpdHMgY2xpZW50cy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA3NDgKLQotMjAxMy0wNS0yMCAyMTozNDoxMyArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSAgcnRwanBlZ3BheTogQWRkIG9wdGlvbmFsIGZyYW1lcmF0ZSBjYXBzIGZvciB1c2UgaW4gU0RQCi0JICBUaGUgZm9ybWF0IG9mIHRoZSB2YWx1ZSBhZGhlcmVzIHRvIFJGQzQ1NjYgYW5kIGl0IGlzIG1lYW50IHRvIGJlIHBhcnNlZAotCSAgYW5kIGluY2x1ZGVkIGluIHRoZSBTRFAgc2VudCBieSBnc3QtcnRzcC1zZXJ2ZXIgdG8gaXRzIGNsaWVudHMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwNzQ4Ci0KLTIwMTMtMDUtMjAgMTk6NTk6MTMgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IFdoZW4gYWxsIHNpbmtwYWRzIGFyZSBlb3MsIHVwZGF0ZSBvdXRwdXQgc2VnbWVudCBzdG9wIGFuZCBmb3J3YXJkIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5NzkzCi0KLTIwMTMtMDUtMjAgMTk6NTE6MDcgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IERvbid0IHJlc2V0IHRoZSBvdXRwdXQgc2VnbWVudCBvbiBmbHVzaCBzdG9wCi0JICBPbmx5IGluaXQgaXQgd2hlbiBnZXR0aW5nIGZyb20gUkVBRFkgdG8gUEFVU0VELCBhbmQgY2hhbmdlIGl0IG9uIHNlZWsgZXZlbnRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTc5MwotCi0yMDEzLTA1LTE3IDEwOjE2OjQ4ICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDI6IERvbid0IHN0b3Agc3RyZWFtaW5nIHdoZW4gc2V0X2NhcHMgaXMgY2FsbGVkIHdpdGggdW5jaGFuZ2VkIGNhcHMKLQkgIFRoaXMgY2FuIGhhcHBlbiBpZiBvdGhlciBwYXJ0cyBvZiB0aGUgcGlwZWxpbmUgYXJlIHJlY29uZmlndXJlZC4KLQkgIFN0b3Agc3RyZWFtaW5nIGV2ZW4gZm9yIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUgY2FuIGJlIHF1aXRlIHZpc2libGUsIHNvIGl0Ci0JICBzaG91bGQgYmUgYXZvaWRlZCBpZiBwb3NzaWJsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA1MDMKLQotMjAxMy0wNS0xOCAxNTozOTozNiAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgdGVzdHM6IFJlLWVuYWJsZSB2aWRlb21peGVyIHRlc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQyMzcKLQotMjAxMy0wNS0xOCAxNDozNjozOSAtMDQwMCAgVGhpYmF1bHQgU2F1bmllciA8dGhpYmF1bHQuc2F1bmllckBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaDoKLQkgIHZpZGVvbWl4ZXI6IFNlbmQgY2FwcyBldmVudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkCi0JICBUaGlzIHdheSB3ZSBhdm9pZCByYWNlcyBpbiBjYXBzIG5lZ290aWF0aW9uIGFuZCB3ZSBtYWtlIHN1cmUKLQkgIHRoYXQgdGhlIGNhcHMgYXJlIHNlbnQgYWZ0ZXIgc3RyZWFtLXN0YXJ0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDIzNwotCi0yMDEzLTA1LTA1IDIwOjI1OjIwICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBEbyBub3Qgc2VuZCBmbHVzaF9zdG9wIHdoZW4gcmVjZWl2aW5nIGEgc2VlawotCSAgVGhlcmUgaXMgbm8gcmVhc29uIHRvIHNlbmQgYSBmbHVzaC1zdG9wIHdoZW4gcmVjZWl2aW5nIGEgc2VlayBldmVudC4KLQkgIEluIHRoZSBjYXNlIG9mIGEgZmx1c2hpbmcgc2Vlaywgd2UgY291bGQgZXZlbnR1YWxseSB3YW50IHRvLCBidXQgaW4KLQkgIHRoZSBjb2RlIHBhdGggd2VyZSB3ZSBjaGVjayBpZiB0aGUgc2VlayBpcyAiZmx1c2hpbmciLCB3ZSBoYXZlIHRoZQotCSAgZm9sbG93aW5nIGNvbW1lbnQgdGhhdCBtYWtlcyBzZW5zZToKLQkgICJ3ZSBjYW4ndCBzZW5kIEZMVVNIX1NUT1AgaGVyZSBzaW5jZSB1cHN0cmVhbSBjb3VsZCBzdGFydCBwdXNoaW5nIGRhdGEKLQkgIGFmdGVyIHdlIHVubG9jayBtaXgtPmNvbGxlY3QuCi0JICBXZSBzZXQgZmx1c2hfc3RvcF9wZW5kaW5nIHRvIFRSVUUgaW5zdGVhZCBhbmQgc2VuZCBGTFVTSF9TVE9QIGFmdGVyCi0JICBmb3J3YXJkaW5nIHRoZSBzZWVrIHVwc3RyZWFtIG9yIGZyb20gZ3N0X3ZpZGVvbWl4ZXJfY29sbGVjdGVkLAotCSAgd2hpY2hldmVyIGhhcHBlbnMgZmlyc3QuIgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDIzNwotCi0yMDEzLTA1LTA1IDIwOjI0OjQ5ICswMTAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogUHJvdGVjdCBmbHVzaF9zdG9wX3BlbmRpbmcgd2l0aCB0aGUgY29sbGVjdHBhZCBzdHJlYW0gbG9jawotCSAgQW5kIG1ha2Ugc3VyZSB0byBleHBlY3QgYSBmbHVzaC1zdG9wIGFmdGVyIGEgZmx1c2gtc3RhcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQyMzcKLQotMjAxMy0wNS0xNyAxMjozNzo1OSArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSAgcnRwbXA0YXBheTogY2xlYXIgY29uZmlnIGJ1ZmZlciBiZWZvcmUgdXNpbmcgaXQKLQkgIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgcGFydHMgb2YgdGhlIG1lbW9yeSBhcmUgb25seSBtb2RpZmllZCB3aXRoICJ8PSIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDA1MTQKLQotMjAxMy0wNS0xNCAxNzozMDowNyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IERvIG5vdCBleHBlY3QgRU9TIGFmdGVyIGEgc2VnbWVudCBldmVudCBpZiB1cHN0cmVhbSBpcyBtc3MKLQkgIEluIGNhc2UgcXRkZW11eCBpcyBoYW5kbGluZyBhIG1zcyBzdHJlYW0sIGRvIG5vdCBtYXJrIHRoZSBzdHJlYW0gdG8gd2FpdAotCSAgZm9yIEVPUyBhZnRlciBhIHNlZ21lbnQuIEV2ZW4gaWYgaXQgc2VlbXMgdG8gYmUgdGhlIGxhc3Qgb25lIGFjY29yZGluZyB0bwotCSAgdGhlIGN1cnJlbnQgc3RyZWFtcyBpbmZvcm1hdGlvbi4KLQkgIE1TUyBoYW5kbGluZyBpcyBkaWZmZXJlbnQgaGVyZSBiZWNhdXNlIHRoZXJlIGlzIGFub3RoZXIgZGVtdXhlciBkcml2aW5nCi0JICB0aGUgcGlwZWxpbmUKLQotMjAxMy0wNS0xNCAxNjozMjo1MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG9ubHkgc2V0IGNoYW5uZWxzIGFuZCByYXRlIGlmIHF0ZGVtdXgga25vd3MgaXQKLQkgIFNldHRpbmcgYm90aCBvZiB0aG9zZSB0byAwIGlzIHBvaW50bGVzcyBhbmQgbWVhbnMgdGhhdCBxdGRlbXV4Ci0JICBkb2Vzbid0IGtub3cgdGhlIHJlYWwgdmFsdWUuIEF2b2lkIHNldHRpbmcgaXQgaW4gdGhpcyBjYXNlLgotCi0yMDEzLTA1LTE0IDE1OjIzOjA4ICswMjAwICBBcm5hdWQgVnJhYyA8YXZyYWNAZnJlZWJveC5mcj4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzZXQgYWxhYyBjYXBzIHVzaW5nIGluZm8gZnJvbSBjb2RlYyBidWZmZXIKLQkgIFRoZSBzYW1wbGVyYXRlIGZpZWxkIGluIHRoZSBTVFNEIGF0b20gaXMgbm90IHJpZ2h0IGZvciBzb21lIEFMQUMgZmlsZXMKLQkgICh1c3VhbGx5IHdoZW4gYXVkaW8gaXMgOTZrSHovMjRiaXRzKSwgc28gdGhlIGF1ZGlvIGNhcHMgbXVzdCBiZQotCSAgZXh0cmFjdGVkIGZyb20gdGhlIGNvZGVjIGRhdGEuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMzgyCi0KLTIwMTMtMDUtMTUgMTE6MTM6MTIgKzAyMDAgIEFybmF1ZCBWcmFjIDxhdnJhY0BmcmVlYm94LmZyPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZG8gbm90IHB1c2ggZGlzY29udCBidWZmZXJzIGlmIHRoZXkgYXJlbid0IGRpc2NvbnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODIxMTAKLQotMjAxMy0wNS0xNSAxMDo1MTozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA1ZWRjZDg1IHRvIDA5OGMwZDcKLQotMjAxMy0wNS0xNCAxMDoyODoxMCAtMDQwMCAgSm9zaHVhIE0uIERvZSA8b3NzQG52bC5hcm15Lm1pbD4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICB2aWRlb2Nyb3A6IEFkZCBzdXBwb3J0IGZvciBHUkFZMTZfTEUvR1JBWTE2X0JFCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMzMxCi0KLTIwMTMtMDUtMTQgMTc6Mjk6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgcmd2b2x1bWU6IFNlbmQgYWxsIGV2ZW50cyB0aHJvdWdoIHRoZSBwcm94eXBhZHMgaW5zdGVhZCBvZiBqdXN0IHNlbmRpbmcgdG8gdGhlIHRhcmdldAotCSAgT3RoZXJ3aXNlIHRoZSBzdGlja3kgZXZlbnRzIGFyZSBtaXNzaW5nIG9uIHRoZSBwcm94eXBhZHMuCi0KLTIwMTMtMDUtMTQgMTc6Mjk6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOgotCSAgcmd2b2x1bWU6IEZpeCBldmVudCBoYW5kbGluZyBpbiB0aGUgdW5pdCB0ZXN0Ci0KLTIwMTMtMDUtMTQgMTY6MzQ6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2xpbWl0ZXIuYzoKLQkgIHJnbGltaXRlcjogRml4IGV2ZW50IGhhbmRsaW5nIGluIHVuaXQgdGVzdHMKLQotMjAxMy0wNS0xNCAxNjozMTo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzoKLQkgIHJnYW5hbHlzaXM6IEZpeCBldmVudCBoYW5kbGluZyBpbiB1bml0IHRlc3QKLQotMjAxMy0wNS0xNCAxNjowODo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICBxdG11eDogRml4IGV2ZW50IGhhbmRsaW5nIGluIHVuaXQgdGVzdAotCi0yMDEzLTA1LTE0IDE2OjAwOjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JICBtdWx0aWZpbGU6IEZpeCBldmVudCBoYW5kbGluZyBpbiB1bml0IHRlc3QKLQotMjAxMy0wNS0xNCAxMzo1ODowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZGVjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWxhd2VuYy5jOgotCSAgbXVsYXc6IEZpeCBldmVudCBoYW5kbGluZyBpbiB1bml0IHRlc3QKLQotMjAxMy0wNS0xNCAxMzo1MjoxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FwYXJzZTogTWFrZSBzdXJlIHRvIHNlbmQgYSBzZWdtZW50IGV2ZW50IGJlZm9yZSBkYXRhZmxvdwotCi0yMDEzLTA1LTE0IDEwOjUyOjE5ICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogb25seSBhZGQgaW50ZXJsYWNlLW1vZGUgdG8gdGhlIGNhcHMgZm9yIHJhdyBmb3JtYXRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMjgwCi0KLTIwMTMtMDUtMTQgMTI6MDM6MDMgKzAyMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBjb3B5IGFuZCBzZXQgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjb250ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMjgyCi0KLTIwMTMtMDUtMTQgMTA6MjU6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxlYXZlOiBGaXggZXZlbnQgaGFuZGxpbmcgaW4gdW5pdCB0ZXN0Ci0KLTIwMTMtMDUtMTQgMDk6NDU6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBJbXByb3ZlIGhhbmRsaW5nIG9mIG1pbi9tYXggYnVmZmVyIG51bWJlcnMgb2YgdGhlIGJ1ZmZlciBwb29sCi0KLTIwMTMtMDUtMTQgMDM6NDI6NTkgKzAyMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHNldCBjYXBzIGZvciBidWZmZXIgcG9vbCBjb25maWcKLQotMjAxMy0wNS0xMyAxMzozMDozOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiBMZXQgdGhlIGJhc2UgY2xhc3MgZG8gZ2V0X3RpbWVzCi0JICBUaGlzIHdpbGwgbWFrZSBzeW5jPVRSVUUgd29yaywgdGhlIGRlZmF1bHQgaXMgc3RpbGwgc3luYz1GQUxTRQotCi0yMDEzLTA1LTExIDIzOjA4OjIzIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogU2VuZCBzdHJlYW0tc3RhcnQgYmVmb3JlIGNhcHMgZXZlbnQKLQotMjAxMy0wNS0xMSAyMzoyNDozNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBtdXguYzoKLQkgIHJ0cG11eDogU2VuZCBzdHJlYW0tc3RhcnQgYmVmb3JlIGNhcHMKLQotMjAxMy0wNS0xMSAyMzoyODoxMiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyLXRlc3Q6IFNlbmQgc3RyZWFtLXN0YXJ0IGJlZm9yZSBjYXBzIGZvbGxvd2VkIGJ5IHNlZ21lbnQKLQotMjAxMy0wNS0xMSAyMzozNDozNiAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgcnRwYmluLXRlc3Q6IFNlbmQgbWlzc2luZyBzdHJlYW0tc3RhcnQgYW5kIHNlZ21lbnQgZXZlbnRzCi0KLTIwMTMtMDUtMTMgMTU6MzY6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkgIHRlc3RzOiBGaXggc29tZSBtb3JlIGV2ZW50IGhhbmRsaW5nIGluIHRlc3RzCi0KLTIwMTMtMDUtMTMgMTU6MTk6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOgotCSAgaWN5ZGVtdXg6IEZpeCBldmVudCBoYW5kbGluZyBpbiB1bml0IHRlc3QKLQotMjAxMy0wNS0xMyAxNToxOToyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSAgaWN5ZGVtdXg6IEZpeCBzdGlja3kgZXZlbnQgaGFuZGxpbmcKLQotMjAxMy0wNS0xMyAxNTowNjowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IFB1c2ggc3RpY2t5IGV2ZW50cyBpbiB0aGUgcmlnaHQgb3JkZXIKLQotMjAxMy0wNS0xMyAxNDo1NToxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOgotCSAgZGVpbnRlcmxlYXZlOiBGaXggZXZlbnQgaGFuZGxpbmcgaW4gdGVzdAotCi0yMDEzLTA1LTEzIDE0OjA3OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JICBkZWludGVybGVhdmU6IEZpeCBzdGlja3kgZXZlbnQgaGFuZGxpbmcKLQotMjAxMy0wNS0xMyAxMzo1NTo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgZGVpbnRlcmxlYXZlOiBDb2RlIHN0eWxlIGZpeGVzCi0KLTIwMTMtMDUtMTMgMTA6NDM6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBGaXJzdCBsZXQgYmFzZWNsYXNzIGhhbmRsZSBldmVudHMsIHRoZW4gcHV0IHRoZW0gaW50byB0aGUgc3RyZWFtCi0JICBGaXhlcyBoYW5kbGluZyBvZiBzdGlja3kgZXZlbnRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMDIxMwotCi0yMDEzLTA1LTA5IDIyOjA1OjI0IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2hhcGV3aXBlLmM6Ci0JICBzaGFwZXdpcGUtdGVzdDogU2VuZCBpbml0YWwgZXZlbnRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMDMzCi0KLTIwMTMtMDUtMDkgMTg6MzI6MjMgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtLXRlc3Q6IFNlbmQgaW5pdGFsIGV2ZW50cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMDAzMwotCi0yMDEzLTA1LTA5IDE4OjI1OjE3IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JICB2aWRlb2ZpbHRlci10ZXN0OiBTZW5kIGluaXRhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0wOSAxODoyMzozMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrcGFyc2UuYzoKLQkgIHdhdnBhY2twYXJzZS10ZXN0OiBTZW5kIGluaXRhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0wOSAxODoyMTo1NCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYzoKLQkgIHk0bWVuYy10ZXN0OiBTZW5kIGluaXRhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0xMCAxNDowMDozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgIG11bHRpcGFydGRlbXV4OiBmaXggZXhhbXBsZSBwaXBlbGluZQotCSAgTmVlZCBqcGVncGFyc2UuCi0KLTIwMTMtMDUtMTAgMTM6MzQ6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hbHBoYWNvbG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ludmVydC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmlzdWJ0aXRsZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc3NldHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2R0bWYuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2VxdWFsaXplci5jOgotCSAgdGVzdHM6IEZpeCBzb21lIG1vcmUgdW5pdCB0ZXN0cwotCi0yMDEzLTA1LTEwIDEzOjEwOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmM6Ci0JICB0ZXN0czogRml4IHBhcnNlciB0ZXN0cwotCi0yMDEzLTA1LTA5IDIyOjIwOjI4IC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIHNoYXBld2lwZTogQ2FuJ3QgbWFwIHR3aWNlIHRoZSBzYW1lIGJ1ZmZlciBmb3Igd3JpdGluZwotCSAgSSB0b29rIHRoZSBvcHBvcnR1bml0eSB0byBzaW1wbGlmeSB0aGF0IGNvZGUgYSBiaXQuIFdlIG5vdyB1c2UKLQkgIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIG1ha2UgdGhlIGJ1ZmZlciB3cml0YWJsZSBhbmQgbWFwIHR3aWNlIHRoZQotCSAgc2FtZSBidWZmZXIsIHdpdGggZmlyc3QgbWFwIGJlaW5nIHJlYWQvd3JpdGUsIGFuZCBzZWNvbmQgcmVhZCBvbmx5LiBUaGlzCi0JICBnZXQgcmlkIG9mIHRoZSBjcml0aWNhbDoKLQkgIEdTdHJlYW1lci1DUklUSUNBTCAqKjogZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZTogYXNzZXJ0aW9uIGBJU19NVVRBQkxFCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMDQ0Ci0KLTIwMTMtMDUtMDkgMjI6MTU6NTQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgc2hhcGV3aXBlOiBFbnN1cmUgY2FwcyBhcmUgd3JpdGFibGUKLQkgIFRoZSBleGlzdCBvbmUgY2FzZSB3aGVyZSB0aGF0IHdlIGVuZHVwIHdpdGggb3JpZ2luYWwgY2FwcyBpbiByZXQsIGluIHdoaWNoCi0JICBjYXNlIHdlIGFyZSBub3QgZ3VhcmF0aWVkIHRvIGhhdmUgd3JpdGFibGUgY2Fwcy4gU2ltcGx5IGVuc3VyZSB0aGlzIGlzIHRoZQotCSAgY2FwcyBhcmUgd3JpdGFibGUgYmVmb3JlIGVudGVyaW5nIHRoZSBsb29wLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwMDA0NAotCi0yMDEzLTA1LTA5IDIyOjEzOjUxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIHNoYXBld2lwZTogRml4IHNhbXBsZSBwaXBlbGluZSBpbiBkb2N1bWVudGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAwMDQ0Ci0KLTIwMTMtMDUtMDkgMTg6MDU6MDIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2VuYy5jOgotCSAganBlZ2VuYy10ZXN0OiBTZW5kIGluaXRhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0wOSAxNzo0OTowMyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDhlbmMuYzoKLQkgIHZwOGVuYy10ZXN0OiBTZW5kIGluaXRhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0wOSAxNzoyMDoxOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDhkZWMuYzoKLQkgIHZwOGRlYy10ZXN0OiBTZW5kIGluaXRhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0wOSAxNzoxOTo1MyAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrZGVjLmM6Ci0JICB3YXZwYWNrZGVjLXRlc3Q6IFNlbmQgaW5pdGlhbCBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDAwMzMKLQotMjAxMy0wNS0wOSAxNjoyNjoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICBSZXZlcnQgInZpZGVvbWl4ZXIyOiBUYWtlIGludG8gYWNjb3VudCBuZXcgc2VnbWVudHMiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDg0YWU2NzBhYjQwYjI1OGExMGUxZTIxNDcxZTZkYzlkNzg2YmYwODYuCi0JICBBY3R1YWxseSB0aGlzIGlzIG5vdCBob3cgaXQgaXMgc3VwcG9zZWQgdG8gd29yay4gdmlkZW9taXhlcgotCSAgY3JlYXRlcyBhIFswLC0xXSBzZWdtZW50IGFuZCB0aGVuIHB1dHMgZnJhbWVzIG9mIHRoZSBkaWZmZXJlbnQKLQkgIHN0cmVhbXMgdGhlcmUgYmFzZWQgb24gdGhlaXIgcnVubmluZyB0aW1lcyBpbiB0aGVpciBvd24gc2VnbWVudHMuCi0KLTIwMTMtMDUtMDYgMjM6NDM6MDMgKzAyMDAgIE1hdGhpZXUgRHVwb25jaGVsbGUgPG1hdGhpZXUuZHVwb25jaGVsbGVAZXBpdGVjaC5ldT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXIyOiBUYWtlIGludG8gYWNjb3VudCBuZXcgc2VnbWVudHMKLQkgIEFsc28gZm9yd2FyZCB0aGUgZXZlbnQgZG93bnN0cmVhbSBvbiB0aGUgbmV4dCBvcHBvcnR1bml0eS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTk3OTMKLQotMjAxMy0wNS0wOSAwOTowNzozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgUmV2ZXJ0ICJnc3RydHNwc3JjOiBzZXQgYnVmZmVyLXNpemUgZm9yIG11bHRpY2FzdCBidWZmZXJzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAyNDgxZTk1ZDAzOGI0MjI5N2EwMTZmMWQyZGMxYWYyNmQyMTc1YjQyLgotCSAgVGhpcyBpcyBhbHJlYWR5IGRvbmUgZml2ZSBsaW5lcyBhYm92ZSwgaXQgd2FzIGFkZGVkIGEgeWVhcgotCSAgYWdvIGluIGNvbW1pdCA1NjFiMTMxZS4KLQotMjAxMy0wNS0wOCAxOTo1NDoxOSAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JICB2aWRlb2ZpbHRlcjogVW5pdCB0ZXN0IHNlbmQgU0VHTUVOVCBiZWZvcmUgQ0FQUwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTk2NgotCi0yMDEzLTA1LTA4IDE5OjIyOjMxIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JICBhdmltdXg6IFVuaXQgdGVzdCBzZW5kcyBTRUdNRU5UIGJlZm9yZSBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5OTY2Ci0KLTIwMTMtMDUtMDggMTk6MDg6MjQgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jOgotCSAgYXVkaW93c2luY2JhbmQ6IFRlc3Qgc2hvdWxkIHNlbmQgc2VnbWVudCBhZnRlciBDQVBTCi0JICBUaGlzIG1ha2VzIHRoZSB1bml0IHRlc3QgcGFzcyBhZ2Fpbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTk5NjYKLQotMjAxMy0wNS0wOCAxOTowMDoyOCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgYXVkaW93c2luY2xpbWl0OiBUZXN0IHNob3VsZCBzZW5kIHNlZ21lbnQgYWZ0ZXIgQ0FQUwotCSAgVGhpcyBtYWtlcyB0aGUgdW5pdCB0ZXN0IHBhc3MgYWdhaW4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5OTY2Ci0KLTIwMTMtMDUtMDggMTg6NDQ6MzIgLTA0MDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkgIGF1ZGlvd3NpbmNsaW1pdDogRnJlcXVlbmNlIHByb3BlcnR5IHJlbmFtZWQgY3V0b2ZmCi0JICBVcGRhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgotCSAgU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5OTY0Ci0KLTIwMTMtMDUtMDggMTU6MjU6NTggLTAzMDAgIEFoYSBVbnN3b3J0aCA8YWhhLnVuc3dvcnRoQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgZ3N0cnRzcHNyYzogc2V0IGJ1ZmZlci1zaXplIGZvciBtdWx0aWNhc3QgYnVmZmVycwotCSAgRm9yIHJlY2VpdmluZyB2aWRlbyBkYXRhIHZpYSBSVFNQIHdoZW4gdGhlIHZpZGVvIGlzIHNlbnQgdmlhCi0JICBtdWx0aWNhc3QgdGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgdGhlIHVkcHNyYyBidWZmZXItc2l6ZS4KLQkgIE9uIHdpbmRvd3MgdGhlIG5hdGl2ZSBuZXR3b3JrIGJ1ZmZlciBpcyBub3QgbGFyZ2UgYW5kIHdpdGggdmlkZW8KLQkgIGktZnJhbWVzIGJlaW5nIGh1Z2UgdGhlIGJ1ZmZlciBpcyB0byBzbWFsbCBhbmQgeW91IGdldCBpLWZyYW1lIGNvcnJ1cHRpb24sCi0JICBpdCBsb29rcyB0ZXJyaWJsZSwgYW5kIHRoZXJlIGlzIG5vIChlYXN5KSB3YXkgdG8gc2V0IHRoZSB1ZHBzcmMgYnVmZmVyLXNpemUuCi0JICBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD01MjI2NAotCi0yMDEzLTA1LTA4IDE2OjAyOjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXIyOiBTZW5kIHN0cmVhbS1zdGFydCBiZWZvcmUgY2FwcyBldmVudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTg5NQotCi0yMDEzLTA1LTA3IDE5OjE1OjQ5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGZpeCBjb21waWxlciB3YXJuaW5nIG9uIHR5cGUgY2hlY2sKLQotMjAxMy0wNC0xOCAwNzo0OTo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHB1c2ggbmV3IGNhcHMgZXZlbnRzIHdoZW4gY2FwcyBjaGFuZ2UKLQkgIFdoZW5ldmVyIHRoZSBkZW11eGVyIGhhcyBhIG5ldyBjYXBzIG9uIGEgc3RyZWFtLCBpdCBzaG91bGQgc2V0IHRoZQotCSAgbmV3X2NhcHMgdmFyaWFibGUgdG8gdHJ1ZSBhbmQgYSBuZXcgY2FwcyBldmVudCB3aWxsIGJlIHB1c2hlZCBiZWZvcmUKLQkgIHRoZSBuZXh0IGJ1ZmZlcgotCi0yMDEzLTA0LTE3IDE2OjU0OjIyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG8gbm90IHB1c2ggZGlzY29udCBidWZmZXJzIGlmIHRoZXkgYXJlbid0IGRpc2NvbnQKLQkgIHF0ZGVtdXggdGFrZXMgaXRzIGJ1ZmZlcnMgZnJvbSBhIEdzdEFkYXB0ZXIuIFRob3NlIGJ1ZmZlcnMgYXJlIGNyZWF0ZWQKLQkgIGZyb20gdGhlIGxhcmdlciBidWZmZXIgdGhhdCBpdCBvYnRhaW5lZCBmcm9tIHVwc3RyZWFtIGFuZCB0aGV5IGNhcnJ5Ci0JICB0aGUgc2FtZSBmbGFncywgaW5jbHVkaW5nIERJU0NPTlQgaWYgaXQgaXMgc2V0LiBJbiB0aGVzZSBjYXNlcywgYWxsCi0JICBidWZmZXJzIHRoYXQgcXRkZW11eCBpcyBnb2luZyB0byBwdXNoIHdvdWxkIGJlIG1hcmtlZCBhcyBESVNDT05ULgotCSAgVGhpcyBzY2VuYXJpbyBjYW4gbWFrZSBwYXJzZXJzL2RlY29kZXJzIGZsdXNoIG9uIGV2ZXJ5IGJ1ZmZlciBsZWFkaW5nCi0JICB0byBubyBkZWNvZGluZyBhdCBhbGwgaGFwZW5uaW5nLiBUaGlzIHBhdGNoIHByZXZlbnRzIHRoaXMgYnkgdW5zZXR0aW5nCi0JICB0aGUgZmxhZyBpZiBpdCBzaG91bGRuJ3QgYmUgc2V0LgotCi0yMDEzLTA0LTEyIDA5OjA4OjE2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBzb21lIGNvZGUgY2xlYW51cCBmb3IgbXNzIGhhbmRsaW5nIGNvZGUKLQkgICogRXhwbGljaXRseSBpbml0IHZhcmlhYmxlcyBmb3IgZnJhZ21lbnRlZCBmb3JtYXRzIGF0IGluaXQKLQkgICogRG8gbm90IHVzZSBHc3RDbG9ja1RpbWUgdHlwZSBpZiB0aGUgdmFyaWFibGUgaXNuJ3QgYSB0aW1lc3RhbXAKLQkgICogRml4IGEgc3R5bGUvcmVhZGFiaWxpdHkgaXNzdWUgYXQgYW4gaWYgYmxvY2sKLQkgICogR3JvdXAgMiBtc3MgbW9kZSBjb25kaXRpb25hbCBibG9ja3MgdG9nZXRoZXIgdG8gaW1wcm92ZSByZWFkYWJpbGl0eQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2lzb21wNC9xdGRlbXV4LmMKLQotMjAxMy0wNC0xMiAxMDoyMToxMSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGF2b2lkIHN0b3Jpbmcgbm9uLXRpbWUgbmV3c2VnbWVudHMgdG8gcHVzaCBsYXRlcgotCSAgVGhpcyBjYW4gY29uZnVzZSBkb3duc3RyZWFtIHdoZW4gdGhleSBnZXQgYSBieXRlIHNlZ21lbnQgYWZ0ZXIgcmVjZWl2aW5nCi0JICB0aGUgbmF0dXJhbCB0aW1lIHNlZ21lbnQgZnJvbSBxdGRlbXV4IHRoYXQgaXQgc2VuZHMgd2hlbiBzdGFydGluZyB0bwotCSAgcHVzaCBidWZmZXJzLiBUaGlzIGlzIHNwZWNpYWxseSB0aGUgY2FzZSB3aXRoIHBhcnNlcnMgdGhhdCB0cnkgdG8KLQkgIGNvbnZlcnQgdGhlIHBvc2l0aW9uIGZyb20gYnl0ZSB0byB0aW1lIGZvcm1hdCBhbmQgbWlnaHQgbWlzcyB0aGUKLQkgIGNvcnJlY3QgcG9zaXRpb24gZm9yIHBsYXliYWNrIHRvIHN0YXJ0LgotCi0yMDEzLTA0LTEwIDE4OjAyOjI4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYXZvaWQgc2V0dGluZyBmaWVsZHMgdG8gbm9uLXdyaXRhYmxlIGNhcHMKLQotMjAxMy0wMy0xMCAwNDoxNTowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkb24ndCBzZW5kIHNvIG1hbnkgc2VnbWVudCBldmVudHMKLQkgIE9ubHkgc2VuZCBvbmUgc2VnbWVudCBldmVudCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0sIG5vdAotCSAgYWZ0ZXIgZWFjaCBtb292IGFuZCBtb29mIGF0b20uCi0JICBDb25mbGljdHM6Ci0JICBnc3QvaXNvbXA0L3F0ZGVtdXguYwotCi0yMDEzLTAzLTA4IDE2OjAyOjI2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHBsYWNlIGluY29tbWluZyB0aW1lc3RhbXBzIG9uIG91dHB1dAotCSAgUGxhY2UgdGhlIGluY29tbWluZyB0aW1lc3RhbXAgKGlmIGFueSkgZGlyZWN0bHkgb250byB0aGUgb3V0Z29pbmcgYnVmZmVycwotCSAgYW5kIGludGVycG9sbGF0ZSBvdGhlciB0aW1lc3RhbXBzLgotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2lzb21wNC9xdGRlbXV4LmMKLQotMjAxMy0wNS0wNyAxMDoxNjoxOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGltcHJvdmUgcmVzZXQgb2YgaW50ZXJuYWwgc3RhdHVzCi0JICBSZXNldCBkaWZmZXJlbnQgdmFyaWFibGVzIG9uIHN0YXRlIGNoYW5nZXMgdG8gcmVhZHkgYW5kIHdoZW4KLQkgIGhhbmRsaW5nIGEgZmx1c2gtc3RvcC4gRm9yIGhhbmRsaW5nIGZsdXNoIHN0b3BzIHdlIHNob3VsZCBjaGVjawotCSAgaWYgdGhlcmUgaXMgYW4gdXBzdHJlYW0gYWRhcHRpdmUgZGVtdXhlciBkcml2aW5nIHRoZSBwaXBlbGluZSBhcyB0aGlzCi0JICBtZWFucyB0aGF0IHF0ZGVtdXggd2lsbCBnZXQgYSBuZXcgbW9vdiBhdG9tLiBGb3IgJ3N0YW5kYXJkJyBpc29tZWRpYQotCSAgc3RyZWFtcyB0aGlzIGlzbid0IHRydWUgYW5kIHF0ZGVtdXggc2hvdWxkIGtlZXAgdGhlIHByZXZpb3VzIG1vb3YKLQkgIGluZm9ybWF0aW9uIGFyb3VuZC4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9pc29tcDQvcXRkZW11eC5jCi0KLTIwMTMtMDItMDggMDA6Mjk6MjAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwcmVwYXJlIHF0ZGVtdXggdG8gYWNjZXB0IG11bHRpcGxlIGRhc2ggbW9vdnMgaW4gYSByb3cKLQkgIFdoZW5ldmVyIGRhc2hkZW11eCBzd2l0Y2hlcyBiaXRyYXRlcyBpdCBzZW5kcyBhIG5ldyBtb292IHdpdGggdGhlCi0JICBuZXcgc3RyZWFtIGNvbmZpZ3VyYXRpb24uIHF0ZGVtdXggc2hvdWxkIG5vdyBoYW5kbGUgdGhpcyBieSBzcGxpdHRpbmcKLQkgIHRoZSBleHBvc2luZyBhbmQgY29uZmlndXJhdGlvbiBvZiBzdHJlYW1zIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zLiBXaGVuCi0JICB0aGUgc3RyZWFtIGlzIG5ldyBpdCBpcyBjb25maWd1cmVkIGFuZCBleHBvc2VkLCB3aGVuIGl0IGlzIGEgbmV3IGJpdHJhdGUKLQkgIG9mIGFuIGV4aXN0aW5nIHN0cmVhbSBpdCBpcyBvbmx5IHJlY29uZmlndXJlZC4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9pc29tcDQvcXRkZW11eC5jCi0KLTIwMTMtMDItMDcgMTQ6MTI6NTMgLTAyMDAgIEFuZHJlIE1vcmVpcmEgTWFnYWxoYWVzIChhbmRydW5rbykgPGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogTW92ZSBGTFVTSF9TVE9QL1BBVVNFRF9UT19SRUFEWSBoYW5kbGluZyB0byBhIHJlc2V0IG1ldGhvZC4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9pc29tcDQvcXRkZW11eC5jCi0KLTIwMTMtMDEtMjMgMTA6NTU6MzMgLTA1MDAgIExvdWlzLUZyYW5jaXMgUmF0dMOpLUJvdWxpYW5uZSA8bG91aXMtZnJhbmNpcy5yYXR0ZS1ib3VsaWFubmVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogUmVtb3ZlIG9sZCBwYWRzIHdoZW4gZXhwb3Npbmcgc3RyZWFtcyBhbmQgb3RoZXIgZ2VuZXJhbCBmaXhlcy4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9pc29tcDQvcXRkZW11eC5jCi0KLTIwMTMtMDQtMTYgMTA6NDE6NDMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IGhhbmRsZSBtc3Mgc3RyZWFtcwotCSAgc21vb3Roc3RyZWFtaW5nIHN0cmVhbXMgc2hvdWxkIGJlIGhhbmRsZWQgYXMgYSBzcGVjaWFsIGtpbmQgb2YKLQkgIGZyYWdtZW50ZWQgaXNvbWVkaWEuIEluIE1TUyB0aGUgZnJhZ21lbnRzIHdpbGwgbm90IGNvbnRhaW4gYQotCSAgJ21vb3YnIGF0b20gd2l0aCB0aGUgbWVkaWEgZGVzY3JpcHRpb25zLCB0aGlzIGhhcyB0byBiZSBleHRyYWN0ZWQKLQkgIGZyb20gdGhlIGNhcHMuCi0JICBBZGRpdGlvbmFsbHksIHRoZXJlIHNob3VsZCBiZSBhbm90aGVyIGRlbXV4ZXIgdXBzdHJlYW0gdGhhdCBpcyBsaWtlbHkKLQkgIGdvaW5nIHRvIGJlIHRoZSBvbmUgdG8gYW5zd2VyL2FjdCBvbiBxdWVyaWVzIGFuZCBldmVudHMsIHNvIHF0ZGVtdXggaGFzCi0JICB0byBmb3J3YXJkIHRob3NlIHVwc3RyZWFtLgotCi0yMDEzLTA1LTA2IDE2OjU0OjAyICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IHJlcXVlc3QgMCBidWZmZXJzIHdoZW4gc3RvcHBpbmcKLQkgIFdpdGhvdXQgdGhpcyBzdG9wcGluZyB0aGUgcG9vbCBpbiAqX3NldF9jYXBzKCkgaXMgdXNlbGVzcy4KLQkgIFNfRk1UIHdpbGwgc3RpbGwgZmFpbCB3aXRoIEVCVVNZLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTgzNQotCi0yMDEzLTA1LTA3IDE2OjMyOjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogQnkgZGVmYXVsdCBhc3N1bWUgdGhhdCB3ZSdyZSB3b3JraW5nIG9uIG5vbi1wYWNrZXRpemVkIGlucHV0Ci0JICBPbmx5IGRldGVjdGluZyB0aGlzIGluIHNldF9mb3JtYXQoKSBkb2VzIG5vdCB3b3JrIGJlY2F1c2Ugd2UgbWlnaHQKLQkgIG5vdCBnZXQgYW55IGNhcHMgYXQgYWxsLCBlLmcuIGZyb20gZmlsZXNyYy4KLQotMjAxMy0wNS0wNyAxNjozMDo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IEltcGxlbWVudCBwYXJzaW5nIGZ1bmN0aW9uYWxpdHkKLQkgIFRoaXMgYWxsb3dzIHRvIHBsdWcgcG5nZGVjIGRpcmVjdGx5IHdpdGhvdXQgYSBwYXJzZXIgaWYgdGhhdAotCSAgaXMgZGVzaXJlZC4KLQkgIFBhcnNpbmcgY29kZSBpcyBiYXNlZCBvbiBwbmdwYXJzZS4KLQotMjAxMy0wNS0wNyAxNTo1NDoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6Ci0JICBjYWNhc2luazogRml4IHN1cHBvcnQgZm9yIFJHQiBmb3JtYXRzIGFuZCBhZGQgc3VwcG9ydCBmb3IgbW9yZSBvZiB0aGVtCi0KLTIwMTMtMDUtMDQgMTM6MTk6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IERvbid0IGNvbnNpZGVyIHRoZSBjb250ZW50IHNpemUgZnJvbSB0aGUgSFRUUCBoZWFkZXJzIGFzIGFic29sdXRlbHkgY29ycmVjdAotCSAgVGhlIEhUVFAgc2VydmVyIGNvdWxkIGdpdmUgd3JvbmcgaW5mb3JtYXRpb24sIGUuZy4gaWYgdGhlIEhUVFAgc3RyZWFtIGlzCi0JICBjaHVuay1lbmNvZGVkIG9yIGNvbXByZXNzZWQsIG9yIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qga25vdyB0aGUgY29tcGxldGUgc2l6ZQotCSAgYXQgdGhlIHRpbWUgd2hlbiB0aGUgZmlsZSBpcyByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KLQkgIEFsc28gc2VlCi0JICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzU0Ci0KLTIwMTItMDgtMjAgMDk6NTI6MzIgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBmaWxsIG91dCB2NGwyX2J1ZmZlci5ieXRlc3VzZWQgZmllbGQgZm9yIHY0bDJzaW5rCi0JICBXaGVuIHF1ZXVpbmcgYSBidWZmZXIgZm9yIGEgc2luaywgYnl0ZXN1c2VkIG11c3QgY29udGFpbiB0aGUgYWN0dWFsCi0JICBhbW91bnQgb2YgZGF0YS4KLQkgIEZvciBhIHNvdXJjZSwgdGhlIGRyaXZlciBtdXN0IG92ZXJ3cml0ZSB0aGlzLCBzbyBpdCBkb2Vzbid0IG1hdHRlcgotCSAgd2hhdCBpcyBzZXQgaGVyZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTk1OTgKLQotMjAxMy0wNS0wMyAyMzo0MzoyNiArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2VicmFzQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkgIHJ0cGdzdHBheTogZml4IGludmFsaWQgbWVtb3J5IGFjY2VzcyBpbiBldmVudCBoYW5kbGVyCi0JICBGaXJzdCBwcm9jZXNzIGV2ZW50IGluIHBheWxvYWRlciwgdGhlbiBoYW5kIGl0IHRvIHRoZQotCSAgYmFzZSBjbGFzcyB3aGljaCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGV2ZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTYzNwotCi0yMDEzLTA1LTA0IDA5OjQ4OjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JICBhYzNwYXJzZSwgZGNhcGFyc2U6IGNoZWNrIGJ1ZmZlciBzaXplIGJlZm9yZSB0cmltbWluZwotCSAgYW5kIHVucmVmIG9sZCBidWZmZXIgYXMgc29vbiBhcyBwb3NzaWJsZS4KLQotMjAxMy0wNS0wMiAxNTowMDoyMiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5oOgotCSAgZGNhcGFyc2U6IGFkZCBzdXBwb3J0IGZvciAiYXVkaW8veC1wcml2YXRlMS1kdHMiCi0KLTIwMTMtMDUtMDIgMTQ6NTY6MDIgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuaDoKLQkgIGFjM3BhcnNlOiBhZGQgc3VwcG9ydCBmb3IgImF1ZGlvL3gtcHJpdmF0ZTEtYWMzIgotCi0yMDEzLTA1LTAzIDEyOjQ2OjM3ICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogYWx3YXlzIGdlbmVyYXRlIHZpZGVvIGluZm8gZnJvbSBjYXBzCi0JICBJbiB0aGUgcGFzdCBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoKSBvbmx5IHZpZGVvL3gtcmF3LiBOb3cgaXQgYWxzbwotCSAgc3VwcG9ydHMgb3RoZXIgdmlkZW8vKiBhbmQgaW1hZ2UvKiBmb3JtYXRzLgotCSAgV2l0aCB0aGlzIHBhdGNoIHRoZSBmb3JtYXQgd29uJ3QgYmUgR1NUX1ZJREVPX0ZPUk1BVF9VTktPV04gYW5kCi0JICBnc3RfdjRsMl9idWZmZXJfcG9vbF9zZXRfY29uZmlnKCkgaGFuZGxlcyBzdHJpZGVzIGNvcnJlY3RseS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTk1NzAKLQotMjAxMy0wNS0wMiAwOTo0MTowMSArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSAgdjRsMjogdHJ5IHRvIGFsbG9jYXRlIG5ldyBidWZmZXJzIHdpdGggVklESU9DX0NSRUFURV9CVUZTIGlmIG5lZWRlZAotCSAgSWYgbWF4X2J1ZmZlcnMgaXMgMCB0aGVuIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYnVmZmVycyAoY3VycmVudGx5IDQpIGlzCi0JICBhbGxvY2F0ZWQuIElmIHRoaXMgaXMgbm90IGVub3VnaCB2NGwyc3JjIHN0YXJ0cyBjb3B5aW5nIGJ1ZmZlcnMuCi0JICBXaXRoIHRoaXMgcGF0Y2ggVklESU9DX0NSRUFURV9CVUZTIGlzIHVzZWQgdG8gYWxsb2NhdGUgYSBuZXcgYnVmZmVyLiBJZgotCSAgdGhpcyBmYWlscyB2NGwyc3JjIGZhbGxzIGJhY2sgdG8gY29weWluZyBidWZmZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTQ0NwotCi0yMDEzLTA0LTE1IDE3OjM3OjAxICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGZpeCBzZXR0aW5nIHdpbmRvdyBoYW5kbGUgYWZ0ZXIgdHJhbnNpdGlvbgotCSAgVGhlIGRlc3Ryb3llZCBmbGFnIHdhcyBub3QgcmVzZXQgcHJvcGVybHkgYW5kIGl0J3MgYWxzbyBub3QgbmVlZGVkCi0JICBhcyB3ZSBjYW4gY2hlY2sgb3N4d2luZG93ICE9IE5VTEwKLQotMjAxMy0wNS0wMiAxMzo0NTo1NSArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgIHJ0cDogZml4IGR1cGxpY2F0ZWQgc3ltYm9scyB3aXRoIGxpYnZweAotCi0yMDEzLTA0LTI5IDEwOjU4OjA4ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBnc3QvZ29vbTJrMS9NYWtlZmlsZS5hbToKLQkgIGdvb20yazE6IGZpeCBkdXBsaWNhdGVkIHN5bWJvbHMgd2l0aCBnb29tCi0KLTIwMTMtMDUtMDEgMTU6NDk6NDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IElmIHRoZSBhZGFwdGVyIGlzIGVtcHR5IG9uIEVPUyBkb24ndCB0cnkgdG8gbWFwIGl0cyBjb250ZW50Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MzE0Ci0KLTIwMTMtMDQtMzAgMTQ6MzY6MzggKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYWRkIHN0cmVhbS1mb3JtYXQ9cmF3IHRvIGFhYyBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MzAzCi0KLTIwMTMtMDQtMzAgMTM6MDc6MzcgKzAyMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogZml4IGFuZCBjbGVhbnVwIFZJRElPQ19FWFBCVUYgaGFuZGxpbmcKLQkgIGNsZWFyIHRoZSBzdHJ1Y3QsIGFuZCBwcm92aWRlIGEgY29ycmVjdCBlcnJvciBtZXNzYWdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk5MzM3Ci0KLTIwMTItMDctMDUgMTg6MDI6MjcgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGhhbmRsZSByZXR1cm4gdmFsdWUgLUVOT1RUWSBmb3IgdW5pbXBsZW1lbnRlZCBWSURJT0NfR19QQVJNCi0JICBOZXdlciBrZXJuZWxzIHJldHVybiAtRU5PVFRZLCBvbGRlciBrZXJuZWxzIHJldHVybiAtRUlOVkFMIGlmIHRoZSBpb2N0bAotCSAgaXMgbm90IGltcGxlbWVudGVkLiBXaXRoIHRoaXMgcGF0Y2gsIEdTdHJlYW1lciBoYW5kbGVzIGJvdGggY2FzZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4ODI1Ci0KLTIwMTMtMDQtMzAgMDk6MTY6MDcgKzAyMDAgIE1pY2hhZWwgT2xicmljaCA8bS5vbGJyaWNoQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBmaXggYnJva2VuIGJvb2xlYW4gZXhwcmVzc2lvbiB0byBkZXRlY3Qgbm9uLWZyYW1lIGJ1ZmZlcnMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTkyOTQKLQotMjAxMy0wNC0yOSAxMTowNzo1NiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiBzZXJ2ZXIgdmVyc2lvbiBpcyB0b28gb2xkCi0JICBXZSBjaGVjayBmb3IgdGhlIGxpYnJhcnkgdmVyc2lvbiBhdCBjb25maWd1cmUgdGltZSwgYnV0IHRoZSBzZXJ2ZXIKLQkgIHZlcnNpb24gY2FuIG9ubHkgcmVhbGx5IGJlIGNoZWNrZWQgYXQgcnVuLXRpbWUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4NzY4Ci0KLTIwMTMtMDQtMjcgMTE6MjQ6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwLmM6Ci0JICB1ZHA6IGxvZyBXQVJOSU5HIGRlYnVnIG1lc3NhZ2UgaWYgVURQIG11bHRpY2FzdCBpcyBsaWtlbHkgdG8gYmUgYnJva2VuCi0KLTIwMTMtMDQtMjcgMTE6MTY6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGFkZCBpbmNsdWRlcyB0byBnZXQgc29ja2xlbl90IGRlZmluZWQgb24gV2luZG93cwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjQwMAotCi0yMDEzLTA0LTI3IDA5OjM5OjQ1ICswMTAwICBZdXJ5IERlbGVuZGlrIDxhc3luYy5wcm9jZXNzaW5nanNAeWFob28uY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBzdXBwb3J0IGZvciBWUDZGIFZQNiBmbGFzaCBjb2RlYwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5OTAxMAotCi0yMDEyLTA5LTA1IDE2OjM5OjMxICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGFsc28gcG9sbCBmb3Igb3V0cHV0IGRldmljZXMKLQkgIE5vdGUgdGhhdCB0aGUgVjRMMiBBUEkgZGVmaW5lcyB0aGF0IGZvciBvdXRwdXQgZGV2aWNlcyBQT0xMT1VUCi0JICBpbmRpY2F0ZXMgdGhhdCBhIGJ1ZmZlciBpcyByZWFkeSB0byBiZSBkZXF1ZXVlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTg5OTIKLQotMjAxMi0wOC0yMCAwOTo1MjozNCArMDIwMCAgUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogZml4IGNvcHlpbmcgb2YgZW5jb2RlZCBidWZmZXJzCi0JICBUaGUgZXhpc3RlbmNlIG9mIGEgR3N0VmlkZW9Gb3JtYXRJbmZvIGRvZXMgbm90IGd1YXJhbnRlZSwgdGhhdAotCSAgdGhlIGJ1ZmZlciBjb250YWlucyB2aWRlbyBmcmFtZXMsIHNvIHRoZSBmb3JtYXQgbXVzdCBiZSBjaGVja2VkLgotCSAgQWxzbywgZm9yIGVuY29kZWQgYnVmZmVycyB0aGUgbGVuZ3RoIGlzIHZhcmlhYmxlIGFuZCBtdXN0IGJlIHNldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTg5NDkKLQotMjAxMi0wNy0xMCAxNToyOTo0MCArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGFkZCBzdXBwb3J0IGZvciBtcGVnNCBhbmQgSC4yNjMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTg4MjYKLQotMjAxMy0wNC0yNiAxMjoxNjo0OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JICBtb25vc2NvcGU6IEZpeCBkZWJ1ZyBzdGF0ZW1lbnQKLQotMjAxMy0wNC0yNSAyMTo1MDozMyArMDIwMCAgQWxleGFuZGVyIFNjaHJhYiA8bWVyb3NAbWVyb3MtZGVza3RvcC4obm9uZSk+Ci0KLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWxhd2RlYy5jOgotCSAgbXVsYXdkZWM6IGNoYW5nZSBiYXNlIGNsYXNzIHRvIEdzdEF1ZGlvRGVjb2RlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODg5NAotCi0yMDEzLTA0LTI1IDIwOjU5OjUyICswMjAwICBNYXRoaWV1IER1cG9uY2hlbGxlIDxtYXRoaWV1LmR1cG9uY2hlbGxlQGVwaXRlY2guZXU+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSAgdmlkZW9taXhlcjogc2VuZCBzdHJlYW0tc3RhcnQgZXZlbnQuCi0KLTIwMTItMTAtMTggMTA6Mzc6MzUgKzAyMDAgIFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGhhbmRsZSBFTk9EQVRBIHJldHVybiB2YWx1ZSBmb3IgVklESU9DX0VOVU1TVEQKLQkgIEluIGtlcm5lbCB2My43LXJjMSwgVklESU9DX0VOVU1TVEQgcmV0dXJucyBFTk9EQVRBIGlmIHRoZSBjdXJyZW50IGlucHV0Ci0JICBkb2VzIG5vdCBzdXBwb3J0IHRoZSBTVEQgQVBJLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODgyNwotCi0yMDEzLTA0LTI1IDEzOjE5OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2cGF5LmM6Ci0JICBkb2NzOiBhZGQgc29tZSBwYXkvZGVwYXlsb2FkZXJzCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTYzMQotCi0yMDEzLTA0LTI1IDEyOjQ0OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZW5jLmM6Ci0JICBtdWxhdzogU29tZSBtaW5vciBtZW1sZWFrIGZpeGVzIGFuZCBjbGVhbnVwCi0KLTIwMTMtMDQtMjQgMTM6NTY6NTYgKzAyMDAgIEFsZXhhbmRlciBTY2hyYWIgPGFsZXhhc0BheGlzLmNvbT4KLQotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZW5jLmM6Ci0JICBtdWxhd2VuYzogY2hhbmdlIHRvIGdzdGF1ZGlvZW5jb2RlciBiYXNlLCBhZGRlZCBiaXRyYXRlIHRhZ3MKLQotMjAxMi0wNS0wMyAxNjowNzoyNyArMDIwMCAgTWljaGFlbCBPbGJyaWNoIDxtLm9sYnJpY2hAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBidWZmZXJwb29sOiByZXNldCBidWZmZXIgc2l6ZSBpbiByZWxlYXNlX2J1ZmZlcgotCSAgVGhlIGJ1ZmZlciBtaWdodCBzdGlsbCBiZSBpbiB1c2UgZWxzZXdoZXJlIHdoZW4gZGVxdWV1aW5nIGJ1ZmZlcnMgZm9yCi0JICBvdXRwdXRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODgyMgotCi0yMDEyLTA0LTIwIDA5OjUzOjM1ICswMjAwICBNaWNoYWVsIE9sYnJpY2ggPG0ub2xicmljaEBwZW5ndXRyb25peC5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGJ1ZmZlcnBvb2w6IHJlbW92ZSB1bnVzZWQgaW5jbHVkZXMKLQkgIFRoZSBoYWNrcyB0aGF0IG5lZWRlZCB0aGVzZSBhcmUgbG9uZyBnb25lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODgyMQotCi0yMDEzLTA0LTI1IDEyOjEyOjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICAobXVsdGkpdWRwc2luazogVXNlIHNlcGFyYXRlIHNvY2tldHMgZm9yIElQdjQgYW5kIElQdjYKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MzQyNDMKLQotMjAxMy0wNC0yNSAxMDo0NDo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmg6Ci0JICBkeW51ZHBzaW5rOiBVc2Ugc2VwYXJhdGUgc29ja2V0cyBmb3IgSVB2NCBhbmQgSVB2NgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNDI0MwotCi0yMDEzLTA0LTI1IDEwOjQzOjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkgIHVkcDogRG9uJ3QgaW5jbHVkZSByZW1vdmVkIGdzdHVkcC5oIGluIG5vaW5zdF9IRUFERVJTCi0KLTIwMTMtMDQtMTcgMTY6NDc6MzEgLTA3MDAgIFRvZGQgQWd1bG5pY2sgPHRvZGRAYWd1bG5pY2suY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICBvc3hhdWRpbzogVXNlIGdzdF9hdWRpb19jaGFubmVsX3Bvc2l0aW9uc190b19tYXNrKCkgdG8gY3JlYXRlIG1hc2sKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTg4MDcKLQotMjAxMy0wNC0xNyAxNjoxMjoyNiAtMDcwMCAgVG9kZCBBZ3VsbmljayA8dG9kZEBhZ3Vsbmljay5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkgIG9zeGF1ZGlvOiBSZW1vdmUgdW51c2VkIGNvZGUKLQotMjAxMy0wNC0yNSAwOToxNjoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdHVkcC5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgdWRwOiBSZW1vdmUgdW51c2VkIGVudW0gdHlwZQotCi0yMDEzLTA0LTI1IDA5OjEzOjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwLW1hcnNoYWwubGlzdDoKLQkgIHVkcDogVXNlIHRoZSBnZW5lcmljIG1hcnNoYWxsZXIgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIG1hcnNoYWxsZXJzCi0KLTIwMTMtMDQtMjUgMDk6MDc6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQkgIHVkcHNyYzogUmVuYW1lIGluc3RhbmNlIHZhcmlhYmxlIGZyb20gaG9zdCB0byBtdWx0aV9ncm91cAotCSAgVGhpcyBpcyBtb3JlIGNvbnNpc3RlbnQgYXMgaXQncyB1c2VkIGZvciB0aGUgbXVsdGljYXN0LWdyb3VwIHByb3BlcnR5LgotCi0yMDEzLTA0LTI1IDA5OjAzOjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogQWRkIGJpbmQtYWRkcmVzcyBwcm9wZXJ0eQotCSAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIG11bHRpY2FzdC1ncm91cCBjdXJyZW50bHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCSAgSW4gMi4wIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgc2VwYXJhdGVseSwgdGhlIGZvcm1lciBvbmx5IGJlaW5nIHRoZSBtdWx0aWNhc3QKLQkgIGdyb3VwIGFuZCB0aGUgbGF0dGVyIGFsd2F5cyBiZWluZyB0aGUgYWRkcmVzcyB0aGUgc29ja2V0IGlzIGJvdW5kIHRvLCBldmVuIGlmCi0JICBhIG11bHRpY2FzdCBncm91cCBpcyBnaXZlbi4KLQotMjAxMy0wNC0yNCAxNjoyNDoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkgIHZyYXdkZXBheTogcmV0dXJuIG91dHB1dCBidWZmZXIgZnJvbSBwcm9jZXNzCi0JICBSZXR1cm4gdGhlIG91dHB1dCBidWZmZXIgZnJvbSB0aGUgcHJvY2VzcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIHB1c2hpbmcKLQkgIGl0IG91cnNlbHZlcy4gVGhpcyB3YXksIHRoZSBzdWJjbGFzcyBjYW4gYWN0dWFsbHkgZGVhbCB3aXRoIHRoZSByZXR1cm4KLQkgIHZhbHVlIG9mIHRoZSBwdXNoLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzcyNwotCi0yMDEyLTEwLTAxIDA5OjI5OjIxIC0wMzAwICBEaW9nbyBDYXJib25lcmEgTHV2aXpvbiA8ZGlvZ28ubHV2aXpvbkBlbnNpdGVjLmNvbS5icj4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogc2F2ZSB0aGUgZm9ybWF0IGNvcnJlY3RseQotCSAgSWYgVFJZX0ZNVCBpcyBub3QgaW1wbGVtZW50ZWQsICBnc3RfdjRsMl9vYmplY3RfZ2V0X25lYXJlc3Rfc2l6ZSB3aWxsCi0JICB1c2UgU19GTVQgYW5kIHdpbGwgY2hhbmdlIHRoZSBkZXZpY2UncyBvcGVyYXRpb24gbW9kZS4gVG8gc2F2ZSB0aGUKLQkgIG9sZCBkZXZpY2UgbW9kZSB3ZSBuZWVkIHRvIHNldCB0aGUgdHlwZSBmaWVsZCBvciBlbHNlIGl0IHdpbGwgZmFpbAotCSAgdG8gc2F2ZSB0aGUgcHJldmlvdXMgZm9ybWF0LgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTIwOQotCi0yMDEzLTA0LTI0IDE1OjM4OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6Ci0JICBydHA6IGEgbWFya2VyIGJpdCBzaG91bGQgdHJhbnNsYXRlIHRvIFJFU1lOQwotCSAgQSBtYXJrZXIgYml0IG9uIGFuIGF1ZGlvIHBhY2tldCBkb2VzIG5vdCBtZWFuIGEgRElTQ09OVCAoaW4gdGhlIEdTdHJlYW1lciBzZW5zZQotCSAgb2YgbWlzc2luZyBkYXRhKSBidXQgaXQgbWVhbnMgdGhhdCB0aGUgcGFja2V0IGlzIHRoZSBlbmQgb2YgYSB0YWxrc3B1cnQgYW5kIHRodXMKLQkgIGEgZ29vZCBvcHBvcnR1bml0eSB0byByZXN5bmMgdG8gdGhlIGNsb2NrLiBVc2UgdGhlIFJFU1lOQyBidWZmZXIgZmxhZyB0byBub3RlCi0JICB0aGlzLgotCSAgUmVhbCBkaXNjb250aW51aXRpZXMgYXJlIG1hcmtlZCB3aXRoIERJU0NPTlQgc3RpbGwgd2hlbiB0aGUgc2VxbnVtIGhhcyBhIEdBUCBvcgotCSAgd2hlbiB0aGUgaW5wdXQgYnVmZmVyIGhhcyB0aGUgRElTQ09OVCBmbGFnIHNldC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjcyMDQKLQotMjAxMy0wNC0yMiAyMzo1MTozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogTUFJTlRBSU5FUlM6Ci0JKiBSRUFETUU6Ci0JKiBSRUFETUUuc3RhdGljLWxpbmtpbmc6Ci0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gM2NiM2QzYyB0byA1ZWRjZDg1Ci0KLTIwMTMtMDQtMjIgMTA6MTk6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSAgcnRwanBlZ2RlcGF5OiBEcm9wIGZyYW1lIGlmIGl0J3MgbGVzcyB0aGFuIDIgYnl0ZXMgbGFyZ2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc1NjAKLQotMjAxMy0wNC0xOCAxMjoyMDowOCArMDMwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b2RldGVjdDogdXNlIF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmUgQVBJIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIGNvZGUuCi0KLTIwMTMtMDQtMTggMDk6Mzc6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmg6Ci0JICBvc3hhdWRpbzogSW5jbHVkZSBnc3RhdWRpb3JpbmdidWZmZXIuaCB0byBmaXggY29tcGlsYXRpb24gaW4gMS4wCi0KLTIwMTMtMDQtMTcgMjE6MDU6MTQgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkgIG9zeGF1ZGlvc2luazogY2hhbm5lbC1tYXNrIGNvbmZpZ3VyYXRpb24gZml4ZXMKLQkgIFNldCBjaGFubmVsLW1hc2sgYWNjb3JkaW5nIHRvIHNpbmsncyBsYXlvdXQgaW4gY2FzZSBvZiBzdGVyZW8gbGF5b3V0LgotCSAgQWxzbyBpbml0aWFsaXplIGFuZCByZXNldCB0aGUgbWFzayB3aGVuIGFuIHVucmVjb2duaXplZCBjaGFubmVsIGlzIGRldGVjdGVkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODIyNAotCi0yMDEzLTA0LTE1IDE5OjUzOjI4IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyc3JjOiBEaXNhYmxlIHJlbmVnb3RpYXRpb24gaW4gdGhlIG5lZ290aWF0ZSBtZXRob2QKLQkgIFRoaXMgd2F5LCB3ZSBkb24ndCBibG9jayB0aGUgaW5pdGlhbCBuZWdvdGlhdGlvbi4KLQkgIFRoYW5rcyB0byBKZXJlbXkgV2hpdGluZyBmb3IgZG9pbmcgYWxsIHRoZSB0ZXN0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTk4MQotCi0yMDEzLTA0LTE1IDE5OjQ2OjEyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBSZXZlcnQgInY0bDI6IGRpc2FibGUgcmVuZWdvdGlhdGlvbiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDFiMjZlMWQ1OTRhYjJiNjMzMjRlNDNhMzYzMzA0NzVlOThjZGYxOC4KLQkgIFRoaXMgY2F1c2VzIHRoZSBpbml0aWFsIG5lZ290aWF0aW9uIHRvIG5ldmVyIGhhcHBlbiBpZiBhIHJlY29uZmlndXJlCi0JICBldmVudCBpcyByZWNlaXZlZCBhZnRlciBnc3RfYmFzZV9zcmNfc3RhcnRfY29tcGxldGUoKSBidXQgYmVmb3JlIHRoZSBsb29wCi0JICBzdGFydHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1OTgxCi0KLTIwMTMtMDQtMTcgMjE6MTI6NTUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkgIGZsYWN0YWc6IGZvcndhcmQgY2FwcyBldmVudAotCSAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRvd25zdHJlYW0gZWxlbWVudCB3aWxsIGdldCB0aGUgZXZlbnQgYW5kIG5lZ290aWF0ZXMuIEFkZAotCSAgYSBGSVhNRSBmb3IgdXBkYXRpbmcgdGhlIHN0cmVhbWhlYWRlciBmaWVsZCBvbiB0aCBjYXBzLgotCi0yMDEzLTA0LTE3IDA3OjUwOjI3ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JICBmbGFjOiBhZGQgbW9yZSBsb2dnaW5nCi0KLTIwMTMtMDQtMTcgMjA6MjQ6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmg6Ci0JICBvc3hhdWRpbzogRml4IG1lcmdlIGNvbmZsaWN0cwotCi0yMDEzLTA0LTE3IDEwOjEwOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgb3N4YXVkaW86IEZpeCBjb25maWd1cmUgY2hlY2sgZm9yIG9zeGF1ZGlvIHBsdWdpbgotCi0yMDEzLTA0LTE3IDA5OjUwOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jOgotCSAgb3N4YXVkaW9yaW5nYnVmZmVyOiBGaXJzdCBjaGVjayB0aGUgdHlwZSwgdGhlbiBjYXN0Ci0KLTIwMTMtMDQtMTYgMjI6NDY6MDAgKzA5MDAgIFRha2FzaGkgTmFrYWppbWEgPHRlZC5uYWthamltYUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkgIG9zeGF1ZGlvOiB1c2UgR1NUX0lTX09TWF9BVURJT19TSU5LIGluIHJpbmcgYnVmZmVyLgotCi0yMDEzLTA0LTEwIDIxOjA2OjE2ICswOTAwICBUYWthc2hpIE5ha2FqaW1hIDx0ZWQubmFrYWppbWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmg6Ci0JICBvc3hhdWRpbzogY2FsbCBzZXRfY2hhbm5lbF9wb3NpdGlvbnMoKSBpbiBvc3hhdWRpb3JpbmdidWZmZXIgYWNxdWlyZSgpCi0KLTIwMTMtMDQtMTIgMTI6MTg6MDQgLTA3MDAgIFRvZGQgQWd1bG5pY2sgPHRvZGRAYWd1bG5pY2suY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JICBvc3hhdWRpbzogdXNlIEdTVF9BVURJT19JTkZPXyogYWNjZXNzb3JzCi0JICBDaGFuZ2VzIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKLQkgICogVXBkYXRlIGNsYXNzbmFtZSByZWZlcmVuY2VzCi0JICAqIFJlcGxhY2UgR1NUX0JPSUxFUlBMQVRFX0ZVTEwgd2l0aCBHX0RFRklORV9UWVBFCi0JICAqIFVzZSBuZXcgR3N0QXVkaW9JbmZvIHN0cnVjdCBhbmQgbWV0aG9kcwotCSAgKiBVc2UgbmV3IGJ1ZmZlciBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUKLQkgIENvbmZsaWN0czoKLQkgIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYwotCi0yMDEzLTA0LTEyIDExOjUxOjQ2IC0wNzAwICBUb2RkIEFndWxuaWNrIDx0b2RkQGFndWxuaWNrLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSAgb3N4YXVkaW86IGFkanVzdCBmb3IgY2hhbmdlcyB0byBnbGliIG11dGV4IGFwaS4KLQotMjAxMy0wNC0xMCAwMToyMTo0OSArMDkwMCAgVGFrYXNoaSBOYWthamltYSA8dGVkLm5ha2FqaW1hQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JICBvc3hhdWRpbzogdHJ5IHRvIGZpeCB1cCBhY2NvcmRpbmcgdG8gU2ViYXN0aWFuJ3MgY29tbWVudHMKLQotMjAxMy0wNC0wNSAxMDowMjozOCArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbG5AaWdhbGlhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmg6Ci0JICBvc3hhdWRpbzogYnVpbGQgZml4ZXMKLQkgIEVuYWJsZSB0aGUgb3N4YXVkaW8gcGx1Z2luIGJ1aWxkIGluIGNvbmZpZ3VyZS5hYyBhbmQgZml4IHNvbWUKLQkgIGluY2x1ZGUgZGlyZWN0aXZlIG9yZGVyIGlzc3Vlcy4KLQotMjAxMy0wNC0wMiAyMjoyODowOSArMDkwMCAgdGVkLW4gPHRlZC5uYWthamltYUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgb3N4YXVkaW86IGZpeCBsYXlvdXQgZm9yIG9zeGF1ZGlvc3JjCi0KLTIwMTMtMDMtMzAgMjI6NDk6MzQgKzA5MDAgIHRlZC1uIDx0ZWQubmFrYWppbWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50LmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5oOgotCSAgb3N4YXVkaW86IHBvcnQgdG8gdi4xLjAKLQotMjAxMy0wNC0xNiAxOToyOTo0OCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IERvbid0IHVucmVmIHF1ZXJ5LCB3ZSBkb24ndCBvd24gaXQKLQkgIEZpeGVzIGRvdWJsZS11bnJlZiBidWcuIEJ1ZyBmb3VuZCBieSBZb3VuZXNzIEFsYW91aQotCi0yMDEzLTA0LTE2IDIwOjQxOjEwICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IGZpeCBTQ0hFRFVMSU5HIHF1ZXJ5IHN1cHBvcnQKLQkgIENoYWluIHRoZSBxdWVyeSB1cCB0byBwYXJlbnQgYmVmb3JlIGFkZGluZyBfQkFORFdJRFRIX0xJTUlURUQgZmxhZywKLQkgIHNvIHRoYXQgYWxsIHRoZSBvdGhlciBmbGFncyBnZXQgc2V0LCBhbmQgcHVzaCBtb2RlIGdldHMgYWRkZWQgYXMKLQkgIHN1cHBvcnRlZCBhY3RpdmF0aW9uIG1vZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzNDg0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4MTU2Ci0KLTIwMTMtMDMtMzEgMTI6MDU6NDkgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogYmFzaWMgc2NoZWR1bGluZyBxdWVyeSBzdXBwb3J0Ci0JICBBbnN3ZXIgdG8gc2NoZWR1bGluZyBxdWVyaWVzIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCB0aGUgbmV3Ci0JICBfQkFORFdJRFRIX0xJTUlURURfRkxBRyBzbyB0aGF0IGRvd25zdHJlYW0gaXMgYWR2aXNlZCB0byBtaW5pbWl6ZSBzZWVrCi0JICBvcGVyYXRpb25zIGFuZCBwZXJmb3JtIG9uLWRpc2sgYnVmZmVyaW5nIGlmIHBvc3NpYmxlLgotCSAgQnVnIDY5MzQ4NAotCi0yMDEzLTA0LTE1IDE0OjMyOjQ2ICswMDAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGZpeCBzZWdmYXVsdCBhY2Nlc3Npbmcgb3N4d2luZG93IHdoZW4gbm90IHNldCB5ZXQKLQotMjAxMi0xMC0yNCAxMjoxNDo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9hYWxpYi9NYWtlZmlsZS5hbToKLQkqIGV4dC9jYWlyby9NYWtlZmlsZS5hbToKLQkqIGV4dC9kdi9NYWtlZmlsZS5hbToKLQkqIGV4dC9mbGFjL01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JKiBleHQvamFjay9NYWtlZmlsZS5hbToKLQkqIGV4dC9qcGVnL01ha2VmaWxlLmFtOgotCSogZXh0L2xpYmNhY2EvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGlicG5nL01ha2VmaWxlLmFtOgotCSogZXh0L21pa21vZC9NYWtlZmlsZS5hbToKLQkqIGV4dC9wdWxzZS9NYWtlZmlsZS5hbToKLQkqIGV4dC9yYXcxMzk0L01ha2VmaWxlLmFtOgotCSogZXh0L3Nob3V0Mi9NYWtlZmlsZS5hbToKLQkqIGV4dC9zb3VwL01ha2VmaWxlLmFtOgotCSogZXh0L3NwZWV4L01ha2VmaWxlLmFtOgotCSogZXh0L3RhZ2xpYi9NYWtlZmlsZS5hbToKLQkqIGV4dC92cHgvTWFrZWZpbGUuYW06Ci0JKiBleHQvd2F2cGFjay9NYWtlZmlsZS5hbToKLQkqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hcGV0YWcvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlLmFtOgotCSogZ3N0L2F2aS9NYWtlZmlsZS5hbToKLQkqIGdzdC9jdXR0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9kdG1mL01ha2VmaWxlLmFtOgotCSogZ3N0L2VmZmVjdHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZXF1YWxpemVyL01ha2VmaWxlLmFtOgotCSogZ3N0L2Zsdi9NYWtlZmlsZS5hbToKLQkqIGdzdC9mbHgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkqIGdzdC9nb29tMmsxL01ha2VmaWxlLmFtOgotCSogZ3N0L2ljeWRlbXV4L01ha2VmaWxlLmFtOgotCSogZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmFtOgotCSogZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlLmFtOgotCSogZ3N0L2ludGVybGVhdmUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaXNvbXA0L01ha2VmaWxlLmFtOgotCSogZ3N0L2xhdy9NYWtlZmlsZS5hbToKLQkqIGdzdC9sZXZlbC9NYWtlZmlsZS5hbToKLQkqIGdzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9tb25vc2NvcGUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpcGFydC9NYWtlZmlsZS5hbToKLQkqIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0c3AvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc2hhcGV3aXBlL01ha2VmaWxlLmFtOgotCSogZ3N0L3NtcHRlL01ha2VmaWxlLmFtOgotCSogZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmFtOgotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2JveC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2Nyb3AvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZlbmMvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSogc3lzL2RpcmVjdHNvdW5kL01ha2VmaWxlLmFtOgotCSogc3lzL29zcy9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3M0L01ha2VmaWxlLmFtOgotCSogc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOgotCSogc3lzL29zeHZpZGVvL01ha2VmaWxlLmFtOgotCSogc3lzL3N1bmF1ZGlvL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvd2F2ZWZvcm0vTWFrZWZpbGUuYW06Ci0JKiBzeXMveGltYWdlL01ha2VmaWxlLmFtOgotCSAgZ3N0OiBBZGQgYmV0dGVyIHN1cHBvcnQgZm9yIHN0YXRpYyBwbHVnaW5zCi0KLTIwMTMtMDQtMTIgMTk6MjY6MTEgKzAwMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nb29tMmsxL01ha2VmaWxlLmFtOgotCSAgZ29vbTJrMTogZml4IGR1cGxpY2F0ZWQgc3ltYm9sIHdpdGggZ29vbQotCi0yMDEzLTAzLTEwIDE3OjE3OjE3ICswMDAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW9jb21tb24uaDoKLQkgIG9zeGF1ZGlvOiBGaXhlcyBlcnJvcjogIkdTVF9MRVZFTF9ERUZBVUxUIiByZWRlZmluZWQKLQotMjAxMy0wMy0xMCAxNzoyNzozMCArMDAwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmM6Ci0JICBvc3hhdWRpbzogZml4ZXMgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ2dldHBpZCcKLQotMjAxMy0wNC0xNCAxNzo1NTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBhZWQ4N2FlIHRvIDNjYjNkM2MKLQotMjAxMy0wNC0xNCAxMjozMjowNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogYWRkIGJhY2sgImlyYWRpby1tb2RlIiBwcm9wZXJ0eSB0byBkaXNhYmxlIHNlbmRpbmcgb2YgaWNlY2FzdCByZXF1ZXN0IGhlYWRlcnMKLQkgIEluIDEuMCB3ZSBub3cgYWx3YXlzIHNlbmQgdGhlIGljZWNhc3QgcmVxdWVzdCBoZWFkZXJzIGJ5IGRlZmF1bHQsIHdoaWNoCi0JICBtYWtlcyB0aGUgc2VydmVyIHNlbmQgaWNlY2FzdHMgbWV0YWRhdGEgaW5zZXJ0ZWQgaW50byB0aGUgc3RyZWFtIGlmIGl0Ci0JICBzdXBwb3J0cyB0aGF0LiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSB1c2UgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QKLQkgIGRlc2lyYWJsZSwgbGlrZSB3aGVuIGp1c3Qgc2F2aW5nIGEgcmFkaW8gc3RyZWFtIHRvIGRpc2ssIHNvIGFkZCBiYWNrCi0JICB0aGUgImlyYWRpby1tb2RlIiBwcm9wZXJ0eSB0byBhbGxvdyBwZW9wbGUgdG8gZGlzYWJsZSB0aGlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5Nzk4NAotCi0yMDEzLTA0LTEyIDE2OjE2OjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSAgcnRwOiByZWdpc3RlciB0YWcgaW1hZ2UgdHlwZXMKLQkgIFRoZSBydHBnc3RkZXBheSBuZWVkcyB0aGUgdHlwZSB0byBiZSBhdmFpbGFibGUgaW4gb3JkZXIgdG8gZGVzZXJpYWxpemUgdGhlCi0JICBldmVudC4KLQotMjAxMy0wNC0xMiAxNjowODo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSAgcnRwZ3N0ZGVwYXk6IGhhbmRsZSBldmVudCBwYXJzZSBmYWlsdXJlcyBiZXR0ZXIKLQotMjAxMy0wNC0xMSAyMjoyNTowNSArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBhZGQgVE9DIHNldHRlciBzdXBwb3J0Ci0KLTIwMTMtMDQtMTIgMTI6MzE6MzAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICB3YXZlbmM6IHNtYWxsIGNsZWFudXBzIGZvciB0b2MgaGFuZGxpbmcKLQkgIERvbid0IGFkZCBlbXB0eSBsYWJsL25vdGUgY2h1bmtzLiBBbHdheXMgcGFzcyBpbnN0YW5jZSBhcyB0aGUgZmlyc3QgcGFyYW0uIEFkZCBtb3JlIGxvZ2dpbmcuCi0KLTIwMTMtMDQtMTIgMTI6NTg6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBQcm94eSB0aGUgbnRwLXN5bmMgcHJvcGVydHkgb2YgcnRwYmluCi0KLTIwMTMtMDQtMTIgMTI6NTE6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBHaXZlIHRoZSBtYW5hZ2VyIGFsd2F5cyB0aGUgbmFtZSAibWFuYWdlciIKLQkgIFRoaXMgYWxsb3dzIHRvIHVzZSB0aGUgR3N0Q2hpbGRQcm94eSBpbnRlcmZhY2UgdG8gYWRqdXN0Ci0JICBwcm9wZXJ0aWVzIG9uIGl0LgotCi0yMDEzLTA0LTExIDIyOjUzOjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hbHBoYWNvbG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hcGV2Mm11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JICB0ZXN0czogZml4IHNvbWUgcHJpbnRmIGZvcm1hdCBpc3N1ZXMgaW4gZGVidWcgbWVzc2FnZXMKLQotMjAxMy0wNC0xMSAxOToyNzoxNSArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaDoKLQkgIHdhdmVuYzogYWRkICdub3RlJyBjaHVuayBzdXBwb3J0Ci0KLTIwMTMtMDQtMTEgMjA6NDY6MjYgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogYWRkIGEgbGl0dGxlIG1vcmUgZG9jcyB0byB0aGUgYXVkaW9jbG9jawotCi0yMDEzLTA0LTExIDE1OjAwOjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IGFkZCBzdXBwb3J0IGZvciBOZXRDbGllbnRDbG9jawotCSAgV2hlbiB0aGUgc2VydmVyIHN1Z2dlc3RzIGEgR3N0TmV0VGltZVByb3ZpZGVyIGluIHRoZSBTRFAsIHNldCB1cCBhCi0JICBHc3ROZXRDbGllbnRDbG9jayB0aGF0IHNsYXZlcyB0byB0aGUgcmVtb3RlIGNsb2NrIGFuZCBzdWdnZXN0IHRoaXMgY2xvY2sgaW4KLQkgIHByb3ZpZGVfY2xvY2suCi0KLTIwMTMtMDQtMTEgMTQ6NTc6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSAgdWRwc2luazogYXZvaWQgYWxsb2MgYW5kIGZyZWUgaW4gcmVuZGVyIGZ1bmN0aW9uCi0JICBBdm9pZCBkb2luZyBhbGxvYyBhbmQgZnJlZSBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uIGZvciBlYWNoIGJ1ZmZlci4gSW5zdGVhZCwKLQkgIGFsbG9jYXRlIHRoZSBuZWVkZWQgYXJyYXlzIGluIF9pbml0IGFuZCB1c2UgdGhvc2UuCi0KLTIwMTMtMDQtMTAgMDg6MzY6MDAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2ZXBhcnNlOiByZW1vdmUgc3VwZXJmbHVvdXMgZ19saXN0X2ZpcnN0KCkgY2FsbHMKLQkgIFRoZSB2YXJpYWJsZXMgYWxyZWFkeSBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuCi0KLTIwMTMtMDQtMDkgMjM6MTM6MTggKzAxMDAgIEFuZHJlYXMgRmVua2FydCA8YW5kcmVhcy5mZW5rYXJ0QHN0cmVhbXVubGltaXRlZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuYzoKLQkgIHJ0cHNiY2RlcGF5OiBmaXggc2JjIGZyYW1lIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgbW9ubyBhbmQgc3RlcmVvIG1vZGVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3NDYzCi0KLTIwMTMtMDMtMjUgMTQ6MzU6MDIgKzAzMDAgIEFudG9uIEJlbGthIDxhbnRvbmJlbGthQGdtYWlsLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIHdhdnBhcnNlOiBhZGQgJ25vdGUnIGNodW5rIHN1cHBvcnQKLQkgIEFkZCAnbm90ZScgY2h1bmsgc3VwcG9ydCBpbiBUT0MgYXMgR1NUX1RBR19DT01NRU5UCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2NTQ5Ci0KLTIwMTMtMDQtMDggMTc6NTM6MDkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGNoZWNrIHZhbHVlIGluc2lkZSBlbmRhIHRvIHNldCBlbmRpYW5uZXNzCi0KLTIwMTMtMDQtMDkgMjE6MDA6MTIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwNGM3YTFlIHRvIGFlZDg3YWUKLQotMjAxMy0wNC0wOSAxNzozNDoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JICBpY3lkZW11eDogYXZvaWQgY29weSB3aGVuIHdlIGNhbgotCi0yMDEzLTA0LTA5IDE2OjUyOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgZ3N0cGF5OiB1c2UgYnVmZmVybGlzdCB0byBhdm9pZCBtZW1jcHkKLQotMjAxMy0wNC0wOSAxNjo1MDo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIHVkcHNpbms6IGltcHJvdmUgZGVidWcKLQotMjAxMy0wNC0wOSAwMDoyODo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFyc2UuYzoKLQkgIHRlc3RzOiByZWZhY3RvciBuZXcgd2F2cGFyc2UgdGVzdCBhIGxpdHRsZQotCSAgVXNlIGZha2VzcmMgaW5zdGVhZCBvZiBmaWxlc3JjIHdpdGggL2Rldi9udWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjY4NAotCi0yMDEzLTA0LTA4IDExOjM4OjMzICswMjAwICBBbGV4YW5kZXIgU2NocmFiIDxhbGV4YXNAYXhpcy5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGVycm9yIG91dCBpZiB3ZSByZWNlaXZlIGVvcyBiZWZvcmUgYW55IHZhbGlkIGRhdGEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTY2ODQKLQotMjAxMy0wNC0wNyAwMTo0Nzo1NiArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZm9yY2UgZGVpbnRlcmxhY2luZyBpbiAiaW50ZXJsYWNlZCIgbW9kZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NzQ2NwotCi0yMDEzLTA0LTA2IDEyOjQ1OjI4IC0wMzAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkgIGdka3BpeGJ1ZnNpbms6IEFkZCB0aW1lc3RhbXAvcnVubmluZy10aW1lL3N0cmVhbS10aW1lIHRvIHRoZSBlbWl0ZWQgbWVzc2FnZQotCi0yMDEzLTA0LTA1IDE0OjM4OjQzICswMjAwICBOaWNvbGEgTXVyaW5vIDxuaWNvbGEubXVyaW5vQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNkZXBheS5jOgotCSAgcnRwc2JjZGVwYXk6IGZpeCBwcmludGYgZm9ybWF0IGNvbXBpbGVyIHdhcm5pbmdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk3MzQzCi0KLTIwMTMtMDQtMDUgMDk6MzQ6MjMgKzAxMDAgIFRvZGQgQWd1bG5pY2sgPHRvZGRAYWd1bG5pY2suY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlbzogaW5jbHVkZSBwdGhyZWFkLmggdG8gZml4IGNvbXBpbGVyIHdhcm5pbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTczMDMKLQotMjAxMy0wNC0wNCAyMjo0ODo0NSArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkgIGxldmVsOiByZXN5bmMgb24gZGlzY29udAotCSAgRHJvcCBwZW5kaW5nIGRhdGEgb24gZGlzY29udCBhbmQgc3RhcnQgYSBuZXcgY3ljbGUgd2l0aCBhIG5ldyBiYXNlIHRpbWVzdGFtcC4KLQkgIENsZWFudXAgc29tZSB2YXJpYWJsZXMuCi0KLTIwMTMtMDQtMDMgMjM6NTI6NDcgKzAxMDAgIFRvbSBHcmVlbndvb2QgPHRncmVlbndvb2RAVG9tcy1NYWNCb29rLVByby5sb2NhbD4KLQotCSogZXh0L3ZweC9nc3R2cDhkZWMuYzoKLQkgIHZwOGRlYzogSW1wcm92ZSBsb2dnaW5nIHdoZW4gdnB4X2NvZGVjX3BlZWtfc3RyZWFtX2luZm8gZmFpbHMKLQkgIERlY29kZSBmYWlsdXJlcyBhbmQgbWlzc2luZyBrZXlmcmFtZXMgc2hvdWxkIGdldCBkaWZmZXJlbnQgZGVidWcKLQkgIG91dHB1dC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTcyMzIKLQotMjAxMy0wNC0wMyAxODoyNDoyOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNkZXBheS5jOgotCSAgcnRwc2JjZGVwYXk6IFJhbmsgYXMgc2Vjb25kYXJ5Ci0JICBUaGlzIHdheSwgaXQgd2lsbCBiZSBzZWxlY3RlZCBieSBkZWNvZGViaW4KLQkgIEJ1ZyByZXBvcnRlZCBieSBhbmRyZWFzLmZlbmthcnRAc3RyZWFtdW5saW1pdGVkLmNvbQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NzIyNwotCi0yMDEzLTA0LTAzIDE5OjA1OjM4ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBsZXZlbDogc3ViZGl2aWRlIGJ1ZmZlcnMgZm9yIHNhbXBsZSBhY2N1cmF0ZSBpbnRlcnZhbCBoYW5kbGluZwotCSAgUHJldmlvdXNseSB3ZSB3b3VsZCBza2lwIGxldmVsIG1lc3NhZ2Ugd2hlbiBwcm9jZXNzaW5nIGJ1ZmZlcnMgPiB0aGUgcmVxdWVzdGVkCi0JICBpbnRlcnZhbC4gQWxzbyB0aGUgbWVzc2FnZSBmcmVxdWVuY3kgd291bGQgY29udGFpbiBxdWl0ZSBzb21lIGppdHRlciBkdWUgdG8gb25seQotCSAgY29uc2lkZXJpbmcgdGhlbSBhdCB0aGUgZW5kIG9mIGJ1ZmZlcnMuCi0JICBDbGVhbnVwIHRoZSB0ZXN0cyB3aGlsZSB3ZSdyZSBhdCBpdC4KLQotMjAxMy0wMy0xOSAwODoyMzoyNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogcmVtb3ZlIG9sZCBzaW5jZSBjb21tZW50cyBhbmQgdXBkYXRlIGxvZ2dpbmcKLQkgIERvbid0IHByZXRlbmQgdGhhdCB3ZSBoYXZlIGEgdGltZXN0YW1wIG9uIGEgYnVmZmVyIHdoZW4gd2UgbmV2ZXIgc2V0IG9uZS4KLQotMjAxMy0wMy0xOCAyMDo1OToyMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogcmVtb3ZlIG9sZCBzaW5jZSBjb21tZW50Ci0KLTIwMTMtMDQtMDMgMTc6NTM6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBQcm94eSB0aGUgbXVsdGljYXN0LWlmYWNlIHByb3BlcnR5IG9mIHVkcHNyYwotCi0yMDEzLTA0LTAzIDExOjA5OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogZnJlZSBhbGwgcXVldWVkIGJ1ZmZlcnMKLQkgIERvbid0IGp1c3QgbG9vcCBvdmVyIHRoZSBmaXJzdCBudW1fcXVldWVkIGJ1ZmZlcnMgYnV0IGxvb3Agb3ZlcgotCSAgYWxsIHRoZSBidWZmZXJzIGFuZCBjaGVjayBpZiB0aGV5IG5lZWQgdG8gYmUgZnJlZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQKLQkgIG5vdCBhbGwgYnVmZmVycyBhcmUgcXVldWVkIGFuZCB0aGVuIHRoZSBlbnRyeSBpbiBvdXIgYXJyYXkgd2lsbCBiZSBOVUxMLgotCSAgVGhvc2UgYnVmZmVycyB0aGF0IGFyZSBub3QgcXVldWVkIHdlcmUgZnJlZWQgaW4gc3RvcCgpLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjY1MQotCi0yMDEzLTA0LTAzIDExOjA5OjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogaW1wcm92ZSBkZWJ1ZwotCi0yMDEzLTA0LTAyIDIzOjQyOjIzIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogT25seSBmb3J3YXJkIHN0aWNrIGV2ZW50cyB3aGlsZSBob2xkaW5nIHRoZSBzaW5rcGFkIHN0cmVhbSBsb2NrCi0JICBPdGhlcndpc2Ugd2UgZ2V0IGEgcmFjZSB3aGVyZSBpZiB0aGUgUlRDUCBwYWNrZXQgY29tZXMgaW4gZmlyc3QgYW5kIHdoaWxlCi0JICBpdCBpcyBhZGRlZCB0aGUgcGFkcywgdGhlIHNlZ21lbnQgZXZlbnQgYXJyaXZlcyBvbiB0aGUgUlRQIHN0cmVhbSwgdGhlIGV2ZW50Ci0JICBtYXkgYmUgbG9zdCBjb21wbGV0ZWx5IGFuZCBuZXZlciBmb3J3YXJkZWQuCi0KLTIwMTMtMDQtMDIgMjM6MzU6MDYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBObyBuZWVkIHRvIGV4cGxpY2l0ZWx5IGZvcndhcmQgdGhlIGNhcHMKLQkgIFRoZXkgYXJlIGZvcndhcmRlZCB3aXRoIHRoZSBvdGhlciBldmVudHMKLQotMjAxMy0wNC0wMiAyMjoyOTozOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguaDoKLQkgIHJ0cHNzcmNkZW11eDogUmVtb3ZlIHVudXNlZCBHc3RTZWdtZW50Ci0KLTIwMTMtMDQtMDIgMjI6MjY6MDIgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBTaW1wbGlmeSBldmVudCBmb3J3YXJkaW5nCi0JICBVc2UgdGhlIGdzdF9wYWRfZm9yd2FyZCgpIG1lY2hhbmljLCB0aGlzIHdheSB3ZSB3b24ndCBtaXNzIHBhZHMgdGhhdCBhcmUKLQkgIGFkZGVkIHdoaWxlIHdlIGFyZSBwdXNoaW5nCi0KLTIwMTMtMDQtMDIgMjE6NTM6MTAgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBEb24ndCBjcm9zcyB0aGUgaW50ZXJuYWwgbGlua3MKLQkgIFdlIGhhZCB0aGUgd3JvbmcgY29uZGl0aW9uIHRvIGNoZWNrIGZvciB0aGUgaW50ZXJuYWwgbGlua3MsIHNvIFJUUCBhbmQgUlRDUAotCSAgcGFkcyBnb3QgY3Jvc3NlZCEKLQotMjAxMy0wMy0zMSAxNzo1NDoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBmaXggc29tZSBkZWJ1ZyBtZXNzYWdlcwotCi0yMDEzLTA0LTAyIDIzOjM2OjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyOiBmaXggcHJpbnRmIGZvcm1hdCBjb21waWxlciB3YXJuaW5nIGluIGRlYnVnIG1lc3NhZ2UKLQotMjAxMi0wOC0yOSAxNzoyNDowMCArMDIwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgbWF0cm9za2FkZW11eDogaGFuZGxlIFRydWVIRCBhdWRpbyBjb2RlYyBpZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NzExMwotCi0yMDEzLTAzLTMxIDE5OjE0OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JICB0aGVvcmFwYXk6IGFkZCBkZWx0YS11bml0IHRvIG91dHB1dCBmcmFtZXMKLQotMjAxMy0wMy0yMyAwNToyMjoyMyArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHVzZSB0aW1lc3RhbXAgZGVsdGEgYXMgZHVyYXRpb24gaWYgcG9zc2libGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTY0MzcKLQotMjAxMy0wMy0zMCAwOTo0NDo0MSArMDEwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY2RlcGF5LmM6Ci0JICBydHA6IGZpeGVzIGRlYnVnIG1lc3NhZ2UgcHJpbnRmIHJlbGF0ZWQgY29tcGlsZXIgd2FybmluZ3MgaW4gU0JDIGRlcGF5bG9hZGVyCi0KLTIwMTMtMDMtMjggMTY6NDY6MzYgKzAwMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuaDoKLQkgIHJ0cDogQWRkIGFuIHJ0cHNiY2RlcGF5IGVsZW1lbnQKLQkgIFByZXR0eSBzdHJhaWdodGZvcndhcmQgLSB0YWtlcyBTQkMgZW5jYXBzdWxhdGVkIGluIFJUUCwgZGVwYXlsb2FkcywgYW5kCi0JICBwdXNoZXMgb3V0IFNCQyBidWZmZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDU4MgotCi0yMDEzLTAzLTI3IDIyOjE4OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5jOgotCSAgcnRwOiBmaXggU0JDIHBheWxvYWRlcgotCSAgSW5pdCBSVFAgYnVmZmVyIG9uIHN0YWNrIGNvcnJlY3RseSwgc28gbWFwcGluZyBpdCB3b3JrcwotCSAgd2l0aG91dCBjcml0aWNhbHMgYW5kIHRoZSBwYXlsb2FkZXIgYWN0dWFsbHkgd29ya3MuCi0KLTIwMTMtMDMtMjYgMTQ6NDQ6MzYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IENoZWNrIGZvciBhIHN1YnNldCBpbnN0ZWFkIG9mIG5vbi1lbXB0eSBpbnRlcnNlY3Rpb24gaW4gYWNjZXB0LWNhcHMKLQotMjAxMy0wMy0yNiAxNDozOTo1MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogUHJvcGVybHkgaGFuZGxlIHRoZSBmaWx0ZXIgY2FwcyBpbiBnZXRfY2FwcygpCi0KLTIwMTMtMDMtMjYgMTQ6MzU6MzggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IERvbid0IHVubmVjZXNzYXJpbHkgZ2V0IHRoZSBwYXJlbnQgY2xhc3MgaW4gY2xhc3NfaW5pdAotCSAgVGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGVkIGJ5IEdfREVGSU5FX1RZUEUgZG9lcyB0aGF0IGFscmVhZHkuCi0KLTIwMTMtMDMtMjUgMTg6MDI6MTAgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgVXNlICUwM3UgZm9yIGZvcm1hdCBpbiBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWRfcHJpbnRmKCkKLQotMjAxMy0wMy0yNSAxMDoxMjowMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYzoKLQkgIGNhcHNzZXR0ZXI6IFByZXZlbnQgdW5uZWVkZWQgY2FwcyBjb3B5aW5nIGFuZCBhbGxvY2F0aW9uCi0KLTIwMTMtMDItMDEgMTQ6MzM6NDEgKzAxMDAgIERpcmsgVmFuIEhhZXJlbmJvcmdoIDx2aGRpcmtAZ21haWwuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmM6Ci0JICBjYXBzc2V0dGVyOiBQYXNzIGFueSBvciBmaWx0ZXIgY2FwcyB1cHN0cmVhbQotCSAgY2Fwc2V0dGVyIGFjY2VwdHMgYW55dGhpbmcgYW5kIGp1c3QgZm9yd2FyZHMgZGlmZmVyZW50IGNhcHMsCi0JICBhcyBzdWNoIGl0IHNob3VsZCByZXR1cm4gQU5ZIGNhcHMgb24gdGhlIHNpbmtwYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzMDA1Ci0KLTIwMTMtMDMtMDYgMTM6MTc6NTQgKzAwMDAgIFRvbSBHcmVlbndvb2QgPHRncmVlbndvb2RAVG9tcy1NYWNCb29rLVByby5sb2NhbD4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIHZwOGVuYzogRml4IGZvciBkaXZpZGUgYnkgemVybyB3aGVuIHVzaW5nIDAvMSBmcmFtZXJhdGUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU3MDkKLQotMjAxMy0wMy0yNCAxNzo1NTo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogZXhwb3NlIENVRSBzaGVldCBpdGVtcyBhcyB0cmFja3Mgbm90IGNoYXB0ZXIgZW50cmllcyBpbiBUT0MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzczMDYKLQotMjAxMy0wMy0yMyAxMzoxMTowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogYWRkIG1vcmUgZXhhbXBsZSBwaXBlbGluZXMKLQotMjAxMy0wMy0yMyAxMjo1OToyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkgIHdhdmVuYzogYWRkIHNvbWUgZXhhbXBsZSBwaXBlbGluZXMKLQotMjAxMy0wMy0yMCAyMTozODo0MCArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaDoKLQkgIHdhdmVuYzogYWRkIFRPQyBzdXBwb3J0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwOTk4Ci0KLTIwMTMtMDMtMjMgMDQ6NTY6MzYgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogbWFrZSBlbXB0eSBzdWJ0aXRsZSBidWZmZXIgcmVjb2duaXRpb24gbW9yZSByb2J1c3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYyNDQKLQotMjAxMy0wMy0wNCAxNTo0OTowNiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JICBwbmdlbmM6IHVubWFwIHNvdXJjZSBmcmFtZSB3aGVuIGRvbmUKLQotMjAxMy0wMy0yMiAxNToxNDoxNSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGaXggdGVzdCByZWdyZXNzaW9uIHdpdGggb25lIGJ1ZmZlciBzdHJlYW1zCi0KLTIwMTMtMDMtMDUgMTc6MDA6MTcgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNwbGl0IGxhcmdlIHJhdyBhdWRpbyBzYW1wbGVzCi0JICBJbiBvcmRlciB0byBkZWFsIHdpdGggYSBmaWxlIHRoYXQgaGFzIHNhbXBsZXMgdGhhdCBhcmUgMjQgc2Vjb25kcwotCSAgbG9uZy4gIFNlZWtpbmcgc3RpbGwgZG9lc24ndCB3b3JrIHdpdGggc3VjaCBmaWxlcy4KLQotMjAxMy0wMy0yMiAxMTo1NDowOCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBSZW1vdmUgZG9jdW1lbnRhdGlvbiBmb3IgZHRzLW1ldGhvZAotCi0yMDEzLTAzLTIyIDEzOjI0OjMzIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IGRlcHJlY2F0ZSBkdHMtbWV0aG9kIHByb3BlcnR5Ci0KLTIwMTMtMDMtMTMgMTc6MDg6MDMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogRml4IHByb2JsZW1zIGNhdXNpbmcgYmFkIGR1cmF0aW9ucyBpbiBmaWxlCi0JICAtIEZpeCB1cCBvdXQtb2Ytb3JkZXIgaW5jb21pbmcgRFRTIHZhbHVlcy4KLQkgIC0gRml4IGR1cmF0aW9uIG9mIGluaXRpYWwgc2FtcGxlLgotCi0yMDEzLTAzLTEyIDE5OjA4OjI2IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGZpeCBhbGwgdGltZXN0YW1wcyBvbmNlIGZpcnN0X3RzIGlzIGRldGVybWluZWQKLQotMjAxMy0wMi0xNCAxNjozNDozNCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguaDoKLQkgIHF0bXV4OiBVc2UgUFRTL0RUUyBmcm9tIGluY29taW5nIGJ1ZmZlcnMKLQkgIFJlbW92ZSBvbGQgRFRTIGd1ZXNzaW5nIGNvZGUuCi0KLTIwMTMtMDMtMTggMTI6MzA6NTAgKzAxMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JICBxdG11eDogZXhwb3NlIG11bGF3IGNhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYwNTIKLQotMjAxMy0wMy0yMiAxMDo1MDozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIFJlcXVpcmUgT3JjID49IDAuNC4xNwotCSAgT3JjIDAuNC4xNyBmaXhlcyBhIGJ1bmNoIGNyYXNoZXMgb24gaTM4NiBhbmQgUlBpIHdoZW4gb3JjCi0JICBmdW5jdGlvbnMgY2FuJ3QgYmUgY29tcGlsZWQgYW5kIHRoZSBmYWxsYmFjayBmdW5jdGlvbiBpcwotCSAgc3VwcG9zZWQgdG8gYmUgdXNlZC4gQWxzbyBmaXhlcyBzb21lIGlzc3VlcyBvbiBQb3dlclBDLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDM5OQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mzg2MgotCi0yMDEzLTAzLTIyIDA4OjQ3OjE3ICswMDAwICBSb2RvbGZvIFNjaHVseiBkZSBMaW1hIDxyb2RvbGZvQHJvZHNvZnQub3JnPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBzYW1wbGUgbGVhayB3aGVuIHByb2Nlc3NpbmcgcHJpdmF0ZSBxdCB0YWdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2MzU1Ci0KLTIwMTMtMDMtMjIgMDI6MjQ6MDEgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBzZXQgc3RyZWFtIGxhbmd1YWdlIGNvZGUgZnJvbSB0YWcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYzNTgKLQotMjAxMy0wMy0yMSAwMjo1NTowNiArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzZW5kIEdBUCBldmVudHMgZm9yIHN1YnRpdGxlIHN0cmVhbXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTYyNDQKLQotMjAxMy0wMy0yMSAwMjo1MzoyNCArMDEwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBpZ25vcmUgZW1wdHkgc3VidGl0bGUgYnVmZmVycwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjI0NAotCi0yMDEzLTAzLTIxIDAyOjUyOjA3ICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IHJlY29nbml6ZSBTQlRMIHN1YnR5cGUgZm9yIHN1YnRpdGxlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjI0NAotCi0yMDEzLTAzLTE3IDE2OjI3OjAzICswMzAwICBBbnRvbiBCZWxrYSA8YW50b25iZWxrYUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGFkZCBzdXBwb3J0IGZvciB0aGUgdG9jLXNlbGVjdCBldmVudAotCSAgU2VsZWN0IHRyYWNrcyBmcm9tIHRoZSBDVUUgc2hlZXQgYnkgc2VuZGluZyBhIHRvYy1zZWxlY3QKLQkgIGV2ZW50IGJhc2VkIG9uIHRoZSB1aWQgaW4gdGhlIFRPQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA4OTEKLQotMjAxMy0wMy0xOSAxODowOTozMSAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBtcDRtdXg6IGluIGZhc3RzdGFydCBtb2RlLCBkb24ndCBvdXRwdXQgdXAgdG8gNCBrQiBvZiBnYXJiYWdlIGF0IHRoZSBlbmQuCi0KLTIwMTMtMDMtMjAgMDA6MzU6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0c2JjcGFyc2UuYzoKLQkgIHNiY3BhcnNlOiBwYWNrIG11bHRpcGxlIGZyYW1lcyBpbnRvIG9uZSBvdXRwdXQgYnVmZmVyCi0JICBEb24ndCBvdXRwdXQgYSBzaW5nbGUgYnVmZmVyIGZvciBldmVyeSB0aW55IFNCQyBmcmFtZQotCi0yMDEzLTAzLTE4IDE0OjU5OjM1ICswMDAwICBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzQGhhZGVzcy5uZXQ+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGZpeCBjb21waWxhdGlvbiBhZ2FpbnN0IG5ld2VyIGtlcm5lbCBoZWFkZXJzIGFzIG9uIEZDMTkKLQotMjAxMy0wMy0xNCAxNDoxMjowNSArMDEwMCAgS2lzaG9yZSBBcmVwYWxsaSA8a2lzaG9yZS5hcmVwYWxsaUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGZpeCBpbmZpbml0ZSBsb29wIG9uIEVPUyB3aXRoIG5vbi1kZWZhdWx0IG1ldGhvZHMgb3IgZmllbGRzCi0JICBGaXhlcyBwcm9ibGVtIG9mIGluZmluaXRlIGxvb3AgaW4gZ3N0X2RlaW50ZXJsYWNlX3Jlc2V0X2hpc3RvcnkuCi0JICBMYXN0IGZpZWxkIGluIHRoZSBoaXN0b3J5IHdhcyBuZXZlciBkZWludGVybGFjZWQgYmVjYXVzZSBpZHggYmVjb21lcyBuZWdhdGl2ZS4KLQkgIEhhcHBlbnMgZS5nLiB3aXRoIG1ldGhvZD1zY2FsZXJib2IgZmllbGRzPWJvdHRvbSBvcgotCSAgbWV0aG9kPWdyZWVkeWwgZmllbGRzPXRvcAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTY0NAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzE3MwotCi0yMDEzLTAzLTEyIDA5OjQ4OjMxICswMDAwICBLaXNob3JlIEFyZXBhbGxpIDxraXNob3JlLmFyZXBhbGxpQGdtYWlsLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IGRvbid0IHJldHVybiBGQUxTRSB3aGVuIGRyb3BwaW5nIHNpbmsgZXZlbnRzCi0JICBGaXhlcyBwcm9ibGVtIGluIGNvbmp1bmN0aW9uIHdpdGggYXZpZGVtdXguCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NjQzCi0KLTIwMTMtMDMtMTIgMDA6MTY6MTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGNoYW5nZSByYXcgdmlkZW8gY2FwcyBvcmRlciBzbyB0aGF0IEdSQVk4IGlzIGxhc3QKLQkgIFBlb3BsZSBsaWtlIGNvbG91cnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NTQzCi0KLTIwMTMtMDMtMTEgMTQ6NTA6NDEgKzAxMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogRG9uJ3QgdXNlIHVwc3RyZWFtIGNhcHMgd2l0aCBwZWVyX3F1ZXJ5X2NhcHMgKCkKLQkgIENhbGxpbmcgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKCkgb24gdGhlIHNyYyBwYWQgd2l0aCB0aGUgY2FwcwotCSAgdXBzdHJlYW0gY2FuIHByb2R1Y2UgYXMgYSBmaWx0ZXIgZnJvbSBnc3RfcnRwX2gyNjRfcGF5X2dldGNhcHMgKCkKLQkgIGlzIHdyb25nIGFuZCBtYWtlcyBjYXBzIG5lZ290aWF0aW9uIGZhaWwgaWYgdXBzdHJlYW0gY2FwcyBhcmUgbm90Ci0JICBOVUxMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTYyOQotCi0yMDEzLTAzLTEwIDA5OjEwOjE4ICswMTAwICBEaXJrIFZhbiBIYWVyZW5ib3JnaCA8dmhkaXJrQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogc3VwcG9ydCByYXcgQkdSCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NTQzCi0KLTIwMTMtMDMtMTAgMDk6MjU6MzQgKzAxMDAgIERpcmsgVmFuIEhhZXJlbmJvcmdoIDx2aGRpcmtAZ21haWwuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogc3VwcG9ydCByYXcgdmlkZW8gd2l0aCBuZWdhdGl2ZSBoZWlnaHQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU1NDEKLQotMjAxMy0wMy0wNSAxNDo0MDo1NiArMDEwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzaGdAYXhpcy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYzoKLQkgIGF1dG9kZXRlY3QgY2hlY2t0ZXN0OiBEbyBub3QgZmFpbCB3aXRob3V0IHZpZGVvc2luawotCSAgSWYgdGhlcmUgaXMgbm8gdmlkZW9zaW5rIGF2YWlsYWJsZSBhdXRvdmlkZW9zaW5rIHdpbGwgY29udGFpbiBhCi0JICBmYWtlc2luayBpbnN0ZWFkIHdoaWNoIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50IGluIHRoZSB1bml0IHRlc3QuCi0KLTIwMTMtMDMtMDkgMDE6MTg6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIEFuZHJvaWQubWs6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdG1mLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIGdzdC9kdG1mL2dzdGR0bWYuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZjb21tb24uaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIGR0bWY6IG1vdmUgZHRtZiBwbHVnaW4gZnJvbSAtYmFkIHRvIC1nb29kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDE2Ci0KLTIwMTMtMDMtMDkgMDA6MzA6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnZHRtZi1tb3ZlZC1mcm9tLWJhZCcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc0MTYKLQotMjAxMy0wMy0wNSAyMToyMjoxOCArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmM6Ci0JICBvc3hhdWRpbzogYWRkIHN1cHBvcnQgZm9yIGlPUyB1c2luZyB0aGUgUmVtb3RlSU8gQXVkaW9Vbml0Ci0KLTIwMTMtMDMtMDUgMjE6MTc6NTIgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmg6Ci0JICBvc3hhdWRpbzogYWRkIGEgZmHDp2FkZSBmb3IgdGhlIENvcmVBdWRpbyBBUEkKLQotMjAxMy0wMy0wNyAwMDowMDo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDJkZTIyMWMgdG8gMDRjN2ExZQotCi0yMDEzLTAzLTAzIDExOjU5OjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2x6by5jOgotCSAgbWF0cm9za2E6IEluY2x1ZGUgY29uZmlnLmgsIGl0J3MgbmVlZGVkIGZvciBfc3RkaW50LmgKLQotMjAxMy0wMy0wMyAxMTo1MzowNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IEZpeCAod3JvbmcpIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMy0wMy0wMiAxMzo1OTo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhZGQgdmFyaWFudCBmaWVsZCB0byBILjI2MyBjYXBzCi0JICBhdmRlY19oMjYzIHdvbid0IGdldCBwbHVnZ2VkIG90aGVyd2lzZS4KLQotMjAxMy0wMi0yMiAxOTowNjo1MiArMDEwMCAgQXJuYXVkIFZyYWMgPGF2cmFjQGZyZWVib3guZnI+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2tpcCBkaXNhYmxlZCB0cmFja3MKLQkgIElTTy9JRUMgMTQ0OTYtMTIgc3BlY2lmaWVzIGRpc2FibGVkIHRyYWNrcyBzaG91bGQgYmUgY29tcGxldGVseQotCSAgaWdub3JlZCwgc28ganVzdCBkbyBpdC4KLQkgIEF2b2lkcyBkZWFkbG9jayBkdXJpbmcgcHJlcm9sbGluZyBmb3Igc29tZSBmaWxlcy4KLQkgIEFsc28gcHJldmVudHMgJ2NoYXB0ZXInIHN1YnRpdGxlIHRyYWNrcyBmcm9tIHNob3dpbmcgdXAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzOTkzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI4NzkwCi0KLTIwMTMtMDItMjUgMDk6NTg6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICB0ZXN0czogcmUtYWRkIHN1cHByZXNzaW9uIGZvciBHVmFsdWVBcnJheSB3YXJuaW5ncyB0byB1bml0IHRlc3QgYXMgd2VsbAotCi0yMDEzLTAyLTI4IDEzOjI1OjA2ICswMTAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZHRtZi5jOgotCSAgdGVzdHM6IHVzZSByZWxhdGl2ZSBpbmNsdWRlIGZvciBvdXQtb2YtdHJlZSBidWlsZHMgaW4gZHRtZiB0ZXN0Ci0KLTIwMTMtMDItMjggMDg6NDY6NTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IHJlbW92ZSB0aGUgc2luY2UgZG9jLWNvbW1lbnQgZnJvbSAwLjEwCi0KLTIwMTMtMDItMjggMDg6NDQ6MTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmM6Ci0JICBsZXZlbDogYWRkIGEgInBvc3QtbWVzc2FnZXMiIHByb3BlcnR5IGFuZCBkZXByZWNhdGUgIm1lc3NhZ2UiCi0JICBJbiBzcGVjdHJ1bSB0aGlzIHdhcyBjaGFuZ2VkIGZyb20gMC4xMCB0byAxLjAsIGxldHMgZG8gdGhpcyBoZXJlIHRvby4KLQotMjAxMy0wMi0yNyAxODo1Njo1MCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZHRtZi5jOgotCSAgdGVzdHM6IEFkZCB0ZXN0cyBmb3IgZHRtZnNyYwotCi0yMDEzLTAyLTI3IDE2OjE1OjI3IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kdG1mLmM6Ci0JICB0ZXN0czogRml4IHJlZiBsZWFrIGluIGR0bWYgdGVzdAotCi0yMDEzLTAyLTI2IDE0OjE4OjIwIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSAgcnRwbXA0Z2RlcGF5OiBzdHJlYW10eXBlIGlzIG5vdCBwdXQgYnkgYWxsIFJUU1Agc2VydmVyLCBub3QgbWFrZSBpdCBvcHRpb25hbAotCSAgU3BlY2lmaWMgY2FzZSBoZXJlIGlzIFdvd3phIDMuNS4wCi0KLTIwMTMtMDItMjUgMDA6MzU6NTggKzAxMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IHB1dCBiYWNrIGRlcHJlY2F0aW9uIHdhcm5pbmdzCi0KLTIwMTMtMDItMjQgMTc6MDA6MTQgKzAxMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkgIGxldmVsOiBzZW5kIGxhc3QgbWVzc2FnZSBvbiBFT1MKLQotMjAxMy0wMi0yMyAxNDozNDozNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcHVzaCBtb2RlOiBoYW5kbGUgc29tZSBtb3JlIDAtc2l6ZSBidWZmZXIgY2FzZXMKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ5NDQKLQotMjAxMy0wMi0yMyAxODo1MDo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGZpeCB1cCBleGFtcGxlIHBpcGVsaW5lIGluIGRvY3MKLQotMjAxMi0xMS0yMCAxMjoxNDowNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogVXBkYXRlIHNlZ2RvbmUgcGVyaW9kaWNhbGx5Ci0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSB1cGRhdGUgc2VnZG9uZSBiYXNlZCBvbiB0aGUgcmVhZCBpbmRleCByZWNlaXZlZAotCSAgZHVyaW5nIGxhdGVuY3kgdXBkYXRlcy4gQXMgdGhlIGNvbW1lbnQgbm90ZXMsIHdlIG1ha2Ugc29tZSBjb21wcm9taXNlcwotCSAgdG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgc2VnZG9uZSBpcyBhIHNlZ21lbnQgbXVsdGlwbGUsIHdoaWxlIHRoZSByZWFkCi0JICBpbmRleCBvZmZlcnMgZmluZXIgZ3JhbnVsYXJpdHkuIFRoZSB1cGRhdGVzIGFyZSBhbHNvIG5vdCB2ZXJ5IG9mdGVuCi0JICAoMTAwbXMgc2luY2UgdGhhdCBpcyBob3cgb2Z0ZW4gYXV0b21hdGljIHRpbWluZyB1cGRhdGVzIGFyZSBwcm92aWRlZCkuCi0JICBBbGwgdGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIGJhc2VhdWRpb3Npbmsgc2FtcGxlIGFsaWdubWVudCBjb2RlIHRvIHdvcmsKLQkgIGF0IGFsbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQyNTcKLQotMjAxMy0wMi0xMyAxMDo0Njo1NCArMDEwMCAgUGF1bCBIRU5SWVMgPHZpc2VjaGVsbGVAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBGaXggd3JvbmcgY29kZSBvcmdhbmlzYXRpb24gaW4gY2FzZSBvZiBjb2xsaXNpb24KLQkgIGNoYW5nZV9zc3JjIGZpZWxkIG9mIFJUUFNlc3Npb24gc2hvdWxkIGJlIHNldCBiZWZvcmUgY2FsbGluZwotCSAgcnRwX3Nlc3Npb25fc2NoZWR1bGVfYnllX2xvY2tlZCAoKSBhcyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCByZWNvbnNpZGVyIGZ1bmN0aW9uCi0JICB0aGF0IHdpbGwgd2FrZSB1cCBydGNwX3RocmVhZCB3aGljaCB3aWxsIGNhbGwgcnRwX3Nlc3Npb25fb25fdGltZW91dCAoKSB0aGF0IHdpbGwKLQkgIGNoZWNrIGNoYW5nZV9zc3JjIHRvIGNoYW5nZSB0aGUgc3NyYy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQxODQKLQotMjAxMy0wMi0yMSAxMToxNToyMyAtMDUwMCAgSmVhbi1GcmFuw6dvaXMgRm9ydGluIFRhbSA8bmVrb2hheW9AZ21haWwuY29tPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBpbXByb3ZlIGRlc2NyaXB0aW9ucyBvZiBjaHJvbWEga2V5aW5nLXJlbGF0ZWQgcHJvcGVydGllcyBhbmQgZW51bXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQzNzQKLQotMjAxMy0wMi0yMSAxNTowMToxNSAtMDUwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogRG8gbm90IG92ZXJyaWRlIHRoZSBtZXRob2Qgd2l0aCBjdXN0b20gci9nL2IgdmFsdWVzCi0JICBEZXBlbmRpbmcgb24gdGhlIG9yZGVyIGdfb2JqZWN0X3NldCgpIGNhbGxzIGFhcmUgbWFkZSwgdGhlCi0JICB0YXJnZXQgci9nL2Igc2V0dGluZ3Mgd2lsbCBvdmVycmlkZSB0aGUgbWV0aG9kIGlmIHNldCB0bwotCSAgZ3JlZW4vYmx1ZS4gQ2hhbmdlIHRoYXQgc28gd2UgZG8gbm90IHVzZSB0aGUgdGFyZ2V0LXIvZy9iIHZhbHVlcwotCSAgdW5sZXNzIHRoZSBtZXRob2QgaXMgc2V0IHRvIGN1c3RvbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQzNzQKLQotMjAxMy0wMi0yMCAxNTo0Njo0MyArMDEwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLQotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSAgYXVwYXJzZTogZG8gbm90IGxlYWsgc3JjX2NhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQyNzUKLQotMjAxMy0wMi0yMCAyMTowMzoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogb25seSBkZWxheSBSVENQIHdoZW4gd2UgYXJlIGEgc2VuZGVyCi0JICBPbmx5IGRlbGF5IHRoZSBSVENQIHRocmVhZCB3aGVuIHdlIGFyZSBhIHNlbmRlciwgd2hpY2ggd2UgY2FuIGtub3cgYmVjYXVzZSB3ZQotCSAgaGF2ZSBhIHNlbmRfcnRwX3NyYyBwYWQuIE90aGVyd2lzZSB3ZSBtaWdodCBkZWxheSB0aGUgUlRDUCB0aHJlYWQgaWYgd2UKLQkgIGFyZSBvbmx5IGEgcmVjZWl2ZXIgYW5kIHRoZW4gdGhlcmUgaXMgbm8gY29kZSBwYXRoIHRoYXQgd2FrZXMgdXAgdGhlCi0JICBSVENQIHRocmVhZCBhbmQgd2UgZW5kIHVwIHdpdGhvdXQgUlRDUCBwYWNrZXRzLgotCi0yMDEzLTAyLTE5IDExOjQ3OjIwICswMTAwICBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAbGluYXJvLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMjogQWRkIHN1cHBvcnQgb2YgZG1hYnVmCi0JICB2NGwgaGFzIGFkZCBhIG5ldyBJT0NUTCB0byBleHBvcnQgYSBidWZmZXIgYnkgdXNpbmcgZG1hYnVmLgotCSAgVGhpcyBwYXRjaCBhbGxvdyB0byB1c2UgdGhpcyBuZXcgSU9UQ0wgaWYgaXQgaGFzIGJlZW4gZGVmaW5lZCBpbiB2aWRlb2RldjIuaAotCSAgSSBpbnRyb2R1Y2UgYSBuZXcgSU8gbW9kZSAoR1NUX1Y0TDJfSU9fRE1BQlVGKSB0byBlbmFibGUgdGhpcyB3YXkgb2Ygd29ya2luZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTM4MjYKLQotMjAxMy0wMi0xOCAyMDowNDowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IHVwIGRvZGd5IGNvZGUgdGhhdCB0cmllcyB0byBmaXggdXAgYSBicm9rZW4gbW9vdiBhdG9tCi0JICBBZnRlciBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoKSBnc3RfYnVmZmVyX2NvcHlfaW50bygpIHdpbGwgbGlrZWx5Ci0JICBhcHBlbmQgdG8gdGhlIGFscmVhZHktZXhpc3RpbmcgbWVtb3J5IGluc3RlYWQgb2YgZmlsbGluZyBpdC4KLQotMjAxMy0wMi0xOCAxNjozMjoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IHBvdGVudGlhbCBjcmFzaCBvbiBzaG9ydCBNT09WIGF0b20KLQkgIERvbid0IHVubWFwIHNob3J0IE1PT1YgYXRvbSBidWZmZXIgdHdpY2UsIHdoaWNoIGhhcHBlbmVkCi0JICBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBkb24ndCBmaXggdXAgdGhlIE1PT1YgYXRvbS4KLQkgIEZpeGVzIGNyYXNoZXMgd2hlbiB0aHVtYm5haWxpbmcgcGFydGlhbCBtcDQgZmlsZSB3aGVyZQotCSAgdGhlIE1PT1YgYXRvbSBpcyBzdGlsbCBpbmNvbXBsZXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDAxMAotCi0yMDEzLTAyLTE2IDE2OjQ5OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkgIHNvdXBodHRwc3JjOiBzZXQgU09VUF9WRVJTSU9OX3tNSU5fUkVRVUlSRUQsTUFYX0FMTE9XRUR9IHRvIHN1cHByZXNzIGRlcHJlY2F0aW9ucyB3aXRoIG5ld2VyIHZlcnNpb25zCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzOTExCi0KLTIwMTMtMDItMTYgMTU6NDc6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiB1c2UgZGVmYXVsdCBwcm94eSByZXNvbHZlciBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgR05PTUUgcHJveHkgcmVzb2x2ZXIKLQkgIEFwcGFyZW50bHkgdGhlcmUncyBubyByZWFzb24gdG8gdXNlIGl0IGFueSBsb25nZXIuIERyb3AgbGlic291cC1nbm9tZQotCSAgZGVwZW5kZW5jeSB3aGlsZSBhdCBpdCwgbm93IHRoYXQgd2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBmcm9tIGl0IGFueQotCSAgbW9yZSAoaXQgb25seSBjb25zaXN0cyBlbnRpcmVseSBvZiBkZXByZWNhdGVkIEFQSSBub3cgYW55d2F5cykuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzOTExCi0KLTIwMTMtMDItMTUgMTU6NDM6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICB0ZXN0czogZml4IHNvbWUgaDI2NCBjYXBzCi0JICBEb2Vzbid0IGZpeCBhbnl0aGluZyBpbiBwYXJ0aWN1bGFyLCBidXQgaXMKLQkgIHN0aWxsIG5lZWRlZCBoZXJlIGZvciBjb3JyZWN0bmVzcy4KLQotMjAxMy0wMi0xNSAwODoxOToyNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogcmVtb3ZlIGNoYW5uZWwtbWFzayBmcm9tIGNhcHMKLQkgIFRoZSBjaGFubmVsLW1hc2sgaXMgb25seSBuZWVkZWQgZm9yIGNoYW5uZWxzPjIgd2hpY2ggd2UgZG9uJ3QgZG8uCi0KLTIwMTMtMDItMTUgMTY6MjE6MjEgKzAxMDAgIEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBzdGVyaWNzc29uLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGRvbid0IGNoZWNrIHN0cmlkZSBmb3IgZW5jb2RlZCBmb3JtYXRzCi0JICBEb24ndCB0cnkgdG8gY2hlY2sgdGhlIHN0cmlkZSBmb3IgZW5jb2RlZCBmb3JtYXRzLiBTb21lIGRyaXZlcnMgb3V0cHV0Ci0JICBzb21ldGhpbmcgIT0gMCBhbmQgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGZhaWwgb24gdGhhdC4KLQotMjAxMy0wMi0xNSAxNDoxMTozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IHVzZSBnX3NvY2tldF9zZXRfb3B0aW9uKCkgdG8gc2V0IGJ1ZmZlciBzaXplIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucwotCSAgU28gd2UgaGF2ZSB0byB3b3JyeSBsZXNzIGFib3V0IHBvcnRhYmlsaXR5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjQwMAotCi0yMDEzLTAyLTE0IDE0OjEzOjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogcmVtb3ZlIHNvZi1tYXJrZXIgZnJvbSB0ZW1wbGF0ZSBjYXBzIGZvciBub3cKLQkgIE5vdyB0aGF0IHRoZSBzdWJzZXQgY2hlY2sgYWN0dWFsbHkgd29ya3MsIHRoaXMgYnJlYWtzCi0JICB0aGluZ3Mgd2l0aCBkZW11eGVycyB0aGF0IGRvbid0IHB1dCBhICJzb2YtbWFya2VyIgotCSAgaW4gdGhlaXIganBlZyBjYXBzLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIGdvb2QgcGFyc2VyCi0JICB0byBwbHVnIGVpdGhlciB5ZXQuCi0KLTIwMTMtMDItMTMgMTI6MzI6MTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmg6Ci0JICBqcGVnZW5jOiBQdXQgdGhlIFNPRiBtYXJrZXIgaW50byB0aGUgY2FwcwotCi0yMDEzLTAyLTEzIDEyOjAyOjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIHJ0cC1wYXlsb2FkaW5nOiBGaXggdW5pdCB0ZXN0IGNhcHMgYW5kIEFNUiBkZXBheWxvYWRlciBzaW5rIHRlbXBsYXRlIGNhcHMKLQkgIEZpZWxkcyB3ZXJlIG1pc3NpbmcgZnJvbSB0aGUgYWN0dWFsIGNhcHMsIG9yIHRvbyBtYW55IGZpZWxkcwotCSAgZXhpc3RlZCBpbiB0aGUgdGVtcGxhdGUgY2Fwcy4KLQotMjAxMy0wMi0xMyAxMTo1MzowMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogRml4IGNhcHMgdXNlZCBpbiB0aGUgdW5pdCB0ZXN0Ci0JICBUaGUgQUFDIGNhcHMgcGFzc2VkIHdlcmUgaW5jb21wbGV0ZS4KLQotMjAxMy0wMi0xMyAxMTo0OTo0MCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tlbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2twYXJzZS5jOgotCSAgd2F2cGFjazogRml4IHVuaXQgdGVzdHMsIHdpZHRoIGlzIG5vdyBjYWxsZWQgZGVwdGggaW4gdGhlIGNhcHMgaW4gMS4wCi0KLTIwMTMtMDItMTIgMjM6MzE6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogbWFrZSBzb3VwaHR0cHNyYyB1bml0IHRlc3Qgd29yayBldmVuIGlmIGh0dHBfcHJveHkgaXMgc2V0Ci0JICBXZSdyZSB0ZXN0aW5nIHdpdGggYW4gaHR0cCBzZXJ2ZXIgb24gbG9jYWxob3N0LCBidXQgZG9uJ3Qgc3VwcG9ydAotCSAgYW4gZXhjZXB0aW9uIGxpc3QgZm9yIHRoZSBodHRwX3Byb3h5LCBzbyBqdXN0IHVuc2V0IHRoZSBlbnZpcm9ubWVudAotCSAgdmFyaWFibGUgdG8gbWFrZSBzdXJlIHdlIGNhbiBydW4gdGhpcyB0ZXN0IHByb3Blcmx5IGV2ZW4gaWYgdGhlCi0JICBlbnZpcm9ubWVudCBoYXMgaHR0cF9wcm94eSBzZXQuCi0JICBBbHNvLCBkb24ndCBza2lwIGFsbCB0ZXN0cyBpZiB0aGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHRoZSBTU0wgc2VydmVyLAotCSAganVzdCBydW4gdGhlIG5vbi1TU0wgdGVzdHMgdGhlbi4KLQkgIGh0dHBzOi8vamVua2lucy5xYS51YnVudHUuY29tL3ZpZXcvUmFyaW5nL3ZpZXcvSkhCdWlsZCUyMEdub21lL2pvYi9qaGJ1aWxkLWFtZDY0LWdzdC1wbHVnaW5zLWdvb2QvCi0KLTIwMTMtMDItMTIgMTI6NTM6NTIgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEByZGlvLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBleHRyYWN0IGNvZGVjX2RhdGEgZm9yIFByb1JlcwotCi0yMDEzLTAyLTA4IDAxOjAyOjEwICsxMTAwICBUaW0gJ21pdGhybycgQW5zZWxsIDxtaXRocm9AbWl0aGlzLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogRml4aW5nIGJ1ZmZlciBsZWFrIGluIGdzdF9hdmlfbXV4X2RvX2J1ZmZlcgotCSAgZ3N0X2F2aV9tdXhfZG9fYnVmZmVyIHdhcyBsZWFraW5nIGRhdGEgZnJvbSBnc3RfY29sbGVjdF9wYWRzX3BvcC4KLQotMjAxMy0wMi0xMCAxNToxMDozMiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogY29ycmVjdCBkdXJhdGlvbiBmb3IgYXVkaW8gVkJSIGJ1ZmZlcnMgaW4gcHVsbCBtb2RlCi0KLTIwMTMtMDItMDggMjE6Mjg6MDIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHByb3BlciBwb3NpdGlvbiByZXBvcnRpbmcgYW5kIHB1c2ggbW9kZSB0aW1lc3RhbXBpbmcKLQkgIC4uLiBhbmQgYWxpZ24gY3VycmVudF90b3RhbCBzZW1hbnRpY3MgaW4gcHVzaCBhbmQgcHVsbCBtb2RlLAotCSAgd2hpY2ggdHJhY2tzIGJ5dGVzIGZvciBDQlIgYW5kIGJsb2NrcyBmb3IgVkJSLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTQ4MQotCi0yMDEzLTAyLTA4IDE3OjA1OjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBkZWxheSBSVENQIHVudGlsIGZpcnN0IFJUUCBwYWNrZXQKLQkgIERlbGF5IHNlbmRpbmcgdGhlIGZpcnN0IFJUQ1AgcGFja2V0IHVudGlsIHdlIGhhdmUgc2VudCB0aGUgZmlyc3QgUlRQIHBhY2tldC4KLQkgIE90aGVyd2lzZSB3ZSB3aWxsIHNlbmQgb3V0IGEgUmVjZWl2ZXIgUmVwb3J0IGluc3RlYWQgb2YgYSBzZW5kZXIgcmVwb3J0LgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE0MDAKLQotMjAxMy0wMi0wNyAxNTowNjo0MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogcmVtb3ZlIGRlYWQgY29kZQotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODM1NQotCi0yMDEzLTAxLTI5IDEwOjQ4OjE3ICswMTAwICBQYXVsIEhFTlJZUyA8dmlzZWNoZWxsZUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgIHJ0cHB0ZGVtdXg6IGZvcndhcmQgc3RpY2t5IGV2ZW50cyBhbmQgdGhlbiBzZXQgY2FwcwotCSAgV2hlbiBhIG5ldyBzcmMgcGFkIGlzIGFkZGVkLCBmaXJzdCBmb3J3YXJkIHRoZSBzdGlja3kgZXZlbnRzIGFuZCB0aGVuCi0JICBzZXQgdGhlIGNhcHMgb24gdGhlIHNyYyBwYWQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI3ODYKLQotMjAxMy0wMi0wNyAxNDozMjoyNiArMDEwMCAgTWFya292dHNldiBWYWRpbSA8di5tYXJrb3Z0c2V2IGF0IHNhbXN1bmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogaW1wcm92ZSBkZWJ1ZyBvdXRwdXQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODg5MzUKLQotMjAxMS0wOS0yNiAxNDo0Mjo1MSAtMDcwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHJld29yayBjbGVhbnVwIG9mIHN0cmVhbXMKLQkgIE1vdmUgdGhlIHdvcmsgb2YgY2xlYW5pbmcgdXAgdGhlIGNsaWVudCBzdHJlYW1zIGluIHRoZSBmcmVlX3N0cmVhbQotCSAgZnVuY3Rpb24uIFRoaXMgYWxsb3dzIHVzIHRvIHByb3Blcmx5IGNsZWFuIHVwIHRoZSBjbGllbnQgc3RyZWFtcyB3aGVuIHdlCi0JICByZW1vdmUgYW4gUlRQIHN0cmVhbSBhcyB3ZWxsLgotCSAgQmFzZWQgb24gcGF0Y2ggYnkgU3VqYXkgPHNkYXRhckBjaXNjby5jb20+Ci0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwMTU2Ci0KLTIwMTMtMDItMDcgMTE6NDA6MzUgKzAxMDAgIFRpbSAnbWl0aHJvJyBBbnNlbGwgPGdub21lIGF0IG1pdGhpcy5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogYXZvaWQgY2FwcyBsZWFrCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzMzA3Ci0KLTIwMTMtMDItMDYgMTc6MTU6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBkbyBza2V3IGVzdGltYXRpb24gb25seSBmb3IgbmV3IHRpbWVzdGFtcHMKLQkgIE9ubHkgcnVuIHRoZSBza2V3IGVzdGltYXRpb24gY29kZSB3aGVuIHdlIGhhdmUgYSBuZXcgUlRQIHRpbWVzdGFtcC4gSWYgd2UgaGF2ZQotCSAgdGhlIHNhbWUgUlRQIHRpbWVzdGFtcCwgd2Ugc2ltcGx5IHVzZSB0aGUgcHJldmlvdXMgZXN0aW1hdGlvbi4gVGhpcyB3b3JrcwotCSAgYmVjYXVzZSB0aGUgbmV3IG9ic2VydmF0aW9uIHdpdGggdGhlIHNhbWUgUlRQIHRpbWVzdGFtcCBoYXMgdG8gaGF2ZSBhIGJpZ2dlcgotCSAgcmVjZWl2ZXIgdGltZSBhbmQgaXMgdGh1cyBub3QgZ29pbmcgdG8gaW5mbHVlbmNlIHRoZSBlc3RpbWF0aW9uIGV4Y2VwdCBmb3IKLQkgIGNhdXNpbmcgbW9yZSBqaXR0ZXIuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwMDIzCi0KLTIwMTMtMDItMDYgMTM6NTI6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG9ubHkgRU9TIHdoZW4gb3VyIHNvdXJjZSBzZW5kcyBCWUUKLQkgIE9ubHkgRU9TIHdoZW4gd2UgcmVjZWl2ZSBhIEJZRSBldmVudCBmcm9tIHRoZSBTU1JDIG9mIG91ciBzdHJlYW0uCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1NDUzCi0KLTIwMTMtMDItMDYgMTM6NDc6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHNhdmUgdGhlIHN0cmVhbSBTU1JDCi0JICBDb25mbGljdHM6Ci0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmMKLQotMjAxMy0wMi0wNiAxMzoxODoxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZmx1c2ggY29ubmVjdGlvbiB3aGVuIHN0b3BwaW5nCi0JICBXaGVuIHdlIHN0b3AsIHdlIGNhbiBmbHVzaCBhbGwgcGVuZGluZyBjb21tYW5kcyBzbyB0aGF0IHdlIGNhbiBzdG9wIGFuZAotCSAgam9pbiB0aGUgdGFzay4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ5MjQKLQotMjAxMy0wMi0wNSAyMjowMjoxMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL1JFQURNRToKLQkgIHNwZWN0cnVtOiByZW1vdmUgb3V0ZGF0ZXMgcmVhZG1lCi0JICBMZXRzIHJlbW92ZSB0aGUgcmVhZG1lIGZyb20gcHJlLTAuMS4wIHRoYXQgaXMgY29tcGxldGVseSBpcnJlbGV2YW50IG5vdy4KLQotMjAxMy0wMi0wNSAwNzozMjoyOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogYWRkIG1vcmUgZGVidWcgbG9nZ2luZwotCi0yMDEzLTAyLTA1IDA4OjI2OjE0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmM6Ci0JICBsZXZlbC1leGFtcGxlLiBhdm9pZCB0YWtpbmcgdGhlIGFycmF5cyBhZ2FpbiBmb3IgZWFjaCBjaGFubmVsIGZvciBjbGFyaXR5Ci0JICBBbHNvIGludHJvZHVjZSBzb21lIGJsYW5rIGxpbmVzIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkgYW5kIHVwZGF0ZSB0aGUgY29tbWVudHMuCi0KLTIwMTMtMDItMDQgMTg6Mzg6NDEgKzAwMDAgIFJpY28gVHpzY2hpY2hob2x6IDxyaWNvdHpAdWJ1bnR1LmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkgIGF1ZGlvcGFyc2VyczogZml4IHR5cG8gaW4gbm9pbnN0X2hlYWRlcnMKLQotMjAxMy0wMi0wNCAxMTowODoyMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogZnVydGhlciBwb3J0IHRvIDEuMAotCSAgVHJhbnNmb3JtY2FwcyBpcyBub3QgY2FsbGVkIHdpdGggY2FwcyBjb250YWluaW5nIHNpbmdsZSBzdHJ1Y3R1cmVzIGFueW1vcmUuIEFsc28gYWRkIG1pc3NpbmcgZmlsdGVyIGhhbmRsaW5nLiBTdGlsbCBkb2VzIG5vdCBuZWdvdGlhdGUgdGhvdWdoLgotCi0yMDEzLTAyLTAzIDIyOjQ1OjUyICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JICBhdWRpb3Bhbm9yYW1hOiBmaXggY2FwcwotCSAgV2UgZG9uJ3QgdHVybiBmbG9hdCBpbnRvIDMyYml0IHBjbS4gTG9va3MgbGlrZSBhIHR5cG8gZnJvbSB1cGRhdGluZyB0aGUgY2Fwcy4KLQotMjAxMy0wMi0wMyAxMzoxNDo1MCArMDEwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBsZXZlbDogQWRkIG1pc3NpbmcgY29tYSBiZXR3ZWVuIGZvcm1hdHMKLQotMjAxMy0wMS0zMSAyMjo1NToxOCArMTEwMCAgTWF0dGhldyBXYXRlcnMgPHlzdHJlZXQwMEBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBmaXggZW9zIHRpbWVzdGFtcCBjaGVjawotCSAgZml4ZXMgaGFuZyBpbiB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MjAgISB2aWRlb21peGVyICEgZmFrZXNpbmsKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI5MzUKLQotMjAxMy0wMS0zMSAxMTozNTowOSArMDEwMCAgRGlyayBWYW4gSGFlcmVuYm9yZ2ggPHZoZGlya0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGFkZCBzdXBwb3J0IGZvciByYXcgbW9ub2Nocm9tZSA4LWJpdCB2aWRlbwotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjkzMgotCi0yMDEzLTAxLTE4IDIxOjA4OjEyICswNDAwICBBbGV4ZXkgQ2hlcm5vdiA8YWNoZXJub3ZAbmVvc3BoZXJlLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkgIG9zeHZpZGVvc2luazogTWFrZSBHc3ROYXZpZ2F0aW9uIGtleSBpbnB1dCBldmVudHMgaW4gb3N4dmlkZW9zaW5rIGNvbXBhdGlibGUgd2l0aCB4KHYpaW1hZ2VzaW5rIG9uZXMKLQotMjAxMy0wMS0yOSAxMDozMDozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogYXZvaWQgJy4uLmlzIHVzZWQgdW5pbml0aWFsaXplZCcKLQotMjAxMy0wMS0wOSAxMzoyNDo0OSAtMDUwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzZXQgaW50ZXJsZWF2ZWQgbGF5b3V0IGNvcnJlY3RseSBmb3IgTFBDTSBhdWRpbwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzQ1OAotCi0yMDEzLTAxLTA4IDIwOjQ1OjIxIC0wNTAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBzdXBwb3J0IGZvciBMUENNIGZvdXJjYyAodW5jb21wcmVzc2VkIGF1ZGlvIGluIFF1aWNrdGltZTcpCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNDU4Ci0KLTIwMTMtMDEtMDggMjA6NDI6MzUgLTA1MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcHJpbnQgYWxsIGRlYnVnIGZvciBzb3VuZCBzYW1wbGUgZGVzY3JpcHRpb24gdjIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0NTgKLQotMjAxMy0wMS0wOCAyMDoxNDoxNyAtMDUwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzb3VuZCBzYW1wbGUgZGVzY3JpcHRpb24gdjIgZG9lc24ndCBvdmVycmlkZSBzYW1wbGVzX3Blcl9wYWNrZXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0NTgKLQotMjAxMy0wMS0wOCAxOTo1Nzo1MCAtMDUwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwYXNzIHN0c2QgZGF0YSB0byBxdGRlbXV4X2F1ZGlvX2NhcHMoKQotCSAgV2Ugd2lsbCBuZWVkIHRoYXQgbGF0ZXIgZm9yIExQQ00gZm9ybWF0IHN1cHBvcnQuIERpc2FibGUKLQkgIFFETTIgcGFyc2luZyBvZiBzdHNkIGRhdGEgd2hpY2ggZGVhZCBjb2RlIGJlZm9yZSBhcyB3ZWxsCi0JICBiZWNhdXNlIGRhdGEgd2FzIGFsd2F5cyBOVUxMLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzQ1OAotCi0yMDEzLTAxLTA4IDE5OjU2OjQ2IC0wNTAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBsZW4gY2hlY2sgZm9yIHNvdW5kIHNhbXBsZSBkZXNjcmlwdGlvbnMgdjEgYW5kIHYyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNDU4Ci0KLTIwMTMtMDEtMjggMjI6NDI6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwbWFuYWdlcjogdXNlIEM4OS1zdHlsZSBjb21tZW50cwotCi0yMDEzLTAxLTI4IDE4OjA2OjE1IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBnc3RydHBzZXNzaW9uOiBGaXggZG91YmxlLWRlY2xhcmVkIHZhcmlhYmxlCi0KLTIwMTMtMDEtMjggMTc6NTg6MjAgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwOiBGaXggY29tcGlsYXRpb24gZXJyb3JzIGluIHByZXZpb3VzIHBhdGNoZXMKLQotMjAxMS0wNC0yOCAyMjo1OToyOCArMDIwMCAgSGFha29uIFNwb3JzaGVpbSA8aGFha29uLnNwb3JzaGVpbUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IEVuc3VyZSBNVCBzYWZlIGV2ZW50IGhhbmRsaW5nIGFuZCBwbHVnIGV2ZW50IGxlYWsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODI2Ci0KLTIwMTEtMTAtMTcgMjM6NDU6MzcgKzAyMDAgIElkYXIgVG9sbGVmc2VuIDxpdG9sbGVmc0BjaXNjby5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IG10LXNhZmUgZXZlbnQtcHVzaAotCSAgQnkgdGFraW5nIGEgcmVmIG9mIHRoZSBzaW5rLXBhZCB1bmRlciBsb2NrLCBpdCB3b24ndCBkaXNzYXBwZWFyCi0JICB3aGlsZSB0aGUgcHVzaCBpcyB0YWtpbmcgcGxhY2UKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njc4MTYKLQotMjAxMi0wMS0wNCAxMDoyOTo0NSArMDEwMCAgUGFzY2FsIEJ1aGxlciA8cGFidWhsZXJAY2lzY28uY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogU2FmZWx5IHB1c2ggb24gcGFkcyB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQgZHVlIHRvIGEgUlRDUCBCWUUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njc4MTUKLQotMjAxMy0wMS0yOCAyMDo0MjoyNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGE5NDIyOTMgdG8gMmRlMjIxYwotCi0yMDEzLTAxLTI4IDExOjU0OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5jOgotCSAgc2JjcGFyc2U6IGluaXQgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgYm9ndXMgY29tcGlsZXIgd2FybmluZ3MKLQotMjAxMy0wMS0yOCAxMjo0MTowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JICBydHBkZXBheTogcmVtb3ZlIHBheWxvYWQgdHlwZSByZXN0cmljdGlvbnMKLQkgIFJlbW92ZSB0aGUgcHQgcmVzdHJpY3Rpb25zIGZvciBhbGwgdGhlIGRlcGF5bG9hZGVycyB0aGF0IGhhdmUgYW4KLQkgIGVuY29kaW5nLW5hbWUuIFdlIGNhbiB1c2UgdGhpcyB0byBhdXRvcGx1ZyBkZWNvZGVycy4KLQkgIFJlbW92ZSB0aGUgZW5jb2RpbmctbmFtZSBmb3IgYWxsIHRoZSBwYXlsb2FkZXJzIHdpdGggYSBmaXhlZCBwYXlsb2FkCi0JICB0eXBlLgotCSAgV2Ugbm93IGVpdGhlciBoYXZlIGFuIGVuY29kaW5nLW5hbWUgb3IgYSBwdCBpbiB0aGUgc2lua3BhZCBjYXBzIG9mCi0JICBhIGRlcGF5bG9hZGVyLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzkyOTIKLQotMjAxMy0wMS0yOCAxMjoyMzo0MSArMDEwMCAgTWFyYyBMZWVtYW4gPG1hcmMubGVlbWFuQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JICBydHA6IHJlbW92ZSBwYXlsb2FkIHJlcXVpcmVtZW50cyBmcm9tIHNlbGVjdGVkIGRlcGF5bG9hZGVycwotCSAgZW5jb2RpbmcgbmFtZSBpcyByZXF1aXJlZCBpbiB0aGUgY2FwcyBhbmQgaXMgYSBiZXR0ZXIgZml0IGZvciBhdXRvcGx1Z2dpbmcgdGhhbgotCSAgdGhlIHB0IHZhbHVlLiBIYXJkd2FyZSBtYW51ZmFjdHVyZXJzIGhhdmUgYSBiYWQgaGFiaXQgb2Ygc2tpbW1pbmcgdGhyb3VnaCBSRkNzCi0JICBhbmQgaW4gdGhpcyBjYXNlOyB1c2UgdW5hc3NpZ25lZCBudW1iZXJzIGZvciBlbmNvZGVycyBpbnN0ZWFkIG9mIGR5bmFtaWMKLQkgIG51bWJlcnMuCi0JICBJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIHdpbGwgYWRkIHN1cHBvcnQgZm9yIGEgbG90IG9mIEJvc2NoIGhhcmR3YXJlIGVuY29kZXJzCi0JICB3aXRob3V0IGJyZWFraW5nIGF1dG9wbHVnZ2luZy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzkyOTIKLQotMjAxMy0wMS0yNyAxMDoxNzo1OSArMDUzMCAgQi5QcmF0aGliaGEgPGJvc3NsaW51eEBjZGFjLmluPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9qYWNrL2phY2tfY2xpZW50LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWFsc2FzcmMtUENNQS5jOgotCSogdGVzdHMvaWNsZXMveGltYWdlc3JjLXRlc3QuYzoKLQkgIHRlc3RzOiB1c2UgZ190aW1lb3V0X2FkZF9zZWNvbmRzIGluc3RlYWQgb2YgZ190aW1lb3V0X2FkZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjYxNQotCi0yMDEzLTAxLTI3IDEyOjU0OjE1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcHVzaCBtb2RlOiBvbmx5IHBhcnNlIG1vb3YgMSBvbmNlCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxNTcwCi0KLTIwMTMtMDEtMjYgMjI6NTg6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIHJ0cGR0bWZzcmM6IGZpeCBjb21waWxlciB3YXJuaW5nCi0JICBnc3RydHBkdG1mc3JjLmM6IEluIGZ1bmN0aW9uICdnc3RfZHRtZl9zcmNfcHJlcGFyZV9tZXNzYWdlLmlzcmEuMSc6Ci0JICBnc3RydHBkdG1mc3JjLmM6NjY5OjM6IGVycm9yOiAncycgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uCi0KLTIwMTMtMDEtMjUgMjE6MDY6MDUgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSAgcnRwZHRtZmRlcGF5OiBGaXggbWlzc2luZyB3b3JrIGluIGRvYwotCi0yMDEzLTAxLTI0IDIxOjAwOjA4IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kdG1mLmM6Ci0JICB0ZXN0czogQWRkIHRlc3QgZm9yIHJ0cGR0bWZkZXBheSBhbmQgcnRwZHRtZnNyYwotCi0yMDEzLTAxLTI1IDIwOjM5OjMzIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBydHBkdG1mc3JjOiBQb3N0IHRoZSBtZXNzYWdlcyBhZnRlciB0aGUgY2xvY2sgd2FpdAotCSAgVGhpcyB3YXksIHRoZSBtZXNzYWdlcyB3aWxsIGJlIGNsb3NlciBpbiB0aW1lIHRvIHdoZW4gdGhlIHBhY2tldHMgYXJlIHNlbnQgb3V0Ci0KLTIwMTMtMDEtMjUgMjA6Mzc6NTMgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIHJ0cGR0bWZzcmM6IE9ubHkgc2V0IHRoZSBkdXJhdGlvbiB3aGVuIHN0YXJ0aW5nIHRvIHNlbmQKLQkgIFRoZSBkdXJhdGlvbiBkZXBlbmRzIG9uIHRoZSBjbG9jayByYXRlLCB3aGljaCBjb3VsZCBjaGFuZ2UgZHVlIHRvIHJlbmVnb3RpYXRpb24KLQotMjAxMy0wMS0yNSAyMDozNzowOSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgcnRwZHRtZnNyYzogcmVtb3ZlICJzc3JjIiBmcm9tIGNhcHMKLQkgIHNzcmMgaXMgdWludCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHVpbnQgcmFuZ2UgdHlwZQotCi0yMDEzLTAxLTI0IDIxOjA4OjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvaXNvbXA0L2F0b21zLmg6Ci0JICBxdG11eDogc2V0IGxhbmd1YWdlIHRvICd1bmRlZmluZWQnIGluc3RlYWQgb2YgRW5nbGlzaCBieSBkZWZhdWx0Ci0KLTIwMTMtMDEtMjMgMjE6MzU6MjUgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5oOgotCSAgeGltYWdlc3JjOiBTZXQgdGhlIHBpeGVsIGFzcGVjdCByYXRpbyBjb3JyZWN0bHkgaW4gdGhlIGNhcHMKLQotMjAxMy0wMS0wOCAwODo1Njo0NSArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBSZS1lbmFibGUgcHJlcGFyZS1mb3JtYXQgZW1pc3Npb24KLQkgIFdpdGggdGhlIHBvcnQgdG8gZ3N0cmVhbWVyIDEuMCB0aGUgcHJlcGFyZS1mb3JtYXQgc2lnbmFsIHN0b3BwZWQgYmVpbmcKLQkgIGVtaXR0ZWQuIFN0YXJ0IGVtaXR0aW5nIHRoaXMgYWdhaW4gZm9yIHVzZSBpbiB1dmNoMjY0c3JjLiAgV2hpbGUgdGhlcmUKLQkgIGNoYW5nZSB0aGUgZW1pc3Npb24gdG8gaW5jbHVkZSB0aGUgY2FwcyBmb3IgZXh0cmEgZmxleGliaWxpdHkgaW5zdGVhZCBvZgotCSAgZm91cmNlLCB3aWR0aCwgaGVpZ2h0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjA0MgotCi0yMDEzLTAxLTIyIDE4OjEyOjEwICswMTAwICBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAc3QuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYXV0b2dlbi5zaDogYWxsb3cgY2FsbGluZyBmcm9tIG91dC1vZi10cmVlCi0JICBTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAc3QuY29tPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MjMwOQotCi0yMDEzLTAxLTIyIDE5OjI2OjA5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0c2JjcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2Vyczogc2JjOiBmaXggYm9ndXMgY29tcGlsZXIgd2FybmluZwotCSAgZ3N0LXBsdWdpbnMtZ29vZC9nc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6IEluIGZ1bmN0aW9uICdnc3Rfc2JjX3BhcnNlX2hhbmRsZV9mcmFtZSc6Ci0JICBnc3QtcGx1Z2lucy1nb29kL2dzdC9hdWRpb3BhcnNlcnMvZ3N0c2JjcGFyc2UuYzoyMTA6MzI6IGVycm9yOiAnY2hfbW9kZScgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpCi0KLTIwMTMtMDEtMTkgMTM6Mjc6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZG9uJ3QgZXJyb3Igb3V0IGlmIHBhX3N0cmVhbV9wcm9wbGlzdF91cGRhdGUoKSB3aXRoIG5ldyB0YWdzIGZhaWxzCi0JICBTaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiB0aGVzZSBkYXlzLCBidXQgaWYgaXQgZG9lcywgaXQncyBub3QgcmVhbGx5Ci0JICBhIHByb2JsZW0gZWl0aGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NjA2OAotCi0yMDEzLTAxLTE2IDE4OjAxOjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIHRlc3RzOiBza2lwIHNvdXBodHRwc3JjIHRlc3RzIGlmIHRoZXJlIGlzIG5vIGxvY2FsIGh0dHAgc2VydmVyIHRvIHVzZQotCSAgU2tpcCB0ZXN0cyBpZiB0aGUgc2VydmVyIGNvdWxkbid0IGJlIHN0YXJ0ZWQgb3Igd2UgY2FuJ3QgY29ubmVjdAotCSAgdG8gaXQgZm9yIHNvbWUgcmVhc29uIChlLmcuIGRyYWNvbmljIGJ1aWxkIGJvdCBlbnZpcm9ubWVudHMpLgotCi0yMDEzLTAxLTE2IDE0OjMyOjU2ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6Ci0JICBhdXRvcGFyc2VyczogdXNlIGFwcHJvcHJpYXRlIHByaW50ZiBmb3JtYXQgZm9yIGdzaXplCi0KLTIwMTMtMDEtMTUgMTU6MDU6NDMgKzAxMDAgIE1hcnRpbiBQaXR0IDxtYXJ0aW5waXR0QGdub21lLm9yZz4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogdXNlIF8xXzAgdmFyaWFudHMgZm9yIHRoZSB2YXJpb3VzIHJlZ2lzdHJ5IHZhcmlhYmxlcwotCSAgVGhlc2Ugb3ZlcnJpZGUgdGhlIHZhcmlhbnRzIHdpdGhvdXQgdmVyc2lvbiBzdWZmaXguIE1ha2VzICdtYWtlIGNoZWNrJyB3b3JrCi0JICBwcm9wZXJseSBpbiBlbnZpcm9ubWVudHMgdGhhdCBzZXQgdGhlIHN1ZmZpeGVkIHZhcmlhbnQgZm9yIDEuMCwgc3VjaCBhcwotCSAgamhidWlsZC4KLQotMjAxMy0wMS0xMSAxOToyNDo0MyArMDQwMCAgQWxleGV5IENoZXJub3YgPGFjaGVybm92QG5lb3NwaGVyZS5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBGaXggY3Jhc2ggaW4gb3N4dmlkZW9zaW5rIHdpdGggZXh0ZXJuYWwgd2luZG93IG91dHB1dAotCi0yMDEzLTAxLTE2IDEyOjA0OjU5ICswNDAwICBBbGV4ZXkgQ2hlcm5vdiA8YWNoZXJub3ZAbmVvc3BoZXJlLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06Ci0JICBvc3h2aWRlb3Npbms6IE1ha2UgR3N0R0xWaWV3IHByb3BhZ2F0ZSBpbnB1dCBldmVudHMgdG8gaXRzIHBhcmVudCB2aWV3Ci0JICBGaXhlcyBidWcgIzY5MTgzMgotCi0yMDEzLTAxLTE2IDEwOjE5OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkgIHJ0cHNiY3BheTogdXBkYXRlIHNvbWUgZmllbGRzIGluIHRoZSBjYXBzIHRvIHRoZWlyIG5ldyBuYW1lCi0JICBhbmQgdG8gbWF0Y2ggdGhlIHBhcnNlci4gIm1vZGUiIGdvdCByZW5hbWVkIHRvICJjaGFubmVsLW1vZGUiCi0JICBhbmQgImFsbG9jYXRpb24iIHRvICJhbGxvY2F0aW9uLW1ldGhvZCIuCi0KLTIwMTMtMDEtMTUgMTc6NDQ6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSAgZG9jczogYWRkIHNiY3BhcnNlIGFuZCBydHBzYmNwYXkgdG8gcGx1Z2luIGRvY3MKLQotMjAxMy0wMS0xNSAxNzozODoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL3BsdWdpbi5jOgotCSAgYXVkaW9wYXJzZXJzOiBhZGQgU0JDIGF1ZGlvIHBhcnNlcgotCSAgRnJvbS1zY3JhdGNoIHJld3JpdGUsIHRoZSBibHVleiBvbmUgd2FzIHVzZWxlc3MgYW5kIGJyb2tlbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTA1ODIKLQotMjAxMy0wMS0xNSAxNTowNTowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBhNzJmYWVhIHRvIGE5NDIyOTMKLQotMjAxMy0wMS0xMCAxMjozODoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5Lmg6Ci0JICBydHA6IGltcG9ydCBydHBzYmNwYXkgZnJvbSBibHVleiBhbmQgcG9ydCB0byAxLjAKLQkgIENvbXBpbGVzLCBidXQgbm90IHRlc3RlZCB5ZXQgKHNiYyBlbGVtZW50cyBzdGlsbCBuZWVkIHRvIGJlIHBvcnRlZCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwNTgyCi0KLTIwMTMtMDEtMDkgMTk6NTk6MTYgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kdG1mL01ha2VmaWxlLmFtOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZi5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5oOgotCSogZ3N0L2R0bWYvdG9uZV9kZXRlY3QuYzoKLQkqIGdzdC9kdG1mL3RvbmVfZGV0ZWN0Lmg6Ci0JICBkdG1mL3NwYW5kc3A6IE1vdmUgZHRtZmRldGVjdCB0byB1c2UgbGlic3BhbmRzcAotCSAgUmVtb3ZlIG91ciBjb3B5IG9mIHRoZSB0b25lX2RldGVjdC5jIGZpbGUgYW5kIHVzZSB0aGUgb3JpZ2luYWwKLQkgIGZyb20gbGlic3BhbmRzcC4gQWxzbyBtb3ZlIHRoZSBlbGVtZW50IHRvIHRoZSBzcGFuZHNwIHBsdWdpbi4KLQotMjAxMS0wMi0xMyAxNzo1MTo0NSAtMDgwMCAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5oOgotCSAgcnRwc2JjcGF5OiBSZW1vdmUgd29ya2Fyb3VuZCBmb3IgY29tcGlsZXIgd2FybmluZ3MKLQotMjAxMC0wNS0xOSAxNjo1OTozMCArMDIwMCAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5jOgotCSAgcnRwc2JjcGF5OiBBZGQgcHJhZ21hIGJhc2VkIHdvcmthcm91bmQgZm9yIEdTdHJlYW1lciB3YXJuaW5ncwotCi0yMDEwLTAxLTAxIDE3OjA4OjE3IC0wODAwICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5oOgotCSAgcnRwc2JjcGF5OiBVcGRhdGUgY29weXJpZ2h0IGluZm9ybWF0aW9uCi0KLTIwMDktMDEtMzAgMDA6MzE6MTUgKzAxMDAgIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkgIHJ0cHNiY3BheTogRml4IHNpZ25lZC91bnNpZ25lZCBjb21wYXJpc29uIGlzc3VlIHdpdGhpbiBHU3RyZWFtZXIgcGx1Z2luCi0KLTIwMDktMDEtMDEgMTk6MzM6MjAgKzAxMDAgIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5Lmg6Ci0JICBydHBzYmNwYXk6IFVwZGF0ZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24KLQotMjAwOC0xMi0yMyAwNToyNTo1MCArMDEwMCAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5oOgotCSAgcnRwc2JjcGF5OiBGaXJzdCBhdHRlbXB0IGluIGZpeGluZyBjb21waWxlciB3YXJuaW5ncyAoc3RpbGwgbmVlZHMgY2xlYW51cCkKLQotMjAwOC0xMi0yMCAyMTo0Mjo0OSArMDIwMCAgSm9oYW4gSGVkYmVyZyA8am9oYW4uaGVkYmVyZ0Bub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JICBydHBzYmNwYXk6IE1vcmUgY29kaW5nIHN0eWxlIGZpeGVzCi0KLTIwMDgtMDItMjkgMTk6Mzc6MTUgKzAwMDAgIEx1aXogQXVndXN0byB2b24gRGVudHogPGx1aXouZGVudHpAb3BlbmJvc3NhLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkgIHJ0cHNiY3BheTogUmVtb3ZlIHBvc3NpYmxlIGV4dHJhIG1lbWNweSBmb3IgZ3N0cmVhbWVyIHBsdWdpbi4KLQotMjAwOC0wMi0yOCAxOTozODo1MyArMDAwMCAgTHVpeiBBdWd1c3RvIHZvbiBEZW50eiA8bHVpei5kZW50ekBvcGVuYm9zc2Eub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5jOgotCSAgcnRwc2JjcGF5OiBGaXggYnVnIHNlbmRpbmcgZW1wdHkgcGFja2FnZXMgYW5kIHJlbW92ZSBhIGJ1ZmZlciBjb3B5LgotCi0yMDA4LTAyLTIwIDEzOjM3OjAwICswMDAwICBMdWl6IEF1Z3VzdG8gdm9uIERlbnR6IDxsdWl6LmRlbnR6QG9wZW5ib3NzYS5vcmc+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JICBydHBzYmNwYXk6IEZpeCBydW50aW1lIHdhcm5pbmdzIG9mIGdzdHJlYW1lciBwbHVnaW4uCi0KLTIwMDgtMDItMTkgMTk6NDk6MjQgKzAwMDAgIEx1aXogQXVndXN0byB2b24gRGVudHogPGx1aXouZGVudHpAb3BlbmJvc3NhLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkgIHJ0cHNiY3BheTogVXBkYXRlIGdzdHJlYW1lciBwbHVnaW4gdG8gdXNlIG5ldyBzYmMgQVBJLgotCi0yMDA4LTAyLTAyIDAzOjM3OjA1ICswMDAwICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5oOgotCSAgcnRwc2JjcGF5OiBVcGRhdGUgY29weXJpZ2h0IGluZm9ybWF0aW9uCi0KLTIwMDgtMDEtMzAgMTQ6MjE6NDMgKzAwMDAgIEx1aXogQXVndXN0byB2b24gRGVudHogPGx1aXouZGVudHpAb3BlbmJvc3NhLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkgIHJ0cHNiY3BheTogRml4ZXMgZ3N0cmVhbWVyIGNhcHMgYW5kIGNvZGUgY2xlYW51cC4KLQotMjAwOC0wMS0yNCAxNDoyNToyOSArMDAwMCAgTHVpeiBBdWd1c3RvIHZvbiBEZW50eiA8bHVpei5kZW50ekBvcGVuYm9zc2Eub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNiY3BheS5jOgotCSAgcnRwc2JjcGF5OiBGaXggZ3RyZWFtZXIgcGF5bG9hZGVyIHNlbmRpbmcgZnJhZ21lbnRlZCBmcmFtZXMuCi0KLTIwMDgtMDEtMjMgMTk6MTc6MzMgKzAwMDAgIEx1aXogQXVndXN0byB2b24gRGVudHogPGx1aXouZGVudHpAb3BlbmJvc3NhLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5Lmg6Ci0JICBydHBzYmNwYXk6IEZpeCB1c2Ugb2YgZ3N0cmVhbWVyIHBsdWdpbiB3aXRoIHJoeXRobWJveCBhbmQgYmFuc2hlZSBhbmQgcnRwIHRpbWVzdGFtcHMuCi0KLTIwMDgtMDEtMjMgMTM6MTQ6MDIgKzAwMDAgIEx1aXogQXVndXN0byB2b24gRGVudHogPGx1aXouZGVudHpAb3BlbmJvc3NhLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHBzYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2JjcGF5Lmg6Ci0JICBydHBzYmNwYXk6IE1ha2UgYTJkcHNpbmsgdG8gYWN0IGxpa2UgYSBiaW4gYW5kIHNwbGl0IHRoZSBwYXlsb2FkZXIuCi0KLTIwMTMtMDEtMDggMTY6Mjc6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cDogc21hbGwgaW1wcm92ZW1lbnRzCi0KLTIwMTMtMDEtMDcgMTU6NTA6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiByZWZhY3RvciBoYW5kbGUgc3luYyBjb2RlCi0JICBNb3ZlIHRoZSBjb2RlIHRoYXQgY29tYmluZXMgdGhlIGxhc3QgU1IgcGFja2V0IGFuZCB0aGUgY3VycmVudCBqaXR0ZXJidWZmZXIgc3luYwotCSAgdmFsdWVzIGludG8gYSBzeW5jIHN0cnVjdHVyZSwgaW50byBpdHMgb3duIGZ1bmN0aW9uLiBXZSB3YW50IHRvIHJldXNlIHRoaXMgYml0Ci0JICBsYXRlci4KLQotMjAxMy0wMS0wNyAxNTo0NToxMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwOiBpbmNsdWRlIGRvd25zdHJlYW0gbGF0ZW5jeSBpbiBTUiBjYWxjdWxhdGlvbnMKLQkgIFdoZW4gd2UgbWFrZSBhIG1hcHBpbmcgYmV0d2VlbiBhbiBSVFAgdGltZXN0YW1wIGFuZCBhbiBOVFAgdGltZXN0YW1wLCBpbmNsdWRlCi0JICB0aGUgZG93bnN0cmVhbSBsYXRlbmN5IGFwcGxpZWQgdG8gdGhlIHNpbmtzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhdmUKLQkgIGJvdGggc2lua3MgcnVuIHdpdGggZGlmZmVyZW50IGxhdGVuY2llcyBhbmQgc3RpbGwgaGF2ZSBjb3JyZWN0IHN5bmMgb24gdGhlCi0JICBjbGllbnQuIEl0IGFsc28gaXMgbW9yZSBjb3JyZWN0IGJlY2F1c2UgdGhlIFJUUCB0aW1lc3RhbXAgaW4gdGhlIFNSIHJlcG9ydCB3aWxsCi0JICBhY3R1YWxseSBjb3JyZXNwb25kIG1vcmUgY2xvc2VseSB0byB0aGUgTlRQIHRpbWUgaXQgd2FzIHNlbnQgb24gdGhlIHNlcnZlci4KLQkgIEZvciBwaXBlbGluZXMgd2l0aCBoaWdoIGxhdGVuY3kgb24gdGhlIHNlbmRlciBzaWRlLCB0aGlzIGFjdHVhbGx5IGFsbG93cyBhCi0JICBHU3RyZWFtZXIgcmVjZWl2ZXIgdG8gcGVyZm9ybSBzeW5jaHJvbmlzYXRpb24gaW5zdGVhZCBvZiBkcm9wcGluZyB0aGUgUlRDUAotCSAgcGFja2V0cy4KLQotMjAxMy0wMS0wNyAxNDoyNToxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogZG9uJ3QgY2FzdCBldmVudCBmdW5jdGlvbnMKLQkgIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2FzdCB0aGUgZXZlbnQgZnVuY3Rpb25zIGFuZCBvbmx5IGNhdXNlcyBwcm9ibGVtcyBsYXRlciB3aGVuCi0JICB3ZSBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBsYXRlciBhbmQgdGhpbmdzIHNpbGVudGx5IGNvbXBpbGVzIHdyb25nIGNvZGUuCi0KLTIwMTMtMDEtMDcgMTQ6MjM6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cDogbW9yZSBkZWJ1ZwotCi0yMDEzLTAxLTA3IDE0OjIyOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBpbXByb3ZlIGRlYnVnCi0KLTIwMTMtMDEtMDIgMDA6MDM6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IHNhbml0eSBjaGVjayBzaXplIG9mIGF2YWlsYWJsZSBwYWNrZXQgZGF0YSBmb3IgcmVhZGluZyB0byBhdm9pZCBtZW1vcnkgd2FzdGUKLQkgIE9uIFdpbmRvd3MgYW5kIE9TL1gsIF9nZXRfYXZhaWxhYmxlX2J5dGVzKCkgbWF5IG5vdCByZXR1cm4gdGhlIHNpemUKLQkgIG9mIHRoZSBuZXh0IHBlbmRpbmcgcGFja2V0LCBidXQgdGhlIHNpemUgb2YgYWxsIHBlbmRpbmcgcGFja2V0cyBpbgotCSAgdGhlIGtlcm5lbC1zaWRlIGJ1ZmZlciwgd2hpY2ggbWlnaHQgYmUgcmF0aGVyIGxhcmdlIGRlcGVuZGluZyBvbgotCSAgY29uZmlndXJhdGlvbi4gU2FuaXR5LWNoZWNrIHRoZSBzaXplIHJldHVybmVkIGJ5IF9nZXRfYXZhaWxhYmxlX2J5dGVzKCkKLQkgIHRvIG1ha2Ugc3VyZSB3ZSBuZXZlciBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIHRoZSBtYXguIHNpemUgZm9yCi0JICBhIHBhY2tldCwgaWYgaXQncyBhbiBJUHY0IHNvY2tldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTAzNjQKLQotMjAxMy0wMS0wNCAxMDowMzozMiArMDEwMCAgUm9iZXJ0IEtyYWtvcmEgPHJvYi5rcmFrb3JhQG1lc3NhZ2VuZXRzeXN0ZW1zLmNvbT4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogQWxzbyBoYW5kbGUgdGhlIG5ldyBFTk9FTlQgcmV0dXJuIHZhbHVlIG9mIFZJRElPQ19RVUVSWUNUUkwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEwOTgKLQotMjAxMy0wMS0wMSAxOToxNDozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIHRlc3RzOiBhZGQgdGVzdCBmb3Igc291cGh0dHBzcmMgZXJyb3IgaGFuZGxpbmcgd2l0aCBkYXRhCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4NDI5Ci0KLTIwMTItMDYtMjIgMjE6NTY6NTIgKzAwMDAgIE5vcmJlcnQgV2FzY2hidWVzY2ggPG53YXNjaGJ1QG9wZW50di5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogZXJyb3Igb3V0IHByb3Blcmx5IHdoZW4gcmVjZWl2aW5nIGRhdGEgYWxvbmcgd2l0aCBhbiBlcnJvciBzdGF0dXMKLQkgIFdoZW4gcmVjZWl2aW5nIGFuIGVycm9yIGNvZGUgZnJvbSB0aGUgaHR0cCBzZXJ2ZXIsIHN1Y2ggYXMgNDA0LAotCSAgZGF0YSBtaWdodCBiZSBzZW50IGFsb25nIHdpdGggaXQsIGxpa2UgYSB3ZWIgcGFnZS4gV2UgZG9uJ3Qgd2FudAotCSAgdG8gb3V0cHV0IHRoYXQgZGF0YSBpbiB0aGlzIGNhc2UsIGFuZCB3ZSBhbHNvIHdhbnQgdG8gcGFzcyB0aGUKLQkgIEZMT1dfRVJST1IgcmV0dXJuIGJhY2sgdG8gdGhlIGJhc2UgY2xhc3MsIHNvIGl0IGNhbiBzdG9wIHByb3Blcmx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3ODQyOQotCi0yMDEzLTAxLTAxIDEyOjIwOjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICBkb2NzOiB1cGRhdGUgZm9yIG5ldyBydHNwc3JjIHByb3h5LWlkIGFuZCBwcm94eS1wdyBwcm9wZXJ0aWVzCi0KLTIwMTMtMDEtMDEgMTI6MTk6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JICBkb2NzOiBmaXggZG9jcyBidWlsZCBhbmQgdXBkYXRlIGFmdGVyIHJlbW92YWwgb2Ygb2xkIGNhaXJvIGVsZW1lbnRzCi0KLTIwMTMtMDEtMDEgMTI6MTI6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGV4dC9jYWlyby9NYWtlZmlsZS5hbToKLQkqIGV4dC9jYWlyby9nc3RjYWlyby5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvcmVuZGVyLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuaDoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5Lmg6Ci0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5oOgotCSAgY2Fpcm86IHJlbW92ZSBvbGQgY2Fpcm8tYmFzZWQgdGV4dCByZW5kZXJlcmluZyBlbGVtZW50Ci0JICBUaGV5IGhhdmVuJ3Qgd29ya2VkIHdlbGwgb3IgYXQgYWxsIGluIGEgdmVyeSBsb25nIHRpbWUKLQkgIGFuZCB3ZXJlIHJhdGhlciBiaXQtcm90dGVuLCBhbmQgdGhlcmUncyBubyBuZWVkIGZvciB0aGVtCi0JICBhbnkgbW9yZS4KLQotMjAxMy0wMS0wMSAxMTo1MjowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2NhaXJvLy5naXRpZ25vcmU6Ci0JKiBleHQvY2Fpcm8vTWFrZWZpbGUuYW06Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm8tbWFyc2hhbC5saXN0OgotCSogZXh0L2NhaXJvL2dzdGNhaXJvLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5Lmg6Ci0JKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvY2Fpcm8vY2Fpcm9fb3ZlcmxheS5jOgotCSAgY2Fpcm86IHBvcnQgY2Fpcm9vdmVybGF5IHRvIDAuMTEKLQkgIFRoZSBvdGhlciBlbGVtZW50cyBhcmUgbm90IHRoYXQgaW50ZXJlc3Rpbmcgbm93IHRoYXQgd2UncmUKLQkgIHVzaW5nIHBhbmdvY2Fpcm8gaW4gdGhlIHBhbmdvIHBsdWdpbiwgYW5kIHNob3VsZCBwcm9iYWJseQotCSAganVzdCBiZSByZW1vdmVkLgotCi0yMDEyLTEyLTMxIDE4OjU5OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWRlY29kZWJpbi1IMjYzcC1BTVIuc2g6Ci0JICBleGFtcGxlczogY2hlY2sgZm9yIHVyaSBhcmd1bWVudCBpbiBkZWNvZGViaW4taDI2NHAtYW1yIHNlcnZlciBleGFtcGxlCi0JICBPdGhlcndpc2UgcGVvcGxlIGdldCBhIHJhdGhlciBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZS4KLQotMjAxMi0xMi0zMSAwMDoyMjoyNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogYWRkICJwcm94eS1pZCIgYW5kICJwcm94eS1wdyIgcHJvcGVydGllcwotCSAgdG8gbWF0Y2ggc291cGh0dHBzcmMuIHVzZXIvcGFzc3dvcmQgcGFzc2VkIHZpYSB0aGUgVVJJCi0JICB3aWxsIHN0aWxsIHRha2UgcHJlY2VkZW5jZSB0aG91Z2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk1NDI3Ci0KLTIwMTItMTItMjUgMTY6NDg6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHN5cy9vc3M0L29zczQtc2luay5jOgotCSAgb3NzNHNpbms6IG5vdGlmeSAidm9sdW1lIiBwcm9wZXJ0eSBvbiBvcGVuIHRvIG1ha2UgYXBwcyBxdWVyeSBpbml0aWFsIHZvbHVtZQotCSAgVGhlIGluaXRpYWwgdm9sdW1lIG1pZ2h0IG5vdCBiZSB0aGUgcHJvcGVydHkgZGVmYXVsdCwgc28KLQkgIGVtaXQgYSBub3RpZnkgb24gdGhlIHZvbHVtZSBwcm9wZXJ0eSB0byBtYWtlIGFwcHMgZ2V0Ci0JICBhbiB1cC10by1kYXRlIHJlYWRpbmcgb2YgdGhlIGN1cnJlbnQgdm9sdW1lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTA1MwotCi0yMDEyLTEyLTIwIDE3OjEyOjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggY21kIGNvbXBhcmlzb24KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTA0NzYKLQotMjAxMi0xMi0yMCAxNzoxMjoyMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogYWRkIHNvbWUgbW9yZSBkZWJ1ZwotCi0yMDEyLTEyLTIwIDE2OjQ0OjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcmF3MTM5NC9nc3QxMzk0Y2xvY2suYzoKLQkgIDEzOTRjbG9jazogbWFyayBvdXIgY2xvY2sgdHlwZSBhcyBPVEhFUgotCi0yMDEyLTEyLTIwIDE2OjE1OjEzICswMTAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIHRlc3RzOiBhZGQganBlZ3BheSB1bml0IHRlc3QKLQkgIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ5NTUKLQotMjAxMi0xMi0yMCAxNTo1NTowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSAganBlZ2VuYzogcGFzcyBmbG93cmV0dXJuIHVwc3RyZWFtCi0KLTIwMTItMDktMjcgMTU6NDI6NTYgKzAyMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hc2hnQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXk6IGhhbmRsZSB3aWR0aCBhbmQgaGVpZ2h0ID4gMjA0MAotCSAgSWYgd2lkdGggb3IgaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiAyMDQwIHNldCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHplcm8gaW4KLQkgIHRoZSBydHAgaGVhZGVyIGFuZCBhZGQgeC1kaW1lbnNpb25zIHRvIG91dGNhcHMuCi0JICBTb2x2ZXMgIzY4NDk1NQotCi0yMDEyLTEyLTIwIDEzOjAzOjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogY2xlYW51cCBpbiBmbGFnIGRlZmluZQotCi0yMDEyLTEyLTIwIDEzOjAyOjU3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogaW1wcm92ZSBkZWJ1ZwotCi0yMDEyLTEyLTE4IDE1OjU2OjU5ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICB3YXZwYWNrOiB1c2UgYXBwcm9wcmlhdGUgcHJpbnRmIGZvcm1hdCBmb3IgZ3NpemUKLQotMjAxMi0xMi0xOCAxNTo1NTo0MyArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIHRhZ2xpYjogdXNlIGFwcHJvcHJpYXRlIHByaW50ZiBmb3JtYXQgZm9yIGdzaXplCi0KLTIwMTItMTItMTggMTU6NTQ6MDggKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZmRlYy5jOgotCSAgZ2RrcGl4YnVmOiB1c2UgYXBwcm9wcmlhdGUgcHJpbnRmIGZvcm1hdCBmb3IgZ3NpemUKLQotMjAxMi0xMi0xOCAxNTo1MTo0NiArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSAgcnRwOiB1c2UgYXBwcm9wcmlhdGUgcHJpbnRmIGZvcm1hdCBmb3IgZ3NpemUKLQotMjAxMi0xMi0xOCAxNTo0Njo1NiArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogdXNlIGFwcHJvcHJpYXRlIHByaW50ZiBmb3JtYXQgZm9yIGdzaXplCi0KLTIwMTItMTItMTcgMTY6MzU6NTYgKzAxMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxuQGlnYWxpYS5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaDoKLQkgIGludGVybGVhdmU6IHNldCBzcmMgcGFkIGNhcHMgdXBvbiBsYXN0IHNpbmsgcGFkIENBUFMgZXZlbnQKLQkgIEdhdGhlciBjYXBzIG9uIGFsbCBzaW5rIHBhZHMgYmVmb3JlIHNldHRpbmcgdGhlIHNyYyBwYWQgY2Fwcy4gVGhpcyBpcwotCSAgc3BlY2lhbGx5IG5lZWRlZCB3aGVuIHRoZSBhdWRpbyBjaGFubmVsIG1hcHBpbmcgaXMgc2V0IG9uIHRoZSBzaW5rCi0JICBwYWRzIGFuZCB0aGUgZWxlbWVudCBuZWVkcyB0byBwcmVzZXJ2ZSBpdCBvbiBpdHMgc3JjIHBhZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTAyNjcKLQotMjAxMi0xMi0xNyAyMjo1NToxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBza2lwIGVtcHR5IHRhZ3MKLQkgIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFkZCB0YWdzIHdpdGggZW1wdHkgc3RyaW5ncywgd2hpY2gKLQkgIGNhdXNlcyBjcml0aWNhbHMgYXQgcnVudGltZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTAzNTgKLQotMjAxMi0xMi0xNyAxNToxNzoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBNYWtlIHN1cmUgdGhlIGNhcHMgYXJlIGFjdHVhbGx5IHdyaXRhYmxlIGJlZm9yZSBjaGFuZ2luZyB0aGVtCi0KLTIwMTItMTItMTcgMTU6MDE6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogVXNlIHRoZSBwZWVyIGNhcHMgZm9yIHJlc3RyaWN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzcmNwYWQgYWxsb3dlZCBjYXBzCi0JICBPdGhlcndpc2Ugd2Ugd2lsbCBpbnRlcnNlY3Qgd2l0aCB0aGUgc3JjcGFkIHRlbXBsYXRlIGNhcHMgYW5kIGFkZCBhbGwgdGhlIGNhcHMgZmllbGRzCi0JICB0aGF0IHRoZSBwYXJzZXIgd2lsbCBldmVyIHNldCwgbm8gbWF0dGVyIGlmIGRvd25zdHJlYW0gcmVzdHJpY3RzIHRoaXMgZmllbGQgb3Igbm90LgotCSAgVGhpcyByZXF1aXJlcyB1cHN0cmVhbSB0byBzZXQgdGhpcyBmaWVsZCBvbiB0aGUgY2FwcyB0byBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDE4NAotCi0yMDEyLTEyLTE0IDIyOjI1OjA4ICswMDAwICBLb29wIE1hc3QgPGt3bUByYWluYm93LXJ1bm5lci5ubD4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMjogVGVhY2ggd2hlcmUgdGhlIHZpZGVvZGV2Mi5oIGhlYWRlciBsaXZlcyBvbiBmcmVlYnNkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MDIzMwotCi0yMDEyLTEyLTE2IDIzOjI3OjQxICswMDAwICBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBzZXQgYXBwcm9wcmlhdGUgYmxvY2sgaGVhZGVyIGZsYWcgZm9yIFZQOCBpbnZpc2libGUgZnJhbWVzCi0JICBVc2VmdWwgZm9yIGRlYnVnZ2luZyBtb3N0bHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0MjU5Ci0KLTIwMTItMTItMTYgMTU6MjU6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkgIGRvY3M6IGFkZCBydHBtdXggYW5kIHJ0cGR0bWZtdXggdG8gcGx1Z2luIGRvY3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjkxMTcKLQotMjAxMi0xMi0xNiAxNToxMzozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtYW5hZ2VyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXhlci5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgcnRwbWFuYWdlcjogbW92ZSBydHBtdXggYW5kIHJ0cGR0bWZtdXggZWxlbWVudHMgZnJvbSAtYmFkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5MTE3Ci0KLTIwMTItMTEtMDMgMjA6Mzg6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXhlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmM6Ci0JICBydHBtdXg6IEZpeCBGU0YgYWRkcmVzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzUyMAotCi0yMDEyLTEwLTE3IDE3OjM0OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFVzZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKCkKLQkgIHdoZXJlIHBvc3NpYmxlLiBBdm9pZHMgc29tZSBzdHJpbmcgY29waWVzLiBBbHNvIHJlLWluZGVudAotCSAgc29tZSBzdHVmZi4gQWxzbyBzb21lIGluZGVudCBmaXhlcyBoZXJlIGFuZCB0aGVyZS4KLQotMjAxMi0wOS0xMCAyMDozODoxNCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBtdXguYzoKLQkgIHJ0cG11eDogTWlzYyBmaXggZm9yIDAuMTEKLQkgIENvbnZlcnQgdGhlIGluY29taW5nIGNhcHMgYmVmb3JlIHByb3h5aW5nIHRoZW0KLQkgIENsZWFyIHRoZSBsYXN0X3BhZCB3aGVuIGdvaW5nIHRvIHJlYWR5Ci0JICB0ZXN0czogSW1wbGVtZW50IGFjY2VwdF9jYXBzLCBkb24ndCBsZWFrIGV2ZW50Ci0KLTIwMTItMDctMTcgMTY6Mzk6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiB1cGRhdGUgZm9yIFJUUCBidWZmZXIgYXBpIGNoYW5nZXMKLQotMjAxMi0wNC0wNSAxODowMjo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eGVyLmM6Ci0JICBydHBtdXg6IFVwZGF0ZSBmb3IgR1NUX1BMVUdJTl9ERUZJTkUoKSBBUEkgY2hhbmdlcwotCi0yMDEyLTA0LTAyIDExOjA3OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogZml4IGNvbXBpbGF0aW9uCi0KLTIwMTItMDMtMTEgMTk6MDY6NTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBmaXggZm9yIGNhcHMgYXBpIGNoYW5nZXMKLQotMjAxMi0wMS0yNiAwNjo1ODo0NiAtMDUwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IEZpeCBjb21waWxlciB3YXJuaW5ncwotCi0yMDEyLTAxLTI5IDE4OjAxOjA1ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogVW5yZWYgbm9uLWZvcndhcmRlZCBldmVudHMKLQkgIEFsc28sIGRvbid0IHVucmVmIGZvcndhcmRlZCBvbmVzCi0KLTIwMTItMDEtMjggMTY6NTc6MDMgKzAwMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiByZXN5bmMgaXRlcmF0b3Igb24gcmVzeW5jCi0KLTIwMTItMDEtMjcgMTI6MDg6NTIgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBtdXg6IFJlLXB1c2ggc3RpY2t5IGV2ZW50cyBvbiBpbnB1dCBwYWQgY2hhbmdlCi0KLTIwMTItMDEtMjUgMTU6NDM6MDEgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBEb24ndCBsZWFrIGd2YWx1ZSBmcm9tIGl0ZXJhdG9yCi0KLTIwMTItMDEtMjUgMTY6NDY6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBtb3JlIHBvcnRpbmcKLQotMjAxMi0wMS0yNCAxNDoyMDo1MiArMDEwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cG11eC5jOgotCSAgcnRwbXV4OiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMS0wNCAxMjoyMjozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IG1ha2UgcmVxdWVzdCBwYWRzIHRha2UgXyV1Ci0KLTIwMTEtMDQtMTQgMTQ6MzQ6MjYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguaDoKLQkgIHJ0cGR0bWZtdXg6IEFkZCBsYXN0LXN0b3AgdG8gZHRtZi1ldmVudCB1cHN0cmVhbSBldmVudHMKLQkgIEFkZCB0aGUgcnVubmluZyB0aW1lIG9mIHRoZSBsYXN0IG91dHB1dHRlZCBidWZmZXIgdG8gdGhlCi0JICB1cHN0cmVhbSAiZHRtZi1ldmVudCIgZXZlbnRzIHNvIHRoYXQgdGhlIGR0bWYgc291cmNlIGRvZXMgbm90Ci0JICBsZWF2ZSBhIGdhcC4KLQotMjAxMC0xMS0yNSAxOToyMToxMSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCi0KLTIwMTAtMTAtMTkgMTM6NDM6MTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IGFkZCBtaXNzaW5nIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZmxhZ3MKLQkgIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyBhcyBuZWVkZWQuCi0KLTIwMTAtMDktMzAgMTY6MDc6MjkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IEltcHJvdmUgZG9jdW1lbnRhdGlvbgotCSAgQWRkIGFuIGV4YW1wbGUgcGlwZWxpbmUsIGFuZCB0cnkgdG8gZXhwbGFpbiBhIGJpdCBtb3JlIHdoYXQgaXQgZG9lcy4KLQotMjAxMC0wOS0yNCAxMzoyOTo1NSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBydHBkdG1mbXV4OiByZW1vdmUgdW51c2VkIHZhcmlhYmxlCi0KLTIwMTAtMDktMjQgMTM6MjU6MjIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwZHRtZm11eDogcmVtb3ZlIHVudXNlZCBzaWduYWwgYm9pbGVycGxhdGUKLQotMjAxMC0wOS0yNCAxMzoyNDo0OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogbm8gbmVlZCB0byByZWYgcGFkIGluIF9jaGFpbigpCi0KLTIwMTAtMDgtMjUgMjI6NTY6MDMgLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBVbmxvY2sgdGhlIHJpZ2h0IG11dGV4Ci0JICBUaGUgbXV0ZXggbG9ja2VkIGlzIGZvciB0aGUgJ211eCcgb2JqZWN0LCBidXQgd2UgdW5sb2NrIHRoZQotCSAgcGFkLCB3aGljaCBtZWFucyB0aGF0IGlmIHRoZSBydHBtdXggZ2V0cyBhIGZsdXNoLCB0aGVuIHRoZQotCSAgb2JqZWN0IGxvY2sgd2lsbCBzdGF5IGxvY2tlZCBmb3JldmVyLCBjYXVzaW5nIGl0IHRvIGZyZWV6ZQotCSAgdGhlIG5leHQgdGltZSBpdCB0cmllcyB0byB0YWtlIGl0LgotCSAgRml4ZXMgYnVnICM2Mjc5OTEKLQotMjAxMC0wNy0wMSAxNToxOToxMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgcnRwbXV4OiBBZGQgc3VwcG9ydCBmb3IgR3N0QnVmZmVyTGlzdAotCSAgRmFjdG9yIG91dCBtb3N0IG9mIHRoZSBidWZmZXIgaGFuZGxpbmcgYW5kIGltcGxlbWVudCBhIGNoYWluX2xpc3QKLQkgIGZ1bmN0aW9uLiBBbHNvLCB0aGUgRFRNRiBtdXhlciBoYXMgYmVlbiBtb2RpZmllZCB0byBqdXN0IGhhdmUgYQotCSAgZnVuY3Rpb24gdG8gYWNjZXB0IG9yIHJlamVjdCBhIGJ1ZmZlciBpbnN0ZWFkIG9mIGhhdmluZyB0byBzdWJjbGFzcwotCSAgYm90aCBjaGFpbiBhbmQgY2hhaW5fbGlzdC4KLQotMjAxMC0wNy0wMSAxNToxNTo0OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogRG9uJ3QgbGVhayBpbnZhbGlkIGJ1ZmZlcnMKLQotMjAxMC0wNi0wMyAxMDo0MzoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkgIHJ0cG11eDogZml4IG1pc3NpbmcgZGVidWcgbG9nIG1lc3NhZ2UgYXJndW1lbnQKLQotMjAxMC0wNS0xMCAxODozNzo1NSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBydHBkdG1mbXV4OiBBZGQgc29tZSBkZWJ1ZyBtZXNzYWdlcwotCi0yMDEwLTA1LTA3IDE4OjU2OjU3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBkdG1mbXV4OiBSZW1vdmUgc3RyZWFtLWxvY2sgZXZlbnQgaGFuZGxpbmcKLQotMjAxMC0wNS0wNyAxODo1NDo0OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBydHBkdG1mbXV4OiBVcGRhdGUgZG9jIGZvciBzaW1wbGlmaWNhdGlvbgotCi0yMDEwLTA1LTA3IDE4OjQwOjMwIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cG11eC5jOgotCSAgdGVzdHM6IENoYW5nZSB0ZXN0cyB0byBub3QgdXNlIHRoZSBwcmlvcml0eSBwYWRzIGluc3RlYWQgb2YgdGhlIGV2ZW50cwotCi0yMDEwLTA1LTA2IDE5OjUxOjU5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaDoKLQkgIHJ0cGR0bWZtdXg6IERyb3AgYnVmZmVycyBvbiBub24tcHJpb3JpdHkgc2lua3Mgd2hlbiBzb21ldGhpbmcgaXMgaW5jb21pbmcgb24gdGhlIHByaW9yaXR5IHNpbmsKLQotMjAxMC0wNS0wNiAxODoxMTo0MCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgcnRwZHRtZm11eDogQWRkIHByaW9yaXR5IHNpbmsgcGFkcwotCi0yMDEwLTA1LTA3IDE3OjE1OjQ3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkgIHJ0cGR0bWZtdXg6IENsZWFudXAgZXZlbnQgZnVuY3Rpb24KLQotMjAxMC0wNS0wNyAxNjo0MjoyMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmM6Ci0JICBydHBtdXg6IEFnZ3JlZ2F0ZSBpbmNvbWluZyBzZWdtZW50cwotCi0yMDEwLTA1LTA2IDE5OjA5OjQ4IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkgIHJ0cGR0bWZtdXg6IFVwZGF0ZSBkb2N1bWVudGF0aW9uCi0KLTIwMTAtMDUtMDYgMTg6MTA6NDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguaDoKLQkgIHJ0cG11eDogU2ltcGxpZnkgcmVxdWVzdCBwYWQgY3JlYXRpb24KLQotMjAxMC0wMy0yMSAyMTozOToxOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBtdXguYzoKLQkgIEFkZCAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIHRvIGNvbmZpZ3VyZSBmbGFncwotCSAgQW5kIGZpeCBhbGwgd2FybmluZ3MKLQotMjAxMC0wMy0xOCAxNzozMDoyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHMgPT4gZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlCi0KLTIwMDktMTEtMTggMTY6Mzg6MzMgKzAxMDAgIHVua25vd24gPGhhdmFyZC5ncmFmZkAuZXUudGFuZGJlcmcuaW50PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogdXBkYXRlIHRoZSBjdXJyZW50X3NzcmMgZnJvbSB0aGUgY2FwcwotCSAgRml4ZXMgIzYwNDEwMQotCi0yMDA5LTEyLTA5IDE0OjQyOjIxICswMTAwICBIw6V2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogcmVsZWFzZSBwYWRzIHdoZW4gZGlzcG9zaW5nCi0JICBCZWNhdXNlIG9mIGFuIGFsbG9jYXRlZCBwcml2IChHc3RSVFBNdXhQYWRQcml2YXRlKSwgdGhlIGVsZW1lbnQgd2lsbAotCSAgbGVhayBtZW1vcnkgaWYgbm90IGdzdF9ydHBfbXV4X3JlbGVhc2VfcGFkKCkgaXMgY2FsbGVkLiBUaGlzIHdvdWxkCi0JICBwcmV2aW91c2x5IG9ubHkgaGFwcGVuIGlmIHJlbGVhc2VfcmVxdWVzdF9wYWQoKSB3YXMgY2FsbGVkIGV4cGxpY2l0bHksCi0JICBzb210aGluZyB0aGF0IHNob3VsZCBub3QgYmUgbmVjY2VzYXJ5LgotCSAgRml4ZXMgIzYwNDA5OQotCi0yMDA5LTEyLTA5IDEzOjQwOjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBkdG1mbXV4OiBtZXRob2QgbmFtZSBjbGVhbnVwcwotCi0yMDA5LTEwLTA4IDE5OjA2OjI2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cG11eC5jOgotCSAgdGVzdHM6IEFkZCB0ZXN0IGZvciBydHBkdG1mbXV4IGxvY2tpbmcKLQotMjAwOS0wOS0yOCAxOTo1NDo1MyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBtdXguYzoKLQkgIHRlc3RzOiBBZGQgdW5pdCB0ZXN0IGZvciBydHBtdXgKLQotMjAwOS0wOS0yOCAxMzozNjo0NCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogRG9uJ3QgaWdub3JlIHJlcXVlc3RlZCBwYWQgbmFtZQotCi0yMDA5LTA3LTI5IDE3OjIzOjMxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBSZW1vdmUgZW1wdHkgZmluYWxpemUKLQotMjAwOS0wNy0yMSAxNTozMTozMyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogRnJlZSB0aGUgcGFkIHByaXZhdGUgZGF0YSBvbiBwYWQgcmVsZWFzZQotCSAgRnJlZSB0aGUgcGFkIHByaXZhdGUgZGF0YSBvbiBwYWQgcmVsZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGEgd2VhayByZWYsCi0JICB3aGljaCBpcyBub3QgdGhyZWFkIHNhZmUuIEFsc28sIGxvY2sgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZCBwcml2YXRlIHVzaW5nIHRoZSBlbGVtZW50J3MKLQkgIG9iamVjdCBsb2NrLgotCi0yMDA5LTA0LTI4IDE2OjEwOjIxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBSZWplY3Qgd3JvbmcgY2FwcwotCi0yMDA5LTA0LTI4IDE2OjAzOjE5IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBGaXggbGVhayBGaXhlZCBhIGxlYWsgZGlzY292ZXJlZCBieSBMYXVyZW50IEdsYXlhbCA8c3BlZ2xlQHlhaG9vLmZyPgotCi0yMDA5LTA0LTI4IDE1OjU4OjQxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBGaXggbGVhawotCSAgRml4ZWQgYSBsZWFrIGRpc2NvdmVyZWQgYnkgTGF1cmVudCBHbGF5YWwgPHNwZWdsZUB5YWhvby5mcj4KLQotMjAwOS0wNC0yMiAxODowMTowNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogRml4IHdhcm5pbmcKLQotMjAwOS0wNC0yMCAyMDowMDoxNSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogU2V0IGRpZmZlcmVudCBjYXBzIGRlcGVuZGluZyBvbiB0aGUgaW5wdXQKLQotMjAwOS0wNC0yMiAxNjoyNTowNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogT25seSBmcmVlIHBhZCBwcml2YXRlIHdoZW4gcGFkIGlzIGRpc3Bvc2VkCi0KLTIwMDktMDQtMjAgMTg6NDE6MzkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFJlbW92ZSB1c2VsZXNzIGNhcHMgbWFuZ2xpbmcKLQotMjAwOS0wNC0yMCAxODozNjo0MiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogUmVuYW1lIHZhcmlhYmxlIGZvciBtb3JlIGNsYXJpdHkKLQotMjAwOS0wNC0yMCAxNzo0MzozOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogVXNlIEdTVF9CT0lMRVJQTEFURQotCi0yMDA5LTA0LTIwIDE3OjQyOjQwIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBEbyB0aGUgaW5jbHVkZXMgbG9jYWxseQotCi0yMDA5LTA0LTE1IDEzOjIzOjAxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBBZGQgR1NUX0RFQlVHX0ZVTkNQVFJzCi0KLTIwMDktMDQtMTUgMTM6MTU6NTUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwZHRtZm11eDogUmVsZWFzZSBsb2NrZWQgcGFkIG9uIHJlbGVhc2VfcGFkCi0JICBSZWxlYXNlIHRoZSBzcGVjaWFsIHBhZCBpZiB0aGUgcGFkIGlzIHJlbW92ZWQgZnJvbSB0aGUgbXV4ZXIuCi0KLTIwMDktMDQtMTUgMTM6MDk6MjcgLTA0MDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwZHRtZm11eDogUmVsZWFzZSBzcGVjaWFsIG9uIHBhZCBkaXNwb3NlCi0JICBGaXhlcyAjNTc3NjkwCi0KLTIwMDktMDItMjUgMTE6NDU6MDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBkb2NzOiB2YXJpb3VzIGRvYyBmaXhlcwotCSAgTm8gc2hvcnQtZGVzYyBhcyB3ZSBoYXZlIHRoZW0gaW4gdGhlIGVsZW1lbnQgZGV0YWlscy4KLQkgIEFsc28ga2VlcCB0aGluZ3MgKE1ha2VmaWxlLmFtIGFuZCBzZWN0aW9ucy50eHQpIHNvcnRlZC4KLQkgIFJld29yZCBhbWJpZ291cyByZXR1cm5zLiBObyB0ZXh0IGFmdGVyIHNpbmNlIHBsZWFzZS4KLQotMjAwOS0wMi0xMCAxNzowMjoyNCArMDAwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXhlci5jOgotCSAgcnRwbXV4OiBNb3ZlIHJ0cG11eCBmcm9tIGdzdC1wbHVnaW5zLWZhcnNpZ2h0IHRvIC1iYWQKLQotMjAwOS0wMi0yMCAxNzo0NTo1MCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4Lmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4ZXIuYzoKLQkgIHJ0cG11eDogUmUtaW5kZW50IHRvIEdzdCBzdHlsZQotCi0yMDA5LTAyLTEwIDE5OjExOjE1ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBEb2N1bWVudCBydHAgbXV4ZXIgYSBiaXQKLQotMjAwOS0wMi0yMCAxMzozMDo0OSAtMDUwMCAgTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlQHlhaG9vLmZyPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4Lmg6Ci0JICBydHBtdXg6IEFkZCBzaWduYWxzIGJlZm9yZSBzdHJlYW0gbG9jayBhbmQgYWZ0ZXIgdW5sb2NraW5nCi0KLTIwMDktMDItMTggMjA6MTg6NDYgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IExldCBzc3JjIHRocm91Z2ggZ2V0Y2FwcwotCi0yMDA5LTAyLTE4IDE5OjU4OjU4IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBSZW5hbWUgaGF2ZV9iYXNlIHRvIGhhdmVfdHNfYmFzZQotCi0yMDA5LTAyLTE4IDE4OjE0OjUyIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBtdXg6IFByb3RlY3QgdGhlIHNlcW51bSB3aXRoIG9iamVjdCBsb2NrIGluIHJ0cG11eAotCi0yMDA5LTAyLTE4IDE4OjA3OjQ0IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgcnRwbXV4OiBSZW1vdmUgdW51c2VkIHNpbmtfdHNfYmFzZQotCi0yMDA5LTAyLTE4IDE1OjIwOjU4IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBIYXZlIGdldGNhcHMgdG8gZm9yY2UgdGhlIHNhbWUgY2xvY2tyYXRlIG9uIGFsbCBwYWRzCi0KLTIwMDktMDItMTggMTc6MDU6MTMgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFZhbGlkYXRlIFJUUCBkYXRhIGluIFJUUCBNdXgKLQotMjAwOS0wMi0xOCAxNDoxNjowMCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgcnRwbXV4OiBSZW1vdmUgdW51c2VkIGNsb2NrLXJhdGUgcHJvcGVydHkKLQotMjAwOS0wMi0xOCAxMzo1NjozNiAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4Lmg6Ci0JICBydHBtdXg6IENsYXJpZnkgbG9ja2luZyBpbiBydHBkdG1mbXV4Ci0KLTIwMDktMDItMTggMTM6MzI6NTYgLTA1MDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IE1pc3NpbmcgZm9ybWF0IHBhcmFtZXRlcgotCi0yMDA4LTEyLTAxIDE3OjU1OjIyIC0wNTAwICBIw6V2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogVXBkYXRlIHNlcW51bSBiYXNlIGluIHJ0cCBtdXhlcgotCSAgV2l0aCBoZWxwIGZyb20gV2ltCi0KLTIwMDgtMTItMDEgMTc6NTQ6NTggLTA1MDAgIEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBGaXggc29tZSBtb3JlIGxlYWtzCi0KLTIwMDgtMTItMDEgMTc6NDg6MjkgLTA1MDAgIEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYzoKLQkgIHJ0cG11eDogRml4IGxlYWsKLQotMjAwOC0wOS0yOSAxNTowMzowNSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogRG9uJ3QgdW5yZWYgY2FwcyB3ZSBkb24ndCBrbm93ICh0aGFua3MgV2ltKQotCi0yMDA4LTA4LTEyIDEyOjQ4OjAyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBQdXQgcGVyLWJ1ZmZlciBkZWJ1ZyBhdCBsZXZlbCBMT0cKLQotMjAwOC0wOC0xMiAxMjo0NzoxNCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogTWFrZSBkZWJ1ZyBwcmludCBhY2N1cmF0ZQotCi0yMDA4LTA4LTEyIDEyOjQ2OjIzIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBTZXQgb3VyIGNhcHMgb24gdGhlIGJ1ZmZlcnMKLQotMjAwOC0wOC0xMiAxMjo0NjowNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogVGFrZSB0aGUgY2xvY2stYmFzZSBzdG9yZWQgZnJvbSB0aGUgbGFzdCBzZXRjYXBzCi0KLTIwMDgtMDgtMTIgMTI6NDE6NTkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFN0b3JlIHRoZSBjbG9jay1iYXNlIG9uIHNldGNhcHMKLQotMjAwOC0wOC0xMiAxMjozMDo1MiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogQWRkIHBhZHByaXZhdGUgdG8gdGhlIHJlcXVlc3QgcGFkcwotCi0yMDA4LTA4LTExIDIxOjIwOjA2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBNYWtlIGluZGVudGF0aW9uIG1vcmUgY29ycmVjdAotCi0yMDA4LTA4LTExIDIxOjA1OjM0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBGaXggdHlwbwotCi0yMDA4LTA4LTExIDIxOjAzOjIyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBTZXQgc2VxbnVtLWJhc2UgYW5kIGNsb2NrLWJhc2UgaW4gY2FwcyBmcm9tIHJ0cG11eGVyCi0KLTIwMDctMDgtMTUgMTM6NTA6MzggKzAwMDAgIFplZXNoYW4gQWxpIDxmaXJzdC5sYXN0QG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwbXV4OiBtb3JlIGRlYnVnCi0JICAyMDA3MDgxNTEzNTAzOC1mM2YxZS05YzdhNTQ5MGE1MjVjNmU4NzUzY2IxYjhjMDMzNTRkZjk5MTMyYjVjLmd6Ci0KLTIwMDctMDgtMjAgMTg6NTA6MzIgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBtaXNzaW5nIGNvbW1lbnQKLQkgIDIwMDcwODIwMTg1MDMyLTRmMGY2LTBhYjY3YjZhYzQwZGQ0ZTM1YThmZTUzZjNjYjZkYWZmNjVjZTQzYjkuZ3oKLQotMjAwNy0wNy0xMiAxOTo1MzozNiArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBNYWtlIGJ1ZmZlciB3cml0YWJsZSBiZWZvcmUgd3JpdGluZyBpbnRvIGl0Ci0JICAyMDA3MDcxMjE5NTMzNi0zZTJkYy05MWE1ZmI3OTdjZmE0OTE5ZDRlMmY5YTcyOGM2ZDZmYmQzYjgzZDkzLmd6Ci0KLTIwMDctMDctMDYgMjA6MjQ6NTkgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogU2V0IHBhZHMgYWN0aXZlIHdoZW4gYWRkaW5nIHRoZW0gdG8gYSBwb3RlbnRpYWxseSBydW5uaW5nIGVsZW1lbnQKLQkgIDIwMDcwNzA2MjAyNDU5LTNlMmRjLWEzNzMxZjg4NTcyNTU5NGRlZjBhN2JlOTk3ZmM3YjNhNzM5ZWU5NjcuZ3oKLQotMjAwNy0wNi0wNyAxMjowMToyMSArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBGaXggbXVsdGlwbGUgcmVmIGxlYWtzIChwYXRjaGVzIGJ5IFNQIEdMRSkKLQkgIDIwMDcwNjA3MTIwMTIxLTNlMmRjLTA2MWU5ZWY3YTQ3YjFiODRmYThmODA5MmY0YjhiY2MwZTZkYjhjOGMuZ3oKLQotMjAwNy0wNS0yOCAxNToyNTowNSArMDAwMCAgWmVlc2hhbiBBbGkgPGZpcnN0Lmxhc3RAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogc2VuZCBldmVudCB0byBhbGwgc3JjIHBhZHMKLQkgIDIwMDcwNTI4MTUyNTA1LWYzZjFlLTAzOTIxNmM3M2RjOTNmNjRjNDk5NjJjNzdhMDI1M2NiOWNmZWM0ZDMuZ3oKLQotMjAwNy0wNS0yOCAxMjozNzo0OSArMDAwMCAgWmVlc2hhbiBBbGkgPGZpcnN0Lmxhc3RAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogcHJpbnQgYSB3YXJuaW5nIGlmIHJlY2VpdmUgYW4gZXJyb3IgaXRlcmF0aW5nIHNpbmtwYWRzCi0JICAyMDA3MDUyODEyMzc0OS1mM2YxZS00YzFlYjNmNTExYjU2MTAxNDM2MTBhNjVhOTRkMTE3ZjJjM2QyNTgwLmd6Ci0KLTIwMDctMDUtMjggMTI6Mjg6MDggKzAwMDAgIFplZXNoYW4gQWxpIDxmaXJzdC5sYXN0QG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IGRlYWwgd2l0aCBhbGwgdGhlIGdzdF9pdGVyYXRvcl9uZXh0KCkgcmV0dXJuIHZhbHVlcwotCSAgMjAwNzA1MjgxMjI4MDgtZjNmMWUtZDMwMTY0NGMzYmU3NjMzZWM2ZGM1ZTI4NTk2ZTkzNDZkMmRhNmE1MC5negotCi0yMDA3LTA1LTI1IDEyOjMxOjE2ICswMDAwICBaZWVzaGFuIEFsaSA8Zmlyc3QubGFzdEBub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBSZXR1cm4gY29ycmVjdCB2YWx1ZSBmcm9tIHRoZSBldmVudCBoYW5kbGVyCi0JICAyMDA3MDUyNTEyMzExNi1mM2YxZS0xMzFiMzdiNWY0NTIxNjE4ZmUyZjEzMjA0MDlhNDdlNjViMzVhZDJkLmd6Ci0KLTIwMDctMDUtMjUgMTA6Mjc6MDkgKzAwMDAgIFplZXNoYW4gQWxpIDxmaXJzdC5sYXN0QG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFZpbGxlJ3Mgb3JpZ2luYWwgcGF0Y2ggdG8gZml4IHRoZSB0cmF2ZXJzYWwgb2YgZHRtZiBldmVudAotCSAgMjAwNzA1MjUxMDI3MDktZjNmMWUtNmM0MWQxZWY5MzQwNjhhNGY0ZTgxMGU3ZTk4MWI0MjAwNzViMGM5OC5negotCi0yMDA3LTAzLTI5IDEzOjUyOjUwICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFNldCB0aGUgY29ycmVjdCB0cy1vZmZzZXQgb24gdGhlIGdldF9wcm9wIHZhbHVlCi0JICAyMDA3MDMyOTEzNTI1MC02NTAzNS1hNDNlMjIyZDkxZDU3YzBhNjFjYjMyODc1ODZhYWEyOWFiZjc4Njc0Lmd6Ci0KLTIwMDctMDMtMjkgMTM6NTI6MjMgKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogUmVmYWN0b3JpemUgc3RhdGVfY2hhbmdlCi0JICAyMDA3MDMyOTEzNTIyMy02NTAzNS0yM2EwMTA3YjJlMzk3NzEwZjAzNWM2ZTg4Y2MwZTQ5YjY1YmI0ZDVkLmd6Ci0KLTIwMDctMDMtMjkgMTM6MzY6MjIgKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgcnRwbXV4OiBzZXQgU1NSQyBvbiB0aGUgcGFja2V0cwotCSAgMjAwNzAzMjkxMzM2MjItNjUwMzUtMWJlNmUwYWE4NWE3MTM4OWY3ZDI1N2I5Y2QzZTEzYTczZDZiNzQ1Yi5negotCi0yMDA3LTAzLTI5IDEzOjE5OjM2ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IENvZGUgY2xlYW4tdXAgYW5kIG1vcmUgZGVidWcgb3V0cHV0Ci0JICAyMDA3MDMyOTEzMTkzNi02NTAzNS05ZDQ5OWUyMDllMGQ3YTQwOWMzYWEwZDEwNDA3NzhiYWJmMDc2MTc5Lmd6Ci0KLTIwMDctMDMtMjggMTE6MjI6MTkgKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oOgotCSAgcnRwbXV4OiBVc2Ugb3duIGNsb2NrLWJhc2UKLQkgIDIwMDcwMzI4MTEyMjE5LTY1MDM1LTFiYTVmZWZiYzY1MDU5ZTliMGM4NjA1MjhhMzEwNjJjZWI2YTczMzEuZ3oKLQotMjAwNy0wMy0yMyAxNjozMTozOSArMDAwMCAgemVlc2hhbi5hbGlAbm9raWEuY29tIDx6ZWVzaGFuLmFsaUBub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBtdXg6IE9ubHkgYWNjZXB0IFJUUCBzdHJlYW1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBjbG9jay1yYXRlCi0JICAyMDA3MDMyMzE2MzEzOS02NTAzNS1mYzBiMTdiMGI4YTdhMDQxZjQ4OTk0YzRmMjZlOTY1NjgxNjhiZjk1Lmd6Ci0KLTIwMDctMDMtMjIgMTY6MTU6NTIgKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBydHBtdXg6IFNvbWUgbW9yZSBjb2RlLWNsZWFudXBzCi0JICAyMDA3MDMyMjE2MTU1Mi02NTAzNS1iZGE5NjE2NWUxNDZiNGYxZDVmZWExY2M5NTc2YTdhYjNhYmViYzllLmd6Ci0KLTIwMDctMDMtMjIgMTU6NDI6NTEgKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogcmV0dXJuIG5ld3BhZCBpbnN0ZWFkIG9mIE5VTEwgYW5kIHdhcm4gaWYgZmFpbGVkIHRvIGNyZWF0ZSBhIHBhZAotCSAgMjAwNzAzMjIxNTQyNTEtNjUwMzUtY2RiNjY1MWU2MWMyZWIwMjA1Y2M4YzI0NjkzYjQzZjk4YTJkYTcxOC5negotCi0yMDA3LTAzLTIyIDEyOjQxOjMyICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFJlZmFjdG9yaXplIHRoZSBSVFBNdXggY29kZQotCSAgMjAwNzAzMjIxMjQxMzItNjUwMzUtMGEzMjc4MTQ3NTQ2ZTMzZjY4NzA5N2E0M2I3NzViM2Y2YWE5OWY5My5negotCi0yMDA3LTAzLTIyIDEyOjE0OjUzICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwbXV4OiBTb21lIG1vcmUgZG9jIGZpeGluZwotCSAgMjAwNzAzMjIxMjE0NTMtNjUwMzUtMTJkNjAyMjcyMjE3YjUxYmQ5N2RmNGU1NzkwMDI0YzM5OTYyMmRkMy5negotCi0yMDA3LTAzLTIyIDExOjMyOjI4ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwbXV4OiBNb3JlIFJlZmFjdG9yaW5nCi0JICAyMDA3MDMyMjExMzIyOC02NTAzNS1iYWUzNGE3OTU5OWU3ZGU1MjkzZWQ3N2IwMjIzNjFjY2ZmODIyYmI5Lmd6Ci0KLTIwMDctMDMtMjIgMTE6MzE6NTQgKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmM6Ci0JICBydHBtdXg6IE1vcmUgZG9jdW1lbnRhdGlvbgotCSAgMjAwNzAzMjIxMTMxNTQtNjUwMzUtNjI0ODUwNTQxYTViNWZjM2RmMjMxMjA0YmU1YTgzZDA3MjM5ZGIyOC5negotCi0yMDA3LTAzLTIxIDE2OjMzOjExICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSAgcnRwbXV4OiBSZWZhY3RvciB0aGUgZXZlbnQgaGFuZGxlciBmdW5jdGlvbgotCSAgMjAwNzAzMjExNjMzMTEtNjUwMzUtOTg3ZTdmMjVkMWFiNTMzNWI3OWY0NGIyNzdhYmYxNWU0ZTM3ZDMxNy5negotCi0yMDA3LTAzLTIxIDE0OjUyOjQ0ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5oOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eGVyLmM6Ci0JICBydHBtdXg6IEFkZCBSVFBEVE1GTXV4IGVsZW1lbnQKLQkgIDIwMDcwMzIxMTQ1MjQ0LTY1MDM1LTlhMDEzOTBiMGRlZTMzOThlNTMxOTlhMWZhMWQ5MzUyMDA0ZjMzOGUuZ3oKLQotMjAwNy0wMy0yMSAxMjozMTo0OSArMDAwMCAgemVlc2hhbi5hbGlAbm9raWEuY29tIDx6ZWVzaGFuLmFsaUBub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4Lmg6Ci0JICBydHBtdXg6IFJlbW92ZSBEVE1GLXNwZWNpZmljIGNvZGUgZnJvbSBSVFAgbXV4ZXIgYW5kIG1ha2UgaXQgZXh0ZW5kYWJsZQotCSAgMjAwNzAzMjExMjMxNDktNjUwMzUtYjhhOGY1NWZmNzhlZWQ4Y2JiMDA0MmU4Mjc4ODVlZGZjNTQzODI0Mi5negotCi0yMDA3LTAzLTIwIDEyOjA1OjI0ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFB1dCBtb3JlIGhlbHBmdWwgZGVzY3JpcHRpb24KLQkgIDIwMDcwMzIwMTIwNTI0LTY1MDM1LWRiMjdhN2NmNjMwN2I1MTFhZWIzZDk5NmQyNmU3OTBlMzY3YTdiYWQuZ3oKLQotMjAwNy0wMy0xNiAxNToxNjo0MSArMDAwMCAgemVlc2hhbi5hbGlAbm9raWEuY29tIDx6ZWVzaGFuLmFsaUBub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiByZW1vdmUgdGhlIChjb21tZW50ZWQtb3V0KSBjb2RlIGZvciBibG9ja2luZyB0aGUgcGFkcwotCSAgMjAwNzAzMTYxNTE2NDEtNjUwMzUtMDEyM2FmMzg3OTUxZjg4NTk0Nzk3YzcyMmU4ODJjZmU3MDI0MGFmZi5negotCi0yMDA3LTAzLTE2IDEzOjE0OjQ0ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IERyb3AgYnVmZmVycyBpbnN0ZWFkIG9mIGJsb2NraW5nIHRoZSBzaW5rcGFkcwotCSAgMjAwNzAzMTYxMzE0NDQtNjUwMzUtOWMxMzQ1YWQ5NjEwODg4MWY0NTVkNGI1NWE3ZjYyM2NkMzAyZDBlZC5negotCi0yMDA3LTAzLTE0IDE3OjE2OjE4ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IEltcGxlbWVudCBzdHJlYW0gbG9ja2luZywgbmVlZGVkIGZvciBEVE1GCi0JICAyMDA3MDMxNDE3MTYxOC02NTAzNS1lNGQyNGIxNjA2Y2UwYTNlMmU3MzlmMDE4MzNmNjFlNGQ3NTU1ZWFjLmd6Ci0KLTIwMDctMDMtMTQgMTA6MjA6NTggKzAwMDAgIHplZXNoYW4uYWxpQG5va2lhLmNvbSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtdXguYzoKLQkgIHJ0cG11eDogdXNlIEdTVF8qX09CSkVDVCBpbnN0ZWFkIG9mIGdfKgotCSAgMjAwNzAzMTQxMDIwNTgtNjUwMzUtZTI0NDI4ODhmMmUzZTVhM2E3NjU5YWQ3OTU0YTRmYmEzNDc0OWNlMi5negotCi0yMDA3LTAzLTE0IDEwOjE4OjU0ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IE5vIG5lZWQgdG8gbWFuYWdlIHBhZHMsIHBhcmVudCBkb2VzIHRoYXQgZm9yIHVzCi0JICAyMDA3MDMxNDEwMTg1NC02NTAzNS1lZjVmNGFiZGUyMjcxMDJhMTEyODgzNWFiMzI1OTA1ZWFlNGMzNzI2Lmd6Ci0KLTIwMDctMDMtMTQgMDk6MDM6NTggKzAwMDAgIHplZW5peEBnbWFpbC5jb20gPHplZW5peEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jOgotCSAgcnRwbXV4OiBGaXggY29weXJpZ2h0IGhlYWRlcgotCSAgMjAwNzAzMTQwOTAzNTgtZDAxNGEtM2E2ZDNlZWVhYWY1Y2I4Y2EzYmNhNmEzM2U5OWE1NTFmNTk4YmQ0OC5negotCi0yMDA3LTAzLTA3IDA4OjUzOjA3ICswMDAwICB6ZWVzaGFuLmFsaUBub2tpYS5jb20gPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmM6Ci0JICBydHBtdXg6IFRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiBSVFAgbXV4ZXIKLQkgIDIwMDcwMzA3MDg1MzA3LTY1MDM1LTgzMzQwMjQxM2Y5OWNiM2Y4YmU0ODgzZTkyYmFkNGM4NzIyNTEwYzkuZ3oKLQotMjAxMi0xMi0xNSAyMToyNzowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5oOgotCSAgc2NhbGV0ZW1wbzogbm8gbmVlZCBmb3IgYSBwcml2YXRlIHN0cnVjdAotCi0yMDEyLTEyLTE0IDE1OjEzOjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkgIGRvY3M6IHVwZGF0ZSBwbHVnaW4gZG9jcwotCi0yMDEyLTEyLTE0IDE1OjEzOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICBkb2NzOiBhZGQgc2NhbGV0ZW1wbyB0byBkb2NzCi0KLTIwMTItMTEtMDYgMTM6MzY6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnguYzoKLQkgIGF1ZGlvZng6IG1vdmUgc2NhbGV0ZW1wbyBlbGVtZW50IGZyb20gLWJhZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzI2MgotCi0yMDEyLTEwLTIzIDE0OjMzOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSAgc2NhbGV0ZW1wbzogRml4IGV2ZW50IGxlYWsKLQotMjAxMi0xMC0yMyAxNDozMjoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYzoKLQkgIHNjYWxldGVtcG86IEZpeCB0aW1lc3RhbXAgdHJhY2tpbmcKLQotMjAxMi0xMC0yMyAxNDowNjozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYzoKLQkgIHNjYWxldGVtcG86IEltcGxlbWVudCBMQVRFTkNZIHF1ZXJ5Ci0KLTIwMTItMTAtMjMgMTM6Mzk6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmg6Ci0JICBzY2FsZXRlbXBvOiBTdG9yZSBpbnN0YW5jZSBwcml2YXRlIGRhdGEgaW4gdGhlIGluc3RhbmNlIHN0cnVjdAotCSAgR2V0dGluZyBpdCBvdmVyIGFuZCBvdmVyIGFnYWluIHZpYSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKQotCSAgaXMgcmVhbGx5IHNsb3cuCi0KLTIwMTItMTAtMTcgMTc6MzQ6MjYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiB1c2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSgpCi0JICB3aGVyZSBwb3NzaWJsZS4gQXZvaWRzIHNvbWUgc3RyaW5nIGNvcGllcy4gQWxzbyByZS1pbmRlbnQKLQkgIHNvbWUgc3R1ZmYuIEFsc28gc29tZSBpbmRlbnQgZml4ZXMgaGVyZSBhbmQgdGhlcmUuCi0KLTIwMTItMDktMTQgMTc6MDg6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiByZXBsYWNlIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSB3aXRoIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YQotCi0yMDEyLTA5LTE0IDE2OjQ1OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBmZm1wZWdjb2xvcnNwYWNlIGlzIG5vIG1vcmUKLQotMjAxMi0wNC0wNSAxODowMjo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG9wbHVnaW4uYzoKLQkgIHNjYWxldGVtcG86IFVwZGF0ZSBmb3IgR1NUX1BMVUdJTl9ERUZJTkUoKSBBUEkgY2hhbmdlcwotCi0yMDEyLTAzLTE4IDE4OjMyOjU1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSAgc2NhbGV0ZW1wbzogcG9ydCB0byAwLjExCi0KLTIwMTEtMDctMDcgMTA6NTI6NTAgLTA3MDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSAgc2NhbGV0ZW1wbzogaW1wcm92ZSB0aGUgZG9jcwotCSAgRml4IHRoZSBzeW50YXgsIGFkZCBtb3JlIGV4cGxhbmF0aW9uIGFuZCB4cmVmIHRoZSBwcm9wZXJ0aWVzLgotCi0yMDExLTAzLTIyIDEzOjQ2OjQyICswMTAwICBDaHJpcyBFIEpvbmVzIDxjaHJpc0BjaHJpc2Vqb25lcy5jb20+Ci0KLQkqIGdzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYzoKLQkgIHNjYWxldGVtcG86IENvcnJlY3RseSBoYW5kbGUgbmV3c2VnbWVudCBldmVudHMgd2l0aCBzdG9wPT0tMQotCSAgRml4ZXMgYnVnICM2NDU0MjAuCi0KLTIwMTAtMTAtMTkgMTM6NDM6MTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOgotCSAgc2NhbGV0ZW1wbzogYWRkIG1pc3NpbmcgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBmbGFncwotCSAgQ2Fub25pY2FsaXplIHByb3BlcnR5IG5hbWVzIGFzIG5lZWRlZC4KLQotMjAxMC0wMy0xOCAxNzozMDoyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyA9PiBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUKLQotMjAwOS0xMS0wNSAxMzo0MDozOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYzoKLQkgIHNjYWxldGVtcG86IHByb3Blcmx5IHVwZGF0ZSBuZXcgc2VnbWVudHMKLQkgIFNjYWxldGVtcG8gd2FzIG1pc3NpbmcgYW4gdXBkYXRlIG9mICdzdG9wJyBpbgotCSAgbmV3IHNlZ21lbnQgcGFyYW1ldGVycyB3aGVuIHB1c2hpbmcgaXQgZG93bnN0cmVhbSwKLQkgIHdoaWNoIGNhdXNlZCBmaWxlcyB0byBlbmQgZWFybGllciB3aGVuIHJhdGUgPCAxLgotCSAgRml4ZXMgIzU5OTkwMwotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEJhc3RpYW4gSGVjaHQgPGhlY2h0YkBnbWFpbC5jb20+Ci0KLTIwMDktMDYtMTQgMjA6MDA6NTEgKzAyMDAgIE1heGltaWxpYW4gSMO2Z25lciA8cGJtYXhpQGhvZWduZXJzLmRlPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBFeHBsaWNpdGVseSBjYXN0IHRvIHNpZ25lZCBpbnRlZ2VycyB0byBmaXggYSBzZWdmYXVsdAotCSAgRml4ZXMgYnVnICM1ODU2NjAuCi0KLTIwMDktMDItMTMgMTI6MTg6NDggLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmM6Ci0JICBzY2FsZXRlbXBvOiBEbyBub3QgdXNlIHZvaWQgcG9pbnRlciBhcml0aG1ldGljLgotCi0yMDA4LTEwLTMwIDEyOjEzOjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHNjYWxldGVtcG86IFJldHVybiB0aGUgcmVzdWx0IG9mIHBhcmVudF9jbGFzcy0+ZXZlbnQoKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYzoKLQkgIFJldHVybiB0aGUgcmVzdWx0IG9mIHBhcmVudF9jbGFzcy0+ZXZlbnQoKS4KLQotMjAwOC0wOC0zMSAxMjoyMDozMyArMDAwMCAgUm92IEp1dmFubyA8cm92anV2YW5vQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQWRkIHNjYWxldGVtcG8gcGx1Z2luLCB3aGljaCBhbGxvd3MgdG8gc2NhbGUgdGhlIHNwZWVkIG9mIGF1ZGlvIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHBpdGNoIGJ5IGhhbmRsaW5nIHNlZWtzIHdpdGggYSByLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBSb3YgSnV2YW5vIDxyb3ZqdXZhbm8gYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2NhbGV0ZW1wby54bWw6Ci0JICAqIGV4YW1wbGVzL3NjYWxldGVtcG8vTWFrZWZpbGUuYW06Ci0JICAqIGV4YW1wbGVzL3NjYWxldGVtcG8vZGVtby1ndWkuYzogKHBvcF9zdGF0dXNfYmFyKSwKLQkgIChzdGF0dXNfYmFyX3ByaW50ZiksIChkZW1vX2d1aV9zZWVrX2Jhcl9mb3JtYXQpLCAodXBkYXRlX3Bvc2l0aW9uKSwKLQkgIChkZW1vX2d1aV9zZWVrX2Jhcl9jaGFuZ2UpLCAoZGVtb19ndWlfZG9fY2hhbmdlX3JhdGUpLAotCSAgKGRlbW9fZ3VpX2RvX3NldF9yYXRlKSwgKGRlbW9fZ3VpX2RvX3JhdGVfZW50ZXJlZCksCi0JICAoZGVtb19ndWlfZG9fdG9nZ2xlX2FkdmFuY2VkKSwgKGRlbW9fZ3VpX2RvX3RvZ2dsZV9kaXNhYmxlZCksCi0JICAoZGVtb19ndWlfZG9fc2VlayksIChkZW1vX2d1aV9kb19wbGF5KSwgKGRlbW9fZ3VpX2RvX3BhdXNlKSwKLQkgIChkZW1vX2d1aV9kb19wbGF5X3BhdXNlKSwgKGRlbW9fZ3VpX2RvX29wZW5fZmlsZSksCi0JICAoZGVtb19ndWlfZG9fcGxheWxpc3RfcHJldiksIChkZW1vX2d1aV9kb19wbGF5bGlzdF9uZXh0KSwKLQkgIChkZW1vX2d1aV9kb19hYm91dF9kaWFsb2cpLCAoZGVtb19ndWlfZG9fcXVpdCksCi0JICAoZGVtb19ndWlfcmVxdWVzdF9zZXRfc3RyaWRlKSwgKGRlbW9fZ3VpX3JlcXVlc3Rfc2V0X292ZXJsYXApLAotCSAgKGRlbW9fZ3VpX3JlcXVlc3Rfc2V0X3NlYXJjaCksIChkZW1vX2d1aV9yYXRlX2NoYW5nZWQpLAotCSAgKGRlbW9fZ3VpX3BsYXlpbmdfc3RhcnRlZCksIChkZW1vX2d1aV9wbGF5aW5nX3BhdXNlZCksCi0JICAoZGVtb19ndWlfcGxheWluZ19lbmRlZCksIChkZW1vX2d1aV9wbGF5ZXJfZXJyb3JlZCksCi0JICAoZGVtb19ndWlfc3RyaWRlX2NoYW5nZWQpLCAoZGVtb19ndWlfb3ZlcmxhcF9jaGFuZ2VkKSwKLQkgIChkZW1vX2d1aV9zZWFyY2hfY2hhbmdlZCksIChkZW1vX2d1aV9zZXRfcGxheWVyX2Z1bmMpLAotCSAgKGRlbW9fZ3VpX3NldF9wbGF5bGlzdF9mdW5jKSwgKGJ1aWxkX2d2YWx1ZV9hcnJheSksCi0JICAoY3JlYXRlX2FjdGlvbiksIChkZW1vX2d1aV9zaG93X2Z1bmMpLCAoZGVtb19ndWlfc2V0X3BsYXllciksCi0JICAoZGVtb19ndWlfc2V0X3BsYXlsaXN0KSwgKGRlbW9fZ3VpX3Nob3cpLCAoZGVtb19ndWlfZ2V0X3Byb3BlcnR5KSwKLQkgIChkZW1vX2d1aV9zZXRfcHJvcGVydHkpLCAoZGVtb19ndWlfaW5pdCksIChkZW1vX2d1aV9jbGFzc19pbml0KSwKLQkgIChkZW1vX2d1aV9nZXRfdHlwZSk6Ci0JICAqIGV4YW1wbGVzL3NjYWxldGVtcG8vZGVtby1ndWkuaDoKLQkgICogZXhhbXBsZXMvc2NhbGV0ZW1wby9kZW1vLW1haW4uYzogKGhhbmRsZV9lcnJvcl9tZXNzYWdlKSwKLQkgIChoYW5kbGVfcXVpdCksIChtYWluKToKLQkgICogZXhhbXBsZXMvc2NhbGV0ZW1wby9kZW1vLXBsYXllci5jOiAobm9fcGlwZWxpbmUpLAotCSAgKGRlbW9fcGxheWVyX2V2ZW50X2xpc3RlbmVyKSwgKGRlbW9fcGxheWVyX3N0YXRlX2NoYW5nZWRfY2IpLAotCSAgKGRlbW9fcGxheWVyX2Vvc19jYiksIChkZW1vX3BsYXllcl9idWlsZF9waXBlbGluZSksIChfc2V0X3JhdGUpLAotCSAgKGRlbW9fcGxheWVyX3NjYWxlX3JhdGVfZnVuYyksIChkZW1vX3BsYXllcl9zZXRfcmF0ZV9mdW5jKSwKLQkgIChfc2V0X3N0YXRlX2FuZF93YWl0KSwgKGRlbW9fcGxheWVyX2xvYWRfdXJpX2Z1bmMpLAotCSAgKGRlbW9fcGxheWVyX3BsYXlfZnVuYyksIChkZW1vX3BsYXllcl9wYXVzZV9mdW5jKSwgKF9zZWVrX3RvKSwKLQkgIChkZW1vX3BsYXllcl9zZWVrX2J5X2Z1bmMpLCAoZGVtb19wbGF5ZXJfc2Vla190b19mdW5jKSwKLQkgIChkZW1vX3BsYXllcl9nZXRfcG9zaXRpb25fZnVuYyksIChkZW1vX3BsYXllcl9nZXRfZHVyYXRpb25fZnVuYyksCi0JICAoZGVtb19wbGF5ZXJfc2NhbGVfcmF0ZSksIChkZW1vX3BsYXllcl9zZXRfcmF0ZSksCi0JICAoZGVtb19wbGF5ZXJfbG9hZF91cmkpLCAoZGVtb19wbGF5ZXJfcGxheSksIChkZW1vX3BsYXllcl9wYXVzZSksCi0JICAoZGVtb19wbGF5ZXJfc2Vla19ieSksIChkZW1vX3BsYXllcl9zZWVrX3RvKSwKLQkgIChkZW1vX3BsYXllcl9nZXRfcG9zaXRpb24pLCAoZGVtb19wbGF5ZXJfZ2V0X2R1cmF0aW9uKSwKLQkgIChkZW1vX3BsYXllcl9nZXRfcHJvcGVydHkpLCAoZGVtb19wbGF5ZXJfc2V0X3Byb3BlcnR5KSwKLQkgIChkZW1vX3BsYXllcl9pbml0KSwgKGRlbW9fcGxheWVyX2NsYXNzX2luaXQpLAotCSAgKGRlbW9fcGxheWVyX2dldF90eXBlKToKLQkgICogZXhhbXBsZXMvc2NhbGV0ZW1wby9kZW1vLXBsYXllci5oOgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5jOiAoYmVzdF9vdmVybGFwX29mZnNldF9mbG9hdCksCi0JICAoYmVzdF9vdmVybGFwX29mZnNldF9zMTYpLCAob3V0cHV0X292ZXJsYXBfZmxvYXQpLAotCSAgKG91dHB1dF9vdmVybGFwX3MxNiksIChmaWxsX3F1ZXVlKSwgKHJlaW5pdF9idWZmZXJzKSwKLQkgIChnc3Rfc2NhbGV0ZW1wb190cmFuc2Zvcm0pLCAoZ3N0X3NjYWxldGVtcG9fdHJhbnNmb3JtX3NpemUpLAotCSAgKGdzdF9zY2FsZXRlbXBvX3NpbmtfZXZlbnQpLCAoZ3N0X3NjYWxldGVtcG9fc2V0X2NhcHMpLAotCSAgKGdzdF9zY2FsZXRlbXBvX2dldF9wcm9wZXJ0eSksIChnc3Rfc2NhbGV0ZW1wb19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zY2FsZXRlbXBvX2Jhc2VfaW5pdCksIChnc3Rfc2NhbGV0ZW1wb19jbGFzc19pbml0KSwKLQkgIChnc3Rfc2NhbGV0ZW1wb19pbml0KToKLQkgICogZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5oOgotCSAgKiBnc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvcGx1Z2luLmM6IChwbHVnaW5faW5pdCk6Ci0JICBBZGQgc2NhbGV0ZW1wbyBwbHVnaW4sIHdoaWNoIGFsbG93cyB0byBzY2FsZSB0aGUgc3BlZWQgb2YgYXVkaW8gd2l0aG91dAotCSAgY2hhbmdpbmcgdGhlIHBpdGNoIGJ5IGhhbmRsaW5nIHNlZWtzIHdpdGggYSByYXRlIT0xLjAuCi0JICBJbnRlZ3JhdGUgaXQgaW50byB0aGUgZG9jcyBhbmQgYWRkIHRoZSBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciBpdC4KLQkgIEZpeGVzIGJ1ZyAjNTM3NzAwLgotCi0yMDEyLTEyLTEzIDEyOjM2OjIwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGNoZWNrOiBhZGQgKGJ1dCBkaXNhYmxlKSBtb3JlIHJ0cCBqaXR0ZXJidWZmZXIgdGVzdHMKLQkgIFRlc3RzIG5lZWQgdG8gYmUgcG9ydGVkIHRvIDEuMCBiZWZvcmUgdGhleSBjYW4gYmUgZW5hYmxlZCBidXQgYWRkZWQgaGVyZSBzbyB0aGV5Ci0JICBkb24ndCBnZXQgZm9yZ290dGVuLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njc4MzgKLQotMjAxMi0wMS0xMyAwMToxMTozMSArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYnVuZGxlIHRvZ2V0aGVyIGxhdGUgbG9zdC1ldmVudHMKLQkgIFRoZSBzY2VuYXJpbyB3aGVyZSB5b3UgaGF2ZSBhIGdhcCBpbiBhIHN0ZWFkeSBmbG93IG9mIHBhY2tldHMgb2YKLQkgIHNheSAxMCBzZWNvbmRzICg1MDAgcGFja2V0cyBvZiB3aXRoIGR1cmF0aW9uIG9mIDIwbXMpLCB0aGUgaml0dGVyYnVmZmVyCi0JICB3aWxsIGlkbGUgdXAgdW50aWwgaXQgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ1ZmZlciBhZnRlciB0aGUgZ2FwLCBidXQgd2lsbAotCSAgdGhlbiBnbyBvbiB0byBwcm9kdWNlIDQ5OSBsb3N0LWV2ZW50cywgdG8gImNvdmVyIHVwIiB0aGUgZ2FwLgotCSAgTm93IHRoaXMgaXMgb2J2aW91c2x5IHdyb25nLCBzaW5jZSB0aGUgbGFzdCBwb3NzaWJsZSB0aW1lIGZvciB0aGUgZWFybGllc3QKLQkgIGxvc3QtZXZlbnRzIHRvIGJlIHBsYXllZCBvdXQgaGFzIG9idmlvdXNseSBleHBpcmVkLCBidXQgdGhlIGZhY3QgdGhhdAotCSAgdGhlIGppdHRlcmJ1ZmZlciBoYXMgYSAibGVuZ3RoIiwgcmVwcmVzZW50ZWQgd2l0aCBpdHMgb3duIGxhdGVuY3kgY29tYmluZWQKLQkgIHdpdGggdGhlIHRvdGFsIGxhdGVuY3kgZG93bnN0cmVhbSwgYWxsb3dzIGZvciBjb3ZlcmluZyB1cCBhdCBsZWFzdCBzb21lCi0JICBvZiB0aGlzIGdhcC4KLQkgIFNvIGluIHRoZSBjYXNlIG9mIHRoZSAibGVuZ3RoIiBiZWluZyAyMDBtcywgd2hpbGUgaGF2aW5nIHJlY2VpdmVkIHBhY2tldAotCSAgNTAwLCB0aGUgaml0dGVyYnVmZmVyIHNob3VsZCBzdGlsbCBjcmVhdGUgYSB0aW1lb3V0IGZvciBwYWNrZXQgNDkxLCB3aGljaAotCSAgd2lsbCBoYXZlIGl0cyB0aW1lIGV4cGlyZSBhdCAxMCwwMiBzZWNvbmRzLCBzcGVjaWFsbHkgc2luY2UgaXQgbWlnaHQKLQkgIGFjdHVhbGx5IGFycml2ZSBpbiB0aW1lISBCdXQgb2J2aW91c2x5LCB3YWl0aW5nIGZvciBwYWNrZXQgMTAwLCB0aGF0IGhhZAotCSAgaXRzIHRpbWUgZXhwaXJlIGF0IDIgc2Vjb25kcywgKHJlbWVtYmVyaW5nIHRoYXQgdGhlIGN1cnJlbnQgdGltZSBpcyAxMCkKLQkgIGlzIHVzZWxlc3MuLi4KLQkgIFRoZSBwYXRjaCB3aWxsIGNyZWF0ZSBvbmUgImJpZyIgbG9zdC1ldmVudCBmb3IgdGhlIGZpcnN0IDQ5MCBwYWNrZXRzLAotCSAgYW5kIHRoZW4gZ28gb24gdG8gY3JlYXRlIHNpbmdsZSBvbmVzIGlmIHRoZXkgY2FuIHJlYWNoIHRoZWlyCi0JICBwbGF5b3V0IGRlYWRsaW5lLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njc4MzgKLQotMjAxMi0xMi0xMyAwOToyNzoxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZml4IFRDUCByZWNvbm5lY3QKLQkgIElnbm9yZSBvdGhlciBjb21tYW5kcyB3aGVuIHJlY29ubmVjdGluZywgb3RoZXJ3aXNlIHRoZSBsb29wIGZ1bmN0aW9uIHdvdWxkIHBhdXNlCi0JICBhbmQgdGhlIHJlY29ubmVjdGlvbiB3b3VsZCBub3QgaGFwcGVuLiBDb250aW51ZSBsb29waW5nIGFmdGVyIGRvaW5nIGEgcmVjb25uZWN0Ci0JICBzbyB0aGF0IHdlIGhhdmUgYSBjaGFuY2UgdG8gYWN0dWFsbHkgcmVhZCB0aGUgbmV3IGRhdGEuCi0KLTIwMTItMTItMTMgMDE6MDI6MzQgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmg6Ci0JICBkaXJlY3Rzb3VuZCwgd2F2ZWZvcm06IGZpeCBjb21waWxhdGlvbiBlcnJvcnMgY2F1c2VkIGJ5IGNpcmN1bGFyIGluY2x1ZGVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwMTI0Ci0KLTIwMTItMTItMTIgMTc6MzU6MDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2t1dGlsLmg6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlcHJvYmUuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkqIHN5cy9vc3MvY29tbW9uLmg6Ci0JKiBzeXMvb3NzL2dzdG9zc2F1ZGlvLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zczQvb3NzNC1hdWRpby5oOgotCSAgZXh0L3N5czogRml4IHNvbWUgY29tcGlsYXRpb24gZXJyb3JzIGNhdXNlZCBieSBjaXJjdWxhciBpbmNsdWRlcwotCi0yMDEyLTEyLTEyIDEyOjA3OjM0ICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIGRlaW50ZXJsZWF2ZTogcHJvcGVybHkgc2V0IHNyY3BhZCBjaGFubmVsIHBvc2l0aW9uCi0JICBUaGUgc3JjIHBhZCBjYXBzIGFsd2F5cyBkZXNjcmliZSBhIHNpbmdsZSBhdWRpbyBjaGFubmVsIHNvIG9ubHkgdGhlCi0JICBmaXJzdCBwb3NpdGlvbiBtYXR0ZXJzIGlmIGRlaW50ZXJsZWF2ZSBpcyBjb25maWd1cmVkIHRvIGtlZXAgY2hhbm5lbAotCSAgcG9zaXRpb25zIGluIGl0cyBzcmMgcGFkcy4KLQotMjAxMi0xMi0xMiAxMTowOTo0MiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogdGltZW91dCBvbiB1ZHBzcmMgaXMgaW4gbmFub3NlY29uZHMKLQotMjAxMi0xMi0xMiAxMTowODoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogaW1wcm92ZSB0aW1lb3V0cwotCSAgTWFrZSBpdCBwb3NzaWJsZSB0byBzZXQgdGhlIHRpbWVvdXQgYWZ0ZXIgd2Ugd2VudCB0byB0aGUgUkVBRFkgc3RhdGUgYnkgdXNpbmcKLQkgIHRoZSB0aW1lb3V0IHdoZW4gY2hlY2tpbmcgdGhlIGNvbmRpdGlvbi4gVGhpcyBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNldCB0aGUKLQkgIHRpbWVvdXQgd2l0aCBhIGhpZ2hlciBncmFudWxhcml0eSB0aGFuIHNlY29uZHMuCi0KLTIwMTItMTItMTEgMTM6MDA6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHkuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvc2NhbGVyYm9iLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmUuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmViZmYuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmV0ZmYuYzoKLQkgIGRlaW50ZXJsYWNlOiBhZGQgc3VwcG9ydCBmb3Igc3RyaWRlcwotCSAgSW1wbGVtZW50IHN0cmlkZSBzdXBwb3J0IGNvcnJlY3RseSBieSB0YWtpbmcgaXQgZnJvbSB0aGUgR3N0VmlkZW9GcmFtZS4KLQkgIFByb3Bvc2UgYSBidWZmZXJwb29sIHVwc3RyZWFtIHdoZW4gbm90IG9wZXJhdGluZyBpbiBwYXNzdGhyb3VnaC4KLQotMjAxMi0wOS0yNyAxMjoxNzo1OCAtMDcwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1ZSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSAgcnRzcHNyYzogZG8gbm90IGNoYW5nZSBzdGF0ZSB0byBQTEFZSU5HIGlmIGN1cnJlbnRseSBjaGFuaW5nIHN0YXRlCi0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYyAoZ3N0X3J0c3BzcmNfcGxheSk6IHN0YXRlIGNoYW5nZSBtaWdodCBiZQotCSAgaGFwcGVuaW5nIGluIHRoZSBhcHBsaWNhdGlvbiB0aHJlYWQsIHNvIHdlIGRvbid0IGNoYW5nZSB0aGUgc3RhdGUgdG8KLQkgIFBMQVlJTkcgaW4gdGhlIGdzdHJ0c3BzcmMgdGhyZWFkIHVubGVzcyBpdCBpcyBzYWZlLgotCSAgQSBzcGVjaWZpYyBjYXNlIGlzIHdoZW4gY2hhbmluZyB0aGUgc3RhdGUgdG8gTlVMTCBmcm9tIHRoZSBhcHBsaWNhdGlvbgotCSAgdGhyZWFkLiBUaGlzIHdpbGwgc3luY2hyb25vdXNseSB0cnkgdG8gc3RvcCB0aGUgdGFzayAod2l0aCB0aGUgZWxlbWVudAotCSAgc3RhdGUgbG9jayBhY3F1aXJlZCksIGJ1dCB3ZSB3aWxsIHRyeSBhIGdzdF9lbGVtZW50X3NldF9zdGF0ZSBmcm9tCi0JICBnc3RydHNwc3JjIHRocmVhZCB3aGljaCB3aWxsIGJsb2NrIG9uIHRoZSBlbGVtZW50IHN0YXRlIGxvY2sgY2F1c2luZyBhCi0JICBkZWFkbG9jay4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQzMTIKLQotMjAxMi0xMi0xMCAxMTo0NDoyNiArMDAwMCAgQWxleGV5IENoZXJub3YgPDRlcm5vdkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogRml4IHJlc2l6aW5nIHRoZSBDb2NvYSB3aW5kb3cgb24gcmVjZWl2aW5nIG5ldyBjYXBzCi0JICBGaXhlcyBidWcgIzY4OTczMi4KLQotMjAxMi0xMS0zMCAyMDozNzo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSAgdjRsMnNyYzogbGluayBhZ2FpbnN0IC1scnQgZm9yIGNsb2NrX2dldHRpbWUoKQotCSAgTmVlZCB0byBleHBsaWNpdGx5IGxpbmsgYWdhaW5zdCAtbHJ0IGZvciBjbG9ja19nZXR0aW1lKCksIHdoaWNoCi0JICB3ZSBkb24ndCBnZXQgaW4gdGhlIGxpYnMgYW55IG1vcmUsIGJlY2F1c2UgY29yZSBtb3ZlZCB0aGUKLQkgIGdtb2R1bGUtbm8tZXhwb3J0LTIuMCBiaXQgaW50byBSZXF1aXJlcy5Qcml2YXRlLgotCSAgTm90IHJlcXVpcmVkIGZvciBuZXdlciBnbGliYywgYnV0IGZvciBvbGRlciBvbmVzLCBzbyBjaGVjayBmb3IgdGhhdC4KLQotMjAxMi0xMS0zMCAxNzoyMjo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDJzZW5kOiBhY2NlcHQgYXVkaW8vd2VibSBhcyB3ZWxsIGFzIHZpZGVvL3dlYm0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODkzMzYKLQotMjAxMi0xMS0zMCAxNzoyMDoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JICB3ZWJtdXg6IGZpeCBsaW5raW5nIHdpdGggc2hvdXQyc2VuZCBlbGVtZW50Ci0JICBTaG91dDJzZW5kIG9ubHkgYWNjZXB0cyB3ZWJtIGZvcm1hdCwgbm90IG1hdHJvc2thLCBidXQgZHVlCi0JICB0byBhIGJ1ZyBpbiBtYXRyb3NrYW11eCwgd2VibW11eCdzIHNvdXJjZSBwYWQgaXMgYWxzbyBjcmVhdGVkCi0JICB3aXRoIHRoZSBtYXRyb3NrYSBzb3VyY2UgcGFkIHRlbXBsYXRlIGFzIHBhZCB0ZW1wbGF0ZSwgd2hpY2gKLQkgIG1ha2VzIHRoZSBsaW5rIGZ1bmN0aW9uIHRoaW5rIGl0IGNhbid0IGxpbmsgd2VibW11eCB0byBzaG91dDJzZW5kLgotCSAgQWxzbyBhZGQgdW5pdCB0ZXN0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTMzNgotCi0yMDEyLTExLTI3IDExOjEzOjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiB1c2UgbmV3IG9wdGlvbiBwYXJzZXIgZnVuY3Rpb24KLQotMjAxMi0xMS0yNiAxNToxNzoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2xhdy9tdWxhdy1jb252ZXJzaW9uLmM6Ci0JICBsYXc6IGZpeCBhY2NpZGVudGFsIGZpbGUgcGVybWlzc2lvbnMgY2hhbmdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDY5Ci0KLTIwMTItMTEtMjUgMTY6MDU6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IHJlbW92ZSB1bnVzZWQgZGVmaW5lCi0KLTIwMTItMTEtMjUgMTQ6MTY6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYXZvaWQgY3JpdGljYWxzIGlmIHVua25vd24gZm91cmNjIGhhcyBzcGFjZSBhdCBiZWdpbm5pbmcgb3IgZW5kCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyOTM2Ci0KLTIwMTItMTEtMjQgMTk6MzI6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IGZpeCBib3JkZXIgZmlsbGluZyBmb3IgcGxhbmFyIFlVViBmb3JtYXRzCi0JICBXZSB3b3VsZCBnZXQgYSBncmVlbiBib3JkZXIgaW5zdGVhZCBvZiBhIGJsYWNrIG9uZSwgZm9yCi0JICBleGFtcGxlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDk5MQotCi0yMDEyLTExLTI0IDE0OjI3OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbGF3L211bGF3LWNvbnZlcnNpb24uYzoKLQkgIG11bGF3OiBjb25zdC1pZnkgc29tZSBhcnJheXMKLQotMjAxMi0xMS0wMiAxMjozODo0NCAtMDQwMCAgUm9sYW5kIEtyaWthdmEgPHJrcmlrYXZhQGdtYWlsLmNvbT4KLQotCSogZ3N0L2xhdy9tdWxhdy1jb252ZXJzaW9uLmM6Ci0JICBtdWxhd2RlYzogZml4IGludGVnZXIgb3ZlcnJ1bgotCSAgVGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIDY1NTM1IHNhbXBsZXMgaW4gYSBjaHVuayBvZiBkYXRhLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzQ2OQotCi0yMDEyLTExLTIyIDExOjM0OjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwYXVzZSB0aGUgdGFzayBpbnN0ZWFkIG9mIHNwaW5uaW5nCi0JICBBY3R1YWxseSBwYXVzZSB0aGUgbG9vcCB0YXNrIGluc3RlYWQgb2Ygc3Bpbm5pbmcgZm9yZXZlci4KLQotMjAxMi0xMS0xOSAwMzozMTozNyAtMDUwMCAgSm9zaHVhIE0uIERvZSA8b3NzQG52bC5hcm15Lm1pbD4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBBZGQgZ3JheSA4LzE2IHN1cHBvcnQKLQotMjAxMi0xMS0xOSAxMToyNToxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGI0OTdjNGYgdG8gYTcyZmFlYQotCi0yMDEyLTExLTE2IDE1OjM4OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBoYW5kbGUgc2VnbWVudCBldmVudAotCSAgTWFrZSBhIHNlZ21lbnQgZXZlbnQgd2hlbiB3ZSBzZW5kIGEgbmV3IHJhbmdlIGhlYWRlciB0byBhIGNsaWVudCAoZmlyc3QgUExBWQotCSAgcmVxdWVzdCBvciBhZnRlciBhIHNlZWspLiBTZW5kIHRoZSBzZWdtZW50IGV2ZW50IGluIGludGVybGVhdmVkIG1vZGUuCi0JICBDbGVhbiB0aGUgc2VnbWVudCBldmVudCBvbiBjbGVhbnVwCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg4MzgyCi0KLTIwMTItMTEtMTYgMTU6MTg6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBjaGVjayBmb3IgYWN0aXZlIHN0cmVhbXMKLQkgIEEgc3RyZWFtIGNhbiBiZSBhY3RpdmUgd2l0aG91dCBhIHNyY3BhZCB5ZXQgYW5kIHdlIHdhbnQgdG8gc2VuZAotCSAgZXZlbnRzIG9uIHRob3NlIHN0cmVhbXMgYXMgd2VsbC4KLQotMjAxMi0xMS0xNiAxMzozMTowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogY3JlYXRlIGFuZCBhZGQgcGFkcyBvdXRzaWRlIG9mIGxvY2sKLQkgIENyZWF0ZSBhbmQgYWRkIHRoZSBnaG9zdHBhZCBmb3IgdGhlIG5ldyBzdHJlYW0gb3V0c2lkZSBvZiB0aGUgbG9jayBiZWNhdXNlIGl0Ci0JICBpcyBub3QgbmVlZGVkIGFuZCBjYXVzZXMgZGVhZGxvY2tzLgotCi0yMDEyLTA5LTEyIDIyOjExOjIwIC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXVlIDxhbGVpeEBvYmxvbmcuY29tPgotCi0JICBydHNwc3JjOiBhbGxvdyBjbGllbnQgdG8gZGlzYWJsZSByZWNvbm5lY3Rpb24KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5bY2hdOiBhZGRlZCBuZXcgInVkcC1yZWNvbm5lY3QiIHByb3BlcnR5LiBCZWZvcmUsCi0JICBydHNwc3JjIGFsd2F5cyB0cmllZCB0byByZWNvbm5lY3QgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBSVFNQCi0JICBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYnkgdGhlIHNlcnZlci4gVGhpcyBwcm9wZXJ0eSBsZXRzIHRoZSB1c2VyCi0JICBkZWNpZGUgd2hldGhlciBpdCB3YW50cyBydHNwc3JjIHRvIHJlY29ubmVjdCBvciBub3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzOTEyCi0KLTIwMTItMTEtMTYgMTI6MTY6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNsZWFyIHZhcmlhYmxlcyBiZWZvcmUgcmV0cnlpbmcKLQkgIEVsc2Ugd2UgbWlnaHQgdW5yZWYgYW4gb2xkIHVkcHNyYyB0d2ljZSBpbiBjbGVhbnVwLgotCi0yMDEyLTExLTE2IDEyOjAwOjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwcm9wb3NlIHBvcnRzIGluIG11bHRpY2FzdAotCSAgV2hlbiB0aGUgdXNlciBjb25maWd1cmVkIGEgcG9ydC1yYW5nZSwgcHJvcG9zZSBwb3J0cyBmcm9tIHRoaXMgcmFuZ2UKLQkgIGFzIHRoZSBtdWx0aWNhc3QgcG9ydHMuIFRoZSBzZXJ2ZXIgaXMgZnJlZSB0byBpZ25vcmUgdGhpcyByZXF1ZXN0IGJ1dCBpZiBpdAotCSAgaG9ub3VycyBpdCwgaW5jcmVtZW50IG91ciBwb3J0cyBzbyB0aGF0IHdlIHN1Z2dlc3QgdGhlIG5leHQgcG9ydCBwYWlyIGZvciB0aGUKLQkgIG5leHQgc3RyZWFtLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTQyMAotCi0yMDEyLTExLTE2IDExOjU4OjUzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgbW9yZSBkZWJ1ZwotCi0yMDEyLTExLTE2IDA5OjA5OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IHBvc3QgbWVzc2FnZXMgaW4gbWF4LXNpemUgbW9kZSBhcyB3ZWxsCi0JICBObyByZWFzb24gbm90IHRvIHJlYWxseS4KLQotMjAxMi0xMS0xNSAxNDozNzo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogcG9zdCBlcnJvciBiZWZvcmUgc3RvcHBpbmcKLQotMjAxMi0xMS0xNCAwMDoxMzozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkgIGdzdF9hZGFwdGVyX3ByZXZfdGltZXN0YW1wIC0+IGdzdF9hZGFwdGVyX3ByZXZfcHRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1NTk4Ci0KLTIwMTItMTEtMTIgMTk6MjM6NDEgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBBZGQgTlYxMi9OVjIxIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODgyMjUKLQotMjAxMi0xMS0xMiAxMzowMToyMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IERvbid0IGxlYWsgR3N0VmlkZW9Db2RlY0ZyYW1lcyB0aGF0IGNhdXNlIHRoZSBjcmVhdGlvbiBvZiBpbnZpc2libGUgZnJhbWVzCi0JICBGaXhlcyBidWcgIzY4MjcxNC4KLQotMjAxMi0xMS0xMiAxMTo0NzoxNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlOiBVc2UgbmV3IEdUeXBlIGZvciBHVGhyZWFkIGluc3RlYWQgb2YganVzdCBHX1RZUEVfUE9JTlRFUgotCi0yMDEyLTExLTEyIDExOjE0OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogcHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgUlRQIHBhY2tldHMKLQotMjAxMi0xMS0xMiAxMDo0NDowMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IEFjdHVhbGx5IHVzZSB0aGUgc3RvcCgpIHZmdW5jIGltcGxlbWVudGF0aW9uCi0KLTIwMTItMTEtMTIgMTA6MzE6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSAgdnA4ZGVjOiBGaXggbGFzdCBjb21taXQKLQotMjAxMi0xMS0xMiAxMDoxMDoxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IEtlZXAgdGhlIGlucHV0IHN0YXRlIGluIHJlc2V0KCkKLQkgIEl0J3Mgc3RpbGwgdmFsaWQgYWZ0ZXIgYSBmbHVzaCBhbmQgd2UgbWlnaHQgbm90IGdldCBhIG5ldyBvbmUuCi0KLTIwMTItMTEtMTIgMTA6MDg6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSAgdnA4ZGVjOiBBbHNvIGRlc3Ryb3kgZGVjb2RlciBpbiBzZXRfZm9ybWF0KCkgaWYgaXQgd2FzIGNyZWF0ZWQgYWxyZWFkeQotCSAgRml4ZXMgYSBtZW1vcnkgbGVhay4KLQotMjAxMi0xMS0xMiAwOTo0ODo0NSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JICB2cDhkZWM6IERvbid0IGNsZWFyIGlucHV0IHN0YXRlIGluIHJlc2V0KCkKLQkgIFRoZSBpbnB1dCBzdGF0ZSBpcyBzdGlsbCB2YWxpZCBhZnRlciBmbHVzaGluZyB1bnRpbAotCSAgbmV3IGNhcHMgYXJyaXZlLgotCSAgRml4ZXMgYnVnICM2ODgwOTIuCi0KLTIwMTItMTEtMTAgMTg6MjE6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICB2aWRlb2Nyb3A6IGFkZCBzdXBwb3J0IGZvciBZVjEyCi0JICBXZSBjYW4gZG8gSTQyMCwgc28gd2UgY2FuIGRvIFlWMTIgYXMgd2VsbC4KLQotMjAxMi0xMS0xMCAxMjozOTowOCArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgbXVsdGlmaWxlc2luazogZG9uJ3Qgd3JpdGUgc3RyZWFtIGhlYWRlcnMgd2l0aCBrZXktdW5pdC1ldmVudAotCSAgRG9uJ3Qgd3JpdGUgc3RyZWFtIGhlYWRlcnMsIGxldCB1cHN0cmVhbSBlbGVtZW50cyBpbnNlcnQgdGhlbSBpbiB0aGUgc3RyZWFtIGlmCi0JICBhbGxfaGVhZGVycz10cnVlIGlzIHNldCBpbiBrZXkgdW5pdCBldmVudHMuCi0KLTIwMTItMTEtMDkgMTM6Mjc6MTYgKzAxMDAgIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmg6Ci0JICB2aWRlb2Nyb3A6IEFkZCBOVjEyL05WMjEgc3VwcG9ydAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzk2NAotCi0yMDEyLTExLTA5IDE2OjMxOjA1ICswMTAwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmM6Ci0JICB2cDhkZWM6IERvbid0IGdpdmUgdXAgc28gZWFzaWx5IGlmIGZhaWxlZCB0byBkZWNvZGUgYSBmcmFtZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzQzNgotCi0yMDEyLTExLTA5IDExOjIyOjMwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogQWxzbyBjbGVhciBHRXJyb3IKLQotMjAxMi0xMS0wOSAxMToyMDoyNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IERvbid0IGVycm9yIG91dCBpZiB3ZSBnZXQgYW4gSUNNUCBkZXN0aW5hdGlvbi11bnJlYWNoYWJsZSBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIHJlYWQgcGFja2V0cwotCSAgU2VlIGJ1ZyAjNTI5NDU0IGFuZCAjNjg3NzgyIGFuZCBjb21taXQKLQkgIDc1MWYyYmIzNjQ2ZjJiZWZmMzY5OGM5ZjA5OTAwZGJkMGVhMDhhYmIKLQotMjAxMi0xMS0wNyAyMDozNTo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiB1cGRhdGUgY291cnRlc3kgb2YgYXV0b3VwZGF0ZQotCi0yMDEyLTExLTA3IDE4OjQ4OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBsZXQgQUdfR1NUX1BMVUdJTl9ET0NTIGNoZWNrIGZvciBweXRob24KLQkgIEFuZCB1cGRhdGUgY29tbW9uIGZvciBtb3ZlIGZyb20gQVNfUEFUSF9QWVRIT04gdG8gQU1fUEFUSF9QWVRIT04sCi0JICB3aGljaCBhcyBhIHNpZGUtZWZmZWN0IHNob3VsZCBwaWNrIHVwIG5ld2VyIHB5dGhvbiB2ZXJzaW9ucyBhcwotCSAgd2VsbC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NjM5MDMKLQotMjAxMi0xMS0wNyAxMzozNjozMyArMDEwMCAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8dXJhZXVzQGxpbnV4cmlzaW4ub3JnPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgRml4IHZwOHJ0cCBoZWFkZXIgbmFtZXMgaW4gTWFrZWZpbGUKLQotMjAxMi0xMS0wNiAxNTowMzo1NSArMDEwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jOgotCSAgdmlkZW9jcm9wOiBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGljIGNyb3BwaW5nCi0JICBUaGlzIGNoYW5nZSBlbmFibGUgYXV0b21hdGljIGNyb3BwaW5nIHVzaW5nIC0xIHNldCB0byBsZWZ0LCB0b3AsIHJpZ2h0IG9yCi0JICBib3R0b20gcHJvcGVydHkuIEluIHRoZSBjYXNlIGJvdGggc2lkZSBhcmUgc2V0IHRvIGF1dG9tYXRpYyBjcm9wcGluZywgdGhlCi0JICBjcm9waW5nIHdpbGwgYmUgZG9uZSBlcXVhbGx5IG9uIGJvdGggc2lkZSAoaW4gdGhlIG9kZCBjYXNlLCByaWdodCBhbmQKLQkgIGJvdHRvbSBjcm9wcGluZyB3aWxsIGJlIDEgcGl4ZWwgbW9yZSkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NzYxCi0KLTIwMTItMTEtMDIgMTY6Mzk6MjggKzAxMDAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JICBzcGVleGRlYzogRG9uJ3QgdW5tYXAgb3IgZmluaXNoX2ZyYW1lIGFuIGludmFsaWQgR3N0QnVmZmVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDY0Ci0KLTIwMTItMTEtMDYgMTM6MjI6NTggKzAxMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3A6IHRoZSBSVENQIHBvcnQgbnVtYmVyIGlzIGluY2x1c2l2ZQotCSAgVGhlIGNvbmZpZ3VyZWQgcG9ydCBudW1iZXIgcGFpciBoYXMgaXRzIHVwcGVyIGJvdW5kIHNldCB0byB0aGUgbWF4aW11bQotCSAgYWxsb3dlZCBSVENQIHBvcnQsIGluY2x1c2l2ZS4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM5NDIwCi0KLTIwMTItMTEtMDMgMjA6Mzg6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZkZXRlY3QuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZkZXRlY3QuaDoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5Lmg6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmg6Ci0JICBGaXggRlNGIGFkZHJlc3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc1MjAKLQotMjAxMi0xMS0wNCAwMDowNzoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2FhbGliL2dzdGFhc2luay5oOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5Lmg6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5oOgotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5oOgotCSogZXh0L2R2L2dzdGR2LmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4Lmg6Ci0JKiBleHQvZHYvZ3N0c21wdGV0aW1lY29kZS5jOgotCSogZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuaDoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka2FuaW1hdGlvbi5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrYW5pbWF0aW9uLmg6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZmRlYy5oOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmb3ZlcmxheS5oOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmcGx1Z2luLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmg6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuaDoKLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkqIGV4dC9qYWNrL2dzdGphY2suaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50Lmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5oOgotCSogZXh0L2phY2svZ3N0amFja3JpbmdidWZmZXIuaDoKLQkqIGV4dC9qYWNrL2dzdGphY2t1dGlsLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrdXRpbC5oOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZy5oOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSogZXh0L2pwZWcvZ3N0c21va2VkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmg6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOgotCSogZXh0L2pwZWcvZ3N0c21va2VlbmMuaDoKLQkqIGV4dC9qcGVnL3Ntb2tlY29kZWMuYzoKLQkqIGV4dC9qcGVnL3Ntb2tlY29kZWMuaDoKLQkqIGV4dC9qcGVnL3Ntb2tlZm9ybWF0Lmg6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaDoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZy5oOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmg6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuaDoKLQkqIGV4dC9taWttb2QvUkVBRE1FOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzoKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmg6Ci0JKiBleHQvbWlrbW9kL21pa21vZF90eXBlcy5jOgotCSogZXh0L21pa21vZC9taWttb2RfdHlwZXMuaDoKLQkqIGV4dC9wdWxzZS9wbHVnaW4uYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5oOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTQuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTRjbG9jay5jOgotCSogZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmg6Ci0JKiBleHQvcmF3MTM5NC9nc3QxMzk0cHJvYmUuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTRwcm9iZS5oOgotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuaDoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuaDoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmg6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXguYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSogZXh0L3RhZ2xpYi9nc3RhcGV2Mm11eC5jYzoKLQkqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguaDoKLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JKiBleHQvdGFnbGliL2dzdGlkM3YybXV4Lmg6Ci0JKiBleHQvdGFnbGliL2dzdHRhZ2xpYnBsdWdpbi5jOgotCSogZXh0L3ZweC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4ZGVjLmg6Ci0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZweC9nc3R2cDhlbmMuaDoKLQkqIGV4dC92cHgvZ3N0dnA4dXRpbHMuYzoKLQkqIGV4dC92cHgvZ3N0dnA4dXRpbHMuaDoKLQkqIGV4dC92cHgvcGx1Z2luLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmg6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmg6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmg6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmg6Ci0JKiBnc3QtbGlicy9nc3QvZ2V0dGV4dC5oOgotCSogZ3N0LWxpYnMvZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaDoKLQkqIGdzdC1saWJzL2dzdC9nc3QtaTE4bi1wbHVnaW4uaDoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmg6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuaDoKLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5Lmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2VjaG8uYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5oOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5oOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0Lmg6Ci0JKiBnc3QvYXVkaW9meC9tYXRoX2NvbXBhdC5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmg6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmg6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuaDoKLQkqIGdzdC9hdmkvYXZpLWlkcy5oOgotCSogZ3N0L2F2aS9nc3RhdmkuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5oOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmg6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9jcHVyZXBvcnQuaDoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNkZWJ1Zy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc2RlYnVnLmg6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RkZWJ1Zy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2aWdhdGlvbnRlc3QuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0Lmg6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmg6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuaDoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0Lmg6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcHJvZ3Jlc3NyZXBvcnQuaDoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RwbHVnaW4uYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RzLmM6Ci0JKiBnc3QvZGVidWd1dGlscy90ZXN0cy5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmFzbToKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHlobWFjcm9zLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9wbHVnaW5zLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3NjYWxlcmJvYi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmUuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmViZmYuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmV0ZmYuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUveDg2LTY0X21hY3Jvcy5pbmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RvcC5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmg6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaDoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmg6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuaDoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5oOgotCSogZ3N0L2Zsdi9hbWZkZWZzLmg6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkqIGdzdC9mbHYvZ3N0aW5kZXguYzoKLQkqIGdzdC9mbHYvZ3N0aW5kZXguaDoKLQkqIGdzdC9mbHYvZ3N0bWVtaW5kZXguYzoKLQkqIGdzdC9mbHgvZmx4X2NvbG9yLmM6Ci0JKiBnc3QvZmx4L2ZseF9jb2xvci5oOgotCSogZ3N0L2ZseC9mbHhfZm10Lmg6Ci0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuaDoKLQkqIGdzdC9nb29tL2NvbmZpZ19wYXJhbS5jOgotCSogZ3N0L2dvb20vY29udm9sdmVfZnguYzoKLQkqIGdzdC9nb29tL2RyYXdtZXRob2RzLmM6Ci0JKiBnc3QvZ29vbS9kcmF3bWV0aG9kcy5oOgotCSogZ3N0L2dvb20vZmlsdGVycy5jOgotCSogZ3N0L2dvb20vZmlsdGVyc19tbXguczoKLQkqIGdzdC9nb29tL2ZseWluZ19zdGFyc19meC5jOgotCSogZ3N0L2dvb20vZ29vbS5oOgotCSogZ3N0L2dvb20vZ29vbV9jb25maWcuaDoKLQkqIGdzdC9nb29tL2dvb21fY29uZmlnX3BhcmFtLmg6Ci0JKiBnc3QvZ29vbS9nb29tX2NvcmUuYzoKLQkqIGdzdC9nb29tL2dvb21fZmlsdGVycy5oOgotCSogZ3N0L2dvb20vZ29vbV9meC5oOgotCSogZ3N0L2dvb20vZ29vbV9ncmFwaGljLmg6Ci0JKiBnc3QvZ29vbS9nb29tX3BsdWdpbl9pbmZvLmg6Ci0JKiBnc3QvZ29vbS9nb29tX3Rvb2xzLmM6Ci0JKiBnc3QvZ29vbS9nb29tX3Rvb2xzLmg6Ci0JKiBnc3QvZ29vbS9nb29tX3R5cGVkZWZzLmg6Ci0JKiBnc3QvZ29vbS9nb29tX3Zpc3VhbF9meC5oOgotCSogZ3N0L2dvb20vZ3JhcGhpYy5jOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5oOgotCSogZ3N0L2dvb20vbGluZXMuYzoKLQkqIGdzdC9nb29tL2xpbmVzLmg6Ci0JKiBnc3QvZ29vbS9tYXRodG9vbHMuYzoKLQkqIGdzdC9nb29tL21hdGh0b29scy5oOgotCSogZ3N0L2dvb20vbW90aWZfZ29vbTEuaDoKLQkqIGdzdC9nb29tL21vdGlmX2dvb20yLmg6Ci0JKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOgotCSogZ3N0L2dvb20vcHBjX2RyYXdpbmdzLmg6Ci0JKiBnc3QvZ29vbS9wcGNfZHJhd2luZ3MuczoKLQkqIGdzdC9nb29tL3BwY196b29tX3VsdGltYXRlLmg6Ci0JKiBnc3QvZ29vbS9wcGNfem9vbV91bHRpbWF0ZS5zOgotCSogZ3N0L2dvb20vc291bmRfdGVzdGVyLmM6Ci0JKiBnc3QvZ29vbS9zb3VuZF90ZXN0ZXIuaDoKLQkqIGdzdC9nb29tL3N1cmYzZC5jOgotCSogZ3N0L2dvb20vc3VyZjNkLmg6Ci0JKiBnc3QvZ29vbS90ZW50YWNsZTNkLmM6Ci0JKiBnc3QvZ29vbS90ZW50YWNsZTNkLmg6Ci0JKiBnc3QvZ29vbS92M2QuYzoKLQkqIGdzdC9nb29tL3YzZC5oOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5oOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguaDoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4Lmg6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5oOgotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuaDoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaDoKLQkqIGdzdC9pbnRlcmxlYXZlL3BsdWdpbi5jOgotCSogZ3N0L2ludGVybGVhdmUvcGx1Z2luLmg6Ci0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zLmg6Ci0JKiBnc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXNyZWNvdmVyeS5oOgotCSogZ3N0L2lzb21wNC9kZXNjcmlwdG9ycy5jOgotCSogZ3N0L2lzb21wNC9kZXNjcmlwdG9ycy5oOgotCSogZ3N0L2lzb21wNC9mb3VyY2MuaDoKLQkqIGdzdC9pc29tcDQvZnR5cGNjLmg6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC1kb2MuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmg6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4Lmg6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmg6Ci0JKiBnc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5Lmg6Ci0JKiBnc3QvaXNvbXA0L2lzb21wNC1wbHVnaW4uYzoKLQkqIGdzdC9pc29tcDQvcHJvcGVydGllcy5jOgotCSogZ3N0L2lzb21wNC9wcm9wZXJ0aWVzLmg6Ci0JKiBnc3QvaXNvbXA0L3F0YXRvbXBhcnNlci5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2ZvdXJjYy5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2xhbmcuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9sYW5nLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5oOgotCSogZ3N0L2lzb21wNC9xdHBhbGV0dGUuaDoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuaDoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuaDoKLQkqIGdzdC9sYXcvYWxhdy5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmg6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuaDoKLQkqIGdzdC9sYXcvbXVsYXcuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmg6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuaDoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLmM6Ci0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS93ZWJtLW11eC5oOgotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jOgotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5oOgotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmg6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZS5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmg6Ci0JKiBnc3QvbXVsdGlmaWxlL3BhdHRlcm5zcGVjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL3BhdHRlcm5zcGVjLmg6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5oOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4Lmg6Ci0JKiBnc3QvcnRwL2ZudjFoYXNoLmM6Ci0JKiBnc3QvcnRwL2ZudjFoYXNoLmg6Ci0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFjM3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjaGFubmVscy5jOgotCSogZ3N0L3J0cC9nc3RydHBjaGFubmVscy5oOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWNlbHBkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5oOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtYW5hZ2VyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4Lmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmg6Ci0JKiBnc3QvcnRzcC9nc3RydHNwLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwLmg6Ci0JKiBnc3QvcnRzcC9nc3RydHNwZXh0LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwZXh0Lmg6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuaDoKLQkqIGdzdC9zbXB0ZS9iYXJib3h3aXBlcy5jOgotCSogZ3N0L3NtcHRlL2dzdG1hc2suYzoKLQkqIGdzdC9zbXB0ZS9nc3RtYXNrLmg6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5oOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmg6Ci0JKiBnc3Qvc21wdGUvcGFpbnQuYzoKLQkqIGdzdC9zbXB0ZS9wYWludC5oOgotCSogZ3N0L3NtcHRlL3BsdWdpbi5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcC5oOgotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5jOgotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guaDoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5oOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmg6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvbWVkaWFuLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9tZWRpYW4uaDoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvcGx1Z2luLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjJwYWQuaDoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kcGx1Z2luLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JKiBzeXMvb3NzL2NvbW1vbi5oOgotCSogc3lzL29zcy9nc3Rvc3NhdWRpby5jOgotCSogc3lzL29zcy9nc3Rvc3NkbWFidWZmZXIuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzZG1hYnVmZmVyLmg6Ci0JKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5jOgotCSogc3lzL29zcy9nc3Rvc3NoZWxwZXIuaDoKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmg6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuaDoKLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uYzoKLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uaDoKLQkqIHN5cy9vc3M0L29zczQtcHJvcGVydHktcHJvYmUuYzoKLQkqIHN5cy9vc3M0L29zczQtcHJvcGVydHktcHJvYmUuaDoKLQkqIHN5cy9vc3M0L29zczQtc2luay5jOgotCSogc3lzL29zczQvb3NzNC1zaW5rLmg6Ci0JKiBzeXMvb3NzNC9vc3M0LXNvdXJjZS5jOgotCSogc3lzL29zczQvb3NzNC1zb3VyY2UuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5oOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmg6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5oOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuaDoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suaDoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuaDoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9vdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9vdmVybGF5Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50Lmg6Ci0JKiBzeXMvdjRsMi90dW5lci5jOgotCSogc3lzL3Y0bDIvdHVuZXIuaDoKLQkqIHN5cy92NGwyL3R1bmVyY2hhbm5lbC5jOgotCSogc3lzL3Y0bDIvdHVuZXJjaGFubmVsLmg6Ci0JKiBzeXMvdjRsMi90dW5lcm5vcm0uYzoKLQkqIHN5cy92NGwyL3R1bmVybm9ybS5oOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3JtcGx1Z2luLmM6Ci0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmM6Ci0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmg6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaDoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hYWNwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWMzcGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FscGhhY29sb3IuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FtcnBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hcGV2Mm11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2FtcGxpZnkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ludmVydC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXV0b2RldGVjdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmlzdWJ0aXRsZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc3NldHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmxhY3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZkZW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9nZGtwaXhidWZzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzZGVtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2RlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2VuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tYXRyb3NrYXBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tcGVnYXVkaW9wYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9wYXJzZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zaGFwZXdpcGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGVjdHJ1bS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3VuYXVkaW8uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2ZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdnA4ZGVjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDhlbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tlbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2twYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2VmZmVjdHYuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3RhZ3NjaGVja2luZy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdnBhY2suYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvZmlyZmlsdGVyLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvaWlyZmlsdGVyLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL2NhaXJvX292ZXJsYXkuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2xldmVsL2xldmVsLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3B1bHNlL3B1bHNlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vc3BlY3RydW0tZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOgotCSogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmc2luay10ZXN0LmM6Ci0JKiB0ZXN0cy9pY2xlcy90ZXN0LW9zczQuYzoKLQkqIHRlc3RzL2ljbGVzL3Y0bDJzcmMtdGVzdC5jOgotCSogdGVzdHMvaWNsZXMvdmlkZW9ib3gtdGVzdC5jOgotCSogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzoKLQkqIHRlc3RzL2ljbGVzL3ZpZGVvY3JvcDItdGVzdC5jOgotCSogdGVzdHMvaWNsZXMveGltYWdlc3JjLXRlc3QuYzoKLQkgIEZpeCBGU0YgYWRkcmVzcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzUyMAotCi0yMDEyLTExLTAyIDE4OjQ3OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgdnJhd2RlcGF5OiBkb24ndCBhY2Nlc3MgcnRwIGJ1ZmZlciBhZnRlciB1bm1hcAotCSAgUmVhZCB0aGUgbWFya2VyIGJpdCBiZWZvcmUgd2UgdW5tYXAgdGhlIHJ0cCBwYWNrZXQuCi0KLTIwMTItMTEtMDIgMDk6MzQ6MjUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSAgdnA4ZGVjOiBJbW1lZGlhdGVseSByZXR1cm4gaWYgb3BlbmluZyB0aGUgZGVjb2RlciBmYWlsZWQKLQkgIEluc3RlYWQgb2YgaWdub3JpbmcgYW55IGVycm9ycy4KLQotMjAxMi0xMS0wMSAyMjowMjozOSArMDEwMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSAgdnA4ZGVjOiBTaG9ydCBjaXJjdWl0IGdzdF92cDhfZGVjX2hhbmRsZV9mcmFtZSBpZiBrZXlmcmFtZSBpcyBtaXNzaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Mzc2Ci0KLTIwMTItMTEtMDIgMTA6NTM6NTcgKzEzMDAgIERvdWdsYXMgQmFnbmFsbCA8ZG91Z2xhc0BwYXJhZGlzZS5uZXQubno+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JICB2aWRlb2NvbnZlcnQ6IENvbXBhcmUgeSBvZmZzZXQgd2l0aCBoZWlnaHQsIG5vdCB3aWR0aCwgd2hlbiB0ZXN0aW5nIGZvciBvdmVybGFwCi0JICBUaGlzIGNvdWxkIGhhdmUgcHJldmVudGVkIGltYWdlcyBzaG93aW5nIHRoYXQgc2hvdWxkIGhhdmUgd2hlbiB0aGUKLQkgIHNvdXJjZSBoZWlnaHQgaXMgZ3JlYXRlciB0aGFuIGl0cyB3aWR0aC4KLQkgIFdoZW4gd2lkdGggZXhjZWVkcyBoZWlnaHQsIGFzIGlzIGNvbW1vbiwgaXQgcHJvYmFibHkgb25seSBjYXVzZWQgYQotCSAgbWluaXNjdWxlIGFtb3VudCBvZiB1bm5lY2Vzc2FyeSB3b3JrLiAgSSBoYXZlbid0IHRlc3RlZC4KLQotMjAxMi0xMS0wMSAyMTowOTo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDhkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5Lmg6Ci0JICBydHB2cDg6IGluY2x1ZGUgY29uZmlnLmggYW5kIG1pbm9yIHN0eWxlIGZpeGVzCi0KLTIwMTItMTEtMDEgMjA6MTM6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICBydHA6IGZpeCB0YWJzL3NwYWNlIG1lc3MgaW4gTWFrZWZpbGUuYW0KLQotMjAxMi0xMS0wMSAyMDowNTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOC5jOgotCSAgcnRwOiBtb3ZlIFZQOCBwYXlsb2FkZXIgYW5kIGRlcGF5bG9hZGVyIGZyb20gLWJhZAotCSAgU3BlYyBpcyBzdGlsbCBpbiBkcmFmdCBzdGF0ZSwgYnV0IHNob3VsZCBob3BlZnVsbHkgbm90Ci0JICBjaGFuZ2UgbXVjaCBub3cuIEJlc2lkZXMsIHdlIGFubm91bmNlIHRoaW5ncyBhcyBWUDgtRFJBRlQtSUVURi0wMQotCSAgaW4gb3VyIGNhcHMsIHNvIGV2ZW4gaWYgdGhpbmdzIGNoYW5nZSBpbiBpbmNvbXBhdGlibGUgd2F5cyBpdAotCSAgc2hvdWxkIG5vdCBicmVhayBhbnl0aGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODcyNjMKLQotMjAxMi0xMC0xNyAxNzozNDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDg6IHVzZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhKCkKLQkgIHdoZXJlIHBvc3NpYmxlLiBBdm9pZHMgc29tZSBzdHJpbmcgY29waWVzLiBBbHNvIHJlLWluZGVudAotCSAgc29tZSBzdHVmZi4gQWxzbyBzb21lIGluZGVudCBmaXhlcyBoZXJlIGFuZCB0aGVyZS4KLQotMjAxMi0wOS0xNCAxNzowODo0OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDg6IHJlcGxhY2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIHdpdGggZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhCi0KLTIwMTItMDQtMDUgMTg6MDI6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOC5jOgotCSAgcnRwdnA4OiB1cGRhdGUgZm9yIEdTVF9QTFVHSU5fREVGSU5FKCkgQVBJIGNoYW5nZXMKLQotMjAxMi0wMy0yOCAxMjo0OTo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkgIHJ0cHZwODogdXBkYXRlIGZvciBidWZmZXIgY2hhbmdlcwotCi0yMDEyLTAzLTAxIDE0OjU5OjU1IC0wMzAwICBEYW5pbG8gQ2VzYXIgTGVtZXMgZGUgUGF1bGEgPGRhbmlsby5jZXNhckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDg7IGZpeCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHRoaXJkIGRyYWZ0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcxMDczCi0KLTIwMTItMDEtMjUgMTY6MjA6NDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSAgcnRwdnA4OiBwb3J0IHNvbWUgbW9yZSB0byBuZXcgbWVtb3J5IEFQSQotCi0yMDEyLTAxLTI1IDEwOjQ1OjUxICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuaDoKLQkgIHJ0cHZwODogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMDMgMTI6MDY6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSAgcnRwdnA4cGF5OiBGaXggdHlwbwotCi0yMDExLTA5LTIzIDIyOjU4OjMwICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuaDoKLQkgIHJ0cHZwODogVXBkYXRlIHRoZSBwYXkvZGVwYXkgdG8gdGhlIGlldGYtZHJhZnQtMDEgc3BlYwotCi0yMDExLTA5LTEwIDExOjMxOjIwICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9kYm9vbGh1ZmYuYzoKLQkqIGdzdC9ydHAvZGJvb2xodWZmLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSAgcnRwdnA4OiBmaXggYml0c3RyZWFtIHBhcnNpbmcgdXNpbmcgdGhlIHdyb25nIGtpbmQgb2YgYml0cmVhZGVyCi0JICBWUDggdXNlcyBhIHByb2JhYmlsaXN0aWMgYm9vbCBjb2Rlciwgbm90IGEgc3RyYWlnaHQgYml0IGNvZGVyLgotCSAgVGhpcyBmaXhlcyBwYXJzaW5nIHdoZW4gZXJyb3ItcmVzaWxpZW50IGlzIHNldC4KLQkgIFRoaXMgY29tbWl0IGluY2x1ZGVzIGEgY29weSBvZiBsaWJ2cHgncyBib29sIGNvZGVyLCBCU0QgbGljZW5zZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyNjk0Ci0KLTIwMTEtMDctMTIgMTg6MDM6NTMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5LmM6Ci0JICBydHB2cDg6IFJlamVjdCB1bmtub3duIGJpdHN0cmVhbSB2ZXJzaW9ucwotCi0yMDExLTAzLTA0IDExOjU5OjQ0ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkgIHJ0cHZwODogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlCi0JICBNYWtlcyBtYWNvc3ggY29tcGlsZXIgaGFwcHkuCi0KLTIwMTEtMDEtMjMgMTc6MDI6MzggKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhkZXBheS5jOgotCSAgcnRwdnA4ZGVwYXk6IEFjY2VwdCBwYWNrZXRzIHdpdGggb25seSBvbmUgYnl0ZSBvZiBkYXRhCi0JICBXaGVuIGZyYWdtZW50aW5nIHBhcnRpb25zIGl0IGNhbiBoYXBwZW4gdGhhdCBhbiBSVFAgcGFja2V0IG9ubHkgY2FyaWVzIDEKLQkgIGJ5dGUgb2YgUlRQIGRhdGEuCi0KLTIwMTEtMDEtMjMgMTY6NDI6MTcgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4cGF5Lmg6Ci0JICBydHB2cDhwYXk6IFRyZWF0IHRoZSBmcmFtZSBoZWFkZXIganVzdCBsaWtlIGFueSBvdGhlciBwYXJ0aXRpb24KLQkgIFdoZW4gc2V0dGluZyB1cCB0aGUgaW5pdGlhbCBtYXBwaW5nIGp1c3QgYWN0IGFzIGlmIHRoZSBnbG9iYWwgZnJhbWUKLQkgIGluZm9ybWF0aW9uIGlzIGFub3RoZXIgcGFydGl0aW9uLiBUaGlzIHNhdmVzIHNwZWNpYWwtY2FzaW5nIGl0IGxhdGVyIGluCi0JICB0aGUgYWN0dWFsIHBhY2tldGl6aW5nIGNvZGUuCi0KLTIwMTAtMDUtMTYgMTc6MjM6MTcgKzAxMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSogZ3N0L3J0cC9kYm9vbGh1ZmYuTElDRU5TRToKLQkqIGdzdC9ydHAvZ3N0cnRwdnA4LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZwOHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cDhwYXkuaDoKLQkgIHJ0cHZwODogQWRkIHNpbXBsZSBwYXlsb2FkZXJzIGFuZCBkZXBheWxvYWRlcnMgZm9yIFZQOAotCSAgTWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy9jb2RlL3NwZWNzL3J0cC8sCi0JICB2ZXJzaW9uIDAuMy4yCi0KLTIwMTItMTEtMDEgMTg6NDI6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBnc3RwYXk6IGZpeCBmb3IgMS4wIGV2ZW50cwotCSAgQ2FwcyBldmVudHMgYXJlIHNvbWV0aW1lcyBub3QgZm9sbG93ZWQgYnkgYSBidWZmZXIgYnV0IGJ5IGFuIGV2ZW50LiBGbHVzaCBhbnkKLQkgIHBlbmRpbmcgY2FwcyBiZWZvcmUgd2UgbWFrZSBhIHBhY2tldCB3aXRoIHRoZSBldmVudC4KLQkgIENoYWluIHVwIHRvIHRoZSBwYXJlbnQgZXZlbnQgaGFuZGxlciBiZWZvcmUgd2UgYXR0ZW1wdCB0byBwdXNoIFJUUCBwYWNrZXRzLCBpdAotCSAgbWlnaHQgYmUgYSBzZWdtZW50IGV2ZW50LgotCi0yMDEyLTExLTAxIDE4OjQyOjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JICBnc3RkZXBheTogZml4IHNtYWxsIGxlYWsKLQotMjAxMi0xMS0wMSAxNzo0NDoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSAgZ3N0ZGVwYXk6IGFkZCBzdXBwb3J0IGZvciBldmVudHMKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYwotCi0yMDEyLTExLTAxIDE3OjQwOjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuaDoKLQkgIHJ0cGdzdHBheTogYWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgZXZlbnRzCi0JICBXZSBjdXJyZW50bHkgb25seSBzZW5kIHRhZ3MgYW5kIGN1c3RvbSBldmVudHMuIFRoZSBvdGhlciBldmVudHMKLQkgIG1pZ2h0IGludGVyZmVyZSB3aXRoIHRoZSByZWNlaXZlciB0aW1pbmdzIG9yIGFyZSBvdGhlcndpc2UgaGFuZGxlZAotCSAgYnkgUlRQLgotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3J0cC9nc3RydHBnc3RwYXkuYwotCi0yMDEyLTExLTAxIDE1OjU0OjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuaDoKLQkgIGdzdHBheTogcmV3cml0ZSBwYXlsb2FkZXIKLQkgIFVzZSBhZGFwdGVyIHRvIGFzc2VtYmxlIHRoZSBwYXlsb2FkIGFuZCBtYWtlIGEgZmx1c2ggZnVuY3Rpb24gdG8KLQkgIHR1cm4gdGhpcyBwYXlsb2FkIGludG8gKGZyYWdtZW50ZWQpIHBhY2tldHMuCi0JICBDb25mbGljdHM6Ci0JICBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jCi0JICBnc3QvcnRwL2dzdHJ0cGdzdHBheS5oCi0KLTIwMTItMTEtMDEgMTM6MDM6NDQgKzAwMDAgIERvdWdsYXMgQmFnbmFsbCA8ZG91Z2xhc0BwYXJhZGlzZS5uZXQubno+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JICB2aWRlb21peGVyOiBnZXQgaGVpZ2h0IHZpYSBHU1RfVklERU9fRlJBTUVfSEVJR0hULCBub3QgX1dJRFRICi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3MzMwCi0KLTIwMTItMTEtMDEgMTM6MDI6MTYgKzAwMDAgIERvdWdsYXMgQmFnbmFsbCA8ZG91Z2xhc0BwYXJhZGlzZS5uZXQubno+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZWJveDogZml4IGJvcmRlciBmaWxsaW5nIGZvciBncmF5IGZvcm1hdHMKLQkgIEdldCB0aGUgaGVpZ2h0IHZpYSBHU1RfVklERU9fRlJBTUVfSEVJR0hULCBub3QgX1dJRFRILgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzMzMAotCi0yMDEyLTExLTAxIDExOjU4OjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JICBnc3RkZXBheTogY2hlY2sgZm9yIGNvcnJlY3QgZnJhZ21lbnQgb2Zmc2V0Ci0JICBNYWtlIHN1cmUgd2Ugb25seSBpbnNlcnQgdGhlIHJ0cCBwYWNrZXQgaW4gdGhlIGFkYXB0ZXIgd2hlbiB0aGUKLQkgIGZyYWdfb2Zmc2V0IG1hdGNoZXMuIFdoZW4gdGhlIGZpcnN0IHBhY2tldCBvZiBhIGZyYWdtZW50IGlzIGRyb3BwZWQsCi0JICBpdCBhdm9pZHMgcHV0dGluZyB0aGUgcmVtYWluaW5nIHBhY2tldHMgaW4gdGhlIGFkYXB0ZXIgYW5kIHByb2Nlc3NpbmcKLQkgIHRoZSBwYXJ0aWFsIGZyYWdtZW50LgotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jCi0KLTIwMTItMTEtMDEgMTE6NTQ6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBnc3RwYXk6IHNldCBDIGZsYWcgb24gYWxsIGJ1ZmZlcnMgb2YgdGhlIGZyYWdtZW50Ci0JICBTZXQgdGhlIEMgZmxhZ3Mgb24gYWxsIHRoZSBmcmFnbWVudHMgaW5zdGVhZCBvZiBvbmx5IHRob3NlIHdpdGgKLQkgIGNhcHMgaW4gdGhlbS4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgaW4gdGhlIHJlY2VpdmVyIHRvIGNoZWNrIGlmIHRoZXJlCi0JICBpcyBhIGNhcHMgaW4gdGhlIGFzc2VtYmxlZCBmcmFnbWVudHMganVzdCBieSBsb29raW5nIGF0IHRoZSBsYXN0IFJUUAotCSAgcGFja2V0IGZsYWdzLgotCi0yMDEyLTExLTAxIDEwOjU1OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JICBnc3RkZXBheTogdXNlIHRoZSBjYXBzdmVyc2lvbgotCSAgVGFrZSB0aGUgY2FwcyBmcm9tIHRoZSBpbnB1dCBjYXBzIGFuZCBzdG9yZSBpdCBpbiB0aGUgc2xvdCBnaXZlbgotCSAgYnkgY2Fwc3ZlcnNpb24uCi0KLTIwMTItMTEtMDEgMTA6NTI6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5oOgotCSAgZ3N0cGF5OiBzZW5kIGNhcHMgaW5saW5lCi0JICBQbGFjZSB0aGUgY2Fwc3ZlcnNpb24gb24gdGhlIG91dGdvaW5nIGNhcHMgc28gdGhhdCB0aGV5IGVuZCB1cCBpbgotCSAgYW4gU0RQIGFzIHdlbGwuIFJlY2VpdmVycyBuZWVkIHRvIGtub3cgd2hhdCBjYXBzdmVyc2lvbiBhIHBhcnRpY3VsYXIKLQkgIGNhcHMgaXMgZm9yIHRvIGJlIGFibGUgdG8gbWF0Y2ggdGhlIGNhcHMgdG8gdGhlIENWIGluIHRoZSBSVFAgcGFja2V0cy4KLQkgIFBsYWNlIHRoZSBjYXBzIGluc2lkZSB0aGUgUlRQIHBhY2tldCB3aGVuZXZlciB0aGUgY2FwcyBjaGFuZ2UuCi0JICBCYXNlZCBvbiBwYXRjaCBieSBBbmRyemVqIEJpZW5pZWsgPGFuZHJ6ZWouYmllbmlla0BwdXJlLmNvbT4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmMKLQkgIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmgKLQotMjAxMi0xMC0zMSAxNjoxNzo0OCArMDAwMCAgQW5kcnplaiBCaWVuaWVrIDxhbmRyemVqLmJpZW5pZWtAcHVyZS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JICBnc3RwYXk6IGFkZCBkZWJ1ZwotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3J0cC9nc3RydHBnc3RwYXkuYwotCi0yMDEyLTEwLTMxIDE2OjA5OjI2ICswMDAwICBBbmRyemVqIEJpZW5pZWsgPGFuZHJ6ZWouYmllbmlla0BwdXJlLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSAgZGVwYXk6IGNvcnJlY3RseSBza2lwIGNhcHMgaGVhZGVyIHNpemUKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYwotCi0yMDEyLTA5LTI4IDAwOjQzOjM4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIG1hdHJvc2thZGVtdXg6IHB1dCBzdHJlYW1oZWFkZXJzIG9uIHZvcmJpcy9zcGVleC9mbGFjL3RoZW9yYSBjYXBzIHRvIG1ha2UgcmVtdXhpbmcgd29yawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDU4OQotCi0yMDEyLTEwLTI4IDAwOjA3OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBkb24ndCBhc3NlcnQgaW4gZ2V0X3RpbWUoKSB3aGVuIGNhbGxlZCBhZnRlciBzaHV0ZG93bgotCSAgV2hpY2ggbWlnaHQgaGFwcGVuIGlmIHRoZSBzb3VyY2UgZ2V0cyBzZXQgdG8gTlVMTCBzdGF0ZSBiZWZvcmUKLQkgIHRoZSByZXN0IG9mIHRoZSBwaXBlbGluZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY5ODUKLQotMjAxMi0xMC0zMCAxMToxMDo0OSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOgotCSAgdGVzdHM6IGZpeCBsZXZlbCBleGFtcGxlCi0JICBVc2UgdGhlIEdWYWx1ZUFycmF5IGluIHRoZSBtZXNzYWdlLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzE1NAotCi0yMDEyLTEwLTI3IDIzOjIyOjM2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvYXVwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9sZXZlbC9NYWtlZmlsZS5hbToKLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICBnc3Q6IGZpeCB2YXJpYWJsZSBvcmRlciBpbiBzb21lIE1ha2VmaWxlLmFtCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3MDEzCi0KLTIwMTItMTAtMjcgMTc6Mjc6MTYgLTA0MDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+Ci0KLQkqIGV4dC9saWJjYWNhL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1cGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbGV2ZWwvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9jcm9wL01ha2VmaWxlLmFtOgotCSogZ3N0L3k0bS9NYWtlZmlsZS5hbToKLQkgIGdzdDogYWRkIHZhcmlvdXMgbWlzc2luZyBHU1RfUExVR0lOU19CQVNFX0xJQlMgaW4gTWFrZWZpbGUuYW0KLQkgIFRob3NlIHBsdWdpbnMgZGVwZW5kIG9uIGVpdGhlciBsaWJnc3RhdWRpbyBvciBsaWJnc3R2aWRlbywKLQkgIHdoaWNoIGFyZSBpbiBnc3QtcGx1Z2lucy1iYXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NzAxMwotCi0yMDEyLTEwLTI3IDEzOjI0OjI0ICswMTAwICBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogbWFyayBpbnZpc2libGUgVlA4IGZyYW1lcyB3aXRoIHRoZSBERUNPREVfT05MWSBmbGFnCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0MjU5Ci0KLTIwMTItMTAtMjYgMTA6NTU6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOgotCSAgdGVzdHM6IGFkZCBtdWx0aWZpbGVzcmMgdGVzdCBmb3IgZml4IGluIHByZXZpb3VzIGNvbW1pdAotCSAgTWFrZSBzdXJlIHRoZSBzdG9wLWluZGV4IHNldCBpcyBob25vdXJlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ4NTMKLQotMjAxMi0xMC0yNiAxMDozMzowMyArMDEwMCAgU3RhcyBTZXJnZWV2IDxzdHNwQGFrbmV0LnJ1PgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSAgbXVsdGlmaWxlc3JjOiBmaXggc3RvcCBpbmRleCBoYW5kbGluZwotCSAgTWFrZSBzdXJlIHRoZSBzdG9wIGluZGV4IGlzIGFsd2F5cyBob25vdXJlZC4gQXZvaWRzCi0JICBlbmRsZXNzIGxvb3AgaWYgb25lIHdhbnRzIHRvIHJlYWQgYW5kIG91dHB1dCB0aGUgc2FtZQotCSAgZmlsZSBOIHRpbWVzLCBmb3IgZXhhbXBsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ4NTMKLQotMjAxMi0wOC0yNSAwMjoyNjoyOSArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2FkZW11eDogU3VwcG9ydCByZWN1cnNpdmUgU2ltcGxlVGFncwotCSAgRml4ZXMgIzY4MjY0NAotCSAgRGVwZW5kcyBvbiAjNjgyNjE1Ci0KLTIwMTItMDgtMjQgMTM6NTU6NDEgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IEV4cGFuZCB0aGUgdGFnIG1hcHBpbmcuCi0JICAqIEFsc28gZXhwb3NlIHVua25vd24gdGFncyBhcyBrZXk9dmFsdWUgcGFpcnMuCi0JICAqIEFycmFuZ2UgdGFnIG1hcCBpbiB0aGUgc2FtZSBvcmRlciB0YWdzIGFyZSBsaXN0ZWQgaW4gTWF0cm9za2Egc3BlYywgbGVhdmluZwotCSAgdW5tYXBwZWQgdGFncyBhcyBjb21tZW50cy4KLQkgICogTW9yZSBzcGVjaWZpYyBUT0RPcy4KLQkgICogUmVtb3ZlIGR1cGxpY2F0ZSBEQVRFIGRlZmluZS4KLQkgIEZpeGVzICM2ODI2MTUKLQkgIERlcGVuZHMgb24gIzY4MjUyNAotCi0yMDEyLTEwLTI2IDEwOjA5OjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nCi0KLTIwMTItMDgtMjMgMTU6MDc6MjIgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IE1hdHJvc2thIHRhZyBUYXJnZXRUeXBlIHN1cHBvcnQKLQkgICogUmVhZHMgVGFyZ2V0VHlwZSBhbmQgVGFyZ2V0VHlwZVZhbHVlIGZyb20gYSBUYWcuCi0JICAqIEFmdGVyIFRhZyBpcyBjb21wbGV0ZWx5IHJlYWQsIHByb2Nlc3NlcyB0YWdsaXN0LCBzdWJzdGl0dXRpbmcgc29tZSBvZiB0aGUKLQkgIHRhZ3MgZGVwZW5kaW5nIG9uIHRhcmdldCB0eXBlIHZhbHVlIGFuZCB0aGUgcHJlc2VuY2Ugb2YgdmlkZW8vc3VidGl0bGUgc3RyZWFtcy4KLQkgICogU3VwcG9ydHMgcmVhZGluZyB0d28gbmV3IHNpbXBsZXRhZ3MgLSBQQVJUX05VTUJFUiBhbmQgVE9UQUxfUEFSVFMKLQkgIERlcGVuZHMgb24gIzY4MjQ0OAotCSAgRml4ZXMgIzY4MjUyNAotCi0yMDEyLTA4LTIyIDE1OjMyOjQxICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thZGVtdXg6IFBlci10cmFjayB0YWdzIGZvciBNYXRyb3NrYQotCSAgUmVxdWlyZXMgTWF0cm9za2EgZmlsZSB0byBoYXZlIHNhbmUgbGF5b3V0ICh0cmFjayBpbmZvIGJlZm9yZSB0YWcgaW5mbykuCi0JICBVc2VzIHJlcGxhY2UtbWVyZ2UuCi0JICBNYWtlcyB0cmFjayBVSURzIDY0LWJpdC4KLQkgIEZpeGVzICM2ODI0NDgKLQotMjAxMi0xMC0yNSAyMDoxODozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkgIG11bHRpZmlsZXNyYzogZml4IHR5cG8gaW4gcHJvcGVydHkgZGVzY3JpcHRpb24KLQotMjAxMi0xMC0yNSAxMjoxODowMyAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IHJlYWQgdmlkZW8gZm9ybWF0IGhlYWRlciBmdWxseSAoc28gd2UgY2FuIGZpbmQgJ3Bhc3AnIGF0b21zKSBmb3IgbW9yZSBmb3VyY2NzLiBGaXhlcyBhc3BlY3QgcmF0aW8gb2YgcHJvcmVzIGZpbGVzLgotCi0yMDEyLTEwLTI1IDAwOjQ0OjM0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IHRoZSBuZXcgZ2V0X2NhcHMgYWxyZWFkeSBkb2VzIHRoZSBmaWx0ZXIgaW50ZXJzZWN0aW9uCi0JICBJdCBzaG91bGQgYmUgZmFzdGVyIHRvIHBhc3MgdGhlIGNhcHMgdG8gaW50ZXJzZWN0IGFzIHRoZSBmaWx0ZXIgY2FwcywKLQkgIHJhdGhlciB0aGFuIHVzaW5nIE5VTEwgYW5kIGludGVyc2VjdGluZyAnbWFudWFsbHknIGxhdGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjgzNwotCi0yMDEyLTEwLTI1IDAwOjQzOjUxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IGF2b2lkIGFzc2VydGlvbiB3aGVuIHVzaW5nIGFjY2VwdCBjYXBzIHF1ZXJ5Ci0JICBUaGlzIHF1ZXJ5IG11c3QgcmVjZWl2ZSBhIGZpeGVkIGNhcHMsIHNvIGltYWdlZnJlZXplIHNob3VsZAotCSAgZml4YXRlIGl0cyBmcmFtZXJhdGUgYmVmb3JlIHNlbmRpbmcgdGhlIHF1ZXJ5IGRvd25zdHJlYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg2ODM3Ci0KLTIwMTItMTAtMjUgMTI6MzM6MjQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBmZWF0dXJlIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDEuMC4yID09PQotCi0yMDEyLTEwLTI1IDAxOjAxOjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMC4yCi0KLTIwMTItMTAtMjQgMTM6NTA6MDAgKzAyMDAgIEFybmF1ZCBWcmFjIDxhdnJhY0BmcmVlYm94LmZyPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHVzZSBjb3JyZWN0IHR5cGUgZm9yIGNoYW5uZWwtbWFzayBiaXRtYXNrCi0JICBGaXhlcyBjcmFzaCBvbiAzMi1iaXQgc3lzdGVtcy4KLQotMjAxMi0xMC0yNCAxMToxNzo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogRmx1c2ggdGhlIHJpbmdidWZmZXIgb24gR0FQIGV2ZW50cyB3aXRob3V0IGR1cmF0aW9uCi0JICBUaGlzIGlzIHJlcXVpcmVkIHRvIHByb3Blcmx5IHN0YXJ0IHRoZSByaW5nYnVmZmVyIGFuZCBjbG9jay4KLQotMjAxMi0xMC0wMiAyMDo1MToyOSArMDIwMCAgT2xla3NpaiBSZW1wZWwgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIHZwOGVuYzogc2V0IERFQ09ERV9PTkxZIGZsYWcgb24gaW52aXNpYmxlIEFsdFJlZiBmcmFtZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQyMTYKLQotMjAxMi0xMC0yMyAxNjowMjowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGZpeCBjb3ZlcmFydCBleHRyYWN0aW9uIGlmIHZvcmJpcyBjb21tZW50cyBjb21lIGFmdGVyIHBpY3R1cmUgaGVhZGVyCi0JICBTZWUgc2FtcGxlIGZpbGUgZm9yIGJ1ZyAjNjg0NzAxLgotCi0yMDEyLTEwLTIzIDEzOjQ1OjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogaWdub3JlIGJhZCBoZWFkZXJzIGlmIHdlIGhhdmUgYSB2YWxpZCBTVFJFQU1JTkZPIGhlYWRlcgotCSAgSWYgd2UgcnVuIGludG8gYW55IGhlYWRlciBwYXJzaW5nIGlzc3VlcyBhbmQgd2UgaGF2ZSBhIHZhbGlkCi0JICBTVFJFQU1JTkZPIGhlYWRlciBhbHJlYWR5LCBkb24ndCBlcnJvciBvdXQsIGJ1dCBqdXN0IHN0b3AKLQkgIGhlYWRlciBwYXJzaW5nIGFuZCB0cnkgdG8gZmluZCBzb21lIGF1ZGlvIGZyYW1lcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ3MDEKLQotMjAxMi0xMC0yMyAxMzo0MzoxMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IHBvc3QgcHJvcGVyIGVycm9yIG1lc3NhZ2UgYW5kIGZpeCBidWZmZXIgbGVhayBvbiBoZWFkZXIgcGFyc2luZyBlcnJvcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDcwMQotCi0yMDEyLTEwLTIyIDIyOjMyOjQ5IC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAcmRpby5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogd2l0aCByYXcgYXVkaW8sIHNldCBhIGRlZmF1bHQgY2hhbm5lbC1tYXNrIGZvciBtdWx0aWNoYW5uZWwgYXVkaW8uIFRoaXMgZG9lc24ndCBhY3R1YWxseSBwYXJzZSAnY2hhbicgYmVjYXVzZSBpdCdzIGFic3VyZGx5IGNvbXBsZXguCi0KLTIwMTItMTAtMjIgMTU6NTQ6MTcgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdXBkc3JjOiBmaXggdHlwbyBjYXVzaW5nIGNvbXBpbGF0aW9uIGVycm9yCi0JICBnc3R1ZHBzcmMuYzogSW4gZnVuY3Rpb24gJ2dzdF91ZHBzcmNfY3JlYXRlJzoKLQkgIGdzdHVkcHNyYy5jOjM2NTogZXJyb3I6ICdyZXQnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjY0MgotCi0yMDEyLTEwLTIyIDExOjU1OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlfIGZpeCBpbnZlcnQgZnVuY3Rpb24KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY1NTAKLQotMjAxMi0xMC0yMiAxMTo1NToyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpOiBmaXggZGVidWcKLQotMjAxMi0xMC0yMiAxMTozOTozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICBxdGRlbXV4OiBhZGQgc3VwcG9ydCBmb3IgJ2dlbmVyaWMnIHNhbXBsZXMKLQkgIEFkZCBzdXBwb3J0IGZvciBzdHVmZmluZyBhIGNvbXBsZXRlIHN0cmVhbSBpbnRvIDEgc2FtcGxlLgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODY1NTAKLQotMjAxMi0xMC0yMCAxMzowMTo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIHRlc3RzOiByZW1vdmUgc3VwZXJmbHVvdXMgZ190eXBlX2luaXQoKSBjYWxsCi0JICBJdCdzIGRlcHJlY2F0ZWQgaW4gbmV3ZXIgR0xpYiBhbmQgbm90IG5lZWRlZCBoZXJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjQ1NgotCi0yMDEyLTEwLTIwIDExOjMyOjI3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGZpeCBjYXBzIGxlYWsgaW4gYWNjZXB0Y2FwcyBmdW5jdGlvbgotCi0yMDEyLTEwLTE5IDE5OjI0OjIzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkb24ndCBsZWFrIGdzdF9yaWZmX3N0cmZfYXVkcyBpbiBjYXNlIG9mIE1TL1JJRkYgYXVkaW8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODExOTIKLQotMjAxMi0xMC0xOCAyMjoyMDozOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiB1bnNpZ25lZCBzdWJ0aXRsZSB0ZW1wbGF0ZQotCi0yMDEyLTEwLTE4IDExOjMyOjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBpbiBhY2NlcHRfY2FwcygpIGNoZWNrIGlmIHJpbmcgYnVmZmVyIGlzIE5VTEwgYmVmb3JlIGRlLXJlZmVyZW5jaW5nCi0JICBBbmQgc3ByaW5rbGUgc29tZSB0aHJlYWQtc2FmZXR5ICh0YWtlIG9iamVjdCBsb2NrIGZvcgotCSAgYWNjZXNzaW5nIHJpbmcgYnVmZmVyLCBhbmQgcGEgbWFpbiBsb29wIGxvY2sgZm9yIHRoZQotCSAgY29udGV4dCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzNzgyCi0KLTIwMTItMDktMTMgMDA6MTA6MDAgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSAgdmlkZW9taXhlcjI6IEZpeCByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIHNyYyBzZXRjYXBzIGlzIGlnbm9yZWQKLQkgIElmIGJvdGggcGFkcyByZWNlaXZlIGRhdGEgYXQgdGhlIHNhbWUgdGltZSwgdGhleSB3aWxsIGJvdGggZ2V0IHRoZWlyCi0JICBzaW5rX3NldGNhcHMgY2FsbGVkIHdoaWNoIHdpbGwgY2FsbCB0aGUgc3JjX3NldGNhcHMsIGJ1dCB0aGVyZSBpcwotCSAgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgc2Vjb25kIG9uZSBtaWdodCBub3QgYmUgY2FsbGVkLgotCSAgRml4ZXM6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM4NDIKLQotMjAxMS0xMC0zMSAxNTo0MzoyNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBkbyBub3QgdXNlIHVub2ZmaWNhbCBWX01KUEVHIGNvZGVjIGlkCi0JICBTaW5jZSBpdCdzIG5vdCBzcGVjJ2VkLCBjb25zaWRlciBpdCBhIFZmVyBjb21wYXRpYmlsaXR5Ci0JICBjYXNlLiBNYW55IGFwcGxpY2F0aW9ucyAoZS5nLiBhdmlkZW11eCkgZG9uJ3QgdW5kZXJzdGFuZAotCSAgdGhlIHVub2ZmaWNpYWwgVl9NSlBFRyBpZC4KLQkgIEZpeGVzICM2NTk4MzcuCi0JICBDb25mbGljdHM6Ci0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmMKLQotMjAxMi0xMC0xNyAxNzozNDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZkZXRlY3QuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgVXNlIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoKQotCSAgd2hlcmUgcG9zc2libGUuIEF2b2lkcyBzb21lIHN0cmluZyBjb3BpZXMuIEFsc28gcmUtaW5kZW50Ci0JICBzb21lIHN0dWZmLiBBbHNvIHNvbWUgaW5kZW50IGZpeGVzIGhlcmUgYW5kIHRoZXJlLgotCi0yMDEyLTEwLTE3IDE3OjAzOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIGpwZWcsIHBuZywgdnB4OiB1c2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSgpCi0JICBBdm9pZHMgc29tZSBzdHJpbmcgY29waWVzLgotCi0yMDEyLTEwLTE3IDE0OjIzOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSAganBlZ2RlcGF5OiBzdG9yZSBxdWFudCB0YWJsZXMgaW4gemlnemFnIG9yZGVyCi0KLTIwMTItMTAtMTcgMTM6NTU6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0c2Vzc2lvbjogZml4IGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMi0xMC0xNyAxMzozNTowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGNsYXJpZnkgdGhlIG50cC1zeW5jIG9wdGlvbgotCi0yMDEyLTEwLTE3IDEzOjE1OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiB1cGRhdGUgY2FwcyBpbiB0aGUgc291cmNlCi0JICBJbmZvcm0gdGhlIHNvdXJjZSB3aGVuIGNhcHMgY2hhbmdlZC4gVGhpcyB3YXMgcmVtb3ZlZCBpbiB0aGUgcG9ydCB0byAxLjAKLQkgIGxlYXZpbmcgdGhlIHNvdXJjZSB1bmF3YXJlIG9mIHRoZSBjbG9jay1yYXRlIGFuZCB1bmFibGUgdG8gaW50ZXJwb2xsYXRlCi0JICBydHAgdGltZXN0YW1wcyBmb3IgU1IgcGFja2V0cy4KLQotMjAxMi0xMC0xNyAxMjo0NjozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGJpbjogc2V0IFBUUyBhbmQgRFRTIGluIGppdHRlcmJ1ZmZmZXIKLQotMjAxMi0xMC0xNyAxMjoyNDoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGRpc2FibGUgY2hlY2sgZm9yIG50cC1zeW5jCi0JICBEaXNhYmxlIHRoZSBjaGVjayBmb3IgdGhlIG50cC1zeW5jIG1ldGhvZC4gSXQgaXMgZXhwZWN0ZWQgdGhhdAotCSAgYSByYXRoZXIgbGFyZ2VyIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHdpdGggdGhpcyBtZXRob2QuCi0KLTIwMTItMTAtMTcgMTI6MTc6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwYmluOiB1c2UgcnVubmluZy10aW1lIGZvciBOVFAgdGltZQotCSAgV2hlbiB1c2UtcGlwZWxpbmUtY2xvY2sgaXMgc2V0LCB1c2UgdGhlIHJ1bm5pbmctdGltZSBvZiB0aGUKLQkgIHBpcGVsaW5lIHRvIGNhbGN1bGF0ZSB0aGUgTlRQIHRpbWVzdGFtcHMuIFRoaXMgbWV0aG9kIHdvdWxkIHByZXZpb3VzbHkKLQkgIG9ubHkgd29yayB3aGVuIHRoZSBiYXNlLXRpbWUgaXMgc2V0IHRvIDAgYnV0IHdpdGggdGhpcyBjaGFuZ2UgaXQgY2FuCi0JICBhbHNvIHdvcmsgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0cyBhbmQgd2UgY2FuIGFsc28gaW1wbGVtZW50IHBhdXNlL3Jlc3VtZQotCSAgb2YgdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgbm93LgotCi0yMDEyLTEwLTE3IDEwOjIwOjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuaDoKLQkgIHZpZGVvY3JvcDogcG9ydCB0byB2aWRlb2ZpbHRlcgotCi0yMDEyLTEwLTE3IDA5OjM2OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiB1c2Ugb3V0X2luZm8gZm9yIG91dCBwcm9wZXJ0aWVzCi0KLTIwMTItMTAtMTYgMTQ6NDA6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb21lZGlhbi5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvbWVkaWFuLmg6Ci0JICBtZWRpYW46IHNtYWxsIGNsZWFudXBzCi0KLTIwMTItMTAtMTYgMTM6NTY6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogZ3N0L21lZGlhbi8uZ2l0aWdub3JlOgotCSogZ3N0L21lZGlhbi9NYWtlZmlsZS5hbToKLQkqIGdzdC9tZWRpYW4vZ3N0bWVkaWFuLmM6Ci0JKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5oOgotCSogZ3N0L21lZGlhbi9tZWRpYW4udmNwcm9qOgotCSAgbWVkaWFuOiByZW1vdmUgbm93IHRoYXQgaXQgaXMgaW4gdmlkZW9maWx0ZXIKLQotMjAxMi0xMC0xNiAxMzo0OToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiByZW1vdmUgbWVkaWFuIGZyb20gYnVpbGQKLQotMjAxMi0xMC0xNiAxMzo0NzoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvbWVkaWFuLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9tZWRpYW4uaDoKLQkqIGdzdC92aWRlb2ZpbHRlci9wbHVnaW4uYzoKLQkgIHZpZGVvbWVkaWFuOiBjb3B5IG1lZGlhIHRvIHZpZGVvbWVkaWFuCi0JICBDb3B5IHRoZSBtZWRpYW4gdmlkZW8gZmlsdGVyIHRvIHZpZGVvZmlsdGVycyBhbmQgcmVuYW1lIHRvCi0JICB2aWRlb21lZGlhbi4KLQotMjAxMi0xMC0xNiAxMzoxMjoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L21lZGlhbi9NYWtlZmlsZS5hbToKLQkqIGdzdC9tZWRpYW4vZ3N0bWVkaWFuLmM6Ci0JKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5oOgotCSAgbWVkaWE6IHBvcnQgdG8gMS4wCi0KLTIwMTItMTAtMTYgMDE6MDI6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBhcHBlbmQgcGFsZXR0ZSBkYXRhIHRvIHBhbGV0dGVkIDgtYml0IFJHQiBmcmFtZXMKLQkgIEZpeGVzIHBsYXliYWNrIG9mIDgtYml0IGluZGV4ZWQgUkdCIHZpZGVvcywgd2l0aCBmaXhlcyBpbiAtYmFzZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODYwNDYKLQotMjAxMi0xMC0xNSAxNTozNjowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IEFuZCB0aGlzIHRpbWUgZml4IHRoZSBkZWZhdWx0IHRhcmdldC1iaXRyYXRlIHZhbHVlIGZvciByZWFsCi0KLTIwMTItMTAtMTUgMTU6MzA6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnB4L2dzdHZwOGVuYy5jOgotCSAgdnA4ZW5jOiBGaXggZGVmYXVsdCB0YXJnZXQtYml0cmF0ZSB2YWx1ZQotCi0yMDEyLTEwLTEzIDAwOjAzOjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGRvbid0IGFzc2VydCBpZiB1cHN0cmVhbSBzaXplIGlzIG5vdCBhdmFpbGFibGUgd2hlbiBndWVzc2luZyBiaXRyYXRlcwotCSAgRml4ZXMgYWJvcnQgaW4gcHVzaCBtb2RlIHdoZXJlIHRoZSBzb3VyY2UgaXMgbm90IHNlZWthYmxlIGFuZCB0aGUKLQkgIHNpemUgb2YgdGhlIGZpbGUgaXMgbm90IGF2YWlsYWJsZSwgYXMgd2l0aAotCSAgY2F0IGZvby5tcDQgfCBnc3QtbGF1bmNoLTEuMCBwbGF5YmluIHVyaT1mZDovLzAKLQkgIExlc3Mgbm90aWNhYmxlIHdpdGggcmVsZWFzZXMsIHNpbmNlIHdlIGRpc2FibGUgYWxsCi0JICBnX2Fzc2VydCgpIHRoZXJlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NjAwOAotCi0yMDEyLTEwLTEyIDE0OjM4OjMzIC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAcmRpby5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogYWxsb3cgbW9yZSBzdHJlYW1zLiBCdW1wIHRoaXMgY29uc3RhbnQgdG8gMzIsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggZm9yIHJlYWwtd29ybGQgZmlsZXMuCi0KLTIwMTItMTAtMTIgMTQ6MzU6MjQgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEByZGlvLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzdXBwb3J0IG1vcmUgZGlmZmVyZW50IGZvdXJjYyB2YWx1ZXMgZm9yIG90aGVyIFByb1JlcyB2YXJpYW50cy4KLQotMjAxMi0xMC0xMSAyMjozNjoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1BTVIuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLVBDTUEuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LVBDTUEuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItVlRTLUgyNjNwLUFUUy1QQ01BLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1WVFMtSDI2M3Auc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWFsc2FzcmMtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItZGVjb2RlYmluLUgyNjNwLUFNUi5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaDoKLQkgIGV4YW1wbGVzOiB1cGRhdGUgc29tZSBlbGVtZW50IG5hbWVzIGZvciAxLjAgaW4gUlRQIGV4YW1wbGVzCi0JICBnc3RydHBiaW4gLT4gcnRwYmluCi0JICBmZmRlY18qICAgLT4gYXZkZWNfKgotCSAgZmZlbmNfKiAgIC0+IGF2ZW5jXyoKLQotMjAxMi0xMC0xMCAxMjowNTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmVtb3ZlIHVudXNlZCBpbmNsdWRlCi0KLTIwMTItMTAtMTAgMTA6NTU6MjggKzAyMDAgIFJhc211cyBSb2hkZSA8cm9oZGVAZHVmZi5kaz4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBtdWx0aXVkcHNpbms6IGFkZCBtdWx0aWNhc3QtaWZhY2UgcHJvcGVydHkKLQkgIHVkcHNyYyBhbHJlYWR5IGhhcyBzdXBwb3J0IGZvciBzZXR0aW5nIHRoZSBtdWx0aWNhc3QgaW50ZXJmYWNlLCB3aGljaAotCSAgaXMgdXNlZnVsIGZvciBtdWx0aS1ob21lZCBtYWNoaW5lcy4gVGhpcyBwYXRjaCBhZGRzIHRoZSBzYW1lIGNvZGUgdG8KLQkgIHRoZSBtdWx0aXVkcHNpbmsuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1ODY0Ci0KLTIwMTItMTAtMTAgMTE6MzI6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IGRvbid0IGVycm9yIG9uIHNlbmQgZXJyb3JzIGJ1dCBvbmx5IHdhcm4KLQkgIERvbid0IGVycm9yIG9uIHNlbmQgZXJyb3JzIGJ1dCBzaW1wbHkgcG9zdCBhIHdhcm5pbmcsIGl0J3MgcG9zc2libGUKLQkgIHRoYXQgdGhlIG5leHQgcGFja2V0IHdpbGwgYmUgZmluZS4KLQotMjAxMi0xMC0xMCAxMDoyODoyNCArMDIwMCAgUmFzbXVzIFJvaGRlIDxyb2hkZUBkdWZmLmRrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIG11bHRpdWRwc2luazogYWRkIGZvcmNlLWlwdjQgb3B0aW9uCi0JICBBZGQgYW4gb3B0aW9uIHRvIHRoZSBtdWx0aXVkcHNpbmsgdGhhdCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmb3JjZQotCSAgdGhlIHVzZSBvZiBhbiBJUHY0IHNvY2tldC4KLQkgIFRoaXMgY2FuIGUuZy4gYmUgdXNlZCB0byBoYW5kbGUgdGhlIGlzc3VlIGRlc2NyaWJlZCBpbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjQ4MQotCi0yMDEyLTEwLTEwIDEwOjE4OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIG11bHRpdWRwc2luazogcmVtb3ZlIHVudXNlZCBmaWVsZAotCi0yMDEyLTEwLTEwIDEwOjEwOjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiB1c2UgbmVnb3RpYXRlZCBhbGxvY2F0b3Igb3IgcG9vbAotCSAgVXNlIHRoZSBiYXNlIGNsYXNzIHRvIGFsbG9jYXRlIGEgYnVmZmVyIGZvciB1cyBiZWNhdXNlIGl0IGtub3dzIGhvdwotCSAgdG8gdXNlIHRoZSBuZWdvdGlhdGVkIGFsbG9jYXRvciBvciBidWZmZXJwb29sLgotCi0yMDEyLTEwLTEwIDEwOjA5OjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiBwb3N0IGVycm9yIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcKLQotMjAxMi0xMC0xMCAxMDowOToxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogZWxlbWVudHMgcG9zdCBlbGVtZW50IG1lc3NhZ2VzCi0KLTIwMTItMTAtMDcgMTY6NTY6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudCAoYnVnIGZpeGluZykKLQotPT09IHJlbGVhc2UgMS4wLjEgPT09Ci0KLTIwMTItMTAtMDcgMTU6MzE6MTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMC4xCi0KLTIwMTItMTAtMDYgMTQ6NTc6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2YzBiNTJjIHRvIDZiYjY5NTEKLQotMjAxMi0xMC0wNSAxNToxMjoyNyAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIGRlaW50ZXJsZWF2ZTogb3V0cHV0IGNoYW5uZWxzIHNob3VsZCBiZSBtYXJrZWQgYXMgTU9OTywgbm90IEZST05UX0xFRlQsIGlmIHdlJ3JlIG5vdCBwcmVzZXJ2aW5nIGlucHV0IGNoYW5uZWwgcG9zaXRpb25zLgotCi0yMDEyLTEwLTA0IDE1OjEzOjIwIC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAcmRpby5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IHVzZSBnc3RfYXVkaW9fY2hhbm5lbF9wb3NpdGlvbnNfdG9fbWFzayBpbnN0ZWFkIG9mIGEgbG9jYWwgY29weSBvZiBoYWxmIG9mIGl0LiBIYW5kbGVzIHNvbWUgdmFsdWVzIG1vcmUgY29ycmVjdGx5LgotCi0yMDEyLTEwLTA0IDIwOjMyOjQ1ICswMjAwICBSYXNtdXMgUm9oZGUgPHJvaGRlQGR1ZmYuZGs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkgIGdzdHJ0cGRlcGF5OiBkb24ndCBsZWFrIGlucHV0IGJ1ZmZlcgotCSAgVGhlIHJ0cCBidWZmZXIgaXMgbmV2ZXIgdW5tYXBwZWQgaW4gdGhlIG5vcm1hbCBjb2RlIGV4aXQgcGF0aAotCSAgb2YgZ3N0X3J0cF9nc3RfZGVwYXlfcHJvY2VzcyguLikgcmVzdWx0aW5nIGluIGEgbWVtb3J5IGxlYWsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1NTEyCi0KLTIwMTItMTAtMDQgMTg6Mzc6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2JhbGFuY2U6IEFkZCBzdXBwb3J0IGZvciBOVjEyIGFuZCBOVjIxCi0KLTIwMTItMTAtMDEgMTU6MTE6MDUgKzAyMDAgIFBhdHJpY2lhIE11c2NhbHUgPHBhdHJpY2lhQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICBydHBoMjY0cGF5OiBkbyBub3QgcHVzaCB1bm1hcHBlZCBkYXRhCi0JICBBbHNvIGRvIG5vdCB1c2UgYSBHc3RCdWZmZXIgYWZ0ZXIgaXQgaGFzIGJlZW4gcHVzaGVkIGludG8gdGhlIGFkYXB0ZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1MjEzCi0KLTIwMTItMTAtMDMgMTA6NTE6NDUgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEByZGlvLmNvbT4KLQotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6Ci0JICBtZXRhIGluZm86IHRocmVhZHNhZmUgcmVnaXN0cmF0aW9uIHVzaW5nIGdfb25jZQotCi0yMDEyLTEwLTAxIDE1OjQ0OjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHB1c2ggbW9kZTsgaGFuZGxlIHNvbWUgaW5pdGlhbCBqdW5rIGJlZm9yZSBoZHJsIGxpc3QKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODUwNTkKLQotMjAxMi0xMC0wMSAxNDowMzoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1ZnNpbmstdGVzdC5jOgotCSAgdGVzdHM6IHBvcnQgZ2RrcGl4YnVmc2luayB0ZXN0Ci0KLTIwMTItMDktMjkgMTE6NTk6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JICBQdXJnZSByZWZlcmVuY2VzIHRvIGxpYm9pbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MzI4NQotCi0yMDEyLTA5LTI4IDE2OjUxOjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9hdmktaWRzLmg6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcmVjb2duaXplIGFsbCB4c3ViIGZyYW1lcyBhcyBrZXlmcmFtZXMKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ5NzcKLQotMjAxMi0wOS0yOCAxNjo1MDoyNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBwdXNoIG1vZGU6IGZpbmQgdGhlIGNvcnJlY3QgY2h1bmsgZm9yIHNlZ21lbnQgZm9sbG93aW5nIHNlZWsKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ5NzcKLQotMjAxMi0wOS0yNyAyMjoxNzo0OSArMDEwMCAgQXJuYXVkIFZyYWMgPHJhd291bEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogZml4IHBhcnNpbmcgaW4gcHVzaCBtb2RlIHdoZW4gbW9vdiBhdG9tIGlzIGF0IHRoZSBlbmQKLQkgIFdoZW4gcGxheWluZyBhbiBtcDQgZmlsZSB3aXRoIHRoZSBNT09WIGF0b20gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgcGxheWJhY2sKLQkgIGZhaWxzIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UgIm5vICdtb292JyBhdG9tIHdpdGhpbiB0aGUgZmlyc3QgMTAgTUIiLiBUaGlzIGlzCi0JICBkdWUgdG8gYSBtaXN0YWtlIGluIHRoZSB1cHN0cmVhbV9zaXplIHR5cGluZywgbWFraW5nIHRoZSBzZWVrIHRvIHRoZSBlbmQgb2YKLQkgIGZpbGUgbmV2ZXIgaGFwcGVuaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDk3MgotCi0yMDEyLTA5LTI3IDE1OjUwOjQ5IC0wMzAwICBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAoYW5kcnVua28pIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkgIGdhbW1hOiByZW1vdmUgZHVwbGljYXRlIGVudHJpZXMgYXQgZm9ybWF0IGF0IGNhcHMKLQkgIEF2b2lkcyBleHRyYSBjYXBzL3N0cnVjdHVyZXMgcHJvY2Vzc2luZwotCi0yMDEyLTA5LTI3IDE0OjEzOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwdnJhd2RlcGF5OiBuZWdvdGlhdGUgcG9vbCB3aXRoIHNyY3BhZCBjYXBzCi0KLTIwMTItMDktMjcgMTE6MDI6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZHZkZW11eDogVGhlIGNvbnZlcnQgYW5kIGR1cmF0aW9uIHF1ZXJpZXMgYXJlIG5vdCBzdXBwb3NlZCB0byBjaGFuZ2UgdGhlIGZvcm1hdAotCi0yMDEyLTA5LTI2IDA5OjI4OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogY2xlYXIgdmlkZW8gZnJhbWUgbW9yZSBjb3JyZWN0bHkKLQkgIE1ha2Ugc3VyZSBub3QgdG8gdG91Y2ggbWVtb3J5IHRoYXQgZG9lc24ndCBiZWxvbmcgdG8KLQkgIG91ciBmcmFtZSwgd2UgbWlnaHQgYmUgb25lIHBhcnQgb2YgYSBzaWRlLWJ5LXNpZGUgM0QKLQkgIGZyYW1lLCBvciBpbiBhIHBpY3R1cmUtaW4tcGljdHVyZSBzY2VuYXJpby4KLQotMjAxMi0wOS0yNiAwMDo0NDo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IG1pbm9yIGNsZWFuLXVwCi0JICBVc2UgR3N0Qnl0ZVdyaXRlciwgYmVjYXVzZSB3ZSBjYW4sIGFuZCBnX3ZhbHVlX3Rha2VfYm94ZWQuCi0KLTIwMTItMDktMTAgMTA6Mjc6MjggKzA0MDAgIERtaXRyaXkgU2Ftb25lbmtvIDxkbWl0cml5LnNhbW9uZW5rb0B0ZWxpZ2VudC5ydT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGZpeCBzcGVleCBhdWRpbyBkZWNvZGluZyBieSBjcmVhdGluZyBmYWtlIHN0cmVhbSBoZWFkZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM2MjIKLQotMjAxMi0wOS0yNSAyMToyMToxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JICB2aWRlb21peGVyOiBmaXggd2FybmluZ3Mgd2hlbiB1c2luZyB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kCi0JICBnc3RfdmlkZW9fZnJhbWVfbWFwKCkgaW5jcmVhc2VzIHRoZSByZWZjb3VudCwgd2hpY2ggbWFrZXMKLQkgIHRoZSBidWZmZXIgbm90IHdyaXRhYmxlIGFueSBtb3JlIHRlY2huaWNhbGx5LCBzbyBjYWxsaW5nCi0JICBnc3RfYnVmZmVyX21lbXNldCgpIG9uIGl0IHdpbGwgY2F1c2UgbmFzdHkgd2FybmluZ3MuCi0JICBVbml0IHRlc3QgZGlzYWJsZWQgYmVjYXVzZSBpdCB2ZXJ5IHJhcmVseSAoZm9yIG1lKQotCSAgZmFpbHMsIHBvc3NpYmx5IG5lZ290aWF0aW9uLXJlbGF0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0Mzk4Ci0KLTIwMTItMDktMjUgMTA6NDM6MjggKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogQWRkIHNvbWUgdXNlZnVsIGRlYnVnIGxvZ2dpbmcKLQotMjAxMi0wOS0yNSAxMDo0MTo0NCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBGaXggdGVsZWNpbmUKLQkgIFRoaXMgb25seSBhZmZlY3RzIGJlaGF2aW91ciBpbiB0ZWxlY2luZSBjYXNlcyB3aXRoIHBhdHRlcm4gbG9ja2luZwotCSAgZW5hYmxlZC4gVGhlIGRlZmF1bHQgY2FzZSBzaG91bGQgYmUgdW50b3VjaGVkLgotCSAgVGhpcyB3b3JrcyB3aXRoIHRoZSBvdXRwdXQgZnJvbSBmaWVsZGFuYWx5c2lzIGF0IGxlYXN0LCBidXQgdGhlIGZpZWxkCi0JICBvcmRlciBsb29rcyBzd2FwcGVkIGZvciB0ZWxlY2luZSBtaXhlZCBidWZmZXJzIHdpdGggdGhlCi0JICBEYXZpZF9zbGlkZXNfU2NobGVlZiBjbGlwLgotCi0yMDEyLTA5LTI1IDE0OjQzOjE1ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIHZwOGVuYzogRGlzYWJsZSBHTElCIGRlcHJlY2F0aW9uIHdhcm5pbmdzCi0JICBHVmFsdWVBcnJheSBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIDIuMzIgLi4uIGJ1dCB0aGVyZSdzIG5vIHVzYWJsZQotCSAgcmVwbGFjZW1lbnQgZm9yIGl0LgotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcyMjgKLQotMjAxMi0wOS0yNSAxNDoxODozNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBGaXggbGVhawotCi0yMDEyLTA5LTI0IDE2OjQ2OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50IChidWcgZml4aW5nKQotCi09PT0gcmVsZWFzZSAxLjAuMCA9PT0KLQotMjAxMi0wOS0yNCAxNDowNjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDEuMC4wCi0KLTIwMTItMDktMjQgMTE6NTY6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JICB0ZXN0czogcmVtb3ZlIGdfcHJpbnRlcnIoKSB0aGF0J3Mgbm90IG5lZWRlZCBhbnkgbG9uZ2VyCi0JICBub3cgdGhhdCB0Y2FzZV9za2lwX2Jyb2tlbl90ZXN0KCkgcHJpbnRzIGl0IGFzIHdlbGwuCi0KLTIwMTItMDktMjMgMTk6NTA6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzoKLQkgIHRlc3RzOiBkaXNhYmxlIGZhaWxpbmcgcmVwbGF5Z2FpbiB0ZXN0cwotCi0yMDEyLTA5LTIzIDE2OjMxOjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5oOgotCSAgc21wdGU6IHNlbmQgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTItMDktMjMgMTY6MTA6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5oOgotCSAgbXVsdGlwYXJ0bXV4OiBzZW5kIHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEyLTA5LTIzIDE2OjAyOjE5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogc2VuZCBzdHJlYW0tc3RhcnQKLQotMjAxMi0wOS0yMyAxNTo1NzozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHNlbmQgc3RyZWFtLXN0YXJ0IGV2ZW50Ci0KLTIwMTItMDktMjMgMTU6NDg6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaDoKLQkgIGludGVybGVhdmU6IGFkZCBhIGJ1bmNoIG9mIEZJWE1FcwotCSAgTmVlZHMgc29tZSBtb3JlIHdvcmssIHNvIHN0cmVhbS1zdGFydCwgY2FwcyBhbmQgdGFncyBhcmUKLQkgIHNlbnQgaW4gdGhlIHJpZ2h0IG9yZGVyLgotCi0yMDEyLTA5LTIzIDE1OjE4OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBzZW5kIHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEyLTA5LTIzIDE1OjE2OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBzZW5kIHN0cmVhbS1zdGFydCBldmVudAotCi0yMDEyLTA5LTIyIDE1OjAwOjI3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIHJ0cGR0bWZkZXBheTogVXNlIDEuMC1zdHlsZSBjYXBzIG5lZ290aWF0aW9uIGFuZCBhdWRpby94LXJhdwotCi0yMDEyLTA5LTIyIDE2OjA4OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNGY5NjJmNyB0byA2YzBiNTJjCi0KLTIwMTItMDktMjEgMjE6NTQ6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhbnN3ZXIgVVJJIHF1ZXJ5Ci0JICBXaXRob3V0IHRoaXMsIHNvbWV0aGluZyBhbHNvIGFuc3dlcmVkIHRoZSBxdWVyeQotCSAgd2l0aCBUUlVFIGJ1dCB3aXRob3V0IHNldHRpbmcgYSB1cmksIG5vdCBzdXJlCi0JICB3aGF0IHRoYXQgd2FzLi4KLQotMjAxMi0wOS0yMCAxNzoyODo0NyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBNYWtlIHN1cmUgdGhlIGNhcHMgZG9uJ3QgaGF2ZSBkdXBsaWNhdGVkIHNwcy9wcHMKLQotMjAxMi0wOS0yMCAxOTo1ODoxMiArMDIwMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IE11dGUgc3RyZWFtIHBvc3QtY29ubmVjdGlvbiBpZiByZXF1aXJlZAotCSAgQSBidWcgaW4gUHVsc2VBdWRpbyBjYXVzZXMgUEFfU1RSRUFNX1NUQVJUX01VVEVEIHRvIGJlIHJlamVjdGVkIG9uCi0JICByZWNvcmQgc3RyZWFtcy4gVW50aWwgdGhpcyBpcyBmaXhlZCB1cHN0cmVhbSwgd2UgbXV0ZSB0aGUgc3RyZWFtCi0JICBtYW51YWxseSBhdCBzdGFydHVwLiBCYXNlZCBvbiBhIHBhdGNoIGJ5IEFsYmFuIEJyb3dhZXlzCi0JICA8cHJhaGFsQHlhaG9vLmNvbT4uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NDY5Ci0KLTIwMTItMDktMjAgMTg6MDA6NTkgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEByZGlvLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiAyNCBiaXQgYXVkaW8gaGVyZSBpcyBTMjRMRSwgbm90IFMyNF8zTEUuCi0KLTIwMTItMDktMjAgMTA6MDc6MjQgKzAyMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogaGFuZGxlIGxhdGVuY3kgcXVlcnkgYmVmb3JlIHNldHRpbmcgdXAgdGhlIGJ1ZmZlcnBvb2wKLQkgIEZpeGVzIGNyYXNoIGlmIG5vIGJ1ZmZlcnBvb2wgaXMgc2V0IHVwIHlldC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ0MzAKLQotMjAxMi0wOS0xOSAwOToxNzowMyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkgIG9zeGF1ZGlvc2luazogU3BlY2lmeSBlbmRpYW5uZXNzIGluIElFQyA2MTkzNyBwYXlsb2FkaW5nCi0JICBDb3JyZXNwb25kcyB0byBhbiBBUEkgY2hhbmdlIGluIGdzdC1wbHVnaW5zLWJhc2UuIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQKLQkgIHRvIHF1ZXJ5IHRoZSBleHBlY3RlZCBieXRlIG9yZGVyIHVzaW5nIGFwcHJvcHJpYXRlIEFQSS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgwMjEKLQotMjAxMi0wOS0xOSAwOToxNTo1MyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogU3BlY2lmeSBlbmRpYW5uZXNzIGluIElFQyA2MTkzNyBwYXlsb2FkaW5nCi0JICBEaXJlY3RTb3VuZCBleHBlY3RzIG5hdGl2ZSBlbmRpYW4gYnl0ZSBvcmRlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgwMjEKLQotMjAxMi0wOS0xOSAwOToxMzoxMSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogU3BlY2lmeSBlbmRpYW5uZXNzIGluIElFQyA2MTkzNyBwYXlsb2FkaW5nCi0JICBDb3JyZXNwb25kcyB0byBhbiBBUEkgY2hhbmdlIGluIGdzdC1wbHVnaW5zLWJhc2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc4MDIxCi0KLTIwMTItMDktMTkgMDA6Mzk6MDEgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogUmVtb3ZlIGluY29ycmVjdCBsb2dpYwotCSAgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGVzZSBsaW5lcyB3ZXJlIGFkZGVkLCB0aGV5IGRvbid0IG1ha2Ugc2Vuc2UgdG8KLQkgIG1lIG5vdyBhbmQgYm90aCBEYXZpZCBhbmQgSSBhZ3JlZSB0aGF0IHJlbW92aW5nIHRoZW0gbW92ZXMgY2xvc2VyIHRvCi0JICByZWxhdGVkIGxvZ2ljIGJlaW5nIGNvcnJlY3QsIHRoZXJlZm9yZSwgdGhleSdyZSBiZWluZyByZW1vdmVkLgotCSAgSSd2ZSB0ZXN0ZWQgYSBmZXcgcHJvZ3Jlc3NpdmUsIGludGVybGFjZWQgYW5kIHRlbGVjaW5lIGNsaXBzIGFuZCB0aGV5Ci0JICBhbGwgYmVoYXZlIHByb3Blcmx5IHRpbWVzdGFtcC13aXNlIGFuZCB2aXN1YWxseSBhZnRlciB0aGVzZSBjaGFuZ2VzLgotCi0yMDEyLTA5LTE5IDAwOjE3OjQ5ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBmaWVsZCBkdXJhdGlvbgotCSAgVGhlIGZyYW1lIHJhdGUgZnJhY3Rpb24gaXMgY29ycmVjdGx5IGFkanVzdGVkIGluIHRoZSBjYXNlcyBwcmVjZWRpbmcgdGhlCi0JICBmaWVsZCBkdXJhdGlvbiBjYWxjdWxhdGlvbiBhbmQgc28gdGhlIGZhY3RvciBvZiAyIGlzIGluY29ycmVjdC4KLQotMjAxMi0wOS0xOCAxMDozNDowMyAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBGaXggVS9WIHN0cmlkZXMgZm9yIGEgbnVtYmVyIG9mIGNhc2VzLgotCi0yMDEyLTA5LTE4IDEyOjEzOjIxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IGluaXQgdmlkZW9pbmZvCi0JICAuLi4gdG8gcHJldmVudCByYW5kb20gYm9ndXMgY2FwcyBmaWVsZHMuCi0KLTIwMTItMDktMTggMTI6MTI6MzkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjogY2hhaW4gdXAgdG8gY29sbGVjdHBhZHMgcXVlcnkgZnVuY3Rpb24KLQotMjAxMi0wOS0xNyAxMzoxNzowMCAtMDQwMCAgTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBEb24ndCBsZXQgR3N0Q29sbGVjdFBhZCBzaGFkb3cgY3VzdG9tIHNpbmsgcGFkIHF1ZXJ5IGZ1bmMKLQkgIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgY3VzdG9tIHBhZCBxdWVyeSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkLgotCSAgVGhpcyBwYXRjaCwgc2V0IHRoYXQgcXVlcnkgZnVuY3Rpb24gb24gdGhlIEdzdENvbGxlY3RQYWRzIHRvIGF2b2lkIHRoaXMKLQkgIHNoYWRvd2luZy4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0MjM3Ci0KLTIwMTItMDktMTcgMTg6MjM6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9maWxlcy9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBkaXN0IGltYWdlLmpwZyBmb3IganBlZyB0ZXN0Ci0KLT09PSByZWxlYXNlIDAuMTEuOTkgPT09Ci0KLTIwMTItMDktMTcgMTc6NTc6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTEuOTkKLQotMjAxMi0wOS0xNyAxNjo1MzowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy50eXBlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZweC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSAgZG9jczogdXBkYXRlCi0KLTIwMTItMDktMTcgMTM6MzA6MTUgKzAyMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgRml4IHNwZWMgZmlsZSBmb3IgdnA4IG1vdmUKLQotMjAxMi0wOS0xNyAxMzoyMzozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgYW5ub2RleDogQWRkIHRvIHRoZSBDUlVGVF9ESVJTCi0KLTIwMTItMDktMTcgMTI6MTQ6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JICBkb2NzOiB1cGRhdGUKLQotMjAxMi0wOS0xNyAwOTo0ODo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IENvcnJlY3RseSBmaW5pc2ggZnJhbWVzCi0JICBQcmV2aW91c2x5IHdlIHdvdWxkIGFsd2F5cyBnZXQgdGhlIHNhbWUgZnJhbWUgaWYgbXVsdGlwbGUgZnJhbWVzIGFyZSBwZW5kaW5nLAotCSAgbGVha2luZyBtZW1vcnkgb2YgdGhlIHByZXZpb3VzIGZyYW1lcyBhbmQgYnJlYWtpbmcgdGltZXN0YW1wcy4KLQotMjAxMi0wOS0xNyAwOTo0MDo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IEFsbG93IGNoYW5naW5nIGJpdHJhdGUgYW5kIG90aGVyIHBhcmFtZXRlcnMgZHVyaW5nIHBsYXliYWNrCi0JICBGaXhlcyBidWcgIzY0ODI3Ni4KLQotMjAxMi0wOS0xNyAwOToxNjozOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGVuYy5oOgotCSAgdnA4ZW5jOiBTdG9yZSBjb25maWd1cmF0aW9uIGluIHRoZSB2cHhfY29kZWNfZW5jX2NmZ190IHN0cnVjdCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGFsbCB2YXJpYWJsZXMKLQkgIEFsc28gcHJvdGVjdCBlbmNvZGVyIHdpdGggYSBtdXRleC4KLQotMjAxMi0wOS0xNiAxNjowMzowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JICB2cDhlbmM6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgbmV3IHByb3BlcnR5IG5hbWVzCi0JICAuLi5hbmQgYWxzbyBsaW5rIHRvIHRoZSBXZWJNIGVuY29kZXIgcGFyYW1ldGVycyB3ZWJzaXRlLgotCi0yMDEyLTA5LTE2IDE1OjU3OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZweC9nc3R2cDhlbmMuYzoKLQkgIHZwOGVuYzogTWFrZSBzb21lIHByb3BlcnR5IG5hbWVzIG1vcmUgcmVhZGFibGUKLQotMjAxMi0wOS0xNiAxNTo0NzoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICB2cDg6IEFkZCB0ZXN0cyB0byAuZ2l0aWdub3JlCi0KLTIwMTItMDktMTYgMTU6NDY6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDhlbmMuYzoKLQkgIHZwOGVuYzogVXBkYXRlIHBhdGNoIHRvIHRoZSBuZXcgcHJvcGVydHkgbmFtZXMKLQotMjAxMi0wOS0xNiAxNTo0NjoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdnB4OiBJbnRlZ3JhdGUgdGVzdCBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gdG9vCi0KLTIwMTItMDItMDcgMTc6MDA6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOGRlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNi82XSB0ZXN0czogZml4IG1vcmUgdW5pdCB0ZXN0cwotCi0yMDExLTExLTI0IDIxOjQyOjM5ICswMTAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92cDhkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDUvNl0gdGVzdHM6IHVwZGF0ZSBmb3IgZ3N0Y2hlY2sgQVBJIGNoYW5nZQotCi0yMDEwLTA3LTEwIDE1OjQ2OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNC82XSB2cDhkZWM6IEFkZCBzaW1wbGUgdW5pdCB0ZXN0IGZvciB2cDhkZWMKLQotMjAxMC0wNy0xMCAxNTo0Njo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDMvNl0gdnA4ZW5jOiBJbXByb3ZlIHVuaXQgdGVzdCBhIGJpdAotCi0yMDEwLTA3LTEwIDE1OjMyOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMi82XSB2cDhlbmM6IEFsc28gY2hlY2sgdGhlIG91dHB1dCBjYXBzIGluIHRoZSB1bml0IHRlc3QKLQotMjAxMC0wNy0xMCAxNToyOTo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEvNl0gdnA4ZW5jOiBBZGQgc2ltcGxlIHVuaXQgdGVzdAotCi0yMDEyLTA5LTE2IDE1OjQzOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JICB2cHg6IEludGVncmF0ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0KLQotMjAxMi0wOS0xNiAxNTozMzo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cHgvR3N0VlA4RW5jLnByczoKLQkqIGV4dC92cHgvTWFrZWZpbGUuYW06Ci0JKiBleHQvdnB4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZweC9nc3R2cDhkZWMuaDoKLQkqIGV4dC92cHgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnB4L2dzdHZwOGVuYy5oOgotCSogZXh0L3ZweC9nc3R2cDh1dGlscy5jOgotCSogZXh0L3ZweC9nc3R2cDh1dGlscy5oOgotCSogZXh0L3ZweC9wbHVnaW4uYzoKLQkgIHZweDogUmVuYW1lIHZwOCBwbHVnaW4gdG8gdnB4Ci0JICBUaGlzIGlzIHVzaW5nIGxpYnZweCwgd2hpY2ggY2FuIHN1cHBvcnQgbW9yZSBjb2RlY3MgdGhhbiBqdXN0IFZQOAotCSAgYW5kIHdpbGwgbGlrZWx5IHN1cHBvcnQgZnV0dXJlIGNvZGVjcy4KLQotMjAxMi0wOS0xNiAxNTozMjoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgdnA4OiBBcHBseSByZW1haW5pbmcgY2hhbmdlcyB0aGF0IGdvdCBsb3N0IHdoaWxlIG1vdmluZyB0aGUgcGx1Z2luIHZpYSBnaXQgYW0gdGhhbmtzIHRvIG1lcmdlcwotCi0yMDEyLTA5LTE2IDE1OjI1OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMzQvMTM0XSB2cDhkZWM6IFVucmVmIGlucHV0L291dHB1dCBzdGF0ZXMgd2hlbiBzdG9wcGluZyB0aGUgZGVjb2RlcgotCi0yMDEyLTA5LTE2IDE1OjE4OjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9Hc3RWUDhFbmMucHJzOgotCSAgW01PVkVEIEZST00gQkFEIDEzMy8xMzRdIHZwOGVuYzogVXBkYXRlIHJlYWx0aW1lIHByb2ZpbGUgdG8gdGhlIG5ldyBwcm9wZXJ0aWVzCi0KLTIwMTItMDktMTYgMTA6NTY6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEzMi8xMzRdIHZwODogUmVxdWlyZSBsYXRlc3QgbGlidnB4IHJlbGVhc2UgKDEuMS4wIGZyb20gTWF5IDIwMTIpCi0JICBGaXhlcyBidWcgIzY4NDExNiBhbmQgc2ltcGxpZmllcyBjb25maWd1cmUgY2hlY2tzLgotCi0yMDEyLTA5LTE1IDIwOjIzOjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMzEvMTM0XSB2cDhlbmM6IFVzZSBhIHN0cmluZyBmaWVsZCBmb3IgdGhlIHByb2ZpbGUgaW4gdGhlIGNhcHMKLQkgIEp1c3QgZm9yIGNvbnNpc3RlbmN5IHdpdGggYWxsIHRoZSBvdGhlciBjb2RlY3MuCi0KLTIwMTItMDktMTUgMDA6MDQ6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEzMC8xMzRdIHZwOGVuYzogQ29ycmVjdGx5IHNldCBwcm9maWxlIGluIGNhcHMKLQotMjAxMi0wOS0xNCAyMzo0MTo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEyOS8xMzRdIHZwODogVXBkYXRlIGNvcHlyaWdodCBhbmQgYXV0aG9ycwotCi0yMDEyLTA5LTA4IDE1OjM4OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTI4LzEzNF0gdnA4ZW5jOiBSZXdvcmsgZW5jb2RlciBwcm9wZXJ0aWVzIHRvIGJlIG1vcmUgaW4gbGluZSB3aXRoIHRoZSBsaWJ2cHggdG9vbHMgYW5kIEFQSQotCSAgQWxzbyBhZGQgYWxsIGF2YWlsYWJsZSBwcm9wZXJ0aWVzLgotCi0yMDEyLTA5LTE0IDE3OjA4OjQ5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTI3LzEzNF0gcmVwbGFjZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUgd2l0aCBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEKLQotMjAxMi0wNy0xOSAwOTowNToyOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTI2LzEzNF0gdnA4ZGVjOiBDYWxsIGdzdF92aWRlb19kZWNvZGVyX25lZ290aWF0ZSgpCi0KLTIwMTItMDgtMTQgMTE6MTc6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhkZWMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMjUvMTM0XSB2cDhkZWM6IEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBkZWNvZGluZyB0aHJlYWRzCi0KLTIwMTItMDgtMTQgMTE6MDk6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEyNC8xMzRdIHZwOGRlYzogQWRkIHN1cHBvcnQgZm9yIHRoZSBNRlFFIHBvc3Rwcm9jZXNzaW5nIGZsYWcKLQkgIFdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBwb3N0cHJvY2Vzc2luZyBpcyBlbmFibGVkLgotCi0yMDEyLTA4LTA5IDEzOjM3OjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9NYWtlZmlsZS5hbToKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMjMvMTM0XSB2cDg6IFVzZSBwa2ctY29uZmlnIGZpbGUgZm9yIGdldHRpbmcgdGhlIExJQlMgYW5kIENGTEFHUwotCi0yMDEyLTA4LTA4IDE3OjA2OjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMjIvMTM0XSB2cDhlbmM6IFVwZGF0ZSB0aGUgcGVyLWNvbXBvbmVudCBzdHJpZGVzIGZvciBldmVyeSBmcmFtZSB0b28KLQkgIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgR3N0VmlkZW9BbGlnbm1lbnQKLQotMjAxMi0wNy0yNiAxOTozMToxNCArMDIwMCAgT2xla3NpaiBSZW1wZWwgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMjEvMTM0XSB2cDhlbmM6IGluaXRpYXRlIGVuY29kZXIgdG8gZml4IGEgY3Jhc2guCi0JICBXaXRob3V0IHRoaXMgcGF0Y2ggdnA4ZW5jIHNlbmQgaGVhZGVyIGJlZm9yZSBhbmQgYWZ0ZXIgZmlyc3QKLQkgIGtleSBmcmFtZS4gT24gc2Vjb25kIGtleWZyYW1lIHZwOGRlYyB3aWxsIGNyYXNoIHdpdGhvdXQgZ2V0dGluZwotCSAgZGVjb2RlZCBmcmFtZS4gV2l0aCB0aGlzIHBpcGUgaXQgaXMgZWFzeSB0byByZXByb2R1Y2UgdGhpcyBpc3N1ZToKLQkgIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhIHZwOGVuYyAhIHZwOGRlYyAhIGZha2VzaW5rCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwNjY3Ci0KLTIwMTItMDctMjggMDA6MzI6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEyMC8xMzRdIHRhZzogVXBkYXRlIGZvciB0YWdsaXN0L3RhZyBldmVudCBBUEkgY2hhbmdlcwotCi0yMDEyLTA3LTIzIDEwOjM1OjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMTkvMTM0XSBleHQ6IFVwZGF0ZSBmb3IgdmlkZW8gYmFzZSBjbGFzc2VzIEFQSSBjaGFuZ2VzCi0KLTIwMTItMDctMjEgMTk6NTk6MjEgKzAyMDAgIE9sZWtzaWogUmVtcGVsIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTE4LzEzNF0gdnA4ZW5jOiBmaXggbWVtb3J5IGxlYWsKLQkgIHVucmVmIGZyYW1lLiBpIGhvcGUgaXQgaXMgY29ycmVjdCBwbGFjZSB0byBkbyBpdC4KLQkgIFNpZ25lZC1vZmYtYnk6IE9sZWtzaWogUmVtcGVsIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLTIwMTItMDctMDYgMTE6NTA6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTE3LzEzNF0gdXBkYXRlIGZvciBxdWVyeSBhcGkgY2hhbmdlcwotCi0yMDEyLTA3LTA2IDExOjI2OjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDExNi8xMzRdIHVwZGF0ZSBmb3IgcXVlcnkgYXBpIGNoYW5nZXMKLQotMjAxMi0wNy0wNiAxMTowMzowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMTUvMTM0XSB1cGRhdGUgZm9yIGFsbG9jYXRpb24gcXVlcnkgY2hhbmdlcwotCi0yMDEyLTA2LTA3IDEyOjMzOjMxICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTE0LzEzNF0gdnA4OiBmaXggY29kZWMgc3RhdGUgbGVha3MKLQkgIEkgb25seSB0ZXN0ZWQgdGhhdCB2cDhlbmMgISB2cDhkZWMgZG9lcyBub3QgY3Jhc2gsIGFzIHZhbGdyaW5kIGRvZXMgbm90IGdyb2sKLQkgIGF0IGxlYXN0IG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHVzZWQgYnkgdnA4ZW5jLCBwcmV2ZW50aW5nIG1lIGZyb20gY2hlY2tpbmcKLQkgIGEgbGVhaywgYW5kIHRoZSBsYWNrIG9mIG9uZSBhZnRlciB0aGUgcGF0Y2guCi0KLTIwMTItMDYtMDYgMTM6MDI6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTEzLzEzNF0gdXBkYXRlIGZvciB0YWcgZXZlbnQgY2hhbmdlCi0KLTIwMTItMDUtMjggMTY6MDU6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTEyLzEzNF0gdnA4OiBQb3J0IHRvIDAuMTEgYWdhaW4KLQotMjAxMi0wNS0xOCAxMjo0Njo1NSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTExLzEzNF0gdnA4ZW5jOiBmaXggdGFyZ2V0IGJpdHJhdGUgY29uZmlnIHdpdGggbGlidnB4IDEuMS4wCi0JICBsaWJ2cHggMS4xLjAgZGlzYWxsb3dzIGEgYml0cmF0ZSBvZiAwLCB3aGljaCB3YXMgdXNlZCBieQotCSAgdnA4ZW5jIGFzIGEgZGVmYXVsdCB2YWx1ZS4KLQkgIEluc3RlYWQsIHdlIHVzZSB0aGUgZGVmYXVsdCBsaWJ2cHggYml0cmF0ZSwgc2NhbGVkIHRvIG91cgotCSAgdmlkZW8gc2l6ZSwgaWYgbm8gYml0cmF0ZSB3YXMgc3BlY2lmaWVkLgotCSAgVGhpcyBmaXhlcyBlbmNvZGluZyBWUDggdmlkZW8gd2l0aCBsaWJ2cHggMS4xLjAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2MjQ1Ci0KLTIwMTItMDUtMTYgMTQ6MDQ6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDExMC8xMzRdIHZwOGVuYzogVXBkYXRlIGZvciBHc3RWaWRlb0NvZGVjRnJhbWUgQVBJIGNoYW5nZXMKLQotMjAxMi0wNC0yNyAxODoyMjo0MiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhkZWMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMDkvMTM0XSB2cDhkZWM6IEltcHJvdmUgb3V0cHV0X3N0YXRlIGhhbmRsaW5nCi0JICBBdm9pZCBnZXR0aW5nIG91dHB1dF9zdGF0ZSBmb3IgZXZlcnkgYnVmZmVyIGFzIHRoYXQgcmVxdWlyZXMKLQkgIGdldHRpbmcgdGhlIG9iamVjdGxvY2sgYW5kIGRvaW5nIHJlZmVyZW5jZSBjb3VudGluZy4gU3RvcmUgaXQgbG9jYWxseQotCSAgd2hlbiBpdCBpcyBjcmVhdGVkIGFuZCB1c2UgaXQuCi0KLTIwMTItMDQtMjcgMDk6MDU6NTcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMDgvMTM0XSB2cDhkZWM6IFVzZSBvdXRwdXRzdGF0ZSB3aGVuIGNvcHlpbmcgb3V0cHV0IGJ1ZmZlciBkYXRhCi0JICBVc2luZyB0aGUgaW5wdXQgc3RhdGUgd2FzIGNhdXNpbmcgYSBjcmFzaCBiZWNhdXNlIHRoZSBzdHJpZGVzL29mZnNldHMKLQkgIHdvdWxkIGJlIHdyb25nLiBGaXggaXQgYnkgdXNpbmcgdGhlIG91dHB1dCBhcyB3ZSBhcmUgZGVhbGluZyB3aXRoCi0JICB0aGUgZGVjb2RlZCBmcmFtZS4KLQotMjAxMi0wNC0yNCAxMTowODo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTA3LzEzNF0gdnA4OiBQb3J0IHRvIC1iYXNlIHZpZGVvIGJhc2UgY2xhc3NlcwotCSAgQ29uZmxpY3RzOgotCSAgZXh0L3ZwOC9NYWtlZmlsZS5hbQotCSAgZXh0L3ZwOC9nc3R2cDhkZWMuYwotCSAgZXh0L3ZwOC9nc3R2cDhlbmMuYwotCSAgQmFjayB0byAwLjEwIHN0YXRlIGZvciBub3csIG5lZWQgdG8gYmUgcG9ydGVkIGFnYWluLgotCi0yMDEyLTA1LTE4IDEyOjQ2OjU1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMDYvMTM0XSB2cDhlbmM6IGZpeCB0YXJnZXQgYml0cmF0ZSBjb25maWcgd2l0aCBsaWJ2cHggMS4xLjAKLQkgIGxpYnZweCAxLjEuMCBkaXNhbGxvd3MgYSBiaXRyYXRlIG9mIDAsIHdoaWNoIHdhcyB1c2VkIGJ5Ci0JICB2cDhlbmMgYXMgYSBkZWZhdWx0IHZhbHVlLgotCSAgSW5zdGVhZCwgd2UgdXNlIHRoZSBkZWZhdWx0IGxpYnZweCBiaXRyYXRlLCBzY2FsZWQgdG8gb3VyCi0JICB2aWRlbyBzaXplLCBpZiBubyBiaXRyYXRlIHdhcyBzcGVjaWZpZWQuCi0JICBUaGlzIGZpeGVzIGVuY29kaW5nIFZQOCB2aWRlbyB3aXRoIGxpYnZweCAxLjEuMC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYyNDUKLQotMjAxMi0wNC0wNSAxODowMjo1NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvcGx1Z2luLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTA1LzEzNF0gZ3N0OiBVcGRhdGUgZm9yIEdTVF9QTFVHSU5fREVGSU5FKCkgQVBJIGNoYW5nZXMKLQotMjAxMi0wNC0wNCAxNDo0MToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvTWFrZWZpbGUuYW06Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTA0LzEzNF0gZ3N0OiBVcGRhdGUgdmVyc2lvbmluZwotCi0yMDEyLTAzLTA2IDE1OjIxOjE3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMDMvMTM0XSB2cDhlbmM6IEZpeCAnYXJndW1lbnQgdG8gJ3NpemVvZicgaW4gJ21lbXNldCcgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbicgY29tcGlsZXIgd2FybmluZwotCi0yMDEyLTAxLTMwIDE3OjE3OjE2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEwMi8xMzRdIHVwZGF0ZSBmb3IgSEVBREVSIGZsYWcKLQotMjAxMi0wMS0yNSAxODo0OTo1OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDEwMS8xMzRdIHBvcnQgc29tZSBtb3JlIHRvIG5ldyBtZW1vcnkgQVBJCi0JICBGaXhlcyAjNjY4Njc3LgotCi0yMDEyLTAxLTI0IDExOjIyOjQ2ICswMTAwICBPbGVrc2lqIFJlbXBlbCAoQWxleGV5IEZpc2hlcikgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMDAvMTM0XSB2cDhlbmM6IHRyYWNlIG91dGdvaW5nIHRpbWVzdGFtcHMKLQkgIGFkZCBpbmZvIGxldmVsIHByaW50cyBmb3Igb3V0Z29pbmcgdGltZXN0YW1wcy4KLQkgIFNpZ25lZC1vZmYtYnk6IE9sZWtzaWogUmVtcGVsIChBbGV4ZXkgRmlzaGVyKSA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0yMDEyLTAxLTA0IDExOjA1OjQ4ICswMTAwICBPbGVrc2lqIFJlbXBlbCAoQWxleGV5IEZpc2hlcikgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOTkvMTM0XSB2cDhkZWM6IHVzZSBpc19hbHRfZGF0YSBvcHRpb24gdG8gcHJldmVudCB0aW1lc3RhbXAgY29sbGlzaW9ucwotCSAgYWx0cmVmL2ludmlzaWJsZSBmcmFtZXMgdXN1YWxseSBzdG9yZWQgaW4gY29udGFpbmVyIHdpdGggc2FtZSB0aW1lc3RhbXAgYXMKLQkgIGRlcGVuZGV0IGZyYW1lLiBUaGlzIG1ha2UgYmFzZXZpZGVvZGVjb2RlciB0byB1cGRhdGUgdGltZXN0YW1wIGZvciBkZXBlbmRldAotCSAgZnJhbWUgYW5kIGNvdXNlIFRTIGNvbGlzaW9uIG9uIG5leHQgZnJhbWU6Ci0JICBeLSBoZXJlIGlzIGFsdHJlZgotCSAgdGltZSAgICAgOiAxIDIgMyA0IDUgNiA3IDggOQotCSAgd2VibSB0cyAgOiAxICAgMyA1IDUgICA3ICAgOQotCSAgdnA4ZGVjIHRzOiAxICAgMyAgIDcgICA3ICAgOQotCSAgRml4IGJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NTI0NQotCSAgU2lnbmVkLW9mZi1ieTogT2xla3NpaiBSZW1wZWwgKEFsZXhleSBGaXNoZXIpIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLTIwMTItMDEtMDIgMDg6Mjg6MTMgKzAxMDAgIE9sZWtzaWogUmVtcGVsIChBbGV4ZXkgRmlzaGVyKSA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L0dzdFZQOEVuYy5wcnM6Ci0JKiBleHQvdnA4L01ha2VmaWxlLmFtOgotCSAgW01PVkVEIEZST00gQkFEIDA5OC8xMzRdIHZwODogYWRkIGluaXRpYWwgcHJlc2V0IGZpbGUKLQkgIFRoaXMgaXMgaW5pdGlhbCBwcmVzZXQgZmlsZSwgY3VycmVudGx5IHdpdGggb25seSBvbmUgcHJvZmlsZQotCSAgZm9yIHJlYWx0aW1lIGVuY29kaW5nLgotCSAgU2lnbmVkLW9mZi1ieTogT2xla3NpaiBSZW1wZWwgKEFsZXhleSBGaXNoZXIpIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLTIwMTEtMTEtMjggMTM6MDg6MjcgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOTcvMTM0XSB2YXJpb3VzOiBmaXggcGFkIHRlbXBsYXRlIHJlZiBsZWFrcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjY2NAotCi0yMDExLTExLTI1IDExOjM2OjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOTYvMTM0XSB2cDhkZWM6IHVzZSBuZXcgYmFzZXZpZGVvZGVjb2RlciBBUEkgdG8gZHJvcCBmcmFtZXMgYW5kIGdldCBRb1MgbWVzc2FnZXMgcG9zdGVkCi0KLTIwMTEtMTEtMTAgMTU6MTM6MzQgKzAyMDAgIE1hcnQgUmF1ZHNlcHAgPGxlaW9AZ2VudG9vLm9yZz4KLQotCSogZXh0L3ZwOC9NYWtlZmlsZS5hbToKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOTUvMTM0XSBtaW1pYywgb3BlbmN2LCB2cDgsIGFjbW1wM2RlYywgbGluc3lzOiBEb24ndCBidWlsZCBzdGF0aWMgcGx1Z2lucwotCSAgUGFzcyAtLXRhZz1kaXNhYmxlLXN0YXRpYyB0byBsaWJ0b29sIGV2ZXJ5d2hlcmUgd2hlcmUgaXQncyBiZWVuIGZvcmdvdHRlbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2Mzc2OAotCi0yMDExLTExLTAzIDE0OjAxOjQxICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDk0LzEzNF0gdnA4OiBQb3J0IHRvIDAuMTEKLQotMjAxMS0wOC0yMSAyMDoxNToyNSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDkzLzEzNF0gdnA4ZW5jOiBmaXggZHJvcC1mcmFtZSBwcm9wZXJ0eQotCSAgRml4ZXMgIzY1NjkyOS4KLQotMjAxMS0wOC0xOSAxOToxNzoxNSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5oOgotCSAgW01PVkVEIEZST00gQkFEIDA5Mi8xMzRdIHZwODogcHJvYmUgZm9yIHRoZSBuZXcgdHVuaW5nIEFQSSB0byBrZWVwIGJ1aWxkaW5nIHdpdGggb2xkZXIgbGlidnB4Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU2OTI4Ci0KLTIwMTEtMDgtMTggMTA6Mzk6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA5MS8xMzRdIHZwOGVuYzogUmVtb3ZlIHVudXNlZCBhbmQgdXNlbGVzcyB2YXJpYWJsZSBpbiB0YWdzIGhhbmRsaW5nCi0KLTIwMTEtMDgtMTIgMTI6MDg6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA5MC8xMzRdIHZwOGVuYzogVXBkYXRlIGZvciBiYXNldmlkZW9lbmNvZGVyIDo6Z2V0X2NhcHMoKSByZW1vdmFsCi0KLTIwMTEtMDctMDkgMTg6NTM6MjQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwODkvMTM0XSB2cDhlbmM6IEFkZCBtb3JlIHByb3BlcnRpZXMKLQotMjAxMS0wNi0xOSAxNjowNjo0NiArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwODgvMTM0XSB2cDhlbmM6IGFkZCBtaW4vbWF4c2VjdGlvbi1wY3Qgb3B0aW9uCi0JICBUaGlzIG9wdGlvbnMgc2hvdWxkIGJlIGdvb2QgdG8gcmVkZXVjZSBkZWNvZGUgQ1BVIGxvYWQuCi0JICBmb3IgbG93ZW5kIGhhcmR3YXJlOgotCSAgbWluc2VjdGlvbi1wY3Q9MTUgbWF4c2VjdGlvbi1wY3Q9NDAwCi0JICBmb3IgaGllbmQgaHc6Ci0JICBtaW5zZWN0aW9uLXBjdD01IG1heHNlY3Rpb24tcGN0PTgwMAotCSAgc2VlIGV4YW1wbGU6Ci0JICBodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy90b29scy9lbmNvZGVyLXBhcmFtZXRlcnMvIzItcGFzc192YnJfZW5jb2RpbmdfZm9yX3Ntb290aF9wbGF5YmFja19vbl9sb3ctZW5kX2hhcmR3YXJlCi0JICBTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0JICBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotMjAxMS0wNi0xOSAxMTowNTozNiArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwODcvMTM0XSB2cDhlbmM6IGFkZCBsYWctaW4tZnJhbWVzIG9wdGlvbi4KLQkgIFRoaXMgb3B0aW9uIHNldCBtYXhpbXVtIG9mIGZyYW1lcyBjb2RlYyBzaG91bGQgcmVtZW1iZXIsCi0JICB0byBtYWtlIGJldHRlciBwcmVkaWt0aW9uIGZvciBhbHQtcmVmIGZyYW1lcy4KLQkgIFNlZSBleGFtcGxlOgotCSAgaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvdG9vbHMvZW5jb2Rlci1wYXJhbWV0ZXJzLyMyLXBhc3NfYmVzdF9xdWFsaXR5X3Zicl9lbmNvZGluZwotCSAgU2lnbmVkLW9mZi1ieTogQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLTIwMTEtMDYtMTkgMDc6MTY6NTcgKzAyMDAgIEFsZXhleSBGaXNoZXIgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwODYvMTM0XSB2cDhlbmM6IHVzZSBtdWx0aXBhc3MuY2FjaGUgZmlsZSBuYW1lIGFzIGRlZmF1bHQgZm9yIG11bHRpcGFzcyBtb2RlLgotCSAgU2lnbmVkLW9mZi1ieTogQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLTIwMTEtMDctMjEgMDg6MDM6NTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA4NS8xMzRdIHZwOGVuYzogVXBkYXRlIGZvciBHc3RCYXNlVmlkZW9FbmNvZGVyOjpmaW5pc2goKSBzaWduYXR1cmUgY2hhbmdlCi0KLTIwMTEtMDctMTIgMTg6MDU6MjUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDg0LzEzNF0gdnA4OiBGaXggc2V0LWJ1dC11bnVzZWQgd2FybmluZ3MKLQotMjAxMS0wNy0wOSAxMTozMTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDgzLzEzNF0gdnA4ZW5jOiBVc2UgZGVzdHJveSBub3RpZnkgdG8gZnJlZSB0aGUgY29kZXIgaG9vawotCi0yMDExLTA2LTE4IDE1OjU2OjQ5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwODIvMTM0XSB2cDhlbmM6IHVwZGF0ZSBmb3IgbmV3IGxpYnZweCBhcGkKLQotMjAxMS0wNi0yNiAxNToxNTo1NCArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA4MS8xMzRdIHZwOGVuYzogZ2VuZXJhdGUgYSB0aW1lc3RhbXAgZm9yIGFsdC1yZWYgZnJhbWVzLgotCSAgSXQgd2lsbCBmaXggaGFuZGxpbmcgb2YgYWx0cmVmL2ludmlzaWJsZSBmcmFtZXMgc2luY2UgbWF0cm9za2EtbXV4Ci0JICBkcm9wIGFueSBmcmFtIHdpdGggbm8gdGltZXN0YW1wLgotCSAgc2VlIGFsc286Ci0JICBodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy9jb2RlL3NwZWNzL2NvbnRhaW5lci8KLQkgIFRoZSBlbmNvZGVyIHdpbGwgY3VycmVudGx5IHNldCB0aGUgQVIncyB0aW1lc3RhbXAgYXMgY2xvc2UgYXMgcG9zc2libGUKLQkgIHRvIHRoZSBwcmV2aW91cyBmcmFtZSB3aGlsZSBhdHRlbXB0aW5nIHRvIHByb3ZpZGUgYSB0aW1lc3RhbXAgdGhhdCBpcwotCSAgc3RyaWN0bHkgaW5jcmVhc2luZy4gSW4gY2FzZXMgd2hlcmUgdGhlIHRpbWUgYmFzZSBnaXZlbiB0byB0aGUgZW5jb2RlcgotCSAgYXQgY29uZmlndXJlIHRpbWUgaXMgbm90IGdyYW51bGFyIGVub3VnaCB0byBhbGxvdyBmb3IgdGhpcyB0aGUgQVIKLQkgIHdpbGwgc2hhcmUgdGhlIHNhbWUgdGltZXN0YW1wIGFzIEQsIGJ1dCBzaG91bGQgYmUKLQkgIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGR1cmF0aW9uLgotCSAgRml4ZXMgYnVnICM2NTI5NTEKLQkgIFNpZ25lZC1vZmYtYnk6IEFsZXhleSBGaXNoZXIgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotMjAxMS0wNi0xOCAxNzo0NzozNiArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA4MC8xMzRdIHZwOGRlYzogYWRkIGNoZWNrIGlmIHdlIGhhdmUgbGVnYWwgYXNwZWN0LXJhdGlvIGJlZm9yZSByZXNldCBpdC4KLQkgIHRoZSBjb21taXQgZjliNTUyZjA0OTRlICh2cDhkZWM6IHNldCBwYXIgdG8gMS8xKQotCSAgd2lsbCBmaXggc2l0dWF0aW9uIHdoZXJlIG5vIGFzcGVjdC1yYXRpbyBpcyBzZXQsIGJ1dCBpdCBicmFrZQotCSAgc3RyZWFtIHdpdGggYXZhaWxhYmxlIGFzcGVjdC1yYXRpby4gVGhpcyBwYXRjaCBmaXggaXQuCi0JICBGaXhlczogIzY1MjkwMi4KLQkgIFNpZ25lZC1vZmYtYnk6IEFsZXhleSBGaXNoZXIgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotMjAxMS0wNi0wMyAxOTozNjo1OSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDc5LzEzNF0gdnA4ZGVjOiBzZXQgcGFyIHRvIDEvMQotCi0yMDExLTA1LTE4IDEzOjI3OjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNzgvMTM0XSB2cDhlbmM6IE5hbWUgbWF4L21pbiBxdWFudGl6ZXIgcHJvcGVydGllcyB7bWF4LG1pbn0tcXVhbnRpemVyCi0JICBBbHNvIGltcHJvdmUgcXVhbGl0eSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4KLQotMjAxMS0wNS0xOCAxMzoyNjoyMyArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNzcvMTM0XSB2cDhlbmM6IEFkZCBwcm9wZXJ0aWVzIHRvIHNlbGVjdCBhIG1heGltdW0gYW5kIG1pbmltdW0gcXVhbnRpemVyCi0JICBGaXhlcyBidWcgIzY0MTQwNS4KLQotMjAxMS0wNS0xOCAxMzoxODo1OCArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA3Ni8xMzRdIHZwOGVuYzogRml4IHF1YWxpdHkgdG8gKGNvbnN0YW50KSBxdWFudGl6ZXIgbWFwcGluZwotCSAgVGhpcyBub3cgYWxsb3dzIHRvIHNlbGVjdCBhbGwgcG9zc2libGUgcXVhbnRpemVycyBiZXR3ZWVuCi0JICAwIGFuZCA2My4KLQkgIFNlZSBidWcgIzY0MTQwNS4KLQotMjAxMS0wNC0wMSAyMjoxMzo1NSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDc1LzEzNF0gdnA4ZGVjOiBkZWJ1ZyBjb2RlIHN0eWxlIGZpeGVzCi0KLTIwMTEtMDQtMDEgMjI6MTM6MDAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA3NC8xMzRdIHZwOGRlYzogcHJvcGFnYXRlIGRvd25zdHJlYW0gZmxvdyByZXR1cm4gdG8gdXBzdHJlYW0KLQotMjAxMS0wMy0zMCAxMDoxODoyMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDczLzEzNF0gYmFzZXZpZGVvZGVjb2RlcjogcmVhbGx5IGFuZCBvbmx5IHNldCBzcmMgcGFkIGNhcHMgd2hlbmV2ZXIgcmVxdWVzdGVkCi0JICAuLi4gc2luY2Ugc3ViY2xhc3MgaXMgZXhwZWN0ZWQgdG8gYmUgd2lzZSBlbm91Z2ggdG8ga25vdyB3aGVuIHRvIGRvIHNvLgotCi0yMDExLTAzLTI5IDEwOjQxOjU0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNzIvMTM0XSBiYXNldmlkZW9kZWNvZGVyOiBpbnZva2Ugc3ViY2xhc3Mgc3RhcnQgbWV0aG9kIGF0IHN0YXRlIGNoYW5nZSBhbmQgdXNlIHNldF9mb3JtYXQKLQkgIFdoaWxlIHRoaXMgY2hhbmdlcyBBUEkgc2xpZ2h0bHkgKGUuZy4gYWN0dWFsbHkgdXNlcyBzZXRfZm9ybWF0IG5vdyksIHdoaWNoIGlzIE9LCi0JICBmb3IgdW5zdGFibGUgQVBJLCBpdCBoYXMgZm9sbG93aW5nIG1lcml0czoKLQkgICogc3ltbWV0cmljIHcuci50LiBzdG9wIGF0IHN0YXRlIGNoYW5nZQotCSAgKiBpbiBsaW5lIHdpdGggb3RoZXIgYmFzZSBjbGFzcyBwcmFjdGljZQotCSAgKiBvdGhlcndpc2Ugbm8gc3ViY2xhc3MgbWV0aG9kIGF0IHN0YXRlIGNoYW5nZSAoZ2xvYmFsIGFjdGl2YXRpb24gdGltZSkKLQkgIE1vcmVvdmVyLCBzdWJjbGFzc2VzZSBhcmUgZWl0aGVyIHVuYWZmZWN0ZWQgb3IgdHJpdmlhbGx5IGFkanVzdGVkIGFjY29yZGluZ2x5LgotCi0yMDExLTAzLTI4IDA4OjU5OjIwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNzEvMTM0XSBiYXNldmlkZW9kZWNvZGVyOiBzdWJzdW1lIHNraXBfZnJhbWUgaW50byBmaW5pc2hfZnJhbWUKLQotMjAxMS0wMy0yNCAxNDoxMDowNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDcwLzEzNF0gYmFzZXZpZGVvZW5jb2RlcjogcHJvdmlkZSBwcm9wZXIgdXBzdHJlYW0gZmxvdyByZXR1cm4gaGFuZGxpbmcKLQotMjAxMS0wMy0yNCAxMzo1OTozNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5oOgotCSAgW01PVkVEIEZST00gQkFEIDA2OS8xMzRdIHZwOGVuYzogbWlub3Igb3B0aW1pemF0aW9uIGluIHNldHRpbmcgdXAgaW1hZ2UgYnVmZmVyCi0KLTIwMTEtMDMtMjQgMTI6NTA6MjMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA2OC8xMzRdIHZwOGVuYzogcmVmYWN0b3IgZnJhbWUgcHJvY2Vzc2luZwotCi0yMDExLTAzLTI0IDExOjU1OjQxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNjcvMTM0XSB2cDhlbmM6IGRvIGluaXQgYXQgc2V0X2Zvcm1hdCB0aW1lCi0KLTIwMTEtMDMtMjQgMTA6MTU6NTUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNjYvMTM0XSB2cDhlbmM6IGZpeCBrZXlmcmFtZSBmb3JjaW5nCi0KLTIwMTEtMDMtMjMgMDk6NDU6MjAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA2NS8xMzRdIGJhc2V2aWRlb2NvZGVjOiByZW1vdmUgcmVkdW5kYW50IGNhcHMgZmllbGQKLQkgIC4uLiBhcyBpdCBpcyBhbHJlYWR5IGF0IGhhbmQgYXMgdGhlIHNyYyBwYWQncyBuZWdvdGlhdGVkIGNhcHMuCi0KLTIwMTEtMDMtMjMgMDg6NTA6MzEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNjQvMTM0XSB2cDhlbmM6IHVzZSBiYXNlY2xhc3MgZXZlbnQgdmlydHVhbCBoYW5kbGVyCi0KLTIwMTEtMDItMjAgMTQ6MTY6MTggLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5oOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNjMvMTM0XSBiYXNldmlkZW86IG1lcmdlIHV0aWxzIGhlYWRlciBpbnRvIGJhc2V2aWRlb2NvZGVjCi0KLTIwMTEtMDMtMTcgMTY6MzQ6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L01ha2VmaWxlLmFtOgotCSAgW01PVkVEIEZST00gQkFEIDA2Mi8xMzRdIHZwODogZml4IExJQkFERCBvcmRlciBpbiBNYWtlZmlsZS5hbQotCi0yMDExLTAyLTA0IDA5OjA4OjI2ICswMTAwICBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDYxLzEzNF0gdnA4ZW5jOiBBZGQgZGVzY3JpcHRpb24gZm9yIGJpdHJhdGUgdW5pdHMuCi0KLTIwMTAtMTEtMzAgMTg6NDM6MjQgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA2MC8xMzRdIHZwOGVuYzogUmVhZGQgc2V0dGluZyBvZiBncmFudWxlcG9zCi0JICBSZXZlcnQgcGFydHMgb2YgbGFzdCBwYXRjaCB0aGF0IHJlbW92ZWQgc2V0dGluZyBvZiBncmFudWxlcG9zLgotCSAgb2dnbXV4IHN0aWxsIHJlcXVpcmVzIGNvcnJlY3QgZ3JhbnVsZXBvcyBpbiBpbmNvbWluZyBwYWNrZXQuCi0KLTIwMTAtMTEtMjkgMjA6MjE6MzEgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA1OS8xMzRdIHZwOGVuYzogRG9uJ3Qgb3ZlcnJpZGUgdGltZXN0YW1wcyBzZXQgYnkgYmFzZSBjbGFzcwotCSAgQmVjYXVzZSB0aGUgYmFzZSBjbGFzcyBkb2VzIGl0IGNvcnJlY3RseS4KLQkgIEZpeGVzOiAjNjM1NzIwLCAjNjI1NTU4LgotCi0yMDEwLTExLTI1IDE4OjUyOjQ3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNTgvMTM0XSB2cDg6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCi0KLTIwMTAtMTAtMDkgMTc6MzY6MDcgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNTcvMTM0XSBiYXNldmlkZW86IE1vdmUgY29tbW9uIGZpZWxkcy9mdW5jdGlvbnMgdG8gYmFzZWNvZGVjCi0KLTIwMTAtMDktMTggMTc6Mjg6NDggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA1Ni8xMzRdIGJhc2V2aWRlbzogTW92ZSBkZWFkbGluZSB0byBmcmFtZSBzdHJ1Y3R1cmUKLQotMjAxMC0wOC0xMyAxNDozNDoyMSArMDIwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNTUvMTM0XSB2cDhkZWM6IFNldCBHc3RCYXNlVmlkZW9EZWNvZGVyOjpwYWNrZXRpemVkIHRvIFRSVUUgYXMgc29vbiBhcyBwb3NzaWJsZQotCSAgVGhpcyBmaXhlcyBhbiBpbmZpbml0ZSBsb29wIGlmIGFuIEVPUyBldmVudCBpcyByZWNlaXZlZCBiZWZvcmUKLQkgIEdzdEJhc2VWaWRlb0RlY29kZXI6OnN0YXJ0KCkgaXMgY2FsbGVkLCBlLmcuIGltbWVkaWF0ZWx5IHdoZW4gdGhlCi0JICBwYWRzIGFyZSBhY3RpdmF0ZWQuCi0JICBGaXhlcyBidWcgIzYyNjgxNS4KLQotMjAxMC0wNy0xMCAxNjo1MjoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5oOgotCSAgW01PVkVEIEZST00gQkFEIDA1NC8xMzRdIHZwOGVuYzogQWRkIHN1cHBvcnQgZm9yIGVuYWJsaW5nIGF1dG9tYXRpYyBpbnNlcnRpb24gb2YgYWx0LXJlZiBmcmFtZXMgYnkgdGhlIGVuY29kZXIKLQotMjAxMC0wNy0xMCAxNjo1MTo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDUzLzEzNF0gdnA4ZW5jOiBGaXggaGFuZGxpbmcgb2YgaW52aXNpYmxlL2FsdCByZWYgZnJhbWVzCi0KLTIwMTAtMDctMDMgMTc6NDc6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhkZWMuaDoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5oOgotCSAgW01PVkVEIEZST00gQkFEIDA1Mi8xMzRdIHZwODogQWRkIGluaXRpYWwgZG9jdW1lbnRhdGlvbiwgYmFzZWQgb24gdGhlIHRoZW9yYWRlYy90aGVvcmFlbmMgZG9jdW1lbnRhdGlvbgotCi0yMDEwLTA3LTAzIDE3OjM0OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9NYWtlZmlsZS5hbToKLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGRlYy5oOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmg6Ci0JKiBleHQvdnA4L3BsdWdpbi5jOgotCSAgW01PVkVEIEZST00gQkFEIDA1MS8xMzRdIHZwODogTW92ZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIGV0YyB0byBwdWJsaWMgaGVhZGVyIGZpbGVzIGZvciBndGstZG9jCi0KLTIwMTAtMDYtMTIgMDk6MDI6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA1MC8xMzRdIHZwOGVuYzogSW1wbGVtZW50IG11bHRpcGFzcyBlbmNvZGluZwotCSAgRml4ZXMgYnVnICM2MjEzNDguCi0KLTIwMTAtMDYtMTQgMTU6NTY6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDA0OS8xMzRdIHZwOGVuYzogU2V0IFZQOEVfU0VUX0NQVVVTRUQgdG8gMAotCSAgVGhpcyBzZXR0aW5nIGNvbnRyb2xzIGhvdyBtdWNoIENQVSBjYW4gYmUgdXNlZCBieSB0aGUgZW5jb2Rlciwgc3BlY2lmaWVkCi0JICBpbiBmcmFjdGlvbnMgb2YgMTYuIE5lZ2F0aXZlIHZhbHVlcyBtZWFuIHN0cmljdCBlbmZvcmNlbWVudCBvZiB0aGlzCi0JICB3aGlsZSBwb3NpdGl2ZSB2YWx1ZXMgYXJlIGFkYXB0aXZlLgotCSAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgLTQsIHdoaWNoIG1lYW5zIHRoYXQgd2UncmUgbm90IHJ1bm5pbmcgYXMgZmFzdAotCSAgYXMgcG9zc2libGUgYW5kIHByb2JhYmx5IGFyZSB3YXN0aW5nIHNvbWUgcXVhbGl0eS4gMCBpcyB0aGUgcmVjb21tZW5kZWQKLQkgIGRlZmF1bHQgYnkgbGlidnB4IHVwc3RyZWFtLgotCi0yMDEwLTA2LTE0IDE1OjUxOjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNDgvMTM0XSB2cDhlbmM6IFVzZSBWUFggZGVmaW5lcyBmb3IgUkVBTFRJTUUsIEdPT0QvQkVTVCBxdWFsaXR5IGRlYWRsaW5lcyBpbnN0ZWFkIG9mIG91ciBvd24KLQkgIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHVzZWQgZm9yIHRoZSBzcGVlZCBwcm9wZXJ0eS4KLQotMjAxMC0wNi0wMyAxMDo0OTo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDQ3LzEzNF0gdnA4ZW5jOiBmaXggcHJpbnRmIGZvcm1hdCB3YXJuaW5nIGluIGxvZyBtZXNzYWdlCi0JICBnc3R2cDhlbmMuYzo1NjQ6IGVycm9yOiBmb3JtYXQg4oCYJWTigJkgZXhwZWN0cyB0eXBlIOKAmGludOKAmSwgYnV0IGFyZ3VtZW50IDggaGFzIHR5cGUg4oCYc2l6ZV904oCZCi0JICBnc3R2cDhlbmMuYzo3NDQ6IGVycm9yOiBmb3JtYXQg4oCYJWTigJkgZXhwZWN0cyB0eXBlIOKAmGludOKAmSwgYnV0IGFyZ3VtZW50IDggaGFzIHR5cGUg4oCYc2l6ZV904oCZCi0KLTIwMDktMDctMDMgMTY6MDg6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L01ha2VmaWxlLmFtOgotCSAgW01PVkVEIEZST00gQkFEIDA0Ni8xMzRdIGJhc2V2aWRlbywgdnA4OiBndWFyZCB1bnN0YWJsZSBBUEkgd2l0aCBHU1RfVVNFX1VOU1RBQkxFX0FQSQotCSAgQWRkIHNvbWUgZ3VhcmRzIGFuZCBmYXQgd2FybmluZ3MgdG8gdGhlIGhlYWRlciBmaWxlcyB3aXRoIHN0aWxsIHVuc3RhYmxlCi0JICBBUEksIHNvIHBlb3BsZSB3aG8ganVzdCBsb29rIGF0IHRoZSBpbnN0YWxsZWQgaGVhZGVycyBrbm93IHRoYXQgaXQKLQkgIGFjdHVhbGx5IGlzIHVuc3RhYmxlIEFQSS4KLQkgIE1lcmdpbmcgcHJldmlvdXMgY29tbWl0IGludG8gY3VycmVudCBjb2RlYmFzZS4KLQotMjAxMC0wNi0wMSAxNTo1NDo1MSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC92cDgvTWFrZWZpbGUuYW06Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9jb2RlYy5jOgotCSogZXh0L3ZwOC9nc3QvdmlkZW8vZ3N0YmFzZXZpZGVvY29kZWMuaDoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2RlY29kZXIuYzoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2RlY29kZXIuaDoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2VuY29kZXIuYzoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2VuY29kZXIuaDoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb3BhcnNlLmM6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9wYXJzZS5oOgotCSogZXh0L3ZwOC9nc3QvdmlkZW8vZ3N0YmFzZXZpZGVvdXRpbHMuYzoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb3V0aWxzLmg6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3R2aWRlb2NvbXBhdC5jOgotCSogZXh0L3ZwOC9nc3QvdmlkZW8vZ3N0dmlkZW9jb21wYXQuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNDUvMTM0XSBiYXNldmlkZW86IE1vdmUgYmFzZSB2aWRlbyBmcm9tIHZwOCB0byBnc3QtbGlicwotCi0yMDEwLTA1LTI2IDA2OjUyOjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L2dzdHZwOHV0aWxzLmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDQ0LzEzNF0gdnA4OiBVc2UgVlBYX1BMQU5FXyogaW5zdGVhZCBvZiBQTEFORV8qCi0KLTIwMTAtMDUtMjQgMTE6MDQ6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOHV0aWxzLmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDQzLzEzNF0gdnA4OiBBZGQgY29tcGF0aWxpYml0eSBkZWZpbmVzIHRvIHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBsaWJ2cHggdG9vCi0KLTIwMTAtMDUtMjMgMDk6Mjg6MTMgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDQyLzEzNF0gdnA4ZGVjOiBzL0lNR19GTVRfSTQyMC9WUFhfSU1HX0ZNVF9JNDIwLwotCSAgVGhpcyBjb3JyZXNwb25kcyB0byB1cHN0cmVhbSBsaWJ2cHggY29tbWl0IDZjZDRhMTBlMTY3MjAzZDFkZWI3OWFiZjYwZWU3MjU5OWU5Nzg5MWIKLQotMjAxMC0wNS0yMiAxMjo1NTo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDQxLzEzNF0gdnA4ZW5jOiBBbGxvdyBhIG1heGltdW0ga2V5ZnJhbWUgZGlzdGFuY2Ugb2YgMCwgaS5lLiBhbGwgZnJhbWVzIGFyZSBrZXlmcmFtZXMKLQotMjAxMC0wNS0yMiAwODo0NTozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDQwLzEzNF0gdnA4ZGVjOiBTZXQgZGVjb2RlciBkZWFkbGluZSBmcm9tIHRoZSBRb1MgaW5mb3JtYXRpb24KLQotMjAxMC0wNS0yOCAxNjozNToxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDM5LzEzNF0gdnA4ZW5jOiBNb3ZlIGRlYnVnIG91dHB1dCBvbmUgbGluZSBhYm92ZSB3aGVyZSB0aGUgcGFja2V0IGlzIHN0aWxsIHZhbGlkCi0KLTIwMTAtMDUtMjggMTU6NTM6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAzOC8xMzRdIHZwOGVuYzogQ29ycmVjdGx5IGlnbm9yZSBub24tZnJhbWUgcGFja2V0cyBmcm9tIHRoZSBlbmNvZGVyCi0JICBGaXhlcyBidWcgIzYxOTkxNi4KLQotMjAxMC0wNS0yMiAwNzo0NDoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2RlY29kZXIuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMzcvMTM0XSBiYXNldmlkZW9kZWNvZGVyOiBUYWtlIHRoZSBmcmFtZSBkdXJhdGlvbiBpbnRvIGFjY291bnQgd2hlbiBjYWxjdWxhdGluZyB0aGUgZWFybGllc3QgdGltZQotCSAgVGhpcyBmb3JtdWxhIGlzIHVzZWQgaW4gbWFueSBvdGhlciBlbGVtZW50cyB0b28uCi0JICBGaXhlcyBidWcgIzYxOTMxOC4KLQotMjAxMC0wNS0yMiAwNzozNTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2RlY29kZXIuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMzYvMTM0XSBiYXNldmlkZW9kZWNvZGVyOiBSZXNldCBRb1MgdmFsdWVzIHdoZW4gbmVjZXNzYXJ5Ci0KLTIwMTAtMDUtMjIgMDk6MzU6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAzNS8xMzRdIHZwOGVuYzogVXNlIEdTVF9WSURFT19DQVBTX1lVVihJNDIwKSBpbnN0ZWFkIG9mIGhhbmR3cml0dGVuIEk0MjAgY2FwcyBmb3IgdGhlIHBhZCB0ZW1wbGF0ZQotCSAgRml4ZXMgYnVnICM2MTkzNDQuCi0KLTIwMTAtMDUtMjEgMjA6NTM6MzYgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2RlY29kZXIuYzoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2RlY29kZXIuaDoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb3V0aWxzLmg6Ci0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAzNC8xMzRdIHZwOGRlYzogZHJvcCBsYXRlIGZyYW1lcyBhZnRlciBkZWNvZGluZyB0aGVtCi0JICBUaGlzIHNhdmVzIGEgbWVtY3B5LCB3aGljaCBpcyBhbHdheXMgc29tZXRoaW5nLgotCi0yMDEwLTA1LTIxIDIxOjI4OjI5ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAzMy8xMzRdIHZwOGVuYzogdGhyZWFkcyBwcm9wZXJ0eQotCSAgSW5jcmVhc2luZyBmcm9tIDEgdG8gMiB0aHJlYWRzIG9uIGFuIFRoaW5rcGFkIFg2MHMgZGVjcmVhc2VkIGVuY29kZSB0aW1lCi0JICBpbiBhIHRlc3QgZnJvbSB+MjQgcyB0byB+MTkgcywgc28gdGhpcyBpcyBxdWl0ZSB1c2VmdWwuCi0JICBJZGVhbGx5IHdlIHNob3VsZCBsZXQgMCBiZSB0aGUgZGVmYXVsdCBhbmQgYXV0b21hdGljYWxseSBtYXRjaCB0aGUgbnVtYmVyCi0JICBvZiBDUFUgY29yZXMgKG9yIHNvbWV0aGluZykuCi0KLTIwMTAtMDUtMjEgMTU6MTc6NDYgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDMyLzEzNF0gdnA4ZW5jOiBhZGQgbW9kZSBwcm9wZXJ0eSB0byBzd2l0Y2ggYmV0d2VlbiBDQlIvVkJSCi0JICBBbHdheXMgdXNpbmcgQ0JSIHdoZW4gYml0cmF0ZSBpcyB1c2VkIGlzbid0IHRoYXQgZ3JlYXQsIFZCUiBtb2RlCi0JICBjYW4gcHJvZHVjZSBtZWFuaW5nZnVsIHJlc3VsdHMgdG9vLgotCi0yMDEwLTA1LTIxIDEwOjU0OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMzEvMTM0XSB2cDhkZWM6IE9ubHkgZW5hYmxlIHBvc3Rwcm9jZXNzaW5nIGlmIHRoZSBkZWNvZGVyIHN1cHBvcnRzIGl0Ci0KLTIwMTAtMDUtMjEgMDg6MjM6NTggKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGV4dC92cDgvcGx1Z2luLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDMwLzEzNF0gdnA4OiB0eXBvOiBzL0hBVkVfVlA4X0RFQ09ERVIvSEFWRV9WUDhfRU5DT0RFUi8KLQkgIEZpeHVwIGZvciBidWcgIzYxOTE3Mi4KLQotMjAxMC0wNS0yMSAwODoxMzowNiArMDIwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDI5LzEzNF0gdnA4OiBtb3ZlICNpZmRlZiBIQVZFX1ZQOF9FTkNPREVSL0RFQ09ERVIKLQkgIE90aGVyd2lzZSB3ZSdsbCB0cnkgaW5jbHVkaW5nIGUuZy4gPHZweC92cDhjeC5oPiB3aGljaCBkb2Vzbid0IGV4aXN0LgotCi0yMDEwLTA1LTIwIDIwOjA2OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMjgvMTM0XSB2cDhlbmM6IFdyaXRlIEdTdHJlYW1lciBlbGVtZW50IGFuZCB2ZXJzaW9uIGluIHRoZSB2b3JiaXNjb21tZW50IHZlbmRvciBzdHJpbmcKLQotMjAxMC0wNS0yMCAxNjo0OTowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSogZXh0L3ZwOC9wbHVnaW4uYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMjcvMTM0XSB2cDg6IE9ubHkgZW5hYmxlIHRoZSBlbmNvZGVyIG9yIGRlY29kZXIgaWYgaXQncyBhdmFpbGFibGUgaW4gbGlidnB4Ci0JICBGaXhlcyBidWcgIzYxOTE3Mi4KLQotMjAxMC0wNS0yMCAxMDoxOTo1NCArMDIwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L3BsdWdpbi5jOgotCSAgW01PVkVEIEZST00gQkFEIDAyNi8xMzRdIHZwODogZXhsY3VkZSBkZWMvZW5jIGJhc2VkIG9uIENPTkZJR19WUDhfREVDT0RFUi9FTkNPREVSCi0JICBUaGlzIG1heSBub3QgYmUgdmVyeSBhdXRvdG9vbGlzaCwgYnV0IHdvcmtzIHdpdGggbGlidnB4IGluIHRoZSBzdGF0ZQotCSAgdGhhdCBsaWJ2cHggaXMgYWN0dWFsbHkgaW4uIE1vdmVkIHRoZSBkZWJ1ZyBpbml0IHRvIHRoZSBlbGVtZW50cwotCSAgdGhlbXNlbHZlcyB0byBtaW5pbWl6ZSBhbW91bnQgb2YgI2lmZGVmcwotCi0yMDEwLTA1LTIwIDA5OjI0OjUzICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAyNS8xMzRdIHZwOGVuYzogTGltaXQgbWF4LWxhdGVuY3kgdG8gMjUgdG8gbWF0Y2ggbGlidnB4Ci0JICBGcm9tIGxpYnZweC92cDgvZW5jb2Rlci9vbnl4X2ludC5oOgotCSAgI2RlZmluZSBNQVhfTEFHX0JVRkZFUlMgKENPTkZJR19SRUFMVElNRV9PTkxZPyAxIDogMjUpCi0JICBXaGlsZSB3ZSBkb24ndCBuZWVkIHRvIGJlIHRpZWQgdG8gd2hhdCBsaWJ2cHggZG9lcyBpbnRlcm5hbGx5LCBpdAotCSAgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHByZXRlbmQgdG8gc3VwcG9ydCBsb25nZXIgZnJhbWUgbGFncyB0aGFuIGFyZQotCSAgYWN0dWFsbHkgcG9zc2libGUuCi0KLTIwMTAtMDUtMjAgMDk6NTY6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4dXRpbHMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMjQvMTM0XSB2cDg6IFVuZGVmIEhBVkVfQ09ORklHX0ggYmVmb3JlIGluY2x1ZGluZyBsaWJ2cHggaGVhZGVycwotCSAgQSBwdWJsaWMgbGlidnB4IGhlYWRlciBpbmNsdWRlcyBwcml2YXRlIGhlYWRlcnMgaWYgdGhpcyBpcwotCSAgZGVmaW5lZCwgY2F1c2luZyBjb21waWxhdGlvbiBmYWlsdXJlcyBiZWNhdXNlIHRoZSBwcml2YXRlIGhlYWRlcnMKLQkgIGFyZSBub3QgaW5zdGFsbGVkIG9mIGNvdXJzZS4KLQotMjAxMC0wNS0yMCAwODo1MzoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDIzLzEzNF0gdnA4ZW5jOiBTb21lIG1vcmUgbWlub3IgYWRqdXN0bWVudHMgZm9yIHRoZSBPZ2cgbWFwcGluZwotCi0yMDEwLTA1LTE5IDIzOjAyOjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMjIvMTM0XSB2cDhkZWM6IEZpeCBtZW1vcnkgbGVhawotCi0yMDEwLTA1LTE5IDIxOjM0OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMjEvMTM0XSB2cDhlbmM6IEFkanVzdCBPZ2cgbWFwcGluZyBmb3IgdGhlIGNoYW5nZXMKLQotMjAxMC0wNS0xOSAxODoxMjoxOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDIwLzEzNF0gdnA4ZGVjOiBBZGQgcHJvcGVydGllcyB0byBjb250cm9sIHRoZSBWUDggZGVjb2RlciBwb3N0IHByb2Nlc3NpbmcgZmVhdHVyZQotCSAgVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBub3cuCi0KLTIwMTAtMDUtMTkgMTc6MTY6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAxOS8xMzRdIHZwOGVuYzogUmVuYW1lIGtleWZyYW1lLWludGVydmFsIHRvIG1heC1rZXlmcmFtZS1kaXN0YW5jZQotCSAgQW5kIHVzZSBkZWZhdWx0IHNldHRpbmdzIGZvciBidWZmZXIgc2l6ZXMgdW50aWwgd2UgZXhwb3NlIHRoaXMKLQkgIHNvbWVob3cuCi0KLTIwMTAtMDUtMTkgMTc6MTM6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L01ha2VmaWxlLmFtOgotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JKiBleHQvdnA4L2dzdHZwOHV0aWxzLmM6Ci0JKiBleHQvdnA4L2dzdHZwOHV0aWxzLmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDE4LzEzNF0gdnA4OiBJbXByb3ZlIGVycm9yIGhhbmRsaW5nIGFuZCBkZWJ1ZyBvdXRwdXQKLQotMjAxMC0wNS0xOSAxNDo0Njo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAxNy8xMzRdIHZwODogVXNlIGNvcnJlY3Qgc3RyaWRlcyBhbmQgcGxhbmUgb2Zmc2V0cyBmb3IgR1N0cmVhbWVyCi0KLTIwMTAtMDUtMTggMTQ6NDc6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGVuYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAxNi8xMzRdIHZwOGVuYzogSW1wbGVtZW50IEdzdFRhZ1NldHRlciBpbnRlcmZhY2UKLQotMjAxMC0wNS0xOCAxNDozMzo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDE1LzEzNF0gdnA4ZW5jOiBGaXggc2V0dGluZyBvZiB0aGUga2V5ZnJhbWUgZmxhZyBvbiBlbmNvZGVkIGZyYW1lcwotCi0yMDEwLTA1LTE4IDE0OjMwOjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMTQvMTM0XSB2cDhlbmM6IFBvc3QgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIGlmIGVuY29kZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMKLQotMjAxMC0wNS0xOCAxNDoyODo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDEzLzEzNF0gdnA4ZGVjOiBGaXggbWVtb3J5IGxlYWtzIGFuZCBmYWlsIGlmIGluaXRpYWxpemluZyB0aGUgZGVjb2RlciBmYWlscwotCi0yMDEwLTA1LTE4IDAyOjQ0OjU0IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMTIvMTM0XSB2cDhlbmM6IFNldCB0aW1lYmFzZQotCSAgQWxzbyBtaXNjIGNsZWFudXAuCi0KLTIwMTAtMDUtMTYgMTA6MzY6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSAgW01PVkVEIEZST00gQkFEIDAxMS8xMzRdIHZwOGRlYzogRml4IGRlY29kaW5nIG9mIGludmlzaWJsZSBmcmFtZXMKLQotMjAxMC0wNS0xNCAxNDoyNjozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDEwLzEzNF0gdnA4ZW5jOiBVcGRhdGUgdGhlIGxhdGVuY3kgd2hlbiBpbml0aWFsaXppbmcgdGhlIGVuY29kZXIKLQotMjAxMC0wNS0xNCAxNDowMjo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDA5LzEzNF0gdnA4ZGVjOiBDb3JyZWN0bHkgaW5pdGlhbGl6ZSBzdHJlYW0gaW5mbyBiZWZvcmUgcGVla2luZyBhdCB0aGUgc3RyZWFtCi0JICBPdGhlcndpc2UgcGVla2luZyB3aWxsIGZhaWwgYW5kIHdlJ2xsIGdldCBpbnZhbGlkIHZhbHVlcwotCi0yMDEwLTA1LTE0IDExOjAxOjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhkZWMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMDgvMTM0XSB2cDhkZWM6IE1ha2Ugc3VyZSB0byBwYXNzIGEga2V5ZnJhbWUgYXMgZmlyc3QgZnJhbWUgdG8gdGhlIGRlY29kZXIsIGNvcHkgb3V0cHV0IGZyYW1lcyBvbmx5IG9uY2UgYW5kIHJlcXVpcmUgd2lkdGgvaGVpZ2h0L2V0YyBvbiB0aGUgaW5wdXQgY2FwcwotCi0yMDEwLTA1LTE0IDEwOjMwOjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMDcvMTM0XSB2cDhlbmM6IEFkZCBzdXBwb3J0IGZvciBpbnZpc2libGUgZnJhbWVzIGFuZCB0aGUgT2dnIG1hcHBpbmcKLQotMjAxMC0wNS0xNCAwMToxNDo0NiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZGVjLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDA2LzEzNF0gdnA4ZGVjOiBGaXggcmVzZXQgYWZ0ZXIgc2Vla2luZwotCSAgQWxzbyByZW1vdmUgc29tZSB1bnVzZWQgY29kZS4KLQotMjAxMC0wNS0xMyAyMToxOTozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC92cDgvZ3N0dnA4ZW5jLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDA1LzEzNF0gdnA4ZW5jOiBTZXQgZnJhbWUgbnVtYmVycyBhcyBidWZmZXIgb2Zmc2V0cwotCi0yMDEwLTA1LTEzIDIxOjE4OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMDQvMTM0XSB2cDhlbmM6IEFsd2F5cyBnZXQgYXMgbWFueSBmcmFtZXMgYXMgcG9zc2libGUgZnJvbSB0aGUgZW5jb2RlcgotCi0yMDEwLTA1LTEzIDIxOjA4OjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMDMvMTM0XSB2cDhlbmM6IEZpbGwgdGhlIG9sZGVzdCBwZW5kaW5nIGZyYW1lIGluc3RlYWQgb2YgdGhlIG5ld2VzdAotCi0yMDEwLTA1LTEzIDIwOjIwOjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMDIvMTM0XSB2cDhlbmM6IENvcnJlY3RseSBzZXQgZGVsdGEgdW5pdCBmbGFnIGZvciBub24ta2V5ZnJhbWVzCi0KLTIwMTAtMDUtMTMgMDE6MDQ6MDQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvdnA4L01ha2VmaWxlLmFtOgotCSogZXh0L3ZwOC9nc3QvdmlkZW8vZ3N0YmFzZXZpZGVvY29kZWMuYzoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb2NvZGVjLmg6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9kZWNvZGVyLmM6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9kZWNvZGVyLmg6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9lbmNvZGVyLmM6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9lbmNvZGVyLmg6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW9wYXJzZS5jOgotCSogZXh0L3ZwOC9nc3QvdmlkZW8vZ3N0YmFzZXZpZGVvcGFyc2UuaDoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdGJhc2V2aWRlb3V0aWxzLmM6Ci0JKiBleHQvdnA4L2dzdC92aWRlby9nc3RiYXNldmlkZW91dGlscy5oOgotCSogZXh0L3ZwOC9nc3QvdmlkZW8vZ3N0dmlkZW9jb21wYXQuYzoKLQkqIGV4dC92cDgvZ3N0L3ZpZGVvL2dzdHZpZGVvY29tcGF0Lmg6Ci0JKiBleHQvdnA4L2dzdHZwOGRlYy5jOgotCSogZXh0L3ZwOC9nc3R2cDhlbmMuYzoKLQkqIGV4dC92cDgvcGx1Z2luLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDAxLzEzNF0gdnA4OiBBZGQgZW5jb2Rlci9kZWNvZGVyCi0KLTIwMTItMDktMTUgMjI6MTY6NTIgKzAyMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPHVyYWV1c0BsaW51eHJpc2luLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgVXBkYXRlIHNwZWMgZmlsZSB3aXRoIEYxOCBuYW1lIGNoYW5nZSBhbmQgYWRkIGRlaW50ZXJsYWNlcgotCi0yMDEyLTA5LTE1IDE5OjA2OjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYzoKLQkgIHVzZSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSB0byByZXBsYWNlIG9ic29sZXRlIEFQSQotCi0yMDEyLTA5LTE0IDE3OjU1OjE2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgcmVwbGFjZSBfZ2V0X2NhcHNfcmVmZmVkIHdpdGggX2dldF9jYXBzCi0KLTIwMTItMDktMTQgMTc6MDg6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIHJlcGxhY2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlIHdpdGggZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhCi0KLTIwMTItMDktMTQgMTc6MDc6MjYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICByZXBsYWNlIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSB3aXRoIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YQotCi0yMDEyLTA5LTE0IDEzOjMwOjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L3J0cC9SRUFETUU6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1IMjYzcC1BVFMtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItVlRTLUgyNjNwLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1kZWNvZGViaW4tSDI2M3AtQU1SLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjNwLWFsc2FzcmMtQU1SLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjQtYWxzYXNyYy1QQ01BLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL3NoYXBld2lwZS1leGFtcGxlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy92NGwyL2NhbWN0cmwuYzoKLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1ZnNpbmstdGVzdC5jOgotCSAgZml4IG1vcmUgY2FwcwotCi0yMDEyLTA5LTE0IDAyOjU3OjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTEuOTQgPT09Ci0KLTIwMTItMDktMTQgMDI6NDg6NDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMS45NAotCi0yMDEyLTA5LTE0IDAxOjUwOjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTItMDktMTQgMDE6NDY6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSAgZG9jczogdXBkYXRlIGRvY3MKLQotMjAxMi0wOS0xNCAwMDo0NzozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOgotCSAgdGVzdHM6IHB1c2ggc3RyZWFtLXN0YXJ0IGFuZCBzZWdtZW50IGV2ZW50cyBpbiB3YXZwYWNrZW5jIHRlc3QKLQotMjAxMi0wOS0xMyAxMDo1NjoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgdjRsMjogcmVtb3ZlIHVudXNlZCBwcm9wZXJ0aWVzCi0KLTIwMTItMDktMTMgMTA6MTU6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IGRpc2FibGUgcmVjb25maWd1cmUKLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzOTAyCi0KLTIwMTItMDktMTAgMjI6MDk6NTkgLTA3MDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogRG9uJ3QgdHJlYXQgZXZlcnkgY3VzdG9tLWRvd25zdHJlYW0gZXZlbnQgYXMgRU9TCi0JICBEb24ndCBmYWxsIHRocm91Z2ggdG8gdGhlIEVPUyBoYW5kbGluZyBhZnRlciByZWNlaXZpbmcgYQotCSAgY3VzdG9tLWRvd25zdHJlYW0gZXZlbnQuCi0KLTIwMTItMDktMTIgMjE6MDU6NDQgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgY29sbGVjdHBhZHM6IHJlbW92ZSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWRfZnVsbAotCSAgUmVuYW1lIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZF9mdWxsKCkgdG8gZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkKCkgYW5kIGZpeCBhbGwKLQkgIGludm9jYXRpb25zLgotCi0yMDEyLTA5LTEyIDE3OjE0OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIHVkcDogYWRkIGluY2x1ZGUgZm9yIElQUFJPVE9fKgotCi0yMDEyLTA5LTEyIDE2OjM5OjA4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIHVkcDogcHJvcGVybHkgbWF0Y2ggYnJhY2VzIGFuZCBjcHAgZGlyZWN0aXZlcwotCSAgRml4ZXMgY29tcGlsYXRpb24gd2hlcmUgSVBWNl9UQ0xBU1Mgbm90IGRlZmluZWQuCi0KLTIwMTItMDktMTIgMTQ6NDI6MDcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgc2hhcGV3aXBlOiBVc2UgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIHdoZXJlIG5lZWRlZAotCSAgQW5kIGNsZWFuIHVwIGdldF9jYXBzIGNvZGUgd2hpbGUgSSdtIGF0IGl0Ci0KLTIwMTItMDktMTIgMTM6Mjg6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGltcHJvdmUgZnJhbWVyYXRlIHRyYW5zZm9ybQotCSAgSGFuZGxlIEdfTUFYSU5UIGluIHRoZSBmcmFtZXJhdGVzIGJldHRlci4gSWYgd2UgY2Fubm90IGRvdWJsZSBvciBkaXZpZGUgdGhlCi0JICBmcmFtZXJhdGUsIGNsYW1wIHRvIHRoZSBzbWFsbGVzdC9sYXJnZXN0IHBvc3NpYmxlIHZhbHVlIHdlIGNhbiBleHByZXNzIGluc3RlYWQKLQkgIG9mIGZhaWxpbmcuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgzODYxCi0KLTIwMTItMDktMTIgMTM6MTc6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHNtYWxsIGNsZWFudXAKLQotMjAxMi0wOS0wNyAxNzoyMDo1NyAtMDQwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmg6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjI6IEFkZGluZyBudjEyIGFuZCBudjIxIHN1cHBvcnQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM4NDEKLQotMjAxMi0wOS0xMiAxMDoxODo1MyArMDIwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHJkaW8uY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IGFkZCBzdXBwb3J0IGZvciBwcm9yZXMKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODM4MzkKLQotMjAxMi0wOS0xMiAwMDoxNjozMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSAgdGVzdHM6IGZpeCBtb3N0IG9mIHRoZSByZ2FuYWx5c2lzIHVuaXQgdGVzdHMKLQkgIEJlZm9yZSB0aGUgZWxlbWVudCB3b3VsZCBwb3N0IG1lc3NhZ2VzIG9uIHRoZSBidXMgaXRzZWxmLCBub3cKLQkgIHRoZSBzaW5rcyBkbyB0aGF0IGJhc2VkIG9uIHRoZSB0YWcgZXZlbnRzIHRoZXkgcmVjZWl2ZS4gQnV0Ci0JICBzaW5jZSB3ZSBkb24ndCBoYXZlIHByb3BlciBzaW5rIGVsZW1lbnRzIGluIHRoZXNlIHVuaXQgdGVzdHMsCi0JICBidXQganVzdCBkYW5nbGluZyBwYWRzLCB3ZSBoYXZlIHRvIHBvc3QgdGhlIHRhZyBtZXNzYWdlcyB0aGUKLQkgIHRlc3QgY2hlY2tzIGZvciBvdXJzZWx2ZXMuCi0JICBEb3duIGZyb20gNTIvNTUgZmFpbGluZyB0byA3LzUyIGZhaWxpbmcuCi0KLTIwMTItMDktMTEgMTc6MzY6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgZXh0LCBnc3Q6IG9ubHkgYWN0aXZhdGUgaW4gcHVsbCBtb2RlIGlmIHVwc3RyZWFtIGlzIHNlZWthYmxlCi0KLTIwMTItMDktMTEgMTU6Mzg6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDI6IGRpc2FibGUgcmVuZWdvdGlhdGlvbgotCSAgV2UgY2FuJ3QgeWV0IHdhaXQgZm9yIHRoZSBidWZmZXJwb29sIHRvIERSQUlOIGJlZm9yZSBzdGFydGluZyByZW5lZ290aWF0aW9uIHNvCi0JICBkaXNhYmxlIGl0IGZvciBub3cuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgyNzcwCi0KLTIwMTItMDktMTEgMTI6NDg6MzkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkgIHRlc3RzOiBydHBiaW46IHBvcnQgdG8gdGhlIG5ldyBHTGliIHRocmVhZCBBUEkKLQotMjAxMi0wOS0xMSAxMjozNjo1NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuaDoKLQkgIGRpcmVjdHNvdW5kc2luazogcG9ydCB0byB0aGUgbmV3IEdMaWIgdGhyZWFkIEFQSQotCi0yMDEyLTA5LTExIDExOjU5OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGRvbid0IHJlc2V0IHNlZ21lbnQKLQkgIERvbid0IHJlc2V0IHRoZSBzZWdtZW50IGJlY2F1c2Ugd2UgbmVlZCB0aGUgdmFsdWVzIGZvciBhY2N1bXVsYXRpb24uIHRoZSBzZWdtZW50Ci0JICBpcyByZXNldCBhdCBzdGFydCBhbmQgYWZ0ZXIgYSBmbHVzaGluZyBzZWVrLiBGaXhlcyBzb21lIHByb2JsZW1zIHdpdGggZmlsZXMgd2l0aAotCSAgcXVpY2t0aW1lIHNlZ21lbnRzLgotCi0yMDEyLTA5LTEwIDE3OjE0OjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jOgotCSAgdGVzdHM6IGZpeCBpZDNkZW11eCB0ZXN0Ci0KLTIwMTItMDktMTAgMTQ6MzE6MDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2FtZmRlZnMuaDoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JICBnc3Q6IGFkanVzdCBjb21tZW50IHN0eWxlCi0KLTIwMTItMDktMTAgMTQ6MzA6NDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcmVtb3ZlIGRlZnVuY3QgY29tbWVudGVkIGNvZGUKLQotMjAxMi0wOS0xMCAxMzozNToxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogY29uc2lkZXIgc3RyZWFtIGFsaXZlIHdoZW4gbm90IGNvbm5lY3RlZCB5ZXQKLQkgIFdoZW4gd2Ugc3RhcnQgYW5kIHJlbmVnb3RpYXRlLCB0aGVyZSBpcyBhIG1vbWVudCB3aGVyZSB0aGUgc3RyZWFtIGlzIGNyZWF0ZWQgYnV0Ci0JICBub3QgeWV0IGNvbm5lY3RlZC4gTWFrZSBzdXJlIGFsbCBmdW5jdGlvbnMgZGVhbCB3aXRoIHRoaXMgc2l0dWF0aW9uIGNvcnJlY3RseQotCSAgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMjQ3Ci0KLTIwMTItMDktMTAgMTI6MTU6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IGRvbid0IGZhaWwgd2hlbiBub3QgbmVnb3RpYXRlZCB5ZXQKLQkgIFdoZW4gZ2V0X3RpbWUgaXMgY2FsbGVkIGJ1dCB3ZSBhcmUgbm90IHlldCBuZWdvdGlhdGVkLCByZXR1cm4gMCBpbnN0ZWFkIG9mCi0JICBwb3N0aW5nIGFuIGVycm9yLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGJhc2UgY2xhc3MgaXMgc3RpbGwgbmVnb3RpYXRpbmcgd2hlbgotCSAgb3VyIGdldF90aW1lIGlzIGNhbGxlZC4KLQotMjAxMi0wOS0xMCAxMTozMjoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zczQvb3NzNC1zb3VyY2UuYzoKLQkgIHVwZGF0ZSBmb3IgYXVkaW8gYmFzZSBzcmMgYXBpIGNoYW5nZQotCi0yMDEyLTA5LTEwIDAwOjQyOjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICB2aWRlby94LTNpdnggYW5kIHZpZGVvL3gteHZpZCAtPiB2aWRlby9tcGVnLG1wZWd2ZXJzaW9uPTQKLQkgIElmIGl0IGV2ZXIgdHVybnMgb3V0IHRoYXQgd2UgcmVhbGx5IG11c3QgdXNlIHRob2Ugc3BlY2lmaWMKLQkgIGZvdXJjY3MgYW5kIG5vdCB0aGUgZ2VuZXJpYyBvbmUsIHdlIGNhbiBzdGlsbCBhZGQgYSBmbGF2b3IKLQkgIGZpZWxkIHRvIHRoZSBjYXBzIGxhdGVyLgotCi0yMDEyLTA5LTA3IDE2OjE1OjQyICswMjAwICBEYW5pZWxhIDxkYW5pZWxhLm11enp1QHNlbGV4ZWxzYWcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhdm9pZCBsZWFrCi0JICBXaGVuIHNldHVwIGZhaWxzLCBtYWtlIHN1cmUgdG8gY2xlYW51cCBhZnRlcndhcmRzLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MzUwOQotCi0yMDEyLTA5LTA3IDE1OjIzOjQ0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSAgcnRwYW1yZGVwYXk6IHVubWFwIHJ0cCBidWZmZXIKLQkgIC4uLiB0aGVyZWJ5IHBsdWdnaW5nIGEgbWVtbGVhay4KLQotMjAxMi0wOS0wNyAxNDoxMzoxNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICB0ZXN0czogcnRwLXBheWxvYWRpbmc6IGFkanVzdCB0byBtb2RpZmllZCBidWZmZXJsaXN0IHNlbWFudGljcwotCSAgLi4uIG5vdyBpbXBsZW1lbnRlZCBieSBidWZmZXIgbWVtb3J5IGJsb2Nrcy4KLQotMjAxMi0wOS0wNyAxNDoxMTozOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogYXZvaWQgY3Jhc2hpbmcgb24gTlVMTCBhY2Nlc3MgaW4gZGVidWcgbWVzc2FnZQotCi0yMDEyLTA5LTA3IDE0OjExOjAyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSAgcnRwaDI2M3BwYXk6IHBsdWcgY2FwcyBsZWFrCi0KLTIwMTItMDktMDYgMTc6MDk6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHJlbW92ZSByZWR1bmRhbnQgX3NldF9hbGxvY2F0aW9uIGNhbGwKLQotMjAxMi0wOS0wNiAxNzowNTowMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICB0ZXN0czogZGVpbnRlcmxhY2U6IGRvIG5vdCBsZWFrIGRlaW50ZXJsYWNlIHBhZHMKLQotMjAxMi0wOS0wNiAxNzowNDozOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHBsdWcgc29tZSBsZWFrcwotCi0yMDEyLTA5LTA2IDE2OjQ5OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiByZXVzZSBjb3JlIGZ1bmN0aW9uIGZvciBHQ0QKLQotMjAxMi0wOS0wNiAxNjozMTowMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHN1cHBvcnQgZmlsdGVyIGluIGdldGNhcHMKLQotMjAxMi0wOS0wNiAxNjozMDo0NCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGRvIG5vdCBsZWFrIGdldGNhcHMgcmVzdWx0Ci0KLTIwMTItMDktMDYgMTY6MjM6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JICBkZWludGVybGFjZTogYWRkIHN1cHBvcnQgZm9yIGJ1ZmZlcnBvb2wKLQkgIEFkZCBidWZmZXJwb29sIHN1cHBvcnQgdG8gYXZvaWQgYSBtZW1jcHkgaW4gdGhlIHZpZGVvc2luayB3aGVuIGFjdGl2ZWx5Ci0JICBpbnRlcmxhY2luZy4KLQkgIFJlbW92ZSBzb21lIGNvbW1lbnRlZCBvYnNvbGV0ZSBjb2RlLgotCi0yMDEyLTA5LTA2IDEzOjM4OjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBwcm94eSBhbGxvY2F0aW9uIHF1ZXJ5IGluIHBhc3N0aHJvdWdoCi0JICBXZSBjYW4gbGV0IHRoZSBhbGxvY2F0aW9uIHF1ZXJ5IHBhc3Mgd2hlbiB3ZSBhcmUgb3BlcmF0aW5nIGluIHBhc3N0aHJvdWdoIG1vZGUuCi0KLTIwMTItMDktMDYgMTM6MjM6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHVzZSBkZWZhdWx0IGV2ZW50IGZ1bmN0aW9ucwotCSAgaW5zdGVhZCBvZiBibGluZGx5IGZvcndhcmRpbmcgdW5rbm93biBldmVudHMuCi0KLTIwMTItMDktMDYgMTM6MjM6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHNtYWxsIGNsZWFudXBzCi0KLTIwMTItMDktMDYgMTI6NTY6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IGNhbGwgZGVmYXVsdCBxdWVyeSBoYW5kbGVycwotCSAgQ2FsbCB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIGluc3RlYWQgb2YgZm9yd2FyZGluZyB0aGUgcXVlcnkgYmxpbmRseS4gRml4ZXMKLQkgIGlzc3VlcyBvZiBzdHJpZGVzIGJlY2F1c2Ugb2YgcHJveHlpbmcgdGhlIGFsbG9jYXRpb24gcXVlcnkgd3JvbmdseS4KLQotMjAxMi0wOS0wNiAxMDo0MjoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogcmVtb3ZlIHVudXNlZCBjb2RlLgotCi0yMDEyLTA5LTA2IDEwOjQyOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZTogaW1wcm92ZSBkZWJ1ZwotCi0yMDEyLTA5LTA1IDExOjUwOjA1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IHJlbW92ZSBvYnNvbGV0ZSB1cGRhdGUgbmV3c2VnbWVudCBoYW5kbGluZyBjb2RlCi0KLTIwMTItMDktMDQgMTI6MzU6NTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogYXZvaWQgZGVhZGxvY2sKLQkgIF91cGRhdGVfcHJvcGVydGllcyB0YWtlcyB0aGUgb2JqZWN0IGxvY2sgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gdGhlCi0JICBvYmplY3QgbG9jayBpcyBhbHJlYWR5IHRha2VuLgotCi0yMDEyLTA5LTAzIDEyOjQ2OjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZXh0cmFjdCBpbnRlcmxhY2VkLW5lc3Mgb2YgdmlkZW8gdHJhY2sgZnJvbSBpbnRlcmxhY2UtbW9kZSBmaWVsZAotCSAgaW5zdGVhZCBvZiB0aGUgb2xkIGJvb2xlYW4gImludGVybGFjZWQiIGZpZWxkLgotCi0yMDEyLTA5LTAzIDAyOjUxOjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aW11eC5jOgotCSAgdmlkZW8veC14dmlkIC0+IHZpZGVvL21wZWcsbXBlZ3ZlcnNpb249NAotCi0yMDEyLTA5LTAyIDAyOjUwOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgdGV4dC9wbGFpbiArIHRleHQveC1wYW5nby1tYXJrdXAgLT4gdGV4dC94LXJhdwotCi0yMDEyLTA5LTAyIDAxOjMxOjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24gLT4gZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQKLQotMjAxMi0wOC0zMCAyMjowNzoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgc2Vzc2lvbjogYWxzbyBzdG9wIHByb2JhdGF0aW9uIG9uIGV4aXN0aW5nIHNvdXJjZXMKLQkgIFJlY2VpdmluZyBhbiBSVENQIHBhY2tldCBzaG91bGQgYWxzbyBzdG9wIHByb2JhdGlvbiBvbiBzb3VyY2VzIHdlIGhhdmUgc2VlbgotCSAgYmVmb3JlLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzA2NQotCi0yMDEyLTA4LTIyIDE2OjM2OjIxIC0wNzAwICBBbGVpeCBDb25jaGlsbG8gRmxhcXVlIDxhbGVpeEBvYmxvbmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRwOiBtYWtlIHJ0cCBwYWNrZXQgcHJvYmF0aW9uIGNvbmZpZ3VyYWJsZSAoYnVnICM2ODI1MTIpCi0KLTIwMTItMDgtMzAgMTI6MjE6MDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JICBnZGtwaXhidWY6IGFkanVzdCB0byBtb2RpZmllZCB2aWRlbyBvdmVybGF5IGNvbXBvc2l0aW9uIEFQSQotCi0yMDEyLTA4LTMwIDExOjMwOjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZml4dXAgMC4xMSBwb3J0IG9mIHN1c3BlY3QgZnJhbWUgY2hlY2tpbmcKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODI5NTkKLQotMjAxMi0wOC0yOCAxODo1NjoxOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBhdm9pZCBpbnZhbGlkIEgyNjQgYnl0ZXN0cmVhbSBjb2RlY19kYXRhCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMzY5Ci0KLTIwMTItMDgtMjggMTk6MDA6NDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHBvcnQgc2VnbWVudCBldmVudCBjcmVhdGlvbiB0byAwLjExCi0KLTIwMTItMDgtMjggMTY6Mjg6MTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHJlbGVhc2UgZXh0cmEgZXZlbnQgcmVmIHdoZW4gcmVwbGFjaW5nIHBlbmRpbmcgbmV3c2VnbWVudCBldmVudAotCi0yMDEyLTA3LTAzIDE3OjUwOjI0ICswMjAwICBEYXZpZCBDb3J2b3lzaWVyIDxkYXZpZC5jb3J2b3lzaWVyQG9yYW5nZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIGlzb21wNDogYWRkIERBU0ggdGZkdCBib3ggc3VwcG9ydAotCSAgTVBFRyBEQVNIIGhhcyBkZWZpbmVkIGEgc2V0IG9mIG5ldyBib3hlcyB0byBzcGVjaWZ5IGR1cmF0aW9uLCBpbmRleGVzIGFuZAotCSAgb2Zmc2V0cyBvZiBJU09CTUZGIGZyYWdtZW50cy4KLQkgIFRoZSBUcmFjayBGcmFnbWVudCBCYXNlIE1lZGlhIERlY29kZSBUaW1lICh0ZmR0KSBCb3ggY2FuIGluIHBhcnRpY3VsYXIgYmUKLQkgIGluY2x1ZGVkIGluc2lkZSBhIHRyYWYgYm94IHRvIHNwZWNpZnkgdGhlIGFic29sdXRlIGRlY29kZSB0aW1lLCBtZWFzdXJlZCBvbiB0aGUKLQkgIG1lZGlhIHRpbWVsaW5lLCBvZiB0aGUgZmlyc3Qgc2FtcGxlIGluIGRlY29kZSBvcmRlciBpbiB0aGUgdHJhY2sgZnJhZ21lbnQuCi0JICBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBpc29tcDQgZGVtdXggdG8gZmluZCBvdXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YKLQkgIGFuIE1QNCBmcmFnbWVudCBpbiB0aGUgdGltZWxpbmUuCi0JICBUaGlzIHBhdGNoIGFkZHMgY29kZSB0byBpc29tcDQgdG86Ci0JICAtIHBhcnNlIHRoZSB0ZmR0IGJveAotCSAgLSBhZGp1c3QgdGhlIHRpbWUvcG9zaXRpb24gbWVtYmVyIG9mIHRoZSBuZXcgc2VnbWVudCBzZW50IHdoZW4gcGxheWJhY2sgc3RhcnRzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NTM1Ci0KLTIwMTItMDgtMjYgMjI6Mzk6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5jOgotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBleHQvdGFnbGliL2dzdGFwZXYybXV4LmNjOgotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGViYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RvcC5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJhZGlvYWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzdHJlYWsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzoKLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzoKLQkqIGdzdC9ydHAvUkVBRE1FOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNvdXJjZS5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9jYWlyby9jYWlyb19vdmVybGF5LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLUFNUi5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3AtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3Auc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItVlRTLUgyNjNwLUFUUy1QQ01BLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1WVFMtSDI2M3Auc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWFsc2FzcmMtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItZGVjb2RlYmluLUgyNjNwLUFNUi5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmc2luay10ZXN0LmM6Ci0JKiB0ZXN0cy9pY2xlcy92aWRlb2Nyb3AtdGVzdC5jOgotCSAgZG9jczogZ3N0LWxhdW5jaCAtPiBnc3QtbGF1bmNoLTEuMCBhbmQgZmZtcGVnY29sb3JzcGFjZSAtPiB2aWRlb2NvbnZlcnQKLQotMjAxMi0wOC0yNiAyMjozMjo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIGRvY3M6IGdzdC1sYXVuY2gtMC4xMSAtPiBnc3QtbGF1bmNoLTEuMAotCi0yMDEyLTA4LTI2IDIyOjA4OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogdGhlIGZpZWxkIGluIGNhcHMgaXMgImludGVybGFjZS1tb2RlIiBub3QgImludGVybGFjZS1tZXRob2QiCi0JICBGaXggZGVpbnRlcmxhY2UgdW5pdCB0ZXN0LiBOZWVkIHRvIHNldCByaWdodCBmaWVsZCBvbiBvdXRwdXQgY2Fwcy4KLQkgIEFsc28gcmVtb3ZlIHJpZ2h0IGZpZWxkIChub3Qgb2xkIDAuMTAgImludGVybGFjZWQiIGJvb2xlYW4gZmllbGQpCi0JICBmcm9tIGNhcHMgaW4gdW5pdCB0ZXN0IGJlZm9yZSBjb21wYXJpbmcgb2xkIGFuZCBuZXcuCi0KLTIwMTItMDgtMjYgMjE6NDU6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ljeWRlbXV4LmM6Ci0JICB0ZXN0czogZml4IGljeWRlbXV4IHVuaXQgdGVzdAotCSAgV2FzIHdhaXRpbmcgZm9yIGEgdGFnIG1lc3NhZ2Ugb24gdGhlIGJ1cywgd2hpY2ggd291bGQgbmV2ZXIKLQkgIGNvbWUsIGJlY2F1c2UgZWxlbWVudHMgZG9uJ3QgcG9zdCB0aG9zZSB0aGVtc2VsdmVzIGFueSBtb3JlCi0JICBidXQgbGV0IHNpbmtzIHBvc3QgdGhlbSBmcm9tIHRhZyBldmVudHMuIE9ubHkgdGhhdCB0aGVyZSBhcmUKLQkgIG5vIHNpbmtzIGluIHRoaXMgdW5pdCB0ZXN0LgotCi0yMDEyLTA4LTI2IDIxOjI3OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzoKLQkgIHRlc3RzOiBmaXggdmlkZW9jcm9wIGNyb3BfdG9fMXgxIHVuaXQgdGVzdCBmb3IgR1JBWTggZm9ybWF0Ci0JICBVcGRhdGUgdGFibGUgd2l0aCBwaXhlbCB2YWx1ZXMgd2l0aCB0aGUgdmFsdWUgYWN0dWFsbHkgcHJvZHVjZWQKLQkgIGJ5IHZpZGVvdGVzdHNyYy4KLQotMjAxMi0wOC0yNyAwOTowMDo0NSArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBPbmx5IHByaW50IGNhcHMgaWYgdGhleSdyZSBwcm92aWRlZAotCi0yMDEyLTA4LTI0IDE5OjQzOjA4ICswMTAwICBNaWNoYWVsIFJ1Ymluc3RlaW4gPG1ydWJpbnN0ZWluQHJhaS1kZXYuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSAgdmlkZW9taXhlcjogZml4IGVuZGlhbm5lc3MgY2hlY2sgb24gc3lzdGVtcyB3aGVyZSBub24tZ2xpYiBlbmRpYW5uZXNzIGRlZmluZXMgYXJlIG5vdCBzZXQKLQkgIE9uIFdpbmRvd3MgTElUVExFX0VORElBTiB3aXRob3V0IHRoZSBHXyBpbiB3YXMgbm90IGRlZmluZWQsICBzbyB0aGUKLQkgIHRlc3QgY29tZXMgb3V0IHdyb25nLgotCi0yMDEyLTA4LTIyIDE3OjIzOjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgdWRwc2luazogZG9uJ3QgY3Jhc2ggb24gTlVMTCBlcnJvcgotCSAgQ2hlY2sgaWYgdGhlcmUgaXMgYW4gZXJyb3IgYmVmb3JlIHJldHJpZXZpbmcgaXRzIG1lc3NhZ2UuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MjQ4MQotCi0yMDEyLTA4LTIyIDEzOjMwOjE5ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNjY4YWNlZSB0byA0Zjk2MmY3Ci0KLTIwMTItMDgtMjIgMTM6MTg6MDAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYnVtcCBndGstZG9jIHJlcSB0byAxLjEyIChtYXItMjAwOSkKLQkgIFRoaXMgYWxsb3dzIHVzIHRvIGUuZy4gdW5jb25kaXRpb25hbGx5IHVzZSBndGtkb2MtcmViYXNlLgotCi0yMDEyLTA4LTIyIDExOjIxOjM4ICswMjAwICBNYXJ0aW4gRXJ0c2FhcyA8bWVydHNhc0BjaXNjby5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogTWFrZSBvc3h2aWRlb3NpbmsgdXNlIHRoZSBub24tZGVwcmVjYXRlZCB0aHJlYWRpbmcgYXBpIGZyb20gZ2xpYi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODI0NDYKLQotMjAxMi0wOC0xNCAxNTo0MDozMSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IEhhbmRsZSBuZWdvdGlhdGlvbiBldmVudHMKLQkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlOgotCSAgYSkgRGVzdHJveSBhbiBleGlzdGluZyBzdHJlYW0gaWYgYSBuZWdvdGlhdGUoKSByZXF1ZXN0IGNvbWVzIGluOiB0aGlzIGlzCi0JICByZXF1aXJlZCB3aGVuIHJlY2VpdmluZyBhIGRvd25zdHJlYW0gcmVuZWdvdGlhdGlvbiByZXF1ZXN0IGFmdGVyIGEKLQkgIHN0cmVhbSBoYXMgYmVlbiBjcmVhdGVkLgotCSAgYikgQ3JlYXRlIGEgbmV3IHN0cmVhbSBvbiBwcmVwYXJlKCk6IHRoaXMgaXMgcmVxdWlyZWQgc2luY2Ugd2UgZG8gYQotCSAgc2V0Y2FwcygpIGluIG5lZ290aWF0ZSgpLCB3aGljaCBjYXVzZXMgdGhlIHN0cmVhbSB0byBiZSBkcm9wcGVkIGJ5IGEKLQkgIHJpbmdidWZmZXIgcmVsZWFzZSgpIGNhbGwgKHRoaXMgZG9lcyBub3QgaGFwcGVuIGR1cmluZyBmaXJzdCBuZWdvdGlhdGlvbgotCSAgc2luY2UgdGhlIHJlbGVhc2UgaXMgb25seSBkb25lIG9uIGEgcnVubmluZyByaW5nYnVmZmVyKS4gVGhlIHN1YnNlcXVlbnQKLQkgIGNhbGwgdG8gcmluZ2J1ZmZlciBhY3F1aXJlKCkgZmFpbHMgYmVjYXVzZSB0aGUgc3RyZWFtIHdhcyBsb3N0IG9uCi0JICByZWxlYXNlKCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxMjQ3Ci0KLTIwMTItMDgtMTQgMTU6Mzg6MjcgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZTogQ2xlYXIgdW5wb3NpdGlvbmVkIGZsYWcgd2hlbiBzZXR0aW5nIHBvc2l0aW9ucwotCSAgSWYgY29udmVydGluZyBhIFBBIGNoYW5uZWwgbWFwIHRvIGdzdCBjaGFubmVsIHBvc2l0aW9ucyByZXN1bHRzIGluIGEKLQkgIHZhbGlkIHNldCBvZiBjaGFubmVsIHBvc2l0aW9ucywgd2UgY2xlYXIgdGhlIHVucG9zaXRpb25lZCBmbGFnIGZyb20gdGhlCi0JICByaW5nYnVmZmVyIHNwZWMuCi0KLTIwMTItMDgtMTQgMDk6Mzc6NDUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBSZW1vdmUgcmVkdW5kYW50IGNoYW5uZWwtbWFzayBzZXR0aW5nIGZvciBzdGVyZW8gY2FzZQotCSAgVGhlIGdzdGF1ZGlvIGhlbHBlciBsaWJyYXJpZXMgYWxyZWFkeSB0YWtlIGNhcmUgb2YgdGhpcyBjYXNlIGZvciB1cy4KLQotMjAxMi0wOC0xNCAwOTozNjozMCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IERvbid0IHVzZSBtZW1zZXQgdG8gc2V0IGludmFsaWQgY2hhbm5lbCBwb3NpdGlvbnMKLQkgIFRoaXMgaXRlcmVhdGVzIG92ZXIgdGhlIEdzdEF1ZGlvSW5mbyB0byBzZXQgaW52YWxpZCBjaGFubmVsIHBvc2l0aW9ucwotCSAgcmF0aGVyIHRoYW4gdXNlIG1lbXNldCgpIHdoaWNoIHdvcmtzIHJpZ2h0IG5vdyBiZWNhdXNlIGl0IGFzc3VtZXMgdGhhdAotCSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fSU5WQUxJRCBpcyAtMS4KLQotMjAxMi0wOC0yMiAxMDozMDowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmc2luay5jOgotCSAgZ2RrcGl4YnVmc2luazogbWlub3IgZG9jcyBpbXByb3ZlbWVudAotCi0yMDEyLTA4LTIyIDEwOjIzOjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbToKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnBsdWdpbi5jOgotCSAgZ2RrcGl4YnVmOiByZS1lbmFibGUgYWxyZWFkeS1wb3J0ZWQgZ2RrcGl4YnVmc2luawotCi0yMDEyLTA4LTIyIDEwOjA4OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbToKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuaDoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnBsdWdpbi5jOgotCSAgZ2RrcGl4YnVmOiBwb3J0IGdka3BpeGJ1Zm92ZXJsYXkgZWxlbWVudCB0byAwLjExCi0KLTIwMTItMDgtMjIgMDA6MDA6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9nZGtfcGl4YnVmL01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuaDoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnBsdWdpbi5jOgotCSAgZ2RrcGl4YnVmOiByZS1lbmFibGUgYWxyZWFkeS1wb3J0ZWQgZ2RrcGl4YnVmIGVsZW1lbnQgYXMgZ2RrcGl4YnVmZGVjCi0JICBOb3Qgc3VyZSB3aHkgaXQgYXMgZGlzYWJsZWQgZXhhY3RseSBnaXZlbiB0aGF0IGl0IGhhZCBhbHJlYWR5Ci0JICBiZWVuIHBvcnRlZCAodGhvdWdoIHdpdGhvdXQgbWV0YXMgb3IgYmFzZWNsYXNzKS4KLQkgIE1vdmUgcGx1Z2luX2luaXQgYml0cyBpbnRvIHNlcGFyYXRlIHNvdXJjZSBmaWxlLCBhbmQgcmVuYW1lCi0JICBkZWNvZGVyIGVsZW1lbnQgdG8gZ2RrcGl4YnVmZGVjLgotCi0yMDEyLTA4LTIxIDIzOjI1OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RfbG9hZGVyLmM6Ci0JICBnZGtwaXhidWY6IHJlbW92ZSBvbGQgYW5kIHVudXNlZCBnc3RfbG9hZGVyIHNvdXJjZSBmaWxlCi0JICBPbmNlIHVwb24gYSB0aW1lIHVzZWQgdG8gbG9hZCBHU3RyZWFtZXIgdmlkcyB2aWEgR2RrUGl4YnVmIEFQSS4KLQotMjAxMi0wOC0xNiAxNjo1MToxNiAtMDcwMCAgQWxlaXggQ29uY2hpbGxvIEZsYXF1ZSA8YWxlaXhAb2Jsb25nLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IG1ha2Ugaml0dGVyYnVmZmVyIGRyb3Atb24tbGF0ZW5jeSBhdmFpbGFibGUgKGZpeCAjNjgyMDU1KQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oCi0KLTIwMTItMDgtMjEgMTk6NDc6NDUgKzA4MDAgIEh1YWNhaSBDaGVuIDxjaGVuaGNAbGVtb3RlLmNvbT4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogbWFrZSBnc3RfdjRsMl9maWxsX2xpc3RzKCkgYWRhcHQgdG8ga2VybmVsIDMuMysKLQkgIFdoZW4gZG8gdjRsMl9pb2N0bCgpIHdpdGggVklESU9DX0VOVU1JTlBVVCBmYWlscyBvbiBzb21lIGRldmljZXMsCi0JICBrZXJuZWxzIGJlZm9yZSAzLjMuMCByZXR1cm4gRUlOVkFMLCBidXQgbmV3ZXIga2VybmVscyByZXR1cm4gRU5PVFRZLgotCSAgVGhpcyBwYXRjaCBtYWtlIHRob3NlIGRldmljZXMgd29yayB3ZWxsIG9uIGtlcm5lbCAzLjMrLgotCSAgUmVsYXRlZCBrZXJuZWwgY29tbWl0OgotCSAgaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0O2E9Y29tbWl0O2g9MDdkMTA2ZDBhMzNkNjA2M2QyMDYxMzA1OTAzZGViMDI0ODllYmEyMAotCSAgU2lnbmVkLW9mZi1ieTogSHVhY2FpIENoZW4gPGNoZW5oY0BsZW1vdGUuY29tPgotCSAgU2lnbmVkLW9mZi1ieTogUnVpIFdhbmcgPHdhbmdyQGxlbW90ZS5jb20+Ci0JICBTaWduZWQtb2ZmLWJ5OiBKaWUgQ2hlbiA8Y2hlbmpAbGVtb3RlLmNvbT4KLQotMjAxMi0wOC0yMCAyMzozMDozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICB2aWRlby94LWR2ZC1zdWJwaWN0dXJlIC0+IHN1YnBpY3R1cmUveC1kdmQKLQotMjAxMi0wOC0xNyAyMDo1Mjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkgIG11bHRpZmlsZXNyYzogZml4IGV4YW1wbGUgcGlwZWxpbmUgaW4gZG9jcwotCi0yMDEyLTA4LTE3IDE0OjU5OjU3ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZXF1YWxpemVyLmM6Ci0JICBlcXVhbGl6ZXI6IGVuYWJsZSBwcmVzZXRzIGZvciB0aGUgbi1iYW5kIGVxdWFsaXplcgotCSAgQWRkIGEgdGVzdCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHByZXNldC4KLQotMjAxMi0wOC0xNCAwMToyMDoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IG5vdC1uZWdvdGlhdGVkIGVycm9ycyBvbiB2YXJpYWJsZSBvciBtaXNzaW5nIGZyYW1lcmF0ZSBpbiBpbnB1dCBjYXBzCi0JICBSZW1vdmUgc29tZSBib2d1cyBjb2RlIEkgYWRkZWQgZHVyaW5nIHBvcnRpbmcgdGhhdCB3b3VsZCBlcnJvciBvdXQKLQkgIG9uIG1pc3Npbmcgb3IgdmFyaWFibGUgZnJhbWVyYXRlcyBpbiBpbnB1dCBjYXBzLiBIYW5kbGUgdGhpcyBsaWtlCi0JICB3ZSBkbyBpbiAwLjEwCi0JICBGaXhlcyB0ZXN0X21vZGVfZGlzYWJsZWRfcGFzc3Rocm91Z2ggdW5pdCB0ZXN0IGNoZWNrLgotCi0yMDEyLTA4LTEyIDEzOjE2OjMyICswMjAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JICBsYXc6IEZpbHRlciBsYXlvdXQgY2FwcyBmaWVsZAotCSAgVGhlIGxheW91dCBjYXBzIGZpZWxkIHNob3VsZG4ndCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgc2luayBwYWQKLQkgIG9mIHttdSxhfWxhd2RlYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODE2NzcKLQotMjAxMi0wOC0wOSAxOTo0MTozNCArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBhbGxvdyBhIFRPQyB3aXRoIHNpbmdsZSBhbHRlcm5hdGl2ZSB0b3AtbGV2ZWwgZW50cnkKLQkgIEFsbG93IGEgVE9DIHRoYXQgaGFzIGEgc2luZ2xlIGFsdGVybmF0aXZlIHRvcC1sZXZlbCBlbnRyeQotCSAgd2l0aCBtdWx0aXBsZSBzZXF1ZW5jZSBzdWItZW50cmllcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDg5MQotCi0yMDEyLTA4LTA5IDEwOjMxOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBBbmQgZml4IHRoZSBHVEsgY2hlY2sgdG8gdXNlIHRoZSBjb3JyZWN0IHBrZy1jb25maWcgcGFja2FnZSBuYW1lCi0KLTIwMTItMDgtMDkgMTA6MjU6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEZpeCBHVEsgcmVxdWlyZWQgdmVyc2lvbiB2YXJpYWJsZSBuYW1lCi0KLTIwMTItMDgtMDkgMDg6MzU6MjMgKzAxMDAgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogZml4IGJ1aWxkIHdpdGggcmVjZW50IGtlcm5lbHMsIHRoZSB2NGwyX2J1ZmZlciBpbnB1dCBmaWVsZCB3YXMgcmVtb3ZlZAotCSAgVGhpcyB3YXMgdW51c2VkIGFwcGFyZW50bHkgYW5kIHJlbW92ZWQgaW4gdGhlIGtlcm5lbCBpbiBjb21taXQ6Ci0JICBGcm9tIDJiNzE5ZDdiYWY0OTBlMjRjZTdkODE3YzYzMzdiN2M4N2ZkYTg0YzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi0JICBGcm9tOiBTYWthcmkgQWlsdXMgPHNha2FyaS5haWx1c0Bpa2kuZmk+Ci0JICBEYXRlOiBXZWQsIDIgTWF5IDIwMTIgMDk6NDA6MDMgLTAzMDAKLQkgIFN1YmplY3Q6IFtQQVRDSF0gW21lZGlhXSB2NGw6IGRyb3AgdjRsMl9idWZmZXIuaW5wdXQgYW5kIFY0TDJfQlVGX0ZMQUdfSU5QVVQKLQkgIFJlbW92ZSBpbnB1dCBmaWVsZCBpbiBzdHJ1Y3QgdjRsMl9idWZmZXIgYW5kIGZsYWcgVjRMMl9CVUZfRkxBR19JTlBVVCB3aGljaAotCSAgdGVsbHMgdGhlIGZvcm1lciBpcyB2YWxpZC4gVGhlIGZsYWcgaXMgdXNlZCBieSBubyBkcml2ZXIgY3VycmVudGx5LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MTQ5MQotCSAgQ29uZmxpY3RzOgotCSAgc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYwotCi0yMDEyLTA4LTA4IDE3OjI1OjM2IC0wNzAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICBydHBoMjY0cGF5OiBNYWtlIGl0IGFjdHVhbGx5IHdvcmsgYWZ0ZXIgY2xlYW51cHMKLQotMjAxMi0wOC0wOCAxNzo0MDozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSAgZ3N0OiBTZXQgYWxpZ25tZW50IGF0IHRoZSBjb3JyZWN0IHBsYWNlIG9mIEdzdEFsbG9jYXRpb25QYXJhbXMKLQotMjAxMi0wOC0wOCAxNzozOTowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICBnc3Q6IFNldCBhbGlnbm1lbnQgYXQgdGhlIGNvcnJlY3QgcGxhY2Ugb2YgR3N0QWxsb2NhdGlvblBhcmFtcwotCi0yMDEyLTA4LTA4IDE2OjI1OjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjkzID09PQotCi0yMDEyLTA4LTA4IDE1OjIyOjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjExLjkzCi0KLTIwMTItMDgtMDggMTU6MTc6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIHdpbjMyL01BTklGRVNUOgotCSogd2luMzIvY29tbW9uL3R1bmVyLWVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL3R1bmVyLWVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL3R1bmVyLW1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi90dW5lci1tYXJzaGFsLmg6Ci0JICB3aW4zMjogYWRkIGdlbmVyYXRlZCB0dW5lci1tYXJzaGFsL2VudW10eXBlcyBmaWxlcyBmb3IgdjRsMnNyYyBhbmQgdXBkYXRlCi0JICBBbmQgZ3N0LWluZGVudCB0aGUgcmlnaHQgcnRwIG1hcnNoYWwgZmlsZXM7IGFkZCBtaXNzaW5nIGZpbGVzIHRvIE1BTklGRVNULgotCi0yMDEyLTA4LTA4IDE1OjEwOjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5jOgotCSAgZ3N0OiB1cGRhdGUgZGlzdGVkIG9yYyBmaWxlcwotCi0yMDEyLTA4LTA4IDExOjMxOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBTaWxlbmNlIHNvbWUgJ3ZhcmlhYmxlIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQnIGNvbXBpbGVyIHdhcm5pbmdzCi0JICBXaGVuIGNvbXBpbGluZyB3aXRoIC1ER19ESVNBQkxFX0FTU0VSVAotCi0yMDEyLTA4LTA4IDEwOjU2OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG1vb3ZyZWNvdmVyLmM6Ci0JKiB0ZXN0cy9pY2xlcy94aW1hZ2VzcmMtdGVzdC5jOgotCSAgTm8gY29kZSB3aXRoIHNpZGUtZWZmZWN0cyBpbnNpZGUgZ19hc3NlcnQoKSBwbGVhc2UKLQotMjAxMi0wOC0wNyAxMToxNDoyMSAtMDcwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogUmV0dXJuIEZMVVNISU5HIGluc3RlYWQgb2YgRVJST1Igb24gdW5sb2NrCi0JICBJZiB0aGUgYmFzZSBjbGFzcyBhc2tzIG11bHRpdWRwc2luayB0byB1bmxvY2ssIHRoZW4gaXQgc2hvdWxkIHJldHVybgotCSAgRkxVU0hJTkcsIG5vdCBFUlJPUgotCi0yMDEyLTA3LTI2IDE2OjE5OjU3ICswMzAwICBBbnRvbiBCZWxrYSA8YW50b25iZWxrYUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkgIGZsYWNlbmM6IGFkZCBUT0Mgc3VwcG9ydAotCSAgQWRkIFRPQyBhcyBlbWJlZGRlZCBjdWVzaGVldHMgaW4gZmxhYyBmaWxlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA4OQotCi0yMDEyLTA4LTA3IDEyOjEyOjA5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZ2VuZXJhdGUgZW1wdHkgdm9yYmlzY29tbWVudCBmb3IgY29tcGxldGUgc3RyZWFtaGVhZGVycyBpZiBuZWVkZWQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODEzMzUKLQotMjAxMi0wOC0wNiAxODowMjo1MCAtMDcwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IEJsb2NrIHBhZCB3aGlsZSBpdCBpcyBhbm5vdW5jZWQuCi0JICBCbG9jayB0aGUgUlRQIHBhZCBhbmQgYXNzb2NpYXRlZCBSVENQIHBhZHMgd2hpbGUgdGhleSBhcmUgYmVpbmcKLQkgIGFubm91bmNlZC4gVGhpcyBpdCB0byBwcmV2ZW50IGEgcmFjZSB3aGVyZSBvbmUgaXMgYW5ub3VuY2VkIGFuZAotCSAgYmVmb3JlIHRoZSBjYWxsYmFjayBoYXMgY29ubmVjdGVkIGl0LCB0aGUgb3RoZXIgb25lIGdldHMgYSBidWZmZXIuCi0JICBXZSBjYW4ndCB1c2UgdGhlICJwYWRsb2NrIiBvZiBzc3JjZGVtdXggYmVjYXVzZSBpdCBjYXVzZXMgZGVhZGxvY2tzLgotCi0yMDEyLTA4LTA2IDE1OjAwOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgY29tbW9uOiB1bi1kbyBhY2NpZGVudGFsIGNvbW1vbiB1cGRhdGUgcmV2ZXJ0IGluIGNvbW1pdCA3YjU5MjViNQotCi0yMDEyLTA4LTA2IDE0OjUwOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSAgcnRwbXBhcm9idXN0ZGVwYXk6IHNldCBjb3JyZWN0IGRhdGFfc2l6ZSBmb3IgZ2VuZXJhdGVkIGR1bW15IGZyYW1lCi0JICAuLi4gd2hpY2ggcHJldmVudHMgZ2V0dGluZyBzdHVjayBpbiBhIGxvb3AgaWYgc3VjaCBvbmUgaXMgbmVlZGVkLgotCi0yMDEyLTA4LTA2IDE0OjUwOjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSAgcnRwbXBhcm9idXN0ZGVwYXk6IGltcHJvdmUgYW5kIGZpeCBkZWJ1ZyBzdGF0ZW1lbnQKLQkgIC4uLiBzbyBpdCByZWFsbHkgaW5mb3JtcyBhYm91dCBuZXh0IHJhdGhlciB0aGFuIHBhc3QgZnJhbWUuCi0KLTIwMTItMDgtMDYgMTI6MzQ6NTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmM6Ci0JICBydHBtcGFyb2J1c3RkZXBheTogdXBkYXRlIGF2YWlsYWJsZSBieXRld3JpdGVyIHNwYWNlIHdoZW4gcmVwb3NpdGlvbmluZwotCSAgLi4uIGFuZCBhZGQgc29tZSBtb3JlIGFzc2VydCB0byBjYXRjaCBwb3RlbnRpYWwgc3VycHJpc2VzIGVhcmx5IG9uLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDU1OAotCi0yMDEyLTA4LTA0IDEyOjQ3OjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBnc3Q6IEFkZCBzdHJlYW0taWQgdG8gc3RyZWFtLXN0YXJ0IGV2ZW50cwotCi0yMDEyLTA4LTA0IDEyOjU0OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBDaGFpbiB1cCB0byB0aGUgcGFyZW50IGNsYXNzJyBxdWVyeSBoYW5kbGVyIGlmIG5vIHBhZCBpcyBwcm92aWRlZAotCi0yMDEyLTA4LTAyIDAxOjQ4OjI5ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGFkZCBhIGJldHRlciBkZXRlY3Rpb24gZm9yIHRoZSBtYWluIHJ1biBsb29wCi0KLTIwMTItMDctMjcgMTY6MTM6NDkgKzAyMDAgIFhhdmkgQXJ0aWdhcyA8eGFydGlnYXNAZmx1ZW5kby5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogRG8gbm90IG92ZXJ3cml0ZSB0aGUgRFMgYnVmZmVyIHdoZW4gdGVzdGluZyBmb3IgQUMzIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODA3MDYKLQkgIENvbmZsaWN0czoKLQkgIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYwotCi0yMDEyLTA4LTA1IDE2OjM5OjIzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOTRjY2Y0YyB0byA2NjhhY2VlCi0KLTIwMTItMDgtMDMgMTY6MTM6NTIgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBSZWxlYXNlIGxvY2sgYmVmb3JlIHNpZ25hbGxpbmcgbmV3IHBhZAotCSAgVGhpcyBwcmV2ZW50cyBhIGRlYWRsb2NrIHdoZXJlIHNvbWV0aGluZyB3b3VsZCB0cnkgdG8gcHVzaCBhbiBldmVudAotCSAgdGhyb3VnaCB0aGUgU1NSQyBkZW11eCBmcm9tIHRoZSBjYWxsYmFjaywgY2F1c2luZyB0aGUgcGFkcyB0byBiZSBpdGVyYXRlZAotCSAgYW5kIHRoZSBsb2NrIHRha2VuLgotCi0yMDEyLTA4LTA0IDE2OjEwOjE2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXBldjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ljeWRlbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICBnc3RfdGFnX2xpc3RfZnJlZSAtPiBnc3RfdGFnX2xpc3RfdW5yZWYKLQotMjAxMi0wOC0wMyAxNDoxMDozMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG1hbmFnZSByYWNlIGJldHdlZW4gY29ubmVjdGlvbiBjbG9zaW5nIGFuZCBmbHVzaGluZwotCSAgLi4uIHdoZXJlIHRoZSBmb3JtZXIgY2FuIGhhcHBlbiBpbiB0YXNrIHRocmVhZCBhbmQgdGhlIGxhdHRlciBpbiBtYWlubG9vcAotCSAgdXBvbiBkb3dud2FyZCBzdGF0ZSBjaGFuZ2UuCi0KLTIwMTItMDgtMDMgMTQ6MDI6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBpbXByb3ZlIGFuZCByZWxheCBhdWRpbyBmcmFtZSBwYXJzaW5nCi0JICAuLi4gc28gYXMgdG8gcHJvcGVybHkgcmVjb2duaXplIGZpcnN0IGF1ZGlvIGZyYW1lLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MTA3NwotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jCi0KLTIwMTItMDgtMDEgMTI6MTY6NDEgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGRvdWJsZSB1bnJlZiBvZiBwcml2YXRlIHRhZyBidWZmZXIKLQotMjAxMi0wNy0zMCAxNzo1NDo1MSArMDMwMCAgQW50b24gQmVsa2EgPGFudG9uYmVsa2FAZ21haWwuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBjcmVhdGUgVE9DIGFzIG5lZWRlZAotCSAgQXZvaWQgY3JlYXRpbmcgdGhlIHRvYyBpZiB0aGUgd2F2IGhhcyBubyBvciBlbXB0eSBjdWUgY2h1bmsuCi0JICBBbHNvIGEgc21hbGwgY29kZSBjbGVhbnVwLgotCi0yMDEyLTA3LTI4IDExOjI2OjAxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiB1cGRhdGUgZm9yIFRPQyBBUEkgY2hhbmdlcwotCi0yMDEyLTA3LTI4IDExOjIyOjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thOiB1cGRhdGUgZm9yIFRPQyBBUEkgY2hhbmdlcwotCi0yMDEyLTA3LTI4IDExOjIwOjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiB1cGRhdGUgZm9yIFRPQyBBUEkgY2hhbmdlcwotCi0yMDEyLTA3LTI4IDAwOjE5OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmd2b2x1bWUuYzoKLQkgIHRhZzogVXBkYXRlIGZvciB0YWdsaXN0L3RhZyBldmVudCBBUEkgY2hhbmdlcwotCi0yMDEyLTA3LTI3IDEyOjA1OjQ0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9pc29tcDQtcGx1Z2luLmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0KGRlKW11eDogcGFzcyBwcml2YXRlIGJsb2IgdGFncyBpbiBhIHNhbXBsZQotCSAgLi4uIHJhdGhlciB0aGFuIGEgYnVmZmVyLCBhbmQgdGhlIGRldGFpbGVkIGluZm8gaW4gdGhlIHNhbXBsZSBpbmZvCi0JICByYXRoZXIgdGhhbiBjYXBzLgotCi0yMDEyLTA3LTI3IDExOjMxOjEzICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICB2aWRlb2Nyb3A6IERvbid0IHJldHVybiBOVUxMIGZyb20gX3RyYW5zZm9ybV9jYXBzCi0JICBJZiBfdHJhbnNmb3JtX2NhcHMgKCkgcmV0dXJucyBOVUxMLCB0aGUgYmFzZXRyYW5zZm9ybSBfdHJhbnNmb3JtX2NhcHMKLQkgIHRyaWVzIHRvIGNhbGwgZ3N0X2NhcHNfaXNfc3Vic2V0ICgpIHdpdGggYSBOVUxMIHN1YnNldCB3aGljaCBoaXRzIGFuCi0JICBhc3NlcnRpb24uCi0KLTIwMTItMDctMjcgMTE6MjY6MTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBvYnRhaW4gaW1hZ2UgdHlwZSBmcm9tIHRoZSBzYW1wbGUgaW5mbwotCi0yMDEyLTA3LTI3IDExOjI1OjQ5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogcmVtb3ZlIGV4dHJhbmVvdXMgX3VucmVmCi0JICAuLi4gc2luY2Ugd2UgZGlkIG5vdCBvYnRhaW4gYSBidWZmZXIgcmVmIGZyb20gdGhlIEdzdFNhbXBsZS4KLQotMjAxMi0wNy0yNyAxMDoxNDoyMyArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBVcGRhdGUgdG8gdXNlIEdzdFNhbXBsZSB0YWcgc2V0dGluZyBBUEkKLQotMjAxMi0wNy0yNiAxNjozNDoyMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkgIHJ0cG1wYXJvYnVzdGRlcGF5OiBtb2RpZnkgYnVmZmVyIGRhdGEgcmF0aGVyIHRoYW4gYnVmZmVyIGl0c2VsZgotCi0yMDEyLTA3LTI2IDE2OjI4OjMzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSAgcnRwbXBhcm9idXN0ZGVwYXk6IGF2b2lkIGxlYWtpbmcgYnl0ZXdyaXRlciBpbnN0YW5jZQotCi0yMDEyLTA3LTI2IDE2OjA0OjIzICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCB0aW1lc3RhbXAgYWRqdXN0bWVudCBhbmQgY2FwcwotCi0yMDEyLTA3LTI2IDE2OjAzOjU3ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeC9zaW1wbGlmeSB0ZWxlY2luZSBzdGF0ZSBjaGVja3MKLQotMjAxMi0wNy0yNiAxMjowODo1OCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBJbXByb3ZlIGRlYnVnIG91dHB1dAotCi0yMDEyLTA3LTI2IDEyOjA4OjM2ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBsb3ctbGF0ZW5jeSBwYXR0ZXJuIGxvY2tpbmcKLQotMjAxMi0wNy0yNCAxNjoxOTo1MyArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBSRkYgc2hvdWxkIGJlIGlnbm9yZWQgaW4gZGVpbnRlcmxhY2UKLQkgIFJGRiBvbmx5IG9jY3VycyBvbiBwcm9ncmVzc2l2ZSBmcmFtZXMgaW4gdGVsZWNpbmUgc2VxdWVuY2VzLiBGb3IKLQkgIGRlaW50ZXJsYWNlLCB3ZSBkb24ndCB3YW50IHRoZXNlIHJlcGVhdGVkIGZpZWxkcyBhcyB3ZSB3aWxsIHNpbXBseSBiZQotCSAgcHVzaGluZyB0aGUgcHJvZ3Jlc3NpdmUgZnJhbWUgYW5kIHRoZW4gbW92aW5nIG9uLgotCSAgSG93ZXZlciwgd2UgbmVlZCB0byBjb25zaWRlciBSRkYgaW4gb3JkZXIgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHBhdHRlcm5zCi0JICBhbmQgYWRqdXN0IHRoZSB0aW1lc3RhbXBzLgotCi0yMDEyLTA3LTI0IDE0OjU5OjQ3ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEltcHJvdmUgcHJvY2VzcyBsb2dpYwotCSAgVGhlIGxvZ2ljIG5vdyB3b3JrcyBiZXR0ZXIgaWYgd2UgZmlsdGVyIG9ycGhhbnMsIHRoZW4gcHJvZ3Jlc3NpdmUsIHRoZW4KLQkgIHRlbGVjaW5lIGludGVybGFjZWQgZmllbGRzIHdoaWNoIG5lZWQgdG8gYmUgd292ZW4gYW5kIGZhbGwgdGhyb3VnaCB0bwotCSAgaW50ZXJsYWNlLiBUZWxlY2luZSBpbnRlcmxhY2VkIGZpZWxkcyB3aWxsIGJlIHJlZ3VsYXJseSBkZWludGVybGFjZWQgaWYKLQkgIHRoZXJlIGlzIG5vIHBhdHRlcm4gbG9jayBmb3IgdXMgdG8gYmUgc3VyZSB0aGF0IHdlIGhhdmUgYSB0ZWxlY2luZQotCSAgcGF0dGVybi4KLQkgIFRlbGVjaW5lIHNlcXVlbmNlcyB0aGF0IGFyZW4ndCAyNGZwcyBwcm9ncmVzc2l2ZSB3aXRoIFJGRiBmbGFncyBjYW4ndAotCSAgcmVhbGx5IGJlIHRlc3RlZCB1bnRpbCBmaWVsZGFuYWx5c2lzIGlzIHBvcnRlZC4KLQotMjAxMi0wNy0yNSAxNjowMjozNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IG9ubHkgc2V0IGNvbXBsZXRlIG91dHB1dCBjYXBzIG9uY2UKLQkgIC4uLiBzbyBhcyB0byBhdm9pZCBkb3duc3RyZWFtIGNvbXBsYWludHMgYWJvdXQgbWlzc2luZyBzdHJlYW1oZWFkZXJzLgotCi0yMDEyLTA3LTI1IDE1OjI5OjA0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogYWxzbyBzdXBwb3J0IFMyNF8zMiBvdXRwdXQKLQotMjAxMi0wNy0yNSAxNToyODoxNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IHBhc3MgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIGVuY29kZXIgbGliCi0KLTIwMTItMDctMjUgMTQ6NTc6MTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBhZGp1c3QgdG8gbW9kaWZpZWQgYXVkaW9lbmNvZGVyIGdldGNhcHMgaGVscGVyIEFQSQotCi0yMDEyLTA3LTI1IDEyOjUwOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwOiBnbyBhbmQgc3RheSBpbiB0aGUgbG9vcCBmdW5jdGlvbiBvbiBQTEFZCi0JICBXaGVuIHdlIGhhdmUgYSBQTEFZIHJlcXVlc3QsIGdvIGludG8gdGhlIExPT1AgZnVuY3Rpb24gbmV4dC4gV2hlbiB3ZSBhcmUKLQkgIGxvb3BpbmcsIGtlZXAgb24gbG9vcGluZyB1bnRpbCB3ZSBhcmUgdG9sZCBvdGhlcndpc2UuCi0JICBUaGlzIGZpeGVkIHJ0c3AgYW5kIFRDUCBjb25uZWN0aW9ucy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODA1NTEKLQotMjAxMi0wNy0yNSAxMjo0OTozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcDogc2V0IGNhcHMgYWZ0ZXIgYWN0aXZhdGluZyB0aGUgcGFkCi0KLTIwMTItMDctMjUgMTI6NDk6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBoMjY0ZGVwYXk6IHNtYWxsIGNsZWFudXBzCi0KLTIwMTItMDctMjUgMTA6MDg6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuYzoKLQkgIHhxdGRlcGF5OiBmaXggYnVmZmVyIHJlZmNvdW50IGVycm9yCi0JICBBZnRlciBwdXNoaW5nIHRoZSBidWZmZXIgaW50byB0aGUgYWRhcHRlciwgd2Ugc2hvdWxkIG5vdCBsZXQgdGhlIGJhc2VjbGFzcyBwdXNoCi0JICBpdCBvdXQgYW55bW9yZS4gVGhpcyBlcnJvciB3YXMgaW50cm9kdWNlZCB3aGlsZSBwb3J0aW5nIHRvIDAuMTEuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDU0MAotCi0yMDEyLTA3LTI0IDIxOjQxOjUzICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIGxldmVsOiByZW1vdmUgb2Jzb2xldGUgbGlib2lsIGNvbW1lbnQKLQotMjAxMi0wNy0yNCAyMToxMToxOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBwdXNoIG1vZGU6IGluY3JlYXNlIHNlZ21lbnQgYWNjdXJhY3kgZm9sbG93aW5nIHNlZWsKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCi0KLTIwMTItMDctMjQgMTY6NDE6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHBlcmZvcm0gcHJvcGVyIEtFWV9VTklUIHNlZWsgYWxzbyBpbiBwdXNoIG1vZGUKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCi0KLTIwMTItMDctMjQgMTk6MDQ6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBkb24ndCBjcmFzaCBkZXJlZmVyZW5jaW5nIE5VTEwgZXJyb3Igd2hlbiBsZWF2aW5nIG11bHRpY2FzdCBncm91cCBvbiBzaHV0ZG93bgotCSAgU3RyYW5nZWx5IGVub3VnaCwgaWYgd2UgZG8gcGFzcyBhbiBlcnJvciB2YXJpYWJsZSB0byBiZSBmaWxsZWQsIHdlCi0JICBubyBsb25nZXIgZ2V0IGFuIGVycm9yIG9uIGxlYXZpbmcuCi0KLTIwMTItMDctMjQgMTU6NTU6MTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcmVhcnJhbmdlIHNvbWUgY2hlY2tzIHRvIGF2b2lkIE5VTEwgdXNlCi0KLTIwMTItMDctMjQgMTU6Mzg6MjQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogdXNlIHNhbWUgZm91cmNjIHRvIGRldGVybWluZSBjYXBzIGluIGRldGVybWluaW5nIHVuY29tcHJlc3NlZC1uZXNzCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczODk4Ci0JICBDb25mbGljdHM6Ci0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmMKLQotMjAxMi0wNy0yNCAxNTozNjo1NCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIFJldmVydCAiYXZpZGVtdXg6IERvbid0IGNvbnNpZGVyIDAgZmNjX2hhbmRsZXIgYXMgdW5jb21wcmVzc2VkLiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYzZiOWY1YjI1YWI0MzU2Njk4MTZhMDcwNDliMGU1YThmMDFlMDljYS4KLQkgIGZvdXJjYyBHU1RfUklGRl9yZ2IgPSAwIHN0aWxsIGxlYWRzIHRvIHJhdyB1bmNvbXByZXNzZWQgcmdiIGNhcHMuCi0JICBTZWUgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczODk4Ci0KLTIwMTItMDctMjQgMTI6MTA6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBmaXggdXAgZXhhbXBsZSBwaXBlbGluZSBzb21lIG1vcmUKLQkgIE5vIG1vcmUgZmZtcGVnY29sb3JzcGFjZQotCi0yMDEyLTA3LTIwIDE2OjMwOjAwICswMzAwICBTcmVlcmVuaiBCYWxhY2hhbmRyYW4gPHNyZWVyZW5qLmJhbGFjaGFuZHJhbkBpbnRlbC5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IEZpeCB0aGUgZXhhbXBsZSBnc3QtbGF1bmNoIHBpcGVsaW5lLgotCi0yMDEyLTA3LTI0IDEyOjMzOjMzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBhdm9pZCBOVUxMIGFjY2VzcyB3aGVuIGNoZWNraW5nIHN1YnRpdGxlCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMzg4Ci0KLTIwMTItMDctMjQgMTI6MjI6MDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogUmVzZXQgcGFyc2VyIHdoZW4gd2UgaGF2ZSBjYXBzIHdpdGhvdXQgY29kZWNfZGF0YQotCSAgVGhpcyBlbnN1cmVzIHRoZSBkZXRlY3Rpb24gKGFuZCBwcm9wZXIgZG93bnN0cmVhbSBjYXBzIHNldHRpbmdzKSB3aWxsCi0JICBhY3R1YWxseSBoYXBwZW4gd2hlbiB3ZSBoYXZlIG5ldyBpbmNvbWluZyBjYXBzIHdpdGhvdXQgY29kZWNfZGF0YS4KLQkgIFRoaXMgd2FzIGVhc2lseSB0cmlnZ2VyZWQgYnkgc3RyZWFtcyBmcm9tIG1hdHJvc2thZGVtdXggd2hpY2ggaW5pdGlhbGx5Ci0JICBwcm92aWRlZCBjYXBzIHdpdGggYSBjb25zdHJ1Y3RlZCBjb2RlY19kYXRhLCBidXQgdGhlbiBwdXNoZWQgbmV3IGNhcHMKLQkgIHdpdGhvdXQgdGhlIGNvZGVjX2RhdGEgb25jZSBpdCBkZXRlY3RlZCB0aGUgc3RyZWFtIHdhcyBhZHRzLgotCi0yMDEyLTA3LTI0IDA5OjE3OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMub3JjOgotCSAgdmlkZW9taXhlcjogcHJlZml4IG9yYyBmdW5jdGlvbnMgd2l0aCB2aWRlb19taXhlcl9vcmNfCi0KLTIwMTItMDctMjQgMDk6MTM6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0Lmg6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMub3JjOgotCSAgdmlkZW9ib3g6IHByZWZpeCBvcmMgZnVuY3Rpb25zIHdpdGggdmlkZW9fYm94X29yY18KLQotMjAxMi0wNy0yMyAxODo1MTowMCArMDIwMCAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8dXJhZXVzQGxpbnV4cmlzaW4ub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBVcGRhdGUgc3BlYyBmaWxlIHdpdGggbGF0ZXN0IGNoYW5nZXMKLQotMjAxMi0wNy0yMyAxNzozNzo1OCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZ2VuZXJhdGUgY29ycmVjdCBzZWdtZW50IHN0cmVhbSB0aW1lCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMjc1Ci0KLTIwMTItMDctMjMgMTY6NDI6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5oOgotCSAgcnRwOiBhbHdheXMgdXNlIGJ1ZmZlciBsaXN0cwotCi0yMDEyLTA3LTIzIDE1OjI0OjE3ICswMjAwICBQYXRyaWNpYSBNdXNjYWx1IDxwYXRyaWNpYUBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkgIHJ0cG1wNHZwYXk6IGFsd2F5cyBlbmFibGUgYnVmZmVyLWxpc3RzCi0KLTIwMTItMDctMjMgMTU6MjI6MjQgKzAyMDAgIFBhdHJpY2lhIE11c2NhbHUgPHBhdHJpY2lhQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5oOgotCSAgcnRwanBlZ3BheTogYWx3YXlzIGVuYWJsZSBidWZmZXItbGlzdHMKLQotMjAxMi0wNy0yMyAxNTo0OTowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZ2V0IGZyYW1lIGZsYWdzIGNvcnJlY3RseQotCSAgQWxzbyBtb3ZlIHRoZSBkZWludGVybGFjZSBwbHVnaW4gdG8gcG9ydGVkIHN0YXR1cwotCi0yMDEyLTA3LTIzIDE1OjMzOjU0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBwcm9wZXIgcGFyc2UgcmVjb3ZlcnkgYWZ0ZXIgc2VlawotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDQyNwotCi0yMDEyLTA3LTIzIDEyOjM5OjA1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGNsZWFyIG9sZCBzZWdtZW50IGV2ZW50IHdoZW4gcmVxdWVzdGluZyBuZXcgb25lCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMjgzCi0KLTIwMTItMDctMjMgMTA6MzI6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSAgZXh0OiBVcGRhdGUgZm9yIHZpZGVvIGJhc2UgY2xhc3NlcyBBUEkgY2hhbmdlcwotCi0yMDEyLTA3LTIzIDA4OjQ5OjA3ICswMjAwICBBbGJhbiBCcm93YWV5cyA8cHJhaGFsQHlhaG9vLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogY29udmVydCBhbGwgbm9uIEdTVF9GT1JNQVRfQllURVMgdG8gZm9ybWF0IGJ5dGVzLgotCSAgQ29udmVydCBhbGwgbm9uIEdTVF9GT1JNQVRfQllURVMgdG8gZm9ybWF0IGJ5dGVzOgotCSAgZml4ZXM6Ci0JICBHU3RyZWFtZXItQ1JJVElDQUwgKio6IGdzdF9xdWVyeV9zZXRfZHVyYXRpb246IGFzc2VydGlvbiBgZm9ybWF0ID09Ci0JICBnX3ZhbHVlX2dldF9lbnVtIChnc3Rfc3RydWN0dXJlX2lkX2dldF92YWx1ZSAocywgR1NUX1FVQVJLIChGT1JNQVQpKSknCi0JICBmYWlsZWQKLQkgIHdoZW4gcGxheWluZyBtb3JlIHRoYW4gb25lIHdhdiBzdHJlYW0uCi0JICBnc3QtcGx1Z2lucy1iYXNlL3Rlc3RzL2ljbGVzL3BsYXliYWNrL3Rlc3Q3IHVyaTEud2F2IHVyaTIud2F2Ci0KLTIwMTItMDctMjMgMDk6MjU6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBEb24ndCBmYWlsIGlmIG1vcmUgZGF0YSB0aGVuIG5lZWRlZCBpcyBhdmFpbGFibGUgd2hlbiBwYXJzaW5nIGN1ZSBjaHVua3MKLQkgIEZpeGVzIGJ1ZyAjNjgwMzI4LgotCi0yMDEyLTA3LTIzIDA5OjIyOjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogU29tZSBtaW5vciBjbGVhbnVwIHRvIHRoZSBjdWUvbGFibCBwYXJzaW5nCi0KLTIwMTItMDctMjMgMDg6NDU6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOThlMzg2ZiB0byA5NGNjZjRjCi0KLTIwMTItMDctMTkgMTQ6NTU6NDUgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYzoKLQkgIGRlaW50ZXJsYWNlOiBQb3J0IHRvIDEuMAotCSAgVGhpcyByZXF1aXJlcyB0aGUgYWRkaXRpb25hbCBJTlRFUkxBQ0VEIGJ1ZmZlciBmbGFnIHJlY2VudGx5IGFkZGVkIHRvCi0JICAtYmFzZQotCi0yMDEyLTA3LTIwIDE1OjE4OjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxlYXZlOiBjb252ZXJ0IHRoZSBvdXRwdXQgc2VnbWVudCB0byB0aW1lCi0JICBDb252ZXJ0IHRoZSBzdG9yZWQgaW5wdXQgc2VnbWVudCB0byB0aW1lIGJlZm9yZSBwdXNoaW5nIGl0IG91dC4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYwotCi0yMDEyLTA3LTIwIDEzOjEyOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmg6Ci0JICBpbnRlcmxlYXZlOiB0cnkgdG8gZml4IHNlZ21lbnQgaGFuZGxpbmcKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYwotCi0yMDEyLTA3LTIwIDE1OjI4OjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBOb24tdXBkYXRlIHNlZWtzIHNob3VsZCBzdGlsbCBtYWtlIHN1cmUgdGhhdCByZXZlcnNlIHBsYXliYWNrIHN0YXR1cyBpcyByZXNldAotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmMKLQotMjAxMi0wNy0yMCAxNToxODoyMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUHJvcGVybHkgaW5pdGlhbGl6ZSBmcm9tX29mZnNldCBhbmQgZnJvbV90aW1lCi0KLTIwMTItMDctMjAgMTQ6MjU6NDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFdlIG5lZWQgYW4gaW5kZXggYW5kIGluZGV4IGVudHJ5IGZvciByZXZlcnNlIHBsYXliYWNrCi0JICBSZXZlcnNlIHBsYXliYWNrIGRvZXMgbm90IHdvcmsgd2l0aCBpbmRleC1sZXNzIGZpbGVzIHlldC4KLQotMjAxMi0wNy0yMCAxNDoxMDo0MSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGNsZWFuIHVwIHB1c2ggbW9kZSBzZWdtZW50IGhhbmRsaW5nCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMjc3Ci0KLTIwMTItMDctMjAgMTM6MzU6MjkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHByb3Blcmx5IHRyYW5zZm9ybSBpbmNvbWluZyBzZWdtZW50IGV2ZW50Ci0JICAuLi4gd2hpY2ggaXMgcmVhbGx5IHVzZWZ1bCBmb3IgcHJvcGVyIHB1c2ggbW9kZSBzZWVraW5nLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY4MDI3OAotCi0yMDEyLTA3LTIwIDExOjA3OjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IEZpeCByZXZlcnNlIHBsYXliYWNrIGZvciBzZWVrcyB3aXRob3V0IHN0b3AgcG9zaXRpb24KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaAotCi0yMDEyLTA3LTIwIDEwOjQ4OjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBPbmx5IHRha2UgdGhlIHN0cmVhbV9zdGFydF90aW1lIGludG8gYWNjb3VudCBmb3IgU0VUIHNlZWtzCi0JICBGb3Igb3RoZXIgc2Vla3MgdGhlIHN0cmVhbV9zdGFydF90aW1lIGlzIGFscmVhZHkgYWRkZWQgdG8gdGhlCi0JICBzZWdtZW50IHZhbHVlcy4KLQkgIENvbmZsaWN0czoKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCi0KLTIwMTItMDctMDggMjA6MzY6MjIgKzAzMDAgIEFudG9uIEJlbGthIDxhbnRvbmJlbGthQGdtYWlsLmNvbT4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIHdhdnBhcnNlOiBBZGQgVE9DIHN1cHBvcnQKLQkgIEFkZCBzdXBwb3J0IGZvcjoKLQkgICogQ3VlIENodW5rCi0JICAqIEFzc29jaWF0ZWQgRGF0YSBMaXN0IENodW5rCi0JICAqIExhYmVsIENodW5rCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3MzA2Ci0KLTIwMTItMDUtMDkgMTU6NTg6MTYgKzAyMDAgIE1hcmlhIEdpb3Zhbm5hIENoaW9zc2EgPG1hcmlhZ2lvdmFubmEuY2hpb3NzYSBhdCBzZWxleGVsc2FnLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogYWxzbyBzZXQgVURQIGJ1ZmZlciBzaXplIGluIG11bHRpY2FzdAotCSAgQWxzbyBzZXQgdGhlIFVEUCBidWZmZXIgc2l6ZSBpbiBtdWx0aWNhc3QgbW9kZS4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzU0NDgKLQotMjAxMi0wNy0xOCAyMzo0Mzo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBoZWFkZXIgcGFyc2luZyBpbiBwdXNoIG1vZGUKLQkgIEZpeCAnYnJlYWsnIHRoYXQgZ290IHdhcnBlZCB0byB0aGUgd3JvbmcgcGxhY2UsCi0JICBwcm9iYWJseSBhcyBwYXJ0IG9mIGEgbWVyZ2UuIEZpeGVzIEdTVF9JU19CVUZGRVIKLQkgIGNyaXRpY2FscyBpbiBwYXJzZV9pZGl0KCkgd2hlbiBiZWluZyBhY2NpZGVudGFsbHkKLQkgIHBhc3NlZCBhIE5VTEwgYnVmZmVyIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgYnJlYWsuCi0JICBnc3QtbGF1bmNoLTEuMCBwbGF5YmluIHVyaT1odHRwOi8vZG9jcy5nc3RyZWFtZXIuY29tL21lZGlhL3NpbnRlbF90cmFpbGVyLTQ4MGkuYXZpCi0KLTIwMTItMDctMTggMjI6NDc6MjIgKzAyMDAgIEFsYmFuIEJyb3dhZXlzIDxwcmFoYWxAeWFob28uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cDogZGVwcmVjYXRlZCBzb3VwX21lc3NhZ2VfaGVhZGVycyBfZ2V0IC0+IF9nZXRfb25lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgwMjA2Ci0KLTIwMTItMDctMTggMTg6Mjc6NDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSAganBlZy9wbmc6IENhbGwgdmlkZW9fZGVjb2Rlcl9uZWdvdGlhdGUoKQotCi0yMDEyLTA3LTE4IDE3OjU3OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5jOgotCSAgdXBkYXRlIGZvciBnaG9zdHBhZCBjaGFuZ2VzCi0KLTIwMTItMDctMTggMTE6MzY6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFBhc3Mgc2VlayByYXRlIHRvIHVwc3RyZWFtIHNlZWsgZXZlbnRzIGluIHB1c2ggbW9kZQotCSAgRml4ZXMgYnVnICM2Nzk0MzUuCi0JICBDb25mbGljdHM6Ci0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYwotCi0yMDEyLTA3LTE3IDE2OjM5OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIHVwZGF0ZSBmb3IgUlRQIGJ1ZmZlciBhcGkgY2hhbmdlcwotCi0yMDEyLTA3LTE3IDE2OjM4OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSAgdXBkYXRlIGZvciBSVFAgYnVmZmVyIGFwaSBjaGFuZ2VzCi0KLTIwMTItMDctMTYgMTE6MDc6NDQgKzAyMDAgIFBhdHJpY2lhIE11c2NhbHUgPHBhdHJpY2lhQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IHVzZSBidWZmZXIgbGlzdHMKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzk5OTQKLQotMjAxMi0wNy0xNyAxMDowMTo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IEZpeCBwYXJzaW5nIG9mIElTUkMgZnJvbSB0aGUgY3Vlc2hlZXRzCi0KLTIwMTItMDctMDUgMTQ6MTU6MjUgKzAzMDAgIEFudG9uIEJlbGthIDxhbnRvbmJlbGthQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IGFkZCBUT0Mgc3VwcG9ydAotCSAgQWRkIHN1cHBvcnQgZW1iZWRkZWQgY3Vlc2hlZXRzIGluIGZsYWMgZmlsZXMuCi0JICBQYXJzaW5nIE1FVEFEQVRBX0JMT0NLX0NVRVNIRUVUIGFzIFRPQy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA4OTEKLQotMjAxMi0wNy0xMyAxNDo0MzozMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGF2b2lkIHNvbWUgbW9yZSBmcmFtZSBtaXNwYXJzaW5nIGJ5IGFkZGl0aW9uYWwgaGVhZGVyIHNhbml0eSBjaGVjawotCSAgLi4uIHVzaW5nIGEgcmVxdWlyZWQgY29uc3RhbnQgYmxvY2tpbmdfc3RyYXRlZ3kgYml0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3OTgwNwotCi0yMDEyLTA3LTEzIDEzOjUxOjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBkZW11eDogUHVzaCBTVFJFQU1fU1RBUlQgZXZlbnQgd2hlbiBuZWVkZWQKLQotMjAxMi0wNy0xMSAxMzoxMDowNyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGF2b2lkIHdhcm5pbmcgaWYgYm90aCB0cyBhcmUgZXF1YWwKLQotMjAxMi0wNy0xMSAxMjoyODoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IGNoZWNrIHRoZSByaWdodCBzaXplIHdoZW4gd2FybmluZyBhYm91dCB0b28gbGFyZ2UgdWRwIHBhY2tldHMKLQkgIFdoYXQgbWF0dGVycyBpcyB0aGUgdG90YWwgc2l6ZSwgbm90IHRoZSBzaXplIG9mIGFueSBvZiB0aGUKLQkgIGluZGl2aWR1YWwgbWVtb3J5IGNodW5rcyB0aGF0IG1ha2UgdXAgdGhlIHBhY2tldC4KLQotMjAxMi0wNy0xMCAxNDozODoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5oOgotCSAgYXV0b2RldGVjdDogcHJveHkgdHMtb2Zmc2V0IHByb3BlcnRpZXMKLQkgIFByb3h5IHRoZSB0cy1vZmZzZXQgcHJvcGVydHkgaW4gdGhlIGF1ZGlvKnNpbmsgZWxlbWVudHMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5MzQzCi0KLTIwMTItMDctMDkgMTY6Mjc6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIGZpeCBmb3IgYWxsb2NhdG9yIEFQSSBjaGFuZ2VzCi0KLTIwMTItMDctMDkgMTI6MjI6MDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHVwZGF0ZSBmb3IgcmlmZiBmaWVsZCByZW5hbWUKLQotMjAxMi0wNS0yMSAxMzo1NDo1MSArMDIwMCAgTWF0aGlhcyBIYXNzZWxtYW5uIDxtYXRoaWFzQG9wZW5pc211cy5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGRyb3AgcmVkdW5kYW50IGVsZW1lbnRzX2xldmVsX0xEQUREIGxpbmUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYzMDIKLQotMjAxMi0wNy0wOCAxMzozMDozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2RlYy5jOgotCSAgdGVzdHM6IG1pbm9yIGpwZWdkZWMgY2xlYW4tdXBzIGFuZCBmaXhlcwotCSAgRml4IHJhY2UgY29uZGl0aW9uIGluIGVvcyBjaGVja2luZyBhbmQgYSBsZWFrLiBBbmQKLQkgIGJ1aWxkIHBpcGVsaW5lIHdpdGhvdXQgcGFyc2VfbGF1bmNoLgotCi0yMDEyLTA1LTIxIDEzOjUzOjU0ICswMjAwICBNYXRoaWFzIEhhc3NlbG1hbm4gPG1hdGhpYXNAb3BlbmlzbXVzLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2RlYy5jOgotCSogdGVzdHMvZmlsZXMvaW1hZ2UuanBnOgotCSAgdGVzdHM6IEFkZCBzb21lIGJhc2ljIHRlc3RzIGZvciBqcGVnZGVjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc2MzAyCi0KLTIwMTItMDctMDggMDA6MDg6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkgIGR0bWZzcmM6IHBhc3MgdW5oYW5kbGVkIG5vbi1jdXN0b20gZXZlbnRzIHRvIHRoZSBiYXNlIGNsYXNzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY2NjI2Ci0KLTIwMTItMDctMDYgMTk6MTE6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IGF2b2lkIHNvbWUgcmVsb2NhdGlvbnMKLQotMjAxMi0wNy0wNiAxNDo0OToxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgcnRwbXA0dnBheTogcmVtb3ZlIGRlcHJlY2F0ZWQgc2VuZC1jb25maWcgcHJvcGVydHkKLQkgIFVzZSBjb25maWctaW50ZXJ2YWwgaW5zdGVhZC4KLQotMjAxMi0wNy0wNiAxNDo0MjoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IHJlbW92ZSBkZXByZWNhdGVkICJieXRlLXN0cmVhbSIgYW5kICJhY2Nlc3MtdW5pdCIgcHJvcGVydGllcwotCSAgVGhlc2Ugd2lsbCBiZSBwaWNrZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBkb3duc3RyZWFtIGNhcHMgbm93LCBzbwotCSAgaWYgeW91IHdhbnQgdGhlIGRlcGF5bG9hZGVyIHRvIG91dHB1dCBhIHNwZWNpZmljIGZvcm1hdCwgbWFrZSBzdXJlCi0JICB0aGUgZWxlbWVudCBkb3duc3RyZWFtIGFkdmVydGlzZXMgdGhhdCBwcmVmZXJlbmNlIG9yIHVzZSBhIGNhcHNmaWx0ZXIKLQkgIGFmdGVyIHRoZSBkZXBheWxvYWRlciB0byBmb3JjZSBpdC4KLQotMjAxMi0wNy0wNiAxNDoxMzo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogcmVtb3ZlIGRlcHJlY2F0ZWQgYW5kIG5vbi1mdW5jdGlvbmFsICJwcm9maWxlLWxldmVsLWlkIiBwcm9wZXJ0eQotCSAgVGhpcyBpcyBub3cgb3B0aW9uYWxseSB0YWtlbiBmcm9tIGRvd25zdHJlYW0gY2Fwcywgc28gY2FuIGJlCi0JICBzcGVjaWZpZWQgdmlhIGEgY2Fwc2ZpbHRlciBhZnRlciB0aGUgcGF5bG9hZGVyLgotCi0yMDEyLTA3LTA2IDE1OjA3OjUxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IHBlcmZvcm0gYWRkaXRpb25hbCBzYW5pdHkgY2hlY2sgYmVmb3JlIGNvbmZpcm1pbmcgQURUUyBmb3JtYXQKLQkgIC4uLiBhbmQgdHdlYWsgY29uZnVzaW5nIGRlYnVnIG1lc3NhZ2UuCi0KLTIwMTItMDctMDYgMTU6Mjk6MTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogcmVtb3ZlIHVuaGVscGZ1bCBzdHJheSBkZWJ1ZyBtZXNzYWdlCi0KLTIwMTItMDctMDYgMTM6MTY6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiByZW1vdmUgZGVwcmVjYXRlZCBhbmQgdW51c2VkICJudHAtbnMtYmFzZSIgcHJvcGVydHkKLQotMjAxMi0wNy0wNiAxMjo1NzoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmM6Ci0JICBkb2NzOiB1cGRhdGUgaXNvbXA0IGRvY3MgZm9yIGdwcG11eCAtPiAzZ3BwbXV4IGNoYW5nZSBhcyB3ZWxsCi0KLTIwMTItMDctMDYgMTI6NTQ6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICBpc29tcDQ6IHJlbW92ZSBncHBtdXgsIHdoaWNoIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiAzZ3BwbXV4Ci0KLTIwMTItMDctMDYgMTI6NDk6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkgIHNtdHA6IHJlbW92ZSBkZXByZWNhdGVkICJmcHMiIHByb3BlcnR5Ci0KLTIwMTItMDctMDYgMTI6NDY6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4Lmg6Ci0JICBtdWx0aXBhcnRkZW11eDogcmVtb3ZlIGRlcHJlY2F0ZWQgYW5kIHVudXNlZCAiYXV0b3NjYW4iIHByb3BlcnR5Ci0JICBSZXBsYWNlZCBieSBib3VuZGFyeT1OVUxMLgotCi0yMDEyLTA3LTA2IDA5OjA3OjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgcnRwaDI2M3BwYXk6IGFjY2VwdCBhbnkgaDI2MyBpbnB1dCB1bmxlc3MgZG93bnN0cmVhbSBmb3JjZXMgc3BlY2lmaWMgcmVxdWlyZW1lbnRzCi0JICBydHBoMjYzcHBheSBzaG91bGQgYWNjZXB0IGFueSBpbnB1dCBjb21wYXRpYmxlIHdpdGggaXRzIHNpbmsgdGVtcGxhdGUKLQkgIGNhcHMgaWYgaXQganVzdCBvdXRwdXRzIHRvIGUuZy4gdWRwc2luayBvciBmYWtlc2luay4KLQkgIHJ0cGgyNjNwcGF5ICEgcnRwaDI2M3BkZXBheSBzaG91bGQgYWxzbyB3b3JrIHdpdGggYW55IGNvbXBhdGlibGUgaW5wdXQuCi0JICBUaGlzIHdvdWxkIGZhaWwgYmVmb3JlIHdpdGggbm90LW5lZ290aWF0ZWQgZXJyb3JzIGJlY2F1c2UgdGhlIGdldF9jYXBzCi0JICBmdW5jdGlvbiB3b3VsZCBzZWUgdGhlIGVuY29kaW5nLW5hbWUgaW4gdGhlIGRlcGF5bG9hZGVyJ3MgdGVtcGxhdGUgY2FwcwotCSAgYW5kIGRlZmF1bHQgdG8gYmFzZWxpbmUgSC4yNjMgYmVjYXVzZSB0aGVyZSdzIG5vIHByb2ZpbGUvbGV2ZWwgaW5mb3JtYXRpb24KLQkgIGluIHRob3NlIGNhcHMsIHdoaWNoIGlzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiBkb3duc3RyZWFtIGhhcyBmaWx0ZXJjYXBzCi0JICBmcm9tIGFuIFNEUCwgYnV0IG5vdCBpZiB0aG9zZSBmaWVsZHMgYXJlIGFic2VudCBiZWNhdXNlIHRoZXkgY2FuIGJlCi0JICBhbnl0aGluZyBsaWtlIHdpdGggdGhlIGRlcGF5bG9hZGVyJ3MgdGVtcGxhdGUgY2Fwcy4gTWFrZXMKLQkgIHZpZGVvdGVzdHNyYyAhIGF2ZW5jX2gyNjNwICEgcnRwaDI2M3BwYXkgISBydHBoMjYzcGRlcGF5ICEgZmFrZXNpbmsKLQkgIHdvcmsuCi0KLTIwMTItMDctMDUgMjI6NTc6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IGZpeCBoMjYzcCBwYXlsb2FkICEgZGVwYXlsb2FkIHVuaXQgdGVzdAotCSAgTmVlZCB0byBhZGQgaDI2M3ZlcnNpb24gZmllbGQgdG8gaW5wdXQgY2FwcyBzaW5jZSB0aGUKLQkgIHBheWxvYWRlciBzaW5rIGdldF9jYXBzIGZ1bmN0aW9uIHdpbGwgY29udGFpbiBpdCBpbiB0aGUKLQkgIHRoZSBjYXBzLCBhbmQgdGhlIHN0cmljdGVyIGNhcHMgc3Vic2V0IGNoZWNrIHJlcXVpcmVzCi0JICB0aGlzIHRvIGJlIHByZXNlbnQgaW4gdGhlIGlucHV0IGNhcHMgYXMgd2VsbCB0aGVuLgotCi0yMDEyLTA3LTA2IDExOjUwOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHVwZGF0ZSBmb3IgcXVlcnkgYXBpIGNoYW5nZXMKLQotMjAxMi0wNy0wNiAxMToyNjo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgcXVlcnkgYXBpIGNoYW5nZXMKLQotMjAxMi0wNy0wNiAxMTowMjoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB1cGRhdGUgZm9yIGFsbG9jYXRpb24gcXVlcnkgY2hhbmdlcwotCi0yMDEyLTA3LTA1IDE1OjE0OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmd2b2x1bWUuYzoKLQkgIHRlc3RzOiBmaXggcmd2b2x1bWUgdW5pdCB0ZXN0IGV2ZW50IGhhbmRsaW5nCi0JICBNdXN0IGZsdXNoIGFmdGVyIEVPUyBiZWZvcmUgc2VuZGluZyBtb3JlIGJ1ZmZlcnMgb3IKLQkgIGFub3RoZXIgRU9TIGV2ZW50LCBvciB0aGUgZXZlbnQgb3IgYnVmZmVyIHdpbGwgYmUKLQkgIHJlamVjdGVkLiBBbHNvIHNlbmQgYSBTRUdNRU5UIGV2ZW50IGF0IHRoZSBzdGFydAotCSAgb2YgZWFjaCBzdHJlYW0gZm9yIGdvb2QgbWVhc3VyZS4KLQotMjAxMi0wNy0wNSAxMzoxMzowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgZ3N0OiBJbXBsZW1lbnQgc2VnbWVudC1kb25lIGV2ZW50Ci0KLTIwMTItMDctMDUgMTI6MzU6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFJlbW92ZSB0aGUgVE9DIHF1ZXJ5IGhhbmRsaW5nCi0KLTIwMTItMDctMDQgMTk6NTI6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2E6IFVwZGF0ZSBmb3IgbmV3IEdzdFRvYyBBUEkKLQkgIFRPQyBzdXBwb3J0IGluIG1hdHJvc2thbXV4IGlzIGRpc2FibGVkIGZvciBub3cgYXMgaXQgd2FzIGJyb2tlbiBhbnl3YXkuCi0KLTIwMTItMDctMDQgMjM6NTc6MTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzoKLQkgIHRlc3RzOiBmaXggcmdhbmFseXNpcyB1bml0IHRlc3QgZXZlbnQgaGFuZGxpbmcKLQkgIE11c3QgZmx1c2ggYWZ0ZXIgRU9TIGJlZm9yZSBzZW5kaW5nIG1vcmUgYnVmZmVycyBvcgotCSAgYW5vdGhlciBFT1MgZXZlbnQsIG9yIHRoZSBldmVudCBvciBidWZmZXIgd2lsbCBiZQotCSAgcmVqZWN0ZWQuIEFsc28gc2VuZCBhIFNFR01FTlQgZXZlbnQgYXQgdGhlIHN0YXJ0Ci0JICBvZiBlYWNoIHN0cmVhbSBmb3IgZ29vZCBtZWFzdXJlLgotCi0yMDEyLTA3LTA0IDE4OjU4OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogY2xlYXIgMCBEVFMgb24gYnVmZmVycyBvdXRwdXQsIGFzIHNpbmtzIHdpbGwgcHJlZmVyIERUUyBvdmVyIFBUUyBmb3Igc3luY2luZwotCSAgU2luY2UgdGhlIGluaXRpYWwgZGVjb2RlZCBzdGlsbCBpbWFnZSBidWZmZXIgd2lsbCBoYXZlIGR0cz1wdHM9MCwgYW5kCi0JICB3ZSBvbmx5IHNldCBQVFMgb24gYnVmZmVycyB3ZSBwdXNoIG91dCwgYWxsIGJ1ZmZlcnMgcHVzaGVkIG91dCB3b3VsZAotCSAgaGF2ZSBhIERUUyBvZiAwLiBTaW5rcywgaG93ZXZlciwgd2lsbCBwcmVmZXIgRFRTIG92ZXIgUFRTIGlmIGJvdGggYXJlCi0JICBzZXQsIGFuZCB3aWxsIHRoZXJlZm9yZSBhbHdheXMgc2VlIGEgdGltZXN0YW1wIG9mIDAgbm8gbWF0dGVyIHdoYXQKLQkgIHRoZSBQVFMgaXMgc2V0IHRvLgotCSAgRml4ZXMgdW5pdCB0ZXN0IHRvby4KLQotMjAxMi0wNy0wNCAyMDo1OTowMyArMDQwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogRml4IHF1ZXJ5IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uOyBtb3JlIGRlYnVnZ2luZwotCi0yMDEyLTA3LTA0IDE5OjQxOjUyICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBGaXggc3BlYyBzdHVmZiBpbiBkaXJlY3Rzb3VuZHNpbmsKLQotMjAxMi0wNS0zMSAxOToyMjo0NyArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBmaXggYWNjZXNzIHRvIGludmFsaWQgcG9pbnRlciBpbiBzZXRfdm9sdW1lCi0KLTIwMTItMDYtMTMgMTI6MTI6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcj1DMz1CNmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBGaXggY2FwcyBsZWFrcwotCi0yMDEyLTA1LTI5IDExOjM3OjU5ICswMDAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IGZpeCBhY2NlcHRjYXBzIGNoZWNrCi0KLTIwMTItMDUtMjUgMTA6MTQ6NTcgKzAwMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogdXNlIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBmb3Igc3BkaWYgZm9ybWF0cwotCi0yMDEyLTA1LTI1IDEwOjE5OjA5ICswMDAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IGFkZCBzdXBwb3J0IGZvciBEVFMKLQotMjAxMi0wNS0wOCAxNjoyMzo0MiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBmb3JjZSA0ODAwMCBrSHogZm9yY2UgQUMtMyBvdmVyIHNwZGlmCi0KLTIwMTItMDctMDQgMTc6NDI6NDkgKzA0MDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogYWRkIHN1cHBvcnQgZm9yIGFjLTMgb3ZlciBzcGRpZgotCi0yMDEyLTA3LTA0IDEyOjM3OjQwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkgIHRlc3RzOiBkaXNhYmxlIGRlaW50ZXJsYWNlIHRlc3QgZm9yIG5vdywgZWxlbWVudCBzdGlsbCBuZWVkcyB0byBiZSBwb3J0ZWQKLQkgIEJ1dCBsZWF2ZSBpdCBhY3RpdmUgYW5kIHByaW50IGEgRklYTUUuIFBvcnRpbmcgaXMgaW4gcHJvZ3Jlc3MuCi0KLTIwMTItMDctMDMgMTk6Mzg6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIGRlaW50ZXJsZWF2ZTsgZG93bmdyYWRlIGNhcHMgY2hhbmdlIGZhaWx1cmUgZGVidWcgbWVzc2FnZQotCSAgQWRkIHNvbWUgbW9yZSBpbmZvIGFuZCBkb3duZ3JhZGUgdG8gd2FybmluZywgc28KLQkgIGl0IGRvZXNuJ3QgbG9vayBsaWtlIHRoZSB1bml0IHRlc3QgZmFpbGVkLgotCi0yMDEyLTA3LTAzIDE3OjUyOjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogZml4IG5lZ290aWF0aW9uIGFuZCB1bml0IHRlc3QKLQkgIE11c3QgcmVtb3ZlIGEgcG9zc2libHktZml4ZWQgY2hhbm5lbC1tYXNrIGZpZWxkIGlmCi0JICB3ZSdyZSBnb2luZyB0byBzZXQgdW5maXhlZCBjaGFubmVscyBvbiB0aGUgc3RydWN0dXJlLAotCSAgb3IgYSBkaWZmZXJlbnQgY2hhbm5lbCBjb3VudC4KLQotMjAxMi0wNy0wMyAxNzoyNjoyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogT25seSBwdXNoIHRoZSBUT0MgZXZlbnQsIHRoZSBtZXNzYWdlIGlzIGhhbmRsZWQgYnkgdGhlIHNpbmtzCi0KLTIwMTItMDctMDMgMTI6NDc6NTggKzA5MDAgIEphdmllciBKYXJkw7NuIDxqamFyZG9uQGdub21lLm9yZz4KLQotCSogdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL2RlbW8uYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JKiB0ZXN0cy9pY2xlcy9nZGtwaXhidWZzaW5rLXRlc3QuYzoKLQkgIHRlc3RzOiBkbyBub3QgdXNlIGRlcHJlY2F0ZWQgZ3RrKyBzeW1ib2xzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5MzAxCi0KLTIwMTItMDctMDMgMDk6Mjc6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogcmVxdWlyZSBHdGsrIDMuMCBmb3IgdGVzdHMvZXhhbXBsZXMKLQotMjAxMi0wNy0wMyAxMjo1NzoxOCArMDkwMCAgSmF2aWVyIEphcmTDs24gPGpqYXJkb25AZ25vbWUub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkgIHJ0cDogcmVtb3ZlIHNvbWUgb3V0ZGF0ZWQgY29tbWVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkzMDEKLQotMjAxMi0wNi0yOSAxMTo1MTozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogZGVmYXVsdCB0byBmb3JjZS1hc3BlY3QtcmF0aW89dHJ1ZQotCi0yMDEyLTA2LTI4IDIwOjAzOjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JICBybmRidWZmZXJzaXplOiBhZGQgcHVzaCBtb2RlIHN1cHBvcnQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTYzMTcKLQotMjAxMi0wNi0yOCAxMToyOTo1NSArMDIwMCAgRGF2aWQgQ29ydm95c2llciA8ZGF2aWQuY29ydm95c2llckBvcmFuZ2UuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIGlzb21wNDogVHJ5IHRvIHNlZWsgdXBzdHJlYW0gYmVmb3JlIHByb2Nlc3Npbmcgc2VlayBwdXNoIGV2ZW50Ci0JICBXaGVuIGl0IHJlY2VpdmVzIGEgc2VlayBpbiBwdXNoIG1vZGUsIHRoZSBxdGRlbXV4IHNob3VsZCBmaXJzdCB0cnkgdG8gcHVzaCB0aGUgZXZlbnQgdXBzdHJlYW0sIGFuZCBvbmx5IGlmIHVwc3RyZWFtIGZhaWxzIGZhbGwgYmFjayB0bwotCSAgaXRzIG93biBzZWVrIGxvZ2ljLgotCi0yMDEyLTA2LTI4IDExOjQ3OjIwICswMjAwICBEYXZpZCBDb3J2b3lzaWVyIDxkYXZpZC5jb3J2b3lzaWVyQG9yYW5nZS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgaXNvbXA0OiBBbGxvdyBkdXJhdGlvbiBxdWVyaWVzIHRvIGJlIGZvcndhcmRlZCB1cHN0cmVhbQotCSAgV2hlbiByZWNlaXZpbmcgYSBkdXJhdGlvbiBxdWVyeSBmb3IgVElNRSBmb3JtYXQsIHRyeSB0byBxdWVyeSB1cHN0cmVhbSwgYW5kIG9ubHkgaWYgdXBzdHJlYW0gZmFpbHMgZmFsbCBiYWNrIHRvIHF0ZGVtdXggZHVyYXRpb24gaGFuZGxpbmcuCi0KLTIwMTItMDYtMjggMTE6NTk6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5Lmg6Ci0JICBydHBoMjY0cGF5OiBjbGVhbnVwcwotCSAgVXNlIHRoZSBjYXBzIHByb3BlcnRpZXMgZm9yIGFsaWdubWVudCBhbmQgZm9ybWF0LgotCSAgUmVtb3ZlIHNvbWUgb2xkIHByb3BlcnRpZXMsIHdlIGFsd2F5cyB3YW50IHRvIHVzZSBidWZmZXJsaXN0cyB3aGVuIHdlIGNhbiBub3cuCi0KLTIwMTItMDYtMjggMTE6MzI6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgaDI2NHBheTogcHJlZmVyIEFWQywgaXQncyBlYXNpZXIgdG8gcGFyc2UgZXRjCi0KLTIwMTItMDYtMjcgMDk6MDk6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IG1hcmsgYWxsIG91dHB1dCBmcmFtZXMgYXMga2V5ZnJhbWVzCi0KLTIwMTItMDYtMjYgMTg6NDg6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thOiB1cGRhdGUgZm9yIEdzdFRvYyBBUEkgYWRkaXRpb25zCi0KLTIwMTItMDYtMjYgMTc6MDQ6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IHNldCBpbnRlcmxhY2UtbW9kZQotCi0yMDEyLTA2LTI2IDEzOjE5OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogaW1wcm92ZSBkZWJ1ZwotCi0yMDEyLTA2LTI2IDEzOjAyOjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgUmV2ZXJ0ICJ2NGwyOiBmcmVlIGtlcm5lbCBidWZmZXJzIGJlZm9yZSBhbGxvY2F0aW5nIG5ldyBvbmVzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCAxYjA5YmM2MDlhNTc4ZTczMWYwZGJjOGY2ZTY5OGUyNWQ4ZjRjNWY4LgotCSAgU2VlbXMgdG8gbWFrZSBsaWJ2NGwyIGNvbXBsYWluLCBtYXliZSBiZWNhdXNlIHdlIGNhbGwgUkVRQlVGUyB3aXRoIDAgYnVmZmVycwotCSAgYmVmb3JlIHdlIGFsbG9jYXRlZCBidWZmZXJzLgotCi0yMDEyLTA2LTI2IDEyOjA3OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogZnJlZSBrZXJuZWwgYnVmZmVycyBiZWZvcmUgYWxsb2NhdGluZyBuZXcgb25lcwotCSAgU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzAyNTcKLQotMjAxMi0wNi0yNiAxMjowNzoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogaW1wcm92ZSBkZWJ1ZwotCi0yMDEyLTA2LTI2IDExOjE0OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogc2V0dXAgc3RyaWRlcyBhbmQgb2Zmc2V0cyBmb3IgYWxsIHBsYW5lcwotCi0yMDEyLTA2LTI1IDIwOjExOjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYS1tdXg6IHVwZGF0ZSBmb3IgR3N0VG9jU2V0dGVyIGNoYW5nZXMKLQotMjAxMi0wNi0yNSAxMzozMToxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUmV0dXJuIEZBTFNFIGZyb20gcXVlcmllcyBpZiB3ZSBjYW4ndCBhbnN3ZXIgUE9TSVRJT04vRFVSQVRJT04gcXVlcmllcwotCi0yMDEyLTA2LTIxIDE3OjE1OjExICswMzAwICBBbnRvbiBCZWxrYSA8YW50b25iZWxrYUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUmV0dXJuIEZBTFNFIGZyb20gVE9DIHF1ZXJ5IGlmIG5vIFRPQyBleGlzdHMgaW5zdGVhZCBvZiBhbiBlbXB0eSBUT0MKLQotMjAxMi0wNi0yNCAyMjo1MToxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thOiB1cGRhdGUgZm9yIEdzdFRvYyBBUEkgY2hhbmdlcwotCi0yMDEyLTA2LTIzIDE0OjU3OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiB1cGRhdGUgZm9yIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkoKSBjaGFuZ2VzCi0KLTIwMTItMDYtMjAgMTI6MzE6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZsdmRlbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM2RlbXV4LmM6Ci0JICB1cGRhdGUgZm9yIGJ1cyBhcGkgY2hhbmdlcwotCi0yMDEyLTA2LTIwIDEwOjMzOjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgdXBkYXRlIGZvciB0YXNrIGFwaSBjaGFuZ2UKLQotMjAxMi0wNi0yMCAwOTo1OTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgY2xvY2sgYXBpIGNoYW5nZXMKLQotMjAxMi0wNi0xOSAxMjoxNTozMyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuaDoKLQkgIG9zeGF1ZGlvc2luazogcmVzcGVjdCB0aGUgcHJlZmVyZWQgY2hhbm5lbCBsYXlvdXQKLQkgIEluIE9TWCBpcyBhbGxvd2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBhdWRpbyBvdXRwdXQgZGV2aWNlLAotCSAgcHJlZmVyZWQgY2hhbm5lbCBsYXlvdXQgYW5kIHNwZWFrZXIgcG9zaXRpb25zIHRocm91Z2ggdGhlIHRvb2wKLQkgICJBdWRpbyBNSURJIFNldHVwIi4KLQotMjAxMi0wNC0zMCAyMjo1OTo1OCArMDIwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYS1kZW11eDogU2VuZCBnYXAgZXZlbnRzIGZvciBzdWJ0aXRsZSBzdHJlYW1zCi0KLTIwMTItMDYtMTcgMDE6MDA6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSAgc3BsaXRmaWxlc3JjOiBmaXggdXAgZG9jcyBmb3IgMC4xMQotCi0yMDEyLTA2LTE2IDIzOjI5OjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYzoKLQkgIHNwbGl0ZmlsZXNyYzogc21hbGwgdXJpIGhhbmRsZXIgZml4dXAgYW5kIHNvbWUgbW9yZSBkb2NzCi0JICBHZXQgVVJJIGxvY2F0aW9uIHVzaW5nIGdzdF91cmlfZ2V0X2xvY2F0aW9uKCksIHNvIGFueQotCSAgZXNjYXBlZCBiaXRzIGdldCB1bmVzY2FwZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA5MDQ5Ci0KLTIwMTItMDYtMTcgMDA6NTk6MjEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSAgc3BsaXRmaWxlc3JjOiByZS1wb3J0IHRvIDAuMTEKLQotMjAxMi0wNi0xNiAxOTowNjoyNSArMDEwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSAgc3BsaXRmaWxlc3JjOiBJbXBsZW1lbnQgc3BsaXRmaWxlOi8vIFVSSSBzY2hlbWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDkwNDkKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmMKLQotMjAxMi0wNi0xNCAxMDo0Mzo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSAgdGhlb3JhZGVwYXk6IGZpeCBidWZmZXIgbWVtb3J5Ci0JICBUaGUgbWVtb3J5IHdhcyBhZGRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIGluc3RlYWQgb2YgdGhlIG91dHB1dCBidWZmZXIuCi0KLTIwMTItMDYtMTMgMTM6MzY6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IERvbid0IHJlc2V0IHRpbWUgaW4gZmx1c2gtc3RvcAotCSAgRG9uJ3QgcmVzZXQgdGhlIHRpbWUgaW4gZmx1c2gtc3RvcC4gTGl2ZSBzb3VyY2VzIGNhbiBkbyB0aGlzIGZsdXNoIGluIHRoZQotCSAgcGxheWluZyBzdGF0ZSBhbmQgc28gdGhlIHBpcGVsaW5lIHdpbGwgbmV2ZXIgaGF2ZSBhIGNoYW5jZSB0byB1cGRhdGUgdGhlCi0JICBiYXNlX3RpbWUgb2YgdGhlIGVsZW1lbnRzLCB3aGljaCBvbmx5IGhhcHBlbnMgd2hlbiBnb2luZyBmcm9tIHBhdXNlZCB0bwotCSAgcGxheWluZy4KLQotMjAxMi0wNi0xMiAxMjo0MjozMSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmg6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuaDoKLQkgIG9zeGF1ZGlvc2luazogQWRkIHN1cHBvcnQgZm9yIFNQRElGIG91dHB1dAotCSAgQSBiaWcgcmVmYWN0b3JpbmcgdG8gYWxsb3cgcGFzc3Rocm91Z2ggQUMzL0RUUyBvdmVyIFNQRElGLgotCSAgU2V2ZXJhbCByYW5kb20gY2xlYW51cHMgYW5kIG1pbm9yIGZpeGVzLgotCi0yMDExLTA5LTAxIDE1OjQxOjI2ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkgIGRlaW50ZXJsYWNlOiBzZW5kIFFvUyBtZXNzYWdlcyB3aGVuIGRyb3BwaW5nIGEgZnJhbWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTc5NDEKLQotMjAxMi0wNi0xMiAxNjowNTo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogUmV3b3JrIHRoZSBhc3luYyBzdGF0ZSBoYW5kbGluZwotCSAgQWx3YXlzIHNlbmQgdGhlIGZsdXNoaW5nIGV2ZW50cyB0byB0aGUgdWRwIGVsZW1lbnRzIG5vdyB0aGF0IGJhc2VzcmMgc3VwcG9ydHMKLQkgIHRoaXMuIFRoaXMgbWFrZXMgc3VyZSBhIHNlZ21lbnQgZXZlbnQgaXMgc2VudCBjb3JyZWN0bHkgYWZ0ZXIgYSBmbHVzaC4KLQkgIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29tbWFuZCBhbmQgbWFrZSBpdCBwb3NzaWJsZSB0byBzcGVjaWZ5Ci0JICB3aGF0IGNvbW1hbmQgeW91IHdhbnQgdG8gY2FuY2VsIHdoZW4gc3RhcnRpbmcgYSBuZXcgYXN5bmMgY29tbWFuZC4KLQkgIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OTA1Ci0KLTIwMTItMDYtMTEgMTg6MjQ6MjAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgY2hpbGRwcm94eTogdXBkYXRlIGFwaSB1c2UKLQotMjAxMi0wNi0xMSAxMjo1NDoyNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYWx3YXlzIHBlcmZvcm0gZnVsbCBzZWVrIGlmIHNlZWsgaXMgZmx1c2hpbmcKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc4MzgKLQotMjAxMi0wNi0xMSAxMToyMDoxOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkgIHJuZGJ1ZmZlcnNpemU6IHByaW50ZiBmb3JtYXQgZml4IGZvciBsb25nIC0+IGludCBjaGFuZ2UKLQotMjAxMi0wNi0wOCAyMDozODozNCArMDIwMCAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMm9iamVjdDogRG9uJ3QgcHJvYmUgVVZDIGRldmljZXMgZm9yIGJlaW5nIGludGVybGFjZWQKLQkgIFVWQyBkZXZpY2VzIGFyZSBuZXZlciBpbnRlcmxhY2VkLCBhbmQgZG9pbmcgVklESU9DX1RSWV9GTVQgb24gdGhlbQotCSAgY2F1c2VzIGV4cGVuc2l2ZSBhbmQgc2xvdyBVU0IgSU8sIHNvIGRvbid0IHByb2JlIHRoZW0gZm9yIGludGVybGFjZWQuCi0JICBUaGlzIHNoYXZlcyAyIHNlY29uZHMgb2YgdGhlIHN0YXJ0dXAgdGltZSBvZiBjaGVlc2Ugd2l0aCBhIExvZ2l0ZWNoCi0JICBXZWJjYW0gUHJvIDkwMDAuCi0JICBTaWduZWQtb2ZmLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzcyMgotCi0yMDEyLTA2LTA5IDE2OjUzOjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSAgZGVidWc6IGNoYW5nZSBybmRidWZmZXJzaXplIHByb3BlcnRpZXMgZnJvbSBsb25nIHRvIGludAotCSAgVGhlc2Ugc2hvdWxkIGFsbCBiZSBpbnQgaW5zdGVhZCBvZiBsb25nLCB0byBhdm9pZCBidWdzCi0JICB3aGVuIHBhc3NpbmcgdGhlc2UgYXMgdmFyYXJncyB3aXRoIGdfb2JqZWN0X3NldCgpLCBhbmQKLQkgIHRoZXJlIHdhcyBubyByZWFzb24gdG8gdXNlIGxvbmcgaW4gdGhlIGZpcnN0IHBsYWNlIGhlcmUuCi0JICBGaXhlcyBGSVhNRS4KLQotMjAxMi0wNi0wOCAxNTo1NDo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkgIGVsZW1lbnRzOiBVc2UgZ3N0X3BhZF9zZXRfY2FwcygpIGluc3RlYWQgb2YgbWFudWFsIGV2ZW50IGZpZGRsaW5nCi0KLTIwMTItMDYtMDggMTU6MDQ6NTkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMDNhMGU1NyB0byA5OGUzODZmCi0KLTIwMTItMDYtMDggMTA6MTE6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LWF1ZGlvLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JICB1cGRhdGUgZm9yIGF1ZGlvIGFwaSBjaGFuZ2UKLQotMjAxMi0wNi0wNyAxNjoxMjozNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMS45MiA9PT0KLQotMjAxMi0wNi0wNyAxNjoxMjoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTEuOTIKLQotMjAxMi0wNi0wNyAxNjoxMToxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEyLTA2LTA3IDE1OjAzOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBpbXByb3ZlIGNsb2NrIGhhbmRsaW5nCi0JICBQb3N0IHRoZSBub3RpZnkgb3V0c2lkZSBvZiB0aGUgcGFfbG9jayB0byBhdm9pZCBhIGRlYWRsb2NrIGNhdXNlZCBieSBiYXNlc3JjCi0JICBjYWxsaW5nIGdldF90aW1lIHdpdGggdGhlIG9iamVjdCBsb2NrLgotCSAgUmVzZXQgdGhlIGNsb2NrIG9uIGNvbm5lY3QuCi0JICBQb3N0IGNsb2NrLWxvc3QgYW5kIGNsb2NrLXByb3ZpZGUgbWVzc2FnZXMuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczOTc3Ci0JICBDb25mbGljdHM6Ci0JICBleHQvcHVsc2UvcHVsc2VzcmMuYwotCi0yMDEyLTA0LTEyIDEzOjIxOjE3ICswMzAwICBNb2hhbW1lZCBTYW1lZXIgPG1zYW1lZXJAZm9vbGFiLm9yZz4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBCZXR0ZXIgR3N0Q2xvY2sgZm9yIHB1bHNlc3JjCi0JICBUaGlzIGNsb2NrIHVzZXMgdGhlIGFjdHVhbCBzdHJlYW0gdGltZSAocGFfc3RyZWFtX2dldF90aW1lKSB0byBnZXQgYSBtb3JlIGFjY3VyYXRlIHRpbWVzdGFtcC4KLQkgIENvbmZsaWN0czoKLQkgIGV4dC9wdWxzZS9wdWxzZXNyYy5jCi0KLTIwMTItMDYtMDcgMTE6MTY6NTAgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIHBuZzogZml4IHZpZGVvIHN0YXRlIGxlYWtzCi0KLTIwMTItMDYtMDcgMTE6MTY6MzcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBmaXggdmlkZW8gc3RhdGUgbGVhawotCi0yMDEyLTA2LTA3IDEyOjExOjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBvbmx5IHJlc2V0IHRoZSBtYW5hZ2VyIG9iamVjdCB3aGVuIHdlIGRpZCBhIHNlZWsKLQkgIE9ubHkgcmVzZXQgdGhlIG1hbmFnZXIgb2JqZWN0IHdoZW4gd2UgdXNlZCBhIFJhbmdlIGhlYWRlciwgaWUuIHdoZW4gd2UgZGlkIGEKLQkgIHNlZWsuIE90aGVyd2lzZSB3ZSBqdXN0IHBhdXNlZCBhbmQgd2UgY2FuIHJlc3VtZSBqdXN0IGZpbmUuCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NDc1Ci0KLTIwMTItMDYtMDYgMTY6MTM6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgdGVzdHM6IGFkZCB0ZXN0IGZvciBydHBzZXNzaW9uIGNsZWFudXAKLQotMjAxMi0wNi0wNiAxODoxODo0MSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAxZmFiMzU5IHRvIDAzYTBlNTcKLQotMjAxMi0wNi0wNiAxNDoxNzowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogVXBkYXRlIGZvciBUT0MgZXZlbnQgQVBJIGNoYW5nZQotCi0yMDEyLTA2LTA2IDEzOjAyOjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOgotCSAgdXBkYXRlIGZvciB0YWcgZXZlbnQgY2hhbmdlCi0KLTIwMTItMDYtMDYgMTM6MDA6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzoKLQkgIGZpeCBZODAwIGZvcm1hdAotCi0yMDEyLTA2LTAxIDAxOjE5OjM1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW86IHN0cmFpZ2h0Zm9yd2FyZCBwb3J0IHRvIDAuMTEKLQotMjAxMi0wNS0zMSAxODozOToyNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSAgU29tZSBwcmludGYgdmFyaWFibGUgZm9ybWF0IGZpeGVzCi0JICBUaGUgb3N4IGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCB0aG9zZQotCi0yMDEyLTA2LTA1IDA5OjE4OjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IEZpeCBHc3RCYXNlUGFyc2U6OmdldF9zaW5rX2NhcHMoKSBpbXBsZW1lbnRhdGlvbnMKLQkgIFRoZXkgc2hvdWxkIHRha2UgdGhlIGZpbHRlciBjYXBzIGludG8gYWNjb3VudCBhbmQgYWx3YXlzIHJldHVybgotCSAgdGhlIHRlbXBsYXRlIGNhcHMgYXBwZW5kZWQgdG8gdGhlIGFjdHVhbCBjYXBzLiBPdGhlcndpc2UgdGhlCi0JICBwYXJzZXJzIHN0b3AgdG8gYWNjZXB0IHVucGFyc2VkIHN0cmVhbXMgd2hlcmUgdXBzdHJlYW0gZG9lcyBub3QKLQkgIGtub3cgYWJvdXQgY2hhbm5lbHMsIHJhdGUsIGV0Yy4KLQkgIEZpeGVzIGJ1ZyAjNjc3NDAxLgotCi0yMDEyLTA2LTA0IDE2OjE3OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBzZXQgY29sb3JpbWV0cnkgb24gb3V0cHV0IGluZm8KLQotMjAxMi0wNi0wNCAwODoxMDoxNSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5jOgotCSAgb3N4YXVkaW9zaW5rOiBIYW5kbGUgZW5kaWFubmVzcyBjb3JyZWN0bHkKLQotMjAxMi0wNi0wMSAxNjozNzowMCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5jOgotCSAgb3N4YXVkaW9zaW5rOiBBZGQgc3VwcG9ydCBmb3IgaW50IGF1ZGlvCi0KLTIwMTItMDYtMDEgMTA6Mjg6NTMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZjFiNWE5NiB0byAxZmFiMzU5Ci0KLTIwMTItMDUtMzEgMTM6MzY6MzIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2V0IHRoZSBwYWxldHRlIHNpemUgY29ycmVjdGx5Ci0KLTIwMTItMDUtMzEgMTA6MTU6NDMgKzAyMDAgIE1pY2hhZWwgSm9uZXMgPG1pY2hhZWwuam9uZXNAbWF0cml4LXZpc2lvbi5kZT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnZpZG9yaWVudC5oOgotCSAgdjRsMjogYWRkIG1pc3NpbmcgR19FTkRfREVDTFMKLQkgIEdfQkVHSU5fREVDTFMgZGlkbid0IGhhdmUgbWF0Y2hpbmcgR19FTkRfREVDTFMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzcxNjUKLQotMjAxMi0wNS0zMSAxMzowODoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA5MmI3MjY2IHRvIGYxYjVhOTYKLQotMjAxMi0wNS0zMSAxMDoyNjoyNyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JICBvc3h2aWRlb3Npbms6IFJlYWxseSBmaXggdGhlIGJ1aWxkIG9uIDEwLjUKLQkgIFRoZSBBUEkgdGhhdCB3ZSB1c2UgdG8gcnVuIHRoZSBDb2NvYSBsb29wIGluIGFub3RoZXIKLQkgIHRocmVhZCBkb2VzIG5vdCBleGlzdCBpbiAxMC41IG9yIGVhcmxpZXIuCi0KLTIwMTItMDUtMjYgMTI6MjE6MTggKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogZml4IHJhY2UgaW4gc3RhcnRpbmcgdGhlIHJ1bmxvb3AgdGhyZWFkCi0JICBCbG9jayBnc3Rfb3N4X3ZpZGVvX3NpbmtfcnVuX2NvY29hX2xvb3AgdW50aWwgdGhlIGxvb3AgdGhyZWFkIGhhcyBzdGFydGVkIGFuZAotCSAgZmluaXNoZWQgaW5pdGlhbGl6aW5nIE5TQXBwLiBGaXhlcyBvY2Nhc2lvbmFsIHdhcm5pbmdzL2NyYXNoZXMgZHVlIHRvIHR3bwotCSAgdGhyZWFkcyBnb2luZyBpbnNpZGUgTlNBcHAgYmVmb3JlIGZpbmlzaExhdW5jaGluZyBoYWQgY29tcGxldGVkLgotCi0yMDEyLTA1LTMwIDE2OjAzOjU1ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkgIG9zeHZpZGVvc2luazogRml4IGxhc3QgY29tbWl0IHRvIGFjdHVhbGx5IHdvcmsKLQkgIE1BQ19PU19YX1ZFUlNJT05fMTBfNiBpcyBvYnZpb3VzbHkgbm90IGRlZmluZWQgb24gMTAuNS4KLQotMjAxMi0wNS0zMCAxMzo1MTozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9vc3h2aWRlby9NYWtlZmlsZS5hbToKLQkgIG9zeHZpZGVvc2luazogUHV0IHRoZSByaWdodCBmbGFncyBpbiB0aGUgcmlnaHQgdmFyaWFibGUKLQotMjAxMi0wNS0zMCAxMzoyNDowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogRml4IEdTVF9PQkpDRkxBR1MKLQotMjAxMi0wNS0zMCAxMjo0NToyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBlYzFjNGE4IHRvIDkyYjcyNjYKLQotMjAxMi0wNS0zMCAxMjo0MzozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkgIG9zeHZpZGVvc2luazogTlNXaW5kb3dEZWxlZ2F0ZSBpcyBhdmFpbGFibGUgaW4gYWxsIE9TWCB2ZXJzaW9ucyBuZXdlciB0aGFuIDEwLjYKLQotMjAxMi0wNS0zMCAxMjo0MDo1NyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JICBvc3h2aWRlb3Npbms6IEZpeCBidWlsZCB3aXRoIG9sZGVyIE9TWCB2ZXJzaW9ucwotCi0yMDEyLTA1LTMwIDExOjA5OjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL29zeHZpZGVvL01ha2VmaWxlLmFtOgotCSAgY29uZmlndXJlOiBBZGQgT0JKQyBzcGVjaWZpYyBjb21waWxlciBmbGFncwotCSAgU2VlIGJ1ZyAjNjQzOTM5LgotCi0yMDEyLTA1LTMwIDExOjIzOjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDM0MjliYTYgdG8gZWMxYzRhOAotCi0yMDEyLTA1LTI5IDE3OjUwOjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSAgdmlkZW86IHJlbW92ZSBkdXBsaWNhdGUgZm9ybWF0Ci0KLTIwMTItMDUtMjkgMTY6NTI6MDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogUG9zdCBlcnJvciBtZXNzYWdlIGlmIEVPUyBiZWZvcmUgcGFkcyB3ZXJlIGNyZWF0ZWQKLQkgIEhhcHBlbnMgd2l0aCBzb21lIGZpbGVzIHdpdGggb25seSBoZWFkZXJzCi0KLTIwMTItMDUtMjggMTU6MjI6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuaDoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5oOgotCSAgcG5nOiBQb3J0IHRvIDAuMTEgYWdhaW4KLQotMjAxMi0wNS0xNCAxMjo0Njo1NyArMDIwMCAgSmVucyBHZW9yZyA8bWFpbEBqZW5zZ2Uub3JnPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cDogRHJvcCB0cmFuc2Zlck1vZGUuZGxuYS5vcmcgaGVhZGVyCi0JICBMZWF2ZSBpdCB0byB0aGUgYXBwbGljYXRpb24gdG8gZGVjaWRlIG9uIHRoZSBoZWFkZXIuIE5vIGhlYWRlciBhdCBhbGwKLQkgIGlzIGJldHRlciB0aGFuIGhhdmluZyB0aGUgd3JvbmcgaGVhZGVyIGFzIERMTkEgbWFuZGF0ZXMgdGhhdCBhIG1pc3NpbmcKLQkgIGhlYWRlciBoYXMgdG8gYmUgdG9sZXJhdGVkIHdoaWxlIGEgd3JvbmcgaGVhZGVyIGlzIGFuIGVycm9yLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjAyMAotCi0yMDEyLTA0LTA3IDA5OjUyOjA5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmg6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuaDoKLQkgIHBuZzogUG9ydCB0byBiYXNlIHZpZGVvIGNsYXNzZXMKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmMKLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmgKLQkgIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmMKLQkgIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmgKLQkgIFJldmVydGVkIHRvIDAuMTAsIG5lZWRzIHRvIGJlIHBvcnRlZCBhZ2Fpbi4KLQotMjAxMi0wNS0yNyAwMDowMjowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIGZsdiwgbWF0cm9za2E6IGRvbid0IHVzZSBHc3RTdHJ1Y3R1cmUgQVBJIG9uIHRhZyBsaXN0cwotCi0yMDEyLTA1LTI2IDExOjU3OjE2ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkgIHJ0cG1wMnRkZXBheTogT25seSBvdXRwdXQgaW50ZWdyYWwgbXBlZy10cyBwYWNrZXRzCi0JICBGcm9tIFJGQyAyMjUwCi0JICAyLiBFbmNhcHN1bGF0aW9uIG9mIE1QRUcgU3lzdGVtIGFuZCBUcmFuc3BvcnQgU3RyZWFtcwotCSAgLi4uCi0JICBGb3IgTVBFRzIgVHJhbnNwb3J0IFN0cmVhbXMgdGhlIFJUUCBwYXlsb2FkIHdpbGwgY29udGFpbiBhbiBpbnRlZ3JhbAotCSAgbnVtYmVyIG9mIE1QRUcgdHJhbnNwb3J0IHBhY2tldHMuICBUbyBhdm9pZCBlbmQgc3lzdGVtCi0JICBpbmVmZmljaWVuY2llcywgZGF0YSBmcm9tIG11bHRpcGxlIHNtYWxsIE1UUyBwYWNrZXRzIChub3JtYWxseSBmaXhlZAotCSAgaW4gc2l6ZSBhdCAxODggYnl0ZXMpIGFyZSBhZ2dyZWdhdGVkIGludG8gYSBzaW5nbGUgUlRQIHBhY2tldC4gIFRoZQotCSAgbnVtYmVyIG9mIHRyYW5zcG9ydCBwYWNrZXRzIGNvbnRhaW5lZCBpcyBjb21wdXRlZCBieSBkaXZpZGluZyBSVFAKLQkgIHBheWxvYWQgbGVuZ3RoIGJ5IHRoZSBsZW5ndGggb2YgYW4gTVRTIHBhY2tldCAoMTg4KS4KLQkgIC4uLi4KLQkgIFNpbmNlIGl0IG5lZWRzIHRvIGNvbnRhaW4gImFuIGludGVncmFsIG51bWJlciBvZiBNUEVHIHRyYW5zcG9ydCBwYWNrZXRzIiwgYQotCSAgc2ltcGxlIGZpeCBpcyB0byBjaGVjayB0aGF0J3MgdGhlIGNhc2UsIGFuZCBzdHJpcCBvZmYgYW55IGxlZnRvdmVyIGRhdGEuCi0JICBGaXhlcyAjNjc2Nzk5Ci0JICBDb25mbGljdHM6Ci0JICBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jCi0KLTIwMTItMDUtMjQgMjA6NDM6MTYgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IG1ha2Ugc3VyZSBhbGwgc2VsZWN0b3JzIGFyZSBwZXJmb3JtZWQgb24gdGhlIHNhbWUgdGhyZWFkCi0JICBXaGVuIHdlIGFyZSB1c2luZyBhIGRlZGljYXRlZCB0aHJlYWQgdG8gcnVuIHRoZSBtYWluIHJ1biBsb29wIHdlCi0JICBtdXN0IG1ha2Ugc3VyZSB0aGF0IGFsbCBzZWxlY3RvcnMgYXJlIHBlcmZvcm1lZCBvbiB0aGlzIHNhbWUgdGhyZWFkLgotCSAgRm9yIGluc3RhbmNlIGlmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZCBpcyBjYWxsZWQgZnJvbSB0aGUgcmVhbAotCSAgbWFpbiB0aHJlYWQsIGl0IHdpbGwgbm90IGdvIHRocm91Z2ggdGhlIG1lc3NhZ2UgcXVldWUgYW5kIHdpbGwgYmUKLQkgIGV4ZWN1dGVkIGZyb20gdGhlIHJlYWwgbWFpbiB0aHJlYWQuIEJ5IGZvcmNpbmcgdGhlIHRhcmdldCB0aHJlYWQsCi0JICB3ZSBlbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSByZWFsCi0JICBtYWluIHRocmVhZCB3aGVuIHRoZSBtYWluIHJ1biBsb29wIGlzIHJ1bm5pbmcgb3IgZnJvbSBvdXIgdGhyZWFkCi0JICBzcGlubmluZyB0aGUgbWFpbiBsb29wLgotCi0yMDEyLTA1LTI0IDE2OjA5OjU0ICswMjAwICBNYXRoaWFzIEhhc3NlbG1hbm4gPG1hdGhpYXMuaGFzc2VsbWFubiBhdCBnbXguZGU+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IHJlbW92ZSBmcmFtZXJhdGUKLQkgIFRoZSBqcGVnIGRlY29kZXIgZG9lc24ndCBuZWVkL2NhcmUgYWJvdXQgdGhlIGZyYW1lcmF0ZSB0byBzbyBpdCBzaG91bGQKLQkgIG5vdCBiZSBpbiB0aGUgY2Fwcy4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzYzMDIKLQotMjAxMi0wNS0yNCAxMzowODozNSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBzdGFydCB0aGUgbG9vcCBiZWZvcmUgY2FsbGluZyBbZ3N0dmlldyBoYXZlU3VwZXJ2aWV3XQotCSAgLi4uYXMgaGF2ZVN1cGVydmlldyByZXF1aXJlcyB0aGUgbWFpbmxvb3AgdG8gYmUgcnVubmluZwotCi0yMDEyLTA1LTI0IDEzOjA4OjEzICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGZpeCBpbmRlbnRhdGlvbgotCi0yMDEyLTA1LTIyIDE2OjQ3OjM2ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW06Ci0JICBvc3h2aWRlb3Npbms6IGVuYWJsZSBydW5uaW5nIHRoZSBjb2NvYSBtYWluIHJ1bmxvb3AgaW4gYSB0aHJlYWQKLQotMjAxMi0wNS0yMiAxNjo0NToyOCArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBhZGQgY29kZSB0byBvcHRpb25hbGx5IHJ1biB0aGUgY29jb2EgbWFpbiBydW5sb29wIGluIGEgc2VwYXJhdGUgdGhyZWFkCi0JICBBZGQgYSBsaXR0bGUgaGFjayB0byBydW4gdGhlIGNvY29hIG1haW4gcnVubG9vcCBmcm9tIGEgc2VwYXJhdGUgdGhyZWFkIF93aGVuXwotCSAgdGhlIG1haW4gcnVubG9vcCBpcyBub3QgYmVpbmcgcnVuICh3aGljaCBtZWFucyB0aGF0IHRoZSBhcHAgZG9lc24ndCB1c2UgY29jb2EpLgotCSAgUnVubG9vcHMgYXJlIHRocmVhZCBzcGVjaWZpYywgc28gdGhlIGhhY2sgYm9pbHMgZG93biB0byBnZXR0aW5nIHRoZSBydW5sb29wIGZvcgotCSAgdGhlIG1haW4gdGhyZWFkIGFuZCBzZXR0aW5nIGl0IGFzIHRoZSBydW5sb29wIGZvciBvdXIgZGVkaWNhdGVkIHRocmVhZC4KLQotMjAxMi0wNS0yMiAxNjozMjo1MyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiByZXNldCBhcHBfc3RhcnRlZCB0byBGQUxTRSB3aGVuIHNodXR0aW5nIGRvd24KLQotMjAxMi0wNS0yMiAxNDo0OToxNyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiByZW5hbWUgY29jb2EgcnVubG9vcCBoZWxwZXIgZnVuY3MKLQotMjAxMi0wNS0yMiAxNDoyNjoxMyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBkb24ndCBjcmVhdGUgYXBwbGljYXRpb24gbWVudXMKLQotMjAxMi0wNS0xNiAyMTo1Mjo0NSArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiByZXNldCB0aGUgZW1iZWQgcHJvcGVydHkgZm9yIGJhY2t3YXJkIGNvbXBhdGlsaWJpdHkKLQotMjAxMi0wNS0xNiAyMToxMjoyMiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogZml4IG5hdmlnYXRpb24gd2hlbiBmb3JjZS1hc3BlY3QtcmF0aW8gaXMgYWN0aXZhdGVkCi0KLTIwMTItMDUtMTYgMTg6NTI6NDUgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGFkZCBmb3JjZS1hc3BlY3QtcmF0aW8gcHJvcGVydHkKLQotMjAxMi0wNS0xNCAxODowMTowMiArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogc3RhcnQgaW50ZXJuYWwgd2luZG93IGlmIG5vIHZpZXcgaXMgcHJvdmlkZWQKLQotMjAxMi0wNS0xNCAxNDoyNzo1OCArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDx5bGF0dXlhQGdtYWlsLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIG9zeHZpZGVvc2luazogaW1wbGVtZW50IHRoZSBuYXZpZ2F0aW9uIGludGVyZmFjZQotCi0yMDEyLTA1LTExIDE4OjI0OjA4ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3ZpZGVvc2luazogY3JlYXRlLCBkZXN0cm95LCByZXNpemUgYW5kIGRyYXcgZnJvbSB0aGUgbWFpbiB0aHJlYWQKLQotMjAxMi0wNC0xOSAwODozNzoyOCArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogaW5jcmVhc2UgTkVXU0VHTUVOVCBhY2N1cmFjeSBhZnRlciBzZWVraW5nCi0JICBkZW11eC0+Y29tbW9uLnNlZ21lbnQgaXMgcG9wdWxhdGVkIGR1cmluZyBzZWVrIGhhbmRsaW5nIHdpdGggdGhlIHRhcmdldAotCSAgc3RhcnQvc3RvcCBwb3NpdGlvbnMuIERvbid0IG92ZXJyaWRlIHRoZW0gd2hlbiBzZW5kaW5nIG91dCBhIE5FV1NFR01FTlQuCi0JICBDb25mbGljdHM6Ci0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYwotCi0yMDEyLTA0LTE5IDA4OjMxOjAwICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBkb24ndCBkaXNjYXJkIHRoZSBpbmNvbWluZyBzZWVrIHNlZ21lbnQgb24gcHVzaCBiYXNlZCBzZWVraW5nCi0JICBUaGUgaW5jb21pbmcgc2VlayBzZWdtZW50IHdhcyBiZWluZyBkaXNjYXJkZWQgbGVhZGluZyB0byBwdXNoIGJhc2VkIHNlZWtpbmcKLQkgIGJlaW5nIHBvdGVudGlhbGx5IGluYWNjdXJhdGUuCi0KLTIwMTItMDUtMjMgMTg6MTI6MjQgKzAyMDAgIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJuQGF4aXMuY29tPgotCi0JKiBjb21tb246Ci0JICBjb21tb246IFVwZGF0ZSBzbyB0aGUgcGx1Z2luIHNjYW5uZXIgY2hhbmdlcyBhcmUgaW5jbHVkZWQKLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzY2NzQKLQotMjAxMi0wNS0yMyAxODowNzozNSArMDIwMCAgU2ViYXN0aWFuIFJhc211c3NlbiA8c2Vicm5AYXhpcy5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogc3VwcHJlc3Mgc29tZSB3YXJuaW5ncyB3aGVuIGRlYnVnIGlzIGRpc2FibGVkCi0JICBXYXJuaW5ncyBhYm91dCB1bnVzZWQgdmFyaWFibGVzIHNob3VsZCBiZSBzdXBwcmVzc2VkIGlmIGNvcmUgaGFzIHRoZQotCSAgZGVidWcgc3lzdGVtIGRpc2FibGVkLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjY3MQotCi0yMDEyLTA1LTI0IDA5OjI5OjI1ICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cDogZml4IGJ1aWxkIGlzc3VlIGluIGdzdHJ0cGgyNjRwYXkuYwotCi0yMDEyLTA1LTIxIDEyOjE3OjM1ICswMjAwICBKb25hcyBIb2xtYmVyZyA8am9uYXNoZ0BheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBBZGQgdW5yZXN0cmljdGVkIGNhcHMKLQkgIElmIHRoZXJlIGFyZSBubyBwcm9maWxlIHJlc3RyaWN0aW9ucyBkb3duc3RyZWFtLCByZXR1cm4gY2FwcyB3aXRoCi0JICBwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIGluIHRoZSBmaXJzdCBzdHJ1Y3R1cmUgYW5kIGFwcGVuZAotCSAgdW5yZXN0cmljdGVkIGNhcHMgYXMgdGhlIGxhc3Qgc3RydWN0dXJlLgotCSAgRml4ZXMgYnVnICM2NzIwMTkKLQotMjAxMi0wNS0yNCAwOTo1NzozMSArMDIwMCAgTWFyaWEgR2lvdmFubmEgQ2hpb3NzYSA8bWFyaWFnaW92YW5uYS5jaGlvc3NhIGF0IHNlbGV4ZWxzYWcuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwOiBhZGQgdGhlIFNjYWxlIGhlYWRlciB3aGVuIG5lZWRlZAotCSAgU2V0dGluZyBHU1RfU0VFS19GTEFHX1NLSVAgd2hlbiBzZW5kaW5nIGEgc2VlayBldmVudCBpbiBydHNwc3JjIHNob3VsZAotCSAgc2V0IHRoZSAiU2NhbGUiIGZpZWxkIGluIHRoZSBydHNwIFBMQVkgaGVhZGVyLgotCSAgQmVjYXVzZSB0aGUgYm9vbGVhbiAic3JjLT5za2lwIiBpcyBzZXQgYWZ0ZXIgdGhlIGNhbGwsICJTcGVlZCIgaW5zdGVhZAotCSAgb2YgIlNjYWxlIiBpcyBhbHdheXMgc2V0LiBNb3ZlIHRoZSBhc3NpZ25tZW50IGJlZm9yZSBpc3N1aW5nIHRoZSBfcGxheQotCSAgcmVxdWVzdC4KLQkgIEZpeGVzIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzY2MTgKLQotMjAxMi0wNS0xNyAxNjoyMzo1OSArMDMwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBGaXggdGhlIHNhbXBsZSBwaXBlbGluZS4KLQotMjAxMi0wNS0yMiAxMjozNTowNCArMDQwMCAgQW50b24gTm92aWtvdiA8cmFuZG9tLnBsYW50QGdtYWlsLmNvbT4KLQotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JICBpY3lkZW11eDogd2FybmluZyBpZiBzZXR0aW5nIHNyY3BhZCBjYXBzIGZhaWxzCi0KLTIwMTItMDUtMjIgMTI6MzU6MjkgKzA0MDAgIEFudG9uIE5vdmlrb3YgPHJhbmRvbS5wbGFudEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSAgaWN5ZGVtdXg6IGFjdGl2YXRlIHNyY3BhZCBiZWZvcmUgc2V0dGluZyBjYXBzCi0JICBCZWZvcmUgZ3N0X3BhZF9zZXRfYWN0aXZlKCkgaXMgY2FsbGVkLCB0aGUgcGFkIGhhcwotCSAgRkxVU0hJTkcgZmxhZyBzZXQsIHNvIHNldHRpbmcgdGhlIGNhcHMgZmFpbHMKLQotMjAxMi0wNS0yMiAxMzo0NjoyNyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2xpYm1uZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJtbmcvZ3N0bW5nLmM6Ci0JKiBleHQvbGlibW5nL2dzdG1uZy5oOgotCSogZXh0L2xpYm1uZy9nc3RtbmdkZWMuYzoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZGVjLmg6Ci0JKiBleHQvbGlibW5nL2dzdG1uZ2VuYy5jOgotCSogZXh0L2xpYm1uZy9nc3RtbmdlbmMuaDoKLQkgIG1uZzogcmVtb3ZlIGV4dC9saWJtbmcKLQkgIFBvcnQgdG8gMC4xMCB3YXMgbmV2ZXIgZmluaXNoZWQuCi0JICBJbnRlcmVzdCB3YXMgbG9zdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjQzNjQKLQotMjAxMi0wNS0xOCAxNjozNzowNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBmaXggYXNzZXJ0aW9uIHdoZW4gaGFuZGxpbmcgYSBkYXRlIHRhZyBhcyBhIHN0cmluZwotCSAgRGF0ZSB0YWdzIGFyZSBHRGF0ZSwgbm90IHN0cmluZ3MuIEFkZCBhIHNwZWNpYWwgY2FzZSB0byBjb252ZXJ0Ci0JICBpdCB0byB0aGUgZXhpZiBkYXRlIGZvcm1hdCByZXByZXNlbnRhdGlvbiBpbiBzdHJpbmcgdG8gYXZvaWQKLQkgIHRoZSBhc3NlcnRpb24KLQotMjAxMi0wNS0yMSAxMTo0NzowNyArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBMaXN0ZW4gdG8gc291cmNlIG91dHB1dCBldmVudHMsIG5vdCBzaW5rIGlucHV0Ci0KLTIwMTItMDUtMTggMTI6NTM6NDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkgIHJ0cG1wMnRwYXk6IHJlc3BlY3QgbXR1IGFuZCBwYWNrZXQgYm91bmRhcmllcwotCSAgU2VlICM2NTk5MTUuCi0KLTIwMTItMDUtMTggMTE6MTA6NDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnOiBSZW1vdmUgZGVhZCBjb2RlCi0JICBDb25mbGljdHM6Ci0JICBleHQvanBlZy9nc3RqcGVnZGVjLmMKLQotMjAxMi0wNS0xOCAxMTowNTozNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IEZpeCBjb21waWxhdGlvbgotCi0yMDEyLTA1LTE4IDExOjAyOjUyICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogV2hlbiBkcm9wcGluZyBmcmFtZXMgb24gRU9TLCBmbHVzaCBvdXQgZGF0YQotCSAgQ2xlYW5lciB3YXkgb2YgaGFuZGxpbmcgc3RyYXkgZGF0YQotCi0yMDEyLTA1LTE3IDA5OjM0OjAzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAganBlZ2RlYzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jCi0KLTIwMTItMDUtMTcgMDk6MzM6MTggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBPbmx5IHBhcnNlIGZvciBTT0kgd2hlbiB3ZSBkaWRuJ3Qgc2VlIGl0IGJlZm9yZQotCi0yMDEyLTA1LTE3IDA5OjMxOjQxICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogUmVtZW1iZXIgaWYgd2Ugc2F3IFNPSSBhbmQgaGFuZGxlIHN0cmF5IGRhdGEgb24gRU9TCi0KLTIwMTItMDUtMTUgMjA6NTg6MjUgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSAgcnRwanBlZ3BheTogQWxsb3cgVSBhbmQgViBjb21wb25lbnRzIHRvIHVzZSBkaWZmZXJlbnQgcXVhbnQgdGFibGVzIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZSBkYXRhCi0JICBUaGlzIGFsbG93cyBzb21lIGNhbWVyYXMgKExvZ2l0ZWNoIEM5MjApIHRoYXQgc3BlY2lmeSBkaWZmZXJlbnQgcXVhbnQKLQkgIHRhYmxlcyBidXQgYm90aCB3aXRoIHRoZSBzYW1lIGRhdGEsIHRvIHdvcmsuCi0JICBCdWcgcmVwb3J0ZWQgYnkgUm9iZXJ0IEtyYWtvcmEKLQotMjAxMi0wNS0xNCAxNTo1MToyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogZml4IHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBhZnRlciBzZWVraW5nCi0JICBDb25zaWRlciBhIGRvd25zdHJlYW0gZWxlbWVudCB0aGF0IG1heSBpc3N1ZSBzZWVrcyBpbiB2ZXJ5IHNob3J0Ci0JICBzdWNjZXNzaW9uIChlLmcuIHF1ZXVlMiksIGRlcGVuZGluZyBvbiB0aGUgYWNjZXNzIHBhdHRlcm4gb2YKLQkgIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgKGUuZy4gcXRkZW11eCB3aXRoIGF1ZGlvL3ZpZGVvIGNodW5rcwotCSAgaW50ZXJsZWF2ZWQgc28gdGhhdCB0aGVyZSdzIGFsd2F5cyBhIHNpemVhYmxlIGdhcCBiZXR3ZWVuIHRoZQotCSAgY3VycmVudCBjaHVua3MgZm9yIGVhY2ggc3RyZWFtKS4gSW4gdGhpcyBjYXNlLCBxdWV1ZTIgd2lsbCBtYWludGFpbgotCSAgdHdvIHJhbmdlcywgYW5kIGV2ZW4gd2hlbiBpdCBzZXJ2ZXMgYSBjaHVuayBmcm9tIG1lbW9yeSwgaXQgd2lsbAotCSAgc3dpdGNoIHJhbmdlcyBhbmQgbWFrZSBzb3VwaHR0cHNyYyBzZWVrIHRvIHRoZSBlbmQgb2YgdGhlIGF2YWlsYWJsZQotCSAgZGF0YSBmb3IgdGhhdCByYW5nZSwgYXNzdW1pbmcgdGhhdCB0aGF0J3Mgd2hlcmUgd2UnbGwgd2FudCB0bwotCSAgY29udGludWUgcmVhZGluZyBmcm9tIG5leHQuCi0JICBUaGlzIG1heSBsZWFkIHRvIHRoZSBmb2xsb3dpbmcgc2VlayByZXF1ZXN0IHBhdHRlcm46Ci0JICAtIHNvdXJjZSByZWFkaW5nIHBvc2l0aW9uIEEKLQkgIC0gc2VlayB0byBCCi0JICAtIG5vdyByZWFkaW5nIHBvc2l0aW9uIHN0aWxsIEEsIHJlcXVlc3RlZF9wb3N0aW9uIGlzIEIKLQkgIC0gc3RyZWFtaW5nIHRocmVhZCB0byBiZSByZXN0YXJ0ZWQgdG8gY29udGludWUgZnJvbSBCCi0JICAtIHNlZWsgdG8gQSwgYmVmb3JlIHN0cmVhbWluZyB0aHJlYWQgaGFkIHRpbWUgdG8gZG8gdGhlIHNlZWsKLQkgIC0gZG9fc2VlaygpIG5vdyBzZWVzIHJlYWRpbmcgcG9zaXRpb24gPT0gc2VlayBwb3NpdGlvbiBhbmQKLQkgIHJldHVybnMgZWFybHkuCi0JICAtIGhvd2V2ZXIsIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyBzdGlsbCBCIGZyb20gdGhlIGVhcmxpZXIKLQkgIHNlZWsgcmVxdWVzdAotCSAgLSBzdHJlYW1pbmcgdGhyZWFkIHN0YXJ0cyB1cCwgc2VlcyB0aGF0IGEgc2VlayB0byBCIGlzIHBlbmRpbmcKLQkgIGFuZCByZXF1ZXN0cyBkYXRhIGZyb20gQiBmcm9tIHRoZSBzZXJ2ZXIsIHdoaWxlIHRoZSBHc3RCYXNlU3JjCi0JICBzZWdtZW50IGhhcyBvZiBjb3Vyc2UgYmVlbiB1cGRhdGVkL3Jlc2V0IHRvIHBvc2l0aW9uIEEsIHdoaWNoCi0JICB3YXMgdGhlIGxhc3Qgc2VlayByZXF1ZXN0LgotCSAgLSB3ZSB3aWxsIG5vdyBzZW5kIGRhdGEgZm9yIHBvc2l0aW9uIEIgYW5kIHByZXRlbmQgdGhhdCdzIHRoZQotCSAgZGF0YSBmcm9tIHBvc2l0aW9uIEEgKHZpYSB0aGUgbmV3c2VnbWVudCBldmVudCwgZXRjLikKLQkgIC0gdGhpcyBjYXVzZXMgZGF0YSBjb3JydXB0aW9uCi0JICBSZXByb2R1Y2libGUgZG9pbmcgc2Vlay1lbXVsYXRlZCBmYXN0LWZvcndhcmQvYmFja3dhcmQgb24gMDA2NjQ4LgotCi0yMDEyLTA1LTE2IDA5OjEyOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBSZXF1aXJlIGNvcmUvYmFzZSAwLjExLjkxCi0KLTIwMTItMDEtMTMgMTg6MDk6NTAgLTA1MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBhZGQgdmlzdWFsIHN0dWRpbyBJREUgZmlsZXMgYW5kIE9TIFggLkRTX1N0b3JlIGZpbGVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODk5Ci0KLTIwMTItMDUtMDMgMDk6MzI6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmg6Ci0JICBqcGVnOiBQb3J0IHRvIDAuMTEgYWdhaW4KLQotMjAxMi0wNC0wNiAxMjoxMzoyNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuaDoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuaDoKLQkgIGpwZWc6IFBvcnQganBlZ2RlYy9qcGVnZW5jIHRvIGJhc2UgdmlkZW8gY2xhc3NlcwotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jCi0JICBleHQvanBlZy9nc3RqcGVnZGVjLmgKLQkgIGV4dC9qcGVnL2dzdGpwZWdlbmMuYwotCSAgZXh0L2pwZWcvZ3N0anBlZ2VuYy5oCi0JICBSZXZlcnRlZCB0byAwLjEwIHZlcnNpb25zIGZvciBub3csIG5leHQgcG9ydCBhZ2Fpbi4KLQotMjAxMi0wNS0xMyAxOToyMToxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvYW5ub2RleC9NYWtlZmlsZS5hbToKLQkqIGV4dC9hbm5vZGV4L2dzdGFubm9kZXguYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGFubm9kZXguaDoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuaDoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuaDoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxwYXJzZXIuYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxwYXJzZXIuaDoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWx0YWcuYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWx0YWcuaDoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWx1dGlscy5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbHV0aWxzLmg6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZW5jLmM6Ci0JICBhbm5vZGV4OiByZW1vdmUgYW5ub2RleCBwbHVnaW4gYW5kIENNTUwgZWxlbWVudHMKLQkgIFRoaXMgbmV2ZXIgcmVhbGx5IHRvb2sgb2ZmIGFuZCBpcyBtb3N0IGxpa2VseSBjb21wbGV0ZWx5Ci0JICB1bnVzZWQuIElmIHRoZXJlIGlzIHN0aWxsIGEgbmVlZCBmb3IgdGhpcywgaXQgc2hvdWxkCi0JICBwcm9iYWJseSBiZSBkb25lIGRpZmZlcmVudGx5LCBwZXJoYXBzIGluc2lkZSBvZ2dkZW11eC9tdXguCi0KLTIwMTItMDUtMTMgMTY6NTk6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTEuOTEgPT09Ci0KLTIwMTItMDUtMTMgMTY6MzE6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMS45MQotCi0yMDEyLTA1LTEzIDE2OjMwOjAzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTItMDUtMTMgMTU6NTY6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZGM3MDIwMyB0byAzNDI5YmE2Ci0KLTIwMTItMDUtMDkgMTU6MTQ6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JICBybmRidWZmZXJzaXplOiBvbmx5IHNlbmQgZmx1c2gtc3RvcCBpZiBpdCB3YXMgYSBmbHVzaGluZyBzZWVrCi0KLTIwMTItMDUtMDkgMTI6NTQ6MTEgKzAyMDAgIFBldGVyIFNlaWRlcmVyIDxwcy5yZXBvcnRAZ214Lm5ldD4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMnNyYzogZml4IHY0bDJfc3RkX2lkIGxvZ2dpbmcKLQkgIGlucHV0LnN0ZCBpcyBvZiB0eXBlIHY0bDJfc3RkX2lkIHdoaWNoIGlzIGRlZmluZWQgYXMgNjQtYml0IHVuc2lnbmVkIGludGVnZXIuCi0JICBDYXN0aW5nIHRvIHVpbnQgbWVhbnMgdGhlIGhpZ2hlciBiaXRzLCB3aWNoIGFyZSB1c2VkIGZvciB0aGUgcHJpdmF0ZSB2aWRlbwotCSAgc3RhbmRhcmRzIG9mIHRoZSBUSSB2aWRlbyBjYXB0dXJlL2Rpc3BsYXkgZHJpdmVyIGZvciBleGFtcGxlLCBhcmUgbG9zdC4KLQotMjAxMi0wNS0wOSAxMjoyNDozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkgIHJuZGJ1ZmZlcnNpemU6IG11c3Qgc2VuZCBmbHVzaC1zdG9wIGFmdGVyIGFjcXVpcmluZyB0aGUgc3RyZWFtIGxvY2sKLQkgIE90aGVyd2lzZSB0aGUgc3RyZWFtaW5nIHRocmVhZCBtaWdodCBqdXN0IGtlZXAgb24gZ29pbmcgYW5kIHdlCi0JICBtaWdodCBuZXZlciBnZXQgdGhlIHN0cmVhbSBsb2NrLgotCi0yMDEyLTA1LTA5IDExOjE1OjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSAgcm5kYnVmZmVyc2l6ZTogcG9ydCBzZWVraW5nIGNvZGUgdG8gMC4xMQotCi0yMDEyLTA1LTA4IDE5OjA3OjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSAgcm5kYnVmZmVyc2l6ZTogYWRkIHN1cHBvcnQgZm9yIHNlZWtzCi0JICBVc2VmdWwgZm9yIGUuZy4gZmlsZXNyYyAhIHJuZGJ1ZmZlcnNpemUgISBxdWV1ZTIgISAuLi4KLQotMjAxMi0wNS0wOCAxODo0NTozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkgIHJuZGJ1ZmZlcnNpemU6IHNlbmQgU0VHTUVOVCBldmVudCBiZWZvcmUgcHVzaGluZyBidWZmZXJzCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmMKLQotMjAxMi0wNS0wOSAxMToxNTo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogZml4IGNvbXBpbGF0aW9uIGFnYWluCi0KLTIwMTItMDEtMTMgMTA6NDk6NDMgKzAxMDAgIFBhc2NhbCBCdWhsZXIgPHBhYnVobGVyQGNpc2NvLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogY3JlYXRpb24gc2hvdWxkIGJlIHNpZ25hbGVkIGJlZm9yZSB2YWxpZGF0aW9uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODUwCi0KLTIwMTItMDUtMDQgMTU6MjA6NDcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogZG8gbm90IHByb3h5IG91ciBmaWx0ZXIgY2FwcyBkb3duc3RyZWFtIG9uIGNhcHMgcXVlcmllcwotCSAgRG93bnN0cmVhbSBsaWtlbHkgd29uJ3QgYWNjZXB0IHZpZGVvL3gtcmF3IGFuZCB0aGUgY2FwcyBxdWVyeQotCSAgd2lsbCByZXR1cm4gRU1QVFkgY2Fwcy4gSW5zdGVhZCwgY3JlYXRlIGEgY29weSBvZiB0aGUgY2FwcyB0aGF0Ci0JICBoYXMgYWxsIHN0cnVjdHVyZSBuYW1lcyByZXBsYWNlZCBieSAnaW1hZ2UvanBlZycKLQkgIFNpbXBsZSBwaXBlbGluZSB0aGF0IHNob3dzIHRoZSBwcm9ibGVtOgotCSAgZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEgISAidmlkZW8veC1yYXcsIFwKLQkgIHdpZHRoPShpbnQpNjQwLCBoZWlnaHQ9KGludCk0ODAiICEgdmlkZW9zY2FsZSAhIGpwZWdlbmMgISBcCi0JICAiaW1hZ2UvanBlZywgd2lkdGg9KGludCk4MDAsIGhlaWdodD0oaW50KTYwMCIgISBmaWxlc2luayBcCi0JICBsb2NhdGlvbj0vdG1wL2ltYWdlLmpwZwotCi0yMDEyLTA1LTAyIDIxOjE3OjQzICswMjAwICBBbGJhbiBCcm93YWV5cyA8cHJhaGFsQHlhaG9vLmNvbT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBpc29tcDQ6IHNldCBsYXlvdXQ9aW50ZXJsZWF2ZWQgb24gcmF3IGF1ZGlvIGNhcHMKLQkgIFRoaXMgZml4ZXMgYSBub3QtbmVnb3RpYXRlZCBlcnJvciBhdCBsZWFzdCBvbiBtb3YgZmlsZXMgd2l0aAotCSAgdHdvcyBhdWRpbyB3aXRoIHR3byBjaGFubmVscyBhbmQgdmlkZW8gZHZjcC4gQXMgcGxheWJpbiBhbmQgZ3N0LWxhdW5jaAotCSAgc2FtcGxlIGNvbWluZyBmcm9tIHRoZSBxdGRlbXV4LmMgZmlsZSB1c2VzIGF1ZGlvY29udmVydCBhbmQgdGhlIGxhdHRlcgotCSAgcmVxdWlyZSBmb3JtYXQgaW50ZXJsZWF2ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc1MzI2Ci0KLTIwMTItMDUtMDIgMjE6NDk6NTYgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBzeXMvd2F2ZWZvcm0vTWFrZWZpbGUuYW06Ci0JICB3YXZlZm9ybTogTm8gbW9yZSBnc3RpbnRlcmZhY2VzCi0JICBGaXhlcyAjNjc1MzE5Ci0KLTIwMTItMDUtMDIgMjA6MTQ6MjQgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBzeXMvZGlyZWN0c291bmQvTWFrZWZpbGUuYW06Ci0JICBkaXJlY3Rzb3VuZDogTm8gbW9yZSBnc3RpbnRlcmZhY2VzCi0JICBGaXhlcyAjNjc1MzE5Ci0KLTIwMTItMDUtMDEgMTg6NTg6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaDoKLQkgIHZpZGVvbWl4ZXI6IGNoYW5nZSBzaW5rIHBhZCB0ZW1wbGF0ZSBuYW1lIGZyb20gc2lua18lZCB0byBzaW5rXyV1Ci0KLTIwMTItMDQtMzAgMTE6MDA6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IGhhbmRsZSBFT1Mgb24gYWxsIHBhZHMKLQkgIFdoZW4gYWxsIHBhZHMgZ28gdG8gRU9TIGltbWVkaWF0ZWx5LCB3ZSBhcmUgbm90IG5lZ290aWF0ZWQgYW5kIG91ciBjb2xsZWN0ZWQKLQkgIGZ1bmN0aW9uIGlzIGNhbGxlZCAod2l0aG91dCBhbnkgYXZhaWxhYmxlIGRhdGEpLiBIYW5kbGUgdGhpcyBjYXNlIGdyYWNlZnVsbHkuCi0JICBDb25mbGljdHM6Ci0JICBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmMKLQotMjAxMi0wNC0zMCAxMDo1OTozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogaW1wcm92ZSBkZWJ1Z2dpbmcKLQotMjAxMi0wNS0wMSAxMzozMTo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IFVwZGF0ZSBmb3IgYmFzZXNyYyBBUEkgY2hhbmdlcwotCi0yMDEyLTA0LTMwIDIzOjU3OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogZG9uJ3Qgc2V0IHVwIHN0dWZmIGJlZm9yZSB0aGUgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXRzIGFyZSBrbm93bgotCSAgRml4ZXMgY3Jhc2ggb24gc3RhcnR1cC4KLQotMjAxMi0wNC0zMCAxNDowOToyMyArMDIwMCAgUGV0ZXIgU2VpZGVyZXIgPHBzLnJlcG9ydEBnbXgubmV0PgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IGRvbid0IHdyaXRlIHN0cmVhbSBoZWFkZXIgdHdpY2UgZm9yIGZpcnN0IGZpbGUKLQotMjAxMi0wNC0zMCAxMzozMjo0MSArMDIwMCAgUGV0ZXIgU2VpZGVyZXIgPHBzLnJlcG9ydEBnbXgubmV0PgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IGZpeCBidWZmZXIgbGlzdCBzaXplIGNhbGN1bGF0aW9uIGluIHJlbmRlcl9saXN0Ci0JICBGaXggdW5pbml0aWFsaXplZCAnc2l6ZScgdmFyaWFibGUgaW4gY2FsbCB0byBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCgpLgotCi0yMDEyLTA0LTMwIDIxOjU4OjAwICswMTAwICBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSAgbXVsdGlmaWxlOiB1bm5lY2Vzc2FyeSBzaXplIGNoZWNrCi0KLTIwMTItMDQtMzAgMjE6MzA6NTYgKzAxMDAgIEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aTogZml4IGJ1aWxkIGVycm9ycwotCSAgZml4IHJlZHVuZGFudCBkZWNsYXJhdGlvbnMKLQkgIGFuZCBhbHNvIHN0eWxlL2luZGVudCBpc3N1ZXMKLQotMjAxMi0wNC0yNiAxMjo0NzoyNyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IGltcGxlbWVudCBmb3J3YXJkIHNuYXBwaW5nIGtleWZyYW1lIHNlZWtpbmcKLQkgIFJlcXVpcmVzIGFuIGluZGV4LgotCi0yMDEyLTA0LTI2IDEyOjQ2OjExICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpOiBpbXBsZW1lbnQgZm9yd2FyZCBzbmFwcGluZyBrZXlmcmFtZSBzZWVraW5nCi0JICBJbiBwdWxsIG1vZGUgd2l0aCBhbiBpbmRleC4KLQotMjAxMi0wNC0yOCAyMzoxNDoyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JICB0ZXN0czogZml4IG1hdHJvc2thbXV4IHVuaXQgdGVzdCBhZnRlciBtZWRpYSB0eXBlIGNoYW5nZXMKLQotMjAxMi0wNC0yOCAxOTo1Nzo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkgIG1hdHJvc2thOiB1cGRhdGUgZm9yIG1lZGlhIHR5cGUgY2hhbmdlcwotCi0yMDEyLTA0LTI0IDE2OjA4OjQ3ICswMjAwICBpZGMtZHJhZ29uIDxpZGMtZHJhZ29uIGF0IGdteC5kZT4KLQotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkgIGNlbHRkZXBheTogY2FsY3VsYXRlIHNpemUgY29ycmVjdGx5Ci0JICBUaGUgc3VtbWF0aW9uIHdhcyBkb25lIHdyb25nLCBjYXVzaW5nIHRoZSBkZS1wYXlsb2FkZXIgdG8gZXhpdCBpdHMgbG9vcCB0b28KLQkgIGVhcmx5LCBiZWZvcmUgYWxsIGZyYW1lcyBhcmUgcHJvY2Vzc2VkLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3NDQ3MgotCi0yMDEyLTA0LTI0IDE1OjU3OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGltcHJvdmUgZGVidWcKLQotMjAxMi0wNC0yNCAxNTozNDo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBzdGFydCB1bm11dGVkIHdoZW4gcmVxdWVzdGVkCi0JICBXaGVuIHdlIGV4cGxpY2l0ZWx5IHNldCB0aGUgbXV0ZSBwcm9wZXJ0eSB0byBGQUxTRSwgY29ubmVjdCB0byBwdWxzZWF1ZGlvIHdpdGgKLQkgIHRoZSBQQV9TVFJFQU1fU1RBUlRfVU5NVVRFRCBmbGFnIHNldCwgb3RoZXJ3aXNlIHB1bHNlYXVkaW8gd2lsbCB1c2UgaXRzCi0JICBwcmV2aW91c2x5IHVzZWQgdmFsdWUgKHdoaWNoIG1pZ2h0IHN0YXJ0IHRoZSBzdHJlYW0gbXV0ZWQpLgotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MjQwMQotCi0yMDEyLTA0LTI1IDA5OjQxOjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBpbXByb3ZlIHRpbWVzdGFtcCBjb2RlCi0JICBTYW1wbGUgdGhlIHBpcGVsaW5lIGNsb2NrIGFuZCBkZXZpY2UgY2xvY2sgY2xvc2VyIHRvIGVhY2hvdGhlciB0byByZWR1Y2Ugaml0dGVyLgotCSAgRG9uJ3Qgc3VidHJhY3QgdGhlIGZyYW1lIGR1cmF0aW9uIGZyb20gdGhlIHRpbWVzdGFtcCB3aGVuIHdlIGNhbiB1c2UgdGhlIGRldmljZQotCSAgdGltZXN0YW1wcy4KLQkgIEFzc3VtZSBhIGRlbGF5IG9mIDEgZnJhbWUgaW4gcmVhZC13cml0ZSBtb2RlLgotCi0yMDEyLTA0LTI0IDEyOjM3OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMjogdXNlIGRyaXZlciB0aW1lc3RhbXBzCi0JICBVc2UgdGhlIGRyaXZlIHRpbWVzdGFtcHMgZm9yIHRpbWVzdGFtcGluZyBvdXRnb2luZyBidWZmZXJzLgotCi0yMDEyLTA0LTIzIDE4OjAxOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDI6IEltcHJvdmUgYnVmZmVyIG1hbmFnZW1lbnQKLQkgIFF1ZXJ5IHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIGJ1ZmZlcnMgd2hlbiBkb2luZyBzZXRfY29uZmlnKCkuIFRoaXMgYWxsb3dzIHVzIHRvCi0JICBjb25maWd1cmUgdGhlIHBhcmVudCBidWZmZXJwb29sIHdpdGggdGhlIG51bWJlciBvZiBidWZmZXJzIHRvIHByZWFsbG9jYXRlLgotCSAgS2VlcCB0cmFjayBvZiB0aGUgcHJvdmlkZWQgYWxsb2NhdG9yIGFuZCB1c2UgaXQgd2hlbiB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEKLQkgIGJ1ZmZlciBpbiBSVyBtb2RlLgotCSAgV2hlbiB3ZSBhcmUgY2FuIG5vdCBhbGxvY2F0ZSB0aGUgcmVxdWVzdGVkIG1heF9idWZmZXJzIGFtb3VudCBvZiBidWZmZXJzLCBtYWtlCi0JICBzdXJlIHdlIGtlZXAgMiBidWZmZXJzIGFyb3VuZCBpbiB0aGUgcG9vbCBhbmQgY29weSB0aGVtIGludG8gYW4gb3V0cHV0IGJ1ZmZlci4KLQkgIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgYnVmZmVyIHRvIGNhcHR1cmUgaW50by4gV2UgYWxzbyBuZWVkIHRvCi0JICBkZXRlY3QgdGhvc2UgY29waWVkIGJ1ZmZlcnMgYW5kIHVucmVmIHRoZW0gd2hlbiB0aGV5IHJldHVybiB0byB0aGUgcG9vbC4KLQotMjAxMi0wNC0yMyAxNjo1MToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGZyZWUgdGhlIHF1ZXVlZCBidWZmZXJzCi0JICBPbmx5IGZyZWUgdGhlIHF1ZXVlZCBidWZmZXJzIHRoYXQgd2Uga2VlcCB0cmFjayBvZiBpbiBvdXIgYnVmZmVyIGFycmF5LiBmb3IgcncKLQkgIGlvLW1vZGUsIHdlIGRvIGFsbG9jYXRlIGJ1ZmZlcnMgYnV0IHdlIGRvbid0IGtlZXAgdHJhY2sgb2YgdGhlbSBpbiB0aGUgYnVmZmVyCi0JICBhcnJheS4KLQotMjAxMi0wNC0yMyAxNjoxMDoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IG1hcmsgbWVtb3J5IGFzIG5vLXNoYXJlCi0JICBXZSBkb24ndCBzdXBwb3J0IHNoYXJpbmcgb3VyIG1tYXBwZWQgbWVtb3J5IHNvIG1hcmsgaXQgYXMgTk9fU0hBUkUuCi0KLTIwMTItMDQtMjMgMTY6MDk6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDI6IHJlbW92ZSBvbGQgdW51c2VkIGZpbGUKLQotMjAxMi0wNC0yMyAxMzozMjo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMjogcmVtb3ZlIHVudXNlZCBmdW5jdGlvbgotCi0yMDEyLTA0LTExIDEyOjQyOjE3ICswMTAwICBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzQGhhZGVzcy5uZXQ+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBIYW5kbGUgaWN5IGFuZCBpY3l4IFVSSSBzY2hlbWVzCi0JICBBcyBoYW5kbGVkIGJ5IFF1aWNrVGltZSAoZm9yIGljeSksIGFuZCBPcmJhbi9Db2RpbmcgVGVjaG5vbG9naWVzCi0JICBBQUMvYWFjUGx1cyBQbGF5ZXIgKGZvciBpY3l4KS4gU2VlIGFsc286Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0MjA3Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMjg1Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjczODk5Ci0KLTIwMTItMDQtMjMgMTA6MDM6MTkgKzAzMDAgIE1hcnQgUmF1ZHNlcHAgPG1hcnQucmF1ZHNlcHBAY29sbGFib3JhLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgZG9jczogQWRkIFNpbmNlIHRhZyBmb3IgbmV3IEdzdFY0bDJTcmM6OnByZXBhcmUtZm9ybWF0IHNpZ25hbAotCi0yMDEyLTA0LTIzIDEwOjA3OjEyICswMjAwICBDaHJpcyBQYW5rb3cgPGthaW4yMzk2QGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBGaXggdGltZS1kb21haW4gY29udm9sdXRpb24gZm9yIG11bHRpY2hhbm5lbCBpbnB1dAotCSAgRml4ZXMgYnVnICM2NzQwMjUuCi0KLTIwMTItMDQtMjEgMTE6MDg6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIHBvOiByZW1vdmUgc29tZSBtb3JlIG5vbi1leGlzdGVudCBmaWxlcyBmcm9tIHRoZSBsaXN0Ci0KLTIwMTItMDQtMjEgMTA6MDU6NDUgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIHBvOiBSZW1vdmUgbm9uLWV4aXN0ZW50IHBvdGZpbGVzIGZyb20gdGhlIGxpc3QKLQkgIEZpeGVzICM2NzQ1MTgKLQotMjAxMi0wNC0yMCAxODoxMzoxNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jOgotCSAgdGVzdHM6IG9zczQ6IGxpbWl0IHRlc3Qgc2NvcGUKLQotMjAxMi0wNC0yMCAxODoxMzowMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBzeXMvb3NzNC9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uYzoKLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uaDoKLQkqIHN5cy9vc3M0L29zczQtbWl4ZXItZW51bS5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci1lbnVtLmg6Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLXNsaWRlci5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci1zbGlkZXIuaDoKLQkqIHN5cy9vc3M0L29zczQtbWl4ZXItc3dpdGNoLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLXN3aXRjaC5oOgotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci5oOgotCSogc3lzL29zczQvb3NzNC1wcm9wZXJ0eS1wcm9iZS5jOgotCSogc3lzL29zczQvb3NzNC1wcm9wZXJ0eS1wcm9iZS5oOgotCSogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNpbmsuaDoKLQkqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNvdXJjZS5oOgotCSAgb3NzNDogcG9ydCB0byAwLjExCi0KLTIwMTItMDQtMjAgMTg6MTI6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogc3lzL29zcy9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3MvZ3N0b3NzYXVkaW8uYzoKLQkqIHN5cy9vc3MvZ3N0b3NzaGVscGVyLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5oOgotCSogc3lzL29zcy9nc3Rvc3NtaXhlci5jOgotCSogc3lzL29zcy9nc3Rvc3NtaXhlci5oOgotCSogc3lzL29zcy9nc3Rvc3NtaXhlcmVsZW1lbnQuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50Lmg6Ci0JKiBzeXMvb3NzL2dzdG9zc21peGVydHJhY2suYzoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJ0cmFjay5oOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuaDoKLQkgIG9zczogcG9ydCB0byAwLjExCi0KLTIwMTItMDQtMjAgMTY6NDk6NTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgIG11bHRpcGFydGRlbXV4OiBmaXJzdCBhY3RpdmF0ZSBwYWQgdGhlbiBzZXQgY2FwcwotCi0yMDEyLTA0LTIwIDEzOjM1OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogc2V0IGNhcHMgb24gc3JjcGFkCi0JICBGaXhlcyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0MjE5Ci0KLTIwMTItMDQtMTkgMTQ6MTY6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiB1cGRhdGUgZm9yIHZpZGVvIGFwaSBjaGFuZ2UKLQotMjAxMi0wNC0xOSAxMjozODo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogZml4IGNvbXBpbGF0aW9uIG9uIG9sZGVyIHY0bDIKLQkgIEZpeCBjb21waWxhdGlvbiBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBIMjY0IGZvcm1hdCBpcyBub3QgZGVmaW5lZC4KLQotMjAxMi0wNC0xOSAxMjoyMDo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSogZXh0L3JhdzEzOTQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdmlkZW86IFVwZGF0ZSBmb3IgbGliZ3N0dmlkZW8gQVBJIGNoYW5nZXMKLQotMjAxMi0wNC0xOSAwODoyNzowMSArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMnNyYzogQWxsb3cgbXBlZy10cyBjYW1lcmFzIHRvIG5lZ29jaWF0ZSBmb3JtYXQKLQkgIFRoaXMgcmVtb3ZlcyBhbiB1Z2x5IGhhY2sgdW50aWwgdGhlIHJlYXNvbiBmb3IgdGhlIGhhY2sgY2FuIGJlIGRvY3VtZW50ZWQKLQotMjAxMi0wNC0xOSAwOTo1MDoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJzcmM6IEZpeCBtZXJnZQotCi0yMDEyLTA0LTE5IDA5OjQwOjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMnNyYzogUmVuYW1lIHByZS1zZXQtZm9ybWF0IHNpZ25hbCB0byBwcmVwYXJlLWZvcm1hdAotCi0yMDEyLTA0LTE2IDIyOjA4OjIxICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyc3JjOiBBZGQgSDI2NCBlbmNvZGVkIHN0cmVhbSBzdXBwb3J0IHRvIHRoZSBjYXBzCi0JICBUaGlzIGlzIG5vdCBlbm91Z2ggdG8gcHJvcGVybHkgc3VwcG9ydCBIMjY0IGNhbWVyYXMsIGJ1dCBpdCB3aWxsCi0JICBhbGxvdyBhbiBIMjY0IHN0cmVhbSB0byBiZSBnZW5lcmF0ZWQgYnkgdjRsMnNyYyB1c2luZyB0aGUgZGVmYXVsdAotCSAgc2V0dGluZ3Mgb2YgdGhlIGNhbWVyYS4gSWYgdXNlZCB3aXRoIHRoZSBwcmUtc2V0LWZvcm1hdCBzaWduYWwsIHRoZQotCSAgSDI2NCBlbmNvZGVyIGNhbiBiZSBmdWxseSBjb25maWd1cmVkLgotCSAgQ29uZmxpY3RzOgotCSAgc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCi0KLTIwMTItMDQtMTYgMjI6MDY6MjEgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyLy5naXRpZ25vcmU6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyLW1hcnNoYWwubGlzdDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IEFkZGluZyBhIHByZS1zZXQtZm9ybWF0IHNpZ25hbAotCSAgSW4gb3JkZXIgdG8gc3VwcG9ydCBVVkMgSDI2NCBlbmNvZGluZyBjYW1lcmFzLCBhbiBIMjY0IFByb2JlJkNvbW1pdAotCSAgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSBub3JtYWwgdjRsMiBzZXQtZm9ybWF0LiBUaGlzIG5ldyBzaWduYWwgaXMKLQkgIG1lYW50IHRvIGFsbG93IGFuIGV4dGVybmFsIGFwcGxpY2F0aW9uIG9yIGJpbiB0byBkbyBpdC4KLQkgIEl0IGFsc28gc2VydmVzIHRvIGV4cG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgYnkgdjRsMnNyYyBpbiBjYXNlCi0JICBzb21lIGN1c3RvbSBpb2N0bHMgbmVlZCB0byBiZSBjYWxsZWQuCi0JICBDb25mbGljdHM6Ci0JICBzeXMvdjRsMi9NYWtlZmlsZS5hbQotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jCi0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmMKLQotMjAxMi0wNC0xOCAxNzowOTo0NSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTRwcm9iZS5jOgotCSogZXh0L3JhdzEzOTQvZ3N0MTM5NHByb2JlLmg6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkgIGR2MTM5NDogcG9ydCB0byAwLjExCi0KLTIwMTItMDQtMTcgMTU6MTQ6MjcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5oOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5oOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjJwYWQuaDoKLQkgIGNvbGxlY3RwYWRzMjogcmVuYW1lIHRvIGNvbGxlY3RwYWRzCi0KLTIwMTItMDQtMTYgMTY6Mzc6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIG1pc2M6IGNoYWluIHVwIHRvIGNvbGxlY3RwYWRzIGV2ZW50IGhhbmRsZXIKLQotMjAxMi0wNC0xNiAwOTowOToxMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2ZGIyNWJlIHRvIGRjNzAyMDMKLQotMjAxMi0wNC0xNSAyMjo0OTo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDI6IHVwZGF0ZSBmb3Igb2dnIG1lZGlhIHR5cGUgY2hhbmdlcwotCi0yMDEyLTA0LTEzIDE2OjU0OjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuaDoKLQkgIHNtcHRlOiB1c2Ugc29tZSBtb3JlIGJvaWxlcnBsYXRlCi0KLTIwMTItMDQtMTMgMTY6NTQ6NTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx4L2dzdGZseGRlYy5jOgotCSAgZmx4ZGVjOiBpbXByb3ZlIHNlZ21lbnQgaGFuZGxpbmcKLQkgIC4uLiB0byBzZW5kIGEgcHJvcGVyIFRJTUUgc2VnbWVudCBkb3duc3RyZWFtLgotCi0yMDEyLTA0LTEzIDE2OjU0OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmg6Ci0JICBmbHhkZWM6IHBvcnQgdG8gMC4xMQotCi0yMDEyLTA0LTEzIDE2OjU0OjQyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guaDoKLQkgIHZpZGVvYm94OiBhZGp1c3QgdG8gZGVwcmVjYXRlZCBHTXV0ZXggc2V0dXAKLQotMjAxMi0wNC0xMyAxNjo1NDozOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94Lmg6Ci0JICB2aWRlb2JveDogcG9ydCB0byAwLjExCi0KLTIwMTItMDQtMTMgMTY6NTQ6MzEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jOgotCSAgYWxwaGEsIHNtcHRlOiBhZGp1c3QgdG8gcmVtb3ZlZCBjb2xvci1tYXRyaXggY2FwcyBmaWVsZAotCi0yMDEyLTA0LTEzIDE2OjI3OjM0ICswMjAwICBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwgPHZqYXF1ZXpAaWdhbGlhLmNvbT4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JICB2NGwyOiBlbnN1cmUgYXV0b2dlbmVyYXRlZCBmaWxlcyBhcmUgY3JlYXRlZAotCSAgVGhlIHR1bmVyIG1hcnNoYWwgYW5kIGVudW10eXBlcyBhcmUgYXV0b2dlbmVyYXRlZCwgYW5kIHRoZXkgbmVlZAotCSAgdG8gYmUgY3JlYXRlZCBiZWZvcmUgdGhlIGNvbXBpbGF0aW9uIG9mIGdzdHY0bDJ0dW5lci5jCi0JICBUaGlzIHBhdGNoIGFkZHMgdGhlIGF1dG9tYWtlIGluc3RydWN0aW9uIGZvciBlbnN1cmluZyB0aGUKLQkgIGF1dG9nZW5lcmF0aW9uIG9mIHRob3NlIGZpbGVzIHByZXZpb3VzIHRoZSBjb21waWxhdGlvbi4KLQotMjAxMi0wNC0xMyAxMzo0MTo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IE1vZGVybml6ZSBhdXRvdG9vbHMgc2V0dXAgYSBiaXQKLQkgIEFsc28gd2Ugbm93IG9ubHkgY3JlYXRlIHRhci5iejIgYW5kIHRhci54eiB0YXJiYWxscy4KLQotMjAxMi0wNC0xMyAxMzozNzoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA0NjRmZTE1IHRvIDZkYjI1YmUKLQotMjAxMi0wNC0xMyAxMzowNDoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGV4dC9wdWxzZS9NYWtlZmlsZS5hbToKLQkqIGV4dC9wdWxzZS9wbHVnaW4uYzoKLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VtaXhlci5oOgotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVydHJhY2suYzoKLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVydHJhY2suaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmg6Ci0JKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9vdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9vdmVybGF5Lmg6Ci0JKiBzeXMvdjRsMi90dW5lci1tYXJzaGFsLmxpc3Q6Ci0JKiBzeXMvdjRsMi90dW5lci5jOgotCSogc3lzL3Y0bDIvdHVuZXIuaDoKLQkqIHN5cy92NGwyL3R1bmVyY2hhbm5lbC5jOgotCSogc3lzL3Y0bDIvdHVuZXJjaGFubmVsLmg6Ci0JKiBzeXMvdjRsMi90dW5lcm5vcm0uYzoKLQkqIHN5cy92NGwyL3R1bmVybm9ybS5oOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9wdWxzZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBVcGRhdGUgZXZlcnl0aGluZyBmb3IgdGhlIHJlbW92YWwgb2YgdGhlIGludGVyZmFjZSBsaWJyYXJ5IGFuZCBtaXhlci90dW5lciBpbnRlcmZhY2VzCi0KLTIwMTItMDQtMTIgMTU6NTA6MTYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmM6Ci0JICBydHA6IFVzZSB1bmNoZWNrZWQgdmFyaWFudCBvZiBHc3RCeXRlV3JpdGVyIHdoZXJlIGFwcGxpY2FibGUKLQkgIFRoZSBzaXplIHdhcyBjaGVja2VkIGJlZm9yZQotCi0yMDEyLTA0LTEyIDE1OjQ5OjQ0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBHc3RCeXRlUmVhZGVyL1dyaXRlcgotCi0yMDEyLTA0LTEyIDE1OjQ4OjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5jOgotCSAgaXNvbXA0OiBDaGVjayByZXR1cm4gdmFsdWUgb2YgR3N0Qnl0ZVdyaXRlcgotCSAgQW5kIHVzZSB1bmNoZWNrZWQgdmFyaWFudCBvZiBHc3RCeXRlUmVhZGVyIHdoZXJlIGFwcGxpY2FibGUKLQotMjAxMi0wNC0xMiAxNTo0ODowMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBVc2UgdW5jaGVja2VkIHZhcmlhbnQgb2YgR3N0Qnl0ZVJlYWRlcgotCSAgV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IDcgYnl0ZXMgKGNoZWNrZWQgYWJvdmUpCi0KLTIwMTItMDQtMTIgMTU6NDc6NDkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgR3N0Qnl0ZVdyaXRlcgotCi0yMDEyLTA0LTEyIDE1OjQ3OjI0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBHc3RCaXRSZWFkZXIvR3N0Qnl0ZVJlYWRlcgotCi0yMDEyLTA0LTEyIDExOjU3OjU5ICswMTAwICB1cmFldXMgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIEFkZCBpbnRlcmxlYXZlIHBsdWdpbiB0byBzcGVjIGZpbGUKLQotMjAxMi0wNC0xMiAxMToxOTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMS45MCA9PT0KLQotMjAxMi0wNC0xMiAxMDoyNzozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMS45MAotCi0yMDEyLTA0LTEyIDEwOjI2OjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZW8ucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTItMDQtMTEgMDA6MTk6MzAgKzA0MDAgINCg0YPRgdC70LDQvSDQmNC20LHRg9C70LDRgtC+0LIgPGxybjE5ODZAZ21haWwuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBGaXggZm9ybWF0IHN0cmluZwotCSAgRml4ZXMgIzY3Mzg1OQotCi0yMDEyLTA0LTExIDAwOjE5OjE2ICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3Jtc2luay5jOgotCSAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQotCSAgRml4ZXMgIzY3Mzg1OQotCi0yMDEyLTA0LTEwIDExOjU3OjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAnCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZmx2L2dzdGZsdmRlbXV4LmMKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCi0KLTIwMTItMDQtMTAgMTE6Mzc6NDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHNvbWUgbW9yZSBzZWdtZW50IGhhbmRsaW5nIHR3ZWFraW5nCi0KLTIwMTItMDQtMTAgMDA6NTE6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5LmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZGVjLmM6Ci0JKiBleHQvbGlibW5nL2dzdG1uZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JKiBleHQvbWlrbW9kL2dzdG1pa21vZC5jOgotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXIuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2M6Ci0JKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2VjaG8uYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzZGVidWcuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHBsdWdpbi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0b3AuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJpcHBsZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS93ZWJtLW11eC5jOgotCSogZ3N0L21lZGlhbi9nc3RtZWRpYW4uYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzoKLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50LmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKLQkqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICBVc2UgbmV3IGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEoKQotCi0yMDEyLTA0LTA5IDEyOjU1OjM0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzoKLQkgIHRlc3RzOiBkaXNhYmxlIHNpbXBsZSBzbW9rZWVuYy9kZWMgbGF1bmNoIGxpbmVzIHRlc3QKLQkgIERpc2FibGUgdGVzdCBmb3Igc21va2UgZWxlbWVudHMsIHdoaWNoIGFyZW4ndCBwb3J0ZWQgeWV0Ci0JICAoYW5kIG1heWJlIHNob3VsZG4ndCBiZSBwb3J0ZWQpLgotCi0yMDEyLTA0LTA5IDAwOjE0OjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogbWFrZSBjaGFubmVsLXBvaXNpdGlvbnMgcHJvcGVydHkgYSBHVmFsdWVBcnJheSBhZ2FpbgotCSAgT3IgcGVyaGFwcyBpdCBzaG91bGQganVzdCBiZSBhIGd1aW50NjQgY2hhbm5lbCBtYXNrLCB3aGljaCB3b3VsZAotCSAgYmUgbmljZXIgaW4gQywgYnV0IG1vcmUgYXdrd2FyZCBmb3IgYmluZGluZ3MgKGV2ZW4gbW9yZSBzbyBzaW5jZQotCSAgd2UgY2FuJ3QgYWRkIGEgZmxhZ3MgdHlwZSBmb3IgaXQsIHNpbmNlIHRoYXQgb25seSBzdXBwb3J0cyBndWludAotCSAgc2l6ZSBmbGFncykuIEZpeGVzIHdhdmVuYyB1bml0IHRlc3QuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5NjQzCi0KLTIwMTItMDQtMDYgMTY6MDM6NDcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGNsZWFubHkgaW5pdGlhbGl6ZSBhbmQgc2V0IG5lZWRlZCBzZWdtZW50Ci0JICBGaXhlcyAjNjczMTY1LgotCi0yMDEyLTA0LTA1IDE3OjE3OjIyIC0wNDAwICBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBGaXggdGhyZWFkaW5nIGlzc3VlIGluIGluZGV4IGhhbmRsaW5nCi0KLTIwMTItMDQtMDYgMDk6MTM6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogRG9uJ3QgdXNlIHN0YXRpYyB2YXJpYWJsZXMgdG8gaG9sZCBpbmRleCBhc3NvY2lhdGlvbnMKLQkgIFRoaXMgbm90IHJlYWxseSB0aHJlYWRzYWZlIGluIGFueSB3YXkuCi0KLTIwMTItMDQtMDUgMTk6MTc6NDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkgIHRlc3RzOiBtYWtlIGZldyB0ZXN0cyBtb3JlIHZhbGdyaW5kLWZyaWVuZGx5Ci0KLTIwMTItMDQtMDUgMTk6MTc6NDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGVhdmUuYzoKLQkgIChkZSlpbnRlcmxlYXZlOiBmaXggcG9ydGVkIHVuaXQgdGVzdCBhbmQgZW5hYmxlIGFzIHBvcnRlZAotCi0yMDEyLTA0LTA1IDE5OjE3OjM4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOgotCSAgdGVzdHM6IGNtbWxkZWM6IGFkanVzdCB0byB0YWcgZXZlbnRzIG5vIGxvbmdlciBwb3N0ZWQgb24gYnVzIGJ5IGVsZW1lbnQKLQotMjAxMi0wNC0wNSAxOToxNzoyOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1cGRzcmM6IGNsZWFyIGVycm9yCi0KLTIwMTItMDQtMDUgMTg6NDI6NTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gN2ZkYTUyNCB0byA0NjRmZTE1Ci0KLTIwMTItMDQtMDUgMTg6MDI6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mLmM6Ci0JICBnc3Q6IFVwZGF0ZSBmb3IgR1NUX1BMVUdJTl9ERUZJTkUoKSBBUEkgY2hhbmdlcwotCi0yMDEyLTA0LTA1IDE3OjM2OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2Fubm9kZXgvZ3N0YW5ub2RleC5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvLmM6Ci0JKiBleHQvZHYvZ3N0ZHYuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZy5jOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzoKLQkqIGV4dC9wdWxzZS9wbHVnaW4uYzoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTQuYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXguYzoKLQkqIGV4dC90YWdsaWIvZ3N0dGFnbGlicGx1Z2luLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL3BsdWdpbi5jOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5jOgotCSogZ3N0L2F2aS9nc3RhdmkuYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RkZWJ1Zy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2aWdhdGlvbnRlc3QuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9wbHVnaW4uYzoKLQkqIGdzdC9pc29tcDQvaXNvbXA0LXBsdWdpbi5jOgotCSogZ3N0L2xhdy9hbGF3LmM6Ci0JKiBnc3QvbGF3L211bGF3LmM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS5jOgotCSogZ3N0L21lZGlhbi9nc3RtZWRpYW4uYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZS5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnQuYzoKLQkqIGdzdC9yZXBsYXlnYWluL3JlcGxheWdhaW4uYzoKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtYW5hZ2VyLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwLmM6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NtcHRlL3BsdWdpbi5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvdGVtcGxhdGUuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9wbHVnaW4uYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kcGx1Z2luLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc2F1ZGlvLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LWF1ZGlvLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3JtcGx1Z2luLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgZ3N0OiBVcGRhdGUgZm9yIEdTVF9QTFVHSU5fREVGSU5FKCkgQVBJIGNoYW5nZXMKLQotMjAxMi0wNC0wNSAxMzoyNjoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogVXBkYXRlIHZlcnNpb24gdG8gMC4xMS44OS4xCi0KLTIwMTItMDQtMDQgMjA6MDY6NTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdGVzdHM6IHF0bXV4OiBlbnN1cmUgaW5pdGlhbGl6ZWQgdGVzdCBidWZmZXIgbWVtb3J5Ci0KLTIwMTItMDQtMDQgMTQ6NDE6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9NYWtlZmlsZS5hbToKLQkgIGdzdDogVXBkYXRlIHZlcnNpb25pbmcKLQotMjAxMi0wNC0wNCAxNDozMzoyMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy92ZXJzaW9uLmVudGl0aWVzLmluOgotCSogZXh0L2FhbGliL01ha2VmaWxlLmFtOgotCSogZXh0L2NhaXJvL01ha2VmaWxlLmFtOgotCSogZXh0L2R2L01ha2VmaWxlLmFtOgotCSogZXh0L2ZsYWMvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbToKLQkqIGV4dC9qYWNrL01ha2VmaWxlLmFtOgotCSogZXh0L2pwZWcvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGliY2FjYS9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJwbmcvTWFrZWZpbGUuYW06Ci0JKiBleHQvcHVsc2UvTWFrZWZpbGUuYW06Ci0JKiBleHQvcmF3MTM5NC9NYWtlZmlsZS5hbToKLQkqIGV4dC9zb3VwL01ha2VmaWxlLmFtOgotCSogZXh0L3NwZWV4L01ha2VmaWxlLmFtOgotCSogZXh0L3RhZ2xpYi9NYWtlZmlsZS5hbToKLQkqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSogZ3N0L2FwZXRhZy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdXBhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2F2aS9NYWtlZmlsZS5hbToKLQkqIGdzdC9jdXR0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSogZ3N0L2VxdWFsaXplci9NYWtlZmlsZS5hbToKLQkqIGdzdC9mbHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaWN5ZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaWQzZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9pc29tcDQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbGF3L01ha2VmaWxlLmFtOgotCSogZ3N0L2xldmVsL01ha2VmaWxlLmFtOgotCSogZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpZmlsZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0c3AvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc2hhcGV3aXBlL01ha2VmaWxlLmFtOgotCSogZ3N0L3NtcHRlL01ha2VmaWxlLmFtOgotCSogZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvY3JvcC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3dhdmVuYy9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JKiBwa2djb25maWcvTWFrZWZpbGUuYW06Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHN5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3MvTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3NzNC9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3h2aWRlby9NYWtlZmlsZS5hbToKLQkqIHN5cy9zdW5hdWRpby9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3dhdmVmb3JtL01ha2VmaWxlLmFtOgotCSogc3lzL3hpbWFnZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvcHVsc2UvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgZ3N0OiBVcGRhdGUgdmVyc2lvbmluZwotCi0yMDEyLTA0LTA0IDEyOjEwOjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luLzAuMTAnCi0JICBDb25mbGljdHM6Ci0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmgKLQotMjAxMi0wNC0wMyAxODozNjo1MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IHBsdWcgdGVtcGxhdGUgY2FwcyBsZWFrCi0KLTIwMTItMDQtMDMgMTE6NTA6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBhdmkgb25seSBrbm93cyBhYm91dCBEVFMKLQkgIE9ubHkgc2V0IERUUyBvbiBvdXRnb2luZyBidWZmZXJzIHVubGVzcyB3ZSBoYXZlIGEga2V5ZnJhbWUgYW5kIHRoZW4gd2UgY2FuIHNldAotCSAgdGhlIFBUUyB0byBEVFMgYXMgd2VsbC4KLQotMjAxMi0wNC0wMiAyMzozNTo0MyArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBta3Y6IHBvcnQgdG9jIGNoYW5nZXMgdG8gMC4xMQotCi0yMDEyLTA0LTAyIDIzOjE4OjAwICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JICBNZXJnZSBicmFuY2ggJzAuMTAnCi0JICBDb25mbGljdHM6Ci0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmgKLQotMjAxMi0wMy0yOSAyMzoyMjoyOCArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgbWF0cm9za2E6IGFkZCBHc3RUb2Mgc3VwcG9ydCBmb3IgbXV4ZXIKLQotMjAxMi0wMy0yOSAyMzoxMjoxMyArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYTogYWRkIHN1cHBvcnQgZm9yIEdzdFRvYyBpbiBkZW11eGVyCi0KLTIwMTItMDMtMjkgMjM6MDU6MTQgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogYWRkIGNoYXB0ZXIgc3VwcG9ydCBpbiBHc3RNYXRyb3NrYVJlYWRDb21tb24KLQotMjAxMi0wNC0wMiAxMzowMDoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nb29tMmsxL2xpbmVzLmM6Ci0JICBnb29tMmsxOiBGaXggJ21heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbicgY29tcGlsZXIgd2FybmluZwotCi0yMDEyLTA0LTAyIDExOjEzOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHVzZSB0cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2gKLQotMjAxMi0wMy0zMSAxNTo0Mzo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9lcXVhbGl6ZXIuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOgotCSAgdXBkYXRlIGZvciBjaGlsZCBwcm94eSBhcGkgY2hhbmdlCi0KLTIwMTItMDMtMzAgMTg6MTM6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOgotCSAgdXBkYXRlIGZvciBidWZmZXIgYXBpIGNoYW5nZQotCi0yMDEyLTAzLTMwIDEyOjUzOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuaDoKLQkgIHNwZWV4ZW5jOiBVc2UgbmV3IGdzdF9hdWRpb19lbmNvZGVyX3NldF9oZWFkZXJzKCkgQVBJCi0KLTIwMTItMDMtMzAgMTI6MTg6NDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkgIGV4dDogVXBkYXRlIGZvciBHc3RBdWRpb0VuY29kZXIgQVBJIGNoYW5nZXMKLQotMjAxMi0wMy0yOSAyMzoyMjoyOCArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgbWF0cm9za2E6IGFkZCBHc3RUb2Mgc3VwcG9ydCBmb3IgbXV4ZXIKLQotMjAxMi0wMy0yOSAyMzoxMjoxMyArMDQwMCAgQWxleGFuZGVyIFNhcHJ5a2luIDx4ZWxmaXVtQGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYTogYWRkIHN1cHBvcnQgZm9yIEdzdFRvYyBpbiBkZW11eGVyCi0KLTIwMTItMDMtMjkgMjM6MDU6MTQgKzA0MDAgIEFsZXhhbmRlciBTYXByeWtpbiA8eGVsZml1bUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogYWRkIGNoYXB0ZXIgc3VwcG9ydCBpbiBHc3RNYXRyb3NrYVJlYWRDb21tb24KLQotMjAxMi0wMy0yOSAxNzoyMjoyMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy93YXZwYWNrLmM6Ci0JICB0ZXN0czogd2F2cGFjazogZmV3ZXIgYnVmZmVycyBhcmUgYWxzbyBhZGVxdWF0ZSBhbmQgbW9yZSBjb252ZW5pZW50Ci0KLTIwMTItMDMtMjkgMTc6MjI6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzoKLQkgIHRlc3RzOiB2aWRlb2Nyb3A6IHVubWFwIHZpZGVvIGZyYW1lIGFuZCB1bnJlZiBjYXBzCi0KLTIwMTItMDMtMjkgMTc6MjI6MDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jOgotCSAgdGVzdHM6IGF1ZGlvd3NpbmNiYW5kOiB1bm1hcCBleGFtaW5lZCBvdXRwdXQgYnVmZmVycwotCi0yMDEyLTAzLTI5IDE3OjIxOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogcGx1ZyByZWYgbGVhawotCi0yMDEyLTAzLTI5IDE3OjIxOjUwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogZml4IHN1cHBvcnRlZCB0ZW1wbGF0ZSBjYXBzIGFuZCBzYW1wbGUgcHJvY2Vzc2luZwotCi0yMDEyLTAzLTI5IDE3OjIxOjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgIGFscGhhY29sb3I6IHBsdWcgc3RydWN0dXJlIGxlYWsKLQotMjAxMi0wMy0yOSAxNjowNDoyNiArMDEwMCAgdXJhZXVzIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBVcGRhdGUgc3BlYyBmaWxlIHdpdGggbGF0ZXN0IHBvcnRlZCBwbHVnaW5zCi0KLTIwMTItMDMtMjkgMTU6MDM6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vMC4xMCcKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCi0yMDEyLTAzLTI4IDE2OjI2OjU2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3RhZ3NjaGVja2luZy5jOgotCSAgdGVzdHM6IHRhZ3NjaGVja2luZzogbXV4ZXJzIG5lZWQgVElNRSBmb3JtYXQKLQotMjAxMi0wMy0yOCAxNjoyNjoxNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JICB0ZXN0czogZmxhY2RlYzogbmVlZHMgZmxhY3BhcnNlIG5vd2FkYXlzCi0KLTIwMTItMDMtMjggMTQ6NDk6MDMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICB3YXZwYWNrZW5jOiBxdWVyeSBkb3duc3RyZWFtIGZvciBCWVRFIHNlZWtpbmcgc3VwcG9ydAotCi0yMDEyLTAzLTI4IDE0OjQ4OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogcXVlcnkgZG93bnN0cmVhbSBmb3IgQllURSBzZWVraW5nIHN1cHBvcnQKLQotMjAxMi0wMy0yOCAxNDo0NjowMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IGNsZWFuIHVwIG9ic29sZXRlIGxvZyBzdGF0ZW1lbnQKLQotMjAxMi0wMy0yOCAxMjo0OToxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmM6Ci0JICB1cGRhdGUgZm9yIGJ1ZmZlciBjaGFuZ2VzCi0KLTIwMTItMDMtMjggMTI6MTY6NDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2R5bmFtaWMuYzoKLQkgIHRlc3RzOiBhdWRpb2R5bmFtaWM6IGNvcnJlY3RseSBwb3J0IG9yaWdpbmFsIHRlc3QgdG8gbWluZCBpbiBwbGFjZSB0cmFuc2Zvcm0KLQotMjAxMi0wMy0yOCAxMTowNTo0MyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JICBhdWRpb2Z4OiBtb3JlIGFkanVzdG1lbnQgdG8gY2hhbmdlZCBzZW1hbnRpY3Mgb2YgYXVkaW9maWx0ZXIgX3NldHVwIG1ldGhvZAotCi0yMDEyLTAzLTI4IDExOjEwOjI0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIuYzoKLQkgIHRlc3RzOiBhdWRpb2ZpcmZpbHRlcjogbmVnb3RpYXRlIHRoZSBpbnRlbmRlZCByYXcgYXVkaW8gZm9ybWF0Ci0KLTIwMTItMDMtMjcgMTg6NDE6NDUgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICB3YXZwYWNrcGFyc2U6IGluaXQgZGF0YXN0cnVjdHVyZQotCi0yMDEyLTAzLTI3IDE3OjE4OjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JICBlZmZlY3R2OiBmaXggc3RyaWRlcwotCi0yMDEyLTAzLTI3IDE2OjQxOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgY2FwczogaW1wcm92ZSBjYXBzIGhhbmRsaW5nCi0JICBBdm9pZCBjYXBzIGNvcHkgYW5kIGxlYWtzCi0KLTIwMTItMDMtMjcgMTQ6MDQ6NDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOgotCSAgdGVzdHM6IGljeWRlbXV4OiBhY3RpdmF0ZSBpbnRlcm5hbCB0ZXN0IGhlbHBlciBzcmMgcGFkCi0KLTIwMTItMDMtMjcgMTI6NDQ6NDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMjogdXBkYXRlIGZvciBnZXRfcGFyYW0KLQkgIFJlbW92ZSBjb25zdCBmcm9tIHRoZSBHc3RDYXBzLgotCSAgUGx1ZyBzb21lIEdzdFN0cnVjdHVyZSBsZWFrcwotCi0yMDEyLTAzLTI3IDAwOjAyOjA4ICswMzAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHA6IEZpeCBjb21waWxpbmcgd2l0aCBtaW5ndy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzI4ODAKLQotMjAxMi0wMy0yNiAxODozMTo0MSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmM6Ci0JICB0ZXN0czogcmVwbGF5Z2FpbjogbWlzYyBjb21wYXRpYmlsaXR5IGZpeGVzCi0JICBEaXNjYXJkIGNhcHMgZXZlbnQgd2hlbiBjaGVja2luZyBmb3IgYW5kIGNvdW50aW5nIHZhcmlvdXMgdGFnIGV2ZW50cywKLQkgIGFuZCByZW1vdmUgYWxsIHRlc3Rpbmcgb2YgOCBiaXRzIGRlcHRoIGluIDE2IGJpdHMgd2lkdGggZm9ybWF0IHNpbmNlCi0JICBpdCBubyBsb25nZXIgZXhpc3RzLgotCi0yMDEyLTAzLTI2IDE4OjI4OjI2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgdGVzdHM6IHJ0cDogbWlzYyBjb21wYXRpYmlsaXkgZml4ZXMKLQkgIC4uLiBzdWNoIGFzIGFsd2F5cyBzZXR0aW5nIHBhZCBjYXBzIGFuZCBwcm92aWRpbmcgbmVlZGVkIGNhcHMgZmllbGRzLgotCi0yMDEyLTAzLTI2IDE4OjI2OjQwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYzoKLQkgIHRlc3RzOiB2aWRlb2ZpbHRlcjogZW5zdXJlIGluaXRpYWwgc2VnbWVudCBldmVudAotCi0yMDEyLTAzLTI2IDE4OjI1OjI4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmg6Ci0JICBzaGFwZXdpcGU6IHByb3BlciB2aWRlbyBpbmZvIGFuZCBmcmFtZSBtYW5hZ2VtZW50Ci0JICAuLi4gcGFydGljdWxhcmx5IHNpbmNlIGVhY2ggaW5jb21pbmcgcGFkIGhhcyBhIGRpc3RpbmN0IGZvcm1hdC4KLQotMjAxMi0wMy0yNiAxODoyNDowOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogZW5zdXJlIG91dHB1dCBjYXBzIGFyZSBzZXQgd2hlbiBwdXNoaW5nIG91dHB1dCBkYXRhCi0JICAuLi4gZXZlbiBpZiBzb21lIFNQUy9QUFMgaGFzIG5vdCBwYXNzZWQgYnkgeWV0LgotCi0yMDEyLTAzLTI2IDE4OjIyOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2ZpbHRlcjogYXZvaWQgaG9sZGluZyBvYmplY3QgbG9jayB3aGVuIGNhbGxpbmcgYmFzZXRyYW5zZm9ybSBmdW5jdGlvbgotCi0yMDEyLTAzLTI2IDE4OjIyOjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGZpeCBzb21lIGxvY2sgbWFuYWdlbWVudAotCSAgLi4uIHRvIGF2b2lkIHRyeWluZyB0byB0YWtlIGEgbm9uLXJlY3Vyc2l2ZSBsb2NrIHR3aWNlLgotCi0yMDEyLTAzLTI2IDE4OjIxOjExICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkgIHJ0cEwxNihkZSlwYXk6IGZpeCByYXcgYXVkaW8gZm9ybWF0IGluIHRlbXBsYXRlIGNhcHMKLQotMjAxMi0wMy0yNiAxODoyMDo0MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkgIHJlcGxheWdhaW46IGFsc28gc3RpbGwgcG9zdCB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMKLQotMjAxMi0wMy0yNiAxNTo1OTowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogZG9uJ3QgZXJyb3IgaW4gc2h1dGRvd24KLQkgIERvbid0IGxvZyB3aXRoIHRoZSBFUlJPUiBjYXRlZ29yeSB3aGVuIHdlIGFyZSBzdG9wcGluZyBiZWNhdXNlIHdlIGFyZSBzaHV0dGluZwotCSAgZG93bi4KLQkgIEZpeGVzOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcyODI0Ci0KLTIwMTItMDMtMjYgMTU6NTE6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDI6IGZpeCBsYXRlbmN5Ci0KLTIwMTItMDMtMjYgMTU6MzA6MDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSAgdjRsMjogY2FsbGVkIGJhc2UgY2xhc3Mgc3RhcnQKLQkgIENoYWluIHVwIHRvIHRoZSBiYXNlIGNsYXNzIHN0YXJ0IG1ldGhvZCBzbyB0aGF0IG1ldGFkYXRhIGlzIHByb3Blcmx5IHRhZ2dlZC4KLQkgIFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUuCi0JICBmaXhlczogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MjgxMwotCi0yMDEyLTAzLTI2IDEyOjEyOjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBSZXBsYWNlIG1hc3RlciB3aXRoIDAuMTEKLQotMjAxMi0wMy0yNSAwMDowMDo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuaDoKLQkgIGdka3BpeGJ1Zm92ZXJsYXk6IGFkZCAiYWxwaGEiIHByb3BlcnR5IHRvIHNldCBhbHBoYSBvZiBvdmVybGF5IGltYWdlCi0JICAuLiBvciB0dXJuIHRoZSBvdmVybGF5IG9mZiBieSBzZXR0aW5nIGFscGhhIHRvIDAuMAotCi0yMDEyLTAzLTI0IDA5OjUxOjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogcGx1ZyBjYXBzIGxlYWsKLQotMjAxMi0wMy0yMyAxODo0Nzo0NSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ltYWdlZnJlZXplLmM6Ci0JICB0ZXN0czogaW1hZ2VmcmVlemU6IHJlbW92ZSBleHRyYW5lb3VzIF91bnJlZgotCi0yMDEyLTAzLTIzIDE4OjQ3OjAzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JICB0ZXN0czogYXZpbXV4OiBhZGp1c3QgdG8gbW9kaWZpZWQgc2luayBwYWQgdGVtcGxhdGUgbmFtZQotCi0yMDEyLTAzLTIzIDE4OjQ2OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkgIHRlc3RzOiBxdG11eDogY2xlYW51cCBlbGVtZW50IHNvb25lcgotCSAgLi4uIHRvIGF2b2lkIHN0cmF5IHJlZnMgaW4gc3RpY2t5IGNhcHMgZXZlbnRzLgotCi0yMDEyLTAzLTIzIDE4OjQ1OjU2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdGVzdHM6IGFycmFuZ2UgZm9yIHNlbmRpbmcgYW4gaW5pdGlhbCBzZWdtZW50IGV2ZW50Ci0JICAuLi4gd2hpY2ggaXMgbmVlZGVkIG5vd2FkYXlzIHNpbmNlIHZhcmlvdXMgZ3N0X3NlZ21lbnRfdG9fLi4uCi0JICBubyBsb25nZXIgYXV0b21hdGljYWxseSBzZXQgdGhlIGZvcm1hdCB0byB0aGUgc3BlY2lmaWVkIG9uZQotCSAgKGZyb20gX1VOREVGSU5FRCkuCi0KLTIwMTItMDMtMjMgMTg6NDQ6MTUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBpbW1lZGlhdGVseSByZXR1cm4gR1NUX0ZMT1dfRU9TCi0JICAuLi4gcmF0aGVyIHRoYW4gX09LIHNpbmNlIHdlIHdpbGwgbm90IGJlIGNhcmluZyBhYm91dCBzdWJzZXF1ZW50IGJ1ZmZlcgotCSAgYW55d2F5LgotCi0yMDEyLTAzLTIzIDE4OjQzOjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogZml4IHF1ZXJ5IGFuZCBfZ2V0Y2FwcyBoYW5kbGluZwotCi0yMDEyLTAzLTIzIDE4OjQyOjQ4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGViYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgYXVkaW9meDogYWRqdXN0IHRvIGNoYW5nZWQgc2VtYW50aWNzIG9mIGF1ZGlvZmlsdGVyIF9zZXR1cCBtZXRob2QKLQkgIC4uLiBpbiB0aGF0IGl0IHdpbGwgbm93IGNhbGwgc3ViY2xhc3Mgd2l0aCBpbmZvIG9uIHByb3Bvc2VkIGF1ZGlvIGZvcm1hdAotCSAgd2l0aG91dCBoYXZpbmcgc2V0IHRoYXQgaW5mbyBhbHJlYWR5IGluIGJhc2UgY2xhc3MuICBBcyBzdWNoLAotCSAgc3ViY2xhc3MgY2FuIG5vdCByZWx5IG9uIGF1ZGlvIGZvcm1hdCBpbmZvIGJlaW5nIGF2YWlsYWJsZSB0aGVyZS4KLQotMjAxMS0wNy0xNCAxNjoyMzo0OSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5Lmg6Ci0JICBydHBoMjY0ZGVwYXk6IE1ha2Ugb3V0cHV0IGluIEFWQyBzdHJlYW0gZm9ybWF0IHdvcmsgZXZlbiB3aXRob3V0IGNvbXBsZXRlIHNwcm9wLXBhcmFtZXRlci1zZXQKLQkgIFRoaXMgYWxsb3dzIG91dHB1dHRpbmcgc3RyZWFtcyBpbiBBVkMgZm9ybWF0IGV2ZW4gaWYgdGhlIFNQUy9QUFMgYXJlIHNlbnQgaW5zaWRlCi0JICB0aGUgUlRQIHN0cmVhbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ4NTAKLQkgIFBvcnRlZCBmcm9tIG1hc3RlcgotCi0yMDEyLTAxLTI5IDE4OjM5OjU0ICswMDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgdWRwc2luazogVW5sb2NrIG9uIGVycm9yCi0KLTIwMTItMDMtMjIgMTg6Mjc6MzAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogdXNlIHNpbmsgcGFkIHRlbXBsYXRlIGNhcHMgcmF0aGVyIHRoYW4gc3JjCi0KLTIwMTItMDMtMjIgMTg6MjM6MjIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTItMDMtMjIgMTg6MjE6NTIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5oOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmg6Ci0JICBzbXB0ZTogcG9ydCB0byAwLjExCi0KLTIwMTItMDMtMjIgMTY6MTA6MzMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogaW50ZXJzZWN0IGRvd25zdHJlYW0gYWxsb3dlZCBwZWVyIGNhcHMgd2l0aCBzaW5rIHBhZCB0ZW1wbGF0ZQotCi0yMDEyLTAzLTIyIDE1OjU1OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBiYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTEuMiA9PT0KLQotMjAxMi0wMy0yMiAxNTo1MToxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VvLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSogd2luMzIvY29tbW9uL2dzdHVkcC1tYXJzaGFsLmM6Ci0JICBSZWxlYXNlIDAuMTEuMgotCi0yMDEyLTAzLTIyIDExOjU1OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTItMDMtMjIgMTE6NTM6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIHVucG9ydCBnZGtwaXhidWYKLQkgIG5vdCBtZXJnZWQ6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ4NTAKLQkgIENvbmZsaWN0czoKLQkgIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbQotCSAgZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWwKLQkgIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0Ci0JICBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeQotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmMKLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuaAotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYwotCSAgZXh0L2xpYnBuZy9nc3RwbmdlbmMuYwotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmMKLQkgIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmMKLQkgIGdzdC9mbHYvZ3N0Zmx2bXV4LmMKLQkgIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jCi0KLTIwMTItMDMtMjIgMTE6NDU6MTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkgIHNtcHRlOiBvbmx5IHN0YXJ0IGNvbGxlY3RwYWRzMiBhdCBzdGF0ZSBjaGFuZ2UgcmF0aGVyIHRoYW4gaW5pdAotCi0yMDEyLTAzLTIxIDEzOjIyOjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2FtcGxpZnkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IHVwZGF0ZSBmb3IgbWVtb3J5IGFwaSBjaGFuZ2VzCi0KLTIwMTItMDMtMjAgMTA6MjQ6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgdXBkYXRlIGZvciBtZW1vcnkgYXBpIGNoYW5nZXMKLQotMjAxMi0wMy0xOSAxMjowMTo0MCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IHBlcmZvcm0gYWRkaXRpb25hbCBmcmFtZSBjcmMgY2hlY2sgaWYgYXBwbGljYWJsZQotCSAgLi4uIHN1Y2ggYXMgYSBmcmFtZSBoZWFkZXIgcGFyc2luZyB0aHJvd2luZyBzb21lIHN1c3BpY2lvdXMgd2FybmluZ3MuCi0JICBTbyB3ZSBjYW4gYmUgYSBiaXQgbW9yZSBjb252aW5jZWQgd2UgZGV0ZXJtaW5lIHRoZSByaWdodCBmcmFtZSBlbmQuCi0KLTIwMTItMDMtMTkgMTE6NTg6MTUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBhdm9pZCBpbmRlZmluaXRlIGV4dGVuZGVkIHNlYXJjaCBmb3IgZnJhbWUgZW5kIGlmIHBvc3NpYmxlCi0JICAuLi4gd2hpY2ggaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiBsb2NrZWQgb24gdG8gdGhlIHdyb25nIGZyYW1lIHN0YXJ0Ci0JICBhbmQvb3IgY29ycnVwdCBmcmFtZSBiZWluZyBjcmMgY2hlY2tlZC4KLQotMjAxMi0wMy0xNiAxODoyMzoyOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkgIGZsYWNkZWM6IGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlc2lsaWVuY2UKLQkgIC4uLiBieSBub3RpbmcgdGhhdCBvbmUgb2NjdXJyZWQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgdGhlbiBhcHByb3ByaWF0ZWx5Ci0JICBpZ25vcmluZyBzb21lIHRyYW5zaWVudCBvbmVzLgotCi0yMDEyLTAzLTE5IDEwOjMzOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG5lZ290aWF0ZSBhbiBhbGxvY2F0b3Igb24gdGhlIHNyY3BhZHMKLQkgIFdlIGRvIGFuIEFMTE9DQVRJT04gcXVlcnkgdG8gZmluZCBvdXQgYW4gYWxsb2NhdG9yIGFuZCBwYXJhbWV0ZXJzIG9uIHRoZQotCSAgc3JjcGFkcy4gVGhpcyB3YXkgZGVjb2RlcnMgKGFuZCBzaW5rcykgY2FuIHNwZWNpZnkgdGhlIG1lbW9yeSBhbmQgcGFyYW1ldGVycwotCSAgdGhleSB3YW50IHVzIHRvIHdyaXRlIGludG8uCi0KLTIwMTItMDMtMTcgMjA6NTM6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuaDoKLQkgIGRvY3M6IHVwZGF0ZSBkb2NzIGZvciBuZXcgcHJvcGVydGllcyBhbmQgYWRkIGdka3BpeGJ1Zm92ZXJsYXkgZWxlbWVudAotCSAgU29tZXdoYXQgYXQgbGVhc3QuIE5vIGlkZWEgd2h5IGl0IGRvZXNuJ3QgcGljayB1cCB0aGUgZGVzY3JpcHRpb24KLQkgIG9yIGV4YW1wbGUgcGlwZWxpbmUuCi0KLTIwMTItMDMtMTggMDA6MTE6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbToKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmb3ZlcmxheS5jOgotCSAgZ2RrcGl4YnVmb3ZlcmxheTogbWFrZSBtb3N0IHByb3BlcnRpZXMgY29udHJvbGxhYmxlIGFuZCBmbGFnIHRoZW0gYXMgbXV0YWJsZS1wbGF5aW5nCi0KLTIwMTItMDMtMTcgMjM6NDE6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5Lmg6Ci0JICBnZGtwaXhidWZvdmVybGF5OiBhZGQgcHJvcGVydGllcyBmb3IgcG9zaXRpb25pbmcgYW5kIHNpemluZwotCi0yMDEyLTAzLTE3IDIwOjE4OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zm92ZXJsYXkuaDoKLQkgIGdka3BpeGJ1ZjogYWRkIGdka3BpeGJ1Zm92ZXJsYXkgZWxlbWVudAotCSAgU3RpbGwgbGFja3MgZmVhdHVyZXMgc3VjaCBhcyBwb3NpdGlvbmluZyBvciByZXNpemluZywgb3IKLQkgIGFuaW1hdGlvbnMsIGJ1dCBpdCdzIHVzYWJsZSBhbHJlYWR5LCBhbmQgc3VwcG9ydHMgbG90cyBvZgotCSAgZm9ybWF0cy4KLQotMjAxMi0wMy0xNiAyMjo1MjowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgZG9uJ3QgcG9rZSBpbnRvIGJhc2V0cmFuc2Zvcm0gaW50ZXJuYWxzCi0JICBCdXQgdXNlIHRoZSBtZXRob2RzCi0KLTIwMTItMDMtMTYgMjE6NDc6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBkb24ndCBwYXNzIHJhbmRvbSBwb2ludGVycyB0byBwdWxsX3JhbmdlCi0KLTIwMTItMDMtMTUgMjI6MTU6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JICB1cGRhcnRlIGZvciBidWZmZXJwb29sIGNoYW5nZXMKLQotMjAxMi0wMy0xNSAyMjoxMToxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB1cGRhdGUgZm9yIGJ1ZmZlcnBvb2wgY2hhbmdlcwotCi0yMDEyLTAzLTE1IDIwOjM3OjU2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgYWxsb2NhdGlvbiBxdWVyeSBjaGFuZ2VzCi0KLTIwMTEtMDctMTQgMTY6MjM6NDkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSAgcnRwaDI2NGRlcGF5OiBNYWtlIG91dHB1dCBpbiBBVkMgc3RyZWFtIGZvcm1hdCB3b3JrIGV2ZW4gd2l0aG91dCBjb21wbGV0ZSBzcHJvcC1wYXJhbWV0ZXItc2V0Ci0JICBUaGlzIGFsbG93cyBvdXRwdXR0aW5nIHN0cmVhbXMgaW4gQVZDIGZvcm1hdCBldmVuIGlmIHRoZSBTUFMvUFBTIGFyZSBzZW50IGluc2lkZQotCSAgdGhlIFJUUCBzdHJlYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0ODUwCi0KLTIwMTItMDMtMTUgMTQ6MDY6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB1cGRhdGUgZm9yIGJ1ZmZlcnBvb2wgYXBpIGNoYW5nZQotCi0yMDEyLTAzLTE1IDEzOjM3OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIHVwZGF0ZSBmb3IgbWVtb3J5IGFwaSBjaGFuZ2VzCi0KLTIwMTItMDMtMTUgMTM6MzY6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmM6Ci0JICB1cGRhdGUgZm9yIG1lbW9yeSBhcGkgY2hhbmdlcwotCi0yMDEyLTAzLTE0IDIxOjM2OjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICB1cGRhdGUgZm9yIG1lbW9yeSBhcGkgY2hhbmdlcwotCi0yMDEyLTAzLTE0IDE5OjU1OjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB0YWtlIHBhZGRpbmcgaW50byBhY2NvdW50Ci0KLTIwMTItMDMtMTQgMTc6MDc6NTAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5oOgotCSAgaW1hZ2VmcmVlemU6IHBvcnQgdG8gMC4xMQotCi0yMDEyLTAzLTE0IDE1OjQ1OjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVwbHkgRkFMU2Ugb24gc2VyaWFsaXplZCBxdWVyaWVzCi0KLTIwMTItMDMtMTMgMjM6MDg6MzggKzAxMDAgIEFuZHJlaiBHZWxlbmJlcmcgPGFuZHJlai5nZWxlbmJlcmdAdWRvLmVkdT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmg6Ci0JICBwbmdlbmM6IGFkZCBzdXBwb3J0IGZvciA4LSBhbmQgMTYtYml0IGdyYXkgaW1hZ2VzCi0JICBBZGQgc3VwcG9ydCBmb3IgZGlyZWN0IGVuY29kaW5nIG9mIDgtIGFuZCAxNi1iaXQgYmlnIGVuZGlhbiBncmF5IGltYWdlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzIwMjUKLQotMjAxMi0wMy0xNCAxMToyMTozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JICBtcDR2cGF5OiB3ZSBjYW4gYWxzbyBoYW5kbGUgeC1kaXZ4Ci0KLTIwMTItMDMtMTQgMTA6Mzk6NTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICB3YXZwYWNrZW5jOiBkbyBub3Qgc2V0IG91dHB1dCBjYXBzIGRpcmVjdGx5Ci0JICAuLi4gYnV0IHVzZSBiYXNlIGNsYXNzIGZ1bmN0aW9uIGluc3RlYWQuCi0KLTIwMTItMDMtMTMgMjE6MzE6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JICBtcDR2ZGVwYXk6IGZpeCBidWZmZXIgaGFuZGxpbmcKLQkgIERvbid0IGFsd2F5cyBvdXRwdXQgdGhlIHBheWxvYWQgc3ViYnVmZmVyLCB1c2UgYSBzZXBhcmF0ZSB2YXJpYWJsZSB0bwotCSAgbWFrZSB0aGluZ3MgY2xlYXJlciBhbmQgd2l0aG91dCB0aGUgZXJyb3IuCi0KLTIwMTItMDMtMTMgMjA6NDk6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICB1ZHBzaW5rOiBtYWtlIGJ1ZmZlci1zaXplIHdvcmsgYWdhaW4KLQotMjAxMi0wMy0xMyAyMDozNjo1NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogZml4IFNPX1JDVkJVRiBoYW5kbGluZwotCi0yMDEyLTAzLTEzIDE5OjI2OjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBkb24ndCBsZWFrIHRoZSBhZGRyZXNzCi0KLTIwMTItMDMtMTMgMTk6MjY6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBoMjY0ZGVwYXk6IHVubWFwIG9uIGVtcHR5IHBhY2tldAotCi0yMDEyLTAzLTEzIDE4OjA3OjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IGRvIERUUyBhbmQgUFRTIGNvcnJlY3RseQotCi0yMDEyLTAzLTEzIDE3OjU0OjUwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNldCBEVFMgYW5kIFBUUyBvbiBvdXRwdXQgYnVmZmVycwotCSAgU2V0IFBUUyBhbmQgRFRTIG9uIG91dHB1dCBidWZmZXJzIGluc3RlYWQgb2YganVzdCB0aGUgUFRTLiBJbiBzdHJlYW1pbmcgY2FzZXMKLQkgIHlvdSB3YW50IHRvIHN5bmNocm9uaXplZCBlbmNvZGVkIGRhdGEgYmFzZWQgb24gdGhlIERUUyBiZWNhdXNlIHRoYXQgaXMKLQkgIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy4KLQotMjAxMi0wMy0xMyAxNzo1NDoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXg6IGRlYnVnIGFkZGl0aW9uYWwgc2R0cCBmbGFnCi0KLTIwMTItMDMtMTMgMTc6Mjc6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSAgcnRwOiBmaXggdW5tYXAgY2FsbHMKLQotMjAxMi0wMy0xMyAxMzoyNTowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgcHVsc2U6IGZpeCBmb3JtYXRzLCB3ZSBjYW4gbm90IGhhbmRsZSBTOCBidXQgb25seSBVOAotCi0yMDEyLTAzLTEzIDEyOjQwOjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBmaXggc3RyZWFtaGVhZGVycwotCSAgRml4IHRoZSBjYXBzIG9mIGZsYWNlbmMsIHRoZSByZWZlcmVuY2UgZW5jb2RlciBvbmx5IHN1cHBvcnQgMjQgYml0cyBpbgotCSAgMzIgYml0cy4KLQkgIFNldCBzdHJlYW1oZWFkZXIgb24gb3V0cHV0IGNhcHMuCi0KLTIwMTItMDMtMTIgMTc6MTc6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JICB1cGRhdGUgZm9yIGNhcHMgYXBpIGNoYW5nZXMKLQotMjAxMi0wMy0xMiAxNjo0MzoyNyArMDIwMCAgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmUuYWMgOiBidW1wIEdMaWIgcmVxdWlyZW1lbnQgdG8gMi4zMS4xNAotCSAgRml4ZXMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTkxMQotCi0yMDEyLTAzLTEyIDE1OjI3OjI3ICswMTAwICBSb3NzIEJ1cnRvbiA8cm9zcyBhdCBidXJ0b25pbmkuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBnZW5lcmF0ZSBzZWVrdGFibGVzIGV2ZXJ5IDEwIHNlYyBieSBkZWZhdWx0Ci0JICBTaW5jZSB0aGlzIGlzIHdoYXQgdGhlIGNvbW1hbmQgbGluZSB0b29sIGRvZXMgYXMgd2VsbCwgaXQgc2VlbXMgbGlrZQotCSAgYSBiZXR0ZXIgZGVmYXVsdC4KLQotMjAxMi0wMy0xMCAxMzo0NDowOCArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogb25seSB1bmxvY2sgcGFkIHdoZW4gaXQgd2FzIGxvY2tlZAotCSAgVGhpcyBmaXhlcyB0aGUgbXV0ZXggYmVpbmcgdW5sb2NrZWQgdG9vIG11Y2ggYW5kIGVuZGluZyB1cCBhbGxvd2luZwotCSAgb3RoZXIgdGhyZWFkcyB3aGVuIHRoZXkgc2hvdWxkIG5vdC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE3NzYKLQotMjAxMi0wMy0wNyAxMzozOTo1MCArMDEwMCAgQW5kcmVqIEdlbGVuYmVyZyA8YW5kcmVqLmdlbGVuYmVyZ0B1ZG8uZWR1PgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSAgcG5nZGVjOiBhZGQgc3VwcG9ydCBmb3IgdmlkZW8veC1yYXctZ3JheSBmb3JtYXRzCi0JICBwbmdkZWMgY2FuIG5vdyBkZWNvZGUgZ3JheSA4LSBhbmQgMTYtYml0IGltYWdlcyB3aXRob3V0IGFscGhhIGNoYW5uZWwKLQkgIGRpcmVjdCB0byB2aWRlby94LXJhdy1ncmF5IGZvcm1hdC4gMTYtYml0IGdyYXkgaW1hZ2VzIGhhdmUgYmlnLWVuZGlhbgotCSAgZm9ybWF0LCBiZWNhdXNlIGl0J3MgbmF0aXZlIFBORyBlbmRpYW5uZXNzLiBHcmF5IGltYWdlcyB3aXRoIGFscGhhCi0JICBjaGFubmVsIHN0aWxsIGNvbnZlcnRlZCB0byBSR0JBLgotCSAgU2lnbmVkLW9mZi1ieTogQW5kcmVqIEdlbGVuYmVyZyA8YW5kcmVqLmdlbGVuYmVyZ0B1ZG8uZWR1PgotCi0yMDEyLTAzLTA4IDE3OjA3OjUxICswMTAwICBNYXJjIExlZW1hbiA8bWFyYy5sZWVtYW5AZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBnc3RydHNwc3JjOiBkaXNhYmxlIFJUU1Aga2VlcC1hbGl2ZSBvbiByZXF1ZXN0Ci0KLTIwMTItMDMtMTIgMTQ6NDg6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSAgc21wdGU6IGZpeCBzdHJpZGUgaGFuZGxpbmcKLQotMjAxMi0wMy0xMiAxMjoyMzoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2ZpbHRlci5jOgotCSAgZml4IGZvciBjYXBzIF9ub3JtYWxpemUgY2hhbmdlcwotCi0yMDEyLTAzLTEyIDExOjQ3OjM1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBmaXggZm9yIGNhcHMgYXBpIGNoYW5nZQotCi0yMDEyLTAzLTEyIDEwOjQzOjU3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBzeXMvb3NzNC9vc3M0LWF1ZGlvLmM6Ci0JICBmaXggZm9yIF9kb19zaW1wbGlmeSBjaGFuZ2VzCi0KLTIwMTItMDMtMTIgMDg6NDg6MzIgKzAxMDAgIE5pY29sYSBNdXJpbm8gPG5pY29sYS5tdXJpbm9AZ21haWwuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgZ3N0OiBGaXggc29tZSBxdWVyeSBsZWFrcwotCi0yMDEyLTAzLTExIDE5OjA2OjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBmaXggZm9yIGNhcHMgYXBpIGNoYW5nZXMKLQotMjAxMi0wMy0xMSAxOTowNjozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIGZpeCBmb3IgY2FwcyBhcGkgY2hhbmdlcwotCi0yMDEyLTAzLTEwIDEwOjUxOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkgIGZpeCB0ZW1wbGF0ZSBjYXBzIHJlZmNvdW50Ci0KLTIwMTItMDMtMDkgMTU6NTM6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGZpeCB1c2Ugb2YgQUNfTEFOR19QUk9HUkFNCi0JICBObyBuZWVkIHRvIGluY2x1ZGUgdGhlIGludCBtYWluICgpIHsgfSBiaXRzLCB0aGUgYm9keSBpcyBlbm91Z2guCi0KLTIwMTItMDMtMDkgMTU6MjU6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGZpeCBhdXRvZ2VuLnNoIHdhcm5pbmdzCi0JICBjb25maWd1cmUuYWM6NDEwOiB3YXJuaW5nOiBBQ19MQU5HX0NPTkZURVNUOiBubyBBQ19MQU5HX1NPVVJDRSBjYWxsIGRldGVjdGVkIGluIGJvZHkKLQotMjAxMi0wMy0wOCAxMzowNjoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2FhbGliL2dzdGFhc2luay5oOgotCSAgYWFzaW5rOiBwcm9wb3NlIHZpZGVvbWV0YSB1cHRyZWFtCi0JICBzdWJjbGFzcyBmcm9tIHZpZGVvc2luay4KLQkgIFByb3Bvc2UgdmlkZW9tZXRhIHVwc3RyZWFtIGJlY2F1c2Ugd2UgY2FuIGhhbmRsZSBpdCB3aXRoIHRoZSB2aWRlbyBhcGkuCi0KLTIwMTItMDMtMDggMDE6NTM6NTAgLTA1MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBkbyBub3QgdW5yZWYgc2FtcGxlIGNhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE1MzQKLQotMjAxMi0wMy0wOCAxMTozNjowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXV0b2RldGVjdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JICB0ZXN0czogaW1wcm92ZSBtb3JlIHRlc3RzCi0KLTIwMTItMDMtMDggMTE6MjA6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNzZXR0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYzoKLQkgIHRlc3RzOiBmaXggc29tZSBtb3JlIHRlc3RzCi0KLTIwMTItMDMtMDcgMTU6MjI6MzYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBpbXByb3ZlIGNsZWFudXAKLQkgIFJldXNlIGNsZWFudXAgbWV0aG9kcyB0byBtYWtlIHN1cmUgd2UgcmVtb3ZlIGFsbCBwYWRzIGNvcnJlY3RseQotCi0yMDEyLTAzLTA3IDE1OjAwOjI2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBzZXQgY2FwcyB3aXRob3V0IHRoZSBsb2NrCi0JICBSZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSBzZXR0aW5nIHRoZSBjYXBzIG9uIHRoZSBzcmNwYWQsIHdoaWNoIHRyaWdnZXJzIGFuIGV2ZW50LAotCSAgd2hpY2ggY291bGQgZXZlbnR1YWxseSBjYWxsIGJhY2sgaW50byB1cyBhbmQgY2F1c2UgYSBkZWFkbG9jay4KLQotMjAxMi0wMy0wNyAxNDo1NTowOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSAgcHRkZW11eDogc2V0IGNhcHMgYWZ0ZXIgYWN0aXZhdGluZyB0aGUgcGFkCi0JICBTZXQgdGhlIGNhcHMgYWZ0ZXIgd2UgYWN0aXZhdGVkIHRoZSBwYWQgb3IgZWxzZSBpdCB3aWxsIGp1c3QgZmFpbC4KLQotMjAxMi0wMy0wNyAxNDo1NDoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2xhdy9hbGF3LmM6Ci0JKiBnc3QvbGF3L211bGF3LmM6Ci0JICBsYXc6IGFkZCBsYXlvdXQgdG8gYXVkaW8gY2FwcwotCi0yMDEyLTAzLTA3IDE0OjUxOjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmg6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaDoKLQkgIGxhdzogdXNlIEdzdEF1ZGlvSW5mbwotCSAgVXNlIEdzdEF1ZGlvSW5mbyB0byBnZW5lcmF0ZSBvdXRwdXQgY2Fwcy4KLQotMjAxMi0wMy0wNyAwNDoyMDowMCAtMDUwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRkZW11eDogY292ZXJ0IGFydCB0YWcgdHlwZSBpcyBHc3RTYW1wbGUgbm90IEdzdEJ1ZmZlciBub3cKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE1MzQKLQotMjAxMi0wMy0wNyAxMDoyODo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgcG86IGZpeCBQT1RGSUxFUy5pbiBmb3IgbmV3IHdhdnBhY2twYXJzZSBsb2NhdGlvbiBpbiBzb3VyY2UgdHJlZQotCi0yMDEyLTAzLTA2IDIxOjQ0OjM2IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwOiBDaGFuZ2UgdGhlIGRlZmF1bHQgcG9ydCB0byA1MDA0Ci0JICB1ZHBzcmMvdWRwc2luayBhcmUgYWxtb3N0IGFsd2F5cyB1c2VkIHdpdGggUlRQLCBzbyBsZXQncyB1c2UgYW4KLQkgIFJUUCBwb3J0IGFzIHRoZSBkZWZhdWx0IHBvcnQuICBJdCdzIHVuY2xlYXIgd2h5IDQ5NTEgd2FzIHVzZWQsIGl0Ci0JICBnb2VzIGJhY2sgdG8gZWFybHkgY29tbWl0cyBpbiBDVlMuCi0KLTIwMTItMDMtMDYgMjE6MzY6MDIgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBNZXJnZSBicmFuY2ggJzAuMTEnIG9mIHNzaDovL2dpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kIGludG8gMC4xMQotCi0yMDEyLTAzLTA2IDE1OjU4OjIwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JICBzcGVleGRlYzogdXNlIGJhc2UgY2xhc3MgdGFnIGhhbmRsaW5nIGhlbHBlcgotCSAgLi4uIHNvIGFzIHRvIGVuc3VyZSB0aGVzZSB0byBiZSBoYW5kbGVkIGFuZCBzZW50IGF0IHByb3BlciB0aW1lLgotCi0yMDEyLTAzLTA2IDE0OjI1OjI3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jOgotCSAgd2F2cGFjazogRml4IHBvc3NpYmxlIHVuZGVyZmxvdyBvZiB1bnNpZ25lZCBpbnRlZ2VyIHZhcmlhYmxlCi0KLTIwMTItMDMtMDYgMTQ6MjI6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBGaXggJ2NvbXBhcmlzb24gb2YgdW5zaWduZWQgZXhwcmVzc2lvbiA+PSAwIGlzIGFsd2F5cyB0cnVlJwotCSAgVGhpcyB2YXJpYWJsZSBjYW4gbmV2ZXIgYmUgYmVsb3cgemVybyBhbnl3YXkuCi0KLTIwMTItMDMtMDYgMTQ6MTg6MzMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBVc2UgY29ycmVjdCBlbnVtIGZvciByZXR1cm4gdmFsdWVzCi0KLTIwMTItMDMtMDYgMTQ6MTY6MjEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuYzoKLQkgIGR2ZGVwYXk6IEZpeCAnY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBleHByZXNzaW9uID49IDAgaXMgYWx3YXlzIHRydWUnIGNvbXBpbGVyIHdhcm5pbmcKLQkgIFRoaXMgd2FzIGFuIGFjdHVhbCBidWcgYXMgaXQgY291bGQndmUgY2F1c2VkIHJlYWRpbmcgZnJvbQotCSAgaW52YWxpZCBtZW1vcnkgYXJlYXMgd2hlbiB0aGUgaW5wdXQgaXMgYnJva2VuLgotCi0yMDEyLTAzLTA2IDEzOjIxOjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmFzbToKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVG9wLmluYzoKLQkgIGRlaW50ZXJsYWNlOiBGaXggJ3ZhcmlhYmxlICdvbGRieCcgaXMgdW5pbml0aWFsaXplZCB3aGVuIHVzZWQgaGVyZScgY29tcGlsZXIgd2FybmluZ3MKLQotMjAxMi0wMy0wNiAxMzoxOToyNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCAnaW1wbGljaXQgY29udmVyc2lvbiBmcm9tIGVudW1lcmF0aW9uIHR5cGUgJ0dzdERlaW50ZXJsYWNlRmllbGRzJyB0byBkaWZmZXJlbnQgZW51bWVyYXRpb24gdHlwZSAnR3N0RGVpbnRlcmxhY2VNb2RlJycgY29tcGlsZXIgd2FybmluZwotCi0yMDEyLTAzLTA1IDE1OjI5OjU2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5oOgotCSAgZ2RrOiBjbGVhbnVwcyBhbmQgZml4IHJvd3N0cmlkZQotCSAgRml4IHRoZSBvdXRwdXQgcm93c3RyaWRlLCB3ZSBuZWVkIHRvIHRha2UgdGhlIHN0cmlkZSBvZiB0aGUgb3V0cHV0IHZpZGVvIGZyYW1lLgotCSAgU2luY2Ugd2UgYXJlIGFsc28gZGVhbGluZyB3aXRoIHBsYW5lcywgdGFrZSB0aGUgcGxhbmUgZGF0YSBhbmQgc3RyaWRlLgotCSAgRG9uJ3Qgc3RvcmUgdGhlIHNhbWUgaW5mbyB0d2ljZSBpbiBkaWZmZXJlbnQgdmFyaWFibGVzLgotCi0yMDEyLTAzLTA1IDEzOjMxOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkgIGdka3BpeGJ1ZjogZml4IGV2ZW50IGhhbmRsaW5nCi0KLTIwMTItMDMtMDUgMTI6MjA6MDcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tlbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2twYXJzZS5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdnBhY2suYzoKLQkgIHRlc3RzOiBwb3J0IHdhdnBhY2sgdGVzdHMgdG8gMC4xMQotCi0yMDEyLTAzLTA1IDEzOjM2OjM5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSAgd2F2cGFja2RlYzogcG9ydCB0byAwLjExCi0KLTIwMTItMDMtMDUgMTI6MTc6MzkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmg6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICB3YXZwYWNrZW5jOiBwb3J0IHRvIDAuMTEKLQotMjAxMi0wMy0wNSAxMzozNDozNiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFjay5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgIHdhdnBhY2s6IHJlbW92ZSBsZWdhY3kgd2F2cGFja3BhcnNlCi0KLTIwMTItMDMtMDUgMTI6MTU6NDQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL3BsdWdpbi5jOgotCSAgYXVkaW9wYXJzZXJzOiBwb3J0IHdhdnBhY2twYXJzZSB0byAwLjExCi0KLTIwMTItMDMtMDUgMTM6Mjk6NTkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYwotCSAgc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYwotCSAgc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaAotCSAgc3lzL3Y0bDIvZ3N0djRsMnZpZGVvb3ZlcmxheS5jCi0KLTIwMTItMDMtMDUgMTI6NDM6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHgtcmF3LWJheWVyIC0+IHgtYmF5ZXIKLQotMjAxMi0wMy0wNSAxMToxNzozMCArMDEwMCAgT2xla3NpaiBSZW1wZWwgKEFsZXhleSBGaXNoZXIpIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOgotCSAgdjRsMnNpbms6IGRvbid0IHVzZSBkZXByZWNhdGVkIFhLZXljb2RlVG9LZXlzeW0KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzEyOTkKLQkgIFNpZ25lZC1vZmYtYnk6IE9sZWtzaWogUmVtcGVsIChBbGV4ZXkgRmlzaGVyKSA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0yMDEyLTAzLTA1IDEyOjAzOjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMveGltYWdlL01ha2VmaWxlLmFtOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIHhpbWFnZTogdXNlIG5ldyBzdHlsZSBjYXBzCi0KLTIwMTItMDMtMDUgMTA6NDk6MzMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JICB3YXZwYWNrZGVjOiBhbGxvdyBzb21lIHRpbWVzdGFtcCB0b2xlcmFuY2UgdG8gYXJyYW5nZSBmb3IgcGVyZmVjdCB0aW1lc3RhbXBpbmcKLQkgIC4uLiB3aGljaCBhbHNvIGhhcHBlbnMgdG8gbWFrZSBzb21lIG1vcmUgdW5pdCB0ZXN0cyBwYXNzLgotCi0yMDEyLTAzLTA1IDEwOjQ3OjQ0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSAgd2F2cGFja2RlYzogZml4IGNvcHlpbmcgb3V0cHV0IGRhdGEKLQotMjAxMi0wMy0wNSAxMDo0Njo1MSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkgIHdhdnBhY2tlbmM6IHJlc3RvcmUgbGVnYWN5IGJ1ZmZlciBvZmZzZXQgZGVjb3JhdGluZyBzb21ld2hhdAotCSAgLi4uIGF0IGxlYXN0IHN1ZmZpY2llbnRseSB0byBhaWQgaW4gcmVjb2duaXppbmcgcmV3cml0dGVuIGhlYWRlciBidWZmZXIKLQkgIG1ha2luZyB1bml0IHRlc3QgcGFzcy4KLQotMjAxMi0wMy0wNSAxMDo1MTozMyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIHdhdnBhY2twYXJzZTogaW5pdGlhbGl6ZSBoZWFkZXIgdG8gc2lsZW5jZSBvbGRlciBnY2MgdmVyc2lvbnMKLQotMjAxMi0wMy0wNSAxMDo0NTo0NiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICB3YXZwYWNrcGFyc2U6IHJlbW92ZSBlbXB0eSBsaW5lcyBpbiB2YXJhYmxlIGRlY2xhcmF0aW9ucyBjYXVzZWQgYnkgb2xkIGluZGVudAotCi0yMDEyLTAzLTA1IDEwOjQ0OjU0ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JICBqYWNrOiBmaXggb2J2aW91cyB3cm9uZyBkZWZpbml0aW9uIGZvciB0aGUgbWFzdGVyIGZsYWcKLQotMjAxMi0wMy0wNCAxOTo1NToyNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5oOgotCSAgamFjazogY2hhbmdlIHRoZSB0cmFuc3BvcnQtbW9kZSBlbnVtIGludG8gZmxhZ3MKLQkgIE9uZSBjYW4gdXNlIChvciBub3QgdXNlKSBtYXN0ZXIgYW5kIHNsYXZlIG1vZGUgaW5kZXBlbmRlbnRseS4KLQotMjAxMi0wMy0wMiAxMTo0OTowMiAtMDUwMCAgQW50b2luZSBUcmVtYmxheSA8aGV4YTAwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogc3VwcG9ydCB1cCB0byA2IGNoYW5uZWxzIG9mIEFDLTMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzEyMjAKLQotMjAxMi0wMy0wMyAxMzowNDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBjbGVhciBESVNDT05UIGZsYWcgd2hlbiByZWN5Y2xpbmcgYnVmZmVycyBpbnRvIHRoZSBidWZmZXIgcG9vbAotCSAgVGhlIGJhc2UgY2xhc3MgbWF5IGhhdmUgc2V0IHRoZSBESVNDT05UIGZsYWcgb24gdGhlIGZpcnN0IGJ1ZmZlciBwdXNoZWQKLQkgIG91dC4gV2UgbmVlZCB0byBjbGVhciB0aGF0IHdoZW4gcmVjeWNsaW5nIGJ1ZmZlcnMgYmFjayBpbnRvIHRoZSBidWZmZXIKLQkgIHBvb2wsIG90aGVyd2lzZSB3ZSBjb25zdGFudGx5IHB1c2ggb3V0IGJ1ZmZlcnMgd2l0aCB0aGUgZGlzY29udCBmbGFnCi0JICBzZXQsIHdoaWNoIG1pZ2h0IHVwc2V0IGRvd25zdHJlYW0gZWxlbWVudHMsIGVzcC4gZm9yIGNvbXByZXNzZWQKLQkgIGZvcm1hdHMgbGlrZSBtcGVnLXRzLgotCi0yMDEyLTAzLTAxIDE0OjE1OjI5ICswMTAwICBPbGVrc2lqIFJlbXBlbCAoQWxleGV5IEZpc2hlcikgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JICB2NGwyc3JjOiBmaXggdjRsMl9tdW5tYXAoKSBmb3IgY29tcHJlc3NlZCBmb3JtYXRzCi0JICBNYWtlIHN1cmUgd2UgYWx3YXlzIGNhbGwgbXVubWFwKCkgd2l0aCB0aGUgc2FtZSBzaXplIHdlIGNhbGxlZCBtbWFwKCkKLQkgIHdpdGggYmVmb3JlLgotCSAgQ3VycmVudCB2NGwyc3JjIHVzZXMgdGhlIHNhbWUgc3RydWN0dXJlIGZvciBWSURJT0NfUVVFUllCVUYsIFZJRElPQ19RQlVGCi0JICBhbmQgdjRsMl9tdW5tYXAgY2FsbHMuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHZpZGVvIGJ1ZmZlciBzaXplIChsZW5ndGgpCi0JICBtYXkgdmFyeSBmb3IgY29tcHJlc3NlZCBvciBlbXVsYXRlZCBidWZzLiBWSURJT0NfUUJVRiB3aWxsIGNoYW5nZSBpdCBpZgotCSAgd2UgcGFzcyB0aGUgcG9pbnRlciBvZiBhIHY0bDJfYnVmZmVyLiBUaGlzIGlzIHdoeSB3ZSBzaG91bGQgYXZvaWQgdXNpbmcKLQkgIHNhbWUgdmFyaWFibGUgZm9yIG1tYXAgYW5kIHZpZGVvIGJ1ZmZlcnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcxMTI2Ci0KLTIwMTItMDMtMDIgMTE6MTc6MzMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2ZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIGdzdC9mbHYvZ3N0aW5kZXguYzoKLQkgIGdzdDogVXBkYXRlIGZvciB0aGUgZ3N0bWFyc2hhbC5bY2hdIHJlbW92YWwKLQotMjAxMi0wMy0wMiAxMDoxMzowOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSAgbWl4ZXIvY29sb3JiYWxhbmNlOiBVcGRhdGUgZm9yIEFQSSBjaGFuZ2VzCi0KLTIwMTItMDMtMDEgMTc6MTU6NTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgIGFhc2luazogZml4IHN0cmlkZQotCi0yMDEyLTAzLTAxIDExOjM2OjM0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBhdWRpb3BhcnNlcnM6IGRpc2FibGUgbm9uLXBvcnRlZCB3YXZwYWNrcGFyc2UKLQotMjAxMi0wMy0wMSAxMToyOTo1MCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYwotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIuYwotCSAgdGVzdHMvZXhhbXBsZXMvdjRsMi9wcm9iZS5jCi0KLTIwMTItMDItMjkgMjI6MzE6MjEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JICBnZGtwaXhidWZzaW5rOiByZW1vdmUgZGVwcmVjYXRlZCBwcm9wZXJ0eQotCi0yMDEyLTAyLTI5IDIyOjMwOjU2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JICBnZGtwaXhidWZzY2FsZTogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkKLQotMjAxMi0wMi0yOSAyMjoyODowMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuaDoKLQkgIGdka3BpeGJ1ZnNpbms6IHBvcnQgdG8gMC4xMQotCi0yMDEyLTAyLTI5IDIyOjI1OjIzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmg6Ci0JICBnZGtwaXhidWZzY2FsZTogcG9ydCB0byAwLjExCi0KLTIwMTItMDItMjkgMjI6MjQ6NDYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5oOgotCSAgZ2RrcGl4YnVmZGVjOiBwb3J0IHRvIDAuMTEKLQotMjAxMi0wMi0yOSAxNzoyNjowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuaDoKLQkgIHVwZGF0ZSBmb3IgbWV0YWRhdGEgQVBJIGNoYW5nZXMKLQotMjAxMi0wMi0yOCAxMzo1MToxMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBhdWRpb3BhcnNlcnM6IGFkZCBiYXNlcGFyc2UgYmFzZWQgd2F2cGFja3BhcnNlCi0KLTIwMTItMDItMjggMTE6Mzg6NTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkgIHVwZGF0ZSBmb3IgbWV0YWRhdGEgdGFncwotCi0yMDEyLTAyLTI3IDIzOjQ2OjE1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2RlYy5jOgotCSAgd2F2cGFja2RlYzogYWRqdXN0IHRvIGF1ZGlvIGZvcm1hdCBsaW1pdGF0aW9ucwotCSAgLi4uIHdoaWNoIGRvZXMgbm90IGFsbG93IGV4cHJlc3NpbmcgYXJiaXRyYXJ5IGRlcHRoIGluIGEgR3N0QXVkaW9Gb3JtYXQuCi0JICBBbHNvIGFkanVzdCB1bml0IHRlc3QgdG8gbW9kaWZpZWQgYmVoYXZpb3VyLgotCi0yMDEyLTAyLTI3IDIzOjQ2OjA4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSAgd2F2cGFja2RlYzogZGV0ZXJtaW5lIGRlcHRoIGZyb20gYnl0ZXMgcGVyIHNhbXBsZQotCSAgLi4uIHJhdGhlciB0aGFuIGZyb20gYml0cyBwZXIgc2FtcGxlLCBzaW5jZSBzcGVjIHN0YXRlcyB2YWx1ZXMgYXJlIGFscmVhZHkKLQkgIGxlZnQganVzdGlmaWVkIHcuci50LiBiaXRzIHBlciBzYW1wbGUgYnV0IG5vdCB3LnIudC4gYnl0ZXMgcGVyIHNhbXBsZQotCSAgKGFuZCBzbyB0aGUgbGF0dGVyIGRldGVybWluZXMgdGhlIG5vcm1hbGl6YXRpb24sIG9yIGluZGljYXRlZCBkZXB0aCkuCi0KLTIwMTItMDItMjcgMjM6NDY6MDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmg6Ci0JICB3YXZwYWNrZGVjOiBwb3J0IHRvIGF1ZGlvZGVjb2RlcgotCi0yMDEyLTAyLTI3IDIzOjQ1OjU0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOgotCSAgd2F2cGFja2VuYzogcG9ydCB0byBhdWRpb2VuY29kZXIKLQkgIEFsc28gYWRqdXN0IHVuaXQgdGVzdCB0byBzbGlnaHRseSBtb2RpZmllZCBiZWhhdmlvdXIuCi0KLTIwMTItMDItMjcgMTQ6NDc6MjUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYW5ub2RleC9nc3Rhbm5vZGV4LmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1scGFyc2VyLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sdGFnLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LWF1ZGlvLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXByb3BlcnR5LXByb2JlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ZpcmZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy93YXZlbmMuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvZmlyZmlsdGVyLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvaWlyZmlsdGVyLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3B1bHNlL3B1bHNlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWFsc2FzcmMtUENNQS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9wcm9iZS5jOgotCSogdGVzdHMvaWNsZXMvdGVzdC1vc3M0LmM6Ci0JICBTdXBwcmVzcyBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiBzZWxlY3RlZCBmaWxlcywgZm9yIGdfdmFsdWVfYXJyYXlfKiBtb3N0bHkKLQotMjAxMi0wMi0yNyAxMzowOTozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleGVuYzogY2hhaW4gdXAgdG8gcGFyZW50IGV2ZW50IGhhbmRsZXIKLQotMjAxMi0wMi0yNyAxMzowNTozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogZml4IGV2ZW50IGhhbmRsaW5nCi0JICBGaXggZG9kZ3kgc2VnbWVudCBldmVudCBoYW5kbGluZwotCSAgQ2hhaW4gdXAgdG8gcGFyZW50IGV2ZW50IGhhbmRsZXIKLQotMjAxMi0wMi0yNyAwOToxNDowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IHVzZSBwdWJsaWMgYXBpCi0JICBpbnN0ZWFkIG9mIHBva2luZyBpbnRvIHRoZSBwcml2YXRlIHN0cnVjdHVyZXMgb2YgdGhlIGJhc2UgY2xhc3MKLQotMjAxMi0wMi0yNyAwMTowOToxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBmbHZtdXgsIG1hdHJvc2thbXV4LCBxdG11eDogaWYgaW4gZG91YnQgYWJvdXQgZG93bnN0cmVhbSBzZWVrYWJpbGl0eSBkZWZhdWx0IHRvIHN0cmVhbWluZz10cnVlCi0JICBJZiBkb3duc3RyZWFtIGRpZG4ndCBhbnN3ZXIgb3VyIFNFRUtJTkcgcXVlcnkgYW5kIHRvbGQgdXMKLQkgIGl0J3Mgc2Vla2FibGUsIGRlZmF1bHQgdG8gc3RyZWFtaW5nPXRydWUuIFdlIGNvdWxkbid0IGRvCi0JICB0aGlzIGluIDAuMTAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGJ1dCB3ZQotCSAgY2FuIGluIDAuMTEuIFBsYXkgaXQgc2FmZS4KLQotMjAxMi0wMi0yNyAwMTowMDowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jCi0KLTIwMTItMDItMjcgMDA6NTY6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBjb21taXQgJ2Y5MjA3NzIyY2E4ZmQ4ZGNjMWU3MjE1ZDhhZjg1ZWZlNGRlYmZkZjQnIGludG8gMC4xMQotCi0yMDEyLTAyLTI3IDAwOjU1OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IGZpeCB1cCBhZnRlciBtZXJnZQotCi0yMDEyLTAyLTI3IDAwOjQ4OjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgY29tbWl0ICczODUxNmFkMzY3MTI4ZDgzZjllMTU2NTI5MDE4YWRiNDQzM2NkMzI4JyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jCi0JICBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmMKLQotMjAxMi0wMi0yNiAyMDozOTo1MiArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkgIGdvb20yazE6IGZpeCBjb21waWxlciB3YXJuaW5nCi0KLTIwMTItMDItMjYgMjA6MzA6MjQgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogZml4IGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMi0wMi0yNSAxNTo1NToxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBjcmVhdGUgc3RyZWFtYWJsZSBvdXRwdXQgaWYgZG93bnN0cmVhbSBpcyBub3Qgc2Vla2FibGUKLQkgIElnbm9yZSB0aGUgInN0cmVhbWFibGUiIHByb3BlcnR5IHNldHRpbmcgYW5kIGNyZWF0ZSBzdHJlYW1hYmxlCi0JICBvdXRwdXQgaWYgZG93bnN0cmVhbSBpcyBrbm93biBub3QgdG8gYmUgc2Vla2FibGUgKGFzIHF1ZXJpZWQKLQkgIHZpYSBhIFNFRUtBQkxFIHF1ZXJ5KS4KLQkgIEZpeGVzIHBpcGVsaW5lcyBsaWtlIHF0bXV4ICEgYXBwc2luayBwb3NzaWJseSBjcmVhdGluZyBzZWVtaW5nbHkKLQkgIGNvcnJ1cHRlZCBvdXRwdXQgaWYgc3RyZWFtYWJsZSBoYXMgbm90IGJlZW4gc2V0IHRvIHRydWUuCi0KLTIwMTItMDItMjUgMTU6NDg6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBjcmVhdGUgc3RyZWFtYWJsZSBvdXRwdXQgaWYgZG93bnN0cmVhbSBpcyBub3Qgc2Vla2FibGUKLQkgIElnbm9yZSB0aGUgInN0cmVhbWFibGUiIHByb3BlcnR5IHNldHRpbmcgYW5kIGNyZWF0ZSBzdHJlYW1hYmxlCi0JICBvdXRwdXQgaWYgZG93bnN0cmVhbSBpcyBrbm93biBub3QgdG8gYmUgc2Vla2FibGUgKGFzIHF1ZXJpZWQKLQkgIHZpYSBhIFNFRUtBQkxFIHF1ZXJ5KS4KLQkgIEZpeGVzIHBpcGVsaW5lcyBsaWtlIGZsdm11eCAhIGFwcHNpbmsgcG9zc2libHkgY3JlYXRpbmcgc2VlbWluZ2x5Ci0JICBjb3JydXB0ZWQgb3V0cHV0IGlmIHN0cmVhbWFibGUgaGFzIG5vdCBiZWVuIHNldCB0byB0cnVlLgotCi0yMDEyLTAyLTI1IDE1OjQwOjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGNyZWF0ZSBzdHJlYW1hYmxlIG91dHB1dCBpZiBkb3duc3RyZWFtIGlzIG5vdCBzZWVrYWJsZQotCSAgSWdub3JlIHRoZSAic3RyZWFtYWJsZSIgcHJvcGVydHkgc2V0dGluZyBhbmQgY3JlYXRlIHN0cmVhbWFibGUKLQkgIG91dHB1dCBpZiBkb3duc3RyZWFtIGlzIGtub3duIG5vdCB0byBiZSBzZWVrYWJsZSAoYXMgcXVlcmllZAotCSAgdmlhIGEgU0VFS0FCTEUgcXVlcnkpLgotCSAgRml4ZXMgcGlwZWxpbmVzIGxpa2Ugd2VibW11eCAhIGFwcHNpbmsgY3JlYXRpbmcgc2VlbWluZ2x5Ci0JICBjb3JydXB0ZWQgb3V0cHV0IGlmIHN0cmVhbWFibGUgaGFzIG5vdCBiZWVuIHNldCB0byB0cnVlLgotCi0yMDEyLTAyLTI0IDExOjAzOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB1cGRhdGUgZm9yIGJhc2V0cmFuc2Zvcm0gY2hhbmdlCi0KLTIwMTItMDItMjQgMTA6MjY6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkgIHVwZGF0ZSBmb3IgbWV0YWRhdGEgY2hhbmdlCi0KLTIwMTItMDItMjMgMDg6NDI6MjUgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZ3N0L2RlYnVndXRpbHMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZGVidWd1dGlscy9lZmVuY2UuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2VmZW5jZS5oOgotCSogZ3N0L2RlYnVndXRpbHMvZWZlbmNlLnZjcHJvajoKLQkgIGVmZW5jZTogcmVtb3ZlIHBsdWdpbgotCSAgVmFsZ3JpbmQgaXMgbXVjaCBtb3JlIHVzZWZ1bCB0aGVzZSBkYXlzLgotCi0yMDEyLTAyLTIzIDEyOjA1OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JICBVcGRhdGUgTkVXUyBhbmQgUkVMRUFTRSBhcyB3ZWxsCi0KLTIwMTItMDItMjMgMTE6MDc6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBCdW1wIHZlcnNpb24gYWZ0ZXIgcmVsZWFzZQotCi0yMDEyLTAyLTIzIDEyOjAzOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2VjaG8uYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5oOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuaDoKLQkgIGF1ZGlvZng6IHJlbW92ZSB0cmFuc2Zvcm0gbG9jayB1c2FnZQotCi0yMDEyLTAyLTIzIDExOjE2OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5oOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmg6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB1cGRhdGUgZm9yIGJhc2V0cmFuc2Zvcm0gbG9jayByZW1vdmFsCi0KLTIwMTItMDItMjIgMjM6MzY6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkgIGRlYnVndXRpbHM6IGRpc2FibGUgZWZlbmNlIHBsdWdpbiBwcm9wZXJseQotCSAgV2UgZG9uJ3Qgd2FudCBpdCBidWlsdCBpZiBtbWFwIGlzbid0IGF2YWlsYWJsZSBlaXRoZXIuLgotCi0yMDEyLTAyLTIyIDE3OjM5OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogZml4IGdldF9jYXBzIGZ1bmN0aW9uIHNvbWUgbW9yZSBzbyB0aGF0IGFsbCBzdHJ1Y3R1cmVzIGhhdmUgY2hhbm5lbCBpbmZvCi0JICBTZXQgY2hhbm5lbHMgYW5kIGNoYW5uZWwtbGF5b3V0IG9uIHRoZSByaWdodCBzdHJ1Y3R1cmU7IHRoYXQgaXMsIHRoZQotCSAgc3RydWN0dXJlIHdlIGFyZSBnb2luZyB0byBhcHBlbmQgdG8gdGhlIGNhcHMgd2UgYXJlIGJ1aWxkaW5nLCBhbmQgbm90Ci0JICB0aGUgc3RydWN0dXJlIHdlIGFyZSB1c2luZyBhcyBhIHRlbXBsYXRlIGZvciBhbGwgdGhlIHN0cnVjdHVyZXMuIEZpeGVzCi0JICBmaXJzdCBzdHJ1Y3R1cmUgb2YgdGhlIHJldHVybmVkIGNhcHMgbm90IGhhdmluZyBhbnkgY2hhbm5lbCBpbmZvIHNldAotCSAgb24gaXQuCi0KLTIwMTItMDItMjIgMTc6MDk6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBtaWNyb29wdGltaXNhdGlvbjogYXZvaWQgdW5uZWNlc3NhcnkgbGlzdCBhbmQgc3RyaW5nIGNvcGllcwotCi0yMDEyLTAyLTIyIDE3OjAzOjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogYXVkaW8gY2FwcyBoYXZlIGEgKmxpc3QqIG9mIGZvcm1hdHMsIG5vdCBhbiBhcnJheSBvZiBmb3JtYXRzCi0JICBBIGxpc3Qgb2YgdGhpbmdzIGluIGNhcHMgaXMgc29tZXRoaW5nIHdoZXJlIG9uZSBpcyBwaWNrZWQgaW4gdGhlCi0JICBjb3Vyc2Ugb2YgbmVnb3RpYXRpb24uIEFuIGFycmF5IGlzIGFsd2F5cyBzb21ldGhpbmcgdGhhdCBvbmx5IG1ha2VzCi0JICBzZW5zZSBhcyBhIHdob2xlIGluIHRoYXQgb3JkZXIuCi0KLTIwMTItMDItMjIgMTg6MDI6MjcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiByZW1vdmUgcG9zdC1wb3J0IGJvZ3VzIF91bnJlZgotCi0yMDEyLTAyLTIyIDE3OjAwOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogcmVtb3ZlIGJvZ3VzIHBhZCBsb2NraW5nIHRoYXQgY2F1c2VzIGRlYWRsb2NrcwotCSAgSXQncyBub3QgY2xlYXIgd2h5IHRoZSBwYWQgb2JqZWN0IGxvY2sgaXMgdGFrZW4gaGVyZS4gQnV0Ci0JICBnc3RfcGFkX3toYXMsZ2V0fV9jdXJyZW50X2NhcHMoKSB3aWxsIHRyeSB0byB0YWtlIHRoZSBsb2NrCi0JICBhcyB3ZWxsIGFuZCBkZWFkbG9jaywgc2luY2UgaXQncyBub3QgcmVjdXJzaXZlLgotCi0yMDEyLTAyLTIyIDE2OjU5OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogc2V0IHJpZ2h0IG51bWJlciBvZiBjaGFubmVscyBvbiBjYXBzIGluIGdldF9jYXBzIGZ1bmN0aW9uCi0KLTIwMTItMDItMjEgMTc6MTY6MzIgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYXV0b2dlbjogYXZvaWQgdG91Y2hpbmcgLnBvIGZpbGVzIGR1cmluZyAnbWFrZScKLQkgIEEgc2ltcGxlIHdvcmthcm91bmQgdG8gZGVhbCB3aXRoIEdOVSBnZXR0ZXh0IGF1dG9tYWtlIGludGVncmF0aW9uCi0JICBmYWlsaW5nIHRvIGRlYWwgd2l0aCBnaXQuICBGaXhlczogIzY2OTIwNwotCi0yMDEyLTAyLTIyIDAyOjA2OjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JICB1cGRhdGUgZm9yIG5ldyBtZW1vcnkgYXBpCi0KLTIwMTItMDItMjEgMTc6NTc6NDQgKzAxMDAgIFZpbmNlbnQgVW50eiA8dnVudHpAZ25vbWUub3JnPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlOiBGaXggYSBidWlsZCB3YXJuaW5nIHdoZW4gY29tcGlsaW5nIHdpdGggYXNzZXJ0cyBkaXNhYmxlZAotCSAgUmV0dXJuIGEgdmFsdWUgZXZlbiBpZiB0aGUgY29kZSB3aWxsIG5ldmVyIGJlIHJlYWNoZWQsIHRvIG1ha2UgY29tcGlsZXJzCi0JICBoYXBweS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzA1NjEKLQotMjAxMi0wMi0yMSAxODo0MjozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuaDoKLQkgIG1wZWdhdWRpb3BhcnNlOiBzdXBwb3J0IHBhcnNpbmcgZnJlZWZvcm0gYml0cmF0ZSBzdHJlYW0KLQotMjAxMi0wMi0yMSAxODozOToxOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5oOgotCSAgbW9ub3Njb3BlOiBwb3J0IHRvIDAuMTEKLQotMjAxMi0wMi0yMSAxMDo1Mzo1NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDEyLTAyLTIwIDEyOjIyOjEyIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cGgyNjRwYXk6IEZvcmNlIGJhc2VsaW5lIGlzIHByb2ZpbGUtbGV2ZWwtaWQgaXMgdW5zcGVjaWZpZWQKLQotMjAxMi0wMi0yMSAxMDo0MDowMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICBpZDN2Mm11eDogRml4IG1lcmdlIGVycm9yCi0KLTIwMTItMDItMjAgMTI6MjI6MTIgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogRm9yY2UgYmFzZWxpbmUgaXMgcHJvZmlsZS1sZXZlbC1pZCBpcyB1bnNwZWNpZmllZAotCi0yMDEyLTAyLTIwIDE2OjM1OjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgZml4IGNvbXBpbGVyIHdhcm5pbmdzCi0KLTIwMTItMDEtMjYgMDM6Mjk6MjggLTA1MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBmaXggY29tcGlsZXIgd2FybmluZ3MKLQotMjAxMi0wMS0yNiAwNjo1ODo0NiAtMDUwMCAgTWF0ZWogS25vcHAgPG1hdGVqLmtub3BwQGdtYWlsLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzCi0KLTIwMTItMDItMTggMTE6Mzg6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSAgdGVzdHM6IGZpeCB1cCBsZXZlbCB0ZXN0IGZvciBHc3RWYWx1ZUxpc3QgLT4gR1ZhbHVlQXJyYXkgY2hhbmdlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwMzAzCi0KLTIwMTItMDItMTYgMTg6MDE6MjkgKzAyMDAgIFBldGVyaXMgS3Jpc2phbmlzIDxwZWNpc2tAZ21haWwuY29tPgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIGxldmVsOiB1c2UgR1ZhbHVlQXJyYXkgaW5zdGVhZCBvZiBHc3RWYWx1ZUxpc3QgaW4gbWVzc2FnZXMKLQkgIFVwZGF0ZWQgR3N0TGV2ZWwgZWxlbWVudCB0byB1c2UgR1ZhbHVlQXJyYXkgaW5zdGVhZCBvZgotCSAgR3N0VmFsdWVMaXN0IGZvciBybXMvcGVhay9kZWNheSBrZXlzIGF0dGFjaGVkIHRvIGVsZW1lbnQKLQkgIG1lc3NhZ2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjcwMzAzCi0KLTIwMTItMDItMTggMDA6MDA6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHdpbjMyOiBiYWNrIHRvIGRldmVsb3BtZW50Ci0KLTIwMTItMDItMTcgMjM6NTQ6MjkgKzAxMDAgIERvbWluaXF1ZSBMZXVlbmJlcmdlciA8ZG9taW5pcXVlLWdub21lemlsbGEgYXQgbGV1ZW5iZXJnZXIubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBObyBsb25nZXIgcmVmZXJlbmNlIGRlcHJlY2F0ZWQgaGVhZGVyIGZpbGVzIHdoaWxlIGJ1aWxkaW5nIGRvY3MuCi0KLTIwMTItMDItMTcgMjM6NDk6MjEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmMKLQotMjAxMi0wMi0xNyAxNzoyMTo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICBlcXVhbGl6ZXI6IGZpeCBzd2l0Y2hpbmcgZnJvbSBwYXNzdGhyb3VnaCB0byBub24tcGFzc3Rocm91Z2ggd2hlbiBwYXJhbWV0ZXJzIGNoYW5nZQotCSAgY29tbWl0IGI1YmYwMjk0IG1vdmVkIHRoZSBpZihuZWVkX25ld19jb2VmZmljaWVudHMpIHNldF9wYXNzdGhyb3VnaChlcXUpCi0JICBhZnRlciB0aGUgaWYoaXNfcGFzc3Rocm91Z2gpIHJldHVybiBGTE9XX09LIHNob3J0Y3V0LCBzbyB0aGUgcGFzc3Rocm91Z2gKLQkgIG1vZGUgd291bGQgbmV2ZXIgZ2V0IHVwZGF0ZWQgZXZlbiBpZiB0aGUgY29lZmZpY2llbnRzIGNoYW5nZS4KLQkgIEZpeGVzIGVxdWFsaXplci10ZXN0IGRvaW5nIC4uIG5vdGhpbmcuCi0KLTIwMTItMDItMTcgMTc6NTc6MDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBnb29tKjogZml4IGxlYWtlZCBjYXBzIGV2ZW50Ci0KLTIwMTItMDItMTcgMTM6MjY6NTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogcGFyc2UgZWl0aGVyIFhpbmcgb3IgVkJSSSBkYXRhCi0JICAuLi4gYW5kIGF2b2lkIGNvbmZ1c2luZyBkZWJ1ZyBtZXNzYWdlIGNsYWltaW5nIG5laXRoZXIgcHJlc2VudC4KLQotMjAxMi0wMi0xNyAxNDozODowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrOiBmaXggc2VnbWVudCB1cGRhdGUKLQotMjAxMi0wMi0xNyAxMTowNToyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjExLjEgPT09Ci0KLTIwMTItMDItMTcgMTE6MDQ6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lby5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vZ2wucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkqIHdpbjMyL2NvbW1vbi9nc3RydHBiaW4tbWFyc2hhbC5jOgotCSogd2luMzIvY29tbW9uL2dzdHJ0cGJpbi1tYXJzaGFsLmg6Ci0JICBSRUxFQVNFIDAuMTEuMQotCi0yMDEyLTAyLTE2IDIzOjMzOjE1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogZml4IGJ1ZmZlciBsZWFrCi0KLTIwMTItMDItMTYgMjM6NDA6NTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBnb29tMmsxOiB1c2Ugc29tZSBtb3JlIGJvaWxlcnBsYXRlCi0KLTIwMTItMDItMTYgMjM6MzM6MDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmg6Ci0JICBnb29tMmsxOiBwb3J0IHRvIDAuMTEKLQotMjAxMi0wMi0xNiAxNTozMTo1MyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDI6IHVzZSBzb21lIG1vcmUgYm9pbGVycGxhdGUKLQotMjAxMi0wMi0xNiAxNToyOTozNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDI6IHBvcnQgdG8gMC4xMQotCi0yMDEyLTAyLTE0IDExOjU2OjAwICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaDoKLQkqIGdzdC9pbnRlcmxlYXZlL3BsdWdpbi5jOgotCSogZ3N0L2ludGVybGVhdmUvcGx1Z2luLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxlYXZlOiBwb3J0IHRvIDAuMTEKLQkgIFBvcnQgb2YgdGhlIGludGVybGVhdmUgZWxlbWVudCBhbmQgaXRzIHVuaXR0ZXN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njk2NDMKLQotMjAxMi0wMi0xNiAxNDoyMzo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDEyLTAyLTE2IDE3OjE0OjIwICswODAwICBHYXJ5IENoaW5nLVBhbmcgTGluIDxjaGluZ3BhbmdAZ21haWwuY29tPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICB2NGwyc3JjOiBmYWlsdXJlIHRvIHF1ZXJ5IHNvbWUgb3B0aW9uYWwgY29udHJvbHMgaXMgbm90IGEgZmF0YWwgZXJyb3IKLQkgIERvbid0IHBvc3QgYSAoZmF0YWwpIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJ1cyBqdXN0IGJlY2F1c2Ugd2UKLQkgIGZhaWxlZCB0byBxdWVyeSBzb21lIGNvbnRyb2wuIEZpeGVzIGlzc3VlIHdpdGggYnVpbHQtaW4KLQkgIFN1eWluIENvcnAgd2ViY2FtIGZvciBIUCBub3RlYm9vayAodXNiaWQgMDY0ZTplMjhhKSBvbgotCSAgT3BlblN1c2UgMTIuMSwgd2hlcmUgcXVlcnlpbmcgcmVkL2JsdWUgYmFsYW5jZSBmYWlscy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzAxOTcKLQotMjAxMi0wMi0xNiAxMjo1OToxMCArMDAwMCAgVHV1a2thIFBhc2FuZW4gPHR1dWtrYS5wYXNhbmVuQGlsbWkuZmk+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IGZpeCBmb3Igd2ViY2Ftc3R1ZGlvIHZsb29wYmFjawotCSAgQmVjYXVzZSB2bG9vYmFjayBlbWl0cyAyNSAtIEVOT1RUWSBhbmQgbm8gRUlOVkFMIHY0bDJzcmMgdGhvdWdodCBpdAotCSAgY2FuJ3QgaGFuZGxlIHRoaXMgYW5kIGRvZXMgbm90IHdvcmsuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5NDU1Ci0KLTIwMTItMDItMTYgMTE6MjE6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZGVjbGFyZSB2YXJpYWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmxvY2sKLQkgIEl0J3MgaG93IHdlIHJvbGwuIEZpeGVzICdJU08gQzkwIGZvcmJpZHMgbWl4ZWQgZGVjbGFyYXRpb25zIGFuZCBjb2RlJwotCSAgY29tcGlsZXIgd2FybmluZy4KLQotMjAxMi0wMi0xNSAyMzo1NTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlLmFtOgotCSAgZXhhbXBsZXM6IGZpeCBzcGVjdHJ1bSBleGFtcGxlIGJ1aWxkIGlzc3VlcwotCSAgRmluZCBmZnQgaGVhZGVycyBpbiB1bmluc3RhbGxlZCBzZXR1cCwgZml4IExJQlMgb3JkZXIuCi0KLTIwMTItMDItMTUgMTI6NDE6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiByZW1vdmUgc29tZSB1bnVzZWQgZGVjbGFyYXRpb25zCi0KLTIwMTItMDItMTUgMTE6MjU6NDUgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1hdWRpb3Rlc3QuYzoKLQkgIHNwZWN0cnVtLWRlbW86IHNob3cgdGhlIGVmZmVjdCBvZiBmYXN0LW1vZGUKLQotMjAxMi0wMi0xNCAxMjoyNjozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkgIGFzcGVjdHJhdGlvY3JvcDogZml4IGNhcHMgcmVmY291bnQKLQotMjAxMi0wMi0xNCAxMToyMjo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2VmZmVjdHYuYzoKLQkgIHRlc3RzOiBmaXggdGVzdCwgdXNlIHZpZGVvY29udmVydAotCi0yMDEyLTAyLTE0IDEwOjUxOjM4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbGFjcGFyc2UuYwotCi0yMDEyLTAyLTA5IDEzOjQxOjUzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogYWRqdXN0IHRvIG1vZGlmaWVkIGJhc2VwYXJzZSBBUEkKLQotMjAxMi0wMi0xMyAxNzoxMzoxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgdXBkYXRlIGZvciBtZW1vcnkgYXBpIGNoYW5nZQotCi0yMDEyLTAyLTEzIDEyOjA2OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmxhY3BhcnNlLmM6Ci0JICB0ZXN0czogZmxhY3BhcnNlOiBjaGVjayBhbmQgY29tcGFyZSBpbnRlbmRlZCBkYXRhCi0KLTIwMTItMDItMTIgMTc6MDM6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2MKLQkgIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2MKLQkgIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmMKLQkgIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmgKLQotMjAxMi0wMi0xMiAxNjoyMjoyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06Ci0JKiBleHQvdGFnbGliL2dzdGFwZXYybXV4LmNjOgotCSogZXh0L3RhZ2xpYi9nc3RhcGV2Mm11eC5oOgotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguaDoKLQkqIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmM6Ci0JKiBleHQvdGFnbGliL2dzdHRhZ2xpYm11eC5oOgotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJwbHVnaW4uYzoKLQkgIHRhZ2xpYjogcG9ydCB0byBHc3RUYWdNdXggYmFzZSBjbGFzcwotCi0yMDEyLTAyLTEyIDEyOjI0OjUwICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkgIHRhZ2xpYjogZmluaXNoIG9mZiBhIGZldyBtaXNzZWQgdmFyaWFibGUgY2hhbmdlcwotCSAgTG9jYWwgdmFyaWFibGVzIGFyZSBub3cgdW51c2VkLCBhbmQgdGhlIHZhbHVlcyBmcm9tIHRoZSBzZWdtZW50IGNvcHkKLQkgIGFyZSB1c2VkIGluc3RlYWQsIHNvIHJlbW92ZSB0aGUgbm93IHVzZWxlc3MgbG9jYWwgdmFyaWFibGVzIGFuZCB3cml0ZQotCSAgdG8gdGhlIHNlZ21lbnQgd2hlcmUgYXBwcm9wcmlhdGUuCi0KLTIwMTItMDItMTAgMTY6MjM6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYwotCSAgZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmMKLQkgIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYwotCSAgZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmMKLQkgIGV4dC9wdWxzZS9wbHVnaW4uYwotCSAgZXh0L3Nob3V0Mi9nc3RzaG91dDIuYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYwotCi0yMDEyLTAyLTA4IDIzOjAzOjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBhZGQgc3RyZWFtLWZvcm1hdCBhbmQgYWxpZ25tZW50IHRvIGgyNjQgc2luayBjYXBzCi0JICBXZSdyZSBoYXBweSB0byBhY2NlcHQgYm90aCBieXRlLXN0cmVhbSBhbmQgYXZjLCBhZHZlcnRpc2UKLQkgIHRoYXQgb24gdGhlIHNpbmsgY2FwcyBhbmQgZml4IHVwIF9nZXRfY2FwcygpIGZ1bmN0aW9uIHRvCi0JICBub3QganVzdCByZXR1cm4gInZpZGVvL3gtaDI2NCIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2NjYyCi0KLTIwMTItMDItMDggMjA6NTg6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiBhZGQgc3RyZWFtLWZvcm1hdCBhbmQgYWxpZ25tZW50IGZpZWxkcyB0byBzcmMgdGVtcGxhdGUgY2FwcwotCSAgQmVjYXVzZSB3ZSBjYW4uIEFuZCBzbyB3ZSBnZXQgYSB3YXJuaW5nIGlmIHdlIHRyeSB0byBvdXRwdXQgYXZjIHdpdGgKLQkgIG5hbCBhbGlnbm1lbnQgb3Igc29tZXN1Y2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2NjYyCi0KLTIwMTItMDItMTAgMTM6NDQ6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IGNsZWFuIHVwIHJ0cC1wYXlsb2FkaW5nIHRlc3QgYSBsaXR0bGUKLQkgIEZlZWQgZGF0YSBpbnRvIHRoZSBwaXBlbGluZSB1c2luZyBhcHBzcmMgaW5zdGVhZCBvZiBmZHNyYyBhbmQKLQkgIGEgcGlwZS4gU3RvcmUgdW5zaWduZWQgYnl0ZSB2YWx1ZXMgaW4gZ3VpbnQ4IGluc3RlYWQgb2YgY2hhci4KLQkgIEdldHRpbmcgcmlkIG9mIHRoZSBjYXBzZmlsdGVyIGFsc28gaGVscHMgdG8gYXZvaWQgJ2Zvcm1hdCBpcwotCSAgbm90IGZ1bGx5IHNwZWNpZmllZCcgd2FybmluZ3Mgd2hlbiBwdXNoaW5nICJ2aWRlby94LWgyNjQiIGRhdGEKLQkgIGludG8gcnRwaDI2NHBheSB3aXRoIGZ1bGx5IHNwZWNpZmllZCBoMjY0IGNhcHMgaW4gdGhlIHNpbmsgdGVtcGxhdGUuCi0KLTIwMTItMDItMTAgMTA6MDc6MzQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdjogdXNlIGRlZmF1bHQgcGFkIHF1ZXJ5Ci0JICBXZSBuZWVkIHRvIGNoYWluIHVwIHVua25vd24gcXVlcmllcyB0byB0aGUgZGVmYXVsdCBxdWVyeSBoYW5kbGVyIGluc3RlYWQgb2YKLQkgIGJsaW5kbHkgZm9yd2FyZGluZyB0aGVtLiBJbiB0aGlzIGNhc2UgaXQgY2F1c2VkIHRoZSBjYXBzIHF1ZXJ5IHRvIGJlIGZvcndhcmRlZAotCSAgdG8gdGhlIHVwc3RyZWFtIHR5cGVmaW5kIGFuZCByZXR1cm4gdGhlIHdyb25nIHR5cGUgZm9yIHRoZSBhdWRpby92aWRlbyBwYWQuCi0KLTIwMTItMDItMDkgMjI6MTI6MTQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tcGVnYXVkaW9wYXJzZS5jOgotCSAgdGVzdHM6IG1wZWdhdWRpb3BhcnNlOiByZW1vdmUgc3RyYXkgZGVjbGFyYXRpb24KLQotMjAxMi0wMi0wOSAyMjowNzo0OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBjb3JyZWN0bHkgc2V0IEFESUYgc3JjIGNhcHMKLQotMjAxMi0wMi0wOSAyMjoxMDowNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBwcmV2ZW50IGEgZmV3IGRpcmVjdCBleGl0cyB3aXRob3V0IGNsZWFudXAKLQotMjAxMi0wMi0wOSAyMjowNzoxOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IHNoaWZ0IGluIHByb3BlciBkaXJlY3Rpb24gZm9yIGF1ZGlvIHNhbXBsZSBjb252ZXJzaW9uCi0KLTIwMTItMDItMDkgMTg6MDk6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOgotCSAgdGVzdHM6IGZpeCBjb21waWxhdGlvbgotCi0yMDEyLTAyLTA5IDEwOjExOjQ4ICswMTAwICBNYXJjIExlZW1hbiA8bWFyYy5sZWVtYW5AZ21haWwuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgbXVsdGl1ZHBzaW5rOiB0eXBvIGZpeCAoYnl0ZXMgc2VuZCAtPiBieXRlcyBzZW50KQotCi0yMDEyLTAyLTA4IDE2OjM0OjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICBHU1RfRkxPV19XUk9OR19TVEFURSAtPiBHU1RfRkxPV19GTFVTSElORwotCi0yMDEyLTAyLTA4IDE2OjM3OjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBHU1RfRkxPV19XUk9OR19TVEFURSAtPiBHU1RfRkxPV19GTFVTSElORwotCi0yMDEyLTAyLTA3IDE0OjEwOjQ0IC0wODAwICBSYWxwaCBHaWxlcyA8Z2lsZXNAbW96aWxsYS5jb20+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDJzZW5kOiBzZW5kIHZpZGVvL3dlYm0gdGhyb3VnaCBsaWJzaG91dC4KLQkgIFRoaXMgcmVxdWlyZXMgU0hPVVRfRk9STUFUX1dFQk0sIGFkZGVkIGluIGxpYnNob3V0IDIuMy4wLAotCSAgc28gdmlkZW8vd2VibSBzdXBwb3J0IGlzIGNvbnRpbmdlbnQgb24gdGhhdCBzeW1ib2wgYmVpbmcKLQkgIGRlZmluZWQuCi0JICBBbHNvIGFuIGluZGVudGF0aW9uIGNoYW5nZSByZXF1aXJlZCBieSB0aGUgcHJlLWNvbW1pdCBob29rLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTU5MAotCi0yMDEyLTAxLTMwIDE2OjQwOjE5ICswMTAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmg6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9wbHVnaW4uYzoKLQkqIGdzdC9pbnRlcmxlYXZlL3BsdWdpbi5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JICBkZWludGVybGVhdmU6IHBvcnQgdG8gMC4xMQotCSAgUG9ydCBvZiB0aGUgZGVpbnRlcmxlYXZlIGVsZW1lbnQgYW5kIGl0cyB1bml0dGVzdHMuIFRoZSBpbnRlcmxlYXZlCi0JICBlbGVtZW50IHdpbGwgYmUgcG9ydGVkIGFzIHBhcnQgb2YgYW5vdGhlciBwYXRjaCwgaGVuY2UgZGlzYWJsaW5nIGl0Ci0JICBmb3Igbm93LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODg0NwotCi0yMDEyLTAyLTA3IDIzOjQxOjEzICswMjAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oOgotCSAgZGlyZWN0c291bmRzaW5rOiBGaXggY29tcGlsaW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5NjA3Ci0KLTIwMTItMDItMDggMDA6MDg6NDkgKzAyMDAgIFJhaW1vIErDpHJ2aSA8cmFpbW8uamFydmlAZ21haWwuY29tPgotCi0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmM6Ci0JICB3YXZlZm9ybXNpbms6IFBvcnQgdG8gMC4xMQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTYxMgotCi0yMDEyLTAyLTA3IDIxOjU3OjQ3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogcmV3b3JrIHRyYW5zcG9ydCBzdXBwb3J0Ci0JICBNb3ZlIGNvbW1vbiBjb2RlIHRvIGphY2tjbGllbnQuIFRoZXJlIHdlIGNhbiBhbHNvIGhhbmRsZSB0aGUgcmVxdWVzdCBzdGF0ZQotCSAgbWVzc2FnZSBpbiBhIGJldHRlciB3YXksIGFzIHRoZSBlbGVtZW50IGNhbGxiYWNrcyBhcmUgb25seSBydW4gaWYgdGhlIGVsZW1lbnQgaXMKLQkgIGFjdGl2ZS4KLQotMjAxMi0wMi0wNyAxMDo0NzoxOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXBldjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6Ci0JICB0ZXN0czogaW1wcm92ZSB0YWdtdXggdGVzdHMKLQotMjAxMi0wMi0wNyAxMDoyOToxMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkgIHRhZ2xpYjogZml4IG9iamVjdCByZWdpc3RyYXRpb24KLQkgIFdlIGNhbid0IHVzZSBHX0RFRklORV9UWVBFIGJlY2F1c2UgdGhlIGNsYXNzIGlzIG5vdCBzZXQgaW4gdGhlIGNsYXNzX2luaXQgYW5kIHdlCi0JICBuZWVkIGl0IHRvIGdldCB0aGUgc3JjcGFkIHRlbXBsYXRlLgotCSAgRml4IGEgY2FwcyBsZWFrCi0KLTIwMTItMDItMDcgMTA6MTY6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2pwZWdlbmMuYzoKLQkgIHRlc3RzOiBmaXgganBlZyB0ZXN0Ci0KLTIwMTItMDItMDcgMTA6MTU6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBmaXggY2FwcwotCi0yMDEyLTAyLTA3IDA5OjU0OjAwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JICBlZmZlY3R0djogZml4IGluaXRpYWxpc2F0aW9uCi0KLTIwMTItMDItMDcgMDk6NDI6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICB5NG06IGZpeCBuZWdvdGlhdGlvbgotCi0yMDEyLTAyLTA3IDA5OjQxOjUxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2ZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6Ci0JICB0ZXN0czogZml4IG1vcmUgdGVzdHMKLQotMjAxMi0wMi0wNiAyMjoxMzo1MyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9kdi9NYWtlZmlsZS5hbToKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSogZXh0L2R2L2dzdGR2ZGVjLmg6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguaDoKLQkgIGR2OiBwb3J0IHRvIDAuMTEKLQotMjAxMi0wMi0wNiAxODozNTowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jOgotCSAgdGVzdDogZml4IG1vcmUgdGVzdHMKLQotMjAxMi0wMi0wNiAxNTo1Mjo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzZGVtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYzoKLQkgIHRlc3RzOiBmaXggbW9yZSB0ZXN0cwotCi0yMDEyLTAyLTA2IDE1OjUyOjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdjogZml4IGNhcHMKLQotMjAxMi0wMi0wNiAxNToyMDo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2VxdWFsaXplci5jOgotCSAgaWlyZXF1YWxpemVyOiBmaXggZXF1YWxpemVyIGFuZCB1bml0IHRlc3QKLQotMjAxMi0wMi0wNiAxMzo0NDoyMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgdGVzdHM6IGZpeCBzb21lIG1vcmUgdGVzdHMKLQotMjAxMi0wMi0wNiAxMzo0Mzo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogdGFrZSB0aGUgcGFkIGZyb20gY29sbGVjdHBhZHMyIGNvcnJlY3RseQotCi0yMDEyLTAyLTA2IDEzOjI5OjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2lpcmZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9pbnZlcnQuYzoKLQkgIHRlc3RzOiBmaXggbW9yZSB1bml0IHRlc3RzCi0KLTIwMTItMDItMDYgMTM6Mjg6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOgotCSAgYXVkaW9keW5hbWljOiBmaXggbmVnb3RpYXRpb24KLQotMjAxMi0wMS0yOCAxMToxMzoxNiArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYXZvaWQgcG9zdGluZyBpbnZhbGlkIGR1cmF0aW9uIGZvciBlYWNoIGZyYW1lCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY2NTgzCi0KLTIwMTItMDItMDYgMTA6MDc6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmM6Ci0JICB0ZXN0czogZml4IG1vcmUgdGVzdHMKLQotMjAxMi0wMi0wNiAwOTo0OTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JICB0ZXN0czogaW1wcm92ZSBzb21lIHRlc3RzCi0KLTIwMTItMDItMDYgMDk6MjM6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgdGVzdHM6IGZpeCBqaXR0ZXJidWZmZXIgdGVzdAotCi0yMDEyLTAyLTA2IDA5OjIzOjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogZml4IGNhcHMgYWZ0ZXIgcHQgY2hhbmdlCi0KLTIwMTItMDItMDYgMDk6MTg6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBmaXggY2FwcyBsZWFrCi0KLTIwMTItMDItMDMgMjI6MDU6NTkgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcGx1Z2luLmM6Ci0JICBwdWxzZWF1ZGlvc2luazogTG93ZXIgcmFuayB0byBwcmV2ZW50IGF1dG9wbHVnZ2luZwotCSAgcHVsc2VhdWRpb3NpbmsgYnJlYWtzIHZpc3VhbGlzYXRpb25zIGluIGl0cyBjdXJyZW50IGZvcm0sIHNvIGxldCdzCi0JICBwcmV2ZW50IGl0IGZyb20gYmVpbmcgYXV0b3BsdWdnZWQgZm9yIHRoZSB0aW1lIGJlaW5nLgotCSAgVGhlIGJlc3Qgd2UgY2FuIGhvcGUgdG8gZG8gaW4gdGhlIDAuMTAgc2VyaWVzIGlzIHF1ZXJ5IHRoZSBsaXN0IG9mCi0JICBhdmFpbGFibGUgc2lua3MgYW5kIHRoZWlyIGZvcm1hdHMsIGFuZCBleHBvc2UgdGhlc2UgYXMgdGhlIGJpbidzIHNpbmtwYWQKLQkgIGNhcHMuIFdoaWxlIHRoaXMgaXMgbm90IGEgY29tcHJlaGVuc2l2ZSBzb2x1dGlvbiwgaXQgd2lsbCBtYWtlIHN1cmUgdGhhdAotCSAgd2UncmUgb25seSB0cnlpbmcgdG8gc3VwcG9ydCBjb21wcmVzc2VkIGZvcm1hdHMgaWYgd2UncmUgY2VydGFpbiB0aGF0Ci0JICBvbmUgZXhpc3RzLgotCSAgVGhlIGxvbmctdGVybSBmaXggZm9yIHRoaXMgd2lsbCBiZSBpbiB0aGUgZm9ybSBvZiBwcm9wZXIgdXBzdHJlYW0KLQkgIHJlbmVnb3RpYXRpb24gc3VwcG9ydCBpbiB0aGUgMC4xMS8xLjAgc2VyaWVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjM2MQotCi0yMDEyLTAyLTAzIDE3OjIzOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6Ci0JICB0ZXN0czogZml4IG1vcmUgdGVzdHMKLQotMjAxMi0wMi0wMyAxNjoxMzo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXBldjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2lpcmZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jOgotCSAgdGVzdHM6IGZpeCBzb21lIG1vcmUgdGVzdHMKLQotMjAxMi0wMi0wMyAxNjoxMjo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGZpeCBzcmNwYWQgY2FwcyBoYW5kbGluZwotCi0yMDEyLTAyLTAzIDE2OjEyOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JICBjbW1sZW5jOiBmaXggY2FwcyBoYW5kbGluZwotCi0yMDEyLTAyLTAzIDE0OjUzOjMxICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogZml4IGV2ZW50IGxlYWsgd2hlbiB0aGVyZSBpcyBubyBwZWVyIG9uIHRoZSBzcmMgcGFkCi0KLTIwMTItMDItMDIgMTY6MjE6MjkgKzAwMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIFVwZGF0ZSBzcGVjIGZpbGUKLQotMjAxMi0wMi0wMiAxMjoyNzowOSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IHNwZWNpZnkgd2Ugb25seSBhY2NlcHQgcmF3IEFBQyBpbiB0ZW1wbGF0ZSBjYXBzCi0JICBObyBoZWFkZXIgc2VlbXMgdG8gYmUgYWRkZWQsIGFuZCB0aGUgY29kZWMgSUQgaXMgdGhlIHNhbWUgYXMgdXNlZAotCSAgZm9yIHJhdyBieSBmbHZkZW11eCwgc28gcmF3IHNlZW1zIHRoZSBvbmx5IHN1cHBvcnRlZCBjYXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTM5NAotCi0yMDEyLTAyLTAyIDEyOjI1OjIxICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IHNwZWNpZnkgd2Ugb25seSBvdXRwdXQgcmF3IEFBQyBpbiB0ZW1wbGF0ZSBjYXBzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1Mzk0Ci0KLTIwMTItMDItMDEgMTg6MDE6MjcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvdGFnbGliL2dzdGFwZXYybXV4LmNjOgotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkqIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmM6Ci0JKiBleHQvdGFnbGliL2dzdHRhZ2xpYm11eC5oOgotCSAgdGFnbGliOiBwb3J0IHRvIDAuMTEKLQotMjAxMi0wMi0wMSAxNjo0MDo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hbm5vZGV4L01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuYW06Ci0JICBidWlsZDogaWdub3JlIEdWYWx1ZUFycmF5IGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciB0aGUgdGltZSBiZWluZwotCSAgdW50aWwgdGhpcyBnZXRzIHNvcnRlZCBvdXQgd2l0aCB0aGUgR0xpYiBmb2xrcyBhbmQgd2UgaGF2ZSBhCi0JICB2aWFibGUgYWx0ZXJuYXRpdmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3MjI4Ci0KLTIwMTItMDItMDEgMTY6MzY6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5jOgotCSogZXh0L3B1bHNlL3B1bHNlcHJvYmUuaDoKLQkgIHB1bHNlOiBkaXNhYmxlIHNvbWUgdW51c2VkIHByb3BlcnR5IHByb2JlIGNvZGUKLQkgIHdoaWNoIHdhcyB1c2luZyBHVmFsdWVBcnJheQotCi0yMDEyLTAyLTAxIDE2OjExOjE0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4OiBVc2UgbmV3IGF1ZGlvIGVuY29kZXIvZGVjb2RlciBiYXNlIGNsYXNzIEFQSSBmb3Igc3JjcGFkIGNhcHMKLQotMjAxMi0wMi0wMSAxNjowNTo1MSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWM6IFVzZSBuZXcgYXVkaW8gZW5jb2Rlci9kZWNvZGVyIGJhc2UgY2xhc3MgQVBJIGZvciBzcmNwYWQgY2FwcwotCi0yMDEyLTAxLTMxIDE1OjM5OjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9lcXVhbGl6ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM2RlbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NoYXBld2lwZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvZmxhY2RlYy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jOgotCSAgdGVzdHM6IGZpeCBtb3JlIHRlc3RzCi0KLTIwMTItMDEtMzAgMTQ6NTI6MzcgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkgIHJ0cG1wMnRwYXk6IGRvIG5vdCB0cnkgdG8gZmx1c2ggYSBwYWNrZXQgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODg3NAotCi0yMDEyLTAxLTMxIDEzOjQxOjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hbHBoYWNvbG9yLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJiYW5kLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ludmVydC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGFjZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JICB0ZXN0czogdXBkYXRlIHNvbWUgdGVzdHMgZm9yIG5ldyBtZW1vcnkgYXBpCi0KLTIwMTItMDEtMzEgMTI6MjI6MTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBhZGFwdCB0byBjb250cm9sLXNvdXJjZSB0eXBlIGNoYW5nZXMKLQotMjAxMi0wMS0zMCAyMTozOTozNCArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL3NoYXBld2lwZS1leGFtcGxlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy92NGwyL2NhbWN0cmwuYzoKLQkgIGNvbnRyb2xsZXI6IHJlbmFtZSBjb250cm9sLWJpbmRpbmdzCi0JICBnc3RfY29udHJvbF9iaW5kaW5nX3h4eCAtPiBnc3RfeHh4X2NvbnRyb2xfYmluZGluZyBmb3IgY29uc2lzdGVuY3kuCi0KLTIwMTItMDEtMzAgMTc6MTY6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxlbmMuYzoKLQkgIHVwZGF0ZSBmb3IgSEVBREVSIGZsYWcKLQotMjAxMC0wNi0xMSAwODozNjozMyArMDIwMCAgUGFzY2FsIEJ1aGxlciA8cGFzY2FsLmJ1aGxlckB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IEV4Y2x1ZGUgTkFMdSBzaXplIGZyb20gcGF5bG9hZCBsZW5ndGggb24gdHJ1bmNhdGVkIHBhY2tldHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODQ2Ci0KLTIwMTItMDEtMjggMjM6MzU6NTAgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogcmVtb3ZlIG9ic29sZXRlIHZhcmlhYmxlLCBzZXQgYnV0IG5vdCB1c2VkCi0JICBSZXBvcnRlZCBieSBhbmRyZWRpZWIgb24gI2dzdHJlYW1lci4KLQotMjAxMi0wMS0yOCAxMzowNTowOSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IGF2b2lkIHdyYXBwaW5nIG9wYXF1ZSB0byB0cmFuc3BhcmVudAotCi0yMDEyLTAxLTI4IDEyOjM1OjEzICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGRvIG5vdCBmcmVlIG1lbW9yeSB0d2ljZQotCSAgQSByZWNlbnQgY2hhbmdlIHRvIGZpeCBsZWFraW5nIGNvZGVjIElEIHN0cmluZyBhY2NpZGVudGFsbHkgY2F1c2VkCi0JICBvbmUgb2YgdGhlIHZlcnkgZmV3IHBsYWNlcyB0aGF0IHdlcmVuJ3QgbGVha2luZyB0byBub3cgZnJlZSB0d2ljZS4KLQotMjAxMi0wMS0yNyAxNjoyNzo0OSArMDEwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSAgYWxhd2RlYzogRWFjaCBvdXRwdXQgc2FtcGxlIGlzIDIgYnl0ZXMKLQotMjAxMi0wMS0yNyAxMjoxNDo0OSArMDEwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IERvbid0IGxlYWsgY2FwcyBldmVudCB3aGVuIG5vdCBwdXNoaW5nCi0KLTIwMTItMDEtMjcgMTI6MDQ6NTMgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgIHJ0cHB0ZGVtdXg6IEZvcndhcmQgc3RpY2t5IGV2ZW50cwotCi0yMDEyLTAxLTI3IDEyOjA0OjA1ICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICBydHBwdGRlbXV4OiBQcm90ZWN0IGFsbCB1c2VzIHBhZCBsaXN0IHdpdGggT0JKRUNUIExPQ0sKLQkgIEFjdHVhbGx5IHByb3RlY3QgdGhlIGVudGlyZSBwYWQgbGlzdCBhbmQgdXNlIGl0IGluIGEgdGhyZWFkIHNhZmUKLQkgIHdheS4KLQotMjAxMi0wMS0yNyAxMjowMjoyNSArMDEwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IEZvcndhcmQgc3RpY2t5IGV2ZW50cyB0byBuZXcgcGFkcwotCi0yMDEyLTAxLTI3IDEyOjAxOjQwICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogQWRkIHNzcmMgdG8gZm9yd2FyZGVkIENBUFMgZXZlbnRzCi0JICBBbHNvIGl0ZXJhdGUgdGhlIGxpc3Qgb2YgR3N0UnRwU3NyY0RlbXV4UGFkIHNhZmVseQotCi0yMDEyLTAxLTI3IDExOjU5OjA4ICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNjZGVtdXg6IEZhY3RvciBvdXQgZ2V0dGluZyBkcGFkIGJ5IHBhZAotCi0yMDEyLTAxLTI2IDE4OjM1OjQ4ICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBLZWVwIHRoZSBidWZmZXIgbWFwcGVkIHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkCi0KLTIwMTItMDEtMjYgMTg6MzU6MjcgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBzZXNzaW9uOiBJbml0aWFsaXNlIHRoZSBhZGRyZXNzIHBvaW50ZXIgdG8gTlVMTAotCi0yMDEyLTAxLTI3IDEyOjA3OjQzICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIGR0bWY6IFVzZSBuZXctc3R5bGUgY2FwcwotCi0yMDEyLTAxLTI3IDE2OjM3OjE5ICswMTAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdW1vdGlvbi5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuaDoKLQkgIGRpcmVjc291bmRzaW5rOiBQb3J0IGVsZW1lbnQgdG8gMC4xMQotCi0yMDEyLTAxLTI2IDE5OjQ4OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjI6IHJlbW92ZSBwYWQgZXZlbnQgZnVuY3Rpb24KLQkgIFdlIHVzZSB0aGUgb25lIGZyb20gY29sbGVjdHBhZHMKLQotMjAxMi0wMS0yNiAxODoyNjowMiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgUmV2ZXJ0ICJxdGRlbXV4OiBmaXggR3N0RGF0ZVRpbWUvR0RhdGVUaW1lIG1peHVwIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA1MzI2MTI2MTEyMGI0YzAwOGRlNjE2OTFjNzBlOTQzNTRiMjgwMDRhLgotCSAgVGhlIEdzdERhdGVUaW1lLT5HRGF0ZVRpbWUgY2hhbmdlIGluIGNvcmUgd2FzIGFwcGFyZW50bHkgYWNjaWRlbnRhbCwKLQkgIGFuZCBpcyBub3cgcmV2ZXJ0ZWQuCi0KLTIwMTItMDEtMjYgMTg6MjU6MjEgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBSZXZlcnQgImF2aWRlbXV4OiBmaXggR3N0RGF0ZVRpbWUvR0RhdGVUaW1lIG1peHVwIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBhY2M5ZjE1MDk2OGIyNWM1YWU1YTY5NDBiMzRhZDJkNTFiMTc0ZmQyLgotCSAgVGhlIEdzdERhdGVUaW1lLT5HRGF0ZVRpbWUgY2hhbmdlIGluIGNvcmUgd2FzIGFwcGFyZW50bHkgYWNjaWRlbnRhbCwKLQkgIGFuZCBpcyBub3cgcmV2ZXJ0ZWQuCi0KLTIwMTItMDEtMjYgMTc6NTA6MzAgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZml4IEdzdERhdGVUaW1lL0dEYXRlVGltZSBtaXh1cAotCSAgVGhpcyBpcyBhIGJsaW5kIGZpeCB0byBtYXRjaCB0aGUgb25lIEkganVzdCBtYWRlIHRvIHF0ZGVtdXgsCi0JICBhcyBJIGRvIG5vdCBoYXZlIGFuIEFWSSBmaWxlIHdoZXJlIHRoZSBjb2RlIGdldHMgZXhlY3V0ZWQuCi0KLTIwMTItMDEtMjYgMTc6NDc6MjkgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBHc3REYXRlVGltZS9HRGF0ZVRpbWUgbWl4dXAKLQotMjAxMi0wMS0yNiAxODo1MTozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IG1vcmUgZml4ZXMKLQotMjAxMi0wMS0yNiAxODo0MzowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIHZpZGVvbWl4ZXI6IG1ha2UgdmlkZW9taXhlciB3b3JrIHNvbWV3aGF0Ci0KLTIwMTItMDEtMjYgMTg6MTU6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmg6Ci0JICB2aWRlb21peGVyOiBwb3J0IHRvIDAuMTEKLQkgIEl0IGJ1aWxkcyBhbmQgZ3N0LWluc3BlY3QtMC4xMSB3b3Jrcy4uIG90aGVyd2lzZSB1bnRlc3RlZAotCi0yMDEyLTAxLTI2IDE1OjQ4OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JICBkeW51ZHBzaW5rOiBmaXggZ2V0LXN0YXRzIHNpZ25hbCByZWdpc3RyYXRpb24gc29tZSBtb3JlCi0KLTIwMTItMDEtMjYgMTU6NDY6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgUmV2ZXJ0ICJ1ZHA6IG1hcmsgYWN0aW9uIHNpZ25hbHMgYXMgUlVOX0ZJUlNUIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA1YzgzMDg1OTkxMjlkOWUxNjA2ZWVkYjJkMzU0MzYxNzY1OGRjMzA2LgotCi0yMDEyLTAxLTI2IDE1OjM5OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIHVkcDogbWFyayBhY3Rpb24gc2lnbmFscyBhcyBSVU5fRklSU1QKLQotMjAxMi0wMS0yNiAxNTozNzoyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSAgdWRwOiBtYXJrICJnZXQtc3RhdHMiIGFzIGFjdGlvbiBzaWduYWwKLQotMjAxMi0wMS0yNiAxNTozMDo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgdWRwOiBmaXggZ2V0LXN0YXRzIGFjdGlvbiBzaWduYWwgcmVnaXN0cmF0aW9uCi0JICBJdCByZXR1cm5zIGEgR3N0U3RydWN0dXJlIG5vdywgbm90IGEgR1ZhbHVlQXJyYXkKLQotMjAxMi0wMS0yNiAxNjowNTozNCArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBmaXggcHJpbnQgZm9ybWF0Ci0KLTIwMTItMDEtMjYgMTE6NTA6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2FtdXg6IEZpeCBzaXplIG9mIG91dHB1dCBidWZmZXJzCi0KLTIwMTItMDEtMjYgMTE6MzM6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBpbmNsdWRlIHJpZ2h0IGNvbGxlY3RwYWRzIHZlcnNpb24KLQotMjAxMi0wMS0yNiAxMToyOToxMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUHJvcGVybHkgdXNlIHRoZSBhbGlnbm1lbnQgcGFyYW1ldGVyIG9mIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlKCkKLQkgIEl0J3MgYSBiaXRtYXNrIGZvciB0aGUgYWxpZ25tZW50LCBub3QgdGhlIGFsaWdubWVudCBpdHNlbGYuCi0KLTIwMTItMDEtMjYgMTE6MTg6NDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2FtdXg6IFByb3Blcmx5IHVubWFwIFdSSVRFIG1hcHMgb2YgdGhlIG91dHB1dCBidWZmZXJzCi0KLTIwMTItMDEtMjYgMTA6NDQ6MjggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSAgdmlkZW9taXhlcjI6IFVwZGF0ZSBmb3IgdGhlIG5ldyBjb2xsZWN0cGFkczIgZXZlbnQgaGFuZGxpbmcgQVBJCi0KLTIwMTItMDEtMjYgMTA6NDA6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogVXBkYXRlIGZvciB0aGUgbmV3IGNvbGxlY3RwYWRzMiBldmVudCBoYW5kbGluZyBBUEkKLQotMjAxMi0wMS0yNiAxMDozNzo1MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBVcGRhdGUgZm9yIHRoZSBuZXcgY29sbGVjdHBhZHMyIGV2ZW50IGhhbmRsaW5nIEFQSQotCi0yMDEyLTAxLTI2IDEwOjI4OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogVXBkYXRlIGZvciBuZXcgY29sbGVjdHBhZHMyIGV2ZW50IGhhbmRsaW5nIEFQSQotCi0yMDEyLTAxLTI2IDEwOjI3OjQwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogVXBkYXRlIGZvciBuZXcgY29sbGVjdHBhZHMyIGV2ZW50IGhhbmRsaW5nIEFQSQotCi0yMDEyLTAxLTI1IDE4OjQxOjM4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IE9ubHkgZm9yd2FyZCB0aGUgZXZlbnQgd2hlbiB3ZSBkaWRuJ3QgaGFuZGxlIGl0IG91cnNlbHZlcwotCi0yMDEyLTAxLTI1IDE4OjQwOjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIycGFkLmg6Ci0JICB2aWRlb21peGVyOiBzb21lIG1vcmUgcG9ydGluZwotCi0yMDEyLTAxLTI1IDE4OjAwOjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaDoKLQkgIHZpZGVvbWl4ZXI6IHBvcnQgYmxlbmQgZnVuY3Rpb24KLQotMjAxMi0wMS0yNSAxNjo1ODoxMiArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdjogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlcwotCSAgKG9yIHJhdGhlciBjaXJjdW12ZW50IGlzc3VlcyB3aXRoIG5haXZlIGNvbXBpbGVycyAuLi4pCi0KLTIwMTItMDEtMjUgMTU6MjE6NDQgKzAwMDAgIEpheWFrcmlzaG5hbiBNIDxqYXkua3Jpc2huYW5tQGdtYWlsLmNvbT4KLQotCSogZXh0L2NhaXJvL01ha2VmaWxlLmFtOgotCSAgY2Fpcm86IGZpeCBidWlsZCwgbWFrZSBzdXJlIGxpYmdzdHZpZGVvIGNhbiBiZSBmb3VuZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODY0OAotCi0yMDEyLTAxLTI1IDE0OjUwOjUwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIHBvcnQgdG8gbmV3IG1lbW9yeSBBUEkKLQotMjAxMi0wMS0yNSAxMzoxOToxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwbWFuYWdlcjogZG9uJ3QgcHJldGVuZCBvdXIgcmFuZG9tIGhvc3RuYW1lcyBhcmUgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lcwotCi0yMDEyLTAxLTI1IDEzOjQ3OjMwICswMTAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYzQ2M2JjMCB0byA3ZmRhNTI0Ci0KLTIwMTItMDEtMjUgMTI6NDk6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJzAuMTEnIG9mIHNzaDovL2dpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kIGludG8gMC4xMQotCi0yMDEyLTAxLTI1IDEyOjQ5OjExICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jCi0JICBleHQvanBlZy9nc3RqcGVnZW5jLmMKLQkgIGV4dC9wdWxzZS9wdWxzZXNpbmsuYwotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jCi0KLTIwMTItMDEtMjUgMTI6NDE6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nOiBwb3J0IHRvIG5ldyBtZW1vcnkgQVBJCi0KLTIwMTItMDEtMjUgMTI6NDE6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IHBvcnQgdG8gbmV3IG1lbW9yeSBBUEkKLQotMjAxMi0wMS0yNCAxNDozODo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jOgotCSAgbW9yZSBtZW1vcnkgQVBJIHBvcnRpbmcKLQotMjAxMi0wMS0yMyAxNzoyNTozNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXhtYXAuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuaDoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSAgdXBkYXRlIGZvciBuZXcgbWVtb3J5IEFQSQotCi0yMDEyLTAxLTI1IDExOjIxOjUwICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5oOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgZHRtZjogcG9ydCB0byAwLjExCi0KLTIwMTItMDEtMjUgMTE6Mzg6MTEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMmE1OTAxNiB0byBjNDYzYmMwCi0KLTIwMTItMDEtMjQgMTg6MjQ6MTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nZW5jOiBkaXNhYmx5IHNuYXBzaG90IGJlaGF2aW91ciBieSBkZWZhdWx0Ci0JICAuLi4gc2luY2Ugc3VjaCBiZWhhdmlvdXIgaXMgbm90IGNvbnNpc3RlbnQsIGlmIGFsbG93YWJsZSBhdCBhbGwuCi0KLTIwMTItMDEtMjQgMTg6MjM6MjIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuaDoKLQkgIHBuZ2RlYzogcG9ydCB0byAwLjExCi0KLTIwMTItMDEtMjQgMTg6MjE6MDggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuaDoKLQkgIHBuZ2VuYzogcG9ydCB0byAwLjExCi0KLTIwMTItMDEtMjQgMTQ6NTM6MzggKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBmaXggc3RyaW5nIGxlYWsKLQotMjAxMi0wMS0yNCAxNDo1MjowOSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGZpeCB1c2Ugb2YgZnJlZWQgbWVtb3J5Ci0KLTIwMTEtMTItMDEgMTU6NDk6NDAgKzAxMDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgRG9uJ3QgY3Jhc2ggb24gZW1wdHkgbGFjZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUyMjQKLQotMjAxMi0wMS0yMyAxMzoxNTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwbWFuYWdlcjogZG9uJ3QgcmV2ZWFsIHRoZSB1c2VyJ3MgdXNlcm5hbWUsIGhvc3RuYW1lIG9yIHJlYWwgbmFtZSBieSBkZWZhdWx0Ci0JICBTZW5kIGEgcmFuZG9tbHkgbWFkZS11cCB1c2VyQGhvc3RuYW1lIGFzIENOQU1FIGFuZCBkb24ndAotCSAgc2VuZCBhIE5BTUUgYXQgYWxsIGJ5IGRlZmF1bHQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4MzIwCi0KLTIwMTItMDEtMjEgMjA6MDc6NTYgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBtb3ZlIGZyb20gY29udHJvbC1iaW5kaW5nIHRvIGNvbnRyb2wtYmluZGluZy1kaXJlY3QKLQotMjAxMi0wMS0yMiAyMzozMToxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC1saWJzL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ZpcmZpbHRlci5oOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0Lmg6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuaDoKLQkgIERvbid0IHVzZSBkZXByZWNhdGVkIEdMaWIgQVBJCi0KLTIwMTItMDEtMjIgMjM6MTU6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkqIGdzdC1saWJzL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5oOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSogdGVzdHMvaWNsZXMvZXF1YWxpemVyLXRlc3QuYzoKLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1ZnNpbmstdGVzdC5jOgotCSogdGVzdHMvaWNsZXMvdGVzdC1vc3M0LmM6Ci0JKiB0ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYzoKLQkqIHRlc3RzL2ljbGVzL3ZpZGVvY3JvcC10ZXN0LmM6Ci0JICBVc2UgbmV3IEdMaWIgQVBJIHVuY29uZGl0aW9uYWxseQotCi0yMDEyLTAxLTIwIDE3OjA2OjQyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2ltcGxpZnkgaW50ZXJuYWwgc3JjIGV2ZW50IGRlYnVnIGxvZ2dpbmcKLQkgIC4uLiB3aGljaCBhdm9pZHMgYWxtb3N0IHN1cGVyZmx1b3VzIG9idGFpbmluZyBvZiBydHNwIGVsZW1lbnQuCi0KLTIwMTItMDEtMjAgMTc6MDM6NTAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhdm9pZCBOVUxMIHN0cmluZyBjb21wYXJpc29uCi0KLTIwMTItMDEtMjAgMTc6MDM6MjEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogYXJyYW5nZSBmb3IgaW5pdGlhbGl6ZWQgdmFyaWFibGVzCi0KLTIwMTItMDEtMjAgMTc6MDI6MTUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSAgcnRwbXA0YWRlcGF5OiBwcmV2ZW50IG91dC1vZi1ib3VuZCBhcnJheSBhY2Nlc3MKLQotMjAxMi0wMS0yMCAxNzowMTozNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXNyZWNvdmVyeS5jOgotCSAgaXNvbXA0OiByZWNvdmVyeTogYWRkIHNhbml0eSBjaGVjawotCSAgLi4uIG9uIHBvc3NpYmx5IGJvZ3VzL2NvcnJ1cHQgaW5wdXQgZGF0YS4KLQotMjAxMi0wMS0yMCAxNzowMDo1MSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkgIHJ0cHRoZW9yYWRlcGF5OiByZW1vdmUgZGVhZCBjb2RlCi0KLTIwMTItMDEtMjAgMTY6NTg6MjggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiByZW1vdmUgcmVkdW5kYW50IHZhcmlhYmxlCi0KLTIwMTItMDEtMjAgMTY6NTc6NTIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBmaXggYXJpdGhtZXRpYyBmb3IgdW5zaWduZWQgY29tcGFyaXNvbgotCi0yMDEyLTAxLTIwIDE2OjU1OjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogYWRkIHZhcmlvdXMgbWlzc2luZyBicmVhawotCi0yMDEyLTAxLTIwIDE2OjU0OjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHR3ZWFrIERFRkFVTFQgZm9ybWF0IGR1cmF0aW9uIHF1ZXJ5IHJlc3BvbnNlCi0KLTIwMTItMDEtMjAgMTY6NDk6MTQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSAgYWxwaGFjb2xvcjogcmVtb3ZlIHJlZHVuZGFudCBzdGF0ZW1lbnQKLQotMjAxMi0wMS0yMCAxNjo0ODo0OSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IGltcHJvdmUgdXBzdHJlYW0gcGVlciBkdXJhdGlvbiBxdWVyeWluZwotCSAgLi4uIHRvIGF2b2lkIGFjY2VwdGluZyB1bmhhbmRsZWQgZHVyYXRpb24gcXVlcnkgcmVzdWx0LgotCi0yMDEyLTAxLTIwIDE2OjQ3OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogYWRkaXRpb25hbCBlcnJvciBjb25kaXRpb24gY2hlY2tpbmcKLQotMjAxMi0wMS0yMCAxNjo0NjoyMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogYWRkaXRpb25hbCBlcnJvciBjb25kaXRpb24gY2hlY2tpbmcKLQotMjAxMi0wMS0yMCAxNjo0NDoyMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IGNoZWNrIF9hbGxvY19idWZmZXIgcmVzdWx0IGFuZCBwZXJmb3JtIGZhbGxiYWNrIGFsbG9jIGlmIG5lZWRlZAotCSAgLi4uIHJhdGhlciB0aGFuIGNhcnJ5aW5nIG9uIHdpdGggTlVMTCBidWZmZXIuCi0KLTIwMTItMDEtMjAgMTQ6NDU6MDEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBhZGFwdCB0byBjb250cm9sIGJpbmRpbmcgY2hhbmdlcwotCi0yMDEyLTAxLTIwIDExOjM3OjM4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvY2FtY3RybC5jOgotCSAgY29udHJvbGxlcjogYWRhcHQgdG8gY29udHJvbGxlciBhcGkgY2hhbmdlcwotCSAgRG9uJ3QgdXNlIHRoZSBjb252ZW5pZW5jZSBhcGkgZm9yIGNvbnRyb2wgc291cmNlcy4KLQotMjAxMi0wMS0xOSAxNDoyNDowNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEFkZCAtLWRpc2FibGUtZmF0YWwtd2FybmluZ3MgY29uZmlndXJlIG9wdGlvbgotCi0yMDEyLTAxLTE5IDEyOjQ0OjM5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgdXBkYXRlIGZvciBtZW1vcnkgQVBJCi0KLTIwMTItMDEtMTkgMTE6MzM6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmg6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5oOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmg6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb292ZXJsYXkuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6Ci0JICBwb3J0IHRvIG5ldyBndGhyZWFkIEFQSQotCi0yMDEyLTAxLTE4IDE2OjU4OjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiBSZW1vdmUgR0lPIGNoZWNrLCB0aGlzIGlzIGluIGdzdC1nbGliMi5tNCBub3cKLQotMjAxMi0wMS0xOCAxNjo0NjoxNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwODA3MTg3IHRvIDJhNTkwMTYKLQotMjAxMi0wMS0xOCAxNjoxNTo1OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBHTGliIDIuMzEuMTAgYW5kIGltcHJvdmUgR0lPIGNoZWNrCi0KLTIwMTItMDEtMTcgMTY6NTg6MDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBSZW1vdmUgdW5uZWVkZWQgc29ja2V0LmggaW5jbHVkZQotCi0yMDEyLTAxLTE3IDE2OjUzOjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JICBjb25maWd1cmU6IFJlbW92ZSBzb2NrZXQvd2luc29jayBzcGVjaWZpYyBjaGVja3MKLQkgIE5vdCBuZWNlc3NhcnkgYW55bW9yZS4KLQotMjAxMi0wMS0xNyAxNjo0OToxMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogVXBkYXRlIGZvciB0aGUgbmV3IEdJTyB2ZXJzaW9ucyBvZiB0aGUgdWRwIGVsZW1lbnRzCi0KLTIwMTItMDEtMTcgMTM6MDg6NDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBtYW5hZ2VyOiBQb3J0IHRvIEdJTwotCi0yMDEyLTAxLTE3IDExOjE5OjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkgIGNvbmZpZ3VyZTogUmVxdWlyZSBHSU8gMi4zMS4xMAotCi0yMDEyLTAxLTE3IDExOjE4OjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHAuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuaDoKLQkgIHVkcDogUmVtb3ZlIG5vdyB1bmVjZXNzYXJ5IGNvZGUKLQotMjAxMi0wMS0xNyAxMToxODoxNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuaDoKLQkgIHVkcHNpbmsvbXVsdGl1ZHBzaW5rOiBQb3J0IHRvIEdJTwotCi0yMDEyLTAxLTE3IDA5OjM4OjMzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBkeW51ZHBzaW5rOiBQb3J0IHRvIEdJTwotCi0yMDEyLTAxLTE3IDA5OjMyOjI3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkgIGR5bnVkcHNpbms6IFBvcnQgdG8gR0lPCi0KLTIwMTItMDEtMTcgMDk6MDM6MzggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgdWRwc3JjOiBQb3J0IHRvIEdJTwotCi0yMDEyLTAxLTE2IDE3OjUxOjE4ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkgIGN1dHRlcjogZml4IGxlYWsgb2YgdW51c2VkIEdWYWx1ZQotCi0yMDEyLTAxLTE2IDE2OjEwOjA4ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXV0b2RldGVjdC5jOgotCSAgdGVzdHM6IGZpeCBhdXRvZGV0ZWN0IHRlc3Qgbm90IHRlc3RpbmcgY29ycmVjdGx5IGZvciBzdGF0ZSBjaGFuZ2Ugc3VjY2VzcwotCSAgU3RhdGUgY2hhbmdlIHRvIFBBVVNFRCBjYW4gYmUgZG9uZSBhc3luYywgc28gaWYgdGhpcyBoYXBwZW5zLCB3ZSBuZWVkCi0JICB0byB3YWl0IGZvciB0aGUgY2hhbmdlIHRvIGJlIGRvbmUgKG9yIGZhaWxlZCkuCi0KLTIwMTItMDEtMTYgMTU6NDI6NDYgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICBydHBoMjYzcHBheTogZml4IGNhcHMgbGVhawotCi0yMDEyLTAxLTE2IDEyOjEzOjUwICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogbWFrZSBpbnRlcmxhY2VkbmVzcyB0ZXN0IGRldGVybWluaXN0aWMKLQkgIElmIHRoZSBpbnRlcmxhY2VkIGZsYWcgaXMgbm90IHByZXNlbnQgaW4gdGhlIGNhcHMsIHdlIGFzc3VtZSB0aGUKLQkgIGRhdGEgaXMgbm90IGludGVybGFjZWQsIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgYm9vbGVhbiB1bmluaXRpYWxpemVkLgotCi0yMDEyLTAxLTEzIDE4OjEyOjA1IC0wNTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtYXRyb3NrYTogZml4IHByaW50ZiBmb3JtYXQgY29tcGlsZXIgd2FybmluZ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI2MTUKLQotMjAxMi0wMS0xMyAxODoxMTozNiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IGZpeCB3cm9uZyBlcnJvciBjaGVjawotCSAgcGFfc3RyZWFtXyogZnVuY3Rpb25zIHJldHVybiBuZWdhdGl2ZSBvbiBlcnJvciwgZGVzcGl0ZSB0aGUgZGVmaW5lcwotCSAgZm9yIGVycm9yIGNvZGVzIGJlaW5nIHBvc2l0aXZlLgotCSAgSSBvbmx5IGdvdCB0byByZXBybyB0aGUgZXJyb3IgdHdpY2UsIHNvIEknbSBub3Qgc3VyZSAxMDAlIHN1cmUgdGhpcwotCSAgZml4ZXMgdGhlIGlzc3VlICh0aGUgbmVnYXRpdmUgdmFyIGJlaW5nIHVuaW5pdGlhbGl6ZWQgYWZ0ZXIgcmV0dXJuaW5nCi0JICBmcm9tIHBhX3N0cmVhbV9nZXRfbGF0ZW5jeSkuCi0KLTIwMTItMDEtMTMgMTc6NDM6NDkgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKLQkqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JICBvc3M0OiBmaXggY2FwcyBsZWFrcwotCi0yMDEyLTAxLTEzIDE3OjI1OjU5ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogZml4IGNhcHMgbGVhawotCi0yMDEyLTAxLTEzIDE1OjU3OjIwICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JICB0ZXN0czogZml4IGNhcHMgbGVhayBpbiB2aWRlb3Rlc3RzcmMgdGVzdAotCi0yMDEyLTAxLTEzIDEyOjUwOjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IGNsZWFuIHVwIG9ic29sZXRlIGNsb3Npbmcgc2VnbWVudCBoYW5kbGluZwotCi0yMDEyLTAxLTEzIDEwOjMyOjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSAgcnRwcHRkZW11eDogcGx1ZyBwYWQgbGVhayBpbiBlcnJvciBjb2RlIHBhdGgKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBTdGlnIFNhbmRuZXMgPHN0aWcuc2FuZG5lc0BjaXNjby5jb20+Ci0JICBEb24ndCBsZWFrIHNyY3BhZCBpZiB0aGVyZSBhcmUgbm8gY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Njc4MjAKLQotMjAxMS0xMC0wNCAxMDowMDowMiArMDIwMCAgU3RpZyBTYW5kbmVzIDxzdGlnc2FuZEBjaXNjby5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tOgotCSAgb3N4dmlkZW86IEZpeCBsZWFrIG9mIE5TT3BlbkdMUGl4ZWxGb3JtYXQgb2JqZWN0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODE4Ci0KLTIwMTEtMDktMDUgMTA6NDM6MTkgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogRG9uJ3QgYXNzZXJ0IHdoZW4gdGhlIGludGVyZmFjZSBpcyBub3QgaW1wbGVtZW50ZWQuCi0JICBTaW1wbHkgcmV0dXJuIEZBTFNFIGluc3RlYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3ODE3Ci0KLTIwMTItMDEtMTIgMDA6MTg6MzkgKzAyMDAgIFJhaW1vIErDpHJ2aSA8cmFpbW8uamFydmlAZ21haWwuY29tPgotCi0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmM6Ci0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmg6Ci0JICB3YXZlZm9ybXNpbms6IEZpeCBtaW5ndyB3YXJuaW5ncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzcxOQotCi0yMDEyLTAxLTEyIDIzOjU1OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBHU1RfVFlQRV9EQVRFIC0+IEdfVFlQRV9EQVRFCi0KLTIwMTItMDEtMTIgMjM6NDg6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBlcU1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9tYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jCi0JICBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYwotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmMKLQotMjAxMi0wMS0xMiAxODoyMzo0MiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgZ3N0cnRwc3NyY2RlbXV4OiBmaXggZWxlbWVudCBsZWFrCi0KLTIwMTItMDEtMTIgMTQ6MTk6MjIgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thOiBkbyBub3QgbGVhayBhdHRhY2htZW50IGJ1ZmZlcnMKLQotMjAxMi0wMS0xMiAxMzoxNzo1NSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiByZW1vdmUgb2Jzb2xldGUgRklYTUUgY29tbWVudHMKLQotMjAxMi0wMS0xMiAxMDozMDoxMSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IGRvIG5vdCBkcm9wIHRoZSBmaXJzdCBkYXRhIGJ1ZmZlciBvbiB0aGUgZmxvb3IgKGFuZCBsZWFrIGl0IGVpdGhlcikKLQotMjAxMi0wMS0xMiAxMTowODozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0aW5kZXguYzoKLQkqIGdzdC9mbHYvZ3N0bWVtaW5kZXguYzoKLQkgIGZsdmRlbXV4OiBhZGQgcHJlZml4IHRvIGxvY2FsIEdzdEluZGV4IHJlbGF0ZWQgY29waWVzCi0JICAuLi4gdG8gYXZvaWQgZHVwbGljYXRlIHR5cGUgbmFtZXMgd2l0aCBvdGhlciBzdWNoIGxvY2FsIGNvcGllcyBpbiB0aGUgd2lsZC4KLQotMjAxMi0wMS0xMiAxMTowNzozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBhY3RpdmF0ZSBwYWQgYmVmb3JlIHNldHRpbmcgY2FwcwotCSAgLi4uIHJhdGhlciB0aGFuIHRoZSB1c3VhbCAwLjEwIG90aGVyIHdheSBhcm91bmQuCi0JICBGaXhlcyAjNjY3NTU4LgotCi0yMDEyLTAxLTExIDE4OjQ1OjMzIC0wMzAwICBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0IDxyZXluYWxkb0Bjb2xsYWJvcmEuY29tPgotCi0JKiBBbmRyb2lkLm1rOgotCSAgVGVtcG9yYXJpbHkgZGlzYWJsaW5nIG11bHRpZmlsZSBmb3IgdGhlIEFuZHJvaWQgYnVpbGQKLQkgIFRoZXJlIGlzIGEgaGFyZCBkZXBlbmRlbmN5IG9uIGlub3RpZnkgY29tbWluZyBmcm9tIGdpby4gV2UKLQkgIGFyZSBub3QgY3VycmVudGx5IGJ1bmRsaW5nIGlub3RpZnkgd2l0aCB0aGUgQW5kcm9pZCBkaXN0IHNvCi0JICBJJ20gZGlzYWJsaW5nIG11bHRpZmlsZSBmb3Igbm93IHVudGlsIHNvbWVvbmUgZ2V0cyBhcm91bmQKLQkgIHRvIHNvcnQgdGhpcyBvdXQuCi0JICBUaGlzIGNoYW5nZSBmaXhlcyBidWlsZGluZyBvbiBBbmRyb2lkCi0KLTIwMTAtMTAtMjAgMDI6MTc6NDMgLTA3MDAgIExlbyBTaW5nZXIgPGxlby5zaW5nZXJAbGlnby5vcmc+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4OiBVc2UgbW9zdCBjb21tb24gY29udmVudGlvbiBmb3IgZGVmaW5pdGlvbnMgb2YgSUlSIGZpbHRlciBjb2VmZmljaWVudHMuCi0JICBNb3N0IHNpZ25hbCBwcm9jZXNzaW5nIHRleHRzLCBpbmNsdWRpbmcgTUFUTEFCLCB1c2UgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uIGZvciBJSVIgZmlsdGVyIGNvZWZmaWNpZW50czoKLQkgIGFfMCB5W25dICsgYV8xIHlbbi0xXSArIC4uLiArIGFfTSB5W24tTV0gPSBiXzAgeFtuXSArIGJfMSB4W24tMV0gKyAuLi4gKyBiW05dIHhbbi1OXQotCSAgVXN1YWxseSwgYV8wIGlzIHNldCB0byAxIGJlY2F1c2UgdGhlIGNvZWZmaWNpZW50cyBjYW4gYWx3YXlzIGJlIHJlc2NhbGVkLCBnaXZpbmcKLQkgIHlbbl0gPSBiXzAgeFtuXSArIGJfMSB4W24tMV0gKyAuLi4gKyBiW05dIHhbbi1OXSAtIGFfMSB5W24tMV0gLSAuLi4gLSBhX00geVtuLU1dCi0JICBUaGUgY29udmVudGlvbiB0aGF0IHdhcyBwcmV2aW91c2x5IHVzZWQgYnkgYXVkaW9meGJhc2VpaXJmaWx0ZXIgYW5kIGRlcml2ZWQgY2xhc3MgaGFkIHRoZSBhIGFuZCBiIGNvZWZmaWNpZW50cyBzd2FwcGVkLCBhbmQgZGlkIG5vdCBoYXZlIHRoZSBtaW51cyBzaWducy4KLQkgIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBhdWRpb2Z4IHBsdWdpbiB1c2UgdGhlIG1vcmUgY29tbW9uIGNvbnZlbnRpb24gZGVzY3JpYmVkIGFib3ZlLgotCi0yMDEyLTAxLTExIDE0OjQ3OjM2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5oOgotCSAgamFjazogYWRkIGEgdHJhbnNwb3J0IG1vZGUgZW51bQotCSAgQ2xpZW50cyBjYW4gY29uZmlndXJlIHRoZSBkZXNpcmVkIGJlaGF2aW91ciB2aWEgInRyYW5zcG9ydCIgcHJvcGVydHkuIFRoZQotCSAgZGVmYXVsdCBiZWhhdmlvdXIgaXMgaWdub3JpbmcgdGhlIHRyYW5zcG9ydCBzdGF0ZS4gT3RoZXIgbW9kZXMgYXJlIG1hc3RlciBhbmQKLQkgIHNsYXZlLgotCi0yMDEyLTAxLTExIDE0OjEwOjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBGaXggYnVmZmVyIGhhbmRsaW5nCi0JICBzb3VwaHR0cHNyYyBpcyBub3cgdXNhYmxlIGFnYWluIGFuZCBkb2Vzbid0IGNyYXNoIGFueW1vcmUKLQkgIHdoZW5ldmVyIHNvbWV0aGluZyBpcyByZWFkIGZyb20gYSBIVFRQIGNvbm5lY3Rpb24uCi0KLTIwMTItMDEtMTEgMDE6NDU6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2ZW5jLmM6Ci0JICB0ZXN0czogZml4IHdhdmVuYyB0ZXN0IG9uIGJpZyBlbmRpYW4KLQkgIHdhdmVuYyBvbmx5IGFjY2VwdHMgbGl0dGxlLWVuZGlhbiBQQ00sIGJ1dCBtb3N0IG9mIG91cgotCSAgZWxlbWVudHMgc3VjaCBhcyBhdWRpb3Rlc3RzcmMgb25seSBwcm9kdWNlIG9yIHByb2Nlc3MKLQkgIGF1ZGlvIGluIG5hdGl2ZSBlbmRpYW5uZXNzLCBzbyB3ZSBuZWVkIHRvIHBsdWcgYQotCSAgY29udmVydGVyIGJlZm9yZSB3YXZlbmMgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLgotCi0yMDEyLTAxLTEwIDIzOjAyOjQ1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGRlYWN0aXZhdGUgdGhlIHJlcXVlc3Rfc3RhdGUgY29kZQotCSAgV2hlbiBxamFja2N0bCBpcyBzdGFydGVkLCB0cmFuc3BvcnQgaXMgc3RvcHBlZCBieSBkZWZhdWx0LiBUaGlzIHdvdWxkIGJlIGEKLQkgIHJlZ3Jlc3Npb24gZm9yIGdzdHJlYW1lciBhcHBzIHRoYXQgYmVmb3JlIGp1c3Qgc3RhcnRlZCB0byBwbGF5IHJpZ2h0IGF3YXkuCi0KLTIwMTItMDEtMTAgMjI6Mjc6MTEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50Lmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGFkZCB0cmFuc3BvcnQgY29udHJvbCBoYW5kbGluZwotCSAgVGhpcyBmZWF0dXJlIGFsbG93cyB0byBzdGFydCBhbmQgc3RvcCBwbGF5YmFjayBmcm9tIG90aGVyIGphY2sgYXBwbGljYXRpb25zIChlLmcuIHFqYWNrY3RsKS4KLQotMjAxMi0wMS0xMCAxODo1MDoyNyArMDEwMCAgTmljb2xhIE11cmlubyA8bmljb2xhLm11cmlub0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBmaXggY29kZWNfcHJpdiBsZWFrcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzQxOQotCi0yMDEyLTAxLTEwIDE1OjA2OjM5ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuYzoKLQkgIGphY2s6IHVzZSBqYWNrIHR5cGUgZm9yIHRoZSBjYWxsYmFjawotCSAgSmFjayBoZWFkZXJzIGhhdmUgYSB0eXBlZGVmIGZvciB0aGUgc2h1dGRvd24gY2FsbGJhY2sgYXMgd2VsbC4KLQotMjAxMi0wMS0xMCAxNDozMjozMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jCi0JICBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYwotCSAgZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jCi0JICBnc3QvZmx2L2dzdGZsdm11eC5jCi0JICBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmMKLQkgIGdzdC9pc29tcDQvZ3N0cXRtdXguYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmMKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYwotCSAgZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmMKLQkgIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmMKLQkgIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmMKLQkgIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jCi0JICBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYwotCSAgZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYwotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jCi0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYwotCSAgcG8vamEucG8KLQkgIHBvL2x2LnBvCi0JICBwby9zci5wbwotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmMKLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmMKLQotMjAxMi0wMS0wOSAyMjo1ODozMiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIGRvY3M6IFJlbW92ZSBvbGQgdmlkZW9taXhlciBoZWFkZXJzCi0JICBUaGVzZSBnb3QgcmVtb3ZlZCBpbiB0aGUgdHJhbnNpdGlvbiB0byB2aWRlb21peGVyMi4KLQotMjAxMi0wMS0wOSAxNzoyODoxNyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBmaXggY29kZWMgc3RyaW5nIGxlYWtzCi0KLTIwMTItMDEtMDkgMTQ6NTE6NDQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcnBhZC5oOgotCSAgdmlkZW9taXhlcjogUmVtb3ZlIHZpZGVvbWl4ZXIgYW5kIHJlZ2lzdGVyIHZpZGVvbWl4ZXIyIGFzIHZpZGVvbWl4ZXIKLQotMjAxMi0wMS0wOSAxMTozNjo1OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogaW5pdGlhbGl6ZSB2YXJpYWJsZSB0byBhdm9pZCB1bmRlZmluZWQgdXNlCi0KLTIwMTItMDEtMDYgMDk6NDA6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmg6Ci0JICBmbGFjOiBQb3J0IHRvIHRoZSBuZXcgcmF3IGF1ZGlvIGNhcHMKLQotMjAxMi0wMS0wNSAxOToyNTozMyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIGlzb21wNDogZml4IGNhcHMgbGVhawotCi0yMDEyLTAxLTA1IDE5OjA4OjAzICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgaXNvbXA0OiByZW1vdmUgZGVhZCBhc3NpZ25tZW50Ci0KLTIwMTItMDEtMDUgMTQ6MTg6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICBmaXggcGFkIHRlbXBsYXRlcwotCi0yMDEyLTAxLTA0IDE1OjA1OjQxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4OiBVcGRhdGUgZm9yIHRoZSBuZXcgcmF3IGF1ZGlvIGNhcHMKLQotMjAxMi0wMS0wNCAxNDo1NDoxMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogQWRkIHRoZSBuZXcgbGF5b3V0IGZpZWxkIHRvIHRoZSByYXcgYXVkaW8gY2FwcwotCi0yMDEyLTAxLTA0IDE0OjUyOjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrdXRpbC5jOgotCSogZXh0L2phY2svZ3N0amFja3V0aWwuaDoKLQkgIGphY2thdWRpb3NyYzogUG9ydCB0byB0aGUgbmV3IG11bHRpY2hhbm5lbCBhdWRpbyBjYXBzCi0KLTIwMTItMDEtMDQgMTQ6MTM6NTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEFkZCBGTEFDIGFuZCBpbnRlcmxlYXZlIHRvIHRoZSBub24tcG9ydGVkIHBsdWdpbnMgbGlzdAotCSAgQm90aCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gdGhlIGF1ZGlvL3gtcmF3IGNhcHMgYW5kIHdlcmUgb25seQotCSAgaGFsZi1wb3J0ZWQgYmVmb3JlLgotCi0yMDEyLTAxLTA0IDEzOjQ4OjM2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNoYW5uZWxzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNoYW5uZWxzLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHJ0cDogVXBkYXRlIGZvciB0aGUgbmV3IGF1ZGlvIGNhcHMKLQotMjAxMi0wMS0wNCAxMjowNjoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IFVwZGF0ZSBmb3IgbGliZ3N0cmlmZiBBUEkgY2hhbmdlcwotCSAgU3RpbGwgbmVlZHMgdG8gaGFuZGxlIHJhdyBhdWRpbyBjaGFubmVsIHJlb3JkZXJpbmcKLQotMjAxMi0wMS0wNCAxMjowNToxNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICB3YXZlbmM6IFVwZGF0ZSBmb3IgdGhlIG5ldyByYXcgYXVkaW8gY2FwcwotCi0yMDEyLTAxLTA0IDEyOjAzOjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogVXBkYXRlIGZvciB0aGUgbmV3IHJhdyBhdWRpbyBjYXBzIGxheW91dCBmaWVsZAotCi0yMDEyLTAxLTA0IDExOjU3OjIwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgcmVwbGF5Z2FpbjogVXBkYXRlIGZvciB0aGUgbmV3IGF1ZGlvIGNhcHMKLQotMjAxMi0wMS0wNCAxMTo1MjoyOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IFVwZGF0ZSBmb3IgdGhlIG5ldyByYXcgYXVkaW8gaW50ZXJsZWF2ZWQgY2FwcyBmaWVsZAotCSAgU3RpbGwgbmVlZHMgdG8gYmUgZml4ZWQgdG8gaGFuZGxlIHRoZSBtdWx0aWNoYW5uZWwgY2hhbm5lbC1tYXNrCi0JICBhbmQgcmVvcmRlcmluZy4KLQotMjAxMi0wMS0wNCAxMTozMTowNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IFVwZGF0ZSBmb3IgdGhlIG5ldyByYXcgYXVkaW8gbGF5b3V0IGZpZWxkCi0KLTIwMTItMDEtMDQgMTE6Mjk6MjYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIGlzb21wNDogUG9ydCB0byB0aGUgbmV3IGF1ZGlvIGNhcHMKLQkgIFN0aWxsIG5lZWRzIHRvIGhhbmRsZSB0aGUgY2hhbm5lbCBwb3NpdGlvbnMvbWFza3MgYW5kCi0JICBjaGFubmVsIHJlb3JkZXJpbmcuCi0KLTIwMTItMDEtMDQgMTE6MTE6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOgotCSAgY3V0dGVyOiBVcGRhdGUgZm9yIHRoZSBuZXcgcmF3IGF1ZGlvIGxheW91dCBmaWVsZAotCi0yMDEyLTAxLTA0IDExOjA5OjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogUG9ydCB0byB0aGUgbmV3IG11bHRpY2hhbm5lbCBjYXBzIGFuZCB1cGRhdGUgZm9yIHRoZSBuZXcgcmF3IGF1ZGlvIGxheW91dCBmaWVsZAotCi0yMDEyLTAxLTA0IDExOjA4OjE4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIGVxdWFsaXplcjogVXBkYXRlIGZvciB0aGUgbmV3IHJhdyBhdWRpbyBsYXlvdXQgZmllbGQKLQotMjAxMi0wMS0wNCAxMTowNzoyOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBVcGRhdGUgZm9yIHRoZSBsaWJnc3RyaWZmIEFQSSBjaGFuZ2VzCi0JICBTdGlsbCBuZWVkcyB0byBkbyByZW9yZGVyaW5nIG9mIGNoYW5uZWxzIGZvciByYXcgYXVkaW8uCi0KLTIwMTItMDEtMDQgMTE6MDY6MjggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBhdXBhcnNlOiBQb3J0IHRvIHRoZSBuZXcgbXVsdGljaGFubmVsIGNhcHMgYW5kIHRoZSBuZXcgcmF3IGF1ZGlvIGxheW91dCBmaWVsZAotCi0yMDEyLTAxLTA0IDExOjAyOjQzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JICBhdWRpb2Z4OiBQb3J0IHRvIHRoZSBuZXcgbXVsdGljaGFubmVsIGNhcHMgYW5kIHRoZSBuZXcgcmF3IGF1ZGlvIGxheW91dCBmaWVsZAotCi0yMDEyLTAxLTA0IDEwOjU0OjQ2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSAgb3NzOiBQb3J0IHRvIHRoZSBuZXcgbXVsdGljaGFubmVsIGNhcHMgYW5kIHRoZSByYXcgYXVkaW8gY2FwcyBpbnRlcmxlYXZlZCBmaWVsZAotCi0yMDEyLTAxLTA0IDEwOjI3OjA5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZTogUG9ydCB0byB0aGUgbmV3IG11bHRpY2hhbm5lbCBjYXBzCi0KLTIwMTItMDEtMDQgMTk6NTE6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNzYyYjY5MiB0byAwODA3MTg3Ci0KLTIwMTItMDEtMDQgMTc6NTk6NTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdGVzdHM6IGZpeCBzb21lIGxlYWtzIGFuZCByZW1vdmUgZmlsZXMgd2hlbiBkb25lIGluIHF0bXV4IHRlc3QKLQotMjAxMS0xMi0xNCAxMDoxNDoyMCArMDEwMCAgUGV0ZXIgU2VpZGVyZXIgPHBzLnJlcG9ydEBnbXgubmV0PgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgIG11bHRpZmlsZXNpbms6IHBvc3QgYmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB3ZSBydW4gb3V0IG9mIGRpc2sgc3BhY2UKLQkgIE1hcCB3cml0ZSBlcnJubyBFTk9TUEMgdG8gR1NUX1JFU09VUkNFX0VSUk9SX05PX1NQQUNFX0xFRlQuCi0KLTIwMTItMDEtMDQgMTM6MjY6NDUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWxwaGFjb2xvci5jOgotCSAgYWxwaGFjb2xvcjogTW9yZSBmaXhlcy9jbGVhbnVwCi0KLTIwMTItMDEtMDQgMTM6MjU6NDAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBSZWZhY3RvciBwYXJhbS9wcm9jZXNzIGZ1bmN0aW9ucwotCSAgV2hlbiA6OnNldF9pbmZvKCkgaXMgY2FsbGVkLCB0aGUgaW5wdXQvb3V0cHV0IFZpZGVvSW5mbyBhcmVuJ3Qgc2V0Ci0JICB5ZXQgb24gdGhlIHZpZGVvZmlsdGVyLgotCi0yMDEyLTAxLTA0IDEwOjAxOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkgIEdTVF9GTE9XX1VORVhQRUNURUQgLT4gR1NUX0ZMT1dfRU9TCi0KLTIwMTEtMTItMzEgMjM6MzM6MzMgLTA1MDAgIE1hdGVqIEtub3BwIDxtYXRlai5rbm9wcEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkgIGRjYXBhcnNlOiB1c2UgcmlnaHQgdmFyaWFibGUKLQkgIEZpeGVzIHVzZSBvZiB1bml0aWFsaXplZCB2YXJpYWJsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcwODUKLQotMjAxMi0wMS0wMyAxNToyNjoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgR1NUX0ZMT1dfVU5FWFBFQ1RFRCAtPiBHU1RfRkxPV19FT1MKLQotMjAxMi0wMS0wMyAxNDo0MjoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3RhZ3NjaGVja2luZy5jOgotCSAgdGVzdHM6IHJld3JpdGUgdGVzdCBhIGxpdHRsZQotCSAgUmV3cml0ZSB0aGUgdGFnIGNoZWNrIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggdGFnIGxpc3RzLgotCi0yMDEyLTAxLTAzIDE0OjE2OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2pwZWdlbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zaGFwZXdpcGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICB0ZXN0czogbWFrZSBtb3JlIHRlc3RzIGNvbXBpbGUKLQotMjAxMi0wMS0wMyAxMTo1NjoyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9lcXVhbGl6ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ZsYWNwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2ZGVtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zsdm11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWN5ZGVtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ltYWdlZnJlZXplLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOgotCSAgdGVzdDogbWFrZSBtb3JlIHVuaXQgdGVzdHMgY29tcGlsZQotCi0yMDEyLTAxLTAzIDEwOjI2OjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2lpcmZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9pbnZlcnQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpc3VidGl0bGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNzZXR0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGVhdmUuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvaW5kZXguYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICB0ZXN0czogZml4IHNvbWUgdW5pdCB0ZXN0cwotCSAgUmVtb3ZlIHVuaXQgdGVzdCBmb3IgR3N0SW5kZXguCi0JICBNYWtlIHNvbWUgb3RoZXIgdW5pdCB0ZXN0cyBjb21waWxlCi0KLTIwMTItMDEtMDIgMTQ6MzI6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcGV4dC5jOgotCSAgYXV0b2RldGVjdCwgcnRzcDogZ3N0X3JlZ2lzdHJ5X2dldF9kZWZhdWx0KCkgLT4gZ3N0X3JlZ2lzdHJ5X2dldCgpCi0KLTIwMTEtMTItMzEgMTA6MDA6NDEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvY2FtY3RybC5jOgotCSAgY29udHJvbGxlcjogcG9ydCB0byBBUEkgY2hhbmdlcwotCi0yMDExLTEyLTMwIDE3OjQxOjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogdXBkYXRlIGZvciBHc3RJbmRleCByZW1vdmFsCi0KLTIwMTEtMTItMzAgMTc6MjM6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogdXBkYXRlIGZvciBHc3RJbmRleCByZW1vdmFsCi0KLTIwMTEtMTItMzAgMTc6MjA6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RpbmRleC5jOgotCSogZ3N0L2Zsdi9nc3RpbmRleC5oOgotCSogZ3N0L2Zsdi9nc3RtZW1pbmRleC5jOgotCSAgZmx2ZGVtdXg6IHVwZGF0ZSBmb3IgR3N0SW5kZXggcmVtb3ZhbAotCSAgQWRkIHByaXZhdGUgR3N0TWVtSW5kZXggZm9yIG5vdy4KLQotMjAxMS0xMi0zMCAxNzoxMjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiB1cGRhdGUgZm9yIEdzdEluZGV4IHJlbW92YWwKLQotMjAxMS0xMi0yNyAyMjo1OTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkgIHdhdmVmb3Jtc2luazogZml4IGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggTWluZ1cKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjY0ODUKLQotMjAxMS0xMi0yNyAxMjowNjoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICB0ZXN0czogbWFrZSBnaXQgaWdub3JlIG5ldyB1bml0IHRlc3QgYmluYXJ5Ci0KLTIwMTEtMTItMjcgMTE6NTA6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBmaXggdmFsZ3JpbmQgd2FybmluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjY0NAotCi0yMDExLTEyLTI3IDExOjQ5OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzcmMuYzoKLQkgIHVkcHNyYzogYWRkIHVuaXQgdGVzdCB0aGF0IHNlbmRzIDAtc2l6ZSBwYWNrZXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjY2NDQKLQotMjAxMS0xMi0yMSAxMzoyMjowMyArMDEwMCAgSm9obiBPZ25lc3MgPGpvaG4ub2duZXNzQGxpbnV0cm9uaXguZGU+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGRyb3AgZGF0YWxlc3MgVURQIHBhY2tldHMKLQkgIEl0IGlzIGFsbG93ZWQgdG8gc2VuZC9yZWNlaXZlIFVEUCBwYWNrZXRzIHdpdGggbm8gZGF0YS4gV2hlbiBzdWNoCi0JICBhIHBhY2tldCBpcyBhdmFpbGFibGUsIHNlbGVjdCgpIHdpbGwgcmV0dXJuIHdpdGggc3VjY2VzcyBidXQKLQkgIGlvY3RsKEZJT05SRUFEKSB3aWxsIHJldHVybiAwLiBCdXQgYSByZWFkKCkgbXVzdCBzdGlsbCBvY2N1ciBpbgotCSAgb3JkZXIgdG8gY2xlYXIgb2ZmIHRoZSBVRFAgcGFja2V0IGZyb20gdGhlIHF1ZXVlLgotCSAgVGhpcyBwYXRjaCB3aWxsIHJlYWQgdGhlIGRhdGFsZXNzIHBhY2tldCBmcm9tIHRoZSBzb2NrZXQuIElmCi0JICBzZWxlY3QoKSB3YXMgd29rZW4gZm9yIG90aGVyIHJlYXNvbnMgKGFuZCBGSU9OUkVBRCByZXR1cm5zIDApLAotCSAgdGhpcyBtYXkgcmVzdWx0IGluIGEgVURQIHBhY2tldCBnZXR0aW5nIGFjY2lkZW50YWxseSBkcm9wcGVkLgotCSAgQnV0IHNpbmNlIFVEUCBpcyBub3QgcmVsaWFibGUsIHRoaXMgaXMgYWNjZXB0YWJsZS4KLQkgIE5PVEU6IFRoaXMgcGF0Y2ggZml4ZXMgYSBuYXN0eSBidWcgd2hlcmUgc2VuZGluZyBhIGRhdGFsZXNzCi0JICBVRFAgcGFja2V0IHRvIGEgdWRwc3JjIGluc3RhbmNlIHdpbGwgY2F1c2UgYW4gaW5maW5pdGUKLQkgIGxvb3AuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY2NjQ0Ci0JICBTaWduZWQtb2ZmLWJ5OiBKb2huIE9nbmVzcyA8am9obi5vZ25lc3NAbGludXRyb25peC5kZT4KLQotMjAxMS0xMi0yNiAyMjoyMjo1OSArMDAwMCAgWWFha292IFNlbGtvd2l0eiA8eXNlbGtvd2l0ekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHN5cy9NYWtlZmlsZS5hbToKLQkqIHN5cy93YXZlZm9ybS9NYWtlZmlsZS5hbToKLQkgIHdhdmVmb3JtOiBhZGQgYXV0b3Rvb2xzIGJpdHMgZm9yIHdhdmVmb3JtIHBsdWdpbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjQ4NQotCi0yMDExLTEyLTIxIDIwOjUwOjIxICswMTAwICBOaWNvbGEgTXVyaW5vIDxuaWNvbGEubXVyaW5vQGdtYWlsLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4IHBlZXJfY2FwcyBsZWFrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY2Njg4Ci0KLTIwMTEtMTItMjUgMjM6NTI6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHJlbW92ZSB1bm5lY2Vzc2FyeSBjaGVjayBmb3IgZ2RwIGxpYnJhcnkKLQotMjAxMS0xMi0yNSAyMjoxNzo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGV4dC9wdWxzZS9NYWtlZmlsZS5hbToKLQkqIGV4dC9wdWxzZS9wbHVnaW4uYzoKLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgcHVsc2U6IHJlbW92ZSBwdWxzZWF1ZGlvc2luayBoZWxwZXIgYmluCi0JICBUaGlzIGlzIGNhdXNpbmcgdXMgbG90cyBvZiBoZWFkYWNoZXMgaW4gMC4xMCBhbmQgbmVlZHMgdG8gYmUgZG9uZQotCSAgZGlmZmVyZW50bHkgYW5kIHByb3Blcmx5IGluIDAuMTEuIHBsYXliaW4gb3IgZGVjb2RlYmluIHNob3VsZAotCSAgcmVjb25maWd1cmUgdGhlbXNlbHZlcyBiYXNlZCBvbiByZWNvbmZpZ3VyZSBldmVudHMsIGZvciBleGFtcGxlLgotCi0yMDExLTEyLTI1IDIxOjQ1OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgcHVsc2U6IHVwZGF0ZSBmb3IgcmluZyBidWZmZXIgYXVkaW8gZm9ybWF0IHR5cGUgZW51bSByZW5hbWUKLQotMjAxMS0xMi0yNSAyMDozNDo1MiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBwb3J0IHRvIG5ldyBjb250cm9sIHNvdXJjZSBhcGkKLQotMjAxMS0xMi0yNSAxNDoyMzoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IGRvbid0IHRyeSB0byBwdXNoIGFscmVhZHktZnJlZWQgYnVmZmVycwotCSAgRml4ZXMgdW5pdCB0ZXN0LgotCi0yMDExLTEyLTI0IDEwOjU3OjQyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogVXNlIHNjYWxlX2NlaWwoKSBmdW5jdGlvbnMgZnJvbSBjb3JlIGluc3RlYWQgb2YgY3VzdG9tIG9uZXMKLQotMjAxMS0xMi0yMSAyMzo1MTowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuaDoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5oOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2aWdhdGlvbnRlc3QuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0Lmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RvcC5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmg6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgdXBkYXRlIGZvciB2aWRlb2ZpbHRlciBjaGFuZ2VzLgotCi0yMDExLTEyLTIxIDE3OjQzOjEwICswMTAwICBCcmFua28gU3ViYXNpYyA8YnJhbmtvQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgbWF0cm9za2FkZW11eDogZG8gbm90IGNvbnNpZGVyIGR1cmF0aW9uIG9mIG5vbi1maW5hbGl6ZWQgZmlsZQotCSAgLi4uIHRvIGF2b2lkIGl0IGNsYW1waW5nIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uLgotCSAgTm9uLWZpbmFsaXplZCBmaWxlIGNhc2UsIGRldGVybWluZWQgYnkgd2hldGhlcgotCSAgX3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2sgZXZlciB1cGRhdGVzIHRoZSBzZWdtZW50IGR1cmF0aW9uLgotCSAgRml4ZXMgIzY1MjE5NS4KLQotMjAxMS0xMi0yMSAxNTowNjo1NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogaW1wcm92ZSBkZWNpc2lvbiB0byBmYWxsIGJhY2sgdG8gc2Nhbm5pbmcgd2hlbiBzZWVraW5nCi0JICAuLi4gd2hpY2ggaXMgYmFzaWNhbGx5IGlmZiBub3Qgc3RyZWFtaW5nIGFuZCBubyBlbnRyeSBmb3VuZCBpbiBpbmRleAotCi0yMDExLTEyLTIxIDA5OjA5OjI3ICswMTAwICBPbGVrc2lqIFJlbXBlbCAoQWxleGV5IEZpc2hlcikgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWMzcGFyc2U6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQkgIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUgdG8gZml4IGNvbXBpbGUgZXJyb3I6Ci0JICBtYWtlIC1DIGF1ZGlvcGFyc2VycwotCSAgbWFrZVszXTogQmV0cmV0ZSBWZXJ6ZWljaG5pcyAnL2hvbWUvbGV4L3RtcC9nc3QtcGx1Z2lucy1nb29kL2dzdC9hdWRpb3BhcnNlcnMnCi0JICBDQyAgICAgbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFhY3BhcnNlLmxvCi0JICBnc3RhYWNwYXJzZS5jOiBJbiBmdW5jdGlvbiAnZ3N0X2FhY19wYXJzZV9yZWFkX2xvYXNfYXVkaW9fc3BlY2lmaWNfY29uZmlnJzoKLQkgIGdzdGFhY3BhcnNlLmM6NDQ2OjEyOiBlcnJvcjogdmFyaWFibGUgJ3Nicicgc2V0IGJ1dCBub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZV0KLQkgIGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCi0JICBTaWduZWQtb2ZmLWJ5OiBPbGVrc2lqIFJlbXBlbCAoQWxleGV5IEZpc2hlcikgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotMjAxMS0xMi0yMSAxMTo1OTo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXIuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3B1bHNlL3B1bHNlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy92NGwyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9wcm9iZS5jOgotCSAgdXBkYXRlIGZvciByZW1vdmVkIHByb3BlcnR5IHByb2JlCi0KLTIwMTEtMDktMDkgMTE6NDI6MDkgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogbGV0IGJzaWQgOSBhbmQgMTAgdGhyb3VnaAotCSAgRmlsZXMgd2l0aCA5IGFuZCAxMCBoYXBwZW4sIGFuZCBzZWVtIHRvIGNvbXBseSB3aXRoIHRoZSA8PSA4Ci0JICBmb3JtYXQsIHNvIGxldCB0aGVtIHRocm91Z2guCi0JICBUaGUgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQgOSBhbmQgMTAuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NTQ2Ci0KLTIwMTEtMTItMTkgMjM6NTA6MTkgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvY2FtY3RybC5jOgotCSAgY29udHJvbGxlcjogcG9ydCB0byBuZXcgaW50ZXJwb2xhdGlvbi1tb2RlIGFwaQotCi0yMDExLTEyLTE5IDIyOjUzOjU3ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy92NGwyL2NhbWN0cmwuYzoKLQkgIGNvbnRyb2xsZXI6IHBvcnQgdG8gbmV3IGNvbnRyb2xsZXIgYXBpCi0KLTIwMTEtMTItMTkgMTk6MDM6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiB1cGRhdGUgZm9yIG5ldyBpbnRlcmxhY2VkIGNhcHMKLQotMjAxMS0xMi0xNiAxOToxNTozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IHByb3Blcmx5IGRldGVybWluZSBmaW5hbCBkdXJhdGlvbgotCSAgLi4uIHdoaWNoIGNhbiBiZSBhdXRob3JhdGl2ZWx5IG9idGFpbmVkIGZyb20gb3VyIG93biB3cml0dGVuIHRpbWVzdGFtcHMuCi0KLTIwMTEtMTItMTkgMTM6NTY6MzAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBvbmx5IHdyaXRlIGZ1bGwgbWV0YWRhdGEgYXQgc3RhcnQKLQkgIC4uLiByYXRoZXIgdGhhbiBoYXZpbmcgKHBvdGVudGlhbGx5KSB1bm5lY2Vzc2FyeSBkdXBsaWNhdGVzIHdyaXR0ZW4gYWxsIG92ZXIsCi0JICBvciBldmVuIGNvbnRyYWRpY3RvcnkgdmFyeWluZyBmaWxlc2l6ZSBpbmZvLCBvciBkdXJhdGlvbiBpbmZvIHRoYXQgd2lsbCBub3QKLQkgIGJlIHJld3JpdHRlbiB1cG9uIGhlYWRlciByZXdyaXRlLgotCi0yMDExLTEyLTE2IDE5OjE1OjAzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogdXNlIEdzdENvbGxlY3RQYWRzMiBidWZmZXIgY2FsbGJhY2sgYW5kIHJ1bm5pbmcgdGltZSBjbGlwcGVyCi0JICAuLi4gc2luY2UgdGhlIGRlZmF1bHQgY29sbGVjdGlvbiBoZXVyaXN0aWNzIHN1ZmZpY2UuCi0KLTIwMTEtMTItMTYgMTg6MDM6MDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogdXNlIEdzdENvbGxlY3RQYWRzMiBidWZmZXIgY2FsbGJhY2sgYW5kIHJ1bm5pbmcgdGltZSBjbGlwcGVyCi0JICAuLi4gc2luY2UgZGVmYXVsdCBjb2xsZWN0aW9uIGhldXJpc3RpY3Mgc3VmZmljZS4KLQotMjAxMS0xMi0xNiAxNzoyMDo1MSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBicmluZyBhIGZldyBkZWJ1ZyBzdGF0ZW1lbnRzIHVwIHRvIHNwZWNzCi0JICAuLi4gYW5kIG1pbm9yIHNwZWxsaW5nIGZpeC4KLQotMjAxMS0xMi0xNiAxNjo1NjozNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBhZGRpdGlvbmFsIHN1YnRpdGxlIHN1cHBvcnQKLQotMjAxMS0xMi0xNSAyMTo1MDo0MiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBhZGRpdGlvbmFsIGJ1ZmZlciBoYW5kbGluZyBjbGVhbnVwCi0KLTIwMTEtMTItMTUgMjE6NDU6MTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogdXNlIEdzdENvbGxlY3RQYWRzMiBidWZmZXIgY2FsbGJhY2sgYW5kIHJ1bm5pbmcgdGltZSBjbGlwcGVyCi0KLTIwMTEtMTItMDcgMTM6MjQ6NTUgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmg6Ci0JICBhYWNwYXJzZTogcGFyc2UgTE9BUyB2YXJpYW50Ci0JICBUaGUgTE9BUyB2YXJpYW50IHNlZW1zIHRvIGhhdmUgdGhyZWUgZGlmZmVyZW50IHN1YnZhcmlhbnRzIGl0c2VsZiwKLQkgIG9ubHkgb25lIG9mIHRoZW0gaXMgaW1wbGVtZW50ZWQgYXMgbXkgdHdvIHNhbXBsZXMgaGFwcGVuIHRvIGJlCi0JICB1c2luZyB0aGF0IG9uZS4KLQkgIFRoZSBzYW1wbGUgcmF0ZSBpcyBub3QgYWx3YXlzIHJlcG9ydGVkIGNvcnJlY3RseSwgYXMgdGhlICJtYWluIgotCSAgc2FtcGxlIHJhdGUgaXMgYXBwYXJlbnRseSBzb21ldGltZXMgaGFsZiB3aGF0IGl0IHNob3VsZCBiZSAoYm90aAotCSAgb2YgbXkgc2FtcGxlcyByZXBvcnQgMjQwMDAgSHogdGhlcmUpLCBhbmQgdGhlcmUgYXJlIHR3byBvdGhlcgotCSAgcGFydHMgb2YgdGhlIHN1YnZhcmlhbnQgd2l0aCBkaWZmZXJlbnQgc2FtcGxpbmcgcmF0ZXMuIE9uZSBvZiB0aGVtCi0JICBpcyBwYXJzZWQsIGJ1dCBub3QgdGhlIG90aGVyLCBhcyBpdCdzIGxvY2F0ZWQgYWZ0ZXIgc29tZSBvdGhlcgotCSAgbGFyZ2UgYW1vdW50IG9mIHZhcmlhYmxlIGRhdGEgdGhhdCBuZWVkcyBwYXJzaW5nIGZpcnN0LCBhbmQgdGhlcmUKLQkgIHNlZW1zIHRvIGJlIGEgTE9UIG9mIGl0LCB3aGljaCBpcyB1c2VsZXNzIGZvciBvdXIgbmVlZHMgaGVyZS4KLQkgIFRoaXMgZW5kcyB1cCBiZWluZyByYXRoZXIgaW5jb25zZXF1ZW50aWFsLCBhcyBmZmRlY19hYWNfbGF0bSwKLQkgIHdoaWNoIGlzIHRoZSBvbmx5IGRlY29kZXIgdGhhdCBjYW4gZGVjb2RlIHN1Y2ggc3RyZWFtcywgZG9lcyBub3QKLQkgIG5lZWQgdGhlIHNhbXBsZSByYXRlIG9uIHRoZSBjYXBzIGFueXdheS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUzOTQKLQotMjAxMS0xMi0xOSAxMDo0ODo1NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogZG9uJ3QgcmVtb3ZlIHNyY3BhZAotCSAgRG9uJ3QgcmVtb3ZlIHRoZSBhbHdheXMgc3JjcGFkIGluIHJlYWR5IGFuZCBtYWtlIHRoZSBlbGVtZW50IHJldXNhYmxlLgotCi0yMDExLTEyLTE1IDE2OjQwOjIxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4Lmg6Ci0JICBmbHZtdXg6IHVzZSBHc3RDb2xsZWN0UGFkczIgZXZlbnQgY2FsbGJhY2sKLQkgIC4uLiBpbiBzdGVhZCBvZiBsb2NhbCBIQUNLLgotCi0yMDExLTEyLTE1IDE2OjMwOjE3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgbWF0cm9za2FtdXg6IHVzZSBHc3RDb2xsZWN0UGFkczIgZXZlbnQgY2FsbGJhY2sKLQkgIC4uLiBpbiBzdGVhZCBvZiBsb2NhbCBIQUNLLgotCi0yMDExLTEyLTE1IDE2OjE2OjUyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JICBhdmltdXg6IHVzZSBHc3RDb2xsZWN0UGFkczIgZXZlbnQgY2FsbGJhY2sKLQkgIC4uLiBpbiBzdGVhZCBvZiBsb2NhbCBIQUNLLgotCi0yMDExLTEyLTE1IDE2OjE1OjIyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IHVzZSBHc3RDb2xsZWN0UGFkczIgZXZlbnQgY2FsbGJhY2sKLQkgIC4uLiBpbiBzdGVhZCBvZiBsb2NhbCBIQUNLLgotCi0yMDExLTEyLTE0IDE5OjEzOjIxICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuaDoKLQkgIHNtcHRlOiBwb3J0IHRvIEdzdENvbGxlY3RQYWRzMgotCi0yMDExLTEyLTE0IDE5OjEwOjUzICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4Lmg6Ci0JICBtdWx0aXBhcnRtdXg6IHBvcnQgdG8gR3N0Q29sbGVjdFBhZHMyCi0KLTIwMTEtMTItMTQgMTk6MDc6MjMgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBtYXRyb3NrYW11eDogcG9ydCB0byBHc3RDb2xsZWN0UGFkczIKLQotMjAxMS0xMi0xNCAxOTowMjoyMyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguaDoKLQkgIHF0bXV4OiBwb3J0IHRvIEdzdENvbGxlY3RQYWRzMgotCi0yMDExLTEyLTE0IDE4OjU1OjM2ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5oOgotCSAgaW50ZXJsZWF2ZTogcG9ydCB0byBHc3RDb2xsZWN0UGFkczIKLQotMjAxMS0xMi0xNCAxODo1MjozNyArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5oOgotCSAgZmx4bXV4OiBwb3J0IHRvIEdzdENvbGxlY3RQYWRzMgotCi0yMDExLTEyLTE0IDE4OjM4OjA5ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JICBhdmltdXg6IHBvcnQgdG8gR3N0Q29sbGVjdFBhZHMyCi0KLTIwMTEtMTItMTQgMTg6MzQ6MjUgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5oOgotCSAgY2Fpcm90ZXh0b3ZlcmxheTogcG9ydCB0byBHc3RDb2xsZWN0UGFkczIKLQotMjAxMS0xMi0xMyAxODoxODo0NSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgbWF0cm9za2FkZW11eDogZmlsdGVyIGJvZ3VzIGluZGV4IGVudHJpZXMgd2l0aCBtaXNzaW5nIGJsb2NrIG51bWJlcgotCSAgLi4uIHRvIGF2b2lkIGNvbnRyYWRpY3RvcnkgaW5mb3JtYXRpb24gcmVzdWx0aW5nIGluIHNlZWtzIHNlbmRpbmcgbW9yZQotCSAgZG93bnN0cmVhbSB0aGFuIG5lZWRlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudC4KLQotMjAxMS0xMi0xMyAxODoxNToxOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogY2F0ZXIgZm9yIHNhZmVyIGFyaXRobWV0aWMgd2l0aCBnbG9iYWwgc3RhcnQgdGltZQotCi0yMDExLTEyLTEzIDE3OjAyOjAxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiB0d2VhayBmaW5hbCBjbG9zaW5nIHNlZ21lbnQgc2VuZGluZwotCSAgLi4uIHRvIGF2b2lkIGl0IGludGVyZmVyaW5nIHdpdGggKHNwYXJzZSkgc3RyZWFtIHN5bmNpbmcuCi0KLTIwMTEtMTItMTIgMTE6NTE6MDYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IG1ha2UgZGVidWcgbWVzc2FnZSBtb3JlIHVzZWZ1bAotCSAgQWRkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWdsaXN0IGFuZCB3aGljaCBwYWQgcmVjZWl2ZWQgdGhlCi0JICB0YWcgZXZlbnQgb24gdGhlIGRlYnVnIGxvZ2dpbmcuCi0KLTIwMTEtMTItMTMgMTE6NDY6NDMgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBhdm9pZCB1c2luZyBmbG9hdGluZyBwb2ludCB1bm5lY2Vzc2FyaWx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1OTExCi0KLTIwMTEtMTItMTMgMTE6NDI6NDAgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBmaXggZm9ybWF0IHNwZWNpZmllciBzaWduZWRuZXNzCi0JICBVc2UgdW5zaWduZWQgc3BlY2lmaWVycyBmb3IgYWxsIHVuc2lnbmVkIHZhbHVlcy4KLQkgIEEgbG90IG9mIHRoZSB2YWx1ZXMgdXNlZCBoZXJlIGFyZSB1bnNpZ25lZCwgYW5kIHNvbWUgY2FuIHRha2UKLQkgIGhpZ2ggZW5vdWdoIHZhbHVlcyB0aGF0IHRoZWlyIHNpZ25lZCBjb3VudGVycGFydCB3aWxsIGJlIG5lZ2F0aXZlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTkxMQotCi0yMDExLTEyLTEyIDE2OjQ5OjE5ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIHdhdnBhcnNlOiBhZGQgYSBpZ25vcmUtbGVuZ3RoIHByb3BlcnR5Ci0JICBUaGlzIGFsbG93cyBwbGF5aW5nIGJyb2tlbiBzdHJlYW1zIHdoaWNoIHdyaXRlIGFuIGluY29ycmVjdAotCSAgbGVuZ3RoIGluIHRoZWlyIGRhdGEgY2h1bmtzIChzdWNoIGFzLCBhdCBsZWFzdCwgb25lIHN0cmVhbWluZwotCSAgY2FtZXJhKS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjU5MTEKLQotMjAxMS0xMi0xMiAxMTo1NDo1NiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC1saWJzL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JICBnbGliLWNvbXBhdDogQWRkIGxpY2Vuc2UgYm9pbGVycGxhdGUgZm9yIExHUEwKLQotMjAxMS0xMi0xMiAxNToxNTo0NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogbWluZCAodW4pc2lnbmVkIGluIHNvbWUgdGltZXN0YW1wIGFyaXRobWV0aWMKLQkgIC4uLiB0byBhdm9pZCBlbmRpbmcgdXAgd2l0aCBpbnZhbGlkIChuZWdhdGl2ZSkgZHVyYXRpb24uCi0KLTIwMTEtMDItMDkgMTU6MzE6MjIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGluY3JlYXNlIHBhcnNlIHRvbGVyYW5jZSBmb3IgZnV6enkgZmlsZSBjYXNlcwotCi0yMDExLTEyLTEyIDEwOjM4OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBidWlsZDogZGlzdCBnbGliLWNvbXBhdC1wcml2YXRlLmggcHJvcGVybHkKLQkgIEFkZCBtaXNzaW5nIHNsYXNoLgotCi0yMDExLTEyLTEyIDEwOjE4OjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIHRlc3RzOiB1c2UgYXRleGl0LCBnX2F0ZXhpdCBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGdsaWIgbWFzdGVyCi0KLTIwMTEtMTItMTIgMDI6NTI6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgU3VwcHJlc3MgZGVwcmVjYXRpb24gd2FybmluZ3MgaW4gc2VsZWN0ZWQgZmlsZXMsIGZvciBnX3N0YXRpY19yZWNfbXV0ZXhfKiBtb3N0bHkKLQkgIEdTdGF0aWNSZWNNdXRleCBpcyBwYXJ0IG9mIG91ciBBUEkvQUJJLCBub3QgbXVjaCB3ZSBjYW4gZG8gaGVyZQotCSAgaW4gMC4xMCBmb3IgbW9zdCBvZiB0aGVzZS4KLQotMjAxMS0xMi0xMiAwMjo0MTozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOgotCSogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmc2luay10ZXN0LmM6Ci0JKiB0ZXN0cy9pY2xlcy90ZXN0LW9zczQuYzoKLQkqIHRlc3RzL2ljbGVzL3ZpZGVvY3JvcC10ZXN0LmM6Ci0JICB0ZXN0czogZ190aHJlYWRfaW5pdCgpIGlzIGRlcHJlY2F0ZWQgaW4gZ2xpYiBtYXN0ZXIKLQkgIEl0J3Mgbm90IG5lZWRlZCBhbnkgbG9uZ2VyLgotCi0yMDExLTEyLTEyIDAyOjM4OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JKiB0ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYzoKLQkgIFVzZSBnX3RocmVhZF90cnlfbmV3KCkgaW5zdGVhZCBvZiBnX3RocmVhZF9jcmF0ZSgpIHdpdGggbmV3ZXIgZ2xpYiB2ZXJzaW9ucwotCi0yMDExLTEyLTEyIDAyOjMxOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuaDoKLQkgIGFscGhhOiB1c2UgbmV3IGdsaWIgQVBJIGZvciBzdGF0aWMgbXV0ZXggaWYgYXZhaWxhYmxlCi0KLTIwMTEtMTItMTIgMDI6MzA6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jOgotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkqIGdzdC1saWJzL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIFdvcmsgYXJvdW5kIGRlcHJlY2F0ZWQgdGhyZWFkIEFQSSBpbiBnbGliIG1hc3RlcgotCSAgQWRkIHByaXZhdGUgcmVwbGFjZW1lbnRzIGZvciBkZXByZWNhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzCi0JICBnX211dGV4X25ldygpLCBnX211dGV4X2ZyZWUoKSwgZ19jb25kX25ldygpIGV0Yy4sIG1vc3RseQotCSAgdG8gYXZvaWQgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmdzLiBXZSdsbCBjaGFuZ2UgdGhlc2UKLQkgIG92ZXIgdG8gdGhlIG5ldyBBUEkgb25jZSB3ZSBkZXBlbmQgb24gZ2xpYiA+PSAyLjMyLgotCi0yMDExLTEyLTEyIDEwOjI0OjQ1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBSZXF1aXJlIEdMaWIgPj0gMi4yNAotCSAgQWxsIG90aGVyIG1vZHVsZXMgcmVxdWlyZSB0aGlzIGFscmVhZHkgYW5kIG5vYm9keSBpcyB0ZXN0aW5nIHdpdGgKLQkgIG9sZGVyIHZlcnNpb25zIGFueXdheS4KLQotMjAxMS0xMi0xMSAxODo0MDozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkgIGdka3BpeGJ1ZnNpbms6IGZpeCBpbnZlcnRlZCBwaXhlbC1hc3BlY3QtcmF0aW8KLQkgIFNwb3R0ZWQgYnkgTWlrZSBNb3JyaXNvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjU4ODIKLQotMjAxMS0xMi0xMSAxNzo1NToxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSAgcHVsc2VhdWRpb3Npbms6IGRvbid0IGxlYWsgcGFkIHRlbXBsYXRlCi0KLTIwMTEtMTItMTAgMTQ6NDg6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkgIHNvdXA6IGZpeCBzdGFydC9zdG9wIHJhY2UgaW4gc291cGh0dHBjbGllbnRzaW5rCi0JICBGaXggY3Jhc2ggb3IgaGFuZyBpbiBnZW5lcmljL3N0YXRlcyB1bml0IHRlc3Qgd2hlbiBkb2luZyBzdG9wKCkKLQkgIHJpZ2h0IGFmdGVyIHN0YXJ0KCkuIENyZWF0ZSBtYWluIGxvb3AgaW4gdGhlIHN0YXJ0IGZ1bmN0aW9uIGFscmVhZHkKLQkgIGFuZCBub3QganVzdCBpbiB0aGUgdGhyZWFkIGZ1bmN0aW9uLCBzbyB0aGF0IHN0b3AoKSBhbHdheXMgaGFzIGEKLQkgIHZhbGlkIG1haW4gbG9vcCB0byBxdWl0IG9uLiBBbHNvLCBjYWxsaW5nIGdfbWFpbl9sb29wX3F1aXQoKSBiZWZvcmUKLQkgIGdfbWFpbl9sb29wX3J1bigpIHdvbid0IHdvcmsgYW5kIHJlc3VsdCBpbiB0aGUgc3RvcCBmdW5jdGlvbiB3YWl0aW5nCi0JICBmb3IgdGhlIHRocmVhZCB0byBqb2luIGZvcmV2ZXIuIFRoZXJlZm9yZSwgd2FpdCBmb3IgdGhlIHRocmVhZCB0bwotCSAgYmUgcmVhZHkgYW5kIGdldCB0aGUgbWFpbiBsb29wIHJ1bm5pbmcgaW4gdGhlIHN0YXJ0KCkgZnVuY3Rpb24sIHRvCi0JICBiZSBzdXJlIHN0b3AoKSBhbHdheXMgd29ya3MuCi0KLTIwMTEtMTItMTAgMTM6MzU6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9maWxlcy9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBkaXN0IHRlc3QgZmlsZSB1c2VkIGluIG1hdHJvc2thcGFyc2UgdW5pdCB0ZXN0Ci0KLTIwMTEtMTItMTAgMTI6MzI6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOgotCSAgdGVzdHM6IGZpeCB1cCByZ3ZvbHVtZSB0ZXN0IGZvciBiYXNldHJhbnNmb3JtIGV2ZW50IGNhY2hpbmcKLQkgIFNvbWUgdGVzdHMgYXNzdW1lZCB0aGF0IHRhZyBldmVudHMgd291bGQgYWx3YXlzIHB1c2hlZCB0aHJvdWdoCi0JICBpbW1lZGlhdGVseSwgd2hpY2ggaXNuJ3QgdGhlIGNhc2UgYW55IGxvbmdlciwgc28gcHVzaCBhIG5ld3NlZ21lbnQKLQkgIGV2ZW50IGFuZCBhbiBlbXB0eSBidWZmZXIgZmlyc3QuCi0KLTIwMTEtMTItMTAgMTE6MTI6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgc3NyY2RlbXV4OiBmaXggaXRlcmF0b3IgYW5kIGNhcHMKLQotMjAxMS0xMi0xMCAxMToxMTowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogZm9yd2FyZCB0aGUgY2FwcyBldmVudAotCi0yMDExLTEyLTEwIDExOjA5OjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogc2ltcGx5IGZvcndhcmQgdGhlIGNhcHMgZXZlbnQKLQkgIGZvcndhcmQgdGhlIGNhcHMgZXZlbnQgd2UgZ2V0IGFzIGlucHV0IGluc3RlYWQgb2YgbWFraW5nIGEgbmV3IGV2ZW50IGV0Yy4uCi0KLTIwMTEtMTItMDkgMjA6MTA6MTkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGZvcndhcmQgY2FwcwotCi0yMDExLTEyLTA5IDE5OjQ2OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHA6IHBhc3MgcGFyZW50IHRvIHNldGNhcHMgbWV0aG9kcwotCi0yMDExLTEyLTEwIDAyOjIxOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2VvLnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL3NyLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMS0xMi0wOSAxNjowNDo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2U6IHJlbmFtZSAiY2xpZW50IiBwcm9wZXJ0aWVzIHRvICJjbGllbnQtbmFtZSIKLQkgIEJldHRlciBuYW1lLCBidXQgYWxzbyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvbiB0aGUgamFjawotCSAgZWxlbWVudHMgKHdoZXJlICJjbGllbnQiIGlzIHVzZWQgZm9yIHNvbWV0aGluZyBlbHNlKS4KLQotMjAxMS0xMi0wOSAxNTo1MDoyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogZG9uJ3QgbGVhayBjbGllbnQgbmFtZSB3aGVuIGZyZWVpbmcgdGhlIGVsZW1lbnQKLQkgIEFuZCBhZGQgZ3RrLWRvYyBjaHVua3MgZm9yIHRoZSBuZXcgcHJvcGVydHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1ODcyCi0KLTIwMTEtMTItMDkgMTU6NDU6MDMgKzAwMDAgIE5pY29sYXMgQmFyb24gPGhvZ2dpbnNAcmFkaW9tLmZyPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5oOgotCSAgamFjazogYWRkICJjbGllbnQtbmFtZSIgcHJvcGVydHkgdG8gamFja2F1ZGlvc2luayBhbmQgamFja2F1ZGlvc3JjCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1ODcyCi0KLTIwMTEtMTItMDkgMTI6MTk6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbGF3L01ha2VmaWxlLmFtOgotCSAgbGF3OiBmaXggQ0ZMQUdTIGFuZCBMSUJTIG9yZGVyIGluIE1ha2VmaWxlLmFtCi0KLTIwMTEtMTItMDkgMTI6MTU6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMi0wOSAxMDo1MToxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLW1hcnNoYWwubGlzdDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwOiBmaXggbWFyc2hhbGxlcnMKLQkgIFJlbW92ZSBjdXN0b20gbWFyc2hhbGxlcnMgZm9yIG1pbm9iamVjdC4KLQkgIEluaXQgUlRDUCBidWZmZXIgY29ycmVjdGx5LgotCSAgSGFuZGxlIHJlc3VsdHMgZnJvbSBzZXRjYXBzCi0JICBSZW1vdmUgYXNzZXJ0cy4KLQotMjAxMS0xMi0wOSAxMDo1MDoxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2xhdy9NYWtlZmlsZS5hbToKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JICBsYXc6IGZpeCBuZWdvdGlhdGlvbgotCi0yMDExLTEyLTA4IDExOjAwOjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IHN0cmVhbS1mb3JtYXQ9cmF3IGdvZXMgd2l0aCBhYWMgY2Fwcywgbm90IG1wMyBjYXBzCi0KLTIwMTEtMTItMDggMDE6Mjg6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYwotCi0yMDExLTEyLTAyIDEyOjA3OjI0ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogZG8gbm90IGlnbm9yZSB0aGUgaGlnaGVzdCBmcmFtZSBpbnRlcnZhbAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTM4NwotCi0yMDExLTEyLTAyIDExOjU5OjAzICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogZG8gbm90IGlnbm9yZSB0aGUgbGFyZ2VzdCByZXNvbHV0aW9uCi0JICBUaGUgJ21heCcgdmFsdWUgaXNuJ3QgYW4gU1RMIHN0eWxlICJvbmUgYWZ0ZXIgdGhlIGVuZCIgYm91bmQsCi0JICBidXQgdGhlIGxhcmdlc3QgYWxsb3dlZCB2YWx1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUzODcKLQotMjAxMS0xMi0wNiAxNjo0NzoyNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBkb2NzOiBhZGQgYWRkIHRoZSB0d28gZW51bSB2YWx1ZXMgdGhhdCB3ZXJlIGp1c3QgYWRkZWQgdG9vCi0KLTIwMTEtMTItMDYgMTY6MTQ6NTQgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBtdWx0aWZpbGVzaW5rOiBleHBvc2UgdGhlIGVudW0gcHJvcGVydHkgZG9jcyBmb3Igc3BsaXR0aW5nIG1vZGUuCi0JICBGaXhlcyAjNjY1NjY2LgotCi0yMDExLTEyLTA2IDE0OjIzOjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgIGgyNjNwYXk6IGZpeCBpbnZhbGlkIHJldHVybiB2YWx1ZQotCi0yMDExLTEyLTA2IDEzOjU5OjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiByZW1vdmUgdW51c2VkIGZsdXNoIHBhcmFtCi0KLTIwMTEtMTItMDUgMTg6NDA6MjYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5LmM6Ci0JICBydHB4cXRkZXBheTogSW5pdGlhbGl6ZSBHc3RSVFBCdWZmZXIgYmVmb3JlIHVzYWdlCi0KLTIwMTEtMTItMDUgMTg6NDA6MTIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBtYW5hZ2VyOiBJbml0aWFsaXplIEdzdFJUUEJ1ZmZlciBiZWZvcmUgdXNhZ2UKLQotMjAxMS0xMi0wNSAxODozOTo1OSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgcnRwOiBJbml0aWFsaXplIEdzdFJUUEJ1ZmZlciBiZWZvcmUgdXNhZ2UKLQotMjAxMS0xMi0wNSAxMjoxNToyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IHJlcGxhY2UgZGVwcmVjYXRlZCBHU1RfQ0xBU1NfTE9DSwotCi0yMDExLTExLTI0IDEzOjU4OjAxICswMTAwICBTZWJhc3RpYW4gUmFzbXVzc2VuIDxzZWJybkBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiBDZWlsIGpwZWcgZGltZW5zaW9ucywgaW5zdGVhZCBvZiBmbG9vcgotCSAgQSBKUEVHIGltYWdlIGluc2lkZSBhbiBSVFAgc3RyZWFtIGhhcyBhIHByZWNlZWRpbmcgUkZDMjQzNSBoZWFkZXIgdGhhdAotCSAgY29udmV5cyB3aWR0aC9oZWlnaHQuIFRoZSBkaW1lbnNpb25zIGluIHRoaXMgaGVhZGVyIGFyZSBsaW1pdGVkIHRvIGJlCi0JICBtdWx0aXBsZXMgb2YgOC4gU2luY2UgSlBFRyB1c2VzIGFuIE1DVSBvZiA4eDggcGl4ZWxzIGFueSBpbWFnZSBtdXN0Ci0JICBhbHJlYWR5IGluZGlyZWN0bHkgaGF2ZSBpbWFnZSBkYXRhIGRpbWVuc2lvbnMgdGhhdCBhcmUgcm91bmRlZCB1cCBpbgotCSAgb3JkZXIgdG8gY29udGFpbiBlbm91Z2ggZGF0YSB0byByZW5kZXIgdGhlIGltYWdlLiBUaGVyZWZvcmUgdGhpcyBmaXgKLQkgIHNhZmVseSByb3VuZHMgdGhlIGltYWdlIGRpbWVuc2lvbnMgaW4gdGhlIFJGQzI0MzUgaGVhZGVyIHVwIHRvIHRoZQotCSAgY2xvc2VzdCBtdWx0aXBsZSBvZiA4LgotCi0yMDExLTEyLTA0IDEyOjUwOjU3ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IGVuc3VyZSB3ZSBvbmx5IGNoZWNrIGZvciBzYW1wbGUvYmxvY2sgbWl4dXAgYXQgc3RhcnQKLQkgIE90aGVyd2lzZSB3ZSBtaWdodCB0cmlnZ2VyIGF0IHNvbWUgcG9pbnQgd2l0aGluIHRoZSBmaWxlLCBidXQgdGhlCi0JICBjaGVjayBpcyBvbmx5IG1ha2luZyBzZW5zZSBmb3IgdGhlIHNlY29uZCBibG9jay4KLQotMjAxMS0xMi0wMyAxODoxNDo1OSArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FwYXJzZTogd2FybiBpZiBhY2N1bXVsYXRpbmcgaGVhZGVycyBhZnRlciB0aGV5IHdlcmUgcHVzaGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1NDEyCi0KLTIwMTEtMTAtMjUgMTI6NTQ6NDMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkgIG1hdHJvc2thcGFyc2U6IGZpeCBwYXJzaW5nCi0JICBNYXJrIG1vcmUgcGFydHMgYXMgYmVsb25naW5nIHRvIHN0cmVhbWhlYWRlcnMuCi0KLTIwMTEtMTItMDMgMTc6MzA6MTAgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogZml4IGRpc2NvbnRpbnVpdHkgdGhyZXNob2xkIGNoZWNrIHdoZW4gdGltZXN0YW1wcyBnbyBiYWNrd2FyZHMKLQkgIFNpbmNlIHVuc2lnbmVkIHR5cGVzIGFyZSB1c2VkLCBhIG5lZ2F0aXZlIHZhbHVlIHdvdWxkIHNob3cgYXMgdmVyeSwgdmVyeQotCSAgcG9zaXRpdmUuCi0JICBGaXhlcyBBL1Ygc3luYyBvbiBzb21lLi4uIGxlc3MgdGhhbiB3ZWxsIG1hZGUgZmlsZXMgd2hlcmUgdGltZXN0YW1wcyBnbwotCSAgYmFja3dhcmRzLgotCi0yMDExLTEyLTAyIDIyOjI1OjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RwbHVnaW4uYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgdXBkYXRlIGZvciBiYXNlc2luayBldmVudCBoYW5kbGVyIGNoYW5nZXMKLQotMjAxMS0xMi0wMiAxMjowMToyMiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJzcmM6IGFkZCBhIGNvbW1lbnQgYWJvdXQgYSAiaGlkZGVuIiBhc3N1bXB0aW9uIG9uIHJhbmsgdmFsdWVzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1Mzg3Ci0KLTIwMTEtMTItMDIgMDE6NTg6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sCi0JICBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYwotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmMKLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYwotCSAgZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmMKLQotMjAxMS0xMi0wMSAxODo1NTo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM2RlbXV4LmM6Ci0JICB1cGRhdGUgZm9yIHRhZyBBUEkgY2hhbmdlcwotCi0yMDExLTEyLTAxIDE1OjI5OjE1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBwbGFjYXRlIGdjYyBzaW5jZSAtV2Vycm9yIGlzIHVzZWQKLQkgIEluaXRpYWxpemUgdmFsdWVzIHRoYXQgR0NDIGNhbm5vdCBwcm92ZSBhcmUgbm90IHVzZWQgd2l0aG91dAotCSAgYmVpbmcgaW5pdGlhbGl6ZWQsIGFuZCBhc3NlcnQgdGhhdCBJIGRpZCBub3QgbWVzcyB1cCBteSBwcm9vZi4KLQotMjAxMS0xMi0wMSAxNDoxMzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGZpeCB1cCBMSUJTIG9yZGVyIHNvbSBtb3JlYAotCi0yMDExLTEyLTAxIDEzOjIyOjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2EtbXV4OiBmaXggbmFtZSBvZiBuZXcgcHJvcGVydHkgYW5kIHRoZSB1bml0IHRlc3QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQzNzkKLQotMjAxMS0wOS0yNSAxNDo1Nzo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgbXVsdGlmaWxlc2luazogYWRkIGJhc2ljIGJ1ZmZlciBsaXN0IGhhbmRsaW5nCi0JICBXZSBhc3N1bWUgZm9yIG5vdyB0aGF0IGFsbCBidWZmZXJzIGluIGEgYnVmZmVyIGxpc3QKLQkgIHNob3VsZCBlbmQgdXAgaW4gdGhlIHNhbWUgZmlsZSAoc28gd2UgY2FuIGdyb3VwIEdPUHMKLQkgIGluIGJ1ZmZlciBsaXN0cywgZm9yIGV4YW1wbGUpLiBDb3VsZCBvcHRpbWlzZSB0aGlzCi0JICBhIGJpdCB0byBhdm9pZCB0aGUgbWVtY3B5LgotCi0yMDExLTA5LTIzIDE4OjQzOjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiB3cml0ZSBzdHJlYW0taGVhZGVycyB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBmaWxlIGluIG1heC1zaXplIG1vZGUKLQotMjAxMS0wOS0yMyAxODozMTowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBtdWx0aWZpbGVzaW5rOiBhZGQgbmV3ICdtYXgtc2l6ZScgbW9kZSBmb3Igc3dpdGNoaW5nIHRvIHRoZSBuZXh0IGZpbGUKLQotMjAxMS0wOS0yMyAxNzo0OTowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBtdWx0aWZpbGVzaW5rOiBhZGQgIm1heC1maWxlLXNpemUiIHByb3BlcnR5IGZvciBuZXcgbmV4dC1maWxlIG1vZGUKLQotMjAxMS0xMi0wMSAxMzozODowNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRG9uJ3QgZm9yZ2V0IFNTQSBzdWJ0aXRsZXMgaW4gbGFzdCBjb21taXQKLQotMjAxMS0xMi0wMSAxMzozNDo1MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgbWF0cm9za2FkZW11eDogT25seSBjaGVjayBmb3IgbWFya3VwIGFuZCBlc2NhcGUgaWYgbmVjZXNzYXJ5IGZvciBwbGFpbnRleHQgc3VidGl0bGVzCi0JICBPdGhlcndpc2Ugd2UgYnJlYWsgVVNGIGFuZCBBU1MvU1NBIHN1YnRpdGxlcy4KLQotMjAxMS0xMi0wMSAxMzoyMzozMyArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvTWFrZWZpbGUuYW06Ci0JICBtdWx0aWZpbGU6IGZpeCBidWlsZCBpbiB1bmluc3RhbGxlZCBzZXR1cAotCSAgQWRkIC1iYXNlIGxpYnMgaW5jbHVkZXMgdG8gQ0ZMQUdTLCBmaXggb3JkZXIgb2YgTElCUyA8Y2l0Pi4KLQotMjAxMS0xMi0wMSAxMzowODowMSArMDEwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOgotCSAgdGVzdHM6IGZpeCBnX21rZHRlbXAgcHJlc2VuY2UgY2hlY2sgaW4gbXVsdGlmaWxlIHRlc3RzCi0JICBnX21rZHRlbXAgd2FzIGFkZGVkIGluIGdsaWIgMi4zMCBldmVuIHRob3VnaCB0aGUgZG9jIGNsYWltcyBpdCB3YXMgYWRkZWQgaW4KLQkgIDIuMjYuCi0KLTIwMTEtMDctMTcgMjM6NTY6MDQgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiBhZGQgZmxhZyB0byBjdXQgYWZ0ZXIgYSBmb3JjZSBrZXkgdW5pdCBldmVudAotCi0yMDExLTEyLTAxIDEyOjQ3OjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBDb3B5IGFsbCBidWZmZXIgZmxhZ3Mgd2hlbiBjcmVhdGluZyBhIHN1YnRpdGxlIGJ1ZmZlciBjb3B5IGFmdGVyIHBvc3Rwcm9jZXNzaW5nCi0JICBUaGlzIGFsc28gY29waWVzIHRoZSBjYXBzLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kIHVwIHB1c2luZwotCSAgdGhlIGZpcnN0IGJ1ZmZlciB3aXRob3V0IGFueSBjYXBzLCB3aGljaCBjYXVzZXMgZG93bnN0cmVhbQotCSAgdG8gbm90IGdldCBub3RpZmllZCBhYm91dCB0aGUgY2Fwcy4KLQkgIEZpeGVzIGJ1ZyAjNjY0ODkyLgotCi0yMDExLTEwLTExIDAyOjA3OjEzICswMjAwICBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBtYWtlIGRlZmF1bHQgZnJhbWVyYXRlIG9wdGlvbmFsIHBlciBzdHJlYW0KLQkgIHRoZXJlIGlzIGF0IGxlYXN0IHR3byB1c2UgY2FzZXMgd2hlcmUgZGVmYXVsdCBmcmFtZSByYXRlCi0JICBzaG91bGQgb3IgbWF5IGJlIGRpc2FibGVkOgotCSAgLSB2cDggc3RyZWFtIHdpdGggYWx0cmVmIGZyYW1lIGVuYWJsZWQuIElmIGRlZmF1bHQgZnJhbWUgcmF0ZQotCSAgaXMgZW5hYmxlZCwgc29tZSBwbGF5ZXJzIHdpbGwgbWlzc2ludGVycHJldGUgaXQgKGNyaXRpY2FsISkKLQkgIC0gZm9yIHdlYm0gY29udGFpbmVyLCB0byByZWR1Y2UgbWljcm8gb3ZlcmhlYWQKLQkgIC0gZm9yIHN0cmVhbSB3aXRoIHZhcmlhYmxlIGZyYW1lIHJhdGUuCi0JICBTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLTIwMTEtMTEtMzAgMjI6MTM6MTEgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHJpcHBsZS5jOgotCSAgcmlwcGxldHY6IGZpeCBDTEFNUCBlbmQtdmFsdWVzCi0KLTIwMTEtMTEtMzAgMTk6MjU6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBkb2NzOiB1cGRhdGUgZG9jcwotCi0yMDExLTExLTMwIDE5OjAwOjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL3BhdHRlcm5zcGVjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL3BhdHRlcm5zcGVjLmg6Ci0JICBzcGxpdGZpbGVzcmM6IHNwZWNpZnkgZmlsZW5hbWVzIHZpYSBub3JtYWwgd2lsZGNhcmRzIGluc3RlYWQgb2YgcmVndWxhciBleHByZXNzaW9ucwotCSAgTGVzcyBjcmFja3Rhc3RpYyBpbiB0aGUgZW5kLgotCi0yMDExLTEwLTEwIDE4OjI4OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYzoKLQkgIHNwbGl0ZmlsZXNyYzogY2hlY2sgYnl0ZXMgYWN0dWFsbHkgcmVhZCwganVzdCBpbiBjYXNlCi0JICBIYW5kbGUgY29ybmVyIGNhc2Ugd2hlcmUgd2UgdHJ5IHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlCi0JICBsYXN0IGZpbGUgcGFydCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIHJldHVybiBhIHNob3J0IHJlYWQuCi0JICBJZiB3ZSBnZXQgZmV3ZXIgYnl0ZXMgdGhhbiBleHBlY3RlZCBmb3IgYW55IG90aGVyIGZpbGUgcGFydCwKLQkgIHdlIHNob3VsZCBqdXN0IGVycm9yIG91dCwgc2luY2Ugc29tZXRoaW5nIGZpc2h5J3MgZ29pbmcgb24KLQkgIHRoZW4uCi0KLTIwMTEtMTAtMDYgMDg6MzM6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSAgc3BsaXRmaWxlc3JjOiBzZXQgb2Zmc2V0cyBvbiBidWZmZXJzCi0JICBMb29rcyBsaWtlIHNvbWUgcGFyc2VycyAoaW4gc29tZSB2ZXJzaW9ucyBhdCBsZWFzdCkgZXhwZWN0IHRoZQotCSAgb2Zmc2V0cyB0byBiZSBzZXQsIGFuZCBiZWhhdmUgd2VpcmQgaWYgdGhhdCdzIG5vdCB0aGUgY2FzZQotCSAgKGUuZy4gb2ZmLWJ5LW9uZSBpbiBoMjY0cGFyc2UpLgotCi0yMDExLTA3LTI4IDIwOjE5OjU2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L211bHRpZmlsZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuaDoKLQkgIG11bHRpZmlsZTogYWRkIHNwbGl0ZmlsZXNyYyBlbGVtZW50Ci0JICBBZGQgbmV3IHNwbGl0ZmlsZXNyYyBlbGVtZW50IHRoYXQgcHJlc2VudHMgbXVsdGlwbGUgZmlsZXMKLQkgIChzZWxlY3RhYmxlIHZpYSBhIGxvY2F0aW9uIHJlZ2V4KSBhcyBvbmUgc2luZ2xlIGNvbnRpZ3VvdXMKLQkgIGZpbGUuCi0KLTIwMTEtMTEtMzAgMDc6NTc6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5oOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICB1cGRhdGUgZm9yIG1vdmVkIGF1ZGlvIGludGVyZmFjZXMKLQotMjAxMS0xMS0yOSAxNzozNDoxMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIFJldmVydCAicHVsc2VhdWRpb3Npbms6IGZpeCBjYXBzIGxlYWsiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGQ2YTlkZTllMmFlZGM4YjY2YWIzMjE5OTAyYjVhMzdlOGQ2NWFkYTIuCi0JICBzZXRjYXBzIGZ1bmN0aW9ucyBhcmVuJ3Qgc3VwcG9zZWQgdG8gdGFrZSBvd25lcnNoaXAgb2YgdGhlIGNhcHMgcGFzc2VkCi0KLTIwMTEtMTEtMjkgMTk6MTA6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb292ZXJsYXkuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRvcmllbnQuaDoKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBmaXggZm9yIG1vdmVkIGludGVyZmFjZXMKLQotMjAxMS0xMS0yOCAyMzoyMDozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGNvbW1pdCAnNzUyMWI1OTdmNGRjNDlkOGQxNjhmMzY4ZjBlN2ViYWY5OGE3MjE1NicgaW50byAwLjExCi0KLTIwMTEtMTEtMjggMjE6Mjc6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMS0yOCAyMToyNzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGNvbW1pdCAnYTIzMzdiOGFmNDVjYjVlOGMwOTFmZjBlMWMzZWY0YjZjYzdiMjBhMycgaW50byAwLjExCi0KLTIwMTEtMTEtMjggMTg6MjU6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkgIFVwZGF0ZSBmb3IgaW5kZXhhYmxlIGNoYW5nZQotCi0yMDExLTExLTI4IDE3OjUyOjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSAgdXBkYXRlIGZvciBjbG9jayBwcm92aWRlciBBUEkgY2hhbmdlCi0KLTIwMTEtMTEtMjggMTY6NTc6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBmaXggZm9yIGVsZW1lbnQgZmxhZyB1cGRhdGVzCi0KLTIwMTEtMTEtMjggMTI6NTg6NDQgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5LmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZXNkL2VzZG1vbi5jOgotCSogZXh0L2VzZC9lc2RzaW5rLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOgotCSogZXh0L2djb25mL2dzdHN3aXRjaHNyYy5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzoKLQkqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0c21va2VkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYm1uZy9nc3RtbmdkZWMuYzoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2M6Ci0JKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2JyZWFrbXlkYXRhLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9jcHVyZXBvcnQuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2VmZW5jZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc2RlYnVnLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2c2Vlay5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcHJvZ3Jlc3NyZXBvcnQuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RwbHVnaW4uYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkqIGdzdC9tZWRpYW4vZ3N0bWVkaWFuLmM6Ci0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzoKLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKLQkqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdmFyaW91czogZml4IHBhZCB0ZW1wbGF0ZSBsZWFrcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjY2NAotCi0yMDExLTExLTI4IDEzOjA4OjI3ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICB2YXJpb3VzOiBmaXggcGFkIHRlbXBsYXRlIHJlZiBsZWFrcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjY2NAotCi0yMDExLTExLTI4IDExOjQ3OjExICswMTAwICBDaGFkIDxjaGFubmFAY2FsdGVjaC5lZHU+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSAgdGFnaW5qZWN0OiBzZXQgZ2FwLWF3YXJlCi0JICBUaGUgZWxlbWVudCBkb2VzIG5vdCBtb2RpZnkgdGhlIGRhdGEgYW55d2F5LgotCi0yMDExLTExLTI3IDIzOjMyOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSBwbyBmaWxlcwotCi0yMDExLTExLTI3IDIzOjMxOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jCi0KLTIwMTEtMTEtMjYgMjE6Mzk6MzMgKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICBlcXVhbGl6ZXI6IGFsc28gc3luYyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGZpbHRlciBiYW5kcwotCi0yMDExLTExLTI2IDE2OjA2OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOgotCSAgbWF0cm9za2FkZW11eDogaW5pdGlhbGlzZSBzZWVuX21hcmt1cF90YWcgZmllbGQgb24gc3VidGl0bGUgc3RyZWFtIGNvbnRleHQKLQotMjAxMS0xMS0yNiAxMDowMTowNyArMDEwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5oOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JICBtYXRyb3NrYTogcG9ydCB0byAwLjExCi0JICBTdXBwb3J0IGZvciBUQUdfSU1BR0UgYW5kIFRBR19BVFRBQ0hNRU5UIGlzIGNvbW1lbnRlZCBvdXQ7IHRoaXMgcmVxdWlyZXMgY2FwcwotCSAgb24gYnVmZmVycyB3aGljaCBpcyBnb25lIGZyb20gMC4xMS4KLQkgIFNlZ21lbnQgaGFuZGxpbmcgaW4gdGhlIGRlbXV4ZXIgaXMgYSBiaXQgY29tcGxleDsgSSBhZGRlZCBzb21lIEZJWE1FIGNvbW1lbnRzCi0JICBpbiBwbGFjZXMgd2hlcmUgSSdtIG5vdCB5ZXQgc3VyZSBpZiBJIHBvcnRlZCBjb3JyZWN0bHkuCi0KLTIwMTEtMTEtMjYgMTM6NTQ6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvcHVsc2UvcGx1Z2luLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmg6Ci0JICBwdWxzZWF1ZGlvOiByZXF1aXJlIHB1bHNlYXVkaW8gPj0gMS4wCi0KLTIwMTEtMTEtMjYgMTM6MzQ6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jCi0JICBleHQvcHVsc2UvcHVsc2VzcmMuYwotCSAgZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jCi0JICBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmMKLQkgIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYwotCSAgZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYwotCSAgZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jCi0JICBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmgKLQkgIGdzdC9lZmZlY3R2L2dzdHJpcHBsZS5jCi0JICBTb21lIHBvc3NpYmxlIEZJWE1FcyByZW1haW5pbmcgaW4gdGhlIGF1ZGlvIHBhcnNlciBnZXRjYXBzIGZ1bmN0aW9ucy4KLQotMjAxMS0xMS0yNSAxOToyODo1NSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JICBpc21sbXV4OiBVc2UgaXNvLWZyYWdtZW50ZWQgYXMgdmFyaWFudCB0eXBlCi0JICBVc2luZyAnaXNvJyBjb25mbGljdHMgd2l0aCBtcDRtdXggdmFyaWFudCB0eXBlLCBpc21sbXV4IG5vdwotCSAgdXNlcyBpc28tZnJhZ21lbnRlZAotCSAgRml4ZXMgIzY1NjgyMwotCi0yMDExLTExLTI0IDEyOjA1OjMzICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkgIHB1bHNlc3JjOiBJbXBsZW1lbnQgR3N0U3RyZWFtVm9sdW1lIGludGVyZmFjZQotCSAgUHVsc2VBdWRpbyAxLjAgc3VwcG9ydHMgcGVyLXNvdXJjZS1vdXRwdXQgdm9sdW1lcywgYW5kIHRoaXMgZXhwb3NlcyB0aGUKLQkgIGZ1bmN0aW9uYWxpdHkgdmlhIHRoZSBHc3RTdHJlYW1Wb2x1bWUgaW50ZXJmYWNlLgotCSAgV2hlbiBjb21waWxlZCBhZ2FpbnN0IHByZS0xLjAgUHVsc2VBdWRpbywgdGhlIGludGVyZmFjZSBpcyBub3QKLQkgIGltcGxlbWVudGVkLCBhbmQgdGhlICJ2b2x1bWUiIG9yICJtdXRlIiBwcm9wZXJ0aWVzIGFyZSBub3QgYXZhaWxhYmxlLgotCSAgVGhpcyBiaXQgb2YgdWdsaW5lc3Mgd2lsbCBnbyBhd2F5IHdoZW4gd2UgY2FuIGRlcGVuZCBvbiBQdWxzZUF1ZGlvIDEuMAotCSAgb3IgZ3JlYXRlci4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTUwNTUKLQotMjAxMS0wOS0xMCAyMToyMTozOCAtMDcwMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IFRyaXZpYWwgY29tbWVudCBjb3B5LXBhc3RlLW8gZml4Ci0KLTIwMTEtMTEtMTQgMTI6NDM6MjcgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlYXVkaW9zaW5rOiBSZW1vdmUgcmVkdW5kYW50IGNvZGUKLQotMjAxMS0xMS0xNCAxMjo0MTo0MSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSAgcHVsc2VhdWRpb3Npbms6IENsZWFuIHVwIHJlZmNvdW50aW5nIGluIGV2ZW50IHByb2JlCi0JICBNYWtlcyBzdXJlIHdlIGRvbid0IGxlYWsgYSByZWZjb3VudCBpZiB0aGUgb2JqZWN0IGlzIGRpc3Bvc2VkIGJlZm9yZSBhCi0JICBORVdTRUdNRU5UIHR1cm5zIHVwLgotCi0yMDExLTExLTI0IDE2OjMxOjM4ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IGZpeCBzZWVraW5nCi0JICBXaGljaCBJIGFjY2lkZW50YWxseSBicm9rZSB3aGVuIGZpeGluZyBmbHYgdmlkZW9zIGJyZWFraW5nIG9uCi0JICBzcHVyaW91cyB0aW1lc3RhbXAgZGlzY29udGludWl0aWVzIGluIGJyb2tlbiBmaWxlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzE0MzAKLQotMjAxMS0xMS0yNSAxMzoxMzo0NyArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5oOgotCSAgZWZmZWN0djogcmVwYWlyIGNvbG9yIG1vZGVzIGluIHJhZGlvYWN0diBieSB0YWtpbmcgcmdiLGJnciBpbnRvIGFjY291bnQKLQotMjAxMS0xMS0yNSAxMTo0NDo0OSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSAgcmFkaW9hY3R2OiBhZGQgb25lIG1vcmUgc2V0IG9mIGNhcHMKLQkgIEl0IGFsc28gd29yayBpbiB0aGlzIGZvcm1hdC4gQXZvaWRzIHRoZSBuZWVkIGZvciBjb252ZXJzaW9uLgotCi0yMDExLTExLTI1IDExOjQ0OjE4ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JICBlZmZlY3R0djogZml4IHJldmVyc2UgbmVnb3RpYXRpb24KLQkgIFRoZSBwbHVnaW5zIHdlcmUgdXNpbmcgX2ZpeGVkX2NhcHNfIGFuZCB0aHVzIG5vdCBhZGp1c3RpbmcgdG8gbmV3IHVwc3RyZWFtCi0JICBzaXplcy4gU3BvdHRlZCBieSBUaW0gTcO8bGxlci4KLQotMjAxMS0xMS0yNSAxMTo0MzoxNiArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgd2FycHR2OiByZW1vdmUgbm90IG5lZWRlZCBpZmRlZgotCi0yMDExLTExLTI1IDEwOjE1OjM1ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkgIHJpcHBsZXR2OiBjbGVhbiB1cCB0aGUgcmVuZGVyaW5nIGNvZGUgYSBiaXQKLQkgIFRoaXMgaXMgY29ycnJ1cHRzIHRoZSBtZW1veSB3aGVuIHJlc2l6aW5nLiBBZGQgYSBGSVhNRSB0byBtYWtlIGl0IHJlc2l6ZWFibGUKLQkgIG9uY2UgdGhhdCBpcyBzb2x2ZWQuCi0KLTIwMTEtMTEtMjQgMjE6NDE6MDMgKzAxMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FscGhhY29sb3IuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ludmVydC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmlzdWJ0aXRsZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc3NldHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZXF1YWxpemVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvanBlZ2VuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnbGltaXRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmd2b2x1bWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYzoKLQkgIHRlc3RzOiB1cGRhdGUgZm9yIGdzdGNoZWNrIEFQSSBjaGFuZ2UKLQotMjAxMS0xMS0yNCAyMDo0Mjo0OSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgZWZmZWN0dHY6IGZpeCByZXZlcnNlIG5lZ290aWF0aW9uCi0JICBUaGUgcGx1Z2lucyB3ZXJlIHVzaW5nIF9maXhlZF9jYXBzXyBhbmQgdGh1cyBub3QgYWRqdXN0aW5nIHRvIG5ldyB1cHN0cmVhbQotCSAgc2l6ZXMuIFNwb3R0ZWQgYnkgVGltIE3DvGxsZXIuCi0KLTIwMTEtMTEtMjQgMTQ6MTQ6NTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiBGaXggbGVhayBvZiBmaWxlbmFtZSBzdHJpbmdzCi0JICBEbyBub3QgZm9yZ2V0IHRvIGZyZWUgdGhlIGZpbGVuYW1lIHN0cmluZ3Mgd2hlbiBkZWxldGluZwotCSAgdGhlIGxpc3Qgb2YgZmlsZXMuCi0KLTIwMTEtMTEtMjQgMTQ6MTE6MzMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JICBtdWx0aWZpbGU6IGZpeCBidWlsZCBvZiB0ZXN0cwotCSAgVGVzdHMgZmFpbCB0byBidWlsZCBiZWNhdXNlIGdfbWtkdGVtcCBpcyBhdmFpbGFibGUgZnJvbSBnbGliIHNpbmNlCi0JICAyLjI2LgotCSAgVGhpcyBwYXRjaCBhZGRzIGEgY29uZGl0aW9uIGFyb3VuZCB0aGUgcmVkZWZpbml0aW9uIG9mCi0JICBnX21rZHRlbXAgb24gdGhlIHRlc3RzIHRvIG9ubHkgYnVpbGQgaXQgaWYgZ2xpYiBpcyBvbGRlciB0aGFuCi0JICAyLjI2LgotCi0yMDExLTA5LTI3IDE2OjQ5OjQ1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogc2tpcCBpZDMyIHRhZ3MKLQkgIFRoaXMgYWxsb3dzIGRlY29kaW5nIGF0IGxlYXN0IG9uZSBzYW1wbGUgd2hlcmUgc29tZXRoaW5nIGhhcwotCSAgc3R1ZmZlZCBzb21lIElEMyB0YWcgYmVmb3JlIHRoZSAoc3VwcG9zZWRseSBpbml0aWFsKSBGTVRcIC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjAyNDkKLQotMjAxMS0xMC0zMSAxNzowNjoxOCArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkgIGVkZ2V0djogdHJpdmlhbCBjb21tZW50IGZpeCBmb3IgY2xhcml0eQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTg0MQotCi0yMDExLTEwLTMxIDE3OjA0OjIzICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSAgZWRnZXR2OiBkb24ndCBsZWF2ZSBiaXRzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQKLQkgIExldCdzIGluaXRpYWxpemUgdGhlbSB0byB6ZXJvLiBJdCBsb29rcyBhbHJpZ2h0LCBidXQgdGhlbiBpdAotCSAgYWxzbyBsb29rcyBhbHJpZ2h0IHdpdGggdjMsIG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWxzCi0JICBmcm9tIHRoZSBzb3VyY2UuIEkgZG9uJ3Qga25vdyB3aGF0IHRoZSBvcmlnaW5hbCBpbnRlbnQgd291bGQKLQkgIGJlLCBhbmQgdGhlIG9yaWdpbmFsIGVmZmVjdHYgc291cmNlIGFsc28gaGFzIHRoaXMgYnVnL2ZlYXR1cmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxODQxCi0KLTIwMTEtMTEtMjQgMTA6MjU6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgYXVkaW9wYXJzZTogVXNlIHRoZSBzaW5rcGFkIHRlbXBsYXRlIGNhcHMgYXMgZmFsbGJhY2ssIG5vdCB0aGUgc3JjcGFkIG9uZXMKLQotMjAxMS0xMS0yNCAwOTo1OTo0MCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkgIG1wZWdhdWRpb3BhcnNlOiBJbXBsZW1lbnQgOjpnZXRfc2lua19jYXBzIHZmdW5jIHRvIHByb3BhZ2F0ZSBkb3duc3RyZWFtIGNhcHMgY29uc3RyYWludHMgdXBzdHJlYW0KLQotMjAxMS0xMS0yNCAwOTo1Nzo1NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IEltcGxlbWVudCA6OmdldF9zaW5rX2NhcHMgdmZ1bmMgdG8gcHJvcGFnYXRlIGRvd25zdHJlYW0gY2FwcyBjb25zdHJhaW50cyB1cHN0cmVhbQotCi0yMDExLTExLTI0IDA5OjU1OjQ3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSAgZGNhcGFyc2U6IEltcGxlbWVudCA6OmdldF9zaW5rX2NhcHMgdmZ1bmMgdG8gcHJvcGFnYXRlIGRvd25zdHJlYW0gY2FwcyBjb25zdHJhaW50cyB1cHN0cmVhbQotCi0yMDExLTExLTI0IDA5OjUzOjE4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSAgYW1ycGFyc2U6IEltcGxlbWVudCA6OmdldF9zaW5rX2NhcHMgdmZ1bmMgdG8gcHJvcGFnYXRlIGRvd25zdHJlYW0gY2FwcyBjb25zdHJhaW50cyB1cHN0cmVhbQotCi0yMDExLTExLTI0IDA5OjQ5OjI3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSAgYW1ycGFyc2U6IE1hcmsgc29tZSBtb3JlIGZ1bmN0aW9ucyBhcyBzdGF0aWMKLQotMjAxMS0xMS0yNCAwOTo0ODozMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBJbXBsZW1lbnQgOjpnZXRfc2lua19jYXBzIHZmdW5jIHRvIHByb3BhZ2F0ZSBkb3duc3RyZWFtIGNhcHMgY29uc3RyYWludHMgdXBzdHJlYW0KLQotMjAxMS0xMS0yNCAwOTo0NDo1OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBNYXJrIHNvbWUgZnVuY3Rpb25zIGFzIHN0YXRpYyBhbmQgcmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKLQotMjAxMS0xMS0yNCAwOTo0MzoxNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBJbXBsZW1lbnQgOjpnZXRfc2lua19jYXBzIHZmdW5jIHRvIHByb3BhZ2F0ZSBkb3duc3RyZWFtIGNhcHMgY29uc3RyYWludHMgdXBzdHJlYW0KLQotMjAxMS0xMS0yNCAwMTo0ODoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JICB0ZXN0czogdXBkYXRlIHNvdXAgdGVzdCBmb3IgcmVtb3ZlZCBpcmFkaW8tbW9kZSBwcm9wZXJ0eQotCi0yMDExLTExLTI0IDAxOjQ1OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogZ2V0IHJpZCBvZiBpcmFkaW8tKiBwcm9wZXJ0aWVzLCBwb3N0IHRhZ3MgaW5zdGVhZAotCi0yMDExLTExLTI0IDAxOjQwOjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBzb3VwaHR0cHNyYzogYWx3YXlzIHNlbmQgaWNlY2FzdCByZXF1ZXN0IGhlYWRlciwgZHJvcCBpcmFkaW8tbW9kZSBwcm9wZXJ0eQotCSAgU2VydmVyIHNob3VsZCBpZ25vcmUgdW5rbm93bi91bmhhbmRsZWQgaGVhZGVycy4uCi0KLTIwMTEtMTEtMjQgMDE6MTk6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBtYWtlIGNvbm5lY3Rpb24tc3BlZWQgcHJvcGVydHkgYSBndWludDY0Ci0KLTIwMTEtMTEtMjQgMDA6NTI6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cG1hbmFnZXIueG1sOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBtYW5hZ2VyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5jOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1QQ01BLnB5OgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLnB5OgotCSAgcnRwbWFuYWdlcjogcmVuYW1lIGdzdHJ0cCogLT4gcnRwKgotCSAgVGhpcyB3YXMgZG9uZSBpbiAwLjEwIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggdGhlIHJ0cCBlbGVtZW50cyBpbgotCSAgZmFyc2lnaHQsIGJ1dCB0aGUgZ3N0LXByZWZpeGluZyBpcyBubyBsb25nZXIgbmVlZGVkIGluIDAuMTEKLQotMjAxMS0xMS0yMyAxMDoyMzoyOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTExLTIzIDA5OjI2OjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlYXVkaW9zaW5rOiBhdm9pZCBlbmRsZXNzIGNhcHMgbG9vcAotCSAgQ2hlY2sgaWYgdGhlIGNhcHMgYXJlIHRoZSBzYW1lIGJlZm9yZSBhZGRpbmcgYSBuZXcgcHJvYmUuIEJlY2F1c2Ugb2YgcmVjb25maWd1cmUKLQkgIGV2ZW50cywgdXBzdHJlYW1zIHNlbmRzIG11bHRpcGxlIGNhcHMgZXZlbnRzLgotCi0yMDExLTExLTIzIDAwOjU3OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FwYXJzZS5jOgotCSogdGVzdHMvZmlsZXMvcGlua25vaXNlLXZvcmJpcy5ta3Y6Ci0JICB0ZXN0czogYWRkIGJhc2ljIHVuaXQgdGVzdCBmb3IgbWF0cm9za2FwYXJzZQotCi0yMDExLTExLTIzIDAwOjU2OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JICBtYXRyb3NrYXBhcnNlOiBkb24ndCBsZWFrIHN0cmVhbSBoZWFkZXJzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0NTQ4Ci0KLTIwMTEtMTEtMjIgMDE6NDA6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICBNb3JlIHByaW50ZiBmb3JtYXQgd2FybmluZyBmaXhlcwotCi0yMDExLTExLTIxIDIwOjMxOjMxICswMTAwICBNYXRlaiBLbm9wcCA8bWF0ZWoua25vcHBAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvYnJlYWtteWRhdGEuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgRml4IHByaW50ZiBmb3JtYXQgY29tcGlsZXIgd2FybmluZ3Mgb24gT1MgWCAvIDY0Yml0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyNjE1Ci0KLTIwMTEtMTEtMjEgMTM6Mzc6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHVwZGF0ZSBmb3IgYWN0aXZhdGlvbiBjaGFuZ2VzCi0KLTIwMTEtMTEtMTggMTc6NTk6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgdXBkYXRlIGZvciBuZXcgc2NoZWR1bGluZyBxdWVyeQotCi0yMDExLTExLTE4IDEzOjU3OjIwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIGFkZCBwYXJlbnQgdG8gYWN0aXZhdGUgZnVuY3Rpb25zCi0KLTIwMTEtMTEtMTcgMTc6MzY6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWN0aXZhdGUgcGFkIGJlZm9yZSBzZXR0aW5nIGNhcHMKLQkgIFNldGluZyBjYXBzIG9uIGFuIGluYWN0aXZlIGZsdXNoaW5nIHBhZCBkb2VzIG5vdGhpbmcuCi0KLTIwMTEtMTEtMTcgMTc6MTc6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jCi0JICBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmMKLQotMjAxMS0xMS0xNyAxNTowMjo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmM6Ci0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgYWRkIHBhcmVudCB0byBwYWQgZnVuY3Rpb25zCi0KLTIwMTEtMTEtMTcgMDg6MjQ6NTggKzAxMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICBjb2xsZWN0cGFkczogcG9ydCBBUEkgY2hhbmdlcwotCi0yMDExLTExLTE2IDE5OjA4OjA1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleGVuYzogZW5zdXJlIHRvIGZyZWUgYWxsb2NhdGVkIHBhZGRlZCBkYXRhCi0KLTIwMTEtMTEtMTYgMTg6NTc6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4ZW5jOiByZXNldCB0YWcgc2V0dGVyIGludGVyZmFjZSB3aGVuIGFwcHJvcHJpYXRlCi0KLTIwMTEtMTEtMTYgMTg6NTc6MjEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiByZXNldCB0YWcgc2V0dGVyIGludGVyZmFjZSB3aGVuIGFwcHJvcHJpYXRlCi0KLTIwMTEtMTEtMTYgMTc6NTQ6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBhZGQgcGFyZW50IHRvIGludGVybmFsIGxpbmtzCi0KLTIwMTEtMTEtMTYgMTc6Mjc6MTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIGFkZCBwYXJlbnQgdG8gcXVlcnkgZnVuY3Rpb24KLQotMjAxMS0xMS0xNiAxMjo0MDowOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogdXBkYXRlIGZvciByZW5hbWVkIGZsYWdzCi0JICBVc2UgdGhlIF9jaGVja19yZWNvbmZpZ3VyZSBtZXRob2QgaW5zdGVhZCBvZiBjaGVja2luZyBmbGFncy4KLQkgIERvbid0IG5lZWQgdG8gcmVmIHRoZSBwYXJlbnQgYW55bW9yZSwgY29yZSBkb2VzIHRoYXQuCi0KLTIwMTEtMTEtMTUgMTg6MDE6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBfcXVlcnlfcGVlcl8qKCkgLT4gX3BlZXJfcXVlcnlfKigpCi0KLTIwMTEtMTEtMTUgMTc6NDU6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSAgX2FjY2VwdF9jYXBzKCkgLT4gX3F1ZXJ5X2FjY2VwdF9jYXBzKCkKLQotMjAxMS0xMS0xNSAxNzoyOTo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIF9wZWVyX2dldF9jYXBzKCkgLT4gX3BlZXJfcXVlcnlfY2FwcygpCi0KLTIwMTEtMTEtMTUgMTY6NTU6MjcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHRlc3RzL2ljbGVzL2dka3BpeGJ1ZnNpbmstdGVzdC5jOgotCSAgdXBkYXRlIGZvciBfZ2V0X2NhcHMoKSAtPiBfcXVlcnlfY2FwcygpCi0KLTIwMTEtMTEtMTUgMTY6MzE6NDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSAgY2hhbmdlIGdldGNhcHMgdG8gcXVlcnkKLQkgIENoYWluIHVwIGV2ZW50IGZ1bmN0aW9uIGluIHBheWxvYWRlcnMuCi0KLTIwMTEtMTEtMTUgMTM6MjM6NTYgKzAwMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBmaXggc3B1cmlvdXMgdGltZXN0YW1wIGRpc2NvbnRpbnVpdHkKLQkgIFdlIG5lZWQgdG8gdGVsbCB0aGUgYmFzZSBjbGFzcyB0aGF0IHdlJ3JlIGRyb3BwaW5nIGJ1ZmZlcnMsCi0JICBzbyBpdCBkcm9wcyB0aGUgaW5wdXQgdGltZXN0YW1wcyBjb3JyZXNwb25kaW5nIHRvIHRoZXNlLgotCSAgT3RoZXJ3aXNlLCB0aGUgZmlyc3QgYWN0dWFsIGF1ZGlvIGJ1ZmZlcnMgd2Ugb3V0cHV0IHdpbGwgYmUKLQkgIHN0YW1wZWQgd2l0aCB0aG9zZSAtIEdTVF9DTE9DS19USU1FU1RBTVBfTk9ORS4gVGhhdCBtaXNtYXRjaAotCSAgYmV0d2VlbiBpbnB1dCBidWZmZXIgY291bnQgYW5kIG91dHB1dCBidWZmZXIgY291bnQgd2lsbCBzdGF5Ci0JICB3aGlsZSBwbGF5aW5nLiBXaXRoIGVub3VnaCBoZWFkZXJzIGFuZCBsb25nIGVub3VnaCBidWZmZXIKLQkgIGR1cmF0aW9ucywgdGhlIHNpbmsgd2lsbCBoYXZlIHBsYXllZCBlbm91Z2ggYmVmb3JlIHJlY2VpdmluZwotCSAgdGhlIGZpcnN0IHZhbGlkIHRpbWVzdGFtcCAodXN1YWxseSAwKSwgYW5kIHdpbGwgdHJpZ2dlciBhbgotCSAgYXVkaWJsZSBkaXNjb250aW51aXR5LgotCi0yMDExLTExLTE0IDE1OjM0OjU3ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IGRldGVjdCB3aGVuIGEgZmlsZSBsaWVzIGFib3V0IGZpeGVkIGJsb2NrIHNpemUKLQkgIElmIHRoZSBzYW1wbGUvYmxvY2sgbnVtYmVyIGhhcHBlbnMgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGJsb2NrCi0JICBzaXplLCB3ZSBhc3N1bWUgdmFyaWFibGUgYmxvY2sgc2l6ZSwgYW5kIHRodXMgY291bnRlcnMgaW4gc2FtcGxlcwotCSAgaW4gdGhlIGhlYWRlcnMuIFRoaXMgY2FuIG9ubHkgZ2V0IHVzIGEgZmFsc2UgcG9zaXRpdmUgZm9yIGEgYmxvY2sKLQkgIHNpemUgb2YgMSwgd2hpY2ggaXMgaW52YWxpZC4gV2UgY2FuIGdldCBmYWxzZSBuZWdhdGl2ZXMgbW9yZQotCSAgb2Z0ZW4gdGhvdWdoIChlZywgaWYgbm90IHN0YXJ0aW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtKSwKLQkgIGJ1dCB0aGVuIHRoYXQncyBhbHJlYWR5IEdJR08uCi0KLTIwMTEtMDktMDIgMTk6MjA6MDcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIGdzdHJ0cHNlc3Npb246IEFkZCBzcGVjaWFsIG1vZGUgdG8gdXNlIEZJUiBhcyByZXBhaXIgYXMgR29vZ2xlIGRvZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTg0MTkKLQotMjAxMS0wOS0wMSAxNzo0NzozOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBydHBzZXNzaW9uOiBTZW5kIEZJUiByZXF1ZXN0cyBpbiByZXNwb25zZSB0byBrZXkgdW5pdCByZXF1ZXN0cyB3aXRoIGFsbC1oZWFkZXJzPVRSVUUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTg0MTkKLQotMjAxMS0wOS0wMSAxNjoyNToyMSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBydHBzZXNzaW9uOiBQdXQgdGhlIFBMSSByZXF1ZXN0cyBpbiBlYWNoIFJUUFNvdXJjZQotCSAgQWxzbyByZWZhY3RvciBhIGJpdCBhbmQgcHV0IGFsbCB0aGUga2V5ZnJhbWUgcmVxdWVzdCBjb2RlIGluIG9uZQotCSAgcGxhY2UgaW5zaWRlIHJ0cHNlc3Npb24uYwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODQxOQotCi0yMDExLTA4LTMxIDE0OjM1OjMzIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBIYWNrIHRvIEZJUiBiZWNhdXNlIEdvb2dsZSBkb2Vzbid0IHNldCB0aGUgc2VuZGVyIHNzcmMgY29ycmVjdGx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDE5Ci0KLTIwMTEtMDgtMzAgMTk6MDY6MTMgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IFByb2Nlc3MgcmVjZWl2ZWQgRnVsbCBJbnRyYSBSZXF1ZXN0cwotCSAgUHJvY2VzcyBGSVIgcmVxdWVzdHMgYWNjb3JkaW5nIHRvIFJGQyA1MTA0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDE5Ci0KLTIwMTEtMTEtMDcgMTg6NDM6MjYgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBTZXQgcGl4ZWwtYXNwZWN0LXJhdGlvIHRvIDEvMQotCSAgV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2V0dGluZyB0aGUgcGl4ZWwtYXNwZWN0LXJhdGlvIGZyb20gVjRMMi4gU28KLQkgIHNpbXBseSBzZXQgaXQgdG8gYmUgMS8xIGluIHRoZSBjYXBzIHRvIHByZXZlbnQgbmVnb3RpYXRpb24gZmFpbHVyZXMgd2hlbgotCSAgZml4YXRpbmcgdG8gd2VpcmQgdmFsdWVzIChlLmcuIHdoZW4gdGhlIGRvd25zdHJlYW0gY2FwcyBoYXMKLQkgIHBpeGVsLWFzcGVjdC1yYXRpbyA9IFsgTUlOLCBNQVggXSApCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNTgwCi0KLTIwMTEtMTEtMTQgMDk6Mzk6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jOgotCSAgdGVzdHM6IG1ha2UgaWQzZGVtdXggdGVzdCBjb21waWxlCi0JICBTdGlsbCBmYWlscyB0aG91Z2guCi0KLTIwMTEtMTEtMTIgMTU6NDI6MjcgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBubyBuZWVkIHRvIGV4cGxpY2l0ZWx5IGFkZCBjb250cm9sbGVkIHByb3BlcnRpZXMgYW55bW9yZQotCi0yMDExLTExLTEzIDIzOjQyOjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIFVwZGF0ZSBmb3IgR3N0VVJJSGFuZGxlciBnZXRfcHJvdG9jb2xzKCkgY2hhbmdlcwotCi0yMDExLTExLTEzIDE4OjUwOjUxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHNvdXAsIHB1c2hmaWxlLCBydHNwLCB1ZHAsIHY0bDI6IHVwZGF0ZSBmb3IgR3N0VVJJSGFuZGxlciBBUEkgY2hhbmdlcwotCi0yMDExLTExLTExIDE5OjI0OjI3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYwotCi0yMDExLTExLTExIDE5OjIxOjUwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkgIHJ0cDogZml4IGZvciBydHAgaGVhZGVyIGNoYW5nZXMKLQotMjAxMS0xMS0xMSAxMDowNjoyNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlYXVkaW9zaW5rOiBmaXggY2FwcyBsZWFrCi0KLTIwMTEtMTEtMTEgMTQ6NTU6NDggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGRvIG5vdCBsZWFrIGNsaWVudG5hbWUgd2hlbiBzZXR0aW5nIHVwIHByb3BlcnR5Ci0KLTIwMTEtMTEtMTEgMTg6MDU6MzUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlOiBDaGFpbiB1cCBkaXNwb3NlKCkgaW4gcHVsc2VhdWRpb3NpbmsKLQotMjAxMS0xMS0xMSAxMjozMjo0MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5oOgotCSogZ3N0L3J0cC9mbnYxaGFzaC5oOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5oOgotCSAgdXBkYXRlIGZvciBiYXNlIGNsYXNzIHJlbmFtZQotCi0yMDExLTExLTExIDEyOjI1OjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFjM3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWNlbHBkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5Lmg6Ci0JICB1cGRhdGUgZm9yIGJhc2UgY2xhc3MgcmVuYW1lCi0KLTIwMTEtMTEtMTEgMTI6MDE6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgdXBkYXRlIGZvciBhdWRpb2Jhc2UqIHJlbmFtZQotCi0yMDExLTExLTExIDExOjUzOjQ1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5oOgotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIGF1ZGlvOiB1cGRhdGUgZm9yIGJhc2UgY2xhc3MgcmVuYW1lCi0KLTIwMTEtMTEtMTEgMTE6MzM6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmg6Ci0JICBmaXggZm9yIHJpbmdidWZmZXIgcmVuYW1lCi0KLTIwMTEtMTEtMTEgMTE6MjQ6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L2phY2svZ3N0amFja3JpbmdidWZmZXIuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmg6Ci0JICB1cGRhdGUgZm9yIHJpbmdidWZmZXIgY2hhbmdlCi0KLTIwMTEtMTEtMTAgMjM6MTU6MzAgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBwb3J0IGFwaSBjaGFuZ2VzCi0KLTIwMTEtMTEtMTAgMjM6MDk6MjMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGFubm9kZXguYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIHZhcmlvdXM6IGFkZCBtaXNzaW5nIGluY2x1ZGVzCi0KLTIwMTEtMTEtMTAgMjE6MzU6MjQgKzAxMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZml4IGNvbXBpbGF0aW9uIHdpdGggcHVsc2VhdWRpbyAwLjkKLQotMjAxMS0xMS0xMCAxODozMjo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHVwZGF0ZSBmb3IgYWRhcHRlciBhcGkgY2hhbmdlcwotCi0yMDExLTExLTEwIDE3OjIzOjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3N0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVucGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHVwZGF0ZSBmb3IgY2hhbmdlZCBiYXNlIGNsYXNzZXMKLQotMjAxMS0xMS0xMCAxMzo1MDozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgZml4IGZvciBhdWRpbyBjbG9jayBjaGFuZ2UKLQotMjAxMS0xMS0xMCAxMTowMzoxOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgdXBkYXRlIGZvciByZW1vdmVkIGZpeGF0ZSBmdW5jdGlvbgotCi0yMDExLTExLTA5IDE3OjQwOjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMTEtMDkgMTc6Mzg6MDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgdXBkYXRlcyBmb3IgbmV3IGFjY2VwdGNhcHMgcXVlcnkKLQotMjAxMS0xMS0wOCAxNTozNToyNiArMDAwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBmaXggd3Jvbmcgc3RyaWRlIHdoZW4gaW52ZXJ0aW5nIHVuY29tcHJlc3NlZCB2aWRlbwotCSAgU3VjaCBmcmFtZXMgaGF2ZSBhIHN0cmlkZSBtdWx0aXBsZSBvZiA0LCBzZWUKLQkgIGh0dHA6Ly9sc2N1YmUub3JnL3BpcGVybWFpbC9mZm1wZWctaXNzdWVzLzIwMTAtQXByaWwvMDEwMjQ3Lmh0bWwuCi0JICBUaGlzIHNob3dlZCB1cCBvbiBhIHNhbXBsZSB1c2luZyBhIG9kZCB3aWR0aCBvZiAyNCBiaXQgdmlkZW8uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjg4Ci0KLTIwMTEtMTEtMDkgMTI6MjU6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgIGgyNjNwcGF5OiByZXBvcnQgdG8gMC4xMQotCi0yMDExLTExLTA5IDEyOjE4OjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmMKLQkgIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmMKLQkgIGdzdC9pc29tcDQvcXRkZW11eC5jCi0KLTIwMTEtMTEtMDkgMTE6NTY6MDcgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIGR0bWY6IGZpeCBjb21waWxlciB3YXJuaW5nIGZvciB1bmluaXRpYWxpemVkIHZhbHVlcwotCi0yMDExLTExLTA5IDExOjUzOjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHJlbW92ZSBxdWVyeSB0eXBlcwotCi0yMDExLTExLTA5IDEwOjMyOjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBtaW5pbWFsIHNhbml0eSBjaGVjayBvbiBjcmVhdGlvbiBkYXRldGltZQotCi0yMDExLTExLTA0IDE3OjU0OjA0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmg6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmg6Ci0JICBkdG1mc3JjOiBSZWplY3Qgc3RhcnQvc3RvcCByZXF1ZXN0cyB0aGF0IGNvbWUgb3V0IG9mIG9yZGVyCi0KLTIwMTEtMTAtMjkgMTg6MjQ6MjYgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIGR0bWY6IFBvc3QgbWVzc2FnZXMgd2hlbiBzdGFydGluZyB0byBzZW5kL3JlY2VpdmUgRFRNRgotCSAgVGhpcyB3YXksIHRoZSBVSSBjYW4gZGlzcGxheSB0aGUgRFRNRiBldmVudHMgYXMgdGhleSBhcyBiZWluZyBzZW50LgotCi0yMDExLTExLTAyIDEyOjU4OjEyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICBydHBoMjYzcHBheTogUmV0dXJuIHRoZSBzaW5rIHBhZCB0ZW1wbGF0ZSBhcyBzaW5rIGNhcHMsIG5vdCB0aGUgc3JjJ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01Nzc3ODQKLQotMjAwOS0wMy0xNSAxOToyNjo0OCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICBydHBoMjYzcHBheTogQWxzbyBpbXBsZW1lbnQgc2l6ZS9mcmFtZXJhdGUgcmVzdHJpY3Rpb25zIGluIGdldGNhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01Nzc3ODQKLQotMjAwOS0wMy0wNCAyMDo1MDoxOSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICBydHBoMjYzcHBheTogSW1wbGVtZW50IGdldGNhcHMgZm9sbG93aW5nIFJGQyA0NjI5LCBwaWNrcyB0aGUgcmlnaHQgYW5uZXhlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU3Nzc4NAotCi0yMDExLTExLTA4IDE0OjMxOjM0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhbHNvIHNldCBzZWdtZW50IHN0b3AgYXQgc3RhcnR1cCByYXRoZXIgdGhhbiBvbmx5IHBvc3Qgc2VlawotCSAgLi4uIHNvIGFzIHRvIGVuc3VyZSBjb25zaXN0ZW50IHBsYXliYWNrIHdpdGggb3Igd2l0aG91dCBzZWVrLCBlc3BlY2lhbGx5Ci0JICBpbiBwcmVzZW5jZSBvZiBzb21lIGJvZ3VzIGVkaXQgbGlzdCBlbnRyaWVzLgotCi0yMDExLTExLTA4IDExOjE4OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgcHJvYmUgYXBpIGNoYW5nZXMKLQotMjAxMS0xMS0wOCAwODo1MDoxOSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogY29kZSBjbGVhbnVwcwotCSAgTW92ZSB2YXJpYWJsZXMgdG8gdGhlIHNjb3BlIHdoZXJlIHRoZXkgYXJlIG5lZWRlZC4gVXNlIG91ciBtYWNyb3MgYW5kIGZ1bmN0aW9ucwotCSAgbW9yZS4KLQotMjAxMS0xMS0wOCAwODo0OTowNSArMDEwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogYWRkIGEgc2lua19xdWVyeSB0byBlYXQgYWxsb2NhdGlvbiBxdWVyaWVzCi0JICBXZSBzaG91bGQgbm90IGZvcndhcmQgYWxsb2NhdGlvbiBxdWVyaWVzIGZvciBhdWRpbyB0byB0aGUgdmlkZW8gc2luay4KLQotMjAxMS0xMS0wMiAxNzowMjo1NCArMDAwMCAgUmF1bCBHdXRpZXJyZXogU2VnYWxlcyA8cmdzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9NYWtlZmlsZS5hbToKLQkgIGdzdC9mbHYvOiBhZGQgYW1mZGVmcy5oIHRvIG5vaW5zdF9IRUFERVJTCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzMzM0Ci0KLTIwMTEtMTEtMDcgMTc6MTQ6MTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgZml4IGZvciBwcm9iZSB1cGRhdGVzCi0KLTIwMTEtMTAtMDMgMTc6NTA6NDMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICBmbHZkZW11eDogZGV0ZWN0IGxhcmdlIHB0cyBnYXBzIGFuZCByZXN5bmMKLQkgIFNob3VsZCB3b3JrIG9uIG11bHRpcGxlIGdhcHMsIGJ1dCB0ZXN0ZWQgb24gb25seSBvbmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMxNDMwCi0KLTIwMTEtMDgtMjIgMTA6NDA6NDUgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBmaXggb2ZmIGJ5IG9uZSBiZXR3ZWVuIGdyYW5wb3MgYW5kIGxhc3Rfc3RvcAotCi0yMDExLTEwLTA3IDE5OjQxOjM1ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogZml4IGxhc3QgZnJhbWUgdGltZXN0YW1wIGluIGZpeGVkIGJsb2NrIHNpemUgbW9kZQotCSAgVGhlIGxhc3QgYmxvY2sgbWF5IGhhdmUgYSBkaWZmZXJlbnQgYmxvY2sgc2l6ZSwgc28gd2Ugc2hvdWxkIG5vdAotCSAgdXNlIGl0IHRvIHNjYWxlIG9yIHdlJ2xsIGVuZCB1cCB3aXRoIGEgd3JvbmcgdGltZXN0YW1wLgotCSAgU2VlIGNvbW1lbnQgYW5kIHF1b3RlIGZyb20gdGhlIEZMQUMgZm9ybWF0IGRvY3VtZW50YXRpb24gaW4gdGhlIGNvZGUuCi0JICBGaXhlcyBsb29wZWQgcGxheWJhY2sgb2YgRkxBQyBmaWxlcyAodmlhIGFib3V0LXRvLWZpbmlzaCkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYxMjE1Ci0KLTIwMTEtMTAtMjcgMTU6NTI6NDcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5oOgotCSAgY2Fpcm90ZXh0b3ZlcmxheTogYWRkIGEgJ3NpbGVudCcgcHJvcGVydHkgdG8gc2tpcCByZW5kZXJpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjI4NTYKLQotMjAxMS0xMS0wNyAxMjowMDoxMiArMDEwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkgIG1hdHJvc2thbXV4OiBmaXggcmVncmVzc2lvbiBjYXVzaW5nIG1hbGZvcm1lZCBmaWxlcwotCSAgVGhpcyB3YXMgY2F1c2VkIGJ5IG1lIGluIDFiMjEzZC4gSXQgc2VlbXMgSSB3YXMgdG9vIGZvY3VzZWQgb24gMC4xMSB3aGVuIEkgZGlkCi0JICB0aGlzIGFuZCB0ZXN0ZWQgdGhlIHdyb25nIGJyYW5jaC4KLQkgIFRoZSBwcm9ibGVtIHdhcyByZXBvcnRlZCBieSBBbGV4ZXkgRmlzaGVyLgotCi0yMDExLTExLTA0IDE4OjQxOjM2ICswMTAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmg6Ci0JKiBnc3QvYWxwaGEvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5oOgotCSogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnguYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2thcmFva2UuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYzoKLQkqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaDoKLQkqIGdzdC9zaGFwZXdpcGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NtcHRlL01ha2VmaWxlLmFtOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC92aWRlb2JveC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvcGx1Z2luLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjb250cm9sbGVyOiBwb3J0IHRvIG5ldyBjb250cm9sbGVyIGxvY2F0aW9uIGFuZCBhcGkKLQotMjAxMS0xMS0wNCAxNzozOToxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgbW9yZSB0ZW1wbGF0ZSBmaXhlcwotCi0yMDExLTExLTA0IDE2OjIxOjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlYXVkaW9zaW5rOiBtb3JlIDAuMTEgZml4aW5nCi0JICBNYWtlIHN1cmUgdGhlIGNhcHMgZXZlbnQgZ2V0cyB0byB0aGUgc2luay4KLQotMjAxMS0xMS0wNCAxNTozNTo0MiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JICBwdWxzZWF1ZGlvc2luazogcG9ydCBzb21lIG1vcmUKLQkgIFJlbmFtZSBkZWNvZGViaW4yIC0+IGRlY29kZWJpbiBzb21lIG1vcmUKLQkgIENsZWFudXAgdXAgc2lua3BhZCBldmVudCBoYW5kbGluZwotCi0yMDExLTExLTA0IDEzOjU2OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlYXVkaW9zaW5rOiBwb3J0IHNvbWUgbW9yZSB0byAwLjExCi0JICBXZSBtdXN0IG5vdCBmb3J3YXJkIHRoZSBjYXBzIGV2ZW50LiBpbnN0ZWFkIHdlIHdpbGwgZGVjaWRlIHdoYXQgdG8gZG8gd2hlbiB0aGUKLQkgIHBhZCBibG9jayBpcyB0YWtlbi4KLQkgIFVzZSBkZWNvZGViaW4gaW5zdGVhZCBvZiBkZWNvZGViaW4yCi0KLTIwMTEtMTEtMDQgMTM6MTI6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgbW9yZSB0ZW1wbGF0ZSBmaXhlcwotCi0yMDExLTExLTA0IDExOjU4OjIyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL3dlYm0tbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYzoKLQkgIG1ha2UgJXUgaW4gYWxsIHJlcXVlc3QgcGFkIHRlbXBsYXRlcwotCi0yMDExLTExLTA0IDExOjAxOjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jCi0KLTIwMTEtMTEtMDQgMTA6MzI6NDYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JICBQb3J0IGFwZWRlbXV4Ci0KLTIwMTEtMTEtMDMgMjM6Mjg6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwOiB1c2UgR0xpYidzIEdfQklHX0VORElBTiBkZWZpbmUgaW5zdGVhZCBvZiBCSUdfRU5ESUFOCi0JICBGaXhlcyBjb21waWxlciB3YXJuaW5nIG9uIG1pbmd3MzIKLQotMjAxMS0xMS0wMyAxNjo0MzowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcC5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgbmV3IG5ldCBsaWJyYXJ5Ci0KLTIwMTEtMTEtMDIgMTI6MDk6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgdGFnczogdXBkYXRlIGZvciB0YWcgQVBJIHJlbW92YWwKLQotMjAxMS0xMS0wMiAxMDo0MDoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTEwLTMxIDAyOjQwOjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgbmV0YnVmZmVyIGFwaSBjaGFuZ2UKLQotMjAxMS0xMC0zMSAwMjozNTo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcC5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgbmV0YWRkcmVzcyBjaGFuZ2UKLQotMjAxMS0xMC0zMSAwMjoyNDowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB1cGRhdGUgZm9yIG1ldGEgYXBpIGNoYW5nZQotCi0yMDExLTEwLTI5IDA5OjI5OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHVwZGF0ZSBmb3IgbmV3IHRhc2sgYXBpCi0KLTIwMTEtMTAtMjkgMDk6MDk6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBzdHJ1Y3R1cmU6IGZpeCBmb3IgYXBpIHVwZGF0ZQotCi0yMDExLTEwLTI5IDA4OjI1OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIGJ1ZmZlcmxpc3Q6IHVwZGF0ZSBmb3IgbmV3IEFQSQotCi0yMDExLTExLTAxIDAwOjQwOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBVcGRhdGUgZm9yIHBhZCBBUEkgY2hhbmdlcwotCSAgR3N0UHJvYmVUeXBlLCBHc3RQcm9iZVJldHVybiBhbmQgR3N0QWN0aXZhdGVNb2RlIC0+IEdzdFBhZCoKLQotMjAxMS0xMC0zMSAxODozODo1NSArMDEwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSAgYWMzcGFyc2U6IGZpeCBvYnZpb3VzIGNyYXNoCi0KLTIwMTEtMTAtMzEgMTY6MTg6MzIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogYXZvaWQgc2hvcnRjdXQgZXZhbHVhdGlvbiB3aGVuIGFkZGluZyBwYWlyZWQgbXA0IHRhZwotCSAgRml4ZXMgKHBhcnQgb2YpICM2Mzg3MTEuCi0KLTIwMTEtMTAtMzEgMTU6NDM6MjUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZG8gbm90IHVzZSB1bm9mZmljYWwgVl9NSlBFRyBjb2RlYyBpZAotCSAgLi4uIGJ1dCBhcyBub3Qgc3BlYydlZCBlc3BlY2lhbGx5LCBjb25zaWRlciBpdCBhIFZmVyBjb21wYXRpYmlsaXR5IGNhc2UuCi0JICBGaXhlcyAjNjU5ODM3LgotCi0yMDExLTEwLTMwIDE5OjMwOjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgZmxhY2VuYzogcmVtb3ZlIGRlYWQgY29kZSBmcm9tIGhlYWRlcgotCSAgV2UgcmVxdWlyZSBhIG5ldy1lbm91Z2ggbGliZmxhYyB0aGF0IHRoaXMgY29uZGl0aW9uIHdpbGwgbmV2ZXIgYXBwbHkuCi0KLTIwMTEtMTAtMzAgMTk6MDk6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBwYXJzZSBzdHJlYW0gaGVhZGVycyBmcm9tIGNhcHMgaW4gc2V0X2Zvcm1hdCBmdW5jdGlvbgotCSAgTm90IHRoYXQgdGhpcyBzZWVtcyB0byBiZSBhY3R1YWxseSBuZWVkZWQsIGxpYmZsYWMgaGFwcGlseSBkZWNvZGVzCi0JICBzdHVmZiBldmVuIGlmIHdlIGp1c3QgZHJvcCBhbGwgaGVhZGVycyBhbmQgbmV2ZXIgZmVlZCBpdCB0byB0aGUKLQkgIGxpYnJhcnkuCi0KLTIwMTEtMTAtMzAgMTg6NDk6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBmbGFjZGVjOiBkb24ndCBleHRyYWN0IG1ldGFkYXRhLCBsZWF2ZSB0aGF0IHRvIHRoZSBwYXJzZXIgb3IgY29udGFpbmVyCi0KLTIwMTEtMTAtMzAgMTg6NDU6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBmbGFjZGVjOiB3ZSBleHBlY3QgZnJhbWVkIGlucHV0IG5vdywgcmVtb3ZlIHNvbWUgbW9yZSBjb2RlCi0KLTIwMTEtMTAtMDkgMTY6MTg6MDkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBmbGFjZGVjOiBuYWl2ZSBwb3J0IHRvIEdzdEF1ZGlvRGVjb2RlcgotCSAgVGhpcyB3b3VsZCBwcm9iYWJseSBoYXZlIGJlZW4gdG9vIGludmFzaXZlIHRvIGRvIGluIHRoZSAwLjEwCi0JICBicmFuY2gsIHdpdGggYWxsIHRoZSBwdWxsLW1vZGUgYW5kIHBhcnNlciBoYW5kbGluZyBjb2RlIGluCi0JICB0aGVyZS4KLQotMjAxMS0xMC0zMCAxMTo0NDo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgZXh0LCBnc3Q6IHVwZGF0ZSBmb3IgdGFnbGlzdCBBUEkgY2hhbmdlcwotCi0yMDExLTEwLTMwIDExOjQxOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogZml4IGNvbXBpbGF0aW9uIG9mIGF1ZGlvIHRlc3RzIGluIHVuaW5zdGFsbGVkIHNldHVwCi0KLTIwMTEtMTAtMjggMjE6MjY6MzMgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYzoKLQkgIGF1ZGlvcGFub3JhbWE6IHNpbXBsaWZ5IGdldF91bml0X3NpemUKLQotMjAxMS0xMC0yOCAyMToxOTo0MiArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmM6Ci0JICB0ZXN0czogYXVkaW9lY2hvOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0yOCAyMToxODozMyArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JICBhdWRpb2VjaG86IGZpeCBpbnRlcm5hbCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbgotCi0yMDExLTEwLTI4IDE0OjA1OjQ4ICswMjAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJiYW5kLmM6Ci0JICB0ZXN0czogYXVkaW9jaGViYmFuZDogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMjggMTY6NTI6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMC0yOCAxNTowODoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JICBwdWxzZWF1ZGlvc2luazogZml4IHBvcnRpbmcgZXJyb3JzCi0JICBUaGUgcHJvYmVzIHdlcmUgcG9ydGVkIHdyb25nbHkgYW5kIGNhdXNlZCBkZWFkbG9ja3MuCi0KLTIwMTEtMTAtMjggMDk6NTc6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBhZGQgc29mLW1hcmtlciB0byB0ZW1wbGF0ZSBjYXBzLCBzbyB3ZSBkb24ndCBnZXQgcGx1Z2dlZCBmb3IgbG9zc2xlc3MganBlZwotCSAganBlZ2RlYyAodXNpbmcgbGlianBlZyA2LjIvOCkgY2FuJ3QgZGVjb2RlIHNvbWUgbG9zc2xlc3MgdHlwZXMgb2YgSlBFRy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01NTY2NDgKLQotMjAxMS0xMC0yOCAxMzowNjoyMCArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYzoKLQkgIHRlc3RzOiBhdWRpb2NoZWJsaW1pdDogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMjggMTM6MDI6NTYgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4OiBmaXggY3Jhc2ggaW4gcHJvY2VzcygpCi0KLTIwMTEtMTAtMjggMTE6NDg6MzEgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jOgotCSAgdGVzdHM6IGF1ZGlvYW1wbGlmeTogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMjggMTI6NTE6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZWF1ZGlvc2luay5jOgotCSAgcHVsc2U6IGZpeCBjaGVjayBmb3IgZW1wdHkgY2FwcwotCi0yMDExLTEwLTI4IDEyOjMwOjMzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBlbGFib3JhdGUgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzCi0KLTIwMTEtMTAtMTEgMjA6NTY6NTEgKzA0MDAgIFN0YXMgU2VyZ2VldiA8c3RzcEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBiZSBjYXJlZnVsIHdpdGggbmVnYXRpdmUgY3RzCi0JICBGaXhlcyAjNjYxNDc3LgotCi0yMDExLTEwLTA2IDEzOjA0OjU0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiB0dW5lIG5vbi11cGRhdGUgc2VlayBoYW5kbGluZyBjYXNlcwotCSAgRml4ZXMgIzY2MTA0OS4KLQotMjAxMS0xMC0yOCAxMTo0Njo0MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3ZpZGVvbWl4ZXIvZ3N0Y29sbGVjdHBhZHMyLmMKLQotMjAxMS0xMC0yOCAxMToxNjozOCArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JICBhdWRpb2R5bmFtaWM6IGRvbid0IHNldCBwcm9jZXNzIGZ1bmN0aW9uIHRvbyBlYXJseQotCSAgR3N0QXVkaW9JbmZvIGFuZCBHc3RBdWRpb0ZpbHRlciBoYXZlIGJlZW4gY2hhbmdlZCBzbyB0aGF0IHRoaXMgY29kZSBkb2Vzbid0Ci0JICBjcmFzaCBhbnltb3JlIHdoZW4gYSBwcm9wZXJ0eSBpcyBzZXQgaW4gTlVMTCBzdGF0ZS4KLQotMjAxMS0xMC0yOCAxMDo0MjowNCArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9keW5hbWljLmM6Ci0JICB0ZXN0czogYXVkaW9keW5hbWljOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0yOCAwMDoyNDoxNCArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzoKLQkgIHRlc3RzOiBzcGVjdHJ1bTogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMjcgMjM6NTc6MTcgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzoKLQkgIHRlc3RzOiBhdWRpb3Bhbm9yYW1hOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0yNyAyMzo1NjoxMiArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogZml4IGdldF91bml0X3NpemUKLQotMjAxMS0xMC0yOCAxMDo0MDozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogVXNlIHRoZSBjbGlwIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIHByZXBhcmVfYnVmZmVyIGZ1bmN0aW9uCi0KLTIwMTEtMTAtMjggMDk6MDU6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBydHBtYW5hZ2VyLCB2NGwyOiBmaXggY29tcGlsZXIgd2FybmluZ3MgYWZ0ZXIgZ3N0X2NhcHNfbmV3X3NpbXBsZSgpIGNoYW5nZQotCi0yMDExLTEwLTI4IDA5OjAxOjU3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggY29tcGlsZXIgd2FybmluZ3MgYWZ0ZXIgZ3N0X2NhcHNfbmV3X3NpbXBsZSgpIGNoYW5nZQotCi0yMDExLTEwLTI4IDA5OjM2OjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGdzdC92aWRlb21peGVyL2dzdGNvbGxlY3RwYWRzMi5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIycGFkLmg6Ci0JICB2aWRlb21peGVyMjogVXNlIGNvbGxlY3RwYWRzMiBmcm9tIGNvcmUKLQotMjAxMS0xMC0yNyAxOTozOToyMCArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdmVuYy9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICB3YXZlbmM6IHBvcnQgdG8gMC4xMSByYXcgYXVkaW8gY2FwcwotCi0yMDExLTEwLTI3IDE5OjA2OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvZmx2L2dzdGZsdm11eC5jCi0KLTIwMTEtMTAtMjcgMTk6MDA6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkqIGdzdC9ydHAvUkVBRE1FOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSAgbWFrZSBzb21lIG1vcmUgdGhpbmdzIGNvbXBpbGUgYWdhaW4KLQotMjAxMS0xMC0yNyAxNjowODoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmMKLQkgIGV4dC9wdWxzZS9wdWxzZXNpbmsuYwotCi0yMDExLTEwLTI3IDE2OjAzOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgZml4IGNvbXBpbGF0aW9uCi0KLTIwMTEtMTAtMjggMDA6NDE6NDUgKzExMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogRG9uJ3QgcG9pbnRsZXNzbHkgaG9sZCBvYmplY3QgbG9jayBvdmVyIGNhcHMgb3BlcmF0aW9ucwotCSAgQXZvaWRzIGEgZGVhZGxvY2sgd2hlbiBnZXRjYXBzIGlzIHJlY3Vyc2l2ZSBkdWUgdG8gdGhlIGdldGNhcHMgYmVpbmcKLQkgIHJlZmxlY3RlZCB1cHN0cmVhbS9kb3duc3RyZWFtLiBUaGUgbG9jayBpc24ndCBhY3R1YWxseSBwcm90ZWN0aW5nCi0JICBhbnl0aGluZyBoZXJlLgotCi0yMDExLTEwLTI3IDAwOjM3OjAzICsxMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9mbHYvYW1mZGVmcy5oOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogYWRkIHNvbWUgY29tbWVudHMgYW5kIGRlZmluZXMgdG8gY2xhcmlmeSBjb2RlLgotCi0yMDExLTEwLTEwIDE1OjM2OjE0ICswMjAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGVibWwtd3JpdGUgdG8gYmUgbW9yZSAwLjExIGZyaWVuZGx5Ci0JICBTd2l0Y2hpbmcgdG8gYSBtb3JlIDAuMTEtZnJpZW5kbHkgcGF0dGVybiwgd2hlcmUgZ2V0dGluZyB0aGUgYnVmZmVyJ3MgZGF0YQotCSAgcG9pbnRlciBhbmQgc2V0dGluZyB0aGUgc2l6ZSBtYW55IHRpbWVzIGlzIGxlc3MgbmF0dXJhbC4gVGhpcyBpcyBvZiBjb3Vyc2UgaW4KLQkgIHByZXBhcmF0aW9uIHRvIHRoZSB1cGNvbWluZyBwb3J0IG9mIHRoZSBwbHVnaW4uCi0KLTIwMTEtMTAtMTEgMjE6NDU6NDYgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JICBtYXRyb3NrYTogcmVtb3ZlIHN0YWxlIGZsb2F0Y2FzdCBpbmNsdWRlCi0JICBHRE9VQkxFX1RPX0JFIHdhcyBtb3ZlZCB0byBjb3JlIGEgbG9uZyB0aW1lIGFnby4KLQotMjAxMS0xMC0xMSAyMjoxMDoyNyArMDIwMCAgUmVuw6kgU3RhZGxlciA8cmVuZS5zdGFkbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGZpeCBwb3NzaWJsZSBjcmFzaCB3aXRoIG1hbGZvcm1lZCBkaXJhYyBjb2RlY19kYXRhCi0JICBTaW5jZSBzaXplIGlzIHVuc2lnbmVkLCB3ZSBuZWVkIHRvIHNhZmVndWFyZCBhZ2FpbnN0IHdyYXBwaW5nIGJlbG93IHplcm8uCi0KLTIwMTEtMTAtMjEgMjI6MzM6MzQgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICBlcXVhbGl6ZXI6IHJlbW92ZSBhdm9pZGFibGUgY2FsbCB0byBnc3Rfb2JqZWN0X3NldF9uYW1lCi0KLTIwMTEtMTAtMjEgMjI6MzI6MzggKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHJlbW92ZSBhdm9pZGFibGUgY2FsbCB0byBnc3Rfb2JqZWN0X3NldF9uYW1lCi0KLTIwMTEtMTAtMjEgMTQ6NTE6MjMgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NtaXhlci5oOgotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSogc3lzL29zczQvb3NzNC1zb3VyY2UuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb292ZXJsYXkuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRlb292ZXJsYXkuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRvcmllbnQuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRvcmllbnQuaDoKLQkgIGludGVyZmFjZXM6IGNsZWFuIHVwIHRoZSB1c2Ugb2YgaWZhY2UgYW5kIGNsYXNzL2tsYXNzCi0KLTIwMTEtMTAtMjEgMTE6Mzc6MDUgKzAxMDAgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIFVwZGF0ZSBzcGVjIGZpbGUgc28gaXRzIHBhcmFsZWwtaW5zdGFsbGFibGUgYW5kIG9ubHkgdHJpZXMgdG8gcGFja2FnZSBwb3J0ZWQgcGx1Z2lucwotCi0yMDExLTEwLTE2IDIwOjMwOjI1ICswMjAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nZW5jOiBpbmNyZWFzZSBhcmJpdHJhcnkgcmVzb2x1dGlvbiBsaW1pdHMKLQkgIEFwcGFyZW50bHkgbGlicG5nIGNhbiB0ZWNobmljYWxseSBkbyB1cCB0byAyXjMxLTEgcm93cyBhbmQgY29sdW1ucy4gSG93ZXZlciBpdAotCSAgaW1wb3NlcyBhbiAoYXJiaXRyYXJ5KSBkZWZhdWx0IGxpbWl0IG9mIDEgbWlsbGlvbiAodGhhdCBjb3VsZCB0aGVvcmV0aWNhbGx5IGJlCi0JICBsaWZ0ZWQgYnkgdXNpbmcgc29tZSBhZGRpdGlvbmFsIEFQSSkuCi0JICBNb3ZlZCBhcnJheSBhbGxvY2F0aW9uIHRvIHRoZSBoZWFwIG5vdy4KLQotMjAxMS0xMC0xNiAyMDoyNTo0MSArMDIwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIHBuZ2VuYzogZG9uJ3QgdW5jb25kaXRpb25hbGx5IGFsbG9jYXRlIDQwOTYgcG9pbnRlcnMgb24gdGhlIHN0YWNrCi0JICBJbnN0ZWFkIGFsbG9jYXRlIGFzIG1hbnkgYXMgbmVlZGVkIChvbiB0aGUgc3RhY2sgc3RpbGwpLgotCi0yMDExLTEwLTE2IDIwOjA1OjI4ICswMjAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nZW5jOiBlbnN1cmUgc2V0Y2FwcyB3YXMgY2FsbGVkIGJlZm9yZSBjaGFpbiBmdW5jdGlvbgotCSAgVGhpcyBpcyBuZWVkZWQgdG8gcHJvcGVybHkgZXJyb3Igb3V0IGZvciBlLmcuICJmYWtlc3JjICEgcG5nZW5jICEgZmFrZXNpbmsiLgotCi0yMDExLTEwLTE2IDE5OjQ0OjI3ICswMjAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nZW5jOiB2YWxpZGF0ZSBpbnB1dCBidWZmZXIgc2l6ZQotCSAgSnVzdCBmb3Igc2FmZXR5OyBvZiBjb3Vyc2Ugc3VjaCBtaXNtYXRjaCByZXByZXNlbnRzIGEgYnVnIGluIGFub3RoZXIgZWxlbWVudC4KLQotMjAxMS0xMC0xNiAxOTo0MToyOCArMDIwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSogZXh0L2xpYnBuZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5oOgotCSAgcG5nZW5jOiBtYWtlIHNldGNhcHMgbW9yZSByb2J1c3QsIHVzZSBnc3R2aWRlbyBmdW5jdGlvbnMKLQkgIEEgc2V0Y2FwcyBmdW5jdGlvbiBuZWVkcyB0byBhY3R1YWxseSB2ZXJpZnkgdGhlIGNhcHMgY2FyZWZ1bGx5LiBJbiB0aGlzIGNhc2UsCi0JICBpdCB3YXMgcG9zc2libGUgdG8gZS5nLiBsaW5rIGEgdmlkZW8gZGVjb2RlciB3aXRoIFlVVitSR0IgdGVtcGxhdGUgY2FwcyB0bwotCSAgcG5nZW5jLiAgVGhhdCB3b3VsZCBjYXVzZSBhIGNyYXNoIHdoZW4gdGhlIGRlY29kZXIgcHVzaGVzIGEgWVVWIGJ1ZmZlci4gU2FtZQotCSAgdGhpbmcgd2hlbiBwdXNoaW5nIGEgdmFsaWQgYnVmZmVyIHRoYXQgZXhjZWVkcyB0aGUgcmVzb2x1dGlvbiBsaW1pdHMuCi0JICBBbHNvLCBtaXNzaW5nIGZyYW1lcmF0ZSBjYXBzIGZpZWxkIHdvdWxkIGNhdXNlIGEgZ2xpYiBjcml0aWNhbCB3YXJuaW5nIGR1ZSB0bwotCSAgaW52YWxpZCBHVmFsdWUuIFRoaXMgZmFpbHMgaGFyZCBub3cuCi0KLTIwMTEtMTAtMjEgMTA6MDE6NDMgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSAgZWJtbDogc21hbGwgY29ycmVjdGlvbiB0byBwcmV2aW91cyBjb21taXQKLQkgIFNpZ25hbCBhIHNob3J0IHJlYWQgd2l0aCBVTkVYUEVDVEVELCBleGFjdGx5IGxpa2UgdGhlIHBlZWtfYnl0ZXMgZnVuY3Rpb24uCi0KLTIwMTEtMTAtMTkgMTM6MDk6NTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIGVibWw6IEZpeCBwdXNoLWJhc2VkIGJlaGF2aW91cgotCSAgVGhlICdwZWVrJyBtZXRob2Qgd2FzIGNvbXBsZXRlbHkgd3JvbmcgKCE/KQotCi0yMDExLTEwLTE4IDE4OjMxOjE3ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JICBwdWxzZTogR2V0IGNhcHMgY29ycmVjdGx5IG9uIHBhZCBibG9jawotCSAgSW5zdGVhZCBvZiBhbHdheXMgZ29pbmcgdXBzdHJlYW0sIHdlIHNob3VsZCBmaXJzdCBzZWUgaWYgYWxyZWFkeSBnb3QKLQkgIGNhcHMgZnJvbSBhIHNldGNhcHMoKSBjYWxsLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTI2MgotCi0yMDExLTEwLTE4IDEyOjI1OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSAgd2F2cGFja2VuYzogZG9uJ3QgdW5yZWYgYnVmZmVyIHdpdGggZ3N0X29iamVjdF91bnJlZigpCi0KLTIwMTEtMTAtMTggMTI6MDU6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogb25seSB1c2UgaXNfcGNtIGZvciAxLjAgb2YgcHVsc2VhdWRpbwotCi0yMDExLTEwLTE4IDExOjU4OjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IG9ubHkgZGlzYWJsZSB0cmlja21vZGVzIGZvciAhcGNtCi0JICBPbmx5IGRpc2FibGUgdHJpY2ttb2RlcyB3aGVuIHdlIGFyZSBub3QgZGVhbGluZyB3aXRoIHJhdyBQQ00gc2FtcGxlcy4KLQotMjAxMS0xMC0xNiAxNTozMjo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgIHZpZGVvY3JvcDogZml4IGNvbXBpbGF0aW9uCi0KLTIwMTEtMTAtMTYgMTU6MjY6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmMKLQotMjAxMS0xMC0xNCAxMDo1NjoxNiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogRml4IGEgbGVhawotCSAgQnVmZmVycyB3ZXJlbid0IGJlaW5nIHVucmVmJ2VkIGluIG9uZSBjYXNlIGluc2lkZSwgY2F1c2luZyBtZW1vcnkgdXNhZ2UKLQkgIHRvIGJsb3cgdXAuCi0KLTIwMTEtMTAtMTQgMDk6MTA6MDEgKzAyMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JICBzZXQgY29sb3VyIG1hc2tzIGZvciB2aWRlby94LXJhdy1yZ2IgaW4gcnRwdnJhd2RlcGF5Ci0KLTIwMTEtMTAtMTMgMDE6MDU6MTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiByZS1lbmFibGUgdmlkZW9jcm9wIHBsdWdpbgotCSAgQWxyZWFkeSBwb3J0ZWQgdG8gMC4xMQotCi0yMDExLTEwLTEzIDAxOjA1OjA0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5oOgotCSAgYXNwZWN0cmF0aW9jcm9wOiBQb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0xMyAwMDozOToyOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmg6Ci0JICB2aWRlb2Nyb3A6IFBvcnQgdG8gMC4xMQotCi0yMDExLTEwLTEyIDE3OjQzOjQ3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jOgotCSAgdGVzdHM6IGFzcGVjdHJhdGlvY3JvcDogUG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMTIgMDg6MjQ6MjggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWxwaGFjb2xvci5jOgotCSAgdGVzdHM6IGFscGhhY29sb3I6IFBvcnQgdG8gMC4xMQotCi0yMDExLTEwLTEzIDE3OjEyOjIzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogUHJvcGVybHkgcmVnaXN0ZXIgdHlwZQotCSAgSXQncyBhIHN1YmNsYXNzIG9mIEdzdEF1ZGlvRW5jb2RlciBhbmQgbm90IG9mIEdzdEVsZW1lbnQKLQotMjAxMS0xMC0xMyAxNjo1OTo1MCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogRml4IGluY29ycmVjdCBnc3RfYnVmZmVyX3JlcGxhY2UoKSBjYWxsCi0JICBUaGlzIGdvdCBleHBvc2VkIHdoZW4gZ3N0X2J1ZmZlcl9yZXBsYWNlKCkgd2FzIGNoYW5nZWQgZnJvbSBhIG1hY3JvIHRvIGEKLQkgIGZ1bmN0aW9uLgotCi0yMDExLTEwLTEzIDA5OjM0OjA0ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IEZpeCB3cm9uZyB1c2FnZSBvZiBnc3RfaXRlcmF0b3JfZmlsdGVyCi0JICBJdCB0YWtlcyBhIEdWYWx1ZSogYXMgdGhlIHVzZXJfZGF0YS4KLQkgIEFuZCBkb24ndCBmb3JnZXQgdG8gdW5yZWYgdGhlIGRlbXV4ZXIgYmVmb3JlIHJldHVybmluZy4KLQotMjAxMS0xMC0xMyAwOTowMjo0NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAgZml4IGNvbXBpbGUKLQotMjAxMS0xMC0xMyAwODo1ODowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jCi0JICBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYwotCi0yMDExLTEwLTEyIDA4OjA5OjIwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxlbmMuYzoKLQkgIHRlc3RzOiBjbW1sZW5jOiBQb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0xMiAwODowMjowOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6Ci0JICB0ZXN0czogY21tbGRlYzogUG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMTIgMDc6Mjk6MzAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlYXVkaW9zaW5rLmM6Ci0JICBwdWxzZWF1ZGlvc2luazogVXNlIG5ldyBHc3RJdGVyYXRvciBBUEkgY29ycmVjdGx5Ci0JICBHc3RJdGVyYXRvciBub3cgdXNlcyBHVmFsdWUsIHVzZSBpdCBjb3JyZWN0bHkuCi0KLTIwMTEtMTAtMTIgMTE6MjY6NTAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHJ0cHZyYXdwYXk6IE9ubHkgdXNlIDI0IExTQiBmb3IgZGVwdGg9MjQgUkdCIGNhcHMKLQkgIC4uLiBhbmQgaW5kZW50IHRoZSBtYXNrcyBmb3IgY2xhcml0eQotCi0yMDExLTEwLTExIDE0OjU4OjQzICswMjAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZml4IHNlZ21lbnQgaGFuZGxpbmcsIHNvIHdlIGFjdHVhbGx5IHVzZSBydW5uaW5nIHRpbWUKLQkgIGdzdF9tYXRyb3NrYV9tdXhfYmVzdF9wYWQgYWRqdXN0cyB0aGUgYnVmZmVyIHRpbWVzdGFtcCB0byBydW5uaW5nIHRpbWUgdXNpbmcKLQkgIHRoZSBzZWdtZW50IHN0b3JlZCBpbiB0aGUgcGFkJ3MgY29sbGVjdCBkYXRhLiBIb3dldmVyLCB0aGUgZXZlbnQgaGFuZGxlciBkaWRuJ3QKLQkgIHBhc3MgdGhlIG5ld3NlZ21lbnQgZXZlbnQgb24gdG8gY29sbGVjdHBhZHMnIGhhbmRsZXIsIHNvIHRoaXMgc2VnbWVudCB3YXMgbmV2ZXIKLQkgIHVwZGF0ZWQgYXQgYWxsLgotCSAgUmUtZml4ZXMgYnVnICM0MzI2MTIuCi0KLTIwMTEtMTAtMTAgMTk6MDE6MjMgKzAxMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJwYXkuYzoKLQkgIGdzdHJ0cGc3MjJwYXk6IENvbXBlbnNhdGUgZm9yIGNsb2NrcmF0ZSB2cy4gc2FtcGxlcmF0ZSBkaWZmZXJlbmNlCi0JICBUaGUgUlRQIGNsb2NrLXJhdGUgdXNlZCBmb3IgRzcyMiBpcyA4MDAwLCBldmVuIHRob3VnaCB0aGUgc2FtcGxlcmF0ZSBpcwotCSAgMTYwMDAuIENvbXBlbnNhdGUgZm9yIHRoaXMgYnkgcHJldGVuZGluZyBHNzIyIGhhcyA4IGJpdHMgcGVyIHNhbXBsZQotCSAgaW5zdGVhZCBvZiB0aGUgNCBiaXRzIGFzIGlmIGl0IHdlcmUgYSBjb2RlYyB0aGF0IHJhbiBhdCBoYWxmIHRoZSBzcGVlZCwKLQkgIGJ1dCB3aXRoIHR3aWNlIHRoZSBudW1iZXIgb2YgYml0cy4gRml4ZXMgIzY2MTM3NgotCi0yMDExLTA5LTI3IDE5OjI1OjUzICswMTAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogSW1wbGVtZW50IHVwc3RyZWFtIG5lZ290aWF0aW9uCi0JICBBZGQgdXBzdHJlYW0gbmVnb3RpYXRpb24gZm9yIGpwZWdkZWMuIEZpeGVzICM2NjAyNzUKLQotMjAxMS0xMC0xMCAxOTowMjo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IGRvbid0IGxlYWsgYXVkaW8gY29kZWNfZGF0YSBidWZmZXIKLQotMjAxMS0xMC0xMCAxNzo0MToxMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGFscGhhOiBEb24ndCB1c2Ugc3RhcnQoKSB2bWV0aG9kCi0JICBUaGUgb25seSB0aGluZyB3ZSdyZSBkb2luZyBpcyBpbml0aWFsaXppbmcgcGFyYW1ldGVycyAuLi4KLQkgICogd2hpY2ggd29uJ3Qgd29yayBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdXBzdHJlYW0vZG93bnN0cmVhbSBjYXBzCi0JICAqIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2hlbiA6OnNldF9jYXBzKCkgaXMgY2FsbGVkCi0KLTIwMTEtMTAtMTAgMTQ6MDg6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMC0xMCAxMzoyMjoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JICBpZDNkZW11eDogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMTAgMTM6MjA6MDQgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGFkZCBtaXNzaW5nIFBMVUdJTl9BU0VfTElCUyB0byBMREFERAotCi0yMDExLTEwLTEwIDEyOjU0OjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkgIGljeWRlbXV4OiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0xMCAxMjoyNzowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5jOgotCSAgYW5ub2RleDogcG9ydCB0byAwLjExCi0KLTIwMTEtMTAtMTAgMTE6NDg6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jCi0KLTIwMTEtMTAtMTAgMDA6MTg6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5oOgotCSAgcHVsc2U6IHBvcnQgcHVsc2V1dGlsIHRvIDAuMTEKLQotMjAxMS0xMC0wOSAyMToxNzoyNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkgIHB1bHNlYXVkaW9zaW5rOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0xMC0wOSAxODo1ODoyOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IEZpeGluZyBnZXRjYXBzIGZ1bmN0aW9uCi0JICBVcGRhdGUgZ2V0Y2FwcyBmdW5jdGlvbiB0byAwLjExIEFQSQotCi0yMDExLTEwLTA5IDIxOjMxOjI3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuaDoKLQkgIHNwZWV4ZW5jOiBvbmx5IHB1c2ggaGVhZGVyIGJ1ZmZlcnMgZm9sbG93aW5nIGluaXRpYWwgZXZlbnRzCi0KLTIwMTEtMTAtMDkgMTY6Mjk6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0xMC0wOSAxNjoyNDozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmM6Ci0JICBxdGRlbXV4OiB1cGRhdGUgZm9yIF9fZ3N0X2RlYnVnX21pbiBuYW1lIGNoYW5nZQotCi0yMDExLTEwLTA5IDExOjE4OjE4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9pc29tcDQvYXRvbXNyZWNvdmVyeS5jOgotCSAgcXRtdXg6IEZpeCBtZW1vcnkgbGVhayBvbiBhdG9tcyByZWNvdmVyeSBmdW5jdGlvbgotCSAgUmVtZW1iZXIgdG8gZnJlZSB0aGUgZnR5cCBkYXRhIGFmdGVyIHdyaXRpbmcgaXQgdG8gYSBmaWxlLgotCSAgRml4ZXMgIzY2MDk2OQotCi0yMDExLTEwLTA2IDEyOjI2OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcmVwb3J0IG5ldyBiaXRzCi0KLTIwMTEtMTAtMDYgMTI6MjM6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYwotCSAgZ3N0L2lzb21wNC9hdG9tcy5jCi0JICBnc3QvaXNvbXA0L2dzdHF0bXV4LmMKLQotMjAxMS0wOS0yMSAxODo0NTo0MiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBpbXByb3ZlIHNlZ21lbnQgaGFuZGxpbmcgd2l0aCBub24temVybyBzdGFydGluZyB0aW1lc3RhbXAKLQkgIC4uLiBhcyB3ZWxsIGFzIHJlbGF0ZWQgaXRlbXMsIHN1Y2ggYXMgc2Vla2luZyBhbmQgcG9zaXRpb24gcmVwb3J0aW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTgwOAotCi0yMDExLTA5LTI5IDE4OjQxOjUzICswNDAwICBTdGFzIFNlcmdlZXYgPHN0c3BAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgdjRsMiwgeGltYWdlc3JjOiBmaXggc29tZSBwcmludGYgZm9ybWF0IGNvbXBpbGVyIHdhcm5pbmdzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYwMTUwCi0KLTIwMTEtMDktMzAgMTI6NDI6MjIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdGVzdHM6IHF0bXV4OiBSZWZhY3RvciBiaXRyYXRlIGNoZWNrIHRlc3QKLQkgIFJlZmFjdG9yIGJpdHJhdGUgY2hlY2sgdGVzdCB0byBhY2NvbW9kYXRlIG11bHRpcGxlIHRlc3RzCi0JICBmb3IgYml0cmF0ZQotCi0yMDExLTA5LTMwIDEzOjAyOjMxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSAgcXRtdXg6IHVwZGF0ZSBlc2RzIGF0b20gdW5kZXIgd2F2ZSBhdG9tIGZvciBhYWMgYml0cmF0ZXMKLQkgIEFBQyBpbiBtb3YgZm9ybWF0IHB1dHMgYW4gRVNEUyBhdG9tIGluc2lkZSBvZiBhIFdBVkUgYXRvbSBpbgotCSAgU1RTRCBhdG9tLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYml0cmF0ZSBvbiB0aGlzIEVTRFMuIFRoaXMgcGF0Y2gKLQkgIGZpeGVzIGl0LgotCi0yMDExLTA5LTMwIDEyOjQxOjUyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9mb3VyY2MuaDoKLQkgIHF0bXV4OiBBbHNvIHVwZGF0ZSBidHJ0IGF0b20KLQkgIFdoZW4gcmV3cml0aW5nIGJpdHJhdGVzLCBhbHNvIHVwZGF0ZSB0aGUgYnRydCBhdG9tIHVuZGVyIHN0c2QKLQotMjAxMS0wOS0zMCAxMDo1NTo1MyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICB0ZXN0czogcXRtdXg6IGFkZCB0ZXN0cyBmb3IgYml0cmF0ZSBhdmVyYWdlIGNhbGN1bGF0aW9uCi0JICBBZGRzIHRlc3RzIHRvIG1ha2Ugc3VyZSBxdG11eC9tcDRtdXggc2V0cyBhdmVyYWdlIGJpdHJhdGUKLQkgIGNvcnJlY3RseQotCi0yMDExLTA5LTI4IDExOjQxOjQ5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSAgcXRtdXg6IENhbGN1bGF0ZSBhdmVyYWdlIGJpdHJhdGUgZm9yIHN0cmVhbXMKLQkgIENhbGN1bGF0ZSBhbmQgdXNlIGF2ZXJhZ2UgYml0cmF0ZSBmb3Igc3RyZWFtcyB3aGVuIG5vCi0JICBiaXRyYXRlIHRhZyB3YXMgcmVjZWl2ZWQKLQotMjAxMS0wOS0yOCAxMDo0MToxNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBBdm9pZCBhIGJ1ZmZlciBtZXRhZGF0YSBjb3B5IGlmIHBvc3NpYmxlCi0JICBJZiBmaXJzdF90cyBpcyAwIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3VidHJhY3QsIHNvIHdlIG1pZ2h0Ci0JICBza2lwIHNvbWUgY29weWluZyB0byBtYWtlIHRoZSBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUuCi0KLTIwMTEtMDktMjkgMjM6MjE6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4ZW5jOiBpbml0aWFsaXNlIHZhcmlhYmxlIGJlZm9yZSBhZGRpbmcgdG8gaXQKLQotMjAxMS0wOS0yOSAxNzoyMToyMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JICBzcGVleGRlYzogcG9ydCB0byBhdWRpb2RlY29kZXIKLQotMjAxMS0wOS0yOSAxNjozMzowMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgc3BlZXhlbmM6IGNsZWFuIHVwIHNvbWUgdW51c2VkIHJlbW5hbnRzCi0KLTIwMTEtMDktMjkgMTc6MzI6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc3BlZXgvTWFrZWZpbGUuYW06Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgc3BlZXhlbmM6IHBvcnQgdG8gYXVkaW9lbmNvZGVyCi0KLTIwMTEtMDktMjggMTk6MTA6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBnZXQgcmlkIG9mIGdyYW51bGVwb3MgaGFuZGxpbmcKLQkgIExlYXZlIHRoYXQgdG8gdGhlIHBhcnNlciBvciBkZW11eGVyLiBUaGVyZSdzIHN0aWxsIHNvbWUKLQkgIGNvZGUgZm9yIG9wZXJhdGluZyBpbiBERUZBVUxUIChzYW1wbGVzKSBmb3JtYXQsIGJ1dCB0aGF0Ci0JICB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIuCi0KLTIwMTEtMDktMjggMTg6MzI6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBmbGFjZGVjOiBnZXQgcmlkIG9mIHB1bGwtbW9kZSBzdXBwb3J0IGFuZCBmb2N1cyBvbiBiZWluZyBhIGRlY29kZXIKLQkgIExlYXZlIGFsbCB0aGUgb3RoZXIgc3R1ZmYgdG8gZmxhY3BhcnNlLgotCi0yMDExLTA5LTI4IDE3OjI5OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAgZmxhYywganBlZzogZml4IGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMS0wOS0yOCAxNzo0MDowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSAgZmxhYzogcG9ydCB0byAwLjExCi0KLTIwMTEtMDktMjggMTc6Mzk6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYwotCi0yMDExLTA5LTI4IDE2OjE4OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDktMjggMTY6MDk6NTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9NYWtlZmlsZS5hbToKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkgIGZsYWNlbmM6IHBvcnQgdG8gYXVkaW9lbmNvZGVyCi0KLTIwMTEtMDktMjcgMTU6NTk6MjQgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FkZW11eDogZW5zdXJlIG1pbmltYWwgYWxpZ25tZW50IGZvciBhdWRpby94LXJhdy0qIGJ1ZmZlcnMKLQkgIFNpbmNlIG1hdHJvc2thZGVtdXggd2lsbCBhdHRlbXB0IHRvIHB1c2ggdW5hbGlnbmVkIGJ1ZmZlcnMsCi0JICBkb3duc3RyZWFtIG1pZ2h0IGhhdmUgdHJvdWJsZSB3aXRoIHRob3NlLCBlc3BlY2lhbGx5IGlmIGRvd25zdHJlYW0KLQkgIHVzZXMgT1JDLCBzdWNoIGFzIGF1ZGlvY29udmVydC4KLQkgIEVuc3VyZSB3ZSBwdXNoIGJ1ZmZlcnMgYWxpZ25lZCB0byB0aGUgYmFzaWMgdHlwZSBhdCBsZWFzdCBmb3IKLQkgIHRob3NlIHJhdyBidWZmZXJzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTc5OAotCi0yMDExLTA5LTI4IDEyOjQ0OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBjb21tb24KLQkgIGV4dC9wdWxzZS9wdWxzZXNpbmsuYwotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmMKLQkgIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYwotCSAgZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYwotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmMKLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYwotCSAgc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYwotCi0yMDExLTA5LTI4IDAwOjEwOjA5ICswMzAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KLQotCSogZ3N0L2dvb20yazEvZ29vbV9jb3JlLmM6Ci0JICBnb29tMmsxOiBGaXggY29tcGlsZXIgd2FybmluZ3Mgb24gNjQgYml0IG1pbmd3LXc2NAotCSAgRml4ZXMgYnVnICM2NjAyOTQuCi0KLTIwMTEtMDktMjUgMTU6MTM6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkqIGV4dC9zb3VwL2dzdHNvdXAuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmg6Ci0JICBzb3VwOiByZW5hbWUgc291cGh0dHBzaW5rIHRvIHNvdXBodHRwY2xpZW50c2luawotCSAgVG8gYXZvaWQgY29uZnVzaW9uLCBhbmQgYmVjYXVzZSB3ZSBtaWdodCB3YW50IGEgc2VydmVyCi0JICBzaW5rIGF0IHNvbWUgcG9pbnQgdG9vLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1OTk0NwotCi0yMDExLTA5LTIzIDE2OjM5OjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNpbmsuaDoKLQkgIHNvdXBodHRwc2luazogZG9uJ3QgY3JlYXRlIHVudXNlZCBzZWNvbmQgc2luayBwYWQgb2JqZWN0Ci0JICBUaGUgYmFzZSBjbGFzcyB3aWxsIGNyZWF0ZSB0aGUgc2luayBwYWQuCi0KLTIwMTEtMDktMjMgMTU6MzY6MzYgKzAyMDAgIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAZ21haWwuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogY29ycmVjdGx5IGNoZWNrIGZvciBhYzMvZS1hYzMgc3dpdGNoCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU5OTQzCi0KLTIwMTEtMDktMjEgMTQ6MDE6MjAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIFVwZGF0ZSBjb21tb24gdG8gMC4xMSBicmFuY2gKLQotMjAxMS0wOS0yMCAxMzozODo1MyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IGltcHJvdmUgZG93bnN0cmVhbSBmbG93IHJldHVybiBmZWVkYmFjayB0byB1cHN0cmVhbQotCSAgLi4uIGFsdGhvdWdoIGJhc2VydHBkZXBheSBkb2VzIG5vdCByZWFsbHkgbWFrZSBpdCBlYXN5L3Bvc3NpYmxlIHRvIGRvIHNvCi0JICBhbGwgdGhlIHdheS4KLQotMjAxMS0wOS0yMCAxMjoxMTo0NyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5oOgotCSAgeGltYWdlc3JjOiBhZGQgeGlkIGFuZCB4bmFtZSBwcm9wZXJ0aWVzIHRvIGFsbG93IGNhcHR1cmluZyBhIHBhcnRpY3VsYXIgd2luZG93Ci0JICBBIHBhcnRpY3VsYXIgd2luZG93IG1heSBiZSBzZWxlY3RlZCB1c2luZyB0aGUgbmV3IHhpZCAoWC1XaW5kb3cKLQkgIFhJRCwgZWcgYSBwb2ludGVyKSBhbmQgeG5hbWUgKHdpbmRvdyB0aXRsZSkgcHJvcGVydGllcy4gSWYgYm90aAotCSAgYXJlIHNwZWNpZmllZCwgdGhlIFhJRCBpcyB1c2VkIGluIHByZWZlcmVuY2UsIGZhbGxpbmcgYmFjayB0bwotCSAgeG5hbWUgaWYgbm90IGZvdW5kLgotCSAgRGVmYXVsdCAoaWYgbm9uZSBvZiB4aWQgYW5kIHhuYW1lIGFyZSBzcGVjaWZpZWQsIG9yIGlmIG5vIHN1Y2gKLQkgIHdpbmRvdyBpcyBmb3VuZCkgaXMgdG8gY2FwdHVyZSB0aGUgcm9vdCB3aW5kb3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2OTMyCi0KLTIwMTEtMDgtMDIgMTc6Mzk6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdGVzdHM6IGFkZCB1bml0IHRlc3QgdG8gbWFrZSBzdXJlIGVuY29kZWJpbiBwaWNrcyBtcDRtdXggZm9yIHZhcmlhbnQ9aXNvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUxNDk2Ci0KLTIwMTEtMDktMTkgMTI6MTU6MTEgKzAyMDAgIEhhIE5ndXllbiA8aGFuZ3V5dHZAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogRml4IGEgbGVha2VkIGNsb2NrIGZvciBlYWNoIGJ1ZmZlcmluZyBtZXNzYWdlCi0JICBGaXhlcyBidWcgIzY1OTIzNy4KLQotMjAxMS0wOS0xOSAxMjoxMTozMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogcGFyc2UgZW1iZWRkZWQgSUQzMiB0YWdzCi0KLTIwMTEtMDktMDIgMTM6NDE6NDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNlc3Npb246IGF2b2lkIHNvdXJjZSBwcmVtYXR1cmUgdGltaW5nIG91dAotCSAgVXNlIHNsaWdodGx5IGFkanVzdGVkIHNlbmRlciBpbnRlcnZhbCB0byBkZXRlcm1pbmUgc2VuZGVyIHRpbWVvdXQgcmF0aGVyIHRoYW4KLQkgIG91ciBvd24gc2VuZGVyIHNpZGUgaW50ZXJ2YWwgKHdoaWNoIG1heSBoYXZlIGJlZW4gZm9yY2VkIHNtYWxsKS4KLQotMjAxMS0wOC0yNSAxMjo0MDo1MiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IGF2b2lkIHRpbWluZyBvdXQgc291cmNlIHRvbyBxdWlja2x5Ci0JICAuLi4gZm9sbG93aW5nIGEgUEFVU0UvUExBWSBjeWNsZSwgcGFydGljdWxhcmx5IGFwcGxpY2FibGUgd2hlbiBvcGVyYXRpbmcKLQkgIHdpdGggYSBzaG9ydCBSVENQIGludGVydmFsIChwb3NzaWJseSBmb3JjZWQgc28gc2VydmVyLXNpZGUpLgotCi0yMDExLTA4LTI0IDE0OjM3OjUyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlci9ydHBiaW46IHJlbGF4IGRyb3BwaW5nIHJ0Y3AgcGFja2V0cwotCSAgLi4uIHRvIGF0IGxlYXN0IGhhdmluZyBpdCB0cmlnZ2VyIGEvdiBzeW5jaHJvbml6YXRpb24sIHBvc3NpYmx5IHdpdGhvdXQKLQkgIHVzaW5nIHByb3ZpZGVkIHZhbHVlcyB3aGljaCBhcmUgc3RpbGwgbm90IGNvbnNpZGVyZWQgc2FuZQotCSAgKGFzIHByZXZpb3VzbHkgZHJvcHBlZCkuCi0KLTIwMTEtMDgtMjQgMTQ6MzQ6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc29tZSBtb3JlIHJlc2V0IHdoZW4gY2xlYXJpbmcgcHQgbWFwCi0JICAuLi4gd2hpY2ggaW4gcGFydGljdWxhciBjYXRlcnMgZm9yIHNvbWUgbW9yZSByZXNldCBmb2xsb3dpbmcgYSBwb3NzaWJsZQotCSAgcnRzcCBQTEFZLgotCi0yMDExLTA4LTIxIDIxOjU4OjM4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG8gbm90IHNldCBlbGVtZW50cyB0byBQTEFZSU5HIHdoZW4gZG9pbmcgc2VlayBpbiBQQVVTRUQKLQotMjAxMS0wOS0wMSAxNDo0Nzo0OCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBvbmx5IHJlc2V0IHNrZXcgb24gZ2FwIGlmIGlucHV0IHRzIGF2YWlsYWJsZQotCi0yMDExLTA4LTE4IDE0OjEyOjIxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGNoZWNrIHNvbWUgbW9yZSBmb3IgcG9zc2libGUgcnRwIHRpbWVzdGFtcCBkaXNjb250aW51aXR5Ci0JICAuLi4gd2hlbiBvcGVyYXRpbmcgaW4gbm9uIHNsYXZlIG1vZGUsIGFuZCByZXNldCBpZiBkZXRlY3RlZC4KLQkgIFRoaXMgc2hvdWxkIGF2b2lkIHNvbWUgKGxhcmdlKSBib2d1cyBvdXRnb2luZyB0aW1lc3RhbXAgZHVlIHRvIGp1bXBzCi0JICBpbiBydHAgdGltZSwgYXMgcmVzdWx0IG9mIFBBVVNFL1BMQVkgb3Igc2VlayBvciAuLi4KLQotMjAxMS0wOC0wOCAxMjo0ODo1MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHN3aXRjaCB0byBydHAgdGltZSBiYXNlZCBzeW5jaW5nIHdoZW4gZ3Vlc3NlZCBhcHByb3ByaWF0ZQotCi0yMDExLTA4LTA4IDEyOjE1OjIwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIHJ0cGJpbjogYWx0ZXJuYXRpdmUgaW50ZXItc3RyZWFtIHN5bmNpbmcgbWV0aG9kcwotCSAgLi4uIGF0IGxlYXN0IGlmIG5vdCBzeW5jaW5nIHRvIE5QVCB0aW1lOgotCSAgKiBlaXRoZXIgc3luYyB1c2luZyBSVENQIFNSIGRhdGEgKGFzIGN1cnJlbnRseSkKLQkgICogb25seSBwZXJmb3JtIHRoZSBhYm92ZSBvbmNlIHVzaW5nIGluaXRpYWwgUlRDUCBTUiBwYWNrZXRzCi0JICAqIGRpc2NhcmQgUlRDUCBhbmQgc3luYyBieSBlcXVhdGluZyBwcm92aWRlZCBzdHJlYW0ncyBjbG9jay1iYXNlIHJ0cHRpbWUsCi0JICBhcyBwcm92aWRlZCBieSBqaXR0ZXJidWZmZXIgKHR5cGljYWxseSBvYnRhaW5lZCBmcm9tIFJUUC1JbmZvIGluIFJUU1ApLgotCi0yMDExLTA4LTA4IDEyOjExOjI0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGFsc28gcHJvdmlkZSBjbG9jay1iYXNlIHRvIHN5bmMgc2lnbmFsCi0KLTIwMTEtMDgtMDggMTI6MDk6NDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgcnRwYmluOiBhbGxvdyBjb25maWd1cmFibGUgcnRjcCBzdHJlYW0gc3luY2luZyBpbnRlcnZhbAotCSAgLi4uIHJhdGhlciB0aGFuIG5lY2Vzc2FyaWx5IHN5bmNpbmcgYXQgZWFjaCBSVENQIFNSLgotCi0yMDExLTA4LTAxIDA4OjM1OjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogdHJpZ2dlciByZWNvbnNpZGVyYXRpb24gaWYgcnRjcCBpbnRlcnZhbCBzZXQKLQotMjAxMS0wOC0wMSAwODozMjoyNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNvbmZpZ3VyZSBydGNwIGludGVydmFsIGlmIHByb3ZpZGVkCi0JICAuLi4gaW4gUExBWSByZXNwb25zZS4KLQotMjAxMS0wOS0xNiAxNjo1MzoyMiArMDMwMCAgTGFzc2UgTGF1a2thbmVuIDxsYXNzZS5sYXVra2FuZW5AZGlnaWEuY29tPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBpc29tcDQ6IEZpeCBhbGxvd2luZyB6ZXJvIGR1cmF0aW9uIHRyYWNrcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzQ4NgotCi0yMDExLTA5LTA1IDEwOjExOjE4ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5jOgotCSAgdWRwc3JjOiBlcnJvciBvdXQgd2hlbiBubyBwcm90b2NvbCBpcyBzcGVjaWZpZWQgaW4gdGhlIHVyaQotCSAgSXQgaXMgY2VydGFpbmx5IGJldHRlciB0aGFuIHRvIGNyYXNoLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODE3OAotCi0yMDExLTA5LTE5IDA5OjM3OjU4ICswMjAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleGVuYzogZG8gbm90IHVzZSBpbnZhbGlkIGJ1ZmZlciB0aW1lc3RhbXBzCi0KLTIwMTEtMDMtMjkgMTI6MDk6MTggKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvTWFrZWZpbGUuYW06Ci0JKiBleHQvcHVsc2UvcGx1Z2luLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VhdWRpb3NpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkgIHB1bHNlOiBOZXcgcHVsc2VhdWRpb3NpbmsgZWxlbWVudCB0byBoYW5kbGUgZm9ybWF0IGNoYW5nZXMKLQkgIFRoaXMgaW50cm9kdWNlcyBhIG5ldyBiaW4gd2hpY2ggd3JhcHMgYXJvdW5kIHB1bHNlc2luayBhbmQgZGVwZW5kaW5nIG9uCi0JICB0aGUgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIHNpbmssIHBsdWdzIGluL291dCBhIGRlY29kZWJpbjIgYXMKLQkgIHJlcXVpcmVkLiBUaGlzIGFsbG93cyB1c2VycyB0byBzd2l0Y2ggc2lua3Mgb24gdGhlIHN0cmVhbSBhbmQgYWRhcHRzCi0JICBhY2NvcmRpbmdseSAoZm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3YXRjaCBhIG1vdmllIGluIHBhc3N0aHJvdWdoIG1vZGUgb24KLQkgIHlvdXIgcmVjZWl2ZXIgd2hpY2ggc3VwcG9ydHMgQUMzIGRlY29kZSwgdGhlbiBwbHVnIG91dCBhbmQgc3dpdGNoIHRvIGEKLQkgIG5vbi1kaWdpdGFsIHByb2ZpbGUgdG8gY29udGludWUgdW5pbnRlcnJ1cHRlZCBvbiBhbmFsb2cgb3V0cHV0KS4KLQkgIFRoZSBiaW4gaXMgcmVxdWlyZWQgYmVjYXVzZSBkb2luZyB0aGUgc2FtZSB3aXRoIHBsYXliaW4yL3BsYXlzaW5rIHdpbGwKLQkgIHJlcXVpcmUgQVBJIGNoYW5nZXMgdGhhdCBjYW5ub3QgYmUgbWFkZSBpbiAwLjEwLiBXaXRoIDAuMTEvMS4wLCB3ZQotCSAgc2hvdWxkIGJlIGFibGUgdG8gYXNrIGZvciB1cHN0cmVhbSBjYXBzIHJlbmVnb3RpYXRpb24gdG8gZGVhbCB3aXRoIGFsbAotCSAgdGhpcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTcxNzkKLQotMjAxMS0wOS0xNiAxNTowMzoyMyArMDIwMCAgQnJhbmtvIFN1YmFzaWMgPGJyYW5rb0BheGlzLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBBdm9pZCBzZW5kaW5nIEVPUyB3aGVuIGluIHBhdXNlZCBzdGF0ZQotCSAgQ2hhbmdlZCB0aGUgZWJtbCByZWFkZXIncyBnc3RfZWJtbF9wZWVrX2lkX2xlbmd0aCgpIGZ1bmN0aW9uIHNvCi0JICB0aGF0IGl0IHJldHVybnMgdGhlIGFjdHVhbCByZWFzb24gZm9yIHdoeSB0aGUgcGVlayBmYWlsZWQsIGluc3RlYWQKLQkgIG9mIChhbG1vc3QpIGFsd2F5cyByZXR1cm5pbmcgR1NUX0ZMT1dfVU5FWFBFQ1RFRC4gVGhpcyBwcmV2ZW50cwotCSAgdGhlIHB1bGxpbmcgdGFzayBmcm9tIHNlbmRpbmcgRU9TIHdoZW4gZG9pbmcgYSBmbHVzaGluZyBzZWVrLgotCi0yMDExLTA5LTE1IDE1OjUzOjQ3ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBmaXggc3R1dHRlcmluZyBBL1YKLQkgIFNvbWVvbmUgZ290IGhhZCBieSBpbXBsaWNpdCBwcm9tb3Rpb24gdG8gdW5zaWduZWQgaW4gb3BzIHdpdGgKLQkgIGEgc2lnbmVkIGFuZCBhbiB1bnNpZ25lZCB2YWx1ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTkxNTMKLQotMjAxMS0wOS0xNCAxNjozNzoxMiArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdnNlZWsuYzoKLQkgIG5hdnNlZWs6IHRvZ2dsZSBwYXVzZS9wbGF5IG9uIHNwYWNlIGJhcgotCSAgQSB1c2VmdWwgdGhpbmcgdG8gaGF2ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTkwNjUKLQotMjAxMS0wOS0xNCAxNDo0NjowMCArMDIwMCAgRGF2aWQgU3ZlbnNzb24gRm9ycyA8ZGF2aWRzZkBheGlzLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IGNvbmZpZ3VyYWJsZSB0aW1lc3RhbXAgZ2FwIGhhbmRsaW5nCi0JICBtYXRyb3NrYWRlbXV4IHBlcmZvcm1zIHNlZ21lbnQgdHJpY2tzIHRvIHNraXAgZ2FwcyBpbiBzdHJlYW1zLAotCSAgbm90YWJseSBhdCBzdGFydCBmb3Igbm9uIDAgYmFzZWQgZmlsZXMuICBUaGVyZSBtYXkgaG93ZXZlciBiZQotCSAgY2FzZXMgd2hlbiBmdWxsIHByZXNlbnRhdGlvbiAoaW5jbHVkaW5nIGludGVybWVkaWF0ZSBnYXBzKSBpcwotCSAgZGVzaXJlZCwgc28gYSBwcm9wZXJ0eSBhbGxvd3MgdG8gY29uZmlndXJlIGFzIG9mIHdoaWNoIGdhcAotCSAgdG8gYWN0IChvciBub3QgYXQgYWxsKS4KLQkgIEFQSTogR3N0TWF0cm9za2FEZW11eDo6bWF4LWdhcC10aW1lCi0JICBGaXhlcyAjNjU5MDA5LgotCi0yMDExLTA5LTEyIDA5OjIxOjQ3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmM6Ci0JICB0ZXN0czogZmx2bXV4OiBGaXggZmx2bXV4J3MgdGVzdHMgYWZ0ZXIgZml4IGZvciByZXF1ZXN0IHBhZHMgaGFuZGxpbmcKLQkgIE5vdyB0aGF0IGZsdm11eCBkb2Vzbid0IHJlbGVhc2UgaXRzIHJlcXVlc3QgcGFkcyBvbiBQQVVTRUQtPlJFQURZIHRoZQotCSAgdGVzdCBkb2Vzbid0IG5lZWQgdG8gcmUtcmVxdWVzdCB0aGVtIGZvciBldmVyeSByZXVzZSB0ZXN0IHN0YXJ0LgotCi0yMDExLTA5LTA5IDA5OjEyOjU2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEZpeCBjdHRzIGdlbmVyYXRpb24gZm9yIHN0cmVhbXMgdGhhdCBkb24ndCBzdGFydCBhdCAwIHRpbWVzdGFtcHMKLQkgIFN1YnRyYWN0IHRoZSBmaXJzdCB0aW1lc3RhbXAgb2YgYSBzdHJlYW0gZnJvbSBhbGwgaW5wdXQgYnVmZmVycyB0bwotCSAgZ2V0IDAtYmFzZWQgdGltZXN0YW1wcyBmb3IgY3JlYXRpbmcgYSBzYW5lIGN0dHMgdGFibGUuIFdpdGhvdXQgdGhpcwotCSAgcGF0Y2ggdGhlIGN0dHMgY291bGQgaGF2ZSBsYXJnZXIgdmFsdWVzIHRoYW4gbmVlZGVkLCBjYXVzaW5nIHRoZQotCSAgcGxheWJhY2sgdG8gaGF2ZSBhIGRlbGF5IGF0IHN0YXJ0dXAuCi0JICBBcyB0aGUgZmlyc3QgdGltZXN0YW1wIGlzIG9ubHkgZm91bmQgYWZ0ZXIgYSBmZXcgYnVmZmVycyBhcmUgcXVldWVkCi0JICAoZHVlIHRvIHBvc3NpYmxlIHJlb3JkZXJlZCBidWZmZXJzKSwgb25jZSB3ZSBmaW5kIHRoZSBmaXJzdCB0aW1lc3RhbXAKLQkgIHdlIHN1YnRyYWN0IGl0IGZyb20gYWxsIGJ1ZmZlcnMgb24gdGhlIHF1ZXVlLCBmcm9tIHRoYXQgcG9pbnQgb24sCi0JICBhbGwgYnVmZmVycyBoYXZlIHRoZWlyIHRpbWVzdGFtcHMgc3VidHJhY3Qgd2hlbiB0aGV5IGFyZSBjb2xsZWN0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NjU5Ci0KLTIwMTEtMDktMTIgMDc6NTU6MTkgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBkb24ndCByZWxlYXNlIHJlcXVlc3QgcGFkcyBnb2luZyBQQVVTRUQtPlJFQURZCi0JICBEb24ndCByZWxlYXNlIHJlcXVlc3QgcGFkcyBidXQganVzdCByZXNldCB0aGVtLiBUaGlzIG1ha2VzIHBpcGVsaW5lcyB1c2luZwotCSAgZmx2bXV4IHJldXNhYmxlLgotCi0yMDExLTA5LTA5IDEyOjM1OjUwICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSAgYWMzcGFyc2U6IHVzZSBic2lkIDkgYW5kIDEwIHRvIGNvbnRyb2wgc2FtcGxlIHJhdGUKLQkgIFNlZSBodHRwOi8vbWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9jb2RlY2lkL2luZGV4Lmh0bWwKLQkgIFRoZSBzcGVjIGlzIHNpbGVudCBhYm91dCB0aGlzIHRob3VnaC4uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODU0NgotCi0yMDExLTA5LTA3IDE0OjEzOjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZW5zdXJlIHNvbWUgaW5pdGlhbCBzdGF0ZSB2YXJpYWJsZSBzZXR1cAotCSAgLi4uIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBza2lwcGVkIGlmIHRoZSBQTEFZIGNvbW1hbmQgaXMgaXNzdWVkIGJlZm9yZQotCSAgdGhlIE9QRU4gY29tbWFuZCBoYWQgYSBjaGFuY2UgdG8gYWN0dWFsbHkgYmUgYWN0ZWQgdXBvbi4KLQkgIEZpeGVzICM2NTczNzYuCi0KLTIwMTEtMDktMDggMTU6MDI6MDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHR3ZWFrIGdhcCBoYW5kbGluZwotCSAgLi4uIHNvIGFzIHRvIGF2b2lkIGJ1ZmZlcnMgYmVmb3JlIGFuZCBhZnRlciBnYXAgdG8gaGF2ZSBpZGVudGljYWwgcnVubmluZyB0aW1lLgotCi0yMDExLTA5LTA4IDEzOjI4OjI0ICswMjAwICBHdWlsbGF1bWUgRGVzbW90dGVzIDxndWlsbGF1bWUuZGVzbW90dGVzQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogdXNlIEdTVF9SRVNPVVJDRV9FUlJPUl9CVVNZIGlmIHY0bDJfaW9jdGwgZmFpbHMgd2l0aCBFQlVTWQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODU0MwotCi0yMDExLTA5LTA3IDA4OjU0OjE3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHJlbW92ZSBvbmUgR19VTkxJS0VMWSBmb3IgdXNlciBwcm9wZXJ0eQotCSAgVXNpbmcgR19VTkxJS0VMWSBvbiB1c2VyIHByb3BlcnRpZXMgaXNuJ3QgbmljZSwgc3BlY2lhbGx5IHdoZW4KLQkgIHRoYXQgaXMgdGhlIGRlZmF1bHQgb3B0aW9uLgotCi0yMDExLTAzLTE1IDExOjAzOjUzICswMTAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBoYW5kbGUgR3N0Rm9yY2VLZXlVbml0IGV2ZW50Ci0JICAuLi4gYnkgc3RhcnRpbmcgYSBuZXcgY2x1c3RlciBhZnRlciBmb3J3YXJkaW5nIGV2ZW50LgotCSAgRml4ZXMgIzY0NDE1NC4KLQotMjAxMS0wOS0wNyAxNDoyNzozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxlbmMuYzoKLQkgIGNtbWw6IFVzZSBjb21wbGV0ZSBjbW1sIGNhcHMgaW4gdGhlIHVuaXQgdGVzdAotCi0yMDExLTA5LTA3IDE0OjI2OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkgIHF0bXV4OiBVc2UgY29tcGxldGUgTVBFRyBjYXBzIGluIHRoZSB1bml0IHRlc3QKLQotMjAxMS0wOS0wNyAxNDoxODo1OCArMDIwMCAgU3RlZmFuIFNhdWVyIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgZG9jczogY2xlYW51cCBtYWtlZmlsZXMKLQkgIFJlbW92ZSBjb21tZW50ZWQgb3V0IHBhcnRzIHRoYXQgd2UgZG9uJ3QgbmVlZC4gUmVtb3ZlICJ0aGUgd2luZ28gYWRkaXRpb24iIC0gbm8KLQkgIHNvIHVzZWZ1bCBhZnRlciBhbGwuIE5hcnJvdyBkb3duIGZpbGUtZ2xvYnMgZm9yIHBsdWdpbiBkb2NzLgotCi0yMDExLTA4LTI5IDE0OjEyOjIyICswMjAwICBLb25zdGFudGluIE1pbGxlciA8a29uc3RhbnRpbi5taWxsZXJAZ21haWwuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IERvbid0IGhhbmRsZSBIVFRQIHJlc3BvbnNlIDQwNyBhcyBlcnJvciBpZiBwcm94eSBhdXRoZW50aWNhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZQotCSAgRml4ZXMgYnVnICM2NTc0MjIuCi0KLTIwMTEtMDktMDcgMTI6MTE6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogQWRkIENvbnZlcnRlciB0byB0aGUgY2xhc3NpZmljYXRpb24gYmVjYXVzZSBpdCBjYW4gY29udmVydCBiZXR3ZWVuIGRpZmZlcmVudCBhbGlnbm1lbnRzCi0JICBUaGlzIGFsbG93cyBkZWNvZGViaW4yIHRvIGxldCBpdCBuZWdvdGlhdGUgcHJvcGVybHkuCi0KLTIwMTEtMDktMDcgMTI6MTA6NDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBJbXByb3ZlIHNyYyB0ZW1wbGF0ZSBjYXBzCi0JICBSZW1vdmUgdGhlIHBhcnNlZC9mcmFtZWQgZmllbGRzIGFuZCBhZGQgYWxsIGZpZWxkcyB0byB0aGUgdGVtcGxhdGUKLQkgIGNhcHMgdGhhdCBhbHdheXMgZXhpc3QuCi0KLTIwMTEtMDktMDYgMTU6NTk6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmg6Ci0JICBhYWNwYXJzZTogcGFyc2UgY29kZWNfZGF0YSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGZyYW1lCi0JICBGaXhlcyAjNjU2NzM0LgotCi0yMDExLTA5LTA2IDIxOjI0OjQ2ICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYTM5ZWI4MyB0byAxMWYwY2Q1Ci0KLTIwMTEtMDktMDYgMTY6NTc6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogdHJ5IHRvIGRpc2FibGUgZGVpbnRlcmxhY2UuLgotCi0yMDExLTA5LTA2IDE1OjQwOjMyICswMjAwICBTdGVmYW4gU2F1ZXIgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNjA1Y2Q5YSB0byBhMzllYjgzCi0KLTIwMTEtMDktMDYgMTY6Mzc6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbW1vbgotCi0yMDExLTA5LTA2IDE2OjA2OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmMKLQkgIGdzdC9pc29tcDQvcXRkZW11eC5jCi0KLTIwMTEtMDktMDYgMTU6NDA6MzIgKzAyMDAgIFN0ZWZhbiBTYXVlciA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA2MDVjZDlhIHRvIGEzOWViODMKLQotMjAxMS0wOS0wNiAxNTowNTozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBtYWtlIGRlZmF1bHQgZHVyYXRpb24gY2hlY2sgbGVzcyBzZW5zaXRpdmUKLQkgIEZyYW1lIGR1cmF0aW9uIG1pZ2h0IHZhcnkgZm9yIDEgdXNlY29uZCwgaW4gdGhpcyBjYXNlIG1hdHJvc2thbXV4Ci0JICBkZWNpZGVzIHRvIGNyZWF0ZSBCTE9DS0dST1VQIGluc3RlYWQgb2YgU0lNUExFQkxPQ0suCi0JICBDb252ZXJ0IGR1cmF0aW9uIHRvIHRpbWVjb2Rlc2NhbGUgd2hpY2ggaXMgKHR5cGljYWxseSkgbGVzcyBwcmVjaXNlLCBhbmQKLQkgIHRoZW4gYWxzbyBhbGxvdyB0aGUgZGlmZmVyZW5jZSBvZiAxLy0xIHRvIGFycmFuZ2UgZm9yIGxlc3Mgc2Vuc2l0aXZlIGNoZWNrLgotCSAgQmFzZWQgb24gcGF0Y2ggYnkgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCSAgRml4ZXMgIzY1MzA4MC4KLQotMjAxMS0wOS0wNiAxMzoxODo0MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JICBydHBtcDRnZGVwYXk6IGltcHJvdmUgYm9ndXMgaW50ZXJsZWF2ZWQgaW5kZXggY29tcGVuc2F0aW5nCi0JICBQYXRjaCBieSA8Z3VkYWtlQGdtYWlsLmNvbT4KLQkgIEZpeGVzICM2NTQ1ODUuCi0KLTIwMTEtMDktMDYgMTM6MTY6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5oOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2xhdy9hbGF3LmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIC1nb29kOiBwb3J0IHRvIG5ldyBhdWRpbyBjYXBzCi0KLTIwMTEtMDktMDYgMTA6MzM6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IEFsbG93IHBvc2l0aXZlLCBub24tMS4wIHNlZ21lbnQgcmF0ZXMKLQkgIE9ubHkgbmVnYXRpdmUgcmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEZpeGVzIGJ1ZyAjNjU4MzA1LgotCi0yMDExLTA5LTA1IDE1OjUwOjU2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmM6Ci0JICB0ZXN0czogcGFyc2VyczogcHJvdmlkZSBtb3JlIHJlYWwgZGF0YSB3aGVuIHRlc3RpbmcgZHJhaW5pbmcgb2YgZ2FyYmFnZQotCi0yMDExLTA5LTA1IDE1OjUwOjA0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSAgYW1ycGFyc2U6IGZpeCBhbmQgc3RyZWFtbGluZSB2YWxpZCBmcmFtZSBjaGVja2luZwotCSAgLi4uIHRvIGhhbmRsZSB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBzeW5jIG9yIG5vdCwgYW5kIHN1ZmZpY2llbnQgZGF0YQotCSAgb3Igbm90IGFzIG1pZ2h0IGJlIGV4cGVjdGVkLgotCSAgRml4ZXMgIzY1MDcxNC4KLQotMjAxMS0wOS0wNSAxNDo0OTozMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZnJhZ21lbnRlZCBzdXBwb3J0OyBhdm9pZCBhZGp1c3RtZW50IGZvciBrZXlmcmFtZSBzZWVrCi0JICAuLi4gc2luY2UgYWxsIGluZGV4IGRhdGEgbWF5IG5vdCB5ZXQgYmUgYXZhaWxhYmxlIGF0IHRoYXQgdGltZS4KLQotMjAxMS0wOS0wNSAxNDo0ODowMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZnJhZ21lbnRlZCBzdXBwb3J0OyBtYXJrIGFsbCBhdWRpbyB0cmFjayBzYW1wbGVzIGFzIGtleWZyYW1lCi0KLTIwMTEtMDktMDUgMTQ6NDY6MjkgKzAyMDAgIEJyaWFuIExpIDxicmlhbjcwMDNAZ21haWwuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZyYWdtZW50ZWQgc3VwcG9ydDsgcHJvcGVybHkgaW5pdCByZXR1cm4gdmFyaWFibGUgdmFsdWUKLQkgIEZpeGVzICM2NTU5MTguCi0KLTIwMTEtMDktMDUgMTM6MzE6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgZ3RrLWRvYyBmb3IgbmV3IHNob3J0LWhlYWRlciBwcm9wZXJ0eQotCi0yMDExLTA5LTA1IDEzOjE4OjM5ICswMjAwICBNYXJjIExlZW1hbiA8bWFyYy5sZWVtYW5AZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhbGxvdyBzZW5kaW5nIHNob3J0IFJUU1AgcmVxdWVzdHMgdG8gYSBzZXJ2ZXIKLQkgIFNvbWUgZW5jb2RlcnMgKEFyZWNvbnQpIGRvIG5vdCBsaWtlIHRoZSBsb25nIE9QVElPTlMgc2VudCBhdCBzdGFydHVwIGFzIHNlbnQgYnkKLQkgIEdTdHJlYW1lciwgYnV0IGRvIGFjY2VwdCB0aGUgc2hvcnQgaGVhZGVyIGFzIHNlbnQgYnkgTGl2ZTU1NS4KLQkgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGV4dGVuZGluZyB0aGUgcmVxdWVzdCBvcHRpb25hbCBieSBhZGRpbmcgYSBwcm9wZXJ0eQotCSAgKHNob3J0LWhlYWRlcikuCi0JICBGaXhlcyAjNjU1ODA1LgotCSAgQVBJOiBHc3RSVFNQU3JjOnNob3J0LWhlYWRlcgotCi0yMDA5LTAzLTA0IDE0OjUxOjA5IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgIHJ0cGgyNjNwcGF5OiBTZXQgSDI2My0yMDAwIGlmIHRoYXRzIHdoYXQgdGhlIG90aGVyIHNpZGUgd2FudHMKLQkgIFRoZSBzdGF0aWMgY2FwcyBzdGF0ZXMgdGhpcyBlbGVtZW50IHN1cHBvcnRzIEgyNjMtMjAwMCwgYnV0IHNldGNhcHMgbmV2ZXIKLQkgIHNldHMgaXQsIHNvIGl0IHdhcyBsaWUuCi0JICBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU3Nzc4NAotCi0yMDExLTA4LTMwIDE5OjAyOjUxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBJbml0aWFsaXNlIHRoZSBsYXN0X2tleWZyYW1lX3JlcXVlc3QgdmFyaWFibGUKLQotMjAxMS0wOC0zMSAxNjowNDoyNCArMDIwMCAgUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogbWFrZSBhZGQvcmVtb3ZlL2NsZWFyL2dldC1zdGF0cyBhY3Rpb24gc2lnbmFscwotCSAgaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3ODMwCi0JICBTaWduZWQtb2ZmLWJ5OiBQZXRlciBLb3JzZ2FhcmQgPGphY21ldEBzdW5zaXRlLmRrPgotCi0yMDExLTA4LTMxIDE4OjQ1OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JICBtcDJ0OiBmaXggZW5jb2RpbmcgbmFtZSBhY2NvcmRpbmcgdG8gUkZDMzU1MQotCi0yMDExLTA4LTMwIDEzOjMzOjQ5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IHB1c2ggbW9kZTsgcGVyZm9ybSBzb21lIGV4dHJhIGNoZWNrcyBwcmlvciB0byB1cHN0cmVhbSBzZWVraW5nCi0KLTIwMTEtMDgtMzAgMTM6Mjg6MjEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHB1c2ggbW9kZTsgZml4IGJ1ZmZlcmVkIHN0cmVhbWluZwotCSAgVGhhdCBpcywgaW4gY2FzZSB3aGVyZSBubyBzZWVrIGlzIHBlZm9ybWVkIHRvIG1vb3YsIGJ1dCBwcmVjZWRpbmcKLQkgIGxpbWl0ZWQgbWRhdCBpcyBidWZmZXJlZC4KLQotMjAxMS0wOC0zMCAxNDowNjoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmg6Ci0JICBzaGFwZXdpcGU6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA4LTMwIDEyOjQ5OjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBsYXcgaXMgcG9ydGVkIG5vdwotCi0yMDExLTA4LTMwIDEyOjI1OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbGF3L2FsYXcuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy5jOgotCSAgbGF3OiBwb3J0IHRvIDAuMTEKLQotMjAxMS0wOC0yOSAxOToxMToyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSAgYWxhdzogcG9ydCB0byAwLjExCi0KLTIwMTEtMDgtMjkgMTk6MTA6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgIGdvb206IGZpeCBjb21tZW50Ci0KLTIwMTEtMDgtMjkgMTg6MDI6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXA6IHBvcnQgc291cCBlbGVtZW50cyB0byAwLjExCi0KLTIwMTEtMDgtMjkgMTU6MTM6NTYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGF2b2lkIG92ZXJmbG93IHdyYXBhcm91bmQgaW4gdGltZXN0YW1wIHdoZW4gYWRkaW5nIGR1cmF0aW9ucwotCSAgRG8gc29tZSB0eXBlIGp1Z2dsaW5nIHRvIGF2b2lkIG92ZXJmbG93LCB3aGlsZSBzdGlsbCBhbGxvd2luZyBmb3IgJ25lZ2F0aXZlJwotCSAgZHVyYXRpb25zICh3aGljaCB3b3VsZCBuZWVkIGEgd3JhcGFyb3VuZCBlZmZlY3QpLgotCi0yMDExLTA4LTI5IDEzOjQzOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmMKLQotMjAxMS0wOC0yNiAxNDoyMDo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIGFsbG9jYXRpb246IGZpeCBmb3Igdm1ldGhvZCBjaGFuZ2VzCi0KLTIwMTEtMDgtMjUgMjM6Mzc6NDcgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICB2NGwyc3JjOiBtYWtlIHRoaXMgd29yayBtb3JlIHRoYW4gb25jZSBpbiBhIHJvdwotCSAgV2UgdXNlZCB0byBza2lwIGZyYW1lIHJhdGUgc2V0dXAgaWYgdGhlIGNhbWVyYSB3YXMgYWxyZWFkeSBzZXR1cAotCSAgd2l0aCB0aGUgcmVxdWVzdGVkIGZyYW1lIHJhdGUuIFRoaXMgYnJlYWtzIHNvbWUgY2FtZXJhcyB0aG91Z2gsCi0JICBjYXVzaW5nIHRoZW0gdG8gbm90IG91dHB1dCBkYXRhIChzZXZlcmFsIG1vZGVscyBvZiBUaGlua3BhZCBjYW1lcmFzCi0JICBoYXZlIHRoaXMgcHJvYmxlbSBhdCBsZWFzdCkuCi0JICBTbywgZG9uJ3Qgc2tpcC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzgzMDAKLQotMjAxMS0wOC0yNSAxNjo0MToyMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgcG9ydCB0byBuZXcgdmlkZW8gZmxhZ3MKLQotMjAxMS0wOC0yNCAxODo0MDowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgcHVsc2U6IGFkZCBzb21lIG1vcmUgY2hhbm5lbHMKLQotMjAxMS0wNy0xMiAyMTo0ODozNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgZHRtZjogQWRkIG1vcmUgZGVidWcKLQotMjAxMS0wNy0xMiAxOTowOTowMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZmNvbW1vbi5oOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgZHRtZjogTWF4IGV2ZW50IHR5cGUgaXMgMTUKLQotMjAxMS0wNC0xNCAxNTo0NjowOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmg6Ci0JICBkdG1mc3JjOiBBbGlnbiBEVE1GIHNvdW5kIGJ1ZmZlcnMgd2l0aCBsYXN0LXN0b3AgZnJvbSBldmVudAotCSAgQWxzbyBtYWtlIHN1cmUgdGhlIHRpbWVzdGFtcHMgbmV2ZXIgZ28gYmFja3dhcmRzCi0KLTIwMTEtMDctMTEgMjE6MzE6MDcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIHJ0cGR0bWZzcmM6IENvcnJlY3RseSByZWNvZ25pemUgdGhlIGVuZCBvZiBhIGJ1ZmZlcgotCi0yMDExLTA3LTExIDIwOjQ3OjIzIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBydHBkdG1mc3JjOiBNYWtlIHN1cmUgcnRwZHRtZnNyYyB0aW1lc3RhbXBzIGRvbid0IG92ZXJsYXAKLQotMjAxMS0wNy0xMSAyMDo0NjoyMCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgcnRwZHRtZnNyYzogUHV0IHRoZSBpbnRlciBkaWdpdCBpbnRlcnZhbCBhdCB0aGUgZW5kLCBub3QgYXQgdGhlIHN0YXJ0Ci0JICBUaGUgcmVhc29uIGlzIHRvIGxldCBydHBkdG1mbXV4IGRyb3AgYnVmZmVycyBkdXJpbmcgdGhlIGludGVyIGRpZ2l0IGludGVydmFsLAotCSAgdGhpcyB3YXksIHRoZXJlIHdpbGwgYmUgbW9yZSBzaWxlbmNlIGFyb3VuZCB0aGUgRFRNRiB0b25lcyBzbyBJVkZzIHdpbGwgaGF2ZQotCSAgYSBiZXR0ZXIgY2hhbmNlIHJlY29nbml6aW5nIHRoZW0uCi0KLTIwMTEtMDQtMTQgMTc6MDg6NTcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oOgotCSAgcnRwZHRtZnNyYzogU3RhcnQgYXQgdGhlIGxhc3Rfc3RvcCBmcm9tIHRoZSBzdGFydCBldmVudCBpZiB0aGVyZSB3YXMgb25lCi0JICBUaGUgZ29hbCBpcyB0byB0cnkgdG8gbm90IGhhdmUgYSBHQVAgYmV0d2VlbiB0aGUgYXVkaW8gYW5kIHRoZSBEVE1GCi0KLTIwMTEtMDQtMTQgMTY6NDk6MzkgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oOgotCSAgcnRwZHRtZnNyYzogUmVzcGVjdCBwdGltZSBmcm9tIHRoZSBjYXBzCi0JICBSZXNwZWN0IHRoZSBwdGltZSBmcm9tIHRoZSBjYXBzIGZvciB0aGUgRFRNRiBwYWNrZXRzCi0KLTIwMTEtMDctMTEgMjE6MzA6MjggLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIHJ0cGR0bWZzcmM6IEp1c3QgZXJyb3Igb3V0IGlmIHRoZXJlIGlzIG5vIGNsb2NrCi0KLTIwMTEtMDgtMjQgMTQ6MTY6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wOC0yMyAxMjoxMjoxNSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBvbmx5IHJlcXVpcmUgdHdvIGZyYW1lcyBpbiBhIHJvdyB3aGVuIHdlIGRvIG5vdCBoYXZlIHN5bmMKLQkgIFRoaXMgYXZvaWRzIGEgc2luZ2xlIGJpdCBlcnJvciBkcm9wcGluZyB0d28gZnJhbWVzIHVubmVjZXNzYXJpbHkuCi0JICBUaGUgdHdvIGNvbnNlY3V0aXZlIGZyYW1lcyBjaGVjayBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHdlIGRvbid0Ci0JICBoYXZlIHN5bmMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3MDgwCi0KLTIwMTEtMDgtMjMgMjE6NDE6MTUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IFRyaXZpYWwgaW5kZW50YXRpb24gZml4Ci0KLTIwMTEtMDgtMjMgMTk6MDk6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgdmlkZW86IHBvcnQgdG8gbmV3IGNvbG9yaW1ldHJ5IGluZm8KLQotMjAxMS0wNy0yMSAxNzoyMzoyOCAtMDQwMCAgTW9udHkgTW9udGdvbWVyeSA8Y21vbnRnb21AcmVkaGF0LmNvbT4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogQ29ycmVjdCBzYW1wbGUgbnVtYmVyIHJvdW5kaW5nIHJlc3VsdGluZyBpbiB0aW1lc3RhbXAgaml0dGVyCi0JICBmbGFjZGVjIGNvbnZlcnRzIHRoZSBzcmMgdGltZXN0YW1wIHRvIGEgc2FtcGxlIG51bWJlciwgdXNlcyB0aGF0IGludGVybmFsbHksIHRoZW4gcmVjb252ZXJ0cyB0aGUgc2FtcGxlIG51bWJlciB0byBhIHRpbWVzdGFtcCBmb3IgdGhlIG91dHB1dCBidWZmZXIuICBVbmZvcnR1bmF0ZWx5LCBzYW1wbGUgbnVtYmVycyBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiBhbiBpbnRlZ2VyIG51bWJlciBvZiBuYW5vc2Vjb25kcywgYW5kIHRoZSBjb252ZXJzaW9uIHByb2Nlc3Mgd2FzIHRydW5jYXRpbmcgcmF0aGVyIHRoYW4gcm91bmRpbmcsIHJlc3VsdGluZyBpbiBzYW1wbGUgbnVtYmVycyBhbmQgb3V0cHV0IHRpbWVzdGFtcHMgdGhhdCB3ZXJlIG9mdGVuIG9mZiBieSBhIGZ1bGwgc2FtcGxlLgotCSAgVGhpcyBjb3JyZWN0cyB0aGUgdGltZS0+c2FtcGxlIGNvbnZlc2lvbgotCi0yMDExLTA4LTIyIDEzOjEwOjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDgtMjIgMTI6MjQ6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuYzoKLQkqIGdzdC9pc29tcDQvYXRvbXMuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSAgZm91cmNjOiByZW1vdmUgZm91cmNjIGZyb20gY2FwcwotCi0yMDExLTA4LTIwIDE0OjQ4OjIwIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlYnVndXRpbHMvYnJlYWtteWRhdGEuYzoKLQkgIGJyZWFrbXlkYXRhOiBlbGVtZW50IGlzIG5vdCBwYXNzdGhyb3VnaAotCi0yMDExLTA3LTEzIDExOjIwOjM0IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkgIG11bHRpZmlsZXNyYzogcXVpZXQgZGVidWdnaW5nCi0KLTIwMTEtMDctMTAgMjE6NDA6MjAgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaDoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvc2NhbGVyYm9iLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmUuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmViZmYuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmV0ZmYuYzoKLQkgIGRlaW50ZXJsYWNlOiBjaGFuZ2UgZmllbGQgaGFuZGxpbmcgdGhyb3VnaCBtZXRob2RzCi0JICBUaGlzIGxpa2VseSBicmVha3Mgc3R1ZmYuICBUaGUgZ29vZDogYWxsIG9mIHRoZSBtZXRob2RzIG5vdyBjcmVhdGUKLQkgIGZpZWxkIGltYWdlcyBhbGlnbmVkIHdpdGggaW5wdXQgZnJhbWVzLCB3aXRob3V0IHRpbWVzdGFtcCBtYW5nbGluZy4KLQkgIFRoZSBiYWQ6IHRoaXMgdG91Y2hlcyBhIGxvdCBvZiBjb2RlLCBtdWNoIG9mIHdoaWNoIGlzIGhhaXJ5IGFuZCBpbgotCSAgbmVlZCBvZiBjbGVhbnVwLiAgSG93ZXZlciwgYXQgdGhpcyBwb2ludCB3ZSBjYW4gcmVhc29uYWJseSBjcmVhdGUgYQotCSAgUFNOUi1iYXNlZCB0ZXN0LgotCi0yMDExLTA4LTIxIDE0OjQxOjE0ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiByZXNldCAtPnN0cmVhbWhlYWRlcnMgdG8gTlVMTCBvbiBfc3RvcAotCSAgRml4ZXMgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHJldXNpbmcgbXVsdGlmaWxlc2luawotCi0yMDExLTA4LTIwIDEwOjQ2OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuaDoKLQkgIGN1dHRlcjogYnJpbmcgY3V0dGVyIHNvbWV3aGF0IGludG8gdGhpcyBtaWxsZW5uaXVtCi0KLTIwMTEtMDgtMTkgMTY6Mjc6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkgIHJnOiBmaXggY2FwcwotCi0yMDExLTA4LTE5IDE2OjEzOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHBvcnQgYWZ0ZXIgbWVyZ2UKLQotMjAxMS0wOC0xOSAxNjoxMjowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA4LTE5IDE2OjA5OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2thcmFva2UuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkqIGdzdC9hdXBhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9sZXZlbC9NYWtlZmlsZS5hbToKLQkqIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBwb3J0IHRvIG1vcmUgYXVkaW8gYXBpIGNoYW5nZXMKLQotMjAxMS0wOC0xOSAxNDowMTo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmg6Ci0JKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogdGVzdHMvZXhhbXBsZXMvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vc3BlY3RydW0tZXhhbXBsZS5jOgotCSAgcG9ydCBtb3JlIGVsZW1lbnRzIHRvIG5ldyBhdWRpbyBjYXBzIGFuZCBBUEkKLQotMjAxMS0wOC0xOSAxMTo0OTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5oOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuaDoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgcG9ydCB0byBuZXcgYXVkaW8gQVBJIGFuZCBjYXBzCi0KLTIwMTEtMDgtMTggMTM6Mzc6MzkgKzAyMDAgIERhdmlkIEhlbm5pbmdzc29uIDxkYXZpZC5oZW5uaW5nc3NvbkBjYW5vbmljYWwuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IEFsbG93IHdyaXRlcyBpbiBiaWdnZXIgY2h1bmtzCi0JICBUaGVyZSdzIG5vIHVzZSBpbiBzcGxpdHRpbmcgdGhlIGluY29taW5nIGRhdGEgZG93biB0byB0aGUgc2Vnc2l6ZQotCSAgbGltaXQgLSBieSB3cml0aW5nIGFzIG11Y2ggYXMgcG9zc2libGUgaW4gb25lIGNodW5rLCB3ZSBpbmNyZWFzZQotCSAgcGVyZm9ybWFuY2UgYW5kIGF2b2lkIFB1bHNlQXVkaW8gdW5uZWNlc3NhcnkgcmV3aW5kcy4KLQkgIFNpZ25lZC1vZmYtYnk6IERhdmlkIEhlbm5pbmdzc29uIDxkYXZpZC5oZW5uaW5nc3NvbkBjYW5vbmljYWwuY29tPgotCi0yMDExLTA4LTE4IDE5OjM3OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDgtMTggMTk6MjE6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkgIHBvcnQgdG8gbmV3IGF1ZGlvIGNhcHMuCi0KLTIwMTEtMDgtMDggMjI6MTQ6MjggKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGVuc3VyZSBuby1tb3JlLXBhZHMgaXMgYWx3YXlzIGVtaXR0ZWQKLQkgIEluIHBhcnRpY3VsYXIsIGRvIHNvIGV2ZW4gaWYgZmFpbGluZyB0byByZWFkIHdoaWxlIHByZXJvbGxpbmcsCi0JICBzdWNoIGFzIHdoZW4gcmVhZGluZyBmcm9tIGEgcGFydGlhbCBmaWxlIChlZywgd2hpbGUgaXQgaXMgYmVpbmcKLQkgIGRvd25sb2FkZWQpLgotCSAgVGhpcyBmaXhlcyBhIHdlZGdlIGluIHBsYXliaW4yLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MTk2NQotCi0yMDExLTA4LTE3IDE3OjU3OjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBpbXByb3ZlIGZpeGF0ZSBmdW5jdGlvbgotCSAgVXNlIG5ldyBjb3JlIGZ1bmN0aW9uIHRvIGZpeGF0ZSBhIGZpZWxkLgotCSAgQ2hhaW4gdXAgdG8gcGFyZW50IGZpeGF0ZSBmdW5jdGlvbi4KLQotMjAxMS0wOC0xNyAxNTo1MjoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jCi0KLTIwMTEtMDgtMTcgMTU6Mzk6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9qcGVnL01ha2VmaWxlLmFtOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSAganBlZzogcG9ydCB0byAwLjExCi0JICBBbHNvIGRpc2FibGUgc21va2UgZm9yIG5vdy4KLQotMjAxMS0wOC0xNiAxNzoyNzoxMyArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IGF2b2lkIHRpbWVzdGFtcC9vZmZzZXQgdHJhY2tpbmcgZ29pbmcgb3V0IG9mIHN5bmMKLQkgIFRoZSBsaWJGTEFDIEFQSSBpcyBjYWxsYmFjayBiYXNlZCwgYW5kIHdlIG11c3Qgb25seSBjYWxsIGl0IHRvCi0JICBvdXRwdXQgZGF0YSB3aGVuIHdlIGtub3cgd2UgaGF2ZSBlbm91Z2ggaW5wdXQgZGF0YS4gRm9yIHRoaXMKLQkgIHJlYXNvbiwgYSBzaW5nbGUgcHJvY2Vzc2luZyBzdGVwIGlzIGRvbmUgd2hlbiByZWNlaXZpbmcgYSBidWZmZXIuCi0JICBIb3dldmVyLCBpZiB0aGVyZSB3ZXJlIG1ldGFkYXRhIGJ1ZmZlcnMgc3RpbGwgcGVuZGluZywgYSBzdGVwCi0JICBpbnRlbmRlZCBmb3IgdGhlIGZpcnN0IGF1ZGlvIGZyYW1lIG1pZ2h0IGVuZCB1cCB3cml0aW5nIHRoYXQKLQkgIGxlZnRvdmVyIG1ldGFkYXRhLiBTaW5jZSBhIHNpbmdsZSBzdGVwIGlzIGRvbmUgcGVyIGJ1ZmZlciwgdGhpcwotCSAgd2lsbCBjYXVzZSBldmVyeSBidWZmZXIgdG8gYmUgd3JpdHRlbiBvbmUgc3RlcCBsYXRlLgotCSAgVGhpcyB3b3VsZCBhZGQgc29tZSBsYXRlbmN5IChhIGJ1ZmZlcmZ1bGwncyB3b3J0aCksIHBvc3NpYmx5Ci0JICBsb3NlIGEgYnVmZmVyIHdoZW4gc2Vla2luZyBvciB0aGUgbGlrZSwgYW5kIGFsc28gY2F1c2UgdGltZXN0YW1wCi0JICBhbmQgb2Zmc2V0IHRvIGJlIGFwcGxpZWQgdG8gdGhlIHdyb25nIGJ1ZmZlciwgYXMgdXBkYXRlcyB0bwotCSAgdGhlICJjdXJyZW50IiBzZWdtZW50IGxhc3Rfc3RvcCAoZnJvbSBpbmNvbWluZyBidWZmZXIgdGltZXN0YW1wKQotCSAgd2lsbCBiZSBhcHBsaWVkIHRvIGFuIG91dHB1dCBidWZmZXIgb3JpZ2luYXRpbmcgZnJvbSB0aGUgcHJldmlvdXMKLQkgIGluY29taW5nIGJ1ZmZlci4KLQkgIFRoaXMgZml4ZXMgdGhlIGlzc3VlIGJ5IGVuc3VyaW5nIHRoYXQsIHVwb24gcmVjZWl2aW5nIHRoZSBmaXJzdAotCSAgYXVkaW8gZnJhbWUsIHByb2Nlc3NpbmcgaXMgZG9uZSB0aWxsIGFsbCBtZXRhZGF0YSBpcyBwcm9jZXNzZWQsCi0JICBzbyB0aGUgbmV4dCAic2luZ2xlIHN0ZXAiIGRvbmUgd2lsbCBiZSBmb3IgdGhlIGF1ZGlvIGZyYW1lLiBBZnRlcgotCSAgdGhpcywgd2Ugc2hvdWxkIGtlZXAgdG8gMSBpbnB1dCBidWZmZXIgLT4gMSBvdXRwdXQgYnVmZmVyIGFuZCBzbwotCSAgYXZvaWQgZ2V0dGluZyBvdXQgb2Ygc3luYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA5NjAKLQotMjAxMS0wOC0xNyAxMToxNzozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA4LTE2IDE1OjMyOjA3ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogYmFpbCBvbiByZXNlcnZlZCB2YWx1ZQotCSAgTm93IHRoYXQgd2UgbG9vayBhdCB0aGUgcmlnaHQgYml0cywgd2UgY2FuIHRlc3QgYWdhaW5zdCB0aGUgcmVzZXJ2ZWQKLQkgIHZhbHVlIGFzIHdlIGRvIGZvciBvdGhlciBmaWVsZHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwOTYwCi0KLTIwMTEtMDgtMTYgMTU6Mjc6NDMgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBmaXggYml0IHR3aWRkbGluZwotCSAgUmlnaHQgc2hpZnRpbmcgYSA4IGJpdCB2YWx1ZSBieSA4IGJpdHMgaXMgdHdpY2UgdG9vIG11Y2gKLQkgIHRvIGdldCB0aGUgaGlnaCA0IGJpdHMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwOTYwCi0KLTIwMTEtMDgtMTYgMTU6MjI6NDYgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiB3YXJuIGlmIHdlIHNlZSBhIHZhcmlhYmxlIGJsb2NrIHNpemUgd2hlcmUgdW5zdXBwb3J0ZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA5NjAKLQotMjAxMS0wOC0xNiAxODoyNToyOSArMDEwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IGF2b2lkIGNyYXNoaW5nIGJ5IHJlc2V0dGluZyB0aGUgY29ycmVjdCBudW1iZXIgb2YgY2hhbm5lbHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2MDYKLQotMjAxMS0wOC0xNiAxODozNTo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jCi0KLTIwMTEtMDgtMTYgMTM6MTY6MjIgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBmaXggb2ZmIGJ5IG9uZSBpbiBmcmFtZSBzaXplIGNoZWNrCi0JICBZZXMsIEkgd2FzIHRyYWNraW5nIGFub3RoZXIgYnVnIGFuZCB0aGUgc21hbGwgdGVzdCBmaWxlIEkgZ2VuZXJhdGVkCi0JICB0byB0ZXN0IHdpdGggaW1wcm9iYWJseSBqdXN0IGhhcHBlbmVkIHRvIHRyaWdnZXIgdGhpcywgd2l0aCBhIHNlY29uZAotCSAgYW5kIGxhc3QgZnJhbWUgb2YgMTYxNSBieXRlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTY2NDkKLQotMjAxMS0wOC0xNSAxMjoxOToxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmM6Ci0JICB0ZXN0czogdXBkYXRlIGZvciBfbmVnb3RpYXRlZF9jYXBzKCkgY2hhbmdlCi0KLTIwMTEtMDgtMTQgMjA6NDY6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdjIuMy4wLmh0bWw6Ci0JKiBnc3QvaWQzZGVtdXgvaWQzdjIuNC4wLWZyYW1lcy50eHQ6Ci0JKiBnc3QvaWQzZGVtdXgvaWQzdjIuNC4wLXN0cnVjdHVyZS50eHQ6Ci0JICBpZDNkZW11eDogcmVtb3ZlIHNwZWNzIGZyb20gZ2l0IGFzIHdlbGwgbm93IHRoYXQgcGFyc2luZyBjb2RlIGlzIGluIC1iYXNlCi0KLTIwMTEtMDctMTQgMTU6NDI6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvaWQzZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzoKLQkqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5oOgotCSogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6Ci0JICBpZDNkZW11eDogdXNlIC1iYXNlIHByb3ZpZGVkIGlkMyB0YWcgcGFyc2luZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDM4OAotCi0yMDExLTA4LTEzIDE2OjUxOjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBqYWNrYXVkaW9zcmM6IGZpeCBlcnJvciBtZXNzYWdlIGNvZGUKLQkgIEFuZCBhbHNvIHBvc3QgJ25vdCBmb3VuZCcgZXJyb3IgaWYgamFja2QgaXMgbm90IGV2ZW4gaW5zdGFsbGVkLgotCi0yMDExLTA4LTEyIDE2OjMyOjU4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogaW5pdGlhbGl6ZSBiaXRyYXRlIHZhcmlhYmxlIGFuZCByZXNldCBmb3IgZWFjaCBsb29wCi0JICBEb24ndCBjaGVjayBldmVudHVhbGx5IHVuc2V0IHZhcmlhYmxlIGFuZCBkb24ndCBhY2NpZGVudGlhbGx5IHVzZSB2YWx1ZXMgZnJvbSBsYXN0Ci0JICBjeWNsZS4KLQotMjAxMS0wOC0xMCAxMToyODoyNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgIGFhc2luazogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKLQotMjAxMS0wOC0wOSAxMToyODoxNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IFByb3Blcmx5IGVycm9yIG91dCBpZiBTRFAgY29udGFpbnMgbm8gc3RyZWFtcwotCSAgQWxzbyBmaXhlcyB1bml0aWFsaXplZCB2YXJpYWJsZSBlcnJvciBvbiBtYWNvc3guCi0KLTIwMTEtMDgtMDkgMDk6MDU6MzEgKzAxMDAgIFZpbmNlbnQgUGVucXVlcmMnaCA8dmluY2VudC5wZW5xdWVyY2hAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBjbGVhciBmbGFncyBvbiBidWZmZXIgcmV1c2UKLQkgIFRoaXMgd2lsbCBlbnN1cmUgYSBsb2dpY2FsbHkgbmV3IGJ1ZmZlciBkb2VzIG5vdCBrZWVwIGZsYWdzIGZyb20KLQkgIGEgcHJldmlvdXMgdXNlIG9mIHRoYXQgYnVmZmVyIChlZywgRElTQ09OVCB3b3VsZCBiZSBzZXQgb24gdGhlIGZpcnN0Ci0JICBidWZmZXIsIGFuZCBtaXN0YWtlbmx5IGtlcHQgd2hlbiByZXVzZWQpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzcwOQotCi0yMDExLTA4LTA4IDEwOjU0OjI2ICswMTAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogdGFrZSBjYXJlIG5vdCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9ybWF0IHdoZXJlIGFwcHJvcHJpYXRlCi0JICBTb21lIGRyaXZlcnMgYXJlIGJ1Z2d5IGFyZSB3aWxsIGNoYW5nZSB0aGUgY3VycmVudCBmb3JtYXQgd2hlbgotCSAgcHJvY2Vzc2luZyBWSURJT0NfVFJZX0ZNVC4gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBmb3JtYXQKLQkgIHRvIGVuc3VyZSB0aGUgZm9ybWF0IGlzIGtlcHQgdW5jaGFuZ2VkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTA2NwotCi0yMDExLTA4LTA4IDE1OjI3OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMS0wOC0wOCAxNToyNjowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hYWxpYi9NYWtlZmlsZS5hbToKLQkgIGFhbGliOiBtYWtlIHN1cmUgLURHU1RfVVNFX1VOU1RBQkxFX0FQSSBpcyBkZWZpbmVkCi0JICBTbyB3ZSBkb24ndCBnZXQgd2FybmluZ3MuCi0KLTIwMTEtMDgtMDggMTU6MjU6MzEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9vdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkZW9vdmVybGF5Lmg6Ci0JICB2NGwyOiB1cGRhdGUgZm9yIEdzdFhPdmVybGF5ID0+IEdzdFZpZGVvT3ZlcmxheSByZW5hbWUKLQotMjAxMS0wOC0wNyAxMjoyMzoyNiArMDIwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IFVzZSBmcmFjdGlvbiBjb21wYXJlIHV0aWwgZnVuY3Rpb24uCi0JICBVc2UgdGhlIGZyYWN0aW9uIGNvbXBhcmUgdXRpbGl0eSB0byBjb21wYXJlIGZ1bmN0aW9uLCBub3QgdGhlCi0JICBoYW5kY3JhZnRlZCBvbmUuIFRoZSBoYW5kY3JhZnRlZCBvbmUgaXMgYnVnZ3kgYXMgaXQgZG9lc24ndCB0YWtlIGludG8KLQkgIGFjY291bnQgcm91bmRpbmcgZXJyb3IuIEZvciBleGFtcGxlIGNvbXBhcmluZyBhIGZyYW1lcmF0ZSBvZiAyMC8xIG9uIGEKLQkgIGNhbWVyYSBjb25maWd1cmVkIGFzIDMwLzEgZnBzIHdvdWxkIHlpZWxkIHRydWU6IDEgPT0gKDEgKiAyMCkvMzAgYW5kIG5vdAotCSAgcmUtY29uZmlndXJlIHRoZSBjYW1lcmEuIEZpeGVzICM2NTYxMDQKLQotMjAxMS0wOC0wNyAxMToxNDo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkgIHB1bHNlc3JjOiBhdm9pZCByYWNlIGluIHN0YXJ0aW5nCi0JICBTaW5lIHRoZSBiYXNlIGNsYXNzIG5vdyBkb2VzIHRoZSBuZWdvdGlhdGlvbiBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIHdlIGhhdmUKLQkgIHRvIGJlIGNhcmVmdWwgYW5kIGNoZWNrIGlmIHRoZSBzdHJlYW0gaXMgcmVhZHkgYmVmb3JlIGNoYW5naW5nIGl0cyBjb3JrZWQgc3RhdGUuCi0KLTIwMTEtMDgtMDUgMTI6Mjc6MTggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIGNoZWNrOiBVc2UgR1NUX0NGTEFHUyB3aGVuIGJ1aWxkaW5nIHRlc3RzCi0JICBFbnN1cmVzIHdlIGhhdmUgdGhlIHByb3BlciBkZWZpbmUgZm9yIHVzaW5nIHVuc3RhYmxlIEFQSQotCi0yMDExLTA4LTA1IDA4OjU5OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIGlzb21wNDogZml4dXAgYWZ0ZXIgc21hbGwgYXBpIGNoYW5nZXMKLQkgIFBvcnQgdG8gcmVjZW50bHkgY2hhbmdlZCBhcGkgc28gdGhhdCBpdCBjb21waWxlcyBhZ2Fpbi4KLQotMjAxMS0wOC0wNSAxMTozMjo0NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICB5NG1lbmM6IE5vdyBkZXBlbmRzIG9uIGxpYmdzdHZpZGVvCi0KLTIwMTEtMDgtMDQgMTg6NDE6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2U6IG1vcmUgY2xlYW51cHMKLQotMjAxMS0wOC0wNCAxODoxNTo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogc21hbGwgY2xlYW51cHMKLQotMjAxMS0wOC0wNCAxNjozNTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogY2FsbCBzZXRfY2FwcyBtZXRob2Qgb2YgYmFzZWNsYXNzCi0JICBDYWxsIHRoZSBiYXNlY2xhc3Mgc2V0X2NhcHMgZnVuY3Rpb24gdG8gbWFrZSBpdCBzZW5kIHRoZSBjYXBzIGV2ZW50IGFuZAotCSAgcHJvcGVybHkgdHJpZ2dlciB0aGUgbmVnb3RpYXRpb24gZnVuY3Rpb25zLgotCi0yMDExLTA4LTA0IDE2OjI1OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBzbWFsbCBjbGVhbnVwcwotCi0yMDExLTA4LTA0IDE1OjI1OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBnb29tOiBwb3J0IHRvIG5ldyBjYXBzCi0KLTIwMTEtMDgtMDQgMTM6NTI6MTggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IFNpemUgdmFyaWFibGUgc2hvdWxkIGJlIGEgZ3VpbnQgYW5kIG5vdCBhIGdzaXplCi0KLTIwMTEtMDgtMDQgMTI6NTA6MDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBhY3RpdmF0ZSB0aGUgcG9vbCBpbiBmYWxsYmFjawotCSAgV2hlbiBub2JvZHkgaXMgdXNpbmcgb3VyIHBvb2wsIGFjdGl2YXRlIGl0IG91cnNlbHZlcy4KLQkgIEF2b2lkIGxlYWtpbmcgdGhlIGJ1ZmZlciBhcnJheS4KLQkgIFNldCBkZWZhdWx0IHBvb2wgY29uZmlndXJhdGlvbiB3aXRoIGNhcHMuCi0JICBEb24ndCBrZWVwIGN1cnJlbnRfY2FwcywgY29yZSBkb2VzIHRoYXQgZm9yIHVzIG5vdy4KLQotMjAxMS0wOC0wMyAyMjo1Nzo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzoKLQkgIGZpeCBjb21waWxhdGlvbgotCSAgaGFsIGVsZW1lbnRzIHdlcmUgcmVtb3ZlZCwgcmVtb3ZlIHRoZW0gZnJvbSBkb2NzIHRvbwotCSAgY2hhbmdlIGV4YW1wbGUgZm9yIHBhZC1ibG9jayBBUEkgKGFjdHVhbGx5IHJlbW92ZSB0aGUgcGFkIGJsb2NrLCBhbiBhcHBsaWNhdGlvbgotCSAgc2hvdWxkIG5vdCBiZSBib3RoZXJlZCB3aXRoIHdvcmtpbmcgYXJvdW5kIGJ1Z3MgaW4gZWxlbWVudHMpCi0KLTIwMTEtMDgtMDMgMTg6Mzc6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBwb3J0IHRvIG5ldyBBUEkKLQotMjAxMS0wOC0wMyAxODoyNTozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L3B1bHNlL3B1bHNlc2luay5jCi0JICBleHQvcHVsc2UvcHVsc2VzcmMuYwotCSAgZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYwotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmMKLQotMjAxMS0wOC0wMyAyMjo1MDowNSArMTAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLmM6Ci0JICBtYXRyb3NrYTogUmVnaXN0ZXIgbmV3IGRlYnVnIGNhdGVnb3J5Ci0JICBSZWdpc3RlciB0aGUgbWF0cm9za2FyZWFkY29tbW9uIGRlYnVnIGNhdGVnb3J5IHdoZW4gdGhlCi0JICBwbHVnaW4gaXMgbG9hZGVkIHRvIGF2b2lkIGFzc2VydGlvbiBvdXRwdXQgd2hlbiBkZWJ1ZyBpcyB0dXJuZWQgb24uCi0KLTIwMTEtMDgtMDMgMTM6Mzg6MDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9pY2xlcy9nZGtwaXhidWZzaW5rLXRlc3QuYzoKLQkgIHRlc3QvaWNrbGVzOiBQb3J0IGdka3BpeGJ1ZnNpbmsgdGVzdAotCi0yMDExLTA4LTAzIDEzOjMzOjU5ICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdXRvZGV0ZWN0LmM6Ci0JICBSZXZlcnQgInRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEaXNhYmxlIGF1dG9kZXRlY3QgdGVzdCB0ZW1wb3JhcmlseSwgc28gdGhhdCB0aGUgYnVpbGQgYm90cyB1cGRhdGUgLWJhZCBhbmQgdGhlIHJhbmtzIG9mIHVuci4uLiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNDc1YWVkOGFmNmQyYTU3YzFkMjE0OTBjODI0ZTc1NGE2YjIzNjdhOS4KLQkgIEl0IHdvbid0IGNvbnNpZGVyIGVsZW1lbnRzIGZyb20gYW55d2hlcmUgZWxzZSBhbnltb3JlCi0KLTIwMTEtMDgtMDMgMTM6MTA6NDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jOgotCSAgY2hlY2s6IFVwZGF0ZSBwYXJzZXIgbWluaS1saWIgdG8gMC4xMSBBUEkKLQotMjAxMS0wOC0wMyAxMzowOTowNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgcG86IHVwZGF0ZSBmb3IgbW9kaWZpZWQgc291cmNlIGZpbGUgbG9jYXRpb24KLQotMjAxMS0wOC0wMyAxMzowODo0MyArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogY2Fpcm9fZ29iamVjdCBpc24ndCBwb3J0ZWQgZWl0aGVyCi0KLTIwMTEtMDgtMDMgMTA6NTk6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvaGFsL01ha2VmaWxlLmFtOgotCSogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzoKLQkqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zaW5rLmg6Ci0JKiBleHQvaGFsL2dzdGhhbGF1ZGlvc3JjLmM6Ci0JKiBleHQvaGFsL2dzdGhhbGF1ZGlvc3JjLmg6Ci0JKiBleHQvaGFsL2dzdGhhbGVsZW1lbnRzLmM6Ci0JKiBleHQvaGFsL2dzdGhhbGVsZW1lbnRzLmg6Ci0JKiBleHQvaGFsL2hhbC5jOgotCSogZXh0L2hhbC9oYWwuaDoKLQkgIGhhbDogUmVtb3ZlIGhhbCBwbHVnaW4KLQkgIGhhbCBpcyBub3QgZGV2ZWxvcGVkIGFueW1vcmUgYW5kIG5vYm9keSBpcyB1c2luZyB0aGUgcGx1Z2luIG5vd2FkYXlzLgotCi0yMDExLTA3LTI5IDEzOjAzOjU1ICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNvZnRlbiBhc3NlcnRpb24gY2hlY2sgb24gc3RyZWFtIHNpemUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTU1NzAKLQotMjAxMS0wOC0wMyAxMDowOTo0MiArMDIwMCAgUm9iZXJ0IEtyYWtvcmEgPHJvYi5rcmFrb3JhQG1lc3NhZ2VuZXRzeXN0ZW1zLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiBBZGQgc3VwcG9ydCBmb3IgSC4yNjQgcGF5bG9hZCBpbiBNSlBFRyBjb250YWluZXIKLQkgIFNlZSBodHRwOi8vd3d3LnF1aWNrY2FtdGVhbS5uZXQvdXZjLWgyNjQvVVNCX1ZpZGVvX1BheWxvYWRfSC4yNjRfMC44Ny5wZGYKLQkgIEZpeGVzIGJ1ZyAjNjU1NTMwLgotCi0yMDExLTA4LTAyIDIyOjA1OjA4IC0wNDAwICBUcmlzdGFuIE1hdHRoZXdzIDx0cmlzdGFuQHNhdC5xYy5jYT4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5oOgotCSAgamFja2F1ZGlvc2luazogRG9uJ3QgY2FsbCBnX2FsbG9jYSgpIGluIHByb2Nlc3NfY2IKLQkgIGdfYWxsb2NhKCkgaXMgbm90IFJULXNhZmUsIHNvIGluc3RlYWQgd2Ugc2hvdWxkIGFsbG9jYXRlIHRoZQotCSAgbWVtb3J5IG5lZWRlZCBpbiBhZHZhbmNlLiBGaXhlcyAjNjU1ODY2Ci0KLTIwMTEtMDgtMDMgMDg6NTg6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEFkZCBoYWwgdG8gdGhlIGxpc3Qgb2Ygbm9uLXBvcnRlZCBwbHVnaW5zCi0KLTIwMTEtMDgtMDMgMDg6NTM6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IEFkZCBtb25vc2NvcGUgdG8gdGhlIGxpc3Qgb2Ygbm9uLXBvcnRlZCBwbHVnaW5zCi0KLTIwMTEtMDgtMDMgMDg6NTE6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgZWZmZWN0djogRml4IHVudXNlZCBidXQgc2V0IHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmdzCi0KLTIwMTEtMDgtMDIgMjM6NDI6NTggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBkb2NzOiBmaXggdHdvIG1vcmUgU2luY2U6IHRhZ3MKLQotMjAxMS0wNy0zMSAwNDoxOTowMCArMDMwMCAgTWFydCBSYXVkc2VwcCA8bGVpb0BnZW50b28ub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBGaXggU2luY2UgdGFncyBmb3IgZmllbGRhbmFseXNpcyByZWxhdGVkIG5ldyBwcm9wZXJ0aWVzCi0JICBjb21taXQgYzFiMTAwY2Y5YyBpcyBhZnRlciAwLjEwLjI5IGFuZCAwLjEwLjMwIHdhcyBhIGJyYW5jaGVkIHJlbGVhc2UuCi0JICBTbyBmaXggU2luY2UgdGFncyBmcm9tIDAuMTAuMjkgdG8gMC4xMC4zMSBmb3IgdGhlIG5ldyBwcm9wZXJ0aWVzLgotCi0yMDExLTA4LTAyIDExOjUxOjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgcnRwdm9yYmlzcGF5OiBmaXggcG9ydGluZyBlcnJvcgotCi0yMDExLTA4LTAyIDExOjI5OjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiBEZWZpbmUgbGlzdCBvZiBub24tcG9ydGVkIHBsdWdpbnMKLQotMjAxMS0wOC0wMiAxMToyOToyNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIFVwZGF0ZSBjb21tb24gc3VibW9kdWxlCi0KLTIwMTEtMDgtMDIgMTE6MTc6MzggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmUuYWM6IFNvcnQgQUdfR1NUX0NIRUNLX1BMVUdJTiBhbHBoYWJldGljYWxseQotCi0yMDExLTA3LTI5IDE3OjI3OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuaDoKLQkgIC1nb29kOiBmaXggZm9yIGJ1ZmZlcnBvb2wgQVBJIGNoYW5nZQotCi0yMDExLTA3LTI5IDE3OjIxOjAzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsOiBjaGFuZ2UgZm9yIG5ldyBBUEkKLQotMjAxMS0wNy0yOSAxMzowNTo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZml4IHZhcmlhYmxlLXNldC1idXQtbm90LXVzZWQgY29tcGlsZXIgd2FybmluZyB3aXRoIG9sZGVyIHB1bHNlIHZlcnNpb25zCi0KLTIwMTEtMDctMjkgMTI6MDc6MjQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBwcm9wZXJseSBpbml0IHJ0Y3BfbWluX2ludGVydmFsCi0KLTIwMTEtMDMtMDkgMTE6MDQ6MzYgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZXNpbms6IEFkZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIGZvcm1hdHMKLQkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB2YXJpb3VzIGNvbXByZXNzZWQgZm9ybWF0cyAoQUMzLCBFLUFDMywgRFRTIGFuZAotCSAgTVAzKSBwYXlsb2FkZWQgaW4gSUVDIDYxOTM3IGZvcm1hdCAodXNlZCBmb3IgdHJhbnNtaXNzaW9uIG92ZXIgUy9QRElGLAotCSAgSERNSSBhbmQgQmx1ZXRvb3RoKS4KLQkgIFRoZSBhY2NlcHRjYXBzKCkgZnVuY3Rpb24gYWxsb3dzIGJpbnMgdG8gcHJvYmUgZm9yIHdoYXQgZm9ybWF0cyB0aGUgc2luawotCSAgYmVpbmcgY29ubmVjdGVkIHRvIHN1cHBvcnQuIFRoaXMgb25seSB3b3JrcyBhZnRlciB0aGUgZWxlbWVudCBpcyBzZXQgdG8KLQkgIGF0IGxlYXN0IFJFQURZLgotCSAgSWYgdGhlIHVuZGVybHlpbmcgc2luayBjaGFuZ2VzIGFuZCB0aGUgZm9ybWF0IHdlIGFyZSBzdHJlYW1pbmcgaXMgbm90Ci0JICBhdmFpbGFibGUsIHdlIGVtaXQgYSBtZXNzYWdlIHRoYXQgd2lsbCBhbGxvdyB1cHN0cmVhbSBlbGVtZW50cy9iaW5zIHRvCi0JICBibG9jayBhbmQgcmVuZWdvdGlhdGUgYSBuZXcgZm9ybWF0LgotCi0yMDExLTAzLTAxIDE1OjM0OjQ2ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5oOgotCSAgcHVsc2VzaW5rOiBVc2UgdGhlIGV4dGVuZGVkIHN0cmVhbSBBUEkgaWYgYXZhaWxhYmxlCi0JICBUaGlzIHVzZXMgdGhlIG5ldyBleHRlbmRlZCBBUEkgZm9yIGNyZWF0aW5nIHN0cmVhbXMuIFRoaXMgd2lsbCBhbGxvdyB1cwotCSAgdG8gc3VwcG9ydCBjb21wcmVzc2VkIGZvcm1hdHMgbmF0aXZlbHkgaW4gcHVsc2VzaW5rIGFzIHdlbGwuCi0KLTIwMTEtMDctMjkgMDA6MDc6NTIgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5oOgotCSAgcHVsc2VzcmM6IEFkZCBhIHNvdXJjZS1vdXRwdXQtaW5kZXggcHJvcGVydHkKLQkgIFRoaXMgZXhwb3NlcyB0aGUgc291cmNlIG91dHB1dCBpbmRleCBvZiB0aGUgcmVjb3JkIHN0cmVhbSB0aGF0IHdlIG9wZW4KLQkgIHNvIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRoaXMgd2l0aCB0aGUgaW50cm9zcGVjdGlvbiBpZiB0aGV5IHdhbnQgKHRvCi0JICBtb3ZlIHRoZSBzdHJlYW0sIGZvciBleGFtcGxlKS4KLQotMjAxMS0wNy0yOCAxNDo0NDo1NyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBrZWVwIGEgcmVmIG9uIHRoZSBzcmMgcGFkIHdoaWxlIHVzaW5nIGl0Ci0JICBQcmV2ZW50IGEgcG9zc2libGUgcmFjZSBpZiBjbGVhcl9zc3JjKCkgaXMgY2FsbGVkIGJldHdlZW4gZ2V0dGluZyB0aGUgcGFkIGFuZAotCSAgZG9pbmcgdGhlIHB1c2guCi0JICBCYXNlZCBvbiBwYXRjaCBieSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDkxNgotCi0yMDExLTA1LTI0IDExOjI5OjU3ICswMzAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oOgotCSAgcnRwc3NyY2RlbXV4OiBNYWtlIHRoZSBwYWRzIGxvY2sgcmVjdXJzaXZlIGFuZCBob2xkIGl0IGFjcm9zcyB0aGUgc2lnbmFsIGVtaXQKLQkgIFdlIG5lZWQgdG8ga2VlcCB0aGUgbG9jayBoZWxkIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBhIHB1c2ggYmVmb3JlIHRoZSAibmV3LXNzcmMtcGFkIgotCSAgaGFuZGxlciBoYXMgY29tcGxldGVkLiBCdXQgd2UgbWF5IHdhbnQgdG8gcHVzaCBhbiBldmVudCBmcm9tIGluc2lkZSB0aGF0IGhhbmRsZXIsIGhlbmNlCi0JICB0aGUgcmVjdXJzaXZlIG11dGV4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDkxNgotCi0yMDExLTA1LTI0IDExOjE3OjI1ICswMzAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogVXNlIFBBRHMgbG9jawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDkxNgotCi0yMDExLTA3LTI4IDExOjA5OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4OiB1cGRhdGUgZm9yIHBvc2l0aW9uL3F1ZXJ5L2NvbnZlcnQgQVBJIGNoYW5nZXMKLQotMjAxMS0wNy0yOCAxMDo1NDozOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBnc3Q6IHVkcGF0ZSBmb3IgcG9zaXRpb24vZHVyYXRpb24vY29udmVydCBxdWVyeSBBUEkgY2hhbmdlcwotCi0yMDExLTA3LTI4IDAwOjM3OjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBjb21waWxlciB3YXJuaW5nCi0JICBnc3RhdmlkZW11eC5jOiBJbiBmdW5jdGlvbiAnZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0nOgotCSAgZ3N0YXZpZGVtdXguYzoxMjYxOjI0OiBlcnJvcjogJ2RhdGEnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdlcnJvcj11bmluaXRpYWxpemVkXQotCSAgZ3N0YXZpZGVtdXguYzoxMjA0OjExOiBub3RlOiAnZGF0YScgd2FzIGRlY2xhcmVkIGhlcmUKLQotMjAxMS0wNy0yNyAxODoxNToyMCArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSAgcnRwaDI2NGRlcGF5OiBDb3BlIHdpdGggRlUtQSBFIGJpdCBub3QgYmVpbmcgc2V0Ci0JICBTb21lIGgyNjQgcGF5bG9hZGVycyBhcmUgdW5mb3J0dW5hdGVseSBidWdneSBhbmQgZG9uJ3QgY29ycmVjdGx5IHNldCB0aGUKLQkgIEUgYml0IGluIEZVLUEgTkFMIHdoZW4gdGhleSBoYXZlIGVuZGVkLiBXb3JrIGFyb3VuZCB0aGlzIGJ5IGFzc3VtaW5nCi0JICBzdWNoIGEgZnJhZ21lbnRhdGlvbiB1bml0IGhhcyBlbmRlZCB3aGVuIHRoZXJlIHdhcyBubyBwYWNrZXQgbG9zcyBhbmQgYQotCSAgbmV3IE5BTCBpcyBzdGFydGVkCi0KLTIwMTEtMDQtMTIgMTc6MDE6NDcgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmg6Ci0JICBhYzNwYXJzZTogU3VwcG9ydCBzd2l0Y2hpbmcgYWxpZ25tZW50IG9uLXRoZS1mbHkKLQkgIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBvZiBhbGlnbm1lbnQgZm9yIEUtQUMzIHN0cmVhbXMgYXQgcnVuLXRpbWUuIFRoaXMKLQkgIGlzIHJlcXVlc3RlZCBieSBkb3duc3RyZWFtIGVsZW1lbnRzIHZpYSBhIGN1c3RvbSBldmVudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTAzMTMKLQotMjAxMS0wNy0yNyAxNjo0Njo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMjogcmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKLQkgIFVzZSB0aGUgbW9yZSBzcGVjaWFsaXplZCB0eXBlIGZvciB0aGUgYnVmZmVycG9vbC4KLQkgIFVzZSB0aGUgc2l6ZSBmcm9tIHRoZSBkcml2ZXIgYXMgdGhlIHNpemUgb2YgdGhlIGltYWdlIHRvIHJlYWQuCi0JICBEb24ndCBjb25maWd1cmUgdGhlIHBvb2wgd2hlbiBjcmVhdGVkLiBUaGlzIHdpbGwgYmUgZG9uZSBpbiB0aGUgc2V0dXBfYWxsb2NhdGlvbgotCSAgbWV0aG9kIGxhdGVyIG9yIGJ5IHVwc3RyZWFtIGZvciBzaW5rcy4KLQkgIFJlbW92ZSB1bnVzZWQgcHJvcGVydGllcyBhbmQgdmFyaWFibGVzLiBCdWZmZXJwb29sIHNpemVzIGFyZSBub3cgY29uZmlndXJlZCBpbgotCSAgdGhlIGJ1ZmZlcnBvb2wgYnkgdGhlIGVsZW1lbnRzIGluIHRoZSBwaXBlbGluZS4gV2UgbWlnaHQgd2FudCB0byBpbmZsdWVuY2UgdGhlCi0JICBwb29sIHNpemUgbGF0ZXIgc29tZWhvdy4KLQotMjAxMS0wNy0yNyAxMzo0NjowOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDJidWZmZXJwb29sOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlCi0KLTIwMTEtMDctMjcgMTM6NDM6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IGFkZCBtZXRhZGF0YQotCi0yMDExLTA3LTI3IDEzOjQxOjI4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIGJ1ZmZlcnBvb2w6IGNoZWNrIGZvciBtZXRhZGF0YQotCSAgT25seSBhZGQgdmlkZW8gbWV0YWRhdGEgd2hlbiBpdCB3YXMgY29uZmlndXJlZCBpbiB0aGUgcG9vbC4gRmFpbCBpZiB0aGVyZSB3YXMgbm8KLQkgIHZpZGVvIG1ldGFkYXRhIGNvbmZpZ3VyZWQgYW5kIHRoZSBzdHJpZGVzIGFyZSBub3QgdGhlIGRlZmF1bHQgb25lcy4KLQotMjAxMS0wNy0yNyAxMjo0MjoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5oOgotCSAgd2FycDogYWRkIHN0cmlkZSBzdXBwb3J0Ci0KLTIwMTEtMDctMjcgMTI6NDE6MzMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGFkZCBjb2xvcnNwYWNlIHRvIGRlYnVnCi0KLTIwMTEtMDctMjYgMTc6NDU6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwOiBmaXggY29tcGlsYXRpb24KLQotMjAxMS0wNy0yNiAxNjoxNTowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMjogcmVuYW1lIGEgdmFyaWFibGUKLQkgIFJlbmFtZSB0aGUgc2l6ZSB2YXJpYWJsZSB0byBzaXplaW1hZ2UgYW5kIGZpbGwgaXQgd2l0aCB0aGUgc2l6ZSB0aGF0IGhhcyBiZWVuCi0JICBnaXZlbiB0byB1c2UgYnkgdGhlIHY0bDIgZHJpdmVyIGluc3RlYWQgb2YgbWFraW5nIHNvbWV0aGluZyB1cC4uCi0KLTIwMTEtMDctMjYgMTM6MTg6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyOiB1c2UgbmV3IHNldHVwX2FsbG9jYXRpb24gdm1ldGhvZAotCi0yMDExLTA3LTI2IDEwOjU2OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogaW1wbGVtZW50IG1vcmUgYml0cyBvZiBSVyBJL08gbW9kZQotCSAgSW1wbGVtZW50IHRoZSByZWxhZXNlIG9mIFJXIGJ1ZmZlcnMgaW4gdGhlIHBvb2wuCi0JICBXYXJuIGZvciB1bnN1cHBvcnRlZCB3cml0ZSgpIG1vZGUgZm9yIHNpbmtzLgotCi0yMDExLTA3LTI2IDEwOjU0OjIzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBpbXByb3ZlIElPIG1vZGUgZXJyb3IgaGFuZGxpbmcKLQkgIEVycm9yIG91dCB3aGVuIGFuIHVuc3VwcG9ydGVkIElPIG1vZGUgd2FzIHNlbGVjdGVkCi0KLTIwMTEtMDQtMDkgMTI6MjY6NTYgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hYzNwYXJzZS5jOgotCSAgYWMzcGFyc2U6IEFkZCBzdXBwb3J0IGZvciBJRUMgNjE5MzcgYWxpZ25tZW50Ci0JICBXaGVuIHB1c2hpbmcgb3V0IGJ1ZmZlcnMgb3ZlciBTL1BESUYgb3IgSERNSSwgSUVDIDYxOTM3IHBheWxvYWRpbmcKLQkgIHJlcXVpcmVzIGVhY2ggYnVmZmVyIHRvIGNvbnRhaW4gNiBibG9ja3MgZnJvbSBlYWNoIHN1YnN0cmVhbS4gVGhpcyBhZGRzCi0JICBjb2RlIHRvIGNvbGxlY3QgYWxsIHRoZSBmcmFtZXMgbmVlZGVkIHRvIG1lZXQgdGhpcyByZXF1aXJlbWVudCBiZWZvcmUKLQkgIHB1c2hpbmcgb3V0IGEgYnVmZmVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDMxMwotCi0yMDExLTA2LTA4IDE1OjU3OjM3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBBbHdheXMgc2VuZCBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgZmVlZGJhY2sgaW4gaW1tZWRpYXRlIG1vZGUKLQkgIFNlbmQgYXMgbWFueSBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgZmVlZGJhY2sgbWVzc2FnZXMgaW4gaW1tZWRpYXRlIG1vZGUsIGV2ZW4gaWYgdGhleQotCSAgaGF2ZSBhbHJlYWR5IGJlZW4gc2VudC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ1ODMKLQotMjAxMS0wNi0wOCAxNDo0ODowMSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRG9uJ3QgbGV0IHRoZSBjb21wdXRlZCBSVFAgYmFuZHdpZHRoIGZhbGwgdG9vIGxvdwotCSAgSWYgaXQgZmFsbHMgdG9vIGxvdywgdGhlIGNvbXB1dGVkIFJUQ1AgYmFuZHdpZHRoIHdpbGwgYmUgbmVhciB6ZXJvIGFuZAotCSAgdGhlIFJUQ1AgdGhyZWFkIHdpbGwgYmUgc3RvcHBlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ1ODMKLQotMjAxMS0wNC0yNSAxNjoxMzozOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBXYWl0IGxvbmdlciB0byB0aW1lb3V0IFNTUkMgY29sbGlzaW9uCi0JICBVc2luZyB0aGUgY3VycmVudCBSVENQIGludGVydmFsIHRvIHRpbWVvdXQgU1NSQyBjb2xsaXNpb24gY2FuIGxlYWQgdG8KLQkgIGNvbGxpc2lvbnMgYmVpbmcgdGltZWQgb3V0IGltbWVkaWF0ZWx5IGlmIGEgQllFIHBhY2tldCBpcyBzZW50IGJlY2F1c2UKLQkgIGl0IGlzIHNlbnQgaW1tZWRpYXRlbHksIHNvIHRoZSBpbnRlcnZhbCBpcyAwLiBUaGlzIGlzIG5vdCB3aGF0IHdlCi0JICB3YW50LiBTbyBqdXN0IHNldCBhIHN0YXRpYyAxMCB0aW1lcyB0aGUgZGVmYXVsdCBSVENQIGludGVydmFsLCBpdAotCSAgc2hvdWxkIGJlIGVub3VnaAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODY0MgotCi0yMDExLTA3LTI1IDE1OjUxOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDI6IHJlbW92ZSB1bnVzZWQgbWV0aG9kCi0KLTIwMTEtMDctMjUgMTU6Mzg6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBmaXggZmx1c2hpbmcgc3RhcnQgYW5kIHN0b3AKLQkgIE1vdmUgdGhlIGZsdXNoaW5nIGNhbGxzIHRvIHRoZSByaWdodCBwbGFjZSBpbiB0aGUgYnVmZmVycG9vbC4KLQkgIEZpeCB0aGUgbWluIGFuZCBtYXggYnVmZmVyIHNpemVzLgotCi0yMDExLTA3LTI1IDE0OjQ3OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDI6IGRlcXVldWUgYnVmZmVycyB3aGVuIGFsbCBhcmUgcXVldWVkCi0JICBQcmVmZXIgdG8gYWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBidWZmZXJwb29sIHF1ZXVlIGZvciB0aGUgX2FjcXVpcmUgZnVuY3Rpb24KLQkgIGJlY2F1c2UgaXQgcHJvcGVybHkgc3VwcG9ydHMgdW5ibG9ja2luZyB3aGVuIHNldHRpbmcgaW5hY3RpdmUgZXRjLiBBcyBhIHJlc3VsdCwKLQkgIHdlIG5lZWQgdG8gZGVxdWV1ZSBidWZmZXJzIGFuZCBwdXQgdGhlbSBiYWNrIGluIHRoZSBidWZmZXJwb29sIHF1ZXVlIHdoZW4gd2UKLQkgIGhhdmUgcXVldWVkIGFsbCBidWZmZXJzIGluIHRoZSBzaW5rLgotCSAgUmVuYW1lIHNvbWUgdmFyaWFibGVzIHRvIG1vcmUgbWVhbmluZ2Z1bGwgbmFtZXMgdG8gYXZvaWQgYSBwcm9ibGVtIHdpdGgKLQkgIGZyZWVpbmcgdGhlIHdyb25nIGFtb3VudCBvZiBidWZmZXJzLgotCi0yMDExLTA3LTE5IDEzOjM4OjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2V0IFNPVVJDRSBmbGFnIGF0IGluaXQgdGltZQotCSAgRml4ZXMgIzY1NDgxNi4KLQotMjAxMS0wNy0yNSAxMDoxMDo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSAgdmVydGlnb3R2OiBhZGQgc3RyaWRlIHN1cHBvcnQKLQotMjAxMS0wNy0xOSAxODoyNToyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IG9ubHkgdG8gU1RSRUFNT0ZGIHdoZW4gc3RyZWFtaW5nCi0JICBPbmx5IGNhbGwgU1RSRUFNT0ZGIHdoZW4gd2UgcHJldmlvdXNseSBjYWxsZWQgU1RSRUFNT04KLQotMjAxMS0wNy0yMiAyMToyNjozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jOgotCSAgcmVwbGF5OiBmaXggZm9yIGV2ZW50IGhhbmRsZXIKLQotMjAxMS0wNy0yMiAyMToxOTo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdnNlZWsuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JICBmaXhlcyBmb3IgZXZlbnQgaGFuZGxlciBjaGFuZ2VzCi0KLTIwMTEtMDctMTggMTY6NDY6MjcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IENvbXBsZXRlIG1lcmdlZCBBVSBvbiBtYXJrZXIgYml0Ci0JICBUaGUgbWFya2VyIGJpdCBvbiBhIFJUUCBwYWNrZXQgbWVhbnMgdGhlIEFVIGhhcyBiZWVuIGNvbXBsZXRlZCwgc28gcHVzaCBpdCBvdXQKLQkgIGltbWVkaWF0ZWx5IHRvIHJlZHVjZSB0aGUgbGF0ZW5jeS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ4NTAKLQotMjAxMS0wNy0xOCAyMDoyNzozOCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IE9ubHkgc2V0IHRoZSBtYXJrZXIgYml0IG9uIHRoZSBsYXN0IE5BTFUgb2YgYSBtdWx0aS1OQUxVIGFjY2VzcyB1bml0Ci0JICBBbiBhY2Nlc3MgdW5pdCBjb3VsZCBjb250YWluIG11bHRpcGxlIE5BTCB1bml0cywgaW4gdGhhdCBjYXNlLCBvbmx5IHRoZSBsYXN0Ci0JICBSVFAgcGFja2V0IG9mIHRoZSBsYXN0IE5BTFUgc2hvdWxkIGhhdmUgaXRzIG1hcmtlciBiaXQgc2V0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1NDg1MAotCi0yMDExLTA3LTIwIDA4OjUyOjU4ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkgIG11bHRpcGFydDogZml4IGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMS0wNy0xOSAxODoyMDo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDI6IGhhbmRsZSB1bnN1cHBvcnRlZCBmb3JtYXRzCi0KLTIwMTEtMDctMTkgMTY6NTk6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMjogRml4IHNpbmsgYnVmZmVycG9vbCBoYW5kbGluZwotCSAgUmVtb3ZlIG9sZCBtZXRob2QsIHVzZSBuZXd3IF9wcm9jZXNzIG1ldGhvZCBmb3IgdGhlIHNpbmsuCi0JICBJbmZvcm0gdGhlIHBhcmVudCBidWZmZXJwb29sIGNsYXNzIGFib3V0IHRoZSBzZXR0aW5ncyB0b28uIFRoaXMgaXMgbmVlZGVkIHRvIGxldAotCSAgaXQga25vdyBhYm91dCB0aGUgbWF4LWJ1ZmZlcnMuCi0JICBBbGxvY2F0ZSB0aGUgbmVnb3RpYXRlZCBtYXgtYnVmZmVycyBhbmQgaW5pdGlhbGx5IG1tYXAgbWluLWJ1ZmZlcnMuIFRoZSBpZGVhIGlzCi0JICB0aGF0IHRoZSBidWZmZXJwb29sIHdpbGwgYWxsb2NhdGUgbW9yZSB3aGVuIG5lZWRlZC4KLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCSAgT25seSBwb2xsIGluIGNhcHR1cmUgbW9kZSwgaXQgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGluIHBsYXliYWNrIG1vZGUgb24gdGhpcwotCSAgYmVhZ2xlYm9hcmQuCi0KLTIwMTEtMDctMTkgMTI6MDU6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBhdXBhcnNlOiBhdm9pZCBoYW5naW5nIG9uIGludmFsaWQgc2hvcnQgaW5wdXQKLQkgIC4uLiBhcyBpbiBzdWNoIGNhc2UgdGhlcmUgaXMgbm8gc3JjcGFkIHlldCBvbiB3aGljaCB0byBmb3J3YXJkIEVPUy4KLQotMjAxMS0wNy0xOCAxNToxMzozMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IEZpeCBkZWZhdWx0IHZhbHVlIGxlYWtpbmcKLQkgIFJlbWVtYmVyIHRvIGZyZWUgdGhlIGRlZmF1bHQgdmFsdWUgb2YgY2xpZW50IG5hbWUsIGF2b2lkaW5nIGEKLQkgIGxlYWsKLQotMjAxMS0wNy0xOCAxODo1NDo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgdjRsMjogTW9yZSB3b3JrIG9uIGJ1ZmZlcnBvb2xzCi0JICBBZGQgZGlmZmVyZW50IHRyYW5zcG9ydCBtZXRob2RzIHRvIHRoZSBidWZmZXJwb29sIChNTUFQIGFuZCBSRUFEL1dSSVRFKQotCSAgRG8gbW9yZSBwYXJzaW5nIG9mIHRoZSBidWZmZXJwb29sIGNvbmZpZy4KLQkgIFN0YXJ0IGFuZCBzdG9wIHN0cmVhbWluZyBiYXNlZCBvbiB0aGUgYnVmZmVycG9vbCBzdGF0ZS4KLQkgIE1ha2Ugc2VwYXJhdGUgbWV0aG9kcyBmb3IgZ2V0dGluZyBhIGJ1ZmZlciBmcm9tIHRoZSBwb29sIGFuZCBmaWxsaW5nIGl0IHdpdGgKLQkgIGRhdGEuIFRoaXMgYWxsb3dzIHVzIHRvIGZpbGwgYnVmZmVycyBmcm9tIG90aGVyIHBvb2xzIHRvby4gRWl0aGVyIHVzZSBjb3B5IG9yCi0JICByZWFkIHRvIGZpbGwgdXAgdGhlIHRhcmdldCBidWZmZXJzLgotCSAgQWRkIHByb3BlcnR5IHRvIGZvcmNlIGEgdHJhbnNmZXIgbW9kZSBpbiB2NGwyc3JjLgotCSAgSW5jcmVhc2UgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyB0byA0LgotCSAgTmVnb3RpYXRlIGJ1ZmZlcnBvb2wgYW5kIGl0cyBwcm9wZXJ0aWVzIGluIHY0bDJzcmMuCi0KLTIwMTEtMDctMTggMTQ6MjQ6NDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiByZXNldCB1cG9uIEZMVVNIX1NUT1AKLQkgIC4uLiB3aGljaCBpcyBwYXJ0aWN1bGFybHkgbmVlZGVkIHdoZW4gbWVyZ2luZyBOQUwgdW5pdHMsIHdoZXJlIG5vdCByZXNldHRpbmcKLQkgIHdvdWxkIGxlYWQgdG8gb3V0cHV0IG9mIGFuIG9sZGVyIChwcmUtZmx1c2gpIEFVICh3aXRoIHVuaW50ZW5kZWQgdGltZXN0YW1wKS4KLQotMjAxMS0wNy0xOCAxNDozMDo1MSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgbXVsdGlmaWxlc2luazogZG8gbm90IHVzZSBnX3NsaXN0X2ZyZWVfZnVsbAotCSAgLi4uIGFzIHRoYXQgaXMgb25seSBpbiBHTGliIDIuMjgsIHdoaWNoIGlzIG5vdCB5ZXQgcmVxdWlyZWQgYXQgdGhpcyB0aW1lLgotCi0yMDExLTA3LTE4IDEwOjUyOjIzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICB2NGwyOiBhZGQgSU8gbWV0aG9kIGVudW0KLQotMjAxMS0wNy0xOCAxMDo1MToyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIGJ1ZmZlcnBvb2w6IGltcHJvdmUgX25ldyBmdW5jdGlvbgotCi0yMDExLTA3LTE4IDA5OjM4OjI2ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOgotCSAgbXVsdGlmaWxlc2luazogYWRkIG1heC1maWxlcyBwcm9wZXJ0eQotCSAgQWRkIG1heC1maWxlcyBwcm9wZXJ0eSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHNhdmVkIG9uIGRpc2suCi0JICBBUEk6IG11bHRpZmlsZXNpbms6Om1heC1maWxlcwotCi0yMDExLTA3LTE3IDIzOjM2OjU1ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBtdWx0aWZpbGVzaW5rOiByZWZhY3RvciBmaWxlIG9wZW5pbmcgYW5kIGNsb3NpbmcgY29kZQotCi0yMDExLTA3LTE2IDE5OjM4OjUxICswMjAwICBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZml4IHBpeGVsLWFzcGVjdC1yYXRpbyBpZiBoZWFkZXIgaGFzIG9ubHkgb25lIGRpc3BsYXkgdmFyaWFibGUKLQkgIEN1cnJlbnQgbWF0cm9za2EgZGVtdXggY2FsY3VsYXRlcyB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIG9ubHkgaWYgYm90aAotCSAgRGlzcGxheUhlaWdodCBhbmQgRGlzcGxheVdpZHRoIGFyZSBzZXQsIGJ1dCBpdCBpcyBsZWdhbCB0byB1c2Ugb25seQotCSAgb25lIHZhcmlhYmxlIGlmIHRoZSBvdGhlciBpcyBlcXVhbCB0byBQaXhlbFdpZHRoIG9yIFBpeGVsSGVpZ2h0LCBhdAotCSAgbGVhc3QgdGhlIG1rY2xlYW4gdXRpbGl0eSBpcyBkb2luZyB0aGF0LiBTbyB0aGlzIG1ha3NlIG1rY2xlYW5lZAotCSAgZmlsZXMgcGxheSBjb3JyZWN0bHkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU0NzQ0Ci0KLTIwMTEtMDctMTYgMjM6NDc6NTAgKzAxMDAgIEFudG9pbmUgSmFjb3V0b3QgPGFqYWNvdXRvdEBvcGVuYnNkLm9yZz4KLQotCSogZ3N0L2dvb20vcGx1Z2luX2luZm8uYzoKLQkgIGdvb206IGZpeCBidWlsZCBvbiBQUEMgb24gb3BlbmJzZAotCSAgQSBtaXNzaW5nIHN5cy9wYXJhbS5oIGluY2x1ZGUgcmVzdWx0cyBpbjoKLQkgIC91c3IvaW5jbHVkZS9zeXMvcHJvYy5oOjY0OiBlcnJvcjogJ01BWExPR05BTUUnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEKLQkgIGZ1bmN0aW9uKQotCSAgL3Vzci9pbmNsdWRlL3N5cy9wcm9jLmg6Mjg1OiBlcnJvcjogJ01BWENPTUxFTicgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYQotCSAgZnVuY3Rpb24pCi0JICB3aGVuIGNvbXBpbGluZyBnb29tIG9uIG9wZW5ic2QvcHBjLiBXZSBjYW4ganVzdCByZW1vdmUgdGhlIHR3byBzeXMvIGluY2x1ZGVzCi0JICBoZXJlLCB0aGV5IGFyZSBub3QgbmVlZGVkIGZvciBhbnl0aGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ3NDkKLQotMjAxMS0wNy0xNSAxNzowNjozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA3LTE1IDE2OjU1OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBpbXBsZW1lbnQgc2V0dXBfYWxsb2NhdGlvbgotCSAgSW1wbGVtZW50IHRoZSBzZXR1cF9hbGxvY2F0aW9uIHZtZXRob2QsIHdlJ2xsIGhvcGVmdWxseSBkbyBzb21ldGhpbmcgY2xldmVyIGluCi0JICB0aGVyZSBsYXRlci4KLQotMjAxMS0wNy0xNSAxNjoyNjowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogaW1wcm92ZSBidWZmZXJwb29sIGNvbmZpZyBzZXR0aW5nCi0JICBQYXNzIHRoZSBjYXBzIGFuZCB0aGUgZGVmYXVsdCB2aWRlbyBzaXplIHRvIHRoZSBidWZmZXJwb29sIGNvbmZpZy4KLQkgIERvbid0IGFjdGl2YXRlIHRoZSBidWZmZXJwb29sLCB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgb2JqZWN0IHRoYXQgZGVjaWRlcyB0bwotCSAgdXNlIHRoZSBidWZmZXJwb29sLgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYW5kIGVycm9yIHJlcG9ydGluZy4KLQotMjAxMS0wNy0xNSAxMzo1MjozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGhhbmRsZSBkZXF1ZXVlaW5nIGNvcnJlY2x5Ci0JICBGaXJzdCBjbGVhbiB1cCB0aGUgYnVmZmVycyBpbiB0aGUgcXVldWUsIHRoZW4gdGhlIHJlbWFpbmluZyBvbmVzIGluIHRoZQotCSAgZGV2aWNlLgotCi0yMDExLTA3LTE1IDEzOjI5OjQyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiB1bnJlZiBjb3BpZWQgYnVmZmVyCi0JICBBZnRlciB3ZSBjb3B5IHRoZSBpbmNvbW1pbmcgYnVmZmVyIHRvIG9uZSBvZiBvdXIgYnVmZmVycG9vbCBidWZmZXJzLCB1bnJlZiB0aGUKLQkgIHRhcmdldCBidWZmZXIgYWZ0ZXIgcmVuZGVyaW5nIHNvIHRoYXQgaXQgaXMgcHV0IGJhY2sgaW4gdGhlIHBvb2wuCi0KLTIwMTEtMDctMTUgMTM6MDc6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSAgdjRsMjogZGVxdWV1ZSBidWZmZXJzIGZvciB0aGUgc2luawotCSAgV2hlbiB3ZSBoYXZlIGFsbCBidWZmZXJzIHF1ZXVlZCBmb3IgcGxheWJhY2sgYW5kIHdlIG5lZWQgYSBuZXcgZW1wdHkgYnVmZmVyLAotCSAgZGVxdWV1ZSBvbmUgYW5kIHJldHVybiBpdC4KLQkgIFNldCB0aGUgcmlnaHQgc2l6ZSBmb3Igc2luayBidWZmZXJzLgotCSAgSW1wcm92ZSBjb3VudGluZyBvZiBxdWV1ZWQgYnVmZmVycy4KLQotMjAxMS0wNy0xNSAxMjozNToxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IHVzZSB0aGUgcGFyZW50IHF1ZXVlIGZvciB0aGUgc2luawotCSAgV2Ugd2FudCB0byBtYWludGFpbiBhIHF1ZXVlIG9mIGZyZWUgYnVmZmVycyBmb3IgdGhlIHNpbmssIHVzZSB0aGUgcGFyZW50IG1ldGhvZHMKLQkgIHRvIGRvIHRoYXQuCi0KLTIwMTEtMDctMTUgMTI6MDA6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBmaXggZXJyb3IgbWVzc2FnZXMKLQotMjAxMS0wNy0xNSAxMTozMDoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDI6IGFkZCBBTExPQ0FUSU9OIHF1ZXJ5IHRvIHRoZSBzaW5rCi0KLTIwMTEtMDctMTUgMTE6Mjc6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMjogY29udmVydCB0byBHc3RCdWZmZXJQb29sCi0JICBFeHRlbmQgZnJvbSBHc3RCdWZmZXJQb29sLgotCSAgSGFuZGxlIHRoZSBsaWZldGltZSBvZiB0aGUgcG9vbCBidWZmZXJzIGNvcnJlY3RseSB3aXRoIHRoZSBzdGFydC9zdG9wIHZtZXRob2RzLgotCSAgTWFwIGFjcXVpcmUgYW5kIHJlbGVhc2UgZGlyZWN0bHkgdG8gUUJVRiBhbmQgRFFCVUYuIFdlIHN0aWxsIGV4cG9zZSBhbiBleHBsaWNpdAotCSAgcWJ1ZiBmb3IgdGhlIHY0bDJzaW5rIGZvciBub3cuCi0KLTIwMTEtMDctMTUgMTE6MTg6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IHJlbW92ZSBleHBlcmltZW50YWwgbWFya2VycwotCi0yMDExLTA3LTE0IDIwOjEwOjAyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JICBydHBwY21BcGF5L2RlcGF5OiBTdGF0aWMgY2xvY2sgcmF0ZXMgb24gc3RhdGljIHBheWxvYWRzLCBkeW5hbWljIG9uIGR5bmFtaWMKLQkgIFBhcnRpYWxseSByZXZlcnRzIDM5N2RjNjBiCi0KLTIwMTEtMDctMTQgMTY6MjE6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IG1lcmdlIGNvZGUKLQotMjAxMS0wNy0xNCAxNjoxMjoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5oOgotCSAgdjRsMjogTW92ZSBvdXRwdXQgZGV0YWlscyB0byBkZXZpY2Ugb2JqZWN0Ci0JICBNb3ZlIHRoZSBkZXRhaWxzIG9mIGhvdyBhIGJ1ZmZlciBpcyByZW5kZXJlZCB0byB0aGUgZGV2aWNlIG9iamVjdC4KLQotMjAxMS0wMy0wNCAxNTo0MToyMiAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBJbXBsZW1lbnQgZ2V0Y2FwcwotCSAgQ29udmVydCBwcm9maWxlLWxldmVsLWlkIGZyb20gUlRQIGNhcHMgaW50byB2aWRlby94LWgyNjQgc3R5bGUgY2FwcyAod2l0aCBwcm9maWxlIGFuZCBsZXZlbCkKLQotMjAxMS0wNy0xMyAxODozMjowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmg6Ci0JICB2NGwyOiBtb3ZlIGNhcHR1cmUgY29kZSB0byBkZXZpY2Ugb2JqZWN0Ci0JICBNb3ZlIHRoZSBkZXRhaWxzIG9mIGhvdyB0byBjYXB0dXJlIHRvIHRoZSBkZXZpY2Ugb2JqZWN0LiBSZW1vdmUgdGhlCi0JICB2NGwyc3JjX2NhbGxzLltjaF0gZmlsZXMgYmVjYXVzZSB0aGV5IGFyZSBlbXB0eSBub3cuCi0JICBQcm92aWRlIHR3byBzaW1wbGUgbWV0aG9kcyB0byBnZXQgYW5kIHJldHVybiBhIGJ1ZmZlciB0byB0aGUgZGV2aWNlLgotCSAgQWxzbyBkbyBhIHNsb3cgY29weSB3aGVuIHRoZSBidWZmZXIgaXMgbm90IGZyb20gb3VyIHBvb2wuCi0KLTIwMTEtMDctMTMgMTY6NTg6MDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGFkZCBzb21lIG1vcmUgZGVidWcKLQotMjAxMS0wNy0xMyAxNjo1NjoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDI6IHN0b3Agc3RyZWFtaW5nIGluIFJFQURZIGFuZCBOVUxMCi0KLTIwMTEtMDctMTMgMTY6NDA6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IHN0YXJ0IHN0cmVhbWluZyBmb3IgdGhlIG91dHB1dCBhcyB3ZWxsCi0KLTIwMTEtMDctMTMgMTY6MzM6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgdjRsMjogTGV0IHRoZSBkZXZpY2Ugb2JqZWN0IG1hbmFnZSB0aGUgcG9vbAotCSAgUmVuYW1lIHN0YXJ0IGFuZCBzdG9wIG1ldGhvZHMgdG8gb3BlbiBhbmQgY2xvc2UgYmVjYXVzZSB0aGF0IGlzIHdoYXQgdGhleSBkby4KLQkgIEFmdGVyIHNldHRpbmcgdGhlIGZvcm1hdCBvbiB0aGUgZGV2aWNlIG9iamVjdCwgc2V0dXAgdGhlIGJ1ZmZlcnBvb2xzLiBNb3ZlIHRoaXMKLQkgIGNvZGUgZnJvbSB0aGUgdjRsMnNyY19jYWxscy5jIGZpbGUsIGl0IGlzIHNoYXJlZCBiZXR3ZWVuIHNvdXJjZSBhbmQgc2luay4KLQkgIE1ha2UgbmV3IGRldmljZSBzdGFydCBhbmQgc3RvcCBtZXRob2QgdGhhdCBtZXJnZXMgdmFyaW91cyBiaXRzIG9mIGNvbW1vbiBjb2RlCi0JICBzcHJlYWQgb3ZlciBzZXZlcmFsIGZpbGVzLgotCi0yMDExLTA3LTEzIDEzOjUyOjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgdjRsMjogZG9uJ3Qgc3RvcmUgc3RyaWRlIGluIHRoZSB2aWRlb2luZm8KLQkgIFdlIHdhbnQgdG8ga2VlcCB0aGUgZGVmYXVsdCBzdHJpZGVzIGluIHRoZSB2aWRlb2luZm8uIEtlZXAgdGhlIHN0cmlkZSBvZiB0aGUKLQkgIHZpZGVvIGZyYW1lcyBzZXBhcmF0ZSBzbyB0aGF0IHdlIGNhbiB1c2UgYm90aCB0byBjb3B5IGEgdmlkZW8gZnJhbWUgYW5kIGRvCi0JICBjb3JyZWN0IHN0cmlkZSBjb252ZXJzaW9uLgotCi0yMDExLTA3LTEzIDEzOjM4OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMjogVXNlIHZpZGVvIGZyYW1lIGNvcHkgZm9yIHJhdyB2aWRlbwotCSAgVXNlIHRoZSB2aWRlbyBmcmFtZSBjb3B5IEFQSSBmb3IgcmF3IHZpZGVvIGZyYW1lcyBzbyB0aGF0IHdlIGNvcHkgd2l0aCB0aGUgcmlnaHQKLQkgIHN0cmlkZXMuCi0KLTIwMTEtMDctMTMgMTM6Mzc6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBhZGQgdmlkZW8gbWV0YWRhdGEgdG8gcmF3IHZpZGVvIGJ1ZmZlcnMKLQotMjAxMS0wNy0xMyAxMzoxNTowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IHNtYWxsIGNsZWFudXBzCi0KLTIwMTEtMDctMTMgMTM6MDA6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDI6IGltcHJvdmUgY2FwcyBwYXJzaW5nCi0JICBVc2UgR3N0VmlkZW9JbmZvIHRvIHN0b3JlIHRoZSBwYXJzZWQgY2Fwcy4KLQkgIFJlbW92ZSBvdXRzaXplIGZyb20gdGhlIGNhcHMgcGFyc2luZyBjb2RlLCBpdCdzIHdyb25nIGJlY2F1c2UgaXQgZG9lcyBub3QgdXNlCi0JICB0aGUgc3RyaWRlIGdpdmVuIGJ5IHRoZSBkcml2ZXIuCi0KLTIwMTEtMDctMTMgMTE6NDA6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IHVzZSBlcnJubwotCi0yMDExLTA3LTEzIDExOjM2OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBoYW5kbGUgRUlOVkFMIHdpdGhvdXQgcG9zdGluZyBhIHdhcm5pbmcKLQkgIEVJTlZBTCBtZWFucyB0aGF0IGEgY2FsbCBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBvbmx5IHdhbnQgdG8gcG9zdCBhIFdBUk5JTkcgd2hlbgotCSAgc29tZXRoaW5nIGlzIHJlYWxseSB3cm9uZy4KLQotMjAxMS0wNy0xMyAxMToyOToyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogb25seSBzZXQgZnJhbWVyYXRlIGZvciBjYXB0dXJlIGZvciBub3cKLQotMjAxMS0wNy0xMyAxMToxOToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIHY0bDI6IE1vdmUgY29uZmlndXJhdGlvbiBvZiBmcmFtZXJhdGUgdG8gX3NldF9mb3JtYXQKLQkgIE1vdmUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZyYW1lcmF0ZSB0byB3aGVyZSB3ZSBzZXQgdGhlIG90aGVyIGZvcm1hdAotCSAgcGFyYW1ldGVycy4KLQkgIFJlbW92ZSBoYWNrIHRvIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgYWN0aXZlLgotCSAgU3RvcmUgc3RyZWFtcGFybSBpbiB0aGUgZGV2aWNlIGluZm8uCi0JICBVc2Ugc29tZSBtYWNyb3MgdG8gYWNjZXNzIHRoZSBjdXJyZW50IGRldmljZSBjb25maWd1cmF0aW9uLgotCSAgUmVtb3ZlIHNvbWUgZHVwbGljYXRlIGZpZWxkcyBpbiBzcmMgYW5kIHNpbmsgYW5kIHVzZSB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24KLQkgIGluc3RlYWQuCi0KLTIwMTEtMDctMTIgMTk6MTM6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGZpeCByZXR1cm4gdmFsdWUuLi4KLQotMjAxMS0wNy0xMiAxOTowMzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIHY0bDI6IHNpbXBsaWZ5IHNldHRpbmcgdGhlIGNhcHR1cmUgZm9ybWF0Ci0JICBQYXNzIHRoZSBjYXBzIHRvIHRoZSBzZXRfZm9ybWF0IGZ1bmN0aW9uIGFuZCBtYWtlIF9zZXRfZm9ybWF0IHBhcnNlIHRoZSBjYXBzLgotCSAgQWxzbyBrZWVwIHRoZSBwYXJzZWQgdmFsdWVzIGluIHRoZSB2NGwyb2JqZWN0IHNvIHRoYXQgd2UgY2FuIHJlZmVyIHRvIHRoZW0gd2hlbgotCSAgd2Ugd2FudC4KLQotMjAxMS0wNy0xMiAxODo0MTo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgdjRsMjogcmVtb3ZlIG1vcmUgdW51c2VkIHBhcmFtZXRlcnMKLQotMjAxMS0wNy0xMiAxODoyOTozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsOiBoYW5kbGUgb2JqZWN0IG91dCBvZiB0aGUgbm9ybWFsIGZsb3cKLQotMjAxMS0wNy0xMiAxODoxMzo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMjogTGV0IHRoZSBidWZmZXJwb29sIG93biB0aGUgVjRsMk9iamVjdAotCSAgS2VlcCB0cmFjayBvZiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgZm9ybWF0IGFuZCBzZXR0aW5nIGluIHRoZQotCSAgdjRsMm9iamVjdC4KLQkgIFBhc3MgdGhlIHY0bDJvYmplY3QgdG8gdGhlIGJ1ZmZlcnBvb2wgY29uc3RydWN0b3Igc28gdGhhdCB0aGUgYnVmZmVycG9vbCBjYW4KLQkgIGtub3cgZXZlcnl0aGluZyBhYm91dCB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgc2V0dGluZ3MuIFRoaXMgYWxzbyBhbGxvd3MgdXMKLQkgIHRvIHJlbW92ZSBzb21lIGF3a3dhcmQgY29kZS4KLQotMjAxMS0wNy0xMiAxNzowNjo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsOiByZW1vdmUgY2FwcyBhcmd1bWVudCwgaXQncyBub3QgbmVlZGVkCi0JICBSZW1vdmUgdGhlIGNhcHMgcGFyYW1ldGVyLCB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUgYmVjYXVzZSB3ZSBkb24ndCBzZXQKLQkgIGNhcHMgb24gYnVmZmVycyBhbnltb3JlLgotCi0yMDExLTA3LTEyIDE2OjQ2OjIxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsOiBwYXNzIHRoZSBieXRlc3BlcmxpbmUgYXJvdW5kCi0JICBXaGVuIHNldHRpbmcgYSBmb3JtYXQsIHJldHVybiB0aGUgYnl0ZXNwZXJsaW5lIHRvIHRoZSBjYWxsZXIgc28gdGhhdCBpdCBjYW4gYmUKLQkgIHVzZWQgdG8gYWxsb2NhdGUgYnVmZmVycy4KLQotMjAxMS0wNy0xMiAxNjo0MzowNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHBvb2w6IG1ha2UgYnVmZmVyIHdyaXRhYmxlCi0JICBXZSBuZWVkIHdyaXRhYmxlIGJ1ZmZlcnMgd2hlbiB3ZSBuZWVkIHRvIGRvIGEgc2xvdyBtZW1jcHkuCi0KLTIwMTEtMDctMTIgMTU6MDQ6MzggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggc2Vla2luZyByZWdyZXNzaW9uCi0JICAuLi4gaW50cm9kdWNlZCB3aGVuIHNodWZmbGluZyBhcm91bmQgY29kZSBmb3IgdGhlIGFzeW5jIGltcGxlbWVudGF0aW9uCi0JICBieSBzZXR0aW5nIHN0YXRlIG9mIHNvdXJjZSAoYW5kIHVkcCBzb3VyY2VzKSBpbiBfcGxheSBiZWZvcmUgZG93bnN0cmVhbQotCSAgZmx1c2hpbmcgaXMgdW5kb25lLgotCi0yMDExLTA3LTExIDE1OjIzOjQxICswMzAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAbm9raWEuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmg6Ci0JICBhYzNwYXJzZTogZml4IGJ1ZmZlciBkdXJhdGlvbiBvbiBibG9ja3MtcGVyLWZyYW1lIGNoYW5nZQotCSAgVGhlIGdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlIGNhbGwgd2FzIHByZWRpY2F0ZWQgb24gYSBjaGFuZ2UgdG8KLQkgIHNhbXBsZSByYXRlLCBkdXJhdGlvbiBvciBwcm9maWxlLiBIb3dldmVyLCB0aGUgYmxvY2sgY291bnQgcGVyIGZyYW1lIGNhbgotCSAgYWxzbyBjaGFuZ2UgYmV0d2VlbiBwYWNrZXRzLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IGJ1ZmZlcgotCSAgZHVyYXRpb25zLgotCi0yMDExLTA3LTExIDEzOjUxOjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IGhhbmRsZSBwb29scwotCSAgQ3JlYXRlIGEgbmV3IHBvb2wgaW4gc2V0Y2FwcyBhbmQgc3RvcC9kZXN0cm95IHRoZSBvbGQgb25lLgotCSAgUmVtb3ZlIGJ1ZmZlcl9hbGxvYyBmdW5jdGlvbnMuCi0JICBDaGVjayB0aGF0IHdlIGhhdmUgdjRsMiBtZXRhZGF0YSBpbiBzaG93X2ZyYW1lIGFuZCBmYWxsIGJhY2sgdG8gbWVtY3B5IGludG8gYQotCSAgYnVmZmVyIGZyb20gb3VyIHBvb2wgaWYgd2UgZG9uJ3QgcmVjZWl2ZSBvbmUgb2Ygb3VyIG93biBidWZmZXJzLgotCi0yMDExLTA3LTExIDEyOjA0OjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICB2NGwyOiB2YXJpb3VzIGNsZWFudXBzCi0JICBWYXJpb3VzIGNsZWFudXBzLCBhdm9pZHMgdXNlbGVzcyBjYXN0cywgbW92ZSBlcnJvciBoYW5kbGluZyBvdXRzaWRlIG9mIHRoZSBtYWluCi0JICBjb2RlIGZsb3cuCi0JICBOZWdvdGlhdGUgdG8gYSByZXNvbmFibGUgcmVzb2x1dGlvbiBpbnN0ZWFkIG9mIHRoZSBtYXggcmVzb2x1dGlvbi4KLQotMjAxMS0wNy0xMCAyMTo1MDoxOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWNlbHBkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVucGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuaDoKLQkgIHJ0cDogcG9ydCByZW1haW5pbmcgdG8gMC4xMQotCi0yMDExLTA3LTEwIDE0OjU2OjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6Ci0JICB4aW1hZ2U6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA3LTEwIDEzOjQ0OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuaDoKLQkgIHk0bTogcG9ydCBzb21lIG1vcmUKLQkgIFVzZSB2aWRlbyBoZWxwZXJzLgotCi0yMDExLTA3LTEwIDEzOjI4OjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgeTRtOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0wNy0xMCAxMjo0NjowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4Lmg6Ci0JICBtdWx0aXBhcnQ6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA3LTEwIDExOjQyOjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDctMTAgMTE6NDA6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlYnVndXRpbHMvYnJlYWtteWRhdGEuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2VmZW5jZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc3NldHRlci5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0ZGVidWcuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5oOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JKiBnc3QvZGVidWd1dGlscy90ZXN0cy5jOgotCSAgZGVidWc6IHBvcnQgdG8gMC4xMSwgZGlzYWJsZSBvdGhlcnMKLQkgIERpYXNhYmxlIHRoZSBlZmVuY2UgYW5kIGNhcHNkZWJ1ZyBlbGVtZW50cywgcG9ydCB0aGVtIGxhdGVyLgotCi0yMDExLTA3LTA5IDE5OjIzOjQxIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmg6Ci0JICBtdWx0aWZpbGVzcmM6IEltcHJvdmUgbG9vcGluZwotCSAgQWRkIHN0YXJ0LWluZGV4IGFuZCBzdG9wLWluZGV4IHByb3BlcnRpZXMuCi0KLTIwMTEtMDYtMTYgMTM6NTc6MDMgKzAxMDAgIEpvbm55IExhbWIgPGpvbm55bGFtYkBqb25ueWxhbWIuY29tPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuaDoKLQkgIG11bHRpZmlsZTogYWRkIGxvb3AgcHJvcGVydHkgdG8gbXVsdGlmaWxlc3JjCi0JICBGaXhlczogIzY1MjcyNwotCSAgU2lnbmVkLW9mZi1ieTogSm9ubnkgTGFtYiA8am9ubnlsYW1iQGpvbm55bGFtYi5jb20+Ci0JICBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotMjAwOS0xMS0yMCAxMDowNzo0MyArMDEwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiAxNi1iaXQgYXVkaW8gaXMgc2lnbmVkLCA4LWJpdCBpcyB1bnNpZ25lZC4KLQkgIFByZXRlbmRpbmcgdG8gaGFuZGxlIDgtYml0IHNpZ25lZCBjYXVzZXMgZGlzdG9ydGVkIGF1ZGlvIHdoZW4KLQkgIGFjdHVhbGx5IGdpdmVuIHN1Y2ggYXVkaW8sIHdoaWNoIHlvdSB3aWxsIGdldCBpZiBwYXNzaW5nIDgtYml0Ci0JICB1bnNpZ25lZCB0aHJvdWdoIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUsIGFzIGF1ZGlvcmVzYW1wbGUKLQkgIG9ubHkgaGFuZGxlcyA4LWJpdCBzaWduZWQuICBGaXhlcyAjNjA1ODM0LgotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLTIwMTEtMDctMDggMTY6Mzc6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyOiBmaXggZ3JheSBmb3JtYXQsIHVzZSBmaWx0ZXIgaW4gZ2V0Y2FwcwotCi0yMDExLTA3LTA4IDE2OjEwOjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMjogcG9ydCBhbmQgZW5hYmxlIHY0bDJzaW5rCi0KLTIwMTEtMDctMDggMTQ6MzQ6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IHBvcnQgdG8gbmV3IHZpZGVvIGZvcm1hdHMKLQotMjAxMS0wNy0wOCAxMjo1MToxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA3LTA4IDEyOjQ5OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMjogcG9ydCB0byAwLjExCi0KLTIwMTEtMDctMDcgMTg6Mjc6MzYgKzAyMDAgIEFsZXhleSBGaXNoZXIgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBoYW5kbGUgYmxvY2tzIHdpdGggZHVyYXRpb249MAotCSAgU29tZSB2aWRlbyBmcmFtZXMsIGZvciBleGFtcGxlIGFsdC1yZWYgZnJhbWUgaW4gVlA4LCB3aWxsIGJlCi0JICBuZXZlciBkaXNwbGF5ZWQuIFRoaXMgaXMgd2h5IGl0IGhhcyBkdXJhdGlvbj0wLgotCSAgVGhpcyBwYXRjaCBhbGxvdyB0byB1c2UgdGhpcyBkdXJhdGlvbi4KLQkgIEJ1ZzogNjU0MTc1Ci0JICBTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgRmlzaGVyIDxidWctdHJhY2tAZmlzaGVyLXByaXZhdC5uZXQ+Ci0KLTIwMTEtMDctMDYgMTc6MTg6MDUgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmM6Ci0JICBxdG11eDogQWRkIGRpcmVjdCBkaXJhYyBtYXBwaW5nCi0KLTIwMTEtMDctMDcgMTc6NTk6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHJpcHBsZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmg6Ci0JICBlZmZlY3R2OiBwb3J0IGxhc3QgZWZmZWN0diBlbGVtZW50IHRvIDAuMTEKLQotMjAxMS0wNy0wNyAxNzo0OTozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzdHJlYWsuaDoKLQkgIGVmZmVjdHY6IHBvcnQgc3RyZWFrdHYgdG8gMC4xMQotCi0yMDExLTA3LTA3IDE3OjQwOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmg6Ci0JICBlZmZlY3R2OiBwb3J0IHJhZGlvYWN0diB0byAwLjExCi0KLTIwMTEtMDctMDcgMTc6Mjk6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgZWZmZWN0djogZml4IGRvY3MKLQotMjAxMS0wNy0wNyAxNzoyOTo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0b3AuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmg6Ci0JICBlZmZlY3R2OiBwb3J0IG9wIHRvIDAuMTEKLQotMjAxMS0wNy0wNyAxNzoxODoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkgIGVmZmVjdHY6IHBvcnQgcXVhcmsgdHYKLQotMjAxMS0wNy0wNyAxNjo1NzozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuaDoKLQkgIGVmZmVjdHY6IHBvcnQgcmV2dHYgdG8gMC4xMQotCi0yMDExLTA3LTA3IDE2OjQ2OjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmg6Ci0JICBlZmZlY3R2OiBwb3J0IHZlcnRpZ290diB0byAwLjExCi0KLTIwMTEtMDctMDcgMTY6Mzg6MTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmg6Ci0JICBlZmZlY3R2OiBwb3J0IHNoYWdhZGVsaWN0diB0byAwLjExCi0KLTIwMTEtMDctMDcgMTE6MjI6MjYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBhdXBhcnNlOiB1c2UgQUxXQVlTIHNyYyBwYWQgcmF0aGVyIHRoYW4gU09NRVRJTUVTCi0KLTIwMTEtMDctMDcgMTE6MTQ6MTYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBhdXBhcnNlOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0wNy0wNiAxOTowMzo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIHNoYXBld2lwZTogYmVnaW5uaW5ncyBvZiBwb3J0aW5nCi0KLTIwMTEtMDctMDYgMTg6NTA6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuaDoKLQkgIHdhcnB0djogcG9ydCB0byAwLjExCi0KLTIwMTEtMDctMDYgMTg6NTA6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkgIGRpY2U6IGtlZXAgdHJhY2sgb2YgaW5mbwotCi0yMDExLTA3LTA2IDE4OjMyOjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmg6Ci0JICBlZmZlY3R2OiBwb3J0IGRpY2UKLQotMjAxMS0wNy0wNiAxODowOTo0OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmg6Ci0JICBlZmZlY3R2OiBwb3J0IGFnaW5ndHYKLQotMjAxMS0wNy0wNiAxNzo1MDo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL01ha2VmaWxlLmFtOgotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2FhbGliL2dzdGFhc2luay5oOgotCSAgYWFzaW5rOiBwb3J0IHRvIG5ldyB2aWRlbyBBUEkKLQotMjAxMS0wNy0wNiAxNzo0MDoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2xpYmNhY2EvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaDoKLQkgIGNhY2FzaW5rOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0wNy0wNiAxNjo1MDozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZzogYmVnaW5uaW5ncyBvZiBwb3J0aW5nIHRvIDAuMTEKLQotMjAxMS0wNy0wNiAxNjozMToxOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IHVzZSBBTFdBWVMgc291cmNlIHBhZCByYXRoZXIgdGhhbiBTT01FVElNRVMKLQotMjAxMS0wNy0wNiAxNjoxMDozNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JICB3YXZwYXJzZTogcG9ydCB0byAwLjExCi0KLTIwMTEtMDctMDYgMTY6MTA6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0wNy0wNiAxMjoyMjo0MyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWRqdXN0IHRvIHVuc2lnbmVkIHNlZ21lbnQgZmllbGRzCi0KLTIwMTEtMDctMDYgMTU6NTc6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleDogcG9ydCBzcGVleCBlbGVtZW50cwotCi0yMDExLTA3LTA2IDEyOjA1OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDctMDYgMTA6MTE6NTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBtYW5hZ2VyOiBwb3J0IHRvIDAuMTEKLQkgICogdXNlIEdfREVGSU5FX1RZUEUKLQkgICogYWRqdXN0IHRvIG5ldyBHc3RCdWZmZXIgYW5kIGNvcnJlc3BvbmRpbmcgcnRwIGFuZCBydGNwIGJ1ZmZlciBpbnRlcmZhY2VzCi0JICAqIG1pc2MgY2FwcyBhbmQgc2VnbWVudCBoYW5kbGluZyBjaGFuZ2VzCi0JICBGSVhNRTogYWxzbyByZWxpZXMgb24gYmVpbmcgYWJsZSB0byBwYXNzIGNhcHMgYWxvbmcgd2l0aCBhIGJ1ZmZlciwKLQkgIHdoaWNoIGhhcyBubyBldmlkZW50IGVxdWl2YWxlbnQgeWV0LCBzbyB0aGF0IGVpdGhlciBuZWVkcyBvbmUsCi0JICBvciBzdGlsbCBuZWVkcyBxdWl0ZSBzb21lIGNvZGUgcGF0aCBtb2RpZmljYXRpb24gdG8gZHJhZyBhbG9uZyBjYXBzLgotCi0yMDExLTA2LTI5IDIwOjU5OjI2ICswMzAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAbm9raWEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICBwdWxzZXNpbms6IHByZXZlbnQgcmFjZSBjb25kaXRpb24gY2F1c2luZyByZWYgbGVhawotCSAgU2luY2UgY29tbWl0IDhiZmQ4MCwgZ3N0X3B1bHNlcmluZ2J1ZmZlcl9zdG9wIGRvZXNuJ3Qgd2FpdCBmb3IgdGhlCi0JICBkZWZlcnJlZCBjYWxsIHRvIGJlIHJ1biBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGNhdXNlcyBhIHJhY2Ugd2hlbgotCSAgUkVBRFktPk5VTEwgaXMgZXhlY3V0ZWQgc2hvcnRseSBhZnRlciwgd2hpY2ggc3RvcHMgdGhlIG1haW5sb29wLiBUaGlzCi0JICBsZWFrcyB0aGUgZWxlbWVudCByZWZlcmVuY2Ugd2hpY2ggaXMgcGFzc2VkIGFzIHVzZXJkYXRhIGZvciB0aGUgY2FsbGJhY2sKLQkgIChpbnRyb2R1Y2VkIGluIGNvbW1pdCA3Y2Y5OTYsIGJ1ZyAjNjE0NzY1KS4KLQkgIFRoZSBjb3JyZWN0IGZpeCBpcyB0byB3YWl0IGluIFJFQURZLT5OVUxMIGZvciBhbGwgb3V0c3RhbmRpbmcgY2FsbHMgdG8KLQkgIGJlIGZpcmVkIChzaW5jZSBsaWJwdWxzZSBkb2Vzbid0IHByb3ZpZGUgYSBEZXN0cm95Tm90aWZ5IGZvciB0aGUKLQkgIHVzZXJkYXRhKS4gV2UgZ2V0IHJpZCBvZiB0aGUgcmVmZXJlbmNlIHBhc3NpbmcgZnJvbSA3Y2Y5OTYgYWx0b2dldGhlciwKLQkgIHNpbmNlIGZpbmFsaXphdGlvbiBmcm9tIHRoZSBjYWxsYmFjayB3b3VsZCBhbnl3YXlzIGxlYWQgdG8gYSBkZWFkbG9jay4KLQkgIFJlLWZpeGVzIGJ1ZyAjNjE0NzY1LgotCi0yMDExLTA3LTA0IDA4OjU4OjE0ICswMzAwICBSZW7DqSBTdGFkbGVyIDxyZW5lLnN0YWRsZXJAbm9raWEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHNtYWxsIGNsZWFudXAgb2YgY29weS1wYXN0ZSBjb2RlCi0KLTIwMTEtMDYtMjkgMTk6NTA6NDIgKzAzMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBub2tpYS5jb20+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkgIHB1bHNlc2luazogcmVtb3ZlIHVudXNlZCBtZW1iZXIgdmFyaWFibGUgYW5kIG1pc2xlYWRpbmcgbG9nIG1lc3NhZ2UKLQkgIFdpbSBjaGFuZ2VkIGl0IGluIGNvbW1pdCA4YmZkODAgc28gdGhhdCBwYV9kZWZlcl9yYW4gaXMgbm90IHJlYWQKLQkgIGFueXdoZXJlLgotCSAgVGhlIGxvZyBtZXNzYWdlIHVzZWQgdG8gYW5ub3RhdGUgYSBtYWlubG9vcF93YWl0IGNhbGwgd2hpY2ggaXMgZ29uZS4KLQotMjAxMS0wNy0wNSAxNTozNzo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBmaXggY2FwcwotCi0yMDExLTA3LTA1IDExOjQwOjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmg6Ci0JICBlZmZlY3R2OiBwb3J0IGVkZ2V0dgotCi0yMDExLTA3LTA1IDEwOjEyOjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQWRkIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkgdG8gdGhlIGNvbXBpbGVyIGZsYWdzIHRvIGF2b2lkIHdhcm5pbmdzCi0KLTIwMTEtMDctMDQgMTI6NTg6MzggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBnb29tOiBEb24ndCBhbnN3ZXIgbGFudGVuY3kgcXVlcmllcyBiZWZvcmUgbmVnb3RpYXRpb24KLQotMjAxMS0wNy0wNCAxODoxNTo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwOiBwb3J0IHRvIG5ldyBBUEkKLQotMjAxMS0wNy0wNCAxODoxMjo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXIuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2U6IHJlbW92ZSBpbXBsZW1lbnRzaW50ZXJmYWNlCi0KLTIwMTEtMDctMDQgMTg6MTA6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IGZpeCBjYXBzCi0KLTIwMTEtMDctMDQgMTg6MDY6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmg6Ci0JICBhbHBoYTogcG9ydCB0byBuZXcgdmlkZW8gQVBJCi0KLTIwMTEtMDctMDQgMTc6MDA6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IG1vcmUgcG9ydGluZwotCi0yMDExLTA3LTA0IDE2OjA5OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5oOgotCSAgcG9ydCB0byBuZXcgdmlkZW8gYXBpCi0KLTIwMTEtMDYtMjggMTQ6MDM6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmg6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmg6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmg6Ci0JICB2aWRlbzogcG9ydCB0byBuZXcgdmlkZW8gYXBpcwotCi0yMDExLTA3LTA0IDE0OjMwOjA5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogYXZvaWQgY3Jhc2hpbmcgb24gaW52YWxpZCBpbnB1dCB3aXRob3V0IGNvbXBvbmVudHMKLQotMjAxMS0wNy0wNCAxMTowOToxOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHY6IHBvcnQgdG8gMC4xMQotCSAgKiB1c2UgR19ERUZJTkVfVFlQRQotCSAgKiBhZGp1c3QgdG8gbmV3IEdzdEJ1ZmZlcgotCSAgKiBtaXNjIHNlZ21lbnQgYW5kIGNhcHMgY2hhbmdlcwotCi0yMDExLTA3LTA0IDExOjQ4OjEzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgZXh0L3B1bHNlL3B1bHNlc2luay5jCi0KLTIwMTEtMDctMDQgMTE6MjU6MjggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBwYXNzIGFsb25nIHNlZ21lbnQgaW5mbyB0byBjb2xsZWN0cGFkcwotCSAgLi4uIHNvIGl0IGNhbiB0cmFjayB0aGlzIGFuZCBiZSBzdWJzZXF1ZW50bHkgdXNlZCB0byBkZXRlcm1pbmUgcnVubmluZyB0aW1lIGV0Yy4KLQotMjAxMS0wNy0wNCAxMToyNDoyMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBpbmRpY2F0ZSByYXcgZm9ybWF0IGluIGFhYyBjYXBzCi0KLTIwMTEtMDctMDQgMTE6MDc6MTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogbWluZCByZXF1ZXN0ZWQgbmFtZSBmb3IgcmVxdWVzdCBwYWQKLQotMjAxMS0wNy0wNCAxMTowNjo1NCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBmcmVlIHNjaGVkdWxpbmcgcXVlcnkKLQotMjAxMS0wNy0wMyAxOTo1MTozMiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9wdWxzZS9wbHVnaW4uYzoKLQkgIHB1bHNlOiBJbmNyZWFzZSByYW5rcyB0byBQUklNQVJZICsgMTAKLQkgIFNvIHRoYXQgcHVsc2VzcmMvcHVsc2VzaW5rIGdldCBjaG9zZW4gb3ZlciBvdGhlciBwb3NzaWJsZSBQUklNQVJZCi0JICBzcmMvc2lua3MgYnkgYXV0b2F1ZGlvc2luay4gIFByZXN1bWFibHksIGlmIHB1bHNlIGlzIGF2YWlsYWJsZSwgaXQKLQkgIGlzIGFsd2F5cyBwcmVmZXJyZWQgb3ZlciBhbm90aGVyIHNyYy9zaW5rLgotCSAgRml4ZXM6ICM2NDc1NDAuCi0KLTIwMTEtMDYtMzAgMTg6NDc6NDggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSAgbXVsdGlwYXJ0bXV4OiBBZGQgXHJcbiB0byB0YWlsIG9mIHB1c2hlZCBidWZmZXJzCi0JICBDbGllbnRzIHN1Y2ggYXMgRmlyZWZveCByZXF1aXJlIHRoZSBcclxuIGFmdGVyIHRoZSBwYXlsb2FkLgotCi0yMDExLTA2LTE2IDE0OjUyOjUxICswMjAwICBCcmFua28gU3ViYXNpYyA8YnJhbmtvQGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGF2b2lkIGxvb3Bpbmcgd2hlbiBzZWFyY2hpbmcgZm9yIGNsdXN0ZXJzCi0JICBGaXhlcyBzb21lIGJ1Z3MgdGhhdCByZXN1bHRzIGluIHRoZSBkZW11eGVyIGxvb3Bpbmcgd2hlbiBzZWFjaGluZwotCSAgZm9yIGNsdXN0ZXJzIGluIG5vbi1maW5hbGl6ZWQgZmlsZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMTk1Ci0KLTIwMTEtMDYtMzAgMTI6MzA6MjIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JICBtdWx0aWZpbGU6IHBvcnQgdG8gMC4xMAotCSAgKiB1c2UgR19ERUZJTkVfVFlQRQotCSAgKiBhZGp1c3QgdG8gbmV3IEdzdEJ1ZmZlcgotCSAgKiBtaXNjIGNhcHMgaGFuZGxpbmcKLQotMjAxMS0wNi0zMCAxMTozNToyMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JICBjdXR0ZXI6IHBvcnQgdG8gMC4xMQotCSAgKiB1c2UgR19ERUZJTkVfVFlQRQotCSAgKiBhZGp1c3QgdG8gbmV3IEdzdEJ1ZmZlcgotCSAgKiBtaW5vciBtaXNjCi0KLTIwMTEtMDYtMzAgMTE6MTc6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmM6Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2xpbWl0ZXIuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmM6Ci0JICByZXBsYXlnYWluOiBwb3J0IHRvIDAuMTEKLQkgICogdXNlIEdfREVGSU5FX1RZUEUKLQkgICogYWRqdXN0IHRvIG5ldyBHc3RCdWZmZXIKLQotMjAxMS0wNi0zMCAxMDo1MzowOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5Ci0KLTIwMTEtMDYtMzAgMTA6NTE6NTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBwb3J0IHRvIDAuMTEKLQkgICogdXNlIEdfREVGSU5FX1RZUEUKLQkgICogYWRqdXN0IHRvIG5ldyBHc3RCdWZmZXIKLQotMjAxMS0wNi0zMCAxMDozODo0OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IHBvcnQgdG8gMC4xMQotCSAgKiB1c2UgR19ERUZJTkVfVFlQRQotCSAgKiBhZGp1c3QgdG8gbmV3IEdzdEJ1ZmZlcgotCi0yMDExLTA2LTMwIDEwOjMwOjE2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JICBlcXVhbGl6ZXI6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA2LTEwIDE4OjU0OjQ4ICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FwYXJzZTogZml4IHJlZmVyZW5jZSBjb3VudGluZyBvZiBwYXJzZS0+c3RyZWFtaGVhZGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUyMjg2Ci0JICBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotMjAxMS0wNi0yOSAxNDozOTo1MiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IERvbid0IHJvdW5kIHVwIHNpemUgb2YgZW5jb2RlZCBidWZmZXJzCi0JICBGb3Igc29tZSByZWFzb24sIGluIGNvZGUgZGF0aW5nIHRvIDIwMDEsIGVuY29kZWQganBlZyBidWZmZXJzIHdlcmUKLQkgIHJvdW5kZWQgdXAgdG8gbXVsdGlwbGVzIG9mIDQgYnl0ZXMuICBXaXRoIHRoZSBhZGRlZCBib251cyB0aGF0IHRoZQotCSAgZXh0cmEgYnl0ZXMgYXJlIHVud3JpdHRlbiwgY2F1c2luZyB2YWxncmluZCBpc3N1ZXMuICBPb3BzLiAgSSBjYW4ndAotCSAgdGhpbmsgb2YgYW55IHJlYXNvbiB3aHkgSlBFRyBidWZmZXJzIG5lZWQgdG8gYmUgbXVsdGlwbGVzIG9mIDQgYnl0ZXMsCi0JICBzbyBJIHJlbW92ZWQgdGhlIHBhZGRpbmcuICBUaGVyZSBtaWdodCBiZSBzb21lIGNvZGUgc29tZXdoZXJlIHRoYXQKLQkgIGRlcGVuZHMgb24gdGhpcyBiZWhhdmlvciwgc28gaWYgdGhpcyBuZWVkcyB0byBiZSByZXZlcnRlZCwgcGxlYXNlIGZpeAotCSAgdGhlIHZhbGdyaW5kIGlzc3Vlcy4KLQotMjAxMS0wNi0yOSAxMjo0NjoyMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pc29tcDQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaXNvbXA0L2F0b21zLmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuYzoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jOgotCSogZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguaDoKLQkgIGlzb21wNDogcG9ydCB0byAwLjExCi0KLTIwMTEtMDYtMjggMTI6NTU6NDUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogdHdlYWsgc29tZSBwb3J0ZWQgc2VnbWVudCBoYW5kbGluZwotCSAgLi4uIHRvIGF2b2lkIGxvc2luZyBkdXJhdGlvbiBkdXJpbmcgcHVzaCBtb2RlIHNlZWtpbmcsIGFuZCB0byBwcm9wZXJseQotCSAgYWNjdW11bGF0ZSBydW5uaW5nIHRpbWUgd2hlbiBzZWdtZW50IHNlZWtpbmcuCi0KLTIwMTEtMDYtMjkgMTI6MDU6MDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZnJlZSBkYXRlIHRhZwotCi0yMDExLTA2LTI4IDEyOjI2OjM3ICswMjAwICBKb25hcyBMYXJzc29uIDxqb25hcy5sYXJzc29uQGhpcS5zZT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IG5vdCBzbyBncmVlZHkgbWluaW11bSBmcmFtZSBzaXplCi0JICBGaXhlcyAjNjUzNTU5LgotCi0yMDExLTA2LTI1IDExOjM5OjIzIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiByZW1vdmUgbm9uLXBrZy1jb25maWcgY2hlY2sgZm9yIHNob3V0Ci0JICBGaXhlczogNjUzMzI3Ci0KLTIwMTEtMDYtMjAgMTg6NDk6NTcgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmM6Ci0JICBkdjEzOTRzcmM6IG1ha2UgdGhlIGludGVybmFsIGNsb2NrIHRocmVhZCBzYWZlCi0JICBGaXhlczogIzY1MzA5MS4KLQotMjAxMS0wNi0yNCAxMTo1NDoyOSArMDIwMCAgTWlndWVsIEFuZ2VsIENhYnJlcmEgTW95YSA8bWFkbWFjMjUwMUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiByZXR1cm4gY29ycmVjdCB0eXBlIHdoZW4gYXNzZXJ0aW9uIGZhaWxzCi0KLTIwMTEtMDYtMjMgMTE6Mjg6MjcgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNjliOTgxZiB0byA2MDVjZDlhCi0KLTIwMTEtMDYtMjIgMTY6NDE6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3A6IGZpeCBmb3IgdXJpIGNoYW5nZXMKLQotMjAxMS0wMi0wMiAxNjoxODo1NCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5oOgotCSAgcHVsc2U6IERyb3Agc3VwcG9ydCBmb3IgUEEgdmVyc2lvbnMgYmVmb3JlIDAuOS4xNgotCSAgVGhpcyBkcm9wcyBzdXBwb3J0IGZvZiBQdWxzZUF1ZGlvIHZlcnNpb25zIHByaW9yIHRvIDAuOS4xNiwgd2hpY2ggd2FzCi0JICByZWxlYXNlZCBhYm91dCAxLjUgeWVhcnMgYWdvLiBUZXN0aW5nIHdpdGggdmVyeSBvbGQgdmVyc2lvbnMgaXMgbm90Ci0JICBmZWFzaWJsZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtYWludGFpbiAyIGluZGVwZW5kZW50IGNvZGUtcGF0aHMuCi0KLTIwMTEtMDYtMjEgMTg6MjQ6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWwKLQotMjAxMS0wNi0yMSAxODoxOTowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBmaXggZm9yIGhlYWRlciBjbGVhbnVwcwotCi0yMDExLTA2LTIxIDE1OjE1OjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkgIHJ0cG1wNGFkZXBheTogZml4IG91dHB1dCBidWZmZXIgdGltZXN0YW1wcyBpbiBjYXNlIG9mIG11bHRpcGxlIGZyYW1lcwotCi0yMDExLTA2LTIwIDE2OjQ3OjM2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBUaGUgc2lnbmFsIGhhcyA1IGFyZ3VtZW50cywgbm90IDQKLQotMjAxMS0wNi0yMCAxMjoxMzoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogdXNlIHN0cmluZyBmb3IgdmlkZW8gZm9ybWF0IG5vdwotCi0yMDExLTA2LTIwIDEyOjA0OjQ4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSAgYXZpOiBsaW5rIGFnYWluc3QgZ3N0dmlkZW8gbm93Ci0KLTIwMTEtMDYtMjAgMTI6MDM6MjQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmk6IHBvcnQgdG8gbmV3IGNhcHMKLQotMjAxMS0wNi0xOCAxMzo0MzowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIEJ1bXAgZ2l0IHZlcnNpb24gYWZ0ZXIgdW5wbGFubmVkIDAuMTAuMzAgcmVsZWFzZQotCSAgTWVyZ2UgYnJhbmNoICcwLjEwLjMwJwotCSAgQ29uZmxpY3RzOgotCSAgY29uZmlndXJlLmFjCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbAotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWwKLQkgIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbAotCSAgd2luMzIvY29tbW9uL2NvbmZpZy5oCi0KLTIwMTEtMDYtMTcgMTA6Mzc6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmg6Ci0JICBzdW5hdWRpbzogZml4IHR5cG8gaW4gY29tbWVudAotCi0yMDExLTA2LTE3IDE4OjEyOjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDYtMTcgMTg6MTE6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b2RldGVjdDogZml4IGNhcHMKLQotMjAxMS0wNi0xNiAxNTozODoxMCArMDIwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpcy5kZWJldGhlbmNvdXJ0QGNvbGxhYm9yYS5jb20+Ci0KLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgIGdvb206IGZpeCB1bnVzZWQtYnV0LXNldC1jb21waWxlciB3YXJuaW5ncwotCSAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJlcyB2YXJpYWJsZXMsIGNvcmUgY2hlY2tzIGV4aXN0YW5jZQotCSAgYW5kIHR5cGUgb2YgdGhlc2UgZmllbGRzIGZvciB1cyBhbHJlYWR5IHZpYSB0aGUgdGVtcGxhdGUKLQkgIGNhcHMsIGFuZCB3ZSBrbm93IHRoYXQgdGhlc2UgZmllbGRzIGV4aXN0IGJlY2F1c2Ugd2UndmUKLQkgIGZpeGF0ZWQgdGhlbSBiZWZvcmUgaW4gX25lZ290aWF0ZSgpLgotCi0yMDExLTA2LTE3IDAzOjA3OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSAgYXVkaW9lY2hvOiBmaXggcGFyYW0gZmxhZ3MKLQkgIElmIHRoZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNoYW5nZWQgaW4gcGF1c2VkJnBsYXlpbmcsIGl0IGlzIG5vdCBjb250cm9sYWJsZS4gU2V0Ci0JICB0aGUgYXBwcm9wcmlhdGUgbXV0YWJpbGl0eSBmbGFnIGluc3RlYWQuCi0KLT09PSByZWxlYXNlIDAuMTAuMzAgPT09Ci0KLTIwMTEtMDYtMTUgMjM6NTc6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMzAKLQkgIFRoaXMgaXMgYW4gYWQtaG9jIHJlbGVhc2UgdGhhdCBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIDAuMTAuMjk6Ci0JICAqIHdvcmsgYXJvdW5kIEdMaWIgYXRvbWljIG9wcyBBUEkgY2hhbmdlCi0JICAqIGJldHRlciBoYW5kbGluZyBvZiBtYWxmb3JtZWQgYnVmZmVycyBpbiBSVFAgZGVwYXlsb2RlcnMKLQkgICogc29tZSBtaW5vciBjb21waWxhdGlvbiBmaXhlcwotCi0yMDExLTA2LTA4IDE4OjMzOjEwICswMzAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSAgdWRwOiBGaXggY29tcGlsZXIgd2FybmluZyBvbiBtaW5ndy13NjQKLQkgIEZpeGVzOiAjNjUyMTQ0LgotCSAgZ3N0dWRwbmV0dXRpbHMuaDozMjowOiBlcnJvcjogIldJTlZFUiIgcmVkZWZpbmVkCi0JICAvdXNyL2k2ODYtdzY0LW1pbmd3MzIvc3lzLXJvb3QvbWluZ3cvaW5jbHVkZS9fbWluZ3cuaDoyMzE6MDogbm90ZTogdGhpcyBpcyB0aGUKLQkgIGxvY2F0aW9uIG9mIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uCi0KLTIwMTEtMDYtMDQgMTM6NDk6NTIgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICBpbnRlcmxlYXZlOiBXb3JrIGFyb3VuZCBjaGFuZ2VzIGluIGdfYXRvbWljIEFQSQotCSAgU2VlICM2NTE1MTQgZm9yIGRldGFpbHMuCi0KLTIwMTEtMDUtMTggMTI6MzY6NDAgKzAyMDAgIEpvc2UgQW50b25pbyBTYW50b3MgQ2FkZW5hcyA8c2FudG9zY2FkZW5hc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSAgcnRwOiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IHByb2Nlc3NpbmcgcGF5bG9hZCBidWZmZXJzCi0JICBUaGlzIGNvbW1pdCBjaGVja3MgaWYgdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0JICBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgYW5kCi0JICBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9zdWJidWZmZXIgaXMgTlVMTCBiZWZvcmUgdXNpbmcgaXQuCi0KLTIwMTEtMDUtMTYgMDk6MDQ6MzEgKzAyMDAgIFBpbm8gVG9zY2FubyA8dG9zY2Fuby5waW5vQHRpc2NhbGkuaXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuYzoKLQkgIHB1bHNlOiBEZWZpbmUgUEFUSF9NQVggaWYgaXQgaXNuJ3QgZGVmaW5lZAotCSAgR05VIEh1cmQgZm9yIGV4YW1wbGUgZG9lc24ndCBkZWZpbmUgaXQuCi0KLTIwMTEtMDQtMjkgMDg6NTU6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBBbGxvdyBzZXRjYXBzIHRvIGJlIGNhbGxlZCBhZnRlciBhIGZvcm1hdCB3YXMgbmVnb3RpYXRlZCBpZiBpdCdzIGNvbXBhdGlibGUKLQkgIE90aGVyd2lzZSB3YXZlbmMgd2lsbCBmYWlsIGlmIHVwc3RyZWFtIGRlY2lkZXMgdG8gc2V0IGVxdWl2YWxlbnQgY2FwcyBvciBjYXBzCi0JICB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbGF0ZXIuCi0JICBUaGFua3MgdG8gQWxleGFuZGVyIFNjaHJlbW1lciBmb3IgZmluZGluZyB0aGlzIGJ1Zy4KLQotMjAxMS0wNi0xNSAxNTowNjoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIFJFUVVJUkVNRU5UUzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvZXNkL01ha2VmaWxlLmFtOgotCSogZXh0L2VzZC9lc2Rtb24uYzoKLQkqIGV4dC9lc2QvZXNkbW9uLmg6Ci0JKiBleHQvZXNkL2VzZHNpbmsuYzoKLQkqIGV4dC9lc2QvZXNkc2luay5oOgotCSogZXh0L2VzZC9nc3Rlc2QuYzoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvYXMtYXJ0cy5tNDoKLQkqIG00L2VzZC5tNDoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgUmVtb3ZlIGVzb3VuZC9lc2RzaW5rIHBsdWdpbgotCi0yMDExLTA2LTE1IDE0OjM3OjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBSRVFVSVJFTUVOVFM6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2djb25mL01ha2VmaWxlLmFtOgotCSogZXh0L2djb25mL2dzdGdjb25mLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmYuaDoKLQkqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5jOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmg6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zcmMuaDoKLQkqIGV4dC9nY29uZi9nc3RnY29uZmVsZW1lbnRzLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZlbGVtZW50cy5oOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuaDoKLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc3JjLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5oOgotCSogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzoKLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmg6Ci0JKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc3JjLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc3JjLmg6Ci0JKiBnY29uZi8uZ2l0aWdub3JlOgotCSogZ2NvbmYvTWFrZWZpbGUuYW06Ci0JKiBnY29uZi9nc3RyZWFtZXIuc2NoZW1hcy5pbjoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvZ2NvbmYtMi5tNDoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgZ2NvbmYgZWxlbWVudHMgYW5kIHBsdWdpbgotCSAgR0NvbmYgd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIEdTZXR0aW5ncyBldGMuCi0KLTIwMTEtMDYtMTUgMTU6MTc6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGZpeCB1bml0aWFsaXplZCBhY2Nlc3MKLQotMjAxMS0wNi0wOSAyMTowNjoyOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkgIG1hdHJvc2thOiBhZGQgbWlzc2luZyBzdGRpbyBpbmNsdWRlIGZvciBzc2NhbmYKLQotMjAxMS0wNi0xMyAxOTowODozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA2LTEzIDE3OjUxOjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgLWdvb2Q6IHBvcnQgc29tZSBtb3JlIHBsdWdpbnMKLQotMjAxMS0wNi0xMyAxNzoxNDo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcDogZml4IGZvciBmbHVzaF9zdG9wIEFQSSBjaGFuZ2UKLQotMjAxMS0wNi0xMyAxNzoxNDowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkgIHJ0cDogcG9ydCBzb21lIG1vcmUgKGRlKXBheWxvYWRlcgotCi0yMDExLTA2LTEzIDE3OjA1OjE5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBub3Qgc28gZ3JlZWR5IG1pbmltdW0gZnJhbWUgc2l6ZQotCSAgLi4uIHdoaWNoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBwYXJzaW5nIGFueXdheSwgYW5kIGF2b2lkcyBpbnRyb2R1Y2luZwotCSAgcmVkdW5kYW50IGFkZGl0aW9uYWwgbGF0ZW5jeS4KLQotMjAxMS0wNi0xMyAxNjozMzo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICAtZ29vZDogdXBkYXRlIGZvciBidWZmZXIgQVBJIGNoYW5nZQotCi0yMDExLTA2LTEzIDE2OjMzOjQ2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIHJ0cDogcG9ydCB0byAwLjExCi0KLTIwMTEtMDYtMTMgMTM6MjU6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSAgcnRwOiBmaXggZm9yIEFQSSBjaGFuZ2VzIGluIHRoZSBiYXNlIGNsYXNzZXMKLQotMjAxMS0wNi0xMyAxMzowNzo1MCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogdXNlIGNhcHMgZXZlbnQgZm9yIG5lZ290aWF0aW9uCi0KLTIwMTEtMDYtMTMgMTM6MDc6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBmaXggZm9yIGZsdXNoIHN0b3AgZXZlbnQgY2hhbmdlcwotCi0yMDExLTA2LTA4IDE4OjMzOjEwICswMzAwICBSYWltbyBKw6RydmkgPHJhaW1vLmphcnZpQGdtYWlsLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSAgdWRwOiBGaXggY29tcGlsZXIgd2FybmluZyBvbiBtaW5ndy13NjQKLQkgIEZpeGVzOiAjNjUyMTQ0LgotCSAgZ3N0dWRwbmV0dXRpbHMuaDozMjowOiBlcnJvcjogIldJTlZFUiIgcmVkZWZpbmVkCi0JICAvdXNyL2k2ODYtdzY0LW1pbmd3MzIvc3lzLXJvb3QvbWluZ3cvaW5jbHVkZS9fbWluZ3cuaDoyMzE6MDogbm90ZTogdGhpcyBpcyB0aGUKLQkgIGxvY2F0aW9uIG9mIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uCi0KLTIwMTEtMDYtMTEgMTg6NTg6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgIGdvb206IGZpeCBmb3IgYnVmZmVycG9vbCB1cGRhdGUKLQotMjAxMS0wNi0xMCAxODowNTowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogdXBkYXRlIGZvciBhbGlnbm1lbnQgY2hhbmdlCi0KLTIwMTEtMDYtMDkgMTc6NTY6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogcG9ydCBzb21lIG1vcmUKLQotMjAxMS0wNi0wOSAxNzo1MjozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwOiBwb3J0IHRvIDAuMTEKLQotMjAxMS0wNi0wOSAxNzo1MDowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcDogcG9ydCB0byAwLjExCi0KLTIwMTEtMDYtMDkgMTE6Mzc6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgIGFhc2luazogcmVnaXN0ZXIgdGVtcGxhdGUgYW5kIGtsYXNzIGNvcnJlY3RseQotCi0yMDExLTA2LTA5IDEwOjUwOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmg6Ci0JICBnb29tOiBwb3J0IGdvb20KLQotMjAxMS0wNi0wOCAxODowNjo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA2LTA4IDE4OjA1OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JICBhc3Npbms6IHBvcnQgYWFzaW5rIHRvIDAuMTEKLQotMjAxMS0wNi0wNyAxMjowNjowOCArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2JyZWFrbXlkYXRhLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9jcHVyZXBvcnQuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNkZWJ1Zy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc3NldHRlci5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2c2Vlay5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2RlYnVndXRpbHMvcHJvZ3Jlc3NyZXBvcnQuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RwbHVnaW4uYzoKLQkgIGRlYnVndXRpbHM6IFN3aXRjaCBmcm9tIEdTVF9CT0lMRVJQTEFURSB0byBHX0RFRklORV9UWVBFCi0KLTIwMTEtMDYtMDcgMTE6MjU6MTggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB2aWRlb2ZpbHRlcjogVXNlIG5ldyBHc3RCYXNlVHJhbnNmb3JtOjp0cmFuc2Zvcm1fY2FwcyBBUEkKLQotMjAxMS0wNi0wNyAxMToyMzo1NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzoKLQkgIGF1cGFyc2U6IERvbid0IHVzZSBHU1RfQk9JTEVSUExBVEUKLQotMjAxMS0wNi0wNyAxMToyMjozNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4YmFzZWZpcmZpbHRlcjogQnVmZmVycyBubyBsb25nZXIgaGF2ZSBjYXBzCi0KLTIwMTEtMDYtMDcgMTE6MjA6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JICBhbHBoYTogVXNlIG5ldyB0cmFuc2Zvcm1fY2FwcyB2bWV0aG9kICh3aXRoIGZpbHRlcikKLQotMjAxMS0wNi0wNiAyMDo0MzozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IGZpeCBzb21lIG1vcmUgcGFyc2VycwotCi0yMDExLTA2LTA2IDE4OjIxOjA0ICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBtYXRyb3NrYS1yZWFkLWNvbW1vbi5bY2hdIGZyb20KLQkgIG1hdHJvc2thLWRlbXV4LmMgYW5kIG1hdHJvc2thLXBhcnNlLmM6Ci0JICAtIGdzdF9tYXRyb3NrYV97ZGVtdXgscGFyc2V9X3BhcnNlX2NoYXB0ZXJzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDYtMDYgMTQ6NDc6MjcgKzA1MzAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBtYXRyb3NrYS1yZWFkLWNvbW1vbi5bY2hdIGZyb20KLQkgIG1hdHJvc2thLWRlbXV4LmMgYW5kIG1hdHJvc2thLXBhcnNlLmM6Ci0JICAtIGdzdF9tYXRyb3NrYV97ZGVtdXgscGFyc2V9X3BhcnNlX2F0dGFjaG1lbnRzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDYtMDYgMTI6NDM6MTQgKzA1MzAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogcmVmYWN0b3IgY29kZSBjb21tb24gdG8gbWF0cm9za2FkZW11eCBhbmQgbWF0cm9za2FwYXJzZQotCSAgTW92ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcGFyc2VfYXR0YWNoZWRfZmlsZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA2LTA1IDIyOjQ1OjU1ICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9wYXJzZV9pbmZvCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDYtMDUgMTA6MTU6MjMgKzA1MzAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBtYXRyb3NrYS1yZWFkLWNvbW1vbi5bY2hdIGZyb20KLQkgIG1hdHJvc2thLWRlbXV4LmMgYW5kIG1hdHJvc2thLXBhcnNlLmM6Ci0JICAtIGdzdF9tYXRyb3NrYV97ZGVtdXgscGFyc2V9X3BhcnNlX21ldGFkYXRhCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDYtMDUgMDk6NTQ6NDIgKzA1MzAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogcmVmYWN0b3IgY29kZSBjb21tb24gdG8gbWF0cm9za2FkZW11eCBhbmQgbWF0cm9za2FwYXJzZQotCSAgTW92ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcGFyc2VfbWV0YWRhdGFfaWRfdGFnCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDYtMDUgMDI6MjQ6NDEgKzA1MzAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogcmVmYWN0b3IgY29kZSBjb21tb24gdG8gbWF0cm9za2FkZW11eCBhbmQgbWF0cm9za2FwYXJzZQotCSAgTW92ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcGFyc2VfbWV0YWRhdGFfaWRfc2ltcGxlX3RhZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA2LTA2IDEyOjQyOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmVzZXQgc3RhdGUgdHJhY2tpbmcgdmFyaWFibGUgd2hlbiBhcHByb3ByaWF0ZQotCSAgLi4uIHNvIHdlIGRvbid0IGVuZCB1cCBpbnRlcnJ1cHRpbmcgYW4gb3BlcmF0aW9uIHRoYXQgc2hvdWxkIG5vdCBiZSBpbnRlcnJ1cHRlZAotCSAgYmFzZWQgb24gdGhlIGluZGljYXRpb24gb2YgYSBwcmV2aW91cyBpbnRlcnJ1cHRhYmxlIG9wZXJhdGlvbi4KLQotMjAxMS0wNi0wNCAxMzo0OTo1MiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIGludGVybGVhdmU6IFdvcmsgYXJvdW5kIGNoYW5nZXMgaW4gZ19hdG9taWMgQVBJCi0JICBTZWUgIzY1MTUxNCBmb3IgZGV0YWlscy4KLQotMjAxMS0wNi0wNCAxMzo0MzowMCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc2luay5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzaW5rLmg6Ci0JICBzb3VwaHR0cHNpbms6IGNvZGUgY2xlYW51cAotCi0yMDExLTA2LTA1IDAyOjAwOjA4ICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSAgbWF0cm9za2FwYXJzZTogVXNlIEFSVElTVCB0YWcgaW5zdGVhZCBvZiBBVVRIT1IgZm9yIEdTVF9UQUdfQVJUSVNUCi0JICBBVVRIT1Igb25seSBleGlzdGVkIGluIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSBzcGVjIGFuZCBBUlRJU1QgaXMKLQkgIHRoZSBuZXcgcmVwbGFjZW1lbnQgZm9yIHRoaXMuIFdlIGFyZSBzdGlsbCByZWFkaW5nIGJvdGggdG8gc3RpbGwKLQkgIGJlIGNvbXBhdGlibGUgd2l0aCBvbGQgZmlsZXMuCi0JICBGaXhlcyBidWcgIzY0NDg3NS4KLQotMjAxMS0wNi0wMiAxODo1MToyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmMKLQotMjAxMS0wNi0wMiAxODo0NzozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkgIGF2aTogcG9ydCBBVkkgZWxlbWVudHMgdG8gbmV3IEFQSQotCi0yMDExLTA2LTAyIDEzOjM4OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IEZpcnN0IHF1ZXJ5IHRoZSBwZWVyIGR1cmF0aW9uIGluIHRoZSByZXF1ZXN0ZWQgZm9ybWF0IGJlZm9yZSBjb252ZXJ0aW5nIHRvIEJZVEVTCi0JICBGaXhlcyB1c2FnZSBvZiBkdmRlbXV4IGFmdGVyIGFub3RoZXIgZGVtdXhlciwgZS5nLiBteGZkZW11eC4KLQkgIEZpeGVzIGJ1ZyAjNjUwNTAzLgotCi0yMDExLTA2LTAyIDEwOjQxOjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzaW5rLmM6Ci0JICBzb3VwaHR0cHNpbms6IEZpeCByZWZjb3VudGluZyBvZiB0aGUgInNlc3Npb24iIHByb3BlcnR5Ci0JICBQcm9wZXJ0aWVzIHNob3VsZCBuZXZlciB0YWtlIG93bmVyc2hpcCBvZiB0aGUgdmFsdWVzCi0JICBwYXNzZWQgdG8gdGhlbS4KLQotMjAxMS0wNi0wMSAxNzowNDoyNyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBGb3Igc3RyZWFtaW5nIGZpbGVzLCBwdXNoIHRhZ3MgZmlyc3QKLQotMjAxMS0wNS0yNCAxNDo1MjowMSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9zb3VwL01ha2VmaWxlLmFtOgotCSogZXh0L3NvdXAvZ3N0c291cC5jOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzaW5rLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNpbmsuaDoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBBZGQgc291cGh0dHBzaW5rCi0KLTIwMTEtMDYtMDEgMTA6MTk6MzEgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGFsbG93IHNraXAtZmlyc3QtYnl0ZXMgb2YgZnVsbCBidWZmZXIgc2l6ZQotCi0yMDExLTA1LTMwIDE4OjMxOjUwICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9wYXJzZV9oZWFkZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0zMCAxMjowOTozMSArMDIwMCAgQW50b25pbyBGcmVkaWFuaSA8YW50b25pby5mcmVkaWFuaUBpbndpbmQuaXQ+Ci0KLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBVc2UgR1NUX1RBR19JTUFHRSBmb3IgY292ZXJhcnQgdG9vCi0JICBGaXhlcyBidWcgIzYzODEwNy4KLQotMjAxMS0wNS0zMCAxMDo0MDowOCArMDUzMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fZ2V0X3NlZWtfdHJhY2sKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcmVzZXRfc3RyZWFtcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTI4IDIyOjA0OjM0ICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2F7ZGVtdXgscGFyc2V9X2ZvdW5kX2dsb2JhbF90YWcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0yOCAxMDo1OTowOSArMDUzMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX2luZGV4X3NlZWtfZmluZAotCSAgLSBnc3RfbWF0cm9za2F7ZGVtdXgscGFyc2V9X2RvX2luZGV4X3NlZWsKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0yNyAyMzoxNToyMyArMDUzMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV90cmFja251bWJlcl91bmlxdWUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0yNyAyMDoyODoxOSArMDUzMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9kZWNvZGVfZGF0YQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTI3IDE5OjMwOjQ4ICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBtYXRyb3NrYS1yZWFkLWNvbW1vbi5bY2hdIGZyb20KLQkgIG1hdHJvc2thLWRlbXV4LmMgYW5kIG1hdHJvc2thLXBhcnNlLmM6Ci0JICAtIGdzdF9tYXRyb3NrYV97ZGVtdXgscGFyc2V9X2dldF9sZW5ndGgKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0yNyAwOToxNzo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IFJldmVydCAxYTkwYTZjNCBhbmQgZHJvcCBEaXJhYyBzdXBwb3J0IGFnYWluCi0JICBJdCBkb2VzIG5vdCB3b3JrIGF0IGFsbCAoQS9WIHN5bmMgaXNzdWVzKSwgaXMgbm90IHZlcnkgdXNlZnVsLAotCSAgb3RoZXIgY29udGFpbmVycyB3b3JrIG11Y2ggYmV0dGVyIHdpdGggRGlyYWMgYW5kIERpcmFjIGluIEFWSQotCSAgaXMgbm90IHN1cHBvcnRlZCBieSBvdGhlciBzb2Z0d2FyZS4KLQkgIEZpeGVzIGJ1ZyAjNTQxMjE1LgotCi0yMDExLTA1LTI2IDIzOjM1OjUyICswNTMwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9lbmNvZGluZ19jbXAKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcmVhZF90cmFja19lbmNvZGluZ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0yMyAxODowNjo0NCArMDMwMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcGVla19pZF9sZW5ndGhfcHVsbAotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9wZWVrX2lkX2xlbmd0aF9wdXNoCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDUtMjMgMTg6MDY6NDQgKzAzMDAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBtYXRyb3NrYS1yZWFkLWNvbW1vbi5bY2hdIGZyb20KLQkgIG1hdHJvc2thLWRlbXV4LmMgYW5kIG1hdHJvc2thLXBhcnNlLmM6Ci0JICAtIGdzdF9tYXRyb3NrYV97ZGVtdXgscGFyc2V9X3BlZWtfYWRhcHRlcgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTI2IDEyOjQ4OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6Ci0JICB4dmltYWdlc2luazogRmFsbGJhY2sgdG8gbm9uLVhTaG0gbW9kZSBpZiBhbGxvY2F0aW5nIHRoZSBYU2htIGltYWdlIGZhaWxlZAotCSAgRml4ZXMgYnVnICM2MzA0NTYuCi0KLTIwMTEtMDUtMjYgMTI6MjI6NTIgKzAyMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgcnRwbXA0dnBheTogRGVwcmVjYXRlZCBzZW5kLWNvbmZpZyBwcm9wZXJ0eSBhbmQgcmVwbGFjZSBieSBjb25maWctaW50ZXJ2YWwKLQkgIEZpeGVzIGJ1ZyAjNjIyNDEyLgotCi0yMDEwLTA2LTIzIDExOjEyOjAwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBVVEYtOCBzdWJ0aXRsZXMgbWF5IGhhdmUgbWFya3VwCi0JICBGaXhlcyAjNjE2OTM2LgotCi0yMDExLTAxLTIzIDE1OjU2OjQ5ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuaDoKLQkgIGNhaXJvdGV4dG92ZXJsYXk6IGZvcndhcmQgbmV3IHNlZ21lbnQgZXZlbnRzIGZyb20gdGhlIHNpbmsgdG8gdGhlIHNvdXJjZQotCSAgTm90IGRvaW5nIHNvIHdpbGwgY2F1c2UgYnVmZmVycyB0byBiZSByZWNlaXZlZCBieSBkb3duc3RyZWFtIHdpdGhvdXQKLQkgIGEgdGltZSBiYXNlIHNldC4KLQkgIFdlIHVzZSB0aGUgc2FtZSBtZXRob2QgYXZpbXV4IHVzZXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgZXZlbnQgd2hlbgotCSAgY29sbGVjdHBhZHMgZ290IHRoZSBzaW5rIGV2ZW50IGZ1bmN0aW9uLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDMyMwotCi0yMDExLTAxLTI0IDExOjExOjQ4ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JICB0ZXh0b3ZlcmxheTogZm9yd2FyZCBzb3VyY2UgZXZlbnRzIHRvIHNpbmtzCi0JICBFdmVudHMgYXJlIHBhc3NlZCB0byB0aGUgdmlkZW8gc2luaywgYW5kIHRvIHRoZSB0ZXh0IHNpbmsgaWYgaXQgaXMKLQkgIGxpbmtlZC4KLQkgIFRoaXMgd2lsbCBhbGxvdyBzZWVraW5nLCBmb3IgaW5zdGFuY2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg2NDUwCi0KLTIwMTEtMDUtMjUgMjE6MTI6MTIgKzAyMDAgIERhdmlkIEhveXQgPGRob3l0QGxsbmwuZ292PgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4Lmg6Ci0JICBtdWx0aXBhcnRkZW11eDogQWRkIHByb3BlcnR5IHRvIGFzc3VtZSBhIHNpbmdsZSBzdHJlYW0gYW5kIGVtaXQgbm8tbW9yZS1wYWRzCi0JICBGaXhlcyBidWcgIzYxNjY4Ni4KLQotMjAxMS0wNS0yNSAxNDo1MDoyNiArMDIwMCAgTWlndWVsIEFuZ2VsIENhYnJlcmEgTW95YSA8bWFkbWFjMjUwMUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHVuaWZvcm0gdW5rbm93biBtZXNzYWdlIGhhbmRsaW5nCi0JICBEbyB0aGUgc2FtZSBwcm9jZXNzaW5nIGluIGFsbCB0aGUgY2FzZXMgd2hlbiBhbiB1bmtub3duIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCi0JICBUaGF0IGlzLCBnaXZlIGEgd2FybmluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTEwNTkKLQotMjAxMS0wNS0yMyAxODowNjo0NCArMDMwMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaDoKLQkgIG1hdHJvc2thOiByZWZhY3RvciBjb2RlIGNvbW1vbiB0byBtYXRyb3NrYWRlbXV4IGFuZCBtYXRyb3NrYXBhcnNlCi0JICBNb3ZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9wZWVrX3B1bGwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA4NzcKLQotMjAxMS0wNS0yMyAxODowNjo0NCArMDMwMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogcmVmYWN0b3IgY29kZSBjb21tb24gdG8gbWF0cm9za2FkZW11eCBhbmQgbWF0cm9za2FwYXJzZQotCSAgTW92ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIG1hdHJvc2thLXJlYWQtY29tbW9uLltjaF0gZnJvbQotCSAgbWF0cm9za2EtZGVtdXguYyBhbmQgbWF0cm9za2EtcGFyc2UuYzoKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcGVla19ieXRlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTIzIDE4OjA2OjQ0ICswMzAwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIE1vdmUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gbWF0cm9za2EtcmVhZC1jb21tb24uW2NoXSBmcm9tCi0JICBtYXRyb3NrYS1kZW11eC5jIGFuZCBtYXRyb3NrYS1wYXJzZS5jOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9lbmNvZGluZ19vcmRlcl91bmlxdWUKLQkgIC0gZ3N0X21hdHJvc2thX3tkZW11eCxwYXJzZX1fcmVhZF90cmFja19lbmNvZGluZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTI0IDE4OjI3OjEwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b2RldGVjdDogcG9ydCB0byBuZXcgQVBJCi0KLTIwMTEtMDUtMjQgMTc6MzQ6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYwotCSAgZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jCi0JICBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jCi0JICBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmMKLQkgIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jCi0KLTIwMTEtMDUtMjQgMTM6MTI6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSAgcGNtdWRlcGF5OiBhbGxvdyB2YXJpYWJsZSBzYW1wbGUgcmF0ZQotCi0yMDExLTA1LTI0IDEzOjExOjU0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkgIHBjbWFkZXBheTogYWxsb3cgdmFyaWFibGUgc2FtcGxlIHJhdGUKLQotMjAxMC0wNC0wNCAwNjo0Mzo0MSAtMDUwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IGFkZCBub3JtIHByb3BlcnR5Ci0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEd1ZW5uYWRpIExpYWtob3ZldHNraS4KLQkgIHYyOiB1cGRhdGVzIGJlY2F1c2UgSSBmb3Jnb3QgdG8gYWRkIEdzdFR1bmVyIGludGVyZmFjZSB0byB2NGwyc2luawotCSAgdjM6IHVwZGF0ZSB0byBhZGQgYWxsIHBvc3NpYmxlIHZhbHVlcyB0byBub3JtIGVudW0KLQotMjAxMS0wNS0yMyAyMDo0NjowNCArMDMwMCAgRGViYXJzaGkgUmF5IDxyaXNoaUBnbnUub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IGZpeGVkIGNvcHlyaWdodCBoZWFkZXJzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDUtMjMgMTg6MDY6NDQgKzAzMDAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogcmVmYWN0b3IgY29kZSBjb21tb24gdG8gbWF0cm9za2FkZW11eCBhbmQgbWF0cm9za2FwYXJzZQotCSAgTW92ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBtYXRyb3NrYS1yZWFkLWNvbW1vbi5bY2hdIGZyb20KLQkgIG1hdHJvc2thLWRlbXV4LmMgYW5kIG1hdHJvc2thLXBhcnNlLmM6Ci0JICAtIGdzdF9tYXRyb3NrYV9kZWNvZGVfY29udGVudF9lbmNvZGluZ3MKLQkgIC0gZ3N0X21hdHJvc2thX2RlY29tcHJlc3NfZGF0YQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTIzIDE4OjQ4OjU3ICswMzAwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmg6Ci0JICBtYXRyb3NrYTogbW92ZSBHc3RNYXRyb3NrYXtEZW11eCxQYXJzZX06OnN0YXRlIHRvIEdzdE1hdHJvc2thUmVhZENvbW1vbgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDg3NwotCi0yMDExLTA1LTI0IDA5OjQ4OjU2ICswMjAwICBKb25hcyBMYXJzc29uIDxqb25hcy5sYXJzc29uQGhpcS5zZT4KLQotCSogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggYnVmZmVyIGxlYWsgd2l0aCBjb3JydXB0ZWQgZmlsZXMKLQkgIEZpeGVzIGJ1ZyAjNjUwOTEyLgotCi0yMDExLTA1LTIzIDAyOjQ2OjM4IC0wNzAwICBNaWd1ZWwgQW5nZWwgQ2FicmVyYSBNb3lhIDxtYWRtYWMyNTAxQGdtYWlsLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IHBhcmFtZXRlciB0eXBlIGluIHRyYWNlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwOTM3Ci0KLTIwMTEtMDUtMjMgMTg6MDY6NDQgKzAzMDAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oOgotCSAgbWF0cm9za2E6IHJlZmFjdG9yIGNvZGUgY29tbW9uIHRvIG1hdHJvc2thZGVtdXggYW5kIG1hdHJvc2thcGFyc2UKLQkgIFJlcGxhY2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2l0aCB0aGVpciBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fKgotCSAgY291bnRlcnBhcnRzOgotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9wYXJzZV9pbmRleAotCSAgLSBnc3RfbWF0cm9za2Ffe2RlbXV4LHBhcnNlfV9wYXJzZV9za2lwCi0JICAtIGdzdF9tYXRyb3NrYV97ZGVtdXgscGFyc2V9X3N0cmVhbV9mcm9tX251bQotCSAgSW50cm9kdWNlIEdzdE1hdHJvc2thUmVhZENvbW1vbiB0byBjb250YWluIHRob3NlIG1lbWJlcnMgb2YKLQkgIEdzdE1hdHJvc2thRGVtdXggYW5kIEdzdE1hdHJvc2thUGFyc2UgdGhhdCB3ZXJlIHVzZWQgYnkgdGhlIGFib3ZlCi0JICBmdW5jdGlvbnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwODc3Ci0KLTIwMTEtMDUtMjMgMTM6NTA6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiB0ZWxsIGJhc2VwYXJzZSB0aGUgZHVyYXRpb24gaW4gc2FtcGxlcyBmb3IgYmV0dGVyIGFjY3VyYWN5Ci0JICBUZWxsIEdzdEJhc2VQYXJzZSB0aGUgZHVyYXRpb24gaW4gc2FtcGxlcyBpbnN0ZWFkIG9mIHRpbWUsIHNvIHRoYXQKLQkgIGEgZHVyYXRpb24gcXVlcnkgaW4gREVGQVVMVCBmb3JtYXQgd2lsbCByZXR1cm4gdGhlIGNvcnJlY3QgbnVtYmVyCi0JICBvZiBzYW1wbGVzIHdpdGhvdXQgcm91bmRpbmcgZXJyb3JzLiBCYXNlcGFyc2Ugd2lsbCBjb252ZXJ0IHRoaXMKLQkgIGludG8gdGltZSBpdHNlbGYgd2hlbiBuZWVkZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwNzg1Ci0KLTIwMTEtMDUtMjMgMTM6MjU6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBhbHNvIHRyeSB1cHN0cmVhbSBmaXJzdCBmb3IgZHVyYXRpb24gcXVlcnkgaW4gREVGQVVMVCBmb3JtYXQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NTA3ODUKLQotMjAxMS0wNS0yMyAxMzoyMzoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IG1ha2UgY29udmVyc2lvbiBmcm9tIFRJTUUgdG8gREVGQVVMVCBmb3JtYXQgKHNhbXBsZXMpIHdvcmsKLQkgIEZpeCBjb3B5J24ncGFzdGUgZXJyb3IgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KLQotMjAxMS0wNS0yMyAxMTozNjozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IEltcGxlbWVudCBjb252ZXJzaW9ucyBiZXR3ZWVuIFRJTUUgYW5kIERFRkFVTFQgZm9ybWF0Ci0JICBGaXhlcyBidWcgIzY1MDc4NS4KLQotMjAxMS0wNS0yMiAxODo1MDo1MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGRvbid0IGVycm9yIG91dCBvbiBpbnZhbGlkIG1pbmltdW1fYmxvY2tzaXplIHZhbHVlIGluIHN0cmVhbWluZm8gaGVhZGVyCi0JICBXZSBkb24ndCB1c2UgaXQsIHNvIG1heSBqdXN0IGFzIHdlbGwgYWNjZXB0IGFuIGludmFsaWQgdmFsdWUKLQkgIG9mIDAgaGVyZSwgd2hpY2ggaXMgbGlrZWx5IGluY29uc2VxdWVudGlhbCBhbnl3YXkuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwNjkxCi0KLTIwMTEtMDUtMjAgMTA6MzQ6NDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JICBydHA6IGZpeCBzdGF0aWMgYXJyYXkgb3ZlcnJ1bnMgaW4gYSBuaWNlciB3YXkKLQkgIFVzZSBHX05fRUxFTUVOVFMgaW5zdGVhZCBvZiBoYXJkLWNvZGluZyB0aGUgYXJyYXkgc2l6ZS4KLQotMjAxMS0wNS0yMCAwMDo1Mzo0NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkgIHJ0cDogZml4IHN0YXRpYyBhcnJheSBvdmVycnVucwotCSAgWWVzIGFycmF5WzEwXSBoYXMgZWxlbWVudHMgZnJvbSAwLi4uOS4KLQotMjAxMS0wNS0xOSAyMzozMToxOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkgIGRvY3M6IHVwZGF0ZSBwbHVnaW4gaW50cm9zcGVjdGlvbiBkYXRhCi0JICBOb3cgbW9yZSBmaWxlcyBhcmUgbWVyZ2VkIGFuZCBwcm9kdWNlZCBpbiBhIGNhbm9uaWNhbCBmYXNoaW9uLCB3aGljaCBob3BlZnVsbHkKLQkgIGNyZWF0ZXMgbGVzcyBvciBubyBkZWx0YSBpbiB0aGUgZnV0dXJlLgotCi0yMDExLTA1LTE5IDIyOjU3OjE1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA5ZTViYmQ1IHRvIDY5Yjk4MWYKLQotMjAxMS0wNS0xOSAxODoyMTozMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBtaXNzaW5nIGJyZWFrCi0KLTIwMTAtMTEtMDggMTQ6MDY6MTUgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkgIGRlaW50ZXJsYWNlOiBBZGQgc3VwcG9ydCBmb3IgZGVpbnRlcmxhY2luZyB1c2luZyBidWZmZXIgY2Fwcy9mbGFncwotCSAgV2hlbiBub3QgdXNpbmcgdGhlIGZpZWxkYW5hbHlzaXMgZWxlbWVudCBpbW1lZGlhdGVseSB1cHN0cmVhbSBvZiBkZWludGVybGFjZSwKLQkgIGJlaGF2aW91ciBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC4gZmllbGRhbmFseXNpcyB3aWxsIHNldCB0aGUgY2FwcyBhbmQgZmxhZ3Mgb24KLQkgIHRoZSBidWZmZXJzIHN1Y2ggdGhhdCB0aGV5IGNhbiBiZSBpbnRlcnByZXRlZCBhbmQgYWN0ZWQgdXBvbiB0byBwcm9kdWNlCi0JICBwcm9ncmVzc2l2ZSBvdXRwdXQuCi0JICBUaGVyZSBhcmUgdHdvIG1haW4gbW9kZXMgb2Ygb3BlcmF0aW9uOgotCSAgLSBQYXNzaXZlIHBhdHRlcm4gbG9ja2luZwotCSAgUGFzc2l2ZSBwYXR0ZXJuIGxvY2tpbmcgaXMgYSBub24tYmxvY2tpbmcsIGxvdy1sYXRlbmN5IG1vZGUgb2Ygb3BlcmF0aW9uIHRoYXQKLQkgIGlzIHN1aXRhYmxlIGZvciBjbG9zZS10by1saXZlIHVzYWdlLiBJbml0aWFsbHkgYSB0ZWxlY2luZSBzdHJlYW0gd2lsbCBiZQotCSAgb3V0cHV0IGFzIHZhcmlhYmxlIGZyYW1lcmF0ZSB3aXRoIG5hw692ZSB0aW1lc3RhbXAgYWRqdXN0bWVudC4gV2l0aCBlYWNoCi0JICBpbmNvbWluZyBidWZmZXIsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBsb2NrIG9udG8gYSBwYXR0ZXJuLiBXaGVuIGEgbG9jayBpcwotCSAgb2J0YWluZWQsIHRoZSBzcmMgcGFkIGFuZCBvdXRwdXQgYnVmZmVyIGNhcHMgd2lsbCByZWZsZWN0IHRoZSBwYXR0ZXJuIGFuZAotCSAgdGltZXN0YW1wcyB3aWxsIGJlIGFjY3VyYXRlbHkgaW50ZXJwb2xhdGVkIGJldHdlZW4gcGF0dGVybiByZXBlYXRzLiBUaGlzCi0JICBtZWFucyB0aGF0IGluaXRpYWxseSBhbmQgYXQgcGF0dGVybiB0cmFuc2l0aW9ucyB0aGVyZSB3aWxsIGJlIHNob3J0IHBlcmlvZHMKLQkgIG9mIGluYWNjdXJhdGUgdGltZXN0YW1waW5nLgotCSAgLSBBY3RpdmUgcGF0dGVybiBsb2NraW5nCi0JICBBY3RpdmUgcGF0dGVybiBsb2NraW5nIGlzIGEgYmxvY2tpbmcsIGhpZ2gtbGF0ZW5jeSBtb2RlIG9mIG9wZXJhdGlvbiB0aGF0IGlzCi0JICB0YXJnZXRlZCBhdCB1c2UtY2FzZXMgd2hlcmUgdGltZXN0YW1wIGFjY3VyYWN5IGlzIHBhcmFtb3VudC4gQnVmZmVycyB3aWxsIGJlCi0JICBxdWV1ZWQgdW50aWwgZW5vdWdoIGFyZSBwcmVzZW50IHRvIG1ha2UgYSBsb2NrLiBXaGVuIGxvY2tlZCwgdGltZXN0YW1wcyB3aWxsCi0JICBiZSBhY2N1cmF0ZWx5IGludGVycG9sYXRlZCBiZXR3ZWVuIHBhdHRlcm4gcmVwZWF0cy4gT3JwaGFuIGZpZWxkcyBjYW4gYmUKLQkgIGRyb3BwZWQgb3IgZGVpbnRlcmxhY2VkLiBJZiBubyBsb2NrIGNhbiBiZSBvYnRhaW5lZCwgYSBzaW5nbGUgZmllbGQgbWlnaHQgYmUKLQkgIHB1c2hlZCB0aHJvdWdoIHRvIGJlIGRlaW50ZXJsYWNlZC4KLQkgIExvY2tpbmcgY2FuIGFsc28gYmUgZGlzYWJsZWQgb3IgJ2F1dG8nIGNob29zZXMgYmV0d2VlbiBwYXNzaXZlIGFuZCBhY3RpdmUKLQkgIGxvY2tpbmcgbW9kZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdXBzdHJlYW0gaXMgbGl2ZS4KLQotMjAxMS0wNS0xMCAxNjoyNTo0MCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogUmVtb3ZlIGNvbmZpZyBzY3JpcHQgY2hlY2sgZm9yIGNhY2EKLQotMjAxMS0wNS0xOCAxMjozNjo0MCArMDIwMCAgSm9zZSBBbnRvbmlvIFNhbnRvcyBDYWRlbmFzIDxzYW50b3NjYWRlbmFzQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JICBydHA6IEZpeCBzZWdtZW50YXRpb24gZmF1bHQgcHJvY2Vzc2luZyBwYXlsb2FkIGJ1ZmZlcnMKLQkgIFRoaXMgY29tbWl0IGNoZWNrcyBpZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKLQkgIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2J1ZmZlciBhbmQKLQkgIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciBpcyBOVUxMIGJlZm9yZSB1c2luZyBpdC4KLQotMjAxMS0wNS0xOCAxNjoxMDowNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmQzNTA3MyB0byA5ZTViYmQ1Ci0KLTIwMTEtMDUtMTggMTI6NTI6MzEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZW5zdXJlIDAtcGFkZGluZyB3aGVuIGNvcnJlY3RpbmcgZHViaW91cyBsaXN0IHNpemUKLQotMjAxMS0wNS0xOCAxMjoyNDoyNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNDZkZmNlYSB0byBmZDM1MDczCi0KLTIwMTEtMDUtMTggMTA6MjI6MjcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogdXNlIEVJTlZBTCBmb3IgbWlzc2luZyB1cmwgcGFyYW1ldGVyCi0JICBGaXhlcyBnY2Mgd2FybmluZyBhYm91dCB1c2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlICdyZXMnLgotCi0yMDExLTA0LTI4IDE1OjM3OjQwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSAgdmFyaW91czogZml4IGF1dGhvciB0YWcgaW4gZWxlbWVudCBkZXRhaWxzCi0KLTIwMTEtMDQtMjAgMTU6MjU6NTggLTA0MDAgIENocmlzIEUgSm9uZXMgPGNocmlzQGNocmlzZWpvbmVzLmNvbT4KLQotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSAgYXVwYXJzZTogaW1wbGVtZW50IHNlZWtpbmcKLQkgIEltcGxlbWVudCBzZWVraW5nIGFuZCBzZWVraW5nIHF1ZXJ5LiBGaXhlcyAjNjQ0NTEyCi0KLTIwMTEtMDUtMTcgMTY6MTM6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQotMjAxMS0wNC0wNiAxNjowNTo1NSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFsc28gYWxsb3cgUEFVU0UgdG8gYmUgaW50ZXJydXB0ZWQKLQkgIC4uLiBhcyBpdCBpcyBvbiB0aGUgd2F5IG91dCB0byBOVUxMLgotCSAgU2VlICM2MzI1MDQuCi0KLTIwMTEtMDQtMDYgMTU6NTE6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBlbnN1cmUgcHJvcGVyIGNsb3NpbmcgYW5kIGNsZWFudXAKLQkgIC4uLiBzaW5jZSB0aGUgVEVBUkRPV04gc2VxdWVuY2UgbWlnaHQgbm90IGhhdmUgaGFkIGEgY2hhbmNlIHRvIGV2ZW4gc3RhcnQsCi0JICBidXQgYXQgbGVhc3QgY29ubmVjdGlvbnMgc2hvdWxkIGJlIGNsb3NlZCAoc3luY2hyb25vdXNseSkgYW5kIHN0YXRlIGNsZWFuZWQgdXAuCi0JICBTZWUgIzYzMjUwNC4KLQotMjAxMS0wNC0wNiAxNTo0OTowMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IGZpeCBhbmQgaW1wcm92ZSBhc3luYyBoYW5kbGluZwotCSAgU2ltcGxpZnkgdGhlIGNvbW1hbmQgaGFuZGxpbmc7IHBhc3NpbmcgYSBjb21tYW5kIHRvIHRocmVhZCBtZWFucyB3ZSByZWFsbHkKLQkgIHdhbnQgaXQgdG8gZ2V0IHRoZSBtZXNzYWdlLCB3aGljaCBtZWFucyB0byBhbHdheXMgZmx1c2ggcHJvdmlkZWQgdGhlIGNvbW1hbmQKLQkgIGNhbiBoYW5kbGUgYmVpbmcgaW50ZXJydXB0ZWQuICBDb21tYW5kIHRocmVhZCBpbmRpY2F0ZXMgd2hldGhlciBjb21tYW5kCi0JICBhbGxvd3MgaW50ZXJydXB0aW9uIGFuZCBlbnN1cmUgbm9uLWZsdXNoaW5nIGNvbm5lY3Rpb24gYXMgaXQgc3Vic2VxdWVudGx5Ci0JICBuZWVkcyBpdC4KLQkgIEluIHBhcnRpY3VsYXIsIHRoaXMgYWxzbyBtYWtlcyB0aGUgVEVBUkRPV04gc2VxdWVuY2UgaW50ZXJydXB0YWJsZQotCSAgYW5kIGFsc28gcHJldmVudHMgcmFjZXMgd2hlcmUgX2xvb3BfIGNvdWxkIG1pc3MgYSBjb21tYW5kIGFuZCB3b3VsZAotCSAgY29udGludWUgcmVjZWl2aW5nIChvciBhdCBsZWFzdCB0cnlpbmcgdG8pLgotCSAgU2VlICM2MzI1MDQuCi0KLTIwMTEtMDQtMDYgMTQ6NTM6MjcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiB0d2VhayBwb3N0LXNlZWsgbG9vcCBoYW5kbGluZwotCi0yMDExLTAxLTEwIDEyOjQ2OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBvcGVuIG9uIHBsYXkgYW5kIHBhdXNlIHdoZW4gbm90IGRvbmUgeWV0Ci0JICBXaXRoIHRoZSBhc3luYyBzdGF0ZSBjaGFuZ2VzLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHdlIG5lZWQgdG8gb3BlbiB0aGUgc3RyZWFtCi0JICBiZWZvcmUgcGxheSBhbmQgcGF1c2UuCi0JICBBbHNvIG1ha2Ugc3VyZSB3ZSByZW1lbWJlciBhIHByZXZpb3VzIG9wZW4gZmFpbHVyZSBzbyB0aGF0IHdlIGRvbid0IGtlZXAgdHJ5aW5nCi0JICBhZ2Fpbi4KLQotMjAxMS0wMS0xMCAxMTo0NTowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogaW1wcm92ZSBhc3luYyBoYW5kbGluZwotCSAgU2ltcGxpZnkgdGhlIGNvbW1hbmQgaGFuZGxpbmcsIG9ubHkgY29udGludWUgbG9vcGluZyB3aGVuIHdlIGhhdmUgbm90IHJlY2VpdmVkCi0JICBhbm90aGVyIGNvbW1hbmQgb3Igd2hlbiB0aGUgcHJldmlvdXMgbG9vcCB3YXMgc3VjY2Vzc2Z1bGwuCi0JICBBdm9pZCBsb29waW5nIG9uIGEgZGlzY29ubmVjdGVkIHNvY2tldC4KLQotMjAxMS0wMS0wNyAxODowMjo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmV3b3JrIHJlY29ubmVjdCBjb2RlCi0JICBVc2UgdGhlIHNhbWUgYXN5bmMgY29kZSBwYXRoIHRvIGltcGxlbWVudCByZWNvbm5lY3RzLgotCSAgTWFrZSBzdXJlIHdlIG9ubHkgcG9zdCBwcm9ncmVzcyBtZXNzYWdlcyB3aGVuIGRvaW5nIGFzeW5jIHRoaW5ncy4KLQotMjAxMS0wMS0wNyAxNzoxOTo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc21hbGwgY2xlYW51cHMKLQkgIE1ha2Ugc3VyZSB3ZSBjYW5jZWwgdGhlIHByZXZpb3VzIHRhc2sgd2hlbiBxdWV1aW5nIGEgbmV3IG9uZS4KLQkgIE1vdmUgdGhlIG1lc3NhZ2VzIHRvIGEgY2VudHJhbCBwbGFjZSBzbyB3ZSBjYW4gbW9yZSBlYXNpbHkgcG9zdCB0aGVtLgotCi0yMDExLTAxLTA3IDE1OjE1OjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBkb24ndCBwb3N0IGVycm9ycyB3aGVuIGludGVycnVwdGluZwotCi0yMDExLTAxLTA3IDEzOjQzOjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBpbXBsZW1lbnQgbW9yZSBhc3luYyBoYW5kbGluZwotCSAgUmVtb3ZlIHNvbWUgb2xkIGxvY2tzLgotCSAgTWFrZSBzdXJlIHdlIG5ldmVyIGdvIGludG8gdGhlIGxvb3AgZnVuY3Rpb24gd2hlbiBmbHVzaGluZy4KLQotMjAxMS0wMS0wNyAxMTo0MDozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZmlyc3QgYXR0ZW1wdCBhdCBhc3luYyBpbXBsZW1lbnRhdGlvbgotCi0yMDExLTAxLTA3IDExOjQwOjExICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBzbWFsbCBoZWFkZXIgY2xlYW51cHMKLQotMjAxMS0wNS0xNyAxMDo0NzozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgc3NyY2RlbXV4OiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nIGZvciAocHJlLSkgcmVsZWFzZXMgdG9vCi0KLTIwMTEtMDQtMjggMTU6NTc6MDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyb2JqZWN0czogT25seSBhbGxvdyBtcGVnLXRzIG9uIHNvdXJjZSBvYmplY3RzCi0JICBVZ2x5IGZpeCBmb3IgIzY0ODMxMgotCi0yMDExLTA1LTE3IDA5OjI0OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMS0wNS0wNiAxOTowOToxNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHNzcmNkZW11eDogSW1wbGVtZW50IGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgZm9yIHNpbmsgcGFkcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTYxNwotCi0yMDExLTA1LTA2IDE4OjQxOjAxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBpdGVyYXRlIHBhZCBmdW5jdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzcmMgcGFkcwotCSAgVGhlIGl0ZXJhdGUgZnVuY3Rpb24gaXMgb25seSB1c2VkIGZvciBzcmMgcGFkcywgc28gbWFyayBpdCBhcyBzdWNoIGFuZCByZW1vdmUKLQkgIGRlYWQgY29kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk2MTcKLQotMjAxMS0wNS0wNiAxODoxMjo1MyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogUmVsZWFzZSBsb2NrIGJlZm9yZSBlbWl0dGluZyBzaWduYWwKLQkgIElmIHRoZSBsb2NrIGlzIG5vdCByZWxlYXNlZCBiZWZvcmUgZW1pdHRpbmcgYSBzaWduYWwsIGl0IG1heSBjYXVzZSBhIGRlYWRsb2NrCi0JICBpZiBhbnkgb3RoZXIgZnVuY3Rpb24gaW4gdGhlIGVsZW1lbnQgaXMgY2FsbGVkLgotCSAgQWxzbyByZW1vdmVkIGFuIHVudXNlZCB0aW1lc3RhbXAgcGFyYW1ldGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5NjE3Ci0KLTIwMTEtMDUtMTUgMjM6MjU6MTUgKzAzMDAgIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JICBtYXRyb3NrYXBhcnNlOiBjYWxjdWxhdGUgc2VnbWVudCBkdXJhdGlvbiBhZnRlciBwYXJzaW5nIGFsbCB0aGUgSURzCi0JICBTaW5jZSB0aGUgc2VnbWVudCBkdXJhdGlvbiBpcyBnaXZlbiBpbiB0ZXJtcyBvZiB0aGUKLQkgIEdTVF9NQVRST1NLQV9JRF9USU1FQ09ERVNDQUxFIHdlIHNob3VsZCBvbmx5IGNvbnZlcnQgaXQgaW50bwotCSAgbmFub3NlY29uZHMgd2hlbiB3ZSBhcmUgc3VyZSB0aGF0IGFueSBzY2FsZSBzcGVjaWZpZWQgaW4gdGhlIGZpbGUgaGFzCi0JICBiZWVuIHJlYWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUwMjU4Ci0KLTIwMTEtMDUtMTYgMTc6NTI6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCi0yMDExLTA1LTE2IDE3OjUwOjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JICAtZ29vZDogZml4IGZvciBuZXcgQVBJCi0KLTIwMTEtMDUtMDQgMTE6NTU6MjEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGFkZGl0aW9uYWwgbG9jayBzYWZldHkKLQkgIEZpeGVzICM2MTk1OTAuCi0KLTIwMTEtMDQtMjYgMTY6MDY6NTYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFsc28gY2hlY2sgZm9yIGJpdHJhdGUgaW5mbyBpbiBjYXBzCi0KLTIwMTAtMDUtMjUgMDE6MDQ6NDMgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5oOgotCSAgcXRkZW11eDogZ3Vlc3MgYml0cmF0ZSBpZiBvbmx5IG9uZSBzdHJlYW0ncyBiaXRyYXRlIGlzIHVua25vd24KLQkgIElmIHRoZSBiaXRyYXRlcyBmb3IgYWxsIGJ1dCBvbmUgYXVkaW8vdmlkZW8gc3RyZWFtcyBhcmUga25vd24sIGFuZCB0aGUKLQkgIHRvdGFsIHN0cmVhbSBzaXplIGFuZCBkdXJhdGlvbiBjYW4gYmUgZGV0ZXJtaW5lZCwgdGhpcyBjYWxjdWxhdGVzIHRoZQotCSAgdW5rb3duIGJpdHJhdGUgYXMgKHN0cmVhbSBzaXplIC8gZHVyYXRpb24pIC0gKHN1bSBvZiBrbm93biBiaXRyYXRlcykuCi0JICBXaGlsZSB0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHZlcnkgYWNjdXJhdGUsIGl0IHNob3VsZCBiZSBnb29kCi0JICBlbm91Z2ggZm9yIG1vc3QgcHVycG9zZXMuCi0JICBGb3IgZXhhbXBsZSwgdGhpcyBpcyB1c2VmdWwgZm9yIEguMjYzICsgQUFDIHN0cmVhbXMgd2hlcmUgbm8gJ2J0cnQnIGF0b20KLQkgIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHZpZGVvIHBvcnRpb24uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE5NTQ4Ci0KLTIwMTAtMDUtMzEgMjM6NTk6NTkgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaXNvbXA0L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEV4cG9ydCBtYXggYml0cmF0ZSBmb3IgQU1SLU5CLy1XQiBzdHJlYW1zCi0JICBUaGlzIHBhcnNlcyB0aGUgJ2RhbXInIGF0b20gaWYgcHJlc2VudCwgYW5kIGV4cG9ydHMgdGhlIG1heGltdW0gYml0cmF0ZQotCSAgb2YgdGhlIHN0cmVhbSB1c2luZyB0aGUgbW9kZSBzZXQgZmllbGQgdG8gZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IGJpdHJhdGUKLQkgIGZyYW1lIHR5cGUgdGhhdCBtaWdodCBiZSBwcmVzZW50LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMDE4NgotCi0yMDExLTA1LTE2IDA5OjA0OjMxICswMjAwICBQaW5vIFRvc2Nhbm8gPHRvc2Nhbm8ucGlub0B0aXNjYWxpLml0PgotCi0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZTogRGVmaW5lIFBBVEhfTUFYIGlmIGl0IGlzbid0IGRlZmluZWQKLQkgIEdOVSBIdXJkIGZvciBleGFtcGxlIGRvZXNuJ3QgZGVmaW5lIGl0LgotCi0yMDExLTA1LTE1IDIzOjI1OjE1ICswMzAwICBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogY2FsY3VsYXRlIHNlZ21lbnQgZHVyYXRpb24gYWZ0ZXIgcGFyc2luZyBhbGwgdGhlIElEcwotCSAgU2luY2UgdGhlIHNlZ21lbnQgZHVyYXRpb24gaXMgZ2l2ZW4gaW4gdGVybXMgb2YgdGhlCi0JICBHU1RfTUFUUk9TS0FfSURfVElNRUNPREVTQ0FMRSB3ZSBzaG91bGQgb25seSBjb252ZXJ0IGl0IGludG8KLQkgIG5hbm9zZWNvbmRzIHdoZW4gd2UgYXJlIHN1cmUgdGhhdCBhbnkgc2NhbGUgc3BlY2lmaWVkIGluIHRoZSBmaWxlIGhhcwotCSAgYmVlbiByZWFkLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY1MDI1OAotCi0yMDExLTA1LTA5IDE5OjAwOjQ1ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IEFkZCBzdXBwb3J0IGZvciBtcGVndmVyc2lvbiAyLCB3aGljaCBpcyBhbHNvIEFBQwotCi0yMDExLTA1LTExIDEwOjI1OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgZmxhY2RlYzogU2VuZCBFT1Mgd2hlbiBzZWVraW5nIGFmdGVyIHRoZSBlbmQgb2YgZmlsZSBpbnN0ZWFkIG9mIGZhaWxpbmcKLQkgIEZpeGVzIGJ1ZyAjNjQ5NzgwLgotCi0yMDExLTA0LTI5IDA4OjU5OjIwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkgIHdhdmVuYzogU2V0IGZpeGVkY2FwcyBnZXRjYXBzIGZ1bmN0aW9uIG9uIHRoZSBzaW5rcGFkCi0JICB3YXZlbmMgZG9lcyBub3QgYWxsb3cgdG8gY2hhbmdlIHRoZSBjYXBzIGR1cmluZyBwbGF5YmFjawotCSAgYW5kIGFsd2F5cyByZXR1cm5pbmcgdGhlIHRlbXBsYXRlIGNhcHMgaXMganVzdCB3cm9uZy4KLQotMjAxMS0wNC0yOSAwODo1NToxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICB3YXZlbmM6IEFsbG93IHNldGNhcHMgdG8gYmUgY2FsbGVkIGFmdGVyIGEgZm9ybWF0IHdhcyBuZWdvdGlhdGVkIGlmIGl0J3MgY29tcGF0aWJsZQotCSAgT3RoZXJ3aXNlIHdhdmVuYyB3aWxsIGZhaWwgaWYgdXBzdHJlYW0gZGVjaWRlcyB0byBzZXQgZXF1aXZhbGVudCBjYXBzIG9yIGNhcHMKLQkgIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBsYXRlci4KLQkgIFRoYW5rcyB0byBBbGV4YW5kZXIgU2NocmVtbWVyIGZvciBmaW5kaW5nIHRoaXMgYnVnLgotCi0yMDExLTA1LTE0IDEwOjAyOjIyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjEwLjI5ID09PQotCi0yMDExLTA1LTEwIDEwOjA0OjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2dsLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcm8ucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjkKLQkgIEhpZ2hsaWdodHM6Ci0JICAtIGFtcnBhcnNlLCBhYWNwYXJzZSwgYWMzcGFyc2UsIGZsYWNwYXJzZSwgbXBlZ2F1ZGlvcGFyc2UsIGRjYXBhcnNlIGF1ZGlvIHBhcnNlcnMgKG1vdmVkIGZyb20gLWJhZCkKLQkgIC0gbXV4ZXJzIG5vdyBtdXggYmFzZWQgb24gcnVubmluZyB0aW1lCi0JICAtIElTTyBNUDQgbXV4ZXJzOiBtcDRtdXgvM2dwcG11eC9xdG11eC9tajJtdXggKG1vdmVkIGZyb20gLWJhZCkKLQkgIC0gbmV3IG1hdHJvc2thcGFyc2UgZWxlbWVudAotCSAgLSBuZXcgdjRsMnJhZGlvIGVsZW1lbnQKLQkgIC0gcnRwc2Vzc2lvbjogc3VwcG9ydCBSVENQIEVhcmx5IEZlZWRiYWNrICh0aGUgQVZQRiBwcm9maWxlKQotCSAgLSBvcmMgMC40LjE0IG9yIG5ld2VyIHJlY29tbWVuZGVkCi0JICAtIG1hbnkgb3RoZXIgZml4ZXMgYW5kIGltcHJvdmVtZW50cwotCi0yMDExLTA1LTA1IDEzOjI0OjIzICswMjAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEZpeCBzaWduZWQgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHdyaXRpbmcKLQkgIFlvdSB3b3VsZCBlbmQgdXAgb24gc29tZSBhcmNoaXRlY3R1cmVzIHdpdGggMCBiZWluZyB3cml0dGVuIG91dAotCSAgaW5zdGVhZCBvZiB0aGUgcHJvcGVyIHZhbHVlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTQ0OQotCi0yMDExLTA1LTA0IDEyOjA0OjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGF2b2lkIGJ1aWxkaW5nIGluZGV4IHdoZW4gc3RyZWFtYWJsZQotCSAgLi4uIGFzIGl0IHdpbGwgbm90IGJlIHdyaXR0ZW4gYW55d2F5LgotCSAgRml4ZXMgIzY0ODkzNyAoPykuCi0KLTIwMTEtMDUtMDIgMTI6MDk6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiBhZGQgb2xkIHF0ZGVtdXgvcXVpY2t0aW1lIGRpcmVjdG9yaWVzIHRvIENSVUZUX0RJUlMgYW5kIENSVUZUX0ZJTEVTCi0KLTIwMTEtMDUtMDEgMDA6MDQ6MDMgLTA0MDAgIFRvbSBKYW5pc3pld3NraSA8dG9tLmphbmlzemV3c2tpQGFsY2F0ZWwtbHVjZW50LmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogZG9uJ3Qgb3ZlcndyaXRlIG1ldGFkYXRhIHRhZyB3aXRoIGR1cmF0aW9uIGluIHN0cmVhbWluZyBtb2RlCi0JICBBIGR1cmF0aW9uIHRhZyBnZXRzIGluc2VydGVkIG9ubHkgZm9yIHN0cmVhbWFibGU9ZmFsc2UsIHNvIG9ubHkKLQkgIHVwZGF0ZS93cml0ZSB0aGUgZHVyYXRpb24gbGF0ZXIgaWYgd2UgYWN0dWFsbHkgaW5zZXJ0ZWQgdGhhdCB0YWcsCi0JICBvdGhlcndpc2Ugd2Ugd3JpdGUgZ2FyYmFnZSBpbnRvIG90aGVyIHRhZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5MDYwCi0KLTIwMTEtMDQtMzAgMTg6MTY6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pc29tcDQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIHBvL2ZyLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4yOC40IHByZS1yZWxlYXNlCi0KLTIwMTEtMDQtMzAgMTc6NDY6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBBbmRyb2lkLm1rOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIGdzdC9pc29tcDQvTEVHQUw6Ci0JKiBnc3QvaXNvbXA0L01ha2VmaWxlLmFtOgotCSogZ3N0L2lzb21wNC9hdG9tcy5jOgotCSogZ3N0L2lzb21wNC9hdG9tcy5oOgotCSogZ3N0L2lzb21wNC9hdG9tc3JlY292ZXJ5LmM6Ci0JKiBnc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuaDoKLQkqIGdzdC9pc29tcDQvZGVzY3JpcHRvcnMuYzoKLQkqIGdzdC9pc29tcDQvZGVzY3JpcHRvcnMuaDoKLQkqIGdzdC9pc29tcDQvZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L2Z0eXBjYy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG1vb3ZyZWNvdmVyLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuaDoKLQkqIGdzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmM6Ci0JKiBnc3QvaXNvbXA0L2dzdHF0bXV4LWRvYy5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eC5oOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jOgotCSogZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5oOgotCSogZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5jOgotCSogZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5oOgotCSogZ3N0L2lzb21wNC9pc29tcDQtcGx1Z2luLmM6Ci0JKiBnc3QvaXNvbXA0L3Byb3BlcnRpZXMuYzoKLQkqIGdzdC9pc29tcDQvcHJvcGVydGllcy5oOgotCSogZ3N0L2lzb21wNC9xdGF0b21wYXJzZXIuaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eC5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4Lmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXgudmNwcm9qOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF9kdW1wLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfZm91cmNjLmg6Ci0JKiBnc3QvaXNvbXA0L3F0ZGVtdXhfbGFuZy5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X2xhbmcuaDoKLQkqIGdzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jOgotCSogZ3N0L2lzb21wNC9xdGRlbXV4X3R5cGVzLmg6Ci0JKiBnc3QvaXNvbXA0L3F0cGFsZXR0ZS5oOgotCSogcG8vUE9URklMRVMuaW46Ci0JICBxdWlja3RpbWU6IHJlbmFtZSBwbHVnaW4gdG8gaXNvbXA0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4MDA0Ci0KLTIwMTEtMDQtMjkgMTc6NTU6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogZml4IHNvbWUgcGFyc2VycwotCi0yMDExLTA0LTI5IDE3OjU0OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBmaXggZXJyb3IgY2F1c2VkIGJ5IG1lcmdpbmcKLQotMjAxMS0wNC0yOSAxNTo0OTo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCSAgQ29uZmxpY3RzOgotCSAgY29uZmlndXJlLmFjCi0JICBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jCi0KLTIwMTEtMDQtMjkgMTU6NDY6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4OiBmaXggcGFkX2FsbG9jCi0KLTIwMTEtMDQtMjcgMTI6NDU6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjguMyBwcmUtcmVsZWFzZQotCi0yMDExLTA0LTI2IDE1OjU4OjEyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBmaXggYnVmZmVyIGxlYWsKLQotMjAxMS0wNC0yNiAxNTo1ODoxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuYzoKLQkgIHJ0cGdzdHBheTogZml4IGJ1ZmZlciBsZWFrCi0KLTIwMTEtMDQtMjYgMTU6NDI6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogcG9ydCBqYWNrIGVsZW1lbnRzCi0KLTIwMTEtMDQtMjUgMTA6MDQ6NTIgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGRvY3VtZW50YXRpb24gdHlwbyAianBlZ2RkZWMiCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4NTg5Ci0KLTIwMTEtMDQtMjUgMTg6MTQ6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JICBydHA6IHBvcnQgc29tZSBtb3JlIGVsZW1lbnRzCi0KLTIwMTEtMDQtMjUgMTc6Mjc6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVwYXkuYzoKLQkgIHJ0cDogcG9ydCBtb3JlIHRvIDAuMTEKLQotMjAxMS0wNC0yNSAxMzoxNjo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgIHJ0cDogcG9ydCBzb21lIG1vcmUgKGRlKXBheWxvYWRlcnMKLQotMjAxMS0wNC0yNSAxMjo0OTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2VjaG8uYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHBvcnQgc29tZSBtb3JlIGVsZW1lbnRzIHRvIDAuMTEKLQotMjAxMS0wNC0yNSAxMTozODoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA0LTI0IDE2OjQ1OjA3IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIGF2aW11eCxtYXRyb3NrYW11eDogQWRkIHN0cmVhbS1mb3JtYXQgdG8gaDI2NCBjYXBzCi0JICBGaXhlcyAjNjA2NjYyLgotCi0yMDExLTAyLTIwIDEyOjEzOjQ5IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogUmVtb3ZlIHRlbXBvcmFyeSBjb2RlCi0JICBOb3cgdGhhdCB3ZSBkZXBlbmQgb24gKHdoYXQgd2lsbCBiZSkgLWJhc2UtMC4xMC4zMy4KLQotMjAxMS0wNC0yNCAxNDowMzo1NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZG9uJ3QgcGFzcyAtV2FkZHJlc3MgdG8gT2JqQyBjb21waWxlciBvbiBPU1ggd2hlbiBjb21waWxpbmcgb3N4dmlkZW9zaW5rCi0JICBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB3ZSBmaXggdGhpcyBwcm9wZXJseSBhbmQgY2hlY2sgZm9yCi0JICB0aGUgT2JqQyB3YXJuaW5nL2Vycm9yIGZsYWdzIGluc3RlYWQgb2YganVzdCBwYXNzaW5nIENGTEFHUyB0byB0aGUKLQkgIE9iakMgY29tcGlsZXIuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQzOTM5Ci0KLTIwMTEtMDQtMjQgMTM6Mjk6MzIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIGdzdC9xdWlja3RpbWUvTWFrZWZpbGUuYW06Ci0JICBxdWlja3RpbWU6IHJlbmFtZSBwbHVnaW4gZmlsZW5hbWUgZnJvbSAqcXRkZW11eCogdG8gKnF1aWNrdGltZSoKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDgwMDQKLQotMjAxMS0wNC0yNCAxNDowMzo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBjM2NhZmUxIHRvIDQ2ZGZjZWEKLQotMjAxMS0wNC0yMSAyMzozMDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvcXVpY2t0aW1lL01ha2VmaWxlLmFtOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG1vb3ZyZWNvdmVyLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LWRvYy5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC1kb2MuaDoKLQkgIGRvY3M6IGFkZCB2YXJpb3VzIHF0bXV4IHZhcmlhbnRzIHRvIGRvY3VtZW50YXRpb24KLQotMjAxMS0wNC0yMSAyMjo1MTo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuaDoKLQkgIHF1aWNrdGltZTogcmVnaXN0ZXIgM2dwcG11eCBlbGVtZW50IGluIGFkZGl0aW9uIHRvIHRoZSBtaXNuYW1lZCBncHBtdXgKLQotMjAxMS0wNC0xOCAxODowODozMCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBSZW1vdmUgaW5jb21wbGV0ZSBzdXBwb3J0IGZvciBSVENQIEZJUgotCSAgUmVtb3ZlIGJpdHMgdGhhdCB3ZXJlIG1lYW50IHRvIHN1cHBwb3J0IFJUQ1AgRklSCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ4MTYwCi0KLTIwMTEtMDQtMTkgMTg6NTU6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkgIGZsYWM6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA0LTE5IDE3OjM1OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVzZSBHX0RFRklORV9UWVBFIHNvbWUgbW9yZQotCi0yMDExLTA0LTE5IDE3OjIwOjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSAgYXZpOiB1c2UgR19ERUZJTkVfVFlQRQotCi0yMDExLTA0LTE5IDE3OjA3OjE4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VtaXhlci5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgdXNlIEdfREVGSU5FX1RZUEUKLQotMjAxMS0wNC0xOSAxNjoyNToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTA0LTE5IDE0OjMzOjI1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL2luZGV4LmM6Ci0JICB0ZXN0czogYWRkIGdlbmVyaWMgc2V0X2luZGV4IHRlc3QKLQotMjAxMS0wNC0xOSAxNDozMzo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBmaXggZGVhZGxvY2sgb24gc2V0dGluZyBpbmRleCBvbiBmbHZkZW11eAotCi0yMDExLTA0LTE5IDE0OjE2OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmxhY3BhcnNlLmM6Ci0JICB0ZXN0czogYWRkIGluZGV4LXNldHRpbmcgdGVzdCBmb3IgYmFzZXBhcnNlL2ZsYWNwYXJzZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NjgxMQotCi0yMDExLTA0LTE4IDExOjI5OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdnBhY2suYzoKLQkgIHdhdnBhY2s6IFJlbW92ZSBidXMgR1NvdXJjZSB0byBwcmV2ZW50IGEgdmFsZ3JpbmQgd2FybmluZwotCi0yMDExLTA0LTE4IDExOjE0OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jOgotCSAgd2F2ZW5jOiBSZW1vdmUgYnVzIEdTb3VyY2UgdG8gcHJldmVudCBhIHZhbGdyaW5kIHdhcm5pbmcKLQotMjAxMS0wNC0xOCAxMToxMTo1MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy90YWdzY2hlY2tpbmcuYzoKLQkgIHRhZ3NjaGVja2luZzogUmVtb3ZlIGJ1cyBHU291cmNlIHRvIHByZXZlbnQgYSB2YWxncmluZCB3YXJuaW5nCi0KLTIwMTEtMDQtMTggMTE6MTA6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IFJlbW92ZSBidXMgR1NvdXJjZSB0byBwcmV2ZW50IGEgdmFsZ3JpbmQgd2FybmluZwotCi0yMDExLTA0LTE4IDEwOjU0OjQzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JICBwb3J0IG1vcmUgcGx1Z2lucyB0byAwLjExCi0KLTIwMTEtMDQtMTggMTA6MjM6NDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGFuZHJvaWQvYXBldGFnLm1rCi0JICBhbmRyb2lkL2F2aS5tawotCSAgYW5kcm9pZC9mbHYubWsKLQkgIGFuZHJvaWQvaWN5ZGVtdXgubWsKLQkgIGFuZHJvaWQvaWQzZGVtdXgubWsKLQkgIGFuZHJvaWQvcXRkZW11eC5tawotCSAgYW5kcm9pZC9ydHAubWsKLQkgIGFuZHJvaWQvcnRwbWFuYWdlci5tawotCSAgYW5kcm9pZC9ydHNwLm1rCi0JICBhbmRyb2lkL3NvdXAubWsKLQkgIGFuZHJvaWQvdWRwLm1rCi0JICBhbmRyb2lkL3dhdmVuYy5tawotCSAgYW5kcm9pZC93YXZwYXJzZS5tawotCSAgY29uZmlndXJlLmFjCi0KLTIwMTEtMDQtMTcgMDE6Mjk6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZml4ICd2YXJpYWJsZSBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkJyB3YXJuaW5ncyBjYXVzZWQgYnkgLURHX0RJU0FCTEVfQVNTRVJUCi0KLTIwMTEtMDQtMTYgMTg6NTA6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0cnRwYmluLW1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3RydHBiaW4tbWFyc2hhbC5oOgotCSAgMC4xMC4yOC4yIHByZS1yZWxlYXNlCi0KLTIwMTEtMDQtMTYgMTg6NDk6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5oOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0Lmg6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZG9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZG9yYy1kaXN0Lmg6Ci0JICBnc3Q6IHVwZGF0ZSBkaXN0ZWQgb3JjIGJhY2t1cCBjb2RlCi0KLTIwMTEtMDQtMTYgMTg6Mjk6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBkb2NzOiB1cGRhdGUgZm9yIHByZS1yZWxlYXNlCi0KLTIwMTEtMDQtMTYgMTg6Mjc6NTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9iZy5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vc2wucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDExLTA0LTE2IDE4OjE3OjAxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHJlZnVzZSBpbmNvbXBsZXRlIGxlZ2FjeSBoMjY0IGNhcHMKLQkgIFJlZnVzZSBoMjY0IGNhcHMgd2l0aG91dCBzdHJlYW0tZm9ybWF0IGFuZCBjb2RlY19kYXRhIGZpZWxkcyBmb3IKLQkgIG5vdywgdG8gYXZvaWQgY3JlYXRpbmcgYnJva2VuIGZpbGVzLiBUaGlzIG1pZ2h0IGNhdXNlIHNvbWUgcGlwZWxpbmVzCi0JICB0aGF0IHdvcmtlZCBwcmV2aW91c2x5IHRvIGZhaWwuIEhvd2V2ZXIsIHRoZSBtb3ZlIGZyb20gLWJhZCB0byAtZ29vZAotCSAgaXMgb3VyIG9ubHkgY2hhbmNlIHRvIGZpeCB0aGlzIHVwLCBzbyBtYWtlIGl0IHN0cmljdCBmb3Igbm93LiBXZSBjYW4KLQkgIGFsd2F5cyBjaGFuZ2UgaXQgYmFjayB0byBiZSBsZXNzIHN0cmljdCBpbiBmdXR1cmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ3OTE5Ci0KLTIwMTEtMDQtMTYgMTg6MTY6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IGZpeCBhbm90aGVyIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlIHdhcm5pbmcKLQotMjAxMS0wNC0xNiAxODoxMDoyNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSAgcHVsc2UsIHNwZWV4ZW5jLCBydHBnc21wYXk6IGRvbid0IHVzZSBnX2Fzc2VydCgpIGZvciBlcnJvciBoYW5kbGluZwotCSAgRG9uJ3QgdXNlIGdfYXNzZXJ0KCkgZm9yIGVycm9yIGhhbmRsaW5nLCBldmVuIGlmIHRoZXkncmUgaGlnaGx5IHVubGlrZWx5LgotCSAgRWl0aGVyIHdlICprbm93KiB0aGF0IHNvbWV0aGluZyBjYW4ndCBoYXBwZW4sIGluIHdoaWNoIGNhc2Ugd2UKLQkgIHNob3VsZCBqdXN0IG5vdCBoYW5kbGUgaXQsIG9yIHdlIHRoaW5rIHNvbWV0aGluZyBjYW4gaGFwcGVuLCBidXQgaXQgaXMKLQkgIHZlcnkgdmVyeSB1bmxpa2VseSB0aGF0IGl0IHdpbGwgZXZlciBoYXBwZW4sIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkCi0JICBoYW5kbGUgaXQgbGlrZSBhbnkgb3RoZXIgZXJyb3IgaW5zdGVhZCBvZiBhc3NlcnRpbmcuCi0JICBnX2Fzc2VydCgpIGlzIGJlc3QgbGVmdCBmb3IgY29uZGl0aW9ucyB3ZSBoYXZlIGNvbnRyb2wgb2YsIGxpa2UgY2hlY2tpbmcKLQkgIGludGVybmFsIGNvbnNpc3RlbmN5IG9mIG91ciBjb2RlLCBub3QgY2hlY2tpbmcgcmV0dXJuIHZhbHVlcyBvZiBleHRlcm5hbAotCSAgY29kZS4KLQkgIEZpeGVzIGEgYnVuY2ggb2Ygd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgd2l0aCAtREdfRElTQUJMRV9BU1NFUlQ6Ci0JICBnc3RydHBnc21wYXkuYzogSW4gZnVuY3Rpb24gJ2dzdF9ydHBfZ3NtX3BheV9oYW5kbGVfYnVmZmVyJzoKLQkgIGdzdHJ0cGdzbXBheS5jOjEzMDoxNzogd2FybmluZzogdmFyaWFibGUgJ3J0cGdzbXBheScgc2V0IGJ1dCBub3QgdXNlZAotCSAgZ3N0c3BlZXhlbmMuYzogSW4gZnVuY3Rpb24gJ2dzdF9zcGVleF9lbmNfZW5jb2RlJzoKLQkgIGdzdHNwZWV4ZW5jLmM6OTA0OjE5OiB3YXJuaW5nOiB2YXJpYWJsZSAnd3JpdHRlbicgc2V0IGJ1dCBub3QgdXNlZAotCSAgcHVsc2VzaW5rLmM6IEluIGZ1bmN0aW9uICdnc3RfcHVsc2VzaW5rX2NoYW5nZV9zdGF0ZSc6Ci0JICBwdWxzZXNpbmsuYzoyNzI1Ojk6IHdhcm5pbmc6IHZhcmlhYmxlICdyZXMnIHNldCBidXQgbm90IHVzZWQKLQkgIHB1bHNlc3JjLmM6IEluIGZ1bmN0aW9uICdnc3RfcHVsc2VzcmNfY2hhbmdlX3N0YXRlJzoKLQkgIHB1bHNlc3JjLmM6MTI1Mzo3OiB3YXJuaW5nOiB2YXJpYWJsZSAnZScgc2V0IGJ1dCBub3QgdXNlZAotCi0yMDExLTA0LTE2IDE4OjA3OjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYzoKLQkgIGV4YW1wbGVzOiBmaXggc29tZSB3YXJuaW5ncyBpbiBydHAgZXhhbXBsZQotCSAgQ2F1c2VkIGJ5IC1ER19ESVNBQkxFX0FTU0VSVAotCi0yMDExLTA0LTE2IDE3OjU3OjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOgotCSAgZXhhbXBsZXM6IGRvbid0IHB1dCBjb2RlIHdpdGggc2lkZS1lZmZlY3RzIGludG8gZ19hc3NlcnQoKQotCSAgT3RoZXJ3aXNlIHRoaW5ncyB3b24ndCB3b3JrIHRvbyB3ZWxsIHdoZW4gY29tcGlsaW5nIHdpdGgKLQkgIC1ER19ESVNBQkxFX0FTU0VSVCAoYXMgd2UgZG8gZm9yIHByZS1yZWxlYXNlcyBhbmQgcmVsZWFzZXMpLgotCi0yMDExLTA0LTE2IDE2OjUxOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBkZWludGVybGFjZSwgbWF0cm9za2E6IGZpeCB0d28gdmFyaWFibGUtbWF5LWJlLXVzZWQtdW5pbml0aWFsaXplZCBjb21waWxlciB3YXJuaW5ncwotCSAgV2UgdXNlIC1ER19ESVNBQkxFX0FTU0VSVCBmb3IgdGhlIHByZS1yZWxlYXNlcywgd2hpY2ggbWFrZXMgdGhlc2UKLQkgIHdhcm5pbmdzIHBvcCB1cCBpbiBjYXNlcyB0aGF0IHdlcmUgcHJldmlvdXNseSBjb3ZlcmVkIGJ5IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCkKLQkgIGFuZCB0aGUgbGlrZToKLQkgIHR2dGltZS9ncmVlZHloLmM6ODAxOjE0OiB3YXJuaW5nOiAnc2NhbmxpbmUnIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgotCSAgbWF0cm9za2EtbXV4LmM6NTAxOjE5OiB3YXJuaW5nOiAnY29udGV4dCcgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uCi0KLTIwMTEtMDQtMTYgMTQ6NDU6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JICBhcGVkZW11eDogUG9ydCB0byAwLjExCi0KLTIwMTEtMDQtMTYgMTM6MzM6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGZpeCB1bnVzZWQtYnV0LXNldC12YXJpYWJsZSB3YXJuaW5ncyB3aXRoIGdjYy00LjYKLQotMjAxMS0wNC0xNiAxMzoyMzo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL2NhaXJvX292ZXJsYXkuYzoKLQkgIGV4YW1wbGVzOiBmaXggJ2NvbnRyb2wgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24nIHdhcm5pbmcgaW4gY2Fpcm8gZXhhbXBsZQotCi0yMDExLTA0LTE1IDE1OjQ3OjI0ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IEFkZHJlc3MgdW51c2VkIGJ1dCBzZXQgdmFyaWFibGUKLQkgIFRoZSB2NGwyb2JqZWN0IGZvcm1hdHMgbGlzdCB3YXMgYmVpbmcgb2J0YWluZWQgaW50byBhIGxvY2FsIHZhcmlhYmxlIGFuZAotCSAgdGhlbiBzdGlsbCB1c2VkIGZyb20gdGhlIGNvbnRleHQuIE1ha2UgdXNlIG9mIHRoZSBsb2NhbCB2YXJpYWJsZS4KLQotMjAxMS0wNC0xNSAxNToxNzozNCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLXNsaWRlci5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci1zd2l0Y2guYzoKLQkqIHN5cy9vc3M0L29zczQtcHJvcGVydHktcHJvYmUuYzoKLQkqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JICBvc3M0OiBBZGRyZXNzIHVudXNlZCBidXQgc2V0IHZhcmlhYmxlcwotCSAgR0NDIDQuNi54IGNvbXBsYWlucyBhYm91dCBzdWNoIHZhcmlhYmxlIHVzYWdlLiBVbnVzZWQgYnV0IHNldCB2YXJpYWJsZXMKLQkgIHdlcmUgcmVtb3ZlZCBleGNlcHQgdGhhdCBnc3Rfb3NzNF9taXhlcl9zbGlkZXJfc2V0X211dGUgKCkgbm93IHJldHVybnMKLQkgIHRoZSB2YWx1ZSBmcm9tIHRoZSBjYWxsIHRvIGdzdF9vc3M0X21peGVyX3NldF9jb250cm9sX3ZhbCAoKS4KLQotMjAxMS0wNC0xNSAxNToxNDoxMyArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkgIGpwZWdlbmM6IHB1bHNlc2luazogcmF3MTM5NDogQWRkcmVzcyB1bnVzZWQgYnV0IHNldCB2YXJpYWJsZXMKLQkgIEdDQyA0LjYueCBzcGl0cyB3YXJuaW5ncyBhYm91dCBzdWNoIHVzYWdlIG9mIHZhcmlhYmxlcy4gVGhlIHZhcmlhYmxlcyBpbgotCSAgcmF3MTM5NCB3ZXJlIG1hcmtlZCB3aXRoIEdfR05VQ19VTlVTRUQgYXMgdGhpcyBzZWVtZWQgb21yZSBhcHByb3ByaWF0ZS4KLQkgIFRoZSBvdGhlcnMgd2VyZSByZW1vdmVkLgotCi0yMDExLTA0LTE1IDE1OjEyOjQ0ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgeTRtZW5jb2RlOiBzaGFwZXdpcGU6IEFkZHJlc3MgdW51c2VkIGJ1dCBzZXQgdmFyaWFibGVzCi0JICBHQ0MgNC42LnggY29tcGxhaW5zIGFib3V0IHN1Y2ggdXNhZ2UuCi0KLTIwMTEtMDQtMTUgMTU6MTE6MzUgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvZmxhY2RlYy5jOgotCSogdGVzdHMvZXhhbXBsZXMvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOgotCSogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzoKLQkqIHRlc3RzL2ljbGVzL3hpbWFnZXNyYy10ZXN0LmM6Ci0JICB0ZXN0czogQWRkcmVzcyB1bnVzZWQgYnV0IHNldCB2YXJpYWJsZXMKLQkgIEdDQyA0LjYueCBzcGl0cyB3YXJuaW5ncyBhYm91dCBzdWNoIHVzYWdlIG9mIHZhcmlhYmxlcy4KLQotMjAxMS0wNC0xNSAxNTozNjo0MSArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZG9yYy5vcmM6Ci0JICB2aWRlb21peGVyOiBGaXggYXJnYi9yZ2JhIG92ZXJsYXkgb3JjIGNvZGUKLQkgIFJlbW92ZSBzb21lIHJlZHVuZGFudCBvcGVyYXRpb25zIChjb252dWJ3KSBhbmQgdXNlIHRoZSBjb3JyZWN0IHZhcmlhYmxlLAotCSAgdDIsIGluIHRoZSBvcmNfb3ZlcmxheV9iZ3JhIGZ1bmN0aW9uLgotCi0yMDExLTA0LTE1IDE1OjMzOjM1ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyOiBhZGRyZXNzIHVudXNlZCBidXQgc2V0IHZhcmlhYmxlcwotCSAgR0NDIDQuNi54IHNwaXRzIHdhcm5pbmdzIGFib3V0IHZhcmlhYmxlcyB0aGF0IGFyZSBzZXQgYnV0IHVudXNlZC4gU3VjaAotCSAgdmFyaWFibGVzIGhhdmUgYmVlbiByZW1vdmVkIGluIGJsZW5kLCBjb2xsZWN0cGFkczIgYW5kIHZpZGVvbWl4ZXIyLgotCi0yMDExLTA0LTE1IDE0OjU3OjIwICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwLCBydHBtYW5hZ2VyOiBBZGRyZXNzIHVudXNlZCBidXQgc2V0IHZhcmlhYmxlcwotCSAgR0NDIDQuNi54IHNwaXRzIHdhcm5pbmdzIGFib3V0IHZhcmlhYmxlcyB0aGF0IGFyZSB1bnVzZWQgYnV0IHNldC4gU3VjaAotCSAgdmFyaWFibGVzIGhhdmUgYmVlbiByZW1vdmVkIHdoZXJlIHRyaXZpYWwgYnV0IHdpdGggY29tbWVudHMgbGVmdCBiZWhpbmQKLQkgIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIGluIHNvbWUgY2FzZXMuCi0JICBnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydGNwICgpIHdhcyBjaGFuZ2VkIGluIGNvbW1pdCA0OTAxMTNkNAotCSAgdG8gYWx3YXlzIHJldHVybiBHU1RfRkxPV19PSyBpbnN0ZWFkIG9mIHRoZSByZXR1cm4gdmFsdWUgb2YKLQkgIHJ0cF9zZXNzaW9uX3Byb2Nlc3NfcnRjcCAoKSwgc28gd2UnbGwga2VlcCBpdCB0aGF0IHdheS4KLQotMjAxMS0wNC0xNSAxMToyOTozMCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2Rlc2NyaXB0b3JzLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHJ0cHhxdGRlcGF5LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL3F0ZGVtdXguYzoKLQkgIHF1aWNrdGltZTogUmVtb3ZlIHVudXNlZCBidXQgc2V0IHZhcmlhYmxlcwotCSAgR0NDIDQuNi54IHNwaXRzIHdhcm5pbmdzIGFib3V0IHN1Y2ggdmFyaWFibGUgdXNhZ2UuIE5vdGUgdGhhdCBzb21lCi0JICBjYWxjdWxhdGlvbnMgYXJlIGxlZnQgYXMgY29tbWVudHMgZm9yIGluZm9ybWF0aXZlIHB1cnBvc2VzLgotCi0yMDExLTA0LTE1IDExOjIzOjM4ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JICBtYXRyb3NrYTogUmVtb3ZlIHVudXNlZCBidXQgc2V0IHZhcmlhYmxlcwotCSAgR0NDIDQuNi54IHNwaXRzIHdhcm5pbmdzIGFib3V0IHN1Y2ggdmFyaWFibGUgdXNhZ2UuCi0KLTIwMTEtMDQtMTUgMTE6MTk6MjYgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogUmVtb3ZlIHVudXNlZCBidXQgc2V0IGR1cmF0aW9uIHZhcmlhYmxlCi0JICBHQ0MgNC42Lnggc3BpdHMgd2FybmluZ3MgYWJvdXQgc3VjaCB2YXJpYWJsZSB1c2FnZS4KLQotMjAxMS0wNC0xNSAxMToxODoxOSArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHhkZW11eDogUmVtb3ZlIHVudXNlZCBidXQgc2V0IGtleWZyYW1lIHZhcmlhYmxlcwotCSAgVGhlIEZJWE1FcyBhYm91dCB0aGUga2V5ZnJhbWUgZmxhZyBuZXZlciBiZWluZyB1c2VkIGFyZSBsZWZ0IGZvciBsYXRlcgotCSAgZml4aW5nLCBhdCB3aGljaCBwb2ludCB0aGUga2V5ZnJhbWUgdmFyaWFibGVzIGNvdWxkIGJlIGFkZGVkIGJhY2suCi0KLTIwMTEtMDQtMTUgMTE6MTY6NDIgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSAgZWRnZXR2OiBSZW1vdmUgdW51c2VkIGJ1dCBzZXQgaGVpZ2h0IHZhcmlhYmxlCi0JICBHQ0MgNC42Lnggc3BpdHMgd2FybmluZ3MgYWJvdXQgc3VjaCB2YXJpYWJsZXMuCi0KLTIwMTEtMDQtMTUgMTg6NTE6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiB1cGRhdGUgZm9yIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQoKSBBUEkgY2hhbmdlCi0KLTIwMTEtMDItMDEgMTU6NTc6MDEgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogVXNlIGV4aXN0aW5nIGZ1bmN0aW9ucyB0byBwYXJzZSBSVENQIEZCIHBhY2tldHMKLQkgIFVzZSBleGlzdGluZyBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBGQ0kgZnJvbSBGQiBwYWNrZXRzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMjU1MwotCi0yMDExLTAyLTAxIDE2OjIzOjUyIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmxpc3Q6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBtYXJzaGFsIEdzdEJ1ZmZlciBhcyBhIE1pbmlPYmplY3QgaW5zdGVhZCBvZiBhIHBvaW50ZXIKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjI1NTMKLQotMjAxMS0wNC0xNCAyMzoyNDo1NiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQmV0dGVyIGNhbGN1bGF0aW9uIG9mIGZyYW1lcmF0ZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NzgzMwotCi0yMDExLTA0LTEzIDEyOjM3OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGRlZmF1bHQgdG8gZHRzLW1ldGhvZD1yZW9yZGVyIGFuZCBwcmVzZW50YXRpb24tdGltZT10cnVlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2Njk5Ci0KLTIwMTEtMDQtMTUgMTI6NDc6NTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgdGVzdHM6IHF0bXV4OiB0ZXN0IHZhcmlvdXMgZHRzLW1ldGhvZHMKLQotMjAxMS0wNC0xNSAxMjozNDowNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBmaXggY29ybmVyIGNhc2UgYnVmZmVyIGhhbmRsaW5nIGZvciByZW9yZGVyIG1ldGhvZAotCi0yMDExLTA0LTE0IDEzOjQ3OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IERvbid0IGxlYWsgdGhlIFNFRUtJTkcgcXVlcnkKLQotMjAxMS0wNC0xNCAxMzo0MzowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtb292cmVjb3Zlci5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG1vb3ZyZWNvdmVyLmg6Ci0JICBxdG1vb3ZyZWNvdmVyOiBEb24ndCBsZWFrIHRoZSBzdGF0aWMgcmVjdXJzaXZlIG11dGV4Ci0KLTIwMTEtMDQtMTQgMTM6Mzc6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoKLQkgIHY0bDJyYWRpbzogRnJlZSB2aWRlb2RldiBzdHJpbmcgYmVmb3JlIHJlcGxhY2luZyBpdAotCi0yMDExLTA0LTE0IDEzOjI0OjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmM6Ci0JICBtYXRyb3NrYXBhcnNlOiBBbGxvdyB3ZWJtIGFuZCBtYXRyb3NrYSBjYXBzIGFuZCBkb24ndCBsZWFrIGNhcHMKLQotMjAxMS0wNC0xNCAwNzozNToyOSArMDEwMCAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgQWRkIHBhcnNlciBwbHVnaW4KLQotMjAxMS0wNC0xMyAyMTo1ODozNiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9NYWtlZmlsZS5hbToKLQkqIGdzdC9kdG1mL2dzdGR0bWZjb21tb24uaDoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5Lmg6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmg6Ci0JICBkdG1mOiBNb3ZlIGR1cGxpY2F0ZSAjZGVmaW5lcyBpbnRvIGEgY29tbW9uIGluY2x1ZGUKLQkgIENlbnRyYWxpemUgZHVwbGljYXRlZCBjb25zdGFudHMgc28gdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLgotCSAgQWxzbyBzdGFuZGFyZGlzZSBtaW5pbXVtIHRvbmUgZHVyYXRpb24gdG8gMjUwbXMgYW5kIG1pbmltdW0gaW50ZXItdG9uZQotCSAgaW50ZXJ2YWwgdG8gMTAwbXMuCi0KLTIwMTEtMDMtMjQgMTQ6MzQ6MjQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQGVudHJvcHl3YXZlLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBBZGQgY29uZGl0aW9uYWxzIG9uIFdBVkVfRk9STUFUX0RPTEJZX0FDM19TUERJRgotCi0yMDExLTA0LTExIDIwOjA5OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc2RlYnVnLmM6Ci0JICBjYXBzZGVidWc6IGZpeCB1bnVzZWQtYnV0LXNldC12YXJpYWJsZSB3YXJuaW5ncyB3aXRoIGdjYyA0LjYKLQotMjAxMS0wNC0xMSAyMDowNTo1NCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBmaXggdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgd2FybmluZyB3aXRoIGdjYyA0LjYKLQkgIE1vc3QgbGlrZWx5IGEgbGVmdG92ZXIgZnJvbSB3aGVuIHRoZSBpbmRleCBwYXJzaW5nIGNvZGUgd2FzIHJld3JpdHRlbi4KLQotMjAxMS0wNC0xMSAxOTo1NDowMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBmaXggdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgd2FybmluZyB3aXRoIGdjYyA0LjYKLQotMjAxMS0wNC0xMSAxOTo1MDowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogZml4IGhhbmRsaW5nIG9mIFlVViBpbWFnZXMgd2l0aCAnb2RkJyB3aWR0aHMKLQkgIEZpeGVzIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlIHdhcm5pbmdzIHdpdGggZ2NjIDQuNi4KLQotMjAxMS0wNC0xMSAxOTo0OToyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHZpZGVvZmxpcDogZml4IHVudXNlZC1idXQtc2V0LXZhcmlhYmxlIHdhcm5pbmdzIHdpdGggZ2NjIDQuNgotCi0yMDExLTA0LTEzIDE4OjExOjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgYXVkaW93c2luY3tiYW5kLGxpbWl0fTogRml4IGNoZWNrIGZvciBkaXZpc29uIGJ5IHplcm8KLQotMjAxMS0wNC0xMyAxODowMTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JICBhdWRpb3dzaW5jYmFuZDogRml4IHJhbmdlIG9mIGtlcm5lbCBlbGVtZW50cyAobGltIC0+IGxpbS0xKQotCi0yMDExLTA0LTEzIDE4OjAwOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JICBhdWRpb3dzaW5jbGltaXQ6IEFkZCBzb21lIG1vcmUgYnJhY2VzIHRvIG1ha2UgdGhlIGNvZGUgbW9yZSByZWFkYWJsZQotCi0yMDExLTA0LTExIDE4OjQwOjMwIC0wNTAwICBKb3JkaSBCdXJndWV0LUNhc3RlbGwgPGpvcmRpLmJ1cmd1ZXQtY2FzdGVsbEBsaWdvLm9yZz4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JICBhdWRpb3dzaW5jbGltaXQ6IEZpeCByYW5nZSBvZiBrZXJuZWwgZWxlbWVudHMgKGxpbSAtPiBsaW0tMSkgaW4gaGlnaC9sb3ctcGFzcyBmaWx0ZXJzCi0KLTIwMTEtMDQtMTMgMTc6NDk6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSAgYXVkaW93c2luY2JhbmQ6IEFkZCBuZXcgd2luZG93aW5nIGZ1bmN0aW9uczogZ2F1c3NpYW4sIGNvcyBhbmQgaGFubgotCi0yMDExLTA0LTExIDE4OjQxOjQzIC0wNTAwICBKb3JkaSBCdXJndWV0LUNhc3RlbGwgPGpvcmRpLmJ1cmd1ZXQtY2FzdGVsbEBsaWdvLm9yZz4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JICBhdWRpb3dzaW5jbGltaW10OiBBZGQgbmV3IHdpbmRvd3MgdG8gaGlnaC9sb3ctcGFzcyBmaWx0ZXJzOiBnYXVzc2lhbiwgY29zaW5lLCBoYW5uCi0KLTIwMTEtMDQtMTMgMTY6NDc6MDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHNldCBzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtIG9uIGgyNjQgY2FwcyBpZiB0aGVyZSdzIG5vIGNvZGVjIGRhdGEKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDY2NjIKLQotMjAxMS0wNC0xMyAxNjozNzowNyArMDEwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiByZXN0cmljdCBoMjY0IHNvbWUgbW9yZSB0byBvbmx5IGFjY2VwdCBBVS1hbGlnbmVkIEFWQwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNjY2MgotCi0yMDExLTA0LTEzIDE3OjExOjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IFRoZSBWQlJJIGhlYWRlciBpcyBhbHdheXMgYXQgb2Zmc2V0IDB4MjAsIGluZGVwZW5kZW50IG9mIE1QRUcgdmVyc2lvbgotCSAgQWxzbyBjbGVhbiB1cCBhZHZhbmNpbmcgb2YgdGhlIGRhdGEgcG9pbnRlciBhIGJpdC4KLQkgIEZpeGVzIGJ1ZyAjNjQ3NjU5LgotCi0yMDExLTA0LTEzIDE1OjE4OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9xdG11eC5jOgotCSAgcXRtdXg6IGFkZCB2YXJpYW50LWxlc3MgdmlkZW8vcXVpY2t0aW1lIHRvIHNvdXJjZSBwYWQgdGVtcGxhdGUgY2FwcwotCSAgVGhpcyBpcyBuZWVkZWQgZm9yIGF1dG9tYXRpYyB0cmFuc2NvZGluZyB1c2luZyBlbmNvZGViaW4uIE91ciB0eXBlZmluZGVyCi0JICBkb2VzIG5vdCBhbHdheXMgYWRkIGEgdmFyaWFudCB0byB0aGUgZm91bmQgY2FwcywgYW5kIGVuY29kZWJpbiBuZWVkcwotCSAgYW4gKmV4YWN0KiBtYXRjaCB0byB0aGUgY2FwcyBvbiB0aGUgc291cmNlIHBhZCB0ZW1wbGF0ZSwgc28gd2UgbmVlZAotCSAgdG8gYWRkIHRoZSB2YXJpYW50LWxlc3MgdmlkZW8vcXVpY2t0aW1lIGNhcHMgdG8gdGhlIHRlbXBsYXRlIGFzIHdlbGwKLQkgIGZvciBlbmNvZGViaW4gdG8gYmUgYWJsZSB0byBmaW5kIGl0LiBBZGQgdW5pdCB0ZXN0IGZvciB0aGlzIGFzIHdlbGwuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyODc5Ci0KLTIwMTEtMDQtMTMgMTY6MTc6NDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBQcm9wZXJseSBpbnRlcnByZXRlIHRoZSByZXN1bHQgb2Ygc3RyY21wKCkKLQotMjAxMS0wNC0xMyAxNjowOTowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IERvbid0IHN0b3JlIGltYWdlIHRhZ3MgaW5zaWRlIHRoZSB2b3JiaXNjb21tZW50cyBhbmQgdGhlIGZsYWMgbWV0YWRhdGEKLQkgIEluc3RlYWQgb25seSBzdG9yZSB0aGVtIGluc2lkZSB0aGUgZmxhYyBtZXRhZGF0YS4gVGhlcmUncwotCSAgbm8gcG9pbnQgaW4gc3RvcmluZyB0aGVtIHR3aWNlIGFuZCB0aGUgZmxhYyBtZXRhZGF0YSBpcwotCSAgc3RpbGwgdGhlIG9mZmljaWFsIHdheSB0byBzdG9yZSBpbWFnZSB0YWdzIGluc2lkZSBmbGFjLgotCi0yMDExLTA0LTEzIDEyOjM4OjE1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgotCSAgdGVzdHM6IGlnbm9yZSBuZXcgcXRtdXgtcmVsYXRlZCB0ZXN0IGJpbmFyaWVzCi0KLTIwMTEtMDQtMTMgMTE6MjU6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBnc3QvcXVpY2t0aW1lL01ha2VmaWxlLmFtOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eHBsdWdpbi5jOgotCSogZ3N0L3F1aWNrdGltZS9xdWlja3RpbWUuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgcXVpY2t0aW1lOiBtb3ZlIHF0bXV4IHBsdWdpbiBmcm9tIC1iYWQgdG8gLWdvb2QKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzY2OTkKLQotMjAxMS0wNC0xMiAxNjo0MjoxNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBkdG1mOiBSZW1vdmUgbGVmdG92ZXIgTUFFTU9fQlJPS0VOIGRlZmluZXMKLQkgIFJlbW92ZSBkZWZpbmVzIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gb2xkIE1hZW1vIHJlbGVhc2VzCi0KLTIwMTEtMDQtMDQgMTI6MjE6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogbW9yZSBoZWxwZnVsIGRlYnVnIGVycm9yIG1lc3NhZ2Ugd2hlbiBubyBuZWVkZWQgZHVyYXRpb24gb24gaW5wdXQgYnVmZmVycwotCSAgRml4ZXMgIzY0NjI1Ni4KLQotMjAxMS0wMy0yMSAxMDo1Njo1MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBBZGRpbmcgR3N0VGFnWG1wV3JpdGVyIGludGVyZmFjZQotCSAgQWRkcyBHc3RUYWdYbXBXcml0ZXIgaW50ZXJmYWNlIHN1cHBvcnQgdG8gcXRtdXgKLQotMjAxMS0wMy0yMiAyMDo1MzowOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiB1c2UgcnVubmluZyB0aW1lIGZvciBzeW5jaHJvbml6YXRpb24KLQkgIFNlZSBhbHNvICM0MzI2MTIuCi0KLTIwMTEtMDMtMTAgMTY6MDM6NTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcHJvdmlkZSBmb3IgUFRTIG1ldGFkYXRhIHdoZW4gc28gY29uZmlndXJlZAotCSAgLi4uIGFuZCBub3Qgb25seSB3aGVuIHNvcnQtb2YgZmVlbGluZyBsaWtlIGl0LgotCSAgSW4gYW55IGNhc2UsIGlmIGl0IHR1cm5zIG91dCBhbGwgcmVhbGx5IGlzIGluIG9yZGVyLAotCSAgYW5kIHByZXN1bWFibHkgRFRTID09IFBUUywgdGhlbiBubyBjdHRzIHdpbGwgYmUgcHJvZHVjZWQgYW55d2F5LgotCi0yMDExLTAzLTEwIDE2OjAyOjQyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGFsc28gdHJhY2sgb3JpZ2luYWwgUFRTIGJ1ZmZlciB0aW1lc3RhbXAgaW4gcmVvcmRlciBkdHMtbWV0aG9kCi0KLTIwMTEtMDItMjEgMTI6MTQ6NTkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBSZXZlcnQgIkNoZWNrIHRoYXQgY29sbGVjdHBhZHMgZXhpc3RzIGJlZm9yZSByZW1vdmluZyBwYWQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDZkODc0MDQ3NmNjZDNhMzQ5OGRjNGYxOGMxOTczMzY0MzgyNWM3YjguCi0JICBEZXBlbmRzIG9uIGEgY29yZSBjb21taXQgdGhhdCB3YXMgcmV2ZXJ0ZWQKLQotMjAxMS0wMi0yMCAyMzo1NzoxOSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIENoZWNrIHRoYXQgY29sbGVjdHBhZHMgZXhpc3RzIGJlZm9yZSByZW1vdmluZyBwYWQKLQkgIFRoZSBjb3JlIG5vdyBjYWxscyByZWxlYXNlIHBhZCBmcm9tIGZpbmFsaXplLCBhdCB3aGljaCBwb2ludAotCSAgdGhlIGNvbGxlY3RwYWRzIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGZyZWVkLgotCi0yMDExLTAxLTEzIDExOjI4OjMyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkgIHRlc3Q6IHF0bXV4OiBUZXN0cyBxdG11eCByZXVzZQotCSAgRm9yY2VzIHRoZSB1c2Ugb2YgcXRtdXggYWZ0ZXIgaXQgaGFzIGJlZW4gcHV0IHRvIFBMQVlJTkcgYW5kIGJhY2sKLQkgIHRvIE5VTEwgb25jZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTMzOAotCi0yMDExLTAxLTEzIDE1OjI3OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHNldCBzcmMgcGFkcyB3aGVuIHN0YXJ0aW5nIGZpbGUKLQkgIC4uLiByYXRoZXIgdGhhbiBhdCBfaW5pdCB0aW1lLCBzbyB0aGV5IGFyZSBhbHNvIGF2YWlsYWJsZSBmb2xsb3dpbmcgYQotCSAgcGFkIChkZSlhY3RpdmF0aW9uIGN5Y2xlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTMzOAotCi0yMDExLTAxLTAzIDE3OjI0OjIzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IGFkanVzdCBuYXN0eSBjYXNlIHRpbWVzdGFtcCB0cmFja2luZwotCSAgVGhhdCBpcywgYWxsIHNvcnRzIG9mIHByb2JsZW1zIGFyaXNlIHdpdGggcmUtb3JkZXJlZCBpbnB1dCB0aW1lc3RhbXBzIHRoYXQKLQkgIHRlbmQgdG8gZGVmeSBhdXRvbWFnaWMgaGFuZGxpbmcgZm9yIGV2ZXJ5IGNhc2UsIHNvIGFsbG93IGZvciBhIGZldyB2YXJpYXRpb25zCi0JICB0aGF0IGNhbiBiZSB0cmllZCBkZXBlbmRpbmcgb24gY2lyY3Vtc3RhbmNlcy4KLQkgIEFsc28gdHJ5IHRvIGRvY3VtZW50IGFjY29yZGluZ2x5LgotCSAgQWxzbyBmaXhlcyAjNjM4Mjg4LgotCi0yMDEwLTEyLTMwIDIxOjQ4OjQxICswMjAwICBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQG5va2lhLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGdldCByaWQgb2YgdGltZXN0YW1wIG92ZXJwcm90ZWN0aXZlbmVzcwotCSAgU2lnbmVkLW9mZi1ieTogRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0Bub2tpYS5jb20+Ci0KLTIwMTEtMDEtMDMgMTY6NTY6NTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zcmVjb3ZlcnkuYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBzaW1wbGlmeSBhbmQgZml4IHB0c19vZmZzZXQgc3RvcmluZwotCSAgSW4gcGFydGljdWxhciwgb25seSB3cml0ZSBhIGN0dHMgYXRvbSBpZiBhbmQgb25seSBpZiBldmVyIGEgbm9uLXplcm8gb2Zmc2V0LgotCi0yMDExLTAxLTAzIDEwOjQzOjE1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGFkZCBzb21lIG1vcmUgZG9jdW1lbnRhdGlvbgotCi0yMDEwLTEyLTAzIDE1OjIzOjAwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IHJlbW92ZSBsYXJnZS1maWxlIHByb3BlcnR5Ci0JICBSYXRoZXIsIGF1dG8tZGV0ZXJtaW5lIGlmIDY0LWJpdHMgZmllbGRzIGFyZSBuZWVkZWQgZm9yIGEgdmFsaWQgcmVzdWx0LCBhbmQKLQkgIHN0aWNrIHRvIHBsYWluIDMyLWJpdHMgaWYgbm90IG5lZWRlZC4KLQkgIEFQSTogR3N0UVRNdXg6bGFyZ2UtZmlsZSAocmVtb3ZlZCkKLQotMjAxMC0xMi0xOSAxMjo1MzozNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGcmVlIEF0b21JbmZvIHN0cnVjdHMKLQotMjAxMC0xMi0xOSAxMjo1MDozMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBGcmVlIHRhZyBzdHJpbmcgYWZ0ZXIgdXNlCi0KLTIwMTAtMTItMTkgMTI6MTI6MjUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICB0YWdzY2hlY2tpbmc6IEZpeCBzb21lIG1vcmUgbWVtb3J5IGxlYWtzCi0KLTIwMTAtMTItMTcgMTk6NDE6MjUgKzAyMDAgIExhc3NlIExhdWtrYW5lbiA8bGFzc2UubGF1a2thbmVuQGRpZ2lhLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGFsbG93IHplcm8gZHVyYXRpb24gdHJhY2tzCi0KLTIwMTAtMTItMDMgMTg6MDk6NDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogYWRkIGRvY3VtZW50YXRpb24KLQotMjAxMC0xMi0wMSAxMDo0NTo0OSArMDEwMCAgRGF2aWQgSG95dCA8ZGhveXRAbGxubC5nb3Y+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBoYW5kbGUgbXN2YyBmdHJ1bmNhdGUgaW5jb21wYXRpYmlsaXR5Ci0JICBGaXhlcyAjNjM2MTg1LgotCi0yMDEwLTExLTI3IDE2OjA3OjE5IC0wNjAwICBBbGVqYW5kcm8gR29uemFsZXogPGFnb256YWxlekBkZXh0cmF0ZWNoLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGdzdF9xdG11eF9jaGVja19kaWZmZXJlbmNlIHZlcmlmeSBiZWZvcmUgc3VidHJhY3QKLQkgIEF2b2lkIG5lZ2F0aXZlIG92ZXJmbG93IGJ5IGNoZWNraW5nIHRoZSBvcmRlciBvZiBvcGVyYW5kcwotCSAgb24gc3VidHJhY3Rpb24gb2YgdW5zaWduZWQgaW50ZWdlcnMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM1ODc4Ci0KLTIwMTAtMTEtMTkgMTc6NTU6MzYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcmVtb3ZlIHJlbW5hbnQgb2Ygb2Jzb2xldGUgcHJvcGVydHkKLQotMjAxMC0xMS0xOSAxNToxODo1OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICB0ZXN0czogcXRtdXg6IGFsc28gdW5pdCB0ZXN0IGZyYWdtZW50ZWQgZmlsZSBjYXNlcwotCi0yMDEwLTA3LTMwIDEyOjQ4OjI5ICswMjAwICBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IGFsbG93IHNwZWNpZnlpbmcgdHJhayB0aW1lc2NhbGUKLQkgIFRoaXMgaXMgbWFpbmx5IGJlY2F1c2UgU21vb3Roc3RyZWFtaW5nIGNsaWVudCBhcmUgYnJva2VuIGFuZCBkb24ndAotCSAgdGFrZSB0aGUgVGltZVNjYWxlIHByb3BlcnR5IGludG8gYWNjb3VudC4KLQotMjAxMC0xMS0xOSAxNzo0MTo0MSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBpbmNsdWRlIHNkdHAgYXRvbXMgZm9yIGlzbXYgZnJhZ21lbnRlZCBmaWxlcwotCSAgQmFzZWQgb24gcGF0Y2ggYnkgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLTIwMTAtMTEtMTkgMTk6MTc6NDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZW5hYmxlIGRlZmF1bHQgZnJhZ21lbnRlZCBmaWxlIGZvciBpc21sbXV4Ci0KLTIwMTAtMDktMDIgMTM6NTg6MDUgKzAyMDAgIE1hcmMtQW5kcsOpIEx1cmVhdSA8bWx1cmVhdUBmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2Z0eXBjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5oOgotCSAgcXRtdXg6IGFkZCBpc21sbXV4LCBmb3IgZnJhZ21lbnRlZCBpc21sIG1ham9yIGJyYW5kCi0KLTIwMTAtMTEtMTkgMTQ6NDQ6NDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZmluYWxpemUgc2lua3BhZHMgbGlzdAotCi0yMDEwLTA3LTIyIDE5OjQwOjA3ICswMjAwICBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGFkZCBtb292IGluIHN0cmVhbWhlYWRlcgotCi0yMDEwLTA4LTA2IDEzOjI2OjI3ICswMjAwICBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IGFkZCBzdHJlYW1hYmxlIHByb3BlcnR5IHRvIGF2b2lkIGJ1aWxkaW5nIGZyYWdtZW50ZWQgbWZyYSBpbmRleAotCi0yMDEwLTExLTE4IDE2OjQ4OjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IGFkZCBtZnJhIHRvIGZyYWdtZW50ZWQgZmlsZQotCSAgQmFzZWQgb24gcGF0Y2ggYnkgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLTIwMTAtMTEtMTUgMTU6MTc6NTkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4Lmg6Ci0JICBxdG11eDogb3B0aW9uYWxseSBjcmVhdGUgZnJhZ21lbnRlZCBmaWxlCi0JICBJbiB0aGlzIG1vZGUsIGFuIGluaXRpYWwgZW1wdHkgbW9vdiAoY29udGFpbmluZyBvbmx5IHN0cmVhbSBtZXRhZGF0YSkgaXMgd3JpdHRlbiwKLQkgIGZvbGxvd2VkIGJ5IGZyYWdtZW50cyBjb250YWluaW5nIGFjdHVhbCBkYXRhIChhbG9uZyB3aXRoIHJlcXVpcmVkIG1ldGFkYXRhKS4KLQkgIE5ldyBmcmFnbWVudHMgYXJlIHN0YXJ0ZWQgZWl0aGVyIGF0IGtleWZyYW1lIChpZiBzdWNoIGFyZSBzcGFyc2UpIG9yIHdoZW4KLQkgIHByb3BlcnR5IGNvbmZpZ3VyZWQgZHVyYXRpb24gZXhjZWVkZWQuCi0JICBCYXNlZCBvbiBwYXRjaCBieSBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQkgIEZpeGVzICM2MzI5MTEuCi0KLTIwMTAtMTEtMTUgMTU6MTI6NDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogdXNlIGhlbHBlciB0byBzZXQgYXRvbSBmbGFncyBmcm9tIGdpdmVuIHVpbnQKLQotMjAxMC0xMS0wOSAxNjo0OTowNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiByZWZhY3RvciBjb25maWd1cmluZyBhbmQgc2VuZGluZyBvZiBtb292Ci0JICBCYXNlZCBvbiBwYXRjaCBieSBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQotMjAxMC0xMS0wOSAxNTo1NDo0NCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiByZWZhY3RvciBleHRyYSB0b3AtbGV2ZWwgYXRvbSBoYW5kbGluZwotCSAgQWxzbyBjaGVjayBhIGJpdCBtb3JlIGZvciBwb3NzaWJsZSBlcnJvcnMsIGFuZCBmcmVlIHByb3BlciBpdGVtcyBpbiBzdWNoIGNhc2UuCi0KLTIwMTAtMTEtMDkgMTU6MDE6MTUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcmVmYWN0b3Igc2xpZ2h0bHkgdXNpbmcgYnVmZmVyIGhlbHBlcgotCi0yMDEwLTExLTA1IDEzOjQ4OjU3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGZpeCBtaXNpbmZvcm1pbmcgY29tbWVudAotCi0yMDEwLTExLTA1IDEyOjA4OjE1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGRlbGVnYXRlIG12ZXggaGFuZGxpbmcgdG8gYXRvbXMKLQkgIC4uLiB3aGljaCBrZWVwcyBxdG11eCBzaW1wbGVyLgotCi0yMDA5LTA5LTI4IDE2OjExOjM1ICswMjAwICBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGFkZCBtdmV4L3RyZXggaW4gaGVhZGVyIGlmIGZyYWdtZW50ZWQKLQkgIE9uZSAidHJleCIgaXMgYWRkZWQgcGVyICJ0cmFrIi4gV2UgZG9uJ3Qgc3VwcG9ydCBkZWZhdWx0IHZhbHVlcywKLQkgIGJ1dCB0aGUgInRyZXgiIGJveCBpcyBtYW5kYXRvcnkuCi0KLTIwMDktMDktMjggMTM6MDE6MzAgKzAyMDAgIE1hcmMtQW5kcsOpIEx1cmVhdSA8bWx1cmVhdUBmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSAgcXRtdXg6IGFkZCBhIGNvdXBsZSBvZiBmb3VyY2MgZm9yIGZyYWdtZW50ZWQgbXA0Ci0KLTIwMTAtMTEtMDUgMTE6MDg6MDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogYXZvaWQgcmVtb3ZpbmcgdGVtcCBmaWxlIHdoZW4gZXJyb3Igb2NjdXJyZWQKLQotMjAwOS0wOS0zMCAxNzoxNjozMCArMDIwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiB0cnVuY2F0ZSBidWZmZXIgZmlsZSBhZnRlciBlYWNoIHNlbmQKLQotMjAwOS0wOS0yOCAxNjo1Mzo1MSArMDIwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiByZW1vdmUgdGVtcCBmaWxlIHdoZW4gcmVzZXQvZmluYWxpemUKLQotMjAxMC0xMC0xOSAxMzo0MzoxNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bW9vdnJlY292ZXIuYzoKLQkgIHZhcmlvdXMgKGdzdCk6IGFkZCBtaXNzaW5nIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZmxhZ3MKLQkgIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyBhcyBuZWVkZWQuCi0KLTIwMTAtMTAtMTMgMTc6NDc6MjkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcHJldmVudCBpbmZpbml0ZSBsb29wIHdoZW4gYWRqdXN0aW5nIGZyYW1lcmF0ZQotCSAgRml4ZXMgIzYzMjA3MC4KLQotMjAxMC0xMC0wMyAyMzo0NTo0NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBBZGQgR19QQVJBTV9TVEFUSUNfU1RSSU5HUwotCSAgQWRkIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgdG8gcXRtdXggcHJvcGVydGllcwotCi0yMDEwLTA5LTE1IDE3OjU0OjQ5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9mb3VyY2MuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgIHF0bXV4OiBGb2xsb3cgeG1wIHNlcmlhbGl6YXRpb24gZ3VpZGVsaW5lcyBjbG9zZXIKLQkgIHF0IGFuZCBpc29tIHZhcmlhbnRzIGhhdmUgZGlmZmVyZW50IHdheXMgb2Ygc2VyaWFsaXppbmcKLQkgIHhtcCwgZm9sbG93IHRoZXNlIGd1aWRlbGluZXMuCi0JICBUaG9zZSBjYW4gYmUgZm91bmQgaW4gQWRvYmUncyB4bXAgZG9jcy4KLQotMjAxMC0wOC0xNiAxMjozNjoyNCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBhdXRvZGV0ZWN0IG91dC1vZi1vcmRlciBpbnB1dCB0aW1lc3RhbXBzIGFuZCBkZXRlcm1pbmUgRFRTIGFjY29yZGluZ2x5Ci0JICBGYXZvdXIgdXNpbmcgaW5wdXQgYnVmZmVyIHRpbWVzdGFtcHMgZm9yIERUUywgYnV0IGZhbGxiYWNrIHRvIHVzaW5nIGJ1ZmZlcgotCSAgZHVyYXRpb24gKGFjY3VtdWxhdGlvbikgaWYgaW5wdXQgdHMgZGV0ZWN0ZWQgb3V0LW9mLW9yZGVyLgotCSAgRml4ZXMgIzYyNDIxMi4KLQotMjAxMC0wNy0yOCAxNjoxNTo1MyArMDIwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiB1c2UgY2FwcyBiaXRyYXRlIGF0IGxhc3QgY2hhbmNlCi0JICBJZiB3ZSBkaWRuJ3QgZ2V0IHRoZSBzdHJlYW0ncyBiaXRyYXRlIGZyb20gb25lIG9mIHRoZSBhdG9tcywKLQkgIHRyeSBnZXR0aW5nIGl0IGZyb20gdGhlIGNhcHMgYXMgYSBsYXN0IHJlc29ydC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjU0OTYKLQotMjAxMC0wNy0yOCAxNjoxMjoxMSArMDIwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkgIHF0bXV4OiBidHJ0IC0gbWF4IGJpdHJhdGUgYmVmb3JlIGF2ZXJhZ2UKLQkgIEFjY29yZGluZyB0byBpc28gYmFzZSBtZWRpYSBmaWxlIGZvcm1hdCwgdGhlIG1heCBiaXRyYXRlCi0JICBpcyBiZWZvcmUgdGhlIGF2ZwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTQ5NgotCi0yMDEwLTA3LTA2IDE0OjQ4OjA4ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IFdyaXRlICdidHJ0JyBhdG9tIGZvciBILjI2NCBtZWRpYSBpZiBwb3NzaWJsZQotCSAgVGhpcyB3cml0ZXMgb3V0IHRoZSBvcHRpb25hbCAnYnRydCcgYXRvbSAoTVBFRzRCaXRyYXRlQm94KSBmb3IgSC4yNjQKLQkgIG1lZGlhIGlmIGVpdGhlciBvciBib3RoIG9mIGF2ZXJhZ2UgYW5kIG1heGltdW0gYml0cmF0ZSBhcmUgYXZhaWxhYmxlIGZvcgotCSAgdGhlIHN0cmVhbS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM2NzgKLQotMjAxMC0wNy0wNSAxNDowOTo1MCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgIHF0bXV4OiBXcml0ZSBhdmcvbWF4IGJpdHJhdGUgdG8gRVNEUyBpZiBhdmFpbGFibGUKLQkgIFRoaXMgY29sbGVjdHMgdGhlICdiaXRyYXRlJyBhbmQgJ21heGltdW0tYml0cmF0ZScgdGFncyBvbiB0aGUKLQkgIGNvcnJlc3BvbmRpbmcgcGFkIGFuZCB1c2VzIHRoZXNlIHRvIHBvcHVsYXRlIHRoZXNlIGZpZWxkcyBpbiB0aGUgRVNEUwotCSAgd2hlcmUgYXBwbGljYWJsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM2NzgKLQotMjAxMC0wNy0wMiAxMjo0NToyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IERvbid0IHVzZSBib2d1cyBjb2RlYy9mb3JtYXQgdGFncwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzM2NQotCi0yMDEwLTA2LTI1IDIwOjE5OjIwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IFdyaXRlIHVpbnQgdGFncyB0aGF0IGRvbid0IGhhdmUgYSBjb21wbGVtZW50Ci0JICBXcml0ZSB1aW50IHRhZ3MgdGhhdCBoYXZlIGNvbXBsZW1lbnRzIChlLmcuIHRyYWNrLW51bWJlci8KLQkgIHRyYWNrLWNvdW50KSBldmVuIHdoZW4gd2Ugb25seSBoYXZlIG9uZSBvZiB0aGVtIGF2YWlsYWJsZQotCSAgYW5kIHNldCB0aGUgb3RoZXIgb25lIHRvIDAuCi0JICBGaXhlcyAjNjIyNDg0Ci0KLTIwMTAtMDYtMjEgMTk6Mzk6NTQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBSZW1vdmUgdGhlIHBhZCBmcm9tIG91ciBpbnRlcm5hbCBsaXN0IGJlZm9yZSBjYWxsaW5nIGNvbGxlY3RwYWRzCi0JICBQcmV2aW91c2x5IHdlIHdvdWxkIGVuZCB1cCB3aXRoIHRoZSBjb2xsZWN0cGFkZGF0YSBzdHJ1Y3R1cmUgYWxyZWFkeSBmcmVlZC4KLQkgIFRoaXMgd291bGQgcmVzdWx0IGluIGEgYm9ndXMgaXRlcmF0aW9uIG9mIG11eC0+c2lua3BhZHMgKGFsbCB0aGUKLQkgIEdzdFFUUGFkIGJlaW5nIGZyZWVkKSBhbmQgaXQgd291bGRuJ3QgYmUgcmVtb3ZlZCBmcm9tIHRoYXQgbGlzdC4KLQkgIEZpbmFsbHksIGR1ZSB0byBpdCBub3QgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoYXQgbGlzdCwgd2Ugd291bGQgZW5kIHVwCi0JICBjYWxsaW5nIGEgYm9ndXMgZ3N0X3F0X211eF9wYWRfcmVzZXQgb24gdGhvc2Ugc3RydWN0dXJlcyA9PiBTRUdGQVVMVAotCi0yMDEwLTA1LTEyIDE4OjUwOjM0IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3F1aWNrdGltZS9mb3VyY2MuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBBZGQgVlA4Ci0KLTIwMTAtMDUtMTEgMTM6MTU6MzcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICB0ZXN0czogZG9uJ3QgZmFpbCB0YWdzY2hlY2tpbmcgdGVzdCBpZiBxdGRlbXV4IGlzIG5vdCBhdmFpbGFibGUgb3IgdG9vIG9sZAotCi0yMDEwLTAzLTI3IDA5OjQ2OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eHBsdWdpbi5jOgotCSAgcXRtdXg6IHVzZSBHU3RyZWFtZXIgcGFja2FnZSBuYW1lIGFuZCBvcmlnaW4gaW4gdGhlIHBsdWdpbiBpbmZvCi0KLTIwMTAtMDMtMjMgMTc6MzQ6MzAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICB0ZXN0czogdGFnc2NoZWNraW5nOiBOZXcgdGFncyB0ZXN0cwotCSAgQWRkcyBuZXcgdGFncyBjaGVja2luZyB0ZXN0cy4KLQotMjAxMC0wMy0yNSAwMDoyMDo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBpbml0IGRlYnVnIGNhdGVnb3J5IGJlZm9yZSB1c2luZyBpdAotCi0yMDEwLTAzLTIyIDE2OjU2OjAzICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkgIEFkZCAtV29sZC1zdHlsZS1kZWZpbml0aW9uCi0JICBhbmQgZml4IHRoZSB3YXJuaW5ncwotCi0yMDEwLTAzLTIyIDEzOjE2OjMzICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuaDoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmM6Ci0JICBBZGQgLVd3cml0ZS1zdHJpbmdzCi0JICBhbmQgZml4IGl0cyB3YXJuaW5ncwotCi0yMDEwLTAzLTIxIDIxOjM5OjE4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXNyZWNvdmVyeS5jOgotCSogZ3N0L3F1aWNrdGltZS9kZXNjcmlwdG9ycy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy90YWdzY2hlY2tpbmcuYzoKLQkgIEFkZCAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIHRvIGNvbmZpZ3VyZSBmbGFncwotCSAgQW5kIGZpeCBhbGwgd2FybmluZ3MKLQotMjAxMC0wMy0xOCAxNzozMDoyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bW9vdnJlY292ZXIuYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQotCi0yMDEwLTAzLTEyIDExOjI4OjUxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3RhZ3NjaGVja2luZy5jOgotCSAgdGVzdHM6IHRhZ3NjaGVja2luZzogSW1wcm92ZW1lbnRzIGFuZCBuZXcgZ2VvLWxvY2F0aW9uIHRlc3RzCi0JICBNYWtlcyBzb21lIGltcHJvdmVtZW50cyB0byB0YWdzY2hlY2tpbmcuYywgbWFraW5nIGl0IHVzZQotCSAgZmFrZXNyYyBpbnN0ZWFkIG9mIHZpZGVvdGVzdHNyYyBhbmQgYWxsb3dpbmcgdG8gc2V0IGlucHV0Ci0JICBjYXBzIHNvIHRoYXQgbW9yZSBtdXhlcnMgY2FuIGJlIHVzZWQuIFByZXZpb3VzbHkgd2UgY291bGQKLQkgIG9ubHkgdXNlIHRob3NlIHRoYXQgYWNjZXB0ZWQgcmF3IHZpZGVvIGNhcHMuCi0JICBBbHNvIGFkZHMgc29tZSB0ZXN0cyBmb3IgZ2VvLWxvY2F0aW9uIHRhZ3MKLQotMjAxMC0wMy0xMiAxMDo1MzozNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBVc2UgeG1wIG9uIG1wNG11eCBhbmQgZ3BwbXV4IHRvbwotCSAgRG8gbm90IHJlc3RyaWN0IHhtcCB0byBxdG11eCwgYnV0IHVzZSBpdCB0b28KLQkgIG9uIG1wNG11eCBhbmQgZ3BwbXV4Ci0KLTIwMTAtMDMtMDUgMTM6MzM6MzcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmM6Ci0JICBjaGVjazogdGFnc2NoZWNraW5nOiB0ZXN0cyBmb3IgdGFncyBzZXJpYWxpemF0aW9uIGluIG11eGVycwotCSAgQWRkcyBhIGNoZWNrIHVuaXQgdGVzdCB0aGF0IGFpbXMgdG8gdGVzdCB0YWdzIHNlcmlhbGl6YXRpb24KLQkgIGFuZCBkZXNlcmlhbGl6YXRpb24gY29uc2lzdGVuY3kgKGluIG11eGVycykuIEl0IHByb3ZpZGVzIGEKLQkgIGJhc2ljIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIG9uZSB0byBlYXNpbHkgc3BlY2lmeSB0YWdzLCBhCi0JICBtdXhlciBhbmQgYSBkZW11eGVyIGFuZCBhIHRlc3Qgd2lsbCBiZSBkb25lIHRvIGNoZWNrIGlmCi0JICB0aGUgdGFncyBoYXZlIGJlZW4gY29uc2lzdGVudGx5IG11eGVkIGFuZCBkZW11eGVkCi0KLTIwMTAtMDItMjIgMTY6NDU6MzQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGFkZCB4bXAgc3VwcG9ydAotCSAgQWRkcyB4bXAgbWV0YXRhZ3MgYWRkaW5nIHRvIHF0bXV4LgotCSAgRml4ZXMgIzYwOTUzOQotCi0yMDEwLTAzLTExIDE3OjE3OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG1vb3ZyZWNvdmVyLmM6Ci0JICBxdG11eDogZml4IEdTVF9FTEVNRU5UX0VSUk9SIHVzYWdlCi0JICBXZSBuZWVkIHRvIHBhc3MgKE5VTEwpIHJhdGhlciB0aGFuIE5VTEwgZm9yIGVtcHR5IGFyZ3VtZW50cy4KLQotMjAxMC0wMy0xMCAxMDoyMzoyMyAtMDYwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bW9vdnJlY292ZXIuYzoKLQkgIHF0bXV4OiBmaXggY29tcGlsZSBlcnJvcgotCSAgZ3N0L3F1aWNrdGltZS9nc3RxdG1vb3ZyZWNvdmVyLmM6MjY4OiB3YXJuaW5nOiBmb3JtYXQgbm90IGEgc3RyaW5nIGxpdGVyYWwgYW5kIG5vIGZvcm1hdCBhcmd1bWVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTI0NTQKLQotMjAxMC0wMi0yMiAxOTozODoxNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBSZW5hbWUgJ2F2Yy1zYW1wbGUnIHRvICdhdmMnIGluIGNhcHMKLQkgIEZpeGVzICM2MDY2NjIKLQotMjAxMC0wMi0yNiAxMTo1MDoyNSAtMDgwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBUYWtlIGxvY2sgYXJvdW5kIHVzZSBvZiAobm9uLXRocmVhZHNhZmUpIHRhZ3NldHRlciBpbnRlcmZhY2UuCi0KLTIwMTAtMDItMjIgMTY6NTE6MDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogd3JpdGUgYWxsIHVkdGEgY2hpbGRyZW4gYXRvbXMKLQkgIFVEVEEgbWlnaHQgaGF2ZSBNRVRBIGFuZCBvdGhlciBjaGlsZHJlbiBhdG9tcwotCSAgdG9nZXRoZXIsIHdyaXRlIHRoZW0gYWxsLgotCi0yMDEwLTAyLTIyIDEwOjQ4OjExIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IFVzZSBpbnRlcm5hbCBzaW5rIHBhZHMgbGlzdAotCSAgRHVlIHRvIEdzdENvbGxlY3RQYWRzIHNpbmsgcGFkcyBsaXN0IGJlaW5nIG5vdCByZWxpYWJseQotCSAgaXRlcmF0YWJsZSAod2hlbiBub3QgaW5zaWRlIHRoZSBjb2xsZWN0ZWQgZnVuY3Rpb24pIHRoaXMKLQkgIHBhdGNoIGFkZHMgYSBzaW5rIHBhZHMgbGlzdCB0byBxdG11eCB0byBiZSB1c2VkIHdoZW4gaXRlcmF0aW5nCi0JICBzaW5rIHBhZHMgb24gcmVzZXQgZnVuY3Rpb24uCi0JICBGaXhlcyAjNjA5MDU1Ci0KLTIwMTAtMDItMTYgMTc6MTM6MDkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogcHJldmVudCBsZWFraW5nIGhkbHIgbmFtZQotCi0yMDEwLTAyLTE2IDE2OjI0OjEyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgcXRtdXg6IHN1cHBvcnQgZm9yIEFMQUMKLQkgIEZpeGVzICM1ODA3MzEuCi0KLTIwMTAtMDItMTYgMTQ6MTk6MDQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogcmVmYWN0b3IgYnVpbGRpbmcgc3RzZCBlbnRyeSAnd2F2ZScgZXh0ZW5zaW9uCi0KLTIwMTAtMDItMDggMTE6NTE6NTIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zcmVjb3ZlcnkuYzoKLQkgIHF0bXV4OiBhdG9tc3JlY292ZXJ5OiBGaXggY29tcGlsYXRpb24gcHJvYmxlbQotCSAgRml4ZXMgYSBjb21waWxhdGlvbiBlcnJvciBkdWUgdG8gdW51c2VkIGZ1bmN0aW9uIHJlc3VsdC4KLQotMjAwOS0xMi0xMiAxNjowNzoxNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXNyZWNvdmVyeS5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tc3JlY292ZXJ5Lmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG1vb3ZyZWNvdmVyLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bW9vdnJlY292ZXIuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhwbHVnaW4uYzoKLQkgIHF0bXV4OiBBZGRzIG1vb3YgcmVjb3ZlcnkgZmVhdHVyZQotCSAgQWRkcyBhIG5ldyBwcm9wZXJ0eSB0byBxdG11eCB0aGF0IHNldHMgYSBwYXRoIHRvIGEgZmlsZSB0byB3cml0ZQotCSAgYW5kIHVwZGF0ZSBkYXRhIGFib3V0IHRoZSBtb292IGF0b20gKHRoYXQgaXMgbm90IHdyaXRlbiB0aWxsIHRoZQotCSAgZW5kIG9mIHRoZSBmaWxlKS4gSWYgdGhlIHBpcGVsaW5lL2FwcCBjcmFzaGVzIGR1cmluZyBleGVjdXRpb24gaXQKLQkgIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHJlY292ZXIgdGhlIG1vdmllIHVzaW5nIHRoZSBxdG1vb3ZyZWNvdmVyIGVsZW1lbnQuCi0JICBxdG1vb3ZyZWNvdmVyIGlzIGFuIGVsZW1lbnQgdGhhdCBpcyBhbHNvIGEgcGlwZWxpbmUuIEl0IGlzIG5vdAotCSAgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIG90aGVyIGVsZW1lbnRzIChpdCBoYXMgbm8gcGFkcykuIEl0IGlzIG1lcmVseQotCSAgYSB0b29sL3V0aWxpdGFyeSB0byByZWNvdmVyIHVuZmluaXNoZWQgcXRtdXggZmlsZXMuCi0JICBGaXhlcyAjNjAxNTc2Ci0KLTIwMTAtMDEtMjcgMTk6MDY6NTMgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogZm9yIGZpeGVkLXNhbXBsZSBzaXplIHN0cmVhbXMgKFBDTSBhdWRpbywgZXRjKSBkb24ndCBhbGxvY2F0ZSBhbiBlbm9ybW91cyBidWZmZXIgdGhhdCB3ZSB0aGVuIHdvbid0IHVzZSBhdCBhbGwuCi0KLTIwMTAtMDEtMjcgMTU6Mzc6MzcgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogaGFuZGxlIG11eGluZyBhZHBjbSBjb3JyZWN0bHkuCi0KLTIwMTAtMDEtMjIgMTM6MzY6MDQgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogU2V0IHRoZSBtZGlhIGhkbHIgbmFtZSBmaWVsZCB0byB3aGF0IHF1aWNrdGltZSB1c2VzLiBGaXggd3JpdGluZyBpdCBzaW5jZSBpdCdzIG5vdCBudWxsLXRlcm1pbmF0ZWQuIEltcHJvdmVzIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGhhcmR3YXJlIHBsYXllcnMuCi0KLTIwMTAtMDEtMjIgMTM6MzA6MDcgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZW5kaWFubmVzcyBpbiBnc3RyZWFtZXIgaXMgYW4gaW50LCBub3QgYm9vbGVhbi4KLQotMjAxMC0wMS0yNiAxNzo1NDoyOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkgIHF0bXV4OiBzdHJlYW1saW5lIG1vb3YgZGF0YSBtZW1vcnkgc3RvcmFnZQotCSAgSW4gcGFydGljdWxhciwgdXNlIGFycmF5cyByYXRoZXIgdGhhbiAoZG91YmxlKSBsaW5rZWQgbGlzdHMuCi0KLTIwMTAtMDEtMjYgMTM6NDQ6MDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZ19mcmVlIGlzIE5VTEwgc2FmZQotCi0yMDEwLTAxLTIwIDEzOjMwOjQ4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZGVzY3JpcHRvcnMuYzoKLQkqIGdzdC9xdWlja3RpbWUvZGVzY3JpcHRvcnMuaDoKLQkqIGdzdC9xdWlja3RpbWUvcHJvcGVydGllcy5jOgotCSAgW2NsZWFudXBdIFZhcmlvdXMgc3R5bGUgYW5kIGNsZWFudXBzCi0JICBWYXJpb3VzIGZpeGVzIGZvciBndGstZG9jIHdhcm5pbmdzIGFuZCBtYWtpbmcgZnVuY3Rpb25zIHdpdGhvdXQKLQkgIGFyZ3VtZW50cyB0YWtlIHZvaWQgYXMgcGFyYW1ldGVyLgotCi0yMDEwLTAxLTE0IDA4OjA5OjAzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEFjdHVhbGx5IHVzZSBuZXcgY2FwcyBpbmZvIG9uIHJlbmVnb3RpYXRpb24KLQkgIEZvbGxvd2luZyB0aGUgcHJldmlvdXMgcXRtdXggY29tbWl0LCB0aGlzIHBhdGNoIHRyaWVzCi0JICB0byB1c2UgdGhlIG5ldyBpbmZvIGFkZGVkIHRvIHRoZSBjYXBzIHRvIGZpbGwgdGhlICd0cmFrJwotCSAgYXRvbSdzIGZpZWxkcyBhbmQgY2hpbGRyZW4gYXRvbXMuIFRoaXMgd2F5IHF0bXV4IHdpbGwKLQkgIHVzZSB0aGUgbGF0ZSBhZGRlZCAnY29kZWNfZGF0YScgd2hlbiBoMjY0cGFyc2UgYWRkcwotCSAgaXQgaW4gdGhlIGZvbGxvd2luZyBwaXBlbGluZToKLQkgIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0yMDAgISB4MjY0ZW5jIGJ5dGUtc3RyZWFtPXRydWUgISBcCi0JICBoMjY0cGFyc2Ugb3V0cHV0LWZvcm1hdD0wICEgcXRtdXggISBcCi0JICBmaWxlc2luayBsb2NhdGlvbj10ZXN0Lm1vdgotCi0yMDEwLTAxLTEzIDIzOjMzOjUxIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IERvIGNhcHMgcmVuZWdvdGlhdGlvbiB3aGVuIGl0IG9ubHkgYWRkcyBmaWVsZHMKLQkgIFF0bXV4IGNhbiBhY2NlcHQgY2FwcyByZW5lZ290aWF0aW9uIGlmIHRoZSBuZXcgY2FwcyBpcyBhCi0JICBzdXBlcnNldCBvZiB0aGUgb2xkIG9uZSwgbWVhbmluZyB1cHN0cmVhbSBhZGRlZCBuZXcgaW5mbyB0bwotCSAgdGhlIGNhcHMuIFRoaXMgcGF0Y2ggc3RpbGwgZG9lc24ndCBtYWtlIHF0bXV4IHVwZGF0ZSBhbnkKLQkgIGF0b21zIGluZm8gZnJvbSB0aGUgbmV3IGluZm8sIGJ1dCBhdCBsZWFzdCBpdCBkb2Vzbid0Ci0JICByZWplY3QgdGhlIG5ldyBjYXBzIGFueW1vcmUuCi0JICBBIHBpcGVsaW5lIHRoYXQgcmVwcm9kdWNlcyB0aGlzIHVzZSBjYXNlIGlzOgotCSAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTIwMCAhIHgyNjRlbmMgYnl0ZS1zdHJlYW09dHJ1ZSAhIFwKLQkgIGgyNjRwYXJzZSBvdXRwdXQtZm9ybWF0PTAgISBxdG11eCAhIFwKLQkgIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QubW92Ci0KLTIwMTAtMDEtMTMgMTk6MzA6NDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogcHJvdmlkZSByZXF1ZXN0IHBhZHMgdW5kZXIgd2lkZXIgY29uZGl0aW9ucwotCSAgRml4ZXMgIzYwNjg1OS4KLQotMjAxMC0wMS0xMyAxMDozNTowMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBPbmx5IGFjY2VwdCBhdmMtc2FtcGxlIGgyNjQKLQkgIHF0bXV4IGFuZCBtcDRtdXggc2hvdWxkIG9ubHkgYWNjZXB0IGgyNjQgaW4gYXZjLXNhbXBsZQotCSAgZm9ybWF0Ci0KLTIwMTAtMDEtMTEgMTM6MTM6NDEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmM6Ci0JICBSZW5hbWUgYWFjJ3Mgc3RyZWFtLWZvcm1hdCAnbm9uZScgdG8gJ3JhdycKLQkgIFJlbmFtZXMgYWFjJ3Mgc3RyZWFtLWZvcm1hdCBmcm9tIHByZXZpb3VzIGNvbW1pdHMgZnJvbSBub25lIHRvCi0JICByYXcKLQotMjAxMC0wMS0xMSAxMDozNDozMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIHF0bXV4OiBPbmx5IGFjY2VwdCBzdHJlYW0tZm9ybWF0PSdub25lJyBhYWMKLQkgIE9ubHkgYWNjZXB0IHJhdyBhYWMgc3RyZWFtcyAoc3RyZWFtLWZvcm1hdD1ub25lKSB0byBhdm9pZAotCSAgZ2VuZXJhdGluZyBpbnZhbGlkIGZpbGVzLgotCSAgRml4ZXMgIzYwNDkyNQotCi0yMDA5LTEyLTI4IDExOjM0OjM1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgIHF0bXV4OiBhbHNvIGFkZCAuaCBmaWxlIGNoYW5nZXMgdG8gdW5icmVhayB0aGUgYnVpbGQKLQotMjAwOS0xMi0yNyAyMzo1MTo1MCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogdXNlIGNvcnJlY3QgbmFtZXMgZnJvbSB0ZW1wbGF0ZSBmb3IgcmVxdWVzdCBwYWRzCi0JICBUaGUgcGFkcyB3aGVyZSBuYW1lcyBwYWQwLCBwYWQxLCAuLi4KLQotMjAwOS0xMi0yNyAyMzozMjo1OCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogbW92ZSBlcnJvcnMgX25ld19wYWQgdG8gdGhlIGVuZAotCi0yMDA5LTEyLTIxIDEzOjU4OjMwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEFjY2VwdCBub24tcGFpcmVkIHVpbnQgdGFncwotCSAgQWRkcyBzdXBwb3J0IGZvciB1bnBhaXJlZCB1bnNpZ25lZCBpbnRlcmdlciB0YWdzCi0KLTIwMDktMTItMjEgMTI6MDU6MzcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEFkZHMgbmV3IHRhZ3MKLQkgIE1hcHMgbW9yZSB0YWdzIHRoYXQgYXJlIGFscmVhZHkgcG9zdGVkIGJ5IHF0ZGVtdXgKLQkgIEZpeGVzICM1OTk3NTkKLQotMjAwOS0xMi0xMCAyMjoyMDo0NSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvZm91cmNjLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4Lmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmM6Ci0JICBxdG11eDogc3VwcG9ydCBtb3JlIG9mIGoyawotCSAgUmVhZHMgdGhlIG5ldyBjYXBzIGFkZGVkIHRvIHF0ZGVtdXggYnkgY29tbWl0Ci0JICBjOTE3ZDY1ZTZkZjBiNWQ1ODVmOTA1YzdhZDc4YThhMGE0NGIyY2IwCi0JICBhbmQgYWRkcyBpdHMgY29ycmVzcG9uZGluZyBhdG9tcy4KLQkgIEFsc28gYWRkcyBzdXBwb3J0IGZvciBpbWFnZS94LWpwYyBhcyBpdCBpcyB0aGUgc2FtZQotCSAgYXMgaW1hZ2UveC1qcDIsIGV4Y2VwdCB0aGF0IHRoZSBidWZmZXJzIG5lZWQgdG8gYmUKLQkgIGJveGVkIGluc2lkZSBhIGpwMmMgaXNvbSBib3ggYmVmb3JlIG11eGluZy4gVG8gc29sdmUKLQkgIHRoaXMgdGhlIFFUUGFkcyBub3cgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQgKGlmCi0JICBub3QgTlVMTCkgaXMgY2FsbGVkIHdoZW4gYSBidWZmZXIgaXMgY29sbGVjdGVkLiBUaGlzCi0JICBmdW5jdGlvbiByZXR1cm5zIGEgcmVwbGFjZW1lbnQgdG8gdGhlIGN1cnJlbnQgY29sbGVjdGVkCi0JICBidWZmZXIuCi0JICBGaXhlcyAjNTk4OTE2Ci0KLTIwMDktMTItMTAgMTY6NTM6MTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgcXRtdXg6IE1hcHMgJ2NsYXNzaWZpY2F0aW9uJyB0YWcgZm9yIDNncHAgZmlsZXMKLQkgIEFkZHMgdGhlIG1hcHBpbmcgb2YgJ2NsYXNzaWZpY2F0aW9uJyB0YWdzIHRvIHdyaXRpbmcgb2YKLQkgICdjbHNmJyBhdG9tcyBmb3IgZ3BwbXV4LgotCSAgQmFzZWQgb24gYSBwYXRjaCBieTogTGFzc2UgTGF1a2thbmVuIDxleHQtbGFzc2UuMi5sYXVra2FuZW5Abm9raWEuY29tPgotCi0yMDA5LTEyLTA4IDE3OjU5OjA0IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHJlbW92ZSBjKysgY29tbWVudHMgYW5kIGFkZCBzb21lIG1vcmUgY29tbWVudHMuCi0KLTIwMDktMTItMDggMTc6NTU6NTYgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgcXRtdXg6IGFkZCBpbWEgYWRwY20gc3VwcG9ydAotCi0yMDA5LTExLTI1IDIxOjQxOjI3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHJlcGxhY2UgX3NjYWxlIHdpdGggX3NjYWxlX3JvdW5kCi0JICBVc2UgdGhlIHJvdW5kaW5nIHZlcnNpb24gZm9yIGltcHJvdmVkIHN5bmMgYmV0d2VlbiBzdHJlYW1zLgotCSAgU21hbGwgdmFyaWF0aW9ucyBpbiB0aGUgZHVyYXRpb24gd2hlbiBtdXhpbmcgbWlnaHQgbGVhZCB0bwotCSAgY3VtdWxsYXRpdmUgd3JvbmcgdGltZXN0YW1waW5nIHdoZW4gZGVtdXhpbmcuCi0JICBGaXhlcyAjNjAyOTM2Ci0KLTIwMDktMTEtMjQgMTY6MTY6NTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogdXNlIHRpbWVzdGFtcHMgZm9yIG11eGluZwotCSAgVHJ5IHRvIHVzZSB0aW1lc3RhbXBzIGV2ZW4gd2hlbiB0aGUgc3RyZWFtIGhhcyBvdXQgb2Ygb3JkZXIKLQkgIHRpbWVzdGFtcHMsIG9ubHkgZmFsbCBiYWNrIHRvIGR1cmF0aW9ucyB3aGVuIHdlIGRldGVjdCBhbgotCSAgb3V0IG9mIG9yZGVyIGJ1ZmZlci4gSW1wcm92ZXMgc3luYyBiZXR3ZWVuIHN0cmVhbXMuCi0KLTIwMDktMTEtMTkgMTg6Mjg6NTIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZml4IG1pc3NpbmcgZGVidWcgYXJndW1lbnQKLQkgIEFkZHMgYSBtaXNzaW5nIGRlYnVnIGFyZ3VtZW50Ci0KLTIwMDktMTEtMTkgMTE6MzY6MTQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogZml4IG1pc2luZm9ybWluZyBkZWJ1ZyBzdGF0ZW1lbnQKLQotMjAwOS0xMS0xOSAxMToxNDo1NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBlbnN1cmUgd3JpdGFibGUgYnVmZmVyIG1ldGFkYXRhIGJlZm9yZSBzZXR0aW5nIGNhcHMKLQotMjAwOS0xMC0yOSAwODozNjowMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvZm91cmNjLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmM6Ci0JICBxdG11eDogc3VwcG9ydCBmb3IgU1ZRMwotCSAgQWRkcyBzdXBwb3J0IGZvciBtdXhpbmcgU1ZRMyBjb250ZW50LiBVc3VhbGx5IHRoaXMgZm9ybWF0Ci0JICBoYXMgZGVjb2RlciBpbmZvIHRoYXQgbXVzdCBiZSBwYXNzZWQgaW4gdGhlICdzZXFoJyBmaWVsZAotCSAgaW4gdGhlIGNhcHMuIEl0IGlzIGFsc28gZ29vZCB0byBhZGQgdGhlIGdhbWEgYXRvbSB0byBtYWtlCi0JICBxdWlja3RpbWUgbm90IGNyYXNoLgotCSAgRml4ZXMgIzU4NzkyMgotCi0yMDA5LTExLTE3IDA5OjI2OjA1IC0wMzAwICBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc0ByZWRtb29uLihub25lKT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGRvIG5vdCBsZWFrIGEgc3RyaW5nCi0JICBGcmVlcyBhIHN0cmluZyBhZnRlciB1c2UuIEFsc28gZG9lcyBzb21lIGNvZGUgb3JnYW5pemF0aW9uCi0KLTIwMDktMTEtMTYgMTQ6NTc6NTMgLTAzMDAgIFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQHJlZG1vb24uKG5vbmUpPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogZG8gbm90IGFkZCBzaXplIHRvIHRoZSBwb2ludGVyIHZhcmlhYmxlCi0JICBEbyBub3Qgd3JvbmdseSBhZGQgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gdG8gdGhlCi0JICBwb2ludGVyIHRvIHRoZSBidWZmZXIgc2l6ZS4gSW5zdGVhZCwgY2hlY2sgdGhlIHJlc3VsdAotCSAgdG8gc2VlIGlmIHRoZSBzZXJpYWxpemF0aW9uIHdhcyBvay4KLQkgIEJhc2VkIG9uIGEgcGF0Y2ggYnk6ICJDYXJzdGVuIEtyb2xsIDxjYXJAeGltaWRpLmNvbT4iCi0JICBGaXhlcyAjNjAyMTA2Ci0KLTIwMDktMTEtMDYgMTA6MzQ6MzkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4Lmg6Ci0JICBxdG11eDogaGFuZGxlICdsYXRlJyBzdHJlYW1zCi0JICBXaGVuIG11eGluZyBzdHJlYW1zLCBzb21lIGNhbiBzdGFydCBsYXRlciB0aGFuIG90aGVycy4gcXRtdXgKLQkgIG5vdyBoYW5kbGUgdGhpcyBieSBhZGRpbmcgYW4gZW1wdHkgZWR0cyBlbnRyeSB3aXRoIHRoZQotCSAgZHVyYXRpb24gb2YgdGhlICdsYXRlbmVzcycgdG8gdGhlIHN0cmVhbSdzIHRyYWsuCi0JICBJdCB0b2xlcmF0ZXMgYSBzdHJlYW0gdG8gYmUgdXAgdG8gMC4xcyBsYXRlLgotCSAgRml4ZXMgIzU4Njg0OAotCi0yMDA5LTExLTA1IDIxOjM1OjU2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSAgcXRtdXg6IGFkZHMgdGhlIEVEVFMgYW5kIEVMVFMgYXRvbXMgdG8gYXRvbXMuYwotCSAgVGhlc2UgYXRvbXMgd2lsbCBiZSB1c2VmdWwgZm9yIHNpZ25hbGluZyBzdHJlYW1zCi0JICB0aGF0IHN0YXJ0IGxhdGVyIGluIHRoZSBmaWxlLiBBcyB3ZWxsIGZvciBhZGRpbmcKLQkgIGVkaXQgbGlzdHMgaWYgbmVlZGVkIHNvbWV0aW1lIGxhdGVyLgotCi0yMDA5LTExLTA2IDAwOjQ2OjEyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEFkZGluZyBzb21lIGlmcyBmb3IgcHJvdGVjdGlvbgotCSAgQWRkaW5nIHNvbWVzIGlmcyB0byBwcm90ZWN0IGFnYWluc3Qgd2FybmluZyBjb25kaXRpb25zCi0JICB0aGF0IG1pZ2h0IGhhcHBlbiB3aGVuIHVwc3RyZWFtIGVsZW1lbnQgaXMgbm90IHNhbmUKLQkgIEZpeGVzICM2MDA4OTUKLQotMjAwOS0xMC0xNiAxMDo0NzozMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZnR5cGNjLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4Lmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmg6Ci0JICBncHBtdXg6IEFkZCBzdXBwb3J0IGZvciAzZ3I2Ci0JICBLZWVwIHRyYWNrIG9mIHRoZSBjaHVuayBkdXJhdGlvbnMgdG8gYmUgYWJsZSB0byBhZGQgM2dyNgotCSAgYnJhbmQgaWYgaXQgaXMgYSBmYXN0c3RhcnQgZmlsZSBhbmQgdGhlIGxvbmdlc3QgY2h1bmsgaXMKLQkgIHNtYWxsZXIgdGhhbiBhIHNlYy4gSW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIDNncHAKLQkgIFRTIDI2LjI0NCB2Ni40LjAgKDIwMDUtMDkpCi0JICBGaXhlcyAjNTg0MzYxCi0KLTIwMDktMTAtMTUgMjE6MTE6MTYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogT25seSBwdXNoIGZ0eXAgbGF0ZXIgKGluIGZhc3RzdGFydCBtb2RlKQotCSAgSW4gZmFzdHN0YXJ0IG1vZGUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2VuZCB0aGUgZnR5cAotCSAgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLiBXYWl0aW5nIGFuZCBzZW5kaW5nIGl0Ci0JICBvbmx5IGxhdGVyICh3aGVuIHRoZSBtb292IGF0b20gaXMgcmVhZHkgdG8gYmUgc2VudCkgcHJvdmlkZXMKLQkgIHVzIHdpdGggbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyZWFtIGFuZCB3ZSBjYW4gYmV0dGVyCi0JICBzZWxlY3QgdGhlIGNvbXBhdGlibGUgYnJhbmRzLgotCi0yMDA5LTEwLTE1IDE3OjUxOjM5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEltcHJvdmUgZXJyb3IgbWVzc2FnZQotCSAgSW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gd2UgY2FuJ3QgZ2V0IG9yIGVzdGltYXRlIHRoZQotCSAgdGltZXN0YW1wL2R1cmF0aW9uIG9mIGEgYnVmZmVyCi0KLTIwMDktMDktMjkgMTU6NDc6MTMgKzAyMDAgIE1hcmMtQW5kcsOpIEx1cmVhdSA8bWx1cmVhdUBmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogZml4IGZsYWdzX2FzX3VpbnQgdG8gZmxhZ3NbXQotCi0yMDA5LTA4LTA0IDEyOjU4OjM1ICswMjAwICBKYW4gVXJiYW5za2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBEb24ndCByZXF1aXJlIGVuZGlhbm5lc3MgZmllbGQgZm9yIDggYml0IHJhdyBhdWRpbwotCSAgRml4ZXMgYnVnICM1OTAzNjAuCi0KLTIwMDktMDYtMjUgMDg6Mzg6MjEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkgIHF0bXV4OiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgotCi0yMDA5LTA2LTI1IDA4OjM4OjEwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogRml4IGRlYnVnIHN0YXRlbWVudC4KLQotMjAwOS0wNi0xMSAxNTo1NDo0MiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgIHF0bXV4OiBvbmx5IHVzZSAoNjQtYml0KSBleHRlbmRlZCAobWRhdCkgYXRvbSBzaXplIGlmIG5lZWRlZC4gIEZpeGVzICM1ODUzMTkuCi0KLTIwMDktMDYtMTAgMTQ6NDY6MTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICBxdG11eDogc2V0IGRlZmF1bHQgbW92aWUgdGltZXNjYWxlIHRvIG1pY3Jvc2Vjb25kIHVuaXRzCi0KLTIwMDktMDYtMTAgMTM6MjQ6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBxdG11eDogY29tcHJlc3Mvb3B0aW1pemUgc3RzYyB3cml0aW5nCi0KLTIwMDktMDYtMTAgMTI6NDI6NDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgcXRtdXg6IGFkZCAzR1Agc3R5bGUgdGFnZ2luZyAoYW5kIHJlZmFjdG9yIGFwcHJvcHJpYXRlbHkpCi0KLTIwMDktMDYtMDEgMjM6MDA6NDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXggKGFuZCB2YXJpYW50cyk6IGhhbmRsZSBwaXhlbC1hc3BlY3QtcmF0aW8uICBGaXhlcyAjNTg0MzU4LgotCi0yMDA5LTA2LTAxIDIyOjQyOjA4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSogZ3N0L3F1aWNrdGltZS9mdHlwY2MuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIGdwcG11eDogZW5oYW5jZSBmdHlwIGJyYW5kIGhldXJpc3RpYy4gIEZpeGVzICM1ODQzNjAuCi0KLTIwMDktMDUtMjggMTM6NTY6MTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IHVzZSBkaWZmZXJlbnQgc3RzZCBhdG9tIHR5cGUgZm9yIEgyNjMgZm9yIElTTyBhbmQgUVQgdmFyaWFudHMKLQkgIEZpeGVzICM1ODQxMTQuCi0KLTIwMDktMDUtMTUgMDE6NTQ6NDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotCi0JKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICBbcXRtdXhdIEZpeGVzIHNlZ2ZhdWx0IHdoZW4gYWRkaW5nIGEgYmxvYiBhcyBmaXJzdCB0YWcuCi0JICBNb3ZlcyB0YWdzIGRhdGEgaW5pdGlhbGl6YXRpb24gdG8gdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgYXBwZW5kcwotCSAgdGhlIHRhZ3MgdG8gdGhlIGxpc3QuIEZpeGVzICM1ODI3MDIKLQkgIEFsc28gZml4ZXMgc29tZSBzdHlsZSBjYXVnaHQgYnkgdGhlIHByZS1jb21taXQgaG9vay4KLQotMjAwOS0wNS0xMCAyMToyMTozNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIGdwcG11eDogQWRkIE1QRUctNCBwYXJ0IDIgdG8gc3VwcG9ydGVkIGZvcm1hdHMuICBGaXhlcyAjNTgxNTkzLgotCi0yMDA5LTA1LTA3IDE3OjUzOjQyICswMTAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIEFkZCByYW5rcyB0byB2YXJpb3VzIG11eGVycyBhbmQgZW5jb2RlcnMgaW4gLWJhZAotCi0yMDA5LTA0LTMwIDE0OjQzOjM2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgcXRtdXg6IGNoYW5nZXMgY2FwcyBvZiBzcmMgcGFkcyB0byB2aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9c29tZXRoaW5nCi0JICBUYWtlIGEgbG9vayBhdCBidWcgIzU4MDAwNSBmb3IgZnVydGhlciBpbmZvLgotCi0yMDA5LTA0LTI0IDE4OjUzOjM2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgbXA0bXV4OiBDaGFuZ2VzIHNyYyBjYXBzIHRvIGFwcGxpY2F0aW9uL3gtaXNvLW1wNAotCSAgRml4ZXMgIzU4MDAwNQotCi0yMDA5LTAzLTI1IDIxOjI0OjQ0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IGZpeCByZXVzaW5nIGVsZW1lbnQKLQkgIFN0YXRlIGNoYW5nZSB0byBSRUFEWSBhbmQgdGhlbiBiYWNrIHRvIFBBVVNFRCBzaG91bGQgc3RpbGwgcHJvdmlkZQotCSAgdGhlIHByb3BlciBzdHJ1Y3R1cmVzIGFzIGFyZSBvdGhlcndpc2UgZnJlc2hseSBhdmFpbGFibGUgZm9sbG93aW5nCi0JICBhIHJlcXVlc3RfbmV3X3BhZC4KLQkgIFBvaW50ZWQgb3V0IGJ5IFRoaWFnbyBTYW50b3MuCi0KLTIwMDktMDMtMjMgMTE6MTc6MzkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgIHF0bXV4OiBmaXggaW5jbHVkZXMgZm9yIGxzZWVrCi0JICAtLQotCi0yMDA5LTAzLTIwIDE0OjIwOjE2ICswMTAwICBMUk4gPGxybjE5ODYgYXQgZ21haWwgZG90IGNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgd2luMzI6IGZpeCBzZWVraW5nIGluIGxhcmdlIGZpbGVzCi0JICBVc2UgX2xzZWVraTY0KCkgb24gV2luZG93cyB0byBzZWVrIGluIGxhcmdlIGZpbGVzLgotCSAgRml4ZXMgIzU3NjAyMS4KLQotMjAwOS0wMy0wMiAxMDo1NzozNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgcXRtdXg6IEJlIGEgYml0IG1vcmUgdmVyYm9zZSBpbiBvdXIgZGVidWcgbWVzc2FnZSB3aGVuIGZhaWxpbmcgdG8gcmVuZWdvdGlhdGUKLQotMjAwOS0wMS0yOCAxMzoyNToxNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgIEFkZGl0aW9uYWwgbWVkaWEgdHlwZSBzdXBwb3J0IGluIHF0bXV4IChhbmQgZnJpZW5kcykuCi0JICBTdXBwb3J0IEFNUiBhbmQgSDI2MyBmb3IgYm90aCBxdG11eCBhbmQgZ3BwbXV4LAotCSAgYW5kIGFkZCBleHRlbnNpb25zIGluIHNhbXBsZSB0YWJsZSBkZXNjcmlwdGlvbi4KLQotMjAwOS0wMS0wOSAyMTo1OTo0OCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzogQWRkIHZpZGVvL3gtcXQtcGFydCBhbmQgdmlkZW8veC1tNC1wYXJ0IHRvIGNhcHMgc28gc2Nocm9lbmMvc2Nocm9wYXJzZSBjYW4gdXNlIGl0LiAgRml4ZXMgIzUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmM6IEFkZCB2aWRlby94LXF0LXBhcnQgYW5kIHZpZGVvL3gtbTQtcGFydAotCSAgdG8gY2FwcyBzbyBzY2hyb2VuYy9zY2hyb3BhcnNlIGNhbiB1c2UgaXQuICBGaXhlcyAjNTY2OTU4Ci0KLTIwMDgtMTItMTkgMTg6NTM6NDcgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6IERvIG5vdCB0ZW1wdCBvciBzdWdnZXN0IHRvIHZpb2xhdGUgZ3N0X2NvbGxlY3RfcGFkcyBBUEkgc3BlY2lmaWNhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6IChnc3RfcXRfbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICBEbyBub3QgdGVtcHQgb3Igc3VnZ2VzdCB0byB2aW9sYXRlIGdzdF9jb2xsZWN0X3BhZHMgQVBJIHNwZWNpZmljYXRpb24uCi0KLTIwMDgtMTItMTkgMTg6MzM6NDcgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXVpY2t0aW1lLzogRHVhbCBsaWNlbnNlIHF0bXV4IExHUEwvTUlULiAgRml4ZXMgIzU2NDIzMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvYXRvbXMuaDoKLQkgICogZ3N0L3F1aWNrdGltZS9kZXNjcmlwdG9ycy5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2Rlc2NyaXB0b3JzLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvZm91cmNjLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvZnR5cGNjLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzoKLQkgICogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuaDoKLQkgICogZ3N0L3F1aWNrdGltZS9wcm9wZXJ0aWVzLmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvcHJvcGVydGllcy5oOgotCSAgRHVhbCBsaWNlbnNlIHF0bXV4IExHUEwvTUlULiAgRml4ZXMgIzU2NDIzMi4KLQotMjAwOC0xMi0xNiAxNjoyNjo1MiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBUb3RhbGx5IHJlbW92ZSB0aGUgaW50ZXJuYWwgdGFnbGlzdHMgYW5kIGZ1bGx5IHVzZSB0YWdzZXR0ZXIuIEZpeGVzIHZhcmlvdXMgdGFnIG11eGluZyBpc3N1ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NlbHQvZ3N0Y2VsdGVuYy5jOgotCSAgKiBleHQvY2VsdC9nc3RjZWx0ZW5jLmg6Ci0JICAqIGV4dC9tZXRhZGF0YS9nc3RtZXRhZGF0YW11eC5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgIFRvdGFsbHkgcmVtb3ZlIHRoZSBpbnRlcm5hbCB0YWdsaXN0cyBhbmQgZnVsbHkgdXNlIHRhZ3NldHRlci4gRml4ZXMKLQkgIHZhcmlvdXMgdGFnIG11eGluZyBpc3N1ZXMuCi0KLTIwMDgtMTItMDEgMTY6Mzc6NDUgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXVpY2t0aW1lL2F0b21zLmM6IEZpeCBtajIgc2FtcGxlIGRlc2NyaXB0aW9uIG1ldGFkYXRhIGNvbnN0cnVjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6IChidWlsZF9qcDJoX2V4dGVuc2lvbik6Ci0JICBGaXggbWoyIHNhbXBsZSBkZXNjcmlwdGlvbiBtZXRhZGF0YSBjb25zdHJ1Y3Rpb24uCi0KLTIwMDgtMTEtMTggMDE6MDk6MDkgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6IFF1aWV0IGEgZGVidWdnaW5nIG1lc3NhZ2UgdGhhdCBJIHJlY2VudGx5IGFkZGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguYzogUXVpZXQgYSBkZWJ1Z2dpbmcgbWVzc2FnZSB0aGF0IEkgcmVjZW50bHkKLQkgIGFkZGVkLgotCi0yMDA4LTExLTE1IDAyOjU2OjMxICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L3F1aWNrdGltZS9nc3RxdG11eC4qOiBVc2UgZHRzIGZyb20gR1NUX0JVRkZFUl9PRkZTRVRfRU5EKCkgZm9yIHZpZGVvL3gtcXQtcGFydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgIFVzZSBkdHMgZnJvbSBHU1RfQlVGRkVSX09GRlNFVF9FTkQoKSBmb3IgdmlkZW8veC1xdC1wYXJ0LgotCi0yMDA4LTExLTE0IDIxOjI0OjUxICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L3F1aWNrdGltZS86IFJldmVydCBwcmV2aW91cyBjb21taXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvZGVzY3JpcHRvcnMuYzoKLQkgICogZ3N0L3F1aWNrdGltZS9kZXNjcmlwdG9ycy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2Z0eXBjYy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgICogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvcHJvcGVydGllcy5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL3Byb3BlcnRpZXMuaDoKLQkgIFJldmVydCBwcmV2aW91cyBjb21taXQuCi0KLTIwMDgtMTEtMTQgMjA6Mzg6MTggKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXVpY2t0aW1lLzogRHVhbCBsaWNlbnNlIExHUEwvTUlULCBhcyBhcHBhcmVudGx5IHN1cHBvc2VkIHRvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdWlja3RpbWUvYXRvbXMuYzoKLQkgICogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2Rlc2NyaXB0b3JzLmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZGVzY3JpcHRvcnMuaDoKLQkgICogZ3N0L3F1aWNrdGltZS9mb3VyY2MuaDoKLQkgICogZ3N0L3F1aWNrdGltZS9mdHlwY2MuaDoKLQkgICogZ3N0L3F1aWNrdGltZS9nc3RxdG11eC5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4Lmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzoKLQkgICogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL3Byb3BlcnRpZXMuYzoKLQkgICogZ3N0L3F1aWNrdGltZS9wcm9wZXJ0aWVzLmg6Ci0JICBEdWFsIGxpY2Vuc2UgTEdQTC9NSVQsIGFzIGFwcGFyZW50bHkgc3VwcG9zZWQgdG8uCi0KLTIwMDgtMTEtMTQgMjA6MTc6MTAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXVpY2t0aW1lLzogQ3V0IGRldG91ciBpbiBzYW1wbGUgZGVzY3JpcHRpb24gZXh0ZW5zaW9uIGNvbnN0cnVjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2F0b21zLmM6IChidWlsZF9lc2RzX2V4dGVuc2lvbiksCi0JICAoYnVpbGRfbW92X2FhY19leHRlbnNpb24pLCAoYnVpbGRfanAyaF9leHRlbnNpb24pLAotCSAgKGJ1aWxkX2NvZGVjX2RhdGFfZXh0ZW5zaW9uKToKLQkgICogZ3N0L3F1aWNrdGltZS9hdG9tcy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6IChnc3RfcXRfbXV4X2F1ZGlvX3Npbmtfc2V0X2NhcHMpLAotCSAgKGdzdF9xdF9tdXhfdmlkZW9fc2lua19zZXRfY2Fwcyk6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXhtYXAuYzogKGdzdF9xdF9tdXhfbWFwX2Zvcm1hdF90b19oZWFkZXIpOgotCSAgQ3V0IGRldG91ciBpbiBzYW1wbGUgZGVzY3JpcHRpb24gZXh0ZW5zaW9uIGNvbnN0cnVjdGlvbi4KLQkgIEFsc28gYWN0dWFsbHkgaW1wbGVtZW50IElTTyBKUEVHMjAwMCBtajIgZm9ybWF0LgotCi0yMDA4LTExLTExIDE5OjMxOjM1ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgdW5pdCB0ZXN0IGZvciBxdG11eC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYzogKHNldHVwX3NyY19wYWQpLAotCSAgKHRlYXJkb3duX3NyY19wYWQpLCAoc2V0dXBfcXRtdXgpLCAoY2xlYW51cF9xdG11eCksCi0JICAoY2hlY2tfcXRtdXhfcGFkKSwgKEdTVF9TVEFSVF9URVNUKSwgKHF0bXV4X3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgcXRtdXguCi0KLTIwMDgtMTEtMTEgMTk6MjQ6MTIgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6IEFkZCBzb21lIG1vcmUgc2FmZXR5L3Nhbml0eSBjaGVja3MgaW4gdGFnIG1hbmlwdWxhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6IChnc3RfcXRfbXV4X2FkZF9tZXRhZGF0YV90YWdzKToKLQkgIEFkZCBzb21lIG1vcmUgc2FmZXR5L3Nhbml0eSBjaGVja3MgaW4gdGFnIG1hbmlwdWxhdGlvbi4KLQotMjAwOC0xMS0wOCAwMjowMDo1OCArMDAwMCAgVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvc0BnbWFpbC5jb20+Ci0KLQkgIENvcHkgcXRtdXggZnJvbSByZXZpc2lvbiAxNDggb2YgdGhlIGdzdC1xdG11eCByZXBvc2l0b3J5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NhbnRvc0BnbWFpbC5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L3F1aWNrdGltZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3F1aWNrdGltZS9hdG9tcy5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2F0b21zLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvZGVzY3JpcHRvcnMuYzoKLQkgICogZ3N0L3F1aWNrdGltZS9kZXNjcmlwdG9ycy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2ZvdXJjYy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2Z0eXBjYy5oOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4LmM6Ci0JICAqIGdzdC9xdWlja3RpbWUvZ3N0cXRtdXguaDoKLQkgICogZ3N0L3F1aWNrdGltZS9nc3RxdG11eG1hcC5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL2dzdHF0bXV4bWFwLmg6Ci0JICAqIGdzdC9xdWlja3RpbWUvcHJvcGVydGllcy5jOgotCSAgKiBnc3QvcXVpY2t0aW1lL3Byb3BlcnRpZXMuaDoKLQkgIENvcHkgcXRtdXggZnJvbSByZXZpc2lvbiAxNDggb2YgdGhlIGdzdC1xdG11eCByZXBvc2l0b3J5LgotCSAgRml4ZXMgIzU1MDI4MC4KLQotMjAxMS0wNC0xMiAxODoyNTozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIEFuZHJvaWQubWs6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGdzdC9xdWlja3RpbWUvTEVHQUw6Ci0JKiBnc3QvcXVpY2t0aW1lL01ha2VmaWxlLmFtOgotCSogZ3N0L3F1aWNrdGltZS9nc3RydHB4cXRkZXBheS5jOgotCSogZ3N0L3F1aWNrdGltZS9nc3RydHB4cXRkZXBheS5oOgotCSogZ3N0L3F1aWNrdGltZS9xdGF0b21wYXJzZXIuaDoKLQkqIGdzdC9xdWlja3RpbWUvcXRkZW11eC5jOgotCSogZ3N0L3F1aWNrdGltZS9xdGRlbXV4Lmg6Ci0JKiBnc3QvcXVpY2t0aW1lL3F0ZGVtdXgudmNwcm9qOgotCSogZ3N0L3F1aWNrdGltZS9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9xdWlja3RpbWUvcXRkZW11eF9kdW1wLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL3F0ZGVtdXhfZm91cmNjLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL3F0ZGVtdXhfbGFuZy5jOgotCSogZ3N0L3F1aWNrdGltZS9xdGRlbXV4X2xhbmcuaDoKLQkqIGdzdC9xdWlja3RpbWUvcXRkZW11eF90eXBlcy5jOgotCSogZ3N0L3F1aWNrdGltZS9xdGRlbXV4X3R5cGVzLmg6Ci0JKiBnc3QvcXVpY2t0aW1lL3F0cGFsZXR0ZS5oOgotCSogZ3N0L3F1aWNrdGltZS9xdWlja3RpbWUuYzoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgcXRkZW11eDogcmVuYW1lIGRpcmVjdG9yeSB0byBxdWlja3RpbWUgdG8gbWF0Y2ggcGx1Z2luIG5hbWUKLQkgIEluIHByZXBhcmF0aW9uIGZvciBxdG11eCBtb3ZpbmcgdG8gLWdvb2QuCi0KLTIwMTEtMDQtMTIgMTE6NDk6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogc2ltcGxpZnkgZnJhbWVyYXRlIGZyYWN0aW9uIGNhbGN1bGF0aW9uCi0KLTIwMTEtMDEtMjQgMTU6NDU6MjggLTA2MDAgIExlb25hcmRvIFNhbmRvdmFsIDxsc2FuZG92YWxAdGkuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICBmbHZkZW11eDogYWRkIHdpZHRoLCBoZWlnaHQgYW5kIGZyYW1lcmF0ZSB0byBjYXBzIHdoZW4gcHJlc2VudCBvbiBvbk1ldGFEYXRhCi0JICBGaXhlcyAjNjQwNDgzLgotCi0yMDEwLTA4LTI0IDEzOjU3OjU1ICswMjAwICBQYXNjYWwgQnVobGVyIDxwYXNjYWwuYnVobGVyQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IFVua25vd24gU1NSQyBpcyBub3QgZmF0YWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDY5NjYKLQotMjAxMC0wOC0yNCAxMzo1NDo1OCArMDIwMCAgUGFzY2FsIEJ1aGxlciA8cGFzY2FsLmJ1aGxlckB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IE51bWJlciBvZiBhY3RpdmUgc291cmNlcyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuZXZlciB0aGUgc3RhdHVzIG9mIHRoZSBzb3VyY2UgY2hhbmdlcyB0byBhY3RpdmUKLQkgIEZvcndhcmQtcG9ydGVkIGJ5IE9saXZpZXIgQ3LDqnRlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2OTY1Ci0KLTIwMTAtMDYtMjMgMTE6Mjk6NTggKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwbWFuYWdlcjogaWdub3JlIGEgQllFIGlmIGl0IGlzIHNlbnQgd2l0aCBvdXIgaW50ZXJuYWwgU1NSQwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0Njk2NAotCi0yMDEwLTAxLTI5IDA5OjQ5OjQ4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQWRkcyBtb3JlIGgyNjQgZmllbGRzIHRvIGl0cyBjYXBzCi0JICBBZGRzIGFsaWdubWVudD1hdSBhbmQgc3RyZWFtLWZvcm1hdD1hdmMgdG8gaDI2NCBjYXBzCi0JICBGaXhlcyAjNjA2NjYyCi0KLTIwMTEtMDQtMTEgMTI6NDQ6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBqYWNrOiBhbHNvIGhhbmRsZSBkZXByZWNhdGlvbnMgZm9yIGphY2sgMS45LjcKLQkgIEphY2sgMS45Ljcgd2FzIHJlbGVhc2VkIDIwLk1hci4yMDExLCBuZWVkIHRvIGhhbmRsZSB0aGUgZGVwcmVjYXRlZCBhcGkgZm9yIHRoaXMKLQkgIHZlcnNpb24gdG9vLgotCi0yMDExLTA0LTExIDAwOjM2OjM1IC0wNDAwICBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvTWFrZWZpbGUuYW06Ci0JICBhbmRyb2lkOiBtYWtlIGl0IHJlYWR5IGZvciBhbmRyb2dlbml6ZXIKLQkgIFJlbW92ZSB0aGUgYW5kcm9pZC8gdG9wIGRpcgotCSAgRml4ZSB0aGUgTWFrZWZpbGUuYW0gdG8gYmUgYW5kcm9nZW5pemVkCi0JICBUbyBidWlsZCBnc3RyZWFtZXIgZm9yIGFuZHJvaWQgd2UgYXJlIG5vdyB1c2luZyBhbmRyb2dlbml6ZXIgd2hpY2ggZ2VuZXJhdGVzIHRoZSBuZWVkZWQgQW5kcm9pZC5tayBmaWxlcy4KLQkgIEFuZHJvZ2VuaXplciBjYW4gYmUgZm91bmQgaGVyZTogaHR0cDovL2dpdC5jb2xsYWJvcmEuY28udWsvP3A9dXNlci9kZXJlay9hbmRyb2dlbml6ZXIuZ2l0Ci0KLTIwMTEtMDQtMTAgMTg6NTY6NTIgLTA0MDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRoaWJhdWx0LnNhdW5pZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBBbmRyb2lkLm1rOgotCSogYW5kcm9pZC9OT1RJQ0U6Ci0JKiBhbmRyb2lkL2FwZXRhZy5tazoKLQkqIGFuZHJvaWQvYXZpLm1rOgotCSogYW5kcm9pZC9mbHYubWs6Ci0JKiBhbmRyb2lkL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmM6Ci0JKiBhbmRyb2lkL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmg6Ci0JKiBhbmRyb2lkL2dzdC91ZHAvZ3N0dWRwLWVudW10eXBlcy5jOgotCSogYW5kcm9pZC9nc3QvdWRwL2dzdHVkcC1lbnVtdHlwZXMuaDoKLQkqIGFuZHJvaWQvZ3N0L3VkcC9nc3R1ZHAtbWFyc2hhbC5jOgotCSogYW5kcm9pZC9nc3QvdWRwL2dzdHVkcC1tYXJzaGFsLmg6Ci0JKiBhbmRyb2lkL2ljeWRlbXV4Lm1rOgotCSogYW5kcm9pZC9pZDNkZW11eC5tazoKLQkqIGFuZHJvaWQvcXRkZW11eC5tazoKLQkqIGFuZHJvaWQvcnRwLm1rOgotCSogYW5kcm9pZC9ydHBtYW5hZ2VyLm1rOgotCSogYW5kcm9pZC9ydHNwLm1rOgotCSogYW5kcm9pZC9zb3VwLm1rOgotCSogYW5kcm9pZC91ZHAubWs6Ci0JKiBhbmRyb2lkL3dhdmVuYy5tazoKLQkqIGFuZHJvaWQvd2F2cGFyc2UubWs6Ci0JKiBnc3QvYWxwaGEvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXBldGFnL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlLmFtOgotCSogZ3N0L2F2aS9NYWtlZmlsZS5hbToKLQkqIGdzdC9jdXR0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSogZ3N0L2VxdWFsaXplci9NYWtlZmlsZS5hbToKLQkqIGdzdC9mbHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZmx4L01ha2VmaWxlLmFtOgotCSogZ3N0L2dvb20vTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ29vbTJrMS9NYWtlZmlsZS5hbToKLQkqIGdzdC9pY3lkZW11eC9NYWtlZmlsZS5hbToKLQkqIGdzdC9pZDNkZW11eC9NYWtlZmlsZS5hbToKLQkqIGdzdC9pbWFnZWZyZWV6ZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9pbnRlcmxlYXZlL01ha2VmaWxlLmFtOgotCSogZ3N0L2xhdy9NYWtlZmlsZS5hbToKLQkqIGdzdC9sZXZlbC9NYWtlZmlsZS5hbToKLQkqIGdzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9tb25vc2NvcGUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpcGFydC9NYWtlZmlsZS5hbToKLQkqIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOgotCSogZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkqIGdzdC9zaGFwZXdpcGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvY3JvcC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3dhdmVuYy9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICBhbmRyb2lkOiBNYWtlIGl0IHJlYWR5IGZvciBhbmRyb2dlbml6ZXIKLQkgIFJlbW92ZSB0aGUgYW5kcm9pZC8gdG9wIGRpcgotCSAgRml4ZSB0aGUgTWFrZWZpbGUuYW0gdG8gYmUgYW5kcm9nZW5pemVkCi0JICBUbyBidWlsZCBnc3RyZWFtZXIgZm9yIGFuZHJvaWQgd2UgYXJlIG5vdyB1c2luZyBhbmRyb2dlbml6ZXIgd2hpY2ggZ2VuZXJhdGVzIHRoZSBuZWVkZWQgQW5kcm9pZC5tayBmaWxlcy4KLQkgIEFuZHJvZ2VuaXplciBjYW4gYmUgZm91bmQgaGVyZTogaHR0cDovL2dpdC5jb2xsYWJvcmEuY28udWsvP3A9dXNlci9kZXJlay9hbmRyb2dlbml6ZXIuZ2l0Ci0KLTIwMTEtMDQtMDUgMjE6MTQ6NDMgKzAyMDAgIEhhYWtvbiBTcG9yc2hlaW0gPGhhYWtvbi5zcG9yc2hlaW1AZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgcnRwZ3N0cGF5OiBkZWNsYXJlIGZyYWdfb2Zmc2V0IHRvIGhvbGQgMzJiaXRzLgotCSAgQXMgc3BlY2lmaWVkIGluIGRvY3VtZW5hdGlvbiBhYm92ZSBhbmQgYmVsb3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ2OTU0Ci0KLTIwMTEtMDQtMDkgMTI6NDE6NDggKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogZml4IHdyb25nbHkgYXBwbGllZCBwYXRjaAotCSAgT2J2aW91c2x5IHJlY3ZfcnRwX3NpbmsgZG9lcyBub3QgaGF2ZSBtdWNoIHRvIGRvIHdpdGggc2VuZF9ydGNwX3NyYy4uLgotCSAgU2VlIGNvbW1pdCAwNDZmZjE3MC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDcyNjMKLQotMjAxMS0wNC0wOCAxNTo1OTo1OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogdXBkYXRlIGZvciBzZXRfZnJhbWVfcHJvcHMgLT4gc2V0X2ZyYW1lX3JhdGUgQVBJIGNoYW5nZQotCi0yMDExLTA0LTA4IDAwOjAzOjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgdGVzdHM6IGhvb2sgdXAgYXVkaW9wYXJzZXIgdW5pdCB0ZXN0cwotCi0yMDExLTA0LTA3IDE4OjMwOjQ5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IHJlbGF4IHN5bmMgbWF0Y2ggYSBiaXQgd2hlbiBkcmFpbmluZwotCSAgLi4uIHRvIGF0IGxlYXN0IGFsbG93IGluaXRpYWwgY2FwcyBjaGFuZ2UgKGJ1dCBubyBmdXJ0aGVyIGNhcHMgaml0dGVyKS4KLQkgIEZpeGVzIHVuaXQgdGVzdCBhZ2FpbiBhZnRlciBwcmV2aW91cyBjaGFuZ2UuCi0KLTIwMTEtMDQtMDcgMTU6MjE6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JICBkb2NzOiB1cGRhdGUgZm9yIGNoYW5nZXMgaW4gZ2l0Ci0KLTIwMTEtMDQtMDcgMTU6MjA6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWw6Ci0JICBkb2NzOiBhZGQgYXVkaW9wYXJzZXJzIHRvIGRvY3MKLQotMjAxMS0wNC0wNyAxNTowNzoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBhYWNwYXJzZSwgYW1ycGFyc2U6IGdzdF9mb29wYXJzZV94eXogLT4gZ3N0X2Zvb19wYXJzZV94eXogdG8gbWF0Y2ggR3N0Rm9vUGFyc2UKLQkgIFNlZSBtb3ZpbmctcGx1Z2lucyBjaGVja2xpc3QuCi0KLTIwMTEtMDQtMDcgMTQ6NDM6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9wbHVnaW4uYzoKLQkgIGF1ZGlvcGFyc2VyczogaG9vayB1cCB0byBidWlsZAotCi0yMDExLTA0LTA3IDEzOjI2OjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oOgotCSAgYXVkaW9wYXJzZXJzOiBwb3J0IHRvIG5ldyBHc3RCYXNlUGFyc2UgaW4gY29yZQotCi0yMDExLTA0LTA0IDIwOjU1OjM5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IHJlcXVpcmUgdGlnaHRlciBzeW5jIG1hdGNoIHdoZW4gZHJhaW5pbmcKLQotMjAxMS0wNC0wMSAxNDo0Nzo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuaDoKLQkgIG1wZWdhdWRpb3BhcnNlOiBQYXJzZSBlbmNvZGVyIGRlbGF5IGFuZCBlbmNvZGVyIHBhZGRpbmcgZnJvbSB0aGUgTEFNRSBoZWFkZXIgaWYgcHJlc2VudAotCi0yMDExLTAzLTA5IDIzOjA2OjE0ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9wbHVnaW4uYzoKLQkgIGRjYXBhcnNlOiBCdW1wIHJhbmsgdG8gcHJpbWFyeSsxCi0JICBTZWVtcyB0byB3b3JrIGZpbmUgd2l0aCBhIHJlYXNvbmFibHkgd2lkZSByYW5nZSBvZiBtZWRpYSwgc28gYnVtcGluZwotCSAgcmFuay4KLQotMjAxMS0wMy0yMyAyMjowMjozNyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuaDoKLQkgIGRjYXBhcnNlOiBFeHBvc2UgZnJhbWUgc2l6ZSBpbiBjYXBzCi0JICBUaGlzIGV4cG9ydHMgdGhlIHNpemUgb2YgdGhlIGZyYW1lIChudW1iZXIgb2YgYnl0ZXMgZnJvbSBvbmUgc3luYyBwb2ludAotCSAgdG8gdGhlIG5leHQpIGFzIHRoZSAiZnJhbWVfc2l6ZSIgZmllbGQgaW4gY2Fwcy4KLQotMjAxMS0wMy0wOSAyMzowMzoxMCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuaDoKLQkgIGRjYXBhcnNlOiBFeHBvc2UgYmxvY2sgc2l6ZSBpbiBjYXBzCi0JICBUaGlzIHNldHMgdGhlICJibG9ja19zaXplIiBmaWVsZCBvbiBjYXBzIGFzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcwotCSAgZW5jb2RlZCBpbiBvbmUgZnJhbWUuCi0KLTIwMTEtMDMtMTYgMTU6NTM6MTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogYWRkIEZJWE1FIGZvciBtYWtpbmcgdGhlIGJhc2UgY2xhc3MgdXNlIHhpbmcgc2VlayB0YWJsZXMgYmV0dGVyCi0KLTIwMTEtMDMtMTQgMTg6MjU6MjUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmg6Ci0JICBkY2FwYXJzZTogQWRkIGRlcHRoIGFuZCBlbmRpYW5uZXNzIHRvIHRoZSBjYXBzCi0JICBTb21lIGRlY29kZXJzIGNhbiBvbmx5IGhhbmRsZSBzcGVjaWZpYyBlbmRpYW5uZXNzIG9yIGEgZml4ZWQKLQkgIGRlcHRoIGFuZCB0aGlzIGFsbG93cyBiZXR0ZXIgbmVnb3RpYXRpb24uCi0JICBGaXhlcyBidWcgIzY0NDIwOC4KLQotMjAxMS0wMi0yNiAxMzo1Mzo0NCAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIFJldmVydCAiYWFjcGFyc2U6IGFsbG93IHBhcnNlZCBmcmFtZXMgb24gc2luayBwYWQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGU0OWI4OWQ1YzVhMTI0NGZhMGRjYjhiYjQ5OTZlMzhmYjliZmY5ZTUuCi0KLTIwMTEtMDItMjMgMTc6MjU6MDMgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogYWxsb3cgcGFyc2VkIGZyYW1lcyBvbiBzaW5rIHBhZAotCi0yMDEwLTEwLTEzIDE2OjEyOjAyIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmM6Ci0JICB0ZXN0czogZml4IGJhc2VwYXJzZSB0ZXN0Ci0KLTIwMTAtMTAtMTMgMTU6Mzk6NTUgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBDcmVhdGUgYmFzZXBhcnNlIGxpYnJhcnkKLQotMjAxMS0wMi0wNyAxNDo0Njo1NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHR1bmUgUVVFUllfU0VFS0lORyByZXNwb25zZQotCSAgRXZlbiBpZiB3ZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgYSBkdXJhdGlvbiB5ZXQsIGFzc3VtZSBzZWVrYWJsZSBpZgotCSAgaXQgbG9va3MgbGlrZSB3ZSdsbCBsaWtlbHkgYmUgYWJsZSB0byBkZXRlcm1pbmUgaXQgbGF0ZXIgb24KLQkgICh3aGljaCBjb2luY2lkZXMgd2l0aCBuZWVkZWQgaW5mb3JtYXRpb24gdG8gcGVyZm9ybSBzZWVraW5nKS4KLQkgIEZpeGVzICM2NDEwNDcuCi0KLTIwMTEtMDItMDggMjM6Mzk6MjQgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBVcGRhdGUgbWluL21heCBiaXRyYXRlIGJlZm9yZSBmaXJzdCBwb3N0aW5nIHRoZW0KLQkgIFRoaXMgYXZvaWRzIHBvc3RpbmcgYW4gaW5pdGlhbCBtaW4tYml0cmF0ZSBvZiBHX1VJTlRNQVggYW5kIG1heC1iaXRyYXRlCi0JICBvZiAwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTg1NwotCi0yMDExLTAyLTA4IDIzOjUwOjEzICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IFBvc3QgQ0JSIGJpdHJhdGUgYXMgbm9taW5hbCBiaXRyYXRlCi0JICBFdmVuIGlmIFZCUiBoZWFkZXJzIGFyZSBtaXNzaW5nLCB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCBhIHN0cmVhbSBpcyBpbgotCSAgZmFjdCBhIENCUiBzdHJlYW0sIHNvIGl0J3Mgc2FmZXIgdG8gbGV0IGJhc2VwYXJzZSBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UKLQkgIGJpdHJhdGUgcmF0aGVyIHRoYW4gYXNzdW1lIGEgQ0JSIHN0cmVhbS4gSG93ZXZlciwgaW4gb3JkZXIgdG8gbWFrZQotCSAgL3NvbWUvIG1ldGFkYXRhIGF2YWlsYWJsZSBiZWZvcmUgdGhlIHJlcXVpc2l0ZSBudW1iZXIgb2YgZnJhbWVzIGhhdmUKLQkgIGJlZW4gcGFyc2VkLCB0aGlzIHBvc3RzIHRoZSBiaXRyYXRlIGZyb20gdGhlIG5vbi1WQlIgaGVhZGVycyBhcyB0aGUKLQkgIG5vbWluYWwgYml0cmF0ZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDE4NTgKLQotMjAxMC0wOS0wNiAxNDoxMDoxMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkgIGFtcnBhcnNlOiBhIHZhbGlkIGFtci13YiBmcmFtZSBzaG91bGQgbm90IGhhdmUgcmVzZXJ2ZWQgZnJhbWUgdHlwZSBpbmRleAotCSAgU2VlICM2Mzk3MTUuCi0KLTIwMTEtMDEtMjcgMTY6NTI6MzQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogaW1wcm92ZSBoYW5kbGluZyBvZiBkZXBlbmRlbnQgc3Vic3RyZWFtIGZyYW1lcwotCSAgSW4gcGFydGljdWxhciwgdGltZXN0YW1wcyBvZiB0aGVzZSBzaG91bGQgdHJhY2sgbWFpbi1zdHJlYW0gdGltZXN0YW1wcy4KLQotMjAxMS0wMS0yMSAxNDo1MzozOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHR1bmUgZGVmYXVsdCBkdXJhdGlvbiBlc3RpbWF0ZSB1cGRhdGUgaW50ZXJ2YWwKLQkgIFJhdGhlciB0aGFuIGEgZml4ZWQgZGVmYXVsdCBmcmFtZSBjb3VudCwgZXN0aW1hdGUgZnJhbWUgY291bnQgdG8gYWltIGZvcgotCSAgYW4gaW50ZXJ2YWwgZHVyYXRpb24gZGVwZW5kaW5nIG9uIGZwcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2Ugb2xkCi0JICBmaXhlZCBkZWZhdWx0LgotCi0yMDExLTAxLTE0IDE1OjE2OjA0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmV2ZXJzZSBwbGF5YmFjazsgbWluZCBrZXlmcmFtZXMgZm9yIGZyYWdtZW50IGJvdW5kYXJ5Ci0KLTIwMTEtMDEtMTMgMTU6MjY6MjEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JICBhbXJwYXJzZTogcHJvcGVybHkgY2hlY2sgZm9yIHN1ZmZpY2llbnQgYXZhaWxhYmxlIGRhdGEgcHJpb3IgdG8gYWNjZXNzCi0KLTIwMTEtMDEtMTIgMTQ6NDA6MzcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBlbnN1cmUgbm9uLWVtcHR5IGNhbmRpZGF0ZSBmcmFtZXMKLQotMjAxMS0wMS0xMSAxNToyNDoyMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGNsYXJpZnkgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzCi0KLTIwMTEtMDEtMTEgMTU6MjQ6MDIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcm9wZXJseSB0cmFjayB1cHN0cmVhbSB0aW1lc3RhbXBzCi0JICAuLi4gcmF0aGVyIHRoYW4gd2l0aCBhIGRlbGF5LgotCi0yMDExLTAxLTExIDE1OjIzOjI5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbmVlZCBwcm9wZXIgZnJhbWUgZHVyYXRpb24gdG8gb2J0YWluIHNlbnNpYmxlIGZyYW1lIGJpdHJhdGUKLQotMjAxMS0wMS0xMSAxNToyMjo1MSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHByb3BlciBpbml0aWFsIHZhbHVlcyBmb3IgaW5kZXggdHJhY2tpbmcgdmFyaWFibGVzCi0KLTIwMTEtMDEtMTEgMTI6MDU6MTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhcnJhbmdlIGZvciBjb25zaXN0ZW50IGV2ZW50IGhhbmRsaW5nCi0KLTIwMTEtMDEtMTAgMTY6NTk6NTkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBoZWFkZXIgc3R5bGUgY2xlYW5pbmcKLQotMjAxMS0wMS0xMCAxNzowNzozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHByb3ZpZGUgc29tZSBtb3JlIGluaXRpYWwgZnJhbWUgbWV0YWRhdGEgaW4gcGFyc2VfZnJhbWUKLQkgIC4uLiBhbmQgZG9jdW1lbnQgYWNjb3JkaW5nbHkuCi0KLTIwMTEtMDEtMTAgMTY6NTY6MzYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlZmFjdG9yIHBhc3N0aHJvdWdoIGludG8gZm9ybWF0IGZsYWdzCi0JICBBbHNvIGFkZCBhIGZvcm1hdCBmbGFnIHRvIHNpZ25hbCBiYXNlcGFyc2UgdGhhdCBzdWJjbGFzcy9mb3JtYXQgY2FuIHByb3ZpZGUKLQkgIChwYXJzZWQpIHRpbWVzdGFtcCByYXRoZXIgdGhhbiBhbiBlc3RpbWF0ZWQgb25lLiAgSW4gcGFydGljdWxhciwgc3VjaCAic3Ryb25nIgotCSAgdGltZXN0YW1wIHRoZW4gYWxsb3dzIHRvIGUuZy4gZGV0ZXJtaW5lIGR1cmF0aW9uLgotCi0yMDExLTAxLTEwIDE1OjM0OjQ4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBpbnRyb2R1Y2UgYSBiYXNlcGFyc2UgZnJhbWUgdG8gc2VydmUgYXMgY29udGV4dAotCSAgLi4uIGFuZCBhZGp1c3Qgc3ViY2xhc3MgcGFyc2VycyBhY2NvcmRpbmdseQotCi0yMDExLTAxLTA3IDE2OjM5OjUxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlc3RyaWN0IGR1cmF0aW9uIHNjYW5uaW5nIHRvIHB1bGwgbW9kZSBhbmQgYXZvaWQgZXh0cmEgc2V0X2NhcHMgY2FsbAotCi0yMDExLTAxLTA3IDE1OjU4OjQ5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHVwZGF0ZSBzb21lIGRvY3VtZW50YXRpb24KLQkgIEFsc28gYWRkIHNvbWUgbW9yZSBkZWJ1Zy4KLQotMjAxMS0wMS0wNiAxMTo0MTo0NCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFsbG93IGluY3JlYXNpbmcgbWluX3NpemUgZm9yIGN1cnJlbnQgZnJhbWUgcGFyc2luZyBvbmx5Ci0JICBBbHNvIGNoZWNrIHRoYXQgc3ViY2xhc3MgYWN0dWFsbHkgZWl0aGVyIGRpcmVjdHMgdG8gc2tpcCBieXRlcyBvcgotCSAgaW5jcmVhc2VzIGV4cGVjdGVkIGZyYW1lIHNpemUgdG8gYXZvaWQgZ29pbmcgbm93aGVyZSBpbiBib2d1cwotCSAgaW5kZWZpbml0ZSBsb29waW5nLgotCi0yMDExLTAxLTE0IDE1OjI2OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhZXNwYXJzZTogZml4IHJlZmFjdG9yIHJlZ3Jlc3Npb24gaW4gbG9vcCBiYXNlZCBwYXJzaW5nCi0KLTIwMTEtMDEtMDYgMTE6MTY6NTYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwYXNzIGFsbCBhdmFpbGFibGUgZGF0YSB0byBzdWJjbGFzcyByYXRoZXIgdGhhbiBtaW5pbXVtCi0JICBBbHNvIHJlZHVjZSBzb21lIGFkYXB0ZXIgY2FsbHMgYW5kIGFkZCBhIGZldyBkZWJ1ZyBzdGF0ZW1lbnRzLgotCi0yMDEwLTEyLTEwIDE1OjU5OjQ5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZml4IHJldmVyc2UgcGxheWJhY2sgaGFuZGxpbmcKLQotMjAxMC0xMi0xMCAxNDo1NjoxMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IG1pbm9yIHR5cG8gYW5kIGRlYnVnIHN0YXRlbWVudCBjbGVhbnVwCi0KLTIwMTAtMTItMTAgMTQ6NDA6MDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogcmVkdWNlIGxvY2tpbmcKLQkgIC4uLiB3aGljaCBpcyBlaXRoZXIgYWxyZWFkeSBtdXRlIGFuZC9vciBpbXBsaWNpdGx5IGhhbmRsZWQgYnkgU1RSRUFNX0xPQ0suCi0KLTIwMTEtMDEtMTQgMTQ6MDg6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhdm9pZCBsb29wIGluIGZyYW1lIGxvY2F0aW5nIGludGVycG9sYXRpb24KLQotMjAxMS0wMS0xOSAxODoyNjozMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IG1pbmQgZ3N0X2J1ZmZlcl91bnJlZiBub3QgbGlraW5nIE5VTEwKLQkgIEZpeGVzICM2Mzk5NTAuCi0KLTIwMTEtMDEtMTQgMTY6MzA6MTEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBiYXNlcGFyc2U6IEJlIGNhcmVmdWwgdG8gbm90IGxvc2UgdGhlIGV2ZW50IHJlZgotCSAgRG9uJ3QgdW5yZWYgdGhlIGV2ZW50IGlmIGl0IGhhc24ndCBiZWVuIGhhbmRsZWQsIGJlY2F1c2UgdGhlIGNhbGxlcgotCSAgYXNzdW1lcyBpdCBpcyBzdGlsbCB2YWxpZCBhbmQgbWlnaHQgcmV1c2UgaXQuCi0JICBJIHJhbiBpbnRvIHRoaXMgcHJvYmxlbSB3aGVuIHRyYW5zY29kaW5nIGFuIEFWSSAod2l0aCBtcDMgaW5zaWRlKQotCSAgdG8gZ3BwLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTU1NQotCi0yMDExLTAxLTEzIDE3OjEwOjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSAgZGNhcGFyc2U6IGZpeCBzeW5jIHdvcmQgZm9yIDE0LWJpdCBsaXR0bGUgZW5kaWFuIGNvZGluZwotCSAgRml4IGNvcHknbidwYXN0ZSBidWcgdGhhdCBtYWRlIHVzIGxvb2sgZm9yIHRoZSByYXcgbGl0dGxlIGVuZGlhbgotCSAgc3luYyB3b3JkIHR3aWNlIGluc3RlYWQgb2YgbG9va2luZyBmb3IgdGhlIDE0LWJpdCBMRSBzeW5jIHdvcmQKLQkgIGFzIHdlbGwuIEZpeGVzIHBhcnNpbmcgb2Ygc3VjaCBzdHJlYW1zIChzZWUgIzYzNjIzNCBmb3Igc2FtcGxlIGZpbGUpLgotCi0yMDExLTAxLTEzIDE2OjI3OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGRvY3M6IG1pbm9yIGJhc2VwYXJzZSBkb2NzL2NvbW1lbnQgZml4ZXMKLQkgIFJlbW92ZSBjb3B5J24ncGFzdGUgbGVmdG92ZXJzLgotCi0yMDExLTAxLTA2IDEyOjQ5OjQzICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlIG9uIG1hY29zeAotCi0yMDEwLTEyLTEzIDE1OjE3OjI5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSAgYWMzcGFyc2U6IHJlbGF4IGJzaWQgY2hlY2tpbmcKLQkgIC4uLiB0byB0aGUgd2lkZXN0IHBvc3NpYmxlIHNwZWMgaW50ZXJwcmV0YXRpb24uCi0JICBGaXhlcyAjNjM3MDYyLgotCi0yMDEwLTEyLTAzIDE4OjExOjU2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiB1cGRhdGUgc29tZSBkb2N1bWVudGF0aW9uCi0KLTIwMTAtMTItMDMgMTg6MTE6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogYWRkIHRvIGRvY3VtZW50YXRpb24KLQotMjAxMC0xMi0wMyAxODoxMTowOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYzoKLQkgIGRjYXBhcnNlOiBhZGQgdG8gZG9jdW1lbnRhdGlvbgotCi0yMDEwLTExLTA4IDE5OjU4OjMxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogaW5jcmVhc2Uga2V5ZnJhbWUgYXdhcmVuZXNzCi0JICAuLi4gd2hpY2ggaXMgbm90IHBhcnRpY3VsYXIgcmVsZXZhbnQgZm9yIGF1ZGlvIHBhcnNpbmcsIGJ1dCBtb3JlIHNvCi0JICBpbiB2aWRlbyBjYXNlcy4gIEluIHBhcnRpY3VsYXIsIGF1dG8tZGV0ZXJtaW5lIGlmIGRlYWxpbmcgd2l0aCB2aWRlbyAoY2FwcykuCi0KLTIwMTAtMTItMDEgMTU6Mjg6NTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmg6Ci0JICBhYzNwYXJzZTogdXNlIHByb3BlciBFQUMtMyBjYXBzCi0KLTIwMTAtMTEtMzAgMTU6NDE6MDIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBhdm9pZCB1bmV4cGVjdGVkIHN0cmF5IG1ldGFkYXRhCi0KLTIwMTAtMTEtMzAgMTU6NDA6MjggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2UgcHJvcGVyIF9OT05FIG91dHB1dCB2YWx1ZSB3aGVuIGFwcGxpY2FibGUKLQotMjAxMC0xMS0yNSAxODo1Njo0MiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMKLQotMjAxMC0xMS0yNSAxNzoxNDoyMyArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYXVkaW9wYXJzZTogZml4IHBvc3NpYmxlIGRpdmlzaW9uLWJ5LXplcm8KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzU3ODYKLQotMjAxMC0xMS0xNyAxNjoyMzo0MiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHVzZSBjb3JyZWN0IG9mZnNldCB3aGVuIGFkZGluZyBpbmRleCBlbnRyeQotCSAgLi4uIGJlYXJpbmcgaW4gbWluZCB0aGF0IEJVRkZFUl9PRkZTRVQgaXMgbWVkaWEgc3BlY2lmaWMgYW5kIG1heSBub3QKLQkgIHJlZmxlY3QgdGhlIGJhc2ljIG9mZnNldCBhZnRlciBoYXZpbmcgYmVlbiBwYXJzZWQuCi0KLTIwMTAtMTEtMTcgMTQ6MzA6MDkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBlbmhhbmNlbWVudHMgZm9yIHRpbWVzdGFtcCBtYXJrZWQgZnJhbWVkIGZvcm1hdHMKLQkgIFRoYXQgaXMsIGFzIHN1Y2ggZm9ybWF0cyBhbGxvdyBzdWJjbGFzcyB0byBleHRyYWN0IHBvc2l0aW9uIGZyb20gZnJhbWUsCi0JICBpdCBpcyBwb3NzaWJsZSB0byBleHRyYWN0IGR1cmF0aW9uIChpZiBub3Qgb3RoZXJ3aXNlIHByb3ZpZGVkKQotCSAgZnJvbSAobmVhcikgbGFzdCBmcmFtZSwgYW5kIGEgc2VlayBjYW4gZmFpcmx5IGFjY3VyYXRlbHkgdGFyZ2V0IHRoZSByZXF1aXJlZAotCSAgcG9zaXRpb24uCi0JICBGaXhlcyAjNjMxMzg5LgotCi0yMDEwLTExLTE2IDE3OjA2OjE0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVmYWN0b3IgZnJhbWUgc2Nhbm5pbmcgcGVmb3JtZWQgYnkgX2xvb3AKLQotMjAxMC0xMS0xNiAxODowNDowMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHNsaWdodGx5IG9wdGltaXplIHNlbmRpbmcgb2YgcGVuZGluZyBuZXdzZWdtZW50IGV2ZW50cwotCi0yMDEwLTExLTE2IDE3OjA0OjM1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWlub3IgZml4ZXMgYW5kIGVuaGFuY2VtZW50cwotCSAgQXJyYW5nZSBmb3IgdXBzdHJlYW0gYXMgd2VsbCBhcyBkb3duc3RyZWFtIGZsdXNoaW5nIHdoZW4gc2Vla2luZy4KLQkgIEFsc28gZGV0ZXJtaW5lIHVwc3RyZWFtIHNpemUgYXMgd2VsbCBhcyBzZWVrYWJpbGl0eS4gIEFkanVzdCBzb21lIGNvbW1lbnRzCi0JICB0byByZWFsaXR5IGFuZCBlbXBsb3kgZGVidWcgc3RhdGVtZW50IGluIHByb3BlciBvcmRlci4KLQotMjAxMC0xMS0xNyAxNTozMzozNiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBtaW5vciBjbGVhbnVwcwotCi0yMDEwLTExLTE3IDE1OjI0OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGZpeCByZWdyZXNzaW9uIGluIEFESUYgc3JjIGNhcHMgc2V0dGluZwotCi0yMDEwLTExLTE2IDEyOjExOjUzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IHBhcnNlIHNlZWt0YWJsZQotCSAgRml4ZXMgIzYzMTM4OSAocGFydGlhbGx5KS4KLQotMjAxMC0xMS0xNiAxMjowODo1NCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IG1pbm9yIHJlZmFjdG9yIGFuZCBlbmFibGUgZGVmYXVsdCBiYXNlcGFyc2Ugc2VnbWVudCBjbGlwcGluZwotCi0yMDEwLTExLTA5IDE5OjM4OjI1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgbXBlZ2F1ZGlvcGFyc2U6IGZpeCBzaWxseSBsZWFrIGluIF9yZXNldAotCi0yMDEwLTEwLTI5IDE0OjA4OjU4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXNlIG9ubHkgdXBzdHJlYW0gZHVyYXRpb24gaWYgaXQgcHJvdmlkZXMgb25lCi0KLTIwMTAtMTAtMjUgMTQ6MTU6NTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZWZsb3cgdXBkYXRlX2JpdHJhdGUgY29kZQotCSAgLi4uIHdoaWNoIG1ha2VzIGxvY2FsIHZhcmlhYmxlcyByZXByZXNlbnQgcmVhbCBzdGF0ZSBiZXR0ZXIsIGFuZCBhdm9pZHMKLQkgIHRyaWdnZXJpbmcgdW5uZWVkZWQgdXBkYXRlcy9hY3Rpb25zLgotCi0yMDEwLTEwLTI1IDE0OjEzOjUxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWRkIHNvbWUgZGVidWcgc3RhdGVtZW50cwotCi0yMDEwLTEwLTE5IDIzOjI1OjU0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSAgZGNhcGFyc2U6IGluaXQgdmFyaWFibGUgdG8gbWFrZSBvc3ggYnVpbGQgYm90IGhhcHB5Ci0JICBnc3RkY2FwYXJzZS5jOiBJbiBmdW5jdGlvbiAnZ3N0X2RjYV9wYXJzZV9jaGVja192YWxpZF9mcmFtZSc6Ci0JICBnc3RkY2FwYXJzZS5jOjI0Njogd2FybmluZzogJ2Jlc3Rfc3luYycgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCBpbiB0aGlzIGZ1bmN0aW9uCi0KLTIwMTAtMTAtMTkgMDA6MTU6MjAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RkY2FwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9wbHVnaW4uYzoKLQkgIGF1ZGlvcGFyc2VyczogYWRkIHZlcnkgYmFzaWMgZHRzL2RjYSBwYXJzZXIKLQkgIFN0aWxsIHNvbWUgaXNzdWVzLCBlLmcuIHdpdGggc2Vla2FibGUgcXVlcmllcyBpbiB0b3RlbSwgYnV0IGFsc28KLQkgIHByb2Nlc3NpbmcgYWxyZWFkeS1jaHVua2VkIGlucHV0IChjcmVhdGVkIHdpdGggbWF0cm9za2FkZW11eCAhIGdkcHBheSkuCi0KLTIwMTAtMTAtMTQgMTY6NDg6MjEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogcHJvcGVybHkgcGFyc2UgZS1hYzMgZnJhbWUgaGVhZGVyCi0JICBBbHNvIGFkZCBhIGZldyBkZWJ1ZyBzdGF0ZW1lbnRzLgotCi0yMDEwLTEwLTEzIDExOjAwOjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogdHdlYWsgc2V0dGluZyBidWZmZXIgbWV0YWRhdGE7IGF2b2lkIHRpbWVzdGFtcCBqaXR0ZXIKLQkgIEZpeGVzICM2MzE5OTMuCi0KLTIwMTAtMTAtMTIgMTg6MDc6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmg6Ci0JICBhYWNwYXJzZTogc3RyZWFtbGluZSBzcmMgY2FwcyBzZXR0aW5nCi0JICBJbiBwYXJ0aWN1bGFyLCBhbHNvIHNldCBzcmMgY2FwcyB3aGVuZXZlciBjaGFuZ2VzIGluIHN0cmVhbSB3YXJyYW50IGRvaW5nIHNvLgotCi0yMDEwLTEwLTEyIDEwOjI4OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IEFkanVzdCB1bml0IHRlc3RzIHRvIG5ldyBmbGFjcGFyc2UgYmVoYXZpb3VyCi0JICBHYXJiYWdlIGFmdGVyIGZyYW1lcyBpcyBub3cgaW5jbHVkZWQgaW4gdGhlIGZyYW1lcyBiZWNhdXNlIGZsYWNwYXJzZQotCSAgaGFzIG5vIGVhc3kgd2F5IHRvIGRldGVjdCB0aGUgcmVhbCBlbmQgb2YgYSBmcmFtZS4gRGVjb2RlcnMgYXJlCi0JICBleHBlY3RlZCB0byBldmVyeXRoaW5nIGFmdGVyIHRoZSBmcmFtZSBiZWNhdXNlIG9ubHkgZGVjb2RpbmcgdGhlCi0JICBiaXRzdHJlYW0gd2lsbCByZXZlYWwgdGhlIHJlYWwgZW5kIG9mIHRoZSBmcmFtZS4KLQkgIEZpeGVzIGJ1ZyAjNjMxODE0LgotCi0yMDEwLTEwLTEyIDEwOjI3OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogRG9uJ3QgZHJvcCB0aGUgbGFzdCBmcmFtZSBpZiBpdCBpcyBmb2xsb3dlZCBieSBnYXJiYWdlCi0JICBTZWUgYnVnICM2MzE4MTQuCi0KLTIwMTAtMTAtMTEgMTc6NDk6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwZXJmb3JtIGJpdHJhdGUgaGFuZGxpbmcgYW5kIHBvc3RpbmcgYWZ0ZXIgbmV3c2VnbWVudCBzZW5kaW5nCi0KLTIwMTAtMTAtMTEgMTc6MzY6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBpbW1lZGlhdGVseSBwb3N0IHN1YmNsYXNzIHByb3ZpZGVkIGJpdHJhdGUKLQotMjAxMC0xMC0xMSAxNzowNjo0OCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGZpeCBwYXJzaW5nIHdpdGggdW5rbm93biBmcmFtZXNpemVzCi0JICBGaXhlcyAjNjMxODE0IChtb3N0bHkpLgotCi0yMDEwLTEwLTA3IDIzOjM3OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogU2ltcGxpZnkgZnJhbWUgaGVhZGVyIHBhcnNpbmcgYnkgdXNpbmcgbG9va3VwIHRhYmxlcwotCSAgQmFzZWQgb24gYSBwYXRjaCBieSBGZWxpcGUgQ29udHJlcmFzLgotCSAgU2VlIGJ1ZyAjNjMxMjAwLgotCi0yMDEwLTEwLTA3IDIzOjI4OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IERvbid0IHBhcnNlIHRoZSBjb21wbGV0ZSBGTEFDIGZyYW1lcyBidXQgb25seSBsb29rIGZvciB2YWxpZCBmcmFtZSBoZWFkZXJzCi0JICBUaGFua3MgdG8gRmVsaXBlIENvbnRyZXJhcyBmb3IgdGhlIHN1Z2dlc3Rpb24uIFRoaXMgaXMgcGFydGlhbGx5Ci0JICBiYXNlZCBvbiBoaXMgcGF0Y2hlcyBhbmQgbWFrZXMgZmxhY3BhcnNlIG1vcmUgdGhhbiAzLjUgdGltZXMgZmFzdGVyLgotCSAgTG9va2luZyBmb3IgdmFsaWQgZnJhbWUgaGVhZGVycyBpcyB1bmxpa2VseSB0byBnaXZlIGZhbHNlIHBvc2l0aXZlcwotCSAgYmVjYXVzZSBldmVyeSBmcmFtZSBoZWFkZXIgaXMgYXQgbGVhc3QgOSBieXRlcyBsb25nLCBjb250YWlucyBhCi0JICAxNCBiaXQgc3luYyBjb2RlIGFuZCBhIDggYml0IGNoZWNrc3VtIG92ZXIgdGhlIGZpcnN0IDggYnl0ZXMuCi0JICBGaXhlcyBidWcgIzYzMTIwMC4KLQotMjAxMC0xMC0wNiAxODozMjo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IFJlYWxseSBwb3N0IHRhZ3Mgb25seSBhZnRlciB0aGUgaW5pdGlhbCBuZXdzZWdtZW50IGV2ZW50Ci0JICBUaGUgZmlyc3QgbmV3c2VnbWVudCBldmVudCB3aWxsIGJlIHNlbmQgYnkgdGhlIGZpcnN0IGNhbGwgdG8KLQkgIGdzdF9iYXNlX3BhcnNlX3B1c2hfYnVmZmVyKCkgaWYgbmVjZXNzYXJ5LCBwb3N0aW5nIHRoZSB0YWdzCi0JICBiZWZvcmUgdGhhdCBpcyBub3QgYSBnb29kIGlkZWEuIEluc3RlYWQgZG8gaXQgZnJvbSB0aGUKLQkgIEdzdEJhc2VQYXJzZTo6cHJlX3B1c2hfYnVmZmVyIHZmdW5jLgotCi0yMDEwLTEwLTA1IDExOjE3OjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIFJldmVydCAiYmFzZXBhcnNlOiBhZGQgc2tpcCBwcm9wZXJ0eSIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYjVhM2Q2MDM2M2Q4MzdhMTBmMDUzM2MxNDFlYzkzZDEwYjc0MjMxMi4KLQkgIFJldmVydGluZyB0aGlzIGZvciBub3csIHNpbmNlIG5vIG9uZSByZWFsbHkgc2VlbXMgdG8gcmVtZW1iZXIgd2h5IHRoaXMKLQkgIHByb3BlcnR5IGV4aXN0cyBvciB3aGF0IGl0IGNvdWxkIHBvc3NpYmx5IGJlIGdvb2QgZm9yLiBJdCBzZWVtcyB0byBoYXZlCi0JICBiZWVuIGluIHRoZSBvcmlnaW5hbCBtcDNwYXJzZSBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRpbWUgYW5kIHdhcyBiYWNrLQotCSAgcG9ydGVkIGZyb20gdGhlcmUuCi0KLTIwMTAtMTAtMDQgMTA6NDE6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5ncwotCSAgVGhlc2Ugd2FybmluZ3MgYXJlIHdyb25nLCB0aGUgdmFyaWFibGVzIGFyZSBvbmx5IHVzZWQgaWYgdGhleSB3ZXJlCi0JICBpbml0aWFsaXplZCBieSB0aGUgYml0IHJlYWRlci4KLQotMjAxMC0wOS0xNCAwMjo0ODo1OCArMDMwMCAgRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGZpeCBwaWN0dXJlIHBhcnNpbmcKLQkgIFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgotCi0yMDEwLTEwLTAzIDIzOjU0OjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogUHVzaCB0YWdzIGJlZm9yZSB0aGUgaGVhZGVyIGJ1ZmZlcnMgYXJlIHB1c2hlZAotCi0yMDEwLTA4LTAyIDIwOjUwOjIxICswMzAwICBGZWxpcGUgQ29udHJlcmFzIDxmZWxpcGUuY29udHJlcmFzQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogdHJpdmlhbCBjYXBzIGZpeAotCSAgU2lnbmVkLW9mZi1ieTogRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+Ci0KLTIwMTAtMTAtMDMgMjM6NTA6MjkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYXVkaW9wYXJzZXI6IExldCB0aGUgZm9ybWF0IHN0cmluZyBhZ3JlZSB3aXRoIHRoZSBwYXJhbWV0ZXJzIHRvIGZpeCBjb21waWxlciB3YXJuaW5nCi0KLTIwMTAtMTAtMDMgMTU6NDE6MjAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogVXNlIHVuY2hlY2tlZCB2ZXJzaW9ucyBvZiB0aGUgYml0cmVhZGVyIGdldCBmdW5jdGlvbnMKLQkgIFdlIGRpZG4ndCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlcyBhbnl3YXkuLi4KLQotMjAxMC0wOS0yMiAxNTo0NDo0MyArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBkZWJ1ZyBvdXRwdXQKLQkgIFdlIGxvc2UgdGhlIHJlZmVyZW5jZSB0byB0aGUgYnVmZmVyIGFmdGVyIGdzdF9wYWRfcHVzaCgpLCBzbyB0aGUgZGVidWcKLQkgIHByaW50IHNob3VsZCBoYXBwZW4gYmVmb3JlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMjI3NgotCi0yMDEwLTEwLTAxIDEyOjM0OjU1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmxhY3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9wYXJzZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5oOgotCSAgYXVkaW9wYXJzZXJzOiBhZGQgZmxhY3BhcnNlIHVuaXQgdGVzdAotCSAgLi4uIGFuZCB0d2VhayBwYXJzZXIgdGVzdCBoZWxwZXIgaW4gdGhlIHByb2Nlc3MuCi0KLTIwMTAtMDktMjkgMTY6MTI6NDIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzdXBwb3J0IHJldmVyc2UgcGxheWJhY2sKLQkgIC4uLiBpbiBwdWxsIG1vZGUgb3IgdXBzdHJlYW0gZHJpdmVuLgotCi0yMDEwLTA5LTI3IDEyOjE2OjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcmVtb3ZlIGRvbmUgVE9ET3MgYW5kIHVwZGF0ZSBkb2N1bWVudGF0aW9uCi0KLTIwMTAtMDktMjUgMTQ6NDA6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiB1c2UgZGV0ZXJtaW5lZCBzZWVrYWJpbGl0eSBpbiBhbnN3ZXJpbmcgU0VFS0lORyBxdWVyeQotCi0yMDEwLTA5LTI1IDE0OjMyOjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWRkIHNraXAgcHJvcGVydHkKLQotMjAxMC0wOS0yNSAxMzo1OTozOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FjM3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tcGVnYXVkaW9wYXJzZS5jOgotCSAgYXVkaW9wYXJzZXJzOiBhZGQgYWMzcGFyc2UgYW5kIG1wZWdhdWRpb3BhcnNlIHVuaXQgdGVzdAotCi0yMDEwLTA5LTI1IDEzOjU5OjE4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBtcGVnYXVkaW9wYXJzZTogaW5pdGlhbCB2ZXJzaW9uCi0JICAuLi4gYWRlcXVhdGVseSBlcXVpdmFsZW50IHRvIG1wM3BhcnNlLCBzbyBsZXRzIGJvbGRseSBzZXQgaXQKLQkgIHRvIGhpZ2hlciByYW5rLgotCi0yMDEwLTA5LTI1IDE0OjAxOjA3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IHNldCBtaW5pbXVtIGZyYW1lIHNpemUgYXQgX3N0YXJ0Ci0JICAuLi4gcmF0aGVyIHRoYW4gb25lIHRpbWUgYXQgX2luaXQuCi0KLTIwMTAtMDktMjUgMTM6NTA6NTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hYWNwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYW1ycGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmg6Ci0JICBhdWRpb3BhcnNlcnM6IHJlZmFjdG9yIGV4aXN0aW5nIHVuaXQgdGVzdHMgdXNpbmcgY29tbW9uIGhlbHBlcgotCi0yMDEwLTA5LTIyIDE1OjA3OjA5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHVzZSBfc2V0X2ZyYW1lX3Byb3BzIHRvIGNvbmZpZ3VyZSBmcmFtZSBsZWFkX2luIGFuZCBsZWFkX291dAotCSAgLi4uIHByb3ZpZGVkIGEgY29ycmVzcG9uZGluZyBkZWNvZGVyIHdpdGggc3VmZmljaWVudCBsZWFkaW5nIGFuZCBmb2xsb3dpbmcKLQkgIGZyYW1lcyB0byBjYXJyeSBvdXQgZnVsbCBkZWNvZGluZyBmb3IgYSBwYXJ0aWN1bGFyIHNlZ21lbnQuCi0KLTIwMTAtMDktMjIgMTQ6MTM6MTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHVzZSBfc2V0X2R1cmF0aW9uIHRvIGNvbmZpZ3VyZSBkdXJhdGlvbiB1cGRhdGUgaW50ZXJ2YWwKLQkgIC4uLiBhcyBpdCBsb2dpY2FsbHkgYmVsb25ncyB0aGVyZSBhcyBvbmUgb3IgdGhlIG90aGVyOyBlaXRoZXIgc3ViY2xhc3MKLQkgIGNhbiBwcm92aWRlIGEgZHVyYXRpb24sIG9yIGFuIGVzdGltYXRlIG11c3QgYmUgbWFkZSAocmVndWFybHkgdXBkYXRlZCkuCi0KLTIwMTAtMDktMjIgMTM6NTU6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBsb2NhbGl6ZSB1c2Ugb2YgcHJvdmlkZWQgZnBzIGluZm9ybWF0aW9uCi0KLTIwMTAtMDktMjIgMTI6MTM6MTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzZWVrIHRhYmxlIGFuZCBhY2N1cmF0ZSBzZWVrIHN1cHBvcnQKLQotMjAxMC0wOS0yMSAxMzo1NzoxMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHByb3BlciBhbmQgbW9yZSBleHRlbmRlZCBzZWdtZW50IGFuZCBzZWVrIGhhbmRsaW5nCi0JICBUaGF0IGlzLCBsb29wIHBhdXNlIGhhbmRsaW5nLCBzZWdtZW50IHNlZWsgc3VwcG9ydCwgbmV3c2VnbWVudCBmb3IgZ2FwcywgZXRjCi0KLTIwMTAtMDktMjEgMTA6NTc6MDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogYWRkIGluZGV4IHN1cHBvcnQKLQotMjAxMC0wOS0yMSAwOTo1OTo1NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlZmFjdG9yIHN0YXRlIHJlc2V0Ci0KLTIwMTAtMDktMjAgMTY6Mzk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcmV2ZW50IGluZGVmaW5pdGUgcmVzeW5jaW5nCi0KLTIwMTAtMDktMjAgMTM6NTc6NTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBzcGVjaWZpYyBFT1MgaGFuZGxpbmcgaWYgbm8gb3V0cHV0IHNvIGZhcgotCi0yMDEwLTA5LTIwIDEzOjMxOjU3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogYWRqdXN0IF9zZXRfZnJhbWVfcHJvcCBkb2N1bWVudGF0aW9uIGFuZCBzZXQgZGVmYXVsdCBhcyBjbGFpbWVkCi0KLTIwMTAtMDktMjAgMTM6MzA6NTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggYml0cmF0ZSBjb3B5LWFuZC1wYXN0ZSBhbmQgdXBkYXRlIGhldXJpc3RpYwotCi0yMDEwLTA5LTE3IDE4OjMzOjI5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcG9zdCBkdXJhdGlvbiBtZXNzYWdlIGlmIGF2ZXJhZ2UgYml0cmF0ZXMgaXMgdXBkYXRlZAotCi0yMDEwLTA5LTE3IDE4OjI0OjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IHJlbW92ZSBpc19zZWVrYWJsZSB2bWV0aG9kIGFuZCB1c2UgYSBzZXRfc2VlayBpbnN0ZWFkCi0JICBTZWVrYWJpbGl0eSwgbGlrZSBkdXJhdGlvbiwgZXRjIGlzIHVubGlrZWx5IHRvIGNoYW5nZSAoZnJlcXVlbnRseSksIGFuZAotCSAgdGhlIGRlZmF1bHQgYXNzdW1wdGlvbiBjb3ZlcnMgbW9zdCBjYXNlcywgc28gbGV0IHN1YmNsYXNzIHNldCB3aGVuIG5lZWRlZC4KLQkgIEF0IHRoZSBzYW1lIHRpbWUsIGFsbG93IHN1YmNsYXNzIHRvIGluZGljYXRlIGlmIGl0IGhhcyBzZWVrLW1ldGFkYXRhICh0YWJsZSkKLQkgIGF2YWlsYWJsZSwgYW5kIHBvc3NpYmx5IGhhdmUgaXQgcHJvdmlkZSBhbiBhdmVyYWdlIGJpdHJhdGUuCi0KLTIwMTAtMDktMTcgMTc6MzU6NDAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogcmVtb3ZlIHJlZHVuZGFudCBkZWZhdWx0IGlzX3NlZWthYmxlCi0KLTIwMTAtMDktMTcgMTc6MjE6NDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuaDoKLQkgIGJhc2VwYXJzZTogYWRkIGFub3RoZXIgaG9vayBmb3Igc3ViY2xhc3MgcHJpb3IgdG8gcHVzaGluZyBidWZmZXIKLQkgIC4uLiBhbmQgYWxsb3cgc3ViY2xhc3MgdG8gcGVyZm9ybSBjdXN0b20gc2VnbWVudCBjbGlwcGluZywgb3IgdG8KLQkgIGVtaXQgdGFncyBvciBtZXNzYWdlcyBhdCB0aGlzIHRpbWUuCi0KLTIwMTAtMDktMTcgMTc6MTk6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiAwIGNvbnZlcnRzIHRvIDAgYnkgZGVmYXVsdAotCi0yMDEwLTA5LTE2IDE4OjU2OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFzZTogcmVmYWN0b3IgY29udmVyc2lvbiB1c2luZyBoZWxwZXIgZnVuY3Rpb24gYW5kIGV4cG9ydCBkZWZhdWx0IGNvbnZlcnQKLQotMjAxMC0wOS0xNiAxODozNTo0NyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHN0cmVhbWxpbmUgcXVlcnkgaGFuZGxpbmcKLQotMjAxMC0wOS0xNiAxMTo1MToyMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBjbGVhbnVwIHN0cnVjdCBhbmQgcmVtb3ZlIHVudXNlZCBtZW1iZXIKLQotMjAxMC0wOC0xNiAxMTowNDozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBhdWRpb3BhcnNlcnM6IGluY3JlYXNlIHJhbmtzIHRvIGVuYWJsZSBhdXRvLXBsdWdnaW5nCi0JICBCZWNhdXNlIHdlIGNhbiwgYW5kIHNob3VsZCwgaGF2ZSBzb21lIHNoYWtlZG93biB0ZXN0aW5nIGJlZm9yZSBoYXZpbmcKLQkgIHRoZXNlIG1ha2UgaXQgaW50byAtZ29vZCBsYXRlciBvbiAuLi4KLQotMjAxMC0wOS0yMiAxNjowNzoyNCArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEFsbG93IGNoYWluaW5nIG9mIHN1YmNsYXNzIGV2ZW50IGhhbmRsZXJzCi0JICBUaGlzIGFsbG93cyB0aGUgY2hpbGQgY2xhc3MgdG8gY2hhaW4gaXRzIGV2ZW50IGhhbmRsZXIgd2l0aAotCSAgR3N0QmFzZVBhcnNlLCBzbyB0aGF0IHN1YmNsYXNzZXMgZG9uJ3QgaGF2ZSB0byBkdXBsaWNhdGUgYWxsIHRoZSBkZWZhdWx0Ci0JICBldmVudCBoYW5kbGluZyBsb2dpYy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjIyNzYKLQotMjAxMC0wOC0yNyAxODozNToxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IERvbid0IHVzZSBHU1RfRkxPV19JU19GQVRBTCgpCi0JICBBbHNvIGRvbid0IHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBmb3IgVU5FWFBFQ1RFRCBhbmQgZG8gaXQKLQkgIGZvciBOT1RfTElOS0VELgotCi0yMDEwLTA5LTA2IDE0OjEyOjAwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbm9uLVRJTUUgc2VlayBldmVudCBpcyBzaW1wbHkgbm90IGhhbmRsZWQKLQotMjAxMC0wNi0xNSAxNTozNDowNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGZpeCBzZWVrIGV2ZW50IHJlZiBoYW5kbGluZwotCi0yMDEwLTA2LTE1IDE1OjMzOjM3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHJldmVudCBhcml0aG1ldGljIG92ZXJmbG93cyBpbiBwdWxsIG1vZGUgYnVmZmVyIGNhY2hlIGhhbmRsaW5nCi0KLTIwMTAtMDYtMTUgMTU6MzI6MzQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggc2VlayBoYW5kbGluZwotCSAgQWxsb3cgYSBmZXcgbW9yZSBzZWVrIGV2ZW50IHR5cGUgY29tYmluYXRpb25zLCBhbmQgcmVhbGx5IHVzZSB0aGUgcmVzdWx0Ci0JICBvZiBnc3Rfc2VnbWVudF9zZXRfc2VlayB0byBwZXJmb3JtIHRoZSBzZWVrLiAgQWxzbyBhZGQgc29tZSBkZWJ1Zy4KLQotMjAxMC0wNC0xMiAxODowNzoyOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWFjcGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FtcnBhcnNlLmM6Ci0JICBjaGVjazogRG9uJ3QgcmUtZGVjbGFyZSAnR0xpc3QgKmJ1ZmZlcnMnIGluIHRoZSB0ZXN0cwotCSAgSXQncyBhbiBleHRlcm5hbCB3aGljaCBsaXZlcyBpbiBnc3RjaGVjay5jLiBSZWRlY2xhcmluZyBpdCBtYWtlcyBzb21lCi0JICBjb21waWxlcnMvYXJjaGl0ZWN0dXJlcyB0aGluayB0aGUgJ2J1ZmZlcnMnIGluIHRoZSBpbmRpdmlkdWFsIHRlc3RzIGFyZQotCSAgYSBkaWZmZXJlbnQgc3ltYm9sLi4uIGFuZCB0aGVyZWZvcmUgd2UgZW5kIHVwIGNvbXBhcmluZyBob2xvZGVja3Mgd2l0aAotCSAgb3Jhbmdlcy4KLQotMjAxMC0wMy0yNiAxODo1Njo0OSArMDAwMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IERvbid0IGVtaXQgYml0cmF0ZSB0YWdzIHRvbyBlYXJseQotCSAgV2Ugd2FpdCB0byBwYXJzZSBhIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyAoMTAsIGFyYml0cmFyaWx5KSBiZWZvcmUKLQkgIGVtaXRpbmcgYml0cmF0ZSB0YWdzIHNvIHRoYXQgb3VyIGVhcmx5IGVzdGltYXRlcyBhcmUgbm90IHdpbGRseQotCSAgaW5hY2N1cmF0ZSBmb3Igc3RyZWFtcyB0aGF0IHN0YXJ0IHdpdGggYSBzaWxlbmNlLiBJZiB0aGUgc3RyZWFtIGVuZHMKLQkgIGJlZm9yZSB0aGF0LCB3ZSBqdXN0IGVtaXQgdGhlIHRhZ3MgYW55d2F5LgotCSAgV2hpbGUgaXQgX3dvdWxkXyBiZSBuaWNlciB0byBiZSBzcGVjaWZ5IHRoZSB0aHJlc2hvbGQgdG8gc3RhcnQgcHVzaGluZwotCSAgdGhlIHRhZ3MgaW4gdGVybXMgb2YgZHVyYXRpb24sIHRoaXMgd291bGQgaW50cm9kdWNlIG1vcmUgY29tcGxleGl0eSB0aGFuCi0JICB0aGlzIG1lcml0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQ5OTEKLQotMjAxMC0wMy0yNiAxODo1ODozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5oOgotCSAgZmxhY3BhcnNlOiBPcHRpb25hbGx5IGNoZWNrIHRoZSBvdmVyYWxsIGZyYW1lIGNoZWNrc3VtcyB0b28gYmVmb3JlIGFjY2VwdGluZyBhIGZyYW1lIGFzIHZhbGlkCi0JICBUaGlzIGlzIG9wdGlvbmFsIGJlY2F1c2UgaXQncyBhIHF1aXRlIGV4cGVuc2l2ZSBvcGVyYXRpb24gYW5kIGl0J3MgdmVyeQotCSAgdW5saWtlbHkgdGhhdCBhIG5vbi1mcmFtZSBpcyBkZXRlY3RlZCBhcyBmcmFtZSBhZnRlciB0aGUgaGVhZGVyIENSQyBjaGVjawotCSAgYW5kIGNoZWNraW5nIGFsbCBiaXRzIGZvciB2YWxpZCB2YWx1ZXMuIFRoZSBvdmVyYWxsIGZyYW1lIGNoZWNrc3VtcyBhcmUKLQkgIG1haW5seSB1c2VmdWwgdG8gZGV0ZWN0IGluY29uc2lzdGVuY2llcyBpbiB0aGUgZW5jb2RlZCBwYXlsb2FkLgotCi0yMDEwLTAzLTI2IDE4OjQyOjI4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogQ2hlY2sgdGhlIENSQy04IG9mIHRoZSBoZWFkZXJzIGJlZm9yZSBhY2NlcHRpbmcgYSBmcmFtZSBhcyB2YWxpZAotCSAgVGhpcyBtYWtlcyBmYWxzZS1wb3NpdGl2ZXMgZHVyaW5nIHNlZWtpbmcgbXVjaCBsZXNzIGxpa2VseSBhbmQgZGV0ZWN0aW9uIG9mCi0JICB0aGVtIG11Y2ggZmFzdGVyLgotCi0yMDEwLTAzLTI2IDE4OjIwOjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogU2V0IHRoZSBsYXN0IHN0b3AgdG8gdGhlIGJ1ZmZlciBzdGFydHRpbWUgaWYgdGhlIGR1cmF0aW9uIGlzIGludmFsaWQKLQkgIC4uLmluc3RlYWQgb2Ygbm90IHNldHRpbmcgaXQgYXQgYWxsLgotCi0yMDEwLTAzLTI2IDE4OjE5OjAwICswMTAwICBKb3NodWEgTS4gRG9lIDxqb3NoQGpvc2hkb2UuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBTZW5kIE5FV1NFR01FTlQgZXZlbnQgd2l0aCBjb3JyZWN0IHN0YXJ0IGFuZCBwb3NpdGlvbgotCSAgSW5zdGVhZCBvZiB0YWtpbmcgdGhlIGxhc3Qgc3RvcCAod2hpY2ggY291bGQgYmUgYnVmZmVyIGVuZHRpbWUgaW5zdGVhZAotCSAgb2Ygc3RhcnR0aW1lKSBhbHdheXMgdGFrZSB0aGUgYnVmZmVyIHN0YXJ0dGltZS4KLQkgIEZpeGVzIGJ1ZyAjNjE0MDE2LgotCi0yMDEwLTAzLTI2IDE2OjQ5OjAxICswMDAwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogRml4IGJ1ZmZlciByZWZjb3VudCBpc3N1ZQotCSAgV2hlbiBjYWxsZWQgZnJvbSB0aGUgR1NUX0ZMQUNfUEFSU0VfU1RBVEVfSEVBREVSUyBjYXNlLAotCSAgZ3N0X2ZsYWNfcGFyc2VfaGFuZF9oZWFkZXJzKCkgZG9lcyBhIGdzdF9idWZmZXJfc2V0X2NhcHMoKSBvbiBhIGJ1ZmZlcgotCSAgd2l0aCByZWZjb3VudCA+IDEuIFRoaXMgY2hhbmdlIGhhbmRsZXMgdGhpcyBjYXNlIGJ5IG1ha2luZyB0aGUgYnVmZmVyCi0JICBtZXRhZGF0YV9Xcml0YWJsZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQwMzcKLQotMjAxMC0wMy0yNSAxNzowOToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSAgYXVkaW9wYXJzZXJzOiByZW1vdmUgdW51c2VkIEdzdEJhc2VQYXJzZUNsYXNzUHJpdmF0ZSBzdHJ1Y3R1cmUKLQotMjAxMC0wMy0yNSAxMjo1NTowMiArMDAwMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IE1ha2UgYml0cmF0ZSBlc3RpbWF0aW9uIG1vcmUgYWNjdXJhdGUKLQkgIFRoaXMgaW1wbGVtZW50cyB0aGUgZ2V0X2ZyYW1lX292ZXJoZWFkKCkgdmZ1bmMgc28gdGhhdCBiYXNlcGFyc2UgY2FuCi0JICBtYWtlIG1vcmUgYWNjdXJhdGUgYml0cmF0ZSBlc3RpbWF0ZXMuCi0KLTIwMTAtMDMtMjUgMTE6NDg6NDYgKzAwMDAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogRml4IGJpdHJhdGUgY2FsY3VsYXRpb24KLQkgIFRoaXMgcGF0Y2ggYWRkcyB0aGUgZ2V0X2ZyYW1lX292ZXJoZWFkKCkgdmZ1bmMgc28gdGhhdCBiYXNlcGFyc2UgY2FuCi0JICBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgbWluL2F2Zy9tYXggYml0cmF0ZXMgZm9yIGFhY3BhcnNlLgotCSAgTm90ZTogVGhlIGJpdHJhdGUgd2FzIGJlaW5nIGluY29ycmVjdGx5IGNhbGN1bGF0ZWQgZm9yIEFEVFMgc3RyZWFtcwotCSAgKGl0J3Mgbm90IGluIHRoZSBoZWFkZXIgYXMgdGhlIGNvZGUgc3VnZ2VzdHMpLgotCi0yMDEwLTAzLTI1IDExOjIyOjU4ICswMDAwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBhdWRpb3BhcnNlcnM6IEFkZCBiaXRyYXRlIGNhbGN1bGF0aW9uIHRvIGJhc2VwYXJzZQotCSAgVGhpcyBtYWtlcyBiYXNlcGFyc2Uga2VlcCBhIHJ1bm5pbmcgYXZlcmFnZSBvZiB0aGUgc3RyZWFtIGJpdHJhdGUsIGFzCi0JICB3ZWxsIGFzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJpdHJhdGVzLiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSBhCi0JICB2ZnVuYyB0byBtYWtlIHN1cmUgdGhhdCBwZXItZnJhbWUgb3ZlcmhlYWQgZnJvbSB0aGUgY29udGFpbmVyIGlzIG5vdAotCSAgYWNjb3VudGVkIGZvciBpbiB0aGUgYml0cmF0ZSBjYWxjdWxhdGlvbi4KLQkgIFdlIHRha2UgY2FyZSBub3QgdG8gb3ZlcnJpZGUgdGhlIGJpdHJhdGUsIG1pbmltdW0tYml0cmF0ZSwgYW5kCi0JICBtYXhpbXVtLWJpdHJhdGUgdGFncyBpZiB0aGV5IGhhdmUgYmVlbiBwb3N0ZWQgdXBzdHJlYW0uIFdlIGFsc28KLQkgIHJhdGUtbGltaXQgdGhlIGVtaXNzaW9uIG9mIGJpdHJhdGUgc28gdGhhdCBpdCBpcyBvbmx5IHRyaWdnZXJlZCBieSBhCi0JICBjaGFuZ2Ugb2YgPjEwIGticHMuCi0KLTIwMTAtMDMtMjIgMTY6NTY6MDMgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYW1ycGFyc2UuYzoKLQkgIEFkZCAtV29sZC1zdHlsZS1kZWZpbml0aW9uCi0JICBhbmQgZml4IHRoZSB3YXJuaW5ncwotCi0yMDEwLTAzLTIxIDIxOjM5OjE4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hbXJwYXJzZS5jOgotCSAgQWRkIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgdG8gY29uZmlndXJlIGZsYWdzCi0JICBBbmQgZml4IGFsbCB3YXJuaW5ncwotCi0yMDEwLTAzLTE4IDE3OjMwOjI2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQotCi0yMDEwLTAxLTE0IDExOjUwOjMzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogcmVuYW1lIGJhc2VwYXJzZSBHVHlwZSBuYW1lIHRvIGF2b2lkIHBvc3NpYmxlIGNvbmZsaWN0cwotCi0yMDEwLTAxLTEyIDE4OjU1OjUzICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBJbml0aWFsaXplIHZhcmlhYmxlcy4KLQkgIEZpeGVzIGJ1aWxkIG9uICQjQCooIG1hY29zeAotCi0yMDEwLTAxLTExIDIyOjQxOjU3ICswMzAwICDQ8/Hr4O0gyObh8+vg8u7iIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jOgotCSAgd2luMzI6IEluY2x1ZGUgY29uZmlnLmggYmVmb3JlIGFueXRoaW5nIGVsc2UuIEZpeCBtcGVnZGVtdXggTElCQURECi0JICBCZWNhdXNlIGNvbmZpZy5oIGRlZmluZXMgX19NU1ZDUlRfVkVSU0lPTl9fLCB3aGljaCBzaG91bGQgYmUgZGVmaW5lZAotCSAgYmVmb3JlIGluY2x1c2lvbiBvZiBhbnkgc3lzdGVtIGhlYWRlci4KLQkgIEFsc28gZml4ZXMgbXBlZ2RlbXV4IE1ha2VmaWxlLmFtIExJQkFERCB0eXBvLgotCSAgRml4ZXMgIzYwNjY2NQotCi0yMDEwLTAxLTExIDEzOjIwOjI2IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IEFsc28gYWRkIHN0cmVhbS1mb3JtYXQgdG8gdGVtcGxhdGUgY2FwcwotCSAgRG8gbm90IGZvcmdldCB0byBhZGQgc3RyZWFtLWZvcm1hdCB0byB0ZW1wbGF0ZSBjYXBzCi0JICBvZmYgYWFjcGFyc2UKLQotMjAxMC0wMS0xMSAxMzoxMzo0MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmM6Ci0JICBSZW5hbWUgYWFjJ3Mgc3RyZWFtLWZvcm1hdCAnbm9uZScgdG8gJ3JhdycKLQkgIFJlbmFtZXMgYWFjJ3Mgc3RyZWFtLWZvcm1hdCBmcm9tIHByZXZpb3VzIGNvbW1pdHMgZnJvbSBub25lIHRvCi0JICByYXcKLQotMjAxMC0wMS0xMSAxMjoxMDowMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogdXBkYXRlIHRlc3RzIHRvIHN0cmVhbS1mb3JtYXQgY2hhbmdlcwotCSAgVXBkYXRlcyBhYWNwYXJzZSB1bml0IHRlc3RzIHRvIGNoZWNrIGZvciBzdHJlYW0tZm9ybWF0Ci0JICBjb3JyZWN0bmVzcyBhcyB3ZWxsLgotCi0yMDEwLTAxLTExIDEwOjUxOjE4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IEFkZCBzdHJlYW0tZm9ybWF0IHRvIG91dHB1dCBjYXBzCi0JICBBZGRzIHN0cmVhbS1mb3JtYXQgZmllbGQgdG8gb3V0cHV0IGNhcHMKLQotMjAxMC0wMS0wNSAxNTowNTowNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBhdWRpb3BhcnNlcnM6IGRvY3VtZW50YXRpb24gZml4ZXMKLQotMjAxMC0wMS0wNSAxNTowNDozOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBhZGQgZG9jdW1lbnRhdGlvbgotCi0yMDEwLTAxLTA1IDE0OjQ4OjQ5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmg6Ci0JICBmbGFjcGFyc2U6IGFkZCBkb2N1bWVudGF0aW9uCi0KLTIwMDktMTItMjEgMTg6Mjk6NDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBwZXJmb3JtIGFkZGl0aW9uYWwgZnJhbWUgY2hlY2tzIHdoZW4gcmVzeW5jaW5nCi0KLTIwMTAtMDEtMDUgMTY6MzU6NTIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSAgZmxhY3BhcnNlOiBmaXggKG11bHRpcGxlIGNoYW5uZWwpIGZyYW1lIHBhcnNpbmcKLQotMjAxMC0wMS0wNSAxNjozNTo0NCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGRlY2xhcmUgdW5wYXJzZWQgaW5wdXQgYW5kIHBhcnNlZCBvdXRwdXQKLQotMjAwOS0xMi0yMSAxODoxOToyMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBmaXggc2Nhbm5pbmcgZm9yIG5leHQgc3luY3dvcmQKLQotMjAwOS0xMi0yMSAxODoxODozOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGFkanVzdCBzZWVrIGhhbmRsaW5nIGFuZCBuZXdzZWdtZW50IHNlbmRpbmcKLQkgIFBlcmZvcm0gc2FuaXR5IGNoZWNrIG9uIHR5cGUgb2Ygc2VlaywgYW5kIG9ubHkgcGVyZm9ybSBvbmUgdGhhdCBpcwotCSAgYXBwcm9wcmlhdGVseSBzdXBwb3J0ZWQuICBBZGp1c3QgZG93bnN0cmVhbSBuZXdzZWdtZW50IGV2ZW50Ci0JICB0byBmaXJzdCBidWZmZXIgdGltZXN0YW1wIHRoYXQgaXMgc2VudCBkb3duc3RyZWFtLgotCi0yMDA5LTEyLTIxIDExOjU5OjQ1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogbWlub3IgcmVmYWN0b3IgY2xlYW51cAotCSAgQWxzbyBhZGQgc29tZSBkZWJ1ZyBsb2dnaW5nLgotCi0yMDA5LTEyLTE4IDIxOjA1OjExICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogbG9jYXRlIG5leHQgc3luYyBjb2RlIG1vcmUgZWZmaWNpZW50bHkKLQotMjAwOS0xMi0xOCAyMTowNDoxMiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmM6Ci0JICBmbGFjcGFyc2U6IGJhc2VwYXJzZSB0YWtlcyBjYXJlIG9mIGhhbmRsaW5nIGxlZnRvdmVyIHBpZWNlcwotCi0yMDA5LTEyLTE4IDIxOjAyOjQwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogaW1wbGVtZW50IGxlZnRvdmVyIGRyYWluaW5nIGluIHB1bGwgbW9kZQotCi0yMDA5LTEyLTE3IDEyOjQ1OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYzoKLQkgIGZsYWNwYXJzZTogc2V0IF9PRkZTRVQgYW5kIF9PRkZTRVRfRU5EIG9uIG91dGdvaW5nIGJ1ZmZlcnMKLQotMjAwOS0xMi0xNyAxMjo0NDoyMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5jOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBhdWRpb3BhcnNlcnM6IG1vdmUgJ2ZsYWNwYXJzZScgaW50byBpdAotCi0yMDA5LTEyLTE2IDE4OjM4OjMzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogcHJvdmlkZSBkZWZhdWx0IGNvbnZlcnNpb24gdXNpbmcgYnBzIGlmIG5vIGZwcyBhdmFpbGFibGUKLQkgIEFsc28gc3RvcmUgZXN0aW1hdGVkIGR1cmF0aW9uIGFzIHN1Y2gsIHJhdGhlciB0aGFuIHByZXRlbmRpbmcgb3RoZXJ3aXNlCi0JICAoZS5nLiBzZXQgYnkgc3ViY2xhc3MpLgotCi0yMDA5LTEyLTE4IDEzOjMwOjI5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogY2hlY2sgZm9yIHJlbWFpbmluZyBkYXRhIHdoZW4gZHJhaW5pbmcgaW4gcHVzaCBtb2RlCi0KLTIwMDktMTItMTggMTM6MzA6MDcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggcHVsbCBtb2RlIGNhY2hlIHNpemUgY29tcGFyaXNvbgotCi0yMDA5LTEyLTE4IDEzOjAxOjE3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlLgotCi0yMDA5LTEyLTE3IDE0OjQ2OjAxICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbi5zY2hhbGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JICBVcGRhdGUgc3BlYyBmaWxlIGFuZCBmaXggYWMzcGFyc2VyIGhlYWRlciBsaXN0aW5nIGluIE1ha2VmaWxlLmFtCi0KLTIwMDktMTItMTEgMTA6MjU6MTYgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5jOgotCSAgYXVkaW9wYXJzZTogZml4IGEgZm9ybWF0IHN0cmluZyBhcyByZXBvcnRlZCBvbiBpcmMuCi0KLTIwMDktMTEtMjMgMTY6MzQ6NTAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogZW5zdXJlIHN1ZmZpY2llbnQgZGF0YSBhdmFpbGFibGUgZm9yIHBhcnNpbmcKLQotMjAwOS0xMC0yOSAxNToxOTowNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBleHRyYWN0IGFuZCB1c2Ugc29tZSBtb3JlIGRldGFpbHMgZm9yIEVuaGFuY2VkIEFjLTMgc3RyZWFtcwotCi0yMDA5LTEwLTI5IDE1OjE4OjM3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGN1c3RvbSBidWZmZXJmbGFnIGluZGljYXRlcyBub3QgdG8gY291bnQgZnJhbWUgaW4gc3RhdHMKLQotMjAwOS0xMC0yOCAxNDowODo0MyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkgIGFjM3BhcnNlOiBwZXJmb3JtIGFkZGl0aW9uYWwgZnJhbWUgY2hlY2tzIHdoZW4gcmVzeW5jaW5nCi0KLTIwMDktMTAtMjggMTQ6MDc6MTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogaW5mb3JtIGJhc2UgcGFyc2VyIG9mIGZyYW1lIGR1cmF0aW9uCi0KLTIwMDktMTAtMjcgMTY6MTY6NTAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmM6Ci0JICBhYzNwYXJzZTogaW1wcm92ZSBzcmMgY2FwcyBzZXR0aW5ncwotCi0yMDA5LTExLTI3IDE3OjU5OjAzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmM6Ci0JICBhYzNwYXJzZTogaW5pdGlhbCB2ZXJzaW9uCi0JICBNQVJHSU5BTCByYW5rIGZvciBub3c7IG1pZ2h0IHRha2Ugc29tZSB0aW1lIGZvciBzb21lICh1c2VmdWwpCi0JICBmcmFtZWQ9dHJ1ZS9mYWxzZSB0byBhcHBlYXIgaGVyZSBhbmQgdGhlcmUuCi0KLTIwMDktMTEtMjYgMTg6MzQ6NDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmg6Ci0JICBhbXJwYXJzZTogdXNlIChkZWZhdWx0KSB0aW1lIGhhbmRsaW5nIG9mIGJhc2VwYXJzZXIgY2xhc3MKLQotMjAwOS0xMS0yNiAxODoxNToyMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmg6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL3BsdWdpbi5jOgotCSAgYXVkaW9wYXJzZXJzOiBtb3ZlICdhbXJwYXJzZScgaW50byBpdAotCi0yMDA5LTExLTI3IDE3OjI3OjMyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvcGFyc2Vycy9nc3RiYXNlcGFyc2UuYzoKLQkgIGF1ZGlvcGFyc2VyczogcmVmZXJlbmNlIEdzdEJhc2VQYXJzZSBub3cgbGl2ZXMgaGVyZQotCi0yMDA5LTExLTI4IDE4OjEzOjMxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuaDoKLQkqIGdzdC9hdWRpb3BhcnNlcnMvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYXVkaW9wYXJzZXJzL2dzdGJhc2VwYXJzZS5oOgotCSogZ3N0L2F1ZGlvcGFyc2Vycy9wbHVnaW4uYzoKLQkgIGF1ZGlvcGFyc2VyczogcmVuYW1lICdhYWNwYXJzZScgcGx1Z2luIHRvIGdlbmVyaWMgJ2F1ZGlvcGFyc2VycycgcGx1Z2luCi0KLTIwMDktMTEtMjYgMTc6MDQ6NDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hYWNwYXJzZS9wbHVnaW4uYzoKLQkgIGFhY3BhcnNlOiBzZXBhcmF0ZSBwbHVnaW4gcmVnaXN0cmF0aW9uIGFuZCByZW5hbWUgcGx1Z2luCi0KLTIwMDktMTEtMjYgMTc6MDQ6MzYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBlbnN1cmUgc3VmZmljaWVudCBkYXRhIGF2YWlsYWJsZSBiZWZvcmUgYWNjZXNzaW5nCi0KLTIwMDktMTEtMDUgMTQ6MzE6NDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5oOgotCSAgYWFjcGFyc2U6IHVzZSAoZGVmYXVsdCkgdGltZSBoYW5kbGluZyBvZiBiYXNlcGFyc2VyIGNsYXNzCi0KLTIwMDktMTAtMjkgMTU6MTk6MzUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBmaXh1cCBjb21tZW50cyB0byBDLXN0eWxlCi0KLTIwMDktMTAtMjkgMTY6MDU6MDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IHJlc2V0IHBhc3N0aHJvdWdoIG1vZGUgdG8gZGVmYXVsdCAoZGlzYWJsZWQpIG9uIGFjdGl2YXRpb24KLQotMjAwOS0xMC0yOSAxNToxNjo1OSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZW5zdXJlIGJ1ZmZlciBtZXRhZGF0YSBpcyB3cml0YWJsZQotCi0yMDA5LTEwLTI4IDE0OjA2OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5oOgotCSAgYmFzZXBhcnNlOiBmaXgvZW5oYW5jZSBESVNDT05UIG1hcmtpbmcKLQkgIEluIHBhcnRpY3VsYXIsIGNvbnNpZGVyIERJU0NPTlQgPT0gIXN5bmMsIGFuZCBhbGxvdyBzdWJjbGFzcyB0byBxdWVyeQotCSAgc3luYyBzdGF0ZSwgYXMgaXQgbWF5IHdhbnQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBkZXBlbmRpbmcKLQkgIG9uIHdoZXRoZXIgc3luYyB3YXMgYWNoaWV2ZWQgZWFybGllciBvbi4KLQkgIEFsc28gYXJyYW5nZSBmb3Igc3ViY2xhc3MgdG8gcXVlcnkgd2hldGhlciBsZWZ0b3ZlciBkYXRhIGlzIGJlaW5nIGRyYWluZWQuCi0KLTIwMDktMTEtMjMgMTU6NDg6MjUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBiYXNlcGFyc2U6IGFkZCB0aW1lc3RhbXAgaGFuZGxpbmcsIGFuZCBkZWZhdWx0IGNvbnZlcnNpb24KLQkgIEluIHBhcnRpY3VsYXIsIChvcHRpb25hbGx5KSBwcm92aWRlIGJhc2VwYXJzZSB3aXRoIGEgbm90aW9uIG9mIGZyYW1lcyBwZXIgc2Vjb25kCi0JICAoYW5kIHRoZXJlZm9yZSBhbHNvIGZyYW1lIGR1cmF0aW9uKSBhbmQgaGF2ZSBpdCB0cmFjayBmcmFtZSBhbmQgYnl0ZSBjb3VudHMuCi0JICBUaGlzIHdheSwgc3ViY2xhc3MgY2FuIHByb3ZpZGUgYmFzZXBhcnNlIHdpdGggZnBzIGFuZCBoYXZlIGl0IHByb3ZpZGUgZGVmYXVsdAotCSAgYnVmZmVyIHRpbWUgbWV0YWRhdGEgYW5kIGNvbnZlcnNpb25zLCB0aG91Z2ggc3ViY2xhc3MgY2FuIHN0aWxsIGluc3RhbGwKLQkgIGNhbGxiYWNrcyB0byBoYW5kbGUgc3VjaCBpdHNlbGYuCi0KLTIwMDktMTAtMjggMTI6MDI6MDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGRvY3VtZW50YXRpb24gZml4ZXMKLQotMjAwOS0xMC0yOCAxMjowMDowOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogdXNlX2ZpeGVkX2NhcHMgZm9yIHNyYyBwYWQKLQkgIEFmdGVyIGFsbCwgc3RyZWFtIGlzIGFzLWlzLCBhbmQgdGhlcmUgaXMgbGl0dGxlIG1vbGRpbmcgdG8gZG93bnN0cmVhbSdzCi0JICB0YXN0ZSB0aGF0IGNhbiBiZSBkb25lLiAgSWYgc3ViY2xhc3MgY2FuIGFuZCB3YW50cyB0byBkbyBzbywgaXQgY2FuCi0JICBzdGlsbCBvdmVycmlkZSBhcyBzdWNoLgotCi0yMDA5LTExLTIwIDE3OjMyOjEzICswMTAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBGaXggY29tcGlsYXRpb24gd2FybmluZ3MKLQotMjAwOS0xMC0xMSAxMToyMjoxMSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBmaXggd2FybmluZ3MgaW4gbWFjb3N4IHNub3cgbGVvcGFyZAotCi0yMDA5LTA5LTI1IDE3OjAyOjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6Ci0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICBhYWNwYXJzZTogZm9yZWdvIChib2d1cykgcGFyc2luZyBvZiBhbHJlYWR5IHBhcnNlZCAocmF3KSBpbnB1dAotCi0yMDA5LTA4LTA3IDEzOjA3OjE3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcmV2ZW50IGluZmluaXRlIGxvb3Agd2hlbiBkcmFpbmluZwotCi0yMDA5LTA4LTA3IDEzOjA2OjI4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggbWlub3IgbWVtb3J5IGxlYWsKLQotMjAwOS0wNy0xNCAxNDowODowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIGFhY3BhcnNlOiBBZGQgZnVuY3Rpb24gZm9yIHRoZSBiYXNlcGFyc2Ugc3ViY2xhc3MgdG8gcHVzaCBidWZmZXJzIGRvd25zdHJlYW0KLQkgIEFsc28gaGFuZGxlIHRoZSBjYXNlIGdyYWNlZnVsbHkgd2hlcmUgdGhlIHN1YmNsYXNzIGRlY2lkZXMgdG8gZHJvcAotCSAgdGhlIGZpcnN0IGJ1ZmZlcnMgYW5kIGhhcyBubyBjYXBzIHNldCB5ZXQuIEl0J3Mgc3RpbGwgcmVxdWlyZWQgdG8KLQkgIGhhdmUgdmFsaWQgY2FwcyBzZXQgd2hlbiB0aGUgZmlyc3QgYnVmZmVyIHNob3VsZCBiZSBwYXNzZWQgZG93bnN0cmVhbS4KLQotMjAwOS0wNy0xNCAxNDowNzo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogRml4IHNlZWsgZXZlbnQgbGVha2luZwotCi0yMDA5LTA2LTE4IDEyOjEzOjI4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogQURJRjogZG8gbm90IHNlbmQgYm9ndXMgdGltZXN0YW1wcywgbGVhdmUgdG8gZG93bnN0cmVhbSAoZGVjb2RlcikKLQotMjAwOS0wNi0wMSAxNTo1MzoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IGZpeCBzYW1wbGUgcmF0ZSBleHRyYWN0aW9uIGZyb20gY29kZWMgZGF0YQotCSAgSW4gb25lIGNhc2Ugd2UgZXh0cmFjdGVkIHRoZSBzYW1wbGUgcmF0ZSBpbmRleCBmcm9tIHRoZSBjb2RlYyBkYXRhCi0JICBhbmQgc2F2ZWQgaXQgYXMgc2FtcGxlIHJhdGUgcmF0aGVyIHRoYW4gZ2V0dGluZyB0aGUgcmVhbCBzYW1wbGUKLQkgIHJhdGUgZnJvbSB0aGUgdGFibGUuIEZpeCB0aGF0LCBhbmQgYWxzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgYWNjZXNzCi0JICBub24tZXhpc3RhbnQgdGFibGUgZW50cmllcyBieSBhZGRpbmcgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gdGhhdAotCSAgZ3VhcmRzIGFnYWluc3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0IGRhdGEuCi0KLTIwMDktMDYtMDEgMTQ6MDI6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlLCBhbXJwYXJzZTogcmVtb3ZlIGJvZ3VzIGdzdF9wYWRfZml4YXRlX2NhcHMoKSBjYWxscwotCi0yMDA5LTA2LTAxIDEzOjU2OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBwcm9wYWdhdGUgcmV0dXJuIHZhbHVlIG9mIEdzdEJhc2VQYXJzZTo6c2V0X3NpbmtfY2FwcygpCi0JICBnc3RfYmFzZV9wYXJzZV9zaW5rX3NldGNhcHMoKSBwcmVzdW1hYmx5IHNob3VsZCBmYWlsIGlmIHRoZSBzdWJjbGFzcwotCSAgcmV0dXJucyBGQUxTRSBmcm9tIGl0cyA6OnNldF9zaW5rX2NhcHMoKSBmdW5jdGlvbi4KLQotMjAwOS0wNi0wMSAxMzo0NzowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RiYXNlcGFyc2UuYzoKLQkgIGJhc2VwYXJzZTogZG9uJ3QgdHJ5IHRvIEdTVF9MT0cgYW4gYWxyZWFkeS1mcmVlZCBjYXBzIHN0cmluZwotCSAgVGhlIHByb3BlciB3YXkgdG8gbG9nIGNhcHMgaXMgdmlhIEdTVF9QVFJfRk9STUFUIGFueXdheS4KLQotMjAwOS0wNi0wMSAxMzowNTozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBzZXQgY2hhbm5lbHMgYW5kIHJhdGUgb24gb3V0cHV0IGNhcHMsIGFuZCBrZWVwIGNvZGVjX2RhdGEKLQkgIENyZWF0ZSBvdXRwdXQgY2FwcyBmcm9tIGlucHV0IGNhcHMsIHNvIHdlIG1haW50YWluIGFueSBmaWVsZHMgd2UKLQkgIG1pZ2h0IGdldCBvbiB0aGUgaW5wdXQgY2Fwcywgc3VjaCBhcyBjb2RlY19kYXRhIG9yIHJhdGUgYW5kIGNoYW5uZWxzLgotCSAgU2V0IGNoYW5uZWxzIGFuZCByYXRlIG9uIHRoZSBvdXRwdXQgY2FwcyBpZiB3ZSBkb24ndCBoYXZlIGlucHV0IGNhcHMKLQkgIG9yIHRoZXkgZG9uJ3QgY29udGFpbiBzdWNoIGZpZWxkcy4gV2UgZG8gdGhpcyBwYXJ0bHkgYmVjYXVzZSB3ZSBjYW4sCi0JICBidXQgYWxzbyBiZWNhdXNlIHNvbWUgbXV4ZXJzIG5lZWQgdGhpcyBpbmZvcm1hdGlvbi4gVGFncmVhZGJpbiB3aWxsCi0JICBhbHNvIGJlIGhhcHB5IGFib3V0IHRoaXMuCi0KLTIwMDktMDUtMjYgMTk6NDM6NTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IGZpeCBkZWJ1ZyBjYXRlZ29yeQotCi0yMDA5LTA0LTI3IDIyOjM5OjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBmaXggKHJlZ3Jlc3Npb24gaW4pIG5ld3NlZ21lbnQgaGFuZGxpbmcKLQkgIChhYWNwYXJzZSwgYW1ycGFyc2UsIGZsYWNwYXJzZSkuICBGaXhlcyAjNTgwMTMzLgotCi0yMDA5LTA0LTA3IDA0OjUzOjAyICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBzbGlnaHRseSBicm9rZW4gYnVmZmVyLWluLXNlZ21lbnQgY2hlY2sgKGFhY3BhcnNlLCBhbXJwYXJzZSwgZmxhY3BhcnNlKQotCi0yMDA5LTA0LTA1IDAzOjUwOjE5ICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBiYXNlcGFyc2U6IEZpeCBwdXNoIG1vZGUgc2Vla2luZyAoYWFjcGFyc2UsIGFtcnBhcnNlKQotCSAgU2VuZGluZyB0aGUgZmx1c2gtc3RhcnQgZXZlbnQgZm9yd2FyZCBiZWZvcmUgdGFraW5nIHRoZSBzdHJlYW0gbG9jayBhY3R1YWxseQotCSAgd29ya3MsIGluIGNvbnRyYXN0IHRvIGRlYWRsb2NraW5nIGluIGRvd25zdHJlYW0gcHJlcm9sbF93YWl0IChodW5rIDEpLgotCSAgQWZ0ZXIgdGhhdCB3ZSBnZXQgdGhlIGNoYWluIGZ1bmN0aW9uIGJlaW5nIHN0dWNrIGluIGEgYnVzeSBsb29wLiBUaGlzIGlzIGZpeGVkCi0JICBieSB1cGRhdGluZyB0aGUgbWluaW11bSBmcmFtZSBzaXplIGluc2lkZSB0aGUgc3luY2hyb25pemF0aW9uIGxvb3AgYmVjYXVzZSB0aGUKLQkgIHN1YmNsYXNzIGFza3MgZm9yIG1vcmUgZGF0YSBpbiB0aGlzIHdheSAoaHVuayAyKS4KLQkgIEZpbmFsbHksIHRoaXMgbGVhZHMgdG8gYSB2ZXJ5IHByb2JhYmxlIGNyYXNoIGJlY2F1c2UgdGhlIHN1YmNsYXNzIGNhbiBmaW5kIGEKLQkgIHZhbGlkIGZyYW1lIHdpdGggYSBzaXplIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBkYXRhIGluIHRoZQotCSAgYWRhcHRlci4gVGhpcyBtYWtlcyB0aGUgc3Vic2VxdWVudCBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciBjYWxsIHJldHVybiBOVUxMLAotCSAgd2hpY2ggaXMgbm90IGV4cGVjdGVkIChodW5rIDMpLgotCi0yMDA5LTAzLTMxIDE2OjA3OjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiBEZWxheSBuZXdzZWdtZW50IGFzIGxvbmcgYXMgcG9zc2libGUuCi0JICBJZiBuZXdzZWdtZW50IGlzIHNlbnQgKHRvbykgZWFybHksIGNhcHMgbWF5IG5vdCB5ZXQgYmUgZml4ZWQvc2V0LAotCSAgYW5kIGRvd25zdHJlYW0gbWF5IG5vdCBoYXZlIGJlZW4gbGlua2VkLgotCi0yMDA5LTAzLTE5IDAxOjE3OjI1ICswMjAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuYzoKLQkgIGFhY3BhcnNlOiBGaXggYnVzeWxvb3Agd2hlbiBzZWVraW5nLiBGaXhlcyAjNTc1Mzg4Ci0JICBUaGUgcHJvYmxlbSBpcyB0aGF0IGFmdGVyIGEgZGlzY29udCwgc2V0X21pbl9mcmFtZV9zaXplKDEwMjQpIGlzIGNhbGxlZCB3aGVuCi0JICBkZXRlY3Rfc3RyZWFtIHJldHVybnMgRkFMU0UuIEhvd2V2ZXIsIGRldGVjdF9zdHJlYW0gY2FsbHMgY2hlY2tfYWR0c19mcmFtZQotCSAgd2hpY2ggc2V0cyB0aGUgZnJhbWUgc2l6ZSBvbiBpdHMgb3duIHRvIHNvbWV0aGluZyBsYXJnZXIgdGhhbiAxMDI0LiBUaGlzIGlzIHRoZQotCSAgc2FtZSBzaXR1YXRpb24gYXMgaW4gdGhlIGJlZ2lubmluZywgc28gdGhlIGJhc2UgY2xhc3MgZW5kcyB1cCBjYWxsaW5nCi0JICBjaGVja192YWxpZF9mcmFtZSBpbiBhbiBlbmRsZXNzIGxvb3AuCi0KLTIwMDktMDMtMTkgMDA6MzI6NDAgKzAyMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5jOgotCSAgYWFjcGFyc2U6IFJlZmFjdG9yIGNoZWNrX3ZhbGlkX2ZyYW1lIHRvIGV4cG9zZSBicm9rZW4gY29kZQotCSAgSnVzdCBtb3ZpbmcgY29kZSBhcm91bmQgYW5kIHJlbW92aW5nIGFuIHVuaGVscGZ1bC9taXNsZWFkaW5nIGNvbW1lbnQuCi0KLTIwMDktMDItMjcgMTE6MjQ6MzcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZXZlcnQgbGFzdCBjaGFuZ2UgYW5kIHByb3Blcmx5IGZpeAotCSAgQmFzZXBhcnNlIGludGVybmFseSBicmVha3MgdGhlIHNlbWFudGljcyBvZiBhIF9jaGFpbiBmdW5jdGlvbiBieSBjYWxsaW5nIGl0IHdpdGgKLQkgIGJ1ZmZlcj09TlVMTC4gVGhlIHJlc29uIEkgYmVsaXZlZCBpdCB3YXMgb2theSB0byByZW1vdmUgaXQgd2FzIHRoYXQgdGhlcmUgaXMKLQkgIGFsc28gYW4gdW5jaGVja2VkIGFjY2VzcyB0byBidWZmZXIgbGF0ZXIgaW4gX2NoYWluLiBBY3R1YWxseSB0aGF0IGNvZGUgaXMgd3JvbmcsCi0JICBhcyBpdCBtb3N0IHByb2JhYmx5IHdhbnRzIHRvIHNldCBkaXNjb250IG9uIHRoZSBvdXRnb2luZyBidWZmZXIuCi0KLTIwMDktMDItMjYgMTE6MDI6MDYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgYmFzZXBhcnNlOiByZW1vdmUgY2hlY2tzIGZvciBidWZmZXI9PU5VTEwKLQkgIEFjY29yZGlmbiB0byBkb2NzIGZvciBHc3RQYWRDaGFpbkZ1bmN0aW9uIGJ1ZmZlciBjYW5ub3QgYmUgTlVMTC4gSWYgd2Ugd291bGQKLQkgIGxlYXZlIHRoZSBjaGVjaywgd2Ugd291bGQgYWxzbyBuZWVkIG1vcmUgc3VjaCBjaGVjayBiZWxvdy4KLQotMjAwOS0wMi0xMSAwMDoxNTo0MyArMDIwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6Ci0JICBhYWNwYXJzZTogRml4IGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHBsdWdpbiBkZXRhaWxzLgotCi0yMDA5LTAxLTMwIDE4OjE4OjEwICswMDAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgRml4IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGRlZmF1bHQgcGFyc2VfZnJhbWUgZnVuY3Rpb24uCi0JICBGaXggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBwYXJzZV9mcmFtZSBmdW5jdGlvbiBpbiBib3RoCi0JICBjb3BpZXMgb2YgR3N0QmFzZVBhcnNlCi0KLTIwMDktMDEtMjMgMTY6MDA6MTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6Ci0JICBMb2cgYWFjIGRldGFpbHMgZm91bmQgaW4gY29kZWNfZGF0YS4KLQotMjAwOC0xMS0xMyAxNzoyNDo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2FhY3BhcnNlL2dzdGFhY3BhcnNlLmM6IERvbid0IGF1dG9wbHVnIGFhY3BhcnNlIHVudGlsIGl0IHdvcmtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5jOiAocGx1Z2luX2luaXQpOgotCSAgRG9uJ3QgYXV0b3BsdWcgYWFjcGFyc2UgdW50aWwgaXQgd29ya3MuCi0KLTIwMDgtMTEtMTMgMTU6MjA6MTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgdW5pdCB0ZXN0cyBmb3IgbmV3IHBhcnNlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FtcnBhcnNlLmM6Ci0JICBBZGQgdW5pdCB0ZXN0cyBmb3IgbmV3IHBhcnNlcnMuCi0KLTIwMDgtMTEtMTMgMTQ6MjE6MzkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogRml4IGJhc2VwYXJzZSB0eXBlIG5hbWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgKiBnc3QvYW1ycGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICBGaXggYmFzZXBhcnNlIHR5cGUgbmFtZS4KLQotMjAwOC0xMS0xMyAxMjo1OTozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBZGQgdHdvIG5ldyBiYXNlcGFyc2UgYmFzZWQgcGFyc2VycyAoYWFjIGFuZCBhbXIpIGZyb20gQnVnICM1MTg4NTcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvYWFjcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hYWNwYXJzZS9nc3RhYWNwYXJzZS5jOgotCSAgKiBnc3QvYWFjcGFyc2UvZ3N0YWFjcGFyc2UuaDoKLQkgICogZ3N0L2FhY3BhcnNlL2dzdGJhc2VwYXJzZS5jOgotCSAgKiBnc3QvYWFjcGFyc2UvZ3N0YmFzZXBhcnNlLmg6Ci0JICAqIGdzdC9hbXJwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FtcnBhcnNlL2dzdGFtcnBhcnNlLmM6Ci0JICAqIGdzdC9hbXJwYXJzZS9nc3RhbXJwYXJzZS5oOgotCSAgKiBnc3QvYW1ycGFyc2UvZ3N0YmFzZXBhcnNlLmM6Ci0JICAqIGdzdC9hbXJwYXJzZS9nc3RiYXNlcGFyc2UuaDoKLQkgIEFkZCB0d28gbmV3IGJhc2VwYXJzZSBiYXNlZCBwYXJzZXJzIChhYWMgYW5kIGFtcikgZnJvbSBCdWcgIzUxODg1Ny4KLQotMjAxMS0wMy0yMCAwMTowODozOCArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogTWFrZSBzcmNfcXVlcnkgTVQtc2FmZQotCSAgSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZWxlbWVudCBtaWdodCBiZSBnb2luZyBkb3duIHdoaWxlIHRoZSBldmVudCBhcnJpdmVzCi0KLTIwMTEtMDQtMDggMTU6MjI6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBVbnJlZiBldmVudCBpZiB0aGUgcGFyZW50IGVsZW1lbnQgZGlzYXBwZWFyZWQKLQotMjAxMS0wNC0wOCAxNToyMjoxOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBVbnJlZiBldmVudCBpZiB0aGUgcGFyZW50IGVsZW1lbnQgZGlzYXBwZWFyZWQKLQotMjAxMS0wMy0yMSAxNjowNDozNCArMDEwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBNYWtlIHVwc3RyZWFtIGV2ZW50cyBNVC1zYWZlCi0KLTIwMTEtMDMtMjEgMTY6MDQ6MzQgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IE1ha2UgdXBzdHJlYW0gZXZlbnRzIE1ULXNhZmUKLQotMjAxMS0wNC0wOCAxNToyMDo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHA6IFVucmVmIGV2ZW50cyBpZiB0aGUgcGFyZW50IGVsZW1lbnQgZGlzYXBwZWFyZWQKLQotMjAxMS0wMS0wNiAxODoyNDozNiArMDEwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvcmF2bmFzQGNpc2NvLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cG1hbmFnZXI6IGZpeCBwYWQgY2FsbGJhY2tzIHNvIHRoZXkgaGFuZGxlIHdoZW4gcGFyZW50IGdvZXMgYXdheQotCSAgMSkgV2UgbmVlZCB0byBsb2NrIGFuZCBnZXQgYSBzdHJvbmcgcmVmIHRvIHRoZSBwYXJlbnQsIGlmIHN0aWxsIHRoZXJlLgotCSAgMikgSWYgaXQgaGFzIGdvbmUgYXdheSwgd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBncmFjZWZ1bGx5LgotCSAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gc2FmZWx5IG1vZGlmeSBhIHJ1bm5pbmcgcGlwZWxpbmUuIEhhcyBiZWVuCi0JICBvYnNlcnZlZCB3aGVuIGEgc3RyZWFtaW5nIHRocmVhZCBpcyBkb2luZyBhIGJ1ZmZlcl9hbGxvYygpIHdoaWxlIGFuCi0JICBhcHBsaWNhdGlvbiB0aHJlYWQgc2VuZHMgYW4gZXZlbnQgb24gYSBwYWQgZnVydGhlciBkb3duc3RyZWFtLCBhbmQgZnJvbQotCSAgd2l0aGluIGEgcGFkIHByb2JlIChob2xkaW5nIFNUUkVBTV9MT0NLKSBjYXJyaWVzIG91dCB0aGUgcGlwZWxpbmUgcGx1bWJpbmcKLQkgIHdoaWxlIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGhhcyBpdHMgYnVmZmVyX2FsbG9jKCkgaW4gcHJvZ3Jlc3MuCi0KLTIwMTAtMTEtMjYgMTU6MjA6MDQgKzAxMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogbWFrZSBpdGVyYXRlX2ludGVybmFsX2xpbmtzIE1ULXNhZmUKLQotMjAxMS0wNC0wOCAxNDozNTowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIFJldmVydCAiUHVsc2VzaW5rOiBBbGxvdyBjaHVua3MgdXAgdG8gYnVmc2l6ZSBpbnN0ZWFkIG9mIHNlZ3NpemUiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDFlMmMxNDY3YWUwNDJhM2M2YmIxYTZiYzBjMDdhZWZmMTNlYzVlZGIuCi0JICBUaGUgY29tbWl0IGNhdXNlcyBwdWxzZXNpbmsgdG8gaWdub3JlIHRoZSBsYXRlbmN5LXRpbWUgYmFzZWF1ZGlvc2luayBwcm9wZXJ0eS4KLQotMjAxMS0wNC0wOCAxMToxMzowNyArMDIwMCAgQWxleGV5IEZpc2hlciA8YnVnLXRyYWNrQGZpc2hlci1wcml2YXQubmV0PgotCi0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JICBydHBzcGVleHBheTogRG8gbm90IHRyYW5zbWl0dCBzYW1wbGVzIHdpdGggR0FQIGZsYWcKLQkgIElmIHdlIGdldCBHQVAgc2FtcGxlcywgdGhlcmUgaXMgbm8gbmVlZCB0byB0cmFuc21pdHQgaXQuCi0JICBJbiBzb21lIHNpdHVhdGlvbnMsIG1pY3JvcGhvbmUgaXMgbXV0ZWQsIHdlIGNhbiBkcm9wIG5ldCB0cmFmZmljawotCSAgdXNhZ2UgdG8gfjEga2JpdC9zLiBXaXRob3V0IHBhdGNoIGl0IHdpbGwgc3RheSB+MjAga2JpdC9zCi0KLTIwMTEtMDQtMDggMTE6MTE6NTggKzAyMDAgIEFsZXhleSBGaXNoZXIgPGJ1Zy10cmFja0BmaXNoZXItcHJpdmF0Lm5ldD4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleGVuYzogVXNlIHNwZWV4IGludGVybiBzaWxlbmNlIGRldGVjdGlvbgotCSAgU3BlZXggaGFzIGJ1aWxkIGluIHNpbGVuY2UgZGV0ZWN0aW9uLiBJZiBzcGVleF9lbmNvZGVfaW50IHJldHVybnMgMCwKLQkgIHRoYW4gdGhlcmUgaXMgc2lsZW5jZSBhbmQgc2FtcGxlIGRvIG5vdCBuZWVkIHRvIGJlIHRyYW5zbWl0dGVkLgotCSAgVGhpcyB3b3JrIG9ubHkgaWYgdmJyPTEgYW5kIGR0eD0xIG9wdGlvbmFzIGFyZSBlbmFibGVkLgotCSAgU28gaWYgd2UgZ2V0IDAsIHdlIGFkZCBHQVAgZmxhZyB0byB0aGUgc2FtcGxlLgotCi0yMDExLTA0LTA3IDE5OjA0OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFjM3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuYzoKLQkgIHJ0cDogcG9ydCBzb21lIHBheS9kZXBheWxvYWRlcnMKLQotMjAxMS0wNC0wNSAxOToxNToxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIHVkcHNpbms6IGhhbmRsZSBzY2F0aGVyIGdhdGhlciBmcm9tIGJ1ZmZlcnMKLQkgIEl0ZXJhdGUgdGhlIG1lbW9yeSBibG9ja3Mgb24gdGhlIGJ1ZmZlciBhbmQgc2VuZCB0aGVtIHVzaW5nIHNlbmRtc2cuCi0KLTIwMTEtMDQtMDUgMTc6MjY6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSAgcnRwZGVjOiByZXNldCBzdHJ1Y3R1cmUgYmVmb3JlIHVzZQotCi0yMDExLTA0LTA1IDE3OjIwOjA4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmMKLQotMjAxMS0wNC0wNSAxNzoxMjoyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogaGFuZGxlICogY29udHJvbCBjb3JyZWN0bHkKLQkgIFBhcnNlIHNlc3Npb24gY29udHJvbCBhdHRyaWJ1dGVzIHdoZW4gbm8gbWVkaWEgY29udHJvbCBhdHRyaWJ1dGUgaXMKLQkgIHByZXNlbnQuIFRocmVhdCAqIGNvbnRyb2wgYXR0cmlidXRlcyBhcyBhbiBlbXB0eSBzdHJpbmcsIGp1c3QgbGlrZSB0aGUKLQkgIHNwZWMgc2F5cy4KLQkgIEZpeGVzICM2NDY4MDAKLQotMjAxMS0wNC0wNSAxNzowNjo0MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgcnRzcC91ZHA6IHBvcnQgdG8gMC4xMQotCi0yMDExLTA0LTA1IDE0OjI4OjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IEFkZCBzdXBwb3J0IGZvciBBLUxhdyBhbmQgwrUtTGF3Ci0JICBGaXhlcyBidWcgIzY0NjU2Ny4KLQotMjAxMS0wNC0wNSAwOTo0NDowMSArMDIwMCAgSm9uIE5vcmRieSA8am9ub25vckBnbWFpbC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogRml4IGJ1aWxkIHdpdGggamFjayAwLjEyMC4xCi0JICA5NTQ0NjIyNjc0YzBkMGEzMTQ3YTliNTExNDUxNTliMDJlZWM2OGU5IGNoZWNrZWQKLQkgIGZvciAwLjEyMC4yIGFuZCBsYXRlciwgYnV0IHRoZSBkZXByZWNhdGlvbiB3YXMgaW50cm9kdWNlZCBpbgotCSAgMC4xMjAuMQotCi0yMDExLTA0LTA1IDExOjEzOjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmM6Ci0JICBhdmk6IG1vcmUgcG9ydGluZyB0byAwLjExCi0KLTIwMTEtMDQtMDUgMTI6MDU6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuYzoKLQkgIGRvY3M6IGZpeCBkb2N1ZW1udGF0aW9uIHdhcm5pbmdzIChhbmQgcmVpbmRlbnQpCi0KLTIwMTEtMDQtMDQgMTk6MTc6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmk6IHBvcnQgdG8gMC4xMSBBUEkKLQotMjAxMS0wNC0wNCAxNzozNDoxNyArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuaDoKLQkgIHZpZGVvbWl4ZXI6IHVwZGF0ZSBvcmMgZGlzdCBmaWxlcwotCi0yMDExLTA0LTA0IDE1OjU3OjEwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAxY2NiZTA5IHRvIGMzY2FmZTEKLQotMjAxMS0wMy0wMSAxNDowODoxMiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogQWx3YXlzIGNhbGwgcGFfc3RyZWFtX25ld193aXRoX3Byb3BsaXN0KCkKLQkgIHBhX3N0cmVhbV9uZXdfd2l0aF9wcm9wbGlzdCgpIGNhbiB0YWtlIGEgTlVMTCBwcm9wbGlzdCwgc28gd2UgZG9uJ3QgbmVlZAotCSAgdG8gY29uY2VybiBvdXJzZWx2ZXMgd2l0aCB3aGV0aGVyIGl0J3MgTlVMTCBvciBub3QuCi0KLTIwMTEtMDQtMDQgMTE6MzM6MTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwZXJmb3JtIHBvc3QtZmx1c2ggc3RhdGUgdHJpY2tzIGRvd25zdHJlYW0gdG8gdXBzdHJlYW0KLQkgIC4uLiBzbyBkb3duc3RyZWFtIGlzIHNldCB3aGVuIHVwc3RyZWFtIHJlc3VtZXMgZGF0YSBmbG93LgotCi0yMDExLTA0LTA0IDExOjI3OjI5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZGlzdHJpYnV0ZSBuZXcgYmFzZV90aW1lIHRvIG1hbmFnZXIgY2hpbGRyZW4gZm9sbG93aW5nIGZsdXNoIHNlZWsKLQkgIC4uLiBieSBmb3JjaW5nIGEgc3RhdGUgY2hhbmdlZCB0byBQTEFZSU5HLCB3aGljaCBzaG91bGQgb3RoZXJ3aXNlIGJlIGEKLQkgIG5vLW9wIGFzIGVsZW1lbnRzIHNob3VsZCBhbHJlYWR5IGJlIGluIHRoYXQgc3RhdGUuCi0JICBJbiBwYXJ0aWN1bGFyLCBqaXR0ZXJidWZmZXIgbmVlZHMgbmV3IGJhc2VfdGltZSBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIHBlcmZvcm0KLQkgIHByb3BlciB0aW1pbmcgKGUuZy4gZW9zIHRpbWVvdXQgaGFuZGxpbmcpIGFuZCBjYW4ndCB3YWl0IGZvciB0aGUgbmV3IGJhc2VfdGltZQotCSAgdGhhdCB3aWxsIGJlIGRpc3RyaWJ1dGVkIHdoZW4gdGhlIHdob2xlIHBpcGVsaW5lIHJldHVybnMgdG8gUExBWUlORy4KLQkgIFNlZSBidWcgIzY0NjM5Ny4KLQotMjAxMS0wNC0wNCAxMTozNTo1OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgUmV2ZXJ0ICJqaXR0ZXJidWZmZXI6IHJlc2V0IGVsZW1lbnQgYmFzZV90aW1lIHVwb24gZmx1c2giCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGY4NGI4YTY5Y2JhOWM1MzhmNTU0Njg2OWNiNGVmNDU0YWQ1ZWZiOWQuCi0JICBGaXhlcyBidWcgIzY0NjM5Ny4KLQotMjAxMS0wNC0wNCAxMDozMTo0NCArMDEwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdjogU3BlY2lmeSB0aGUgb25seSBwb3NzaWJsZSBzdHJlYW0tZm9ybWF0IGZvciBoMjY0IGluIHRoZSBwYWQgdGVtcGxhdGVzLgotCi0yMDExLTA0LTA0IDEwOjA3OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQ2hlY2sgZm9yIGludmFsaWQgKGVtcHR5KSBjbGFzc2lmaWNhdGlvbiBpbmZvIGVudGl0eSBzdHJpbmdzCi0JICBPdGhlcndpc2UgdGhlIGNsYXNzaWZpY2F0aW9uIHN0cmluZyBjYW4gYmUgZW1wdHkgYW5kIGdzdF90YWdfbGlzdF9hZGQoKSB3aWxsCi0JICBjb21wbGFpbiBvciBoYXZlIGEgXDAgaW4gdGhlIGZpcnN0IGZvdXIgYnl0ZXMsIHdoaWNoIGlzIHdyb25nIHRvby4KLQotMjAxMS0wNC0wNCAxMDowMToyNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFllYXIgMCBpcyBub3QgYSB2YWxpZCB5ZWFyIGZvciBHRGF0ZSBhbmQgdGhlIHByb2xlcHRpYyBncmVnb3JpYW4gY2FsZW5kYXIKLQotMjAxMS0wNC0wMSAxMzoxODo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIE1FVEFEQVRBX0JMT0NLX1BJQ1RVUkUgYmxvY2tzIGZvciBHU1RfVEFHX0lNQUdFIGFuZCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UKLQotMjAxMS0wNC0wMSAxMTozMzo1NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyWzJdOiBVc2Ugb3JjX21lbXNldCgpIGluc3RlYWQgb2YgbWVtc2V0KCkKLQotMjAxMS0wMS0xOSAxODowNjo0NSAtMDcwMCAgTGFuZSBCcm9va3MgPGRpcmp1ZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIHZpZGVvbWl4ZXI6IEFkZCB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIG9wdGlvbiBmb3IgYWxwaGEgY2hhbm5lbCBmb3JtYXRzCi0KLTIwMTEtMDEtMTkgMTI6MDc6MTcgLTA3MDAgIExhbmUgQnJvb2tzIDxkaXJqdWRAZ21haWwuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLm9yYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oOgotCSAgdmlkZW9taXhlcjI6IEFkZCB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIG9wdGlvbiBmb3IgYWxwaGEgY2hhbm5lbCBmb3JtYXRzCi0JICBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHZpZGVvbWl4ZXIyIGVsZW1lbnQgdG8gb3V0cHV0IGEgdmFsaWQgYWxwaGEKLQkgIGNoYW5uZWwgd2hlbiB0aGUgaW5wdXRzIGNvbnRhaW4gYSB2YWxpZCBhbHBoYSBjaGFubmVsLiBUaGlzIGFsbG93cwotCSAgbWl4aW5nIHRvIG9jY3VyIGluIG11bHRpcGxlIHN0YWdlcyBzZXJpYWxseS4KLQkgIFRoZSBmb2xsb3dpbmcgcGlwZWxpbmUgc2hvd3MgYW4gZXhhbXBsZSBvZiBzdWNoIGEgcGlwZWxpbmU6Ci0JICBnc3QtbGF1bmNoIHZpZGVvdGVzdHNyYyBiYWNrZ3JvdW5kLWNvbG9yPTB4MDAwMDAwIHBhdHRlcm49YmFsbCAhIHZpZGVvL3gtcmF3LXl1dixmb3JtYXQ9XChmb3VyY2NcKUFZVVYgISB2aWRlb21peGVyMiBiYWNrZ3JvdW5kPXRyYW5zcGFyZW50IG5hbWU9bWl4MSAhIHZpZGVvbWl4ZXIyIG5hbWU9bWl4MiAhIGZmbXBlZ2NvbG9yc3BhY2UgISBhdXRvdmlkZW9zaW5rICB2aWRlb3Rlc3RzcmMgISB2aWRlby94LXJhdy15dXYsZm9ybWF0PVwoZm91cmNjXClBWVVWICEgbWl4Mi4KLQkgIFRoZSBmaXJzdCB2aWRlb3Rlc3RzcmMgaW4gdGhpcyBwaXBlbGluZSBjcmVhdGVzIGEgbW92aW5nIGJhbGwgb24gYQotCSAgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4gSXQgaXMgdGhlbiBwYXNzZWQgdG8gdGhlIGZpcnN0IHZpZGVvbWl4ZXIyLgotCSAgUHJldmlvdXNseSwgdGhpcyB2aWRlb21peGVyMiB3b3VsZCBoYXZlIGZvcmNlZCB0aGUgYWxwaGEgY2hhbm5lbCB0bwotCSAgMS4wIGFuZCBnaXZlbiBhIGJhY2tncm91bmQgb2YgY2hlY2tlciwgYmxhY2ssIG9yIHdoaXRlIHRvIHRoZQotCSAgc3RyZWFtLiBXaXRoIHRoaXMgcGF0Y2gsIGhvd2V2ZXIsIHlvdSBjYW4gbm93IHNwZWNpZnkgdGhlIGJhY2tncm91bmQKLQkgIGFzIHRyYW5zcGFyZW50LCBhbmQgdGhlIGFscGhhIGNoYW5uZWwgb2YgdGhlIGlucHV0IHdpbGwgYmUKLQkgIHByZXNlcnZlZC4gVGhpcyBhbGxvd3MgZm9yIGZ1cnRoZXIgbWl4aW5nIGRvd25zdHJlYW0sIGFzIGlzIHNob3duIGluCi0JICB0aGUgYWJvdmUgcGlwZWxpbmUgd2hlcmUgdGhlIGEgc2Vjb25kIHZpZGVvbWl4ZXIyIGlzIHVzZWQgdG8gbWl4IGluIGEKLQkgIGJhY2tncm91bmQgb2YgYW4gc21wdGUgdmlkZW90ZXN0c3JjLiBTbyB0aGUgcmVzdWx0IGlzIGEgYmFsbCBob3ZlcmluZwotCSAgb3ZlciB0aGUgc21wdGUgdGVzdCBzb3VyY2UuIFRoaXMgY291bGQsIG9mIGNvdXJzZSwgaGF2ZSBiZWVuCi0JICBhY2NvbXBsaXNoZWQgd2l0aCBhIHNpbmdsZSBtaXhlciBlbGVtZW50LCBidXQgc3RhZ2VkIG1peGluZyBpcyB1c2VmdWwKLQkgIHdoZW4gaXQgaXMgbm90IGNvbnZlbmllbnQgdG8gbWl4IGFsbCB2aWRlbyBhdCBvbmNlIChlLmcuIGEgcGlwZWxpbmUKLQkgIHdoZXJlIGEgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBiaW4gZXhpc3QgYW5kIGFyZSBtaXhlZCBhdCB0aGUgZmluYWwKLQkgIG91dHB1dCwgYnV0IHRoZSBmb3JlZ3JvdW5kIGJpbiBuZWVkcyBhbiBpbnRlcm5hbCBtaXhlciB0byBjcmVhdGUKLQkgIHRyYW5zaXRpb25zIGJldHdlZW4gY2xpcHMpLgotCSAgRml4ZXMgYnVnICM2Mzk5OTQuCi0KLTIwMTEtMDMtMzEgMTM6MjU6MDAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGFsc28gdW5jb3JrIGR1cmluZyBFT1Mgd2FpdGluZyAoYW5kIGFmdGVyIEVPUyBpcyByZW5kZXJlZCkKLQkgIFB1bHNlc2luayB3YXMgcmVjZW50bHkgY2hhbmdlZCB0byBkZWZlciB1bmNvcmtpbmcgdW50aWwgdGhlcmUgaXMgZGF0YQotCSAgdG8gd3JpdGUuIFRoaXMgY29uZGl0aW9uIHdpbGwgaG93ZXZlciBuZXZlciBvY2N1ciB3aGVuIEVPUyBpbiBiZWluZwotCSAgcmVuZGVyZWQgKHNpbmNlIHRoYXQgbWFya3MgdGhlIGVuZCBvZiBkYXRhKS4gQ2hhbmdpbmcgdG8gUEFVU0VEIHN0YXRlCi0JICB3aGlsZSBFT1MgaXMgYmVpbmcgd2FpdGVkIG9uIHJlc3VsdHMgaW4gYSBoYW5nOiBwYXVzaW5nIGNvcmtzIHRoZQotCSAgc3RyZWFtLCB3aGljaCB3aWxsIG5ldmVyIGJlIHVuZG9uZSBzaW5jZSB0aGVyZSBpcyBubyBtb3JlIGRhdGEgd2hlbgotCSAgZ29pbmcgYmFjayB0byBQTEFZSU5HLiBJZiBwdWxzZXNpbmsgaXMgdGhlIGNsb2NrIHByb3ZpZGVyLCBkZWFkbG9jawotCSAgZW5zdWVzIHNpbmNlIHRpbWUgZG9lc24ndCBjb250aW51ZSBpbiBjb3JrZWQgc3RhdGUgYW5kIHRoZSBjbG9jayBpZAotCSAgZm9yIEVPUyB3YWl0IG5ldmVyIGZpcmVzLgotCSAgRml4ZXMgIzY0NTk2MS4KLQotMjAxMS0wMy0yOSAxNjozMzo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgcnRwYmluOiBEb24ndCB0cnkgdG8gcmVxdWVzdCB0aGUgc2FtZSByZXF1ZXN0IHBhZCB0d2ljZQotCi0yMDExLTAzLTI4IDIzOjQ2OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgZmxhY2RlYzogZml4IGlzc3VlcyB3aXRoIGxhcmdlIG1ldGFkYXRhIGJsb2NrcyB3aGVuIHN0cmVhbWluZyB1bmZyYW1lZCBmbGFjCi0JICBQYXJzZSBtZXRhZGF0YSBibG9ja3Mgd2hlbiBoYW5kbGluZyB1bnBhcnNlZCBmbGFjIGluIHB1c2ggbW9kZS4gVGhpcwotCSAgd29ya3MgYXJvdW5kIGEgYnVuY2ggb2YgaXNzdWVzIHdpdGggdGhlIGZsYWMgZGVjb2RlciB3aGVuIGhhbmRsaW5nCi0JICBtZXRhZGF0YSBibG9ja3MgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIG1heC4gZmxhYyBmcmFtZXNpemUsIHdoaWNoCi0JICBjb3ZlcmFydCBibG9ja3Mgb2Z0ZW4gYXJlLiBXZSBuZWVkIHRvIGhhdmUgYWxsIHRoZSBkYXRhIGZvciB0aGVzZQotCSAgYmxvY2tzIGF2YWlsYWJsZSB3aGVuIHdlIHBhc3MgZGF0YSB0byBsaWJmbGFjLgotCSAgaHR0cDovL2dzdHJlYW1lci1kZXZlbC45NjYxMjUubjQubmFiYmxlLmNvbS9GbGFjLWZpbGVzLXRoYXQtd2lsbC1wbGF5YmFjay1idXQtbm90LXN0cmVhbS10ZDMzMzgxOTguaHRtbCNhMzM5NTI3NgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU2Njc2OQotCi0yMDExLTAzLTI4IDIxOjA1OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHBsdWdpbnM6IHBvcnQgdG8gbmV3IG1lbW9yeSBBUEkKLQotMjAxMS0wMy0yOCAyMDo1MDo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMS1mZG8KLQotMjAxMS0wMy0yNyAyMTozOTo1MCArMDIwMCAgSmFuIFVyYmHFhHNraSA8d3VsY3plckB3dWxjemVyLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSAgZmx2ZGVtdXg6IERvIG5vdCBidWlsZCBhbiBpbmRleCBpZiB1cHN0cmVhbSBpcyBub3Qgc2Vla2FibGUKLQkgIEFuIGluZGV4IGlzIG5vdCB1c2VmdWwgaWYgdXBzdHJlYW0gY2Fubm90IGhhbmRsZSBzZWVrcyBhbmQgYnVpbGRpbmcgaXQKLQkgIGZvciBpbmZpbml0ZSBmaWxlcywgZm9yIGluc3RhbmNlIEZMViBzdHJlYW1zLCByZXN1bHRzIGluIGEgbWVtb3J5IGxlYWsuCi0KLTIwMTEtMDMtMjcgMDE6MTk6NTggKzAzMDAgIEFsZXhleSBDaGVybm92IDw0ZXJub3ZAZ21haWwuY29tPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmg6Ci0JICB2NGwyOiBuZXcgdjRsMnJhZGlvIGVsZW1lbnQgdG8gY29udHJvbCBhbmFsb2cgcmFkaW8gZGV2aWNlcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDExOAotCi0yMDExLTAzLTI1IDIyOjIyOjQzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDE5M2I3MTcgdG8gMWNjYmUwOQotCi0yMDExLTAzLTI1IDE0OjU2OjA2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBiNzdlMmJmIHRvIDE5M2I3MTcKLQotMjAxMS0wMy0yNSAxMjo1Mzo0MyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvY2Fpcm8vTWFrZWZpbGUuYW06Ci0JICBjYWlybzogZml4IHRoZSBuYW1lIG9mIHRoZSAqLW1hcnNoYWxsLmxpc3QgZmlsZSB0byB1bmJyZWFrIG1ha2UgZGlzdGNoZWNrCi0KLTIwMTEtMDMtMjUgMDk6MzE6MDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZDg4MTRiNiB0byBiNzdlMmJmCi0KLTIwMTEtMDMtMjUgMDk6MDY6MTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNmFhYTI4NiB0byBkODgxNGI2Ci0KLTIwMTEtMDMtMjUgMDA6MTA6NTYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIHNwZWN0cnVtOiByZWZhY3RvciBwcm9jZXNzaW5nIGxvb3AgZm9yIGJsb2NrIGJhc2VkIG9wZXJhdGlvbgotCSAgUHJldmlvdXNseSB0aGUgY2hhaW4gZnVuY3Rpb24gd2FzIHdvcmtpbmcgc2FtcGxlIGZyYW1lIGJhc2VkLiBJbiBlYWNoIGN5Y2xlIGl0Ci0JICB3YXMgY2hlY2tpbmcgaWYgaXQgaXMgdGltZSB0byBydW4gYSBmZnQgb3IgaWYgaXQgaXMgdGltZSB0byBzZW5kIGEgbWVzc2FnZS4KLQkgIE5vdyB3ZSBjaGFuZ2VkIHRoZSBkYXRhIHRyYW5zZm9ybSBmdW5jdGlvbnMgdG8gd29yayBvbiBhIGJsb2NrIG9mIGRhdGEgYW5kCi0JICBjYWxjdWxhdGUgdGhlIG1heCBsZW5ndGggdW50aWwgZWl0aGVyIHtlbmQtb2YtZGF0YSwgZG8tZmZ0LCBkby1tc2d9LiBUaGlzIGFsbG93cwotCSAgdXMgYWxzbyB0byBhdm9pZCB0aGUgZHVwbGljYXRlZCBjb2RlIGZvciB0aGUgc2luZ2xlIGFuZCBtdWx0aS1jaGFubmVsIGNhc2UgKGFzCi0JICB0aGUgdHJhbnNmb3JtZXJzIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlIG5vdykuCi0KLTIwMTEtMDMtMjQgMjM6NDc6MzMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgamFjazogdW5icmVhayB0aGUgYnVpbGQgZm9yIGphY2syIHVzZXJzCi0JICBKYWNrMiAodmVyc2lvbnMgMS5YLlgpIGRvZXMgb25seSBoYXZlIHRoYXQgQVBJIGluIHN2bi4gTGltbWl0IHRoZSB1c2Ugb2YgdGhlIG5ldwotCSAgQVBJIGZvciBqYWNrMSB2ZXJzaW9ucy4KLQotMjAxMS0wMy0yNCAxODo0OToxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNmFlYzZiOSB0byA2YWFhMjg2Ci0KLTIwMTEtMDMtMjQgMTQ6MTQ6MDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogZml4IHRoZSBlcnJvciBhY2N1bXVsYXRpb24gYW5kIGZyYW1lc190b2RvIGhhbmRsaW5nCi0JICBFdmVuIHRob3VnaCB3ZSB3cmFwIGFyb3VuZCB0aGUgYWNjdW11bGF0ZWQgc2Vjb25kLCB3ZSBzdGlsbCBuZWVkIHRvIGFkZCB0aGUKLQkgIGVycm9yIGluIHRoZSBzYW1lIGN5Y2xlLiBJbmNyZWFzZSB0aGUgdG9kbyBpbiB0aGUgc2FtZSBjb25kaXRpb25hbCBhcyBhZnRlcndhcmRzCi0JICB0aGUgYWNjdW11bGF0ZWQgZXJyb3Igd2lsbCBiZSBiZWxvdyBvbmUgc2Vjb25kLgotCi0yMDExLTAzLTI0IDEzOjUzOjEyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IGZpeCBicm9rZW4gY29kZSByZXN1bHRpbmcgZm9yIGEgd3Jvbmcgc3BsaXR1cCBvZiBjaGFuZ2VzCi0KLTIwMTEtMDMtMjIgMTY6Mjk6NTMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIHNwZWN0cnVtOiBzaW1wbGlmeSB0aGUgaGF2ZV9pbnRlcnZhbCBjYWxjdWxhdGlvbgotCSAgTW92ZSBzb21lIG9mIHRoZSBjb25kaXRpb25zIHRvIHRoZSBwbGFjZXMgd2hlcmUgdGhlIGRlcGVuZGVudCB2YXJpYWJsZXMgY2hhbmdlLgotCi0yMDExLTAzLTIyIDE2OjI2OjQ1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IHVzZSBsb2NhbCB2YXIgZm9yIGlucHV0X2RhdGEgZnVuY3Rpb24KLQkgIEF2b2lkIGRlcmVmZXJlbmNpbmcgdGhlIGlucHV0X2RhdGEgZnJvbSB0aGUgaW5zdGFuY2UgZnJvbSB3aXRoaW4gYW4gaW5uZXIgbG9vcC4KLQotMjAxMS0wMy0yMyAxNjozNDoxNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JICBzcGVleGRlYzogR2V0IGFuZCB1c2Ugc3RyZWFtaGVhZGVyIGZyb20gdGhlIGNhcHMgaWYgcG9zc2libGUKLQkgIFRoaXMgYWxsb3dzIHBsYXliYWNrIG9mIHN0cmVhbXMgd2hlcmUgdGhlIHN0cmVhbWhlYWRlciBidWZmZXJzCi0JICB3ZXJlIGRyb3BwZWQgZnJvbSB0aGUgc3RyZWFtIGZvciBzb21lIHJlYXNvbi4KLQotMjAxMS0wMy0yMiAxOTozNjozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IHVzZSBydW5uaW5nIHRpbWUgZm9yIHN5bmNocm9uaXphdGlvbgotCSAgRml4ZXMgIzQzMjYxMi4KLQotMjAxMS0wMy0yMiAxOTozNjoyMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiB1c2UgcnVubmluZyB0aW1lIGZvciBzeW5jaHJvbml6YXRpb24KLQkgIEZpeGVzICM0MzI2MTIuCi0KLTIwMTEtMDMtMjIgMTk6MzU6NTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiB1c2UgcnVubmluZyB0aW1lIGZvciBzeW5jaHJvbml6YXRpb24KLQkgIFNlZSBidWcgIzQzMjYxMi4KLQotMjAxMS0wMy0yMiAxMjo1MzoyMiArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlLmFjOiByZWR1bmRhbnQgdXNlcyBvZiBBQ19NU0dfUkVTVUxUKCkKLQkgIGNsZWFuZWQgdGhlIHJlZHVuZGFudCB1c2VzIG9mIEFDX01TR19SRVNVTFQoKSBpbiBjb25maWd1cmUuYWMKLQotMjAxMS0wMy0xOCAxOTozNDo1NyArMDEwMCAgTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9nZW46IHdpbmdvIHNpZ25lZCBjb21tZW50Ci0KLTIwMTEtMDMtMTYgMTA6NDM6NDcgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSAgamFja2F1ZGlvc2luazogRml4IHR5cG8gZnJvbSA5NTQ0NjIyNjc0YzBkMGEzMTQ3YTliNTExNDUxNTliMDJlZWM2OGU5Ci0KLTIwMTEtMDMtMTYgMDk6Mzg6NDMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBNYXJrIHRhZyBtYXBwaW5nIHRhYmxlcyBhcyBzdGF0aWMgY29uc3QKLQotMjAxMS0wMy0xNiAwOTozNzo1OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBVc2UgQVJUSVNUIGluc3RlYWQgb2YgQVVUSE9SIGZvciBHU1RfVEFHX0FSVElTVAotCi0yMDExLTAzLTE2IDA5OjM1OjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBVc2UgQVJUSVNUIE1hdHJvc2thIHRhZyBpbnN0ZWFkIG9mIEFVVEhPUiBmb3IgR1NUX1RBR19BUlRJU1QKLQkgIEFVVEhPUiBvbmx5IGV4aXN0ZWQgaW4gYW4gb2xkIHZlcnNpb24gb2YgdGhlIHNwZWMgYW5kIEFSVElTVCBpcwotCSAgdGhlIG5ldyByZXBsYWNlbWVudCBmb3IgdGhpcy4gV2UgYXJlIHN0aWxsIHJlYWRpbmcgYm90aCB0byBzdGlsbAotCSAgYmUgY29tcGF0aWJsZSB3aXRoIG9sZCBmaWxlcy4KLQkgIEZpeGVzIGJ1ZyAjNjQ0ODc1LgotCi0yMDExLTAzLTE1IDIwOjE5OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYzoKLQkgIHRlc3RzOiBlbmFibGUgbW9yZSBmb3JtYXRzIGluIHZpZGVvZmlsdGVyIHVuaXQgdGVzdCwgY2hlY2sgbW9yZSByZXNvbHV0aW9ucwotCi0yMDExLTAzLTE0IDE5OjE0OjA3IC0wNDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB2aWRlb2ZsaXA6IEZpeCBidWZmZXIgb3ZlcmZsb3cgYnVnIGZvciBvZGQgcmVzb2x1dGlvbnMgYW5kIFk0MjIgY29sb3JzcGFjZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQ3NzMKLQotMjAxMS0wMy0xNSAxOTozNjowMSArMDIwMCAgVmluY2VudCBQZW5xdWVyYydoIDx2aW5jZW50LnBlbnF1ZXJjaEBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSAgc3BlZXhkZWM6IHNpbGVuY2Ugd2FybmluZyBtZXNzYWdlIHdoZW4gYXBwcm9wcmlhdGUKLQkgIElmIHdlIGRpZCBub3Qga25vdyBob3cgbWFueSBmcmFtZXMgdG8gZXhwZWN0LCB0aGVuIHdlIGdldCBhbiB1bmV4cGVjdGVkCi0JICBlbmQgb2Ygc3RyZWFtIHdoZW4gdHJ5aW5nIHRvIGRlY29kZSBtb3JlIGZyYW1lcyB0aGF0IGFyZSB0aGVyZSwgaWYgdGhlcmUKLQkgIGFyZSBsZWZ0b3ZlciBiaXRzIHRvIHBhZCB0byB0aGUgbmV4dCBieXRlCi0KLTIwMTEtMDMtMTQgMTk6MTQ6MDcgLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHZpZGVvZmxpcDogQWRkIHN1cHBvcnQgZm9yIFlVWTIsIFVWWVYgYW5kIFlWWVUgY29sb3JzcGFjZXMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQ3NzMKLQotMjAxMS0wMy0xNSAwOTo0MzozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JICB0ZXN0czogaW4gdmlkZW9maWx0ZXIgdW5pdCB0ZXN0IGFsc28gY2hlY2sgd2l0aCAnb2RkJyB3aWR0aHMgYW5kIGhlaWdodHMKLQkgIEFuZCBvbmx5IHVzZSBvbmUgdGVzdCBzdWl0ZS4KLQotMjAxMS0wMy0xNCAxOToyODowNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSAgc3BlZXhkZWM6IEFsd2F5cyBwcm9jZXNzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHBlciBwYWNrZXQgYXMgc3BlY2lmaWVkIGluIHRoZSBoZWFkZXIKLQkgIExvb2tpbmcgYXQgdGhlIHJlbWFpbmluZyBiaXRzIGluIHRoZSBiaXRzdHJlYW0gYWZ0ZXIgZGVjb2RpbmcgYQotCSAgc2luZ2xlIGZyYW1lIGNhbid0IGJlIHVzZWQgYXMgbG9vcCBjb25kaXRpb24uIFRoZSByZW1haW5pbmcKLQkgIGJpdHMgbWlnaHQgbm90IGdpdmUgYSBjb21wbGV0ZSBmcmFtZSBhbmQgdGhlIHNwZWV4IGRlY29kZXIgd2lsbAotCSAgdGhlbiBvdXRwdXQgbm90aGluZyBidXQgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBsZWFkcwotCSAgdG8gdmFsZ3JpbmQgd2FybmluZ3MuCi0JICBGaXhlcyBidWcgIzY0NDY2OS4KLQotMjAxMS0wMy0xNCAxNTo0Njo1MCArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogcmV0dXJuIFRSVUUgZnJvbSBzaW5rIHBhZCBldmVudCBmdW5jdGlvbiBmb3IgdGFnIGV2ZW50cywgd2hpY2ggYXJlIGhhbmRsZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQ3MzAKLQotMjAxMS0wMy0xMiAwMDo0NDozMSArMDUzMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBCZXR0ZXIgZml4IGZvciBkZWFkbG9jayBvbiBmYWlsZWQgY29ubmVjdAotCSAgVGhpcyByZXZlcnRzIHRoZSBwcmV2aW91cyBmaXggdGhhdCB3b3VsZCBjYXVzZSBhIGRvdWJsZS11bmxvY2sgd2hlbiB0aGUKLQkgIHN0cmVhbSBjb25uZWN0IGZhaWxlZC4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDQ1MTAKLQotMjAxMS0wMy0xMSAyMzowNjozMSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogRml4IGRlYWRsb2NrIGlmIGNvbm5lY3RpbmcgdG8gUEEgZmFpbHMKLQkgIENvbW1pdCBkZDRlYzIyZSBpbnRyb2R1Y2VkIGEgZGVhZGxvY2sgaW4gdGhlIGZhaWx1cmUgcGF0aCB3aGlsZSB0cnlpbmcKLQkgIHRvIGNvbm5lY3QgdG8gUHVsc2VBdWRpby4gVGhpcyBtYWtlcyBzdXJlIHdlIGRyb3AgdGhlIGxvY2sgb24gdGhlCi0JICByZXNvdXJjZSBtdXRleCB0byBhdm9pZCB0aGlzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDUxMAotCi0yMDExLTAzLTExIDE2OjU5OjEwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IG9yZGVyIHN0YXRlLXRlc3QgYmxhY2tsaXN0IGFuZCBhZGQgamFjayBlbGVtZW50cwotCSAgSmFjayBhdWRpbyBzcmMvc2luayBlbGVtZW50cyByZWNlbnRseSBnb3QgbW92ZWQgZnJvbSBiYWQgYW5kIHNob3VsZCBiZSBleGNsdWRlZAotCSAgZnJvbSB0aGUgdGVzdCAobGlrZSB0aGUgb3RoZXIgZGV2aWNlIHNwZWNpZmljIHNvdXJjZSBhbmQgc2lua3MpLgotCSAgRml4ZXMgIzY0NDI4OAotCi0yMDExLTAzLTExIDEzOjQ3OjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IENoYWluIHVwIHRvIHRoZSBwYXJlbnQgY2xhc3MnIDo6c2VuZF9ldmVudCBmb3Igbm9uLXNlZWsgZXZlbnRzCi0KLTIwMTEtMDMtMTEgMTM6NDY6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZHZkZW11eDogRml4IHJlZmNvdW50IGlzc3VlcyB3aXRoIHRoZSBzZWVrIGV2ZW50Ci0JICBGaXhlcyBidWcgIzY0Mjk2My4KLQotMjAxMS0wMy0xMSAwOTo1NDowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIGRvY3M6IGZpeCBwdWxzZXNpbmsgZ3RrLWRvYyBtYXJrdXAKLQotMjAxMS0wMy0xMSAxMDoyOTowOCArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBqYWNrOiBmaXggYnVpbGQgYWdhaW5zdCBqYWNrIDAuMTIwLjIKLQkgIGphY2tfcG9ydF9nZXRfdG90YWxfbGF0ZW5jeSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YKLQkgIGphY2tfcG9ydF9nZXRfbGF0ZW5jeV9yYW5nZSgpLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDQ3NwotCi0yMDExLTAzLTEwIDE0OjI5OjI1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IG1vcmUgY29tbWVudHMgYW5kIHR1bmUgYW5kIGxvZ2dpbmcKLQotMjAxMS0wMy0xMCAxNDoxNTo0MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBhdm9pZCB1bm5lY2Nlc2FyeSBleHRyYSBmZnQgcnVucwotCSAgQmVmb3JlIGl0IHdhcyBwb3NzaWJsZSB0aGF0IHdlIHJ1biBhbiBleHRyYSBmZnQgd2hlbiB0aGUgdGltZSBmb3Igc2VuZGluZyBhIG5ldwotCSAgbWVzc2FnZSBpcyBkdWUuIE9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIG5vdCBydW4gdGhlIGZmdCBmb3IgdGhlIGludGVydmFsIGF0IGFsbC4KLQotMjAxMS0wMy0xMCAxNDoxMjowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBvbmx5IHNjYWxlIHRoZSB2ZWN0b3JzIHRoYXQgd2UgYXJlIHByb2Nlc3NpbmcKLQkgIFBoYXNlIGlzIG5vdCBwcm9kdWNlZCBieSBkZWZhdWx0LCBzbyBsZXRzIG5vdCBzY2FsZSBpdCB1bmNvbmRpdGlvbmFsbHkgdG8gc2F2ZSBhCi0JICBmZXcgY3ljbGVzLgotCi0yMDExLTAzLTEwIDE0OjEwOjI1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmg6Ci0JICBzcGVjdHJ1bTogcHV0IG51bWJlciBvZiBjaGFubmVscyB0byBpbnN0YW5jZSB2YXJpYWJsZQotCSAgV2hlbiBmcmVlaW5nIGRhdGEgdGhlIGZvcm1hdCBtaWdodCBoYXZlIGNoYW5nZWQuIFRodXMgd2UgbmVlZCB0byByZW1lbWJlciBmb3IKLQkgIHdoaWNoIGZvcm1hdCB3ZSBhbGxvY2F0ZWQgbWVtb3J5LgotCi0yMDExLTAzLTEwIDEwOjI3OjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IHVwZGF0ZSBkb2MgcmV2aWV3IHN0YW1wCi0KLTIwMTEtMDMtMTAgMTA6MjI6MjkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIHNwZWN0cnVtOiB1c2UgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGRhdGEgcmVhZGVycwotCSAgRG9uJ3QgY2hlY2sgdGhlIGZvcm1hdCBmb3IgZWFjaCBzYW1wbGUgZnJhbWUgdG8gcmVhZC4gV2UgY2FuIG1ha2UgdGhhdCBkZWNpc3Npb24KLQkgIGluIF9zZXR1cCBhbHJlYWR5LiBUaGlzIGlzIHN0aWxsIG5vdCBpZGVhbCBhcyB3ZSBjYWxsIHRoZSBmdW5jdGlvbiBwZXIgZnJhbWUuCi0JICBJZGVhbGx5IHdlIGRldGVybWluZSBob3cgbWFueSBzYW1wbGVzIHdlIGNhbiBjb3B5IGFuZCBoYXZlIGEgbG9vcCBpbiB0aGUgaW5wdXQKLQkgIHJlYWRlci4gQXMgYW4gYWx0ZXJuYXRpdmUgd2UgbWlnaHQgYWxzbyBjb25zaWRlciB0byB1c2UgdGhlIGZmdCB2YXJpYW50cyBmb3IgdGhlCi0JICB2YXJpb3VzIGZvcm1hdHMgYW5kIG5vdCBjb252ZXJ0IHRvIGZsb2F0IGZvciBhbGwgY2FzZXMgLSB3ZSB3b3VsZCBzdGlsbCBuZWVkIHRvCi0JICBtaXggb3IgZGVpbnRlcmxlYXZlIHRob3VnaC4KLQotMjAxMS0wMy0wOSAxNzowNzo0NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IGltcHJvdmUgcmVjb3ZlcnkgZnJvbSBmYWlsZWQgc2VlawotCSAgSW4gY2FzZSBzZXJ2ZXItc2lkZSBmYWlscyB0byBwZXJmb3JtIHNlZWssIGkuZS4gUExBWSBhdCBub24temVybyByZXF1ZXN0ZWQKLQkgIHBvc2l0aW9uLCByZWNvdmVyeSBzbyBmYXIgd291bGQgYXJyYW5nZSBmb3Igc3RyZWFtaW5nIHRvIGNvbnRpbnVlLCBhbGJlaXQKLQkgIGhhdmluZyBsb3N0IHBvc2l0aW9uIHRyYWNraW5nIGluIHRoZSBwcm9jZXNzLiAgU28sIHF1ZXJ5IHBvc2l0aW9uIHByaW9yCi0JICB0byBzZWVrIGFuZCB1c2UgdXBvbiBmYWlsZWQgc2Vlay4KLQotMjAxMS0wMy0wOSAxNjo1MTowMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBoYW5kbGUgcG9zaXRpb24gcXVlcnkKLQotMjAxMS0wMy0wOSAxNjo1NzoyOCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5oOgotCSAgc3BlY3RydW06ICBtdWx0aS1jaGFubmVsIHN1cHBvcnQKLQkgIEFkZCBhIGJvb2xlYW4gbXVsdGktY2hhbm5lbCBwcm9wZXJ0eSB3aXRoIGEgZGVmYXVsdCBvZiBGQUxTRS4gV2hlbiBzZXQgdG8gVFJVRQotCSAgdGhlIGVsZW1lbnQgd29uJ3QgbWl4IGFsbCBpbnB1dCBjaGFubmVscyB0byBtb25vLCBidXQgaW5zdGVhZCBydW4gYSBGRlQgb24gZWFjaAotCSAgY2hhbm5lbC4gSW4gdGhhdCBjYXNlIHRoZSByZXN1bHQgbWVzc2FnZSB3b3VsZCBjb250YWluIGEgMiBkaW1lbnNpb25hbCBhcnJheQotCSAgb2YgY2hhbm5lbCB4IGRhdGEgZm9yIG1hZ25pdHVkZSBhbmQgcGhhc2UuCi0JICBBUEk6IEdzdFNwZWN0cnVtOm11bHRpLWNoYW5uZWwKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTM0ODIKLQotMjAxMS0wMy0wOSAxNjo1NTo1NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBtb3JlIHhyZWZzIGluIHRoZSBkb2NzCi0KLTIwMTEtMDMtMDkgMTI6NDE6MTUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogZmFjdG9yIG91dCB0aGUgY29kZSB0aGF0IGFjY3VtdWxhdGVkIHNhbXBsZXMgaW50byB0aGUgcmluZy1idWZmZXIKLQkgIFVzZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIHJlYWQgYSBzYW1wbGUgZnJhbWUgaW50byBhIHJpbmdidWZmZXIgc2xvdC4gSW4gdGhlCi0JICBmdXR1cmUgd2UgY2FuIHVzZSBmb3JtYXQtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlciB0byBhdm9pZCB0aGUgcmVvY2N1cmluZwotCSAgZm9ybWF0IGNoZWNrcy4KLQotMjAxMS0wMy0wOSAxMjozODo1MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBwdWxsIGZvcm1hdCB0byB0ZW1wIHZhciB0byBpbXByb3ZlIHJlYWRhYmlsaXR5IG9mIGxpbmVzIHVzaW5nIGl0Ci0KLTIwMTEtMDMtMDkgMTI6MjA6MTEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogY29kZSBjbGVhbnVwIGZvciBjb3B5aW5nIGRhdGEgdG8gcmluZy1idWZmZXIKLQkgIFJlbmFtZSBmcCB0byBpc19mbG9hdCBhbmQgcmVzdHJ1Y3R1cmUgaWYtZWxzZSBwYXJ0IGZvciBoYW5kbGluZyB0aGUgZGlmZmVyZW50IGZvcm1hdHMuCi0KLTIwMTEtMDMtMDkgMTE6NDA6NDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIHNwZWN0cnVtOiBhZGQgYSBHc3RTcGVjcnR1bUNoYW5uZWwgY29udGV4dCBzdHJ1Y3R1cmUKLQkgIFdlIG5vdyBrZWVwIHRoZSBmZnQgZGF0YSB0aGF0IGlzIHJlbGF0ZWQgdG8gb25lIGNoYW5uZWwgaW4gYSBzZXBhcmF0ZSBzdHJ1Y3R1cmUKLQkgIHRvIHByZXBhcmUgZm9yIG11bHRpY2hhbm5lbCBzdXBwb3J0LiBXZSBhbHNvIHJlZmFjdG9yIHRoZSBjb2RlIHRvIG9wZXJhdGUgbW9yZQotCSAgb2Z0ZW4gb24gdGhlIGNoYW5uZWwgY29udGV4dC4KLQotMjAxMS0wMy0wOSAxMToxODoxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBjYWxsIHRoZSBpbnN0YW5jZSB2YXIgc3BlY3RydW0gaW5zdGVhZCBvZiBmaWx0ZXIKLQotMjAxMS0wMy0wOSAxMToxNDozNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBkb24ndCB2YWx1ZSB3ZSBhbHJlYWR5IHRvb2sgZnJvbSB0aGUgZ3ZhbHVlCi0KLTIwMTEtMDMtMDggMTc6MjY6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIGNvbmZpZ3VyZS5hYwotCi0yMDExLTAzLTA4IDE3OjAyOjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9lZmVuY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkgIG1ldGE6IHVwZGF0ZSBmb3IgbmV3IEFQSQotCi0yMDExLTAzLTA4IDE2OjI4OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYWQtaG9jIHJlbGVhc2UgYnJhbmNoICcwLjEwLjI4JwotCi09PT0gcmVsZWFzZSAwLjEwLjI4ID09PQotCi0yMDExLTAzLTA4IDE1OjQ3OjUyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4yOAotCSAgQWQtaG9jIHJlbGVhc2UgdG8gZml4IGJ1aWxkIGlzc3VlIHdpdGggbmV3ZXIga2VybmVscy4KLQotMjAxMS0wMy0wMyAwMDoxNjo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkgIHY0bDI6IHJlbW92ZSB1bm5lY2Vzc2FyeSBsaW51eC92aWRlb2Rldi5oIGluY2x1ZGUKLQkgIENhdXNlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2l0aCBuZXdlciBrZXJuZWwgaGVhZGVycyB3aGVyZSB0aGUgb2xkCi0JICB2NGwgaW50ZXJmYWNlIGhhcyBiZWVuIHJlbW92ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQzNzE2Ci0KLTIwMTEtMDMtMDggMTA6MTQ6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBpbnRvIDAuMTEKLQkgIENvbmZsaWN0czoKLQkgIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtCi0KLTIwMTEtMDMtMDcgMTY6NTY6NDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYWxzbyBlc3RpbWF0ZSBlb3MgaWYgdmVyeSBuZWFyIGVvcwotCi0yMDExLTAzLTA3IDE2OjU2OjE4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGF2b2lkIHRyeWluZyB0byBidWZmZXIgbW9yZSB0aGFuIGlzIGF2YWlsYWJsZS4KLQkgIFRoYXQgaXMsIGluIGNhc2Ugb2Ygc2hvcnQgKG9yIG5lYXIgZW9zIG9mKSBzdHJlYW0sIGRlYWRsb2NrICh1bnRpbCB0aW1lb3V0KQotCSAgd291bGQgb2NjdXIgdHJ5aW5nIHRvIGJ1ZmZlciBtb3JlIHRoYW4gaXMgeWV0IGZvcnRoY29taW5nLgotCi0yMDExLTAzLTA3IDExOjAxOjA2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlc2V0IGVsZW1lbnQgYmFzZV90aW1lIHVwb24gZmx1c2gKLQkgIC4uLiB0byBhcnJhbmdlIGZvciBwcm9wZXJseSBzY2hlZHVsZWQgdGltZW91dCAoZm9sbG93aW5nIHNlZWspLgotCi0yMDExLTAzLTA3IDEwOjU0OjIyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvY2Fpcm8vY2Fpcm9fb3ZlcmxheS5jOgotCSAgY2Fpcm9vdmVybGF5OiBBZGQgYSBidXMgaGFuZGxlciB0byB0aGUgZXhhbXBsZSB0byBoYW5kbGUgRU9TL0VSUk9SL1dBUk5JTkcKLQkgIEFsc28gY2xlYW4gdXAgdGhlIHBpcGVsaW5lIHByb3Blcmx5LgotCi0yMDExLTAzLTA3IDEwOjQ3OjIzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JICBleGFtcGxlczogQWx3YXlzIGRpc3QgdGhlIGNhaXJvIGV4YW1wbGUKLQotMjAxMS0wMy0wNyAxMDo0NjoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtOgotCSAgY2Fpcm9vdmVybGF5OiBVc2UgTERBREQgaW5zdGVhZCBvZiBMREZMQUdTIGZvciBsaWJzIGFuZCBhZGQgJChHU1RfTElCUykKLQotMjAxMS0wMy0wNSAyMzoyMjo1OCArMDAwMCAgSm9uIE5vcmRieSA8am9ub25vckBnbWFpbC5jb20+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9jYWlyby9jYWlyb19vdmVybGF5LmM6Ci0JICBjYWlyb292ZXJsYXk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBndGsvZ3RrLXgxMSB1c2UgaW4gZXhhbXBsZS4KLQkgIFRoaXMgcmVtb3ZlcyBjb2RlLCBhbmQgYWxsb3dzIHRoZSBleGFtcGxlIHRvIGJlIHVzZWQgb24gYW55IHBsYXRmb3JtLgotCSAgRml4ZXMgYnVnICM2NDM5ODEuCi0KLTIwMTEtMDMtMDQgMTg6Mzc6MzggLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBVc2UgI2lmZGVmcyBmb3IgVjRMMl9QSVhfRk1UX1BKUEcKLQkgIEl0J3Mgb25seSByZWNlbnRseSBhZGRlZCB0byBrZXJuZWwgaGVhZGVycy4KLQotMjAxMS0wMi0yMyAxNjo1MDo0MyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JICB3YXZwYXJzZTogdHVuZSBvdXRwdXQgbWF4IGJ1ZmZlciBzaXplIHRvIG1hdGVyaWFsCi0JICAuLi4gdG8gYXZvaWQgZW5kaW5nIHVwIHdpdGggdG9ucyBvZiBzaG9ydCB0aW1lIGJ1ZmZlcnMgZm9yIGUuZy4gaGlnaCBzYW1wbGUKLQkgIHJhdGUgYXVkaW8uCi0KLTIwMTEtMDMtMDQgMTc6MDQ6MzcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtOgotCSAgZXhhbXBsZXM6IGRvbid0IHVzZSBoYXJkY29kZWMgMC4xMAotCi0yMDExLTAzLTA0IDE2OjMwOjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTEtMDMtMDQgMTU6NTA6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBhZGQgYSBkb2MgZXhhbXBsZSBmb3Igc2V0dGluZyBzdHJlYW0tcHJvcGVydGllcwotCi0yMDExLTAzLTA0IDE1OjQyOjE5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZml4IHRoZSB4bWwgaW4gdGhlIGRvY3MKLQotMjAxMS0wMy0wMyAwMDoxNjo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkgIHY0bDI6IHJlbW92ZSB1bm5lY2Vzc2FyeSBsaW51eC92aWRlb2Rldi5oIGluY2x1ZGUKLQkgIENhdXNlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2l0aCBuZXdlciBrZXJuZWwgaGVhZGVycyB3aGVyZSB0aGUgb2xkCi0JICB2NGwgaW50ZXJmYWNlIGhhcyBiZWVuIHJlbW92ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQzNzE2Ci0KLTIwMTEtMDMtMDIgMjM6MjE6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvY2Fpcm8vY2Fpcm9fb3ZlcmxheS5jOgotCSAgY2Fpcm9vdmVybGF5OiBUaGUgZXhhbXBsZSBhbHdheXMgcmVxdWlyZXMgZ3RrLXgxMQotCSAgQ2hlY2sgZm9yIGd0ay14MTEgYW5kIG9ubHkgYnVpbGQgdGhlIGV4YW1wbGUgaWYgaXQncyBhdmFpbGFibGUuCi0KLTIwMTEtMDMtMDIgMjM6MTQ6MzYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5Lmg6Ci0JICBjYWlyb292ZXJsYXk6IFNvbWUgbWlub3IgY2xlYW51cAotCi0yMDExLTAzLTAyIDIzOjA5OjIxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSAgZG9jczogVXBkYXRlIGluc3BlY3RlZCBwbHVnaW4gZGF0YQotCi0yMDExLTAxLTI4IDAyOjE0OjA0ICswMjAwICBKb24gTm9yZGJ5IDxqb25vbm9yQGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGV4dC9jYWlyby8uZ2l0aWdub3JlOgotCSogZXh0L2NhaXJvL01ha2VmaWxlLmFtOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvLW1hcnNoYWwubGlzdDoKLQkqIGV4dC9jYWlyby9nc3RjYWlyby5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvb3ZlcmxheS5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvb3ZlcmxheS5oOgotCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9jYWlyby8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9jYWlyby9jYWlyb19vdmVybGF5LmM6Ci0JICBjYWlyb292ZXJsYXk6IEFkZCBnZW5lcmljIENhaXJvIG92ZXJsYXkgdmlkZW8gZWxlbWVudC4KLQkgIEFsbG93cyBhcHBsaWNhdGlvbnMgdG8gY29ubmVjdCB0byB0aGUgImRyYXciIHNpZ25hbCBvZgotCSAgdGhlIGVsZW1lbnQgYW5kIGRvIHRoZWlyIGN1c3RvbSBkcmF3aW5nIHRoZXJlLgotCSAgSW5jbHVkZXMgYW4gZXhhbXBsZSBhcHBsaWNhdGlvbiBkZW1vbnN0cmF0aW5nIHVzYWdlLgotCSAgRml4ZXM6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTU1MjAKLQotMjAxMS0wMy0wMiAxMzowMDozMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbW9ub3Njb3BlL21vbm9zY29wZS5jOgotCSAgbW9ub3Njb3BlOiBkb24ndCBsZWFrIHRoZSBtb25vc2NvcGVfc3RhdGUgZGF0YQotCSAgVGhlIG1vbm9zY29wZV9jbG9zZSgpIGltcGxlbWVudGF0aW9uIHdhcyBlbXB0eS4KLQotMjAxMS0wMy0wMiAxMjo1OTozNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbW9ub3Njb3BlL21vbm9zY29wZS5jOgotCSAgbW9ub3Njb3BlOiB3ZSBoYXZlIDY0IGNvbG9ycywgZG9uJ3QgYWNjZXNzIGNvbG9yc1s2NF0KLQkgIEZpeGVzIHJlbWFpbmluZyBpbnZhbGlkIHJlYWQuCi0KLTIwMTEtMDMtMDIgMTA6MjU6MjkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhcnJhbmdlIGZvciBub24tZmF0YWwgZXJyb3Igd2hlbiBwYXJzaW5nIG5vbi12aXRhbCBwYXJ0cwotCi0yMDExLTAzLTAyIDEwOjU2OjMzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9tb25vc2NvcGUvY29udm9sdmUuYzoKLQkgIG1vbm9zY29wZTogc3RhY2sgbmVlZHMgdG8gYmUgc2l6ZSsxIGFzIHdlIHB1dCBhIGVuZC1tYXJrZXIgaW50byBpdAotCSAgVmFsZ3JpbmQgaXMgc3RpbGwgY29tcGxhaW5pbmcgYWJvdXQgb25lIGJhZCByZWFkLCBidXQgdGhpcyB0YWtlcyBjYXJlIG9mIHRoZQotCSAgY3Jhc2ggbWVudGlvbmVkIGluIHRoZSBjb21tZW50IGFuZCBpbiBidWcgIzU2NDEyMi4KLQotMjAxMS0wMy0wMSAyMjo0MDoxOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXY0bDItSDI2M3AtYWxzYXNyYy1BTVIuc2g6Ci0JICBleGFtcGxlOiBmaXggdGhlIHZhcmlhYmxlIG5hbWUgZm9yIHRoZSBpcC1hZGRyZXNzCi0JICBGaXggdGhlIG5hbWUgaW4gdGhlIGxhdW5jaCBwaXBlbGluZSBhbmQgdXNlIGEgdmFsdWUgb2YgImxvY2FsaG9zdCIgYnkgZGVmYXVsdC4KLQotMjAxMS0wMi0yOCAxOToxNjowMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogY3lnd2luL21pbmd3OyBlbmFibGUgcGx1Z2luIGxpbmtpbmcgdG8gc3RhdGljIGxpYgotCSAgVXNlZnVsIGZvciBEaXJlY3RYIHBsdWdpbihzKS4KLQkgIEZpeGVzICM2NDI1MDcuCi0KLTIwMTEtMDItMjggMTk6MTM6NDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmUuYWM6IGV4cG9ydCBwbHVnaW4gZGVzY3JpcHRpb24gbW9yZSBwbGF0Zm9ybSBpbmRlcGVuZGVudAotCSAgRml4ZXMgIzY0MjUwNC4KLQotMjAxMS0wMi0yOCAxODozMjo1NCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAxZGU3ZjZhIHRvIDZhZWM2YjkKLQotMjAxMS0wMi0yOCAxMzoyOTo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIGludG8gMC4xMQotCi0yMDExLTAyLTI4IDEzOjI4OjI5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiB1c2UgTmV0QWRkcmVzcyBtZXRhZGF0YQotCi0yMDExLTAyLTI4IDEzOjE0OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwOiBpbXBsZW1lbnQgTmV0QWRkcmVzcyB3aXRoIG1ldGFkYXRhCi0KLTIwMTEtMDItMjggMTA6MTY6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiByZWdpc3RlciBtZXRhZGF0YQotCi0yMDExLTAyLTI3IDE5OjQzOjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9lZmVuY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmg6Ci0JICBtZXRhOiBmaXggZm9yIG5ldyBBUEkKLQotMjAxMS0wMi0yNSAxNjoyOTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlYnVndXRpbHMvZWZlbmNlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5oOgotCSAgbWV0YWRhdGE6IHVzZSBtZXRhZGF0YSBmb3IgcHJpdmF0ZSBidWZmZXIgZGF0YQotCSAgVXNlIGJ1ZmZlciBtZXRhZGF0YSB0byBzdG9yZSBlbGVtZW50IHByaXZhdGUgZGF0YS4KLQotMjAxMS0wMi0yNCAxMzo1MTozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaDoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmg6Ci0JICBtaW5pb2JqZWN0OiBwb3J0IHRvIDAuMTEKLQkgIFVzZSBidWZmZXIgcHJpdmF0ZSBkYXRhIGluc3RlYWQgb2Ygc3ViY2xhc3NpbmcuCi0KLTIwMTEtMDItMjQgMTM6NTA6NDggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IGRvbid0IGhhcmRjb2RlIHZlcnNpb24gbnVtYmVyCi0KLTIwMTEtMDItMjQgMTM6MDM6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICBpZDM6IHVzZSBib3hlZCB0eXBlIGluc3RlYWQgb2YgbWluaW9iamVjdAotCi0yMDExLTAyLTI0IDEzOjAwOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9lZmVuY2UuYzoKLQkqIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcC5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIG1pbmlvYmplY3Q6IHVzZSBidWZmZXIgcHJpdmF0ZSBmaWVsZCBmb3IgZXh0cmEgZGF0YQotCSAgVXNlIHRoZSBvd25lciBwcml2YXRlIGZpZWxkIHRvIHN0b3JlIGV4dHJhIGJ1ZmZlciBkYXRhIGluc3RlYWQgb2YgdXNpbmcKLQkgIHN1YmNsYXNzaW5nLgotCi0yMDExLTAyLTI0IDEyOjIzOjQ0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBhZGQgZHVyYXRpb24gd2hlbiBleHRpbWF0aW5nIFFvUyB0aW1lCi0JICBXaGVuIHdlIG5lZWQgdG8gZGVjaWRlIG9uIHRoZSBuZXh0IFFvUyB0aW1lLCB0YWtlIGludG8gYWNjb3VudCB0aGUgZHVyYXRpb24gb2YKLQkgIHRoZSBidWZmZXJzLgotCi0yMDExLTAyLTI4IDExOjU4OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0JICBDb25mbGljdHM6Ci0JICBjb25maWd1cmUuYWMKLQotMjAxMS0wMi0yMyAxNzo0MToyMiArMDEwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiByZWxlYXNlIHBhX3NoYXJlZF9yZXNvdXJjZV9tdXRleCBiZWZvcmUgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdAotCSAgTm90IGRvaW5nIHNvIGNhbiByZXN1bHQgaW4gYSBkZWFkbG9jayB3aGVuIHR3byB0aHJlYWRzIGVudGVyCi0JICBnc3RfcHVsc2VyaW5nYnVmZmVyX29wZW5fZGV2aWNlIGF0IHRoZSBzYW1lIHRpbWUsIGFzCi0JICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IHJlbGVhc2VzIHRoZSBtYWlubG9vcCBsb2NrIHdoaWxlIHdhaXRpbmcsCi0JICBhbGxvd2luZyBhbm90aGVyIHRocmVhZCB0byB0YWtlIGl0LCByZXN1bHRpbmcgaW4gYSBkZWFkbG9jayBhcyB0d28KLQkgIHRocmVhZHMgd2FpdHMgZm9yIHRoZSBsb2NrIHRoZSBvdGhlciBpcyBob2xkaW5nLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MzA4NwotCi0yMDExLTAyLTIzIDE3OjE4OjE5ICswMTAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHMvcmVzc291cmNlL3Jlc291cmNlLwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MzA4NwotCi0yMDExLTAyLTI1IDIwOjEyOjM1IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVtb3ZlIGFjY2lkZW50YWwgZGVidWcgbWVzc2FnZQotCSAgaW4gcHJldmlvdXMgY29tbWl0Ci0KLTIwMTEtMDItMjUgMTk6MzU6NTEgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgc3VwcG9ydCBmb3IgMlZ1eSBhbmQgcjIxMAotCi0yMDExLTAyLTI0IDE0OjA4OjI1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvc2NhbGVyYm9iLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmUuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmViZmYuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmV0ZmYuYzoKLQkgIGRlaW50ZXJsYWNlOiBBZGQgc3VwcG9ydCBmb3IgTlYyMSBjb2xvcnNwYWNlCi0KLTIwMTEtMDItMjQgMTQ6MDA6MzcgKzAxMDAgIENhcnN0ZW4gS3JvbGwgPGNhckB4aW1pZGkuY29tPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdmZpci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZXRmZi5jOgotCSAgZGVpbnRlcmxhY2U6IEFkZCBzdXBwb3J0IGZvciBOVjEyIGNvbG9yc3BhY2UKLQkgIEZpeGVzIGJ1ZyAjNjQyOTYxLgotCi0yMDExLTAyLTI0IDEzOjU2OjA0ICswMTAwICBDYXJzdGVuIEtyb2xsIDxjYXJAeGltaWRpLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IEZpcnN0IHRyeSBpZiB1cHN0cmVhbSBoYW5kbGVzIFRJTUUgc2Vla3MgYmVmb3JlIGhhbmRsaW5nIHRoZW0gaGVyZQotCSAgRml4ZXMgYnVnICM2NDI5NjMuCi0KLTIwMTAtMTEtMDggMTQ6MjU6NTkgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkgIGRlaW50ZXJsYWNlOiBTaW1wbGlmeSBzZXRjYXBzCi0JICBUaGUgY3VycmVudCBjb2RlIG5ldmVyIHVzZXMgdXBzdHJlYW0gbmVnb3RpYXRpb24gc28gdGhlIGNvZGUgY2FuIGJlCi0JICBzaWduaWZpY2FudGx5IHNpbXBsaWZpZWQuCi0KLTIwMTEtMDEtMjQgMTI6NDg6MTggKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHkuYzoKLQkgIGRlaW50ZXJsYWNlOiBQb3J0IGdyZWVkeWwgdG8gR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QKLQkgIFRoZSBtYWluIGdvYWwgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gcmV1c2UgdGhlIGNvbXBsZXggYnV0IG5vdyBuZWF0bHkKLQkgIHdyaXR0ZW4gc2NhbmxpbmUgcG9pbnRlciBjYWxjdWxhdGlvbiBjb2RlIGZyb20gdGhlIHNpbXBsZSBtZXRob2RzLgotCi0yMDExLTAyLTIyIDE1OjIwOjExICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSAgUmV2ZXJ0ICJpZDNkZW11eDogZW5zdXJlIGEgdGFnbGlzdCBiZWZvcmUgYWRkaW5nIHRoZSBjb250YWluZXIgdGFnIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBhODZiYWI2Njg5M2JiMWEzMzIzYTc1NjQxMDU3M2MxMTdiODIxOWVmLiBUaGUgaXNzdWUgaXMKLQkgIGZpeGVkIHdpdGggY29tbWl0IGZmNWU1YThmMGRhYTFmZGY4OTc5MmQwNzI2ZWEwNjNiYmQ5OWRiMTggaW5zdGVhZC4KLQotMjAxMS0wMi0yMiAxNToxOTowMCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgaWQzZGVtdXg6IHJldHVybiBJRDNUQUdTX0JST0tFTl9UQUcgZm9yIHVuc3VwcG9ydGVkIHZlcnNpb25zCi0JICBUaGlzIHByZXZlbnRzIHVzIGZvciB0cnlpbmcgdG8gd29yayB3aXRoIGEgTlVMTCB0YWdsaXN0LgotCi0yMDExLTAyLTIyIDE0OjE1OjI3ICswMTAwICBFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlLgotCi0yMDExLTAyLTIyIDE0OjAxOjI3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGVuc3VyZSBzYW5lIHBhcmFtZXRlcnMgd2hlbiBwYXJzaW5nIHN1cGVyaW5kZXgKLQotMjAxMS0wMi0yMiAxNDowMDoxMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBjaGVjayBmb3IgTlVMTCBhdWRpbyBzdHJlYW0gZm9ybWF0IGhlYWRlciB3aGVuIHBhcnNpbmcgc3RyZWFtCi0KLTIwMTEtMDItMjIgMTQ6NTI6MTggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjNwLWFsc2FzcmMtQU1SLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjQtYWxzYXNyYy1QQ01BLnNoOgotCSAgcnRwLWV4YW1wbGVzOiBtb3ZlIGNhcHNmaWx0ZXIgYmVoaW5kIGNvbnZlcnRlcnMKLQkgIFdlIG5lZWQgdG8gaGF2ZSB0aGUgY2Fwc2ZpbHRlciBiZWhpbiB0aGUgY29udmVydGVycyB0byBtYWtlIHRoZSBjb252ZXJ0ZXJzCi0JICBjb252ZXJ0IGZyb20gdGhlIGZvcm1hdHMgdjRsMnNyYyBjYW4gZG8gdG8gd2hhdCB3ZSByZXF1ZXN0IHdpdGggdGhlCi0JICBjYXBzZmlsdGVyLgotCi0yMDExLTAyLTIyIDE0OjUwOjU5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC1QQ01BLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1QQ01BLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXY0bDItSDI2M3AtYWxzYXNyYy1BTVIuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXY0bDItSDI2NC1hbHNhc3JjLVBDTUEuc2g6Ci0JICBydHAtZXhhbXBsZXM6IGZpeCBhc2NpaS1hcnQKLQkgIFNvbWUgYm94ZXMgd2hlcmUgbWlzYWxpZ25lZCBkdWUgdG8gbG9uZyAiYXVkaW90ZXRzc3JjIiBuYW1lLiBUcmltIHRyYWlsaW5nCi0JICB3aGl0ZXNwYWNlLgotCi0yMDExLTAyLTIyIDEzOjI5OjI2ICswMTAwICBCbGFpc2UgR2Fzc2VuZCA8YmxhaXNlIGF0IHdpbGxvd2dhcmFnZSBkb3QgY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogaGFuZGxlIE5VTEwgZGVtdXggZWxlbWVudHMKLQkgIFdoZW4gdXNpbmcgZ3N0cnRwYmluIHdpdGggaWdub3JlLXB0PXRydWUsIHRoZSBmcmVlX3N0cmVhbSBmdW5jdGlvbiB0cmllcyB0bwotCSAgY2FsbCBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIGFuZCBnc3RfZWxlbWVudF9zZXRfc3RhdGUgb24gYSBzdHJlYW0tPmRlbXV4Ci0JICB3aGljaCBpcyBOVUxMLgotCSAgZml4ZXMgIzY0MjQxMgotCi0yMDExLTAxLTI0IDEyOjE4OjM5ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmM6Ci0JICBkZWludGVybGFjZTogc21hbGwgY2xlYW4tdXBzCi0JICBJbXByb3ZlIGRlYnVnIG91dHB1dCBieSBwcmludGluZyB0aGUgYnVmZmVyIHBvaW50ZXIgd2hlbgotCSAgcG9wcGluZyBhIGJ1ZmZlciBhbmQgc2ltcGxpZnkgY29kZSB0byB1c2Ugc2NhbmxpbmVzLmJvdHRvbV9maWVsZAotCSAgYXMgYXBwcm9wcmlhdGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyNjkxCi0KLTIwMTEtMDEtMjQgMTI6MTg6MzkgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IGFzc2lnbmVkIG1ldGhvZF9pZCB3aGVuIHVzaW5nIGZhbGxiYWNrCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyNjkxCi0KLTIwMTEtMDItMjEgMTc6MTc6MzIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBmaXggc2V0dGluZyB0aGUgU0RFUyBwcm9wZXJ0eQotCSAgT25seSB0aGUgc2RlcyB2ZXJpYWJsZSBpcyBwcm90ZWN0ZWQgd2l0aCB0aGUgb2JqZWN0IGxvY2suCi0JICBVc2UgdGhlIHJpZ2h0IG9iamVjdCB3aGVuIHNldHRpbmcgdGhlIHNkZXMgcHJvcGVydHkuCi0KLTIwMTEtMDItMjEgMTI6MDk6MDcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgUmV2ZXJ0ICJDaGVjayB0aGF0IGNvbGxlY3RwYWRzIGV4aXN0cyBiZWZvcmUgcmVtb3ZpbmcgcGFkIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA4ZTZiODc2ZTc2Yzk0NDEwZGIxNjBhZmU1ZWIzMGYyMTQ1MmU0MTlmLgotCSAgRGVwZW5kcyBvbiBhIGNvcmUgY29tbWl0IHRoYXQgd2FzIHJldmVydGVkCi0KLTIwMTEtMDItMjEgMDA6NTU6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkgIGljeWRlbXV4OiBmaXggdGFnIGxpc3QgaGFuZGxpbmcgaXNzdWVzIHRoYXQgbWlnaHQgaGF2ZSBjYXVzZWQgY3Jhc2hlcwotCSAgRml4IHNsaWdodGx5IGNvbmZ1c2VkIHRhZyBoYW5kbGluZyBpbiBzb21lIHBsYWNlczogbWFrZSBpdCBjbGVhciB3aGVuCi0JICB3ZSdyZSB0YWtpbmcgb3duZXJzaGlwIG9mIGEgdGFnIGxpc3QgYW5kIHdoZW4gbm90LiBGb3IgZXhhbXBsZSwKLQkgIGdzdF9pY3lkZW11eF90YWdfZm91bmQoKSB3YXMgdGFraW5nIG93bmVyc2hpcCB3aGVuIHRoZSBzb3VyY2UgcGFkCi0JICBleGlzdGVkLCBidXQgb3RoZXJ3aXNlIG5vdCAobGVhaykuIEFsc28sIGdzdF9ldmVudF9wYXJzZV90YWcoKSBkb2VzCi0JICBub3QgcmV0dXJuIGEgbmV3bHktYWxsb2NhdGVkIHRhZ2xpc3QsIGJ1dCBhIHRhZyBsaXN0IHRoYXQgYmVsb25ncyB0bwotCSAgdGhlIHRhZyBldmVudCwgc28gZG9uJ3QgZ2l2ZSBvd25lcnNoaXAgb2YgaXQgYXdheS4KLQkgIFdoaWxlIHdlJ3JlIGF0IGl0LCBzb21lIG1pbm9yIGNsZWFuLXVwczogZG9uJ3QgcmUtaW52ZW50IGdfc3RybmR1cCgpCi0JICBhbmQgc2ltcGxpZnkgZ3N0X2ljeWRlbXV4X3BhcnNlX2FuZF9zZW5kX3RhZ3MoKSBhIGJpdCwgYW5kIGRvbid0Ci0JICBsZWFrIHRoZSB0YWcgbGlzdCBpbiBjYXNlIG5vIHZhbGlkIHRhZ3Mgd2hlcmUgZm91bmQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQxMzMwCi0KLTIwMTEtMDItMjAgMjM6Mzk6NDEgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgQ2hlY2sgdGhhdCBjb2xsZWN0cGFkcyBleGlzdHMgYmVmb3JlIHJlbW92aW5nIHBhZAotCSAgVGhlIGNvcmUgbm93IGNhbGxzIHJlbGVhc2UgcGFkIGZyb20gZmluYWxpemUsIGF0IHdoaWNoIHBvaW50Ci0JICB0aGUgY29sbGVjdHBhZHMgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gZnJlZWQuCi0KLTIwMTEtMDItMTkgMTU6NDg6MjIgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSAgcG5nZGVjOiBIYW5kbGUgMTYtYml0LXBlci1jaGFubmVsIGltYWdlcwotCi0yMDExLTAyLTE4IDEwOjEyOjQ3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBzdHJlYW0tPmN1cnJlbnRfdG90YWwgaXMgYWNjdW11bGF0ZWQgYnl0ZSBzaXplIGFuZCBub3QgdGltZQotCSAgVXNlIHRpbWVzdGFtcCBmb3IgdGhlIHN0cmVhbSBpbmRleCBhcyB3ZWxsLgotCi0yMDExLTAyLTE1IDE5OjMzOjQ1IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIHVkcHNpbms6IHdhcm4gd2hlbiBwYWNrZXQgaXMgdG9vIGxhcmdlCi0KLTIwMTEtMDItMTcgMTc6NTk6MjUgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLmM6Ci0JICBtYXRyb3NrYXBhcnNlOiBOZXcgZWxlbWVudAotCSAgQ29waWVkIGZyb20gZGVtdXguICBEdXBsaWNhdGVzIG11Y2ggY29kZSwgYWxzbyBzb21lIGRlYWQgY29kZQotCSAgcmVtYWluaW5nLgotCi0yMDExLTAyLTE3IDE3OjU3OjU1IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBFYXJsaWVyIGRlYnVnIGNhdGVnb3J5IGluaXRpYWxpemF0aW9uCi0KLTIwMTEtMDEtMjIgMDA6MTM6MTYgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBkb24ndCBzZXQgZHVyYXRpb24gZm9yIGxpdmUgc3RyZWFtCi0KLTIwMTEtMDEtMDYgMTU6NDQ6MjQgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Z3V0aWxzL25lZ290aWF0aW9uLmM6Ci0JICBkZWJ1Z3V0aWxzOiByZW1vdmUgYml0cm90dGVuIG5lZ290aWF0aW9uIGVsZW1lbnQKLQkgIFdhc24ndCBlbmFibGVkLCBkaWRuJ3Qgd29yaywgYW5kIHBsYW5uZWQgZmVhdHVyZXMgaGF2ZSBiZWVuCi0JICBzdXBlcmNlZGVkIGJ5IGNhcHNmaWx0ZXIgYW5kIGNhcHNkZWJ1Zy4KLQotMjAxMC0wOS0xNyAxMjoxMDozOCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5Lmg6Ci0JICBydHB2cmF3cGF5OiBJbXBsZW1lbnQgaW50ZXJsYWNpbmcKLQotMjAxMS0wMi0xNyAxNzo1Nzo0MiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogYWxzbyBhZGQgdGhlIGZyYW1lLXR5cGUgZm9yIHRoZSBzdHJlYW0gaW5kZXgKLQotMjAxMS0wMi0xNyAxNzo1NjoyOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZ2V0IHRoZSBpbmRleCB3cml0ZXIgaWQgd2hlbiB0aGUgcGFkIGhhcyBhIHBhcmVudAotCSAgT3RoZXJ3aXNlIHRoZSBpbmRleCB3cml0ZXIgaGFzIGEgd2VpcmVkIG5hbWUsIGFzIHRoZSBwYWQgaGFzIG5vIHBhcmVudCB5ZXQuCi0KLTIwMTEtMDItMTcgMTQ6MDA6NDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgYXZpZGVtdXgsIGZsdmRlbXV4OiBmb3JtYXR0aW5nIGNsZWFudXAKLQkgIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZXMgYW5kIGZpeCB0aGUgZm9ybWF0dGluZyBvZiBkb3VibGUgbmVnYXRpb24uCi0KLTIwMTEtMDItMTcgMTM6NTc6MzcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgYXZpZGVtdXgsIGZsdmRlbXV4OiBtYXJrIGRlbHRhLXVuaXRzIGluIHRoZSBpbmRleAotCSAgV2UgbmVlZCB0byB1c2UgdGhlICdkZWx0YScgZmxhZyBmb3IgZGVsdGEgdW5pdHMgYW5kIG5vdCB0aGUgJ25vbmUnIGZsYWcuCi0KLTIwMTEtMDItMTcgMTE6NTg6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9pY2xlcy8uZ2l0aWdub3JlOgotCSAgLmdpdGlnbm9yZTogaWdub3JlIG1vdmVkIGVxdWFsaXplciB0ZXN0IGJpbmFyeQotCi0yMDExLTAyLTE3IDEyOjQ2OjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG1hcmsgZGVsdGEtdW5pdCBpbiB0aGUgaW5kZXgKLQkgIFdlIG5lZWQgdG8gdXNlIHRoZSBkZWx0YSBmbGFnIGZybyBkZWx0YSB1bml0cyBhbmQgbm90IG5vbmUuIFByaW50IG1vcmUgZGV0YWlscwotCSAgdG8gdGhlIGRlYnVnIGxvZy4KLQotMjAxMS0wMi0xNyAxMjo0NDowMSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmb3JtYXR0aW5nIGNsZWFudXAKLQkgIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZXMgYW5kIGZpeCB0aGUgZm9ybWF0dGluZyBvZiBkb3VibGUgbmVnYXRpb24uCi0KLTIwMTEtMDItMTYgMTc6MDk6MjAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IHJld29yayBfcmVxdWVzdF9uZXdfcGFkIHRvIGhhbmRsZSBleHBsaWN0IHJlcS1wYWQtbmFtZXMKLQkgIERvbid0IGlnbm9yZSBleHBsaWNpdCBwYWQtbmFtZXMuCi0KLTIwMTEtMDItMTYgMTc6MDY6NTEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogcmV3b3JrIF9yZXF1ZXN0X25ld19wYWQgdG8gaGFuZGxlIGV4cGxpY3QgcmVxLXBhZC1uYW1lcwotCSAgRG9uJ3QgaWdub3JlIGV4cGxpY2l0IHBhZC1uYW1lcy4gUmVhcnJhbmdlIHRoZSBjb2RlIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgYQotCSAgYml0LiBBZGQgYSBGSVhNRS0wLjExIGZvciB0aGUgYmFkIHBhZC1uYW1lcy4KLQotMjAxMS0wMi0xNiAxNToyODo1MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgaWNsZXM6IEFkZCBlcXVhbGl6ZXItdGVzdCB0byB0aGUgYnVpbGQgc3lzdGVtCi0KLTIwMTEtMDItMTYgMTU6MjM6NTAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOgotCSAgW01PVkVEIEZST00gQkFEIDUvNV0gZXF1YWxpemVyLXRlc3Q6IEluaXRpYWxpemUgZGVidWcgY2F0ZWdvcnkgYWZ0ZXIgZ3N0X2luaXQoKSB0byBmaXggc2VnZmF1bHQKLQotMjAwNy0xMS0wNyAxNTozNjo1OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgNC81XSB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOiBGaXggZ2FpbiByYW5nZXMgZm9yIHRoZSBsYXRlc3QgZXF1YWxpemVyIGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvZXF1YWxpemVyLXRlc3QuYzogKGRvX3NsaWRlcl9maWRkbGluZyk6Ci0JICBGaXggZ2FpbiByYW5nZXMgZm9yIHRoZSBsYXRlc3QgZXF1YWxpemVyIGNoYW5nZXMuCi0KLTIwMDctMDUtMjEgMTQ6MDE6MTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEIDMvNV0gQ2hhbmdlTG9nOiBDaGFuZ2VMb2cgc3VyZ2VyeS4gZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYyAoQVJHX0JBTkRfV0lEVEgsIF9kb19pbml0LCBBUkdfR0FJTiwgX0dzdElpckVxdWFsaXplckJhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkuCi0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmMgKEFSR19CQU5EX1dJRFRILCBfZG9faW5pdCwgQVJHX0dBSU4sCi0JICBfR3N0SWlyRXF1YWxpemVyQmFuZCwgb2JqZWN0LCBfR3N0SWlyRXF1YWxpemVyQmFuZENsYXNzLAotCSAgcGFyZW50X2NsYXNzLCBnc3RfaWlyX2VxdWFsaXplcl9iYW5kX3NldF9wcm9wZXJ0eSwKLQkgIGdzdF9paXJfZXF1YWxpemVyX2JhbmRfY2xhc3NfaW5pdCwgZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9nZXRfdHlwZSwKLQkgIGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCwKLQkgIGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCwKLQkgIGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2ludGVyZmFjZV9pbml0LCBzZXR1cF9maWx0ZXIsCi0JICBnc3RfaWlyX2VxdWFsaXplcl9jb21wdXRlX2ZyZXF1ZW5jaWVzLCBwbHVnaW5faW5pdCk6Ci0JICAqIHRlc3RzL2ljbGVzL2VxdWFsaXplci10ZXN0LmM6Ci0JICBBZGQgZml4bWUgYW5kIGNvbW1lbnQgZm9yIGV4YW1wbGUuCi0KLTIwMDctMDMtMTQgMTY6MzM6MDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEIDIvNV0gdGVzdHMvaWNsZXMvZXF1YWxpemVyLXRlc3QuYzogUG9ydCB0aGUgZXhhbXBsZSB0byBuZXcgZXF1YWxpemVyIGFwaS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOiAoZXF1YWxpemVyX3NldF9iYW5kX3ZhbHVlKSwKLQkgIChlcXVhbGl6ZXJfc2V0X2FsbF9iYW5kX3ZhbHVlcyksCi0JICAoZXF1YWxpemVyX3NldF9iYW5kX3ZhbHVlX2FuZF93YWl0KSwKLQkgIChlcXVhbGl6ZXJfc2V0X2FsbF9iYW5kX3ZhbHVlc19hbmRfd2FpdCksIChkb19zbGlkZXJfZmlkZGxpbmcpLAotCSAgKG1haW4pOgotCSAgUG9ydCB0aGUgZXhhbXBsZSB0byBuZXcgZXF1YWxpemVyIGFwaS4KLQotMjAwNy0wMi0wMyAyMzozNToyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEIDEvNV0gRml4IHVwIHRvIHVzZSB0aGUgbmV3bHkgcG9ydGVkIChhY3R1YWxseSB3b3JraW5nKSBHc3RBdWRpb0ZpbHRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IChnc3RfaWlyX2VxdWFsaXplcl9iYXNlX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NsYXNzX2luaXQpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfaW5pdCksCi0JICAoc2V0dXBfZmlsdGVyKSwgKGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3NldF9wcm9wZXJ0eSksIChnc3RfaWlyX2VxdWFsaXplcl9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3RyYW5zZm9ybV9pcCksIChnc3RfaWlyX2VxdWFsaXplcl9zZXR1cCksCi0JICAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oOgotCSAgRml4IHVwIHRvIHVzZSB0aGUgbmV3bHkgcG9ydGVkIChhY3R1YWxseSB3b3JraW5nKSBHc3RBdWRpb0ZpbHRlci4KLQkgIEJ1bXAgY29yZS9iYXNlIHJlcXVpcmVtZW50cyB0byBDVlMgZm9yIHRoaXMuCi0JICAqIHRlc3RzL2ljbGVzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOiAoY2hlY2tfYnVzKSwKLQkgIChlcXVhbGl6ZXJfc2V0X2JhbmRfdmFsdWUpLCAoZXF1YWxpemVyX3NldF9hbGxfYmFuZF92YWx1ZXMpLAotCSAgKGVxdWFsaXplcl9zZXRfYmFuZF92YWx1ZV9hbmRfd2FpdCksCi0JICAoZXF1YWxpemVyX3NldF9hbGxfYmFuZF92YWx1ZXNfYW5kX3dhaXQpLCAoZG9fc2xpZGVyX2ZpZGRsaW5nKSwKLQkgIChtYWluKToKLQkgIEFkZCBicmFpbi1kZWFkIGludGVyYWN0aXZlIHRlc3QgZm9yIGVxdWFsaXplci4KLQotMjAxMS0wMi0xNSAxNTo1OTozMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IEFkZCBQSlBHIG1hcHBpbmcKLQkgIEFkZHMgbWFwcGluZyBvZiBwcm9ncmVzc2l2ZSBqcGVnIGZvcm1hdAotCi0yMDExLTAyLTE1IDE2OjMwOjIwICswMTAwICBBbmR5IFdpbmdvIDx3aW5nb0BvYmxvbmcuY29tPgotCi0JICBwbHVnIHF0ZGVtdXggcmVmY291bnQgbGVha3MKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jIChnc3RfcXRkZW11eF9zcmNfY29udmVydCk6IFVucmVmIHRoZSBxdGRlbXV4OyB3ZQotCSAgd2VyZW4ndCBkb2luZyBzbyBiZWZvcmUuCi0JICAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19ldmVudCwgZ3N0X3F0ZGVtdXhfY2hhaW4pOiBGaXggc29tZSBlcnJvcgotCSAgY2FzZXMgd2hpY2ggd291bGQgbGVhayBhIHJlZiB0byB0aGUgcXRkZW11eC4KLQotMjAxMS0wMi0xNCAyMDoyMDowOCArMDEwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IEFkZCBVUkkgcXVlcnkgaGFuZGxlcgotCSAgRml4ZXMgYnVnICM2NDIzMzcuCi0KLTIwMTEtMDItMTQgMTc6NDk6NTQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGF2b2lkIHNvcnRpbmcgTlVMTCBhcnJheSBvZiBjbHVzdGVyIHBvc2l0aW9ucwotCi0yMDExLTAyLTE0IDE2OjQ2OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSAgdGhlb3JhcGF5OiBoYW5kbGUgMCBzaXplZCBwYWNrZXRzCi0JICBIYW5kbGUgMCBzaXplZCBwYWNrZXRzIChyZXBlYXQgZnJhbWUpIGluIHRoZSBwYXlsb2FkZXIgYW5kIGRlcGF5bG9hZGVyLgotCSAgRml4ZXMgIzY0MTgyNwotCi0yMDExLTAyLTE0IDE1OjIxOjI5ICswMjAwICBUdXVra2EgUGFzYW5lbiA8dHV1a2thLnBhc2FuZW5AaWxtaS5maT4KLQotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmM6Ci0JICB0YWdpbmplY3Q6IHJlc2VuZCB0YWdzIHdoZW4gdGhleSBhcmUgY2hhbmdlZAotCSAgQWxsb3cgc2V0dGluZyBuZXcgdGFncyBvbiB0aGUgcHJvcGVydHkgd2hpbGUgcnVubmluZyBhbmQgc2VuZCB0aGVtLgotCSAgRml4ZXMgIzY0MDI0OQotCi0yMDExLTAyLTE0IDEyOjUzOjI3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBmOTRkNzM5IHRvIDFkZTdmNmEKLQotMjAxMS0wMi0wNyAyMzozMjo1MyArMDEwMCAgTWlndWVsIEFuZ2VsIENhYnJlcmEgTW95YSA8bWFkbWFjMjUwMUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBtaW5vciBsZWFrcyB3aGVuIGhhbmRsaW5nIHNlcnZlciByZXF1ZXN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDAxNjMKLQotMjAxMS0wMi0xNCAwMDo0OTowMCArMDAwMCAgSGVhdGggTmllbHNvbiA8aGVhdGhuQGdtYWlsLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZXh0cmFjdCBNdXNpY0JyYWlueiB0YWdzCi0JICBFeHRyYWN0IE11c2ljQnJhaW56IHRhZ3MgYWRkZWQgYnkgTXVzaWNCcmFpbnoncyBQaWNhcmQKLQkgIHRhZ2dlciBhcHBsaWNhdGlvbi4gVGhlc2UgdGFncyAoZXNwLiB0aGUgYWxidW0gaWQpIGFyZQotCSAgaGVscGZ1bCBmb3Igcmh5dGhtYm94IGV0LmFsLiB0byBhdXRvbWF0aWNhbGx5IGRvd25sb2FkcwotCSAgY292ZXIgYXJ0LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjIwNQotCi0yMDExLTAyLTE0IDAwOjM4OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVmYWN0b3IgaVR1bmVzIHRhZyBwYXJzaW5nIGEgYml0Ci0KLTIwMTEtMDItMTAgMjM6NTI6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JICBkb2FwOiB1cGRhdGUgbWFpbGluZyBsaXN0IGxvY2F0aW9uCi0KLTIwMTEtMDItMTAgMTg6MTE6NDYgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwcm9wYWdhdGUgZXJyb3IgZHVyaW5nIGV4cG9zZV9zdHJlYW1zCi0JICAuLi4gYXMgaXQgbWF5IG9jY3VyIGR1cmluZyBpbml0aWFsIHBhcnNpbmcgb2YgZnJhZ21lbnRlZCBmaWxlLgotCi0yMDExLTAyLTEwIDE4OjAwOjExICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYXZvaWQgc2tpcHBpbmcgZXhwb3NpbmcgYSBzdHJlYW0gZm9sbG93aW5nIGEgcmVtb3ZlZCBzdHJlYW0KLQotMjAxMS0wMi0xMCAxMTo1NjozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBzdG9yZSBjbHVzdGVyIHBvc2l0aW9ucyBwcm92aWRlZCBieSBTZWVrSGVhZAotCSAgLi4uIGFuZCB1c2UgdGhvc2UsIGlmIGF2YWlsYWJsZSwgdG8gbG9jYXRlIGEgY2x1c3RlciByYXRoZXIgdGhhbiBzY2FubmluZy4KLQotMjAxMS0wMi0wOSAxNjoyMjo0NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogcHJvcGVybHkgcmVzdW1lIGNsdXN0ZXIgc2Nhbm5pbmcKLQkgIC4uLiByYXRoZXIgdGhhbiBnZXR0aW5nIG9mZnNldCB0cmFja2luZyBtZXNzZWQgdXAsIGFuZCB0aGVuIGxpa2VseQotCSAgZmFpbGluZyBhIHN1YnNlcXVlbnQgYXNzZXJ0LgotCi0yMDExLTAyLTA4IDEwOjA3OjQzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSAgaWQzZGVtdXg6IGVuc3VyZSBhIHRhZ2xpc3QgYmVmb3JlIGFkZGluZyB0aGUgY29udGFpbmVyIHRhZwotCSAgSW4gdGhlIGNhc2Ugb2YgaWQzdjEgYWxzbyBkb24ndCByZXR1cm4gTlVMTCBvbiBlbXB0eSB0YWdzLCBidXQgYWxzbyBjcmVhdGUgYSBuZXcKLQkgIHRhZ2xpc3QgYW5kIGFkZCB0aGUgY29udGFpbmVyIHRhZyBmb3IgY29uc2lzdGVuY3kuCi0KLTIwMTEtMDItMDcgMTc6MDg6NDcgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc3RyaXAgdHJhaWxpbmcgc3BhY2VzCi0KLTIwMTEtMDItMDcgMTc6MDc6NDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRwc3JjOiBzZXQgbXVsdGlwbGUgcHJvcGVydGllcyBpbiBvbmUgZ28KLQkgIFRoZXJlIGlzIG5vIG5lZWQgZm9yIHNlcGFyYXRlIGdfb2JqZWN0X3NldCgpIGNhbGxzIGhlcmUuCi0KLTIwMTEtMDItMDMgMTY6MTA6NDkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogSGFuZGxlIGltYWdlIGNhcHMgd2l0aG91dCBhc3NlcnRpbmcKLQkgIEltYWdlcyBtaWdodCBoYXZlIGZyYW1lcmF0ZT0wLzEgaW4gdGhlIGNhcHMsIHdoaWNoIGNhdXNlZCBhbgotCSAgYXNzZXJ0aW9uIG9uIGRlaW50ZXJsYWNlLiBJIGRvbid0IGtub3cgb2YgaW50ZXJsYWNlZCBpbWFnZSBmb3JtYXRzCi0JICBidXQgZGVpbnRlcmxhY2UgbWlnaHQgYmUgaGFyZGNvZGVkIG9uIHNvbWUgZ2VuZXJpYyBwaXBlbGluZXMgYW5kCi0JICBpdCBzaG91bGRuJ3QgYXNzZXJ0LgotCSAgVGhlIGZpeCB3YXMgdG8gc2V0IGZpZWxkX2R1cmF0aW9uIHRvIDAgaWYgdGhlIGlucHV0IGhhcyBhIGZyYW1lcmF0ZQotCSAgd2l0aCBhIDAgbnVtZXJhdG9yLgotCSAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgY2hlY2tzIGZvciB0aGlzIHNpdHVhdGlvbiBvbiB0aGUgdW5pdCB0ZXN0cy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDE0MDAKLQotMjAxMS0wMi0wNCAxMjozMzowOSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgZG9jczogZml4IHBhcmFtZXRlciBuYW1lIGluIHVkcHNyYyBkb2NzCi0JICBJdCBpcyAiYnVmZmVyLXNpemUiIGFuZCBub3QgImJ1ZmZlciIuIEFsc28gdHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlLgotCi0yMDExLTAyLTAzIDIzOjQyOjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogZml4IGludGVybGFjZWQgc2V0X2Zvcm1hdCBjb25maWd1cmF0aW9uCi0JICBDb21taXQgNmM4MjY4ZGJmZDVjODhmYWMyOGM4ODJlZjJlNDU5OGE2NTIyZTJkNiBicm9rZSByZWNvcmRpbmcKLQkgIGZyb20gaW50ZXJsYWNlZCB2NGwyIHNvdXJjZSAoZS5nLiB0eXBpY2FsIHR2IGNhcHR1cmUgY2FyZCkgc2luY2UKLQkgIFY0TDJfRklFTERfU0VRX1RCICh3aXRoIGZpZWxkcyBzdG9yZWQgc2VwYXJhdGVseSkgZG9lcyBub3QgbWFwCi0JICB0byBjdXJyZW50bHkgZGVmaW5lZCBpbnRlcmxhY2VkIGZvcm1hdCAoZmllbGRzIHN0b3JlZCBpbnRlcmxlYXZlZCkuCi0JICBCZXNpZGVzIHRoaXMgbWlzbWF0Y2gsIGhhcmR3YXJlIG1pZ2h0IHF1aXRlIGxpa2VseSBub3Qgc3VwcG9ydCBvcgotCSAgYXBwcmVjaWF0ZSB0aGlzIGZpZWxkIHZhbHVlLCBzaW5jZSBxdWVyeWluZyBzdXBwb3J0ZWQgZm9ybWF0cyBtYXBwZWQKLQkgIF9JTlRFUkxBQ0VEIGZpZWxkIGZvcm1hdHMgdG8gaW50ZXJsYWNlZD10cnVlIGNhcHMgKHNvIHRoZSBsYXR0ZXIgc2hvdWxkCi0JICBub3QgYmUgbWFwcGVkIHRvIGZpZWxkIHZhbHVlIHRoYXQgaXMgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZCkuCi0KLTIwMTEtMDItMDIgMTg6Mjc6NTIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgc291cmNlOiBmaXggdHlwZSBvZiBudHBuc3RpbWUKLQotMjAxMS0wMi0wMiAxODoyMToyNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBiaW46IEdldCBhbmQgdXNlIHRoZSBOVFAgdGltZSB3aGVuIHJlY2VpdmluZyBSVENQCi0JICBXaGVuIHdlIHJlY2VpdmUgYW4gUlRDUCBwYWNrZXQsIGdldCB0aGUgY3VycmVudCBOVFAgdGltZSBpbiBuYW5zZWNvbmRzIHNvIHRoYXQKLQkgIHdlIGNhbiBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSByb3VuZC10cmlwIHRpbWUuCi0KLTIwMTEtMDItMDEgMTk6NDA6NTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZDogYXJyYW5nZSBmb3IgZGVmaW5pdGlvbiBvZiBfc3dhYiBvbiBDeWd3aW4KLQkgIGdzdGRpcmVjdHNvdW5kc2luay5jOiBJbiBmdW5jdGlvbiAnZ3N0X2RpcmVjdHNvdW5kX3Npbmtfd3JpdGUnOgotCSAgZ3N0ZGlyZWN0c291bmRzaW5rLmM6NTU3OiBlcnJvcjogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gJ19zd2FiJwotCSAgZ3N0ZGlyZWN0c291bmRzaW5rLmM6NTU3OiBlcnJvcjogbmVzdGVkIGV4dGVybiBkZWNsYXJhdGlvbiBvZiAnX3N3YWInCi0KLTIwMTAtMTAtMDYgMjE6MTc6MjggLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5oOgotCSAgcnRwdGhlb3JhZGVwYXk6IFJlcXVlc3QgbmV3IGtleWZyYW1lIG9uIGxvc3QgcGFja2V0cwotCSAgVGhlb3JhIGNhbiBvbmx5IHVzZSB0aGUgbGFzdCBmcmFtZSAob3IgdGhlIGtleWZyYW1lKSBhcyBhIHJlZmVyZW5jZSwgc28gaW4KLQkgIHByYWN0aWNlLiBJZiB3ZSByZWNlaXZlIGEgYnVmZmVyIHRoYXQgcmVmZXJlbmNlcyBhbiB1bmtub3duIGNvZGVib29rLCByZXF1ZXN0Ci0JICBuZXcgaGVhZGVycy4gSXQgcHJvYmFibHkgbWVhbnMgdGhhdCBoZWFkZXJzIHdlcmUgbG9zdC4KLQotMjAxMC0wOC0yNyAxNDoxMTo1MyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogQWRkIGFjdGlvbiBzaWduYWwgdG8gcmVxdWVzdCBlYXJseSBSVENQCi0KLTIwMTAtMDgtMjcgMTY6MTE6MDYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogQWRkIGNhbGxiYWNrIHRvIGdldCB0aGUgY3VycmVudCB0aW1lCi0KLTIwMTAtMTAtMTkgMjI6MjE6NTQgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogRG9uJ3QgcmVsYXkgbW9yZSB0aGFuIG9uZSBQTEkgcmVxdWVzdCBwZXIgUlRUCi0JICBEcm9wIFBMSSByZXF1ZXN0cyBpZiBvbmUgd2FzIHJlbGF5IGluIHRoZSBsYXN0IFJUVCwgdGhlIG90aGVyIHNpZGUgbWF5Ci0JICBqdXN0IG5vdCBoYXZlIHJlY2VpdmVkIHRoZSBrZXlmcmFtZSB5ZXQuCi0KLTIwMTAtMDYtMjMgMTY6NDM6MjQgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogU2VuZCBHc3RGb3JjZUtleVVuaXQgZXZlbnQgaW4gcmVzcG9uc2UgdG8gcmVjZWl2ZWQgUlRDUCBQTEkKLQotMjAxMC0xMS0yNCAxNToyNzo0NiAtMDUwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIGdzdHJ0cHNlc3Npb246IEZhbGxiYWNrIGZvciBGSVIgdG8gUExJIGlmIFBMSSBpc24ndCBhdmFpbGFibGUKLQotMjAxMC0wNi0yMiAxOTo1Njo1MCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBJbXBsZW1lbnQgc2VuZGluZyBQTEkgcGFja2V0cyBpbiByZXNwb25zZSB0byBHc3RGb3JjZUtleVVuaXQKLQotMjAxMC0wNi0yMiAxMzozMzozMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgcnRwc291cmNlOiBSZXRhaW4gUlRDUCBGZWVkYmFjayBwYWNrZXRzIGZvciBhIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZQotCi0yMDEwLTA5LTA3IDEzOjM1OjE2ICswMzAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IE1ha2UgcnRjcCBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUgYWZ0ZXIgcHJvY2Vzc2luZyBpdAotCSAgRnVuY3Rpb25zIHRoYXQgcHJvY2VzcyB0aGUgcnRjcCBidWZmZXIgY291bGQgZGVjaWRlIHRvIGtlZXAgYSByZWYKLQkgIG9uIHRoZSBidWZmZXIgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4gU28gbWFrZSB0aGUgbWV0YWRhdGEgd3JpdGFibGUKLQkgIG9ubHkgYWZ0ZXIgdGhleSBhcmUgZG9uZS4KLQotMjAxMC0wNi0xNyAxNzozNDoxOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogRW1pdCBzaWduYWwgb24gaW5jb21pbmcgUlRDUCBGQiBwYWNrZXQKLQotMjAxMS0wMi0wMSAxODoxNzoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogZml4IGNvbXBpbGF0aW9uCi0KLTIwMTAtMDYtMTUgMTg6Mzk6NDcgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgcnRwc2Vzc2lvbjogQWRkIG1ldGhvZCB0byByZXF1ZXN0IGVhcmx5IFJUQ1AgcGFja2V0Ci0JICBJbXBsZW1lbnQgdGhlIGVhcmx5IG1vZGUgZGVmaW5lZCBpbiBSRkMgNDU4NS4gSW4gdGhpcyBtb2RlLCBSVENQIGZlZWRiYWNrCi0JICBwYWNrZXRzIGFyZSBzZW50IGVhcmx5IHRvIG5vdGlmaWVyLgotCi0yMDEwLTA2LTAxIDE5OjI4OjAxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgcnRwc2Vzc2lvbjogQWRkIHByb3BlcnR5IGZvciBtaW5pbXVtIGludGVydmFsIGJldHdlZW4gUmVndWxhciBSVENQIG1lc3NhZ2VzCi0JICBUaGlzIGNhbiBiZSBjaGFuZ2VkIGFjY29yZGluZyB0byBSRkMgNDU4NQotCi0yMDEwLTA2LTE0IDE4OjQwOjMzIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmxpc3Q6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiBFbWl0IHNpZ25hbCB3aGVuIHNlbmRpbmcgYSBjb21wb3VuZCBSVENQIHBhY2tldAotCSAgVGhpcyBhbGxvd3MgdXNlcnMgdG8gYWRkIGV4dHJhIFJUQ1AgcGFja2V0cyB0byB0aGUgY29tcG91bmQKLQkgIFJUQ1AgcGFja2V0LgotCi0yMDEwLTA2LTE5IDE5OjExOjA2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgIHJ0cHB0ZGVtdXg6IFRhZyB1cHN0cmVhbSBjdXN0b20gZXZlbnRzIHdpdGggcGF5bG9hZCB0eXBlCi0KLTIwMTAtMDYtMTggMTk6MTI6NDAgLTA0MDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIHJ0cHNzcmNkZW11eDogVGFnIHVwc3RyZWFtIGN1c3RvbSBldmVudHMgd2l0aCBTU1JDCi0KLTIwMTAtMTAtMDEgMTc6MTk6MTYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRW1pdCAib24tc3NyYy12YWxpZGF0ZWQiIHdoZW4gdmFsaWRhdGluZyBieSBSVENQCi0JICBFbWl0ICJvbi1zc3JjLXZhbGlkYXRlZCIgaWYgdGhlIFNTUkMgaXMgdmFsaWRhdGVkIGJ5IHJlY2VpdmluZwotCSAgYSBSVENQIFNERVMgcGFja2V0LgotCi0yMDExLTAyLTAxIDE2OjM4OjIwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgajJrcGF5OiBza2lwIEVQSCBwYWNrZXRzCi0JICBJbmNsdWRlIEVQSCBtYXJrZXJzIGludG8gdGhlIHByZXZpb3VzIGNodW5rIG9mIHBhY2tldHMuCi0KLTIwMTEtMDEtMzEgMTc6NTY6MTggLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuaDoKLQkgIHJ0cHBjbWFwYXk6IFJlbmFtZSB0aGUgY2xhc3MgdG8gaGF2ZSB0aGUgcmlnaHQgbmFtZQotCSAgSXQgd2FzIG5hbWUgcG1jYSBpbnN0ZWFkIG9mIHBjbWEgYW5kIG1hZGUgZGVidWcgbG9ncyBoYXJkIHRvIHNlYXJjaC4KLQotMjAxMS0wMS0zMSAwNTo1ODozNiArMDEwMCAgRGF2aWQgSGVubmluZ3Nzb24gPGRhdmlkLmhlbm5pbmdzc29uQGNhbm9uaWNhbC5jb20+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIFB1bHNlc2luazogQWxsb3cgY2h1bmtzIHVwIHRvIGJ1ZnNpemUgaW5zdGVhZCBvZiBzZWdzaXplCi0JICBCeSBhbGxvd2luZyBsYXJnZXIgY2h1bmtzIHRvIGJlIHNlbnQsIFB1bHNlQXVkaW8gd2lsbCBoYXZlIGEKLQkgIGxvd2VyIENQVSB1c2FnZS4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBvbiBsb3ctZW5kIG1hY2hpbmVzLAotCSAgd2hlcmUgUHVsc2VBdWRpbyBjYW4gY3Jhc2ggaWYgcGFja2V0cyBhcmUgY29taW5nIGluIGF0IGEgaGlnaGVyCi0JICByYXRlIHRoYW4gUHVsc2VBdWRpbyBjYW4gcHJvY2VzcyB0aGVtLgotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgSGVubmluZ3Nzb24gPGRhdmlkLmhlbm5pbmdzc29uQGNhbm9uaWNhbC5jb20+Ci0KLTIwMTEtMDEtMzEgMTM6NDQ6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBzaW1wbGlmeSB0ZW1wbGF0ZSBjYXBzCi0JICBXZSBjYW4gbWVyZ2UgYWxsIHRoZSBZVVYgdmFyaWFudHMgaW50byBvbmUgc2luZ2xlIHN0cnVjdHVyZS4KLQotMjAxMS0wMS0yNyAxNTozNTowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHdpbjMyOiBmaXggREVGQVVMVF9BVURJT1NJTkssIHNob3VsZCBiZSBkaXJlY3Qqc291bmQqc2luawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDcwNQotCi0yMDExLTAxLTI3IDE2OjAyOjQ2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGUgdG8gcGxlYXNlIG1pbmd3MzIgY29tcGlsZXIKLQotMjAxMS0wMS0yNiAyMjoyMTozMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwOiB1c2Ugc29ja2xlbl90IHdoZXJlIGFwcHJvcHJpYXRlIHJhdGhlciB0aGFuIGN1c3RvbSB0eXBlCi0JICBJbiBwYXJ0aWN1bGFyLCBmaXhlcyBDeWd3aW4gYnVpbGQgd2hlcmUgc29ja2xlbl90IGlzIGRlZmluZWQgYXMgaW50Ci0JICBpbiBsaW5lIHdpdGggbmF0aXZlIHdpbjMyIGFwaSBkZWZpbml0aW9uLgotCi0yMDExLTAxLTI3IDEyOjE2OjQ2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogbWluZCByb3VuZGluZyBpc3N1ZXMgd2hlbiBjb252ZXJ0aW5nIGZyb20gZ2xvYmFsIHRpbWUgdG8gbW92IHRpbWUKLQkgIEluIHBhcnRpY3VsYXIsIHRoaXMgYXZvaWRzIG1pc3NpbmcgdGhlIGludGVuZGVkIGtleWZyYW1lIHdoZW4gZmlyc3QgY29udmVydGluZwotCSAgZnJvbSB0aGUgZnJhbWUncyBtb3YgdGltZSB0byBnbG9iYWwgc2VnbWVudCB0aW1lLCBhbmQgdGhlbiBiYWNrIGZyb20gZ2xvYmFsCi0JICB0aW1lIHRvIG1vdiB0aW1lIHdoZW4gYWN0aXZhdGluZyB0aGUgc2VnbWVudC4KLQotMjAxMS0wMS0yNiAwODo0ODo0MyArMDAwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbi50b25jaGV2QGF4aXMuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkgIG1hdHJvc2thbXV4OiBkb24ndCBsZWFrIGVibWwgd3JpdGVyIGNhcHMgd2hlbiByZS11c2luZyBtYXRyb3NrYW11eAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY0MDU0MgotCi0yMDExLTAxLTI1IDIxOjU2OjE5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBkb24ndCBkaXZpZGUgYnkgMAotCi0yMDExLTAxLTE4IDE0OjQ4OjA0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBwdWxsIG1vZGUgc2hvdWxkIGFsd2F5cyByZXBvcnQgc2Vla2FibGUKLQkgIC4uLiBhcyBpdCBubyBsb25nZXIgcmVxdWlyZXMgYW4gaW5kZXgsIGJ1dCBjYW4gc2VlayBieSBzY2FubmluZyBhcyB3ZWxsLgotCi0yMDExLTAxLTEwIDEyOjM0OjIyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IHN1cHBvcnQgc29tZSBtb3JlIG1wZWctNCBmb3VyY2MgdmFyaWFudHMKLQotMjAxMS0wMS0xMCAxMjozNDowMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNpbXBsaWZ5IHJldHJpZXZpbmcgc3RzZCBjaGlsZCBlbnRyeSBhdG9tCi0KLTIwMTEtMDEtMjQgMTg6Mjc6NTIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogRG9uJ3QgY29uc2lkZXIgMCBmY2NfaGFuZGxlciBhcyB1bmNvbXByZXNzZWQuCi0JICBKdXN0IGF2b2lkcyBhIHdhcm5pbmcKLQotMjAxMS0wMS0yMCAxMjoxNDowOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogdGFrZSBjb25maWd1cmVkIHN0YXJ0IHRpbWUgaW50byBhY2NvdW50Ci0JICB3aGVuIGNyZWF0aW5nIHRoZSBuZXdzZWdtZW50IGV2ZW50LCB0YWtlIHRoZSBjb25maWd1cmVkIHN0YXJ0IHRpbWUKLQkgIGludG8gYWNjb3VudC4KLQotMjAxMS0wMS0yNCAxNToxMTowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBwcmludGYgZm9ybWF0IHdhcm5pbmcgb24gbWluZ3czMgotCSAgTWFrZSB3aW4zMiBidWlsZCBib3QgaGFwcHkgYWdhaW4sIGFuZCBuaWNlZnkgb3V0cHV0IHdoaWxlIHdlJ3JlIGF0IGl0LgotCSAgcXRkZW11eC5jOiBJbiBmdW5jdGlvbiAncXRkZW11eF9wYXJzZV90cnVuJzoKLQkgIHF0ZGVtdXguYzoyMTYyOjM6IGVycm9yOiBmb3JtYXQgJyVsdScgZXhwZWN0cyB0eXBlICdsb25nIHVuc2lnbmVkIGludCcsIGJ1dCBhcmd1bWVudCA5IGhhcyB0eXBlICdndWludDMyJwotCi0yMDExLTAxLTI0IDEzOjM5OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1BTVIuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLVBDTUEuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zaDoKLQkgIGV4YW1wbGVzOiBhdXRvYXVkaXNpbmsgLT4gYXV0b2F1ZGlvc2luayBpbiBSVFAgZXhhbXBsZXMKLQotMjAxMS0wMS0yNCAwMDozMjo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMC4yNyA9PT0KLQotMjAxMS0wMS0yMSAxMjo1NDoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjcKLQotMjAxMS0wMS0yMCAxNDoxMDo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBoMjY0ZGVwYXk6IGRvbid0IGxlYWsgY29kZWMgZGF0YSBidWZmZXIgaW4gYnl0ZS1zdHJlYW09dHJ1ZSBtb2RlCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwMDYzCi0KLTIwMTEtMDEtMjAgMTM6NDE6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBkb24ndCBsZWFrIHVybCBzdHJpbmcKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NDAwNjQKLQotMjAxMS0wMS0yMCAxMTo0NTo0NyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEdyYWNlZnVsbHkgaGFuZGxlIG1vdiBmaWxlcyBtaXN1c2luZyB0aGUgV0FWRSBhdG9tcwotCSAgQ2hlY2sgdGhhdCB0aGUgV0FWRUhFQURFUiBub2RlIGlzIHByZXNlbnQgaW5zdGVhZCBvZiBibGluZGx5IHVzaW5nIGl0LgotCSAgSWYgbm90IHByZXNlbnQgd2Ugd29uJ3QgYmUgYWJsZSB0byBwcm92aWRlIGEgbW9yZSByZWZpbmVkIGNhcHMsIGJ1dCBhdAotCSAgbGVhc3Qgd2Ugd29uJ3QgY3Jhc2guCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwMDI4Ci0KLTIwMTEtMDEtMjAgMDA6MDc6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IGZpeCBhY2NpZGVudGFsIGJyZWFrYWdlIG9mIG5hdmlnYXRpb24gaW50ZXJmYWNlIHN1cHBvcnQKLQotMjAxMS0wMS0xOCAxMjo1ODoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjYuNCBwcmUtcmVsZWFzZQotCi0yMDExLTAxLTEyIDE0OjAzOjU3IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmM6Ci0JICBkZWludGVybGFjZTogcmV3cml0ZSBob3cgbmVpZ2hib3Jpbmcgc2NhbiBsaW5lcyBhcmUgY2FsY3VsYXRlZAotCSAgT2xkIGNvZGUgd2FzIGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBuZWlnaGJvcmluZwotCSAgc2NhbiBsaW5lcyBhcmUgY2FsY3VsYXRlZCwgYW5kIGl0IGFwcGVhcmVkIHRoYXQgc29tZSB3ZXJlIG9mZiBieQotCSAgKzIgb3IgLTIsIGRlcGVuZGluZyBvbiB0aGUgZmllbGQgZmxhZy4gIEZpeGVzICM2MzkzMjEuCi0KLTIwMTEtMDEtMTggMDk6MzM6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmM6Ci0JICBhdmlzdWJ0aXRsZTogc2V0IGNhcHMgb24gc3JjcGFkIHRvIGZpeCBpc3N1ZSB3aXRoIGRpc2NvdmVyZXIKLQkgIFNldCBjYXBzIGZyb20gdGhlIHN0YXJ0IHNvIGRpc2NvdmVyZXIgZG9lc24ndCBibG93IHVwIG9uCi0JICBzZWVpbmcgbm8gbmVnb3RpYXRlZCBjYXBzIGJldHdlZW4gZWxlbWVudHMgb24gcHJlcm9sbCwKLQkgIHdoaWNoIG1pZ2h0IGhhcHBlbiBpZiBubyBzdWJ0aXRsZSBidWZmZXJzIGhhdmUgYmVlbgotCSAgcHVzaGVkIHlldCBhdCB0aGUgdGltZS4gU2VlIGZpbGUgZnJvbSBidWcgIzYwMzMwOC4KLQotMjAxMS0wMS0xNyAyMDowOToxNiArMDUzMCAgQXJ1biBSYWdoYXZhbiA8YXJ1bi5yYWdoYXZhbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogVW5jb3JrIHN0cmVhbSB3aGlsZSBmbHVzaGluZyB0aGUgcmluZ2J1ZmZlcgotCSAgQWZ0ZXIgc3RhcnRpbmcgdGhlIHJpbmdidWZmZXIsIHdlIHdhaXQgZm9yIGVub3VnaCBkYXRhIHRvIGFycml2ZSBiZWZvcmUKLQkgIHVuY29ya2luZyB0aGUgc3RyZWFtLiBUaGlzIHdpbGwgY2F1c2UgdGhlIHBpcGVsaW5lIHRvIHN0YWxsIGlmIHdlIGdldCBhbgotCSAgRU9TIChvciBvdGhlcndpc2UgbmVlZCB0byBmbHVzaCB0aGUgc3RyZWFtKSBiZWZvcmUgc3VmZmljaWVudCBkYXRhCi0JICBiZWNvbWVzIGF2YWlsYWJsZS4gVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoYXQgdGhlIHN0cmVhbSBpcyB1bmNvcmtlZAotCSAgd2hpbGUgZmx1c2hpbmcgdG8gYXZvaWQgdGhpcyBwcm9ibGVtLgotCSAgRml4ZXMgaXNzdWUgd2l0aCBhIHdlYmtpdCB1bml0IHRlc3QgdGVzdGluZyByZXZlcnNlIHBsYXliYWNrIG9mCi0JICBhbiBNUDQgSC4yNjQvQUFDIGZpbGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM5NzQwCi0KLTIwMTEtMDEtMTQgMTQ6NTE6NTEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogYXZvaWQgY3JlYXRpbmcgY2FwcyBmcm9tIHN0cmluZyB3aGVuIHBvc3NpYmxlCi0JICBGaXhlcyAjNjM5NTE2LgotCi0yMDExLTAxLTE0IDE0OjQ4OjQ5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogc2V0IHNyYyBwYWQgY2FwcyB3aGVuIHN0YXJ0aW5nIGZpbGUKLQkgIEZpeGVzICM2Mzk1MTYuCi0KLTIwMTEtMDEtMTIgMjA6Mzg6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogZGVmaW5lIFY0TDJfRklFTERfSU5URVJMQUNFRF97VEIsQlR9IGlmIG5vdCBhdmFpbGFibGUgaW4gaGVhZGVyCi0JICBPbGRlciBrZXJuZWxzIGRvbid0IGhhdmUgdGhlc2UsIGFuZCB0aGVyZSdzIG5vIGVhc3kgd2F5IHRvIGNoZWNrIGZvciB0aGUKLQkgIGV4aXN0YW5jZSBvZiBlbnVtcyB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBhIGNvbmZpZ3VyZSBjaGVjaywgc28ganVzdCBkZWZpbmUKLQkgIHRoZXNlIGlmIHRoZSBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWSBkZWZpbmUgaXMgbm90IHRoZXJlLCB3aGljaCB3YXMKLQkgIGFkZGVkIGluIHRoZSBzYW1lIGNvbW1pdCBhcyB0aGUgVEIvQlQgZW51bS4gRml4ZXMgY29tcGlsYXRpb24gb24gQ2VudE9TIDUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM5MzM5Ci0KLTIwMTEtMDEtMTEgMjM6MTg6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICAwLjEwLjI2LjMgcHJlLXJlbGVhc2UKLQotMjAxMS0wMS0xMSAyMjo0Mjo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBkb2NzOiB1cGRhdGUgZG9jcwotCi0yMDExLTAxLTExIDIzOjM5OjEyICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBNYWtlIGNvcmtpbmcgZHVyaW5nIHBhdXNlIHN5bmNocm9ub3VzCi0JICBUaGlzIG1ha2VzIHRoZSBjYWxsIHRvIHBhX3N0cmVhbV9jb3JrKCkgZHVyaW5nIHJpbmdidWZmZXIgcGF1c2UoKQotCSAgc3luY2hyb25vdXMsIHdoaWNoIG1ha2VzIHN1cmUgdGhhdCB0aGUgY2xvY2sgZG9lcyBub3QgYWR2YW5jZSBhZnRlciB3ZQotCSAgdGFrZSBhIHNuYXBzaG90IGZvciBzdGFydF90aW1lLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzOTI0MAotCi0yMDExLTAxLTExIDE5OjMzOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vZGEucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDExLTAxLTExIDE1OjUwOjI4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBlNTcyYzg3IHRvIGY5NGQ3MzkKLQotMjAxMS0wMS0xMCAxNjozNjoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBjY2JhYTg1IHRvIGU1NzJjODcKLQotMjAxMS0wMS0xMCAxNDo1MzozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA0NjQ0NWFkIHRvIGNjYmFhODUKLQotMjAxMS0wMS0wNyAxMzoyNDowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjYuMiBwcmUtcmVsZWFzZQotCi0yMDExLTAxLTA3IDEzOjA2OjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMS0wMS0wNyAwMjozMjoyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IGZpeCBjb21waWxlciB3YXJuaW5ncyBjYXVzZWQgYnkgLURHX0RJU0FCTEVfQVNTRVJUCi0KLTIwMTEtMDEtMDcgMDI6MDY6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JICBtYXRyb3NrYTogZG9uJ3QgcHV0IGVzc2VudGlhbCBmdW5jdGlvbiBjYWxscyBpbnRvIGdfYXNzZXJ0KCkKLQkgIGdfYXNzZXJ0KCkgd2lsbCBleHBhbmQgdG8gTk9PUHMgaWYgLURHX0RJU0FCTEVfQVNTRVJUIGlzIHBhc3NlZC4KLQotMjAxMS0wMS0wNyAwMTozNTo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogZG9uJ3QgcHV0IGZ1bmN0aW9uYWwgY29kZSBsaWtlIGlvY3RsIGNhbGxzIGludG8gZ19yZXR1cm5faWZfZmFpbCgpCi0JICBUaGVzZSBtYWNyb3Mgd2lsbCBleHBhbmQgdG8gTk9PUHMgZ2l2ZW4gdGhlIHJpZ2h0IGRlZmluZXMuIEFsc28sCi0JICBnX3JldHVybl9pZl9mYWlsKCkgYW5kIGZyaWVuZHMgYXJlIG1lYW50IHRvIGJlIHVzZWQgdG8gY2F0Y2ggcHJvZ3JhbW1pbmcKLQkgIGVycm9ycyAobGlrZSBpbnZhbGlkIGlucHV0IHRvIGZ1bmN0aW9ucyksIG5vdCBydW50aW1lIGVycm9yIGhhbmRsaW5nLgotCi0yMDExLTAxLTA3IDAxOjExOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogbmV2ZXIgZGlzYWJsZSBnX2Fzc2VydCgpIGFuZCBjYXN0IGNoZWNrcyBmb3IgdGhlIHVuaXQgdGVzdHMKLQkgIFRoZSB1bml0IHRlc3RzIGFyZSByaWRkbGVkIHdpdGggZ19hc3NlcnQoKSBhbmQgZnJpZW5kcywgbWFrZSBzdXJlIHdlCi0JICBkb24ndCBkaXNhYmxlIGFzc2VydCBhbmQgY2FzdCBjaGVja3MgZm9yIHRoZSB1bml0IHRlc3RzIGV2ZW4gaWYKLQkgIHRoaXMgaGFzIGJlZW4gc3BlY2lmaWVkIGZvciB0aGUgcmVzdCBvZiB0aGUgY29kZSBiYXNlLCBlLmcuIHZpYQotCSAgLS1kaXNhYmxlLWdsaWItYXNzZXJ0cy4KLQotMjAxMS0wMS0wNiAxMjoyOToyMSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JICBydHA6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZXMgb24gbWFjb3N4Ci0KLTIwMTEtMDEtMDYgMTI6Mjg6NTggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXg6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZXMgb24gbWFjb3N4Ci0KLTIwMTEtMDEtMDUgMTc6NDk6MTYgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzZGVidWcuYzoKLQkgIGNhcHNkZWJ1ZzogQWRkIGNhcGRlYnVnIGRlYnVnIGNhdGVnb3J5Ci0KLTIwMTAtMTItMTEgMTI6NDI6MTAgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBDaGFuZ2UgdGhlIGRlZmF1bHQgdG8gbGluZWFyCi0JICBUaGUgcHJldmlvdXMgZGVmYXVsdCwgZ3JlZWR5aCwgdGFrZXMgNCB0aW1lcyBhcyBsb25nIGFzIE1QRUctMgotCSAgdmlkZW8gZGVjb2RpbmcsIGFuZCBpcyB1bmxpa2VseSBmYXN0IGVub3VnaCBvbiBhbnkgY3VycmVudCBDUFUKLQkgIHRvIHBsYXkgMTA4MGkgdmlkZW8gaW4gcmVhbC10aW1lLiAgZ3JlZWR5bCBpc24ndCBtdWNoIGZhc3Rlci4KLQkgIGxpbmVhciB3YXMgY2hvc2VuIG92ZXIgdmZpciwgc2luY2UgdGhlIHF1YWxpdHkgYWR2YW50YWdlIG9mIHZmaXIKLQkgIGlzIG1pbmltYWwgY29tcGFyZWQgdG8gdGhlIG9jY2FzaW9uYWwgdmlzdWFsIGFydGlmYWN0cyBhbmQgc2xvd2VyCi0JICBwcm9jZXNzaW5nLgotCi0yMDExLTAxLTA1IDE4OjMyOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBkb24ndCBjb25mdXNlIHJldHVybiB2YWx1ZXMKLQkgIFJldHVybiBhIHJldHVybiB2YWx1ZSBvZiB0aGUgcmlnaHQgdHlwZS4KLQotMjAxMS0wMS0wNSAxNjoyNDoxMyArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZHVtcC5jOgotCSAgcXRkZW11eDogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlcyBvbiBtYWNvc3gKLQotMjAxMS0wMS0wNSAxNTowMzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkgIHZyYXdkZXBheTogZml4IGxlbmd0aCBjaGVjawotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcuCi0JICBBZGQgdGhlIGxlbmd0aCBjaGVjayBzbyB3ZSBkb24ndCBjYXVzZSB1bm5lZWRlZCB3YXJuaW5ncy4KLQotMjAxMS0wMS0wNSAxMjowNDowMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBtdWx0aXVkcHNpbms6IGFkZCBidWZmZXItc2l6ZSBwcm9wZXJ0eQotCSAgQWRkIGJ1ZmZlci1zaXplIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsIHNlbmQgYnVmZmVyLgotCi0yMDExLTAxLTAzIDIwOjE2OjIyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIHdoZW4gZGVidWctbG9nZ2luZyBkaXNhYmxlZAotCi0yMDExLTAxLTAzIDIwOjA2OjM1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIHdoZW4gZGVidWctbG9nZ2luZyBkaXNhYmxlZAotCi0yMDExLTAxLTAzIDE4OjA1OjE1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSAgY2FjYXNpbms6IGZpeCBtYXNrcyBhbmQgc3RyaWRlcwotCSAgVXNlIHRoZSByaWdodCBlbmRpYW5uZXNzIHRvIHJlYWQgdGhlIG1hc2tzLgotCSAgVXNlIHRoZSByaWdodCBzdHJpZGVzIGZvciB0aGUgYml0bWFwLgotCSAgRml4ZXMgIzYzODU2OQotCi0yMDExLTAxLTAzIDAxOjE4OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogdW5kbyBwcmVzdW1hYmx5IGFjY2lkZW50YWwgZW5hYmxlbWVudCBvZiB0aGUgR3N0WE92ZXJsYXkgaW50ZXJmYWNlCi0JICBMb29rcyBsaWtlIHRoaXMgZ290IGVuYWJsZWQgYnkgYWNjaWRlbnQgd2hlbiBhZGRpbmcgaXQgdG8gdjRsMnNpbmssCi0JICBzbyB1bmRvIHRoaXMgZm9yIG5vdy4gTm90IHN1cmUgaXQgbWFrZXMgbXVjaCBzZW5zZSBpbiBhIEdTdHJlYW1lcgotCSAgY29udGV4dCB3aXRoIGN1cnJlbnQgaGFyZHdhcmUuCi0KLTIwMTEtMDEtMDMgMTU6NDA6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGluY3JlYXNlIHVkcCBidWZmZXIgc2l6ZQotCSAgU2V0IGEgYmlnZ2VyIFVEUCBidWZmZXIgc2l6ZSBieSBkZWZhdWx0IHRvIHJlZHVjZSBwYWNrZXQgbG9zcyB3aXRoCi0JICBoaWdoIGJpdHJhdGUgc3RyZWFtcy4KLQotMjAxMS0wMS0wMiAxOToxOToyNyAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBtdWx0aWZpbGVzaW5rOiBzZW5kIHN0cmVhbSBoZWFkZXJzIGluIGtleS1mcmFtZSBtb2RlCi0KLTIwMTEtMDEtMDIgMTk6NDM6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvamFjay9NYWtlZmlsZS5hbToKLQkqIGV4dC9qYWNrL1JFQURNRToKLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogZml4IHVwIGVsZW1lbnQgZGV0YWlscyBhbmQgc29tZSBvdGhlciBtaW5vciBjbGVhbi11cHMKLQotMjAxMS0wMS0wMiAxOToyMzo1MSArMDAwMCAgRXJpY2ggU2NodWJlcnQgPGVyaWNoQGRlYmlhbi5vcmc+Ci0KLQkqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOgotCSAgaWQzZGVtdXg6IGZpeCBwYXJzaW5nIG9mIElEM3YyLjQgZ2VucmUgZnJhbWVzIHdpdGggbXVsdGlwbGUgZ2VucmVzCi0JICBXZSdkIG9ubHkgZXh0cmFjdCB0aGUgZmlyc3QgZ2VucmUgKG11bHRpcGxlIHRpbWVzKSBpbnN0ZWFkIG9mIGFsbAotCSAgZ2VucmVzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODUzNQotCi0yMDExLTAxLTAyIDE3OjQwOjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBqYWNrOiB0ZW1wbGF0ZSBjYXBzIGhhZCBsaXN0cyB3aXRoIG9uZSB2YWx1ZSwganVzdCB1c2UgdmFsdWUgZGlyZWN0bHkKLQotMjAxMS0wMS0wMiAxNzowNzoxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogbWFrZSBnZXRfdHlwZSBmdW5jdGlvbnMgdGhyZWFkLXNhZmUKLQkgIEJlY2F1c2Ugd2UgY2FuIChzaG91bGRuJ3QgYmUgbmVlZGVkIHdpdGggb3RoZXIgd29ya2Fyb3VuZHMgc3RpbGwgdGhlcmUpLgotCi0yMDExLTAxLTAyIDE1OjI3OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JICBkb2NzOiB1cGRhdGUgcGx1Z2luIGRvY3MKLQotMjAxMS0wMS0wMiAxNToyNTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlLmFtOgotCSAgamFjazogbmV3IGphY2thdWRpb3NyYyBhbmQgamFja2F1ZGlvc2luayBlbGVtZW50cywgbW92ZWQgZnJvbSBnc3QtcGx1Z2lucy1iYWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjE5MjkKLQotMjAxMC0xMC0xOSAxNjoyMzoyMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIHZhcmlvdXMgKGV4dCk6IGFkZCBtaXNzaW5nIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZmxhZ3MKLQkgIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyBhcyBuZWVkZWQuCi0KLTIwMTAtMDktMDkgMTQ6NDk6MDYgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPGxlLmJ1c2luZXNzbWFuQGdtYWlsLmNvbT4KLQotCSogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGFkZGVkIHRyYW5zbGF0YWJsZSB0ZXh0IGZvciBzZXJ2ZXIgbm90IGZvdW5kIGVycm9yCi0KLTIwMTAtMDktMDYgMTc6MTc6NTQgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPGxlLmJ1c2luZXNzbWFuQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvZXhhbXBsZXMvamFjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL2phY2svamFja19jbGllbnQuYzoKLQkgIGV4YW1wbGVzOiBhZGQgdGVzdCB0byBkZW1vbnN0cmF0ZSBqYWNrX2NsaWVudF90IHVzYWdlCi0KLTIwMTAtMDktMDYgMTY6MTE6MzEgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPGxlLmJ1c2luZXNzbWFuQGdtYWlsLmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmg6Ci0JICBqYWNrOiBhZGRlZCBjbGllbnQgcHJvcGVydHkKLQotMjAxMC0wNi0xNyAxNjoyNjowNyAtMDQwMCAgVHJpc3RhbiBNYXR0aGV3cyA8dHJpc3RhbkBzYXQucWMuY2E+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2tiaW4uYzoKLQkgIGphY2s6IHJlbW92ZWQgdW51c2VkIGZpbGUgZ3N0amFja2Jpbi5jCi0JICBUaGlzIGlzIGEgMC44IGxlZnRvdmVyLgotCi0yMDEwLTA1LTEzIDEyOjU1OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2tzcmM6IG1ha2Ugc3VyZSB3ZSBhbHdheXMgcmVhZCBuZnJhbWVzCi0JICBFcnJvciBvdXQgd2hlbiB3ZSBhcmUgYXNrZWQgdG8gcmVhZCBhIGRpZmZlcmVudCBzaXplIHRoYXQgd2hhdCB3YXMgY29uZmlndXJlZCBhcwotCSAgdGhlIGphY2sgcGVyaW9kIHNpemUgYmVjYXVzZSB0aGF0IHdvdWxkIG1lYW4gc29tZXRoaW5nIGVsc2UgaXMgd3JvbmcuCi0JICBGaXhlcyAjNjE4NDA5Ci0KLTIwMTAtMDUtMTEgMTc6NTY6MzEgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5oOgotCSAgamFjazogaW1wcm92ZSBwcm9jZXNzX2NiCi0KLTIwMTAtMDQtMjcgMTA6NDg6MzIgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5AdHJpc3Rhbi1sYXB0b3AuKG5vbmUpPgotCi0JKiBleHQvamFjay9NYWtlZmlsZS5hbToKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L2phY2svZ3N0amFja3V0aWwuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2t1dGlsLmg6Ci0JICBqYWNrOiBpbXBsZW1lbnQgbXVsdGljaGFubmVsIHN1cHBvcnQgY29ycmVjdGx5IGZvciBqYWNrYXVkaW9zcmMKLQkgIEZpeGVzIHBhcnRzIG9mIGJ1ZyAjNjE2NTQxLgotCi0yMDEwLTA0LTI3IDExOjIxOjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSogZXh0L2phY2svZ3N0amFja3JpbmdidWZmZXIuaDoKLQkgIGphY2s6IHJlbW92ZSBlbXB0eSBkaXNwb3NlIGFuZCBmaW5hbGl6ZSBtZXRob2RzCi0KLTIwMTAtMDQtMjcgMTA6NTk6MDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBqYWNrOiBkb24ndCBsZWFrIGNhcHMKLQkgIEFkZCBkaXNwb3NlIG1ldGhvZHMgdG8gY2xlYXIgY2Fwcy4KLQotMjAxMC0wNC0yNyAxMDozNDoyNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGRvbid0IHVzZSBHU1RfREVCVUdfRlVOQ1BUUiBmb3IgZ29iamVjdCB2bWV0aG9kcwotCi0yMDEwLTAzLTI0IDE1OjU5OjUzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogZml4IGVsZW1lbnQgbmFtZSBpbiBzZWN0aW9uIGRvYyBibG9iCi0KLTIwMTAtMDMtMjIgMTY6NTY6MDMgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBBZGQgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgotCSAgYW5kIGZpeCB0aGUgd2FybmluZ3MKLQotMjAxMC0wMy0yMSAyMTozOToxOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JICBBZGQgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyB0byBjb25maWd1cmUgZmxhZ3MKLQkgIEFuZCBmaXggYWxsIHdhcm5pbmdzCi0KLTIwMTAtMDMtMTggMTc6MzA6MjYgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyA9PiBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUKLQotMjAwOS0xMC0xMiAwOTowNjozNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIGphY2s6IGVuc3VyZSBzZWd0b3RhbCBpcyBhdCBsZWFzdCAyCi0JICBOb3Qgb25seSBhZGp1c3QgYnVmZmVyLXRpbWUgYW5kIGF2b2lkIHNlZ3RvdGFsPTAsIGJ1dCBpbnN0ZWFkIGVuc3VyZSBzZWd0b3RhbCBpcwotCSAgYXRsZWFzdCAyLiBEbyBzYW1lIGNoYW5nZSBvbiBqYWNrc3JjLiBXZSBjb3VsZCBhbHNvIGNoZWNrIHRoZSBsYXRlbmN5IGFuZCBidWZmZXIKLQkgIHRpbWUgY29uZmlndXJlZCBieSB0aGUgY2xpZW50IGFuZCBhZGp1c3QgYnVmZmVyLXRpbWUgc28gdGhhdCB3ZSBnZXQgdG8gdGhlIHNhbWUKLQkgIG51bWJlciBvZiBzZWdtZW50cy4KLQotMjAwOS0xMC0xMiAwMDo1MToyNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JICBqYWNrOiBkb24ndCBjcmFzaCBpbiByaW5nYnVmZmVyIHdpdGggU0lHRlBFIG9uIHNtYWxsIGJ1ZmZlci10aW1lcwotCSAgSmFjayBvdmVycmlkZXMgdXNlci1zcGVjaWZpZWQgbGF0ZW5jeS10aW1lIHdpdGggdGhlIG9uZSBpdCBnZXRzIGZyb20gamFjawotCSAgaXRzZWxmLiBJdCBhbHNvIG5lZWRzIHRvIGFkanVzdCBidWZmZXItdGltZSBzb21ld2hhdCB0byBhdm9pZCBzZWd0b3RhbCBiZWluZyAwCi0KLTIwMDktMDUtMTEgMTY6MTI6NTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JICBqYWNrOiB3aGVuIHN0b3BwaW5nIHBsYXliYWNrLCBkbyBvbmUgbW9yZSBjeWNsZSB0byBmbHVzaCB0aGUgcG9ydC4gRml4ZXMgIzU4MjE2NwotCSAgVGhlIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9zZXRfYWN0aXZlKCkgZmxhZ3MgdGhlIHBvcnQgYXMgZGVhY3RpdmF0aW5nIGFuZCB1c2VzCi0JICBhIEdDb25kIHRvIHdhaXQgdW50aWwgdGhlIGphY2tfcHJvY2Vzc19jYigpIGhhcyBydW4gb25jZSBtb3JlIGFuZCBjbGVhcmVkIHRoZQotCSAgZmxhZy4gVGhpcyB3YXkgdGhlIGNsaWVudCB6ZXJvJ3MgdGhlIGJ1ZmZlci4gVGhpcyBoYXBwZW5zIGlmIG9uZSBtYW55YWxseSBnbwotCSAgdG8gUEFVU0VEIGFuZCB0aGVuIHRvIFJFQURZLCB3aGlsZSBsZXRpbmcgdGhlIG1haW5sb29wIHJ1biBpbmJldHdlZW4uCi0KLTIwMDktMDMtMTYgMTE6MjE6MDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkqIGV4dC9qYWNrL2dzdGphY2suaDoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgamFjazogQWRkIG5ldyBjb25uZWN0aW9uIG1vZGUKLQkgIEFkZCBhIG5ldyBjb25uZWN0aW9uIG1vZGUgdG8gamFja3NyYyBhbmQgamFja3NpbmsuIEluIHRoaXMgbmV3IGF1dG8tZm9yY2UKLQkgIGNvbm5lY3Rpb24gbW9kZSBqYWNrIHdpbGwgY3JlYXRlIGFzIG1hbnkgcG9ydHMgYXMgcmVxdWVzdGVkL25lZWRlZCBpbiB0aGUKLQkgIHBpcGVsaW5lIGFuZCB3aWxsIHRoZW4gY29ubmVjdCBhcyBtYW55IHBoeXNpY2FsIHBvcnRzIGFzIHBvc3NpYmxlLCBwb3NzaWJseQotCSAgbGVhdmluZyBzb21lIHBvcnRzIHVuY29ubmVjdGVkLgotCSAgQWxzbyBnZXQgcmlkIG9mIHNvbWUgbGVmdG92ZXIgZ19wcmludC4KLQkgIEZpeGVzICM1NzUyODQuCi0KLTIwMDgtMTEtMjMgMTc6NTA6MDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZXh0L2phY2svOiBRdWVyeSBwb3J0IGxhdGVuY2llcyBmb3Igc2luay9zcmMgZGVsYXlzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmM6Ci0JICBRdWVyeSBwb3J0IGxhdGVuY2llcyBmb3Igc2luay9zcmMgZGVsYXlzLgotCSAgKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBObyBwcmludGYgcGxlYXNlLgotCi0yMDA4LTExLTA0IDEyOjQyOjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2Fsc2FzcGRpZi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FtcndiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXBleHNpbmsvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hcnRzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXJ0c2QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb2ZpbGUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYnoyL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2RhdWRpby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NlbHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kYzEzOTQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kaXJhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RpcmVjdGZiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGl2eC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2R0cy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2ZhYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9mYWFkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZ3NtL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaGVybWVzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaXZvcmJpcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qcDJrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGFkc3BhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGNzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGliZmFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xpYm1tcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXBlZzJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tcGxleC9NYWtlZmlsZS5hbToKLQkgICogZXh0L211c2VwYWNrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXVzaWNicmFpbnovTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9teXRodHYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uYXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uZW9uL01ha2VmaWxlLmFtOgotCSAgKiBleHQvb2ZhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcG9seXAvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9yZXNpbmR2ZC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NkbC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Nob3V0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc25hcHNob3QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zbmRmaWxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291bmR0b3VjaC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NwYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3N3ZmRlYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Rhcmtpbi9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RoZW9yYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RpbWlkaXR5L01ha2VmaWxlLmFtOgotCSAgKiBleHQvdHdvbGFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3gyNjQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC94aW5lL01ha2VmaWxlLmFtOgotCSAgKiBleHQveHZpZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2FwcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2RzaG93L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYWlmZnBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXBwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9idWZmZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXllci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NkeGFwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NoYXJ0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY29sb3JzcGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RjY3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2R2ZHNwdS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Zlc3RpdmFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmlsdGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmxhY3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ2FtZXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9oMjY0cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9saWJyZmIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9taXhtYXRyaXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tb2RwbHVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZzFzeXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnNHZpZGVvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnZGVtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndHNtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndmlkZW9wYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L212ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L25zZi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L251dmRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvb3ZlcmxheS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGNhcHBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGxheW9uZGVtYW5kL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcmF3cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZWFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRqcGVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NjYWxldGVtcG8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZWxlY3Rvci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aHdhdmUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVlZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NwZWV4cmVzYW1wbGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdGVyZW8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdWJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC90dGEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92YmlkZWMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2Ryb3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpcnR1YWxkdWIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92bW5jL01ha2VmaWxlLmFtOgotCSAgKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvYWNtZW5jL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvY2Ryb20vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd2RlY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kdmIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9keHIzL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZmJkZXYvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3M0L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvcWNhbS9NYWtlZmlsZS5hbToKLQkgICogc3lzL3F0d3JhcHBlci9NYWtlZmlsZS5hbToKLQkgICogc3lzL3ZjZC9NYWtlZmlsZS5hbToKLQkgICogc3lzL3dpbmluZXQvTWFrZWZpbGUuYW06Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0KLTIwMDgtMDktMTcgMTM6NTk6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBGaXggY29tcGlsZXIgd2FybmluZ3Mgb24gT1MvWAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogKGphY2tfcHJvY2Vzc19jYik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiAoY2FsY3VsYXRlX3NrZXcpOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIG9uIE9TL1gKLQotMjAwOC0wOC0wNyAxMzoxNToyMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzogVHJ5IGNvbW1pdHRpbmcgdGhpcyBvbmNlIGFnYWluLiBOb3cgcHJvcGVybHkgcmVuYW1lZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgIFRyeSBjb21taXR0aW5nIHRoaXMgb25jZSBhZ2Fpbi4gTm93IHByb3Blcmx5IHJlbmFtZWQuCi0KLTIwMDgtMDgtMDcgMDk6MDk6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zLzogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWwKLQkgIEFkZCBuZXcgZWxlbWVudCB0byBkb2NzLgotCSAgKiBleHQvamFjay9nc3RqYWNrLmgKLQkgIEFkZCBtaXNzaW5nIGZpbGUuCi0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuaDoKLQkgIFJlbmFtZSBqYWNrYXVkaW9zcmMgdG8gamFja19hdWRpb19zcmMuCi0KLTIwMDgtMDgtMDcgMDg6NDc6NDAgKzAwMDAgIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotCi0JICBleHQvamFjay86IEFkZCBhIGphY2thdWRpb3NyYy4gUmVmYWN0b3Igc2luayBzbGlnaHRseSBmb3IgYmV0dGVyIGNvZGUgcmV1c2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBhdGNoIGJ5OiBUcmlzdGFuIE1hdHRoZXdzIDx0cmlzdGFuQHNhdC5xYy5jYT4KLQkgICogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5oOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmg6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2tyaW5nYnVmZmVyLmg6Ci0JICBBZGQgYSBqYWNrYXVkaW9zcmMuIFJlZmFjdG9yIHNpbmsgc2xpZ2h0bHkgZm9yIGJldHRlciBjb2RlIHJldXNlLgotCSAgRml4ZXMgIzU0NTE5Ny4KLQotMjAwOC0wNi0xMyAxMTo1OToyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXl0aHR2LnhtbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLnNpZ25hbHM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHNhc3BkaWYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW1yd2IueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJheWVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJ6Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGF1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkeGFwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdHNkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHZiLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2ZHNwdS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mYWFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZhYWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmJkZXZzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZlc3RpdmFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZpbHRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHZkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mcmVlemUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3NtLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdGludGVybGFjZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWgyNjRwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1ldGFkYXRhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1tcy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb2RwbHVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWcyZW5jLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWc0dmlkZW9wYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tcGVndHNwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tcGVndmlkZW9wYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdXNlcGFjay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdXNpY2JyYWluei54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdmUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXl0aHR2LnhtbAotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmFzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5lb24ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbnNmZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW51dmRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sCi0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yYXdwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZWFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmZic3JjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNkbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2VsZWN0b3IueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc25kZmlsZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VuZHRvdWNoLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwY2RlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVlZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleHJlc2FtcGxlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXN0ZXJlby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zdWJlbmMueG1sCi0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10aW1pZGl0eS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10dGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmNkc3JjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvc2lnbmFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZtbmMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2lsZG1pZGkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teDI2NC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14dmlkLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmRlYy5jOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JlbmMuYzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndicGFyc2UuYzoKLQkgICogZXh0L2RjMTM5NC9nc3RkYzEzOTQuYzoKLQkgICogZXh0L2RpcmVjdGZiL2RmYnZpZGVvc2luay5jOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNkZWMuYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSAgKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmMuY2M6Ci0JICAqIGV4dC9tcGxleC9nc3RtcGxleC5jYzoKLQkgICogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOgotCSAgKiBleHQvbXl0aHR2L2dzdG15dGh0dnNyYy5jOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOgotCSAgKiBleHQvdGltaWRpdHkvZ3N0dGltaWRpdHkuYzoKLQkgICogZXh0L3RpbWlkaXR5L2dzdHdpbGRtaWRpLmM6Ci0JICAqIGdzdC1saWJzL2dzdC9hcHAvZ3N0YXBwc2luay5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgICogZ3N0L2R2ZHNwdS9nc3RkdmRzcHUuYzoKLQkgICogZ3N0L2Zlc3RpdmFsL2dzdGZlc3RpdmFsLmM6Ci0JICAqIGdzdC9mcmVlemUvZ3N0ZnJlZXplLmM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICAqIGdzdC9tb2RwbHVnL2dzdG1vZHBsdWcuY2M6Ci0JICAqIGdzdC9udXZkZW11eC9nc3RudXZkZW11eC5jOgotCSAgQWRkIG1pc3NpbmcgZWxlbWVudHMgdG8gZG9jcy4gRml4IGRvYy1tYXJrdXA6IHVzZSBjb252aW5pZW5jZSBzeW50YXgKLQkgIGZvciBleGFtcGxlcyAocHJvZHVjZXMgdmFsaWQgZG9jYm9vayksIGFkZCBzZXZlcmFsIHJlZnNlYzIgd2hlbiB3ZQotCSAgaGF2ZSBzZXZlcmFsIHRpdGxlcy4gRml4IHNvbWUgdHlwZXMuCi0KLTIwMDgtMDYtMTIgMTQ6NDk6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRG8gbm90IHVzZSBzaG9ydF9kZXNjcmlwdGlvbiBpbiBzZWN0aW9uIGRvY3MgZm9yIGVsZW1lbnRzLiBXZSBleHRyYWN0IHRoZW0gZnJvbSBlbGVtZW50IGRldGFpbHMgYW5kIHRoZXJlIHdpbGwgYmUgd2FyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2RjMTM5NC9nc3RkYzEzOTQuYzoKLQkgICogZXh0L2l2b3JiaXMvdm9yYmlzZGVjLmM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzoKLQkgICogZXh0L21ldGFkYXRhL2dzdG1ldGFkYXRhZGVtdXguYzoKLQkgICogZXh0L215dGh0di9nc3RteXRodHZzcmMuYzoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzoKLQkgICogZ3N0LWxpYnMvZ3N0L2FwcC9nc3RhcHBzaW5rLmM6Ci0JICAqIGdzdC9iYXllci9nc3RiYXllcjJyZ2IuYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICAqIGdzdC9yYXdwYXJzZS9nc3RhdWRpb3BhcnNlLmM6Ci0JICAqIGdzdC9yYXdwYXJzZS9nc3R2aWRlb3BhcnNlLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgICogZ3N0L3NlbGVjdG9yL2dzdGlucHV0c2VsZWN0b3IuYzoKLQkgICogZ3N0L3NlbGVjdG9yL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb2FuYWx5c2UuYzoKLQkgICogZ3N0L3ZpZGVvc2lnbmFsL2dzdHZpZGVvZGV0ZWN0LmM6Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb21hcmsuYzoKLQkgICogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKLQkgICogc3lzL29zczQvb3NzNC1zb3VyY2UuYzoKLQkgIERvIG5vdCB1c2Ugc2hvcnRfZGVzY3JpcHRpb24gaW4gc2VjdGlvbiBkb2NzIGZvciBlbGVtZW50cy4gV2UgZXh0cmFjdAotCSAgdGhlbSBmcm9tIGVsZW1lbnQgZGV0YWlscyBhbmQgdGhlcmUgd2lsbCBiZSB3YXJuaW5ncyBpZiB0aGV5IGRpZmZlci4KLQkgIEFsc28gZml4aW5nIHVwIHRoZSBDaGFuZ2VMb2cgb3JkZXIuCi0KLTIwMDgtMDUtMjYgMTc6NTI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogSW5jbHVkZSB0aGUgZWxlbWVudCBuYW1lIGluIHRoZSBwb3J0IG5hbWUgdG8gYXZvaWQgZHVwbGljYXRlIHBvcnQgbmFtZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSAgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfYWxsb2NhdGVfY2hhbm5lbHMpOgotCSAgSW5jbHVkZSB0aGUgZWxlbWVudCBuYW1lIGluIHRoZSBwb3J0IG5hbWUgdG8gYXZvaWQgZHVwbGljYXRlIHBvcnQgbmFtZXMuCi0KLTIwMDgtMDQtMDYgMjA6MTg6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogV29yayBhcm91bmQgbWlzc2luZyBiaXRzIG9mIHRocmVhZC1zYWZldHkgb24gb2xkZXIgR0xpYnMgc29tZSBtb3JlIHRvIGF2b2lkIGFzc2VydGlvbnMgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogKGdzdF9qYWNrX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICBXb3JrIGFyb3VuZCBtaXNzaW5nIGJpdHMgb2YgdGhyZWFkLXNhZmV0eSBvbiBvbGRlciBHTGlicyBzb21lCi0JICBtb3JlIHRvIGF2b2lkIGFzc2VydGlvbnMgd2hlbiBzdGFydGluZyB1cCBtdWx0aXBsZSBwbGF5YmluCi0JICBvYmplY3RzIGNvbmN1cnJlbnRseSAoc2VlICM1MTIzODIpLgotCi0yMDA4LTAzLTEzIDE0OjI1OjIwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFVzZSBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSBhbmQgR1NUX1BBQ0tBR0VfT1JJR0lOIGluc3RlYWQgb2YgaGFyZGNvZGluZyB2YWx1ZXMgd2hlcmUgcG9zc2libGUuIEZpeGVzIGJ1ZyAjNTIyMjEyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hbHNhc3BkaWYvYWxzYXNwZGlmc2luay5jOgotCSAgKiBleHQvZ3NtL2dzdGdzbS5jOgotCSAgKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICAqIGV4dC9saWJtbXMvZ3N0bW1zLmM6Ci0JICAqIGV4dC9uZW9uL2dzdG5lb25odHRwc3JjLmM6Ci0JICAqIGV4dC9zaG91dC9nc3RzaG91dC5jOgotCSAgKiBleHQvdGltaWRpdHkvZ3N0dGltaWRpdHkuYzoKLQkgICogZXh0L3RpbWlkaXR5L2dzdHdpbGRtaWRpLmM6Ci0JICAqIGdzdC9udXZkZW11eC9nc3RudXZkZW11eC5jOgotCSAgKiBnc3QvdHRhL2dzdHR0YS5jOgotCSAgVXNlIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FIGFuZCBHU1RfUEFDS0FHRV9PUklHSU4gaW5zdGVhZAotCSAgb2YgaGFyZGNvZGluZyB2YWx1ZXMgd2hlcmUgcG9zc2libGUuIEZpeGVzIGJ1ZyAjNTIyMjEyLgotCi0yMDA3LTA3LTE4IDA3OjQyOjQ3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogQWRkIHN0ZGxpYiBpbmNsdWRlIGhlcmUgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogKGdzdF9qYWNrX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlKSwKLQkgIChnc3RfamFja19yaW5nX2J1ZmZlcl9hY3F1aXJlKToKLQkgIEFkZCBzdGRsaWIgaW5jbHVkZSBoZXJlIHRvby4KLQotMjAwNy0wNC0wNCAwNzozNjoyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6IFRyeSB0IGJldHRlciBuYW1lIGNsaWVudHMuIHByb3Blcmx5IGhhbmRsZSByZXR1cm4gY29kZXMgd2hlbiByZS0gZXN0YWJsaXNoaW5nIGxpbmtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogKGdzdF9qYWNrX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlKSwKLQkgIChnc3RfamFja19yaW5nX2J1ZmZlcl9hY3F1aXJlKToKLQkgIFRyeSB0IGJldHRlciBuYW1lIGNsaWVudHMuIHByb3Blcmx5IGhhbmRsZSByZXR1cm4gY29kZXMgd2hlbiByZS0KLQkgIGVzdGFibGlzaGluZyBsaW5rcy4KLQotMjAwNy0wMy0xOCAxNzo1Nzo0OCArMDAwMCAgUGF1bCBEYXZpcyA8cGF1bEBsaW51eGF1ZGlvc3lzdGVtcy5jb20+Ci0KLQkgIGV4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jOiBEb24ndCBuZWVkIHRvIHRha2UgdGhlIGNvbm5lY3Rpb24gbG9jaywgaXQgd2lsbCBub3QgYmUgdXNlZCBhbmQgY291bGQgY2F1c2UgZGVhZGxvY2tzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogUGF1bCBEYXZpcyA8cGF1bCBhdCBsaW51eGF1ZGlvc3lzdGVtcyBkb3QgY29tPgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuYzogKGdzdF9qYWNrX2F1ZGlvX3VucmVmX2Nvbm5lY3Rpb24pOgotCSAgRG9uJ3QgbmVlZCB0byB0YWtlIHRoZSBjb25uZWN0aW9uIGxvY2ssIGl0IHdpbGwgbm90IGJlIHVzZWQgYW5kIGNvdWxkCi0JICBjYXVzZSBkZWFkbG9ja3MuCi0KLTIwMDctMDMtMDggMTU6MjQ6NTIgKzAwMDAgIFBhdWwgRGF2aXMgPHBhdWxAbGludXhhdWRpb3N5c3RlbXMuY29tPgotCi0JICBleHQvamFjay86IE1ha2UgYW4gb2JqZWN0IHRvIG1hbmFnZSBjbGllbnQgY29ubmVjdGlvbnMgdG8gdGhlIGphY2sgc2VydmVyIHdoaWNoIHdlIHdpbGwgdXNlIGluIHRoZSBmdXR1cmUgdG8gcnVuIHNlbGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSW5jbHVkZXMgcGF0Y2ggYnk6IFBhdWwgRGF2aXMgPHBhdWwgYXQgbGludXhhdWRpb3N5c3RlbXMgZG90IGNvbT4KLQkgICogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jOiAoZ3N0X2phY2tfYXVkaW9fY2xpZW50X2luaXQpLAotCSAgKGphY2tfcHJvY2Vzc19jYiksIChqYWNrX3NhbXBsZV9yYXRlX2NiKSwgKGphY2tfYnVmZmVyX3NpemVfY2IpLAotCSAgKGphY2tfc2h1dGRvd25fY2IpLCAoY29ubmVjdGlvbl9maW5kKSwKLQkgIChnc3RfamFja19hdWRpb19tYWtlX2Nvbm5lY3Rpb24pLCAoZ3N0X2phY2tfYXVkaW9fZ2V0X2Nvbm5lY3Rpb24pLAotCSAgKGdzdF9qYWNrX2F1ZGlvX3VucmVmX2Nvbm5lY3Rpb24pLAotCSAgKGdzdF9qYWNrX2F1ZGlvX2Nvbm5lY3Rpb25fYWRkX2NsaWVudCksCi0JICAoZ3N0X2phY2tfYXVkaW9fY29ubmVjdGlvbl9yZW1vdmVfY2xpZW50KSwKLQkgIChnc3RfamFja19hdWRpb19jbGllbnRfbmV3KSwgKGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9mcmVlKSwKLQkgIChnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudCksCi0JICAoZ3N0X2phY2tfYXVkaW9fY2xpZW50X3NldF9hY3RpdmUpOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuaDoKLQkgIE1ha2UgYW4gb2JqZWN0IHRvIG1hbmFnZSBjbGllbnQgY29ubmVjdGlvbnMgdG8gdGhlIGphY2sgc2VydmVyIHdoaWNoIHdlCi0JICB3aWxsIHVzZSBpbiB0aGUgZnV0dXJlIHRvIHJ1biBzZWxlY3RlZCBqYWNrIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgamFjawotCSAgY29ubmVjdGlvbi4KLQkgIE1ha2Ugc29tZSBzdHVmZiBhIGJpdCBtb3JlIHRocmVhZHNhZmUuCi0JICBBY3RpdmF0ZSB0aGUgamFjayBjbGllbnQgQVNBUC4KLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSAgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfYWxsb2NhdGVfY2hhbm5lbHMpLAotCSAgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfZnJlZV9jaGFubmVscyksIChqYWNrX3Byb2Nlc3NfY2IpLAotCSAgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlKSwKLQkgIChnc3RfamFja19yaW5nX2J1ZmZlcl9jbG9zZV9kZXZpY2UpLAotCSAgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX2FjcXVpcmUpLCAoZ3N0X2phY2tfcmluZ19idWZmZXJfcmVsZWFzZSksCi0JICAoZ3N0X2phY2tfYXVkaW9fc2lua19jbGFzc19pbml0KSwgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfaW5pdCksCi0JICAoZ3N0X2phY2tfYXVkaW9fc2lua19nZXRjYXBzKToKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5oOgotCSAgVXNlIG5ldyBjbGllbnQgb2JqZWN0IHRvIG1hbmFnZSBjb25uZWN0aW9ucy4KLQkgIERvbid0IHJlbW92ZSBhbmQgcmVjcmVhdGUgYWxsIHBvcnRzLCB0cnkgdG8gcmV1c2UgdGhlbS4KLQotMjAwNy0wMS0xMiAxMDoyNTo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay4qOiBJbXByb3ZlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOiAoamFja19zYW1wbGVfcmF0ZV9jYiksCi0JICAoamFja19idWZmZXJfc2l6ZV9jYiksIChqYWNrX3NodXRkb3duX2NiKSwKLQkgIChnc3RfamFja19yaW5nX2J1ZmZlcl9hY3F1aXJlKToKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5oOgotCSAgSW1wcm92ZSBkb2NzLgotCi0yMDA2LTEyLTA2IDE2OjU3OjE3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2phY2svLmN2c2lnbm9yZTogSWdub3JlIG9sZCBmaWxlcyBhcyByZXF1ZXN0ZWQgYnkgdGhlIGJ1aWxkIHNsYXZlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qYWNrLy5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgb2xkIGZpbGVzIGFzIHJlcXVlc3RlZCBieSB0aGUgYnVpbGQgc2xhdmUuCi0KLTIwMDYtMTEtMzAgMTE6NTk6MDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9NYWtlZmlsZS5hbTogRml4IGJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgIEZpeCBidWlsZC4KLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOiAoamFja19wcm9jZXNzX2NiKSwKLQkgIChqYWNrX3NhbXBsZV9yYXRlX2NiKSwgKGphY2tfYnVmZmVyX3NpemVfY2IpLCAoamFja19zaHV0ZG93bl9jYiksCi0JICAoZ3N0X2phY2tfcmluZ19idWZmZXJfYWNxdWlyZSk6Ci0JICBTbWFsbCBjbGVhbnVwcy4KLQotMjAwNi0xMS0zMCAxMTo0OTozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWRkZWQgZnVsbHkgZnVuY3Rpb25hbCBqYWNrYXVkaW9zaW5rLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvamFjay9NYWtlZmlsZS5hbToKLQkgICogZXh0L2phY2svZ3N0amFjay5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYzogKGdzdF9qYWNrX3JpbmdfYnVmZmVyX2dldF90eXBlKSwKLQkgIChnc3RfamFja19yaW5nX2J1ZmZlcl9jbGFzc19pbml0KSwgKGphY2tfcHJvY2Vzc19jYiksCi0JICAoamFja19zYW1wbGVfcmF0ZV9jYiksIChqYWNrX2J1ZmZlcl9zaXplX2NiKSwgKGphY2tfc2h1dGRvd25fY2IpLAotCSAgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX2luaXQpLCAoZ3N0X2phY2tfcmluZ19idWZmZXJfZGlzcG9zZSksCi0JICAoZ3N0X2phY2tfcmluZ19idWZmZXJfZmluYWxpemUpLAotCSAgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlKSwKLQkgIChnc3RfamFja19yaW5nX2J1ZmZlcl9jbG9zZV9kZXZpY2UpLAotCSAgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX2FjcXVpcmUpLCAoZ3N0X2phY2tfcmluZ19idWZmZXJfcmVsZWFzZSksCi0JICAoZ3N0X2phY2tfcmluZ19idWZmZXJfc3RhcnQpLCAoZ3N0X2phY2tfcmluZ19idWZmZXJfcGF1c2UpLAotCSAgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX3N0b3ApLCAoZ3N0X2phY2tfcmluZ19idWZmZXJfZGVsYXkpLAotCSAgKGdzdF9qYWNrX2Nvbm5lY3RfZ2V0X3R5cGUpLCAoZ3N0X2phY2tfYXVkaW9fc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCksIChnc3RfamFja19hdWRpb19zaW5rX2luaXQpLAotCSAgKGdzdF9qYWNrX2F1ZGlvX3Npbmtfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfamFja19hdWRpb19zaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfamFja19hdWRpb19zaW5rX2dldGNhcHMpLAotCSAgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfY3JlYXRlX3JpbmdidWZmZXIpOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmg6Ci0JICBBZGRlZCBmdWxseSBmdW5jdGlvbmFsIGphY2thdWRpb3NpbmsuCi0KLTIwMDYtMDQtMDggMjE6NDg6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRml4ICMzMzczNjUgKGdfdHlwZV9jbGFzc19yZWYgPC0+IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JkZWMuYzogKGdzdF9hbXJ3YmRlY19jbGFzc19pbml0KToKLQkgICogZXh0L2FtcndiL2dzdGFtcndiZW5jLmM6IChnc3RfYW1yd2JlbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YnBhcnNlLmM6IChnc3RfYW1yd2JwYXJzZV9jbGFzc19pbml0KToKLQkgICogZXh0L2FydHMvZ3N0X2FydHMuYzogKGdzdF9hcnRzX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYXJ0c2QvZ3N0YXJ0c2RzaW5rLmM6IChnc3RfYXJ0c2RzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYXVkaW9maWxlL2dzdGFmc2luay5jOiAoZ3N0X2Fmc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5jOiAoZ3N0X2Fmc3JjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYXVkaW9yZXNhbXBsZS9nc3RhdWRpb3Jlc2FtcGxlLmM6Ci0JICAqIGV4dC9jZGF1ZGlvL2dzdGNkYXVkaW8uYzogKGdzdF9jZGF1ZGlvX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmM6IChnc3RfZGZidmlkZW9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6IChnc3RfZGl2eGRlY19jbGFzc19pbml0KToKLQkgICogZXh0L2hlcm1lcy9nc3RoZXJtZXNjb2xvcnNwYWNlLmM6Ci0JICAoZ3N0X2hlcm1lc19jb2xvcnNwYWNlX2NsYXNzX2luaXQpOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNmaWxlLmM6IChnc3RfaXZvcmJpc2ZpbGVfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2suYzogKGdzdF9qYWNrX2NsYXNzX2luaXQpOgotCSAgKiBleHQvamFjay9nc3RqYWNrYmluLmM6IChnc3RfamFja19iaW5fY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9sY3MvZ3N0Y29sb3JzcGFjZS5jOiAoZ3N0X2NvbG9yc3BhY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9saWJmYW1lL2dzdGxpYmZhbWUuYzogKGdzdF9mYW1lZW5jX2NsYXNzX2luaXQpOgotCSAgKiBleHQvbXVzaWNicmFpbnovZ3N0dHJtLmM6IChnc3RfbXVzaWNicmFpbnpfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9uYXMvbmFzc2luay5jOiAoZ3N0X25hc3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9zaG91dC9nc3RzaG91dC5jOiAoZ3N0X2ljZWNhc3RzZW5kX2NsYXNzX2luaXQpOgotCSAgKiBleHQvc25hcHNob3QvZ3N0c25hcHNob3QuYzogKGdzdF9zbmFwc2hvdF9jbGFzc19pbml0KToKLQkgICogZXh0L3NuZGZpbGUvZ3N0c2YuYzogKGdzdF9zZl9jbGFzc19pbml0KToKLQkgICogZXh0L3N3ZmRlYy9nc3Rzd2ZkZWMuYzogKGdzdF9zd2ZkZWNidWZmZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3N3ZmRlY19jbGFzc19pbml0KToKLQkgICogZXh0L3Rhcmtpbi9nc3R0YXJraW5kZWMuYzogKGdzdF90YXJraW5kZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC90YXJraW4vZ3N0dGFya2luZW5jLmM6IChnc3RfdGFya2luZW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFzdHJpcC5jOiAoZ3N0X2NkeGFzdHJpcF9jbGFzc19pbml0KToKLQkgICogZ3N0L2NoYXJ0L2dzdGNoYXJ0LmM6IChnc3RfY2hhcnRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9jb2xvcnNwYWNlL2dzdGNvbG9yc3BhY2UuYzogKGdzdF9jb2xvcnNwYWNlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzogKGdzdF9kZWludGVybGFjZV9jbGFzc19pbml0KToKLQkgICogZ3N0L2Zlc3RpdmFsL2dzdGZlc3RpdmFsLmM6IChnc3RfZmVzdGl2YWxfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoZ3N0X2Jwd3NpbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0aWlyLmM6IChnc3RfaWlyX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogKGdzdF9scHdzaW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbGlicmZiL2dzdHJmYnNyYy5jOiAoZ3N0X3JmYnNyY19jbGFzc19pbml0KToKLQkgICogZ3N0L21peG1hdHJpeC9taXhtYXRyaXguYzogKGdzdF9taXhtYXRyaXhfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tcGVnMXN5cy9nc3RtcGVnMXN5c3RlbWVuY29kZS5jOgotCSAgKGdzdF9zeXN0ZW1fZW5jb2RlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuYzoKLQkgIChnc3RfbXAxdmlkZW9wYXJzZV9jbGFzc19pbml0KToKLQkgICogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOiAoZ3N0X21wZWcyc3VidF9jbGFzc19pbml0KToKLQkgICogZ3N0L21wZWdhdWRpb3BhcnNlL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICAoZ3N0X21wM3BhcnNlX2NsYXNzX2luaXQpOgotCSAgKiBnc3Qvb3ZlcmxheS9nc3RvdmVybGF5LmM6IChnc3Rfb3ZlcmxheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL2dzdHBhc3N0aHJvdWdoLmM6IChwYXNzdGhyb3VnaF9jbGFzc19pbml0KToKLQkgICogZ3N0L3BsYXlvbmRlbWFuZC9nc3RwbGF5b25kZW1hbmQuYzogKHBsYXlfb25fZGVtYW5kX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRqcGVnL2dzdHJ0anBlZ2RlYy5jOiAoZ3N0X3J0anBlZ2RlY19jbGFzc19pbml0KToKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdlbmMuYzogKGdzdF9ydGpwZWdlbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9zbW9vdGgvZ3N0c21vb3RoLmM6IChnc3Rfc21vb3RoX2NsYXNzX2luaXQpOgotCSAgKiBnc3Qvc21vb3Rod2F2ZS9nc3RzbW9vdGh3YXZlLmM6IChnc3Rfc21vb3Rod2F2ZV9jbGFzc19pbml0KToKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9zdGVyZW8vZ3N0c3RlcmVvLmM6IChnc3Rfc3RlcmVvX2NsYXNzX2luaXQpOgotCSAgKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5jOiAoZ3N0X3N3aXRjaF9jbGFzc19pbml0KToKLQkgICogZ3N0L3R0YS9nc3R0dGFkZWMuYzogKGdzdF90dGFfZGVjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdHRhL2dzdHR0YXBhcnNlLmM6IChnc3RfdHRhX3BhcnNlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdmJpZGVjL2dzdHZiaWRlYy5jOiAoZ3N0X3ZiaWRlY19jbGFzc19pbml0KToKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzogKGdzdF92aWRlb19jcm9wX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdmlydHVhbGR1Yi9nc3R4c2hhcnBlbi5jOiAoZ3N0X3hzaGFycGVuX2NsYXNzX2luaXQpOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOiAoZ3N0X3k0bWVuY29kZV9jbGFzc19pbml0KToKLQkgICogc3lzL2Nkcm9tL2dzdGNkcGxheWVyLmM6IChjZHBsYXllcl9jbGFzc19pbml0KToKLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgKGdzdF9kaXJlY3Rzb3VuZHNpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuYzogKGR4cjNhdWRpb3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9keHIzL2R4cjNzcHVzaW5rLmM6IChkeHIzc3B1c2lua19jbGFzc19pbml0KToKLQkgICogc3lzL2R4cjMvZHhyM3ZpZGVvc2luay5jOiAoZHhyM3ZpZGVvc2lua19jbGFzc19pbml0KToKLQkgICogc3lzL3FjYW0vZ3N0cWNhbXNyYy5jOiAoZ3N0X3FjYW1zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuYzoKLQkgIChnc3RfdjRsMl9jb2xvcl9iYWxhbmNlX2NoYW5uZWxfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOiAoZ3N0X3Y0bDJfdHVuZXJfY2hhbm5lbF9jbGFzc19pbml0KSwKLQkgIChnc3RfdjRsMl90dW5lcl9ub3JtX2NsYXNzX2luaXQpOgotCSAgKiBzeXMveGltYWdlc3JjL3hpbWFnZXNyYy5jOiAoZ3N0X3hpbWFnZXNyY19jbGFzc19pbml0KToKLQkgIEZpeCAjMzM3MzY1IChnX3R5cGVfY2xhc3NfcmVmIDwtPiBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQpCi0KLTIwMDYtMDQtMDEgMTA6MDk6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICByZXdvcmsgYnVpbGQ7IGFkZCB0cmFuc2xhdGlvbnMgZm9yIHY0bDIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmV3b3JrIGJ1aWxkOyBhZGQgdHJhbnNsYXRpb25zIGZvciB2NGwyCi0KLTIwMDUtMTAtMTIgMTQ6Mjk6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcmVuYW1lZCBHU1RfRkxBR1MgbWFjcm9zIHRvIEdTVF9PQkpFQ1RfRkxBR1MgbW92ZWQgYml0c2hpZnQgZnJvbSBtYWNybyB0byBlbnVtIGRlZmluaXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleGFtcGxlcy9pbmRleGluZy9pbmRleG1wZWcuYzogKG1haW4pOgotCSAgKiBleHQvYXJ0c2QvZ3N0YXJ0c2RzaW5rLmM6IChnc3RfYXJ0c2RzaW5rX29wZW5fYXVkaW8pLAotCSAgKGdzdF9hcnRzZHNpbmtfY2xvc2VfYXVkaW8pLCAoZ3N0X2FydHNkc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvYXJ0c2QvZ3N0YXJ0c2RzaW5rLmg6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZwYXJzZS5jOiAoZ3N0X2FmcGFyc2Vfb3Blbl9maWxlKSwKLQkgIChnc3RfYWZwYXJzZV9jbG9zZV9maWxlKToKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnBhcnNlLmg6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6IChnc3RfYWZzaW5rX29wZW5fZmlsZSksCi0JICAoZ3N0X2Fmc2lua19jbG9zZV9maWxlKSwgKGdzdF9hZnNpbmtfY2hhaW4pLAotCSAgKGdzdF9hZnNpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuaDoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5jOiAoZ3N0X2Fmc3JjX29wZW5fZmlsZSksCi0JICAoZ3N0X2Fmc3JjX2Nsb3NlX2ZpbGUpLCAoZ3N0X2Fmc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuaDoKLQkgICogZXh0L2NkYXVkaW8vZ3N0Y2RhdWRpby5jOiAoZ3N0X2NkYXVkaW9faW5pdCk6Ci0JICAqIGV4dC9kaXJlY3RmYi9kaXJlY3RmYnZpZGVvc2luay5jOiAoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2luaXQpOgotCSAgKiBleHQvZHRzL2dzdGR0c2RlYy5jOiAoZ3N0X2R0c2RlY19pbml0KToKLQkgICogZXh0L2phY2svZ3N0amFjay5oOgotCSAgKiBleHQvamFjay9nc3RqYWNrYmluLmM6IChnc3RfamFja19iaW5faW5pdCksCi0JICAoZ3N0X2phY2tfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja2RlYy5jOiAoZ3N0X211c2VwYWNrZGVjX2luaXQpOgotCSAgKiBleHQvbXVzaWNicmFpbnovZ3N0dHJtLmM6IChnc3RfbXVzaWNicmFpbnpfaW5pdCk6Ci0JICAqIGV4dC9uYXMvbmFzc2luay5jOiAoZ3N0X25hc3Npbmtfb3Blbl9hdWRpbyksCi0JICAoZ3N0X25hc3NpbmtfY2xvc2VfYXVkaW8pLCAoZ3N0X25hc3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L25hcy9uYXNzaW5rLmg6Ci0JICAqIGV4dC9wb2x5cC9wb2x5cHNpbmsuYzogKGdzdF9wb2x5cHNpbmtfaW5pdCk6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmg6Ci0JICAqIGV4dC9zbW9vdGh3YXZlL2dzdHNtb290aHdhdmUuYzogKGdzdF9zbW9vdGh3YXZlX2luaXQpOgotCSAgKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3NmX2NoYW5nZV9zdGF0ZSksIChnc3Rfc2ZfcmVsZWFzZV9yZXF1ZXN0X3BhZCksCi0JICAoZ3N0X3NmX29wZW5fZmlsZSksIChnc3Rfc2ZfY2xvc2VfZmlsZSksIChnc3Rfc2ZfbG9vcCk6Ci0JICAqIGV4dC9zbmRmaWxlL2dzdHNmLmg6Ci0JICAqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6IChnc3Rfc3dmZGVjX2luaXQpOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmRlYy5jOiAoZ3N0X3RhcmtpbmRlY19pbml0KToKLQkgICogZ3N0L2FwZXRhZy9hcGVkZW11eC5jOiAoZ3N0X2FwZV9kZW11eF9pbml0KToKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuYzogKGdzdF9jZHhhcGFyc2VfaW5pdCk6Ci0JICAqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXN0cmlwLmM6IChnc3RfY2R4YXN0cmlwX2luaXQpOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuYzogKGdzdF9mZXN0aXZhbF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuaDoKLQkgICogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOiAoZ3N0X21wZWcyc3VidF9pbml0KToKLQkgICogZ3N0L211bHRpZmlsZXNpbmsvZ3N0bXVsdGlmaWxlc2luay5jOiAoZ3N0X211bHRpZmlsZXNpbmtfaW5pdCksCi0JICAoZ3N0X211bHRpZmlsZXNpbmtfc2V0X2xvY2F0aW9uKSwgKGdzdF9tdWx0aWZpbGVzaW5rX29wZW5fZmlsZSksCi0JICAoZ3N0X211bHRpZmlsZXNpbmtfY2xvc2VfZmlsZSksIChnc3RfbXVsdGlmaWxlc2lua19uZXh0X2ZpbGUpLAotCSAgKGdzdF9tdWx0aWZpbGVzaW5rX3BhZF9xdWVyeSksIChnc3RfbXVsdGlmaWxlc2lua19oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF9tdWx0aWZpbGVzaW5rX2NoYWluKSwgKGdzdF9tdWx0aWZpbGVzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9tdWx0aWZpbGVzaW5rL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkgICogZ3N0L3ZpZGVvZHJvcC9nc3R2aWRlb2Ryb3AuYzogKGdzdF92aWRlb2Ryb3BfaW5pdCk6Ci0JICAqIHN5cy9jZHJvbS9nc3RjZHBsYXllci5jOiAoY2RwbGF5ZXJfaW5pdCk6Ci0JICAqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuYzogKGR4cjNhdWRpb3NpbmtfaW5pdCksCi0JICAoZHhyM2F1ZGlvc2lua19vcGVuKSwgKGR4cjNhdWRpb3NpbmtfY2xvc2UpLAotCSAgKGR4cjNhdWRpb3NpbmtfY2hhaW5fcGNtKSwgKGR4cjNhdWRpb3NpbmtfY2hhaW5fYWMzKSwKLQkgIChkeHIzYXVkaW9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuaDoKLQkgICogc3lzL2R4cjMvZHhyM3NwdXNpbmsuYzogKGR4cjNzcHVzaW5rX2luaXQpLCAoZHhyM3NwdXNpbmtfb3BlbiksCi0JICAoZHhyM3NwdXNpbmtfY2xvc2UpLCAoZHhyM3NwdXNpbmtfY2hhaW4pLAotCSAgKGR4cjNzcHVzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9keHIzL2R4cjNzcHVzaW5rLmg6Ci0JICAqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuYzogKGR4cjN2aWRlb3NpbmtfaW5pdCksCi0JICAoZHhyM3ZpZGVvc2lua19vcGVuKSwgKGR4cjN2aWRlb3NpbmtfY2xvc2UpLAotCSAgKGR4cjN2aWRlb3Npbmtfd3JpdGVfZGF0YSksIChkeHIzdmlkZW9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuaDoKLQkgICogc3lzL2dsc2luay9nbGltYWdlc2luay5jOiAoZ3N0X2dsaW1hZ2VzaW5rX2luaXQpOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmM6IChnc3RfcWNhbXNyY19jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9xY2Ftc3JjX29wZW4pLCAoZ3N0X3FjYW1zcmNfY2xvc2UpOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2luaXQpOgotCSAgKiBzeXMvdmNkL3ZjZHNyYy5jOiAoZ3N0X3ZjZHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3ZjZHNyY19nZXQpLAotCSAgKGdzdF92Y2RzcmNfb3Blbl9maWxlKSwgKGdzdF92Y2RzcmNfY2xvc2VfZmlsZSksCi0JICAoZ3N0X3ZjZHNyY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3ZjZHNyY19yZWNhbGN1bGF0ZSk6Ci0JICAqIHN5cy92Y2QvdmNkc3JjLmg6Ci0JICByZW5hbWVkIEdTVF9GTEFHUyBtYWNyb3MgdG8gR1NUX09CSkVDVF9GTEFHUwotCSAgbW92ZWQgYml0c2hpZnQgZnJvbSBtYWNybyB0byBlbnVtIGRlZmluaXRpb24KLQotMjAwNS0wOS0wNSAxNzoyMDoyOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkqIGV4dC9qYWNrL2dzdGphY2tiaW4uYzoKLQkgIEZpeCB1cCBhbGwgdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCB1cCBhbGwgdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbnMuCi0KLTIwMDQtMDgtMDMgMTQ6Mjg6MTIgKzAwMDAgIEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotCi0JICBmaXhlcyBmb3IgR19ESVNBQkxFX0FTU0VSVCBhbmQgZnJpZW5kcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL2R5bnBhcmFtcy9maWx0ZXIuYzogKHVpX2NvbnRyb2xfY3JlYXRlKToKLQkgICogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKHByaW50X3RhZyk6Ci0JICAqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3JlcXVlc3RfbmV3X3BhZCk6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka2FuaW1hdGlvbi5jOgotCSAgKGdzdF9nZGtfYW5pbWF0aW9uX2l0ZXJfbWF5X2FkdmFuY2UpOgotCSAgKiBleHQvamFjay9nc3RqYWNrLmM6IChnc3RfamFja19yZXF1ZXN0X25ld19wYWQpOgotCSAgKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X21hZF9pZDNfdG9fdGFnX2xpc3QpLAotCSAgKHRhZ19saXN0X3RvX2lkM190YWdfZm9yZWFjaCksIChnc3RfaWQzX3RhZ19oYW5kbGVfZXZlbnQpOgotCSAgKiBleHQvdm9yYmlzL29nZ3ZvcmJpc2VuYy5jOiAoZ3N0X29nZ3ZvcmJpc2VuY19nZXRfdGFnX3ZhbHVlKToKLQkgICogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKGdzdF92b3JiaXNlbmNfZ2V0X3RhZ192YWx1ZSk6Ci0JICAqIGV4dC94aW5lL3hpbmVhdWRpb2RlYy5jOiAoZ3N0X3hpbmVfYXVkaW9fZGVjX2NoYWluKToKLQkgICogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby10ZXN0LmM6IChwcmludF90YWcpOgotCSAgKiBnc3Qvc2luZS9kZW1vLWRwYXJhbXMuYzogKG1haW4pOgotCSAgKiBnc3QvdGFncy9nc3R2b3JiaXN0YWcuYzogKGdzdF90YWdfdG9fdm9yYmlzX2NvbW1lbnRzKToKLQkgICogdGVzdHN1aXRlL2Fsc2EvZm9ybWF0cy5jOiAoY3JlYXRlX3BpcGVsaW5lKToKLQkgICogdGVzdHN1aXRlL2Fsc2Evc2luZXNyYy5jOiAoc2luZXNyY19mb3JjZV9jYXBzKSwgKHNpbmVzcmNfZ2V0KToKLQkgIGZpeGVzIGZvciBHX0RJU0FCTEVfQVNTRVJUIGFuZCBmcmllbmRzCi0JICAqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAoYWFjX3R5cGVfZmluZCksCi0JICAobXAzX3R5cGVfZnJhbWVfbGVuZ3RoX2Zyb21faGVhZGVyKSwgKG1wM190eXBlX2ZpbmQpLAotCSAgKHBsdWdpbl9pbml0KToKLQkgIHJlcXVpcmUgbXAzIHR5cGVmaW5kaW5nIHRvIGhhdmUgYXQgbGVhc3QgTUlOX0hFQURFUlMgdmFsaWQgaGVhZGVycwotCSAgYWRkIHR5cGVmaW5kaW5nIGZvciBBQUMgYWR0cyBmaWxlcwotCi0yMDA0LTA1LTIxIDIzOjI4OjU3ICswMDAwICBTdMOpcGhhbmUgTG9ldWlsbGV0IDxnc3RyZWFtZXJAbGVyb3V0aWVyLm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSAgc2Vjb25kIGJhdGNoIDogcmVtb3ZlICcsJyBhdCBlbmQgb2YgZW51bXMgYXMgdGhleSBjb3VsZCBjb25mdXNlIG9sZGVyIGdjYywgZm9yZWlnbiBjb21waWxlcnMgKGZvcnRlKSBhbmQgZ3RrLWRvYyAoaW4gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNlY29uZCBiYXRjaCA6Ci0JICByZW1vdmUgJywnIGF0IGVuZCBvZiBlbnVtcyBhcyB0aGV5IGNvdWxkIGNvbmZ1c2Ugb2xkZXIgZ2NjLCBmb3JlaWduIGNvbXBpbGVycyAoZm9ydGUpIGFuZCBndGstZG9jCi0JICAoaW4gZ3N0LXBsdWdpbnMvZXh0LyB0aGlzIHRpbWUpCi0KLTIwMDQtMDMtMTUgMTk6MzI6MjcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBkb24ndCBtaXggdGFicyBhbmQgc3BhY2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRvbid0IG1peCB0YWJzIGFuZCBzcGFjZXMKLQotMjAwNC0wMy0xNSAxNjozMjo1NCArMDAwMCAgSm9oYW4gRGFobGluIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkgICouaDogUmV2ZXJ0IGluZGVudGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqICouaDogUmV2ZXJ0IGluZGVudGluZwotCi0yMDA0LTAzLTE0IDIyOjM0OjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgZ3N0LWluZGVudAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBnc3QtaW5kZW50Ci0KLTIwMDQtMDEtMTIgMDM6NDA6MTggKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICBSZW1vdmUgYWxsIHVzYWdlIG9mIGdzdF9wYWRfZ2V0X2NhcHMoKSwgYW5kIHJlcGxhY2UgaXQgd2l0aCBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMoKSBvciBnc3RfcGFkX2dldF9uZWdvdGlhdGVkX2NhcCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZW1vdmUgYWxsIHVzYWdlIG9mIGdzdF9wYWRfZ2V0X2NhcHMoKSwgYW5kIHJlcGxhY2UgaXQgd2l0aAotCSAgZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzKCkgb3IgZ3N0X3BhZF9nZXRfbmVnb3RpYXRlZF9jYXAoKS4KLQotMjAwMy0xMi0yMiAwMTo0NzowOSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIE1lcmdlIENBUFMgYnJhbmNoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1lcmdlIENBUFMgYnJhbmNoCi0KLTIwMDMtMTItMTMgMTY6NTk6NTEgKzAwMDAgIEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICByZW1vdmVkIEdTVF8qX0NBU1QuIERpc2FibGluZyBvZiB0eXBlIGNoZWNraW5nIGlzIGRvbmUgaW4gZ2xpYi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlZCBHU1RfKl9DQVNULiBEaXNhYmxpbmcgb2YgdHlwZSBjaGVja2luZyBpcyBkb25lIGluIGdsaWIuCi0KLTIwMDMtMTItMDQgMTA6Mzc6MzggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgcmVtb3ZlIGNvcHlyaWdodCBmaWVsZCBmcm9tIHBsdWdpbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGNvcHlyaWdodCBmaWVsZCBmcm9tIHBsdWdpbnMKLQotMjAwMy0xMS0wNyAxMjo0NzowMiArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBSZW1vdmUgYWxsIGNvbmZpZy5oIGluY2x1ZGVzIGZyb20gaGVhZGVyIGZpbGVzLCBhZGQgaXQgdG8gZWFjaCBzb3VyY2UgZmlsZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZSBjb25maWcuaCBpbmNsdWRlcyBmcm8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVtb3ZlIGFsbCBjb25maWcuaCBpbmNsdWRlcyBmcm9tIGhlYWRlciBmaWxlcywgYWRkIGl0IHRvIGVhY2ggc291cmNlIGZpbGUgYW5kIHJlbW92ZSBkdXBsaWNhdGUgY29uZmlnLmggaW5jbHVkZXMgZnJvbSBzZXZlcmFsIHNvdXJjZSBmaWxlcwotCi0yMDAzLTExLTAxIDIzOjQzOjEzICswMDAwICBJYWluIEhvbG1lcyA8aWFpbkBwcmV0dHlwZW9wbGUub3JnPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICBKYWNrIGZpeGVkIHRvbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBKYWNrIGZpeGVkIHRvbwotCi0yMDAzLTEwLTI5IDAzOjE1OjU1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSAgY2hhbmdlIGdzdC9ieXRlc3RyZWFtLmggdG8gZ3N0L2J5dGVzdHJlYW0vYnl0ZXN0cmVhbS5oCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNoYW5nZSBnc3QvYnl0ZXN0cmVhbS5oIHRvIGdzdC9ieXRlc3RyZWFtL2J5dGVzdHJlYW0uaAotCi0yMDAzLTEwLTI4IDIwOjUyOjQxICswMDAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSAgbWVyZ2UgVFlQRUZJTkQgYnJhbmNoLiBNYWpvciBjaGFuZ2VzOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtZXJnZSBUWVBFRklORCBicmFuY2guIE1ham9yIGNoYW5nZXM6Ci0JICAtIHRvdGFsbHkgcmV3b3JrZWQgdHlwZShmaW5kKSBzeXN0ZW0KLQkgIC0gYWxsIHR5cGVmaW5kIGZ1bmN0aW9ucyBhcmUgaW4gZ3N0L3R5cGVmaW5kIG5vdwotCSAgLSBtb3JlIHR5cGVmaW5kIGZ1bmN0aW9ucyB0aGVuIGJlZm9yZQotCSAgLSBzb21lIHBsdWdpbnMgbWlnaHQgZmFpbCB0byBjb21waWxlIG5vdyBiZWNhdXNlIEkgZG9uJ3QgaGF2ZSB0aGVtIGluc3RhbGxlZCBhbmQgdGhleQotCSAgYSkgcmVxdWlyZSBieXRlc3RyZWFtIG9yCi0JICBiKSBoYXZlbid0IGhhZCB0aGVpciB0eXBlZmluZCBmaXhlZC4KLQkgIFBsZWFzZSBmaXggdGhvc2UgcGx1Z2lucyBhbmQgcHV0IHRoZSB0eXBlZmluZCBmdW5jdGlvbnMgaW50byBnc3QvdHlwZWZpbmQgaWYgdGhleSBkb24ndCBoYXZlIGRlcGVuZGVuY2llcwotCi0yMDAzLTEwLTA4IDE2OjA4OjE5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIC9Hc3RCdWZmZXIvR3N0RGF0YS8gaW4gdGhlIEFQSSB3aGVyZSB5b3UgY2FuIHBhc3MgZXZlbnRzLiBGaXggdGhlIHBsdWdpbnMgdG8gZGVhbCB3aXRoIHRoYXQuIEZpeGVzICMxMTM0ODguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIC9Hc3RCdWZmZXIvR3N0RGF0YS8gaW4gdGhlIEFQSSB3aGVyZSB5b3UgY2FuIHBhc3MgZXZlbnRzLiBGaXggdGhlIHBsdWdpbnMgdG8gZGVhbCB3aXRoIHRoYXQuIEZpeGVzICMxMTM0ODguCi0KLTIwMDMtMTAtMDEgMTM6MTQ6NTAgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSAgTmV3IHR5cGVmaW5kIHN5c3RlbTogYnl0ZXN0cmVhbSBpcyBub3cgcGFydCBvZiB0aGUgY29yZSBhbGwgcGx1Z2lucyBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gdXNlIHRoaXMgbmV3IHR5cGVmaW5kIHN5c3RlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE5ldyB0eXBlZmluZCBzeXN0ZW06Ci0JICAqIGJ5dGVzdHJlYW0gaXMgbm93IHBhcnQgb2YgdGhlIGNvcmUKLQkgICogYWxsIHBsdWdpbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHVzZSB0aGlzIG5ldyB0eXBlZmluZCBzeXN0ZW0KLQkgICogYXNmIHR5cGVmaW5kaW5nIGFkZGVkCi0JICAqIG1wZWcgdmlkZW8gc3RyZWFtIHR5cGVmaWRpbmcgcmVtb3ZlZCBiZWNhdXNlIGl0J3MgYnJva2VuCi0JICAqIGR1cGxpY2F0ZSB0eXBlZmluZCBlbnRyaWVzIHJlbW92ZWQKLQkgICogZXh0cmEgaWQzIHR5cGVmaW5kaW5nIGFkZGVkLCBiZWNhdXNlIHdlJ3ZlIHNlZW4gNCB0eXBlcyBvZiBmaWxlcwotCSAgKHJpZmYvd2F2LCBmbGFjLCB2b3JiaXMsIG1wMykgd2l0aCBpZDMgaGVhZGVycyBhbmQgZWFjaCBvZiB0aGVzZSBuZWVkcwotCSAgdG8gd29yay4gSW5zdGVhZCwgSSd2ZSBhZGRlZCBhbiBpZDMgZWxlbWVudCBhbmQgbGV0IGl0IHJlZG8gdHlwZWZpZGluZwotCSAgYWZ0ZXIgdGhlIGlkMyBoZWFkZXIuIHRoaXMgbmVlZHMgYSBoYWNrIGJlY2F1c2Ugc3BpZGVyIG9ubHkgdHlwZWZpbmRzCi0JICBvbmNlLiBXZSBjYW4gcmVtb3ZlIHRoaXMgaGFjayBvbmNlIHNwaWRlciBzdXBwb3J0cyBtdWx0aXBsZSB0eXBlZmluZHMuCi0JICAqIHdpdGggYWxsIHRoaXMsIG1wMyB0eXBlZmluZGluZyBpcyBzZW1pLXJld3JpdHRlbgotCSAgKiBpZDMgdHlwZWZpbmRpbmcgaW4gZmxhYy92b3JiaXMgaXMgcmVtb3ZlZCwgaXQncyBubyBsb25nZXIgbmVlZGVkCi0JICAqIGZpeGVkIHNwaWRlciBhbmQgZ3N0LXR5cGVmaW5kIHRvIHVzZSB0aGlzLCB0b28uCi0JICAqIE90aGVyIGdlbmVyYWwgY2xlYW51cHMKLQotMjAwMy0wOS0zMCAxMjo1NjoyNyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBjb25mb3JtIHRvIHRoZSBidWZmZXItZnJhbWVzIHByb3BzIGVudHJ5IC0tIG11Y2ggbmljZXIgbm93Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbmZvcm0gdG8gdGhlIGJ1ZmZlci1mcmFtZXMgcHJvcHMgZW50cnkgLS0gbXVjaCBuaWNlciBub3cuLi4KLQotMjAwMy0wOC0xMCAwMDowMTo1OCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9qYWNrL01ha2VmaWxlLmFtOgotCSAgUmVtb3ZlIHJlZHVuZGFudCBwbHVnaW5kaXIgZGVmaW5pdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZW1vdmUgcmVkdW5kYW50IHBsdWdpbmRpciBkZWZpbml0aW9uCi0KLTIwMDMtMDctMTkgMjM6MjU6MjUgKzAwMDAgIExlaWYgSm9obnNvbiA8bGVpZkBhbWJpZW50LjJ5Lm5ldD4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSAgKyBjaGFuZ2VzIGZvciBuZXcgZmxvYXQgY2FwcyB3aXRob3V0IHNsb3BlL2ludGVyY2VwdCArIHNvbWUgY2F0ZWdvcnkgY2hhbmdlcyBmb3IgcGx1Z2lucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICArIGNoYW5nZXMgZm9yIG5ldyBmbG9hdCBjYXBzIHdpdGhvdXQgc2xvcGUvaW50ZXJjZXB0Ci0JICArIHNvbWUgY2F0ZWdvcnkgY2hhbmdlcyBmb3IgcGx1Z2lucwotCi0yMDAzLTA3LTA2IDIwOjQ5OjUyICswMDAwICBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIE5ldyBtaW1ldHlwZXMgZ29uZSBpbnRvIGVmZmVjdCB0b2RheSAtIHRoaXMgY29tbWl0IGNoYW5nZXMgYWxsIG9sZCBtaW1ldHlwZXMgb3ZlciB0byB0aGUgbmV3IG1pbWV0eXBlcyBzcGVjIGFzIGRlc2NyaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBOZXcgbWltZXR5cGVzIGdvbmUgaW50byBlZmZlY3QgdG9kYXkgLSB0aGlzIGNvbW1pdCBjaGFuZ2VzIGFsbCBvbGQgbWltZXR5cGVzIG92ZXIgdG8gdGhlIG5ldyBtaW1ldHlwZXMgc3BlYyBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIGNvbW1pdCdzIGRvY3VtZW50LiBOb3RlOiBzb21lIHBsdWdpbnMgd2lsbCBicmVhaywgc29tZSBwaXBlbGluZXMgd2lsbCBicmVhaywgZXhwZWN0IEhFQUQgdG8gYmUgYnJva2VuIG9yIGF0IGxlYXN0IG5vdCAxMDAlIHdvcmtpbmcgZm9yIGEgZmV3IGRheXMsIGJ1dCBkb24ndCBmb3JnZXQgdG8gcmVwb3J0IGJ1Z3MKLQotMjAwMy0wNy0wMSAwMjoyNzowNiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIGZpeCB0eXBlIHB1bm5pbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHR5cGUgcHVubmluZwotCi0yMDAzLTA2LTI5IDE5OjQ2OjEzICswMDAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgY29tcGF0aWJpbGl0eSBmaXggZm9yIG5ldyBHU1RfREVCVUcgc3R1ZmYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbXBhdGliaWxpdHkgZml4IGZvciBuZXcgR1NUX0RFQlVHIHN0dWZmLgotCSAgSW5jbHVkZXMgZml4ZXMgZm9yIG1pc3NpbmcgaW5jbHVkZXMgZm9yIGNvbmZpZy5oIGFuZCB1bmlzdGQuaAotCSAgSSBvbmx5IGVuc3VyZWQgZm9yIHBsdWdpbnMgSSBjYW4gYnVpbGQgdGhhdCB0aGV5IHdvcmssIHNvIGlmIHNvbWUgb2YgdGhlbSBhcmUgc3RpbGwgYnJva2VuLCB5b3UgZ290dGEgZml4IHRoZW0geW91cnNlbHZlcyB1bmZvcnR1bmF0ZWx5LgotCi0yMDAzLTA2LTEzIDIxOjIxOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICBSZW1vdmVkIHVnbHkgY2FwcyBmaXhlZCBmbGFnIGhhY2ssIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIGNvcmUgc29vbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZW1vdmVkIHVnbHkgY2FwcyBmaXhlZCBmbGFnIGhhY2ssIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluCi0JICBjb3JlIHNvb24KLQotMjAwMy0wMy0wNCAxNTozNDoyMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICB1cGRhdGUgZm9yIHRoZSBsYXRlc3QgamFjayBjdnMgYW5kIG5vbi1jb3RocmVhZGVkIGdzdCBzY2hlZHVsZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGZvciB0aGUgbGF0ZXN0IGphY2sgY3ZzIGFuZCBub24tY290aHJlYWRlZCBnc3Qgc2NoZWR1bGVyCi0KLTIwMDMtMDItMDUgMjA6Mzg6NDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICBDaGFuZ2VkIGNhcHMtPmZpeGVkIHRvIHVzZSBGTEFHX1NFVAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2VkIGNhcHMtPmZpeGVkIHRvIHVzZSBGTEFHX1NFVAotCi0yMDAzLTAxLTEwIDEzOjM4OjMyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgUGFkQ29ubmVjdCAtPiBQYWRMaW5rCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhZENvbm5lY3QgLT4gUGFkTGluawotCi0yMDAzLTAxLTEwIDEwOjIyOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgYW5vdGhlciBiYXRjaCBvZiBjb25uZWN0LT5saW5rIGZpeGVzIHBsZWFzZSBsZXQgbWUga25vdyBhYm91dCBpc3N1ZXMgYW5kIHBsZWFzZSByZWZyYWluIG9mIG1ha2luZyB0aGVtIHlvdXJzZWxmLCBzbyB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFub3RoZXIgYmF0Y2ggb2YgY29ubmVjdC0+bGluayBmaXhlcwotCSAgcGxlYXNlIGxldCBtZSBrbm93IGFib3V0IGlzc3VlcwotCSAgYW5kIHBsZWFzZSByZWZyYWluIG9mIG1ha2luZyB0aGVtIHlvdXJzZWxmLCBzbyB0aGF0IEkgZG9uJ3Qgc3BlbmQgZG91YmxlCi0JICB0aGUgdGltZSByZXNvbHZpbmcgY29uZmxpY3RzCi0KLTIwMDItMTItMDggMTQ6NTA6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBleHQvamFjay9NYWtlZmlsZS5hbToKLQkgIHBhcmFsbGVsIGluc3RhbGwgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGFyYWxsZWwgaW5zdGFsbCBmaXhlcwotCi0yMDAyLTA5LTI5IDE4OjEyOjE4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkqIGV4dC9qYWNrL2dzdGphY2tiaW4uYzoKLQkgIGxpY2Vuc2VzIGFnYWluCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGxpY2Vuc2VzIGFnYWluCi0KLTIwMDItMDktMTggMTk6MDI6NTIgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgcGx1Z2lucyBwYXJ0IG9mIGxpY2Vuc2UgZmllbGQgcGF0Y2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGx1Z2lucyBwYXJ0IG9mIGxpY2Vuc2UgZmllbGQgcGF0Y2gKLQotMjAwMi0wOS0xMCAwOTozMTo0MCArMDAwMCAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICBUaGlzIHVwZGF0ZXMgYWxsIHBsdWdpbnMgdG8gdGhlIG5ldyBBUEkgZm9yIGdzdF9wYWRfdHJ5X3NldF9jYXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFRoaXMgdXBkYXRlcyBhbGwgcGx1Z2lucyB0byB0aGUgbmV3IEFQSSBmb3IgZ3N0X3BhZF90cnlfc2V0X2NhcHMKLQotMjAwMi0wOS0wOSAyMzoyNzozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIHJlbW92aW5nIHdhcm5pbmdzIGFzIGFwcHJvdmVkIGJ5IHdpbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmluZyB3YXJuaW5ncyBhcyBhcHByb3ZlZCBieSB3aW0KLQotMjAwMi0wOC0yMyAwNDowNDoxMSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBmaXggamFjayBpbnB1dCBwb3J0IGNvbm5lY3Rpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGphY2sgaW5wdXQgcG9ydCBjb25uZWN0aW9uCi0KLTIwMDItMDctMDkgMTc6Mzk6MTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgY29tcGlsZSBmaXhlbiwgYW5kIHByZXBhcmUgdG8gbW92ZSBNQUlOVEFJTkVSX01PREUgdG8gYXMtdmVyc2lvbi5tNAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb21waWxlIGZpeGVuLCBhbmQgcHJlcGFyZSB0byBtb3ZlIE1BSU5UQUlORVJfTU9ERSB0byBhcy12ZXJzaW9uLm00Ci0KLTIwMDItMDctMDIgMjM6MzU6MDcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgbWFrZSBqYWNrIHdvcmsgaW4gYWxsIGl0cyBmdWxsIGR1cGxleCBnbG9yeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtYWtlIGphY2sgd29yayBpbiBhbGwgaXRzIGZ1bGwgZHVwbGV4IGdsb3J5Ci0KLTIwMDItMDYtMTIgMDM6MzI6MDIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgd29ya2luZyBqYWNrIGVsZW1lbnRzIChmaXhlZCBhIHByb2JsZW0gaW4gdXBzdHJlYW0gamFjaykgcmFuZG9tIG90aGVyIGZpeGVuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd29ya2luZyBqYWNrIGVsZW1lbnRzIChmaXhlZCBhIHByb2JsZW0gaW4gdXBzdHJlYW0gamFjaykKLQkgICogcmFuZG9tIG90aGVyIGZpeGVuLi4uCi0KLTIwMDItMDUtMTUgMTk6MDg6NDkgKzAwMDAgIFN0ZXZlIEJha2VyIDxzdGV2ZUBzdGV2ZWJha2VyLm9yZz4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgdXNlIG5ldyBieXRlc3RyZWFtIGFwaQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1c2UgbmV3IGJ5dGVzdHJlYW0gYXBpCi0KLTIwMDItMDUtMTMgMTg6MDg6MzMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgdXBkYXRlIHRvIG5ldyBqYWNrIGFwaQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgdG8gbmV3IGphY2sgYXBpCi0KLTIwMDItMDUtMDUgMTk6Mzk6MTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgYWRkIHNvbWUgaW5jbHVkZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHNvbWUgaW5jbHVkZXMKLQotMjAwMi0wNS0wNSAwMTowODowNSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBiZXR0ZXIgaW5pdGlhbGl6YXRpb24uIGl0IGRvZXNuJ3Qgd29yayBvdmVyIGhlcmUsIHRob3VnaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmV0dGVyIGluaXRpYWxpemF0aW9uLiBpdCBkb2Vzbid0IHdvcmsgb3ZlciBoZXJlLCB0aG91Z2guCi0KLTIwMDItMDUtMDQgMjE6Mzg6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgYSBjb21taXQgc28gdGhhdCBqYWNrIHdpbGwgYnVpbGQgd2l0aG91dCBlcnJvcnMgb24gVXJhZXVzJ3Mgc3lzdGVtIDspCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGEgY29tbWl0IHNvIHRoYXQgamFjayB3aWxsIGJ1aWxkIHdpdGhvdXQgZXJyb3JzIG9uIFVyYWV1cydzIHN5c3RlbSA7KQotCi0yMDAyLTA1LTA0IDIwOjUzOjM1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIHNldCBjYXBzIG9uY2Ugd2Uga25vdyB0aGUgc2FtcGxlIHJhdGUgb2YgdGhlIHN5c3RlbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzZXQgY2FwcyBvbmNlIHdlIGtub3cgdGhlIHNhbXBsZSByYXRlIG9mIHRoZSBzeXN0ZW0KLQotMjAwMi0wNS0wNCAxODo1Nzo0NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JKiBleHQvamFjay9nc3RqYWNrYmluLmM6Ci0JICBzb21lIGphY2sgZml4ZXMsIGFsc2EgdG91Y2h1cHMsIGFuZCBhZGQgcnRwIGJ5IGRlZmF1bHQgdG8gdGhlIGJ1aWxkIGlmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMgYnVpbGRpbmcgcnRwLCB3ZSdyZSBtb3YuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc29tZSBqYWNrIGZpeGVzLCBhbHNhIHRvdWNodXBzLCBhbmQgYWRkIHJ0cCBieSBkZWZhdWx0IHRvIHRoZSBidWlsZAotCSAgaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyBidWlsZGluZyBydHAsIHdlJ3JlIG1vdmluZyBpdCBiYWNrIHRvIGV4cGVyaW1lbnRhbCA7KQotCi0yMDAyLTA0LTIwIDIxOjQyOjUxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIGEgaGFjayB0byB3b3JrIGFyb3VuZCBpbnRsdG9vbCdzIGJyb2tlbm5lc3MgYSBjdXJyZW50IGNoZWNrIGZvciBtcGVnMmRlYyBkZXRhaWxzLT5rbGFzcyByZW9yZ2FuaXphdGlvbnMgYW4gZWxlbWVudCBici4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGEgaGFjayB0byB3b3JrIGFyb3VuZCBpbnRsdG9vbCdzIGJyb2tlbm5lc3MKLQkgICogYSBjdXJyZW50IGNoZWNrIGZvciBtcGVnMmRlYwotCSAgKiBkZXRhaWxzLT5rbGFzcyByZW9yZ2FuaXphdGlvbnMKLQkgICogYW4gZWxlbWVudCBicm93c2VyIHRoYXQgdXNlcyBkZXRhaWxzLT5rbGFzcwotCSAgKiBzZXBhcmF0ZWQgY2R4YSBwYXJzZSBvdXQgZnJvbSB0aGUgYXZpIGRpcmVjdG9yeQotCi0yMDAyLTA0LTE2IDE3OjE0OjA1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL01ha2VmaWxlLmFtOgotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSogZXh0L2phY2svZ3N0amFjay5oOgotCSogZXh0L2phY2svZ3N0amFja2Jpbi5jOgotCSAgRmluYWxseSB3ZSdyZSBvbiB0byBhIHByb3BlciBqYWNrIHNldHVwLCB3aXRoIGEgc3BlY2lhbGl6ZWQgYmluIGFuZCBlbGVtZW50cyB0aGF0IGNhbiBvbmx5IGdvIGluIGEgamFjayBiaW4uIEkgaGFkIHRvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpbmFsbHkgd2UncmUgb24gdG8gYSBwcm9wZXIgamFjayBzZXR1cCwgd2l0aCBhIHNwZWNpYWxpemVkIGJpbiBhbmQgZWxlbWVudHMKLQkgIHRoYXQgY2FuIG9ubHkgZ28gaW4gYSBqYWNrIGJpbi4gSSBoYWQgdG8gZml4IHRoZSBwYXJzZXIgZmlyc3QgdG8gZG8gdGhpcywgYnV0Ci0JICB0byBydW4gaXQsIHRoZSBzeW50YXggaXMgbGlrZSBzbzoKLQkgIGdzdC1sYXVuY2ggamFja2Jpbi4oIGZpbGVzcmMgISBtYWQgISBqYWNrc2luayApCi0JICBCdXQgb2YgY291cnNlIGl0J3Mgbm90IGZ1bGx5IGZ1bmN0aW9uYWwgeWV0LiBTaWdoLgotCi0yMDAyLTA0LTExIDIwOjQyOjI2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIEdzdFBhZFRlbXBsYXRlIDwtPiBnc3RfcGFkX3RlbXBsYXRlIDwtPiBHU1RfUEFEX1RFTVBMQVRFIHNhbWUgd2l0aCAqZmFjdG9yeSBhbmQgdHlwZWZpbmQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEdzdFBhZFRlbXBsYXRlIDwtPiBnc3RfcGFkX3RlbXBsYXRlIDwtPiBHU1RfUEFEX1RFTVBMQVRFCi0JICBzYW1lIHdpdGggKmZhY3RvcnkgYW5kIHR5cGVmaW5kLgotCSAgYWxzbywgc29tZSAtV2Vycm9yIGZpeGVzLgotCi0yMDAyLTAzLTMwIDIxOjA3OjUxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL2dzdGphY2suYzoKLQkgIGFscGhhYmV0aXphdGlvbiBmaXhlbiBhIGphY2sgY2FwcyBmaXgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBhbHBoYWJldGl6YXRpb24gZml4ZW4KLQkgICogYSBqYWNrIGNhcHMgZml4Ci0KLTIwMDItMDMtMzAgMTk6MzE6MTMgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svZ3N0amFjay5jOgotCSAgYWRkIG5vdGlmeSBiYWNrIHRvIGZpbGVzcmMsIGl0J3MgbmVlZGVkIGZvciBNVkMgYXBwbGljYXRpb25zIHJlbW92ZSBub3RpZnkgcHJpbnRvdXRzIGZyb20gZ3N0LWxhdW5jaCBjbGVhbnVwIGluIGdzdC1wLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogYWRkIG5vdGlmeSBiYWNrIHRvIGZpbGVzcmMsIGl0J3MgbmVlZGVkIGZvciBNVkMgYXBwbGljYXRpb25zCi0JICAqIHJlbW92ZSBub3RpZnkgcHJpbnRvdXRzIGZyb20gZ3N0LWxhdW5jaAotCSAgKiBjbGVhbnVwIGluIGdzdC1wbHVnaW5zIGNvbmZpZ3VyZS5hYwotCSAgKiBzb21lIGphY2sgdXBkYXRlcwotCSAgKiByZW1vdmUgU0VMRl9JVEVSQVRJTkcgZmxhZyBpbiBmYXZvciBvZiBTRUZfU0NIRURVTEFCTEUgKG5vdCBhIGNsZWFyIG5hbWUsCi0JICBidXQgaXQncyB3aGF0IHdlIGhhdmUgZm9yIHRoZSBtb21lbnQpCi0JICAqIGltcHJvdmUgcGFyc2luZyBvZiByZXF1ZXN0IHBhZCBuYW1lcywgbm8gbW9yZSBzc2NhbmYKLQkgICogZml4ZXMgdG8gdGhlIGZhc3RzY2hlZHVsZXIgTWFrZWZpbGUuYW0KLQotMjAwMi0wMy0yMCAyMTo0NTowNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICBzL0dub21lLVN0cmVhbWVyL0dTdHJlYW1lci8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcy9Hbm9tZS1TdHJlYW1lci9HU3RyZWFtZXIvCi0KLTIwMDItMDMtMTkgMDQ6MTA6MDYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JICByZW1vdmFsIG9mIC8vLXN0eWxlIGNvbW1lbnRzIGRvbid0IGxpbmsgcGx1Z2lucyB0byBjb3JlIGxpYnMgLS0gdGhlIHZlcnNpb25pbmcgaXMgZG9uZSBpbnRlcm5hbGx5IHRvIHRoZSBwbHVnaW5zIHdpdGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiByZW1vdmFsIG9mIC8vLXN0eWxlIGNvbW1lbnRzCi0JICAqIGRvbid0IGxpbmsgcGx1Z2lucyB0byBjb3JlIGxpYnMgLS0gdGhlIHZlcnNpb25pbmcgaXMgZG9uZSBpbnRlcm5hbGx5IHRvIHRoZSBwbHVnaW5zIHdpdGggdGhlIHBsdWdpbl9pbmZvIHN0cnVjdCwKLQkgIGFuZCBzeW1ib2wgcmVzb2x1dGlvbiBpcyBsYXp5LCBzbyB3ZSBjYW4gYWx3YXlzIGtub3cgaWYgYSBwbHVnaW4gY2FuIGJlIGxvYWRlZCBieSB0aGUgcGx1Z2luX2luZm8gZGF0YS4gaW4gdGhlb3J5LgotCi0yMDAyLTAzLTE5IDAxOjM5OjQzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9qYWNrL01ha2VmaWxlLmFtOgotCSAgcy9AR1NUX1BMVUdJTl9MREZMQUdTQC8kKEdTVF9QTFVHSU5fTERGTEFHUykvIEAtc3Vic3RpdHVlZCB2YXJpYWJsZXMgdmFyaWFibGVzIGFyZSBkZWZpbmVkIGFzIG1ha2UgdmFyaWFibGVzIGF1dG9tYWdpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHMvQEdTVF9QTFVHSU5fTERGTEFHU0AvJChHU1RfUExVR0lOX0xERkxBR1MpLwotCSAgQC1zdWJzdGl0dWVkIHZhcmlhYmxlcyB2YXJpYWJsZXMgYXJlIGRlZmluZWQgYXMgbWFrZSB2YXJpYWJsZXMgYXV0b21hZ2ljYWxseSwKLQkgIGFuZCB0aGlzIGdpdmVzIHRoZSB1c2VyIHRoZSBmcmVlZG9tIHRvIHNheSBtYWtlIEdTVF9QTFVHSU5fTERGTEFHUz0tbXlmbGFnCi0KLTIwMDItMDMtMTggMDQ6NDE6MzUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JKiBleHQvamFjay9SRUFETUU6Ci0JKiBleHQvamFjay9nc3RqYWNrLmM6Ci0JKiBleHQvamFjay9nc3RqYWNrLmg6Ci0JICBzL2dzdF9lbGVtZW50X2luc3RhbGxfc3RkX3Byb3BzL2dzdF9lbGVtZW50X2NsYXNzX2luc3RhbGxfc3RkX3Byb3BzLyAtLSBpdCBqdXN0IG1ha2VzIG1vcmUgc2Vuc2UgdGhhdCB3YXkgYWRkZWQgamFjayAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzL2dzdF9lbGVtZW50X2luc3RhbGxfc3RkX3Byb3BzL2dzdF9lbGVtZW50X2NsYXNzX2luc3RhbGxfc3RkX3Byb3BzLyAtLSBpdCBqdXN0IG1ha2VzIG1vcmUgc2Vuc2UgdGhhdCB3YXkKLQkgICogYWRkZWQgamFjayBlbGVtZW50LCBkb2Vzbid0IHF1aXRlIHdvcmsgcmlnaHQgeWV0IGJ1dCBpIGRpZG4ndCB3YW50IHRvIGxvc2UgdGhlIHdvcmsgLS0gaXQgZG9lcyBidWlsZCwgcmVnaXN0ZXIsCi0JICBhbmQgYXR0ZW1wdCB0byBydW4gdGhvdWdoCi0JICAqIGltcG9zZWQgc29tZSByZXN0cmljdGlvbnMgb24gdGhlIG5hbWluZyBvZiByZXF1ZXN0IHBhZHMgdG8gYmV0dGVyIGFsbG93IGZvciByZXZlcnNlIHBhcnNpbmcKLQkgICogYWRkZWQgJyVzJyB0byByZXZlcnNlIHBhcnNpbmcKLQkgICogYWRkZWQgbmV3IGJpbiBmbGFnIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgc2VsZi1pdGVyYXRpbmcsIGFuZCBzb21lIGxhbWUgY29kZSBpbiBnc3QtbGF1bmNoIHRvIHRlc3QgaXQgb3V0Ci0JICAqIGZpeGVuIG9uIGxhdW5jaC1ndWkKLQkgICogYWRkZWQgcGtnLWNvbmZpZyBzdHVmZiBmb3IgdGhlIGVkaXRvcidzIGxpYnMKLQotMjAxMS0wMS0wMiAxMTozNzoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IG1hcmsgdjRsMnNpbmsgYXMgZXhwZXJpbWVudGFsIGFuZCBidWlsZCBvbmx5IGlmIC0tZW5hYmxlLWV4cGVyaW1lbnRhbCBpcyBwYXNzZWQKLQkgIEl0J3Mgbm90IHJlYWxseSBvZiAnZ29vZCcgcXVhbGl0eSB5ZXQsIGJ1dCB0aGVyZSdzIGEgbG90IG9mCi0JICBjb2RlIHNoYXJlZCB3aXRoIHY0bDJzcmMsIHNvIG5vdCBzbyBlYXN5IHRvIG1vdmUgaXQgZWxzd2hlcmUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMjQ0Ci0KLTIwMTEtMDEtMDIgMDE6MjQ6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIFJldmVydCAidjRsMjogYWRkIG5vcm0gcHJvcGVydHkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDllMWQ0MTlkMDczMzdlNmRiMmNjMzkzNjQ3MmJlMjA1Y2U5MjdlNTQuCi0JICBSZXZlcnRpbmcgdGhpcyBzaW5jZSBpdCBhZGRzIHVucmV2aWV3ZWQgYW5kIGJhZCBBUEkgdG8gdjRsMnNyYwotCSAgKHByb3BlcnR5IG9mIHR5cGUgZW51bSwgd2l0aCBzZWVtaW5nbHkgcmFuZG9tIGFuZCB1bnNvcnRlZCB2YWx1ZXMpLgotCi0yMDExLTAxLTAxIDIzOjI2OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdG9vbHMvLmdpdGlnbm9yZToKLQkqIHRvb2xzL01ha2VmaWxlLmFtOgotCSogdG9vbHMvUkVBRE1FLmZpbHRlcnN0YW1wOgotCSogdG9vbHMvZmlsdGVyc3RhbXAuc2g6Ci0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC1tLm06Ci0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC4xLmluOgotCSogdG9vbHMvZ3N0LXZpc3VhbGlzZS1tLm06Ci0JKiB0b29scy9nc3QtdmlzdWFsaXNlLjEuaW46Ci0JICB0b29sczogcmVtb3ZlIHVudXNlZCBsZWZ0LW92ZXIgZGlyZWN0b3J5Ci0JICBUaGVzZSBhcmUgYWxsIGluIC1iYXNlL3Rvb2xzLgotCi0yMDEwLTEyLTMxIDEzOjU3OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuaDoKLQkgIG1wNGFkZXBheTogaW1wcm92ZSB0aW1lc3RhbXBzIG9uIG91dGdvaW5nIHBhY2tldHMKLQkgIEltcHJvdmUgcGFyc2luZyBvZiB0aGUgc2FtcGxlcmF0ZS4KLQkgIFBhcnNlIHRoZSBmcmFtZWxlbiBzbyB0aGF0IHdlIGNhbiBjYWxjdWxhdGUgdGltZXN0YW1wcy4KLQkgIFdoZW4gaW50ZXJwb2xsYXRlIHRoZSBpbmNvbW1pbmcgdGltZXN0YW1wIG9uIG91dGdvaW5nIGJ1ZmZlcnMgd2hlbiB0aGVyZSBhcmUKLQkgIG11bHRpcGxlIHN1YmZyYW1lcy4KLQkgIGZpeGVzICM2MjU4MjUKLQotMjAxMC0xMi0zMSAwMDoxMjo1MyAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9kdG1mL3RvbmVfZGV0ZWN0LmM6Ci0JICBkdG1mOiBGaXggYnVpbGQgZmFpbHVyZSBjYXVzZWQgYnkgcHJldmlvdXMgY29tbWl0Ci0KLTIwMTAtMTItMzAgMTg6MjA6NDcgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JKiBnc3QvZHRtZi90b25lX2RldGVjdC5jOgotCSogZ3N0L2R0bWYvdG9uZV9kZXRlY3QuaDoKLQkgIGR0bWY6IGJ1aWxkIGZpeGVzIGZvciBNU1ZDCi0JICBVc2UgZ2ludDE2IGFuZCBHX1BJLgotCi0yMDEwLTEyLTMwIDE4OjE5OjQ3IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2R0bWYvdG9uZV9kZXRlY3QuYzoKLQkgIGR0bWY6IHJlaW5kZW50Ci0KLTIwMTAtMTItMzEgMDI6MTY6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIGNhaXJvLCB2aWRlb2ZpbHRlcjogdXNlIGdzdC9tYXRoLWNvbXBhdC5oIGhlYWRlciBmb3IgcmludAotCi0yMDEwLTEyLTMwIDE0OjMwOjI3IC0wODAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgdmlkZW9iYWxhbmNlOiBDaGVjayBmb3IgSEFWRV9SSU5UIGluc3RlYWQKLQkgIEFsc28gY2hhbmdlIE1fUEkgdG8gR19QSSBmb3IgZ2lnZ2xlcy4KLQotMjAxMC0xMi0zMCAxNDoyMTozNyAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5jOgotCSAgY2Fpcm86IERvbid0IHVzZSAjaWZkZWZzIGluc2lkZSBtYWNyb3MKLQotMjAxMC0xMi0zMCAxNDoyMDo1MiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2thcmFva2UuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSogZ3N0L2dvb20vY29udm9sdmVfZnguYzoKLQkqIGdzdC9nb29tL2lmcy5jOgotCSogZ3N0L2dvb20vbGluZXMuYzoKLQkqIGdzdC9nb29tL3RlbnRhY2xlM2QuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvZmlyZmlsdGVyLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvaWlyZmlsdGVyLWV4YW1wbGUuYzoKLQkgIENoYW5nZSBNX1BJIHRvIEdfUEkKLQotMjAxMC0xMi0zMCAxMjowNzo1MiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogdXNlIEdfT1NfV0lOMzIgZm9yIHdpbmRvd3MgY2hlY2sKLQotMjAxMC0xMi0zMCAxNjoyNDoxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkgIG1wNGFkZXBheTogZml4IHRpbWVzdGFtcHMgb24gYnVmZmVycwotCi0yMDEwLTEyLTMwIDE2OjIyOjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSAgbXB2cGF5OiBmaXggZmx1c2hpbmcgYW5kIGRpc2NvbnQKLQkgIEZpeCBmbHVzaGluZyBhbmQgZGlzY29udHMuCi0JICBDbGVhbiB1cCBpbiBzdGF0ZSBjaGFuZ2VzLgotCi0yMDEwLTEyLTI5IDIzOjM4OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYS1kZW11eDogaW5jcmVhc2UgYWxsb3dlZCBtYXguIGJsb2NrIHNpemUgZm9yIHB1c2ggbW9kZSBmcm9tIDEwTSB0byAxNU0KLQkgIEl0IHdhcyBhbiBhcmJpdHJhcnkgbGltaXQgZnJvbSB0aGUgc3RhcnQsIG1lYW50IGFzIGEgYmFzaWMgc2FuaXR5IGNoZWNrLAotCSAgc28gbWF5IGp1c3QgYXMgd2VsbCBpbmNyZWFzZSBpdCBhIGxpdHRsZS4gV291bGQgYmUgZ29vZCB0byBwcm92aWRlCi0JICBwcm9ncmVzcyByZXBvcnRpbmcgd2hpbGUgY29tcGxldGluZyB0aGUgYmxvY2sgaW4gYW55IGNhc2UuLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzA2MAotCi0yMDEwLTEyLTI5IDIzOjA5OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYS1kZW11eDogYXNzdW1lIG1hdHJvc2thIGlmIG5vIGRvY3R5cGUgaXMgc3BlY2lmaWVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4MDE5Ci0KLTIwMTAtMTItMDQgMTM6NDM6MTEgLTA2MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIHY0bDI6IGFkZCBpbnRlcmxhY2VkIHN1cHBvcnQKLQotMjAxMC0xMC0wMiAxNDo0NToxNCAtMDUwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5Lmg6Ci0JICB2NGwyc2luazogYWRkIG5hdmlnYXRpb24gc3VwcG9ydAotCi0yMDEwLTA0LTA0IDA2OjQzOjQxIC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5oOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogYWRkIG5vcm0gcHJvcGVydHkKLQkgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgR3Vlbm5hZGkgTGlha2hvdmV0c2tpLgotCi0yMDEwLTA3LTEzIDEwOjAzOjUxIC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0JICB2NGwyOiBjbGVhbnVwIGdldC9zZXQgaW5wdXQvb3V0cHV0Ci0JICBvdXRwdXQgZGV2aWNlcyBzaG91bGQgdXNlIGdldC9zZXQgb3V0cHV0LCBhbmQgaW4gZWl0aGVyIGNhc2Ugd2Ugc2hvdWxkCi0JICBub3QgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgdGhlIGlvY3RsIGZhaWxzIGJ1dCB0aGUgZGV2aWNlIGRvZXMgbm90Ci0JICBjbGFpbSB0byBzdXBwb3J0IHRoZSB0dW5lciBpbnRlcmZhY2UKLQotMjAxMC0wNi0xMCAxMToxNTo0NiAtMDUwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuaDoKLQkgIHY0bDJ4b3ZlcmxheTogYWRkIHN1cHBvcnQgdG8gY3JlYXRlIHdpbmRvdwotCSAgSWYgeG92ZXJsYXkgaXMgYXZhaWxhYmxlLCB2NGwyc2luayBzaG91bGQgY3JlYXRlIGEgd2luZG93IGZvciB0aGUgb3ZlcmxheSB0bwotCSAgZGlzcGxheSBpbi4KLQkgIFRoZSB3aW5kb3cgYXV0b21hdGljYWxseSB0cmllcyB0byBtYWtlIGl0c2VsZiBhcyBsYXJnZSBhcyBwb3NzaWJsZS4KLQkgIFRoaXMgd29ya3Mgd2VsbCBvbiBhIHNtYWxsIHNjcmVlbiwgYnV0IHBlcmhhcHMgc2hvdWxkIGZpcnN0IGF0dGVtcHQgdG8gdXNlCi0JICB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gdGhhdCBpcyBwbGF5ZWQgKG5vIHNjYWxpbmcpLgotCi0yMDEwLTA0LTA0IDA2OjQxOjI4IC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogc3BlY2lhbCBoYW5kbGluZyBmb3IgY2FzZXMgZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKCkKLQkgIFNwZWNpYWwgY2FzZSBjaGVjayBmb3Igc3ViLWJ1ZmZlcnM6ICBJbiBjZXJ0YWluIGNhc2VzLCBwbGFjZXMgbGlrZQotCSAgR3N0QmFzZVRyYW5zZm9ybSwgd2hpY2ggbWlnaHQgY2hlY2sgdGhhdCB0aGUgYnVmZmVyIGlzIHdyaXRhYmxlIGJlZm9yZSBjb3B5aW5nCi0JICBtZXRhZGF0YSwgdGltZXN0YW1wLCBhbmQgc3VjaCwgd2lsbCBmaW5kIHRoYXQgdGhlIGJ1ZmZlciBoYXMgbW9yZSB0aGFuIG9uZQotCSAgcmVmZXJlbmNlIHRvIGl0LiAgSW4gdGhlc2UgY2FzZXMsIHRoZXkgd2lsbCBjcmVhdGUgYSBzdWItYnVmZmVyIHdpdGggYW4gb2Zmc2V0PTAKLQkgIGFuZCBsZW5ndGggZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGJ1ZmZlciBzaXplLgotCSAgVGhpcyBjb3VsZCBoYXBwZW4gaW4gdHdvIHNjZW5hcmlvczogKDEpIGEgdGVlIGluIHRoZSBwaXBlbGluZSwgYW5kICgyKSBiZWNhdXNlCi0JICB0aGUgcmVmY250IGlzIGluY3JlbWVudGVkIGluIGdzdF9taW5pX29iamVjdF9mcmVlKCkgYmVmb3JlIHRoZSBmaW5hbGl6ZSBmdW5jdGlvbgotCSAgaXMgY2FsbGVkLCBhbmQgZGVjcmVtZW50ZWQgYWZ0ZXIgaXQgcmV0dXJucy4uICBidXQgcmV0dXJuaW5nIHRoaXMgYnVmZmVyIHRvIHRoZQotCSAgYnVmZmVyIHBvb2wgaW4gdGhlIGZpbmFsaXplIGZ1bmN0aW9uLCBjb3VsZCB3YWtlIHVwIGEgdGhyZWFkIGJsb2NrZWQgaW4KLQkgIF9idWZmZXJfYWxsb2MoKSB3aGljaCBjb3VsZCBydW4gYW5kIGdldCBhIGJ1ZmZlciB3LyByZWZjbnQ9PTIgYmVmb3JlIHRoZSB0aHJlYWQKLQkgIG9yaWdpbmFsbHkgdW5yZWYnaW5nIHRoZSBidWZmZXIgcmV0dXJucyBmcm9tIGZpbmFsaXplIGZ1bmN0aW9uIGFuZCBkZWNyZW1lbnRzCi0JICB0aGUgcmVmY250IGJhY2sgdG8gMSEKLQkgIFRoaXMgaXMgcmVsYXRlZCB0byBpc3N1ZSAjNTQ1NTAxCi0KLTIwMTAtMDQtMDQgMDY6Mzk6NTIgLTA1MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGZpeCByYWNlIGNvbmRpdGlvbgotCSAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB3b3VsZCBiZSB6ZXJvJ2Qgb3V0IGluIGdzdF92NGwyX2J1ZmZlcl9maW5hbGl6ZSgpCi0JICBhZnRlciB0aGUgYnVmZmVyIGlzIHFidWYnZCBvciBwdXNoZWQgb250byB0aGUgcXVldWUgb2YgYXZhaWxhYmxlIGJ1ZmZlcnMuLgotCSAgbGVhdmluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSB0aHJlYWQgd2FpdGluZyBmb3IgdGhlIGJ1ZmZlciBjb3VsZCBhd2FrZQotCSAgYW5kIHNldCBiYWNrIGEgdmFsaWQgc2l6ZSBiZWZvcmUgdGhlIGZpbmFsaXppbmcgdGhyZWFkIHplcm9zIG91dCB0aGUgbGVuZ3RoLgotCSAgVGhpcyB3b3VsZCByZXN1bHQgdGhhdCB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBoYXMgbGVuZ3RoIG9mIHplcm8uCi0KLTIwMTAtMDQtMDQgMDY6Mzk6MDggLTA1MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmg6Ci0JICB2NGwyc2luazogYWRkIHByb3BlcnRpZXMgdG8gY29udHJvbCBjcm9wCi0KLTIwMTAtMDQtMDQgMDY6Mzc6MTYgLTA1MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5LmM6Ci0JICB2NGwyOiByZS1lbmFibGUgeC1vdmVybGF5IHN1cHBvcnQKLQotMjAxMC0xMi0yNSAxMTo1MjozNiAtMDYwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IGZpeCBmb3IgUEFVU0VELT5SRUFEWS0+UEFVU0VEIHN0YXRlIHRyYW5zaXRpb25zCi0JICBXaGVuIHY0bDJzaW5rIGdvZXMgdG8gUEFVU0VELT5SRUFEWSBpdCBvbmx5IHN0b3BzIHN0cmVhbWluZywgc28gdGhlIHN0YXRlCi0JICBzaG91bGQgYmUgc2V0IHRvIFNUQVRFX1BFTkRJTkdfU1RSRUFNT04gaW4gY2FzZSB0aGUgZWxlbWVudCB0cmFuc2l0aW9ucwotCSAgYmFjayB0byBQTEFZSU5HLgotCi0yMDEwLTA0LTA0IDA2OjI4OjUxIC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5oOgotCSAgdjRsMnNpbms6IGFkZCAibWluLXF1ZXVlZC1idWZzIiBwcm9wZXJ0eQotCi0yMDEwLTA0LTA0IDA2OjI2OjUwIC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzaW5rOiBBZGQgc3VwcG9ydCBmb3IgYmxvY2tpbmcgZGVxdWV1ZS4KLQkgIFdlJ2QgcHJlZmVyIHRvIHRocm90dGxlIHRoZSBkZWNvZGVyIGlmIHdlIHJ1biBvdXQgb2YgYnVmZmVycywgdG8ga2VlcCBhIGJvdW5kCi0JICBvbiBtZW1vcnkgdXNhZ2UuICBBbHNvLCBmb3IgT01BUDQgaXQgaXMgYSByZXF1aXJlbWVudCBvZiB0aGUgZGVjb2RlciB0byBub3QKLQkgIGFsdGVybmF0ZSBiZXR3ZWVuIG1lbW9yeSBhbGxvY2VkIGJ5IHRoZSBkaXNwbGF5IGRyaXZlciBhbmQgbWFsbG9jJ2QgdXNlcnNwYWNlCi0JICBtZW1vcnkuCi0KLTIwMTAtMDQtMDQgMDY6MjQ6NDEgLTA1MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkgIHY0bDI6IGNsZWFyIGZsYWdzIGJlZm9yZSByZXVzaW5nIGJ1ZmZlciBmcm9tIGJ1ZmZlciBwb29sCi0JICBub3RlOiB0aGlzIHJlYWxseSBvbmx5IGFmZmVjdHMgdjRsMnNpbmsgc2luY2UgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZ2V0KCkgaXMKLQkgIG9ubHkgY2FsbGVkIG9uY2UgcGVyIGJ1ZmZlciBpbiB0aGUgdjRsMnNyYyBjYXNlIChpbgotCSAgZ3N0X3Y0bDJzcmNfYnVmZmVyX3Bvb2xfYWN0aXZhdGUoKSkKLQotMjAxMC0wNC0wNCAwNjoyMzozMSAtMDUwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IGRvbid0IHJlbmRlciBwcmVyb2xsIGJ1ZmZlcnMKLQkgIE1vc3QgdjRsMiBkcml2ZXJzIHdpbGwgZ2V0IHVwc2V0IHdoZW4geW91IHF1ZXVlIHRoZSBzYW1lIGJ1ZmZlciB0d2ljZSBpbiBhCi0JICByb3cgd2l0aG91dCBmaXJzdCBkZXF1ZXVlaW5nIGl0LgotCSAgUmVuZGVyaW5nIG9mIHByZS1yb2xsIGJ1ZmZlcnMgY2FuIGJlIHJlLWludHJvZHVjZWQgbGF0ZXIsIGJ1dCB3aWxsIHJlcXVpcmUKLQkgIHRyYWNraW5nIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVyLCBhbmQgYXZvaWRpbmcgdG8gcmUtUUJVRiBpZiB0aGUgYnVmZmVyIGhhcwotCSAgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byB0aGUgZHJpdmVyLgotCi0yMDEwLTA0LTA0IDA2OjIyOjQzIC0wNTAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JICB2NGwyc2luazogSW1wcm92ZSBiZWhhdmlvciBmb3Igc2hhcmVkIGJ1ZmZlcnMuCi0JICBXaGVuIHRoZSBkZWNvZGVyIGlzIHVzaW5nIHBhZF9hbGxvYygpLCB2NGwyc2luayB3b3VsZCBiZWhhdmUgYmFkbHkgaWYKLQkgIHRoZSBudW1iZXIgb2YgYnVmZmVycyAoJ3F1ZXVlLXNpemUnIHByb3BlcnR5KSB3YXMgbm90IGhpZ2ggZW5vdWdoIHRvCi0JICBhY2NvdW50IGZvciBhbGwgdGhlIGJ1ZmZlcnMgbmVlZGVkIGJ5IHRoZSBkZWNvZGVyLCBhbmQgb3RoZXIgZWxlbWVudHMKLQkgIChzdWNoIGFzIHF1ZXVlcykgYmV0d2VlbiB0aGUgZGVjb2RlciBhbmQgdjRsMnNpbmsuICBUaGlzIHBhdGNoCi0JICBzbGlnaHRseSBpbmNyZWFzZXMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMsIGFuZCBjaGFuZ2VzIHY0bDJzaW5rCi0JICB0byBkcm9wIGZyYW1lcyByYXRoZXIgdGhhbiByZXR1cm4gYW4gZXJyb3IgaW4gY2FzZSB0aGUgbnVtYmVyIG9mCi0JICBidWZmZXJzIGlzIG5vdCBoaWdoIGVub3VnaC4KLQotMjAxMC0xMS0xNSAxNTo1ODoyOCArMDEwMCAgQW5keSBXaW5nbyA8d2luZ29Ab2Jsb25nLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkgIGFkZCAiY2xpZW50IiBwcm9wZXJ0eQotCSAgKiBleHQvcHVsc2UvcHVsc2VzcmMuYyAoZ3N0X3B1bHNlc3JjX2NsYXNzX2luaXQsIGdzdF9wdWxzZXNyY19pbml0KQotCSAgKGdzdF9wdWxzZXNyY19zZXRfcHJvcGVydHksIGdzdF9wdWxzZXNyY19nZXRfcHJvcGVydHkpCi0JICAoZ3N0X3B1bHNlc3JjX29wZW4pOiBBZGQgYSAiY2xpZW50IiBwcm9wZXJ0eSwgYXMgaW4gcHVsc2VzaW5rLgotCSAgRml4ZXMgIzYzNDkxNAotCi0yMDEwLTEyLTI5IDE1OjU0OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2VyaWFsaXNlL2Rlc2VyaWFsaXNlIGZsb2F0cyB3aXRob3V0IGNoYW5naW5nIGxvY2FsZQotCSAgVXNlIGdfYXNjaWlfZHRvc3RyKCkgYW5kIGdfYXNjaWlfc3RydG9kKCkgdG8gc2VyaWFsaXNlL2Rlc2VyaWFsaXNlCi0JICBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBpbnN0ZWFkIG9mIHVnbHkgaGFja3MgdGhhdCBzd2l0Y2ggbG9jYWxlCi0JICBiZWZvcmUgYW5kIGFmdGVyIGNhbGxpbmcgbGliYyBmdW5jdGlvbnMgKHdoaWNoIGlzIG5vdCBhIGdvb2QgaWRlYQotCSAgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbikuCi0KLTIwMTAtMTItMjkgMTQ6NDA6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSAgcnRwanBlZ2RlcGF5OiBmaXggZnJhbWVyYXRlIHBhcnNpbmcgZm9yIGxvY2FsZXMgdGhhdCB1c2UgYSBjb21tYSBhcyBmbG9hdGluZyBwb2ludAotCSAgYXRvZigpIGNvbnZlcnRzIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZSwgYnV0IHRoZQotCSAgZnJhbWVyYXRlIHN0cmluZyB3aWxsIGxpa2VseSBhbHdheXMgdXNlIGEgZG90IGFzIGZsb2F0aW5nIHBvaW50Ci0JICBzZXBhcmF0b3IsIHNvIHVzZSBnX2FzY2lpX3N0cnRvZCgpIGluc3RlYWQgKGJ1dCBhbHNvIGNhbm9uaWNhbGlzZQotCSAgdGhlIHN0cmluZyBiZWZvcmUsIHNvIHdlIGNhbiBoYW5kbGUgYm90aCBmb3JtYXRzIGFzIGlucHV0KS4KLQotMjAxMC0xMi0yNyAxMzoxMTo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IHVzZSB0aGUgcmlnaHQgdmFyaWFibGUKLQkgIFVzZSB0aGUgcmlnaHQgdmFyaWFibGUgZm9yIHNwZWNpZnlpbmcgdGhhdCB3ZSBzZW50IGEgcmVjZWl2ZXIgcmVwb3J0LgotCi0yMDEwLTEyLTIzIDE2OjQyOjI5IC0wNjAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyOiBmaXggdHlwbwotCi0yMDEwLTEyLTIzIDE2OjAzOjAwIC0wNjAwICBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2EtZGVtdXg6IGFkZCBzdHJlYW0tZm9ybWF0IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyBmb3IgaDI2NAotCi0yMDEwLTEyLTIyIDExOjQxOjU5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSAgZ3N0cGF5OiBmaXgga2xhc3MsIGFkZCBSVFAgYXMgYSB1c2UgY2FzZQotCi0yMDEwLTEyLTEyIDE1OjEwOjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JICBnc3RkZXBheTogY2xlYW51cCB0aGUgY2FjaGUKLQotMjAxMC0xMi0xMiAwNToxMDowMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc3RwYXkuaDoKLQkgIGdzdHBheS9kZXBheTogYWRkIGdlbmVyaWMgZ3N0cmVhbWVyIHBheWxvYWRlcgotCSAgQWRkIHRoZSBiZWdpbm5pbmdzIG9mIGEgZ2VuZXJpYyBHU3RyZWFtZXIgYnVmZmVycyBwYXlsb2FkZXIuCi0KLTIwMTAtMTItMjMgMTc6MDY6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSAgbXA0Z3BheTogcmVzZXQgc3RhdGUgb24gZmx1c2gtc3RvcAotCi0yMDEwLTEyLTIzIDE2OjI2OjA3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSAgbXA0Z2RlcGF5OiBmbHVzaCBzdGF0ZSBvbiBmbHVzaC1zdG9wCi0KLTIwMTAtMTItMjMgMTY6MjU6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG9uLW5wdC1zdG9wIGlzIGEgbWFuYWdlciBzaWduYWwKLQotMjAxMC0xMi0yMyAxNToyNDoyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogaW1wcm92ZSBSVFAgc2Vzc2lvbiBoYW5kbGluZwotCSAgU3RvcmUgdGhlIFJUUCBzZXNzaW9uIGluIHRoZSBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gbW9yZSBlZmZpY2llbnRseQotCSAgcGVyZm9ybSBhY3Rpb25zIG9uIHRoZSBzdHJlYW0gYmFzZWQgb24gUlRQIHNpZ25hbHMuCi0KLTIwMTAtMTItMjMgMTM6NTU6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiBpbmNsdWRlIGxhc3Qgc2VuZCBSQiBibG9jawotCSAgT25seSByZXBvcnQgUkIgdmFsdWVzIGZvciBub24taW50ZXJuYWwgc291cmNlcy4KLQkgIFJlcG9ydCBub3Qgb25seSB0aGUgUkIgYmxvY2tzIHdlIGxhc3QgcmVjZWl2ZWQgZnJvbSBidXQgYWxzbyB0aGUgbGFzdCBSQgotCSAgYmxvY2sgd2Ugc2VudCB0byBhIHNvdXJjZS4KLQotMjAxMC0xMi0yMyAxMzo1Mjo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBydHBzZXNzaW9uOiByZW1lbWJlciBsYXN0IHNlbnQgUkIgdmFsdWVzLgotCi0yMDEwLTEyLTIzIDEzOjAwOjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogaW5jbHVkZSBhbGwgc3RhdHMgYW5kIGRvY3VtZW50Ci0JICBJbmNsdWRlIGFsbCBwb3NzaWJsZSBzdGF0cyBvZiBhIHNvdXJjZSBpbiB0aGUgc3RhdHMgc3RydWN0dXJlIGJlY2F1c2Ugd2UgbWlnaHQKLQkgIGJlIGludGVyZXN0ZWQgaW4gd2hhdCBoYXBwZW5lZCBpbiB0aGUgcGFzdC4KLQkgIERvY3VtZW50IHRoZSBzdGF0cyBwcm9wZXJ0eSBhbmQgdGhlIGZpZWxkcy4KLQotMjAxMC0xMi0yMyAxMjo1OTo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1QQ01BLmM6Ci0JICBleGFtcGxlczogYWRkIGV4YW1wbGUgUlRQIHN0YXRzCi0JICBBZGQgc29tZSBtb3JlIFJUUCBleGFtcGxlcyBmb3IgaG93IHRvIHJldHJpZXZlIFJUUCBzdGF0cyBpbiBhIHJlY2VpdmVyLgotCi0yMDEwLTEyLTIzIDEyOjU4OjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBhbHNvIGVtaXQgUlRDUCBhY3Rpdml0eSBvbiBTUgotCSAgQWxzbyBlbWl0IFJUQ1AgYWN0aXZpdHkgc2lnbmFscyB3aGVuIHdlIHJlY2VpdmUgYW4gU1IgcGFja2V0IHdpdGhvdXQgUkIgYmxvY2tzLAotCSAgc3VjaCBhcyBmcm9tIGEgc2VuZGVyIHRoYXQgaXMgbm90IHJlY2VpdmluZyBhbnl0aGluZy4KLQotMjAxMC0xMi0yMyAxMToxMDo1NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBkb2NzOiBhZGQgc29tZSBtb3JlIGdzdHJ0cGJpbiBkb2NzCi0KLTIwMTAtMTItMjIgMjE6Mjc6MTEgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICB4aW1hZ2VzcmM6IHJlbW90ZSBpcyBhIGJvb2xlYW4gKGFuZCBub3QgdWludCkgcHJvcGVydHkKLQotMjAxMC0xMi0yMiAxOTo1ODoyMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRG9uJ3QgdXNlIGdzdF9wYWRfYWxsb2NfYnVmZmVyKCkKLQkgIFVzaW5nIHRoaXMgaW4gYSBkZW11eGVyIHdpbGwgY2F1c2UgZGVhZGxvY2tzIGlmIHRoZXJlJ3MKLQkgIGEgcGFkIHdpdGggYSBwZW5kaW5nIHBhZC1ibG9jayBkb3duc3RyZWFtLCBubyBtYXR0ZXIgaWYKLQkgIHRoZXJlIGlzIGEgcXVldWUgYmV0d2VlbiB0aGUgcGFkIG9yIG5vdC4gUXVldWVzIHBhc3MKLQkgIGJ1ZmZlcmFsbG9jIGRvd25zdHJlYW0gZnJvbSB0aGUgc2FtZSB0aHJlYWQgYW5kIG9ubHkKLQkgIGFjdCBhcyBhIHRocmVhZCBib3VuZGFyeSBmb3IgZXZlbnRzIGFuZCBidWZmZXJzLgotCi0yMDEwLTEyLTIyIDE0OjE0OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGZpeCBzdWJ0aXRsZSBwYWQgdGVtcGxhdGUsIHdlIG9ubHkgaGFuZGxlIGthdGUgZm9yIG5vdwotCi0yMDEwLTEyLTE2IDExOjQ0OjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgZG9jczogdXBkYXRlIHJ0c3BzcmMgZG9jcywgcnRwYmluIGlzIG5vdCBpbiAtYmFkIGFueSBtb3JlCi0KLTIwMTAtMTItMjIgMTE6NDI6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHVubG9jayBiZWZvcmUgZW1pdHRpbmcgc2lnbmFscwotCi0yMDEwLTEyLTIxIDIyOjM0OjQ5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFjM3BheS5oOgotCSAgcnRwYWMzcGF5OiBhZGQgQUMzIHBheWxvYWRlcgotCi0yMDEwLTEyLTIxIDIyOjE3OjE5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5LmM6Ci0JICBhYzNkZXBheTogZml4IGRlYnVnIGNhdGVnb3J5IGRlc2NyaXB0aW9uCi0KLTIwMTAtMTItMjEgMjI6MTY6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JICBtcGFwYXk6IGFkZCBkZWJ1ZyBjYXRlZ29yeQotCi0yMDEwLTEyLTIwIDE0OjQ5OjAyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9qcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBBZGRzIGFub3RoZXIgdGVzdCBjYXNlCi0JICBBZGRzIGEgdGVzdCBmb3IganBlZ2VuYyB0byBjaGVjayB0aGF0IGlzIHBvc3NpYmxlIHRvIG5lZ290aWF0ZSBhbmQKLQkgIHB1c2ggYnVmZmVycyB3aXRoIGRpZmZlcmVudCByZXNvbHV0aW9uIG9uZSBhZnRlciBhbm90aGVyLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNzY4NgotCi0yMDEwLTEyLTIxIDEzOjM3OjQwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogc2luayBwYWQncyBnZXRjYXBzIHNob3VsZG4ndCB1c2UgdGhlIHNyYyBwYWQgZ2V0Y2FwcwotCSAgSW5zdGVhZCBvZiB1c2luZyBnZXRfYWxsb3dlZF9jYXBzIG9uIHRoZSBzcmNwYWQsIHRoZSBzaW5rcGFkIGdldGNhcHMKLQkgIHNob3VsZCB1c2UgdGhlIGdldGNhcHMgb2YgdGhlIHNyY3BhZCdzIHBlZXIuIFRoaXMgd2F5IHRoZSBzcmNwYWQKLQkgIGNhbiBrZWVwIHVzaW5nIGZpeGVkX2NhcHMgYW5kIHNpbmtwYWQgZ2V0Y2FwcyBleHBvc2VzIGFsbCBjYXBzCi0JICB0aGF0IGNhbiBiZSBuZWdvdGlhdGVkCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3Njg2Ci0KLTIwMTAtMTItMjEgMTY6NTg6NDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgcnRwOiBhZGQgUlRQIGhpbnQgdG8gdGhlIGtsYXNzCi0KLTIwMTAtMTItMjEgMTY6NDk6MjggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgcnRwOiBmaXggcmFuayBvZiBwYXlsb2FkZXJzIGFuZCBkZXBheWxvYWRlcnMKLQkgIFNldCB0aGUgcGF5bG9hZGVycyBhbmQgZGVwYXlsb2FkZXJzIHRvIGEgcmVhc29uYWJsZSByYW5rLgotCi0yMDEwLTEyLTIxIDE1OjI0OjE4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgdnJhd2RlcGF5OiByZXNldCBkZXBheWxvYWRlciBzdGF0ZQotCSAgUmVzZXQgdGhlIGRlcGF5bG9hZGVyIHN0YXRlIG9uIGZsdXNoLXN0b3AuCi0KLTIwMTAtMTItMjEgMTU6MDc6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5Lmg6Ci0JICBtcDRwYXk6IHVzZSB2bWV0aG9kIGZvciBpbnRlcmNlcHRpbmcgZXZlbnRzCi0KLTIwMTAtMTItMjEgMTM6NTU6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICB0aGVvcmFwYXk6IGNsZWFyIHBhY2tldCBvbiBmbHVzaC1zdG9wCi0KLTIwMTAtMTItMjEgMTM6NDk6NDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICB2b3JiaXNwYXk6IGNsZWFyIHBhY2tldCBvbiBmbHVzaC1zdG9wCi0KLTIwMTAtMTItMjEgMTI6MzE6NDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JICBtcDRnZGVwYXk6IHJlc2V0IGRlcGF5bG9hZGVyIHN0YXRlCi0KLTIwMTAtMTItMjEgMTI6Mjk6NTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgaDI2NHBheTogZmx1c2ggYWRhcHRlciBvbiBmbHVzaC1zdG9wCi0KLTIwMTAtMTItMjAgMTg6NDk6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JICBtcGFwYXk6IGZsdXNoIGxhc3QgcGFja2V0cyBvbiBFT1MKLQotMjAxMC0xMi0yMCAxNzo0NzowNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAxNjk0NjJhIHRvIDQ2NDQ1YWQKLQotMjAxMC0xMi0yMCAxNjo1MTo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgIG1wYXBheTogcmVzZXQgcGF5bG9hZGVyIG9uIHN0YXRlIGNoYW5nZQotCi0yMDEwLTEyLTIwIDE2OjA1OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSAgbXBhcGF5OiByZXNldCBwYXlsb2FkZXIgb24gZmx1c2gKLQkgIFJlc2V0IHRoZSBwYXlsb2FkZXIgb24gYSBmbHVzaCBldmVudC4KLQkgIEhhbmRsZSBESVNDT05UIGJldHRlci4KLQotMjAxMC0xMi0yMCAxNTo1NDo0NSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGdldCBiZXR0ZXIgYnVmZmVyaW5nIGxldmVsCi0JICBXaGVuIHRoZSBqaXR0ZXJidWZmZXIgY29udGFpbnMgLTEgdGltZXN0YW1wcywgbWFrZSBzdXJlIHdlIHN0aWxsIGNhbGN1bGF0ZSB0aGUKLQkgIGJ1ZmZlciBmaWxsIGxldmVsIGJ5IHNraXBwaW5nIHRoZSAtMSBidWZmZXJzLgotCSAgVHJ5IHRvIGJlIG1vcmUgcmVzaWxpZW50IHRvIHdlaXJkIGlucHV0IHRpbWVzdGFtcHMuCi0KLTIwMTAtMTItMjAgMTE6MTA6MjIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBwcm92aWRlIGEgY2xvY2suCi0JICBzaW5jZSB3ZSBhcmUgdXNpbmcgdGhlIGNsb2NrIGZvciBzeW5jLCB3ZSBuZWVkIHRvIGFsc28gcHJvdmlkZSBhIGNsb2NrIGZvciBnb29kCi0JICBtZWFzdXJlLiBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBpZiBkb3duc3RyZWFtIGVsZW1lbnRzIHByb3ZpZGUgYSBjbG9jaywgd2UKLQkgIGRvbid0IHdhbnQgdG8gaGF2ZSB0aGF0IGNsb2NrIHNlbGVjdGVkIGJlY2F1c2UgaXQgbWlnaHQgbm90IGJlIHJ1bm5pbmcgeWV0LgotCi0yMDEwLTEyLTIwIDEwOjQ5OjU2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogY29weSBidWZmZXJpbmcgc3RhdHMKLQkgIHdoZW4gd2UgY3JlYXRlIGFuIGFnZ3JlZ2F0ZSBidWZmZXJpbmcgbWVzc2FnZSwgY29weSB0aGUgYnVmZmVyaW5nIHN0YXRzIGZvcm0gdGhlCi0JICBsYXN0IG1lc3NhZ2UuIEF0IGxlYXN0IHdlIGdldCBjb3JyZWN0IGJ1ZmZlcmluZyBtb2RlIHRoZW4uCi0KLTIwMTAtMTItMTkgMTE6MDI6NDEgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2ZW5jLmM6Ci0JICB3YXZlbmM6IEZpeCBtZW1vcnkgbGVha3MgaW4gdGhlIHVuaXQgdGVzdAotCi0yMDEwLTEyLTE5IDEwOjU4OjE2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5oOgotCSAgcmFkaW9hY3R2OiBQcmV2ZW50IHVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlcwotCSAgRml4ZXMgYnVnICM2MTg2NTIuCi0KLTIwMTAtMTItMTkgMTA6MjI6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RjYXBzZGVidWcuYzoKLQkgIGNhcHNkZWJ1ZzogRG9uJ3QgbGVhayBwYWQgdGVtcGxhdGVzIGNyZWF0ZWQgZnJvbSBzdGF0aWMgcGFkIHRlbXBsYXRlcwotCi0yMDEwLTExLTI5IDEyOjM2OjA2ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmg6Ci0JICB4aW1hZ2VzcmM6IGNoYW5nZSBmcm9tIFhHZXRJbWFnZSB0byBYR2V0U3ViSW1hZ2UgZGVwZW5kYW50IG9uIGEgcHJvcGVydHkKLQkgIHhpbWFnZXNyYzogY2hhbmdlIGZyb20gWEdldEltYWdlIHRvIFhHZXRTdWJJbWFnZSBkZXBlbmRhbnQgb24gYSBwcm9wZXJ0eQotCSAgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgaGl0cyBieSBkZWZhdWx0LgotCi0yMDEwLTExLTI4IDE2OjA0OjM1ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIHhpbWFnZXNyYzogdXNlIFhHZXRTdWJJbWFnZSBpbnN0ZWFkIG9mIFhHZXRJbWFnZSwgd29ya3Mgd2l0aCByZW1vdGUgWAotCSAgeGltYWdlc3JjOiB1c2UgWEdldFN1YkltYWdlIGluc3RlYWQgb2YgWEdldEltYWdlLCB3b3JrcyB3aXRoIHJlbW90ZSBYCi0JICAob24gbXkgc2V0dXAgYW55d2F5Li4uKQotCi0yMDEwLTExLTI3IDE3OjE1OjMyICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPHZpbmNlbnQucGVucXVlcmNoQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIHhpbWFnZXNyYzogZml4IHZhcmlvdXMgd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyBiZWluZyBvZmYgYnkgb25lLAotCSAgeGltYWdlc3JjOiBmaXggdmFyaW91cyB3aWR0aC9oZWlnaHQgY2FsY3VsYXRpb25zIGJlaW5nIG9mZiBieSBvbmUsCi0JICBhbmQgbWFrZSBpdCBzbyBhIHNpbmdsZSBwaXhlbCB3aWR0aC9oZWlnaHQgY2FuIGJlIGNhcHR1cmVkIChleGNlcHQKLQkgIHRoZSB0b3AgbGVmdCBvbmUsIGFzIDAsMCwwLDAgaXMgcmVzZXJ2ZWQgZm9yIGZ1bGwgc2NyZWVuIGFzIHBlcgotCSAgdGhlIHByb3BlcnR5IGNvbW1lbnRzKS4KLQotMjAxMC0xMi0xNyAxOToxOTozNSAtMDYwMCAgUm9iIENsYXJrIDxyb2JAdGkuY29tPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBmaXggY29tcGlsZSBlcnJvcnMgb24gbWFjb3N4Ci0JICB3aXRoIGk2ODYtYXBwbGUtZGFyd2luMTAtZ2NjLTQuMi4xOgotCSAgZ3N0djRsMm9iamVjdC5jOiBJbiBmdW5jdGlvbiAnZ3N0X3Y0bDJfb2JqZWN0X2dldF9uZWFyZXN0X3NpemUnOgotCSAgZ3N0djRsMm9iamVjdC5jOjE5ODg6IHdhcm5pbmc6IGZvcm1hdCAnJXUnIGV4cGVjdHMgdHlwZSAndW5zaWduZWQgaW50JywgYnV0IGFyZ3VtZW50IDEyIGhhcyB0eXBlICdnaW50IConCi0JICBnc3R2NGwyb2JqZWN0LmM6MTk4ODogd2FybmluZzogZm9ybWF0ICcldScgZXhwZWN0cyB0eXBlICd1bnNpZ25lZCBpbnQnLCBidXQgYXJndW1lbnQgMTMgaGFzIHR5cGUgJ2dpbnQgKicKLQotMjAxMC0xMi0xNyAxNTozODoxNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IGRldGVybWluZSBvdXRwdXQgaDI2NCBsYXlvdXQgdXNpbmcgY2FwcyBuZWdvdGlhdGlvbgotCSAgLi4uIHRoZXJlYnkgKHBhcnRpYWxseSkgZGVwcmVjYXRpbmcgcHJvcGVydGllcyBjdXJyZW50bHkgY29udHJvbGxpbmcgd2hldGhlcgotCSAgb3Igbm90IGJ5dGUtc3RyZWFtIG91dHB1dCBvciBOQUwvQVUgYWxpZ25tZW50ICh0aG91Z2ggcHJvcGVydGllcyBzdGlsbCBkZXRlcm1pbmUKLQkgIGZhbGxiYWNrIGlmIG5vdGhpbmcgc3BlY2lmaWVkIGluIGNhcHMpLgotCSAgRml4ZXMgIzYwNjY2Mi4KLQotMjAxMC0xMi0xNiAxODo1NTo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkgIGoya3BheTogaGFuZGxlIEVPQyBjb3JyZWN0bHkKLQkgIERvbid0IGluY2x1ZGUgdGhlIG5leHQgMiBieXRlcyB3aGVuIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIGFuZCB0aGVyZSBhcmUKLQkgIG5vIG1vcmUgYnl0ZXMgbGVmdC4KLQotMjAxMC0xMi0xNiAxNToxNTo0OSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZmx1c2ggcmVtYWluaW5nIGJ1ZmZlcmVkIHNhbXBsZXMgb24gRU9TCi0JICAuLi4gd2hpY2ggY2FuIG1ha2UgYSBkaWZmZXJlbmNlIGJldHdlZW4gYWxsIG9yIG5vdGhpbmcgd2hlbiBkZWFsaW5nCi0JICB3aXRoIHNob3J0IHN0cmVhbXMgYW5kIHJlbGF0aXZlbHkgbGFyZ2UgcmluZ2J1ZmZlciBzZWdtZW50LgotCi0yMDEwLTEyLTE2IDEwOjA0OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogQ2hhbmdlIGNsYXNzaWZpY2F0aW9uIHRvIEZpbHRlci9FZmZlY3QvVmlkZW8vRGVpbnRlcmxhY2UKLQotMjAxMC0xMi0xNSAxODoyMTozNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JICBydHBqMmtwYXk6IEluaXRpYWxpemUgYWxsIGZpZWxkcwotCSAgTWFrZXMgc2FkIGNvbXBsaWVycyBoYXBweQotCi0yMDEwLTEyLTE1IDE2OjIyOjU0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgajJrcGF5OiBjbGVhbnVwIGhlYWRlciBjb25zdHJ1Y3Rpb24KLQkgIFVzZSBhIHNpbXBsZXIgd2F5IG9mIGNvbnN0cnVjdGluZyB0aGUgaGVhZGVyIHRoYXQgZG9lc24ndCBkZXBlbmQgb24KLQkgIHRoZSBlbmRpYW5uZXNzLgotCi0yMDEwLTEyLTE1IDEzOjMwOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBkZXBlbmQgb24gLWJhc2UgZnJvbSBnaXQgZm9yIG5ldyBydHAgYmFzZSBkZXBheWxvYWRlciBmZWF0dXJlcwotCSAgVGhpcyBpcyBvayBpbiB0aGlzIGNhc2UsIHNpbmNlIHRoZSBwbGFuIGlzIHRvIHJlbGVhc2UgY29yZS9iYXNlIGFnYWluCi0JICBhbG9uZyB3aXRoIGdvb2QvdWdseS9iYWQgaW4gdGhlIG5leHQgY3ljbGUuCi0KLTIwMTAtMTItMTUgMTQ6NTU6NTggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDIwNzQyYWUgdG8gMTY5NDYyYQotCi0yMDEwLTEyLTE1IDEzOjEyOjA5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5Lmg6Ci0JICBqMmtkZXBheTogYWRkIHN1cHBvcnQgZm9yIGJ1ZmZlciBsaXN0cwotCi0yMDEwLTEyLTE0IDE4OjEyOjQzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBmaXggYXZlcmFnZSBSVENQIHBhY2tldCBzaXplIHNvbWUgbW9yZS4KLQkgIEZpeCBzdHVwaWQgZXJyb3IgaW4gYXZlcmFnaW5nIG1hY3JvLgotCSAgSW5jbHVkZSB1ZHAgaGVhZGVycyBpbiBwYWNrZXQgbGVuZ3RoIGVzdGltYXRpb24uCi0KLTIwMTAtMTItMTQgMTc6MTU6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JICBydHBiaW46IGNvcnJlY3RseSBjYWxjdWxhdGUgUlRDUCBwYWNrZXQgc2l6ZQotCi0yMDEwLTEyLTE0IDE1OjI3OjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgajJrcGF5OiBzdG9wIHNjYW5uaW5nIHdoZW4gd2UgcmVhY2hlZCB0aGUgZW5kCi0JICBTdG9wIHNjYW5uaW5nIGZvciBtYXJrZXJzIHdoZW4gd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkYXRhLgotCi0yMDEwLTEyLTEzIDE2OjIzOjI0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwMTFiY2M4IHRvIDIwNzQyYWUKLQotMjAxMC0xMi0xMyAxMjo1NjoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGF2b2lkIGxlYWtpbmcgc2luayBldmVudHMKLQkgIEF2b2lkIGxlYWtpbmcgdGhlIG5ld3NlZ21lbnQgZXZlbnQgd2hlbiBpdCBoYXMgdGhlIHdyb25nIGZvcm1hdC4KLQotMjAxMC0xMi0xMiAxNDo1MzoxNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JICBtcDR2cGF5OiB3ZSBjYW4gYWxzbyBhY2NlcHQgeHZpZCBjYXBzCi0KLTIwMTAtMTItMTIgMDE6Mzk6MDYgKzExMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogQXZvaWQgaW5maW5pdGUgbG9vcCBkcmFpbmluZyBmcmFtZXMKLQkgIFdoZW4gdGhlIHBpcGVsaW5lIGlzIGZsdXNoZWQganVzdCBhcyB3ZSdyZSBkcmFpbmluZyBoaXN0b3J5LAotCSAgZG9uJ3QgbG9vcCBpbmZpbml0ZWx5LCBqdXN0IGRpc2NhcmQgdGhlIGhpc3RvcnkgYW5kIGFib3J0LgotCi0yMDEwLTEyLTExIDE3OjM5OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAganBlZ2RlYzogYWRkICJtYXgtZXJyb3JzIiBwcm9wZXJ0eSB0byBpZ25vcmUgZGVjb2RpbmcgZXJyb3JzCi0JICBBZGQgcHJvcGVydHkgdG8gaWdub3JlIGRlY29kaW5nIGVycm9ycy4gRGVmYXVsdCBpcyB0byBpZ25vcmUgYSBmZXcKLQkgIGRlY29kaW5nIGVycm9ycyBpZiB0aGUgaW5wdXQgaXMgcGFja2V0aXplZCwgYnV0IGVycm9yIG91dCBpbW1lZGlhdGVseQotCSAgaWYgdGhlIGlucHV0IGlzIG5vdCBwYWNrZXRpemVkLgotCSAgSWdub3JpbmcgZXJyb3JzIGZvciBwYWNrZXRpemVkIGlucHV0IG1vc3QgbGlrZWx5IGRvZXNuJ3Qgd29yawotCSAgcHJvcGVybHkgeWV0LCBzbyBkb24ndCBkbyB0aGF0IGZvciBub3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzMDYzCi0KLTIwMTAtMDUtMjggMTU6Mjc6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBmcmVlL21hbGxvYyBpbnN0ZWFkIG9mIHJlYWxsb2MsIGF2b2lkcyBtZW1jcHkKLQotMjAxMC0xMi0xMSAxNzo0OTowMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IENoZWNrIGlmIHRoZXJlJ3MgYWN0dWFsbHkgYSBzZWVrIHRhYmxlIGJlZm9yZSBwYXJzaW5nIGl0Ci0KLTIwMTAtMTItMTEgMTc6NDY6MTcgKzAxMDAgIEtpc2hvcmUgQXJlcGFsbGkgPGtpc2hvcmUuYXJlcGFsbGlAZ21haWwuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBJbXBsZW1lbnQgQ09OVkVSVCBhbmQgRk9STUFUUyBxdWVyeQotCSAgRml4ZXMgYnVnICM2MzY3ODQuCi0KLTIwMTAtMDctMDEgMDA6MjI6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thLWRlbXV4OiBwdXQgdW5yZWNvZ25pc2VkIFJJRkYgZm9ybWF0IElEcyBpbnRvIHRoZSB1bmtub3duIGNhcHMKLQkgIEV4dHJhIGluZm8gY2FuJ3QgaHVydC4gRmllbGQgbmFtZXMgYXJlbid0IG5lY2Vzc2FyaWx5IGNvbnNpc3RlbnQgd2l0aAotCSAgd2hhdCdzIHVzZWQgZWxzZXdoZXJlIHRob3VnaCAoZS5nLiBhdmlkZW11eCksIGJ1dCB0aGVuIG5laXRoZXIgYXJlIHRoZQotCSAgY2Fwcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MjMxNzgKLQotMjAxMC0xMC0yOSAyMjo1MDoxNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5oOgotCSAgcHVsc2VtaXhlcjogSW1wbGVtZW50IE1JWEVSX0ZMQUdfQVVUT19OT1RJRklDQVRJT05TCi0JICBBZGQgdGhlIG1peGVyIGZsYWcgYW5kIHNlbmQgbm90aWZpY2F0aW9ucyB3aGVuIGVpdGhlciB0aGUgdm9sdW1lIG9yIG11dGVkCi0JICBzdGF0dXMgY2hhbmdlcy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTgzODkKLQotMjAxMC0wMi0wOCAyMTo0MToyOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG1hcmsgRElTQ09OVCB3aGVuIHJlc3VtaW5nIFBMQVkKLQkgIEluIHBhcnRpY3VsYXIsIHdoZW4gc3RyZWFtaW5nIGludGVybGVhdmVkLCB0aGlzIGFycmFuZ2VzIGZvciBzZXR0aW5nIGEgbmV3Ci0JICB0aW1lc3RhbXAgb24gb3V0Z29pbmcgYnVmZmVyIHNvIGRvd25zdHJlYW0gY2FuIGFwcHJvcHJpYXRlIHJlc2V0Ci0JICB0byBhIGNoYW5nZSBpbiAocnRwKXRpbWUuCi0KLTIwMTAtMTItMDIgMTY6MDg6MzQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBkZWdyYWRlIGdyYWNlZnVsbHkgdXBvbiBmYWlsaW5nIHNlZWsgYW5kIHR3ZWFrIFFVRVJZX1NFRUtJTkcgcmVzcG9uc2UKLQotMjAxMC0xMC0yNSAxMTo1MTowNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFkZCBhbmQgdXNlIGF1dG8gYnVmZmVyaW5nIG1vZGUKLQkgIC4uLiB3aGljaCBzZWxlY3RzIEJVRkZFUiBmb3IgYSBub24tbGl2ZSBzdHJlYW0sIGFuZCBvdGhlcndpc2UgU0xBVkUuCi0JICBGaXhlcyAjNjMzMDg4LgotCi0yMDEwLTEyLTA2IDEyOjE2OjEyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5Lmg6Ci0JICBqMmtkZXBheTogbWFrZSB0aGUgZGVwYXlsb2FkZXIgbW9yZSByZXNpbGllbnQKLQkgIFVzZSAzIGFkYXB0ZXJzLCBvbmUgdG8gYWNjdW11bGF0ZSBwYWtldGl6YXRpb24gdW5pdHMsIGFub3RoZXIgb24gdG8gYWNjdW11bGF0ZQotCSAgdGlsZXMgYW5kIGEgbGFzdCBvbmUgdG8gYWNjdW11bGF0ZSB0aGUgZmluYWwgZnJhbWUuCi0JICBEb24ndCBqdXN0IGJsaW5kbHkgZmx1c2ggdGhlIGFkYXB0ZXIgb24gRElTQ09OVCBidXQgb25seSBkaXNjYXJkIHRoZSBjdXJyZW50Ci0JICBwYWNrZXRpemF0aW9uIHVuaXQuCi0JICBXaGVuIHdlIGRyb3BwZWQganBlZzIwMDAgcGFja2V0cyBiZXR3ZWVuIFNPUCBtYXJrZXJzLCBhZGp1c3QgdGhlIFNPVCBoZWFkZXIgd2l0aAotCSAgdGhlIG5ldyBsZW5naHQuCi0KLTIwMTAtMTItMDkgMTM6NDk6MDQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggZmxvdyByZXR1cm4gYWdncmVnYXRpb24KLQotMjAxMC0xMi0wOCAxMTozNTozMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBoYW5kbGluZyBuZWFyIGVuZC1vZi1maWxlIGNvcm5lciBjYXNlcwotCSAgQWxzbywgcmVsYXggc29tZSBlcnJvciBoYW5kbGluZyB0byBub3QgYmFpbCBvdXQgY29tcGxldGVseSB3aGVuIHNvbWV0aGluZwotCSAgZmVlbHMgYW1pc3MsIGJ1dCBjb25zaWRlciB0aGlzIEVPRiBhbmQgY29udGludWUgd2l0aCB3YXMgb2J0YWluZWQgc28gZmFyLgotCi0yMDEwLTEyLTA3IDE3OjE5OjAwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZnJhZ21lbnRlZCBzdXBwb3J0OyBmaXggb2Zmc2V0IGhhbmRsaW5nIGFuZCByZWxheCBlcnJvciByYWlzaW5nCi0JICBJbiBwYXJ0aWN1bGFyLCBhY2NlcHQgdW5rbm93biBzdHJlYW0gaW4gdHJhY2sgZnJhZ21lbnQsIGFuZCBvbmx5IGVycm9yIG91dAotCSAgaWYgdGhhdCByYWlzZXMgcHJvYmxlbXMgbGF0ZXIgb24gd2l0aCByZXNwZWN0IHRvIG9mZnNldCB0cmFja2luZy4KLQkgIEZpeGVzICM2MjAyODMuCi0KLTIwMTAtMTItMDcgMTM6MTE6NDggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IHVzZSBhYWMgY29kZWMtZGF0YSB0byBhZGp1c3Qgc2FtcGxlcmF0ZSBpZiBuZWVkZWQKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5IEZhYmllbiBMZWJhaWxsaWYtRGVsYW1hcmUgPGZhYmllbkBhcnEtbWVkaWEuY29tPgotCSAgRml4ZXMgIzYzNjYyMS4KLQotMjAxMC0xMi0wNyAxMTo0MzoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBkb24ndCB1bmNvcmsgaW4gX3N0YXJ0Ci0JICBEb24ndCB1bmNvcmsgaW4gdGhlIF9zdGFydCBtZXRob2QganVzdCB5ZXQgYnV0IHdhaXQgdW50aWwgd2UgaGF2ZSB3cml0dGVuIHNvbWUKLQkgIHNhbXBsZXMgdG8gcHVsc2VhdWRpby4gVGhpcyBhdm9pZCB1bmRlcnJ1bnMgb24gcHVsc2VhdWRpbyBhbmQgbGVzcyBjcmFja2xpbmcKLQkgIG5vaXNlcyB3aGVuIHN0YXJ0aW5nLgotCi0yMDEwLTEyLTA3IDExOjQ3OjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3RlcicgaW50byAwLjExCi0KLTIwMTAtMTItMDcgMTE6NDM6MTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZG9uJ3QgdW5jb3JrIGluIF9zdGFydAotCSAgRG9uJ3QgdW5jb3JrIGluIHRoZSBfc3RhcnQgbWV0aG9kIGp1c3QgeWV0IGJ1dCB3YWl0IHVudGlsIHdlIGhhdmUgd3JpdHRlbiBzb21lCi0JICBzYW1wbGVzIHRvIHB1bHNlYXVkaW8uIFRoaXMgYXZvaWQgdW5kZXJydW5zIG9uIHB1bHNlYXVkaW8gYW5kIGxlc3MgY3JhY2tsaW5nCi0JICBub2lzZXMgd2hlbiBzdGFydGluZy4KLQotMjAxMC0xMi0wNyAxMTo0MjoxNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogdXNlIF9vYmplY3RfcmVmX3NpbmsoKSB3aGVuIHdlIGNhbgotCi0yMDEwLTEyLTA3IDExOjQwOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBkb24ndCBhYnVzZSB0aGUgY2xhc3MgbG9jawotCSAgVXNlIGEgbmV3IHN0YXRpYyBsb2NrIHRvIHByb3RlY3QgdGhlIHByb2JlZCBkZXZpY2UgbGlzdCBpbnN0ZWFkIG9mIHRoZSBvYmplY3QKLQkgIGNsYXNzIGxvY2suCi0KLTIwMTAtMTItMDYgMTk6NTk6NDkgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggY29tcGlsZXIgd2FybmluZ3Mgb24gT1NYLgotCi0yMDEwLTEyLTA2IDE4OjE3OjI0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogYWRkIGRlYnVnIHRvIG5vdGlmeSB3aGVuIHNraXBwaW5nIHRvIGpwZWcgaGVhZGVyCi0KLTIwMTAtMTItMDYgMTg6MTY6MTkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBkaXNjYXJkIGluY29tcGxldGUgaW1hZ2UKLQkgIC4uLiBhcyBkZXRlcm1pbmVkIHdoZW4gZmluZGluZyBTT0kgbmV4dCBpbWFnZSBiZWZvcmUgYW4gRU9JLgotCSAgQmFzZWQgb24gcGF0Y2ggYnkgRGF2aWQgSG95dCA8ZGF2aWQuaG95dEBsbG5sLmdvdj4KLQkgIEZpeGVzICM2MzU3MzQuCi0KLTIwMTAtMTItMDYgMTc6NDU6MzggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBhdm9pZCBpbmZpbml0ZSBsb29wIHdoZW4gcmVzeW5jaW5nCi0JICBGaXhlcyAjNjM1NzM0IChwYXJ0bHkpLgotCi0yMDEwLTEyLTA2IDE3OjI4OjMyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2Ygc3NoOi8vZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QgaW50byAwLjExCi0KLTIwMTAtMTItMDYgMTc6Mjc6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGFuZHJvaWQvYXBldGFnLm1rOgotCSogYW5kcm9pZC9hdmkubWs6Ci0JKiBhbmRyb2lkL2Zsdi5tazoKLQkqIGFuZHJvaWQvaWN5ZGVtdXgubWs6Ci0JKiBhbmRyb2lkL2lkM2RlbXV4Lm1rOgotCSogYW5kcm9pZC9xdGRlbXV4Lm1rOgotCSogYW5kcm9pZC9ydHAubWs6Ci0JKiBhbmRyb2lkL3J0cG1hbmFnZXIubWs6Ci0JKiBhbmRyb2lkL3J0c3AubWs6Ci0JKiBhbmRyb2lkL3NvdXAubWs6Ci0JKiBhbmRyb2lkL3VkcC5tazoKLQkqIGFuZHJvaWQvd2F2ZW5jLm1rOgotCSogYW5kcm9pZC93YXZwYXJzZS5tazoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIG1vcmUgMC4xMCAtPiAwLjExIGNoYW5nZXMKLQotMjAxMC0xMi0wNiAxNToyMTo1MyArMDEwMCAgRGF2aWQgSG95dCA8ZGhveXRAbGxubC5nb3Y+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IHBhc3MgYWxvbmcgZW9zIGlmIHJlY2VpdmVkIGJlZm9yZSBidWZmZXIgYXJyaXZlcwotCSAgRml4ZXMgIzYzNjE3Mi4KLQotMjAxMC0xMC0yMCAxMTowNTo0OSArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiB0cnkgdG8gd3JpdGUgdGltZXN0YW1wcyBpbiBhbGwgdGhlIG91dGdvaW5nIGJ1ZmZlcnMKLQkgIEZpeGVzICM2MzI2NTQuCi0KLTIwMTAtMTItMDYgMTI6MjE6MDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogc3RhcnQgMC4xMSBicmFuY2gKLQotMjAxMC0xMi0wNiAxMjoxNzoyMSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5oOgotCSAgcHJvZ3Jlc3NyZXBvcnQ6IG9wdGlvbmFsbHkgZGV0ZXJtaW5lIHByb2dyZXNzIHVzaW5nIGJ1ZmZlciBtZXRhZGF0YQotCSAgQmFzZWQgb24gcGF0Y2ggYnkgTGVvIFNpbmdlciA8bHNpbmdlciBhdCBjYWx0ZWNoLmVkdT4KLQkgIEZpeGVzICM2Mjk0MTguCi0KLTIwMTAtMTItMDUgMTQ6Mzk6MTkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkgIGNoZWNrOiBGaXh1cCB0aGUgc2h1dHRpbmcgZG93biBvcmRlcgotCSAgRmlyc3QgYnJpbmcgZG93biBldmVyeXRoaW5nIHRvIE5VTEwgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdW5saW5rCi0JICBvciB1bnJlZiBhbnl0aGluZy4KLQkgIEF2b2lkcyB0aGUgdGVzdHMganVzdCBoYW5naW5nIHRoZXJlIGZvciBldmVyIHdhaXRpbmcgdG8gYWNxdWlyZSBhCi0JICBsb2NrIHRoYXQgZG9lc24ndCBleGlzdCBhbnltb3JlLgotCi0yMDEwLTExLTA0IDE5OjMxOjQ1ICswMTAwICBKYW5uZSBHcnVuYXUgPGphbm5lLmdydW5hdUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JICB2NGwyc3JjOiBzZXQgdG9wIGZpZWxkIGZpcnN0IGZvciBpbnRlcmxhY2VkIGJ1ZmZlcnMgaWYgdjRsMiBleHBvcnRzIGl0Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM0MzkzCi0KLTIwMTAtMTEtMDQgMTg6MzY6MDkgKzAxMDAgIEphbm5lIEdydW5hdSA8amFubmUuZ3J1bmF1QGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogY2hlY2sgZmllbGQgaW5mb3JtYXRpb24gYW5kIHNldCBpbnRlcmxhY2VkIGNhcHMgYWNjb3JkaW5nbHkKLQkgIFJlamVjdCB0aGUgZm9ybWF0IGlmIHRoZSBmaWVsZCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM0MzkxCi0KLTIwMTAtMTItMDMgMTc6NDI6MTQgKzAxMDAgIEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBzdGVyaWNzc29uLmNvbT4KLQotCSogQW5kcm9pZC5tazoKLQkqIGFuZHJvaWQvTk9USUNFOgotCSogYW5kcm9pZC9hcGV0YWcubWs6Ci0JKiBhbmRyb2lkL2F2aS5tazoKLQkqIGFuZHJvaWQvZmx2Lm1rOgotCSogYW5kcm9pZC9nc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5jOgotCSogYW5kcm9pZC9nc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5oOgotCSogYW5kcm9pZC9nc3QvdWRwL2dzdHVkcC1lbnVtdHlwZXMuYzoKLQkqIGFuZHJvaWQvZ3N0L3VkcC9nc3R1ZHAtZW51bXR5cGVzLmg6Ci0JKiBhbmRyb2lkL2dzdC91ZHAvZ3N0dWRwLW1hcnNoYWwuYzoKLQkqIGFuZHJvaWQvZ3N0L3VkcC9nc3R1ZHAtbWFyc2hhbC5oOgotCSogYW5kcm9pZC9pY3lkZW11eC5tazoKLQkqIGFuZHJvaWQvaWQzZGVtdXgubWs6Ci0JKiBhbmRyb2lkL3F0ZGVtdXgubWs6Ci0JKiBhbmRyb2lkL3J0cC5tazoKLQkqIGFuZHJvaWQvcnRwbWFuYWdlci5tazoKLQkqIGFuZHJvaWQvcnRzcC5tazoKLQkqIGFuZHJvaWQvc291cC5tazoKLQkqIGFuZHJvaWQvdWRwLm1rOgotCSogYW5kcm9pZC93YXZlbmMubWs6Ci0JKiBhbmRyb2lkL3dhdnBhcnNlLm1rOgotCSAgQWRkIGJ1aWxkIHN5c3RlbSBmb3IgQW5kcm9pZAotCi0yMDEwLTAzLTI2IDEzOjUxOjU4ICswMTAwICBHdWlsbGF1bWUgRW1vbnQgPGdlbW9udEBpZ2FsaWEuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JICBuYXZzZWVrOiBhZGQgYmFzaWMgc3VwcG9ydCB0byBjaGFuZ2UgcGxheWJhY2sgcmF0ZQotCSAgVGhlIGZvbGxvd2luZyBrZXlzIHdpbGwgbm93IGJlIGludGVycHJldGVkIGJ5IG5hdnNlZWs6Ci0JICAnZicgbWVhbnMgZmFzdCBmb3J3YXJkOiB0aGUgc3RyZWFtIGdldHMgcGxheWVkIGF0IHJhdGUgMi4wCi0JICAncicgbWVhbnMgcmV3aW5kOiB0aGUgc3RyZWFtIGdldHMgcGxheWVkIGF0IHJhdGUgLTIuMAotCSAgJ24nIG1lYW5zIG5vcm1hbDogdGhlIHN0cmVhbSBnZXRzIHBsYXllZCBhdCByYXRlIDEuMAotCSAgRml4ZXMgIzYzMTUxNi4KLQotMjAxMC0xMi0wMSAxMzoxMjowNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBzdXBwb3J0IGZvciBlKGEpYy0zIGF1ZGlvCi0KLTIwMTAtMTEtMTkgMTI6NDQ6MzUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhdm9pZCBzZW5kaW5nIEVPUyBldmVudCB0d2ljZQotCi0yMDEwLTExLTE5IDEyOjQ0OjE4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVtb3ZlIGRlYWQgY29kZSB0cnlpbmcgdG8gdXBkYXRlIHN0cmVhbSBkdXJhdGlvbgotCSAgT24gdGhlIG9uZSBoYW5kLCBpdCBpbnN1ZmZpY2llbnRseSBjaGVja3Mgd2hldGhlciBpdCBvbmx5IHVwZGF0ZXMgYSBkdW1teQotCSAgc2VnbWVudC4gIE9uIHRoZSBvdGhlciBoYW5kLCBvbmx5IGRvaW5nIHRoaXMgYXQgdGhlIHRpbWUgdGhlIGxhc3Qgc2FtcGxlZCBpcwotCSAgcHJlcGFyZWQgKGFuZCBzZW50IGRvd25zdHJlYW0pIGlzIHRvbyBsaXR0bGUgdG9vIGxhdGUuCi0KLTIwMTAtMTEtMDkgMTA6NTg6NTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmcmFnbWVudGVkIHN1cHBvcnQ7IGhhbmRsZSBpc212IHNhbXBsZSBmbGFncwotCi0yMDEwLTExLTA4IDExOjQxOjIxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZnJhZ21lbnRlZCBzdXBwb3J0OyBoYW5kbGUgaXNtdiBzdGJsIGF0b21zCi0JICAuLi4gb3IgbGFjayBvZiBzb21lIHRoZXJlb2YsIHN1Y2ggYXMgbWFuZGF0b3J5IHN0c3ouICBTaHVmZmxlIHNvbWUgY29kZQotCSAgaW4gX3N0YmxfaW5pdCB0byBkZXRlY3QgdGhpcyBlYXJseSBlbm91Z2guCi0KLTIwMTAtMTEtMDggMTE6Mzk6MzcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmcmFnbWVudGVkIHN1cHBvcnQ7IGNvbXBlbnNhdGUgZm9yIGlzbXYgb2Zmc2V0IGhhbmRsaW5nCi0JICAuLi4gb3IgbGFjayB0aGVyZW9mLCB3aGljaCBhY2NvcmRpbmcgdG8gc3BlY3Mgd291bGQgcHV0IG1lZGlhIGRhdGEgaW4KLQkgIHVubGlrZWx5IHBvc2l0aW9uLgotCi0yMDEwLTExLTA0IDE0OjA3OjU2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgcXRkZW11eDogZnJhZ21lbnRlZCBzdXBwb3J0IGZvciBwdXNoIG1vZGUKLQotMjAxMC0xMS0wNCAxMDoxNzozNyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IGZyYWdtZW50ZWQgc3VwcG9ydDsgcHJvcGVyIGFuZCBpbmNyZW1lbnRhbCBtb29mIHBhcnNpbmcKLQkgIFRoYXQgaXMsIHBhcnNlIGVhY2ggbW9vZiBpbiBvbmUgcGFzcyAoY29uc2lkZXJpbmcgYWxsIGNvbnRhaW5lZCBzdHJlYW1zJwotCSAgbWV0YWRhdGEpLCBhbmQgZG8gc28gaW5jcmVtZW50YWxseSBhcyBuZWVkZWQgZm9yIHBsYXliYWNrIHJhdGhlciB0aGFuCi0JICBhbiBpbml0aWFsIGNvbXBsZXRlIHNjYW4gb2YgYWxsIG1vb2YgKHRob3VnaCBhbGwgbW9vdiBzYW1wbGUgbWV0YWRhdGEKLQkgIGlzIGZ1bGx5IHBhcnNlZCBhdCBzdGFydHVwKS4KLQotMjAxMC0xMS0wNCAxMDowNjozMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHJlZmFjdG9yIHN0cmVhbSBmcmVlaW5nCi0KLTIwMTAtMTEtMDQgMTA6MDU6MTUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkZWxlZ2F0ZSBsaW5lYXIgc2VhcmNoIGZvciBzYW1wbGUgdG8gYmluYXJ5IHNlYXJjaCB3aGVuIHBvc3NpYmxlCi0JICBBbHNvIGFycmFuZ2UgZm9yIHBhcnNpbmcgYSBzYW1wbGUgcHJpb3IgdG8gdGFraW5nIGEgcmVmZXJlbmNlIHRvIGl0LAotCSAgd2hpY2ggcmVxdWlyZXMgbGVzcyBtZW1vcnkgbGF5b3V0IGFzc3VtcHRpb25zIGZvciBjb3JyZWN0bmVzcy4KLQotMjAxMC0xMS0wMSAxNTo1MjoyOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZyYWdtZW50ZWQgc3VwcG9ydDsgaGFuZGxlIG1vb3Ygc2FtcGxlcyBhbmQgcHJvcGVyIHN0cmVhbSBkdXJhdGlvbgotCi0yMDEwLTExLTAxIDEzOjQwOjA1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZnJhZ21lbnRlZCBzdXBwb3J0OyBjb25zaWRlciBtdmV4IGFuZCBoYW5kbGUgZmxhZ3MgYW5kIG9mZnNldCBmaWVsZHMKLQotMjAxMC0xMC0yOCAxNjo0OTo0MSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZyYWdtZW50ZWQgc3VwcG9ydDsgZm9yZWdvIGNoZWNrIGZvciBzaG9ydCBzdHJlYW1zCi0JICAuLi4gYXMgc29tZSBib2d1cyBmaWxlcyBtYXkgaW5kaWNhdGUgc3RyZWFtcyBvZiAwIGR1cmF0aW9uIGluIG1vb3YsCi0JICB3aGlsZSBpbmRpY2F0aW5nIHRoZSBjb21wbGV0ZSBtb3ZpZSBkdXJhdGlvbiBpbiBtdmhkICh0aGUgbGF0dGVyIHNob3VsZAotCSAgYmUgaW4gbWVoZCkuCi0KLTIwMTAtMTAtMjggMTY6NDY6NDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X3R5cGVzLmg6Ci0JICBxdGRlbXV4OiBmcmFnbWVudGVkIHN1cHBvcnQ7IGNvZGUgY2xlYW51cHMgYW5kIG9wdGltaXphdGlvbnMgaW4gYXRvbSBwYXJzaW5nCi0JICBBdm9pZCBleHRyYSBhbGxvY2F0aW9uIGluIF9wYXJzZV90cnVuLCBhZGQgbW9yZSBjaGVja3MgZm9yIHBhcnNpbmcgZXJyb3JzLAotCSAgYWRkIG9yIGFkanVzdCBzb21lIGRlYnVnIHN0YXRlbWVudCwgZml4IGNvbW1lbnRzLCBzcHJpbmtsZSBzb21lIGJyYW5jaAotCSAgcHJlZGljdGlvbi4KLQotMjAxMC0wOS0xMyAyMzoxOTo0NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHBhcnNlX21vb2Ygc2hvdWxkIHJldHVybiBUUlVFIG9uIHN1Y2Nlc3MKLQotMjAxMC0wOS0xMCAyMjo0MTowMyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCBpdGVyYXRpb24gYnVnCi0JICBBdm9pZCBpbmZpbml0ZSBsb29wIHdoZW4gaXRlcmF0aW5nIHRyYWYKLQotMjAxMC0wOS0xMCAyMTozMjoyNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFJlZmFjdG9yIHRydW4gcGFyc2luZwotCSAgVGhlIGFsbG9jYXRpb24gb2YgdGhlIHNhbXBsZXMgY2FuIGJlIHBsYWNlZCBvdXQgb2YgdGhlIGxvb3AuCi0JICBNYWtlcyB0aGUgY29kZSBjbGVhcmVyLgotCSAgQWxzbyBhdm9pZCByZWx5aW5nIG9uIHRyYWYgaW5mb3JtYXRpb24gYXMgaXQgaXMgcGxhY2VkIG9uIHRoZQotCSAgZW5kIG9mIHRoZSBmaWxlIGFuZCBtaWdodCBub3QgYmUgYWNlc3NpYmxlIG9uIHB1c2ggbW9kZS4KLQotMjAxMC0wOS0xMCAwMDoyOToyNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFJlbW92ZSBwYXJzaW5nIG9mIHVudXNlZCBhdG9tCi0JICBzZHRwIGF0b20gaXMgcGFyc2VkIGJ1dCBub3QgdXNlZCwgc28gd2UgZG9uJ3QgaGF2ZSB0bwotCSAgcGFyc2UgaXQuCi0KLTIwMTAtMTEtMDkgMTE6NDU6MDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB0d2VhayB3YW0gc3VwcG9ydAotCSAgLi4uIHdpdGggc29tZSBjb21tZW50IGFuZCBwb3J0YWJpbGl0eSBtYWNyb3MuCi0KLTIwMDktMDktMjMgMTg6NDc6NDIgKzAyMDAgIE1hcmMtQW5kcsOpIEx1cmVhdSA8bWx1cmVhdUBmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF90eXBlcy5jOgotCSAgcXRkZW11eDogc3VwcG9ydCB3bWEgJiB2Yy0xCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzIxCi0KLTIwMTAtMDMtMTEgMDk6NTY6MDQgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgcXRkZW11eDogcGFyc2UgZm1wNCBzYW1wbGVzIGluZm9ybWF0aW9uCi0JICBUaGUgZnJhZ21lbnRlZCBtcDQgZm9ybWF0IHN0b3JlcyB0aGUgdHJhY2tzIGFuZCBzYW1wbGVzIGluZm9ybWF0aW9uIGluIHRoZQotCSAgJ21vb2YnIGJveGVzLCB3aGljaCBhcmUgYXBwZW5kZWQgYmVmb3JlIGVhY2ggZnJhZ21lbnQgKGZyYWdtZW50LT4nbW9vZicrJ21kYXQnKS4KLQkgIFRoZSAnbWZyYScgYm94IHN0b3JlcyB0aGUgb2Zmc2V0IG9mIGVhY2ggJ21vb2YnIGJveCBhbmQgdGhlaXIgcHJlc2VudGF0aW9uCi0JICB0aW1lLiBUaGUgbG9jYXRpb24gb2YgdGhpcyBib3ggY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSAnbWZybycgYm94LCB3aGljaCBpcwotCSAgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgotCSAgVGhlICdtZnJhJyBib3ggaXMgcGFyc2VkIHRvIGdldCB0aGUgb2Zmc2V0IG9mIGVhY2ggJ21vb2YnIGJveCBhbmQgdGhlaXIKLQkgIHByZXNlbnRhdGlvbiB0aW1lLgotCSAgRWFjaCAnbW9vZicgYm94IGNhbiBjb250YWluIGluZm9ybWF0aW9uIGZvciBvbmUgb3IgbW9yZSB0cmFja3MgaW5zaWRlCi0JICAndGZoZCcgYm94ZXMuIEZvciBlYWNoIHRyYWNrIGluIGEgJ21vb2YnLCB3ZSBoYXZlIGEgJ3RydW4nIGJveCwgd2hpY2gKLQkgIGNvbnRhaW5zIGluZm9ybWF0aW9uIG9mIGVhY2ggc2FtcGxlIChvZmZzZXQgYW5kIGR1cmF0aW9uKSB1c2VkIHRvIGJ1aWxkCi0JICB0aGUgc2FtcGxlcyB0YWJsZS4KLQkgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcmMtQW5kcsOpIEx1cmVhdSA8bWx1cmVhdUBmbHVtb3Rpb24uY29tPgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMyMQotCi0yMDEwLTAzLTExIDE1OjM0OjQ5ICswMTAwICBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRhdG9tcGFyc2VyLmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZHVtcC5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuaDoKLQkgIHF0ZGVtdXg6IGFkZCBmcmFnbWVudGVkIG1wNCBmb3VyY2NzCi0JICBBZGRzIGZvdXJjYydzIGZvciB0ZnJhLCB0ZmhkLCB0cnVuLCBzZHRwLCB0cmV4LCBtZWhkIGFuZAotCSAgdGhlaXIgZHVtcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjEKLQotMjAxMC0wMy0xMSAxMDoyNDo1NiArMDEwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHBhcnNlIHRoZSB0cmFjayBpZCBmcm9tIHRoZSB0cmFjayBoZWFkZXIKLQkgIFNpZ25lZC1vZmYtYnk6IEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjEKLQotMjAxMC0wMy0xMSAxNDoxMDoxMiArMDEwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFsbG93IHB1bGxpbmcgYXRvbXMgd2l0aCB1bmtub3duIHNpemUKLQkgIFNpZ25lZC1vZmYtYnk6IEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjEKLQotMjAxMC0wNy0xNCAyMDoxMzo1NSArMDIwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZHVtcC5jOgotCSAgcXRkZW11eDogbWFrZSBxdGRlbXV4X2R1bXBfbXZoZCBwYXJzZSB2ZXJzaW9uIDEgY29ycmVjdGx5Ci0JICBWZXJzaW9ucyAwIGFuZCAxIG9mIG12aGQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgb2YgaXRzIHZhbHVlcwotCSAgKDMyYml0cy82NGJpdHMpLiBUaGlzIHBhdGNoIG1ha2VzIGl0IGR1bXAgdGhlbSBjb3JyZWN0bHkuCi0JICBBbHNvIHVzZSB0aGUgcmlnaHQgbm9kZSBpbiB0aGUgcGFyYW1ldGVyIGFuZCBub3QgdGhlIHJvb3Qgbm9kZS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjEKLQotMjAxMC0xMS0xOSAxMjo0NTowMCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG1pbm9yIGNsZWFudXBzIGluIHNldHRpbmcgc3RyZWFtaGVhZGVyIG9uIGNhcHMKLQotMjAxMC0xMS0wMiAxNzowNDowNCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogbm9ybWFsaXplIGVtcHR5IEN1ZXMgdG8gbm8gQ3VlcwotCSAgLi4uIHRvIHRyaWdnZXIgaW5kZXhsZXNzIHNlZWtpbmcuCi0KLTIwMTAtMTAtMjYgMTE6MTU6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogYWRkIHdvcmthcm91bmQgZm9yIGJ1Z2d5IGxpc3Qgc2l6ZQotCSAgRml4ZXMgdHJ1bmNhdGVkIGV4dHJhLWRhdGEgaW4gaGRybC9zdHJsL3N0cmYgZHVlIHRvIGJ1Z2d5IGNvbnRhaW5pbmcKLQkgIGxpc3Qgc2l6ZSBub3QgYWNjb3VudGluZyBmb3IgcGFkZGluZyBpbiBjb250YWluZWQgY2h1bmtzLgotCi0yMDEwLTEyLTAyIDE2OjExOjAxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IGRvIG5vdCBob2xkIGN1c3RvbSBQQURfTE9DSyB3aGVuIHB1c2hpbmcgZG93bnN0cmVhbQotCi0yMDEwLTEyLTAyIDE2OjEwOjE0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmVzZXQgc2Vzc2lvbiBtYW5hZ2VyIGJhc2UgdGltZSB3aGVuIGZsdXNoaW5nCi0JICAuLi4gYXMgcnRwYmluIHVzZXMgcnVubmluZyB0aW1lIHRvIGhhbmRsZSBydHBqaXR0ZXJidWZmZXIncyBidWZmZXIgbW9kZSBwYXVzZXMuCi0KLTIwMTAtMTItMDEgMTY6NTE6MzMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBpbmNsdWRlIHJhbmdlIHJlcXVlc3QgZm9yIGFsbCBzdHJlYW1zIHdpdGggbm9uLWFnZ3JlZ2F0ZSBjb250cm9sCi0KLTIwMTAtMTAtMDcgMTQ6NTA6NTMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggZGVidWcgc3RhdGVtZW50Ci0KLTIwMTAtMTItMDMgMTU6Mzg6MDAgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBQYXJzZSBtb3JlIHZhcmlhbnRzIG9mIG51bWVyaWNhbCBJRElUIHRhZwotCi0yMDEwLTA1LTA3IDE3OjMwOjMwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nZW5jOiBVc2UgcHJvcGVyIGZyYW1lcmF0ZSByYW5nZSBpbiBjYXBzCi0KLTIwMTAtMTItMDMgMTU6MDQ6MjYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy93YXZlbmMuYzoKLQkgIHRlc3RzOiBGaXggcHJldmlvdXNseSB1bmJ1aWxkYWJsZS91bnRlc3RlZCB3YXZlbmMgdGVzdAotCi0yMDEwLTEwLTI0IDE1OjIxOjA4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogUmVmYWN0b3IgdGFnIHB1c2hpbmcgbG9naWMKLQkgIFRoZSBsb2dpYyBvZiB3aGVuIHRvIHB1c2ggd2FzIHdyb25nIGFsc28gKHJlc3VsdGluZyBpbiBzb21lIHRhZ3MgbmV2ZXIKLQkgIGJlaW5nIHB1c2hlZCkuCi0KLTIwMTAtMTAtMjQgMTU6MjA6MjcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9mbHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogVXNlIHBidXRpbHMgZm9yIGNvZGVjIGRlc2NyaXB0aW9ucwotCi0yMDEwLTA0LTEzIDExOjI5OjMwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzaW5rLmM6Ci0JICBjaGVjazogVXNlIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgaW5zdGVhZCBvZiBmYWlsX2lmCi0JICBNYWtlcyB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGludGVyZXN0aW5nCi0KLTIwMTAtMTEtMzAgMTk6MjI6MTEgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBBbHNvIGV4dHJhY3QgSURJVCB0YWdzIHByZXNlbnQgdG9vIGVhcmx5Ci0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MTQzCi0KLTIwMTAtMTEtMzAgMTk6MjE6MjMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBBbHNvIGVtaXQgRGF0ZVRpbWUgdGFnCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MTQzCi0KLTIwMTAtMTItMDMgMDA6MjI6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBkZXRlY3QgRFRTIGFkdmVydGlzZWQgYXMgUENNIGNvcnJlY3RseSBpbiBzb21lIG1vcmUgY2FzZXMKLQkgIFRoZSBEVFMgdHlwZWZpbmRlciBtYXkgcmV0dXJuIGEgbG93ZXIgcHJvYmFiaWxpdHkgZm9yIGZyYW1lcyB0aGF0IHN0YXJ0Ci0JICBhdCBub24temVybyBvZmZzZXRzIGFuZCB3aGVyZSB0aGVyZSdzIG5vIHNlY29uZCBmcmFtZSBzeW5jIGluIHRoZSBmaXJzdAotCSAgYnVmZmVyLiBJdCdzIGZhaXJseSB1bmxpa2VseSB0aGF0IHdlJ2xsIGFjaWRlbnRhbGx5IGlkZW50aWZ5IFBDTSBkYXRhCi0JICBhcyBEVFMsIHNvIHdlIGRvbid0IGRvIGFkZGl0aW9uYWwgY2hlY2tzIGZvciBub3cuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM2MjM0Ci0KLTIwMTAtMTEtMDggMTc6MTE6NDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogbWFrZWZpbGUgY2xlYW51cAotCSAgRml4IGluZGVudGF0aW9uLiBVc2UgJChHU1RfTUFKT1JNSU5PUikgaW5zdGVhZCBvZiBoYXJkY29kZWQgMC4xMC4KLQotMjAxMC0xMS0wOCAxNzowMjo1NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jOgotCSAgdGVzdHM6IGFkZCBhIHRlc3QgZm9yIHdhdiBtdXhpbmcKLQotMjAxMC0xMS0wOCAxNjo1NzoxNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2cGFjay5jOgotCSAgdGVzdHM6IHJlbW92ZSBuZXdsaW5lcyBiZXR3ZWVuIHZhcmlhYmxlIGRlY2xzIChvbGQgZ3N0LWluZGVudCBmYWlsdXJlKQotCi0yMDEwLTExLTA4IDE0OjQ3OjA0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IHVzZSBwbmdfZXJyb3IoKSBhcyByZWNvbW1lbmRlZCBieSBsaWJwbmcgZG9jcyB0byBzaWduYWwgYW4gZXJyb3IKLQkgIFdpdGhvdXQgdGhhdCB0aGUgZWxlbWVudCBsb29wcyBlbmRsZXNzbHkgb24gYnJvZWtuIHBuZ3MuIEZpeGVzICM2MzQzMTQKLQotMjAxMC0xMS0xNiAxNzo0ODoxNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFBhcnNlIGFuZCB1c2UgY3JlYXRpb24gdGltZSB0YWcgZnJvbSBtdmhkCi0JICBFeHBvc2UgY3JlYXRpb24gdGltZSBmcm9tIG12aGQgYXMgYSBkYXRldGltZSB0YWcKLQkgIEZpeGVzICM2MzQ5MjgKLQotMjAxMC0xMC0yNyAxOToxNToyMCArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkgIGljeWRlbXV4OiBBZGQgJ1N0cmVhbVVybCcgbWV0YWRhdGEgYXMgR1NUX1RBR19IT01FUEFHRSB0YWcKLQotMjAxMC0xMC0yMyAxOTozNDowMCAtMDQwMCAgVG9tIEphbmlzemV3c2tpIDxUb20uSmFuaXN6ZXdza2lAYWxjYXRlbC1sdWNlbnQuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBGaXggZm9yIG5lbGx5bW9zZXIgY29kZWNpZCBzZXR0aW5nCi0JICBGaXhlcyBidWcgIzYzMjg5Ny4KLQotMjAxMC0xMC0yMSAxNjoxNTowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBBZGQgc3VwcG9ydCBmb3IgRS1BQzMKLQotMjAxMC0xMC0yMSAxNjoxNDo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBBZGQgc3VwcG9ydCBmb3IgRFRTCi0KLTIwMTAtMTAtMzEgMTg6MDg6MTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IERvbid0IHNlbmQgc2Vla3MgYmVoaW5kIHRoZSBlbmQgb2YgZmlsZSB0byB0aGUgc2VydmVyCi0JICBBbHNvIGltcHJvdmUgZGVidWcgb3V0cHV0LCByZS1pbml0aWFsaXplIHRoZSBjb250ZW50IHNpemUgYW5kIGxldCB0aGUKLQkgIHNlZWsgaGFuZGxlciBlcnJvciBvdXQgb24gaW52YWxpZCBzZWVrIHNlZ21lbnRzLgotCSAgRml4ZXMgYnVnICM2MzI5NzcuCi0KLTIwMTAtMTItMDIgMTc6NTM6NDIgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JICBqMmtwYXk6IHVzZSBTT1AgbWFya2VycyB0byBzcGxpdCBiaXRzdHJlYW0KLQkgIFdoZW4gcGFyc2luZyB0aGUgYml0c3RyZWFtLCBsb29rIGZvciBTT1AgbWFya2VycyBiZWNhdXNlIHdlIGFyZSBhbGxvd2VkIHRvIHNwbGl0Ci0JICBwYWNrZXRzIG9uIHRob3NlIG1hcmtlciBib3VuZGFyaWVzLgotCSAgUmV3b3JrIHRoZSBwYXJzaW5nIGNvZGUgYSBsaXR0bGUgc28gdGhhdCB3ZSBjYW4gcGFjayBtdWx0aXBsZSBQYWNrZXRpemF0aW9uCi0JICB1bml0cyBpbiBvbmUgUlRQIHBhY2tldC4KLQotMjAxMC0xMS0xOCAxMjo0OTo0NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5Lmg6Ci0JICBydHBqMmtwYXk6IHVzZSBidWZmZXIgbGlzdHMKLQkgIFVzZSBidWZmZXIgbGlzdHMgZm9yIGRvaW5nIHplcm9jb3B5IHBheWxvYWRpbmcuCi0JICBBZGQgcHJvcGVydHkgdG8gZGlzYWJsZSBidWZmZXIgbGlzdHMuCi0KLTIwMTAtMTEtMTYgMTY6NTQ6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgaDI2NHBheTogc21hbGwgY2xlYW51cHMKLQkgIEFsbG9jYXRlIGFkYXB0ZXIgb25seSBvbmNlLgotCSAgTWFrZSBzb21lIGd1aW50OCAqIGNvbnN0LgotCi0yMDEwLTExLTE2IDE1OjM5OjI0ICswMTAwICBUYW1iZXQgSW5nbyA8dGFtYmV0IGF0IGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IGltcGxlbWVudCBmdWxsIGJ5dGVzdHJlYW0gc2NhbiBtb2RlLgotCSAgSW1wbGVtZW50IHRoZSBmdWxsIGJ5dGVzdHJlYW0gc2NhbiBtb2RlLgotCSAgRml4ZXMgIzYzNDkxMAotCi0yMDEwLTExLTE1IDEwOjUyOjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLUFNUi5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3AtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3Auc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaDoKLQkgIGV4YW1wbGVzOiBpbXByb3ZlIFJUUCBleGFtcGxlcwotCSAgTWFrZSB0aGUgZXhhbXBsZXMgdXNlIGF1dG92aWRlb3NpbmsgYW5kIGZmbXBlZ2NvbG9yc3BhY2UgZm9yIGJldHRlcgotCSAgY29tcMOgdGliaWxpdHkuCi0JICBNYWtlIHNvbWUgbW9yZSB2YXJpYWJsZXMgZm9yIHRoZSBzaW5rIGFuZCB0aGUgZGVjb2RlcnMuCi0JICBTZXQgemVyb2xhdGVuY3kgdHVuaW5nIG9uIHgyNjRlbmMgZm9yIGJldHRlciByZWFsdGltZSByZXN1bHRzLgotCi0yMDEwLTExLTEwIDExOjA0OjQ4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBzZWxlY3QgbXVsdGljYXN0IHRyYW5zcG9ydHMgaW4gYSBzbWFydGVyIHdheQotCSAgV2hlbiB3ZSBzZWUgYSBtdWx0aWNhc3QgYWRkcmVzcyBpbiB0aGUgU0RQIGNvbm5lY3Rpb24sIG9ubHkgdHJ5IHRvIG5lZ290aWF0ZSBhCi0JICBtdWx0aWNhc3QgdHJhbnNwb3J0IHdpdGggdGhlIHNlcnZlci4KLQkgIEZpeGVzICM2MzQwOTMKLQotMjAxMC0xMi0wMiAxODoxNDoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgR0xpYiByZXF1aXJlbWVudCB0byBpbXBsaWNpdCByZXF1aXJlbWVudAotCSAgaWUuID49IDIuMjAgd2hpbGUgd2UgZGVwZW5kIG9uIGNvcmUvYmFzZSAwLjEwLjMxCi0KLTIwMTAtMTItMDIgMTg6MTM6NTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudAotCi09PT0gcmVsZWFzZSAwLjEwLjI2ID09PQotCi0yMDEwLTEyLTAxIDIxOjE1OjA5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjI2Ci0KLTIwMTAtMTEtMzAgMTU6Mjg6NTAgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBhbmFseXNlIFJGRiBmaWVsZHMgaW4gY29ycmVjdCBvcmRlcgotCSAgQ29kZSB3YXMgcmVwZWF0aW5nIHRoZSBzZWNvbmQgZmllbGQsIG5vdCB0aGUgZmlyc3QuCi0JICBGaXhlczogIzYzNjE3OS4KLQotMjAxMC0xMS0yOSAxNTozMjo0MCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGhhbmRsZSBzdGFsZSBkaWdlc3QgYXV0aGVudGljYXRpb24gc2Vzc2lvbiBkYXRhCi0JICBJbiBwYXJ0aWN1bGFyLCBoYW5kbGUgVW5hdXRob3JpemVkIHNlcnZlciByZXNwb25zZSB3aGVuIHRyeWluZyB0byBjb252ZXkKLQkgIGtlZXAtYWxpdmUuCi0JICBGaXhlcyAjNjM1NTMyLgotCi0yMDEwLTExLTI2IDE1OjAwOjI5ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiBmaXggc2VnZmF1bHQgb24gZW1wdHkgcGF5bG9hZAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNTg0MwotCi0yMDEwLTExLTI1IDE5OjA2OjI3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIGR0bWY6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCi0KLTIwMTAtMTEtMTggMDA6NDU6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICAwLjEwLjI1LjUgcHJlLXJlbGVhc2UKLQotMjAxMC0xMS0xOCAwMDo0NDo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2JnLnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vdHIucG86Ci0JICBwbzogdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDEwLTExLTE0IDAwOjE4OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IHJlZmVyZW5jZSBsZWFrCi0KLTIwMTAtMTEtMTIgMjM6NTk6MDYgKzExMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogRmx1c2ggUW9TIGFuZCBoaXN0b3J5IGJlZm9yZSBhcHBseWluZyBzZWdtZW50Ci0JICBXaGVuIGhhbmRsaW5nIG5ld3NlZ21lbnQsIGZsdXNoIG91dCB0aGUgYnVmZmVyIGhpc3RvcnkgaW4gdGhlCi0JICBleGlzdGluZyBzZWdtZW50LCBub3QgdGhlIG5ldyBvbmUuIEZpeGVzIHBsYXliYWNrIGluIHNvbWUgRFZECi0JICBjYXNlcy4KLQkgIFBhcnRpYWxseSBmaXhlcyAjNjMzMjk0Ci0KLTIwMTAtMTEtMTIgMTI6MjA6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBpbXByb3ZlIGV2ZW50IGxvZ2dpbmcKLQotMjAxMC0xMS0wNSAxNzowMDoxNSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSAgZGVpbnRlcmxhY2U6IEltcGxlbWVudCBmaWVsZCBoaXN0b3J5IGZsdXNoaW5nCi0JICBJbiBhIG51bWJlciBvZiBjYXNlcyBpdCBpcyBuZWNlc3NhcnkgdG8gZmx1c2ggdGhlIGZpZWxkIGhpc3RvcnkgYnkKLQkgIHBlcmZvcm1pbmcgJ2RlZ3JhZGVkJyBkZWludGVybGFjaW5nIC0gdGhhdCBpcywgdXNpbmcgdGhlIHVzZXItY2hvc2VuCi0JICBtZXRob2QgZm9yIGFzIG1hbnkgZmllbGRzIGFzIHBvc3NpYmxlLCB0aGVuIHVzaW5nIHZmaXIgZm9yIGFzIGxvbmcgYXMKLQkgIHRoZXJlIGFyZSA+PSAyIGZpZWxkcyByZW1haW5pbmcgaW4gdGhlIGhpc3RvcnksIHRoZW4gdXNpbmcgbGluZWFyIGZvcgotCSAgdGhlIGxhc3QgZmllbGQuCi0JICBUaGlzIHNob3VsZCBhdm9pZCBsb3NpbmcgZmllbGRzIGJlaW5nIGtlcHQgZm9yIGhpc3RvcnkgZm9yIGV4YW1wbGUgYXQKLQkgIEVPUy4KLQkgIFRoaXMgbWF5IGFkZHJlc3MgcGFydCBvZiAjNjMzMjk0Ci0KLTIwMTAtMTEtMDUgMTU6NDQ6MzUgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogUmVmYWN0b3IgY2hhaW4gZnVuY3Rpb24KLQkgIFRoaXMgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gb3V0cHV0IGEgZnJhbWUgZnJvbSBvdXRzaWRlIHRoZSBjaGFpbgotCSAgZnVuY3Rpb24sIGkuZS4gaW4gdGhlIGZvbGxvd2luZyBjb21taXQgdGhhdCBhZGRzIGZsdXNoaW5nIG9mIHRoZSBmaWVsZAotCSAgaGlzdG9yeS4KLQotMjAxMC0xMS0wNSAxNzoxNzo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogd2Ugc3RpbGwgcmVxdWlyZSBHdGsrID49IDIuMTQuMCB3aGVuIGNvbXBpbGluZyBhZ2FpbnN0IDIuMAotCSAgVGhlIGNoZWNrIGZvciB0aGUgbWlub3IgdmVyc2lvbiB3YXMgZHJvcHBlZCBpbiB0aGUgcHJldmlvdXMgY29tbWl0LgotCi0yMDEwLTExLTA1IDE2OjI0OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBhZGQgLS13aXRoLWd0ayBvcHRpb24gYW5kIGRlZmF1bHQgdG8gR3RrKyAyLjAgd2hpbGUgdGhlIDMuMCBBUEkgaXMgc3RpbGwgaW4gZmx1eAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDAxNAotCi0yMDEwLTExLTA0IDE2OjQyOjA3ICsxMDAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBkMTRuLm9yZz4KLQotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JICBpY3lkZW11eDogZml4IHVzZS1hZnRlci1mcmVlIG9mIHRhZ2xpc3QKLQkgIEJyb2tlbiBieSBjb21taXQgNGMyZjUzMzMgKGJ1ZyAjNjMwMjA1KS4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzM5NzAKLQotMjAxMC0xMS0wMSAxNzoyOTowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjUuNCBwcmUtcmVsZWFzZQotCi0yMDEwLTExLTAxIDE3OjI4OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3N2LnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0xMS0wMSAxNjowNDoyMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZml4IC0tZGlzYWJsZS1leHRlcm5hbAotCi0yMDEwLTExLTAxIDE0OjU2OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkgIHJ0cGgyNjRkZXBheTogb25seSBzZXQgZGVsdGEgdW5pdCBvbiBhbGwtbm9uLWtleSB1bml0cwotCSAgT25seSBzZXQgdGhlIGRlbHRhIGZsYWcgd2hlbiBhbGwgb2YgdGhlIHVuaXRzIGluIHRoZSBwYWNrZXQgYXJlIGRlbHRhIHVuaXRzLgotCSAgQmFzZWQgb24gcGF0Y2ggZnJvbSBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0JICBGaXhlcyAjNjMyOTQ1Ci0KLTIwMTAtMTAtMjYgMTU6NDQ6MzcgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBnb29tOiBSZXR1cm4gbm90LW5lZ290aWF0ZWQgd2hlbiBicHMgaXMgdW5rbm93bgotCSAgSWYgY2FwcyB3ZXJlbid0IG5lZ290aWF0ZWQsIGdvb20gc2hvdWxkIHJldHVybiBub3QtbmVnb3RpYXRlZAotCSAgZnJvbSBpdHMgY2hhaW4gZnVuY3Rpb25zIGluc3RlYWQgb2YgdXNpbmcgYnBzIHVuaXRpYWxpemVkLCB3aGljaAotCSAgbGVhZHMgdG8gYSBkaXZpc2lvbiBieSAwCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMzMjEyCi0KLTIwMTAtMTAtMjcgMTM6MTY6NTQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDdiYmQ3MDggdG8gMDExYmNjOAotCi0yMDEwLTEwLTI2IDE2OjU0OjExICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHZpZGVvZmxpcDogRm9yd2FyZCBzcmMgcGFkIGV2ZW50cyB1cHN0cmVhbS4KLQkgIEZpeCBwYXNzaW5nIG5hdmlnYXRpb24gYW5kIG90aGVyIGV2ZW50cyB1cHN0cmVhbSBieSBhY3R1YWxseSBzZW5kaW5nIHRoZW0uCi0JICBGaXhlczogIzYzMzIwNQotCi0yMDEwLTEwLTI0IDE4OjUwOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IGRlYWRsb2NrIGluIGVycm9yIGNvZGUgcGF0aAotCSAgR1NUX0VMRU1FTlRfRVJST1IgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBsb2NrIGhlbGQsCi0JICBzaW5jZSBpdCB3aWxsIGNhbGwgZ3N0X29iamVjdF9nZXRfcGFyZW50KCkgaW50ZXJuYWxseSwgd2hpY2gKLQkgIHRha2VzIHRoZSBvYmplY3QgbG9jayBhcyB3ZWxsLgotCi0yMDEwLTEwLTIwIDEwOjIxOjQ4ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFJlbW92ZSB1c2VsZXNzIGNsZWFyaW5nIG9mIHNlbmRfeGlwaF9oZWFkZXJzIGZvciBEaXJhYwotCSAgVGhpcyBsb29rcyBsaWtlIGEgbWlzdGFrZSB3aGVuIGNvcHktcGFzdGluZyB0aGUgVGhlb3JhIGNvZGUuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMyNjgyCi0KLTIwMTAtMTAtMjAgMTM6Mjg6MjggKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZG9uJ3QgY3Jhc2ggaWYgdm9yYmlzL3RoZW9yYSBjb2RlYyBkYXRhIGlzIG1pc3NpbmcKLQkgIEVycm9yIG91dCBwcm9wZXJseSBpbiB0aGlzIGNhc2UgaW5zdGVhZCBvZiBjcmFzaGluZy4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI2ODIKLQotMjAxMC0xMC0yMiAxODoxMTo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjUuMyBwcmUtcmVsZWFzZQotCi0yMDEwLTEwLTE5IDE2OjQ1OjUxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZml4IGR1cmF0aW9uIHJlcG9ydGluZwotCSAgSW5pdCBzZWdtZW50IHByaW9yIHRvIHN0b3JpbmcgZHVyYXRpb24gaW5mbyBpbiBpdC4KLQkgIEZpeGVzICM2MzI1NDguCi0KLTIwMTAtMTAtMTkgMTQ6MjE6NTMgKzAxMDAgIEJhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KLQotCSogZ2NvbmYvTWFrZWZpbGUuYW06Ci0JICBnY29uZjogRG9uJ3QgaW5zdGFsbCBzY2hlbWFzIHdoZW4gR0NvbmYgaXMgZGlzYWJsZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI1NTMKLQotMjAxMC0xMC0xOSAxMzo0MzoxNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIHZhcmlvdXMgKGdzdCk6IGFkZCBtaXNzaW5nIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZmxhZ3MKLQkgIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyBhcyBuZWVkZWQuCi0KLTIwMTAtMTAtMTkgMTM6NDQ6MjUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgZHRtZnNyYzogcmVtb3ZlIERFQlVHX0ZVTkNQVFIgZnJvbSBnb2JqZWN0IHZtZXRob2RzCi0KLTIwMTAtMTAtMTYgMTU6NDM6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICB3aW4zMjogc2V0IEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgYWxzbyBpbiB3aW4zMiBjb25maWcuaAotCi0yMDEwLTEwLTE2IDAxOjMzOjUyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4yNS4yIHByZS1yZWxlYXNlCi0KLTIwMTAtMTAtMTYgMDE6MjY6MDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9lbC5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0xMC0xNSAxMzoyMjowMyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IERvbid0IGRpc3QgZ2VuZXJhdGVkIG9yYyBmaWxlcwotCi0yMDEwLTEwLTE1IDE0OjAyOjE5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuaDoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMtZGlzdC5oOgotCSAgVXBkYXRlIGdlbmVyYXRlZCBvcmMgY29kZQotCi0yMDEwLTEwLTE1IDE4OjAwOjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBidW1wIE9yYyByZXF1aXJlbWVudCB0byAwLjQuMTEKLQotMjAxMC0xMC0xNCAxNzo0MTozMCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogVXNlIHRoZSByaWdodCBjb25zdGFudCB0byBkZWZpbmUgdGhlICJ1c2UtcGlwZWxpbmUtY2xvY2siIHByb3BlcnR5Ci0JICBUaGUgd3JvbmcgI2RlZmluZSB3YXMgYmVpbmcgdXNlZCwgbm93IHVzZSB0aGUgY29ycmVjdCBvbmUuCi0KLTIwMTAtMTAtMTQgMTI6MzE6NDggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNWE2NjhiZiB0byA3YmJkNzA4Ci0KLTIwMTAtMTAtMTQgMTc6MjY6MTQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIGFjMzogZGVtdXhlcnMgcHJvdmlkZSBmcmFtZWQgb3V0cHV0Ci0KLTIwMTAtMTAtMTQgMDA6MTE6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuaDoKLQkgIG1hdHJvc2thbXV4OiByZWR1Y2UgbmV3c2VnbWVudCBldmVudCBzcGFtIGFuZCBzZXQgZGlzY29udCBmbGFnIHdoZXJlIG5lZWRlZAotCSAgT25seSBzZW5kIG5ld3NlZ21lbnQgZXZlbnRzIHdpdGggbmV3IHBvc2l0aW9ucyBkb3duc3RyZWFtIHdoZW4gYWN0dWFsbHkKLQkgIG5lZWRlZCwgaW5zdGVhZCBvZiBzZW5kaW5nIG11bHRpcGxlIG5ld3NlZ21lbnQgZXZlbnRzIHdpdGggbmV3IHNlZWsKLQkgIHBvc2l0aW9ucyBpbiBhIHJvdy4gQWxzbyBzZXQgdGhlIGRpc2NvbnQgZmxhZyBvbiBidWZmZXJzIGFmdGVyIGEKLQkgIGRpc2NvbnRpbnVpdHkuCi0KLTIwMTAtMTAtMTMgMjM6NDY6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuaDoKLQkgIG1hdHJvc2thbXV4OiBzZXQgY29ycmVjdCBidWZmZXIgb2Zmc2V0cyBhZnRlciBzZWVrcwotCSAgUmUtdXNlIHRoZSBleGlzdGluZyAncG9zJyBmaWVsZCBtYWludGFpbmVkIGJ5IGVibWwgd3JpdGVyIHRvIHNldAotCSAgYnVmZmVyIG9mZnNldHMuIFRoaXMgYWxzbyBtYWtlcyBzdXJlIHRoYXQgd2Ugc2V0IHRoZSByaWdodCBvZmZzZXRzCi0JICBvbiBidWZmZXJzIGFmdGVyIGEgc2VlayAoZS5nLiB3aGVuIHdyaXRpbmcgYW4gaW5kZXggYXQgdGhlIGVuZCkuCi0KLTIwMTAtMTAtMTQgMDA6MjI6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZG9uJ3QgZm9yd2FyZCB0YWcgZXZlbnRzIGRvd25zdHJlYW0KLQkgIERvbid0IGZvcndhcmQgc3RyZWFtLXNwZWNpZmljIHRhZyBldmVudHMgZG93bnN0cmVhbSAoZXNwLiBub3QKLQkgIGJlZm9yZSBhbnkgbmV3c2VnbWVudCBldmVudCkueAotCi0yMDEwLTEwLTEzIDE3OjE1OjI1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IGhhbmRsZSBhbm90aGVyIG1wNHYgdmFyaWF0aW9uCi0JICAuLi4gaW5jbHVkaW5nIHRoZSBnbGJsIGF0b20gY29udGFpbmluZyBjb2RlYy1kYXRhLgotCi0yMDEwLTEwLTEzIDE3OjIxOjIzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZWZlbmNlLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9uZWdvdGlhdGlvbi5jOgotCSogZ3N0L2RlYnVndXRpbHMvcHJvZ3Jlc3NyZXBvcnQuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgIHZhcmlvdXMgKGdzdCk6IGFkZCBhIG1pc3NpbmcgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBmbGFncwotCi0yMDEwLTEwLTEzIDE3OjEzOjA0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50LmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKLQkqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICB2YXJpb3VzIChzeXMpOiBhZGQgYSBtaXNzaW5nIEdfUEFSQU1fU1RBVElDX1NUUklOR1MgZmxhZ3MKLQotMjAxMC0xMC0xMyAxNjoyNToxNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sdGFnLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSogZXh0L2VzZC9lc2Rtb24uYzoKLQkqIGV4dC9lc2QvZXNkc2luay5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzoKLQkqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkgIHZhcmlvdXMgKGV4dCk6IGFkZCBhIG1pc3NpbmcgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyBmbGFncwotCi0yMDEwLTEwLTEzIDE2OjM0OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkqIGV4dC9lc2QvZXNkbW9uLmM6Ci0JKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5jOgotCSAgdmFyaW91czogd3JhcCBwcm9wZXJ0eSByZWdpc3RyYXRpb24gYW5kIGFkZCBhIHNpbmdsZSBmaXhtZSBmb3IgbG9uZyBkZXNjLgotCi0yMDEwLTEwLTEzIDExOjQ2OjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgaDI2NGRlcGF5OiBhbHdheXMgbWFyayB0aGUgY29kZWNfZGF0YSBhcyBrZXlmcmFtZQotCSAgV2UgbmVlZCB0byBtYXJrIHRoZSBjb2RlY19kYXRhIGFzIGEga2V5ZnJhbWUgb3IgZWxzZSBkb3duc3RyZWFtIGRlY29kZXJzIG1pZ2h0Ci0JICBkZWNpZGUgdG8gc2tpcCBpdCwgd2FpdGluZyBmb3IgYSBrZXlmcmFtZS4KLQkgIEZpeGVzICM2MzE5OTYKLQotMjAxMC0xMC0xMyAwNzoxNjo0NyArMDEwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkgIG1hdHJvc2thbXV4OiBtYWtlIGJ1ZmZlciBvZmZzZXRzIGEgYnl0ZSBjb3VudCByYXRoZXIgdGhhbiBhIGJ1ZmZlciBjb3VudAotCi0yMDEwLTEwLTA3IDIxOjEyOjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZXNkL2VzZG1vbi5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZWZlbmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIGV4dCwgZ3N0OiBjYW5vbmljYWxpc2UgcHJvcGVydHkgbmFtZXMgd2hlcmUgdGhpcyB3YXNuJ3QgdGhlIGNhc2UKLQkgIGllLiAiZm9vX2JhciIgLT4gImZvby1iYXIiCi0KLTIwMTAtMTAtMTIgMTU6MDI6NDIgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JICBydHBtcHZwYXk6IGZpeCB0aW1lc3RhbXBpbmcgb2YgcnRwIGJ1ZmZlcnMKLQkgIEluY29tbWluZyBidWZmZXIgaXMgb25seSBwdXNoZWQgb24gdGhlIGFkYXB0ZXIgYXQgdGhlIGVuZCBvZiB0aGUKLQkgIGhhbmRsZV9idWZmZXIgZnVuY3Rpb24uIEJ1dCBkdXJhdGlvbi90aW1lc3RhbXAgb2YgdGhpcyBidWZmZXIgaXMgYWxyZWFkeQotCSAgdGFrZW4gaW50byBhY2NvdW50IGZvciB0aGUgY3VycmVudCBkYXRhIGluIHRoZSBhZGFwdGVyLiBUaGlzIGxlYWRzIHRvCi0JICB3cm9uZyBydHAgdGltZXN0YW1wcyBhbmQgZXh0cmEgbGF0ZW5jeS4KLQotMjAxMC0xMC0xMiAxMTozNzo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgIGV4YW1wbGVzOiBGaXggYnVpbGQgd2l0aCBHVEsrIDMuMAotCi0yMDEwLTEwLTExIDE1OjEyOjAwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBtYXJrIGFzIGEgc291cmNlCi0JICBNYXJrIHRoZSBydHNwc3JjIGVsZW1lbnQgYXMgYSBzb3VyY2UuCi0JICBSZXF1aXJlcyAwLjEwLjMxLjEgbm93Ci0KLTIwMTAtMTAtMTEgMTQ6MjQ6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b2RldGVjdDogU2V0IEdTVF9FTEVNRU5UX0lTX1NPVVJDRSBmbGFnIG9uIHNvdXJjZXMKLQotMjAxMC0xMC0xMSAxNDoyMTowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzcmMuYzoKLQkgIHN3aXRjaHNyYzogU2V0IHRoZSBHU1RfRUxFTUVOVF9JU19TT1VSQ0UgZmxhZwotCi0yMDEwLTEwLTExIDE0OjE3OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBSZXF1aXJlIGNvcmUgMC4xMC4zMC4xCi0KLTIwMTAtMTAtMTAgMTQ6NDM6NTggKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSAgbWF0cm9za2FtdXg6IHNldCBvZmZzZXRzIG9uIG91dGdvaW5nIGJ1ZmZlcnMKLQotMjAxMC0xMC0wOSAxNDoxNDoyNyArMDIwMCAgSU9oYW5uZXMgbSB6bcO2bG5pZyA8em1vZWxuaWdAaWVtLmF0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IE9ubHkgZ2V0L3NldCBvdmVybGF5IHBhcmFtcyBpZiBuZWVkZWQKLQkgIGl0J3MgcGVyZmVjdGx5IG9rIGZvciBhIHZpZGVvIG91dHB1dCBkZXZpY2UgdG8gbm90IGhhdmUgb3ZlcmxheSBjYXBhYmlsaXRpZXMuCi0JICB0aGlzIHBhdGNoIHJlbW92ZXMgdGhlIG5lZWQgdG8gZ2V0L3NldCB0aGUgb3ZlcmxheSBwYXJhbWV0ZXJzIGlmIHRoZSB1c2VyCi0JICBkb2VzIG5vdCBleHBsaWNpdGVseSByZXF1ZXN0IG9uZSBvZiB0aGUgb3ZlcmxheSBwcm9wZXJ0aWVzCi0KLTIwMTAtMDktMzAgMTU6Mjg6MjMgKzAyMDAgIElPaGFubmVzIG0gem3DtmxuaWcgPHptb2VsbmlnQGllbS5hdD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkgIHY0bDJzaW5rOiBQcm90ZWN0IGFnYWluc3QgTlVMTC1wb2ludGVyIGFjY2VzcwotCSAgZ3N0X3Y0bDJzaW5rX2NoYW5nZV9zdGF0ZSgpIHdvdWxkIGZyZWUgdGhlIHBvb2wgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIHRoZXJlCi0JICB3YXMgYSB2YWxpZCBwb29sLi4uCi0KLTIwMTAtMTAtMDggMTI6NDM6NTEgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYzRhOGFkYyB0byA1YTY2OGJmCi0KLTIwMTAtMTAtMDggMTI6NTM6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNWUzYzliZiB0byBjNGE4YWRjCi0KLTIwMTAtMTAtMDYgMTE6Mjk6NTUgKzAyMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogRml4IHJlcXVpcmVkIGZpZWxkcyBsb2dpYwotCSAgQm90aCBoaXN0b3J5X2NvdW50IGFuZCBmaWVsZHNfcmVxdWlyZWQgY291bnQgZnJvbSAxLiBBcyBwZXIgdGhlIHdoaWxlIGxvb3AKLQkgIGNvbmRpdGlvbiB0aGF0IGZvbGxvd3MgdGhpcyBjb2RlLCB0byBwZXJmb3JtIHRoZSBkZWludGVybGFjaW5nIG1ldGhvZCwgd2UgbmVlZAotCSAgaGlzdG9yeV9jb3VudCA+PSBmaWVsZHNfcmVxdWlyZWQgZmllbGRzIGluIHRoZSBoaXN0b3J5LiBUaGVyZWZvcmUgaWYgd2UgaGF2ZQotCSAgaGlzdG9yeV9jb3VudCA8IGZpZWxkc19yZXF1aXJlZCAobm90IGZpZWxkc19yZXF1aXJlZCArIDEpLCB3ZSBuZWVkIG1vcmUgZmllbGRzLgotCi0yMDEwLTA5LTIwIDE5OjQzOjQ1ICswMjAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5oOgotCSAgZmx2bXV4OiByZXNlbmQgb25NZXRhZGEgdGFnIHdoZW4gdGFncyBjaGFuZ2VzIGluIHN0cmVhbWFibGUgbW9kZQotCi0yMDEwLTEwLTA1IDE5OjQwOjUwICswMTAwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogQUFDIGNvZGVjX2RhdGEgY2FuIGJlID4gMiBieXRlcyBsb25nCi0JICBUaGlzIGZpeGVzIHRoZSBhc3N1bXB0aW9uIHRoYXQgRGVjb2RlclNwZWNpZmljSW5mbyBtdXN0IGJlIDIgYnl0ZXMgbG9uZwotCSAgZm9yIEFBQyBmaWxlcy4gVGhlIHNwZWNpZmljYXRpb24gYWxsb3dzIEhFLUFBQyB0byBiZSBleHBsaWNpdGx5Ci0JICBzaWduYWxsZWQgaW4gYSBiYWNrd2FyZCBjb21wYXRpYmxlIHdheS4gVGhpcyBpcyBkb25lIGJ5IG1lYW5zIG9mIGFuCi0JICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFmdGVyIHRoZSByZWd1bGFyIEFBQyBoZWFkZXIuIEl0IGlzIGV4cGVjdGVkIHRoYXQKLQkgIGRlY29kZXJzIHRoYXQgY2FuIHBsYXkgQUFDIGJ1dCBub3QgSEUtQUFDIHdpbGwgcGFyc2UgdGhlIGhlYWRlciBub3JtYWxseQotCSAgYW5kIGlnbm9yZSBleHRlbmRlZCBiaXRzLCBtdWNoIGFzIHRoZXkgZG8gZm9yIHRoZSBIRS1BQUMgc3BlY2lmaWMgcGF5bG9hZAotCSAgaW4gdGhlIGFjdHVhbCBzdHJlYW0uCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMzEzCi0KLTIwMTAtMTAtMDUgMTY6MDE6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG9ubHkgdW5yZWYgYnVmZmVyIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZCBmb3IgY2x1c3RlciBzY2FubmluZwotCSAgRml4ZXMgIzYyOTA0Ny4KLQotMjAxMC0xMC0wNSAxNjowMDo0NSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYXZvaWQgaW5maW5pdGUgY2x1c3RlciBzY2FubmluZwotCi0yMDEwLTEwLTA1IDEyOjIwOjUyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBnb29tOiB0YWtlIGR1cmF0aW9uIGludG8gYWNjb3VudCB3aGVuIGRvaW5nIFFvUwotCSAgVGFrZSB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lcyBpbnRvIGFjY291bnQgc28gdGhhdCB3ZSBkb24ndCBkcm9wIGZyYW1lcyB0aGF0Ci0JICBhcmUgb25seSBwYXJ0aWFsbHkgcGFzdCB0aGUgUW9TIGRlYWRsaW5lLgotCi0yMDEwLTEwLTA1IDEwOjQwOjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmg6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmg6Ci0JICBnb29tOiB1c2UgYWRhcHRlciBmb3IgdGltZXN0YW1waW5nCi0JICBVc2UgdGhlIGFkYXB0ZXIgdGltZXN0YW1wIGNvZGUgdG8gZ2V0IG1vcmUgYWNjdXJhdGUgdGltZXN0YW1wcy4KLQkgIEZpeCBsYXRlbmN5IGNhbGN1bGF0aW9uLCB3ZSBhZGQgb3VyIG93biBsYXRlbmN5IGluIHRoZSB3b3JzdCBjYXNlLgotCi0yMDEwLTEwLTA0IDIyOjMxOjMyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvcmF3MTM5NC9NYWtlZmlsZS5hbToKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTQuYzoKLQkgIHJhdzEzOTQ6IERvbid0IGNvbXBpbGUgaGR2MTM5NHNyYyBpZiBsaWJpZWM2MTg4MyBpc24ndCBhdmFpbGFibGUKLQkgIEZpeGVzICM2Mjk4OTYKLQotMjAxMC0wOS0yMCAxOTo0NDowOSArMDIwMCAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVtb3Rpb24uY29tPgotCi0JKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkgIGljeWRlbXV4OiBmb3J3YXJkIHRhZyBldmVudHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzAyMDUKLQotMjAxMC0xMC0wNCAxOTowMDo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSAgZ29vbTJrMTogcmVwb3J0IG91ciBsYXRlbmN5IGNvcnJlY3RseQotCSAgRml4ZXMgIzYzMTMwMwotCi0yMDEwLTEwLTA0IDE4OjU2OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBnb29tMmsxOiBhZGQgZGVmaW5lcyBmb3IgZGVmYXVsdCB3aWR0aC9oZWlnaHQvZnBzCi0JICBBZGQgc29tZSBkZWZpbmVzIGZvciB0aGUgZGVmYXVsdCB3aWR0aC9oZWlnaHQvZnBzIGluc3RlYWQgb2YgdXNpbmcgZGlmZmVyZW50Ci0JICB2YWx1ZXMgaW4gZGlmZmVyZW50IHBsYWNlcy4KLQotMjAxMC0xMC0wNCAxODo1MjoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgZ29vbTogYWRkIGxhdGVuY3kgY29tcGVuc2F0aW9uIGNvZGUuCi0JICBJbXBsZW1lbnQgYSBsYXRlbmN5IHF1ZXJ5IGFuZCByZXBvcnQgaG93IG11Y2ggbGF0ZW5jeSB3ZSB3aWxsIGFkZCB0byB0aGUKLQkgIHN0cmVhbS4KLQkgIEFsc2UgbWFrZSBzb21lIGRlZmF1bHRzIGZvciB0aGUgZGVmYXVsdCB3aWR0aC9oZWlnaHQvZnJhbWVyYXRlCi0JICBGaXhlcyAjNjMxMzAzCi0KLTIwMTAtMTAtMDQgMTc6NTY6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLnB5OgotCSAgdGVzdDogYWRkIHB5dGhvbiB2ZXJzaW9uIG9mIHRoZSBhdWRpbyBzZW5kZXIKLQkgIEFkZCBhIHB5dGhvbiB2ZXJzaW9uIG9mIHRoZSBhdWRpbyBzZW5kZXIgcGlwZWxpbmUuCi0JICBQb3J0ZWQgYnkgU3A0cmMgb24gSVJDLgotCi0yMDEwLTEwLTA0IDE3OjUyOjIyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEucHk6Ci0JICB0ZXN0czogQWRkIHB5dGhvbiBSVFAgY2xpZW50IGV4YW1wbGUKLQkgIEFkZCBhIHB5dGhvbiB2ZXJzaW9uIG9mIHRoZSBQQ01BIGNsaWVudCBhcHAuCi0JICBQb3J0ZWQgYnkgU3A0cmMgb24gSVJDLgotCi0yMDEwLTEwLTA0IDA5OjM5OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JICBydHA6IEZpeCB1bml0aWFsaXplZCBjb21waWxlciB3YXJuaW5ncyBvbiBPUyBYIGJ1aWxkIGJvdAotCSAgVGhlc2Ugd2FybmluZ3MgYXJlIHdyb25nIHRob3VnaCwgdGhlIHZhcmlhYmxlcyBhcmUgb25seSB1c2VkIGluCi0JICB0aGUgY2FzZXMgd2hlcmUgdGhleSAqYXJlKiBpbml0aWFsaXplZCBieSB0aGUgYml0IHJlYWRlci4KLQotMjAxMC0xMC0wMyAyMzo0OTowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMnBheS5jOgotCSAgcnRwZzcyMnBheTogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgY29tcGlsZXIgd2FybmluZwotCSAgVGhlIGNsb2NrIHJhdGUgaXMgYWx3YXlzIDgwMDAgSHogYWNjb3JkaW5nIHRvIHRoZSBSRkMgYW5kCi0JICB0aGUgc2FtcGxpbmcgcmF0ZSBtdXN0IGFsd2F5cyBiZSAxNjAwMCBIei4KLQotMjAxMC0xMC0wMSAxMzo1OToxMCArMDQwMCAgVmxhZGltaXIgRXJlbWVldiA8ZXJlbWVldkBhdGxhbnRpcy5ydT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IGltcHJvdmUgYXJ0aWNsZSByZWZlcmVuY2UgaW4gY29tbWVudCBibG9jawotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzMTA4MgotCi0yMDEwLTA0LTMwIDIxOjAwOjMxICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXVpY2t0aW1lLmM6Ci0JICBxdGRlbXV4OiBVc2UgcGJ1dGlscyBmb3IgSC4yNjQgcHJvZmlsZS9sZXZlbCBleHRyYWN0aW9uCi0JICBUaGUgZnVuY3Rpb25zIHVzZWQgdG8gZXh0cmFjdCB0aGlzIGRhdGEgaGF2ZSBiZWVuIG1vdmVkIHRvIGdzdHBidXRpbHMgdG8KLQkgIGZhY2lsaXRhdGUgcmV1c2UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE3MzE4Ci0KLTIwMTAtMDQtMzAgMjE6MDA6MzEgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS5jOgotCSAgbWF0cm9za2FkZW11eDogVXNlIHBidXRpbHMgZm9yIEguMjY0IHByb2ZpbGUvbGV2ZWwgZXh0cmFjdGlvbgotCSAgVGhlIGZ1bmN0aW9ucyB1c2VkIHRvIGV4dHJhY3QgdGhpcyBkYXRhIGhhdmUgYmVlbiBtb3ZlZCB0byBnc3RwYnV0aWxzIHRvCi0JICBmYWNpbGl0YXRlIHJldXNlLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNzMxOAotCi0yMDEwLTA0LTIyIDE5OjM5OjQ3ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRXhwb3J0IE1QRUctNCB2aWRlbyBwcm9maWxlIGFuZCBsZXZlbCBpbiBzdHJlYW0gY2FwcwotCSAgVGhpcyB1c2VzIGdzdHBidXRpbHMgdG8gZXh0cmFjdCB0aGUgcHJvZmlsZSBhbmQgbGV2ZWwgZnJvbSB0aGUgdmlkZW8KLQkgIG9iamVjdCBzZXF1ZW5jZSBhbmQgYWRkcyB0aGlzIHRvIHN0cmVhbSBjYXBzLiBUaGlzIGNhbiBiZSB1c2VkIGFzCi0JICBtZXRhZGF0YSBhbmQgZm9yIGZpbmUtZ3JhaW5lZCBkZWNvZGVyIHNlbGVjdGlvbi4KLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTY1MjEKLQotMjAxMC0wOS0zMCAxMjo0NDo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBhYWMgY2hhbm5lbCBvdmVycmlkZSBiYXNlZCBvbiBjb2RlYyBkYXRhIGZvciA3LjEgY2FzZQotCi0yMDEwLTA0LTMwIDE0OjA2OjI3ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBFeHBvcnQgQUFDIHByb2ZpbGUgYW5kIGxldmVsIGluIGNhcHMKLQkgIFRoaXMgZXhwb3J0cyB0aGUgQUFDIHByb2ZpbGUgYW5kIGxldmVsIGluIGNhcHMgZm9yIHVzZSBhcyBtZXRhZGF0YSBhbmQKLQkgIChldmVudHVhbGx5KSBmb3IgbW9yZSBmaW5lLWdyYWluZWQgc2VsZWN0aW9uIG9mIGRlY29kZXJzIGF0Ci0JICBjYXBzLW5lZ290aWF0aW9uIHRpbWUuIChEb2Vzbid0IHdvcmsgZm9yIEhFLUFBQyB5ZXQgdGhvdWdoLikKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIzMTMKLQotMjAxMC0wOS0zMCAxODozNDowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyMnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIycGF5Lmg6Ci0JICBydHA6IGFkZCBHNzIyIHBheSBhbmQgZGVwYXlsb2FkZXIKLQotMjAxMC0wOS0zMCAxMjowODo0OSArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IHVwZGF0ZSBsaW5rIHRvIGRvY3VtZW50YXRpb24KLQotMjAxMC0wOS0zMCAxMTozNDo1NiArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LnNoOgotCSAgZXhhbXBsZXM6IGZpeCBpbmRlbnRhdGlvbiBvbiBydHAgY2xpZW50IGV4YW1wbGUKLQotMjAxMC0wOS0zMCAxMTozMzoyNCArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LVBDTUEuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQuc2g6Ci0JICBleGFtcGxlczogZml4IHR5cG8gaW4gcG9ydCBvZiBydHAgZXhhbXBsZXMKLQotMjAxMC0wOS0yOSAxMzoyMDoyMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JICB3YXZlbmM6IG1pbmlzY3VsZSBjb2RlIGNsZWFuLXVwCi0JICBHU1RfQ0xPQ0tfVElNRV9OT05FIGlzIG5vdCBzb21ldGhpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGgKLQkgIEdTVF9GT1JNQVRfQllURVMuCi0KLTIwMTAtMDktMjkgMTA6MzQ6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcmV2ZXJzZSBwbGF5YmFjazsgcHJldmVudCBvdmVybGFwIG9mIHN1YnNlcXVlbnQgZnJhZ21lbnRzCi0KLTIwMTAtMDktMjggMTY6MjE6NDggKzAzMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBtaXNzaW5nIG51bGwtdGVybWluYXRvciBpbiBwcm90b2NvbHMgYXJyYXkKLQkgIEZpeGVzIHJhbmRvbSBjcmFzaCByZWdyZXNzaW9uIGZyb20gY29tbWl0IGFlODRhZS4KLQotMjAxMC0wOS0yNCAxNjoyNjoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3QgYWRkIC9VRFAgaW4gdGhlIHRyYW5zcG9ydCwgaXQncyB0aGUgZGVmYXVsdAotCSAgZG9uJ3QgYWRkIHRoZSBkZWZhdWx0IFVEUCBsb3dlci10cmFuc3BvcnQsIHNvbWUgc2VydmVycyBkb24ndCBzZWVtIHRvIGxpa2UgaXQuCi0JICBGaXhlcyAjNjMwNTAwCi0KLTIwMTAtMDYtMjUgMTc6MDg6MDMgKzAyMDAgIFBhc2NhbCBCdWhsZXIgPHBhc2NhbC5idWhsZXJAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cG1hbmFnZXI6IHBhY2tldCBsb3N0IHNob3VsZCBub3QgYmUgYSB3YXJuaW5nLiBJdCBoYXBwZW5zIGFsbCB0aGUgdGltZS4uLgotCi0yMDEwLTA5LTI0IDE1OjMzOjQwICswMjAwICBQYXNjYWwgQnVobGVyIDxwYXNjYWwuYnVobGVyQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHJ0cGJpbjogTWFrZSBjbGVhbmluZyB1cCBzb3VyY2VzIGluIHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQgTVQgc2FmZQotCSAgVXNpbmcgX2ZvcmVhY2hfcmVtb3ZlIG9uIHRoZSBoYXNodGFibGUsIHdoaWxlIHJlbGVhc2luZyB0aGUgbG9jayBwcm90ZWN0aW5nCi0JICB0aGF0IHRhYmxlIGluc2lkZSB0aGUgY2FsbGJhY2sgaXMgbm90IGEgZ29vZCBpZGVhLiBUaGUgaGFzaHRhYmxlIG1pZ2h0Ci0JICB0aGVuIGNoYW5nZSAoYSBzb3VyY2UgcmVtb3ZlZCBvciBhZGRlZCkgd2hpbGUgc2lnbmFscyBsaWtlIG9uX3RpbWVvdXQKLQkgIGFyZSBiZWluZyBzZW50LgotCSAgVGhpcyBzb2x1dGlvbiBtYWtlcyBhIGNvcHkgb2YgdGhlIHRhYmxlLCBwZXJmb3JtcyB0aGUgX2ZvcmVhY2ggd2l0aG91dAotCSAgYWN0dWFsbHkgcmVtb3ZpbmcgYW55IHNvdXJjZXMsIGJ1dCBtYXJrcyB0aGVtIGZvciByZW1vdmFsIG9uIGEgc2Vjb25kCi0JICBpdGVyYXRpb24gd2l0aCB0aGUgcmVhbCBsaXN0LCBidXQgdGhpcyB0aW1lIG5vdCBsZXR0aW5nIGdvIG9mIHRoZSBsb2NrLgotCSAgRml4ZXMgIzYzMDQ1MgotCi0yMDEwLTA5LTI0IDE1OjE5OjE1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgaWQzZGVtdXg6IFNhbml0aXplIGlkMyBmcmFtZSBuYW1lcwotCSAgVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBpbiBxdGRlbXV4LiBBdm9pZHMgcHJvdmlkaW5nIGludmFsaWQKLQkgIHN0cnVjdHVyZS90YWdzIG5hbWVzCi0KLTIwMTAtMDktMjQgMTQ6NTk6NDUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkgIGFwZWRlbXV4OiBTa2lwIGVtcHR5IHRhZ3MKLQkgIEF2b2lkIGNyZWF0aW5nIGJvZ3VzIHN0cmluZyB0YWdzLiBBbHNvIGFkZGVkIGxvZ2dpbmcgb2YgdGhlIHN0cmluZwotCSAgdmFsdWVzIG9mIHRoZSB0YWcgbmFtZSBhbmQgdmFsdWUuCi0KLTIwMTAtMDktMjQgMDg6NTY6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cDogaW5pdCBkZWJ1ZyBjYXRlZ29yeSBiZWZvcmUgdXNpbmcgaXQKLQotMjAxMC0wNC0xMiAwOTo0OToxNCArMDIwMCAgUGFzY2FsIEJ1aGxlciA8cGFzY2FsLmJ1aGxlckB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBIYW5kbGUgcnlzbmMgb2YgaXRlcmF0b3Igd2hlbiBsb29raW5nIGZvciBmcmVlIHBhZCBuYW1lCi0JICBJZiBhIG5ldyBwYWQgd2FzIGFkZGVkIHdoaWxlIGl0ZXJhdGluZyB0aGVuIGEgcGFkIGNvdWxkIGJlCi0JICByZXR1cm5lZCB0aGF0IHdhcyBhbHJlYWR5IGluIHVzZS4KLQkgIEZpeGVzICM2MzA0NTEKLQotMjAxMC0wOS0yNCAxNDowOToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogZml4IGNvbXBpbGF0aW9uCi0KLTIwMTAtMDQtMDcgMTU6MzE6NTIgKzAyMDAgIFRyb25kIEFuZGVyc2VuIDx0cm9uZC5hbmRlcnNlbkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBVbmxvY2sgYmVmb3JlIGFkZGluZyBwYWQgaW4gbmV3X3BheWxvYWRfZm91bmQKLQkgIEhvbGRpbmcgaW50ZXJuYWwgbG9ja3Mgd2hpbGUgcG90ZW50aWFsbHkgY2FsbGluZyBvdXQgaXMgYSBzb3VyY2UKLQkgIG9mIGRlYWRsb2NrcywgYW5kIGluIHRoaXMgY2FzZSB0aGUgYXBwbGljYXRpb24gbWlnaHQgc3Vic2NyaWJlIHRvIHRoZQotCSAgcGFkLWFkZGVkIHNpZ25hbC4KLQkgIEZpeGVzICM2MzA0NDkKLQotMjAwOS0wOC0zMSAxODozNzo0MCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiByZWxheCB0aGlyZC1wYXJ0eSBjb2xsaXNpb24gZGV0ZWN0aW9uCi0JICBJZiB0aGUgc291cmNlIGhhcyBiZWVuIGluYWN0aXZlIGZvciBzb21lIHRpbWUsIHdlIGFzc3VtZSB0aGF0IGl0IGhhcwotCSAgc2ltcGx5IGNoYW5nZWQgaXRzIHRyYW5zcG9ydCBzb3VyY2UgYWRkcmVzcy4gSGVuY2UsIHRoZXJlIGlzIG5vIHRydWUKLQkgIHRoaXJkLXBhcnR5IGNvbGxpc2lvbiAtIG9ubHkgYSBzaW11bGF0ZWQgb25lLgotCSAgRml4ZXMgIzYzMDQ0NwotCi0yMDEwLTA5LTI0IDEzOjUwOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogd2hpdGVzcGFjZSBmaXhlcwotCi0yMDEwLTA5LTI0IDEzOjQ4OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkgIHJ0cHNvdXJjZTogc2ltcGxpZnkgdGhlIHJhdGUgZXN0aW1hdGlvbiBzb21lIG1vcmUKLQotMjAwOS0wOC0zMSAxODozNDowOCArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgcnRwbWFuYWdlcjogcHJvdmlkZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MKLQotMjAxMC0wOS0yNCAwMDowMTowNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogc2V0IHBsdWdpbiByZWxlYXNlIGRhdGV0aW1lCi0KLTIwMTAtMDktMjMgMjE6MjE6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuaDoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmg6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5oOgotCSAgZXF1YWxpemVyOiBmaXggY2xhc3MgZGVmaW5pdGlvbnMKLQkgIENsYXNzIHN0cnVjdHVyZXMgbXVzdCBiZSBiYXNlZCBvbiB0aGUgcGFyZW50IGNsYXNzIHN0cnVjdCwgbm90IG9uCi0JICB0aGUgcGFyZW50IGluc3RhbmNlIHN0cnVjdC4KLQotMjAxMC0wOS0xNSAyMDozNjozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogcHJlLXJlZ2lzdGVyIHBhZCBjbGFzcyBwcm9wZXJseSB3aXRoIGdfdHlwZV9jbGFzc19yZWYKLQkgIEZpeCBjb2RlIHRvIG1hdGNoIHRoZSBjb21tZW50LiBBbHNvLCB0aGVyZSdzIG5vIG5lZWQgdG8gcmVnaXN0ZXIgdGhlCi0JICBiYWNrZ3JvdW5kIGVudW0gdHlwZSBhZ2FpbiwgdGhpcyBpcyBhbHJlYWR5IGRvbmUgdmlhIGluc3RhbGxfcHJvcGVydHkuCi0KLTIwMTAtMDktMjMgMjE6NTc6MTggKzAyMDAgIERhdmlkIEhveXQgPGRob3l0QGxsbmwuZ292PgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSAgc3BlZXg6IEZpeCBjcmFzaGVzIHdpdGggTVNWQwotCSAgVXNpbmcgdGhlIHN5bWJvbHMgZm9yIHRoZSBkaWZmZXJlbnQgU3BlZXggbW9kZXMgcmVzdWx0cwotCSAgaW4gY3Jhc2hlcyB3aGVuIHVzaW5nIE1TVkMuIFVzZSB0aGUgbGlicmFyeSBmdW5jdGlvbnMgdG8KLQkgIGdldCB0aGUgbW9kZXMgaW5zdGVhZC4KLQkgIEZpeGVzIGJ1ZyAjNjMwMzc4LgotCi0yMDEwLTA4LTI0IDEzOjI1OjAyICswMjAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gb24gc2lsZW5jZQotCSAgRml4ZXMgYnVnICM2MzA0NTguCi0KLTIwMTAtMDktMjMgMTY6NDY6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBwYXJzZSBhbmQgdXNlIGN0cwotCSAgRm9yIEgyNjQsIHRoZXJlIGlzIGFuIGV4dHJhIGhlYWRlciBjb250YWluaW5nIHRoZSBDVFMsIHdoaWNoIGlzIGEgdGltZXN0YW1wCi0JICBvZmZzZXQgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgUFRTLiBQYXJzZSB0aGlzIHZhbHVlIGFuZCB1c2UgaXQgdG8gYWRqdXN0Ci0JICB0aGUgcHRzLgotCSAgRml4ZXMgIzYzMDA4OAotCi0yMDEwLTA5LTIzIDE2OjQ1OjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogaW1wcm92ZSBwdHMgZGVidWdnaW5nCi0KLTIwMTAtMDktMjIgMTk6MDE6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvcHVsc2UvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvcHVsc2UvcHVsc2UuYzoKLQkgIHB1bHNlOiBhZGQgdGVzdCBhcHAgZm9yIHB1bHNlIGRldmljZSBwcm9iZQotCi0yMDEwLTA5LTIyIDE4OjUwOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlOiBmaXggZGV2aWNlX2Rlc2NyaXB0aW9uIGluIFJFQURZCi0JICBNYWtlIHRoZSBpc19kZWFkIGNoZWNrIG1vcmUgY2xlYXIgYW5kIGFkZCBhbiBvcHRpb24gdG8gY2hlY2sgZm9yIHRoZSBzdGF0dXMgb2YKLQkgIHRoZSBzdHJlYW0gaW4gYWRkaXRpb24gdG8gdGhlIGNvbnRleHQuCi0JICBXZSBkb24ndCBuZWVkIGEgc3RyZWFtIHRvIGdldCB0aGUgZGV2aWNlX2Rlc2NyaXB0aW9uIHN0cmluZy4KLQkgIEZpeGVzICM2MzAzMTcKLQotMjAxMC0wOS0yMiAxMjo1NjowMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRG9uJ3QgcG9zdCB0YWdzIGlmIHRoZXJlIGFyZSBub25lCi0JICBBbmQgbWFrZSBhbGwgY29kZSBnbyB0aHJvdWdoIF9wb3N0X2dsb2JhbF90YWdzLgotCi0yMDEwLTA5LTIyIDEyOjM3OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkgIHJ0cGgyNjRkZXBheTogcmVmYWN0b3IgYW5kIHNpbXBsaWZ5IEFVIG1lcmdpbmcKLQkgIE1vdmUgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIE5BTFUgdG8gYSBzZXBhcmF0ZSBtZXRob2QuCi0JICBTaW1wbGlmeSB0aGUgbWVyZ2luZyBvZiBOQUxVIGludG8gQVUgYW5kIHVzZSBjb21tb24gY29kZSB3aGVuIHBvc3NpYmxlLgotCi0yMDEwLTA5LTIxIDIzOjIzOjA3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSAgc2hhcGV3aXBlOiBhZGQgb3B0aW9uYWwgYm9yZGVyIHBhcmFtZXRlciBhbmQgc2xvd2Rvd24gYW5pbWF0aW9uCi0JICBBbGxvdyB0byBwbGF5IHdpdGggdGhlIGJvcmRlciBwcm9wZXJ0eSAoc2hhcnAvc29mdCBlZGdlcykuCi0KLTIwMTAtMDktMjEgMTk6MTQ6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgc2hhcGV3aXBlOiBGb3JjZSBmb3JtYXQgdG8gQVlVViBpbiB0aGUgZXhhbXBsZSBwaXBlbGluZSBmb3IgdGhlIHNhbWUgcmVhc29uCi0KLTIwMTAtMDktMjEgMTk6MTM6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYzoKLQkgIHNoYXBld2lwZTogRm9yY2UgdGhlIGlucHV0IHRvIEFZVVYgdG8gcHJldmVudCBuZWdvdGlhdGlvbiBmYWlsdXJlcyBpbiB2aWRlb21peGVyCi0JICBUaGUgc2Vjb25kIHZpZGVvdGVzdHNyYyBjaGFpbiBtaWdodCBwcm9kdWNlIFlVWTIgYmVjYXVzZSBldmVyeXRoaW5nIGlzCi0JICBhY2NlcHRlZCBkb3duc3RyZWFtIGJlZm9yZSB0aGUgZmlyc3Qgc2hhcGV3aXBlIGNoYWluIGdldHMgbmVnb3RpYXRlZC4KLQotMjAxMC0wOS0yMSAxOToxMjo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBzaGFwZXdpcGU6IEltcHJvdmUgZGVidWdnaW5nIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gZW1wdHkgY2FwcyBmcm9tIHRoZSBnZXRjYXBzIGZ1bmN0aW9ucwotCi0yMDEwLTA5LTIxIDE4OjMzOjU1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYWEwZDFkMCB0byA1ZTNjOWJmCi0KLTIwMTAtMDktMjEgMTI6NDk6MzEgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5Lmg6Ci0JICB2NGwyOiB1c2UgdGhlIHhvdmVybGF5IEFQSXMKLQotMjAxMC0wOS0yMSAxMjo0ODozNCArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiB1c2UgdGhlIG5ldyB4b3ZlcmxheSBBUElzCi0JICBBbHNvIGJ1bXBlZCAtYmFzZSByZXF1aXJlbWVudHMuCi0KLTIwMTAtMDktMjEgMTI6MzE6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IFVzZSAtREdTVF9ESVNBQkxFX0RFUFJFQ0FURUQgYWdhaW4gZm9yIEdJVCB2ZXJzaW9ucwotCi0yMDEwLTA5LTIxIDExOjUyOjIyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IEZpeCBkZWJ1ZyBzdGF0ZW1lbnQKLQotMjAxMC0wOS0yMCAyMzoxNzozNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFBhcnNlIHV1aWQgYXRvbXMgaW4gcHVzaCBtb2RlCi0JICBQYXJzZXMgdXVpZCBhdG9tcyBpbiBwdXNoIG1vZGUgd2hlbiB0aGV5IGFyZSBmb3VuZCwgdGhleSBtaWdodAotCSAgY29udGFpbiB4bXAgdGFncy4KLQkgIEFsc28gZG9lcyBhIG1pbm9yIHJlZmFjdG9yaW5nIHRvIHB1dCB0aGUgZ2xvYmFsIHRhZ3MgcG9zdGluZwotCSAgaW50byBhIHNpbmdsZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHJlcGVhdGluZyBpdCBpbiAzIGRpZmZlcmVudAotCSAgcGxhY2VzLgotCSAgRml4ZXMgIzYyOTgzOQotCi0yMDEwLTA5LTE2IDA4OjA0OjAyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRGVsYXkgdGFncyBwb3N0aW5nIGEgbGl0dGxlCi0JICBEZWxheSB0YWdzIHBvc3RpbmcgdW50aWwgd2UndmUgcGFyc2VkIGFsbCB0aGUgaGVhZGVycyBzbwotCSAgdGhhdCB0aGUgbmF0aXZlIGFuZCB4bXAgdGFncyBnZXQgbWVyZ2VkIGJlZm9yZSBwb3N0aW5nCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5ODM5Ci0KLTIwMTAtMDktMTUgMjI6MTM6NDMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogUGFyc2UgeG1wIHBhY2tldCBpbiB1dWlkIGF0b20KLQkgIHhtcCBwYWNrZXQgaXMgcGxhY2VkIGludG8gYSB0b3AtbGV2ZWwgdXVpZCBhdG9tIGZvcgotCSAgaXNvbS9tcDQgdmFyaWFudHMuCi0JICBUaGlzIHBhdGNoIG1ha2VzIHF0ZGVtdXggcGFyc2UgYWxsIHRvcC1sZXZlbCBhdG9tcwotCSAgaW4gcHVsbC1tb2RlIGJlZm9yZSBzdGFydGluZyB0byBwdXNoIGRhdGEsIG1ha2luZwotCSAgaXQgYWJsZSB0byBmaW5kIHRob3NlIHRhZ3MuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5ODM5Ci0KLTIwMTAtMDktMTcgMTE6MDc6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JICBydHBzdGF0czogcHJpbnRmIGZvcm1hdCBmaXhlcwotCi0yMDEwLTA5LTE3IDExOjA3OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JICBydHBwYXk6IHNvbWUgcHJpbnRmIGZvcm1hdCBmaXhlcwotCi0yMDEwLTA5LTE1IDE4OjIxOjExICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggbG9naWMgd2hlbiBwdXNoaW5nIEVPUy4KLQkgIERvbid0IGNoZWNrIGZvciByZXR1cm4gdmFsdWVzIHdoZW4gcHVzaGluZyBFT1MuIFN0aWxsIHBvc3QgYW4gZXJyb3IgaWYgRU9TIGlzCi0JICByZWFjaGVkIGFuZCBubyBzdHJlYW1zIGhhdmUgYmVlbiBmb3VuZC4KLQotMjAxMC0wOS0xNSAxNzowMjo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIGRvY3M6IGFkZCBndGstZG9jIGNodW5rcyB3aXRoIFNpbmNlOiBtYXJrZXJzIGZvciBuZXcgdjRsMnNyYyBwcm9wZXJ0aWVzCi0KLTIwMTAtMDktMTUgMTg6NDM6NTAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmM6Ci0JICBjYW1jdHJsOiBhZGQgbGljZW5zZSBoZWFkZXIgdG8gZGVtbwotCi0yMDEwLTA5LTE0IDE3OjQxOjI4ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkb24ndCBzZW5kIEVPUyB0d2ljZSBvbiB0aGUgc2FtZSBwYWQuCi0KLTIwMTAtMDktMTQgMTA6MDc6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgcHVsc2VzaW5rOiBtb3ZlIHRoZSBzaGFyZWQgbWFpbmxvb3AgZnJvbSBjbGFzcyB0byBzdGF0aWMgdmFyCi0JICBKdXN0IGhhdmUgb25lIHN0YXRpYyB2YXIgZm9yIHRoZSBzaGFyZWQgbWFpbmxvb3AgaW5zdGVhZCBvZiBvbmUgY2xhc3MgdmFyaWFibGUKLQkgIGFuZCBjb3BpZXMgaW4gdGhlIGluc3RhbmNlLgotCi0yMDEwLTA5LTEzIDE3OjMxOjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXk6IGNsZWFudXBzIGZvciBEUkkgbWFya2VycwotCSAgUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgRFJJIG1hcmtlcnMuCi0JICBkbyBzb21lIGNsZWFudXBzCi0KLTIwMTAtMDktMTAgMTE6MzU6NTMgLTA0MDAgIEFtZXJpY2FuIER5bmFtaWNzIDxHU3RyZWFtZXItQnVnc0B0eWNvc3AuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIGdzdHJ0cGpwZWdwYXk6IEFkZGVkIERlZmluZSBSZXN0YXJ0IEludGVydmFsIChEUkkpIE1hcmtlcgotCSAgQWRkZWQgYWJpbGl0eSB0byBkZXRlY3QgYW5kIHJlc3BvbmQgdG8gYSBKUEVHLWRlZmluZWQgRFJJIG1hcmtlcgotCi0yMDEwLTA2LTE5IDE5OjIwOjE4IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIGdzdHJ0cHNlc3Npb246IFNwbGl0IGdldHRpbmcgdGhlIGNhcHMgaW50byBpdHMgb3duIGZ1bmN0aW9uCi0KLTIwMTAtMDktMTMgMTY6MDM6NTAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBzbWFsbCBjbGVhbnVwLgotCi0yMDEwLTA5LTEzIDE2OjI0OjI2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkgIHB1bHNlc2luazogcmV3b3JrIGNvbnRleHQgc2hhcmluZwotCSAgV2UgYWxzbyBuZWVkIHRvIHNoYXJlIHRoZSBtYWluLWxvb3AgdGhyZWFkcyBhcyB0aGlzIG93bnMgdGhlIGNvbnRleHQuIFRodXMgaGF2ZQotCSAgYSBjbGFzcyB3aWRlIG1haW4tbG9vcCB0aHJlYWQuIEZyb20gdGhpcyB3ZSBjcmVhdGUgYSBjb250ZXh0IHBlciBjbGllbnQtbmFtZS4KLQkgIEluc3RlYWQgb2YgYWx3YXlzIGxvb2tpbmcgdXAgdGhlIGNvbnRleHQsIHdlIGtlZXAgdGhpcyB3aXRoIHRoZSBpbnN0YW5jZS4gVGhlCi0JICByZXZlcnNlIG1hcHBpbmcgaXMgb25seSBuZWVkZWQgaW4gcHVsc2Ugc2luZ2FsIGhhbmRsZXJzLiBUaGlzIHNhdmVzIGEgbG90IG9mCi0JICBsb2NraW5nLiBBbHNvIG9uZSBzaWduYWwgaGFuZGxlciBiZWNvbWVzIHNpbXBsZXIgYXMgdGhlciBlaXMgb25seSBvbmUgbWFpbmxvb3AKLQkgIHRvIG5vdGlmeS4KLQkgIE5vdyB2YWxnaW5kIGhhcHB5IC0gbm8gbGVha3MsIG5vIGJhZCByZWFkcy93cml0ZXMuCi0JICBUaGlzIHJldmVydHMgbWFqb3IgcGFydHMgb2YgY29tbWl0IDY5YTM5N2MzMmY0YmFmMDdhN2IyOTM3YzYxMGY5ZThmMzgzZTlhZTkuCi0JICBGaXhlcyAjNjI4OTk2Ci0KLTIwMTAtMDktMTMgMTU6NDQ6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JICBydHBzZXNzaW9uOiBTbWFsbCBjbGVhbnVwcwotCSAgTWFrZSB0aGUgcHJvcGVydHkgZGVzY3JpcHRpb24gcHJldHRpZXIuCi0JICBBY3R1YWxseSBtdWx0aXBsZSB0aGUgYmFuZHdpZHRoIHdpdGggdGhlIGZyYWN0aW9uLgotCi0yMDEwLTA2LTAxIDIxOjM1OjQwIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgcnRwc2Vzc2lvbjogQ2FsY3VsYXRlIFJUQ1AgYmFuZHdpZHRoIGFzIGEgZnJhY3Rpb24gb2YgdGhlIFJUUCBiYW5kd2lkdGgKLQkgIENhbGN1bGF0ZSB0aGUgUlRDUCBiYW5kd2lkdGggdG8gYmUgYSBmcmFjdGlvbiBvZiB0aGUgUlRQIGJhbmR3aWR0aCBpZiBpdCBpcwotCSAgc3BlY2lmaWVkIGFzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLgotCi0yMDEwLTA5LTEzIDE1OjI5OjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBzZXNzaW9uOiBpbXByb3ZlIGJhbmR3aWR0aCByZWNhbGN1bGF0aW9uCi0JICBBbHNvIHJlY2FsY3VsYXRlIGJhbmR3aWR0aCB3aGVuIG9uZSBvZiB0aGUgc291cmNlIGJhbmR3aWR0aHMgY2hhbmdlZC4KLQkgIFVzZSB0aGUgbmV3bHkgY2FsY3VsYXRlZCBiYW5kd2lkdGguCi0KLTIwMTAtMDYtMDEgMjE6MTc6MjYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogQWRkIHRoZSBvcHRpb24gdG8gYXV0by1kaXNjb3ZlciB0aGUgUlRQIGJhbmR3aWR0aAotCi0yMDEwLTA5LTEzIDE0OjM4OjExICswMjAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogc2V0IHVzZS1waXBlbGluZS1jbG9jayBvbiBjb3JyZWN0IEdPYmplY3QKLQotMjAxMC0wNi0wMiAxNzo1MToxMiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBJbml0aWFsaXNlIHRoZSBhdmVyYWdlIHNjYWxlZCBieSAxNgotCi0yMDEwLTA5LTEzIDEyOjQxOjExICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBhZGQgcnVubmluZ190aW1lIGFyZ3VtZW50IGRvY3MKLQotMjAxMC0wNi0yMyAxNjoxMzowMSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgcnRwc3RhdHM6IFJlY3RpZnkgZGVzY3JpcHRpb24gb2YgY3VycmVudF90aW1lIGluIFJUUEFycml2YWxTdGF0cwotCSAgSXQgaXMgdGhlIGN1cnJlbnQgdGltZSwgaXQgaXMgdW5yZWxhdGVkIHRvIHdoZW4gdGhlIHBhY2tldCB3YXMgYWN0dWFsbHkgcmVjZWl2ZWQuCi0KLTIwMTAtMDktMTMgMTI6MzE6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGNvbXB1dGUgdGhlIGF2ZXJhZ2UgY29ycmVjdGx5IHNjYWxlZAotCi0yMDEwLTA2LTAxIDIwOjMxOjE4IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IENvdW50IHNlbnQgUlRDUCBwYWNrZXRzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGZpbmlzaGVkCi0JICBJZiB0aGV5IGFyZSBjb3VudGVkIGJlZm9yZSBjYWxsaW5nIGdzdF9ydGNwX2J1ZmZlcl9lbmQoKSwgdGhlbiB0aGUKLQkgIHNpemUgaXMgd2F5IHRvbyBiaWcuCi0KLTIwMTAtMDYtMDEgMTk6NTE6MzQgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgZ3N0cnRwc2Vzc2lvbjogRG9uJ3QgdW5yZWYgIHBhZHMgaW4gZmluYWxpemUKLQkgIFRoZSBnc3RydHBzZXNzaW9uIG9iamVjdCBpcyBub3QgaG9sZGluZyBhbnkgcmVmZXJlbmNlIHRvIHRoZW0gZGlyZWN0bHkKLQotMjAxMC0wOS0xMiAwMDowOTowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL1BPVEZJTEVTLmluOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3JvLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMgZm9yIG5ldyBzb3VwaHR0cHNyYyBtZXNzYWdlcwotCi0yMDEwLTA5LTEyIDAwOjA4OjA1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXA6IGhvb2sgdXAgaTE4biBiaXRzIGZvciBwbHVnaW4KLQkgIENhbGwgYmluZHRleHRkb21haW4oKSBldGMuCi0KLTIwMTAtMDktMTIgMDA6MDQ6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cDogZml4IGVycm9yIG1lc3NhZ2VzCi0JICBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgdHJhbnNsYXRlZC4gVVJJcyBhbmQgZmlsZW5hbWVzIHNob3VsZCBub3QKLQkgIGJlIHBhcnQgb2YgdGhlIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIHRoYXQncyBzaG93biB0byB0aGUgdXNlci4KLQkgIHNvdXBfbWVzc2FnZS0+cmVhc29uX3BocmFzZSBpcyBub3QgdHJhbnNsYXRlZCBhbmQgbm90IHN1aXRhYmxlIGFzCi0JICBlcnJvciBtZXNzYWdlIGZvciB1c2VycyAoc2VlIGxpYnNvdXAgZG9jdW1lbnRhdGlvbikuIEFsc28gZml4IHVwCi0JICBlcnJvciBjb2RlcyBhIGJpdCwgYXMgZmFyIGFzIHBvc3NpYmxlIHdpdGggdGhlIGV4aXN0aW5nIGNvZGVzLgotCi0yMDEwLTA5LTEwIDA5OjQzOjI0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZG9uJ3QgcG9zdCBhbiBlcnJvciBtZXNzYWdlIGlmIGJ1ZmZlciBhbGxvYyBmYWlscyB3aXRoIE5PVF9MSU5LRUQgZmxvdwotCSAgVGhpcyBpcyBub3QgZmF0YWwsIGxldCB1cHN0cmVhbSBoYW5kbGUgaXQuCi0KLTIwMTAtMDktMTAgMTg6MDY6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGRvbid0IGNsZWFyIHNkcCB3aGVuIHNldCBhcyB1cmkKLQkgIHdoZW4gd2Ugc2V0IHRoZSBTRFAgd2l0aCBhbiB1cmksIGRvbid0IGNsZWFyIGl0IHdoZW4gd2UgZ28gdG8gUkVBRFkuCi0KLTIwMTAtMDktMTAgMTg6MDE6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHVzZSBzZHAgdXJpIHBhcnNlIG1ldGhvZAotCSAgVXNlIHRoZSBzZHAgcGFyc2UgbWV0aG9kIHRoYXQgZG9lcyBwcm9wZXIgdXJpIGVzY2FwaW5nLgotCi0yMDEwLTA5LTEwIDE2OjU5OjEwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy92NGwyL2NhbWN0cmwuYzoKLQkgIGV4YW1wbGU6IGFkZCB2NGwyIGV4YW1wbGUsIGRlbW9uc3RyYXRpbmcgdGhlIHVzZSBvZiBnc3QgY29udHJvbGxlcgotCi0yMDEwLTA5LTEwIDE2OjU1OjI1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IGRvbid0IHNraXAgY2FsY3VsYXRpbmcgdGhlIGR1cmF0aW9uCi0KLTIwMTAtMDYtMjIgMTU6NDg6MDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JICB2NGwyc3JjOiBhZGQgY29udHJvbGFibGUgY29sb3JiYWxhbmNlIHBhcmFtZXRlcnMKLQkgIEV4cG9zZSBjb2xvcmJhbGFuY2UgY29udHJvbHMgYXMgb2JqZWN0IHByb3BlcnRpZXMgKGxpa2Ugd2UgZG8gb24geHZpbWFnZXNpbmspLgotCSAgTWFrZSB0aGVtIGNvbnRyb2xhYmxlLgotCi0yMDEwLTA5LTEwIDEzOjI1OjM5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSAgcnRwbXBhcm9idXN0ZGVwYXk6IGZpeCBzb21lIG1pcy1pbXBsZW1lbnRhdGlvbgotCSAgQWxzbyBhZGQgc29tZSBkZWJ1Zy4KLQotMjAxMC0wOS0xMCAxMzoyNDowMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkgIHJ0cG1wYXJvYnVzdGRlcGF5OiBwcm9wZXJseSBpbnNlcnQgZHVtbXkgYnVmZmVycwotCi0yMDEwLTA5LTEwIDExOjU1OjI2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhZGQgcnRzcC1zZHAgcHJvdG9jb2wgc3VwcG9ydAotCSAgQWxsb3cgc2V0dGluZyBhbiBTRFAgd2l0aCB0aGUgcnRzcC1zZHA6Ly8gdXJsLgotCSAgQmFzZWQgb24gcGF0Y2ggZnJvbSBNYXJjbyBCYWxsZXNpby4KLQkgIFNlZSAjNjI4MjE0Ci0KLTIwMTAtMDktMTAgMTE6MzU6NTggKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JICBhbHBoYWNvbG9yOiBtYWtlIHBhc3N0aHJvdWdoIHdvcmsuCi0KLTIwMTAtMDktMDkgMjE6NDM6NDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkgIG1wNGFkZXBheTogc21hbGwgbG9nZ2luZyBjbGVhbnVwIGFuZCBhZGRpdGlvbiB0byBkZWJ1ZyBjb25maWcgcGFyc2luZwotCi0yMDEwLTA5LTA5IDIxOjQyOjQ2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgIGFhc2luazogZml4IGNvbnRleHQgaW5pdGlhbGlzYXRpb24gYW5kIGZyZWVpbmcgdG8gbm90IGxlYWsKLQotMjAxMC0wOS0wOSAyMTo0MDo1MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICB0ZXN0czogYWxsb3cgcnVubmluZyBzdGF0ZSB0ZXN0cyBmb3IgYWxsIGVsZW1lbnRzCi0JICBOb3cgb25lIGNhbiB1c2UgR1NUX05PX1NUQVRFX0lHTk9SRV9FTEVNRU5UUz0xIG1ha2UgZ2VuZXJpYy9zdGF0ZXMuY2hlY2sKLQkgIHRvIHRyeSBlbGVtZW50cyB0aGF0IHdvdWxkIG5vcm1hbHkgYmUgc2tpcHBlZC4KLQotMjAxMC0wOS0wOSAxODo0Nzo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkgIHRlc3RzOiBmaXggcnRwanBlZ3BheSB0ZXN0Ci0JICBNYWtlIHRoZSBkYXRhIHdlIHNlbmQgdG8gdGhlIGpwZWcgcGF5bG9hZGVyIGJlIGEgdmFsaWQganBlZyBmaWxlIGJlY2F1c2UgdGhlCi0JICBwYXlsb2FkZXIgbm93IGV4cGVjdHMgdGhpcy4KLQotMjAxMC0wOS0wOSAxODo0NzoxMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiBpbXByb3ZlIGRlYnVnZ2luZwotCi0yMDEwLTA5LTA5IDE2OjMxOjU2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jOgotCSAgcnRwbXBhcm9idXN0ZGVwYXk6IHVzZSB2YWxpZCBiaXRyYXRlIGZvciBkdW1teSBmcmFtZQotCi0yMDEwLTA5LTA4IDE3OjA3OjUzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIGlkM3YybXV4OiBBZGRzIG1hcHBpbmcgZm9yIGFsYnVtIGFydGlzdAotCSAgTWFwcyBHU1RfVEFHX0FMQlVNX0FSVElTVCB0byBUUEUyIGluIGlkM3YybXV4Ci0KLTIwMTAtMDktMDggMTg6MzU6MDggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IFJlcXVpcmUgb3JjIDAuNC44Ci0JICBUaGUgZGVpbnRlcmxhY2UgcGx1Z2luIGFwcGFyZW50bHkgZmFpbHMgdG8gY29tcGlsZSB3aXRoIG9sZGVyIHZlcnNpb25zLgotCi0yMDEwLTA5LTA4IDE3OjUwOjExICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBRb1MgaGFuZGxpbmcgbG9naWMgb25seSBhcHBsaWVzIHRvIGZvcndhcmQgcGxheWJhY2sKLQkgIEZpeGVzICM2Mjg4OTQuCi0KLTIwMTAtMDktMDggMTc6NDM6NDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiByZW1vdmUgdW51c2VkIGNvZGUKLQotMjAxMC0wOS0wOCAxNDozNjo0OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGZpeHVwIGxhc3QgY29tbWl0Ci0JICBXZSBuZWVkIHRvIHByZXZlbnQgdGhlIGV2ZW50dWFsIGxlYWsgYmV0dGVyLgotCi0yMDEwLTA5LTA4IDE0OjE2OjU4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogY29kZSBjbGVhbnVwcwotCSAgVXNlIGdfc2xpc3RfcHJlcGVuZCBhcyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBvcmRlci4gQ2hlY2sgZm9yIGxpc3QgPT0gTlVMTAotCSAgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhlIGxpc3QgdG8gc2VlIGlmIGl0IGlzIGVtcHR5LiBNb3ZlIGN0eCBhbGxvY2F0aW9uIGRvd24KLQkgIHRvIHByZXZlbnQgbGVhayBpbiBjYXNlIG9mIGZhaWx1cmUuCi0KLTIwMTAtMDktMDggMDc6MTM6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXk6IEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQkgIEZpeGVzIGJ1ZyAjNjI5MDE4LgotCi0yMDEwLTA5LTA3IDE5OjAyOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHNpbXBsaWZ5IGNsb2NrIHByb3ZpZGUgY29kZQotCSAgRG9uJ3QgbGVhayB0aGUgcHVsc2VzaW5rIGVsZW1lbnQgYnkgaGF2aW5nIHRoZSBjbG9jayBrZWVwIGEgcmVmIHRvIHRoZSBzaW5rLgotCSAgQ3JlYXRlIHRoZSBjbG9jayBvbmx5IG9uY2UgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCB1c2UgdGhlIGJhc2VhdWRpb3NpbmsgY2xvY2sKLQkgIGNsZWFudXAgY29kZS4KLQotMjAxMC0wOS0wNyAxNzo0OTowNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IG1vdmUgdGhlIGNvbnRleHQgdGFibGUgaW5pdCB0byBfZ2V0X3R5cGUgcGhhc2UKLQkgIFRoaXMgc2VlbXMgdG8gZml4IHRoZSBpbnZhbGlkIHJlYWRzIG9uIGNvbnRleHQgc2h1dGRvd24gYmV0dGVyLCBhbHRvdWdoCi0JICBJIGNhbid0IHJlYWxseSBleHBsYWluLgotCi0yMDEwLTA5LTA3IDE3OjA2OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1c2Ugb2xkZXIgZ19hcnJheV9mcmVlCi0JICBnX2FycmF5X3VucmVmKCkgaXMgb25seSBzaW5jZSAyLjIyCi0KLTIwMTAtMDktMDcgMTY6NDk6MTYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGF2b2lkIGludmFsaWQgYWRhcHRlciBmbHVzaCBvbiBRb1MKLQkgIEZpcnN0IHN0b3JlIHRoZSBhdmFpbGFibGUgZGF0YSBpbiB0aGUgYWRhcHRlciBpbiB0aGUgcmVtX2ltZ19sZW4gaW5zdGFuY2UgZmllbGQKLQkgIGJlZm9yZSB0cnlpbmcgdG8gZmx1c2ggdGhlIGFkYXB0ZXIgd2l0aCB0aGF0IHZhbHVlIG9uIFFvUy4KLQotMjAxMC0wOS0wNyAxNjo0MDowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiBkbyBzb21lIG1vcmUgc2FuaXRpdHkgY2hlY2tzCi0JICBQcm90ZWN0IHNvbWUgbW9yZSBhZ2FpbnN0IGludmFsaWQgaW5wdXQuCi0KLTIwMTAtMDktMDcgMTU6MjA6MTIgKzAyMDAgIEFtZXJpY2FuIER5bmFtaWNzIDxHU3RyZWFtZXItQnVncyBhdCB0eWNvc3AuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIGpwZWdwYXk6IGhhbmRsZSBjb3JydXB0ZWQganBlZyBiZXR0ZXIKLQkgIFByb3RlY3QgYWdhaW5zdCBjb3JydXB0ZWQganBlZyBpbnB1dC4KLQotMjAxMC0wOS0wNyAxMzo1NTowNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYzoKLQkgIHJ2YXdkZXBheTogY2xlYW51cCB1bnVzZWQgZmllbGRzCi0KLTIwMTAtMDktMDcgMTM6NTE6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JICB2cmF3ZGVwYXk6IGhhbmRsZSBpbnZhbGlkIHBheWxvYWQgYmV0dGVyCi0JICBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVhZCBtb3JlIGRhdGEgdGhhbiBhdmFpbGFibGUgaW4gdGhlIGlucHV0IGJ1ZmZlci4KLQkgIENsaXAgdGhlIGlucHV0IGRhdGEgaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4KLQotMjAxMC0wOC0xNiAxNTozNTo1MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5oOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5oOgotCSAgcHVsc2U6IGFsbG93IHNldHRpbmcgc3RyZWFtIHByb3BlcnRpZXMKLQkgIEFkZCBhICJwcm9wZXJ0aWVzIiBwcm9wZXJ0eSB0byB0aGUgZWxlbWVudHMgdG8gYWxsb3cgc2V0dGluZyBleHRyYSBzdHJlYW0KLQkgIHByb3BlcnRpZXMuCi0JICBGaXhlcyAjNTM3NTQ0Ci0KLTIwMTAtMDktMDcgMTI6MDg6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmMy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkgIGRvY3M6IHJlbW92ZSBpbnRyb3NwZWN0aW9uIGluZm8gZm9yIGdka3BpeGJ1ZjMgcGx1Z2luIGFuZCB1cGRhdGUgdmVyc2lvbiBmb3Igb3RoZXJzCi0JICBUaGUgdmVyc2lvbnMgZ290IGFjY2lkZW50YWxseSByZXZlcnRlZCB0byBhIHByZS1yZWxlYXNlIHZlcnNpb24sIGZpeCB0aGF0LgotCi0yMDEwLTA5LTA3IDExOjQyOjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGMyZTEwYmYgdG8gYWEwZDFkMAotCi0yMDEwLTA5LTA3IDA5OjIwOjAzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSAgY21tbGRlYzogZml4IGZsb3cgcmV0dXJuIGhhbmRsaW5nCi0JICBGaXggYnVnZ3kgR1NUX0ZMT1dfSVNfRkFUQUwgc3Vic3RpdHV0aW9uLCBhbmQgJ21ha2UgY2hlY2snOgotCSAgLSAgaWYgKCFHU1RfRkxPV19JU19GQVRBTCAoZGVjLT5mbG93X3JldHVybikgJiYgIWRlYy0+c2VudF9yb290KSB7Ci0JICArICBpZiAoZGVjLT5mbG93X3JldHVybiAhPSBHU1RfRkxPV19PSyAmJiAhZGVjLT5zZW50X3Jvb3QpIHsKLQotMjAxMC0wOS0wNyAwMDoyNzowNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGRvbid0IGZyZWUgdGhlIGNvbnRleHQgbXVsdGlwbGUgdGltZXMKLQkgIEFwcGFyZW50bHkgdGhlIGNsb3NlIGZ1bmN0aW9uIG9mIHRoZSByaW5nLWJ1ZmZlciBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgotCi0yMDEwLTA4LTEyIDEyOjMzOjA2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JICBydHBtcDRhZGVwYXk6IGdyYWIgdGhlIHNhbXBsaW5nIGFydGUgYW5kIHB1dCBpbnRvIGNhcHMKLQkgIFRoaXMgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gbXV4IHRoZSByZWNlaXZlZCBhdWRpbyBpbnRvIG1wNCAoaW4gdGhlIGNhc2Ugb2YKLQkgIGFhYykuIEZpeGVzICM2MjU4MjUuCi0KLTIwMTAtMDktMDYgMTQ6NDA6MDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmM6Ci0JICBydHA6IG1hcmsgY29uc3RhbnQgdGFibGVzIGFzIGNvbnN0Ci0KLTIwMTAtMDgtMTggMTQ6NDA6NDggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuaDoKLQkgIHJ0cGFtcnBheTogcHJvcGVybHkgc3VwcG9ydCBwZXJmZWN0LXJ0cHRpbWUKLQotMjAxMC0wOC0xOCAxMTo0MjozMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JICBydHBhbXJwYXk6IHByb3BlciBkdXJhdGlvbiBmb3IgbXVsdGlwbGUgZnJhbWUgcGF5bG9hZAotCi0yMDEwLTA4LTE4IDExOjQyOjA3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkgIHJ0cGFtcihkZSlwYXk6IHN1cHBvcnQgQU1SLVdCIFNJRCBmcmFtZQotCi0yMDEwLTA4LTE4IDExOjM5OjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuaDoKLQkgIHJ0cGc3MjlwYXk6IHByb3Blcmx5IHN1cHBvcnQgcGVyZmVjdC1ydHB0aW1lCi0KLTIwMTAtMDgtMTYgMTY6MDg6MDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBpbXByb3ZlIGZyYW1lcmF0ZSBkZXRlcm1pbmluZwotCSAgQ29sbGVjdCBhIGxpbWl0ZWQgbnVtYmVyIG9mIHN0YXJ0aW5nIHNhbXBsZSBkdXJhdGlvbnMgYW5kIHVzZSB0aGUgbWVkaWFuIG9mCi0JICB0aG9zZSB0byBkZXRlcm1pbmUgY2FwcyBmcmFtZXJhdGUuCi0KLTIwMTAtMDgtMTcgMTI6MDg6MTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGF0dGVtcHQgbW9yZSByZXN5bmMgdXBvbiAoY2x1c3RlcikgcGFyc2UgZXJyb3IKLQkgIFRoYXQgaXMsIGlmIHBhcnNlIGVycm9yIG9jY3VycyBpbiBzdGF0ZSByZXF1aXJpbmcgdG8gbW92ZSB0byBuZXh0IGNsdXN0ZXIsCi0JICBhbmQgZG9pbmcgc28gdG8gdGhlIGV4cGVjdGVkIG5leHQgcG9zaXRpb24gb2YgY2x1c3RlciBmYWlscywgdGhlbiBzY2FuIGZvciBhCi0JICBuZXh0IGNsdXN0ZXIgZnJvbSBwcmVzZW50IHBvc2l0aW9uIGFuZCByZXN1bWUgZnJvbSB0aGVyZS4KLQkgIEZpeGVzICM2MjA3OTAuCi0KLTIwMTAtMDgtMTYgMTY6MDU6NDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG5vdCBzbyBmYXRhbCBlcnJvciBoYW5kbGluZwotCSAgSWYgc29tZSBiaXRzIG91dCBvZiBwbGFjZSBpbiBibG9jayhncm91cCkgcGFyc2luZywgZm9yZWdvIGFuZCBtb3ZlIHRvIG5leHQuCi0JICBBbHNvIHNraXAgbGFyZ2UgYmxvY2tzIGluIHB1bGwgbW9kZSwgYnV0IG5lZWQgdG8gZ2l2ZSB1cCBpbiBwdXNoIG1vZGUuCi0JICBGaXhlcyAjNjI2NDYzLgotCSAgSW1wcm92ZXMgIzYyMDc5MC4KLQotMjAxMC0wNy0yNiAxNTo1MTo0OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBhZGRpdGlvbmFsIHBhcnNlIHJlY292ZXJ5Ci0JICBJbiBwYXJ0aWN1bGFyLCB1cG9uIHBhcnNlIGZhaWx1cmUgaW4gb25lIGNsdXN0ZXIsIHdlIG1heSBmb3JlZ28gcmVtYWluaW5nCi0JICBjb250ZW50IGFuZCB0cnkgcmVzdW1pbmcgZnJvbSBuZXh0IGNsdXN0ZXIgb253YXJkcy4KLQkgIEZpeGVzICM2MjA3OTAuCi0KLTIwMTAtMDgtMjYgMDI6NTQ6NTUgLTA0MDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkgIGR0bWZzcmM6IE1ha2UgdGhlIGR0bWZzcmMgYWNjZXB0IGV2ZW50cyBzZW50IHdpdGggZ3N0X2VsZW1lbnRfc2VuZF9ldmVudAotCSAgVGhlIGRvYyBzYXlzIHRvIHVzZSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IG9uIHRoZSBwaXBlbGluZSwgYnV0IGlmCi0JICB3ZSBhcmUgdG8gY2FsbCBpdCBvbiB0aGUgZWxlbWVudCBpdHNlbGYsIGl0J3MgYSBub29wLiBUaGlzIHNob3VsZCBtYWtlIGl0Ci0JICBoYW5kbGUgdGhlIGV2ZW50IHByb3Blcmx5IGJlZm9yZSBkZWxlZ2F0aW5nIGl0IHRvIGJhc2VzcmMuCi0KLTIwMTAtMDktMDYgMTI6MjI6MTEgKzAyMDAgIEFtZXJpY2FuIER5bmFtaWNzIDxHU3RyZWFtZXItQnVncyBhdCB0eWNvc3AuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBBZGQgcHJvcGVydHkgdG8gY29uZmlndXJlIHVkcHNyYyBidWZmZXIgc2l6ZQotCSAgQWRkIGEgbmV3IHVkcC1idWZmZXItc2l6ZSBwcm9wZXJ0eSB0byBjb25maWd1cmUgdGhlIGJ1ZmZlci1zaXplIG9uIHRoZSB1ZHBzcmMKLQkgIGVsZW1lbnRzLgotCSAgRml4ZXMgIzYyODA1OAotCi0yMDEwLTA4LTI3IDE3OjU4OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgcnRwYmluOiBhZGQgbnRwLXN5bmMgcHJvcGVydHkKLQkgIEFkZCBhbiBudHAtc3luYyBwcm9wZXJ0eSB0aGF0IHdpbGwgc3luYyB0aGUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgc2VydmVyCi0JICBOVFAgdGltZS4gVGhpcyByZXF1aXJlcyBzeW5jaHJvbml6ZWQgTlRQIHRpbWVzIGJldHdlZW4gdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXJzLAotCSAgbGlrZSB3aXRoIG50cGQuCi0JICBCYXNlZCBvbiBwYXRjaCBmcm9tIFRoaWpzIFZlcm1laXIuCi0JICBGaXhlcyAjNjI3Nzk2Ci0KLTIwMTAtMDgtMjcgMTI6MTQ6MjUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiByZW5hbWUgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpb24KLQotMjAxMC0wOC0yNyAxMTowNzozNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHJlbmFtZSBzb21lIHZhcmlhYmxlcyBmb3IgbGVzcyBjb25mdXNpb24KLQotMjAxMC0wOC0yNyAxMDo0MTowMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IG1vdmUgY29tbWVudCB3aGVyZSBpdCBiZWxvbmdzCi0KLTIwMTAtMDgtMjYgMTY6MDA6MzggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHNlc3Npb246IG1pbm9yIGNsZWFudXBzCi0JICBNYWtlIGNsb2NrIHNuYXBzaG90cyBtb3JlIGFjY3VyYXRlIGJ5IG9ubHkgc2FtcGxpbmcgdGhlIHNhbWUgY2xvY2sgb25jZS4KLQotMjAxMC0wOC0yNiAxMDo1ODoyNiArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cGJpbjogYWRkIHVzZS1waXBlbGluZS1jbG9jayBwcm9wZXJ0eQotCSAgV2l0aCB0aGlzIHByb3BlcnR5IFJUQ1AgU1IgTlRQIHRpbWVzIGNhbiBiZSBiYXNlZAotCSAgb24gdGhlIHN5c3RlbSBjbG9jayAobWF5YmUgc3luY2VkIHdpdGggbnRwZCkgb3IgdGhlCi0JICBjdXJyZW50IHBpcGVsaW5lIGNsb2NrLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNzc5NgotCi0yMDEwLTA4LTI1IDA5OjU4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwZXh0LmM6Ci0JICBydHNwZXh0OiBzdG9wIGNvbmZpZ3VyYXRpb24gb24gZmlyc3QgZmFpbHVyZQotCSAgU3RvcCB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHN0cmVhbSBhcyBzb29uIGFzIHNvbWUgb2YgdGhlIGV4dGVuc2lvbnMgcmV0dXJuCi0JICBGQUxTRS4KLQkgIEZpeGVzICM1ODEyOTQKLQotMjAxMC0wOC0yMCAxNTozNToyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBtdWx0aWZkc2luazogdXNlIHJlZmNvdW50IHRvIGNvdW50IGhvc3QvcG9ydCBkdXBsaWNhdGVzCi0JICBJbnN0ZWFkIG9mIGFkZGluZyBtdWx0aXBsZSBjbGllbnQgc3RydWN0dXJlcyBmb3IgdGhlIHNhbWUgaG9zdC9wb3J0IHBhaXIsIHVzZSBhCi0JICByZWZjb3VudC4KLQkgIEFkZCBhIHNlbmQtZHVwbGljYXRlcyBmZWF0dXJlIHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHNlbmRpbmcgbXVsdGlwbGUgY29waWVzCi0JICBvZiB0aGUgc2FtZSBwYWNrZXQgdG8gdGhlIHNhbWUgaG9zdCB3aGVuIGl0IHdhcyBhZGRlZCBtdWx0aXBsZSB0aW1lcy4gVGhlCi0JICBzZW5kLWR1cGxpY2F0ZXMgcHJvcGVydHkgaXMgYnkgZGVmYXVsdCBzZXQgdG8gVFJVRSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLQkgIGFsdGhvdWdoIGl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyBpcyBub3QgZGVzaXJlZCBiZWhhdmlvdXIuCi0KLTIwMTAtMDgtMTkgMTc6MDY6MjYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGltcGxlbWVudCBjdXN0b20gZXZlbnQgaGFuZGxlcgotCSAgRXh0ZW5kIHRoZSBfcHVzaF9ldmVudCgpIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGFsc28gc2VuZCBldmVudHMgdG8gdGhlIHVkcAotCSAgc291cmNlcyB3aGVuIGFza2VkLgotCSAgSW1wbGVtZW50IGEgY3VzdHVtIHNlbmRfZXZlbnQgZnVuY3Rpb24gdGhhdCBjb3JyZWN0bHkgZGlzcGF0Y2hlcyB0aGUgZG93bnN0cmVhbQotCSAgZXZlbnRzIGluIFRDUCBtb2RlLiBUaGlzIGZpeGVzIHNlbmRpbmcgRU9TIHRvIHJ0c3BzcmMgYW5kIGhhdmUgaXQgcHVzaCB0aGUgRU9TCi0JICBkb3duc3RyZWFtLgotCi0yMDEwLTA4LTE5IDExOjM3OjA0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiB1c2UgX2dldF9jYXBzX3JlZmZlZCgpIHdoZW4gd2UgY2FuCi0JICBVc2UgX2dldF9jYXBzX3JlZmZlZCgpCi0JICBBZGQgc29tZSBtb3JlIGRlYnVnIHdoZW4gb3BlbmluZyB0aGUgc2VydmVyIGNvbm5lY3Rpb24uCi0KLTIwMTAtMDgtMTYgMTE6Mjk6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5oOgotCSAganBlZ2RlcGF5OiBoYW5kbGUgRElTQ09OVCBhbmQgcmVzZXQgc3RhdGUKLQkgIFB1dCBhIERJU0NPTlQgZXZlbnQgb24gdGhlIG5leHQgb3V0cHV0IGJ1ZmZlciB3aGVuIHRoZSBpbnB1dCBidWZmZXIgaGFkIGEKLQkgIERJU0NPTlQuCi0JICBNYWtlIHN1cmUgd2UgY2xlYXIgb3VyIGFkYXB0ZXIgYW5kIHJlc2V0IG91ciBzdGF0ZSBiZWZvcmUgZ29pbmcgdG8gUEFVU0VELgotCSAgRnJlZSB0aGUgcXRhYmxlcy4KLQkgIEZpeGVzICM2MjY4NjkKLQotMjAxMC0wOC0xNiAxMToyNzo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5Lmg6Ci0JICBnNzI5cGF5OiBleHRlbmQgZnJvbSByaWdodCBwYXJlbnQKLQotMjAxMC0wOS0wNiAwOTo1NzoxMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGFkZCBzaW5jZSBkb2NzIGZvciBuZXcgcHJvcGVydHkuCi0KLTIwMTAtMDgtMzAgMTY6NDU6NDggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogdXNlIEdTVF9CT0lMRVJQTEFURSBtYWNybwotCi0yMDEwLTA4LTE2IDE3OjIzOjU4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVtaXhlcjogYWRkIGEgZXhhbXBsZSBzaG93aW5nIGhvdyB0byB1c2UgdGhlIGNoaWxkIHByb3BlcnRpZXMKLQkgIFNob3cgaG93IHRvIHBvc2l0aW9uIGFuZCBzZXQgdGhlIGFscGhvIG9mIHRoZSB2aWRlb3Mgb24gZ3N0LWxhdW5jaC4KLQotMjAxMC0wOC0xNiAxNToxOTozOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBtb3ZlIHRoZSBwcm9wZXJ0eS1zZXR0ZXIgdG8gdGhlIGdldHRlci4KLQotMjAxMC0wOC0xMSAxNTo0ODoxOCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtIG9ubHkgYWdncmVnYXRlIG1hZ25pdHVkZS9waGFzZSBpZiB1c2VyIGFza3MgZm9yIGl0Ci0KLTIwMTAtMDgtMTEgMTU6NDU6NTYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogaW1wcm92ZSBwZXJmb3JtYW5jZSB3aXRoIGxvY2FsIHZhcnMKLQkgIFVzZSAnaW5wdXQnIGluc3RlYWQgb2YgJ3NwZWN0cnVtLT5pbnB1dCcgd2hpY2ggd2FzIGludGVuZGUgYWxyZWFkeSAodmFyaWFibGUKLQkgIGV4aXN0cywgYnV0IG5vdCB1c2VkIGV2ZXJ5d2hlcmUpLiBBbHNvIHVzZSBhIGxvY2FsIHZlcnNpb24gb2YKLQkgICdzcGVjdHJ1bS0+aW5wdXRfcG9zJy4KLQotMjAxMC0wOC0xMSAxNTo0NDowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIHNwZWN0cnVtOiBjb2RlIGNsZWFudXAKLQkgIE1vcmUgY29tbWVudHMgYW5kIGxvZ2dpbmcuIEV4dHJhY3Qgb25lIGNvbXBsZXggY29uZGl0aW9uIHRvIGEgdmFyaWFibGUuIFJlb3JkZXIKLQkgIHNvbWUgY29kZSBmb3IgcmVhZGFiaWxpdHkuCi0KLTIwMTAtMDgtMTEgMTU6NDA6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogaW1wcm92ZSBwcm9wZXJ0eSBzZXR0ZXIKLQkgIGNvbnNpc3RlbnRseSBvbmx5IHVwZGF0ZSBpZiB0aGUgcHJvcGVydHkgYWN0dWFseSBjaGFuZ2VkIHRoZSB2YWx1ZS4gRG8gaXQKLQkgIHdpdGhvdXQgcmVhZGluZyB0aGUgZ3ZhbHVlIHR3aWNlLiBObyBuZWVkIHRvIHJlc2V0IHRoZSBzcGVjdHJ1bSBhbmFseXplciBmb3IKLQkgIHRocmVzaG9sZCBjaGFuZ2VzLgotCi0yMDEwLTA4LTExIDE1OjM4OjI0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgc3BlY3RydW06IGFkZCBoZWxwZXIgdG8gb25seSBmbHVzaCByaW5nYnVmZmVyIGRhdGEgd2l0aG91dCByZXNldHRpbmcgdGhlIGZmdAotCSAgUmVkdWNlcyBzb21lIGR1cGxpY2F0ZWQgY29kZSBhcyB3ZWxsLgotCi0yMDEwLTA4LTExIDEyOjQ1OjUzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmg6Ci0JICBzcGVjdHJ1bTogbW9yZSBjb21tZW50cwotCi0yMDEwLTA5LTA1IDIyOjIyOjQyIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogRG9jdW1lbnQgbWV0aG9kcyB3aXRoIGJhZCBxdWFsaXR5Ci0KLTIwMTAtMDktMDUgMjI6MTk6NTYgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYzoKLQkgIGRlaW50ZXJsYWNlOiBpbml0aWFsaXplIGFsbCBkZWludGVybGFjZSBjbGFzcyBtZW1iZXJzCi0JICBUaGlzIGZpeGVzIFVZVlkgZGVpbnRlcmxhY2luZy4KLQotMjAxMC0wOS0wNSAxODo1ODoxMyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkM2Q5YWNmIHRvIGMyZTEwYmYKLQotMjAxMC0wOS0wNSAxODo0NToyMSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JICB2aWRlb21peGVyOiBvcmNfaW5pdCgpIGRvZXNuJ3QgbmVlZCB0byBiZSBjYWxsZWQKLQkgIFRoZXJlJ3Mgbm8gbmVlZCB0byBjYWxsIG9yY19pbml0KCkgdW5sZXNzIHlvdSdyZSB1c2luZyB0aGUgT3JjCi0JICBBUEkgZGlyZWN0bHkuICBBbGwgY29kZSBjcmVhdGVkIGJ5IG9yY2MgaXMgZ3VhcmFudGVlZCB0byB3b3JrCi0JICB3aXRob3V0IGNhbGxpbmcgb3JjX2luaXQoKS4KLQotMjAxMC0wOS0wNSAxODo0MDo0OCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS5vcmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBncmVlZHlsIE9yYyBpbXBsZW1lbnRhdGlvbgotCSAgVG8gYWdyZWUgd2l0aCB0aGUgcHJldmlvdXMgQy9hc20gY29kZS4KLQotMjAxMC0wOS0wNSAyMjozMTozNCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmM6Ci0JICB2aWRlb21peGVyMjogRmFpbCB3aGVuIGNhcHMgYXJlIGluY29tcGF0aWJsZQotCSAgRG8gbm90IGZvcmdldCB0byByZXR1cm4gZmFsc2Ugd2hlbiBjYXBzIGFyZSBpbmNvbXBhdGlibGUuCi0KLTIwMTAtMDktMDUgMjA6NTY6NTIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSAgdmlkZW9taXhlcjogT25seSBpbml0IG9yYyBpZiBpdCBpcyBhdmFpbGFibGUKLQkgIFB1dCBzb21lIGlmZGVmIGFyb3VuZCBvcmNfaW5pdCB0byBwcmV2ZW50IGJ1aWxkIGVycm9ycwotCi0yMDEwLTA5LTA1IDEyOjE3OjA4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGVjNjAyMTcgdG8gZDNkOWFjZgotCi0yMDEwLTA5LTA0IDEyOjQ2OjMxIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuaDoKLQkgIGRlaW50ZXJsYWNlOiBVcGRhdGUgZGlzdGVkIE9yYyBmaWxlcwotCi0yMDA5LTA2LTI5IDExOjQzOjA3IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgdjRsMnNyYzogYWRkIGRlY2ltYXRlIHByb3BlcnR5Ci0KLTIwMTAtMDYtMDQgMTI6MDk6MjMgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZHYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuaDoKLQkgIGR2ZGVtdXg6IFBhcnNlIFNNUFRFIHRpbWUgY29kZXMKLQotMjAxMC0wOC0yMyAwMjo1MDozNiAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhcmJsZW5kLmM6Ci0JICBkZWludGVybGFjZTogcmVtb3ZlIGFzc2VtYmx5IGNvZGUgaW4gZmF2b3Igb2Ygb3JjCi0KLTIwMTAtMDYtMDggMTQ6NTQ6NDkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLm9yYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5LmM6Ci0JICBkZWludGVybGFjZTogaW1wbGVtZW50IGdyZWVkeSBpbiBPcmMKLQotMjAxMC0wOS0wNCAxMTo0MzoyMSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0Lmg6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuaDoKLQkgIHVwZGF0ZSBkaXN0ZWQgT3JjIGZpbGVzCi0KLTIwMTAtMDktMDIgMTQ6MzQ6NTAgKzAyMDAgIFRoaWJhdWx0IFNhdW5pZXIgPHRzYXVuaWVyQGdub21lLm9yZz4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgIGFscGhhY29sb3I6IEZpeCBjbGFzc2lmaWNhdGlvbgotCSAgVGhpcyBpcyBubyBlZmZlY3QgYnV0IGEgY29udmVydGVyLiBGaXhlcyBidWcgIzYyODYwOC4KLQotMjAxMC0wOS0wMiAxMToxOTowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMudHlwZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmMy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIycGFkLmg6Ci0JICB2aWRlb21peGVyMjogQWRkIGRvY3VtZW50YXRpb24gYW5kIGFkZCB0byB0aGUgZG9jcwotCi0yMDEwLTA3LTI2IDE2OjA3OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9nc3Rjb2xsZWN0cGFkczIuYzoKLQkqIGdzdC92aWRlb21peGVyL2dzdGNvbGxlY3RwYWRzMi5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmg6Ci0JICB2aWRlb21peGVyMjogQWRkIHZpZGVvbWl4ZXIyIGVsZW1lbnQKLQkgIFRoaXMgaXMgYmFzZWQgb24gY29sbGVjdHBhZHMyIGFuZCBpcyBzeW5jaHJvbml6aW5nCi0JICBhbGwgc3RyZWFtcyBiYXNlZCBvbiB0aGUgcnVubmluZyB0aW1lLgotCSAgTmV3IGZlYXR1cmVzIGNvbXBhcmVkIHRvIG9sZCB2aWRlb21peGVyOgotCSAgKiBTeW5jaHJvbml6aW5nIGZyYW1lcyBvbiB0aGUgcnVubmluZyB0aW1lCi0JICAqIEltcHJvdmVkIGFuZCBzaW1wbGlmaWVkIG5lZ290aWF0aW9uCi0JICAqIEZ1bGwgUW9TIHN1cHBvcnQKLQkgICogVmFyaWFibGUgZnJhbWVyYXRlIHN1cHBvcnQKLQkgIEZpeGVzIGJ1ZyAjNjI2MDQ4LCAjNjI0OTA1LgotCi0yMDEwLTA5LTAxIDExOjExOjM0ICswMjAwICBQYXZlbCBLb3N0eXVjaGVua28gPHNocHJvdHhAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFJlbGF4IHBhcnNpbmcgb2YgZGF0ZSB0YWdzCi0JICBCZWZvcmUgd2UgcmVxdWlyZWQgYSBjb21wbGV0ZSBkYXRlIGluIG1hdHJvc2thZGVtdXggYnV0IGluCi0JICBpZDNkZW11eCBmb3IgZXhhbXBsZSBvbmx5IHRoZSB5ZWFyIG9yIHllYXIgYW5kIG1vbnRoIHdhcyBwb3NzaWJsZSB0b28uCi0JICBGaXhlcyBidWcgIzYyODQ1NC4KLQotMjAxMC0wOC0zMCAxOTowMzo1MiArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IFVzZSBHc3RCYXNlU3JjOjpibG9jay1zaXplIGFzIGZhbGxiYWNrIHNpemUKLQotMjAxMC0wOC0zMCAxODozNjo1NCArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IEZpeCB1c2luZyBtcGVndHMgdmlhIHRoZSBtbWFwIGludGVyZmFjZQotCSAgTVBFRyBkb2Vzbid0IGhhdmUgYSBzdGF0aWMgc2l6ZSBwZXIgZnJhbWUsIHNvIGRvbid0IHByZXRlbmQgaXQgaGFzIG9uZQotCSAgYW5kIGZhaWwgd2hlbiBjYXB0dXJpbmcgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdGNoLiBJbnN0ZWFkIG1hcmsgdGhlIHNpemUKLQkgIGFzIHVua25vd24gYW5kIGxldCB0aGUgcmVhZCBmcmFtZSBncmFiYmluZyBtZXRob2QgdXNlIGEgcmVhc29uYWJsZSBmYWxsYmFjawotCSAgdmFsdWUgKGFzc3VtaW5nIHRoYXQncyBvbmx5IGZvciBhY3R1YWwgc3RyZWFtaW5nIGZvcm1hdHMpCi0JICBGaXhlcyBidWcgIzYyODM0OS4KLQotMjAxMC0wOC0yNyAxODoxNTowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgd2F2cGFja3BhcnNlOiBEb24ndCB1c2UgR1NUX0ZMT1dfSVNfRkFUQUwoKQotCi0yMDEwLTA4LTI3IDE4OjEzOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogRG9uJ3QgdXNlIEdTVF9GTE9XX0lTX0ZBVEFMKCkKLQkgIEFuZCBkb24ndCBwb3N0IGFuIGVycm9yIG1lc3NhZ2UgaWYgZG93bnN0cmVhbSByZXR1cm5zIFVORVhQRUNURUQuCi0KLTIwMTAtMDgtMjcgMTg6MDk6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZHZkZW11eDogRG9uJ3QgdXNlIEdTVF9GTE9XX0lTX0ZBVEFMKCkKLQotMjAxMC0wOC0yNyAxODowNTo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IERvbid0IHVzZSBHU1RfRkxPV19JU19GQVRBTCgpCi0JICBBbmQgZG9uJ3QgcG9zdCBhbiBlcnJvciBtZXNzYWdlIGlmIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZCBiZWNhdXNlCi0JICBvZiBVTkVYUEVDVEVELCB3aGljaCBvbmx5IG1lYW5zIHRoYXQgZG93bnN0cmVhbSB3YW50cyB1cyB0byBFT1Mgbm93LgotCi0yMDEwLTA4LTI3IDE4OjAyOjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYy9kZWM6IERvbid0IHVzZSBHU1RfRkxPV19JU19GQVRBTCgpCi0JICBBbmQgcHJvcGVybHkgaGFuZGxlIFVORVhQRUNURUQgYW5kIFdST05HX1NUQVRFLgotCi0yMDEwLTA4LTI3IDE3OjUyOjE4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5jOgotCSAgY21tbGRlYy9lbmM6IERvbid0IHVzZSBHU1RfRkxPV19JU19GQVRBTCgpCi0JICBBbmQgYXMgYSByZXN1bHQsIGRvbid0IGlnbm9yZSBXUk9OR19TVEFURSBhbmQgTk9UX0xJTktFRC4KLQkgIEJvdGggbWVhbiB0aGF0IGl0J3MgYSBnb29kIGlkZWEgdG8gcGFzcyB0aGVtIHVwc3RyZWFtIGluc3RlYWQKLQkgIG9mIHByZXRlbmRpbmcgdGhhdCBldmVyeXRoaW5nIGlzIGdvb2QuCi0KLTIwMTAtMDgtMjcgMTc6NDc6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBEb24ndCB1c2UgR1NUX0ZMT1dfSVNfRkFUQUwoKQotCi0yMDEwLTA4LTI3IDE3OjQ1OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogRG9uJ3QgdXNlIEdTVF9GTE9XX0lTX0ZBVEFMKCkgYW5kIEdTVF9GTE9XX0lTX1NVQ0NFU1MoKQotCi0yMDEwLTA4LTI3IDE3OjM5OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRG9uJ3QgdXNlIEdTVF9GTE9XX0lTX0ZBVEFMKCkKLQotMjAxMC0wOC0yNyAxNzozNzozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRG9uJ3QgdXNlIEdTVF9GTE9XX0lTX0ZBVEFMKCkKLQotMjAxMC0wOC0yNyAxNzozNTo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkgIHJuZGJ1ZmZlcnNpemU6IERvbid0IHVzZSBHU1RfRkxPV19JU19GQVRBTCgpCi0KLTIwMTAtMDgtMjcgMTc6MzU6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogRG9uJ3QgdXNlIEdTVF9GTE9XX0lTX0ZBVEFMKCkKLQotMjAxMC0wOC0yNyAxNzozMjowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBEb24ndCB1c2UgR1NUX0ZMT1dfSVNfRkFUQUwoKQotCSAgQW5kIGRvY3VtZW50IHdoeSB3cm9uZy1zdGF0ZSBkb2Vzbid0IG5lZWQgYW4gZXJyb3IgbWVzc2FnZS4KLQotMjAxMC0wOC0yNiAxMzo0NDo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogRmFpbCBncmFjZWZ1bGx5IGlmIG5vIHRocmVhZGVkIFBBIG1haW5sb29wIGNhbiBiZSBjcmVhdGVkCi0JICBGaXhlcyBidWcgIzYyODAyMC4KLQotMjAxMC0wOC0yNCAxNToxMToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuaDoKLQkgIHZpZGVvbWl4ZXI6IFVwZGF0ZSBkaXN0ZWQgT1JDIGZpbGVzCi0KLTIwMTAtMDgtMjMgMTU6NDQ6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9tbXguaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLm9yYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IE9wdGltaXplIEFSR0IgYmxlbmRpbmcgYW5kIGltcGxlbWVudCBCR1JBIGJsZW5kaW5nIHdpdGggb3JjCi0JICBUaGlzIG5vdyBtZWFucywgdGhhdCB3ZSBoYXZlIGFic29sdXRlbHkgbm8gaGFuZHdyaXR0ZW4gYXNzZW1ibHkgYW55bW9yZQotCSAgaW4gdmlkZW9taXhlciBhbmQgaXQncyBhbHNvIGZhc3RlciBub3cgd2hlbiB1c2luZyBTU0UuCi0KLTIwMTAtMDgtMjIgMDE6NTg6MDUgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRvcmMub3JjOgotCSAgdmlkZW9taXhlcjogQWRkIG9yYyBpbXBsZW1lbnRhdGlvbiBmb3IgYmxlbmRpbmcKLQkgIHZpZGVvbWl4ZXI6IEFkZCBvcmMgaW1wbGVtZW50YXRpb24gZm9yIGJsZW5kaW5nCi0KLTIwMTAtMDgtMjIgMDE6NTQ6MTYgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBGaXggZXhhbXBsZSBwaXBlbGluZXMKLQkgIHZpZGVvbWl4ZXI6IEZpeCBleGFtcGxlIHBpcGVsaW5lcwotCi0yMDEwLTA4LTIwIDExOjQxOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBBZGQgdGVzdCBmb3IgY2hlY2tpbmcgaWYgaW1hZ2VmcmVlemUgY29ycmVjdGx5IHJldHVybnMgVU5FWFBFQ1RFRCBhZnRlciB0aGUgZmlyc3QgYnVmZmVyCi0KLTIwMTAtMDgtMjAgMTE6Mzg6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IEFkZCB0ZXN0IGZvciBidWZmZXJhbGxvYyBwYXNzdGhyb3VnaAotCi0yMDEwLTA4LTIwIDEwOjM1OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBGaXggcmFjZSBjb25kaXRpb25zIGluIHRoZSB1bml0IHRlc3QKLQkgIElmIHNldHRpbmcgdGhlIHBpcGVsaW5lIHRvIFBMQVlJTkcgYmVmb3JlIGlzc3VpbmcgdGhlIHNlZWssIGJ1ZmZlcnMKLQkgIGFyZSBhbHJlYWR5IGFycml2aW5nIGF0IHRoZSBzaW5rIGJlZm9yZSB0aGUgc2VlayBpcyBoYW5kbGVkIGFuZAotCSAgd2lsbCBoYXZlIHRoZSB3cm9uZyB0aW1lc3RhbXBzIGFuZCBldmVyeXRoaW5nLgotCSAgRml4ZXMgYnVnICM2MjU1NDcuCi0KLTIwMTAtMDgtMjAgMTA6MzQ6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5oOgotCSAgaW1hZ2VmcmVlemU6IEZpeCBhbm90aGVyIHN1YnRsZSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIHN0YXJ0aW5nIHRoZSBzcmNwYWQgdGFzawotCSAgRHVlIHRvIGEgc2VlayB0aGUgc3JjcGFkIHRhc2sgY291bGQgYmUgc3RhcnRlZCBpbiByYXJlIGNpcmN1bXN0YW5jZXMgYWx0aG91Z2gKLQkgIGl0IHNob3VsZG4ndCBiZSBzdGFydGVkIGFueW1vcmUgYmVjYXVzZSBubyB1cHN0cmVhbSBidWZmZXIgaXMgYXZhaWxhYmxlLgotCi0yMDEwLTA4LTIwIDEwOjI0OjMzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuaDoKLQkgIGltYWdlZnJlZXplOiBQcm90ZWN0IHRoZSBmbHVzaGluZy1zZWVrIHZhcmlhYmxlIGJ5IHRoZSBzcmNwYWQncyBzdHJlYW0gbG9jawotCSAgVGhpcyBmaXhlcyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiwgdGhhdCBjYXVzZWQgYnVmZmVyYWxsb2MgdG8gZmFpbAotCSAgd2l0aCB3cm9uZy1zdGF0ZSBkdWUgdG8gYSBzZWVrIGJ1dCBjYXVzZWQgaXQgdG8gYmUgbm90IHJldHJpZWQgYXMKLQkgIGl0IHNob3VsZC4KLQotMjAxMC0wOC0yMCAwOToxNDo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5jOgotCSAgaW1hZ2VmcmVlemU6IEFsd2F5cyBnZW5lcmF0ZSBhIHBlcmZlY3RseSB0aW1lc3RhbXBlZCBzdHJlYW0KLQkgIEJlZm9yZSB0aGVyZSBjb3VsZCBiZSByb3VuZGluZyBlcnJvcnMgd2hlbiBjYWxjdWxhdGluZyB0aGUgZHVyYXRpb24sCi0JICByZXN1bHRpbmcgaW4gdGltZXN0YW1wICsgZHVyYXRpb24gYmVpbmcgc21hbGxlciB0aGFuIHRoZSBuZXh0IGJ1ZmZlcidzCi0JICB0aW1lc3RhbXAuCi0KLTIwMTAtMDgtMTkgMTg6Mzg6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IE9ubHkgaW5jbHVkZSB0aGUgc2VydmVyIG5hbWUgaW4gdGhlIGNvbnRleHQgbmFtZSBpZiBpdCdzIG5vdCBOVUxMCi0KLTIwMTAtMDgtMTggMTY6Mzc6NDEgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkgIHB1bHNlc2luazogQWRkICJjbGllbnQiIHByb3BlcnR5IHRvIHNldCB0aGUgUEEgY2xpZW50IG5hbWUKLQkgIEFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gbW9kaWZ5IHRoZSBjbGllbnQgbmFtZSB1c2VkIHRvIGNvbm5lY3Qgd2hlbgotCSAgY29ubmVjdGluZyB0byB0aGUgUHVsc2VBdWRpbyBkYWVtb24uIE5vdGUgaG93ZXZlciB0aGF0IHVwZGF0aW5nIHRoZQotCSAgcHJvcGVydHkgYWZ0ZXIgdGhlIGVsZW1lbnQgcmVhY2hlZCB0aGUgUkVBRFkgc3RhdGUgd2lsbCBoYXZlIG5vCi0JICBlZmZlY3QgdW50aWwgdGhlIG5leHQgTlVMTC0+UkVBRFkgdHJhbnNpdGlvbi4KLQkgIEZpeGVzIGJ1ZyAjNjI3MTc0LgotCi0yMDEwLTA4LTE5IDE3OjU5OjA5ICswMjAwICBEYXZpZCBIb3l0IDxkaG95dEBsbG5sLmdvdj4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2VzCi0JICBCZWZvcmUgdGhleSBjb250YWluZWQgdGhlIFVSTCBiZWZvcmUgdGhlIGFjdHVhbCBmYWlsdXJlLiBUaGUgb3RoZXIKLQkgIHdheSBhcm91bmQgbWFrZXMgbW9yZSBzZW5zZSBhbmQgd2UgZG8gdGhlIHNhbWUgaW4gb3RoZXIgZWxlbWVudHMKLQkgIGxpa2UgZmlsZXNyYy4KLQkgIEZpeGVzIGJ1ZyAjNjI3Mjg5LgotCi0yMDEwLTA4LTE5IDEyOjQ2OjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGcmVlIHRoZSBjbG9jayBvbiBzdGF0ZSBjaGFuZ2UgZmFpbHVyZXMgdG9vCi0KLTIwMTAtMDgtMTcgMTY6MjY6NDEgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXV0aWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHB1bHNldXRpbDogaW5jbHVkZSBwaWQgdmFsdWUgaW4gZ3N0X3B1bHNlX2NsaWVudF9uYW1lKCkgZmFsbGJhY2sgcmV0dXJuIHZhbHVlCi0JICBGaXhlcyBidWcgIzYyNzE2MgotCi0yMDEwLTA4LTE5IDEyOjMyOjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGcmVlIHRoZSBHc3RQdWxzZUNvbnRleHQgYWZ0ZXIgdXNhZ2UKLQotMjAxMC0wOC0xNiAwOToxMjowNCArMDIwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBzaGFyZSB0aGUgUEEgY29udGV4dCBiZXR3ZWVuIGFsbCBjbGllbnRzIHdpdGggdGhlIHNhbWUgbmFtZQotCSAgQXZvaWQgdG8gY3JlYXRlIGEgbmV3IFBBIGNvbnRleHQgZm9yIGVhY2ggbmV3IGNsaWVudCBieSB1c2luZyBhIGhhc2gKLQkgIHRhYmxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgcmluZy1idWZmZXJzIGFuZCB0aGUgc2hhcmVkIFBBIGNvbnRleHQKLQkgIGZvciBlYWNoIGNsaWVudC4gRG9pbmcgdGhpcyB3aWxsIGltcHJvdmUgYXBwbGljYXRpb24gbWVtb3J5IHVzYWdlIGluCi0JICB0aGUgY2FzZXMgd2hlcmUgbXVsdGlwbGUgcGlwZWxpbmVzIGludm9sdmluZyBtdWx0aXBsZSBwdWxzZXNpbmsKLQkgIGVsZW1lbnRzIGFyZSB1c2VkLgotCSAgRml4ZXMgYnVnICM2MjQzMzguCi0KLTIwMTAtMDgtMTcgMTM6NDE6NDkgKzAyMDAgIFBoaWxpcHBlIE5vcm1hbmQgPHBoaWxAYmFzZS1hcnQubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGNsZWFyIHRoZSBQQSBtYWlubG9vcCBpZiBiYXNlYXVkaW9zaW5rIGZhaWxlZCB0byBvcGVuIHRoZSByaW5nX2J1ZmZlcgotCSAgSWYgdGhlIGFwcGxpY2F0aW9uIHJlcXVlc3RzIGEgc3RhdGUtY2hhbmdlIGFuZCBwdWxzZXNpbmsgZmFpbHMgdG8gb3BlbgotCSAgdGhlIHJpbmdfYnVmZmVyIGRldmljZSB0aGUgbWFpbmxvb3AgYXR0cmlidXRlIG9mIHRoZSBzaW5rIHNob3VsZCBiZQotCSAgY2xlYW5lZCB1cCB0byBhdm9pZCBmdXR1cmUgc3RhdGUtY2hhbmdlIChOVUxMLT5SRUFEWSkgZmFpbHVyZXMuCi0KLTIwMTAtMDgtMTkgMTI6MjM6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBQb3N0IGFuIGVycm9yIG1lc3NhZ2UgaWYgRU9TIGhhcHBlbnMgYmVmb3JlIHZhbGlkIGlucHV0IGlzIGZvdW5kCi0JICBGaXhlcyBidWcgIzYyNzM0MS4KLQotMjAxMC0wOC0xMiAxMTo0OTo0NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBTZW5kIGNsb3NlIG5ld3NlZ21lbnQgZXZlbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZAotCi0yMDEwLTA4LTExIDExOjM2OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuaDoKLQkgIGltYWdlZnJlZXplOiBSZXRyeSBidWZmZXJhbGxvYyBpZiBpdCB3YXMgYWJvcnRlZCB3aXRoIFdST05HX1NUQVRFIGJlY2F1c2Ugb2YgYSBmbHVzaGluZyBzZWVrCi0KLTIwMTAtMDgtMTEgMDg6NDY6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBSZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRCB3aGVuIGdldHRpbmcgYSBzZWNvbmQgYnVmZmVyCi0JICBUaGlzIHByZXZlbnRzIHVwc3RyZWFtIGZyb20gcHVzaGluZyBtYW55IHVzZWxlc3MgYnVmZmVycyBhbmQgbWFrZXMKLQkgIGl0IGdvIGludG8gRU9TIHN0YXRlLgotCi0yMDEwLTA4LTEwIDIwOjExOjI2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogUGFzc3Rocm91Z2ggYnVmZmVyIGFsbG9jYXRpb25zCi0KLTIwMTAtMDktMDQgMTM6MTA6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQkgIFRlbXBvcmFyaWx5IGRpc2FibGUgLURHU1RfRElTQUJMRV9ERVBSRUNBVEVEIGZvciBnaXQgYnVpbGRzIHVudGlsCi0JICB0aGUgY29kZSBpcyB1cGRhdGVkIGZvciB0aGUgR1NUX0ZMT1dfSVNfKiBtYWNybyBkZXByZWNhdGlvbnMuCi0KLT09PSByZWxlYXNlIDAuMTAuMjUgPT09Ci0KLTIwMTAtMDktMDIgMjM6NDQ6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0Lmg6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuaDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4yNQotCi0yMDEwLTA5LTAyIDIzOjEyOjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkgIGRvY3M6IHVwZGF0ZSBkb2NzIGZvciByZWxlYXNlCi0KLTIwMTAtMDktMDIgMjM6MDc6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vZXMucG86Ci0JKiBwby9nbC5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9yby5wbzoKLQkqIHBvL3N2LnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wOC0yNSAxOTowMTo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NsLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgMC4xMC4yNC41IHByZS1yZWxlYXNlCi0KLTIwMTAtMDgtMjIgMjE6MTU6MDcgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiB1c2Ugc2VwYXJhdGUgYnVmZmVyIG1ldGFkYXRhIGZvciBmaWVsZHMKLQkgIENhbGwgZ3N0X2J1ZmZlcl9tYWtlX21ldGFkYXRhX3dyaXRhYmxlKCkgb24gYnVmZmVycyB0aGF0IGFyZQotCSAgZHVwbGljYXRlZCBpbnRvIGZpZWxkcy4gIEZpeGVzICM2Mjc2ODkuCi0KLTIwMTAtMDgtMjEgMjE6NDE6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5oOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0Lmg6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZG9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZG9yYy1kaXN0Lmg6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zbC5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIDAuMTAuMjQuNCBwcmUtcmVsZWFzZQotCi0yMDEwLTA4LTE5IDE4OjMwOjA1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogUHJldmVudCBjcmFzaCB3aGVuIHJlYWRpbmcgaW1hZ2Ugd2l0aCBwcm9ibGVtcwotCSAgQ2hlY2sgaWYgd2UgaGF2ZSBkYXRhIG9uIHRoZSBhZGFwdGVyIGFuZCBmYWlsIGlmIG5vdC4KLQkgIEZpeGVzICM2Mjc0MTMKLQotMjAxMC0wOC0xMyAxNzoyNDowMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gM2U4ZGIxZCB0byBlYzYwMjE3Ci0KLTIwMTAtMDgtMTEgMjI6MjA6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBTZW5kIGNsb3NlIHNlZ21lbnRzIHdoZW4gc2Vla2luZyBvbmx5IGZvciBub24tZmx1c2hpbmcgc2Vla3MgYW5kIGlmIHdlIGFscmVhZHkgc2VudCBhIG5ld3NlZ21lbnQgZXZlbnQKLQkgIEZpeGVzIGJ1ZyAjNjI2NjE5LgotCi0yMDEwLTA4LTExIDE2OjUwOjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0cnRwYmluLW1hcnNoYWwuYzoKLQkqIHdpbjMyL2NvbW1vbi9nc3R1ZHAtZW51bXR5cGVzLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dWRwLWVudW10eXBlcy5oOgotCSogd2luMzIvY29tbW9uL2dzdHVkcC1tYXJzaGFsLmM6Ci0JICAwLjEwLjI0LjMgcHJlLXJlbGVhc2UKLQotMjAxMC0wOC0xMSAxMToxNzoxOCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHByZXZlbnQgcmVhZGluZyBwYXN0IGF2YzEgYXRvbSB3aGVuIHBhcnNpbmcKLQkgIC4uLiB3aGVuIG9uZSBvZiB0aGUgc3ViYXRvbXMgaGFzIGEgbGFyZ2UvaW52YWxpZCBzaXplLgotCSAgRml4ZXMgIzYyNjYwOS4KLQotMjAxMC0wOC0xMCAyMzozNzoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICAwLjEwLjI0LjIgcHJlLXJlbGVhc2UKLQotMjAxMC0wOC0xMCAxMDo1Nzo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBiZDIwNTRiIHRvIDNlOGRiMWQKLQotMjAxMC0wOC0wOSAwMDozNjozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlOiBmaXggcHJpbnRmIGZvcm1hdCBpbiBzb21lIGRlYnVnZ2luZyBtZXNzYWdlcwotCi0yMDEwLTA4LTA4IDIzOjMxOjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcGtnY29uZmlnL2dzdHJlYW1lci1wbHVnaW5zLWdvb2QtdW5pbnN0YWxsZWQucGMuaW46Ci0JICBwa2djb25maWc6IHNldCBwbHVnaW5zZGlyIHRvIHRvcC1sZXZlbCBidWlsZGRpciB3aXRob3V0IHRoZSBwa2djb25maWcvLi4gYml0cwotCSAgUmVtb3ZlcyBjbHV0dGVyIGluIHBsdWdpbiBkaXIgcGF0aHMuIFRoaXMgaXMgb25seSB1c2VkIHRvIGZpbmQgdGhlIC1nb29kCi0JICBwbHVnaW5zIGZvciB1bml0IHRlc3RzIG9mIHVnbHkvYmFkL2ZmbXBlZy9ldGMuIGluIGFuIHVuaW5zdGFsbGVkIHNldHVwLgotCi0yMDEwLTA4LTA2IDIwOjA0OjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogYWxzbyBsb2cgcGl4ZWwgZm9ybWF0cyBpbiBzb3J0ZWQgb3JkZXIKLQotMjAxMC0wOC0wNiAxODowNzo0NiArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IHNvcnQgZm9ybWF0cyBpbiB0aGUgcmlnaHQgb3JkZXIgc28gdGhhdCBub24tZW11bGF0ZWQgZm9ybWF0cyBhcmUgcHJlZmVyZWQKLQkgIFRoZSBmb3JtYXQgbGlzdCBzaG91bGQgYmUgc29ydGVkIGZyb20gaGlnaCByYW5rcyB0byBsb3cgcmFua3MuIEluIHRoZSBHU0xpc3QKLQkgIHNvcnRpbmcgZnVuY3Rpb24gdGhpcyBtZWFucyB0aGUgY29tcGFyZSBuZWVkcyB0byByZXR1cm4gYSBwb3NpdGl2ZSB2YWx1ZSBpZgotCSAgZm9ybWF0IGEgaGFzIGEgbG93ZXIgcmFuayB0aGFuIGZvcm1hdCBiLgotCSAgQW1vbmcgb3RoZXIgdGhpbmdzIHRoaXMgZml4ZXMgdjRsMnNyYyB0byBwcmVmZXIgbm9uLWVtdWxhdGVkIGZvcm1hdHMKLQkgIHRvIGVtdWxhdGVkIGZvcm1hdHMgd2hlbiBidWlsdCBhZ2FpbnN0IGxpYnY0bC4KLQotMjAxMC0wOC0wNiAxOToyNDowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IEZpeCBwaXBlbGluZSBpbiB0aGUgZG9jdW1lbnRhdGlvbgotCSAgTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSB0aGUgc2FtZSBjb2xvciBmb3JtYXQgb24gYWxsIHN0cmVhbXMsIGkuZS4gQVlVVgotCSAgRml4ZXMgYnVnICM2MjU0NTIuCi0KLTIwMTAtMDgtMDUgMTM6NTY6NDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGE1MTk1NzEgdG8gYmQyMDU0YgotCi0yMDEwLTA2LTE0IDE5OjU4OjExICsxMDAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBkMTRuLm9yZz4KLQotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6Ci0JICBpZDN2Mm11eDogd3JpdGUgYmVhdHMtcGVyLW1pbnV0ZSB0YWcgdXNpbmcgVEJQTSBmcmFtZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTUyMAotCi0yMDEwLTA3LTI1IDExOjQ3OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIHZpZGVvbWl4ZXI6IE1vdmUgZGVidWcgY2F0ZWdvcmllcyBpbnRvIHRoZSBzb3VyY2UgZmlsZXMgYW5kIGFkZCBkZWJ1ZyBjYXRlZ29yeSBmb3IgdGhlIGJsZW5kIGZ1bmN0aW9ucwotCi0yMDEwLTA4LTA0IDE5OjI1OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgSVNPIEM4OSBvciBDOTkgYW5kIHdoaWNoIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkCi0JICBUaGlzIGZpcnN0IGNoZWNrcyB3aGF0IGlzIHJlcXVpcmVkIGZvciBJU08gQzk5IHN1cHBvcnQgYW5kIHNldHMgdGhlIHJlbGV2YW50Ci0JICBjb21waWxlciBwYXJhbWV0ZXJzIGFuZCBpZiBubyBDOTkgY29tcGlsZXIgaXMgZm91bmQsIGl0IGNoZWNrcyBmb3IgYQotCSAgQzg5IGNvbXBpbGVyLiBUaGlzIGVuYWJsZXMgdXMgdG8gY2hlY2sgZm9yIGFuZCB1c2UgQzg5L0M5OSBmdW5jdGlvbnMKLQkgIHRoYXQgZ2NjIGhpZGVzIGZyb20gdXMgd2l0aG91dCB0aGUgY29ycmVjdCBjb21waWxlciBwYXJhbWV0ZXJzLgotCi0yMDEwLTA3LTE1IDEwOjEwOjMxICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHVzZSBHX1RZUEVfREVGSU5FIHRvIGRlZmluZSByaW5nIGJ1ZmZlciB0eXBlCi0JICBUaGUgZXhpc3RpbmcgZ2V0X3R5cGUoKSBpbXBsZW1lbnRhdGlvbiBpcyByYWN5LCBhbmQgdGhlCi0JICBnX3R5cGVfY2xhc3NfcmVmKCkgd29ya2Fyb3VuZCBkaWRuJ3QgYWN0dWFsbHkgd29yayBiZWNhdXNlCi0JICBpdCB3YXMgaW4gdGhlIHdyb25nIGZ1bmN0aW9uLiBTaW5jZSBjbGFzcyBjcmVhdGlvbiBpbiBHT2JqZWN0Ci0JICBpcyB0aHJlYWQtc2FmZSB0aGVzZSBkYXlzIChzaW5jZSAyLjE2KSwgdGhlIGNsYXNzX3JlZiB3b3JrYXJvdW5kCi0JICBpcyBubyBsb25nZXIgbmVlZGVkIGFuZCBpdCBpcyBzdWZmaWNpZW50IHRvIGVuc3VyZSB0aGUgX2dldF90eXBlKCkKLQkgIGZ1bmN0aW9uIGlzIHRocmVhZC1zYWZlLCB3aGljaCBHX1RZUEVfREVGSU5FIGRvZXMuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI0MzM4Ci0KLTIwMTAtMDgtMDQgMTU6MjA6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IFBvc3QgQ0xPQ0stTE9TVC9DTE9DSy1QUk9WSURFIHdoZW4gZ29pbmcgdG8vZnJvbSBSRUFEWQotCSAgT3RoZXJ3aXNlIHRoZSBjbG9ja3MgYXJlIHJlZGlzdHJpYnV0ZWQgZXZlcnkgdGltZSB0aGUgcGlwZWxpbmUKLQkgIGdvZXMgdG8gUEFVU0VELCB3aGljaCBpcyBxdWl0ZSBleHBlbnNpdmUuCi0KLTIwMTAtMDctMTIgMTI6MzU6MTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5Lmg6Ci0JICBydHBtcDRncGF5OiBpbXBsZW1lbnQgcGVyZmVjdCB0aW1lc3RhbXBzCi0JICBVc2UgYml0cmVhZGVyIGZvciBwYXJzaW5nIHRoZSBjb25maWcgc3RyaW5nCi0JICBSZXNldCBzdGF0ZSB2YXJpYWJsZXMgd2hlbiBnb2luZyB0byBSRUFEWQotCSAgUGFyc2UgZnJhbWUgbGVuZ3RoIGFuZCB1c2UgaXQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcnRwdGltZXN0YW1wcwotCi0yMDEwLTA3LTA5IDE0OjA3OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkgIHJ0cGgyNjNwZGVwYXk6IGFsbG93IG1vcmUgY2xvY2stcmF0ZXMgYXMgaW5wdXQKLQkgIEFsdGhvdWdoIHRoZSBzcGVjIHNheXMgdGhhdCB0aGUgY2xvY2stcmF0ZSBzaG91bGQgYWx3YXlzIGJlIDkwMDAwLCBzb21lIHJ0c3AKLQkgIHNlcnZlcnMgc2VuZCBkaWZmZXJlbnQgY2xvY2stcmF0ZXMgc28gd2UgbXVzdCBhY2NlcHQgdGhlbiBpbiBvcmRlciB0byBoYW5kbGUKLQkgIHRob3NlIHN0cmVhbXMgdG9vLgotCi0yMDEwLTA3LTA2IDE5OjAyOjE0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JICBMMTZkZXBheTogZGVmYXVsdCB0byAxIGNoYW5uZWwKLQkgIFdoZW4gd2UgY2FuJ3QgZmluZCBhbnkgY2hhbm5lbCBvciBlbmNvZGluZy1wYXJhbXMgb24gdGhlIGNhcHMgZm9yIGR5bmFtaWMKLQkgIHBheWxvYWQgdHlwZXMsIHNldCB0aGUgZGVmYXVsdCBudW1iZXIgb2YgY2hhbm5lbHMgdG8gMSwgYXMgdGhlIHNwZWMgc2F5cyB3ZQotCSAgc2hvdWxkLgotCSAgU2VlICM2MjMyMDkKLQotMjAxMC0wNy0wNiAxODoyMjoyNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3QgcmV1c2UgdWRwIHNvY2tldHMKLQkgIERvbid0IHJldXNlIHNvY2tldHMgYnV0IG1ha2UgdGhlIHVkcHNyYyBlbGVtZW50IGZhaWwgdGhlIHN0YXRlIGNoYW5nZSB3aGVuIHRoZQotCSAgc29ja2V0IGlzIGFscmVhZHkgaW4gdXNlLiBJZiB3ZSBkb24ndCBwcmV2ZW50IHJldXNlLCB3ZSBtaWdodCBlbmQgdXAgdXNpbmcgdGhlIHNhbWUKLQkgIHBvcnQgZm9yIGRpZmZlcmVudCBzdHJlYW1zIGluIHNvbWUgY2FzZXMuCi0JICBGaXhlcyAjNjIyMDE3Ci0KLTIwMTAtMDctMDYgMTg6MTE6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgdWRwc3JjOiBhZGQgcHJvcGVydHkgdG8gZW5hYmxlIHBvcnQgcmV1c2UKLQotMjAxMC0wNy0wNSAxMDoyMzozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSAgTDE2ZGVwYXk6IHVzZSBlbmNvZGluZy1wYXJhbXMgZm9yIHRoZSBjaGFubmVscwotCSAgV2hlbiBwYXJzaW5nIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMsIHVzZSB0aGUgZW5jb2RpbmctcGFyYW1zIHByb3BlcnR5IGZyb20gdGhlCi0JICBSVFAgY2FwcyBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgd2UgY2FuIGZpbmQgdGhlIGNoYW5uZWxzIGFjY29yZGluZyB0byB0aGUgc3BlYy4KLQkgIEZhbGwgYmFjayB0byB0aGUgY2hhbm5lbHMgcHJvcGVydHkgaW4gdGhlIGNhcHMgd2hlbiBuZWVkZWQuCi0JICBGaXhlcyAjNjIzMjA5Ci0KLTIwMTAtMDYtMjkgMTA6NDY6NDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGltcHJvdmUgZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZQotCSAgSW1wcm92ZSBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlLgotCSAgRml4ZXMgIzYyMjU3NwotCi0yMDEwLTA4LTAyIDIzOjE1OjU2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgZXhhbXBsZXM6IG5vIG5lZWQgdG8gc2V0IHRoZSBjb2xvciBmb3IgZWFjaCBmcnEtYmFuZAotCi0yMDEwLTA4LTAyIDEyOjU2OjI5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuaDoKLQkgIHJ0cGc3MjlwYXk6IGF2b2lkIGJhc2VydHBwYXlsb2FkIHBlcmZlY3QtcnRwdGltZSBtb2RlCi0JICBHNzI5IHBhY2tldHMgbWF5IG9ubHkgb2NjdXIgaW50ZXJtaXR0ZW50bHkgKGUuZy4gY24gcGFja2V0cyksIGFuZCBhcyBzdWNoCi0JICBkbyBub3QgYWxsb3cgZm9yIHBlcmZlY3QtcnRwdGltZSBjYWxjdWxhdGluZyBydHAgdGltZXMgYmFzZWQgb24gZnJhbWUgb3IgYnl0ZQotCSAgY291bnQuICBJbiBwYXJ0aWN1bGFyLCBkbyBub3QgdXNlIHJ0cCBhdWRpbyBiYXNlIHBheWxvYWRlciBhcyBiYXNlIGNsYXNzLCBidXQKLQkgIHJhdGhlciBiYXNlIHBheWxvYWRlciBkaXJlY3RseS4KLQotMjAxMC0wOC0wMiAxMjo0ODowMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogZml4IGVsZW1lbnQgbGVhawotCi0yMDEwLTA4LTAyIDEyOjQ2OjQxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkgIHJ0cG1wNHZkZXBheTogZml4IGJ1ZmZlciBsZWFrCi0KLTIwMTAtMDgtMDIgMTI6NDY6MjAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IHJ0cCBwYXlsb2FkaW5nOiBmaXggcGFkIGxlYWsKLQotMjAxMC0wNy0yOSAxNzoxODoxMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBwdXNoIG1vZGU7IHVzZSBwcm9wZXIgbW92aSBvZmZzZXQgZm9yIG1vdmkgYmFzZWQgaW5kZXgKLQkgIEZpeGVzICM2MjMzNTcuCi0KLTIwMTAtMDctMjkgMTA6MDA6MTUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBDb3JyZWN0bHkgcGFyc2UgbXZoZCBhdG9tcwotCSAgUGFyc2UgbXZoZCBkYXRhIGFjY29yZGluZyB0byBpdHMgdmVyc2lvbiB0byBhdm9pZCBmYWlsaW5nCi0JICBvbiB2YWxpZCBmaWxlcy4KLQotMjAxMC0wNy0yOCAxMjoyMTo0MSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCB0aGUgbWF4L2F2ZyBpbiBidHJ0IGF0b20gcmVhZGluZwotCSAgQWNjb3JkaW5nIHRvIElTTyBtZWRpYSBiYXNlIGZvcm1hdCwgdGhlIG1heCBiaXRyYXRlIGlzIHRoZQotCSAgZmlyc3Qgb25lLCBhbmQgdGhlIGF2ZyBjb21lcyBuZXh0LgotCi0yMDEwLTA3LTI3IDE1OjU4OjAyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBwcm9wZXIgaGFuZGxpbmcgb2Ygc3RyZWFtaW5nIHVwc3RyZWFtIHdpdGhvdXQgZHVyYXRpb24KLQkgIEZpeGVzICM2MjUzNzEuCi0KLTIwMTAtMDctMjYgMTg6MzM6MDkgKzAyMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzIG9uIE9TWCBidWlsZCBib3QKLQotMjAxMC0wNy0yNiAxODoxNToyNSArMDIwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogY29ycmVjdGx5IGNoZWNrIHdoYXQgdmVyc2lvbiBvZiBnc3QtcGx1Z2lucy1iYXNlIHdlJ3JlIGNvbXBpbGluZyBhZ2FpbnN0Ci0JICBXZSBuZWVkIHRvIGNoZWNrIHRoZSBnc3QtcGx1Z2lucy1iYXNlIHZlcnNpb24sIG5vdCB0aGUgY29yZSB2ZXJzaW9uCi0JICAoZXZlbiBpZiBib3RoIHNob3VsZCBiZSB0aGUgc2FtZSBpbiBhbnkgc2FuZSBzZXR1cCkuCi0KLTIwMTAtMDctMjYgMTc6NDU6NDIgKzAyMDAgIEFybmF1ZCBWcmFjIDxyYXdvdWwgYXQgZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhZGQgcG9ydC1yYW5nZSBwcm9wZXJ0eSB0byBydHNwc3JjCi0JICBUbyBzdXBwb3J0IHNldHVwcyB3aXRoIGZpcmV3YWxsL2lwc2VjLCBpdCBpcyB1c2VmdWwgZm9yIGFuIHJ0c3AgY2xpZW50IHRvIGJlCi0JICBhYmxlIHRvIHNldCB0aGUgcmFuZ2Ugb2YgcG9ydHMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgcnRwL3J0Y3AgcmVjZXB0aW9uLgotCSAgQWxsb3dzIHRoaXMgYnkgYWRkaW5nIGEgInBvcnQtcmFuZ2UiIHByb3BlcnR5IHRvIHRoZSBydHNwc3JjIGVsZW1lbnQuCi0JICBGaXhlcyAjNjI1MTUzCi0KLTIwMTAtMDctMjYgMTM6Mzg6MzEgKzAyMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc2V0IHRoZSBwaXhlbC1hc3BlY3QtcmF0aW8gZmllbGQgYWxzbyBmb3IgcGFyPTEvMQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTMwMgotCi0yMDEwLTA3LTI2IDE1OjMxOjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggbWVtb3J5IGxlYWsgaW4gc2VydmVyIHJlcXVlc3QgcmVwbHkKLQkgIFRoZSBSVFNQIHNlcnZlciBydHNwc3JjIGlzIGNvbW11bmljYXRpbmcgd2l0aCwgc2VuZHMgYSBHRVRfUEFSQU1FVEVSIHJlcXVlc3QKLQkgIHBlcmlvZGljYWxseSBhcyBhIHBpbmcuICBUaGUgY29kZSBpbiBnc3RfcnRzcHNyY19oYW5kbGVfcmVxdWVzdCBmb3JtcyBhbiBPSwotCSAgcmVzcG9uc2UgYW5kIHNlbmRzLCBidXQgZG9lc24ndCBjYWxsIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgdG8gZnJlZSB0aGUgbWVtb3J5Ci0JICBhZnRlciBzZW5kaW5nIHRoZSByZXNwb25zZS4gIFRoaXMgcmVzdWx0cyBpbiBhIGNvbnN0YW50IHNsb3cgbWVtb3J5IGxlYWsuCi0JICBGaXhlcyAjNjI0NzcwCi0KLTIwMTAtMDctMjQgMjI6Mzk6NTQgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2NwdXJlcG9ydC5jOgotCSAgY3B1cmVwb3J0OiByZW1vdmUgYm9ndXMgZG9jcwotCi0yMDEwLTA3LTI0IDIyOjM3OjExICswMTAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Z3V0aWxzL2NwdXJlcG9ydC5jOgotCSogZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0Lmg6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RkZWJ1Zy5jOgotCSAgZGVidWd1dGlsczogbmV3IGVsZW1lbnQgY3B1cmVwb3J0Ci0JICBjcHVyZXBvcnQgcG9zdHMgYnVzIG1lc3NhZ2VzIGFmdGVyIGV2ZXJ5IGJ1ZmZlciByZWNlaXZlZCBvZiBjcHUgdXNlZCwgc3lzdGVtCi0JICBjbG9jayB0aW1lLCBidWZmZXIgdGltZQotCi0yMDEwLTA3LTI0IDEwOjI5OjAxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL2RlbW8uYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgZXhhbXBsZXM6IERlc3Ryb3kgdGhlIGNhaXJvIGNvbnRleHQgYWZ0ZXIgdXNhZ2UKLQotMjAxMC0wNy0yNCAxMDoyMTowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9nZGtfcGl4YnVmL01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSAgUmV2ZXJ0ICJnZGtwaXhidWY6IEFkZCBhIGdka3BpeGJ1ZjMgcGx1Z2luIHRoYXQgdXNlcyBnZGtwaXhidWYzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBiNjc4ODE1MzE2MWI0ZTA3ZmJmM2Q0MmEyZDg5MjFlYTA0OTMwNWQwLgotCSAgVGhlcmUncyBubyBnZGstcGl4YnVmMyBhbnltb3JlLiBnZGstcGl4YnVmIHdhcyBzZXBhcmF0ZWQgZnJvbSBHVEsrCi0JICBhbmQgd2lsbCBzdGF5IGF0IHZlcnNpb24gMi4wIGZvciBHVEsrIDMuMC4KLQotMjAxMC0wNy0yNCAxMDoxOTozNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgIGV4YW1wbGVzOiBVc2UgY2Fpcm8gaW5zdGVhZCBvZiB0by1iZS1kZXByZWNhdGVkIEdESyBBUEkKLQkgIEZpeGVzIGJ1ZyAjNjI1MDAyLgotCi0yMDEwLTA3LTIyIDE2OjI0OjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogZml4IGV2ZW50IGxlYWsKLQotMjAxMC0wNy0yMiAxMjowNToyNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBwdWxsIG1vZGUgbm9uLWN1ZSBzZWVraW5nCi0JICBUaGF0IGlzLCBpbiBmaWxlcyB0aGF0IGhhdmUgbm8gaW5kZXggKEN1ZSksIHBlcmZvcm0gc2VlayBieSBzY2FubmluZyBmb3IKLQkgIG5lYXJlc3QgY2x1c3RlciB3aXRoIHRpbWVjb2RlIGJlZm9yZSByZXF1ZXN0ZWQgcG9zaXRpb24uICBTY2FubmluZyBpcyBkb25lCi0JICBhcyBhIGNvbWJpbmF0aW9uIG9mIGludGVycG9sYXRpb24gYW5kIHNlcXVlbnRpYWwgc2Nhbi4KLQkgIEZpeGVzICM2MTczNjguCi0KLTIwMTAtMDctMTYgMTI6NDY6NTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogc3RyZWFtYWJsZSBmaWxlcyBuZWVkIG5vIF9maW5pc2gKLQkgIEZpeGVzICM2MjQ0NTUuCi0KLTIwMTAtMDctMjIgMTE6NDY6MzUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcHVzaCBtb2RlOyBoYW5kbGUgMC1zaXplIGRhdGEgY2h1bmtzCi0JICBGaXhlcyAjNjE4NTM1LgotCi0yMDEwLTA3LTIxIDA4OjExOjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogT25seSByZXNldCBRb1MgaW5mb3JtYXRpb24gYW5kIHNlbmQgYSBORVdTRUdNRU5UIGV2ZW50IGRvd25zdHJlYW0gZm9yIE5FV1NFR01FTlQgZXZlbnRzIG9uIHRoZSBtYXN0ZXIgcGFkCi0KLTIwMTAtMDctMTQgMjA6MzE6NDQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNkZWJ1Zy5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc2RlYnVnLmg6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RkZWJ1Zy5jOgotCSAgY2Fwc2RlYnVnOiBBZGQgbmV3IGVsZW1lbnQKLQotMjAxMC0wNy0yMCAxNjoxMToyNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBkZW1vdGUgV0FSTklORyBtZXNzYWdlIHRvIExPRyBsZXZlbAotCSAgSXQncyBub3QgYSB3YXJuaW5nLgotCi0yMDEwLTA3LTE5IDE0OjQ3OjMyIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogRml4IHJlZ3Jlc3Npb24gb24gbWFya2VycyBwYXJzaW5nCi0JICBGaXhlcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCB3aGVuIGZpeGluZyBidWcgIzU4MzA0NyBpbgotCSAgY29tbWl0IGEzOTFiZjUyY2MzYzU4MGM3YTBhMjMxNmNhNTJlYjY2ZGEzYjg1YzEKLQkgIFNraXAgdGhlIGRhdGEgd2hlbiBsaWJqcGVnIGFza3MgaXQgdG8gYmUgc2tpcHBlZCBvbgotCSAgb25lIG9mIGl0cyBjYWxsYmFja3MuCi0KLTIwMTAtMDctMTYgMTg6MDQ6NDQgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGFkZCBtaXNzaW5nIGFyZ3VtZW50IGluIGRlYnVnIG1lc3NhZ2UKLQotMjAxMC0wNy0xNiAxNzo1Mzo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNpbms6IE9ubHkgdXNlIGdzdF9hdWRpb19jbG9ja19uZXcoKSB3aGVuIGNvbXBpbGluZyBhZ2FpbnN0IG5ld2VyIGJhc2UKLQotMjAxMC0wNy0wOSAxNzozMzo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgZHYxMzk0c3JjOiBQb3N0IGNsb2NrLXByb3ZpZGUgYW5kIGNsb2NrLWxvc3QgbWVzc2FnZXMgd2hlbiBnb2luZyBmcm9tL3RvIFBMQVlJTkcKLQkgIEluIFBBVVNFRCBhbmQgYmVsb3cgdGhlIGNsb2NrIGlzIG5vdCB3b3JraW5nLgotCi0yMDEwLTA3LTA0IDE2OjU3OjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzoKLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmg6Ci0JKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc3JjLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc3JjLmg6Ci0JICBnY29uZjogRml4IHJlZiBoYW5kbGluZyBvZiBuZXcgY2hpbGQgZWxlbWVudHMgYW5kIG1pbm9yIGNsZWFudXAKLQotMjAxMC0wNy0wNCAwOTo0NTo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc3JjLmM6Ci0JICBnY29uZnZpZGVvc3JjOiBVc2UgY29ycmVjdCBHQ29uZiBrZXkKLQotMjAxMC0wNy0wMyAxNDoxNjo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc3JjLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5oOgotCSAgZ2NvbmY6IFBvcnQgZ2NvbmZhdWRpb3NyYyB0byBHc3RTd2l0Y2hTcmMKLQotMjAxMC0wNy0wMyAxNDoxMjoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc3JjLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5oOgotCSAgZ2NvbmY6IFBvcnQgZ2NvbmZ2aWRlb3NyYyB0byBHc3RTd2l0Y2hTcmMKLQotMjAxMC0wNy0wMyAxNDoxMTo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9NYWtlZmlsZS5hbToKLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzcmMuYzoKLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzcmMuaDoKLQkgIGdjb25mOiBBZGQgR3N0U3dpdGNoU3JjIGJhc2UgY2xhc3MKLQotMjAxMC0wNy0wMyAxMzo1NjozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmM6Ci0JICBnY29uZjogQ3JlYXRlIHRoZSBnaG9zdHBhZCBvZiB0aGUgc3dpdGNoc2luayBmcm9tIHRoZSB0ZW1wbGF0ZQotCi0yMDEwLTA3LTA3IDEwOjEwOjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBQb3N0IGNsb2NrLXByb3ZpZGUvY2xvY2stbG9zdCB3aGVuIGdvaW5nIHRvL2Zyb20gUEFVU0VECi0JICBBbHNvIHVzZSBnc3RfYXVkaW9fY2xvY2tfbmV3X2Z1bGwoKSB0byBwcmV2ZW50IGNyYXNoZXMgd2hlbiB0aGUKLQkgIGNsb2NrIGlzIHVzZWQgYWZ0ZXIgdGhlIGVsZW1lbnQgd2FzIGRlc3Ryb3llZC4KLQotMjAxMC0wNy0xNSAxMTo0OTowMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogcmVtb3ZlIGJvZ3VzIFVOTE9DSwotCi0yMDEwLTA3LTEzIDEyOjM0OjQ0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWxzbyBjYWxjdWxhdGUgUEFSIHVzaW5nIHRyYWNrIHdpZHRoIGFuZCBoZWlnaHQgZm9yIFFUIGZpbGVzCi0JICAoLi4uIGFzIG9wcG9zZWQgdG8gb25seSBmb3IgSVNPIHN0eWxlIGZpbGVzKS4KLQkgIEZpeGVzICM2MjQxNzMuCi0KLTIwMTAtMDctMTIgMTc6Mjk6MTIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGhhbmRsZSBib2d1cyBmaWxlcyBzdG9yaW5nIEFEVFMgQUFDIGRhdGEKLQotMjAxMC0wNy0wOSAxNjo1NzozMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZG8gbm90IGVycm9yIG91dCBvbiBhIGJsb2NrIHdpdGggdW5rbm93biB0cmFja251bWJlcgotCi0yMDEwLTA3LTA4IDE4OjU3OjIxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG8gbm90IGFsaWduIHJldmVyc2UgcGxheWJhY2sgcmVmZXJlbmNlIHN0cmVhbSB0d2ljZQotCSAgVGltZXN0YW1wIHJvdW5kaW5nIGlzc3VlcyBjb3VsZCBsZWFkIHRvIGdvaW5nIGJhY2t3YXJkcyAyIGtleWZyYW1lIHBlcmlvZHMKLQkgIChyYXRoZXIgdGhhbiBvbmx5IDEpLiAgV2hpbGUgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYSBwcm9ibGVtLCBpdCBtaWdodAotCSAgcG90ZW50aWFsbHkgcGxhY2UgYWRkaXRpb25hbCAoYnVmZmVyaW5nKSBsb2FkIG9uIGRvd25zdHJlYW0gYW5kIGNvdWxkIGJlCi0JICBhdm9pZGVkIChiZWNhdXNlIFdlIENhbikuCi0JICBGaXhlcyAjNjIzNjI5LgotCi0yMDEwLTA3LTA4IDE2OjA3OjE2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogY29udmVydCBzb21lIG1vcmUgbW92IGZvcm1hdCB0aW1lc3RhbXAgdG8gZ3N0IHRpbWUKLQotMjAxMC0wNy0wNyAxNDoxNjo1OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBhZGRpdGlvbmFsIHZlcmlmaWNhdGlvbiBoZXVyaXN0aWNzIGZvciBWQlIgYXVkaW8gc3RyZWFtCi0JICBDaGVjayBmb3IgYW5kIG92ZXJyaWRlIHNvbWUgaGVhZGVyIGZpZWxkKHMpIGZvciByZWFzb25hYmxlIHZhbHVlcywgYWNjb3JkaW5nCi0JICB0byBsYXRlciBleHBlY3RlZCB1c2UgaW4gY2FsY3VsYXRpb25zLgotCi0yMDEwLTA3LTE0IDE1OjIxOjIxICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kQGdtYWlsLmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgdmlkZW9iYWxhbmNlOiBGaXggd3JvbmcgbG9jayBvcmRlciB0aGF0IGNvdWxkIGxlYWQgdG8gYSBkZWFkbG9jay4gRml4ZXMgIzYyNDMzMS4KLQotMjAxMC0wNy0xNiAxMTozMTowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuMTAuMjQgPT09Ci0KLTIwMTAtMDctMTUgMDE6NDk6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjI0Ci0KLTIwMTAtMDctMTUgMDE6MzU6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9jcy5wbzoKLQkqIHBvL2x2LnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wNy0wNyAwMDo0Mjo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4yMy40IHByZS1yZWxlYXNlCi0KLTIwMTAtMDctMDcgMDA6MzE6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vZGEucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vc2wucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wNi0yMyAxMTo0Nzo0MyArMDIwMCAgTWljaGFlbCBHcnplc2NoaWsgPG0uZ3J6ZXNjaGlrQHBlbmd1dHJvbml4LmRlPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IGRlc3Ryb3kgYnVmZmVyIHBvb2wgd2hlbiBjaGFuZ2luZyBzdGF0ZSB0byBOVUxMCi0JICBJbiB0aGUgY2FzZSB3ZSBjaGFuZ2UgdGhlIFN0YXRlIGZyb20gUkVBRFlfVE9fTlVMTCB0aGUgYnVmZmVycyBpbiB0aGUgcG9vbAotCSAgc3RpbGwgaG9sZCBhbiBvcGVuIGR1cCBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlIGRldmljZSwgdGhlcmVmb3JlIHRoZSBkZXZpY2UKLQkgIHJlbGVhc2UgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkIGFuZCB0aGUgZGV2aWNlIHdpbGwgcHJvYmFibHkgYW5zd2VyIHdpdGgKLQkgIC1FQlVTWSB3aGVuIHdlIHJlb3BlbiBpdCBpbiB0aGUgbmV4dCBOVUxMX1RPX1JFQURZIHRyYW5zaXRpb24uCi0JICBTaWduZWQtb2ZmLWJ5OiBNaWNoYWVsIEdyemVzY2hpayA8bS5ncnplc2NoaWtAcGVuZ3V0cm9uaXguZGU+Ci0JICBTZWUgYnVnICM2MjI1MDAgYW5kICM2MTIyNDQuCi0KLTIwMTAtMDctMDYgMTM6MjE6MTkgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggb3JkZXIgb2YgYml0cmF0ZXMgaW4gJ2J0cnQnIGF0b20KLQkgIFRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIGxpYm1wNHYyIHRoYXQgZ2VuZXJhdGVzIGEgTVBFRzRCaXRSYXRlQm94IGFzCi0JICAoYnVmZmVyU2l6ZURCLCBhdmdCaXRyYXRlLCBtYXhCaXRyYXRlKSBpbnN0ZWFkIG9mIChidWZmZXJTaXplREIsCi0JICBtYXhCaXRyYXRlLCBhdmdCaXRyYXRlKSwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLiBJIHVzZWQgdGhlIG1wNGZpbGUKLQkgIG91dHB1dCB3aGlsZSB3cml0aW5nIHRoaXMgY29kZSwgc28gdGhlIG9yZGVyIGlzIHdyb25nLiBUaGlzIHBhdGNoZXMKLQkgIGZpeGVzIHRoYXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNjU0Ci0KLTIwMTAtMDctMDUgMTI6MDU6NTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBmaXggc2tpcHBpbmcgZXh0cmEgMHhmZiBtYXJrZXJzCi0JICBGaXhlcyAjNjIzNTg1LgotCi0yMDEwLTA2LTI5IDIzOjE4OjIzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAganBlZ2RlYzogZml4IG1lbW9yeSBsZWFrCi0JICBEb24ndCBsZWFrIHJlc3VsdCBvZiBnc3RfYWRhcHRlcl90YWtlKCkuIFRoZXJlIGFyZSBtb3N0IGxpa2VseQotCSAgc21hcnRlciB0aGluZ3Mgd2UgY2FuIGRvLCBidXQgbGV0J3Mga2VlcCB0aGluZ3Mgc2ltcGxlIGZvciB0aGUKLQkgIHJlbGVhc2UuCi0JICBGaXhlcyAjNjIzMTcyLgotCi0yMDEwLTA3LTAyIDEyOjMxOjMxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzdHJpcCBvdXQgYm9ndXMgdGFncyBmcm9tIFhNUCBhdG9tCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzMzY2Ci0KLTIwMTAtMDctMDIgMTQ6MjU6MjIgKzAyMDAgIEFuZHJ6ZWogSy4gSGFjemV3c2tpIDxhaGFjemV3c2tpQGdtYWlsLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogV3JpdGUgZHVyYXRpb24gYXQgdGhlIGNvcnJlY3QgcG9zaXRpb24KLQotMjAxMC0wNi0zMCAxMToxMjowOCArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSAgcnRwcHRkZW11eDogZml4IG1lbWxlYWsgb24gY3VzdG9tIGRvd25zdHJlYW0gZXZlbnRzCi0JICBieSBub3Qgc2VuZGluZyBjdXN0b20gZG93bnN0cmVhbSBldmVudCB0d2ljZSBhbmQgZml4IG1lbWxlYWsgd2hlbgotCSAgbm90IGhhbmRsaW5nIHRoZSBldmVudAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzE5NgotCi0yMDEwLTA2LTI5IDIwOjE4OjUxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjMuMyBwcmUtcmVsZWFzZQotCi0yMDEwLTA2LTI5IDIwOjE0OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogZml4IHVucG9ydGFibGUgcHJpbnRmIGZvcm1hdCBzcGVjaWZpZXJzIGluIGNvbW1lbnRlZCBvdXQgY29kZQotCSAgVG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdoZW4gZ3JlcHBpbmcgZm9yIHVucG9ydGFibGUgc3BlY2lmaWVycy4KLQotMjAxMC0wNi0yOSAxOToxMjozNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZml4IC0tZGlzYWJsZS1leHRlcm5hbAotCi0yMDEwLTA2LTI4IDE1OjQ0OjA2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgYXV0b21ha2UgcmVxdWlyZW1lbnQgdG8gMS4xMCBhbmQgYXV0b2NvbmYgdG8gMi42MAotCSAgRm9yIG1haW50YWluYWJpbGl0eSByZWFzb25zIGFuZCAkKGJ1aWxkZGlyKS4KLQkgIFNlZSAjNjIyOTQ0LgotCi0yMDEwLTA2LTI4IDA5OjA3OjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2dvb20vcGx1Z2luX2luZm8uYzoKLQkgIGdvb206IGRvbid0IGFsbG9jYXRlIDI2MGtCIHN0cnVjdCBvbiB0aGUgc3RhY2sKLQkgIFBsdWdpbkluZm8gaXMgcXVpdGUgYSBzaXplYWJsZSBzdHJ1Y3QsIGxldCdzIG5vdCBhbGxvY2F0ZSBpdCBvbiB0aGUKLQkgIHN0YWNrLCBlc3BlY2lhbGx5IG5vdCBpZiB3ZSdyZSBjb3B5aW5nIGl0IG92ZXIgaW50byBhbm90aGVyIGR5bmFtaWNhbGx5Ci0JICBhbGxvY2F0ZWQgY29weSBhbnl3YXkuCi0JICBGaXhlcyAjNTcwNzYxLgotCi0yMDEwLTA2LTI3IDEwOjMxOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBSZXF1aXJlIEdUSysgPj0gMi4xNCBmb3IgdGhlIGV4YW1wbGVzCi0KLTIwMTAtMDYtMjYgMjA6MTI6MjUgKzAyMDAgIEd1aWRvIEfDvG50aGVyIDxhZ3hAc2lneGNwdS5vcmc+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgIGV4YW1wbGVzOiBNYWtlIGRlbW9zIC1EU0VBTCBzYWZlIHRvIGZpeCBidWlsZCB3aXRoIEdUSysgMy4wCi0KLTIwMTAtMDYtMjYgMjE6Mzk6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9NYWtlZmlsZS5hbToKLQkgIGpwZWc6IEV4cGxpY2l0ZWx5IGxpbmsgd2l0aCBsaWJnc3RiYXNlCi0KLTIwMTAtMDYtMjYgMTg6NDI6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICAwLjEwLjIzLjIgcHJlLXJlbGVhc2UKLQotMjAxMC0wNi0yNiAxODo0MTo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0Lmg6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLWRpc3QuaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkgIGdzdDogdXBkYXRlIG9yYyBmaWxlcwotCi0yMDEwLTA2LTI2IDE4OjQxOjM5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wNi0yNSAxOTo0MDowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBGaXggbGVha2luZyBvZiB0aGUgc3RyZWFtaGVhZGVyIGJ1ZmZlcnMKLQkgIGdzdF92YWx1ZV9zZXRfYnVmZmVyKCkgaW5jcmVhc2VzIHRoZSByZWZjb3VudCBhbmQgZG9lc24ndAotCSAgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlci4KLQotMjAxMC0wNi0yNCAxNjozMjoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgbWF0cm9za2EsIHZpZGVvYm94LCB2aWRlb2ZpbHRlcjogZml4IGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gZGVidWdnaW5nIGlzIGRpc2FibGVkIGluIGdzdHJlYW1lcgotCSAgRml4ZXMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzIHdoZW4gR1N0cmVhbWVyJ3MgZGVidWdnaW5nIHN5c3RlbSBoYXMgYmVlbiBkaXNhYmxlZC4KLQotMjAxMC0wNi0yNCAxNToxNzoxMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGFkZCBwbHVnaW4gbG9hZGluZyB3aGl0ZWxpc3QgdG8gdGVzdCBlbnZpcm9ubWVudAotCSAgT25seSB3YW50IHRvIGxvYWQgY29yZS9iYXNlL2dvb2QgcGx1Z2lucyBoZXJlLgotCSAgRml4ZXMgIzYxOTcxNy4KLQotMjAxMC0wNi0yNCAxNTowOToxNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNzNmZjkzYSB0byBhNTE5NTcxCi0KLTIwMTAtMDYtMjQgMTM6MDI6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkgIGdka3BpeGJ1ZmRlYzogYnVtcCByYW5rIHRvIFNFQ09OREFSWQotCSAgQnVtcCBnZGtwaXhidWZkZWMncyByYW5rIHRvIFNFQ09OREFSWSB0byBnaXZlIGl0IGFuIGVkZ2Ugb3ZlciBtaXNjLgotCSAgaW1hZ2UgZGVjb2RlcnMgaW4gZ3N0LWZmbXBlZyB0aGF0IGFsc28gaGF2ZSBhIE1BUkdJTkFMIHJhbmsuCi0JICBGaXhlcyAjNjIwMTYyLgotCi0yMDEwLTA2LTIzIDEyOjE1OjEzICswMjAwICBNaWNoYWVsIEdyemVzY2hpayA8bS5ncnplc2NoaWtAcGVuZ3V0cm9uaXguZGU+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIHJlc2V0IHRoZSBoYXZlX2luZGV4IGZsYWcgYXQgdHJhbnNpdGlvbiBQQVVTRURfVE9fUkVBRFkKLQkgIElmIHdlIHJlc3RhcnQgdGhlIFN0cmVhbSBpbiB0aGUgY2FzZSBvZiBkb2luZyBhIHRyYW5zaXRpb24gZnJvbQotCSAgUEFVU0VEX1RPX1JFQURZIGFuZCBiYWNrIHdpdGggUkVBRFlfVE9fUEFVU0VEIGFzby4gdGhlIGR1cmF0aW9uIG9mIHRoZSB2aWRlbwotCSAgd2lsbCBnZXQgY2FsY3VsYXRlZCBldmVuIGlmIHdlIGhhdmUgYSBhdmkgaGVhZGVyIHdpdGggdGhhdCBpbmZvcm1hdGlvbi4KLQkgIFNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgR3J6ZXNjaGlrIDxtLmdyemVzY2hpa0BwZW5ndXRyb25peC5kZT4KLQotMjAxMC0wNi0yMyAyMDoyOToxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEZpeCBuZWdvdGlhdGlvbiBmb3IgSTQyMC9ZVjEyCi0JICBXZSBkb24ndCBzdXBwb3J0IGNvbnZlcnNpb24gaW50byAqYWxsKiBZVVYKLQkgIGZvcm1hdHMgZm9yIHRoZW0sIG9ubHkgaW50byBJNDIwL1lWMTIvQVlVVi4KLQkgIEZpeGVzIGJ1ZyAjNjIyNTAxLgotCi0yMDEwLTA2LTIyIDE1OjIyOjQ0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogcHJvcGVyIGNsb3Npbmcgc2VnbWVudCBjb25zdHJ1Y3Rpb24KLQkgIEZpeGVzICM2MTg5ODIuCi0KLTIwMTAtMDYtMjIgMTU6NDY6NTEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMjogcHJlY2FsY3VsYXRlIGR1cmF0aW9uCi0JICBIYXZlIGZyYW1lIGR1cmF0aW9uIGluIHRoZSBpbnN0YW5jZSBzdHJ1Y3QgYW5kIGNhbGN1bGF0ZSBpdCBhZnRlciBjaGFuZ2luZyB0aGUgY2Fwcy4KLQotMjAxMC0wNi0yMSAxMjoxNzozOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSAgdjRsMnNpbms6IHVzZSBnbGliIGRlZmluZXMgaW4gcHJvcGVydHkgZGVjbGFyYXRpb25zIGZvciByZWFkYWJpbGl0eQotCi0yMDEwLTA2LTIxIDEyOjE1OjE0ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiB1c2UgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB0byBzYXZlIGEgZmV3IGJ5dGVzIGFuZCBzdHJkdXBzCi0KLTIwMTAtMDYtMTggMjA6MDI6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBsb2NraW5nIGFmdGVyIG1vdmluZyB0aGluZ3MgYXJvdW5kCi0KLTIwMTAtMDYtMTggMTQ6MTM6NTggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvdGFnbGliL2dzdGFwZXYybXV4LmNjOgotCSAgdGFnbGliOiBVc2UgbmV3bHkgYWRkZWQgZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4Ci0JICBSZXBsYWNlIGNhbGxzIHRvIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IHdpdGgKLQkgIGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCB0byBhdm9pZCBhIHN0cmluZyBjb3B5Ci0KLTIwMTAtMDYtMTggMTY6NTY6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG1ha2Ugc29tZSBlcnJvcnMgYXMgd2FybmluZ3MKLQkgIEF2b2lkIHNwYW1taW5nIHRoZSB0ZXN0c3VpdGUgd2l0aCB0aGVzZSBlcnJvciBkZWJ1ZyBsaW5lcy4KLQotMjAxMC0wNi0xOCAxNjo0OTowOCArMDIwMCAgS2VpdGggTmljaG9sc29uIDxrZWl0aC5uaWNob2xzb24gYXQgdWx0cmEtY2NzLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogZml4IG11bHRpY2FzdCBzdXBwb3J0IG9uIHdpbmRvd3MgYnVpbGRzCi0JICBPbiB3aW5kb3dzIGJ1aWxkcywgc2V0cyBzb3VyY2UgYWRkcmVzcyBmb3IgYmluZCB0byBJTkFERFJfQU5ZLCB3aGlsZQotCSAgbWFpbnRhaW5pbmcgdGhlIG9yaWdpbmFsIG11bHRpY2FzdCBncm91cCBhZGRyZXNzIGZvciBzdWJzZXF1ZW50IGpvaW4uCi0JICBGaXhlcyAjNTk1OTc4Ci0KLTIwMTAtMDYtMTggMTY6MTY6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkgIHVkcDogbWFrZSB1cmwgcGFyc2luZyBjb21wYXRpYmxlIHdpdGggVkxDIHN5bnRheAotCSAgU2tpcCBldmVyeXRoaW5nIGJlZm9yZSB0aGUgQCBzaWduIGluIHRoZSB1cmwgbG9jYXRpb24uIFZMQyB1c2VzIHRoYXQgYXMgdGhlCi0JICByZW1vdGUgYWRkcmVzcyB0byBjb25uZWN0IHRvIChidXQgd2UgaWdub3JlIGl0IGZvciBub3cpLiBUaGlzIG1ha2VzIG91ciB1ZHAgdXJscwotCSAgY29tcGF0aWJsZSB3aXRoIHRoZSBvbmVzIHVzZWQgYnkgVkxDLgotCSAgRml4ZXMgIzU5NzY5NQotCi0yMDEwLTA2LTE4IDE1OjA4OjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBmYWN0b3Igb3V0IHRoZSBjb25uZWN0aW9ucwotCSAgS2VlcCBhIGdsb2JhbCBjb25uZWN0aW9uIGZvciBhZ2dyZWdhdGUgY29udHJvbCBidXQgYWxzbyBrZWVwIHN0cmVhbSBjb25uZWN0aW9ucwotCSAgZm9yIG5vbi1hZ2dyZWdhdGUgY29udHJvbC4KLQkgIEFkZCBzb21lIGhlbHBlciBtZXRob2RzIHRvIGNvbm5lY3QvY2xvc2UvZmx1c2ggdGhlIGNvbm5lY3Rpb25zLgotCi0yMDEwLTA2LTE3IDEzOjA2OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgbm9uLWFnZ3JlZ2F0ZSBjb250cm9sCi0JICBBZGQgbm9uLWFnZ3JlZ2F0ZSBjb250cm9sLgotCSAgU2VwYXJhdGUgcmV0cmlldmluZyB0aHIgU0RQIGZyb20gcGFyc2luZyBhbmQgc2V0dGluZyB1cCB0aGUgc3RyZWFtaW5nIGZyb20gdGhlCi0JICBTRFAuCi0KLTIwMTAtMDYtMTcgMjI6MTA6MDMgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkgIGNvbW1vbjogdXBkYXRlIGNvbW1vbiBiYWNrIHRvIHdoYXQgaXQgd2FzCi0KLTIwMTAtMDYtMTcgMTc6MjQ6MjIgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IGFkZCBkb2N1bWVudGF0aW9uIGZvciBzdHJlYW1hYmxlIHByb3BlcnR5Ci0KLTIwMTAtMDYtMTcgMTY6NDM6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgZG9jczogdXBkYXRlIGludHJvc3BlY3RlZCBwbHVnaW4gZG9jcyBmb3IgZ3N0ZG9jLXNjYW5nb2JqIGFuZCBvdGhlciBjaGFuZ2VzCi0JICBVcGRhdGUgY29tbW9uIGZvciBsYXRlc3QgZ3N0ZG9jLXNjYW5nb2JqLCBhbmQgaW5zcGVjdCB4bWwgZmlsZXMgZm9yCi0JICBlc2NhcGluZyBhbmQgcGFkIHRlbXBsYXRlIG9yZGVyIGNoYW5nZXMuCi0KLTIwMTAtMDYtMTcgMTY6NDE6NTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay8uZ2l0aWdub3JlOgotCSAgdGVzdHM6IGlnbm9yZSBzdWItZGlyZWN0b3J5IHdpdGggb3JjIHRlc3RzCi0KLTIwMTAtMDYtMTcgMTA6NDQ6MzMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEZpeCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGNvbXBpbGVyIHdhcm5pbmcKLQotMjAxMC0wNi0xNiAyMTowMjoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkgIGVibWwtcmVhZDogWmVyby1zaXplZCBpbnRzL3VpbnRzL2Zsb2F0cyBoYXZlIGEgdmFsdWUgb2YgMCBhY2NvcmRpbmcgdG8gdGhlIEVCTUwgc3BlYwotCi0yMDEwLTA2LTE2IDIwOjAyOjU4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBGaXggcG9zc2libGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFuZCBhc3NlcnRpb24gdGhhdCBjb3VsZCBiZSBjYXVzZWQgYnkgaW52YWxpZCBmaWxlcwotCi0yMDEwLTA2LTE2IDE5OjUwOjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBDbGVhbiB1cC9maXggc29tZSBtaW5vciBlcnJvciBoYW5kbGluZyBidWdzCi0KLTIwMTAtMDYtMTYgMTk6MzA6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWxsb2NhdGlvbiBvZiB0aGUgeGltYWdlIGZhaWxzCi0KLTIwMTAtMDYtMTYgMTk6Mjg6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JICBmbGFjdGFnOiBGaXggcG9zc2libGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlCi0KLTIwMTAtMDYtMTYgMTk6MjQ6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5jOgotCSAgYXVkaW9paXJmaWx0ZXI6IEZpeCBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UKLQotMjAxMC0wNi0xNiAxOToyMDowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQkgIHdhcnB0djogRG9uJ3QgdXNlIGZsb2F0cyBhcyBsb29wIGNvdW50ZXJzCi0KLTIwMTAtMDYtMTYgMTE6MjE6MzUgLTA0MDAgIEhhdm9jIFBlbm5pbmd0b24gPGhwQHBvYm94LmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogZG8gbm90IHRyeSB0byBjaGFuZ2UgZGV2aWNlIGZvcm1hdCBpZiBpdCdzIGFscmVhZHkgY29ycmVjdAotCSAgVGhpcyBhbGxvd3Mgc2V0X2NhcHMgdG8gc3VjY2VlZCBpZiBjYXBzIGNoYW5nZSBpbiBhIHdheSB0aGF0Ci0JICB3b3VsZCBub3QgbW9kaWZ5IHRoZSBmb3JtYXQgd2UncmUgZ2V0dGluZyBmcm9tIHRoZSBoYXJkd2FyZS4KLQkgIE90aGVyd2lzZSBpZiBub3QgaW4gTlVMTCBzdGF0ZSwgc2V0dGluZyBjYXBzIHdvdWxkIGZhaWwKLQkgIHdpdGggRUJVU1kuCi0JICBXaXRoIHRoaXMgY2hhbmdlLCBpbiBzb21lIGNhc2VzIGl0J3MgT0sgdG8gZ28gUExBWUlORy0+UkVBRFktPlBMQVlJTkcKLQkgIHJhdGhlciB0aGFuIFBMQVlJTkctPk5VTEwtPlBMQVlJTkcgdG8gYXZvaWQgYSB0aW1lLWNvbnN1bWluZyBjbG9zZQotCSAgYW5kIHJlb3BlbiBvZiB0aGUgZGV2aWNlLgotCSAgRml4ZXMgIzYyMTcyMwotCi0yMDEwLTA2LTE2IDExOjA5OjE3IC0wNDAwICBIYXZvYyBQZW5uaW5ndG9uIDxocEBwb2JveC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IGluIG5lZ290aWF0ZSwgY2hlY2sgZm9yIGVycm9yIHJldHVybiBmcm9tIHNldF9jYXBzCi0JICBGaXhlcyAjNjIxNzIzICAocGFydGlhbGx5KQotCSAgc2V0X2NhcHMgY2FuIGZhaWwgaWYgdGhlIHZpZGVvIGRldmljZSBpcyBydW5uaW5nLCBpbiB0aGF0IGNhc2UKLQkgIHNldHRpbmcgaXRzIGZvcm1hdCBsZWFkcyB0byBFQlVTWS4KLQkgIElmIHNldF9jYXBzIGZhaWxzIHRoZW4gd2Ugd2lsbCBub3QgaGF2ZSBzZXQgdXAgdGhlIGJ1ZmZlciBwb29sCi0JICAoaXQgd2lsbCBiZSBOVUxMKSB3aGljaCBsZWFkcyB0byBhIGNyYXNoIHdoZW4gd2UgdHJ5IHRvIHB1bGwKLQkgIGJ1ZmZlcnMuIElmIHdlIGZhaWwgdGhlIG5lZ290aWF0ZSBvbiBzZXRfY2FwcyBmYWlsdXJlLCB0aGVuIHdlCi0JICB3b24ndCBnbyB0byBwbGF5aW5nIHN0YXRlIGFuZCB3b24ndCBjcmFzaC4KLQkgIFRoaXMgaXMgYSBzbWFsbCBpbXByb3ZlbWVudC4gT2YgY291cnNlLCBhIG5pY2VyIGZpeCB3b3VsZAotCSAgYmUgdG8gbWFrZSBzZXRfY2FwcyB3b3JrIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBmb3JtYXQgaXMKLQkgIHVuY2hhbmdlZC4gSWYgdGhlIGZvcm1hdCBoYXMgY2hhbmdlZCwgZmFpbGluZyBpcwotCSAgcHJvYmFibHkgY29ycmVjdCBiZWNhdXNlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIGRldmljZQotCSAgKGdvIHRvIE5VTEwgc3RhdGUpIGluIG9yZGVyIHRvIHNldCBjYXBzLgotCi0yMDEwLTA2LTE2IDE1OjQwOjM0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGltcHJvdmUgYXVkaW8gdmJyIGRldGVjdGlvbgotCSAgU3Vic2VxdWVudCBlbnRyeSB0aW1lIGNhbGN1bGF0aW9ucyB1c2UgYmxvY2thbGlnbiB2YWx1ZSB0byBkZXRlcm1pbmUKLQkgIG51bWJlciBvZiBmcmFtZXMgcGVyIGNodW5rLCBhbmQgYmxvY2thbGlnbiA9PSAxIGlzIHRoZW4gbW9zdCB1bmxpa2VseSB0byByZXN1bHQKLQkgIGluIHJlYXNvbmFibGUgdmFsdWVzICh3aGljaCBhbHNvIGFsaWducyB3aXRoICJzcGVjIikuCi0KLTIwMTAtMDYtMTYgMTU6NTI6NTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiB0d2VhayBERUxUQV9VTklUIGxhYmVsaW5nCi0JICBDb25zaWRlciBTUFMsIFBQUyBhbmQgSURSIGFzIGtleWZyYW1lLCBhbGwgb3RoZXJzIGFzIERFTFRBX1VOSVQuCi0JICBTZWUgIzYyMDE1NC4KLQotMjAxMC0wNi0xNSAyMDowNjoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzoKLQkgIHdhdnBhY2tkZWM6IEluaXRpYWxpemUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhbmQgZG9uJ3QgdW5yZWYgaXQgaWYgaXQncyBOVUxMCi0KLTIwMTAtMDYtMTUgMjA6MDQ6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogQXNzaWduIHZhcmlhYmxlcyBiZWZvcmUgcHJpbnRpbmcgdGhlbQotCi0yMDEwLTA2LTE1IDIwOjAwOjI4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogSW5pdGlhbGl6ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlCi0KLTIwMTAtMDYtMTUgMTk6NDc6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBJbml0aWFsaXplIHZhcmlhYmxlCi0KLTIwMTAtMDYtMTUgMTk6NDU6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBGaXggTkVXU0VHTUVOVCBwYXJzaW5nIGxvZ2ljIGFuZCBkb24ndCB1c2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKLQotMjAxMC0wNi0xNSAxNzoyMDoyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSAgbWF0cm9za2E6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZQotCi0yMDEwLTA2LTE1IDE2OjQ5OjQ5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gOTMzOWNjYyB0byAzNTYxN2MyCi0KLTIwMTAtMDYtMTUgMTY6NTQ6MDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDVhZGIxY2EgdG8gOTMzOWNjYwotCi0yMDEwLTA2LTE1IDE2OjM1OjE4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA1N2M4OWI3IHRvIDVhZGIxY2EKLQotMjAxMC0wNi0xNSAxNDowODoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBpZ25vcmUgZ2VuZXJhdGVkIHR2dGltZS5oIGZpbGUKLQotMjAxMC0wNi0xNSAxNTozNjozMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYzgwNDk4OCB0byA1N2M4OWI3Ci0KLTIwMTAtMDUtMTcgMTM6NTQ6MDMgKzAyMDAgIE1hcmMtQW5kcsOpIEx1cmVhdSA8bWx1cmVhdUBmbHVtb3Rpb24uY29tPgotCi0JKiBleHQvcmF3MTM5NC9nc3QxMzk0Y2xvY2suYzoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTRjbG9jay5oOgotCSAgcmF3MTM5NDogcmVtb3ZlIHVzZWxlc3MgbGFzdF90aW1lCi0JICBJdCBzZWVtcyB0byBtZSB0aGlzIGNvZGUgaXMgdXNlbGVzczogcmVtb3ZpbmcgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE4ODcxCi0KLTIwMTAtMDYtMTQgMTk6MjE6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IHJlc3BlY3QgYWdncmVnYXRlIGNvbnRyb2wgYXR0cmlidXRlcwotCSAgd2hlbiB0aGUgU0RQIHNwZWNpZmllcyBhbiBhZ2dyZWdhdGUgY29udHJvbCB1cmwsIHVzZSB0aGF0IGZvciBwbGF5YmFjawotCSAgY29udHJvbC4KLQkgIEZpeGVzICM2MTk1MzEKLQotMjAxMC0wNi0xNCAxNTozNjowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgIGdvb206IENhbGwgb3JjX2luaXQoKSBiZWZvcmUgdHJ5aW5nIHRvIGdldCB0YXJnZXQgZmxhZ3MKLQotMjAxMC0wNi0xNCAxNTozNTowOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IENhbGwgb3JjX2luaXQoKSBiZWZvcmUgdHJ5aW5nIHRvIGdldCB0YXJnZXQgZmxhZ3MKLQotMjAxMC0wNi0xNCAxNDoyNjoyMiArMDEwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkgIG1hdHJvc2thbXV4OiByZXZlcnQgY2hhbmdlIHRoYXQgc2V0IGEgcmVzZXJ2ZWQgZmxhZyBvbiB0aGUgQmxvY2suCi0JICBTbyBtYXRyb3NrYSdzIEJsb2NrIHN0cnVjdHVyZSBoYXMgbm8ga2V5ZnJhbWUgZmxhZywgb25seSB0aGUgU2ltcGxlQmxvY2sgaGFzIGl0LgotCSAgVG8gZGV0ZWN0IGtleWZyYW1lcyBpbiBCbG9ja3MsIGl0IGlzIGp1c3QgdGhlIEJsb2NrR3JvdXAgY29udGFpbmVyIHRoYXQgbmVlZHMKLQkgIHRvIGhhdmUgYSBSZWZlcmVuY2VCbG9jayBhdHRhY2hlZCBpZiBpdCBpcyBhIGRlbHRhIGZyYW1lIGluIHZpZGVvLgotCi0yMDEwLTA1LTMxIDEyOjQ1OjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAganBlZ2RlYzogdXNlIGxpYmpwZWcgc2NhdHRlci1nYXRoZXIgb3BlcmF0aW9uIHRvIGF2b2lkIGRhdGEgY29weWluZwotCSAgRml4ZXMgIzU4MzA0NyAobW9yZSkuCi0KLTIwMTAtMDUtMjcgMTU6NDU6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiBvcHRpbWl6ZSBidWZmZXIgaGFuZGxpbmcgd2hlbiBwYXJzaW5nCi0JICBVc2UgYW4gYWRhcHRlciB0byBjb2xsZWN0IGluY29taW5nIGRhdGEsIGFuZCB1c2UgYWRhcHRlciBBUEkgdG8gc2NhbiBhbmQgcGVlay4KLQkgIEZpeGVzICM1ODMwNDcuCi0KLTIwMTAtMDYtMTQgMTM6NDg6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICBvc3M0OiBVc2UgZ19hc2NpaV9zdHJjYXNlY21wKCkgaW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZCBnX3N0cmNhc2VjbXAoKQotCi0yMDEwLTA2LTE0IDEzOjI3OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBVc2UgR0xJQl9FWFRSQV9DRkxBR1MKLQotMjAxMC0wNi0xNCAxMzowMzo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA3YTBmZGY1IHRvIGM4MDQ5ODgKLQotMjAxMC0wNi0xNCAxMTo0NjozMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IGFsc28gY29uc2lkZXIgQVUgYW5kIFNFSSBOQUxVcyBhcyBERUxUQV9VTklUCi0JICBGaXhlcyAjNjIwMTU0LgotCi0yMDEwLTA2LTE0IDExOjMyOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDZkYTNiYWIgdG8gN2EwZmRmNQotCi0yMDEwLTA2LTEyIDIxOjI2OjE2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkgIGJ1aWxkOiBpbmNsdWRlIHN0ZGlvLmggZm9yIHNzY2FuZgotCi0yMDEwLTA2LTEyIDE0OjEyOjUwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogQWRkIGNsZWFuIHJ1bGUgZm9yIHRoZSBvcmMgdGVzdHMKLQotMjAxMC0wNi0xMiAxNDoxMjowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IEFkZCBhdXRvZ2VuZXJhdGVkIG9yYyB0ZXN0cwotCi0yMDEwLTA2LTEyIDA4OjI3OjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDczM2ZjYTkgdG8gNmRhM2JhYgotCi0yMDEwLTA2LTExIDE2OjIzOjI5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogRml4IGVsZW1lbnQgZGVzY3JpcHRpb24KLQotMjAxMC0wNi0xMSAyMToxMzo1OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkgIHJ0cG1wYXJvYnVzdGRlcGF5OiBkb24ndCB0cnkgdG8gdW5yZWYgTlVMTCBidWZmZXJzCi0JICBGaXhlcyBnZW5lcmljL3N0YXRlcyB1bml0IHRlc3QuCi0KLTIwMTAtMDYtMTEgMjA6NTA6MjMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiB1c2UgdHlwZWZpbmQgZnVuY3Rpb25zIHRvIGNoZWNrIGlmIFBDTSBkYXRhIGNvbnRhaW5zIGR0cyBzdHJlYW0KLQkgIFVzZSBuZXcgZHRzIGF1ZGlvIHR5cGVmaW5kZXIgZnJvbSAtYmFzZSB0byBjaGVjayBpZiB0aGUgUENNIGRhdGEKLQkgIGNvbnRhaW5zIGEgZHRzIHN0cmVhbS4gVGhpcyB3YXkgd2UgcmVjb2duaXNlIG1vcmUgdmFyaWV0aWVzIG1vcmUKLQkgIHJlbGlhYmx5IGFuZCBhbHNvIGRldGVjdCB0aGUgZHRzIHN0cmVhbSBpZiB0aGVyZSBpc24ndCBhIGZyYW1lCi0JICBzeW5jIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiB0aGUgZGF0YS4KLQkgIEZpeGVzICM0MTM5NDIuCi0KLTIwMTAtMDYtMTEgMjA6NDc6MjIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBzZXQgYnVmZmVyIG9mZnNldHMgYmVmb3JlIHVzaW5nIHRoZSBidWZmZXIgZm9yIHRoZSBmaXJzdCB0aW1lCi0JICBnc3RfdHlwZV9maW5kX2hlbHBlcl9mb3JfYnVmZmVyKCkgd2lsbCBuZWVkIHRoZSBjb3JyZWN0IG9mZnNldAotCSAgc2V0IG9uIHRoZSBidWZmZXIgKGllLiAwKSBhbmQgbm90IHRoZSBieXRlIG9mZnNldCB3ZSBzdGFydGVkCi0JICBwdWxsaW5nIHRoZSBkYXRhIGZyb20uCi0KLTIwMTAtMDYtMTAgMTY6MTQ6NDMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuaDoKLQkgIHJ0cDogYWRkIG1wYS1yb2J1c3QgZGVwYXlsb2FkZXIKLQkgIEZpeGVzICM1ODk5OTcuCi0KLTIwMTAtMDYtMTEgMTA6NTc6NDEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBmaXggYXZpIGhlYWRlciBieXRld3JpdGluZwotCSAgLi4uIGJ5IHVzaW5nIHByb3BlciBvZmZzZXRzIGZvciB0YWcgbGlzdCB3cml0aW5nLgotCSAgQWxzbyB1c2UgX3Jlc2V0IHJhdGhlciB0aGFuIF9mcmVlIGFuZCBjb25zaXN0ZW50bHkgdXNlIGJ5dGV3cml0ZXIgcG9zaXRpb24uCi0JICBTZWUgIzYxOTI5My4KLQotMjAxMC0wNi0xMCAyMjo1ODo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICBVcGRhdGUgLmdpdGlnbm9yZQotCSAgQWRkIHRoZSBnZW5lcmF0ZWQgb3JjIHNvdXJjZSBmaWxlcwotCi0yMDEwLTA2LTEwIDIyOjU1OjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkgIG1hdHJvc2thbXV4OiBGaXggdW5pdCB0ZXN0IGZvciBjaGFuZ2VkIGtleS1mcmFtZSBiZWhhdmlvdXIKLQkgIEFsbCBhdWRpbyBmcmFtZXMgYXJlIG1hcmtlZCBhcyBrZXlmcmFtZSBub3cgaW5zdGVhZCBvZiBtYXJraW5nCi0JICB0aGVtIGFsbCBhcyBkZWx0YSB1bml0Li4uCi0KLTIwMTAtMDYtMTAgMjI6NDU6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9tbXguaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLWRpc3QuaDoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kb3JjLm9yYzoKLQkgIHZpZGVvbWl4ZXI6IFBvcnQgbW9zdCBibGVuZGluZyByZWxhdGVkIGZ1bmN0aW9ucyB0byBvcmMKLQkgIE9ubHkgcmVtYWluaW5nIE1NWCBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgQVJHQi9CR1JBL0FZVVYgYmxlbmRpbmcKLQkgIGZvciB3aGljaCB3ZSBmaXJzdCBuZWVkIHRoZSBvcmMgY29tcG9zaXRpbmcgb3Bjb2Rlcy4KLQotMjAxMC0wNi0xMCAyMDoxNzowNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX21teC5oOgotCSAgdmlkZW9taXhlcjogUmVwbGFjZSBzb21lIHRhYnMgYnkgc3BhY2VzCi0KLTIwMTAtMDYtMTAgMTE6MDQ6MzggKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmM6Ci0JICBkdjEzOTQ6IEZpeCB0aGUgaW50ZXJuYWwgY2xvY2sgZXZlbiBtb3JlCi0JICBUaGUgY3ljbGVDb3VudCByZWdpc3RlciBpcyAxMyBiaXRzIGxvbmcgYW5kIHRoZSBjeWNsZU9mZnNldCBvbmUKLQkgIGlzIDEyIGJpdHMgbG9uZy4gVG8gcmVhZCB0aGUgY3ljbGVDb3VudCByZWdpc3RlciB3ZSBuZWVkIHRvIHNoaWZ0Ci0JICAxMiBiaXRzIGFuZCBub3QgMTMuIEZpeGVzICM2MTU0NjEKLQotMjAxMC0wNi0wOSAxODozNzoyOSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogdXNlIG00IG1hY3JvIHRvIGNoZWNrIGZvciBPcmMKLQotMjAxMC0wNi0wOSAyMjo0MDoyMyArMDIwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IHNvbWUgbm9uLWRlbHRhIGJ1ZmZlcnMgd2VyZSBub3QgbWFya2VkIGFzIGtleWZyYW1lcwotCi0yMDEwLTA2LTA5IDIyOjAwOjE2ICswMjAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBtYXRyb3NrYW11eDogY2hhbmdlIDIgc2Vjb25kIGxpbWl0IHBlciBjbHVzdGVyCi0JICBTdGFydCBjbHVzdGVyIGF0IGV2ZXJ5IGtleWZyYW1lIG9yIHdoZW4gd2Ugd291bGQgb3ZlcmZsb3cgdGhlIHByZXZpb3VzCi0JICBjbHVzdGVyJ3MgcmVsYXRpdmUgdGltZXN0YW1wIGZpZWxkLiBUaGlzIHdvdWxkIGF2b2lkIGFzIG11Y2ggYXMgcG9zc2libGUKLQkgIHN0YXJ0aW5nIGNsdXN0ZXJzIGF0IG5vbi1rZXlmcmFtZXMuCi0KLTIwMTAtMDYtMDkgMTI6NDA6MDkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmFkMTQ1YiB0byA3MzNmY2E5Ci0KLTIwMTAtMDYtMDkgMTI6MzQ6MDEgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNDc2ODNjMSB0byBmYWQxNDViCi0KLTIwMTAtMDYtMDkgMjA6NTM6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IERvbid0IHJlcXVlc3QgbW9yZSBzaGFyZWQgbWVtb3J5IHRoYW4gbmVlZGVkCi0KLTIwMTAtMDYtMDkgMjA6NDU6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOgotCSAgc3dpdGNoc2luazogU2V0IHRoZSBHU1RfRUxFTUVOVF9JU19TSU5LIGZsYWcgb24gdGhlIHNpbmsKLQotMjAxMC0wNi0wOSAyMDo0Mzo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmg6Ci0JICBnY29uZnZpZGVvc2luazogVXNlIEdzdFN3aXRjaFNpbmsgYXMgYmFzZSBjbGFzcwotCi0yMDEwLTA2LTA5IDIwOjMwOjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6Ci0JICBnY29uZmF1ZGlvc2luazogVXNlIEdfUEFSQU1fU1RBVElDX1NUUklOR1MKLQotMjAxMC0wNi0wOSAyMDoyOTowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5jOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmg6Ci0JICBnY29uZmF1ZGlvc2luazogUmVuYW1lIGluc3RhbmNlIHZhcmlhYmxlIHRvIGJlIG1vcmUgZGVzY3JpcHRpdmUKLQotMjAxMC0wNi0wOSAyMDoyMjozMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkgIGF1dG97YXVkaW8sdmlkZW99c2luazogRG9uJ3QgbG9zZSB0aGUgR1NUX0VMRU1FTlRfSVNfU0lOSyBmbGFnIGFmdGVyIHJlbW92aW5nIHRoZSBjaGlsZAotCi0yMDEwLTA2LTA5IDIwOjA3OjA5ICswMjAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRpcmVjdHNvdW5kc2luazogUGx1ZyBzb21lIG1lbWxlYWsgYW5kIHN1cHBvcnQgMjIwNTBIeiBtb25vIHNvdW5kLgotCSAgU2VnbWVudCBzaXplIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhlIHNhbXBsZSBzaXplIGluIGJ5dGVzLgotCi0yMDEwLTA2LTA5IDE2OjIyOjI3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGbHVzaCBzaG0gYnVmZmVyIGltbWVkaWF0ZWx5IGlmIGl0J3MgZnVsbAotCi0yMDEwLTA2LTA5IDE2OjIxOjU1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGaXggd3JpdGluZyBvZiBidWZmZXJzIGxhcmdlciB0aGFuIHNlZ3NpemUKLQkgIEZpeGVzIGJ1ZyAjNjIwNTQwLgotCi0yMDEwLTA2LTA5IDE1OjQyOjM3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGaXggcGxheWJhY2sgaWYgUEEgZG9lc24ndCBnaXZlIHVzIGEgbGFyZ2UgZW5vdWdoIHNoYXJlZCBtZW1vcnkgYnVmZmVyCi0KLTIwMTAtMDYtMDkgMTU6NDI6MTkgKzAyMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBjaGFuZ2UgaW5kZXhlZCBwcm9wZXJ0eSB0byBzdHJlYW1hYmxlCi0JICBUaGUgcHJvcGVydHkgc3RyZWFtYWJsZSBoYXMgcmV2ZXJzZSBzZW1hbnRpY3MgdG8gaW5kZXhlZC4KLQotMjAxMC0wNi0wOSAwOToxMzowOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5oOgotCSAgZmx2bXV4OiBSZW5hbWUgdW5yZWxlYXNlZCBwcm9wZXJ0eSAnaW5kZXhlZCcgdG8gJ3N0cmVhbWFibGUnCi0JICBSZW5hbWUgJ2luZGV4ZWQnIHRvICdzdHJlYW1hYmxlJyBmb3IgYSBiZXR0ZXIgbmFtZSB3aGlsZSBpdAotCSAgaGFzbid0IGJlZW4gcmVsZWFzZWQKLQotMjAxMC0wNi0wOCAxNToyMzo1MSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIFJFUVVJUkVNRU5UUzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogcmVtb3ZlIGxpYm9pbCBjaGVjawotCi0yMDEwLTA2LTA4IDE0OjQ0OjE5IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBsZXZlbDogcmVtb3ZlIHVudXNlZCBsaWJvaWwgaW5jbHVkZQotCi0yMDEwLTA2LTA0IDE4OjIyOjQyIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSAgdmlkZW9taXhlcjogbGlib2lsIHRvIG9yYyBjb252ZXJzaW9uCi0KLTIwMTAtMDYtMDQgMTg6MjE6MjEgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9ib3gvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5oOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94b3JjLm9yYzoKLQkgIHZpZGVvYm94OiBsaWJvaWwgdG8gb3JjIGNvbnZlcnNpb24KLQotMjAxMC0wNi0wNCAxODoxNjoyNSAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9nb29tL01ha2VmaWxlLmFtOgotCSogZ3N0L2dvb20vUkVBRE1FOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20vcGx1Z2luX2luZm8uYzoKLQkgIGdvb206IGxpYm9pbCB0byBvcmMgY29udmVyc2lvbgotCi0yMDEwLTA2LTA4IDE2OjA0OjIzIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuaDoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUub3JjOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdmZpci5jOgotCSAgZGVpbnRlcmxhY2U6IG9yY2lmeSBzb21lIGRlaW50ZXJsYWNpbmcgbWV0aG9kcwotCi0yMDEwLTA2LTA4IDE2OjAzOjM2IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS92ZmlyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmM6Ci0JICBkZWludGVybGFjZTogY29udmVydCBmcm9tIGxpYm9pbCB0byBvcmMKLQotMjAxMC0wNi0wOCAxNToyMzoyOCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIFJFUVVJUkVNRU5UUzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogQWRkIG9yYyBjaGVjawotCi0yMDEwLTA2LTA4IDE0OjA5OjAwICswMjAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkgIGZsdm11eDogQWRkIGluZGV4ZWQgcHJvcGVydHkgdG8gcmVwbGFjZSBkaXNhYmxlZCBpcy1saXZlLgotCSAgQWRkIGluZGV4ZWQgcHJvcGVydHkgdG8gYmUgdGhlIG5lZ2F0aW9uIG9mIHdoYXQgdGhlIGRpc2FibGVkIGlzLWxpdmUgcHJvcGVydHkKLQkgIHdhcy4gRml4ZXMgYnVnICM2MTMwNjYuCi0KLTIwMTAtMDYtMDggMDk6MjI6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICByYXcxMzk0OiBSZXF1aXJlIGxpYnJhdzEzOTQgPj0gMi4wLjAgZm9yIHJhdzEzOTRfcmVhZF9jeWNsZV90aW1lcgotCSAgRml4ZXMgYnVnICM2MjA5MjkuCi0KLTIwMTAtMDYtMDggMDc6MzU6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JICBjbW1sZW5jOiBSZW1vdmUgaGFjayB0byBsZXQgb2dnbXV4IHN0YXJ0IGEgbmV3IHBhZ2UgZm9yIGV2ZXJ5IENNTUwgYnVmZmVyCi0JICBvZ2dtdXggZG9lcyB0aGlzIGZvciBDTU1MIGJ5IGl0cyBvd24gbm93Ci0KLTIwMTAtMDYtMDcgMTg6MzI6MTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogRG9uJ3QgaGFuZGxlIG5vbi1USU1FIHNlZWtzCi0JICBEb24ndCBzZW5kIHRoZW0gdXBzdHJlYW0gYmVjYXVzZSBmb3IgdXBzdHJlYW0gYSBCWVRFUyBzZWVrCi0JICBtaWdodCBtYWtlIHNlbnNlIGJ1dCBpcyBjb21wbGV0ZWx5IHdyb25nIGJlY2F1c2UgdXBzdHJlYW0KLQkgIGNhbid0IHNlZWsgdG8gYSBieXRlIHBvc2l0aW9uIG9mIHRoZSBhdWRpbyBvciB2aWRlbyBzdHJlYW0uCi0JICBBbHNvIGRvbid0IGJ1aWxkIHRoZSBpbmRleCBpbiBwdXNoIG1vZGUgZm9yIG5vbi1USU1FIHNlZWtzLAotCSAgdGhpbmdzIHdpbGwgZ28gd3JvbmcgaGVyZSBvdGhlcndpc2UuCi0KLTIwMTAtMDYtMDcgMTE6MTU6MjYgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0Lmg6Ci0JICBkdG1mZGV0ZWN0OiBPbmx5IHdvcmtzIHdpdGggcmF0ZT04MDAwLCBmaXggaW4gY2FwcwotCi0yMDEwLTA2LTAyIDE5OjE2OjIwICswMTAwICBTam9lcmQgU2ltb25zIDxzam9lcmQuc2ltb25zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBDb3BlIHdpdGggc2hvcnQgc3RhcnRjb2RlcyBpbiB0aGUgaDI2NCBieXRlc3RyZWFtCi0KLTIwMTAtMDYtMDYgMTc6MjU6MTYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZTogbG9nIG1lc3NhZ2UgcHJpbnRmIGZvcm1hdCBmaXhlcwotCi0yMDEwLTA2LTA2IDE4OjAwOjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgZXh0OiBEb24ndCB1c2UgR1NUX0RFQlVHX0ZVTkNQVFIgZm9yIEdPYmplY3QgdmZ1bmNzCi0KLTIwMTAtMDYtMDYgMTc6NTc6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc2RtYWJ1ZmZlci5jOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LXNvdXJjZS5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6Ci0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmM6Ci0JICBzeXM6IERvbid0IHVzZSBHU1RfREVCVUdfRlVOQ1BUUiBmb3IgR09iamVjdCB2ZnVuY3MKLQotMjAxMC0wNi0wNiAxNzo1Mjo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmM6Ci0JKiBnc3QvZGVidWd1dGlscy90ZXN0cGx1Z2luLmM6Ci0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgZ3N0OiBEb24ndCB1c2UgR1NUX0RFQlVHX0ZVTkNQVFIgZm9yIEdPYmplY3QgdmZ1bmNzCi0KLTIwMTAtMDYtMDYgMTU6MTI6MTYgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogcmVmYWN0b3IgZGVsdGEgdW5pdCBoYW5kbGluZwotCSAgVGhpcyBhbGxvd3MgdXMgdG8gc2tpcCBkZWx0YSB1bml0cyBlYXJsaWVyIGFuZCBpcyBhIGJpdCBjbGVhcmVyIGluIG15Ci0JICBvcGluaW9uLiBJdCBhbHNvIG1ha2VzIG9ubHkgdmlkZW8gYnVmZmVycyBldmVyIGJlIGRlbHRhIHVuaXRzLCBub3QKLQkgIGp1c3QgZm9yIFNpbXBsZUJsb2NrIGFzIGJlZm9yZS4KLQotMjAxMC0wNi0wNiAxNToxNzowMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBDbGVhciBhZGFwdGVyIG9uIGRpc2NvbnRpbnVpdGllcwotCi0yMDEwLTA2LTA2IDE0OjAzOjUzICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IElnbm9yZSBrZXlmcmFtZSBmbGFnIGZvciBub24tdmlkZW8gc3RyZWFtcwotCSAgV2hlbiB0aGUga2V5ZnJhbWUgYml0IG9mIFNpbXBsZUJsb2NrIEZsYWdzIHdhc24ndCBzZXQsIHRoZSBidWZmZXIgd2FzIGJlaW5nCi0JICBtYXJrZWQgd2l0aCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCwgY2F1c2luZyBhbGwgYnVmZmVycyB0byBiZSBza2lwcGVkCi0JICBhZnRlciBhIHNlZWsuIFRoaXMgbWF5IGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBTb3JlbnNvbiBTcXVpc2ggZW5jb2RlciwgYnV0Ci0JICBhcmd1YWJseSB0aGUga2V5ZnJhbWUgYml0IHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gdmlkZW8uCi0JICBGaXhlcyBidWcgIzYyMDM1OC4KLQotMjAxMC0wNi0wNiAxNDo1Njo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBGaXJzdCB0cnkgdXBzdHJlYW0gd2hlbiBoYW5kbGluZyBzZWVrIGV2ZW50cy9xdWVyaWVzCi0KLTIwMTAtMDYtMDQgMTQ6NTQ6NTkgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkgIGdzdHJ0cGNlbHRwYXk6IGRvbid0IGFsd2F5cyBmaXhhdGUgc2luayBjYXBzIHRvIDEgY2hhbm5lbAotCSAgVGhlIGdldGNhcHMgZnVuY3Rpb24gc2hvdWxkIG5vdCBmaXhhdGUgdGhlIGNoYW5uZWxzIGZpZWxkIHVudGlsIHdlCi0JICBnZXQgdGhlIGVuY29kaW5nLXBhcmFtcyBmaWVsZCBmcm9tIG91ciBzcmNwYWQncyBjYXBzLiBGaXhlcyAjNjIwNTkxCi0KLTIwMTAtMDYtMDQgMTM6NTc6MjggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3A6IHRyeSBhbGwgcmFuZ2VzIGZyb20gdGhlIHNkcAotCSAgVHJ5IGFsbCByYW5nZXMgaW4gdGhlIFNEUCBiZWZvcmUgZ2l2aW5nIHVwLgotCi0yMDEwLTA2LTA0IDEzOjU2OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBtYWtlIHBhcnNlX3JhbmdlIHJldHVybiByZXN1bHQKLQkgIE1ha2UgdGhlIHBhcnNlX3JhbmdlIGZ1bmN0aW9uIHJldHVybiBpZiB0aGUgcGFyc2luZyBzdWNjZWVkZWQgb3IgZmFpbGVkLgotCi0yMDEwLTA2LTA0IDExOjQ0OjA5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBpZiB3ZSdyZSBub3QgbGlua2VkIGRvd25zdHJlYW0sIHdlIGNhbiBkbyBhbnkgZm9ybWF0Ci0JICBTdHVwaWQgbWUsIGFzc3VtaW5nIF9nZXRfYWxsb3dlZF9jYXBzKCkgd291bGQgYWN0dWFsbHkgcmV0dXJuIHRoZQotCSAgcGFkIHRlbXBsYXRlcyBpZiB0aGVyZSB3YXMgbm8gcGVlci4KLQotMjAxMC0wNS0zMSAxNjoyNjoxOSArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBLZWVwIGFubm91bmNpbmcgdGhlIGRlbGl2ZXJ5LW1ldGhvZCBpbiB0aGUgY2FwYWJpbGl0aWVzCi0JICBFdmVuIHRob3VnaCB3ZSBkb24ndCB1c2UgZGVsaXZlcnktbWV0aG9kIGluIG91ciBwYXlsb2FkZXIsIG9sZGVyIHZlcnNpb25zIG9mCi0JICB0aGUgdGhlb3JhIHBheWxvYWRlciBpbiBnc3RyZWFtZXIgcmVxdWlyZWQgaXQuIEFzIHN1Y2ggd2UgbmVlZCB0byBrZWVwIHRoaXMKLQkgIGFyb3VuZCBpbiB0aGUgY2FwcyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuCi0JICBUaGlzIHJldmVydHMgcGFydCBvZiA0OTQ2M2EzN2NiYWE5NTJlMTQwMTI5MWYwYTI2MjNkZTZjYWIzODgwCi0JICBGaXhlcyAjNjE4OTQwCi0KLTIwMTAtMDYtMDMgMTc6NTI6MTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICBvc3M0OiBhZGQgc29tZSBjb21tZW50cyBmb3IgdHJhbnNsYXRvcnMgdG8gY2xhcmlmeSBtZWFuaW5nIG9mICJMb3ciCi0JICAiTG93IiBldGMuIGFyZSBxdWFsaXR5IHNldHRpbmdzIGhlcmUgKGUuZy4gZm9yIHRoZSBpbnRlcm5hbCByZXNhbXBsZXIpLgotCSAgU29tZSBkYXkgd2hlbiB3ZSB1c2UgR0xpYidzIGkxOG4gZnVuY3Rpb25zIHdlIG1pZ2h0IHdhbnQgdG8gdXNlCi0JICBOQ18oKSBhbmQgZ19kcGdldHRleHQyKCkgaGVyZSBpbnN0ZWFkIG9mIHRoZSBjb21tZW50cy4KLQkgIEZpeGVzICM1NTU5NjcuCi0KLTIwMTAtMDYtMDMgMTk6MjM6MDEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5oOgotCSAgbXA0Z2RlcGF5OiBjYWxjdWxhdGUgdGhlIGZyYW1lIGR1cmF0aW9uIGNvcnJlY3RseQotCSAgV2hlbiB3ZSBjYWxjdWxhdGUgdGhlIGZyYW1lIGR1cmF0aW9uLCB3ZSBuZWVkIHRvIHVzZSB0aGUgYW1vdW50IG9mCi0JICBmcmFtZXMgaW4gdGhlIF9wcmV2aW91c18gcGFja2V0LCBub3QgdGhlIGN1cnJlbnQgcGFja2V0LiBUaGUgZnJhbWUgZHVyYXRpb24gaXMKLQkgIG5lZWRlZCB0byBjb3JyZWN0bHkgZGUtaW50ZXJsZWF2ZSBpbnRlcmxlYXZlZCBzdHJlYW1zLiBUaGlzIGZpeGVzIHRoZSBjYXNlIHdoZXJlCi0JICB0aGVyZSBhcmUgYSB2YXJpYWJsZSBudW1iZXIgb2YgZnJhbWVzIGluIGEgcGFja2V0LgotCSAgRml4ZXMgIzYyMDQ5NAotCi0yMDEwLTA2LTAzIDE4OjU4OjQyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBEb24ndCByZXR1cm4gY2FwcyBpbiBnZXRfY2FwcygpIHRoYXQgd2lsbCBiZSByZWplY3RlZAotCSAgVGhpcyBjb21taXQgYmFzaWNhbGx5IHB1dHMgX2dldF9jYXBzKCkgaW4gc3luYyB3aXRoIGFjY2VwdF9jYXBzKCkuCi0JICBJZiB3ZSBkb24ndCBoYXZlIGEgbWFzdGVyIHBhZCBPUiB0aGUgbWFzdGVyIHBhZCBjYXBzIGFyZW4ndCBuZWdvdGlhdGVkCi0JICB0aGVuIHdlIGp1c3QgcmV0dXJuIHRoZSBkb3duc3RyZWFtIGFsbG93ZWQgY2Fwcy4KLQkgIElmIHdlIGhhdmUgYSBtYXN0ZXIgcGFkIHdpdGggbmVnb3RpYXRlZCBjYXBzLCB3ZSByZXR1cm4gdGhvc2UgY2FwcwotCSAgd2l0aCBhIGZyZWUgcmFuZ2Ugb2Ygd2lkdGgvaGVpZ2h0L2ZyYW1lcmF0ZQotCi0yMDEwLTA2LTAzIDEzOjQ1OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgUmV2ZXJ0ICJwdWxzZXNpbms6IEFkZCBjb21tZW50cyB0byByZW1vdmUgdGhlIHByb3ZpZGUtY2xvY2sgbWVzc2FnZSBwb3N0aW5nIG9uY2Ugd2UgZGVwZW5kIG9uIGJhc2UgMC4xMC4zMCIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOGYzNzA4ZjM4YWEzODM5YTZhNjI1Y2E3ZDFjMTY2MTAxYzlmYmI3Zi4KLQkgIFRoZSBiYXNlYXVkaW9zaW5rIGNvbW1pdCB3YXMgcmV2ZXJ0ZWQKLQotMjAxMC0wNi0wMyAxMDoyNzoyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogQWRkIGNvbW1lbnRzIHRvIHJlbW92ZSB0aGUgcHJvdmlkZS1jbG9jayBtZXNzYWdlIHBvc3Rpbmcgb25jZSB3ZSBkZXBlbmQgb24gYmFzZSAwLjEwLjMwCi0JICBiYXNlYXVkaW9zaW5rIGRvZXMgYWxsIHRoaXMgZm9yIHVzIG5vdy4KLQotMjAxMC0wNS0wNyAxODo0MjowNiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBkdG1mOiBSZW1vdmUgcnRwZHRtZm11eCBzdHJlYW0tbG9jayBjb2RlCi0KLTIwMTAtMDYtMDIgMTY6MzY6MTEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogZGVsYXllZCBzZWVrIGhhbmRsaW5nIGFsc28gZGVzZXJ2ZXMgVFJVRSBldmVudCByZXNwb25zZQotCi0yMDEwLTA2LTAyIDE1OjMwOjQ3ICswMjAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogZml4IGNvbXBpbGVyIHdhcm5pbmcKLQkgIHVudXNlZCB2YXJpYWJsZSDigJhlc3RpbWF0ZWTigJkKLQotMjAxMC0wNi0wMiAxNTowNDowMCArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIGNvbW1vbjogcmV2ZXJ0IHRoZSBjaGFuZ2UgaSBkaWQgaW4gbXkgcHJldmlvdXMgY29tbWl0Ci0KLTIwMTAtMDYtMDIgMTM6Mzk6MTAgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBjb21tb246Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogc3RvcCBidWZmZXJpbmcgYW5kIGVtaXQgRU9TIGF0IHRoZSBlbmQgb2YgYSBzdHJlYW0KLQkgIFdoZW4gdXNpbmcgUlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9CVUZGRVIsIG1ha2Ugc3VyZSB0aGF0IHRoZSByaW5nYnVmZmVyIGRvZXNuJ3QKLQkgIGdldCBzdHVjayBidWZmZXJpbmcgZm9yZXZlciB3aGVuIHRoZXJlIGlzbid0IGVub3VnaCBkYXRhIGxlZnQgdG8gZmlsbCB0aGUKLQkgIGJ1ZmZlci4KLQotMjAxMC0wNi0wMSAyMTo1Mjo1OSArMDIwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy90ZXN0cGx1Z2luLmM6Ci0JICBkZWJ1Z3V0aWxzOiBEb24ndCBjb25zdW1lIHByZXJvbGwgYnVmZmVyIHR3aWNlCi0KLTIwMTAtMDYtMDEgMjE6MzI6MTEgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgcHVsc2U6IFN0eWxlIGZpeDogdXNlIGdfc3RyZHVwKCkgaW5zdGVhZCBvZiBwcmludGYoKWluZyBhIHNpbXBsZSBzdHJpbmcKLQotMjAxMC0wNS0yNyAxNjowNzozMSArMDIwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy90ZXN0cy5jOgotCSAgZGVidWd1dGlsczogUmVwbGFjZSBtZDUgaW1wbGVtZW50YXRpb24gd2l0aCBnbGliJ3MKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTk4MjQKLQotMjAxMC0wNS0yMiAxMTo1NTozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGNsZWFuIHVwIGNvZGUgZm9yIGF2aSBoZWFkZXIgdXNpbmcgYSBieXRld3JpdGVyCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE5MjkzCi0KLTIwMTAtMDYtMDEgMTg6NTQ6NDEgLTA1MDAgIFBpZXJyZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBpbnRlbC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogb3B0aW1pemUgY29tbXVuaWNhdGlvbiB3aXRoIFB1bHNlQXVkaW8gdXNpbmcgcGFfc3RyZWFtX2JlZ2luX3dyaXRlCi0KLTIwMTAtMDYtMDIgMTA6NTI6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IFBvc3QgcHJvdmlkZS1jbG9jayBtZXNzYWdlIG9uIHRoZSBidXMgaWYgdGhlIGNsb2NrIGFwcGVhcnMvZGlzYXBwZWFycwotCSAgRml4ZXMgYnVnICM2MjAyNzcuCi0KLTIwMTAtMDYtMDEgMjM6NDk6MTcgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTdmODllNSB0byA0NzY4M2MxCi0KLTIwMTAtMDYtMDEgMjI6NTQ6NDkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gY2RmZjBmYiB0byAxN2Y4OWU1Ci0KLTIwMTAtMDYtMDEgMjA6NDU6MjkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IGZpbHRlciBjYXBzIHJldHVybmVkIGZyb20gZG93bnN0cmVhbSB3aXRoIG91ciBwYWQgdGVtcGxhdGUuCi0KLTIwMTAtMDYtMDEgMTY6NTY6MzIgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBSZW1vdmUgbW9yZSB1bm5lZWRlZCB3YXJuaW5ncwotCi0yMDEwLTA2LTAxIDE2OjU0OjAzICswMTAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgbWF0cm9za2FtdXg6IHJlbW92ZSB1bm5lZWRlZCB3YXJuaW5nCi0KLTIwMTAtMDYtMDEgMTY6NDk6MTQgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JICBtYXRyb3NrYW11eDogcmVtb3ZlIHVubmVlZGVkIGRlYnVnIHN0YXRlbWVudAotCi0yMDEwLTA2LTAxIDE2OjI0OjUzICswMTAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBtYXRyb3NrYW11eDogY2hhbmdlIGlzLWxpdmUgcHJvcGVydHkgdG8gaW5kZXhlZAotCi0yMDEwLTA1LTIzIDEzOjU2OjE2ICswMTAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiB1c2UgdGhlIHVpbnQ2NCBzY2FsaW5nIGZ1bmN0aW9ucwotCSAgSW4gZGVtdXhlciBhbmQgbXV4ZXIgdXNlIHRoZSBnc3RfdXRpbF91aW50NjQgc2NhbGluZyBmdW5jdGlvbnMgcmF0aGVyIHRoYW4KLQkgIHN0YW5kYXJkIGludGVnZXIgZGl2aXNpb24uIEFkZCB3YXJuaW5ncyAodG8gYmUgY2hhbmdlZCB0byBkZWJ1ZykgZm9yIGRlYnVnZ2luZwotCSAgdGhlIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24uCi0KLTIwMTAtMDUtMjEgMTQ6MzU6MzQgKzAxMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IHNldCBkZWx0YSB1bml0IG9uIGFsbCBidWZmZXJzIGV4Y2VwdCBjbHVzdGVyIHN0YXJ0IG9uZXMKLQotMjAxMC0wNS0yMSAxMzozODoxMSArMDEwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogc3RvcmUgY2FwcyBhbmQgc2V0IG9uIGJ1ZmZlcnMgcmF0aGVyIHRoYW4gdXNpbmcgcGFkIGNhcHMKLQotMjAxMC0wNS0yMSAxMzoyNToyNCArMDEwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IG1ha2Ugc3VyZSBwYWRzIGNhcHMgYXJlIHNldCBiZWZvcmUgYW55IGJ1ZmZlcnMgcHVzaGVkLgotCi0yMDEwLTA1LTIxIDEzOjE0OjA0ICswMTAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBhZGQgc3RyZWFtaGVhZGVycwotCi0yMDEwLTA1LTIxIDEyOjIzOjA4ICswMTAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogbm8gbmVlZCB0byBzZXQgY2FjaGUgdHdpY2UKLQotMjAxMC0wNS0yMSAwMTo1OTo1MyArMDIwMCAgWGF2aWVyIFF1ZXJhbHQgPHhxdWVyYWx0QGdtYWlsLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgRG8gbm90IGNyZWF0ZSBhIFNlZWtIZWFkZXIsIEN1ZXMsIC4uIHdoZW4gZG9pbmcgbGl2ZQotCi0yMDEwLTA1LTIwIDIzOjM5OjU5ICswMjAwICBYYXZpZXIgUXVlcmFsdCA8eHF1ZXJhbHRAZ21haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBBZGQgaXMtbGl2ZSBwcm9wZXJ0eQotCi0yMDEwLTA2LTAxIDEzOjIyOjI2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4IHZhcmlhYmxlIGluaXQKLQotMjAxMC0wNS0yOCAxNjozNzozMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBpbXByb3ZlIHJldmVyc2UgcGxheWJhY2sKLQkgIFNsaWdodGx5IG1vZGlmeSBhcHByb2FjaCB0byBhbHNvIGhhbmRsZSBjYXNlcyB3aGVyZSBjdWUgZW50cmllcyBkbyBub3QgcmVsaWFibHkKLQkgIGxlYWQgdG8gaW5pdGlhbCBrZXlmcmFtZXMuCi0JICBGaXhlcyAjNjE5ODE3LgotCi0yMDEwLTA1LTI0IDE2OjAyOjU4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS92ZmlyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmM6Ci0JICBkZWludGVybGFjZTogYXZvaWQgZ3RrLWRvYyBjb25mdXNpbmcgY29tbWVudHMKLQotMjAxMC0wNS0yMSAxMToyMTo1OCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkgIG1hdHJvc2thbXV4OiBhZGp1c3QgdW5pdCB0ZXN0IHRvIG1vZGlmaWVkIGJlaGF2aW91cgotCi0yMDEwLTA1LTIwIDE0OjMzOjQxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogdXNlIHdyaXRlIGNhY2hpbmcgYWxzbyB3aGVuIHdyaXRpbmcgYnVmZmVyIGRhdGEKLQkgIFNwZWNpZmljYWxseSwgdGhpcyByZWR1Y2VzIHB1c2hpbmcgc2V2ZXJhbCBzbWFsbCBidWZmZXJzIGZvciBlYWNoCi0JICBkYXRhIGJ1ZmZlciBhbmQgYWxzbyBhdm9pZHMgYSBzZWVrIGZvciBlYWNoIGJ1ZmZlciBhbHRvZ2V0aGVyCi0JICAodGhvdWdoIGEgc2VlayBpcyBzdGlsbCBuZWVkZWQgZm9yIGVhY2ggY2x1c3RlcikuCi0JICBGaXhlcyAjNjE5MjczLgotCi0yMDEwLTA1LTIwIDE0OjIzOjA3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogZml4IGVibWwgd3JpdGUgY2FjaGluZyB3aXRoIGJ5dGV3cml0ZXIgaW1wbGVtZW50YXRpb24KLQkgIEFsc28gY2FjaGUgYSBiaXQgbW9yZSBkdXJpbmcgaGVhZGVyIHdyaXRpbmcuCi0JICBGaXhlcyAjNjE5MjczLgotCi0yMDEwLTA1LTIwIDE0OjA4OjQyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkgIG1hdHJvc2thbXV4OiB1c2UgY29uc2lzdGVudCBkZWJ1ZyBjYXRlZ29yeSBuYW1lIGZvciBlYm1sd3JpdGUKLQotMjAxMC0wNS0xOCAxNDo0NDoxNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiB1c2UgYnl0ZXJlYWRlciBiYXNlZCBHc3RFYm1sUmVhZCBhcyBhIGhlbHBlcgotCSAgLi4uIHJhdGhlciB0aGFuIGJhc2luZyBvbiBpdCBieSBpbmhlcml0YW5jZS4KLQkgIEFsc28gdXNlIG1vcmUgY29tbW9uIGNvZGUgZm9yIHB1c2ggYW5kIHB1bGwgbW9kZS4KLQkgIEZpeGVzICM2MTkxOTguCi0JICBGaXhlcyAjNjExMTE3LgotCi0yMDEwLTA2LTAxIDE1OjQ3OjMyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IF9nZXRfcGFkX3RlbXBsYXRlIHJlc3VsdCBuZWVkcyBubyB1bnJlZgotCi0yMDEwLTA1LTE4IDE5OjQyOjU4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIHBuZ2VuYzogU3VwcG9ydCA4IGJpdCBncmF5c2NhbGUKLQkgIEFkZHMgc3VwcG9ydCB0byA4IGJpdCBncmF5c2NhbGUgaW5wdXQKLQotMjAxMC0wNS0xOCAxNDo0Njo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IEFkZHMgOGJpdCBncmF5c2NhbGUgc3VwcG9ydAotCSAgQWRkcyBkZWNvZGluZyBzdXBwb3J0IGZvciBqcGVnIGltYWdlcyBpbiA4IGJpdCBncmF5c2NhbGUgZm9ybWF0LgotCi0yMDEwLTA1LTE4IDAxOjU3OjE0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogQWNjZXB0IGdyYXlzY2FsZSBhcyBpbnB1dAotCSAgQWRkcyB2aWRlby94LXJhdy1ncmF5c2NhbGUgKDggYml0KSBzdXBwb3J0IHRvIGpwZWdlbmMKLQotMjAxMC0wNS0zMSAxMzozMDowNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogSW1wbGVtZW50IHNpbmtwYWQgR2V0Q2Fwc0Z1bmN0aW9uLgotCSAgVGhpcyBhbGxvd3MgcmV0dXJuaW5nIG9ubHkgdGhlIGZvcm1hdHMsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZQotCSAgYW5kIHBpeGVsLWFzcGVjdC1yYXRpbyB0aGF0IGRvd25zdHJlYW0gY2FuIHN1cHBvcnQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIwMTQ4Ci0KLTIwMTAtMDUtMzEgMDc6NDk6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IERvbid0IGNvbXBhcmUgcnVubmluZyB0aW1lcyB3aXRoIHN0cmVhbSB0aW1lcyB3aGVuIGRvaW5nIFFvUwotCi0yMDEwLTA1LTI3IDIxOjA2OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkgIGRlaW50ZXJsYWNlOiBEb24ndCByZWNvbmZpZ3VyZSB0aGUgY2FwcyB3aGVuIGNoYW5naW5nIHByb3BlcnRpZXMKLQkgIEZpeGVzIGJ1ZyAjNjE5ODQ4LgotCi0yMDEwLTA1LTI2IDEzOjEzOjQ0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuaDoKLQkgIGFscGhhOiBBZGQgcHJvcGVydHkgdG8gYWxsb3cgcGFzc3Rocm91Z2ggbW9kZQotCSAgVGhpcyBwYXNzdGhyb3VnaCBtb2RlIGlzIHVzZWQgaWYgdGhlIGFscGhhIG1ldGhvZCBpcyAic2V0IgotCSAgYW5kIHRoZSBhbHBoYSB2YWx1ZSBpcyAxLjAuCi0JICBGaXhlcyBidWcgIzYxNzUxMi4KLQotMjAxMC0wNS0yNSAxNToxNjowNiArMTAwMCAgQWxleGFuZGVyIEtvamV2bmlrb3YgPGFsZXhhbmRlckBrb2pldm5pa292LmNvbT4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogc3VwcG9ydCAyNC1iaXQgd2lkdGgKLQkgIEZpeGVzICM2MTkwNDUKLQotMjAxMC0wNS0yNCAyMTo1MDo1OCArMTAwMCAgQWxleGFuZGVyIEtvamV2bmlrb3YgPGFsZXhhbmRlckBrb2pldm5pa292LmNvbT4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBzcGVjdHJ1bTogc3VwcG9ydCBhcmJpdHJhcnkgYml0IGRlcHRoCi0JICBQYXJ0aWFsbHkgZml4ZXMgIzYxOTA0NQotCi0yMDEwLTA1LTI1IDA1OjM2OjQ2ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGZpeCBkZWFkbG9jayBpbnRyb2R1Y2VkIGJ5IHZpZGVvIGtleWZyYW1lIFFvUwotCi0yMDEwLTA1LTIzIDA5OjMyOjA4ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIG1hdHJvc2thZGVtdXg6IHNraXAgYnVmZmVycyBiZWZvcmUgYSBsYXRlIGtleWZyYW1lIChRb1MpCi0JICBCZWZvcmUsIHZwOGRlYyBoYWQgbm8gb3B0aW9uIGJ1dCB0byBkZWNvZGUgYWxsIGZyYW1lcyBldmVuIGlmIHNvbWUvYWxsCi0JICBvZiB0aGVtIHdvdWxkIGJlIGxhdGUuIFdpdGggdGhpcyBjaGFuZ2UsIHBlcmZvcm1hbmNlIHdoZW4ga2V5ZnJhbWVzIGFyZQotCSAgZnJlcXVlbnQgaXMgaGVscGVkIGEgZ3JlYXQgZGVhbC4gT24gbXkgVGhpbmtwYWQgWDYwcywgZGVjb2RpbmcgYSAyMCBzCi0JICAxMDgwcCBzdW5mbG93ZXIgZW5jb2RlIHdpdGgga2V5ZnJhbWVzIGV2ZXJ5IDEwIGZyYW1lcyB3ZW50IGZyb20gdGFraW5nCi0JICA0MiBzIHdpdGggNSBmcmFtZXMgc2hvd24gdG8gMjEgcyB3aXRoIDE1IGZyYW1lcyBzaG93biAoc3RpbGwgc2xvdwotCSAgZW5vdWdoIHRvIGNvdW50IGJ5IGhhbmQpLiBXaGVuIGtleWZyYW1lcyBhcmUgbW9yZSBzcGFyc2UsIHlvdSB3aWxsCi0JICBzdGlsbCBiZSBhYmxlIHRvIGNhdGNoIHVwIGV2ZW50dWFsbHksIGJ1dCB0aGUgcmVzdWx0cyB3b24ndCBiZSBhcwotCSAgbm90aWNhYmxlLgotCi0yMDEwLTA1LTE0IDE3OjU3OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcnBhZC5oOgotCSAgdmlkZW9taXhlcjogRG9uJ3QgbWl4IGlucHV0IHdpdGggZGlmZmVyZW50IHBpeGVsIGFzcGVjdCByYXRpb3MKLQkgIEZpeGVzIGJ1ZyAjNjE4NTMwLgotCi0yMDEwLTA1LTE3IDE5OjU0OjIyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmFzbToKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jOgotCSAgZGVpbnRlcmxhY2U6IEFkZCBNTVgvM0ROb3cgaW1wbGVtZW50YXRpb25zIG9mIGdyZWVkeWggZm9yIFVZVlkKLQotMjAxMC0wNS0xNyAxOToxNjo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jOgotCSAgZGVpbnRlcmxhY2U6IEZpeCBVWVZZIGltcGxlbWVudGF0aW9uIG9mIGdyZWVkeWggdG8gYmUgYWN0dWFsbHkgdXNlZAotCi0yMDEwLTA1LTExIDExOjQzOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JICBnZGtwaXhidWY6IEFkZCBhIGdka3BpeGJ1ZjMgcGx1Z2luIHRoYXQgdXNlcyBnZGtwaXhidWYzCi0KLTIwMTAtMDYtMDEgMTA6MDY6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbW1vbjoKLQkqIHdpbjMyL2NvbW1vbi9nc3RydHBiaW4tbWFyc2hhbC5jOgotCSogd2luMzIvY29tbW9uL2dzdHJ0cGJpbi1tYXJzaGFsLmg6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dWRwLWVudW10eXBlcy5jOgotCSogd2luMzIvY29tbW9uL2dzdHVkcC1tYXJzaGFsLmM6Ci0JKiB3aW4zMi9jb21tb24vZ3N0dWRwLW1hcnNoYWwuaDoKLQkgIHdpbjMyOiBhZGQgbW9yZSBnZW5lcmF0ZWQgbWFyc2hhbCBhbmQgZW51bXR5cGUgZmlsZXMgdG8gd2luMzItdXBkYXRlCi0KLTIwMTAtMDYtMDEgMDk6Mjc6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EuYzoKLQkgIFJldmVydCAibWF0cm9za2E6IGFkZCB0ZW1wb3Jhcnkgd2VibSB0eXBlZmluZGVyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBkMTQ4ZWMwYWQyMDUzYWJiMGMzOGZjNjgxYTg5NTMyOTI5ODUzODhmLgotCSAgV2UgZGVwZW5kIG9uIC1iYXNlIGdpdCBub3csIHdoaWNoIGhhcyBhIHdlYm0gdHlwZWZpbmRlciBpbiB0aGUgdXN1YWwKLQkgIHBsYWNlLgotCi0yMDEwLTA2LTAxIDA5OjI2OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBSZXZlcnQgImF2aW11eCwgZmx2bXV4LCBtYXRyb3NrYW11eDogZG9uJ3QgY3Jhc2ggaWYgdGFncyBhcnJpdmUgb24gbXVsdGlwbGUgaW5wdXQgcGFkcyBhdCB0aGUgc2FtZSB0aW1lIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA2YTk5ODNjZDIwYzQ4Yjk2Mzk2MjI5YjNmOTRkMDI1NGEwNWRkZjQ4LgotCSAgUmVseSBvbiBsb2NraW5nIGRvbmUgaW4gR3N0VGFnU2V0dGVyIGluIGNvcmUgZ2l0LgotCi0yMDEwLTA2LTAxIDA5OjIzOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiByZXF1aXJlIGNvcmUvYmFzZSBnaXQKLQkgIEZvciBXZWJNIHR5cGVmaW5kaW5nIGFuZCBHc3RUYWdzZXR0ZXIgZml4ZXMuCi0KLTIwMTAtMDYtMDEgMDk6MTc6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMC4yMyA9PT0KLQotMjAxMC0wNS0zMCAxNDowMzo1MyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjMKLQotMjAxMC0wNS0zMCAxNDowMjowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMC0wNS0yOSAxMDoyMzo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBGaXggcG9zaXRpb24gcXVlcnkKLQotMjAxMC0wNS0yOCAxNToxNDowNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS93ZWJtLW11eC5jOgotCSAgZG9jczogcmVtb3ZlIHVubmVjZXNzYXJ5IHZpZGVvcmF0ZSBlbGVtZW50IGZyb20gd2VibW11eCBleGFtcGxlIHBpcGVsaW5lCi0KLTIwMTAtMDUtMjggMTA6NDM6MzYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBLZWVwIHZhcmlhYmxlcyBpbiBzYW5lIHN0YXRlIGFmdGVyIF9yZXNldAotCSAgV2hlbiByZXNldGluZywga2VlcCAncm93JyB2YXJpYWJsZXMgYXQgYSBzYW5lIHN0YXRlIGFmdGVyCi0JICBmcmVlaW5nIHRvIGF2b2lkIGl0IGJlaW5nIGZyZWVkIGFnYWluIG9uIF9yZXN5bmMgcmVhbGxvYwotCSAgd2hlbiB0aGUgZWxlbWVudCBpcyByZXVzZWQuCi0JICBGaXhlcyAjNjE5OTQzCi0KLTIwMTAtMDUtMjcgMTg6MDg6MTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBGaXggZmxvYXRpbmcgcG9pbnQgdG8gaW50ZWdlciBjb252ZXJzaW9uIGZvciB0aGUgYWxwaGEgdmFsdWVzCi0JICBGaXhlcyBidWcgIzYxOTgzNS4KLQotMjAxMC0wNS0yNiAwODo1NDozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjIuMyBwcmUtcmVsZWFzZQotCi0yMDEwLTA1LTI2IDAwOjMzOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wNS0yNSAxNTozNDoxMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGhhbmRsZSB0cnVuY2F0ZWQgaW5wdXQgZGF0YSBhdCBFT1MgaW4gcHVsbCBtb2RlCi0JICBGaXhlcyAjNjE3NzMzLgotCi0yMDEwLTA1LTI2IDExOjU1OjEzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDM1N2IwZGIgdG8gZmQ3Y2EwNAotCi0yMDEwLTA1LTI1IDIxOjE0OjA1ICswMjAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFJvdW5kIHRpbWVzdGFtcCB1cCB3aGVuIHNjYWxpbmcgdG8gbW92IGZvcm1hdAotCSAgRml4IHRpbWVzdGFtcCByb3VuZGluZyB0byBhbGxvdyB0aGUgY29ycmVjdCBpbmRleCB0byBiZSBsb2NhdGVkLgotCSAgVGhlIGlzc3VlIHdhcyB0aGF0IHNjYWxpbmcgZnJvbSBHU3RyZWFtZXIgdGltZSBmb3JtYXQgdG8gbW92IHRpbWUgZm9ybWF0IHdhcwotCSAgcm91bmRpbmcgZG93biBjYXVzaW5nIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG5ld3NlZ21lbnQgZXZlbnQgcmVjZWl2ZWQgYWZ0ZXIgYQotCSAgZmx1c2hpbmcga2V5ZnJhbWUgc2VlayB0byBmaW5kIHRoZSBzYW1wbGUgaW5kZXggYmVmb3JlIHRoZSBvbmUgaXQgc2hvdWxkCi0JICBjYXVzaW5nIGZ1cnRoZXIgYmFja3dhcmQgc2Vla2luZyB0byB0aGUga2V5ZnJhbWUgcHJpb3IgdW50aWwgbm8gcm91bmRpbmcgZXJyb3IKLQkgIG9jY3VycmVkLgotCSAgUm91bmRpbmcgdXAgd2hlbiBzY2FsaW5nIHRvIG1vdiBmb3JtYXQgaGFzIHRoZSBkZXNpcmVkIGVmZmVjdCwgYW5kIGl0IGlzCi0JICBub3QgY2xlYXIgd2hldGhlciBqdXN0IHRoZSBfcm91bmQgKCkgdmFyaWFudCB3b3VsZCBiZSBzdWZmaWNpZW50LgotCSAgRml4ZXMgYnVnICM2MTkxMDUKLQotMjAxMC0wNS0yNCAxNzoyNjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgYXZpbXV4LCBmbHZtdXgsIG1hdHJvc2thbXV4OiBkb24ndCBjcmFzaCBpZiB0YWdzIGFycml2ZSBvbiBtdWx0aXBsZSBpbnB1dCBwYWRzIGF0IHRoZSBzYW1lIHRpbWUKLQkgIFRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4IGZvciB0aGUgcmVsZWFzZSBvbmx5LgotCSAgRml4ZXMgIzYxOTUzMy4KLQotMjAxMC0wNS0yNSAxNzowNToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIHJ0cHRoZW9yYTogcmVtb3ZlIGRlbGl2ZXJ5LW1ldGhvZCBmcm9tIGNhcHMKLQkgIFdlIGNhbiBhY2NlcHQgYWxsIGRlbGl2ZXJ5IG1ldGhvZHMgc28gZG9uJ3QgYWR2ZXJ0aXNlIGFueXRoaW5nIG9uIHRoZSBjYXBzIG9yCi0JICBwYXJzZSBhbnl0aGluZywgd2Ugd2lsbCBoYW5kbGUgd2hhdGV2ZXIgd2UgcmVjZWl2ZS4KLQkgIEZpeGVzICM2MTg5NDAKLQotMjAxMC0wNS0yNSAxNTo0MDowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS5jOgotCSAgbWF0cm9za2E6IGFkZCB0ZW1wb3Jhcnkgd2VibSB0eXBlZmluZGVyCi0JICBBZGQgd2VibSB0eXBlZmluZGVyIGp1c3QgZm9yIHRoZSByZWxlYXNlLCBzbyB3ZWJtIHdvcmtzIGZvcgotCSAgcGVvcGxlIHdob3NlIGRpc3Ryb3MgZG9uJ3QgcGF0Y2ggZ3N0LXBsdWdpbnMtYmFzZSBhcyB3ZWxsLgotCSAgV2UnbGwgcmVtb3ZlIHRoaXMgYWdhaW4gYWZ0ZXIgdGhlIHJlbGVhc2UuCi0KLTIwMTAtMDUtMjMgMTE6MTc6MjcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2Evd2VibS1tdXguYzoKLQkgIGRvY3M6IGFkZCBzb21lIHBpcGVsaW5lIGV4YW1wbGVzIHRvIHdlYm1tdXggZG9jcwotCi0yMDEwLTA1LTIxIDEyOjI3OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWltYWdlZnJlZXplLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBkb2NzOiBhZGQgd2VibW11eCB0byBkb2NzCi0KLTIwMTAtMDUtMjEgMTM6MDE6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EuYzoKLQkqIGdzdC9tYXRyb3NrYS93ZWJtLW11eC5jOgotCSAgbWF0cm9za2E6IGZpeCB1cCBwbHVnaW4gYW5kIGVsZW1lbnQgZGVzY3JpcHRpb25zIGEgYml0Ci0KLTIwMTAtMDUtMjEgMTI6NDc6MDMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EuYzoKLQkqIGdzdC9tYXRyb3NrYS93ZWJtLW11eC5jOgotCSogZ3N0L21hdHJvc2thL3dlYm0tbXV4Lmg6Ci0JICBtYXRyb3NrYTogbW92ZSB3ZWJtbXV4IGludG8gb3duIHNvdXJjZSBmaWxlcwotCSAgTWFrZXMgdGhpbmdzIGVhc2llciBmb3IgZ3RrLWRvYy4KLQotMjAxMC0wNS0yMSAxMjoyNjowNSArMDUwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxjaHJpc3RpYW4uc2NoYWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBVcGRhdGUgc3BlYyBmaWxlIHdpdGggbGF0ZXN0IGNoYW5nZXMKLQotMjAxMC0wNS0yMCAyMDowMTo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IFJlbW92ZSB0aGUgZG9jdHlwZSBlbnVtLCBpdCdzIG5vdCBuZWVkZWQgYW55bW9yZQotCi0yMDEwLTA1LTIwIDE5OjU3OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgd2VibW11eDogQWRkIG5ldyB3ZWJtbXV4IGVsZW1lbnQgdGhhdCBvbmx5IHN1cHBvcnRzIG11eGluZyBvZiBXZWJNCi0JICAuLi5hbmQgcmVtb3ZlIHRoZSBkb2N0eXBlIHByb3BlcnR5IGZyb20gbWF0cm9za2FtdXggYWdhaW4uCi0KLTIwMTAtMDUtMjAgMTc6MzE6NTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOgotCSAgbWF0cm9za2FtdXg6IHVuaXQgdGVzdCBjaGVja3MgdmVyc2lvbiAxIGZpbGVzCi0KLTIwMTAtMDUtMTggMTU6Mjc6MDYgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgIHNwZWV4OiBmaXggbGF0ZW5jeSBxdWVyeQotCSAgU3BlZXggc2hvdWxkIHJlcG9ydCAzMCBtcyBsYXRlbmN5IGZvciBuYXJyb3diYW5kIG1vZGUsIDM0IG90aGVyd2lzZS4KLQkgIEZpeGVzICM2MTkwMTgKLQotMjAxMC0wNS0xOCAyMTowNDozMiArMDgwMCAgUGhpbGlwIDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSAgZWJtbHJlYWQ6IHJtIGZsb2F0Y2FzdC5oIGluY2x1ZGUgKG5vdCB1c2VkKQotCi0yMDEwLTA1LTE3IDA1OjM2OjAwICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogYnVtcCBkZWZhdWx0IGRvY3R5cGUgdmVyc2lvbiB0byAyCi0JICBJbiB0aGlzIGRheSBhbmQgYWdlIHRoaXMgc2hvdWxkIGJlIHNhZmUuIFRoZXJlJ3Mgb3RoZXJ3aXNlIGEgcmlzayBwZW9wbGUKLQkgIHdpbGwgYmUgY3JlYXRpbmcgdW5uZWNjZXNzYXJpbHkgYmlnIFdlYk0gZmlsZXMgYXMgdGhleSBjYW4ndCB1c2UKLQkgIFNpbXBsZUJsb2NrIGluIHYxLgotCi0yMDEwLTA1LTE3IDA1OjI3OjQ0ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBoYW5kbGUgbWF0cm9za2EgYW5kIHdlYm0gZG9jdHlwZSB2ZXJzaW9ucyBlcXVhbGx5Ci0JICBUaGUgb3JpZ2luYWwgcGxhbiB3YXMgdG8gbGV0IFdlYk0gdjEgYmUgdGhlIHNhbWUgYXMgTWF0cm9za2EgdjIgKHdpdGgKLQkgIGV4dHJhIGNvbnN0cmFpbnRzKSwgYnV0IGZvciBzaW1wbGljaXR5IGl0IHdhcyBkZWNpZGVkIHRvIGhhbmRsZSB0aGUKLQkgIHZlcnNpb25zIGVxdWFsbHksIHN1Y2ggdGhhdCBlLmcuIFNpbXBsZUJsb2NrIGlzIG9ubHkgYWxsb3dlZCBpbiBXZWJNIHYyLgotCi0yMDEwLTA1LTEzIDEyOjEwOjU0ICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFZlcmlmeSBsYWNlIHNpemUgaW4gX3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2sKLQkgIEZhaWx1cmUgdG8gZG8gdGhpcyBmb3IgY29ycnVwdCBpbnB1dCBjYW4gY2F1c2UgYSBzdWJidWZmZXIgYmlnZ2VyCi0JICB0aGFuIHRoZSBhY3R1YWwgYnVmZmVyIHRvIGJlIGNyZWF0ZWQsIHF1aWNrbHkgbGVhZGluZyB0byBzZWdmYXVsdC4KLQkgIFRlc3QgY2FzZToKLQkgIGJ1Z19zMjIyMDA1NzUxX3IwLjAwMV9fX19tZW1jcHkud2VibQotCi0yMDEwLTA1LTEzIDEwOjIzOjEwICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcGpAb3BlcmEuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIGVibWw6IGNydWRlIGhhY2sgdG8gYXZvaWQgY3Jhc2hpbmcgb24gdW5leHBlY3RlZCBtZXRhZGF0YQotCSAgVGhlIGNvbW1lbnQgc2F5cyB0aGlzIGNhbm5vdCBoYXBwZW4sIGJ1dCBpdCBkaWQgYW5kIEkgZG9uJ3Qga25vdwotCSAgd2h5LiBUaGlzIGlzIG5vdCB0aGUgY29ycmVjdCBmaXgsIG5lZWRzIGludmVzdGlnYXRpb24uIFRlc3QgY2FzZToKLQkgIGJ1Z19zNTU1MDEwMDk0X3IwLjAwMDU6MC4wMDhfX19fSUFfX2dfYXNzZXJ0aW9uX21lc3NhZ2VfZXhwci53ZWJtCi0KLTIwMTAtMDUtMTMgMDk6MTg6NTYgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkgIGVibWw6IGRvbid0IG1vZGlmeSBvdXQgc3RyIGlmIHJldHVybmluZyBhbiBlcnJvciBpbiBfcmVhZF9hc2NpaQotCSAgVGhpcyBpcyBhIHJlZ3Jlc3Npb24gZnJvbSBBU0NJSSB2YWxpZGF0aW9uIGNoYW5nZXMuIFRlc3QgY2FzZToKLQkgIGJ1Z19zNjY4NzYzOTBfcjAuMDAxX19fX21hbGxvY19wcmludGVyci53ZWJtCi0KLTIwMTAtMDUtMTIgMTM6MTY6MjggKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkgIGVibWw6IFZhbGlkYXRlIDctYml0IEFTQ0lJIGluIGdzdF9lYm1sX3JlYWRfYXNjaWkKLQkgIFRoaXMgd2FzIHRyaWdnZXJpbmcgYW4gVVRGLTggYXNzZXJ0aW9uIGluIGdzdF9jYXBzX3NldF9zaW1wbGUgZm9yCi0JICBjb3JydXB0IGZpbGVzIHdpdGggZ2FyYmFnZSBhcyBjb2RlYyBpZC4gVGVzdCBjYXNlOgotCSAgZ3N0cmVhbWVyX2Vycm9yX3RyeWluZ190b19zZXRfaW52YWxpZF91dGY4X2FzX2NvZGVjX2lkLndlYm0KLQkgIE9sZCBnc3RfZWJtbF9yZWFkX2FzY2lpIHJlbmFtZWQgdG8gZ3N0X2VibWxfcmVhZF9zdHJpbmcsIGFsc28gdXNlZCBieQotCSAgZ3N0X2VibWxfcmVhZF91dGY4LiBVbmxpa2UgZm9yIFVURi04LCBmYWlsdXJlIHRvIHZhbGlkYXRlIGlzIGFuIGVycm9yLAotCSAgYXMgZ3N0X2VibWxfcmVhZF9hc2NpaSBpcyB1c2VkIGZvciByZWFkaW5nIGRvY3R5cGUgYW5kIGNvZGVjIGlkIGFuZCB3ZQotCSAgbWlnaHQganVzdCBhcyB3ZWxsIGdpdmUgdXAgZWFybHkgaW4gdGhvc2UgY2FzZXMuCi0KLTIwMTAtMDUtMTIgMTQ6MzA6MTggKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwakBvcGVyYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogSWdub3JlIHVuZXhwZWN0ZWQgQ29kZWNTdGF0ZQotCSAgQmVjYXVzZSBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtIGlzIHNldCB1cCBpbiB0aGUgZmlyc3QKLQkgIFNpbXBsZUJsb2NrIG9yIEJsb2NrLCBhIHJvZ3VlIENvZGVjU3RhdGUgb3RoZXJ3aXNlIGNhdXNlcyBhIHNlZ2ZhdWx0IG9uCi0JICBkZXJlZmVuY2luZyB0aGUgTlVMTCBwb2ludGVyLiBUZXN0IGNhc2U6Ci0JICBidWdfczU1MDYxNjdfcjAuMDAxX19fX2dzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrLndlYm0KLQotMjAxMC0wNS0xMCAwNjowMDo0OSArMDIwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBBZGQgdmlkZW8vd2VibSBzaW5rIGNhcHMKLQotMjAxMC0wNS0wOSAxOTo0Njo1MSArMDIwMCAgUGhpbGlwIErDpGdlbnN0ZWR0IDxwaGlsaXBAZm9vbGlwLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IFVzZSBTaW1wbGVCbG9jayBmb3IgV2ViTSB3aGVuIHBvc3NpYmxlCi0KLTIwMTAtMDUtMDkgMTk6Mjg6NTkgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwQGZvb2xpcC5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogU3VwcG9ydCAid2VibSIgRG9jVHlwZQotCi0yMDEwLTA1LTA5IDEyOjM1OjEwICswMjAwICBQaGlsaXAgSsOkZ2Vuc3RlZHQgPHBoaWxpcEBmb29saXAub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBtYXRyb3NrYW11eDogcmVuYW1lIG1hdHJvc2thX3ZlcnNpb24gdG8gZG9jdHlwZV92ZXJzaW9uCi0KLTIwMTAtMDUtMDkgMTI6MDk6NTcgKzAyMDAgIFBoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwQGZvb2xpcC5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBTdXBwb3J0ICJ3ZWJtIiBEb2NUeXBlCi0KLTIwMTAtMDUtMTIgMTg6Mzg6NDggLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgVlA4Ci0KLTIwMTAtMDQtMjcgMTU6MjY6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBBZGQgc3VwcG9ydCBmb3IgT24yIFZQOAotCSAgLi4ubWF0cm9za2FkZW11eCBhdXRvbWF0aWNhbGx5IHN1cHBvcnRzIGl0IHRocm91Z2ggbGliZ3N0cmlmZi4KLQotMjAxMC0wNC0yNyAxNToyNTozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IEFkZCBzdXBwb3J0IGZvciBPbjIgVlA4Ci0JICAuLi5hdmlkZW11eCBhdXRvbWF0aWNhbGx5IHN1cHBvcnRzIGl0IHRocm91Z2ggbGliZ3N0cmlmZi4KLQotMjAxMC0wNS0xNyAxNzoxNzowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2U6IERvbid0IGxvY2sgdGhlIG1haW5sb29wIGluIE5VTEwKLQotMjAxMC0wNS0xNSAyMToxNTo1MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogVXNlID0gaW5zdGVhZCBvZiA9PSBpbiBzaGVsbCBzY3JpcHRzIGZvciBlcXVhbGl0eSBjaGVja3MKLQotMjAxMC0wNS0xNCAxODozMzozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjIuMiBwcmUtcmVsZWFzZQotCi0yMDEwLTA1LTE0IDE4OjI0OjE0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDRkNjdiZDYgdG8gMzU3YjBkYgotCi0yMDEwLTA1LTE0IDE4OjE2OjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIHRlc3RzOiBmaXggbGVhayBpbiBzb3VwaHR0cHNyYyB1bml0IHRlc3QKLQkgIFVucmVmIHNlcnZlciBvYmplY3RzIHdoZW4gZG9uZS4gRml4ZXMgY2hlY2stdmFsZ3JpbmQuCi0KLTIwMTAtMDUtMTQgMTc6MzA6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBmaXggdHdvIGxlYWtzCi0JICBEb24ndCBsZWFrIG90aGVyY2FwcyBvciBqcGVnZW5jIHJlZi4KLQotMjAxMC0wNS0xMyAxMzowMToyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGZpeCBkb2NzCi0JICBEb2N1bWVudGF0aW9uIGVycm9yIHNwb3R0ZWQgYnkgdG9ueSA8Y2FpY2FpMDExOSBhdCBnbWFpbC5jb20+Ci0JICBGaXhlcyAjNjE4NDE5Ci0KLTIwMTAtMDUtMTEgMTM6MTg6NDIgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSAgcnRwdGhlb3JhZGVwYXk6IG1ha2UgZGVsaXZlcnktbWV0aG9kIHBhcmFtZXRlciBvcHRpb25hbAotCSAgSXQgcHJvYmFibHkgd2lsbCBub3QgYmUgaW4gdGhlIGZpbmFsIFJGQyBhcyBpdCBpcyBub3QgaW4gUkZDIDUyMTUgZm9yIFZvcmJpcy4KLQkgIElmIHRoZXJlIGlzIGEgY29uZmlndXJhdGlvbiBzcGVjaWZpZWQsIGFzc3VtZSBpdCBpcyBpbi1saW5lIGFuZCBpZiBub3RoaW5nIGlzCi0JICBzcGVjaWZpZWQsIGFzc3VtZSBpdCBpcyBpbi1iYW5kLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxODM4NgotCi0yMDEwLTA1LTEzIDEyOjE2OjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBpbmNyZWFzZSBhY2NlcHRhYmxlIG91dHB1dCBzaXplcwotCSAgV2UgY2FuIHBlcmZlY3RseSBkZWNvZGUgMXgxIGltYWdlcyBzbyBsb3dlciB0aGUgbWluIHdpZHRoIGFuZCBoZWlnaHQgdG8gMS4KLQkgIEZpeGVzICM2MTgzOTIKLQotMjAxMC0wNS0xMyAxMTozMDoyNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmM6Ci0JICBjZWx0cGF5OiBmaXggcXVldWUgZHVyYXRpb24gY2FsY3VsYXRpb25zCi0JICBEb24ndCBibGluZGx5IGFkZCB0aGUgZHVyYXRpb25zIG9mIGluY29tbWluZyBidWZmZXJzIHRvIHRoZSB0b3RhbCBxdWV1ZWQKLQkgIGR1cmF0aW9uIGJlY2F1c2UgaXQgbWlnaHQgYmUgaW52YWxpZC4gTWFyayB0aGUgdG90YWwgcXVldWVkIGR1cmF0aW9uIGludmFsaWQKLQkgIHdoZW4gd2UgcmVjZWl2ZSBhbiBpbnZhbGlkIGluY29tbWluZyB0aW1lc3RhbXAgYmVjYXVzZSB0aGF0J3Mgd2hlbiB3ZSBsb3NlIHRyYWNrCi0JICBvZiB0aGUgdG90YWwgcXVldWVkIGR1cmF0aW9uLgotCSAgRml4ZXMgIzYxODMyNAotCi0yMDEwLTA1LTEwIDExOjE0OjM5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBleHRyYWN0IFNQUyBhbmQgUFBTIGZyb20gcHJvcGVydHkgcHJvdmlkZWQgcGFyYW1ldGVyIHNldAotCSAgLi4uIHNvIGl0IGNhbiBhbHNvIGJlIHJlZ3VsYXJseSBpbnNlcnRlZCBpbnRvIHRoZSBzdHJlYW0gaWYgc28gY29uZmlndXJlZC4KLQkgIEZpeGVzICM2MTcxNjQuCi0KLTIwMTAtMDUtMTEgMjI6Mjg6MDggKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGFsbG93IHN3aXRjaGluZyB2aWV3cyBhdCBydW50aW1lLgotCi0yMDEwLTA1LTExIDIwOjI2OjM3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgIHJ0cDogZGlzdCBtaXNzaW5nIGhlYWRlciBmaWxlIHRvIGZpeCBtYWtlIGRpc3RjaGVjawotCi0yMDEwLTA1LTExIDE5OjA1OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JICBvc3M0OiBtaW5vciBjbGVhbnVwCi0JICBSZW1vdmUgZml4ZWQgRklYTUUsIGNoYW5nZSBmaW5hbGlzZSB0byBmaW5hbGl6ZSBmb3IgY29uc2lzdGVuY3kuCi0KLTIwMTAtMDUtMTEgMTk6MDE6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWw6Ci0JICBkb2NzOiBhZGQgb3NzNCBlbGVtZW50cyB0byBkb2NzCi0KLTIwMTAtMDUtMTEgMTY6MDk6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8va3kucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiBtb3ZlIG9zczQgc3RyaW5ncyBmcm9tIC1iYWQgdG8gLWdvb2QKLQotMjAxMC0wNS0xMSAxNjowODoyMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSogc3lzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgTW92ZSBvc3M0IHBsdWdpbiBmcm9tIC1iYWQgdG8gLWdvb2QKLQkgIEhvb2sgdXAgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUsIGRvY3MgYW5kIHRlc3RzLgotCSAgRml4ZXMgIzYxNDMwNS4KLQotMjAxMC0wNC0yOSAxMzoxODo1OCArMDEwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBvcmFjbGUuY29tPgotCi0JKiBzeXMvb3NzNC9vc3M0LXNpbmsuYzoKLQkqIHN5cy9vc3M0L29zczQtc2luay5oOgotCSAgb3NzNHNpbms6IGltcGxlbWVudCBHc3RTdHJlYW1Wb2x1bWUgaW50ZXJmYWNlIGFuZCBhZGQgbXV0ZSBhbmQgdm9sdW1lIHByb3BlcnRpZXMKLQkgIE9TUzQgc3VwcG9ydHMgcGVyLXN0cmVhbSB2b2x1bWUgY29udHJvbCwgc28gZXhwb3NlIHRoaXMgdXNpbmcgdGhlIHJpZ2h0Ci0JICBBUEksIHNvIHRoYXQgcGxheWJpbjIgYW5kIGFwcGxpY2F0aW9ucyBsaWtlIHRvdGVtIGNhbiBtYWtlIHVzZSBvZiBpdAotCSAgKGluc3RlYWQgb2YgdXNpbmcgYSB2b2x1bWUgZWxlbWVudCBmb3Igdm9sdW1lIGNvbnRyb2wpLgotCSAgRml4ZXMgIzYxNDMwNS4KLQotMjAxMC0wNC0wOCAxMDo0NTozMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uYzoKLQkgIG9zczQ6IDgtYml0IFBDTSBhdWRpbyBjYXBzIGRvbid0IG5lZWQgYW4gZW5kaWFubmVzcyBmaWVsZAotCi0yMDEwLTA0LTA4IDEwOjQwOjAyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zczQvb3NzNC1hdWRpby5jOgotCSAgb3NzNDogZG9uJ3QgaXRlcmF0ZSB0aGUgZm9ybWF0cyB0YWJsZSB0d2ljZSBmb3IgZWFjaCBlbnRyeQotCSAgV2hlbiBpdGVyYXRpbmcgdGhlIGZvcm1hdHMgdGFibGUsIHdlIGNhbiBqdXN0IHBhc3MgdGhlIHdob2xlCi0JICBlbnRyeSB0byBvdXIgaGVscGVyIGZ1bmN0aW9uLCB3aGljaCBhdm9pZHMgaXRlcmF0aW5nIHRoZSB0YWJsZQotCSAgYWdhaW4gdG8gZmluZCB0aGUgZW50cnkgc3RydWN0dXJlIGZyb20gdGhlIHBhc3NlZCBmb3JtYXQgaWQuCi0KLTIwMTAtMDMtMzAgMTE6NDM6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzNC9vc3M0LWF1ZGlvLmM6Ci0JICBvc3M0OiBhbHNvIGFjY2VwdCBmb3JtYXRzIG5vdCBuYXRpdmVseSBzdXBwb3J0ZWQKLQkgIEFsc28gYWNjZXB0IGZvcm1hdHMgdGhhdCBhcmUgbm90IG5hdGl2ZWx5IHN1cHBvcnRlZCBieSB0aGUKLQkgIGhhcmR3YXJlLCBPU1M0IGNhbiBjb252ZXJ0IHRoZW0gaW50ZXJuYWxseS4gTGlzdCB0aGUgbmF0aXZlCi0JICBmb3JtYXRzIGZpcnN0IGluIHRoZSBjYXBzIHRob3VnaCwgdG8gZXhwcmVzcyBvdXIgcHJlZmVyZW5jZQotCSAgZm9yIHRoZSBuYXRpdmUgZm9ybWF0cy4gV2UgbmVlZCB0aGlzIGluIG9yZGVyIHRvIHN1cHBvcnQgdGhlCi0JICBjYXNlIHByb3Blcmx5IHdoZXJlIHRoZSBhdWRpbyBoYXJkd2FyZSBzdXBwb3J0cyBvbmx5IGUuZy4KLQkgIGxpdHRsZSBlbmRpYW4gUENNLCBidXQgdGhlIGhvc3QgaXMgYmlnIGVuZGlhbiwgc2luY2UgbWFueQotCSAgYXVkaW8gZWxlbWVudHMgb25seSBzdXBwb3J0IG5hdGl2ZSBlbmRpYW5uZXNzIGFuZCBtYWtlIHRoZQotCSAgcmVhc29uYWJsZSBhc3N1bXB0aW9uIHRoYXQgYW55IGF1ZGlvc2luayB3aWxsIGJlIGFibGUgdG8KLQkgIGhhbmRsZSBhdWRpbyBpbiBuYXRpdmUgZW5kaWFubmVzcy4KLQkgIEJhc2VkIG9uIHBhdGNoIGJ5IEplcnJ5IFRhbiA8amVycnkudGFuQHN1bi5jb20+Ci0JICBGaXhlcyAjNjE0MzE3LgotCi0yMDEwLTAzLTMwIDAxOjE0OjU4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSAgb3NzNDogYWRkIGNvbW1lbnQgZm9yIHRyYW5zbGF0b3JzCi0JICBOb3QgdGhhdCB0aGF0IHdpbGwgbWFrZSB0aGVzZSBzdHJpbmdzIG11Y2ggYmV0dGVyLiBBbHNvIHJlbW92ZSBpMThuCi0JICBtYXJrZXIgd2hlcmUgaXQgZG9lc24ndCBtYWtlIHNlbnNlLgotCi0yMDEwLTAzLTIyIDE2OjEzOjEyICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHN5cy9vc3M0L29zczQtbWl4ZXIuYzoKLQkgIG9zczQ6IFJlZmFjdG9yIGNvZGUgdG8gbWFrZSBpdCBsb29rIG1vcmUgbW9kZXJuCi0JICBBIHNpZGUgZWZmZWN0IGlzIHRoYXQgaXQgcGFzc2VzIC1XZm9ybWF0LW5vbmxpdGVyYWwgYW5kIGRvZXNuJ3QgcmVhZAotCSAgaW52YWxpZCBtZW1vcnkgaW4gc29tZSBjYXNlcywgbGlrZSB3aGVuIHRoZSBtaXhlciB0cmFjayBjb250YWlucwotCSAgYSAlIHNpZ24gb3IgdGhlcmUgaXMgYSBudW1iZXIgYnV0IG5vdCBhIGtub3duIG1peGVyIG5hbWUuCi0KLTIwMTAtMDMtMjIgMTQ6MDk6MjQgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSAgb3NzNDogQXZvaWQgZ19xdWFya190b19zdHJpbmcgKGdfcXVhcmtfZnJvbV9zdHJpbmcgKCkpIG1hZG5lc3MKLQkgIFdlIHRvIHRoZSBzdHJkdXAgaW5zaWRlIGdzdF9vc3M0X21peGVyX2NvbnRyb2xfZ2V0X3RyYW5zbGF0ZWRfbmFtZSgpCi0JICBpbnN0ZWFkIG9mIGluIHRoZSBvbmx5IGNhbGxlci4KLQotMjAxMC0wMy0yMSAyMTozOToxOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICBBZGQgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyB0byBjb25maWd1cmUgZmxhZ3MKLQkgIEFuZCBmaXggYWxsIHdhcm5pbmdzCi0KLTIwMTAtMDEtMjAgMTM6Mjk6NTIgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgdW51c2VkIHJldHVybiB2YWx1ZQotCi0yMDA5LTA4LTIxIDAxOjE3OjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvaWNsZXMvdGVzdC1vc3M0LmM6Ci0JICB0ZXN0czogZml4IHRlc3Qtb3NzNCB0byB0cmVhdCBhbiBlbXB0eSBkZXZpY2UgbmFtZSB0aGUgc2FtZSBhcyBhIE5VTEwgbmFtZQotCi0yMDA5LTA3LTE2IDEzOjU1OjE0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHN5cy9vc3M0L29zczQtbWl4ZXIuYzoKLQkgIG9zczQ6IEF0dGVtcHQgdG8gZml4IGEgY29tcGlsZXIgd2FybmluZwotCSAgRG9uJ3Qgc3RvcmUgYSBjb25zdCBnY2hhciAqIGluIGEgbm9uLWNvbnN0IGdjaGFyICogbG9jYWwgdmFyLgotCSAgQWxzbywgbWFrZSB0aGUgdHJhbnNsYXRpb24gc3RyaW5nIGZ1bmN0aW9uIHN0YXRpYyBzaW5jZSBpdCdzIG9ubHkKLQkgIHVzZWQgaW4gdGhlIG9uZSBmaWxlLgotCi0yMDA5LTA2LTEwIDE5OjIxOjIxICswMTAwICBHYXJyZXR0IEQnQW1vcmUgPGdhcnJldHQuZGFtb3JlQHN1bi5jb20+Ci0KLQkqIHN5cy9vc3M0L29zczQtYXVkaW8uYzoKLQkqIHN5cy9vc3M0L29zczQtbWl4ZXItc2xpZGVyLmM6Ci0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLXN3aXRjaC5jOgotCSogc3lzL29zczQvb3NzNC1taXhlci5jOgotCSAgb3NzNDogRW5oYW5jZW1lbnRzIHRvIHRoZSBtaXhlciBhbmQgYXVkaW8gb3V0cHV0Ci0JICBDb2RlIGNsZWFudXBzLCBnZW5lcmFsIGltcHJvdmVtZW50cywgc3VwcG9ydCBmb3IgdGhlCi0JICBuZXcgbWl4ZXIgZmxhZ3MgaW4gbGF0ZXN0IGdzdC1wbHVnaW5zLWJhc2UuCi0JICBGaXhlczogIzU4NDI1MgotCSAgUGF0Y2ggQnk6IEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQkgIFBhdGNoIEJ5OiBHYXJyZXR0IEQnQW1vcmUgPGdhcnJldHQuZGFtb3JlQHN1bi5jb20+Ci0KLTIwMDktMDYtMTkgMTY6MjE6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICBNYWtlIGJ1aWxkIHdpdGhvdXQgd2FybmluZ3Mgd2l0aCBkZWJ1Z2dpbmcgZGlzYWJsZWQKLQotMjAwOC0xMS0wNCAxMjo0MjozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBEb24ndCBpbnN0YWxsIHN0YXRpYyBsaWJzIGZvciBwbHVnaW5zLiBGaXhlcyAjNTUwODUxIGZvciAtYmFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hbHNhc3BkaWYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hbXJ3Yi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FwZXhzaW5rL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXJ0cy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FydHNkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXVkaW9maWxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXVkaW9yZXNhbXBsZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2J6Mi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NkYXVkaW8vTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9jZWx0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGMxMzk0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGlyYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kaXJlY3RmYi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RpdngvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kdHMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9mYWFjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmFhZC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2dzbS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2hlcm1lcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2l2b3JiaXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qYWNrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvanAyay9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xhZHNwYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xjcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xpYmZhbWUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9saWJtbXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tZXRhZGF0YS9NYWtlZmlsZS5hbToKLQkgICogZXh0L21wZWcyZW5jL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXBsZXgvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tdXNlcGFjay9NYWtlZmlsZS5hbToKLQkgICogZXh0L211c2ljYnJhaW56L01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXl0aHR2L01ha2VmaWxlLmFtOgotCSAgKiBleHQvbmFzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbmVvbi9NYWtlZmlsZS5hbToKLQkgICogZXh0L29mYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3BvbHlwL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcmVzaW5kdmQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zZGwvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zaG91dC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NuYXBzaG90L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc25kZmlsZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NvdW5kdG91Y2gvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zcGMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zd2ZkZWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YXJraW4vTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90aGVvcmEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90aW1pZGl0eS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3R3b2xhbWUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC94MjY0L01ha2VmaWxlLmFtOgotCSAgKiBleHQveGluZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3h2aWQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC1saWJzL2dzdC9hcHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FpZmZwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FwcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvYnVmZmVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYmF5ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9jZHhhcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9jaGFydC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NvbG9yc3BhY2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kY2NwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZTIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kdmRzcHUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9mZXN0aXZhbC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2ZpbHRlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2ZsYWNwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Zsdi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dhbWVzL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvaDI2NHBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbGlicmZiL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbWl4bWF0cml4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbW9kcGx1Zy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21wZWcxc3lzL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZzR2aWRlb3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZ2RlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZ3RzbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZ3ZpZGVvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tdmUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9uc2YvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9udXZkZW11eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L292ZXJsYXkvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9wYXNzdGhyb3VnaC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3BjYXBwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3BsYXlvbmRlbWFuZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Jhd3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcmVhbC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0anBlZy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zY2FsZXRlbXBvL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc2RwL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc2VsZWN0b3IvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zbW9vdGgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zbW9vdGh3YXZlL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3BlZWQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVleHJlc2FtcGxlL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3RlcmVvL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3ViZW5jL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdHRhL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmJpZGVjL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9kcm9wL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aXJ0dWFsZHViL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvdm1uYy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3k0bS9NYWtlZmlsZS5hbToKLQkgICogc3lzL2FjbWVuYy9NYWtlZmlsZS5hbToKLQkgICogc3lzL2Nkcm9tL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZHNob3dkZWN3cmFwcGVyL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZHNob3dzcmN3cmFwcGVyL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZHZiL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZHhyMy9NYWtlZmlsZS5hbToKLQkgICogc3lzL2ZiZGV2L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvb3NzNC9NYWtlZmlsZS5hbToKLQkgICogc3lzL3FjYW0vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9xdHdyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy92Y2QvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy93aW5pbmV0L01ha2VmaWxlLmFtOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBEb24ndCBpbnN0YWxsIHN0YXRpYyBsaWJzIGZvciBwbHVnaW5zLiBGaXhlcyAjNTUwODUxIGZvciAtYmFkLgotCi0yMDA4LTEwLTEyIDIxOjUyOjI3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgc3lzL29zczQvOiBBZGQgc29tZSBzcGFjZXMgaW4gdHJhbnNsYXRlYWJsZSBzdHJpbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3M0L29zczQtbWl4ZXIuYzoKLQkgICogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JICBBZGQgc29tZSBzcGFjZXMgaW4gdHJhbnNsYXRlYWJsZSBzdHJpbmdzLgotCSAgRml4ZXM6ICM1NTU5NjkgIzU1NTk2OCAjNTU1OTY1Ci0KLTIwMDgtMDgtMDcgMTY6MjA6MzAgKzAwMDAgIEZyZWRlcmljIENyb3phdCA8ZmNyb3phdEBtYW5kcml2YS5vcmc+Ci0KLQkgIE1ha2Ugc3VyZSBnZXR0ZXh0IHJldHVybnMgdHJhbnNsYXRpb25zIGluIFVURi04IGVuY29kaW5nIHJhdGhlciB0aGFuIGluIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZyAoIzU0NjgyMikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGcmVkZXJpYyBDcm96YXQgPGZjcm96YXRAbWFuZHJpdmEub3JnPgotCSAgKiBleHQvc25kZmlsZS9nc3RzZi5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBzeXMvZHZiL2dzdGR2YnNyYy5jOiAoZ3N0X2R2YnNyY19wbHVnaW5faW5pdCk6Ci0JICAqIHN5cy9vc3M0L29zczQtYXVkaW8uYzogKHBsdWdpbl9pbml0KToKLQkgIE1ha2Ugc3VyZSBnZXR0ZXh0IHJldHVybnMgdHJhbnNsYXRpb25zIGluIFVURi04IGVuY29kaW5nIHJhdGhlcgotCSAgdGhhbiBpbiB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgKCM1NDY4MjIpLgotCi0yMDA4LTA2LTE2IDA3OjMwOjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpbmFsIHJvdW5kIG9mIGRvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuYzoKLQkgICogZ3N0L3NwZWV4cmVzYW1wbGUvZ3N0c3BlZXhyZXNhbXBsZS5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9hbmFseXNlLmM6Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb2RldGVjdC5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9tYXJrLmM6Ci0JICAqIHN5cy9kdmIvZ3N0ZHZic3JjLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtbWl4ZXIuYzoKLQkgICogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JICAqIHN5cy93aW5pbmV0L2dzdHdpbmluZXRzcmMuYzoKLQkgIEZpbmFsIHJvdW5kIG9mIGRvYyB1cGRhdGVzLgotCi0yMDA4LTA2LTEyIDE0OjQ5OjE4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIERvIG5vdCB1c2Ugc2hvcnRfZGVzY3JpcHRpb24gaW4gc2VjdGlvbiBkb2NzIGZvciBlbGVtZW50cy4gV2UgZXh0cmFjdCB0aGVtIGZyb20gZWxlbWVudCBkZXRhaWxzIGFuZCB0aGVyZSB3aWxsIGJlIHdhci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kYzEzOTQvZ3N0ZGMxMzk0LmM6Ci0JICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2RlYy5jOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6Ci0JICAqIGV4dC9tZXRhZGF0YS9nc3RtZXRhZGF0YWRlbXV4LmM6Ci0JICAqIGV4dC9teXRodHYvZ3N0bXl0aHR2c3JjLmM6Ci0JICAqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6Ci0JICAqIGdzdC1saWJzL2dzdC9hcHAvZ3N0YXBwc2luay5jOgotCSAgKiBnc3QvYmF5ZXIvZ3N0YmF5ZXIycmdiLmM6Ci0JICAqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgKiBnc3QvcmF3cGFyc2UvZ3N0YXVkaW9wYXJzZS5jOgotCSAgKiBnc3QvcmF3cGFyc2UvZ3N0dmlkZW9wYXJzZS5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwY2xpZW50LmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICAqIGdzdC9zZWxlY3Rvci9nc3RpbnB1dHNlbGVjdG9yLmM6Ci0JICAqIGdzdC9zZWxlY3Rvci9nc3RvdXRwdXRzZWxlY3Rvci5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9hbmFseXNlLmM6Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb2RldGVjdC5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9tYXJrLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtbWl4ZXIuYzoKLQkgICogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JICBEbyBub3QgdXNlIHNob3J0X2Rlc2NyaXB0aW9uIGluIHNlY3Rpb24gZG9jcyBmb3IgZWxlbWVudHMuIFdlIGV4dHJhY3QKLQkgIHRoZW0gZnJvbSBlbGVtZW50IGRldGFpbHMgYW5kIHRoZXJlIHdpbGwgYmUgd2FybmluZ3MgaWYgdGhleSBkaWZmZXIuCi0JICBBbHNvIGZpeGluZyB1cCB0aGUgQ2hhbmdlTG9nIG9yZGVyLgotCi0yMDA4LTA2LTEyIDEzOjA2OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jOiBJbmNsdWRlIHN0ZGxpYi5oLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jOgotCSAgSW5jbHVkZSBzdGRsaWIuaC4KLQotMjAwOC0wNS0yMiAxNjozMzoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvaWNsZXMvOiBTbWFsbCBvc3M0IHRlc3QgdGhhdCBwcm9iZXMgZm9yIGF2YWlsYWJsZSBkZXZpY2VzIGFuZCByZXRyaWV2ZXMgdGhlaXIgY2FwcyBhbmQgbWl4ZXIgdHJhY2tzIGFuZCBhbGwgdGhhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jOiAob3B0X3Nob3dfbWl4ZXJfbWVzc2FnZXMpLCAoV0FJVF9USU1FKSwKLQkgIChzaG93X21peGVyX21lc3NhZ2VzKSwgKHByb2JlX21peGVyX3RyYWNrcyksIChwcm9iZV9wYWQpLAotCSAgKHByb2JlX2RldGFpbHMpLCAocHJvYmVfZWxlbWVudCksIChtYWluKToKLQkgIFNtYWxsIG9zczQgdGVzdCB0aGF0IHByb2JlcyBmb3IgYXZhaWxhYmxlIGRldmljZXMgYW5kIHJldHJpZXZlcwotCSAgdGhlaXIgY2FwcyBhbmQgbWl4ZXIgdHJhY2tzIGFuZCBhbGwgdGhhdC4gQWxzbyBhbGxvd3MgdGVzdGluZyBvZgotCSAgbWl4ZXIgY2hhbmdlIG1lc3NhZ2VzIG9uIHRoZSBidXMuCi0KLTIwMDgtMDUtMjIgMTU6MTQ6MjYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3M0LzogTWFrZSBkZXZpY2UtbmFtZSBwcm9iaW5nIGluIE5VTEwgc3RhdGUgd29yayBiZXR0ZXIgKGUuZy4gZm9yIHRoZSBnbm9tZS1jb250cm9sLWNlbnRlciBzb3VuZCBjYXBwbGV0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6IChnc3Rfb3NzNF9taXhlcl9vcGVuKToKLQkgICogc3lzL29zczQvb3NzNC1wcm9wZXJ0eS1wcm9iZS5jOgotCSAgKGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWUpLAotCSAgKGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWVfbm9mZCk6Ci0JICAqIHN5cy9vc3M0L29zczQtcHJvcGVydHktcHJvYmUuaDoKLQkgICogc3lzL29zczQvb3NzNC1zaW5rLmM6IChnc3Rfb3NzNF9zaW5rX2dldF9wcm9wZXJ0eSk6Ci0JICAqIHN5cy9vc3M0L29zczQtc291cmNlLmM6IChnc3Rfb3NzNF9zb3VyY2VfZ2V0X3Byb3BlcnR5KToKLQkgIE1ha2UgZGV2aWNlLW5hbWUgcHJvYmluZyBpbiBOVUxMIHN0YXRlIHdvcmsgYmV0dGVyIChlLmcuIGZvciB0aGUKLQkgIGdub21lLWNvbnRyb2wtY2VudGVyIHNvdW5kIGNhcHBsZXQpLgotCi0yMDA4LTA1LTA4IDE5OjE2OjE3ICswMDAwICBDbGl2ZSBXcmlnaHQgPGNsaXZlX3dyaWdodEBudGx3b3JsZC5jb20+Ci0KLQkgIHN5cy9vc3M0L29zczQtbWl4ZXItc2xpZGVyLmM6IEFwcGFyZW50bHkgbW9ubyBzbGlkZXJzIGhhdmUgdGhlIG1vbm8gdmFsdWUgcmVwZWF0ZWQgaW4gdGhlIHVwcGVyIGJpdHMsIHNvIG1hc2sgdGhvc2Ugby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogQ2xpdmUgV3JpZ2h0IDxjbGl2ZV93cmlnaHQgbnRsd29ybGQgY29tPgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLXNsaWRlci5jOiAoZ3N0X29zczRfbWl4ZXJfc2xpZGVyX3VucGFja192b2x1bWUpOgotCSAgQXBwYXJlbnRseSBtb25vIHNsaWRlcnMgaGF2ZSB0aGUgbW9ubyB2YWx1ZSByZXBlYXRlZCBpbiB0aGUgdXBwZXIgYml0cywKLQkgIHNvIG1hc2sgdGhvc2Ugb3V0IHdoZW4gcmVhZGluZyB0aGVtLiBQcm9iYWJseSBtYWtlcyB0aGUgbWl4ZXIgYXBwbGV0Ci0JICB3b3JrIHByb3Blcmx5IGluIHNvbWUgbW9yZSBjYXNlcy4KLQotMjAwOC0wNC0xMSAwODoxMzoyMiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHN5cy9vc3M0LzogRml4IGFyZ3VtZW50cyBmb3JtYXQgaW4gZGVidWcgc3RhdGVtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0wNC0xMSAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQkgICogc3lzL29zczQvb3NzNC1taXhlci1lbnVtLmM6Ci0JICAoZ3N0X29zczRfbWl4ZXJfZW51bV9nZXRfdmFsdWVzX2xvY2tlZCk6Ci0JICAqIHN5cy9vc3M0L29zczQtc291cmNlLmM6IChnc3Rfb3NzNF9zb3VyY2VfZGVsYXkpOiBGaXggYXJndW1lbnRzCi0JICBmb3JtYXQgaW4gZGVidWcgc3RhdGVtZW50cy4KLQotMjAwOC0wNC0wMiAyMDoxODo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgT1NTdjQuIE1peGVyIHN0aWxsIG5lZWRzIGEgYml0IG1vcmUgbG92ZSwgYnV0IGV2ZW4gbWFnaWMgaGFzIGl0cyBsaW1pdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBzeXMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3M0L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvb3NzNC9vc3M0LWF1ZGlvLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtYXVkaW8uaDoKLQkgICogc3lzL29zczQvb3NzNC1taXhlci1lbnVtLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtbWl4ZXItZW51bS5oOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLXNsaWRlci5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLXNsaWRlci5oOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLXN3aXRjaC5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLXN3aXRjaC5oOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtbWl4ZXIuaDoKLQkgICogc3lzL29zczQvb3NzNC1wcm9wZXJ0eS1wcm9iZS5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LXByb3BlcnR5LXByb2JlLmg6Ci0JICAqIHN5cy9vc3M0L29zczQtc2luay5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LXNpbmsuaDoKLQkgICogc3lzL29zczQvb3NzNC1zb3VuZGNhcmQuaDoKLQkgICogc3lzL29zczQvb3NzNC1zb3VyY2UuYzoKLQkgICogc3lzL29zczQvb3NzNC1zb3VyY2UuaDoKLQkgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIE9TU3Y0LiBNaXhlciBzdGlsbCBuZWVkcyBhIGJpdCBtb3JlIGxvdmUsCi0JICBidXQgZXZlbiBtYWdpYyBoYXMgaXRzIGxpbWl0cy4KLQotMjAxMC0wNS0xMSAxMDo1Mjo1OCArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZEBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IGltcGxlbWVudCB0aGUgeG92ZXJsYXkgaW50ZXJmYWNlLiBGaXhlcyAjNjE4MzQ5LgotCi0yMDEwLTA1LTExIDE4OjQyOjMyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IHB1c2ggYmFzZWQgc2Vla2luZwotCSAgLi4uIHdoZXJlIGl0IGNvbWVzIGRvd24gdG8gdHJhbnNmb3JtaW5nIGluY29taW5nIEJZVEUgc2VnbWVudAotCSAgdG8gYSBjb3JyZXNwb25kaW5nIFRJTUUgc2VnbWVudC4KLQkgIEFsc28gZml4ZXMgIzYwOTQwNS4KLQotMjAxMC0wNS0xMSAxNDoyMzo0NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWw6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICBNb3ZlIGltYWdlZnJlZXplIHBsdWdpbiBmcm9tIC1iYWQgdG8gLWdvb2QKLQkgIEhvb2sgdXAgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUsIGRvY3MgYW5kIHVuaXQgdGVzdCBmb3IgbmV3IHBsdWdpbi4KLQkgIEZpeGVzICM2MTM3ODYuCi0KLTIwMTAtMDUtMDUgMTI6MjM6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBTZXQgZml4ZWQgY2FwcyBvbiB0aGUgY29ycmVjdCBwYWQKLQkgIFRoaXMgbWFrZXMgdGhlIHNpbmsgZ2V0Y2FwcyBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIGluc3RlYWQgb2YgdXNpbmcKLQkgIHRoZSBmaXhlZCBjYXBzIGZ1bmN0aW9uIGZvciBpdC4KLQotMjAxMC0wMy0yMSAyMTozOToxOCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jOgotCSAgQWRkIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLXByb3RvdHlwZXMgdG8gY29uZmlndXJlIGZsYWdzCi0JICBBbmQgZml4IGFsbCB3YXJuaW5ncwotCi0yMDEwLTAzLTE1IDExOjU0OjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogT25seSBzdGFydCB0aGUgdGFzayBhZnRlciBhIHNlZWsgaWYgYSBidWZmZXIgd2FzIHJlY2VpdmVkIGFscmVhZHkKLQotMjAxMC0wMi0yOCAxNjowODoxNCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogQWRkIHNvbWUgdW5pdCB0ZXN0cwotCi0yMDEwLTAyLTI4IDE2OjA0OjMxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmM6Ci0JICBpbWFnZWZyZWV6ZTogU2V0IHVuZGVmaW5lZCBmcmFtZXJhdGUgaW4gc2luayBnZXRjYXBzIGZ1bmN0aW9uCi0KLTIwMTAtMDItMjggMTU6MDI6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkgIGltYWdlZnJlZXplOiBJbXBsZW1lbnQgcmV2ZXJzZSBwbGF5YmFjayBhbmQgc2V0IGJ1ZmZlciBvZmZzZXRzCi0KLTIwMTAtMDItMjcgMTc6MzM6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaW1hZ2VmcmVlemUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYzoKLQkqIGdzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5oOgotCSAgaW1hZ2VmcmVlemU6IEFkZCBzdGlsbCBmcmFtZSBzdHJlYW0gZ2VuZXJhdG9yIGVsZW1lbnQKLQotMjAxMC0wNS0xMSAxMzowNzoxOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBnc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGRlYnVnLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICBNb3ZlIGNhcHNmaWx0ZXIgZWxlbWVudCBmcm9tIC1iYWQgdG8gLWdvb2QKLQkgIEhvb2sgdXAgbW92ZWQgZmlsZXMgdG8gdGhlIGJ1aWxkIGluZnJhc3RydWN0dXJlIGFuZCBkb2NzLgotCSAgRml4ZXMgIzYxNzczOS4KLQotMjAxMC0wNS0wNiAxMzoxMjozMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuaDoKLQkgIGNhcHNzZXR0ZXI6IFNvbWUgbWlub3IgY2xlYW51cAotCi0yMDEwLTAzLTIyIDE2OjU2OjAzICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNzZXR0ZXIuYzoKLQkgIEFkZCAtV29sZC1zdHlsZS1kZWZpbml0aW9uCi0JICBhbmQgZml4IHRoZSB3YXJuaW5ncwotCi0yMDEwLTAzLTE4IDE3OjMwOjI2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYzoKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQotCi0yMDA5LTEwLTA4IDE5OjUxOjMxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY2Fwc3NldHRlci5jOgotCSAgY2Fwc3NldHRlcjogYWRkIHVuaXQgdGVzdAotCi0yMDA5LTA2LTI1IDE2OjQxOjQ5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc3NldHRlci5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc3NldHRlci5oOgotCSAgY2Fwc3NldHRlcjogaW1wb3J0IGVsZW1lbnQgaW50byAtYmFkCi0KLTIwMTAtMDUtMTEgMTI6MDY6MTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBjaGVjayB0aGF0IHBhZHMgaGF2ZSBiZWVuIG5lZ290aWF0ZWQKLQkgIEFsc28gc2V0IGZjY19oYW5kbGVyIGZpZWxkIGluIGF1ZGlvIHN0cmVhbSBoZWFkZXIuCi0JICBGaXhlcyAjNjE4MzUxLgotCi0yMDEwLTA1LTEwIDE4OjMzOjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IHBhcnRpYWwgcGFyc2luZyBvZiBjdHRzIHRhYmxlCi0JICBGaXhlcyAjNjE2NTE2LgotCi0yMDEwLTA1LTEwIDE4OjMyOjE1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogY2xlYW51cCBhIGNvbW1lbnQgYW5kIGFkZCBzb21lIGRlYnVnIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbgotCi0yMDEwLTA1LTExIDEwOjAxOjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBDaGVjayBmb3IgR1RLKyAzLjAgYW5kIGlmIGl0J3Mgbm90IGF2YWlsYWJsZSBmb3IgR1RLKyAyLjAKLQotMjAxMC0wNS0xMCAyMjoxMToxMCArMDIwMCAgSmFuIFVyYmHFhHNraSA8d3VsY3plckB3dWxjemVyLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogb25seSBzdG9yZSB0aGUgbGFzdCBidWZmZXIgdGltZXN0YW1wIGlmIGl0J3MgdmFsaWQKLQkgIEZpeGVzIGJ1ZyAjNjE4MzA1Ci0KLTIwMTAtMDEtMDggMjI6MTM6NTkgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBSZS1zZW5kIFNQUy9QUFMgd2hlbiByZXF1ZXN0ZWQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDY2ODkKLQotMjAxMC0wNS0wNyAxNzowOToxNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogZml4IHR5cG8gaW4gZGVidWcgbWVzc2FnZQotCi0yMDEwLTA1LTA3IDE1OjQyOjIzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5Lmg6Ci0JICBydHB0aGVvcmFwYXk6IGFkZCBjb25maWctaW50ZXJ2YWwgcGFyYW1ldGVyIHRvIHJlLWluc2VydCBjb25maWcgaW4gc3RyZWFtCi0JICBBZGQgYSBuZXcgY29uZmlnLWludGVydmFsIHByb3BlcnR5IHRvIGluc3RydWN0IHRoZSBwYXlsb2FkZXIgdG8gaW5zZXJ0Ci0JICBjb25maWd1cmF0aW9uIGhlYWRlcnMgYXQgcGVyaW9kaWMgaW50ZXJ2YWxzIGluIHRoZSBzdHJlYW0KLQkgICh3aGVuIGEga2V5ZnJhbWUgaXMgY291bnRlcmVkKS4KLQotMjAxMC0wNS0wNyAxNTozMTowMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkgIHJ0cHRoZW9yYWRlcGF5OiBmaXggaW4tYmFuZCBjb25maWd1cmF0aW9uIHBhcnNpbmcKLQkgIEFsc28gbWFrZSBjb25maWd1cmF0aW9uIGhlYWRlciBwYXJzaW5nIGEgYml0IG1vcmUgcmVsYXhlZCB3aXRoIHJlc3BlY3QKLQkgIHRvIGxlbmd0aCBmaWVsZCBpbnRlcnByZXRhdGlvbi4KLQotMjAxMC0wNS0wNyAxNTozMDozMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkgIHJ0cHZvcmJpc2RlcGF5OiBmaXggaW4tbGluZSBjb25maWd1cmF0aW9uIHBhcnNpbmcKLQkgIEFsc28gbWFrZSBjb25maWd1cmF0aW9uIGhlYWRlciBwYXJzaW5nIGEgYml0IG1vcmUgcmVsYXhlZCB3aXRoIHJlc3BlY3QKLQkgIHRvIGxlbmd0aCBmaWVsZCBpbnRlcnByZXRhdGlvbi4KLQotMjAxMC0wNS0wNCAxNjo1NzozNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBydHB0aGVvcmFwYXk6IGRvIG5vdCBkaXNjYXJkIGRvd25zdHJlYW0gZmxvdyByZXR1cm4KLQotMjAxMC0wNS0wNCAxNjo1NzoxMSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBydHB0aGVvcmFwYXk6IHJlZmFjdG9yIGJ1ZmZlciBwYXlsb2FkaW5nCi0KLTIwMTAtMDUtMDcgMjA6NDE6MDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdmZpci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZXRmZi5jOgotCSAgZGVpbnRlcmxhY2U6IEFkZCBzdXBwb3J0IGZvciBVWVZZCi0KLTIwMTAtMDUtMDcgMTk6MDY6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGZpeCByZXR1cm4gdmFsdWUKLQotMjAxMC0wNS0wNyAxOTowMjoyMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3QgbGVhayB0aGUgc2Vzc2lvbgotCi0yMDEwLTA1LTA3IDE4OjU5OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwOiBjb25maWd1cmUgYmFuZHdpZHRoIHByb3BlcnRpZXMgaW4gdGhlIHNlc3Npb24KLQotMjAxMC0wNS0wNyAxODo1ODo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogYWRkIHByb3BlcnRpZXMgdG8gY29uZmlndXJlIHRoZSBiYW5kd2lkdGgKLQkgIEFkZCBwcm9wZXJ0aWVzIHRvIHByb3h5IHRoZSBiYW5kd2lkdGggY29uZmlndXJhdGlvbiB0byB0aGUgc2Vzc2lvbiBvYmplY3QuCi0KLTIwMTAtMDUtMDcgMTg6NTc6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIHJ0cHNlc3Npb246IGFkZCBwcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSBiYW5kd2lkdGhzCi0JICBBZGQgcHJvcGVydGllcyB0byBjb25maWd1cmUgdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgYmFuZHdpZHRocy4KLQkgIENvbmZpZ3VyZSB0aGUgYmFuZHdpZHRocyBiZWZvcmUgY2FsY3VsYXRpbmcgdGhlIFJUQ1AgdGltZW91dCB3aGVuIHdlIG5lZWQgdG8uCi0KLTIwMTAtMDUtMDcgMTg6NTY6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6Ci0JICBydHBzdGF0czogYWRkIHNvbWUgZGVidWcgaW5mbwotCi0yMDEwLTA1LTA3IDE4OjU1OjM0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBzbWFsbCBjbGVhbnVwcwotCi0yMDEwLTA1LTA3IDE2OjU1OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIHJ0cHN0YXRzOiBtYWtlIGJhbmR3aWR0aHMgbW9yZSBjb25maWd1cmFibGUKLQkgIEFkZCBhIG1ldGhvZCB0byBjb25maWd1cmUgdGhlIHZhcmlvdXMgYmFuZHdpZHRocyBpbiB0aGUgc2Vzc2lvbi4KLQotMjAxMC0wNS0wNyAxMzozMjozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogaGFuZGxlIE5PTkUgUlRDUCBpbnRlcnZhbHMKLQkgIFByZXBhcmUgZm9yIGhhbmRsaW5nIFJUQ1AgcmVwb3J0aW5nIGludGVydmFscyBvZiBHU1RfQ0xPQ0tfVElNRV9OT05FLCB3aGljaAotCSAgbWVhbnMgZG9uJ3Qgc2VuZCBSVENQIGF0IGFsbC4KLQotMjAxMC0wNS0wNyAxMjo1MTowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogZmFsbCBiYWNrIHRvIFNEUCBwb3J0cyBpbnN0ZWFkIG9mIHNlcnZlcl9wb3J0Ci0JICBJbiBtdWx0aWNhc3QsIGZhbGwgYmFjayB0byB0aGUgcG9ydHMgaW4gdGhlIFNEUCBpbnN0ZWFkIG9mIHRoZSBzZXJ2ZXJfcG9ydAotCSAgYXR0cmlidXRlIGFzIHRoaXMgaXMgbW9yZSBpbiBsaW5lIHdpdGggdGhlIFJGQy4KLQotMjAxMC0wNS0wNyAxMjoyNDo1MSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmVmYWN0b3IgY29sbGVjdGluZyB0aGUgdHJhbnNwb3J0IGluZm8KLQkgIE1ha2UgYSBtZXRob2QgdG8gY29sbGVjdCB0aGUgcG9ydHMgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MuCi0KLTIwMTAtMDUtMDcgMTE6Mjg6MzYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGhhbmRsZSBzZXJ2ZXJzIHRoYXQgc2VuZCBicm9rZW4gVHJhbnNwb3J0cwotCSAgSGFuZGxlIHNlcnZlcnMgdGhhdCBzZW5kIHRoZWlyIHBvcnQgcGFpcnMgd2l0aCB0aGUgd3JvbmcgbmFtZS4KLQkgIEZpeGVzICM2MTc1MzcKLQotMjAxMC0wNS0wNiAxNjo1MjoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogdXNlIHRoZSBTRFAgY29ubmVjdGlvbiBpbmZvIGluIG11bHRpY2FzdAotCSAgUGFyc2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBmcm9tIHRoZSBTRFAuCi0JICBXaGVuIHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZSBtdWx0aWNhc3QgZGVzdGluYXRpb24sIGZhbGwgYmFjayB0byB0aGUgU0RQCi0JICBjb25uZWN0aW9uIGluZm8gd2hlbiB0aGUgdHJhbnNwb3J0IGRpZCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFuZCB0dGwuCi0JICBGaXhlcyAjNjE3NTM3Ci0KLTIwMTAtMDUtMDYgMTU6NDI6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L2dvb20yazEvZ3N0Z29vbS5jOgotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzoKLQkgIGdvb20sbW9ub3Njb3BlOiB0cnVuY2F0ZSBvd24gY2FwcywgaW5zdGVhZCBvZiBjb3B5aW5nIGFuZCB1c2luZyB0aGUgZmlyc3Qgb25seQotCSAgV2UgZ290IHRoZSBjYXBzIGZyb20gYW4gaW50ZXJzZWN0LCBpdCBpcyBvdXIgb3duLCBoZW5jZSB3ZSBjYW4gdHJ1bmNhdGUgaXQuCi0KLTIwMTAtMDUtMDYgMTU6NDA6MzMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogcmVmbG93IHRvIHRydW5jYXRlIGNhcHMganVzdCBvbmNlCi0JICBXZSBnZXQgd3JpdGFibGUgY3BhcyBmcm9tIHRoZSBpbnRlcnNlY3Rpb24gKHVubGVzcyBpdCBmYWlsZWQpLiBBcyB3ZSB0cnVuY2F0ZQotCSAgdGhvc2UgYW55d2F5LCB3ZSBkb24ndCBuZWVkIHRvIG1hbnlhbHkgY29weSB0aGUgZmlyc3Qgc3RydWN0dXJlLgotCi0yMDEwLTA1LTA2IDE1OjM5OjMxICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSAgZ2RrcGl4YnVmOiBkb24ndCBsZWFrIHRlbXBsYXRlIGNhcHMKLQotMjAxMC0wNS0wNiAxNTozODozNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSAgYXV0b3thdWRpbyx2aWRlb317c3JjLHNpbmt9OiB1c2UgY2FuX2ludGVyc2VjdCB0byBhdm9pZCBhIGNhcHMgY29weQotCi0yMDEwLTA0LTI3IDEzOjM2OjM1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiB0ZWxsIHdoYXQgd2UgY2FuIGRvCi0JICBBbnktY2FwcyBhcmUgYmFkLiBJZiBhcHBzIHNjYW4gdGhlIHJlZ2lzdHJ5LCB0aGV5J2QgbGlrZSB0byBrbm93IHdoYXQgd2UgY2FuCi0JICBvdXRwdXQuCi0KLTIwMTAtMDQtMjcgMTM6NDM6MjkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogYWxzbyBsaWZ0IHRoZSBhcmJpdHJhcnkgcmVzdHJpY3Rpb25zIGZvciB3aWR0aCBhbmQgaGVpZ2h0Ci0JICBUaGlzIHdhcyBhbHJlYWR5IGRvbmUgZm9yIGpwZWdkZWMuCi0KLTIwMTAtMDUtMDYgMTQ6MDM6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBBbGxvY2F0ZS9mcmVlIFBBIG1haW5sb29wIGR1cmluZyBzdGF0ZSBjaGFuZ2VzCi0JICAuLi5hbHNvIGRlc3Ryb3kgdGhlIHN0cmVhbSBhbmQgY29udGV4dCBkdXJpbmcgc3RhdGUgY2hhbmdlcy4KLQotMjAxMC0wNS0wNiAxMzo1NzowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogQWxsb2NhdGUgYW5kIGZyZWUgdGhlIGN1c3RvbSBjbG9jayBpbiBOVUxMPC0+UkVBRFkKLQotMjAxMC0wNS0wNiAxMzo1MTo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogQ3JlYXRlIGFuZCBmcmVlIHRoZSBQQSBtYWlubG9vcCBpbiBOVUxMLT5SRUFEWS9SRUFEWS0+TlVMTAotCSAgVGhpcyBmaXhlcyBhIHJhY2UgY29uZGl0aW9uLCB3aGVuIHN0b3BwaW5nIHRoZSBtYWlubG9vcCBkdXJpbmcgZmluYWxpemF0aW9uCi0JICBpcyBkb25lIGZyb20gYSBtYWlubG9vcCBjYWxsYmFjay4KLQkgIEZpeGVzIGJ1Z3MgIzYxNDc2NSBhbmQgIzU5MDY2Mi4KLQotMjAxMC0wNS0wNSAxOTozNTo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IE1ha2Ugc2VsZWN0aW9uIG9mIGEgc2lua3BhZCBudW1iZXIgdGhyZWFkc2FmZQotCi0yMDEwLTA1LTA1IDE3OjM5OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHkuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhcmJsZW5kLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3NjYWxlcmJvYi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS92ZmlyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmM6Ci0JICBkZWludGVybGFjZTogQWRkIHN1cHBvcnQgZm9yIGFsbCBjb21tb24gUkdCIGZvcm1hdHMKLQotMjAxMC0wNS0wNSAxNjowNjo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaDoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYXNtOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdmZpci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZXRmZi5jOgotCSAgZGVpbnRlcmxhY2U6IEFkZCBzdXBwb3J0IGZvciBBWVVWCi0KLTIwMTAtMDUtMDQgMTY6MzQ6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IG1ha2Ugc2V0dXAgdXJsIGluIGEgc21hcnRlciB3YXkKLQkgIE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VwYXJhdGUgdGhlIGJhc2UgYW5kIGNvbnRyb2wgdXJsIHBhcnRzIHdpdGggYSAvIHdoZW4KLQkgIGNyZWF0aW5nIHRoZSBzZXR1cCB1cmwuCi0KLTIwMTAtMDUtMDQgMTY6MDQ6MzkgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBoYW5kbGUgU0VFS0lORyBxdWVyaWVzLgotCi0yMDEwLTA1LTA0IDExOjEzOjQ1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkgIHJ0cG1wNHZwYXk6IGFkZCBjb25maWctaW50ZXJ2YWwgcGFyYW1ldGVyIHRvIHJlLWluc2VydCBjb25maWcgaW4gc3RyZWFtCi0JICBBZGQgYSBuZXcgY29uZmlnLWludGVydmFsIHByb3BlcnR5IHRvIGluc3RydWN0IHRoZSBwYXlsb2FkZXIgdG8gaW5zZXJ0Ci0JICBjb25maWcgKFZPU0gsIFZPUywgZXRjKSBhdCBwZXJpb2RpYyBpbnRlcnZhbHMgaW4gdGhlIHN0cmVhbQotCSAgKHdoZW4gYSBHT1Agb3IgVk9QLUkgaXMgZW5jb3VudGVyZWQpLgotCSAgQmFzZWQgb24gcGF0Y2ggYnkgPG1hcmMubGVlbWFuIGF0IGdtYWlsLmNvbT4KLQkgIEZpeGVzICM2MDc0NTIuCi0KLTIwMTAtMDUtMDMgMTM6MjY6MzIgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBtb3ZlIHNvbWUgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tIGNoYW5nZV9zdGF0ZSB0byBfaW5pdC4KLQkgIFNldCAtPmFjdGl2ZSB0byBUUlVFIGluIF9pbml0IHNvIGl0IGNhbiBiZSBzZXQgdG8gRkFMU0UgYWZ0ZXIgY3JlYXRpbmcgdGhlCi0JICBqaXR0ZXJidWZmZXIgYW5kIGl0IHdvbid0IGJlIG1pc3Rha2VubHkgcmVzZXQgdG8gVFJVRSBpbiB0aGUgY2hhbmdlX3N0YXRlCi0JICBmdW5jdGlvbi4KLQkgIFRoaXMgaXMgbmVlZGVkIHRvIHN0YXJ0IHRoZSBqaXR0ZXJidWZmZXIgYXMgaW5hY3RpdmUgd2hlbiBydHBiaW4gaXMgYnVmZmVyaW5nLgotCi0yMDEwLTA1LTAzIDExOjU2OjU4ICswMjAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogZml4IGEgYnVnIGhhbmRsaW5nIEJVRkZFUklORyBtZXNzYWdlcy4KLQkgIElmIGEgc2Vzc2lvbiBleGlzdHMgYnV0IGhhcyBubyBzdHJlYW1zLCBzZXQgdGhlIG1pbiBidWZmZXJpbmcgcGVyY2VudCB0byAwCi0JICBzaW5jZSBpdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgcmVjZWl2ZWQgYW55dGhpbmcgZm9yIHRoYXQgc2Vzc2lvbiB5ZXQuCi0KLTIwMTAtMDUtMDMgMTE6NTE6MzcgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiB3aGVuIGEgc3RyZWFtIGlzIGNyZWF0ZWQsIHBhdXNlIHRoZSBqaXR0ZXJidWZmZXIgaWYgcnRwYmluIGlzIGJ1ZmZlcmluZy4KLQotMjAxMC0wNS0wMyAxMToyMzo1OSArMDIwMCAgQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8uZGVjaW5hQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGZpeCBhIGJ1ZyBjYWxjdWxhdGluZyBzdHJlYW0gb2Zmc2V0cy4KLQotMjAxMC0wNS0wMSAxNDoyMDo1OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBXcml0ZSBwcmV2aW91cyBjbHVzdGVyJ3Mgc2l6ZQotCSAgVGhpcyBpcyB1c2VmdWwgZm9yIGJhY2t3YXJkcyBwbGF5YmFjaywgd2hpY2ggc2hvdWxkIGJlIGltcGxlbWVudGVkCi0JICBpbiBtYXRyb3NrYWRlbXV4IGF0IHNvbWUgcG9pbnQuCi0KLTIwMTAtMDUtMDEgMTQ6MTU6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IFNldCBpbnRlcmxhY2VkIGZsYWcgaW4gdGhlIGNhcHMgaWYgdGhlIGZsYWcgaXMgc2V0IGluIHRoZSBNYXRyb3NrYSBmaWxlCi0KLTIwMTAtMDUtMDEgMTQ6MTI6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogV3JpdGUgaW50ZXJsYWNlZCBmbGFnIGlmIHRoZSBpbnB1dCB2aWRlbyBjb250ZW50IGlzIGludGVybGFjZWQKLQkgIFVuZm9ydHVuYXRlbHkgTWF0cm9za2EgaGFzIG5vIHdheSB0byBzcGVjaWZ5IFRGRiBhbmQgZnJpZW5kcy4uLgotCi0yMDEwLTA1LTAxIDExOjI1OjI2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSAgcnRwOiBmaXggcHJpbnRmIGZvcm1hdCBvZiBzb21lIGRlYnVnIG1lc3NhZ2VzCi0KLTIwMTAtMDUtMDEgMTE6MDY6NTMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thOiBpbml0IHZhcmlhYmxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgb24gT1NYCi0JICBGaXhlcyAoYm9ndXMpICInb2Zmc2V0JyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24iCi0JICB3YXJuaW5nIG9uIGJ1aWxkIGJvdCAoYWxzbyBzcG90dGVkIGJ5IHBoaWxuKS4KLQotMjAxMC0wNC0zMCAxNzoxOTo0NCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFVZVlkgaXMgNDoyOjIsIG5vdCA0OjI6MAotCi0yMDEwLTA0LTMwIDIyOjIyOjI1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgcHVsc2U6IERvbid0IGNvbXBhcmUgdmFsdWVzIG9mIHR3byBkaWZmZXJlbnQgZW51bSB0eXBlcwotCi0yMDEwLTA0LTMwIDIyOjEzOjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogTWFrZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIGludGVybGFjaW5nIHRoZSBkZWZhdWx0Ci0JICBQcmV2aW91c2x5ICJmb3JjZSBkZWludGVybGFjaW5nIiB3YXMgdGhlIGRlZmF1bHQsIHdoaWNoIGlzIGEgbm90IHZlcnkKLQkgIHNlbnNpYmxlIGRlZmF1bHQgZm9yIHRoZSBub3JtYWwgdXNlIGNhc2Ugd2hlcmUgZGVpbnRlcmxhY2Ugc2hvdWxkIGFjdAotCSAgaW4gcGFzc3Rocm91Z2ggbW9kZSB1bmxlc3MgaW50ZXJsYWNlZCBjb250ZW50IGlzIHByZXNlbnQuCi0KLTIwMTAtMDQtMjkgMTY6MjY6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiBvcHRpbWlzZSBidWZmZXIgc2Nhbm5pbmcKLQkgIFNwZWNpZmljYWxseSwgd2hlbiBuZWVkaW5nIG1vcmUgZGF0YSwgZG8gbm90IHJlc2NhbiBmcm9tIHN0YXJ0IG5leHQgdGltZQotCSAgYXJvdW5kLCBidXQgcmVzdW1lIGZyb20gbGFzdCBwb3NpdGlvbi4KLQkgIFNlZSBhbHNvICM1ODMwNDcuCi0KLTIwMTAtMDQtMjkgMTU6Mzg6NDkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBkaXNyZWdhcmQgc3VwZXJmbHVvdXMgbGluZXMgd2hlbiBpbmRpcmVjdCBkZWNvZGluZwotCi0yMDEwLTA0LTI3IDE1OjQ0OjM5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAganBlZ2RlYzogYWRkIHN1cHBvcnQgZm9yIFJHQiBhbmQgZ3JheXNjYWxlIGNvbG9yIHNwYWNlCi0JICBBbHNvIHJlZmFjdG9yIHNyYyBjYXBzIG5lZ290aWF0aW9uIGFuZCBzZXR0aW5nLgotCi0yMDEwLTA0LTI3IDEyOjE5OjIyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvTWFrZWZpbGUuYW06Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmg6Ci0JICBqcGVnZW5jOiBzdXBwb3J0IG1vcmUgY29sb3VyIHNwYWNlcyBhbmQgc29tZSBjbGVhbnVwcwotCi0yMDEwLTA0LTMwIDEyOjQ3OjAxICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogbW9yZSBnZW5lcmljIHNpbmsgZ2V0Y2FwcwotCi0yMDEwLTA0LTMwIDEyOjQyOjQyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogbW9yZSBzYW5pdHkgY2hlY2tzIG9uIGlucHV0Ci0JICBTcGVjaWZpY2FsbHksIHZlcmlmeSBpbnB1dCBjb21wb25lbnRzIC8gY29sb3VyIHNwYWNlIGlzIGFzIGNvZGUKLQkgIHN1YnNlcXVlbnRseSBleHBlY3RzLCB0aGVyZWJ5IGF2b2lkaW5nIGNyYXNoZXMgb3Igb3RoZXJ3aXNlIGJvZ3VzIG91dHB1dC4KLQkgIFByZXNlbnRseSwgdGhhdCBtZWFucyAzIGNvbXBvbmVudHMgWUNiQ3IgY29sb3VyIHNwYWNlLCBhbmQgc29tZXdoYXQKLQkgIGxpbWl0ZWQgc2FtcGxpbmcgZmFjdG9ycy4KLQkgIEZpeGVzICM2MDA1NTMuCi0KLTIwMTAtMDQtMjIgMTI6Mjg6MjIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JICBydHB0aGVvcmFkZXBheTogYWxzbyBhY2NlcHQgaW4tYmFuZCBjb25maWd1cmF0aW9uCi0JICBGaXhlcyAjNTc0NDE2ICh0aGVvcmEpLgotCi0yMDEwLTA0LTIyIDEyOjI3OjM1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSAgcnRwdm9yYmlzZGVwYXk6IGFsc28gYWNjZXB0IGluLWxpbmUgY29uZmlndXJhdGlvbgotCSAgRml4ZXMgIzU3NDQxNiAodm9yYmlzKS4KLQotMjAxMC0wNC0wNyAxNzoyMTo1NSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JICBydHB0aGVvcmFkZXBheTogSWdub3JlIHBhY2tldHMgd2l0aG91dCBhIGtub3duIGNvZGVib29rCi0JICBEb24ndCBwcm9kdWNlIGFuIGVycm9yIGlmIGEgcGFja2V0IGlzIHJlY2VpdmVkIHdpdGhvdXQgYSB2YWxpZCBjb2RlYm9vaywKLQkgIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgY29kZWJvb2sgd2lsbCBqdXN0IGJlIGNvbWluZyBsYXRlci4KLQkgIFNlZSAjNTc0NDE2LgotCi0yMDEwLTA0LTIwIDEyOjE3OjI2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6Ci0JICB5NG1lbmM6IGFkanVzdCB1bml0IHRlc3QgdG8gZWxlbWVudCBiZWhhdmlvdXIKLQotMjAxMC0wMi0yMyAyMjoxNjozOSAtMDUwMCAgQmVuamFtaW4gTS4gU2Nod2FydHogPGJlbnNAYWx1bS5taXQuZWR1PgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuaDoKLQkgIHk0bWVuYzogYWRkIDQ6MjoyLCA0OjE6MSwgYW5kIDQ6NDo0IG91dHB1dCBzdXBwb3J0Ci0JICBGaXhlcyAjNjEwOTAyLgotCi0yMDEwLTA0LTE1IDEyOjIxOjU2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5Lmg6Ci0JICBydHBoMjY0ZGVwYXk6IERFTFRBX1VOSVQgbWFya2luZyBvZiBvdXRwdXQgYnVmZmVycwotCSAgLi4uIHdoaWNoIGV2aWRlbnRseSBtYWtlcyAobW9zdCkgc2Vuc2UgaWYgb3V0cHV0IGJ1ZmZlcnMgYXJlCi0JICBhY3R1YWxseSBmcmFtZXMuCi0JICBQYXJ0aWFsbHkgYmFzZWQgb24gYSBwYXRjaCBieQotCSAgTWlndWVsIEFuZ2VsIENhYnJlcmEgPG1hZF9hbHVjaGUgYXQgaG90bWFpbC5jb20+Ci0JICBGaXhlcyAjNjA5NjU4LgotCi0yMDEwLTA0LTE2IDE3OjIxOjUwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5Lmg6Ci0JICBydHBoMjYzZGVwYXk6IGV4dHJhIGtleWZyYW1lIGluZm8gZnJvbSBQVFlQRSBoZWFkZXIKLQkgIC4uLiBhcyBvcHBvc2VkIHRvIHRha2luZyBpdCBmcm9tIGgyNjMgcGF5bG9hZCBoZWFkZXIsIHdoaWNoIG5lZWQgbm90Ci0JICBiZSBzbyByZWxpYWJsZS4KLQkgIEZpeGVzICM2MTAxNzIuCi0KLTIwMTAtMDQtMTYgMTc6MDg6NDcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgcnRwaDI2M2RlcGF5OiBhbHNvIHVzZSBQaWN0dXJlIFN0YXJ0IENvZGUgdG8gZGV0ZWN0IHBhY2tldCBsb3NzCi0JICBUaGlzIGVuc3VyZXMgYSB3aG9sZSBmcmFtZSBpcyBkcm9wcGVkIGlmIGEgKHN0YXJ0KSBwYWNrZXQgaXMgbG9zdCwKLQkgIHJhdGhlciB0aGFuIHJlbHlpbmcgb25seSBvbiB0aGUgRElTQ09OVCBmbGFnLgotCi0yMDEwLTA0LTE2IDE3OjA2OjExICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkgIHJ0cGgyNjNkZXBheTogZGV0ZWN0IGZyYW1lIHN0YXJ0IHVzaW5nIFBpY3R1cmUgU3RhcnQgQ29kZQotCSAgU28gd2Ugc3RvcCBkcm9wcGluZyBmcmFnbWVudHMgYXMgc29vbiBhcyB0aGVyZSBpcyBhIHBpY3R1cmUgc3RhcnQgKGNvZGUpLgotCSAgSW4gcGFydGljdWxhciwgdGhpcyBwcmV2ZW50cyBkcm9wcGluZyB0aGUgZmlyc3QgZnJhbWUgZm9sbG93aW5nCi0JICBpbml0aWFsIERJU0NPTlQuCi0KLTIwMTAtMDQtMTYgMTY6MzQ6MDYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgcnRwaDI2M2RlcGF5OiBoYW5kbGUgYSBmZXcgRklYTUVzCi0KLTIwMTAtMDQtMTYgMTY6Mjc6MjUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgcnRwaDI2M2RlcGF5OiBzbGlnaHRseSByZWZhY3RvciBwYXlsb2FkIGRyb3BwaW5nCi0KLTIwMTAtMDQtMTYgMTE6NTM6MTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgcnRwaDI2M3BheTogdXNlIGZvdW5kIEdPQnMgdG8gYXBwbHkgTW9kZSBBIHBheWxvYWRpbmcKLQkgIC4uLiByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG8gc2VuZGluZyB0aGUgd2hvbGUgZnJhbWUgaW4gb25lIHBhY2tldAotCSAgaWYgbnVtYmVyIG9mIEdPQiBzdGFydGNvZGVzIDwgbWF4aW11bS4KLQkgIE9uZSBtaWdodCB0YWtlIHRoaXMgZnVydGhlciBhbmQgc3RpbGwgcGVyZm9ybSBNb2RlIEIvQyBwYXlsb2FkaW5nLAotCSAgYnV0IGF0IGxlYXN0IHRoaXMgc2hvdWxkIGNhdGVyIGZvciBkZWNlbnQgZnJhZ21lbnRzIGluIHR5cGljYWwgY2FzZXMuCi0JICBGaXhlcyAjNTk5NTg1LgotCi0yMDEwLTA0LTE0IDExOjUzOjQ2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IGltcGxlbWVudCBwdXNoIG1vZGUgc2Vla2luZwotCi0yMDEwLTA0LTI5IDIwOjA4OjQzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JICBkb2NzOiB1cGRhdGUgZm9yIHZpZGVvZmlsdGVyIHBsdWdpbiBtZXJnZSBhbmQgYWRkIGd0ay1kb2MgYmx1cmIgZm9yIG5ldyBwcm9wZXJ0eQotCi0yMDEwLTA0LTI2IDE4OjEyOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogSW1wcm92ZSBzZWdtZW50IGhhbmRsaW5nIGEgYml0Ci0KLTIwMTAtMDQtMjYgMTg6MDU6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBPcmRlciBjYXBzIGJ5IGFtb3VudCBvZiBjb250YWluZWQgaW5mb3JtYXRpb24KLQotMjAxMC0wNC0yNiAxNzoyNTozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IFByb3Blcmx5IHNldCBpbnRlcmxhY2VkIGZpZWxkIGluIGdldGNhcHMKLQotMjAxMC0wNC0yNCAxNjoyODoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhcmJsZW5kLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3NjYWxlcmJvYi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZXRmZi5jOgotCSAgZGVpbnRlcmxhY2U6IEFkZCBwbGFuYXIgWVVWIHN1cHBvcnQgdG8gYWxsIG90aGVyIHNpbXBsZSBtZXRob2RzCi0KLTIwMTAtMDQtMjQgMTY6MTA6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYXNtOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JICBkZWludGVybGFjZTogQWRkIHBsYW5hciBZVVYgc3VwcG9ydCB0byBncmVlZHloIG1ldGhvZAotCi0yMDEwLTA0LTI0IDE1OjQyOjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHkuYzoKLQkgIGRlaW50ZXJsYWNlOiBBZGQgc3VwcG9ydCBmb3IgcGxhbmFyIFlVViBmb3JtYXRzIGluIGdyZWVkeWwgbWV0aG9kCi0KLTIwMTAtMDQtMjQgMTM6NTg6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYzoKLQkgIGRlaW50ZXJsYWNlOiBBZGQgc3VwcG9ydCBmb3IgWTQ0NCwgWTQyQiwgSTQyMCwgWVYxMiBhbmQgWTQxQgotCSAgVGhlIHZmaXIgbWV0aG9kIHN1cHBvcnRzIHRoZW0gYW5kIHdpbGwgYmUgdXNlZCB1bnRpbCBzb21ldGhpbmcgZWxzZQotCSAgc3VwcG9ydHMgaXQuCi0KLTIwMTAtMDQtMjQgMDk6MTY6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYzoKLQkgIGRlaW50ZXJsYWNlOiBEZWZpbmUgZGVpbnRlcmxhY2UgbWV0aG9kIGJhc2UgY2xhc3NlcyBhcyBhYnN0cmFjdCB0eXBlcwotCi0yMDEwLTA0LTIzIDE3OjQwOjEwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlbWV0aG9kLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS92ZmlyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmM6Ci0JICBkZWludGVybGFjZTogTW92ZSBkZWludGVybGFjaW5nIG1ldGhvZHMgdG8gdGhlaXIgb3duIGZpbGUKLQotMjAxMC0wNC0yMyAxNzoyNToxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JICBkZWludGVybGFjZTogU2ltcGxpZnkgcGFzc3Rocm91Z2ggbW9kZSBkZXRlY3Rpb24KLQotMjAxMC0wNC0yMyAxNDozNTo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogRml4IHVuaXQgdGVzdCB0aGF0IGNoZWNrcyBjYXBzIGhhbmRsaW5nCi0JICBkZWludGVybGFjZSBub3cgYWx3YXlzIGFkZHMgdGhlIGludGVybGFjZWQgZmllbGQgdG8gdGhlIG91dHB1dCBjYXBzLAotCSAgaWYgaXQgd2Fzbid0IHByZXNlbnQgaW4gdGhlIGlucHV0IGNhcHMgdGhlIG91dHB1dCBjYXBzIHdpbGwgc3RpbGwKLQkgIGNvbnRhaW4gaW50ZXJsYWNlZD1mYWxzZS4KLQotMjAxMC0wNC0yMSAxNzowMDowNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmFzbToKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvc2NhbGVyYm9iLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdmZpci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZXRmZi5jOgotCSAgZGVpbnRlcmxhY2U6IFJlZmFjdG9yIGRlaW50ZXJsYWNpbmcgYXMgcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcgbW9yZSBjb2xvciBmb3JtYXRzCi0KLTIwMTAtMDQtMjIgMTk6MDU6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBBZGQgc3VwcG9ydCBmb3IgWTQ0NCwgWTQyQiBhbmQgWTQxQgotCi0yMDEwLTA0LTIyIDE1OjU0OjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogQWRkIHN1cHBvcnQgZm9yIFlWWVUgYW5kIHJlb3JkZXIgdGVtcGxhdGUgY2FwcwotCi0yMDEwLTA0LTE4IDIxOjExOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogVHJhbnNsYXRlIG5hdmlnYXRpb24gZXZlbnRzIHRvIG1ha2Ugc2Vuc2UgYWdhaW4gdXBzdHJlYW0KLQotMjAxMC0wNC0xOCAyMDo1ODoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IFByb3Blcmx5IGhhbmRsZSByYW5nZXMvbGlzdHMgb2Ygd2lkdGggb3IgaGVpZ2h0IHdoZW4gdHJhbnNmb3JtaW5nIGNhcHMKLQkgIENvZGUgcGFydGx5IHRha2VuIGZyb20gdGhlIHZpZGVvY3JvcCBlbGVtZW50LgotCi0yMDEwLTA0LTIyIDE1OjQ1OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogRml4IHBsYW5hciBZVVYtPlJHQiBwcm9jZXNzaW5nCi0KLTIwMTAtMDQtMjIgMTU6NDI6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBDb3JyZWN0bHkgY2xhbXAgYWZ0ZXIgWVVWLT5SR0IgY29udmVyc2lvbgotCi0yMDEwLTA0LTIyIDE1OjIwOjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogQWRkIHN1cHBvcnQgZm9yIFlVWTIsIFlWWVUgYW5kIFVZVlkKLQotMjAxMC0wNC0xOCAxNTowMjo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IFN5bmMgcHJvcGVydGllcyB0byB0aGUgY29udHJvbGxlciBpbiBiZWZvcmVfdHJhbnNmb3JtCi0KLTIwMTAtMDQtMTYgMTc6MDA6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBBZGQgc3VwcG9ydCBmb3IgWVVZMiBhbmQgVVlVVgotCi0yMDEwLTA0LTIxIDE3OjQxOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogUmVmYWN0b3IgcHJvY2Vzc2luZyBhbmQgYWRkIHN1cHBvcnQgZm9yIG90aGVyIHBsYW5hciBZVVYgZm9ybWF0cwotCSAgVGhpcyByZWR1Y2VzIHRoZSBnZW5lcmF0ZWQgY29kZSBzaXplIGJ5IGEgZmFjdG9yIG9mIDIuNS4KLQotMjAxMC0wNC0yMSAxNzoxNTozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IEFkZCBzdXBwb3J0IGZvciBZVjEyIGlucHV0Ci0KLTIwMTAtMDQtMjIgMTM6NTY6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IEFkZCBzdXBwb3J0IGZvciBZVVkyLCBZVllVLCBVWVZZCi0KLTIwMTAtMDQtMjAgMTI6MTg6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IEFkZCBzdXBwb3J0IGZvciBZNDQ0LCBZNDJCLCBZNDFCIGFuZCBZVjEyCi0KLTIwMTAtMDQtMjEgMTc6MDc6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHZpZGVvZmlsdGVyOiBPcmRlciBjb2xvciBmb3JtYXRzIGJ5IHRoZWlyIGNvbnRhaW5lZCBhbW91bnQgb2YgaW5mb3JtYXRpb24KLQotMjAxMC0wNC0yMCAxODoyMjoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHZpZGVvZmxpcDogRHJvcCBZNDFCL1k0MkIgc3VwcG9ydAotCSAgUm90YXRpbmcgOTDCsC8yNzDCsCB3aXRoIHN1YnNhbXBsZWQgWVVWIHdoZXJlIGhvcml6b250YWwKLQkgIGFuZCB2ZXJ0aWNhbCBzdWJzYW1wbGluZyBhcmUgZGlmZmVyZW50IGRvZXNuJ3QgcmVhbGx5IHdvcmsuCi0KLTIwMTAtMDQtMTkgMTQ6Mzc6NTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB2aWRlb2ZsaXA6IEFsc28gZmxpcCB0aGUgcGl4ZWwtYXNwZWN0LXJhdGlvIGlmIHdpZHRoL2hlaWdodCBhcmUgZXhjaGFuZ2VkCi0KLTIwMTAtMDQtMTggMjM6MDg6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JICB2aWRlb2ZpbHRlcjogRXh0ZW5kIHRoZSB1bml0IHRlc3QgdG8gdGVzdCBkaWZmZXJlbnQgY29sb3IgZm9ybWF0cwotCi0yMDEwLTA0LTE4IDIyOjU1OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYzoKLQkgIHZpZGVvZmlsdGVyOiBBZGQgc29tZSBtb3JlIHRlc3RzCi0JICBUaGVzZSBjaGVjayBkaWZmZXJlbnQgcHJvcGVydHkgY29tYmluYXRpb25zCi0KLTIwMTAtMDQtMTggMjI6NTQ6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB2aWRlb2ZsaXA6IENoYW5nZSB0aGUgZGVmYXVsdCBtZXRob2QgdG8gaWRlbnRpdHkKLQotMjAxMC0wNC0xOCAyMjo1MDoyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaDoKLQkgIHZpZGVvYmFsYW5jZTogUmVkdWNlIG51bWJlciBvZiBhbGxvY2F0aW9ucyBwZXIgaW5zdGFuY2UKLQotMjAxMC0wNC0xOCAyMjo0NTo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9maWx0ZXI6IFVwZGF0ZSBsYXN0LXJldmlld2VkIGNvbW1lbnRzCi0KLTIwMTAtMDQtMTggMjI6NDA6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2JhbGFuY2U6IEFkZCBzdXBwb3J0IGZvciBhbGwgUkdCIGZvcm1hdHMKLQotMjAxMC0wNC0xOCAyMjoyODoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogQWRkIHN1cHBvcnQgZm9yIFlVWTIsIFVZVlksIEFZVVYgYW5kIFlWWVUKLQotMjAxMC0wNC0xOCAyMjoyMzowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogQWRkIGRlYnVnIGNhdGVnb3J5Ci0KLTIwMTAtMDQtMTggMjI6MTk6NTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2JhbGFuY2U6IE1ha2UgcHJvcGVydHkgYWNjZXNzIHRocmVhZHNhZmUKLQotMjAxMC0wNC0xOCAyMjoxODoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogQWRkIHN1cHBvcnQgZm9yIFk0MUIsIFk0MkIgYW5kIFk0NDQKLQotMjAxMC0wNC0xOCAyMjoxNzowMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaDoKLQkgIHZpZGVvYmFsYW5jZTogVXNlIGxpYmdzdHZpZGVvIGZvciBmb3JtYXQgc3BlY2lmaWMgdGhpbmdzCi0KLTIwMTAtMDQtMTggMjI6MDk6MDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2JhbGFuY2U6IE1ha2UgcHJvcGVydGllcyBjb250cm9sbGFibGUKLQotMjAxMC0wNC0xOCAyMjowNjo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkgIHZpZGVvYmFsYW5jZTogRW1pdCAidmFsdWUtY2hhbmdlZCIgc2lnbmFsIG9mIGNvbG9yIGJhbGFuY2UgaW50ZXJmYWNlIHdoZW4gdmFsdWVzIGNoYW5nZQotCi0yMDEwLTA0LTE4IDIxOjU4OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5oOgotCSAgdmlkZW9iYWxhbmNlOiBTb21lIHJhbmRvbSBjbGVhbnVwCi0KLTIwMTAtMDQtMTggMjE6Mzc6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2JhbGFuY2U6IFN0b3AgdXNpbmcgbGlib2lsCi0JICBUaGUgdXNlZCBsaWJvaWwgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgaGFzIG5vIG9wdGltaXplZAotCSAgaW1wbGVtZW50YXRpb24gYW55d2F5LgotCi0yMDEwLTA0LTE4IDIxOjE0OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBNYWtlIHByb3BlcnR5IGFjY2VzcyB0aHJlYWRzYWZlCi0KLTIwMTAtMDQtMTggMTU6MDA6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkgIGdhbW1hOiBTeW5jIHByb3BlcnRpZXMgdG8gdGhlIGNvbnRyb2xsZXIgaW4gYmVmb3JlX3RyYW5zZm9ybQotCi0yMDEwLTA0LTE4IDE0OjQ2OjA5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSAgdmlkZW9mbGlwOiBBZGQgc3VwcG9ydCBmb3IgYWxsIFJHQiBmb3JtYXRzIGFuZCBBWVVWCi0KLTIwMTAtMDQtMTggMTQ6MzE6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICB2aWRlb2ZsaXA6IEFkZCBzdXBwb3J0IGZvciBZNDFCLCBZNDJCIGFuZCBZNDQ0Ci0KLTIwMTAtMDQtMTggMTQ6Mjk6MzAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmg6Ci0JICB2aWRlb2ZsaXA6IE1ha2UgcHJvY2Vzc2luZyBtb3JlIGdlbmVyYWwgYW5kIHVzZSBsaWJnc3R2aWRlbyBmb3IgYWxsIGZvcm1hdCBzcGVjaWZpYyB0aGluZ3MKLQotMjAxMC0wNC0xOCAxMzoxMjo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIHZpZGVvZmxpcDogTWFrZSBtZXRob2QgcHJvcGVydHkgY29udHJvbGxhYmxlIGFuZCBpbXByb3ZlIGRlYnVnIG91dHB1dAotCi0yMDEwLTA0LTE4IDEzOjAzOjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgdmlkZW9mbGlwOiBTb21lIHJhbmRvbSBjbGVhbnVwCi0KLTIwMTAtMDQtMTggMTA6MTc6NTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL3BsdWdpbi5jOgotCSAgdmlkZW9maWx0ZXI6IE1vdmUgYWxsIGVsZW1lbnRzIGludG8gYSBzaW5nbGUgcGx1Z2luCi0JICBIYXZpbmcgYWxsIHRoZXNlIHNtYWxsIGVsZW1lbnRzIGluIGEgc2VwYXJhdGUgcGx1Z2luCi0JICBpcyBub3QgdmVyeSBtZW1vcnkgZWZmZWN0aXZlLi4uCi0KLTIwMTAtMDQtMTggMTA6MDc6MjQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5oOgotCSAgZ2FtbWE6IEltcHJvdmUgZG9jcyBhIGJpdAotCi0yMDEwLTA0LTE4IDA5OjU5OjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6Ci0JICBnYW1tYTogQWRkIHN1cHBvcnQgZm9yIGFsbCBSR0IgZm9ybWF0cwotCi0yMDEwLTA0LTE4IDA5OjQ2OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6Ci0JICBnYW1tYTogQWRkIHN1cHBvcnQgZm9yIG1hbnkgcGFja2VkIFlVViBmb3JtYXRzCi0JICBUaGF0IGlzIFlVWTIsIFVZVlksIEFZVVYgYW5kIFlWWVUuCi0KLTIwMTAtMDQtMTggMDk6Mzg6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkgIGdhbW1hOiBBZGQgc3VwcG9ydCBmb3IgYWxsIG90aGVyIHBsYW5hciBZVVYgZm9ybWF0cwotCSAgVGhhdCBpcyBZNDFCLCBZNDJCLCBZNDQ0LCBOVjEyIGFuZCBOVjIxLgotCi0yMDEwLTA0LTE4IDA5OjMzOjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6Ci0JICBnYW1tYTogU3RvcCB1c2luZyBsaWJvaWwKLQkgIFRoZSB1c2VkIGxpYm9pbCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCBvbmx5IGhhcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgotCSAgYW5kIGlzIG1vcmUgY29tcGxleCB0aGFuIHdoYXQncyBuZWVkZWQgaGVyZS4KLQotMjAxMC0wNC0xNyAxODoxMzo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmg6Ci0JICBnYW1tYTogVXNlIGxpYmdzdHZpZGVvIGZvciBmb3JtYXQgc3BlY2lmaWMgdmFsdWVzIGFuZCBtYWtlIGdhbW1hIHByb2Nlc3NpbmcgbW9yZSBnZW5lcmljCi0JICBBbGxvd3MgdXMgdG8gZWFzaWx5IGFkZCBzdXBwb3J0IGZvciBuZXcgY29sb3IgZm9ybWF0cyBsYXRlci4KLQotMjAxMC0wNC0xNyAxODowMTowNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSAgZ2FtbWE6IE1ha2UgZ2FtbWEgcHJvcGVydHkgY29udHJvbGxhYmxlCi0JICAuLi5hbmQgcHJvcGVybHkgdXNlIGxpYm9pbC4KLQotMjAxMC0wNC0xNyAxNzo1NToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSAgZ2FtbWE6IFNvbWUgcmFuZG9tIGNsZWFudXAKLQotMjAxMC0wNC0xOSAxNDo0NTozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JICBzbXB0ZWFscGhhOiBTeW5jIHByb3BlcnRpZXMgdG8gdGhlIGNvbnRyb2xsZXIgaW4gYmVmb3JlX3RyYW5zZm9ybQotCi0yMDEwLTA0LTE3IDE3OjQ3OjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkgIHNtcHRlYWxwaGE6IEFkZCBzdXBwb3J0IGZvciBZVjEyIChjb252ZXJ0ZWQgdG8gQVlVVikKLQotMjAxMC0wNC0xNyAxNzo0Mzo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JICBzbXB0ZWFscGhhOiBBZGQgc3VwcG9ydCBmb3IgYWxsIDQgQVJHQiBmb3JtYXRzCi0JICAuLi53aXRob3V0IGZvcm1hdCBjb252ZXJzaW9uLgotCi0yMDEwLTA0LTE2IDE3OjI3OjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmg6Ci0JICBzbXB0ZWFscGhhOiBNYWtlIGNvbG9yIGZvcm1hdCBzdXBwb3J0IG1vcmUgZ2VuZXJpYwotCSAgVGhpcyBhbGxvd3MgZWFzaWVyIGFkZGl0aW9uIG9mIG5ldyBmb3JtYXRzIGxhdGVyLgotCi0yMDEwLTA0LTE2IDE3OjE4OjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmg6Ci0JICBzbXB0ZWFscGhhOiBTb21lIHJhbmRvbSBjbGVhbnVwCi0KLTIwMTAtMDQtMTUgMjI6Mjg6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc21wdGUvZ3N0bWFzay5jOgotCSogZ3N0L3NtcHRlL2dzdG1hc2suaDoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmg6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuaDoKLQkgIHNtcHRlOiBBZGQgcHJvcGVydHkgZm9yIGludmVydGluZyB0aGUgdHJhbnNpdGlvbiBtYXNrCi0JICBUaGlzIGNvbnZlcnRzIGEgbGVmdC10by1yaWdodCB0cmFuc2l0aW9uIHRvIHJpZ2h0LXRvLWxlZnQgb3IKLQkgIGNsb2NrLXdpc2UgdG8gY291bnRlci1jbG9jay13aXNlLgotCi0yMDEwLTA0LTE1IDIyOjI3OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkgIHNtcHRlYWxwaGE6IENvcnJlY3RseSBkZXRlY3QgcHJvcGVydHkgY2hhbmdlcyBhbmQgdXBkYXRlIHByb3BlcnRpZXMKLQotMjAxMC0wNC0xNiAxOTozNToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWNlbHBkZXBheS5oOgotCSAgcWNlbHBkZXBheTogYWRkIGZpcnN0IHZlcnNpb24gb2YgYSBRQ0VMUCBkZXBheWxvYWRlcgotCi0yMDEwLTA0LTI5IDE1OjE4OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbG9wbWVudC4KLQotPT09IHJlbGVhc2UgMC4xMC4yMiA9PT0KLQotMjAxMC0wNC0yOCAwMjo1ODowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4yMgotCi0yMDEwLTA0LTI4IDAyOjU3OjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDEwLTA0LTI1IDIzOjM2OjI5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4yMS4zIHByZS1yZWxlYXNlCi0KLTIwMTAtMDQtMjUgMjE6MTk6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBoaWRlIGlzLWxpdmUgcHJvcGVydHkgZm9yIHJlbGVhc2UKLQkgIEF0IHRoZSB2ZXJ5IGxlYXN0IGl0IG5lZWRzIGEgYmV0dGVyL2xlc3Mgd3JvbmcgbmFtZS4KLQkgIFNlZSAjNjEzMDY2LgotCi0yMDEwLTA0LTI1IDE1OjEyOjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZG9uJ3QgY3Jhc2ggaWYganBlZyBpbWFnZSBjb250YWlucyBtb3JlIHRoYW4gdGhyZWUgY29tcG9uZW50cwotCSAgT3VyIGNvZGUgY3VycmVudGx5IG9ubHkgaGFuZGxlcyBhIG1heGltdW0gb2YgMyBjb21wb25lbnRzLCBzbyBlcnJvcgotCSAgb3V0IGZvciBub3cgaWYgdGhlIGltYWdlIGhhcyBtb3JlIGNvbXBvbmVudHMgdGhhbiB0aGF0LgotCSAgRml4ZXMgIzYwNDEwNi4KLQotMjAxMC0wNC0yMCAxNzoyMToyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkgIGRvYXA6IHVwZGF0ZSByZXBvc2l0b3J5IGluZm8gZnJvbSBjdnMtPmdpdCBhbmQgbWFpbnRhaW5lcnMKLQotMjAxMC0wNC0yMyAxNDo0MDoyMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBmYzg1ODY3IHRvIDRkNjdiZDYKLQotMjAxMC0wNC0yMiAxMzozMDo1NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JICB2aWRlb21peGVyOiBGaXggYnl0ZSBvcmRlciBmb3IgTU1YIEFSR0IvQVlVViBjb2xvciBmaWxsaW5nCi0JICBGaXhlcyBidWcgIzYxNjQwOS4KLQotMjAxMC0wNC0yMSAxNzo1Mzo0OSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JICB2aWRlb21peGVyOiBGaXggQVlVViBjaGVja2VyL2NvbG9yIGZpbGxpbmcKLQotMjAxMC0wNC0xOSAxNjo0MzoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX21teC5oOgotCSAgdmlkZW9taXhlcjogQWRkIGkzODcgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIHRvIHRoZSBjbG9iYmVyZWQgcmVnaXN0ZXJzIGxpc3QKLQkgIFRoZXkgYXJlIHRoZSBzYW1lIGFzIHRoZSBtbTAtbW03IE1NWCByZWdpc3RlcnMgYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4KLQkgIGJ5IHRoZSBhc3NlbWJseSBjb2RlIGlmIGdjYyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIE1NWCByZWdpc3RlcnMuCi0JICBOb3RlOiBUaGV5J3JlIGFsbCBhZGRlZCB0byB0aGUgbGlzdCBvZiBjbG9iYmVyZWQgcmVnaXN0ZXJzIGluIGFsbCBjYXNlcwotCSAgYW5kIG5vdCBvbmx5IHdoZW4gX19NTVhfXyBpcyBub3QgZGVmaW5lZCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IG5vIG90aGVyCi0JICBidWdzIGhhcHBlbiB3aXRoIHRoaXMgY29kZSBqdXN0IGJlY2F1c2Ugc29tZSBjb21waWxlciB2ZXJzaW9uIGdldHMgdGhpbmdzCi0JICB3cm9uZy4KLQkgIEZpeGVzIGJ1ZyAjNjE0NDY2LgotCi0yMDEwLTA0LTE5IDE0OjA5OjM0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogVXNlIGxpYmdzdHZpZGVvIHRvIGdldCB0aGUgb3JkZXIgb2YgUkdCCi0KLTIwMTAtMDQtMTcgMTA6MDY6NDEgKzAxMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ab3JhY2xlLmNvbT4KLQotCSogZ3N0L2dvb20veG1teC5jOgotCSAgZ29vbTogYWRkIGVkeCB0byBjbG9iYmVyIGxpc3QgaW4gaW5saW5lIGFzc2VtYmx5IGNvZGUKLQkgIG11bGwgbW9kaWZpZXMgJWVkeCwgc28gc2hvdWxkIGJlIG1lbnRpb25lZCBpbiBjbG9iYmVyIGxpc3QuCi0JICBGaXhlcyBjcmFzaCBvbiBTb2xhcmlzICgjNjE1OTk4KS4KLQotMjAxMC0wNC0xNSAxMzozOTo0MSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgdGVzdHM6IGRvbid0IHVzZSBHU1RfUExVR0lOX0xERkxBR1Mgd2hlbiBidWlsZGluZyB0ZXN0IGJpbmFyaWVzCi0KLTIwMTAtMDQtMTYgMTU6Mjc6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBGaXggSTQyMC0+STQyMCBjb3B5aW5nCi0JICBGaXhlcyBidWcgIzYxNTE0My4KLQotMjAxMC0wNC0xMyAxODoxNTo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEZpeCBBWVVWLT5JNDIwIGNvcHlpbmcKLQotMjAxMC0wNC0xNiAxMjoxNDoyNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBydHBoMjY0ZGVwYXk6IHByb2ZpbGUtbGV2ZWwtaWQgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyCi0JICBTbywgaWYgbmVlZGVkLCBleHRyYWN0IHRoZSBjb3JyZXNwb25kaW5nIGluZm8gZnJvbQotCSAgc3Byb3AtcGFyYW1ldGVyLXNldHMuCi0JICBCYXNlZCBvbiBwYXRjaCBwcm92aWRlZCBieSA8ZHhzc3ggYXQgZ21haWwuY29tPgotCSAgRml4ZXMgIzYxMjY1Ny4KLQotMjAxMC0wNC0xNSAwNzoxMzo0NiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogRHJvcCAtV2Nhc3QtYWxpZ24KLQkgIENvbW1pdCBtZXNzYWdlIGNvcGllZCBmcm9tIGNvcmUncyBjb21taXQgZnJvbSBCZW5qYW1pbiBPdHRlOgotCSAgMjQ2ZjVkYmE5NmE1YjUwYmI3NDYyMWFmNjdiMzA5NDJjY2E3MmFmNQotCSAgQXBwYXJlbnRseSBnY2Mgd2FybnMgdGhhdCBHc3RNaW5pT2JqZWN0IGlzIG5vdCBjYXN0YWJsZSB0bwotCSAgR3N0RXZlbnQvTWVzc2FnZS9CdWZmZXIgZHVlIHRvIHRoZW0gY29udGFpbmluZyA2NGJpdCB2YXJpYWJsZXMsIGV2ZW4KLQkgIHRob3VnaCBBUk0gaGFja2VycyBjbGFpbSB0aGF0IHRob3NlIG9ubHkgbmVlZCA0Ynl0ZSBhbGlnbm1lbnQuIEFuZCBhcwotCSAgbG9uZyBhcyBnY2MgYmVoYXZlcyB0aGF0IHdheSwgdGhpcyB3YXJuaW5nIGlzIG5vdCB2ZXJ5IHVzZWZ1bC4KLQkgIFNvIHdlJ2xsIHJlbW92ZSB0aGUgd2FybmluZyB1bnRpbCB0aGlzIHByb2JsZW0gaXMgZml4ZWQuCi0JICBGaXhlcyAjNjE1Njk4Ci0KLTIwMTAtMDQtMTQgMjM6NDY6MDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JICBmbGFjdGFnOiBmaXggYWRhcHRlciBhc3NlcnRpb24gd2hlbiB1c2VkIGRpcmVjdGx5IGFmdGVyIGZsYWNlbmMKLQkgIFVubGlrZSBmaWxlc3JjLCBmbGFjZW5jIG91dHB1dHMgdGhlIGZsYWMgYmxvY2tzIG5lYXRseSBhbGlnbmVkIG9uZSBpbgotCSAgZWFjaCBidWZmZXIuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIHdlIHN3aXRjaCBmcm9tIG1ldGFkYXRhIG1vZGUgdG8KLQkgIGF1ZGlvIGRhdGEgcGFzc3Rocm91Z2ggbW9kZSwgdGhlcmUncyBubyBkYXRhIGxlZnQgaW4gdGhlIGFkYXB0ZXIgdG8KLQkgIHB1c2ggb3V0IGF0IHRoaXMgcG9pbnQsIHNvIGNoZWNrIGlmIHRoZXJlJ3MgZGF0YSBpbiB0aGUgYWRhcHRlcgotCSAgYmVmb3JlIHJlcXVlc3RpbmcgYnVmZmVycyBmcm9tIGl0IChhbHNvIG5lZWRlZCBpbiBjYXNlIHdlIGdldCBpbnB1dAotCSAgYnVmZmVycyBvZiAwIHNpemUpLgotCSAgRml4ZXMgIzYxNTc5My4KLQotMjAxMC0wNC0xNCAyMzoxODoyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMjEuMiBwcmUtcmVsZWFzZQotCi0yMDEwLTA0LTE0IDIwOjMxOjMwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbC5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZQotCi0yMDEwLTA0LTE0IDIwOjA2OjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9leGFtcGxlcy92NGwyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW06Ci0JICB0ZXN0czogdXNlIExEQUREIGZvciBsaWJzIHRvIGxpbmsgdG8gaW5zdGVhZCBvZiBMREZMQUdTCi0JICBVc2UgZm9vX0xEQUREIGluc3RlYWQgb2YgZm9vX0xERkxBR1MgdG8gc3BlY2lmeSB0aGUgbGlicmFyaWVzIHRvIGxpbmsgdG8uCi0JICBUaGlzIHNob3VsZCBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIGxpbmtlciBpbiB0aGUgcmlnaHQKLQkgIG9yZGVyLCBhbmQgbWFrZXMgTERGTEFHUyB1c2FibGUgYWdhaW4uCi0JICBCYXNlZCBvbiBwYXRjaCBieSBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQG9yYWNsZS5jb20+Ci0JICBGaXhlcyAjNjE1Njk3LgotCi0yMDEwLTA0LTE0IDE4OjEzOjU2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiB0cmFuc2Zvcm1fY2FwcyA6IFdlIGNhbiBvbmx5IGNvbnZlcnQgQVlVViB0byB4UkdCCi0JICBXZSB3ZXJlIHByZXZpb3VzbHkgc3RhdGluZyB0aGF0IHdlIGNvdWxkIGNvbnZlcnQgQVlVVi9JNDIwL1lWMTIgdG8geFJHQi4KLQotMjAxMC0wNC0xMyAwMDoxNDo0NiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYWxzbyByZW1vdmUgLVdhZ2dyZWdhdGUtcmV0dXJuIGZyb20gd2FybmluZyBmbGFncwotCSAgSXQgY2F1c2VzIHByb2JsZW1zIHdpdGggT2JqZWN0aXZlLUMgY29kZSBsaWtlIGluIG9zeHZpZGVvc2luay4KLQkgIEZpeGVzICM2MTM2NjMuCi0KLTIwMTAtMDQtMTIgMTg6MjI6MzkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgY2hlY2s6IElnbm9yZSBvc3ggYXVkaW8vdmlkZW8gc3JjL3NpbmtzIGluIHN0YXRlIGNoYW5nZSB0ZXN0cwotCSAgQW5kIG1ha2UgdGhlIGxpbmUgcmVhZGFibGUgZm9yIHRob3NlIG1lcmUgbW9ydGFscyB0aGF0IGRvbid0IG93biBhIDMwIiBzY3JlZW4KLQotMjAxMC0wNC0xMiAxODowMzoyMCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2xpbWl0ZXIuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGVjdHJ1bS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYzoKLQkgIGNoZWNrOiBEb24ndCByZS1kZWNsYXJlICdHTGlzdCAqYnVmZmVycycgaW4gdGhlIHRlc3RzCi0JICBJdCdzIGFuIGV4dGVybmFsIHdoaWNoIGxpdmVzIGluIGdzdGNoZWNrLmMuIFJlZGVjbGFyaW5nIGl0IG1ha2VzIHNvbWUKLQkgIGNvbXBpbGVycy9hcmNoaXRlY3R1cmVzIHRoaW5rIHRoZSAnYnVmZmVycycgaW4gdGhlIGluZGl2aWR1YWwgdGVzdHMgYXJlCi0JICBhIGRpZmZlcmVudCBzeW1ib2wuLi4gYW5kIHRoZXJlZm9yZSB3ZSBlbmQgdXAgY29tcGFyaW5nIGhvbG9kZWNrcyB3aXRoCi0JICBvcmFuZ2VzLgotCi0yMDEwLTA0LTEyIDE0OjUwOjQ2ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4LCBxdGRlbXV4OiBtaW5vciBjb2RlIGNsZWFudXAgaW4gYXZjX2xldmVsX2lkY190b19zdHJpbmcoKQotCSAgRG8gdGhlIHNhbWUgd2l0aCBzbGlnaHRseSBmZXdlciBMT0MuCi0KLTIwMTAtMDQtMTIgMTI6NDA6MTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogUmVtb3ZlIC1XdW5kZWYgZmxhZwotCSAgRml4ZXMgIzYxNTE2MQotCi0yMDEwLTA0LTEyIDExOjQzOjQ5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogRml4IEk0MjAtPkFZVVYgY29weWluZwotCi0yMDEwLTA0LTEyIDExOjI1OjU5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogQ29ycmVjdGx5IGNsYW1wIGZyYW1lL2JhY2tncm91bmQgYWxwaGFzIHRvIFswLDI1NV0gYmVmb3JlIHdyaXRpbmcgdGhlbQotCi0yMDEwLTA0LTEyIDExOjE2OjU2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgY2hlY2s6IElnbm9yZSBqcGVnZW5jIHRlc3QKLQotMjAxMC0wNC0xMSAxMzoxNDozMCAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JICBkZWludGVybGFjZTogT25seSBjaGVjayBpbnRlcmxhY2VkIGZsYWcgaW4gc2luayBjYXBzCi0JICBGaXhlcyAjNjE1NDYwLgotCi0yMDEwLTA0LTA5IDExOjIxOjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGJhMzNkMWYgdG8gZmM4NTg2NwotCi0yMDEwLTA0LTA4IDE4OjA1OjQ2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgZG9jczogZG8gcHJvcGVyIGVzY2FwaW5nIGZvciAiJSIKLQotMjAxMC0wNC0wOCAxNzo1MDo0OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcnRzcC9nc3RydHNwZ29vZ2xlLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwZ29vZ2xlLmg6Ci0JICBydHNwOiByZW1vdmUgb2Jzb2xldGUgZ29vZ2xlIGV4dGVuc2lvbgotCSAgVGhpcyB3YXMgbm90IGJ1aWxkIGZvciBhIHdoaWxlIGFuZCBjYW4gYmUgcmVtb3ZlZC4KLQotMjAxMC0wNC0wOCAxNzo0Mjo1MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IG1vdmUgdHdvIHN5bWJvbHMgdG8gcHJpdmF0ZSBzZWN0aW9uCi0KLTIwMTAtMDQtMDggMTc6MzY6MzAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGFkZCBmbHhkZWMgZG9jcwotCi0yMDEwLTA0LTA4IDE3OjE3OjA2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBkb2NzOiBlbmFibGUgdGhlIDIgb2YgNjUgcnRwIGVsZW1lbnRzIGluIHRoZSBkb2NzCi0KLTIwMTAtMDQtMDggMTE6NTQ6MTkgKzAyMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzoKLQkgIHNob3V0MjogRG9uJ3Qgd2FpdCBpZiB3ZSdyZSBsYXRlCi0JICBJbiBmYWN0LCBkdWUgdG8gc2lnbmVkbmVzcyBpc3N1ZXMsIGEgbmVnYXRpdmUgZGVsYXkgd291bGQgYmUgY2hhbmdlZCB0bwotCSAgYW4gYWxtb3N0IGluZmluaXRlIHdhaXQgY2F1c2luZyBzaG91dDJzZW5kIHRvICJsb2NrIHVwIi4KLQkgIFJlcG9ydGVkIGJ5IENocmlzdG9waGVyIE1vbnRnb21lcnkuCi0KLTIwMTAtMDQtMDggMTY6NTY6MzcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIGRvY3M6IHVwZCAtPiB1ZHAgYW5kIHZvaWxhIGl0IHNob3dzIHVwIGluIHRoZSBkb2NzCi0KLTIwMTAtMDQtMDggMTY6NTE6MjcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmg6Ci0JICBkb2NzOiBmaXggZG9jIGJsb2Igc3ludGF4Ci0KLTIwMTAtMDQtMDggMTY6NTE6MDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGFkZCAoc3BhcnNlKSBkb2NzIGZvciBhdXBhcnNlIGVsZW1lbnQKLQotMjAxMC0wNC0wOCAxNDo0MDo0MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IGFkZCB2aWRlb2JveCBzeW1ib2xzCi0KLTIwMTAtMDQtMDggMTQ6NDA6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgZG9jczogcmVtb3ZlIGR5bnVkcHNpbmsgdW50aWwgc29tZW9uZSBkb2N1bWVudHMgaXQKLQotMjAxMC0wNC0wOCAxNDozNDo1OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogbWFrZSBkZWJ1ZyBjYXRlZ29yeSBzdGF0aWMKLQotMjAxMC0wNC0wOCAxNDoyOToxOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkgIGZseGRlbXV4OiByZW5hbWUgR3N0RkxWRGVtdXggZm9yIEdzdEZsdkRlbXV4Ci0KLTIwMTAtMDQtMDggMTQ6MjM6MTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5oOgotCSAgZmx2ZGVtdXg6IG1lcmdlIGZsdnBhcnNlIGludG8gdGhlIGRlbXV4ZXIgYW5kIG1ha2UgZnVuY3Rpb24gc3RhdGljCi0JICBObyBuZWVkIHRvIGhpZGUgY2VydGFpbiBmdW5jdGlvbiBpbiB0aGUgZG9jcy4gQWxsb3dzIHRvIGRvIG1vcmUgY2xlYW51cHMuCi0KLTIwMTAtMDQtMDggMTM6MTM6MzQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuaDoKLQkgIGFscGhhOiBBZGQgZG9jdW1lbnRhdGlvbgotCi0yMDEwLTA0LTA4IDE0OjAwOjA4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogdjRsMmJ1ZmZlciBwb29sIGlzIG5vdyBhIHNlcGFyYXRlIG9iamVjdCwgcmVtb3ZlIHRoZW0gZnJvbSB2NGwyc3JjIGRvY3MKLQotMjAxMC0wNC0wOCAxMzo1ODoxMSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IHJlbW92ZSBub24gZXhpc3RpbmcgZmxhZ3MgYW5kIGFkZCB0d28gaW50ZXJuYWwgbWV0aG9kcwotCSAgSWYgc29tZW9uZSBjYXJlcyBmbHZwYXJzZSBjb3VsZCBiZSBtZXJnZWQgaW50byBmbHZkZW11eC4KLQotMjAxMC0wNC0wOCAxMzo1NzowOSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JICBydHBzZXNzaW9uOiByZW1vdmUgcHJvdG90eXBlIGZvciBub24gZXhpc3RpbmcgZnVuY3Rpb24KLQkgIFRoZXJlIGlzIG5vIGZ1bmN0aW9uIGJ5IHRoYXQgbmFtZSBhbnl3aGVyZS4KLQotMjAxMC0wNC0wOCAxMjo1Njo1MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JICBkb2NzOiBVcGRhdGUgaW5zcGVjdGVkIHBsdWdpbiBpbmZvcm1hdGlvbgotCi0yMDEwLTA0LTA4IDEyOjU2OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgIGFscGhhY29sb3I6IEltcHJvdmUgZG9jcyBhIGJpdAotCi0yMDEwLTA0LTA4IDEzOjQ3OjQyICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogYWRkIGVmZmVjdHR2IGRlZmluZXMgYW5kIHJlb3JkZXIgbGlzdAotCi0yMDEwLTA0LTA4IDEzOjQxOjQ3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgZG9jczogcmVtb3ZlIHRocmVlIGVudHJpZXMgdGhhdCBhcmUgbm90IGV4cG9ydGVkIGZyb20gdGhlIGhlYWRlcnMgYW55bW9yZQotCi0yMDEwLTA0LTA4IDEzOjQwOjM2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuaDoKLQkgIGpwZWdkZWM6IG1vdmUgbWFjcm8gdG8gYyBzb3VyY2UKLQkgIE9uZSBsZXNzIHNlbWkgcHVibGljIHN5bWJvbCB3aXRob3V0IG5hbWVzcGFjZSBwcmVmaXggaW4gdGhlIGhlYWRlcnMuCi0KLTIwMTAtMDQtMDggMTM6NDA6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JICBzcGVleGVuYzogcmVtb3ZlIHVudXNlZCBkZWZpbmVzCi0KLTIwMTAtMDQtMDggMTM6MjM6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2EtbXV4OiBmaXggbGFzdCBjb21taXQKLQkgIFVzZSBhIGxvY2FsIGRlZmluZSBmb3IgV0FWRUZPUk1BVF9FWCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0ICsgMiBieXRlcwotCSAgZm9yIHRoZSBleHRlbnNpb24gc2l6ZS4KLQotMjAxMC0wNC0wOCAxMzoxNjo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuaDoKLQkgIHNwZWV4OiByZW1vdmUgdW51c2VkIGRlZmluZQotCi0yMDEwLTA0LTA4IDEzOjAzOjQzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC93YXZlbmMvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdmVuYy9yaWZmLmg6Ci0JICB3YXZlbmM6IHJlbW92ZSBpbnRlcm5hbCBjb3B5IG9mIHJpZmYuaCBhbmQgdXNlIHJpZmYtbGlicmFyeSBpbnN0ZWFkLgotCSAgV2UgZG9uJ3QgdXNlIGFueSBmdW5jdGlvbiB5ZXQsIGp1c3QgdGhlIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMuCi0KLTIwMTAtMDQtMDggMTI6NTY6MDkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgbWF0cm9za2FtdXg6IHVzZSByaWZmIGxpYiBtb3JlCi0JICBSZW1vdmUgQklUTUFQSU5GT0hFQURFUiBhbmQgdXNlIHRoZSBvbmUgZnJvbSByaWZmLWxpYi4gQWxzbyByZW1vdmUgdGhlCi0JICBXQVZFRk9STUFURVhfU0laRSBkZWZpbmUgYW5kIHVzZSBhIHNpemVvZiB0b2dldGhlciB3aXRoIHRoZSByZXNwZWN0aXZlIHN0cnVjdC4KLQkgIEJlc2lkZXMgYmV0dGVyIGNvZGUgcmV1c2UgdGhpcyBsZXNzZW5zIHRoZSB1bnVuc2VkIHN5bWJvbHMgaW4gdGhlIGRvY3MuCi0KLTIwMTAtMDQtMDggMTI6MTQ6MDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSAgZG9jczogdHJpbSBzZWN0aW9ucyBmaWxlIG1vcmUKLQkgIFJlbmFtZSBzb21lIGRlZmluZXMgYW5kIG1vdmUgc29tZSBpdGVzbSB0byAqLmMgZmlsZXMuIEFkZCBtb3JlIGl0ZW1zIHRvIGludGVybmFsCi0JICBzdWJzZWN0aW9uLgotCi0yMDEwLTA0LTA4IDExOjE5OjQzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgZG9jc3c6IHRyaW0gdGhlIHNlY3Rpb24gZmlsZQotCi0yMDEwLTA0LTA4IDEwOjI2OjI1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICBkb2NzOiBhZGQgdjRsMnNpbmsgdG8gZG9jcwotCi0yMDEwLTA0LTA4IDEwOjE1OjA4ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICBkb2NzOiBmaXggeG1sCi0JICBUaGUgdGl0bGUgdGFnIGJlbG9uZ3MgaW50byB0aGUgcmVmc2VjdDIuCi0KLTIwMTAtMDQtMDcgMTc6NDM6NTYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBBZGQgc3VwcG9ydCBmb3IgWVYxMiwgaW5jbHVkaW5nIGNvbnZlcnNpb24gc3VwcG9ydCBmb3IgSTQyMC9BWVVWCi0KLTIwMTAtMDQtMDcgMTc6Mjc6MTIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBBZGQgc3VwcG9ydCBmb3IgZ3JheXNjYWxlIGlucHV0L291dHB1dAotCSAgVGhpcyBkb2Vzbid0IGRvIGFueSBjb252ZXJzaW9uIGFuZCBpcyB0aGUgbmV4dCBzdGVwIHRvCi0JICByZXBsYWNpbmcgdmlkZW9jcm9wIGJ5IHN1cHBvcnRpbmcgYWxsIHJlbWFpbmluZyBmb3JtYXRzCi0JICBpbiBwYXNzdGhyb3VnaCBtb2RlLgotCi0yMDEwLTA0LTA3IDE2OjI0OjM4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guaDoKLQkgIHZpZGVvYm94OiBBZGQgc3VwcG9ydCBmb3IgZmlsbGluZyB0aGUgYmFja2dyb3VuZCB3aXRoIHJlZCwgeWVsbG93IGFuZCB3aGl0ZQotCi0yMDEwLTA0LTA3IDE2OjExOjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogQWRkIHN1cHBvcnQgZm9yIGRpcmVjdCBSR0I8LT5BWVVWIGNvbnZlcnNpb24KLQotMjAxMC0wNC0wNyAxNjoxMTowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEZpeCBSR0IyNCBmaWxsaW5nCi0KLTIwMTAtMDQtMDcgMTY6MDY6NTQgKzAzMDAgIE1hcmNvIEJhbGxlc2lvIDxtYXJjby5iYWxsZXNpb0Bub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6Ci0JICBoMjY0ZGVwYXk6IGhhbmRsZSBwcm9wZXJseSBTVEFQcwotCSAgaW4gcnRwaDI2NGRlcGF5LmMsIGxpbmVzIDU3Ny01NzYsIE5BTFUtdHlwZSAyNCAoU2luZ2xlLVRpbWUgQWdncmVnYXRpb24KLQkgIFBhY2tldCkgaXMgaGFuZGxlZCBpbiBmYWxsLXRocm91Z2ggYXMgTkFMVS10eXBlIDI2ICh1bmhhbmRsZWQpLgotCSAgVGhpcyBsZWFkcyBoaWdoIHF1YWxpdHkgaDI2NCBzdHJlYW1zIHN1Y2ggYXM6Ci0JICBydHNwOi8vc3RyZWFtLnlsZS5tb2JpL3lsZS9hcmVlbmEvTUVESUFfRTAzNDI2NTdfcDMubXA0Ci0JICB0byBmYWlsIHdpdGggIk5BTCB1bml0IHR5cGUgMjQgbm90IHN1cHBvcnRlZCB5ZXQiIChidXQgaXQncyBhY3R1YWxseQotCSAgc3VwcG9ydGVkKSwgYW5kIHRodXMgdG8gY2xvc2UgYW55IHN0cmVhbSB3aGljaCBjb250YWlucyBTVEFQcy4KLQkgIFRoZSBwcm9wb3NlZCBvbmUtbGluZXIgcGF0Y2ggZml4ZXMgdGhlIGlzc3VlLgotCSAgRml4ZXMgIzYxNTA1MS4KLQotMjAxMC0wNC0wNyAxMzo0NzowMiArMDIwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0LWxpYnMvZ3N0L2dzdC1pMThuLXBsdWdpbi5oOgotCSogZ3N0L2F2aS9nc3RhdmkuYzoKLQkgIGJ1aWxkOiBmaXggY29tcGlsZXIgd2FybmluZ3MKLQkgIGZpeCB3YXJuaW5ncyBmb3IgYWxsIHBsdWdpbnMgdGhhdCB1c2U6IHNldGxvY2FsZSAoTENfQUxMLi4uCi0KLTIwMTAtMDQtMDcgMTM6MzE6MTMgKzAyMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpLmM6Ci0JICBhdmk6IGZpeCBjb21waWxlciB3YXJuaW5nCi0KLTIwMTAtMDMtMzEgMTc6NTQ6MjEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHJlc3RyaWN0IHJlc3luY2luZyB0byBzdWJ0aXRsZSB0cmFja3MKLQkgIFRoaXMgc2hvdWxkIHByZXZlbnQgc2tpcHBpbmcgYXVkaW8gb3IgdmlkZW8gaW4gbm90IHNvIHdlbGwgaW50ZXJsZWF2ZWQKLQkgIGNhc2VzLgotCSAgRml4ZXMgIzYxNDQ2MC4KLQotMjAxMC0wNC0wNiAxMzoyMTo1MSArMDUzMCAgQXJ1biBSYWdoYXZhbiA8Zm9yZF9wcmVmZWN0QGdlbnRvby5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICBxdGRlbXV4OiBQb3N0IGF2Zy4vbWF4LiBiaXRyYXRlIHRhZ3MgZm9yIEguMjY0Ci0JICBUaGlzIHJlYWRzIHRoZSBhdmVyYWdlIGFuZCBtYXhpbXVtIGJpdHJhdGVzIGZyb20gdGhlICdidHJ0JyBhdG9tIGlmCi0JICBhdmFpbGFibGUsIGFuZCBwdXNoZXMgdGhlc2UgYXMgdGFncywKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTQ5MjcKLQotMjAxMC0wNC0wMyAyMzozOToyMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGZpeCByYWN5IHNodXRkb3duCi0JICBLZWVwIGEgcmVmIG9mIHB1bHNlc2luayBmb3IgZGVmZXJyZWQgbWFpbmxvb3AgaW52b2NhdGlvbi4gRml4ZXMgIzYxNDc2NQotCi0yMDEwLTA0LTA1IDE1OjQ4OjE3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9qcGVnZW5jLmM6Ci0JICB0ZXN0czoganBlZ2VuYzogQWRkcyBzb21lIGdldGNhcHMgdGVzdAotCSAgQWRkcyB0ZXN0cyBmb3IgdGhlIGpwZWdlbmMgZ2V0Y2FwcyBmdW5jdGlvbiwgdG8gYXZvaWQKLQkgIGhhdmluZyBpdCByZXR1cm5pbmcgbm9uLXN1YnNldCBjYXBzCi0KLTIwMTAtMDQtMDUgMTQ6NTE6NTggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBGaXggZ2V0Y2FwcyBmdW5jdGlvbgotCSAgV2hlbiBjcmVhdGluZyB0aGUgY2FwcyBhbGxvd2VkIHRvIHVwc3RyZWFtIHVzaW5nIGRvd25zdHJlYW0KLQkgIHJlc3RyaWN0aW9ucywgdXNlIGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyBhcyB0aGF0IGhhcyB0aGUKLQkgIHVzYWJsZSBmb3JtYXRzIGFuZCBwdXRzIGludG8gaXQgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIGZyYW1lcmF0ZQotCSAgZmllbGRzLiBUaGlzIGF2b2lkcyBnZXR0aW5nIGVycm9ycyBhYm91dCBnZXRjYXBzIHJldHVybmluZwotCSAgbm9uIHN1YnNldCBjYXBzIG9mIGl0cyBwYWQgdGVtcGxhdGUuCi0JICBUaGlzIGVycm9yIHNob3dlZCB1cCBvbiB0aGUgbWV0YWRhdGEgcGx1Z2luIHVuaXQgdGVzdCBpbiAtYmFkLgotCi0yMDEwLTA0LTA1IDE3OjMxOjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogRml4IGNvbnZlcnNpb24gZnJvbSAzIGJ5dGUgUkdCIHRvIEFSR0IKLQotMjAxMC0wNC0wNSAxNzowODoxNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEFkZCBzdXBwb3J0IGZvciAzIGJ5dGUgUkdCIGZvcm1hdHMgYW5kIHJlZmFjdG9yIFJHQiBjb2RlIGEgYml0Ci0KLTIwMTAtMDQtMDUgMTU6NTE6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oOgotCSAgdmlkZW9ib3g6IEFkZCBzdXBwb3J0IGZvciBhbGwgMzIgYml0IFJHQiBmb3JtYXRzCi0JICAuLi5pbmNsdWRpbmcgY29udmVyc2lvbiBiZXR3ZWVuIHRoZW0uCi0KLTIwMTAtMDQtMDUgMTU6MjY6MDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IGFkZCBwcm9wZXJ0eSB0byBjb250cm9sIHRoZSBidWZmZXJpbmcgbWV0aG9kCi0JICBBZGQgYSBwcm9wZXJ0eSB0byBjb250cm9sIGhvdyB0aGUgaml0dGVyYnVmZmVyIHBlcmZvcm1zIHRpbWVzdGFtcGluZyBhbmQKLQkgIGJ1ZmZlcmluZy4KLQotMjAxMC0wNC0wNCAxOTowMjo0MSAtMDMwMCAgQW5kcsOpIERpZWIgTWFydGlucyA8YW5kcmUuZGllYkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JICBhbHBoYWNvbG9yOiBSZW1vdmluZyB1bnVzZWQgdmFyaWFibGUKLQkgIEZpeGVzIGJ1ZyAjNjE0ODQzLgotCi0yMDEwLTA0LTA0IDIwOjMxOjM4IC0wMzAwICBBbmRyw6kgRGllYiBNYXJ0aW5zIDxhbmRyZS5kaWViQGdtYWlsLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogc2hvdWxkIG5vdCByZXR1cm4gY2FwcyBBTlkgYmFzZWQgb24gZG93bnN0cmVhbQotCSAgV2hlbiBkb3duc3RyZWFtIGhhcyBhIHNpbmsgcGFkIHdpdGggQU5ZIGNhcHMsIGpwZWdlbmMgc2hvdWxkCi0JICB0cmVhdCBpdCB0aGUgc2FtZSBhcyBOVUxMIGFuZCByZXR1cm4gaXRzIHRlbXBsYXRlIGNhcHMuCi0JICBGaXhlcyAjNjE0ODQyCi0KLTIwMTAtMDQtMDQgMjI6Mjg6MzMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzoKLQkgIG9zczogYWRkIGZpeG1lIGNvbW1lbnQKLQotMjAxMC0wNC0wNCAyMjoyNjo1OSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnY29uZi9NYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiB1c2UgJChidWlsZGRpcikgZm9yIGluc3RhbGxpbmcgZ2VuZXJhdGVkIGZpbGVzCi0KLTIwMTAtMDQtMDQgMjI6MDc6MzMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgUmV2ZXJ0ICJjb25maWd1cmU6IGZpeCBvdXQgb2Ygc291cmNlIGRpciBidWlsZHMiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IGNhMGJkM2E4Y2VhMzFmOWVhMGRmNzk4YTgzZDMwMDdlNjk2OTU4YmEuCi0KLTIwMTAtMDQtMDQgMjE6MzY6MzUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBmaXggb3V0IG9mIHNvdXJjZSBkaXIgYnVpbGRzCi0JICBSZW1vdmUgbm9uLWV4aXN0aW5nIGdzdC1saWJzIGZyb20gaW5jbHVkZSBhbmQgbGlicmFyeS1wYXRocycuCi0JICBGaXhlcyAjNjE0MzU0IGV2ZW4gbW9yZS4KLQotMjAxMC0wNC0wMSAxMDoxOTowMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICBxdGRlbXV4OiBSZWFkIHJlcGxheWdhaW4gcGVhay9nYWluIHRhZ3MKLQkgIE1ha2UgcXRkZW11eCByZWFkIHRhZ3MgcmVwbGF5Z2FpbiB0YWdzIHRoYXQgYXJlIHdpdGhpbiAnLS0tLScgYXRvbXMuCi0JICBGaXhlcyAjNjE0NDcxCi0KLTIwMTAtMDQtMDEgMTg6NDg6NDMgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGZvcmRfcHJlZmVjdEBnZW50b28ub3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIG1hdHJvc2thOiBFeHBvcnQgaC4yNjQgcHJvZmlsZSBhbmQgbGV2ZWwgaW4gY2FwcwotCSAgVGhpcyByZXBsaWNhdGVzIHRoZSBjb2RlIGluIHF0ZGVtdXggdG8gZXhwb3J0IHRoZSBoLjI2NCBwcm9maWxlIGFuZAotCSAgbGV2ZWwgaW4gdGhlIHN0cmVhbSBjYXBzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNDY1MQotCi0yMDEwLTA0LTAyIDE4OjUwOjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IG9mZi1ieS1vbmUgaW50cm9kdWNlZCBpbiBsYXN0IGNvbW1pdAotCi0yMDEwLTA0LTAxIDE4OjM4OjM4ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxmb3JkX3ByZWZlY3RAZ2VudG9vLm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogTWlub3IgcmVmYWN0b3Igb2YgdGhlIGNvZGUKLQkgIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBjbHVtcCB0b2dldGhlciBjb21tb24gY29kZSB3aGVuIGNvcHlpbmcgdG8KLQkgIG1hc3Ryb3NrYWRlbXV4LgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNDY1MQotCi0yMDEwLTA0LTAxIDE4OjE3OjA5ICswNTMwICBBcnVuIFJhZ2hhdmFuIDxmb3JkX3ByZWZlY3RAZ2VudG9vLm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRXhwb3J0IGguMjY0IGxldmVsIGluIGNhcHMKLQkgIFRoaXMgZXhwb3J0cyB0aGUgaC4yNjQgbGV2ZWwgaW4gdGhlIHN0cmVhbSBjYXBzIChhcyBhIHN0cmluZykgd2hpY2ggY2FuCi0JICBiZSB1c2VkIHRvIG1hdGNoIGEgZGVjb2Rlciwgb3IgYXMgbWV0YWRhdGEuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE0NjUxCi0KLTIwMTAtMDQtMDEgMTY6NTg6MzIgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGZvcmRfcHJlZmVjdEBnZW50b28ub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBFeHBvcnQgaC4yNjQgcHJvZmlsZSBpbiBjYXBzCi0JICBUaGlzIGFkZHMgdGhlIGguMjY0IHByb2ZpbGUgZm9yIGEgZ2l2ZW4gc3RyZWFtIGludG8gY2Fwcy4gVGhpcyBjYW4KLQkgIChldmVudHVhbGx5KSBiZSB1c2VkIHRvIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBkZWNvZGVyIGFuZCBhcyBtZXRhZGF0YQotCSAgZm9yIGNlcnRhaW4gYXBwbGljYXRpb25zLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxNDY1MQotCi0yMDEwLTAzLTMxIDE0OjQzOjE0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IHJlbW92ZSBvYnNvbGV0ZSByZXZlcnNlIHBsYXliYWNrIGNvZGUgcGF0aAotCi0yMDEwLTAzLTMxIDE0OjQwOjUwICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IHN1cHBvcnQgKHB1bGwgbW9kZSkgbmVnYXRpdmUgc2VlayByYXRlCi0KLTIwMTAtMDMtMjkgMTU6Mjc6MzcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogYWxzbyBjaGVjayBmb3Igc2VnbWVudCBzdG9wIGZvciBub24tc2VnbWVudC1zZWVrCi0KLTIwMTAtMDMtMzAgMTY6NTA6MTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHB1c2ggY29ycmVjdGx5IHNpemVkIGZsYWMgaGVhZGVyIGJ1ZmZlcnMKLQkgIEZpeGVzICM2MTQzNTMuCi0KLTIwMTAtMDMtMzAgMDc6MzQ6MDcgLTA1MDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYnVpbGQ6IGZpeCBjb21waWxlciB3YXJuaW5nIHdoZW4gc3JjZGlyICE9IGJ1aWxkZGlyCi0JICBGaXhlcyAnLi4vLi4vZ3N0LWxpYnM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknIHdhcm5pbmcvZXJyb3Igd2hlbgotCSAgdGhlIGJ1aWxkIGRpcmVjdG9yeSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCi0JICBGaXhlcyAjNjE0MzU0LgotCi0yMDEwLTAzLTMwIDAxOjUwOjMyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6Ci0JICBpZDNkZW11eDogZml4IHBhcnNpbmcgb2YgdW5zeW5jZWQgZnJhbWVzIHdpdGggZGF0YSBsZW5ndGggaW5kaWNhdG9yCi0JICBGaXhlcyBidWcgIzYxNDE1OC4KLQotMjAxMC0wMy0yOSAxMTowMDowNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGdzdC9NYWtlZmlsZS5hbToKLQkqIHN5cy9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IGJ1aWxkIHBsdWdpbnMgYW5kIGV4YW1wbGVzIGluIHBhcmFsbGVsIHdoZXJlIHBvc3NpYmxlCi0KLTIwMTAtMDMtMTggMTg6NDk6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICBkaXJlY3Rzb3VuZHNpbms6IGZpeCByZWR1bmRhbnQgZnVuY3Rpb24gcmVkZWNsYXJhdGlvbiBjb21waWxlciB3YXJuaW5ncwotCSAgUmUtYXBwbHkgdGhpcyBhZ2FpbiBhcyB3ZWxsLCBhcyBpdCB3YXMgdW5kb25lIGJ5IHRoZSBwcmV2aW91cyBjb21taXQuLgotCi0yMDEwLTAzLTE4IDE0OjMxOjM1ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQotCSAgQXBwbHkgdGhpcyBhZ2FpbiwgYXMgaXQgd2FzIG92ZXJ3cml0dGVuIGJ5IHRoZSBwcmV2aW91cyBjb21taXQuIE1lcmdpbmcKLQkgIGlzIGhhcmQsIGFwcGFyZW50bHkuCi0KLTIwMTAtMDMtMjYgMjM6MjA6MTAgKzAxMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oOgotCSAgZGlyZWN0c291bmRzaW5rOiBJbXBsZW1lbnQgU1BESUYgc3VwcG9ydCBmb3IgQUMzLgotCSAgRGV0ZWN0IGlmIHRoZSBzb3VuZCBjYXJkIHN1cHBvcnRzIFNQRElGIHBhc3N0aHJ1IG9mIEFDMyBhbmQgYWRkCi0JICBuZWNlc3NhcnkgY29kZSB0byBzdXBwb3J0IHRoYXQgbGlrZSBhbHNhc2luay4KLQotMjAxMC0wMy0yNiAxNzowNjo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IGFkZCBjcnVmdCBhbGVydCBmb3IgY29tbW9uL3NoYXZlKgotCi0yMDEwLTAzLTI2IDE2OjUwOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2xhbmcuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfbGFuZy5oOgotCSAgcXRkZW11eDogZXh0cmFjdCBzdHJlYW0gbGFuZ3VhZ2UgaW4gbW9yZSBjYXNlcwotCSAgVGhlIDE2LWJpdCBsYW5ndWFnZSBjb2RlIGNhbiBiZSBlaXRoZXIgYSBwYWNrZWQgSVNPLTYzOS0yVCBjb2RlCi0JICBvciBhICdNYWNpbnRvc2ggbGFuZ3VhZ2UgY29kZScuIEhhbmRsZSB0aGUgbGF0dGVyIHR5cGUgb2YgbGFuZ3VhZ2UKLQkgIGNvZGVzIGFzIHdlbGwsIGFuZCBtYXAgdG8gdGhlIG1hdGNoaW5nIElTTyBjb2RlLiBMYXN0bHksIGZpeAotCSAgbGFuZ3VhZ2UgY29kZSBwb3N0aW5nIGZvciBsYW5ndWFnZSAjMCwgd2hpY2ggaXMgdmFsaWQgYW5kIHN0YW5kcwotCSAgZm9yICdFbmdsaXNoJy4KLQkgIEZpeGVzICM2MTQwMDEuCi0KLTIwMTAtMDMtMjYgMTQ6NTU6NTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBJbXByb3ZlIGRlYnVnZ2luZyBhbmQgYWRkIHNvbWUgRklYTUVzCi0KLTIwMTAtMDMtMjYgMTQ6NDI6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBTYW1wbGUgcmF0ZSBtYXJrZXJzIDB4MDEsIDB4MDIgYW5kIDB4MDMgYXJlIHZhbGlkCi0JICBUaGV5IGFyZSBmb3IgODguMmtIeiwgMTc2LjRrSHogYW5kIDE5MmtIei4KLQotMjAxMC0wMy0yNiAxNDoxNjozOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IFRha2Ugc2FtcGxlcmF0ZSwgd2lkdGggYW5kIG51bWJlciBvZiBjaGFubmVscyBmcm9tIHRoZSBTVFJFQU1JTkZPCi0JICAuLi5hbmQgdXBkYXRlIGl0IGZyb20gdGhlIGZyYW1lIGhlYWRlcnMgaWYgaXQgc2hvdWxkIGNoYW5nZSBmb3Igc29tZSByZWFzb24uCi0JICBUaGlzIGFsbG93cyBwbGF5YmFjayBvZiBmaWxlcyB3aXRoIG9kZCBzYW1wbGUgcmF0ZXMuCi0KLTIwMTAtMDMtMjYgMTM6NDU6NDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBGaXggQVlVVi0+STQyMCBmcmFtZSBjb3B5aW5nCi0KLTIwMTAtMDMtMjYgMTM6MzQ6MTcgKzAxMDAgIFJhaW1vIErDpHJ2aSA8cmFpbW8uamFydmlAZ21haWwuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnZW5jOiBTZXQgY29ycmVjdCBnZXRjYXBzL3NldGNhcHMgZnVuY3Rpb25zIG9uIHNyY3BhZHMgYW5kIHNpbXBsaWZ5IHRoZW0KLQkgIFRoaXMgZml4ZXMgZG93bnN0cmVhbSBuZWdvdGlhdGlvbiwgdXBzdHJlYW0gbmVnb3RpYXRpb24gaXNuJ3QgcmVhbGx5Ci0JICBzdXBwb3J0ZWQgYnkganBlZ2VuYyB5ZXQuCi0JICBGaXhlcyBidWcgIzYxMzc4OS4KLQotMjAxMC0wMy0yNiAxMDozMToyMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94Lmg6Ci0JICB2aWRlb2JveDogQWx3YXlzIGZpbGwgdGhlIGNvbXBsZXRlIGZyYW1lIGlmIGJvcmRlcnMgc2hvdWxkIGJlIGFkZGVkCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSBkb24ndCBnZXQgYW55IGdhcHMgYmV0d2VlbiByZWN0YW5nbGVzIGJlY2F1c2UKLQkgIG9mIGNocm9tYSBzdWJzYW1wbGluZyBmb3IgZXhhbXBsZS4KLQotMjAxMC0wMy0xOCAyMjoxMjo0MCArMDAwMCAgRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGludGVsLmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIGF1dG9nZW4uc2g6IERvbid0IGNhbGwgY29uZmlndXJlIHdpdGggLS1lbmFibGUtcGx1Z2luLWRvY3MKLQkgIGNvbmZpZ3VyZSBnaXZlcyBhIG5pY2Ugd2FybmluZzoKLQkgIGNvbmZpZ3VyZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6IC0tZW5hYmxlLXBsdWdpbi1kb2NzCi0JICBhbmQgaW5kZWVkLCBJIGNvdWxkIG5vdCBmaW5kIGFueXRoaW5nIGluIHRoZSBjb25maWd1cmUuYWMgb3IgdGhlIG00Ci0JICBtYWNyb3MgdGhhdCB3b3VsZCBhbGxvdyBlbmFibGluZyB0aGF0IG9wdGlvbi4gUmVtb3ZlIGl0IHRoZW4uCi0KLTIwMTAtMDMtMjIgMTY6NTg6MjYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oOgotCSAgdmlkZW9ib3g6IFJlZmFjdG9yIGJveGluZyB0byByZWR1Y2UgY29kZSBkdXBsaWNhdGlvbgotCi0yMDEwLTAzLTIyIDEzOjEzOjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogU2ltcGxpZnkgY2FwcyB0cmFuc2Zvcm1hdGlvbgotCi0yMDEwLTAzLTIxIDIwOjE0OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogQWRkIGNvbnN0IHF1YWxpZmllciB0byB0aGUgc291cmNlIGZyYW1lIGRhdGEKLQotMjAxMC0wMy0yMyAxNzo0Nzo0OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogb25seSBzZWVrIHdoZW4gaW4gcHJvcGVyIHN0YXRlCi0JICAuLi4gYW5kIGRhdGEgc3RydWN0dXJlcyBjYW4gYmUgdGhyZWFkLXNhZmVseSBhY2Nlc3NlZC4KLQkgIFNlZSAjNjAxNjE3LgotCi0yMDEwLTAzLTIzIDE3OjM0OjUwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIG1hdHJvc2thZGVtdXg6IHN1cHBvcnQgKHB1bGwgbW9kZSkgbmVnYXRpdmUgc2VlayByYXRlCi0KLTIwMTAtMDMtMTggMTU6Mjk6MDAgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgbWF0cm9za2FkZW11eDogdHJhY2sgY2xpcCBkdXJhdGlvbiBpbiBzZWdtZW50Ci0KLTIwMTAtMDMtMTggMTM6Mzk6MDUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHByZWZlciBpbmRleCBvZiB2aWRlbyB0cmFjayB0byBwZXJmb3JtIHNlZWtpbmcKLQotMjAxMC0wMy0yNSAyMjo1ODo0NyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JICBkdG1mZGV0ZWN0OiBpZiB3ZSB0ZWxsIHRoYXQgd2UgaGFuZGxlIGdhcCBmbGFncywgdGhlbiBkbyBzbwotCi0yMDEwLTAzLTI1IDIyOjU1OjMyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZkZXRlY3QuYzoKLQkgIGR0bWZkZXRlY3Q6IHVzZSBnbGliIHR5cGVzCi0KLTIwMTAtMDMtMjUgMjI6NTQ6NDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5jOgotCSAgZHRtZmRldGVjdDogZml4IGNsYXNzaWZpY2F0aW9uCi0KLTIwMTAtMDMtMjUgMjI6NTM6MjAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5jOgotCSAgZHRtZmRldGVjdDogcmVmb3JtYXQgbWVzc2FnZSBkb2NzCi0JICBVc2UgYSBsaXN0IGxpa2UgaW4gb3RoZXIgZWxlbWVudCBkb2NzIGFzIGFuIHVudHdlYWtlZCBkb2Nib29rIHRhYmxlIGxvb2sgdWdseS4KLQotMjAxMC0wMy0yNCAxNjoxOTo1MyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBmaXggdHlwbyBpbiBoZWFkZXIgdmFsaWRhdGlvbiBjaGVjawotCi0yMDEwLTAzLTI0IDE4OjUzOjIwICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNTVjZDUxNCB0byBjMWQwN2RkCi0KLTIwMTAtMDMtMjMgMTk6NDY6NDMgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4Lmg6Ci0JICBpY3lkZW11eDogSGFuZGxlIHVwc3RyZWFtIENvbnRlbnQtVHlwZS4KLQkgIEFsbG93cyB1cyB0byBoYW5kbGUgU2hvdXRDYXN0IFRWIChOU1YpIHN0cmVhbXMuCi0JICBJZiB0aGUgdXBzdHJlYW0gY2FwcyBoYXZlIHRoZSAnY29udGVudC10eXBlJyBmaWVsZCBzZXQgdG8gdmlkZW8vbnN2LCB0aGVuCi0JICB3ZSBzaG9ydGN1dCB0aGUgdHlwZWZpbmRpbmcgYW5kIHNldCB2aWRlby94LW5zdiBkaXJlY3RseS4KLQotMjAxMC0wMy0yMyAxOTozMDo1MCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBTZXQgdGhlIENvbnRlbnQtVHlwZSBIVFRQIGhlYWRlciBvbiB0aGUgY2Fwcy4KLQkgIEZpcnN0IHN0ZXAgdG8gZml4aW5nIFNob3V0Q2FzdCAoTlNWKSBzdHJlYW1pbmcuCi0KLTIwMTAtMDMtMjMgMDI6Mzg6NDMgLTA0MDAgIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50LmM6Ci0JKiBzeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW06Ci0JICBvc3g6IGZpeCBjb21waWxlciB3YXJuaW5ncwotCSAgQWRkZWQgdm9pZCBwYXJhbWV0ZXIgdG8gYXZvaWQgb2xkLXN0eWxlIGRlZmluaXRpb24gd2FybmluZy4KLQkgIEFkZGVkIC1Xbm8tYWdncmVnYXRlLXJldHVybiBmbGFnIHRvIGF2b2lkIGVycm9uZW91cyBhZ2dyZWdhdGUgcmV0dXJuIHdhcm5pbmcuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEzNjYzCi0KLTIwMTAtMDMtMjMgMDA6MTU6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzoKLQkgIHRlc3RzOiB1c2UgbG9vcCB0ZXN0IGZvciBsb25nLXJ1bm5pbmcgdmlkZW9jcm9wIGNoZWNrCi0JICBUaGlzIHNob3VsZCBhdm9pZCB0aW1lb3V0cyBvbiBzbG93IG1hY2hpbmVzLgotCSAgRml4ZXMgIzU5NzczOS4KLQotMjAxMC0wMy0yMiAxNzoyNjozNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvZmxhYy9nc3RmbGFjLmM6Ci0JKiBleHQvcHVsc2UvcGx1Z2luLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrLmM6Ci0JKiBnc3QtbGlicy9nc3QvZ2V0dGV4dC5oOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICBpMThuOiBidWlsZCBmaXhlczogI2lmIC0+ICNpZmRlZiBmb3IgRU5BQkxFX05MUwotCi0yMDEwLTAzLTIyIDE3OjI1OjA5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9nc3QtaTE4bi1wbHVnaW4uaDoKLQkgIGkxOG46IGZpeCB0aGUgYnVpbGQKLQkgIERvbid0IGlubGN1ZGUgbG9jYWxlLmggd2hpY2ggd2UgaW5jbHVkZSBpbiBnZXR0ZXh0LmggaWYgbmVlZGVkLiBHdWFyZCB0aGUKLQkgIGlubGN1ZGUgbGlrZSB3ZSBkbyBpbiB0aGUgc2ltaWxsYXIgaGVhZGVycyBpbiBjb3JlLgotCi0yMDEwLTAzLTIyIDEzOjE2OjMzICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSAgQWRkIC1Xd3JpdGUtc3RyaW5ncwotCSAgYW5kIGZpeCBpdHMgd2FybmluZ3MKLQotMjAxMC0wMy0yMiAxMjowMjoxNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBBZGQgLVdyZWR1bmRhbnQtZGVjbHMgZmxhZwotCSAgYW5kIGZpeCB3YXJuaW5ncyBmcm9tIGl0Ci0KLTIwMTAtMDMtMjEgMjE6Mzk6MTggKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5Lmg6Ci0JICBBZGQgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyB0byBjb25maWd1cmUgZmxhZ3MKLQkgIEFuZCBmaXggYWxsIHdhcm5pbmdzCi0KLTIwMTAtMDMtMjEgMTc6NDY6MDYgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiBpcyBub3QgdmFsaWQgZm9yIEMrKwotCi0yMDEwLTAzLTIxIDE3OjM2OjI4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlLmM6Ci0JICBtdWx0aWZpbGU6IEluY2x1ZGUgaGVhZGVycyBpbnN0ZWFkIGZvIGRlZmluaW5nIGZ1bmN0aW9ucwotCi0yMDEwLTAzLTIxIDE3OjI0OjE0ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEFkZCBhIGxhcmdlIHNldCBvZiB3YXJuaW5nIGZsYWdzLgotCSAgTm9uZSBvZiB0aGVtIHRyaWdnZXIgd2FybmluZ3MgYW55bW9yZSwgc28gbm90aGluZyBuZWVkZWQgdG8gYmUgZml4ZWQuCi0KLTIwMTAtMDMtMjEgMTc6MjM6NDMgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2dvb20vY29uZmlnX3BhcmFtLmM6Ci0JKiBnc3QvZ29vbS9jb252b2x2ZV9meC5jOgotCSogZ3N0L2dvb20vZmlsdGVycy5jOgotCSogZ3N0L2dvb20vZmx5aW5nX3N0YXJzX2Z4LmM6Ci0JKiBnc3QvZ29vbS9nb29tX2NvbmZpZ19wYXJhbS5oOgotCSogZ3N0L2dvb20vZ29vbV9jb3JlLmM6Ci0JKiBnc3QvZ29vbS9nb29tX2ZpbHRlcnMuaDoKLQkqIGdzdC9nb29tL2dvb21fZnguaDoKLQkqIGdzdC9nb29tL2lmcy5jOgotCSogZ3N0L2dvb20vaWZzLmg6Ci0JKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOgotCSogZ3N0L2dvb20vdGVudGFjbGUzZC5jOgotCSogZ3N0L2dvb20vdGVudGFjbGUzZC5oOgotCSAgTWFrZSBnb29tIG5vdCB1c2UgYWdncmVnYXRlIHJldHVybnMKLQotMjAxMC0wMy0yMSAxNToxNzo0NiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sdXRpbHMuYzoKLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnbGltaXRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNpbmsuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrZGVjLmM6Ci0JKiB0ZXN0cy9jaGVjay9nZW5lcmljL3N0YXRlcy5jOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBBZGQgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiBmbGFnCi0JICBBbmQgZml4IHRoZSB3YXJuaW5ncwotCi0yMDEwLTAzLTIwIDAwOjU0OjE0ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9oYWwvaGFsLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkqIGdzdC9nb29tL2NvbmZpZ19wYXJhbS5jOgotCSogZ3N0L2dvb20vZ29vbV9jb25maWdfcGFyYW0uaDoKLQkqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJ0cmFjay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgQWRkIC1Xd3JpdGUtc3RyaW5ncyB0byB0aGUgY29uZmlndXJlIGZsYWdzCi0JICAuLi4gYW5kIGZpeCBhbGwgd2FybmluZ3MKLQotMjAxMC0wMy0yMSAxMToxNDoxMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBzaGFwZXdpcGU6IEFkZCBzdXBwb3J0IGZvciB0aGUgcmVtYWluaW5nIEFSR0IgZm9ybWF0cwotCSAgQW5kIGhhbmRsZSBBWVVWIGxpa2UgQVJHQiwgd2UgbmVlZCBubyBZVVYgc3BlY2lmaWMgaGFuZGxpbmcuCi0KLTIwMTAtMDMtMjAgMjE6MzA6NTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBBZGQgc3VwcG9ydCBmb3IgUkdCIGFuZCB4UkdCIGlucHV0Ci0KLTIwMTAtMDMtMjAgMjE6MTM6MjMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBBZGQgc3VwcG9ydCBmb3IgQVJHQiBpbnB1dAotCi0yMDEwLTAzLTIwIDIwOjQ2OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogQWRkIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgQVJHQiBvdXRwdXQKLQotMjAxMC0wMy0yMCAxMDo0Nzo0MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfbW14Lmg6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBBZGQgc3VwcG9ydCBmb3IgQUJHUiBhbmQgUkdCQQotCSAgTm93IGFsbCA0IEFSR0IgdmFyaWFudHMgYXJlIHN1cHBvcnRlZCBieSB2aWRlb21peGVyLgotCi0yMDEwLTAzLTIwIDEwOjI0OjU2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogTW92ZSBjaHJvbWEga2V5aW5nIHBhcmFtZXRlcnMgaW50byBzdGFjayB2YXJpYWJsZXMgdG8gcHJldmVudCBtdWx0aXBsZSBwb2ludGVyIGRlcmVmZXJlbmNlcyBwZXIgcGl4ZWwKLQotMjAxMC0wMy0yMCAxMDoyMDo1MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IE1vdmUgY29sb3IgY29udmVyc2lvbiBtYXRyaXhlcyBpbnRvIHN0YWNrIHZhcmlhYmxlcyB0byBzcGVlZCB1cCBwcm9jZXNzaW5nCi0KLTIwMTAtMDMtMjAgMTA6MTg6MDQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBVc2UgY29ycmVjdCBtYXRyaXhlcyB0byBjb252ZXJ0IGNocm9tYSBrZXlpbmcgY29sb3IgdG8gWVVWCi0KLTIwMTAtMDMtMTkgMTg6NTE6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBBZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGNvbG9yIG1hdHJpeGVzCi0KLTIwMTAtMDMtMTkgMTg6MjE6MTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBSZW5hbWUgYW5kIG1vdmUgZnVuY3Rpb25zIGFzIGZ1cnRoZXIgcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcgbW9yZSBjb2xvciBmb3JtYXRzCi0KLTIwMTAtMDMtMTkgMTg6MTg6MDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5oOgotCSAgYWxwaGE6IFJlbW92ZSBzb21lIHVubmVlZGVkIGNhbGN1bGF0aW9ucyBhbmQgaW5zdGFuY2Ugc3RydWN0IGZpZWxkcwotCSAgQW5kIGRvY3VtZW50IHRoZSBpbnN0YW5jZSBzdHJ1Y3QgZmllbGRzIGEgYml0IGJldHRlcgotCi0yMDEwLTAzLTE5IDE4OjExOjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuaDoKLQkgIGFscGhhOiBTb21lIHByZXBhcmF0aW9ucyBmb3Igc3VwcG9ydGluZyBtb3JlIGNvbG9yIGZvcm1hdHMKLQotMjAxMC0wMy0xOSAxNzowOTowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBoMjY0cGF5OiBmaXggY29uZmlnLWludGVydmFsIHByb3BlcnR5Ci0JICBVc2UgdGhlIHNhbWUgdW5pdHMgZm9yIGNvbXBhcmluZyB0aGUgZWxhcHNlZCB0aW1lIGFnYWluc3QgdGhlIGludGVydmFsLgotCSAgRml4ZXMgIzYxMzAxMwotCi0yMDEwLTAzLTE5IDE2OjQ0OjAwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmg6Ci0JICBhbHBoYWNvbG9yOiBJbXBsZW1lbnQgY29sb3ItbWF0cml4IHN1cHBvcnQgYW5kIHVzZSBpbnRlZ2VyIGFyaXRobWV0aWMgb25seQotCSAgQWxwaGFjb2xvciBub3cgdXNlcyB0aGUgY29ycmVjdCBtYXRyaXhlcyBmb3IgU0RUViBhbmQgSERUViBhbmQgY2FuCi0JICBjb252ZXJ0IGJldHdlZW4gdGhlbS4KLQotMjAxMC0wMy0xOSAxNTowMzo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcDogdXNlIEdUeXBlIGZyb20gLWJhc2UgYW5kIGJ1bXAgcmVxdWlyZWQgdmVyc2lvbgotCSAgVXNlIHRoZSB0cmFuc3BvcnQgZmxhZ3MgR1R5cGUgZnJvbSAtYmFzZSBhbmQgYnVtcCB0aGUgcmVxdWlyZWQgdmVyc2lvbiBvZiAtYmFzZQotCSAgYmVjYXVzZSBvZiB0aGlzLgotCi0yMDEwLTAzLTE5IDAwOjA1OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FwZXRhZy9NYWtlZmlsZS5hbToKLQkgIGFwZXRhZzogbWlub3IgTWFrZWZpbGUuYW0gc3VyZ2VyeQotCSAgLUkkKHRvcF9zcmNkaXIpL2dzdC1saWJzLyBpcyBhbHJlYWR5IGluICQoR1NUX0NGTEFHUykKLQotMjAxMC0wMy0xOCAxNzozMDoyNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mZGV0ZWN0LmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzID0+IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZQotCi0yMDEwLTAzLTA0IDIyOjEyOjM1ICswMTAwICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPHlsYXR1eWFAZ21haWwuY29tPgotCi0JKiBleHQvcmF3MTM5NC9nc3QxMzk0Y2xvY2suYzoKLQkgIGR2MTM5NHNyYzogRml4IGludGVybmFsIGNsb2NrCi0JICBGaXhlcyAjNTkzOTEwLgotCi0yMDEwLTAzLTE4IDIxOjE0OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L01ha2VmaWxlLmFtOgotCSogZXh0L2VzZC9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJjYWNhL01ha2VmaWxlLmFtOgotCSogZXh0L3B1bHNlL01ha2VmaWxlLmFtOgotCSogZXh0L3Nob3V0Mi9NYWtlZmlsZS5hbToKLQkqIGV4dC9zcGVleC9NYWtlZmlsZS5hbToKLQkqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1cGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSogZ3N0L2ZseC9NYWtlZmlsZS5hbToKLQkqIGdzdC9pY3lkZW11eC9NYWtlZmlsZS5hbToKLQkqIGdzdC9pbnRlcmxlYXZlL01ha2VmaWxlLmFtOgotCSogZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtOgotCSogZ3N0L3F0ZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcmVwbGF5Z2Fpbi9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBzeXMvZGlyZWN0c291bmQvTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3NzL01ha2VmaWxlLmFtOgotCSogc3lzL3dhdmVmb3JtL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZS5hbToKLQkgIGJ1aWxkOiBNYWtlZmlsZS5hbSBjbGVhbnVwcwotCSAgTW9zdGx5IGFkZCAkKEdTVF9CQVNFX0NGTEFHUykgd2hlcmUgaXQgd2FzIG1pc3NpbmcsIGJ1dCBhbHNvIGZpeCB1cAotCSAgb3JkZXIgb2YgZmxhZ3MgYW5kIGxpYnMgaWYgbmVlZGVkIChzZWUgZG9jcy9yYW5kb20vbW92aW5nLXBsdWdpbnMpLgotCi0yMDEwLTAzLTE4IDE4OjQ5OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgZGlyZWN0c291bmRzaW5rOiBmaXggcmVkdW5kYW50IGZ1bmN0aW9uIHJlZGVjbGFyYXRpb24gY29tcGlsZXIgd2FybmluZ3MKLQotMjAxMC0wMy0xOCAxOTowMDowOSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmg6Ci0JICBhbHBoYTogUmVtb3ZlIHJlbWFpbmluZyBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIHdoZW4gcHJvY2Vzc2luZyBhIHBpeGVsCi0KLTIwMTAtMDMtMTggMTg6NTU6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBSZWZhY3RvciBjaHJvbWEga2V5aW5nIGludG8gYSBzaW5nbGUgZnVuY3Rpb24KLQkgIFRoaXMgcmVkdWNlcyBjb2RlIGR1cGxpY2F0aW9uIG9uY2Ugd2UgYWRkIHN1cHBvcnQgZm9yIG1vcmUgY29sb3IgZm9ybWF0cy4KLQotMjAxMC0wMy0xOCAxNDozMTozNSArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5jOgotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2VzZC9lc2Rtb24uYzoKLQkqIGV4dC9lc2QvZXNkc2luay5jOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzoKLQkqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nLmg6Ci0JKiBleHQvbGlibW5nL2dzdG1uZ2RlYy5jOgotCSogZXh0L2xpYm1uZy9nc3RtbmdlbmMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nLmg6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZWZlbmNlLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2c2Vlay5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL25lZ290aWF0aW9uLmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHBsdWdpbi5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L21lZGlhbi9nc3RtZWRpYW4uYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L3F0ZGVtdXgvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzoKLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVucGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcGdvb2dsZS5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NtaXhlcmVsZW1lbnQuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlscyA9PiBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUKLQotMjAxMC0wMy0xOCAxNDowMjozMCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBnc3Qvb2xkY29yZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9vbGRjb3JlL2dzdGFnZ3JlZ2F0b3IuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGFnZ3JlZ2F0b3IuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdGVsZW1lbnRzLmM6Ci0JKiBnc3Qvb2xkY29yZS9nc3RmZHNpbmsuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGZkc2luay5oOgotCSogZ3N0L29sZGNvcmUvZ3N0bWQ1c2luay5jOgotCSogZ3N0L29sZGNvcmUvZ3N0bWQ1c2luay5oOgotCSogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3Qvb2xkY29yZS9nc3RtdWx0aWZpbGVzcmMuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdHBpcGVmaWx0ZXIuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdHBpcGVmaWx0ZXIuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdHNoYXBlci5jOgotCSogZ3N0L29sZGNvcmUvZ3N0c2hhcGVyLmg6Ci0JKiBnc3Qvb2xkY29yZS9nc3RzdGF0aXN0aWNzLmM6Ci0JKiBnc3Qvb2xkY29yZS9nc3RzdGF0aXN0aWNzLmg6Ci0JICBSZW1vdmUgb2xkY29yZSBkaXJlY3RvcnkKLQkgIFRoZSBlbGVtZW50cyBoYXZlIGJlZW4gdW51c2VkIGZvciBhZ2VzIGFuZCBhbGwgaW1wb3J0YW50IG9uZXMgaGF2ZSBiZWVuCi0JICByZXBsYWNlZCBvciBjb3BpZWQgZWxzZXdoZXJlLgotCi0yMDEwLTAzLTE4IDEzOjQ1OjA4ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVjb2Rlci5jOgotCSAgYXZpOiBSZW1vdmUgb2xkIGZpbGUKLQkgIFNlZW1zIHRvIGJlIGxlZnRvdmVyIGZyb20gdGhlIDAuNCBkYXlzIG9yIHNvLgotCi0yMDEwLTAzLTE4IDEyOjQ0OjUzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZTogdXNlICNpZmRlZiByYXRoZXIgdGhhbiAjaWYgY29uZGl0aW9uYWxzCi0KLTIwMTAtMDMtMTggMTI6MjA6MTcgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgcnRwaDI2NGRlcGF5OiBkbyBub3QgY2FsbCBfcHVzaF90cyB3aXRoIHVubmVlZGVkIChhbmQgd3JvbmcpIHRpbWUgcGFyYW1ldGVyCi0JICBGaXhlcyAjNjEzMjA2LgotCi0yMDEwLTAzLTE4IDExOjMzOjU5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCB0eXBvIGluIGhlYWRlciB2YWxpZGF0aW9uIGNoZWNrCi0KLTIwMTAtMDMtMTggMDE6NTE6MTkgKzAxMDAgIEphbiBVcmJhxYRza2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IHB1dCBtb3JlIGluZm9ybWF0aW9uIGluIHRoZSBtZXRhZGF0YQotCSAgQWRkaXRpb25hbCB0YWdzIGFyZTogYXVkaW9jb2RlY2lkLCB2aWRlb2NvZGVjaWQgZnJhbWVyYXRlIGFuZCAoaW4gdGhlCi0JICBub24tbGl2ZSBjYXNlKSBmaWxlc2l6ZS4KLQkgIFdoaWxlIGF0IGl0LCBmaXggaW5kZXggcmV3cml0aW5nIHRvIHVwZGF0ZSBkdXJhdGlvbiBhbmQgZmlsZXNpemUKLQkgIHZhbHVlcyBldmVuIGlmIHRoZSBpbmRleCBpcyBlbXB0eS4KLQkgIEZpeGVzICM2MTMwOTQuCi0KLTIwMTAtMDMtMTcgMjE6MzM6MjggKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JKiBnc3QvZ29vbS9nb29tX2NvbmZpZy5oOgotCSogZ3N0L2dvb20vbWF0aHRvb2xzLmg6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSAgQWRkIC1XdW5kZWYgdG8gY29uZmlndXJlIGZsYWdzCi0JICBhbmQgZml4IHRoZSByZXN1bHRpbmcgd2FybmluZ3MKLQotMjAxMC0wMy0xNyAyMDowMjoxNiArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICAtV21pc3NpbmctcHJvdG90eXBlcyBpcyBub3QgdmFsaWQgZm9yIEMrKwotCi0yMDEwLTAzLTE3IDE5OjM1OjEwICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWcuaDoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzoKLQkqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyM3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIEFkZCAtV3JlZHVuZGFudC1kZWNscyB3YXJuaW5nIGZsYWcKLQkgIEFsc28gZml4IGNvbXBpbGUgaXNzdWVzCi0KLTIwMTAtMDMtMTcgMTg6NDk6MTEgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuaDoKLQkgIEZpeCB3YXJuaW5ncyBpbiBleHBlcmltZW50YWwgcGx1Z2lucywgdG9vCi0KLTIwMTAtMDMtMTcgMTg6MjM6MDAgKzAxMDAgIEJlbmphbWluIE90dGUgPG90dGVAcmVkaGF0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2Fubm9kZXgvZ3N0YW5ub2RleC5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5oOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5oOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbHBhcnNlci5jOgotCSogZXh0L2Fubm9kZXgvZ3N0Y21tbHV0aWxzLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOgotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuaDoKLQkqIGV4dC9qcGVnL01ha2VmaWxlLmFtOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZy5oOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5oOgotCSogZ3N0L2RlYnVndXRpbHMvYnJlYWtteWRhdGEuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdnNlZWsuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RwbHVnaW4uYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5hc206Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbW14Lmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmM6Ci0JKiBnc3QvZ29vbS9nb29tX2Z4Lmg6Ci0JKiBnc3QvZ29vbTJrMS9maWx0ZXJzLmM6Ci0JKiBnc3QvZ29vbTJrMS9maWx0ZXJzLmg6Ci0JKiBnc3QvbGF3L211bGF3LWNvbnZlcnNpb24uYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnQuYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaDoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5oOgotCSogZ3N0L3F0ZGVtdXgvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZm52MWhhc2guYzoKLQkqIGdzdC9ydHAvZm52MWhhc2guaDoKLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzI2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5oOgotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0bWFzay5jOgotCSogZ3N0L3NtcHRlL2dzdG1hc2suaDoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuaDoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5oOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ2aWRvcmllbnQuaDoKLQkqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2FtcGxpZnkuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2R5bmFtaWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZWNoby5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9pbnZlcnQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aW11eC5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpc3VidGl0bGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxkZWMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2VxdWFsaXplci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnbGltaXRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmd2b2x1bWUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NoYXBld2lwZS5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NwZWN0cnVtLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2ZpbHRlci5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2RlYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja3BhcnNlLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYzoKLQkqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdnBhY2suYzoKLQkqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9zcGVjdHJ1bS1leGFtcGxlLmM6Ci0JKiB0ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYzoKLQkgIEFkZCAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIHdhcm5pbmcgZmxhZ3MKLQkgIEFuZCBmaXggYWxsIHRoZSB3YXJuaW5ncy4KLQotMjAxMC0wMy0xNyAxNjoyMzoyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgIG1wNGdkZXBheTogaW1wcm92ZSBjb25zdGFudER1cmF0aW9uIGd1ZXNzaW5nCi0JICBXaGVuIG5vIGNvbnN0YW50RHVyYXRpb24gaGFzIGJlZW4gZ2l2ZW4gaW4gdGhlIGNhcHMsIHRyeSB0byBkZXJpdmUgb25lIGZyb20gdGhlCi0JICB0aW1lc3RhbXAgZGlmZmVyZW5jZSBiZXR3ZWVuIHBhY2tldHMuIEFsc28ga2VlcCBkb2luZyB0aGlzIGZvciBlYWNoIHBhY2tldAotCSAgYmVjYXVzZSBzb21lIGJyb2tlbiBzdHJlYW1zIG1pZ2h0IHNpbXBseSBwcm92aWRlIHdyb25nIHRpbWVzdGFtcHMuCi0KLTIwMTAtMDMtMTYgMjM6NDM6MzkgKzAxMDAgIEphbiBVcmJhxYRza2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IFB1dCB3aWR0aCBhbmQgaGVpZ2h0IGluIHRoZSBtZXRhZGF0YQotCSAgU29tZSBwbGF5ZXJzIHVzZSB0aGF0IGluZm8gdG8gc2NhbGUgdGhlaXIgZGlzcGxheS4KLQkgIFNlZSAjNjEzMDk0LgotCi0yMDEwLTAzLTE2IDIzOjMyOjQ1ICswMTAwICBKYW4gVXJiYcWEc2tpIDx3dWxjemVyQHd1bGN6ZXIub3JnPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBkb24ndCBwdXQgdGltZXN0YW1wcyBsYXJnZXIgdGhhbiBHX01BWElOVDMyIGluIHRoZSBGTFYgdGFncwotCSAgRm9yIG5vbi1saXZlIGlucHV0IHJlc3BvbmQgYnkgcHVzaGluZyBFT1MsIGZvciBsaXZlIHdyYXAgdGhlCi0JICB0aW1lc3RhbXBzIGV2ZXJ5IEdfTUFYSU5UMzIgbWlsaXNlY29uZHMuCi0JICBGaXhlcyAjNjEzMDAzLgotCi0yMDEwLTAzLTE2IDIzOjQwOjEyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBhbHNvIHVzZSBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nKCkgaGVyZSBmb3Igc3RhdGljIHN0cmluZ3MKLQotMjAxMC0wMy0xNiAyMToyMzoxMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JICBhbHBoYWNvbG9yOiBGaXggUkdCQTwtPkFZVVYgY29udmVyc2lvbgotCi0yMDEwLTAzLTE2IDIxOjE2OjI2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuaDoKLQkgIGFscGhhOiBSZW1vdmUgcmVkdW5kYW50IGluc3RhbmNlIGZpZWxkCi0KLTIwMTAtMDMtMTYgMjE6MTA6MDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgIGFscGhhOiBQcm90ZWN0IHByb3BlcnR5IHZhbHVlcyBmcm9tIGNoYW5nZXMgZHVyaW5nIGZyYW1lIHByb2Nlc3NpbmcKLQotMjAxMC0wMy0xNSAyMzoyOTo1NSArMDMwMCAg0KDRg9GB0LvQsNC9INCY0LbQsdGD0LvQsNGC0L7QsiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdlbmM6IFVzZSBwbmdfZ2V0X2lvX3B0cigpIGluc3RlYWQgb2YgYWNjZXNzaW5nIGlvX3B0ciBkaXJlY3RseQotCSAgRml4ZXMgIzYxMjcwMCAoZm9yIHRoZSBsYXN0IHRpbWUhKQotCi0yMDEwLTAzLTE1IDIzOjI5OjA2ICswMzAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgcG5nOiBDaGVjayBmb3IgbGlicG5nID49IDEuMiBpbnN0ZWFkIG9mIGxpYnBuZzEyCi0KLTIwMTAtMDMtMTYgMDE6Mjk6MzYgKzAxMDAgIEphbiBVcmJhxYRza2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5oOgotCSAgZmx2bXV4OiBBbHdheXMgcHV0IGEgZHVyYXRpb24gdGFnIGluIHRoZSBtZXRhZGF0YQotCSAgU29tZSBGbGFzaCBwbGF5ZXJzIChmb3IgaW5zdGFuY2UgSlcgUGxheWVyKSBhbHdheXMgZXhwZWN0IGEgZHVyYXRpb24KLQkgIHRhZywgb3RoZXJ3aXNlIHRoZXkgZG9uJ3Qgc3RhcnQgcGxheWJhY2suCi0JICBJZiBkdXJhdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBzaW5rIHBhZHMgb3IgaXMgcHJvdmlkZWQgYXMgYSB0YWcsCi0JICB1c2UgaXQuIE90aGVyd2lzZSB0cnkgdG8gZGV0ZXJtaW5lIGl0IGZyb20gdGhlIGxhc3Qgc2VlbiB0aW1lc3RhbXAgb2YKLQkgIHRoZSBzaW5rIHBhZHMgYWZ0ZXIgRU9TIGFuZCByZXdyaXRlIGl0IGluIHRoZSBoZWFkZXIgYmVmb3JlIHdyaXRpbmcKLQkgIHRoZSBpbmRleC4KLQotMjAxMC0wMy0xNiAwMDozNTo0NiArMDEwMCAgSmFuIFVyYmHFhHNraSA8d3VsY3plckB3dWxjemVyLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4Lmg6Ci0JICBmbHZtdXg6IFJlbW92ZSB0aGUgc2VuZF9jb2RlY19kYXRhIGZpZWxkIGZyb20gR3N0Rmx2UGFkCi0JICBUaGF0IGZpZWxkIGlzIG5vdCB1c2VkIGFueW1vcmUgYWZ0ZXIgdGhlIGNoYW5nZXMgaW4KLQkgIDlmZGVjYmMxYzExZjRlNWFmNjU3OGJiYTMyYTliMzI3NzEwMjlkMzMuCi0KLTIwMTAtMDMtMTYgMTM6NTM6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IGdldCBmYW1pbHkgb2YgZXh0ZXJuYWwgc29ja2V0cyB0b28KLQkgIEdldCB0aGUgZmFtaWx5IG9mIGV4dGVybmFsbHkgY29uZmlndXJlZCBzb2NrZXRzIHNvIHRoYXQgd2UgY2FuIGNvbmZpZ3VyZSBpdAotCSAgY29ycmVjdGx5LgotCi0yMDEwLTAzLTE1IDIwOjM3OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgIGFscGhhY29sb3I6IEFkZCBzdXBwb3J0IGZvciB0aGUgcmVtYWluaW5nIEFSR0IgZm9ybWF0cwotCi0yMDEwLTAzLTE1IDE5OjE2OjE4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgIGFscGhhY29sb3I6IFNpbXBsaWZ5IEFSR0I8LT5BWVVWIGNvbnZlcnNpb25zIGJ5IGNvZGUgZ2VuZXJhdGlvbiBtYWNyb3MKLQotMjAxMC0wMy0xNSAxOTowNzoyOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmg6Ci0JICBhbHBoYTogTWlub3IgY2xlYW51cHMgYW5kIG1vdmUgZGVjbGFyYXRpb25zIGludG8gYSBzZXBhcmF0ZSBoZWFkZXIgZmlsZQotCi0yMDEwLTAzLTE1IDE4OjU4OjUxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBhbHBoYTogVXNlIEdzdFZpZGVvRmlsdGVyIGFzIGJhc2UgY2xhc3MgZm9yIGF1dG9tYXRpYyBRb1Mgc3VwcG9ydAotCi0yMDEwLTAzLTE1IDE4OjUwOjExICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmg6Ci0JICBhbHBoYWNvbG9yOiBBZGQgc3VwcG9ydCBmb3IgaW5wbGFjZSBjb252ZXJzaW9ucyBmcm9tIEFZVVYgdG8gQVJHQgotCi0yMDEwLTAzLTE1IDE4OjE0OjE5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmg6Ci0JICBhbHBoYWNvbG9yOiBVc2UgbGliZ3N0dmlkZW8gZm9yIGNhcHMgcGFyc2luZwotCi0yMDEwLTAzLTE1IDE4OjA5OjU1ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmg6Ci0JICBhbHBoYWNvbG9yOiBVc2UgR3N0VmlkZW9GaWx0ZXIgYXMgYmFzZSBjbGFzcyBmb3IgYXV0b21hdGljIFFvUyBzdXBwb3J0Ci0KLTIwMTAtMDMtMTUgMTg6MDc6MjkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSAgYWxwaGFjb2xvcjogU29tZSBtaW5vciBjbGVhbnVwCi0KLTIwMTAtMDMtMTUgMTQ6MTY6NTggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5oOgotCSAgc3BlZXhkZWM6IFVzZSBzcGVleF9zdGVyZW9fc3RhdGVfaW5pdCgpIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQgaW5pdGlhbGl6YXRpb24gbWFjcm8KLQkgIEZpeGVzIGJ1ZyAjNjEyNzc3LgotCi0yMDEwLTAzLTE1IDAxOjA5OjQ5ICswMTAwICBKYW4gVXJiYcWEc2tpIDx3dWxjemVyQHd1bGN6ZXIub3JnPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBDb3JyZWN0bHkgbWFyayBidWZmZXJzIGFzIGRlbHRhIHVuaXRzCi0JICBNYXJrIHZpZGVvIGludGVyZnJhbWVzLCB2aWRlbyBjb2RlYyBkYXRhIGJ1ZmZlcnMgYW5kIGF1ZGlvIGJ1ZmZlcnMgKGlmCi0JICBpdCdzIG5vdCBhbiBhdWRpby1vbmx5IHN0cmVhbSkgYXMgZGVsdGEgdW5pdHMuCi0KLTIwMTAtMDMtMTQgMTk6MzI6MjAgKzAxMDAgIEphbiBVcmJhxYRza2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IFN1cHBvcnQgc3RyZWFtaGVhZGVycwotCSAgUHV0IHRoZSBGTFYgaGVhZGVyLCB0aGUgbWV0YWRhdGEgdGFnIGFuZCAoaWYgcHJlc2VudCkgY29kZWMKLQkgIGluZm9ybWF0aW9uIGluIHRoZSBzdHJlYW1oZWFkZXIgdG8gYWxsb3cgdGhlIG11eGVyIHRvIGJlIHVzZWQgZm9yCi0JICBzdHJlYW1pbmcuCi0KLTIwMTAtMDMtMTQgMDE6Mzg6MjEgKzAxMDAgIEphbiBVcmJhxYRza2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IFByZWFsbG9jYXRlIGluZGV4IHNwYWNlIGFuZCBmaWxsIGl0IGFmdGVyIGZpbmlzaGluZyBvdXRwdXQKLQkgIE1ha2UgdGhlIGluZGV4IGFwcGVhciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLCB3aGljaCBpcyB3aGF0IG1vc3QKLQkgIHBsYXllcnMgYXJlIGV4cGVjdGluZy4KLQkgIEZpeGVzICM2MDEyMzYuCi0KLTIwMTAtMDMtMTUgMTM6NDc6MTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBNaW5vciBjb2Rpbmcgc3R5bGUgZml4ZXMgYW5kIGNsZWFudXAKLQotMjAxMC0wMy0xNCAwMTozNDowMiArMDEwMCAgSmFuIFVyYmHFhHNraSA8d3VsY3plckB3dWxjemVyLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4Lmg6Ci0JICBmbHZtdXg6IEFkZCBhIGlzLWxpdmUgcHJvcGVydHkKLQkgIElmIGl0IGlzIHNldCwgdGhlIG11eGVyIHdpbGwgbm90IHdyaXRlIHRoZSBpbmRleC4gRGVmYXVsdHMgdG8gZmFsc2UuCi0KLTIwMTAtMDMtMTQgMDE6MjU6NDIgKzAxMDAgIEphbiBVcmJhxYRza2kgPHd1bGN6ZXJAd3VsY3plci5vcmc+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IE9ubHkgcHV0IHZhbGlkIHNlZWsgcG9pbnRzIGluIHRoZSBpbmRleAotCSAgRm9yIGZpbGVzIGNvbnRhaW5pbmcgdmlkZW8gb25seSB2aWRlbyBrZXlmcmFtZXMgYXJlIHZhbGlkIHBvaW50cyB0bwotCSAgd2hpY2ggYSBwbGF5ZXIgY2FuIHNlZWsuIEZvciBhdWRpby1vbmx5IGZpbGVzIGFueSB0YWcgc3RhcnQgaXMgYSB2YWxpZAotCSAgc2VlayBwb2ludC4KLQkgIFNlZSAjNjAxMjM2LgotCi0yMDEwLTAzLTE0IDAxOjA5OjM3ICswMTAwICBKYW4gVXJiYcWEc2tpIDx3dWxjemVyQHd1bGN6ZXIub3JnPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBGaXggaW5kZXggYnVpbGRpbmcgdG8gbWFrZSBlbnRyaWVzIHBvaW50IHRvIHRhZydzIHN0YXJ0IG9mZnNldAotCSAgUHJldmlvdXMgY29kaW5nIHdhcyB3cm9uZ2x5IGluY3JlbWVudGluZyB0aGUgdG90YWwgYnl0ZSBjb3VudCBiZWZvcmUKLQkgIGFkZGluZyBhbiBpbmRleCBlbnRyeS4KLQotMjAxMC0wMy0xNSAxMzo0MDozOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSAgY2Fpcm90ZXh0b3ZlcmxheTogRG9uJ3QgcmVuZGVyIHRleHQgb3V0c2lkZSB0aGUgZnJhbWUgYm91bmRhcmllcwotCSAgRml4ZXMgYnVnICM2MTE5ODYuCi0KLTIwMTAtMDMtMTUgMTE6Mzg6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGRvbid0IGZvcmdldCB0byBzZW5kIGtlZXBhbGl2ZSBtZXNzYWdlcwotCSAgV2hlbiB3ZSBvcGVyYXRlIGluIFRDUCBtb2RlLCBzdGlsbCBzZW5kIGtlZXBhbGl2ZSBtZXNzYWdlcyB3aGVuIHdlCi0JICBuZWVkIHRvLgotCSAgRml4ZXMgIzYxMjY5NgotCi0yMDEwLTAzLTEzIDIzOjE5OjM1ICswMzAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIHBuZ2VuYzogQ2FsbCBwbmdfam1wYnVmKCkgaW5zdGVhZCBvZiBhY2Nlc3NpbmcgcG5nX3N0cnVjdF9wdHIgZGlyZWN0bHkKLQkgIEZpeGVzICM2MTI3MDAgKGFnYWluKQotCi0yMDEwLTAzLTEyIDE2OjQ0OjMwICswMzAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIHBuZ2VuYzogQ2FsbCBwbmdfZXJyb3IoKSBpbnN0ZWFkIG9mIHVzaW5nIGxvbmdqbXAoKSBkaXJlY3RseS4KLQkgIEZpeGVzICM2MTI3MDAKLQotMjAxMC0wMy0xMiAxMzo1NzoyOCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGUyNzJmNzEgdG8gNTVjZDUxNAotCi0yMDEwLTAzLTA1IDExOjA2OjQ3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IGFkZCBYTVAgcGFyc2luZyBzdXBwb3J0Ci0JICBVc2UgeG1wIGhlbHBlcnMgdG8gcGFyc2UgWE1QIG1ldGFkYXRhIGluIHVkdGEgYXRvbS4KLQkgIEZpeGVzICM2MDk1MzkKLQotMjAxMC0wMy0xMSAxMjozMjo1NiAtMDgwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JICB1ZHA6IGZpeCBjb21waWxhdGlvbiBlcnJvcnMgb24gbm9uLXdpbmRvd3MuCi0KLTIwMTAtMDMtMTAgMjI6MjM6NDMgKzAxMDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8eWxhdHV5YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5jOgotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSAgbXVsdGl1ZHBzaW5rOiBhdm9pZCBnZXR0aW5nIHRoZSBzb2NrZXQgZmFtaWx5IHVzaW5nIGdldHNvY2tuYW1lKCkKLQotMjAxMC0wMy0xMSAxNzoyODo0NyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHByaW50IHN0YXRlbWVudHMgZm9yIHBvaW50ZXIgZGlmZmVyZW5jZXMuCi0JICBUaGlzIGZpeGVzIGl0IGZvciBib3RoIDMyIGFuZCA2NCBiaXQKLQotMjAxMC0wMy0xMSAxNzoyODozNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlcwotCi0yMDEwLTAzLTExIDE3OjAzOjQ3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogRml4IHByaW50ZiBmb3JtYXR0aW5nIGZvciBtYWNvc3gKLQotMjAxMC0wMy0xMSAxNzowMzowNSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZXMKLQotMjAxMC0wMy0xMSAxNzowMjo0NCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEZpeCB1bml0aWFsaXplZCB2YXJpYWJsZS4KLQotMjAxMC0wMi0xOSAxMzozOTowNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2cGFyc2U6IE1ha2Ugc2NyaXB0IHRhZyBwYXJzaW5nIG1vcmUgZmxleGlibGUuCi0JICAqIFRoZSBuYl9lbGVtZW50cyBmb3IgYXJyYXlzIGlzIGp1c3QgYW4gaW5kaWNhdGlvbiwgd2UgY2FuIHRoZXJlZm9yZSBpZ25vcmUKLQkgIGl0IGFuZCBjYXJyeSBvbiBwYXJzaW5nIG1ldGFkYXRhIGl0ZW1zIHVudGlsIHdlIHJlYWNoIHRoZSBlbmQgbWFya2VyLgotCSAgKiBJZiB0eXBlID09IDMsIHRoZW4gdGhlIHNjcmlwdCB0YWcgY29udGFpbnMgYSBsaXN0IG9mIG9iamVjdCBmb2xsb3dlZAotCSAgYnkgdGhlIGVuZCBtYXJrZXIuCi0JICBSZWZhY3RvciBjb2RlIHNsaWdodGx5IHRvIGhhbmRsZSBib3RoIGNhc2VzCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwNDQ3Ci0KLTIwMTAtMDMtMTEgMTU6NTE6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGVhdmUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkgIHRlc3RzOiBmaXggbWV0YWRhdGEgbm90IHdyaXRhYmxlIHdhcm5pbmdzIGluIGludGVybGVhdmUgYW5kIGRlaW50ZXJsZWF2ZSB0ZXN0cwotCi0yMDEwLTAzLTExIDE1OjM4OjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvYXBldjJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6Ci0JICB0ZXN0czogZml4IG1ldGFkYXRhIG5vdCB3cml0YWJsZSB3YXJuaW5ncyB3aXRoIGFwZXYybXV4IGFuZCBpZDN2Mm11eCB0ZXN0cwotCi0yMDEwLTAzLTExIDE1OjI0OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBmaXggbWV0YWRhdGEgd3JpdGFibGUgd2FybmluZ3MKLQkgIFNldCBtZXRhZGF0YSBvbiBidWZmZXIgZmlyc3QsIHdoZW4gdGhlIHJlZmNvdW50IGlzIHN0aWxsIDEsIGFuZCBvbmx5Ci0JICByZWYgYWdhaW4gYWZ0ZXJ3YXJkcy4KLQotMjAxMC0wMy0xMSAxNTowMjo0OCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBpZ25vcmUgc3RyZWFtIHdpdGggaW52YWxpZCBoZWFkZXIgdGltZSBtZXRhZGF0YQotCi0yMDEwLTAzLTA4IDE0OjU3OjE3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogU2V0IHN0cmVhbS1mb3JtYXQ9cmF3IG9uIEFBQyBjYXBzCi0JICBTZXQgc3RyZWFtLWZvcm1hdD1yYXcgZm9yIEFBQyBjYXBzLCBhcyB0aGF0IGlzIHRoZQotCSAgZXhwZWN0ZWQgQUFDIGZvcm1hdCB0byBiZSBpbiB0aGlzIGNvbnRhaW5lciBmYW1pbHkuCi0JICBGaXhlcyAjNTY2MjUwCi0KLTIwMTAtMDMtMTEgMTI6NTY6MTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNoZWNrIGZvciBOVUxMIGJlZm9yZSBkb2luZyBzdHJjbXAKLQkgIENoZWNrIHRoZSBjb25uZWN0aW9uIGFuZCBhZGRyZXNzIHR5cGUgZm9yIE5VTEwgYmVmb3JlIGRvaW5nIHN0cmNtcCBhbmQKLQkgIGNyYXNoaW5nLgotCSAgRml4ZXMgIzYxMjU1MwotCi0yMDEwLTAzLTExIDExOjIwOjU5ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkZjhhN2M4IHRvIGUyNzJmNzEKLQotMjAxMC0wMy0xMSAxMTowOTo1NSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICBidWlsZDogaW5jbHVkZSBzdGRsaWIuaCBmb3IgYXRvaSgpCi0KLTIwMTAtMDMtMTEgMTA6MzM6MDAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgYXVkaW9wYW5vcmFtYTogbW92ZSBpbnZhcmlhbnQgY2hlY2sgb3V0IG9mIHRoZSBpbm5lciBsb29wCi0JICBJbXByb3ZlcyBwZXJmb3JtYW5jZSBmb3Igc2ltcGxlIG1ldGhvZC4KLQotMjAxMC0wMy0xMCAyMjoxNTowNCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBVcGRhdGUgQ1hYRkxBR1MsIHRvbywganVzdCBsaWtlIENGTEFHUwotCi0yMDEwLTAzLTEwIDIxOjAxOjIwICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBVcGRhdGUgZm9yIHJlY2VudCBjaGFuZ2VzIHRvIGNvbW1vbiBzdWJtb2R1bGUKLQkgIFRoaXMganVzdCByZXBsYWNlcyBldmVyeSAiJEVSUk9SX0NGTEFHUyIgdXNhZ2Ugd2l0aCBhIHVzYWdlIG9mCi0JICAiJFdBUk5JTkdfQ0ZMQUdTICRFUlJPUl9DRkxBR1MiIHRvIGdldCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzCi0JICBwcmV2aW91c2x5LgotCSAgQWN0dWFsbHkgdXNpbmcgdGhhdCBzZXBhcmF0aW9uIHdpbGwgaGFwcGVuIGxhdGVyLgotCi0yMDEwLTAzLTEwIDIxOjUyOjA5ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA5NzIwYTdkIHRvIGRmOGE3YzgKLQotMjAxMC0wMy0xMCAyMDo0Mzo1NyArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMGI2ZTA3MiB0byA5NzIwYTdkCi0KLTIwMTAtMDMtMTAgMTA6NTE6MjggLTA4MDAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1bW90aW9uLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogUmVzZXQgd2luZG93cyBlcnJvciBjb2RlIGFmdGVyIGdldHRpbmcgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLgotCi0yMDEwLTAzLTA5IDE3OjMyOjI3IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JICBhdmltdXg6IHB1dCB0aGUgY29kZWNfZGF0YSBibG9iIGludG8gdGhlIGFjdHVhbCBkYXRhIGZvciBNUEVHNCB2aWRlbywgdG8gbWF0Y2ggb3RoZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSB3aWxkLgotCi0yMDEwLTAzLTEwIDE2OjA5OjU2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA3Y2M1ZWI0IHRvIDBiNmUwNzIKLQotMjAxMC0wMi0yMyAyMTowNjo1NSAtMDMwMCAgVGhhZGV1IExpbWEgZGUgU291emEgQ2FzY2FyZG8gPGNhc2NhcmRvQGhvbG9zY29waW8uY29tPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgeGltYWdlc3JjOiBzZW5kIG5ld19zZWdtZW50IHdpdGggR1NUX0ZPUk1BVF9USU1FIGZvcm1hdAotCSAgSW5zdGVhZCBvZiB1c2luZyBCYXNlU3JjIGRlZmF1bHQgZm9ybWF0IEdTVF9GT1JNQVRfQllURVMsIHNlbmQgaXQgaW4KLQkgIEdTVF9GT1JNQVRfVElNRS4KLQkgIFNpZ25lZC1vZmYtYnk6IFRoYWRldSBMaW1hIGRlIFNvdXphIENhc2NhcmRvIDxjYXNjYXJkb0Bob2xvc2NvcGlvLmNvbT4KLQkgIEZpeGVzICM2MTE2NTkKLQotMjAxMC0wMy0xMCAxMTo0NjowNiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBwdXNoIG1vZGU7IGFsc28gcmVwb3J0IHNlZWthYmxlIHdpdGhvdXQgYW4gZWxlbWVudCBpbmRleAotCSAgLi4uIHNpbmNlIHJlY2VudCBjb2RlIGFsc28gc2Vla3MgYXJvdW5kIHRvIG9idGFpbiByZXF1aXJlZCBkYXRhCi0JICBmcm9tIGF2aSBpbmRleC4KLQotMjAxMC0wMy0wOSAxODowNjo1MiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBhZGQgc29tZSBjaGVjayBhbmQgc3RhbmRhcmRpemVkIHNlZWsgZXZlbnQgaGFuZGxpbmcgaW4gcHVzaCBtb2RlCi0KLTIwMTAtMDMtMDkgMTg6MDU6MjkgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZml4IG9mZnNldCBoYW5kbGluZyBpbiBwdXNoIG1vZGUgc2Vla2luZwotCSAgUHVzaCBtb2RlIHNlZWtpbmcgdXNlcyBzYW1lIGluZGV4IGRhdGEgYXMgcHVsbCBtb2RlLCBhbmQgc3RvcmVzCi0JICBvZmZzZXQgdG8gZGF0YSBpbiBjaHVuaywgd2hlcmVhcyBwdXNoIG1vZGUgb3BlcmF0ZXMgaW4gY2h1bmtzLAotCSAgYW5kIGFzIHN1Y2ggbmVlZHMgb2Zmc2V0IGNvbnNpc3RlbnRseSBjb3JyZXNwb25kaW5nIHRvIGNodW5rIGhlYWRlcnMuCi0JICBBbHNvIGZpeCBkZXRlcm1pbmluZyBiZXN0IG1hdGNoaW5nIHN0cmVhbSBmb3IgaW5jb21pbmcgbmV3c2VnbWVudCBldmVudCwKLQkgIGFzIHdlbGwgYXMgc2V0dGluZyBzb21lIHN0cmVhbSBzdGF0ZSBhY2NvcmRpbmdseS4KLQotMjAxMC0wMi0yNiAyMToyOTo0OSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkgIGZsdmRlbXV4OiBjb25kdWN0IGluZGV4IHNjYW4gaW4gdGFzayB0aHJlYWQKLQkgIC4uLiByYXRoZXIgdGhhbiBpbiBzZWVraW5nIHRocmVhZCwgd2hpY2ggbWlnaHQgdGhlbiBvY2N1cHkgbWFpbmxvb3AKLQkgIGZvciBzb21lIHRpbWUgd2l0aCBwb3NzaWJsZSB1bnJlc3BvbnNpdmUgc2lkZS1lZmZlY3RzLgotCi0yMDEwLTAyLTI2IDIxOjI3OjMzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IGF2b2lkIGluZGVmaW5pdGUgaW5kZXggZ3Jvd3RoCi0JICBUaGF0IGlzLCBjaGVjayBmb3IgYW5kIGRvIG5vdCBhZGQgYW4gaW5kZXggZW50cnkgdGhhdCBoYXMgYWxyZWFkeQotCSAgYmVlbiBhZGRlZC4KLQotMjAxMC0wMi0xOCAxNDo1NzozOSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgIGZsdmRlbXV4OiBhbHNvIGNvbGxlY3QgaW5kZXggaW5mbyBvbi10aGUtZmx5IGluIHB1bGwgbW9kZQotCi0yMDEwLTAyLTE4IDEyOjQyOjMxICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5oOgotCSAgZmx2ZGVtdXg6IGluY3JlbWVudGFsbHkgYnVpbGQgaW5kZXggaW4gcHVsbCBtb2RlCi0JICBTY2FuIGZvciBuZWVkZWQgcGFydCB1cG9uIGEgc2VlayBhcyBvcHBvc2VkIHRvIGRvaW5nIGEgY29tcGxldGUgc2NhbgotCSAgYXQgc3RhcnR1cCwgd2hpY2ggbWF5IHRha2Ugc29tZSB0aW1lIGRlcGVuZGluZyBvbiBmaWxlIGFuZC9vciBwbGF0Zm9ybS4KLQkgIEFsc28gYWNjZXB0IGluZGV4IG1ldGFkYXRhIGluIHB1bGwgbW9kZSBhbmQgcGVlayBmb3Igc29tZSBtZXRhZGF0YQotCSAgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSB3aGVuIGRlZW1lZCBhcHByb3ByaWF0ZS4KLQotMjAxMC0wMi0xOCAxMjoyNjo0NiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBzb21lIG1vcmUgdmFyaWFibGUgY2xlYW51cAotCi0yMDEwLTAzLTA5IDE4OjI1OjIzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IHJlZmFjdG9yIGFkZGluZyBpbmRleCBlbnRyeQotCi0yMDEwLTAyLTE3IDExOjM2OjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IGZpeCBzZXR0aW5nIERFTFRBX1VOSVQgZmxhZyBvbiBvdXRnb2luZyBidWZmZXJzCi0JICAuLi4gd2hpY2ggc2hvdWxkIG5vdCBkZXBlbmQgb24gaGF2aW5nIGluZGV4IGF2YWlsYWJsZSBvciBub3QuCi0JICBBbHNvIHJlZmFjdG9yIHJlc3VsdGluZyBjb2xsYXBzZWQgY29kZS4KLQotMjAxMC0wMi0xMSAxOTo0Mzo0NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGF2b2lkIGVycm9uZW91cyBjb2RlYy1kYXRhIG92ZXJyaWRpbmcgb2Ygc3RzZCBpbmZvcm1hdGlvbgotCi0yMDEwLTAyLTAxIDIyOjM3OjMwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JICBzcGVleGRlYzogYWRhcHQgdG8gbmV3IG9nZ2RlbXV4Ci0JICBSZW1vdmUgYWxsIGdyYW51bGVwb3MgaGFja3MgYW5kIHNpbXBseSB1c2UgdXBzdHJlYW0gdGltZXN0YW1wcy4KLQotMjAxMC0wMi0wMSAyMjozNjowMiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JICBzcGVleGRlYzogcmVmYWN0b3IgZ3JhbnVsZXBvcyBoYWNrcwotCi0yMDEwLTAzLTEwIDExOjE5OjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwYXJzZSBjb25uZWN0aW9uIGluZm9ybWF0aW9uCi0JICBQYXJzZSB0aGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBTRFAgYW5kIHVzZSBpdCB0byBmaWd1cmUgb3V0IGlmIHdlIGFyZQotCSAgZGVhbGluZyB3aXRoIGlwdjQgb3IgaXB2NiBjb25uZWN0aW9ucy4KLQotMjAxMC0wMy0wOSAxNzo1MzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogcmVxdWlyZSBhIGRlc3RpbmF0aW9uIGZvciBtdWx0aWNhc3QKLQkgIFdoZW4gc2V0dGluZyB1cCB0aGUgbXVsdGljYXN0IHNvY2tldHMsIHdlIG5lZWQgYSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRvIGxpc3RlbgotCSAgb24gb3IgZWxzZSB3ZSBlcnJvci4KLQotMjAxMC0wMy0wOSAxNzo1MjozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogaGFuZGxlIGlwdjYgbGlzdGVuaW5nIHBvcnRzIHdoZW4gbmVlZGVkCi0JICBBZGQgc29tZSBjb2RlIHRvIG1ha2UgdWRwc3JjIGxpc3RlbiBvbiBhbiBpcHY2IGFkZHJlc3Mgd2hlbiBuZWVkZWQuIFRoZQotCSAgZGV0ZWN0aW9uIG9mIElQVjYgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KLQotMjAxMC0wMy0wOSAxNzoxNToxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgdWRwOiB1c2UgdXJpIHBhcnNpbmcgY29kZQotCSAgVXNlIHRoZSB1cmkgcGFyc2luZyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgaG9zdCBhbmQgcG9ydCBwYWlycy4gVGhpcwotCSAgYWRkcyBzdXBwb3J0IGZvciBJUFY2LgotCi0yMDEwLTAzLTA5IDE3OjEzOjMxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JICB1ZHBuZXR1dGlsczogYWRkIGhlbHBlciBmdW5jdGlvbnMgZm9yIHVkcCB1cmkgaGFuZGxpbmcKLQkgIEFkZCBzb21lIGhlbHBlcnMgdG8gcGFyc2UgdWRwIHVyaXMuIE1ha2Ugc3VyZSBJUFY2IGlzIHN1cHBvcnRlZCB0b28uCi0KLTIwMTAtMDMtMDUgMTY6MDg6NDUgKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHJ0cHNlc3Npb246IE1ha2UgaXQgcG9zc2libGUgdG8gZmF2b3IgbmV3IHNvdXJjZXMgaW4gY2FzZSBvZiBTU1JDIGNvbmZsaWN0Ci0JICBBZGQgYSAiZmF2b3ItbmV3IiBwcm9wZXJ0eSB0aGF0IHRlbGxzIHRoZSBzZXNzaW9uIHRvIGZhdm9yIG5ldyBzb3VyY2VzIHdoZW4KLQkgIHRoZXJlIGlzIGEgU1NSQyBjb25mbGljdC4gVGhpcyBpcyB1c2VmdWwgZm9yIFNJUCBjYWxscyBhbmQgb3RoZXIgc3VjaCBjYXNlcwotCSAgd2hlcmUgYSByZW1vdGUgbG9vcCBpcyBleHRyZW1lbHkgdW5saWtlbHkuCi0JICBGaXhlcyAjNjA3NjE1Ci0KLTIwMTAtMDMtMDUgMTU6NDY6NDggKzAxMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHJ0cHNlc3Npb246IE1vdmUgU1NSQyBjb25mbGljdHMgbGlzdHMgaW50byBSVFBTb3VyY2UKLQkgIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHRyYWNrIFNTUkMgY29uZmxpY3RzIGluIHJlbW90ZSBzb3VyY2VzLgotCSAgU2VlICM2MDc2MTUKLQotMjAxMC0wMi0yNiAxNzoxMzo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2VuZCBrZWVwIGFsaXZlIHdoZW4gcGF1c2VkCi0JICBXaGVuIHdlIGFyZSBwYXVzZWQsIHNlbmQga2VlcCBhbGl2ZSBtZXNzYWdlcyB0byB0aGUgc2VydmVyIHNvIHRoYXQgb3VyIHNlc3Npb24KLQkgIGRvZXNuJ3QgdGltZSBvdXQgd2hlbiB3ZSBnbyBiYWNrIHRvIHBsYXlpbmcgbGF0ZXIuCi0KLTIwMTAtMDMtMTAgMDE6MTA6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gN2FhNjViNSB0byA3Y2M1ZWI0Ci0KLTIwMTAtMDItMjMgMTk6NDg6MTAgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5oOgotCSAgbXVsdGlmaWxlc2luazogQWRkIGtleS1mcmFtZSBvcHRpb24gdG8gbmV4dC1maWxlCi0JICBUaGlzIGFsbG93cyBzZWdtZW50aW5nIG9mIE1QRUctVFMgZmlsZXMgYXQga2V5IGZyYW1lcywgd2hpY2ggaXMKLQkgIGV4YWN0bHkgd2hhdCBpcyBuZWVkZWQgZm9yIEFwcGxlJ3MgSFRUUCBzdHJlYW1pbmcuCi0KLTIwMTAtMDMtMDkgMjE6MzI6NDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNDRlY2NlNyB0byA3YWE2NWI1Ci0KLTIwMTAtMDMtMDggMjA6MTc6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHZpZGVvYm94OiBGaXggYXV0b2Nyb3BwaW5nIGZvciBvZGQgd2lkdGgvaGVpZ2h0IGRpZmZlcmVuY2VzCi0KLTIwMTAtMDMtMDggMjA6MDI6MTkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9ib3gvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oOgotCSAgdmlkZW9ib3g6IFVzZSBsaWJnc3R2aWRlbyBmb3IgZm9ybWF0IHNwZWNpZmljIHN0dWZmCi0KLTIwMTAtMDMtMDggMTk6Mjg6NDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2thcmFva2UuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYzoKLQkgIGF1ZGlvZng6IFN5bmMgcHJvcGVydGllcyB0byB0aGUgc3RyZWFtIHRpbWUKLQotMjAxMC0wMy0wOCAxOToyMDo1OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IE1ha2UgcHJvcGVydGllcyBjb250cm9sbGFibGUKLQotMjAxMC0wMy0wOCAxOTowOTowMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IFNvbWUgY2xlYW51cAotCi0yMDEwLTAyLTI4IDE1OjQ3OjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgZWZmZWN0djogVXNlIGNvbnRyb2xsZXIgd2hlcmUgcG9zc2libGUsIG9wdGltaXplIGEgYml0IGFuZCBtYWtlIHByb3BlcnRpZXMgdGhyZWFkc2FmZQotCi0yMDEwLTAyLTI2IDE2OjM1OjE3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IE1ha2Ugc29tZSBtb3JlIHJ1bGVzIHNpbGVudCBpZiByZXF1ZXN0ZWQKLQotMjAxMC0wMi0yNiAxNTo0MTo1MiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogVXNlIGF1dG9tYWtlIDEuMTEgc2lsZW50IHJ1bGVzIGluc3RlYWQgb2Ygc2hhdmUgaWYgYXZhaWxhYmxlCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSB1c2Ugc29tZXRoaW5nIHRoYXQgaXMgc3RpbGwgbWFpbnRhaW5lZCBhbmQKLQkgIGFsc28gYnJpbmdzIGJhY2sgbGlidG9vbCAxLjUgc3VwcG9ydC4KLQotMjAxMC0wMy0wOCAyMjo1NzozNCArMDEwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUByZWRoYXQuY29tPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgcG5nOiBmcmFjdGlvbnMgZG9uJ3QgYWxsb3cgZG91YmxlcwotCi0yMDEwLTAzLTAxIDEyOjAzOjU2ICswMTAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQHJlZGhhdC5jb20+Ci0KLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JICBmbHg6IGZpeCBkZXNjcmlwdGlvbgotCSAgSXQncyB2aWRlbywgbm90IGF1ZGlvCi0KLTIwMTAtMDMtMDkgMTc6NDU6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNoYXBld2lwZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQKLQotPT09IHJlbGVhc2UgMC4xMC4yMSA9PT0KLQotMjAxMC0wMy0wOSAwMDoyODoxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nYW1tYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYmFsYW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMjEKLQotMjAxMC0wMy0wOSAwMDoyNDo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMC0wMy0wOSAwMDowOTozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSAgUmV2ZXJ0ICJBZGQgNDoyOjIsIDQ6MToxLCBhbmQgNDo0OjQgb3V0cHV0IHN1cHBvcnQiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDYzN2MyNmY2MWEyYmQ4ZDdiMDFmOGI2ZDA4MWQ5NGRhNjVmNzQ1NTcuCi0KLT09PSByZWxlYXNlIDAuMTAuMjAgPT09Ci0KLTIwMTAtMDMtMDggMjM6NDI6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjIwCi0KLTIwMTAtMDMtMDggMjM6NDI6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTAtMDMtMDggMTY6NDc6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBkb24ndCBzZW5kIHNlY29uZCBuZXdzZWdtZW50IGV2ZW50IGluIGZyYW1lZCBtb2RlLCBmaXhlcyBsb25nIHBsYXliYWNrIGRlbGF5Ci0JICBEb24ndCBzZW5kIGFub3RoZXIgbmV3c2VnbWVudCBldmVudCBpZiB0aGUgdXBzdHJlYW0gbXV4ZXIvcGFyc2VyIGhhcyBhbHJlYWR5Ci0JICBzZW50IG9uZSAob3RoZXJ3aXNlIHRoZSBzaW5rIHdpbGwgd2FpdCBmb3IgJGR1cmF0aW9uIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjaykuCi0JICBGaXhlcyBsb25nIGRlbGF5IHVudGlsIHBsYXliYWNrIHN0YXJ0cyB3aXRoIGZsYWMtaW4tb2dnIGZpbGVzLgotCSAgRml4ZXMgIzYxMDk1OS4KLQotMjAxMC0wMy0wNSAxMzo0OTozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogY29uZmlndXJlIG11bHRpY2FzdCBjb3JyZWN0bHkKLQkgIFRha2UgdGhlIHRyYW5zcG9ydCBkZXN0aW5hdGlvbiBmb3IgbXVsdGljYXN0LgotCSAgRGlzYWJsZSBsb29wIGFuZCBhdXRvam9pbiBmb3IgbXVsdGljYXN0IG9uIHRoZSB1ZHBzaW5rcy4KLQotMjAxMC0wMy0wNSAxMzo0NzozMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpY2FzdDogYWx3YXlzIGNvbmZpZ3VyZSBsb29wIGFuZCB0dGwKLQkgIEFsc28gY29uZmlndXJlIFRUTCBhbmQgbG9vcCBwYXJhbWV0ZXJzIHdoZW4gd2UgYWRkIGEgY2xpZW50IGFmdGVyIGluaXRpYWxpemluZwotCSAgdGhlIHNlbmRlci4KLQotMjAxMC0wMy0wOCAxMjoxMzozMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkgIFJldmVydCAicnRwaDI2M2RlcGF5OiBiYXNlY2xhc3MgaGFuZGxlcyB0aW1lc3RhbXBzIGZvciB1cyIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNTY0NTgxZTFiODhlY2Q1ZWM1ZGE4MmMzY2FmYjBlN2EyZDU4YjMwMi4KLQkgIElmIHdlIGRvbid0IGNhbGwgcHVzaF90cywgdGhlcmUgd2lsbCBiZSBubyB0aW1lc3RhbXAgYXQgYWxsIG9uIHRoZSBvdXRnb2luZwotCSAgYnVmZmVyLgotCSAgRml4ZXMgIzYxMjE1NAotCi0yMDEwLTAyLTIzIDIyOjE2OjM5IC0wNTAwICBCZW5qYW1pbiBNLiBTY2h3YXJ0eiA8YmVuc0BhbHVtLm1pdC5lZHU+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSAgQWRkIDQ6MjoyLCA0OjE6MSwgYW5kIDQ6NDo0IG91dHB1dCBzdXBwb3J0Ci0KLTIwMTAtMDMtMDIgMTM6MjE6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiB1c2UgcGF5bG9hZCBzaXplIHRvIGVzdGltYXRlIGJpdHJhdGUKLQkgIFVzZSB0aGUgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkIGZvciBlc3RpbWF0aW5nIHRoZSByZWNlaXZlciBiaXRyYXRlIHNvIHRoYXQgaXQKLQkgIG1hdGNoZXMgdGhlIGNhbGN1bGF0aW9ucyBkb25lIG9uIHRoZSBzZW5kZXIgc2lkZS4gVG9nZXRoZXIgd2l0aCB0aGUgbnVtYmVyIG9mCi0JICBwYWNrZXRzIG9uZSBjYW4gc2NhbGUgdGhlIGJpdHJhdGUgd2l0aCB0aGUgaGVhZGVyIG92ZXJoZWFkIG9mIHRoZSBsb3dlcgotCSAgdHJhbnNwb3J0LgotCi0yMDEwLTAzLTAyIDEyOjM5OjIwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgcnRwc291cmNlOiByZWZhY3RvciBiaXRyYXRlIGVzdGltYXRpb24KLQkgIERvbid0IHJldXNlIHRoZSBzYW1lIHZhcmlhYmxlIHdlIG5lZWQgZm9yIHN0YXRzIGZvciB0aGUgYml0cmF0ZSBlc3RpbWF0aW9uCi0JICBiZWNhdXNlIHdlJ3JlIHVwZGF0aW5nIGl0LgotCSAgUmVmYWN0b3IgdGhlIGJpdHJhdGUgZXN0aW1hdGlvbiBjb2RlIHNvIHRoYXQgYm90aCBzZW5kZXIgYW5kIHJlY2VpdmVycyB1c2UgdGhlCi0JICBzYW1lIGNvZGUgcGF0aC4KLQotMjAxMC0wMy0wMSAxNjo0MDoyNyAtMDUwMCAgVHJpc3RhbiBNYXR0aGV3cyA8dHJpc3RhbkBzYXQucWMuY2E+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgYWRkZWQgYml0cmF0ZSBlc3RpbWF0aW9uIHRvIHJlY2VpdmVyLXNpZGUgc3RhdHMsIGZpeGVzICM2MTEyMTMKLQotMjAxMC0wMy0wMSAxNjowMToyNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICBoMjYzcGF5OiBmaXggdHlwbyBpbiBkZWJ1ZwotCi09PT0gcmVsZWFzZSAwLjEwLjE5ID09PQotCi0yMDEwLTAzLTA2IDAwOjQzOjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFsczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjE5Ci0KLTIwMTAtMDMtMDYgMDA6NDI6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMTAtMDMtMDMgMjA6Mjk6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICAwLjE4LjQgcHJlLXJlbGVhc2UKLQotMjAxMC0wMy0wMiAxODoyOTo0MSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2VuZCBpbnZhbGlkIG5ld3NlZ21lbnRzCi0JICBGaXhlcyAjNjExNTAxCi0KLTIwMTAtMDMtMDIgMTQ6MDk6MTQgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgbWF0cm9za2FkZW11eDogTWFyayBzdHJlYW1zIGFzIGJlaW5nIEVPUyBhdCB0aGUgcmlnaHQgdGltZS4KLQkgIFRoaXMgYWxsb3dzIHVzIHRvIHN0b3Agc3RyZWFtaW5nIG9ubHkgd2hlbiBhbGwgc3RyZWFtcyBoYXZlIGdvbmUgcGFzdCB0aGUKLQkgIHNlZ21lbnQuc3RvcCBhbmQgbm90IGJlZm9yZS4KLQkgIEZpeGVzICM2MTE1MDEKLQotMjAxMC0wMi0yNiAxODoxMDozMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQWR2YW5jZSBzcGFyc2Ugc3RyZWFtcyBvbmx5IGFzIG11Y2ggYXMgcmVxdWlyZWQgdG8ga2VlcCB0aGUgZ2FwIHNtYWxsZXIgdGhhbiA1MDBtcwotCSAgQ2hhbmdpbmcgaXQgdG8gdGhlIG5ld2VzdCB0aW1lc3RhbXAgdGhhdCB3YXMgZXZlciBwdXNoZWQgd2lsbAotCSAgaW5jcmVhc2UgdGhlIHNlZ21lbnQgc3RhcnQgaW4gNTAwbXMganVtcHMsIHdoaWNoIGNvdWxkIGJlIGp1c3QKLQkgIGFmdGVyIHRoZSBuZXh0IHNwYXJzZSBzdHJlYW0gYnVmZmVyLiBFLmcuCi0JICBWaWRlbyBhdCAxLjBzLCBzcGFyc2Ugc3RyZWFtIGF0IDAuNXMgd291bGQganVtcCB0aGUKLQkgIHNwYXJzZSBzdHJlYW0gdG8gMS4wcy4gTm93IGEgbmV3IHNwYXJzZSBzdHJlYW0gYnVmZmVyIGNvdWxkCi0JICBhcHBlYXIgdGhhdCBoYXMgYSB0aW1lc3RhbXAgb2YgMC45cyBhbmQgdGhpcyB3b3VsZCBiZQotCSAgZHJvcHBlZCBmb3Igbm8gZ29vZCByZWFzb24gYmVjYXVzZSBvZiBiYWQgbHVjay4KLQotMjAxMC0wMi0yNCAwMTozNjowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL2VzLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4xOC4zIHByZS1yZWxlYXNlCi0KLTIwMTAtMDItMjQgMDI6MDU6NDkgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRlY2luYUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIE1ha2Ugc3VyZSBGTFVTSF9TVE9QIGlzIHNlbnQgc28gbm90IHRvIGxlYXZlIGRvd25zdHJlYW0gZmx1c2hpbmcuCi0KLTIwMTAtMDItMjMgMTc6MjU6NTQgKzAxMDAgIFZvbGtlciBHcmFic2NoIDxidWd6aWxsYS5nbm9tZS5vcmdAdi5ub3RqdXN0aG9zdGluZy5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogVXNlICRQS0dfQ09ORklHIGluc3RlYWQgb2YgcGtnLWNvbmZpZyB0byBmaXggY3Jvc3MgY29tcGlsYXRpb24KLQkgIEZpeGVzIGJ1ZyAjNjEwODM5LgotCi0yMDEwLTAyLTIzIDE3OjI0OjAzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IFJlc2V0IHNrZXcgZGV0ZWN0aW9uIGFmdGVyIGluc3RhbnRpYXRpbmcgdGhlIGppdHRlcmJ1ZmZlcgotCSAgLi4ubm90IG9ubHkgd2hlbiBnb2luZyB0byBSRUFEWS4gVGhpcyBzZXRzIGhpZ2hfbGV2ZWwgYW5kIGZyaWVuZHMgdG8KLQkgIGEgbW9yZSB1c2VmdWwgdmFsdWUuCi0KLTIwMTAtMDItMjMgMTc6MTk6MTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIHJ0cGppdHRlcmJ1ZmZlcjogUmV0dXJuIDEwMCBpZiBoaWdoLWxldmVsIGlzIDAgaW5zdGVhZCBvZiBkaXZpZGluZyBieSB6ZXJvCi0KLTIwMTAtMDItMjIgMTI6MjQ6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JICBydHBtcDRnZGVwYXk6IGF2b2lkIGRpdmlzaW9uIGJ5IDAKLQkgIEF2b2lkIGEgZGl2aXNpb24gYnkgMCB3aGVuIG5vIGNvbnN0YW50RHVyYXRpb24gd2FzIHNwZWNpZmllZCBhbmQgd2hlbiBvdXQgdHdvCi0JICB0aW1lc3RhbXBzIGFyZSBlcXVhbC4KLQkgIEZpeGVzICM2MTAyNjUKLQotMjAxMC0wMi0yMiAxODoyMDo0NiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaDoKLQkgIGR2ZGVwYXk6IGRvbid0IG91dHB1dCBmcmFtZXMgdW50aWwgd2UgaGF2ZSBhIGhlYWRlcgotCSAgV2FpdCBmb3IgdGhlIGNvbXBsZXRlIGZpcnN0IDYgaGVhZGVyIERJRiBwYWNrZXRzIGJlZm9yZSBvdXRwdXR0aW5nIGEgZnJhbWUuCi0JICBEZWNvZGVycyBuZWVkIHRoaXMgaW5mbyB0byBjb3JyZWN0bHkgZGVjb2RlIHRoZSBkYXRhLgotCSAgRml4ZXMgIzYxMDU1NgotCi0yMDEwLTAyLTIyIDIwOjU1OjI5ICswMTAwICBEYXZpZCBIb3l0IDxkaG95dEBsbG5sLmdvdj4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogRml4IGludmFsaWQgbWVtb3J5IGFjY2VzcyBieSBmaXJzdCBjaGVja2luZyBhbmQgdGhlbiByZWFkaW5nCi0JICBGaXhlcyBidWcgIzYxMDQ4My4KLQotMjAxMC0wMi0xOCAwOTowNTo1MCArMDEwMCAgUGhpbGlwcGUgTm9ybWFuZCA8cGhpbEBiYXNlLWFydC5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZ3N0X3B1bHNlc2lua19nZXRfbXV0ZTogc2V0IHJlc3VsdCBlYXJsaWVyLgotCSAgSW4gdGhlIGNhc2VzIHdoZXJlIG5vIGJ1ZmZlciB3YXMgcHJvY2VzcyB5ZXQgb3IgdGhlIGluZGV4IGlzIG5vdAotCSAgYXZhaWxhYmxlLCBnZXRfcHVsc2VzaW5rX2dldF9tdXRlKCkgd291bGQgdW5jb25kaXRpb25hbGx5IHJldHVybgotCSAgRkFMU0UuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwMzM3Ci0KLTIwMTAtMDItMTkgMTI6MzU6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwa2djb25maWcvZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbjoKLQkgIHBrZ2NvbmZpZzogZml4IGdzdHJlYW1lci1wbHVnaW5zLWdvb2QgdW5pbnN0YWxsZWQgLnBjIGZpbGUKLQkgIEZpeCBnc3QtcGx1Z2lucy1iYXNlIHJlZmVyZW5jZS9yZXF1aXJlbWVudC4gVGhpcyBjYXVzZWQgc3B1cmlvdXMKLQkgIHByb2JsZW1zIHdpdGggdW5pbnN0YWxsZWQgLXVnbHkvLWJhZCBub3QgZmluZGluZyAtZ29vZCBwbHVnaW5zIGluCi0JICB0aGVpciB1bml0IHRlc3RzICh3aGVuIGRpc3RjaGVja2luZykuCi0KLTIwMTAtMDItMTkgMDE6MDM6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9sdi5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTguMiBwcmUtcmVsZWFzZQotCi0yMDEwLTAyLTE5IDAwOjU0OjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS8uZ2l0aWdub3JlOgotCSAgTWFrZSBnaXQgaWdub3JlIHNoYXBld2lwZSBleGFtcGxlcyBhbmQgdGVzdHMKLQotMjAxMC0wMi0xOSAwMDo0Njo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgIGZsdmRlbXV4OiBtaW5vciBtaWNyby1vcHRpbWlzYXRpb24KLQkgIFdlIGtub3cgdGhlc2UgdmFsdWVzIGRvbid0IGNoYW5nZSBkdXJpbmcgdGhlIGxvb3AsIGJ1dCB0aGUgY29tcGlsZXIKLQkgIGRvZXNuJ3QgYW5kIGhhcyB0byByZS1jaGVjayB0aGVtIGZvciBldmVyeSBpdGVyYXRpb24uCi0KLTIwMTAtMDItMTkgMDA6Mzk6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JICBmbHZkZW11eDogcmVtb3ZlIHN0YXRpYyBrZXl3b3JkIGZyb20gdmFyaWFibGVzIHRoYXQgc2hvdWxkbid0IGJlIHN0YXRpYwotCSAgTXVsdGlwbGUgZmx2cGFyc2UvZmx2ZGVtdXggaW5zdGFuY2VzIHNob3VsZCBiZSBhYmxlIHRvIG9wZXJhdGUgd2l0aG91dAotCSAgdHJhbXBsaW5nIG92ZXIgZWFjaCBvdGhlciBieSBhY2NpZGVudGFsbHkgcmUtdXNpbmcgdGhlIHNhbWUgKHN0YXRpYykKLQkgIHZhcmlhYmxlcy4gKFNwb3R0ZWQgYnkgTWFyayBOYXV3ZWxhZXJ0cykKLQotMjAxMC0wMi0xNiAwMjowNzowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgZG9jczogYWRkIFNpbmNlOiBtYXJrZXJzIGZvciBuZXcgaml0dGVyYnVmZmVyIHByb3BlcnRpZXMKLQotMjAxMC0wMi0xOCAxODoyMDoyNCArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggb2ZmLWJ5LW9uZSBsb2dpYyBlcnJvciBpbiBmcmFtZSByYXRlIGNhcCByZWdyZXNzaW9uIGNvbW1pdAotCi0yMDEwLTAyLTE3IDE2OjI3OjMzIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogVXNlIHRoZSBjb3JyZWN0IGR1cmF0aW9uIHdoZW4gY29tcGFyaW5nIHNlZ21lbnRzCi0JICBEbyBub3QgY29uZnVzZSBRdERlbXV4U2VnbWVudHMgd2l0aCBHc3RTZWdtZW50cyB3aGVuCi0JICBjb21wYXJpbmcgdGhlIHRvdGFsIGZpbGUgZHVyYXRpb24gd2l0aCB0aGUgc2VnbWVudCBkdXJhdGlvbgotCSAgRml4ZXMgIzYxMDI5NgotCi0yMDEwLTAyLTE3IDE4OjA2OjI5ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBkdXJhdGlvbnMgbW9kdWxvIDE8PDMyCi0JICBGb3IgY2FsY3VsYXRpbmcgdGhlIGR1cmF0aW9ucyBvZiBlYWNoIHNhbXBsZSwgd2UgYXJlIHN1cHBvc2VkIHRvIGFkZCBlYWNoCi0JICBkdXJhdGlvbiBtb2R1bG8gMTw8MzIgc28gbWFrZSB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgYSB1aW50MzIuCi0JICBGaXhlcyAjNjEwMjgwCi0KLTIwMTAtMDItMTYgMjE6MDU6MjQgKzAxMDAgIEFuZGVycyBTa2FyZ3JlbiA8YW5kZXJzLnNrYXJncmVuIGF0IGF4aXMuY29tPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICBtdWx0aXBhcnRkZW11eDogaW1wcm92ZSBoZWFkZXIgbWltZS10eXBlIHBhcnNpbmcKLQkgIE1ha2UgdGhlIGhhbmRpbmcgb2YgdGhlIG1pbWUgdHlwZSB3aXRoaW4gdGhlICJib3VuZGFyeSIgYSBiaXQgbGVzcyBuYWl2ZS4KLQkgIFRoZSBzdGFuZGFyZCBmb3IgTUlNRSBhbGxvd3MgcGFyYW1ldGVycyB0byBmb2xsb3cgdGhlICJ0eXBlIiAvICJzdWJ0eXBlIgotCSAgY2xhdXNlIHNlcGFyYXRlZCBmcm9tIHRoZSBtaW1lIHR5cGUgYnkgJzsnLgotCSAgTW9kaWZpZXMgdGhlIG11bHRpcGFydGRlbXV4ZXIncyBoZWFkZXIgcGFyc2luZyBzbyBpdCBkb2VzbnQgYXNzdW1lCi0JICB0aGUgd2hvbGUgbGluZSBhZnRlciAiY29udGVudC10eXBlOiIgaXMgdGhlIG1pbWUgdHlwZSBhbmQgdGh1cyBtYWtlcyBpdCBhIGJpdAotCSAgbW9yZSByZXNpbGllbnQgdG8gZmluZGluZyBhYnN1cmQgbWltZSB0eXBlcyBpbiB0aGUgY2FzZSB3aGVyZSBwYXJhbWV0ZXJzIGFyZQotCSAgYWRkZWQuCi0JICBGaXhlcyAjNjA0NzExCi0KLTIwMTAtMDItMTYgMTk6NTM6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGF2b2lkIHN0b3BwaW5nIE5VTEwgdGFza3MKLQkgIENoZWNrIHRoZSB0YXNrIGZvciBOVUxMLCBpdCBjb3VsZCBiZSBwYXVzZWQgYW5kIHNldCB0byBOVUxMIGJlZm9yZS4KLQotMjAxMC0wMi0xNiAxNjoyMjoyOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBBTEFDIGNvZGVjLWRhdGEgaGFuZGxpbmcKLQkgIEFMQUMgY29kZWMtZGF0YSBhcHBhcmVudGx5IGNvbWVzIGluIChhdCBsZWFzdCkgdHdvIGZsYXZvdXJzIChtb3YsIG1wNCksCi0JICBzbyB1c2UgYXRvbSBiYXNlZCBwYXJzaW5nIHRvIHJldHJpZXZlIHJlcXVpcmVkIGRhdGEsIHJhdGhlciB0aGFuCi0JICBhaW1pbmcgZm9yIGEgc3BlY2lmaWMgb2Zmc2V0LgotCSAgU2VlIGFsc28gIzU4MDczMS4KLQotMjAxMC0wMi0xNiAxNTo1MDoyMyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBkZWJ1ZyBtZXNzYWdlCi0KLTIwMTAtMDItMTEgMTk6Mzk6MDQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X3R5cGVzLmg6Ci0JICBxdGRlbXV4OiBoYW5kbGUgc2lnbmVkIHZhbHVlcyBpbiAzR1BQIGxvY2F0aW9uIHRhZwotCi0yMDEwLTAyLTA4IDIxOjM1OjUzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZml4IHR5cG8gaW4gZGVidWcgbWVzc2FnZQotCi0yMDEwLTAyLTE2IDE1OjAwOjEzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHJlc2V0IHNvbWUgbW9yZSBzdHJlYW0gc3RhdGUgYWZ0ZXIgc2VlawotCSAgSW4gcGFydGljdWxhciwgZml4ZXMgbm9uLWZsdXNoaW5nIHNlZWsuCi0KLTIwMTAtMDItMTYgMTQ6NDQ6MTEgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IGZyYW1lIHJhdGUgY2FwIHJlZ3Jlc3Npb24KLQkgIExvb2sgZm9yIGEgbm9uLXplcm8gbWluX2R1cmF0aW9uIGR1cmluZyBpbml0aWFsaXNhdGlvbiB0byBhdm9pZAotCSAgaW5jb3JyZWN0IGZyYW1lIHJhdGUgY2Fwcy4KLQotMjAxMC0wMi0xNiAxMDoxMzoxNyArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSAgdjRsMjogbG9nIG1vcmUgZGV0YWlscyBpbiBidWZmZXIgcG9vbCBmaW5hbGl6ZQotCSAgSGVscHMgdG8gYWxpZ24gd2l0aCB0aGUgbG9nZ2luIGZyb20gbGlidjRsLgotCi0yMDEwLTAyLTE2IDEwOjExOjQwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDI6IGluaXQgZGF0YXN0cnVjdHVyZXMgYWZ0ZXIgcHJlLWNvbmRpdGlvbnMgY2hlY2tzCi0KLTIwMTAtMDItMTYgMTA6MTA6NDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogYWRkIGEgZml4bWUgZm9yIGhhbmRsaW5nIG90aGVyIFlVViB2YXJpYW50cwotCi0yMDEwLTAyLTE2IDAxOjQwOjE5ICswMDAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IGZpeCBHU1RfRUxFTUVOVF9FUlJPUiB1c2FnZQotCSAgRml4ZXMgIzYxMDA1My4KLQotMjAxMC0wMi0xNiAwMDo1MDoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogZml4IHVwIEdTVF9DWFhGTEFHUyBwcm9wZXJseQotCSAgV2UgZG9uJ3Qgd2FudCBDIHNwZWNpZmljIGZsYWdzIGluIEdTVF9DWFhGTEFHUywgc28gYmFzZSBpdCBvbiB0aGUKLQkgIEdTVF9DRkxBR1MgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBwa2ctY29uZmlnIENGTEFHUyBidXQgbm9uZSBvZgotCSAgdGhlIEdTVF9PUFRJT05fQ0ZMQUdTLiBBbHNvLCB3ZSBvbmx5IG5lZWQgdGhlIGxvY2FsIGluY2x1ZGVzIG9uY2UuCi0JICBGaXggdHlwbyBhcyB3ZWxsIChHU1RfRkxBR1MgLT4gR1NUX0NGTEFHUykuCi0KLTIwMTAtMDItMTUgMjM6MTM6NDYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBiYXNlIEdTVF9DWFhGTEFHUyBvbiAtLWNmbGFncyBmcm9tIHBrZy1jb25maWcKLQkgIHBrZy1jb25maWcgc2V0cyBHU1RfQ0ZMQUdTIGFuZCBHU1RfTElCUy4gV2UgbmVlZCB0byB1c2UgQ0ZMQUdTIGFzIGEgc3RhcnRpbmcKLQkgIHBvaW50IGZvciBmb3IgYm90aCBDIGFuZCBDWFggc2V0dGluZ3MuCi0KLTIwMTAtMDEtMjAgMTg6NTI6NTEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwYmluOiByZW1vdmUgdXNlIG9mIG50cF9uc19iYXNlCi0KLTIwMTAtMDEtMjAgMTg6MjI6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBydHBiaW46IHJlbW92ZSBtb3JlIG50cG5zdGltZSBhbmQgY2xlYW51cHMKLQkgIFJlbW92ZSBzb21lIGNvZGUgd2hlcmUgd2UgcGFzcyBudHBuc3RpbWUgYXJvdW5kLCB3ZSBjYW4gZG8gbW9zdCB0aGluZ3Mgd2l0aCB0aGUKLQkgIHJ1bm5pbmdfdGltZSBqdXN0IGZpbmUuCi0JICBSZW5hbWUgYSB2YXJpYWJsZSBpbiB0aGUgQXJyaXZhbFN0YXRzIHN0cnVjdCBzbyB0aGF0IGl0J3MgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZQotCSAgY3VycmVudCBzeXN0ZW0gdGltZS4KLQotMjAxMC0wMS0yMCAxODoxOTozNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IHVzZSBydW5uaW5nX3RpbWUgZm9yIGppdHRlcgotCSAgVXNlIHRoZSBydW5uaW5nX3RpbWUgdG8gY2FsY3VsYXRlIHRoZSBqaXR0ZXIgaW5zdGVhZCBvZiB0aGUgbnRwIHRpbWUuIFBhcnQgb2YKLQkgIHRoZSBwbGFuIHRvIGdldCByaWQgb2YgbnRwbnNiYXNlLgotCi0yMDEwLTAxLTIwIDE3OjA0OjAzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgcnRwYmluOiBjaGFuZ2UgaG93IE5UUCB0aW1lIGlzIGNhbGN1bGF0ZWQgaW4gUlRDUAotCSAgRG9uJ3QgY2FsY3VsYXRlIHRoZSBOVFAgdGltZSBiYXNlZCBvbiB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBwaXBlbGluZSBidXQgZnJvbQotCSAgdGhlIHN5c3RlbWNsb2NrLiBUaGlzIGFsbG93cyB1cyB0byBnZW5lcmF0ZSBtb3JlIGFjY3VyYXRlIE5UUCB0aW1lc3RhbXBzIGluIGNhc2UKLQkgIHRoZSBzeXN0ZW1jbG9jayBpcyBzeW5jaHJvbml6ZWQgd2l0aCBOVFAgb3Igc2ltaWxhci4KLQotMjAxMC0wMi0xNSAxMjoxMjozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDI6IHByaW50ZiBmb3JtYXQgc3RyaW5nIGZpeAotCSAgVGhlIGNvbXBpbGVyIHdhbnRzIGEgY2FzdCBoZXJlIGV2ZW4gdGhvdWdoIHRoZSB0eXBlIGlzIGFscmVhZHkKLQkgIHR5cGVkZWZlZCBhcyA2NC1iaXQgaW50ZWdlciAocHJlc3VtYWJseSBiZWNhdXNlIGdsaWIgaGFzIHR5cGVkZWZlZAotCSAgZ3VpbnQ2NCB0byB1bnNpZ25lZCBsb25nIGhlcmUpLgotCi0yMDEwLTAyLTE1IDEwOjMzOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYTogZml4IHByaW50ZiBmb3JtYXQgc3RyaW5nCi0KLTIwMTAtMDItMTUgMDA6NTA6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcmF3MTM5NC9nc3QxMzk0Y2xvY2suaDoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJhdzEzOTQsIG1hdHJvc2thLCBydHBtYW5hZ2VyOiByZW1vdmUgcGFkZGluZyBmcm9tIHN0cnVjdHVyZXMKLQkgIE5vbmUgb2YgdGhlc2UgZWxlbWVudCBhbmQgY2xhc3Mgc3RydWN0dXJlcyBhcmUgaW4gcHVibGljIGhlYWRlcnMsCi0JICBzbyBkb24ndCBuZWVkIHBhZGRpbmcuCi0KLTIwMTAtMDItMTUgMDA6NDc6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VsLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBwbzogdXBkYXRlIGZvciBuZXcgdHJhbnNsYXRvciBjb21tZW50Ci0KLTIwMTAtMDItMTUgMDA6NDU6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGFkZCBjb21tZW50IGZvciB0cmFuc2xhdG9ycyBmb3IgJ3ggYnkgeScgbWVzc2FnZQotCSAgRml4ZXMgIzYwOTcyNC4KLQotMjAxMC0wMi0xNSAwMToyODo0NCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5jOgotCSAgY2Fpcm9yZW5kZXI6IEZpeCBsZWFraW5nIG9mIHBhZCB0ZW1wbGF0ZXMKLQotMjAxMC0wMi0xNSAwMDo1MDoyNyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NoYXBld2lwZS5jOgotCSAgc2hhcGV3aXBlOiBGaXggdW5pdCB0ZXN0IGZvciBsYXRlc3QgY2hhbmdlcwotCSAgTm93IHRoZSBhbHBoYSBpcyBtdWx0aXBsaWVkIHdpdGggdGhlIGFscmVhZHkgZXhpc3RpbmcgYWxwaGEKLQkgIHZhbHVlIGluc3RlYWQgb2Ygc2ltcGx5IGlnbm9yaW5nIGl0IGFuZCB0aGUgbHVtYS9jaHJvbWEgdmFsdWVzCi0JICBhcmUga2VwdCwgZXZlbiBpZiB0aGUgb3V0cHV0IGlzIDEwMCUgdHJhbnNwYXJlbnQuCi0KLTIwMTAtMDItMTUgMDA6NDc6MDggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zaGFwZXdpcGUuYzoKLQkgIHNoYXBld2lwZTogSW1wcm92ZSB1bml0IHRlc3Qgb3V0cHV0IG9uIGVycm9ycwotCi0yMDEwLTAyLTE0IDIzOjE3OjIwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDk2ZGM3OTMgdG8gNDRlY2NlNwotCi0yMDEwLTAyLTEzIDIzOjI4OjA2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBidW1wIC1iYXNlIHJlcXVpcmVtZW50IHRvIGdpdAotCSAgRm9yIEdTVF9SSUZGX1RBR19KVU5RLgotCi0yMDEwLTAyLTEyIDE2OjExOjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgdjRsMnNpbms6IGNoYW5nZSByYW5rIHRvIE5PTkUgc28gaXQgaXMgbmV2ZXIgYXV0b3BsdWdnZWQKLQotMjAxMC0wMi0xMyAxODoxODo0MiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IEF1ZGlvIHRhZ3Mgd2l0aG91dCBhbnkgY29udGVudCBhcmUgdmFsaWQuCi0JICBXZSBzaWxlbnRseSBpZ25vcmUgdGhlbSBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dC4KLQotMjAxMC0wMi0xMyAxODowNzo1MCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IEZpeCBHU1RfQ0xPQ0tfRElGRiB1c2FnZS4KLQkgIEl0IHdhcyBwcmV2aW91c2x5IGNoZWNraW5nIGZvciBESUZGKGEsIGIgPiA2ICogR1NUX1NFQ09ORCkgaW5zdGVhZCBvZgotCSAgdGhlIHByb3BlciBESUZGKGEsYikgPiA2ICogR1NUX1NFQ09ORAotCi0yMDEwLTAyLTEzIDE2OjI3OjA3ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBmbHZkZW11eDogRG9uJ3QgZm9yZ2V0IHRvIHJlc2V0IHRoZSBpbmRleGVkIHZhcmlhYmxlIHdoZW4gY2xlYW5pbmcgdXAKLQotMjAxMC0wMi0xMyAxMTowMTo1MyArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IFNwZWVkdXAgR3N0SW5kZXggdXNhZ2UKLQkgIFVzZWQgdGhlIF9hZGRfYXNzb2NpYXRpb252IHZhcmlhbnQgb2YgR3N0SW5kZXggc2luY2Ugd2Uga25vdyBob3cgbWFueQotCSAgYXNzb2NpYXRpb25zIHdlJ3JlIGFkZGluZy4gVHJpbXMgdXAgdG8gNTAlIGZyb20gaW5kZXggZ2VuZXJhdGlvbiB0aW1lLgotCSAgTm90ZSA6IEl0IHdvdWxkIGJlIGdyZWF0IGlmIHRoZSBpbmRleCBjb3VsZCBiZSBnZW5lcmF0ZWQgb24gdGhlIGZseSBvcgotCSAgb24gcmVxdWVzdCBhcyBvcHBvc2VkIHRvIGJlaW5nIGZ1bGx5IGNyZWF0ZWQgYXQgc3RhcnR1cC4KLQotMjAxMC0wMi0xMiAxOTozMjoyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGRvbid0IHJlc3luYyB0byBpbnZhbGlkIHRpbWVzdGFtcHMKLQkgIElmIHdlIGRldGVjdCBiYWNrd2FyZCB0aW1lc3RhbXBzIG9uIHRoZSBzZXJ2ZXIsIGRvbid0IHRyeSB0byByZXN5bmMgd2hlbiB3ZQotCSAgZG9uJ3QgaGF2ZSBhbiBpbnB1dCB0aW1lc3RhbXAgKHN1Y2ggYXMgd2hlbiB1c2luZyBSVFNQIG92ZXIgVENQKSBpbnN0ZWFkLCBkbwotCSAgbm90aGluZyBidXQgYXNzdW1lIHRoZSB0aW1lc3RhbXAgd2FzIG9rLCBpdCB3aWxsIGNvcnJlY3QgaXRzZWxmIHdoZW4gdGltZSBnb2VzCi0JICBmb3J3YXJkcy4KLQotMjAxMC0wMi0xMiAxNzoyMTo0MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGZpeCB0eXBvCi0KLTIwMTAtMDItMTIgMTY6NDc6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBzdGFydCBvdXQgYWN0aXZlIGFuZCBub3QgYnVmZmVyaW5nCi0JICBUaGVyZSBpcyBubyBuZWVkIHRvIHNldCB0aGUgbGF0ZW5jeSBpbiB0aGUgaml0dGVidWZmZXIgaW4gX2luaXQsIHdlIHdpbGwgc2V0Ci0JICB0aGF0IGxhdGVyIHdoZW4gZ29pbmcgdG8gUEFVU0VELgotCSAgU2V0IHRoZSBqaXR0ZXJidWZmZXIgYWN0aXZlIGFuZCBub3QgYnVmZmVyaW5nIHdoZW4gc3RhcnRpbmcuCi0KLTIwMTAtMDEtMjcgMTc6NTc6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgcnRwYmluOiBtb3JlIGJ1ZmZlcmluZyB3b3JrCi0JICBXaGVuIGRlYWN0aXZhdGluZyBqaXR0ZXJidWZmZXJzIHdoZW4gdGhlIGJ1ZmZlcmluZyBzdGFydHMsIGtlZXAgdGhlIGN1cnJlbnQKLQkgIHBlcmNlbnQgb2YgdGhlIGppdHRlcmJ1ZmZlciBhbmQgYWxzbyBzZXQgdGhlIGppdHRlcmJ1ZmZlciBpbiB0aGUgYnVmZmVyaW5nIHN0YXRlCi0JICBzbyB0aGF0IHdlIGtub3cgd2hlbiBpdCdzIGZpbGxlZCBhZ2Fpbi4KLQkgIEFkZCBwcm9wZXJ0eSB0byBnZXQgdGhlIGJ1ZmZlcmluZyBwZXJjZW50YWdlIG9mIHRoZSBqaXR0ZXJidWZmZXIuCi0KLTIwMDktMTAtMTQgMTY6Mjk6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwaml0dGVyYnVmZmVyOiBhZGp1c3QgbGF0ZW5jeSBpbiBidWZmZXIgbW9kZQotCSAgV2hlbiB3ZSBhcmUgaW4gYnVmZmVyIG1vZGUsIGFkanVzdCB0aGUgYnVmZmVyaW5nIGxvdy9oaWdoIHRocmVzaG9sZHMgYmFzZWQgb24KLQkgIHRoZSB0b3RhbCBjb25maWd1cmVkIGxhdGVuY3kuIElmIHdlIGRvbid0IGFuZCB0aGVyZSBpcyBhIGh1Z2UgcXVldWUgb3IgZWxlbWVudAotCSAgd2l0aCBhIGJpZyBsYXRlbmN5IGRvd25zdHJlYW0gd2UgbWlnaHQgZHJhaW4gdGhlIGNvbXBsZXRlIHF1ZXVlIGltbWVkaWF0ZWx5IGFuZAotCSAgc3RhcnQgYnVmZmVyaW5nIGFnYWluLgotCi0yMDA5LTEwLTEyIDExOjU0OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYWRkIHRzLW9mZnNldCB0byB0aW1lc3RhbXAKLQkgIEFkZCB0aGUgdHMtb2Zmc2V0IHRvIHRoZSBidWZmZXIgdGltZXN0YW1wIHRvIGdldCB0aGUgZmluYWwgb3V0cHV0IHRpbWVzdGFtcCBvZgotCSAgdGhlIGJ1ZmZlci4KLQotMjAwOS0xMC0wOCAxOToyMzo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLW1hcnNoYWwubGlzdDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgcnRwYmluOiBkbyBtb3JlIGFjY3VyYXRlIGJ1ZmZlciBvZmZzZXRzCi0JICBSZXR1cm4gdGhlIG5leHQgdGltZXN0YW1wIGluIHRoZSBqaXR0ZXJidWZmZXIuCi0JICBVc2UgdGhlIG1pbi10aW1lc3RhbXAgb2YgdGhlIGppdHRlcmJ1ZmZlcnMgdG8gY2FsY3VsYXRlIGFuIG9mZnNldCBzbyB0aGF0IHRoZQotCSAgbmV4dCB0aW1lc3RhbXAgaXMgcHVzaGVkIHdpdGggYSB0aW1lc3RhbXAgZXF1YWwgdG8gcnVubmluZ190aW1lLgotCSAgU3RhcnQgcHJvZHVjaW5nIHRpbWVzdGFtcHMgZnJvbSAwIGluIHRoZSBidWZmZXJpbmcgY2FzZSB0b28uCi0KLTIwMDktMTAtMDggMTg6NDI6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBvbmx5IHN0YXJ0IGJ1ZmZlcmluZyB3aGVuIDwgMTAwJQotCSAgT25seSBzdGFydCBidWZmZXJpbmcgd2hlbiB0aGUgcGVyY2VudGFnZSBtZXNzYWdlIGlzIDwgMTAwICUuCi0KLTIwMDktMTAtMDYgMTM6MzQ6MzQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IGtlZXAgdHJhY2sgb2YgZWxhcHNlZCBwYXVzZSB0aW1lCi0JICBLZWVwIHRyYWNrIG9mIHRoZSB0aW1lIHdlIHNwZW5kIHBhdXNpbmcgdGhlIGppdHRlcmJ1ZmZlcnMgd2hlbiB0aGV5IHdlcmUKLQkgIGJ1ZmZlcmluZyBhbmQgZGlzdHJpYnV0ZSB0aGlzIGVsYXBzZWQgdGltZSB0byB0aGUgaml0dGVyYnVmZmVycy4KLQkgIEFsc28ga2VlcCB0aGUgbGF0ZW5jeSBpbiBuYW5vc2Vjb25kIHByZWNpc2lvbi4KLQotMjAwOS0xMC0wNiAxMzozMzoxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgIGppdHRlcmJ1ZmZlcjoga2VlcCB0cmFjayBvZiBvZmZzZXQKLQkgIEtlZXAgdHJhY2sgb2YgYW4gb3V0Z29pbmcgb2Zmc2V0IHRoYXQgd2UgYWRkIHRvIGVhY2ggb3V0Z29pbmcgYnVmZmVyIHRvCi0JICBjb21wZW5zYXRlIGZvciBQQVVTRSB3aGVuIGJ1ZmZlcmluZy4KLQkgIEFkanVzdCB0aGUgb2Zmc2V0IHdoZW4gYWN0aXZhdGluZy4KLQotMjAwOS0xMC0wNiAxMzozMDo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlcG9ydCBsZXZlbCB1c2luZyBoaWdoIHdhdGVybWFyawotCi0yMDA5LTEwLTA1IDIxOjMxOjU5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHBiaW46IHBhc3MgcnVubmluZ190aW1lIHRvIGppdHRlcmJ1ZmZlciBwYXVzZQotCSAgUGFzcyB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUgdG8gdGhlIGppdHRlcmJ1ZmZlciB3aGVuIHBhdXNpbmcgb3IgcmVzdW1pbmcgc28KLQkgIHRoYXQgaXQgY2FsY3VsYXRlIHRoZSByaWdodCBvZmZzZXRzLgotCSAgU21hbGwgY2xlYW51cHMgYW5kIGNvbW1lbnRzLgotCSAgU2V0IHRoZSBkZWZhdWx0IHJ0c3BzcmMgbGF0ZW5jeSB0byAyIHNlY29uZHMuCi0KLTIwMDktMTAtMDUgMjA6MDk6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBiaW46IGFkZCBzb21lIGNvbW1lbnRzCi0KLTIwMDktMTAtMDUgMTk6NDU6MzUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmxpc3Q6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBydHBiaW46IG1vcmUgYnVmZmVyaW5nIHVwZGF0ZXMKLQkgIEFkZCBzaWduYWwgdG8gcGF1c2UgdGhlIGppdHRlcmJ1ZmZlci4gVGhpcyB3aWxsIGJlIGVtaXR0ZWQgZnJvbSBnc3RydHBiaW4gd2hlbgotCSAgb25lIG9mIHRoZSBqaXR0ZXJidWZmZXJzIGlzIGJ1ZmZlcmluZy4KLQkgIE1ha2UgcnRwYmluIGNvbGxlY3QgdGhlIGJ1ZmZlcmluZyBtZXNzYWdlcyBhbmQgcG9zdCBhIG5ldyBidWZmZXJpbmcgbWVzc2FnZSB3aXRoCi0JICB0aGUgbWluIHZhbHVlLgotCSAgUmVtb3ZlIHRoZSBzdGF0cyBjYWxsYmFjayBmcm9tIGppdHRlcmJ1ZmZlciBidXQgcGFzcyBhIHBlcmNlbnQgaW50ZWdlciB0bwotCSAgZnVuY3Rpb25zIHRoYXQgYWZmZWN0IHRoZSBidWZmZXJpbmcgc3RhdGUgb2YgdGhlIGppdHRlcmJ1ZmZlci4gVGhpcyBhbGxvd3MgdXMKLQkgIHRoZW4gdG8gcG9zdCBidWZmZXJpbmcgbWVzc2FnZXMgZnJvbSBvdXRzaWRlIG9mIHRoZSBqaXR0ZXJidWZmZXIgbG9jay4KLQotMjAwOS0xMC0wNSAxMzozMjoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIHJ0cGJpbjogcHJvcGFnYXRlIGJ1ZmZlci1tb2RlIHByb3BlcnR5Ci0JICBQcm9wYWdhdGUgYnVmZmVyLW1vZGUgcHJvcGVydHkgdG8gdGhlIGppdHRlcmJ1ZmZlcnMuCi0JICBJbnRlcmNlcHQgQlVGRkVSSU5HIG1lc3NhZ2VzIGluIHJ0cGJpbgotCi0yMDA5LTEwLTAxIDE3OjE0OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBqaXR0ZXJidWZmZXI6IGRvIG1vcmUgYnVmZmVyaW5nIGltcGxlbWVudGF0aW9uCi0JICBBZGQgY2FsbGJhY2sgZm9yIGJ1ZmZlcmluZyBzdGF0cy4KLQkgIENvbmZpZ3VyZSB0aGUgbGF0ZW5jeSBpbiB0aGUgaml0dGVyYnVmZmVyIGluc3RlYWQgb2YgcGFzc2luZyBpdCB3aXRoIF9pbnNlcnQuCi0JICBDYWxjdWxhdGUgYnVmZmVyaW5nIGxldmVscyB3aGVuIHB1c2hpbmcgYW5kIHBvcHBpbmcKLQkgIFBvc3QgYnVmZmVyaW5nIG1lc3NhZ2VzLgotCi0yMDA5LTEwLTAxIDEyOjQ2OjIxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBqaXR0ZXJidWZmZXI6IGZsZXNoIG91dCBidWZmZXJpbmcgbW9kZSBzb21lIG1vcmUKLQkgIEFkZCBhIGJ1ZmZlcmluZyBzdGF0ZSB0byB0aGUgaml0dGVyYnVmZmVyIGFuZCB3YWl0IHVudGlsIGJ1ZmZlcmluZyBlbmRzIGJlZm9yZQotCSAgcHVzaGluZyBvdXQgcGFja2V0cy4KLQotMjAwOS0xMC0wMSAxMjowOTo1OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogaG9vayB1cCB0aGUgbW9kZSBwcm9wZXJ0eQotCSAgRXhwb3NlIGEgbW9kZSBwcm9wZXJ0eSBvbiB0aGUgaml0dGVyYnVmZmVyLgotCSAgRml4IHRoZSBjYXNlIHdoZXJlIHRpbWVzdGFtcHMgYXJlIC0xIGluIHRoZSBjaGVjayBmb3Igb3V0Z29pbmcgdGltZXN0YW1wcy4KLQotMjAwOS0xMC0wMSAxMToyMDowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIGppdHRlcmJ1ZmZlcjogYWRkIGJ1ZmZlcmluZyBtb2RlIG9wdGlvbnMKLQkgIEFkZCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGZvciBkaWZmZXJlbnQgYnVmZmVyaW5nIG1vZGVzIHRoYXQgdGhlIGppdHRlcmJ1ZmZlciB3aWxsCi0JICBzdXBwb3J0LiBEZWZhdWx0IHRvIHRoZSBjdXJyZW50IHNsYXZlIG1vZGUuCi0KLTIwMTAtMDItMTIgMTU6NTQ6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JICB2NGxzaW5rOiBsb3dlciByYW5rIHRvIE1BUkdJTkFMCi0KLTIwMTAtMDItMTIgMTY6MDY6NDUgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IE9idGFpbiB0aGUgaW5kZXggZnJvbSB0aGUgZW5kIG9mIGFuIGZsdiBmaWxlIGluIHB1c2ggbW9kZQotCSAgQWxsb3dzIGZvciBiZXR0ZXIgc3VwcG9ydCBvZiBzZWVraW5nIGluIGZsdiBmaWxlcyB3aGVuIGluIHB1c2ggbW9kZQotCi0yMDEwLTAxLTIxIDExOjU1OjE1ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBEcm9wIHZpZGVvIGZyYW1lcyB1cCB0byB0aGUgZGVzaXJlZCBrZXlmcmFtZSBhZnRlciBhIHNlZWsKLQkgIFRoZSBhdWRpbyBwYWNrZXRzIGluIEFWSSBhcmUgZ2VuZXJhbGx5IG11eGVkIH4wLjVzIGJlZm9yZSB0aGUKLQkgIGNvcnJlc3BvbmRpbmcgdmlkZW8gcGFja2V0LiBUaGlzIGNoYW5nZXMgY2F1c2VzIGRvd25zdHJlYW0gdG8gb25seQotCSAgcmVjZWl2ZSBwYWNrZXRzIHdpdGggcm91Z2hseSBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcHMuCi0KLTIwMTAtMDEtMTkgMTg6MzU6NDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBtb3JlIERJU0NPTlQgaGFuZGxpbmcKLQkgIEFkZCBzb21lIGRlYnVnIGluIHRoZSBESVNDT05UIGhhbmRsaW5nIGNvZGUuCi0JICBXaGVuIHdlIHJlY2VpdmUgYSBESVNDT05UIGluIHB1c2ggbW9kZSwgbWFyayBhbGwgc3RyZWFtcyBhcyBESVNDT05ULgotCi0yMDEwLTAxLTE5IDEwOjUxOjA4ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBGaXggX2hhbmRsZV9zZWVrX3B1c2ggKCkgYW5kIG5ldyBzZWdlbWVudCBiZWhhdmlvdXIKLQotMjAxMC0wMS0xOCAxNzoxMzowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGNsZWFudXBzCi0JICBNYWtlIHN1cmUgd2UgcmVzZXQgdGhlIGRlbXV4ZXIgY29ycmVjdGx5IHdydCBwYXJzaW5nIHRoZSBpbmRleC4KLQkgIERvbid0IGxlYWsgcGVuZGluZyBzZWVrIGV2ZW50cy4KLQkgIFJlbmFtZSBzb21lIG1ldGhvZHMgdG8gcmVmbGVjdCB3aGF0IHRoZXkgZG8gYW5kIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHNpbWlsYXIKLQkgIG1ldGhvZCBuYW1lcy4KLQkgIFRyeSB0byBtYWtlIHRoZSBzZWVraW5nIHRocmVhZHNhZmUgYnkgcHJvdGVjdGluZyB0aGUgc2V0dXAgY29kZSB3aXRoIGEgbG9jay4KLQkgIE1ha2Ugc3VyZSB3ZSBwb3N0IGVycm9ycyB3aGVuIGEgc2VlayBmYWlscy4KLQotMjAxMC0wMS0xOCAxMTo0NTozOCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgYXZpZGVtdXg6IHJlbmFtZSBzb21lIHZhcmlhYmxlcwotCSAgc2Vla19ldmVudCAtPiBzZWdfZXZlbnQKLQkgIGV2ZW50X3NlZWsgLT4gc2Vla19ldmVudAotCi0yMDEwLTAxLTE1IDE4OjAwOjQ2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogdGFrZSBmYWxsYmFjayBkdXJhdGlvbiBmcm9tIGF2aWgKLQkgIFdoZW4gd2UgaGF2ZSBub3QgcGFyc2VkIGFueSBpbmRleGVzIHlldCwgd2UgZG9uJ3Qga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJlYW1zCi0JICBhbmQgd2UgbXVzdCB0YWtlIHRoZSBsZW5ndGggZ2l2ZW4gaW4gdGhlIGF2aWggYXMgYSBmYWxsYmFjay4KLQkgIEF2b2lkIHNvbWUgdHlwZWNoZWNraW5nLgotCi0yMDA5LTEyLTA0IDE1OjEzOjEyICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBQdXNoIG1vZGUgc2Vla2luZyBzdXBwb3J0Ci0KLTIwMTAtMDItMDEgMTY6MDQ6NDEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGNsZWFudXAgcHJvcGVydGllcwotCSAgVXNlIG1vcmUgZGVmYXVsdCBjb25zdGFudHMuCi0JICBVc2Ugc3RhdGljIHN0cmluZ3MgcGFyYW0gZmxhZy4KLQkgIEluaXQgcHJvcGVydGllcyBleHBsaWNpdGx5IGluc3RlYWQgb2YgbGV0dGluZyBnb2JqZWN0IGRvIHRoaXMuCi0KLTIwMTAtMDItMTIgMTU6MzQ6MzggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JICBzcGVleDogYWRkIG1pc3NpbmcgaW5jbHVkZQotCi0yMDEwLTAyLTA1IDEzOjI4OjUzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSAgdGFnaW5qZWN0OiBmaXggbXVsdGktdmFsdWUgdGFnIGV4YW1wbGUKLQkgIFdlIG5lZWQgdG8gdXNlIHt9IHRvIHNwZWNpZnkgYSBsaXN0LgotCi0yMDEwLTAyLTAxIDE0OjQzOjA0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgYXZpLHdhdjogYWxzbyBoYW5kbGUgSlVOUSBjaHVuayBpbiBhZGRpdGlvbiB0byBKVU5LCi0KLTIwMTAtMDItMDQgMTU6NTk6MjUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwajJrcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSAgcnRwcGF5OiBkb24ndCBpZ25vcmUgcmVzdWx0IGZyb20gc2V0X291dGNhcHMKLQkgIHNldF9vdXRjYXBzIGNhbiBmYWlsIGFuZCB3ZSBuZWVkIHRvIHByb3BhZ2F0ZSB0aGUgcmVzdWx0IHVwc3RyZWFtLgotCi0yMDEwLTAyLTA0IDE1OjM2OjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JICBmbHZwYXJzZTogZml4IGNvbmZ1c2luZyBkZWJ1ZyBtZXNzYWdlcwotCi0yMDEwLTAxLTI3IDEzOjI4OjEzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvCi0KLTIwMTAtMDEtMjcgMTM6MjY6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogYXZvaWQgc2VnZmF1bHQgd2hlbiBzaHV0dGluZyBkb3duCi0JICB3aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duLCB3ZSBtaWdodCBzdGlsbCByZWNlaXZlIHN0YXRlIHVwZGF0ZXMgZnJvbSBwdWxzZWF1ZGlvCi0JICBidXQgc2luY2Ugd2UgYXJlIHVucGFyZW50ZWQgd2Ugc2hvdWxkIG5vdCBkbyBhbnl0aGluZyB3aXRoIHRoZSBOVUxMIHBhcmVudAotCSAgYW55bW9yZS4KLQotMjAxMC0wMS0yNiAxODozMzoyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5oOgotCSAgdmlkZW9taXhlcjogZml4IHRpbWVzdGFtcCBwcm9ibGVtcwotCSAgV2hlbiB0aGUgcGFkIHdpdGggdGhlIGhpZ2hlc3QgZnJhbWVyYXRlIGdvZXMgRU9TLCBpbnN0ZWFkIG9mIG5vdCB0aW1lc3RhbXBpbmcKLQkgIG91dHB1dCBidWZmZXJzLCBpbnRlcG9sbGF0ZSB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgZnJvbSB0aGUgbGFzdCBzZWVuIG9uZXMuCi0JICBGaXhlcyAjNjA4MDI2Ci0KLTIwMTAtMDItMTIgMTE6MzI6NDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSAgZG9jczogVXBkYXRlIGRvY3VtZW50YXRpb24KLQotMjAxMC0wMi0xMiAxMToxODoyNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbDoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JICBNb3ZlZCAnc2hhcGV3aXBlJyBmcm9tIC1iYWQgdG8gLWdvb2QKLQkgIEZpeGVzIGJ1ZyAjNTg0NTM2LgotCi0yMDEwLTAyLTEwIDEwOjUyOjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAyOS8yOV0gc2hhcGV3aXBlOiBQcmVzZXJ2ZSB0aGUgaW5wdXQgY29sb3IgdmFsdWVzIGluIGFsbCBjYXNlcwotCi0yMDEwLTAyLTEwIDEwOjUwOjQ5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAyOC8yOV0gc2hhcGV3aXBlOiBTY2FsZSBtYXNrIGFscGhhIHZhbHVlcyBieSB0aGUgc291cmNlIGFscGhhIHZhbHVlcwotCi0yMDEwLTAyLTEwIDEwOjQyOjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAyNy8yOV0gc2hhcGV3aXBlOiBGaXggQVJHQiBwcm9jZXNzaW5nCi0KLTIwMTAtMDItMTAgMTA6MzQ6MjQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAyNi8yOV0gc2hhcGV3aXBlOiBQcmludCBzb21lIG1vcmUgZGV0YWlscyBvbiBlcnJvci93YXJuaW5nIG1lc3NhZ2VzCi0KLTIwMTAtMDItMDggMDg6MjY6MzMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDI1LzI5XSBzaGFwZXdpcGU6IEltcHJvdmUvYWRkIGRlYnVnIG91dHB1dAotCi0yMDEwLTAyLTA4IDA4OjIwOjQ0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAyNC8yOV0gc2hhcGV3aXBlOiBBbHdheXMgaG9sZCB0aGUgbWFzayBtdXRleCBiZWZvcmUgc2lnbmFsbGluZyB0aGUgR0NvbmQKLQotMjAxMC0wMi0wOCAwODoxOTo0OCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMjMvMjldIHNoYXBld2lwZTogTW92ZSBjaGFpbiBmdW5jdGlvbiBlcnJvciBjYXNlcyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBhbmQgYWRkIHVzZWZ1bCBkZWJ1ZyBvdXRwdXQKLQotMjAxMC0wMi0wOCAwODoxMjoxMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5oOgotCSAgW01PVkVEIEZST00gQkFEIDIyLzI5XSBzaGFwZXdpcGU6IEZpeCByYWNlIGNvbmRpdGlvbiBkdXJpbmcgc2h1dGRvd24gdGhhdCBjYW4gbGVhZCB0byBhIGRlYWRsb2NrCi0KLTIwMTAtMDItMDggMDg6MTE6MzMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDIxLzI5XSBzaGFwZXdpcGU6IERyb3AgbWFzayBidWZmZXIgb24gRkxVU0ggZXZlbnRzCi0KLTIwMTAtMDItMDggMDg6MDk6NTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAyMC8yOV0gc2hhcGV3aXBlOiBVcGRhdGUgY29weXJpZ2h0IHllYXIKLQotMjAxMC0wMi0wOCAwODowODo0NCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTkvMjldIHNoYXBld2lwZTogRG9uJ3QgcmVzZXQgcHJvcGVydGllcyB3aGVuIGdvaW5nIFBBVVNFRC0+UkVBRFkKLQkgIEFsc28gdXNlIGRlZmluZXMgZm9yIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgcHJvcGVydGllcy4KLQotMjAxMC0wMS0xNiAxNjo1MjoxMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTgvMjldIHNoYXBld2lwZTogUmVwbGFjZSBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGluIHRoZSBpbm5lciBwcm9jZXNzaW5nIGxvb3BzIGJ5IGludGVnZXIgYXJpdGhtZXRpYwotCi0yMDA5LTEyLTEwIDEwOjQwOjEwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxNy8yOV0gc2hhcGV3aXBlOiBEb24ndCBkbyBwb2ludGVyIGRlcmVmZXJlbmNlcyBpbiB0aGUgcHJvY2Vzc2luZyBsb29wCi0JICBMb3dlcnMgdGhlIHRpbWUgdGFrZW4gdGhlcmUgaW4gbXkgdGVzdGNhc2UgZnJvbSA2LjkxJSB0byA2LjIwJQotCSAgYXMgbWVhc3VyZWQgYnkgY2FsbGdyaW5kLgotCi0yMDA5LTA3LTA4IDE3OjU5OjI5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxNi8yOV0gc2hhcGV3aXBlOiBBZGQgQkdSQSBzdXBwb3J0IGZvciB2aWRlbyBpbi9vdXRwdXQKLQotMjAwOS0wNy0wMiAxMToyNDo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5oOgotCSAgW01PVkVEIEZST00gQkFEIDE1LzI5XSBzaGFwZXdpcGU6IEFkZCBzdXBwb3J0IGZvciBBUkdCIHZpZGVvIGlucHV0L291dHB1dAotCi0yMDA5LTA2LTIzIDE4OjIzOjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAxNC8yOV0gc2hhcGV3aXBlOiBDb3JyZWN0bHkgaGFuZGxlIDAvMSBmcHMKLQotMjAwOS0wNi0wOSAxOToxNDo0MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5oOgotCSAgW01PVkVEIEZST00gQkFEIDEzLzI5XSBzaGFwZXdpcGU6IEltcGxlbWVudCBiYXNpYyBRb1MKLQkgIFRoaXMgY2hhbmdlIGlzIGJhc2VkIG9uIFRpbSdzIFFvUyBpbXBsZW1lbnRhdGlvbgotCSAgZm9yIGpwZWdkZWMuCi0KLTIwMDktMDYtMDkgMTg6NDU6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDEyLzI5XSBzaGFwZXdpcGU6IFByb3h5IHF1ZXJpZXMgb24gdGhlIHZpZGVvIHBhZHMgdG8gdGhlIGNvcnJlY3QgcGVlcnMKLQotMjAwOS0wNi0wOSAxODozNzo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTEvMjldIHNoYXBld2lwZTogUHJveHkgYnVmZmVyYWxsb2Mgb24gdGhlIHZpZGVvIHNpbmtwYWQKLQotMjAwOS0wNi0wOSAxODoyNToxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMTAvMjldIHNoYXBld2lwZTogVHJ5IHRvIHdvcmsgaW5wbGFjZSBpZiBwb3NzaWJsZQotCSAgVGhpcyBzYXZlcyBvbmUgbmV3LCBsYXJnZSBhbGxvY2F0aW9uIHBlciBmcmFtZSBmb3IgdGhlCi0JICBtb3N0IGNhc2VzLgotCi0yMDA5LTA2LTA0IDA4OjU2OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDkvMjldIHNoYXBld2lwZTogSW5jcmVhc2UgdGltZW91dCBvZiB0aGUgdW5pdCB0ZXN0Ci0KLTIwMDktMDYtMDEgMjE6MjQ6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDA4LzI5XSBzaGFwZXdpcGU6IEZpeCBzb21lIGlzc3VlcyB0aGF0IHdlcmUgZXhwb3NlZCBieSB0aGUgbmV3IHVuaXQgdGVzdAotCi0yMDA5LTA2LTAxIDIxOjI0OjEyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc2hhcGV3aXBlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgMDcvMjldIHNoYXBld2lwZTogQWRkIHVuaXQgdGVzdCBmb3Igc2hhcGV3aXBlCi0KLTIwMDktMDUtMzEgMjE6MzM6MDEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDA2LzI5XSBzaGFwZXdpcGU6IEFkZCBkb2N1bWVudGF0aW9uIGFuZCBpbnRlZ3JhdGUgaW50byB0aGUgYnVpbGQgc3lzdGVtCi0KLTIwMDktMDUtMjkgMjE6MDc6MjYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDA1LzI5XSBzaGFwZXdpcGU6IEFkanVzdCBib3JkZXIgdG8gc3RpbGwgaGF2ZSBldmVyeXRoaW5nIHRyYW5zcGFyZW50IGF0IDEuMCBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQKLQotMjAwOS0wNS0yOSAxNjo1NToyNSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNC8yOV0gc2hhcGV3aXBlOiBEaXZpZGUgdGhlIGJvcmRlciB2YWx1ZSBieSB0d28sIG90aGVyd2lzZSB3ZSB1c2UgYSB0d2ljZSBhIHdpZGUgYm9yZGVyCi0KLTIwMDktMDUtMjkgMTY6NTE6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDAzLzI5XSBzaGFwZXdpcGU6IEFkZCBib3JkZXIgcHJvcGVydHkgdG8gYWxsb3cgc21vb3RoIGJvcmRlcnMKLQkgIC4uLmFuZCB1c2UgYSBib3JkZXIgb2YgMC4wMSBpbiB0aGUgZXhhbXBsZSBhcHBsaWNhdGlvbi4KLQotMjAwOS0wNS0yOSAxNjowMDoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9NYWtlZmlsZS5hbToKLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMi8yOV0gc2hhcGV3aXBlOiBGaXggTWFrZWZpbGUgb2YgdGhlIGV4YW1wbGUgYXBwbGljYXRpb24KLQotMjAwOS0wNS0yOSAxNTozMjoyNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9zaGFwZXdpcGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5jOgotCSogZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3NoYXBld2lwZS9zaGFwZXdpcGUtZXhhbXBsZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDAxLzI5XSBzaGFwZXdpcGU6IEFkZCBhIHNpbXBsZSBzaGFwZXdpcGUgdHJhbnNpdGlvbiBmaWx0ZXIgJiBleGFtcGxlIGFwcGxpY2F0aW9uCi0KLTIwMTAtMDItMDYgMTg6MTk6MjcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBPbmx5IGZsdXNoIHRoZSBGTEFDIGRlY29kZXIgaWYgaXQgd2Fzbid0IGNyZWF0ZWQgcmlnaHQgYmVmb3JlCi0JICBJZiB0aGUgRkxBQyBkZWNvZGVyIGlzIGZsdXNoZWQsIGl0cyBzdGF0ZSB3aWxsIGJlIHNldCB0byBmcmFtZS1zeW5jIG1vZGUsCi0JICB3aGljaCB3aWxsIHN5bmMgdG8gdGhlIG5leHQgKmF1ZGlvKiBmcmFtZSBhbmQgbWFrZXMgaXQgaWdub3JlIGFsbCBoZWFkZXJzLgotCSAgVGhpcyBwcmV2ZW50ZWQgdGFncyBhbmQgZXZlcnl0aGluZyBlbHNlIHRvIHNob3cgdXAgd2hlbiB1c2luZyBmbGFjZGVjCi0JICBpbiBwdXNoIG1vZGUuCi0JICBGaXhlcyBidWcgIzYwODg0My4KLQotMjAxMC0wMi0xMSAwMToxMjoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIE1BSU5UQUlORVJTOgotCSAgVXBkYXRlIE1BSU5UQUlORVJTCi0KLTIwMTAtMDItMTIgMDA6MDM6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGJhY2sgdG8gZGV2ZWxvcG1lbnQKLQkgIFNsdXNoeSBmcmVlemUgcmVtYWlucyBpbiBlZmZlY3QuCi0KLT09PSByZWxlYXNlIDAuMTAuMTggPT09Ci0KLTIwMTAtMDItMTAgMjM6MTg6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nYW1tYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYmFsYW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMTgKLQotMjAxMC0wMi0xMCAyMzoxNzoyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQotMjAxMC0wMi0xMCAyMDozNjo1NiArMDAwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB0ZW1wb3Jhcnkgc2FmZXR5IGNoZWNrIHRvIGF2b2lkIGNyYXNoZXMgd2l0aCBhIGNlcnRhaW4gZmlsZQotCSAgQWRkIHRlbXBvcmFyeSBjaGVjayB0byBhdm9pZCBjcmFzaGVzIHdpdGggYSBjZXJ0YWluIGZpbGUgd2hlbiBzZWVraW5nCi0JICB1bnRpbCB0aGUgcmVhbCBjYXVzZSBvZiB0aGlzIGlzIGZpZ3VyZWQgb3V0LiBTZWUgIzYwOTQwNS4KLQotMjAxMC0wMi0wNSAxODowNTozOSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBza2lwIHVua25vd24gYXRvbXMgd2hlbiBsb29raW5nIGZvciBtb292Ci0JICBGaXhlcyBidWcgIzYwOTEwNwotCi0yMDEwLTAyLTA1IDAyOjEzOjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4xNy4zIHByZS1yZWxlYXNlCi0KLTIwMTAtMDItMDQgMTk6MTA6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9iZy5wbzoKLQkqIHBvL2h1LnBvOgotCSAgcG86IHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAxMC0wMi0wNCAxNDo0Njo1NiArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBxdGRlbXV4OiBTZXQgdGhlIHNlZ21lbnQgc3RhcnQgdGltZSB0byB0aGUgcmVxdWVzdGVkIHNlZWsgdGltZSBmb3Igbm9uLWtleWZyYW1lIHNlZWtzCi0KLTIwMTAtMDItMDQgMTI6MDA6MDMgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHRpbWUgcmV0dXJuZWQgZm9yIGluZGV4IGF0IGEgYnl0ZSBvZmZzZXQKLQkgIFRoZSBsb2dpYyBmb3Igc2VhcmNoaW5nIGZvcndhcmRzL2JhY2t3YXJkcyB3YXMgc3dhcHBlZAotCi0yMDEwLTAyLTAxIDE5OjIyOjI0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JICBzcGVleGRlYzogaW5pdGlhbGl6ZSBzdGVyZW8gZGVjb2Rpbmcgc3RhdGUKLQotMjAxMC0wMS0yOCAxODo1ODowOCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogaW1wcm92ZSBzdHJlYW0gc3luY2hyb25pemF0aW9uCi0JICBJbiBwYXJ0aWN1bGFyLCBkbyBub3QgbWFrZSBpdCBzZW5kIG5ld3NlZ21lbnQgdXBkYXRlcyB0aGF0Ci0JICBzb3J0LW9mIGNvbnRyYWRpY3QgdGhlIGluZGVudGVkIHBsYXliYWNrIHNlZ21lbnQgKGUuZy4gc3RhcnQgdGltZSkuCi0KLTIwMTAtMDEtMjggMTg6NTM6MTggKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IGZpeCBicmlkZ2luZyAodGltZSkgZ2FwcyBpbiBzdHJlYW1zCi0JICBBcyBhIHNpZGUgZWZmZWN0LCBhdm9pZCBzZW5kaW5nIG5ld3NlZ21lbnQgdXBkYXRlcyB3aXRoIHN0YXJ0IHRpbWVzCi0JICB0aGF0IGdvIGJhY2sgYW5kIGZvcnRoLCB3aGljaCBsZWFkcyB0byBib2d1cyBkb3duc3RyZWFtIHJ1bm5pbmdfdGltZS4KLQkgIEFsc28gZml4ZXMgc2Vla2luZyBpbiBidWcgIzYwNjc0NC4KLQotMjAxMC0wMS0yOCAxODo0OTo1NyArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZml4IHN0cmVhbSBzeW5jaHJvbml6YXRpb24KLQkgIC4uIGJ5IGluaXRpYWxpemluZyBzdHJlYW1zIHN0YXJ0aW5nIGF0IDAsIGFzIHRoYXQgaXMgYmFzaWNhbGx5Ci0JICB3aGVyZSB3ZSAnc2VlayB0bycgYXQgdGhlIHN0YXJ0IGFuZCBhc3N1bWUgc3RyZWFtcyB0byBzdGFydCBlbHNld2hlcmUuCi0JICBBbHNvIGVuYWJsZXMgbmV3c2VnbWVudCB1cGRhdGUgZXZlbnRzIGZvciBzdWJ0aXRsZSBzdHJlYW1zLgotCi0yMDEwLTAyLTAyIDEzOjQxOjAzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWc6IGRvbid0IGRpcmVjdGx5IGFjY2VzcyBtZXNzYWdlLCBzb21lIG1lc3NhZ2UgaGF2ZSBhcmdzCi0JICBUaGlzIGNhdXNlZCBib2d1cyBtZXNzYWdlcywgc3VjaCBhcyByZXBvcnRlZCBpbiBidWcgIzYwNzQ3MS4KLQotMjAxMC0wMi0wMiAwMDowMjozNCArMDAwMCAgRGF2aWQgSG95dCA8ZGhveXRAbGxubC5nb3Y+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmc6IGZpeCBjb21waWxhdGlvbiB3aXRoIGxpYnBuZyAxLjQKLQkgIHBuZ19zZXRfZ3JheV8xXzJfNF90b184KCkgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgYSB3aGlsZSBhbmQgd2FzCi0JICBmaW5hbGx5IHJlbW92ZWQgaW4gbGlicG5nIDEuNC54LiBVc2UgcG5nX3NldF9leHBhbmRfZ3JheV8xXzJfNF90b184KCkKLQkgIGluc3RlYWQuCi0JICBGaXhlcyAjNjA4NjI5LgotCi0yMDEwLTAyLTAxIDE2OjQ2OjM2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmcmVlIHRyYW5zcG9ydHMgb24gZXJyb3JzCi0JICBTZWUgIzYwODU2NAotCi0yMDEwLTAyLTAxIDA5OjE4OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMjogZml4IHVucG9ydGFibGUgcHJpbnRmIGZvcm1hdAotCi0yMDEwLTAxLTMwIDE1OjE4OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDE1ZDQ3YTYgdG8gOTZkYzc5MwotCi0yMDEwLTAxLTI3IDE3OjUzOjA3ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBmbHZtdXg6IGluZGV4IHRpbWVzdGFtcHMgc2hvdWxkIGJlIGluIHNlY29uZHMsIG5vdCBtaWxsaXNlY29uZHMKLQotMjAxMC0wMS0yNyAxNToyNDo1MiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSAgc3BlZXhkZWM6IGZyZWUgc29tZSBtb3JlIHdoZW4gcmVzZXR0aW5nCi0JICBGaXhlcyAjNjA4MjU1LgotCi0yMDEwLTAxLTI3IDE1OjI0OjI0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSAgcnRwc3BlZXhwYXk6IGZpeCBvY2Nhc2lvbmFsIGJ1ZmZlciBsZWFrCi0JICBGaXhlcyAjNjA4MjU1LgotCi0yMDEwLTAxLTI3IDE1OjIyOjQ2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleGVuYzogcHJldmVudCBpbnZhbGlkIGFyaXRobWV0aWMgaWYgbm90IHNldHVwIHlldAotCSAgRml4ZXMgIzYwODI1NS4KLQotMjAxMC0wMS0yNyAxNjozNDoyMSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX21teC5oOgotCSAgdmlkZW9taXhlcjogRml4IGFzc2VtYmx5IHJlZ2lzdGVyIGNvbnN0cmFpbnRzCi0JICBGaXhlcyBidWcgIzYwODIwOS4KLQotMjAxMC0wMS0yNyAwMTo1NjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTcuMiBwcmUtcmVsZWFzZQotCi0yMDEwLTAxLTI3IDAxOjUyOjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZWwucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIHBvOiB1cGRhdGUgdHJhbnNsYXRpb25zCi0KLTIwMTAtMDEtMjcgMDE6NDk6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgY2hlY2tzOiBpZ25vcmUgZGVpbnRlcmxhY2UgY2hlY2sgYmluYXJ5Ci0KLTIwMTAtMDEtMjcgMDE6MTg6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IHB1cmdlIGFsbCBtZW50aW9uIG9mIENWUwotCi0yMDEwLTAxLTI2IDExOjE4OjI4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogaWdub3JlIHN0cmVhbXMgdGhhdCBmaW5pc2hlZAotCSAgV2hlbiB3ZSByZWNlaXZlIGFuIFVORVhQRUNURUQgZnJvbSBhIHN0cmVhbSwgbW92ZSB0byB0aGUgbmV4dCBzdHJlYW0gYW5kIG9ubHkgZ28KLQkgIEVPUyB3aGVuIGFsbCBzdHJlYW1zIGFyZSBFT1MuIFdoZW4gc2VsZWN0aW5nIGEgc3RyZWFtIHRvIHB1c2gsIGlnbm9yZSBzdHJlYW1zCi0JICB0aGF0IHdlbnQgRU9TLgotCSAgRml4ZXMgIzYwNzk0OQotCi0yMDEwLTAxLTI1IDE3OjIzOjQzICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IGRvbid0IGRlcmVmIE5VTEwKLQkgIEVycm9yIG91dCB3aGVuIHRoZSBwb29sIGdldHMgc2h1dGRvd24uCi0KLTIwMTAtMDEtMjUgMTc6MjE6MTMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBSZXZlcnQgInY0bDJzcmM6IGRvbid0IGRlcmVmIE5VTEwiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDNkOWQzNGJkNjBmYWViOTQwYjM2ZDk5MmE0NzE2OGZjODk1MDM2YmEuCi0KLTIwMTAtMDEtMjUgMTQ6MTY6MjIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICB2NGwyc3JjOiBkb24ndCBkZXJlZiBOVUxMCi0JICBFcnJvciBvdXQgd2hlbiB0aGUgcG9vbCBnZXRzIHNodXRkb3duLgotCi0yMDEwLTAxLTIzIDE1OjMyOjQ4IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IHdoZW4gY3JlYXRpbmcgYW4gb3ZlcmZsb3cgYnVmZmVyLCBjb3B5IHRpbWVzdGFtcHMuCi0KLTIwMTAtMDEtMjMgMTQ6NDc6NTUgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGRtYjEgaXMgYSB2YWxpZCBmb3VyY2MgZm9yIE1vdGlvbi1KUEVHCi0KLTIwMTAtMDEtMjMgMTQ6MjA6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGV1eDogSVYzMiBpcyBhbHNvIHVzZWQgZm9yIEluZGVvIDMgdmlkZW8gc3RyZWFtcwotCi0yMDEwLTAxLTIyIDE2OjQ4OjAxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2ljbGVzL3hpbWFnZXNyYy10ZXN0LmM6Ci0JICBidWlsZDogbm8gdW51c2VkIHZhcmlhYmxlcyB3aGVuIGRpc2FibGluZyBhc3NlcnRzCi0KLTIwMTAtMDEtMjEgMjM6MTc6NDAgLTAzMDAgIFJvbGFuZCBLcmlrYXZhIDxya3Jpa2F2YUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEF2b2lkIG5lZ2F0aXZlIG92ZXJmbG93IG9uIGtleWZyYW1lIHNlYXJjaAotCSAgRG8gbm90IG92ZXJmbG93IG5lZ2F0aXZlbHkgd2hlbiBzZWFyY2hpbmcgYSBwcmV2aW91cwotCSAgImtleWZyYW1lIiBvbiBhdWRpbyBzdHJlYW1zLiBDb3VsZCBjYXVzZSBpbmZpbml0ZSBsb29wcwotCSAgb24gYmFja3dhcmRzIHBsYXliYWNrCi0JICBGaXhlcyAjNjA3NzE4Ci0KLTIwMTAtMDEtMjEgMTc6MjI6MzggLTA4MDAgIFBldGVyIHZhbiBIYXJkZW5iZXJnIDxwdmhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSAganBlZ2VuYzogZW5sYXJnZSBidWZmZXIgaWYgbGlianBlZyB0ZWxscyB1cyBpdCdzIG91dCBvZiBzcGFjZS4gRml4ZXMgYnVmZmVyIG92ZXJmbG93IG9uIHNvbWUgaGlnaC1xdWFsaXR5LCBsb3ctcmVzb2x1dGlvbiBqcGVnIGVuY29kZXMuCi0KLTIwMTAtMDEtMjEgMTk6MjQ6MjIgKzAxMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggY29tcGlsZXIgd2FybmluZ3MgdW5kZXIgT1MgWC4KLQotMjAxMC0wMS0yMSAxNzo1NzozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGRvbid0IHBhcnNlIE5VTEwgaW5kZXhlcwotCSAgZm9yIHNvbWUgc3RyZWFtcyB3ZSBtaWdodCBmYWlsIHRvIGZldGNoIHRoZSBpbmRleCBvZmZzZXRzLiBEb24ndCB0cnkgdG8gcGFyc2UKLQkgIE5VTEwgaW5kZXhlcyBpbiB0aG9zZSBjYXNlcy4KLQotMjAxMC0wMS0xOCAyMToxNTo1MSAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkgIHJ0cGc3MjlwYXk6IHB0aW1lIHNob3VsZCBpcyBpbiBuYW5vc2Vjb25kcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzQwMwotCi0yMDEwLTAxLTIwIDE1OjExOjE1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmg6Ci0JICB3YXZlbmM6IFBvc3Qgd2FybmluZyBpZiBmaWxlIGlzbnQgZmluaXNoZWQgcHJvcGVybHkKLQkgIFdoZW4gdGhlIHBpcGVsaW5lIGlzIHNodXQgZG93biBhbmQgdGhlIGZpbGUgaXNuJ3QKLQkgIGZpbmlzaGVkIHByb3Blcmx5LCB3YXZlbmMgc2hvdWxkIHBvc3QgYSB3YXJuaW5nLgotCSAgRml4ZXMgIzYwNzQ0MAotCi0yMDA5LTA1LTI3IDEzOjUxOjQ0ICswMjAwICBBcm5vdXQgVmFuZGVjYXBwZWxsZSA8YXJub3V0QG1pbmQuYmU+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thbXV4OiBtYWtlIGluZGV4IHNpemUgY29uZmlndXJhYmxlLgotCSAgQWRkZWQgdGhlICdtaW4taW5kZXgtaW50ZXJ2YWwnIHByb3BlcnR5IHRvIG1hdHJvc2thbXV4LAotCSAgd2hpY2ggZGV0ZXJtaW5lcyBob3cgbXVjaCB0aW1lIChuYW5vc2Vjb25kcykgaXMgbGVmdAotCSAgYmV0d2VlbiBrZXlmcmFtZXMgc3RvcmVkIGluIHRoZSBpbmRleC4KLQkgIEZpeGVzICM1ODM5ODUuCi0KLTIwMTAtMDEtMjAgMTY6Mjg6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogc2NhbGUgc3BzcHBzX2ludGVydmFsIHRvIG1pbGxpc2Vjb25kcwotCSAgVGhlIHNwc3Bwc19pbnRlcnZhbCBpcyBrZXB0IGluIHNlY29uZHMuIENvbnZlcnQgaXQgdG8gbWlsbGlzZWNvbmRzIGJlZm9yZQotCSAgY29tcGFyaW5nIGl0IHRvIGFub3RoZXIgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgotCi0yMDEwLTAxLTIwIDE1OjE4OjQ3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWx3YXlzIGtlZXAgbWVkaWEgc2VnbWVudHMgd2l0aGluIHRvdGFsIGR1cmF0aW9uCi0JICAuLi4gYXMgb3Bwb3NlZCB0byBvbmx5IGRvaW5nIHNvIGZvbGxvd2luZyBhIHNlZWsuCi0KLTIwMTAtMDEtMjAgMTU6NDQ6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogcmVuYW1lIHNwc3Bwcy1pbnRlcnZhbCBwcm9wZXJ0eQotCSAgUmVuYW1lIHRoZSBzcHNwcHMtaW50ZXJ2YWwgcHJvcGVydHkgdG8gY29uZmlnLWludGVydmFsIGJlY2F1c2UgaXQgaXMgbmljZXIuCi0KLTIwMTAtMDEtMTkgMTg6Mzc6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBza2lwIFJJRkYgYW5kIGluZGV4IGluIHB1c2ggbW9kZQotCSAgV2hlbiB3ZSBhcmUgaW4gcHVzaCBtb2RlLCB3ZSBjYW4gZW5jb3VudGVyIFJJRkYgYW5kIGlkeCB0YWdzIGluIHRoZSBkYXRhIGNodW5rCi0JICB3aGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggT0RNTCBmaWxlcy4gSW4gdGhlc2UgY2FzZXMsIHNpbXBseSBza2lwIHRoZSBjaHVua3MgYW5kCi0JICBjb250aW51ZSBzdHJlYW1pbmcgaW5zdGVhZCBvZiBnb2luZyBFT1MuCi0KLTIwMTAtMDEtMjAgMTE6Mjc6MjMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBtb3JlIERJU0NPTlQgaGFuZGxpbmcKLQkgIEFkZCBzb21lIGRlYnVnIGluIHRoZSBESVNDT05UIGhhbmRsaW5nIGNvZGUuCi0JICBXaGVuIHdlIHJlY2VpdmUgYSBESVNDT05UIGluIHB1c2ggbW9kZSwgbWFyayBhbGwgc3RyZWFtcyBhcyBESVNDT05ULgotCi0yMDEwLTAxLTIwIDExOjI2OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcmVzZXQgb24gZmx1c2ggZXZlbnRzCi0JICBXaGVuIHdlIHJlY2VpdmUgYSBmbHVzaCBldmVudCBvbiB0aGUgc2lua3BhZCwgcmVzZXQgdGhlIEVPUyBzdGF0ZSBhbmQgdGhlCi0JICBmbG93cmV0dXJuIG9mIGFsbCBzdHJlYW1zLiBBbHNvIG1hcmsgdGhlIHN0cmVhbXMgd2l0aCBhIERJU0NPTlQuCi0KLTIwMTAtMDEtMjAgMTE6MjI6MDQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiByZW5hbWUgc29tZSB2YXJpYWJsZQotCSAgUmVuYW1lIHRoZSBzZWVrX2V2ZW50IHZhcmlhYmxlIHRvIHNlZ19ldmVudCBiZWNhdXNlIGl0IHJlYWxseSBjb250YWlucyB0aGUKLQkgIG5ld3NlZ21lbnQgZXZlbnQgdGhhdCBuZWVkcyB0byBiZSBwdXNoZWQuCi0KLTIwMTAtMDEtMjAgMDA6NTQ6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMTRjZWM4OSB0byAxNWQ0N2E2Ci0KLTIwMTAtMDEtMTggMTQ6NDk6MjYgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IERvbid0IHNldCBwcm9maWxlLWxldmVsLWlkIGluIG91dCBjYXBzCi0JICBUaGUgcHJvZmlsZS1sZXZlbC1pZCByZXByZXNlbnRzIHJlc3RyaWN0aW9ucyBvbiB3aGF0IGNhbiBiZSBzZW50LCBpdCBkb2VzIG5vdAotCSAgZGVzY3JpYmUgdGhlIHN0cmVhbS4gU28gaXQgc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgc2luayBjYXBzIG9mIHRoZQotCSAgcGF5bG9hZGVyLCBub3QgdGhlIHNyYyBjYXBzLgotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzM1MwotCi0yMDEwLTAxLTE4IDE0OjQxOjEwIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBzZXRfb3V0Y2FwcwotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNzM1MwotCi0yMDEwLTAxLTE4IDE3OjQzOjQxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHlobWFjcm9zLmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmM6Ci0JICBkZWludGVybGFjZTogRml4IGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBoZWFkZXJzCi0KLTIwMTAtMDEtMTggMTQ6NTc6NDIgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkgIHY0bDI6IG1vdmUgR19FTkRfREVDTFMgdG8gdGhlIGVuZAotCi0yMDEwLTAxLTE4IDE0OjU1OjM4ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5oOgotCSAgdjRsMjogZml4IGJ1ZmZlcnBvb2wgZmlsZSBuYW1lcyBpbiBoZWFkZXIgY29tbWVudAotCi0yMDEwLTAxLTE1IDE4OjE1OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogYXZvaWQgc29tZSB0eXBlY2FzdGluZwotCi0yMDEwLTAxLTE1IDE4OjEzOjI0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogYXZvaWQgc29tZSB0eXBlIGNoZWNrcwotCi0yMDEwLTAxLTE1IDE4OjA5OjE1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBhdmlkZW11eDogZmFsbGJhY2sgdG8gYXZpaCBkdXJhdGlvbgotCSAgd2hlbiB3ZSBoYXZlIG5vdCB5ZXQgcGFyc2VkIHRoZSBpbmRleGVzIChpbiBwdXNoIG1vZGUsIGZvciBleGFtcGxlKSB1c2UKLQkgIHRoZSBkdXJhdGlvbiBhcyBnaXZlbiBpbiB0aGUgYXZpaCBoZWFkZXIgaW5zdGVhZCBvZiAtMS4KLQotMjAxMC0wMS0xNSAxMzozMjozMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGdfZnJlZSBpcyBOVUxMIHNhZmUKLQotMjAxMC0wMS0xNSAxMzoyNzo0MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHVzZSBERU1VWCBlcnJvcnMsIGluc3RlYWQgb2YgREVDT0RFCi0JICBxdGRlbXV4IHNob3VsZCB1c2UgREVNVVggZXJyb3JzLCBhbmQgbm90IERFQ09ERQotCSAgQ29uZmxpY3RzOgotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jCi0KLTIwMTAtMDEtMTQgMTk6MTY6MTkgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBNaW5vciByZWZhY3RvcgotCSAgUmVwbGFjZSByZXBlYXRlZCBjb2RlIHdpdGggYSBmdW5jdGlvbiBjYWxsCi0KLTIwMTAtMDEtMTQgMTc6MTE6MTMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogSGFuZGxlIGFub3RoZXIga2luZCBvZiByZWRpcmVjdCB0cmFrCi0JICBTb21lIHRyYWtzIG1pZ2h0IGNvbnRhaW4gYSByZWRpcmVjdCBydHNwIHVyaSBpbnNpZGUKLQkgIGhuZGwgYXRvbSAod2hpY2ggaXMgYSBkcmVmIGF0b20gZW50cnkpLiBUaGlzIGNvbW1pdCBtYWtlcyBxdGRlbXV4Ci0JICBwb3N0IGEgbWVzc2FnZSB3aGVuIGl0IGZpbmRzIG9uZSBvZiB0aGVzZSB0cmFrcyBhbmQgdGhlcmUgYXJlCi0JICBubyBvdGhlciB0cmFrcy4KLQkgIEZpeGVzICM1OTc0OTcKLQotMjAxMC0wMS0xNCAxNjoxMzowOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IFBvc3QgZXJyb3Igd2hlbiByZWFjaGluZyBFT1Mgd2l0aG91dCBwYWRzCi0JICBQb3N0IGFuIGVycm9yIHdoZW4gRU9TIGlzIHJlYWNoZWQgYW5kIHRoZXJlIGFyZSBubyBzcmMgcGFkcwotCi0yMDEwLTAxLTE0IDE0OjEzOjUwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRG8gbm90IHBvc3QgZW1wdHkgcmVkaXJlY3QgbWVzc2FnZXMKLQkgIFNvbWUgbWlzaW50ZXJwcmV0ZWQgZGF0YSBjb3VsZCByZXN1bHQgaW4gcG9zdGluZyByZWRpcmVjdCBtZXNzYWdlcwotCSAgd2l0aCBlbXB0eSByZWRpcmVjdCBzdHJpbmdzLiBJdCBpcyBiZXR0ZXIgbm90IHRvIHBvc3QgdGhlbS4KLQkgIEFuIGV4YW1wbGUgaXMgdGhlIGZpbGUgb24gYnVnICM1OTc0OTcKLQotMjAxMC0wMS0xNCAxODoxOToyNSArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogcG9saXNoIGxhc3QgYnVmZmVyIGVuZCB0aW1lIHVzYWdlCi0JICBUaGF0IGlzLCByZXNldCBpdCB1cG9uIHNlZWssIGFuZCBub3RlIHRoYXQgKHJhcmVseSkgbGFzdCBwdXNoZWQgYnVmZmVyCi0JICB0aW1lIG1pZ2h0IHByZWNlZGUgc2VnbWVudCBzdGFydC4KLQotMjAxMC0wMS0xMyAxNjo0ODo0NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9tbXguaDoKLQkgIHZpZGVvbWl4ZXI6IHVzZSAncScgY29uc3RyYWludCBpbnN0ZWFkIG9mICdyJwotCSAgVGhpcyBhdm9pZHMgdGhlICJiYWQgcmVnaXN0ZXIgbmFtZSBgJWRpbCciIGNvbXBpbGF0aW9uIGVycm9ycyBvbiAzMmJpdCB3aGVyZQotCSAgYmVjYXVzZSBvZiAncicgZ2NjIHB1dHMgdGhlIHZhbHVlIGluIGEgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVyIGFuZCB0aGVuIHRyaWVzCi0JICB0byBhY2Nlc3MgdGhlIGxvd2VyIHBhcnQgYXMgJWRpbC8lc2lsIHdoaWNoIGlzIG5vdCBleGlzdGluZyBvbiAzMmJpdC4gJ3EnIHJlcXVlc3RzCi0JICBhLWQgcmVnaXN0ZXJzCi0KLTIwMTAtMDEtMTMgMTY6NDQ6NTggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpOiBhZGQgbWlzc2luZyBpbmNsdWRlIGZvciBzc2NhbmYKLQotMjAxMC0wMS0xMyAwOTozNjowMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSAgZXF1YWxpemVyOiBGaXggcHJvcGVydHkgZGVzY3JpcHRpb24gZm9yIHRoZSAzcmQgYmFuZCBvZiB0aGUgMTBiYW5kIGVxdWFsaXplcgotCSAgVGhlIGZyZXF1ZW5jeSBpcyBhY3R1YWxseSAyMzcgSHosIG5vdCAyMjcgSHouCi0JICBGaXhlcyBidWcgIzYwNjY5Mi4KLQotMjAxMC0wMS0xMyAwOToyMjoyMCArMDEwMCAgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JICBhdWRpb2FtcGxpZnk6IEFsbG93IG5lZ2F0aXZlIGFtcGxpZmljYXRpb25zCi0JICBGaXhlcyBidWcgIzYwNjgwNy4KLQotMjAxMC0wMS0xMyAwOToxNzowNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2M6Ci0JICBhcGV2Mm11eDogRG9uJ3QgY2FsbCBjb25zdHJ1Y3RvcnMgZGlyZWN0bHksIHRoaXMgbGVhZHMgdG8gY29tcGlsZXIgZXJyb3JzIHdpdGggZ2NjIDQuNQotCi0yMDEwLTAxLTEyIDE3OjM5OjA1ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1c2UgR19HU0laRV9GT1JNQVQgZm9yIHBsYXRmb3JtIGluZGVwZW5kZW50IGdzaXplIHF1YWxpZmllcgotCSAgRml4ZXMgYnVpbGQgb24gbWFjb3N4Ci0KLTIwMTAtMDEtMTEgMTk6MDI6MzQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHJlZmFjdG9yIGVvcyBzZW5kaW5nIHdoZW4gcGF1c2luZyBsb29wCi0JICBBbHNvLCBwcmV2ZW50IGhhbmdpbmcgaWYgbm8gcGFkcyB5ZXQgb24gd2hpY2ggdG8gc2VuZCBlb3MgYnkKLQkgIHBvc3RpbmcgYSBtZXNzYWdlIGluc3RlYWQuCi0KLTIwMTAtMDEtMTEgMTc6NTA6MzUgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IHN0YW5kYXJkaXplIHNlZWsgaGFuZGxpbmcKLQkgIC4uLiB3aGljaCBpbXBsaWVzIGZpeGluZyBzb21lIGNvcm5lciBjYXNlcy4KLQotMjAxMC0wMS0xMSAxNToxNDowNiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiB1c2UgbW9yZSBnZW5lcmljIHhpcGhOX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEgaGVscGVyCi0KLTIwMTAtMDEtMTEgMTc6NTA6MDQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogcmVmbG93IGF1ZGlvIGFuZCB2aWRlbyBzZXRjYXBzIGFuZCBpbXByb3ZlIGxvZ2dpbmcKLQkgIEFsc28gZW5zdXJlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGF2YWlsYWJsZSBhcyB0aGV5IGFyZSBtYW5kYXRvcnkKLQkgIGluIG1hdHJvc2thIHNwZWNzLgotCi0yMDEwLTAxLTExIDExOjQyOjQzIC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IG9mZnNldCBmb3IgdHlwZSAyIG1wNGEgc291bmQgc2FtcGxlIGRlc2NyaXB0aW9ucy4KLQkgIEFsbG93cyB1cyB0byBjb3JyZWN0bHkgZmluZCB0aGUgZXNkcyAoYW5kIHRodXMgdGhlIGNvZGVjIGRhdGEpIGZvciBzdWNoCi0JICBtcDRhIGZpbGVzLgotCi0yMDEwLTAxLTExIDE1OjQ1OjQ5IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSAgcnRwbXA0ZyhkZSlwYXk6IE9ubHkgaGFuZGxlIHJhdyBhYWMKLQkgIHJ0cG1wNGcoZGUpcGF5IHNob3VsZCBvbmx5IGhhbmRsZSByYXcgQUFDIHN0cmVhbXMKLQotMjAxMC0wMS0xMSAxODo1OTo0MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIHZpZGVvbWl4ZXI6IEltcGxlbWVudCBiYXNpYyBRb1MKLQkgIFRoaXMgZHJvcHMgZnJhbWVzIGlmIHRoZXkncmUgdG9vIGxhdGUgYW55d2F5IGJlZm9yZSBibGVuZGluZyBhbmQgYWxsCi0JICB0aGF0IHN0YXJ0cyBidXQgUW9TIGV2ZW50cyBhcmUgbm90IGZvcndhcmRlZCB1cHN0cmVhbS4gSW4gdGhlIGZ1dHVyZQotCSAgdGhlIFFvUyBldmVudHMgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHNvbWVob3cgYW5kIGZvcndhcmRlZCB1cHN0cmVhbS4KLQotMjAxMC0wMS0xMSAxNDo0ODoyNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkgIHJ0cG1wNGEoZGUpcGF5OiBPbmx5IGFjY2VwdCByYXcgYWFjCi0JICBydHBtcDRhKGRlKXBheSBzaG91bGQgb25seSBoYW5kbGUgcmF3IGFhYyB0byBjb25mb3JtIHRvIHRoZSBSRkMKLQotMjAxMC0wMS0xMSAxODozNTo0NyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9tbXguaDoKLQkgIHZpZGVvbWl4ZXI6IEFkZCBNTVggaW1wbGVtZW50YXRpb25zIGZvciBJNDIwIGFuZCBhbGwgbm9uLWFscGhhIFJHQiBmb3JtYXRzCi0KLTIwMTAtMDEtMDQgMTA6MjQ6NDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZC5oOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYXl1di5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYmdyYS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfaTQyMC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfbW14Lmg6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9yZ2IuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIHZpZGVvbWl4ZXI6IFJlZmFjdG9yIHByb2Nlc3NpbmcgZnVuY3Rpb25zCi0JICBUaGlzIGFsbG93cyBlYXNpZXIgcGx1Z2dpbmcgb2Ygb3B0aW1pemVkIHByb2Nlc3NpbmcgZnVuY3Rpb25zCi0JICBpbiB0aGUgZnV0dXJlLCBsaWtlIGZvciBTU0Ugb3IgQWx0aVZlYy4KLQotMjAxMC0wMS0xMSAxMzoyNjozMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBhdmltdXg6IG1hdHJvc2thbXV4OiByZW5hbWUgYWFjJ3Mgc3RyZWFtLWZvcm1hdCB0byByYXcKLQkgIEFBQydzIG5vbmUgc3RyZWFtLWZvcm1hdCBoYXMgYmVlbiByZW5hbWVkIHRvIHJhdywgcmVuYW1lCi0JICBvbiBhdmltdXggYW5kIG1hdHJvc2thbXV4IGFzIHdlbGwKLQotMjAxMC0wMS0xMSAxMjowNzoyOSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBPbmx5IGFjY2VwdCByYXcgYWFjCi0JICBtYWtlcyBtYXRyb3NrYW11eCByZWplY3QgYWFjIHN0cmVhbXMgdGhhdCBhcmUgbm90Ci0JICBpbiByYXcgZm9ybWF0IChzdHJlYW0tZm9ybWF0PW5vbmUpCi0JICBGaXhlcyAjNTk4MzUwCi0KLTIwMTAtMDEtMTEgMTI6MDg6NTUgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBPbmx5IGFjY2VwdCByYXcgYWFjCi0JICBtYWtlcyBhdmltdXggcmVqZWN0IGFhYyBzdHJlYW1zIHRoYXQgYXJlIG5vdAotCSAgaW4gcmF3IGZvcm1hdCAoc3RyZWFtLWZvcm1hdD1ub25lKQotCSAgRml4ZXMgIzU5ODM1MAotCi0yMDEwLTAxLTExIDEwOjM4OjEwICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IE9vcHMuIFRoZSBncG9pbnRlciBjYXN0IGlzIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBjb25zdCBxdWFsaWZpZXJzIG9uIHRoZSBkYXRhIGVsZW1lbnRzCi0KLTIwMTAtMDEtMTEgMTA6MTc6NTQgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRGVidWcgLT4gaW5mbyBsZXZlbCBmb3IgYSBtZXNzYWdlIGZvciBiZW5jaG1hcmtpbmcgaW5kZXggcGFyc2luZwotCSAgVGhlIGV4dHJhIG1lc3NhZ2Ugb3V0cHV0IGF0IGhpZ2hlciBsZXZlbHMgYWZmZWN0cyB0aGUgYWNjdXJhY3kgb2YgdGhlCi0JICBiZW5jaG1hcmsuCi0KLTIwMTAtMDEtMTEgMTA6MDU6MTAgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRG9uJ3QgY2hlY2sgZm9yIE5VTEwgcG9pbnRlcnMgb3IgY2FzdCB0byBncG9pbnRlciBhcyB0aGlzIGlzIG5vdCBuZWVkZWQKLQotMjAxMC0wMS0wOCAxMzo1NTowNSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBSZWZhY3RvciBzdGJsIHN1Yi1hdG9tIGZyZWVpbmcuIEZyZWUgd2hlbiBpbmRleCBoYXMgYmVlbiBjb21wbGV0ZWx5IHBhcnNlZC4KLQotMjAxMC0wMS0wOCAxNDozMjowNiArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBdm9pZCB3aGl0ZXNwYWNlIGNvbW1pdHMgZHVlIHRvIGluY29uc2lzdGVudCBHTlUgaW5kZW50IGJlaGF2aW91cgotCi0yMDEwLTAxLTExIDAwOjEwOjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogcmVtb3ZlIG5ld2xpbmUgYXQgZW5kIG9mIGRlYnVnIHN0YXRlbWVudAotCi0yMDEwLTAxLTA4IDE5OjI2OjIxICswMTAwICBIYXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IENvbXBpbGVyIHdhcm5pbmcgZml4ZXMgZm9yIFdpbmRvd3MKLQkgIEp1c3Qgc2ltcGxlIG1pc3NpbmcgY2FzdHMKLQkgIEZpeGVzIGJ1ZyAjNjA2NDM4LgotCi0yMDEwLTAxLTA4IDE4OjA0OjE0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogZml4IHNlZWtwb2ludHMgcHJvcGVydHkgY29weS1hbmQtcGFzdGUgZG9jdW1lbnRhdGlvbgotCi0yMDEwLTAxLTA2IDE3OjA2OjUzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgZmxhY2VuYzogb3B0aW9uYWxseSBhZGQgYSBzZWVrIHRhYmxlCi0JICBBUEk6IEdzdEZsYWNFbmM6c2Vla3BvaW50cwotCSAgRml4ZXMgIzM1MTU5NS4KLQotMjAxMC0wMS0wOCAxMTozMzowMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBVc2UgbW9yZSBnbGliIGFuZCBiZSBzYWZlcgotCSAgQmUgc2FmZXIgb24gc3NjYW5mIGJ5IGxpbWl0aW5nIHN0cmluZyBmb3JtYXQgc2l6ZXMuCi0JICBSZW1vdmUgdXNlbGVzcyBwYXJhbWV0ZXIgYW5kIHVzZSBnX3N0cm5kdXAuCi0KLTIwMTAtMDEtMDggMTA6NDQ6NDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogU2ltcGxpZnlpbmcgY29kZQotCSAgR3JlYXRseSBzaW1wbGlmeSB0aGUgSURJVCBjaHVuayBoYW5kbGluZyBieSB1c2luZyBzc2NhbmYKLQkgIGluc3RlYWQgb2YgJ21hbnVhbGx5JyBwYXJzaW5nLiBBbHNvIHJlcGxhY2VzIHN0cm5jYXNlY21wIGFuZAotCSAgaXNfYWxwaGEvaXNfZGlnaXQgd2l0aCBnbGliIHZlcnNpb25zLgotCi0yMDEwLTAxLTA4IDEwOjE4OjMwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGl0J3MgZmViIGZvciBmZWJydWFyeQotCSAgRml4IHR5cG8gaW4gbGFzdCBjb21taXQuCi0KLTIwMTAtMDEtMDggMDk6MTc6MjIgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogUGFyc2UgYW5kIHBvc3QgSURJVCBkYXRlcwotCSAgUGFyc2VzIGFuZCBwb3N0IGRhdGUgdGFncyBjb250YWluZWQgaW4gSURJVCBjaHVua3MuCi0JICBGaXhlcyAjNTAzNTgyCi0KLTIwMTAtMDEtMDcgMTc6MjU6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2ZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmg6Ci0JICBhdWRpb2Z4YmFzZWZpcmZpbHRlcjogQWRkIHByb3BlcnR5IGZvciBub3QgZHJhaW5pbmcgdGhlIGhpc3Rvcnkgb24ga2VybmVsIGNoYW5nZXMKLQkgIEN1cnJlbnRseSB0aGlzIG9ubHkgd29ya3MgaWYgdGhlIGtlcm5lbCBzaXplIGRvZXNuJ3QgY2hhbmdlLCBpbiB0aGUgZnV0dXJlCi0JICBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUga2VybmVsIHNpemUgdG9vIHdpdGhvdXQgZHJhaW5pbmcKLQkgIHRoZSBjb21wbGV0ZSBoaXN0b3J5IGFuZCB3aXRob3V0IGxvb3NpbmcgYW55dGhpbmcuCi0JICBQYXJ0aWFsbHkgYmFzZWQgb24gYSBwYXRjaCBieQotCSAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLTIwMTAtMDEtMDcgMTY6NTg6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgcnRwaDI2NHBheTogcmVtb3ZlIHdlaXJkIG1lbWNtcCBjb2RlCi0JICBVc2UgcGxhaW4gbWVtY21wIGZvciBjb21wYXJpbmcgbWVtb3J5IGluc3RlYWQgb2YgdGhlIGN1c3RvbSBidWdneSBvbmUuCi0JICBGaXhlcyAjNjA2MTk4Ci0KLTIwMTAtMDEtMDcgMTU6Mzg6MzYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IGZpeCB0eXBvIGluICdtZXNzYWdlJyBwcm9wZXJ0eSBkZXNjcmlwdGlvbgotCi0yMDEwLTAxLTA2IDE0OjA2OjE0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogcmVhbGx5IHVzZSB1cHN0cmVhbSB0aW1lc3RhbXAgaWYgdGhlcmUgaXMgb25lCi0JICBTZWUvZml4ZXMgIzYwMzQ3MS4KLQotMjAxMC0wMS0wNiAxMzo0NTo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JICBydHBnNzI4cGF5OiByZW1vdmUgdW51c2VkIGFkYXB0ZXIgcGVlawotCi0yMDEwLTAxLTA1IDE5OjAwOjM1IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBJbXByb3ZlIHBhc3N0aHJvdWdoIHRlc3RzCi0JICBJbXByb3ZlIHBhc3N0aHJvdWdoIHRlc3RzIGJ5IGZvcmNpbmcgbW9yZSBzcGVjaWZpYwotCSAgaW50ZXJsYWNlZC9kZWludGVybGFjZWQgY2FwcyB0byBiZSB0ZXN0ZWQKLQotMjAxMC0wMS0wNSAxODoyMjo0OSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogQWRkcyBzb21lIGRvY3MgdG8gdGhlIG5ldyB0ZXN0cwotCSAgQWRkcyBzb21lIGRvY3MgZXhwbGFpbmluZyB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgb2YgdGhlIGNoZWNrCi0JICB0ZXN0cyBvZiBkZWludGVybGFjZQotCi0yMDEwLTAxLTA1IDE4OjE0OjA4IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBBZGRzIHRlc3RzIGZvciBwYXNzdGhyb3VnaAotCSAgQWRkcyB0ZXN0cyBmb3IgY2hlY2tpbmcgaWYgdGhlIGVsZW1lbnQgcmVhbGx5IGRvZXMKLQkgIHBhc3N0aHJvdWdoIGluIGRpc2FibGVkIG1vZGUgYW5kIGluIGF1dG8gKGlmIHRoZSBpbnB1dCBpcwotCSAgbm90IGludGVybGFjZWQpCi0KLTIwMTAtMDEtMDUgMDc6NTA6NTEgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogQWRkcyB0ZXN0cyBmb3IgY2FwcyBhY2NlcHRhbmNlCi0JICBBZGRzIGNoZWNrIHVuaXQgdGVzdHMgZm9yIGRlaW50ZXJsYWNlIGZvciB2YWxpZGF0aW5nCi0JICBjYXBzIGFjY2VwdGluZyBhbmQgdGhlIGV4cGVjdGVkIGNhcHMgb3V0cHV0IG9uIHRoZQotCSAgb3RoZXIgcGFkCi0KLTIwMTAtMDEtMDQgMTM6NDM6MDAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogQWRkcyBiYXNpYyBjaGVjayB0ZXN0Ci0JICBBZGRzIGEgYmFzaWMgY2hlY2sgdGVzdCBmb3IgZGVpbnRlcmxhY2UgZWxlbWVudAotCi0yMDEwLTAxLTA0IDE1OjQ0OjI4IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgc3VwcG9ydCBmb3Igd2F2ZS1zdHlsZSBhdWRpbyBpbiBxdC4KLQkgIFVzZXMgZ3N0cmlmZiB0byBwYXJzZSB0aGUgd2F2ZSBoZWFkZXJzIGFwcHJvcHJpYXRlbHkuIFRlc3RlZCB3aXRoIE1TLUFEUENNCi0JICBjb250ZW50LgotCi0yMDA5LTEyLTMxIDE3OjA5OjAzIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICB0ZXN0czogQWRkIEcuNzI5IFJUUCBwYXlsb2FkZXIvZGVwYXlsb2FkZXIgdGVzdAotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNjA1MAotCi0yMDA5LTEyLTMxIDE2OjUyOjMwIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSAgcnRwZzcyOXBheTogU2ltcGxpZnkgYWRhcHRlciB1c2FnZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwNjA1MAotCi0yMDA5LTEyLTMxIDE2OjI3OjMwIC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSAgcnRwZzcyOXBheTogU3VwcG9ydCBwdGltZSBmcm9tIGNhcHMKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDYwNTAKLQotMjAwOS0xMi0wMiAxOTozNToyMSArMDUzMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL1JFQURNRToKLQkgIHJ0cDogQWRkIG1heHB0aW1lIHRvIHRoZSBSRUFETUUKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MDYwNTAKLQotMjAxMC0wMS0wNSAxOTowMzowNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuaDoKLQkgIHJ0cGc3MjNkZXBheTogYWRkIEc3MjMgZGVwYXlsb2FkZXIKLQotMjAxMC0wMS0wNSAxOTowMjozOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5Lmg6Ci0JICBydHBnNzI5ZGVwYXk6IHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQotMjAxMC0wMS0wNSAxODozMzoyNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaDoKLQkgIHJ0cGc3MjNwYXk6IHJld3JpdGUgcGF5bG9hZGVyCi0JICBIYW5kbGUgYWxsIDMgcGFja2V0IHNpemVzIGFjY29yZGluZyB0byBSRkMgMzU1MS4KLQkgIFRvdGFsbHkgdW50ZXN0ZWQsIHdlIGRvbid0IGhhdmUgYSBHNzIzIGVuY29kZXIuCi0JICBGaXhlcyAjNjA1ODgyCi0KLTIwMTAtMDEtMDUgMTE6NDc6MjAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBjaHVuayBjb3VudGVyCi0KLTIwMTAtMDEtMDQgMTk6NDQ6NTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG1vcmUgd29yayBhdCByZWR1Y2luZyBsb29wIG92ZXJoZWFkCi0JICBUcnkgdG8gYXZvaWQgZGVyZWZzIHdoZW4gcGFyc2luZyB0aGUgaW5kZXguIFNhdmUgdGhlIHN0YXRlIGludG8gdGhlIHN0cnVjdHVyZXMKLQkgIHdoZW4gd2UgZXhpdCB0aGUgbG9vcCBpbnN0ZWFkIG9mIGZvciBlYWNoIGl0ZXJhdGlvbi4KLQotMjAxMC0wMS0wNCAxNjozMzozMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogY2xlYW51cHMgYW5kIG1ha2UgZHVyYXRpb24gbW9yZSBhY2N1cmF0ZQotCSAgTWFrZSB0aGUgUXREZW11eFNhbXBsZSBzdHJ1Y3Qgc21hbGxlciBieSBrZWVwaW5nIHRoZSBkdXJhdGlvbiBhbmQgdGhlIHB0c19vZmZzZXQKLQkgIGFzIHRoZWlyIDMyIGJpdCB2YWx1ZXMuCi0JICBNYWtlIHNvbWUgbWFjcm9zIHRvIGNhbGN1bGF0ZSBQVFMsIERUUyBhbmQgZHVyYXRpb24gb2YgYSBzYW1wbGUuCi0JICBEZXJlZiB0aGUgc2FtcGxlIGluZGV4IGxlc3Mgb2Z0ZW4gYnkga2VlcGluZyBhIHJlZiB0byB0aGUgc2FtcGxlIHdlJ3JlIGRlYWxpbmcKLQkgIHdpdGguCi0KLTIwMTAtMDEtMDQgMTM6NDE6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNpbXBsaWZ5IGxvZ2ljIHRvIGNhbGN1bGF0ZSBkdXJhdGlvbgotCSAgU2luY2Ugd2Ugbm8gbG9uZ2VyIHN0b3JlIHRoZSB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIGluIG5hbm9zZWNvbmRzLCB3ZSBjYW4gbm93Ci0JICBzaW1wbHkgc3RvcmUgdGhlIGR1cmF0aW9uIGFzLWlzLgotCi0yMDEwLTAxLTAxIDE2OjQyOjU3ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFN0b3JlIHRpbWVzdGFtcHMgaW4gbW92IGZvcm1hdCBpbiB0aGUgaW5kZXgKLQkgIFRoaXMgYWxsb3dzIGZhc3RlciBidWlsZGluZyBvZiB0aGUgaW5kZXggdXBvbiBzZWVrcyBzbyB0aGF0IHNjYWxpbmcgb2YKLQkgIHRpbWVzdGFtcHMgb25seSBvY2N1cnMgd2hlbiBhY3R1YWxseSBuZWVkZWQuCi0KLTIwMDktMTItMTggMTM6NTQ6NDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG1ha2Ugc2Vla2luZyBpbiBwdXNoIG1vZGUgd29yawotCSAgTW92ZSBzYW1wbGUgcG9zaXRpb24gY2hlY2tzIGludG8gcXRkZW11eF9wYXJzZV9zYW1wbGVzIHdoZXJlIHdlIGNhbiBwcm90ZWN0IGl0Ci0JICB3aXRoIGEgbG9jay4KLQkgIFJlZmFjdG9yIGFuZCBtYWtlIGFuIHF0ZGVtdXhfZW5zdXJlX2luZGV4IGZ1bmN0aW9uLgotCSAgUmVuYW1lIHF0ZGVtdXhfZG9fcHVzaF9zZWVrIHRvIHF0ZGVtdXhfc2Vla19vZmZzZXQgaW4gb3JkZXIgdG8gYXZvaWQgY29uZnVzaW9uCi0JICB3aXRoIGdzdF9xdGRlbXV4X2RvX3B1c2hfc2Vlay4KLQotMjAwOS0xMi0xOCAxMjo0NDoyNyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogbW92ZSBlcnJvciBjb2RlIG91dCBvZiBub3JtYWwgZmxvdwotCi0yMDA5LTExLTI0IDE2OjI3OjI2ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IEFkZCBwdXNoIG1vZGUgc2VlayBzdXBwb3J0IGZvciBzZWVraW5nIHRvIG9idGFpbiB0aGUgbW9vdiBhdG9tCi0KLTIwMTAtMDEtMDUgMTI6MjI6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBvbi1ucHQtc3RvcCBzaWduYWwgd2FybmluZ3MgZm9yIFJEVAotCSAgVGhlIFJEVCBtYW5hZ2VyIGRvZXMgbm90IGltcGxlbWVudCB0aGlzIHNpZ25hbCBzbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBpdCBiZWZvcmUKLQkgIHRyeWluZyB0byBjb25uZWN0IHRvIGl0LgotCi0yMDEwLTAxLTA1IDA5OjQ3OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogZml4IG1lbW9yeSBsZWFrIGluIG5ldyB1cmkgaGFuZGxlciBjb2RlCi0JICBEb24ndCBsZWFrIGEgc3RyaW5nIGV2ZXJ5dGltZSBnZXRfdXJpKCkgaXMgY2FsbGVkIGFuZCBhIGRldmljZQotCSAgaGFzIGJlZW4gc2V0LiBUaGVyZSdzIGEgbGltaXRlZCBudW1iZXIgb2YgZGV2aWNlcywgc28ganVzdAotCSAgaW50ZXJuIHRoZSBzdHJpbmcgaW5zdGVhZCBvZiBkb2luZyBtb3JlIGVsYWJvcmF0ZSBob3VzZWtlZXBpbmcKLQkgIGFuZCBzdG9yaW5nIGl0IGluIHRoZSBpbnN0YW5jZSBzdHJ1Y3Qgb3Igc28uCi0KLTIwMTAtMDEtMDEgMTQ6MTA6NDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogZml4IHR5cG8gaW4gd2FybmluZyBtZXNzYWdlCi0KLTIwMTAtMDEtMDQgMDk6Mjg6MzYgLTAzMDAgIFJvYmVydCBXZWlkbGljaCA8Z25vbWVidWd6aWxsYUByb2JlcnQud2VpZGxpY2guY2M+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSAgc2hvdXQyc2VuZDogQWRkICdwdWJsaWMnIHByb3BlcnR5Ci0JICBBZGRzIGEgcHJvcGVydHkgdG8gc2V0ICdwdWJsaWMnIGZsYWcgb24gbGlic2hvdXQsIG1ha2luZwotCSAgdGhlIHN0cmVhbSBsaXN0ZWQgb24gdGhlIHNlcnZlcidzIHN0cmVhbSBkaXJlY3RvcnkuCi0JICBGaXhlcyAjNjA1MjY5Ci0KLTIwMDktMTItMzAgMTQ6MTQ6NTUgKzA1MzAgIEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgdGFncyBmb3IgYXZlcmFnZSBhbmQgbWF4aW11bSBiaXRyYXRlCi0JICBGaXhlcyAjNTk5MzAwLgotCi0yMDA5LTEyLTI2IDE2OjU5OjE0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBkbyBub3QgdHJ5IHRvIGFsbG9jIHJlYWxseSBsYXJnZSBidWZmZXJzCi0JICBXaGVuIG5zYW1wbGVzX291dCBpcyBsYXJnZXIgdGhhbiBuc2FtcGxlc19pbiwgdXNpbmcgdW5zaWduZWQKLQkgIGludHMgbGVhZCB0byBhIG92ZXJmbG93IGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIHdyb25nIGFuZAotCSAgd2F5IHRvbyBsYXJnZSBmb3IgYWxsb2NhdGluZyBhIGJ1ZmZlci4gVXNlIHNpZ25lZCBpbnRlZ2VycwotCSAgYW5kIHJldHVybmluZyBpbW1lZGlhdGVsbHkgd2hlbiB0aGF0IGhhcHBlbnMuCi0KLTIwMDktMTItMjUgMTI6Mzg6MzUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2F5dXYuYzoKLQkgIHZpZGVvbWl4ZXI6IG9wdGltaXplIGJsZW5kIGNvZGUgc29tZSBtb3JlCi0JICBVc2UgbW9yZSBlZmZpY2llbnQgZm9ybXVsYSB0aGF0IHVzZXMgbGVzcyBtdWx0aXBsaWVzLgotCSAgUmVkdWNlIHRoZSBhbW91bnQgb2Ygc2NhbGFyIGNvZGUsIHVzZSBNTVggdG8gY2FsY3VsYXRlIHRoZSBkZXNpcmVkCi0JICBhbHBoYSB2YWx1ZS4KLQkgIFVucm9sbCBhbmQgaGFuZGxlIDIgcGl4ZWxzIGluIG9uZSBpdGVyYXRpb24gZm9yIGltcHJvdmVkIHBhaXJpbmcuCi0KLTIwMDktMTItMjQgMjI6NTk6MDkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2F5dXYuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2JncmEuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2k0MjAuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX3JnYi5jOgotCSAgdmlkZW9taXhlcjogc2NhbGUgYW5kIGNsYW1wCi0JICBTY2FsZSBhbmQgY2xhbXAgdG8gdGhlIG1heCBhbHBoYSB2YWx1ZXMuCi0KLTIwMDktMTItMjQgMjI6NTA6MzEgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgYWxwaGE6IHNjYWxlIGFuZCBjbGFtcCBhbHBoYSB0byBpdHMgZnVsbCBleHRlbmQKLQkgIENvbnZlcnQgdGhlIGFscGhhIHZhbHVlIHRvIDAtPjI1NSB3aGVuIHNldHRpbmcgYW5kIHRvIDAtPjI1NiB3aGVuIHVzaW5nIGFzCi0JICBhIHNjYWxpbmcgZmFjdG9yLiBUaGlzIG1ha2VzIHN1cmUgd2UgY2FuIHJlYWNoIHRoZSBmdWxsIG9wYWNpdHkgdmFsdWUgb2YgMHhmZiBpbgotCSAgYWxsIGNhc2VzLgotCi0yMDA5LTEyLTI0IDIyOjIzOjAxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggc29tZSBjb21tZW50cywgcmVtb3ZlIHByb3BlcnR5IGNoZWNrCi0JICBGaXggc29tZSBjb21tZW50cywgY2xhcmlmeSBzb21lIEZJWE1FcwotCSAgUmVtb3ZlIHRoZSBvbi1udHAtc3RvcCBzaWduYWwgY2hlY2sgbm93IHRoYXQgdGhlIGppdHRlcmJ1ZmZlciBpcyBpbgotCSAgLWdvb2QgYW5kIHdlIGtub3cgdGhhdCBpdCBzdXBwb3J0cyB0aGlzIHNpZ25hbC4KLQotMjAwOS0xMi0yNCAyMDoyNzo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogc29tZSB0cml2aWFsIGNsZWFudXBzCi0KLTIwMDktMTItMjQgMTc6MDQ6MjggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBQYXJzZSBhbGwgcnRwaW5mbyBlbnRyaWVzCi0JICBEbyBub3QgZm9yZ2V0IHRvIHBhcnNlIGFsbCBydHAtaW5mbyBlbnRyaWVzLCBpbnN0ZWFkIG9mCi0JICBwYXJzaW5nIHRoZSBmaXJzdCBvbmUgb25seS4KLQkgIEZpeGVzICM2MDUyMjIKLQotMjAwOS0xMi0yMiAxMjo0NDo1MCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHBlcmYgdGFnIHNob3VsZCBtYXAgdG8gR1NUX1RBR19BUlRJU1QKLQotMjAwOS0xMi0yNCAxNzowMzowMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogZml4IHdlaXJkIGluZGVudGF0aW9uCi0KLTIwMDktMTItMjQgMTc6MDE6NTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgIHJ0cGgyNjNwcGF5OiB1c2UgZmFzdGVyIF9hZGFwdGVyX2NvcHkoKSB3aGVtIHBvc3NpYmxlCi0KLTIwMDktMTItMjQgMTc6MDE6MTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvZmlyZmlsdGVyLWV4YW1wbGUuYzoKLQkgIHRlc3RzOiB1c2UgcmlnaHQgdHlwZSB3aGVuIHBhc3NpbmcgdmFyYXJnIHZhbHVlCi0KLTIwMDktMTItMjMgMTc6NTA6MzQgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBmbGFjZGVjOiB1c2UgYSBzaW5nbGUgZGVjb2RlciBmaWVsZCBmb3IgYm90aCBwdXNoIGFuZCBwdWxsIG1vZGUKLQotMjAwOS0xMi0yMyAxNzowMzozMiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IGZpeCBwb3NzaWJsZSBoYW5naW5nIGluIHB1bGwgbW9kZSBzZWVraW5nCi0JICBBIHNlZWsgaW4gbXVsdGktc2luayBwaXBlbGluZSB0eXBpY2FsbHkgbGVhZHMgdG8gc2V2ZXJhbCBzZWVrIGV2ZW50cyBpbiBhIHJvdywKLQkgIHdoaWNoIGNvdWxkIGxlYWQgdG8gc2VuZGluZyBzZXZlcmFsIG5ld3NlZ21lbnRzIGluIGEgcm93IHdpdGhvdXQgaW50ZXJtZWRpYXRlCi0JICBmbHVzaGluZy4gIFRoZXNlIHdvdWxkIHRoZW4gYWNjdW11bGF0ZSwgZGlzdG9ydCByZW5kZXJpbmcgdGltZXMgYW5kIGFzIHN1Y2gKLQkgIGxlYWQgdG8gJ2hhbmdpbmcnLgotCi0yMDA5LTEyLTIzIDE5OjM5OjA1ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHBoMjY0cGF5OiBmaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZQotCi0yMDA5LTEyLTIzIDEzOjA5OjU0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYnZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHJ0cDogdXNlIGJvaWxlcnBsYXRlCi0KLTIwMDktMTItMjMgMDA6Mzg6MDUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5oOgotCSAgcnRwTDE2cGF5OiBjb252ZXJ0IHRvIGJhc2VhdWRpb3BheWxvYWQKLQkgIFVzZSBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkIGFzIHRoZSBiYXNlIGNsYXNzLiBUaGlzIHNhdmVzIGEgbG90IG9mIGNvZGUgYW5kIGZpeGVzCi0JICBhIGJ1bmNoIG9mIHByb2JsZW1zIHRoYXQgd2VyZSBhbHJlYWR5IHNvbHZlZCBpbiB0aGUgYmFzZSBjbGFzcy4KLQkgIEZpeGVzICM4NTMzNjcKLQotMjAwOS0xMi0yMyAwMDozMDo0OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JICBydHBwY21hcGF5OiB0aGUgYm9pbGVycGxhdGUgbWFjcm8gc2V0cyBwYXJlbnRfY2xhc3MKLQotMjAwOS0xMi0yMiAyMjoyNzoyMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHJ0cGJpbjogYXZvaWQgc29tZSBzdHJ1Y3R1cmUgY29waWVzCi0JICBEb24ndCBtYWtlIGNvcGllZCBpbiB0aGUgZ2V0dGVyIGFuZCBzZXR0ZXIgZm9yIFNERVMgaW4gdGhlIFJUUFNvdXJjZS4gVGhpcwotCSAgYXZvaWRzIGEgY291cGxlIG9mIGNvcGllcyBvZiB0aGUgU0RFUyBzdHJ1Y3R1cmUgd2hlbiBnZW5lcmF0aW5nIFJUQ1AKLQkgIHBhY2tldHMuCi0KLTIwMDktMDgtMzEgMTg6NDI6MjUgKzAyMDAgIFBhc2NhbCBCdWhsZXIgPHBhc2NhbC5idWhsZXJAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgcnRwbWFuYWdlcjogaW1wcm92ZSBTREVTIGhhbmRsaW5nCi0JICBTdG9yZSBTREVTIGludGVybmFsbHkgYXMgYSBzdHJ1Y3QgdG8gc3VwcG9ydCBtdWx0aXBsZSBQUklWIHZhbHVlcy4KLQkgIEluY2x1ZGUgYWxsIHZhbHVlcyBzZXQgaW4gU0RFUyBzdHJ1Y3Qgd2hlbiBzZW5kaW5nIFJUQ1AgU0RFUy4KLQotMjAwOS0xMi0yMiAxNDo0MTozNSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzoKLQkgIHJ0cGgyNjNkZXBheTogYWRkIHNvbWUgZml4bWVzCi0KLTIwMDktMTItMjIgMTQ6MzU6MTMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmM6Ci0JICBydHBoMjYzZGVwYXk6IGJhc2VjbGFzcyBoYW5kbGVzIHRpbWVzdGFtcHMgZm9yIHVzCi0KLTIwMDktMTItMjIgMTQ6Mjc6NDAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmM6Ci0JICBydHBoMjYzZGVwYXk6IHJlc2V0IHN0YXJ0IHZhcmlhYmxlIHByb3Blcmx5Ci0KLTIwMDktMDUtMjkgMTU6NDk6MjcgKzAzMDAgIE1hcmNvIEJhbGxlc2lvIDxtYXJjby5iYWxsZXNpb0Bub2tpYS5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5oOgotCSAgRHJvcCB0aGUgd2hvbGUgZnJhbWUgaWYgYSBwYWNrZXQgaXMgbG9zdC4KLQkgIEZpeGVzICM1ODI1NzUKLQotMjAwOS0xMi0yMSAyMDozOTo1MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IGFkZCBvcHRpb24gdG8gaW5zZXJ0IFBQUy9TUFMgaW4gc3RyZWFtcwotCSAgQWRkIGEgbmV3IHNwc3Bwcy1pbnRlcnZhbCBwcm9wZXJ0eSB0byBpbnN0cnVjdCB0aGUgcGF5bG9hZGVyIHRvIGluc2VydAotCSAgU1BTIGFuZCBQUFMgYXQgcGVyaW9kaWMgaW50ZXJ2YWxzIGluIHRoZSBzdHJlYW0uCi0JICBSZXdvcmsgdGhlIFNQUy9QUFMgaGFuZGxpbmcgc28gdGhhdCBieXRlc3RyZWFtIGFuZCBBVkMgc2FtcGxlIGNvZGUgYm90aCB1c2UgdGhlCi0JICBzYW1lIGNvZGUgcGF0aHMgdG8gaGFuZGxlIHNwcm9wLXBhcmFtZXRlci1zZXRzLiBUaGlzIGFsc28gYWxsb3dzIHRvIGhhdmUgdGhlIEFWQwotCSAgY29kZSB0byBpbnNlcnQgU1BTL1BQUyBsaWtlIHRoZSBieXRlc3RyZWFtIGNvZGUuCi0JICBGaXhlcyAjNjA0OTEzCi0KLTIwMDktMTItMjEgMTk6MTI6MjIgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNDdjYjIzYSB0byAxNGNlYzg5Ci0KLTIwMDktMTItMjEgMTI6MDE6NTMgLTAzMDAgIEpvbmF0aGFuIENvbmRlciA8akBza3Vydnkubm8taXAub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF90eXBlcy5jOgotCSAgcXRkZW11eDogQWRkcyBuZXcgdGFncwotCSAgQWRkcyBzb21lIG5ldyB0YWdzIG1hcHBpbmcgdG8gcXRkZW11eC4KLQkgIEZpeGVzICM1OTk3NTkKLQotMjAwOS0xMi0yMSAxNTowNTowOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGFkZCBwcm9wZXJ0eSB0byByZW1vdmUgcGFkcyBhdXRvbWF0aWNhbGx5Ci0JICBBZGQgYSBwcm9wZXJ0eSBjYWxsZWQgYXV0b3JlbW92ZSB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcGFkcyBvZiBzb3VyY2VzCi0JICB0aGF0IHRpbWVkIG91dC4KLQkgIEZpeGVzICM1NTQ4MzkKLQotMjAwOS0xMi0yMSAxNDo1NToxNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBzc3JjZGVtdXg6IGZpeCBjb21wYXJpc29uCi0JICBBIE5VTEwgbWVhbnMgbm8gcGFkIHdhcyBmb3VuZC4KLQotMjAwOS0xMS0wOCAxMTo0OToxNCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgdjRsMnNyYzogQWRkIEdzdFVSSUhhbmRsZXIgaW50ZXJmYWNlLiBGaXhlcyAjNjAxMTQzCi0JICBUaGlzIGFsbG93cyB1c2luZyB2NGwyOi8vWzxkZXZpY2U+XQotCi0yMDA5LTEyLTIwIDE3OjI0OjQ3IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IHBhc3MgbGVuZ3RoIHBhcmFtZXRlciB0byBnX2NvbnZlcnQKLQotMjAwOS0xMi0xOCAxMjo0NDo1MCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYTogRml4IHVuaXRpYWxpemVkIHZhcmlhYmxlLgotCSAgWWVzLCBpdCdzIHN0dXBpZCwgYnV0IG1hY29zeCBjb21waWxlcnMgYXJlIGV2ZW4gbW9yZSBzdHVwaWQuCi0KLTIwMDktMTItMTcgMTY6MDE6MjUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9heXV2LmM6Ci0JICB2aWRlb21peGVyOiBGaXggYXNzZW1ibHkgY29tcGlsYXRpb24gb24geDg2Ci0JICBGaXhlcyBidWcgIzYwNDgxNC4KLQotMjAwOS0xMi0xNyAxNzozNzowMyArMDEwMCAgQnJhbmtvIMSMaWJlaiA8YnJhbmUgYXQgeGJjLm51PgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM6Ci0JICByZ2FuYWx5c2lzOiBmaXggdGltZXN0YW1wIHJvdW5kaW5nCi0JICBVc2Ugc2NhbGluZyBmdW5jdGlvbiB0byByb3VuZCBhbmQgYXZvaWQgb3ZlcmZsb3dzLgotCSAgRml4ZXMgIzYwNDM1MgotCi0yMDA5LTEyLTE3IDE3OjI3OjQyICswMTAwICBUaWFnbyBLYXRjaXBpcyA8dGlhZ28ua2F0Y2lwaXNAZGlnaXRyby5jb20uYnI+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaDoKLQkgIHJ0cDogYWRkIEc3MjMgcGF5bG9hZGVyCi0JICBGaXhlcyAjNTk3ODIzCi0KLTIwMDktMTItMTcgMTY6MjI6NTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIHF0ZGVtdXg6IEZpeCBBTEFDIGNvZGVjX2RhdGEgcGFyc2luZwotCSAgRml4ZXMgIzYwNDYxMQotCi0yMDA5LTEyLTE2IDE3OjI4OjMwIC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogUmVtb3ZlIGNwcCBzdHlsZSBjb21lbnRzCi0JICBSZW1vdmVzIC8vIGNvbW1lbnRzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCAvKiAqLyBjb21tZW50cwotCi0yMDA5LTEyLTE2IDEyOjQ4OjAyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IGFsc28gY29uc2lkZXIgQmxvY2tOdW1iZXIgaW5kaWNhdGVkIGluIGluZGV4IHdoZW4gc2Vla2luZwotCi0yMDA5LTEyLTE2IDEyOjQzOjI3ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IHN1cHBvcnQgcHVzaCBiYXNlZCBtb2RlCi0JICBGaXhlcyAjNTk4NjEwLgotCi0yMDA5LTEyLTE2IDEyOjQ0OjM2ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSAgbWF0cm9za2FkZW11eDogZml4IGVibWwgcmVhZCBjYWNoZSB1c2FnZQotCi0yMDA5LTEyLTE2IDEwOjUwOjMyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYXl1di5jOgotCSAgdmlkZW9taXhlcjogVXNlIG1vdnpibCBpbnN0ZWFkIG9mIG1vdnp4YiBmb3IgbW92aW5nIG9uZSBieXRlIHRvIGEgbCByZWdpc3RlcgotCSAgRm9yIHNvbWUgcmVhc29uIGxhdGVzdCBnY2MvYmludXRpbHMgYWNjZXB0IG1vdnp4YiBoZXJlIHdoaWxlCi0JICBtb3Z6Ymwgd291bGQgYmUgY29ycmVjdCBhbmQgaXMgdGhlIG9ubHkgdGhpbmcgYWNjZXB0ZWQgYnkgb2xkZXIKLQkgIGdjYy9iaW51dGlscy4KLQkgIEZpeGVzIGJ1ZyAjNjA0Njc5LgotCi0yMDA5LTEyLTE2IDA2OjU5OjAxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYXl1di5jOgotCSAgdmlkZW9taXhlcjogc3JjL2Rlc3QgYXJlIGlucHV0IGFuZCBvdXRwdXQgb2YgdGhlIEFZVVYgYmxlbmRpbmcgTU1YIGFzc2VtYmxlcgotCi0yMDA5LTEyLTE1IDE4OjE4OjU0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuYzoKLQkgIGF1ZGlvd3NpbmNiYW5kOiBVc2UgdGhlIHNhbWUgdXBwZXIgbGVuZ3RoIGxpbWl0IGFzIGF1ZGlvd3NpbmNsaW1pdAotCi0yMDA5LTEyLTEyIDE3OjAwOjUwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgYXVkaW93c2luY3tsaW1pdCxiYW5kfTogQWxsb3cgbXVjaCBsYXJnZXIgZmlsdGVyIGxlbmd0aHMgbm93Ci0KLTIwMDktMTItMTEgMTI6Mjc6MzIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSAgYXVkaW9meGJhc2VmaXJmaWx0ZXI6IEZpeCBmcmVxdWVuY3kgcmVzcG9uc2UgY2FsY3VsYXRpb24KLQotMjAwOS0xMi0wOCAxNDo1NzowMiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4YmFzZWZpcmZpbHRlcjogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMKLQotMjAwOS0xMi0wNiAxNjo1ODo1MSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JICBhdWRpb2Z4YmFzZWZpcmZpbHRlcjogQWRkIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlvbnMgZm9yIE1vbm8vU3RlcmVvCi0JICBUaGlzIHByb3ZpZGVzIGFub3RoZXIgNyUgc3BlZWR1cCBmb3IgdGhlIHRpbWUgZG9tYWluIGNvbnZvbHV0aW9uIGFuZCAxLjUlCi0JICBzcGVlZHVwIGZvciB0aGUgRkZUIGNvbnZvbHV0aW9uIG9uIE1vbm8gaW5wdXQuCi0JICBUaGlzIG9wdGltaXphdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGNvbXBpbGVyIHNpbXBsaWZpZXMgY2FsY3VsYXRpb25zCi0JICBhbmQgY29uZGl0aW9ucyBvbiBjb25zdGFudCBudW1iZXJzIGFuZCB1bnJvbGxzIGxvb3BzIHdpdGggYSBjb25zdGFudAotCSAgbnVtYmVyIG9mIHJlcGVhdHMuCi0KLTIwMDktMTItMDQgMDk6MjU6NDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaDoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBBZGQgYSAibG93LWxhdGVuY3kiIG1vZGUKLQkgIFRoaXMgd2lsbCBhbHdheXMgdXNlIHRpbWUtZG9tYWluIGNvbnZvbHV0aW9uLCB3aGljaCBsb3dlcnMgdGhlIGxhdGVuY3kuCi0JICBXaXRoIEZGVCBjb252b2x1dGlvbiBpdCdzIGFsd2F5cyBhIG11bHRpcGxlIG9mIHRoZSBrZXJuZWwgbGVuZ3RoLAotCSAgd2l0aCB0aW1lIGRvbWFpbiBjb252b2x1dGlvbiBpdCdzIG9ubHkgdGhlIHByZS1sYXRlbmN5IG9mIHRoZSBmaWx0ZXIga2VybmVsLgotCi0yMDA5LTEyLTA0IDA5OjAwOjIyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBSZW1vdmUgb2Jzb2xldGUgVE9ETyBjb21tZW50cwotCi0yMDA5LTEyLTAzIDIwOjEyOjAxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBVc2Ugc2FtcGxlcyBldmVyeXdoZXJlIGluc3RlYWQgb2Ygc2FtcGxlcypjaGFubmVscyBzb21ldGltZXMKLQotMjAwOS0xMi0wMyAxNzoyNzoxMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmg6Ci0JICBhdWRpb2Z4YmFzZWZpcmZpbHRlcjogRkZUIGNvbnZvbHV0aW9uIGltcGxlbWVudGF0aW9uCi0JICBUaGlzIHByb3ZpZGVzIGEgZ3JlYXQgc3BlZWR1cCwgZXNwZWNpYWxseSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4ga2VybmVsCi0JICBsZW5ndGggYW5kIHByb2Nlc3Npbmcgc2l6ZSBpcyBub3cgbG9nYXJpdGhtaWMgaW5zdGVhZCBvZiBsaW5lYXIuIEJlbG93IGEKLQkgIGtlcm5lbCBzaXplIG9mIDMyIGl0J3MgYSBiaXQgc2xvd2VyLCBhZnRlcndhcmRzIGl0J3MgbXVjaCBmYXN0ZXI6Ci0JICAxNyAgICAgMC43ODgwMDAgLT4gMC45NTAwMDAKLQkgIDMzICAgICAxLjIwODAwMCAtPiAxLjE0NjAwMAotCSAgNjUgICAgIDIuMTY2MDAwIC0+IDEuMTQ2MDAwCi0JICAuLi4KLQkgIDQwOTcgMTA3LjQ0NDAwMCAtPiAxLjUwODAwMAotCSAgRm9yIHNpemVzIHNtYWxsZXIgMzIgdGhlIG5vcm1hbCB0aW1lLWRvbWFpbiBjb252b2x1dGlvbiBpcyBjaG9zZW4sCi0JICBmb3IgbGFyZ2VyIHNpemVzIHRoZSBGRlQgY29udm9sdXRpb24gaXMgYXV0b21hdGljYWxseSB1c2VkLgotCSAgRml4ZXMgYnVnICM1OTQzODEuCi0KLTIwMDktMTEtMjcgMjA6MzM6MTQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaDoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBNYWtlIG1vc3QgY29kZSBwYXJ0cyBpbmRlcGVuZGVudCBvZiB0aGUgcHJvY2Vzc2luZyBmdW5jdGlvbnMgYW5kIHVzZWQgY29udm9sdXRpb24gYWxnb3JpdGhtCi0JICBPbmx5IHJlbWFpbmluZyBwYXJ0IGlzIHRoZSByZXNpZHVlIHB1c2hpbmcsIHdoaWNoIHdpbGwgYmUgZml4ZWQgbGF0ZXIuCi0KLTIwMDktMTEtMjYgMTU6MTc6MjcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSAgYXVkaW9meGJhc2VmaXJmaWx0ZXI6IE9wdGltaXplIHRpbWUtZG9tYWluIGNvbnZvbHV0aW9uCi0JICBSZW1vdmUgc29tZSByZWR1bmRhbnQgY2FsY3VsYXRpb25zLCBtb3ZlIGNvbXBhcmlzaW9ucyBvdXQgb2YKLQkgIGlubmVyIGxvb3BzLCBldGMuCi0JICBUaGlzIG1ha2VzIHRoZSBjb252b2x1dGlvbiBhYm91dCAzICghKSB0aW1lcyBmYXN0ZXIgYnV0Ci0JICBwcm9jZXNzaW5nIHRpbWUgaXMgb2YgY291cnNlIHN0aWxsIHByb3BvcnRpb25hbCB0byB0aGUKLQkgIGZpbHRlciBzaXplLgotCi0yMDA5LTExLTI2IDEwOjQ1OjM3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIGF1ZGlvZnhiYXNlZmlyZmlsdGVyOiBVc2UgX0NBU1QgbWFjcm9zIGluIHNvbWUgcGxhY2VzIGFuZCBkbyBzb21lIGNhbGN1bGF0aW9ucyBvbmx5IG9uY2UKLQotMjAwOS0xMS0yNSAxODoxMjowNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5oOgotCSAgYXVkaW9meGJhc2VmaXJmaWx0ZXI6IFJld3JpdGUgdGltZXN0YW1wIHRyYWNraW5nCi0JICBJdCdzIG11Y2ggc2ltcGxlciBub3cgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFjY3VtdWxhdGluZyByb3VuZGluZwotCSAgZXJyb3JzLgotCi0yMDA5LTExLTI1IDE3OjM5OjUzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmg6Ci0JICBhdWRpb2Z4YmFzZWZpcmZpbHRlcjogUmVuYW1lIHNvbWUgdmFyaWFibGVzIGFuZCBjaGFuZ2UgY29tbWVudHMKLQotMjAwOS0xMS0yNCAyMDowNjoyNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5oOgotCSAgYXVkaW9meGJhc2VmaXJmaWx0ZXI6IEFkZCBjb25zdCBxdWFsaWZpZXIgdG8gdGhlIHNvdXJjZSBkYXRhIGFycmF5Ci0KLTIwMDktMTItMTQgMjA6MDg6MDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2F5dXYuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IEFkZCBNTVggaW1wbGVtZW50YXRpb25zIG9mIHRoZSBBWVVWIGJsZW5kaW5nIGFuZCBjb2xvciBmaWxsaW5nIGZ1bmN0aW9ucwotCSAgVGhpcyBwcm92aWRlcyBhIDIwJSBzcGVlZHVwIGZvciBibGVuZGluZyBhbmQgMTAwJSBmb3IgY29sb3IgZmlsbGluZy4KLQkgIFRoZSBibGVuZGluZyBjYW4gcHJvYmFibHkgYmUgb3B0aW1pemVkIGV2ZW4gbW9yZS4KLQotMjAwOS0xMi0xMyAxMzoxOTo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOgotCSAgaWQzZGVtdXg6IHByZWZlciB0d28gbGV0dGVyIElTTyA2MzktMSBjb2RlIGZvciBleHRlbmRlZCBjb21tZW50Ci0KLTIwMDktMTItMTMgMTM6MTA6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggdXAgbGFuZ3VhZ2UgY29kZSBleHRyYWN0aW9uIHNvbWUgbW9yZQotCSAgUXVpY2t0aW1lIHVzZXMgSVNPIDYzOS0yIGZvciBsYW5ndWFnZSBjb2RlcywgYnV0IEdTVF9UQUdfTEFOR1VBR0UKLQkgIGlzIHN1cHBvc2VkIHRvIGhvbGQgYSBJU08gNjM5LTEgY29kZSwgc28gY29udmVydCBhcyBuZWVkZWQgdXNpbmcKLQkgIHRoZSBuZXcgQVBJIGZyb20gLWJhc2UuCi0JICBTZWUgIzYwMjEyNi4KLQotMjAwOS0xMi0xMyAxMjo0NToyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IGZpeCBsYW5ndWFnZSBjb2RlIHdyaXRpbmcgYW5kIGV4dHJhY3Rpb24KLQkgIE1hdHJvc2thIHVzZXMgdGhyZWUtbGV0dGVyIElTTyA2MzktMkIgY29kZXMsIGJ1dCBHU1RfVEFHX0xBTkdVQUdFIGlzCi0JICBzdXBwb3NlZCB0byBjb250YWluIHR3by1sZXR0ZXIgSVNPIDYzOS0xIGNvZGVzLCBzbyB1c2UgbmV3IGxhbmd1YWdlCi0JICBjb2RlIG1hcHBpbmcgZnVuY3Rpb25zIGluIC1iYXNlIHRvIGNvbnZlcnQgYmV0d2VlbiB0aG9zZSB0d28gYXMKLQkgIG5lZWRlZC4KLQkgIEZpeGVzICM1MDU4MjMuCi0KLTIwMDktMTItMDcgMjA6NTQ6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogbWlub3IgZGVidWcgbWVzc2FnZSBjaGFuZ2VzCi0JICBGaXggdXAgYSBmZXcgZGVidWcgbWVzc2FnZXMgc28gdGhhdCBpdCdzIGNsZWFyZXIgd2hhdCB0aGV5IG1lYW4uCi0KLTIwMDktMTItMTIgMTc6NDQ6MDQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBSZXZlcnQgInF0ZGVtdXg6IENvcnJlY3RseSBwYXJzZSBjbGFzc2lmaWNhdGlvbiB0YWdzIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCBjZDg4M2FhNjBjMTEzMzE5NmE2YWUwNTI4ODRkMTVjMjk1YzM3ZGRlLgotCSAgUHJldmlvdXMgY29kZSB3YXMgY29ycmVjdCwgNCBpcyBkdWUgdG8gdGFibGUgYW5kIGxhbmd1YWdlIGNvZGUsCi0JICBub3Qgb25seSBsYW5ndWFnZSBjb2RlCi0KLTIwMDktMTItMTIgMTY6Mjg6MzYgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBDb3JyZWN0bHkgcGFyc2UgY2xhc3NpZmljYXRpb24gdGFncwotCSAgSW4gY2xzZiBhdG9tcywgdGhlIGxhbmd1YWdlIGNvZGUgaXMgMiBieXRlcyBsb25nLCBub3QgNC4KLQotMjAwOS0xMi0xMiAxNjo1NToxMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IERlcXVldWUgY3VycmVudCBidWZmZXIgb24gRkxVU0hfU1RPUCBhbmQgZG9uJ3QgdW5yZWYgTlVMTCBidWZmZXJzCi0JICAuLi4gTlVMTCBidWZmZXJzIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuIGFueW1vcmUgd2hlbiBwb3BwaW5nIHRoZQotCSAgYnVmZmVyIGZyb20gR3N0Q29sbGVjdFBhZHMgYnV0IGJldHRlciBjaGVjayBmb3IgdGhpcyBhbmQgcHJpbnQgYSB3YXJuaW5nLgotCi0yMDA5LTEyLTExIDEzOjExOjEyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfaTQyMC5jOgotCSAgdmlkZW9taXhlcjogRml4IHN0dXBpZCBtaXN0YWtlIGluIGxhc3QgY29tbWl0Ci0KLTIwMDktMTItMTEgMTI6MzU6NTkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9pNDIwLmM6Ci0JICB2aWRlb21peGVyOiBEb24ndCBkbyBmbG9hdGluZyBwb2ludCBtYXRoIGluIHRoZSBpbm5lciBwcm9jZXNzaW5nIGxvb3AgZm9yIEk0MjAgYmxlbmRpbmcKLQotMjAwOS0xMi0xMCAxODo0Mzo0NCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogaGFuZGxlIE5VTEwgYW5kIGVtcHR5IHRyYW5zcG9ydCBzdHJpbmdzCi0JICBXaGVuIGFuIFJUU1AgZXh0ZW5zaW9uIHJldHVybnMgTlVMTCBvciBhbiBlbXB0eSB0cmFuc3BvcnQgc3RyaW5nLCBqdXN0IGlnbm9yZSBpdAotCSAgYW5kIHRyeSB0byBnZXQgdGhlIG5leHQgcG9zc2libGUgdHJhbnNwb3J0LiBGaXhlcyBwbGF5YmFjayBvZiBSZWFsTWVkaWEgc3RyZWFtcy4KLQotMjAwOS0xMi0xMCAxODo0Mjo1MSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogaW5zdGFsbCBldmVudCBmdW5jdGlvbiBvbiBpbnRlcm5hbCBSVENQIHBhZAotCSAgSW5zdGFsbCBhIGN1c3RvbSBldmVudCBmdW5jdGlvbiBvbiB0aGUgaW50ZXJuYWwgUlRDUCBwYWQgc28gdGhhdCB3ZSBjYW4gcmVwbHkKLQkgIFRSVUUgdG8gYSBsYXRlbmN5IGV2ZW50LgotCi0yMDA5LTEyLTEwIDEwOjQ4OjQ5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYXl1di5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYmdyYS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfcmdiLmM6Ci0JICB2aWRlb21peGVyOiBSZW1vdmUgd3JvbmcgY29tbWVudHMsIGNvcGllZCBmcm9tIHRoZSBJNDIwIGJsZW5kIGZ1bmN0aW9uCi0KLTIwMDktMTItMDkgMjE6MTU6MDcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBUaGUgcXVldWVkIGR1cmF0aW9uIGlzIGEgc2lnbmVkIGludGVnZXIKLQkgIC4uLmFuZCBpdCB3aWxsIHJlYWxseSBiZSBuZWdhdGl2ZSBzb21ldGltZXMuCi0KLTIwMDktMTItMDkgMjE6MDM6NTcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBPbmx5IHBvcCBidWZmZXJzIGZyb20gY29sbGVjdHBhZHMgYWZ0ZXIgdGhleSdyZSBmdWxseSBjb25zdW1lZAotCSAgVGhpcyBkZWNyZWFzZXMgbGF0ZW5jeSBhbmQgbWVtb3J5IHVzYWdlIGJlY2F1c2UgbmV3IGJ1ZmZlcnMgYXJlIG9ubHkKLQkgIGFjY2VwdGVkIGJ5IGNvbGxlY3RwYWRzIGlmIHRoZXJlJ3Mgbm8gcXVldWVkIGJ1ZmZlci4KLQotMjAwOS0xMi0wOSAyMDo0Mjo0NCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBDbGVhbiB1cCBwb3NpdGlvbi9kdXJhdGlvbiBoYW5kbGluZwotCSAgQWxzbyB1c2UgdGhlIGxhc3QgZW5kIHRpbWUgZm9yIGNsb3NpbmcgdGhlIHNlZ21lbnQsIG5vdCB0aGUKLQkgIHN0YXJ0IHRpbWUgb2YgdGhlIGxhc3QgYnVmZmVyLgotCi0yMDA5LTEyLTA5IDE2OjUwOjAyICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBDbG9zZSB0aGUgc2VnbWVudCBvbiBFT1MgaWYgdGhlIHJlYWwgZHVyYXRpb24gaXMga25vd24KLQotMjAwOS0xMi0wOSAxNjo0NjoxOCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogVXBkYXRlIGR1cmF0aW9uIGlmIGN1cnJlbnQgYnVmZmVyIGlzIGFscmVhZHkgYWZ0ZXIgdGhlIG9sZCBkdXJhdGlvbgotCi0yMDA5LTEyLTA5IDE2OjQzOjQxICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBEcm9wIGJ1ZmZlcnMgdGhhdCBhcmUgYWZ0ZXIgc2VnbWVudCBzdG9wCi0JICAuLi5hbmQgaWYgdGhpcyBoYXBwZW5lZCBmb3IgYWxsIHN0cmVhbXMgZ28gRU9TLgotCi0yMDA5LTEyLTA5IDE2OjQxOjA0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBGaXggcG9zaXRpb24gdHJhY2tpbmcgYW5kIHNlbmRpbmcgb2YgZmlsbGVyIHNlZ21lbnRzCi0KLTIwMDktMTItMDkgMTY6MTU6MDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBVc2UgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCgpIGZvciBmcHMgdG8gc2Vjb25kcyBwZXIgZnJhbWUgY2FsY3VsYXRpb25zCi0KLTIwMDktMTItMDggMTc6MzQ6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEtlZXAgdGhlIHNlZ21lbnQgc3RvcCBwb3NpdGlvbiBmb3IgdXBkYXRlIG5ld3NlZ21lbnQgZXZlbnRzCi0KLTIwMDktMTItMDQgMTQ6NDI6NDkgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGFkc3BhL01ha2VmaWxlLmFtOgotCSogZXh0L2xhZHNwYS9nc3RsYWRzcGEuYzoKLQkqIGV4dC9sYWRzcGEvZ3N0bGFkc3BhLmg6Ci0JKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOgotCSogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuaDoKLQkqIGV4dC9sYWRzcGEvbG9hZC5jOgotCSogZXh0L2xhZHNwYS9zZWFyY2guYzoKLQkqIGV4dC9sYWRzcGEvdXRpbHMuaDoKLQkgIGxhZHNwYTogUmVtb3ZlIHRoZSBzb3VyY2VzIGZyb20gZ3N0LXBsdWdpbnMtZ29vZAotCSAgSXQncyBkaXNhYmxlZCBhbnl3YXkgYW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBpdCBpcyBpbgotCSAgZ3N0LXBsdWdpbnMtYmFkLiBGaXhlcyBidWcgIzYwMzc3OS4KLQotMjAwOS0xMi0wNCAxMzo1MDo1OSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGluaXQgY3VycmVudF9lbnRyeSBpbiBwdXNoIG1vZGUKLQkgIFNldCB0aGUgY3VycmVudF9lbnRyeSB0byAwIChpbnN0ZWFkIG9mIC0xKSBpbiBwdXNoIG1vZGUgc28gdGhhdCB3ZSBjb3JyZWN0bHkKLQkgIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIgYW5kIHRpbWVzdGFtcC4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mbyBhbmQgZmljIHRoZSBkdXJhdGlvbiBkZWJ1Zy4KLQotMjAwOS0xMi0wNCAxMToxNDowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBtYWpvciBtZW1vcnkgbGVhayB3aGVuIHBsYXlpbmcgYmFjayBydHNwIHZpZGVvIHN0cmVhbXMKLQkgIERvbid0IGZvcmdldCB0byB1bnJlZiBRb1MsIG5hdmlnYXRpb24gYW5kIGxhdGVuY3kgZXZlbnRzIHdoZW4KLQkgIGRyb3BwaW5nIHRoZW0uCi0KLTIwMDktMTItMDMgMDg6NTg6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IG9ubHkgc2VuZCBwZW5kaW5nIHRhZ3Mgd2l0aCBuZXdzZWdtZW50IGV2ZW50cwotCSAgU2VuZCBwZW5kaW5nIHRhZ3Mgb25seSBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkLCBqdXN0IGFmdGVyIHdlJ3ZlIHNlbnQKLQkgIHRoZSBuZXdzZWdtZW50IGV2ZW50LCBub3Qgd2l0aCBlLmcuIGZsdXNoLXN0YXJ0LiBUaGlzIG5vdCBvbmx5IGRvZXMgdGhlCi0JICByaWdodCB0aGluZywgYnV0IGFsc28gbWFrZXMgc3VyZSB3ZSdyZSBub3QgdHJhbXBsaW5nIG92ZXIgdmFyaWFibGVzIHNldAotCSAgdXAgaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgZnJvbSB0aGUgc2Vla2luZyB0aHJlYWQgaW4gY2FzZSBzb21lb25lIHRyaWVzCi0JICB0byBpc3N1ZSBhIHNlZWsganVzdCBhcyB0aGUgZGVtdXhlciBpcyBwYXJzaW5nIHRoZSBoZWFkZXJzLgotCSAgRml4ZXMgIzYwMTYxNy4gU3BvdHRlZCBieSBPZ255YW4gVG9uY2hldi4KLQotMjAwOS0xMi0wMyAxNzo0OTo1NSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBkZWJ1ZyBtZXNzYWdlIHByaW50ZiBhcmdzCi0JICBGaXhlcyBkZWJ1ZyBtZXNzYWdlIHByaW50ZiBmb3JtYXQgdG8gbWFrZSBpdCBidWlsZCBpbiBtYWMncyBnY2MKLQotMjAwOS0xMi0wMiAxMzozMzoyMCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JICBzaG91dDI6IENvbnZlcnQgZGVsYXkgY29ycmVjdGx5Ci0JICBVc2UgR1NUX01TRUNPTkQgdG8gY29udmVydCBkZWxheSBpbiBtc2VjcyB0byBuYW5vc2VjcwotCSAgRml4ZXMgIzYwMzU0NwotCi0yMDA5LTEyLTAxIDE5OjI0OjAyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiByZXNldCBzZWdtZW50IGluZm8gYWZ0ZXIgZmx1c2gKLQkgIFJlc2V0IHRoZSBzZWdtZW50IGluZm8gYWZ0ZXIgYSBmbHVzaC4gV2UgdXNlIHRoZSBzZWdtZW50IGZvciBoYW5kbGluZyBRb1MgYW5kIGlmCi0JICB3ZSBkb24ndCByZXNldCB0aGUgc2VnbWVudCwgUW9TIGlzIGJhc2ljYWxseSBkaXNhYmxlZCBhZnRlciBhIGZsdXNoaW5nIHNlZWsuCi0KLTIwMDktMTItMDEgMTU6MDc6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODdiZjQyOCB0byA0N2NiMjNhCi0KLTIwMDktMTItMDEgMTQ6MTU6NDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZGE0Yzc1YyB0byA4N2JmNDI4Ci0KLTIwMDktMTEtMzAgMTU6NTk6NTAgKzAxMDAgIEF1cmVsaWVuIEdyaW1hdWQgPGdzdGVsenogYXQgeWFob28gZG90IGZyPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBhdm9pZCBidWZmZXIgcmVmL3VucmVmIHBhaXJzIGZvciBDU1JDcwotCSAgV2UgcmVmIHRoZSBidWZmZXIgYmVmb3JlIHB1c2hpbmcgaXQgZG93bnN0cmVhbSBpbiBvcmRlciB0byBnZXQgdGhlIENTUkNzIG9mIGl0Ci0JICBhZnRlciBwdXNoaW5nLiBUaGlzIGNhdXNlcyBwZXJmb3JtYW5jZSBwcm9ibGVtcyB3aGVuIGRvd25zdHJlYW0gZWxlbWVudHMgd2FudCB0bwotCSAgY2hhbmdlIHRoZSBtZXRhZGF0YSBiZWNhdXNlIHRoZSBidWZmZXIgbmVlZHMgdG8gYmUgc3ViYnVmZmVyZWQuCi0JICBJbnN0ZWFkLCByZWFkIGFuZCBzdG9yZSB0aGUgQ1NSQ3Mgb2YgdGhlIGJ1ZmZlciBpbiBhbiBhcnJheSBiZWZvcmUgcHVzaGluZyBpdAotCSAgYW5kIHByb2Nlc3MgdGhlIGFycmF5IGFmdGVyIHB1c2hpbmcgdGhlIGJ1ZmZlci4gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRoZQotCSAgcmVmL3VucmVmIHBhaXIuCi0JICBGaXhlcyAjNjAzMzc2Ci0KLTIwMDktMTEtMjggMTk6MjM6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSAgc2hvdXQyOiB1c2UgZ3N0cG9sbCBmb3IgdGltZW91dHMKLQkgIFVzZSBvdXIgb3duIEdzdFBvbGwgYmFzZWQgdGltZW91dCBpbnN0ZWFkIG9mIHRoZSBzaG91dCBzbGVlcCBzbyB0aGF0IHdlIGNhbgotCSAgaW50ZXJydXB0IHdoZW4gZG9pbmcgYSBzdGF0ZSBjaGFuZ2UgYW5kIHNodXR0aW5nIGRvd24uCi0JICBGaXhlcyAjNjAyODg3Ci0KLTIwMDktMTEtMjggMTI6MjU6MDYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgY2hlY2s6IGZpeCBqaXR0ZXJidWZmZXIgY2hlY2sKLQkgIE1ha2Ugc3VyZSB3ZSBzZXQgYSBiYXNlX3RpbWUgb24gdGhlIGVsZW1lbnQuCi0JICBGaXggdGhlIHRpbWVvdXQgdG8gYXQgbGVhc3QgdHdpY2UgdGhlIGppdHRlcmJ1ZmZlciBsYXRlbmN5LgotCSAgRW5hYmxlIHByZXZpb3VzbHkgZmFpbGluZyB0ZXN0cy4KLQkgIFJlbW92ZSBpbXBvc3NpYmxlIGNoZWNrcy4KLQotMjAwOS0xMS0yNyAxODo1NToyMCArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDUzYTI0ODUgdG8gZGE0Yzc1YwotCi0yMDA5LTExLTI2IDE2OjE0OjMwICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5Lmg6Ci0JICBydHBoMjY0ZGVwYXk6IG9wdGlvbmFsbHkgbWVyZ2UgTkFMVXMgaW50byBBY2Nlc3MgVW5pdHMKLQkgIC4uLiB3aGljaCBtYXkgYmUgZXhwZWN0ZWQvZGVzaXJlZCBieSBzb21lIGRvd25zdHJlYW0gZGVjb2RlcnMKLQkgIChhbmQgc3BlYy13aXNlIGhpZ2hseSByZWNvbW1lbmRlZCBmb3IgYXQgbGVhc3Qgbm9uLWJ5dGVzdHJlYW0gbW9kZSkuCi0KLTIwMDktMTEtMjYgMTc6Mjk6MDMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggdGltZXN0YW1wIGRhdGF0eXBlCi0KLTIwMDktMTEtMjUgMTA6Mzg6MjMgLTA2MDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVyOiBhdm9pZCB1c2luZyB3cm9uZyBjbG9jay1yYXRlCi0JICBDaGVjayBmb3IgYSB2YWxpZCBjbG9jay1yYXRlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGVzdGltYXRlIHRoZSBucHQKLQkgIHN0b3AgdGltZS4KLQotMjAwOS0xMS0yNSAxMDozNzozMCAtMDYwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGZpeCB0eXBvIGluIGNvbW1lbnRzCi0KLTIwMDktMTEtMjUgMTY6MDU6MTAgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXJ0ZXN0OiBhZGQgb25lIG1vcmUgdGVzdCBhbmQgZmlsZSBhIGJ1ZyBub3cKLQkgIENIYW5nZSB0aGUgYmFja3dhcmRzIHRlc3QgdG8gYWx3YXlzIHNlbmQgZmlyc3QgYnVmZmVyIGZpcnN0IHRvIGhhdmUgYSBkZWZpbmUKLQkgIGJhc2V0aW1lLiBBZGQgYW5vdGhlciB0ZXN0IHRoYXQgc2VuZHMgYnVmZmVycyBiYWNrd2FyZHMgdG8gYXNzZXJ0IHRoYXQgb25seQotCSAgZmlyc3Qgc2VudCBidWZmZXIgaXMga2VlcCBhbmQgdXNlZCBhcyBiYXNldGltZS4gRGlzYWJsZWQgdGhvc2UgdGVzdHMgc3RpbGwsCi0JICBhcyBpdHMgbm90IHBhc3NpbmcvZmFpbGluZyBjb25zaXRlbnRseSBhbmQgZmlsZSBhIGJ1ZyBmb3Igaml0dGVyYnVmZmVyLgotCi0yMDA5LTExLTI1IDEwOjE3OjM0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgaml0dGVyYnVmZmVydGVzdDogaW1wcm92ZSB0aGUgdGVzdAotCSAgdGhlIHRlc3RzIGFyZSBhIGJpdCBtb3JlIHNvbGlkIG5vdyBidXQgc3RpbGwgbm90IHByb2R1Y2UgcmVsaWFibGUgcmVzdWx0cy4KLQkgIFdvbmRlciBpZiB0aGV5IGFyZSBzdGlsbCBmbGF3a3kgb3IgaWYgaXRzIGEgYnVnIGluIGppdHRlcmJ1ZmZlci4KLQotMjAwOS0xMS0yNCAxMToxMzowNiAtMDgwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IHJldHVybiBlcnJvciBtZXNzYWdlIG9uIHdpbmRvd3MgdG9vLgotCi0yMDA5LTExLTI0IDEwOjU4OjQ5IC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogZmlyc3QgcGhhc2Ugb2YgZml4aW5nIHVwIGVycm9yIHJlcG9ydGluZyBmb3Igd2luZG93cy4KLQotMjAwOS0xMC0zMCAwMzoxMzo1NCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGFsc28gc2V0IHRoZSBzdWdnZXN0ZWQgYnVmIHNpemUgZm9yIGF1ZGlvCi0JICBXZSB3ZXJlIG9ubHkgc2V0dGluZyB0aGUgc3VnZ2VzdGVkIGJ1ZiBzaXplIGZvciB2aWRlbywKLQkgIHdlIGNhbiBzZXQgaXQgZm9yIGF1ZGlvIGFzIHdlbGwuCi0JICBUaGlzIGFuZCAxOTVlMTQ1MjlkODBlZjMxOGNlM2E3NzhjMTk5NWVmYjExZjI2NmNkCi0JICBmaXggYW4gaXNzdWUgdGhhdCBwcmV2ZW50ZWQgc2Vla2luZyBvbiBsYXJnZSBhdmkgZmlsZXMKLQkgIG9uIFdNUCAobm9uLXJlY2VudCB2ZXJzaW9ucykuCi0KLTIwMDktMTEtMDQgMTY6MTA6MjMgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguaDoKLQkgIGF2aW11eDogZml4IGluZHggZHVyYXRpb24gZm9yIFBDTSBhdWRpbwotCSAgR3N0QnVmZmVycyBmb3IgUENNIGF1ZGlvIHVzdWFsbHkgY29udGFpbnMgbW9yZSB0aGFuCi0JICAxIHNhbXBsZSwgd2UgbmVlZCB0byBnZXQgdGhlIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzIHRvIHNldAotCSAgdGhlIGluZHggZHVyYXRpb24uCi0KLTIwMDktMTEtMDQgMTY6MDQ6MTAgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgYXZpbXV4OiBBdWRpbyBidWZmZXJzIHNob3VsZCBiZSBwaWNrZWQgZWFybGllcgotCSAgQWRkcyBhIDAuNXMgYWR2YW50YWdlIGZvciBhdWRpbyBidWZmZXJzIHRvIGJlaW5nCi0JICBwaWNrZWQgZWFybGllciBmb3IgbXV4aW5nLgotCi0yMDA5LTExLTI0IDE2OjQwOjE5ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IEZpeCBwdXNoIG1vZGUgYnkgbWFraW5nIHN1cmUgc3RibCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gbmV4dF9lbnRyeV9zaXplICgpCi0KLTIwMDktMTEtMjQgMTY6MzU6MjAgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IG9yZGVyIG9mIGFyZ3VtZW50cyBpbiBsb2cgbWVzc2FnZQotCi0yMDA5LTExLTI0IDE1OjUxOjIxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgIGpwZWdlbmM6IGZpeCBzcGVsbGluZyBpbiBjb21tZW50Ci0KLTIwMDktMTEtMjMgMTc6NTg6MTcgKzAxMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogY29tbW9uOgotCSAgYnVpbGQgc3lzdGVtOiBGaXggd3JvbmdseSBjb21taXR0ZWQgY2hhbmdlIHRvIGNvbW1vbi8KLQotMjAwOS0xMS0xMCAxMDoyNjowNyArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBFYXNlIGRlYnVnZ2luZyBieSByZW1vdmluZyBhIGdvdG8gZm9yIGFuIGVycm9yIG1lc3NhZ2UKLQotMjAwOS0xMS0xNCAxNTo1MjowOSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBQYXJzZSBwZXIgc2FtcGxlIHJhdGhlciB0aGFuIGFsbCBhdCBvbmNlIGJ1dCBidWlsZCBjb21wbGV0ZSBpbmRleCB3aGVuIHNlZWtpbmcKLQotMjAwOS0xMS0wNCAxNzozMToxNSArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBTYXZlIGF0b20gZGF0YSBmb3IgbGF0ZXIgdXNlIHNvIGl0IGRvZXNuJ3QgZ2V0IGZyZWVkIGFmdGVyIGluaXRpYWwgcGFyc2luZwotCi0yMDA5LTExLTA2IDExOjAwOjA0ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFBhcnNlIGZyb20gdGhlIHByZXZpb3VzbHkgcGFyc2VkIHNhbXBsZSB1cCB0byBzYW1wbGUgbgotCi0yMDA5LTExLTA0IDE3OjA0OjIyICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IE1ha2UgcXRkZW11eF9wYXJzZV9zYW1wbGVzICgpIHBhcnNlIHVwIHRvIG4gc2FtcGxlcwotCi0yMDA5LTEwLTI4IDE3OjQ5OjAyICswMDAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFNlcGFyYXRlIG9mZiBzdGJsIHN1Yi1hdG9tIGluaXRpYWxpc2F0aW9uCi0KLTIwMDktMTAtMjYgMjI6NDI6MzYgKzAwMDAgIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogTW92ZSB2YXJpYWJsZXMgaW50byBjb250ZXh0IGluIHByZXBhcmF0aW9uIGZvciByZWZhY3RvcmlzYXRpb24KLQotMjAwOS0xMC0yNiAyMDozNjowOCArMDAwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggYnVnIHdoZXJlIHN0cHMgaXMgbmV2ZXIgcGFyc2VkIGR1ZSB0byBsb2dpYyBlcnJvcgotCi0yMDA5LTExLTA0IDE3OjMxOjE1ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IFBvcnQgY3R0cyBmcm9tIEdub2RlICogdG8gR3N0Qnl0ZVJlYWRlcgotCi0yMDA5LTEwLTIzIDEzOjA2OjQ0ICswMTAwICBSb2JlcnQgU3dhaW4gPHJvYmVydC5zd2FpbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0YXRvbXBhcnNlci5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9kdW1wLmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuaDoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuaDoKLQkgIHF0ZGVtdXg6IFN3aXRjaCBmcm9tIFF0QXRvbVBhcnNlciB0byBHc3RCeXRlUmVhZGVyCi0KLTIwMDktMTEtMjMgMTI6NTM6NTAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCB0eXBvIGFuZCBncmFtbWFyCi0KLTIwMDktMTEtMjIgMTk6MzA6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9NYWtlZmlsZS5hbToKLQkgIENsZWFuIHVwIExERkxBR1MsIExJQlMsIENGTEFHUwotCSAgRml4IG9yZGVyLCBmaXggdmFyaWFibGVzIHRoYXQgZG9uJ3QgZXhpc3QsIGxpa2UgR1NUX0xJQlNfTElCUywKLQkgIHVzZSAkKExJQk0pIGluc3RlYWQgb2YgLWxtLCBhbmQgbW92ZSBfTElCUyBmcm9tIExERkxBR1MgdG8gTElCQURELgotCSAgU3BvdHRlZCBieSBIYXZhcmQgR3JhZmYuCi0KLTIwMDktMTEtMjAgMTA6MzE6NDcgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JKiBnc3QvZHRtZi90b25lX2RldGVjdC5oOgotCSAgZHRtZjogVXNlIF9zdGRpbnQuaCBmcm9tIGNvbmZpZ3VyZQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjQ2NQotCi0yMDA5LTExLTIwIDEwOjMwOjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogZml4IHR5cG8gaW4gbW9kZSBlbnVtIGRlc2NyaXB0aW9uCi0KLTIwMDktMTEtMjAgMTE6MjU6NDkgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBkb2NzOiBtb3JlIGxpbmtzIGFuZCBiZXR0ZXIgc2hvcnQgZGVzY3JpcHRpb24KLQkgIEZpeCBzcGVsbGluZyBvZiBHc3RSdHBTc3JjRGVtdXggdG8gZ2V0IGl0IGxpbmtlZC4gQWRkIG1vcmUgbGlua3MuIENoYW5nZQotCSAgdGhlIHNob3J0IGRlc2NyaXB0aW9uIHRvIGJlIG1vcmUgbWVhbmluZ2Z1bC4KLQotMjAwOS0xMS0yMCAwOTo1ODoyNiArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2twYXJzZS5jOgotCSAgd2F2cGFja3BhcnNlOiBGaXggdW5pdCB0ZXN0IGZvciByZWNlbnQgcG9zaXRpb24gcmVwb3J0aW5nIGNoYW5nZXMKLQotMjAwOS0xMS0xOSAyMDozMzowNyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi90b25lX2RldGVjdC5jOgotCSogZ3N0L2R0bWYvdG9uZV9kZXRlY3QuaDoKLQkgIGR0bWY6IFVwZGF0ZSBkdG1mZGV0ZWN0IHRvIG1ha2UgaXQgTVNWQyBmcmllbmRseQotCSAgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjQ2NQotCi0yMDA5LTExLTE5IDE2OjA5OjM4ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICB3YXZwYWNrcGFyc2U6IEFmdGVyIHB1c2hpbmcgYSBmcmFtZSwgdXBkYXRlIGxhc3Rfc3RvcCB0byB0aGUgZW5kIG9mIHRoZSBmcmFtZQotCSAgVGhpcyBpbXByb3ZlcyBwb3NpdGlvbiByZXBvcnRpbmcsIGVzcGVjaWFsbHkgYmVjYXVzZSBvZiB0aGUgZmFjdCB0aGF0Ci0JICBXYXZQYWNrIGZyYW1lcyBhcmUgdXN1YWxseSAwLjUtMS4wIHNlY29uZHMgbG9uZy4KLQotMjAwOS0xMS0xOSAxNjowODozMyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgd2F2cGFja3BhcnNlOiBBbGxvdyBwdWxsaW5nIHRoZSBsYXN0IFdhdlBhY2sgZnJhbWUgb2YgYSBmaWxlCi0JICBCZWNhdXNlIG9mIGEgPj0gaW5zdGVhZCBvZiBhID4sIHRoYXQgbGFzdCBmcmFtZSBvZiBhIFdhdlBhY2sgZmlsZQotCSAgd291bGQgbmV2ZXIgYmUgcGFyc2VkIGluIHB1bGwgbW9kZS4KLQotMjAwOS0xMS0xOSAxMDozMDo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSAwNzAyZmUxIHRvIDUzYTI0ODUKLQotMjAwOS0xMC0yOSAwODoyOTozOCAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICBxdGRlbXV4OiBBZGQgbW9yZSBmaWVsZHMgdG8gU1ZRMyBjYXBzCi0JICBxdGRlbXV4IG9ubHkgYWRkZWQgdGhlIHdob2xlIHN0c2QgYXRvbSBhcyAnY29kZWNfZGF0YScKLQkgIGluIGl0cyBvdXRwdXQgY2FwcyBmb3IgU1ZRMy4gVGhpcyBwYXRjaCBtYWtlcyBpdCBhZGQKLQkgIHRoZSBTRVFIIChpbnNpZGUgYSBTTUkgYXRvbSkgYW5kIGEgZ2FtbWEgZmllbGQgKHRha2VuCi0JICBmcm9tIHRoZSBnYW1hIGF0b20pIGlmIGF2YWlsYWJsZS4KLQkgIEZpeGVzICM1ODc5MjIKLQotMjAwOS0xMS0xOCAxNzo1NTo0MiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkgIHdhdmVuYzogUmFpc2UgcmFuayBvZiBtdXhlciB0byBQUklNQVJZCi0KLTIwMDktMTEtMTggMTc6NTQ6MTYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICB5NG06IFJhaXNlIHJhbmsgb2YgZW5jb2RlciB0byBQUklNQVJZCi0KLTIwMDktMTEtMTggMTc6NTQ6MDIgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9sYXcvYWxhdy5jOgotCSogZ3N0L2xhdy9tdWxhdy5jOgotCSAgbGF3OiBSYWlzZSByYW5rIG9mIGVuY29kZXJzIHRvIFBSSU1BUlkKLQotMjAwOS0xMS0xMiAxOToxMToxOCArMDAwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBBZGQgdXNlci1pZCBhbmQgdXNlci1wdyBwcm9wZXJ0aWVzCi0JICBTbyB0aGF0IG9uZSBkb2Vzbid0IG5lZWQgdG8gbW9kaWZ5IHRoZSBVUkwgdG8gaGF2ZSBhY2Nlc3MKLQkgIHRvIGF1dGhlbnRpY2F0ZWQgUlRTUCBzdHJlYW1zLgotCSAgZml4ZXMgIzYwMTcyOAotCi0yMDA5LTExLTE4IDEyOjIyOjEwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHVzZSBhY3F1aXJlZCBmbGFnIHdoZW4gY2hlY2tpbmcgdmFsaWQgc3RhdGUKLQkgIFVzZSB0aGUgYWNxdWlyZWQgZmllbGQgb2YgdGhlIHJpbmdidWZmZXIgaW4gZ2V0X3RpbWUgdG8ga25vdyB3aGVuIHdlIGFyZSBpbiBhbgotCSAgaW52YWxpZCBzdGF0ZS4gV2UgZG9uJ3QgY2xlYXIgdGhlIHJhdGUgZmxhZyB3aGVuIHJlbGVhc2luZyB0aGUgcmluZ2J1ZmZlciBzbwotCSAgdGhpcyB2YWx1ZXMgaXMgbm90IHVzYWJsZS4KLQkgIEF2b2lkcyBzb21lIGVycm9yIG1lc3NhZ2VzIGJlaW5nIHBvc3RlZCBiZWNhdXNlIHRoZSBwdWxzZWF1ZGlvIGNvbm5lY3Rpb24gaXMKLQkgIGRvd24uCi0KLTIwMDktMTEtMTggMTA6MTc6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjb25maWd1cmU6IGJ1bXAgY29yZSByZXF1aXJlbWVudCB0byAwLjEwLjI1LjEgYXMgd2VsbAotCSAgTWFrZSBpbXBsaWNpdCByZXF1aXJlbWVudCBleHBsaWNpdC4KLQotMjAwOS0xMS0xOCAxMjo1Mzo0NCArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBib2d1cyBtZW1vcnkgY2h1bmsgc2l6ZSBjaGVjawotCi0yMDA5LTExLTE4IDEyOjAxOjUyICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGltcGxlbWVudCBzb21lIG1vcmUgY2FsbGJhY2tzCi0JICBJbXBsZW1lbnQgc29tZSBtb3JlIGNhbGxiYWNrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotCi0yMDA5LTExLTExIDE1OjUwOjE5ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVsZWFzZSBsb2NrIGJlZm9yZSBlbWl0aW5nIHNpZ25hbHMKLQkgIFJlbGVhc2UgdGhlIGpidWYgbG9jayBiZWZvcmUgZW1pdGluZyB0aGUgcmVxdWVzdC1wdC1tYXAgc2lnbmFsIHRvIGF2b2lkCi0JICBkZWFkbG9ja3MuIFdlIGFsc28gbmVlZCB0byBjYXRjaCB0aGUgc2h1dGRvd24gY2FzZSB3aGVuIGxvY2tpbmcgYWdhaW4uCi0JICBGaXhlcyAjNTkzMzU0Ci0KLTIwMDktMTEtMTEgMTE6NTk6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBidmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuaDoKLQkgIHJ0cDogYWRkIEJyb2FkY29tVm9pY2UgZGVwYXlsb2FkZXIKLQotMjAwOS0xMS0xMSAxMTozODozNiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSAgcnRwYnZwYXk6IGFkZCByZmMgcmVmZXJlbmNlCi0KLTIwMDktMTEtMTEgMTE6Mzc6MDcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBidnBheS5oOgotCSAgcnRwOiBhZGQgQnJvYWRjb21Wb2ljZSBwYXlsb2FkZXIKLQotMjAwOS0xMS0wOSAxMjoxNzozNCArMDEwMCAgSmFuIFVyYmHFhHNraSA8d3VsY3plckB3dWxjemVyLm9yZz4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogcHJvcGVybHkgZmluaXNoIHRoZSBFQ01BIGFycmF5Ci0JICBUaGUgRUNNQSBhcnJheSB3aXRoIHRoZSBmaWxlIGluZGV4IHdhcyBtaXNzaW5nIGEgbWFuZGF0b3J5IGVuZCBtYXJrZXIuCi0JICBGaXhlcyBidWcgIzYwMTI0Mi4KLQotMjAwOS0xMS0xOCAwMjoxNToxNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIFVzZSBuZXcgc3RpbGwtZnJhbWUgQVBJIGZyb20gZ3N0LXBsdWdpbnMtYmFzZQotCi0yMDA5LTExLTE4IDAyOjE0OjQ2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgZ3N0LXBsdWdpbnMtYmFzZSByZXF1aXJlbWVudCB0byAwLjEwLjI1LjEKLQotMjAwOS0xMS0xNyAxNzo1OToxMyAtMDgwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGlkZW50aWZ5IElNQSBhZHBjbSBpbiBxdCBwcm9wZXJseS4KLQotMjAwOS0xMS0xOCAwMToyNzozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50IC0+IDAuMTAuMTcuMQotCi0yMDA5LTExLTE3IDAxOjUzOjA4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkgIEFkZCByZWxlYXNlIDAuMTAuMTcgdG8gdGhlIGRvYXAgZmlsZQotCi09PT0gcmVsZWFzZSAwLjEwLjE3ID09PQotCi0yMDA5LTExLTE3IDAxOjI1OjMwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkgIFJlbGVhc2UgMC4xMC4xNwotCi0yMDA5LTExLTE3IDAwOjE4OjIyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9sdi5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby90ci5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDktMTEtMTMgMDI6MDc6MjUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTYuMyBwcmUtcmVsZWFzZQotCi0yMDA5LTExLTEwIDExOjUyOjI0ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogTWFrZSBzdXJlIHRvIGluaXRpYWxpemUgdmFyaWFibGVzIGJlZm9yZSB1c2luZyB0aGVtCi0KLTIwMDktMTEtMDkgMjA6MDY6MDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTYuMiBwcmUtcmVsZWFzZQotCi0yMDA5LTExLTA5IDE1OjIwOjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZnJlZSB0ZW1wb3JhcnkgYnVmZmVyIHdoZW4gY2hhbmdpbmcgc3RhdGUgdG8gTlVMTAotCSAgRnJlZSB0ZW1wb3JhcnkgYWxsb2NhdGlvbnMgaW4gdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBhbmQgbm90Ci0JICBvbmx5IHdoZW4gdGhlIG9iamVjdCBpcyBmaW5hbGlzZWQuCi0KLTIwMDktMTEtMDkgMTE6NDA6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiBvbmx5IGFsbG9jYXRlIGFzIG11Y2ggdGVtcG9yYXJ5IG1lbW9yeSBhcyBuZWVkZWQgZm9yIGluZGlyZWN0IGRlY29kaW5nCi0JICBXaGVuIHdlIGNhbid0IGRlY29kZSBkaXJlY3RseSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLCBtYWtlIG91ciB0ZW1wIGJ1ZmZlcnMKLQkgIG9ubHkgYXMgYmlnIGFzIG5lZWRlZCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgZm9yIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvICh3ZWxsLAotCSAgd2Ugc3RpbGwgYWxsb2MgbW9yZSB0aGFuIHN0cmljdGx5IG5lZWRlZCBmb3Igc29tZSBjYXNlcywgYnV0IHNpZ25pZmljYW50bHkKLQkgIGxlc3MgdGhhbiBiZWZvcmUpLgotCi0yMDA5LTExLTA1IDIzOjQ2OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBwcmludGYgZm9ybWF0IGZpeAotCi0yMDA5LTExLTA1IDIzOjQ0OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JICByYXcxMzk0OiBwcmludGYgZm9ybWF0IGZpeGVzCi0KLTIwMDktMTEtMDUgMjM6NDA6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBwcmludGYgZm9ybWF0IGZpeAotCi0yMDA5LTExLTA0IDIyOjE5OjU4IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL01ha2VmaWxlLmFtOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZi5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZmRldGVjdC5oOgotCSogZ3N0L2R0bWYvdG9uZV9kZXRlY3QuYzoKLQkqIGdzdC9kdG1mL3RvbmVfZGV0ZWN0Lmg6Ci0JICBkdG1mZGV0ZWN0OiBBZGQgRFRNRiB0b25lIGRldGVjdG9yCi0JICBJdCBsb29rcyBhdCByYXcgYXVkaW8gZGF0YSBhbmQgZW1pdHMgbWVzc2FnZXMgd2hlbiBEVE1GIGlzIGRldGVjdGVkLgotCSAgVGhlIGR0bWYgZGV0ZWN0b3IgaXMgdGhlIHNhbWUgR29lcnR6ZWwgaW1wbGVtZW50YXRpb24gdXNlZCBpbiBGcmVlU3dpdGNoCi0JICBhbmQgQXN0ZXJpc2suIEl0IGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLgotCi0yMDA5LTExLTA1IDEyOjEzOjQ0IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogZG8gbm90IHdyaXRlIGVtcHR5IElORk8gbGlzdAotCSAgYXZvaWQgd3JpdGluZyBhbiBlbXB0eSBJTkZPIGxpc3QgY2h1bmssIGJvdGggYmVjYXVzZQotCSAgaXQgaXMgdXNlbGVzcyBhbmQgYmVjYXVzZSB2bGMgcmVmdXNlcyB0byBwbGF5IHRoZQotCSAgcmVzdWx0aW5nIGZpbGUuCi0KLTIwMDktMTEtMDUgMTA6NTQ6MTIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBOb3RpZnkgYWJvdXQgYmFuZCBwcm9wZXJ0eSBjaGFuZ2VzIGNhdXNlZCBieSBjaGFuZ2luZyBudW1iZXIgb2YgYmFuZHMKLQotMjAwOS0xMS0wNSAxMDo0NTo1OSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYzoKLQkgIGVxdWFsaXplcjogTWFrZSBjaGFuZ2VzIHRvIGJhbmQgcHJvcGVydGllcyBhbmQgdGhlIG51bWJlciBvZiBiYW5kcyB0aHJlYWRzYWZlCi0KLTIwMDktMTEtMDUgMTA6MzA6NDYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBGaXggc3R1cGlkIG9mZiBieSB0d28gYnVnCi0KLTIwMDktMTEtMDUgMDg6MTg6MDUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBBZGQgYmFuZCBwcm9wZXJ0eSB0byBzZWxlY3QgdGhlIGJhbmQgZmlsdGVyIHR5cGUKLQkgIFRoaXMgYWxsb3dzIHBlciBiYW5kIGNvbmZpZ3VyYXRpb24gb2YgYSBwZWFrLCBsb3cgc2hlbGYgb3IKLQkgIGhpZ2ggc2hlbGYgZmlsdGVyLCB3aGljaCBjYW4gYmUgdmVyeSB1c2VmdWwgaWYgdGhlIGJhbmQgZnJlcXVlbmNpZXMKLQkgIGFuZCB3aWR0aHMgYXJlIG1hbnVhbGx5IGNvbmZpZ3VyZWQuCi0KLTIwMDktMTEtMDUgMDg6MTc6NTMgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBGaXggY29kZSBzdHlsZQotCi0yMDA5LTExLTA1IDA4OjAzOjEzICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JICBlcXVhbGl6ZXI6IFNvbWUgY2xlYW51cAotCi0yMDA5LTExLTA0IDIyOjIxOjM1IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkgIGR0bWZzcmM6IFJlamVjdCBlbXB0eSBjYXBzCi0KLTIwMDktMTEtMDQgMjI6MjE6MjIgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgZHRtZnNyYzogVXNlIGxvZyBsZXZlbCBmb3IgcmVwZWF0ZWQgZGVidWcgbWVzc2FnZXMKLQotMjAwOS0xMS0wNCAyMDowNToxNyAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBkdG1mc3JjOiBBbGxvdyBmb3IgYW55IHNhbXBsZXJhdGUKLQotMjAwOS0xMC0wNyAwOTozMToxOSAtMDQwMCAgR2FicmllbCBNaWxsYWlyZSA8Z2FicmllbC5taWxsYWlyZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkgIGNlbHRwYXkvZGVwYXkgOiBjaGFuZ2UgR1NUX0RFQlVHX09CSkVDVCB0byBHU1RfTE9HX09CSkVDVCBpbiBwYXlfaGFuZGxlX2J1ZmZlciBhbmQgZGVwYXlfcHJvY2VzcwotCi0yMDA5LTEwLTAyIDE3OjA0OjQzIC0wNDAwICBHYWJyaWVsIE1pbGxhaXJlIDxnYWJyaWVsLm1pbGxhaXJlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuYzoKLQkgIGNlbHRwYXkvZGVwYXk6IE5lZ290aWF0ZSBwYXJhbWV0ZXJzIHRocm91Z2ggY2FwcwotCSAgY2VsdGRlcGF5IDogYWRkZWQgZGVmYXVsdCBmcmFtZXNpemUoNDgwKSBjaGFubmVscygxKSBhbmQgY2xvY2tyYXRlKDMyMDAwKQotCSAgZGVwYXlfc2V0Y2FwcyA6IG5vdyBnZXRzIGNoYW5uZWxzIGFuZCBmcmFtZXNpemUgZnJvbSBzdHJpbmcgd2l0aCBkZWZhdWx0IHZhbHVlCi0JICBkZXBheV9wcm9jZXNzIDogbm93IGFkZHMgdGltZXN0YW1wIHRvIG91dGJ1ZgotCSAgQWRkZWQgZnJhbWVfc2l6ZSB0byBHc3RSdHBDZWx0RGVwYXkKLQkgIENoYW5nZWQgc29tZSBHU1RfREVCVUcgdG8gR1NUX0RFQlVHX09CSkVDVCBvciBHU1RfTE9HX09CSkVDVAotCSAgY2VsdHBheSA6IGdldGNhcHMgOiBnZXRzIGNoYW5uZWwgYW5kIGZyYW1lc2l6ZSBhbmQgc2V0cyBjYXBzCi0JICBBZGRlZCBmcmFtZS1zaXplIHRvIHN0YXRpYyBjYXBzIGZvciBhdWRpby94LWNlbHQKLQotMjAwOS0xMS0wNCAxNTo1ODozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUuYW06Ci0JICBkZWludGVybGFjZTogUHVsbCBpbiBDRkxBR1MgYW5kIExJQlMgZmxhZ3MgZnJvbSAtYmFzZSBiZWZvcmUgY29yZSBiZWZvcmUgc3lzdGVtLgotCi0yMDA5LTEwLTE1IDE2OjMzOjI0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBvL01ha2V2YXJzOgotCSAgcG86IERvbid0IGNyZWF0ZSBiYWNrdXAgLnBvIGZpbGVzCi0JICBBcyB3ZWxsIGFzIHByZXZlbnRpbmcgY3JlYXRpb24gb2YgdXNlbGVzcyBiYWNrdXAgZmlsZXMsIGl0IHdvcmtzCi0JICBhcm91bmQgYSBidWcgaW4gZ2V0dGV4dCAwLjE3IG9uIE9TL1gKLQotMjAwOS0xMS0wNCAxNjo0Nzo0MiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBpaGF0ZXN0ZXZlLmxvY2FsPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXg6IGluaXQgdmFyaWFibGVzIHRvIG1ha2UgY29tcGlsZXIgb24gb3N4IGJ1aWxkIGJvdCBoYXBweQotCi0yMDA5LTExLTAzIDE2OjA0OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9kdW1wLmM6Ci0JICBxdGRlbXV4OiBpbml0IHZhcmlhYmxlcyB0byBtYWtlIGNvbXBpbGVyIG9uIG9zeCBidWlsZCBib3QgaGFwcHkKLQotMjAwOS0xMS0wMyAxNzozNToxNSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiBkb24ndCBhbGxvY2F0ZSBiaWcgYXJyYXlzIG9uIHRoZSBzdGFjawotCSAgQWRkIHRoZSBhcnJheXMgdG8gdGhlIGluc3RhbmNlIGRhdGEgYW5kIGFsbG9jYXRlIG9uIGZpcnN0IHVzZS4KLQotMjAwOS0xMS0wMSAxNTo1Nzo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IHJlbW92ZSBwb2ludGxlc3MgY2FsbCB0byBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMoKQotCi0yMDA5LTExLTAxIDAwOjI5OjU3ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgbGV2ZWw6IGZpeCBkZWNheSB0byBiZSBzbW9vdGgKLQkgIFRoZSBsZW5ndGggbm90IGhhdmluZyBhbnkgZnJhY3Rpb25hbCBwYXJ0IGFzIGl0IHdhcyBwcm9tb3RlZCB0byBnZG91YmxlIGFmdGVyCi0JICBkaXZpZGluZyB0d28gZ3VpbnQ2NC4KLQotMjAwOS0xMS0wMSAwMDoyOToyNCArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSAgbGV2ZWw6IGNhbGN1bGF0ZSB0aGUgbWVzc2FnZS1pbnRlcnZhbGwgd2hlbiBpdCBjaGFuZ2VzCi0KLTIwMDktMTEtMDEgMDA6MTQ6MDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBsZXZlbDogY2xvY2t0aW1lIGlzIGEgZ3VpbnQ2NCwgdXNlIHJpZ2h0IG1hY3JvIHRvIGluaXQgZmllbGRzCi0KLTIwMDktMTEtMDEgMDA6MTA6MDEgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBsZXZlbDogdXNlIG1vcmUgZy1zdHlsZSB0eXBlcwotCi0yMDA5LTEwLTMwIDA5OjI3OjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBPbmx5IHNldCB0aGUgdm9sdW1lIG9uIHN0cmVhbSBjb25uZWN0aW9uIGlmIHB1bHNlID49IDAuOS4yMCBpcyBhdmFpbGFibGUKLQkgIEluIG9sZGVyIHZlcnNpb25zIHRoZSB2b2x1bWUgc2V0IGR1cmluZyBzdHJlYW0gY29ubmVjdGlvbiBoYWQKLQkgIG5vIGRlZmluZWQgc2VtYXRpYyBhbmQgdXN1YWxseSBpdCB3YXMgYSByZWxhdGl2ZSB2b2x1bWUuIFdoYXQKLQkgIHdhcyBuZWVkZWQgZm9yIG91ciB1c2UgY2FzZSBpcyBhbiBhYnNvbHV0ZSB2b2x1bWUgdGhvdWdoLCBvdGhlcndpc2UKLQkgIHRoZSB2b2x1bWUgd2lsbCBiZSBhbHdheXMgZGVjcmVhc2VkIG9uIHN0cmVhbSBjb25uZWN0aW9uIGlmIGl0J3MKLQkgIGxlc3MgdGhhbiAxMDAlLgotCSAgU2luY2UgcHVsc2UgMC45LjIwIHRoYXQgdm9sdW1lIGlzIGFsd2F5cyBhbiBhYnNvbHV0ZSB2b2x1bWUgaWYKLQkgIGZsYXQgdm9sdW1lcyBhcmUgdXNlZCBhbmQgcmVsYXRpdmUgb3RoZXJ3aXNlLCB3aGljaCBpcyB0aGUgc2FtZQotCSAgYXMgZm9yIHBhX2NvbnRleHRfc2V0X3NpbmtfaW5wdXRfdm9sdW1lKCkuCi0JICBSZWxldmFudCBwdWxzZSBjaGFuZ2VzZXRzOgotCSAgaHR0cDovL2dpdC4wcG9pbnRlci5kZS8/cD1wdWxzZWF1ZGlvLmdpdDthPWNvbW1pdDtoPWYyN2E1MDY5MWM4ZmU0NWJhYzdkZDZiMjFmYWM5MWEzNTlkZWYzYTEKLQkgIGh0dHA6Ly9naXQuMHBvaW50ZXIuZGUvP3A9cHVsc2VhdWRpby5naXQ7YT1jb21taXQ7aD0yNTAxNjg3NTc5ZTM1OWQ1MDMyYTRkMTY1YjJmZmM4ZjViMWI4YmE2Ci0KLTIwMDktMTAtMjcgMTg6MDc6MTggKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiB1c2Ugc2VnbWVudF9mdWxsIHdoZW4gd2UgY2FuCi0JICBVc2Ugc2VnbWVudF9mdWxsIHNvIHRoYXQgd2UgY2FuIHBhc3MgdGhlIGFwcGxpZWQgcmF0ZSB0byB0aGUgc2VnbWVudCB2YWx1ZXMuIFdlCi0JICB3aWxsIGNoYW5nZSB0aGUgYXBwbGllZCByYXRlIHdoZW4gd2UgaW1wbGVtZW50IHNraXAgbW9kZS4KLQotMjAwOS0xMC0xOCAwMDoxNjowNiArMDEwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AZ21haWwuY29tPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgd2F2ZW5jOiBGaXggYnVmZmVyIG9mZnNldCBieSBtb3ZpbmcgbGVuZ3RoIGluY3JlbWVudGF0aW9uCi0KLTIwMDktMTAtMjMgMTg6MzE6MTQgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IENyZWF0ZSB0aGUgdmlkZW8gTlNWaWV3IGluIFJFQURZLT5QQVVTRUQgcmF0aGVyIHRoYW4gTlVMTC0+UkVBRFkKLQotMjAwOS0xMC0yMyAxODoyODoyMiAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIHN5cy9vc3h2aWRlby9NYWtlZmlsZS5hbToKLQkgIG9zeHZpZGVvOiBleHBsaWNpdGx5IGxpbmsgdG8gR1NUX0xJQlMKLQotMjAwOS0xMC0yMyAxODowOTo0MyAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC9hdmkvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW06Ci0JICBBZGQgZGVwZW5kZW5jaWVzIG9mIGdzdHJpZmYgdG8gdGhpbmdzIHRoYXQgbGluayB0byBnc3RyaWZmLCBuZWVkZWQgb24gV2luMzIuCi0KLTIwMDktMTAtMjMgMTc6MjU6MTcgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLmM6Ci0JICBydHAgZXhhbXBsZXM6IHJlbW92ZSBleGVjdXRhYmxlIGJpdHMgZnJvbSBDIGZpbGVzLgotCi0yMDA5LTEwLTIzIDExOjIxOjQ0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICB0ZXN0czogZGlzYWJsZSBhbGwgaml0dGVyYnVmZmVyIHRlc3RzIGZvciBub3cKLQkgIFNpbmNlIGV2ZW4gdGhlIG9uZSBlbmFibGVkIHNlZW1zIHRvIGZhaWwuCi0KLTIwMDktMTAtMjIgMTM6Mzk6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICB0ZXN0czogYWxzbyBpbmNsdWRlIHRoZSBuZXcgdGVzdCBmb3IgcHJldiBjb21taXQKLQotMjAwOS0xMC0yMiAxMzoxOTowNyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIHRlc3RzOiBhZGQgYSBqaXR0ZXJidWZmZXIgdGVzdAotCSAgVGVzdHMgcHVzaGluZyBhIGZldyBidWZmZXJzIGluIHZhcmlvdXMgb3JkZXIgYW5kIGFzc2VydGluZyB0aGUgb3JkZXIgc2VudCBieSB0aGUKLQkgIGppdHRlcmJ1ZmZlci4gQ29udGFpbnMgdHdvIGRpc2FibGVkIHRlc3RzIHRoYXQgbmVlZCBtb3JlIHdvcmsuCi0KLTIwMDktMTAtMjIgMTI6MzA6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYW11eDogRGlyYWMgIm11eGluZyIgdW5pdHMgZW5kIG9uIEVPUyB0b28KLQkgIEEgRGlyYWMgbXV4aW5nIHVuaXQgYXJlIGFsbCBub24tcGljdHVyZSwgbm9uLWVuZC1vZi1zZXF1ZW5jZQotCSAgcGFja2V0cyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBmaXJzdCBwaWN0dXJlIG9yIGVvcyBwYWNrZXQuCi0JICBTZWUgaHR0cDovL3d3dy5kaXJhY3ZpZGVvLm9yZy93aWtpL2luZGV4LnBocC9Db250YWluZXJGb3JtYXRNYXBwaW5nR3VpZGVsaW5lcwotCi0yMDA5LTEwLTIyIDAyOjA5OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBjb21waWxhdGlvbiB3aXRoIGRlYnVnZ2luZyBkaXNhYmxlZAotCSAgdG90YWxfaWR4IGlzIGFsd2F5cyBldmFsdWF0ZWQuCi0KLTIwMDktMTAtMTkgMjE6NTk6NDYgKzAzMDAgIFByaWl0IExhZXMgPHBsYWVzQHBsYWVzLm9yZz4KLQotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaDoKLQkgIGNhY2FzaW5rOiBtaW5vciBjbGVhbnVwcyBmb3IgaGVhZGVyLgotCSAgVXNlIEdfQkVHSU5fREVDTFMgbWFjcm9zLCByZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBhbmQgZml4IHR5cG8uCi0JICBTZWUgIzU5OTAxOC4KLQotMjAwOS0xMC0xOSAyMTo1OToyMyArMDMwMCAgUHJpaXQgTGFlcyA8cGxhZXNAcGxhZXMub3JnPgotCi0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSAgY2FjYXNpbms6IGV4aXQgcHJvcGVybHkgd2hlbiBpbnZhbGlkIGRyaXZlciBoYXMgYmVlbiBzZWxlY3RlZC4KLQkgIFNlZSAjNTk5MDE4LgotCi0yMDA5LTEwLTIwIDE4OjIzOjI4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogU3RvcCBzY2FubmluZyBhdCB0aGUgbGFzdCBlbnRyeS4uLiBhbmQgbm90IHRoZSBvbmUgYmVmb3JlIDopCi0JICBUaGlzIGVuc3VyZXMgd2UgYWN0dWFsbHkgcHVzaCBvdXQgZXZlcnl0aGluZwotCi0yMDA5LTEwLTIwIDE3OjIwOjU1ICswMjAwICBBbmR5IFdpbmdvIDx3aW5nb0BvYmxvbmcubmV0PgotCi0JICBxdGRlbXV4OiB1bnBhY2sgbW9yZSBpbmZvcm1hdGlvbiBpbnRvIGltYWdlL3gtajJjIGNhcHMKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDogQWRkIG5ldyBmb3VyY2NzIGZvciB1c2UgYnkgdGhlIG1qMgotCSAgdW5wYWNrZXIuCi0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYyAocXRkZW11eF9wYXJzZV90cmFrKTogVW5wYWNrIEpQRUcyMDAwIGNvbXBvbmVudAotCSAgbWFwcGluZyBhbmQgY2hhbm5lbCBkZWZpbml0aW9ucyBmcm9tIHRoZSBqcDJoIGhlYWRlci4gV2lsbCBhZGQKLQkgIGNvbXBvbmVudC1tYXAgYW5kIGNoYW5uZWwtZGVmaW5pdGlvbnMgZWxlbWVudHMgdG8gdGhlIGNhcHMgaWYgdGhlCi0JICBjb21wb25lbnQgbWFwcyBvciBjaGFubmVsIGRlZmluaXRpb25zIGFyZSBub25zdGFuZGFyZCwgd2hlcmUgc3RhbmRhcmQKLQkgIG9yZGVyIG1lYW5zIFJHQiwgNDQ0IHBhY2tlZCBZVVYsIG9yIGdyZXlzY2FsZSwgd2l0aCBubyBhbHBoYSBjaGFubmVsLgotCSAgRml4ZXMgIzU5ODkxNS4KLQotMjAwOS0xMC0yMCAxNzozMzo0MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGVhdmUuYzoKLQkgIHRlc3RzOiBpbmNsdWRlIHN0ZGlvLmggZm9yIHNzY2FuZgotCi0yMDA5LTEwLTE5IDE1OjIxOjU3ICswMTAwICBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzQGhhZGVzcy5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIEZpeCB0aGUgU3RyZWFtVm9sdW1lIGludGVyZmFjZSBub3QgYmVpbmcgYWR2ZXJ0aXNlZAotCSAgZ3N0X3B1bHNlc2lua19pbnRlcmZhY2Vfc3VwcG9ydGVkKCkgd2FzIG1pc3NpbmcgYSBjaGVjayBmb3IgaXQuCi0JICBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk4OTMzCi0KLTIwMDktMTAtMTYgMjE6MTQ6MTQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBsZXZlbDogY29kZSBjbGVhbnVwCi0JICBVc2UgZ2RvdWJsZSBpbnN0ZWFkIG9mIGRvdWJsZS4gQ2FsY3VsYXRlIGZhbGxvZmZfdGltZSBvbmNlIGluc3RlYWQgb2YgdHdpY2UuCi0KLTIwMDktMTAtMTggMTU6NTI6MDIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBNRU1EVU1QIHRoZSBqdW5rIGJsb2JzCi0JICBJdCB3aWxsIG9ubHkgYWN0dWFsbHkgcHVsbCB0aGUganVuayBibG9icyBmcm9tIHVwc3RyZWFtIGlmIHRoZSBtZW1kdW1wCi0JICBsZXZlbCBpcyBhY3RpdmF0ZWQKLQotMjAwOS0xMC0xOCAxNTo1MTozNCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IFNvbWUgYXZpIGZpbGVzIGhhdmUgSU5GTyBsaXN0cyBpbiB0aGUgaGVhZGVycy4KLQotMjAwOS0xMC0xOCAxNjowMjowMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IERvbid0IHNlZWsgb24gZW1wdHkgc3RyZWFtcwotCi0yMDA5LTEwLTE4IDE1OjUwOjM5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogRW5zdXJlIF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXggb25seSB1c2VzIHZhbGlkIHN0cmVhbXMKLQotMjAwOS0xMC0xOCAxNTo0OToyOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IE9ubHkgY2FsbCBjb252ZXJ0IGZ1bmN0aW9uIGlmIHdlIGhhdmUgc3RyZi5hdWRzCi0KLTIwMDktMTAtMTggMTU6NDg6MDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBVc2UgZmlyc3QgaW5kZXhlZCBzdHJlYW0gZm9yIHNlZWtpbmcuCi0JICBJbiB0aGUgZnV0dXJlLCBtYWluX3N0cmVhbSBjYW4gYmUgYWRqdXN0ZWQgdG8gY29udGFpbiB0aGUgb3B0aW1hbCBzdHJlYW0KLQkgIGFzIG1lbnRpb25uZWQgaW4gdGhlIEZJWE1FIGxpbmUgMzQ0MAotCi0yMDA5LTEwLTE4IDE1OjQ2OjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBhdmlkZW11eDogT25seSBleHBvc2Ugc3RyZWFtcyB0aGF0IGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIGluIGl0LgotCSAgVGhpcyBndWFyYW50ZWVzIHRoYXQgaW4gcHVsbC1tb2RlLCBhbGwgc3RyZWFtcyBoYXZlIGEgdmFsaWQgaW5kZXggdG8KLQkgIHdvcmsgd2l0aC4KLQotMjAwOS0xMC0xOCAxNTo0MDozNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IFByb3Blcmx5IG1hcmsgcHJlc2VuY2Ugb2YgaW5kZXguCi0JICBJbnN0ZWFkIG9mIGJsaW5kbHkgc2F5aW5nIHdlIGhhdmUgYW4gaW5kZXgsIG9ubHkgZG8gc28gaWYgd2UgaGF2ZSBhCi0JICBub24tZW1wdHkgaW5kZXguCi0KLTIwMDktMTAtMTcgMDI6MTg6NTMgKzAyMDAgIExlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2U6IG5ldmVyIGFwcGx5IHZvbHVtZSBtb3JlIHRoYW4gb25jZQotCSAgR2VuZXJhbGx5IGRlY2lzaW9ucyBvbiB0aGUgdm9sdW1lIG9mIHRoZSBzdHJlYW0gc2hvdWxkIGJlIGRvbmUgaW5zaWRlIG9mCi0JICBQQSwgbm90IGluc2lkZSBvZiBHc3QuIE9ubHkgUEEga25vd3MgaG93IHZvbHVtZXMgdHJhbnNsYXRlIGJldHdlZW4KLQkgIGRldmljZXMgYW5kIHMgb24uCi0JICBUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhhdCBhbGwgdm9sdW1lcyBzZXQgdmlhIHRoZSB2b2x1bWUgcHJvcGVydHkgYXJlCi0JICBvbmx5IGFwcGxpZWQgKm9uY2UqIHRvIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS4gQWZ0ZXIgYXBwbHlpbmcgdGhlbSB0aGUKLQkgIGNsaWVudCBzaWRlIHdpbGwgbm90IHN0b3JlIHRoZW0gYW55bW9yZS4gVGhpcyBzaG91bGQgbWFrZSBzdXJlIHRoYXQKLQkgIHJlYWxseSBvbmx5IHVzZXItdHJpZ2dlcmVkIHZvbHVtZSBjaGFuZ2VzIGFyZSBmb3J3YXJkZWQgdG8gc2VydmVyLCBidXQKLQkgIHRoZSBjbGllbnQgbmV2ZXIgdHJpZXMgdG8gc2F2ZS9yZXN0b3JlIHRoZSB2b2x1bWUgaW50ZXJuYWxseS4KLQkgIEZpeGVzIGJ1ZyAjNTk1MjMxLgotCi0yMDA5LTEwLTE3IDA4OjU1OjE2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3BsdWdpbi5jOgotCSAgcHVsc2VzaW5rOiBJbml0aWFsaXplIGdldHRleHQgZm9yIHRoZSB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gcGx1Z2luX2luaXQoKQotCi0yMDA5LTEwLTE3IDAwOjEwOjMwICswMjAwICBMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlOiB1c2UgJ3BlcmZvcm1lcicgYXMgYSBmYWxsYmFjayBmb3IgJ2FydGlzdCcgdGFnCi0KLTIwMDktMTAtMTcgMDA6MDk6MzYgKzAyMDAgIExlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogcG8vUE9URklMRVMuaW46Ci0JICBwdWxzZTogd2hlbiBjb25zdHJ1Y3RpbmcgYSBzdHJlYW0gdGl0bGUgZnJvbSB0YWcgZGF0YSBtYWtlIHN1cmUgaXQgaXMgdHJhbnNsYXRhYmxlCi0KLTIwMDktMTAtMTcgMDA6MDY6MTUgKzAyMDAgIExlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JICBwdWxzZTogbG9vcCB3aGlsZSBjb25uZWN0aW5nIHRvIHNlcnZlcgotCSAgcHRocmVhZCBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGVyZSBhcmUgbm8gc3B1cmlvdXMgY29uZGl0aW9uIHZhcmlhYmxlCi0JICB3YWtldXBzLCBuZWl0aGVyIGRvZXMgcGFfdGhyZWFkZWRfbWFpbmxvb3BfeHh4KCkgd2hpY2ggaXMgYSB3cmFwcGVyCi0JICBhcm91bmQgaXQuIFNvIHdlIG5lZWQgdG8gbG9vcCBhcm91bmQgdGhlIF93YWl0KCkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlCi0JICB3ZSBnZXQgdGhlIHJpZ2h0IHdha2V1cC4KLQkgIEFsc28sIHVuaWZ5IHRoZSBvcmRlciBvZiB0aGUgd2FpdCBsb29wcyBhY3Jvc3MgdGhlIGZpbGUuCi0KLTIwMDktMTAtMTcgMDA6MDU6MTAgKzAyMDAgIExlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5jOgotCSAgcHVsc2U6IG1haW5sb29wIGNyZWF0aW9uIGNhbiBmYWlsIHRvbywgc28gaGFuZGxlIHRoYXQKLQotMjAwOS0xMC0xNyAwMDowMzowNiArMDIwMCAgTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuYzoKLQkgIHB1bHNlOiBhZGp1c3QgQ0hFQ0tfREVBRF9HT1RPIG1hY3JvIHRvIGdsaWIgc3R5bGUKLQotMjAwOS0xMC0xNiAxNzoyODo0MiArMDIwMCAgTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5oOgotCSogZXh0L3B1bHNlL3B1bHNlcHJvYmUuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkgIHB1bHNlOiBtYWtlIGEgZmV3IHRoaW5ncyBzbWFsbGVyIGJ5IG1ha2luZyB0aGVtIGJpdGZpZWxkcwotCi0yMDA5LTEwLTE2IDE3OjI2OjQxICswMjAwICBMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHB1bHNlOiBidW1wIG1pbmltdW0gbGlicHVsc2UgdmVyc2lvbiB0byAwLjkuMTAKLQkgIE9sZGVyIHZlcnNpb25zIHRoYW4gMC45LjEwIGFyZSByZWFsbHkgcmVhbGx5IG9sZCBhbmQgYnVnZ3kuIERyb3AKLQkgIGNvbXBhdGliaWxpdHkgd2l0aCB0aGVtLiBOb2JvZHkgc2hvdWxkIHJ1biBhbnl0aGluZyB0aGF0IG9sZC4KLQkgIEFsc28gc2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk1MDI5Ci0KLTIwMDktMTAtMTYgMTg6MTg6MzEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVidWd1dGlscy9nc3RkZWJ1Zy5jOgotCSAgZGVidWd1dGlsczogcmVnaXN0ZXIgcHVzaGZpbGVzcmMgZWxlbWVudAotCi0yMDA5LTEwLTE2IDE3OjI4OjA5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JICBhdmltdXg6IHN1cHBvcnQgKHNvbWUpIFZCUiBhdWRpbyBtdXhpbmcKLQkgIEFWSSBmb3JtYXQgY2FuIGhhbmRsZSBWQlIgYXVkaW8gcHJvdmlkZWQgYXVkaW8gY2h1bmtzIGFyZSBvZiBmaXhlZCBkdXJhdGlvbgotCSAgKGNmciBmaXhlZCBkdXJhdGlvbiB2aWRlbyBmcmFtZXMpLiAgQXBwbHkgdGhpcyBhcHByb2FjaCB0byAoYWx3YXlzKSBwYXJzZWQKLQkgIHJhdyBBQUMgYW5kIChpZiBwYXJzZWQpIHRvIE1QRUctMS8yIGF1ZGlvLgotCSAgU2VlICMzNjg2ODEuCi0KLTIwMDktMTAtMTYgMTM6NDE6NDUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBmaXggYnJhbmNoIGhpbnRzCi0JICBSZW1vdmUgaW5hcHByb3ByaWF0ZSBicmFuY2hpbmcgaGludHMgYW5kIGFkZCBzb21lIG5ldyBvbmVzLgotCi0yMDA5LTEwLTE2IDEyOjMzOjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4IHJlZ3Jlc3Npb24gaW4gaW5kaXJlY3QgZGVjb2RlIHBhdGgKLQkgIFJldmVydCB2YXJpYWJsZSBuYW1lIGJhY2sgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoZSBHX0xJS0VMWSB3YXMKLQkgIGFkZGVkIChpbiBjb21taXQgNjljMjRmYjkpLiBUaGUgY29kZSB3b3JrcyBiZXR0ZXIgdGhhdCB3YXkuCi0KLTIwMDktMTAtMTYgMDI6NDc6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBmaXggcmVncmVzc2lvbiB3aXRoIGNlcnRhaW4gZm9ybWF0cwotCSAgRml4IHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSBwcmV2aW91cyBjb21taXQgKCM1OTg1MTcpLgotCi0yMDA5LTEwLTE1IDE5OjQ5OjU1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZG9uJ3QgdXNlIGRlY29tcHJlc3Mgc3RydWN0dXJlIG1lbWJlcnMgd2Ugc2hvdWxkbid0IGJlIHVzaW5nCi0KLTIwMDktMTAtMTQgMTc6NTM6NTIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiByZW1vdmUgc29tZSB1bnVzZWQgbWVtYmVycyBmcm9tIGpwZWdkZWMgaW5zdGFuY2Ugc3RydWN0dXJlCi0KLTIwMDktMTAtMTYgMTE6NTM6MzggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSAgYnVpbGQ6IHVzZSBnc3QtZ2xpYi1nZW4ubWFrIHRvIGZpeCB0aGUgZ2xpYiBidWlsZCBydWxlcy4KLQkgIFRoZSBidWlsZCBydWxlcyBpbiBnbGliLWdlbi5tYWsgd2VyZSB1c2luZyBwYXR0ZXJuIHJ1bGVzIGluIGEgbm9uIHNhdmUgd2F5LgotCi0yMDA5LTEwLTE2IDEwOjE1OjM1ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA4NWQxNTMwIHRvIDA3MDJmZTEKLQotMjAwOS0xMC0xNSAyMTowNDowMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBhZGp1c3QgZmxvdyByZXR1cm4gYWdncmVnYXRpb24gdG8gdXBkYXRlZCBsb29wX2RhdGEKLQkgIEluIHBhcnRpY3VsYXIsIGVhY2ggc3RyZWFtIGlzIG5vdyB0cmVhdGVkIHNlcGFyYXRlbHksIGFuZCBvbmUgc3RyZWFtJ3MKLQkgIEVPUyBzaG91bGQgbm90IGxlYWQgdG8gb3ZlcmFsbCBFT1MuCi0KLTIwMDktMTAtMTUgMTE6NTI6MzUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBjaGVjayBzb21lIG1vcmUgYXRvbSBzaXplcyBwcmlvciB0byBwYXJzaW5nCi0KLTIwMDktMTAtMTUgMTM6MTk6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3A6IGhhbmRsZSBldmVudHMgaW4gVENQIG1vZGUKLQkgIFdlIG5lZWQgdG8gaGFuZGxlIGV2ZW50cyBpbiBUQ1AgbW9kZSBzbyB0aGF0IHdlIGNhbiByZXBseSB0byB0aGUgTEFURU5DWSBldmVudAotCSAgd2l0aCBUUlVFLgotCi0yMDA5LTEwLTE1IDExOjI0OjQ1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGFkZCBtaXNzaW5nIGFyZ3VtZW50IGluIGRlYnVnIG1lc3NhZ2UKLQotMjAwOS0xMC0xNCAxODo1ODowNiArMDIwMCAgTWFydmluIFNjaG1pZHQgPG1hcnZAZXhoZXJiby5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zsdm11eC5jOgotCSAgZmx2bXV4OiBVc2UgbG9vcCB0ZXN0IHRvIHByZXZlbnQgdGltZW91dCBvbiBzbG93IG1hY2hpbmVzCi0JICBQYXJ0aWFsbHkgZml4ZXMgYnVnICM1OTc3MzkuCi0KLTIwMDktMTAtMTQgMTY6MTU6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZvcndhcmQgZXZlbnRzIGludG8gdGhlIHJ0cGJpbgotCSAgT25seSBjYXRjaCB0aGUgU0VFSyBldmVudCBvbiB0aGUgc3JjcGFkIGFuZCBsZXQgb3RoZXIgZXZlbnRzIGVudGVyIHRoZSBydHBiaW4uCi0KLTIwMDktMTAtMTQgMTE6MzM6MjQgLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEZpeCBsYXRlIHRhZ3MgZmluZGluZwotCSAgVXNlIHRoZSBjb3JyZWN0IHRhZ2xpc3QgdmFyaWFibGUgd2hlbiBub3RpZnlpbmcgb2YgbGF0ZSB0YWdzLgotCi0yMDA5LTEwLTE0IDEzOjA5OjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgYXZpZGVtdXg6IHVzZSBHc3RJbmRleCBmb3IgKGxpbWl0ZWQpIHNlZWtpbmcgaW4gcHVzaCBtb2RlCi0JICAuLi4gYnV0IGRpc2FibGUgdGhpcyBmb3Igbm93LiAgQWx0aG91Z2ggaXQgYmFzaWNhbGx5IHdvcmtzIGZpbmUsCi0JICB1c2VyIGV4cGVyaWVuY2UgbWlnaHQgYmUgc2hha3kgKGRlcGVuZGluZyBvbiB0YXN0ZSksIHNpbmNlIHRoZXJlCi0JICBpcyBubyBrZXlmcmFtZSBpbmZvIGluIHB1c2ggbW9kZS4KLQotMjAwOS0xMC0xNCAxMzowODo0NyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBhZGQgR3N0SW5kZXggc3VwcG9ydAotCi0yMDA5LTEwLTE0IDExOjU1OjMzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGFsc28gZGV0ZXJtaW5lIGR1cmF0aW9uIGluIHB1c2ggbW9kZQotCi0yMDA5LTEwLTE0IDExOjU0OjQ0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgcXRkZW11eDogYWRkIEdzdEluZGV4IHN1cHBvcnQKLQotMjAwOS0xMC0xNCAwNzozODoyNiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IFNldCBkdXJhdGlvbiBvbiBidWZmZXJzCi0JICBVc2UgZnJhbWVyYXRlIHRvIGVzdGltYXRlIGR1cmF0aW9uIG9mIGJ1ZmZlcnMuCi0JICBGaXhlcyAjNTkwMzYyCi0KLTIwMDktMTAtMTQgMTI6Mjg6NTUgKzAyMDAgIEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZiBhdCB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgIHJ0cHB0ZGVtdXg6IG9ubHkgZm9yd2FyZCB0aGUgbG9zdC1ldmVudCB0byB0aGUgbGFzdCBzZWVuIHB0LW51bWJlcgotCSAgZm9yd2FyZCBhbGwgZXZlbnRzIG9uIGFsbCBwYWRzIGV4Y2VwdCBmb3IgdGhlIFBhY2tldExvc3QgZXZlbnQsIHdoaWNoIHdlIHdhbnQgdG8KLQkgIGZvcndhcmQgdG8gdGhlIGxhc3Qgc2VlbiBwdCBwYWQuCi0JICBGaXhlcyAjNTk4Mzc3Ci0KLTIwMDktMTAtMDYgMjI6Mjg6NTAgKzAzMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogc2V0IGRlc2lyZWQgbWlucmVxIHZhbHVlIHRvIHNlZ3NpemUvbGF0ZW5jeS10aW1lCi0JICBJZiB3ZSBsZXQgdGhlIGRhZW1vbiBkZWNpZGUgZnJlZWx5IGJ5IHBhc3NpbmcgLTEsIHdlIGVuZCB1cCBhbHdheXMgZ2V0dGluZyAyMG1zLgotCSAgV2Ugd2FudCB0byBzZXQgdGhpcyB2YWx1ZSBiZWNhdXNlIGluIHNvbWUgY2FzZXMgd2Ugd2FudCB0byBzZWxlY3QgYSBoaWdoZXIKLQkgIGxhdGVuY3ktdGltZSBpbiBvcmRlciB0byBzYXZlIHBvd2VyLgotCSAgRml4ZXMgIzU5NzYwMQotCi0yMDA5LTEwLTE0IDEwOjQxOjIxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYTNlM2NlNCB0byA4NWQxNTMwCi0KLTIwMDktMTAtMTMgMTg6MzM6MzQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JICB0ZXN0cy9waXBlbGluZS9mbGFjOiBGaXggYnVpbGQgb24gbWFjb3N4IDEwLjUKLQotMjAwOS0xMC0xMyAxODoxOTozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGRlbW90ZSBzb21lIHdhcm5pbmdzIHRvIGRlYnVnCi0KLTIwMDktMTAtMTMgMTc6NDc6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvYXZpLWlkcy5oOgotCSAgYXZpOiBhZGQgbmV3IGF2aSBmbGFnIHdlIG1pZ2h0IHdhbnQgdG8gdXNlCi0KLTIwMDktMTAtMTMgMTc6NDY6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGNhbGN1bGF0ZSBzdWdnZXN0ZWQgYnVmZmVyIHNpemUKLQkgIENhbGN1bGF0ZSB0aGUgc3VnZ2VzdGVkIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHRoZSBsYXJnZXN0IGNodW5rIGluIHRoZSBmaWxlLgotCSAgU2VlICM1OTc4NDcKLQotMjAwOS0xMC0xMyAxNzo0NToxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGF2aW11eDogYWRkIGpwZWcyMDAwIHRvIGFsbG93ZWQgY2FwcwotCi0yMDA5LTEwLTEzIDE3OjQxOjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogYWRkIGRlYnVnIGZvciB0aGUgc3VwZXJpbmRleCBvZmZzZXRzCi0KLTIwMDktMTAtMTMgMTY6MDI6MzcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZwotCSAgRml4IGFub3RoZXIgYm9ndXMgbWF5LWJlLXVzZWQtdW5pbml0aWFsaXplZCB3YXJuaW5nIGluIHF0ZGVtdXgKLQotMjAwOS0xMC0xMyAxMzowODozMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JICBhdmk6IGxvd2VyIG1heCBmaWxlIHNpemUKLQkgIE1ha2UgYSBjb25zdGFudCBvZiB0aGUgbWF4IGZpbGUgc2l6ZSBhbmQgbG93ZXIgdGhlIHZhbHVlIHRvIHdoYXQgZmZtcGVnIGRvZXMsCi0JICBob3BlZnVsbHkgaW1wcm92aW5nIGNvbXBhdGliaWxpdHkgd2l0aCB3aW5kb3dzIG1lZGlhIHBsYXllci4KLQkgIFNlZSAjNTk3ODQ3Ci0KLTIwMDktMTAtMTMgMDE6MDI6MTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBmaXggYm9ndXMgd2FybmluZyBhYm91dCBkaXNjb250IGZsYWcgb24gZmlyc3QgYnVmZmVyCi0JICBUaGUgdmVyeSBmaXJzdCBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIHRoZSBESVNDT05UIGZsYWcgc2V0LCBubwotCSAgbmVlZCB0byB3YXJuIGFib3V0IHRoYXQuIE9ubHkgd2FybiBpZiB3ZSBnZXQgYSBESVNDT05UIGJ1ZmZlciBpbgotCSAgbm9uLXBhY2tldGlzZWQgbW9kZSBhbmQgd2UgYWxyZWFkeSBoYXZlIHNvbWUgZGF0YS4KLQotMjAwOS0xMC0xMyAwMDo0MTo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGZpeCBjcmFzaCBmb3IgdW51c3VhbCB2ZXJ0aWNhbCBjaHJvbWEgc3Vic2FtcGxpbmcgZmFjdG9ycwotCSAgRml4ZXMgIzU5NzM1MS4KLQotMjAwOS0xMC0xMyAwMDoxMjo0MiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5ncwotCSAgVGhlIGdjYyBvbiB0aGUgT1MvWCBidWlsZGJvdCBjb21wbGFpbnMgYWJvdXQgdGhlc2UgdmFyaWFibGVzIG5vdCBiZWluZwotCSAgaW5pdGlhbGl6ZWQsIGV2ZW4gdGhvdWdoIHRoZXkgY2FuJ3QgcG9zc2libHkgYWN0dWFsbHkgYmUgdXNlZAotCSAgdW5pbml0aWFsaXplZC4KLQotMjAwOS0xMC0xMSAxMTozNToyMyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkgIGR0bWY6IGZpeCB3YXJuaW5ncyBpbiBtYWNvc3ggc25vdyBsZW9wYXJkCi0KLTIwMDktMTAtMTAgMDA6Mzc6MDggKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4ZXMgd2FybmluZyBidWlsZGluZyBpbiBzbm93IGxlb3BhcmQKLQotMjAwOS0xMC0wOSAxNzoxMjo0NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFsc28gY29uc2lkZXIgUXVpY2t0aW1lIHRleHQgc3VidGl0bGVzCi0KLTIwMDktMTAtMDkgMTc6MDI6NTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwcm92aWRlIGxhbmd1YWdlIHRhZyBmb3Igc3RyZWFtCi0KLTIwMDktMTAtMDkgMTY6MzA6NTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZWZhY3RvciBjb21tb24gcGFydHMgaW4gdHJhY2sgcGFyc2luZwotCi0yMDA5LTEwLTA5IDE2OjIxOjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgcXRkZW11eDogcmVmYWN0b3IgYnVmZmVyIHByb2Nlc3NpbmcgYW5kIHNlbmRpbmcKLQkgIC4uLiBzbyBpdCBjYW4gYmUgdXNlZCBpbiBib3RoIHB1bGwgYW5kIHB1c2ggYmFzZWQgbW9kZS4KLQotMjAwOS0xMC0wOCAxMzozOToyNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGV4dHJhY3QgcGFsZXR0ZSBkYXRhIGZvciBkdmQgc3VicGljdHVyZSBzdHJlYW1zCi0JICAuLi4gYW5kIHNlbmQgaXQgZG93bnN0cmVhbSB1c2luZyBjdXN0b20gZHZkIGV2ZW50Ci0KLTIwMDktMTAtMDcgMTQ6MDM6MTcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogc3VwcG9ydCAzR1BQIHRpbWVkIHRleHQgc3VidGl0bGVzCi0JICBJbiBwYXJ0aWN1bGFyLCBhbHNvIG1ha2Ugc3VidGl0bGUgc3VwcG9ydCBsZXNzIHN1YnAoaWN0dXJlKS1jZW50cmljLgotCi0yMDA5LTEwLTA3IDE2OjE1OjU1ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogTlVMTCBpcyBub3QgYSB2YWxpZCB0YWdsaXN0Ci0KLTIwMDktMDktMjMgMTc6MjA6MjUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogcmVjb2duaXplIHNvbWUgbW9yZSBlbmN5cHRlZCB0cmFjayBjYXNlcwotCi0yMDA5LTEwLTA5IDE1OjU5OjI1ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JICBpZDM6IGZpeGVzIHdhcm5pbmdzIGJ1aWxkaW5nIG9uIG1hY29zeAotCSAgQW5vdGhlciByb3VuZCBvbiB0aGUgZm9ybWF0aW5nIG9mIHRoYXQgZGVidWcgbGluZS4KLQotMjAwOS0xMC0wOSAxNDo0NDowMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgaWQzOiBjYXN0IHBvaW50ZXIgbWF0aCByZXN1bHRzIHRvIGdsb25nCi0KLTIwMDktMTAtMDkgMTQ6Mzc6MzIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhYzogYXBwYXJlbnRseSBvbiBzb21lIHBsYXRmb3JtcyBhIEZMQUNfX3VpbnQ2NCE9Z3VpbnQ2NAotCi0yMDA5LTEwLTA5IDE0OjIxOjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBidWlrZDogZXhwbGljaXRlbHkgY2FzdCwgdG8gdGVsbCBzb21lIGNvbXBpbGVycyB0aGF0IHRoaXMgaXMgbm90IGxvbmcgaW50Ci0KLTIwMDktMTAtMDkgMTM6Mzg6MTcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBidWlsZDogZG9uJ3QgY2FzdCwgYnV0IHVzZSB0aGUgcmlnaHQgZm9ybWF0IHNwZWNpZmllZCBpbnN0ZWFkCi0JICBUaGlzIGNvcnJlY3Qgc29tZSBvZiB0aGUgcHJldmlvdXMgbWFjb3MgZml4ZXMuCi0KLTIwMDktMTAtMDkgMTI6NDA6NDcgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2OiBmaXggd2FybmluZ3Mgb24gbWFjb3N4Ci0KLTIwMDktMTAtMDkgMTI6MjU6MTkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhYzogZml4IHdhcm5pbmdzIG9uIG1hY29zeAotCi0yMDA5LTEwLTA5IDEyOjE5OjM1ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuYzoKLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzoKLQkgIGFubm9kZXg6IGZpeCB3YXJuaW5ncyBpbiBtYWNvc3gKLQotMjAwOS0xMC0wOSAxMjoxNDoyMiArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkgIG9zeHZpZGVvOiBmaXggYSB3YXJuaW5nIGRvaW5nIGEgY2FzdAotCi0yMDA5LTEwLTA5IDEyOjExOjEyICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6Ci0JICBvc3hhdWRpbzogZml4IHdhcm5pbmdzIG9uIG1hY29zeAotCi0yMDA5LTEwLTA5IDEyOjAxOjEwICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgcnRwdnJhd3BheTogZml4IHdhcm5pbmcgb24gbWFjb3N4Ci0KLTIwMDktMTAtMDkgMTE6NTc6NTkgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICBydHBoMjYzcGF5OiBmaXggd2FybmluZyBvbiBtYWNvc3gKLQotMjAwOS0xMC0wOSAxMTo1NDowMyArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggd2FybmluZ3MgYnVpbGRpbmcgb24gbWFjb3N4Ci0KLTIwMDktMTAtMDkgMTE6NDI6MzYgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuYzoKLQkgIGlkM2RlbXV4OiBmaXggcHJpbnRmIHdhcm5pbmdzIG9uIG1hY29zeAotCi0yMDA5LTEwLTA5IDExOjMwOjAwICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBmaXggd2FybmluZyBpbiBtYWNvc3ggbWFraW5nIHRoZSBmb3JtYXQgcG9ydGFibGUKLQotMjAwOS0xMC0wOSAxMDo1MToyOSArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWZpcmZpbHRlci5jOgotCSAgYXVkaW9meDogdXNlIEdfR1VJTlQ2NF9GT1JNQVQgdG8gZml4IHdhcm5pbmdzIG9uIE9TWAotCi0yMDA5LTEwLTA5IDEwOjExOjM4ICswMjAwICBKb3NlcCBUb3JyYSA8bjc3MGdhbGF4eUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6Ci0JICBvc3hhdWRpbzogRml4ZXMgYnVpbGQgb24gbWFjb3N4IHNub3cgbGVvcGFyZC4KLQotMjAwOS0xMC0wOSAxMTozNDoxNiArMDIwMCAgUGF1IEdhcmNpYSBpIFF1aWxlcyA8cGdxdWlsZXNAZWxwYXVlci5vcmc+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgIHY0bDI6IEluY2x1ZGUgc3lzL2lvY3RsLmggZm9yIHRoZSBWNEwgaW9jdGwgcmVxdWVzdHMKLQkgIE9sZCB2aWRlb2RldmljZTIuaCBrZXJuZWwgaGVhZGVycyB1c2VkIGlvY3RsIHN0dWZmIHdpdGhvdXQKLQkgIGluY2x1ZGluZyBpb2N0bC5oLCBtYWtpbmcgY29tcGlsYXRpb24gZmFpbCBvbiBvbGRlciBzeXN0ZW1zLgotCSAgTm90ZTogSW5jbHVkaW5nIGlvY3RsLmggaGVyZSBpcyBvbmx5IGEgd29ya2Fyb3VuZCBmb3Igb2xkIGtlcm5lbAotCSAgaGVhZGVycywgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBldmVyeWJvZHkgaGFzIG5ldyBlbm91Z2ggaGVhZGVycy4KLQkgIEZpeGVzIGJ1ZyAjNTk3ODY3LgotCi0yMDA5LTEwLTA5IDAwOjE0OjA3ICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkgIGNoZWNrOiBNYWtlIHRoZSBsZXZlbCB1bml0IHRlc3Qgc3VjY2VlZCBvbiBTb2xhcmlzIDEwCi0JICBBZGQgYSBjb25maWd1cmUgY2hlY2sgZm9yIGZ1bmN0aW9uYWwgaXNpbmYoKSBhbmQgZnBjbGFzcygpLCBhbmQKLQkgIHVzZSBmcGNsYXNzKCkgd2hlcmUgcG9zc2libGUgd2hlbiBpc2luZigpIGlzIG5vdCBhdmFpbGFibGUuCi0KLTIwMDktMDUtMTYgMTM6NTI6NTAgKzAzMDAgIFJlbsOpIFN0YWRsZXIgPHJlbmUuc3RhZGxlckBub2tpYS5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogZml4IHN0cnN0cigpIHVzYWdlIG9uIHBvc3NpYmx5IHVudGVybWluYXRlZCBzdHJpbmcKLQotMjAwOS0xMC0wOCAxNjoxNjoxNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBjaGVjazogTGluayBhZ2FpbnN0IExJQk0gYW5kIGluY2x1ZGUgbWF0aC5oIGZvciBpc2luZigpCi0KLTIwMDktMTAtMDcgMjE6NTE6MzggKzAxMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZC5zaW1vbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3NzL2dzdG9zc2F1ZGlvLmM6Ci0JICBvc3M6IERvd25ncmFkZSB0aGUgcmFuayBvZiBvc3NzcmMgdG8gU0VDT05EQVJZCi0JICB3aGljaCBpcyB0aGUgc2FtZSByYW5rIGFzIG9zc3NpbmsgaGFzLgotCSAgRml4ZXMgYnVnICM1OTc3MzAuCi0KLTIwMDktMTAtMDggMTA6NTk6NTMgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDE5ZmE0ZjMgdG8gYTNlM2NlNAotCi0yMDA5LTEwLTA4IDEwOjIwOjA5ICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBhdmkvd2F2OiBGaXggc29tZSBjb21waWxlciB3YXJuaW5ncyBhYm91dCBpbmNvbXBhdGlibGUgcG9pbnRlcnMuCi0KLTIwMDktMTAtMDUgMTc6MzY6NTUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGUuYzoKLQkgIG11bHRpZmlsZTogRml4IHBsdWdpbiBkZXNjcmlwdGlvbgotCi0yMDA5LTEwLTA3IDE0OjAzOjIwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9hbm5vZGV4L2dzdGNtbWx1dGlscy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHMuYzoKLQkqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1hdWRpb3Rlc3QuYzoKLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9zcGVjdHJ1bS1leGFtcGxlLmM6Ci0JICBidWlsZDogZnByaW50Ziwgc3ByaW50Ziwgc3NjYW5mIG5lZWQgc3RkaW8uaAotCi0yMDA5LTEwLTA3IDAwOjMzOjQ5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICBlcXVhbGl6ZXI6IHVzZSBzaGVsZmluZyBmaWx0ZXJzIGZvciBmaXJzdCBhbmQgbGFzdCBiYW5kCi0JICBSZWZhY3RvciB0aGUgZmlsdGVyIHNldHVwLiBBZGQgdHdvIG5ldyBmaWx0ZXJzIHdpdGggc2hlbGYgY2hhcmFjdGVyaXN0aWNzIGZvcgotCSAgZmlyc3QgYW5kIGxhc3QgYmFuZC4gQ2hhbmdlIGdhaW4gY2FsY3VsYXRpb24gYXMgcmVjb21tZW5kZWQgaW4gdGhlIHF1b3RlZAotCSAgZG9jdW1lbnQgKG5vIHFydCBuZWVkZWQpLiBSZW5hbWUgdmFyaWFibGVzIHRvIG1hdGNoIHRoZSBmb3JtdWxhcyBpbiB0aGUKLQkgIGRvY3VtZW50LgotCi0yMDA5LTEwLTAyIDIzOjUxOjI5ICswMzAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIHB1bHNlc3JjOiBndWFyZCBmcmFnbWVudCBzaXplIHdpdGggYSBsb3dlciBsaW1pdCBiYXNlZCBvbiBsYXRlbmN5LXRpbWUKLQkgIEluIGNhc2UgdGhhdCB0aGUgcHVsc2UgZGFlbW9uIHJ1bnMgdGhlIHNvdXJjZSBkZXZpY2UgYXQgYSByZWxhdGl2ZWx5IGxvdyBmaXhlZAotCSAgZnJhZ21lbnQgc2l6ZSBjb21wYXJlZCB0byB0aGUgcmVxdWVzdGVkIGxhdGVuY3ktdGltZSwgY29uZmlndXJlIHRoZSByaW5nIGJ1ZmZlcgotCSAgc2Vnc2l6ZSB0byB0aGUgbGFyZ2VzdCBpbnRlZ2VyIG11bHRpcGxlIG9mIHRoZSBmcmFnbWVudCBzaXplIHRoYXQgaXMgc3RpbGwKLQkgIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIGxhdGVuY3ktdGltZS4KLQkgIEZpeGVzIGJ1ZyAjNTk3NDYzLgotCi0yMDA5LTEwLTA2IDE3OjQwOjQ3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IGNvbW1lbnQvbG9nZ2luZyBjbGVhbnVwcyBhbmQgbW9yZSBicmFuY2ggZ3VpZGVzCi0KLTIwMDktMTAtMDUgMjI6NDM6MTEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIGVxdWFsaXplcjogZml4IGZpbHRlciBoaXN0b3J5IHVzYWdlLiBGaXhlcyAjNTk3Mzk3Ci0JICBUaGUgcHJvY2VzcyBmdW5jdGlvbnMgd2hlcmUgb3ZlcndyaXRpbmcgdGhlIGhpc3RvcnkgZm9yIGVhY2ggY2hhbm5lbC4gQWxzbyBwdWxsCi0JICBzb21lIHN0YXRpYyB0aGluZ3Mgb3V0IG9mIHRoZSBpbm5lciBsb29wLgotCi0yMDA5LTEwLTA1IDE2OjA3OjI0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogdXNlIGxvY2tpbmcgYXJvdW5kIHRoZSBzZXNzaW9ucwotCi0yMDA5LTEwLTA1IDExOjQ2OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogbWFrZSBzdXJlIGNvbXBhdGlibGUgYnJhbmRzIGJ1ZmZlciBleGlzdHMgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQKLQotMjAwOS0xMC0wNCAyMTo1OToyNCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AZ21haWwuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggcHJpbnRmIHdhcm5pbmdzIG9uIE9TWAotCSAgQ2FzdCB2YXJpYWJsZXMgcGFzc2VkIHRvIHByaW50ZiB0byBhdm9pZCB3YXJuaW5ncyBhYm91dCBpbmNvcnJlY3QKLQkgIGZvcm1hdHMgKG1vc3QgbGlrZWx5IGNhdXNlZCBieSBzaXplb2YgcmV0dXJuaW5nIGEgc2l6ZV90KS4KLQkgIEZpeGVzICM1OTczNDguCi0KLTIwMDktMTAtMDIgMDA6MjM6MzQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiByZW1vdmUgaW50ZXJuYWwgZ2VucmUgdGFibGUKLQkgIE5vIG5lZWQgdG8gbWFpbnRhaW4gb3VyIG93biBnZW5yZSB0YWJsZSBpbiBxdGRlbXV4LiBUaGUgZ2VucmVzIGFyZQotCSAgaWRlbnRpY2FsIHRvIHRoZSBJRDMgZ2VucmVzLCBzbyB3ZSBjYW4ganVzdCB1c2UgbGliZ3N0dGFnJ3MKLQkgIGdzdF90YWdfaWQzX2dlbnJlX2dldCgpIHRvIGxvb2sgdGhlbSB1cC4KLQotMjAwOS0xMC0wMyAxNzoxODoyOCArMDIwMCAgUm9iZXJ0IFN3YWluIDxyb2JlcnQuc3dhaW5AZ21haWwuY29tPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBGaXggcHJpbnRmIGZvcm1hdHMgdG8gYXZvaWQgd2FybmluZ3MgaW4gYXZpZGVtdXguIEZpeGVzICM1OTcyMTQKLQkgIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTcyMTQKLQotMjAwOS0xMC0wMyAwOTo1Mjo1NyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogQ2hhbmdlIG9uZSBHU1RfV0FSTklORyB0byBhIEdTVF9ERUJVRwotCi0yMDA5LTEwLTAyIDE0OjM3OjU0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgZmx2ZGVtdXg6IElmIHRoZXJlJ3Mgbm8gYXVkaW8gc3RyZWFtIGFmdGVyIDYgc2Vjb25kcyBvZiB2aWRlbyBzaWduYWwgbm8tbW9yZS1wYWRzCi0JICAuLi5hbmQgdGhlIG90aGVyIHdheSBhcm91bmQuIEFsc28gaWdub3JlIGFueSBhdWRpby92aWRlbyBzdHJlYW1zIHRoYXQgYXBwZWFyCi0JICBhZnRlciBuby1tb3JlLXBhZHMuCi0JICBGaXhlcyBidWcgIzU5NzA5MS4KLQotMjAwOS0xMC0wMiAxNDozNzo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgIGZsdmRlbXV4OiBNYWtlIHN1cmUgdG8gb25seSBzaWduYWwgbm8tbW9yZS1wYWRzIGEgc2luZ2xlIHRpbWUKLQotMjAwOS0xMC0wMiAyMjo1NTo0NSArMDMwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZTogcmVuYW1lIHBhX2J1ZmZlcl9hdHRyIHZhcmlhYmxlcwotCSAgTWFrZXMgaXQgbXVjaCBlYXNpZXIgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24gYW5kIGlzIGEgbG90IGxlc3MgZXJyb3IgcHJvbmUuCi0KLTIwMDktMTAtMDIgMTg6MjU6MTYgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkgIHJ0cDogYWRkIG1pc3NpbmcgaW5jbHVkZSB0byBmaXggdGhlIGJ1aWxkCi0KLTIwMDktMTAtMDIgMTM6MTU6NTkgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICB2aWRlb2ZpbHRlcjogYWRkIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCB0byBwcm9wZXJ0eSBzZXR0ZXIKLQotMjAwOS0xMC0wMiAxMzoxMDo0NCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIGxldmVsOiBkb24ndCBnaXZlIHdyb25nIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIG1lc3NhZ2UgZG9jcwotCi0yMDA5LTEwLTAxIDEyOjUyOjQwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogY2FjaGUgbGF0ZW5jeSBpbiBuYW5vc2Vjb25kcwotCSAgQ2FjaGUgdGhlIGxhdGVuY3kgaW4gbmFub3NlY29uZHMgdW5pdHMgdG8gYXZvaWQgaGF2aW5nIHRvIGNvbnZlcnQgdGhlCi0JICBtaWxsaXNlY29uZHMgdmFsdWUgdG8gbmFub3NlY29uZHMgYWxsIHRoZSB0aW1lLgotCi0yMDA5LTEwLTAxIDEyOjEyOjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogaGFuZGxlIC0xIGlucHV0IHRpbWVzdGFtcHMKLQkgIERvbid0IHRyeSB0byBjaGVjayBhIC0xIHRpbWVzdGFtcCBhZ2FpbnN0IHRoZSBtYXggZGVsYXkuCi0KLTIwMDktMTAtMDEgMTA6NTQ6NTUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpOiBkb24ndCBtaXN1ZXMgcGVyZi1jYXRlZ29yeSBhbmQgcmVtb3ZlIHVudXNlZCBleHQgY2F0ZWdvcnkKLQkgIFRoZSBwZXJmb3JtYW5jZSBjYXRlZ29yeSBpcyBtZWFudCB0byBiZSB1c2VkIHRvIGF1ZGl0IGNvZGVwYXRocyB0aGF0IGxlYWQgdG8gYmFkCi0JICBwZXJmb3JtYW5jZSAoZS5nLiBjb3BpZXMsIGNvbnZlcnNpb24gdGhhdCBjYW4gYmUgYXZvaWRlZCkuCi0JICBSZW1vdmUgdGhlIGV2ZW50IGNhdGVnb3J5IHdoaWNoIGlzIG5vdCB1c2VkLgotCi0yMDA5LTA5LTE2IDE0OjIzOjI0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkgIHJ0cGc3MjlwYXkvZGVwYXk6IERlbW90ZSBwZXItYnVmZmVyIGRlYnVnIG1lc3NhZ2VzIHRvIGxvZyBsZXZlbAotCi0yMDA5LTA5LTE2IDE0OjE2OjI3IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSAgcnRwZzcyOXBheTogRG9uJ3QgbGVhayBpbmNvbWluZyBidWZmZXJzIGFmdGVyIHN1YmJ1ZmZlcmluZyB0aGVtCi0KLTIwMDktMDktMTYgMTM6NTc6MDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOgotCSAgcnRwZzcyOXBheS9kZXBheTogQWRkIGRlYnVnIGNhdGVnb3JpZXMKLQotMjAwOS0wOS0xNiAxMzo1NToxOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzoKLQkgIHJ0cGc3MjlwYXk6IFJlbW92ZSBsb25nIHVubmVlZGVkIGRlZmluZSByZXBsYWNlbWVudAotCi0yMDA5LTA5LTMwIDE4OjA2OjA3ICswMTAwICBDaHJpc3RpYW4gRi5LLiBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L01ha2VmaWxlLmFtOgotCSAgVXBkYXRlIG1ha2VmaWxlIHdpdGggbWlzc2luZyBoZWFkZXIgZmlsZQotCi0yMDA5LTA5LTMwIDE4OjQ1OjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1BTVIuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLVBDTUEuc2g6Ci0JKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zaDoKLQkqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjNwLWFsc2FzcmMtQU1SLnNoOgotCSogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjQtYWxzYXNyYy1QQ01BLnNoOgotCSAgcnRwOiBVc2UgYXV0b2F1ZGlve3Npbmssc3JjfSBpbnN0ZWFkIG9mIGFsc2EgaW4gdGhlIGV4YW1wbGVzCi0KLTIwMDktMDktMjkgMTc6NTE6MDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZG9uJ3QgbGVhayBvdXRwdXQgYnVmZmVycyBvbiBkZWNvZGluZyBlcnJvcnMKLQkgIFRoZSBzZXRqbXAgaGFuZGxlcyBsaWJqcGVnIGVycm9yLiBGcmVlIHRoZSBvdXRwdXRiZmZlciBpZiB3ZSBkb24ndCBuZWVkIGl0LgotCi0yMDA5LTA5LTI5IDAwOjAxOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4ICd1bnVzZWQgdmFyaWFibGUnIGNvbXBpbGVyIHdhcm5pbmcgd2hlbiBjb21waWxpbmcgd2l0aCBHU1RfRElTQUJMRV9HU1RfREVCVUcKLQotMjAwOS0wOS0yMyAxNDoyNTowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpOiBzbWFsbCBjbGVhbnVwcwotCi0yMDA5LTA5LTIzIDEzOjU3OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IGZpeCB0aW1lc3RhbXBpbmcgaW4gc29tZSBhdWRpbyBzdHJlYW1zCi0JICBGb3IgdmJyIGF1ZGlvIHN0cmVhbXMgd2UgbmVlZCB0byB1c2UgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gY2FsY3VsYXRlIHRoZQotCSAgdGltZXN0YW1wcy4KLQkgIFdoZW4gdGhlIGFsbG9jYXRpb24gb2YgYWRkaXRpb25hbCBpbmRleCBtZW1vcnkgZmFpbHMsIGRvbid0IHRocm93IGF3YXkgd2hhdAotCSAgd2UgaGFkIGJlZm9yZS4KLQkgIFZhcmlvdXMgY2xlYW51cHMuCi0KLTIwMDktMDktMjMgMTI6NTY6MDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aTogYWRkIHN1cHBvcnQgZm9yIE9ETUwgaW5kZXhlcyBhZ2FpbgotCi0yMDA5LTA5LTIyIDIyOjEyOjU4ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBhdmk6IGltcGxlbWVudCBpbmRleCBzY2FubmluZwotCSAgSW1wbGVtZW50IHNjYW5uaW5nIG9mIHRoZSBmaWxlIHdoZW4gd2UgY2FuIHBhcnNlIHRoZSBpbmRleC4KLQkgIFNvbWUgcmVmYWN0b3Jpbmcgb2YgY29tbW9uIGNvZGUuCi0JICBDbGVhbnVwcyBhbmQgY29tbWVudHMuCi0JICBSZW1vdmUgc29tZSByZWltcGxlbWVudGVkIGNvZGUuCi0JICBSZW1vdmUgaW5kZXggbWFzc2FnZSBjb2RlIGFuZCBwdXQgYSBGSVhNRSB3aGVyZSB3ZSBzaG91bGQgZG8gc29tZXRoaW5nCi0JICBlcXVpdmFsZW50IGxhdGVyLgotCi0yMDA5LTA5LTIyIDE4OjE4OjIwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IGZpeCByZXZlcnNlIHBsYXliYWNrCi0KLTIwMDktMDktMjIgMTc6NDI6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aTogZml4IHByZXYga2V5ZnJhbWUgc2VhcmNoIGFuZCBjbGVhbnVwcwotCi0yMDA5LTA5LTIyIDE0OjUxOjMwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IHJlbW92ZSBjb2RlIHRoYXQgZ290IGNvbnZlcnRlZAotCi0yMDA5LTA5LTIyIDE0OjQ0OjQyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBhdmk6IG1vcmUgY2xlYW51cHMKLQkgIFJlbW92ZSBzb21lIGR1cGxpY2F0ZSBjb3VudGVycy4KLQkgIEJlIHNtYXJ0ZXIgd2hlbiB1cGRhdGVpbmcgdGhlIGN1cnJlbnQgdGhlIHRpbWVzdGFtcCBhbmQgb2Zmc2V0IGluIHRoZSBzdHJlYW0KLQkgIGJlY2F1c2Ugd2UgY2FuIHJldXNlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCB2YWx1ZXMgd2hlbiBzaW1wbHkgZ28gZm9yd2FyZCBvbmUKLQkgIHN0ZXAuCi0JICBDb3JyZWN0bHkgc2V0IG1ldGFkYXRhIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0KLTIwMDktMDktMjIgMTI6MzU6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBzbWFsbCBjbGVhbnVwcwotCi0yMDA5LTA5LTIyIDAxOjI4OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IGZpeCByZWFkIG9mZnNldCBhbmQgY2xlYW51cHMKLQotMjAwOS0wOS0yMSAxODowNDoyNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgYXZpOiByZXdyaXRlIGluZGV4IHBsYXliYWNrCi0JICBkaXNhYmxlIGNvZGUsIHN0YXJ0IG9uIHJlaW1wbGVtZW50aW5nIGxvb3AgYmFzZWQgb3BlcmF0aW9uLgotCSAgUmV3cml0ZSB0aGUgaW5kZXggaGFuZGxpbmcgc28gdGhhdCBhbGwgc3RyZWFtcyB1c2UgdGhlaXIgb3duIGluZGV4IGZvciBkZWNvZGluZwotCSAgbWVkaWEuCi0KLTIwMDktMDktMjEgMTU6MzU6NTUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBhZGQgbmV3IGluZGV4IHBhcnNpbmcgY29kZQotCSAgQWRkIGEgbmV3IGZ1bmN0aW9uIGFuZCBkYXRhc3RydWN0dXJlIHRvIHBhcnNlIGFuZCBob2xkIHRoZSBpbmRleCBlbnRyaWVzIG9uIGEKLQkgIHBlciBzdHJlYW0gYmFzZS4gQWxzbyBhdm9pZCBkb2luZyB0b28gbXVjaCB3b3JrIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZQotCSAgdGltZXN0YW1wcyBhbmQgZHVyYXRpb25zIGFzIHdlIGNhbiB0cml2aWFsbHkgZG8gdGhhdCBsYXRlci4KLQkgIExlc3MgaW5mb3JtYXRpb24gaW4gdGhlIGVudHJpZXMgbWFrZXMgdGhlbSAyIHRpbWVzIHNtYWxsZXIgYW5kIG5vdCBkb2luZyB0b28KLQkgIG11Y2ggd29yayBtYWtlcyB0aGlzIGNvZGUgYWJvdXQgMTIgdGltZXMgZmFzdGVyIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZS4KLQkgIEhvb2sgaW4gdGhlIG5ldyBmdW5jdGlvbiBhbG9uZ3NpZGUgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uIGZvciBjb21wYXJpc29uIHVudGlsCi0JICB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyB1cGRhdGVkIHRvIGhhbmRsZSB0aGUgbmV3IGluZGV4IGRhdGFzdHJ1Y3R1cmUuCi0KLTIwMDktMDktMjggMTY6Mjk6NDUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZzogaGFuZGxlIG1vcmUgbGlianBlZyByZXR1cm4gdmFsdWVzLCBhZGQgc29tZSBtb3JlIGJyYW5jaCBoaW50cwotCSAgQWxzbyByZW1vdmUgdW51c2VkIHNpemUgdmFyaWFibGUgaW4gX2NoYWluKCkuCi0KLTIwMDktMDktMjUgMTk6MjE6MzIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzb21lIG9wdGlvbmFsIFFUIHNwZWNpZmllZCBzdHNkIE1QRUctNCBhdG9tcyBhbHNvIGFwcGx5IHRvIEgyNjQKLQkgIEZpeGVzICM1OTYzMTkuCi0KLTIwMDktMDktMjUgMTY6NDA6MzEgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBvbmx5IHNlbmQgdGFnIGV2ZW50cyBkb3duc3RyZWFtIGFmdGVyIG5ld3NlZ21lbnQKLQotMjAwOS0wOS0yNSAxNDoxNDowMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGlmIHRyYW5zcG9ydCBwcm90b2NvbCB1bnN1cHBvcnRlZCwgdHJ5IGFub3RoZXIgb25lCi0JICBBbHNvIGNoYW5nZSBlcnJvciBtZXNzYWdlIHRvIG1vcmUgYWNjdXJhdGVseSByZWZsZWN0IGNhc2VzIGluIHdoaWNoCi0JICBpdCBjYW4gb2NjdXIuCi0KLTIwMDktMDktMjUgMTE6NTQ6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBkdXJhdGlvbnMgbW9kdWxvIDE8PDMyCi0JICBGb3IgY2FsY3VsYXRpbmcgdGhlIGR1cmF0aW9ucyBvZiBlYWNoIHNhbXBsZSwgd2UgYXJlIHN1cHBvc2VkIHRvIGFkZCBlYWNoCi0JICBkdXJhdGlvbiBtb2R1bG8gMTw8MzIgc28gbWFrZSB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgYSB1aW50MzIuCi0JICBGaXhlcyAjNTk1OTQyCi0KLTIwMDktMDktMjQgMjA6Mzg6NTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNtYWxsIGNsZWFudXAKLQotMjAwOS0wOS0yNCAxOTozMzozOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0YXRvbXBhcnNlci5oOgotCSAgcXRkZW11eDogZG9uJ3QgdXNlIGNvcmUgQVBJIHRoYXQgZG9lc24ndCBleGlzdCB5ZXQKLQkgIFRoZXJlJ3Mgbm8gZ3N0X2J5dGVfcmVhZGVyX2hhc19yZW1haW5pbmcoKSB5ZXQuIEZpeGVzIGJ1aWxkLgotCi0yMDA5LTA5LTI0IDEzOjIwOjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRhdG9tcGFyc2VyLmg6Ci0JICBxdGRlbXV4OiBtYXAgc29tZSBhdG9tcGFyc2VyIGZ1bmN0aW9ucyB0byB0aGVpciBuZXcgYnl0ZXJlYWRlciBlcXVpdmFsZW50cwotCSAgTm93IHRoYXQgR3N0Qnl0ZVJlYWRlciBoYXMgdW5jaGVja2VkIGFuZCBpbmxpbmVkIHZhcmlhbnRzIGFzIHdlbGwsIG1hcAotCSAgYXRvbXBhcnNlciBmdW5jdGlvbnMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBieXRlcmVhZGVyIGVxdWl2YWxlbnRzLgotCi0yMDA5LTA4LTI1IDEyOjExOjI4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRhdG9tcGFyc2VyLmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXg6IGFkZCBxdF9hdG9tX3BhcnNlcl9oYXNfY2h1bmtzKCkgYW5kIGZpeCBpbmRlbnRhdGlvbgotCi0yMDA5LTA4LTIwIDE4OjIxOjU5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYmFpbCBvdXQgaW5zdGVhZCBvZiB0cnlpbmcgdG8gYWxsb2Mgc2lsbHkgaW5kZXggc2l6ZXMKLQkgIElmIGl0IGxvb2tzIGxpa2Ugd2Ugd291bGQgYmUgYWxsb2NhdGluZyBhIHNpbGx5IHNpemUgZm9yIG91ciBzYW1wbGUKLQkgIGluZGV4LCBqdXN0IGJhaWwgb3V0IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFsbG9jYXRlIGl0LiBIZWxwcyB3aXRoCi0JICBicm9rZW4gb3IgZnV6emVkIGZpbGVzIHdoZXJlIHdlIG1pZ2h0IGVuZCB1cCB0cnlpbmcgdG8gbWFsbG9jIGEKLQkgIGNvdXBsZSBvZiBodW5kcmVkIE1CcyBvdGhlcndpc2UuCi0KLTIwMDktMDgtMjAgMTY6NDc6MjUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBlcnJvciBvdXQgY29ycmVjdGx5IGlmIHdlIGRvbid0IGV2ZW4gaGF2ZSBlbm91Z2ggYnl0ZXMgZm9yIGFuIGF0b20gaGVhZGVyCi0KLTIwMDktMDgtMjAgMTU6Mzk6MDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBpbml0IGZvdXJjYyB0byAwIGFzIHdlbGwgdG8gYXZvaWQgaW52YWxpZCByZWFkcyB3aGVuIHByaW50ZidpbmcgZXJyb3IgbWVzc2FnZQotCi0yMDA5LTA4LTIwIDAxOjM5OjE3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRhdG9tcGFyc2VyLmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXg6IGFkZCBxdF9hdG9tX3BhcnNlX2hhc19yZW1haW5pbmcoKSB0byBhdm9pZCBvdmVyZmxvd3Mgd2l0aCBfZ2V0X3JlbWFpbmluZygpCi0KLTIwMDktMDgtMjAgMDE6MjE6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1c2UgR3N0Qnl0ZVJlYWRlciB3aGVuIHBhcnNpbmcgdGtoZCBhdG9tCi0KLTIwMDktMDgtMTkgMTk6MTM6MzggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1c2UgdW5zaWduZWQgaW50cyBmb3Igbm9kZSBsZW5ndGggYW5kIGRvIG1vcmUgc2FuaXR5IGNoZWNraW5nIG9mIHRoZSBhdG9tIGxlbmd0aAotCi0yMDA5LTA4LTE5IDAxOjM2OjMzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRhdG9tcGFyc2VyLmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZHVtcC5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF90eXBlcy5oOgotCSAgcXRkZW11eDogdXNlIEdzdEJ5dGVSZWFkZXIgZm9yIGF0b20gZHVtcGluZyBhbmQgZml4IGEgZmV3IGJ1Z3MKLQotMjAwOS0wOC0yMSAxNDoyMTowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG1vdmUgc3Rjbywgc3R0cywgc3RzcyBhbmQgc3RwcyBhdG9tIHBhcnNpbmcgb3ZlciB0byBHc3RCeXRlUmVhZGVyCi0JICBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGF0b20gYm91bmRhcnkuIE5vdGUgdGhhdCB0aGUgY29kZQotCSAgYmVoYXZlcyBzbGlnaHRseSBkaWZmZXJlbnRseSBpbiB0aGUgY29ybmVyIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm90Ci0JICBlbm91Z2ggYXRvbSBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzYW1wbGVzIChuX3NhbXBsZXNfdGltZSkKLQkgIGluIHRoZSBhdG9tLCBidXQgc3RpbGwgZW5vdWdoIGRhdGEgdG8gZmlsbCB0aGUgcHJlLWFsbG9jYXRlZCBpbmRleCBvZgotCSAgbl9zYW1wbGVzIGVudHJpZXM6IGJlZm9yZSB3ZSB3b3VsZCBqdXN0IHN0b3AgcGFyc2luZyB0aGUgc3R0cyBkYXRhCi0JICBhbmQgY29udGludWUsIHdoZXJlYXMgbm93IHdlIHdpbGwgbGlrZWx5IGVycm9yIG91dC4gVGhpcyBzaG91bGQgbm90Ci0JICBiZSBhIHByb2JsZW0gaW4gcHJhY3RpY2UgdGhvdWdoLiBXZSBjb3VsZCBtYWludGFpbiB0aGUgb2xkIGJlaGF2aW91cgotCSAgYnkgZG9pbmcgcmVhZHMgd2l0aCBhIHNpemUgY2hlY2sgaW5zaWRlIHRoZSBsb29wIGlmIG5lZWRlZC4KLQotMjAwOS0wNi0zMCAxOTo1MToxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHVzZSBieXRlcmVhZGVyIHRvIHBhcnNlIHN0c3ogYW5kIHN0c2MgYXRvbXMKLQkgIFVzZSBHc3RCeXRlUmVhZGVyIHRvIHBhcnNlIHN0c3ogYW5kIHN0c2MgY2h1bmtzLCBhbmQgY2hlY2sgc2l6ZSBvZgotCSAgYXZhaWxhYmxlIGRhdGEgYmVmb3JlIHBhcnNpbmcgaXQsIGluc3RlYWQgb2YgYmxpbmRseSBhc3N1bWluZyB0aGVyZQotCSAgd2lsbCBiZSBlbm91Z2ggZGF0YS4gRml4ZXMgY3Jhc2hlcyB3aXRoIHNvbWUgZnV6emVkL2Jyb2tlbiBmaWxlcy4KLQotMjAwOS0wOC0xNSAyMDozODo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0YXRvbXBhcnNlci5oOgotCSAgcXRkZW11eDogYWRkIHF0X2F0b21fcGFyc2VyX2dldF9vZmZzZXQoKSBhbmQgb3B0aW1pc2UgX3BlZWtfc3ViKCkKLQotMjAwOS0wNy0wMSAxMzo0OTo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOgotCSogZ3N0L3F0ZGVtdXgvcXRhdG9tcGFyc2VyLmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBhZGQgUXRBdG9tUGFyc2VyLCBhbiBpbmxpbmVkIEdzdEJ5dGVSZWFkZXIgdmFyaWFudAotCi0yMDA5LTA5LTIzIDE3OjE5OjM0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgIG1hdHJvc2thZGVtdXg6IHVzZSBwcm9wZXIgb3JkZXIgZm9yIG5vLW1vcmUtcGFkcyBhbmQgbmV3c2VnbWVudCBhbmQgdGFnIHNlbmRpbmcKLQotMjAwOS0wOS0yMyAwOTo1MDozNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogc3ByaW5rbGUgYSBmZXcgYnJhbmNoIHByZWRpY3Rpb24gbWFjcm9zCi0KLTIwMDktMDktMjIgMTU6MDM6MjAgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzoKLQkgIEZpeCBjb21waWxlIHdhcm5pbmdzIHdpdGggZ2NjIDQuMC4xLgotCi0yMDA5LTA5LTIyIDExOjQ4OjUwICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thbXV4OiBEb24ndCBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcCB3aXRoIERpcmFjCi0JICBBdCB0aGUgZW5kLCBEaXJhYyBzdHJlYW1zIGhhdmUgYW4gRU9TIHBhY2tldCB3aXRoIDAgbGVuZ3RoLgotCSAgRG9uJ3QgZXZlciBzaXQgaW4gYW4gaW5maW5pdGUgbG9vcCB3aGVuIHByb2Nlc3Npbmcgb25lLiBBbGxvd3MKLQkgIG11eGluZyBEaXJhYyBpbnRvIG1rdiB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHkuCi0KLTIwMDktMDktMjIgMTE6MDM6NDYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiAuZ2l0aWdub3JlOgotCSAgVXBkYXRlIC5naXRpZ25vcmUKLQotMjAwOS0wOS0yMiAxMTowMjowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSAgdmlkZW9taXhlcjogZml4IHVwIE1ha2VmaWxlIHNvbWUgbW9yZQotCSAgUmVtb3ZlIENGTEFHUyBmcm9tIExJQkFERCBhbmQgbWFrZSBvcmRlciBvZiB0aGUgdmFyaW91cyBDRkxBR1MgYW5kCi0JICBMSUJTIGF0IGxlYXN0IGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLgotCi0yMDA5LTA5LTIyIDA4OjAyOjQ4ICswMjAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSAgdmlkZW9taXhlcjogQWRkICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSB0byBMREZMQUdTIGZvciBsaW5raW5nIGxpYmdzdHZpZGVvCi0JICBGaXhlcyBidWcgIzU5NTg5Ny4KLQotMjAwOS0wOS0yMSAxODowOToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpOiBmaXggdGltZXN0YW1wcyBpbiBwdXNoIG1vZGUKLQotMjAwOS0wOS0xOCAxNzoyNjo0MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiBhZGQgYSBHX1VOTElLRUxZIGFuZCBwdXQgcGVyZi1jYXQgbG9nIHRvIGNvZGUgcGF0aCB0aGF0IGNvcGllcwotCi0yMDA5LTA5LTIxIDEyOjMyOjUxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IGFkZCBzb21lIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cwotCSAgTWVhc3VyZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdmFyaW91cyBpbmRleCBhbmQgaGVhZGVyIHBhcnNpbmcgc3RlcHMgdG8gdGhlCi0JICBQRVJGT1JNQU5DRSBkZWJ1ZyBjYXRlZ29yeS4KLQotMjAwOS0wOS0xOCAxMTo1MzoxMiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSAgc3BlZXhkZWM6IGFsbG93IGZvciB1bmtub3duIHZhcnlpbmcgbnVtYmVyIG9mIGZyYW1lcyBwZXIgYnVmZmVyCi0JICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGNhdGVycyBmb3IgUlRQIHBheWxvYWRzIHdpdGggbXVsdGlwbGUgZnJhbWVzCi0JICBwZXIgcGFja2V0LgotCi0yMDA5LTA5LTE4IDExOjQ1OjA2ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6Ci0JICBzcGVleGRlYzogdXNlIGNvcnJlY3Qgc2FtcGxlIHNpemUgaW4gY29udmVyc2lvbnMKLQotMjAwOS0wOS0xOCAxMTo0Mzo0NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSAgc3BlZXhlbmM6IGZpeCBidWZmZXIgdGltZSBhbmQgZHVyYXRpb24gZm9yIG11bHRpcGxlIGZyYW1lcyBwZXIgcGFja2V0Ci0KLTIwMDktMDktMTggMTQ6MjI6MDIgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHNvbWUgbG9nZ2luZyBjbGVhbnVwIHRvIGhlbHAgdW5kZXJzdGFuZGluZyB0aGUgaW5kZXggcGFyc2luZyBvdmVyaGVhZAotCi0yMDA5LTA5LTE2IDEzOjI4OjI3IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOgotCSAgb3N4YXVkaW86IGxpbmsgYWdhaW5zdCBHU1RfQkFTRV9MSUJTCi0KLTIwMDktMDktMTUgMTc6MjQ6MjQgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JICBydHBnNzI5cGF5OiBGaXggYWRhcHRlciBsZWFrCi0JICBUaGUgYWRhcHRlciB3b3VsZCBiZSBsZWFrZWQgaWYgaXQgd2FzIGVtcHR5IGFuZCB0aGUgZGF0YSBjb3VsZCBiZSBwdXNoZWQgb3V0IGRpcmVjdGx5LgotCi0yMDA5LTA5LTE1IDEwOjA0OjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogRG9uJ3QgZGVyZWZlcmVuY2UgTlVMTCBwb2ludGVycwotCSAgcGFfc3RyZWFtX2dldF90aW1pbmdfaW5mbygpIGNhbiByZXR1cm4gTlVMTC4KLQkgIEZpeGVzIGJ1ZyAjNTk1MjIwLgotCi0yMDA5LTA5LTE1IDEwOjAxOjU0ICswMjAwICBEYXZpZCBIZW5uaW5nc3NvbiA8Z25vbWUud2ViQGVwb3N0LmRpd2ljLnNlPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IERvbid0IGRlcmVmZXJlbmNlIE5VTEwgcG9pbnRlcnMKLQkgIHBhX3N0cmVhbV9nZXRfdGltaW5nX2luZm8oKSBjYW4gcmV0dXJuIE5VTEwuCi0JICBGaXhlcyBidWcgIzU5NTIyMC4KLQotMjAwOS0wOS0xNCAxNjowNTozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBoYW5kbGUgc3RyZWFtIGV2ZW50cwotCSAgSGFuZGxlIHN0cmVhbSBldmVudHMgYW5kIHJlcXVlc3QgYSBQQVVTRS9QTEFZIHN0YXRlIGNoYW5nZSBmcm9tIHRoZSBhcHBsaWNhdGlvbgotCSAgd2hlbiB3ZSByZWNlaXZlIGEgQ09SSy9VTkNPUksgZXZlbnQuCi0KLTIwMDktMDktMTMgMTI6MzA6MzQgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5oOgotCSAgbXVsdGlmaWxlc2luazogQWRkIG5leHQtZmlsZSBwcm9wZXJ0eQotCSAgQWRkIGEgcHJvcGVydHkgdG8gYWxsb3cgY29udHJvbCBvdmVyIHdoYXQgZXZlbnQgY2F1c2VzIGEgZmlsZQotCSAgdG8gZmluaXNoIGJlaW5nIHdyaXR0ZW4gYW5kIGEgbmV3IGZpbGUgc3RhcnQuICBUaGUgZGVmYXVsdCBpcwotCSAgdGhlIHNhbWUgYXMgYmVmb3JlIC0tIGVhY2ggYnVmZmVyIGNhdXNlcyBhIG5ldyBmaWxlIHRvIGJlCi0JICB3cml0dGVuLiAgQWRkZWQgaXMgYSBjYXNlIHdoZXJlIGJ1ZmZlcnMgYXJlIHdyaXR0ZW4gdG8gdGhlCi0JICBzYW1lIGZpbGUgdW50aWwgYSBkaXNjb250aW51aXR5IGluIHRoZSBzdHJlYW0uCi0KLTIwMDktMDktMTMgMTU6NTU6MDIgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguaDoKLQkgIGR2ZGVtdXg6IFVzZSB2YWx1ZXMgZnJvbSBkZWNvZGVyIHN0cnVjdHVyZSBkaXJlY3RseQotCSAgRG9uJ3Qgc3RvcmUgdGhlIHNhbWUgdmFsdWVzIGluIHRoZSBHc3REdkRlbXV4LiAgVGhpcwotCSAgZml4ZXMgYSBidWcgd2hlcmUgZHZkZW11eCB3b3VsZCBkZXRlY3QgYSBzdHJlYW0gYXMgUEFMCi0JICBpbnN0ZWFkIG9mIE5UU0MsIGFuZCBzaWxlbnRseSBwYXJzZSBpdCB3cm9uZy4KLQotMjAwOS0wOS0xMyAxMjoyMDoyMyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9kdi9NYWtlZmlsZS5hbToKLQkqIGV4dC9kdi9nc3RzbXB0ZXRpbWVjb2RlLmM6Ci0JKiBleHQvZHYvZ3N0c21wdGV0aW1lY29kZS5oOgotCSogZXh0L2R2L3NtcHRlX3Rlc3QuYzoKLQkgIGR2ZGVtdXg6IEFkZCBjb2RlIHRvIHBhcnNlIFNNUFRFIHRpbWUgY29kZXMKLQkgIENvZGUgdG8gY29udmVydCB0aW1lIGNvZGVzIHRvL2Zyb20gdGltZXN0YW1wcyBhbmQgZnJhbWUgbnVtYmVycy4KLQotMjAwOS0wOS0xMyAxMjowMToyNyAtMDcwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSAgZHZkZW11eDogRml4IGRldGVjdGlvbiBvZiBuZXcgbWVkaWEKLQkgIFRoZXJlIGFyZSA1IG9yIDYgQUFVWCBzb3VyY2UgY29udHJvbCBwYWNrcyBpbiBhIGZyYW1lLCBhbmQgYW55Ci0JICBvZiB0aGVtIGNvdWxkIGhhdmUgUkVDX1NUIGNsZWFyZWQsIGluZGljYXRpbmcgYSByZWNvcmRpbmcgc3RhcnQKLQkgIHBvaW50LiAgbGliZHYgb25seSBjaGVja3MgdGhlIGZpcnN0LgotCi0yMDA5LTA5LTEyIDE5OjI1OjM2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZHZkZW11eDogU2V0IERJU0NPTlQgZmxhZyBvbiBidWZmZXJzIHdoZW4gUkVDX1NUIGZsYWcgaXMgc2V0LgotCSAgQWxzbyBhZGQgYSBmZXcgYnJhbmNoIHByZWRpY3Rpb24gbWFjcm9zCi0KLTIwMDktMDktMTIgMDA6MTM6MDQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3k0bWVuYy5jOgotCSAgY2hlY2s6IEZpeCBhIGNvdXBsZSBvZiB0ZXN0cy4KLQkgIFRoZSBzb3VwaHR0cHNyYyB0ZXN0IHdhc24ndCBjb21waWxpbmcuIFRoZSBzb3VwLW1pc2MuaCBoZWFkZXIgaXMgbmVlZGVkIGZvcgotCSAgc291cF9zc2xfc3VwcG9ydGVkLgotCSAgRml4IHRoZSB5NG1lbmMgdGVzdCB0byB1c2UgYSAncHJvZ3Jlc3NpdmUnIGhlYWRlciBmb3IgdGhlIHRlc3QgZGF0YSBub3cgdGhhdAotCSAgdGhlIGVsZW1lbnQgb3V0cHV0cyBjb3JyZWN0IGludGVybGFjaW5nIGluZm8uCi0KLTIwMDktMDktMTEgMTM6MzI6MzkgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiB0cmVhdCBhIHplcm8tc2l6ZWQgZGF0YSBjaHVuayBhcyBleHRlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KLQkgIFRoaXMgZml4ZXMgcGxheWJhY2sgb2Ygc29tZSBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYSB2YWxpZCBkYXRhIGNodW5rIGxlbmd0aCwKLQkgIGFwcGFyZW50bHkgc29tZSBwcm9ncmFtIGNyZWF0ZXMgdGhlc2UuCi0KLTIwMDktMDktMTEgMjI6MjQ6NDcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgdjRsMnNyYzogYWRkIGEgZnVuY3Rpb24gcG9pbnRlciBmb3IgZ2V0X2ZyYW1lIGZ1bmN0aW9uIGFuZCBvcHRpbWl6ZSBhIGJpdAotCSAgVXNlIGEgZnVuY3Rpb24tcG9pbnRlciBmb3IgbW1hcC9yZWFkLCBhcyB0aGlzIGNhbid0IGNoYW5nZSBkdXJpbmcgY2FwdHVyZS4gQWxzbwotCSAgc3ByaW5rbGUgYSBmZXcgR19MSUtFTFkvVU5MSUtFTFkgdG8gaW1wcm92ZSB0aGUgZXJyb3ItbGVzcyBjb2RlIHBhdGguCi0KLTIwMDktMDktMTEgMjI6MTU6MDEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMjogbG9nIGJ1ZmZlciBjb3BpZXMgb24gcXVldWUgdW5kZXJydW4gaW4gcGVyZiBjYXRlZ29yeQotCSAgdjRsMnNyYyBoYXMgYSBzbG93IHBhdGggd2hlcmUgaXQgZG9lcyBidWZmZXItY29waWVzIHdoZW4gaXQgcnVucyBvdXQgb2YgcXVldWVkCi0JICBidWZmZXJzLiBMb2cgdGhpcyB0byBwZXJmb3JtYW5jZSBjYXRlZ29yeSB0byBoZWxwIG1vbml0b3JpbmcgaXQuCi0KLTIwMDktMDktMTEgMTU6MTQ6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IEltcGxlbWVudCBHc3RTdHJlYW1Wb2x1bWUgaW50ZXJmYWNlCi0KLTIwMDktMDktMTEgMTY6MDk6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICBwdWxzZXNpbms6IEltcGxlbWVudCBtdXRlIHByb3BlcnR5Ci0KLTIwMDktMDktMTEgMTM6MzM6MzEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuYzoKLQkgIGdka3BpeGJ1ZnNpbms6IGZpeCBkb2NzIHJlZmVyaW5nIHRvIHNlbmQtbWVzc2FnZXMKLQotMjAwOS0wOS0xMSAxMzoyODozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIHNwZWN0cnVtOiBhZGQgcG9zdC1tZXNzYWdlcyBwcm9wZXJ0eQotCSAgQWRkIGEgcG9zdC1tZXNzYWdlcyBwcm9wZXJ0eSBhbmQgZGVwcmVjYXRlIHRoZSBsZXNzIGRlc2NyaXB0aXZlIG1lc3NhZ2UKLQkgIHByb3BlcnR5LgotCi0yMDA5LTA5LTExIDEzOjIwOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmg6Ci0JICBwaXhidWZzaW5rOiBhZGQgcG9zdC1tZXNzYWdlcyBwcm9wZXJ0eQotCSAgQWRkIHBvc3QtbWVzc2FnZXMgYW5kIGRlcHJlY2F0ZSBzZW5kLW1lc3NhZ2VzIGFzIHRoZSBmb3JtZXIgaXMgbW9yZQotCSAgZGVzY3JpcHRpdmUgb2Ygd2hhdCBhY3R1YWxseSBoYXBwZW5zLgotCi0yMDA5LTA5LTExIDEzOjEyOjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5oOgotCSAgbXVsdGlmaWxlc2luazogcmVuYW1lIHNpbGVudCB0byBwb3N0LW1lc3NhZ2VzCi0JICBVc2UgdGhlIHBvc3QtbWVzc2FnZXMgcHJvcGVydHkgbmFtZSBpbnN0ZWFkIG9mIHNpbGVudCBhcyBpdCBpcyBtb3JlCi0JICBkZXNjcmlwdGl2ZS4KLQotMjAwOS0wOS0xMSAxMjoxNjoxOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkgIG11bHRpZmlsZXNpbms6IHBvc3QgbWVzc2FnZXMgZm9yIGVhY2ggYnVmZmVyCi0JICBBZGQgYSBzaWxlbnQgcHJvcGVydHkgdGhhdCBjYW4gYmUgc2V0IHRvIEZBTFNFIHRvIHBvc3QgbWVzc2FnZXMgb24gdGhlIGJ1cyBmb3IKLQkgIGVhY2ggd3JpdHRlbiBmaWxlLgotCSAgRG8gc29tZSBtb3JlIGNsZWFudXBzLgotCSAgQWRkIHNvbWUgZG9jcy4KLQkgIEZpeGVzICM1OTQ2NjMKLQotMjAwOS0wOS0wOSAxODoxMzoyOSAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgIHJ0cGgyNjNwYXk6IEFsbG9jYXRlIEJvdW5kcnkgc3RydWN0cyBvbiB0aGUgc3RhY2sgaW5zdGVhZCBvZiB0aGUgaGVhcCB0byBhdm9pZCBsZWFrcwotCSAgRml4ZXMgYnVnICM1OTQ2OTEuCi0KLTIwMDktMDktMTAgMTA6Mjg6NDggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICBkb2NzOiBmaXggZ3RrLWRvYyB3YXJuaW5ncwotCi0yMDA5LTA5LTEwIDEwOjI2OjIzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuaDoKLQkgIGRvY3M6IGZpeCBndGstZG9jIHdhcm5pbmdzCi0KLTIwMDktMDktMDkgMTc6NTE6MTkgLTA3MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvcmF3MTM5NC9NYWtlZmlsZS5hbToKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTRjbG9jay5jOgotCSogZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmg6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5oOgotCSAgZHYxMzk0c3JjOiBBZGQgYSBjbG9jayBiYXNlZCBvbiBpc29jaHJvbm91cyBjeWNsZSBjb3VudGVyCi0JICBQYXJ0aWFsIGZpeCBmb3IgIzE2OTM4My4KLQotMjAwOS0wOS0wOSAxNjowMjowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IEZpeCBBWVVWLT5JNDIwIGNvbnZlcnNpb24KLQkgIEZvciB0aGlzIGZpeCB0aGUgYXZlcmFnaW5nIG9mIHRoZSBjaHJvbWEgdmFsdWVzLiBJdCBzaG91bGQndCBiZSAoYS8yICsgYikvMgotCSAgYnV0IGp1c3QgKGEgKyBiKS8yLgotCSAgRml4ZXMgYnVnICM1OTQ1OTkuCi0KLTIwMDktMDktMDkgMTY6MjU6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogcmVtb3ZlIHJpbmdidWZmZXIgcmVzZXQgY29tcGVuc2F0aW9uCi0JICBSZW1vdmUgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIGEgcmluZ2J1ZmZlciByZXNldCBhcyB0aGlzIGNvZGUgaXMgbm93IGluIHRoZSBiYXNlCi0JICBjbGFzcy4KLQkgIEJ1bXAgdGhlIC1iYXNlIHJlcXVpcmVtZW50IGFzIHdlIG5lZWQgdGhlIG5ldyBiYXNlYXVkaW9zaW5rIGNvZGUgdG8gZnVuY3Rpb24KLQkgIHByb3Blcmx5LgotCi0yMDA5LTA5LTA5IDE2OjI0OjQ5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICBwdWxzZXNpbms6IHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwOS0wOS0wOSAxMDoyNzo1NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSAgd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA5LTA4IDE5OjM0OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VtaXhlci5jOgotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5jOgotCSAgcHVsc2U6IHNtYWxsIGNsZWFudXBzCi0JICBBZGQgc29tZSBkZWJ1ZyBpbmZvCi0JICBGaXggdGhlIHN0YXRlIGNoYW5nZXMKLQotMjAwOS0wOS0wOCAxODoyOTozNSArMDIwMCAgTWFyYy1BbmRyw6kgTHVyZWF1IDxtbHVyZWF1QGZsdW1vdGlvbi5jb20+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JICBtdWx0aXBhcnRtdXg6IG1hcmsgZGF0YSBidWZmZXIgYXMgZGVsdGEtdW5pdAotCSAgU28gdGhhdCBtdWx0aWZkc2luayBhbHdheXMgc3RhcnQgc2VuZGluZyBoZWFkZXIgYnVmZmVyIGZpcnN0Ci0JICBGaXhlcyAjNTk0NTIwCi0KLTIwMDktMDktMDggMTc6Mzc6MTUgKzAyMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IGFkZCBpZ25vcmUtcHQgcGFyYW1ldGVyCi0JICBBZGQgYSBwYXJhbWV0ZXIgJ2lnbm9yZS1wdCcgdGhhdCBkaXNhYmxlcyBjcmVhdGluZyBhIGdzdHJ0cHB0ZGVtdXggbW9kdWxlIGFuZAotCSAgZ2hvc3RzIHRoZSBwYWRzIG9mIGdzdHJ0cGppdHRlcmJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBvbmVzIG9mIGdzdHJ0cHB0ZGVtdXguCi0JICBGaXhlcyAjNTk0NDkwCi0KLTIwMDktMDktMDQgMTM6NTE6MzcgKzAyMDAgIE1hcnZpbiBTY2htaWR0IDxtYXJ2aW5fc2NobWlkdEBnbXgubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgY2hlY2tzOiBvbmx5IHJ1biBIVFRQUyB0ZXN0IGlmIGxpYnNvdXAgaGFzIFNTTCBzdXBwb3J0Ci0KLTIwMDktMDktMDggMTM6NTk6NTYgKzAyMDAgIEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBydHBiaW46IHByb3BhZ2F0ZSBwYXlsb2FkLXR5cGUtY2hhbmdlIHNpZ25hbCBmcm9tIGRlbXV4ZXIKLQkgIGZpeGVzICM1OTQyNTQKLQotMjAwOS0wOC0zMSAxODo0NjoyNSArMDIwMCAgSGF2YXJkIEdyYWZmIDxoYXZhcmQuZ3JhZmZAdGFuZGJlcmcuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogY2hhbmdlIHNldmVyaXR5IG9mIGNsb2NrLXJhdGUgY2hhbmdlIGRlYnVnCi0JICBNYWtlIGxvZyBHU1RfREVCVUcgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsIEdTVF9XQVJOSU5HIG90aGVyd2lzZS4KLQkgIEZpeGVzICM1OTQyNTMKLQotMjAwOS0wOS0wOCAxMzozOTozMSArMDIwMCAgSMOldmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IGF2b2lkIHRocm93aW5nIHJlb3JkZXJlZCBidWZmZXJzIHdpdGggc2FtZSB0aW1lc3RhbXBzCi0JICBXaGVuIHdlIHJlY2VpdmUgYSByZW9yZGVyZWQgcGFja2V0IHdpdGggdGhlIHNhbWUgdGltZXN0YW1wIGFzIHRoZSBwcmV2aW91cyBvbmUKLQkgICh3aGljaCBjYW4gaGFwcGVuIGZvciBmcmFnbWVudGVkIHBhY2tldHMpIGRvbid0IGNvbnNpZGVyIHRoZSBwYWNrZXQgYXMgbG9zdCBidXQKLQkgIGluc3RlYWQgd2FpdCBmb3IgdGhlIHJlb3JkZXJlZCBwYWNrZXQgdG8gYXJyaXZlLgotCSAgU3dpdGNoIHRoZSB3YXJuaW5nLWxldmVsLCBzbyB0aGF0IGEgcmVvcmRlcmluZyBkb2VzIG5vdCBnZXQgYSB3YXJuaW5nLCBvbmx5Ci0JICBhbiBhY3R1YWwgcHJvZHVjZWQgbG9zdC1wYWNrZXQuCi0JICBGaXhlcyAjNTk0MjUxCi0KLTIwMDktMDgtMzEgMjE6MTY6NTQgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzoKLQkgIHJ0cGpwZWdkZXBheTogYWRkIG1pc3NpbmcgbWF0aC5oIGluY2x1ZGUKLQkgIEZpeGVzICM1OTQyNDcKLQotMjAwOS0wOS0wOCAxMzozMDoyOSArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggbWVtb3J5IGxlYWsKLQkgIEluIGdzdF9ydHNwc3JjX3BhcnNlX2RpZ2VzdF9jaGFsbGVuZ2UoKSwgcnRzcHNyYyBkb2VzIGEgZ19zdHJuZHVwIG9mIHRoZSBhdXRoCi0JICBoZWFkZXIgaXRlbXMgYW5kIHRoZW4gcGFzc2VzIHRoZW0gdG8gZ3N0X3J0c3BfY29ubmVjdGlvbl9zZXRfYXV0aF9wYXJhbSgpCi0JICB3aXRob3V0IGZyZWVpbmcuCi0JICBGaXhlcyAjNTk0MTMzCi0KLTIwMDktMDktMDggMTM6MTg6MjkgKzAyMDAgIFN0aWcgU2FuZG5lcyA8c3RpZy5zYW5kbmVzQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IG1ha2UgZnJlZV9zZXNzaW9uKCkgcmVtb3ZlIHN0cmVhbSByZWZlcmVuY2VzCi0JICBXaGVuIHJlY2VpdmluZyBhIHN5bmMtcGFja2V0LCBhbGwgc2Vzc2lvbnMgd2l0aCB0aGUgc2FtZSBjbmFtZSB3aWxsIGJlIGNvbXBhcmVkCi0JICBhbmQgc3luY2VkIHRvZ2V0aGVyLiBJbiB0aGlzIHByb2Nlc3MsIHRoZXJlIGNvdWxkIHN0aWxsIGJlIHJlZmVyZW5jZXMgdG8gYQotCSAgc2Vzc2lvbiB0aGF0IGhhcyBiZWVuIHNodXQgZG93biBpbiB0aGUgbWVhbndoaWxlLgotCSAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoYXQgdGhlc2UgcmVmZXJlbmNlcyBhcmUgcmVtb3ZlZCB3aGVuIHNodXR0aW5nIGRvd24gYQotCSAgc2Vzc2lvbiwgc28gdGhhdCB0aGUgc3luY2luZyBjYW4gYmUgZG9uZSBzYWZlbHkuCi0JICBGaXhlcyAjNTk0MjgzCi0KLTIwMDktMDgtMzEgMTg6NDY6NTEgKzAyMDAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHVzZSBsb2NrZWQgc3RhdGUgb24gaW50ZXJuYWwgYmlucwotCSAgU2V0IHRoZSBsb2NrZWQgc3RhdGUgb24gaW50ZXJuYWwgZWxlbWVudHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBkb24ndCBjaGFuZ2UKLQkgIGJhY2sgdG8gYW5vdGhlciBzdGF0ZSB3aGVuIHNodXR0aW5nIGRvd24uCi0JICBGaXhlcyAjNTk0MjQ4Ci0KLTIwMDktMDktMDcgMTg6Mjg6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IGFkZCBzdXBwb3J0IGZvciBtcGVnIGZvcm1hdHMKLQotMjAwOS0wOS0wNSAyMDo1MToxNCAtMDcwMCAgWmFoZWVyIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmg6Ci0JICB5NG1lbmM6IEFkZCBpbnRlcmxhY2VkIHN1cHBvcnQKLQkgIEZpeGVzICM1OTE3MTMKLQkgIFNpZ25lZC1vZmYtYnk6IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0yMDA5LTA4LTI0IDEzOjQyOjQyIC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5jOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIFJlbW92ZSBSb25hbGQgQnVsdGplIGZyb20gQXV0aG9ycyBmaWVsZAotCSAgUmVwbGFjZWQgd2l0aCAiR1N0cmVhbWVyIG1haW50YWluZXJzCi0JICA8Z3N0cmVhbWVyLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4iIG9yIGp1c3QgcmVtb3ZlZCwKLQkgIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIG90aGVyIGF1dGhvcnMuCi0KLTIwMDktMDktMDUgMTA6MjE6MzEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gMDBhODU5ZSB0byAxOWZhNGYzCi0KLTIwMDktMDktMDQgMTM6NDI6NDMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwcmV2ZW50IGEgc3B1cmlvdXMgZGVidWcgd2FybmluZwotCi0yMDA5LTA5LTA0IDA5OjMyOjQyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogRGVmaW5lIFY0TDJfRk1UX0ZMQUdfRU1VTEFURUQgaWYgaXQncyBub3QgZGVmaW5lZCB5ZXQKLQkgIGxpYnY0bDIgYWxyZWFkeSB1c2VzIHRoaXMgZmxhZywgZXZlbiBvbiBMaW51eCBrZXJuZWwgdmVyc2lvbnMKLQkgIGJlZm9yZSAyLjYuMzIuCi0KLTIwMDktMDktMDQgMDc6MTA6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IENvcnJlY3RseSBoYW5kbGUgTlVMTCBHc3RJbmRleAotCi0yMDA5LTA5LTAzIDIwOjQwOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMjogRml4IHN0dXBpZCB0eXBvIGluIGxhc3QgY29tbWl0Ci0KLTIwMDktMDktMDMgMjA6Mzg6NTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICB2NGwyOiBQdXQgZW11bGF0ZWQgZm9ybWF0cyBiZWhpbmQgbmF0aXZlIGZvcm1hdHMKLQkgIEZpeGVzIGJ1ZyAjNTkzNzY0LgotCi0yMDA5LTA5LTAzIDE5OjM3OjEwICswMjAwICBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGUgYXQgeWFob28uZnI+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiBmaXggbWVtbGVhawotCSAgRG9uJ3QgbGVhayB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gdGhlIHJlY2VpdmVkIGFuZCBleHBlY3RlZCBzZXFudW0gYXJlIGRpZmZlcmVudCB3aGVuCi0JICBpbiBwcm9iYXRpb24uCi0JICBmaXhlcyAjNTk0MDM5Ci0KLTIwMDktMDktMDIgMTU6MjE6MDIgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBydHBqaXR0ZXJidWZmZXI6IExvY2sgY2xvY2tfcmF0ZSB2YXJpYWJsZQotCSAgVGhlIHByaXYtPmNsb2NrX3JhdGUgdmFyaWFibGUgY291bGQgYmVjb21lIC0xIGJldHdlZW4gd2hlbiBpdHMgY2hlY2tlZCB0byBub3QKLQkgIGJlIC0xIGFuZCB3aGVuIGl0cyB1c2VkLCBjYXVzaW5nIGFuIGFzc2VydGlvbi4gRml4ZWQgYnkgdGFraW5nIHRoZSBtdXRleAotCSAgZWFybGllciBpbiB0aGUgY2hhaW4oKSBmdW5jdGlvbi4KLQkgIEZpeGVzICM1OTM5NTUKLQotMjAwOS0wOS0wMyAxOToxMjozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwOS0wOS0wMyAxOTowOToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgIHJ0cG1wYXBheTogd2hpdGVzcGFjZSBmaXhlcwotCi0yMDA5LTA5LTAzIDE5OjA4OjUzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMDktMDMgMTc6MzM6MjggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkgIGpwZWdkZWM6IEF2b2lkIHVubmVjZXNzYXJ5IHByb2Nlc3NpbmcgdW50aWwgd2UgaGF2ZSBhIGZ1bGwgcGljdHVyZS4KLQkgIFRoaXMgaXMgZm9yIG5vbi1wYWNrZXRpemVkIG1vZGUsIHdoZW4gd2Uga25vdyB0aGUgdXBzdHJlYW0gc2l6ZSBpbiBieXRlcy4KLQotMjAwOS0wOS0wMyAxNDo0MDoyMCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBmdWxseSB1c2UgdGFnc2V0dGVyIHRvIG1hbmFnZSB0aGUgdGFncy4gRml4ZXMgIzU2MzIyMQotCSAgVGhlcmUgaXMgbm8gbmVlZCB0byBtYW5hZ2UgYSBzZXBhcmF0ZSB0YWdsaXN0LgotCi0yMDA5LTA5LTAzIDE0OjEzOjQzICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSAgc3BlZXhlbmM6IHNtYWxsIHRhZ2xpc3QgaGFuZGxpbmcgY2xlYW51cAotCSAgRG9uJ3QgZXZlbnR1YWx5IGxlYWsgdGhlIGxpc3QgYW5kIGluc3RlYWQgYXNzZXJ0IChsaWtlIGluIG90aGVyIGVsZW1lbnRzKS4KLQotMjAwOS0wOS0wMiAyMzoxMjo0MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGFsc28gZ3VhcmQgcmVzZXRpbmcgc3Vic2NyaWJlIGNhbGxiYWNrIHdpdGggaWZkZWZzCi0JICBJdCBpcyBjb25kaXRpb25hbHkgc2V0LCBzbyBkbyB0aGUgc2FtZSB3aGVuIHVuc2V0dGluZy4KLQotMjAwOS0wOS0wMSAxNTowNjo0NiArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cG1hbmFnZXI6IEZpeGVkIGEgY29weSAmIHBhc3RlIGVycm9yCi0KLTIwMDktMDktMDEgMTM6MjE6MjMgKzAyMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBtYW5hZ2VyOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZSBwcml2Ci0JICBUaGUgdmFyaWFibGUgcHJpdiB3YXMgaW5pdGlhbGl6ZWQgaW4gYSBsb3Qgb2YgZnVuY3Rpb25zIGJ1dCB0aGVuIG5ldmVyCi0JICB1c2VkIGZvciBhbnl0aGluZy4KLQotMjAwOS0wOS0wMSAxMzowMzo1NyArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cG1hbmFnZXI6IEEgbGl0dGxlIGNsZWFuIHVwCi0JICBNYWtlIHRoZSBjb2RlIGZsb3cgb2YgZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRjcCgpIGFuZAotCSAgZ3N0X3J0cF9zZXNzaW9uX3N5bmNfcnRjcCgpIGlkZW50aWNhbC4KLQotMjAwOS0wOS0wMSAxMjo0Nzo1MSArMDIwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cG1hbmFnZXI6IE1ha2Ugc3VyZSB0aGF0IHVzZWQgY2FwcyBhcmUgbm90IGZyZWVkIGFscmVhZHkgKHRha2UgMikKLQkgIFRoaXMgcmVpbnRyb2R1Y2VzIHRoZSBmaXggZm9yIGJ1ZyAjNTkzMzkxLiBJdCBhbHNvIGFwcGxpZXMgaXQgaW4KLQkgIGdzdF9ydHBfc2Vzc2lvbl9zeW5jX3J0Y3AoKSB3aGljaCBoYXMgdmVyeSBzaW1pbGFyIGNvZGUgdG8KLQkgIGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3AoKS4KLQotMjAwOS0wOS0wMSAxMjo0MTozNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgaml0dGVyYnVmZmVyOiBtYWtlIHN1cmUgdGltZSBkb2VzIG5vdCBnbyBiYWNrd2FyZHMKLQkgIFdoZW4gd2UgY29uc3RydWN0IGEgdGltZXN0YW1wIHRoYXQgd291bGQgcmVzdWx0IGluIGEgdGltZXN0YW1wIHRoYXQgaXMgZWFybGllcgotCSAgdGhhbiB3aGVuIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkLCByZXNldCB0aGUgc2tldyBjYWxjdWxhdGlvbiBhcyB0aGlzIGlzCi0JICBwcm9iYWJseSBhIHNpZ24gdGhhdCB0aGUgc2VuZGVyIHJlc3RhcnRlZCBvciBwYXVzZWQuCi0JICBGaXhlcyAjNTkzMzU0Ci0KLTIwMDktMDktMDEgMTE6MzI6NDEgKzAyMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBtYW5hZ2VyOiBTZXQgY2FwcyBpbiBnc3RfcnRwX3Nlc3Npb25fc2VuZF9ydGNwKCkgY29ycmVjdGx5IGFnYWluCi0JICBUaGUgdGVzdCBmb3Igd2hlbiB0byBzZXQgYW4gUlRDUCBjYXBzIG9uIHRoZSBvdXRwdXQgcGFkIGluCi0JICBnc3RfcnRwX3Nlc3Npb25fc2VuZF9ydGNwKCkgYWNjaWRlbnRhbGx5IGdvdCBpbnZlcnRlZCBpbiB0aGUgbGFzdCBjb21taXQuCi0KLTIwMDktMDktMDEgMTA6MjY6NDYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgc3VwcG9ydCBmb3IgUUNFTFAgYXVkaW8KLQkgIEZpeGVzIGJ1ZyAjNTkzNzU3LgotCi0yMDA5LTA4LTMxIDE4OjEwOjExICswMjAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYzoKLQkgIGVmZmVjdHY6IEZpeCBjb21waWxhdGlvbiB3aXRoIGdjYyAzCi0JICBSZWNlbnQgY2hhbmdlcyBpbiBnc3QtcGx1Z2lucy1nb29kL2dzdC9lZmZlY3R2IHByZXZlbnRzIGl0IGZyb20gYmVpbmcgY29tcGlsZWQKLQkgIHdpdGggZ2NjIDMuIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIG5ldyBjb2RlIHVzZXMgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscwotCSAgd2l0aGluIGEgbWFjcm8gY2FsbCB3aGljaCBkb2VzIG5vdCB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgZ2NjLgotCSAgRml4ZXMgYnVnICM1OTM2ODguCi0KLTIwMDktMDgtMzEgMTY6MjA6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIGRvY3M6IHNtYWxsIGNsZWFuLXVwcyBpbiAtc2VjdGlvbnMudHh0Ci0JICBSZW1vdmUgZHVwbGljYXRlIGVudHJ5IGZvciB3YXJwdHY7IHRoZXJlIGlzIG5vIHRhZ2xpYm11eCBlbGVtZW50LgotCi0yMDA5LTA4LTI3IDE1OjQ2OjUyICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgIHJ0cG1wNGdkZXBheTogY29uc2lkZXIgKG9wdGlvbmFsKSBhdXhpbGlhcnkgZGF0YSB3aGVuIHBhcnNpbmcKLQotMjAwOS0wOC0yNyAxNTo0NjoxNSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5oOgotCSAgcnRwbXA0Z2RlcGF5OiBoYW5kbGUgYnJva2VuIEFVLUluZGV4IGluIG5vbi1pbnRlcmxlYXZlZCBzdHJlYW1zCi0JICBJbiBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCAoPSBzZXF1ZW50aWFsbHkgcGF5bG9hZGVkKSBzdHJlYW1zLAotCSAgdGhlIEFVLUluZGV4IHNlcnZlcyBsaXR0bGUgcHVycG9zZSAodGhhdCBpcyBub3QgYWxyZWFkeSBjb3ZlcmVkIGJ5Ci0JICBSVFAgZmllbGRzKS4gIChCcm9rZW4pIFBheWxvYWRlcnMgbWlnaHQgY29uc2lkZXIgdGhpcyBmaWVsZCB0aGVuCi0JICB0byBiZSBkaXNyZWdhcmRlZCBhbmQgaGF2ZSBub24gc3BlYyBjb21wbGlhbnQgdmFsdWVzLCBlLmcuIGVhY2gKLQkgIFJUUCBwYWNrZXQgaGF2aW5nIEFVLUluZGV4IDIgKHJhdGhlciB0aGFuIDApLiAgQXMgc3VjaCwgZW5zdXJlL2ZvcmNlCi0JICBzaW1wbGUgc2VxdWVudGlhbCBzZW5kaW5nIG9mIG5vbi1pbnRlcmxlYXZlZCBzdHJlYW1zLgotCi0yMDA5LTA4LTE4IDE3OjE3OjI4ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWxzbyBleHRyYWN0IGZ0eXAgaW5mbyBpbiBwdXNoIG1vZGUKLQotMjAwOS0wOC0xMyAxNjoxMTo1OSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIHF0ZGVtdXg6IGNvbnNpZGVyIDNncHAgc3R5bGUgdGFnIHBhcnNpbmcgaW4gc29tZSBtb3JlIGNhc2VzCi0JICAzR1BQIHNwZWNzIGRlZmluZSBhIG51bWJlciBvZiB0YWdzIGFsb25nIHdpdGggcHJlY2lzZSBsYXlvdXQuIFdoaWxlIHRoZXNlCi0JICBhcmUgbm9ybWFsbHkgZXhwZWN0ZWQgdG8gYmUgZm91bmQgaW4gYSBjb250YWluZXIgd2hvc2UgbWFqb3IgYnJhbmQgaXMgYQotCSAgM0dQUCBicmFuZCwgdGhpcyBtYXkgYWxzbyBoYXBwZW4gd2hlbiBhIDNHUFAgYnJhbmQgaXMgb25seSBtZW50aW9uZWQgYXMgYQotCSAgY29tcGF0aWJsZSBicmFuZC4gIEFwcGx5IHNvbWUgY2hlY2tzLCBoZXVyaXN0aWMgYW5kIGZhbGxiYWNrcyB0byBleHRyYWN0Ci0JICBzdWNoIHRhZ3MgYXMgd2VsbC4KLQotMjAwOS0wOC0xMSAxMzo1Njo0MyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IHJlZmxvdyBleGl0LCBhbmQgZml4IHNvbWUgbGVha3MKLQotMjAwOS0wOC0xMSAxMzo1NDo1NiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IHB1c2ggbW9kZTsgYWRkIHBhZCBpZiBuZWVkZWQgc28gZG93bnN0cmVhbSBnZXRzIEVPUwotCi0yMDA5LTA4LTEwIDE2OjE5OjAzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIHdhdnBhcnNlOiBwdXNoIG1vZGU7IGZpeC9pbXByb3ZlIGNodW5rIGhhbmRsaW5nCi0JICBIYW5kbGUgbGFyZ2UsIGludmFsaWQgb3Igb3RoZXJ3aXNlIHVudXN1YWwgY2h1bmsgc2l6ZXMuCi0JICBWZXJpZnkgc29tZSBjaHVuayBzaXplcyB0byBiZSBhdCBsZWFzdCB0aGUgc2l6ZSB0aGV5IGFyZQotCSAgZXhwZWN0ZWQgdG8gYmUgYW5kIHJvdW5kIHVwIHNvbWUgc2l6ZXMgdG8gZXZlbiBudW1iZXIgZm9yCi0JICBlLmcuIG9mZnNldCBhZG1pbmlzdHJhdGlvbiwgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3Blcmx5Ci0JICB0cmFja2VkIGluIHB1c2ggbW9kZS4KLQotMjAwOS0wOC0wOCAyMTo1NDowMCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIGF2aWRlbXV4OiBwdXNoIG1vZGU7IGNhdGVyIGZvciB1bnVzdWFsIGNodW5rIHNpemVzCi0KLTIwMDktMDgtMzEgMTY6MzQ6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IHVzZSBwcm9wZXIgbG9ja2luZyBmb3IgcGFkcyBhbmQgY2FwcwotCSAgVXNlIHRoZSBzZXNpb24gbG9jayBhbmQgc2hvdGRvd24gdmFyaWFibGUgdG8gcHJvdGVjdCBhbmQgcmVmIHRoZSBwYWRzIHdlIGFyZQotCSAgZ29pbmcgdG8gcHVzaCBvbi4KLQkgIGZpeGVzICM1NjE4MjUKLQotMjAwOS0wOC0zMSAxNjozMzoyNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHdoaXRlc3BhY2UgZml4ZXMKLQotMjAwOS0wOC0zMSAxMzozODowOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGNsZWFuIHVwIGFkYXB0ZXIgcHJvcGVybHkKLQkgIFJlZmxvdyBjb2RlIHNvIHdlIGRvbid0IHRyeSB0byBjbGVhciBvciByZS11c2UgYW4gYWxyZWFkeS1mcmVlZCBhZGFwdGVyLgotCi0yMDA5LTA4LTMxIDEzOjA3OjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBmbGFjdGFnLCB3YXZwYXJzZTogR3N0QWRhcHRlciBpcyBub3QgYSBHc3RPYmplY3QKLQotMjAwOS0wOC0zMSAxMjoyODo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0cnRwbWFuYWdlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSAgZG9jczogdXBkYXRlIHBsdWdpbiBkb2NzIHRvIGdpdCB2ZXJzaW9uCi0KLTIwMDktMDgtMzEgMTE6MzI6MzkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgZmx2ZGVtdXg6IEZpeCB0ZXN0cyB3YXJuaW5nIGZyb20gc2V0dGluZyBhIE5VTEwgaW5kZXgKLQkgIFNldHRpbmcgYSBudWxsIGluZGV4IGluIHRoZSB0ZXN0cyB3YXMgY2F1c2luZyB3YXJuaW5ncyBieSB1bnJlZmZpbmcKLQkgIE5VTEwgcG9pbnRlcnMuIFRoaXMgaXMgYSBidWcgZXhwb3NlZCBieSBhIHJlY2VudCBjaGFuZ2UgaW4gY29yZSwgaXQKLQkgIHNlZW1zLgotCi0yMDA5LTA4LTMxIDEzOjAyOjE2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogYWRkIHNsb3BlIGVzdGltYXRpb24gY29kZSBhbmQgZGVidWcKLQkgIEFkZCBzb21lIGNvZGUgdG8gbWVhc3VyZSB0aGUgc2VuZGVyIHNwZWVkIHZzIHRoZSByZWNlaXZlciBzcGVlZC4gVGhpcyBjYW4gYmUKLQkgIHVzZWQgdG8gZGV0ZWN0IGJ1cnN0cy4KLQotMjAwOS0wOC0zMSAxMjo1NzozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHJlc2V0IHNrZXcgd2hlbiB0aW1lc3RhbXBzIGNoYW5nZQotCSAgUmVmYWN0b3IgdGhlIGppdHRlcmJ1ZmZlciByZXN5bmMgY29kZS4KLQkgIFJlc2V0IHRoZSBza2V3IGNvcnJlY3Rpb24gd2hlbiB3ZSBkZXRlY3QgYSBiaWcgdGltZXN0YW1wIGRpc2NvbnQuCi0JICBTZWUgIzU5MzM1NAotCi0yMDA5LTA4LTMxIDEyOjQ3OjE1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogbWFrZSBzdXJlIHRpbWUgbmV2ZXIgZ29lcyBpbnZhbGlkCi0JICBTaW5jZSB0aGUgc2tldyBjYW4gYmUgbmVnYXRpdmUsIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGludmFsaWQgdGltZXN0YW1wcy4gQ2hlY2sKLQkgIGZvciBuZWdhdGl2ZSByZXN1bHRzIGFuZCBjbGFtcCB0byAwLgotCSAgU2VlICM1OTMzNTQKLQotMjAwOS0wOC0zMSAxMjoxNjowMSArMDIwMCAgSmFya2tvIFBhbHZpYWluZW4gPGphcmtrby5wYWx2aWFpbmVuIGF0IHNlc2NhLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICB1ZHBzaW5rOiBBZGQgdHRsIG11bHRpY2FzdCBwcm9wZXJ0eQotCSAgQWRkIGEgbmV3IHR0bC1tYyBwcm9wZXJ0eSB0byBjb250cm9sIHRoZSBUVEwgb24gbXVsdGljYXN0IGFkZHJlc3Nlcy4KLQkgIEZpeGVzICM1ODgyNDUKLQotMjAwOS0wOC0zMSAxMjoxMzowNyArMDIwMCAgSmFya2tvIFBhbHZpYWluZW4gPGphcmtrby5wYWx2aWFpbmVuIGF0IHNlc2NhLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuaDoKLQkgIHVkcDogc3BsaXQgb3V0IFRUTCBhbmQgbG9vcCBvcHRpb25zCi0JICBTcGxpdCBzZXR0aW5nIHRoZSBUVEwgYW5kIGxvb3AgcGFyYW1ldGVycyBpbiAyIG1ldGhvZHMgYXMgdGhleSBhcmUgbm90IHJlbGF0ZWQuCi0JICBGaXggc2V0dGluZyB0aGUgVFRMIGNvcnJlY3RseSBmb3IgbXVsdGljYXN0IHN0cmVhbXMuCi0JICBTZWUgIzU4ODI0NQotCi0yMDA5LTA4LTI3IDEyOjM2OjM3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSAgcnRwOiB3aGl0ZXNwYWNlIGZpeGVzCi0KLTIwMDktMDgtMTQgMTM6NDU6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICB2aWRlb2JveDogQ29ycmVjdGx5IGFkZCB0byB0aGUgZG9jcwotCi0yMDA5LTA4LTE0IDEzOjQwOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guaDoKLQkgIHZpZGVvYm94OiBTcGxpdCBkZWNsYXJhdGlvbnMgaW50byBhIGhlYWRlciBmaWxlIGFuZCBhZGQgYXV0b2Nyb3Agc3R1ZmYgdG8gdGhlIGRvY3MKLQotMjAwOS0wOC0xNCAxMzoyNjozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZW9ib3g6IFJlY29uZmlndXJlIGJhc2V0cmFuc2Zvcm0gaWYgc29tZXRoaW5nIGNoYW5nZXMgYWdhaW4KLQkgIEZvciB0aGlzIGludmVudCBhIG5ldyBsb2NrIGFuZCBkb24ndCBhYnVzZSB0aGUgYmFzZXRyYW5zZm9ybSBsb2NrLAotCSAgb3RoZXJ3aXNlIHdlJ2xsIGVuZCB1cCBpbiBkZWFkbG9ja3MuCi0KLTIwMDktMDgtMTQgMTM6MTU6NTcgKzAyMDAgIFN0ZXBoZW4gSnVuZ2VscyA8c3RlcGhlbkBqdW5nZWxzLm5ldD4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogQWRkIHN1cHBvcnQgZm9yIGF1dG9jcm9wcGluZyBhY2NvcmRpbmcgdG8gdGhlIGNhcHMKLQkgIEZpeGVzIGJ1ZyAjNTgyMjM4LgotCi0yMDA5LTA4LTMwIDIxOjU3OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogTWFrZSBzdXJlIHRoYXQgdXNlZCBjYXBzIGFyZSBub3QgZnJlZWQgYWxyZWFkeQotCSAgRml4ZXMgYnVnICM1OTMzOTEuCi0KLTIwMDktMDgtMjYgMTc6MDI6NDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzoKLQkgIHJ0cDogVXNlIG5ldyBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSgpIGZvciB0aGUgaW50ZXJuYWwgbGlua2VkIHBhZHMgaXRlcmF0aW9uCi0KLTIwMDktMDgtMTkgMTY6NTc6MDUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBzZXNzaW9uOiBVc2UgaXRlcmF0ZSBpbnRlcm5hbCBsaW5rcyBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgZ2V0IGludGVybmFsIGxpbmtzCi0KLTIwMDktMDgtMTkgMTY6NDg6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogVXNlIGl0ZXJhdGUgaW50ZXJuYWwgbGlua3MgaW5zdGVhZCBvZiBkZXByZWNhdGVkIGdldCBpbnRlcm5hbCBsaW5rcwotCi0yMDA5LTA4LTE5IDE2OjM3OjExICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICBydHBzc3JjZGVtdXg6IFVzZSBpdGVyYXRlIGludGVybmFsIGxpbmtzIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBnZXQgaW50ZXJuYWwgbGlua3MKLQotMjAwOS0wOC0zMCAyMzoyNzowOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkgIFVwZGF0ZSBjb21tb24KLQotMjAwOS0wOC0zMCAyMzoyNjo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gaGFja2luZyAtPiAwLjEwLjE2LjEKLQotPT09IHJlbGVhc2UgMC4xMC4xNiA9PT0KLQotMjAwOS0wOC0yOSAxMjowNTo0MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nYW1tYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZGUucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL2x2LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFJlbGVhc2UgMC4xMC4xNgotCi0yMDA5LTA4LTI2IDAwOjU4OjQ1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgMC4xMC4xNS41IHByZS1yZWxlYXNlCi0KLTIwMDktMDgtMjUgMTY6NTM6MjkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZG9uJ3QgdXNlIHJlbGF0aXZlIHNlZWtzCi0JICBEb24ndCB1c2UgcmVsYXRpdmUgc2Vla3MsIGl0J3MgdG9vIGhhcmQgdG8gdHJhY2sgd2hlcmUgd2UgYXJlIGFmdGVyIGEgZmx1c2gKLQkgIGV0Yy4KLQkgIGZpeGVzICM1OTMwMTUKLQotMjAwOS0wOC0yNCAxNzo1MDoyOSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbHYucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgMC4xMC4xNS40IHByZS1yZWxlYXNlCi0KLTIwMDktMDgtMjQgMTY6MjI6NDcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IGRvbid0IGRpc2NhcmQgdGhlIHJlc3VsdCBvZiBfc2V0X2NhcHMoKQotCSAgVXNlIHRoZSByZXN1bHQgb2YgZ3N0X3BhZF9zZXRfY2FwcygpIGluc3RlYWQgb2YgYXNzdW1pbmcgc3VjY2Vzcy4KLQkgIFNlZSAjNTkwNjc4Ci0KLTIwMDktMDgtMjEgMTE6NDQ6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICBxdGRlbXV4OiBhZGQgc3VwcG9ydCBmb3IgYWdzbQotCSAgRml4ZXMgIzU5MjUzMAotCi0yMDA5LTA4LTE4IDE3OjE2OjExICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IHF0IHN0eWxlIHN0cmluZyB0YWcgZXh0cmFjdGlvbgotCSAgUVQgc3R5bGUgdGFncyBhcmUgdGVzdGVkIG9uIHN0YXJ0aW5nIHdpdGggKEMpIHN5bWJvbCB1c2luZyA+PiwKLQkgIGFuZCAodW5zaWduZWQpIGludCAobWF5KSBoYXZlIGRpZmZlcmVudCA+PiBiZWhhdmlvdXIuCi0JICBGaXhlcyAjNTkyMjMyLgotCi0yMDA5LTA4LTE3IDE1OjQ4OjIwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvc21va2Vjb2RlYy5jOgotCSAgc21va2VlbmM6IGRvbid0IGNyYXNoIHdoZW4gY29tcGlsZWQgYWdhaW5zdCBsaWJqcGVnNwotCSAgU2V0IHBhcmFtZXRlcnMgc28gdGhhdCB3ZSBkb24ndCBjcmFzaCB3aXRoIGxpYmpwZWc3LiBCYXNlZCBvbgotCSAgU3RlZmFuIEtvc3QncyBmaXggZm9yIGpwZWdlbmMuIEZpeGVzICM1OTE5NTEuCi0KLTIwMDktMDgtMTQgMjA6MTg6MDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9kZS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3RyLnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIDAuMTAuMTUuMyBwcmUtcmVsZWFzZQotCi0yMDA5LTA4LTE0IDEzOjQ1OjA4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICBjaGVja3M6IGFkZCB0ZXN0IGZvciBsZWFrIHRvIHJ0cGJpbiB1bml0IHRlc3QKLQkgIFNlZSAjNTkxNDc2LgotCi0yMDA5LTA4LTExIDE0OjQ3OjEyIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBGaXggcmVmZXJlbmNlIGxlYWsKLQkgIEZpeGVzICM1OTE0NzYuCi0KLTIwMDktMDgtMTQgMTM6MzQ6NTMgKzAxMDAgIFphaGVlciBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSAgZHZkZWM6IHNldCBib3R0b20gZmllbGQgZmlyc3Qgb24gUEFMIGludGVybGFjZWQgY29udGVudCwgbm90IHRvcCBmaWVsZCBmaXJzdAotCSAgRFYgaW50ZXJsYWNlZCBjb250ZW50IGlzIGFsd2F5cyBib3R0b20gZmllbGQgZmlyc3QuIEZpeGVzICM1OTE3MTIuCi0KLTIwMDktMDgtMTQgMTI6NDQ6MDYgKzAxMDAgIEhhbnMgZGUgR29lZGUgPGp3cmRlZ29lZGVAZmVkb3JhcHJvamVjdC5vcmc+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IGZpeCAnaGFuZycgd2l0aCBzb21lIGNhbWVyYXMgY2F1c2VkIGJ5IGJhZCB0aW1lc3RhbXBpbmcgaWYgbm8gZnJhbWVyYXRlIGlzIGF2YWlsYWJsZQotCSAgRm9yIGNhbWVyYXMvZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQgZS5nLiBWSURJT0NfR19QQVJNIHdlJ2QgZW5kIHVwIHdpdGhvdXQKLQkgIGEgZnJhbWVyYXRlIGFuZCB3b3VsZCB0cnkgdG8gZGl2aWRlIGJ5IDAsIGNhdXNpbmcgcnVuLXRpbWUgd2FybmluZ3MgYW5kIGFsbAotCSAgZnJhbWVzIHRvIGJlIHRpbWVzdGFtcGVkIHdpdGggMCwgd2hpY2ggbWFrZXMgc2lua3MgdGhhdCBzeW5jIGFnYWluc3QgdGhlIGNsb2NrCi0JICBkcm9wIHRoZW0sIGNhdXNpbmcgJ2hhbmdzJyAob2JzZXJ2ZWQgd2l0aCB0aGUgcHdjIGRyaXZlciBhbmQgYSBMb2dpdGVjaCBRdWlja0NhbQotCSAgUHJvIDQwMDApLiBTbyBpZiB3ZSBkbyBub3Qga25vdyB0aGUgZnJhbWVyYXRlLCBzaW1wbHkgZG9uJ3QgYWRqdXN0IHRoZQotCSAgdGltZXN0YW1wcy4gRml4ZXMgIzU5MTQ1MS4KLQotMjAwOS0wOC0xNCAxMDoxMToyNSArMDIwMCAgRmlsaXBwbyBBcmdpb2xhcyA8ZmlsaXBwby5hcmdpb2xhc0BnbWFpbC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIHY0bDJzcmM6IGNsZWFyIGZvcm1hdCBsaXN0IGluIFJFQURZLT5OVUxMCi0JICBDbGVhciBmb3JtYXQgbGlzdCBhbmQgcHJvYmVkIGNhcHMgd2hlbiBnb2luZyB0byBOVUxMIHNvIGlmIGEgbmV3IGRldmljZQotCSAgaXMgc2V0IHdlJ2xsIHByb2JlIHRoZSBmb3JtYXRzIGFnYWluIGluc3RlYWQgb2YgdXNpbmcgcHJldmlvdXNseQotCSAgZGV0ZWN0ZWQgb25lcy4gRml4ZXMgYnVnICM1OTE3NDcuCi0KLTIwMDktMDgtMTEgMTY6NDI6NTEgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgZHRtZnNyYzogRW1wdHkgZXZlbnQgcXVldWUgb24gZmluYWxpemUKLQotMjAwOS0wOC0xMSAxNjozOTo0MiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBkdG1mOiBVc2UgR1NsaWNlIGZvciBpbnRlcm5hbCBldmVudCBzdHJ1Y3R1cmVzCi0KLTIwMDktMDgtMTEgMTY6MjM6MjAgLTA0MDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBydHBkdG1mc3JjOiBDbGVhbnVwIGV2ZW50cyBvbiBmaW5hbGl6ZQotCSAgUHJvYmxlbSBmb3VuZCBieSBMYXVyZW50IEdsYXlhbAotCSAgRml4ZXMgYnVnICM1OTE0NDAKLQotMjAwOS0wOC0xMSAxNjoyMzoyMCAtMDQwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIHJ0cGR0bWZzcmM6IENsZWFudXAgZXZlbnRzIG9uIGZpbmFsaXplCi0JICBQcm9ibGVtIGZvdW5kIGJ5IExhdXJlbnQgR2xheWFsCi0JICBGaXhlcyBidWcgIzU5MTQ0MAotCi0yMDA5LTA4LTExIDE3OjMwOjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogcG8vTElOR1VBUzoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2RlLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdHIucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgMC4xMC4xNS4yIHByZS1yZWxlYXNlCi0KLTIwMDktMDgtMTEgMTU6MjU6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBNQUlOVEFJTkVSUzoKLQkgIEFkZCBteXNlbGYgdG8gTUFJTlRBSU5FUlMgZmlsZSBhbmQgdXBkYXRlIFdpbSdzIGUtbWFpbC4KLQotMjAwOS0wOC0xMSAwMzowODowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSAgdjRsMjogZml4IG1ha2UgZGlzdGNoZWNrIGJ5IGRpc3Rpbmcgc29tZSBtb3JlIGhlYWRlcnMKLQotMjAwOS0wOC0xMSAwMjo0MjoxNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgZG9jczogdXBkYXRlCi0KLTIwMDktMDgtMTEgMDI6MzE6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzLy5naXRpZ25vcmU6Ci0JICBNb3ZlIHJ0cG1hbmFnZXIgZnJvbSAtYmFkIHRvIC1nb29kLgotCSAgSG9vayB1cCBidWlsZCBpbmZyYXN0cnVjdHVyZSAoYXV0b3Rvb2xzLCBkb2NzLCB1bml0IHRlc3QpLgotCi0yMDA5LTA4LTA2IDE5OjI2OjIxICswMjAwICByaWMgPGNzeG5qdSBhdCBzb2dvdS5jb20+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiBhdm9pZCBidWZmZXIgbGVhayBvbiBiYWQgc2VxbnVtCi0JICBGaXhlcyAjNTkwNzk3Ci0KLTIwMDktMDctMjggMTg6MTg6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiBhbGxvdyBmb3IgTlVMTCBjYXBzIG9uIGJ1ZmZlcnMKLQkgIEFkZCB0aGUgTlVMTCBjYXBzIGNoZWNrIHdoZXJlIGl0IG1hdHRlcnMgYW5kIGFsc28gY292ZXIgYW5vdGhlciBjYXNlIG9mCi0JICBwb3RlbnRpYWwgTlVMTCBjYXBzLgotCSAgRml4ZXMgIzU5MDAzMAotCi0yMDA5LTA3LTI4IDExOjU5OjU2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291cmNlOiBJbmNvbWluZyBidWZmZXJzIGRvIG5vdCBhbHdheXMgaGF2ZSBjYXBzCi0KLTIwMDktMDctMjcgMTU6NDY6MjMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGF2b2lkIGRvaW5nIGxpcC1zeW5jIGluIEJZRQotCSAgV2hlbiB3ZSBnZXQgYSBCWUUgcGFja2V0LCBkb24ndCBkbyBsaXAtc3luYyB3aXRoIHRoZSBTUiBpbnNpZGUgYmVjYXVzZSBzb21lCi0JICBzZW5kZXJzIGhhdmUgdHJvdWJsZSBjb25zdHJ1Y3RpbmcgdmFsaWQgU1IgcGFja2V0cyBhZnRlciBCWUUuCi0KLTIwMDktMDctMjcgMTM6MTc6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cGJpbjogZG9uJ3QgZG8gbGlwLXN5bmMgYWZ0ZXIgYSBCWUUKLQkgIEFmdGVyIGEgQllFIHBhY2tldCBmcm9tIGEgc291cmNlLCBzdG9wIGZvcndhcmRpbmcgdGhlIFNSIHBhY2tldHMgZm9yIGxpcC1zeW5jCi0JICB0byBydHBiaW4uIFNvbWUgc2VuZGVycyBkb24ndCB1cGRhdGUgdGhlaXIgU1IgcGFja2V0cyBjb3JyZWN0bHkgYWZ0ZXIgc2VuZGluZyBhCi0JICBCWUUgYW5kIHRoZW4gd2UgYnJlYWsgbGlwLXN5bmMuIFdlIHByZWZlciB0byBsZXQgdGhlIGppdHRlcmJ1ZmZlcnMgZHJhaW4gd2l0aAotCSAgdGhlIGN1cnJlbnQgbGlwLXN5bmMgaW5zdGVhZC4KLQotMjAwOS0wNy0yNyAxMjo0MzowMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwYmluOiBvbmx5IHJlY29uc2lkZXIgb25jZSBmb3IgQllFCi0JICBXaGVuIGl0ZXJhdGluZyB0aGUgc291cmNlcyBvZiBhIEJZRSBwYWNrZXQsIGRvbid0IHNpZ25hbCBhIHJlY29uc2lkZXJhdGlvbiBmb3IKLQkgIGVhY2ggb2YgdGhlbSBidXQgc2lnbmFsIGFmdGVyIHdlIGhhbmRsZWQgYWxsIHNvdXJjZXMuCi0KLTIwMDktMDctMjEgMTU6MzM6NDEgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogRnJlZSBjb25mbGljdGluZyBhZGRyZXNzZXMgb24gZmluYWxpemUKLQotMjAwOS0wNy0wMSAxMjo1NTowMyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBiaW46IHVzZSBuZXcgbWV0aG9kIGZvciBuZXRhZGRyZXNzIHRvIHN0cmluZwotCi0yMDA5LTA2LTI5IDE4OjQ4OjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgcnRwYmluOiBkbyBiZXR0ZXIgY2xlYW51cCBvZiB0aGUgc3JjIGdob3N0cGFkcwotCSAgQ29ubmVjdCB0byB0aGUgcGFkLXJlbW92ZWQgc2lnbmFsIG9mIHRoZSBwdGRlbXV4IGVsZW1lbnRzIHNvIHRoYXQgd2UgcmVtb3ZlIHRoZQotCSAgZ2hvc3RwYWRzIGZvciB0aGVtLiBGaXhlcyBjbGVhbnVwIHdoZW4gZ29pbmcgdG8gTlVMTCBhcyB3ZWxsIGFzIHdoZW4gcmVsZWFzaW5nCi0JICB0aGUgc2lua3BhZHMuCi0JICBGaXhlcyAjNTYxNzUyCi0KLTIwMDktMDUtMjggMTk6MDg6NDAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IGFkZCBhIGNvbW1lbnQKLQotMjAwOS0wNi0yOSAxNjozNzo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIHJ0cGJpbjogYWRkIFNERVMgcHJvcGVydHkKLQkgIFJlbW92ZSBhbGwgaW5kaXZpZHVhbCBTREVTIHByb3BlcnRpZXMgYW5kIHVzZSBvbmUgc2RlcyBwcm9wZXJ0eSB0aGF0IHRha2VzIGEKLQkgIEdzdFN0cnVjdHVyZSBpbnN0ZWFkLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gYWRkIG1vcmUgY3VzdG9tIHN0dWZmIHRvIHRoZSBTREVTCi0JICBtZXNzYWdlcyBsYXRlci4KLQotMjAwOS0wNi0yOSAxNjoyMTowNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIHJ0cGJpbjogYWRkIFNERVMgcHJvcGVydHkgdGhhdCB0YWtlcyBHc3RTdHJ1Y3R1cmUKLQkgIFJlbW92ZSBhbGwgaW5kaXZpZHVhbCBTREVTIHByb3BlcnRpZXMgYW5kIHVzZSBvbmUgc2RlcyBwcm9wZXJ0eSB0aGF0IHRha2VzIGEKLQkgIEdzdFN0cnVjdHVyZSBpbnN0ZWFkLiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gYWRkIG1vcmUgY3VzdG9tIHN0dWZmIHRvIHRoZSBTREVTCi0JICBtZXNzYWdlcyBsYXRlci4KLQotMjAwOS0wNi0wMiAxNzo0NjowOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5oOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jOgotCSAgcnRwYmluOiByZW1vdmVkIG9sZCBnc3RydHBjbGllbnQKLQotMjAwOS0wNi0xOSAxOTowOToxOSArMDIwMCAgQnJhbmtvIFN1YmFzaWMgPGJyYW5rby5zdWJhc2ljIGF0IGF4aXMuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmM6Ci0JICBydHBiaW46IGFkZCBzdXBwb3J0IGZvciBidWZmZXItbGlzdAotCSAgQWRkIHN1cHBvcnQgZm9yIHNlbmRpbmcgYnVmZmVyLWxpc3RzLgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGVzdGluZyB0aGF0IHRoZSBidWZmZXItbGlzdCBwYXNzZWQgdGhyb3VnaCBydHBiaW4uCi0JICBmaXhlcyAjNTg1ODM5Ci0KLTIwMDktMDYtMTkgMTY6MjE6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIE1ha2UgYnVpbGQgd2l0aG91dCB3YXJuaW5ncyB3aXRoIGRlYnVnZ2luZyBkaXNhYmxlZAotCi0yMDA5LTA1LTI4IDE3OjM3OjQ0IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBUcmFuc2Zvcm0gdGhlIHJpZ2h0IHNlc3Npb24gc2RlcyBtZXNzYWdlCi0JICBGaXhlcyAjNTg0MTY1Ci0KLTIwMDktMDUtMjggMTc6MzM6MTAgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBBZGQgc3NyYyB0byBhcHBsaWNhdGlvbi94LXJ0cC1zb3VyY2Utc2RlcyBzdHJ1Y3R1cmUKLQotMjAwOS0wNS0yNyAxMTowMzoxNCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VjZTogdGhlIG5ldHdvcmsgYWRkcmVzcyBpcyBpbiBuZXR3b3JrIG9yZGVyCi0JICBCcmluZyB0aGUgbmV0d29yayBhZGRyZXNzIGluIG5ldG93a3IgYnl0ZSBvcmRlciB0byB0aGUgaG9zdCBvcmRlci4KLQotMjAwOS0wNS0yNiAxNTo0MDo1MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IGJ5dGVzd2FwIHRoZSBwb3J0IGZyb20gR3N0TmV0QWRkcmVzcwotCSAgU2luY2UgdGhlIHBvcnQgaW4gR3N0TmV0QWRkcmVzcyBpcyBpbiBuZXR3b3JrIG9yZGVyIHdlIG1pZ2h0IG5lZWQgdG8gYnl0ZXN3YXAgaXQKLQkgIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHNvdXJjZSBzdGF0aXN0aWNzLgotCi0yMDA5LTA1LTI1IDEzOjQ2OjI5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogcmVtb3ZlIHB0ZGVtdXggZ2hvc3RwYWRzCi0KLTIwMDktMDUtMjUgMTM6MzM6MjAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgdGVzdHM6IGFkZCByZWNlaXZlIHJ0cGJpbiB1bml0IHRlc3QKLQotMjAwOS0wNS0yMiAxNjo0MToxOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IGFkZCB0byBuZXcgc2lnbmFsIHRvIHJlbW92ZSBTU1JDIHBhZHMKLQotMjAwOS0wNS0yMiAxNjozNToyMCArMDIwMCAgQWxpIFNhYmlsIDxhbGkuc2FiaWwgYXQgZ21haWwuY29tPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguaDoKLQkgIHNzcmNkZW11eDogZW1pdCBzaWduYWwgd2hlbiBwYWRzIGFyZSByZW1vdmVkCi0JICBBZGQgYWN0aW9uIHNpZ25hbCB0byBjbGVhciBhbiBTU1JDIGluIHRoZSBzc3JjIGRlbXV4ZXIuCi0JICBBZGQgc2lnbmFsIHRvIG5vdGlmeSBvZiByZW1vdmVkIHNzcmMuCi0JICBTZWUgIzU1NDgzOQotCi0yMDA5LTA1LTIyIDE1OjQ1OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogdXNlIG91ciBnaG9zdHBhZHMgaW5zdGVhZCBvZiBpdHMgdGFyZ2V0Ci0JICBTaW5jZSB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIG91ciBnaG9zdHBhZHMsIHdlIGNhbiB1c2UgdGhlbSB0byB0cmFjayBzZXNzaW9ucy4KLQkgIFRoaXMgYXZvaWQgdXMgaGF2aW5nIHRvIG1lc3Mgd2l0aCB0aGUgdGFyZ2V0IG9mIHRoZSBnaG9zdHBhZC4KLQotMjAwOS0wNS0yMiAxNTozNzoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICB0ZXN0czogbW9yZSBydHBiaW4gY2hlY2tzCi0KLTIwMDktMDUtMjIgMTU6MzY6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBkb24ndCB3YXJuIHdoZW4gZ2V0dGluZyByZXF1ZXN0IHBhZHMgdHdpY2UKLQkgIEFsbG93IGdldHRpbmcgdGhlIHJlcXVlc3QgcGFkcyBtdWx0aXBsZSB0aW1lcywganVzdCByZXR1cm4gdGhlIHByZXZpb3VzbHkKLQkgIGNyZWF0ZWQgcGFkcy4KLQotMjAwOS0wNS0yMiAxMzo0NzozMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBydHBzb3VyY2U6IGFkZCBSVFAgYW5kIFJUQ1Agc291cmNlIGFkZHJlc3MKLQkgIEFkZCB0aGUgUlRQIGFuZCBSVENQIHNlbmRlciBhZGRyZXNzZXMgaW4gdGhlIHN0YXRzIHN0cnVjdHVyZS4KLQotMjAwOS0wNS0yMiAxMzo0NToxNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogcmV1c2Ugc291cmNlIGNvZGUgZm9yIFNERVMKLQkgIFJldXNlIHRoZSBSVFBTb3VyY2Ugb2JqZWN0IHByb3BlcnR5IGluc3RlYWQgb2YgZHVwbGljYXRpbmcgY29kZS4KLQotMjAwOS0wNS0yMiAxMzo0NDoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmM6Ci0JICB0ZXN0czogYWRkIG1vcmUgcnRwYmluIHRlc3RzCi0KLTIwMDktMDUtMjIgMTI6MjM6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGJpbi5jOgotCSAgdGVzdHM6IGFkZCBydHBiaW4gdW5pdCB0ZXN0Ci0JICBBZGQgdGhlIGJlZ2lubmluZ3Mgb2YgYW4gcnRwYmluIHVuaXQgdGVzdAotCSAgQWRkIHNvbWUgbW9yZSBzdHVmZiB0byAuZ2l0aWdub3JlCi0KLTIwMDktMDUtMjIgMTI6MjA6MTMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBzZXQgdGFyZ2V0IHN0YXRlIG9uIG5ldyBlbGVtZW50cwotCSAgU2V0IHRoZSBzdGF0ZSBvbiBuZXdseSBhZGRlZCBlbGVtZW50cyB0byB0aGUgc3RhdGUgb2YgdGhlIHBhcmVudC4KLQkgIEFkZCBzb21lIGRlYnVnIGluZm8gYW5kIGRvIHNvbWUgY2xlYW51cHMKLQotMjAwOS0wNS0yMiAxMTo1OToxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHVucmVmIHJlcXVlc3RzIHBhZHMgYWZ0ZXIgcmVsZWFzaW5nCi0KLTIwMDktMDUtMjIgMDE6NDM6NTAgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IEltcGxlbWVudCByZWxlYXNpbmcgdGhlIHN0cmVhbXMKLQkgIFNlZSAjNTYxNzUyCi0KLTIwMDktMDUtMjIgMDE6MTY6MTEgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IEtlZXAgamIgc2lnbmFscyBoYW5kbGVyCi0JICBLZWVwIHRoZSBzaWduYWwgaGFuZGxlcnMgc28gdGhleSBjYW4gYmUgZGlzY29ubmVjdGVkIGF0IHJlbGVhc2UgdGltZQotCSAgU2VlICM1NjE3NTIKLQotMjAwOS0wNS0yMiAwMToxMjo1NyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IHVzZSB0aGUgcmlnaHQgbG9jayBmb3IgdGhlIHNlc3Npb25zCi0JICBVc2UgdGhlIHJpZ2h0IGxvY2sgd2hlbiBpdGVyYXRpbmcgdGhlIHNlc3Npb25zLgotCi0yMDA5LTA1LTIyIDAxOjAzOjU1ICswMjAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBGcmVlIHNlc3Npb24gaWYgcmVxdWVzdCBwYWRzIGFyZSByZWxlYXNlZAotCSAgRnJlZSB0aGUgc2Vzc2lvbiB3aGVuIGFsbCB0aGUgcmVxdWVzdCBwYWRzIGFyZSByZWxlYXNlZC4KLQkgIERvbid0IG1lc3Mgd2l0aCB0aGUgc2Vzc2lvbiBsaXN0IGluIGZyZWVfc2Vzc2lvbiBhcyBpdCBpcyBjYWxsZWQgZnJvbSBhIGZvcmVhY2gKLQkgIG9uIHRoYXQgbGlzdC4KLQkgIFNldCB0aGUgc3RhdGUgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnQgdG8gTlVMTCBmaXJzdC4KLQkgIFNlZSAjNTYxNzUyCi0KLTIwMDktMDUtMjIgMDA6NTE6NTMgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IEltcGxlbWVudCByZWxhc2luZyBvZiB0aGUgcnRwIHJlY3YgcGFkCi0KLTIwMDktMDUtMjIgMDA6NDQ6NTEgKzAyMDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICBydHBiaW46IEltcGxlbWVudCByZWxlYXNpbmcgb2YgcnRwIHNlbmQgcGFkcwotCi0yMDA5LTA1LTIyIDAwOjM0OjM2ICswMjAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgcnRwYmluOiBJbXBsZW1lbnQgcmVsZWFzZSBvZiB0aGUgcmVjdiBydGNwIHBhZAotCSAgU2VlICM1NjE3NTIKLQotMjAwOS0wNS0yMiAwMDoxNjoxOSArMDIwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIHJ0cGJpbjogSW1wbGVtZW50IHJlbGVhc2luZyBvZiBydGNwIHNyYyBwYWQKLQkgIFNlZSAjNTYxNzUyCi0KLTIwMDktMDUtMDUgMTY6NDg6MzcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgcnRwc3NyY2RlbXV4OiBkcm9wIHVuZXhwZWN0ZWQgUlRDUCBwYWNrZXRzCi0JICBXZSB1c3VhbGx5IG9ubHkgZ2V0IFNSIHBhY2tldHMgaW4gb3VyIGNoYWluIGZ1bmN0aW9uIGJ1dCBpZiBhbiBpbnZhbGlkIHBhY2tldAotCSAgY29udGFpbnMgdGhlIFNSIHBhY2tldCBhZnRlciB0aGUgUlIgcGFja2V0LCB3ZSBtdXN0IG5vdCBmYWlsIGJ1dCBzaW1wbHkgaWdub3JlCi0JICB0aGUgbWFsZm9ybWVkIHBhY2tldC4KLQkgIEZpeGVzICM1ODEzNzUKLQotMjAwOS0wNC0yNyAxMTowOTowOCArMDIwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgcnRwc291Y2U6IG1ha2UgV0FSTklORyBpbnRvIExPRwotCSAgU2luY2UgbmVpdGhlciBydHBtYW5hZ2VyIG5vciBhbnkgb2YgdGhlIHBheWxvYWRlcnMgcHJvcGVybHkgaW1wbGVtZW50Ci0JICBwYWQgYWxsb2NhdGlvbiwgdGhlcmUgaXMgbm8gd2F5IGZvciB0aGUgcnRwbWFuYWdlciB0byBpbmZvcm0gZG93bnN0cmVhbSBlbGVtZW50cwotCSAgb2YgdGhlIG5ldyBTU1JDIGlmIHRoZXJlIGlzIGFuIFNTUkMgY29sbGlzaW9uLiBTbyB0aGUgd2FybmluZyBpcyBlbWl0dGVkIGFsbCB0aGUKLQkgIHRpbWUgYW5kIGl0IGlzIGNvbmZ1c2luZy4KLQkgIEZpeGVzICM1ODAxNDQKLQotMjAwOS0wNC0yNyAxMTowNjowMSArMDIwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzoKLQkgIHJ0cHNlc3Npb246IG5vdGlmeSB3aGVuIFNTUkMgY2hhbmdlcwotCSAgRW1pdCBhIGdfb2JqZWN0X25vdGlmeSB3aGVuIHRoZSBTU1JjIGNoYW5nZXMgYmVjYXVzZSBvZiBhIGNvbGxpc2lvbi4KLQkgIEZpeGVzICM1ODAxNDQKLQotMjAwOS0wNC0xNyAxNjoxNjoyOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgcnRwc2Vzc2lvbjogam9pbiB0aGUgUlRDUCB0aHJlYWQKLQkgIEF2b2lkIGEgY2FzZSB3aGVyZSBhIGpvaW5hYmxlIHRocmVhZCB3b3VsZCBiZSBsZWZ0IHVuam9pbmVkLCB3aGljaCBsZWFrZWQgdGhlCi0JICB0aHJlYWQgc3RydWN0dXJlLgotCSAgRml4ZXMgIzU3NzMxOC4KLQotMjAwOS0wNC0xNSAxODoxNDo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBqaXR0ZXJidWZmZXI6IHByZXZlbnQgb3ZlcmZsb3cgaW4gRU9TIGVzdGltYXRpb24KLQkgIFVzZSBhIGd1aW50NjQgaW5zdGVhZCBvZiBhIGd1aW50IHRvIGhvbGQgYSA2NGJpdCB2YWx1ZSB0byBwcmV2ZW50IGNvbXBsZXRlbHkKLQkgIGJvZ3VlcyBFT1MgZXN0aW1hdGlvbiB2YWx1ZXMgZHVlIHRvIG92ZXJmbG93cy4KLQotMjAwOS0wNC0xNSAxNzo0NDoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIHJ0cGJpbjogd2Ugc2hvdWxkIG5vdCBwcm92aWRlIGEgY2xvY2sKLQkgIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvdmlkZSBhIGNsb2NrLgotCi0yMDA5LTA0LTE1IDE3OjI4OjU2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogbW9yZSBlc3RpbWF0ZWQgRU9TIGZpeGVzCi0JICBEbyBtb3JlIGFjY3VyYXRlIEVPUyBlc3RpbWF0ZSBhbmQgZ3VhcmQgYWdhaW5zdCBiYWNrd2FyZCB0aW1lc3RhbXBzLgotCi0yMDA5LTA0LTE1IDE3OjI1OjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIGppdHRlcmJ1ZmZlcjogcmVsZWFzZSBsb2NrIGJlZm9yZSBwdXNoaW5nIEVPUwotCSAgTWFrZSBzdXJlIHdlIHJlbGVhc2UgdGhlIGppdHRlcmJ1ZmZlciBsb2NrIGJlZm9yZSB3ZSBzdGFydCBwdXNoaW5nIG91dCBkYXRhCi0JICBiZWNhdXNlIGVsc2Ugd2UgbWlnaHQgZGVhZGxvY2suCi0KLTIwMDktMDMtMjcgMTc6NDQ6NTcgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5oOgotCSAgcnRwYmluOiBhZGQgb25fbnB0X3N0b3Agc2lnbmFsCi0JICBBZGQgdGhlIG9uX25wdF9zdG9wIHNpZ25hbCB0byBydHBiaW4gYW5kIHJ0cGppdHRlcmJ1ZmZlciB0byBub3RpZnkgdGhlCi0JICBhcHBsaWNhdGlvbiB0aGF0IHRoZSBOUFQgc3RvcCBwb3NpdGlvbiBoYXMgYmVlbiByZWFjaGVkLgotCi0yMDA5LTAzLTEzIDE1OjU5OjM3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBydHBiaW46IGRvbid0IHJldHVybiBGQUxTRSBvbiBzZWVrIGV2ZW50cwotCSAgU2lsZW50bHkgaWdub3JlIHRoZSBzZWVrIGV2ZW50IGluc3RlYWQgb2YgcmV0dXJuaW5nIEZBTFNFLgotCi0yMDA5LTAyLTI2IDEzOjEwOjI5ICswMTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIGdzdHJ0cGJpbjogRG9uJ3QgZm9yd2FyZCByZXZjIGV2ZW50cyB0byBzZW5kZXIKLQkgIERvbid0IHNlbmQgZXZlbnRzIGZyb20gdGhlIHJlY2VpdmVyIHRvIHRoZSBzZW5kZXIgc2lkZS4KLQkgIEZpeGVzICM1NzI5MDAuCi0KLTIwMDktMDItMjUgMTE6NDU6MDUgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6Ci0JICBkb2NzOiB2YXJpb3VzIGRvYyBmaXhlcwotCSAgTm8gc2hvcnQtZGVzYyBhcyB3ZSBoYXZlIHRoZW0gaW4gdGhlIGVsZW1lbnQgZGV0YWlscy4KLQkgIEFsc28ga2VlcCB0aGluZ3MgKE1ha2VmaWxlLmFtIGFuZCBzZWN0aW9ucy50eHQpIHNvcnRlZC4KLQkgIFJld29yZCBhbWJpZ291cyByZXR1cm5zLiBObyB0ZXh0IGFmdGVyIHNpbmNlIHBsZWFzZS4KLQotMjAwOS0wMS0yMyAxMjoxMzowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzoKLQkgIFNlbmQgQllFIHBhY2tldHMgaW1tZWRpYXRseSBmb3Igc21hbGwgc2Vzc2lvbnMKLQkgIFdoZW4gdGhlIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgaXMgbGVzcyB0aGFuIDUwLCB0aGUgUkZDIGFsbG93cyBmb3Igc2VuZGluZyB0aGUKLQkgIEJZRSBwYWNrZXQgaW1tZWRpYXRseSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSByZWd1bGFyIEJZRSB0aW1lb3V0LgotCSAgRml4ZXMgIzU2NzgyOC4KLQotMjAwOS0wMS0yMiAxMzozMzoxNCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICBVbmxvY2sgdGhlIGppdHRlcmJ1ZmZlciBiZWZvcmUgcHVzaGluZyBvdXQgdGhlIHBhY2tldC1sb3N0IGV2ZW50cy4gTW92ZSBzb21lIGNvZGUgYmVmb3JlIHdlIGRvIHRoZSB1bmxvY2sgdG8gbWFrZSB0aGUgaml0dGVyYnVmZmVyIHN0YXRlIGNvbnNpc3RlbnQgd2hpbGUgd2UgYXJlIHVubG9ja2VkLgotCi0yMDA5LTAxLTAyIDE3OjQwOjA2ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci86IFdoZW4gYW4gU1NSQyBpcyBmb3VuZCBvbiB0aGUgY2FwcyBvZiB0aGUgc2VuZGVyIFJUUCwgdXNlIHRoaXMgYXMgdGhlIGludGVybmFsIFNTUkMuIEZpeGVzICM1NjU5MTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zZXRjYXBzX3NlbmRfcnRwKSwgKGNyZWF0ZV9zZW5kX3J0cF9zaW5rKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fc2V0X2ludGVybmFsX3NzcmMpOgotCSAgV2hlbiBhbiBTU1JDIGlzIGZvdW5kIG9uIHRoZSBjYXBzIG9mIHRoZSBzZW5kZXIgUlRQLCB1c2UgdGhpcyBhcyB0aGUKLQkgIGludGVybmFsIFNTUkMuIEZpeGVzICM1NjU5MTAuCi0KLTIwMDktMDEtMDIgMTY6NTA6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogUmVuYW1lIGEgbWV0aG9kIHRvIGJldHRlciByZWZsZWN0IHdoYXQgaXQgcmVhbGx5IGRvZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgKGdzdF9ydHBfc2Vzc2lvbl9ldmVudF9zZW5kX3J0cF9zaW5rKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZ2V0Y2Fwc19zZW5kX3J0cCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKGNoZWNrX2NvbGxpc2lvbiksCi0JICAocnRwX3Nlc3Npb25fc2NoZWR1bGVfYnllX2xvY2tlZCksIChydHBfc2Vzc2lvbl9zY2hlZHVsZV9ieWUpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBSZW5hbWUgYSBtZXRob2QgdG8gYmV0dGVyIHJlZmxlY3Qgd2hhdCBpdCByZWFsbHkgZG9lcy4KLQotMjAwOC0xMi0yOSAxNTo0OTozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiBVc2UgbWV0aG9kIHRvIGdldCB0aGUgaW50ZXJuYWwgU1NSQy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICAoZ3N0X3J0cF9zZXNzaW9uX2dldGNhcHNfc2VuZF9ydHApOgotCSAgVXNlIG1ldGhvZCB0byBnZXQgdGhlIGludGVybmFsIFNTUkMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eSksIChydHBfc2Vzc2lvbl9nZXRfcHJvcGVydHkpOgotCSAgQWRkIHByb3BlcnR5IHRvIGNvbmdpdXJlIHRoZSBpbnRlcm5hbCBTU1JDIG9mIHRoZSBzZXNzaW9uLgotCSAgRml4ZXMgIzU2NTkxMC4KLQotMjAwOC0xMi0yOSAxNToyMTo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiBPbmx5IGNoYW5nZSB0aGUgU1NSQyBvZiB0aGUgc2Vzc2lvbiBhbmQgcmVzZXQgdGhlIGludGVybmFsIHNvdXJjZSB3aGVuIHRoZSBTU1JDIGFjdHVhbGx5Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fc2V0X2ludGVybmFsX3NzcmMpOgotCSAgT25seSBjaGFuZ2UgdGhlIFNTUkMgb2YgdGhlIHNlc3Npb24gYW5kIHJlc2V0IHRoZSBpbnRlcm5hbCBzb3VyY2Ugd2hlbgotCSAgdGhlIFNTUkMgYWN0dWFsbHkgY2hhbmdlZC4gU2VlICM1NjU5MTAuCi0KLTIwMDgtMTItMjkgMTQ6MjE6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS4qOiBXaGVuIG5vIHBheWxvYWQgd2FzIHNwZWNpZmllZCBvbiB0aGUgY2FwcyBidXQgdGhlcmUgd2FzIGEgY2xvY2stcmF0ZSwgYXNzdW1lIHRoZSBjbG9jay1yYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9pbml0KSwKLQkgIChydHBfc291cmNlX3VwZGF0ZV9jYXBzKSwgKGdldF9jbG9ja19yYXRlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBXaGVuIG5vIHBheWxvYWQgd2FzIHNwZWNpZmllZCBvbiB0aGUgY2FwcyBidXQgdGhlcmUgd2FzIGEgY2xvY2stcmF0ZSwKLQkgIGFzc3VtZSB0aGUgY2xvY2stcmF0ZSBjb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgcGF5bG9hZCB0eXBlIGZvdW5kIGluIHRoZQotCSAgUlRQIHBhY2tldHMuIEZpeGVzICM1NjU1MDkuCi0KLTIwMDgtMTItMjMgMTE6Mzk6NTkgKzAwMDAgIEFybm91dCBWYW5kZWNhcHBlbGxlIDxhcm5vdXRAbWluZC5iZT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLio6IEtlZXAgdHJhY2sgb2YgdGhlIGxhc3Qgb3V0Z29pbmcgdGltZXN0YW1wIGFuZCBvZiB0aGUgbGFzdCBzZW5kZXItc2lkZSB0aW1lLiAgVGltZXN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBcm5vdXQgVmFuZGVjYXBwZWxsZSA8YXJub3V0IGF0IG1pbmQgZG90IGJlPgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcpLAotCSAgKGNhbGN1bGF0ZV9za2V3KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IG91dGdvaW5nIHRpbWVzdGFtcCBhbmQgb2YgdGhlIGxhc3Qgc2VuZGVyLXNpZGUKLQkgIHRpbWUuICBUaW1lc3RhbXBzIGNhbiBvbmx5IGdvIGZvcndhcmQgaWYgdGhleSBkbyBhdCB0aGUgc2VuZGVyCi0JICBzaWRlLCBjYW4gb25seSBnbyBiYWNrIGlmIHRoZXkgZG8gYXQgdGhlIHNlbmRlciBzaWRlLCBhbmQgcmVtYWluIHRoZQotCSAgc2FtZSBpZiB0aGV5IHJlbWFpbiB0aGUgc2FtZSBhdCB0aGUgc2VuZGVyIHNpZGUuIEZpeGVzICM1NjUzMTkuCi0KLTIwMDgtMTEtMjYgMTI6NDA6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogTWFrZSBvYnRhaW5fc291cmNlIHJldHVybiBhbiBhZGl0aW9uYWwgcmVmIHNvIHRoYXQgd2UgZG9uJ3QgbG9zZSBvdXIgcmVmIHRvIGl0IHdoZW4gYSBzZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKG9idGFpbl9zb3VyY2UpLAotCSAgKHJ0cF9zZXNzaW9uX2NyZWF0ZV9zb3VyY2UpLCAocnRwX3Nlc3Npb25fcHJvY2Vzc19ydHApLAotCSAgKHJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc3IpLCAocnRwX3Nlc3Npb25fcHJvY2Vzc19yciksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19zZGVzKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllKToKLQkgIE1ha2Ugb2J0YWluX3NvdXJjZSByZXR1cm4gYW4gYWRpdGlvbmFsIHJlZiBzbyB0aGF0IHdlIGRvbid0IGxvc2Ugb3VyIHJlZgotCSAgdG8gaXQgd2hlbiBhIHNlc3Npb24gY2xlYW51cCBvY2N1cnMgd2hlbiB3ZSBhcmUgZW1pdGluZyBhIHNpZ25hbC4KLQkgIEVtaXQgdGhlIG9uX25ld19zc3JjIHNpZ25hbCBmb3IgdGhlIENTUkMsIG5vdCB0aGUgU1NSQy4KLQkgIEZpeGVzICM1NjIzMTkuCi0KLTIwMDgtMTEtMjYgMTI6MDI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBSZXNldCB0aGUgc3luYyBwYXJhbWV0ZXJzIHdoZW4gY2xlYXJpbmcgdGhlIHBheWxvYWQgdHlwZSBtYXAgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fcmVzZXRfc3luYyksCi0JICAoZ3N0X3J0cF9iaW5fY2xlYXJfcHRfbWFwKToKLQkgIFJlc2V0IHRoZSBzeW5jIHBhcmFtZXRlcnMgd2hlbiBjbGVhcmluZyB0aGUgcGF5bG9hZCB0eXBlIG1hcCB0b28uCi0JICBGaXhlcyAjNTYyMzEyLgotCi0yMDA4LTExLTI2IDExOjQ0OjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uKjogUmVtb3ZlIGEgbG90IG9mIHBlciBzdHJlYW0gc3RhdGUgdGhhdCBpcyBub3QgbmVlZGVkIGFuZCBwYXNzIG5ldyBpbmZvIGluIHRoZSBtZXRob2QgY2FsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdldF9jbGllbnQpLAotCSAgKGdzdF9ydHBfYmluX3Jlc2V0X3N5bmMpLCAoZ3N0X3J0cF9iaW5fYXNzb2NpYXRlKSwKLQkgIChnc3RfcnRwX2Jpbl9oYW5kbGVfc3luYyksIChjcmVhdGVfc3RyZWFtKSwKLQkgIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwgKG5ld19zc3JjX3BhZF9mb3VuZCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgUmVtb3ZlIGEgbG90IG9mIHBlciBzdHJlYW0gc3RhdGUgdGhhdCBpcyBub3QgbmVlZGVkIGFuZCBwYXNzIG5ldyBpbmZvIGluCi0JICB0aGUgbWV0aG9kIGNhbGwuCi0JICBBZGQgc2lnbmFsIHRvIHJlc2V0IHN5bmMgcGFyYW1ldGVycy4KLQkgIEF2b2lkIHBhcnNpbmcgdGhlIGNhcHMgdG8gZ2V0IGEgY2xvY2tfYmFzZSwgd2UgZ2V0IHRoaXMgZnJvbSB0aGUgc3luYwotCSAgc2lnbmFsIG5vdy4KLQotMjAwOC0xMS0yNSAxNToxMjowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiBGaXggZXZlbnQgbGVhay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICAoZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3NlbmRfcnRjcF9zcmMpOgotCSAgRml4IGV2ZW50IGxlYWsuCi0KLTIwMDgtMTEtMjIgMTU6MzE6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogQWRkIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgUlRDUCBNVFUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAocnRwX3Nlc3Npb25faW5pdCksIChydHBfc2Vzc2lvbl9zZXRfcHJvcGVydHkpLAotCSAgKHJ0cF9zZXNzaW9uX2dldF9wcm9wZXJ0eSk6Ci0JICBBZGQgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBSVENQIE1UVS4KLQotMjAwOC0xMS0yMiAxNToyNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiBBZGQgR19QQVJBTV9TVEFUSUNfU1RSSU5HUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChjb3B5X3NvdXJjZSksIChydHBfc2Vzc2lvbl9jcmVhdGVfc291cmNlcyksCi0JICAocnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5KToKLQkgIEFkZCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTLgotCSAgQWRkIHByb3BlcnR5IHRvIHJldHVybiBhIEdWYWx1ZUFycmF5IG9mIGFsbCBrbm93biBSVFBTb3VyY2VzIGluIHRoZQotCSAgc2Vzc2lvbi4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9zb3VyY2VfY3JlYXRlX3NkZXMpLCAocnRwX3NvdXJjZV9zZXRfcHJvcGVydHkpLAotCSAgKHJ0cF9zb3VyY2VfZ2V0X3Byb3BlcnR5KToKLQkgIFJlbW92ZSBwcm9wZXJ0aWVzIHRvIHNldCB0aGUgdmFyaW91cyBTREVTIGl0ZW1zLCBhbiBhcHBsaWNhdGlvbiBpcyBuZXZlcgotCSAgc3VwcG9zZWQgdG8gY2hhbmdlIHRoZSBSVFBTb3VyY2UgZGF0YS4KLQkgIENoYW5nZSB0aGUgU0RFUyBnZXR0ZXIgcHJvcGVydGllcyB0byBvbmUgU0RFUyBwcm9wZXJ0eSB0aGF0IHJldHVybnMgYWxsCi0JICBTREVTIGl0ZW1zIGluIGEgR3N0U3RydWN0dXJlLgotCi0yMDA4LTExLTIyIDEzOjE3OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogQWxzbyB1bnJlZiB0aGUgdGFyZ2V0IHBhZCBmb3IgdW5rbm93biBwYWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fcmVsZWFzZV9wYWQpOgotCSAgQWxzbyB1bnJlZiB0aGUgdGFyZ2V0IHBhZCBmb3IgdW5rbm93biBwYWRzLgotCi0yMDA4LTExLTIxIDE2OjE3OjIyICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogUmVsZWFzZSB0aGUgcmlnaHQgcGFkcyBvbiBydHBiaW4uIEZpeGVzICM1NjE3NTIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9yZWxlYXNlX3BhZCk6Ci0JICBSZWxlYXNlIHRoZSByaWdodCBwYWRzIG9uIHJ0cGJpbi4gRml4ZXMgIzU2MTc1Mi4KLQotMjAwOC0xMS0yMCAxODo0MTozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiBQYXNzIHRoZSBydW5uaW5nIHRpbWUgdG8gdGhlIHNlc3Npb24gd2hlbiBwcm9jZXNzaW5nIFJUUCBwYWNrZXRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdldF9jdXJyZW50X3RpbWVzKSwKLQkgIChydGNwX3RocmVhZCksIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydHApOgotCSAgUGFzcyB0aGUgcnVubmluZyB0aW1lIHRvIHRoZSBzZXNzaW9uIHdoZW4gcHJvY2Vzc2luZyBSVFAgcGFja2V0cy4KLQkgIEltcHJvdmUgdGhlIHRpbWUgZnVuY3Rpb24gdG8gcHJvdmlkZSBtb3JlIGluZm8uCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9zZXNzaW9uX2luaXQpLCAodXBkYXRlX2Fycml2YWxfc3RhdHMpLAotCSAgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfcnRwKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc2RlcyksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19ydGNwKSwgKHNlc3Npb25fc3RhcnRfcnRjcCksCi0JICAocnRwX3Nlc3Npb25fb25fdGltZW91dCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIE1hcmsgdGhlIGludGVybmFsIHNvdXJjZSB3aXRoIGEgZmxhZy4KLQkgIFVzZSBydW5uaW5nX3RpbWUgaW5zdGVhZCBvZiB0aGUgbW9yZSB1c2VsZXNzIHRpbWVzdGFtcC4KLQkgIFZhbGlkYXRlIGEgc291cmNlIHdoZW4gYSB2YWxpZCBTREVTIGhhcyBiZWVuIHJlY2VpdmVkLgotCSAgUGFzcyB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSB3aGVuIHByb2Nlc3NpbmcgU1IgcGFja2V0cy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9zb3VyY2VfaW5pdCksIChydHBfc291cmNlX2NyZWF0ZV9zdGF0cyksCi0JICAocnRwX3NvdXJjZV9nZXRfcHJvcGVydHkpLCAocnRwX3NvdXJjZV9zZW5kX3J0cCksCi0JICAocnRwX3NvdXJjZV9wcm9jZXNzX3JiKSwgKHJ0cF9zb3VyY2VfZ2V0X25ld19yYiksCi0JICAocnRwX3NvdXJjZV9nZXRfbGFzdF9yYik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgQWRkIHByb3BlcnR5IHRvIGdldCBzb3VyY2Ugc3RhdHMuCi0JICBNYXJrIHBhcmFtcyBhcyBTVEFUSUNfU1RSSU5HUy4KLQkgIENhbGN1bGF0ZSB0aGUgYml0cmF0ZSBhdCB0aGUgc2VuZGVyIFNTUkMuCi0JICBBdm9pZCBuZWdhdGl2ZSB2YWx1ZXMgaW4gdGhlIHJvdW5kIHRyaXAgdGltZSBjYWxjdWxhdGlvbnMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBVcGRhdGUgc29tZSBkb2NzIGFuZCBjaGFuZ2Ugc29tZSB2YXJpYWJsZSBuYW1lIHRvIG1vcmUgY2xvc2VseSByZWZsZWN0Ci0JICB3aGF0IGl0IGNvbnRhaW5zLgotCi0yMDA4LTExLTIwIDA4OjE5OjE1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSB0byBmaXggY29tcGlsZXIgd2FybmluZyBhYm91dCB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbl9ydGNwKToKLQkgIEluaXRpYWxpemUgcmV0dXJuIHZhbHVlIHRvIGZpeCBjb21waWxlciB3YXJuaW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQKLQkgIHZhcmlhYmxlLgotCi0yMDA4LTExLTE5IDE2OjQ4OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogTWFyayBzaWduYWwgYXJnIGFzIHN0YXRpYyBzY29wZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2xhc3NfaW5pdCk6Ci0JICBNYXJrIHNpZ25hbCBhcmcgYXMgc3RhdGljIHNjb3BlLgotCi0yMDA4LTExLTE5IDA5OjA2OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogUmVtb3ZlIGludGVybmFsIHN5bmMgcGFkLCB1c2Ugc2lnbmFscyBpbnN0ZWFkIHRvIGdldCBsaXAtc3luYyBub3RpZmljYXRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fYXNzb2NpYXRlKSwKLQkgIChnc3RfcnRwX2Jpbl9oYW5kbGVfc3luYyksIChjcmVhdGVfc3RyZWFtKSwgKGZyZWVfc3RyZWFtKSwKLQkgIChuZXdfc3NyY19wYWRfZm91bmQpOgotCSAgUmVtb3ZlIGludGVybmFsIHN5bmMgcGFkLCB1c2Ugc2lnbmFscyBpbnN0ZWFkIHRvIGdldCBsaXAtc3luYwotCSAgbm90aWZpY2F0aW9ucy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9pbnRlcm5hbF9saW5rcyksIChjcmVhdGVfcnRjcF9zaW5rKSwKLQkgIChyZW1vdmVfcnRjcF9zaW5rKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfcnRjcF9ldmVudCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluX3J0Y3ApLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgIE1ha2UgaXQgcG9zc2libGUgdG8gc2VuZCBTUiBwYWNrZXRzIHRvIHRoZSBqaXR0ZXJidWZmZXIuCi0JICBDaGVjayBpZiB0aGUgU1IgdGltZXN0YW1wcyBhcmUgdmFsaWQgYnkgY29tcGFyaW5nIHRoZW0gdG8gdGhlIFJUUAotCSAgdGltZXN0YW1wcy4KLQkgIFNpZ25hbCB0aGUgU1IgcGFja2V0IGFuZCB0aGUgdGltaW5nIGluZm9ybWF0aW9uIHRvIGxpc3RlbmVycy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6IChjcmVhdGVfZGVtdXhfcGFkX2Zvcl9zc3JjKSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfcnRjcF9jaGFpbiksIChnc3RfcnRwX3NzcmNfZGVtdXhfc3JjX3F1ZXJ5KToKLQkgIFJlbW92ZSBzb21lIHVudXNlZCBjb2RlLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcpLAotCSAgKGNhbGN1bGF0ZV9za2V3KSwgKHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9zeW5jKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHNlZW4gUlRQIHRpbWVzdGFtcCBzbyB0aGF0IHdlIGNhbiBmaWx0ZXIgb3V0Ci0JICBpbnZhbGlkIFNSIHBhY2tldHMuCi0KLTIwMDgtMTEtMTcgMTk6NDc6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IEZpeCBHU1RfREVCVUcgY2FsbCB0byBvbmx5IGhhdmUgYXMgbWFueSBhcmd1bWVudHMgYXMgcmVxdWlyZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcuIEZpeGVzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChnZXRfY2xvY2tfcmF0ZSk6Ci0JICBGaXggR1NUX0RFQlVHIGNhbGwgdG8gb25seSBoYXZlIGFzIG1hbnkgYXJndW1lbnRzIGFzIHJlcXVpcmVkCi0JICBieSB0aGUgZm9ybWF0IHN0cmluZy4gRml4ZXMgYSBjb21waWxlciB3YXJuaW5nLgotCi0yMDA4LTExLTE3IDE1OjE3OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogRG8gbm90IHRyeSB0byBrZWVwIHRyYWNrIG9mIHRoZSBjbG9jay1yYXRlIG91cnNlbHZlcyBidXQgc2ltcGx5IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgamkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2Fzc29jaWF0ZSksCi0JICAoZ3N0X3J0cF9iaW5fc3luY19jaGFpbiksIChjcmVhdGVfc3RyZWFtKSwgKG5ld19zc3JjX3BhZF9mb3VuZCk6Ci0JICBEbyBub3QgdHJ5IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNsb2NrLXJhdGUgb3Vyc2VsdmVzIGJ1dCBzaW1wbHkgZ2V0IHRoZQotCSAgdmFsdWUgZnJvbSB0aGUgaml0dGVyYnVmZmVyLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3Rfaml0dGVyX2J1ZmZlcl9zaW5rX3BhcnNlX2NhcHMpLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3N5bmMpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgIEFkZCBzb21lIGRlYnVnIGluZm8uCi0JICBQYXNzIHRoZSBjbG9jay1yYXRlIHRvIHRoZSBqaXR0ZXJidWZmZXIuCi0JICBBbHNvIHBhc3MgdGhlIGNsb2NrLXJhdGUgYWxvbmcgd2l0aCB0aGUgcnRwIHRpbWVzdGFtcCB3aGVuIGdldHRpbmcgdGhlCi0JICBzeW5jIHBhcmFtZXRlcnMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzogKGdzdF9ydHBfcHRfZGVtdXhfY2hhaW4pOgotCSAgRml4IHNvbWUgZGVidWcuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiAocnRwX2ppdHRlcl9idWZmZXJfcmVzZXRfc2tldyksCi0JICAoY2FsY3VsYXRlX3NrZXcpLCAocnRwX2ppdHRlcl9idWZmZXJfZ2V0X3N5bmMpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIEtlZXAgdHJhY2sgb2YgY2xvY2stcmF0ZSBjaGFuZ2VzIGFuZCByZXR1cm4gdGhlIGNsb2NrLXJhdGUgdG9nZXRoZXIgd2l0aAotCSAgdGhlIHJ0cCB0aW1lc3RhbXBzIHVzZWQgZm9yIHN5bmMuCi0JICBEb24ndCB0cnkgdG8gY29uc3RydWN0IHRpbWVzdGFtcHMgd2hlbiB3ZSBoYXZlIG5vIGJhc2VfdGltZS4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChnZXRfY2xvY2tfcmF0ZSk6Ci0JICBSZXF1ZXN0IGEgbmV3IGNsb2NrLXJhdGUgd2hlbiB0aGUgcGF5bG9hZCB0eXBlIGNoYW5nZXMuCi0JICBSZXNldCB0aGUgaml0dGVyIGNhbGN1bGF0aW9uIHdoZW4gdGhlIGNsb2NrLXJhdGUgY2hhbmdlcy4KLQotMjAwOC0xMS0xMyAxNTo0ODo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBTbWFsbCBjbGVhbnVwcyBhbmQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X2ppdHRlcl9idWZmZXJfc2lua19wYXJzZV9jYXBzKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RvcCksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcpLAotCSAgKGNhbGN1bGF0ZV9za2V3KToKLQkgIFNtYWxsIGNsZWFudXBzIGFuZCBzb21lIG1vcmUgZGVidWcgaW5mby4KLQotMjAwOC0xMS0xMCAxNToyNjo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IEFsc28gY29uZmlndXJlIHRoZSBuZXh0IGV4cGVjdGVkIG91dHB1dCBzZXFudW0gd2hlbiB3ZSBnZXQgYSBzZXFudW0tYmFzZSBvbiB0aGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X2ppdHRlcl9idWZmZXJfc2lua19wYXJzZV9jYXBzKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbik6Ci0JICBBbHNvIGNvbmZpZ3VyZSB0aGUgbmV4dCBleHBlY3RlZCBvdXRwdXQgc2VxbnVtIHdoZW4gd2UgZ2V0IGEgc2VxbnVtLWJhc2UKLQkgIG9uIHRoZSBjYXBzLgotCi0yMDA4LTExLTA0IDEyOjQyOjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2Fsc2FzcGRpZi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FtcndiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXBleHNpbmsvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hcnRzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXJ0c2QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb2ZpbGUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYnoyL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2RhdWRpby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NlbHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kYzEzOTQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kaXJhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RpcmVjdGZiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGl2eC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2R0cy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2ZhYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9mYWFkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZ3NtL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaGVybWVzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaXZvcmJpcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qcDJrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGFkc3BhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGNzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGliZmFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xpYm1tcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXBlZzJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tcGxleC9NYWtlZmlsZS5hbToKLQkgICogZXh0L211c2VwYWNrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXVzaWNicmFpbnovTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9teXRodHYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uYXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uZW9uL01ha2VmaWxlLmFtOgotCSAgKiBleHQvb2ZhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcG9seXAvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9yZXNpbmR2ZC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NkbC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Nob3V0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc25hcHNob3QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zbmRmaWxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291bmR0b3VjaC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NwYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3N3ZmRlYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Rhcmtpbi9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RoZW9yYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RpbWlkaXR5L01ha2VmaWxlLmFtOgotCSAgKiBleHQvdHdvbGFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3gyNjQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC94aW5lL01ha2VmaWxlLmFtOgotCSAgKiBleHQveHZpZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2FwcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2RzaG93L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYWlmZnBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXBwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9idWZmZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXllci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NkeGFwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NoYXJ0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY29sb3JzcGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RjY3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2R2ZHNwdS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Zlc3RpdmFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmlsdGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmxhY3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ2FtZXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9oMjY0cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9saWJyZmIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9taXhtYXRyaXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tb2RwbHVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZzFzeXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnNHZpZGVvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnZGVtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndHNtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndmlkZW9wYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L212ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L25zZi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L251dmRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvb3ZlcmxheS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGNhcHBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGxheW9uZGVtYW5kL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcmF3cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZWFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRqcGVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NjYWxldGVtcG8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZWxlY3Rvci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aHdhdmUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVlZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NwZWV4cmVzYW1wbGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdGVyZW8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdWJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC90dGEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92YmlkZWMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2Ryb3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpcnR1YWxkdWIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92bW5jL01ha2VmaWxlLmFtOgotCSAgKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvYWNtZW5jL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvY2Ryb20vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd2RlY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kdmIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9keHIzL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZmJkZXYvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3M0L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvcWNhbS9NYWtlZmlsZS5hbToKLQkgICogc3lzL3F0d3JhcHBlci9NYWtlZmlsZS5hbToKLQkgICogc3lzL3ZjZC9NYWtlZmlsZS5hbToKLQkgICogc3lzL3dpbmluZXQvTWFrZWZpbGUuYW06Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0KLTIwMDgtMTAtMTYgMTM6MDU6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBGaXggcHJvYmxlbSB3aXRoIHVzaW5nIHRoZSBvdXRwdXQgc2VxbnVtIGNvdW50ZXIgdG8gY2hlY2sgZm9yIGlucHV0IHNlcW51bSBkaXNjby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9qaXR0ZXJfYnVmZmVyX3NpbmtfcGFyc2VfY2FwcyksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoX3N0YXJ0KSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RvcCksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKToKLQkgIEZpeCBwcm9ibGVtIHdpdGggdXNpbmcgdGhlIG91dHB1dCBzZXFudW0gY291bnRlciB0byBjaGVjayBmb3IgaW5wdXQKLQkgIHNlcW51bSBkaXNjb250aW51aXRpZXMuCi0JICBJbXByb3ZlIGdhcCBkZXRlY3Rpb24gYW5kIHJlY292ZXJ5LCByZXNldCBhbmQgZmx1c2ggdGhlIGppdHRlcmJ1ZmZlciBvbgotCSAgc2VxbnVtIHJlc3RhcnQuIEZpeGVzICM1NTY1MjAuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiAocnRwX2ppdHRlcl9idWZmZXJfaW5zZXJ0KToKLQkgIEZpeCB3cm9uZyBHX0xJS0VMWS4KLQotMjAwOC0xMC0xNiAwOTo1MToyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiBJbnN0YWxsIGV2ZW50IGhhbmRsZXIgb24gdGhlIHJ0Y3Bfc3JjIHBhZCwgbWFrZSBMQVRFTkNZIGV2ZW50IHJldHVybgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydGNwX3NyYyksIChjcmVhdGVfc2VuZF9ydGNwX3NyYyk6Ci0JICBJbnN0YWxsIGV2ZW50IGhhbmRsZXIgb24gdGhlIHJ0Y3Bfc3JjIHBhZCwgbWFrZSBMQVRFTkNZIGV2ZW50IHJldHVybgotCSAgVFJVRS4KLQotMjAwOC0xMC0wNyAxODo1NDo0MSArMDAwMCAgSMOldmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLW1hcnNoYWwubGlzdDogQWRkIG1hcnNoYWxsZXIgZm9yIG5ldyBhY3Rpb24gc2lnbmFsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSMOldmFyZCBHcmFmZiA8aGF2YXJkIGRvdCBncmFmZiBhdCB0YW5kYmVyZyBkb3QgY29tPgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSAgQWRkIG1hcnNoYWxsZXIgZm9yIG5ldyBhY3Rpb24gc2lnbmFsLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2dldF9pbnRlcm5hbF9zZXNzaW9uKSwKLQkgIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBBZGQgYWN0aW9uIHNpZ25hbCB0byByZXRyaWV2ZSB0aGUgaW50ZXJuYWwgUlRQU2Vzc2lvbiBvYmplY3QuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBfc2Vzc2lvbl9yZWxlYXNlX3BhZCk6Ci0JICBBZGQgcHJvcGVydHkgdG8gYWNjZXNzIHRoZSBpbnRlcm5hbCBSVFBTZXNzaW9uIG9iamVjdC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAoY2hlY2tfY29sbGlzaW9uKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgQWRkIGFjdGlvbiBzaWduYWwgdG8gcmV0cmlldmUgYW4gUlRQU291cmNlIG9iamVjdCBieSBTU1JDLgotCSAgU2VlICM1NTUzOTYuCi0KLTIwMDgtMTAtMDcgMTE6MzM6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBSZWxlYXNlIHBhZHMgb2YgdGhlIHNlc3Npb24gbWFuYWdlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGZpbmRfc2Vzc2lvbl9ieV9wYWQpLAotCSAgKGZyZWVfc2Vzc2lvbiksIChnc3RfcnRwX2Jpbl9kaXNwb3NlKSwgKHJlbW92ZV9yZWN2X3J0cCksCi0JICAocmVtb3ZlX3JlY3ZfcnRjcCksIChyZW1vdmVfc2VuZF9ydHApLCAocmVtb3ZlX3J0Y3ApLAotCSAgKGdzdF9ydHBfYmluX3JlbGVhc2VfcGFkKToKLQkgIFJlbGVhc2UgcGFkcyBvZiB0aGUgc2Vzc2lvbiBtYW5hZ2VyLgotCSAgU3RhcnQgaW1wbGVtZW50aW5nIHJlbGVhc2luZyBwYWRzIG9mIGdzdHJ0cGJpbi4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAocmVtb3ZlX3JlY3ZfcnRwX3NpbmspLAotCSAgKHJlbW92ZV9yZWN2X3J0Y3Bfc2luayksIChyZW1vdmVfc2VuZF9ydHBfc2luayksCi0JICAocmVtb3ZlX3NlbmRfcnRjcF9zcmMpLCAoZ3N0X3J0cF9zZXNzaW9uX3JlbGVhc2VfcGFkKToKLQkgIEltcGxlbWVudCByZWxlYXNpbmcgcGFkcyBpbiBnc3RydHBzZXNzaW9uLgotCi0yMDA4LTEwLTA3IDEwOjAyOjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogT25seSB1cGRhdGUgdGhlIHNlcW51bS1iYXNlIHdoZW4gaXQgd2FzIG5vdCBhbHJlYWR5IGNvbmZpZ3VyZWQgZm9yIHRoZSBzdHJlYW1zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9qaXR0ZXJfYnVmZmVyX3NpbmtfcGFyc2VfY2Fwcyk6Ci0JICBPbmx5IHVwZGF0ZSB0aGUgc2VxbnVtLWJhc2Ugd2hlbiBpdCB3YXMgbm90IGFscmVhZHkgY29uZmlndXJlZCBmb3IgdGhlCi0JICBzdHJlYW1zLgotCi0yMDA4LTA5LTMwIDE1OjA4OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IFJlZiB0aGUgcnRwc291cmNlIG9iamVjdCBiZWZvcmUgd2UgcmVsZWFzZSB0aGUgc2Vzc2lvbiBsb2NrIHdoZW4gd2UgZW1pdCB0aGUgc2lnbmFscy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChvbl9uZXdfc3NyYyksIChvbl9zc3JjX2NvbGxpc2lvbiksCi0JICAob25fc3NyY192YWxpZGF0ZWQpLCAob25fc3NyY19hY3RpdmUpLCAob25fc3NyY19zZGVzKSwKLQkgIChvbl9ieWVfc3NyYyksIChvbl9ieWVfdGltZW91dCksIChvbl90aW1lb3V0KSwgKG9uX3NlbmRlcl90aW1lb3V0KToKLQkgIFJlZiB0aGUgcnRwc291cmNlIG9iamVjdCBiZWZvcmUgd2UgcmVsZWFzZSB0aGUgc2Vzc2lvbiBsb2NrIHdoZW4gd2UgZW1pdAotCSAgdGhlIHNpZ25hbHMuCi0KLTIwMDgtMDktMjMgMTg6MTM6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogRml4IHNvbWUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKHJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCksCi0JICAocnRwX2ppdHRlcl9idWZmZXJfZ2V0X3N5bmMpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChvbl9zZW5kZXJfdGltZW91dCksCi0JICAoc2Vzc2lvbl9jbGVhbnVwKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6Ci0JICBGaXggc29tZSBkb2NzLgotCi0yMDA4LTA5LTE3IDEzOjU5OjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIG9uIE9TL1gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmM6IChqYWNrX3Byb2Nlc3NfY2IpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKGNhbGN1bGF0ZV9za2V3KToKLQkgIEZpeCBjb21waWxlciB3YXJuaW5ncyBvbiBPUy9YCi0KLTIwMDgtMDktMTMgMDE6Mzc6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBEbyBub3QgdHJ5IHRvIGFkanVzdCB0aGUgb2Zmc2V0IG9mIHN0cmVhbXMgZm9yIHdoaWNoIHdlIGhhdmUgbm90IHlldCBzZWVuIGFuIFNSIHBhY2tldC4gQS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoY3JlYXRlX3Nlc3Npb24pLAotCSAgKGdzdF9ydHBfYmluX2Fzc29jaWF0ZSksIChnc3RfcnRwX2Jpbl9zeW5jX2NoYWluKToKLQkgIERvIG5vdCB0cnkgdG8gYWRqdXN0IHRoZSBvZmZzZXQgb2Ygc3RyZWFtcyBmb3Igd2hpY2ggd2UgaGF2ZSBub3QgeWV0Ci0JICBzZWVuIGFuIFNSIHBhY2tldC4gQXZvaWRzIGxhcmdlIHRzLW9mZnNldHMgaW4gc29tZSBjYXNlcy4KLQotMjAwOC0wOS0wNSAxMzo1MjozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLio6IEFkZCBzaWduYWwgdG8gbm90aWZ5IGxpc3RlbmVycyB3aGVuIGEgc2VuZGVyIGJlY29tZXMgYSByZWNlaXZlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKG9uX3NlbmRlcl90aW1lb3V0KSwKLQkgIChjcmVhdGVfc2Vzc2lvbiksIChnc3RfcnRwX2Jpbl9hc3NvY2lhdGUpLAotCSAgKGdzdF9ydHBfYmluX3N5bmNfY2hhaW4pLCAoZ3N0X3J0cF9iaW5fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9iaW5fcmVxdWVzdF9uZXdfcGFkKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICBBZGQgc2lnbmFsIHRvIG5vdGlmeSBsaXN0ZW5lcnMgd2hlbiBhIHNlbmRlciBiZWNvbWVzIGEgcmVjZWl2ZXIuCi0JICBUd2VhayBsaXAtc3luYyBjb2RlLCBkb24ndCBzdG9yZSBvdXIgb3duIGNvcHkgb2YgdGhlIHRzLW9mZnNldCBvZiB0aGUKLQkgIGppdHRlcmJ1ZmZlciwgZG9uJ3QgYWRqdXN0IHN5bmMgaWYgdGhlIGNoYW5nZSBpcyBsZXNzIHRoYW4gNG1zZWMuCi0JICBHZXQgdGhlIFJUUCB0aW1lc3RhbXAgPC0+IEdTdHJlYW1lciB0aW1lc3RhbXAgcmVsYXRpb24gZGlyZWN0bHkgZnJvbQotCSAgdGhlIGppdHRlcmJ1ZmZlciBpbnN0ZWFkIG9mIG91ciBpbmFjY3VyYXRlIHZlcnNpb24gZnJvbSB0aGUgc291cmNlLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfc3luYyk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5oOgotCSAgQWRkIEdfTElLRUxZIG1hY3JvcywgdXNlIGdsb2JhbCBkZWZpbmVzIGZvciBtYXggcGFja2V0IHJlb3JkZXIgYW5kCi0JICBkcm9wb3V0cy4KLQkgIFJlc2V0IHRoZSBqaXR0ZXJidWZmZXIgY2xvY2sgc2tldyBkZXRlY3Rpb24gd2hlbiBwYWNrZXRzIHNlcW51bXMgYXJlCi0JICBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAob25fc2VuZGVyX3RpbWVvdXQpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwgKGdzdF9ydHBfc2Vzc2lvbl9pbml0KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5oOgotCSAgQWRkIHNlbmRlciB0aW1lb3V0IHNpZ25hbC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6IChydHBfaml0dGVyX2J1ZmZlcl9yZXNldF9za2V3KSwKLQkgIChjYWxjdWxhdGVfc2tldyksIChydHBfaml0dGVyX2J1ZmZlcl9pbnNlcnQpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9zeW5jKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBBZGQgc29tZSBHX0xJS0VMWSBtYWNyb3MuCi0JICBLZWVwIHRyYWNrIG9mIHRoZSBleHRlbmRlZCBSVFAgdGltZXN0YW1wIHNvIHRoYXQgd2UgY2FuIHJlcG9ydCB0aGUgUlRQCi0JICB0aW1lc3RhbXAgPC0+IEdTdHJlYW1lciB0aW1lc3RhbXAgcmVsYXRpb24gZm9yIGxpcC1zeW5jLgotCSAgUmVtb3ZlIHNlcnZlciB0aW1lc3RhbXAgZ2FwIGRldGVjdGlvbiBjb2RlLCB0aGUgc2VydmVyIGNhbiBzb21ldGltZXMKLQkgIG1ha2UgYSBodWdlIGdhcCBpbiB0aW1lc3RhbXBzICh0YWxrIHNwdXJ0cywuLi4pIHNlZSAjNTQ5Nzc0LgotCSAgRGV0ZWN0IHRpbWV0YW1wIHdlaXJkbmVzcyBpbnN0ZWFkIGJ5IG9ic2VydmluZyB0aGUgc2VuZGVyL3JlY2VpdmVyCi0JICB0aW1lc3RhbXAgcmVsYXRpb24gYW5kIHJlc3luYyBpZiBpdCBjaGFuZ2VzIG1vcmUgdGhhbiAxIHNlY29uZC4KLQkgIEFkZCBtZXRob2QgdG8gcmVwb3J0IGFib3V0IHRoZSBjdXJyZW50IHJ0cCA8LT4gZ3N0IHRpbWVzdGFtcCByZWxhdGlvbgotCSAgd2hpY2ggaXMgbmVlZGVkIGZvciBsaXAtc3luYy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAob25fc2VuZGVyX3RpbWVvdXQpLCAoY2hlY2tfY29sbGlzaW9uKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc3IpLAotCSAgKHNlc3Npb25fY2xlYW51cCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIEFkZCBzZW5kZXIgdGltZW91dCBzaWduYWwuCi0JICBSZW1vdmUgaW5hY2N1cmF0ZSBydHAgPC0+IGdzdCB0aW1lc3RhbXAgcmVsYXRpb24gY29kZSwgdGhlCi0JICBqaXR0ZXJidWZmZXIgY2FuIG5vdyBkbyBhbiBhY2N1cmF0ZSByZXBvcnRpbmcgYWJvdXQgdGhpcy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX2luaXQpLAotCSAgKHJ0cF9zb3VyY2VfdXBkYXRlX2NhcHMpLCAoY2FsY3VsYXRlX2ppdHRlciksCi0JICAocnRwX3NvdXJjZV9wcm9jZXNzX3J0cCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgUmVtb3ZlIGluYWNjdXJhdGUgcnRwIDwtPiBnc3QgdGltZXN0YW1wIHJlbGF0aW9uIGNvZGUuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBEZWZpbmUgZ2xvYmFsIG1heC1yZW9yZGVyIGFuZCBtYXgtZHJvcG91dCBjb25zdGFudHMgZm9yIHVzZSBpbiB2YXJpb3VzCi0JICBzdWJzeXN0ZW1zLgotCi0yMDA4LTA4LTI4IDE1OjIxOjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IFNlbmQgRU9TIHdoZW4gdGhlIHNlc3Npb24gb2JqZWN0IGluc3RydWN0cyB1cyB0by4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fc2VuZF9ydGNwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayk6Ci0JICBTZW5kIEVPUyB3aGVuIHRoZSBzZXNzaW9uIG9iamVjdCBpbnN0cnVjdHMgdXMgdG8uCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBNYWtlIGl0IHBvc3NpYmxlIGZvciB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHRvIGluc3RydWN0IHVzIHRvIHNlbmQgRU9TLiBXZQotCSAgY3VycmVudGx5IHdpbGwgRU9TIHdoZW4gdGhlIHNlc3Npb24gaXMgYSBzZW5kZXIgYW5kIHdoZW4gdGhlIHNlbmRlciBwYXJ0Ci0JICBnb2VzIEVPUy4gVGhpcyBpcyBub3QgZW50aXJlbHkgY29ycmVjdCBiZWhhdmlvdXIgYmVjYXVzZSB0aGUgc2Vzc2lvbgotCSAgY291bGQgc3RpbGwgcGFydGljaXBhdGUgYXMgYSByZWNlaXZlci4KLQkgIEZpeGVzICM1NDk0MDkuCi0KLTIwMDgtMDgtMTMgMTQ6MzE6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBSZXNldCBydHAgdGltZXN0YW1wIGludGVycG9sbGF0aW9uIHdoZW4gd2UgZGV0ZWN0IGEgZ2FwIHdoZW4gdGhlIGNsb2NrX2Jhc2UgY2hhbmdlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2Fzc29jaWF0ZSksCi0JICAoZ3N0X3J0cF9iaW5fc3luY19jaGFpbiksIChuZXdfc3NyY19wYWRfZm91bmQpOgotCSAgUmVzZXQgcnRwIHRpbWVzdGFtcCBpbnRlcnBvbGxhdGlvbiB3aGVuIHdlIGRldGVjdCBhIGdhcCB3aGVuIHRoZQotCSAgY2xvY2tfYmFzZSBjaGFuZ2VkLgotCSAgRG9uJ3QgdHJ5IHRvIGFkanVzdCB0aGUgdHMtb2Zmc2V0IHdoZW4gaXQncyB0b28gYmlnICg+IDNzZWNvbmRzKQotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fc2V0X3NzcmMpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JICBBZGQgbWV0aG9kIHRvIHNldCBzZXNzaW9uIFNTUkMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKGNoZWNrX2NvbGxpc2lvbiksCi0JICAocnRwX3Nlc3Npb25fc2V0X2ludGVybmFsX3NzcmMpLCAocnRwX3Nlc3Npb25fZ2V0X2ludGVybmFsX3NzcmMpLAotCSAgKHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBBZGRlZCBkZWJ1Z2dpbmcgZm9yIHRoZSBjb2xsaXNpb24gY2hlY2tzLgotCSAgQWRkIG1ldGhvZCB0byBjaGFuZ2UgdGhlIGludGVybmFsIFNTUkMgb2YgdGhlIHNlc3Npb24uCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9wcm9jZXNzX3J0cCk6Ci0JICBSZXNldCB0aGUgY2xvY2sgYmFzZSB3aGVuIHdlIGRldGVjdCBsYXJnZSBqdW1wcyBpbiB0aGUgc2VxbnVtcy4KLQotMjAwOC0wOC0xMSAwNzoyMDoxNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogUHJpbnQgdGhlIHBhZC1uYW1lIGluIGRlYnVnIGxvZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIFByaW50IHRoZSBwYWQtbmFtZSBpbiBkZWJ1ZyBsb2cuCi0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvZ3N0ZHNob3dhdWRpb3NyYy5jOgotCSAgKiBzeXMvZHNob3dzcmN3cmFwcGVyL2dzdGRzaG93dmlkZW9zcmMuYzoKLQkgIFVzZSAiLSIgaW5zdGVhZCBvZiAiXyIgaW4gcHJvcGVydHkgbmFtZXMuIENhbiB3ZSBjYWxsIHRoZW0ganVzdAotCSAgImRldmljZSIgbGlrZSBldmVyeXdoZXJlIGVsc2U/Ci0KLTIwMDgtMDgtMDUgMDk6NDI6NTMgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBNYWtlIHRoZSBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUgYmVmb3JlIGluc2VydGluZyBpdCBpbiB0aGUgaml0dGVyYnVmZmVyIGJlY2F1cy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbiksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICBNYWtlIHRoZSBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUgYmVmb3JlIGluc2VydGluZyBpdCBpbiB0aGUKLQkgIGppdHRlcmJ1ZmZlciBiZWNhdXNlIHRoZSBqaXR0ZXJidWZmZXIgd2lsbCBtb2RpZnkgdGhlIHRpbWVzdGFtcHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgVXBkYXRlIG1ldGhvZCBjb21tZW50IGFib3V0IHJlcXVpcmluZyB3cml0YWJsZSBtZXRhZGF0YSBvbiBidWZmZXJzLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9wcm9jZXNzX3NyKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3ApOgotCSAgTWFrZSB0aGUgUlRDUCBidWZmZXIgbWV0YWRhdGEgd3JpdGFibGUgYmVjYXVzZSB3ZSB3YW50IHRvIG1vZGlmeSB0aGUKLQkgIG1ldGFkYXRhLgotCSAgRml4ZXMgIzU0NjMxMi4KLQotMjAwOC0wOC0wNSAwOTowMDo1MCArMDAwMCAgSMOldmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IEZpeCBkZWJ1ZyBieSBsb2dnaW5nIHRoZSByaWdodCBzZXFudW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBIw6V2YXJkIEdyYWZmIDxoYXZhcmQgZG90IGdyYWZmIGF0IHRhbmRiZXJnIGRvdCBjb20+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbik6Ci0JICBGaXggZGVidWcgYnkgbG9nZ2luZyB0aGUgcmlnaHQgc2VxbnVtLgotCi0yMDA4LTA4LTA1IDA4OjU4OjI3ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogUmVsZWFzZSBsb2NrIGJlZm9yZSBlbWl0dGluZyB0aGUgcmVxdWVzdC1wdC1tYXAgc2lnbmFsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ2V0X3B0X21hcCk6Ci0JICBSZWxlYXNlIGxvY2sgYmVmb3JlIGVtaXR0aW5nIHRoZSByZXF1ZXN0LXB0LW1hcCBzaWduYWwuCi0JICBGaXhlcyAjNTQzNDgwLgotCi0yMDA4LTA3LTAzIDE0OjQ0OjUxICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBDb3JyZWN0ZWQgYSB0eXBvIChpbnRlcnBvbGxhdGUgLT4gaW50ZXJwb2xhdGUpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIENoYW5nZUxvZzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9nZXRfbmV3X3NyKToKLQkgIENvcnJlY3RlZCBhIHR5cG8gKGludGVycG9sbGF0ZSAtPiBpbnRlcnBvbGF0ZSkuCi0KLTIwMDgtMDctMDMgMTQ6MzE6MTAgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IENoYW5nZWQgc29tZSBHU1RfREVCVUcoKSB0byBHU1RfTE9HKCkgdG8gcmVkdWNlIHRoZSBzcGFtIHdoZW4gYSBwaXBlbGluZSBpcyBydW5uaW5nIG5vcm1hbGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRwKSwgKGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3ApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zeW5jX3J0Y3ApLCAoZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3JlY3ZfcnRwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydGNwKSwgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9zZW5kX3J0cCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHNvdXJjZV9wdXNoX3J0cCksCi0JICAocnRwX3Nlc3Npb25fc2VuZF9ydHApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHB1c2hfcGFja2V0KSwgKGNhbGN1bGF0ZV9qaXR0ZXIpLAotCSAgKHJ0cF9zb3VyY2VfcHJvY2Vzc19ydHApLCAocnRwX3NvdXJjZV9zZW5kX3J0cCk6Ci0JICBDaGFuZ2VkIHNvbWUgR1NUX0RFQlVHKCkgdG8gR1NUX0xPRygpIHRvIHJlZHVjZSB0aGUgc3BhbSB3aGVuIGEKLQkgIHBpcGVsaW5lIGlzIHJ1bm5pbmcgbm9ybWFsbHkuCi0KLTIwMDgtMDctMDMgMTM6NDc6MTkgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IERvIG5vdCBtaXggdGhlIHVzZSBvZiBnX2dldF9jdXJyZW50X3RpbWUoKSB3aXRoIGdzdF9jbG9ja19nZXRfdGltZSgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZmluYWxpemUpLCAocnRjcF90aHJlYWQpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9yZWN2X3J0cCksIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydGNwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3NlbmRfcnRwKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAoY2hlY2tfY29sbGlzaW9uKSwKLQkgICh1cGRhdGVfYXJyaXZhbF9zdGF0cyksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19ydGNwKSwgKHJ0cF9zZXNzaW9uX3NlbmRfcnRwKSwKLQkgIChydHBfc2Vzc2lvbl9zZW5kX2J5ZV9sb2NrZWQpLCAocnRwX3Nlc3Npb25fc2VuZF9ieWUpLAotCSAgKHJ0cF9zZXNzaW9uX25leHRfdGltZW91dCksIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpLCAoc2Vzc2lvbl9jbGVhbnVwKSwKLQkgIChpc19ydGNwX3RpbWUpLCAocnRwX3Nlc3Npb25fb25fdGltZW91dCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIERvIG5vdCBtaXggdGhlIHVzZSBvZiBnX2dldF9jdXJyZW50X3RpbWUoKSB3aXRoIGdzdF9jbG9ja19nZXRfdGltZSgpLgotCi0yMDA4LTA2LTE2IDA3OjMwOjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpbmFsIHJvdW5kIG9mIGRvYyB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuYzoKLQkgICogZ3N0L3NwZWV4cmVzYW1wbGUvZ3N0c3BlZXhyZXNhbXBsZS5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9hbmFseXNlLmM6Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9nc3R2aWRlb2RldGVjdC5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9tYXJrLmM6Ci0JICAqIHN5cy9kdmIvZ3N0ZHZic3JjLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtbWl4ZXIuYzoKLQkgICogc3lzL29zczQvb3NzNC1zaW5rLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtc291cmNlLmM6Ci0JICAqIHN5cy93aW5pbmV0L2dzdHdpbmluZXRzcmMuYzoKLQkgIEZpbmFsIHJvdW5kIG9mIGRvYyB1cGRhdGVzLgotCi0yMDA4LTA2LTE2IDA3OjAzOjU4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC86IE1vcmUgZG9jIHVwZGF0ZXMuIE1vcmUgeHJlZnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgICogZ3N0L3NkcC9nc3RzZHBkZW11eC5jOgotCSAgTW9yZSBkb2MgdXBkYXRlcy4gTW9yZSB4cmVmcy4KLQotMjAwOC0wNi0xMiAxNDo0OToxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBEbyBub3QgdXNlIHNob3J0X2Rlc2NyaXB0aW9uIGluIHNlY3Rpb24gZG9jcyBmb3IgZWxlbWVudHMuIFdlIGV4dHJhY3QgdGhlbSBmcm9tIGVsZW1lbnQgZGV0YWlscyBhbmQgdGhlcmUgd2lsbCBiZSB3YXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZGMxMzk0L2dzdGRjMTM5NC5jOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNkZWMuYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSAgKiBleHQvbWV0YWRhdGEvZ3N0bWV0YWRhdGFkZW11eC5jOgotCSAgKiBleHQvbXl0aHR2L2dzdG15dGh0dnNyYy5jOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOgotCSAgKiBnc3QtbGlicy9nc3QvYXBwL2dzdGFwcHNpbmsuYzoKLQkgICogZ3N0L2JheWVyL2dzdGJheWVyMnJnYi5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgICogZ3N0L3Jhd3BhcnNlL2dzdGF1ZGlvcGFyc2UuYzoKLQkgICogZ3N0L3Jhd3BhcnNlL2dzdHZpZGVvcGFyc2UuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgKiBnc3Qvc2VsZWN0b3IvZ3N0aW5wdXRzZWxlY3Rvci5jOgotCSAgKiBnc3Qvc2VsZWN0b3IvZ3N0b3V0cHV0c2VsZWN0b3IuYzoKLQkgICogZ3N0L3ZpZGVvc2lnbmFsL2dzdHZpZGVvYW5hbHlzZS5jOgotCSAgKiBnc3QvdmlkZW9zaWduYWwvZ3N0dmlkZW9kZXRlY3QuYzoKLQkgICogZ3N0L3ZpZGVvc2lnbmFsL2dzdHZpZGVvbWFyay5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LW1peGVyLmM6Ci0JICAqIHN5cy9vc3M0L29zczQtc2luay5jOgotCSAgKiBzeXMvb3NzNC9vc3M0LXNvdXJjZS5jOgotCSAgRG8gbm90IHVzZSBzaG9ydF9kZXNjcmlwdGlvbiBpbiBzZWN0aW9uIGRvY3MgZm9yIGVsZW1lbnRzLiBXZSBleHRyYWN0Ci0JICB0aGVtIGZyb20gZWxlbWVudCBkZXRhaWxzIGFuZCB0aGVyZSB3aWxsIGJlIHdhcm5pbmdzIGlmIHRoZXkgZGlmZmVyLgotCSAgQWxzbyBmaXhpbmcgdXAgdGhlIENoYW5nZUxvZyBvcmRlci4KLQotMjAwOC0wNi0wNiAxMzowMTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEZpeCBkZWFkbG9jayB3aGVuIHNodXR0aW5nIGRvd24sIHVzZSBhIG5ldyBsb2NrIGluc3RlYWQgdG8gcHJvcGVybHkgc2h1dGRvd24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9pbml0KSwKLQkgIChnc3RfcnRwX2Jpbl9maW5hbGl6ZSksIChnc3RfcnRwX2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgRml4IGRlYWRsb2NrIHdoZW4gc2h1dHRpbmcgZG93biwgdXNlIGEgbmV3IGxvY2sgaW5zdGVhZCB0byBwcm9wZXJseQotCSAgc2h1dGRvd24uCi0KLTIwMDgtMDUtMjcgMTY6NDg6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBCcmVhayBvdXQgb2YgY2FsbGJhY2tzIHdoZW4gd2UgYXJlIHNodXR0aW5nIGRvd24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICAoZ3N0X3J0cF9iaW5fcHJvcGFnYXRlX3Byb3BlcnR5X3RvX2ppdHRlcmJ1ZmZlciksCi0JICAoZ3N0X3J0cF9iaW5fY2hhbmdlX3N0YXRlKSwgKG5ld19wYXlsb2FkX2ZvdW5kKSwKLQkgIChuZXdfc3NyY19wYWRfZm91bmQpOgotCSAgQnJlYWsgb3V0IG9mIGNhbGxiYWNrcyB3aGVuIHdlIGFyZSBzaHV0dGluZyBkb3duLgotCSAgTWFrZSBzdXJlIG5vIHN0YXRlIGNoYW5nZXMgY2FuIGhhcHBlbiB3aGVuIHdlIHJlY29uZmlndXJlLgotCi0yMDA4LTA1LTI2IDEwOjA5OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogV2hlbiBjaGVja2luZyB0aGUgc2VxbnVtLCByZXNldCB0aGUgaml0dGVyYnVmZmVyIGlmIHRoZSBnYXAgaXMgdG9vIGJpZywgd2UgbmVlZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgV2hlbiBjaGVja2luZyB0aGUgc2VxbnVtLCByZXNldCB0aGUgaml0dGVyYnVmZmVyIGlmIHRoZSBnYXAgaXMgdG9vIGJpZywKLQkgIHdlIG5lZWQgdG8gZG8gdGhpcyBzbyB0aGF0IHdlIGNhbiBiZXR0ZXIgaGFuZGxlIGEgcmVzdGFydGVkIHNvdXJjZS4KLQkgIEZpeCBzb21lIGNvbW1lbnRzLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKGNhbGN1bGF0ZV9za2V3KSwKLQkgIChydHBfaml0dGVyX2J1ZmZlcl9pbnNlcnQpOgotCSAgVHdlYWsgdGhlIHNrZXcgcmVzeW5jIGRpZmYuCi0JICBVc2Ugb3VyIHdvcmtpbmcgc2VxbnVtIGNvbXBhcmUgZnVuY3Rpb24gaW4gLWJhc2UuCi0JICBSZXdvcmsgdGhlIGppdHRlcmJ1ZmZlciBpbnNlcnQgY29kZSB0byBtYWtlIGl0IGNsZWFyZXIgYW5kIG1vcmUKLQkgIHBlcmZvcm1hbnQgYnkgb25seSByZXRyaWV2aW5nIHRoZSBzZXFudW0gb2YgdGhlIGlucHV0IGJ1ZmZlciBvbmNlIGFuZCBieQotCSAgYWRkaW5nIHNvbWUgR19MSUtFTFkgY29tcGlsZXIgaGludHMuCi0JICBJbXByb3ZlIGRlYnVnZ2luZyBmb3IgZHVwbGljYXRlIHBhY2tldHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9wcm9jZXNzX3J0cCk6Ci0JICBGaXggYSBjb21tZW50LCB3ZSBkb24ndCBkbyBza2V3IGNvcnJlY3Rpb24gaGVyZS4uCi0KLTIwMDgtMDUtMjYgMTA6MDA6MjQgKzAwMDAgIEjDpXZhcmQgR3JhZmYgPGhhdmFyZC5ncmFmZkB0YW5kYmVyZy5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBQcm9wYWdhdGUgdGhlIGRvLWxvc3QgYW5kIGxhdGVuY3kgcHJvcGVydGllcyB0byB0aGUgaml0dGVyYnVmZmVycyB3aGVuIHRoZXkgYXJlIGNoYW5nZWQgby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSMOldmFyZCBHcmFmZiA8aGF2YXJkIGRvdCBncmFmZiBhdCB0YW5kYmVyZyBkb3QgY29tPgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIChnc3RfcnRwX2Jpbl9wcm9wYWdhdGVfcHJvcGVydHlfdG9faml0dGVyYnVmZmVyKSwKLQkgIChnc3RfcnRwX2Jpbl9zZXRfcHJvcGVydHkpOgotCSAgUHJvcGFnYXRlIHRoZSBkby1sb3N0IGFuZCBsYXRlbmN5IHByb3BlcnRpZXMgdG8gdGhlIGppdHRlcmJ1ZmZlcnMgd2hlbgotCSAgdGhleSBhcmUgY2hhbmdlZCBvbiBydHBiaW4uCi0KLTIwMDgtMDUtMjYgMDk6NTc6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvbid0IHVzZSBfZ3N0X3BhZCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL3N3aXRjaC9zd2l0Y2hlci5jOiAoc3dpdGNoX3RpbWVyKToKLQkgICogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzogKGdzdF9yZ192b2x1bWVfaW5pdCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5jOiAoY3JlYXRlX3N0cmVhbSk6Ci0JICAqIGdzdC9zZHAvZ3N0c2RwZGVtdXguYzogKGdzdF9zZHBfZGVtdXhfc3RyZWFtX2NvbmZpZ3VyZV91ZHApLAotCSAgKGdzdF9zZHBfZGVtdXhfc3RyZWFtX2NvbmZpZ3VyZV91ZHBfc2luayk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHBhZF9hZGRlZF9zZXR1cF9kYXRhX2NoZWNrX2Zsb2F0MzJfOGNoX2NiKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOiAoc2VuZF9lb3NfZXZlbnQpLAotCSAgKHNlbmRfdGFnX2V2ZW50KToKLQkgIERvbid0IHVzZSBfZ3N0X3BhZCgpLgotCi0yMDA4LTA1LTE2IDE5OjU2OjMwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9NYWtlZmlsZS5hbTogRG9uJ3QgYXR0ZW1wdCB0byBidWlsZCBwbHVnaW4gZG9jcyB3aGVuIHRoZXkncmUgZGlzYWJsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9NYWtlZmlsZS5hbToKLQkgIERvbid0IGF0dGVtcHQgdG8gYnVpbGQgcGx1Z2luIGRvY3Mgd2hlbiB0aGV5J3JlIGRpc2FibGVkLgotCSAgKiBnc3QvYmF5ZXIvTWFrZWZpbGUuYW06Ci0JICBBZGQgbGliZ3N0dmlkZW8gdG8gdGhlIGxpbmsuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmFtOgotCSAgRml4IGxpbmsgb3JkZXIsIGFuZCBtb3ZlIExJQlMgdGhpbmdzIHRvIF9MSUJTCi0KLTIwMDgtMDUtMTQgMjE6MDI6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBTaW1wbHkgZHJvcCBiYWQgUlRQIHBhY2tldHMgd2l0aCBhIHdhcm5pbmcgaW5zdGVhZCBvZiBqdXN0IHBvc3RpbmcgYW4gZXJyb3IgYW5kIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbik6Ci0JICBTaW1wbHkgZHJvcCBiYWQgUlRQIHBhY2tldHMgd2l0aCBhIHdhcm5pbmcgaW5zdGVhZCBvZiBqdXN0IHBvc3RpbmcgYW4KLQkgIGVycm9yIGFuZCBzdG9wcGluZy4gVGhpcyBpcyBhIHBlcmZlY3RseSByZWNvdmVyYWJsZSBldmVudCBhbmQgd2UgZG9uJ3QKLQkgIGZvcmNlIHBlb3BsZSB0byB1c2UgYW4gcnRwYmluIHRvIGZpbHRlciBvdXQgYmFkIHBhY2tldHMgZmlyc3QuCi0KLTIwMDgtMDUtMTMgMDk6MDY6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBBY3R1YWxseSBhZGQgdGhlIGRvLWxvc3QgcHJvcGVydHkgdG8gdGhlIG9iamVjdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpOgotCSAgQWN0dWFsbHkgYWRkIHRoZSBkby1sb3N0IHByb3BlcnR5IHRvIHRoZSBvYmplY3QuCi0KLTIwMDgtMDUtMTIgMTg6NDM6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBBdm9pZCB3YWl0aW5nIGZvciBhIG5lZ2F0aXZlIChodWdlKSBkdXJhdGlvbiB3aGVuIHRoZSBsYXN0IHBhY2tldCBoYXMgYSBsb3dlciB0aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKToKLQkgIEF2b2lkIHdhaXRpbmcgZm9yIGEgbmVnYXRpdmUgKGh1Z2UpIGR1cmF0aW9uIHdoZW4gdGhlIGxhc3QgcGFja2V0IGhhcyBhCi0JICBsb3dlciB0aW1lc3RhbXAgdGhhbiB0aGUgY3VycmVudCBwYWNrZXQuCi0KLTIwMDgtMDUtMTIgMTQ6Mjg6MDkgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IE1ha2Ugc3VyZSB0byB1bnJlZiB0aGUgcnRwc2Vzc2lvbiByZXR1cm5lZCBieSBnc3RfcGFkX2dldF9wYXJlbnQoKSB0byBwcmV2ZW50IGEgbWVtb3IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fcXVlcnlfc2VuZF9ydGNwX3NyYyk6Ci0JICBNYWtlIHN1cmUgdG8gdW5yZWYgdGhlIHJ0cHNlc3Npb24gcmV0dXJuZWQgYnkgZ3N0X3BhZF9nZXRfcGFyZW50KCkgdG8KLQkgIHByZXZlbnQgYSBtZW1vcnkgbGVhay4KLQotMjAwOC0wNS0xMiAxNDoxMjowOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBJbml0aWFsaXNlIHdpdGggR1NUX0NMT0NLX1RJTUVfTk9ORSB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKToKLQkgIEluaXRpYWxpc2Ugd2l0aCBHU1RfQ0xPQ0tfVElNRV9OT05FIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCi0KLTIwMDgtMDUtMDkgMDc6NDE6NTggKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogTWFrZSBzdXJlIHRvIHVucmVmIHRoZSBjYXBzIHVzZWQgYnkgUlRQU291cmNlIHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHJ0cF9zb3VyY2VfZmluYWxpemUpOgotCSAgTWFrZSBzdXJlIHRvIHVucmVmIHRoZSBjYXBzIHVzZWQgYnkgUlRQU291cmNlIHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhay4KLQotMjAwOC0wNS0wOCAwOTo0MzozMyArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiBVbmxvY2sgdGhlIHNlc3Npb24gbG9jayB3aGVuIGNhbGxpbmcgb25lIG9mIG91ciBjYWxsYmFja3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAoc291cmNlX2Nsb2NrX3JhdGUpLAotCSAgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllKSwgKHJ0cF9zZXNzaW9uX3NlbmRfYnllX2xvY2tlZCk6Ci0JICBVbmxvY2sgdGhlIHNlc3Npb24gbG9jayB3aGVuIGNhbGxpbmcgb25lIG9mIG91ciBjYWxsYmFja3MuCi0JICBGaXhlcyAjNTMyMDExLgotCi0yMDA4LTA1LTA4IDA2OjIzOjM5ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogU2VuZCBSVFAgQllFIGNvbW1hbmQgb24gRU9TLiBGaXhlcyBidWcgIzUzMTk1NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayk6Ci0JICBTZW5kIFJUUCBCWUUgY29tbWFuZCBvbiBFT1MuIEZpeGVzIGJ1ZyAjNTMxOTU1LgotCi0yMDA4LTA0LTI1IDExOjMyOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uKjogRXhwb3NlIG5ldyBqaXR0ZXJidWZmZXIgcHJvcGVydHkgaW4gcnRwYmluIHRvby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNyZWF0ZV9zdHJlYW0pLCAoZ3N0X3J0cF9iaW5faW5pdCksCi0JICAoZ3N0X3J0cF9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBfYmluX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgRXhwb3NlIG5ldyBqaXR0ZXJidWZmZXIgcHJvcGVydHkgaW4gcnRwYmluIHRvby4KLQotMjAwOC0wNC0yNSAxMToyMjoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IERpc2FibGUgc2VuZGluZyBvdXQgcnRwIHBhY2tldCBsb3N0IGV2ZW50cyBieSBkZWZhdWx0IGFuZCBtYWtlIGEgcHJvcGVydHkgdG8gZW5hLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2luaXQpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfcHJvcGVydHkpOgotCSAgRGlzYWJsZSBzZW5kaW5nIG91dCBydHAgcGFja2V0IGxvc3QgZXZlbnRzIGJ5IGRlZmF1bHQgYW5kIG1ha2UgYQotCSAgcHJvcGVydHkgdG8gZW5hYmUgaXQuIFdlIHdpbGwgbGlrZWx5IGVuYWJsZSBpdCBieSBkZWZhdWx0IHdoZW4gdGhlIGJhc2UKLQkgIGRlcGF5bG9hZGVycyBoYXZlIGEgZGVmYXVsdCBoYW5kbGVyIGZvciB0aGVtIHNvIHRoYXQgd2UgZG9uJ3Qgc2VuZCB0aGVzZQotCSAgZXZlbnRzIGFsbCB0aHJvdWdoIHRoZSBwaXBlbGluZSBmb3Igbm93LgotCi0yMDA4LTA0LTI1IDA5OjM1OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogUmVtb3ZlIHByaXZhdGUgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMgaW4gLWJhc2Ugbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9pbml0KSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9mbHVzaF9zdG9wKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc3JjX2V2ZW50KSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbiksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgUmVtb3ZlIHByaXZhdGUgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMgaW4gLWJhc2Ugbm93LgotCSAgQWRkIHNyYyBldmVudCBoYW5kbGVyLgotCSAgUmV3b3JrIHRoZSBqaXR0ZXJidWZmZXIgcHVzaGluZyBsb29wIHNvIHRoYXQgaXQgY2FuIHF1aWNrbHkgcmVhY3QgdG8KLQkgIGxvc3QgcGFja2V0cyBhbmQgaW5zdHJ1Y3QgdGhlIGRlcGF5bG9hZGVyIG9mIHRoZW0uIFRoaXMgY2FuIHRoZW4gYmUgdXNlZAotCSAgdG8gaW1wbGVtZW50IGVycm9yIGNvbmNlYWxtZW50IGRhdGEuCi0KLTIwMDgtMDQtMjUgMDg6MjE6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogU2V0IHVwIHNvbWUgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb25zIGZvciB0aGUgUlRDUCBhbmQgc3luYyBwYWRzIGJlY2F1c2UgdGhlIGRlZmF1bHRzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIChnc3RfcnRwX3Nlc3Npb25fcXVlcnlfc2VuZF9ydGNwX3NyYyksIChjcmVhdGVfcmVjdl9ydGNwX3NpbmspLAotCSAgKGNyZWF0ZV9zZW5kX3J0Y3Bfc3JjKToKLQkgIFNldCB1cCBzb21lIGludGVybmFsIGxpbmtzIGZ1bmN0aW9ucyBmb3IgdGhlIFJUQ1AgYW5kIHN5bmMgcGFkcyBiZWNhdXNlCi0JICB0aGUgZGVmYXVsdHMgYXJlIHJlYWxseSBub3QgY29ycmVjdC4KLQkgIEltcGxlbWVudCBhIHF1ZXJ5IGhhbmRsZXIgZm9yIHRoZSBSVENQIHNyYyBwYWQsIG1vc3RseSB0byBjb3JyZWN0bHkKLQkgIHJlcG9ydCBhYm91dCB0aGUgbGF0ZW5jeS4KLQotMjAwOC0wNC0yNSAwODoxNTo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBBbHNvIGtlZXAgdHJhY2sgb2YgdGhlIGZpcnN0IGJ1ZmZlciB0aW1lc3RhbXAgdG9nZXRoZXIgd2l0aCB0aGUgZmlyc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2Fzc29jaWF0ZSksCi0JICAoZ3N0X3J0cF9iaW5fc3luY19jaGFpbik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHVwZGF0ZV9hcnJpdmFsX3N0YXRzKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NyKSwgKHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHJ0cF9zb3VyY2VfaW5pdCksCi0JICAoY2FsY3VsYXRlX2ppdHRlcik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgQWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBmaXJzdCBidWZmZXIgdGltZXN0YW1wIHRvZ2V0aGVyIHdpdGggdGhlIGZpcnN0Ci0JICBSVFAgdGltZXN0YW1wIGFzIHRoZXkgYm90aCBhcmUgbmVlZGVkIHRvIGNvbnN0cnVjdCB0aGUgdGltaW5nIG9mCi0JICBvdXRnb2luZyBwYWNrZXRzIGluIHRoZSBqaXR0ZXJidWZmZXIgYW5kIGFyZSB0aGVyZWZvcmUgYWxzbyBuZWVkZWQgdG8KLQkgIG1hbmFnZSBsaXAtc3luYy4gVGhpcyBmaXhlcyBsaXAtc3luYyBpZiB0aGUgZmlyc3QgUlRQIHBhY2tldHMgYXJyaXZlCi0JICB3aXRoIGEgd2lsZGx5IGRpZmZlcmVudCBnYXAuCi0KLTIwMDgtMDQtMjEgMDg6MjY6MzcgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBSZWYgY2FwcyB3aGVuIGluc2VydGluZyBpbnRvIHRoZSBjYWNoZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNyZWF0ZV9zZXNzaW9uKSwgKGdldF9wdF9tYXApLAotCSAgKG5ld19zc3JjX3BhZF9mb3VuZCk6Ci0JICBSZWYgY2FwcyB3aGVuIGluc2VydGluZyBpbnRvIHRoZSBjYWNoZS4KLQkgIERvbid0IGxlYWsgcGFkcy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldF9jbG9ja19yYXRlKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfcXVlcnkpOgotCSAgQXZvaWQgYSBjYXBzIGxlYWsuCi0JICBEb24ndCBsZWFrIHJlZmNvdW50IGluIHF1ZXJ5LgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6IChnc3RfcnRwX3B0X2RlbXV4X2dldF9jYXBzKSwKLQkgIChnc3RfcnRwX3B0X2RlbXV4X2NoYWluKToKLQkgIEF2b2lkIGNhcHMgbGVha3MuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKHNvdXJjZV9nZXRfc2Rlc19zdHJ1Y3R1cmUpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9pbml0KSwgKHJldHVybl90cnVlKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2xlYXJfcHRfbWFwKSwgKGdzdF9ydHBfc2Vzc2lvbl9jYWNoZV9jYXBzKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2xvY2tfcmF0ZSk6Ci0JICBSZWYgY2FwcyB3aGVuIGluc2VydGluZyBpbnRvIHRoZSBjYWNoZS4KLQkgIEZpeCBzb21lIG1vcmUgY2FwcyBsZWFrcy4gRml4ZXMgIzUyODI0NS4KLQotMjAwOC0wNC0xNyAwNzozMTo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBVbnNldCBHVmFsdWVzIGFmdGVyIGdfc2lnbmFsX2VtaXR2IHNvIHRoYXQgd2UgYXZvaWQgYSByZWZjb3VudCBsZWFrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ2V0X3B0X21hcCksIChmcmVlX2NsaWVudCksCi0JICAoZ3N0X3J0cF9iaW5fYXNzb2NpYXRlKSwgKGdzdF9ydHBfYmluX2dldF9mcmVlX3BhZF9uYW1lKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldF9jbG9ja19yYXRlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9nZXRfY2Fwcyk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbG9ja19yYXRlKToKLQkgIFVuc2V0IEdWYWx1ZXMgYWZ0ZXIgZ19zaWduYWxfZW1pdHYgc28gdGhhdCB3ZSBhdm9pZCBhIHJlZmNvdW50IGxlYWsuCi0JICBEb24ndCBsZWFrIGEgcGFkbmFtZS4KLQkgIERvbid0IGxlYWsgY2xpZW50IHN0cmVhbXMgbGlzdC4KLQkgIExvY2sgcnRwYmluIHdoZW4gYXNzb2NpYXRpbmcgc3RyZWFtcy4gRml4ZXMgIzUyODI0NS4KLQotMjAwOC0wNC0wOSAyMjoyNzo1MCArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogQXZvaWQgbGVha2luZyBwYWRzIGluIHRoZSBSVFAgbWFuYWdlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGZyZWVfc2Vzc2lvbik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9maW5hbGl6ZSk6Ci0JICBBdm9pZCBsZWFraW5nIHBhZHMgaW4gdGhlIFJUUCBtYW5hZ2VyLgotCi0yMDA4LTAzLTExIDEyOjQwOjU4ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLio6IEltcGxlbWVudCBjb2xsaXNpb24gYW5kIGxvb3AgZGV0ZWN0aW9uIGluIHJ0cG1hbmFnZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAoZmluZF9hZGRfY29uZmxpY3RpbmdfYWRkcmVzc2VzKSwKLQkgIChjaGVja19jb2xsaXNpb24pLCAob2J0YWluX3NvdXJjZSksIChydHBfc2Vzc2lvbl9jcmVhdGVfbmV3X3NzcmMpLAotCSAgKHJ0cF9zZXNzaW9uX2NyZWF0ZV9zb3VyY2UpLCAocnRwX3Nlc3Npb25fcHJvY2Vzc19ydHApLAotCSAgKHJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc3IpLCAocnRwX3Nlc3Npb25fcHJvY2Vzc19yciksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19zZGVzKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllKSwKLQkgIChydHBfc2Vzc2lvbl9zZW5kX2J5ZV9sb2NrZWQpLCAocnRwX3Nlc3Npb25fc2VuZF9ieWUpLAotCSAgKHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBJbXBsZW1lbnQgY29sbGlzaW9uIGFuZCBsb29wIGRldGVjdGlvbiBpbiBydHBtYW5hZ2VyLgotCSAgRml4ZXMgIzUyMDYyNi4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX3Jlc2V0KSwKLQkgIChydHBfc291cmNlX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIEFkZCBtZXRob2QgdG8gcmVzZXQgc3RhdHMuCi0KLTIwMDgtMDMtMTEgMTE6MzY6MDMgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogQXZvaWQgYSBkZWFkbG9jayB3aGVuIGpvaW5pbmcgdGhlIFJUQ1AgdGhyZWFkIGluIFBBVVNFRCBiZWNhdXNlIGl0IG1pZ2h0IGJlIGJsb2NrZWQgZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzICA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9pbml0KSwKLQkgIChydGNwX3RocmVhZCksIChzdGFydF9ydGNwX3RocmVhZCksIChzdG9wX3J0Y3BfdGhyZWFkKSwKLQkgIChqb2luX3J0Y3BfdGhyZWFkKSwgKGdzdF9ydHBfc2Vzc2lvbl9jaGFuZ2Vfc3RhdGUpOgotCSAgQXZvaWQgYSBkZWFkbG9jayB3aGVuIGpvaW5pbmcgdGhlIFJUQ1AgdGhyZWFkIGluIFBBVVNFRCBiZWNhdXNlIGl0IG1pZ2h0Ci0JICBiZSBibG9ja2VkIGRvd25zdHJlYW0uIEFsc28gYXZvaWQgc3Bhd25pbmcgbXVsdGlwbGUgcnRjcCB0aHJlYWRzLgotCSAgRml4ZXMgIzUyMDg5NC4KLQotMjAwOC0wMy0xMSAxMDo0MzozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JICBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogRG9uJ3QgdHJ5IHRvIHJlc2V0IHRoZSBjbG9jayBza2V3IHdoZW4gd2UgaGF2ZSBubyB0aW1lc3RhbXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKGNhbGN1bGF0ZV9za2V3KToKLQkgIERvbid0IHRyeSB0byByZXNldCB0aGUgY2xvY2sgc2tldyB3aGVuIHdlIGhhdmUgbm8gdGltZXN0YW1wcy4KLQkgIEZpeGVzICM1MTkwMDUuCi0KLTIwMDgtMDItMjAgMDk6MzM6MjUgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBGaXggc21hbGwgbWVtb3J5IGxlYWssIGxlYWtpbmcgY2Fwcy4gRml4ZXMgI2J1ZyA1MTc1NzEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChuZXdfc3NyY19wYWRfZm91bmQpOgotCSAgRml4IHNtYWxsIG1lbW9yeSBsZWFrLCBsZWFraW5nIGNhcHMuIEZpeGVzICNidWcgNTE3NTcxLgotCi0yMDA4LTAyLTE0IDE2OjI1OjUxICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogSWdub3JlIHN0cmVhbXMgdGhhdCBkaWQgbm90IHJlY2VpdmUgYW4gU1IgcGFja2V0IHdoZW4gZG9pbmcgc3luY2hyb25pc2F0aW9uLiBGaXhlcyAjNTE2MTYwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9hc3NvY2lhdGUpOgotCSAgSWdub3JlIHN0cmVhbXMgdGhhdCBkaWQgbm90IHJlY2VpdmUgYW4gU1IgcGFja2V0IHdoZW4gZG9pbmcKLQkgIHN5bmNocm9uaXNhdGlvbi4gRml4ZXMgIzUxNjE2MC4KLQotMjAwOC0wMS0yOSAxODo1NzoyNyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IFRyeSB0byBnZXQgdGhlIG5ldyBjbG9jay1yYXRlIGZyb20gdGhlIGJ1ZmZlciBjYXBzIHdoZW4gd2UgcmVjZWl2ZSBhIG5ldyBwYXlsb2FkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlqcyBWZXJtZWlyICA8dGhpanN2ZXJtZWlyIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbik6Ci0JICBUcnkgdG8gZ2V0IHRoZSBuZXcgY2xvY2stcmF0ZSBmcm9tIHRoZSBidWZmZXIgY2FwcyB3aGVuIHdlIHJlY2VpdmUgYSBuZXcKLQkgIHBheWxvYWQgdHlwZSBpbnN0ZWFkIG9mIGFsd2F5cyBmaXJpbmcgdGhlIHNpZ25hbC4gRml4ZXMgIzUxMjc3NC4KLQotMjAwOC0wMS0yNSAxNjo1ODowMCArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEFsc28gaGFuZGxlIGxpcC1zeW5jIHdoZW4gdGhlIGNsb2NrLXJhdGUgaXMgbm90IHByb3ZpZGVkIHdpdGggY2FwcyBidXQgd2l0aCBhIHNpZ25hbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fYXNzb2NpYXRlKSwKLQkgIChjcmVhdGVfc3RyZWFtKSwgKHBheWxvYWRfdHlwZV9jaGFuZ2UpLCAobmV3X3NzcmNfcGFkX2ZvdW5kKToKLQkgIEFsc28gaGFuZGxlIGxpcC1zeW5jIHdoZW4gdGhlIGNsb2NrLXJhdGUgaXMgbm90IHByb3ZpZGVkIHdpdGggY2FwcyBidXQKLQkgIHdpdGggYSBzaWduYWwuCi0KLTIwMDgtMDEtMjUgMTY6MDA6NTIgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogUmVtb3ZlIHRoZSBmaXhlZCBjbG9jay1yYXRlIGZyb20gdGhlIGppdHRlcmJ1ZmZlciBhbmQgZXh0ZW5kIGl0IHNvIHRoYXQgYSBjbG9jay1yYXRlIGNhbiBiZSBwcm92aWRlZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X2ppdHRlcl9idWZmZXJfc2lua19wYXJzZV9jYXBzKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiAoY2FsY3VsYXRlX3NrZXcpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgUmVtb3ZlIHRoZSBmaXhlZCBjbG9jay1yYXRlIGZyb20gdGhlIGppdHRlcmJ1ZmZlciBhbmQgZXh0ZW5kIGl0IHNvIHRoYXQKLQkgIGEgY2xvY2stcmF0ZSBjYW4gYmUgcHJvdmlkZWQgd2l0aCBlYWNoIGJ1ZmZlciBpbnN0ZWFkLiBGaXhlcyAjNTExNjg2LgotCi0yMDA4LTAxLTI1IDE1OjQ5OjU1ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogUmVtb3ZlIG9sZCB1bnVzZWQgdmFyaWFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfaW5pdCksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgUmVtb3ZlIG9sZCB1bnVzZWQgdmFyaWFibGUuCi0JICBUcmFjayBwdCBvbiBpbnB1dCBidWZmZXJzIGFuZCBnZXQgdGhlIGNsb2NrLXJhdGUgd2hlbiBpdCBjaGFuZ2VzLgotCSAgSWdub3JlIHBhY2tldHMgd2l0aCB1bmtub3duIGNsb2NrLXJhdGUuIFNlZSAjNTExNjg2LgotCi0yMDA4LTAxLTI1IDAxOjQ0OjI3ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogRml4IHVucmVmIG9mIGJ1ZmZlciB1c2luZyB0aGUgd3JvbmcgZnVuY3Rpb24uICBGaXhlcyAjNTExOTIwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogRml4IHVucmVmIG9mIGJ1ZmZlciB1c2luZyB0aGUKLQkgIHdyb25nIGZ1bmN0aW9uLiAgRml4ZXMgIzUxMTkyMAotCi0yMDA4LTAxLTExIDE3OjAyOjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IElmIHdlIGZpbmQgdGhlIGNhcHMgaW4gdGhlIGNhY2hlLCB1c2UgaXQgdG8gcGFyc2UgdGhlIGNsb2NrLXJhdGUgaW5zdGVhZCBvZiByZXR1cm5pbmcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fY2xvY2tfcmF0ZSk6Ci0JICBJZiB3ZSBmaW5kIHRoZSBjYXBzIGluIHRoZSBjYWNoZSwgdXNlIGl0IHRvIHBhcnNlIHRoZSBjbG9jay1yYXRlIGluc3RlYWQKLQkgIG9mIHJldHVybmluZyBhbiBlcnJvci4gRml4ZXMgYSBUT0RPIGFzIGZvdW5kIGJ5IFlvdW5lc3MgQWxhb3VpLgotCi0yMDA4LTAxLTExIDE2OjQ1OjU3ICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcnRwbWFuYWdlci86IE1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGRpZmZlcmVudCB1c2VyX2RhdGEgZm9yIGVhY2ggb2YgdGhlIGNhbGxiYWNrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzIGRvdCBhbGFvdWkgYXQgY29sbGFib3JhIGRvdCBjbyBkb3QgdWs+Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbG9ja19yYXRlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fc2V0X2NhbGxiYWNrcyksCi0JICAocnRwX3Nlc3Npb25fc2V0X3Byb2Nlc3NfcnRwX2NhbGxiYWNrKSwKLQkgIChydHBfc2Vzc2lvbl9zZXRfc2VuZF9ydHBfY2FsbGJhY2spLAotCSAgKHJ0cF9zZXNzaW9uX3NldF9zZW5kX3J0Y3BfY2FsbGJhY2spLAotCSAgKHJ0cF9zZXNzaW9uX3NldF9zeW5jX3J0Y3BfY2FsbGJhY2spLAotCSAgKHJ0cF9zZXNzaW9uX3NldF9jbG9ja19yYXRlX2NhbGxiYWNrKSwKLQkgIChydHBfc2Vzc2lvbl9zZXRfcmVjb25zaWRlcl9jYWxsYmFjayksIChzb3VyY2VfcHVzaF9ydHApLAotCSAgKHNvdXJjZV9jbG9ja19yYXRlKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3ApLCAocnRwX3Nlc3Npb25fc2VuZF9ieWUpLAotCSAgKHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBkaWZmZXJlbnQgdXNlcl9kYXRhIGZvciBlYWNoIG9mIHRoZSBjYWxsYmFja3MuCi0JICBGaXhlcyAjNTA4NTg3LgotCi0yMDA4LTAxLTEwIDIwOjU3OjE3ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogRml4IGRvY3VtZW50YXRpb24gZm9yIGxhdGVzdCBwYXRjaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgRml4IGRvY3VtZW50YXRpb24gZm9yIGxhdGVzdCBwYXRjaAotCi0yMDA4LTAxLTEwIDE0OjM0OjMwICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogQWxsb3cgcmVxdWVzdF9uZXdfcGFkIHdpdGggbmFtZSBOVUxMIChidWcgIzUwODUxNSkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzoKLQkgIEFsbG93IHJlcXVlc3RfbmV3X3BhZCB3aXRoIG5hbWUgTlVMTCAoYnVnICM1MDg1MTUpCi0KLTIwMDgtMDEtMDkgMTQ6Mzk6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogRG9uJ3Qgc2V0IGZpeGVkIGNhcHMsIHdlIGNhbiBiYXNpY2FsbHkgZG8gZXZlcnl0aGluZyB0aGUgdXBzdGVhbSBwZWVyIHBhZCBjYW4gcmVuZWdvdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGNyZWF0ZV9zZW5kX3J0cF9zaW5rKToKLQkgIERvbid0IHNldCBmaXhlZCBjYXBzLCB3ZSBjYW4gYmFzaWNhbGx5IGRvIGV2ZXJ5dGhpbmcgdGhlIHVwc3RlYW0gcGVlcgotCSAgcGFkIGNhbiByZW5lZ290aWF0ZSB0by4gRml4ZXMgIzUwNzk0MC4KLQotMjAwOC0wMS0wNCAxODo0Nzo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IERvbid0IHVucmVmIHRoZSBwb3BwZWQgYnVmZmVyIHdoZW4gd2UgZG9uJ3QgaGF2ZSBvd25lcnNoaXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgRG9uJ3QgdW5yZWYgdGhlIHBvcHBlZCBidWZmZXIgd2hlbiB3ZSBkb24ndCBoYXZlIG93bmVyc2hpcC4KLQkgIEZpeGVzICM1MDcwMjAuCi0KLTIwMDctMTItMzEgMTM6MTI6MDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOiBEb24ndCBjbGVhbiB1cCBwYWRzIHdoZW4gZ29pbmcgdG8gUEFVU0VELgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgY2xlYW4gdXAgcGFkcyB3aGVuIGdvaW5nIHRvIFBBVVNFRC4KLQotMjAwNy0xMi0xMiAxNjo1OTowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBDbGVhbiB1cCB0aGUgZHluYW1pYyBwYWRzIHdoZW4gZ29pbmcgdG8gUkVBRFkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9maW5hbGl6ZSksCi0JICAoZ3N0X3J0cF9wdF9kZW11eF9zZXR1cCksIChnc3RfcnRwX3B0X2RlbXV4X3JlbGVhc2UpLAotCSAgKGdzdF9ydHBfcHRfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6IChnc3RfcnRwX3NzcmNfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9kaXNwb3NlKSwgKGdzdF9ydHBfc3NyY19kZW11eF9zcmNfcXVlcnkpLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgQ2xlYW4gdXAgdGhlIGR5bmFtaWMgcGFkcyB3aGVuIGdvaW5nIHRvIFJFQURZLgotCi0yMDA3LTEyLTEyIDEyOjExOjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IEZpeCBzb21lIGxlYWtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fZmluYWxpemUpLAotCSAgKGdzdF9ydHBfYmluX3NldF9zZGVzX3N0cmluZyksIChnc3RfcnRwX2Jpbl9nZXRfc2Rlc19zdHJpbmcpLAotCSAgKGdzdF9ydHBfYmluX2hhbmRsZV9tZXNzYWdlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fZmluYWxpemUpLAotCSAgKHJ0cF9zZXNzaW9uX3NlbmRfYnllKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX2ZpbmFsaXplKToKLQkgIEZpeCBzb21lIGxlYWtzLgotCi0yMDA3LTEyLTEwIDE4OjM2OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IFBvc3QgYSBtZXNzYWdlIHdoZW4gdGhlIFNERVMgaW5mb3IgY2hhbmdlcyBmb3IgYSBzb3VyY2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2Jpbl9oYW5kbGVfbWVzc2FnZSk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKHNvdXJjZV9nZXRfc2Rlc19zdHJ1Y3R1cmUpLAotCSAgKG9uX3NzcmNfc2Rlcyk6Ci0JICBQb3N0IGEgbWVzc2FnZSB3aGVuIHRoZSBTREVTIGluZm9yIGNoYW5nZXMgZm9yIGEgc291cmNlLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgVXBkYXRlIHNvbWUgY29tbWVudHMuCi0KLTIwMDctMTItMTAgMTU6MzQ6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogQWRkIHNpZ25hbCB0byBub3RpZnkgb2YgYW4gU0RFUyBjaGFuZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChvbl9zc3JjX3NkZXMpLCAoY3JlYXRlX3Nlc3Npb24pLAotCSAgKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwY2xpZW50LmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAob25fc3NyY19zZGVzKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksIChnc3RfcnRwX3Nlc3Npb25faW5pdCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2NsYXNzX2luaXQpLAotCSAgKG9uX3NzcmNfc2RlcyksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NkZXMpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIEFkZCBzaWduYWwgdG8gbm90aWZ5IG9mIGFuIFNERVMgY2hhbmdlLgotCSAgRml4IG9iamVjdCB0eXBlIGluIHRoZSBzaWduYWwgY2FsbGJhY2tzLgotCi0yMDA3LTEyLTEwIDE0OjAzOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uKjogRXhwb3NlIFNERVMgaXRlbXMgYXMgcHJvcGVydGllcyBhbmQgY29uZmlndXJlIHRoZSBzZXNzaW9uIG1hbmFnZXJzIHdpdGggdGhlbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNyZWF0ZV9zZXNzaW9uKSwKLQkgIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwgKGdzdF9ydHBfYmluX2luaXQpLCAoc2Rlc190eXBlX3RvX25hbWUpLAotCSAgKGdzdF9ydHBfYmluX3NldF9zZGVzX3N0cmluZyksIChnc3RfcnRwX2Jpbl9nZXRfc2Rlc19zdHJpbmcpLAotCSAgKGdzdF9ydHBfYmluX3NldF9wcm9wZXJ0eSksIChnc3RfcnRwX2Jpbl9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIEV4cG9zZSBTREVTIGl0ZW1zIGFzIHByb3BlcnRpZXMgYW5kIGNvbmZpZ3VyZSB0aGUgc2Vzc2lvbiBtYW5hZ2VycyB3aXRoCi0JICB0aGVtLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHJ0cF9zb3VyY2VfY2xhc3NfaW5pdCksCi0JICAocnRwX3NvdXJjZV9zZXRfcHJvcGVydHkpOgotCSAgRml4IFNTUkMgcHJvcGVydHkuCi0KLTIwMDctMTItMTAgMTE6MDg6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogVXBkYXRlIGNvbW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChjcmVhdGVfc2Vzc2lvbik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOgotCSAgVXBkYXRlIGNvbW1lbnQuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBfc2Vzc2lvbl9nZXRfcHJvcGVydHkpOgotCSAgRGVmaW5lIHNvbWUgR09iamVjdCBwcm9wZXJ0aWVzIHRvIHNldCBTREVTIGFuZCBvdGhlciBjb25maWd1cmF0aW9uLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChydHBfc2Vzc2lvbl9pbml0KSwgKHJ0cF9zZXNzaW9uX2ZpbmFsaXplKSwKLQkgIChydHBfc2Vzc2lvbl9zZXRfcHJvcGVydHkpLCAocnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5KSwKLQkgIChvbl9zc3JjX3NkZXMpLCAocnRwX3Nlc3Npb25fc2V0X2JhbmR3aWR0aCksCi0JICAocnRwX3Nlc3Npb25fZ2V0X2JhbmR3aWR0aCksIChydHBfc2Vzc2lvbl9zZXRfcnRjcF9mcmFjdGlvbiksCi0JICAocnRwX3Nlc3Npb25fZ2V0X3J0Y3BfZnJhY3Rpb24pLCAocnRwX3Nlc3Npb25fc2V0X3NkZXNfc3RyaW5nKSwKLQkgIChydHBfc2Vzc2lvbl9nZXRfc2Rlc19zdHJpbmcpLCAob2J0YWluX3NvdXJjZSksCi0JICAocnRwX3Nlc3Npb25fZ2V0X2ludGVybmFsX3NvdXJjZSksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NkZXMpLAotCSAgKHJ0cF9zZXNzaW9uX3NlbmRfcnRwKSwgKHJ0cF9zZXNzaW9uX25leHRfdGltZW91dCksIChzZXNzaW9uX3NkZXMpLAotCSAgKGlzX3J0Y3BfdGltZSk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIEFkZCBzaWduYWwgd2hlbiBuZXcgU0RFUyBpbmZvciBoYXMgYmVlbiBmb3VuZCBmb3IgYSBzb3VyY2UuCi0JICBDcmVhdGUgcHJvcGVydGllcyBmb3IgU0RFUyBhbmQgb3RoZXIgaW5mby4KLQkgIFNpbXBsaWZ5IHRoZSBTREVTIEFQSS4KLQkgIEFkZCBtZXRob2QgZm9yIGdldHRpbmcgdGhlIGludGVybmFsIHNvdXJjZSBvYmplY3Qgb2YgdGhlIHNlc3Npb24uCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9jbGFzc19pbml0KSwKLQkgIChydHBfc291cmNlX2ZpbmFsaXplKSwgKHJ0cF9zb3VyY2Vfc2V0X3Byb3BlcnR5KSwKLQkgIChydHBfc291cmNlX2dldF9wcm9wZXJ0eSksIChydHBfc291cmNlX3NldF9jYWxsYmFja3MpLAotCSAgKHJ0cF9zb3VyY2VfZ2V0X3NzcmMpLCAocnRwX3NvdXJjZV9zZXRfYXNfY3NyYyksCi0JICAocnRwX3NvdXJjZV9pc19hc19jc3JjKSwgKHJ0cF9zb3VyY2VfaXNfYWN0aXZlKSwKLQkgIChydHBfc291cmNlX2lzX3ZhbGlkYXRlZCksIChydHBfc291cmNlX2lzX3NlbmRlciksCi0JICAocnRwX3NvdXJjZV9yZWNlaXZlZF9ieWUpLCAocnRwX3NvdXJjZV9nZXRfYnllX3JlYXNvbiksCi0JICAocnRwX3NvdXJjZV9zZXRfc2RlcyksIChydHBfc291cmNlX3NldF9zZGVzX3N0cmluZyksCi0JICAocnRwX3NvdXJjZV9nZXRfc2RlcyksIChydHBfc291cmNlX2dldF9zZGVzX3N0cmluZyksCi0JICAocnRwX3NvdXJjZV9nZXRfbmV3X3NyKSwgKHJ0cF9zb3VyY2VfZ2V0X25ld19yYik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgQWRkIEdPYmplY3QgcHJvcGVydGllcyBmb3IgdmFyaW91cyB0aGluZ3MuCi0JICBEb24ndCBsZWFrIHRoZSBieWUgcmVhc29uLgotCi0yMDA3LTExLTIyIDA5OjA4OjI3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogaml0dGVyYnVmZmVyIGNhbiBidWZmZXIgYW4gdW5saW1pdGVkIGFtb3VudCBvZiB0aW1lIGFuZCB0aHVzIGhhcyBubyBtYXhfbGF0ZW5jeSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfcXVlcnkpOgotCSAgaml0dGVyYnVmZmVyIGNhbiBidWZmZXIgYW4gdW5saW1pdGVkIGFtb3VudCBvZiB0aW1lIGFuZCB0aHVzIGhhcyBubwotCSAgbWF4X2xhdGVuY3kgcmVxdWlyZW1lbnRzLgotCi0yMDA3LTExLTAyIDIxOjQ1OjM4ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IEZpeCBiYWQgZnVuY3Rpb24gc2lnbmF0dXJlcyAoIzQ5Mjc5OCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgRml4IGJhZCBmdW5jdGlvbiBzaWduYXR1cmVzICgjNDkyNzk4KS4KLQotMjAwNy0xMC0wOSAxMDowMTozOSArMDAwMCAgTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlQHlhaG9vLmZyPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogRml4IG1lbWxlYWsuIEZpeGVzICM0ODQ5OTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGUgYXQgeWFob28gZG90IGZyPgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNyZWF0ZV9zdHJlYW0pLAotCSAgKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpOgotCSAgRml4IG1lbWxlYWsuIEZpeGVzICM0ODQ5OTAuCi0KLTIwMDctMTAtMDggMTc6NDY6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvOiBGaXggY29tcGlsZXIgd2FybmluZ3Mgc2hvd24gYnkgRm9ydGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xpYnJmYi9yZmJidWZmZXIuYzogKHJmYl9idWZmZXJfbmV3X2FuZF9hbGxvYyk6Ci0JICAqIGdzdC9saWJyZmIvcmZiYnVmZmVyLmg6Ci0JICAqIGdzdC9saWJyZmIvcmZiZGVjb2Rlci5jOiAocmZiX3NvY2tldF9nZXRfYnVmZmVyKToKLQkgICogZ3N0L21wZWd2aWRlb3BhcnNlL21wZWd2aWRlb3BhcnNlLmM6IChnc3RfbXBlZ3ZpZGVvcGFyc2VfY2hhaW4pOgotCSAgKiBnc3QvbnNmL25lczY1MDIuYzogKG5lczY1MDJfZXhlY3V0ZSk6Ci0JICAqIGdzdC9yZWFsL2dzdHJlYWxhdWRpb2RlYy5jOiAoZ3N0X3JlYWxfYXVkaW9fZGVjX3NldGNhcHMpOgotCSAgKiBnc3QvcmVhbC9nc3RyZWFsdmlkZW9kZWMuYzogKG9wZW5fbGlicmFyeSk6Ci0JICAqIGdzdC9yZWFsL2dzdHJlYWx2aWRlb2RlYy5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChjcmVhdGVfcmVjdl9ydHBfc2luayksCi0JICAoY3JlYXRlX3JlY3ZfcnRjcF9zaW5rKSwgKGNyZWF0ZV9zZW5kX3J0cF9zaW5rKToKLQkgIEZpeCBjb21waWxlciB3YXJuaW5ncyBzaG93biBieSBGb3J0ZS4KLQotMjAwNy0xMC0wOCAxMDozOTozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEZpeCBjYXBzIHJlZmNvdW50aW5nIGZvciBwYXlsb2FkIG1hcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnZXRfcHRfbWFwKSwKLQkgIChnc3RfcnRwX2Jpbl9jbGVhcl9wdF9tYXApLCAoZ3N0X3J0cF9iaW5fY2xhc3NfaW5pdCk6Ci0JICBGaXggY2FwcyByZWZjb3VudGluZyBmb3IgcGF5bG9hZCBtYXBzLgotCSAgV2hlbiBjbGVhcmluZyBwYXlsb2FkIG1hcHMsIGFsc28gY2xlYXIgc2Vzc2lvbnMgYW5kIHN0cmVhbXMgcGF5bG9hZAotCSAgbWFwcy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9nZXRfY2FwcyksCi0JICAoZ3N0X3J0cF9wdF9kZW11eF9jbGVhcl9wdF9tYXApLCAoZ3N0X3J0cF9wdF9kZW11eF9jaGFpbiksCi0JICAoZmluZF9wYWRfZm9yX3B0KToKLQkgIEltcGxlbWVudCBjbGVhcmluZyB0aGUgcGF5bG9hZCBtYXAuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayk6Ci0JICBGb3J3YXJkIGZsdXNoIGV2ZW50cyBpbnN0ZWFkIG9mIGxlYWtpbmcgdGhlbS4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X3J0Y3Bfc2lua19ldmVudCk6Ci0JICBDb3JyZWN0bHkgcmVmY291bnQgZXZlbnRzIGJlZm9yZSBwdXNoaW5nIHRoZW0uCi0KLTIwMDctMTAtMDUgMTc6MjY6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogV2hlbiByZWNvbnNpZGVyaW5nIFJUQ1AgdGltZW91dHMsIHNldCB0aGUgbmV4dCB0aW1lb3V0IGFnYWluc3QgdGhlIGxhc3QgcmVwb3J0IHRpbWUgaW5zdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX25leHRfdGltZW91dCksCi0JICBXaGVuIHJlY29uc2lkZXJpbmcgUlRDUCB0aW1lb3V0cywgc2V0IHRoZSBuZXh0IHRpbWVvdXQgYWdhaW5zdCB0aGUgbGFzdAotCSAgcmVwb3J0IHRpbWUgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBjbG9jayB0aW1lIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwCi0JICByZWNvbnNpZGVyaW5nIGZvcmV2ZXIuCi0KLTIwMDctMTAtMDUgMTI6MDc6MzcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBPbmx5IHBlZWsgYXQgdGhlIHRhaWwgZWxlbWVudCBpbnN0ZWFkIG9mIHBvcHBpbmcgaXQgb2ZmLCB3aGljaCBhbGxvd3MgdXMgdG8gZ3JlYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbiksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICBPbmx5IHBlZWsgYXQgdGhlIHRhaWwgZWxlbWVudCBpbnN0ZWFkIG9mIHBvcHBpbmcgaXQgb2ZmLCB3aGljaCBhbGxvd3MKLQkgIHVzIHRvIGdyZWF0bHkgc2ltcGxpZnkgdGhpbmdzIHdoZW4gdGhlIHRhaWwgZWxlbWVudCBjaGFuZ2VzLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICAoZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3JlY3ZfcnRwX3NpbmspOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfc2lua19ldmVudCk6Ci0JICBGb3J3YXJkIEZMVVNIIGV2ZW50cyBpbnN0ZWFkIG9mIGxlYWtpbmcgdGhlbS4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6IChydHBfaml0dGVyX2J1ZmZlcl9yZXNldF9za2V3KSwKLQkgIChjYWxjdWxhdGVfc2tldyksIChydHBfaml0dGVyX2J1ZmZlcl9pbnNlcnQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIFJlbW92ZSB0aGUgdGFpbC1jaGFuZ2VkIGNhbGxiYWNrIGluIGZhdm91ciBvZiBhIHNpbXBsZSBib29sZWFuIHdoZW4gd2UKLQkgIGluc2VydCBhIGJ1ZmZlciBpbiB0aGUgcXVldWUuCi0JICBBZGQgbWV0aG9kIHRvIHBlZWsgdGhlIHRhaWwgb2YgdGhlIGJ1ZmZlci4KLQotMjAwNy0xMC0wMiAxMDoyNzo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IFJlbW92ZSBzb21lIG9sZCB1bnVzZWQgdmFyaWFibGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9mbHVzaF9zdGFydCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoX3N0b3ApLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFuZ2Vfc3RhdGUpLCAoYXBwbHlfb2Zmc2V0KSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICBSZW1vdmUgc29tZSBvbGQgdW51c2VkIHZhcmlhYmxlcy4KLQkgIERvbid0IGFkZCB0aGUgbGF0ZW5jeSB0byB0aGUgc2tldyBjb3JyZWN0ZWQgdGltZXN0YW1wLCBsYXRlbmN5IGlzIG9ubHkKLQkgIHVzZWQgdG8gc3luYyBhZ2FpbnN0IHRoZSBjbG9jay4KLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKHJ0cF9qaXR0ZXJfYnVmZmVyX2luaXQpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcpLCAoY2FsY3VsYXRlX3NrZXcpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIEhhbmRsZSBjYXNlIHdoZXJlIHNlcnZlciB0aW1lc3RhbXAgZ29lcyBiYWNrd2FyZHMgb3Igd2lsZGx5IGp1bXBzIGJ5Ci0JICB0ZW1wb3JhcmlseSBwYXVzaW5nIHRoZSBza2V3IGNvcnJlY3Rpb24uCi0JICBJbXByb3ZlIGRlYnVnZ2luZy4KLQotMjAwNy0wOS0yOCAxNDo1MTo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEZpeCBjcmFzaGVyIGluIGRpc3Bvc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChmcmVlX2NsaWVudCk6Ci0JICBGaXggY3Jhc2hlciBpbiBkaXNwb3NlLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKGNhbGN1bGF0ZV9za2V3KToKLQkgIEhhbmRsZSBjYXNlcyB3aGVyZSBpbnB1dCBidWZmZXJzIGhhdmUgbm8gdGltZXN0YW1wcyBzbyB0aGF0IG5vIGNsb2NrCi0JICBza2V3IGNhbiBiZSBjYWxjdWxhdGVkLCBpbiB0aGlzIGNhc2UgaW50ZXJwb2xsYXRlIHRpbWVzdGFtcHMgYmFzZWQgb24KLQkgIHJ0cCB0aW1lc3RhbXAgYW5kIGFzc3VtZSBhIDAgY2xvY2sgc2tldy4KLQotMjAwNy0wOS0yOCAxMToxNzozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IFJlbW92ZSBqaXR0ZXIgY29ycmVjdGlvbiBjb2RlLCBpdCdzIG5vdyBpbiB0aGUgbG93ZXIgbGV2ZWwgb2JqZWN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiAoYXBwbHlfbGF0ZW5jeSksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3F1ZXJ5KToKLQkgIFJlbW92ZSBqaXR0ZXIgY29ycmVjdGlvbiBjb2RlLCBpdCdzIG5vdyBpbiB0aGUgbG93ZXIgbGV2ZWwgb2JqZWN0LgotCSAgVXNlIG5ldyAtY29yZSBtZXRob2QgZm9yIGRvaW5nIGEgcGVlciBxdWVyeS4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmM6IChydHBfaml0dGVyX2J1ZmZlcl9pbml0KSwKLQkgIChjYWxjdWxhdGVfc2tldyksIChydHBfaml0dGVyX2J1ZmZlcl9pbnNlcnQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIE1vdmUgaml0dGVyIGNvcnJlY3Rpb24gdG8gdGhlIGxvd2xldmVsIGppdHRlcmJ1ZmZlci4KLQkgIEluY3JlYXNlIHRoZSBtYXggd2luZG93IHNpemUuCi0JICBXaGVuIGZpbGxpbmcgdGhlIHdpbmRvdywgYWxyZWFkeSBzdGFydCBlc3RpbWF0aW5nIHRoZSBza2V3IHVzaW5nIGEKLQkgIHBhcmFib2xpYyB3ZWlnaHRpbmcgZmFjdG9yIHNvIHRoYXQgd2UgaGF2ZSBhIG11Y2ggYmV0dGVyIHN0YXJ0dXAKLQkgIGJlaGF2aW91ciB0aGF0IGdldHMgbW9yZSBhY2N1cmF0ZSB3aXRoIHRoZSBtb3JlIHNhbXBsZXMgd2UgaGF2ZS4KLQkgIEluY3JlYXNlIHRoZSBkZWZhdWx0IHdlaWdodGluZyBmYWN0b3IgZm9yIHRoZSBzdGVhZHkgc3RhdGUgdG8gZ2V0Ci0JICBzbW9vdGhlciB0aW1lc3RhbXBzLgotCi0yMDA3LTA5LTI2IDIwOjA4OjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogRml4IGNsZWFudXAgY3Jhc2hlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2Rpc3Bvc2UpLAotCSAgKGdzdF9ydHBfYmluX2ZpbmFsaXplKToKLQkgIEZpeCBjbGVhbnVwIGNyYXNoZXIuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiAocnRwX2ppdHRlcl9idWZmZXJfaW5pdCksCi0JICAoY2FsY3VsYXRlX3NrZXcpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaDoKLQkgIER5bmFtaWNhbGx5IGFkanVzdCB0aGUgc2tldyBjYWxjdWxhdGlvbiB3aW5kb3cgc28gdGhhdCB3ZSBjYWxjdWxhdGUgaXQKLQkgIG92ZXIgYSBwZXJpb2Qgb2YgYXJvdW5kIDIgc2Vjb25kcy4KLQotMjAwNy0wOS0yMCAxNDozNDo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBBZGQgbm90aWZpY2F0aW9uIG9mIGFjdGl2ZSBTU1JDcyB0byB2YXJpb3VzIFJUUCBlbGVtZW50cy4gRml4ZXMgIzQ3ODU2Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKG9uX3NzcmNfYWN0aXZlKSwgKGNyZWF0ZV9zZXNzaW9uKSwKLQkgIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKG9uX3NzcmNfYWN0aXZlKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksIChnc3RfcnRwX3Nlc3Npb25faW5pdCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3NlbmRfcnRwX3NpbmspOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2NsYXNzX2luaXQpLAotCSAgKG9uX3NzcmNfYWN0aXZlKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfcmIpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBBZGQgbm90aWZpY2F0aW9uIG9mIGFjdGl2ZSBTU1JDcyB0byB2YXJpb3VzIFJUUCBlbGVtZW50cy4gRml4ZXMgIzQ3ODU2Ni4KLQotMjAwNy0wOS0xNyAwMjowMTo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IExpbmsgdG8gdGhlIHJpZ2h0IHBhZHMgcmVnYXJkbGVzcyBvZiB3aGljaCBvbmUgd2FzIGNyZWF0ZWQgZmlyc3QgaW4gdGhlIHNzcmMgZGVtdXhlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKG5ld19zc3JjX3BhZF9mb3VuZCk6Ci0JICBMaW5rIHRvIHRoZSByaWdodCBwYWRzIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggb25lIHdhcyBjcmVhdGVkIGZpcnN0IGluIHRoZQotCSAgc3NyYyBkZW11eGVyLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fcHJvY2Vzc19ydHApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9yZWN2X3J0cCksIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKGNhbGN1bGF0ZV9qaXR0ZXIpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOiAoY3JlYXRlX2RlbXV4X3BhZF9mb3Jfc3NyYyksCi0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X2luaXQpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfc2lua19ldmVudCksCi0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X3J0Y3Bfc2lua19ldmVudCksIChnc3RfcnRwX3NzcmNfZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9ydGNwX2NoYWluKSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfaW50ZXJuYWxfbGlua3MpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguaDoKLQkgIEZpeCByYWNlIGluIGNyZWF0aW5nIHRoZSBSVFAgYW5kIFJUQ1AgcGFkcyB3aGVuIGEgbmV3IFNTUkMgaXMgZGV0ZWN0ZWQuCi0KLTIwMDctMDktMTYgMTk6NDA6MzEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBVc2UgbG9jayB0byBwcm90ZWN0IHZhcmlhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2Jpbl9nZXRfcHJvcGVydHkpOgotCSAgVXNlIGxvY2sgdG8gcHJvdGVjdCB2YXJpYWJsZS4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9qaXR0ZXJfYnVmZmVyX3NpbmtfcGFyc2VfY2FwcyksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLAotCSAgKGNvbnZlcnRfcnRwdGltZV90b19nc3R0aW1lKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKToKLQkgIFJlY29uc3RydWN0IEdTVCB0aW1lc3RhbXAgZnJvbSBSVFAgdGltZXN0YW1wcyBiYXNlZCBvbiBtZWFzdXJlZCBjbG9jawotCSAgc2tldyBhbmQgc3luYyBvZmZzZXQuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiAocnRwX2ppdHRlcl9idWZmZXJfaW5pdCksCi0JICAocnRwX2ppdHRlcl9idWZmZXJfc2V0X3RhaWxfY2hhbmdlZCksCi0JICAocnRwX2ppdHRlcl9idWZmZXJfc2V0X2Nsb2NrX3JhdGUpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9jbG9ja19yYXRlKSwgKGNhbGN1bGF0ZV9za2V3KSwKLQkgIChydHBfaml0dGVyX2J1ZmZlcl9pbnNlcnQpLCAocnRwX2ppdHRlcl9idWZmZXJfcGVlayk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgTWVhc3VyZSBjbG9jayBza2V3LgotCSAgQWRkIGNhbGxiYWNrIHRvIGJlIG5vdGZpZWQgd2hlbiBhIG5ldyBwYWNrZXQgd2FzIGluc2VydGVkIGF0IHRoZSB0YWlsLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHJ0cF9zb3VyY2VfaW5pdCksCi0JICAoY2FsY3VsYXRlX2ppdHRlciksIChydHBfc291cmNlX3NlbmRfcnRwKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBSZW1vdmUgY2xvY2sgc2tldyBkZXRlY3Rpb24sIGl0J3MgbW92ZSB0byB0aGUgaml0dGVyYnVmZmVyIG5vdy4KLQotMjAwNy0wOS0xNSAxODo0ODowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEFsc28gc2V0IE5UUCBiYXNlIHRpbWUgb24gbmV3IHNlc3Npb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoY3JlYXRlX3Nlc3Npb24pOgotCSAgQWxzbyBzZXQgTlRQIGJhc2UgdGltZSBvbiBuZXcgc2Vzc2lvbnMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9xdWVyeSksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldF9wcm9wZXJ0eSk6Ci0JICBVc2UgdGhlIHJpZ2h0IGxvY2sgdG8gcHJvdGVjdCBvdXIgdmFyaWFibGVzLgotCSAgRml4IHNvbWUgY29tbWVudC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOgotCSAgKGdzdF9ydHBfc2Vzc2lvbl9nZXRjYXBzX3NlbmRfcnRwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHApLCAoY3JlYXRlX3NlbmRfcnRwX3NpbmspOgotCSAgSW1wbGVtZW50IGdldGNhcHMgb24gdGhlIHNlbmRlciBzaW5rcGFkIHNvIHRoYXQgcGF5bG9hZGVycyBjYW4gbmVnb3RpYXRlCi0JICB0aGUgcmlnaHQgU1NSQy4KLQotMjAwNy0wOS0xMiAyMToyMzo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBWYXJpb3VzIGxlYWsgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChjcmVhdGVfc2Vzc2lvbiksIChmcmVlX3Nlc3Npb24pLAotCSAgKGdldF9jbGllbnQpLCAoZnJlZV9jbGllbnQpLCAoZ3N0X3J0cF9iaW5fYXNzb2NpYXRlKSwKLQkgIChmcmVlX3N0cmVhbSksIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwgKGdzdF9ydHBfYmluX2Rpc3Bvc2UpLAotCSAgKGdzdF9ydHBfYmluX2ZpbmFsaXplKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9maW5hbGl6ZSk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzogKGdzdF9ydHBfcHRfZGVtdXhfcmVsZWFzZSk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9maW5hbGl6ZSksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eSksIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydHApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9zZW5kX3J0cCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9jbGFzc19pbml0KSwgKGdzdF9ydHBfc3NyY19kZW11eF9kaXNwb3NlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fZmluYWxpemUpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBWYXJpb3VzIGxlYWsgZml4ZXMuCi0KLTIwMDctMDktMTIgMTg6MDQ6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBDYWxjdWxhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgTlRQIGJhc2UgdGltZSBzbyB0aGF0IHdlIGNhbiBnZW5lcmF0ZSBiZXR0ZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNhbGNfbnRwX25zX2Jhc2UpLAotCSAgKGdzdF9ydHBfYmluX2NoYW5nZV9zdGF0ZSksIChuZXdfcGF5bG9hZF9mb3VuZCksIChjcmVhdGVfc2VuZF9ydHApOgotCSAgQ2FsY3VsYXRlIGFuZCBjb25maWd1cmUgdGhlIE5UUCBiYXNlIHRpbWUgc28gdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgYmV0dGVyCi0JICBOVFAgdGltZXMgaW4gU1IgcGFja2V0cy4KLQkgIFNldCBjYXBzIG9uIG5ldyBnaG9zdHBhZC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgQ2xlYW4gZGVidWcgc3RhdGVtZW50LgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2luaXQpLCAoZ3N0X3J0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2dldF9wcm9wZXJ0eSksIChnZXRfY3VycmVudF9udHBfbnNfdGltZSksCi0JICAocnRjcF90aHJlYWQpLCAoZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3JlY3ZfcnRwX3NpbmspLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9pbnRlcm5hbF9saW5rcyksIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydHApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9ldmVudF9zZW5kX3J0cF9zaW5rKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHApLCAoY3JlYXRlX3JlY3ZfcnRwX3NpbmspLAotCSAgKGNyZWF0ZV9zZW5kX3J0cF9zaW5rKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5oOgotCSAgQWRkIG50cC1ucy1iYXNlIHByb3BlcnR5IHRvIGNvbnZlcnQgcnVubmluZ190aW1lIHRvIE5UUCB0aW1lLgotCSAgSGFuZGxlIE5FV1NFR01FTlQgZXZlbnRzIG9uIHNlbmQgYW5kIHJlY3YgUlRQIHBhZHMgc28gdGhhdCB3ZSBjYW4KLQkgIGNhbGN1bGF0ZSB0aGUgcnVubmluZyB0aW1lIGFuZCB0aHVzIE5UUCB0aW1lIG9mIHRoZSBwYWNrZXRzLgotCSAgU2ltcGxpZnkgZ2V0dGluZyB0aGUgY3VycmVudCBOVFAgdGltZSB1c2luZyB0aGUgcGlwZWxpbmUgY2xvY2suCi0JICBJbXBsZW1lbnQgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb25zLgotCSAgVXNlIHRoZSBidWZmZXIgdGltZXN0YW1wIHRvIGNhbGN1bGF0ZSB0aGUgTlRQIHRpbWUgaW5zdGVhZCBvZiB0aGUgY2xvY2suCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOiAoY3JlYXRlX2RlbXV4X3BhZF9mb3Jfc3NyYyksCi0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X2luaXQpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9jaGFpbiksIChnc3RfcnRwX3NzcmNfZGVtdXhfcnRjcF9jaGFpbiksCi0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X2ludGVybmFsX2xpbmtzKSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfc3JjX3F1ZXJ5KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4Lmg6Ci0JICBJbXBsZW1lbnQgaW50ZXJuYWwgbGlua3MgZnVuY3Rpb24uCi0JICBDYWxjdWxhdGUgdGhlIGRpZmYgYmV0d2VlbiBkaWZmZXJlbnQgc3RyZWFtcywgdGhpcyBtaWdodCBiZSB1c2VkIGxhdGVyCi0JICB0byBnZXQgdGhlIGludGVyIHN0cmVhbSBsYXRlbmN5LgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9zZW5kX3J0cCk6Ci0JICBTaW1wbGUgY2xlYW51cC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX2luaXQpLAotCSAgKGNhbGN1bGF0ZV9qaXR0ZXIpLCAocnRwX3NvdXJjZV9zZW5kX3J0cCksIChydHBfc291cmNlX2dldF9uZXdfc3IpOgotCSAgTWFrZSB0aGUgY2xvY2sgc2tldyB3aW5kb3cgYSBsaXR0bGUgYmlnZ2VyLgotCSAgQXBwbHkgdGhlIGNsb2NrIHNrZXcgdG8gYWxsIGJ1ZmZlcnMsIG5vdCBqdXN0IG9uZSB3aXRoIGEgbmV3IHRpbWVzdGFtcC4KLQkgIENhbGN1bGF0ZSBhbmQgZGVidWcgc2VuZGVyIGNsb2NrIGRyaWZ0LgotCSAgVXNlIGV4dGVuZGVkIGxhc3QgdGltZXN0YW1wIHRvIGludGVycG9sbGF0ZSBmb3IgU1IgcmVwb3J0cy4KLQotMjAwNy0wOS0wNCAxNToyMzozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiBNYWtlIGNvbXBpbGVyIGhhcHB5OiBmaXggY29tcGlsYXRpb24gd2l0aCAtV2FsbCAtV2Vycm9yICgjNDczNTYyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6Ci0JICBNYWtlIGNvbXBpbGVyIGhhcHB5OiBmaXggY29tcGlsYXRpb24gd2l0aCAtV2FsbCAtV2Vycm9yCi0JICAoIzQ3MzU2MikuCi0KLTIwMDctMDktMDMgMjE6MTk6MzQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogVXBkYXRlZCBleGFtcGxlIHBpcGVsaW5lcyBpbiBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmxpc3Q6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fZ2V0X2NsaWVudCksCi0JICAoZ3N0X3J0cF9iaW5fYXNzb2NpYXRlKSwgKGdzdF9ydHBfYmluX3N5bmNfY2hhaW4pLCAoY3JlYXRlX3N0cmVhbSksCi0JICAoZ3N0X3J0cF9iaW5faW5pdCksIChjYXBzX2NoYW5nZWQpLCAobmV3X3NzcmNfcGFkX2ZvdW5kKSwKLQkgIChjcmVhdGVfcmVjdl9ydHApLCAoY3JlYXRlX3JlY3ZfcnRjcCksIChjcmVhdGVfc2VuZF9ydHApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIFVwZGF0ZWQgZXhhbXBsZSBwaXBlbGluZXMgaW4gZG9jcy4KLQkgIEhhbmRsZSBzeW5jX3J0Y3AgYnVmZmVycyBmcm9tIHRoZSBTU1JDIGRlbXV4ZXIgdG8gcGVyZm9ybSBsaXAtc3luYy4KLQkgIFNldCB0aGUgZGVmYXVsdCBsYXRlbmN5IGNvcnJlY3RseS4KLQkgIEFkZCBzb21lIG1vcmUgcG9pbnRzIHdoZXJlIHdlIGNhbiBnZXQgY2Fwcy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9qaXR0ZXJfYnVmZmVyX3NpbmtfcGFyc2VfY2FwcyksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3F1ZXJ5KSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3Byb3BlcnR5KToKLQkgIEFkZCB0cy1vZmZzZXQgcHJvcGVydHkgdG8gY29udHJvbCB0aW1lc3RhbXBpbmcuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25faW5pdCksIChnc3RfcnRwX3Nlc3Npb25fc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5KSwgKGdldF9jdXJyZW50X250cF9uc190aW1lKSwKLQkgIChydGNwX3RocmVhZCksIChzdG9wX3J0Y3BfdGhyZWFkKSwgKGdzdF9ydHBfc2Vzc2lvbl9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3ApLCAoZ3N0X3J0cF9zZXNzaW9uX3N5bmNfcnRjcCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2NhY2hlX2NhcHMpLCAoZ3N0X3J0cF9zZXNzaW9uX2Nsb2NrX3JhdGUpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zaW5rX3NldGNhcHMpLCAoZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3JlY3ZfcnRwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3NlbmRfcnRwKSwgKGNyZWF0ZV9yZWN2X3J0cF9zaW5rKSwKLQkgIChjcmVhdGVfcmVjdl9ydGNwX3NpbmspLCAoY3JlYXRlX3NlbmRfcnRwX3NpbmspLAotCSAgKGNyZWF0ZV9zZW5kX3J0Y3Bfc3JjKToKLQkgIFZhcmlvdXMgY2xlYW51cHMuCi0JICBGZWVkIHJ0cHNlc3Npb24gbWFuYWdlciB3aXRoIE5UUCB0aW1lIGJhc2VkIG9uIHBpcGVsaW5lIGNsb2NrIHdoZW4KLQkgIGhhbmRsaW5nIFJUUCBwYWNrZXRzIGFuZCBSVENQIHRpbWVvdXRzLgotCSAgUGVyZm9ybSBhbGwgUlRDUCB3aXRoIHRoZSBzeXN0ZW0gY2xvY2suCi0JICBTZXQgY2FwcyBvbiBSVENQIG91dGdvaW5nIGJ1ZmZlcnMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOiAoZmluZF9kZW11eF9wYWRfZm9yX3NzcmMpLAotCSAgKGNyZWF0ZV9kZW11eF9wYWRfZm9yX3NzcmMpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X2luaXQpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9ydGNwX3NpbmtfZXZlbnQpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X2NoYWluKSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfcnRjcF9jaGFpbik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oOgotCSAgQWxzbyBkZW11eCBSVENQIG1lc3NhZ2VzLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9zZXRfY2FsbGJhY2tzKSwKLQkgICh1cGRhdGVfYXJyaXZhbF9zdGF0cyksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19yYiksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NyKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX3JyKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfcnRjcCksCi0JICAocnRwX3Nlc3Npb25fc2VuZF9ydHApLCAocnRwX3Nlc3Npb25fc2VuZF9ieWUpLAotCSAgKHNlc3Npb25fc3RhcnRfcnRjcCksIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpLCAoc2Vzc2lvbl9jbGVhbnVwKSwKLQkgIChydHBfc2Vzc2lvbl9vbl90aW1lb3V0KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oOgotCSAgUmVtb3ZlIHRoZSBnZXRfdGltZSBjYWxsYmFjaywgdGhlIEdTdHJlYW1lciBwYXJ0IHdpbGwgZmVlZCB1cyB3aXRoCi0JICBlbm91Z2ggdGltaW5nIGluZm9ybWF0aW9uLgotCSAgU3BsaXQgc3luYyB0aW1pbmcgYW5kIFJUQ1AgdGltaW5nIGluZm9ybWF0aW9uLgotCSAgRmFjdG9yIG91dCBjb21tb24gUkIgaGFuZGxpbmcgZm9yIFNSIGFuZCBSUi4KLQkgIFNlbmQgb3V0IFNSIFJUQ1AgcGFja2V0cyBmb3IgbGlwLXN5bmMuCi0JICBNb3ZlIFNSIGFuZCBSUiBwYWNrZXQgaW5mbyBnZW5lcmF0aW9uIHRvIHRoZSBzb3VyY2UuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9pbml0KSwKLQkgIChydHBfc291cmNlX3VwZGF0ZV9jYXBzKSwgKGdldF9jbG9ja19yYXRlKSwgKGNhbGN1bGF0ZV9qaXR0ZXIpLAotCSAgKHJ0cF9zb3VyY2VfcHJvY2Vzc19ydHApLCAocnRwX3NvdXJjZV9zZW5kX3J0cCksCi0JICAocnRwX3NvdXJjZV9wcm9jZXNzX3NyKSwgKHJ0cF9zb3VyY2VfcHJvY2Vzc19yYiksCi0JICAocnRwX3NvdXJjZV9nZXRfbmV3X3NyKSwgKHJ0cF9zb3VyY2VfZ2V0X25ld19yYiksCi0JICAocnRwX3NvdXJjZV9nZXRfbGFzdF9zcik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgVXNlIGNhcHMgb24gaW5jb21taW5nIGJ1ZmZlcnMgdG8gZ2V0IHRpbWluZyBpbmZvcm1hdGlvbiB3aGVuIHRoZXkgYXJlCi0JICB0aGVyZS4KLQkgIENhbGN1bGF0ZSBjbG9jayBzY2V3IG9mIHRoZSByZWNlaXZlciBjb21wYXJlZCB0byB0aGUgc2VuZGVyIGFuZCBhZGp1c3QKLQkgIHRoZSBydHAgdGltZXN0YW1wcy4KLQkgIENhbGN1bGF0ZSB0aGUgcm91bmQgdHJpcCBpbiBzb3VyY2VzLgotCSAgRG8gU1IgYW5kIFJSIGNhbGN1bGF0aW9ucyBpbiB0aGUgc291cmNlLgotCi0yMDA3LTA4LTMxIDE1OjI2OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogVXNlIGV4dGVuZGVkIHRpbWVzdGFtcCB0byByZWxlYXNlIGJ1ZmZlcnMgZnJvbSB0aGUgaml0dGVyYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RvcCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYW5nZV9zdGF0ZSksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICBVc2UgZXh0ZW5kZWQgdGltZXN0YW1wIHRvIHJlbGVhc2UgYnVmZmVycyBmcm9tIHRoZSBqaXR0ZXJidWZmZXIgc28gdGhhdAotCSAgd2UgY2FuIGhhbmRsZSB0aGUgcnRwIHdyYXBhcm91bmQgY29ycmVjdGx5LgotCi0yMDA3LTA4LTI5IDE2OjU2OjI3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogSW1wcm92ZSBDb21tZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICBJbXByb3ZlIENvbW1lbnRzLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChzdG9wX3J0Y3BfdGhyZWFkKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhbmdlX3N0YXRlKSwgKGdzdF9ydHBfc2Vzc2lvbl9wYXJzZV9jYXBzKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2xvY2tfcmF0ZSksIChnc3RfcnRwX3Nlc3Npb25fc2lua19zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayksIChjcmVhdGVfcmVjdl9ydHBfc2luayksCi0JICAoY3JlYXRlX3NlbmRfcnRwX3NpbmspOgotCSAgQWxzbyBwYXJzZSB0aGUgc2luayBjYXBzIGZvciBjbG9jay1yYXRlIGluc3RlYWQgb2Ygb25seSByZWx5aW5nIG9uIHRoZQotCSAgcmVzdWx0IG9mIHRoZSBzaWduYWwuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9zZW5kX3J0cCk6Ci0JICBNYWtlIHN1cmUgd2UgZmV0Y2ggdGhlIGNsb2NrIHJhdGUgZm9yIHBheWxvYWRzIHdlIGFyZSBzZW5kaW5nIG91dCBzbwotCSAgdGhhdCB3ZSBjYW4gdXNlIGl0IGZvciBTUiByZXBvcnRzLgotCi0yMDA3LTA4LTI5IDAxOjIyOjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLio6IERpc3RyaWJ1dGUgc3luY2hyb25pc2F0aW9uIHBhcmFtZXRlcnMgdG8gdGhlIHNlc3Npb24gbWFuYWdlciBzbyB0aGF0IGl0IGNhbiBnZW5lcmF0ZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChzdG9wX3J0Y3BfdGhyZWFkKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfc2VuZF9ydHBfc2luayk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uaDoKLQkgIERpc3RyaWJ1dGUgc3luY2hyb25pc2F0aW9uIHBhcmFtZXRlcnMgdG8gdGhlIHNlc3Npb24gbWFuYWdlciBzbyB0aGF0IGl0Ci0JICBjYW4gZ2VuZXJhdGUgY29ycmVjdCBTUiBwYWNrZXRzIGZvciBsaXAtc3luYy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fc2V0X2Jhc2VfdGltZSksCi0JICAocnRwX3Nlc3Npb25fc2V0X3RpbWVzdGFtcF9zeW5jKSwgKHNlc3Npb25fc3RhcnRfcnRjcCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIEFkZCBtZXRob2RzIGZvciBzZXR0aW5nIHN5bmMgcGFyYW1ldGVycy4KLQkgIFNldCBjb3JyZWN0IFJUUCB0aW1lIGluIFNSIHBhY2tldHMgdXNpbmcgdGhlIHN5bmMgcGFyYW1zLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHJ0cF9zb3VyY2Vfc2VuZF9ydHApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIFJlY29yZCBsYXN0IFJUUCA8LT4gR1NUIHRpbWVzdGFtcCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSB0byBjb252ZXJ0IE5UUAotCSAgdG8gUlRQIHRpbWVzdGFtcHMgaW4gU1IgcGFja2V0cy4KLQotMjAwNy0wOC0yOCAyMDozMDoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEFkZCBzb21lIG1vcmUgYWR2YW5jZWQgZXhhbXBsZSBwaXBlbGluZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9jbGVhcl9wdF9tYXApOgotCSAgQWRkIHNvbWUgbW9yZSBhZHZhbmNlZCBleGFtcGxlIHBpcGVsaW5lcy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAocnRjcF90aHJlYWQpLAotCSAgKHN0b3BfcnRjcF90aHJlYWQpLCAoZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRjcCk6Ci0JICBBZGQgc29tZSBkZWJ1ZyBhbmQgRklYTUUuCi0JICBSZWxlYXNlIExPQ0sgd2hlbiBwZXJmb3JtaW5nIHNlc3Npb24gY2xlYW51cC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAoc2Vzc2lvbl9yZXBvcnRfYmxvY2tzKToKLQkgIEFkZCBzb21lIGRlYnVnLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKGNhbGN1bGF0ZV9qaXR0ZXIpLAotCSAgKHJ0cF9zb3VyY2Vfc2VuZF9ydHApOgotCSAgTWFrZSBzdXJlIHdlIGFsd2F5cyBzZW5kIFJUUCBwYWNrZXRzIHdpdGggdGhlIHNlc3Npb24gU1NSQy4KLQotMjAwNy0wOC0yNyAyMToxNzoyMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IFdoZW4gc3luY2hyb25pemluZyBidWZmZXJzLCB0YWtlIHBlZXIgbGF0ZW5jeSBpbnRvIGFjY291bnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYW5nZV9zdGF0ZSksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3F1ZXJ5KToKLQkgIFdoZW4gc3luY2hyb25pemluZyBidWZmZXJzLCB0YWtlIHBlZXIgbGF0ZW5jeSBpbnRvIGFjY291bnQuCi0JICBEb24ndCB0cnkgdG8gYWRkIG91ciBsYXRlbmN5IHRvIGludmFsaWQgcGVlciBtYXggbGF0ZW5jeSB2YWx1ZXMuCi0KLTIwMDctMDgtMjMgMjE6Mzk6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFJlbmFtZSBhbGwgR3N0UlRQRm9vIHN0cnVjdHMgdG8gR3N0UnRwRm9vIHNvIHRoYXQgR1NUX0JPSUxFUlBMQVRFIHJlZ2lzdGVycyBhIEdUeXBlIHRoYXQncyBkaWZmZXJlbnQgdGhhbiB0aGUgR3N0UlRQRi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuc2lnbmFsczoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwY2xpZW50Lmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4Lmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4Lmg6Ci0JICBSZW5hbWUgYWxsIEdzdFJUUEZvbyBzdHJ1Y3RzIHRvIEdzdFJ0cEZvbyBzbyB0aGF0IEdTVF9CT0lMRVJQTEFURQotCSAgcmVnaXN0ZXJzIGEgR1R5cGUgdGhhdCdzIGRpZmZlcmVudCB0aGFuIHRoZSBHc3RSVFBGb28gdHlwZXMgdGhhdAotCSAgZmFyc2lnaHQgcmVnaXN0ZXJzIChsdWNraWx5IEdUeXBlIG5hbWVzIGFyZSBjYXNlIHNlbnNpdGl2ZSkuIFNob3VsZAotCSAgZmluYWxseSBmaXggIzQzMDY2NC4KLQotMjAwNy0wOC0yMSAxNzoxODoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6IFdoZW4gZHJvcC1vbi1sYXRlbmN5IGlzIHNldCBidXQgd2UgaGF2ZSBubyBsYXRlbmN5IGNvbmZpZ3VyZWQsIGp1c3QgcHVzaCB0aGUgYnVmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2V0X3Byb3BlcnR5KToKLQkgIFdoZW4gZHJvcC1vbi1sYXRlbmN5IGlzIHNldCBidXQgd2UgaGF2ZSBubyBsYXRlbmN5IGNvbmZpZ3VyZWQsIGp1c3QgcHVzaAotCSAgdGhlIGJ1ZmZlciBhcyBmYXN0IGFzIHBvc3NpYmxlLgotCSAgRml4IHR5cG8gaW4gY29tbWVudC4KLQotMjAwNy0wOC0yMSAxNjowNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLio6IEZpeCB1bmRlZmluZWQgb3ZlcmZsb3cgcHJvbmUgdHNfZGlmZiBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChydHBfaml0dGVyX2J1ZmZlcl9nZXRfdHNfZGlmZik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5oOgotCSAgRml4IHVuZGVmaW5lZCBvdmVyZmxvdyBwcm9uZSB0c19kaWZmIGhhbmRsaW5nLgotCi0yMDA3LTA4LTE2IDExOjQwOjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogRml4IEVPUyBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lua19ldmVudCksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKToKLQkgIEZpeCBFT1MgaGFuZGxpbmcuCi0JICBDb252ZXJ0IHNvbWUgREVCVUcgaW50byBXQVJOSU5Hcy4KLQkgIFBhdXNlIHRhc2sgd2hlbiBmbHVzaGluZy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAoZ3N0X3J0cF9zZXNzaW9uX2NsYXNzX2luaXQpLAotCSAgKHJ0Y3BfdGhyZWFkKSwgKGdzdF9ydHBfc2Vzc2lvbl9ldmVudF9yZWN2X3J0Y3Bfc2luayk6Ci0JICBVc2Ugc3lzdGVtIGNsb2NrIGZvciBSVENQIHNlc3Npb24gbWFuYWdlbWVudCB0aW1lb3V0cy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAob25fbmV3X3NzcmMpLCAob25fc3NyY19jb2xsaXNpb24pLAotCSAgKG9uX3NzcmNfdmFsaWRhdGVkKSwgKG9uX2J5ZV9zc3JjKSwgKG9uX2J5ZV90aW1lb3V0KSwgKG9uX3RpbWVvdXQpOgotCSAgUmVsZWFzZSB0aGUgc2Vzc2lvbiBsb2NrIHdoZW4gZW1pdGluZyBzaWduYWxzLgotCi0yMDA3LTA4LTEzIDA2OjE2OjQwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL3J0cGppdHRlcmJ1ZmZlci5jOiBJbmNsdWRlIHN0ZGxpYi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzoKLQkgIEluY2x1ZGUgc3RkbGliLgotCi0yMDA3LTA4LTEwIDE3OjE2OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IFJlbW92ZSBjb21wbGljYXRlZCBhc3luYyBxdWV1ZSBhbmQgcmVwbGFjZSB3aXRoIG1vcmUgc2ltcGxlIGppdHRlcmJ1ZmZlciBjb2RlIHdoaWxlIGFsc28gZml4aW5nIHNvbWUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cG1hbmFnZXIvYXN5bmNfaml0dGVyX3F1ZXVlLmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2FzeW5jX2ppdHRlcl9xdWV1ZS5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYzogKHJ0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX2luaXQpLCAocnRwX2ppdHRlcl9idWZmZXJfZmluYWxpemUpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX25ldyksIChjb21wYXJlX3NlcW51bSksCi0JICAocnRwX2ppdHRlcl9idWZmZXJfaW5zZXJ0KSwgKHJ0cF9qaXR0ZXJfYnVmZmVyX3BvcCksCi0JICAocnRwX2ppdHRlcl9idWZmZXJfZmx1c2gpLCAocnRwX2ppdHRlcl9idWZmZXJfbnVtX3BhY2tldHMpLAotCSAgKHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF90c19kaWZmKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmg6Ci0JICBSZW1vdmUgY29tcGxpY2F0ZWQgYXN5bmMgcXVldWUgYW5kIHJlcGxhY2Ugd2l0aCBtb3JlIHNpbXBsZSBqaXR0ZXJidWZmZXIKLQkgIGNvZGUgd2hpbGUgYWxzbyBmaXhpbmcgc29tZSBidWdzLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKG9uX25ld19zc3JjKSwgKG9uX3NzcmNfY29sbGlzaW9uKSwKLQkgIChvbl9zc3JjX3ZhbGlkYXRlZCksIChvbl9ieWVfc3NyYyksIChvbl9ieWVfdGltZW91dCksIChvbl90aW1lb3V0KSwKLQkgIChjcmVhdGVfc2Vzc2lvbiksIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwgKGNyZWF0ZV9yZWN2X3J0cCksCi0JICAoY3JlYXRlX3NlbmRfcnRwKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9pbml0KSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9kaXNwb3NlKSwKLQkgIChnc3Rfaml0dGVyX2J1ZmZlcl9zaW5rX3BhcnNlX2NhcHMpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9mbHVzaF9zdGFydCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoX3N0b3ApLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaW5rX2V2ZW50KSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbiksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKG9uX25ld19zc3JjKSwKLQkgIChvbl9zc3JjX2NvbGxpc2lvbiksIChvbl9zc3JjX3ZhbGlkYXRlZCksIChvbl9ieWVfc3NyYyksCi0JICAob25fYnllX3RpbWVvdXQpLCAob25fdGltZW91dCksIChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKG9uX2J5ZV9zc3JjKSwgKHNlc3Npb25fY2xlYW51cCk6Ci0JICBVc2UgbmV3IGppdHRlcmJ1ZmZlciBjb2RlLgotCSAgRXhwb3NlIHNvbWUgbmV3IHNpZ25hbHMgaW4gcHJlcGFyYXRpb24gZm9yIGhhbmRsaW5nIEVPUy4KLQotMjAwNy0wNy0xOCAwNzozNTozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBZGQgc3RkbGliIGluY2x1ZGUgKGZyZWUsIGF0b2ksIGV4aXQpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL2FwcC9hcHBzcmNfZXguYzoKLQkgICogZXhhbXBsZXMvc3dpdGNoL3N3aXRjaGVyLmM6Ci0JICAqIGV4dC9uZW9uL2dzdG5lb25odHRwc3JjLmM6Ci0JICAqIGV4dC90aW1pZGl0eS9nc3R3aWxkbWlkaS5jOgotCSAgKiBleHQveDI2NC9nc3R4MjY0ZW5jLmM6Ci0JICAqIGdzdC9tdmUvbXZlYXVkaW9lbmMuYzogKG12ZV9jb21wcmVzc19hdWRpbyk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgKiBzeXMvZHZiL2dzdGR2YnNyYy5jOgotCSAgQWRkIHN0ZGxpYiBpbmNsdWRlIChmcmVlLCBhdG9pLCBleGl0KS4KLQotMjAwNy0wNi0yMiAyMDoyMzoxOCArMDAwMCAgSmVucyBHcmFuc2V1ZXIgPGplbnNnckBnbXgubmV0PgotCi0JICBnc3QvOiBCdWlsZCBmaXhlcyBmb3IgZ2NjLTIuOXggKG5vIG1pZC1ibG9jayB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgZXRjLikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKZW5zIEdyYW5zZXVlciAgPGplbnNnciBhdCBnbXggbmV0PgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuYzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvYXN5bmNfaml0dGVyX3F1ZXVlLmM6Ci0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX3B1c2hfc29ydGVkKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluKToKLQkgICogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfY2hhaW4pOgotCSAgQnVpbGQgZml4ZXMgZm9yIGdjYy0yLjl4IChubyBtaWQtYmxvY2sgdmFyaWFibGUgZGVjbGFyYXRpb25zIGV0Yy4pLgotCSAgRml4ZXMgIzQ1MDE4NS4KLQotMjAwNy0wNS0yOCAxNjozNzo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgUmVuYW1lIGVsZW1lbnRzIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggZmFyc2lnaHQgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSBuYW1lLiBGaXhlcyAjNDMwNjY0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoY3JlYXRlX3Nlc3Npb24pLCAoY3JlYXRlX3N0cmVhbSksCi0JICAoZ3N0X3J0cF9iaW5fY2xhc3NfaW5pdCksIChjcmVhdGVfcmVjdl9ydHApLCAoY3JlYXRlX3JlY3ZfcnRjcCksCi0JICAoY3JlYXRlX3NlbmRfcnRwKSwgKGNyZWF0ZV9ydGNwKSwgKGdzdF9ydHBfYmluX3JlcXVlc3RfbmV3X3BhZCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5jOiAoY3JlYXRlX3N0cmVhbSksCi0JICAoZ3N0X3J0cF9jbGllbnRfcmVxdWVzdF9uZXdfcGFkKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsZWFyX3B0X21hcCksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG1hbmFnZXIuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfbmV3X3BhZCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOgotCSAgUmVuYW1lIGVsZW1lbnRzIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggZmFyc2lnaHQgZWxlbWVudHMgd2l0aCB0aGUgc2FtZQotCSAgbmFtZS4gRml4ZXMgIzQzMDY2NC4KLQotMjAwNy0wNS0yMyAxMzowODo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgRG9jdW1lbnQgc3R1ZmYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwY2xpZW50LmM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2xlYXJfcHRfbWFwKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzogKGdzdF9ydHBfcHRfZGVtdXhfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9wdF9kZW11eF9jbGVhcl9wdF9tYXApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4Lmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChydGNwX3RocmVhZCksIChnc3RfcnRwX3Nlc3Npb25fY2xlYXJfcHRfbWFwKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzoKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfY2xhc3NfaW5pdCk6Ci0JICBEb2N1bWVudCBzdHVmZi4KLQkgIEFkZCBjbGVhci1wdC1tYXAgYWN0aW9uIHNpZ25hbCB3aGVyZSBuZWVkZWQuCi0KLTIwMDctMDUtMTUgMTM6Mjk6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzogV2UgYWx3YXlzIHVzZSBmaXhlZCBjYXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguYzogKGdzdF9ydHBfcHRfZGVtdXhfY2hhaW4pOgotCSAgV2UgYWx3YXlzIHVzZSBmaXhlZCBjYXBzLgotCi0yMDA3LTA1LTE1IDAzOjQ1OjQ1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IGdfaGFzaF90YWJsZV9yZW1vdmVfYWxsKCkgb25seSBleGlzdHMgaW4gMi4xMi4gIFdvcmsgYXJvdW5kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOgotCSAgZ19oYXNoX3RhYmxlX3JlbW92ZV9hbGwoKSBvbmx5IGV4aXN0cyBpbiAyLjEyLiAgV29yayBhcm91bmQuCi0KLTIwMDctMDUtMTQgMTU6Mjg6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2FzeW5jX2ppdHRlcl9xdWV1ZS5jOiBGaXggbGVhayB3aGVuIGZsdXNoaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2FzeW5jX2ppdHRlcl9xdWV1ZS5jOgotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9zZXRfZmx1c2hpbmdfdW5sb2NrZWQpOgotCSAgRml4IGxlYWsgd2hlbiBmbHVzaGluZy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9jbGVhcl9wdF9tYXApLAotCSAgKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIEFkZCBjbGVhci1wdC1tYXAgc2lnbmFsLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RvcCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfZXZlbnQpLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgSW5pdCBjbG9jay1yYXRlIHRvIC0xIHRvIG1hcmsgdW5rbm93IGNsb2NrIHJhdGUuCi0JICBGaXggZmx1c2hpbmcuCi0KLTIwMDctMDUtMTAgMTQ6MDI6MDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jIChnc3RfcXRkZW11eF9tb3ZlX3N0cmVhbSwgZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIsIGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQsIGdzdF9xdGRlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jIChnc3RfcXRkZW11eF9tb3ZlX3N0cmVhbSwKLQkgIGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfaGVhZGVyLCBnc3RfcXRkZW11eF9hY3RpdmF0ZV9zZWdtZW50LAotCSAgZ3N0X3F0ZGVtdXhfcHJlcGFyZV9jdXJyZW50X3NhbXBsZSwgZ3N0X3F0ZGVtdXhfY29tYmluZV9mbG93cywKLQkgIGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUsIGdzdF9xdGRlbXV4X2xvb3AsCi0JICBxdGRlbXV4X3BhcnNlX3NlZ21lbnRzLCBxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmMgKHJ0cF9zZXNzaW9uX2dldF9iYW5kd2lkdGgsCi0JICBydHBfc2Vzc2lvbl9nZXRfcnRjcF9iYW5kd2lkdGgsIHJ0cF9zZXNzaW9uX2dldF9jbmFtZSwKLQkgIHJ0cF9zZXNzaW9uX2dldF9uYW1lLCBydHBfc2Vzc2lvbl9nZXRfZW1haWwsIHJ0cF9zZXNzaW9uX2dldF9waG9uZSwKLQkgIHJ0cF9zZXNzaW9uX2dldF9sb2NhdGlvbiwgcnRwX3Nlc3Npb25fZ2V0X3Rvb2wsCi0JICBydHBfc2Vzc2lvbl9wcm9jZXNzX2J5ZSwgc2Vzc2lvbl9yZXBvcnRfYmxvY2tzKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmMgKHJ0cF9zb3VyY2VfcHJvY2Vzc19ydHAsCi0JICBydHBfc291cmNlX3NlbmRfcnRwLCBydHBfc291cmNlX3Byb2Nlc3Nfc3IsIHJ0cF9zb3VyY2VfcHJvY2Vzc19yYik6Ci0JICBNb3JlIGZvcm1hdCBhcmcgZml4aW5nIChzcG90dGVkIGJ5IEFsaSBTYWJpbCA8YWxpLnNhYmlsQGdtYWlsLmNvbT4pLgotCSAgKiBnc3Qvc3dpdGNoL01ha2VmaWxlLmFtOgotCSAgQWRkIHJlcXVpcmUgbGlicmFyaWVzKHNwb3R0ZWQgYnkgQWxpIFNhYmlsIDxhbGkuc2FiaWxAZ21haWwuY29tPikuCi0KLTIwMDctMDUtMTAgMTI6Mzg6NDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L3J0cG1hbmFnZXIvYXN5bmNfaml0dGVyX3F1ZXVlLmM6Ci0JICBnc3QvcnRwbWFuYWdlci9hc3luY19qaXR0ZXJfcXVldWUuYyAodGFpbF9idWZmZXJfZHVyYXRpb24sIGFzeW5jX2ppdHRlcl9xdWV1ZV9yZWYsIGFzeW5jX2ppdHRlcl9xdWV1ZV9yZWZfdW5sb2NrZWQsIGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9hc3luY19qaXR0ZXJfcXVldWUuYyAodGFpbF9idWZmZXJfZHVyYXRpb24sCi0JICBhc3luY19qaXR0ZXJfcXVldWVfcmVmLCBhc3luY19qaXR0ZXJfcXVldWVfcmVmX3VubG9ja2VkLAotCSAgYXN5bmNfaml0dGVyX3F1ZXVlX3NldF9sb3dfdGhyZXNob2xkLAotCSAgYXN5bmNfaml0dGVyX3F1ZXVlX2xlbmd0aF90c191bml0c191bmxvY2tlZCwKLQkgIGFzeW5jX2ppdHRlcl9xdWV1ZV91bnJlZl9hbmRfdW5sb2NrLCBhc3luY19qaXR0ZXJfcXVldWVfdW5yZWYsCi0JICBhc3luY19qaXR0ZXJfcXVldWVfbG9jaywgYXN5bmNfaml0dGVyX3F1ZXVlX3B1c2gsCi0JICBhc3luY19qaXR0ZXJfcXVldWVfcHVzaF91bmxvY2tlZCwgYXN5bmNfaml0dGVyX3F1ZXVlX3B1c2hfc29ydGVkLAotCSAgYXN5bmNfaml0dGVyX3F1ZXVlX3BvcF9pbnRlcm5fdW5sb2NrZWQsIGFzeW5jX2ppdHRlcl9xdWV1ZV9wb3AsCi0JICBhc3luY19qaXR0ZXJfcXVldWVfcG9wX3VubG9ja2VkLCBhc3luY19qaXR0ZXJfcXVldWVfbGVuZ3RoX3VubG9ja2VkLAotCSAgYXN5bmNfaml0dGVyX3F1ZXVlX3NldF9mbHVzaGluZ191bmxvY2tlZCwKLQkgIGFzeW5jX2ppdHRlcl9xdWV1ZV91bnNldF9mbHVzaGluZ191bmxvY2tlZCk6Ci0JICBGb3JtYXQgYXJnIGZpeCAoc3BvdHRlZCBieSBBbGkgU2FiaWwgPGFsaS5zYWJpbEBnbWFpbC5jb20+KQotCi0yMDA3LTA1LTA5IDExOjI0OjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzogUGFzcyBxdWVyaWVzIHVwc3RyZWFtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9xdWVyeSk6Ci0JICBQYXNzIHF1ZXJpZXMgdXBzdHJlYW0uCi0KLTIwMDctMDUtMDQgMTI6MzI6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBBZGQgc29tZSBkZWJ1ZyBpbmZvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9xdWVyeSk6Ci0JICBBZGQgc29tZSBkZWJ1ZyBpbmZvLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9pbml0KSwKLQkgIChydHBfc2Vzc2lvbl9zZW5kX3J0cCk6Ci0JICBTdG9yZSByZWFsIHVzZXIgbmFtZSBpbiB0aGUgc2Vzc2lvbi4KLQotMjAwNy0wNC0zMCAxMzo0MTozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvYXN5bmNfaml0dGVyX3F1ZXVlLmM6IEZpeCB0aGUgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIHVuZGVycnVucyBhbmQgZG9lcyBub3QgYmxvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvYXN5bmNfaml0dGVyX3F1ZXVlLmM6IChzaWduYWxfd2FpdGluZ190aHJlYWRzKSwKLQkgIChhc3luY19qaXR0ZXJfcXVldWVfcG9wX2ludGVybl91bmxvY2tlZCk6Ci0JICBGaXggdGhlIGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciB1bmRlcnJ1bnMgYW5kIGRvZXMgbm90IGJsb2NrLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2Jhc2VfaW5pdCksCi0JICAoY3JlYXRlX3JlY3ZfcnRjcCksIChjcmVhdGVfc2VuZF9ydHApLCAoY3JlYXRlX3J0Y3ApLAotCSAgKGdzdF9ydHBfYmluX3JlcXVlc3RfbmV3X3BhZCk6Ci0JICBSZW5hbWUgUlRDUCBzZW5kIHBhZCwgbGlrZSBpbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyLgotCSAgQWxsb3cgZ2V0dGluZyBhbiBSVENQIHBhZCBmb3IgcmVjZWl2aW5nIGV2ZW4gaWYgd2UgZG9uJ3QgcmVjZWl2ZSBSVFAuCi0JICBmaXggaGFuZGxpbmcgb2Ygc2VuZF9ydHBfc3JjIHBhZC4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9jaGFpbik6Ci0JICBXaGVuIG5vIHB0IG1hcCBjb3VsZCBiZSBmb3VuZCwgZmFsbCBiYWNrIHRvIHRoZSBzaW5rcGFkIGNhcHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRwKSwgKGNyZWF0ZV9yZWN2X3J0cF9zaW5rKSwKLQkgIChjcmVhdGVfcmVjdl9ydGNwX3NpbmspLCAoY3JlYXRlX3NlbmRfcnRwX3NpbmspLAotCSAgKGNyZWF0ZV9zZW5kX3J0Y3Bfc3JjKToKLQkgIEZpeCBwYWQgbmFtZXMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHNvdXJjZV9wdXNoX3J0cCksCi0JICAocnRwX3Nlc3Npb25fY3JlYXRlX3NvdXJjZSksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NyKSwKLQkgIChydHBfc2Vzc2lvbl9zZW5kX3J0cCksIChzZXNzaW9uX3N0YXJ0X3J0Y3ApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBVbmxvY2sgc2Vzc2lvbiB3aGVuIHBlcmZvcm1pbmcgYSBjYWxsYmFjay4KLQkgIEFkZCBjYWxsYmFja3MgZm9yIHRoZSBpbnRlcm5hbCBzZXNzaW9uIG9iamVjdC4KLQkgIEZpeCBzZW5kaW5nIG9mIFJUUCBwYWNrZXRzLgotCSAgZmlyc3QgYXR0ZW1wdCBhdCBhZGRpbmcgTlRQIHRpbWVzIGluIHRoZSBTUiBwYWNrZXRzLgotCSAgU21hbGwgZGVidWcgYW5kIGRvYyBpbXByb3ZlbWVudHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jOiAocnRwX3NvdXJjZV9zZW5kX3J0cCk6Ci0JICBVcGRhdGUgc3RhdHMgZm9yIFNSIHJlcG9ydHMuCi0KLTIwMDctMDQtMjkgMTQ6NDY6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogUmVtb3ZlIGRlYnVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3ApOgotCSAgUmVtb3ZlIGRlYnVnLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9wcm9jZXNzX3NyKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NkZXMpLCAoY2FsY3VsYXRlX3J0Y3BfaW50ZXJ2YWwpLAotCSAgKHJ0cF9zZXNzaW9uX25leHRfdGltZW91dCksIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5jOiAocnRwX3N0YXRzX2NhbGN1bGF0ZV9ydGNwX2ludGVydmFsKToKLQkgIEltcHJvdmUgZGVidWdnaW5nCi0JICBGaXggaW50ZXJ2YWwgZm9yIEJZRS9SVENQIHBhY2tldHMuCi0KLTIwMDctMDQtMjcgMTU6MDk6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogTW92ZSByZWNvbnNpZGVyYXRpb24gY29kZSB0byB0aGUgcnRwc2Vzc2lvbiBvYmplY3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAocnRjcF90aHJlYWQpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3ApLCAoZ3N0X3J0cF9zZXNzaW9uX3JlY29uc2lkZXIpOgotCSAgTW92ZSByZWNvbnNpZGVyYXRpb24gY29kZSB0byB0aGUgcnRwc2Vzc2lvbiBvYmplY3QuCi0JICBTaW1wbGlmeSB0aW1vdXQgaGFuZGxpbmcgYW5kIGFkZCByZWNvbnNpZGVyYXRpb24uCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9zZXNzaW9uX2luaXQpLCAocnRwX3Nlc3Npb25fZmluYWxpemUpLCAob25fYnllX3NzcmMpLAotCSAgKG9uX2J5ZV90aW1lb3V0KSwgKG9uX3RpbWVvdXQpLCAocnRwX3Nlc3Npb25fc2V0X2NhbGxiYWNrcyksCi0JICAob2J0YWluX3NvdXJjZSksIChydHBfc2Vzc2lvbl9jcmVhdGVfc291cmNlKSwKLQkgICh1cGRhdGVfYXJyaXZhbF9zdGF0cyksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19zciksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3JyKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX2J5ZSksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3ApLAotCSAgKGNhbGN1bGF0ZV9ydGNwX2ludGVydmFsKSwgKHJ0cF9zZXNzaW9uX3NlbmRfYnllKSwKLQkgIChydHBfc2Vzc2lvbl9uZXh0X3RpbWVvdXQpLCAoc2Vzc2lvbl9zdGFydF9ydGNwKSwKLQkgIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpLCAoc2Vzc2lvbl9jbGVhbnVwKSwgKHNlc3Npb25fc2RlcyksCi0JICAoc2Vzc2lvbl9ieWUpLCAoaXNfcnRjcF90aW1lKSwgKHJ0cF9zZXNzaW9uX29uX3RpbWVvdXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBIYW5kbGUgdGltZW91dCBvZiBpbmFjdGl2ZSBzb3VyY2VzIGFuZCBzZW5kZXJzLgotCSAgSW1wbGVtZW50IEJZRSBzY2hlZHVsaW5nLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKGNhbGN1bGF0ZV9qaXR0ZXIpLAotCSAgKHJ0cF9zb3VyY2VfcHJvY2Vzc19zciksIChydHBfc291cmNlX2dldF9sYXN0X3NyKSwKLQkgIChydHBfc291cmNlX2dldF9sYXN0X3JiKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmg6Ci0JICBBZGQgbWVtYmVycyB0byBjaGVjayBmb3IgdGltZW91dHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6IChydHBfc3RhdHNfaW5pdF9kZWZhdWx0cyksCi0JICAocnRwX3N0YXRzX2NhbGN1bGF0ZV9ydGNwX2ludGVydmFsKSwgKHJ0cF9zdGF0c19hZGRfcnRjcF9qaXR0ZXIpLAotCSAgKHJ0cF9zdGF0c19jYWxjdWxhdGVfYnllX2ludGVydmFsKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIFVzZSBSRkMgYWxnb3JpdGhtIGZvciBjYWxjdWxhdGluZyB0aGUgcmVwb3J0aW5nIGludGVydmFsLgotCi0yMDA3LTA0LTI1IDE2OjM4OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IEltcGxlbWVudCBmb3J3YXJkIGFuZCByZXZlcnNlIHJlY29uc2lkZXJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChydGNwX3RocmVhZCk6Ci0JICBJbXBsZW1lbnQgZm9yd2FyZCBhbmQgcmV2ZXJzZSByZWNvbnNpZGVyYXRpb24uCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2dldF9udW1fc291cmNlcyksCi0JICAocnRwX3Nlc3Npb25fZ2V0X251bV9hY3RpdmVfc291cmNlcyksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NyKSwKLQkgIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBTbWFsbCBjbGVhbnVwcy4KLQotMjAwNy0wNC0yNSAxNTo0ODo0NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLio6IE1ha2UgZGVmYXVsdCBqaXR0ZXJidWZmZXIgbGF0ZW5jeSBjb25maWd1cmFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiA8ZGVsZXRlIGlmIG5vdCB1c2luZyBhIGJ1ZGR5PgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNyZWF0ZV9zdHJlYW0pLAotCSAgKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9iaW5fc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2Jpbl9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIE1ha2UgZGVmYXVsdCBqaXR0ZXJidWZmZXIgbGF0ZW5jeSBjb25maWd1cmFibGUuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jbGFzc19pbml0KSwKLQkgIChnc3Rfaml0dGVyX2J1ZmZlcl9zaW5rX3BhcnNlX2NhcHMpLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfcHJvcGVydHkpOgotCSAgRGVidWdpbmcgY2xlYW51cHMuCi0KLTIwMDctMDQtMjUgMTM6MTk6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBSZXBvcnQgTk9fUFJFUk9MTCB3aGVuIGdvaW5nIHRvIFBBVVNFRC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhbmdlX3N0YXRlKToKLQkgIFJlcG9ydCBOT19QUkVST0xMIHdoZW4gZ29pbmcgdG8gUEFVU0VELgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChydGNwX3RocmVhZCk6Ci0JICBEb24ndCBzZW5kIFJUQ1AgcmlnaHQgYmVmb3JlIHdlIGFyZSBzaHV0dGluZyBkb3duLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19zciksIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpLAotCSAgKHJ0cF9zZXNzaW9uX3BlcmZvcm1fcmVwb3J0aW5nKToKLQkgIEltcHJvdmUgcmVwb3J0IGJsb2Nrcy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChjYWxjdWxhdGVfaml0dGVyKSwgKGluaXRfc2VxKSwKLQkgIChydHBfc291cmNlX3Byb2Nlc3NfcnRwKSwgKHJ0cF9zb3VyY2VfcHJvY2Vzc19zciksCi0JICAocnRwX3NvdXJjZV9wcm9jZXNzX3JiKSwgKHJ0cF9zb3VyY2VfZ2V0X2xhc3Rfc3IpLAotCSAgKHJ0cF9zb3VyY2VfZ2V0X2xhc3RfcmIpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaDoKLQkgIENsZWFudXBzLCBhZGQgbWV0aG9kcyB0byBhY2Nlc3Mgc3RhdHMuCi0KLTIwMDctMDQtMjUgMDg6MzA6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiBmaXggZm9yIHBhZCBuYW1lIGNoYW5nZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoY3JlYXRlX3J0Y3ApOgotCSAgZml4IGZvciBwYWQgbmFtZSBjaGFuZ2UKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jOiAocnRjcF90aHJlYWQpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3ApLCAoZ3N0X3J0cF9zZXNzaW9uX2Nsb2NrX3JhdGUpOgotCSAgRml4IGZvciByZW5hbWVkIG1ldGhvZHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYzogKHJ0cF9zZXNzaW9uX2luaXQpLAotCSAgKHJ0cF9zZXNzaW9uX2ZpbmFsaXplKSwgKHJ0cF9zZXNzaW9uX3NldF9jbmFtZSksCi0JICAocnRwX3Nlc3Npb25fZ2V0X2NuYW1lKSwgKHJ0cF9zZXNzaW9uX3NldF9uYW1lKSwKLQkgIChydHBfc2Vzc2lvbl9nZXRfbmFtZSksIChydHBfc2Vzc2lvbl9zZXRfZW1haWwpLAotCSAgKHJ0cF9zZXNzaW9uX2dldF9lbWFpbCksIChydHBfc2Vzc2lvbl9zZXRfcGhvbmUpLAotCSAgKHJ0cF9zZXNzaW9uX2dldF9waG9uZSksIChydHBfc2Vzc2lvbl9zZXRfbG9jYXRpb24pLAotCSAgKHJ0cF9zZXNzaW9uX2dldF9sb2NhdGlvbiksIChydHBfc2Vzc2lvbl9zZXRfdG9vbCksCi0JICAocnRwX3Nlc3Npb25fZ2V0X3Rvb2wpLCAocnRwX3Nlc3Npb25fc2V0X25vdGUpLAotCSAgKHJ0cF9zZXNzaW9uX2dldF9ub3RlKSwgKHNvdXJjZV9wdXNoX3J0cCksIChvYnRhaW5fc291cmNlKSwKLQkgIChydHBfc2Vzc2lvbl9hZGRfc291cmNlKSwgKHJ0cF9zZXNzaW9uX2dldF9zb3VyY2VfYnlfc3NyYyksCi0JICAocnRwX3Nlc3Npb25fY3JlYXRlX3NvdXJjZSksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19zciksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3NkZXMpLAotCSAgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfcnRjcCksIChydHBfc2Vzc2lvbl9zZW5kX3J0cCksCi0JICAocnRwX3Nlc3Npb25fZ2V0X3JlcG9ydGluZ19pbnRlcnZhbCksIChzZXNzaW9uX3JlcG9ydF9ibG9ja3MpLAotCSAgKHNlc3Npb25fc2RlcyksIChydHBfc2Vzc2lvbl9wZXJmb3JtX3JlcG9ydGluZyk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaDoKLQkgIFByZXBhcmUgZm9yIGltcGxlbWVudGluZyBTU1JDIHNhbXBsaW5nLgotCSAgQ3JlYXRlIFNTUkMgZm9yIHRoZSBzZXNzaW9uLgotCSAgQWRkIG1ldGhvZHMgdG8gc2V0IHRoZSBTREVTIGVudHJpZXMuCi0JICBmaXggYWNjb3VudGluZyBvZiBzZW5kZXJzL3JlY2VpdmVycy4KLQkgIEltcGxlbWVudCBTUi9SUi9TREVTIFJUQ1AgcmVwb3J0aW5nLgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYzogKHJ0cF9zb3VyY2VfaW5pdCksIChpbml0X3NlcSksCi0JICAocnRwX3NvdXJjZV9wcm9jZXNzX3J0cCksIChydHBfc291cmNlX3Byb2Nlc3Nfc3IpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIEltcGxlbWVudCBleHRlbmRlZCBzZXF1ZW5jZSBudW1iZXIuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmM6IChydHBfc3RhdHNfY2FsY3VsYXRlX3J0Y3BfaW50ZXJ2YWwpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzdGF0cy5oOgotCSAgUmVuYW1lIHNvbWUgZmllbGRzLgotCi0yMDA3LTA0LTIxIDE5OjIxOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IERvbid0IHVzZSBHTGliLTIuMTAgQVBJLCB3ZSBvbmx5IHJlcXVpcmUgR0xpYiAyLjggYXQgdGhlIG1vbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmM6IChydHBfc2Vzc2lvbl9maW5hbGl6ZSk6Ci0JICBEb24ndCB1c2UgR0xpYi0yLjEwIEFQSSwgd2Ugb25seSByZXF1aXJlIEdMaWIgMi44IGF0IHRoZSBtb21lbnQuCi0KLTIwMDctMDQtMTggMTg6NTg6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRGlzYWJsZSBydHBtYW5hZ2VyIGZvciBub3cgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIENWUyAtYmFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEaXNhYmxlIHJ0cG1hbmFnZXIgZm9yIG5vdyBiZWNhdXNlIGl0IGRlcGVuZHMgb24gQ1ZTIC1iYXNlLgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgIEFkZGVkIG5ldyBmaWxlcyBmb3Igc2Vzc2lvbiBtYW5hZ2VyLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChjcmVhdGVfc2Vzc2lvbiksIChnZXRfcHRfbWFwKSwKLQkgIChjcmVhdGVfc3RyZWFtKSwgKHB0X21hcF9yZXF1ZXN0ZWQpLCAobmV3X3NzcmNfcGFkX2ZvdW5kKToKLQkgIFNvbWUgY2xlYW51cHMuCi0JICB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGNhbiBub3cgYWxzbyByZXF1ZXN0IGEgcHQtbWFwLgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksIChnc3RfcnRwX3Nlc3Npb25faW5pdCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2ZpbmFsaXplKSwgKHJ0Y3BfdGhyZWFkKSwgKHN0YXJ0X3J0Y3BfdGhyZWFkKSwKLQkgIChzdG9wX3J0Y3BfdGhyZWFkKSwgKGdzdF9ydHBfc2Vzc2lvbl9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCksIChnc3RfcnRwX3Nlc3Npb25fc2VuZF9ydHApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0Y3ApLCAoZ3N0X3J0cF9zZXNzaW9uX2Nsb2NrX3JhdGUpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9nZXRfdGltZSksIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydHBfc2luayksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3JlY3ZfcnRwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydGNwX3NpbmspLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9yZWN2X3J0Y3ApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9ldmVudF9zZW5kX3J0cF9zaW5rKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHApLCAoY3JlYXRlX3NlbmRfcnRjcF9zcmMpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9yZXF1ZXN0X25ld19wYWQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JICBXZSBjYW4gYXNrIGZvciBwdC1tYXAgbm93IHRvbyB3aGVuIHRoZSBzZXNzaW9uIG1hbmFnZXIgbmVlZHMgaXQuCi0JICBIb29rIHVwIHRvIHRoZSBuZXcgc2Vzc2lvbiBtYW5hZ2VyLCBpbXBsZW1lbnQgdGhlIG5lZWRlZCBjYWxsYmFja3MgZm9yCi0JICBwdXNoaW5nIGRhdGEsIGdldHRpbmcgY2xvY2sgdGltZSBhbmQgcmVxdWVzdGluZyBjbG9jay1yYXRlcy4KLQkgIFJlbmFtZSBydGNwX3NyYyB0byBzZW5kX3J0Y3Bfc3JjIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCB0aGlzIFJUQ1AgaXMgdG8KLQkgIGJlIHNlbmQgdG8gY2xpZW50cy4KLQkgIEFkZCBjb2RlIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZSB0aHJlYWQgdGhhdCB3aWxsIHNjaGVkdWxlIFJUQ1AgdGhyb3VnaAotCSAgdGhlIHNlc3Npb24gbWFuYWdlci4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5jOiAocnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAocnRwX3Nlc3Npb25faW5pdCksIChydHBfc2Vzc2lvbl9maW5hbGl6ZSksCi0JICAocnRwX3Nlc3Npb25fc2V0X3Byb3BlcnR5KSwgKHJ0cF9zZXNzaW9uX2dldF9wcm9wZXJ0eSksCi0JICAob25fbmV3X3NzcmMpLCAob25fc3NyY19jb2xsaXNpb24pLCAob25fc3NyY192YWxpZGF0ZWQpLAotCSAgKG9uX2J5ZV9zc3JjKSwgKHJ0cF9zZXNzaW9uX25ldyksIChydHBfc2Vzc2lvbl9zZXRfY2FsbGJhY2tzKSwKLQkgIChydHBfc2Vzc2lvbl9zZXRfYmFuZHdpZHRoKSwgKHJ0cF9zZXNzaW9uX2dldF9iYW5kd2lkdGgpLAotCSAgKHJ0cF9zZXNzaW9uX3NldF9ydGNwX2JhbmR3aWR0aCksIChydHBfc2Vzc2lvbl9nZXRfcnRjcF9iYW5kd2lkdGgpLAotCSAgKHNvdXJjZV9wdXNoX3J0cCksIChzb3VyY2VfY2xvY2tfcmF0ZSksIChjaGVja19jb2xsaXNpb24pLAotCSAgKG9idGFpbl9zb3VyY2UpLCAocnRwX3Nlc3Npb25fYWRkX3NvdXJjZSksCi0JICAocnRwX3Nlc3Npb25fZ2V0X251bV9zb3VyY2VzKSwKLQkgIChydHBfc2Vzc2lvbl9nZXRfbnVtX2FjdGl2ZV9zb3VyY2VzKSwKLQkgIChydHBfc2Vzc2lvbl9nZXRfc291cmNlX2J5X3NzcmMpLAotCSAgKHJ0cF9zZXNzaW9uX2dldF9zb3VyY2VfYnlfY25hbWUpLCAocnRwX3Nlc3Npb25fY3JlYXRlX3NvdXJjZSksCi0JICAodXBkYXRlX2Fycml2YWxfc3RhdHMpLCAocnRwX3Nlc3Npb25fcHJvY2Vzc19ydHApLAotCSAgKHJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc3IpLCAocnRwX3Nlc3Npb25fcHJvY2Vzc19yciksCi0JICAocnRwX3Nlc3Npb25fcHJvY2Vzc19zZGVzKSwgKHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9jZXNzX2FwcCksIChydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3ApLAotCSAgKHJ0cF9zZXNzaW9uX3NlbmRfcnRwKSwgKHJ0cF9zZXNzaW9uX2dldF9ydGNwX2ludGVydmFsKSwKLQkgIChydHBfc2Vzc2lvbl9wcm9kdWNlX3J0Y3ApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmg6Ci0JICBUaGUgYWR2YW5jZWQgYmVnaW5uaW5ncyBvZiB0aGUgbWFpbiBzZXNzaW9uIG1hbmFnZXIgdGhhdCBoYW5kbGVzIHRoZQotCSAgcGFydGljaXBhbnQgZGF0YWJhc2Ugb2YgUlRQU291cmNlcywgU1NSQyBwcm9iYXRpb24sIFNTUkMgY29sbGlzaW9ucywKLQkgIHBhcnNlIFJUQ1AgdG8gdXBkYXRlIHNvdXJjZSBzdGF0cy4gZXRjLi4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmM6IChydHBfc291cmNlX2NsYXNzX2luaXQpLAotCSAgKHJ0cF9zb3VyY2VfaW5pdCksIChydHBfc291cmNlX2ZpbmFsaXplKSwgKHJ0cF9zb3VyY2VfbmV3KSwKLQkgIChydHBfc291cmNlX3NldF9jYWxsYmFja3MpLCAocnRwX3NvdXJjZV9zZXRfYXNfY3NyYyksCi0JICAocnRwX3NvdXJjZV9zZXRfcnRwX2Zyb20pLCAocnRwX3NvdXJjZV9zZXRfcnRjcF9mcm9tKSwKLQkgIChwdXNoX3BhY2tldCksIChnZXRfY2xvY2tfcmF0ZSksIChjYWxjdWxhdGVfaml0dGVyKSwKLQkgIChydHBfc291cmNlX3Byb2Nlc3NfcnRwKSwgKHJ0cF9zb3VyY2VfcHJvY2Vzc19ieWUpLAotCSAgKHJ0cF9zb3VyY2Vfc2VuZF9ydHApLCAocnRwX3NvdXJjZV9wcm9jZXNzX3NyKSwKLQkgIChydHBfc291cmNlX3Byb2Nlc3NfcmIpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaDoKLQkgIE9iamVjdCB0aGF0IGVuY2Fwc3VsYXRlcyBhbiBTU1JDIGFuZCBpdHMgc3RhdGUgaW4gdGhlIGRhdGFiYXNlLgotCSAgQ2FsY3VsYXRlcyB0aGUgaml0dGVyIGFuZCB0cmFuc2l0IHRpbWVzIG9mIGRhdGEgcGFja2V0cy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYzogKHJ0cF9zdGF0c19pbml0X2RlZmF1bHRzKSwKLQkgIChydHBfc3RhdHNfY2FsY3VsYXRlX3J0Y3BfaW50ZXJ2YWwpLCAocnRwX3N0YXRzX2FkZF9ydGNwX2ppdHRlcik6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmg6Ci0JICBWYXJpb3VzIHN0YXRzIHJlZ2FyZGluZyB0aGUgc2Vzc2lvbiBhbmQgc291cmNlcy4KLQkgIFVzZWQgdG8gY2FsY3VsYXRlIHRoZSBSVENQIGludGVydmFsLgotCi0yMDA3LTA0LTEzIDA5OjIwOjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IFByb3RlY3QgbGlzdHMgYW5kIHN0cnVjdHVyZXMgd2l0aCBsb2Nrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGNyZWF0ZV9zZXNzaW9uKSwgKGdldF9wdF9tYXApLAotCSAgKGdzdF9ydHBfYmluX2luaXQpLCAoZ3N0X3J0cF9iaW5fZmluYWxpemUpLCAobmV3X3NzcmNfcGFkX2ZvdW5kKSwKLQkgIChjcmVhdGVfcmVjdl9ydHApLCAoZ3N0X3J0cF9iaW5fcmVxdWVzdF9uZXdfcGFkKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmM6IChnc3RfcnRwX3Nlc3Npb25fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2luaXQpLCAoZ3N0X3J0cF9zZXNzaW9uX2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydHBfc2luayksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3JlY3ZfcnRjcF9zaW5rKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydGNwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fcmVxdWVzdF9uZXdfcGFkKToKLQkgIFByb3RlY3QgbGlzdHMgYW5kIHN0cnVjdHVyZXMgd2l0aCBsb2Nrcy4KLQkgIFJldHVybiBGTE9XX09LIGZyb20gUlRDUCBtZXNzYWdlcyBmb3Igbm93LgotCi0yMDA3LTA0LTEyIDA4OjE4OjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogRW1pdCBwdCBtYXAgcmVxdWVzdHMgYW5kIGNhY2hlIHJlc3VsdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChjcmVhdGVfc2Vzc2lvbiksIChnZXRfcHRfbWFwKSwKLQkgIChjcmVhdGVfc3RyZWFtKSwgKGdzdF9ydHBfYmluX2NsYXNzX2luaXQpLCAocHRfbWFwX3JlcXVlc3RlZCk6Ci0JICBFbWl0IHB0IG1hcCByZXF1ZXN0cyBhbmQgY2FjaGUgcmVzdWx0cy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9qaXR0ZXJfYnVmZmVyX3NpbmtfcGFyc2VfY2FwcyksCi0JICAoZ3N0X2ppdHRlcl9idWZmZXJfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZ2V0X2Nsb2NrX3JhdGUpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbiksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6IChnc3RfcnRwX3B0X2RlbXV4X2NoYWluKToKLQkgIEVtaXQgcmVxdWVzdC1wdC1tYXAgc2lnbmFscy4KLQotMjAwNy0wNC0xMSAxMzo0OTo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLW1hcnNoYWwubGlzdDogU29tZSBtb3JlIGN1c3RvbSBtYXJzaGFsbGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4tbWFyc2hhbC5saXN0OgotCSAgU29tZSBtb3JlIGN1c3RvbSBtYXJzaGFsbGVycy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChjcmVhdGVfc2Vzc2lvbiksIChnZXRfcHRfbWFwKSwKLQkgIChjbG9ja19yYXRlX3JlcXVlc3QpLCAoY3JlYXRlX3N0cmVhbSksIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwKLQkgIChwdF9tYXBfcmVxdWVzdGVkKSwgKG5ld19zc3JjX3BhZF9mb3VuZCksIChjcmVhdGVfcmVjdl9ydHApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIFByZXBhcmUgZm9yIGNhY2hpbmcgcHQgbWFwcy4KLQkgIENvbm5lY3QgdG8gc2lnbmFscyB0byBjb2xsZWN0IHB0IG1hcHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOgotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jbGFzc19pbml0KSwKLQkgIChnc3Rfaml0dGVyX2J1ZmZlcl9zaW5rX3NldGNhcHMpLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgIEFkZCByZXF1ZXN0X2Nsb2NrX3JhdGUgc2lnbmFsLgotCSAgVXNlIHNjYWxlIGluc3RlYXQgb2Ygc2NhbGVfaW50IGJlY2F1c2UgdGhlIGxhdGVyIGRvZXMgbm90IGRlYWwgd2l0aAotCSAgbmVnYXRpdmUgbnVtYmVycy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX3B0X2RlbXV4X2NoYWluKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5oOgotCSAgSW1wbGVtZW50IHJlcXVlc3QtcHQtbWFwIHNpZ25hbC4KLQotMjAwNy0wNC0xMCAwOToxNDowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvOiBBZGRlZCBjdXN0b20gbWFyc2hhbGxlcnMgZm9yIHNpZ25hbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvLmN2c2lnbm9yZToKLQkgICogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi1tYXJzaGFsLmxpc3Q6Ci0JICBBZGRlZCBjdXN0b20gbWFyc2hhbGxlcnMgZm9yIHNpZ25hbHMuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoZ3N0X3J0cF9iaW5fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgUHJlcGFyZSBmb3IgZW1pdGluZyBwdCBtYXAgc2lnbmFscy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmM6Ci0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X2NsYXNzX2luaXQpOgotCSAgRml4IHNpZ25hbHMuCi0KLTIwMDctMDQtMDYgMTI6Mjg6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi4qOiBQcm92aWRlIGEgY2xvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2Jpbl9pbml0KSwgKGdzdF9ydHBfYmluX3Byb3ZpZGVfY2xvY2spOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaDoKLQkgIFByb3ZpZGUgYSBjbG9jay4KLQotMjAwNy0wNC0wNiAxMjowNzozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmM6IEZpeCBwYWQgdGVtcGxhdGUgbmFtZSBwYXJzaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jOiAoY3JlYXRlX3J0Y3ApOgotCSAgRml4IHBhZCB0ZW1wbGF0ZSBuYW1lIHBhcnNpbmcuCi0KLTIwMDctMDQtMDUgMTY6MTA6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jOiBBZGQgc29tZSBkZWJ1ZyBhbmQgY29tbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X2ppdHRlcl9idWZmZXJfc2lua19zZXRjYXBzKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbiksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2xvb3ApOgotCSAgQWRkIHNvbWUgZGVidWcgYW5kIGNvbW1lbnRzLgotCSAgRml4IGRvdWJsZSB1bnJlZigpIGluIGVycm9yIGNhc2VzLgotCi0yMDA3LTA0LTA1IDEzOjU0OjIzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uKjogQWRkIGRlYnVnZ2luZyBjYXRlZ29yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGZpbmRfc2Vzc2lvbl9ieV9pZCksCi0JICAoY3JlYXRlX3Nlc3Npb24pLCAoZmluZF9zdHJlYW1fYnlfc3NyYyksIChjcmVhdGVfc3RyZWFtKSwKLQkgIChnc3RfcnRwX2Jpbl9jbGFzc19pbml0KSwgKG5ld19wYXlsb2FkX2ZvdW5kKSwKLQkgIChuZXdfc3NyY19wYWRfZm91bmQpLCAoY3JlYXRlX3JlY3ZfcnRwKSwgKGNyZWF0ZV9yZWN2X3J0Y3ApLAotCSAgKGNyZWF0ZV9zZW5kX3J0cCksIChjcmVhdGVfcnRjcCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgQWRkIGRlYnVnZ2luZyBjYXRlZ29yeS4KLQkgIEFkZGVkIFJUUFN0cmVhbSB0byBtYW5hZ2Ugc3RyZWFtIHBlciBTU1JDLCBlYWNoIHdpdGggaXRzIG93bgotCSAgaml0dGVyYnVmZmVyIGFuZCBwdGRlbXV4LgotCSAgQWRkZWQgU1NSQ0RlbXV4LgotCSAgQ29ubmVjdCB0byB2YXJpb3VzIFNTUkMgYW5kIFBUIHNpZ25hbHMgYW5kIGNyZWF0ZSBnaG9zdHBhZHMsIGxpbmsgc3R1ZmYuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cG1hbmFnZXIuYzogKHBsdWdpbl9pbml0KToKLQkgIEFkZGVkIHJ0cGJpbiB0byBlbGVtZW50cy4KLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jOiAoZ3N0X3J0cF9wdF9kZW11eF9jaGFpbik6Ci0JICBGaXggY2FwcyBhbmQgZm9yd2FyZCBHc3RGbG93UmV0dXJuCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydHBfc2luayksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3JlY3ZfcnRwKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydGNwX3NpbmspLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9yZWN2X3J0Y3ApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9ldmVudF9zZW5kX3J0cF9zaW5rKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHApLCAoY3JlYXRlX3JlY3ZfcnRwX3NpbmspLAotCSAgKGNyZWF0ZV9yZWN2X3J0Y3Bfc2luayksIChjcmVhdGVfc2VuZF9ydHBfc2luayksIChjcmVhdGVfcnRjcF9zcmMpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9yZXF1ZXN0X25ld19wYWQpOgotCSAgQWRkIGRlYnVnIGNhdGVnb3J5LgotCSAgQWRkIGV2ZW50IGhhbmRsaW5nCi0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jOiAoZmluZF9ydHBfcGFkX2Zvcl9zc3JjKSwKLQkgIChjcmVhdGVfcnRwX3BhZF9mb3Jfc3NyYyksIChnc3RfcnRwX3NzcmNfZGVtdXhfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9zc3JjX2RlbXV4X2luaXQpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X2NoYWluKSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4Lmg6Ci0JICBBZGQgZGVidWcgY2F0ZWdvcnkuCi0JICBBZGQgbmV3LXB0LXBhZCBzaWduYWwuCi0KLTIwMDctMDQtMDQgMTA6MjM6MTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHBtYW5hZ2VyLzogQWRkZWQgc2ltcGxlIFNTUkMgZGVtdXhlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYzogKGZpbmRfcGFkX2Zvcl9zc3JjKSwKLQkgIChjcmVhdGVfcGFkX2Zvcl9zc3JjKSwgKGdzdF9ydHBfc3NyY19kZW11eF9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9jbGFzc19pbml0KSwgKGdzdF9ydHBfc3NyY19kZW11eF9pbml0KSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfZmluYWxpemUpLCAoZ3N0X3J0cF9zc3JjX2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF9ydHBfc3NyY19kZW11eF9jaGFpbiksIChnc3RfcnRwX3NzcmNfZGVtdXhfc3JjX2V2ZW50KSwKLQkgIChnc3RfcnRwX3NzcmNfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4Lmg6Ci0JICBBZGRlZCBzaW1wbGUgU1NSQyBkZW11eGVyLgotCi0yMDA3LTA0LTAzIDExOjM1OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwbWFuYWdlci86IFNvbWUgbW9yZSBnaG9zdHBhZCBtYWdpYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGZpbmRfc2Vzc2lvbl9ieV9pZCksCi0JICAoY3JlYXRlX3Nlc3Npb24pLCAoZ3N0X3J0cF9iaW5fYmFzZV9pbml0KSwgKGNyZWF0ZV9yZWN2X3J0cCksCi0JICAoY3JlYXRlX3JlY3ZfcnRjcCksIChjcmVhdGVfc2VuZF9ydHApLCAoY3JlYXRlX3J0Y3ApLAotCSAgKGdzdF9ydHBfYmluX3JlcXVlc3RfbmV3X3BhZCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkgIFNvbWUgbW9yZSBnaG9zdHBhZCBtYWdpYy4KLQotMjAwNy0wNC0wMyAwOTo1MToxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06IEFkZCAuaCBmaWxlIHNvIGl0IGNhbiBiZSBkaXN0ZWQgcHJvcGVybHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW06Ci0JICBBZGQgLmggZmlsZSBzbyBpdCBjYW4gYmUgZGlzdGVkIHByb3Blcmx5LgotCi0yMDA3LTA0LTAzIDA5OjEzOjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBZGQgUlRQIHNlc3Npb24gbWFuYWdlbWVudCBlbGVtZW50cy4gU3RpbGwgaW4gcHJvZ3Jlc3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cG1hbmFnZXIvYXN5bmNfaml0dGVyX3F1ZXVlLmM6IChhc3luY19qaXR0ZXJfcXVldWVfbmV3KSwKLQkgIChzaWduYWxfd2FpdGluZ190aHJlYWRzKSwgKGFzeW5jX2ppdHRlcl9xdWV1ZV9yZWYpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9yZWZfdW5sb2NrZWQpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9zZXRfbG93X3RocmVzaG9sZCksCi0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX3NldF9oaWdoX3RocmVzaG9sZCksCi0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX3NldF9tYXhfcXVldWVfbGVuZ3RoKSwKLQkgIChhc3luY19qaXR0ZXJfcXVldWVfZ2V0X2dfcXVldWUpLCAoY2FsY3VsYXRlX3RzX2RpZmYpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9sZW5ndGhfdHNfdW5pdHNfdW5sb2NrZWQpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV91bnJlZl9hbmRfdW5sb2NrKSwgKGFzeW5jX2ppdHRlcl9xdWV1ZV91bnJlZiksCi0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX2xvY2spLCAoYXN5bmNfaml0dGVyX3F1ZXVlX3VubG9jayksCi0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX3B1c2gpLCAoYXN5bmNfaml0dGVyX3F1ZXVlX3B1c2hfdW5sb2NrZWQpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9wdXNoX3NvcnRlZCksCi0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX3B1c2hfc29ydGVkX3VubG9ja2VkKSwKLQkgIChhc3luY19qaXR0ZXJfcXVldWVfaW5zZXJ0X2FmdGVyX3VubG9ja2VkKSwKLQkgIChhc3luY19qaXR0ZXJfcXVldWVfcG9wX2ludGVybl91bmxvY2tlZCksIChhc3luY19qaXR0ZXJfcXVldWVfcG9wKSwKLQkgIChhc3luY19qaXR0ZXJfcXVldWVfcG9wX3VubG9ja2VkKSwgKGFzeW5jX2ppdHRlcl9xdWV1ZV9sZW5ndGgpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9sZW5ndGhfdW5sb2NrZWQpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV9zZXRfZmx1c2hpbmdfdW5sb2NrZWQpLAotCSAgKGFzeW5jX2ppdHRlcl9xdWV1ZV91bnNldF9mbHVzaGluZ191bmxvY2tlZCksCi0JICAoYXN5bmNfaml0dGVyX3F1ZXVlX3NldF9ibG9ja2luZ191bmxvY2tlZCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2FzeW5jX2ppdHRlcl9xdWV1ZS5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uYzogKGdzdF9ydHBfYmluX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9iaW5fY2xhc3NfaW5pdCksIChnc3RfcnRwX2Jpbl9pbml0KSwKLQkgIChnc3RfcnRwX2Jpbl9maW5hbGl6ZSksIChnc3RfcnRwX2Jpbl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfYmluX2dldF9wcm9wZXJ0eSksIChnc3RfcnRwX2Jpbl9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfYmluX3JlcXVlc3RfbmV3X3BhZCksIChnc3RfcnRwX2Jpbl9yZWxlYXNlX3BhZCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5oOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzogKG5ld19wYWQpLCAoY3JlYXRlX3N0cmVhbSksCi0JICAoZnJlZV9zdHJlYW0pLCAoZmluZF9zdHJlYW1fYnlfc3NyYyksIChnc3RfcnRwX2NsaWVudF9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfY2xpZW50X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9jbGllbnRfaW5pdCksCi0JICAoZ3N0X3J0cF9jbGllbnRfZmluYWxpemUpLCAoZ3N0X3J0cF9jbGllbnRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2NsaWVudF9nZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9jbGllbnRfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX2NsaWVudF9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X3J0cF9jbGllbnRfcmVsZWFzZV9wYWQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2luaXQpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9kaXNwb3NlKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRjYXBzKSwKLQkgIChnc3Rfaml0dGVyX2J1ZmZlcl9zaW5rX3NldGNhcHMpLCAoZnJlZV9mdW5jKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RhcnQpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9mbHVzaF9zdG9wKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc3JjX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFuZ2Vfc3RhdGUpLCAocHJpdl9jb21wYXJlX3J0cF9zZXFfbHQpLAotCSAgKGNvbXBhcmVfcnRwX2J1ZmZlcnNfc2VxX251bSksIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lua19ldmVudCksCi0JICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluKSwgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wKSwKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfcXVlcnkpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaDoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmM6IChnc3RfcnRwX3B0X2RlbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9wdF9kZW11eF9jbGFzc19pbml0KSwgKGdzdF9ydHBfcHRfZGVtdXhfaW5pdCksCi0JICAoZ3N0X3J0cF9wdF9kZW11eF9maW5hbGl6ZSksIChnc3RfcnRwX3B0X2RlbXV4X2NoYWluKSwKLQkgIChnc3RfcnRwX3B0X2RlbXV4X2dldGNhcHMpLCAoZmluZF9wYWRfZm9yX3B0KSwKLQkgIChnc3RfcnRwX3B0X2RlbXV4X3NldHVwKSwgKGdzdF9ydHBfcHRfZGVtdXhfcmVsZWFzZSksCi0JICAoZ3N0X3J0cF9wdF9kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4Lmg6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYzogKGdzdF9ydHBfc2Vzc2lvbl9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0KSwgKGdzdF9ydHBfc2Vzc2lvbl9pbml0KSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fZmluYWxpemUpLCAoZ3N0X3J0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX2dldF9wcm9wZXJ0eSksIChnc3RfcnRwX3Nlc3Npb25fY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydHApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9yZWN2X3J0Y3ApLAotCSAgKGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9zZW5kX3J0cCksIChjcmVhdGVfcmVjdl9ydHBfc2luayksCi0JICAoY3JlYXRlX3JlY3ZfcnRjcF9zaW5rKSwgKGNyZWF0ZV9zZW5kX3J0cF9zaW5rKSwgKGNyZWF0ZV9ydGNwX3NyYyksCi0JICAoZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfbmV3X3BhZCksIChnc3RfcnRwX3Nlc3Npb25fcmVsZWFzZV9wYWQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmg6Ci0JICBBZGQgUlRQIHNlc3Npb24gbWFuYWdlbWVudCBlbGVtZW50cy4gU3RpbGwgaW4gcHJvZ3Jlc3MuCi0KLTIwMDktMDgtMTAgMTM6MzA6MjMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcHVzaCBtb2RlOyBjYXRlciBmb3IgY2h1bmsgcGFkZGluZwotCi0yMDA5LTA4LTA0IDE5OjQ1OjQzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IG9ubHkgdXNlIHN0cmVhbSdzIHBhZCBhZnRlciBoYXZpbmcgY2hlY2tlZCBpdCBleGlzdHMKLQotMjAwOS0wOC0wNCAxMzozODowOSArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBzcHJpbmtsZSBzb21lIG1vcmUgR1NUX0RFQlVHX0ZVTkNQVFIKLQotMjAwOS0wOC0wNCAxMzozNjozNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBwb3N0IGVycm9yIG1lc3NhZ2UgaWYgbm8gcGFkcyB0byBwdXNoIEVPUyBldmVudCBvbgotCi0yMDA5LTA4LTA0IDExOjM5OjU5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCB0eXBvIGluIHdhcm5pbmcgbWVzc2FnZQotCi0yMDA5LTA4LTA0IDExOjM5OjM5ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBzb21lIGJ1ZmZlciByZWYgaGFuZGxpbmcKLQotMjAwOS0wOC0wNCAxMTozNzoxNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBkbyBub3QgZXhjZWVkIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBzdHJlYW1zCi0KLTIwMDktMDgtMDQgMTE6MzU6MTggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogcHJldmVudCBkb3VibGUgdW5yZWY7IGdzdF9hdmlfZGVtdXhfcGFyc2VfYXZpaCBhbHJlYWR5IHVucmVmcwotCi0yMDA5LTA4LTA0IDExOjMyOjI3ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHZlcmlmeSBzaXplIG9mIElORk8gTElTVCB0byBzYXRpc2Z5IHN1YnNlcXVlbnQgZXhwZWN0YXRpb25zCi0KLTIwMDktMDctMjkgMTU6MjU6MzggKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogY2hlY2sgdmlkZW8gc3RyZWFtIGZyYW1lcmF0ZSBhZ2FpbnN0IGF2aSBoZWFkZXIgZnJhbWUgZHVyYXRpb24KLQkgIFRoZSBmb3JtZXIgbWlnaHQgYmUgYm9ndXMgaW4gc2lsbHkgY2FzZXMsIGFuZCB0aGUgbGF0dGVyIHNlZW1zIHRvCi0JICBjYXJyeSBtb3JlIHdlaWdodC4KLQotMjAwOS0wOC0wNCAxMjoxNjoxMyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBzdHJlYW1saW5lIHN0cmVhbSBkdXJhdGlvbiBjYWxjdWxhdGlvbgotCi0yMDA5LTA3LTAzIDE0OjA0OjEzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkgIGR2MTM5NHNyYzogRml4IGVsZW1lbnQgZm9yIGxpdmUgdXNhZ2UuLi4gd2hpY2ggaGFzIGJlZW4gYnJva2VuIGZvciAyIHllYXJzIDooCi0JICBUaGlzIGlzIGEgbGl2ZSBzb3VyY2UsIHRoZXJlZm9yZToKLQkgICogVXNlIEdTVF9GT1JNQVRfVElNRSBhcyB0aGUgZGVmYXVsdCBmb3JtYXQKLQkgICogc2V0X3RpbWVzdGFtcCB0byBUcnVlCi0JICAqIHByb3Blcmx5IGltcGxlbWVudCBxdWVyeSBsYXRlbmN5LgotCSAgVGhpcyBhbGxvd3MgZXhwZWN0ZWQgbGl2ZSB1c2FnZSBsaWtlIDogcGxheWJpbjIgdXJpPWR2Oi8vCi0KLTIwMDktMDgtMDkgMDk6NDM6NDEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgcmF3MTM5NDogUmVtb3ZlIHVubmVlZGVkIHZhcmlhYmxlCi0KLTIwMDktMDgtMDkgMDk6NDM6MjkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IHJlbW92ZSBkZWFkIGFzc2lnbm1lbnRzCi0KLTIwMDktMDgtMDkgMDk6NDM6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgcnRwOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cyBhbmQgcmVzdWx0aW5nIHVubmVlZGVkIHZhcmlhYmxlcy4KLQotMjAwOS0wOC0xMCAwOTo1MzoyOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSogZXh0L3dhdnBhY2svbWQ1LmM6Ci0JKiBleHQvd2F2cGFjay9tZDUuaDoKLQkgIHdhdnBhY2s6IFVzZSBHTGliIEdDaGVja3N1bSBpbnN0ZWFkIG9mIG91ciBvd24gTUQ1IGltcGxlbWVudGF0aW9uCi0JICBUaGlzIHJlcXVpcmVzIEdMaWIgMi4xNiBidXQgdGhhdCB2ZXJzaW9uIGlzIGFscmVhZHkgcmVxdWlyZWQgYnkgY29yZSBhbnl3YXkuCi0KLTIwMDktMDgtMDggMDA6NDc6NDggLTAzMDAgIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIG1hdHJvc2thOiBBZGRzIHN1cHBvcnQgdG8gbXV4aW5nL2RlbXV4aW5nIFdNQQotCSAgQWRkcyBzdXBwb3J0IGZvciBtdXhpbmcgd21hIGF1ZGlvIGZhbWlseSBhbmQgZml4ZXMKLQkgIGRlbXV4aW5nIG9mIHdtYSBmYW1pbHkgaW4gbWF0cm9za2FkZW11eC4gbWF0cm9za2FkZW11eAotCSAgd2FzIGJyb2tlbiBiZWNhdXNlIGl0IG1pc3NlZCBjb2RlY19kYXRhLgotCi0yMDA5LTA4LTA2IDIwOjE1OjE3IC0wMzAwICBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2FtdXg6IGFkZHMgc3VwcG9ydCBmb3Igd212IGZhbWlseQotCSAgQWRkcyBzdXBwb3J0IHRvIFdNVjEsIFdNVjIsIFdNVjMgYW5kIG90aGVyIGZhbWlseSBmb3JtYXRzIHRoYXQKLQkgIGFyZSBzaWduYWxlZCBieSB0aGUgJ2Zvcm1hdCcgZmllbGQgaW4gdGhlIGNhcHMgKGkuZS4gV1ZDMSkuCi0JICBQYXJ0aWFsbHkgZml4ZXMgIzU3NjM3OAotCi0yMDA5LTA4LTA5IDE0OjE5OjQyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgdjRsMnNyYzogaWYgbWF4ID09IG1pbiB3aWR0aC9oZWlnaHQgcHV0IGFuIGludCBpbiB0aGUgcHJvYmVkIGNhcHMsIG5vdCBhbiBpbnQgcmFuZ2UKLQkgIEZpeGVzICM1NjAwMzMuCi0KLTIwMDktMDgtMDkgMTM6NTg6MDcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgIG9zeGF1ZGlvc3JjOiBpZiBtYXhfY2hhbm5lbHMgPT0gbWluX2NoYW5uZWxzLCB1c2UgYW4gaW50IGluc3RlYWQgb2YgYW4gaW50IHJhbmdlIGluIHRoZSBjYXBzCi0KLTIwMDktMDgtMDkgMTI6NTI6MTcgKzAyMDAgIExvbmVTdGFyIDxsb25lQGF1dnRlY2guY29tPgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzoKLQkgIGlkM2RlbXV4OiBUcnkgR1NUXypfVEFHX0VOQ09ESU5HIGFuZCBsb2NhbGUgZW5jb2RpbmcgaWYgdGFncyBhcmUgbm90IFVURjgKLQkgIEZpeGVzIGJ1ZyAjNDk5MjQyLgotCi0yMDA5LTA4LTA5IDAxOjI5OjUwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY29uZmlndXJlOiBidW1wIGNvcmUvYmFzZSByZXF1aXJlbWVudHMgdG8gbGF0ZXN0IHJlbGVhc2UKLQkgIFRvIGF2b2lkIGNvbmZ1c2lvbi4KLQotMjAwOS0wOC0wOSAwMToyNzowMSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zsdm11eC5jOgotCSAgY2hlY2s6IGZpeCBmbHZtdXggdW5pdCB0ZXN0IG9uIGJpZyBlbmRpYW4gbWFjaGluZXMKLQkgIGZsdm11eCBvbmx5IGFjY2VwdHMgcmF3IGF1ZGlvIGluIGxpdHRsZSBlbmRpYW4sIGJ1dCBhdWRpb3Rlc3RzcmMKLQkgIHByb2R1Y2VzIGF1ZGlvIGluIHRoZSBuYXRpdmUgZW5kaWFubmVzcywgd2hpY2ggbWFrZXMgbGlua2luZwotCSAgYmV0d2VlbiBhdWRpb3Rlc3RzcmMgYW5kIGZsdm11eCBmYWlsIG9uIGJpZyBlbmRpYW4gbWFjaGluZXMuIEFkZAotCSAgYW4gYXVkaW9jb252ZXJ0IGVsZW1lbnQgaW4gYmV0d2VlbiB0aGUgdHdvIHRvIGZpeCB0aGlzLgotCi0yMDA5LTAyLTE1IDE4OjQ5OjQ0ICswMDAwICBWaW5jZW50IFBlbnF1ZXJjJ2ggPG9nZy5rLm9nZy5rQGdvb2dsZW1haWwuY29tPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIG1hdHJvc2thOiBhZGQga2F0ZSBzdWJ0aXRsZSBzdXBwb3J0IHRvIG1hdHJvc2thIG11eGVyIGFuZCBkZW11eGVyCi0JICBTZWUgIzUyNTc0My4KLQotMjAwOS0wOC0wNyAxNjo1MTo0NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pZDNkZW11eC9pZDN2Mi4zLjAuaHRtbDoKLQkgIGlkM2RlbXV4OiBhZGQgSUQzIHYyLjMgc3BlYyBhcyB3ZWxsCi0KLTIwMDktMDgtMDcgMTY6NDI6MzkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzoKLQkgIGlkM2RlbXV4OiBzaXplcyBpbiBJRDMgdjIuMyBhcmUgdW5saWtlbHkgdG8gYmUgc3luYy1zYWZlIGludGVnZXJzCi0JICBJbiBJRDMgdjIuMyBjb21wcmVzc2VkIGZyYW1lcyB3aWxsIGhhdmUgYSA0LWJ5dGUgZGF0YSBsZW5ndGggaW5kaWNhdG9yCi0JICBhZnRlciB0aGUgZnJhbWUgaGVhZGVyIHRvIGluZGljYXRlIHRoZSBzaXplIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KLQkgIFRoaXMgaW50ZWdlciBpcyB1bmxpa2VseSB0byBiZSBhIHN5bmMtc2FmZSBpbnRlZ2VyIGZvciB2Mi4zIHRhZ3MsCi0JICBvbmx5IGluIHYyLjQgaXQncyBzeW5jLXNhZmUuCi0KLTIwMDktMDgtMDcgMTY6MzY6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgaWQzZGVtdXg6IGZpeCB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKLQotMjAwOS0wOC0wNyAxNjowMjoyMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5oOgotCSogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jOgotCSogdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9maWxlcy9pZDMtNTg4MTQ4LXVuc3luY2VkLXYyNC50YWc6Ci0JICBpZDNkZW11eDogZml4IHBhcnNpbmcgb2YgdW5zeW5jJ2VkIElEMyB2Mi40IHRhZ3MgYW5kIGZyYW1lcwotCSAgUmV2ZXJzaW5nIHRoZSB1bnN5bmNocm9uaXNhdGlvbiBzZWVtcyB0byB3b3JrIHNsaWdodGx5IGRpZmZlcmVudGx5Ci0JICBmb3IgSUQzIHYyLjMgdGFncyBhbmQgdjIuNCB0YWdzOiB2Mi4zIHRhZ3MgZG9uJ3QgaGF2ZSBzeW5jc2FmZSBmcmFtZQotCSAgc2l6ZXMgaW4gdGhlIGZyYW1lIGhlYWRlciwgc28gdGhlIHVuc3luY2hyb25pc2F0aW9uIGlzIGFwcGxpZWQgdG8KLQkgIHRoZSB3aG9sZSBmcmFtZSBkYXRhIGluY2x1ZGluZyBhbGwgdGhlIGZyYW1lIGhlYWRlcnMuIHYyLjQgZnJhbWVzCi0JICBoYXZlIHN5bmMtc2FmZSBzaXplcywgaG93ZXZlciwgc28gdGhlIHVuc3luY2hyb25pc2F0aW9uIG9ubHkgbmVlZHMKLQkgIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGFjdHVhbCBmcmFtZSBkYXRhLCBhbmQgaXQgc2VlbXMgdGhhdCdzIHdoYXQncwotCSAgYmVpbmcgZG9uZSBhcyB3ZWxsLiBTbyB3ZSBuZWVkIHRvIHVuZG8gdGhlIHVuc3luY2hyb25pc2F0aW9uIG9uIGEKLQkgIHBlci1mcmFtZSBiYXNpcyBmb3IgdjIuNCB0YWdzIGZvciB0aGluZ3MgdG8gd29yayBwcm9wZXJseS4KLQkgIEZpeGVzIGV4dHJhY3Rpb24gb2YgY292ZXJhcnQvaW1hZ2VzIGZyb20gQVBJQyBmcmFtZXMgaW4gSUQzIHYyLjQKLQkgIHRhZ3MgKCM1ODgxNDgpLgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgdGhpcyBhcyB3ZWxsLgotCi0yMDA5LTA4LTA2IDIxOjI0OjE0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIHNvdXBodHRwc3JjOiBVc2UgU09VUF9NRVRIT0RfR0VUIGluc3RlYWQgb2YgIkdFVCIgc3RyaW5nCi0JICBGaXhlcyBidWcgIzU5MDk3MC4KLQotMjAwOS0wOC0wNiAxMzowMDo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogc2V0IHRoZSBkZWZhdWx0IHNsYXZlIG1ldGhvZCB0byBza2V3Ci0JICBTZXQgdGhlIGRlZmF1bHQgc2xhdmUgbWV0aG9kIHRvIHRoZSBtdWNoIGJldHRlciBza2V3IGFsZ29yaXRobS4gVGhpcyBpcyB0aGUKLQkgIGRlZmF1bHQgaW4gdGhlIG5ldyBiYXNlIGNsYXNzIGJ1dCB3ZSBvdmVycmlkZSB0aGlzIGhlcmUgYXMgd2VsbCBmb3IgdGhlCi0JICB1cGNvbW1pbmcgcmVsZWFzZS4KLQotMjAwOS0wOC0wNiAxMDoyMDozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IGZpeCBjb21waWxhdGlvbiB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcKLQotMjAwOS0wOC0wMyAxODo1OTozMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IHVzZSBhcnJheSBpbnN0ZWFkIG9mIHF1ZXVlCi0KLTIwMDktMDgtMDMgMTg6NTU6MTkgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSAgcnRwaDI2NHBheTogcHVzaCBOQUxzIG9ubHkgYWZ0ZXIgU1BTL1BQUwotCSAgcGFyc2UgY29tcGxldGUgKGJ5dGVzdHJlYW0pIGJ1ZmZlciBmb3IgU1BTL1BQUyBiZWZvcmUgcHVzaGluZyBOQUxzLgotCSAgRml4ZXMgIzU2NDUwMS4KLQotMjAwOS0wOC0wNCAxNDo0NDozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkgIHY0bDI6IERpcmVjdGx5IHVzZSBHU1RfUFRSX0ZPUk1BVCBmb3IgcHJpbnRpbmcgY2FwcyB3aXRoIHRoZSBMT0dfQ0FQUyBtYWNybwotCi0yMDA5LTA4LTA0IDExOjE3OjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JICBydHBxZG0yZGVwYXk6IEZpeCBkZWJ1ZyBzdGF0ZW1lbnQuCi0KLTIwMDktMDgtMDQgMDk6MzI6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSAgdjRsMjogUmVtb3ZlIHNvbWUgT01BUCBzcGVjaWZpYyBoYWNrcwotCSAgVGhleSByZXF1aXJlIHNwZWNpYWwgYnVpbGQgZmxhZ3MgYW5kIGFyZSBub3QgdXNlZnVsIGluIGdlbmVyYWwuCi0KLTIwMDktMDgtMDQgMDk6MjI6MjkgKzAyMDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMnNpbms6IGNoYW5nZSB3aGVyZSBidWZmZXJzIGdldCBkZXF1ZXVlZAotCSAgSXQgc2VlbXMgdG8gY2F1c2Ugc3RyYW5nZSBvY2Nhc2lvbmFsIGhpZ2ggbGF0ZW5jaWVzIChhbG1vc3QgMjAwbXMpIHdoZW4gZGVxdWV1aW5nIGJ1ZmZlcnMgZnJvbSBfYnVmZmVyX2FsbG9jKCkuICBJdCBpcyBzaW1wbGVyIGFuZCBzZWVtcyB0byB3b3JrIG11Y2ggYmV0dGVyIHRvIGRxYnVmIGZyb20gdGhlIHNhbWUgdGhyZWFkIHRoYXQgaXMgcXVldWluZyB0aGUgbmV4dCBidWZmZXIuCi0KLTIwMDktMDgtMDQgMDk6MTQ6MjAgKzAyMDAgIFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzaW5rLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc2luay5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgdjRsMjogQWRkIHY0bDJzaW5rIGVsZW1lbnQKLQkgIFRoaXMgYWxzbyBkb2VzIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKLQkgICgxKSBwdWxsIHRoZSBidWZmZXJwb29sIGNvZGUgb3V0IGludG8gZ3N0djRsMmJ1ZmZlcnBvb2wuYywgYW5kIG1ha2UgYQotCSAgYml0IG1vcmUgZ2VuZXJpYyBzbyBpdCBjYW4gYmUgdXNlZCBib3RoIGZvciB2NGwyc3JjIGFuZCB2NGwyc2luawotCSAgKDIpIG1vdmUgc29tZSBvZiB0aGUgZGV2aWNlIHByb2JpbmcvY29uZmlndXJhdGlvbi9jYXBzIHN0dWZmIGludG8KLQkgIGdzdHY0bDJvYmplY3QuYyBzbyBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGR1cGxpY2F0ZWQgYmV0d2VlbgotCSAgdjRsMnNyYyBhbmQgdjRsMnNpbmsKLQkgIEZpeGVzIGJ1ZyAjNTkwMjgwLgotCi0yMDA5LTA4LTA0IDA3OjA3OjQ1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBmbHZtdXg6IEVuYWJsZSB1bml0IHRlc3Qgbm93IHRoYXQgaXQgcGFzc2VzCi0KLTIwMDktMDgtMDMgMjE6MjE6MzkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JICBydHBxZG0yZGVwYXkscnRwc3YzdmRlcGF5OiBBZGQgZGVidWdnaW5nIGNhdGVnb3J5LgotCi0yMDA5LTA4LTAzIDIxOjIyOjQ4ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5Lmg6Ci0JICBydHBxZG0yZGVwYXk6IEhhbmRsZSBnYXBzIGluIGluY29taW5nIHBhY2tldHMuCi0JICBXaGVuZXZlciB3ZSBzZWUgYSBnYXAsIHdlIGZsdXNoIHRoZSB0ZW1wb3JhcnkgcGFja2V0cyAoYnV0IG5vdCB0aGUgYWRhcHRlcikuIElmIHdlCi0JICBoYWQgc29tZSBkYXRhIHRlbXBvcmFyaWx5IHN0b3JlZCBpdCB3aWxsIGJlIG91dHB1dHRlZCAodGhlIHNvdW5kIHdpbGwgc291bmQgYSBiaXQKLQkgIGdhcmJsZWQuLi4gYnV0IHRoYXQncyBob3cgaXQgc291bmRzIG9uIE1hY09TWCA6KQotCi0yMDA5LTA4LTAzIDE5OjAxOjA3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmM6Ci0JICBydHBxZG1kZXBheTogRml4IENSQyBjYWxjdWxhdGlvbiBhbmQgcmVtb3ZlIGNvbW1lbnRlZCBjb2RlLgotCi0yMDA5LTA4LTAyIDEzOjQyOjEyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuaDoKLQkgIHJ0cDogTmV3IFFETTIgcnRwIGRlcGF5bG9hZGVyLgotCSAgUmV2ZXJzZS1lbmdpbmVlcmVkIGJ5IGNvbXBhcmluZzoKLQkgICogQSBydHAgaGludGVkIGZpbGUgcHJvdmlkZWQgYnkgRGFyd2luU3RyZWFtaW5nU2VydmVyCi0JICAqIFRoZSBvdXRwdXQgcHJvY3VlZCBieSBEU1MgZm9yIHRoYXQgc2FtZSBmaWxlCi0JICBBbHNvIHVzZWQgdmFyaW91cyBzdHJlYW1pbmcgc291cmNlcyBhdmFpbGFibGUgb24gdGhlIGludGVybmV0IHRvIGZpbmUtdHVuZQotCSAgdGhlIGNvZGUuCi0JICBUaGUgaGVhZGVyL2NvZGVjX2RhdGEgZXh0cmFjdGlvbiBtZXRob2RzIGFyZSBmcm9tIEZGTXBlZyAoTEdQTCkuCi0KLTIwMDktMDgtMDMgMjE6MjQ6NDQgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JICBydHBzdjN2ZGVwYXk6IFByb3Blcmx5IGZpbGwgY29kZWNfZGF0YSBhbmQgY2xlYW51cCBjb2RlIGEgYml0ZSBtb3JlLgotCi0yMDA5LTA4LTAzIDE5OjAyOjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuaDoKLQkgIHJ0cHN2M3ZkZXBheTogT25seSBvdXRwdXQgYnVmZmVycyBvbmNlIHdlJ3JlIGNvbmZpZ3VyZWQuCi0KLTIwMDktMDgtMDMgMTk6MDI6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JICBydHBzdjN2ZGVwYXk6IEFkZCBtb3JlIGVuY29kaW5nLW5hbWUgdmFyaWFudHMKLQotMjAwOS0wOC0wMyAyMDowODozMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Zsdm11eC5jOgotCSAgZmx2bXV4OiBGaXggdW5pdCB0ZXN0IHRvIGNvcnJlY3RseSBoYW5kbGUgcmVxdWVzdCBwYWRzCi0JICBSZXF1ZXN0IHBhZHMgYXJlIHJlbW92ZWQgYnkgdGhlIGVsZW1lbnQgaW5zdGFuY2UgaW4gUEFVU0VELT5SRUFEWQotCSAgc28gd2UgbmVlZCB0byByZS1yZXF1ZXN0IHBhZHMgZm9yIGV2ZXJ5IHJ1biBhbmQgbGluayB0aGVtIGFnYWluLgotCSAgTGFzdCBmaXggZm9yIGJ1ZyAjNTkwNDQ3LgotCi0yMDA5LTA4LTAzIDIwOjA4OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkgIGZsdm11eDogRml4IHdyaXRpbmcgb2YgdGhlIGluZGV4IGZvciA8IDEyOCBidWZmZXJzCi0JICBQYXJ0aWFsbHkgZml4ZXMgYnVnICM1OTA0NDcuCi0KLTIwMDktMDgtMDMgMjA6MDc6MDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBGaXggcmVzZXR0aW5nIG9mIHRoZSBlbGVtZW50Ci0JICBSZXNldCB0aGUgaGF2ZV92aWRlby9oYXZlX2F1ZGlvIGZsYWdzIGFuZCBtYWtlIHN1cmUgdG8KLQkgIHByb3Blcmx5IHJlbGVhc2UgdGhlIHJlcXVlc3QgcGFkcy4KLQkgIFBhcnRpYWxseSBmaXhlcyBidWcgIzU5MDQ0Ny4KLQotMjAwOS0wOC0wMyAxODoxMzo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3QgYWRkIG5vbi11dGY4IGNoYXJzIHRvIHN0cnVjdHVyZXMKLQotMjAwOS0wOC0wMyAxODowMjozMSArMDIwMCAgTHVjIERlc2NoZW5hdXggPGx1Yy5kZXNjaGVuYXV4IGF0IGZyZWVzdXJmLmNoPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuaDoKLQkgIGpwZWdkZXBheTogdXNlIGF0dHJpYnV0ZXMgZm9yIGV4dHJhIHByb3BlcnRpZXMKLQkgIFVzZSBzb21lIG9mIHRoZSBTRFAgYXR0cmlidXRlcyB3aGVuIHRoZXkgYXJlIHByZXNlbnQgdG8gc3BlY2lmeSB0aGUgb3V0cHV0Ci0JICBkaW1lbnNpb24gYW5kIGZyYW1lcmF0ZS4gVGhpcyBhbGxvd3MgdXMgdG8gcmVjZWl2ZSBqcGVnIGZyYW1lcyBsYXJnZXIgdGhhbgotCSAgMjA0MCB3aWR0aC9oZWlnaHQuCi0JICBGaXhlcyAjNTY0NDM3Ci0KLTIwMDktMDgtMDMgMTg6MDE6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvUkVBRE1FOgotCSAgUlRQIGRvY3M6IHVwZGF0ZSB3aXRoIGF0dHJpYnV0ZXMgaW4gY2FwcwotCi0yMDA5LTA4LTAzIDE3OjIxOjQ0ICswMjAwICBMdWMgRGVzY2hlbmF1eCA8bHVjLmRlc2NoZW5hdXggYXQgZnJlZXN1cmYuY2g+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHB1dCBhbGwgU0RQIGF0dHJpYnV0ZXMgb24gY2FwcwotCSAgUHV0IHRoZSBTRFAgYXR0cmlidXRlcyBvbiB0aGUgY2FwcyB0b28gc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGJ5Ci0JICBkZXBheWxvYWRlcnMuCi0JICBTZWUgIzU2NDQzNwotCi0yMDA5LTA4LTAzIDEzOjMyOjEyICswMjAwICBKb25hdGhhbiBUZWxsaWVyIDxqb25hdGhhbi50ZWxsaWVyIGF0IGdtYWlsLmNvbT4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZXNyYzogaW5pdGlhbGl6ZSB0aGUgcHJvYmUgd2l0aCB0aGUgc2VydmVyCi0JICBXaGVuIGNyZWF0aW5nIGEgbmV3IHByb2JlLCBwYXNzIHRoZSBzZXJ2ZXIgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIHN0cmluZy4KLQkgIGZpeGVzICM1OTA0MDEKLQotMjAwOS0wOC0wMiAxMTo0NDowMyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBtdWx0aXVkcHNpbms6IGRvbid0IGRvIHRoaW5ncyB3aXRoIHNpZGUtZWZmZWN0cyBpbnNpZGUgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKQotCSAgU29tZW9uZSBtaWdodCBjb21waWxlIHRoaXMgY29kZSB3aXRoIC1ER19ESVNBQkxFX0FTU0VSVCBzb21lIGRheS4KLQotMjAwOS0wOC0wMSAyMTozOTozMCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZG9uJ3QgZG8gbG9naWMgd2l0aGluIGdfYXNzZXJ0KCkgc3RhdGVtZW50cwotCSAgT3RoZXJ3aXNlIHRoYXQgY29kZSB3aWxsIGp1c3QgYmUgZXhwYW5kZWQgdG8gbm90aGluZyB3aGVuIGNvbXBpbGVkCi0JICAtREdfRElTQUJMRV9BU1NFUlQgKFBTOiB3aHkgaXMgbWFpbmxvb3Bfc3RhcnQoKSBjYWxsZWQgaW4gdGhlIGluaXQKLQkgIGZ1bmN0aW9uIGFuZCBub3Qgd2hlbiBjaGFuZ2luZyBzdGF0ZSB0byBSRUFEWT8pCi0KLTIwMDktMDgtMDEgMTc6MDc6NDIgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBzZW5kIG5ld3NlZ21lbnQgZXZlbnQgd2hlbiBvcGVyYXRpbmcgcHVzaC1iYXNlZCBhbmQgdW5mcmFtZWQKLQkgIEZvciBzb21lIHJlYXNvbiBmbGFjIGRvZXNuJ3QgY2FsbCBvdXIgbWV0YWRhdGEgY2FsbGJhY2sgd2hlbiB3ZSBvcGVyYXRlCi0JICBpbiBwdXNoIG1vZGUgd2l0aCB1bmZyYW1lZCBpbnB1dCwgYnV0IHRoYXQncyB3aGVyZSB3ZSBzZXQgdXAgdGhlCi0JICBuZXdzZWdtZW50IGV2ZW50IChzaW5jZSB0aGF0J3Mgd2hlcmUgd2UnZCBnZXQgdGhlIGR1cmF0aW9uIGZyb20gdGhlCi0JICBzdHJlYW0gaW5mbyBoZWFkZXIpLCBzbyB3ZSBkaWRuJ3Qgc2VuZCBhIG5ld3NlZ21lbnQgZXZlbnQgYXQgYWxsIGluIHRoaXMKLQkgIGNhc2UuIEhhY2sgYXJvdW5kIHRoaXMgYnkgc3RvcmluZyBhIGdlbmVyaWMgbmV3c2VnbWVudCBldmVudCBmb3Igbm93Ci0JICB3aGljaCB3aWxsIGJlIHVzZWQgaWYgd2UgZG9uJ3QgcmVwbGFjZSBpdCB3aXRoIGEgYmV0dGVyIG9uZSB0aGF0Ci0JICBpbmNsdWRlcyB0aGUgZHVyYXRpb24uCi0KLTIwMDktMDgtMDEgMTY6NDg6MzYgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBzbWFsbCBjbGVhbnVwcwotCSAgUmVtb3ZlIHNvbWUgY2FsbGJhY2sgaW5kaXJlY3Rpb25zIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkIGJlY2F1c2UKLQkgIHRoZXJlJ3Mgb25seSBvbmUgZGVjb2RlciBvYmplY3QgdHlwZSBub3cuIEFsc28gcmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KLQotMjAwOS0wOC0wMSAxNToyMjo0OSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGZsYWNkZWM6IHVzZSBnc3RfYWRhcHRlcl9jb3B5KCkgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYnVmZmVyIG1lcmdlcwotCSAgZ3N0X2FkYXB0ZXJfcGVlaygpIHdpbGwgbWVyZ2UgYnVmZmVycyBhcyBuZWVkZWQsIHdoaWNoIHdlIGNhbiBhdm9pZAotCSAgaGVyZSBzaW5jZSB3ZSdyZSBkb2luZyBhIG1lbWNweSBhbnl3YXkgYW5kIHRoZW4gZmx1c2ggdGhlIGNvcGllZAotCSAgZGF0YSBmcm9tIHRoZSBhZGFwdGVyIHJpZ2h0IGF3YXkuCi0KLTIwMDktMDgtMDEgMDA6MDA6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiByZXBhaXIgc29tZSBicm9rZW4gaW5kZW50aW5nCi0KLTIwMDktMDgtMDEgMTI6MTk6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9mbHZtdXguYzoKLQkgIGNoZWNrczogYWRkIGJhc2ljIHVuaXQgdGVzdCBmb3IgZmx2bXV4LCBidXQgZGlzYWJsZSBpdCBmb3Igbm93Ci0JICBCYXNpYyB1bml0IHRlc3QgZm9yIGZsdm11eC4gRmFpbHMgbWlzZXJhYmx5LCBoZW5jZSBkaXNhYmxlZCBmb3Igbm93LgotCi0yMDA5LTA3LTMxIDIzOjI4OjEyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2ZGVtdXguYzoKLQkqIHRlc3RzL2ZpbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZmlsZXMvcGNtMTZzaW5lLmZsdjoKLQkgIGNoZWNrOiBhZGQgYmFzaWMgdW5pdCB0ZXN0IGZvciBmbHZkZW11eAotCSAgSW4gcGFydGljdWxhciwgdGVzdCByZS11c2Ugb2YgZmx2ZGVtdXggaW4gYm90aCBwdWxsIGFuZCBwdXNoIG1vZGUKLQkgIChzZWUgIzU4MzAzMCkuCi0KLTIwMDktMDctMzEgMjA6MjU6MTcgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBmaXggaW52YWxpZCB3cml0ZSBjYXVzZWQgYnkgdXNpbmcgc2l6ZW9mKCJzdHJpbmciKSBhcyBsZW5ndGgKLQkgIHNpemVvZigiZm9vIikgaW5jbHVkZXMgdGhlIHN0cmluZydzIE5VTC10ZXJtaW5hdG9yIGluIHRoZSBzaXplIHJldHVybmVkLAotCSAgYnV0IHdlJ3JlIHdyaXRpbmcgc3RyaW5ncyBoZXJlIHdpdGggYW4gZXhwbGljaXQgc2l6ZSBhdCB0aGUgYmVnaW5uaW5nCi0JICBhbmQgbm8gTlVMLXRlcm1pbmF0b3IuIEluIG1vc3QgY2FzZXMgdXNpbmcgc2l6ZW9mKCJmb28iKSBhcyBsZW5ndGggaW4KLQkgIG1lbWNweSBpcyBub3QgaGFybWZ1bCwgYnV0IGl0IGlzIHdoZXJlIHRoZSBzdHJpbmcgZ29lcyByaWdodCBhdCB0aGUKLQkgIGVuZCBvZiBvdXIgYnVmZmVyIHRvIHdyaXRlLCBzaW5jZSB3ZSBkb24ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhhdAotCSAgTlVMIHRlcm1pbmF0b3IuCi0KLTIwMDktMDctMjcgMTg6NDQ6NDUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwOiBVc2UgIkdFVCIgaW5zdGVhZCBvZiBTT1VQX01FVEhPRF9HRVQuIEZpeGVzIGJ1aWxkIHdpdGggbGlic291cC0yLjcuKgotCSAgVGhpcyBpcyBkdWUgdG8gYSBxdWFsaXR5IEFQSSBjaGFuZ2UgaW4gbGlic291cCAyLjcuIFNPVVBfTUVUSE9EXyogYXJlIG5vdwotCSAgaW50ZWdlcnMgYW5kIG5vdCBzdHJpbmdzLi4uIHRoZXkgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBuYW1lcy4KLQotMjAwOS0wNy0zMCAxNzo1Nzo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICBqcGVnOiB1c2UgbG9uZ2VyIG1hY3JvIG5hbWVzIHRvIG5vdCBjbGFzaCB3aXRoIHNvbWUgc3R1cGlkIHdpbmRvd3MgZGVmaW5lcwotCSAgbGlianBlZyBoZWFkZXJzIHB1bGwgc29tZSB3aW5kb3dzIHN5c3RlbSBpbmxjdWRlcyAob24gd2luZG93cykgdGhhdCBjb250YWluIGEKLQkgIGRlZmluZSBmb3IgREVGQVVMVF9RVUFMSVRZLgotCi0yMDA5LTA3LTI5IDE0OjMxOjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEZpeCBsYXN0IGNvbW1pdCBhbmQgaW1wcm92ZSByZWFkYWJpbGl0eQotCi0yMDA5LTA3LTI0IDE5OjA0OjMxICswNDAwICDQoNGD0YHQu9Cw0L0g0JjQttCx0YPQu9Cw0YLQvtCyIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgRml4ZWQgdGhlIGZpeCBmb3IgVElNRS0+REVGQVVMVCBjb252ZXJzaW9uLgotCSAgRml4ZXMgYnVnICM1NzgwNTIgYWdhaW4uCi0KLTIwMDktMDctMjkgMTM6Mzg6MDMgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JICBydHBzdjNkZXBheTogRml4IHdpZHRoL2hlaWdodCBjYWxjdWxhdGlvbiwgYnJpbmcgdXAgdG8gbWFyZ2luYWwgcmFuay4KLQkgIEJhc2VkIG9uIGRvY3VtZW50YXRpb24gZm91bmQgb24gaHR0cDovL3dpa2kubXVsdGltZWRpYS5jeC8KLQotMjAwOS0wNy0yOSAxMjoxMzoyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JICBwdWxzZTogY29uZGl0aW9uYWxseSBjb21waWxlIG5ld2VyIHN0dWZmCi0JICBjb25maWd1cmVkX3Npbmsvc291cmNlX3VzZWMgaW4gdGhlIHRpbWluZ19pbmZvIGlzIG9ubHkgc2luY2UgMC45LjExIHNvCi0JICBjb25kaXRpb25hbGx5IGNvbXBpbGUgdGhpcyBpbmZvcm1hdGlvbi4KLQkgIGZpeGVzICM1OTAwMzgKLQotMjAwOS0wNy0yOCAxODoyOTowNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzcmMuaDoKLQkgIHB1bHNlc3JjOiBjbGVhbnVwcwotCSAgS2VlcCB0cmFjayBvZiB0aGUgcGF1c2VkIHN0YXRlIG9mIHRoZSBzb3VyY2UgYW5kIGxlYXZlIHRoZSByZWFkIGZ1bmN0aW9uIHdoZW4KLQkgIHBhdXNlZC4KLQkgIGRvbid0IHdhaXQgZm9yIGEgbGF0ZW5jeSB1cGRhdGUgd2hlbiB0aGUgZGVsYXkgaXMgbm90IHlldCBrbm93biBidXQgc2ltcGx5Ci0JICByZXR1cm4gMCBpbnN0ZWFkIG9mIGJsb2NraW5nLgotCSAgS2VlcCB0cmFjayBvZiB0aGUgY29ya2VkIHN0YXRlIG9mIHRoZSBzdHJlYW0uCi0JICBGaXggdGhlIHN0YXRlIGNoYW5nZXMuCi0KLTIwMDktMDctMjggMTY6MTE6MTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2VzcmM6IHNldCBtYXhsZW5ndGggYWx3YXlzIHRvIC0xCi0KLTIwMDktMDctMjggMTU6NTM6NTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmg6Ci0JICBwdWxzZXNyYzsgY2xlYW51cHMsIHJlcG9ydCByZWFsIGxhdGVuY3kKLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mbwotCSAgQXZvaWQgc29tZSB0eXBlIGNhc3RzCi0JICBSZXBvcnQgdGhlIHJlYWwgbGF0ZW5jeSB0byB0aGUgYXBwbGljYXRpb24uCi0KLTIwMDktMDctMjggMTY6MTE6MzYgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiB3aGVuIHNjYW5uaW5nIGZvciAweGZmIG1hcmtlciBlbmRzLCBlbnN1cmUgZGVzaXJlZCByZXN1bHQKLQkgIE90aGVyd2lzZSwgYW55IG5vbiAweGZmIGJ5dGUgYXQgZW5kIG9mIGRhdGEgd291bGQgYmUgbWlzdGFrZW4gZm9yCi0JICBhIHRhZyBieXRlLCBhbmQgaW4gY2FzZSBvZiBhIGZyYW1lX2xlbiAwIHRhZyBzdWJzZXF1ZW50bHkgbGVhZCB0byBhbgotCSAgaW5maW5pdGUgbG9vcC4KLQotMjAwOS0wNy0yOCAwMDozMDo0MyAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGFkZHMgc3VwcG9ydCB0byB3bWEKLQotMjAwOS0wNy0yOCAwMDowNzoxNSAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBhdmltdXg6IGFkZHMgc3VwcG9ydCB0byB3bXYKLQotMjAwOS0wNy0yNyAyMTozNDoyMiAtMDMwMCAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IERvd25ncmFkZSB3YXJuaW5nIG1lc3NhZ2UgdG8gZGVidWcKLQotMjAwOS0wNy0yNyAxMTo1MTozOSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBhdm9pZCB1c2luZyBpdmFsaWQgc3RyZWFtIGluZGV4ZXMKLQkgIHdoZW4gd2UgZ2V0IGFuIGludmFsaWQgc3RyZWFtIGluZGV4IGZyb20gcHVsc2UgYmVjYXVzZSB3ZSB3ZXJlIGp1c3Qgc3RhcnRpbmcsCi0JICBhdm9pZCB1c2luZyBpdCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgdm9sdW1lLgotCSAgRml4ZXMgIzU4OTM2NQotCi0yMDA5LTA3LTI0IDE5OjM4OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyYWRpb2FjLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgZWZmZWN0djogRG9uJ3QgYWxsb3cgY2FwcyBjaGFuZ2VzIGZvciBzb21lIGVmZmVjdHYgZmlsdGVycwotCSAgVGhlc2UgZmlsdGVycyB1c2UgaW5mb3JtYXRpb24gZnJvbSBwcmV2aW91cyBmcmFtZXMgdG8KLQkgIGdlbmVyYXRlIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBhIGNhcHMgY2hhbmdlIHdpbGwgbWFrZQotCSAgdGhlIGVmZmVjdCBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgYWdhaW4uCi0KLTIwMDktMDctMjQgMTk6Mzc6MDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmg6Ci0JICB3YXJwdHY6IE1ha2UgdGhlIHNpbmUgdGFibGUgZ2xvYmFsIGluc3RlYWQgb2YgaGF2aW5nIGl0IGluIGV2ZXJ5IGluc3RhbmNlCi0KLTIwMDktMDctMjQgMTA6NDc6NDQgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZzogbWFrZSBlbmNvZGVyIHdvcmsgd2l0aCBsaWJqcGVnIHY3Ci0JICBXZSBoYXZlIHRvIHNwZWNpZnkgZG9fZmFuY3lfZG93bnNhbXBsaW5nID0gRkFMU0UgaW4gdGhlIGVuY29kZXIgd2l0aCBkaWQgbm90IGV4aXN0IGJlZm9yZS4KLQotMjAwOS0wNy0yNCAwMDo0MjozMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmVkYWFlZSB0byA5NGY5NWUzCi0KLTIwMDktMDctMjMgMTI6MDY6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBJbXBsZW1lbnQgU0VFS0lORyBxdWVyeQotCSAgRml4ZXMgYnVnICM1ODk0MjMuCi0KLTIwMDktMDctMjIgMTE6MTY6MDYgKzAxMDAgIENvbGluIEd1dGhyaWUgPGNndXRocmllQG1hbmRyaXZhLm9yZz4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBGaXggYSBjb3VwbGUgZXJyb3IgbWVzc2FnZXMgdGhhdCBtZW50aW9uZWQgaW5jb3JyZWN0IGZ1bmN0aW9uIG5hbWVzLgotCSAgRml4ZXMgIzU4OTQ1OS4KLQotMjAwOS0wNy0yMyAxMTo1MDoxNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgIGZsdmRlbXV4OiBJbXBsZW1lbnQgU0VFS0lORyBxdWVyeQotCSAgQWxzbyBhZGQgc29tZSBtb3JlIHF1ZXJ5IHR5cGVzIHRvIHRoZSBhbnN3ZXIgb2YgdGhlIHF1ZXJ5IHR5cGUgZnVuY3Rpb24uCi0JICBGaXhlcyBidWcgIzU4OTQyNC4KLQotMjAwOS0wNy0yMSAxOTo0Njo1NSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkgIGZsYWNkZWM6IGZpeCBpbnRlcm1pdHRlbnQgRkxBQ19fU1RSRUFNX0RFQ09ERVJfQUJPUlRFRCBlcnJvcnMgd2hlbiBzZWVraW5nCi0JICBXaGVuIHNlZWtpbmcgaW4gYSBsb2NhbCBmbGFjIGZpbGUgKGllLiBvcGVyYXRpbmcgcHVsbC1iYXNlZCksIHRoZSBkZWNvZGVyCi0JICB3b3VsZCBvZnRlbiBqdXN0IGVycm9yIG91dCBhZnRlciB0aGUgbG9vcCBmdW5jdGlvbiBzZWVzIGEgREVDT0RFUl9BQk9SVEVECi0JICBzdGF0dXMuIFRoaXMsIGhvd2V2ZXIsIGlzIHRoZSByZWFkIGNhbGxiYWNrJ3Mgd2F5IG9mIHRlbGxpbmcgb3VyIGxvb3AKLQkgIGZ1bmN0aW9uIHRoYXQgcHVsbF9yYW5nZSBmYWlsZWQgYW5kIHN0cmVhbWluZyBzaG91bGQgc3RvcCwgaW4gdGhpcyBjYXNlCi0JICBiZWNhdXNlIG9mIHRoZSBmbHVzaC1zdGFydCBldmVudCB0aGF0IHRoZSBzZWVrIGhhbmRsZXIgcHVzaGVkIHVwc3RyZWFtCi0JICBmcm9tIHRoZSBzZWVraW5nIHRocmVhZC4gSGFuZGxlIHRoaXMgc2xpZ2h0bHkgYmV0dGVyIGJ5IHN0b3JpbmcgdGhlIGxhc3QKLQkgIGZsb3cgcmV0dXJuIGZyb20gcHVsbF9yYW5nZSwgc28gdGhlIGxvb3AgZnVuY3Rpb24gY2FuIGV2YWx1YXRlIGl0IHByb3Blcmx5Ci0JICB3aGVuIGl0IGVuY291bnRlcnMgYSBERUNPREVSX0FCT1JURUQgYW5kIHRha2UgdGhlIHJpZ2h0IGFjdGlvbi4KLQkgIEZpeGVzICM1Nzg2MTIuCi0KLTIwMDktMDctMjEgMTA6MDc6MDAgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgaW50ZXJsZWF2ZTogZml4IGluZGVudGluZyBhbmQgdXBncmFkZSB0d28gZGVidWdzIHRvIHdhcm5pbmdzLgotCSAgRml4IG5ld2xpbmVzIGluIHZhcmlhYmxlIGRlY2xzLiBDaGFuZ2UgdHdvIGRlYnVncyB0byBiZWNvbWUgd2FybmluZ3MgYXMgdGhleQotCSAgaW5kaWNhdGUgdGhhdCB0aGluZ3Mgd2lsbCBub3Qgd29yay4KLQotMjAwOS0wNy0yMSAxMDowNDozNiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmg6Ci0JICBqcGVnOiBjb2RlIGNsZWFudXBzIGZvciBlbmNvZGVyCi0JICBSZW1vdmUgc29tZSBkaXNhYmxlZCBjb2RlIGluIGVuY29kZXIuIFRyeSAjaWYgMCdlZCBjb2RlIGFuZCBhZGQgY29tbWVudHMgYWJvdXQKLQkgIHdoeSBpdCBpcyBkaXNhYmxlZC4gTW92ZSBpZGN0LW1ldGhvZCBlbnVtIHRvIGpwZWcuYyBhbmQgdXNlIGluIGJvdGggZW5jb2RlciBhbmQKLQkgIGRlY29kZXIuIEFkZCBpZGN0LW1ldGhvZCBwcm9wZXJ0eSB0byBlbmNvZGVyLgotCi0yMDA5LTA3LTIxIDA3OjUwOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBBbnN3ZXIgU0VFS0lORyBxdWVyaWVzIGluIHRoZSBvcmlnaW5hbCBmb3JtYXQKLQotMjAwOS0wNy0yMSAwMToxMjo0NCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICB1ZHB1dGlsczogaW5pdGlhbGl6ZSBzdHJ1Y3QgY29udGVudCB3aXRoIDAuCi0JICBGaXhlcyBzb21lIHJhbmRvbSBjcmFzaGVzLgotCi0yMDA5LTA3LTIwIDE5OjA5OjE5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHNldCBzb21lIHZhbHVlcyB0byB0aGVpciBkZWZhdWx0cwotCSAgU2V0IHRoZSBtaW5yZXEgYW5kIG1heGxlbmd0aCBidWZmZXIgYXR0cmlidXRlcyB0byAtMSB0byBsZXQgcHVsZXNlYXVkaW8gc2VsZWN0IGEKLQkgIHNlbnNpYmxlIHZhbHVlLgotCi0yMDA5LTA3LTIwIDE5OjA0OjA5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGRvbid0IHdhaXQgZm9yIHBvc3RlZCBtZXNzYWdlCi0JICBXZSBjYW4ndCB3YWl0IGZvciB0aGUgRU5URVIvTEVBVkUgbWVzc2FnZXMgdG8gYmUgYmUgcG9zdGVkIGJlY2F1c2UgdGhlIGJhc2UKLQkgIGNsYXNzIHNvbWV0aW1lcyBjYWxscyB0aGUgc3RhcnQgbWV0aG9kIHdpdGggdGhlIG9iamVjdCBsb2NrLCB3aGljaCB3b3VsZCBibG9jawotCSAgdGhlIG1lc3NhZ2UgcG9zdGluZy4KLQkgIEluc3RlYWQsIGp1c3QgYXNzdW1lIHRoYXQgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBwb3N0ZWQgc29vbiBhbmQgY29udGludWUuIFdlJ2xsCi0JICBoYXZlIHRvIGZpeCB0aGlzIGluIHRoZSBiYXNlIGNsYXNzLgotCi0yMDA5LTA3LTIwIDE4OjExOjMzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHVzZSByZWxhdGl2ZSBzZWVrcwotCSAgVXNlIHJlbGF0aXZlIHNlZWtzIGJlY2F1c2UgSSB3YXMgdG9sZCB0aGF0IGFic29sdXRlIHNlZWtzIGRvbid0IHdvcmsuCi0KLTIwMDktMDctMjAgMTY6NTI6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IEltcGxlbWVudCBTRUVLSU5HIHF1ZXJ5Ci0KLTIwMDktMDctMjAgMDg6MDc6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkgIGNhaXJvcmVuZGVyOiBBZGQgc3VwcG9ydCBmb3IgQVJHQi9CR1JBIGlucHV0Ci0JICBOb3RlIHRoYXQgdmlkZW90ZXN0c3JjIG91dHB1dHMgMTAwJSB0cmFuc3BhcmVudCB2aWRlbwotCSAgd2hpY2ggd2lsbCByZXN1bHQgaW4gd2hpdGUgb3V0cHV0IGZyb20gY2Fpcm9yZW5kZXIuCi0KLTIwMDktMDctMTcgMTM6MjI6NTcgKzAxMDAgIEVsYWluZSBYaW9uZyA8RWxhaW5lLlhpb25nQFN1bi5DT00+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDI6IEZpeCB2NGwyc3JjIG9uIE9wZW5Tb2xhcmlzCi0JICBUaGUgdjRsMiBkcml2ZXIgZm9yIFVTQiB3ZWJjYW1zIG9uIE9wZW5Tb2xhcmlzIGRvZXMgbm90IHN1cHBvcnQgc2VsZWN0KCkKLQkgIGNhbGxzLiBEZXRlY3Qgd2hlbiBzZWxlY3QoKSBmYWlscywgYW5kIHNraXAgcG9sbGluZyB0aGUgZGV2aWNlIGFmdGVyd2FyZCwKLQkgIHdoaWNoIHJlc3RvcmVzIHRoZSBwcmUgMC4xMC4xNCBiZWhhdmlvdXIgb24gT3BlblNvbGFyaXMuCi0JICBTaWduZWQtb2ZmLWJ5OiBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLTIwMDktMDctMTcgMTE6MjI6MDYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvLmdpdGlnbm9yZToKLQkgIGdpdGlnbm9yZTogSWdub3JlIHNvbWUgbmV3IGJpbmFyaWVzCi0KLTIwMDktMDctMTcgMTM6NDk6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvcmVuZGVyLmM6Ci0JICBjYWlyb3JlbmRlcjogQWRkIHRvIHRoZSBkb2N1bWVudGF0aW9uCi0KLTIwMDktMDctMTcgMTM6NDI6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkgIGNhaXJvcmVuZGVyOiBSZXR1cm4gbm90LW5lZ290aWF0ZWQgaWYgd2UgaGF2ZSBubyBjYXBzCi0KLTIwMDktMDctMTcgMTM6NDE6MTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5oOgotCSAgY2Fpcm9yZW5kZXI6IEZpeCBjYXBzIGFuZCBjb2xvcnNwYWNlIGhhbmRsaW5nCi0KLTIwMDktMDctMTcgMTM6MzA6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkgIGNhaXJvcmVuZGVyOiBVc2UgY29ycmVjdCBtaW1ldHlwZXMgZm9yIFBERiBhbmQgU1ZHCi0KLTIwMDktMDctMTcgMTM6MjQ6MjggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkgIGNhaXJvcmVuZGVyOiBSZW1vdmUgcHVsbCBtb2RlLCBpdCBvbmx5IGFkZHMgY29tcGxleGl0eSBidXQgbm90IGFkdmFudGFnZXMKLQotMjAwOS0wNy0xNiAyMTo1NTozMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5jOgotCSAgY2Fpcm9yZW5kZXI6IEZpeCBjYXBzIG5lZ290aWF0aW9uIGFuZCBjYWlybyBzdXJmYWNlIGNyZWF0aW9uCi0KLTIwMDktMDctMTYgMjE6NDI6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuYzoKLQkgIGNhaXJvcmVuZGVyOiBDb3JyZWN0bHkgc2V0IHNyY2NhcHMKLQotMjAwOS0wNy0xNiAyMTozMTo0MyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9jYWlyby9nc3RjYWlyb3JlbmRlci5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvcmVuZGVyLmg6Ci0JICBjYWlyb3JlbmRlcjogTW92ZSBpbnN0YW5jZS9jbGFzcyBzdHJ1Y3QgZGVmaW5pdGlvbnMgdG8gdGhlIGhlYWRlcgotCi0yMDA5LTA3LTE2IDIxOjMwOjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2NhaXJvL2dzdGNhaXJvcmVuZGVyLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuaDoKLQkgIGNhaXJvcmVuZGVyOiBBZGQgTHV0eicgY29weXJpZ2h0IHRvIHRoZSBmaWxlIGhlYWRlcgotCi0yMDA5LTA3LTE2IDIxOjI3OjQ1ICswMjAwICBMdXR6IE11ZWxsZXIgPGx1dHpAdG9wZnJvc2UuZGU+Ci0KLQkqIGV4dC9jYWlyby9NYWtlZmlsZS5hbToKLQkqIGV4dC9jYWlyby9nc3RjYWlyby5jOgotCSogZXh0L2NhaXJvL2dzdGNhaXJvcmVuZGVyLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm9yZW5kZXIuaDoKLQkgIGNhaXJvOiBBZGQgY2Fpcm8tYmFzZWQgUERGL1BTL1NWRyBlbmNvZGVyIGVsZW1lbnQKLQkgIEZpeGVzIGJ1ZyAjMzMxNDIwLgotCi0yMDA5LTA3LTE2IDIwOjQ0OjQwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgZmxhY2VuYzogT3B0aW9uYWxseSB3cml0ZSBhIFBBRERJTkcgYmxvY2sKLQkgIFRoZSBzaXplIG9mIHRoZSBQQURESU5HIGJsb2NrIGlzIHNwZWNpZmllZCBieSBhIG5ldwotCSAgInBhZGRpbmciIHByb3BlcnR5LgotCSAgRml4ZXMgYnVnICM1ODg0ODMuCi0KLTIwMDktMDctMTYgMTk6MzU6NDQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IE9ubHkgYXNzdW1lIHNlZWthYmlsaXR5IGlmIHRoZSBzZXJ2ZXIgcHJvdmlkZXMgQ29udGVudC1MZW5ndGgKLQkgIFByZXZpb3VzbHkgc2Vla2FiaWxpdHkgd2F5IGFsd2F5cyBhc3N1bWVkIHVudGlsIHRoZSBmaXJzdCBzZWVrIGFjdHVhbGx5Ci0JICBmYWlsZWQuIE5vdyB3ZSBhc3N1bWUgdGhhdCBhbGwgc2VydmVycyBhcmUgbm90IHNlZWthYmxlIHVubGVzcyB0aGV5IHByb3ZpZGUKLQkgIGEgQ29udGVudC1MZW5ndGggaGVhZGVyLiBJZiBhIHNlZWsgZmFpbHMgYWZ0ZXIgdGhhdCB3ZSBjb250aW51ZSB0bwotCSAgYXNzdW1lIG5vIHNlZWthYmlsaXR5LiBGaXhlcyBidWcgIzU4NTU3Ni4KLQotMjAwOS0wNy0xNiAxNToxNDo0MyArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IGRvbid0IHRyeSB0byBhdXRoZW50aWNhdGUgaWYgbm8gdXNlcm5hbWUvcGFzc3dvcmQgaXMgc2V0LgotCi0yMDA5LTA3LTE2IDE3OjEwOjIxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSAgZWZmZWN0djogQ2hhaW4gdXAgZmluYWxpemUgdG8gdGhlIHBhcmVudCBjbGFzcyBpbiB3YXJwdHYKLQkgIEZpeGVzIGEgbWVtb3J5IGxlYWsuCi0KLTIwMDktMDctMTYgMTI6NTU6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9lZmZlY3R2LmM6Ci0JICBlZmZlY3R2OiBBZGQgdW5pdCB0ZXN0IGZvciBhbGwgZWZmZWN0diBlbGVtZW50cwotCi0yMDA5LTA3LTE2IDEyOjE3OjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgIGVmZmVjdHY6IEFkZCBuZXcgZWZmZWN0diBlbGVtZW50cyB0byB0aGUgZG9jcwotCi0yMDA5LTA3LTE1IDE0OjM3OjE5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWZmZWN0di9nc3RlZmZlY3R2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyaXBwbGUuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJpcHBsZS5oOgotCSAgZWZmZWN0djogQWRkIHJpcHBsZXR2IGVsZW1lbnQKLQkgIFRoaXMgcHJvZHVjZXMgYSB3YXRlciByaXBwbGUgZWZmZWN0IG9uIHRoZSB2aWRlbyBpbnB1dCwKLQkgIGJhc2VkIG9uIG1vdGlvbiBvciBhIHJhaW4gZHJvcCBhbGdvcml0aG0uCi0JICBLaW5kbHkgcmVsaWNlbnNlZCB0byBMR1BMMisgYnkgS2VudGFybyBGdWt1Y2hpIDxmdWt1Y2hpQG1lZ2F1aS5uZXQ+LgotCSAgRml4ZXMgYnVnICM1ODg2OTUuCi0KLTIwMDktMDctMTIgMTU6NDI6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHN0cmVhay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmg6Ci0JICBlZmZlY3R2OiBBZGQgc3RyZWFrdHYgZWZmZWN0IGZpbHRlciBlbGVtZW50Ci0JICBUaGlzIGNvbWJpbmVzIHRoZSBTdHJlYWtUViBhbmQgQmFsdGFuVFYgZmlsdGVycyBmcm9tIHRoZQotCSAgZWZmZWN0diBwcm9qZWN0LgotCSAgS2luZGx5IHJlbGljZW5zZWQgdG8gTEdQTDIrIGJ5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pi4KLQkgIEZpeGVzIGJ1ZyAjNTg4MzY4LgotCi0yMDA5LTA3LTEyIDEyOjMxOjE1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JICBlZmZlY3R2OiBGaXggcHJvY2Vzc2luZyBvbiBiaWcgZW5kaWFuIGFyY2hpdGVjdHVyZXMKLQotMjAwOS0wNy0xMiAxMTo1MjowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5oOgotCSAgZWZmZWN0djogQWRkIHJhZGlvYWN0diBlZmZlY3QgZmlsdGVyCi0JICBUaGlzIGZpbHRlciBhZGRzIGEgcmFkaWF0aW9uLWxpa2UgbW90aW9uIGJsdXIgZWZmZWN0Ci0JICB0byB0aGUgdmlkZW8gc3RyZWFtLgotCSAgS2luZGx5IHJlbGljZW5zZWQgdG8gTEdQTDIrIGJ5IEtlbnRhcm8gRnVrdWNoaSA8ZnVrdWNoaUBtZWdhdWkubmV0Pi4KLQkgIEZpeGVzIGJ1ZyAjNTg4MzU5LgotCi0yMDA5LTA3LTEyIDExOjI2OjU3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0b3AuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmg6Ci0JICBlZmZlY3R2OiBNYWtlIHRoZSBvcHR2IHRocmVzaG9sZCBwcm9wZXJ0eSBhbiB1aW50Ci0KLTIwMDktMDctMTIgMTA6Mzk6MDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdG9wLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RvcC5oOgotCSAgZWZmZWN0OiBBZGQgb3B0diBlZmZlY3QgZmlsdGVyIGZyb20gdGhlIGVmZmVjdHYgcHJvamVjdAotCSAgVGhpcyBmaWx0ZXIgYmluYXJpemVzIGlucHV0IGZyYW1lcyBhbmQgY29tYmluZXMgdGhlbSB3aXRoIHZhcmlvdXMKLQkgIG9wdGljYWwgcGF0dGVybi4KLQkgIEtpbmRseSByZWxpY2Vuc2VkIHRvIExHUEwyKyBieSBLZW50YXJvIEZ1a3VjaGkgPGZ1a3VjaGlAbWVnYXVpLm5ldD4uCi0JICBGaXhlcyBidWcgIzU4ODM0OS4KLQotMjAwOS0wNy0wMyAwNToxMToyNiAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IEVtaXQgc3RyZWFtLXN0YXR1cyBsZWF2ZSBtZXNzYWdlCi0JICBGaXhlcyAjNTg3Njk1Ci0KLTIwMDktMDctMDMgMDU6MDY6NDUgLTA0MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgcHVsc2VzaW5rOiBFbWl0IHN0cmVhbS1zdGF0dXMgZW50ZXIgbWVzc2FnZQotCSAgRW1pdCBzdHJlYW0tc3RhdHVzIG1lc3NhZ2VzIGZvciB0aGUgcHVsc2UgdGhyZWFkLgotCSAgRG9uJ3QgdXNlIG91ciBvd24gR0NvbmQgZm9yIHNpZ25hbGluZyBidXQgc2ltcGx5IHVzZSB0aGUgcHVsc2UgbWFpbmxvb3AKLQkgIG1lY2hhbmlzbXMgZm9yIHN5bmNocm9uaXNhdGlvbi4KLQkgIFNlZSAjNTg3Njk1Ci0KLTIwMDktMDctMTQgMTg6MTU6NTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogZGVidWcgdGhlIGxhdGVuY3kgdXBkYXRlIHZhbHVlcwotCi0yMDA5LTA3LTE0IDE2OjEyOjU1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JICBwdWxzZXNpbms6IGFkZCAyNGJpdCBzYW1wbGUgZm9ybWF0cwotCSAgQWRkIGNoZWNrIGZvciBwdWxzZWF1ZGlvIDAuOS4xNSBhbmQgZW5hYmxlIDI0Yml0cyBzYW1wbGVzIGluIHRoYXQgY2FzZS4KLQotMjAwOS0wNy0xMyAxMjoyMzozNyAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNTg0NWI2MyB0byBmZWRhYWVlCi0KLTIwMDktMDctMTMgMTc6NTM6MjUgKzAyMDAgIE1hcmMgTGVlbWFuIDxtYXJjLmxlZW1hbiBhdCBnbWFpbC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JICBtcHZwYXk6IFJld29yayB0aGUgdGltZXN0YW1waW5nCi0JICBSZXdvcmsgdGhlIHRpbWVzdGFtcGluZyBpbiB0aGUgbXB2IHBheWxvYWRlciBzbyB0aGF0IHRoZSB0aW1lc3RhbXBzIGFyZSBtb3JlCi0JICBhY2N1cmF0ZS4KLQkgIEZpeGVzICM1ODc2ODAKLQotMjAwOS0wNy0wMyAwODo0NzoxMiArMDIwMCAgRmlsaXBwbyBBcmdpb2xhcyA8ZmlsaXBwby5hcmdpb2xhc0BnbWFpbC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSogdGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2V4YW1wbGVzL3Y0bDIvcHJvYmUuYzoKLQkgIHY0bDJzcmM6IGFkZCBhIHNpbXBsZSB0ZXN0IGNhc2UgZm9yIGRldmljZSBwcm9iaW5nCi0KLTIwMDktMDctMDMgMDg6Mzg6NDMgKzAyMDAgIEZpbGlwcG8gQXJnaW9sYXMgPGZpbGlwcG8uYXJnaW9sYXNAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIHY0bDJzcmM6IG9wdGlvbmFsIHN1cHBvcnQgZm9yIGRldmljZSBwcm9iaW5nIHdpdGggZ3VkZXYKLQkgIEVudW1lcmF0ZSB2NGwyIGRldmljZXMgdXNpbmcgZ3VkZXYgaWYgYXZhaWxhYmxlLgotCSAgRml4ZXMgYnVnICM1ODM2NDAuCi0KLTIwMDktMDctMTAgMTk6NTQ6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBSYW5kb20gY2xlYW51cAotCi0yMDA5LTA3LTEwIDE5OjU0OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogU2VuZCBxdWVyaWVzIHRvIHRoZSBtYXN0ZXIgcGFkIGJ5IGRlZmF1bHQgaW5zdGVhZCBvZiBhbGwgcGFkcwotCi0yMDA5LTA3LTEwIDE5OjM0OjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9yZ2IuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IEFkZCBSR0IsIEJHUiwgeFJHQiwgUkdCeCwgeEJHUiwgQkdSeCBzdXBwb3J0Ci0KLTIwMDktMDctMTAgMTc6NDM6MDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBDbGVhbiB1cCBkZWJ1Z2dpbmcgYSBiaXQKLQotMjAwOS0wNy0xMCAxNzoyNTo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIHZpZGVvbWl4ZXI6IFJlbW92ZSBzb21lIHJlZHVuZGFudCBjaGVja3MgYW5kIGVycm9yIG91dCBpbW1lZGlhdGVseSBpZiBub3QgbmVnb3RpYXRlZAotCSAgQWxzbyBzdG9wIGxlYWtpbmcgdGhlIG91dHB1dCBidWZmZXIgaW4gc29tZSBlcnJvciBjYXNlcy4KLQotMjAwOS0wNy0xMCAxNzoyMzowMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2F5dXYuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2JncmEuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2k0MjAuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIHZpZGVvbWl4ZXI6IFJlbW92ZSB0aGUgY2FsY3VsYXRlX2ZyYW1lX3NpemUoKSBmdW5jdGlvbiBhbmQgdXNlIGxpYmdzdHZpZGVvIGluc3RlYWQKLQotMjAwOS0wNi0zMCAxNToxMzo0NCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogUmVtb3ZlIHVudXNlZCBsaW5rL3VubGluayBwYWQgbWV0aG9kcwotCi0yMDA5LTA2LTMwIDEyOjQzOjA0ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9pNDIwLmM6Ci0JICB2aWRlb21peGVyOiBJNDIwIG1vZGU6IEFkZCBmYXN0IHBhdGggZm9yIDAuMCBhbmQgMS4wIGFscGhhCi0JICBJZiB0aGUgc291cmNlIGFscGhhIGlzIDAuMCwgd2UgdGFrZSBub3RoaW5nLgotCSAgSWYgdGhlIHNvdXJjZSBhbHBoYSBpcyAxLjAsIHdlIG92ZXJ3cml0ZSBldmVyeXRoaW5nLgotCi0yMDA5LTA2LTMwIDEyOjQwOjAyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9pNDIwLmM6Ci0JICB2aWRlb21peGVyOiBJNDIwIGJsZW5kaW5nIDogRml4IG1haW4gYWxnb3JpdGhtLgotCSAgV2hlbiBibGVuZGluZyBhIHNvdXJjZSBsYXllciB3aXRoIGFuIGFscGhhIG9mICdhJyBvbiB0b3Agb2YgYW5vdGhlcgotCSAgZGVzdGluYXRpb24gbGF5ZXIgd2UgdGFrZSB0aGUgc3VtIG9mOgotCSAgKiAnYScgcGVyY2VudCBvZiB0aGUgc291cmNlIGxheWVyCi0JICAqICgxMDAgLSAnYScpIHBlcmNlbnQgb2YgdGhlIGRlc3RpbmF0aW9uIGxheWVyICh0aGUgcmVtYWluZGVyKQotCi0yMDA5LTA2LTMwIDEyOjM5OjE5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9pNDIwLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmg6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVycGFkLmg6Ci0JICB2aWRlb21peGVyOiBNYWtlIGRlYnVnZ2luZyBjYXRlZ29yeSBnbG9iYWwgdG8gYWxsIHRoZSBjb2RlLgotCi0yMDA5LTA2LTI5IDE5OjIzOjQxICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBpbXByb3ZlIHJlYWRhYmlsaXR5IG9mIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLgotCi0yMDA5LTA3LTA4IDEzOjM4OjUzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG8gbm90IGxlYWsgdGltZW91dCBtZXNzYWdlCi0KLTIwMDktMDctMDkgMDc6MTQ6MjMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmk6IERvbid0IGZvcndhcmQgTkVXU0VHTUVOVCBldmVudHMgZnJvbSB1cHN0cmVhbQotCSAgTmV3IG9uZXMgYXJlIGdlbmVyYXRlZCBsYXRlciBhbmQgc2ltcGx5IGZvcndhcmRpbmcgdGhlbSBjYW4KLQkgIHJlc3VsdCBpbiBORVdTRUdNRU5UIGV2ZW50cyBvZiBkaWZmZXJlbnQgZm9ybWF0IGdvaW5nIGRvd25zdHJlYW0uCi0JICBGaXhlcyBidWcgIzU4Nzk4My4KLQotMjAwOS0wNy0wOCAxODoxOTo0NSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2F5dXYuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2k0MjAuYzoKLQkgIHZpZGVvbWl4ZXI6IE1ha2UgY2hlY2tlciBwYXR0ZXJuIGxvb2t1cCB0YWJsZSBjb25zdGFudAotCi0yMDA5LTA3LTA4IDE4OjE3OjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9iZ3JhLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBBZGQgc3VwcG9ydCBmb3IgQVJHQgotCSAgQW5kIGNsZWFuIHVwIHRoZSBjYXBzIHBhcnNpbmcuCi0KLTIwMDktMDctMDggMTU6MTc6NDEgKzAyMDAgIEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbkBnYWlnbmFyZC5uZXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkgIHVkcDogSW5pdGlhbGl6ZSBwb2ludGVyIHRvIE5VTEwKLQkgIE90aGVyd2lzZSB3ZSdyZSBjYWxsaW5nIGZyZWUoKSB3aXRoIHNvbWUgcmFuZG9tCi0JICBtZW1vcnkgYWRkcmVzcyBpbiBlcnJvciBjYXNlcy4KLQkgIEZpeGVzIGJ1ZyAjNTg3OTgyLgotCi0yMDA5LTA3LTA3IDE2OjM1OjI0ICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc3ByaW5rbGUgc29tZSBtb3JlIGNvbnN0Ci0KLTIwMDktMDctMDcgMTU6NTc6NTUgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwZXJmb3JtIHNvbWUgbW9yZSAoY2FyZWZ1bCkgZGF0YSBidWZmZXJpbmcKLQkgIE9uY2UgYnVmZmVyaW5nIGhhcyBzdGFydGVkICh3aXRoIGFuIG1kYXQgYXRvbSksIGNvbnRpbnVlIGJ1ZmZlcmluZwotCSAgdW50aWwgbW9vdiBhdG9tIGlzIHJlYWNoZWQsIHdoaWNoIGhhbmRsZXMgY2FzZXMgd2l0aCBtdWx0aXBsZQotCSAgbWRhdCBhdG9tcy4gIEFsc28ga2VlcCBhZGFwdGVyL29mZnNldCBiZXR0ZXIgaW4gc3luYyB3aXRoIHVwc3RyZWFtCi0JICBhbmQgZml4IHNvbWUgZGVidWcgc3RhdGVtZW50cy4gIEZpeGVzICM1ODc0MjYuCi0KLTIwMDktMDctMDYgMTA6NDA6MzEgKzAyMDAgIFBoaWxpcCBK5GdlbnN0ZWR0IDxwaGlsaXBqQG9wZXJhLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IFJlcGxhY2UgZGVwcmVjYXRlZCBHU1RfRElTQUJMRV9ERUJVRyB3aXRoIGNvcnJlY3QgbWFjcm8uIEZpeGVzICM1ODc4MjYKLQotMjAwOS0wNy0wMSAxMzowNzo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGVycm9yIG91dCBpbnN0ZWFkIG9mIGRpdmlkaW5nIGJ5IDAKLQkgIEVycm9yIG91dCBpZiB0aW1lc2NhbGUgaXMgMC4KLQotMjAwOS0wNy0wMSAwOTozMjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIFJldmVydCAicXRkZW11eDogTWFrZSBzdXJlIHdlIGRvbid0IGJsYWNrbGlzdCBzdHJlYW1zIGJ5IHdyb25nbHkgY29tcGFyaW5nIHRoZWlyIgotCSAgVGhpcyByZXZlcnRzIGNvbW1pdCA1NTAzYTU5YTU3NzliNjc0NTFkOGEyNzEwMDAxODE3OTBlZTc2YmM3LgotCSAgUmV2ZXJ0aW5nIHRoaXMgc2luY2UgaXQgY2F1c2VzIHJlZ3Jlc3Npb25zIHdpdGggYSBsb3Qgb2Ygc2FtcGxlIGZpbGVzCi0JICBJIGhhdmUsIGFsbCBvZiB3aGljaCB3b3JrZWQgZmluZSB3aXRoIHRoZSBsYXN0IC1nb29kIHJlbGVhc2UgKCM1ODY4OTEpLgotCi0yMDA5LTA2LTMwIDE1OjU0OjQ3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogY29tbWVudCBvdXQgdW51c2VkIHN0cnVjdHVyZQotCi0yMDA5LTA2LTMwIDEzOjEyOjA5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogbW9yZSBzaXplIGNoZWNrcywgYW5kIHVzZSBnX3RyeV9uZXcwKCkgaW5zdGVhZCBvZiBnX25ldzAoKQotCSAgV2hlbmV2ZXIgd2UgYWxsb2Mgc29tZXRoaW5nIGJhc2VkIG9uIGEgdXNlci1zdXBwbGllZCBzaXplLCB3ZSBzaG91bGQKLQkgIHJlYWxseSB1c2UgZ190cnlfbmV3KCksIG90aGVyd2lzZSB3ZSBjYW4gZWFzaWx5IGJlIG1hZGUgdG8gYWJvcnQgYnkKLQkgIHBhc3NpbmcgYSByaWRpY3Vsb3VzbHkgbGFyZ2UgbnVtYmVyIHRvIHVzIGZvciBhbGxvY2luZy4gRml4ZXMKLQkgIHByb2JsZW1zIHdpdGggc29tZSBmdXp6ZWQgZmlsZXMuCi0KLTIwMDktMDYtMjkgMTg6NTg6MzMgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBndWFyZCBhZ2FpbnN0IGJvZ3VzIGF0b20gc2l6ZXMgYW5kIHNob3J0IHJlYWRzCi0JICBDaGVjayB0aGUgcG9zc2libHkgNjQtYml0IGF0b20gc2l6ZSBtb3JlIGNhcmVmdWxseSBiZWZvcmUgY2FzdGluZyBpdAotCSAgdG8gYW4gaW50IGFuZCBwYXNzaW5nIGl0IHRvIGdzdF9wYWRfcHVsbF9yYW5nZSgpLCBvdGhlcndpc2Ugd2UgbWlnaHQKLQkgIGVuZCB1cCBwdWxsaW5nIDAgYnl0ZXMsIGdldHRpbmcgYW4gZW1wdHkgYnVmZmVyIGFzIHJlcXVlc3RlZCBhbmQKLQkgIGRlcmVmZXJlbmNpbmcgbm90IGF2YWlsYWJsZSBkYXRhIHdoaWxzdCB0aGlua2luZyB3ZSBhY3R1YWxseSBhc2tlZAotCSAgZm9yIGFuZCBnb3QgMHgxMDAwMDAwMDAwMDAwIGJ5dGVzLiBTaW1pbGFyIGZpeCBmb3IgcHVzaCBtb2RlIG9wZXJhdGlvbgotCSAgd2hlcmUgbmVlZGVkYnl0ZXMgZW5kcyB1cCBiZWluZyAwIGJ5dGVzLCB3aGljaCBtYWtlcyB1cyBhc3NlcnQuIEZpeGVzCi0JICBjcmFzaCB3aXRoIGJyb2tlbiBvciBmdXp6ZWQgZmlsZSAoTkIgIzEyMjM3OCkuCi0KLTIwMDktMDYtMjkgMTY6NTI6NDEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiB1c2UgMHggcHJlZml4IHdoZW4gbG9nZ2luZyBudW1iZXJzIGluIGhleAotCi0yMDA5LTA3LTAxIDA4OjQwOjQwICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBEb24ndCBzZW5kIGVtcHR5IHN0cmluZyB0YWdzCi0KLTIwMDktMDYtMzAgMjE6MzU6MzcgKzA0MDAgIExSTiA8bHJuMTk4NiBhdCBnbWFpbC5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBEb24ndCB1c2Ugc2VuZG1zZygpLWRlcGVuZGVudCBjb2RlIG9uIFdpbmRvd3MKLQkgIEZpeGVzICM1ODU4NDIKLQotMjAwOS0wNi0zMCAxNTo1OToyMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOgotCSogZ3N0L2xhdy9hbGF3LmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXcuYzoKLQkgIGxhdzogZml4IGNhcHMgYW5kIG5lZ290aWF0aW9uCi0JICBGaXggdGhlIGNhcHMgdG8gaW5jbHVkZSB0aGUgZGVwdGggKGluc3RlYWQgb2Ygd2lkdGggdHdpY2UpIGluIHRoZSBjYXBzIG9mCi0JICBhdWRpby94LXJhdy1pbnQuCi0JICBGaXggbmVnb3RpYXRpb24gdG8gbm90IG9ubHkgY29weSB0aGUgcmF0ZS9jaGFubmVscyBvZiB0aGUgZmlyc3Qgc3RydWN0dXJlLgotCi0yMDA5LTA2LTMwIDE0OjQ4OjA5ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogaW5jbHVkZSAiMS4wPTEwMCUiIGluIHZvbHVtZSBhbmQgY2hhbmdlIHVwcGVyIGxpbWl0Ci0JICBVcHBlciB2b2x1bWUgbGltbWl0IHdhcyAxMDAwLiBUaGF0IGFwcGVhciB1bm5lY2Vhc3JpbHkgaGlnaC4gSXQgd291bGQgYWxzbyBjYXVzZQotCSAgc2V2ZXIgZGlzdG9ydGlvbiBpZiBhY2NpZGVudGlhbHkgdXNlZC4gTm93IGl0cyAxMCAofiArMTVkYikgd2hpY2ggaXMgYWxzbyBpbgotCSAgc3luYyB3aXRoIHZvbHVtZSBhbmQgcGxheWJpbjIuCi0KLTIwMDktMDYtMjkgMTU6Mzk6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSAgcHVsc2U6IHNvbWUgbW9yZSB0cml2aWFsIGNsZWFudXBzCi0KLTIwMDktMDYtMjkgMTU6Mzg6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmM6Ci0JICBwdWxzZTogdHJpdmlhbCBjbGVhbnVwcwotCi0yMDA5LTA2LTI5IDE1OjIwOjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGNsZWFyIHJpbmdidWZmZXIgd2hlbiBhc2tlZCB0bwotCSAgU2luY2Ugd2UgbWFwIHRoZSByaW5nYnVmZmVyIHRvIHRoZSBwdWxzZWF1ZGlvIGludGVybmFsIHJpbmdidWZmZXIsIGZsdXNoIHRoZQotCSAgcHVsc2VhdWRpbyBidWZmZXIgd2hlbiB3ZSBhcmUgYXNrZWQgdG8gY2xlYXIgdGhlIHJpbmdidWZmZXIuCi0JICBUaGlzIGF2b2lkcyBzb21lIGxlZnRvdmVyIGF1ZGlvIGFmdGVyIGEgc2Vlay4KLQotMjAwOS0wNi0yNiAxNTowMDoxNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYXV0b2dlbi5zaDogQWN0dWFsbHkgZG8gdGhlICdlY2hvIC1uJyAtPiBwcmludGYgY2hhbmdlLgotCi0yMDA5LTA2LTI2IDE0OjQwOjE0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICBhdXRvZ2VuLnNoOiBVc2UgcHJpbnRmIGluc3RlYWQgb2YgJ2VjaG8gLW4nLiBDaGVjayBmb3IgYXV0b21ha2UtMS4xWzAxXQotCSAgQ2hlY2sgZm9yIG1vcmUgYXV0b21ha2UgY29tbWFuZCB2YXJpYW50cy4gVXNlIHByaW50ZiBpbnN0ZWFkIG9mICdlY2hvIC1uJwotCSAgZm9yIHBvcnRhYmlsaXR5Ci0KLTIwMDktMDYtMjYgMTM6NDI6MDkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGY4MTAwMzAgdG8gNTg0NWI2MwotCi0yMDA5LTA2LTI2IDEzOjE5OjA0ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG9uJ3QgcHJvY2VzcyB0cmFja19udW0vdHJhY2tfY291bnQgdGFncyB3aXRoIGEgMCB2YWx1ZQotCSAgTnVtYmVyL2NvdW50IHZhbHVlcyBvZiAwIG1lYW4gdGhleSdyZSBub3Qgc2V0LiBEb24ndCBwdXQgdGhvc2UgaW4gdGhlCi0JICB0YWdsaXN0LgotCi0yMDA5LTA2LTI1IDE4OjUxOjEyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3Jtc2luay5jOgotCSAgd2F2ZWZvcm1zaW5rOiB1c2UgJ2d1aW50OCcgaW5zdGVhZCBvZiAnYnl0ZScgdG8gZml4IGNvbXBpbGF0aW9uIHdpdGggTVNWQzgKLQkgIFdlIG5lZWQgYSBjYXN0IGhlcmUgZm9yIHBvaW50ZXIgYXJpdGhtZXRpYyB0byB3b3JrIGNvcnJlY3RseSwgYnV0IHNvbWUKLQkgIE1TVkMgdmVyc2lvbnMgZG9uJ3Qgc2VlbSB0byBsaWtlICdieXRlJywgc28gdXNlIGd1aW50OCBoZXJlLiBIb3BlZnVsbHkKLQkgIGZpeGVzICM1ODUzNjEuCi0KLTIwMDktMDYtMjUgMTk6Mzk6MzcgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgdjRsMnNyYzogc2V0IHN0cnVjdHMgdG8gemVybyBiZWZvcmUgdXNpbmcgdGhlbSBpbiBpb2N0bHMKLQkgIFRoaXMgZml4ZXMgdmFsZ3JpbmQgd2FybmluZ3MuCi0KLTIwMDktMDYtMjUgMTM6MjM6NDAgKzAyMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogTWFrZSBzdXJlIHdlIGRvbid0IGJsYWNrbGlzdCBzdHJlYW1zIGJ5IHdyb25nbHkgY29tcGFyaW5nIHRoZWlyIGR1cmF0aW9uIHdpdGggZW50aXJlIGNsaXAgZHVyYXRpb24uCi0KLTIwMDktMDYtMjUgMTM6MTg6MTQgKzAyMDAgIEtyenlzenRvZiBCxYJhc3prb3dza2kgPGtiIGF0IHN5c21pa3JvLmNvbS5wbD4KLQotCSogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JICBydHBkZWM6IGZpeCBzb21lIGJ1ZmZlciBsZWFrcwotCi0yMDA5LTA2LTI1IDA4OjExOjA5ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JICBmbHZwYXJzZTogQWRkIG1pc3NpbmcgYnJlYWsgaW4gc3dpdGNoL2Nhc2UuCi0KLTIwMDktMDYtMjUgMDg6MTA6MzggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzoKLQkgIGZsdmRlbXV4OiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLCBoaW50IGJyYW5jaCBsaWtlbGluZXNzLCBhZGQgY29tbWVudHMuCi0KLTIwMDktMDYtMjUgMDg6MDk6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZQotCi0yMDA5LTA2LTI1IDA3OjQxOjA3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cyBhbmQgdW51c2VkIHZhcmlhYmxlcy4KLQkgIEFsc28gYWRkIGJyYW5jaCBsaWtlbGluZXNzIG1hY3Jvcy4KLQotMjAwOS0wNi0yNSAwNzo0MDoyNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBGaXhlcyBidWlsZCBvbiBtYWNvc3gKLQotMjAwOS0wNi0yNCAxNzo0MzoyNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IGZyZWUgbWVtb3J5IGluIGZpbmFsaXplCi0JICBmaW5hbGl6ZSBpcyBjYWxsZWQgb25seSBvbmNlLiBubyBuZWVkIHRvIGNsZWFyIHBvaW50ZXJzIHRoZXJlLiBkaXNwb3NlIGlzIGZvcgotCSAgdW5yZWZmaW5nLgotCi0yMDA5LTA2LTI0IDE1OjE0OjE0ICswMTAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDZhYjExZDEgdG8gZjgxMDAzMAotCi0yMDA5LTA2LTA4IDE0OjQ2OjQ4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IHNob3J0LWNpcmN1aXQgZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCgpIHdoZW4gcGFyc2luZyB0aGUgaW5kZXgKLQkgIERvbid0IGNhbGwgZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCgpIGZvciBlYWNoIHNpbmdsZSBpbmRleCBlbnRyeS4gTm90Ci0JICBvbmx5IGRvIHdlIGFscmVhZHkgaGF2ZSB0aGUgcG9pbnRlciB0byB0aGUgc3RyZWFtIGNvbnRleHQsIHdlIGFsc28ga25vdwotCSAgdGhlIGZvcm1hdHMgd2Ugd2FudCB0byBjb252ZXJ0IGZyb20gYW5kIHRvIGFscmVhZHksIHNvIHdlIG1heSBqdXN0IGFzCi0JICB3ZWxsIHVzZSBvcHRpbWlzZWQgY29udmVyc2lvbiByb3V0aW5lcyB0aGF0IGJ5cGFzcyBzb21lIG9mIHRoZSBjaGVja3MKLQkgIGFuZCBsb29rdXBzIG1hZGUgaW4gZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCgpLgotCi0yMDA5LTA2LTE3IDE2OjM5OjM2ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBbm90aGVyIHJvdW5kIG9mIEdfKkxJS0VMWSBtaWNyby1vcHRpbWlzYXRpb25zLgotCi0yMDA5LTA2LTE3IDE2OjIwOjI1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBUYWtlIGxhc3Qgc2FtcGxlIGR1cmF0aW9uIGZvciBkdW1teSBzZWdtZW50IGNhbGN1bGF0aW9uLgotCSAgVGhpcyBmaXhlcyB0aGUgY2FzZXMgd2hlcmUgZmlsZXMgd2l0aG91dCBFREwgd291bGRuJ3Qgb3V0cHV0IHRoZWlyCi0JICBsYXN0IGJ1ZmZlci4KLQotMjAwOS0wNi0yNCAxMjozNjozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IFNwcmlua2xlIGJyYW5jaCBsaWtlbGluZXNzIG1hY3JvcyBvdmVyIHRoZSBjb2RlLgotCi0yMDA5LTA2LTIzIDE2OjU0OjMyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkgIHJhdzEzOTQ6IHNwcmlua2xlIGJyYW5jaCBsaWtlbGluZXNzIG1hY3JvcyBhY2Nyb3NzIHRoZSBjb2RlLgotCi0yMDA5LTA2LTE0IDEwOjM2OjE3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBBZGQgR1NUX01FTURVTVAgc3RhdGVtZW50cyBmb3IgdW5rbm93biBhdG9tcy4KLQkgIFRoaXMgaXMgdG8gaGVscCBkZXZlbG9wZXJzIHRyYWNrIGRvd24gYW5kIGltcGxlbWVudCB1bmhhbmRsZWQgYXRvbXMgZmFzdGVyLgotCi0yMDA5LTA2LTIzIDE3OjUxOjMyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICBkZWludGVybGFjZTogUmVtb3ZlIHRoZSBpbnRlcmxhY2VkIGZpZWxkIGZyb20gdGhlIG91dHB1dCBjYXBzIGlmIGRlaW50ZXJsYWNpbmcgaXMgZW5hYmxlZAotCi0yMDA5LTA2LTIzIDE3OjQ4OjQ3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHloLmM6Ci0JICBkZWludGVybGFjZTogQ29weSB0aGUgY29ycmVjdCBsaW5lIGZyb20gY29ycmVjdCBwbGFjZSBpbiB0aGUgaGlzdG9yeQotCi0yMDA5LTA2LTIzIDE2OjM1OjM2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiB1c2Ugc2FtZSBwcm90b2NvbHMgYWZ0ZXIgcmVkaXJlY3QKLQkgIEFmdGVyIGEgcmVkaXJlY3Qgd2Ugd2FudCB0byB1c2UgdGhlIHNhbWUgcHJvdG9jb2xzIHRoYXQgd2Ugd2VyZSB1c2luZyBmb3IgdGhlCi0JICBjdXJyZW50IHVybC4KLQotMjAwOS0wNi0yMyAxNTozNTozNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGRvbid0IGxlYWsgY292ZXIgYXJ0Ci0KLTIwMDktMDYtMjMgMTQ6MTA6MTAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICB1ZHA6IGZpeCBjb21waWxlciB3YXJuaW5nIGFib3V0IEVBSV9BRERSRkFNSUxZIGdldHRpbmcgcmVkZWZpbmVkIGluIHNvbWUgY2FzZXMKLQkgIEluY2x1ZGUgdGhlIGhlYWRlciBmcm9tIHdoZXJlIHdlIGluY2x1ZGUgYWxsIHRoZSBzeXN0ZW0gaGVhZGVycyB3aXRoIHRoZQotCSAgc29ja2V0IHN0dWZmIGJlZm9yZSB3ZSB0cnkgdG8gZGVmaW5lIEVBSV9BRERSRkFNSUxZIG91cnNlbHZlcywgb3RoZXJ3aXNlCi0JICB3ZSBkZWZpbmUgaXQgb3Vyc2VsdmVzIGFuZCB0aGVuIGdldCBhIGNvbXBpbGVyIHdhcm5pbmcgaWYgYSBzeXN0ZW0gaGVhZGVyCi0JICBkZWZpbmVzIGl0IGFzIHdlbGwgd2l0aG91dCBndWFyZGluZyBhZ2FpbnN0IGl0IGJlaW5nIGRlZmluZWQgYWxyZWFkeS4KLQotMjAwOS0wNi0yMyAxNDozOTo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgbWF0cm9za2E6IGFuZCB0aGUgbmV3IGhlYWRlcnMgdG9vCi0KLTIwMDktMDYtMjMgMTQ6MzI6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2U6IGZpeCBjb21waWxlciBlcnJvcgotCSAgY2hhbmdlIGdwb2ludGVyIHRvIGd1aW50OCAqIGZvciBjb2RlY19zdGF0ZSBhbmQgY29kZWNfcHJpdiBhcyBzb21lCi0JICBmdW5jdGlvbnMgb3BlcmF0ZSBvbiB0aG9zZSB0eXBlcyBhbmQgaXQgYXZvaWRzIGJyZWFraW5nIHN0cmljdC1hbGlhc2luZwotCSAgcnVsZXMuCi0KLTIwMDktMDYtMjMgMTI6NDI6MzMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYXZvaWQgbGVha2luZyBidWZmZXJzCi0JICBEb24ndCBsZWFrIGJ1ZmZlcnMgd2hlbiByZXN5bmNpbmcgdG8gYSBrZXlmcmFtZS4KLQkgIEF2b2lkIGxlYWtpbmcgYnVmZmVycyB3aGVuIGV4aXRpbmcgdGhlIGxvb3Agb24gZXJyb3IgY29uZGl0aW9ucy4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KLQkgIEZpeGVzICM1ODU5MTEKLQotMjAwOS0wNi0yMiAxNTo1Njo1OCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICB2NGwyOiBvcGVuL2Nsb3NlIHRoZSBkZXZpY2UgaW4gUkVBRFkKLQkgIFRoaXMgYWxsb3dzIHRvIHF1ZXJ5IHRoZSBkZXZpY2UgaW4gUkVBRFkuIEJlZm9yZSBvbmUgbmVlZCB0byBzd2l0Y2ggaXQgdG8gUEFVU0VECi0JICBhbmQgdGhhdCBhbHNvIHN0YXJ0cyBzdHJlYW1pbmcuCi0KLTIwMDktMDYtMjAgMTU6NDE6NDQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkgIHF0ZGVtdXg6IHVzZSBHU1RfTUVNRFVNUAotCi0yMDA5LTA2LTE5IDAwOjE2OjQxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2FwZXRhZy9NYWtlZmlsZS5hbToKLQkqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkgIGFwZWRlbXV4OiBhZGQgY29udGFpbmVyLWZvcm1hdCB0YWcKLQkgIFVzZSBwYnV0aWxzIGhlcmUgYmVjYXVzZSB0aGUgc3RyaW5nIGlzIHRyYW5zbGF0ZWQuCi0KLTIwMDktMDYtMTkgMDA6MTU6NTEgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvaWQzZGVtdXgvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzoKLQkgIGlkM2RlbXV4OiBhZGQgY29udGFpbmVyLWZvcm1hdCB0YWcKLQkgIFVzaW5nIHBidXRpbHMgaGVyZSBiZWNhdXNlIHRoZSBzdHJpbmcgaXMgdHJhbnNsYXRlZC4KLQotMjAwOS0wNi0xOCAyMzo1MTo1MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JICBkdmRlbXV4OiBwb3N0IGNvbnRhaW5lci1mb3JtYXQgdGFnCi0JICBBbHNvIG1lcmdlIHRoZSB0d28gYWxtb3N0IGlkZW50aWNhbCBfYWRkXypfcGFkKCkgZnVuY3Rpb25zIGludG8gb25lLgotCi0yMDA5LTA2LTE4IDIzOjQzOjQ5ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgIGR2ZGVtdXg6IGRvbid0IHNjcmV3IHVwIGZpcnN0IGF1ZGlvIGJ1ZmZlcgotCSAgUXVlcnkgdGhlIGF1ZGlvIGZvcm1hdCwgZXNwLiBkdmRlbXV4LT5udW1fY2hhbm5lbHMsIGJlZm9yZSB3ZSB1c2UgdGhhdAotCSAgdmFyaWFibGUgdG8gYWxsb2NhdGUgdGhlIGluaXRpYWwgYnVmZmVyLiBUaGF0IHdheSB3ZSBkb24ndCBhY2NpZGVudGFsbHkKLQkgIHB1c2ggYSB6ZXJvLXNpemVkIGJ1ZmZlciBhcyBmaXJzdCBhdWRpbyBidWZmZXIuCi0KLTIwMDktMDYtMTggMjM6Mzg6MzAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICBtdWx0aXBhcnRkZW11eDogcG9zdCBjb250YWluZXItZm9ybWF0IHRhZwotCi0yMDA5LTA2LTE4IDIzOjM3OjExICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYS1kZW11eDogcG9zdCBjb250YWluZXItZm9ybWF0IHRhZ3MKLQotMjAwOS0wNi0xOCAyMzozNjoyOCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBwb3N0IGNvbnRhaW5lci1mb3JtYXQgdGFnCi0KLTIwMDktMDYtMTggMjM6MzU6MjkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBwb3N0IGNvbnRhaW5lci1mb3JtYXQgdGFncwotCi0yMDA5LTA2LTIxIDE3OjEzOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JICBhdWRpb2FtcGxpZnk6IEZpeCBpbnRlZ2VyIG92ZXJmbG93cyBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcwotCi0yMDA5LTA2LTIxIDA5OjUwOjU0ICswMjAwICBLaXBwIENhbm5vbiA8a2Nhbm5vbkBsaWdvLmNhbHRlY2guZWR1PgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzoKLQkgIGF1ZGlvYW1wbGlmeTogRG9uJ3QgZGVjbGFyZSBhIGxvb3AgaW5kZXggc3RhdGljCi0JICBUaGUgcHJldmlvdXMgcGF0Y2ggdG8gYWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc2FtcGxlIGZvcm1hdHMgcG9zc2libHkKLQkgIGludHJvZHVjZWQgYSByZWVudHJhbmN5IGJ1ZzogIGEgdmFyaWFibGUgdXNlZCBmb3IgYSBsb29wIGluZGV4IHdhcyBkZWNsYXJlZAotCSAgc3RhdGljLiAgVGhpcyBwYXRjaCBmaXhlcyB0aGF0LCBhbmQgYWxzbyBhZGRzIGEgIi8qICpJTkRFTlQtT04qICovIiBhbm5vdGF0aW9uCi0JICBmb2xsb3dpbmcgdGhlIG1hY3JvIGJsb2NrLiAgKEkgZG9uJ3Qga25vdyB3aGF0IHRoZSBhbm5vdGF0aW9uIGlzIGZvciwgYnV0IHRoZQotCSAgYWRkZXIsIHdoZXJlIEkgY29waWVkIHRoaXMgZnJvbSwgaGFzIGl0KS4KLQotMjAwOS0wNi0xOSAyMjozNzoyNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSAgYXVkaW9hbXBsaWZ5OiBGaXggb2ZmLWJ5LW9uZSBpbiB3cmFwLXBvc2l0aXZlIG1vZGUKLQotMjAwOS0wNi0xOSAyMjoyMDo0NSArMDIwMCAgS2lwcCBDYW5ub24gPGtjYW5ub25AbGlnby5jYWx0ZWNoLmVkdT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaDoKLQkgIGF1ZGlvYW1wbGlmeTogQWRkIG5vY2xpcCBtZXRob2QgYW5kIHN1cHBvcnQgZm9yIG1vcmUgZm9ybWF0cwotCSAgRml4ZXMgYnVnICM1ODU4MjggYW5kICM1ODU4MzEuCi0KLTIwMDktMDYtMTkgMjE6NDY6NDEgKzAyMDAgIEtvb3AgTWFzdCA8a3dtQGZyZWVic2Qub3JnPgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JICB1ZHA6IEZpeCBidWlsZCBvbiBGcmVlQlNECi0JICBGaXhlcyBidWcgIzU4NjM5Ny4KLQotMjAwOS0wNi0xOSAxODoxMjoyNyArMDIwMCAgT2dueWFuIFRvbmNoZXYgPG9nbnlhbi50b25jaGV2IGF0IGF4aXMuY29tPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgdGVzdHM6IGFkZCB1bml0IHRlc3RzIGZvciBidWZmZXItbGlzdCBwYXlsb2FkZXJzCi0JICBTZWUgIzU4NTU1OQotCi0yMDA5LTA2LTE5IDE4OjAwOjM1ICswMjAwICBPZ255YW4gVG9uY2hldiA8b2dueWFuLnRvbmNoZXYgYXQgYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5Lmg6Ci0JICBydHBtcDR2cGF5OiBhZGQgc3VwcG9ydCBmb3IgYnVmZmVyLWxpc3QKLQkgIFNlZSAjNTg1NTU5Ci0KLTIwMDktMDYtMTkgMTc6NTc6MTIgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW4udG9uY2hldiBhdCBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuaDoKLQkgIHJ0cGpwZWdwYXk6IGFkZCBzdXBwb3J0IGZvciBidWZmZXItbGlzdHMKLQkgIFNlZSAjNTg1NTU5Ci0KLTIwMDktMDYtMTkgMTc6NTM6MzIgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW4udG9uY2hldiBhdCBheGlzLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIHJ0cGgyNjRwYXk6IGFkZCBzdXBwb3J0IGZvciBidWZmZXItbGlzdHMKLQkgIFNlZSAjNTg1NTU5Ci0KLTIwMDktMDYtMTggMTE6NTQ6MjIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkgIHVkcHV0aWxzOiBkb24ndCBmcmVlIGludmFsaWQgbWVtb3J5Ci0JICBBcyBzcG90dGVkIGJ5IGJlbmppRyBpbiBJUkMuCi0JICBkb24ndCBmcmVlIGludmFsaWQgbWVtb3J5IHdoZW4gZ2V0YWRkcmluZm8gZmFpbGVkLgotCi0yMDA5LTA2LTE3IDE3OjQ4OjMxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZWluazogZG9uJ3QgbGVhayBkZXZpY2VfZGVzY3JpcHRpb24KLQkgIGRvbid0IGxlYWsgdGhlIGRldmljZV9kZXNjcmlwdGlvbi4KLQkgIHNvbWUgY2xlYW51cHMuCi0KLTIwMDktMDYtMTkgMTQ6NDQ6NDAgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IHVwZGF0ZSAucG8gZmlsZXMgZm9yIHN1bmF1ZGlvbWl4ZXIgc3RyaW5nIGNoYW5nZXMKLQotMjAwOS0wNi0xOCAxNjo1ODoyNiArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBzdHJlYW1pbmc7IGFkanVzdCBzaXplcyB0byBjYXRlciBmb3IgcGFkZGluZyBpbiBjaHVua3MKLQotMjAwOS0wNi0xNyAxMTo1NDo1MyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBzdHJlYW1pbmcgbW9kZTsgaGFuZGxlIGRhdGEgY2h1bmtzIGdyb3VwZWQgaW4gcmVjIGxpc3RzLgotCSAgRml4ZXMgIzU2Nzk4My4KLQotMjAwOS0wNi0xMCAxMjozNjo1MCArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IG1hcCBzb21lIHRhZ3MgdG8gQ09NUE9TRVIgcmF0aGVyIHRoYW4gQVJUSVNUCi0KLTIwMDktMDYtMTAgMTI6MzQ6NDMgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBmaXggc29tZSAzR1AgdGFnIGV4dHJhY3Rpb24gKGtleXdvcmRzLCBnZW5yZSwgbG9jYXRpb24pCi0KLTIwMDktMDYtMDkgMTU6MzY6NTAgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogZXh0cmFjdCBwaXhlbC1hc3BlY3QtcmF0aW8gaW5mb3JtYXRpb24KLQotMjAwOS0wNi0xNyAwNzoxNDowOSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogRml4IGxlYWtpbmcgb2YgdGhlIE1hdHJvc2thIFRJVExFIGVsZW1lbnQKLQotMjAwOS0wNi0xNiAyMDozODo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuaDoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cmV2Lmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmg6Ci0JICBlZmZlY3R2OiBBZGQgYmFzaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGVmZmVjdHYgZWxlbWVudHMKLQotMjAwOS0wNi0xNiAyMDoxNjoxMyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZmZlY3R2Lmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSAgZWZmZWN0djogRGVmaW5lIHRoZSBmYXN0IFBSTkcgZnVuY3Rpb24gYXQgYSBjZW50cmFsIHBsYWNlCi0KLTIwMDktMDYtMTYgMjA6MTM6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5oOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5oOgotCSAgZWZmZWN0djogTW92ZSB0eXBlIGRlZmluaXRpb25zIGludG8gc2VwYXJhdGUgaGVhZGVycwotCSAgVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBkb2NzIGxhdGVyLgotCi0yMDA5LTA2LTE2IDE5OjQxOjAyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQkgIGVmZmVjdHY6IFJlbW92ZSBnZXRfdW5pdF9zaXplIGltcGxlbWVudGF0aW9ucwotCSAgVGhlIGRlZmF1bHQgb24gZnJvbSBHc3RWaWRlb0ZpbHRlciBoYW5kbGVzIHRoaXMgYWxyZWFkeS4KLQotMjAwOS0wNi0xNiAxNDo1NDozNCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogYnVtcCBjb3JlL2Jhc2UgcmVxdWlyZW1lbnRzIHRvIGdpdAotCSAgTmVlZCBnaXQgY29yZSBmb3IgYmFzZXNpbmsgYnVmZmVybGlzdCBhZGRpdGlvbnM7IC1iYXNlIHJlcXVpcmVtZW50Ci0JICBidW1wZWQgZ3JhdHVpdG91c2x5LgotCi0yMDA5LTA2LTE2IDE1OjI1OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzaW5rLmM6Ci0JICB0ZXN0czogYWRkIHNvbWUgZGVidWcsIHNlbmQgbmV3c2VnbWVudAotCi0yMDA5LTA2LTE2IDE1OjA2OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBhZGQgZGVidWcgbGluZSBmb3IgdGhlIHNvY2tldAotCi0yMDA5LTA2LTE2IDE1OjA2OjI1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvZmxhY2RlYy5jOgotCSAgdGVzdHM6IHR1cm4gZ19wcmludCBpbnRvIGRlYnVnCi0KLTIwMDktMDYtMTYgMTU6MDQ6MTUgKzAyMDAgIE9nbnlhbiBUb25jaGV2IDxvZ255YW5AYXhpcy5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNpbmsuYzoKLQkgIG11bHRpdWRwc2luazogYWRkIHN1cHBvcnQgZm9yIGJ1ZmZlciBsaXN0cwotCSAgQWRkIHN1cHBvcnQgZm9yIEJ1ZmZlckxpc3QgYW5kIGFkZCBhIHVuaXQgdGVzdC4KLQkgIEZpeGVzICM1ODU4NDIKLQotMjAwOS0wNi0xNiAwMDowMjo0MiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogcmVzZXQgc2Vzc2lvbiBzdGF0ZSB3aGVuIHN0b3BwaW5nCi0JICBJbmNyZWFzZXMgdGhlIGNoYW5jZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBhY3R1YWxseSByZXVzYWJsZS4KLQotMjAwOS0wNi0xNSAyMzo0OTo0OCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogbG9nIHJlc3BvbnNlIGFuZCByZXF1ZXN0IGhlYWRlcnMgYW5kIGZpeCBzb21lIGJyb2tlbiBpbmRlbnRpbmcKLQotMjAwOS0wNi0xNSAyMjo0MDozNSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgIG1wNGdkZXBheTogZ3Vlc3MgY29uc3RhbnREdXJhdGlvbiBiZXR0ZXIKLQkgIERvIGEgYmV0dGVyIGpvYiBhdCBndWVzc2luZyB0aGUgY29uc3RhbnREdXJhdGlvbiBwYXJhbWV0ZXIgd2hlbiBpdCBpcyBub3QKLQkgIHByZXNlbnQgaW4gdGhlIGNhcHMuCi0JICBGaXhlcyAjNTg1MjA1Ci0KLTIwMDktMDYtMTUgMjE6MDk6NDcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JICB3YXJwdHY6IENsZWFuIHVwIHdhcnB0diBlbGVtZW50IGFuZCBmaXggc29tZSBtaW5vciBidWdzIGFuZCBsZWFrcwotCi0yMDA5LTA2LTE1IDIwOjUzOjIzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSAgdmVydGlnb3R2OiBDbGVhbiB1cCB2ZXJ0aWdvdHYgZWxlbWVudCBhbmQgZml4IHNvbWUgbWlub3IgYnVncyBhbmQgbGVha3MKLQotMjAwOS0wNi0xNSAyMDozODowMSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkgIGRpY2V0djogVXNlIGd1aW50OCBpbnN0ZWFkIG9mIGNoYXIgKHdoaWNoIGNhbiBiZSBzaWduZWQgb3IgdW5zaWduZWQpCi0KLTIwMDktMDYtMTUgMjA6MzY6MzkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6Ci0JICBzaGFnYWRlbGljdHY6IFVzZSBndWludDgvZ2ludDggaW5zdGVhZCBvZiBjaGFyICh3aGljaCBjYW4gYmUgc2lnbmVkIG9yIHVuc2lnbmVkKQotCi0yMDA5LTA2LTE1IDIwOjMxOjMwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSAgc2hhZ2FkZWxpY3R2OiBDbGVhbiB1cCBlbGVtZW50IGFuZCBmcmVlIGFsbCBtZW1vcnkgaW4gZmluYWxpemUKLQotMjAwOS0wNi0xNSAyMDoyMTo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOgotCSAgcmV2dHY6IENsZWFuIHVwIHJldnR2IGVsZW1lbnQKLQotMjAwOS0wNi0xNSAyMDowNzo0MiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JICBxdWFya3R2OiBTaW1wbGlmeSBzb21lIGNvZGUKLQotMjAwOS0wNi0xNSAyMDowNzoxMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JICBxdWFya3R2OiBVc2UgdGhlIGlucHV0IGRhdGEgaWYgYSBOVUxMIGJ1ZmZlciBpcyBjaG9zZW4gaW5zdGVhZCBvZiB0aGUgdmFsdWUgMAotCi0yMDA5LTA2LTE1IDIwOjAwOjQzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkgIHF1YXJrdHY6IEZpeCBzZXR0aW5nIHRoZSBwbGFuZXMgcHJvcGVydHkgb2YgcXVhcmt0dgotCSAgU2V0dGluZyBpdCB0byBhIHZhbHVlPDE2IHdvdWxkIGNhdXNlIGNyYXNoZXMgYmVmb3JlIGJlY2F1c2UKLQkgIGN1cnJlbnRfcGxhbmUgd2FzIHNldCB0byB0aGUgb2xkIG51bWJlciBvZiBwbGFuZXMtMS4gQWxzbwotCSAgZml4IGNhbGN1bGF0aW9ucyBmb3Igbm9uLTJebiBwbGFuZXMgdmFsdWVzLgotCi0yMDA5LTA2LTE1IDE3OjUwOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkgIHF1YXJrdHY6IENsZWFuIHVwIHRoZSBxdWFya3R2IGVsZW1lbnQKLQotMjAwOS0wNi0xNSAxNzozOToyMCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzoKLQkgIGVmZmVjdHY6IE1ha2UgZWxlbWVudHMgbGlzdCBjb25zdGFudAotCi0yMDA5LTA2LTE1IDE3OjM3OjUzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSAgZWRnZXR2OiBDbGVhbiB1cCBlZGdldHYgZWxlbWVudCBhbmQgZml4IG1lbW9yeSBsZWFrCi0KLTIwMDktMDYtMTUgMTc6MjE6NTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JICBkaWNldHY6IENsZWFuIHVwIGRpY2V0diBlbGVtZW50IGFuZCBmaXggc29tZSBzbWFsbGVyIGlzc3VlcwotCSAgVGhpcyBmaXhlcyBhIG1lbW9yeSBsZWFrICh0aGUgZGljZSBtYXApIGFuZCBhIGNyYXNoIHdoZW4KLQkgIHNldHRpbmcgdGhlIHNxdWFyZS1iaXRzIHByb3BlcnR5IGJlZm9yZSBjYXBzIGFyZSBzZXQuCi0KLTIwMDktMDYtMTUgMTc6MjA6MjEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JICBhZ2luZ3R2OiBBY3R1YWxseSB1c2UgR3N0Q29udHJvbGxlciBmb3Igc3luY2luZyB0aGUgcHJvcGVydGllcyB0byB0aW1lc3RhbXBzCi0KLTIwMDktMDYtMTUgMTc6MDM6MzggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSAgYWdpbmd0djogRXhwb3J0IHNvbWUgbW9yZSBhZ2luZ3R2IHByb3BlcnRpZXMgdmlhIEdPYmplY3QgcHJvcGVydGllcwotCi0yMDA5LTA2LTE1IDE1OjA2OjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkgIGFnaW5ndHY6IEdlbmVyYWwgY2xlYW51cCBhbmQgdXBkYXRpbmcgb2YgY29weXJpZ2h0Ci0JICBBbHNvIG1ha2UgdGhlIHNjcmF0Y2gtbGluZXMgcHJvcGVydHkgZXhwb3J0ZWQgdmlhIGEgR09iamVjdAotCSAgcHJvcGVydHkgYW5kIGluaXRpYWxpemUvcmVzZXQgdGhlIGludGVybmFsIHN0YXRlIGNvcnJlY3RseS4KLQotMjAwOS0wNi0xNSAxNTowNTo1OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JICBhZ2luZ3R2OiBTdG9yZSBhbmQgdXBkYXRlIHN0YXRlIGluc2lkZSB0aGUgaW5zdGFuY2Ugc3RydWN0Ci0JICBUaGlzIG1ha2VzIHRoZSBjb2xvcmFnaW5nIGVmZmVjdCBhbmQgcGl0cyBlZmZlY3QgdmlzaWJsZS4KLQotMjAwOS0wNi0xNSAxNTo1MTozMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogcmVmIGN1c3RvbSByaW5nIGJ1ZmZlciBjbGFzcyBhbmQgdHlwZSBpbiBjbGFzc19pbml0Ci0JICBIYWNrIGFyb3VuZCB0aHJlYWQtc2FmZXR5IGlzc3VlcyBpbiBHT2JqZWN0IGFuZCBvdXIgcmFjeSBfZ2V0X3R5cGUoKQotCSAgZnVuY3Rpb25zICh3ZSBjb3VsZCBlYXNpbHkgZml4IHRoZSBfZ2V0X3R5cGUoKSBmdW5jdGlvbnMsIGJ1dCB3ZSBzdGlsbAotCSAgbmVlZCB0byBoYWNrIGFyb3VuZCB0aGUgR09iamVjdCBjbGFzcyByYWNlcyB1bnRpbCB3ZSByZXF1aXJlIGEgbmV3ZXIKLQkgIEdMaWIgdmVyc2lvbiwgSSB0aGluaykuCi0KLTIwMDktMDYtMTQgMTk6MTk6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZHYvZGVtby1wbGF5LmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbGV2ZWwvUkVBRE1FOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL2xldmVsL2RlbW8uYzoKLQkqIHRlc3RzL29sZC9leGFtcGxlcy9sZXZlbC9wbG90LmM6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvc3dpdGNoLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9vbGQvZXhhbXBsZXMvc3dpdGNoL01ha2VmaWxlLmFtOgotCSogdGVzdHMvb2xkL2V4YW1wbGVzL3N3aXRjaC9zd2l0Y2hlci5jOgotCSAgUmVtb3ZlIGEgZmV3IG9sZCBleGFtcGxlIGFwcHMgZnJvbSB0aGUgMC44IGRheXMKLQkgIFNvbWUgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IG5ld2VyIG9uZXMsIG90aGVycyBhcmUgZGVtb2luZyBlbGVtZW50cyB0aGF0Ci0JICBkb24ndCBleGlzdCBhbnkgbG9uZ2VyIChub3QgaW4gLWdvb2QgYW55d2F5KSwgYW5kIG90aGVycyBoYXZlIG5vdCBiZWVuCi0JICB0b3VjaGVkIGluIG1hbnkgeWVhcnMgYW5kIGl0IHNlZW0gcG9pbnRsZXNzIHRvIGtlZXAgdGhlbSBhcm91bmQuCi0JICBSZW1vdmluZyB0aGVzZSBmaWxlcyBtYWtlcyBzdXJlIHdlIGRvbid0IGhhdmUgYW55IGNvZGUgaW4gb3VyIHJlcG9zaXRvcnkKLQkgIHRoYXQgdXNlcyBHdGsrIHN5bWJvbHMgd2hpY2ggYXJlIHRvIGJlIHJlbW92ZWQgZm9yIEdOT01FMywgYW5kIGFzIHN1Y2gKLQkgIHdpbGwgbWFrZSBzb21lIHNjcmlwdCB0aGF0IGdyZXBzIGZvciB0aGlzIGtpbmQgb2Ygc3R1ZmYgZ2l2ZSB1cyBhIGNsZWFuCi0JICBiaWxsIG9mIGNvZGUgaGVhbHRoLiBGaXhlcyAjNTg1NzU3LgotCi0yMDA5LTA2LTEzIDIxOjAyOjQ1IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSogY29tbW9uOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbnBheS5jOgotCSAgcnRwc2lyZW5wYXk6IFJlbW92ZSBkZXByZWNhdGVkIHN5bWJvbAotCSAgUGF0Y2ggYnk6IEx1aXMgTWVuaW5hCi0KLTIwMDktMDYtMTMgMTA6NDM6NTUgKzAyMDAgIE1hcnZpbiBTY2htaWR0IDxtYXJ2aW5fc2NobWlkdEBnbXgubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBEb24ndCBydW4gdGhlIGZsYWNkZWMgdGVzdCBpZiB0aGUgcGx1Z2luIGlzbid0IGJ1aWx0LiBGaXhlcyAjNTg1NjMwCi0KLTIwMDktMDYtMTIgMTY6MDY6MjggKzAyMDAgIFBhdHJpY2sgUmFkaXppIDxwYXRyaWNrLnJhZGl6aSBhdCBheGlzLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogQWRkIFJUUCBibG9ja3NpemUgZnVuY3Rpb25hbGl0eQotCSAgQWRkIHByb3BlcnR5IHRvIG1ha2UgdGhlIGNsaWVudCBzdWdnZXN0IGEgYmxvY2tzaXplIHRvIHRoZSBzZXJ2ZXIuCi0JICBGaXhlcyAjNTg1NTQ5Ci0KLTIwMDktMDYtMTEgMjI6MzA6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvUkVBRE1FOgotCSAgcnRwOiB1cGRhdGUgUkVBRE1FLCBmaXggc29tZSB0eXBvcywgbWVudGlvbiBnc3RydHBiaW4KLQotMjAwOS0wNi0xMSAxOToxMDo1MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBoYW5kbGUgYm9yZGVyIGNhc2VzIGluIHJlc2FtcGxlcgotCi0yMDA5LTA2LTExIDEzOjMyOjIyICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3VwbG9hZC5tYWs6Ci0JICBkb2NzOiBCdW1wIGNvbW1vbi4gVXNlIHVwbG9hZC1kb2MubWFrIGluc3RlYWQgb2YgdXBsb2FkLm1hawotCSAgUmVtb3ZlIHRoZSBsb2NhbCBjb3B5IG9mIHVwbG9hZC5tYWsgaW4gZmF2b3VyIG9mIHVzaW5nIHRoZSBzaGFyZWQKLQkgIHVwbG9hZC1kb2MubWFrZSBpbiBjb21tb24vCi0KLTIwMDktMDYtMTEgMTE6Mzk6MjUgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L2dvb20vZ29vbV9jb25maWdfcGFyYW0uaDoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIGRvY3M6IFF1aWV0ZW4gYSBjb3VwbGUgbW9yZSBkb2NzIHdhcm5pbmdzCi0KLTIwMDktMDYtMTEgMTE6Mjc6MjYgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL2x6by5jOgotCSAgZG9jczogUmVtb3ZlIGd0ay1kb2MgY29tbWVudCBtYXJrZXIKLQkgIFRoZXNlIGNvbW1lbnQgYmxvY2tzIGFyZW4ndCBndGstZG9jIGNvbW1lbnRzIGFuZCBjYXVzZSBhbm5veWluZyBub2lzZSBpbgotCSAgdGhlIGRvY3MgYnVpbGQuCi0KLTIwMDktMDYtMTEgMTA6MDU6MzIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSAgZGVpbnRlcmxhY2U6IEltcGxlbWVudCB1cHN0cmVhbSBuZWdvdGF0aW9uCi0KLTIwMDktMDYtMTAgMjE6NDc6NDAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBJbXByb3ZlIGRlYnVnZ2luZyBhbmQgY2xlYW4gdXAgc29tZSBjb2RlCi0KLTIwMDktMDYtMTAgMTQ6NTU6MTggKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBDbGlwIGJ1ZmZlcnMgdG8gdGhlIGN1cnJlbnQgc2VnbWVudCBpZiBwb3NzaWJsZQotCi0yMDA5LTA2LTEwIDE0OjQ1OjA2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaDoKLQkgIGRlaW50ZXJsYWNlOiBDbGVhbiB1cCBpbmNsdWRlcyBhbmQgY2xlYW4gdXAgb3JkZXIgb2YgaW5zdGFuY2Ugc3RydWN0IGZpZWxkcwotCi0yMDA5LTA2LTEwIDE2OjA5OjU2IC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgcnRwaDI2M3BheTogRGVmYXVsdCB0byBkb2luZyBBLCBCIGFuZCBDIG1vZGVzLCBub3Qgb25seSBBCi0KLTIwMDktMDYtMTAgMDk6NTY6MTEgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgIGRlaW50ZXJsYWNlOiBGaXggUW9TIGNhbGN1bGF0aW9ucwotCSAgVGhlIGRpZmYgaXMgYSBzaWduZWQgaW50ZWdlciwgbm90IGFuIHVuc2lnbmVkIG9uZSBvZiBjb3Vyc2UuCi0JICBJbiBtb2RlcyBvdGhlciB0aGFuIEdTVF9ERUlOVEVSTEFDRV9BTEwgZXZlcnkgZnJhbWUgaGFzIHR3aWNlIHRoZQotCSAgZHVyYXRpb24gb2YgdGhlIGZpZWxkIGR1cmF0aW9uLgotCi0yMDA5LTA2LTA5IDE0OjEzOjMxIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkgIHJ0cHNpcmVucGF5OiBQdXQgdGhlIGJpdHJhdGUgaW4gdGhlIFJUUCBjYXBzCi0JICBUaGUgTVMgY29kZSBzZWVtcyB0byByZXF1aXJlIHRoZSBiaXRyYXRlIHRvIGludGVyb3BlcmF0ZSBhbmQKLQkgIGRyYWZ0LWlldGYtYXZ0LXJ0cC1nNzIyMS0wMCBhbHNvIGhhcyBpdC4KLQotMjAwOS0wNi0wOSAxOTo1NTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JICBkZWludGVybGFjZTogSW1wbGVtZW50IGJhc2ljIFFvUwotCSAgVGhpcyBjaGFuZ2UgaXMgYmFzZWQgb24gVGltJ3MgUW9TIGltcGxlbWVudGF0aW9uCi0JICBmb3IganBlZ2RlYy4KLQotMjAwOS0wNi0wOSAxOToyOTo1MSArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IERpcmVjdGx5IHByb3h5IGV2ZW50cy9xdWVyaWVzIHRvIHRoZSBwZWVyIHBhZHMKLQkgIFRoaXMgcmVtb3ZlcyBzb21lIG92ZXJoZWFkIGludHJvZHVjZWQgYnkgdGhlIGRlZmF1bHQgaGFuZGxlcnMKLQkgIHRoYXQgbmVlZCB0byBpdGVyYXRlIG92ZXIgdGhlIG90aGVyIHBhZHMuCi0KLTIwMDktMDYtMDkgMTA6Mzg6NTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBkZWJ1Z19tZW1kdW1wKCkgdW5rbm93biB0YWdzLiBSZWZhY3RvciBqdW5rIHBhcnNpbmcgY29kZS4KLQkgIFRoaXMgbWFrZXMgbGlmZSBzbGlnaHRseSBlYXNpZXIgd2hlbiBkZWJ1Z2dpbmcgYXZpIGZpbGVzLgotCi0yMDA5LTA2LTA4IDA4OjIxOjQzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgcnRwOiBEb24ndCBmb3JnZXQgdG8gZGlzdCB0aGUgaGVhZGVycyBmb3IgdGhlIENFTFQgKGRlKXBheWxvYWRlcnMuCi0KLTIwMDktMDYtMDcgMjA6NTQ6MDYgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIFJldmVydCAiUmV2ZXJ0ICJxdGRlbXV4OiBmaWxsIHRpbWVzdGFtcCB0YWJsZSBjb21wbGV0ZWx5IiIKLQkgIFRoaXMgcmV2ZXJ0cyBjb21taXQgOWYwMjJjOGE4NTAzYzJjZTBmYTYxN2ZkYjUwZTQxNzA2ZGQ0MTJmNS4KLQkgIFNvcnJ5LCBJIHdhcyB0aGlua2luZyBhYm91dCB0aGUgd3JvbmcgbW9kdWxlLgotCi0yMDA5LTA2LTA3IDIwOjQ5OjUwICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBSZXZlcnQgInF0ZGVtdXg6IGZpbGwgdGltZXN0YW1wIHRhYmxlIGNvbXBsZXRlbHkiCi0JICBUaGlzIHJldmVydHMgY29tbWl0IDc5MGIwNTBmYzUzMDJjYWU4OWNkZGNkMjNiMjU4MDkzOTY3ZDA1YTkuCi0JICBJIGZvcmdvdCB3ZSB3ZXJlIGZyb3plbi4KLQotMjAwOS0wNi0wNyAyMDo0Njo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZmlsbCB0aW1lc3RhbXAgdGFibGUgY29tcGxldGVseQotCSAgV2hlbiB0aGVyZSBhcmUgbGVzcyB0aW1lc3RhbXBzIHRoYXQgdGhlcmUgYXJlIHNhbXBsZXMsIGZpbGwgdXAgdGhlIHNhbXBsZSB0YWJsZQotCSAgd2l0aCB0aGUgbGFzdCBrbm93IHRpbWVzdGFtcC4gVGhpcyBzaXR1YXRpb24gY2FuIGhhcHBlbiB3aGVuIHRoZSBsYXN0IHNhbXBsZQotCSAgZG9lcyBub3QgZGVjb2RlIGFuZCBkb2Vzbid0IG5lZWQgYSB0aW1lc3RhbXAuIFdlIGhvd2V2ZXIgY2FsY3VsYXRlIHRoZSB0b3RhbAotCSAgdHJhY2sgbGVuZ3RoIHVzaW5nIHRoZSBsYXN0IHNhbXBsZSB0aW1lc3RhbXAgc28gd2UgbmVlZCB0byBoYXZlIHNvbWV0aGluZwotCSAgc2Vuc2libGUgaW4gdGhlcmUuCi0JICBGaXhlcyAjNTg1MDU2Ci0KLTIwMDktMDYtMDcgMTM6Mzc6MDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IGhhbmRsZSBMSVNUIElORk8gb2YgMCBzaXplCi0JICBIYW5kbGUgTElTVCBJTkZPIGNodW5rcyBvZiAwIHNpemUgaW5zdGVhZCBvZiBjYXVzaW5nIGVycm9ycy4KLQkgIEZpeGVzICM1ODQ5ODEKLQotMjAwOS0wNi0wNyAxMzoyNDo0NSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBSZXZlcnQgIndhdnBhcnNlOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cywgbW92ZSB2YXJpYWJsZSB0byB3aGVyZSBpdCdzIG5lZWRlZC4iCi0JICBSZXZlcnRzIGNvbW1pdCA0NDI1NmE3OGY4ZGQ3OWE5MWYzYmIyYWI3YzNhYTYyM2MwOTdiYjhhIGFuZCB1c2UgdGhlIHJlc3VsdCBpbgotCSAgZXJyb3IgcmVwb3J0aW5nIHNvIHRoYXQgd2UgY2FuIHNlZSB3aGF0J3MgZ29pbmcgb24uCi0KLTIwMDktMDYtMDUgMTg6NTU6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5Lmg6Ci0JICBjZWx0ZGVwYXk6IGFkZCBDRUxUIGRlcGF5bG9hZGVyCi0KLTIwMDktMDYtMDUgMTU6MzA6NTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGNlbHRwYXkuaDoKLQkgIHJ0cGNlbHRwYXk6IGFkZCBDRUxUIFJUUCBwYXlsb2FkZXIKLQotMjAwOS0wNi0wNSAxNjo1NDo0OCArMDEwMCAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmM6Ci0JICBzdW5hdWRpbzogRml4IHN3aXRjaCBzZXR0aW5nIG9uIHNvbWUgZGV2aWNlcy4gQWRkIGRlYnVnLiBGaXggYSBGSVhNRS4KLQkgIEZpeCB0aGUgc2V0dGluZyBvZiB0b2dnbGUgc3dpdGNoZXMgb24gc29tZSBicm9rZW4gYXVkaW8gZHJpdmVycyB3aGljaAotCSAgcmVwb3J0IHRoYXQgbm8gYXVkaW8gcG9ydHMgYXJlIHNldHRhYmxlIGJ5IGlnbm9yaW5nIHRoZSBtb2RfcG9ydCBmaWVsZAotCSAgdGhlcmUuCi0JICBBZGQgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzLgotCSAgRml4IGEgRklYTUUgbm93IHRoYXQgR29vZCByZWxpZXMgb24gYSBuZXcgZW5vdWdoIGdzdC1wbHVnaW5zLWJhc2UuCi0KLTIwMDktMDYtMDQgMTI6Mjc6MTkgKzAxMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBzeXMvc3VuYXVkaW8vTWFrZWZpbGUuYW06Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5oOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuaDoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suaDoKLQkgIHN1bmF1ZGlvOiBTdXBwb3J0IG5ldyBmbGFncyBmb3Igb3B0aW9ucyBhbmQgYWN0aW9ucwotCSAgVXNlIG5ldyBhdWRpbyBtaXhlciBmbGFncyBhZGRlZCBpbiBCYXNlIDAuMTAuMjMgdG8gZXhwb3NlIGZsYWdzIGFuZCBvcHRpb25zCi0JICBvbiB0aGUgU3VuQXVkaW8gZGV2aWNlcy4KLQkgIEZpeGVzOiAjNTgzNTkzCi0JICBQYXRjaCBCeTogQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCSAgUGF0Y2ggQnk6IEdhcnJldHQgRCdBbW9yZSA8Z2FycmV0dC5kYW1vcmVAc3VuLmNvbT4KLQotMjAwOS0wNS0xNSAxMTo1MDozOCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JICBkZWludGVybGFjZTogRmlyc3QgdHJ5IHRvIGhhbmRsZSBEVkQgc3RpbGwgZnJhbWVzIGNvcnJlY3RseQotCSAgVGhpcyBoZWxwcyBhIGJpdCB3aXRoIGJ1ZyAjNTgyNzQwIGJ1dCBzdGlsbCBkb2Vzbid0IG1ha2UgaXQgd29yay4KLQotMjAwOS0wNi0wNCAxNzozNzowMyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IG9ubHkgbm90aWZ5IGlmIGFsbCBjaGVja3MgcGFzc2VkCi0JICBSZXBsYWNlIGdvdG8gZG9uZTogd2l0aCByZXR1cm4sIGFzIHRob3NlIGFyZSBjaGVja3Mgd2hlbiB3ZSBkb24ndCB3YW50IHRvIGZsYWcgYQotCSAgcGVuZGluZyBub3RpZnkuCi0KLTIwMDktMDYtMDQgMTU6MTk6MDUgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IHNldCB0aGUgcmlnaHQgc3RhdGUgb24gcnRwYmluCi0JICBXZSBuZWVkIHRvIHNldCB0aGUgc3RhdGUgb2YgZ3N0cnRwYmluIHRvIHRoZSBzYW1lIHN0YXRlIGFzIG91ciBzb3VyY2UgZWxlbWVudHMuCi0JICBUaGlzIGZpeGVzIGZhbGxiYWNrIHRvIFRDUCBhZ2Fpbi4KLQotMjAwOS0wNi0wMyAxODoyMzo1MyArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGNoZWNrIHBvaW50ZXIgYmVmb3JlIGFjY2Vzc2luZwotCSAgTW92ZSBleGlzdGluZyBjaGVjayBhIGZldyBsaW5lcyB1cCwgc28gdGhhdCB3ZSBjaGVjayBiZWZvcmUgYWNjZXNzaW5nIGZpZWxkcy4KLQotMjAwOS0wNi0wMyAxODoyMToxMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHJlbmFtZSBnc3RfcHVsc2Vfc2lua19nZXRfdGltZSB0byBnc3RfcHVsc2VzaW5rX2dldF90aW1lCi0JICBSZW5hbWUgaW50ZXJuYWwgbWV0aG9kIGZvciBjb25zaXN0ZW5jeS4KLQotMjAwOS0wNi0wMyAxODoxOToyMiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHVzZSB2YWx1ZXMgZnJvbSBwYV9zdHJlYW1fZ2V0X2J1ZmZlcl9hdHRyKCkKLQkgIFdlIHdlcmUgcHV0dGluZyB0aGUgcmVxdWVzdGVkIHZhbHVlcyBiYWNrIGludG8gcmluZ2J1ZmZlciBzcGVjLCBpbnN0ZWFkIG9mCi0JICB1c2luZyB0aGUgcXVlcmllZCB2YWx1ZXMuCi0KLTIwMDktMDYtMDIgMTk6MzI6MjEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd3BheS5jOgotCSAgdnJhd3BheTogdHJpbSBvdXRwdXQgYnVmZmVycwotCSAgUmVtb3ZlIHRoZSBsZWZ0b3ZlciB1bnVzZWQgYnl0ZXMgaW4gdGhlIG91dHB1dCBidWZmZXIuCi0JICBGaXhlcyAjNTg0NjEzCi0KLTIwMDktMDYtMDIgMTk6MzA6MzAgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JICB2cmF3ZGVwYXk6IGZpeCBwYXJzaW5nIG9mIHNhbXBsaW5nIGZpZWxkCi0JICBjb21taXQgYTEyZDlhODBmMjI1YmU5N2IzNjc0YjFhMDUwNmFjNjY1NDRkYmY0OSBicm9rZSB0aGUgcGFyc2luZyBvZiB0aGUKLQkgIHNhbXBsaW5nLgotCi0yMDA5LTA1LTI3IDE3OjA2OjM0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IEF2b2lkIHBvc3NpYmxlIG92ZXJmbG93IGluIGNhbGN1bGF0aW9ucwotCSAgQSBtYWxmb3JtZWQgKG9yIHNpbXBseSBodWdlKSBQTkcgZmlsZSBjYW4gbGVhZCB0byBpbnRlZ2VyIG92ZXJmbG93IGluCi0JICBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciwgbGVhZGluZyB0byBjcmFzaGVzIG9yIGJ1ZmZlcgotCSAgb3ZlcmZsb3dzIGxhdGVyLiBGaXhlcyBTQTM1MjA1IHNlY3VyaXR5IGFkdmlzb3J5LgotCi0yMDA5LTA2LTAyIDAwOjQ4OjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgZmxhY2VuYzogc29tZSBtb3JlIGxvZ2dpbmcgLSBkdW1wIGhlYWRlciBwYWNrZXRzCi0JICBBbHNvLCB0aGUgZmluYWwgZml4aW5nIHVwIG9mIHRoZSBoZWFkZXJzIGlzIGV4cGVjdGVkIGFuZCBub3Qgc29tZXRoaW5nCi0JICB3ZSBzaG91bGQgd2FybiBhYm91dC4KLQotMjAwOS0wNi0wMiAwMDozNzoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIGZsYWNlbmM6IG5ldmVyIGV2ZXIgcGFzcyB2YWx1ZXMgPjM2Yml0cyB0byBfc2V0X3RvdGFsX3NhbXBsZXNfZXN0aW1hdGUoKQotCSAgTGV0J3MgYmUgcGFyYW5vaWQgYW5kIG1ha2Ugc3VyZSB3ZSBuZXZlciBwYXNzIGEgbnVtYmVyIHRoYXQgdGFrZXMgdXAKLQkgIG1vcmUgdGhhbiAzNiBiaXRzIHRvIF9zZXRfdG90YWxfc2FtcGxlc19lc3RpbWF0ZSgpLCBzaW5jZSBsaWJGTEFDCi0JICBleHBlY3RzIGFsbCB0aGUgb3RoZXIgYml0cyB0byBiZSB6ZXJvLCBhbmQgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UKLQkgIG5laWdoYm91cmluZyBmaWVsZHMgaW4gdGhlIGdsb2JhbCBzdHJlYW0gaW5mbyBoZWFkZXIgbWF5IGdldCBtZXNzZWQKLQkgIHVwIGluYWR2ZXJ0ZW50bHksIHNvIHRoYXQgZmxhYyAtZCByZWZ1c2VzIHRvIGRlY29kZSB0aGUgc3RyZWFtLgotCSAgU2VlICM1ODQ0NTUuCi0KLTIwMDktMDYtMDEgMjI6MzM6MDIgKzAyMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIEFkZHJlc3MgYmFkIEZMQUMgc2FtcGxlIGxlbmd0aCBlbmNvZGluZyBvZiAjNTg0NDQ1NQotCSAgQ29tbWl0IGRmNzA3YzY2NjQzM2E3OGQzODc4YWY2ZjA1NTY5OGQ1NzU2MjI2YzQKLQkgIGludHJvZHVjZWQgYW4gb2J2aW91cyBidWcgaW4gdGhlIHNhbXBsZSBsZW5ndGggY2FsY3VsYXRpb24sCi0JICB1c2luZyB0aGUgd3JvbmcgbWFjcm8gZm9yIGNvbnZlcnNpb24uCi0KLTIwMDktMDYtMDEgMTE6NTg6MjEgLTA3MDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9tbXguaDoKLQkgIGRlaW50ZXJsYWNlOiBGaXggc3B1cmlvdXMgY29sb25zIGluIGFzbSBjb2RlCi0JICBGaXhlcyAjNTg0MTc0LgotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLTIwMDktMDYtMDEgMDA6NDA6NTUgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogc2tpcCBKVU5LIGNodW5rcyBpbiBkYXRhIHNlY3Rpb24gaW4gc3RyZWFtaW5nIG1vZGUKLQkgIFNraXAgSlVOSyB0YWdzIGluIHN0cmVhbWluZyBtb2RlIGFzIHdlbGwgaW5zdGVhZCBvZiBFT1NpbmcKLQkgIHByZW1hdHVyZWx5LiBGaXhlcyAjNTY0MTAwLgotCi0yMDA5LTA1LTI4IDE0OjAxOjE3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYmdyYS5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfaTQyMC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogRG9uJ3QgdXNlIC8vIGNvbW1lbnRzCi0KLTIwMDktMDUtMjggMTM6NTY6MTUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9iZ3JhLmM6Ci0JICB2aWRlb21peGVyOiBGaXggYmFja2dyb3VuZCBibGl0dGluZyB3aGVuIGEgY29sb3IgbW9kZSBpcyBzZWxlY3RlZCB3aXRoIEJHUkEKLQotMjAwOS0wNS0yOCAxMzo1NDoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2F5dXYuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2JncmEuYzoKLQkqIGdzdC92aWRlb21peGVyL2JsZW5kX2k0MjAuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIHZpZGVvbWl4ZXI6IFNvbWUgY2xlYW51cCBhbmQgZml4IHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgZnJhbWUgc2l6ZSBpbiBieXRlcwotCi0yMDA5LTA1LTI4IDEzOjM1OjUyICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfaTQyMC5jOgotCSAgdmlkZW9taXhlcjogRml4IEk0MjAgYmxlbmRpbmcgdG8gYWN0dWFsbHkgZG8gc29tZXRoaW5nCi0JICBGb3IgdGhpcyB3ZSBhKSBpbXBsZW1lbnQgdGhlIGNoZWNrZXJzIGZpbGxpbmcgYW5kIGIpCi0JICBhY3R1YWxseSBibGVuZCB0aGUgc3JjL2Rlc3QgYnkgdXNpbmcgdGhlIHNyYyBhbHBoYSB2YWx1ZQotCSAgZnJvbSB0aGUgcGFkLgotCi0yMDA5LTA1LTI4IDEzOjE0OjEzICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvYmxlbmRfYmdyYS5jOgotCSAgdmlkZW9taXhlcjogRml4IEFSR0IgYmxlbmRpbmcgdG8gYWN0dWFsbHkgd29yawotCi0yMDA5LTA1LTI4IDEzOjA0OjUxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9iZ3JhLmM6Ci0JICB2aWRlb21peGVyOiBCbGVuZCBCR1JBIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHVzaW5nIENhaXJvCi0KLTIwMDktMDUtMjggMTI6NTU6MTYgKzAyMDAgIEFsZXggVWdhcnRlIDxhbGV4dWdhcnRlQGdtYWlsLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9heXV2LmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9iZ3JhLmM6Ci0JKiBnc3QvdmlkZW9taXhlci9ibGVuZF9pNDIwLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmg6Ci0JICB2aWRlb21peGVyOiBBZGQgc3VwcG9ydCBmb3IgYmxlbmRpbmcgQkdSQSBhbmQgQVlVVgotCSAgRml4ZXMgYnVnICM1NzcwMTcuCi0KLTIwMDktMDUtMjggMTI6Mzk6NDYgKzAyMDAgIEdoaXNsYWluICdBdXMnIExhY3JvaXggPGF1c0Bzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgZXF1YWxpemVyOiBVc2UgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBpbnRlcm5hbGx5IGZvciB0aGUgaW50MTYgbW9kZQotCSAgQnkgdXNpbmcgaW50MzIgYXJpdGhtZXRpYyB3ZSB3aWxsIGludHJvZHVjZSBkaXN0b3J0aW9ucyBhcyB0aGUKLQkgIElJUiBmaWx0ZXIgaXMgdmVyeSBzZW5zaXRpdmUgdG8gcm91bmRpbmcgZXJyb3JzLiBGaXhlcyBidWcgIzU4MDIxNC4KLQotMjAwOS0wNS0yOCAxMDo1NToxNiArMDEwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxjaHJpc3RpYW4uc2NoYWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBVcGRhdGUgc3BlYyBmaWxlIHdpdGggbGF0ZXN0IHBsdWdpbnMKLQotMjAwOS0wNS0yNiAxNzoxOTowOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODg4ZTBhMiB0byBjNTcyNzIxCi0KLTIwMDktMDUtMjYgMTY6MjA6MzUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgdjRsMjogY2xlYW51cCBhbmQgY29tbWVudGluZwotCSAgUmVtb3ZlIG5ld2xpbmVzIGluc2VydGVkIGJ5IGdzdC1pbmRlbnQgb25jZS4gUmVtb3ZlIHVudXNlZCB2YXIgZnJvbSBpbnN0YW5jZQotCSAgc3RydWN0LiBBZGQgY29tbWVudHMuIEFkZCBhbm90aGVyICNkZWZpbmUgZm9yIGRlZmF1bHQgcHJvcGVydHkgdmFsdWUuCi0KLTIwMDktMDUtMDYgMTI6NDM6MzUgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBtYWtlZmlsZTogaWRlYSBhYm91dCBtYWtlaW5nIG1vcmUgc291cmNlcy9zaW5rcyB0ZXN0YWJsZSBhZ2FpbgotCi0yMDA5LTA1LTI1IDE2OjMzOjM1ICswMjAwICBKb2huIEtlZXBpbmcgPGpvaG4ua2VlcGluZyBhdCBsaW5lb25lLm5ldD4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIHBuZ2RlYzogbWF0Y2ggZ19tYWxsb2MoKSB3aXRoIGdfZnJlZSgpCi0JICBNYXRjaGluZyBnX21hbGxvYygpIHdpdGggYSBnX2ZyZWUoKSBpcyBpbXBvcnRhbnQgd2hlbiBhIGN1c3RvbSBhbGxvY2F0b3IgaXMKLQkgIGluc3RhbGxlZC4KLQkgIEZpeGVzICM1ODM4MDMKLQotMjAwOS0wNS0xMiAxODozOToyOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkgIHJ0cG1wNHZwYXk6IGRvbid0IGxvb2sgZm9yIGhlYWRlcnMgaW4gc29tZSBjYXNlcwotCSAgSW4gc29tZSBzdHJlYW1zIChzdGFydGluZyB3aXRoIDAwMDAwMTAwKSBkb24ndCBsb29rIGZvciB0aGUgaGVhZGVycyBidXQgcHVzaAotCSAgZGF0YSBhcyBpdCBpcy4KLQkgIEZpeGVzICM1ODIxNTMKLQotMjAwOS0wNS0xMyAxMTo1MDoyMiArMDIwMCAgUGF0cmljayBSYWRpemkgPHBhdHJpY2sucmFkaXppIGF0IGF4aXMuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggbWVtb3J5IGxlYWsgb2YgbWVzc2FnZXMKLQkgIEZyZWUgbWVzc2FnZXMgY29ycmVjdGx5LgotCSAgRml4ZXMgIzU3NzMxOAotCi0yMDA5LTA1LTI0IDE5OjMyOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBtYWtlIGZha2VzcmMgc2lsZW50Ci0JICBNYWtlIHRoZSBmYWtlc3JjIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgZHVtbXkgcGFja2V0cyBzaWxlbnQuCi0KLTIwMDktMDUtMjQgMTY6MzM6NDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGRvbid0IHNlbmQgdGVhcmRvd24gYmVmb3JlIHNldHVwCi0JICBEb24ndCBzZW5kIGEgVEVBUkRPV04gcmVxdWVzdCB3aGVuIHdlIGRpZCBub3QgbWFuYWdlIHRvIHN1Y2Nlc3NmdWxseSBzZXR1cCBhCi0JICBzdHJlYW0uCi0KLTIwMDktMDUtMTQgMTQ6NDY6MTQgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgbWF0cm9za2FkZW11eDogUG9wdWxhdGUgYSBHc3RJbmRleCB0aGF0IGlzIHNldCBvbiBtYXRyb3NrYWRlbXV4Ci0KLTIwMDktMDUtMTQgMTA6MzU6MjIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgZmx2bXV4OiBHZXQgdGhlIG1heCBkdXJhdGlvbiBmcm9tIHVwc3RyZWFtIGlmIHRoZXJlJ3Mgbm8gZHVyYXRpb24gdGFnCi0KLTIwMDktMDUtMTQgMTA6Mjk6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkgIGZsdm11eDogV3JpdGUgYW4gaW5kZXggdGFibGUgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQotCi0yMDA5LTA1LTIyIDAxOjEyOjM1ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogYXV0b2dlbi5zaDoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGF1dG90b29sczogbW92ZSB0aGUgLVduby1wb3J0YWJpbGl0eSBmcm9tIGF1dG9nZW4uc2ggdG8gY29uZmlndXJlLmFjCi0JICBJZiB3ZSdyZSBsdWNreSBpdCdsbCBnZXQgdXNlZCBvbiBhdXRvbWF0aWMgcmVidWlsZHMgYXMgd2VsbCB0aGF0IHdheS4KLQotMjAwOS0wNS0yMiAwMToxMDoxMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIG00L2dzdC1maW9ucmVhZC5tNDoKLQkgIG00OiBmaXggJ3N1c3BpY2lvdXMgY2FjaGUgaWQnIHdhcm5pbmdzCi0JICBhbmQgdXBkYXRlIGNvbW1vbiB0byBwdWxsIGluIGEgc2ltaWxhciBmaXguIEFsc28gY2hlY2sgaW4gY29uZmlndXJlCi0JICB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBkbyB3aGlsZSBtYWNyb3MgKEdMaWIgd2FudHMgdGhpcwotCSAgZGVmaW5lZCBhbmQgaXQgaXMgbmVlZGVkIHRvIGF2b2lkIHdhcm5pbmdzIHdpdGggc29tZSBjKysgY29tcGlsZXJzCi0JICBhcHBhcmVudGx5KS4KLQotMjAwOS0wNS0yMiAwMTozOTozMyArMDMwMCAgWmVlc2hhbiBBbGkgKEtoYXR0YWspIDx6ZWVzaGFuYWtAZ25vbWUub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBzb3VwaHR0cHNyYzogQnVtcC11cCBsaWJzb3VwLTIuMjQgZGVwIHRvID49IDIuMjYKLQkgIFRoZSBoZWxwZXIgZnVuY3Rpb24gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSB0aGF0IHdlIG5vdyB1c2UKLQkgIHdhcyBhZGRlZCBpbiAyLjI2LgotCi0yMDA5LTA1LTIwIDE3OjU3OjU5ICswMzAwICBaZWVzaGFuIEFsaSAoS2hhdHRhaykgPHplZXNoYW5ha0Bnbm9tZS5vcmc+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBzb3VwaHR0cHNyYzogU2V0IGNhcHMgZm9yIGF1ZGlvL0wxNiBjb250ZW50LXR5cGUKLQkgIFdoZW4gIkNvbnRlbnQtVHlwZSIgaGVhZGVyIGlzICJhdWRpby9MMTYiLCB3ZSBuZWVkIHRvIHNldCB0aGUgY2FwcyBvbiB0aGUKLQkgIG91dGdvaW5nIGJ1ZmZlcnMgc28gdGhhdCBkb3duc3RyZWFtIGVsZW1lbnRzIGNhbiBoYXZlIG1lYW5zIHRvIGRldGVjdCB0aGUKLQkgIHN0cmVhbSB0eXBlIGFuZCBoYW5kbGUgaXQgYXBwcm9wcmlhdGVseS4gVGVzdGVkIHdpdGggSFRUUCBzdHJlYW0gcHJvdmlkZWQKLQkgIGJ5IHB1bHNlLWF1ZGlvJ3MgaHR0cCBtb2R1bGUgKGdpdCBtYXN0ZXIpLgotCi0yMDA5LTA1LTIwIDE1OjA2OjI1ICswMzAwICBaZWVzaGFuIEFsaSAoS2hhdHRhaykgPHplZXNoYW5ha0Bnbm9tZS5vcmc+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgc291cGh0dHBzcmM6IFJlbmFtZSBpY3lfY2FwcyB0byBzcmNfY2FwcwotCi0yMDA5LTA1LTIxIDIzOjM5OjEzICswMjAwICBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsaXBwZSBhdCBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogYnVtcCBtYXggc2l6ZSB0byA2NTUzNXg2NTUzNQotCSAgUmVtb3ZlIGFydGlmaWNpYWwganBlZyBpbWFnZSBsaW1pdHMuCi0JICBGaXhlcyAjNTgzMDQ4LgotCi0yMDA5LTA1LTIxIDIxOjM2OjAyICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHdpbjMyOiBVcGRhdGUgdGhlIHdpbjMyIGNvbmZpZy5oCi0KLTIwMDktMDUtMTkgMTU6MTI6MDkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBSZWNvZ25pc2UgUEdTIHN1YnBpY3R1cmUgc3RyZWFtcyAtIHRoZSBibHVyYXkgZm9ybWF0LgotCSAgUmVjb2duaXNlIGFuZCBhcHBseSBhcHByb3ByaWF0ZSBjYXBzIHRvIFBHUyAoUHJlc2VudGF0aW9uIEdyYXBoaWMgU3RyZWFtKQotCSAgc3VicGljdHVyZSBzdHJlYW1zLgotCi0yMDA5LTA1LTE1IDEwOjQyOjE5ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogQ29udmVydCBhbiBlcnJvbmVvdXMgYXNzZXJ0aW9uCi0JICBPY2Nhc2lvbmFsbHksIHdlIGdldCBhIGNoYW5nZSBjYWxsYmFjayBmb3IgYW4gb2xkIHN0cmVhbSwgdHJpZ2dlcmluZwotCSAgdGhlIGFzc2VydGlvbiB1bm5lY2Vzc2FyaWx5LiBKdXN0IGlnbm9yZSBzdWNoIGNhbGxiYWNrcy4KLQotMjAwOS0wNS0yMCAxNjoxNDo0MCAtMDQwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZTogUHJpbnQgYSB3YXJuaW5nIG9uIHVuZGVyL292ZXJmbG93cwotCi0yMDA5LTA1LTIwIDE4OjQ1OjQ1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogcGFyc2UgaW4yNCBib3hlcyB0byBnZXQgZW5kaWFubmVzcwotCSAgaW4yNCBzYW1wbGVzIGFyZSBub3JtYWxseSBiaWctZW5kaWFuIGJ1dCBhbiBlbmRhIGJveCBjYW4gY2hhbmdlIHRoaXMgdG8KLQkgIGxpdHRsZS1lbmRpYW4uIFJlY3Vyc2UgaW50byB0aGUgaW4yNCBib3ggYW5kIGZpbmQgdGhlIGVuZGEgYm94IHNvIHRoYXQgd2UgZ2V0Ci0JICB0aGUgZW5kaWFubmVzcyByaWdodC4KLQkgIEZpeGVzICM1ODI1MTUKLQotMjAwOS0wNS0yMCAxNDoxNDozMSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgbXVsdGlwYXJ0ZGVtdXg6IGFkZCBwcm9wZXIgcGFkdGVtcGxhdGUKLQotMjAwOS0wNS0yMCAxNDowMjo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgbXVsdGlwYXJ0ZGVtdXg6IGFkZCBtb3JlIG1pbWUgdHlwZXMKLQkgIEFkZCBtaW1lLXR5cGUgZm9yIFBhbmFzb25pYyBnNzI2IGFuZCBhZGQgbW9yZSByZXF1aXJlZCBjYXBzIHByb3BlcnRpZXMgZm9yIG90aGVyCi0JICBHNzI2IG1pbWUtdHlwZXMuCi0JICBNYWtlIG1pbWUtdHlwZXMgY2FzZSBpbnNlbnNpdGl2ZS4KLQkgIFNlZSAjNTgyMTY5Ci0KLTIwMDktMDUtMjAgMTM6NDc6NTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaDoKLQkgIG11bHRpcGFydGRlbXV4OiBhZGQgZmxvdyBhZ2dyZWdhdGlvbgotCi0yMDA5LTA1LTIwIDEzOjI5OjAyICswMjAwICBBcm5vdXQgVmFuZGVjYXBwZWxsZSA8YXJub3V0QG1pbmQuYmU+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgIG11bHRpcGFydGRlbXV4OiBhbGxvdyBjb250ZW50IHRvIGJlIGVtcHR5LgotCSAgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgZG9lc24ndCBhbGxvdyBidWZmZXIgdG8gYmUgZW1wdHkuCi0JICBTaW1wbHkgc2tpcCBhbnkgcGFydCB3aGVyZSB0aGUgY29udGVudCBpcyBlbXB0eS4gIERvbid0Ci0JICBjcmVhdGUgYSBwYWQgZm9yIGl0IGVpdGhlci4KLQkgIFNlZSAjNTgyMTY5Ci0KLTIwMDktMDUtMTggMjI6MTk6MzkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwY2hhbm5lbHMuaDoKLQkgIHJ0cDogZml4IGNoYW5uZWwgcG9zaXRpb25zIGZvciBtb25vCi0KLTIwMDktMDUtMjEgMjE6MDI6MTEgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBoYWNraW5nIC0+IDAuMTAuMTUuMQotCi09PT0gcmVsZWFzZSAwLjEwLjE1ID09PQotCi0yMDA5LTA1LTIwIDIyOjM0OjE4ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4xNQotCi0yMDA5LTA1LTIwIDIyOjAzOjIxICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9wbC5wbzoKLQkqIHBvL3B0X0JSLnBvOgotCSogcG8vcnUucG86Ci0JKiBwby9zay5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JKiBwby96aF9DTi5wbzoKLQkqIHBvL3poX0hLLnBvOgotCSogcG8vemhfVFcucG86Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDktMDUtMTYgMDI6NTk6MTQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2JnLnBvOgotCSogcG8vY2EucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaWQucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbHQucG86Ci0JKiBwby9tdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vcHRfQlIucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTQuMyBwcmUtcmVsZWFzZQotCi0yMDA5LTA1LTE2IDAyOjM3OjA2ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JICBjaGVjazogRG9uJ3QgY2hhbmdlIGRpcmVjdG9yeSBpbiB0aGUgdGVzdAotCSAgQ2hhbmdpbmcgZGlyZWN0b3J5IGludmFsaWRhdGVzIHRoZSBwYXRocyB0aGUgcmVnaXN0cnkgaGFzIHBpY2tlZAotCSAgdXAgZm9yIG91ciBwbHVnaW5zLCBiZWNhdXNlIHRoZSB0ZXN0IGVudmlyb25tZW50IHNwZWNpZmllcyByZWxhdGl2ZQotCSAgcGF0aHMuIEZpeGluZyB0aGF0IGlzIGEgc2VwYXJhdGUgcHJvYmxlbSwgaW4gdGhlIG1lYW50aW1lLCBidWlsZCBhCi0JICBwYXRoIHRvIHRoZSB0ZXN0IGZpbGVzIGluc3RlYWQgb2YgY2hhbmdpbmcgZGlyZWN0b3J5LiBGaXhlcyB0aGUKLQkgIGRpc3RjaGVjay4KLQotMjAwOS0wNS0xNiAwMTo1Mzo0NiArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB3aW4zMi9NQU5JRkVTVDoKLQkgIHdpbjMyOiBSZW1vdmUgZGlyZWN0ZHJhdyBwcm9qZWN0IGZpbGVzIGZyb20gdGhlIHdpbjMyIG1hbmlmZXN0Ci0KLTIwMDktMDUtMTYgMDE6MjE6MzQgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSAgY2hlY2s6IFJlbW92ZSBhc3NlcnRpb24gdGhhdCBicmVha3MgY2hlY2sgYWdhaW4gZ2l0IG1hc3RlcgotCSAgUmVtb3ZlIHRoZSBhc3NlcnRpb24gdGhhdCB0aGUgc2VuZGVyIG9mIHRoZSB0YWdzIG1lc3NhZ2UgaXMgdGhlCi0JICBlbGVtZW50IHVudGlsIHdlIGRlY2lkZSB3aGV0aGVyIHRoYXQncyBnb2luZyB0byBiZSB0cnVlIG9yIG5vdC4KLQotMjAwOS0wNS0xNiAwMToxMTozMyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRpcmVjdGRyYXcueG1sOgotCSogc3lzL01ha2VmaWxlLmFtOgotCSogc3lzL2RpcmVjdGRyYXcvTWFrZWZpbGUuYW06Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3cGx1Z2luLmM6Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuaDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RkaXJlY3RkcmF3LmRzcDoKLQkqIHdpbjMyL3ZzNy9saWJnc3RkaXJlY3RkcmF3LnZjcHJvajoKLQkqIHdpbjMyL3ZzOC9saWJnc3RkaXJlY3RkcmF3LnZjcHJvajoKLQkgIE1vdmVkICdkaXJlY3RkcmF3JyBmcm9tIC1nb29kIHRvIC1iYWQKLQotMjAwOS0wNS0xNiAwMDoxODozNCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvLmdpdGlnbm9yZToKLQkgIGlnbm9yZXM6IElnbm9yZSB0aGUgZmxhY2RlYyBjaGVjayBiaW5hcnkKLQotMjAwOS0wNS0xNiAwMDoxNzo1NyArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkgIGRvY3M6IFVwZGF0ZSBpbnNwZWN0aW9uIGRldGFpbHMgZm9yIHRoZSBhdmkgcGx1Z2luCi0KLTIwMDktMDUtMTYgMDA6MDA6MDcgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6Ci0JICBNb3ZlZCAneTRtZW5jJyBmcm9tIC1iYWQgdG8gLWdvb2QKLQotMjAwOS0wNS0xMyAxNzo1NTo0NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0geTRtZW5jOiBjaGFuZ2UgbXkgZW1haWwKLQkgIGNoYW5nZSBteSBlbWFpbCB0byBzb21ldGhpbmcgbW9yZSBjdXJyZW50Ci0JICBTZWUgIzU4MDc4MwotCi0yMDA5LTA1LTEzIDE3OjU0OjQ3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgW01PVkVEIEZST00gQkFEXSB5NG1lbmM6IGRvbid0IHN0cmlwIHRpbWVzdGFtcHMKLQkgIEZpeGVzICM1ODI0ODMKLQotMjAwOC0xMS0wNCAxMjo0MjozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQURdIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2Fsc2FzcGRpZi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FtcndiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXBleHNpbmsvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hcnRzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXJ0c2QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb2ZpbGUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYnoyL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2RhdWRpby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NlbHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kYzEzOTQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kaXJhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RpcmVjdGZiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGl2eC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2R0cy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2ZhYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9mYWFkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZ3NtL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaGVybWVzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaXZvcmJpcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qcDJrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGFkc3BhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGNzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGliZmFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xpYm1tcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXBlZzJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tcGxleC9NYWtlZmlsZS5hbToKLQkgICogZXh0L211c2VwYWNrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXVzaWNicmFpbnovTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9teXRodHYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uYXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uZW9uL01ha2VmaWxlLmFtOgotCSAgKiBleHQvb2ZhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcG9seXAvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9yZXNpbmR2ZC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NkbC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Nob3V0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc25hcHNob3QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zbmRmaWxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291bmR0b3VjaC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NwYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3N3ZmRlYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Rhcmtpbi9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RoZW9yYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RpbWlkaXR5L01ha2VmaWxlLmFtOgotCSAgKiBleHQvdHdvbGFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3gyNjQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC94aW5lL01ha2VmaWxlLmFtOgotCSAgKiBleHQveHZpZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2FwcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2RzaG93L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYWlmZnBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXBwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9idWZmZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXllci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NkeGFwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NoYXJ0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY29sb3JzcGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RjY3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2R2ZHNwdS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Zlc3RpdmFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmlsdGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmxhY3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ2FtZXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9oMjY0cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9saWJyZmIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9taXhtYXRyaXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tb2RwbHVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZzFzeXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnNHZpZGVvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnZGVtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndHNtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndmlkZW9wYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L212ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L25zZi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L251dmRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvb3ZlcmxheS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGNhcHBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGxheW9uZGVtYW5kL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcmF3cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZWFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRqcGVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NjYWxldGVtcG8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZWxlY3Rvci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aHdhdmUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVlZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NwZWV4cmVzYW1wbGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdGVyZW8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdWJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC90dGEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92YmlkZWMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2Ryb3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpcnR1YWxkdWIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92bW5jL01ha2VmaWxlLmFtOgotCSAgKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvYWNtZW5jL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvY2Ryb20vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd2RlY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kdmIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9keHIzL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZmJkZXYvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3M0L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvcWNhbS9NYWtlZmlsZS5hbToKLQkgICogc3lzL3F0d3JhcHBlci9NYWtlZmlsZS5hbToKLQkgICogc3lzL3ZjZC9NYWtlZmlsZS5hbToKLQkgICogc3lzL3dpbmluZXQvTWFrZWZpbGUuYW06Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0KLTIwMDgtMDYtMjYgMTU6NTI6NDAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBbTU9WRUQgRlJPTSBCQURdIEFkZCBkb2N1bWVudGF0aW9uIGZvciBZVVY0TVBFRzIgZW5jb2RlciBlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBZVVY0TVBFRzIgZW5jb2RlciBlbGVtZW50LgotCi0yMDA3LTA0LTI0IDE1OjQ5OjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQURdIFBsdWcgc29tZSBsZWFrczsgdHJ5IHRvIG1ha2UgYnVpbGQgYm90IGhhcHB5IGFnYWluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6IChnc3RfeTRtX2VuY29kZV9pbml0KSwKLQkgIChnc3RfeTRtX2VuY29kZV9zZXRjYXBzKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBQbHVnIHNvbWUgbGVha3M7IHRyeSB0byBtYWtlIGJ1aWxkIGJvdCBoYXBweSBhZ2Fpbi4KLQotMjAwNi0xMS0xMyAxODo1NTo1NyArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgW01PVkVEIEZST00gQkFEXSBjb25maWd1cmUuYWM6IEVuYWJsZSBjZGF1ZGlvIGFuZCB5NG0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBFbmFibGUgY2RhdWRpbyBhbmQgeTRtLgotCSAgKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOiAoZ3N0X3k0bV9lbmNvZGVfYmFzZV9pbml0KSwKLQkgIChnc3RfeTRtX2VuY29kZV9jbGFzc19pbml0KSwgKGdzdF95NG1fZW5jb2RlX2luaXQpLAotCSAgKGdzdF95NG1fZW5jb2RlX3Jlc2V0KSwgKGdzdF95NG1fZW5jb2RlX3NldGNhcHMpLAotCSAgKGdzdF95NG1fZW5jb2RlX2dldF9zdHJlYW1faGVhZGVyKSwKLQkgIChnc3RfeTRtX2VuY29kZV9nZXRfZnJhbWVfaGVhZGVyKSwgKGdzdF95NG1fZW5jb2RlX2NoYWluKSwKLQkgIChnc3RfeTRtX2VuY29kZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3k0bV9lbmNvZGVfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfeTRtX2VuY29kZV9jaGFuZ2Vfc3RhdGUpLCAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSAgUG9ydCBvZiB5NG1lbmNvZGUgdG8gMC4xMC4KLQotMjAwNi0wNC0yNSAyMTo1NjozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQURdIERlZmluZSBHc3RFbGVtZW50RGV0YWlscyBhcyBjb25zdCBhbmQgYWxzbyBzdGF0aWMgKHdoZW4gZGVmaW5lZCBhcyBnbG9iYWwpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndiZGVjLmM6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmVuYy5jOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JwYXJzZS5jOgotCSAgKiBleHQvYXJ0cy9nc3RfYXJ0cy5jOgotCSAgKiBleHQvYXJ0c2QvZ3N0YXJ0c2RzaW5rLmM6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZwYXJzZS5jOgotCSAgKiBleHQvYXVkaW9maWxlL2dzdGFmc2luay5jOgotCSAgKiBleHQvYXVkaW9maWxlL2dzdGFmc3JjLmM6Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuYzoKLQkgICogZXh0L2J6Mi9nc3RiejJkZWMuYzoKLQkgICogZXh0L2J6Mi9nc3RiejJlbmMuYzoKLQkgICogZXh0L2NkYXVkaW8vZ3N0Y2RhdWRpby5jOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmM6Ci0JICAqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzoKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOgotCSAgKiBleHQvZHRzL2dzdGR0c2RlYy5jOiAoZ3N0X2R0c2RlY19iYXNlX2luaXQpOgotCSAgKiBleHQvZmFhYy9nc3RmYWFjLmM6IChnc3RfZmFhY19iYXNlX2luaXQpOgotCSAgKiBleHQvZmFhZC9nc3RmYWFkLmM6Ci0JICAqIGV4dC9nc20vZ3N0Z3NtZGVjLmM6Ci0JICAqIGV4dC9nc20vZ3N0Z3NtZW5jLmM6Ci0JICAqIGV4dC9oZXJtZXMvZ3N0aGVybWVzY29sb3JzcGFjZS5jOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNmaWxlLmM6Ci0JICAqIGV4dC9sY3MvZ3N0Y29sb3JzcGFjZS5jOgotCSAgKiBleHQvbGliZmFtZS9nc3RsaWJmYW1lLmM6Ci0JICAqIGV4dC9saWJtbXMvZ3N0bW1zLmM6IChnc3RfbW1zX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja2RlYy5jOiAoZ3N0X211c2VwYWNrZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uYzogKGdzdF9tdXNpY2JyYWluel9iYXNlX2luaXQpOgotCSAgKiBleHQvbmFzL25hc3NpbmsuYzogKGdzdF9uYXNzaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9uZW9uL2dzdG5lb25odHRwc3JjLmM6Ci0JICAqIGV4dC9zZGwvc2RsYXVkaW9zaW5rLmM6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6Ci0JICAqIGV4dC9zaG91dC9nc3RzaG91dC5jOgotCSAgKiBleHQvc25hcHNob3QvZ3N0c25hcHNob3QuYzoKLQkgICogZXh0L3NuZGZpbGUvZ3N0c2YuYzoKLQkgICogZXh0L3N3ZmRlYy9nc3Rzd2ZkZWMuYzoKLQkgICogZXh0L3Rhcmtpbi9nc3R0YXJraW5kZWMuYzoKLQkgICogZXh0L3Rhcmtpbi9nc3R0YXJraW5lbmMuYzoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfYmFzZV9pbml0KToKLQkgICogZXh0L3h2aWQvZ3N0eHZpZGRlYy5jOgotCSAgKiBleHQveHZpZC9nc3R4dmlkZW5jLmM6Ci0JICAqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXBhcnNlLmM6IChnc3RfY2R4YV9wYXJzZV9iYXNlX2luaXQpOgotCSAgKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFzdHJpcC5jOiAoZ3N0X2NkeGFzdHJpcF9iYXNlX2luaXQpOgotCSAgKiBnc3QvY2hhcnQvZ3N0Y2hhcnQuYzoKLQkgICogZ3N0L2NvbG9yc3BhY2UvZ3N0Y29sb3JzcGFjZS5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogKGdzdF9paXJfZXF1YWxpemVyX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9mZXN0aXZhbC9nc3RmZXN0aXZhbC5jOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuYzoKLQkgICogZ3N0L2ZpbHRlci9nc3RpaXIuYzoKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6Ci0JICAqIGdzdC9mcmVlemUvZ3N0ZnJlZXplLmM6Ci0JICAqIGdzdC9nYW1lcy9nc3RwdXp6bGUuYzogKGdzdF9wdXp6bGVfYmFzZV9pbml0KToKLQkgICogZ3N0L2xpYnJmYi9nc3RyZmJzcmMuYzoKLQkgICogZ3N0L21peG1hdHJpeC9taXhtYXRyaXguYzoKLQkgICogZ3N0L21wZWcxc3lzL2dzdG1wZWcxc3lzdGVtZW5jb2RlLmM6Ci0JICAqIGdzdC9tcGVnMXZpZGVvcGFyc2UvZ3N0bXAxdmlkZW9wYXJzZS5jOgotCSAgKiBnc3QvbXBlZzJzdWIvZ3N0bXBlZzJzdWJ0LmM6Ci0JICAqIGdzdC9tcGVnYXVkaW9wYXJzZS9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgKiBnc3QvbXVsdGlmaWxlc2luay9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICAqIGdzdC9vdmVybGF5L2dzdG92ZXJsYXkuYzoKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL2dzdHBhc3N0aHJvdWdoLmM6Ci0JICAqIGdzdC9wbGF5b25kZW1hbmQvZ3N0cGxheW9uZGVtYW5kLmM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdkZWMuYzoKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdlbmMuYzoKLQkgICogZ3N0L3Ntb290aC9nc3RzbW9vdGguYzoKLQkgICogZ3N0L3Ntb290aHdhdmUvZ3N0c21vb3Rod2F2ZS5jOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgICogZ3N0L3NwZWVkL2dzdHNwZWVkLmM6Ci0JICAqIGdzdC9zdGVyZW8vZ3N0c3RlcmVvLmM6Ci0JICAqIGdzdC9zd2l0Y2gvZ3N0c3dpdGNoLmM6Ci0JICAqIGdzdC90dGEvZ3N0dHRhZGVjLmM6IChnc3RfdHRhX2RlY19iYXNlX2luaXQpOgotCSAgKiBnc3QvdHRhL2dzdHR0YXBhcnNlLmM6IChnc3RfdHRhX3BhcnNlX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC92YmlkZWMvZ3N0dmJpZGVjLmM6Ci0JICAqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICAqIGdzdC92aWRlb2Ryb3AvZ3N0dmlkZW9kcm9wLmM6Ci0JICAqIGdzdC92aXJ0dWFsZHViL2dzdHhzaGFycGVuLmM6Ci0JICAqIGdzdC94aW5naGVhZGVyL2dzdHhpbmdtdXguYzogKGdzdF94aW5nX211eF9iYXNlX2luaXQpOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgKiBzeXMvY2Ryb20vZ3N0Y2RwbGF5ZXIuYzoKLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgKiBzeXMvZ2xzaW5rL2dsaW1hZ2VzaW5rLmM6Ci0JICAqIHN5cy9xY2FtL2dzdHFjYW1zcmMuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgKiBzeXMvdmNkL3ZjZHNyYy5jOiAoZ3N0X3ZjZHNyY19iYXNlX2luaXQpOgotCSAgKiBzeXMveGltYWdlc3JjL3hpbWFnZXNyYy5jOgotCSAgRGVmaW5lIEdzdEVsZW1lbnREZXRhaWxzIGFzIGNvbnN0IGFuZCBhbHNvIHN0YXRpYyAod2hlbiBkZWZpbmVkIGFzCi0JICBnbG9iYWwpCi0KLTIwMDYtMDQtMDggMjE6NDg6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEXSBGaXggIzMzNzM2NSAoZ190eXBlX2NsYXNzX3JlZiA8LT4gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmRlYy5jOiAoZ3N0X2FtcndiZGVjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JlbmMuYzogKGdzdF9hbXJ3YmVuY19jbGFzc19pbml0KToKLQkgICogZXh0L2FtcndiL2dzdGFtcndicGFyc2UuYzogKGdzdF9hbXJ3YnBhcnNlX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYXJ0cy9nc3RfYXJ0cy5jOiAoZ3N0X2FydHNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hcnRzZC9nc3RhcnRzZHNpbmsuYzogKGdzdF9hcnRzZHNpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6IChnc3RfYWZzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYXVkaW9maWxlL2dzdGFmc3JjLmM6IChnc3RfYWZzcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuYzoKLQkgICogZXh0L2NkYXVkaW8vZ3N0Y2RhdWRpby5jOiAoZ3N0X2NkYXVkaW9fY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9kaXJlY3RmYi9kZmJ2aWRlb3NpbmsuYzogKGdzdF9kZmJ2aWRlb3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzogKGdzdF9kaXZ4ZGVjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvaGVybWVzL2dzdGhlcm1lc2NvbG9yc3BhY2UuYzoKLQkgIChnc3RfaGVybWVzX2NvbG9yc3BhY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2ZpbGUuYzogKGdzdF9pdm9yYmlzZmlsZV9jbGFzc19pbml0KToKLQkgICogZXh0L2phY2svZ3N0amFjay5jOiAoZ3N0X2phY2tfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9qYWNrL2dzdGphY2tiaW4uYzogKGdzdF9qYWNrX2Jpbl9jbGFzc19pbml0KToKLQkgICogZXh0L2xjcy9nc3Rjb2xvcnNwYWNlLmM6IChnc3RfY29sb3JzcGFjZV9jbGFzc19pbml0KToKLQkgICogZXh0L2xpYmZhbWUvZ3N0bGliZmFtZS5jOiAoZ3N0X2ZhbWVlbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uYzogKGdzdF9tdXNpY2JyYWluel9jbGFzc19pbml0KToKLQkgICogZXh0L25hcy9uYXNzaW5rLmM6IChnc3RfbmFzc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L3Nob3V0L2dzdHNob3V0LmM6IChnc3RfaWNlY2FzdHNlbmRfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9zbmFwc2hvdC9nc3RzbmFwc2hvdC5jOiAoZ3N0X3NuYXBzaG90X2NsYXNzX2luaXQpOgotCSAgKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX2NsYXNzX2luaXQpOgotCSAgKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOiAoZ3N0X3N3ZmRlY2J1ZmZlcl9jbGFzc19pbml0KSwKLQkgIChnc3Rfc3dmZGVjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmRlYy5jOiAoZ3N0X3RhcmtpbmRlY19jbGFzc19pbml0KToKLQkgICogZXh0L3Rhcmtpbi9nc3R0YXJraW5lbmMuYzogKGdzdF90YXJraW5lbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXN0cmlwLmM6IChnc3RfY2R4YXN0cmlwX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvY2hhcnQvZ3N0Y2hhcnQuYzogKGdzdF9jaGFydF9jbGFzc19pbml0KToKLQkgICogZ3N0L2NvbG9yc3BhY2UvZ3N0Y29sb3JzcGFjZS5jOiAoZ3N0X2NvbG9yc3BhY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOiAoZ3N0X2RlaW50ZXJsYWNlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuYzogKGdzdF9mZXN0aXZhbF9jbGFzc19pbml0KToKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChnc3RfYnB3c2luY19jbGFzc19pbml0KToKLQkgICogZ3N0L2ZpbHRlci9nc3RpaXIuYzogKGdzdF9paXJfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9saWJyZmIvZ3N0cmZic3JjLmM6IChnc3RfcmZic3JjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbWl4bWF0cml4L21peG1hdHJpeC5jOiAoZ3N0X21peG1hdHJpeF9jbGFzc19pbml0KToKLQkgICogZ3N0L21wZWcxc3lzL2dzdG1wZWcxc3lzdGVtZW5jb2RlLmM6Ci0JICAoZ3N0X3N5c3RlbV9lbmNvZGVfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tcGVnMXZpZGVvcGFyc2UvZ3N0bXAxdmlkZW9wYXJzZS5jOgotCSAgKGdzdF9tcDF2aWRlb3BhcnNlX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbXBlZzJzdWIvZ3N0bXBlZzJzdWJ0LmM6IChnc3RfbXBlZzJzdWJ0X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkgIChnc3RfbXAzcGFyc2VfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9vdmVybGF5L2dzdG92ZXJsYXkuYzogKGdzdF9vdmVybGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcGFzc3Rocm91Z2gvZ3N0cGFzc3Rocm91Z2guYzogKHBhc3N0aHJvdWdoX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcGxheW9uZGVtYW5kL2dzdHBsYXlvbmRlbWFuZC5jOiAocGxheV9vbl9kZW1hbmRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydGpwZWcvZ3N0cnRqcGVnZGVjLmM6IChnc3RfcnRqcGVnZGVjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRqcGVnL2dzdHJ0anBlZ2VuYy5jOiAoZ3N0X3J0anBlZ2VuY19jbGFzc19pbml0KToKLQkgICogZ3N0L3Ntb290aC9nc3RzbW9vdGguYzogKGdzdF9zbW9vdGhfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9zbW9vdGh3YXZlL2dzdHNtb290aHdhdmUuYzogKGdzdF9zbW9vdGh3YXZlX2NsYXNzX2luaXQpOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV9jbGFzc19pbml0KToKLQkgICogZ3N0L3N0ZXJlby9nc3RzdGVyZW8uYzogKGdzdF9zdGVyZW9fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9zd2l0Y2gvZ3N0c3dpdGNoLmM6IChnc3Rfc3dpdGNoX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdHRhL2dzdHR0YWRlYy5jOiAoZ3N0X3R0YV9kZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYzogKGdzdF90dGFfcGFyc2VfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC92YmlkZWMvZ3N0dmJpZGVjLmM6IChnc3RfdmJpZGVjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOiAoZ3N0X3ZpZGVvX2Nyb3BfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC92aXJ0dWFsZHViL2dzdHhzaGFycGVuLmM6IChnc3RfeHNoYXJwZW5fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6IChnc3RfeTRtZW5jb2RlX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvY2Ryb20vZ3N0Y2RwbGF5ZXIuYzogKGNkcGxheWVyX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICAoZ3N0X2RpcmVjdHNvdW5kc2lua19jbGFzc19pbml0KToKLQkgICogc3lzL2R4cjMvZHhyM2F1ZGlvc2luay5jOiAoZHhyM2F1ZGlvc2lua19jbGFzc19pbml0KToKLQkgICogc3lzL2R4cjMvZHhyM3NwdXNpbmsuYzogKGR4cjNzcHVzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvZHhyMy9keHIzdmlkZW9zaW5rLmM6IChkeHIzdmlkZW9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmM6IChnc3RfcWNhbXNyY19jbGFzc19pbml0KToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5jOgotCSAgKGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY2hhbm5lbF9jbGFzc19pbml0KToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6IChnc3RfdjRsMl90dW5lcl9jaGFubmVsX2NsYXNzX2luaXQpLAotCSAgKGdzdF92NGwyX3R1bmVyX25vcm1fY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy94aW1hZ2VzcmMveGltYWdlc3JjLmM6IChnc3RfeGltYWdlc3JjX2NsYXNzX2luaXQpOgotCSAgRml4ICMzMzczNjUgKGdfdHlwZV9jbGFzc19yZWYgPC0+IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCkKLQotMjAwNi0wNC0wOCAxOTowNDowMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQURdIGdzdC86IEZpeCBtb3JlIGJyb2tlbiBHT2JqZWN0IG1hY3JvcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9jb2xvcnNwYWNlL2dzdGNvbG9yc3BhY2UuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmg6Ci0JICAqIGdzdC9wYXNzdGhyb3VnaC9nc3RwYXNzdGhyb3VnaC5oOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSAgRml4IG1vcmUgYnJva2VuIEdPYmplY3QgbWFjcm9zCi0KLTIwMDYtMDQtMDYgMTE6MzU6MjYgKzAwMDAgIGpAYm9vdGxhYi5vcmcgPGpAYm9vdGxhYi5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRF0gVW5pZnkgdGhlIGxvbmcgZGVzY3JpcHRpb25zIGluIHRoZSBwbHVnaW4gZGV0YWlscyAoIzMzNzI2MykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBqXiAgPGogYXQgYm9vdGxhYiBkb3Qgb3JnPgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JkZWMuYzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndiZW5jLmM6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YnBhcnNlLmM6Ci0JICAqIGV4dC9hcnRzL2dzdF9hcnRzLmM6Ci0JICAqIGV4dC9hcnRzZC9nc3RhcnRzZHNpbmsuYzoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnBhcnNlLmM6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzoKLQkgICogZXh0L2NkYXVkaW8vZ3N0Y2RhdWRpby5jOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmM6Ci0JICAqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzoKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOgotCSAgKiBleHQvZHRzL2dzdGR0c2RlYy5jOiAoZ3N0X2R0c2RlY19iYXNlX2luaXQpOgotCSAgKiBleHQvZmFhYy9nc3RmYWFjLmM6IChnc3RfZmFhY19iYXNlX2luaXQpOgotCSAgKiBleHQvZmFhZC9nc3RmYWFkLmM6Ci0JICAqIGV4dC9nc20vZ3N0Z3NtZGVjLmM6Ci0JICAqIGV4dC9nc20vZ3N0Z3NtZW5jLmM6Ci0JICAqIGV4dC9oZXJtZXMvZ3N0aGVybWVzY29sb3JzcGFjZS5jOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNmaWxlLmM6Ci0JICAqIGV4dC9sY3MvZ3N0Y29sb3JzcGFjZS5jOgotCSAgKiBleHQvbGliZmFtZS9nc3RsaWJmYW1lLmM6Ci0JICAqIGV4dC9saWJtbXMvZ3N0bW1zLmM6IChnc3RfbW1zX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uYzogKGdzdF9tdXNpY2JyYWluel9iYXNlX2luaXQpOgotCSAgKiBleHQvbmFzL25hc3NpbmsuYzogKGdzdF9uYXNzaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9uZW9uL2dzdG5lb25odHRwc3JjLmM6Ci0JICAqIGV4dC9wb2x5cC9wb2x5cHNpbmsuYzogKGdzdF9wb2x5cHNpbmtfYmFzZV9pbml0KToKLQkgICogZXh0L3NkbC9zZGxhdWRpb3NpbmsuYzoKLQkgICogZXh0L3NkbC9zZGx2aWRlb3NpbmsuYzoKLQkgICogZXh0L3Nob3V0L2dzdHNob3V0LmM6Ci0JICAqIGV4dC9zbmFwc2hvdC9nc3RzbmFwc2hvdC5jOgotCSAgKiBleHQvc25kZmlsZS9nc3RzZi5jOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmRlYy5jOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmVuYy5jOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfYmFzZV9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9iYXNlX2luaXQpOgotCSAgKiBleHQveHZpZC9nc3R4dmlkZGVjLmM6Ci0JICAqIGV4dC94dmlkL2dzdHh2aWRlbmMuYzoKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuYzogKGdzdF9jZHhhX3BhcnNlX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXN0cmlwLmM6IChnc3RfY2R4YXN0cmlwX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9jaGFydC9nc3RjaGFydC5jOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFzZV9pbml0KToKLQkgICogZ3N0L2Zlc3RpdmFsL2dzdGZlc3RpdmFsLmM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0aWlyLmM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOgotCSAgKiBnc3QvZnJlZXplL2dzdGZyZWV6ZS5jOgotCSAgKiBnc3QvZ2FtZXMvZ3N0cHV6emxlLmM6IChnc3RfcHV6emxlX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9taXhtYXRyaXgvbWl4bWF0cml4LmM6Ci0JICAqIGdzdC9tcGVnMXN5cy9nc3RtcGVnMXN5c3RlbWVuY29kZS5jOgotCSAgKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuYzoKLQkgICogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOgotCSAgKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkgICogZ3N0L211bHRpZmlsZXNpbmsvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgKiBnc3Qvb3ZlcmxheS9nc3RvdmVybGF5LmM6Ci0JICAqIGdzdC9wYXNzdGhyb3VnaC9nc3RwYXNzdGhyb3VnaC5jOgotCSAgKiBnc3QvcGxheW9uZGVtYW5kL2dzdHBsYXlvbmRlbWFuZC5jOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICAqIGdzdC9ydGpwZWcvZ3N0cnRqcGVnZGVjLmM6Ci0JICAqIGdzdC9ydGpwZWcvZ3N0cnRqcGVnZW5jLmM6Ci0JICAqIGdzdC9zbW9vdGgvZ3N0c21vb3RoLmM6Ci0JICAqIGdzdC90dGEvZ3N0dHRhZGVjLmM6IChnc3RfdHRhX2RlY19iYXNlX2luaXQpOgotCSAgKiBnc3QvdHRhL2dzdHR0YXBhcnNlLmM6IChnc3RfdHRhX3BhcnNlX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICAqIGdzdC92aWRlb2Ryb3AvZ3N0dmlkZW9kcm9wLmM6Ci0JICAqIGdzdC92aXJ0dWFsZHViL2dzdHhzaGFycGVuLmM6Ci0JICAqIGdzdC94aW5naGVhZGVyL2dzdHhpbmdtdXguYzogKGdzdF94aW5nX211eF9iYXNlX2luaXQpOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgVW5pZnkgdGhlIGxvbmcgZGVzY3JpcHRpb25zIGluIHRoZSBwbHVnaW4gZGV0YWlscyAoIzMzNzI2MykuCi0KLTIwMDYtMDQtMDEgMTA6MDk6MTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgW01PVkVEIEZST00gQkFEXSByZXdvcmsgYnVpbGQ7IGFkZCB0cmFuc2xhdGlvbnMgZm9yIHY0bDIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmV3b3JrIGJ1aWxkOyBhZGQgdHJhbnNsYXRpb25zIGZvciB2NGwyCi0KLTIwMDUtMDktMDUgMTc6MjA6MjkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgW01PVkVEIEZST00gQkFEXSBGaXggdXAgYWxsIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggdXAgYWxsIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zLgotCi0yMDA1LTA3LTA1IDEwOjUxOjQ5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRF0gV2F5LCB3YXksIHdheSB0b28gbWFueSBmaWxlczogUmVtb3ZlIGNyYWNrIGNvbW1lbnQgZnJvbSB0aGUgMjAwMCBlcmEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDctMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIFdheSwgd2F5LCB3YXkgdG9vIG1hbnkgZmlsZXM6Ci0JICBSZW1vdmUgY3JhY2sgY29tbWVudCBmcm9tIHRoZSAyMDAwIGVyYS4KLQotMjAwNS0wMS0xNCAxODozNjo0MiArMDAwMCAgU3TDqXBoYW5lIExvZXVpbGxldCA8Z3N0cmVhbWVyQGxlcm91dGllci5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRF0gSSdtIGEgYmFkIGJveS4gdXNpbmcgLzEwMDEuIHRvIGZvcmNlIEMgdG8gZG8gZmxvYXQgZGl2aXNpb24gYW5kIG5vdCBpbnRlZ2VyIGRpdmlzaW9uIChhcyBpdCBkaWQgaW4gbXkgbGFzdCBjb21taXQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JICAqIGdzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jOiAocGFyc2VfbWR2ZHN1Yik6Ci0JICAqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6IChnc3RfeTRtZW5jb2RlX3Npbmtjb25uZWN0KToKLQkgIEknbSBhIGJhZCBib3kuIHVzaW5nIC8xMDAxLiB0byBmb3JjZSBDIHRvIGRvIGZsb2F0IGRpdmlzaW9uCi0JICBhbmQgbm90IGludGVnZXIgZGl2aXNpb24gKGFzIGl0IGRpZCBpbiBteSBsYXN0IGNvbW1pdCkKLQkgIFRoYW5rcyB0byBEYXZpZCBJLiBMZWhuIGZvciBwb2ludGluZyB0aGlzIG1pc3Rha2UuCi0KLTIwMDUtMDEtMTQgMTI6Mjc6MjIgKzAwMDAgIFN0w6lwaGFuZSBMb2V1aWxsZXQgPGdzdHJlYW1lckBsZXJvdXRpZXIubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQURdIHJlcGxhY2UgZnJhbWVyYXRlIGFwcm94aW1hdGlvbnMgYnkgdGhlaXIgcmVhbCB2YWx1ZSAoMjQwMDAvMTAwMSwgMzAwMDAvMTAwMSwgNjAwMDAvMTAwMSkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkgICogZXh0L2xpYmZhbWUvZ3N0bGliZmFtZS5jOgotCSAgKiBnc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYzogKHBhcnNlX21kdmRzdWIpOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOiAoZ3N0X3k0bWVuY29kZV9zaW5rY29ubmVjdCk6Ci0JICByZXBsYWNlIGZyYW1lcmF0ZSBhcHJveGltYXRpb25zIGJ5IHRoZWlyIHJlYWwgdmFsdWUKLQkgICgyNDAwMC8xMDAxLCAzMDAwMC8xMDAxLCA2MDAwMC8xMDAxKQotCSAgRmluaXNoIGZpeGluZyBidWcgIzE2NDA0OQotCi0yMDA0LTA3LTI3IDIxOjQxOjMwICswMDAwICBTdGV2ZSBMaG9tbWUgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JKiBnc3QveTRtL3k0bWVuYy52Y3Byb2o6Ci0JICBbTU9WRUQgRlJPTSBCQURdIG1vcmUgd29ya2luZyBwbHVnaW5zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vcmUgd29ya2luZyBwbHVnaW5zCi0KLTIwMDQtMDctMjcgMDk6NTc6MzMgKzAwMDAgIFN0ZXZlIExob21tZSA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIGdzdC95NG0veTRtZW5jLnZjcHJvajoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gcmVuYW1lIEdTdHJlYW1lci0wLjgubGliIHRvIGxpYmdzdHJlYW1lci5saWIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVuYW1lIEdTdHJlYW1lci0wLjgubGliIHRvIGxpYmdzdHJlYW1lci5saWIKLQotMjAwNC0wNy0yNyAwOTo0ODo1MSArMDAwMCAgU3RldmUgTGhvbW1lIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSogZ3N0L3k0bS95NG1lbmMudmNwcm9qOgotCSAgW01PVkVEIEZST00gQkFEXSBhdm9pZCBwcm9ibGVtcyB3aXRoIG1hdGguaCwgZml4IHJlbGVhc2UgZGVwZW5kYW5jeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhdm9pZCBwcm9ibGVtcyB3aXRoIG1hdGguaCwgZml4IHJlbGVhc2UgZGVwZW5kYW5jeQotCi0yMDA0LTA3LTI2IDEzOjIwOjExICswMDAwICBTdGV2ZSBMaG9tbWUgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JKiBnc3QveTRtL3k0bWVuYy52Y3Byb2o6Ci0JICBbTU9WRUQgRlJPTSBCQURdIG1vcmUgcGx1Z2lucyBzdXBwb3J0ZWQgdW5kZXIgd2luZG93cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtb3JlIHBsdWdpbnMgc3VwcG9ydGVkIHVuZGVyIHdpbmRvd3MKLQotMjAwNC0wNC0wMSAxMTo0ODoyNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIGE1MmRlYzogICBVc2UgYSBkZWJ1ZyBjYXRlZ29yeSwgT3V0cHV0IHRpbWVzdGFtcHMgY29ycmVjdGx5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGE1MmRlYzogICBVc2UgYSBkZWJ1ZyBjYXRlZ29yeSwgT3V0cHV0IHRpbWVzdGFtcHMgY29ycmVjdGx5Ci0JICBFbWl0IHRhZyBpbmZvLCBIYW5kbGUgZXZlbnRzLCB0ZWxsIGxpYmE1MmRlYyBhYm91dCBjcHUKLQkgIGNhcGFiaWxpdGllcyBzbyBpdCBjYW4gdXNlIE1NWCBldGMuCi0JICBkdmRlYzogICAgRml4IGEgY3Jhc2hlciBhY2Nlc3NpbmcgaW52YWxpZCBtZW1vcnkKLQkgIGR2ZG5hdnNyYzpTb21lIHN1cHBvcnQgZm9yIGJ5dGUtZm9ybWF0IHNlZWtpbmcuCi0JICBTbWFsbCBmaXhlcyBmb3Igc3RpbGwgZnJhbWVzIGFuZCBtZW51IGJ1dHRvbiBvdmVybGF5cwotCSAgbXBlZzJkZWM6IFVzZSBhIGRlYnVnIGNhdGVnb3J5LiBBZGp1c3QgdGhlIHJlcG9ydCBsZXZlbCBvZiBzZXZlcmFsIGl0ZW1zIHRvCi0JICBMT0cuIENhbGwgbXBlZzJfY3VzdG9tX2ZidWYgdG8gbWFyayBvdXIgYnVmZmVycyBhcyAnY3VzdG9tIGJ1ZmZlcnMnCi0JICBzbyBpdCBkb2Vzbid0IGxvc2UgdGhlIEdzdEJ1ZmZlciBwb2ludGVyCi0JICBuYXZzZWVrOiAgQWRkIHRoZSBuYXZzZWVrIGRlYnVnIGVsZW1lbnQgZm9yIHNlZWtpbmcgYmFjayBhbmQgZm9ydGggaW4gYQotCSAgdmlkZW8gc3RyZWFtIHVzaW5nIGFycm93IGtleXMuCi0JICBtcGVnMnN1YnQ6UHJldHR5IG11Y2ggYSBjb21wbGV0ZSByZXdyaXRlLiBOb3cgYSBsb29wYmFzZWQgZWxlbWVudC4gTWF5IHN0aWxsCi0JICByZXF1aXJlIHdvcmsgdG8gcHJvcGVybHkgc3luY2hyb25pc2Ugc3VidGl0bGUgYnVmZmVycy4KLQkgIG1wZWdkZW11eDoKLQkgIGR2ZGRlbXV4OiBEb24ndCBhdHRlbXB0IHRvIGNyZWF0ZSBzdWJidWZmZXJzIG9mIHNpemUgMAotCSAgUmVkdWNlIGEgY291cGxlIG9mIGVycm9yIG91dHB1dHMgdG8gd2FybmluZ3MuCi0JICB5NG1lbmNvZGU6T3V0cHV0IHRoZSB5NG0gZnJhbWUgaGVhZGVyIGNvcnJlY3RseQotCi0yMDA0LTAzLTE1IDE5OjMyOjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gZG9uJ3QgbWl4IHRhYnMgYW5kIHNwYWNlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb24ndCBtaXggdGFicyBhbmQgc3BhY2VzCi0KLTIwMDQtMDMtMTUgMTY6MzI6NTQgKzAwMDAgIEpvaGFuIERhaGxpbiA8am9oYW5AZ25vbWUub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQURdICouaDogUmV2ZXJ0IGluZGVudGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqICouaDogUmV2ZXJ0IGluZGVudGluZwotCi0yMDA0LTAzLTE0IDIyOjM0OjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmg6Ci0JICBbTU9WRUQgRlJPTSBCQURdIGdzdC1pbmRlbnQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZ3N0LWluZGVudAotCi0yMDA0LTAxLTEyIDAyOjAxOjUyICswMDAwICBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEXSBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8uaDogRml4IGNhcHMgdGVtcGxhdGUgbmFtZXMgdG8gYmUgdW5kZXJzdGFuZGFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDQtMDEtMTIgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQkgICogZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLmg6Ci0JICBGaXggY2FwcyB0ZW1wbGF0ZSBuYW1lcyB0byBiZSB1bmRlcnN0YW5kYWJsZS4KLQkgIFByZWZpeCBldmVyeXRoaW5nIHdpdGggR1NUX1ZJREVPLgotCSAgKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JICAqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzoKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkgICogZXh0L2hlcm1lcy9nc3Rjb2xvcnNwYWNlLmM6IChnc3RfY29sb3JzcGFjZV9iYXNlX2luaXQpOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChyYXdfY2Fwc19mYWN0b3J5KToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAocmF3X2NhcHNfZmFjdG9yeSk6Ci0JICAqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChyYXdfY2Fwc19mYWN0b3J5KToKLQkgICogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90LmM6Ci0JICAqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6Ci0JICAqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzoKLQkgICogZXh0L3h2aWQvZ3N0eHZpZGVuYy5jOgotCSAgKiBnc3QvY2hhcnQvZ3N0Y2hhcnQuYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzoKLQkgICogZ3N0L2ZseC9nc3RmbHhkZWMuYzogKGdzdF9mbHhkZWNfbG9vcCk6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgICogZ3N0L21lZGlhbi9nc3RtZWRpYW4uYzoKLQkgICogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogKGdzdF9tb25vc2NvcGVfaW5pdCksCi0JICAoZ3N0X21vbm9zY29wZV9zcmNjb25uZWN0KSwgKGdzdF9tb25vc2NvcGVfY2hhaW4pOgotCSAgKiBnc3Qvb3ZlcmxheS9nc3RvdmVybGF5LmM6Ci0JICAqIGdzdC9zbW9vdGgvZ3N0c21vb3RoLmM6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSAgKiBnc3Qvc3luYWVzdGhlc2lhL2dzdHN5bmFlc3RoZXNpYS5jOgotCSAgKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSAgKiBnc3QvdmlkZW9kcm9wL2dzdHZpZGVvZHJvcC5jOgotCSAgKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmM6Ci0JICAqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX3BhbGV0dGVfdG9fY2Fwcyk6Ci0JICBNYWtlIHRoZW0gd29yayB3aXRoIG5ldyB2aWRlby5oIGZpbGUuCi0JICAqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hhaW4pLAotCSAgKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9mcmVlKSwgKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JICAqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hhaW4pLAotCSAgKGdzdF94dmltYWdlc2lua19idWZmZXJfZnJlZSksIChnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKToKLQkgIE1ha2UgaXQgd29yayB3aXRoIG5ldyBidWZmZXIgYWxsb2NhdGlvbiBzeXN0ZW0uCi0KLTIwMDMtMTItMjIgMDE6NDc6MDkgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgW01PVkVEIEZST00gQkFEXSBNZXJnZSBDQVBTIGJyYW5jaAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBNZXJnZSBDQVBTIGJyYW5jaAotCi0yMDAzLTEyLTA0IDEwOjM3OjM4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIHJlbW92ZSBjb3B5cmlnaHQgZmllbGQgZnJvbSBwbHVnaW5zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBjb3B5cmlnaHQgZmllbGQgZnJvbSBwbHVnaW5zCi0KLTIwMDMtMTEtMTYgMjI6MDI6MjMgKzAwMDAgIExlaWYgSm9obnNvbiA8bGVpZkBhbWJpZW50LjJ5Lm5ldD4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gKyBjaGVja2luZyBpbiBwbHVnaW4gY2F0ZWdvcnkgY2hhbmdlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICArIGNoZWNraW5nIGluIHBsdWdpbiBjYXRlZ29yeSBjaGFuZ2VzCi0KLTIwMDMtMTEtMDcgMTI6NDc6MDIgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gUmVtb3ZlIGFsbCBjb25maWcuaCBpbmNsdWRlcyBmcm9tIGhlYWRlciBmaWxlcywgYWRkIGl0IHRvIGVhY2ggc291cmNlIGZpbGUgYW5kIHJlbW92ZSBkdXBsaWNhdGUgY29uZmlnLmggaW5jbHVkZXMgZnJvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbW92ZSBhbGwgY29uZmlnLmggaW5jbHVkZXMgZnJvbSBoZWFkZXIgZmlsZXMsIGFkZCBpdCB0byBlYWNoIHNvdXJjZSBmaWxlIGFuZCByZW1vdmUgZHVwbGljYXRlIGNvbmZpZy5oIGluY2x1ZGVzIGZyb20gc2V2ZXJhbCBzb3VyY2UgZmlsZXMKLQotMjAwMy0xMS0wMiAxOToxNzoyNyArMDAwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIGZpeCB0byBuZXcgcGx1Z2luIHN5c3RlbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggdG8gbmV3IHBsdWdpbiBzeXN0ZW0KLQotMjAwMy0xMC0wOCAxNjowODoxOSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgW01PVkVEIEZST00gQkFEXSAvR3N0QnVmZmVyL0dzdERhdGEvIGluIHRoZSBBUEkgd2hlcmUgeW91IGNhbiBwYXNzIGV2ZW50cy4gRml4IHRoZSBwbHVnaW5zIHRvIGRlYWwgd2l0aCB0aGF0LiBGaXhlcyAjMTEzNDg4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAvR3N0QnVmZmVyL0dzdERhdGEvIGluIHRoZSBBUEkgd2hlcmUgeW91IGNhbiBwYXNzIGV2ZW50cy4gRml4IHRoZSBwbHVnaW5zIHRvIGRlYWwgd2l0aCB0aGF0LiBGaXhlcyAjMTEzNDg4LgotCi0yMDAzLTA4LTEwIDAwOjAxOjU4ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3k0bS9NYWtlZmlsZS5hbToKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gUmVtb3ZlIHJlZHVuZGFudCBwbHVnaW5kaXIgZGVmaW5pdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZW1vdmUgcmVkdW5kYW50IHBsdWdpbmRpciBkZWZpbml0aW9uCi0KLTIwMDMtMDctMDYgMjA6NDk6NTIgKzAwMDAgIFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmg6Ci0JICBbTU9WRUQgRlJPTSBCQURdIE5ldyBtaW1ldHlwZXMgZ29uZSBpbnRvIGVmZmVjdCB0b2RheSAtIHRoaXMgY29tbWl0IGNoYW5nZXMgYWxsIG9sZCBtaW1ldHlwZXMgb3ZlciB0byB0aGUgbmV3IG1pbWV0eXBlcyBzcGVjIGFzIGRlc2NyaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBOZXcgbWltZXR5cGVzIGdvbmUgaW50byBlZmZlY3QgdG9kYXkgLSB0aGlzIGNvbW1pdCBjaGFuZ2VzIGFsbCBvbGQgbWltZXR5cGVzIG92ZXIgdG8gdGhlIG5ldyBtaW1ldHlwZXMgc3BlYyBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIGNvbW1pdCdzIGRvY3VtZW50LiBOb3RlOiBzb21lIHBsdWdpbnMgd2lsbCBicmVhaywgc29tZSBwaXBlbGluZXMgd2lsbCBicmVhaywgZXhwZWN0IEhFQUQgdG8gYmUgYnJva2VuIG9yIGF0IGxlYXN0IG5vdCAxMDAlIHdvcmtpbmcgZm9yIGEgZmV3IGRheXMsIGJ1dCBkb24ndCBmb3JnZXQgdG8gcmVwb3J0IGJ1Z3MKLQotMjAwMy0wNi0yOSAxOTo0NjoxMyArMDAwMCAgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIGNvbXBhdGliaWxpdHkgZml4IGZvciBuZXcgR1NUX0RFQlVHIHN0dWZmLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb21wYXRpYmlsaXR5IGZpeCBmb3IgbmV3IEdTVF9ERUJVRyBzdHVmZi4KLQkgIEluY2x1ZGVzIGZpeGVzIGZvciBtaXNzaW5nIGluY2x1ZGVzIGZvciBjb25maWcuaCBhbmQgdW5pc3RkLmgKLQkgIEkgb25seSBlbnN1cmVkIGZvciBwbHVnaW5zIEkgY2FuIGJ1aWxkIHRoYXQgdGhleSB3b3JrLCBzbyBpZiBzb21lIG9mIHRoZW0gYXJlIHN0aWxsIGJyb2tlbiwgeW91IGdvdHRhIGZpeCB0aGVtIHlvdXJzZWx2ZXMgdW5mb3J0dW5hdGVseS4KLQotMjAwMy0wMS0xMCAxMzozODozMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIFBhZENvbm5lY3QgLT4gUGFkTGluawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYWRDb25uZWN0IC0+IFBhZExpbmsKLQotMjAwMy0wMS0xMCAxMDoyMjoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIGFub3RoZXIgYmF0Y2ggb2YgY29ubmVjdC0+bGluayBmaXhlcyBwbGVhc2UgbGV0IG1lIGtub3cgYWJvdXQgaXNzdWVzIGFuZCBwbGVhc2UgcmVmcmFpbiBvZiBtYWtpbmcgdGhlbSB5b3Vyc2VsZiwgc28gdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhbm90aGVyIGJhdGNoIG9mIGNvbm5lY3QtPmxpbmsgZml4ZXMKLQkgIHBsZWFzZSBsZXQgbWUga25vdyBhYm91dCBpc3N1ZXMKLQkgIGFuZCBwbGVhc2UgcmVmcmFpbiBvZiBtYWtpbmcgdGhlbSB5b3Vyc2VsZiwgc28gdGhhdCBJIGRvbid0IHNwZW5kIGRvdWJsZQotCSAgdGhlIHRpbWUgcmVzb2x2aW5nIGNvbmZsaWN0cwotCi0yMDAyLTEyLTA4IDE0OjUwOjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3k0bS9NYWtlZmlsZS5hbToKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gcGFyYWxsZWwgaW5zdGFsbCBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXJhbGxlbCBpbnN0YWxsIGZpeGVzCi0KLTIwMDItMDktMTggMTk6MDI6NTIgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gcGx1Z2lucyBwYXJ0IG9mIGxpY2Vuc2UgZmllbGQgcGF0Y2gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGx1Z2lucyBwYXJ0IG9mIGxpY2Vuc2UgZmllbGQgcGF0Y2gKLQotMjAwMi0wNi0xNyAxMDoyOTozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICBbTU9WRUQgRlJPTSBCQURdIGNvc21ldGljIGNoYW5nZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb3NtZXRpYyBjaGFuZ2UKLQotMjAwMi0wNS0wMyAwOTo1OToxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIHZhcmlvdXMgbmFtZSBmaXhlcyBhbmQgc3VuZHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHZhcmlvdXMgbmFtZSBmaXhlcyBhbmQgc3VuZHJ5Ci0KLTIwMDItMDQtMjAgMjE6NDI6NTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGludGx0b29sJ3MgYnJva2VubmVzcyBhIGN1cnJlbnQgY2hlY2sgZm9yIG1wZWcyZGVjIGRldGFpbHMtPmtsYXNzIHJlb3JnYW5pemF0aW9ucyBhbiBlbGVtZW50IGJyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGludGx0b29sJ3MgYnJva2VubmVzcwotCSAgKiBhIGN1cnJlbnQgY2hlY2sgZm9yIG1wZWcyZGVjCi0JICAqIGRldGFpbHMtPmtsYXNzIHJlb3JnYW5pemF0aW9ucwotCSAgKiBhbiBlbGVtZW50IGJyb3dzZXIgdGhhdCB1c2VzIGRldGFpbHMtPmtsYXNzCi0JICAqIHNlcGFyYXRlZCBjZHhhIHBhcnNlIG91dCBmcm9tIHRoZSBhdmkgZGlyZWN0b3J5Ci0KLTIwMDItMDQtMTEgMjA6NDI6MjYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gR3N0UGFkVGVtcGxhdGUgPC0+IGdzdF9wYWRfdGVtcGxhdGUgPC0+IEdTVF9QQURfVEVNUExBVEUgc2FtZSB3aXRoICpmYWN0b3J5IGFuZCB0eXBlZmluZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgR3N0UGFkVGVtcGxhdGUgPC0+IGdzdF9wYWRfdGVtcGxhdGUgPC0+IEdTVF9QQURfVEVNUExBVEUKLQkgIHNhbWUgd2l0aCAqZmFjdG9yeSBhbmQgdHlwZWZpbmQuCi0JICBhbHNvLCBzb21lIC1XZXJyb3IgZml4ZXMuCi0KLTIwMDItMDMtMzAgMTc6MDY6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIENoYW5nZWQgdG8gdGhlIG5ldyBwcm9wcyBBUEkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ2hhbmdlZCB0byB0aGUgbmV3IHByb3BzIEFQSQotCSAgT3RoZXIgc21hbGwgdHVmZi4KLQotMjAwMi0wMy0yMCAyMTo0NTowNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gcy9Hbm9tZS1TdHJlYW1lci9HU3RyZWFtZXIvCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHMvR25vbWUtU3RyZWFtZXIvR1N0cmVhbWVyLwotCi0yMDAyLTAzLTE5IDA0OjEwOjA2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuaDoKLQkgIFtNT1ZFRCBGUk9NIEJBRF0gcmVtb3ZhbCBvZiAvLy1zdHlsZSBjb21tZW50cyBkb24ndCBsaW5rIHBsdWdpbnMgdG8gY29yZSBsaWJzIC0tIHRoZSB2ZXJzaW9uaW5nIGlzIGRvbmUgaW50ZXJuYWxseSB0byB0aGUgcGx1Z2lucyB3aXRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcmVtb3ZhbCBvZiAvLy1zdHlsZSBjb21tZW50cwotCSAgKiBkb24ndCBsaW5rIHBsdWdpbnMgdG8gY29yZSBsaWJzIC0tIHRoZSB2ZXJzaW9uaW5nIGlzIGRvbmUgaW50ZXJuYWxseSB0byB0aGUgcGx1Z2lucyB3aXRoIHRoZSBwbHVnaW5faW5mbyBzdHJ1Y3QsCi0JICBhbmQgc3ltYm9sIHJlc29sdXRpb24gaXMgbGF6eSwgc28gd2UgY2FuIGFsd2F5cyBrbm93IGlmIGEgcGx1Z2luIGNhbiBiZSBsb2FkZWQgYnkgdGhlIHBsdWdpbl9pbmZvIGRhdGEuIGluIHRoZW9yeS4KLQotMjAwMi0wMy0xOSAwMTozOTo0MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgW01PVkVEIEZST00gQkFEXSBzL0BHU1RfUExVR0lOX0xERkxBR1NALyQoR1NUX1BMVUdJTl9MREZMQUdTKS8gQC1zdWJzdGl0dWVkIHZhcmlhYmxlcyB2YXJpYWJsZXMgYXJlIGRlZmluZWQgYXMgbWFrZSB2YXJpYWJsZXMgYXV0b21hZ2kuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcy9AR1NUX1BMVUdJTl9MREZMQUdTQC8kKEdTVF9QTFVHSU5fTERGTEFHUykvCi0JICBALXN1YnN0aXR1ZWQgdmFyaWFibGVzIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCBhcyBtYWtlIHZhcmlhYmxlcyBhdXRvbWFnaWNhbGx5LAotCSAgYW5kIHRoaXMgZ2l2ZXMgdGhlIHVzZXIgdGhlIGZyZWVkb20gdG8gc2F5IG1ha2UgR1NUX1BMVUdJTl9MREZMQUdTPS1teWZsYWcKLQotMjAwMi0wMS0xOCAxMTozNzoxOSArMDAwMCAgV3JvYmVsbCA8d3JvYmVsbEBpdGUucGw+Ci0KLQkqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICBbTU9WRUQgRlJPTSBCQURdIC0gcGx1Z2lucyBhcmUgYnVpbHQgd2l0aG91dCB2ZXJzaW9uaW5nIGluZm8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgLSBwbHVnaW5zIGFyZSBidWlsdCB3aXRob3V0IHZlcnNpb25pbmcgaW5mbwotCi0yMDAyLTAxLTEzIDIyOjI3OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSAgW01PVkVEIEZST00gQkFEXSBCcmluZyB0aGUgcGx1Z2lucyBpbiBzeW5jIHdpdGggdGhlIG5ldyBjb3JlIGNhcHNuZWdvIHN5c3RlbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQnJpbmcgdGhlIHBsdWdpbnMgaW4gc3luYyB3aXRoIHRoZSBuZXcgY29yZSBjYXBzbmVnbyBzeXN0ZW0uCi0JICBBZGRlZCBzb21lIGZlYXR1cmVzLCBlbmhhbmNlbWVudHMuLi4KLQotMjAwMi0wMS0xMiAwMzozNDoyNyArMDAwMCAgRGF2aWQgSS4gTGVobiA8ZGxlaG5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgW01PVkVEIEZST00gQkFEXSBzL2ZpbHRlci9wbHVnaW4vIGxpbmsgcGx1Z2lucyB0byBHU1RfTElCUyByZWFycmFuZ2UgcnVsZXMgdG8gYSBjb21tb24gZm9ybWF0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcy9maWx0ZXIvcGx1Z2luLwotCSAgKiBsaW5rIHBsdWdpbnMgdG8gR1NUX0xJQlMKLQkgICogcmVhcnJhbmdlIHJ1bGVzIHRvIGEgY29tbW9uIGZvcm1hdAotCi0yMDAxLTEyLTIzIDIwOjIxOjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3k0bS9NYWtlZmlsZS5hbToKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQURdIG1vcmUgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9yZSBmaXhlcwotCi0yMDAxLTEyLTIzIDEzOjE3OjM2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3k0bS9NYWtlZmlsZS5hbToKLQkqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5oOgotCSAgW01PVkVEIEZST00gQkFEXSBCQkIgYXNrZWQgbWUgdG8gcmVuYW1lIGxhdiB0byB5NG0gY2FuIHNvbWVvbmUgd2hvIGtub3dzIHRoZSBwbHVnaW4gZG8gdGhpcyBpbiB0aGUgc291cmNlIGFzIHdlbGwgPwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCQkIgYXNrZWQgbWUgdG8gcmVuYW1lIGxhdiB0byB5NG0KLQkgIGNhbiBzb21lb25lIHdobyBrbm93cyB0aGUgcGx1Z2luIGRvIHRoaXMgaW4gdGhlIHNvdXJjZSBhcyB3ZWxsID8KLQotMjAwOS0wNS0xNSAxODoxNzozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHBvL01ha2V2YXJzOgotCSAgcG86IGFkZCBNYWtldmFycyBtYWdpYyBzbyB3ZSBkb24ndCBnZXQgbGluZSBudW1iZXJzIGluICoucG8gZmlsZXMKLQkgIFRoaXMgYXZvaWRzIHRoZSBudW1iZXIgb25lIHJlYXNvbiBmb3IgbG9jYWwgbW9kaWZpY2F0aW9ucyBpbiAqLnBvCi0JICBmaWxlcyBhbmQgYW5kIG1ha2VzIHRoaW5ncyBsZXNzIGFubm95aW5nIHdoZW4gd29ya2luZyB3aXRoIGdpdCAob3IKLQkgIGFueSBvdGhlciBWQ1MgZm9yIHRoYXQgbWF0dGVyKS4KLQotMjAwOS0wNS0xNSAxNzoxMToyNyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzZGVtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6Ci0JKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvZmxhY2RlYy5jOgotCSogdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9maWxlcy9hdWRpb3Rlc3RzcmMuZmxhYzoKLQkqIHRlc3RzL2ZpbGVzL3Rlc3QtY2VydC5wZW06Ci0JKiB0ZXN0cy9maWxlcy90ZXN0LWtleS5wZW06Ci0JICBjaGVja3M6IG1vdmUgZmlsZXMgcmVxdWlyZWQgYnkgdW5pdCB0ZXN0cyBpbnRvIHRlc3RzL2ZpbGVzIGFuZCBtYWtlIHN1cmUgdGhleSdyZSBkaXN0ZWQKLQkgIE1vdmUgdW5pdCB0ZXN0IGRhdGEgaW50byB0aGUgZGlyZWN0b3J5IHdoZXJlIGl0IGJlbG9uZ3MgYW5kIG1ha2UgaW4gcGFydGljdWxhcgotCSAgdGhlIGZsYWNkZWMgdW5pdCB0ZXN0IGNkIGludG8gdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSB0ZXN0IGZpbGVzIGluc3RlYWQgb2YgbWFraW5nCi0JICBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpbiB0aGF0IHVuaXQgdGVzdC4gQXMgYSBzaWRlIGVmZmVjdAotCSAgb2YgbW92bmcgdGhvc2UgZmlsZXMsIHRoZXJlJ3Mgb25seSBvbmUgRVhUUkFfRElTVCBpbiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbSBub3csCi0JICB3aGljaCBpcyBsaWtlbHkgdG8gd29yayBiZXR0ZXIgdGhhbiBoYXZpbmcgdHdvLiBIb3BlZnVsbHkgZml4ZXMgIzU4Mjc1My4KLQotMjAwOS0wNS0xNCAyMTo0MzoxNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgZGVpbnRlcmxhY2U6IElmIHRoZSB1cHN0cmVhbSBtYXggbGF0ZW5jeSBpcyB1bmJvdW5kIHJldHVybiB1bmJvdW5kIG1heCBsYXRlbmN5Ci0JICBGaXhlcyBidWcgIzU4MjY2MS4KLQotMjAwOS0wNS0xNSAwODo0NDozOSArMDIwMCAgSmFtZXMgQW5kcmV3YXJ0aGEgPHRyczgwQHVjYy5ndS51d2EuZWR1LmF1PgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmM6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIEZpeCBjb21waWxlciB3YXJuaW5ncwotCSAgRml4ZXMgYnVnICM1ODI3MTUuCi0KLTIwMDktMDUtMTMgMjI6NDY6NDQgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgUmVjb3ZlcmVkIGRlYnVndXRpbHMgbGluZSBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiBkZWludGVybGFjZTIgbW92ZS4KLQotMjAwOS0wNS0xMyAxMDo0Njo0MCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWludGVybGFjZS54bWw6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHkuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5hc206Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aG1hY3Jvcy5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9saW5lYXIuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvbW14Lmg6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3BsdWdpbnMuaDoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvc2NhbGVyYm9iLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3NzZS5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcDBBLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wRWRnZUEuaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BFZGdlQTguaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTIuaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBNi5pbmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEFILmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQUgyLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVG9wLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVkEuaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BWQUguaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1N0cmFuZ2VCb2IuaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwyLmluYzoKLQkqIGdzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9XaWVyZEJvYi5pbmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oOgotCSogZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS92ZmlyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3g4Ni02NF9tYWNyb3MuaW5jOgotCSAgTW92ZWQgJ2RlaW50ZXJsYWNlMicgZnJvbSAtYmFkIHRvIC1nb29kCi0JICBBbmQgcmVuYW1lIGl0IHRvIGRlaW50ZXJsYWNlLgotCi0yMDA5LTA1LTA4IDE1OjM5OjI0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzoKLQkqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNTYvNTZdIGRlaW50ZXJsYWNlMjogQWRkIGEgZGlzYWJsZWQgbW9kZSBmb3IgcGFzc3Rocm91Z2ggb3BlcmF0aW9uCi0JICBBbHNvIGFsbG93IHRvIGNoYW5nZSB0aGUgbW9kZSBpbiBQQVVTRUQgYW5kIFBMQVlJTkcgYnkgdXBkYXRpbmcKLQkgIHRoZSBjYXBzIGlmIG5lY2Vzc2FyeS4KLQotMjAwOS0wNC0yMiAxOTo0MzoyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSAgW01PVkVEIEZST00gQkFEIDU1LzU2XSBkZWludGVybGFjZTI6IEFkZCBkb2N1bWVudGF0aW9uIGFuZCBpbnRlZ3JhdGUgaW50byB0aGUgYnVpbGQgc3lzdGVtCi0KLTIwMDktMDQtMTkgMTc6MTg6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgW01PVkVEIEZST00gQkFEIDU0LzU2XSBkZWludGVybGFjZTI6IE1ha2UgaXQgcG9zc2libGUgdG8gc2VsZWN0IGludGVybGFjaW5nIGF1dG9kZXRlY3Rpb24gb3IgdG8gZW5mb3JlIGRlaW50ZXJsYWNpbmcKLQkgIEZvciB0aGlzIGFkZCBhICJtb2RlIiBwcm9wZXJ0eSB0aGF0IGRlZmF1bHRzIHRvICJpbnRlcmxhY2VkIiBmb3Igbm93IGFzCi0JICBtb3N0IGRlY29kZXJzL2RlbXV4ZXJzIGRvbid0IHByb3Blcmx5IHNldCB0aGUgImludGVybGFjZWQiIGZpZWxkIG9uIHRoZQotCSAgY2FwcyB5ZXQuCi0JICBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byAiYXV0byIgdGhlIGVsZW1lbnQgd2lsbCB3b3JrIGluIHBhc3N0aHJvdWdoCi0JICBtb2RlIHVubGVzcyB0aGUgY2FwcyBjb250YWluIHRoZSAiaW50ZXJsYWNlZCIgZmllbGQuCi0KLTIwMDktMDQtMTcgMTU6Mzk6NTkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgW01PVkVEIEZST00gQkFEIDUzLzU2XSBkZWludGVybGFjZTI6IFVzZSBHU1RfKERFQlVHfFdBUk5JTkd8RVJST1IpX09CSkVDVCBpbnN0ZWFkIG9mIHRoZSBub24tT0JKRUNUIG9uZXMKLQotMjAwOS0wNC0xNyAxNTozOTozNiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNTIvNTZdIGRlaW50ZXJsYWNlMjogUmVzZXQgaGlzdG9yeSBpZiBESVNDT05UIGlzIHNldCBvbiB0aGUgaW5jb21pbmcgYnVmZmVyCi0KLTIwMDktMDQtMTcgMTU6Mzk6MTAgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgW01PVkVEIEZST00gQkFEIDUxLzU2XSBkZWludGVybGFjZTI6IEZpeCB0aW1lc3RhbXBzIGZvciBidWZmZXJzIHdpdGggUkZGIGZsYWcgc2V0Ci0KLTIwMDktMDQtMTYgMTc6NDE6MzcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuaDoKLQkqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOgotCSogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5jOgotCSogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvc2NhbGVyYm9iLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jOgotCSogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvd2VhdmUuYzoKLQkqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3dlYXZlYmZmLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS93ZWF2ZXRmZi5jOgotCSAgW01PVkVEIEZST00gQkFEIDUwLzU2XSBkZWludGVybGFjZTI6IFJlbmFtZSBsaW5lX2xlbmd0aCB0byByb3dfc3RyaWRlIGFuZCByZW1vdmUgb3V0cHV0X3N0cmlkZQotCi0yMDA5LTA0LTE2IDE1OjUyOjM5ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCA0OS81Nl0gZGVpbnRlcmxhY2UyOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgUkZGIGFuZCBPTkVGSUVMRCBidWZmZXIgZmxhZ3MKLQotMjAwOS0wNC0xNSAxNTo0Njo0NCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jOgotCSAgW01PVkVEIEZST00gQkFEIDQ4LzU2XSBkZWludGVybGFjZTI6IE1vdmUgb3V0cHV0IGJ1ZmZlciBmcm9tIHRoZSBpbnN0YW5jZSBzdHJ1Y3QgdG8gYSBmdW5jdGlvbiBwYXJhbWV0ZXIKLQotMjAwOS0wNC0xNSAxNTozMzoxNyArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSAgW01PVkVEIEZST00gQkFEIDQ3LzU2XSBkZWludGVybGFjZTI6IEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgdGhlIGZpZWxkIG9yZGVyCi0KLTIwMDktMDQtMTUgMTQ6NDc6NDkgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgW01PVkVEIEZST00gQkFEIDQ2LzU2XSBkZWludGVybGFjZTI6IEFkZCBzdXBwb3J0IGZvciBZVllVIGNvbG9yc3BhY2UKLQkgIFRoaXMgaXMgdGhlIHNhbWUgYXMgWVVZMiB3aXRoIGp1c3QgQ3IgYW5kIENiIHN3YXBwZWQuIEFzCi0JICB3ZSBkb24ndCBtYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gd2hlbiBkZWludGVybGFjaW5nCi0JICB0aGlzIHdvcmtzLgotCi0yMDA4LTExLTA2IDE0OjA1OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgNDUvNTZdIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6IEJyaW5nIHByb3BlcnRpZXMgaW50byB0aGlzIGNlbnR1cnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzoKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2NsYXNzX2luaXQpLCAoZ3N0X2RlaW50ZXJsYWNlMl9pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX3NldF9wcm9wZXJ0eSksIChnc3RfZGVpbnRlcmxhY2UyX2dldF9wcm9wZXJ0eSk6Ci0JICBCcmluZyBwcm9wZXJ0aWVzIGludG8gdGhpcyBjZW50dXJ5LgotCi0yMDA4LTExLTA0IDEyOjQyOjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCA0NC81Nl0gRG9uJ3QgaW5zdGFsbCBzdGF0aWMgbGlicyBmb3IgcGx1Z2lucy4gRml4ZXMgIzU1MDg1MSBmb3IgLWJhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYWxzYXNwZGlmL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYW1yd2IvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hcGV4c2luay9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FydHMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hcnRzZC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2F1ZGlvZmlsZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2F1ZGlvcmVzYW1wbGUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9iejIvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9jZGF1ZGlvL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2VsdC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RjMTM5NC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RpcmFjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGlyZWN0ZmIvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kaXZ4L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZHRzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmFhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2ZhYWQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9nc20vTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9oZXJtZXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9pdm9yYmlzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvamFjay9NYWtlZmlsZS5hbToKLQkgICogZXh0L2pwMmsvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9sYWRzcGEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9sY3MvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9saWJmYW1lL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGlibW1zL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbWV0YWRhdGEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tcGVnMmVuYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L21wbGV4L01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXVzZXBhY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tdXNpY2JyYWluei9NYWtlZmlsZS5hbToKLQkgICogZXh0L215dGh0di9NYWtlZmlsZS5hbToKLQkgICogZXh0L25hcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L25lb24vTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9vZmEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9wb2x5cC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Jlc2luZHZkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc2RsL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc2hvdXQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zbmFwc2hvdC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NuZGZpbGUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zb3VuZHRvdWNoL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc3BjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc3dmZGVjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvdGFya2luL01ha2VmaWxlLmFtOgotCSAgKiBleHQvdGhlb3JhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvdGltaWRpdHkvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90d29sYW1lL01ha2VmaWxlLmFtOgotCSAgKiBleHQveDI2NC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3hpbmUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC94dmlkL01ha2VmaWxlLmFtOgotCSAgKiBnc3QtbGlicy9nc3QvYXBwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QtbGlicy9nc3QvZHNob3cvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9haWZmcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hcHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdWRpb2J1ZmZlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2JheWVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY2R4YXBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY2hhcnQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9jb2xvcnNwYWNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGNjcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZHZkc3B1L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmVzdGl2YWwvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9mbGFjcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9mbHYvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nYW1lcy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2gyNjRwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2xpYnJmYi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21peG1hdHJpeC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21vZHBsdWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnMXN5cy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21wZWc0dmlkZW9wYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21wZWdkZW11eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21wZWd0c211eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21wZWd2aWRlb3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXZlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbnNmL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbnV2ZGVtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9vdmVybGF5L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGFzc3Rocm91Z2gvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9wY2FwcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9wbGF5b25kZW1hbmQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yYXdwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3JlYWwvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydGpwZWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc2NhbGV0ZW1wby9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NkcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NlbGVjdG9yL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc21vb3RoL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc21vb3Rod2F2ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NwZWVkL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3BlZXhyZXNhbXBsZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3N0ZXJlby9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3N1YmVuYy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3R0YS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZiaWRlYy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpZGVvZHJvcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpZGVvc2lnbmFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlydHVhbGR1Yi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZtbmMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC95NG0vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9hY21lbmMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9jZHJvbS9NYWtlZmlsZS5hbToKLQkgICogc3lzL2RzaG93ZGVjd3JhcHBlci9NYWtlZmlsZS5hbToKLQkgICogc3lzL2RzaG93c3Jjd3JhcHBlci9NYWtlZmlsZS5hbToKLQkgICogc3lzL2R2Yi9NYWtlZmlsZS5hbToKLQkgICogc3lzL2R4cjMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9mYmRldi9NYWtlZmlsZS5hbToKLQkgICogc3lzL29zczQvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9xY2FtL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvcXR3cmFwcGVyL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvdmNkL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvd2luaW5ldC9NYWtlZmlsZS5hbToKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgRG9uJ3QgaW5zdGFsbCBzdGF0aWMgbGlicyBmb3IgcGx1Z2lucy4gRml4ZXMgIzU1MDg1MSBmb3IgLWJhZC4KLQotMjAwOC0xMC0wOSAxOTozODo1MiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgNDMvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAuYzogRml4IHVudXNlZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nIHdoZW4gbm90IGJ1aWxkaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfdG9tc21vY29tcF9jbGFzc19pbml0KToKLQkgIEZpeCB1bnVzZWQgdmFyaWFibGUgY29tcGlsZXIgd2FybmluZyB3aGVuIG5vdCBidWlsZGluZwotCSAgWDg2IGFzc2VtYmx5LgotCi0yMDA4LTA4LTI4IDE3OjE2OjUxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgW01PVkVEIEZST00gQkFEIDQyLzU2XSBnc3QvZGNjcC86IEZpeCBjb21waWxhdGlvbiBvbiBTb2xhcmlzIGJ5IGluY2x1ZGluZyBmaWxpby5oIGFzIG5lZWRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGNjcC9nc3RkY2NwLmM6Ci0JICAqIGdzdC9kY2NwL2dzdGRjY3BjbGllbnRzcmMuYzoKLQkgIEZpeCBjb21waWxhdGlvbiBvbiBTb2xhcmlzIGJ5IGluY2x1ZGluZyBmaWxpby5oIGFzIG5lZWRlZC4KLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsMi5pbmM6Ci0JICBGaXggY29tcGlsYXRpb24gd2l0aCBGb3J0ZSAtIGFwcGFyZW50bHkgaXQgaGF0ZXMgY29uY2F0ZW5hdGluZyBhCi0JICBtYWNybyBhcmd1bWVudCB0aGF0IHN0YXJ0cyB3aXRoIGFuIHVuZGVyc2NvcmU/PwotCi0yMDA4LTA4LTI2IDEyOjMzOjE2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCA0MS81Nl0gZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC86IFVucm9sbCB0aGUgbG9vcCB0byBoYW5kbGUgdHdvIGJ5dGVzIGF0IG9uY2UuIFRoaXMgc2hvdWxkIGdpdmUgYSBzbWFsbCBzcGVlZHVwIGFuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVG9wLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TdHJhbmdlQm9iLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9XaWVyZEJvYi5pbmM6Ci0JICBVbnJvbGwgdGhlIGxvb3AgdG8gaGFuZGxlIHR3byBieXRlcyBhdCBvbmNlLiBUaGlzIHNob3VsZCBnaXZlCi0JICBhIHNtYWxsIHNwZWVkdXAgYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhbmRsZSBjaHJvbWEgYW5kIGx1bWEKLQkgIGRpZmZlcmVudCB3aGljaCBpcyBuZWVkZWQgbGF0ZXIuCi0KLTIwMDgtMDgtMjUgMTQ6Mzc6NDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDQwLzU2XSBnc3QvZGVpbnRlcmxhY2UyLzogRmlyc3QgcGFydCBvZiB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdG9tc21vY29tcCBkZWludGVybGFjaW5nIGFsZ29yaXRobS4gVGhpcyBvbmx5IHN1cHBvcnRzIHMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAuYzoKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3RvbXNtb2NvbXBfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEJvdHRvbS5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFRvcC5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU3RyYW5nZUJvYi5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbDIuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1dpZXJkQm9iLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC90b21zbW9jb21wbWFjcm9zLmg6Ci0JICBGaXJzdCBwYXJ0IG9mIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0b21zbW9jb21wIGRlaW50ZXJsYWNpbmcKLQkgIGFsZ29yaXRobS4gVGhpcyBvbmx5IHN1cHBvcnRzIHNlYXJjaC1lZmZvcnQ9MCBjdXJyZW50bHksIGlzIHBhaW5mdWxseQotCSAgc2xvdyBhbmQgbmVlZHMgc29tZSBjbGVhbnVwIGxhdGVyIHdoZW4gYWxsIHNlYXJjaC1lZmZvcnQgc2V0dGluZ3MKLQkgIGFyZSBpbXBsZW1lbnRlZCBpbiBDLgotCi0yMDA4LTA4LTAyIDE4OjQ4OjE3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzOS81Nl0gZ3N0L2RlaW50ZXJsYWNlMi86IFVzZSBvaWxfbWVtY3B5KCkgaW5zdGVhZCBvZiBtZW1jcHkoKSBhcyBpdCdzIGZhc3RlciBmb3IgdGhlIHNpemVzIHRoYXQgYXJlIHVzdWFsbHkgdXNlZCBoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmUpLAotCSAgKGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmUpLAotCSAgKGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lKToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6IChkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHkpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmM6Ci0JICAoZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3NjYWxlcmJvYi5jOgotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2IpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wLmM6IChGaWVsZGNvcHkpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS93ZWF2ZS5jOiAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmUpLAotCSAgKGNvcHlfc2NhbmxpbmUpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS93ZWF2ZWJmZi5jOiAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmUpLAotCSAgKGNvcHlfc2NhbmxpbmUpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS93ZWF2ZXRmZi5jOiAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmUpLAotCSAgKGNvcHlfc2NhbmxpbmUpOgotCSAgVXNlIG9pbF9tZW1jcHkoKSBpbnN0ZWFkIG9mIG1lbWNweSgpIGFzIGl0J3MgZmFzdGVyIGZvciB0aGUgc2l6ZXMgdGhhdAotCSAgYXJlIHVzdWFsbHkgdXNlZCBoZXJlLgotCi0yMDA4LTA4LTAyIDE4OjM2OjExICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzOC81Nl0gZ3N0L2RlaW50ZXJsYWNlMi86IEFkZCB0aGUgcmVtYWluaW5nIHR2dGltZSBkZWludGVybGFjaW5nIG1ldGhvZHMgYW5kIGZpeCB0aGUgZGVpbnRlcmxhY2VfZnJhbWUoKSBpbXBsZW1lbnRhdGlvbiBvZiBHLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzoKLQkgIChnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9tZXRob2RzX2dldF90eXBlKSwgKGdzdF9kZWludGVybGFjZTJfc2V0X21ldGhvZCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2xpbmVhci5jOgotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9jKSwgKGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9tbXgpLAotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9tbXhleHQpLAotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfbGluZWFyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfbGluZWFyX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9saW5lYXJibGVuZC5jOgotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9jKSwKLQkgIChkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmQyX2MpLAotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9tbXgpLAotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZDJfbW14KSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9ibGVuZF9jbGFzc19pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9ibGVuZF9pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvcGx1Z2lucy5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9zY2FsZXJib2IuYzoKLQkgIChkZWludGVybGFjZV9zY2FubGluZV9zY2FsZXJfYm9iKSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NjYWxlcl9ib2JfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zY2FsZXJfYm9iX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS93ZWF2ZS5jOiAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmUpLAotCSAgKGNvcHlfc2NhbmxpbmUpLCAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9jbGFzc19pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS93ZWF2ZWJmZi5jOiAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmUpLAotCSAgKGNvcHlfc2NhbmxpbmUpLCAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9iZmZfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9iZmZfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3dlYXZldGZmLmM6IChkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZSksCi0JICAoY29weV9zY2FubGluZSksIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX3RmZl9jbGFzc19pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX3RmZl9pbml0KToKLQkgIEFkZCB0aGUgcmVtYWluaW5nIHR2dGltZSBkZWludGVybGFjaW5nIG1ldGhvZHMgYW5kIGZpeCB0aGUKLQkgIGRlaW50ZXJsYWNlX2ZyYW1lKCkgaW1wbGVtZW50YXRpb24gb2YgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QuCi0KLTIwMDgtMDgtMDIgMTg6MzA6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDM3LzU2XSBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6IEltcGxlbWVudCB0aGUgVkZJUiBkZWludGVybGFjaW5nIG1ldGhvZCBhcyBzaW1wbGUgbWV0aG9kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3ZmaXIuYzogKGRlaW50ZXJsYWNlX2xpbmVfYyksCi0JICAoZGVpbnRlcmxhY2VfbGluZV9tbXgpLCAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF92ZmlyX2NsYXNzX2luaXQpOgotCSAgSW1wbGVtZW50IHRoZSBWRklSIGRlaW50ZXJsYWNpbmcgbWV0aG9kIGFzIHNpbXBsZSBtZXRob2QuCi0KLTIwMDgtMDgtMDIgMTg6MTg6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDM2LzU2XSBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi4qOiBBZGQgYSBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCBzdWJjbGFzcyBvZiBHc3REZWludGVybGFjZU1ldGhvZCB0aGF0IGNhbiBiZSB1c2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2ludGVycG9sYXRlX3NjYW5saW5lKSwKLQkgIChnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9jb3B5X3NjYW5saW5lKSwKLQkgIChnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICBBZGQgYSBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCBzdWJjbGFzcyBvZiBHc3REZWludGVybGFjZU1ldGhvZCB0aGF0Ci0JICBjYW4gYmUgdXNlZCBieSBzaW1wbGUgZGVpbnRlcmxhY2luZyBtZXRob2RzLiBUaGV5IG9ubHkgaGF2ZSB0byBwcm92aWRlCi0JICBhIGZ1bmN0aW9uIGZvciBpbnRlcnBvbGF0aW5nIGEgc2NhbmxpbmUgb3IgY29weWluZyBhIHNjYW5saW5lLgotCi0yMDA4LTA4LTAyIDE4OjE1OjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzNS81Nl0gZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzogUmVzcGVjdCB0aGUgbGF0ZW5jeSBvZiB0aGUgZGVpbnRlcmxhY2luZyBhbGdvcml0aG0gZm9yIHRoZSB0aW1lc3RhbXBzIG9mIGV2ZXJ5IGJ1Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzogKGdzdF9kZWludGVybGFjZTJfY2hhaW4pOgotCSAgUmVzcGVjdCB0aGUgbGF0ZW5jeSBvZiB0aGUgZGVpbnRlcmxhY2luZyBhbGdvcml0aG0gZm9yIHRoZSB0aW1lc3RhbXBzCi0JICBvZiBldmVyeSBidWZmZXIuCi0KLTIwMDgtMDgtMDIgMTg6MTM6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDM0LzU2XSBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS86IEFkZCB0aGUgTU1YIHJlZ2lzdGVycyB0byB0aGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBvbmx5IGlmIF9fTU1YX18gaXMgZGVmaW5lZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmFzbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYzoKLQkgIEFkZCB0aGUgTU1YIHJlZ2lzdGVycyB0byB0aGUgY2xvYmJlcmVkIHJlZ2lzdGVycyBvbmx5IGlmIF9fTU1YX18gaXMKLQkgIGRlZmluZWQuCi0KLTIwMDgtMDgtMDIgMTg6MDk6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDMzLzU2XSBnc3QvZGVpbnRlcmxhY2UyLzogRW5hYmxlIHRvbXNtb2NvbXAgYWdhaW4gYXMgdGhlIEMgcG9ydCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCByZWxlYXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlMl9tZXRob2RzX2dldF90eXBlKSwgKGdzdF9kZWludGVybGFjZTJfc2V0X21ldGhvZCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9jbGFzc19pbml0KToKLQkgIEVuYWJsZSB0b21zbW9jb21wIGFnYWluIGFzIHRoZSBDIHBvcnQgd2lsbCBiZSByZWFkeSBmb3IgdGhlIG5leHQKLQkgIHJlbGVhc2UuCi0KLTIwMDgtMDgtMDIgMTg6MDI6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDMyLzU2XSBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOiBEb24ndCB1c2UgcHJveHlfZ2V0Y2FwcygpIGJ1dCBpbXBsZW1lbnQgb3VyIG93biBnZXRjYXBzKCkgZnVuY3Rpb24gdGhhdCBkb3VibGVzL2guLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOiAoZ3N0X2RlaW50ZXJsYWNlMl9pbml0KSwKLQkgIChnc3RfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IpLCAoZ3N0X2ZyYWN0aW9uX2RvdWJsZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9nZXRjYXBzKSwgKGdzdF9kZWludGVybGFjZTJfc2V0Y2Fwcyk6Ci0JICBEb24ndCB1c2UgcHJveHlfZ2V0Y2FwcygpIGJ1dCBpbXBsZW1lbnQgb3VyIG93biBnZXRjYXBzKCkgZnVuY3Rpb24KLQkgIHRoYXQgZG91Ymxlcy9oYWxmcyB0aGUgZnJhbWVyYXRlIGlmIGFsbCBmaWVsZHMgc2hvdWxkIGJlIHNlbnQgb3V0LgotCi0yMDA4LTA3LTE4IDA4OjM0OjA2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzMS81Nl0gRGlzYWJsZSB0aGUgdG9tc21vY29tcCBhbGdvcml0aG0gZm9yIHRoaXMgcmVsZWFzZSBhcyBpdCdzIGJ1Z2d5IGFuZCBoYXMgbm8gQyBpbXBsZW1lbnRhdGlvbiB5ZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZTJfbWV0aG9kc19nZXRfdHlwZSksIChnc3RfZGVpbnRlcmxhY2UyX3NldF9tZXRob2QpLAotCSAgKGdzdF9kZWludGVybGFjZTJfY2xhc3NfaW5pdCksIChnc3RfZGVpbnRlcmxhY2UyX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHkuYzoKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9sX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfaF9jbGFzc19pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdmZpci5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfdmZpcl9jbGFzc19pbml0KToKLQkgIERpc2FibGUgdGhlIHRvbXNtb2NvbXAgYWxnb3JpdGhtIGZvciB0aGlzIHJlbGVhc2UgYXMgaXQncyBidWdneQotCSAgYW5kIGhhcyBubyBDIGltcGxlbWVudGF0aW9uIHlldC4KLQkgIEJ1aWxkIHRoZSBkZWludGVybGFjZTIgcGx1Z2luIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGJ1dCBzdGlsbCBtYXJrIGl0Ci0JICBhcyBleHBlcmltZW50YWwuCi0JICBCdWlsZCB0aGUgeDg2IGlubGluZSBhc3NlbWJseSBvbmx5IGlmIEdDQyBpbmxpbmUgYXNzZW1ibHkgaXMgc3VwcG9ydGVkCi0JICBhbmQgb25seSBvbiB4ODYgb3IgYW1kNjQuIEZpeGVzIGJ1ZyAjNTQzMjg2LgotCi0yMDA4LTA3LTE0IDE0OjEzOjU0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMzAvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lLzogRml4IGJ1aWxkIG9uIHg4Nl82NAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYzoKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9oX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF92ZmlyX2NsYXNzX2luaXQpOgotCSAgRml4IGJ1aWxkIG9uIHg4Nl82NAotCi0yMDA4LTA3LTEzIDEwOjU2OjQ1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyOS81Nl0gZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5hc206IEFsd2F5cyB1c2UgdGhlIEMgaW1wbGVtZW50YXRpb24gaWYgd2lkdGggaXMgbm90IGEgbXVsdGlwbGUgb2YgNC4gVGhlIGFzc2VtYmx5IG9wLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5hc206Ci0JICBBbHdheXMgdXNlIHRoZSBDIGltcGxlbWVudGF0aW9uIGlmIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQuIFRoZQotCSAgYXNzZW1ibHkgb3B0aW1pemVkIHZlcnNpb24gb25seSBoYW5kbGUgdGhpcyBhbmQgY2FsbGluZyB0aGUgQwotCSAgaW1wbGVtZW50YXRpb24gZm9yIHRoZSByZW1haW5pbmcgcGFydCBkb2Vzbid0IHdvcmsgYmVjYXVzZSBpdCBuZWVkcwotCSAgcHJldmlvdXMgY2FsY3VsYXRpb25zLgotCi0yMDA4LTA3LTEzIDEwOjUyOjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyOC81Nl0gZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvOiBTb21lIGNsZWFudXAsIHVzZSAzRE5PVyBpbnN0ZWFkIG9mIFRETk9XIGluIG1hY3Jvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmFzbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHlobWFjcm9zLmg6Ci0JICBTb21lIGNsZWFudXAsIHVzZSAzRE5PVyBpbnN0ZWFkIG9mIFRETk9XIGluIG1hY3Jvcy4KLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfdG9tc21vY29tcF9jbGFzc19pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC90b21zbW9jb21wbWFjcm9zLmg6Ci0JICBUaGUgU1NFIG1ldGhvZCBpbiBmYWN0IG9ubHkgbmVlZHMgTU1YRVhULCBkZWNsYXJlIGl0IGFzIHN1Y2guCi0KLTIwMDgtMDctMDggMTM6MzE6MzcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDI3LzU2XSBEb24ndCB1c2UgZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMgaW4gdGhlIHJlbWFpbmluZyBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGMvZ3N0c3BjLmM6IChzcGNfc2V0dXApOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BUb3AuaW5jOgotCSAgRG9uJ3QgdXNlIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzIGluIHRoZSByZW1haW5pbmcgY29kZS4KLQotMjAwOC0wNy0wNiAyMDo0Mzo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMjYvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbDIuaW5jOiBNYXJrIGludGVybmFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGFzIHN0YXRpYyBpbmxpbmUgZm9yIHF1aXRlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbDIuaW5jOgotCSAgTWFyayBpbnRlcm5hbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBhcyBzdGF0aWMgaW5saW5lIGZvciBxdWl0ZSBzb21lCi0JICBzcGVlZHVwIGFzIHRoZXkncmUgdXNlZCBvbmx5IG9uY2UgYW5kIG5lZWQgdG8gZ2V0IG1hbnkgbG9jYWwgdmFyaWFibGVzCi0JICBwYXNzZWQgYXMgcGFyYW1ldGVyLgotCi0yMDA4LTA3LTA1IDE5OjIwOjMwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyNS81Nl0gZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuKjogQ2FsbCB0aGUgY3VycmVudCBpbnN0YW5jZSAic2VsZiIgaW5zdGVhZCBvZiAib2JqZWN0Ii4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWUpLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2V0X21ldGhvZCksIChnc3RfZGVpbnRlcmxhY2UyX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfcmVzZXRfaGlzdG9yeSksIChnc3RfZGVpbnRlcmxhY2UyX3Jlc2V0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX3NldF9wcm9wZXJ0eSksIChnc3RfZGVpbnRlcmxhY2UyX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9wb3BfaGlzdG9yeSksIChnc3RfZGVpbnRlcmxhY2UyX2hlYWRfaGlzdG9yeSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9wdXNoX2hpc3RvcnkpLCAoZ3N0X2RlaW50ZXJsYWNlMl9jaGFpbiksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9zZXRjYXBzKSwgKGdzdF9kZWludGVybGFjZTJfc2lua19ldmVudCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfZXZlbnQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfc3JjX3F1ZXJ5KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuaDoKLQkgIENhbGwgdGhlIGN1cnJlbnQgaW5zdGFuY2UgInNlbGYiIGluc3RlYWQgb2YgIm9iamVjdCIuCi0KLTIwMDgtMDctMDUgMTk6MTE6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDI0LzU2XSBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi4qOiBJbmNsdWRlIGxhdGVuY3kgb2YgdGhlIG1ldGhvZCBpbiB0aGUgcmV0dXJuZWQgbGF0ZW5jeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2xhdGVuY3kpLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2V0X21ldGhvZCksIChnc3RfZGVpbnRlcmxhY2UyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfcHVzaF9oaXN0b3J5KSwgKGdzdF9kZWludGVybGFjZTJfY2hhaW4pLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2V0Y2FwcyksIChnc3RfZGVpbnRlcmxhY2UyX3NyY19xdWVyeSk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICBJbmNsdWRlIGxhdGVuY3kgb2YgdGhlIG1ldGhvZCBpbiB0aGUgcmV0dXJuZWQgbGF0ZW5jeS4KLQkgIEZpeCBvdXRwdXR0aW5nIG9mIGFsbCBmaWVsZHMsIGkuZS4gZG91Ymxpbmcgb2YgdGhlIGZyYW1lcmF0ZS4KLQotMjAwOC0wNy0wNSAxNjo0NzozMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMjMvNTZdIGdzdC9kZWludGVybGFjZTIvOiBVc2UgYSBHc3RPYmplY3Qgc3VidHlwZSBmb3IgdGhlIGRlaW50ZXJsYWNpbmcgbWV0aG9kcyBhbmQgZXhwb3J0IHRoZSBkaWZmZXJlbnQgc2V0dGluZ3MgZm9yIGVhY2ggZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9jbGFzc19pbml0KSwgKGdzdF9kZWludGVybGFjZV9tZXRob2RfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfZmllbGRzX3JlcXVpcmVkKSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX21ldGhvZHNfZ2V0X3R5cGUpLCAoX2RvX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2V0X21ldGhvZCksIChnc3RfZGVpbnRlcmxhY2UyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9jaGlsZF9wcm94eV9pbnRlcmZhY2VfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9pbml0KSwgKGdzdF9kZWludGVybGFjZTJfZmluYWxpemUpLAotCSAgKGdzdF9kZWludGVybGFjZTJfY2hhaW4pLCAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfcXVlcnkpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHkuYzoKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14KSwKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAoZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5KSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9sX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5hc206Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYzogKGdyZWVkeURTY2FsZXJfQyksCi0JICAoZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfaF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9oX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfaW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvcGx1Z2lucy5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfdG9tc21vY29tcF9pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6IChkZWludGVybGFjZV9mcmFtZV92ZmlyKSwKLQkgIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3ZmaXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF92ZmlyX2luaXQpOgotCSAgVXNlIGEgR3N0T2JqZWN0IHN1YnR5cGUgZm9yIHRoZSBkZWludGVybGFjaW5nIG1ldGhvZHMgYW5kIGV4cG9ydAotCSAgdGhlIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IgZWFjaCBkZWludGVybGFjaW5nIG1ldGhvZCB2aWEgR09iamVjdAotCSAgcHJvcGVydGllcy4KLQkgIEltcGxlbWVudCBHc3RDaGlsZFByb3h5IGludGVyZmFjZSB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIHVzZWQKLQkgIGRlaW50ZXJsYWNpbmcgbWV0aG9kIGFuZCB0byBhbGxvdyBhZGp1c3RpbmcgdGhlIGRpZmZlcmVudCBzZXR0aW5ncy4KLQkgIE1vdmUgZ2xvYmFsIHZhcmlhYmxlcyBvZiB0aGUgdG9tc21vY29tcCBkZWludGVybGFjaW5nIG1ldGhvZCBpbnRvCi0JICBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZXMgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgdGhpcyBkZWludGVybGFjaW5nCi0JICBtZXRob2QgZnJvbSBkaWZmZXJlbnQgaW5zdGFuY2VzLgotCi0yMDA4LTA3LTA1IDEyOjIyOjM3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyMi81Nl0gZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5hc206IFN1cHBvcnQgd2lkdGhzIHRoYXQgYXJlIG5vdCBhIG11bHRpcGx5IG9mIDQgd2hlbiB1c2luZyB0aGUgYXNzZW1ibHkgb3B0aW1pemVkIGdyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5hc206Ci0JICBTdXBwb3J0IHdpZHRocyB0aGF0IGFyZSBub3QgYSBtdWx0aXBseSBvZiA0IHdoZW4gdXNpbmcgdGhlIGFzc2VtYmx5Ci0JICBvcHRpbWl6ZWQgZ3JlZWR5aCBpbXBsZW1lbnRhdGlvbnMuCi0KLTIwMDgtMDctMDQgMTg6NTQ6MTUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDIxLzU2XSBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmM6IE9ubHkgYnVpbGQgdGhlIGFzc2VtYmx5IG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMgb24geDg2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYzoKLQkgIChkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHloKToKLQkgIE9ubHkgYnVpbGQgdGhlIGFzc2VtYmx5IG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMgb24geDg2LgotCi0yMDA4LTA2LTMwIDA3OjUxOjA3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyMC81Nl0gZ3N0L2RlaW50ZXJsYWNlMi86IFJlbW92ZSB1c2VsZXNzIGZpbGUgYW5kIG1hcmsgZXZlcnl0aGluZyBwb3NzaWJsZSBhcyBzdGF0aWMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5jOiAodG9tc21vY29tcF9pbml0KSwKLQkgICh0b21zbW9jb21wX2ZpbHRlcl9tbXgpLCAodG9tc21vY29tcF9maWx0ZXJfM2Rub3cpLAotCSAgKHRvbXNtb2NvbXBfZmlsdGVyX3NzZSksIChkZWludGVybGFjZV9mcmFtZV9kaV90b21zbW9jb21wKToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5oOgotCSAgUmVtb3ZlIHVzZWxlc3MgZmlsZSBhbmQgbWFyayBldmVyeXRoaW5nIHBvc3NpYmxlIGFzIHN0YXRpYy4KLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYzoKLQkgIFVzZSAiX3N0ZGludC5oIiBpbnN0ZWFkIG9mIDxzdGRpbnQuaD4uCi0KLTIwMDgtMDYtMjkgMTA6NTY6NDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDE5LzU2XSBnc3QvZGVpbnRlcmxhY2UyLzogR2V0IHJpZCBvZiBzcGVlZHkuW2NoXSBhcyB3ZSBkb24ndCB1c2UgbW9zdCBvZiBpdCdzIGNvZGUgYW55d2F5IGFuZCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcmVsaWNlbnMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOiAoZ3N0X2RlaW50ZXJsYWNlMl9pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6IChkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHkpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmM6Ci0JICAoZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3NwZWVkdG9vbHMuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvc3BlZWR5LmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3NwZWVkeS5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wLmM6IChGaWVsZGNvcHkpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6IChkZWludGVybGFjZV9mcmFtZV92ZmlyKToKLQkgIEdldCByaWQgb2Ygc3BlZWR5LltjaF0gYXMgd2UgZG9uJ3QgdXNlIG1vc3Qgb2YgaXQncyBjb2RlIGFueXdheQotCSAgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSByZWxpY2Vuc2VkIHRvIExHUEwuIFVzZSBtZW1jcHkoKSBpbnN0ZWFkCi0JICBvZiB0aGUgc3BlZWR5IG1lbWNweSBldmVyeXdoZXJlIGluc3RlYWQuCi0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICBSZW1vdmUgbWFueSB1bnVzZWQgZGVjbGFyYXRpb25zLgotCi0yMDA4LTA2LTI4IDE4OjEzOjA4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxOC81Nl0gZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzogRGl2aWRlIGxhdGVuY3kgYmUgMiB0byBjb252ZXJ0IGZyb20gZmllbGRzIHRvIGZyYW1lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOiAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfcXVlcnkpOgotCSAgRGl2aWRlIGxhdGVuY3kgYmUgMiB0byBjb252ZXJ0IGZyb20gZmllbGRzIHRvIGZyYW1lcy4KLQotMjAwOC0wNi0yOCAxODoxMDo1MiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTcvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOiBEb24ndCB1c2Ugc2NhbmxpbmVzIGZ1bmN0aW9uIGZyb20gZ3N0ZGVpbnRlcmxhY2UyIGFzIGl0J3Mgbm90IGFwcHJvcGlhdGUgZm9yIHRoaXMgbS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOgotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAoZGVpbnRlcmxhY2VfZ3JlZWR5X3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHkpOgotCSAgRG9uJ3QgdXNlIHNjYW5saW5lcyBmdW5jdGlvbiBmcm9tIGdzdGRlaW50ZXJsYWNlMiBhcyBpdCdzCi0JICBub3QgYXBwcm9waWF0ZSBmb3IgdGhpcyBtZXRob2QuIEluc3RlYWQgaW1wbGVtZW50IGRlaW50ZXJsYWNlX2ZyYW1lCi0JICBmdW5jdGlvbiBieSB0YWtpbmcgdGhlIG9uZSBmcm9tIGdyZWVkeWguCi0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYzogKGdyZWVkeURTY2FsZXJfQyk6Ci0JICBTbWFsbCBmaXggZm9yIHRoZSBDIGltcGxlbWVudGF0aW9uLgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6IChkZWludGVybGFjZV9mcmFtZV92ZmlyKToKLQkgIERvbid0IHVzZSB0aGUgc2NhbmxpbmVzIGZ1bmN0aW9uIGZyb20gZ3N0ZGVpbnRlcmxhY2UyIGFzIGl0J3Mgb25seQotCSAgdXNlZCBmb3IgdGhpcyBtZXRob2QgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gSW5zdGVhZCBpbXBsZW1lbnQKLQkgIGRlaW50ZXJsYWNlX2ZyYW1lIGZ1bmN0aW9uIGFuZCBtYWtlIGl0IGEgYml0IG1vcmUgZWZmaWNpZW50LgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZTJfY2xhc3NfaW5pdCksIChnc3RfZGVpbnRlcmxhY2UyX3NldF9tZXRob2QpLAotCSAgKGdzdF9kZWludGVybGFjZTJfcHVzaF9oaXN0b3J5KSwgKGdzdF9kZWludGVybGFjZTJfY2hhaW4pLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2V0Y2FwcyksIChnc3RfZGVpbnRlcmxhY2UyX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfY2hhbmdlX3N0YXRlKSwgKGdzdF9kZWludGVybGFjZTJfc3JjX2V2ZW50KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX3NyY19xdWVyeSk6Ci0JICBGaXggY29kaW5nIHN0eWxlIGFuZCByZW1vdmUgc2NhbmxpbmVzIGZ1bmN0aW9uIGFzIGl0J3MgdW51c2VkIG5vdy4KLQotMjAwOC0wNi0yOCAxNzoyNTo1NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTYvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lLzogQWRkIGEgQyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdyZWVkeWggZGVpbnRlcmxhY2luZyBtZXRob2QsIGNsZWFuIHVwIHRoZSBjb2RlIGEgYml0IGFuZCBtYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYXNtOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmM6IChncmVlZHlEU2NhbGVyX0MpLAotCSAgKGRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWgpLCAoZHNjYWxlcl9ncmVlZHloX2dldF9tZXRob2QpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHlobWFjcm9zLmg6Ci0JICBBZGQgYSBDIGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ3JlZWR5aCBkZWludGVybGFjaW5nIG1ldGhvZCwgY2xlYW4KLQkgIHVwIHRoZSBjb2RlIGEgYml0IGFuZCBtYXJrIHRoZSBTU0UgdmVyc2lvbiBhcyBNTVhFWFQgYXMgaXQgZG9lc24ndAotCSAgcmVxdWlyZSBhbnkgU1NFIGluc3RydWN0aW9ucy4KLQotMjAwOC0wNi0yNyAxMzoyMjozNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTUvNTZdIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6IElmIHdlJ3JlIG91dHB1dHRpbmcgYWxsIGZpZWxkcyB0aGUgZnJhbWVyYXRlIGhhcyB0byBiZSBkb3VibGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlMl9zZXRfcHJvcGVydHkpLCAoZ3N0X2RlaW50ZXJsYWNlMl9jaGFpbiksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9zZXRjYXBzKToKLQkgIElmIHdlJ3JlIG91dHB1dHRpbmcgYWxsIGZpZWxkcyB0aGUgZnJhbWVyYXRlIGhhcyB0byBiZSBkb3VibGVkLgotCSAgU2V0IGR1cmF0aW9uIG9uIHRoZSBvdXRnb2luZyBidWZmZXJzLgotCi0yMDA4LTA2LTI1IDE2OjA1OjA4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTQvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oOiBSZW1vdmUgdW5uZWVkZWQgbWFjcm9zIHRoYXQgYnJlYWsgYnVpbGQgb24gbWFjb3N4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oOgotCSAgUmVtb3ZlIHVubmVlZGVkIG1hY3JvcyB0aGF0IGJyZWFrIGJ1aWxkIG9uIG1hY29zeC4KLQotMjAwOC0wNi0yNCAxMjowODo0NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTMvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOiBPcHRpbWl6ZSBNTVgvTU1YRVhUIGltcGxlbWVudGF0aW9ucyBhIGJpdCBieSByZXF1aXJpbmcgdHdvIGxlc3MgbWVtb3J5IGFjY2Vzc2VzIGFuZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOgotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14KSwKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCk6Ci0JICBPcHRpbWl6ZSBNTVgvTU1YRVhUIGltcGxlbWVudGF0aW9ucyBhIGJpdCBieSByZXF1aXJpbmcgdHdvIGxlc3MKLQkgIG1lbW9yeSBhY2Nlc3NlcyBhbmQgZml4IHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgbWlzc2luZyByaWdodCBzaGlmdAotCSAgb24gYnl0ZXMgdG8gdW5zZXQgdGhlIGhpZ2hlc3QgYml0IG9mIGV2ZXJ5IGJ5dGUuCi0KLTIwMDgtMDYtMjQgMTA6MTU6NDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDEyLzU2XSBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHkuYzogUmVtb3ZlIHNmZW5jZSBpbnN0cnVjdGlvbiBhcyBpdCdzIG5vdCBuZWVkZWQgYW5kIGFjdHVhbGx5IGlzIGFuIFNTRSBpbnN0cnVjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHkuYzoKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCk6Ci0JICBSZW1vdmUgc2ZlbmNlIGluc3RydWN0aW9uIGFzIGl0J3Mgbm90IG5lZWRlZCBhbmQgYWN0dWFsbHkgaXMgYW4gU1NFCi0JICBpbnN0cnVjdGlvbi4KLQotMjAwOC0wNi0yNCAxMDoxMjowOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTEvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOiBBZGQgcGxhaW4gTU1YIGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ3JlZWR5bCBtZXRob2QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6Ci0JICAoZGVpbnRlcmxhY2VfZ3JlZWR5X3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmUpOgotCSAgQWRkIHBsYWluIE1NWCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdyZWVkeWwgbWV0aG9kLgotCi0yMDA4LTA2LTI0IDA5OjQwOjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMC81Nl0gZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbTogTW92ZSB0aGUgYXNzZW1ibHkgaW5jbHVkZXMgdG8gbm9pbnN0X0hFQURFUlMgd2hlcmUgdGhleSBiZWxvbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgIE1vdmUgdGhlIGFzc2VtYmx5IGluY2x1ZGVzIHRvIG5vaW5zdF9IRUFERVJTIHdoZXJlIHRoZXkgYmVsb25nLgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6IChkZWludGVybGFjZV9saW5lX2MpLAotCSAgKGRlaW50ZXJsYWNlX2xpbmVfbW14KToKLQkgIEZpeCBDIGFuZCBNTVggaW1wbGVtZW50YXRpb25zIGEgYml0IG1vcmUuCi0KLTIwMDgtMDYtMjQgMDk6MTA6NDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDA5LzU2XSBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHkuYzogRml4IHRoZSBDIGltcGxlbWVudGF0aW9uIHRvIHByb2R1Y2UgY29ycmVjdCByZXN1bHRzIGFuZCBvcHRpbWl6ZSB0aGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHkuYzoKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lKToKLQkgIEZpeCB0aGUgQyBpbXBsZW1lbnRhdGlvbiB0byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0cyBhbmQgb3B0aW1pemUgdGhlCi0JICBNTVhFWFQgaW1wbGVtZW50YXRpb24uCi0JICBIYW5kbGUgb2RkIHdpZHRocyBhbmQgZG9uJ3QgcmVhZCBvdmVyIGFycmF5IGJvdW5kYXJpZXMgaW4gdGhlIE1NWEVYVAotCSAgaW1wbGVtZW50YXRpb24uCi0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3ZmaXIuYzogKGRlaW50ZXJsYWNlX2xpbmVfYyksCi0JICAoZGVpbnRlcmxhY2VfbGluZV9tbXgpLCAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfdmZpcik6Ci0JICBGaXggYSBzbWFsbCByb3VuZGluZyBidWcgaW4gdGhlIE1NWCBpbXBsZW1lbnRhdGlvbiwgdGhlIE1NWAotCSAgaW1wbGVtZW50YXRpb24gZG9lc24ndCBhY3R1YWxseSBuZWVkIE1NWEVYVCBpbnN0cnVjdGlvbnMgc28gZG9uJ3QgbWFyawotCSAgaXQgYXMgc3VjaC4KLQkgIEhhbmRsZSBvZGQgd2lkdGhzIGluIGJvdGggaW1wbGVtZW50YXRpb25zLgotCi0yMDA4LTA2LTIxIDA5OjA1OjAwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOC81Nl0gZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6IEltcGxlbWVudCBhIEMgdmVyc2lvbiBvZiB0aGUgZ3JlZWR5IGxvdyBtb3Rpb24gYWxnb3JpdGhtIGFuZCBtYXJrIHRoZSBhc3NlbWJseSBvcHRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6Ci0JICAoZGVpbnRlcmxhY2VfZ3JlZWR5X3BhY2tlZDQyMl9zY2FubGluZV9zc2UpLAotCSAgKGRlaW50ZXJsYWNlX2dyZWVkeV9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAoZGVpbnRlcmxhY2VfZ3JlZWR5X3BhY2tlZDQyMl9zY2FubGluZSk6Ci0JICBJbXBsZW1lbnQgYSBDIHZlcnNpb24gb2YgdGhlIGdyZWVkeSBsb3cgbW90aW9uIGFsZ29yaXRobSBhbmQgbWFyayB0aGUKLQkgIGFzc2VtYmx5IG9wdGltaXplZCB2ZXJzaW9uIGFzIFNTRSBhcyBpdCB1c2VzIFNTRSBpbnN0cnVjdGlvbnMKLQkgIGFkZGl0aW9uYWwgdG8gTU1YIGluc3RydWN0aW9ucy4KLQotMjAwOC0wNi0yMCAxNDo0ODo0MCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMDcvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3ZmaXIuYzogTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgdGhlIHZmaXIgbWV0aG9kIG9uIFg4NiBDUFVzIHdpdGhvdXQgTU1YRVhUIHRvbyBidXQgdXNlIHRoZSBNTS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3ZmaXIuYzogKGRlaW50ZXJsYWNlX2xpbmVfbW14ZXh0KSwKLQkgIChkZWludGVybGFjZV9saW5lX2MpLCAoZGVpbnRlcmxhY2Vfc2NhbmxpbmVfdmZpcik6Ci0JICBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGUgdmZpciBtZXRob2Qgb24gWDg2IENQVXMgd2l0aG91dCBNTVhFWFQgdG9vCi0JICBidXQgdXNlIHRoZSBNTVhFWFQgb3B0aW1pemVkIGNvZGUgd2hlbmV2ZXIgcG9zc2libGUuCi0KLTIwMDgtMDYtMjAgMTQ6MzU6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDA2LzU2XSBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi4qOiBSZXNldCBlbGVtZW50IHN0YXRlIG9uIFBBVVNFRC0+UkVBRFkgcHJvcGVybHksIGRvbid0IGxlYWsgYW55IGJ1ZmZlcnMgd2hlbiBmaW5hbGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5jOgotCSAgKGdzdF9kZWludGVybGFjZTJfY2xhc3NfaW5pdCksIChnc3RfZGVpbnRlcmxhY2UyX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfcmVzZXRfaGlzdG9yeSksIChnc3RfZGVpbnRlcmxhY2UyX3Jlc2V0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2ZpbmFsaXplKSwgKGdzdF9kZWludGVybGFjZTJfY2hhaW4pLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2lua19ldmVudCksIChnc3RfZGVpbnRlcmxhY2UyX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfcXVlcnkpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSAgUmVzZXQgZWxlbWVudCBzdGF0ZSBvbiBQQVVTRUQtPlJFQURZIHByb3Blcmx5LCBkb24ndCBsZWFrIGFueSBidWZmZXJzCi0JICB3aGVuIGZpbmFsaXppbmcsIGFsbG9jYXRlIGJ1ZmZlcnMgd2l0aCBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIGFuZAotCSAgcHJvcGVybHkgcmV0dXJuIGZsb3cgcmV0dXJucyBmcm9tIGdzdF9wYWRfcHVzaCgpIGluc3RlYWQgb2YgaWdub3JpbmcgdGhlbS4KLQotMjAwOC0wNi0yMCAxMzo0NTowOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMDUvNTZdIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oOiBBZGQgbWlzc2luZyBoZWFkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC90b21zbW9jb21wbWFjcm9zLmg6Ci0JICBBZGQgbWlzc2luZyBoZWFkZXIuCi0KLTIwMDgtMDYtMjAgMTM6MjQ6MjkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDA0LzU2XSBGaXggY29tcGlsYXRpb24gb24gZ2VuZXJpYyB4ODYvYW1kNjQgYW5kIGluY2x1ZGUgZGVpbnRlcmxhY2UyIGluIHRoZSBidWlsZCBzeXN0ZW0uIEJlY2F1c2Ugb2Ygc2V2ZXJhbCBidWdzIGl0J3Mgc3RpbGwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYXNtOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BCb3R0b20uaW5jOgotCSAgRml4IGNvbXBpbGF0aW9uIG9uIGdlbmVyaWMgeDg2L2FtZDY0IGFuZCBpbmNsdWRlIGRlaW50ZXJsYWNlMiBpbiB0aGUKLQkgIGJ1aWxkIHN5c3RlbS4gQmVjYXVzZSBvZiBzZXZlcmFsIGJ1Z3MgaXQncyBzdGlsbCBlbmFibGVkIG9ubHkKLQkgIGJ5IC0tZW5hYmxlLWV4cGVyaW1lbnRhbC4KLQotMjAwOC0wNi0xOCAwNjozMToxMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMDMvNTZdIEZpeCBndGstZG9jIHdhcm5pbmdzLiBBbHNvIGRvbid0IG1pc3VzZSBhcGktZG9jIGNvbW1lbnRzIGZvciBub3JtYWwgY29tbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZXhhbXBsZXMvYXBwL2FwcHNyYy1yYS5jOgotCSAgKiBleGFtcGxlcy9hcHAvYXBwc3JjLXNlZWthYmxlLmM6Ci0JICAqIGV4YW1wbGVzL2FwcC9hcHBzcmMtc3RyZWFtLmM6Ci0JICAqIGV4YW1wbGVzL2FwcC9hcHBzcmMtc3RyZWFtMi5jOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmg6Ci0JICAqIGV4dC9tZXRhZGF0YS9nc3RiYXNlbWV0YWRhdGEuYzoKLQkgICogZXh0L21ldGFkYXRhL2dzdGJhc2VtZXRhZGF0YS5oOgotCSAgKiBleHQvbWV0YWRhdGEvbWV0YWRhdGEuYzoKLQkgICogZXh0L21ldGFkYXRhL21ldGFkYXRhZXhpZi5jOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL2dzdGRlaW50ZXJsYWNlMi5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9zcGVlZHkuYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvc3BlZWR5Lmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3ZmaXIuYzoKLQkgIEZpeCBndGstZG9jIHdhcm5pbmdzLiBBbHNvIGRvbid0IG1pc3VzZSBhcGktZG9jIGNvbW1lbnRzIGZvciBub3JtYWwKLQkgIGNvbW1lbnRzLgotCi0yMDA4LTA2LTExIDExOjEyOjQ5ICswMDAwICBNYXJ0aW4gRWlrZXJtYW5uIDxtZWlrZXJAdXBiLmRlPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMDIvNTZdIGdzdC9kZWludGVybGFjZTIvOiBBZGQgYSBkZWludGVybGFjZXIgcGx1Z2luIGJhc2VkIG9uIHRoZSB0dnRpbWUvRFNjYWxlciBkZWludGVybGFjZXIsIHdoaWNoIHdhcyByZWxpY2Vuc2VkIHRvIExHUEwgZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5OiBNYXJ0aW4gRWlrZXJtYW5uIDxtZWlrZXIgYXQgdXBiIGRvdCBkZT4KLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuYzoKLQkgIChnc3RfZGVpbnRlcmxhY2UyX21ldGhvZF9nZXRfdHlwZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9maWVsZHNfZ2V0X3R5cGUpLAotCSAgKGdzdF9kZWludGVybGFjZTJfZmllbGRfbGF5b3V0X2dldF90eXBlKSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2Jhc2VfaW5pdCksIChnc3RfZGVpbnRlcmxhY2UyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfaW5pdCksIChnc3RfZGVpbnRlcmxhY2UyX3NldF9tZXRob2QpLAotCSAgKGdzdF9kZWludGVybGFjZTJfc2V0X3Byb3BlcnR5KSwgKGdzdF9kZWludGVybGFjZTJfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2ZpbmFsaXplKSwgKGdzdF9kZWludGVybGFjZTJfcG9wX2hpc3RvcnkpLAotCSAgKGdzdF9kZWludGVybGFjZTJfaGVhZF9oaXN0b3J5KSwgKGdzdF9kZWludGVybGFjZTJfcHVzaF9oaXN0b3J5KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2RlaW50ZXJsYWNlX3NjYW5saW5lcyksIChnc3RfZGVpbnRlcmxhY2UyX2NoYWluKSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX3NldGNhcHMpLCAoZ3N0X2RlaW50ZXJsYWNlMl9zaW5rX2V2ZW50KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2NoYW5nZV9zdGF0ZSksIChnc3RfZGVpbnRlcmxhY2UyX3NyY19ldmVudCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfcXVlcnkpLCAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfcXVlcnlfdHlwZXMpLAotCSAgKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9nc3RkZWludGVybGFjZTIuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5LmM6IChjb3B5X3NjYW5saW5lKSwKLQkgIChkZWludGVybGFjZV9ncmVlZHlfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAoZHNjYWxlcl9ncmVlZHlsX2dldF9tZXRob2QpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmFzbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5jOgotCSAgKGRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWgpLCAoZHNjYWxlcl9ncmVlZHloX2dldF9tZXRob2QpLAotCSAgKGdyZWVkeWhfaW5pdCksIChncmVlZHloX2ZpbHRlcl9tbXgpLCAoZ3JlZWR5aF9maWx0ZXJfM2Rub3cpLAotCSAgKGdyZWVkeWhfZmlsdGVyX3NzZSk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aG1hY3Jvcy5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9tbXguaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvcGx1Z2lucy5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9zcGVlZHRvb2xzLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3NwZWVkeS5jOiAobXVsdGlwbHlfYWxwaGEpLCAoY2xpcDI1NSksCi0JICAoY29tYl9mYWN0b3JfcGFja2VkNDIyX3NjYW5saW5lX21teCksCi0JICAoZGlmZl9mYWN0b3JfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGRpZmZfZmFjdG9yX3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGRpZmZfcGFja2VkNDIyX2Jsb2NrOHg4X21teCksIChkaWZmX3BhY2tlZDQyMl9ibG9jazh4OF9jKSwKLQkgIChwYWNrZWQ0NDRfdG9fcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKHBhY2tlZDQyMl90b19wYWNrZWQ0NDRfc2NhbmxpbmVfYyksCi0JICAocGFja2VkNDIyX3RvX3BhY2tlZDQ0NF9yZWM2MDFfc2NhbmxpbmVfYyksCi0JICAodmZpbHRlcl9jaHJvbWFfMTIxX3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKHZmaWx0ZXJfY2hyb21hXzEyMV9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAodmZpbHRlcl9jaHJvbWFfMzMyX3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKHZmaWx0ZXJfY2hyb21hXzMzMl9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAoa2lsbF9jaHJvbWFfcGFja2VkNDIyX2lucGxhY2Vfc2NhbmxpbmVfbW14KSwKLQkgIChraWxsX2Nocm9tYV9wYWNrZWQ0MjJfaW5wbGFjZV9zY2FubGluZV9jKSwKLQkgIChpbnZlcnRfY29sb3VyX3BhY2tlZDQyMl9pbnBsYWNlX3NjYW5saW5lX21teCksCi0JICAoaW52ZXJ0X2NvbG91cl9wYWNrZWQ0MjJfaW5wbGFjZV9zY2FubGluZV9jKSwKLQkgIChtaXJyb3JfcGFja2VkNDIyX2lucGxhY2Vfc2NhbmxpbmVfYyksCi0JICAoaW50ZXJwb2xhdGVfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGNvbnZlcnRfdXl2eV90b195dXl2X3NjYW5saW5lX21teCksCi0JICAoY29udmVydF91eXZ5X3RvX3l1eXZfc2NhbmxpbmVfYyksCi0JICAoaW50ZXJwb2xhdGVfcGFja2VkNDIyX3NjYW5saW5lX21teCksCi0JICAoaW50ZXJwb2xhdGVfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAoYmxpdF9jb2xvdXJfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGJsaXRfY29sb3VyX3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGJsaXRfY29sb3VyX3BhY2tlZDQyMl9zY2FubGluZV9tbXhleHQpLAotCSAgKGJsaXRfY29sb3VyX3BhY2tlZDQ0NDRfc2NhbmxpbmVfYyksCi0JICAoYmxpdF9jb2xvdXJfcGFja2VkNDQ0NF9zY2FubGluZV9tbXgpLAotCSAgKGJsaXRfY29sb3VyX3BhY2tlZDQ0NDRfc2NhbmxpbmVfbW14ZXh0KSwgKHNtYWxsX21lbWNweSksCi0JICAoc3BlZWR5X21lbWNweV9jKSwgKHNwZWVkeV9tZW1jcHlfbW14KSwgKHNwZWVkeV9tZW1jcHlfbW14ZXh0KSwKLQkgIChibGl0X3BhY2tlZDQyMl9zY2FubGluZV9jKSwgKGJsaXRfcGFja2VkNDIyX3NjYW5saW5lX21teCksCi0JICAoYmxpdF9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChjb21wb3NpdGVfY29sb3VyNDQ0NF9hbHBoYV90b19wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAoY29tcG9zaXRlX2NvbG91cjQ0NDRfYWxwaGFfdG9fcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAoY29tcG9zaXRlX3BhY2tlZDQ0NDRfYWxwaGFfdG9fcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGNvbXBvc2l0ZV9wYWNrZWQ0NDQ0X2FscGhhX3RvX3BhY2tlZDQyMl9zY2FubGluZV9tbXhleHQpLAotCSAgKGNvbXBvc2l0ZV9wYWNrZWQ0NDQ0X3RvX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChjb21wb3NpdGVfcGFja2VkNDQ0NF90b19wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChjb21wb3NpdGVfYWxwaGFtYXNrX3RvX3BhY2tlZDQ0NDRfc2NhbmxpbmVfYyksCi0JICAoY29tcG9zaXRlX2FscGhhbWFza190b19wYWNrZWQ0NDQ0X3NjYW5saW5lX21teGV4dCksCi0JICAoY29tcG9zaXRlX2FscGhhbWFza19hbHBoYV90b19wYWNrZWQ0NDQ0X3NjYW5saW5lX2MpLAotCSAgKHByZW11bHRpcGx5X3BhY2tlZDQ0NDRfc2NhbmxpbmVfYyksCi0JICAocHJlbXVsdGlwbHlfcGFja2VkNDQ0NF9zY2FubGluZV9tbXhleHQpLAotCSAgKGJsZW5kX3BhY2tlZDQyMl9zY2FubGluZV9jKSwgKGJsZW5kX3BhY2tlZDQyMl9zY2FubGluZV9tbXhleHQpLAotCSAgKHF1YXJ0ZXJfYmxpdF92ZXJ0aWNhbF9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChxdWFydGVyX2JsaXRfdmVydGljYWxfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKHN1YnBpeF9ibGl0X3ZlcnRpY2FsX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChhOF9zdWJwaXhfYmxpdF9zY2FubGluZV9jKSwgKG15cm91bmQpLCAoaW5pdF9SR0JfdG9fWUNiQ3JfdGFibGVzKSwKLQkgIChpbml0X1lDYkNyX3RvX1JHQl90YWJsZXMpLCAocmdiMjRfdG9fcGFja2VkNDQ0X3JlYzYwMV9zY2FubGluZV9jKSwKLQkgIChyZ2JhMzJfdG9fcGFja2VkNDQ0NF9yZWM2MDFfc2NhbmxpbmVfYyksCi0JICAocGFja2VkNDQ0X3RvX3JnYjI0X3JlYzYwMV9zY2FubGluZV9jKSwKLQkgIChwYWNrZWQ0NDRfdG9fbm9ucHJlbXVsdGlwbGllZF9wYWNrZWQ0NDQ0X3NjYW5saW5lX2MpLAotCSAgKGFzcGVjdF9hZGp1c3RfcGFja2VkNDQ0NF9zY2FubGluZV9jKSwgKHNldHVwX3NwZWVkeV9jYWxscyksCi0JICAoc3BlZWR5X2dldF9hY2NlbCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3NwZWVkeS5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9zc2UuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5jOiAoRmllbGRjb3B5KSwKLQkgIChkZWludGVybGFjZV9mcmFtZV9kaV90b21zbW9jb21wKSwgKGRzY2FsZXJfdG9tc21vY29tcF9nZXRfbWV0aG9kKSwKLQkgICh0b21zbW9jb21wX2luaXQpLCAodG9tc21vY29tcF9maWx0ZXJfbW14KSwKLQkgICh0b21zbW9jb21wX2ZpbHRlcl8zZG5vdyksICh0b21zbW9jb21wX2ZpbHRlcl9zc2UpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcDBBLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wRWRnZUEuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BFZGdlQTguaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTIuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBNi5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEFILmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQUgyLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVG9wLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVkEuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BWQUguaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1N0cmFuZ2VCb2IuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwyLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9XaWVyZEJvYi5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3ZmaXIuYzogKGRlaW50ZXJsYWNlX2xpbmUpLAotCSAgKGRlaW50ZXJsYWNlX3NjYW5saW5lX3ZmaXIpLCAoY29weV9zY2FubGluZSksCi0JICAoZHNjYWxlcl92ZmlyX2dldF9tZXRob2QpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS94ODYtNjRfbWFjcm9zLmluYzoKLQkgIEFkZCBhIGRlaW50ZXJsYWNlciBwbHVnaW4gYmFzZWQgb24gdGhlIHR2dGltZS9EU2NhbGVyIGRlaW50ZXJsYWNlciwKLQkgIHdoaWNoIHdhcyByZWxpY2Vuc2VkIHRvIExHUEwgZm9yIEdTdHJlYW1lciBhbmQgaW4gdGhlb3J5IHByb3ZpZGVzCi0JICBiZXR0ZXIgYW5kIGZhc3RlciByZXN1bHRzIHRoYW4gdGhlIHNpbXBsZSBkZWludGVybGFjZSBlbGVtZW50LgotCSAgRml4ZXMgYnVnICMxNjM1NzguCi0JICBQb3J0ZWQgdG8gR1N0cmVhbWVyIDAuMTAgYnV0IHN0aWxsIG5vdCBlbmFibGVkIG9yIGluY2x1ZGVkIGluIHRoZQotCSAgYnVpbGQgc3lzdGVtIGJ5IGRlZmF1bHQgYmVjYXVzZSBvZiBiYWQgYXJ0ZWZhY3RzIGNhdXNlZCBieSBhIGJ1ZwotCSAgc29tZXdoZXJlIGFuZCBhcyBpdCBjYW4gYmUgb25seSBidWlsZCBvbiB4ODYvYW1kNjQgQVRNIGFuZCByZXF1aXJlcwotCSAgc3BlY2lhbCBDRkxBR1MuIFdpbGwgYmUgZml4ZWQgc29vbi4KLQotMjAwOC0wNi0xMSAxMToxMjoxNCArMDAwMCAgTWFydGluIEVpa2VybWFubiA8bWVpa2VyQHVwYi5kZT4KLQotCSAgW01PVkVEIEZST00gQkFEIDAxLzU2XSBnc3QvZGVpbnRlcmxhY2UyLzogQWRkIGEgZGVpbnRlcmxhY2VyIHBsdWdpbiBiYXNlZCBvbiB0aGUgdHZ0aW1lL0RTY2FsZXIgZGVpbnRlcmxhY2VyLCB3aGljaCB3YXMgcmVsaWNlbnNlZCB0byBMR1BMIGYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gYSBwYXRjaCBieTogTWFydGluIEVpa2VybWFubiA8bWVpa2VyIGF0IHVwYiBkb3QgZGU+Ci0JICAqIGdzdC9kZWludGVybGFjZTIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmM6Ci0JICAoZ3N0X2RlaW50ZXJsYWNlMl9tZXRob2RfZ2V0X3R5cGUpLAotCSAgKGdzdF9kZWludGVybGFjZTJfZmllbGRzX2dldF90eXBlKSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2ZpZWxkX2xheW91dF9nZXRfdHlwZSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9iYXNlX2luaXQpLCAoZ3N0X2RlaW50ZXJsYWNlMl9jbGFzc19pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2luaXQpLCAoZ3N0X2RlaW50ZXJsYWNlMl9zZXRfbWV0aG9kKSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX3NldF9wcm9wZXJ0eSksIChnc3RfZGVpbnRlcmxhY2UyX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9maW5hbGl6ZSksIChnc3RfZGVpbnRlcmxhY2UyX3BvcF9oaXN0b3J5KSwKLQkgIChnc3RfZGVpbnRlcmxhY2UyX2hlYWRfaGlzdG9yeSksIChnc3RfZGVpbnRlcmxhY2UyX3B1c2hfaGlzdG9yeSksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9kZWludGVybGFjZV9zY2FubGluZXMpLCAoZ3N0X2RlaW50ZXJsYWNlMl9jaGFpbiksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9zZXRjYXBzKSwgKGdzdF9kZWludGVybGFjZTJfc2lua19ldmVudCksCi0JICAoZ3N0X2RlaW50ZXJsYWNlMl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2RlaW50ZXJsYWNlMl9zcmNfZXZlbnQpLAotCSAgKGdzdF9kZWludGVybGFjZTJfc3JjX3F1ZXJ5KSwgKGdzdF9kZWludGVybGFjZTJfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkgIChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvZ3N0ZGVpbnRlcmxhY2UyLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeS5jOiAoY29weV9zY2FubGluZSksCi0JICAoZGVpbnRlcmxhY2VfZ3JlZWR5X3BhY2tlZDQyMl9zY2FubGluZV9tbXhleHQpLAotCSAgKGRzY2FsZXJfZ3JlZWR5bF9nZXRfbWV0aG9kKToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvZ3JlZWR5aC5hc206Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWguYzoKLQkgIChkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHloKSwgKGRzY2FsZXJfZ3JlZWR5aF9nZXRfbWV0aG9kKSwKLQkgIChncmVlZHloX2luaXQpLCAoZ3JlZWR5aF9maWx0ZXJfbW14KSwgKGdyZWVkeWhfZmlsdGVyXzNkbm93KSwKLQkgIChncmVlZHloX2ZpbHRlcl9zc2UpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9ncmVlZHloLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL2dyZWVkeWhtYWNyb3MuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvbW14Lmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3BsdWdpbnMuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvc3BlZWR0b29scy5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9zcGVlZHkuYzogKG11bHRpcGx5X2FscGhhKSwgKGNsaXAyNTUpLAotCSAgKGNvbWJfZmFjdG9yX3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGRpZmZfZmFjdG9yX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChkaWZmX2ZhY3Rvcl9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14KSwKLQkgIChkaWZmX3BhY2tlZDQyMl9ibG9jazh4OF9tbXgpLCAoZGlmZl9wYWNrZWQ0MjJfYmxvY2s4eDhfYyksCi0JICAocGFja2VkNDQ0X3RvX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChwYWNrZWQ0MjJfdG9fcGFja2VkNDQ0X3NjYW5saW5lX2MpLAotCSAgKHBhY2tlZDQyMl90b19wYWNrZWQ0NDRfcmVjNjAxX3NjYW5saW5lX2MpLAotCSAgKHZmaWx0ZXJfY2hyb21hXzEyMV9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14KSwKLQkgICh2ZmlsdGVyX2Nocm9tYV8xMjFfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKHZmaWx0ZXJfY2hyb21hXzMzMl9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14KSwKLQkgICh2ZmlsdGVyX2Nocm9tYV8zMzJfcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGtpbGxfY2hyb21hX3BhY2tlZDQyMl9pbnBsYWNlX3NjYW5saW5lX21teCksCi0JICAoa2lsbF9jaHJvbWFfcGFja2VkNDIyX2lucGxhY2Vfc2NhbmxpbmVfYyksCi0JICAoaW52ZXJ0X2NvbG91cl9wYWNrZWQ0MjJfaW5wbGFjZV9zY2FubGluZV9tbXgpLAotCSAgKGludmVydF9jb2xvdXJfcGFja2VkNDIyX2lucGxhY2Vfc2NhbmxpbmVfYyksCi0JICAobWlycm9yX3BhY2tlZDQyMl9pbnBsYWNlX3NjYW5saW5lX2MpLAotCSAgKGludGVycG9sYXRlX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChjb252ZXJ0X3V5dnlfdG9feXV5dl9zY2FubGluZV9tbXgpLAotCSAgKGNvbnZlcnRfdXl2eV90b195dXl2X3NjYW5saW5lX2MpLAotCSAgKGludGVycG9sYXRlX3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGludGVycG9sYXRlX3BhY2tlZDQyMl9zY2FubGluZV9tbXhleHQpLAotCSAgKGJsaXRfY29sb3VyX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChibGl0X2NvbG91cl9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14KSwKLQkgIChibGl0X2NvbG91cl9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChibGl0X2NvbG91cl9wYWNrZWQ0NDQ0X3NjYW5saW5lX2MpLAotCSAgKGJsaXRfY29sb3VyX3BhY2tlZDQ0NDRfc2NhbmxpbmVfbW14KSwKLQkgIChibGl0X2NvbG91cl9wYWNrZWQ0NDQ0X3NjYW5saW5lX21teGV4dCksIChzbWFsbF9tZW1jcHkpLAotCSAgKHNwZWVkeV9tZW1jcHlfYyksIChzcGVlZHlfbWVtY3B5X21teCksIChzcGVlZHlfbWVtY3B5X21teGV4dCksCi0JICAoYmxpdF9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksIChibGl0X3BhY2tlZDQyMl9zY2FubGluZV9tbXgpLAotCSAgKGJsaXRfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAoY29tcG9zaXRlX2NvbG91cjQ0NDRfYWxwaGFfdG9fcGFja2VkNDIyX3NjYW5saW5lX2MpLAotCSAgKGNvbXBvc2l0ZV9jb2xvdXI0NDQ0X2FscGhhX3RvX3BhY2tlZDQyMl9zY2FubGluZV9tbXhleHQpLAotCSAgKGNvbXBvc2l0ZV9wYWNrZWQ0NDQ0X2FscGhhX3RvX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChjb21wb3NpdGVfcGFja2VkNDQ0NF9hbHBoYV90b19wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChjb21wb3NpdGVfcGFja2VkNDQ0NF90b19wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAoY29tcG9zaXRlX3BhY2tlZDQ0NDRfdG9fcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAoY29tcG9zaXRlX2FscGhhbWFza190b19wYWNrZWQ0NDQ0X3NjYW5saW5lX2MpLAotCSAgKGNvbXBvc2l0ZV9hbHBoYW1hc2tfdG9fcGFja2VkNDQ0NF9zY2FubGluZV9tbXhleHQpLAotCSAgKGNvbXBvc2l0ZV9hbHBoYW1hc2tfYWxwaGFfdG9fcGFja2VkNDQ0NF9zY2FubGluZV9jKSwKLQkgIChwcmVtdWx0aXBseV9wYWNrZWQ0NDQ0X3NjYW5saW5lX2MpLAotCSAgKHByZW11bHRpcGx5X3BhY2tlZDQ0NDRfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChibGVuZF9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksIChibGVuZF9wYWNrZWQ0MjJfc2NhbmxpbmVfbW14ZXh0KSwKLQkgIChxdWFydGVyX2JsaXRfdmVydGljYWxfcGFja2VkNDIyX3NjYW5saW5lX21teGV4dCksCi0JICAocXVhcnRlcl9ibGl0X3ZlcnRpY2FsX3BhY2tlZDQyMl9zY2FubGluZV9jKSwKLQkgIChzdWJwaXhfYmxpdF92ZXJ0aWNhbF9wYWNrZWQ0MjJfc2NhbmxpbmVfYyksCi0JICAoYThfc3VicGl4X2JsaXRfc2NhbmxpbmVfYyksIChteXJvdW5kKSwgKGluaXRfUkdCX3RvX1lDYkNyX3RhYmxlcyksCi0JICAoaW5pdF9ZQ2JDcl90b19SR0JfdGFibGVzKSwgKHJnYjI0X3RvX3BhY2tlZDQ0NF9yZWM2MDFfc2NhbmxpbmVfYyksCi0JICAocmdiYTMyX3RvX3BhY2tlZDQ0NDRfcmVjNjAxX3NjYW5saW5lX2MpLAotCSAgKHBhY2tlZDQ0NF90b19yZ2IyNF9yZWM2MDFfc2NhbmxpbmVfYyksCi0JICAocGFja2VkNDQ0X3RvX25vbnByZW11bHRpcGxpZWRfcGFja2VkNDQ0NF9zY2FubGluZV9jKSwKLQkgIChhc3BlY3RfYWRqdXN0X3BhY2tlZDQ0NDRfc2NhbmxpbmVfYyksIChzZXR1cF9zcGVlZHlfY2FsbHMpLAotCSAgKHNwZWVkeV9nZXRfYWNjZWwpOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS9zcGVlZHkuaDoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvc3NlLmg6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAuYzogKEZpZWxkY29weSksCi0JICAoZGVpbnRlcmxhY2VfZnJhbWVfZGlfdG9tc21vY29tcCksIChkc2NhbGVyX3RvbXNtb2NvbXBfZ2V0X21ldGhvZCksCi0JICAodG9tc21vY29tcF9pbml0KSwgKHRvbXNtb2NvbXBfZmlsdGVyX21teCksCi0JICAodG9tc21vY29tcF9maWx0ZXJfM2Rub3cpLCAodG9tc21vY29tcF9maWx0ZXJfc3NlKToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC5oOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3AwQS5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEJvdHRvbS5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEVkZ2VBLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wRWRnZUE4LmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQS5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEEyLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTYuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBSC5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEFIMi5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFRvcC5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFZBLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVkFILmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9TdHJhbmdlQm9iLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYzoKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsMi5pbmM6Ci0JICAqIGdzdC9kZWludGVybGFjZTIvdHZ0aW1lL3RvbXNtb2NvbXAvV2llcmRCb2IuaW5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UyL3R2dGltZS92ZmlyLmM6IChkZWludGVybGFjZV9saW5lKSwKLQkgIChkZWludGVybGFjZV9zY2FubGluZV92ZmlyKSwgKGNvcHlfc2NhbmxpbmUpLAotCSAgKGRzY2FsZXJfdmZpcl9nZXRfbWV0aG9kKToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi90dnRpbWUveDg2LTY0X21hY3Jvcy5pbmM6Ci0JICBBZGQgYSBkZWludGVybGFjZXIgcGx1Z2luIGJhc2VkIG9uIHRoZSB0dnRpbWUvRFNjYWxlciBkZWludGVybGFjZXIsCi0JICB3aGljaCB3YXMgcmVsaWNlbnNlZCB0byBMR1BMIGZvciBHU3RyZWFtZXIgYW5kIGluIHRoZW9yeSBwcm92aWRlcwotCSAgYmV0dGVyIGFuZCBmYXN0ZXIgcmVzdWx0cyB0aGFuIHRoZSBzaW1wbGUgZGVpbnRlcmxhY2UgZWxlbWVudC4KLQkgIEZpeGVzIGJ1ZyAjMTYzNTc4LgotCSAgUG9ydGVkIHRvIEdTdHJlYW1lciAwLjEwIGJ1dCBzdGlsbCBub3QgZW5hYmxlZCBvciBpbmNsdWRlZCBpbiB0aGUKLQkgIGJ1aWxkIHN5c3RlbSBieSBkZWZhdWx0IGJlY2F1c2Ugb2YgYmFkIGFydGVmYWN0cyBjYXVzZWQgYnkgYSBidWcKLQkgIHNvbWV3aGVyZSBhbmQgYXMgaXQgY2FuIGJlIG9ubHkgYnVpbGQgb24geDg2L2FtZDY0IEFUTSBhbmQgcmVxdWlyZXMKLQkgIHNwZWNpYWwgQ0ZMQUdTLiBXaWxsIGJlIGZpeGVkIHNvb24uCi0KLTIwMDktMDUtMTMgMTA6MzA6MzUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBmbHY6IEFjdHVhbGx5IGFkZCB0aGUgZmx2IHBsdWdpbiB0byBjb25maWd1cmUuYWMKLQotMjAwOS0wNS0xMyAwOToyNDoyNiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JICBjaGVja3M6IGZpeCBmbGFjZGVjIHVuaXQgdGVzdHMgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyBhbmQgdW5kZXIgdmFsZ3JpbmQKLQkgIEZsYWNkZWMgb3V0cHV0cyAxNi1iaXQgc2FtcGxlcywgc28gbGV0J3MgY2hlY2sgaWYgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdAotCSAgc2FtcGxlIGlzIHdoYXQgd2UgZXhwZWN0IHJhdGhlciB0aGFuIGp1c3QgdGhlIGZpcnN0IGJ5dGUsIHdoaWNoIG1heSBiZQotCSAgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSBleHBlY3QgZGVwZW5kaW5nIG9uIHRoZSBob3N0J3MgZW5kaWFubmVzcy4gRml4ZXMKLQkgIHRoZSBmbGFjZGVjIHVuaXQgdGVzdHMgb24gUFBDLiBBbHNvIGZpeCBhIGJ1bmNoIG9mIGxlYWtzIGluIHRoZSB1bml0Ci0JICB0ZXN0cyB0byBtYWtlIHZhbGdyaW5kIGhhcHB5LiBGaXhlcyAjNTgyNDIwLgotCi0yMDA5LTA1LTEzIDA5OjE4OjA3ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogZml4IGJ1ZmZlciBsZWFrCi0JICBnc3RfYnVmZmVyX3JlcGxhY2UoKSB3aWxsIHRha2UgaXRzIG93biByZWYsIHNvIHdlIHN0aWxsIGhhdmUKLQkgIHRvIHVucmVmIHRoZSBidWZmZXIgaWYgd2UgZG9uJ3QgbmVlZCBpdCBhbnkgbG9uZ2VyLgotCi0yMDA5LTA1LTEyIDIxOjIwOjA0ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IEZpeCBwb2ludGVyIGFyaXRobWV0aWMKLQkgIFRoaXMgZml4ZXMgYSBzZWVraW5nIHJlZ3Jlc3Npb24sIGJ1ZyAjMTM0NTIyLgotCi0yMDA5LTA1LTEyIDIxOjM2OjMxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JICBNb3ZlZCAnZmx2JyBmcm9tIC1iYWQgdG8gLWdvb2QKLQotMjAwOS0wNS0wNyAxNzo1Mzo0MiArMDEwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxjaHJpc3RpYW4uc2NoYWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNTcvNTddIEFkZCByYW5rcyB0byB2YXJpb3VzIG11eGVycyBhbmQgZW5jb2RlcnMgaW4gLWJhZAotCi0yMDA5LTA0LTI5IDE4OjUyOjIwICswMTAwICBUcmlzdGFuIE1hdHRoZXdzIDxsZS5idXNpbmVzc21hbkBnbWFpbC5jb20+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNTYvNTddIGZsdm11eDogaW5pdCB2YXJpYWJsZSB0byBOVUxMIHRvIGZpeCBjb21waWxlciB3YXJuaW5nCi0JICBGaXhlcyAjNTgwNzg2LgotCi0yMDA5LTA0LTI5IDEzOjU2OjA3ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgIFtNT1ZFRCBGUk9NIEJBRCA1NS81N10gZmx2OiBTZXQvcmVxdWlyZSB0aGUgZnJhbWVkL3BhcnNlZCBmaWVsZHMgb2YgdGhlIGF1ZGlvL21wZWcgY2FwcyB0byBUUlVFCi0KLTIwMDktMDQtMjkgMTM6MTY6MjUgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdm11eC5jOgotCSAgW01PVkVEIEZST00gQkFEIDU0LzU3XSBmbHY6IEFsd2F5cyB3cml0ZSBhdCBsZWFzdCB0aGUgbWluaW1hbCB0YWdzIGFuZCB3cml0ZSB0aGUgUEFSIGFzIHRhZ3MKLQotMjAwOS0wNC0yOSAxMzowMzo0NiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6Ci0JKiBnc3QvZmx2L2dzdGZsdm11eC5oOgotCSAgW01PVkVEIEZST00gQkFEIDUzLzU3XSBmbHY6IEFkZCBzdXBwb3J0IGZvciBtdXhpbmcgc29tZSB0YWdzCi0KLTIwMDktMDQtMjkgMTM6MDM6MjcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNTIvNTddIGZsdjogQWRkIHN1cHBvcnQgZm9yIHRpdGxlIHRhZwotCi0yMDA5LTA0LTI5IDA5OjQwOjQxICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOgotCSAgW01PVkVEIEZST00gQkFEIDUxLzU3XSBmbHY6IEZpeCBwYXJzaW5nIG9mIHRhZ3MgYW5kIGFkZCBuZXcgbWFwcGluZ3MKLQkgIFdlIHNob3VsZG4ndCByZWdpc3RlciBhIG5ldyBHc3RUYWcgZm9yIGV2ZXJ5IHVua25vd24gdGFnCi0JICB3ZSBmaW5kIGFzIHRoaXMgbWlnaHQgbGVhZCB0byBjb25mbGljdHMgYW5kIGFsc28gdGhvc2UKLQkgIHRhZ3MgYXJlIGVzc2VudGlhbGx5IHVua25vd24uCi0JICBBZGQgbWFwcGluZ3MgZm9yIHNvbWUga25vd24gdGFncyBhbmQgYWxzbyBjb252ZXJ0IHN0cmluZwotCSAgZGF0ZXMgdG8gR0RhdGUsIGFzIGZvdW5kIGluIG1hbnkgRkxWIGZpbGVzLgotCi0yMDA5LTA0LTIyIDE5OjUyOjA1ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSogZ3N0L2Zsdi9nc3RmbHZtdXguYzoKLQkqIGdzdC9mbHYvZ3N0Zmx2bXV4Lmg6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNTAvNTddIGZsdjogQWRkIGRvY3VtZW50YXRpb24gdG8gZmx2bXV4IGFuZCBmbHZkZW11eAotCSAgUGFydGlhbGx5IGZpeGVzIGJ1ZyAjNTczNzM3LgotCi0yMDA5LTAxLTIyIDEzOjM5OjM0ICswMTAwICBKYW4gVXJiYW5za2kgPGoudXJiYW5za2lAc3R1ZGVudHMubWltdXcuZWR1LnBsPgotCi0JKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JICBbTU9WRUQgRlJPTSBCQUQgNDkvNTddIEFkZCBzdXBwb3J0IGZvciBFQ01BIGFycmF5cyBpbiBzY3JpcHQgdGFncy4gRml4ZXMgYnVnICM1Njc5NjUuCi0JICBBZGQgc3VwcG9ydCBmb3IgRUNNQSBhcnJheXMgaW4gc2NyaXB0IHRhZ3MuIFRoaXMgZml4ZXMKLQkgIHNlZWtpbmcgb24gc29tZSBmaWxlcyB0aGF0IGhhdmUgdGhlIHNlZWsgdGFibGUgc3RvcmVkCi0JICBpbnNpZGUgYW4gRUNNQSBhcnJheSBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgYXJyYXkuCi0KLTIwMDgtMTItMDMgMTE6NDM6MDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDQ4LzU3XSBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IENoZWNrIGlmIHN0cmluZ3MgYXJlIHZhbGlkIFVURjggYmVmb3JlIHVzaW5nIHRoZW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoRkxWX0dFVF9TVFJJTkcpOgotCSAgQ2hlY2sgaWYgc3RyaW5ncyBhcmUgdmFsaWQgVVRGOCBiZWZvcmUgdXNpbmcgdGhlbS4KLQotMjAwOC0xMS0yNCAxMToxNzoxOSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCA0Ny81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBGaXggbm9uIGtleSB1bml0IHNlZWtpbmcgYnkgYWx3YXlzIGdvaW5nIHRvIHRoZSBwcmV2aW91cyBrZXlmcmFtZS4gTWFyayB0aGUgZGlzY29udCBmbGFnIHdoZW4gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMTEtMjQgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfZmluZF9vZmZzZXQpLAotCSAgKGdzdF9mbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCksCi0JICAoZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdWxsKToKLQkgIEZpeCBub24ga2V5IHVuaXQgc2Vla2luZyBieSBhbHdheXMgZ29pbmcgdG8gdGhlIHByZXZpb3VzCi0JICBrZXlmcmFtZS4gTWFyawotCSAgdGhlIGRpc2NvbnQgZmxhZyB3aGVuIHdlJ3ZlIG1vdmVkIGluIHRoZSBmaWxlLgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX2F1ZGlvX25lZ290aWF0ZSk6IE1QMwotCSAgc3RyZWFtcwotCSAgYXJlIHBhcnNlZCBhbHJlYWR5LCBtYWtlcyBhdXRvcGx1Z2dlZCBwaXBlbGluZXMgc2hvcnRlci4KLQotMjAwOC0xMS0wNCAxMjo0MjozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQUQgNDYvNTddIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2Fsc2FzcGRpZi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2FtcndiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXBleHNpbmsvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hcnRzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYXJ0c2QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb2ZpbGUvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvYnoyL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2RhdWRpby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NlbHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kYzEzOTQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9kaXJhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2RpcmVjdGZiL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGl2eC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2R0cy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2ZhYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9mYWFkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZ3NtL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaGVybWVzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaXZvcmJpcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2phY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9qcDJrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGFkc3BhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGNzL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGliZmFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xpYm1tcy9NYWtlZmlsZS5hbToKLQkgICogZXh0L21ldGFkYXRhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXBlZzJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tcGxleC9NYWtlZmlsZS5hbToKLQkgICogZXh0L211c2VwYWNrL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbXVzaWNicmFpbnovTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9teXRodHYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uYXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9uZW9uL01ha2VmaWxlLmFtOgotCSAgKiBleHQvb2ZhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcG9seXAvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9yZXNpbmR2ZC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NkbC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Nob3V0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc25hcHNob3QvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zbmRmaWxlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291bmR0b3VjaC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NwYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3N3ZmRlYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L3Rhcmtpbi9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RoZW9yYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3RpbWlkaXR5L01ha2VmaWxlLmFtOgotCSAgKiBleHQvdHdvbGFtZS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3gyNjQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC94aW5lL01ha2VmaWxlLmFtOgotCSAgKiBleHQveHZpZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2FwcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0LWxpYnMvZ3N0L2RzaG93L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYWlmZnBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXBwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9idWZmZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9iYXllci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NkeGFwYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2NoYXJ0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY29sb3JzcGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RjY3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlaW50ZXJsYWNlMi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2R2ZHNwdS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Zlc3RpdmFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmlsdGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmxhY3BhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ2FtZXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9oMjY0cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9saWJyZmIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9taXhtYXRyaXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tb2RwbHVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXBlZzFzeXMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnNHZpZGVvcGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVnZGVtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndHNtdXgvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tcGVndmlkZW9wYXJzZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L212ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L25zZi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L251dmRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvb3ZlcmxheS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGNhcHBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcGxheW9uZGVtYW5kL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcmF3cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZWFsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRqcGVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NjYWxldGVtcG8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zZWxlY3Rvci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3Ntb290aHdhdmUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVlZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NwZWV4cmVzYW1wbGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdGVyZW8vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zdWJlbmMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC90dGEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92YmlkZWMvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2Ryb3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb3NpZ25hbC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpcnR1YWxkdWIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92bW5jL01ha2VmaWxlLmFtOgotCSAgKiBnc3QveTRtL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvYWNtZW5jL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvY2Ryb20vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd2RlY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kdmIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9keHIzL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZmJkZXYvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3M0L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvcWNhbS9NYWtlZmlsZS5hbToKLQkgICogc3lzL3F0d3JhcHBlci9NYWtlZmlsZS5hbToKLQkgICogc3lzL3ZjZC9NYWtlZmlsZS5hbToKLQkgICogc3lzL3dpbmluZXQvTWFrZWZpbGUuYW06Ci0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1iYWQuCi0KLTIwMDgtMTAtMjggMTg6NDQ6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDQ1LzU3XSBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IEltcGxlbWVudCBwb3NpdGlvbiBxdWVyeSBpbiB0aW1lIGZvcm1hdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X3F1ZXJ5KToKLQkgIEltcGxlbWVudCBwb3NpdGlvbiBxdWVyeSBpbiB0aW1lIGZvcm1hdC4KLQotMjAwOC0xMC0yOCAxODo0MToxOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgNDQvNTddIGdzdC9mbHYvOiBQdXQgdGhlIEdzdFNlZ21lbnQgZGlyZWN0bHkgaW50byB0aGUgaW5zdGFuY2Ugc3RydWN0IGluc3RlYWQgb2YgYWxsb2NhdGluZyBhbmQgZnJlZSdpbmcgaXQgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9jbGVhbnVwKSwKLQkgIChnc3RfZmx2X2RlbXV4X2xvb3ApLCAoZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdXNoKSwKLQkgIChnc3RfZmx2X2RlbXV4X2hhbmRsZV9zZWVrX3B1bGwpLCAoZ3N0X2Zsdl9kZW11eF9zaW5rX2V2ZW50KSwKLQkgIChnc3RfZmx2X2RlbXV4X2Rpc3Bvc2UpLCAoZ3N0X2Zsdl9kZW11eF9pbml0KToKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pLCAoZ3N0X2Zsdl9wYXJzZV90YWdfdGltZXN0YW1wKToKLQkgIFB1dCB0aGUgR3N0U2VnbWVudCBkaXJlY3RseSBpbnRvIHRoZSBpbnN0YW5jZSBzdHJ1Y3QgaW5zdGVhZCBvZgotCSAgYWxsb2NhdGluZyBhbmQgZnJlZSdpbmcgaXQgYWdhaW4uCi0JICBQdXNoIHRhZ3MgYWxyZWFkeSBpZiBvbmx5IG9uZSBwYWQgd2FzIGFkZGVkLCBubyBuZWVkIHRvIHdhaXQgZm9yCi0JICB0aGUgc2Vjb25kIG9uZS4KLQkgIFdoZW4gZ2VuZXJhdGluZyBvdXIgaW5kZXggc2V0IGhhc192aWRlbyBhbmQgaGFzX2F1ZGlvIGlmIHdlIGZpbmQKLQkgIHZpZGVvIG9yIGF1ZGlvIGluIGNhc2UgdGhlIEZMViBoZWFkZXIgaGFzIGluY29ycmVjdCBkYXRhLgotCi0yMDA4LTEwLTI3IDA5OjQ1OjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCA0My81N10gZ3N0L2Zsdi86IERvbid0IG1lbWNweSgpIGFsbCBkYXRhIHdlIHdhbnQgdG8gcHVzaCBkb3duc3RyZWFtLCBpbnN0ZWFkIGp1c3QgY3JlYXRlIHN1YmJ1ZmZlcnMgYW5kIHB1c2ggdGhlbSBkb3duc3RyZWFtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpLCAoZ3N0X2Zsdl9kZW11eF9wdWxsX2hlYWRlciksCi0JICAoZ3N0X2Zsdl9kZW11eF9jcmVhdGVfaW5kZXgpOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX3RhZ19zY3JpcHQpLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ190aW1lc3RhbXApLCAoZ3N0X2Zsdl9wYXJzZV90YWdfdHlwZSksCi0JICAoZ3N0X2Zsdl9wYXJzZV9oZWFkZXIpOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmg6Ci0JICBEb24ndCBtZW1jcHkoKSBhbGwgZGF0YSB3ZSB3YW50IHRvIHB1c2ggZG93bnN0cmVhbSwgaW5zdGVhZCBqdXN0Ci0JICBjcmVhdGUgc3ViYnVmZmVycyBhbmQgcHVzaCB0aGVtIGRvd25zdHJlYW0uCi0JICBGaXggc29tZSBtaW5vciBtZW1vcnkgbGVha3MuCi0KLTIwMDgtMTAtMjcgMDk6NDE6MTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDQyLzU3XSBnc3QvZmx2L01ha2VmaWxlLmFtOiBGaXggKG5vbi1jcml0aWNhbCkgc3ludGF4IGVycm9yIGFuZCBhZGQgYWxsIHJlcXVpcmVkIENGTEFHUyBhbmQgTElCUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L01ha2VmaWxlLmFtOgotCSAgRml4IChub24tY3JpdGljYWwpIHN5bnRheCBlcnJvciBhbmQgYWRkIGFsbCByZXF1aXJlZCBDRkxBR1MgYW5kIExJQlMuCi0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKEZMVl9HRVRfU1RSSU5HKSwKLQkgIChnc3RfZmx2X3BhcnNlX21ldGFkYXRhX2l0ZW0pLCAoZ3N0X2Zsdl9wYXJzZV90YWdfc2NyaXB0KSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdGltZXN0YW1wKSwgKGdzdF9mbHZfcGFyc2VfdGFnX3R5cGUpOgotCSAgUmV3cml0ZSB0aGUgc2NyaXB0IHRhZyBwYXJzaW5nIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB0cnkgdG8gcmVhZAotCSAgbW9yZSBkYXRhIHRoYW4gd2UgaGF2ZS4gQWxzbyB1c2UgR1NUX1JFQURfVUlOVDI0X0JFIGRpcmVjdGx5IGFuZAotCSAgZml4IHNvbWUgbWlub3IgbWVtb3J5IGxlYWtzLgotCSAgVGhpcyBzaG91bGQgbWFrZSBhbGwgY3Jhc2hlcyBvbiBmdXp6ZWQgRkxWIGZpbGVzIGRpc2FwcGVhci4KLQotMjAwOC0xMC0yNyAwOTozNzoyMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgNDEvNTddIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogUHJvcGVybHkgY2hlY2sgZXZlcnl3aGVyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGRhdGEgdG8gcGFyc2UgYW5kIGRvbid0IHJlYWQgb3V0c2lkZSB0aGUgYWxsb2NhdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKEZMVl9HRVRfU1RSSU5HKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdHlwZSksIChnc3RfZmx2X3BhcnNlX2hlYWRlcik6Ci0JICBQcm9wZXJseSBjaGVjayBldmVyeXdoZXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBwYXJzZSBhbmQKLQkgIGRvbid0IHJlYWQgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZWdpb24uCi0KLTIwMDgtMTAtMjcgMDk6MzU6MzQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDQwLzU3XSBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IElmIHRoZSBjYXBzIGNoYW5nZSBkdXJpbmcgcGxheWJhY2sgYW5kIG5lZ290aWF0aW9uIGZhaWxzIGVycm9yIG91dCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb250aW51ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pOgotCSAgSWYgdGhlIGNhcHMgY2hhbmdlIGR1cmluZyBwbGF5YmFjayBhbmQgbmVnb3RpYXRpb24gZmFpbHMgZXJyb3Igb3V0Ci0JICBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb250aW51ZS4KLQotMjAwOC0xMC0yNyAwOTozMzo0MCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMzkvNTddIGdzdC9mbHYvOiBBZGQgc3VwcG9ydCBmb3IgU3BlZXggYXVkaW8gYW5kIGFsbG93IGJ1ZmZlcnMgd2l0aG91dCB2YWxpZCB0aW1lc3RhbXAgaW4gdGhlIG11eGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6IChnc3RfZmx2X211eF9hdWRpb19wYWRfc2V0Y2FwcyksCi0JICAoZ3N0X2Zsdl9tdXhfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9mbHZfbXV4X3dyaXRlX2J1ZmZlciksCi0JICAoZ3N0X2Zsdl9tdXhfY29sbGVjdGVkKToKLQkgICogZ3N0L2Zsdi9nc3RmbHZtdXguaDoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV9hdWRpb19uZWdvdGlhdGUpOgotCSAgQWRkIHN1cHBvcnQgZm9yIFNwZWV4IGF1ZGlvIGFuZCBhbGxvdyBidWZmZXJzIHdpdGhvdXQgdmFsaWQKLQkgIHRpbWVzdGFtcCBpbiB0aGUgbXV4ZXIuCi0KLTIwMDgtMTAtMjcgMDk6MzI6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDM4LzU3XSBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IERvbid0IHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIGlmIHNlbmRpbmcgRU9TIGRvd25zdHJlYW0gZGlkbid0IHdvcmsuIEZpeGVzIGJ1ZyAjNTUwNDU0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfbG9vcCksCi0JICAoZ3N0X2Zsdl9kZW11eF9maW5kX29mZnNldCksIChnc3RfZmx2X2RlbXV4X2hhbmRsZV9zZWVrX3B1c2gpLAotCSAgKGdzdF9mbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVsbCk6Ci0JICBEb24ndCBwb3N0IGFuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJ1cyBpZiBzZW5kaW5nIEVPUyBkb3duc3RyZWFtCi0JICBkaWRuJ3Qgd29yay4gRml4ZXMgYnVnICM1NTA0NTQuCi0JICBGaXggc2VlayBldmVudCBoYW5kbGluZyB0byBsb29rIGF0IHRoZSBmbGFncyBvZiB0aGUgc2VlayBldmVudAotCSAgaW5zdGVhZCBvZiBhc3N1bWluZyBzb21lIHJhbmRvbSBmbGFncywgZG9uJ3Qgc2VuZCBzZWdtZW50LXN0YXJ0Ci0JICBtZXNzYWdlcyB3aGVuIG9wZXJhdGluZyBpbiBwdXNoIG1vZGUgYW5kIHB1c2ggc2VlayBldmVudHMgdXBzdHJlYW0KLQkgIGlmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGVtLgotCi0yMDA4LTEwLTI3IDA5OjI3OjE4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzNy81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBFcnJvciBvdXQgZWFybHkgaWYgcHVsbGluZyBhIHRhZyBmYWlsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9wdWxsX3RhZyk6Ci0JICBFcnJvciBvdXQgZWFybHkgaWYgcHVsbGluZyBhIHRhZyBmYWlsZWQuCi0KLTIwMDgtMTAtMjcgMDk6MjU6MTEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDM2LzU3XSBnc3QvZmx2LzogSW4gcHVsbCBtb2RlIHdlIGNyZWF0ZSBvdXIgb3duIGluZGV4IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlIGFuZCBkb24ndCB1c2UgdGhlIGluZGV4IHByb3ZpZGVkIGJ5IHNvbWUgZmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X2NyZWF0ZV9pbmRleCksCi0JICAoZ3N0X2Zsdl9kZW11eF9sb29wKToKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV90YWdfc2NyaXB0KSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdGltZXN0YW1wKToKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5oOgotCSAgSW4gcHVsbCBtb2RlIHdlIGNyZWF0ZSBvdXIgb3duIGluZGV4IGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlCi0JICBhbmQgZG9uJ3QgdXNlIHRoZSBpbmRleCBwcm92aWRlZCBieSBzb21lIGZpbGVzICh3aGljaCBhcmUgbW9yZSB0aGFuCi0JICBvZnRlbiBpbmNvcnJlY3QgYW5kIGNhdXNlIGZhaWxlZCBzZWVrcykuCi0JICBGb3IgcHVzaCBtb2RlIHdlIHN0aWxsIHVzZSB0aGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIGZpbGUgYW5kIGV4dGVuZCBpdAotCSAgd2hpbGUgZG9pbmcgdGhlIHBsYXliYWNrLgotCi0yMDA4LTEwLTI3IDA5OjIwOjAxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzNS81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBJbnN0ZWFkIG9mIHVzaW5nIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCgpIHVzZSBhIHNtYWxsIGdzdF9wYWRfcHVzaF9ldmVudCgpIHdyYXBwZXIgdGhhdCBvbmx5IGRvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCksCi0JICAoZ3N0X2Zsdl9kZW11eF9sb29wKSwgKGdzdF9mbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVsbCksCi0JICAoZ3N0X2Zsdl9kZW11eF9zaW5rX2V2ZW50KToKLQkgIEluc3RlYWQgb2YgdXNpbmcgZ3N0X3BhZF9ldmVudF9kZWZhdWx0KCkgdXNlIGEgc21hbGwKLQkgIGdzdF9wYWRfcHVzaF9ldmVudCgpIHdyYXBwZXIgdGhhdCBvbmx5IGRvZXMgd2hhdCB3ZSB3YW50IGFuZCBpcyBtdWNoCi0JICBtb3JlIHNpbXBsZS4KLQotMjAwOC0xMC0yNyAwOToxNDo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMzQvNTddIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguKjogSWYgb3VyIGluZGV4IHdhcyBjcmVhdGVkIGJ5IHRoZSBlbGVtZW50IGFuZCBub3QgcHJvdmlkZWQgZnJvbSB0aGUgb3V0c2lkZSB3ZSBzaG91bGQgZGVzdHJveSBpdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfZmx2X2RlbXV4X3NldF9pbmRleCksIChnc3RfZmx2X2RlbXV4X2luaXQpOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICBJZiBvdXIgaW5kZXggd2FzIGNyZWF0ZWQgYnkgdGhlIGVsZW1lbnQgYW5kIG5vdCBwcm92aWRlZCBmcm9tIHRoZQotCSAgb3V0c2lkZSB3ZSBzaG91bGQgZGVzdHJveSBpdCB3aGVuIHN0YXJ0aW5nIGEgbmV3IHN0cmVhbSB0byBnZXQKLQkgIGFsbCBvbGQgZW50cmllcyByZW1vdmVkLgotCi0yMDA4LTEwLTI3IDA5OjEyOjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzMy81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBJbXByb3ZlIGRlYnVnZ2luZyBhIGJpdCB3aGVuIHB1bGxpbmcgYSBidWZmZXIgZnJvbSB1cHN0cmVhbSBmYWlscy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X3B1bGxfcmFuZ2UpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQgd2hlbiBwdWxsaW5nIGEgYnVmZmVyIGZyb20gdXBzdHJlYW0gZmFpbHMuCi0KLTIwMDgtMTAtMjcgMDk6MTA6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDMyLzU3XSBnc3QvZmx2LzogQ2xvc2UgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNlZ21lbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCBpbnN0ZWFkIG9mIHRoZSB0aHJlYWQgd2hlcmUgdGhlIHNlZWsgZXZlbnQgaXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X2NsZWFudXApLAotCSAgKGdzdF9mbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVsbCksIChnc3RfZmx2X2RlbXV4X2Rpc3Bvc2UpOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyk6Ci0JICBDbG9zZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgc2VnbWVudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkCi0JICBpbnN0ZWFkIG9mIHRoZSB0aHJlYWQgd2hlcmUgdGhlIHNlZWsgZXZlbnQgaXMgaGFuZGxlZC4KLQotMjAwOC0xMC0xNiAxNToyMToxNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMzEvNTddIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6IERvbid0IHNldCB2aWRlb19jb2RlYyB0byB0aGUgdmFsdWUgdGhhdCBhY3R1YWxseSBzaG91bGQgZ28gaW50byBhdWRpbyBjb2RlYywgb3RoZXJ3aXNlIHdlIGNyZWF0ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2bXV4LmM6IChnc3RfZmx2X211eF9hdWRpb19wYWRfc2V0Y2FwcyksCi0JICAoZ3N0X2Zsdl9tdXhfd3JpdGVfYnVmZmVyKToKLQkgIERvbid0IHNldCB2aWRlb19jb2RlYyB0byB0aGUgdmFsdWUgdGhhdCBhY3R1YWxseSBzaG91bGQgZ28KLQkgIGludG8gYXVkaW8gY29kZWMsIG90aGVyd2lzZSB3ZSBjcmVhdGUgaW52YWxpZCBmaWxlcy4KLQkgIEZpeGVzIGJ1ZyAjNTU2NTY0LgotCi0yMDA4LTEwLTEyIDE3OjA4OjEwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAzMC81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBGaXggcmVncmVzc2lvbiBvZiBoYW5kbGluZyBmbG93IHJldHVybnMgaW4gcHVsbCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpLAotCSAgKGdzdF9mbHZfZGVtdXhfcHVsbF9oZWFkZXIpOgotCSAgRml4IHJlZ3Jlc3Npb24gb2YgaGFuZGxpbmcgZmxvdyByZXR1cm5zIGluIHB1bGwgbW9kZS4KLQkgIEZpeGVzIGJ1ZyAjNTU2MDAzLgotCi0yMDA4LTEwLTEwIDE2OjMzOjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyOS81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBVc2UgZ3N0X3BhZF9hbGxvY19idWZmZXJfYW5kX3NldF9jYXBzKCkgdG8gbWFrZSBzdXJlIHdlIGdldCBhIGJ1ZmZlciB3aXRoIGNhcHMgdGhhdCB3ZSBjYW4gd29yLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKToKLQkgIFVzZSBnc3RfcGFkX2FsbG9jX2J1ZmZlcl9hbmRfc2V0X2NhcHMoKSB0byBtYWtlIHN1cmUgd2UgZ2V0Ci0JICBhIGJ1ZmZlciB3aXRoIGNhcHMgdGhhdCB3ZSBjYW4gd29yayB3aXRoIChpLmUuIHRoZSBwYWQncyBjYXBzKS4KLQkgIEFkZCBub24ta2V5ZnJhbWUgdmlkZW8gZnJhbWVzIHRvIHRoZSBpbmRleCB0b28gYnV0IHdpdGhvdXQgdGhlCi0JICBrZXlmcmFtZSBmbGFnLgotCSAgQWRkIGF1ZGlvIGZyYW1lcyB0byB0aGUgaW5kZXggb25seSBpZiB3ZSBoYXZlIG5vIHZpZGVvIHN0cmVhbS4KLQotMjAwOC0xMC0xMCAxNjoxNTowOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMjgvNTddIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogQ3JlYXRlIHBhZHMgZnJvbSB0aGUgcGFkIHRlbXBsYXRlcywgdXNlIGZpeGVkIGNhcHMgb24gdGhlbSBhbmQgb25seSBhY3RpdmF0ZSB0aGVtIGFmdGVyIHRoZSBjYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyk6Ci0JICBDcmVhdGUgcGFkcyBmcm9tIHRoZSBwYWQgdGVtcGxhdGVzLCB1c2UgZml4ZWQgY2FwcyBvbiB0aGVtCi0JICBhbmQgb25seSBhY3RpdmF0ZSB0aGVtIGFmdGVyIHRoZSBjYXBzIGFyZSBzZXQuCi0KLTIwMDgtMTAtMDkgMTY6MjA6MjYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDI3LzU3XSBnc3QvZmx2LzogR2V0IGFuIGFwcHJveGltYXRlIGR1cmF0aW9uIG9mIHRoZSBmaWxlIGJ5IGxvb2tpbmcgYXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCB0YWcgaW4gcHVsbCBtb2RlLiBJZiB3ZSBnZXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X2xvb3ApOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX3RhZ190aW1lc3RhbXApOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmg6Ci0JICBHZXQgYW4gYXBwcm94aW1hdGUgZHVyYXRpb24gb2YgdGhlIGZpbGUgYnkgbG9va2luZyBhdCB0aGUgdGltZXN0YW1wCi0JICBvZiB0aGUgbGFzdCB0YWcgaW4gcHVsbCBtb2RlLiBJZiB3ZSBnZXQgKG1heWJlIGJldHRlcikgZHVyYXRpb24gZnJvbQotCSAgbWV0YWRhdGEgbGF0ZXIgd2UnbGwgdXNlIHRoYXQgaW5zdGVhZC4KLQotMjAwOC0xMC0wOSAxNTo0MzowMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMjYvNTddIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogUmVmYWN0b3IgX3B1bGxfcmFuZ2UoKSBsb2dpYyB3aXRoIGNoZWNrcyBpbnRvIGEgc2VwZXJhdGUgZnVuY3Rpb24gdG8gbWFrZSB0aGluZ3MgYSBiaXQgbW9yZSByZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfcHVsbF9yYW5nZSksCi0JICAoZ3N0X2Zsdl9kZW11eF9wdWxsX3RhZyksIChnc3RfZmx2X2RlbXV4X3B1bGxfaGVhZGVyKToKLQkgIFJlZmFjdG9yIF9wdWxsX3JhbmdlKCkgbG9naWMgd2l0aCBjaGVja3MgaW50byBhIHNlcGVyYXRlIGZ1bmN0aW9uCi0JICB0byBtYWtlIHRoaW5ncyBhIGJpdCBtb3JlIHJlYWRhYmxlLgotCi0yMDA4LTEwLTA5IDE1OjI2OjU2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyNS81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBVc2UgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9jaGFpbiksCi0JICAoZ3N0X2Zsdl9kZW11eF9iYXNlX2luaXQpOgotCSAgVXNlIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSgpLgotCSAgSWYgd2UgZ2V0IEdTVF9GTE9XX05PVF9MSU5LRUQgaW4gdGhlIHBhcnNlIGxvb3AgYnV0IGF0IGxlYXN0Ci0JICBvbmUgb2YgdGhlIHBhZHMgaXMgbGlua2VkIGNvbnRpbnVlIHRoZSBsb29wLgotCi0yMDA4LTEwLTA5IDEwOjAwOjUxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyNC81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBDb3JyZWN0IGNhcHMgZm9yIHZpZGVvIGNvZGVjIGlkIDU6IEl0J3MgT24yIFZQNiB3aXRoIGFscGhhIGNoYW5uZWwgd2hpY2ggbmVlZHMgYSBkaWZmZXJlbnQgZGVjLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV9hdWRpb19uZWdvdGlhdGUpLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwgKGdzdF9mbHZfcGFyc2VfdmlkZW9fbmVnb3RpYXRlKToKLQkgIENvcnJlY3QgY2FwcyBmb3IgdmlkZW8gY29kZWMgaWQgNTogSXQncyBPbjIgVlA2IHdpdGggYWxwaGEgY2hhbm5lbAotCSAgd2hpY2ggbmVlZHMgYSBkaWZmZXJlbnQgZGVjb2RlciBhbmQgaGFzIGRpZmZlcmVudCBjYXBzLgotCSAgQWRkIHN1cHBvcnQgZm9yIGF1ZGlvIGNvZGVjIGlkIDE0LCB3aGljaCBpcyBNUDMgd2l0aCA4a0h6IHNhbXBsaW5nCi0JICByYXRlLgotCSAgRml4IGVuZGlhbm5lc3MgYW5kIHNpZ25lZG5lc3MgZm9yIHJhdyBhdWRpbyBjb2RlYyBpZHMuCi0JICBBZGQgc3VwcG9ydCBmb3IgYWxhdyBhbmQgbXVsYXcgYXVkaW8uCi0KLTIwMDgtMTAtMDkgMDk6NDg6NDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgW01PVkVEIEZST00gQkFEIDIzLzU3XSBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IEdvIG91dCBvZiB0aGUgcGFyc2UgbG9vcCBhcyBzb29uIGFzIHdlIGdldCBhbiBlcnJvciBpbnN0ZWFkIG9mIHBhcnNpbmcgdW50aWwgdGhlIEdzdEFkYXB0ZXIgaXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X2NoYWluKToKLQkgIEdvIG91dCBvZiB0aGUgcGFyc2UgbG9vcCBhcyBzb29uIGFzIHdlIGdldCBhbiBlcnJvciBpbnN0ZWFkCi0JICBvZiBwYXJzaW5nIHVudGlsIHRoZSBHc3RBZGFwdGVyIGlzIGVtcHR5LgotCSAgQWRkIHNvbWUgZXhwbGFuYXRpb25zIGFib3V0IHRoZSBoZWFkZXIgYW5kIHRhZyBzaXplLgotCSAgRG9uJ3QgcHJpbnQgc3luY2hyb25pemluZyBtZXNzYWdlIGlmIGV2ZXJ5dGhpbmcgaXMgZmluZS4KLQotMjAwOC0xMC0wOSAwOToyNjo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMjIvNTddIGdzdC9mbHYvOiBBZGQgZmlyc3QgdmVyc2lvbiBvZiBhIEZMViBtdXhlci4gVGhlIG9ubHkgbWlzc2luZyBmZWF0dXJlIGlzIHdyaXRpbmcgb2Ygc3RyZWFtIG1ldGFkYXRhLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2Zsdi9nc3RmbHZtdXguYzogKGdzdF9mbHZfbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X2Zsdl9tdXhfY2xhc3NfaW5pdCksIChnc3RfZmx2X211eF9pbml0KSwKLQkgIChnc3RfZmx2X211eF9maW5hbGl6ZSksIChnc3RfZmx2X211eF9yZXNldCksCi0JICAoZ3N0X2Zsdl9tdXhfaGFuZGxlX3NyY19ldmVudCksIChnc3RfZmx2X211eF9oYW5kbGVfc2lua19ldmVudCksCi0JICAoZ3N0X2Zsdl9tdXhfdmlkZW9fcGFkX3NldGNhcHMpLCAoZ3N0X2Zsdl9tdXhfYXVkaW9fcGFkX3NldGNhcHMpLAotCSAgKGdzdF9mbHZfbXV4X3JlcXVlc3RfbmV3X3BhZCksIChnc3RfZmx2X211eF9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X2Zsdl9tdXhfd3JpdGVfaGVhZGVyKSwgKGdzdF9mbHZfbXV4X3dyaXRlX2J1ZmZlciksCi0JICAoZ3N0X2Zsdl9tdXhfY29sbGVjdGVkKSwgKGdzdF9mbHZfbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2bXV4Lmg6Ci0JICBBZGQgZmlyc3QgdmVyc2lvbiBvZiBhIEZMViBtdXhlci4gVGhlIG9ubHkgbWlzc2luZyBmZWF0dXJlIGlzIHdyaXRpbmcKLQkgIG9mIHN0cmVhbSBtZXRhZGF0YS4KLQotMjAwOC0wNi0xMyAyMjo0Njo0MyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyMS81N10gZ3N0L2Zsdi86IEludHJvZHVjZSBkZW11eGluZyBzdXBwb3J0IGZvciBBQUMgYW5kCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMDYtMTQgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfY2xlYW51cCksCi0JICAoZ3N0X2Zsdl9kZW11eF9kaXNwb3NlKToKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX2F1ZGlvX25lZ290aWF0ZSksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLCAoZ3N0X2Zsdl9wYXJzZV92aWRlb19uZWdvdGlhdGUpLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKTogSW50cm9kdWNlIGRlbXV4aW5nIHN1cHBvcnQgZm9yIEFBQwotCSAgYW5kCi0JICBILjI2NC9BVkMgaW5zaWRlIEZMVi4KLQkgICogc3lzL2RzaG93ZGVjd3JhcHBlci9nc3Rkc2hvd2F1ZGlvZGVjLmM6Ci0JICAoZ3N0X2RzaG93YXVkaW9kZWNfaW5pdCksCi0JICAoZ3N0X2RzaG93YXVkaW9kZWNfY2hhaW4pLCAoZ3N0X2RzaG93YXVkaW9kZWNfcHVzaF9idWZmZXIpLAotCSAgKGdzdF9kc2hvd2F1ZGlvZGVjX3NpbmtfZXZlbnQpLCAoZ3N0X2RzaG93YXVkaW9kZWNfc2V0dXBfZ3JhcGgpOgotCSAgKiBzeXMvZHNob3dkZWN3cmFwcGVyL2dzdGRzaG93YXVkaW9kZWMuaDoKLQkgICogc3lzL2RzaG93ZGVjd3JhcHBlci9nc3Rkc2hvd3ZpZGVvZGVjLmM6Ci0JICAoZ3N0X2RzaG93dmlkZW9kZWNfaW5pdCksCi0JICAoZ3N0X2RzaG93dmlkZW9kZWNfc2lua19ldmVudCksIChnc3RfZHNob3d2aWRlb2RlY19jaGFpbiksCi0JICAoZ3N0X2RzaG93dmlkZW9kZWNfcHVzaF9idWZmZXIpLAotCSAgKGdzdF9kc2hvd3ZpZGVvZGVjX3NyY19nZXRjYXBzKToKLQkgICogc3lzL2RzaG93ZGVjd3JhcHBlci9nc3Rkc2hvd3ZpZGVvZGVjLmg6IExvdCBvZiByYW5kb20gZml4ZXMKLQkgIHRvIGltcHJvdmUgc3RhYmlsaXR5IChyZWYgY291bnRpbmcsIHNhZmV0eSBjaGVja3MuLi4pCi0KLTIwMDgtMDQtMjUgMDg6MDc6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAyMC81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBGb3J3YXJkIHVua25vd24gcXVlcmllcyB1cHN0cmVhbSBpbnN0ZWFkIG9mIHJldHVybmluZyBGQUxTRSBvbiB0aGVtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfcXVlcnkpOgotCSAgRm9yd2FyZCB1bmtub3duIHF1ZXJpZXMgdXBzdHJlYW0gaW5zdGVhZCBvZiByZXR1cm5pbmcgRkFMU0Ugb24gdGhlbS4KLQotMjAwOC0wNC0xMSAyMzoxOToyMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEIDE5LzU3XSBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IEhhbmRsZSBOVUxMIHJldHVybnMgZnJvbSBGTFZfR0VUX1NUUklORygpIG1vcmUgZ3JhY2VmdWxseS4gRml4ZXMgY3Jhc2ggY2F1c2VkIGJ5IGEgc3RybGVuIG9uIGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX21ldGFkYXRhX2l0ZW0pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3NjcmlwdCk6Ci0JICBIYW5kbGUgTlVMTCByZXR1cm5zIGZyb20gRkxWX0dFVF9TVFJJTkcoKSBtb3JlIGdyYWNlZnVsbHkuIEZpeGVzCi0JICBjcmFzaCBjYXVzZWQgYnkgYSBzdHJsZW4gb24gYSBOVUxMIHN0cmluZyAoIzUyNzYyMikuCi0KLTIwMDctMTItMTEgMTE6NTQ6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxOC81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBEb24ndCBzdHJkdXAgKGFuZCB0aHVzIGxlYWspIGNvZGVjIG5hbWUgc3RyaW5ncyB3aGVuIHBhc3NpbmcgdGhlbSB0byBnc3RfdGFnX2xpc3RfYWRkKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKToKLQkgIERvbid0IHN0cmR1cCAoYW5kIHRodXMgbGVhaykgY29kZWMgbmFtZSBzdHJpbmdzIHdoZW4gcGFzc2luZwotCSAgdGhlbSB0byBnc3RfdGFnX2xpc3RfYWRkKCkuCi0KLTIwMDctMTItMDkgMTk6Mzc6NTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxNy81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBGaXggbGlzdCBvZiBzdXBwb3J0ZWQgYW5kIGtub3duIGNvZGVjcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pOgotCSAgRml4IGxpc3Qgb2Ygc3VwcG9ydGVkIGFuZCBrbm93biBjb2RlY3MuCi0JICBFbWl0IHRhZyB3aXRoIHRoZSBjb2RlYyBuYW1lIHNvIGl0IGdldHMgcHJvcGVybHkgcmVwb3J0ZWQgaW4gdG90ZW0gYW5kCi0JICBvdGhlciBhcHBsaWNhdGlvbnMuCi0KLTIwMDctMTEtMjUgMTA6NDU6MDkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxNi81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBPdXRwdXQgc2VnbWVudCB3aXRoIHByb3BlciAnc3RvcCcgdmFsdWUsIG1ha2VzIGZsdmRlbXV4IDEwMCUgY29tcGF0aWJsZSB3aXRoIGdub25saW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKToKLQkgIE91dHB1dCBzZWdtZW50IHdpdGggcHJvcGVyICdzdG9wJyB2YWx1ZSwgbWFrZXMgZmx2ZGVtdXggMTAwJSBjb21wYXRpYmxlCi0JICB3aXRoIGdub25saW4uCi0KLTIwMDctMTEtMTIgMTk6MjI6MjQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxNS81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBBZGQgbWFwcGluZyBmb3IgTmVsbHltb3NlciBBU0FPIGF1ZGlvIGNvZGVjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgIEFkZCBtYXBwaW5nIGZvciBOZWxseW1vc2VyIEFTQU8gYXVkaW8gY29kZWMuCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLCAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pOiBNYWtlIHN1cmUgd2UKLQkgIGFjdHVhbGx5IGhhdmUgZGF0YSB0byByZWFkIGF0IHRoZSBlbmQgb2YgdGhlIHRhZy4gVGhpcyBhdm9pZHMgdHJ5aW5nCi0JICB0byBhbGxvY2F0ZSBuZWdhdGl2ZSBidWZmZXJzLgotCi0yMDA3LTEwLTIyIDE1OjQ1OjQ5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEIDE0LzU3XSBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IERvbid0IGVtaXQgbm8tbW9yZS1wYWRzIGZvciBzaW5nbGUgcGFkIHNjZW5hcmlvcyBhcyB0aGUgaGVhZGVyIGlzIGRlZmluaXRlbHkgbm90IHJlbGlhYmxlLiBXZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0xMC0yMiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pLCAoZ3N0X2Zsdl9wYXJzZV90YWdfdHlwZSk6IERvbid0Ci0JICBlbWl0IG5vLW1vcmUtcGFkcyBmb3Igc2luZ2xlIHBhZCBzY2VuYXJpb3MgYXMgdGhlIGhlYWRlcgotCSAgaXMgZGVmaW5pdGVseSBub3QgcmVsaWFibGUuIFdlIGVtaXQgdGhlbSBmb3IgMiBwYWRzIHNjZW5hcmlvcwotCSAgdGhvdWdoIHRvIHNwZWVkIHVwIG1lZGlhIGRpc2NvdmVyeS4KLQotMjAwNy0wOS0yNyAxMDowNjoyMyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMy81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBJIGdvdCBpdCB3cm9uZyBhZ2FpbiwgYXVkaW8gcmF0ZSB3YXMgbm90IGRldGVjdGVkIGNvcnJlY3RseSBpbiBhbGwgY2FzZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDktMjcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKTogSSBnb3QgaXQgd3JvbmcgYWdhaW4sIGF1ZGlvIHJhdGUKLQkgIHdhcyBub3QgZGV0ZWN0ZWQgY29ycmVjdGx5IGluIGFsbCBjYXNlcy4KLQotMjAwNy0wOS0yNiAxNjozMDo1MCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMi81N10gZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiBjb2RlY19kYXRhIGlzIG5lZWRlZCBmb3IgZXZlcnkgdGFnIG5vdCBqdXN0IHRoZSBmaXJzdCBvbmUuIChGaXggYSBzdHVwaWQgYnVnIGkgaW50cm9kdWNlZCB3aXRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDktMjYgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKTogY29kZWNfZGF0YSBpcyBuZWVkZWQgZm9yIGV2ZXJ5IHRhZwotCSAgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4gKEZpeCBhIHN0dXBpZCBidWcgaSBpbnRyb2R1Y2VkIHdpdGhvdXQKLQkgIHRlc3RpbmcpCi0KLTIwMDctMDktMjYgMTE6MTc6MDggKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMTEvNTddIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogRml4IGJpdCBtYXNrcyBvcGVyYXRpb25zIHRvIGJlIHN1cmUgd2UgZGV0ZWN0IHRoZSBjb2RlY190YWdzIGFuZCBzYW1wbGUgcmF0ZXMgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA5LTI2ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyk6IEZpeCBiaXQgbWFza3Mgb3BlcmF0aW9ucyB0byBiZQotCSAgc3VyZSB3ZSBkZXRlY3QgdGhlIGNvZGVjX3RhZ3MgYW5kIHNhbXBsZSByYXRlcyBjb3JyZWN0bHkuCi0JICBGaXggcmF3IGF1ZGlvIGNhcHMgZ2VuZXJhdGlvbi4KLQotMjAwNy0wOS0xMiAwODozODoyMiArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAxMC81N10gZ3N0LzogUHJpbnRmIGZvcm1hdCBmaXhlcyAoIzQ3NjEyOCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIGdzdC1saWJzL2dzdC9hcHAvZ3N0YXBwc2luay5jOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JICAqIGdzdC9zd2l0Y2gvZ3N0c3dpdGNoLmM6Ci0JICBQcmludGYgZm9ybWF0IGZpeGVzICgjNDc2MTI4KS4KLQotMjAwNy0wOC0yNyAxNDo1NjowNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOS81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBNYWtlIHN1cmUgd2UgaW5pdGlhbGl6ZSB0aGUgc2VlayByZXN1bHQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDgtMjcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdWxsKToKLQkgIE1ha2Ugc3VyZSB3ZSBpbml0aWFsaXplIHRoZSBzZWVrIHJlc3VsdC4KLQotMjAwNy0wOC0yNCAxNzowMzoxNSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwOC81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBSZW1vdmUgc29tZSB1c2VsZXNzIGlmZGVmLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA4LTI0ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfZmx1c2gpLAotCSAgKGdzdF9mbHZfZGVtdXhfY2hhaW4pLCAoZ3N0X2Zsdl9kZW11eF9wdWxsX3RhZyksCi0JICAoZ3N0X2Zsdl9kZW11eF9maW5kX29mZnNldCksIChnc3RfZmx2X2RlbXV4X2hhbmRsZV9zZWVrX3B1c2gpLAotCSAgKGdzdF9mbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVsbCksIChnc3RfZmx2X2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF9mbHZfZGVtdXhfc3JjX2V2ZW50KTogUmVtb3ZlIHNvbWUgdXNlbGVzcyBpZmRlZi4KLQotMjAwNy0wOC0yNCAxNTozMToyNiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNy81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBJbXBsZW1lbnQgc2Vla2luZyBpbiBwdXNoIG1vZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDgtMjQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9mbHVzaCksCi0JICAoZ3N0X2Zsdl9kZW11eF9jbGVhbnVwKSwgKGdzdF9mbHZfZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpLCAoZ3N0X2Zsdl9kZW11eF9maW5kX29mZnNldCksCi0JICAoZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdXNoKSwKLQkgIChnc3RfZmx2X2RlbXV4X2hhbmRsZV9zZWVrX3B1bGwpLAotCSAgKGdzdF9mbHZfZGVtdXhfc2lua19ldmVudCksIChnc3RfZmx2X2RlbXV4X3NyY19ldmVudCk6IEltcGxlbWVudAotCSAgc2Vla2luZyBpbiBwdXNoIG1vZGUuCi0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQotMjAwNy0wOC0yMiAxNDo1MDo1MSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNi81N10gZ3N0L2Zsdi86IEhhbmRsZSBwaXhlbCBhc3BlY3QgcmF0aW8gdGhyb3VnaCBtZXRhZGF0YSB0YWdzIGxpa2UgQVNGIGRvZXMuIEZsdWVuZG8gbXV4ZXIgc3VwcG9ydHMgdGhpcyBhbmQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wOC0yMiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X2NsZWFudXApLAotCSAgKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKGdzdF9mbHZfcGFyc2VfbWV0YWRhdGFfaXRlbSksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfc2NyaXB0KSwgKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ192aWRlbyk6IEhhbmRsZSBwaXhlbCBhc3BlY3QgcmF0aW8gdGhyb3VnaAotCSAgbWV0YWRhdGEgdGFncyBsaWtlIEFTRiBkb2VzLiBGbHVlbmRvIG11eGVyIHN1cHBvcnRzIHRoaXMgYW5kCi0JICBGbGFzaCBwbGF5ZXJzIGNhbiBzdXBwb3J0IGl0IGFzIHdlbGwgdGhpcyB3YXkuCi0KLTIwMDctMDgtMjIgMTQ6MDM6NDIgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBbTU9WRUQgRlJPTSBCQUQgMDUvNTddIGdzdC9mbHYvOiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IGZpbGxpbmcgdXAgdGhlIGluZGV4IGlmIG5vIHRpbWVzIG9iamVjdCB3YXMgcGFyc2VkLiBGaXggdGhlIHdheSB3ZSBkZWNpZGUgdG8gcHVzaCB0YS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA4LTIyICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChnc3RfZmx2X3BhcnNlX21ldGFkYXRhX2l0ZW0pLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX3NjcmlwdCksIChnc3RfZmx2X3BhcnNlX3RhZ19hdWRpbyksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pOiBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IGZpbGxpbmcgdXAgdGhlCi0JICBpbmRleCBpZiBubyB0aW1lcyBvYmplY3Qgd2FzIHBhcnNlZC4gRml4IHRoZSB3YXkgd2UgZGVjaWRlIHRvCi0JICBwdXNoCi0JICB0YWdzIGFuZCBlbWl0IG5vLW1vcmUtcGFkcy4gRml4IHNvbWUgcHJpbnRmIHR5cGluZyBpbiBkZWJ1Z2dpbmcuCi0KLTIwMDctMDgtMTQgMTQ6NTY6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwNC81N10gZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiBGaXggbG9ja2luZyBhbmQgcmVmY291bnRpbmcgb24gdGhlIGluZGV4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguYzogKGdzdF9mbHZfZGVtdXhfc2V0X2luZGV4KSwKLQkgIChnc3RfZmx2X2RlbXV4X2dldF9pbmRleCk6Ci0JICBGaXggbG9ja2luZyBhbmQgcmVmY291bnRpbmcgb24gdGhlIGluZGV4LgotCi0yMDA3LTA4LTE0IDE0OjIyOjA5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgW01PVkVEIEZST00gQkFEIDAzLzU3XSBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IEZpcnN0IG1ldGhvZCBmb3Igc2Vla2luZyBpbiBwdWxsIG1vZGUgdXNpbmcgdGhlIGluZGV4IGJ1aWx0IHN0ZXAgYnkgc3RlcCBvciBjb21pbmcgZnJvbSBtZXRhZGF0YS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wOC0xNCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4LmM6IChnc3RfZmx2X2RlbXV4X2NsZWFudXApLAotCSAgKGdzdF9mbHZfZGVtdXhfYWRhcHRlcl9mbHVzaCksIChnc3RfZmx2X2RlbXV4X2NoYWluKSwKLQkgIChnc3RfZmx2X2RlbXV4X3B1bGxfdGFnKSwgKGdzdF9mbHZfZGVtdXhfZG9fc2VlayksCi0JICAoZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2VlayksIChnc3RfZmx2X2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF9mbHZfZGVtdXhfc3JjX2V2ZW50KSwgKGdzdF9mbHZfZGVtdXhfcXVlcnkpLAotCSAgKGdzdF9mbHZfZGVtdXhfY2hhbmdlX3N0YXRlKSwgKGdzdF9mbHZfZGVtdXhfc2V0X2luZGV4KSwKLQkgIChnc3RfZmx2X2RlbXV4X2dldF9pbmRleCksIChnc3RfZmx2X2RlbXV4X2Rpc3Bvc2UpLAotCSAgKGdzdF9mbHZfZGVtdXhfY2xhc3NfaW5pdCk6IEZpcnN0IG1ldGhvZCBmb3Igc2Vla2luZyBpbiBwdWxsCi0JICBtb2RlIHVzaW5nIHRoZSBpbmRleCBidWlsdCBzdGVwIGJ5IHN0ZXAgb3IgY29taW5nIGZyb20gbWV0YWRhdGEuCi0JICAqIGdzdC9mbHYvZ3N0Zmx2ZGVtdXguaDoKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5jOiAoRkxWX0dFVF9TVFJJTkcpLAotCSAgKGdzdF9mbHZfcGFyc2VfbWV0YWRhdGFfaXRlbSksIChnc3RfZmx2X3BhcnNlX3RhZ19zY3JpcHQpLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKTogUGFyc2UKLQkgIG1vcmUgbWV0YWRhdGEgdHlwZXMgYW5kIGtleWZyYW1lcyBpbmRleC4KLQotMjAwNy0wNy0yNSAxMzoyOTowNCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMi81N10gZ3N0L2Zsdi86IEhhbmRsZSBub3QgbGlua2VkIHBhZHMsIHRyeSB0byBtYWtlIGl0IHJldXNhYmxlLCBtb3JlIHNhZmV0eSBjaGVja3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDctMjUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgIChnc3RfZmx2X2RlbXV4X2NoYWluKSwgKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpLAotCSAgKGdzdF9mbHZfZGVtdXhfY2hhbmdlX3N0YXRlKSwgKGdzdF9mbHZfZGVtdXhfZGlzcG9zZSksCi0JICAoZ3N0X2Zsdl9kZW11eF9pbml0KToKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5oOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6IChGTFZfR0VUX1NUUklORyksCi0JICAoZ3N0X2Zsdl9wYXJzZV9tZXRhZGF0YV9pdGVtKSwgKGdzdF9mbHZfcGFyc2VfdGFnX3NjcmlwdCksCi0JICAoZ3N0X2Zsdl9wYXJzZV90YWdfYXVkaW8pLCAoZ3N0X2Zsdl9wYXJzZV90YWdfdmlkZW8pLAotCSAgKGdzdF9mbHZfcGFyc2VfaGVhZGVyKToKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5oOiBIYW5kbGUgbm90IGxpbmtlZCBwYWRzLCB0cnkgdG8gbWFrZSBpdAotCSAgcmV1c2FibGUsIG1vcmUgc2FmZXR5IGNoZWNrcy4KLQotMjAwNy0wNy0xOSAxNTowNTozMCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFtNT1ZFRCBGUk9NIEJBRCAwMS81N10gQWRkcyBhIGZpcnN0IGRyYWZ0IG9mIGFuIEZMViBkZW11eGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA3LTE5ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2Zsdi9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOiAoZ3N0X2Zsdl9kZW11eF9mbHVzaCksCi0JICAoZ3N0X2Zsdl9kZW11eF9jbGVhbnVwKSwgKGdzdF9mbHZfZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9mbHZfZGVtdXhfcHVsbF90YWcpLCAoZ3N0X2Zsdl9kZW11eF9wdWxsX2hlYWRlciksCi0JICAoZ3N0X2Zsdl9kZW11eF9zZWVrX3RvX3ByZXZfa2V5ZnJhbWUpLCAoZ3N0X2Zsdl9kZW11eF9sb29wKSwKLQkgIChnc3RfZmx2X2RlbXV4X3NpbmtfYWN0aXZhdGUpLAotCSAgKGdzdF9mbHZfZGVtdXhfc2lua19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfZmx2X2RlbXV4X3NpbmtfYWN0aXZhdGVfcHVsbCksIChnc3RfZmx2X2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF9mbHZfZGVtdXhfY2hhbmdlX3N0YXRlKSwgKGdzdF9mbHZfZGVtdXhfZGlzcG9zZSksCi0JICAoZ3N0X2Zsdl9kZW11eF9iYXNlX2luaXQpLCAoZ3N0X2Zsdl9kZW11eF9jbGFzc19pbml0KSwKLQkgIChnc3RfZmx2X2RlbXV4X2luaXQpLCAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZmx2L2dzdGZsdmRlbXV4Lmg6Ci0JICAqIGdzdC9mbHYvZ3N0Zmx2cGFyc2UuYzogKEZMVl9HRVRfQkVVSTI0KSwgKEZMVl9HRVRfU1RSSU5HKSwKLQkgIChnc3RfZmx2X2RlbXV4X3F1ZXJ5X3R5cGVzKSwgKGdzdF9mbHZfZGVtdXhfcXVlcnkpLAotCSAgKGdzdF9mbHZfcGFyc2VfbWV0YWRhdGFfaXRlbSksIChnc3RfZmx2X3BhcnNlX3RhZ19zY3JpcHQpLAotCSAgKGdzdF9mbHZfcGFyc2VfdGFnX2F1ZGlvKSwgKGdzdF9mbHZfcGFyc2VfdGFnX3ZpZGVvKSwKLQkgIChnc3RfZmx2X3BhcnNlX3RhZ190eXBlKSwgKGdzdF9mbHZfcGFyc2VfaGVhZGVyKToKLQkgICogZ3N0L2Zsdi9nc3RmbHZwYXJzZS5oOiBBZGRzIGEgZmlyc3QgZHJhZnQgb2YgYW4gRkxWIGRlbXV4ZXIuCi0JICBJdCBkb2VzIG5vdCBkbyBzZWVraW5nIHlldCwgaXQgc3VwcG9ydHMgcHVsbCBhbmQgcHVzaCBtb2RlIHNvCi0JICBZRVMKLQkgIHlvdSBjYW4gdXNlIGl0IHRvIHBsYXkgeW91dHViZSB2aWRlb3MgZGlyZWN0bHkgZnJvbSBhbiBIVFRQIHVyaS4KLQkgIE5vdCBzbyBtdWNoIHRlc3RpbmcgZG9uZSB5ZXQgYnV0IGl0IHBhcnNlcyBtZXRhZGF0YSwgcmVwbHkgdG8KLQkgIGR1cmF0aW9uIHF1ZXJpZXMsIGV0Yy4uLgotCi0yMDA5LTA1LTEyIDEzOjAwOjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgIHJ0cDogTGluayB0byAtbG0KLQkgIEZpeGVzIGJ1ZyAjNTgyMjgxLgotCi0yMDA5LTA1LTEyIDExOjE2OjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOgotCSAgcmdhbmFseXNpczogUmVtb3ZlIGludmFsaWQgdW5pdCB0ZXN0Ci0JICBUaGUgdGVzdCBjcmVhdGVzIGJ1ZmZlcnMgd2l0aCBub24tc2lsZW5jZSwgc2V0cyB0aGUgR0FQCi0JICBmbGFnIG9uIGl0IGFuZCBleHBlY3RzIHJnYW5hbHlzaXMgdG8gaWdub3JlIHRoZSBjb250ZW50IGFuZCBhc3N1bWUgc2lsZW5jZS4KLQkgIFRoYXQncyBub3QgdGhlIHdheSBob3cgR0FQIGJ1ZmZlcnMgc2hvdWxkIGJlIHVzZWQsIGlmIHRoZSBHQVAgZmxhZyBpcyBzZXQKLQkgIGVsZW1lbnRzICpjYW4qIGFzc3VtZSB0aGF0IHRoZXkgb25seSBjb250YWluIHNpbGVuY2UgYnV0IHRoZXkncmUgbm90ICpyZXF1aXJlZCoKLQkgIHRvIGFzc3VtZSB0aGF0LiBUaGUgR0FQIGZsYWcgbXVzdCBvbmx5IGJlIHNldCBvbiBzaWxlbmNlIGJ1ZmZlcnMuCi0JICBGaXhlcyBidWcgIzU4MjI1Mi4KLQotMjAwOS0wNS0xMiAwMDo0ODo0OSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgMC4xMC4xNC4yIHByZS1yZWxlYXNlCi0KLTIwMDktMDUtMTEgMjM6MTM6MjAgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW06Ci0JICBjaGVja3M6IGRpc3QgaWQzLTU3NzQ2OC11bnN5bmNlZC10YWcudGFnIHRlc3QgZmlsZQotCi0yMDA5LTA1LTExIDIxOjAyOjI3ICswMjAwICBUcmlzdGFuIE1hdHRoZXdzIDxsZS5idXNpbmVzc21hbiBhdCBnbWFpbC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBpbml0aWFsaXplIHZhcmlhYmxlIHRvIDAKLQkgIEZpeGVzICM1ODIyMTguCi0KLTIwMDktMDUtMTEgMTg6MjE6MTMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIG1hdHJvc2thZGVtdXg6IE9ubHkgc2VhcmNoIGZvciB0aGUgaW5kZXggZW50cnkgb25jZQotCi0yMDA5LTA1LTExIDE4OjE4OjM2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBVc2UgdGhlIGZpcnN0IGluZGV4IGVudHJ5IGlmIGl0J3MgYWZ0ZXIgdGhlIHNlZWsgcG9zaXRpb24KLQotMjAwOS0wNS0xMSAxODoxNToyMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBVc2UgdGhlIGZpcnN0IGVudHJ5IGZvciBhIGdpdmVuIHN0cmVhbSBpZiB0aGUgZmlyc3QgZW50cnkgaXMgYWZ0ZXIgdGhlIHNlZWsgcG9zaXRpb24KLQotMjAwOS0wNS0xMSAxNjo1MDo0OCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBVc2UgYmluYXJ5IHNlYXJjaCBmb3IgZmluZGluZyB0aGUgcmVxdWVzdGVkIGluZGV4IGVudHJ5IHdoZW4gc2Vla2luZwotCi0yMDA5LTA1LTExIDE1OjM2OjQ2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBtYXRyb3NrYWRlbXV4OiBJbXByb3ZlL29wdGltaXplIHNlZWtpbmcKLQkgIEZpcnN0IG9mIGFsbCBhIGtleWZyYW1lIHNlZWsgc2hvdWxkIGJlIGRvbmUgdG8gdGhlCi0JICBrZXlmcmFtZSByaWdodCBiZWZvcmUgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiBhbmQgbm90Ci0JICB0byB0aGUga2V5ZnJhbWUgdGhhdCBpcyBuZWFyZXN0IHRvIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24uCi0JICBVc2UgcGVyIHRyYWNrIGluZGV4IGFycmF5cyBhbmQgdXNlIG91ciBuZXcgYmluYXJ5IHNlYXJjaCBmdW5jdGlvbgotCSAgZnJvbSBjb3JlIHRvIHNwZWVkIHVwIHRoZSBzZWFyY2guCi0KLTIwMDktMDUtMTEgMTU6MzY6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBSZXF1aXJlIHJlbGVhc2VkIHZlcnNpb25zIG9mIGNvcmUvYmFzZQotCi0yMDA5LTA1LTExIDEwOjE1OjAwICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBnZGtwaXhidWY6IFVzZSB0aGUgbGlicyBhbmQgY2ZsYWdzIG9mIGdkayBwaXhidWYgaW5zdGVhZCBvZiBndGsKLQkgIFRoaXMgZml4ZXMgdGhlIGJ1aWxkIGlmIGdkay1waXhidWYgaXMgZm91bmQgYnV0IGd0ayBpc24ndAotCi0yMDA5LTA1LTExIDA5OjU4OjQ4ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQWx3YXlzIGRlZmluZSB0aGUgY29uZGl0aW9uYWwgSEFWRV9HVEsgdG8gZml4IGNvbmZpZ3VyZSBpbiBzb21lIGNhc2VzCi0KLTIwMDktMDUtMTAgMTE6MTc6MjMgKzAyMDAgIE1hcmMtQW5kcmUgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KLQotCSogYXV0b2dlbi5zaDoKLQkgIFJ1biBsaWJ0b29saXplIGJlZm9yZSBhY2xvY2FsCi0JICBUaGlzIHVuYnJlYWtzIHRoZSBidWlsZCBpbiBzb21lIGNhc2VzLiBGaXhlcyBidWcgIzU4MjAyMQotCi0yMDA5LTA1LTA5IDEwOjUwOjQ1IC0wNzAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYTogZml4IHByaW50ZiBmb3JtYXQgdG8gYWdyZWUgd2l0aCBhcmd1bWVudAotCi0yMDA5LTA1LTA4IDE5OjQyOjEwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6Ci0JICByYXcxMzk0OiBpbmNsdWRlIHN0ZGxpYi5oIGZvciBzdHJ0b2woKQotCSAgRml4ZXMgY29tcGlsZXIgd2FybmluZyB3aGVuIGNvbXBpbGluZyB3aXRoIHhtbCBzdHVmZiBpbiBjb3JlIGRpc2FibGVkLgotCi0yMDA5LTA1LTA4IDE2OjQwOjU3ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBBY3R1YWxseSBvdXRwdXQgdGhlIHBlbmRpbmcgYnVmZmVyLi4gYW5kIG5vdCBhIGJsYW5rIG9uZS4KLQkgIEl0IHdhcyBwcmV2aW91c2x5IHNlbmRpbmcgdGhlIGJvZ3VzIGJ1ZmZlciB3aGljaCB3YXMgcmV0dXJuZWQgZnJvbQotCSAgdGhlIGJ1ZmZlcmFsbG9jIChyZXF1aXJlZCBmb3IgcmV2ZXJzZSBuZWdvdGlhdGlvbiBhcHBhcmVudGx5KSBpbnN0ZWFkCi0JICBvZiB0aGUgcGVuZGluZyBidWZmZXIuCi0KLTIwMDktMDUtMDggMTI6MDA6NTcgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgc291cGh0dHBzcmM6IEFsbG93IG5vbi1zdHJpbmcgZmllbGRzIGluIHRoZSBleHRyYS1oZWFkZXJzIHByb3BlcnR5Ci0KLTIwMDktMDUtMDggMTE6MzU6MDIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5oOgotCSAgcnRqMmtkZXBheTogYWRkIGJhc2ljIEpQRUcgMjAwMCBkZXBheWxvYWRlcgotCi0yMDA5LTA1LTA4IDExOjMxOjAyICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSAgcnRwajJrcGF5OiBzZXQgbWFya2VyIGJpdCBjb3JyZWN0bHkKLQotMjAwOS0wNS0wOCAxMToyOTowNCArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgc291cGh0dHBzcmM6IEFkZCBzdXBwb3J0IGZvciBleHRyYS1oZWFkZXJzIGFwcGVuZGVkIHRvIHRoZSBIVFRQIHJlcXVlc3QKLQkgIFRoaXMgYWxsb3dzIHRvIHNldCB0aGUgUmVmZXJlciBoZWFkZXIgYW1vbmcgb3RoZXIgdGhpbmdzIGJ5Ci0JICBhZGRpbmcgYSAiZXh0cmEtaGVhZGVycyIgcHJvcGVydHkgdGhhdCB0YWtlcyBhIEdzdFN0cnVjdHVyZQotCSAgd2l0aCBmaWVsZD1zdHJpbmcgcGFpcnMuCi0JICBGaXhlcyBidWcgIzU4MTgwNi4KLQotMjAwOS0wNS0wOCAxMDozODo0MiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGoya3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBqMmtwYXkuaDoKLQkgIHJ0cGoya3BheTogYWRkIGEgc2ltcGxlIEpQRUcgMjAwMCBwYXlsb2FkZXIKLQotMjAwOS0wNS0wOCAxMDozMToxMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiB3ZSBvbmx5IG5lZWQgdG8gc3dhcCBiaXRzIG9uIExFCi0KLTIwMDktMDUtMDcgMTg6MTA6MDggKzAxMDAgIENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuLnNjaGFsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmcuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleC5jOgotCSogZ3N0L2F2aS9nc3RhdmkuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIEFkZCBSQU5LUyBmb3IgdmFyaW91cyBlbmNvZGVycyBhbmQgbXV4ZXJzCi0KLTIwMDktMDUtMDcgMTc6MDk6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogYWRkIHNvbWUgZGVidWdnaW5nCi0KLTIwMDktMDUtMDcgMTU6NTg6NDMgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogcGFyc2UgeGlwaCBoZWFkZXJzIGxlbmd0aCBjb3JyZWN0bHkKLQkgIFNlZSAjNTgwOTgwCi0KLTIwMDktMDUtMDcgMTY6MjU6NDEgKzAyMDAgIEdhYnJpZWwgQm91dmlnbmUgPGJvdXZpZ25lQG1wMy10ZWNoLm9yZz4KLQotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jOgotCSogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5oOgotCSogZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jOgotCSogZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5oOgotCSAgcmdhbmFseXNpczogQWRkIGFiaWxpdHkgdG8gcG9zdCBsZXZlbCBtZXNzYWdlcwotCSAgRml4ZXMgYnVnICM1ODE1NjguCi0KLTIwMDktMDUtMDYgMjM6NTY6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5jOgotCSAgcnRwanBlZ3BheTogcmVmdXNlIHNvbWUgdW5zdXBwb3J0ZWQganBlZyBmb3JtYXRzCi0KLTIwMDktMDUtMDYgMTg6MDY6NDkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBydHB0aGVvcmFwYXk6IGZpeCBkZXNjcmlwdGlvbgotCi0yMDA5LTA1LTA2IDE2OjA5OjEzICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkgIHJ0cGpwZWdwYXk6IHJld3JpdGUgcXVhbnQgdGFibGUgaGFuZGxpbmcKLQkgIFJld3JpdGUgdGhlIHF1YW50IHRhYmxlIHBhcnNpbmcgdG8gYWxzbyBoYW5kbGUgbXVsdGlwbGUgdGFibGVzIGluIG9uZSBKUEVHIEhEUQotCSAgc2VnbWVudC4KLQkgIEhhbmRsZSBtb3JlIGpwZWcgdHlwZXMgYnkga2VlcGluZyB0cmFjayBvZiB0aGUgdGFibGVzIHVzZWQgcGVyIGNvbXBvbmVudCBhbmQKLQkgIHB1dHRpbmcgdGhlIHVzZWQgb25lcyBpbiB0aGUgcXVhbnQgaGVhZGVycy4KLQotMjAwOS0wNC0xOCAxNzoyMzo1MSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDN2Mm11eC5jOgotCSAgaWQzdjJtdXg6IE1ha2UgdGhlIHRlc3QgZmFpbHVyZSBzbGlnaHRseSBtb3JlIGluZm9ybWF0aXZlCi0KLTIwMDktMDQtMjAgMTg6MzM6MDkgKzAxMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhYzogTWFrZSBidWZmZXJzIGNyZWF0ZWQgZHVyaW5nIHNlZWsgYWN0IGxpa2Ugbm9ybWFsIGJ1ZmZlcnMuCi0JICBTdG9yZSB0aGUgb2Zmc2V0IGFuZCBjYXBzIHdoZW4gYWxsb2NhdGluZyBhIGJ1ZmZlciBkdXJpbmcgc2Vla2luZywgYW5kIHRoZW4KLQkgIGFsbG9jYXRlIGEgbmV3IGJ1ZmZlciB3aXRoIGJ1ZmZlcl9hbGxvYyBiZWZvcmUgd2UgcHVzaCBpdCBvdXQuIFRoaXMgZW5zdXJlcwotCSAgdGhhdCBpbiBhbGwgcmVzcGVjdHMgdGhlIGZpcnN0IGJ1ZmZlciBkZWNvZGVkIGR1cmluZyBzZWVraW5nIGJlaGF2ZXMgbGlrZQotCSAgYWxsIG90aGVyIGJ1ZmZlcnMsIGluY2x1ZGluZyBhbGxvd2luZyBkb3duc3RyZWFtIHJlLW5lZ290aWF0aW9uLgotCi0yMDA5LTA0LTE4IDE4OjAwOjU0ICswMjAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZmxhY2RlYzogZG9uJ3QgdXNlIHBhZF9hbGxvYyB3aGVuIGRlY29kaW5nIHdoaWxlIHNlZWtpbmcuIEZpeGVzICM1Nzk0MjIKLQotMjAwOS0wNS0wNiAxMzoyMjo1MSArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBqcGVnZGVjOiByZWZhY3RvcmVkIGdzdF9qcGVnX2RlY19wYXJzZV9pbWFnZV9kYXRhCi0JICBGaXhlcyAjNTc5ODA4Ci0KLTIwMDktMDUtMDYgMTM6MTE6NTMgKzAyMDAgIEFybm91dCBWYW5kZWNhcHBlbGxlIDxhcm5vdXRAbWluZC5iZT4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogc3VwcG9ydCBhZGRpdGlvbmFsIDB4ZmYgYmVmb3JlIGVuZCBtYXJrZXIuCi0JICBKUEVHIG1hcmtlcnMgbWF5IGJlIHByZWNlZGVkIGJ5IGFkZGl0aW9uYWwgMHhmZi4gIGpwZWdkZWMgc2hvdWxkCi0JICBza2lwIG92ZXIgdGhlc2UsIGV2ZW4gYmVmb3JlIHRoZSBlbmQgbWFya2VyLgotCSAgU2VlICM1Nzk4MDgKLQotMjAwOS0wNS0wNiAxMjo1NDoyMiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBydHBqcGVncGF5OiBoYW5kbGUgaW5wdXQgd2l0aCAxIHF1YW50IHRhYmxlCi0JICBBbHNvIGhhbmRsZSBpbnB1dCB3aXRoIGp1c3Qgb25lIHF1YW50IHRhYmxlLCBzaW1wbHkgZHVwbGljYXRlIHRoZSBxdWFudCB0YWJsZS4KLQkgIEhhbmRsZSBpbnZhbGlkIFNPRiBjb3JyZWN0bHkgYW5kIHNvbWUgc21hbGwgY2xlYW51cHMuCi0JICBGaXhlcyAjNTc4MjU3Ci0KLTIwMDktMDQtMjkgMTU6NTg6MTAgKzAzMDAgIE1hcmNvIEJhbGxlc2lvIDxtYXJjby5iYWxsZXNpb0Bub2tpYS5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGZpeCBieXRlIG9yZGVyIHN3YXBwaW5nIGluIDNHUFAgY2xhc3NpZmljYXRpb24gZW50aXR5IHRhZwotCSAgRml4ZXMgIzU4MDc0Ni4KLQotMjAwOS0wNS0wNSAxNzowNzoxMyArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICBtdWx0aXBhcnRkZW11eDogYXZvaWQgcmVhZGluZyBmcm9tIGluYXZsaWQgbWVtb3J5Ci0JICBSZWFkIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGluY29tbWluZyBidWZmZXIgYmVmb3JlIHdlIHB1c2ggaXQgaW4gdGhlIGFkYXB0ZXIgYW5kCi0JICBmbHVzaCBpdCBvdXQgYWdhaW4gYXMgdGhlIGJ1ZmZlciBtaWdodCBiZSB1bnJlZmZlZCB0aGVuIGFuZCB3ZSByZWFkIGZyb20gaW52YWxpZAotCSAgbWVtb3J5LgotCSAgRml4ZXMgIzU4MTQ0NC4KLQotMjAwOS0wNS0wNSAxNzowMzoyOSArMDIwMCAgQXJub3V0IFZhbmRlY2FwcGVsbGUgPGFybm91dEBtaW5kLmJlPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICBtdWx0aXBhcnRkZW11eDogZG9uJ3QgbGVhayBkeW5hbWljIHBhZHMKLQkgIEZyZWUgdGhlIGR5bmFtaWMgcGFkcyBkYXRhIGluIGZpbmFsaXplLgotCSAgRml4ZXMgIzU4MTQzMgotCi0yMDA5LTA1LTA1IDE2OjMyOjE3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ3BheS5oOgotCSAgcnRwanBlZ3BheTogY29ycmVjdGx5IHNldCB0aGUgdHlwZSBoZWFkZXIKLQkgIERvbid0IHJlcXVpcmUgd2lkdGgvaGVpZ2h0IG9uIHRoZSBjYXBzLiBVc2UgdGhlIFNPRiBoZWFkZXIgdG8gZmluZCB3aWR0aC9oZWlnaHQKLQkgIGFuZCBmYWxsIGJhY2sgdG8gdGhlIGNhcHMgaWYgdGhlcmUgaXMgbm8gU09GLiBBbHNvIHVzZSB0aGUgU09GIGluZm8gdG8gZmluZCB0aGUKLQkgIHN1YnNhbXBsaW5nIGFuZCBxdWFudGl6YXRpb24gdGFibGVzIHVzZWQuIFRoaXMgYWxsb3dzIHVzIHRvIHNldCB0aGUgcmlnaHQgdHlwZQotCSAgdmFsdWUgaW4gdGhlIEpQRUcgcnRwIGhlYWRlci4KLQkgIERlcHJlY2F0ZSB0aGUgcXVhbGl0eSBwcm9wZXJ0eSwgaXQncyB1bnVzZWQgbm93IGFuZCBpdCB3YXMgdXNlZCB3cm9uZ2x5IGJlZm9yZS4KLQkgIEFsd2F5cyBzZW5kIGZ1bGwgcXVhbnQgdGFibGVzIGZvciBub3cgdW50aWwgd2UgaGF2ZSBzb21lIGNvZGUgdG8gZGV0ZWN0IGRlZmF1bHQKLQkgIG9uZXMuCi0JICBGaXhlcyAjNTgwODgwCi0KLTIwMDktMDUtMDUgMTY6Mjg6NDQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5oOgotCSAgcnRwanBlZ2RlcGF5OiB1c2Ugd2lkdGgvaGVpZ2h0IGZyb20gcGF5bG9hZAotCSAgVXNlIHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBmcm9tIHRoZSBwYXlsb2FkIGhlYWRlcnMgYW5kIHNldCB0aGVtIG9uIHRoZQotCSAgb3V0cHV0IGNhcHMgZm9yIGFkZGVkIGF3ZXNvbWVuZXNzLgotCSAgRml4IHF1YW50IHBhcnNpbmcsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHR5cGUgaW4gdGhlIGxvd2VyIDYgYml0cy4KLQkgIEFkZCBmaXJzdCBiaXRzIG9mIGNhY2hpbmcgcXVhbnRpemF0aW9uIHRhYmxlcy4KLQotMjAwOS0wNS0wNSAxNjoyNDoxNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogc2V0IGNvbG9yc3BhY2UgYmVmb3JlIF9zZXRfZGVmYXVsdHMoKQotCSAgVGhlIGxpYmpwZWcgYXBpIHNheXMgdGhhdCB3ZSBuZWVkIHRvIHNldCB0aGUgY29sb3JzcGFjZSBiZWZvcmUgd2UgY2FsbAotCSAgX3NldF9kZWZhdWx0cygpLiBJbmRlZWQsIGlmIHdlIGRvbid0IGRvIHRoYXQgd2UgZW5kIHVwIHdpdGggc29tZSB2ZXJ5IGZyZWFreQotCSAgbm9uLXN0YW5kYXJkIHF1YW50IHRhYmxlIGFuZCBodWZmbWFuIHRhYmxlIGluZGV4ZXMuCi0KLTIwMDktMDUtMDUgMTM6MTk6MTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBkb24ndCBidWlsZCBleGFtcGxlcyBpZiAtLWRpc2FibGUtZXhhbXBsZXMgd2FzIHBhc3NlZCB0byBjb25maWd1cmUKLQotMjAwOS0wNS0wNSAxMjozMzo1NyArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZTogY2xlYW4gdXAgbWVzcyBhcm91bmQgZ3RrKyBjaGVja2luZwotCSAgQW5kIGRvbid0IGNoZWNrIGZvciBndGsrIHdoZW4gaXQncyBub3QgbmVlZGVkIChpZS4gaWYgZXhhbXBsZXMgYXJlIGRpc2FibGVkKQotCi0yMDA5LTA1LTA1IDEyOjI3OjIxICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5oOgotCSAgY29uZmlndXJlOiBtYWtlIGdkay1waXhidWYgcGx1Z2luIGRlcGVuZCBvbmx5IG9uIGdkay1waXhidWYsIG5vdCBndGsrCi0KLTIwMDktMDUtMDQgMTg6NTU6MTIgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IEZpeCBmaW5kX3N0cmVhbV9ieV8qIGZ1bmN0aW9ucwotCSAgRml4IHZhcmlvdXMgdmVyc2lvbiBvZiBmaW5kX3N0cmVhbV9ieV8qIGJ5IG5vdCB0cnlpbmcgdG8gY29udmVydCBhbiBpbnQgdG8gYQotCSAgcG9pbnRlciBhbmQgdmljZSB2ZXJzYSwgZm9yIHBvcnRhYmlsaXR5IHJlYXNvbnMuCi0JICBGaXhlcyAjNTgxMzMzCi0KLTIwMDktMDUtMDQgMTg6MzI6MDUgKzAyMDAgIENocmlzIFdpbnRlciA8ZWx3aW50cm8gYXQgZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggZHVtbXkgbmF0IHBhY2tldCBsb2dpYwotCSAgRml4IGEgdHlwbyBpbiB0aGUgZHVtbXkgTkFUIHBhY2tldCBzZW5kaW5nIGNvZGUuCi0JICBGaXhlcyAjNTgxMzI5Ci0KLTIwMDktMDQtMzAgMTA6MjQ6MjcgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhdm9pZCBlcnJvcnMgYWZ0ZXIgc2VydmVyIGVvZgotCSAgU2VydmVyIGVvZiAoZS5nLiBjb25uZWN0aW9uIGNsb3NlZCkgaXMgYW5ub3VuY2VkIGFzIGNvbm5lY3Rpb24gY2xvc2VkLAotCSAgc28gYmV0dGVyIHJlY29yZCBzdGF0ZSBhbmQgYWN0IGFjY29yZGluZ2x5IHRvIHByZXZlbnQgKHJlYWQvd3JpdGUpCi0JICBlcnJvcnMgZHVyaW5nIHN1YnNlcXVlbnQgdGVhcmRvd24vY2xlYW51cCBzZXF1ZW5jZXMuICAjRml4ZXMgNTgwODUxLihjKS4KLQotMjAwOS0wNC0zMCAxMDoxOToyNyArMDIwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFsc28gc2V0IGJhc2VfdGltZSBvbiBzcmMgYWZ0ZXIgZmx1c2gKLQkgIHRpbWVzdGFtcHMgZm9sbG93aW5nIGZsdXNoL3NlZWsgc2hvdWxkIGJlIGNvbnNpc3RlbnQgYmV0d2VlbgotCSAgVURQIGFuZCBUQ1AgaW50ZXJsZWF2ZWQgY2FzZS4gIEZpeGVzICM1ODA4NTEuKGIpLgotCi0yMDA5LTA0LTMwIDEwOjE3OjIzICswMjAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogc2FuaXR5IGNoZWNrcyBvbiByYW5nZSBpbmZvCi0JICBBIG1heCByYW5nZSB0aGF0IG92ZXJmbG93cyBzaG91bGQgbm90IGJlIHRydXN0ZWQsCi0JICBub3Igc2hvdWxkIGEgbWF4IHJhbmdlIHRoYXQgZXF1YWxzIHRoZSBtaW4gcmFuZ2UuCi0JICBGaXhlcyAjNTgwODUxLihhKS4KLQotMjAwOS0wNS0wNCAxNjoxNjo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogdXNlIFNLSVAgZmxhZyB0byB1c2UgU0NBTEUgaGVhZGVycwotCSAgV2UgY2FuIHVzZSB0aGUgU0tJUCBzZWVrIGZsYWcgdG8gaW5zdHJ1Y3QgdGhlIHNlcnZlciB0byBzZW5kIGRhdGEgZmFzdGVyIHRoZW4KLQkgIG5vcm1hbCBidXQgd2l0aCB0aGUgc2FtZSBiYW5kd2lkdGguCi0JICBGaXhlcyAjNTM3NjA5Ci0KLTIwMDktMDUtMDQgMTQ6MTk6MjIgKzAyMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvLmRAZ21haWwuY29tPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkgIHNwZWV4ZGVjOiBtYWtlIHNwZWV4X2RlY19jb252ZXJ0IHdvcmsgd2l0aCBzYW1lLWZvcm1hdCB2YWx1ZXMgd2hlbiBubyBkYXRhIGhhcyBiZWVuIGRlY29kZWQuCi0KLTIwMDktMDUtMDQgMTI6NDM6NDIgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjOiBJbXBsZW1lbnQgcHJlc2V0IGludGVyZmFjZQotCi0yMDA5LTA1LTA0IDEyOjQxOjU2ICswMjAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBzcGVleDogSW1wbGVtZW50IHByZXNldCBpbnRlcmZhY2UKLQotMjAwOS0wNS0wNCAxMjo0MDoxMiArMDIwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzoKLQkgIHdhdnBhY2s6IEltcGxlbWVudCBwcmVzZXQgaW50ZXJmYWNlCi0KLTIwMDktMDUtMDQgMTI6MzU6MTkgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHVzZSBiaW5hcnkgc2VhcmNoIGZvciBpbmRleAotCSAgVXNlIHRoZSBuZXcgYmluYXJ5IHNlYXJjaCBtZXRob2QgZm9yIGZpbmRpbmcgdGhlIHJpZ2h0IGluZGV4IGVudHJ5IGZhc3Rlci4KLQotMjAwOS0wNS0wNCAxMToyNjo1NiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICB2aWRlb2JveDogZHJhdyB0aGUgY29tcGxldGUgVSBhbmQgViBwbGFuZXMKLQkgIFJvdW5kIHVwIHRoZSBzY2FsZWQgVSBhbmQgViB3aWR0aCBhbmQgaGVpZ2h0IHNvIHRoYXQgd2UgYWx3YXlzIGRyYXcgdGhlIGNvcnJlY3QKLQkgIGFtb3VudCBvZiBwaXhlbHMgdG8gZmlsbCB0aGUgY29tcGxldGUgaW1hZ2UuCi0JICBGaXhlcyAjNTY5NjExCi0KLTIwMDktMDUtMDEgMTk6MzU6MTEgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGFkZCBzb21lIG1vcmUgbWljcm8gb3B0aW1pc2F0aW9ucwotCi0yMDA5LTA0LTMwIDE4OjQxOjQ0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIHF0ZGVtdXg6IG1pY3JvIG9wdGltaXplIHF0ZGVtdXggYSBsaXR0bGUKLQkgIFNwcmlua2xlIHNvbWUgR19MSUtFTFkgYXJvdW5kLgotCSAgQXZvaWQgdHJhdmVyc2luZyBhbmQgZHVtcGluZyB0aGUgdHJlZSB3aGVuIGRlYnVnZ2luZyBpcyBub3QgYWN0aXZhdGVkLgotCi0yMDA5LTA0LTMwIDE0OjIyOjI3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgcXRkZW11eDogYWRkIHN1cHBvcnQgZm9yIHN1YnRpdGxlIHBpY3R1cmVzCi0JICBBZGQgc3VwcG9ydCBmb3Igc3VidGl0bGUgcGljdHVyZXMuCi0JICBGaXhlcyAjNTY4Mjc4LgotCi0yMDA5LTA0LTMwIDEwOjMyOjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IG1ha2Ugc3VyZSB3ZSBhbHdheXMgc2lnbmFsIHdhaXRlcnMKLQkgIEFsd2F5cyBzaWduYWwgdGhlIHdhaXRlcnMgaW4gdGhlIGFzeW5jIGNhbGxiYWNrcy4gRXNwZWNpYWxseSBmb3IgdGhlIHZvbHVtZQotCSAgY2FsbGJhY2tzIHNpbmNlIHRoaXMgbWlnaHQgY2F1c2UgZGVhZGxvY2tzLgotCi0yMDA5LTA0LTI5IDE4OjA5OjA3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiByZWxlYXNlIHN0YXRlIGxvY2sgYmVmb3JlIHN0b3BwaW5nIHRhc2sKLQkgIFdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgc3RhdGUgbG9jayBiZWZvcmUgdHJ5aW5nIHRvIHdhaXQgZm9yIHRoZSB0YXNrIHRvIGVuZAotCSAgYmVjYXVzZSB0aGUgdGFzayBtaWdodCBhbHNvIHRha2UgdGhlIGxvY2suCi0JICBGaXhlcyAjNTc3NjcxCi0KLTIwMDktMDQtMjkgMTI6MTk6MjcgKzAyMDAgIEhhbnMgZGUgR29lZGUgPGp3cmRlZ29lZGUgYXQgZmVkb3JhcHJvamVjdC5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGhhbmRsZSBhYy0zIGF1ZGlvCi0JICBmaXggZGVtdXhpbmcgb2YgbTR2IHN0cmVhbXMgd2l0aCBhYy0zIGF1ZGlvCi0JICBGaXhlcyAjNTgwNTU0Ci0KLTIwMDktMDQtMjkgMTE6MTI6MzYgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBmbGFjZW5jOiBVc2UgdGhlIHRhZyBtZXJnZSBtb2RlIHRoYXQgd2FzIHNldCBvbiB0aGUgaW50ZXJmYWNlIGZvciBtZXJnaW5nIHRhZyBldmVudHMKLQotMjAwOS0wNC0yNSAwOTo0MzozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcHNyYzogZml4IGdldGFkZHJpbmZvIGVycm9yIHJlcG9ydGluZwotCSAgZ2V0YWRkcmluZm8gZXJyb3JzIHNob3VsZCBiZSByZXBvcnRlZCB3aXRoIGdhaV9zdHJlcnJvciBpbnN0ZWFkIG9mIGVycm5vIGFzCi0JICBzcG90dGVkIGJ5IE1pa2VTLgotCi0yMDA5LTA0LTI3IDEwOjA4OjM5ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkgIGc3MjZwYXk6IGZpeCBjb21waWxhdGlvbgotCi0yMDA5LTA0LTI3IDEwOjAyOjA2ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNnBheS5oOgotCSAgZzcyNnBheTogYWRkIFJGQyBjb21wbGlhbnQgcGFja2V0aXppbmcKLQkgIFNodWZmbGUgdGhlIGlucHV0IGJpdHMgYWNjb3JkaW5nIHRvIFJGQyAzNTUxIGZvciBHNzI2IHBheWxvYWRzLgotCSAgQWRkIG9wdGlvbiB0byBmb3JjZSB0aGUgcHJldmlvdXMgYmVoYXZpb3VyLgotCSAgRml4ZXMgIzU2NzE0MAotCi0yMDA5LTA0LTI3IDA5OjU5OjU0ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSAgZzcyNmRlcGF5OiBhZGQgZGVidWcgY2F0ZWdvcnkKLQkgIEFkZCBhIGRlYnVnZ2luZyBjYXRlZ29yeSwgYWRkIHNvbWUgY29tbWVudHMgYW5kIHJlbW92ZSBfcGVla19wYXJlbnQoKS4KLQotMjAwOS0wNC0yNiAxNTo1OTo1MCArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGlkM3YybXV4OiB3ZSBuZWVkIHRhZ2xpYiAxLjUgZm9yIElEM3YyOjpSZWxhdGl2ZVZvbHVtZUZyYW1lOjpzZXRJZGVudGlmaWNhdGlvbgotCSAgQnVtcCB0YWdsaWIgcmVxdWlyZW1lbnQuCi0KLTIwMDktMDQtMjQgMDI6MTE6MjggKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jOgotCSogdGVzdHMvZmlsZXMvaWQzLTU3NzQ2OC11bnN5bmNlZC10YWcudGFnOgotCSAgaWQzZGVtdXg6IGFkZCB1bml0IHRlc3QgZmlsZSBmb3IgdW5zeW5jZWQgaWQzIHRhZ3MKLQotMjAwOS0wNC0yNCAwMTo1MTozNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JICBpZDNkZW11eDogcGFyc2UgdW5zeW5jaHJvbmlzZWQgdGFncyBwcm9wZXJseQotCSAgV2UgZGlkbid0IGhhbmRsZSB1bnN5bmNocm9uaXphdGlvbiBhdCBhbGwgdXAgdG8gbm93LCB3aGljaCBtaWdodCBoYXZlCi0JICBjYXVzZWQgZnJhbWVzIHRvIG5vdCBiZSBleHRyYWN0ZWQgLSBlc3AuIGZyYW1lcyBhZnRlciBhbiBBUElDIHBpY3R1cmUKLQkgIGZyYW1lLiBGaXhlcyAjNTc3NDY4LgotCi0yMDA5LTA0LTI0IDAxOjAxOjUzICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuYzoKLQkgIGlkM2RlbXV4OiBwYXNzIHRoZSByaWdodCBzaXplIHZhbHVlIGZvciBzaXplIG9mIGFsbCBmcmFtZXMgdG8gdGhlIHBhcnNlcgotCSAgRnJhbWUgZGF0YSBzaXplIGlzIHRhZyBzaXplIGFkanVzdGVkIGZvciBzaXplIG9mIHRoZSB0YWcgaGVhZGVyIGFuZAotCSAgZm9vdGVyLCBub3QgdGFnIHNpemUgaW5jbHVkaW5nIGhlYWRlciBhbmQgZm9vdGVyLgotCi0yMDA5LTA0LTIyIDE1OjI0OjU1ICswMjAwICBQYXRyaWNrIFJhZGl6aSA8cGF0cmljay5yYWRpemkgYXQgYXhpcy5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGZpeCBzb21lIG1vcmUgcGFkIGxlYWtzCi0JICBGaXggc29tZSBwYWQgbGVha3MuCi0JICBTZWUgIzU3NzMxOC4KLQotMjAwOS0wNC0yMSAyMjoxMjo0NSArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gYjM5NDFlYSB0byA2YWIxMWQxCi0KLTIwMDktMDQtMjEgMTQ6MDI6MDEgLTA3MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBvdmVycmlkZSBjYXBzIGJhc2VkIG9uIGRhdGEgZnJvbSBFU0RTIGF0b21zIGluIG1wZWc0LgotCSAgSWYgdGhlIGNvZGVjIGlzIGFjdHVhbGx5IHNvbWV0aGluZyBlbHNlIChlLmcuIG1qcGVnKSBjaGFuZ2UgdGhlIGNhcHMgdG8KLQkgIG1hdGNoIHdoZW4gcGFyc2luZyB0aGUgRVNEUyBhdG9tLgotCSAgQWxzbywgZm9yIEFBQywgb3ZlcnJpZGUgcmF0ZSBhbmQgY2hhbm5lbHMgd2l0aCBjb3JyZWN0IHZhbHVlcyByZWFkIGZyb20KLQkgIEVTRFMsIHNpbmNlIHRoZSByYXRlL2NoYW5uZWxzIHZhbHVlcyBlbHNld2hlcmUgYXJlIG9mdGVuIHdyb25nLgotCi0yMDA5LTA0LTIwIDE5OjMyOjAwICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAganBlZ2RlYzogZml4IHdhcm5pbmcgZm9yIHN0aWxsIGltYWdlcyBieSBub3QgdHJ5aW5nIHRvIGRpdmlkZSBieSAwCi0JICBEb24ndCBwYXNzIGEgMCBkaXZpc29yIHRvIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgpLCBvciBpdCB3aWxsIGNvbXBsYWluCi0JICBpbiB0aGUgc2luZ2xlIGltYWdlIGNhc2Ugd2hlcmUgZnBzPTAvMSAoYXJlIHdlIHN1cHBvc2VkIHRvIGRpZmZlcmVudGlhdGUKLQkgIGJldHdlZW4gbm8gZnBzPXN0aWxsIGltYWdlIGFuZCBmcHM9MC8xPXZhcmlhYmxlIHJhdGUgaGVyZSBidHc/KQotCi0yMDA5LTA0LTIwIDE3OjI1OjM0ICswMTAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkgIHVkcDogRml4IGEgc2ltcGxlIHR5cG8gaW4gdGhlIHByZXZpb3VzIGNvbW1pdAotCSAgVXNlICNpZmRlZiBpbnN0ZWFkIG9mICNpZiwgdG8gZml4IHRoZSBidWlsZAotCi0yMDA5LTA0LTIwIDE1OjQ4OjIxICswMjAwICBBbmR5IFdpbmdvIDx3aW5nb0B3aW5nb21hYy5iY24ub2Jsb25nLm5ldD4KLQotCSAgZml4IGZvcm1hdCBzdHJpbmcgaW4gcG5nZGVjCi0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IEZpeCBzaXplX3QgdnMgdW5zaWduZWQgaW50IGZvcm1hdCBpbiBlcnJvciBtZXNzYWdlLgotCi0yMDA5LTA0LTIwIDE1OjQ2OjAzICswMjAwICBBbmR5IFdpbmdvIDx3aW5nb0B3aW5nb21hYy5iY24ub2Jsb25nLm5ldD4KLQotCSAgb25seSB1c2Ugc3RydWN0IGlwX21yZXFuIGlmIGl0IGlzIGRldGVjdGVkCi0JICAqIGNvbmZpZ3VyZS5hYzogTWFrZSBhbiBleHBsaWNpdCBjaGVjayBmb3Igc3RydWN0IGlwX21yZXFuLgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IFVzZSBIQVZFX0lQX01SRVFOIGluc3RlYWQgb2YgdGhlIGFkLWhvYyBjaGVja3MuCi0KLTIwMDktMDQtMjAgMTM6NDU6MzIgKzAyMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBGaXggcHVzaCBtb2RlIGJ1ZmZlcmluZyBzYW5pdHkgY2hlY2sgdG8gYWN0dWFsbHkgZml0IHRoZSBkZXNjcmlwdGlvbi4KLQotMjAwOS0wNC0xOCAxOToxMTowNiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICBydHBoMjYzcGF5OiBBbmQgbGV0J3Mgbm90IGZvcmdldCB0byByZW1vdmUgdGhlIHVudXNlZCB2YXJpYWJsZS4KLQotMjAwOS0wNC0xOCAxODo1MDozMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICBydHBoMjYzcGF5OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cywgdGhlIHZhcmlhYmxlcyBhcmUgbmV2ZXIgcmVhZCBhZnRlci4KLQotMjAwOS0wNC0xOCAxODo0OTo0OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JICBydHBtcDR2cGF5OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50LiBUaGUgdmFsdWUgaXMgbmV2ZXIgcmVhZCBhZnRlci4KLQotMjAwOS0wNC0xOCAxODo0ODo1NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4KLQkgIHQgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gYWZ0ZXIsIGJlZm9yZSBpdCdzIHVzZWQuCi0KLTIwMDktMDQtMTggMTg6NDg6MDYgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkgIHJ0cGFtcmRlcGF5OiBSZW1vdmUgdW5uZWVkZWQgdmFyaWFibGUsIHRoZSB2YWx1ZSBpcyBvbmx5IHJlYWQgb25jZS4KLQotMjAwOS0wNC0xOCAxODo0NzowNSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkgIHJ0cGFtcnBheTogUmVtb3ZlIHVubmVlZGVkIHZhcmlhYmxlLCB0aGUgdmFsdWUgaXMgb25seSByZWFkIG9uY2UuCi0KLTIwMDktMDQtMTggMTg6NDY6MTIgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9nb29tL2ZpbHRlcnMuYzoKLQkgIGdvb20vZmlsdGVyczogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4gVmFsdWUgb3ZlcndyaXR0ZW4ganVzdCBhZnRlci4KLQotMjAwOS0wNC0xOCAxODo0NTozMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIHJ0cHZvcmJpc3BheTogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4gVmFsdWUgbmV2ZXIgcmVhZCBhZnRlci4KLQotMjAwOS0wNC0xOCAxODo0NTowNyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIHJ0cHRoZW9yYXBheTogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4gVmFsdWUgbmV2ZXIgcmVhZCBhZnRlci4KLQotMjAwOS0wNC0xOCAxODo0MzozMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSAgcnRwdGhlb3JhZGVwYXk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUsIGl0J3MgbmV2ZXIgYmVpbmcgcmVhZC4KLQotMjAwOS0wNC0xOCAxODo0Mjo0NSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogUmVtb3ZlIGRlYWQgYXNzaWdubWVudC4gJ3JlcycgaXNuJ3QgcmVhZCBhZnRlci4KLQotMjAwOS0wNC0xOCAxODo0MTo1OCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4gJ3JlcycgaXMgbmV2ZXIgcmVhZC4KLQotMjAwOS0wNC0xOCAxODo0MDo0OCArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogUmVtb3ZlIGRlYWQgdmFyaWFibGUuICdzdHJlYW0nIGlzIG5ldmVyIHJlYWQgYWZ0ZXIuCi0KLTIwMDktMDQtMTggMTg6Mzk6NDggKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgdmlkZWJveDogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMuCi0JICBUaGVzZSB2YXJpYWJsZXMgYXJlIG5ldmVyIHJlYWQgYWZ0ZXIgdGhpcyBwb2ludC4KLQotMjAwOS0wNC0xOCAxODozODoyOSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2dvb20vY29udm9sdmVfZnguYzoKLQkgIGdvb206IGZmIGFuZCBpZmYgYXJlIG9ubHkgdXNlZCBpbiBhICcjaWZkZWYgRFJBV19NT1RJRicgYmxvY2suCi0KLTIwMDktMDQtMTggMTg6MzQ6MTEgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgd2F2cGFyc2U6IFJlbW92ZSBkZWFkIGFzc2lnbm1lbnQuCi0JICByZXMgaXNuJ3QgcmVhZCBhZnRlciB0aGlzLgotCi0yMDA5LTA0LTE4IDE4OjMyOjAzICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50cywgbW92ZSB2YXJpYWJsZSB0byB3aGVyZSBpdCdzIG5lZWRlZC4KLQkgIFRoZSBoZWFkZXJfcmVhZF9lcnJvciBsYWJlbCB3aWxsIHJldHVybiBHU1RfRkxPV19FUlJPUgotCi0yMDA5LTA0LTE4IDE4OjIxOjIyICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwdnJhd2RlcGF5OiBSZW1vdmUgZGVhZCBhc3NpZ25tZW50LgotCSAgVGhlIHZhbHVlIG9mICdzdHInIHdpbGwgbmV2ZXIgYmUgdXNlZCBpbiB0aGVzZSBjYXNlcy4KLQotMjAwOS0wNC0xOCAxODoxOToxMiArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBSZW1vdmUgdXNlbGVzcyB2YXJpYWJsZS4KLQkgIGlyZXQgd2FzIG5ldmVyIHJlYWQgb3V0c2lkZSBvZiB0aGF0IGxvb3AsIGFuZCBpcyBhbHdheXMgYmVpbmcgZXhpdGVkIGlmCi0JICBpcmV0IHdhcyAhPSBHU1RfRkxPV19PSyBhbnl3YXkuCi0KLTIwMDktMDQtMTggMTg6MTc6MzUgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIGF2aWRlbXV4OiBNb3ZlICdyZXMnIHRvIHdoZXJlIGl0J3MgYWN0dWFsbHkgYmVpbmcgdXNlZC4KLQkgIHJlcyB3YXMgbmV2ZXIgdXNlZCBvdXRzaWRlIG9mIHRoYXQgYmxvY2sgZXhjZXB0IGZvciBhIGRlYWQgYXNzaWdubWVudC4KLQotMjAwOS0wNC0xOCAxODoxNjozMyArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGViYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYzoKLQkgIGF1ZGlvZng6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCi0JICByeiBpcyBuZXZlciB1c2VkIGluIHRoZXNlIG1ldGhvZHMuCi0KLTIwMDktMDQtMTggMTg6MTU6MzkgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6Ci0JICBvc3hyaW5nYnVmZmVyOiBSdW4gZ3N0LWluZGVudC4KLQotMjAwOS0wNC0xOCAxODoxNDo0OSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIHhpbWFnZTogUmVtb3ZlIGRlYWQgYXNzaWdubWVudHMuCi0JICBUaG9zZSB2YXJpYWJsZXMgYXJlIG5vdCByZWFkIGFmdGVyIHRoYXQgcG9pbnQuCi0KLTIwMDktMDQtMTggMTg6MTE6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSogZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L3F0ZGVtdXgvZ3N0cnRweHF0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6Ci0JKiBnc3Qvc21wdGUvcGFpbnQuYzoKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgUmVtb3ZlIHRyaXZpYWwgdW51c2VkIHZhcmlhYmxlcyBkZXRlY3RlZCBieSBDTGFuZyBzdGF0aWMgYW5hbHl6ZXIuCi0KLTIwMDktMDQtMTggMTc6NTI6MDAgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmM6Ci0JKiBnc3QvcXRkZW11eC9nc3RydHB4cXRkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmM6Ci0JICBSZW1vdmUgYmxhbmsge3NldHxnZXR9X3Byb3BlcnR5L2NoYW5nZV9zdGF0ZS9maW5hbGl6ZSBtZXRob2RzLgotCi0yMDA5LTA0LTE4IDE3OjQyOjU1ICswMjAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkqIGV4dC9lc2QvZXNkc2luay5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2VmZW5jZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2aWdhdGlvbnRlc3QuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVuZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgaW4gX2NsYXNzX2luaXQKLQkgIERldGVjdGVkIGJ5IExMVk0ncyBDTGFuZyBzdGF0aWMgYW5hbHl6ZXIKLQotMjAwOS0wNC0xOCAxMzo1NDowOCArMDEwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgY2hlY2s6IENoZWNrIHdoZXRoZXIgdGhyZWFkcyBhcmUgYWxyZWFkeSBpbml0aWFsaXNlZCBiZWZvcmUgZ190aHJlYWRfaW5pdCgpCi0KLTIwMDktMDQtMTggMTQ6MzI6NDAgKzAyMDAgIEpvc2VwIFRvcnJhIDxuNzcwZ2FsYXh5QGdtYWlsLmNvbT4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogbWFyayBkaXNjb250IG9uIHRoZSBzdHJlYW1zIGFzIHdhcyBzYWlkIHRoZSBkZWJ1ZyBsaW5lCi0JICBBZnRlciBhIHNlZWsgbWFyayBhbGwgc3RyZWFtcyB3aXRoIGRpc2NvbnQgYXMgaXQgd2FzIHNhaWQgaW4gdGhlIGRlYnVnIGxpbmUuCi0JICBGaXhlcyB0aGF0IGJ1ZmZlcnMgYWZ0ZXIgYSBzZWVrIGFyZSBnZW5lcmF0ZWQgd2l0aG91dCBhIHZhbGlkIHRpbWVzdGFtcC4KLQotMjAwOS0wNC0xOCAwODo0NToxOCArMDIwMCAgSm9zZXAgVG9ycmEgPG43NzBnYWxheHlAZ21haWwuY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBtYXAgR1NUX1JUU1BfRUVPRiB0byBFT1Mgb24gc2VydmVyIHJlcXVlc3RzCi0JICBQZXJtaXQgcHJvcGVybHkgaGFuZGxlIHRoZSBFT1MgY29uZGl0aW9uIHdoZW4gc2VydmVyIHJlcG9ydCBpdCBpbiBhIHJlcXVlc3QuCi0KLTIwMDktMDQtMTggMDg6Mzk6NTcgKzAyMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkgIHJ0cHRoZW9yYWRlcGF5OiBGaXggYnVpbGQgb24gbWFjb3N4LgotCSAgVXNlIEdfR1NJWkVfRk9STUFUIGluc3RlYWQgb2YgdS4KLQotMjAwOS0wNC0xNiAyMjo1MDo1OSArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBmaXggc2FtcGxlIG9mZnNldCBjYWxjdWxhdGlvbiBhZ2FpbgotCi0yMDA5LTA0LTE1IDE5OjMyOjE4ICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmM6Ci0JICBzdW5hdWRpbzogZml4IGJyb2tlbiBpbmRlbnRhdGlvbiBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKLQotMjAwOS0wNC0xNSAxOToyODo1MyArMDEwMCAgSmFtZXMgQW5kcmV3YXJ0aGEgPHRyczgwQHVjYy5ndS51d2EuZWR1LmF1PgotCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzoKLQkgIHN1bmF1ZGlvOiByZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzIGFuZCBnb3RvIGxhYmVscwotCSAgRml4ZXMgIzU3OTA3MC4KLQotMjAwOS0wNC0xNSAxOToyNDo0OSArMDIwMCAgSmFtZXMgQW5kcmV3YXJ0aGEgPHRyczgwIGF0IHVjYy5ndS51d2EuZWR1LmF1PgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgcnRwaDI2M3BheTogZml4IGNvbXBpbGF0aW9uIG9uIGJpZy1lbmRpYW4KLQkgIFNvbWUgc2VtaWNvbG9ucyB3ZXJlIG1pc3NpbmcgZnJvbSB0aGUgYmlnLWVuZGlhbiBzdHJ1Y3RzIGluIGdzdHJ0cGgyNjNwYXkuaC4KLQkgIEEgR1NUX0RFQlVHIGNhbGwgd2FzIG1pc3NpbmcgYSBmb3JtYXQgc3BlY2lmaWVyLgotCSAgRml4ZXMgIzU3OTA2OQotCi0yMDA5LTA0LTE1IDIwOjEwOjA0ICswMzAwICBNYXJjbyBCYWxsZXNpbyA8bWFyY28uYmFsbGVzaW9Abm9raWEuY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF90eXBlcy5jOgotCSogZ3N0L3F0ZGVtdXgvcXVpY2t0aW1lLmM6Ci0JICBxdGRlbXV4OiBpbXBsZW1lbnQgM0dQUCAoVFMgMjYuMjQ0IFY4LjAuMCkgQXNzZXQgbWV0YWRhdGEgaGFuZGxpbmcsIEZpeGVzICMxMzIxOTMKLQkgIEltcGxlbWVudHMgM2dwcCBpc28gbWV0YWRhdGEgdGFncyB3aGljaCBhcmUgZGlmZmVyZW50IGZyb20gbW92IHVkdGEgYXRvbXMuCi0KLTIwMDktMDQtMTUgMTU6NTE6MjQgKzAyMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JKiBnc3QvZGVidWd1dGlscy9lZmVuY2UuaDoKLQkgIGRlYnVndXRpbHM6IFVzZSBHX0JFR0lOX0RFQ0xTL0dfRU5EX0RFQ0xTLgotCSAgVXNlIEdfQkVHSU5fREVDTFMvR19FTkRfREVDTFMgdG8gYXZvaWQgZ3N0LWluZGVudCBtZXNzaW5nIHVwIHRoZQotCSAgaW5kZW50YXRpb24gZHVlIHRvIGV4dGVybiAiQyIgeyB9LgotCi0yMDA5LTA0LTE1IDE2OjAzOjI3ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlYnVndXRpbHMvYnJlYWtteWRhdGEuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2RlYnVnLnZjcHJvajoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2VmZW5jZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvZWZlbmNlLmg6Ci0JKiBnc3QvZGVidWd1dGlscy9lZmVuY2UudmNwcm9qOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0ZGVidWcuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5oOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2c2Vlay5jOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0bmF2c2Vlay5oOgotCSogZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmg6Ci0JKiBnc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5oOgotCSogZ3N0L2RlYnVndXRpbHMvbmF2aWdhdGlvbnRlc3QudmNwcm9qOgotCSogZ3N0L2RlYnVndXRpbHMvbmVnb3RpYXRpb24uYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5oOgotCSogZ3N0L2RlYnVndXRpbHMvcm5kYnVmZmVyc2l6ZS5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHBsdWdpbi5jOgotCSogZ3N0L2RlYnVndXRpbHMvdGVzdHMuYzoKLQkqIGdzdC9kZWJ1Z3V0aWxzL3Rlc3RzLmg6Ci0JICBkZWJ1ZzogcmVuYW1lIGRlYnVnIHRvIGRlYnVndXRpbHMgdG8gYXZvaWQgY2xhc2ggd2l0aCAtLWRpc2FibGUtZGVidWcuIEZpeGVzICM1NjIxNjgKLQotMjAwOS0wNC0xNSAxNTo0MzowNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZGVidWcvZWZlbmNlLmM6Ci0JKiBnc3QvZGVidWcvZWZlbmNlLmg6Ci0JKiBnc3QvZGVidWcvZ3N0bmF2aWdhdGlvbnRlc3QuaDoKLQkqIGdzdC9kZWJ1Zy9nc3RuYXZzZWVrLmg6Ci0JKiBnc3QvZGVidWcvZ3N0cHVzaGZpbGVzcmMuaDoKLQkqIGdzdC9kZWJ1Zy9nc3R0YWdpbmplY3QuaDoKLQkqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5oOgotCSogZ3N0L2RlYnVnL3Rlc3RzLmg6Ci0JICBkZWJ1ZzogaW5kZW50IGJlZm9yZSByZW5hbWluZwotCi0yMDA5LTA0LTE1IDE0OjA3OjU3ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSAgZzcyNmRlcGF5OiBhZGQgcHJvcGVydHkgZm9yIGFhbDIgZm9yY2UKLQotMjAwOS0wNC0xNSAxMzo1NjoxNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5Lmg6Ci0JICBnNzI2ZGVwYXk6IGltcGxlbWVudCBSRkMzNTUxIHBhY2tpbmcKLQkgIFdlIGltcGxlbWVudGVkIHRoZSBBQUwyIHBhY2tpbmcsIGFkZCB0aGUgZW5jb2RpbmctbmFtZSBmb3IgdGhvc2UgdG8gdGhlIGNhcHMgYW5kCi0JICBhIHByb3BlcnR5IHRvIGZvcmNlIEFBTDIgZGVjb2RpbmcgKGFsd2F5cyBUUlVFIGZvciBub3cpLgotCSAgSW1wbGVtZW50IFJGQzM1NTEgdW5wYWNraW5nIGZvciByZWd1bGFyIEc3MjYuCi0JICBTZWUgIzU2NzE0MC4KLQotMjAwOS0wNC0xNSAwMDoyMjo0MyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5Lmg6Ci0JICBydHBoMjYzcGF5OiBmaXggYnVpbGQKLQotMjAwOS0wNC0xNCAxODo1Mjo0OCArMDIwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpIGF0IGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICBoMjYzcGF5OiB2YXJpb3VzIGZpeGVzCi0JICBSZS1lbmFibGUgbW9kZSBBIHN1cHBvcnQgYW5kIGEgcHJvcGVydHkgdG8gY29udHJvbCBpdC4KLQkgIEZpeCBtZW1vcnkgbGVhayBvZiBHc3RSdHBIMjYzUGF5Qm91bmRyeSBvYmplY3RzLgotCSAgRml4IG1hcmtlci4KLQkgIEZpeGVzICM1MDkzMTEKLQotMjAwOS0wNC0xNCAxODo0NDo1MSArMDIwMCAgSmFuaW4gS29sZW5jIDxqYW5pbi5rb2xlbmMgYXQgbWFyYW5kLnNpPgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgaDI2M3BheTogRml4IHRoZSBwYXlsb2FkZXIKLQkgIEZpeCB0aGUgSDI2MyBwYXlsb2FkZXIgdG8gYmUgbW9yZSBSRkMgMjE5MCBjb21wbGlhbnQuCi0JICBTZWUgIzUwOTMxMQotCi0yMDA5LTA0LTE0IDE3OjI3OjA1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZG9uJ3QgcHVzaCBFT1MgaW4gc3RyZWFtaW5nIG1vZGUKLQkgIEluIHN0cmVhbWluZyBtb2RlLCBhdmlkZW11eCBpcyBub3Qgc3VwcG9zZWQgdG8gc2VuZCBhbiBFT1MgZXZlbnQgZG93bnN0cmVhbSBidXQKLQkgIGl0IGlzIHN1cHBvc2VkIHRvIHJldHVybiBVTkVYUEVDVEVEIGZyb20gdGhlIGNoYWluIGZ1bmN0aW9uIGluc3RlYWQgc28gdGhhdAotCSAgdXBzdHJlYW0gY2FuIGRvIHRoZSByaWdodCBFT1MgaGFuZGxpbmcuCi0KLTIwMDktMDQtMTMgMTQ6MDM6MDMgKzAyMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIG11eGluZy9kZW11eGluZyBTcGVleCBhdWRpbwotCSAgTm90ZTogVGhpcyBpcyBub3QgaW4gdGhlIE1hdHJvc2thIHNwZWMgeWV0Ci0JICBGaXhlcyBidWcgIzU3ODMxMC4KLQotMjAwOS0wNC0xMCAyMTozMTowNiArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBoYW5kbGUgTlVMTCB0aW1pbmcgaW5mbwotCSAgRG9uJ3QgY3Jhc2ggd2hlbiB0aGUgdGltaW5nIGluZm8gaXMgbm90IHlldCBhdmFpbGFibGUuCi0KLTIwMDktMDQtMTAgMjE6NDI6MTMgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgcHVsc2U6IG1ha2UgaXQgd29yayBvbiAwLjkuMTIKLQkgIEZpcnN0IHdlIGlnbm9yZSByZXF1ZXN0IHRvIGZpbGwgdGhlIHJpbmdidWZmZXIgd2hpY2ggYXJlIGxlc3MgdGhlbiBhIHNlZ21lbnQuCi0JICBUaGUgc21hbGwgcmVxdWVzdCB3aGVyZSBjYXVzaW5nIHN0dXR0ZXIuCi0JICBUaGVuIHdlIGRpc2FibGUgZmx1c2hpbmcgdGhlIHN0cmVhbSB3aGVuIHJ1bm5pbmcgYWdhaW5zdCBwYSAwLjkuMTIgYXMgdGhpcwotCSAgdHJpZ2dlcnMgYW4gYXNzZXJ0aW9uZyBpbiB0aGUgc291bmQgc2VydmVyIGFuZCB0ZXJtaW5hdGVzIGl0LiBJdCBkb2VzIG5vdCBoYXBwZW4KLQkgIHdpdGggMC45LjEwIGFuZCAwLjkuMTQuCi0KLTIwMDktMDQtMTAgMTQ6MTg6NDggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogaGFuZGxlIHNlcnZlciBkaXNjb25uZWN0IGluIGdldF90aW1lCi0JICBXaGVuIHRoZSBzZXJ2ZXIgaXMgZGlzY29ubmVjdGVkIG9yIHdoZW4gd2UgYXJlIHNodXQgZG93biwgbWFrZSBvdXIgY2xvY2sgcmV0dXJuCi0JICBhbiBpbnZhbGlkIHRpbWUgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQuCi0KLTIwMDktMDQtMTAgMTI6MDE6MjcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogYnBzIGlzIHNpZ25lZCBpbnQgdG8gYXZvaWQgb3ZlcmZsb3cKLQkgIEtlZXAgYnBzIGFzIGdpbnQgaW5zdGVhZCBvZiBndWludCBiZWNhdXNlIHdlIHdpbGwgYmUgZG9pbmcgc2lnbmVkIG1hdGggd2l0aCBpdAotCSAgbGF0ZXIgb24gYW5kIHdlIGRvbid0IHdhbnQgd2VpcmQgcmVzdWx0cy4KLQotMjAwOS0wNC0xMCAwMDoyNjo0NCArMDIwMCAgTFJOIDxscm4xOTg2IGF0IGdtYWlsLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGFkZCBjb252ZXJ0IHF1ZXJ5LCBmaXggZHVyYXRpb24gcXVlcnkKLQkgIEZpeCB0aGUgZHVyYXRpb24gcXVlcnkgc28gdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggZm9ybWF0cyBvdGhlciB0aGFuCi0JICBUSU1FLCBzdWNoIGFzIERFRkFVTFQgdG8gZ2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzLgotCSAgQWRkIGEgY29udmVydCBmdW5jdGlvbi4KLQkgIEZpeGVzICM1NzgwNTIuCi0KLTIwMDktMDQtMDkgMjM6NDM6NTggKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogY2hlY2sgZm9yIGEgc3RyZWFtCi0JICBEb24ndCB0cnkgdG8gY2hhbmdlIHRoZSBzdHJlYW0gdm9sdW1lIChhbmQgb3RoZXIgdGhpbmdzKSB3aGVuIHdlIGRvbid0IGhhdmUgYQotCSAgc3RyZWFtIHlldC4gSnVzdCBzdG9yZSB0aGUgdmFsdWVzIGZvciBsYXRlci4KLQotMjAwOS0wNC0wOSAxODowNzozOCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBmaXggY29tcGlsYXRpb24gZm9yIG5ld2VyIHB1bHNlYXVkaW8KLQotMjAwOS0wNC0wOSAxNzoxODo1NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiB1bmNvcmsgZml4ZXMgYW5kIHVzZSBwcmVidWYgPSAwCi0JICBXZSBjYW4gdXNlIHByZWJ1ZiA9IDAgdG8gaW5zdHJ1Y3QgcHVsc2UgdG8gbm90IHBhdXNlIHRoZSBzdHJlYW0gb24gdW5kZXJmbG93cy4KLQkgIFRoaXMgd2F5IHdlIGNhbiByZW1vdmUgdGhlIHVuZGVyZmxvdyBjYWxsYmFjay4gV2UgaG93ZXZlciBoYXZlIHRvIG1hbnVhbGx5Ci0JICB1bmNvcmsgdGhlIHN0cmVhbSBub3cgd2hlbiB3ZSBoYXZlIG5vIGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgYnVmZmVyIG9yIHdoZW4gd2UKLQkgIGFyZSB3cml0aW5nIHRvbyBmYXIgYXdheSBmcm9tIHRoZSBjdXJyZW50IHJlYWRfaW5kZXguCi0KLTIwMDktMDQtMDkgMTQ6Mzg6MTcgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogaGFuZGxlIHdyaXRlIGVycm9ycwotCi0yMDA5LTA0LTA5IDE0OjE2OjM1ICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IHdyaXRlIHNpbGVuY2Ugb24gdW5kZXJmbG93Ci0JICBTdGFydCBmaWxsaW5nIHVwIHRoZSBidWZmZXIgd2l0aCBlbXB0eSBzYW1wbGVzIHdoZW4gYW4gdW5kZXJmbG93IGhhcHBlbnMuIFdlCi0JICBuZWVkIHRvIGRvIHRoaXMgdG8ga2VlcCBwdWxzZWF1ZGlvIHJlcG9ydGluZyB0aGUgcmlnaHQgdGltZSBmb3IgdXMuCi0KLTIwMDktMDQtMDkgMTM6MTQ6MTQgKzAyMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIHB1bHNlc2luazogaGFuZGxlIHB1bGwtYmFzZWQgc2NoZWR1bGluZwotCSAgVXNlIHRoZSBkZWZhdWx0IGJhc2VzaW5rIG1ldGhvZHMgZm9yIGltcGxlbWVudGluZyBwdWxsIGJhc2VkIHNjaGVkdWxpbmcsIGl0Ci0JICB3b3JrcyBmaW5lIGZvciB1cy4KLQotMjAwOS0wNC0wOSAxMjoxMzo0NCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBhZGQgYmVnaW5uaW5ncyBvZiBwdWxsLWJhc2VkIHNjaGVkdWxpbmcKLQotMjAwOS0wNC0wOCAxODoxNzoxMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBrZWVwIHRyYWNrIG9mIGNsb2NrIHJlc2V0Ci0JICB3aGVuIHdlIHN3aXRjaCBzdHJlYW1zLCB0aGUgY2xvY2sgd2lsbCByZXNldCB0byAwLiBNYWtlIHN1cmUgdGhhdCB0aGUgcHJvdmlkZWQKLQkgIGNsb2NrIGRvZXNuJ3QgZ2V0IHN0dWNrIHdoZW4gdGhpcyBoYXBwZW5zIGJ5IGtlZXBpbmcgYW4gaW5pdGlhbCBvZmZzZXQuIFdlIGFsc28KLQkgIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc3VidHJhY3QgdGhpcyBvZmZzZXQgaW4gc2FtcGxlcyB3aGVuIHdyaXRpbmcgdG8gdGhlCi0JICByaW5nYnVmZmVyLgotCi0yMDA5LTA0LTA4IDEzOjUyOjQxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICBwdWxzZXNpbms6IHJld3JpdGUgcHVsc2VzaW5rCi0JICBEZXJpdmUgZnJvbSBCYXNlQXVkaW9TaW5rIGFuZCBpbXBsZW1lbnQgb3VyIGN1c3RvbSByaW5nYnVmZmVyIHRoYXQgbWFwcyB0byB0aGUKLQkgIGludGVybmFsIHB1bHNlYXVkaW8gcmluZ2J1ZmZlci4KLQotMjAwOS0wNC0wOCAxMzo1MjowMCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNldXRpbC5jOgotCSAgcHVsc2U6IHJlbW92ZSBzb21lIHN0cmF5IGRlYnVnIGxpbmVzCi0KLTIwMDktMDQtMDkgMTE6MzA6NTkgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiB1c2Ugc2xpZ2h0bHkgbW9yZSBhZGFwdGl2ZSBmb3JtdWxhIGZvciBRb1MKLQkgIFNob3VsZCB3b3JrIGF0IGxlYXN0IGEgdGFkIGJldHRlciBpZiB0aGUgZGVjb2RlciBjYW4ndCBrZWVwIHVwLCBhbmQKLQkgIHNob3VsZCBhbHNvIHNwcmVhZCBkcm9wcGVkIGZyYW1lcyBhIGJpdCBtb3JlIGV2ZW5seSBvdmVyIHRpbWUuCi0KLTIwMDktMDQtMDcgMjI6MzU6MzEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICB3YXZwYXJzZTogZG9uJ3QgbGVhayBwYWQtdGVtcGxhdGUKLQkgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoKSBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcC4KLQotMjAwOS0wNC0wNCAyMToxODo1NSArMDMwMCAgRmVsaXBlIENvbnRyZXJhcyA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSBkMGVhODllIHRvIGIzOTQxZWEKLQotMjAwOS0wNC0wMSAwMToxNTozMSArMDIwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgYWRkIHBlbmRpbmdfc2FtcGxlcyBzbyB0aGF0IHdlIG9ubHkgdXBkYXRlIHNlZ21lbnQncyBsYXN0IHN0b3AgYWZ0ZXIgcmVhbGx5IHNlbmRpbmcgdGhlIHNhbXBsZXMKLQotMjAwOS0wMy0xNSAyMTozMTo0OSArMDEwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogdGVzdHMvY2hlY2svcGlwZWxpbmVzL2ZsYWNkZWMuYzoKLQkgIGFkZCBkZWJ1ZyBhbmQgYW4gYXNzZXJ0Ci0KLTIwMDktMDMtMTUgMjE6MzA6MzIgKzAxMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGFkZCBkZWJ1Z2dpbmcKLQotMjAwOS0wMy0wMyAxMDoxNDowMiArMDEwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9hdWRpb3Rlc3RzcmMuZmxhYzoKLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmM6Ci0JICBhZGQgYSB0ZXN0IHRvIGNoZWNrIHRoYXQgd2UgZ2V0IGFsbCBkZWNvZGVkIGJ5dGVzIGZyb20gYSAxMC1idWZmZXIgYXVkaW90ZXN0c3JjIGZsYWMsIGluIHRoZSBjYXNlIG9mOiAgLSBhIGZ1bGwgZGVjb2RlICAtIGEgZGVjb2RlIG9mIGEgc2VlayBmb3IgdGhlIGZ1bGwgZmlsZSAgLSBhIGRlY29kZSBvZiBhIHNlZWsgZm9yIGEgc21hbGwgcGFydCwgc21hbGxlciB0aGFuIHRoZSBmaXJzdCBidWZmZXIKLQkgIFRoZSB0ZXN0IGZhaWxzIGJlY2F1c2UgZmxhY2RlYyBkcm9wcyB0aGUgZmlyc3Qgb3V0Z29pbmcgYnVmZmVyIG9uIGEgc2VlawotCi0yMDA5LTAzLTAzIDEwOjA2OjUyICswMTAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBjbGlwcGluZyBzaG91bGQgYWxzbyB3b3JrIGlmIGl0J3MgZG9uZSBvbiB0aGUgZmlyc3QgYnVmZmVyIHN0YXJ0aW5nIGF0IDAKLQotMjAwOS0wNC0wNCAxNDo1NDowMSArMDIwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIGY4YjNkOTEgdG8gZDBlYTg5ZQotCi0yMDA5LTA0LTAzIDA5OjU3OjE1ICswMTAwICBaYWhlZXIgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBnc3QvcXRkZW11eC9MRUdBTDoKLQkgIEZpeCBncmFtbWFyLgotCi0yMDA5LTA0LTAyIDIyOjQxOjAxICswMjAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhbGxvdyBodHRwOi8vIG9uIHRoZSBwcm94eSBzZXR0aW5nCi0JICBBbGxvdyBhbmQgaWdub3JlIGh0dHA6Ly8gYXQgdGhlIHN0YXJ0IG9mIHRoZSBwcm94eSBzZXR0aW5nLCBsaWtlCi0JICBzb3VwaHR0cHNyYy4KLQkgIEZpeGVzICM1NzMxNzMKLQotMjAwOS0wNC0wMiAyMTowODo0OCArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3QgbGVhayB0aGUgdWRwc3JjIHBhZAotCSAgRml4IG1lbW9yeSBsZWFrIGluIHJ0c3BzcmMgYmVjYXVzZSB3ZSBkaWRuJ3QgdW5yZWYgdGhlIHVkcHNyYyBwYWQuCi0JICBTZWUgIzU3NzMxOAotCi0yMDA5LTA0LTAxIDE3OjMxOjE4IC0wNzAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIHJ0cHRoZW9yYXBheTogZml4IGxlbmd0aCBlbmNvZGluZyBpbiBwYWNrZWQgaGVhZGVycy4KLQkgIEFzIGZvciB2b3JiaXMgcGF5bG9hZGVyOyB0aGlzIGJ5IGluc3BlY3Rpb24gaGFkIHRoZSBzYW1lIGJ1Zy4KLQotMjAwOS0wNC0wMSAxNzoyMzozMyAtMDcwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHNvbmdiaXJkbmVzdC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICBydHB2b3JiaXNwYXk6IGluIHBhY2tlZCBoZWFkZXJzLCBwcm9wZXJseSBmbGFnIG11bHRpYnl0ZSBsZW5ndGhzLgotCSAgSW4gdGhlIHNlcXVlbmNlIG9mIGhlYWRlciBsZW5ndGhzLCBmb3IgaGVhZGVycyA+MTI3IGJ5dGVzLCB3ZSB1c2UKLQkgIG11bHRpcGxlIGJ5dGVzIHRvIGVuY29kZSB0aGUgbGVuZ3RoLiBCeXRlcyBvdGhlciB0aGFuIHRoZSBsYXN0IG11c3QgaGF2ZQotCSAgdGhlIHRvcCAoZmxhZykgYml0IHNldC4KLQotMjAwOS0wNC0wMiAwMDoyMDowMiArMDEwMCAgSm9uYXRoYW4gTWF0dGhldyA8am9uYXRoYW5AZDE0bi5vcmc+Ci0KLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDN2Mm11eC5jOgotCSAgaWQzdjJtdXg6IHdyaXRlIFJWQTIgZnJhbWVzIGNvbnRhaW5pbmcgcGVhay9nYWluIHZvbHVtZSBkYXRhCi0KLTIwMDktMDQtMDIgMDA6MDU6MTQgKzAxMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBqcGVnZGVjOiBkZW1vdGUgc29tZSBsb2cgbWVzc2FnZSBmcm9tIERFQlVHIHRvIExPRwotCSAgQW5kIGxvZyBkZWNvZGVyIG9iamVjdC4KLQotMjAwOS0wNC0wMSAyMToxNTowMiArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuaDoKLQkgIGpwZWdkZWM6IGltcGxlbWVudCBiYXNpYyBRb1MKLQkgIERvbid0IGRlY29kZSBmcmFtZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgdG9vIGxhdGUgYW55d2F5LgotCi0yMDA5LTA0LTAxIDEyOjI2OjEyICswMTAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3QgZW1pdCB1Z2x5IHdhcm5pbmdzIHdpdGggb2xkZXIgcnRwaml0dGVyYnVmZmVyIHZlcnNpb25zCi0JICBUaGUgb24tbnB0LXN0b3Agc2lnbmFscyB3YXMgYWRkZWQgb25seSByZWNlbnRseSB0byBydHBqaXR0ZXJidWZmZXIgaW4KLQkgIC1iYWQsIHNvIGNoZWNrIGlmIHRoZSBzaWduYWwgZXhpc3RzIGJlZm9yZSBnX3NpZ25hbF9jb25uZWN0KClpbmcgdG8KLQkgIGl0LCB0byBhdm9pZCB3YXJuaW5ncy4KLQotMjAwOS0wMy0zMSAxOTowODozNyArMDIwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgcnRzcHNyYzogYWRkIHByb3h5IHN1cHBvcnQKLQotMjAwOS0wMy0zMSAxNzoxNjowNCArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBtYXRyb3NrYTogZG9uJ3QgbGVhayBzZXJpYWxpemVkIHZhbHVlcyB3aGVuIHdyaXRpbmcgdGFncwotCi0yMDA5LTAzLTMxIDE3OjA2OjUwICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IGRvbid0IGFsdGVyIHBhc3NlZCBkYXRhIGFuZCBlc3BlY2lhbHkgZG9uJ3QgbGVhay4KLQkgIElmIHdlIG5lZWQgZGlmZmVyZW50IHNpemUsIE1ha2UgYSBjb3B5LCB3b3JrIHdpdGggdGhhdCBhbmQgZnJlZSBpdC4KLQotMjAwOS0wMy0zMSAxNjo0MjoxNSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOgotCSAgZ29vbTogdGhlIHN0cnVjdHVyZSBpcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQsIGJ1dCB0aGUgY29waWVkLgotCSAgU2V0IHRvIGZ1bGx5IHRvIDAgdG8gYXZvaWQgY3JlZXAgb2YgdW5pbml0aWFsaXplZCB2YWx1ZXMuCi0KLTIwMDktMDMtMzEgMTY6MjU6NTggKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgbWF0cm9za2E6IGluaXQgZW5kaWFuZXNzIGFzIHN1Y2ggYW5kIHNpZ25lZG5lc3MgYXMgYm9vbGVhbi4KLQotMjAwOS0wMy0zMSAxNjoyMjo0MiArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBkb24ndCB1c2UgaW5pbml0aWFsaXplZCB2YXIgaW4gZGVidWcgbG9nIHN0YXRlbWVudAotCSAgQWxzbyBtYWtlIHRoZSBsb2cgc3RhdGVtZW50IHVzZWZ1bCBieSBwcmludGluZyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybWF0IG5hbWUuCi0KLTIwMDktMDMtMzEgMTI6MDE6MjEgKzAzMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZG9uJ3QgbGVhayBhdG9tIGRhdGEgaW4gY2FzZSBvZiBhIHdyb25nIGZvdXJjYwotCi0yMDA5LTAzLTMxIDExOjU3OjM2ICswMzAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2E6IGRvbid0IGxlYWsgcmVhZCBkYXRhIGluIGRlbXV4ZXIKLQotMjAwOS0wMy0zMSAxMTo1MDo0MSArMDMwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHA6IGRvbid0IHVzZSBwcm90b2NvbCBpbiBkZWJ1ZyBtZXNzYWdlIGFmdGVyIGZyZWVpbmcKLQotMjAwOS0wMy0zMCAxNDoxMDoxNSArMDEwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JICBydHBtcDRhZGVwYXk6IG91dHB1dCBzaG91bGQgYmUgZnJhbWVkIGFscmVhZHkKLQotMjAwOS0wMy0yNyAyMToxNzowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgZmxhYzogcmVxdWlyZSBhICduZXdlcicgZmxhYyBhbmQgcmVtb3ZlIHN1cHBvcnQgZm9yIHRoZSBsZWdhY3kgZmxhYyBBUEkKLQotMjAwOS0wMy0yNyAxNzo0ODoxMyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogbGluayB0byB0aGUgb25fbnB0X3N0b3Agc2lnbmFsIHRvIEVPUwotCSAgQ29ubmVjdCB0byB0aGUgb25fbnB0X3N0b3Agc2lnbmFsIG9mIHRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gc2NoZWR1bGUgdGhlIEVPUwotCSAgYWN0aW9ucy4KLQotMjAwOS0wMy0yNiAxNDozOTowNiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IHNvbWUgc3RyZWFtIHN5bmNocm9uaXphdGlvbiB0byBhaWQgc2Vla2luZyBpbiB1bmJhbGFuY2VkIGNsaXBzCi0JICBTb21lIGNsaXBzICh0cmFpbGVycykgbWF5IGhhdmUgKGxlbmd0aC13aXNlKSB1bmJhbGFuY2VkIHN0cmVhbXMsCi0JICB3aGljaCBzdGFsbHMgdGhlIHBpcGVsaW5lIGlmIHNlZWtpbmcgaW50byB0aGF0IHJlZ2lvbi4KLQkgIEFkZGl0aW9uYWwgc3RyZWFtIHN5bmNocm9uaXphdGlvbiBjYW4gaGFuZGxlIHRoaXMsIGFzIHdlbGwgYXMKLQkgIHNwYXJzZSAoc3VidGl0bGUpIHN0cmVhbXMgKGF0IHNvbWUgbGF0ZXIgdGltZSA/KQotCi0yMDA5LTAzLTI2IDEwOjMxOjE4ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWRkaXRpb25hbCBzYWZldHkgYW5kIHNhbml0eSBjaGVja3MgKHB1c2ggYmFzZWQgbW9kZSkKLQotMjAwOS0wMy0yNiAxMDoxODozMSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgdmlkZW9taXhlcjogc29tZSBtb3JlIGluZGVudCBmaXhlcwotCi0yMDA5LTAzLTI0IDE2OjAwOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICB2aWRlb21peGVyOiBmaXggZ3N0LWluZGVudCBzY3Jld3VwCi0KLTIwMDktMDMtMjUgMTc6NTQ6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIHJ0c3BzcmM6IGJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIFJUU1AgZXh0ZW5zaW9uIGZvciBSZWFsIHN0cmVhbXMgaXMgbWlzc2luZwotCSAgVHJ5IHRvIHBvc3QgYSBkZWNlbnQgZXJyb3IgbWVzc2FnZSB3aGVuIGl0IGxvb2tzIGxpa2Ugd2UncmUgZmFpbGluZwotCSAgYmVjYXVzZSB0aGUgUmVhbCBSVFNQIGV4dGVuc2lvbiBwbHVnaW4gaXMgbWlzc2luZy4gQWxzbyBhZGQgaTE4bgotCSAgYml0cyBmb3IgcnRzcHNyYyBzbyBvdXIgZXJyb3IgbWVzc2FnZXMgZ2V0IHRyYW5zbGF0ZWQuCi0KLTIwMDktMDMtMjUgMTU6NDI6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aS5jOgotCSogZ3N0L3F0ZGVtdXgvcXVpY2t0aW1lLmM6Ci0JICBpMThuOiBtYWtlIHN1cmUgZ2V0dGV4dCBnaXZlcyB1cyBVVEYtOCBhdCBhbGwgdGltZXMKLQotMjAwOS0wMy0yNSAwMToyODozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkgIHJ0cG1wNGFwYXkscnRwbXA0ZGVwYXk6IGZpeCBidWZmZXIgbGVha3MgaW4gQUFDIHBheWxvYWRlciBhbmQgZGVwYXlsb2FkZXIKLQotMjAwOS0wMy0yNSAwMToyMjoxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOgotCSAgcnRwbXA0YXBheTogd2FybiBpZiBpbnB1dCBpcyB1bmZyYW1lZAotCi0yMDA5LTAzLTIyIDIxOjIwOjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAganBlZ2RlYzogcHV0IEdzdFNlZ21lbnQgaW5zaWRlIHRoZSBlbGVtZW50IHN0cnVjdCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgaXQgc2VwYXJhdGVseQotCi0yMDA5LTAzLTI1IDEwOjA4OjQxICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IG1vdmUgZHVwbGljYXRlZCB0aW1lc3RhbXBpbmcgYW5kIGJ1ZmZlciBtZXRhZGF0YSBjb2RlIHRvIF9jcmVhdGUoKQotCSAgVGhpcyB3aWxsIGluY2x1ZGUgdGhlIGxhdGVuY3kgY2hhbmdlcyBhbHNvIGluIHRoZSBtbWFwIGNhc2UuCi0KLTIwMDktMDMtMjUgMTA6MDY6NDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMnNyYzogcmVtb3ZlIHdpbjMyIGlmZGVmcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBjZmYzZjQ2NzYwZWFjNzRjOWJiZDdhMzZhY2E0NGZlZGYzMjc0MjRiCi0JICBWNGwyc3JjIGlzIHVuZGVyIHN5cyBhbmQgZG9lcyBub3QgZXhpc3RzL3J1biB1bmRlciB3aW5kb3dzIGFueXdheS4KLQotMjAwOS0wMy0yNCAxNTo0NDo0MiArMDEwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIHF0ZGVtdXg6IGhhbmRsZSBGTFVTSF9TVE9QIGV2ZW50Ci0JICBDbGVhbiB1cCBzb21lIHN0YXRlIChtb3N0IG5vdGFibHkgcGFkIGZsb3cgcmV0dXJucykgdG8gcmVzdW1lCi0JICBwcm9wZXIgc3RyZWFtaW5nIGZvbGxvd2luZyBmbHVzaGluZyBzZWVrLgotCi0yMDA5LTAzLTI0IDEyOjQyOjEzICswMTAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyby5kZWNpbmFAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogZG9uJ3QgcG9zdCBhbiBlcnJvciBpZiBFT1MgY2FuJ3QgYmUgcHVzaGVkIGRvd25zdHJlYW0uCi0JICBUaGlzIGFsaWducyBhdmlkZW11eCB3aXRoIG90aGVyIGRlbXV4ZXJzIGFuZCBmaXhlcyBhIGJ1ZyB1c2luZyBhdmlkZW11eAotCSAgd2l0aCBhIHJlY2VudCBnbm9ubGluLgotCi0yMDA5LTAzLTIzIDExOjIyOjA4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZXNpbms6IGNsZWFuIHVwIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24KLQkgIE1ha2UgdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBhIGJpdCBtb3JlIHJlYWRhYmxlIGFuZCBvbmx5IHBhdXNlIGFmdGVyIHRoZQotCSAgcGFyZW50IGhhZCBhIGNoYW5nZSB0byBwYXVzZSBmaXJzdC4KLQotMjAwOS0wMy0wOSAyMzo0Mzo1NSArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvZHRtZi9NYWtlZmlsZS5hbToKLQkgIE1ha2VmaWxlLmFtOiBubyBzdGF0aWMgbGlicyBmb3IgcGx1Z2lucwotCi0yMDA5LTAzLTIwIDE3OjIyOjMyICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogc3VwcG9ydCBzZWVraW5nIGluIHB1c2ggYmFzZWQgbW9kZQotCi0yMDA5LTAzLTIwIDE3OjExOjM5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogYWxpZ24gcHVzaCBiYXNlZCBiZWhhdmlvdXIgbW9yZSB3aXRoIHB1bGwgYmFzZWQKLQkgIENhdGVyIGZvciBERUxUQV9VTklUIGZsYWcgb24gYnVmZmVycywga2VlcCB0cmFjayBvZiBjdXJyZW50Ci0JICBwb3NpdGlvbiwgcmVtb3ZlIGFuZCB3YXJuIGFib3V0IGVkaXQgbGlzdHMgaWYgYW55IChhcyB0aG9zZQotCSAgYXMgYXJlIGRlIGZhY3RvIGRpc2NhcmRlZCBhbnl3YXkpLCBhZGQgc29tZSBkZWJ1ZyBzdGF0ZW1lbnRzCi0JICBhbmQgaW5kZW50IGZpeGVzLgotCi0yMDA5LTAzLTIwIDE3OjAzOjAzICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgcXRkZW11eDogZml4IG1lbSBsZWFrcyBhbmQgcHJldmVudCBleGNlc3NpdmUgYnVmZmVyaW5nIGluIHB1c2ggYmFzZWQgbW9kZQotCi0yMDA5LTAzLTIwIDEzOjI3OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkgIHB1bHNlc2luazogVHJhY2sgdGhlIGNvcmtlZC91bmNvcmtlZCBzdGF0ZSBvdXJzZWx2ZXMKLQkgIFVzZSBhbiBpbnN0YW5jZSB2YXJpYWJsZSB0byB0cmFjayB3aGV0aGVyIHRoZSBzdHJlYW0gaXMgY29ya2VkIG9yIG5vdCwKLQkgIGluc3RlYWQgb2YgdXNpbmcgUEEgQVBJIHRoYXQgd2FzIG9ubHkgaW50cm9kdWNlZCBpbiAwLjkuMTEKLQotMjAwOS0wMy0xOSAxODozOTowNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBwdWxzZTogTWFrZSBzdXJlIHRoZSBzdHJlYW0gaXMgdW5jb3JrZWQgaW4gdGhlIHdyaXRlIGZ1bmN0aW9uCi0JICBJZiB0aGUgY2FwcyBjaGFuZ2VzLCB0aGUgc2luayBpcyByZXNldCB3aXRob3V0IHRyYW5zaXRpb25pbmcgdGhyb3VnaAotCSAgYSBQQVVTRUQtPlBMQVlJTkcgc3RhdGUgY2hhbmdlLCByZXN1bHRpbmcgaW4gYSBjb3JrZWQgc3RyZWFtLiBUaGlzIGF2b2lkcwotCSAgdGhlIHByb2JsZW0gYnkgY2hlY2tpbmcgdGhhdCB0aGUgc3RyZWFtIGlzIHVuY29ya2VkIHdoZW4gd3JpdGluZyBzYW1wbGVzCi0JICB0byBpdC4KLQotMjAwOS0wMy0yMCAwMTowMjoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSAgc3BlZXhlbmM6IGZpeCBkaXJlY3Rpb24gb2YgbGF0ZW5jeSBxdWVyeSBhbmQgb3RoZXIgdXBzdHJlYW0gcXVlcmllcwotCSAgRG9uJ3Qgc2VuZCBxdWVyaWVzIGJhY2sgdG8gdGhlIGVsZW1lbnQgdGhleSBqdXN0IGNhbWUgZnJvbSBieSBzZW5kaW5nCi0JICB0aGVtIHRvIHRoZSBwZWVyIG9mIHRoZSB3cm9uZyBwYWQuCi0KLTIwMDktMDMtMTkgMTE6MTA6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiAuZ2l0aWdub3JlOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIC5naXRpZ25vcmU6IGlnbm9yZSBtb3JlCi0KLTIwMDktMDMtMTggMTY6NTU6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSAgcnRwbXA0YWRlcGF5OiBkb24ndCBhcHBlbmQgYW4gZXh0cmEgMCBieXRlIHRvIHRoZSBjb2RlYyBkYXRhCi0JICBUaGUgYXVkaW9NdXhWZXJzaW9uIHN0cnVjdHVyZSBpcyBwYWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBjb2RlYwotCSAgZGF0YSBkb2VzIG5vdCBzdGFydCBieXRlLWFsaWduZWQsIHdoaWNoIG1lYW5zIHRoZXJlJ3MgYW4gZXh0cmEgYml0IG9mCi0JICBwYWRkaW5nIGF0IHRoZSBlbmQuIFdlIGRvbid0IHdhbnQgdGhhdCBiaXQgaW4gdGhlIGNvZGVjIGRhdGEsIHNpbmNlCi0JICBzb21lIGRlY29kZXJzIHNlZW0gZ2V0IGNvbmZ1c2VkIHdoZW4gdGhleSdyZSBmZWQgd2l0aCBhbiBleHRyYSBjb2RlYwotCSAgZGF0YSBieXRlIChhbHNvIGl0J3MganVzdCBub3QgcmlnaHQgb2YgY291cnNlKS4KLQotMjAwOS0wMy0xOSAxMzoyNTo1NyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgIHJ0cGgyNjRkZXBheTogZml4IGJhc2U2NCBkZWNvZGluZwotCSAgV2UgY2FuJ3QgcGFzcyAtMSB0byBfZGVjb2RlX3N0ZXAsIHRoYXQgZnVuY3Rpb25zIHJldHVybnMgMCByaWdodCBhd2F5IGluc3RlYWQgb2YKLQkgIGRlY29kaW5nIHVwIHRvIHRoZSBzdHJpbmcgZW5kLgotCi0yMDA5LTAzLTE5IDEzOjI0OjAyICswMTAwICBEYXZpZCBBZGFtIDx6YW5jaGV5IGF0IHVjYy5ndS51d2EuZWR1LmF1PgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICB1ZHA6IEZpeCBidWlsZCBpZiBvbiBTb2xhcmlzCi0JICBUaGlzIHBhdGNoIGNoZWNrcyBmb3IgU29sYXJpcyBhbmQgdXNlcyBpcF9tcmVxIGluc3RlYWQgb2YgaXBfbXJlcW4gaWYgb24gdGhpcwotCSAgcGxhdGZvcm0uCi0JICBGaXhlcyAjNTc1OTM3LgotCi0yMDA5LTAzLTE4IDE0OjUwOjE3ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICBydHA6IFVzZSBHTGliIGZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcvZGVjb2RpbmcgYmFzZTY0Ci0KLTIwMDktMDMtMTYgMTk6MTc6MjQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFkZCBzb21lIGRlYnVnIGZvciB0aGUgdGltZXN0YW1wcwotCSAgV2hlbiB0aW1lc3RhbXBpbmcgaW4gVENQIG1vZGUsIGxvZyB0aGUgZmlyc3QgdGltZXN0YW1wIHdlIHB1dCBvbiB0aGUgYnVmZmVycy4KLQotMjAwOS0wMy0xNSAyMzoyNjo1NiArMDIwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICB2NGwyc3JjOiBsb2cgZGV0YWlscyBpZiB3ZSBoYXZlIHRoZW0sIG5lZWRlZCBmb3IgIzU3NTM5MQotCi0yMDA5LTAzLTEzIDE4OjMyOjQ3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgdWRwc3JjOiBjb252ZXJ0IF8gaW4gcHJvcGVydGllcyB0byAtCi0JICAtLQotCi0yMDA5LTAzLTEzIDE4OjI4OjU5ICswMTAwICBFZGdhciBFLiBJZ2xlc2lhcyA8ZWRnYXIuaWdsZXNpYXNAZ21haWwuY29tPgotCi0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5jOgotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICB1ZHBzcmM6IEFkZCBuZXR3b3JrIGludGVyZmFjZSBzZWxlY3Rpb24KLQkgIEFkZCBuZXR3b3JrIGludGVyZmFjZSBzZWxlY3Rpb24gd2hlbiBqb2luaW5nIG11bHRpY2FzdCBncm91cHMuCi0JICBVc2VmdWwgd2hlbiB1c2luZyB0aGUgdWRwc3JjIG9uIG11bHRpaG9tZWQgaG9zdHMuCi0JICBGaXhlcyAjNTc1MjM0LgotCSAgQVBJOiBHc3RVRFBTcmM6Om11bHRpY2FzdC1pZmFjZQotCi0yMDA5LTAzLTEzIDE1OjQzOjUyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIHY0bDJzcmM6IFByZXBlbmQgdG8gbGlzdHMgYW5kIHJldmVyc2UgdGhlbSBhdCB0aGUgZW5kLgotCSAgR3JhdHVpdG91cyBtaWNyby1vcHRpbWlzYXRpb24gLSBwcmVwZW5kIHRvIGxpc3RzIGFuZCByZXZlcnNlIHRoZW0sIHJhdGhlcgotCSAgdGhhbiBhcHBlbmRpbmcgdG8gdGhlbSBlYWNoIHRpbWUuCi0KLTIwMDktMDMtMTMgMTU6NDA6NTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgcHVsc2VzaW5rOiBXYWl0IHVudGlsIHRoZXJlIGlzIGVub3VnaCByb29tIHRvIHdyaXRlIGFuIGVudGlyZSBzZWdtZW50Ci0JICBXaGVuIHRyeWluZyB0byB3cml0ZSBvdXQgYSBzZWdtZW50LCB3YWl0IHVudGlsIHRoZXJlIGlzIGVub3VnaCBmcmVlIHNwYWNlCi0JICBmb3IgdGhlIGVudGlyZSBzZWdtZW50LiBUaGlzIGhlbHBzIHRvIHJlZHVjZSByaXBwbGUgaW4gdGhlIGNsb2NrIHJlcG9ydGluZywKLQkgIHdoZXJlIHRoZSBhcHAgbWlnaHQgcXVlcnkgdGhlIHBsYXliYWNrIHBvc2l0aW9uIHdoaWxlIG9ubHkgaGFsZiBhIHNlZ21lbnQKLQkgIGhhcyBiZWVuIHdyaXR0ZW4gKGFuZCBpcyB0aGVyZWZvcmUgcmVwb3J0ZWQgYnkgX2RlbGF5KCksIGV2ZW4gdGhvdWdoCi0JICB0aGUgcmluZyBidWZmZXIgaGFzIG5vdCB5ZXQgYmVlbiBhZHZhbmNlZCkKLQotMjAwOS0wMy0xMiAyMDozODo0MiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZG9uJ3Qgc2VuZCBQQVVTRSB3aGVuIG5vdCBjb25uZWN0ZWQKLQkgIGRvbid0IHNlbmQgYSBQQVVTRSByZXF1ZXN0IHdoZW4gd2UgYXJlIG5vIGxvbmdlciBjb25uZWN0ZWQuCi0KLTIwMDktMDMtMTIgMTY6MTA6MjUgKzAxMDAgIExhc3psbyBQYW5keSA8bGFzemxvazJAZ21haWwuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBEb24ndCBjYWxsIEZMQUNfXyBtZXRob2RzIGJlZm9yZSBpdCdzIGluaXRpYWxpemVkLiBGaXhlcyAjNTE2MDMxCi0JICBJbiB0aGUgZXZlbnQgaGFuZGxlciwgZ3N0X2ZsYWNfZGVjX3NpbmtfZXZlbnQoKSwgdHdvIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9uCi0JICB0aGUgRkxBQyBzdHJlYW0gd2l0aG91dCBjaGVja2luZyBpZiBpdCBoYXMgYmVlbiBpbml0aWFsaXplZDoKLQkgIEZMQUNfX3N0cmVhbV9kZWNvZGVyX2ZsdXNoKCkKLQkgIEZMQUNfX3N0cmVhbV9kZWNvZGVyX3Byb2Nlc3NfdW50aWxfZW5kX29mX3N0cmVhbSgpCi0JICBCb3RoIHRoZXNlIEZMQUNfXyooKSBmdW5jdGlvbnMgbW9kaWZ5IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgRkxBQyBzdHJlYW0uCi0JICBMYXRlciwgd2hlbiB0aGUgYnVmZmVycyBzdGFydCBmbG93aW5nLCBnc3RfZmxhY19kZWNfY2hhaW4oKSB0cmllcyB0byBpbml0aWFsaXplCi0JICB0aGUgc3RyZWFtLiB0aGUgRkxBQ19fc3RyZWFtX2RlY29kZXJfaW5pdF9zdHJlYW0oKSBjYWxsIHdpbGwgZmFpbCBiZWNhdXNlIHRoZQotCSAgcHJldmlvdXMgY2FsbHMgdG8gRkxBQ19fKigpIGNoYW5nZWQgdGhlIHN0cmVhbSBzdGF0ZSBzbyBpdCBpcyBubyBsb25nZXIgaW4gdGhlCi0JICBpbml0aWFsaXplZCBzdGF0ZS4KLQotMjAwOS0wMy0xMSAxNzo1OTowMCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgcnRzcHNyYzogZml4IHRpbWVvdXQgY2hlY2sKLQkgIC0tLQotCi0yMDA5LTAzLTExIDEyOjQ4OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvTUFOSUZFU1Q6Ci0JICB3aW4zMjogdXBkYXRlIE1BTklGRVNULCBmaXhpbmcgJ21ha2UgZGlzdCcKLQkgIGNvbmZpZy5oLmluIG5vIGxvbmdlciBleGlzdHMuCi0KLTIwMDktMDMtMTAgMjE6MTQ6NDMgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0L211bHRpcGFydC9NYWtlZmlsZS5hbToKLQkgIG1ha2VmaWxlOiBmaXggdHlwbyBpbiBuby1zdGF0aWMgcGx1Z2lucyBydWxlCi0KLTIwMDktMDMtMTAgMTE6MDE6MTYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBwbmdkZWM6IHZhcmlvdXMgY2xlYW51cHMuCi0JICBNYWtlIHNvbWUgY29kZSBtb3JlIHJlYWRhYmxlLgotCSAgRml4IGEgbGVhayB3aGVuIHB1bGwgcmFuZ2UgcmV0dXJucyBhIHNob3QgYnVmZmVyLgotCSAgUHVzaCBFT1MgYWZ0ZXIgcG9zdGluZyB0aGUgZXJyb3IuCi0KLTIwMDktMDMtMTAgMTA6MTY6MjcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkgIGdzdHJ0cHZvcmJpc2RlcGF5OiBGaXggYnVpbGQgb24gbWFjb3N4Ci0KLTIwMDktMDMtMDEgMTc6Mzc6NTYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIC5naXRpZ25vcmU6Ci0JICAuZ2l0aWdub3JlOiBJZ25vcmUgbTQgZGlyZWN0b3J5Ci0KLTIwMDktMDMtMDkgMjM6MTI6MzMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29tbW9uOgotCSAgQXV0b21hdGljIHVwZGF0ZSBvZiBjb21tb24gc3VibW9kdWxlCi0JICBGcm9tIDcwMzIxNjMgdG8gZjhiM2Q5MQotCi0yMDA5LTAzLTA5IDE4OjA3OjIwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JICB2b3JiaXNkZXBheTogZml4IHNvbWUgbGVha3MKLQkgIEFuZCBsZWFrIHRoZSBjb2RlYm9va3MuCi0JICBVc2UgZ2xpYiBiYXNlNjQgZGVjb2RlcnMuCi0JICBVc2Ugc3ViYnVmZmVycyB0byBhdm9pZCBhIG1lbWNweSBvZiB0aGUgaGVhZGVycy4KLQotMjAwOS0wMy0wOSAxNzoxNDoxMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgZmxhY2RlYzogZG9uJ3QgbG9zZSB0aGUgZmlyc3QgYnVmZmVyIGFmdGVyIGEgc2VlawotCSAgVGhlIGZsYWNkZWMgQVBJIGNhbGxzIHRoZSB3cml0ZSBjYWxsYmFjayB3aGVuIHBlcmZvcm1pbmcgYSBzZWVrLiBXZSBjYW5ub3QgeWV0Ci0JICBwdXNoIG91dCBhIGJ1ZmZlciBhdCB0aGF0IHRpbWUgc28gd2UgbXVzdCBrZWVwIGl0IGFuZCBwdXNoIGl0IG91dCBsYXRlci4KLQkgIEZsdXNoIG91dCB0aGUgdXBzdHJlYW0gcGFydCBvZiB0aGUgcGlwZWxpbmUgd2hlbiBkb2luZyBhIHNlZWsuCi0JICBGaXhlcyAjNTc0Mjc1LgotCi0yMDA5LTAzLTA5IDE1OjIwOjA1ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBxdGRlbXV4OiBzYW5pdGl6ZSB0YWcgbmFtZXMKLQkgIFNhbml0aXplIHRoZSB0YWcgbmFtZXMgYmVmb3JlIHR1cm5pbmcgdGhlbSBpbnRvIGEgc3RydWN0dXJlIG5hbWUuIFdlIGNhbiBvbmx5Ci0JICBhZGQgYWxwaGFudW1lcmljIHZhbHVlcyBhcyB0aGUgc3RydWN0dXJlIG5hbWUuCi0KLTIwMDktMDMtMDggMTI6MDQ6MjIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gZmZhNzM4ZCB0byA3MDMyMTYzCi0KLTIwMDktMDMtMDggMTE6MTk6NTYgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gM2YxM2U0ZSB0byBmZmE3MzhkCi0KLTIwMDktMDMtMDcgMTE6NDU6MzUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gM2M3NDU2YiB0byAzZjEzZTRlCi0KLTIwMDktMDMtMDcgMTA6NDU6NDAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gNTdjODNmMiB0byAzYzc0NTZiCi0KLTIwMDktMDMtMDYgMjE6NTY6MjYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMnNyYzogZml4IHBhZHMsIHNvIHRoYXQgdGhleSBhcmUgc3Vic2V0IG9mIHRlbXBsYXRlIGNhcHMKLQkgIERvIG5vdCBhZGQgdz0wIHwgaD0wLiBXaGVuIHdlIGNhbid0IGdldCBhIGZyYW1lcmF0ZSBhZGQgZnJhY3Rpb24gcmFuZ2UuCi0KLTIwMDktMDMtMDUgMTQ6MDg6MTQgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IGZpeCByYW5nZSBwYXJzaW5nCi0JICBGaXggcGFyc2luZyBvZiB0aGUgcmFuZ2UgaGVhZGVycy4KLQotMjAwOS0wMi0xMCAxNzoyMDo1NyArMDAwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc2lyZW5kZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVucGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNpcmVucGF5Lmg6Ci0JICBNb3ZlIHNpcmVuIHJ0cCBwYXkvZGVwYXkgZnJvbSBnc3QtcGx1Z2lucy1mYXJzaWdodAotCi0yMDA5LTAzLTA0IDE2OjI1OjM0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggbWVtb3J5IGxlYWsgaW4gY2xvc2UKLQkgIENsb3NlIHRoZSBjb25uZWN0aW9uIGV2ZW4gd2hlbiB3ZSBmYWlsIHRvIHNlbmQgdGhlIHRlYXJkb3duIG1lc3NhZ2UuCi0JICBVc2UgdGhlIGNvbm5lY3Rpb24gdXJsICh3aGljaCBpcyBhIGNvcHkgb2YgdGhlIHNyYyB1cmwpLgotCi0yMDA5LTAzLTA0IDE2OjE1OjA1ICswMTAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBjaGVjazogZ3N0LXBsdWdpbnMtZ29vZC5zdXBwIG5lZWRzIHRvIGJlIGRpc3RyaWJ1dGVkLgotCi0yMDA5LTAzLTA0IDEyOjI5OjUwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBmaXggZG8tcnRjcCBwcm9wZXJ0eSBkZXNjcmlwdGlvbgotCSAgLS0tCi0KLTIwMDktMDMtMDMgMTI6MjA6MjcgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgc291cGh0dHBzcmM6IEV4cG9zZSB0aGUgU291cFNlc3Npb24gJ3RpbWVvdXQnIHByb3BlcnR5LgotCi0yMDA5LTAzLTAyIDE1OjA3OjI0ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiAuZ2l0aWdub3JlOgotCSAgLmdpdGlnbm9yZTogSWdub3JlIHRoZSBtNC8gZGlyZWN0b3J5Ci0KLTIwMDktMDMtMDIgMTc6MTg6NTUgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgcnRwbXA0dnBheTogQWRkIHN1cHBvcnQgZm9yIG1vcmUgZm9ybWF0cwotCSAgSGFjayBhcm91bmQgc2hvcnQgaGVhZGVyIG1wZWc0IHZpZGVvIGZpbGVzIGFuZCBwdXQgdGhlIHNob3J0IGhlYWRlciBhcyB0aGUKLQkgIGNvbmZpZyBzdHJpbmcuCi0JICBGaXhlcyAjNTcyNTUxLgotCi0yMDA5LTAzLTAyIDE2OjA4OjIzICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBhZGQgc3VwcG9ydCBmb3IgaHR0cCB0dW5uZWxpbmcKLQkgIEFkZCBzdXBwb3J0IGZvciBodHRwIHR1bm5lbGluZyBhbmQgYSBuZXcgcnRzcGg6Ly8gdXJpIGZvciBpdC4KLQkgIFNlZSAjNTczMTczLgotCi0yMDA5LTAzLTAyIDA5OjQzOjMwICswMTAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2Ygc3NoOi8vdGhvbWFzdnNAZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QKLQotMjAwOS0wMy0wMiAwODo0MToxNSArMDEwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgQWRkL2NsYXJpZnkvZml4IHNvbWUgbG9nZ2luZy4KLQotMjAwOS0wMy0wMSAxMjo0NzozNyAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAaHV0Y2gtMi5sb2NhbD4KLQotCSogc3lzL29zeHZpZGVvL01ha2VmaWxlLmFtOgotCSAgUmVtb3ZlIGhhcmRjb2RlZCBkZWZpbml0aW9uIG9mIE9CSkMKLQotMjAwOS0wMy0wMSAxOTo1NToyNiArMDEwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkLnNpbW9uc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIFdhaXQgZm9yIGEgZnJhbWUgdG8gYmVjb21lIGF2YWlsYWJsZSBiZWZvcmUgY2FwdHVyaW5nIGl0Ci0JICBVc2UgR3N0UG9sbCB0byB3YWl0IGZvciB0aGUgZmQgb2YgdGhlIHZpZGVvIGRldmljZSB0byBiZWNvbWUgcmVhZGFibGUgYmVmb3JlCi0JICB0cnlpbmcgdG8gY2FwdHVyZSBhIGZyYW1lLiBUaGlzIHNwZWVkcyB1cCBzdG9wcGluZyB2NGwyc3JjIGEgbG90IGFzIGl0IG5vCi0JICBsb25nZXIgaGFzIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyYW1lLCBlc3BlY2lhbGx5IHdoZW4gY2FwdHVyaW5nIHdpdGggbG93Ci0JICBmcmFtZXJhdGVzIG9yIHdoZW4gdGhlIHZpZGVvIGRldmljZSBqdXN0IG5ldmVyIGdlbmVyYXRlcyBhIGZyYW1lICh3aGljaCBzZWVtcyBhCi0JICBjb21tb24gaXNzdWUgZm9yIHV2Y3ZpZGVvIGRldmljZXMpCi0JICBGaXhlcyBidWcgIzU2MzU3NC4KLQotMjAwOS0wMi0xNCAxNzo1NjowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6Ci0JICBhbGF3ZGVjLCBtdWxhd2RlYzogZGVtb3RlIHNvbWUgZGVidWcgbWVzc2FnZXMgZnJvbSBFUlJPUiB0byBXQVJOSU5HIG9yIERFQlVHCi0JICBOb24tb2sgZmxvdyByZXR1cm5zIG1heSBoYXBwZW4gZm9yIGEgdmFyaWV0eSBvZiBwZXJmZWN0bHkgbGVnaXRpbWF0ZSBhbmQgZXhwZWN0ZWQgcmVhc29ucwotCSAgKHRlbXBvcmFyaWx5IG5vdCBsaW5rZWQsIHNlZWtpbmcsIHBpcGVsaW5lIHNodXRkb3duKSwgc28gd2UgcmVhbGx5IHNob3VsZG4ndCBzcGV3IEVSUk9SCi0JICBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgaW4gdGhvc2UgY2FzZXMuIEZpeGVzICM1NzA3ODEuIChTZWVtcyBsaWtlIHNvbWVvbmUgYWxyZWFkeSB0b29rCi0JICBjYXJlIG9mIHNvbWUgb2YgdGhlc2UuKQotCi0yMDA5LTAyLTI4IDE1OjI2OjAwICswMjAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgcmd2b2x1bWU6IEltcHJvdmUgbG9nIG1lc3NhZ2UgZm9yIHBlYWsgdmFsdWVzID4xLjAgYnkgY2xhbXBpbmcgZXhwbGljaXRseS4KLQotMjAwOS0wMi0yNyAyMzoyNTozMiAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSAgRml4IHRoZSBmaWVsZCBkb21pbmFuY2UKLQkgIFBBTCBpcyBURkYsIE5UU0MgaXMgQkZGLiAgU29tZSBkYXkgSSB3aWxsIGxlYXJuIHRvIGtlZXAgdGhpcwotCSAgc3RyYWlnaHQuCi0KLTIwMDktMDItMjcgMjA6NDA6MzEgKzAxMDAgIExSTiA8bHJuMTk4NkBnbWFpbC5jb20+Ci0KLQkqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JICBkaXJlY3RkcmF3c2luazogRml4IHR5cGUgbWlzbWF0Y2hlcwotCSAgRml4ZXMgYnVnICM1NzMzNDMuCi0KLTIwMDktMDItMjcgMjA6Mjg6MjcgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2Ygc3NoOi8vZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QKLQotMjAwOS0wMi0yNyAyMDoyNDo1MyArMDEwMCAgTFJOIDxscm4xOTg2QGdtYWlsLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5jOgotCSAgdWRwOiBEb24ndCBzZXQgZXJybm8gdG8gRUFGTk9TVVBQT1JUIHVuY29uZGl0aW9uYWxseQotCSAgRml4ZXMgYnVnICM1NzMzNDIuCi0KLTIwMDktMDItMjcgMTE6MTc6NTAgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgcmd2b2x1bWU6IGlnbm9yZSBvdXQtb2YtcmFuZ2UgcGVhayB2YWx1ZXMKLQkgIElmIHRoZSBwZWFrIHZhbHVlIGlzID4gMSAoYW5kIHRodXMgbm9uc2Vuc2ljYWwpIGlnbm9yZSBpdC4gUHJldmVudHMKLQkgIHJndm9sdW1lIHJlZHVjaW5nIHZvbHVtZSB0byBlZmZlY3RpdmVseSBzaWxlbnQgb24gZmlsZXMgd2l0aCBib2d1cyBwZWFrCi0JICB2YWx1ZXMuCi0KLTIwMDktMDItMjcgMTM6Mjk6NDEgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIHdhdnBhcnNlOiBGaXggU0VFSyBldmVudCBoYW5kbGluZyBpbiBwdXNoIG1vZGUsIGFuZCBTRUVLQUJMWSBxdWVyeSBoYW5kbGluZwotCSAgU3RhbmRhcmQgcHVsbCBtb2RlIGxvb3AgYmFzZWQgU0VFSyBoYW5kbGluZyBmYWlscyBpbiBwdXNoIG1vZGUsCi0JICBzbyBjb252ZXJ0IHRoZSBTRUVLIGV2ZW50IGFwcHJvcHJpYXRlbHkgYW5kIGRpc3BhdGNoIHRvIHVwc3RyZWFtLgotCSAgQWxzbyBjYXRlciBmb3IgTkVXU0VHTUVOVCBldmVudCBoYW5kbGluZywgYW5kIHByb3Blcmx5IGluZm9ybQotCSAgZG93bnN0cmVhbSBhbmQgYXBwbGljYXRpb24gb2YgU0VFS0FCTEUgY2FwYWJpbGl0aWVzLCBkZXBlbmRpbmcKLQkgIG9uIHNjaGVkdWxpbmcgbW9kZSBhbmQgdXBzdHJlYW0uCi0KLTIwMDktMDItMjcgMTE6MDQ6MDggKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgbWF0cm9za2FkZW11eDogUmVtb3ZlIGdzdF91dGlsX2R1bXBfbWVtKCkgY2FsbHMuCi0KLTIwMDktMDItMjYgMTk6MDc6MzUgKzAxMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGZpeCBTRUVLIGV2ZW50IGhhbmRsaW5nIGluIHB1c2ggbW9kZQotCSAgV2hlbiBpbiBwdXNoIG1vZGUgd2Ugc2hvdWxkIG5vdCB0cnkgdG8gaGFuZGxlIHRoZSBTRUVLIGV2ZW50IGFzIHRoZXJlJ3MKLQkgIG5vIGNvZGUgdG8gaGFuZGxlIGl0IHByb3Blcmx5LiBQcm9wYWdhdGUgdXBzdHJlYW0uCi0KLTIwMDktMDItMjYgMTk6MDU6MDYgKzAxMDAgIFBhdHJpY2sgUmFkaXppIDxwYXRyaWNrIGRvdCByYWRpemkgYXQgYXhpcyBkb3QgY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBydHNwc3JjOiBhZGQgdGhlIC5oIGZpbGUgY2hhbmdlIHRvbwotCSAgQWRkIHRoZSAuaCBmaWxlIGNoYW5nZSBmb3IgdGhlIG5ldyBwcm9wZXJ0eS4KLQotMjAwOS0wMi0yNiAxOTowMzo1MiArMDEwMCAgUGF0cmljayBSYWRpemkgPHBhdHJpY2sgZG90IHJhZGl6aSBhdCBheGlzIGRvdCBjb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIHJ0c3BzcmM6IGFkZCBwcm9wZXJ0eSB0byBkaXNhYmxlIFJUQ1AKLQkgIFNvbWUgb2xkIHNlcnZlcnMgZG9uJ3QgbGlrZSB1cyBkb2luZyBSVENQIGFuZCB0aHVzIHdlIG5lZWQgYSBwcm9wZXJ0eSB0byBkaXNhYmxlCi0JICBpdC4gU2VlICM1NzMxNzMuCi0KLTIwMDktMDItMjYgMTM6MTk6MzEgKzAxMDAgIEphbiBTbW91dCA8amFuIGRvdCBzbW91dCBhdCBnbWFpbCBkb3QgY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICB1ZHA6IGZpeCBnc3RfdWRwX3NldF9sb29wX3R0bCgpIGFnYWluCi0JICBGaXggdGhlIGdzdF91ZHBfc2V0X2xvb3BfdHRsKCkgZnVuY3Rpb24gdGhhdCB3YXMgY29tbWVudGVkIG91dCBpbiBhCi0JICBwcmV2aW91cyBjb21taXQuIFNlZSAjNTczMTE1LgotCi0yMDA5LTAyLTI2IDEzOjA2OjE3ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgcnRwdnJhd2RlcGF5OiBmYWlsIG9uIGludGVybGFjZWQgdmlkZW8KLQkgIEZhaWwgb24gaW50ZXJsYWNlZCB2aWRlbyB1bnRpbCB3ZSBzdXBwb3J0IGl0LgotCi0yMDA5LTAyLTI2IDEzOjAwOjU4ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIHJ0cHZyYXdwYXk6IGZhaWwgb24gaW50ZXJsYWNlZCB2aWRlbwotCSAgRGV0ZWN0IGFuZCBmYWlsIHdoZW4gdHJ5aW5nIHRvIHBheWxvYWQgaW50ZXJsYWNlZCB2aWRlby4KLQotMjAwOS0wMi0yNSAyMDo0NzoxNSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgQ2hhbmdlIGhvdyB3aW4zMi9jb21tb24vY29uZmlnLmggaXMgdXBkYXRlZAotCSAgR2VuZXJhdGUgd2luMzIvY29tbW9uL2NvbmZpZy5oLW5ldyBkaXJlY3RseSBmcm9tIGNvbmZpZy5oLmluLAotCSAgdXNpbmcgc2hlbGwgdmFyaWFibGVzIGluIGNvbmZpZ3VyZSBhbmQgc29tZSBoYXJkLWNvZGVkIGluZm9ybWF0aW9uLgotCSAgQ2hhbmdlIHRvcC1sZXZlbCBtYWtlZmlsZSBzbyB0aGF0ICdtYWtlIHdpbjMyLXVwZGF0ZScgY29waWVzIHRoZQotCSAgZ2VuZXJhdGVkIGZpbGUgdG8gd2luMzIvY29tbW9uL2NvbmZpZy5oLCB3aGljaCB3ZSBrZWVwIGluIHNvdXJjZQotCSAgY29udHJvbC4gIEl0J3Mga2VwdCBpbiBzb3VyY2UgY29udHJvbCBzbyB0aGF0IHRoZSBnaXQgdHJlZSBpcwotCSAgYnVpbGRhYmxlIGZyb20gVlMuCi0JICBUaGlzIGNoYW5nZSBpcyBzaW1pbGFyIHRvIHRoZSBvbmUgcmVjZW50bHkgYXBwbGllZCB0byBHU3RyZWFtZXIKLQkgIGFuZCBnc3QtcGx1Z2lucy1nb29kLiAgVGhlIHByZXZpb3VzIGNvbmZpZy5oIGZpbGUgaW4gLWdvb2Qgd2FzIGluCi0JICBwcmV0dHkgYmFkIHNoYXBlLCBzbyB1bmxpa2UgY29yZSBhbmQgYmFzZSwgSSBkaWRuJ3QgYXR0ZW1wdCB0bwotCSAgbGVhdmUgaXQgc3RyaWN0bHkgdGhlIHNhbWUsIGJ1dCBmaXhlZCBpdCBhcyBuZWNlc3NhcnkuICBOZWVkcwotCSAgdGVzdGluZyBJIGNhbm5vdCBkbyBteXNlbGYuCi0KLTIwMDktMDItMjUgMTk6NTg6MjkgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCSAgZHZkZWM6IEFkZCBpbnRlcmxhY2luZyBpbmZvIHRvIGNhcHMgYW5kIGJ1ZmZlcnMKLQotMjAwOS0wMi0yNSAxNDo1NzozMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBidWlsZDogVXBkYXRlIHNoYXZlIGluaXQgc3RhdGVtZW50IGZvciBjaGFuZ2VzIGluIGNvbW1vbi4gQnVtcCBjb21tb24uCi0KLTIwMDktMDItMjUgMTQ6MDE6MjYgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IGZpeCBjb21waWxhdGlvbgotCSAgRml4IGNvbXBpbGF0aW9uIG9uIHN5c3RlbXMgTVNHX0VSUlFVRVVFIGFuZCBJUF9SRUNWRVJSLgotCi0yMDA5LTAyLTE5IDIwOjE0OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAganBlZ2VuYzogZXJyb3Igb3V0IGluc3RlYWQgb2YgY3Jhc2hpbmcgaWYgbm8gY2FwcyBoYXZlIGJlZW4gc2V0Ci0JICBEb24ndCBjcmFzaCBpZiB3ZSByZWNlaXZlIGEgYnVmZmVyIHdpdGhvdXQgY2Fwcy4gRml4ZXMgIzU3MjQxMy4KLQotMjAwOS0wMi0yNSAxMTozNTozMSArMDEwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IE1ha2Ugc3VyZSB0aGUgc29ja2FkZHIgbGVuZ3RoIHVzZWQgZm9yIHJlY3Zmcm9tKCkgaXMgYmlnIGVub3VnaC4KLQkgIFByZXZpb3VzbHkgdGhlIHNvY2thZGRyIGxlbmd0aCB1c2VkIGZvciByZWN2ZnJvbSgpIHdhcyBjYWxjdWxhdGVkIGFzCi0JICBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcikuIEhvd2V2ZXIsIHRoaXMgaXMgdG9vIGxpdHRsZSB0byBob2xkIGFuIElQdjYKLQkgIGFkZHJlc3MsIHNvIHRoZSBmdWxsIHNpemUgb2YgdGhlIGdzdF9zb2NrYWRkciB1bmlvbiBzaG91bGQgYmUgdXNlZAotCSAgaW5zdGVhZC4KLQotMjAwOS0wMi0yNSAxMTozMjoyOCArMDEwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB1ZHBzcmM6IFVuaWZ5IHRoZSB1c2Ugb2YgdW5pb24gZ3N0X3NvY2thZGRyLgotCi0yMDA5LTAyLTI1IDExOjMyOjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA5Y2Y4YzliIHRvIGE2Y2U1YzYKLQotMjAwOS0wMi0yNSAxMjowNToyMiArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYXZpZGVtdXg6IGF2b2lkIGNyYXNoaW5nIG9uIHN1YnRpdGxlcwotCSAgQXZvaWQgYSBjcmFzaCBpbiBhdmkgd2l0aCBzdWJ0aXRsZXMgYnkgb25seSBkZXJlZmVyZW5jaW5nIHRoZSB2aWRlbyBkZXNjcmlwdGlvbgotCSAgd2hlbiB3ZSBhY3R1YWxseSBhcmUgZGVhbGluZyB3aXRoIHZpZGVvIGluIHRoZSBfaW52ZXJ0IGZ1bmN0aW9uLgotCi0yMDA5LTAyLTI1IDExOjQ1OjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgZG9jczogdmFyaW91cyBkb2MgZml4ZXMKLQkgIE5vIHNob3J0LWRlc2MgYXMgd2UgaGF2ZSB0aGVtIGluIHRoZSBlbGVtZW50IGRldGFpbHMuCi0JICBBbHNvIGtlZXAgdGhpbmdzIChNYWtlZmlsZS5hbSBhbmQgc2VjdGlvbnMudHh0KSBzb3J0ZWQuCi0JICBSZXdvcmQgYW1iaWdvdXMgcmV0dXJucy4gTm8gdGV4dCBhZnRlciBzaW5jZSBwbGVhc2UuCi0KLTIwMDktMDItMjQgMTc6NTg6MzIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIHVkcDogRml4IHN0cmljdC1hbGlhc2luZyB3YXJuaW5ncyBmcm9tIGdjYyA0LjQuMAotCSAgRml4IHN0cmljdCBhbGlhc2luZyB3YXJuaW5ncyBieSBkZWZpbmluZyBhIHVuaW9uIG9uIHRoZSBkaWZmZXJlbnQKLQkgIHNvY2thZGRyIHN0cnVjdHMgdGhhdCB3ZSBuZWVkLgotCi0yMDA5LTAyLTI0IDE3OjM1OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICBydHA6IEZpeCBjb21waWxlciB3YXJuaW5nIGluIGgyNjQgcGF5bG9hZGVyCi0JICBGaXggYW4gdW5kZWZpbmVkIGJlaGF2aW91ciB3YXJuaW5nIGZyb20gZ2NjIDQuNC4wCi0JICBQYXRjaCBCeTogVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0JICBGaXhlczogIzU3MDk5NQotCSAgU2lnbmVkLU9mZi1CeTogSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLTIwMDktMDItMjIgMTc6MjM6MDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgVXNlIHNoYXZlIGZvciB0aGUgYnVpbGQgb3V0cHV0Ci0KLTIwMDktMDItMjQgMTQ6NTU6MjggKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZ2NvbmYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmYuYzoKLQkqIGV4dC9nY29uZi9nc3RnY29uZi5oOgotCSogZXh0L2djb25mL2dzdGdjb25mZWxlbWVudHMuaDoKLQkgIGdjb25mOiBSZW5hbWUgZ2NvbmYuW2NoXSB0byBnc3RnY29uZi5bY2hdIHRvIHByZXZlbnQgbmFtZSBjb25mbGljdHMKLQotMjAwOS0wMi0yNCAxNDo0MToyNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkgIHF0ZGVtdXg6IEFsc28gdXNlICIoYylpbmYiIHRvIGZpbGwgdGhlIGNvbW1lbnQgdGFnCi0KLTIwMDktMDEtMjYgMTE6MDY6MTMgKzAxMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBydHNwc3JjOiBwZXJmb3JtIFVEUCBTRVRVUCBhY2NvcmRpbmcgdG8gTVMgUlRTUCBzcGVjCi0JICBNUyBSVFNQIHNwZWMgc3RhdGVzIHRoYXQgdGhlIFVEUCBwb3J0IHBhaXIgdXNlZCBpbiBzdWJzZXF1ZW50IFNFVFVQCi0JICByZXF1ZXN0cyBmb3IgdmFyaW91cyBzdHJlYW1zIG11c3QgYmUgaWRlbnRpY2FsIChzaW5jZSB0aGVyZSB3aWxsIGFjdHVhbGx5Ci0JICBiZSBvbmx5IDEgc3RyZWFtIG9mIG11eGVkIGFzZiBwYWNrZXRzKS4gIEZvbGxvd2luZyB0cmFkaXRpb25hbCBzcGVjcyBhbmQKLQkgIHVzaW5nIGRpZmZlcmVudCBwb3J0IHBhaXJzIGluIHRoZSBTRVRVUHMgZm9yIHNlcGFyYXRlIHN0cmVhbXMgd2lsbCByZXN1bHQKLQkgIGluIGFsbCBidXQgdGhlIGZpcnN0IG9uZSBmYWlsaW5nIGFuZCBvbmx5IG9uZSBzdHJlYW0gYmVpbmcgc3RyZWFtZWQuCi0JICBTbywgaW4gYXBwcm9wcmlhdGUgY2lyY3Vtc3RhbmNlcywgcmV0cnkgVURQIFNFVFVQIHVzaW5nIHByZXZpb3VzbHkgdXNlZAotCSAgcG9ydCBwYWlyLiAgRml4ZXMgIzU1MjY1MC4KLQotMjAwOS0wMi0yMyAyMDo0OTozNyArMDEwMCAgQXVyZWxpZW4gR3JpbWF1ZCA8Z3N0ZWx6eiBhdCB5YWhvbyBkb3QgZnI+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBSZWFkIElDTVAgZXJyb3IgbWVzc2FnZXMgaW5zdGVhZCBvZiBsb29waW5nCi0JICBXaGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggY29ubmVjdGVkIHNvY2tldHMgc2hhcmVkIGJldHdlZW4gYSB1ZHBzcmMgYW5kIGEgdWRwc2luawotCSAgd2UgbWlnaHQgcmVjZWl2ZSBJQ01QIGNvbm5lY3Rpb24gcmVmdXNlZCBlcnJvciBtZXNzYWdlcyBpbiB1ZHBzcmMgdGhhdCB3aWxsCi0JICBjYXVzZSBpdCB0byBnbyBpbnRvIGEgYnVyc3R5IGxvb3AgYmVjYXVzZSB0aGUgcG9sbCByZXR1cm5zIHJpZ2h0IGF3YXkgd2l0aG91dCBhCi0JICBtZXNzYWdlIHRvIHJlYWQuCi0JICBJbnN0ZWFkIG9mIGxvb3BpbmcsIHJlYWQgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgZXJyb3IgcXVldWUgaW4gdWRwc3JjLgotCSAgRml4ZXMgIzU2Nzg1Ny4KLQotMjAwOS0wMi0yMyAxOTo1Mzo1OCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgQ29uZGl0aW9uYWxseSBjb21waWxlIGNvZGUgZm9yIFlWWVUKLQkgIE9ubHkgY29tcGlsZSB0aGUgY29kZSBmb3IgdGhlIFlWWVUgZm9ybWF0IHdoZW4gdGhlIGZvcm1hdCBpcyBhY3R1YWxseSBkZWZpbmVkLgotCSAgU3BvdHRlZCBieSB0bWF0dGggb24gSVJDLgotCi0yMDA5LTAyLTE3IDExOjAxOjQ3IC0wODAwICBMZXZlbnRlIEZhcmthcyA8bGZhcmthc0BsZmFya2FzLm9yZz4KLQotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgdjRsMnNyYzogTWFrZSBzb3J0X2J5X2ZyYW1lX3NpemUgY29uZGl0aW9uYWxseSBjb21waWxlZAotCSAgc29ydF9ieV9mcmFtZV9zaXplIGlzIGRlY2xhcmVkIHN0YXRpYyBhbmQgb25seSB1c2VkIGluc2lkZQotCSAgYW4gaWZkZWYsIHNvIHVzZSB0aGUgc2FtZSBpZmRlZiB0byBkZWZpbmUgdGhlIGZ1bmN0aW9uLiAgRml4ZXMgIzU3MjE4NQotCSAgU2lnbmVkLW9mZi1ieTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLTIwMDktMDItMjMgMTc6MDU6NDMgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIEFkZCBZVllVIGZvcm1hdCB0byBjYXBzCi0JICBBZGQgWVZZVSBmb3JtYXQgdG8gdGhlIGNhcHMuIFdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gaGFuZGxlIHRoZXNlIGNhcHMgeWV0LAotCSAgdGhvdWdoLgotCi0yMDA5LTAyLTIzIDE1OjQ4OjQxICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmg6Ci0JICBTb21lIGNsZWFudXBzCi0JICBSZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzLgotCSAgQXZvaWQgYSB1c2VsZXNzIF9yZXN5bmMgY2FsbC4KLQkgIENvcnJlY3RseSB1c2UgYSBnYm9vbGVhbi4KLQotMjAwOS0wMi0yMyAxNTo0Mzo1MSArMDEwMCAgV2FpLU1pbmcgSG8gPHdhaW1pbmcgYXQgYWlsdXJvcG9kYSBkb3QgbmV0PgotCi0JKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgIEFsd2F5cyBhZGQgUFBTIHRvIHRoZSBzcHJvcC1wYXJhbWV0ZXJzLXNldAotCSAgUmV3b3JrIHRoZSBwYXJzaW5nIGNvZGUgdGhhdCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgZHJvcHBlZCB0aGUgUFBTIGZyb20KLQkgIHRoZSBzcHJvcC1wYXJhbWV0ZXJzLXNldC4KLQkgIEZpeGVzICM1NzI4NTQuCi0KLTIwMDktMDItMjMgMTI6MTQ6MjMgKzAxMDAgIEFybm91dCBWYW5kZWNhcHBlbGxlIDxhcm5vdXQgYXQgbWluZCBkb3QgYmU+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIERvbid0IGRvIGNyYXp5IHRoaW5ncyB3aXRoIDAvMSBmcmFtZXJhdGVzCi0JICBXZSB1c2UgMC8xIGZyYW1lcmF0ZXMgdG8gbWFyayB2YXJpYWJsZSBmcmFtZXJhdGVzIGFuZCBtYXRyb3NrYW11eCBzaG91bGQgbm90IHRyeQotCSAgdG8gY2FsY3VsYXRlIGEgZnJhbWUgZHVyYXRpb24gZm9yIGl0LgotCSAgRml4ZXMgIzU3MTI5NC4KLQotMjAwOS0wMi0yMyAxMTo0NTo1MCArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogY29uZmlndXJlLmFjOgotCSAgUmVxdWlyZSBuZXdlciBnc3QtcC1iIGZvciB0aGUgUlRTUCBleHRlbnNpb25zLgotCSAgLS0KLQotMjAwOS0wMi0yMyAxMTo0Mjo1MyArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgQ2FsbCBuZXcgcmVjZWl2ZV9yZXF1ZXN0IG1ldGhvZAotCSAgQ2FsbCB0aGUgcmVjZWl2ZV9yZXF1ZXN0IGV4dGVuc2lvbiBtZXRob2RzIHNvIHRoYXQgZXh0ZW5zaW9ucyBjYW4gaGFuZGxlIHRoZQotCSAgc2VydmVyIHJlcXVlc3QgaWYgdGhleSB3YW50LgotCi0yMDA5LTAyLTIzIDExOjEzOjMwICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwZXh0LmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwZXh0Lmg6Ci0JICBBZGQgbWV0aG9kIGZvciBoYWRsaW5nIHNlcnZlciByZXF1ZXN0cwotCSAgQWRkIG1ldGhvZCB0byBoYW5kbGUgc2VydmVyIHJlcXVlc3RzIG9uIHRoZSBsaXN0IG9mIFJUU1AgZXh0ZW5zaW9ucy4KLQotMjAwOS0wMi0xMyAxNDozOToyOSArMDEwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkgIERvbid0IHVzZSBHU1RfRVJST1IgZm9yIG5vbi1lcnJvciBjYXNlcy4KLQkgIFR1cm4gYSBHU1RfRVJST1IgbGluZSBpbnRvIGEgR1NUX0RFQlVHIGxpbmUgc28gdGhhdCB3ZSBkb24ndCBzcGFtIHRoZSBsb2cgd2l0aAotCSAgZXJyb3JzLiBGaXhlcyAjNTcwNzgxLgotCi0yMDA5LTAyLTIyIDE5OjMwOjMyICswMTAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmg6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuaDoKLQkgIGdjb25mdmlkZW8oc3JjfHNpbmspOiBEaXNjb25uZWN0IEdDb25mIG5vdGlmaWNhdGlvbnMKLQkgIEZpeGVzIGJ1ZyAjNTcxMzIxLgotCi0yMDA5LTAyLTIyIDE5OjI1OjM5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBtYXRyb3NrYWRlbXV4OiBVbnJlZiB0aGUgYnVmZmVyIGFuZCBub3QgdGhlIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBidWZmZXIKLQotMjAwOS0wMi0yMiAxODo0NzozNSArMDEwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzoKLQkgIGFsYXcvbXVsYXc6IEltcGxlbWVudCBfZ2V0Y2FwcyBmdW5jdGlvbiBmb3IgYWxhdy9tdWxhdyBkZWNvZGVycwotCSAgRml4ZXMgYnVnICM1NzIzNTguCi0KLTIwMDktMDItMjIgMTg6NDY6MDMgKzAxMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JICBhbGF3L211bGF3OiBEb24ndCByZXF1aXJlIGJvdGgsIHJhdGUgYW5kIGNoYW5uZWwsIHRvIGJlIHNldCBpbiBfZ2V0Y2FwcwotCSAgRml4ZXMgYnVnICM1NzIzNTguCi0KLTIwMDktMDItMjIgMTg6MzI6MDIgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBhdmlkZW11eDogRml4IGFsaWdubWVudCBpc3N1ZXMgYnkgdXNpbmcgR1NUX1JFQURfKgotCSAgUmVhZGluZyBpbnRlZ2VycyBmcm9tIHJhbmRvbSBtZW1vcnkgYWRkcmVzc2VzIHdpbGwgcmVzdWx0Ci0JICBpbiBTSUdCVVMgb24gc29tZSBhcmNoaXRlY3R1cmVzIGlmIHRoZSBtZW1vcnkgYWRkcmVzcwotCSAgaXMgbm90IGNvcnJlY3RseSBhbGlnbmVkLiBUaGlzIGNhbiBoYXBwZW4gYXQgdHdvCi0JICBwbGFjZXMgaW4gYXZpZGVtdXggc28gd2Ugc2hvdWxkIHVzZSBHU1RfUkVBRF9VSU5UMzJfTEUKLQkgIGFuZCBmcmllbmRzIGhlcmUuIEZpeGVzIGJ1ZyAjNTcyMjU2LgotCi0yMDA5LTAyLTIyIDE4OjA4OjU5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JICBwdWxzZW1peGVyOiBEb24ndCB1c2UgZ19hdG9taWNfaW50XyhnZXR8c2V0KSBmb3IgYWNjZXNzaW5nIHRoZSBtaXhlciB0cmFjayBmbGFncwotCSAgZ19hdG9taWNfaW50XyhnZXR8c2V0KSBvbmx5IHdvcmsgb24gaW50cyBhbmQgdGhlIGZsYWdzIGFyZQotCSAgYW4gZW51bSAod2hpY2ggb24gbW9zdCBhcmNoaXRlY3R1cmVzIGlzIHN0b3JlZCBhcyBhbiBpbnQpLgotCSAgQWxzbyB0aGUgd2F5IHRoZSBmbGFncyB3ZXJlIGFjY2Vzc2VkIGF0b21pY2FsbHkgd291bGQgc3RpbGwKLQkgIGxlYXZlIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gYW5kIHdlIGRvbid0IGRvIGl0IGluIGFueQotCSAgb3RoZXIgbWl4ZXIgdHJhY2sgaW1wbGVtZW50YXRpb24sIGxldCBhbG9uZSBhdCBhbnkgb3RoZXIKLQkgIHBsYWNlIHdoZXJlIGFuIGludGVnZXIgY291bGQgYmUgY2hhbmdlZCBmcm9tIGRpZmZlcmVudAotCSAgdGhyZWFkcy4gUmVtb3ZpbmcgdGhlIGdfYXRvbWljX2ludF8oZ2V0fHNldCkgd2lsbCBvbmx5Ci0JICBpbnRyb2R1Y2UgYSBuZXcgcmFjZSBjb25kaXRpb24gb24gYXJjaGl0ZWN0dXJlcyB3aGVyZQotCSAgaW50ZWdlcnMgY291bGQgYmUgaGFsZi13cml0dGVuIHdoaWxlIHJlYWRpbmcgdGhlbQotCSAgd2hpY2ggc2hvdWxkbid0IGJlIHRoZSBjYXNlIGZvciBhbnkgbW9kZXJuIGFyY2hpdGVjdHVyZQotCSAgYW5kIGlmIHdlIHJlYWxseSBjYXJlIGFib3V0IHRoaXMgd2UgbmVlZCB0byB1c2UKLQkgIGdfYXRvbWljX2ludF8oZ2V0fHNldCkgYXQgbWFueSBvdGhlciBwbGFjZXMgdG9vLgotCSAgQXBhcnQgZnJvbSB0aGF0IGdfYXRvbWljX2ludF8oc2V0fGdldCkgd2lsbCByZXN1bHQgaW4KLQkgIGFsaWFzaW5nIHdhcm5pbmdzIGlmIHRoZWlyIGFyZ3VtZW50IGlzIGV4cGxpY2l0ZWx5Ci0JICBjYXN0ZWQgdG8gYW4gaW50ICouIEZpeGVzIGJ1ZyAjNTcxMTUzLgotCi0yMDA5LTAyLTIyIDE1OjUyOjA2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIEF1dG9tYXRpYyB1cGRhdGUgb2YgY29tbW9uIHN1Ym1vZHVsZQotCSAgRnJvbSA1ZDdjOWNjIHRvIDljZjhjOWIKLQotMjAwOS0wMi0yMiAxMjo0MTo1MyArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkgIGhkdjEzOTRzcmM6IERvbid0IHVzZSB2b2lkICogcG9pbnRlciBhcml0aG1ldGljCi0KLTIwMDktMDItMjEgMTE6MTM6NDMgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb21tb246Ci0JICBBdXRvbWF0aWMgdXBkYXRlIG9mIGNvbW1vbiBzdWJtb2R1bGUKLQkgIEZyb20gODBjNjI3ZCB0byA1ZDdjOWNjCi0KLTIwMDktMDItMjEgMTg6NDI6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjE0LjEKLQotMjAwOS0wMi0yMCAxODoxNjowMiAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIERvY3VtZW50IHJ0cGR0bWZkZXBheSBhIGJpdAotCi0yMDA5LTAyLTIwIDE3OjQxOjM3IC0wNTAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWYuYzoKLQkgIE1vdmVkIGR0bWYgZWxlbWVudHMgZnJvbSBnc3QtcGx1Z2lucy1mYXJzaWdodCB0byAtYmFkCi0KLTIwMDktMDItMjAgMTc6NDA6NTcgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5oOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5Lmg6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmg6Ci0JICBGaXggdXAgZG9jdW1lbnRhdGlvbiBibG9icyBTR01MCi0KLTIwMDktMDItMjAgMTc6Mzc6NDMgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZi5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5oOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmNvbW1vbi5oOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaDoKLQkgIFJlLWluZGVudCB0byBHc3Qgc3R5bGUKLQotMjAwOS0wMi0xOCAxMzozMDo0NCAtMDUwMCAgTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlQHlhaG9vLmZyPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gTWlzc2luZyBmb3JtYXQgZGlyZWN0aXZlCi0KLTIwMDgtMTItMDQgMjE6MjE6NDQgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBBbGxvdyBzZXR0aW5nIGEgbWF4aW11bSBkdXJhdGlvbiB0byBhIFJUUCBEVE1GIGV2ZW50Ci0KLTIwMDgtMTItMDQgMjE6MTE6MTcgLTA1MDAgIE9saXZpZXIgQ3LDqnRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gSW1wcm92ZSB0aGUgbWluaW11bSBxdWFudGEgdG8gbWFrZSBpdCBpbXBvc3NpYmxlIGZvciB0aGUgZHVyYXRpb24gdG8gZmFsbCBkb3duIHRvIDAKLQotMjAwOC0xMi0wMSAxODozMTo0OCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEFsbG93IHNldHRpbmcgYSBtaW5pbXVtIHNpemUgb2YgYSBzb3VuZCBxdWFudGEgaW4gdGhlIGR0bWYgZGVwYXlsb2FkZXIKLQotMjAwOC0xMi0xMSAxNzo1NDoxOCAtMDUwMCAgT2xpdmllciBDcsOqdGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi8uZ2l0LWRhcmNzLWRpcjoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBSZW1vdmUgLmdpdC1kYXJjcy1kaXIgZmlsZXMKLQotMjAwOC0xMi0wMSAxNzozNzoxMCAtMDUwMCAgSMOldmFyZCBHcmFmZiA8aGF2YXJkLmdyYWZmQHRhbmRiZXJnLmNvbT4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gRG8gd2llcmQgY2FzdGluZyBvZiB0aGUgdm9sdW1lIHRvIG1ha2UgTVNWQyBoYXBweQotCi0yMDA4LTEwLTE1IDE2OjIxOjUwIC0wNDAwICBPbGl2aWVyIENyw6p0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBDbGFyaWZ5IHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAiZXZlbnQtdHlwZSIgZmllbGQgd2hlbiBzcGVjaWZ5aW5nIGR0bWYgZXZlbnRzCi0KLTIwMDgtMDctMjIgMjE6Mzk6MzggKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gUmVtb3ZlIGdfZGVidWdzCi0JICAyMDA4MDcyMjIxMzkzOC0zZTJkYy00NGE4MmQwMTdmZTY2ZjMxMTIzMDFjNDEwYWEwYjU0M2RlNjE1NmFkLmd6Ci0KLTIwMDgtMDYtMTMgMjM6NTc6MjMgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gVGFrZSByYXRlIGZyb20gdGhlIHBlZXJzIGNhcHMgaWYgcG9zc2libGUKLQkgIDIwMDgwNjEzMjM1NzIzLTNlMmRjLTE1NjkwZWU0MjcwOGM1MzllMWJlMTJlMjBlMDc2YTU2MTNmYWVhOTYuZ3oKLQotMjAwOC0wNi0xMyAyMzo0MTo0NCArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBQdXQgdGhlIHNhbXBsZSByYXRlIGluIGR0bWZzcmMgaW50byBhIHZhcmlhYmxlCi0JICAyMDA4MDYxMzIzNDE0NC0zZTJkYy1lNjAwNzA5NDNiZWM4MjliNzAzYjg4MjFjN2FhNDM1MWEwMmRlZWJlLmd6Ci0KLTIwMDgtMDYtMTMgMjM6MzA6MDYgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gVGFrZSB0aGUgY2xvY2stcmF0ZSBmcm9tIHRoZSBjYXBzIGluIHJ0cGR0bWZzcmMKLQkgIDIwMDgwNjEzMjMzMDA2LTNlMmRjLWE3ZDRlOTE4NjQzZjRmOGMxYmIyY2MyNjc4NTU4YzY1NDAyNTkyMGUuZ3oKLQotMjAwOC0wNC0yOCAyMjoyMjozNyArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL01ha2VmaWxlLmFtOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIExpbmsgbW9kdWxlcyB3aXRoIGxpYm0gd2hlcmUgcmVxdWlyZWQKLQkgIDIwMDgwNDI4MjIyMjM3LTNlMmRjLWIxZTkxMjBjMWU5Y2ExYTUxMGJmZDdjMjdlMmQ0NWYwZDRhMTI1MDQuZ3oKLQotMjAwOC0wNC0xMiAyMzo0NDoxOCArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gRml4IGJ5dGUgb3JkZXJpbmcgaXNzdWVzIHdpdGggZHRtZnNyYyBhbmQgcnRwZHRtZmRlcGF5Li4gdXNlIG9mIEdfU1RSSU5HSUZZIHRvIGF2b2lkIGVycm9yIG9uIE1TVkMKLQkgIDIwMDgwNDEyMjM0NDE4LTRmMGY2LTQ4MjhkMTYxM2RmY2Q1NjRhZmQyMzZkZmM4ZmI1N2EyOTkwOTJmODMuZ3oKLQotMjAwOC0wMy0yMCAxOToxNDozOCArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBGaXggY29weXJpZ2h0cyBhZ2FpbiwgcGVyIHNtY3YncyBhZHZpY2UuLgotCSAgMjAwODAzMjAxOTE0MzgtNGYwZjYtNjcxYzlkYjVkOTk2YTQ2MDFkZjAxN2NlYWI0YWY2ZDE2NDY5Yzk2Ni5negotCi0yMDA4LTAzLTE5IDIxOjE3OjMxICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIE1ha2UgaXQgY2xlYXIgdGhhdCBkdG1mc3JjIGFsc28gdGFrZXMgbmFtZWQgZXZlbnRzIGFzIGlucHV0Ci0JICAyMDA4MDMxOTIxMTczMS0zZTJkYy0yNmM3MjlmNmRjOGRiMjdlNzFjZjZiMjI2NDZhODE1MzBkYmY4NjJmLmd6Ci0KLTIwMDgtMDMtMjAgMTg6NDg6NDEgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIGRlYnVnIG1lc3NhZ2UgbWFkZSBpbnRvIGVycm9ycyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZXkgYXJlLi4uCi0JICAyMDA4MDMyMDE4NDg0MS00ZjBmNi04YTJkMjgzMjk3YjAyNzEzZGFkZTBhZTRhY2FhNWY2ZTBmNjdlYWNlLmd6Ci0KLTIwMDgtMDMtMjAgMTg6Mzk6MzcgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIENsZWFuIHVudXNlZCBzdHVmZi4uLgotCSAgMjAwODAzMjAxODM5MzctNGYwZjYtYmNiODQxY2RjMDdmOWU5Njc3NTEyZjRiNTBiNGI2NTlhNThjNjc4My5negotCi0yMDA4LTAzLTIwIDE4OjM5OjEyICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEZpeCBjb3B5cmlnaHRzCi0JICAyMDA4MDMyMDE4MzkxMi00ZjBmNi02ODkzNjVkNWE0MDY2MzJlM2QwODhmYWM3NGU0ZmI2ZjhhNGViMGVhLmd6Ci0KLTIwMDgtMDMtMjAgMDE6MTM6MDEgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL01ha2VmaWxlLmFtOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZi5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEFkZGluZyBzdXBwb3J0IGZvciBydHBkdG1mZGVwYXkKLQkgIDIwMDgwMzIwMDExMzAxLTRmMGY2LWQzNmE1ZDI0YmUyMDMzNmUzNmM0Nzk2ZDc1NDc2YzliNWVlMWE3ZTEuZ3oKLQotMjAwOC0wMy0xOSAxOTozMjo1MSArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBlbmNvZGluZyBuYW1lIGhhcyB0byBiZSB1cHBlci1jYXNlCi0JICAyMDA4MDMxOTE5MzI1MS0zZTJkYy0xNTgxYjMzYmU5YjQ4NmUzNWVjNDk0ODAwOTY3N2NjZDVmZmRjMDk4Lmd6Ci0KLTIwMDgtMDMtMjAgMDA6NTE6NDcgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZjb21tb24uaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5Lmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gQWRkaW5nIG5lY2Vzc2FyeSBmaWxlcyBmb3IgcnRwZHRtZmRlcGF5Ci0JICAyMDA4MDMyMDAwNTE0Ny00ZjBmNi01NTBmZTIyZjcwMTUyZjNhYWIzZGNkN2E2YjAyY2JmODFlODkyMzJkLmd6Ci0KLTIwMDgtMDMtMjAgMDA6NTA6NDEgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBGaXggdHlwb3MKLQkgIDIwMDgwMzIwMDA1MDQxLTRmMGY2LTlkMjJmYTVkMTU1ZTM1YjYwNWVhODViMWZkOWU3MTk3YTg4MmExZjAuZ3oKLQotMjAwOC0wMi0xNiAxMzo0MTo0MCArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gZHRtZnNyYzogQ29ycmVjdGx5IHNldCB0aGUgZW5kaWFuZXNzIGluIHRoZSBjYXBzIHRvIHRoZSBtYWNoaW5lcyBlbmRpYW5lc3MKLQkgIDIwMDgwMjE2MTM0MTQwLTkzYjlhLTQwYTNhOWQ3YWMxNjc5YzVlMGRmZDI0YTZiOTFlNGFiYTZjYzY0OTYuZ3oKLQotMjAwNy0wOS0xNyAxNzo1MjozMyArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBTZWFyY2gmUmVwbGFjZSBvb3BzCi0JICAyMDA3MDkxNzE3NTIzMy0zZTJkYy01N2Y1NzljNGI4OTA5OTNmNDlmYThlOWU2NDcwYTNlYjc5ZDJiOTIyLmd6Ci0KLTIwMDctMDktMTcgMTc6NTE6MzMgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gZXZlbnRzIGRvbnQgeWV0IGJlbG9uZyBpbiB0aGUgY2FwcwotCSAgMjAwNzA5MTcxNzUxMzMtM2UyZGMtZmQxZDgzYjc4MjZiODk4MTEwZmM1NzFhZTdjMzQ0MGYxODg3NDM0ZC5negotCi0yMDA3LTA5LTE3IDE2OjA4OjIwICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEFkZCBwYXRjaCB0byBtYWtlIGl0IHdvcmsgd2l0aCBtYWVtbyBkc3Agc291cmNlcyB0aGF0IHBheWxvYWQgaW5jb3JyZWN0bHkKLQkgIDIwMDcwOTE3MTYwODIwLTNlMmRjLTA2YjFiMWQxYjA5MThiMzBkYWJlYTVhMDcxNGNiNzMyYjNiOGQ4ZGQuZ3oKLQotMjAwNy0wOS0xNyAwNDoyNjo0OSArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBPb3BzLCBzZXQgdG8gbm8gcHJlcm9sbCB3aGVuIHBsYXlpbmctPnBhdXNlZCB0b28KLQkgIDIwMDcwOTE3MDQyNjQ5LTNlMmRjLTk0YWRiNmFhMDYxN2U4MTVhNmUyMzMyMzJkYWJiNGJiYzQ4ZGM4MmMuZ3oKLQotMjAwNy0wOS0xNyAwMDozNjo1NCArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBDb21wbGV0ZSBwb3J0IHRvIGJhc2VzcmMKLQkgIDIwMDcwOTE3MDAzNjU0LTNlMmRjLWRiMGY4NGRhYmQ5ZGQxYWM5MjlhMDQ2MTg2NWI4YWFhOGVmOTFhNzcuZ3oKLQotMjAwNy0wOS0xNyAwMDoyNDoxMiArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBBZGQgY2FwcyBuZWdvdGlhdGlvbiBmdW5jdGlvbgotCSAgMjAwNzA5MTcwMDI0MTItM2UyZGMtY2EyNjY4MTZlOTYyOTc0NmU5MDgzYzViYjhiN2Y3M2I5NGE5YjJiMC5negotCi0yMDA3LTA5LTE3IDAwOjE2OjU5ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIFByb3Blcmx5IGZyZWUgbm9uLXN0YXJ0IGV2ZW50cwotCSAgMjAwNzA5MTcwMDE2NTktM2UyZGMtYTU3MTc3N2UzZWNmYjkwOTg5Zjg3NDEyZjU1NGFhMTBhMzFjYzJjYS5negotCi0yMDA3LTA5LTE3IDAwOjE1OjUyICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIE1ha2UgaW50ZXJ2YWwgYW5kIHBhY2tldF9yZWR1bmRhbmN5IGludG8gdWludAotCSAgMjAwNzA5MTcwMDE1NTItM2UyZGMtNjAwMzJlNTQ3YjM2NjliODczMTdjOTgxZDk4NWMxNTZhYWI5MWI0MC5negotCi0yMDA3LTA5LTE2IDE5OjQ0OjA4ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIE1ha2UgdGhlIHJ0cCBkdG1mIHNyYyB1c2UgYmFzZXNyYwotCSAgMjAwNzA5MTYxOTQ0MDgtM2UyZGMtNzM0MDAwMTMwZGNlMjQzNGEwMTRhY2Y4NDNkNjQxZmYwZTYwYWE1YS5negotCi0yMDA3LTA5LTE2IDE5OjQxOjAxICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIE1ha2UgZHRtZiBzcmMgY29kZSBuaWNlcgotCSAgMjAwNzA5MTYxOTQxMDEtM2UyZGMtYThiZThjNTA5YzY1NDAwZDFkMzk2MmRhMDJlNjdkMTVkMjA1NDMxNi5negotCi0yMDA3LTA5LTE0IDA0OjIwOjQyICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEltcGxlbWVudCBzdG9wcGluZyBpbiBhIG5pY2UgdGhyZWFkIHNhZmUgd2F5Ci0JICAyMDA3MDkxNDA0MjA0Mi0zZTJkYy0xZmUyNTdmZjRiNzJhY2E0YjBlYjVmMjg1YTE0NjUwYjhkZjI2OGMzLmd6Ci0KLTIwMDctMDktMTQgMDQ6MTg6MzQgKzAwMDAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gUmVtb3ZlIGdldF90aW1lcyAoV2ltIHNheXMgaXRzIG9ubHkgZ29vZCBmb3IgcmVhbGx5IGZha2Ugc291cmNlcykKLQkgIDIwMDcwOTE0MDQxODM0LTNlMmRjLWZmZjRkNWRhMmExNDVmMTllN2I2MTBhMTAyN2QyYzRkNGJjNWVhZTAuZ3oKLQotMjAwNy0wOS0xMyAyMToyMTo0NSArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIHVzaW5nIHRoZSB1bmxvY2sgbWV0aG9kIG9mIGJhc2VzcmMKLQkgIDIwMDcwOTEzMjEyMTQ1LTRmMGY2LTBlNDM4YTY4MWJmMTY1MWMwY2MwZDhmYTMyNjlhZWQzZjE2NjhiNmIuZ3oKLQotMjAwNy0wOS0xMyAyMToxMjoyNiArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIG1vcmUgZGVidWcKLQkgIDIwMDcwOTEzMjExMjI2LTRmMGY2LWJjMzJiNTgyOGZjOGUwMzIzYzhhNmVlZTc3OWEzODE0NWFhY2Q1OTMuZ3oKLQotMjAwNy0wOS0xMyAyMDo0NjoxNCArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIGFkZGVkIGRlYnVncwotCSAgMjAwNzA5MTMyMDQ2MTQtNGYwZjYtNjhjMmE2OWFlN2ExZWZjYTZlMTNjMTE2ZGJhZDdmOWI2ODZmMDI0Mi5negotCi0yMDA3LTA5LTEzIDE5OjIwOjUzICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gTWFrZSBzdXJlIHRvIHVubG9jayB0aGUgdGhyZWFkIHdoZW4gZ29pbmcgdG8gcmVhZHkgYW5kIHRvIGZsdXNoIHRoZSBxdWV1ZSB3aGVuIG1vdmluZyB0byBwYXVzZWQgb3IgcGxheWluZwotCSAgMjAwNzA5MTMxOTIwNTMtNGYwZjYtNzZjMzkyNTM4MGQxYTMwOTg4Mjg2MTcwNTM1YTY1ZGVhNjRhNTU4My5negotCi0yMDA3LTA5LTEzIDE3OjU1OjIwICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gQ2hhbmdlZCBkdG1mc3JjIGludG8gYSBzdWJjbGFzcyBvZiBHc3RCYXNlU3JjCi0JICAyMDA3MDkxMzE3NTUyMC00ZjBmNi0xNmNhNGJmOTM2OTAwNzJmM2U4MzZkMWM4YTViNTJjZjdhNDIxOTE2Lmd6Ci0KLTIwMDctMDktMDQgMjI6NTc6NTMgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBBZGQgYW5vdGhlciBmaXggZm9yIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24KLQkgIDIwMDcwOTA0MjI1NzUzLTRmMGY2LTViYThjNDI2MGMwMDJiYjI3ZWI5OGU5ZmFiYTNjMTU3OTkzNTdiNTcuZ3oKLQotMjAwNy0wOS0wNCAyMTo1MjoyNCArMDAwMCAgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBBZGQgY29tbWVudCB0byBleHBsYWluIHB1c2ggYmFjawotCSAgMjAwNzA5MDQyMTUyMjQtM2UyZGMtZDkyYWMxZjQwM2RjZjU3MTU0NmE3YzUzZjE4ODA5Zjg0MGVlYTUxZC5negotCi0yMDA3LTA5LTA0IDIwOjU1OjA5ICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIFByb3Blcmx5IGRvIHRoZSBsb2NraW5nIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIGNsb2NrIHVuc2NoZWR1bGluZwotCSAgMjAwNzA5MDQyMDU1MDktM2UyZGMtZGExOTkwMGI1MWFmNmFlZGI2NTQ3ZjRmMzkyYmVmNGQxMDYxZGVjMi5negotCi0yMDA3LTA5LTAxIDAwOjAzOjI0ICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gb3VwcywgSSBkaWQgaXQgYWdhaW4uLi4KLQkgIDIwMDcwOTAxMDAwMzI0LTRmMGY2LTNkOGI0NjY5MWVlNTIwNTM3YjA2YzUxMWE1ZTczMmY1YjgxMmI4NDQuZ3oKLQotMjAwNy0wOC0zMSAyMzo1NDoyOCArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIG91cHMsIHNvcnJ5Li4gRFRNRiwgbm90IFJUUF9EVE1GIGZvciB0aGlzIGZpbGUuLi4KLQkgIDIwMDcwODMxMjM1NDI4LTRmMGY2LTAwYjYwNmJmYjQ4OTJlNGYyMTdjNDQwYjYxMWNjNzk0YWIwZGU1NWEuZ3oKLQotMjAwNy0wOC0zMSAyMzo0NDoxMyArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5oOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEZpeGVzIHRoZSBkZWFkbG9jayB3aGVuIHBhdXNpbmcgdGhlIGR0bWZzcmMgYW5kIHJ0cGR0bWZzcmMuIEhhZCB0byBwdXNoIHNvbWV0aGluZyBvbiB0aGUgYXN5bmMgcXVldWUgdG8gcmVsZWFzZSB0aGUgYmxvY2tpbmcgYXN5bmNfcXVldWVfcG9wKCkuIFRoYW5rcyB0byBPbGl2aWVyIGZvciB0aGUgc29sdXRpb24uCi0JICAyMDA3MDgzMTIzNDQxMy00ZjBmNi03OTNjZjM1ZmM0MzYzNmU3Mjc1MjU4Y2M3MDYzZmMwNjhmNWVmYTBhLmd6Ci0KLTIwMDctMDgtMjggMjI6MTU6MzQgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBDbG9ja0lEIHdoZW4gd2FpdGluZyBmb3IgYnVmZmVyIGlzIG5vdyB1bnNjaGVkdWxlZCB3aGVuIHN0b3BwaW5nIHRoZSB0YXNrLiBWYXJpb3VzIGZpeGVzIHRvIGF2b2lkIGJ1Z3MgKHRoYW5rcyB0byAtV2FsbCAtV2Vycm9yKS4gRml4ZXMgdG8gYWxsb3cgdGhlIG1lcmdlIG9mIHRoZSBicmFuY2guCi0JICAyMDA3MDgyODIyMTUzNC00ZjBmNi1iMGQ2YTRmZTQ4YzRlMmExNmI5ZmY2OWNiMzEwMDg3Yzk3MGNlNDhlLmd6Ci0KLTIwMDctMDgtMjggMTc6MTU6NDYgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBDbGVhbmVkIHVwIHRoZSBjb2RlIGEgYml0LCBubyB1c2Ugb2YgR1NUXyogYW5kIHJldHVybiB2YWx1ZSB2ZXJpZmljYXRpb24gZnJvbSBnc3RfKgotCSAgMjAwNzA4MjgxNzE1NDYtNGYwZjYtYmRlYjRiMWI3Zjk5Zjk0NjRhYWJlNWM0M2JkNGE0ZDIwMjUyNjJiNi5negotCi0yMDA3LTA4LTI3IDE5OjU2OjEwICswMDAwICBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIEZpeCBvdmVybHkgbG9uZyBsaW5lcyBhbmQgdGFicwotCSAgMjAwNzA4MjcxOTU2MTAtM2UyZGMtMzk2YTNmYTAxZTE2ZjE4NGU0MTA5YzcxZmUyZGViNmU1MTZiZGYwZC5negotCi0yMDA3LTA4LTI3IDE5OjI2OjE4ICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gdW50YWJiaWZpZWQgZHRtZnNyYwotCSAgMjAwNzA4MjcxOTI2MTgtNGYwZjYtNzdkNjgwNzA0NjRmMWI1ZjlhNDZjYjZlZWMyZDkyMjM0MDE0M2MwNC5negotCi0yMDA3LTA4LTI3IDE3OjI0OjI0ICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gRml4IFJUUCB0aW1lc3RhbXBzIGJ5IHNlbmRpbmcgYSBuZXdfc2VnbWVudCBldmVudCB0byB0aGUgcGF5bG9hZGVyCi0JICAyMDA3MDgyNzE3MjQyNC00ZjBmNi1kMjA5MDdlM2Q0MzZkNTBiZmU3NGViNGZjM2QyZDZkN2I2YjZkYmM1Lmd6Ci0KLTIwMDctMDgtMjcgMTc6MjM6MzkgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBCZXR0ZXIgaGFuZGxpbmcgb2YgcGFja2V0cywgd2Ugc2VuZCB0aGUgc2FtZSBkdXJhdGlvbiBmb3IgYWxsIHBhY2tldHMgdG8gYXZvaWQgaHVnZSBwYWNrZXRzIHdoZW4gbWluIGR1cmF0aW9uIGRlZmluZXMgYXJlIG1vZGlmaWVkLgotCSAgMjAwNzA4MjcxNzIzMzktNGYwZjYtY2M5MzMwNDQzN2VhMzc2ZmZmNjQ1OGM3NGM0NmMxOWY2OTIwZDMyOS5negotCi0yMDA3LTA4LTI3IDE3OjIzOjIyICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gQ2hhbmdpbmcgbWluaW11bSB2YWx1ZXMgdG8gd29yayBiZXR0ZXIgb24gc29tZSBnYXRld2F5cwotCSAgMjAwNzA4MjcxNzIzMjItNGYwZjYtNWJmMmJmZmE1OWE4MjQ0NTM4ZGNlZDc5NWZhN2Q3NjQ5NDUyY2E5MS5negotCi0yMDA3LTA4LTIyIDIwOjE2OjUzICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gVGhlIERUTUYgdG9uZSBnZW5lcmF0b3Igbm93IHJlc3BlY3RzIHRoZSB2b2x1bWUgYXJndW1lbnQgcGFzc2VkIGluIHRoZSBldmVudAotCSAgMjAwNzA4MjIyMDE2NTMtNGYwZjYtOGI3ZmY4NzQwMDZlMTFmNWE3NGQwZmQ5MWU1YTlhNDNjZDA4MmFkYS5negotCi0yMDA3LTA4LTIyIDE4OjAxOjMzICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gZG9uJ3Qga25vdyB3aHkgSSBkaWQgdGhhdC4uLgotCSAgMjAwNzA4MjIxODAxMzMtNGYwZjYtNmE3MzgyZjZjN2QzNjMwZjkxZGEzODRlMTkwNDc2M2M3ZWE2ZmExYS5negotCi0yMDA3LTA4LTIyIDE3OjU1OjMzICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gUG9ydGVkIHRoZSBldmVudCBxdWV1ZSB3b3JrIGZyb20gZHRtZnNyYyB0byBydHBkdG1mc3JjCi0JICBBZGRlZCBhIHF1ZXVlIGJhc2VkIHN5c3RlbSBmb3IgdGhlIHJ0cGR0bWZzcmMuIE5vdyBpdCB3YWl0cyBmb3Igc3RhcnQvc3RvcCBtZXNzYWdlcyBvbiB0aGUgcXVldWUsIGFuZCBtYWtlcyBzdXJlIHRoYXQgdGhlIG1pbmltdW0gZHV0eSBjeWNsZSAoMTIwbXMpIGlzIHJlc3BlY3RlZCBiZXR3ZWVuIGVhY2gKLQkgIHRvbmUsIGluY2x1ZGluZyBpbnRlci1kaWdpdCBzaWxlbmNlLgotCSAgMjAwNzA4MjIxNzU1MzMtNGYwZjYtZjI3NDE0YzQwNmYxZjdiMDBjOWE5MDg0YTk4OGNmM2E3OTMwZmU1Yy5negotCi0yMDA3LTA4LTIyIDE3OjU0OjQ0ICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gb3VjaCwgcHJpbnRpbmcgd2l0aCBhcmd1bWVudHMgYnV0IHdpdGhvdXQgJXMuLiB0aGF0IG1hZGUgaXQgc2VnZmF1bHQgYSBmZXcgdGltZXMuLi4KLQkgIDIwMDcwODIyMTc1NDQ0LTRmMGY2LTQ0NWVhNmNlN2E5NjY4ZDA0Y2Y5OTlhZjc3MmE1MDRlYzc0ZmI2N2EuZ3oKLQotMjAwNy0wOC0yMiAxNzo1MToyNiArMDAwMCAgWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5jOgotCSogZ3N0L2R0bWYvZ3N0ZHRtZnNyYy5oOgotCSAgW01PVkVEIEZST00gR1NULVAtRkFSU0lHSFRdIE1vdmVkIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgZXZlbnQgdG8gZHRtZnNyYyBzdHJ1Y3R1cmUgc2luY2Ugd2UgaGF2ZSBvbmx5IG9uZSBldmVudCBhdCBhIHRpbWUsIHNvIGxldCdzIGtlZXAgaXQgc3RvcmVkIGluIHRoZSBkdG1mc3JjIHN0cnVjdAotCSAgMjAwNzA4MjIxNzUxMjYtNGYwZjYtNTNiY2RhMmJkOGFlOGM1NmQyOWU2MmU2OWFjMTlhMzBlMDhhZDM1MC5negotCi0yMDA3LTA4LTIwIDIwOjM4OjI2ICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RkdG1mc3JjLmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gQWRkZWQgYSBxdWV1ZSBiYXNlZCBzeXN0ZW0gZm9yIHRoZSBkdG1mc3JjLiBOb3cgaXQgd2FpdHMgZm9yIHN0YXJ0L3N0b3AgbWVzc2FnZXMgb24gdGhlIHF1ZXVlLCBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBtaW5pbXVtIGR1dHkgY3ljbGUgKDEyMG1zKSBpcyByZXNwZWN0ZWQgYmV0d2VlbiBlYWNoIHRvbmUsIGluY2x1ZGluZyBpbnRlci1kaWdpdCBzaWxlbmNlLgotCSAgMjAwNzA4MjAyMDM4MjYtNGYwZjYtNzUwYTIyYjYxMmE1ZTQ5NWU3Njc2NjY5MzQ0NjVjMzRmZTMyMDc0Yi5negotCi0yMDA3LTA4LTIwIDE4OjQ4OjUyICswMDAwICBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvZHRtZi9NYWtlZmlsZS5hbToKLQkqIGdzdC9kdG1mL2dzdGR0bWYuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdGR0bWZzcmMuaDoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYzoKLQkqIGdzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaDoKLQkgIFtNT1ZFRCBGUk9NIEdTVC1QLUZBUlNJR0hUXSBBZGRlZCBkdG1mc3JjLCBhIERUTUYgVG9uZSBHZW5lcmF0b3IsIGFuZCBtYWRlIGl0IHBhcnQgb2YgdGhlICdkdG1mJyBwbHVnaW4uCi0JICAyMDA3MDgyMDE4NDg1Mi00ZjBmNi1hMGQ4NWU2NzcwODI5MGFlYmFmYTg5YWI3OWQzY2VkZDU4MTViNjIwLmd6Ci0KLTIwMDctMDgtMjAgMTg6NDg6MDAgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9kdG1mLy5naXQtZGFyY3MtZGlyOgotCSogZ3N0L2R0bWYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmM6Ci0JKiBnc3QvZHRtZi9nc3RydHBkdG1mc3JjLmg6Ci0JICBbTU9WRUQgRlJPTSBHU1QtUC1GQVJTSUdIVF0gTW92ZWQgcnRwZHRtZiB0byBkdG1mIGRpcmVjdG9yeQotCSAgMjAwNzA4MjAxODQ4MDAtNGYwZjYtZmEzM2VhOTc0NTEwMTYxZGU4Yzk5NTFjMzkwODdhZjM2MTNiNjVhNC5negotCi0yMDA5LTAyLTIxIDEyOjQ3OjAwICswMTAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICByZXNwZWN0IERFRkFVTFQgc2VnbWVudCBieSBjbGlwcGluZyB0aGUgbGFzdCBidWZmZXIgdG8gYmUgc2VudAotCi09PT0gcmVsZWFzZSAwLjEwLjE0ID09PQotCi0yMDA5LTAyLTE5IDIwOjA5OjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBSZWxlYXNlIDAuMTAuMTQKLQotMjAwOS0wMi0xOSAyMDowNzo0MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA5LTAyLTE5IDEzOjE2OjM5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYzoKLQkgIFVwZGF0ZSBTaW5jZTogdGFncyBpbiBhdXRvZGV0ZWN0IHNyY3MgYW5kIGF1ZGlvZWNobwotCi0yMDA5LTAyLTE5IDExOjEyOjU4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIFVwZGF0ZSBDaGFuZ2VMb2cgZm9yIDAuMTAuMTMuMwotCi0yMDA5LTAyLTE5IDExOjA5OjAzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIDAuMTAuMTMuMyBwcmUtcmVsZWFzZQotCi0yMDA5LTAyLTEwIDExOjI1OjQ5ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JICBwdWxzZW1peGVyOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCi0JICBDYXN0IChlbnVtICopIHRvIChpbnQgKiksIG5vdCBuZWNlc3NhcmlseSB0ZWNobmljYWxseSByaWdodCwKLQkgIGJ1dCBwbHVncyAjNTcxMTUzLgotCi0yMDA5LTAyLTEzIDE4OjAzOjE0ICswMTAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgcHVsc2VzaW5rOiBJc3N1ZSBwcm9wZXJ0eSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGluIHN0cmVhbWluZyB0aHJlYWQsIHJhdGhlciB0aGFuIFBBIHRocmVhZC4KLQkgIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2soKSAoYS5vLikgYW5kIGJ5IGV4dGVuc2lvbiBnZXRfcHJvcGVydHkgc2hvdWxkCi0JICBub3QgYmUgZG9uZSBmcm9tIGEgUEEgdGhyZWFkLCBidXQgdGhlIGxhdHRlciBtYXkgb2NjdXIgYXMgYSByZXN1bHQgb2YgYQotCSAgcHJvcGVydHkgY2hhbmdlIG5vdGlmaWNhdGlvbi4gIEZpeGVzICM1NzEyMDQgKHRob3VnaCBjdXJyZW50IHNpdHVhdGlvbgotCSAgbm90IGlkZWFsLCBlLmcuIHBvc3QgbWVzc2FnZSByYXRoZXIgdGhhbiBzaWduYWwpLgotCi0yMDA5LTAyLTEwIDExOjI3OjUxICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSAgYXNwZWN0cmF0aW9jcm9wOiBEb24ndCBmb3JnZXQgdG8gY2FsbCBwYXJlbnQgZmluYWxpemUgaW1wbGVtZW50YXRpb24uCi0JICBUaGlzIGZpeGVzIGEgbWVtb3J5IGxlYWsgKGxlYWtpbmcgdGhlIGNvbnRhaW5lZCBlbGVtZW50cyBvZiB0aGUgYmluKS4KLQotMjAwOS0wMi0xMCAwODo0Mzo1OSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgb3N4dmlkZW9zaW5rOiBGaXggYnVpbGQuIEZpeGVzICM1NzEwMzgKLQotMjAwOS0wMi0wOSAxMjoxODozNiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogY29tbW9uOgotCSAgQnVtcCByZXZpc2lvbiB0byB1c2UgZm9yIGNvbW1vbiBzdWJtb2R1bGUuCi0KLTIwMDktMDItMDcgMTY6MDA6NDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nOiBVcGRhdGUgQ2hhbmdlTG9nIGZvciAwLjEwLjEzLjIKLQotMjAwOS0wMi0wNyAxNTo1ODo1NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pZC5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vamEucG86Ci0JKiBwby9sdC5wbzoKLQkqIHBvL210LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgcG86IFVwZGF0ZSB0cmFuc2xhdGlvbnMgZm9yIDAuMTAuMTMuMgotCi0yMDA5LTAyLTA3IDE1OjQ2OjA3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4xMy4yCi0KLTIwMDktMDItMDcgMTU6NDA6NTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL210LnBvOgotCSAgcG86IEFkZCBNYWx0ZXNlIHRyYW5zbGF0aW9uCi0KLTIwMDktMDItMDYgMTY6MTY6MDUgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZHVtcC5oOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIHF0ZGVtdXg6IEFkZCBoYW5kbGluZyBmb3Igc3RwcyBhdG9tcwotCSAgc3RwcyBhdG9tcyBjb250YWluICJwYXJ0aWFsIHN5bmMiIGluZm9ybWF0aW9uLCB3aGljaCBtZWFucyB0aGF0IGl0J3MKLQkgIGEgc3luYyBwb2ludCB3aGVyZSBwdHMgIT0gZHRzLiAgVGhpcyBpcyBuZWVkZWQgdG8gcHJvcGVybHkgaGFuZGxlCi0JICBNUEVHMiwgSC4yNjQsIERpcmFjLCBldGMuLCBpbiBxdWlja3RpbWUuCi0KLTIwMDktMDItMDUgMTU6NTE6NDIgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBmbGFjZGVjOiBpZiB3ZSBhYm9ydGVkIHJlYWRpbmcsIGRvbid0IGRvIGludG8gYW4gaW5maW5pdGUgbG9vcC4KLQkgIElmIG91ciByZWFkIGNhbGxiYWNrIHJhbiBvdXQgb2YgZGF0YSwgc28gaGFkIHRvIGFib3J0IHJlYWRpbmcsIHdlIHJldHVybgotCSAgR1NUX0ZMT1dfRVJST1IgaW5zdGVhZCBvZiBnb2luZyBpbnRvIGFuIGluZmluaXRlIGxvb3AuCi0KLTIwMDktMDItMDUgMTA6MTk6MzcgLTA4MDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCi0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBvc3h2aWRlb3Npbms6IHJlbW92ZSBub24tZW1iZWRkZWQgbW9kZSBhbmQgZml4IG1lbW9yeSBtYW5hZ2VtZW50LgotCSAgUmVtb3ZlIG5vbi1lbWJlZGRlZCBtb2RlLiBFbWJlZCBtb2RlIGJlY29tZXMgZGVmYXVsdCBhbmQgb25seSBtb2RlLgotCSAgZW1iZWQgcHJvcGVydHkgaXMgcmV0YWluZWQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5LgotCSAgQWRkZWQgYXV0b3JlbGVhc2UgcG9vbHMgYXJvdW5kIGFsbCBvYmpjIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIGNhbGxlZAotCSAgZnJvbSBhIG5vbi1tYWluIHRocmVhZC4KLQotMjAwOS0wMi0wNSAyMDowMjowMSArMDEwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgZGVidWcgb24gdGhlIG9iamVjdAotCi0yMDA5LTAyLTA0IDE2OjQwOjEzIC0wODAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuYzoKLQkgIG9zeGF1ZGlvIGZpeGVzOiBtdWx0aWNoYW5uZWwgYW5kIGNoYW5naW5nIGNhcHMuCi0JICBFbnN1cmUgd2UgY3JlYXRlIHRoZSByaW5nYnVmZmVyIHNlZ21lbnQgc2l6ZSBhcyBhIG11bHRpcGxlIG9mIHRoZQotCSAgYnl0ZXMgcGVyIHNhbXBsZSAoZml4ZXMgNi1jaGFubmVsIG91dHB1dCkuCi0JICBSZXNldCB0aGUgc2Vnb2Zmc2V0IHdoZW4gYWNxdWlyaW5nIHRoZSByaW5nYnVmZmVyLCBzbyB3ZSBkb24ndCByZXRhaW4KLQkgIGEgYm9ndXMgb2Zmc2V0IHdoZW4gY2FwcyBjaGFuZ2UuCi0KLTIwMDktMDItMDQgMTE6Mzg6MzAgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIHJ0c3BzcmM6IEtlZXAgdHJhY2sgb2YgY29ubmVjdGVkIHN0YXRlCi0JICBLZWVwIHRyYWNrIG9mIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiBhbmQgZG9uJ3QgdHJ5IHRvIHNlbmQgVEVBUkRPV04gd2hlbgotCSAgdGhlIHNlcnZlciBoYXMgY2xvc2VkIHRoZSBjb25uZWN0aW9uLgotCi0yMDA5LTAyLTA0IDA5OjIwOjI4ICswMTAwICBSb2JpbiBTdG9ja2VyIDxyb2JpbkBuaWJvci5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgUmVhZCBNYXRyb3NrYSBUaXRsZSBlbGVtZW50IGZvciB0aGUgVElUTEUgdGFnCi0JICBOb3QgYWxsIE1hdHJvc2thIGZpbGVzIGhhdmUgYSBUYWdzIGVsZW1lbnQgd2hpY2ggY29udGFpbnMKLQkgIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0aXRsZSBhbW9uZyBvdGhlciB0aGluZ3MuIE1vc3QgdmlkZW8KLQkgIE1hdHJvc2thIGZpbGVzIG9ubHkgY29udGFpbiB0aGUgVGl0bGUgZWxlbWVudCBzbyB3ZQotCSAgc2hvdWxkIHBhcnNlIHRoaXMgdG9vLiBGaXhlcyBidWcgIzU3MDQzNS4KLQotMjAwOS0wMi0wMyAyMjozNDozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGNvbmZpZ3VyZS5hYzogYnVtcCBjb3JlL2Jhc2UgcmVxdWlyZW1lbnRzIHRvIHJlbGVhc2VkIHZlcnNpb25zCi0KLTIwMDktMDItMDMgMTc6MTA6MzAgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2VjaG8uYzoKLQkgIEZpeCBhdWRpb2VjaG8gdW5pdCB0ZXN0IG9uIDMyIGJpdCBzeXN0ZW1zCi0JICBDYXN0IHRoZSBuZXcgdmFsdWUgZm9yIHRoZSAiZGVsYXkiIHByb3BlcnR5IHRvIEdzdENsb2NrVGltZS4KLQkgIEludGVnZXJzIHdpdGhvdXQgdHlwZSBhcmUgcGFzc2VkIHRvIHZhcmFyZyBmdW5jdGlvbnMgd2l0aAotCSAgYW4gaW50ZWdlciB0eXBlIHRoYXQgY2FuIGhvbGQgYSBwb2ludGVyLgotCi0yMDA5LTAyLTAzIDE0OjA5OjI2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICBlcXVhbGl6ZXI6IERvbid0IHJlc2V0IGZyZXF1ZW5jeSBiYW5kcyBmcm9tIHVzZXIgc2V0dGluZ3MuIEZpeGVzICM1NzAzNDMuCi0JICBNb3ZlIHJlYWxsb2NhdGluZyB0aGUgaGlzdG9yeSBidWZmZXIgb3V0IG9mIF9jb21wdXRlX2ZyZXF1ZW5jaWVzKCkgYW5kIGNhbGwgdGhlCi0JICByaWdodCBmdW5jdGlvbiBhcyBuZWVkZWQuIEFkZCBzb21lIGxvZ2dpbmcgYW5kIHR3ZWFrIHRoZSBmb3JtYXR0aW5nIG9mIGV4aXN0aW5nCi0JICBsb2dnaW5nLiBTaW1wbGlmeSBzZXR0aW5nIG5lZWRfbmV3X2NvZWZmaWNpZW50cyB3aGVuIGNoYW5naW5nIHByb3BlcnRpZXMuCi0KLTIwMDktMDItMDMgMTE6NTI6MTUgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3QvYXVkaW9meC9hdWRpb2VjaG8uYzoKLQkgIFVzZSBndWludDY0IGluc3RlYWQgb2YgZ3VpbnQgZm9yIHN0b3JpbmcgZ3VpbnQ2NAotCi0yMDA5LTAyLTAyIDE4OjM3OjM1ICswMTAwICBKb25hdGhhbiBNYXR0aGV3IDxub3R2ZXJ5c21hcnRAZ21haWwuY29tPgotCi0JKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgVXNlIGNvcnJlY3QgZmxhZyBmb3IgdGhlIEdOT01FIHByb3h5IGNvbmZpZ3VyYXRpb24KLQkgIEZpeGVzIGJ1ZyAjNTUyMTQwLgotCi0yMDA5LTAyLTAyIDEzOjA4OjE0ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYzoKLQkgIEZpeCBjb21waWxlciB3YXJuaW5ncwotCSAgZml4IGNvbXBpbGVyIHdhcm5pbmdzIGR1ZSB0byB1bnVzZWQgcmV0dXJuIHZhbHVlcyBvZiBzY2FuZi4KLQotMjAwOS0wMS0zMSAxMTowODozMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIHRlc3RzL2ljbGVzL3Y0bDJzcmMtdGVzdC5jOgotCSAgRml4IGZvcm1hdCBzdHJpbmcgY29tcGlsZXIgd2FybmluZwotCi0yMDA5LTAxLTMwIDIyOjI0OjE0ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgQWRkIHJlbGVhc2VpbmZvIHdpdGggb25saW5lIHVybC4KLQotMjAwOS0wMS0zMCAxODowNDoxMSArMDAwMCAgSmFuIFNjaG1pZHQgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW06Ci0JICBGaXggdXAgc29tZSBjb21waWxlIGZsYWdzCi0KLTIwMDktMDEtMzAgMTc6MzU6NDkgKzAwMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSAgRG9uJ3QgdXNlIEdsaWIgMi4xNiBmdW5jdGlvbiBnX3N0cmNtcDAuCi0KLTIwMDktMDEtMzAgMTc6MzQ6NDUgKzAwMDAgIEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBEb24ndCBkbyB2b2lkIHBvaW50ZXIgYXJpdGhtZXRpYwotCi0yMDA5LTAxLTMwIDE3OjI2OjE5ICswMDAwICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBGaXggRm9ydGUgY29tcGlsZXIgd2FybmluZ3MuCi0JICBEb24ndCBkbyB2b2lkIHBvaW50ZXIgYXJpdGhtZXRpYy4gRG9uJ3QgaGF2ZSBhbiB1bnJlYWNoYWJsZSBzdGF0ZW1lbnQuCi0KLTIwMDktMDEtMzAgMTc6Mjk6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29tbW9uOgotCSAgQnVtcCBjb21tb24KLQotMjAwOS0wMS0yNiAxMDozMzo1NSArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgUmVtb3ZlIHVzZWxlc3MgcHJvY2Vzc2luZyBmb3Igbm9uLXJhdyBmb3JtYXRzCi0KLTIwMDktMDEtMzAgMTU6MzQ6MzEgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBBZGQgc3VwcG9ydCBmb3IgdGhlICdSZXF1aXJlbWVudCcgYW5kICdFbmNvZGVyJyB0YWdzCi0KLTIwMDktMDEtMzAgMTU6MzM6MTkgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIE1vZGlmeSBwcml2YXRlLXRhZyBuYW1lIGZvcm1hdHRlciBzbyB0aGF0IGl0IGRvZXNuJ3QgZ28gbWFkIGF0IGZvdXJjYyBzdGFydGluZyB3aXRoICcoYyknLgotCi0yMDA5LTAxLTMwIDE0OjQwOjUxICswMTAwICBCcmlqZXNoIFNpbmdoIDxicmlqZXNoLmtzaW5naEBnbWFpbC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOgotCSAgRml4IGNvbXBhcmlzb24gb2YgdGhlIHR1bmVyIG5vcm1zCi0JICBUaGUgVjRMMiB0dW5lciBub3JtcyB0aGF0IGEgZGV2aWNlIHN1cHBvcnRzIGNvdWxkCi0JICBiZSBhIHN1YnNldCBvZiBzb21lIG5vcm0gKGUuZy4gTlRTQyBpbnN0ZWFkIG9mIE5UU0NfTSkuCi0JICBUaGUgY29tcGFyaXNvbiBzaG91bGQgYmUgZG9uZSBieSAmIGluc3RlYWQgb2YgPT0uCi0JICBTZWUgaHR0cDovL3d3dy5saW51eHR2Lm9yZy9kb3dubG9hZHMvdmlkZW80bGludXgvQVBJL1Y0TDJfQVBJL3NwZWMtc2luZ2xlL3Y0bDIuaHRtbCNTVEFOREFSRAotCSAgRml4ZXMgYnVnICM1Njk4MjAuCi0KLTIwMDktMDEtMzAgMDg6NTM6MDYgKzAxMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JKiBjb21tb246Ci0JICBVc2UgYSBzeW1ib2xpYyBsaW5rIGZvciB0aGUgcHJlLWNvbW1pdCBjbGllbnQtc2lkZSBob29rCi0KLTIwMDktMDEtMjkgMTQ6MDg6NTYgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmM6Ci0JICBPbmx5IHVucmVmIHRoZSBwZWVyIHdoZW4gdGhlcmUgaXMgb25lLgotCi0yMDA5LTAxLTI5IDExOjA3OjU5ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmM6Ci0JICBSZW1vdmUgdmVyc2lvbiBudW1iZXJzIGZyb20gYSBmZXcgZ3N0LWxhdW5jaCBleGFtcGxlcy4KLQkgIFRoZSBtYWpvcml0eSBvZiB0aGUgZXhhbXBsZXMgZG9lIG5vdCB1c2UgLTAuMTAgYW5kIHRoaXMgd2lsbCBhbHNvIGhlbHAgdXMgdG8gbWFpbnRhaW4gdGhlIGRvY3MuCi0KLTIwMDktMDEtMjkgMTA6MTA6MDggKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50LmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3Jtc2luay5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIFVwZGF0ZSBhbmQgYWRkIGRvY3VtZW50YXRpb24gZm9yIHBsYXRmb3JtIHNwZWNpZmljIHBsdWdpbnMgKHN5cykuCi0JICBMaW5rIHRvIHByb3BlcnRpZXMuIENvcnJlY3QgdGl0bGVzIGZvciBleGFtcGxlcy4gRml4IGV4YW1wbGVzLgotCi0yMDA5LTAxLTI5IDA5OjQ1OjI1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JICBBZGQgJyB0byBmcmFtZXJhdGUgYXJndW1lbnQgYW5kIHJlbW92ZSB0aGUgd29yZCAnc2ltcGxlJyBhcyBhbGwgb3VyIHBpcGVsaW5lcyBhcmUgYXBwYXJlbnRseSBzaW1wbGUuCi0KLTIwMDktMDEtMjkgMDk6NDI6NTYgKzAyMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAgQWRkIGV4YW1wbGVzIGZvciB0aGUganBlZyBlbGVtZW50cy4KLQotMjAwOS0wMS0yOCAyMTo0MDoxMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBGaXggY29tcGlsZSBlcnJvciBpbiB0aGUgbGFzdCBjb21taXQKLQotMjAwOS0wMS0yOCAyMDozNDo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5jOgotCSogZXh0L3B1bHNlL3B1bHNlcHJvYmUuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkqIGV4dC9wdWxzZS9wdWxzZXNpbmsuaDoKLQkqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmg6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2V1dGlsLmg6Ci0JICBSZXdyaXRlIHRoZSBwdWxzZSBwbHVnaW4sIGNvbmRpdGlvbmFsbHkgZW5hYmxpbmcgbmV3IGJlaGF2aW91ciB3aXRoIG5ld2VyIHB1bHNlYXVkaW8uCi0JICBGaXhlczogIzU2Nzc5NAotCSAgKiBIb29rIHB1bHNlc2luaydzIHZvbHVtZSBwcm9wZXJ0eSB1cCB3aXRoIHRoZSBzdHJlYW0gdm9sdW1lIC0tIG5vdCB0aGUKLQkgIHNpbmsgdm9sdW1lIGluIFBBLgotCSAgKiBSZWFkIHRoZSBkZXZpY2UgZGVzY3JpcHRpb24gZGlyZWN0bHkgZnJvbSB0aGUgc2luayBpbnN0ZWFkIG9mIGdvaW5nCi0JICB2aWEgdGhlIG1peGVyLgotCSAgKiBQcm9wZXJseSBpbXBsZW1lbnQgX3Jlc2V0KCkgbWV0aG9kcyBmb3IgYm90aCBzaW5rIGFuZCBzb3VyY2UgdG8gYXZvaWQKLQkgIGRlYWRsb2NrcyB3aGVuIHNodXR0aW5nIGRvd24gYSBwaXBlbGluZS4KLQkgICogUmVwbGFjZSBhbGwgc2ltcGxlIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQoKSBieSBwcm9wZXIgbG9vcHMgdG8KLQkgIGd1YXJhbnRlZSB0aGF0IHdlIHdhaXQgZm9yIHRoZSByaWdodCBldmVudCBpbiBjYXNlIG11bHRpcGxlIGV2ZW50cyBhcmUKLQkgIGZpcmVkLiAgV2hpbGUgdGhpcyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGluIG1hbnkgY2FzZXMgaXQKLQkgIGNlcnRhaW5seSBpcyBtb3JlIGNvcnJlY3QgYW5kIG1ha2VzIG1lIHNsZWVwIGJldHRlciBhdCBuaWdodC4KLQkgICogUmVwbGFjZSBDSEVDS19ERUFEX0dPVE8gbWFjcm9zIHdpdGggcHJvcGVyIGZ1bmN0aW9ucwotCSAgKiBFeHRlbmQgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgY2hhbm5lbHMgdG8gMzIgc2luY2UgdGhhdCBpcyB0aGUgYWN0dWFsCi0JICBsaW1pdCBpbiBQQS4KLQkgICogR2V0IHJpZCBvZiBfZGlzcG9zZSgpIG1ldGhvZHMgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0aGVtLgotCSAgKiBJbmNyZWFzZSB0aGUgdm9sdW1lIHByb3BlcnR5IHVwcGVyIGxpbWl0IG9mIHRoZSBzaW5rIHRvIDEwMDAuCi0JICAqIFJlc2V0IGZ1bmN0aW9uIHBvaW50ZXJzIGFmdGVyIHdlIGRpc2Nvbm5lY3QgYSBzdHJlYW0vY29udGV4dC4gQmV0dGVyCi0JICBmaXggZm9yIGJ1ZyA1NTY5ODYuCi0JICAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgZWxlbWVudCBwcm9wZXJseSBpZiBvcGVuL3ByZXBhcmUgZmFpbHMKLQkgICogQ29yayB0aGUgUEEgc3RyZWFtIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHBhdXNlZC4gVGhpcyBhbGxvd3MgdGhlIFBBCi0JICAqIGRhZW1vbiB0bwotCSAgY2xvc2UgYXVkaW8gZGV2aWNlIG9uIHBhdXNlIGFuZCB0aHVzIHNhdmUgYSBiaXQgb2YgcG93ZXIuCi0JICAqIFNldCBQQSBzdHJlYW0gcHJvcGVydGllcyBiYXNlZCBvbiBHU1QgdGFncyBzdWNoIGFzIEdTVF9UQUdfVElUTEUsCi0JICBHU1RfVEFHX0FSVElTVCwgYW5kIHNvIG9uLgotCSAgU2lnbmVkLW9mZi1ieTogTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PgotCi0yMDA5LTAxLTI4IDE3OjQ2OjA2ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5jOgotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2VzZC9lc2Rtb24uYzoKLQkqIGV4dC9lc2QvZXNkc2luay5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmc2luay5jOgotCSogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzoKLQkqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzoKLQkqIGV4dC9oYWwvaGFsLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOgotCSogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzoKLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5oOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JKiBleHQvcHVsc2UvcHVsc2VtaXhlci5jOgotCSogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSogZXh0L3B1bHNlL3B1bHNlc3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzoKLQkqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZXh0L3RhZ2xpYi9nc3RhcGV2Mm11eC5jYzoKLQkqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBVcGRhdGUgYW5kIGFkZCBkb2N1bWVudGF0aW9uIGZvciBwbHVnaW5zIHdpdGggZGVwcyAoZXh0KS4KLQkgIExpbmsgdG8gcHJvcGVydGllcy4gQ29ycmVjdCB0aXRsZXMgZm9yIGV4YW1wbGVzLiBEb2N1bWVudCBhIGZldyB0cml2aWFsIGNhc2VzLiBLZWVwIGxpc3RzIGluIHNlY3Rpb24gZmlsZSBhbmQgZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtIGFscGhhYmV0aWNhbGx5IG9yZGVyZWQuIEZpeCB3YXJuaW5ncyB0aGF0IGd0ay1kb2MgcG9pbnRzIG91dC4KLQotMjAwOS0wMS0yOCAxNTo1NzoyMCArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmg6Ci0JICBMaW1pdCB0aGUgZGVsYXkgYnkgYSBuZXcgbWF4LWRlbGF5IHByb3BlcnR5Ci0JICBJbnRyb2R1Y2UgYSBuZXcgbWF4LWRlbGF5IHByb3BlcnR5IHRoYXQgY2FuIG9ubHkKLQkgIGJlIHNldCBiZWZvcmUgZ29pbmcgdG8gUExBWUlORyBvciBQQVVTRUQuIFRoaXMKLQkgIGlzIHVzZWQgdG8gbGltaXQgdGhlIG1heGltdW0gZGVsYXkgYW5kIGlzIHNldAotCSAgdG8gdGhlIGN1cnJlbnQgZGVsYXkgYnkgZGVmYXVsdC4KLQkgIFVzaW5nIHRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBkYXRhCi0JICBpbiBvdXIgaW50ZXJuYWwgcmluZ2J1ZmZlciBmb3IgdGhlIGVjaG8uIFdpdGggZHluYW1pYwotCSAgcmVhbGxvY2F0aW9uIG9mIHRoZSByaW5nYnVmZmVyIGFzIHVzZWQgYmVmb3JlIHNpbGVuY2UKLQkgIGNvdWxkJ3ZlIGJlZW4gdXNlZCBhcyB0aGUgZWNobyBkaXJlY3RseSBhZnRlciBzZXR0aW5nCi0JICBhIG5ldyBkZWxheS4KLQotMjAwOS0wMS0yOCAxMTo1ODo0MiArMDEwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmV2ZXJ0IHByZXZpb3VzIGJvZ3VzIGNvbW1pdAotCi0yMDA5LTAxLTI4IDEyOjI5OjQyICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzoKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkqIGdzdC9kZWJ1Zy9nc3RwdXNoZmlsZXNyYy5jOgotCSogZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC5jOgotCSogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuYzoKLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9nb29tMmsxL2dzdGdvb20uYzoKLQkqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmM6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvbXVsYXcuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzoKLQkqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzoKLQkqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jOgotCSogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgVXBkYXRlIGFuZCBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgcGx1Z2lucyB3aXRoIG5vIGRlcHMgKGdzdCkuCi0JICBMaW5rIHRvIHByb3BlcnRpZXMuIENvcnJlY3QgdGl0bGVzIGZvciBleGFtcGxlcy4gRG9jdW1lbnQgYSBmZXcgdHJpdmlhbCBjYXNlcy4gS2VlcCBsaXN0cyBpbiBzZWN0aW9uIGZpbGUgYW5kIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbSBhbHBoYWJldGljYWxseSBvcmRlcmVkLgotCi0yMDA5LTAxLTI3IDIzOjA5OjA1ICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgRml4IGV4YW1wbGUgYXBwcyBieSBkcmF3aW5nIGluIHRoZSBtYWluLWxvb3AuCi0KLTIwMDktMDEtMjcgMjA6MzM6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIHRlc3RzOiBmaXggYnVpbGQgb2YgYXNwZWN0cmF0aW8gY3JvcCB1bml0IHRlc3QgaW4gdW5pbnN0YWxsZWQgZW52aXJvbm1lbnQuCi0KLTIwMDktMDEtMjcgMjA6MzA6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotCi0JKiAuZ2l0aWdub3JlOgotCSAgTWFrZSBnaXQgaWdub3JlIGJhY2t1cCBmaWxlcwotCi0yMDA5LTAxLTI2IDE2OjE0OjQ3ICswMTAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgUGx1ZyBhIG1lbW9yeSBsZWFrIGluIGEgZGVidWcgbWVzc2FnZS4KLQotMjAwOS0wMS0yMiAxNTo1OTo0MCArMDEwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkgIENvcnJlY3QgcmV0dXJuIHZhbHVlIGZyb20gZ3N0X3VkcF9nZXRfYWRkcigpIHdoZW4gbm8ga25vd24gZmFtaWx5IGlzIGZvdW5kLgotCi0yMDA5LTAxLTI2IDA5OjUxOjM2ICswMTAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBkMTRuLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIFVzZSBsaWJzb3VwLWdub21lIGZvciBwcm94eSBjb25maWd1cmF0aW9uIGlmIGF2YWlsYWJsZQotCSAgSWYgbGlic291cC1nbm9tZSBpcyBmb3VuZCB1c2UgdGhpcyBhcyBpdCB3aWxsIGdpdmUgdXMKLQkgIHRoZSBHTk9NRSBwcm94eSBjb25maWd1cmF0aW9uLiBPdGhlcndpc2UgdXNlIG5vcm1hbAotCSAgbGlic291cC4KLQkgIFRoZSBHTk9NRSBwcm94eSBjb25maWd1cmF0aW9uIHdpbGwgb25seSBiZSB1c2VkIGlmCi0JICB0aGUgcHJveHkgcHJvcGVydGllcyBhcmUgbm90IHNldCBvbiBzb3VwaHR0cHNyYwotCSAgYW5kIGlmIHRoZSBodHRwX3Byb3h5IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdAotCSAgc2V0LgotCSAgRml4ZXMgYnVnICM1NTIxNDAuCi0KLTIwMDktMDEtMjUgMTk6MjY6NDYgLTA4MDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBBZGQgYSBmZXcgbW9yZSB2aWRlbyBmb3VyY2MncwotCi0yMDA5LTAxLTI0IDE0OjQ4OjAwICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYzoKLQkgIEFkZCB1bml0IHRlc3QgZm9yIGFzcGVjdHJhdGlvY3JvcCBGaXhlcyBidWcgIzUyNzk1MQotCSAgQWRkIHVuaXQgdGVzdCBmb3IgYXNwZWN0cmF0aW9jcm9wIGFuZCByZWZhY3RvciB0aGlzIGVsZW1lbnQuIEFkZGVkCi0JICBmaW5hbGl6ZSBmdW5jdGlvbiB0byBjbGVhbnVwIGxlYWtpbmcgbXV0ZXguCi0KLTIwMDktMDEtMjUgMTQ6MzQ6MDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIElnbm9yZSBjaGVjayBiaW5hcmllcwotCi0yMDA5LTAxLTI0IDE4OjI4OjA2ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JICBTYXZlIHNvbWUgYWxsb2NhdGlvbnMgaWYgdGhlIGVjaG8gZGVsYXkgaXMgaW5jcmVhc2VkIG9mdGVuCi0JICBTYXZlIHNvbWUgYWxsb2NhdGlvbnMgaWYgdGhlIGVjaG8gZGVsYXkgaXMgaW5jcmVhc2VkIG9mdGVuCi0JICBkdXJpbmcgcGxheWJhY2sgYnkgYWx3YXlzIGFsbG9jYXRpbmcgZW5vdWdoIG1lbW9yeSB0byBob2xkCi0JICBkYXRhIHVwIHRvIHRoZSBuZXh0IGNvbXBsZXRlIHNlY29uZCwgaS5lLiBpbiB0aGUgd29yc3QgY2FzZQotCSAgYWxsb2NhdGUgbWVtb3J5IGZvciBvbmUgYWRkaXRpb25hbCBzZWNvbmQuCi0KLTIwMDktMDEtMjQgMTQ6MjU6MDggKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSAgVXBkYXRlIHBsdWdpbiB2ZXJzaW9uIGluIGRvY3VtZW50YXRpb24KLQotMjAwOS0wMS0yMyAyMTo0Nzo0MCArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgIEZpeCBsaW5rIGluIGRvY3VtZW50YXRpb24gb2YgdmlkZW9jcm9wIGVsZW1lbnQKLQotMjAwOS0wMS0yMyAyMTo0NjoxMyArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIGFzcGVjdHJhdGlvY3JvcAotCi0yMDA5LTAxLTI0IDEzOjIxOjM5ICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgVXBkYXRlIHdpbjMyL2NvbW1vbi9jb25maWcuaCBmb3IgdGhlIG5ldyBkZXZlbG9wbWVudCBjeWNsZQotCi0yMDA5LTAxLTI0IDExOjUzOjQwICswMTAwICBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmM6Ci0JICBBZGQgbm90ZSB0aGF0IGF1ZGlvZWNobydzIHJldmVyYiBzb3VuZHMgbWV0YWxsaWMKLQkgIEFkZCBhIG5vdGUgdG8gdGhlIGRvY3MgdGhhdCBhdWRpb2VjaG8ncyByZXZlcmIgd2lsbAotCSAgc291bmQgbWV0YWxsaWMuIFRoaXMgaGFwcGVucyBiZWNhdXNlIGZvciBhIHJlYWwKLQkgIHJldmVyYiBmaWx0ZXIgYWRkaXRpb25hbCBmaWx0ZXJpbmcgaXMgbmVjZXNzYXJ5LgotCSAgQWxzbyBub3RlIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGRlbGF5Ci0JICBwcm9wZXJ0eSB0byBnZXQgYW4gZWNobyBlZmZlY3QuCi0KLTIwMDktMDEtMjMgMjM6Mzg6MTAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogLmdpdGlnbm9yZToKLQkqIGRvY3MvcGx1Z2lucy8uZ2l0aWdub3JlOgotCSogcG8vLmdpdGlnbm9yZToKLQkqIHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvLmdpdGlnbm9yZToKLQkgIE1vcmUgZW50cmllcyBmb3IgdGhlIGdpdGlnbm9yZXMKLQotMjAwOS0wMS0yMyAyMDozNjoyNyArMDEwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6Ci0JICBza2lwIHZpZGVvL3gtcmF3LWdyYXkgaW4gdmlkZW9jcm9wIHVuaXQgdGVzdAotCSAgQSByZWNlbnQgY29tbWl0IGFkZGVkIHZpZGVvL3gtcmF3LWdyYXkgc3VwcG9ydCB0byB2aWRlb2Nyb3AuIEhvd2V2ZXIKLQkgIHRoaXMgbGV0cyB0aGUgdmlkZW9jcm9wIHVuaXQgdGVzdCBmYWlsLiBCZWNhdXNlIHZpZGVvdGVzdHNyYyBjYW4ndAotCSAgZ2VuZXJhdGUgdGhpcyBmb3JtYXQuCi0KLTIwMDktMDEtMjMgMTU6Mzk6NDYgKzAxMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkqIGdzdC92aWRlb2Nyb3AvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuaDoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICBBZGQgYXNwZWN0cmF0aW9jcm9wIGVsZW1lbnQuIEZpeGVzIGJ1ZyAjNTI3OTUxCi0JICBBZGQgbmV3IGFzcGVjdHJhdGlvY3JvcCBlbGVtZW50IHRoYXQgY3JvcHMgdGhlIHZpZGVvCi0JICB0byBhIHNwZWNpZmllZCBhc3BlY3QgcmF0aW8gdXNpbmcgdmlkZW9jcm9wLgotCi0yMDA5LTAxLTIzIDEwOjQ5OjI4ICswMTAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSAgRml4IG5hdmlnYXRpb24gZXZlbnQgZm9yd2FyZGluZyB3aGlsZSBjcm9wcGluZy4gRml4ZXMgYnVnICM1Njc5OTIuCi0JICBGaXggdGhlIG5hdmlnYXRpb24gZXZlbnQgZm9yd2FyZGluZyB3aGlsZSBjcm9wcGluZyBieSBhZGp1c3RpbmcKLQkgIHRoZSBtb3VzZSBwb3NpdGlvbiBieSB0aGUgYW1vdW50IG9mIGNyb3BwZWQgcGl4ZWxzLgotCi0yMDA5LTAxLTIzIDEwOjA0OjM5ICswMTAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEZpeCBsaW5raW5nIG9uIFNvbGFyaXMuIEZpeGVzIGJ1ZyAjNTY4ODA5LgotCSAgQ2hlY2sgZm9yIHRoZSBzb2NrZXQgbGlicmFyeSB3aGljaCBpcyBuZWVkZWQKLQkgIGZvciBzb2NrZXQoKSBvbiBTb2xhcmlzLgotCi0yMDA5LTAxLTIyIDIyOjQxOjQzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgdmVyc2lvbiBudW1iZXIgYWdhaW4gLT4gMC4xMC4xMy4xCi0KLTIwMDktMDEtMjIgMjI6NDE6MDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSAgQWRkIHJlbGVhc2VzIDAuMTAuMTIgYW5kIDAuMTAuMTMgdG8gdGhlIGRvYXAgZmlsZQotCi0yMDA5LTAxLTIyIDE4OjA4OjUwICswMjAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGNvbW1vbjoKLQkgIFVwZGF0ZSBjb21tb24gc25hcHNob3QuCi0KLTIwMDktMDEtMjIgMTQ6MjU6MDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQmFjayB0byBkZXZlbCAtPiAwLjEwLjEyLjEKLQotMjAwOS0wMS0yMiAwMToyOTo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBSZWxlYXNlIDAuMTAuMTIKLQotMjAwOS0wMS0yMSAxNzoyMjozOSAtMDgwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIEZpeCBmb3Igc2VjdXJpdHkgYWR2aXNvcnkgVEtBRFYyMDA5LTB4eAotCSAgRml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIHdoaWxlIHJlYWRpbmcgcXVpY2t0aW1lIGhlYWRlcnMuCi0JICBTZWN1cml0eSBpc3N1ZSBub3RpY2VkIGJ5IFRvYmlhcyBLbGVpbi4KLQotMjAwOS0wMS0yMSAxMjo1Njo1NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBGaXggdHlwbyBhbmQgc21hbGwgZmxhdyBpbiBmbGFjIGRlY29kZXIKLQotMjAwOS0wMS0yMiAxMzo0OTozNSArMDEwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBjb21tb246Ci0JICBGaXggcHJlLWNvbW1pdCBob29rCi0KLTIwMDktMDEtMjIgMTA6NDA6MzQgKzAxMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jOgotCSogZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmg6Ci0JKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6Ci0JKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZWNoby5jOgotCSAgUmVuYW1lIGF1ZGlvcmV2ZXJiIHRvIGF1ZGlvZWNoby4gRml4ZXMgYnVnICM1NjgzOTUuCi0JICBUaGUgZWxlbWVudCBjYW4gYWRkIGFuIGVjaG8gYW5kIGEgc2ltcGxlIHJldmVyYiBlZmZlY3QgdG8KLQkgIGFuIGF1ZGlvIHN0cmVhbSBidXQgZm9yIGEgcmVhbCByZXZlcmIgZmlsdGVyIGl0IHdvdWxkIG5lZWQKLQkgIHNvbWUgYWRkaXRpb25hbCBmaWx0ZXJpbmcgdG8gcHJldmVudCBhIG1ldGFsbGljLXNvdW5kaW5nCi0JICByZXN1bHQuCi0KLTIwMDktMDEtMjIgMTI6MjE6MjkgKzAxMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIEZyZWUgbGVmdG92ZXIgdWRwIHBvcnRzIChpZiBhbnkpIHdoZW4gYSBzZXR1cCByZXF1ZXN0IGZhaWxzLgotCi0yMDA5LTAxLTIyIDA2OjA1OjI2ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSAgSW5zdGFsbCBhbmQgdXNlIHByZS1jb21taXQgaW5kZW50YXRpb24gaG9vayBmcm9tIGNvbW1vbgotCi0yMDA5LTAxLTIxIDEzOjI1OjA2ICswMTAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBXaGl0ZXNwYWNlIGZpeGVzIGFuZCBzb21lIGltcHJvdmVkIGRlYnVnIGxpbmVzLgotCi0yMDA5LTAxLTIxIDA0OjMxOjU4ICswMTAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JKiBhdXRvZ2VuLnNoOgotCSAgYXV0b2dlbi5zaCA6IFVzZSBnaXQgc3VibW9kdWxlCi0KLTIwMDktMDEtMjAgMTU6MzM6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogRml4IGVycm9yIGNvZGUgKHRoZSBtZXNzYWdlIHN0cmluZyBhbHNvIG5lZWRzIGxvdmUsIGJ1dCBub3QgdG9kYXkpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2dldF9yZWFkKToKLQkgIEZpeCBlcnJvciBjb2RlICh0aGUgbWVzc2FnZSBzdHJpbmcgYWxzbyBuZWVkcyBsb3ZlLCBidXQgbm90IHRvZGF5KS4KLQotMjAwOS0wMS0xOSAxMTo0NDozNiArMDAwMCAgTHVvdGFvIEZ1IDxsLmZ1QHBlbmd1dHJvbml4LmRlPgotCi0JICBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOiBBZGQgOGJpdCBncmF5c2NhbGUgc3VwcG9ydCB0byB2aWRlb2Nyb3AgcGx1Z2luLiBGaXhlcyAjNTY3OTUyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTHVvdGFvIEZ1IDxsIGRvdCBmdSBhdCBwZW5ndXRyb25peCBkb3QgZGU+Ci0JICAqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICAoZ3N0X3ZpZGVvX2Nyb3BfZ2V0X2ltYWdlX2RldGFpbHNfZnJvbV9jYXBzKToKLQkgIEFkZCA4Yml0IGdyYXlzY2FsZSBzdXBwb3J0IHRvIHZpZGVvY3JvcCBwbHVnaW4uIEZpeGVzICM1Njc5NTIuCi0KLTIwMDktMDEtMTkgMTE6MjI6MDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1ZGlvZngvYXVkaW9yZXZlcmIuYzogU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGluIHRoZSBpbnN0YW5jZSBpbml0IGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvcmV2ZXJiLmM6IChnc3RfYXVkaW9fcmV2ZXJiX2luaXQpOgotCSAgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGluIHRoZSBpbnN0YW5jZSBpbml0IGZ1bmN0aW9uLgotCi0yMDA5LTAxLTE5IDExOjE5OjA4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIEFkZCBhbiBlY2hvL3JldmVyYiBmaWx0ZXIgdG8gdGhlIGF1ZGlvZnggcGx1Z2luLCB3aXRoIGNvbmZpZ3VyYWJsZSBlY2hvIGRlbGF5LCBpbnRlbnNpdHkgYW5kIGZlZWRiYWNrLiBGaXhlcyBidWcgIzU2Ny4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JICAqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvcmV2ZXJiLmM6IChnc3RfYXVkaW9fcmV2ZXJiX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3JldmVyYl9jbGFzc19pbml0KSwgKGdzdF9hdWRpb19yZXZlcmJfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3JldmVyYl9maW5hbGl6ZSksIChnc3RfYXVkaW9fcmV2ZXJiX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3JldmVyYl9nZXRfcHJvcGVydHkpLCAoZ3N0X2F1ZGlvX3JldmVyYl9zZXR1cCksCi0JICAoZ3N0X2F1ZGlvX3JldmVyYl9zdG9wKSwgKGdzdF9hdWRpb19yZXZlcmJfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9yZXZlcmIuaDoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcmV2ZXJiLmM6IChzZXR1cF9yZXZlcmIpLAotCSAgKGNsZWFudXBfcmV2ZXJiKSwgKEdTVF9TVEFSVF9URVNUKSwgKGF1ZGlvcmV2ZXJiX3N1aXRlKToKLQkgIEFkZCBhbiBlY2hvL3JldmVyYiBmaWx0ZXIgdG8gdGhlIGF1ZGlvZnggcGx1Z2luLCB3aXRoIGNvbmZpZ3VyYWJsZQotCSAgZWNobyBkZWxheSwgaW50ZW5zaXR5IGFuZCBmZWVkYmFjay4gRml4ZXMgYnVnICM1Njc4NzQuCi0KLTIwMDktMDEtMTkgMTA6MTM6NTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLio6IEltcGxlbWVudCBhIHNpbXBsZSBjb21wZW5zYXRpb24gYWxnb3JpdGhtIGZvciByb3VuZGluZyBlcnJvcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fcmVzZXRfc3RhdGUpLAotCSAgKGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIEltcGxlbWVudCBhIHNpbXBsZSBjb21wZW5zYXRpb24gYWxnb3JpdGhtIGZvciByb3VuZGluZyBlcnJvcnMuCi0JICBUaGlzIG1ha2VzIHN1cmUgdGhhdCBhIHNwZWN0cnVtIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZSBidXMKLQkgIGV2ZXJ5IGludGVydmFsIG5hbm9zZWNvbmRzLiBGaXhlcyBidWcgIzU2Nzk1NS4KLQotMjAwOS0wMS0xNSAyMToxNjo0NSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06IExpbmsgYWdhaW5zdCBDb3JlU2VydmljZXMgKG5lZWRlZCBmb3Igb3N4IDEwLjQpIGFuZCBmaXggdXAgdGhlIGxpbmtlciBmbGFncy4gRml4ZXMgIzU2Nzg1My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JICBMaW5rIGFnYWluc3QgQ29yZVNlcnZpY2VzIChuZWVkZWQgZm9yIG9zeCAxMC40KSBhbmQgZml4IHVwIHRoZSBsaW5rZXIKLQkgIGZsYWdzLiBGaXhlcyAjNTY3ODUzLgotCi0yMDA5LTAxLTE1IDE0OjUzOjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IENhdGNoIGludmFsaWQgYW5kIGNvbW1vbmx5IHdyb25nIHBsYXliYWNrIHJhdGVzIGluIHRoZSBlbHN0IGF0b21zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2Vfc2VnbWVudHMpOgotCSAgQ2F0Y2ggaW52YWxpZCBhbmQgY29tbW9ubHkgd3JvbmcgcGxheWJhY2sgcmF0ZXMgaW4gdGhlIGVsc3QgYXRvbXMuCi0JICBGaXhlcyAjNTY3ODAwLgotCi0yMDA5LTAxLTE1IDExOjQwOjIzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiBEb24ndCBjYWxsIGdzdF9mZnRfZjMyX2ZyZWUoKSB3aXRoIE5VTEwgdG8gcHJldmVudCBhIGNyYXNoLiBGaXhlcyBidWcgIzU2NzY0Mi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV9yZXNldF9zdGF0ZSk6Ci0JICBEb24ndCBjYWxsIGdzdF9mZnRfZjMyX2ZyZWUoKSB3aXRoIE5VTEwgdG8gcHJldmVudCBhCi0JICBjcmFzaC4gRml4ZXMgYnVnICM1Njc2NDIuCi0KLTIwMDktMDEtMTQgMTU6NDQ6MTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLio6IFVzZSBjb3JyZWN0IHR5cGVzIGZvciBmcmFtZS9mZnQgY291bnRlcnMgYW5kIHNvbWUgbWlub3IgY2xlYW51cC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIFVzZSBjb3JyZWN0IHR5cGVzIGZvciBmcmFtZS9mZnQgY291bnRlcnMgYW5kIHNvbWUgbWlub3IKLQkgIGNsZWFudXAuCi0KLTIwMDktMDEtMTQgMTU6Mzc6MDcgKzAwMDAgIExlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydEBwb2V0dGVyaW5nLm5ldD4KLQotCSAgZXh0L3B1bHNlL3B1bHNlcHJvYmUuYzogRml4IHJlZmNvdW50IGxvb3AsIHJlc3VsdGluZyBpbiBhIHRocmVhZCBsZWFrLiBGaXhlcyBidWcgIzU2Nzc0Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IExlbm5hcnQgUG9ldHRlcmluZyA8bGVubmFydCBhdCBwb2V0dGVyaW5nIGRvdCBuZXQ+Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmM6IChnc3RfcHVsc2Vwcm9iZV9uZXcpLAotCSAgKGdzdF9wdWxzZXByb2JlX2ZyZWUpOgotCSAgRml4IHJlZmNvdW50IGxvb3AsIHJlc3VsdGluZyBpbiBhIHRocmVhZCBsZWFrLiBGaXhlcyBidWcgIzU2Nzc0Ni4KLQotMjAwOS0wMS0xNCAxMDo0Njo1NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvc3BlY3RydW0vOiBQb3N0IGEgc3BlY3RydW0gbWVzc2FnZSBvbiB0aGUgYnVzIGZvciBldmVyeSBpbnRlcnZhbCwgZXZlbiBpZiB0aGUgaW50ZXJ2YWwgaXMgc21hbGwgdGhhbiB0aGUgbGVuZ3RoIG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVjdHJ1bS9SRUFETUU6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQpLCAoZ3N0X3NwZWN0cnVtX2luaXQpLAotCSAgKGdzdF9zcGVjdHJ1bV9yZXNldF9zdGF0ZSksIChnc3Rfc3BlY3RydW1fZmluYWxpemUpLAotCSAgKGdzdF9zcGVjdHJ1bV9zZXRfcHJvcGVydHkpLCAoZ3N0X3NwZWN0cnVtX3N0YXJ0KSwKLQkgIChnc3Rfc3BlY3RydW1fc3RvcCksIChnc3Rfc3BlY3RydW1fc2V0dXApLAotCSAgKGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIFBvc3QgYSBzcGVjdHJ1bSBtZXNzYWdlIG9uIHRoZSBidXMgZm9yIGV2ZXJ5IGludGVydmFsLCBldmVuCi0JICBpZiB0aGUgaW50ZXJ2YWwgaXMgc21hbGwgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBGRlQuCi0JICBGaXhlcyBidWcgIzU2NzY0Mi4KLQkgIE1ham9yIGNsZWFudXAgb2YgdGhlIHNwZWN0cnVtIGVsZW1lbnQuCi0KLTIwMDktMDEtMTMgMTk6MjM6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgQWRkIGF1ZGlvaWlyZmlsdGVyIGFuZCBhdWRpb2ZpcmZpbHRlciBlbGVtZW50cyB3aGljaCBhbGxvdyBnZW5lcmljIElJUi9GSVIgZmlsdGVycyB0byBiZSBpbXBsZW1lbnRlZCBieSBwcm92aWRpbmcgdGhlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYzogKGdzdF9hdWRpb19maXJfZmlsdGVyX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfdXBkYXRlX2tlcm5lbCksIChnc3RfYXVkaW9fZmlyX2ZpbHRlcl9pbml0KSwKLQkgIChnc3RfYXVkaW9fZmlyX2ZpbHRlcl9zZXR1cCksIChnc3RfYXVkaW9fZmlyX2ZpbHRlcl9maW5hbGl6ZSksCi0JICAoZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fZmlyX2ZpbHRlcl9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2ZpcmZpbHRlci5oOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmM6IChnc3RfYXVkaW9faWlyX2ZpbHRlcl9iYXNlX2luaXQpLAotCSAgKGdzdF9hdWRpb19paXJfZmlsdGVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb19paXJfZmlsdGVyX3VwZGF0ZV9jb2VmZmljaWVudHMpLAotCSAgKGdzdF9hdWRpb19paXJfZmlsdGVyX2luaXQpLCAoZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfc2V0dXApLAotCSAgKGdzdF9hdWRpb19paXJfZmlsdGVyX2ZpbmFsaXplKSwKLQkgIChnc3RfYXVkaW9faWlyX2ZpbHRlcl9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9hdWRpb19paXJfZmlsdGVyX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmg6Ci0JICBBZGQgYXVkaW9paXJmaWx0ZXIgYW5kIGF1ZGlvZmlyZmlsdGVyIGVsZW1lbnRzIHdoaWNoIGFsbG93Ci0JICBnZW5lcmljIElJUi9GSVIgZmlsdGVycyB0byBiZSBpbXBsZW1lbnRlZCBieSBwcm92aWRpbmcgdGhlCi0JICBmaWx0ZXIgY29lZmZpY2llbnRzLiBGaXhlcyBidWcgIzU2NzU3Ny4KLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFsczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBhdWRpb2lpcmZpbHRlciBhbmQgYXVkaW9maXJmaWx0ZXIKLQkgIGVsZW1lbnRzLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIuYzogKG9uX21lc3NhZ2UpLAotCSAgKG9uX3JhdGVfY2hhbmdlZCksIChvbl9oYW5kb2ZmKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChhdWRpb2ZpcmZpbHRlcl9zdWl0ZSk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmM6IChvbl9tZXNzYWdlKSwKLQkgIChvbl9yYXRlX2NoYW5nZWQpLCAob25faGFuZG9mZiksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoYXVkaW9paXJmaWx0ZXJfc3VpdGUpOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9maXJmaWx0ZXItZXhhbXBsZS5jOiAob25fbWVzc2FnZSksCi0JICAob25fcmF0ZV9jaGFuZ2VkKSwgKG1haW4pOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L2lpcmZpbHRlci1leGFtcGxlLmM6IChvbl9tZXNzYWdlKSwKLQkgIChvbl9yYXRlX2NoYW5nZWQpLCAobWFpbik6Ci0JICBBZGQgdW5pdCB0ZXN0cyBhbmQgZXhhbXBsZSBhcHBsaWNhdGlvbnMgZm9yIHRoZSB0d28gZmlsdGVyCi0JICBlbGVtZW50cy4KLQotMjAwOS0wMS0xMyAxOTowOToxOSArMDAwMCAgVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRml4IGZvcm1hdCBzdHJpbmcgZm9yIGd1aW50NjQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgRml4IGZvcm1hdCBzdHJpbmcgZm9yIGd1aW50NjQuCi0KLTIwMDktMDEtMTMgMTk6MDQ6MDkgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOiBvc3hhdWRpbyBwbHVnaW4gbm93IHJlcXVpcmVzIEF1ZGlvVW5pdCBmcmFtZXdvcmssIHNvIGxpbmsgYWdhaW5zdCB0aGF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbToKLQkgIG9zeGF1ZGlvIHBsdWdpbiBub3cgcmVxdWlyZXMgQXVkaW9Vbml0IGZyYW1ld29yaywgc28gbGluayBhZ2FpbnN0IHRoYXQuCi0JICBDbGVhbiB1cCB0YWJzIHYgc3BhY2VzIHdoaWxlIEknbSB0aGVyZS4KLQotMjAwOS0wMS0xMyAxNzo0OTowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYzogQWRkIHNvbWUgZXhhbXBsZSBjb2RlIGZvciBwcmludGluZyB0aGUgUlRQIG1hbmFnZXIgc3RhdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYzogKHByaW50X3NvdXJjZV9zdGF0cyksCi0JICAocHJpbnRfc3RhdHMpLCAobWFpbik6Ci0JICBBZGQgc29tZSBleGFtcGxlIGNvZGUgZm9yIHByaW50aW5nIHRoZSBSVFAgbWFuYWdlciBzdGF0cy4KLQotMjAwOS0wMS0xMyAwODoyNDoyNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXVkaW9meC86IFVzZSBhIGN1c3RvbSBtdXRleCBmb3IgcHJvdGVjdGluZyB0aGUgaW5zdGFuY2UgZmllbGRzIGluc3RlYWQgb2YgdGhlIEdzdE9iamVjdCBsb2NrLiBVc2luZyB0aGUgbGF0dGVyIGMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6IChnc3RfYXVkaW9fY2hlYl9iYW5kX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb19jaGViX2JhbmRfaW5pdCksIChnc3RfYXVkaW9fY2hlYl9iYW5kX2ZpbmFsaXplKSwKLQkgIChnc3RfYXVkaW9fY2hlYl9iYW5kX3NldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYzogKGdzdF9hdWRpb19jaGViX2xpbWl0X2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb19jaGViX2xpbWl0X2luaXQpLCAoZ3N0X2F1ZGlvX2NoZWJfbGltaXRfZmluYWxpemUpLAotCSAgKGdzdF9hdWRpb19jaGViX2xpbWl0X3NldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0Lmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6IChnc3RfYXVkaW9fd3NpbmNiYW5kX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb193c2luY2JhbmRfaW5pdCksIChnc3RfYXVkaW9fd3NpbmNiYW5kX2ZpbmFsaXplKSwKLQkgIChnc3RfYXVkaW9fd3NpbmNiYW5kX3NldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOiAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfaW5pdCksIChnc3RfYXVkaW9fd3NpbmNsaW1pdF9maW5hbGl6ZSksCi0JICAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfc2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0Lmg6Ci0JICBVc2UgYSBjdXN0b20gbXV0ZXggZm9yIHByb3RlY3RpbmcgdGhlIGluc3RhbmNlIGZpZWxkcyBpbnN0ZWFkIG9mCi0JICB0aGUgR3N0T2JqZWN0IGxvY2suIFVzaW5nIHRoZSBsYXR0ZXIgY2FuIGxlYWQgdG8gZGVhZGxvY2tzLCBlc3BlY2lhbGx5Ci0JICB3aXRoIHRoZSBGSVIgZmlsdGVycyB3aGVuIHVwZGF0aW5nIHRoZSBsYXRlbmN5LgotCi0yMDA5LTAxLTExIDE5OjAzOjM4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogSW1wbGVtZW50IGEgYmFzZSBjbGFzcyBmb3IgZ2VuZXJpYyBhdWRpbyBGSVIgZmlsdGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYzoKLQkgIChnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2Rpc3Bvc2UpLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfYmFzZV9pbml0KSwKLQkgIChnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9wdXNoX3Jlc2lkdWUpLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0dXApLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfdHJhbnNmb3JtKSwKLQkgIChnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3N0YXJ0KSwKLQkgIChnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3N0b3ApLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfcXVlcnkpLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfcXVlcnlfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9ldmVudCksCi0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9zZXRfa2VybmVsKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuYzoKLQkgIEltcGxlbWVudCBhIGJhc2UgY2xhc3MgZm9yIGdlbmVyaWMgYXVkaW8gRklSIGZpbHRlcnMuCi0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JICAoZ3N0X2dzdF9hdWRpb193c2luY2JhbmRfbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X2dzdF9hdWRpb193c2luY2JhbmRfd2luZG93X2dldF90eXBlKSwKLQkgIChnc3RfYXVkaW9fd3NpbmNiYW5kX2Jhc2VfaW5pdCksIChnc3RfYXVkaW9fd3NpbmNiYW5kX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb193c2luY2JhbmRfaW5pdCksIChnc3RfYXVkaW9fd3NpbmNiYW5kX2J1aWxkX2tlcm5lbCksCi0JICAoZ3N0X2F1ZGlvX3dzaW5jYmFuZF9zZXR1cCksIChnc3RfYXVkaW9fd3NpbmNiYW5kX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3dzaW5jYmFuZF9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5oOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkgIChnc3RfYXVkaW9fd3NpbmNsaW1pdF9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfYXVkaW9fd3NpbmNsaW1pdF93aW5kb3dfZ2V0X3R5cGUpLAotCSAgKGdzdF9hdWRpb193c2luY2xpbWl0X2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfY2xhc3NfaW5pdCksIChnc3RfYXVkaW9fd3NpbmNsaW1pdF9pbml0KSwKLQkgIChnc3RfYXVkaW9fd3NpbmNsaW1pdF9idWlsZF9rZXJuZWwpLCAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfc2V0dXApLAotCSAgKGdzdF9hdWRpb193c2luY2xpbWl0X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZ2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVXNlIHRoaXMgbmV3IGJhc2UgY2xhc3MgZm9yIGF1ZGlvd3NpbmNiYW5kIGFuZCBhdWRpb3dzaW5jbGltaXQuCi0JICBBbHNvIGNsZWFudXAgYm90aCBlbGVtZW50cy4KLQotMjAwOS0wMS0wOCAxODoxNzoxMyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEluIHB1c2ggbW9kZSwgZXJyb3Igb3V0IGlmIHdlIGdldCBFT1MgYmVmb3JlIHdlJ3ZlIGNyZWF0ZWQgYW55IHNyY3BhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgSW4gcHVzaCBtb2RlLCBlcnJvciBvdXQgaWYgd2UgZ2V0IEVPUyBiZWZvcmUgd2UndmUgY3JlYXRlZCBhbnkgc3JjcGFkcy4KLQkgIEhhbmRsZSAoaW4gcHVsbCBtb2RlKSBzb21lIGZpbGVzIHRoYXQgaGF2ZSBhIHRydW5jYXRlZCBtb292IGF0b20gd2hlcmUKLQkgIHRoZSBmaW5hbCBzdWItYXRvbSBpcyBhICdmcmVlJyBhdG9tIGFuZCB0aGUgY29udGVudHMgb2YgdGhhdCBhcmUgbm90Ci0JICBwcmVzZW50IGluIHRoZSBmaWxlLgotCi0yMDA5LTAxLTA4IDE1OjU2OjQ2ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L21hdHJvc2thLzogU29tZSBjbGVhbnVwcywgcmVmYWN0b3JpbmcgYW5kIG1pbm9yIGVuaGFuY2VtZW50cyBpbiBjYXBzIGhhbmRsaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3ZpZGVvX3BhZF9zZXRjYXBzKToKLQkgIFNvbWUgY2xlYW51cHMsIHJlZmFjdG9yaW5nIGFuZCBtaW5vciBlbmhhbmNlbWVudHMgaW4gY2FwcyBoYW5kbGluZy4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2luaXQpLCAoZ3N0X21hdHJvc2thX3BhZF9yZXNldCksCi0JICAoZ3N0X21hdHJvc2thX3BhZF9mcmVlKSwgKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfcmVxdWVzdF9uZXdfcGFkKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzogKHRlYXJkb3duX3NyY19wYWQpOgotCSAgT25seSByZW1vdmUsIHJlbGVhc2Ugb3IgcmVzZXQgd2hhdCBpcyBhcHByb3ByaWF0ZSB1cG9uIHN0YXRlIGNoYW5nZS4KLQotMjAwOS0wMS0wNyAyMDozODo1MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4dC9wdWxzZS9wdWxzZXNpbmsuKjogVXNlIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgY3VycmVudCBzdHJlYW0gcG9pbnRlciwgYW5kIGlnbm9yZSBjYWxsYmFja3MgZm9yIHN0cmVhbSBvYmplY3RzIHRoYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgVXNlIGEgbXV0ZXggdG8gcHJvdGVjdCB0aGUgY3VycmVudCBzdHJlYW0gcG9pbnRlciwgYW5kIGlnbm9yZQotCSAgY2FsbGJhY2tzIGZvciBzdHJlYW0gb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBkZXN0cm95ZWQgYWxyZWFkeS4KLQkgIEZpeGVzIHByb2JsZW1zIHdpdGggdW5wcmVwYXJlL3ByZXBhcmUgY3ljbGVzIGNhdXNlZCBieSB0aGUgaW5wdXQKLQkgIGNhcHMgY2hhbmdpbmcsIHdpdGhvdXQgcmVpbnRyb2R1Y2luZyBidWcgIzU1Njk4Ni4KLQotMjAwOS0wMS0wNyAxNjowOTo0NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogUmVtb3ZlICgpIGZyb20gdHJhbnNsYXRlYWJsZSBzdHJpbmcsIHNvIHRoYXQgaXQgbWFrZXMgbW9yZSBzZW5zZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBSZW1vdmUgKCkgZnJvbSB0cmFuc2xhdGVhYmxlIHN0cmluZywgc28gdGhhdCBpdCBtYWtlcyBtb3JlIHNlbnNlLgotCi0yMDA5LTAxLTA3IDA5OjQzOjEzICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguYzogTWlub3IgZml4L2NsZWFudXAgaW4gaGVhZGVyIGZpZWxkIGNhbGN1bGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9hdWRzaW5rX3NldF9jYXBzKToKLQkgIE1pbm9yIGZpeC9jbGVhbnVwIGluIGhlYWRlciBmaWVsZCBjYWxjdWxhdGlvbi4KLQotMjAwOS0wMS0wNiAxNzo0ODoxMCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguKjogUmVtb3ZlIGludGVybmFsIHRhZ2xpc3QgYW5kIGZ1bGx5IHVzZSB0YWdzZXR0ZXIgaW50ZXJmYWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBSZW1vdmUgaW50ZXJuYWwgdGFnbGlzdCBhbmQgZnVsbHkgdXNlIHRhZ3NldHRlciBpbnRlcmZhY2UuCi0KLTIwMDktMDEtMDYgMTQ6NTA6MjkgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC4qOiBFbnN1cmUgaGVhZGVyIHNpemUgaW52YXJpYW5jZSBkdXJpbmcgc3Vic2VxdWVudCByZXdyaXRlIGJ5IHVzaW5nIHRhZ3Mgc25hcHNob3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmlfbXV4X3Jlc2V0KSwKLQkgIChnc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyKToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguaDoKLQkgIEVuc3VyZSBoZWFkZXIgc2l6ZSBpbnZhcmlhbmNlIGR1cmluZyBzdWJzZXF1ZW50IHJld3JpdGUgYnkgdXNpbmcKLQkgIHRhZ3Mgc25hcHNob3QuCi0KLTIwMDktMDEtMDUgMTc6MzE6MTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3B1bHNlL3B1bHNlc2luay5jOiBEb24ndCB3YWl0IGZvciB0aGUgcHVsc2UgbWFpbmxvb3Agd2hlbiBkZXN0cm95aW5nIHRoZSBzdHJlYW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5jOiAoZ3N0X3B1bHNlc2lua19kZXN0cm95X3N0cmVhbSk6Ci0JICBEb24ndCB3YWl0IGZvciB0aGUgcHVsc2UgbWFpbmxvb3Agd2hlbiBkZXN0cm95aW5nIHRoZSBzdHJlYW0uCi0JICBGaXhlcyBhIGRlYWRsb2NrIHdoZW4gdGhlIHB1bHNlZGFlbW9uIGdvZXMgYXdheSB3aGlsZSBwdWxzZXNpbmsKLQkgIGlzIFBMQVlJTkcuIEZpeGVzIGJ1ZyAjNTU2OTg2LgotCi0yMDA5LTAxLTA1IDEyOjMwOjQwICswMDAwICBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogQWRkIHN1cHBvcnQgZm9yIGdyYXlzY2FsZSB2NGwyIGRldmljZXMuIEZpeGVzIGJ1ZyAjNTY2NjE2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2FzY2hhIEhhdWVyIDxzIGRvdCBoYXVlciBhdCBwZW5ndXRyb25peCBkb3QgZGU+Ci0JICBMdW90YW8gRnUgPGwgZG90IGZ1IGF0IHBlbmd1dHJvbml4IGRvdCBkZT4KLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfdjRsMmZvdXJjY190b19zdHJ1Y3R1cmUpLAotCSAgKGdzdF92NGwyX2dldF9jYXBzX2luZm8pOgotCSAgQWRkIHN1cHBvcnQgZm9yIGdyYXlzY2FsZSB2NGwyIGRldmljZXMuIEZpeGVzIGJ1ZyAjNTY2NjE2LgotCi0yMDA5LTAxLTA1IDExOjQyOjA5ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L3F0ZGVtdXgvOiBTdHJlYW1saW5lIHRhZyBoYW5kbGluZyBhbmQgcGFzcyB1bnBhcnNlZCB0YWdzIGFzIGJpbmFyeSBibG9iIGluIHByaXZhdGUgdGFnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdGFnX2FkZF9zdHIpLAotCSAgKHF0ZGVtdXhfdGFnX2FkZF90bXBvKSwgKHF0ZGVtdXhfdGFnX2FkZF9jb3ZyKSwKLQkgIChxdGRlbXV4X3RhZ19hZGRfZGF0ZSksIChxdGRlbXV4X3RhZ19hZGRfZ25yZSksCi0JICAocXRkZW11eF90YWdfYWRkX2Jsb2IpLCAocXRkZW11eF9wYXJzZV91ZHRhKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgKiBnc3QvcXRkZW11eC9xdWlja3RpbWUuYzogKHBsdWdpbl9pbml0KToKLQkgIFN0cmVhbWxpbmUgdGFnIGhhbmRsaW5nIGFuZCBwYXNzIHVucGFyc2VkIHRhZ3MgYXMgYmluYXJ5IGJsb2IKLQkgIGluIHByaXZhdGUgdGFnLgotCi0yMDA5LTAxLTA1IDEwOjEzOjI5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogSW1wbGVtZW50IGEgYmFzZSBjbGFzcyBmb3IgSUlSIGZpbHRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmM6Ci0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9iYXNlX2luaXQpLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfZGlzcG9zZSksCi0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9jbGFzc19pbml0KSwKLQkgIChnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2luaXQpLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4pLAotCSAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfc2V0X2NvZWZmaWNpZW50cyksCi0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zZXR1cCksIChwcm9jZXNzKSwKLQkgIChnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3RyYW5zZm9ybV9pcCksCi0JICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zdG9wKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VpaXJmaWx0ZXIuaDoKLQkgIEltcGxlbWVudCBhIGJhc2UgY2xhc3MgZm9yIElJUiBmaWx0ZXJzLgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6IChnc3RfYXVkaW9fY2hlYl9iYW5kX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2NoZWJfYmFuZF9jbGFzc19pbml0KSwgKGdzdF9hdWRpb19jaGViX2JhbmRfaW5pdCksCi0JICAoZ2VuZXJhdGVfY29lZmZpY2llbnRzKSwgKGdzdF9hdWRpb19jaGViX2JhbmRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fY2hlYl9iYW5kX3NldHVwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGViYmFuZC5oOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOiAoZ3N0X2F1ZGlvX2NoZWJfbGltaXRfYmFzZV9pbml0KSwKLQkgIChnc3RfYXVkaW9fY2hlYl9saW1pdF9jbGFzc19pbml0KSwgKGdzdF9hdWRpb19jaGViX2xpbWl0X2luaXQpLAotCSAgKGdlbmVyYXRlX2NvZWZmaWNpZW50cyksIChnc3RfYXVkaW9fY2hlYl9saW1pdF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9hdWRpb19jaGViX2xpbWl0X3NldHVwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuaDoKLQkgIFVzZSB0aGUgSUlSIGZpbHRlciBiYXNlIGNsYXNzIGZvciB0aGUgY2hlYnlzaGV2IGZpbHRlcnMuCi0KLTIwMDktMDEtMDIgMjA6Mzk6MzQgKzAwMDAgIEp1c3RpbiBLYXJuZWdhcyA8anVzdGluQGFmZmluaXguY29tPgotCi0JICBzeXMvb3N4YXVkaW8vOiBSZXdyaXRlIG9zeGF1ZGlvIHRvIHdvcmsgbW9yZSBmbGV4aWJseSBhbmQgbW9yZSByZWxpYWJseSwgdXNpbmcgYSBkaWZmZXJlbnQgYWJzdHJhY3Rpb24gbGF5ZXIgb2YgY29yZWEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEp1c3RpbiBLYXJuZWdhcyA8anVzdGluQGFmZmluaXguY29tPiBhbmQKLQkgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBzb25nYmlyZG5lc3QuY29tPgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5jOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50Lmg6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmg6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmg6Ci0JICBSZXdyaXRlIG9zeGF1ZGlvIHRvIHdvcmsgbW9yZSBmbGV4aWJseSBhbmQgbW9yZSByZWxpYWJseSwgdXNpbmcgYQotCSAgZGlmZmVyZW50IGFic3RyYWN0aW9uIGxheWVyIG9mIGNvcmVhdWRpbyB0aGF0IGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgb2YKLQkgIGRvaW5nIGxvdy1sZXZlbCBhdWRpbyBJL08gb24gT1NYLgotCSAgRml4ZXMgYnlnICM1NjQ5NDguCi0KLTIwMDktMDEtMDIgMTY6MzE6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItZGVjb2RlYmluLUgyNjNwLUFNUi5zaDogQWRkIGV4YW1wbGUgUlRQIHRyYW5zY29kaW5nIHBpcGVsaW5lIGZyb20gYW55IGZpbGUgZGVjb2RlZGFibGUgd2l0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItZGVjb2RlYmluLUgyNjNwLUFNUi5zaDoKLQkgIEFkZCBleGFtcGxlIFJUUCB0cmFuc2NvZGluZyBwaXBlbGluZSBmcm9tIGFueSBmaWxlIGRlY29kZWRhYmxlIHdpdGgKLQkgIHVyaWRlY29kZWJpbi4KLQotMjAwOS0wMS0wMiAxNToyMDo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvZXhhbXBsZXMvcnRwLzogQWRkIHR3byBDIGV4YW1wbGVzIG9mIHVzaW5nIGdzdHJ0cGJpbiBhcyBhIHNlbmRlciBhbmQgYSByZWNlaXZlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYzogKHBhZF9hZGRlZF9jYiksIChtYWluKToKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYzogKG1haW4pOgotCSAgQWRkIHR3byBDIGV4YW1wbGVzIG9mIHVzaW5nIGdzdHJ0cGJpbiBhcyBhIHNlbmRlciBhbmQgYSByZWNlaXZlci4KLQotMjAwOC0xMi0zMSAxMToyMDo1NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIENoYW5nZUxvZzogUmVtb3ZlIGNvbmZsaWN0IG1hcmtlciBmcm9tIENoYW5nZUxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIENoYW5nZUxvZzoKLQkgIFJlbW92ZSBjb25mbGljdCBtYXJrZXIgZnJvbSBDaGFuZ2VMb2cKLQotMjAwOC0xMi0yOCAwOTo1MDozMSArMDAwMCAgal4gPGpAb2lsMjEub3JnPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBjb2RlYyBtYXBwaW5nIGZvciB4dmlkLCBmbXA0IGFuZCBhYzMgdHJhY2tzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogal4gPGogYXQgb2lsMjEub3JnPgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3ZpZGVvX2NhcHMpLAotCSAgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBBZGQgY29kZWMgbWFwcGluZyBmb3IgeHZpZCwgZm1wNCBhbmQgYWMzIHRyYWNrcy4KLQkgIEZpeGVzICM1NjU4NTAKLQotMjAwOC0xMi0yMyAxMjoxMDo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2pwZWcvZ3N0c21va2VlbmMuKjogSW1wbGVtZW50IGdldGNhcHMgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzogKGdzdF9zbW9rZWVuY19pbml0KSwKLQkgIChnc3Rfc21va2VlbmNfZ2V0Y2FwcyksIChnc3Rfc21va2VlbmNfc2V0Y2FwcyksCi0JICAoZ3N0X3Ntb2tlZW5jX2NoYWluKSwgKGdzdF9zbW9rZWVuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5oOgotCSAgSW1wbGVtZW50IGdldGNhcHMgZnVuY3Rpb24uCi0JICBTZXQgY2FwcyBvbiB0aGUgcGFkIGFuZCBvbiBhbGwgb3V0Z29pbmcgYnVmZmVycy4KLQkgIEZpeGVzICM1NjU0NDEuCi0KLTIwMDgtMTItMTkgMDk6MzY6NDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6IEFuZCByZW1vdmUgdGVtcG9yYXJ5IGNvbW1lbnQgcG9pbnRpbmcgdG8gdGhlIGJ1ZyB0aWNrZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JICBBbmQgcmVtb3ZlIHRlbXBvcmFyeSBjb21tZW50IHBvaW50aW5nIHRvIHRoZSBidWcgdGlja2V0LgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgTW92ZSByZW9jY3VyaW5nIGxvZ2dpbmcgdG8gTE9HIGFuZCBsb2cgaW5zdGFuY2UgdG9vLgotCi0yMDA4LTEyLTE3IDE3OjI4OjM5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5jOiBEb24ndCBsZWFrIHRoZSBwYV9vcGVyYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JICBEb24ndCBsZWFrIHRoZSBwYV9vcGVyYXRpb24uCi0KLTIwMDgtMTItMTYgMTY6MTk6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBSZXF1aXJlIGNvcmUgY3ZzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFJlcXVpcmUgY29yZSBjdnMuCi0KLTIwMDgtMTItMTYgMTY6MDc6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguYzogUmVuYW1lIGFwaSBmcm9tIF9mbHVzaCB0byBfcmVzZXRfdGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgUmVuYW1lIGFwaSBmcm9tIF9mbHVzaCB0byBfcmVzZXRfdGFncy4KLQotMjAwOC0xMi0xNiAxNDoyMjo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBVc2UgbmV3IHRhZ3NldHRlciBhcGkgdG8gZmx1c2ggdGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgVXNlIG5ldyB0YWdzZXR0ZXIgYXBpIHRvIGZsdXNoIHRhZ3MuCi0KLTIwMDgtMTItMTYgMTM6MTQ6MzkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6IEluY3JlYXNlIHRpbWVvdXQgdG8gMyBtaW51dGVzIHRvIHByZXZlbnQgdGltZW91dHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6IChkZWludGVybGVhdmVfc3VpdGUpOgotCSAgSW5jcmVhc2UgdGltZW91dCB0byAzIG1pbnV0ZXMgdG8gcHJldmVudCB0aW1lb3V0cy4KLQotMjAwOC0xMi0xNiAxMjo1MjoyNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmM6IEluY3JlYXNlIHRpbWVvdXQgdG8gMyBtaW51dGVzIHRvIHByZXZlbnQgdGltZW91dHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOiAoaW50ZXJsZWF2ZV9zdWl0ZSk6Ci0JICBJbmNyZWFzZSB0aW1lb3V0IHRvIDMgbWludXRlcyB0byBwcmV2ZW50IHRpbWVvdXRzLgotCi0yMDA4LTEyLTE2IDExOjU3OjAxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4Lio6IFRvdGFsbHkgcmVtb3ZlIHRoZSBpbnRlcm5hbCB0YWdsaXN0cyBhbmQgZnVsbHkgdXNlIHRhZ3NldHRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5oOgotCSAgVG90YWxseSByZW1vdmUgdGhlIGludGVybmFsIHRhZ2xpc3RzIGFuZCBmdWxseSB1c2UgdGFnc2V0dGVyLgotCi0yMDA4LTEyLTE1IDE1OjU5OjUzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEluc3RlYWQgb2YgZmlsdGVyaW5nIHdyb25nbHkganVzdCB1c2UgdGhlIG1lcmdlbW9kZS4gQXBwbGljYXRpb25zIGlzIHVzZSBLRUVQX0FMTCBpZiB0aGV5IHdhbnQgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBJbnN0ZWFkIG9mIGZpbHRlcmluZyB3cm9uZ2x5IGp1c3QgdXNlIHRoZSBtZXJnZW1vZGUuIEFwcGxpY2F0aW9ucyBpcwotCSAgdXNlIEtFRVBfQUxMIGlmIHRoZXkgd2FudCB0byBzdXByZXNzIHRhZy1ldmVudHMuIEZpeGVzICM1NjMyMjEgZm9yCi0JICBhdmkgZm9yIHJlYWwgKEkgaG9wZSkuIEV2ZXJ5b25lIGNoaW1lIGluLCBiZWZvcmUgSSBmaXggdGhlIG90aGVycy4KLQotMjAwOC0xMi0xNSAxMjo0NTozNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuYzogQWRkIG5vdGUgYWJvdXQgbWVtbGVhay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuYzoKLQkgIEFkZCBub3RlIGFib3V0IG1lbWxlYWsuCi0KLTIwMDgtMTItMTMgMTY6MjM6MDkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIG00L01ha2VmaWxlLmFtOiBBIGNvdXBsZSBtb3JlIC5tNCB0aGF0IGFyZW4ndCBzaGlwcGVkIGFueW1vcmUgd2l0aCBnZXR0ZXh0IDAuMTcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogbTQvTWFrZWZpbGUuYW06Ci0JICBBIGNvdXBsZSBtb3JlIC5tNCB0aGF0IGFyZW4ndCBzaGlwcGVkIGFueW1vcmUgd2l0aCBnZXR0ZXh0IDAuMTcuCi0KLTIwMDgtMTItMTMgMTU6MzQ6MDEgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIFN3aXRjaCB0byB1c2luZyBHc3RTdGF0aWNQYWRUZW1wbGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfYmFzZV9pbml0KSwKLQkgIChnc3RfZmxhY19kZWNfaW5pdCk6Ci0JICAqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzogKGdzdF9hbGF3X2RlY19iYXNlX2luaXQpLAotCSAgKGdzdF9hbGF3X2RlY19pbml0KToKLQkgICogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOiAoZ3N0X2FsYXdfZW5jX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2FsYXdfZW5jX2luaXQpOgotCSAgKiBnc3QvbGF3L2FsYXcuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzogKGdzdF9tdWxhd2RlY19iYXNlX2luaXQpLAotCSAgKGdzdF9tdWxhd2RlY19pbml0KToKLQkgICogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzogKGdzdF9tdWxhd2VuY19iYXNlX2luaXQpLAotCSAgKGdzdF9tdWxhd2VuY19pbml0KToKLQkgICogZ3N0L2xhdy9tdWxhdy5jOiAocGx1Z2luX2luaXQpOgotCSAgU3dpdGNoIHRvIHVzaW5nIEdzdFN0YXRpY1BhZFRlbXBsYXRlLgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IChnc3RfdWRwX2dldF9hZGRyKToKLQkgIERvbid0IGZvcmdldCB0byBmcmVlIHRoZSBhZGRyaW5mbyBzdHJ1Y3R1cmUuCi0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3Jlc2V0KSwKLQkgIChnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZSk6Ci0JICBEb24ndCBmb3JnZXQgdG8gdW5yZWYgdGhlIEdzdEFkYXB0ZXIuCi0KLTIwMDgtMTItMTMgMTI6NTg6MjQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIG00L01ha2VmaWxlLmFtOiBpbnR0eXBlcy5tNCBoYXNuJ3QgYmVlbiBhdmFpbGFibGUgc2luY2UgZ2V0dGV4dC0wLjE1LCBhbmQgc2luY2Ugd2Ugbm93IHJlcXVpcmUgZ2V0dGV4dCA+PSAwLjE3IC4uLiB3ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIG00L01ha2VmaWxlLmFtOgotCSAgaW50dHlwZXMubTQgaGFzbid0IGJlZW4gYXZhaWxhYmxlIHNpbmNlIGdldHRleHQtMC4xNSwgYW5kIHNpbmNlIHdlIG5vdwotCSAgcmVxdWlyZSBnZXR0ZXh0ID49IDAuMTcgLi4uIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBmaWxlcyB0bwotCSAgZGlzdC4KLQotMjAwOC0xMi0xMCAxNTowMzoyMyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBzbWFsbGVyIHNwZWMgZmlsZSB1cGRhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNtYWxsZXIgc3BlYyBmaWxlIHVwZGF0ZXMKLQotMjAwOC0xMi0wOSAxNzo1NToyMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IE1vcmUgbG9nZ2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBNb3JlIGxvZ2dpbmcuCi0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBIYW5kbGUgbW9yZSBtZXRhZGF0YSBmaWVsZHMuIEJldHRlciBlc3RpbWF0ZSBvZiBtZXRhZGF0YSBzaXplLiBEb24ndAotCSAgbWVyZ2UgcmVjZWl2ZWQgdGFncywgaWYgYXBwbGljYXRpb24gaGFzIHNwZWNpZmllZCB0YWdzIHVzaW5nCi0JICBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMLiBGaXhlcyAjNTYzMjIxIGZvciBhdmkuCi0KLTIwMDgtMTItMDkgMTQ6MzA6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IEFsc28gaWdub3JlIHB1bHNlbWl4ZXIgZm9yIHRoZSBzdGF0ZXMgdW5pdCB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgQWxzbyBpZ25vcmUgcHVsc2VtaXhlciBmb3IgdGhlIHN0YXRlcyB1bml0IHRlc3QuCi0KLTIwMDgtMTItMDkgMTQ6MTk6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmM6IEFkZCBhbiBFT0kgbWFya2VyIGF0IHRoZSBlbmQgb2YgdGhlIGpwZWcgZnJhbWUgd2hlbiBpdCdzIG1pc3NpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzogKGdzdF9ydHBfanBlZ19kZXBheV9wcm9jZXNzKToKLQkgIEFkZCBhbiBFT0kgbWFya2VyIGF0IHRoZSBlbmQgb2YgdGhlIGpwZWcgZnJhbWUgd2hlbiBpdCdzIG1pc3NpbmcuCi0JICBGaXhlcyAjNTYzMDU2LgotCi0yMDA4LTEyLTA5IDEwOjQ3OjE0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jOiBVcGRhdGUgdGhlIHVuaXQgdGVzdCBmb3IgdGhlIG5ldyBjb2xvciB2YWx1ZXMgZm9yIEJULjYwMSByZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6IChjaGVja18xeDFfYnVmZmVyKToKLQkgIFVwZGF0ZSB0aGUgdW5pdCB0ZXN0IGZvciB0aGUgbmV3IGNvbG9yIHZhbHVlcyBmb3IgQlQuNjAxIHJlZC4KLQkgIEZpeGVzIGJ1ZyAjNTYzNTEwLgotCi0yMDA4LTEyLTA5IDEwOjI4OjExICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZHYvZ3N0ZHZkZW11eC5jOiBSZXN0b3JlIHByZXZpb3VzIGJlaGF2aW91ciBvZiBub3QgcGFzc2luZyBRb1MgYW5kIG5hdmlnYXRpb24gZXZlbnRzIHVwc3RyZWFtLCB3aGljaCBwcmVzdW1hYmx5IHcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfaGFuZGxlX3NyY19ldmVudCk6Ci0JICBSZXN0b3JlIHByZXZpb3VzIGJlaGF2aW91ciBvZiBub3QgcGFzc2luZyBRb1MgYW5kIG5hdmlnYXRpb24KLQkgIGV2ZW50cyB1cHN0cmVhbSwgd2hpY2ggcHJlc3VtYWJseSB3YXNuJ3QgbWVhbnQgdG8gYmUgY2hhbmdlZC4KLQotMjAwOC0xMi0wOSAwOTozOTo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZHYvZ3N0ZHZkZW11eC5jOiBBZGQgc3JjcGFkcyBvbmx5IHdoZW4gbmVlZGVkIGFuZCByZW1vdmUgdGhlbSBhZ2FpbiB3aGVuIGdvaW5nIGJhY2sgdG8gUkVBRFkuIFRoaXMgcHJldmVudHMgc3RhbGwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfYWRkX3ZpZGVvX3BhZCksCi0JICAoZ3N0X2R2ZGVtdXhfYWRkX2F1ZGlvX3BhZCksIChnc3RfZHZkZW11eF9yZW1vdmVfcGFkcyksCi0JICAoZ3N0X2R2ZGVtdXhfZGVtdXhfYXVkaW8pLCAoZ3N0X2R2ZGVtdXhfZGVtdXhfdmlkZW8pLAotCSAgKGdzdF9kdmRlbXV4X2NoYWluKSwgKGdzdF9kdmRlbXV4X2xvb3ApLAotCSAgKGdzdF9kdmRlbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICBBZGQgc3JjcGFkcyBvbmx5IHdoZW4gbmVlZGVkIGFuZCByZW1vdmUgdGhlbSBhZ2FpbiB3aGVuIGdvaW5nCi0JICBiYWNrIHRvIFJFQURZLiBUaGlzIHByZXZlbnRzIHN0YWxsZWQgcGlwZWxpbmVzIGlmIHRoZXJlJ3Mgbm8KLQkgIGF1ZGlvIGluc2lkZSB0aGUgRFYgc3RyZWFtLCB3aGljaCBoYXBwZW5zIGZvciBtYW55IE1YRiBmaWxlcy4KLQotMjAwOC0xMi0wOSAwOTowOToyNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOiBUaGUgcG9ydHMgaW4gbGlic291cCBhcmUgdW5zaWduZWQgaW50ZWdlcnMgYW5kIG5vdCBzaWduZWQgaW50ZWdlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChydW5fc2VydmVyKToKLQkgIFRoZSBwb3J0cyBpbiBsaWJzb3VwIGFyZSB1bnNpZ25lZCBpbnRlZ2VycyBhbmQgbm90IHNpZ25lZAotCSAgaW50ZWdlcnMuCi0KLTIwMDgtMTItMDggMTg6MzE6MDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L2R2L2dzdGR2ZGVtdXguYzogRm9yd2FyZCBhbGwgZXZlbnRzIHVwc3RyZWFtIHVubGVzcyBpdCdzIHNvbWV0aGluZyB3ZSByZWFsbHkgZG9uJ3QgaGFuZGxlLiBUaGlzIGZpeGVzIGxhdGVuY3kgY29uLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2ZGVtdXguYzogKGdzdF9kdmRlbXV4X2hhbmRsZV9zcmNfZXZlbnQpOgotCSAgRm9yd2FyZCBhbGwgZXZlbnRzIHVwc3RyZWFtIHVubGVzcyBpdCdzIHNvbWV0aGluZyB3ZSByZWFsbHkKLQkgIGRvbid0IGhhbmRsZS4gVGhpcyBmaXhlcyBsYXRlbmN5IGNvbmZpZ3VyYXRpb24gb2YgcGlwZWxpbmVzLgotCi0yMDA4LTEyLTA4IDE4OjI0OjIxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9kdi86IFJlYWxseSBjYWxsIGR2X2luaXQoKSBleGFjdGx5IG9uZSB0aW1lLCBub3Qgb25lIHRpbWUgZm9yIHRoZSBkZW11eGVyIGFuZCBvbmUgdGltZSBmb3IgdGhlIGRlY29kZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2LmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfY2xhc3NfaW5pdCk6Ci0JICBSZWFsbHkgY2FsbCBkdl9pbml0KCkgZXhhY3RseSBvbmUgdGltZSwgbm90IG9uZSB0aW1lIGZvcgotCSAgdGhlIGRlbXV4ZXIgYW5kIG9uZSB0aW1lIGZvciB0aGUgZGVjb2Rlci4KLQotMjAwOC0xMi0wOCAxMjozNzo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6IENvcHkgaW5jb21taW5nIHRpbWVzdGFtcCB0byBvdXRnb2luZyBwYWNrZXRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0YXBheS5jOiAoZ3N0X3J0cF9tcDRhX3BheV9oYW5kbGVfYnVmZmVyKToKLQkgIENvcHkgaW5jb21taW5nIHRpbWVzdGFtcCB0byBvdXRnb2luZyBwYWNrZXRzLgotCi0yMDA4LTEyLTA4IDEyOjM2OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogRG9uJ3QgdHJ5IHRvIHB1c2ggcGFja2V0cyBiZWZvcmUgd2UgY291bGQgZmluZCBhIHZhbGlkIGNvbmZpZyBzdGFydGNvZGUuIEZpeGVzICM1NjM1MDkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IChnc3RfcnRwX21wNHZfcGF5X2ZsdXNoKSwKLQkgIChnc3RfcnRwX21wNHZfcGF5X2V2ZW50KToKLQkgIERvbid0IHRyeSB0byBwdXNoIHBhY2tldHMgYmVmb3JlIHdlIGNvdWxkIGZpbmQgYSB2YWxpZCBjb25maWcKLQkgIHN0YXJ0Y29kZS4gRml4ZXMgIzU2MzUwOS4KLQotMjAwOC0xMi0wNyAxOToyMjo0OCArMDAwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCi0JICBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzogU2V0IHRoZSBtaXhlciBmZCBiZWZvcmUgY2FsbGluZyBpb2N0bCgpIG9uIGl0LiBGaXhlcyBidWcgIzU2MzQxNC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb24gYXQgc3VuIGRvdCBjb20+Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfb3Blbik6Ci0JICBTZXQgdGhlIG1peGVyIGZkIGJlZm9yZSBjYWxsaW5nIGlvY3RsKCkgb24gaXQuIEZpeGVzIGJ1ZyAjNTYzNDE0LgotCi0yMDA4LTEyLTA3IDE5OjAxOjM1ICswMDAwICBBbGV4YW5kcmUgUm9zdG92dHNldiA8dGV0cm9taW5vQGdtYWlsLmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBNYWtlIHVzYWdlIG9mIGxpYnY0bCBvcHRpb25hbCBieSBhIGNvbmZpZ3VyZSBwYXJhbWV0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbGV4YW5kcmUgUm9zdG92dHNldiA8dGV0cm9taW5vIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIE1ha2UgdXNhZ2Ugb2YgbGlidjRsIG9wdGlvbmFsIGJ5IGEgY29uZmlndXJlIHBhcmFtZXRlci4KLQkgIEZpeGVzIGJ1ZyAjNTYzNTA0LgotCi0yMDA4LTEyLTA1IDA5OjI0OjE4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBtYXRyb3NrYW11eCBhbmQgbWF0cm9za2FkZW11eCBhbmQgdXBkYXRlIHRoZSBpbnNwZWN0aW9uIHhtbCBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlbzRsaW51eDIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIG1hdHJvc2thbXV4IGFuZCBtYXRyb3NrYWRlbXV4IGFuZAotCSAgdXBkYXRlIHRoZSBpbnNwZWN0aW9uIHhtbCBmaWxlcy4KLQotMjAwOC0xMi0wNCAyMDoxMDo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBjb25maWd1cmUuYWM6IEFwcGFyZW50bHkgQUNfQ09ORklHX01BQ1JPX0RJUiBicmVha3Mgd2hlbiB1c2luZyBtb3JlIHRoYW4gb25lIG1hY3JvIGRpcmVjdG9yeSwgcmV2ZXJ0aW5nIGxhc3QgY2hhbmdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEFwcGFyZW50bHkgQUNfQ09ORklHX01BQ1JPX0RJUiBicmVha3Mgd2hlbiB1c2luZyBtb3JlCi0JICB0aGFuIG9uZSBtYWNybyBkaXJlY3RvcnksIHJldmVydGluZyBsYXN0IGNoYW5nZS4KLQotMjAwOC0xMi0wNCAxOTo0NzoyMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBjb25maWd1cmUuYWM6IFNldCBBQ19DT05GSUdfTUFDUk9fRElSIHRvIGNvbW1vbi9tNCB0byBwb2ludCBhdXRvY29uZiB0byBvdXIgTTQgbWFjcm9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFNldCBBQ19DT05GSUdfTUFDUk9fRElSIHRvIGNvbW1vbi9tNCB0byBwb2ludCBhdXRvY29uZiB0bwotCSAgb3VyIE00IG1hY3Jvcy4KLQotMjAwOC0xMS0zMCAxNjoyNDo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiBQcm92aWRlIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgZm9ybWF0IHN0cmluZyB0byBmaXggYSBjb21waWxlciB3YXJuaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlcik6Ci0JICBQcm92aWRlIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgZm9ybWF0IHN0cmluZwotCSAgdG8gZml4IGEgY29tcGlsZXIgd2FybmluZy4KLQotMjAwOC0xMS0yOSAyMDowNTo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYzogRml4IGNsYXNzaWZpY2F0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOgotCSAgRml4IGNsYXNzaWZpY2F0aW9uLgotCi0yMDA4LTExLTI5IDEzOjMxOjU1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFJlcXVpcmUgZ2V0dGV4dCAwLjE3IGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgZG9uJ3QgbWl4IHdpdGggbGlidG9vbCAyLjIuIEF0IGJ1aWxkIHRpbWUgYW4gb2xkZXIgZ2V0dGV4dCB2ZXJzaW9uIHdpbGwgcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQ3lnd2luIFBvcnRzIG1haW50YWluZXIKLQkgIDx5c2Vsa293aXR6IGF0IHVzZXJzIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgotCSAgKiBhdXRvZ2VuLnNoOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBSZXF1aXJlIGdldHRleHQgMC4xNyBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIGRvbid0IG1peCB3aXRoIGxpYnRvb2wKLQkgIDIuMi4gQXQgYnVpbGQgdGltZSBhbiBvbGRlciBnZXR0ZXh0IHZlcnNpb24gd2lsbCBzdGlsbCB3b3JrLgotCSAgRml4ZXMgYnVnICM1NTYwOTEuCi0KLTIwMDgtMTEtMjggMTU6MTA6NTAgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiBNYWtlIGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyKCkgaWdub3JlIGVycm9ycyBmcm9tIHNlbmR0bygpIGluc3RlYWQgb2YgYnJlYWtpbmcgc3RyZWFtaW5nLiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19yZW5kZXIpOgotCSAgTWFrZSBnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlcigpIGlnbm9yZSBlcnJvcnMgZnJvbSBzZW5kdG8oKSBpbnN0ZWFkIG9mCi0JICBicmVha2luZyBzdHJlYW1pbmcuIEVtaXQgYSB3YXJuaW5nIGluc3RlYWQuIEZpeGVzICM1NjI1NzIuCi0KLTIwMDgtMTEtMjcgMTY6NDM6MjQgKzAwMDAgIFJvbiBNY091YXQgPHJtY291YXRAc21hcnR0LmNvbT4KLQotCSAgQWRkIHN1cHBvcnQgZm9yIGJhc2ljIGFuZCBkaWdlc3QgYXV0aGVudGljYXRpb24gaW4gc291cGh0dHBzcmMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBSb24gTWNPdWF0IDxybWNvdWF0IGF0IHNtYXJ0dCBkb3QgY29tPgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBfaHR0cF9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfaW5pdCksIChnc3Rfc291cF9odHRwX3NyY19kaXNwb3NlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19hdXRoZW50aWNhdGVfY2IpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfc3RhcnQpOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOiAoYmFzaWNfYXV0aF9jYiksCi0JICAoZGlnZXN0X2F1dGhfY2IpLCAocnVuX3Rlc3QpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHNvdXBodHRwc3JjX3N1aXRlKSwgKHJ1bl9zZXJ2ZXIpOgotCSAgQWRkIHN1cHBvcnQgZm9yIGJhc2ljIGFuZCBkaWdlc3QgYXV0aGVudGljYXRpb24gaW4gc291cGh0dHBzcmMuCi0JICBGaXhlcyBidWcgIzU2MTc3NS4KLQotMjAwOC0xMS0yNyAxMjoxMzozOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvd2F2ZW5jLzogQWRkIHN1cHBvcnQgZm9yIGEtbGF3IGFuZCBtdS1sYXcgZW5jb2RlZCB3YXYgZmlsZXMuIEZpeGVzIGJ1ZyAjNTYyNDM0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGVwaWpuIFZhbiBFZWNraG91ZHQKLQkgIDxwZXBpam4gZG90IHZhbmVlY2tob3VkdCBhdCBsdWNpYWQgZG90IGNvbT4KLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY3JlYXRlX2hlYWRlcl9idWYpLAotCSAgKGdzdF93YXZlbmNfc2lua19zZXRjYXBzKSwgKGdzdF93YXZlbmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaDoKLQkgICogZ3N0L3dhdmVuYy9yaWZmLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgYS1sYXcgYW5kIG11LWxhdyBlbmNvZGVkIHdhdiBmaWxlcy4gRml4ZXMgYnVnICM1NjI0MzQuCi0KLTIwMDgtMTEtMjcgMTE6MjI6NTYgKzAwMDAgIOydtOusuO2YlSA8aXdpbmdzQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBQcmV2ZW50IGZ1cnRoZXIgcmVhZC93cml0ZSBhY3Rpb25zIHRha2VuIHRvIHRoZSBjb25uZWN0LWZhaWxlZCBzb2NrZXQgYnkgZXJyb3Jpbmcgb3V0IHF1aWNrbHkuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiDsnbTrrLjtmJUgPGl3aW5ncyBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19sb29wX3VkcCk6Ci0JICBQcmV2ZW50IGZ1cnRoZXIgcmVhZC93cml0ZSBhY3Rpb25zIHRha2VuIHRvIHRoZSBjb25uZWN0LWZhaWxlZCBzb2NrZXQgYnkKLQkgIGVycm9yaW5nIG91dCBxdWlja2x5LiBTZWUgIzU2MjI1OC4KLQotMjAwOC0xMS0yNiAyMToxOTo0NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmM6IFNldCBmYWtlc2luayB0byBzeW5jLiBPdGhlcndpc2UgcGVvcGxlIG1pZ2h0IHF1ZXN0aW9uIHRoZSBtZXNzYWdlIGludGVydmFsLiBOZXYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmM6Ci0JICBTZXQgZmFrZXNpbmsgdG8gc3luYy4gT3RoZXJ3aXNlIHBlb3BsZSBtaWdodCBxdWVzdGlvbiB0aGUgbWVzc2FnZQotCSAgaW50ZXJ2YWwuIE5ldmVydGhlbGVzcyB0aGUgdGltZXN0YW1wIGluIHRoZSBtZXNzYWdlIGlzIHdoYXQgbWF0dGVycy4KLQotMjAwOC0xMS0yNSAxODoxMzoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvaWNsZXMvLmN2c2lnbm9yZTogY3ZzaWdub3JlIG5ld2x5IGdlbmVyYXRlZCBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2ljbGVzLy5jdnNpZ25vcmU6Ci0JICBjdnNpZ25vcmUgbmV3bHkgZ2VuZXJhdGVkIGZpbGUuCi0KLTIwMDgtMTEtMjUgMTg6MDM6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBGaXggdGhlIGRlc2NyaXB0aW9ucyBhbmQgZml4IHNvbWUgZW1haWwgYWRkcmVzc2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JICAqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzogKGdzdF9ydHBfTDE2X2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzogKGdzdF9ydHBfYWMzX2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBkdmRlcGF5LmM6IChnc3RfcnRwX2R2X2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzogKGdzdF9ydHBfZ3NtX3BheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzogKGdzdF9ydHBfaDI2M19kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzogKGdzdF9ydHBfaDI2M3BfZGVwYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzogKGdzdF9ydHBfbXAxc19kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzogKGdzdF9ydHBfbXAydF9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOiAoZ3N0X3J0cF9tcDRhX2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6IChnc3RfcnRwX21wNGdfZGVwYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzogKGdzdF9ydHBfbXA0dl9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IChnc3RfcnRwX21wNHZfcGF5X2V2ZW50KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzogKGdzdF9ydHBfcGNtYV9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19wYXlfZmluaXNoX2hlYWRlcnMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOiAoZ3N0X3J0cF92cmF3X2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzoKLQkgIEZpeCB0aGUgZGVzY3JpcHRpb25zIGFuZCBmaXggc29tZSBlbWFpbCBhZGRyZXNzZXMuCi0KLTIwMDgtMTEtMjUgMTc6NDc6MjQgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBNUEcxIGFuZCBNUEcyIGZvdXJjYyB0byBzdXBwb3J0ZWQgcXRkZW11eCB2aWRlbyBjb2RlY3MgYXMgSSBmb3VuZCBzb21lIHZpZGVvIGNsaXBzIHVzaW5nIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0xMS0yNSAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF92aWRlb19jYXBzKTogQWRkIE1QRzEgYW5kIE1QRzIKLQkgIGZvdXJjYwotCSAgdG8gc3VwcG9ydGVkIHF0ZGVtdXggdmlkZW8gY29kZWNzIGFzIEkgZm91bmQgc29tZSB2aWRlbyBjbGlwcwotCSAgdXNpbmcKLQkgIHRob3NlLgotCi0yMDA4LTExLTI1IDE2OjI2OjE2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXV0b2RldGVjdC86IFBvc3QgYW4gZXJyb3Igd2hlbiB3ZSBjYW4ndCBzZXQgdGhlIGludGVybmFsIGdob3N0cGFkIHRhcmdldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6IChnc3RfYXV0b19hdWRpb19zaW5rX2RldGVjdCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jOiAoZ3N0X2F1dG9fYXVkaW9fc3JjX2RldGVjdCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzogKGdzdF9hdXRvX3ZpZGVvX3NpbmtfcmVzZXQpLAotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZGV0ZWN0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6IChnc3RfYXV0b192aWRlb19zcmNfZGV0ZWN0KToKLQkgIFBvc3QgYW4gZXJyb3Igd2hlbiB3ZSBjYW4ndCBzZXQgdGhlIGludGVybmFsIGdob3N0cGFkIHRhcmdldC4KLQotMjAwOC0xMS0yNSAxNjowNjoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuKjogRml4IHJlbmVnb3RpYXRpb24gd2hlbiBjaGFuZ2luZyBwcm9wZXJ0aWVzIHVzaW5nIHRoZSBuZXcgYmFzZXRyYW5zZm9ybSBmZWF0dXJlcy4gRml4ZXMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzogKGdzdF92aWRlb19jcm9wX2luaXQpLAotCSAgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybSksIChnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X3ZpZGVvX2Nyb3Bfc2V0X2NhcHMpLCAoZ3N0X3ZpZGVvX2Nyb3Bfc2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuaDoKLQkgIEZpeCByZW5lZ290aWF0aW9uIHdoZW4gY2hhbmdpbmcgcHJvcGVydGllcyB1c2luZyB0aGUgbmV3IGJhc2V0cmFuc2Zvcm0KLQkgIGZlYXR1cmVzLiBGaXhlcyAjNTYxNTAyLgotCSAgKiB0ZXN0cy9pY2xlcy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvaWNsZXMvdmlkZW9jcm9wMi10ZXN0LmM6IChtYWtlX3BpcGVsaW5lKSwgKG1haW4pOgotCSAgQWRkIGNyYXp5IGludGVyYWN0aXZlIHRlc3QgdW5pdCBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcHJvcGVydGllcy4KLQotMjAwOC0xMS0yNCAxMjoyMDoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBBZGQgc29tZSBtb3JlIGRlYnVnZ2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChuZXdfc2Vzc2lvbl9wYWQpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX3JhbmdlKToKLQkgIEFkZCBzb21lIG1vcmUgZGVidWdnaW5nLgotCSAgVXNlIHRoZSByZWFuZ2VzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciB1bmNvbmRpdGlvbmFsbHkuCi0JICBGaXhlcyAjNTYxNjI1LgotCi0yMDA4LTExLTIzIDE1OjA4OjQ1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzogQ2hhbmdlICNpZiAwIHRvIHNvbWV0aGluZyBtb3JlIGV4cHJlc2l2ZSBhbmQgYWRkIHBvaW50ZXIgdG8gcmVsYXRlZCBidWcgdGlja2V0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzoKLQkgIENoYW5nZSAjaWYgMCB0byBzb21ldGhpbmcgbW9yZSBleHByZXNpdmUgYW5kIGFkZCBwb2ludGVyIHRvIHJlbGF0ZWQKLQkgIGJ1ZyB0aWNrZXQuCi0KLTIwMDgtMTEtMjMgMTE6MTc6MDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkKLQotMjAwOC0xMS0yMyAxMToxNDo0MiArMDAwMCAgVGFsIFNoYWxpZiA8dHNoYWxpZkBuYXJnaWxhLm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBVc2UgR197QklHLExJVFRMRX1fRU5ESUFOIGluc3RlYWQgb2YgdGhlIG5vbi1HTGliIHZhcmlhbnRzIGFzIHRoZSBsYXR0ZXIgZG9uJ3QgZXhpc3Qgb24gc29tZSBzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUYWwgU2hhbGlmIDx0c2hhbGlmIGF0IG5hcmdpbGEgZG90IG9yZz4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9hdWRpb19jYXBzKToKLQkgIFVzZSBHX3tCSUcsTElUVExFfV9FTkRJQU4gaW5zdGVhZCBvZiB0aGUgbm9uLUdMaWIgdmFyaWFudHMgYXMKLQkgIHRoZSBsYXR0ZXIgZG9uJ3QgZXhpc3Qgb24gc29tZSBzeXN0ZW1zIChtaW5ndykuIEZpeGVzIGJ1ZyAjNTYxOTkyLgotCi0yMDA4LTExLTIxIDEzOjQzOjI5ICswMDAwICBaZWVzaGFuIEFsaSA8emVlc2hhbmFrQGdub21lLm9yZz4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogQWRkIHRyYW5zZmVyTW9kZS5kbmxhLm9yZyBoZWFkZXIgdG8gSFRUUCByZXF1ZXN0cyBhcyB0aGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBETE5BIHNwZWNzIGFuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBaZWVzaGFuIEFsaSA8emVlc2hhbmFrIGF0IGdub21lIGRvdCBvcmc+Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IChnc3Rfc291cF9odHRwX3NyY19idWlsZF9tZXNzYWdlKToKLQkgIEFkZCB0cmFuc2Zlck1vZGUuZG5sYS5vcmcgaGVhZGVyIHRvIEhUVFAgcmVxdWVzdHMgYXMgdGhpcyBpcwotCSAgcmVxdWlyZWQgYnkgdGhlIERMTkEgc3BlY3MgYW5kIGRvZXNuJ3QgaHVydCBpbiBvdGhlciBzaXR1YXRpb25zLgotCSAgRml4ZXMgYnVnICM1NjE4MDIuCi0KLTIwMDgtMTEtMjAgMjM6NTk6MDcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay4qOiBIYW5kbGUgdmlkZW8gd2luZG93IHJlc2l6aW5nIG1vcmUgY29ycmVjdGx5LCBhdm9pZGluZyBjcmFzaGVzIHdoZW4gZW1iZWRkaW5nIHRoZSB3aW5kb3cgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBIYW5kbGUgdmlkZW8gd2luZG93IHJlc2l6aW5nIG1vcmUgY29ycmVjdGx5LCBhdm9pZGluZyBjcmFzaGVzIHdoZW4KLQkgIGVtYmVkZGluZyB0aGUgd2luZG93IGFuZCByZXNpemluZyBpdC4KLQotMjAwOC0xMS0yMCAyMjo1Njo1OCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvdWRwLzogRml4IG11bHRpdWRwc2luayBvbiBPU1ggYnkgcGFzc2luZyB0aGUgc3BlY2lmaWMgbGVuZ3RoIG9mIHRoZSBzb2NrZXQsIHJlZmFjdG9yIHRoYXQgaW50byBhIGZ1bmN0aW9uIHNoYXJlZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuaDoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIEZpeCBtdWx0aXVkcHNpbmsgb24gT1NYIGJ5IHBhc3NpbmcgdGhlIHNwZWNpZmljIGxlbmd0aCBvZiB0aGUgc29ja2V0LAotCSAgcmVmYWN0b3IgdGhhdCBpbnRvIGEgZnVuY3Rpb24gc2hhcmVkIHdpdGggdGhlIHNhbWUgdGhpbmcgaW4gdWRwc3JjLgotCi0yMDA4LTExLTIwIDIwOjA3OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogRml4IHRoZSBzY2FsaW5nIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6ICh1aW50NjRfY2VpbGluZ19zY2FsZV9pbnQpLAotCSAgKHVpbnQ2NF9jZWlsaW5nX3NjYWxlKSwgKGdzdF93YXZwYXJzZV9jYWxjdWxhdGVfZHVyYXRpb24pLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyk6Ci0JICBGaXggdGhlIHNjYWxpbmcgY29kZS4KLQkgIEZpeCBwYXJzaW5nIG9mIHRoZSBJTkZPIGNodW5rcywgd2Ugd2VyZSByZWFkaW5nIHRoZSB3cm9uZyBudW1iZXIgb2YKLQkgIGJ5dGVzLiAgRml4ZXMgIzU2MTU4MC4KLQotMjAwOC0xMS0yMCAxNDozMDo0MCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvZiBhbiB1bnNldCBjb2RlY19pZCBpbiB0aGUgcmVjZW50bHkgYWRkZWQgRGlyYWMgcGF0aHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9mIGFuIHVuc2V0IGNvZGVjX2lkIGluIHRoZSByZWNlbnRseQotCSAgYWRkZWQgRGlyYWMgcGF0aHMKLQotMjAwOC0xMS0yMCAxMzo1ODo0MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBKdXN0IGtlZXAgZGlzYWJsaW5nIGVsZW1lbnRzIHRoYXQgaGFuZyB0aGUgc3RhdGVzIHRlc3QgdW50aWwgaXQgd29ya3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBKdXN0IGtlZXAgZGlzYWJsaW5nIGVsZW1lbnRzIHRoYXQgaGFuZyB0aGUgc3RhdGVzIHRlc3QgdW50aWwgaXQKLQkgIHdvcmtzLgotCi0yMDA4LTExLTIwIDEzOjQ2OjQ3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogRG9uJ3QgZmx1c2ggZG93bnN0cmVhbSBhZnRlciBldmVyeSBidWZmZXIgLSB0aGF0J3Mgbm90IHdoYXQgdGhpcyBsaWJwbmcgY2FsbGJhY2sgaXMgZm9yIGF0IGFsbCEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgRG9uJ3QgZmx1c2ggZG93bnN0cmVhbSBhZnRlciBldmVyeSBidWZmZXIgLSB0aGF0J3Mgbm90IHdoYXQKLQkgIHRoaXMgbGlicG5nIGNhbGxiYWNrIGlzIGZvciBhdCBhbGwhCi0KLTIwMDgtMTEtMTcgMTQ6MDQ6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogVHVybnMgb3V0IHdlIGRvbid0IGFsd2F5cyBnZXQgdGhlIGZyYW1lIHNpemVzIGluIGEgcHJlZGVmaW5lZCBvcmRlciBmcm9tIGxvd2VzdCB0byBoaWdoZXN0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXRfYW5kX3NpemUpLCAoc29ydF9ieV9mcmFtZV9zaXplKSwKLQkgIChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpOgotCSAgVHVybnMgb3V0IHdlIGRvbid0IGFsd2F5cyBnZXQgdGhlIGZyYW1lIHNpemVzIGluIGEgcHJlZGVmaW5lZAotCSAgb3JkZXIgZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCByZXNvbHV0aW9uLCBzbyBsZXQncyBqdXN0IHNvcnQgdGhlCi0JICBsaXN0IGJ5IGZyYW1lIHNpemUgb25jZSB3ZSd2ZSBxdWVyaWVkIHRoZSBwb3NzaWJsZSByZXNvbHV0aW9ucwotCSAgcmF0aGVyIHRoYW4gYXNzdW1lIGFueSBwYXJ0aWN1bGFyIG9yZGVyLiBGaXhlcyBwcm9iZWQgY2FwcyBmb3IKLQkgIHRoZSBjYW1lcmEgaW4gbXkgSFAyMTMzIG1pbmkgbm90ZWJvb2sgYW5kIG1ha2VzIHY0bDJzcmMgZGVmYXVsdAotCSAgdG8gYSBkZWNlbnQgc2l6ZS4KLQotMjAwOC0xMS0xNiAxNDo0MTozMiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L21hdHJvc2thLzogTWFrZSBta3ZkZW11eCBhd2FyZSBvZiBFLUFDMy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hdWRpb19jYXBzKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgTWFrZSBta3ZkZW11eCBhd2FyZSBvZiBFLUFDMy4KLQotMjAwOC0xMS0xNCAxODo0MToyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZCBhIGpwZWcgZGVwYXlsb2FkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYzogKGdzdF9ydHBfanBlZ19kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfanBlZ19kZXBheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfanBlZ19kZXBheV9pbml0KSwKLQkgIChnc3RfcnRwX2pwZWdfZGVwYXlfZmluYWxpemUpLCAoTWFrZVRhYmxlcyksIChNYWtlUXVhbnRIZWFkZXIpLAotCSAgKE1ha2VIdWZmbWFuSGVhZGVyKSwgKE1ha2VEUklIZWFkZXIpLCAoTWFrZUhlYWRlcnMpLAotCSAgKGdzdF9ydHBfanBlZ19kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfanBlZ19kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX2pwZWdfZGVwYXlfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX2pwZWdfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5oOgotCSAgQWRkIGEganBlZyBkZXBheWxvYWRlci4KLQkgICogZ3N0L3J0cC9nc3RydHBqcGVncGF5LmM6Ci0JICBTZXQgdGhlIGRlZmF1bHQgcHJvcGVydGllcyBvbiB0aGUgcGF5bG9hZGVyIHRvIGJldHRlciBkZWZhdWx0cy4KLQotMjAwOC0xMS0xNCAxNTo0MjozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBzeXMvdjRsMi9nc3R2NGwyLmM6IEdpdmUgaXQgYSBwcmltYXJ5IHJhbmsgZm9yIGF1dG92aWRlb3NyYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JICBHaXZlIGl0IGEgcHJpbWFyeSByYW5rIGZvciBhdXRvdmlkZW9zcmMuCi0KLTIwMDgtMTEtMTQgMTE6NDE6NTUgKzAwMDAgIEJqb3JuIE9zdGJ5IDxiam9ybm9zQGF4aXMuY29tPgotCi0JICBnc3QvcnRwLzogQWRkIEpQRUcgcGF5bG9hZGVyLiBGaXhlcyAjNTYwNzU2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQmpvcm4gT3N0YnkgPGJqb3Jub3MgYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYzogKGdzdF9ydHBfanBlZ19wYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX2pwZWdfcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9qcGVnX3BheV9pbml0KSwKLQkgIChnc3RfcnRwX2pwZWdfcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9qcGVnX3BheV9oZWFkZXJfc2l6ZSksCi0JICAoZ3N0X3J0cF9qcGVnX3BheV9yZWFkX3F1YW50X3RhYmxlKSwKLQkgIChnc3RfcnRwX2pwZWdfcGF5X3NjYW5fbWFya2VyKSwgKGdzdF9ydHBfanBlZ19wYXlfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cF9qcGVnX3BheV9zZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9qcGVnX3BheV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfanBlZ19wYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGpwZWdwYXkuaDoKLQkgIEFkZCBKUEVHIHBheWxvYWRlci4gRml4ZXMgIzU2MDc1Ni4KLQotMjAwOC0xMS0xMyAxNzo0NTo1OSArMDAwMCAgRmFicmljaW8gR29kb3kgPHNrYXJsbG90QGdtYWlsLmNvbT4KLQotCSAgc3lzLzogRml4IHNvbWUgc3BlbGxpbmcgbWlzdGFrZXMuIEZpeGVzICM1NTY4MDIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGYWJyaWNpbyBHb2RveSA8c2thcmxsb3QgYXQgZ21haWwgZG90IGNvbT4KLQkgICogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3NzX3Npbmtfb3Blbik6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3NzX3NyY19vcGVuKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfZ2V0X21tYXApOgotCSAgKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IChnc3RfdjRsMl9maWxsX2xpc3RzKToKLQkgIEZpeCBzb21lIHNwZWxsaW5nIG1pc3Rha2VzLiBGaXhlcyAjNTU2ODAyLgotCi0yMDA4LTExLTEzIDE2OjI0OjU5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvOiBBZGQgcHJlc2V0cyBmb3IgZXF1YWxpemVyLiBGaXhlcyAjNTIyMTgzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvR3N0SWlyRXF1YWxpemVyM0JhbmRzLnByczoKLQkgICogZ3N0L2VxdWFsaXplci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JICBBZGQgcHJlc2V0cyBmb3IgZXF1YWxpemVyLiBGaXhlcyAjNTIyMTgzLgotCi0yMDA4LTExLTEzIDE2OjE3OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC86IFJlbW92ZSBnb29nbGUgZXh0ZW5zaW9uIGFnYWluLCBpdCdzIG5vdCBuZWVkZWQgYW55bW9yZSBiZWNhdXNlIHdlIG5ldmVyIHNlbmQgbXVsdGlwbGUgdHJhbnNwb3J0cyBhbnltb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3Bnb29nbGUuYzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcGdvb2dsZS5oOgotCSAgUmVtb3ZlIGdvb2dsZSBleHRlbnNpb24gYWdhaW4sIGl0J3Mgbm90IG5lZWRlZCBhbnltb3JlIGJlY2F1c2Ugd2UgbmV2ZXIKLQkgIHNlbmQgbXVsdGlwbGUgdHJhbnNwb3J0cyBhbnltb3JlLgotCi0yMDA4LTExLTEzIDE2OjExOjE2ICswMDAwICBFcmljIFpoYW5nIDxjaGFvLnpoYW5nQGFjY2Vzcy1jb21wYW55LmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBBZGQgcHJvcGVydHkgdG8gY29uZmlndXJlIE5BVCB0cmF2ZXJzYWwgbWV0aG9kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogRXJpYyBaaGFuZyA8Y2hhby56aGFuZyBhdCBhY2Nlc3MtY29tcGFueSBkb3QgY29tPgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcF9uYXRfbWV0aG9kX2dldF90eXBlKSwKLQkgIChnc3RfcnRzcHNyY19jbGFzc19pbml0KSwgKGdzdF9ydHNwc3JjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0c3BzcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9ydHNwc3JjX2NyZWF0ZV9zdHJlYW0pLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9mcmVlKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcF9zaW5rcyksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLAotCSAgKGdzdF9ydHNwc3JjX3NlbmRfZHVtbXlfcGFja2V0cyksCi0JICAoZ3N0X3J0c3BzcmNfY3JlYXRlX3RyYW5zcG9ydHNfc3RyaW5nKSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSksIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBBZGQgcHJvcGVydHkgdG8gY29uZmlndXJlIE5BVCB0cmF2ZXJzYWwgbWV0aG9kLgotCSAgSWdub3JlIEVPUyBmcm9tIHRoZSBpbnRlcm5hbCBzaW5rcy4KLQkgIEltcGxlbWVudCBzZW5kaW5nIGR1bW15IHBhY2tldHMgYXMgYSAoc2ltcGxlKSBtZXRob2QgdG8gb3BlbiB1cAotCSAgc29tZSBmaXJld2FsbHMuCi0JICBTZW5kIFBMQVkgcmVxdWVzdCB0byB0aGUgc2VydmVyIGFmdGVyIHdlIHN0YXJ0ZWQgdGhlIHVkcCBzb3VyY2VzLgotCSAgRml4ZXMgIzU1OTU0NS4KLQotMjAwOC0xMS0xMyAxNDowNDo0MCArMDAwMCAgWW90YW0gPHNoLnlvdGFtQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IEZsdXNoIHRoZSByZW1haW5pbmcgZnJhbWVzIG9uIEVPUy4gRml4ZXMgIzU2MDY0MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFlvdGFtIDxzaCBkb3QgeW90YW0gYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IChnc3RfcnRwX21wNHZfcGF5X2V2ZW50KToKLQkgIEZsdXNoIHRoZSByZW1haW5pbmcgZnJhbWVzIG9uIEVPUy4gRml4ZXMgIzU2MDY0MS4KLQotMjAwOC0xMS0xMiAxNjozNzowNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOiBGaXggY29tcGlsZXIgd2FybmluZyBhYm91dCBwcmludGYgZm9ybWF0dGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzogKGdzdF9ydHBfZzcyOV9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBGaXggY29tcGlsZXIgd2FybmluZyBhYm91dCBwcmludGYgZm9ybWF0dGluZy4KLQotMjAwOC0xMS0xMiAxMTo1NToxNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4Lio6IFF1ZXVlIHVwIG5ldyBzZWdtZW50IGV2ZW50cyBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhlbSBmcm9tIHRoZSBzZWVraW5nIHRocmVhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmggKHN0cnVjdCBfR3N0UVREZW11eCk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYyAoZ3N0X3F0ZGVtdXhfZG9fc2Vlayk6IFF1ZXVlIHVwIG5ldwotCSAgc2VnbWVudCBldmVudHMgaW5zdGVhZCBvZiBzZW5kaW5nIHRoZW0gZnJvbSB0aGUgc2Vla2luZyB0aHJlYWQuCi0JICBGaXhlcyAjNTU5Mjg4LgotCSAgKGdzdF9xdGRlbXV4X3B1c2hfcGVuZGluZ19uZXdzZWdtZW50KTogTmV3IGhlbHBlciwgc2VuZHMgb3V0Ci0JICBxdWV1ZWQgbmV3c2VnbWVudCBldmVudHMuCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSk6IFZvaWzDoCwgY2FsbCBpdCBoZXJlLiBPbmx5IG5lZWQgdG8KLQkgIGNhbGwgaXQgaGVyZSwgYXMgd2Ugb25seSBzZWVrIHdoZW4gbG9vcGluZywgYW5kIG9ubHkgcHVzaCBpbiB0aGUKLQkgIG1vdmllIHN0YXRlLgotCi0yMDA4LTExLTExIDE5OjUyOjA1ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L3F0ZGVtdXgvOiBBZGQgY292ZXIgYW5kIGFsdGVybmF0aXZlIGNvcHlyaWdodCB0YWcsIGFuZCBlbmhhbmNlIHNvbWUgZXhpc3Rpbmcgb25lcyBieSBtYXJraW5nIHRoZW0gYXMgY29udGFpbmVyIGF0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF90YWdfYWRkX3RtcG8pLAotCSAgKHF0ZGVtdXhfdGFnX2FkZF9jb3ZyKSwgKHF0ZGVtdXhfcGFyc2VfdWR0YSk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIEFkZCBjb3ZlciBhbmQgYWx0ZXJuYXRpdmUgY29weXJpZ2h0IHRhZywgYW5kIGVuaGFuY2Ugc29tZSBleGlzdGluZwotCSAgb25lcyBieSBtYXJraW5nIHRoZW0gYXMgY29udGFpbmVyIGF0b21zLgotCi0yMDA4LTExLTExIDE3OjMzOjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzogRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0Y2Fwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzogKGdzdF9ydHBfZzcyOV9wYXlfc2V0X2NhcHMpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0Y2Fwcy4KLQotMjAwOC0xMS0xMSAxNzoyOTowMyArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cC9nc3RydHBnNzI5cGF5Lio6IFJlcGxhY2UgRzcyOSBwYXlsb2FkZXIgd2l0aCBhbiBpbXByb3ZlZCB2ZXJzaW9uLiBGaXhlcyAjNTMyNDA5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZzcyOXBheS5jOiAoZ3N0X3J0cF9nNzI5X3BheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfZzcyOV9wYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX2c3MjlfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfZzcyOV9wYXlfc2V0X2NhcHMpLCAoZ3N0X3J0cF9nNzI5X3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBnNzI5cGF5Lmg6Ci0JICBSZXBsYWNlIEc3MjkgcGF5bG9hZGVyIHdpdGggYW4gaW1wcm92ZWQgdmVyc2lvbi4gRml4ZXMgIzUzMjQwOS4KLQotMjAwOC0xMS0xMSAxNjowMDo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBPbmx5IHNlbmQgb25lIHRyYW5zcG9ydCBhdCBhIHRpbWUgZm9yIGltcHJvdmVkIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGJyb2tlbiBzZXJ2ZXJzLiBTZWUgIzUzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfY3JlYXRlX3RyYW5zcG9ydHNfc3RyaW5nKSwKLQkgIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgT25seSBzZW5kIG9uZSB0cmFuc3BvcnQgYXQgYSB0aW1lIGZvciBpbXByb3ZlZCBjb21wYXRpYmlsaXR5IHdpdGggc29tZQotCSAgYnJva2VuIHNlcnZlcnMuIFNlZSAjNTM3ODMyLgotCi0yMDA4LTExLTExIDE1OjE2OjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IE9ubHkgcGF1c2UvcGxheSBpbiB0aGUgc2VlayBoYW5kbGVyIHdoZW4gdGhlIHNvdXJjZSB3YXMgcGxheWluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19kb19zZWVrKSwKLQkgIChnc3RfcnRzcHNyY19wZXJmb3JtX3NlZWspOgotCSAgT25seSBwYXVzZS9wbGF5IGluIHRoZSBzZWVrIGhhbmRsZXIgd2hlbiB0aGUgc291cmNlIHdhcyBwbGF5aW5nLgotCSAgRml4ZXMgIzUyOTM3OS4KLQotMjAwOC0xMS0xMSAxMjoxODoyMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEZpeCBtdXhpbmcgb2YgRGlyYWMgc3RyZWFtcyBpZiB0aGUgaW5wdXQgYWxyZWFkeSBoYXMgdGhlIGZvcm1hdCB3ZSBuZWVkLCBpLmUuIGlzIHRoZSBvdXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF9oYW5kbGVfZGlyYWNfcGFja2V0KToKLQkgIEZpeCBtdXhpbmcgb2YgRGlyYWMgc3RyZWFtcyBpZiB0aGUgaW5wdXQgYWxyZWFkeSBoYXMgdGhlIGZvcm1hdAotCSAgd2UgbmVlZCwgaS5lLiBpcyB0aGUgb3V0cHV0IG9mIG1hdHJvc2thZGVtdXguCi0KLTIwMDgtMTEtMTEgMTA6MDY6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguYzogRG9uJ3Qgc2VnZmF1bHQgb24gc3RyaW5nIHR5cGVkIHRhZ3MgYmVpbmcgTlVMTC4gRml4ZXMgIzU2MDE1NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgRG9uJ3Qgc2VnZmF1bHQgb24gc3RyaW5nIHR5cGVkIHRhZ3MgYmVpbmcgTlVMTC4gRml4ZXMgIzU2MDE1NS4KLQotMjAwOC0xMS0xMCAxNjo0NDo0NSArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogRml4IG1hcHBpbmcgQUFDIHByb2ZpbGUgdG8gTWF0cm9za2EgY29kZWMgaWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoYWFjX2NvZGVjX2RhdGFfdG9fY29kZWNfaWQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHMpOgotCSAgRml4IG1hcHBpbmcgQUFDIHByb2ZpbGUgdG8gTWF0cm9za2EgY29kZWMgaWQuCi0KLTIwMDgtMTEtMTAgMTY6MzY6MDkgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IFJlZmFjdG9yIHNvbWUgcmF3IGF1ZGlvIGNhcHMgYnVpbGRpbmcsIGFuZCBoYW5kbGUgPjE2LWJpdCBjYXNlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspLAotCSAgKHF0ZGVtdXhfdmlkZW9fY2FwcyksIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgUmVmYWN0b3Igc29tZSByYXcgYXVkaW8gY2FwcyBidWlsZGluZywgYW5kIGhhbmRsZSA+MTYtYml0IGNhc2VzLgotCSAgRml4L3JlcGxhY2UgYnVpbGRpbmcgY2FwcyBmcm9tIGEgc3RyaW5nIGRlc2NyaXB0aW9uLgotCi0yMDA4LTExLTEwIDEzOjU5OjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0LzogTWFrZSBhdXRob3IgbmFtZSBjb25zaXN0ZW50IHdpdGggb3RoZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5jOgotCSAgKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOgotCSAgTWFrZSBhdXRob3IgbmFtZSBjb25zaXN0ZW50IHdpdGggb3RoZXJzLgotCi0yMDA4LTExLTEwIDEyOjEzOjIxICswMDAwICBFcmljIFpoYW5nIDxjaGFvLnpoYW5nQGFjY2Vzcy1jb21wYW55LmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBQYXVzZSB0aGUgUlRTUCBzdHJlYW0gYmVmb3JlIGRvaW5nIGEgbmV3IHBsYXkgcmVxdWVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEVyaWMgWmhhbmcgPGNoYW8uemhhbmcgYXQgYWNjZXNzLWNvbXBhbnkgZG90IGNvbT4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcF9zaW5rKToKLQkgIFBhdXNlIHRoZSBSVFNQIHN0cmVhbSBiZWZvcmUgZG9pbmcgYSBuZXcgcGxheSByZXF1ZXN0LgotCSAgTWFrZSBzdXJlIHRoYXQgYWRkaW5nIHRoZSB1ZHBzaW5rcyBkb2VzIG5vdCBjYXVzZSB0aGUgcnRzcHNyYyB0byBiZWNvbWUKLQkgIGEgc2luay4gRml4ZXMgIzU1OTU0Ny4KLQotMjAwOC0xMS0wNSAxNDo0MjozNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvOiBJbXBsZW1lbnQgRGlyYWMgbXV4aW5nIGludG8gTWF0cm9za2EgY29tZm9ybWluZyB0byB0aGUgc3BlYywgaS5lLiBwdXQgYWxsIERpcmFjIHBhY2thZ2VzIHVwIHRvIGEgcGljdHUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9wYWRfZnJlZSksCi0JICAoZ3N0X21hdHJvc2thX211eF9oYW5kbGVfZGlyYWNfcGFja2V0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgSW1wbGVtZW50IERpcmFjIG11eGluZyBpbnRvIE1hdHJvc2thIGNvbWZvcm1pbmcgdG8gdGhlIHNwZWMsIGkuZS4KLQkgIHB1dCBhbGwgRGlyYWMgcGFja2FnZXMgdXAgdG8gYSBwaWN0dXJlIGludG8gYSBNYXRyb3NrYSBibG9jay4KLQkgIFRPRE86IEltcGxlbWVudCB3cml0aW5nIG9mIHRoZSBSZWZlcmVuY2VCbG9jayBNYXRyb3NrYSBlbGVtZW50cywKLQkgIGN1cnJlbnRseSB0aGUgRGlyYWMgbXV4aW5nIGlzIG9ubHkgMTAwJSBjb3JyZWN0IGlmIE1hdHJvc2thIHZlcnNpb24gMgotCSAgaXMgc2VsZWN0ZWQgZm9yIG11eGluZy4KLQotMjAwOC0xMS0wNCAxMjozMjo0OCArMDAwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JICBPcHRpb25hbGx5IHVzZSBsaWJ2NGwgdG8gYWNjZXNzIHY0bDIgZGV2aWNlcy4gRml4ZXMgYnVnICM1NDUwMzMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzIGF0IGhhZGVzcyBkb3QgbmV0PiwKLQkgIEhhbnMgZGUgR29lZGUgPGp3cmRlZ29lZGUgYXQgZmVkb3JhcHJvamVjdCBkb3Qgb3JnPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19nZXRfcmVhZCk6Ci0JICAqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX2dldF9jYXBhYmlsaXRpZXMpLAotCSAgKGdzdF92NGwyX2ZpbGxfbGlzdHMpLCAoZ3N0X3Y0bDJfb3BlbiksIChnc3RfdjRsMl9jbG9zZSksCi0JICAoZ3N0X3Y0bDJfZ2V0X25vcm0pLCAoZ3N0X3Y0bDJfc2V0X25vcm0pLCAoZ3N0X3Y0bDJfZ2V0X2ZyZXF1ZW5jeSksCi0JICAoZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSksIChnc3RfdjRsMl9zaWduYWxfc3RyZW5ndGgpLAotCSAgKGdzdF92NGwyX2dldF9hdHRyaWJ1dGUpLCAoZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSksCi0JICAoZ3N0X3Y0bDJfZ2V0X2lucHV0KSwgKGdzdF92NGwyX3NldF9pbnB1dCk6Ci0JICAqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJfYnVmZmVyX2ZpbmFsaXplKSwKLQkgIChnc3RfdjRsMl9idWZmZXJfbmV3KSwgKGdzdF92NGwyX2J1ZmZlcl9wb29sX2ZpbmFsaXplKSwKLQkgIChnc3RfdjRsMl9idWZmZXJfcG9vbF9uZXcpLCAoZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfYWN0aXZhdGUpLAotCSAgKGdzdF92NGwyc3JjX2ZpbGxfZm9ybWF0X2xpc3QpLAotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSksCi0JICAoZ3N0X3Y0bDJzcmNfcHJvYmVfY2Fwc19mb3JfZm9ybWF0KSwgKGdzdF92NGwyc3JjX2dyYWJfZnJhbWUpLAotCSAgKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKSwgKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCksCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdGFydCksIChnc3RfdjRsMnNyY19jYXB0dXJlX3N0b3ApLAotCSAgKGdzdF92NGwyc3JjX2dldF9uZWFyZXN0X3NpemUpOgotCSAgT3B0aW9uYWxseSB1c2UgbGlidjRsIHRvIGFjY2VzcyB2NGwyIGRldmljZXMuIEZpeGVzIGJ1ZyAjNTQ1MDMzLgotCi0yMDA4LTExLTA0IDEyOjI4OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIERvbid0IGluc3RhbGwgc3RhdGljIGxpYnMgZm9yIHBsdWdpbnMuIEZpeGVzICM1NTA4NTEgZm9yIC1nb29kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hYWxpYi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2Fubm9kZXgvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9jYWlyby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2R2L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZXNkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmxhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2djb25mL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2hhbC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2pwZWcvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9sYWRzcGEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9saWJjYWNhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGlibW5nL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGlicG5nL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbWlrbW9kL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcHVsc2UvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9yYXcxMzk0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc2hvdXQyL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NwZWV4L01ha2VmaWxlLmFtOgotCSAgKiBleHQvdGFnbGliL01ha2VmaWxlLmFtOgotCSAgKiBleHQvd2F2cGFjay9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXBldGFnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY3V0dGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVidWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZXF1YWxpemVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmx4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dvb20yazEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9pY3lkZW11eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2xhdy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2xldmVsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tZWRpYW4vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tb25vc2NvcGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tdWx0aWZpbGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tdWx0aXBhcnQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9vbGRjb3JlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcXRkZW11eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9jcm9wL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvd2F2ZW5jL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kaXJlY3RkcmF3L01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZGlyZWN0c291bmQvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3MvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbToKLQkgICogc3lzL29zeHZpZGVvL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvc3VuYXVkaW8vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvd2F2ZWZvcm0vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy94aW1hZ2UvTWFrZWZpbGUuYW06Ci0JICBEb24ndCBpbnN0YWxsIHN0YXRpYyBsaWJzIGZvciBwbHVnaW5zLiBGaXhlcyAjNTUwODUxIGZvciAtZ29vZC4KLQotMjAwOC0xMC0zMSAxODoxNzo1MCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9NYWtlZmlsZS5hbTogSW5jbHVkZSAkKEZMQUNfQ0ZMQUdTKSBpbiBDRkxBR1MgdG8gbWFrZSBzdXJlIHRvIGZpbmQgdGhlIEZMQUMgaGVhZGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9NYWtlZmlsZS5hbToKLQkgIEluY2x1ZGUgJChGTEFDX0NGTEFHUykgaW4gQ0ZMQUdTIHRvIG1ha2Ugc3VyZSB0byBmaW5kIHRoZSBGTEFDIGhlYWRlcnMuCi0JICBUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIGlmIEZMQUMgaXMgaW5zdGFsbGVkIGluIGFuIHVuY29tbW9uIGxvY2F0aW9uCi0JICB0aGF0IGlzIG5vdCBhbHJlYWR5IGhhbmRsZWQgYnkgb3RoZXIgQ0ZMQUdTLiBGaXhlcyBidWcgIzU1ODcxMS4KLQotMjAwOC0xMC0zMSAxMDowODo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBHdWFyZCBtb3JlIHVuY29tbW9uIGZvcm1hdHMgd2l0aCBpZmRlZnMgc28gdGhhdCB3ZSBjYW4gY29tcGlsZSBvbiBvbGRlciB2ZXJzaW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19mb3JtYXRfZ2V0X3JhbmspOgotCSAgR3VhcmQgbW9yZSB1bmNvbW1vbiBmb3JtYXRzIHdpdGggaWZkZWZzIHNvIHRoYXQgd2UgY2FuIGNvbXBpbGUgb24gb2xkZXIKLQkgIHZlcnNpb25zLgotCi0yMDA4LTEwLTMxIDEwOjAwOjE4ICswMDAwICBOaWNrIEhhZGRhZCA8bmlja0BoYWRkYWRzLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBJbnZlcnQgb3RoZXIgdW5jb21wcmVzc2VkIFJHQiBmb3JtYXRzLiBGaXhlcyAjNTU4NTU0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTmljayBIYWRkYWQgPG5pY2sgYXQgaGFkZGFkcyBkb3QgbmV0PgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2lzX3VuY29tcHJlc3NlZCksCi0JICAoZ3N0X2F2aV9kZW11eF9pbnZlcnQpLCAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgSW52ZXJ0IG90aGVyIHVuY29tcHJlc3NlZCBSR0IgZm9ybWF0cy4gRml4ZXMgIzU1ODU1NC4KLQotMjAwOC0xMC0zMCAxNTowODo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy4qOiBBZGQgc3VwcG9ydCBmb3IgZmxvYXQvZG91YmxlIGFzIGlucHV0IGFuZCByZW1vdmUgdGhlIChub3dhZGF5cykgdXNlbGVzcyBwYXJzaW5nIG9mIHRoZSBkZXB0aCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiAoZ3N0X3dhdmVuY19jcmVhdGVfaGVhZGVyX2J1ZiksCi0JICAoZ3N0X3dhdmVuY19zaW5rX3NldGNhcHMpLCAoZ3N0X3dhdmVuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oOgotCSAgQWRkIHN1cHBvcnQgZm9yIGZsb2F0L2RvdWJsZSBhcyBpbnB1dCBhbmQgcmVtb3ZlIHRoZSAobm93YWRheXMpCi0JICB1c2VsZXNzIHBhcnNpbmcgb2YgdGhlIGRlcHRoIGFzIHdlIHJlcXVpcmUgd2lkdGg9PWRlcHRoLgotCi0yMDA4LTEwLTMwIDEwOjMxOjM1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogTmFycm93IGRvd24gdGhlIGNhcHMgb2YgdGhlIG1wZWcgYXVkaW8gcGF5L2RlcGF5bG9hZGVycyB0byBvbmx5IGFjY2VwdCBtcGVnIHZlcnNpb24gMS4gRml4ZXMgIzU1ODQyNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6IChnc3RfcnRwX21wYV9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgIE5hcnJvdyBkb3duIHRoZSBjYXBzIG9mIHRoZSBtcGVnIGF1ZGlvIHBheS9kZXBheWxvYWRlcnMgdG8gb25seSBhY2NlcHQKLQkgIG1wZWcgdmVyc2lvbiAxLiBGaXhlcyAjNTU4NDI3LgotCi0yMDA4LTEwLTI5IDE4OjI4OjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOiBPbmx5IHB1dCBhbiBpbnRlZ3JhbCBhbW91bnQgb2Ygc2FtcGxlcyBpbiB0aGUgUlRQIHBhY2tldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOiAoZ3N0X3J0cF9MMTZfcGF5X2ZsdXNoKSwKLQkgIChnc3RfcnRwX0wxNl9wYXlfZ2V0Y2Fwcyk6Ci0JICBPbmx5IHB1dCBhbiBpbnRlZ3JhbCBhbW91bnQgb2Ygc2FtcGxlcyBpbiB0aGUgUlRQIHBhY2tldC4KLQkgIEZpeGVzICM1NTY2NDEuCi0KLTIwMDgtMTAtMjggMTc6NDI6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwY2hhbm5lbHMuKjogQWRkIG1ldGhvZCB0byBnZXQgcG9zc2libGUgY2hhbm5lbCBwb3NpdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBjaGFubmVscy5jOiAoZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfaW5kZXgpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGNoYW5uZWxzLmg6Ci0JICBBZGQgbWV0aG9kIHRvIGdldCBwb3NzaWJsZSBjaGFubmVsIHBvc2l0aW9ucy4KLQotMjAwOC0xMC0yOCAxNzozOTo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9NYWtlZmlsZS5hbTogQWxzbyBjb21taXQgdXBkYXRlZCBtYWtlZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICBBbHNvIGNvbW1pdCB1cGRhdGVkIG1ha2VmaWxlCi0KLTIwMDgtMTAtMjggMTQ6NTY6MDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogRG9uJ3QgYWxsb3cgd2lkdGg9MzIsZGVwdGg9MjQgYXMgaW5wdXQuIFdBViByZXF1aXJlcyB0aGF0IHRoZSB3aWR0aCBpcyB0aGUgbmV4dCBpbnRlZ2VyIG11bHRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2hhaW4pOgotCSAgRG9uJ3QgYWxsb3cgd2lkdGg9MzIsZGVwdGg9MjQgYXMgaW5wdXQuIFdBViByZXF1aXJlcyB0aGF0IHRoZSB3aWR0aAotCSAgaXMgdGhlIG5leHQgaW50ZWdlciBtdWx0aXBseSBvZiA4IGZyb20gdGhlIGRlcHRoLgotCi0yMDA4LTEwLTI4IDEwOjAxOjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQWRkIG1hcHBpbmdzIGZvciBtdWx0aWNoYW5uZWwgc3VwcG9ydC4gRG9lcyBub3QgY29tcGxldGVseSBqdXN0IHdvcmsgYmVjYXVzZSB0aGUgZ2V0Y2FwcyBmdW5jdGlvbiBkb2VzIG5vdCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6IChnc3RfcnRwX0wxNl9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzogKGdzdF9ydHBfTDE2X3BheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX0wxNl9wYXlfZ2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwY2hhbm5lbHMuYzogKGNoZWNrX2NoYW5uZWxzKSwKLQkgIChnc3RfcnRwX2NoYW5uZWxzX2dldF9ieV9wb3MpLCAoZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfb3JkZXIpLAotCSAgKGdzdF9ydHBfY2hhbm5lbHNfY3JlYXRlX2RlZmF1bHQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGNoYW5uZWxzLmg6Ci0JICBBZGQgbWFwcGluZ3MgZm9yIG11bHRpY2hhbm5lbCBzdXBwb3J0LiBEb2VzIG5vdCBjb21wbGV0ZWx5IGp1c3Qgd29yawotCSAgYmVjYXVzZSB0aGUgZ2V0Y2FwcyBmdW5jdGlvbiBkb2VzIG5vdCB5ZXQgcmV0dXJuIHRoZSBhbGxvd2VkIGNoYW5uZWwKLQkgIG1hcHBpbmdzLiBTZWUgIzU1NjY0MS4KLQotMjAwOC0xMC0yOCAwNjo1MDo1NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ29vbS86IEFkZCBsaWNlbnNlIGhlYWRlcnMgaW4gYWxsIHNvdXJjZSBmaWxlcy4gUmVtb3ZlIGZpbHRlci5jIGZyb20KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dvb20vUkVBRE1FOgotCSAgKiBnc3QvZ29vbS9jb25maWdfcGFyYW0uYzoKLQkgICogZ3N0L2dvb20vY29udm9sdmVfZnguYzoKLQkgICogZ3N0L2dvb20vZHJhd21ldGhvZHMuYzoKLQkgICogZ3N0L2dvb20vZHJhd21ldGhvZHMuaDoKLQkgICogZ3N0L2dvb20vZmlsdGVycy5jOgotCSAgKiBnc3QvZ29vbS9maWx0ZXJzX21teC5zOgotCSAgKiBnc3QvZ29vbS9mbHlpbmdfc3RhcnNfZnguYzoKLQkgICogZ3N0L2dvb20vZ29vbS5oOgotCSAgKiBnc3QvZ29vbS9nb29tX2NvbmZpZy5oOgotCSAgKiBnc3QvZ29vbS9nb29tX2NvbmZpZ19wYXJhbS5oOgotCSAgKiBnc3QvZ29vbS9nb29tX2NvcmUuYzoKLQkgICogZ3N0L2dvb20vZ29vbV9maWx0ZXJzLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fZnguaDoKLQkgICogZ3N0L2dvb20vZ29vbV9ncmFwaGljLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fcGx1Z2luX2luZm8uaDoKLQkgICogZ3N0L2dvb20vZ29vbV90b29scy5jOgotCSAgKiBnc3QvZ29vbS9nb29tX3Rvb2xzLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fdHlwZWRlZnMuaDoKLQkgICogZ3N0L2dvb20vZ29vbV92aXN1YWxfZnguaDoKLQkgICogZ3N0L2dvb20vZ3JhcGhpYy5jOgotCSAgKiBnc3QvZ29vbS9pZnMuYzoKLQkgICogZ3N0L2dvb20vaWZzLmg6Ci0JICAqIGdzdC9nb29tL2xpbmVzLmM6Ci0JICAqIGdzdC9nb29tL2xpbmVzLmg6Ci0JICAqIGdzdC9nb29tL21hdGh0b29scy5jOgotCSAgKiBnc3QvZ29vbS9tYXRodG9vbHMuaDoKLQkgICogZ3N0L2dvb20vbW14LmM6Ci0JICAqIGdzdC9nb29tL21vdGlmX2dvb20xLmg6Ci0JICAqIGdzdC9nb29tL21vdGlmX2dvb20yLmg6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6Ci0JICAqIGdzdC9nb29tL3BwY19kcmF3aW5ncy5oOgotCSAgKiBnc3QvZ29vbS9wcGNfem9vbV91bHRpbWF0ZS5oOgotCSAgKiBnc3QvZ29vbS9zb3VuZF90ZXN0ZXIuYzoKLQkgICogZ3N0L2dvb20vc291bmRfdGVzdGVyLmg6Ci0JICAqIGdzdC9nb29tL3N1cmYzZC5jOgotCSAgKiBnc3QvZ29vbS9zdXJmM2QuaDoKLQkgICogZ3N0L2dvb20vdGVudGFjbGUzZC5jOgotCSAgKiBnc3QvZ29vbS90ZW50YWNsZTNkLmg6Ci0JICAqIGdzdC9nb29tL3YzZC5jOgotCSAgKiBnc3QvZ29vbS92M2QuaDoKLQkgICogZ3N0L2dvb20veG1teC5jOgotCSAgQWRkIGxpY2Vuc2UgaGVhZGVycyBpbiBhbGwgc291cmNlIGZpbGVzLiBSZW1vdmUgZmlsdGVyLmMgZnJvbQotCSAgRVhUUkFfRElTVCwgYXMgaXRzIGluIFNPVVJDRVMgYWxyZWFkeS4gTWVudGlvbiB0aGUgZmlsZXMgaW4gdGhlIFJFRE1FCi0JICB3aGljaCBhcmUgbm90IHVzZWQgcmlnaHQgbm93LiBGaXhlcyAjNTU3NzA5LgotCi0yMDA4LTEwLTI3IDExOjI4OjMwICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOiBJbXBsZW1lbnQgZ2V0Y2FwcyBpbiBydHBMMTZwYXkuIEZpeGVzICM1NTY0ODQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzogKGdzdF9ydHBfTDE2X3BheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX0wxNl9wYXlfc2V0Y2FwcyksIChnc3RfcnRwX0wxNl9wYXlfZ2V0Y2Fwcyk6Ci0JICBJbXBsZW1lbnQgZ2V0Y2FwcyBpbiBydHBMMTZwYXkuIEZpeGVzICM1NTY0ODQuCi0KLTIwMDgtMTAtMjcgMTE6MDM6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzogQ2hlY2sgaWYgY2xvY2stcmF0ZSBhbmQgY2hhbm5lbHMgYXJlIHZhbGlkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzogKGdzdF9ydHBfTDE2X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfTDE2X2RlcGF5X3Byb2Nlc3MpOgotCSAgQ2hlY2sgaWYgY2xvY2stcmF0ZSBhbmQgY2hhbm5lbHMgYXJlIHZhbGlkLgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0Y2Fwcy4KLQkgIE5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGJ1ZmZlciwgdGhlIGJhc2UgY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgIFVzZSB0aGUgbWFya2VyIGJpdCB0byBzZXQgdGhlIERJU0NPTlQgZmxhZyBvbiBvdXRnb2luZyBidWZmZXJzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOiAoZ3N0X3J0cF9MMTZfcGF5X3NldGNhcHMpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0X291dGNhcHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYzogKGdzdF9ydHBfYWMzX2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfYWMzX2RlcGF5X3Byb2Nlc3MpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0X2NhcHMuCi0JICBObyBuZWVkIHRvIHZhbGlkYXRlIHRoZSBidWZmZXIsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogKGdzdF9ydHBfYW1yX2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfYW1yX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5Lmg6Ci0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRjYXBzLgotCSAgTm8gbmVlZCB0byB2YWxpZGF0ZSB0aGUgYnVmZmVyLCB0aGUgYmFzZSBjbGFzcyBkb2VzIHRoYXQgZm9yIHVzLgotCSAgTm8gbmVlZCB0byBzZXQgb3V0cHV0IGNhcHMgb24gdGhlIGJ1ZmZlcnMsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IKLQkgIHVzLgotCSAgVGhlIHN1YmNsYXNzIHdpbGwgbWFrZSBzdXJlIHdlIGFyZSBuZWdvdGlhdGVkLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuYzogKGdzdF9ydHBfZHZfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9kdl9kZXBheV9wcm9jZXNzKSwgKGdzdF9ydHBfZHZfZGVwYXlfcmVzZXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaDoKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBUaGUgc3ViY2xhc3Mgd2lsbCBtYWtlIHN1cmUgd2UgYXJlIG5lZ290aWF0ZWQuCi0JICAqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6IChnc3RfcnRwX2c3MjZfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9nNzI2X2RlcGF5X3Byb2Nlc3MpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbi4KLQkgIFVzZSB0aGUgbWFya2VyIGJpdCB0byBzZXQgdGhlIERJU0NPTlQgZmxhZyBvbiBvdXRnb2luZyBidWZmZXJzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOiAoZ3N0X3J0cF9nNzI5X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfZzcyOV9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfZzcyOV9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBnNzI5ZGVwYXkuaDoKLQkgIFRoZSBzdWJjbGFzcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhcmUgbmVnb3RpYXRlZC4KLQkgIFVzZSB0aGUgbWFya2VyIGJpdCB0byBzZXQgdGhlIERJU0NPTlQgZmxhZyBvbiBvdXRnb2luZyBidWZmZXJzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6IChnc3RfcnRwX2dzbV9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX2dzbV9kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBVc2UgdGhlIG1hcmtlciBiaXQgdG8gc2V0IHRoZSBESVNDT05UIGZsYWcgb24gb3V0Z29pbmcgYnVmZmVycy4KLQkgICogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzogKGdzdF9ydHBfZ3NtX3BheV9zZXRjYXBzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRfb3V0Y2Fwcy4KLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzogKGdzdF9ydHBfaDI2M19kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX2gyNjNfZGVwYXlfcHJvY2Vzcyk6Ci0JICBDbGVhbiB1cCBjYXBzIG5lZ290aWF0aW9uLgotCSAgTm8gbmVlZCB0byB2YWxpZGF0ZSB0aGUgYnVmZmVyLCB0aGUgYmFzZSBjbGFzcyBkb2VzIHRoYXQgZm9yIHVzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzogKGdzdF9ydHBfaDI2M19wYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9oMjYzX3BheV9mbHVzaCksIChnc3RfcnRwX2gyNjNfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuaDoKLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldF9vdXRjYXBzLgotCSAgRG8gc29tZSBtb3JlIHRpbWVzdGFtcHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOiAoZ3N0X3J0cF9oMjYzcF9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX2gyNjNwX2RlcGF5X3Byb2Nlc3MpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbi4KLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldGNhcHMuCi0JICBObyBuZWVkIHRvIHZhbGlkYXRlIHRoZSBidWZmZXIsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzogKGdzdF9ydHBfaDI2M3BfcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfaDI2M3BfcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9oMjYzcF9wYXlfZmx1c2gpLAotCSAgKGdzdF9ydHBfaDI2M3BfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5Lmg6Ci0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRfb3V0Y2Fwcy4KLQkgIERvIHNvbWUgbW9yZSB0aW1lc3RhbXBzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiAoZ3N0X3J0cF9oMjY0X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRjYXBzLgotCSAgRml4IHBvc3NpYmxlIGNhcHMgbGVhay4KLQkgIE5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGJ1ZmZlciwgdGhlIGJhc2UgY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6IChnc3RfcnRwX2gyNjRfcGF5X3NldGNhcHMpOgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOiAoZ3N0X3J0cF9pbGJjX2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfaWxiY19kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBVc2UgdGhlIG1hcmtlciBiaXQgdG8gc2V0IHRoZSBESVNDT05UIGZsYWcgb24gb3V0Z29pbmcgYnVmZmVycy4KLQkgICogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6IChnc3RfcnRwaWxiY3BheV9zaW5rX3NldGNhcHMpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbi4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYzogKGdzdF9ydHBfbXAxc19kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wMXNfZGVwYXlfcHJvY2Vzcyk6Ci0JICBDbGVhbiB1cCBjYXBzIG5lZ290aWF0aW9uLgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0Y2Fwcy4KLQkgIE5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGJ1ZmZlciwgdGhlIGJhc2UgY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgIE5vIG5lZWQgdG8gc2V0IGNhcHMgb24gYnVmZmVycywgc3ViY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzogKGdzdF9ydHBfbXAydF9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfcHJvY2Vzcyk6Ci0JICBDbGVhbiB1cCBjYXBzIG5lZ290aWF0aW9uLgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0Y2Fwcy4KLQkgIE5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGJ1ZmZlciwgdGhlIGJhc2UgY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgIE5vIG5lZWQgdG8gc2V0IGNhcHMgb24gYnVmZmVycywgc3ViY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzogKGdzdF9ydHBfbXA0YV9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wNGFfZGVwYXlfcHJvY2Vzcyk6Ci0JICBDbGVhbiB1cCBjYXBzIG5lZ290aWF0aW9uLgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0Y2Fwcy4KLQkgIE5vIG5lZWQgdG8gdmFsaWRhdGUgdGhlIGJ1ZmZlciwgdGhlIGJhc2UgY2xhc3MgZG9lcyB0aGF0IGZvciB1cy4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6IChnc3RfcnRwX21wNGFfcGF5X25ld19jYXBzKSwKLQkgIChnc3RfcnRwX21wNGFfcGF5X3NldGNhcHMpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0X291dGNhcHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6IChnc3RfcnRwX21wNGdfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X3Byb2Nlc3MpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbi4KLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldGNhcHMuCi0JICBObyBuZWVkIHRvIHZhbGlkYXRlIHRoZSBidWZmZXIsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICBObyBuZWVkIHRvIHNldCBjYXBzIG9uIGJ1ZmZlcnMsIHN1YmNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOiAoZ3N0X3J0cF9tcDRnX3BheV9maW5hbGl6ZSksCi0JICAoZ3N0X3J0cF9tcDRnX3BheV9uZXdfY2FwcyksIChnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0X291dGNhcHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6IChnc3RfcnRwX21wNHZfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcDR2X2RlcGF5X3Byb2Nlc3MpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbi4KLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldGNhcHMuCi0JICBObyBuZWVkIHRvIHZhbGlkYXRlIHRoZSBidWZmZXIsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICBObyBuZWVkIHRvIHNldCBjYXBzIG9uIGJ1ZmZlcnMsIHN1YmNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOiAoZ3N0X3J0cF9tcDR2X3BheV9uZXdfY2FwcyksCi0JICAoZ3N0X3J0cF9tcDR2X3BheV9zZXRjYXBzKToKLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldF9vdXRjYXBzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6IChnc3RfcnRwX21wYV9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wYV9kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRjYXBzLgotCSAgTm8gbmVlZCB0byB2YWxpZGF0ZSB0aGUgYnVmZmVyLCB0aGUgYmFzZSBjbGFzcyBkb2VzIHRoYXQgZm9yIHVzLgotCSAgVXNlIHRoZSBtYXJrZXIgYml0IHRvIHNldCB0aGUgRElTQ09OVCBmbGFnIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6IChnc3RfcnRwX21wYV9wYXlfc2V0Y2Fwcyk6Ci0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRfb3V0Y2Fwcy4KLQkgICogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOiAoZ3N0X3J0cF9tcHZfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcHZfZGVwYXlfcHJvY2Vzcyk6Ci0JICBDbGVhbiB1cCBjYXBzIG5lZ290aWF0aW9uLgotCSAgQWN0dWFsbHkgc2V0IG91dHB1dCBjYXBzLgotCSAgTm8gbmVlZCB0byB2YWxpZGF0ZSB0aGUgYnVmZmVyLCB0aGUgYmFzZSBjbGFzcyBkb2VzIHRoYXQgZm9yIHVzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wdnBheS5jOiAoZ3N0X3J0cF9tcHZfcGF5X3NldGNhcHMpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0X291dGNhcHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6IChnc3RfcnRwX3BjbWFfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9wY21hX2RlcGF5X3Byb2Nlc3MpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbi4KLQkgIFNldCBvdXRwdXQgYnVmZmVyIGR1cmF0aW9uIGJlY2F1c2Ugd2UgY2FuLgotCSAgVXNlIHRoZSBtYXJrZXIgYml0IHRvIHNldCB0aGUgRElTQ09OVCBmbGFnIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOiAoZ3N0X3J0cF9wY21hX3BheV9zZXRjYXBzKToKLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldF9vdXRjYXBzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOiAoZ3N0X3J0cF9wY211X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfcGNtdV9kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBVc2UgdGhlIG1hcmtlciBiaXQgdG8gc2V0IHRoZSBESVNDT05UIGZsYWcgb24gb3V0Z29pbmcgYnVmZmVycy4KLQkgICogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6IChnc3RfcnRwX3BjbXVfcGF5X3NldGNhcHMpOgotCSAgRG9uJ3QgaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgb2Ygc2V0X291dGNhcHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOiAoZ3N0X3J0cF9zcGVleF9kZXBheV9pbml0KSwKLQkgIChnc3RfcnRwX3NwZWV4X2RlcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9zcGVleF9kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBTZXQgb3V0cHV0IGNhcHMgb24gdGhlIHBhZCBhbmQgaGVhZGVyIGJ1ZmZlcnMuCi0JICBTZXQgZHVyYXRpb24gb24gb3V0cHV0IGJ1ZmZlcnMgYmVjYXVzZSB3ZSBjYW4uCi0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzogKGdzdF9ydHBfc3BlZXhfcGF5X3BhcnNlX2lkZW50KToKLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldF9vdXRjYXBzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOiAoZ3N0X3J0cF9zdjN2X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfc3Yzdl9kZXBheV9wcm9jZXNzKToKLQkgIENsZWFuIHVwIGNhcHMgbmVnb3RpYXRpb24uCi0JICBObyBuZWVkIHRvIHZhbGlkYXRlIHRoZSBidWZmZXIsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICBObyBuZWVkIHRvIHNldCBjYXBzIG91dCBvdXRwdXQgYnVmZmVycywgc3ViY2xhc3MgZG9lcyB0aGF0LgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6IChnc3RfcnRwX3RoZW9yYV9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3RoZW9yYV9kZXBheV9wcm9jZXNzKToKLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldGNhcHMuCi0JICBObyBuZWVkIHRvIHZhbGlkYXRlIHRoZSBidWZmZXIsIHRoZSBiYXNlIGNsYXNzIGRvZXMgdGhhdCBmb3IgdXMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6IChnc3RfcnRwX3RoZW9yYV9wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2ZsdXNoX3BhY2tldCksIChlbmNvZGVfYmFzZTY0KSwKLQkgIChnc3RfcnRwX3RoZW9yYV9wYXlfZmluaXNoX2hlYWRlcnMpLCAoZ3N0X3J0cF90aGVvcmFfcGF5X3BhcnNlX2lkKSwKLQkgIChnc3RfcnRwX3RoZW9yYV9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRfb3V0Y2Fwcy4KLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOiAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfcHJvY2Vzcyk6Ci0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRjYXBzLgotCSAgTm8gbmVlZCB0byB2YWxpZGF0ZSB0aGUgYnVmZmVyLCB0aGUgYmFzZSBjbGFzcyBkb2VzIHRoYXQgZm9yIHVzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOiAoZ3N0X3J0cF92b3JiaXNfcGF5X2ZpbmlzaF9oZWFkZXJzKToKLQkgIERvbid0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHNldF9vdXRjYXBzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOiAoZ3N0X3J0cF92cmF3X2RlcGF5X3NldGNhcHMpOgotCSAgQ2xlYW4gdXAgY2FwcyBuZWdvdGlhdGlvbiwgZG9uJ3QgaWdub3JlIHNldGNhcHMgcmV0dXJuLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzogKGdzdF9ydHBfdnJhd19wYXlfc2V0Y2Fwcyk6Ci0JICBEb24ndCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRfb3V0Y2Fwcy4KLQotMjAwOC0xMC0yNyAxMDozNTowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IEZvcndhcmQgdW5rbm93biBldmVudHMgdXBzdHJlYW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpOgotCSAgRm9yd2FyZCB1bmtub3duIGV2ZW50cyB1cHN0cmVhbS4KLQotMjAwOC0xMC0yNyAxMDozMzoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvaWN5ZGVtdXguYzogQWRkIHNvbWUgcmVmY291bnQgY2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOiAoaWN5ZGVtdXhfZm91bmRfcGFkKToKLQkgIEFkZCBzb21lIHJlZmNvdW50IGNoZWNrCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6IChydHBfcGlwZWxpbmVfcnVuKToKLQkgIERvbid0IGlnbm9yZSB0aGUgcmVzdWx0IG9mIHdyaXRlKCksIGZpeGVzIGEgIGNvbXBpbGVyIHdhcm5pbmcgZm9yIG1lLgotCSAgKiB0ZXN0cy9pY2xlcy92aWRlb2JveC10ZXN0LmM6IChtYWluKToKLQkgIE1ha2UgdGhlIG91dHB1dCBhIGxpdHRsZSBtb3JlIHByZXR0eS4KLQotMjAwOC0xMC0yNyAwOToyNjoxOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvZXNkL2VzZG1vbi5jOiBBZGQgZG9jIGJsb2IuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2Rtb24uYzoKLQkgIEFkZCBkb2MgYmxvYi4KLQotMjAwOC0xMC0yNyAwOToyMTo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGQgdGhlIGRvY3Mgb2YgdGhlIG5ldyBlbGVtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JICBBZGQgdGhlIGRvY3Mgb2YgdGhlIG5ldyBlbGVtZW50cy4KLQotMjAwOC0xMC0yNyAwOTowNDozNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXV0b2RldGVjdC86IEZpeCAiU2luY2UiIHRhZ3MgaW4gdGhlIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JICAoZ3N0X2F1dG9fYXVkaW9fc3JjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYzoKLQkgIChnc3RfYXV0b192aWRlb19zcmNfY2xhc3NfaW5pdCk6Ci0JICBGaXggIlNpbmNlIiB0YWdzIGluIHRoZSBkb2N1bWVudGF0aW9uLgotCi0yMDA4LTEwLTI3IDA5OjAwOjI5ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkgIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IEFkZCBzdXBwb3J0IGZvciBzb3VwaHR0cHNyYyB0byBhY3QgYXMgYSBsaXZlIHNvdXJjZS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZXQgdGltZXN0YS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogKGdzdF9zb3VwX2h0dHBfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm9wZXJ0eSksIChnc3Rfc291cF9odHRwX3NyY19nZXRfcHJvcGVydHkpOgotCSAgQWRkIHN1cHBvcnQgZm9yIHNvdXBodHRwc3JjIHRvIGFjdCBhcyBhIGxpdmUgc291cmNlLiBUaGlzIG1ha2VzIGl0Ci0JICBwb3NzaWJsZSB0byBnZXQgdGltZXN0YW1wZWQgYnVmZmVycyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZQotCSAgImRvLXRpbWVzdGFtcCIgcHJvcGVydHkuIEZpeGVzIGJ1ZyAjNTU2MDE5LgotCi0yMDA4LTEwLTI3IDA4OjU0OjMwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdXRvZGV0ZWN0LzogSW1wbGVtZW50IHNyYyBwbHVnaW5zLiBMaXR0bGUgY29kZS9zdHJpbmcgY2xlYW51cCBpbiB0aGUgc2lua3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5oOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5oOgotCSAgSW1wbGVtZW50IHNyYyBwbHVnaW5zLiBMaXR0bGUgY29kZS9zdHJpbmcgY2xlYW51cCBpbiB0aGUgc2lua3MuCi0JICBGaXhlcyAjNTIzODEzLgotCi0yMDA4LTEwLTI3IDA4OjQ1OjExICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBGaXggYSBtZW1vcnkgbGVhayB3aGVuIHBhZHMgYXJlIHJlcXVlc3RlZCBidXQgdGhlIHBpcGVsaW5lIG5ldmVyIGdvZXMgaW50byBQTEFZSU5HLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9tYXRyb3NrYV9tdXhfcmVsZWFzZV9wYWQpOgotCSAgRml4IGEgbWVtb3J5IGxlYWsgd2hlbiBwYWRzIGFyZSByZXF1ZXN0ZWQgYnV0IHRoZSBwaXBlbGluZSBuZXZlcgotCSAgZ29lcyBpbnRvIFBMQVlJTkcuCi0JICBDb3JyZWN0bHkgcmVtb3ZlIHJlcXVlc3QgcGFkcywgbm8gbWF0dGVyIGlmIHRoZXkgaGF2ZSBjb2xsZWN0ZWQKLQkgIGRhdGEgb3Igbm90LgotCSAgRml4ZXMgYnVnICM1NTc3MTAuCi0KLTIwMDgtMTAtMjcgMDg6NDA6MDIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOiBEZWZpbmUgdGhlIGNvcnJlY3QgV0lOVkVSIHNvIGdldGFkZGluZm8oKSBjYW4gYmUgdXNlZCB3aGVuIHVzaW5nIG1pbmd3MzIuIEZpeGVzIGJ1ZyAjNTU3Mjk0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogPGxybjE5ODYgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSAgRGVmaW5lIHRoZSBjb3JyZWN0IFdJTlZFUiBzbyBnZXRhZGRpbmZvKCkgY2FuIGJlIHVzZWQgd2hlbiB1c2luZwotCSAgbWluZ3czMi4gRml4ZXMgYnVnICM1NTcyOTQuCi0KLTIwMDgtMTAtMjcgMDg6MzY6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3VkcC86IEZpeCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCIgY29tcGlsZXIgd2FybmluZ3Mgb24gV2luZG93cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IDxscm4xOTg2IGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOiAoZ3N0X2R5bnVkcHNpbmtfcmVuZGVyKToKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyKToKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY3JlYXRlKToKLQkgIEZpeCAiYXJndW1lbnQgdHlwZSBtaXNtYXRjaCIgY29tcGlsZXIgd2FybmluZ3Mgb24gV2luZG93cy4KLQkgIEZpeGVzIGJ1ZyAjNTU3MjkzLgotCi0yMDA4LTEwLTI3IDA4OjMwOjUxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IERvbid0IGNhbGN1bGF0ZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyBmb3IgZXZlcnkgc2luZ2xlIGJ1ZmZlciBidXQgb25seSB3aGVuIGl0J3Mgbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6ICh1cGRhdGVfY29lZmZpY2llbnRzKToKLQkgIERvbid0IGNhbGN1bGF0ZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyBmb3IgZXZlcnkgc2luZ2xlIGJ1ZmZlcgotCSAgYnV0IG9ubHkgd2hlbiBpdCdzIG5lZWRlZC4gRml4ZXMgYnVnICM1NTcyNjAuCi0KLTIwMDgtMTAtMjYgMjA6MDU6NDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC4xMS4xCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjExLjEKLQotMjAwOC0xMC0yNiAyMDowNDoyMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDogRml4IHZlcnNpb24gbnVtYmVyIG9mIDAuMTAuMTEgcmVsZWFzZSBpbiBkb2FwIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JICBGaXggdmVyc2lvbiBudW1iZXIgb2YgMC4xMC4xMSByZWxlYXNlIGluIGRvYXAgZmlsZQotCi09PT0gcmVsZWFzZSAwLjEwLjExID09PQotCi0yMDA4LTEwLTI0IDIyOjQxOjE4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4xMQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZWxlYXNlIDAuMTAuMTEKLQotMjAwOC0xMC0yNCAyMjoyMDo0NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NhLnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9kYS5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vZXMucG86Ci0JKiBwby9ldS5wbzoKLQkqIHBvL2ZpLnBvOgotCSogcG8vZnIucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2lkLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDgtMTAtMjQgMTY6MzA6NTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IENvbW1pdCAwLjEwLjEwLjQgcHJlLXJlbGVhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBDb21taXQgMC4xMC4xMC40IHByZS1yZWxlYXNlCi0KLTIwMDgtMTAtMjEgMTI6NDI6NDUgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBGaXggVlBSUCBjaHVuayBzZXR1cCBpbiBhdmltdXguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIEZpeCBWUFJQIGNodW5rIHNldHVwIGluIGF2aW11eC4KLQkgIEZpeGVzOiAjNTU2MDEwCi0JICBQYXRjaCBCeTogTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLTIwMDgtMTAtMjEgMTI6Mzg6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBzdXBwb3J0IGR5bmFtaWNhbGx5IGNoYW5naW5nIHByb3BlcnRpZXMgaW4gdmlkZW9ib3gKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgIHN1cHBvcnQgZHluYW1pY2FsbHkgY2hhbmdpbmcgcHJvcGVydGllcyBpbiB2aWRlb2JveAotCSAgRml4ZWQ6ICM1NTcwODUKLQkgIFBhdGNoIEJ5OiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrPgotCi0yMDA4LTEwLTE2IDE3OjEwOjQyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiAwLjEwLjEwLjMgcHJlLXJlbGVhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAwLjEwLjEwLjMgcHJlLXJlbGVhc2UKLQotMjAwOC0xMC0xNiAxNTozMDoyMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEb24ndCBydW4gdGhlIHN0YXRlcyB0ZXN0IG9uIHB1bHNlc3JjIGFuZCBwdWxzZXNpbmsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIERvbid0IHJ1biB0aGUgc3RhdGVzIHRlc3Qgb24gcHVsc2VzcmMgYW5kIHB1bHNlc2luawotCi0yMDA4LTEwLTE2IDExOjUyOjQ0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBDb21taXQgMC4xMC4xMC4yIHByZS1yZWxlYXNlIGJ1bXAgdGhhdCBhY3R1YWxseSB3ZW50IG91dCBvbiAyMDA4LTEwLTExCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQ29tbWl0IDAuMTAuMTAuMiBwcmUtcmVsZWFzZSBidW1wIHRoYXQgYWN0dWFsbHkgd2VudAotCSAgb3V0IG9uIDIwMDgtMTAtMTEKLQotMjAwOC0xMC0xNSAxNTo0MjoyOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBTa2lwIGVudHJpZXMgZm9yIHN0cmVhbXMgdGhhdCBkb24ndCBoYXZlIGEgb3V0cHV0IHBhZCB5ZXQsIHRoZXJlYnkgYXZvaWRpbmcgY2FsbGluZyBwYWQgZnVuY3RpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fc2Nhbik6Ci0JICBTa2lwIGVudHJpZXMgZm9yIHN0cmVhbXMgdGhhdCBkb24ndCBoYXZlIGEgb3V0cHV0IHBhZCB5ZXQsIHRoZXJlYnkKLQkgIGF2b2lkaW5nIGNhbGxpbmcgcGFkIGZ1bmN0aW9ucyB3aXRoIGEgTlVMTCBwYWQuCi0JICBGaXhlcyAjNTU2NDI0Ci0KLTIwMDgtMTAtMTUgMDk6Mzk6MjcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUmVtb3ZlIHByZXZpb3VzIHdyb25nIGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUmVtb3ZlIHByZXZpb3VzIHdyb25nIGNvbW1pdAotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOiAoaWN5ZGVtdXhfZm91bmRfcGFkKToKLQkgIFJlbW92ZSBwcm9ibGVtYXRpYyBhbmQgdXNlbGVzcyByZWZjb3VudCBjaGVjay4KLQkgIEZpeGVzICM1NTYzODEKLQotMjAwOC0xMC0xNSAwOToyNzoyNyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBSZW1vdmUgcHJvYmxlbWF0aWMgYW5kIHVzZWxlc3MgcmVmY291bnQgY2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV9ub2RlKToKLQkgIFJlbW92ZSBwcm9ibGVtYXRpYyBhbmQgdXNlbGVzcyByZWZjb3VudCBjaGVjay4KLQkgIEZpeGVzICM1NTYzODEKLQotMjAwOC0xMC0xMCAxMjoyODozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4dC9mbGFjLzogQ2FzdCBzb21lIHNpemVfdCBhcmd1bWVudHMgdG8gZ3VpbnQgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3Mgb24gNjQtYml0IHN5c3RlbXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jIChnc3RfZmxhY19kZWNfcmVhZF9zdHJlYW0pOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmMgKGdzdF9mbGFjX2VuY193cml0ZV9jYWxsYmFjayk6Ci0JICBDYXN0IHNvbWUgc2l6ZV90IGFyZ3VtZW50cyB0byBndWludCB0byBhdm9pZCBjb21waWxlcgotCSAgd2FybmluZ3Mgb24gNjQtYml0IHN5c3RlbXMuCi0KLTIwMDgtMTAtMDkgMTQ6Mjc6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogUmV0dXJuIFRSVUUgaW5zdGVhZCBvZiBGQUxTRSBmcm9tIHRoZSBldmVudCBoYW5kbGVyIHdoZW4gd2Ugc3dhbGxvd2VkIHRoZSBldmVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19oYW5kbGVfc3JjX2V2ZW50KToKLQkgIFJldHVybiBUUlVFIGluc3RlYWQgb2YgRkFMU0UgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciB3aGVuIHdlIHN3YWxsb3dlZCB0aGUKLQkgIGV2ZW50LgotCi0yMDA4LTEwLTA4IDE1OjU5OjU2ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIHJlbW92ZSBvbGQgQ0RJTyBwbHVnaW4gbm93IGluIHVnbHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIG9sZCBDRElPIHBsdWdpbiBub3cgaW4gdWdseQotCi0yMDA4LTEwLTA4IDE0OjQ3OjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFJlc2V0IGhlYWRlciBzdGF0ZS4gRml4ZXMgIzU1NTMyMS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3Jlc2V0KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpOgotCSAgUmVzZXQgaGVhZGVyIHN0YXRlLiBGaXhlcyAjNTU1MzIxLgotCi0yMDA4LTEwLTA4IDEzOjMxOjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4Lio6IEZvciB0aW1lc3RhbXBpbmcgYXVkaW8gcGFja2V0cyB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBhbW91bnQgb2YgYmxvY2tzIGluIG9uZSBlbnRyeSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgRm9yIHRpbWVzdGFtcGluZyBhdWRpbyBwYWNrZXRzIHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlCi0JICBhbW91bnQgb2YgYmxvY2tzIGluIG9uZSBlbnRyeSB1c2luZyB0aGUgYmxvY2thbGlnbi4gRml4ZXMgc29tZSBzeW5jCi0JICBpc3N1ZXMgd2l0aCB6ZXJvLXBhZGRlZCBhdWRpbyBibG9ja3MgaW4gdGhlIGJlZ2lubmluZyBvZiBhdmkgZmlsZXMuCi0KLTIwMDgtMTAtMDggMTA6NDI6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6IEltcGxlbWVudCBERUZBVUxUIGFuZCBCVUZGRVIgcG9zaXRpb24gcXVlcmllcy4gU2VlICM1NTUyNjAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzogKGdzdF9tdWx0aV9maWxlX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3RfbXVsdGlfZmlsZV9zcmNfcXVlcnkpOgotCSAgSW1wbGVtZW50IERFRkFVTFQgYW5kIEJVRkZFUiBwb3NpdGlvbiBxdWVyaWVzLiBTZWUgIzU1NTI2MC4KLQotMjAwOC0xMC0wOCAwOToyOTowMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogRml4IGJ1aWxkIGZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSBYRGFtYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IChnc3RfeGltYWdlX3NyY19zdG9wKToKLQkgIEZpeCBidWlsZCBmb3Igc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgWERhbWFnZS4KLQotMjAwOC0xMC0wNyAwOTo1ODoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvZXhhbXBsZXMvcnRwLzogQWRkIHNvbWUgbW9yZSBIMjYzcCBzZXJ2ZXIgYW5kIGNsaWVudCBleGFtcGxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLnNkcDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1WVFMtSDI2M3Auc2g6Ci0JICBBZGQgc29tZSBtb3JlIEgyNjNwIHNlcnZlciBhbmQgY2xpZW50IGV4YW1wbGVzLgotCi0yMDA4LTEwLTAzIDE3OjAzOjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IERlcGVuZCBvbiByZWxlYXNlZCB2ZXJzaW9ucyBvZiBjb3JlIGFuZCBiYXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzo6Ci0JICBEZXBlbmQgb24gcmVsZWFzZWQgdmVyc2lvbnMgb2YgY29yZSBhbmQgYmFzZS4KLQotMjAwOC0xMC0wMyAxNjoxMzozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L3B1bHNlLzogUmV0dXJuIC0xIGluc3RlYWQgb2YgMCBpbiBlcnJvciBjYXNlcy4gRml4ZXMgIzU1NDc3MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6IChnc3RfcHVsc2VzaW5rX3dyaXRlKToKLQkgICogZXh0L3B1bHNlL3B1bHNlc3JjLmM6IChnc3RfcHVsc2VzcmNfcmVhZCk6Ci0JICBSZXR1cm4gLTEgaW5zdGVhZCBvZiAwIGluIGVycm9yIGNhc2VzLiBGaXhlcyAjNTU0NzcxLgotCi0yMDA4LTEwLTAzIDE1OjU0OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiBTdG9wIGxlYWtpbmcgdGhlIGN1cnNvciBpbWFnZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiAoZ3N0X3hpbWFnZV9zcmNfc3RhcnQpLAotCSAgKGdzdF94aW1hZ2Vfc3JjX3N0b3ApLCAoZ3N0X3hpbWFnZV9zcmNfeGltYWdlX2dldCk6Ci0JICBTdG9wIGxlYWtpbmcgdGhlIGN1cnNvciBpbWFnZS4KLQkgIFVucmVmIHRoZSBsYXN0X3hpbWFnZSBhbmQgdGhlIGNhY2hlZCBjdXJzb3IgaW1hZ2Ugb24gc2h1dGRvd24uCi0JICBGaXhlcyAjNTUxNTcwLgotCi0yMDA4LTEwLTAzIDExOjMyOjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6IEdldHRpbmcgdGhlIENsYXNzIGZyb20gYW4gaW5zdGFuY2UgaXMgbm90IGp1c3QgYSBtYXR0ZXIgb2YgY2FzdGluZyBpdCB0byB0aGUgY2xhc3Mgc3RydWN0IGIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICBHZXR0aW5nIHRoZSBDbGFzcyBmcm9tIGFuIGluc3RhbmNlIGlzIG5vdCBqdXN0IGEgbWF0dGVyIG9mIGNhc3RpbmcgaXQgdG8KLQkgIHRoZSBjbGFzcyBzdHJ1Y3QgYnV0IGl0IGludm9sdmVzIGNhbGxpbmcgR19PQkpFQ1RfR0VUX0NMQVNTIG9uIHRoZQotCSAgaW5zdGFuY2UuIEZpeGVzICM1NDk3ODQuCi0KLTIwMDgtMTAtMDEgMjE6MjI6MjYgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggbGlicyBmb3IgbGlua2luZyBkaXJlY3Rzb3VuZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBGaXggbGlicyBmb3IgbGlua2luZyBkaXJlY3Rzb3VuZC4KLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgRml4IGJ1ZmZlciBzaXppbmcgdG8gcHJldmVudCByYWNpbmcgdGhlIHJpbmdidWZmZXIgYXQgc3RhcnR1cC4KLQkgIEFkZCB2b2x1bWUgcHJvcGVydHkuCi0KLTIwMDgtMDktMjcgMDA6NDM6MDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvcHVsc2UvcHVsc2VzaW5rLmM6IEZpeCBwcm9ibGVtcyB3aXRoIHB1bHNlc2luayByYW5kb21seSBlcnJvcmluZyB3aXRoIGNvZGUgJ09LJyBhZnRlciBhIGZvcm1hdCBjaGFuZ2Ugb24gdGhlIHN0cmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6Ci0JICBGaXggcHJvYmxlbXMgd2l0aCBwdWxzZXNpbmsgcmFuZG9tbHkgZXJyb3Jpbmcgd2l0aCBjb2RlICdPSycgYWZ0ZXIgYQotCSAgZm9ybWF0IGNoYW5nZSBvbiB0aGUgc3RyZWFtIGJ5IHdhaXRpbmcgd2hlbiBkaXNjb25uZWN0aW5nIHRoZSBzdHJlYW0uCi0KLTIwMDgtMDktMjYgMTQ6NDQ6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogTWFyayBESVNDT05UIG9uIG91dHB1dCBidWZmZXJzIHdoZW4gdGhlIG1hcmtlciBiaXQgc2lnbmFscyBhIG5ldyB0YWxrIHNwdXJ0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogKGdzdF9ydHBfYW1yX2RlcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfYW1yX2RlcGF5X3Byb2Nlc3MpOgotCSAgTWFyayBESVNDT05UIG9uIG91dHB1dCBidWZmZXJzIHdoZW4gdGhlIG1hcmtlciBiaXQgc2lnbmFscyBhIG5ldyB0YWxrCi0JICBzcHVydC4KLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzogKGdzdF9ydHBfYW1yX3BheV9oYW5kbGVfYnVmZmVyKToKLQkgIFNldCB0aGUgbWFya2VyIGJpdCBmb3IgYnVmZmVycyB3aXRoIGEgRElTQ09OVCBmbGFnIHRvIHNpZ25hbCBhIHRhbGsKLQkgIHNwdXJ0LgotCi0yMDA4LTA5LTI2IDEzOjU1OjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQWRkZWQgTVA0QS1MQVRNIHBheWxvYWRlciB0byBtYXRjaCB0aGUgZGVwYXlsb2FkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhcGF5LmM6IChnc3RfcnRwX21wNGFfcGF5X2dldF90eXBlKSwKLQkgIChnc3RfcnRwX21wNGFfcGF5X2Jhc2VfaW5pdCksIChnc3RfcnRwX21wNGFfcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfbXA0YV9wYXlfaW5pdCksIChnc3RfcnRwX21wNGFfcGF5X2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX21wNGFfcGF5X3BhcnNlX2F1ZGlvX2NvbmZpZyksIChnc3RfcnRwX21wNGFfcGF5X25ld19jYXBzKSwKLQkgIChnc3RfcnRwX21wNGFfcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9tcDRhX3BheV9oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfcnRwX21wNGFfcGF5X2NoYW5nZV9zdGF0ZSksIChnc3RfcnRwX21wNGFfcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhcGF5Lmg6Ci0JICBBZGRlZCBNUDRBLUxBVE0gcGF5bG9hZGVyIHRvIG1hdGNoIHRoZSBkZXBheWxvYWRlci4KLQotMjAwOC0wOS0yNSAxNToxMToxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBIYW5kbGUgc2VnbWVudHMgYSBsaXR0bGUgYmV0dGVyLiBGaXhlcyAjNTM3MzYxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX2ZpbGxfcXVldWVzKSwKLQkgIChnc3RfdmlkZW9taXhlcl9zaW5rX2V2ZW50KToKLQkgIEhhbmRsZSBzZWdtZW50cyBhIGxpdHRsZSBiZXR0ZXIuIEZpeGVzICM1MzczNjEuCi0KLTIwMDgtMDktMjUgMTI6MDc6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRG9uJ3QgYXNzdW1lIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgUEFVU0UgYnkgZGVmYXVsdC4gRml4ZXMgIzU1MTA0OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKToKLQkgIERvbid0IGFzc3VtZSB0aGUgc2VydmVyIHN1cHBvcnRzIFBBVVNFIGJ5IGRlZmF1bHQuIEZpeGVzICM1NTEwNDguCi0KLTIwMDgtMDktMjUgMTE6MzA6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IFN3aXRjaCBvbiB0aGUgc29ja2V0IGZhbWlseSB0byBnZXQgdGhlIGFkZHJsZW4gc2l6ZSByaWdodC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfdWRwc3JjX3NldF91cmkpLCAoZ3N0X3VkcHNyY19zdGFydCk6Ci0JICBTd2l0Y2ggb24gdGhlIHNvY2tldCBmYW1pbHkgdG8gZ2V0IHRoZSBhZGRybGVuIHNpemUgcmlnaHQuCi0KLTIwMDgtMDktMjUgMTA6MzQ6MzkgKzAwMDAgIERhbmllbCBGcmFua2UgPGRmQGRmcmFua2UudXM+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IE9TIFgncyBiaW5kKCkgaW1wbGVtZW50YXRpb24gaXMgcGlja3kgYWJvdXQgaXRzIGFkZHJsZW4gcGFyYW1ldGVyIGFuZCBmYWlscyB3aXRoIEVJTlZBTCBpZiBpdCBpcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRGFuaWVsIEZyYW5rZSA8ZGYgYXQgZGZyYW5rZSBkb3QgdXM+Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NyZWF0ZSksIChnc3RfdWRwc3JjX3N0YXJ0KToKLQkgIE9TIFgncyBiaW5kKCkgaW1wbGVtZW50YXRpb24gaXMgcGlja3kgYWJvdXQgaXRzIGFkZHJsZW4gcGFyYW1ldGVyIGFuZAotCSAgZmFpbHMgd2l0aCBFSU5WQUwgaWYgaXQgaXMgbGFyZ2VyIHRoYW4gZXhwZWN0ZWQgZm9yIHRoZSBzb2NrZXQncyBhZGRyZXNzCi0JICBmYW1pbHkuIFNldCB0aGUgbGVuZ3RoIHRvIHRoZSBleHBlY3RlZCBsZW5ndGggaW5zdGVhZC4gRml4ZXMgIzU1MzE5MS4KLQotMjAwOC0wOS0yMyAxODowODo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgY2Fubm90IGRvIGRlc3JpYmUgb3Igd2hlbiB0aGUgZGVzY3JpYmUgcmVzdWx0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfb3Blbik6Ci0JICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgY2Fubm90IGRvIGRlc3JpYmUgb3Igd2hlbiB0aGUgZGVzY3JpYmUgcmVzdWx0Ci0JICBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgU0RQIG1lc3NhZ2UuCi0KLTIwMDgtMDktMjMgMTc6MzE6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IEZpeCBzZXR0aW5nIHRoZSBxb3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfc2V0X3Byb3BlcnR5KToKLQkgIEZpeCBzZXR0aW5nIHRoZSBxb3MuCi0KLTIwMDgtMDktMTcgMTQ6NTA6NDIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogU29tZSAnYnJva2VuJyBmaWxlcyBvdXQgdGhlcmUgaGF2ZSBhdG9tIGxlbmd0aHMgb2YgemVyby4uLiB3aGljaCBiYXNpY2FsbHkgcmVzdWx0cyBpbiBxdGRlbXV4IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfaGVhZGVyKSwKLQkgIChnc3RfcXRkZW11eF9jaGFpbik6Ci0JICBTb21lICdicm9rZW4nIGZpbGVzIG91dCB0aGVyZSBoYXZlIGF0b20gbGVuZ3RocyBvZiB6ZXJvLi4uCi0JICB3aGljaCBiYXNpY2FsbHkgcmVzdWx0cyBpbiBxdGRlbXV4IGNvbnN1bWluZyB0aGF0IGF0b20gYWdhaW4gYW5kIGFnYWluCi0JICB1bnRpbCB0aGUgKmVuZCBvZiBuaWdodCogIQotCSAgRGV0ZWN0IHRoYXQgYW5kIGVtaXRzIGFuIGFkZXF1YXRlIGVsZW1lbnQgZXJyb3IgbWVzc2FnZS4KLQotMjAwOC0wOS0xNyAxMzo0OTowNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC86IEZpeCBidWlsZCBmbGFncyBvcmRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtOgotCSAgRml4IGJ1aWxkIGZsYWdzIG9yZGVyLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2FtcGxpZnkuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9keW5hbWljLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZvcm1hdCBmaXhlcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JICBQdWxsIGluIHVuaXN0ZC5oCi0KLTIwMDgtMDktMTUgMjE6MTA6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5Lio6IEhhbmRsZSBpbnRlcmxlYXZlZCBzdHJlYW1zIGJ5IHJlb3JkZXJpbmcgQVUgaW4gYSBxdWV1ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOiAoZ3N0X3J0cF9tcDRnX2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXA0Z19kZXBheV9maW5hbGl6ZSksIChnc3RfcnRwX21wNGdfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X2NsZWFyX3F1ZXVlKSwgKGdzdF9ydHBfbXA0Z19kZXBheV9mbHVzaF9xdWV1ZSksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X3F1ZXVlKSwgKGdzdF9ydHBfbXA0Z19kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX21wNGdfZGVwYXlfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuaDoKLQkgIEhhbmRsZSBpbnRlcmxlYXZlZCBzdHJlYW1zIGJ5IHJlb3JkZXJpbmcgQVUgaW4gYSBxdWV1ZS4KLQotMjAwOC0wOS0xNSAxNjowNDoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzogQ2hhbmdlIHNvbWUgb2YgdGhlIHJhbmdlcyBpbiB0aGUgY2FwcywgbW9zdGx5IGZvciB0aGUgYW1vdW50IG9mIGJpdHMgd2UgY2FuIHVzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOiAoZ3N0X2JzX3BhcnNlX2luaXQpLAotCSAgKGdzdF9ic19wYXJzZV9yZWFkKSwgKGdzdF9ydHBfbXA0Z19kZXBheV9wcm9jZXNzKToKLQkgIENoYW5nZSBzb21lIG9mIHRoZSByYW5nZXMgaW4gdGhlIGNhcHMsIG1vc3RseSBmb3IgdGhlIGFtb3VudCBvZiBiaXRzIHdlCi0JICBjYW4gdXNlLgotCSAgQWRkZWQgYSBsaXR0bGUgYml0c3RyZWFtIHBhcnNlIGFuZCB1c2UgaXQgdG8gcGFyc2UgdGhlIEFVIGhlYWRlciBmaWVsZHMuCi0JICBDaGVjayBmb3IgbWFsZm9ybWVkIGFuZCB3cm9uZ2x5IHNpemVkIHBhY2tldHMgYmV0dGVyLgotCSAgSW1wbGVtZW50IG1vcmUgaGVhZGVyIGZpZWxkIHBhcnNpbmcuCi0JICBIYW5kbGUgdGhlIHNpemUgb2YgZnJhZ21lbnRlZCBwYWNrZXRzIGNvcnJlY3RseS4KLQotMjAwOC0wOS0xNCAxMTozMjoxNSArMDAwMCAgSm9uYXRoYW4gTWF0dGhldyA8bm90dmVyeXNtYXJ0QGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgbWFwcGluZyBmb3IgJ3RpZmYnID0+IGltYWdlL3RpZmYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEpvbmF0aGFuIE1hdHRoZXcgPG5vdHZlcnlzbWFydEBnbWFpbC5jb20+Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICBBZGQgbWFwcGluZyBmb3IgJ3RpZmYnID0+IGltYWdlL3RpZmYKLQkgIEZpeGVzICM1NTIyMTMKLQotMjAwOC0wOS0xMSAxMToyNjowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3JhdzEzOTQvOiBQcmV0ZW5kIHRvIGNhcmUgYWJvdXQgdGhlIHJlc3VsdCBvZiB3cml0ZSgpIHdoaWNoIHdvcmtzIGFyb3VuZCBjb21waWxlciB3YXJuaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKFNFTkRfQ09NTUFORCk6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzogKFNFTkRfQ09NTUFORCk6Ci0JICBQcmV0ZW5kIHRvIGNhcmUgYWJvdXQgdGhlIHJlc3VsdCBvZiB3cml0ZSgpIHdoaWNoIHdvcmtzIGFyb3VuZAotCSAgY29tcGlsZXIgd2FybmluZ3MuCi0KLTIwMDgtMDktMDQgMDk6MjU6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogTWFrZSBzdXJlIHRoZSBkZXNpcmVkIGRlZmF1bHQgdmFsdWVzIGFyZSBhY3R1YWxseSBzZXQsIG5vdCBvbmx5IHJlZ2lzdGVyZWQgYXMgZGVmYXVsdHMgKGFjdHVhbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjX2VuY19jbGFzc19pbml0KToKLQkgIE1ha2Ugc3VyZSB0aGUgZGVzaXJlZCBkZWZhdWx0IHZhbHVlcyBhcmUgYWN0dWFsbHkgc2V0LCBub3Qgb25seQotCSAgcmVnaXN0ZXJlZCBhcyBkZWZhdWx0cyAoYWN0dWFsIHByb2JsZW0gaXMgdGhhdCB0aGUgc3RlcmVvLXNwZWNpZmljCi0JICB2YWx1ZXMgYXJlIG9ubHkgdXBkYXRlZCBpZiBjaGFubmVscz09Miwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIHlldAotCSAgd2hlbiB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQsIHNvIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlCi0JICBtaWQtc2lkZS1zdGVyZW8gYW5kIGxvb3NlLW1pZC1zaWRlLXN0ZXJlbyBzZXR0aW5ncyBhcmUgbmV2ZXIKLQkgIHNldCBpbiBfdXBkYXRlX3F1YWxpdHkoKSkuIE1ha2VzIGZsYWNlbmMgY3JlYXRlIHNtYWxsZXIgZmlsZXMgYnkKLQkgIGRlZmF1bHQgKGZvciBzdGVyZW8gaW5wdXQpLCBhbmQgZml4ZXMgIzU1MDc5MS4KLQotMjAwOC0wOS0wMyAxMjozOTozNSArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC9xdGRlbXV4LzogQWRkIHN1cHBvcnQgZm9yIHZpZGVvL21qMiBtaW1lLXR5cGUgYW5kIGl0cyBhZGRpdGlvbmFsIGF0b21zL2JveGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIpLCAocXRkZW11eF9wYXJzZV9ub2RlKSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyYWspLCAocXRkZW11eF92aWRlb19jYXBzKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBBZGQgc3VwcG9ydCBmb3IgdmlkZW8vbWoyIG1pbWUtdHlwZSBhbmQgaXRzIGFkZGl0aW9uYWwgYXRvbXMvYm94ZXMuCi0JICBGaXhlcyAjNTUwNjQ2LgotCi0yMDA4LTA5LTAzIDExOjEwOjI1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9kZWJ1Zy9nc3R0YWdpbmplY3QuYzogQWRkIHdhcm5pbmcgd2hlbiB0YWdzIHBhcmFtZXRlciBpcyB1bnBhcnNhYmxlIGFuZCBnaXZlIGV4YW1wbGUgZm9yIHF1b3RpbmcgaW4gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC5jOgotCSAgQWRkIHdhcm5pbmcgd2hlbiB0YWdzIHBhcmFtZXRlciBpcyB1bnBhcnNhYmxlIGFuZCBnaXZlIGV4YW1wbGUgZm9yCi0JICBxdW90aW5nIGluIHRoZSBkb2NzLgotCi0yMDA4LTA5LTAyIDE1OjI3OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBtYXBwaW5nIGZvciBJTUEgTG9raSBTREwgTUpQRUcgQURQQ00gY29kZWMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9hdWRpb19jYXBzKToKLQkgIEFkZCBtYXBwaW5nIGZvciBJTUEgTG9raSBTREwgTUpQRUcgQURQQ00gY29kZWMuCi0JICBBZGQgc29tZSBhbHRlcm5hdGl2ZSBieXRlc3dhcHBlZCBtYXBwaW5ncyB0aGF0IHNlZW0gdG8gcG9wIHVwIHNvbWV0aW1lcy4KLQkgIEZpeGVzICM1NTAyODguCi0KLTIwMDgtMDktMDIgMDk6NDA6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBvLzogQWRkICdjYScgdG8gTElOR1VBUzsgYWRkIHNvbWUgbW9yZSBmaWxlcyB3aXRoIHRyYW5zbGF0aW9ucyBhbmQgc29tZSBmaWxlcyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBieSB0cmFuc2xhdGlvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL0xJTkdVQVM6Ci0JICAqIHBvL1BPVEZJTEVTLmluOgotCSAgKiBwby9QT1RGSUxFUy5za2lwOgotCSAgQWRkICdjYScgdG8gTElOR1VBUzsgYWRkIHNvbWUgbW9yZSBmaWxlcyB3aXRoIHRyYW5zbGF0aW9ucyBhbmQgc29tZQotCSAgZmlsZXMgd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQgYnkgdHJhbnNsYXRpb24gdG9vbHMuCi0KLTIwMDgtMDktMDIgMDg6NTE6MDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3NwZWV4LzogVXNlIGludGVnZXIgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGNvbnZlcnRpbmcgdGhlIGludGVnZXIgaW5wdXQgdG8gZmxvYXQgaW4gdGhlIGVsZW1lLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IChzcGVleF9kZWNfY2hhaW5fcGFyc2VfZGF0YSk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5oOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogKGdzdF9zcGVleF9lbmNfZW5jb2RlKToKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JICBVc2UgaW50ZWdlciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluc3RlYWQgb2YgY29udmVydGluZwotCSAgdGhlIGludGVnZXIgaW5wdXQgdG8gZmxvYXQgaW4gdGhlIGVsZW1lbnQuIFRoZSBsaWJzcGVleCBpbnRlZ2VyCi0JICBmdW5jdGlvbnMgYXJlIGRvaW5nIHRoaXMgZm9yIHVzIGFscmVhZHkgb3IsIGlmIGxpYnNwZWV4IHdhcyBjb21waWxlZAotCSAgaW4gaW50ZWdlciBtb2RlLCB0aGV5J3JlIGRvaW5nIGV2ZXJ5dGhpbmcgdXNpbmcgaW50ZWdlciBhcml0aG1ldGljcy4KLQkgIEFsc28gc2F2ZXMgc29tZSBjb3B5aW5nIGFyb3VuZC4KLQotMjAwOC0wOS0wMSAxMzoyOToyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggLS1kaXNhYmxlLWV4dGVybmFsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4IC0tZGlzYWJsZS1leHRlcm5hbAotCi0yMDA4LTA4LTMxIDE3OjA5OjE4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuKjogSGFuZGxlIG5vbi16ZXJvIHN0YXJ0IHRpbWVzdGFtcHMgYW5kIHN0cmVhbSBkaXNjb250aW51aXRpZXMgY29ycmVjdGx5LiBUaGlzIG9ubHkgaGFzIGFuIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3B1c2hfYmxvY2spLCAoZ3N0X3dhdnBhY2tfZW5jX2NoYWluKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSAgSGFuZGxlIG5vbi16ZXJvIHN0YXJ0IHRpbWVzdGFtcHMgYW5kIHN0cmVhbSBkaXNjb250aW51aXRpZXMKLQkgIGNvcnJlY3RseS4gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3QgaWYgd2UncmUgbXV4aW5nIGludG8KLQkgIGEgY29udGFpbmVyIGZvcm1hdCBhcyB0aGUgcmF3IFdhdlBhY2sgc3RyZWFtIG11c3QgY29udGFpbgotCSAgY29udGlub3VzIHNhbXBsZSBudW1iZXJzLgotCi0yMDA4LTA4LTMxIDE1OjAyOjA5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiBDb3JyZWN0IHRoZSB0aW1lc3RhbXAgYW5kIGdyYW51bGVwb3MgY2FsY3VsYXRpb24gYnkgb25lIFNwZWV4IGZyYW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4X2VuY19lbmNvZGUpOgotCSAgQ29ycmVjdCB0aGUgdGltZXN0YW1wIGFuZCBncmFudWxlcG9zIGNhbGN1bGF0aW9uIGJ5IG9uZSBTcGVleAotCSAgZnJhbWUuCi0KLTIwMDgtMDgtMzEgMTQ6Mzk6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IENvcnJlY3RseSB0YWtlIHRoZSBncmFudWxlcG9zIGZyb20gdXBzdHJlYW0gaWYgcG9zc2libGUgYW5kIGNvcnJlY3RseSBoYW5kbGUgdGhlIGdyYW51bGVwb3MgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IChzcGVleF9kZWNfY2hhaW5fcGFyc2VfZGF0YSk6Ci0JICBDb3JyZWN0bHkgdGFrZSB0aGUgZ3JhbnVsZXBvcyBmcm9tIHVwc3RyZWFtIGlmIHBvc3NpYmxlIGFuZAotCSAgY29ycmVjdGx5IGhhbmRsZSB0aGUgZ3JhbnVsZXBvcyBpbiB2YXJpb3VzIGNhbGN1bGF0aW9uczogdGhlCi0JICBncmFudWxlcG9zIGlzIHRoZSBzYW1wbGUgbnVtYmVyIG9mIHRoZSBfbGFzdF8gc2FtcGxlIGluIGEgZnJhbWUsIG5vdAotCSAgdGhlIGZpcnN0LgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogKGdzdF9zcGVleF9lbmNfc2lua2V2ZW50KSwKLQkgIChnc3Rfc3BlZXhfZW5jX2VuY29kZSksIChnc3Rfc3BlZXhfZW5jX2NoYWluKSwKLQkgIChnc3Rfc3BlZXhfZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgSGFuZGxlIG5vbi16ZXJvIHN0YXJ0IHRpbWVzdGFtcHMgaW4gdGhlIGVuY29kZXIgYW5kIGRldGVjdC9oYW5kbGUKLQkgIHN0cmVhbSBkaXNjb250aW51aXRpZXMuIEZpeGVzIGJ1ZyAjNTQ3MDc1LgotCi0yMDA4LTA4LTMxIDA4OjMyOjQ1ICswMDAwICBDcmFpZyBLZW9naCA8Y3NrZW9naEBhZGFtLmNvbS5hdT4KLQotCSAgZXh0L2Fubm9kZXgvZ3N0Y21tbHBhcnNlci5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MgY2F1c2VkIGJ5IHBhc3NpbmcgYSBzdHJpbmcgYXMgZm9ybWF0IHN0cmluZyBpbnN0ZWFkIG9mICIlcyIgYW5kIHRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBDcmFpZyBLZW9naCA8Y3NrZW9naCBhdCBhZGFtIGRvdCBjb20gZG90IGF1PgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1scGFyc2VyLmM6IChnc3RfY21tbF9wYXJzZXJfcGFyc2VfY2h1bmspOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGNhdXNlZCBieSBwYXNzaW5nIGEgc3RyaW5nIGFzIGZvcm1hdCBzdHJpbmcKLQkgIGluc3RlYWQgb2YgIiVzIiBhbmQgdGhlbiB0aGUgc3RyaW5nLiBUaGlzIGlzIG9ubHkgZXhwb3NlZCBieSAtV2Zvcm1hdD0yCi0JICBhcyB1c2VkIGJ5IGRlZmF1bHQgb24gVWJ1bnR1LiBGaXhlcyBidWcgIzU1MDAxNS4KLQotMjAwOC0wOC0zMCAxNDoxNTowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgTWFrZSBzdHVmZiBjb21waWxlIHdpdGggR1NUX0RJU0FCTEVfR1NUX0RFQlVHLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYzogKGdzdF9oZHYxMzk0c3JjX2NyZWF0ZSk6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiAoZ3N0X2FscGhhX2dldF91bml0X3NpemUpOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOiAoZ2VuZXJhdGVfY29lZmZpY2llbnRzKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9pZCksCi0JICAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2xlbmd0aCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9jaGVja19zdWJ0aXRsZV9idWZmZXIpOgotCSAgTWFrZSBzdHVmZiBjb21waWxlIHdpdGggR1NUX0RJU0FCTEVfR1NUX0RFQlVHLgotCi0yMDA4LTA4LTI5IDAwOjI4OjU1ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9sYXcvOiBSZWYgY2FwcyBiZWZvcmUgcGFzc2luZyB0byBnc3RfcGFkX3RlbXBsYXRlX25ldygpLCBzaW5jZSB0aGF0IHRha2VzIG93bmVyc2hpcC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGF3L2FsYXcuYzoKLQkgICogZ3N0L2xhdy9tdWxhdy5jOgotCSAgUmVmIGNhcHMgYmVmb3JlIHBhc3NpbmcgdG8gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcoKSwgc2luY2UgdGhhdCB0YWtlcwotCSAgb3duZXJzaGlwLgotCi0yMDA4LTA4LTI4IDEwOjA5OjE2ICswMDAwICBNZXJzYWQgSmVsYWNpYyA8bWVyc2FkQGF4aXMuY29tPgotCi0JICBnc3QvbXVsdGlwYXJ0LzogQ29udmVydCBhdWRpby94LWFkcGNtIHRvIGFuZCBmcm9tIHRoZSBhdWRpby9HNzI2LVggaW4gdGhlIG11eGVyIGFuZCBkZW11eGVyLiBGaXhlcyAjNTQ5NTUxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWVyc2FkIEplbGFjaWMgPG1lcnNhZCBhdCBheGlzIGRvdCBjb20+Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2dldF9taW1lKToKLQkgIENvbnZlcnQgYXVkaW8veC1hZHBjbSB0byBhbmQgZnJvbSB0aGUgYXVkaW8vRzcyNi1YIGluIHRoZSBtdXhlciBhbmQKLQkgIGRlbXV4ZXIuIEZpeGVzICM1NDk1NTEuCi0KLTIwMDgtMDgtMjcgMTY6MTI6MzkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy9vc3hhdWRpby86IEZpeCB0aGUgYnVpbGQgb24gbWFjb3N4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkgIChnc3Rfb3N4X2F1ZGlvX3Npbmtfc2VsZWN0X2RldmljZSk6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgKGdzdF9vc3hfYXVkaW9fc3JjX2NyZWF0ZV9yaW5nYnVmZmVyKSwKLQkgIChnc3Rfb3N4X2F1ZGlvX3NyY19zZWxlY3RfZGV2aWNlKToKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuYzogKGdzdF9vc3hfcmluZ19idWZmZXJfYWNxdWlyZSk6Ci0JICBGaXggdGhlIGJ1aWxkIG9uIG1hY29zeC4KLQotMjAwOC0wOC0yNyAxNTo0MjoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6IFNtYWxsIGRvY3MgZml4OiBpbiB0aGUgZXhhbXBsZSBwaXBlbGluZSwgd2UgbmVlZCB0byBwYXNzIGlyYWRpby1tb2RlPXRydWUgdG8gdGhlIHNvdXJjZSwgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6Ci0JICBTbWFsbCBkb2NzIGZpeDogaW4gdGhlIGV4YW1wbGUgcGlwZWxpbmUsIHdlIG5lZWQgdG8gcGFzcwotCSAgaXJhZGlvLW1vZGU9dHJ1ZSB0byB0aGUgc291cmNlLCBzbyB0aGUgc2VydmVyIGFjdHVhbGx5IHNlbmRzCi0JICBhbiBJQ1kgc3RyZWFtLgotCi0yMDA4LTA4LTI3IDAwOjA4OjIwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jOiBPb3BzLiBSZXZlcnQgbW9yZSBjb21wbGV0ZWx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jOgotCSAgT29wcy4gUmV2ZXJ0IG1vcmUgY29tcGxldGVseS4KLQotMjAwOC0wOC0yNiAyMzo1NzowNSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzogUmV2ZXJ0IGFjY2lkZW50YWwgZWxlbWVudCByZW5hbWUgZnJvbSB0ZXN0aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jOgotCSAgUmV2ZXJ0IGFjY2lkZW50YWwgZWxlbWVudCByZW5hbWUgZnJvbSB0ZXN0aW5nLgotCi0yMDA4LTA4LTI2IDIzOjUzOjQwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOiBQdWxsIGluIDAuMTAuMTAgZG9hcCBlbnRyeSBmcm9tIHJlbGVhc2UgYnJhbmNoCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSAgUHVsbCBpbiAwLjEwLjEwIGRvYXAgZW50cnkgZnJvbSByZWxlYXNlIGJyYW5jaAotCi0yMDA4LTA4LTI2IDIzOjA1OjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgdG8gcmVmbGVjdCAwLjEwLjEwIHJlbGVhc2UgZnJvbSBicmFuY2guCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgVXBkYXRlIHZlcnNpb24gbnVtYmVyIHRvIHJlZmxlY3QgMC4xMC4xMCByZWxlYXNlIGZyb20KLQkgIGJyYW5jaC4KLQotMjAwOC0wOC0yNiAyMToxMzowOCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBzeXMvb3N4YXVkaW8vOiBSZXdyaXRlIGNhcHMgc2V0dGluZyBhbmQgcmluZyBidWZmZXIgaW5pdGlhbGlzYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmg6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaDoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuYzoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeHJpbmdidWZmZXIuaDoKLQkgIFJld3JpdGUgY2FwcyBzZXR0aW5nIGFuZCByaW5nIGJ1ZmZlciBpbml0aWFsaXNhdGlvbi4KLQkgIFByZXZpb3VzbHkgd2UgbmV2ZXIgdG9sZCBDb3JlQXVkaW8gd2hhdCBmb3JtYXQgd2Ugd2VyZSBnb2luZyB0byBzZW5kIGl0LAotCSAgc28gaXQgb25seSB3b3JrZWQgZHVlIHRvIGx1Y2ssIGFuZCBub3QgYXQgYWxsIG9uIHNvbWUgaGFyZHdhcmUuCi0JICBOb3cgd2UgZXhwbGljaXRseSBhZHZlcnRpc2Ugd2hhdCBmb3JtYXRzIHRoZSBoYXJkd2FyZSBzdXBwb3J0cywgYW5kIHRoZW4KLQkgIGNvbmZpZ3VyZSB0aGUgc2VsZWN0ZWQgb25lIGNvcnJlY3RseS4KLQotMjAwOC0wOC0yNiAxMjoyNzoxMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBzeXMvdjRsMi86IEZpeCBtZW1vcnkgbGVha3MuIFNtYWxsIGNvZGUgY2xlYW51cHMgOiBObyBuZWVkIGZvciBlbXB0eSBfaW5pdCgpLiBObyBuZWVkIHRvIG1lbXNldCBpbnN0YW5jZSBzdHJ1Y3R1cmVzLiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIEZpeCBtZW1vcnkgbGVha3MuIFNtYWxsIGNvZGUgY2xlYW51cHMgOiBObyBuZWVkIGZvciBlbXB0eSBfaW5pdCgpLiBObwotCSAgbmVlZCB0byBtZW1zZXQgaW5zdGFuY2Ugc3RydWN0dXJlcy4gU29tZSBtb3JlIEZJWE1FJ3MuCi0KLTIwMDgtMDgtMjYgMDg6MTE6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvaWNsZXMvLmN2c2lnbm9yZTogSWdub3JlIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBtb3JlLgotCi0yMDA4LTA4LTI2IDA4OjAwOjU3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC86IElnbm9yZSBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS8uY3ZzaWdub3JlOgotCSAgKiBnc3QvZ29vbTJrMS8uY3ZzaWdub3JlOgotCSAgSWdub3JlIGZpbGVzLgotCi0yMDA4LTA4LTI2IDA3OjUxOjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOiBGaXggY29tcGlsZXIgd2FybmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkgIEZpeCBjb21waWxlciB3YXJuaW5nLgotCi0yMDA4LTA4LTI2IDA1OjQyOjE1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6IEZpeCBvYnZpb3VzIG1lbWxlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6IEZpeCBvYnZpb3VzIG1lbWxlYWsuCi0KLTIwMDgtMDgtMjUgMTQ6MTU6NDMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IEFkZCBSZWFsW0F1ZGlvfFZpZGVvXSBzdXBwb3J0IHRvIE1hdHJvc2thIGNvbnRhaW5lcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMpLCAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF92aWRlb19wYWRfc2V0Y2FwcyksCi0JICAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfc2V0Y2FwcyksIChnc3RfbWF0cm9za2FfbXV4X2ZpbmlzaCk6Ci0JICBBZGQgUmVhbFtBdWRpb3xWaWRlb10gc3VwcG9ydCB0byBNYXRyb3NrYSBjb250YWluZXJzLgotCSAgSXQgd29ya3MgZmluZSBmb3I6Ci0JICAqIGRlY29kaW5nIHJlYWwgYXVkaW8vdmlkZW8gc3RyZWFtcyBjb250YWluZWQgaW4gbWt2Ci0JICAqICd0cmFuc211eGluZycgcmVhbCAoLnJtKSBmaWxlcyBpbnRvIC5ta3YgZmlsZXMKLQkgIEl0IHdpbGwgbm90IHdvcmsgdGhvdWdoIGZvciBlbmNvZGluZyByZWFsW2F1ZGlvL3ZpZGVvXSBzdHJlYW1zIHRoYXQKLQkgIGRvbid0IGNvbnRhaW4gdGhlICdtZHByX2RhdGEnIGV4dHJhIGRhdGEgb24gdGhlIGNhcHMuCi0JICBUaGUgcmVhc29uIHdoeSB0aGlzIHdpbGwgbm90IHdvcmsgaXMgYmVjYXVzZSBJIG5ldmVyIGludGVuZGVkIHRvCi0JICBkdXBsaWNhdGUgdmlydHVhbGx5IGFsbCB0aGUgJ21kcHInIGJsb2NrIGNyZWF0aW9uIGludG8gbWt2bXV4LgotCSAgRml4ZXMgIzUzNjA2NwotCi0yMDA4LTA4LTI1IDA5OjQ4OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvbGF3LzogVGhlIGVuY29kZXIgY2FuJ3QgcmVhbGx5IHJlbmVnb3RpYXRlIGF0IHRoZSB0aW1lIHRoZXkgcGVyZm9ybSBhIHBhZC1hbGxvYyBzbyBtYWtlIHRoZSBzcmNwYWRzIHVzZSBmaXhlZCBjYXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzogKGdzdF9hbGF3X2VuY19pbml0KSwgKGdzdF9hbGF3X2VuY19jaGFpbik6Ci0JICAqIGdzdC9sYXcvbXVsYXctY29udmVyc2lvbi5jOgotCSAgKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOiAoZ3N0X211bGF3ZW5jX2luaXQpLAotCSAgKGdzdF9tdWxhd2VuY19jaGFpbik6Ci0JICBUaGUgZW5jb2RlciBjYW4ndCByZWFsbHkgcmVuZWdvdGlhdGUgYXQgdGhlIHRpbWUgdGhleSBwZXJmb3JtIGEKLQkgIHBhZC1hbGxvYyBzbyBtYWtlIHRoZSBzcmNwYWRzIHVzZSBmaXhlZCBjYXBzLgotCSAgQ2hlY2sgdGhlIGJ1ZmZlciBzaXplIGFmdGVyIGEgcGFkLWFsbG9jIGJlY2F1c2UgdGhlIHJldHVybmVkIHNpemUgbWlnaHQKLQkgIG5vdCBiZSByaWdodCB3aGVuIHRoZSBkb3duc3RyZWFtIGVsZW1lbnQgZG9lcyBub3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUKLQkgIG5ldyBidWZmZXIgKGNhcHNmaWx0ZXIpLiBGaXhlcyAjNTQ5MDczLgotCi0yMDA4LTA4LTIzIDE1OjQzOjQ5ICswMDAwICBGaWxpcHBvIEFyZ2lvbGFzIDxmaWxpcHBvLmFyZ2lvbGFzQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6IHY0bDJzcmMgZG9lc24ndCBoYXZlIGEgcHJvcGVydHkgbmFtZWQgIm5vcm0iIHNvIGRvbid0IHRyeSB0byBub3RpZnkgYWJvdXQgY2hhbmdlcyB0byB0aGF0IHByLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGaWxpcHBvIEFyZ2lvbGFzIDxmaWxpcHBvIGRvdCBhcmdpb2xhcyBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzogKGdzdF92NGwyX3R1bmVyX3NldF9ub3JtX2FuZF9ub3RpZnkpOgotCSAgdjRsMnNyYyBkb2Vzbid0IGhhdmUgYSBwcm9wZXJ0eSBuYW1lZCAibm9ybSIgc28gZG9uJ3QgdHJ5IHRvIG5vdGlmeQotCSAgYWJvdXQgY2hhbmdlcyB0byB0aGF0IHByb3BlcnR5LiBUaGUgIm5vcm0iIHByb3BlcnR5IGFuZCByZWxhdGVkCi0JICBjb2RlIGFyZSBjb21tZW50ZWQgb3V0IGN1cnJlbnRseS4gRml4ZXMgYnVnICM1NDkwOTAuCi0KLTIwMDgtMDgtMjMgMTU6MzM6NDkgKzAwMDAgIE1pa2UgUnVwcmVjaHQgPGNtYWlrdUBnbWFpbC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogUmVwcm9iZSBkZXZpY2VzIGFnYWluIGluc3RlYWQgb2YgdGFraW5nIGEgY2FjaGVkIGxpc3QgYXMgbmV3IGRldmljZXMgY291bGQndmUgYmVlbiBwbHVnZ2VkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWlrZSBSdXByZWNodCA8Y21haWt1IGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogKGdzdF92NGwyX2NsYXNzX3Byb2JlX2RldmljZXMpOgotCSAgUmVwcm9iZSBkZXZpY2VzIGFnYWluIGluc3RlYWQgb2YgdGFraW5nIGEgY2FjaGVkIGxpc3QgYXMgbmV3Ci0JICBkZXZpY2VzIGNvdWxkJ3ZlIGJlZW4gcGx1Z2dlZCBpbi4gRml4ZXMgYnVnICM1NDkwNjIuCi0KLTIwMDgtMDgtMjIgMTY6MDQ6MDIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUuYW06IERvbid0IGxpbmsgdGhlIGF1dG9kZXRlY3QgcGx1Z2luIHdpdGggR0NvbmYgYXMgaXQgZG9lc24ndCB1c2UgR0NvbmYuIEZpeGVzIGJ1ZyAjNTQ1NDYzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgbGluayB0aGUgYXV0b2RldGVjdCBwbHVnaW4gd2l0aCBHQ29uZiBhcyBpdCBkb2Vzbid0Ci0JICB1c2UgR0NvbmYuIEZpeGVzIGJ1ZyAjNTQ1NDYzLgotCi0yMDA4LTA4LTIyIDEyOjI0OjIzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogQ2hhbmdlIHNvbWUgR1NUX0VMRU1FTlRfRVJST1JzIHRvIEdTVF9FUlJPUl9PQkpFQ1QgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBpZ25vcmUgZXJyb3JzIGFuZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9pZCksCi0JICAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2xlbmd0aCksIChnc3RfZWJtbF9yZWFkX3VpbnQpLAotCSAgKGdzdF9lYm1sX3JlYWRfc2ludCksIChnc3RfZWJtbF9yZWFkX2Zsb2F0KSwKLQkgIChnc3RfZWJtbF9yZWFkX2hlYWRlcik6Ci0JICBDaGFuZ2Ugc29tZSBHU1RfRUxFTUVOVF9FUlJPUnMgdG8gR1NUX0VSUk9SX09CSkVDVCB0byBtYWtlIGl0Ci0JICBwb3NzaWJsZSB0byBpZ25vcmUgZXJyb3JzIGFuZCBub3QgcG9zdCBhbnkgRVJST1IgbWVzc2FnZXMgb24KLQkgIHRoZSBidXMuCi0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9jb250ZW50cyk6Ci0JICBJZ25vcmUgYW55IGVycm9ycyBhbmQgbm90IGp1c3QgRU9TIHdoZW4gcGFyc2luZyB0aGUgY29udGVudHMgb2YKLQkgIGEgU2Vla0hlYWQuIEVycm9ycyBoZXJlIGFyZSB1c3VhbGx5IGNhdXNlZCBieSB0cnVuY2F0ZWQgZmlsZXMKLQkgIGFuZCBwbGF5YmFjayBvZiB0aGUgZmlsZSB3b3JrcyBmaW5lLiBGaXhlcyBwbGF5YmFjayBvZiB0aGUKLQkgIGF1ZGlvX29ubHlfY2hhcHRlcl9zZWVrYnJva2VuLm1rYSBmaWxlIGZyb20gdGhlIE1QbGF5ZXIgc2FtcGxlcwotCSAgYXJjaGl2ZS4KLQotMjAwOC0wOC0yMiAxMToyOToyNiArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgZ3N0L211bHRpcGFydC86IENvbmZvcm0gdG8gUkZDMjA0Ni4gYXVkaW8vYmFzaWMgaXMgbXVsYXcgODAwMEh6IG1vbm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSAgQ29uZm9ybSB0byBSRkMyMDQ2LiBhdWRpby9iYXNpYyBpcyBtdWxhdyA4MDAwSHogbW9uby4KLQotMjAwOC0wOC0yMSAyMTo1NjoxOSArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMgKGdzdF9kaXJlY3RkcmF3X3NpbmtfYnVmZmVyX2FsbG9jLCBnc3RfZGlyZWN0ZHJhd19zaW5rX2J1ZmZlcnBvb2xfY2xlYXIpOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMgKGdzdF9kaXJlY3RkcmF3X3NpbmtfYnVmZmVyX2FsbG9jLAotCSAgZ3N0X2RpcmVjdGRyYXdfc2lua19idWZmZXJwb29sX2NsZWFyKToKLQkgIEZpeCB0d28gbW9yZSBidWZmZXIgcmVmIGxlYWtzLgotCi0yMDA4LTA4LTIxIDE1OjI4OjA5ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JICBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOiBGaXggYnVmZmVyIHJlZiBsZWFrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzICA8b2xlLmFuZHJlLnJhdm5hcyBhdCB0YW5kYmVyZyBjb20+Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19zaG93X2ZyYW1lKToKLQkgIEZpeCBidWZmZXIgcmVmIGxlYWsuCi0KLTIwMDgtMDgtMjEgMTM6Mjc6MTIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogUmV2ZXJ0IHRoZSBsYXN0IGNvbW1pdC4gd2F2ZW5jIHN0aWxsIHN1cHBvcnRzIHdpZHRoIT1kZXB0aCBmb3IgMzIgYml0IHdpZHRoLiBUaGFua3MgVGltLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX2NoYWluKToKLQkgIFJldmVydCB0aGUgbGFzdCBjb21taXQuIHdhdmVuYyBzdGlsbCBzdXBwb3J0cyB3aWR0aCE9ZGVwdGggZm9yIDMyIGJpdAotCSAgd2lkdGguIFRoYW5rcyBUaW0uCi0KLTIwMDgtMDgtMjEgMTM6MjI6MDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IElmIHRoZSBkdXJhdGlvbiBvZiBhIGJsb2NrIGlzIHVua25vd24gb25seSB1c2UgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIGZpcnN0IGxhY2UgYW5kIHVzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2spOgotCSAgSWYgdGhlIGR1cmF0aW9uIG9mIGEgYmxvY2sgaXMgdW5rbm93biBvbmx5IHVzZSB0aGUgdGltZXN0YW1wIGZvciB0aGUKLQkgIGZpcnN0IGxhY2UgYW5kIHVzZSBHU1RfQ0xPQ0tfVElNRV9OT05FIGFzIGR1cmF0aW9uIGZvciB0aGUgZm9sbG93aW5nCi0JICBsYWNlcy4gT3RoZXJ3aXNlIGV2ZXJ5IGxhY2UgaGFzIHRoZSBzYW1lIHRpbWVzdGFtcCB3aGljaCBsZWFkcyB0bwotCSAgdmFyaW91cyBwcm9ibGVtcy4gUmVhbGx5IGZpeGVzIGJ1ZyAjNTQ4ODMxLgotCi0yMDA4LTA4LTIxIDEyOjU2OjAxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IElmIHdlJ3JlIG5vdCBhbGxvd2luZyB3aWR0aCE9ZGVwdGggaW4gd2F2ZW5jIHdlIHNob3VsZCBhbHNvIGRpc2FibGUgdGhlIGNvZGUgdGhhdCB3YXMgYWRkZWQgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX2NoYWluKToKLQkgIElmIHdlJ3JlIG5vdCBhbGxvd2luZyB3aWR0aCE9ZGVwdGggaW4gd2F2ZW5jIHdlIHNob3VsZCBhbHNvIGRpc2FibGUKLQkgIHRoZSBjb2RlIHRoYXQgd2FzIGFkZGVkIHRvIHN1cHBvcnQgd2lkdGghPWRlcHRoLgotCi0yMDA4LTA4LTIxIDEyOjUyOjQ3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBEb24ndCBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgZHVyYXRpb24gb2YgYSBmcmFtZSBmcm9tIHRoZSBhdWRpbyBzYW1wbGluZyByYXRlLiBUaGlzIG9ubC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pOgotCSAgRG9uJ3QgY2FsY3VsYXRlIHRoZSBkZWZhdWx0IGR1cmF0aW9uIG9mIGEgZnJhbWUgZnJvbSB0aGUgYXVkaW8gc2FtcGxpbmcKLQkgIHJhdGUuIFRoaXMgb25seSB3b3JrcyBmb3IgcmF3IGF1ZGlvIGlmIGV2ZXJ5IGZyYW1lIGNvbnRhaW5zIGEgc2luZ2xlCi0JICBzYW1wbGUgYW5kIHJlc3VsdHMgaW4gYnJva2VuIGJ1ZmZlciBkdXJhdGlvbnMgZm9yIG90aGVyIGZvcm1hdHMKLQkgIGlmIG5vIHNwZWNpZmllZCBkZWZhdWx0IGR1cmF0aW9uIGlzIGdpdmVuIG9yIHRoZSBibG9ja3MgaGF2ZSBubwotCSAgZHVyYXRpb24uIEZpeGVzIGJ1ZyAjNTQ4ODMxLgotCi0yMDA4LTA4LTIxIDEyOjM0OjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBBbGxvdyB6ZXJvIHNpemVkIGJsb2NrcyBpbnN0ZWFkIG9mIHJldHVybmluZyBHU1RfRkxPV19PSy4gU3VjaCBibG9ja3MgYXJlIHVzZWQgZm9yIHRleC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKToKLQkgIEFsbG93IHplcm8gc2l6ZWQgYmxvY2tzIGluc3RlYWQgb2YgcmV0dXJuaW5nIEdTVF9GTE9XX09LLiBTdWNoIGJsb2NrcwotCSAgYXJlIHVzZWQgZm9yIHRleHQvcGxhaW4gc3VidGl0bGVzIGFzIGEgZ2FwLWZpbGxlciBpbiBzb21lIGZpbGVzLgotCi0yMDA4LTA4LTIxIDEyOjEyOjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IEFkZCBTOTEwIGFuZCBQV0MgZm9ybWF0cyB3aXRoIGEgbG93IHByaW9yaXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX3Y0bDJmb3VyY2NfdG9fc3RydWN0dXJlKSwKLQkgIChnc3RfdjRsMl9nZXRfY2Fwc19pbmZvKToKLQkgIEFkZCBTOTEwIGFuZCBQV0MgZm9ybWF0cyB3aXRoIGEgbG93IHByaW9yaXR5LgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19mb3JtYXRfZ2V0X3JhbmspLAotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdCk6Ci0JICBBZGQgbW9yZSBkZWJ1Z2dpbmcuCi0KLTIwMDgtMDgtMjAgMjE6NTQ6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogRml4IGNvbXBpbGF0aW9uIGFnYWluc3Qgb2xkZXIgbGliZmxhYyB2ZXJzaW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBGaXggY29tcGlsYXRpb24gYWdhaW5zdCBvbGRlciBsaWJmbGFjIHZlcnNpb25zLgotCi0yMDA4LTA4LTIwIDE3OjQ2OjQ4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9wdWxzZS86IFVzZSBHU1RfQk9JTEVSUExBVEUgZXZlcnl3aGVyZSBhbmQgZml4IGNvZGluZyBzdHlsZSBhdCBzb21lIHBsYWNlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcHVsc2UvcHVsc2VtaXhlci5jOiAoZ3N0X3B1bHNlbWl4ZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfc2V0X3Byb3BlcnR5KSwgKGdzdF9wdWxzZW1peGVyX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5jOiAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9zdWJzY3JpYmVfY2IpLAotCSAgKGdzdF9wdWxzZW1peGVyX2N0cmxfb3BlbiksIChnc3RfcHVsc2VtaXhlcl9jdHJsX3RpbWVvdXRfZXZlbnQpLAotCSAgKGdzdF9wdWxzZW1peGVyX2N0cmxfc2V0X3ZvbHVtZSk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVydHJhY2suYzogKGdzdF9wdWxzZW1peGVyX3RyYWNrX25ldyk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmM6IChnc3RfcHVsc2Vwcm9iZV9vcGVuKToKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5jOiAoZ3N0X3B1bHNlc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfcHVsc2VzaW5rX2luaXQpLCAoZ3N0X3B1bHNlc2lua19vcGVuKSwKLQkgIChnc3RfcHVsc2VzaW5rX3ByZXBhcmUpLCAoZ3N0X3B1bHNlc2lua193cml0ZSksCi0JICAoZ3N0X3B1bHNlc2lua19kZWxheSksIChnc3RfcHVsc2VzaW5rX3Jlc2V0KToKLQkgICogZXh0L3B1bHNlL3B1bHNlc3JjLmM6IChnc3RfcHVsc2VzcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3B1bHNlc3JjX2luaXQpOgotCSAgVXNlIEdTVF9CT0lMRVJQTEFURSBldmVyeXdoZXJlIGFuZCBmaXggY29kaW5nIHN0eWxlIGF0IHNvbWUgcGxhY2VzLgotCSAgRml4IGEgbG9ja2luZyBpc3N1ZSBpbiBwdWxzZXNpbmsncyBwcmVwYXJlIGZ1bmN0aW9uLgotCSAgKiBleHQvcHVsc2UvcHVsc2V1dGlsLmM6IChnc3RfcHVsc2VfY2hhbm5lbF9tYXBfdG9fZ3N0KToKLQkgIENoZWNrIGlmIHRoZSBjcmVhdGVkIGNoYW5uZWwgbGF5b3V0IGlzIHZhbGlkIGZvciBHU3RyZWFtZXIuCi0KLTIwMDgtMDgtMjAgMTc6NDI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3Bnb29nbGUuYzogVGhpbmdzIHRoYXQgY2FuIGhhcHBlbiB3aGVuIHlvdXIgYnJhaW4gaXMgaW4gZ29vZ2xlIG1vZGUgdHJ5aW5nIHRvIGRlYWwgd2l0aCB0aGVpciBnb29nbGUgci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3Bnb29nbGUuYzoKLQkgIFRoaW5ncyB0aGF0IGNhbiBoYXBwZW4gd2hlbiB5b3VyIGJyYWluIGlzIGluIGdvb2dsZSBtb2RlIHRyeWluZyB0bwotCSAgZGVhbCB3aXRoIHRoZWlyIGdvb2dsZSBydHNwIHNlcnZlciBleHRlbnNpb25zIGFuZCB0cnlpbmcgdG8gdHlwZSB5b3VyCi0JICBnb29nbGUgbWFpbCBhY2NvdW50LgotCi0yMDA4LTA4LTIwIDE3OjMwOjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC86IEFkZCBnb29nbGUgUlRTUCBleHRlbnNpb24sIGl0IGNhbiBvbmx5IGhhbmRsZSB1ZHAgYW5kIHJlc3BvbmRzIHdpdGggdW5zdXBwb3J0ZWQgaWYgd2UgZG8gYW55dGhpbmcgZWxzZS4gRmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwZ29vZ2xlLmM6IChnc3RfcnRzcF9nb29nbGVfYmVmb3JlX3NlbmQpLAotCSAgKGdzdF9ydHNwX2dvb2dsZV9hZnRlcl9zZW5kKSwgKGdzdF9ydHNwX2dvb2dsZV9nZXRfdHJhbnNwb3J0cyksCi0JICAoX2RvX2luaXQpLCAoZ3N0X3J0c3BfZ29vZ2xlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0c3BfZ29vZ2xlX2NsYXNzX2luaXQpLCAoZ3N0X3J0c3BfZ29vZ2xlX2luaXQpLAotCSAgKGdzdF9ydHNwX2dvb2dsZV9maW5hbGl6ZSksIChnc3RfcnRzcF9nb29nbGVfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRzcF9nb29nbGVfZXh0ZW5zaW9uX2luaXQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwZ29vZ2xlLmg6Ci0JICBBZGQgZ29vZ2xlIFJUU1AgZXh0ZW5zaW9uLCBpdCBjYW4gb25seSBoYW5kbGUgdWRwIGFuZCByZXNwb25kcyB3aXRoCi0JICB1bnN1cHBvcnRlZCBpZiB3ZSBkbyBhbnl0aGluZyBlbHNlLiBGaXhlcyAjNTQ2NDY1LgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jb25uZWN0aW9uX3NlbmQpLAotCSAgKGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fcmVjZWl2ZSksIChnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kKSwKLQkgIChnc3RfcnRzcHNyY19jcmVhdGVfdHJhbnNwb3J0c19zdHJpbmcpLAotCSAgKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpLCAoZ3N0X3J0c3BzcmNfb3BlbiksCi0JICAoZ3N0X3J0c3BzcmNfY2xvc2UpLCAoZ3N0X3J0c3BzcmNfcGF1c2UpOgotCSAgTWFrZSB0cmFuc3BvcnQgc2V0dXAgY29kZSBhIGJpdCBiZXR0ZXIgdXNpbmcgR1N0cmluZy4KLQkgIEFkZCBzb21lIG1vcmUgZGVidWcuCi0JICBDaGVjayBmb3IgY2xvc2VkIGNvbm5lY3Rpb25zIGJlZm9yZSBkb2luZyBhbnl0aGluZyBvbiB0aGVtLgotCi0yMDA4LTA4LTIwIDE3OjE3OjU1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9wdWxzZS86IElmIGRvd25zdHJlYW0gcHJvdmlkZXMgbm8gY2hhbm5lbCBsYXlvdXQgYW5kID4yIGNoYW5uZWxzIHNob3VsZCBiZSB1c2VkIHVzZSB0aGUgZGVmYXVsdCBsYXlvdXQgdGhhdCBwdWxzZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOiAoZ3N0X3B1bHNlc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9wdWxzZXNyY19jcmVhdGVfc3RyZWFtKSwgKGdzdF9wdWxzZXNyY19uZWdvdGlhdGUpLAotCSAgKGdzdF9wdWxzZXNyY19wcmVwYXJlKToKLQkgICogZXh0L3B1bHNlL3B1bHNldXRpbC5jOiAoZ3N0X3B1bHNlX2dzdF90b19jaGFubmVsX21hcCksCi0JICAoZ3N0X3B1bHNlX2NoYW5uZWxfbWFwX3RvX2dzdCk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkgIElmIGRvd25zdHJlYW0gcHJvdmlkZXMgbm8gY2hhbm5lbCBsYXlvdXQgYW5kID4yIGNoYW5uZWxzIHNob3VsZCBiZQotCSAgdXNlZCB1c2UgdGhlIGRlZmF1bHQgbGF5b3V0IHRoYXQgcHVsc2VhdWRpbyBjaG9vc2VzIGFuZCBhbHNvCi0JICBhZGQgdGhpcyBsYXlvdXQgdG8gdGhlIGNhcHMuIEZpeGVzIGJ1ZyAjNTQ3MjU4LgotCi0yMDA4LTA4LTIwIDExOjUxOjM4ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L3VkcC86IEF2b2lkIGxlYWtpbmcgaW50ZXJuYWxseSBhbGxvY2F0ZWQgZmlsZSBkZXNjcmlwdG9ycyB3aGVuIHNldHRpbmcgY3VzdG9tIGZpbGUgZGVzY3JpcHRvcnMuIEZpeGVzICM1NDMxMDEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KLQkgICogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6IChnc3RfZHludWRwc2lua19pbml0KSwKLQkgIChnc3RfZHludWRwc2lua19maW5hbGl6ZSksIChnc3RfZHludWRwc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9keW51ZHBzaW5rX2luaXRfc2VuZCksIChnc3RfZHludWRwc2lua19jbG9zZSk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2luaXQpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfZmluYWxpemUpLCAoZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19maW5hbGl6ZSksCi0JICAoZ3N0X3VkcHNyY19zZXRfcHJvcGVydHkpOgotCSAgQXZvaWQgbGVha2luZyBpbnRlcm5hbGx5IGFsbG9jYXRlZCBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gc2V0dGluZwotCSAgY3VzdG9tIGZpbGUgZGVzY3JpcHRvcnMuIEZpeGVzICM1NDMxMDEuCi0KLTIwMDgtMDgtMjAgMTE6NDg6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRG9uJ3QgdHJ5IHRvIGNvbmZpZ3VyZSBSVENQIGJhY2sgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBzZXJ2ZXIgZGlkIG5vdCBnaXZlIHVzIGEgdmFsaWQgcG9ydCBudS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwX3NpbmspOgotCSAgRG9uJ3QgdHJ5IHRvIGNvbmZpZ3VyZSBSVENQIGJhY2sgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBzZXJ2ZXIgZGlkIG5vdAotCSAgZ2l2ZSB1cyBhIHZhbGlkIHBvcnQgbnVtYmVyLgotCi0yMDA4LTA4LTIwIDEwOjU5OjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogVXNlIG5ldyBiYXNldHJhbnNmb3JtIG1ldGhvZCB0byByZW5lZ290aWF0ZS4gRml4ZXMgIzU0NDk1Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfc2V0X3Byb3BlcnR5KToKLQkgIFVzZSBuZXcgYmFzZXRyYW5zZm9ybSBtZXRob2QgdG8gcmVuZWdvdGlhdGUuIEZpeGVzICM1NDQ5NTYuCi0JICAqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pY2xlcy92aWRlb2JveC10ZXN0LmM6IChtYWtlX3BpcGVsaW5lKSwgKG1haW4pOgotCSAgQWRkIHZpZGVvYm94IHJlbmVnb3RpYXRpb24gZXhhbXBsZS4KLQotMjAwOC0wOC0xOSAyMTowMzoyMiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IFJlbW92ZSBkZXB0aCByYW5nZXMgYW5kIHJlcGxhY2Ugd2l0aCBzYW5lIHZhbHVlcy4gIEZpeGVzICM1NDg1MzAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogUmVtb3ZlIGRlcHRoIHJhbmdlcyBhbmQgcmVwbGFjZQotCSAgd2l0aCBzYW5lIHZhbHVlcy4gIEZpeGVzICM1NDg1MzAuCi0KLTIwMDgtMDgtMTggMTU6MDU6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3B1bHNlLzogVGhlIGJ5dGVzX3Blcl9zYW1wbGUgYW5kIHNpbGVuY2Vfc2FtcGxlIGZpZWxkcyBvZiB0aGUgR3N0UmluZ0J1ZmZlclNwZWMgYXJlIGFscmVhZHkgZmlsbGVkIHdpdGggdGhlIGNvcnJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5jOiAoZ3N0X3B1bHNlc2lua19wcmVwYXJlKToKLQkgICogZXh0L3B1bHNlL3B1bHNlc3JjLmM6IChnc3RfcHVsc2VzcmNfcHJlcGFyZSk6Ci0JICBUaGUgYnl0ZXNfcGVyX3NhbXBsZSBhbmQgc2lsZW5jZV9zYW1wbGUgZmllbGRzIG9mIHRoZSBHc3RSaW5nQnVmZmVyU3BlYwotCSAgYXJlIGFscmVhZHkgZmlsbGVkIHdpdGggdGhlIGNvcnJlY3QgdmFsdWVzIGJ5Ci0JICBnc3RfcmluZ19idWZmZXJfcGFyc2VfY2FwcygpIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBzZXQgdGhlbSBhZ2FpbgotCSAgd2l0aCB3cm9uZyB2YWx1ZXMuCi0KLTIwMDgtMDgtMTYgMTQ6NTQ6NTYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogU29tZSBBVkkgMi4wIChPRE1MKSBmaWxlcyBkb24ndCByZXNwZWN0IHRoZSAnc3BlY2lmaWNhdGlvbnMnIGNvbXBsZXRlbHkgYW5kIGluc3RlYWQgb2YgdXNpbmcgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1bGwpLAotCSAgKGdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1c2gpOgotCSAgU29tZSBBVkkgMi4wIChPRE1MKSBmaWxlcyBkb24ndCByZXNwZWN0IHRoZSAnc3BlY2lmaWNhdGlvbnMnIGNvbXBsZXRlbHkKLQkgIGFuZCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSAnaXgjIycgbm9tZW5jbGF0dXJlLCB1c2UgJyMjaXgnLgotCSAgVGhleSdyZSBzdGlsbCB2YWxpZCB0aG91Z2gsIHRoaXMgZml4ZXMgdGhlIGR1cmF0aW9uIGFuZCBpbmRleGVzIGZvcgotCSAgdmlydHVhbGx5IGFsbCB0aGUgT0RNTCBmaWxlcyBJIGhhdmUuCi0KLTIwMDgtMDgtMTUgMTc6MjY6MTggKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9ydHAvOiBVcGRhdGUgdGhlIHZvcmJpcyBSVFAgcGF5L2RlcGF5IHRvIFJGQyA1MjE1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzogKGdzdF9ydHBfdm9yYmlzX2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOiAoZ3N0X3J0cF92b3JiaXNfcGF5X2ZpbmlzaF9oZWFkZXJzKToKLQkgIFVwZGF0ZSB0aGUgdm9yYmlzIFJUUCBwYXkvZGVwYXkgdG8gUkZDIDUyMTUuCi0JICBGaXhlcyAjNTQ3ODQyLgotCi0yMDA4LTA4LTE0IDIyOjA3OjAyICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgJ2hkdjYnIGFzIGEgSERWIGZvcm1hdCBmb3IgMTA4MGkvNjAgd2l0aCAzOjIgcHVsbGRvd24sIGkuZS4sIDI0cC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCAnaGR2NicgYXMgYSBIRFYgZm9ybWF0IGZvciAxMDgwaS82MAotCSAgd2l0aCAzOjIgcHVsbGRvd24sIGkuZS4sIDI0cC4KLQotMjAwOC0wOC0xNCAxMjo0NzowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzogRml4IGNvbXBpbGF0aW9uIHNvbWUgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGNvbXBpbGF0aW9uIHNvbWUgbW9yZS4KLQotMjAwOC0wOC0xNCAxMTo0NDo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBSZXF1aXJlIC1iYXNlIENWUyBmb3Igd2F2cGFyc2UgYWNpZCBjaHVuayBwYXJzaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzo6Ci0JICBSZXF1aXJlIC1iYXNlIENWUyBmb3Igd2F2cGFyc2UgYWNpZCBjaHVuayBwYXJzaW5nLgotCi0yMDA4LTA4LTEzIDEzOjU3OjAxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9wdWxzZS9wdWxzZXNpbmsuKjogQWRkICJkZXZpY2UtbmFtZSIgcHJvcGVydHkgdG8gcHVsc2VzaW5rIHRvbyBhbmQgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYW5kIG5vdCB3b3JraW5nIHN1cHBvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNpbmsuYzogKGdzdF9wdWxzZXNpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3B1bHNlc2lua19pbml0KSwgKGdzdF9wdWxzZXNpbmtfZmluYWxpemUpLAotCSAgKGdzdF9wdWxzZXNpbmtfc2V0X3ZvbHVtZSksIChnc3RfcHVsc2VzaW5rX2dldF92b2x1bWUpLAotCSAgKGdzdF9wdWxzZXNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9wdWxzZXNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcHVsc2VzaW5rX3ByZXBhcmUpLCAoZ3N0X3B1bHNlc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICBBZGQgImRldmljZS1uYW1lIiBwcm9wZXJ0eSB0byBwdWxzZXNpbmsgdG9vIGFuZCBjdXJyZW50bHkgY29tbWVudGVkCi0JICBvdXQgYW5kIG5vdCB3b3JraW5nIHN1cHBvcnQgZm9yIGEgInZvbHVtZSIgcHJvcGVydHkuCi0KLTIwMDgtMDgtMTMgMTM6MTc6MTUgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIG1vcmUgY2RpbyBzdHVmZiAobW92ZWQgdG8gdWdseSkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBSZW1vdmUgbW9yZSBjZGlvIHN0dWZmIChtb3ZlZCB0byB1Z2x5KQotCi0yMDA4LTA4LTEzIDEyOjM3OjI2ICswMDAwICBMYXN6bG8gUGFuZHkgPGxhc3psb2syQGdtYWlsLmNvbT4KLQotCSAgZXh0L3B1bHNlL3B1bHNlc3JjLmM6IEFkZCAiZGV2aWNlLW5hbWUiIHByb3BlcnR5LCB3aGljaCBwcm92aWRlcyBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyBmb3IgdGhlIGF1ZGlvIGRldmljZSwgdG8gbWFrLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBMYXN6bG8gUGFuZHkgPGxhc3psb2syIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOiAoZ3N0X3B1bHNlc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9wdWxzZXNyY19nZXRfcHJvcGVydHkpOgotCSAgQWRkICJkZXZpY2UtbmFtZSIgcHJvcGVydHksIHdoaWNoIHByb3ZpZGVzIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nCi0JICBmb3IgdGhlIGF1ZGlvIGRldmljZSwgdG8gbWFrZSBpdCBtb3JlIGNvbnNpc3RlbiB3aXRoIG90aGVyIGF1ZGlvCi0JICBzb3VyY2VzLiBGaXhlcyBidWcgIzU0NzUxOS4KLQotMjAwOC0wOC0xMyAxMjozNDoxMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvcHVsc2UvOiBJbXByb3ZlIGRlYnVnZ2luZyBhIGJpdCBieSBpbmNsdWRpbmcgdGhlIHBhcmVudCBvYmplY3QgaW4gcHVsc2VtaXhlcmN0cmwgYW5kIHB1bHNlcHJvYmUgb2JqZWN0cyBhbmQgdXNpbmcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcHVsc2UvcHVsc2VtaXhlci5jOiAoZ3N0X3B1bHNlbWl4ZXJfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6IChnc3RfcHVsc2VtaXhlcl9jdHJsX3N1YnNjcmliZV9jYiksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9vcGVuKSwgKGdzdF9wdWxzZW1peGVyX2N0cmxfbmV3KSwKLQkgIChnc3RfcHVsc2VtaXhlcl9jdHJsX2ZyZWUpLCAoZ3N0X3B1bHNlbWl4ZXJfY3RybF90aW1lb3V0X2V2ZW50KToKLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmg6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmM6IChnc3RfcHVsc2Vwcm9iZV9vcGVuKSwKLQkgIChnc3RfcHVsc2Vwcm9iZV9lbnVtZXJhdGUpLCAoZ3N0X3B1bHNlcHJvYmVfbmV3KSwKLQkgIChnc3RfcHVsc2Vwcm9iZV9mcmVlKSwgKGdzdF9wdWxzZXByb2JlX25lZWRzX3Byb2JlKSwKLQkgIChnc3RfcHVsc2Vwcm9iZV9wcm9iZV9wcm9wZXJ0eSksIChnc3RfcHVsc2Vwcm9iZV9nZXRfdmFsdWVzKToKLQkgICogZXh0L3B1bHNlL3B1bHNlcHJvYmUuaDoKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5jOiAoZ3N0X3B1bHNlc2lua19pbml0KToKLQkgICogZXh0L3B1bHNlL3B1bHNlc3JjLmM6IChnc3RfcHVsc2VzcmNfaW5pdCksIChnc3RfcHVsc2VzcmNfZGVsYXkpLAotCSAgKGdzdF9wdWxzZXNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQgYnkgaW5jbHVkaW5nIHRoZSBwYXJlbnQgb2JqZWN0IGluIHB1bHNlbWl4ZXJjdHJsCi0JICBhbmQgcHVsc2Vwcm9iZSBvYmplY3RzIGFuZCB1c2luZyBHU1RfV0FSTklOR19PQkpFQ1QgaW5zdGVhZCBvZgotCSAgR1NUX1dBUk5JTkcuCi0JICBVc2UgdGhlIHBhcmVudCBHT2JqZWN0IHN1YmNsYXNzIGluc3RlYWQgb2YgYSByYW5kb20gc3RydWN0IGFzIEdPYmplY3QKLQkgIHBhcmFtZXRlciBmb3IgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lELiBUaGlzIGZpeGVzIGEgY3Jhc2gKLQkgIHdoZW4gcHJvYmluZyBmb3IgYW5vdGhlciBwcm9wZXJ0eSB0aGFuICJkZXZpY2UiLgotCi0yMDA4LTA4LTEzIDEyOjIxOjIyICswMDAwICBMYXN6bG8gUGFuZHkgPGxhc3psb2syQGdtYWlsLmNvbT4KLQotCSAgZXh0L3B1bHNlL3B1bHNlbWl4ZXIuYzogRml4IHByb3BlcnR5IHByb2JpbmcgYWZ0ZXIgdGhlIGRldmljZSBwcm9wZXJ0eSBpcyBzZXQgYnkgY2FsbGluZyBzZXRfc2VydmVyIHdoZW4gdGhlIHNlcnZlciBwLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBMYXN6bG8gUGFuZHkgPGxhc3psb2syIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmM6IChnc3RfcHVsc2VtaXhlcl9zZXRfcHJvcGVydHkpOgotCSAgRml4IHByb3BlcnR5IHByb2JpbmcgYWZ0ZXIgdGhlIGRldmljZSBwcm9wZXJ0eSBpcyBzZXQgYnkgY2FsbGluZwotCSAgc2V0X3NlcnZlciB3aGVuIHRoZSBzZXJ2ZXIgcHJvcGVydHkgY2hhbmdlcy4gRml4ZXMgYnVnICM1NDc1MTguCi0KLTIwMDgtMDgtMTMgMTI6MTE6MzQgKzAwMDAgIExhc3psbyBQYW5keSA8bGFzemxvazJAZ21haWwuY29tPgotCi0JICBleHQvcHVsc2UvcHVsc2VtaXhlci5jOiBGaXggcHJvcGVydHkgcHJvYmluZyBhZnRlciB0aGUgZGV2aWNlIHByb3BlcnR5IGlzIHNldCBieSBjYWxsaW5nIHNldF9zZXJ2ZXIgd2hlbiB0aGUgc2VydmVyIHAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IExhc3psbyBQYW5keSA8bGFzemxvazIgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXIuYzogKGdzdF9wdWxzZW1peGVyX3NldF9wcm9wZXJ0eSk6Ci0JICBGaXggcHJvcGVydHkgcHJvYmluZyBhZnRlciB0aGUgZGV2aWNlIHByb3BlcnR5IGlzIHNldCBieSBjYWxsaW5nCi0JICBzZXRfc2VydmVyIHdoZW4gdGhlIHNlcnZlciBwcm9wZXJ0eSBjaGFuZ2VzLiBGaXhlcyBidWcgIzU0NzUxOC4KLQotMjAwOC0wOC0xMyAxMjowMTowMSArMDAwMCAgTGFzemxvIFBhbmR5IDxsYXN6bG9rMkBnbWFpbC5jb20+Ci0KLQkgIGV4dC9wdWxzZS86IEltcGxlbWVudCBHc3RQcm9wZXJ0eVByb2JlIGludGVyZmFjZSBvbiBwdWxzZXNpbmsgZm9yIGRldGVjdGluZyBzaW5rIGRldmljZXMgYW5kIG9uIHB1bHNlc3JjIGZvciBkZXRlY3Rpbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTGFzemxvIFBhbmR5IDxsYXN6bG9rMiBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6IChnc3RfcHVsc2VzaW5rX2ludGVyZmFjZV9zdXBwb3J0ZWQpLAotCSAgKGdzdF9wdWxzZXNpbmtfaW1wbGVtZW50c19pbnRlcmZhY2VfaW5pdCksCi0JICAoZ3N0X3B1bHNlc2lua19pbml0X2ludGVyZmFjZXMpLCAoZ3N0X3B1bHNlc2lua19pbml0KSwKLQkgIChnc3RfcHVsc2VzaW5rX2ZpbmFsaXplKSwgKGdzdF9wdWxzZXNpbmtfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcHVsc2VzaW5rX2dldF90eXBlKToKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5oOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzcmMuYzogKGdzdF9wdWxzZXNyY19pbnRlcmZhY2Vfc3VwcG9ydGVkKSwKLQkgIChnc3RfcHVsc2VzcmNfaW5pdF9pbnRlcmZhY2VzKSwgKGdzdF9wdWxzZXNyY19pbml0KSwKLQkgIChnc3RfcHVsc2VzcmNfZmluYWxpemUpLCAoZ3N0X3B1bHNlc3JjX3NldF9wcm9wZXJ0eSk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNyYy5oOgotCSAgSW1wbGVtZW50IEdzdFByb3BlcnR5UHJvYmUgaW50ZXJmYWNlIG9uIHB1bHNlc2luayBmb3IgZGV0ZWN0aW5nCi0JICBzaW5rIGRldmljZXMgYW5kIG9uIHB1bHNlc3JjIGZvciBkZXRlY3Rpbmcgc291cmNlIGRldmljZXMuCi0JICBGaXhlcyBidWdzICM1NDcyMjcgYW5kICM1NDcyMTcuCi0KLTIwMDgtMDgtMTMgMDk6MTc6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IERvbid0IHRlcm1pbmF0ZSBvbiBmYWJzKGluKT4xLjAuIEluaXQgZG91YmxlcyBhcyBkb3VibGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgRG9uJ3QgdGVybWluYXRlIG9uIGZhYnMoaW4pPjEuMC4gSW5pdCBkb3VibGVzIGFzIGRvdWJsZXMuCi0KLTIwMDgtMDgtMTMgMDg6MzM6NTcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogUHJvcGVybHkgc2V0IHRoZSBtYXhpbXVtIGxhdGVuY3kgdmFsdWUsIGluIHRoZSBzYW1lIHdheSBpdCBpcyBkb25lIGluIHY0bHNyYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19xdWVyeSk6Ci0JICBQcm9wZXJseSBzZXQgdGhlIG1heGltdW0gbGF0ZW5jeSB2YWx1ZSwgaW4gdGhlIHNhbWUgd2F5IGl0IGlzIGRvbmUgaW4KLQkgIHY0bHNyYy4KLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgU2ltcGxpZnkgZnJhY3Rpb24gZXF1YWxpdHkgY2hlY2ssIG5vIG5lZWQgdG8gdXNlIEdWYWx1ZXMgZm9yIHRoaXMuCi0KLTIwMDgtMDgtMTIgMTI6MDQ6MjQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogQWRkIHdhcm5pbmcgbWVzc2FnZXMgc3RhdGluZyBleGFjdGx5IHdoeSB0aGUgbGF0ZW5jeSBxdWVyeSBmYWlsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfcXVlcnkpOgotCSAgQWRkIHdhcm5pbmcgbWVzc2FnZXMgc3RhdGluZyBleGFjdGx5IHdoeSB0aGUgbGF0ZW5jeSBxdWVyeSBmYWlsZWQuCi0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKToKLQkgIEluIHNvbWUgY2FzZXMsIHRoZSBuZWdvdGlhdGVkIGZyYW1lcmF0ZSBtaWdodCBiZSB0aGUgZGVmYXVsdCBvbmUgd2hpY2gKLQkgIGlzIGFscmVhZHkgc2V0IGludGVybmFsbHkuIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIG1hcmsgaXQgZG93biBpbiBmcHNfbgotCSAgYW5kIGZwc19kIHNvIHRoYXQgdGhlIGxhdGVuY3kgcXVlcnkgY2FuIGhhcHBlbiBwcm9wZXJseS4KLQotMjAwOC0wOC0xMiAxMToyODo0NyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOiBXaG9vcHMsIGZvcmdvdCBvbmUgZG9jIGZpbGUgZm9yIHBlb3BsZSB3aG8gY2FuJ3QvZG9uJ3QgYnVpbGQgdGhlIHJhdzEzOTQgcGx1Z2luLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkgIFdob29wcywgZm9yZ290IG9uZSBkb2MgZmlsZSBmb3IgcGVvcGxlIHdobyBjYW4ndC9kb24ndCBidWlsZCB0aGUKLQkgIHJhdzEzOTQgcGx1Z2luLgotCi0yMDA4LTA4LTEyIDA5OjIyOjI5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUHVsbCBjaGFuZ2VzIGZyb20gMC4xMC45LjIgcHJlLXJlbGVhc2UgYnJhbmNoIG1vdmluZyB0aGUgbGliY2RpbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NkaW8vTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW8uYzoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpby5oOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5oOgotCSAgUHVsbCBjaGFuZ2VzIGZyb20gMC4xMC45LjIgcHJlLXJlbGVhc2UgYnJhbmNoIG1vdmluZyB0aGUgbGliY2RpbwotCSAgQ0REQSBzb3VyY2UgdG8gLXVnbHkuCi0JICAqIHBvL0xJTkdVQVM6Ci0JICAqIHBvL1BPVEZJTEVTLmluOgotCSAgKiBwby9pZC5wbzoKLQkgIFB1bGwgaW4gbmV3IHRyYW5zbGF0aW9uIGZyb20gMC4xMC45LjIgcmVsZWFzZSBicmFuY2guCi0KLTIwMDgtMDgtMTEgMTU6MDU6MTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEludGVncmF0ZSBkb2N1bWVudGF0aW9uIGZvciBuZXcgaGR2MTM5NHNyYyBlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICBJbnRlZ3JhdGUgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IGhkdjEzOTRzcmMgZWxlbWVudC4KLQotMjAwOC0wOC0xMSAxNDozNjoxMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZXh0L3JhdzEzOTQvOiBtcGVnMi10cyAoSERWKSB2YXJpYW50IG9mIGZpcmV3aXJlIGNhcHR1cmUgZWxlbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcmF3MTM5NC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3JhdzEzOTQvZ3N0MTM5NC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmM6IChfZG9faW5pdCksCi0JICAoZ3N0X2hkdjEzOTRzcmNfYmFzZV9pbml0KSwgKGdzdF9oZHYxMzk0c3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9oZHYxMzk0c3JjX2luaXQpLCAoZ3N0X2hkdjEzOTRzcmNfZGlzcG9zZSksCi0JICAoZ3N0X2hkdjEzOTRzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9oZHYxMzk0c3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2hkdjEzOTRzcmNfZnJvbV9yYXcxMzk0aGFuZGxlKSwKLQkgIChnc3RfaGR2MTM5NHNyY19pZWM2MTg4M19yZWNlaXZlKSwgKGdzdF9oZHYxMzk0c3JjX2J1c19yZXNldCksCi0JICAoZ3N0X2hkdjEzOTRzcmNfY3JlYXRlKSwgKGdzdF9oZHYxMzk0c3JjX2Rpc2NvdmVyX2F2Y19ub2RlKSwKLQkgIChnc3RfaGR2MTM5NHNyY19zdGFydCksIChnc3RfaGR2MTM5NHNyY19zdG9wKSwKLQkgIChnc3RfaGR2MTM5NHNyY191bmxvY2spLCAoZ3N0X2hkdjEzOTRzcmNfdXBkYXRlX2RldmljZV9uYW1lKSwKLQkgIChnc3RfaGR2MTM5NHNyY191cmlfZ2V0X3R5cGUpLCAoZ3N0X2hkdjEzOTRzcmNfdXJpX2dldF9wcm90b2NvbHMpLAotCSAgKGdzdF9oZHYxMzk0c3JjX3VyaV9nZXRfdXJpKSwgKGdzdF9oZHYxMzk0c3JjX3VyaV9zZXRfdXJpKSwKLQkgIChnc3RfaGR2MTM5NHNyY191cmlfaGFuZGxlcl9pbml0KToKLQkgICogZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5oOgotCSAgbXBlZzItdHMgKEhEVikgdmFyaWFudCBvZiBmaXJld2lyZSBjYXB0dXJlIGVsZW1lbnQuCi0JICBGaXhlcyAjMzUwODMwCi0KLTIwMDgtMDgtMTEgMTA6NTM6MDYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiBGaXggY29tcGlsYXRpb24gKGFsc28ga25vd24gYXMgdGhlIGNsYXNzaWMgJ2ZpeCBjb2RlIHRoYXQgc29tZW9uZSBjb21taXR0ZWQgd2l0aG91dCBjb21waWxpbmcgaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX21lc3NhZ2VfbmV3KToKLQkgIEZpeCBjb21waWxhdGlvbiAoYWxzbyBrbm93biBhcyB0aGUgY2xhc3NpYyAnZml4IGNvZGUgdGhhdCBzb21lb25lCi0JICBjb21taXR0ZWQgd2l0aG91dCBjb21waWxpbmcgaXQgZmlyc3QnKS4KLQotMjAwOC0wOC0xMCAxOTo0MDoyNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOiBBZGQgYSB0ZXN0IGZvciBsZXZlbCBpbiBzdGVyZW8gbW9kZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOgotCSAgQWRkIGEgdGVzdCBmb3IgbGV2ZWwgaW4gc3RlcmVvIG1vZGUuCi0KLTIwMDgtMDgtMTAgMTk6MzU6MDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vOiBEZW1vIGhvdyB0byBkcmF3IGFuYWx5emVyIHJlc3VsdHMgc3luY2VkIHRvIHRoZSBjbG9jay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgRGVtbyBob3cgdG8gZHJhdyBhbmFseXplciByZXN1bHRzIHN5bmNlZCB0byB0aGUgY2xvY2suCi0KLTIwMDgtMDgtMTAgMTU6NTI6NDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2xldmVsL2dzdGxldmVsLmM6IExpdHRsZSByZW5hbWluZyAobCAtPiBsZXZlbCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBMaXR0bGUgcmVuYW1pbmcgKGwgLT4gbGV2ZWwpLgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmg6Ci0JICBBbHNvIHNlbmQgZnVsbCB0aW1lc3RhbXAvZHVyYXRpb24gZGV0YWlscyBoZXJlLgotCi0yMDA4LTA4LTEwIDExOjMyOjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC4qOiBTZW5kIHNhbWUgdGltZXN0YW1wL2R1cmF0aW9uIGRldGFpbHMgYXMgdmlkZW9hbmFseXNpcy4gVGhpcyBnaXZlcyBhcHBsaWNhdGlvbnMgYmV0dGVyIGNoYW5jZSB0by4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkgIFNlbmQgc2FtZSB0aW1lc3RhbXAvZHVyYXRpb24gZGV0YWlscyBhcyB2aWRlb2FuYWx5c2lzLiBUaGlzIGdpdmVzCi0JICBhcHBsaWNhdGlvbnMgYmV0dGVyIGNoYW5jZSB0byBzeW5jIGFuYWx5c2lzIHJlc3VsdHMgd2l0aCBwbGF5YmFjay4KLQotMjAwOC0wOC0wOSAxNDowMjoyNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IFdlIG5lZWQgdG8gZHJvcCBvbmUgYWRkaXRpb25hbCBidWZmZXIgZm9yIEZMQUMgYXMgdGhlIGZMYUMgbWFya2VyIGFuZCBTVFJFQU1JTkZPIGJsb2NrIGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF9oYW5kbGVfc2lua19ldmVudCksCi0JICAoZmxhY19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhKToKLQkgIFdlIG5lZWQgdG8gZHJvcCBvbmUgYWRkaXRpb25hbCBidWZmZXIgZm9yIEZMQUMgYXMgdGhlIGZMYUMKLQkgIG1hcmtlciBhbmQgU1RSRUFNSU5GTyBibG9jayBhcmUgbWVyZ2VkIGludG8gb25lIGJ1ZmZlciBpbiB0aGUgY2Fwcy4KLQkgIEFsc28gZG9uJ3QgcHJldGVuZCB0byBzdXBwb3J0IE5FV1NFR01FTlQgZXZlbnRzLCBvdGhlcndpc2Ugd2UKLQkgIHdpbGwgbW9zdCBwcm9iYWJseSB3cml0ZSBzb21lIGludmFsaWQgZGF0YS4KLQotMjAwOC0wOC0wOSAxMzo0ODoyMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEFkZCBzdXBwb3J0IGZvciBtdXhpbmcgRkxBQyBpbnRvIE1hdHJvc2thIGNvbnRhaW5lcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZmxhY19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2F1ZGlvX3BhZF9zZXRjYXBzKToKLQkgIEFkZCBzdXBwb3J0IGZvciBtdXhpbmcgRkxBQyBpbnRvIE1hdHJvc2thIGNvbnRhaW5lcnMuCi0JICBGaXhlcyBidWcgIzMxMTU4Ni4KLQotMjAwOC0wOC0wOSAwODo1ODoyNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IEFjdHVhbGx5IHByb3ZpZGUgdGhlIHZhcmlhYmxlcyByZXF1aXJlZCBmb3IgdGhlIGZvcm1hdCBzdHJpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOiAoZ3N0X2ZsYWNfZW5jX2NoZWNrX2Rpc2NvbnQpOgotCSAgQWN0dWFsbHkgcHJvdmlkZSB0aGUgdmFyaWFibGVzIHJlcXVpcmVkIGZvciB0aGUgZm9ybWF0IHN0cmluZy4KLQotMjAwOC0wOC0wOCAxNjoyMDoyNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguKjogQ2xvc2UgdGhlIGN1cnJlbnQgc2VnbWVudCBpZiB3ZSdyZSBkb2luZyBhIG5vbi1mbHVzaGluZyBzZWVrIGFuZCBzZW5kIHRoZSBjbG9zZS1zZWdtZW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9yZXNldCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2VsZW1lbnRfc2VuZF9ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50KSwgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICBDbG9zZSB0aGUgY3VycmVudCBzZWdtZW50IGlmIHdlJ3JlIGRvaW5nIGEgbm9uLWZsdXNoaW5nIHNlZWsgYW5kIHNlbmQKLQkgIHRoZSBjbG9zZS1zZWdtZW50IGFuZCB0aGUgbmV3IHNlZ21lbnQgb2YgdGhlIHNlZWsgZnJvbSB0aGUgc3RyZWFtaW5nCi0JICB0aHJlYWQuCi0KLTIwMDgtMDgtMDggMTU6MjA6MjQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2VuYy4qOiBIYW5kbGUgbm9uLXplcm8gc3RhcnQgdGltZXN0YW1wcyBjb3JyZWN0bHksIG1hcmsgaGVhZGVyIHBhY2tldHMgYXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY19lbmNfd3JpdGVfY2FsbGJhY2spLAotCSAgKGdzdF9mbGFjX2VuY19jaGVja19kaXNjb250KSwgKGdzdF9mbGFjX2VuY19jaGFpbiksCi0JICAoZ3N0X2ZsYWNfZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkgIEhhbmRsZSBub24temVybyBzdGFydCB0aW1lc3RhbXBzIGNvcnJlY3RseSwgbWFyayBoZWFkZXIgcGFja2V0cyBhcwotCSAgSU5fQ0FQUyBhbmQgcHJpbnQgYSB3YXJuaW5nIGFuZCBzdWdnZXN0IHVzaW5nIGF1ZGlvcmF0ZSBpZiBzdHJlYW0KLQkgIGRpc2NvbnRpbnVpdGllcyBhcmUgZGV0ZWN0ZWQuIFdoZW4gRkxBQyBzdXBwb3J0cyBmbHVzaGluZyB0aGUgZW5jb2RlcgotCSAgc29tZWhvdyB0aGlzIHNob3VsZCBiZSBkb25lIGZvciBkaXNjb250aW51aXRpZXMgaW5zdGVhZC4KLQkgIFJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMgZnJvbSB0aGUgaW5zdGFuY2Ugc3RydWN0LgotCi0yMDA4LTA4LTA3IDE3OjE0OjM5ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZCBwdWxzZWF1ZGlvIHRvIHBsdWdpbnMgbGlzdCBpbiBzcGVjIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHB1bHNlYXVkaW8gdG8gcGx1Z2lucyBsaXN0IGluIHNwZWMgZmlsZQotCi0yMDA4LTA4LTA3IDE2OjEzOjQxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogSWYgc2Vla2luZyBmYWlsZWQgcmV0dXJuIHRoZSBhcHByb3BpYXRlIHJldHVybiB2YWx1ZSB0byBGTEFDLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjX2VuY19zZWVrX2NhbGxiYWNrKToKLQkgIElmIHNlZWtpbmcgZmFpbGVkIHJldHVybiB0aGUgYXBwcm9waWF0ZSByZXR1cm4gdmFsdWUgdG8gRkxBQy4KLQkgIE90aGVyd2lzZSBpdCB0aGlua3Mgc2Vla2luZyB3YXMgc3VjY2Vzc2Z1bGwgYW5kIHRyaWVzIHRvIHJld3JpdGUKLQkgIHBhcnRzIG9mIHRoZSBoZWFkZXJzIHdoaWNoIHRoZW4gZ2V0IGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQuCi0KLTIwMDgtMDgtMDcgMTY6MTE6MDAgKzAwMDAgIEZyZWRlcmljIENyb3phdCA8ZmNyb3phdEBtYW5kcml2YS5vcmc+Ci0KLQkgIE1ha2Ugc3VyZSBnZXR0ZXh0IHJldHVybnMgdHJhbnNsYXRpb25zIGluIFVURi04IGVuY29kaW5nIHJhdGhlciB0aGFuIGluIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZyAoIzU0NjgyMikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGcmVkZXJpYyBDcm96YXQgPGZjcm96YXRAbWFuZHJpdmEub3JnPgotCSAgKiBleHQvZXNkL2dzdGVzZC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2suYzogKHBsdWdpbl9pbml0KToKLQkgICogc3lzL29zcy9nc3Rvc3NhdWRpby5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyLmM6IChwbHVnaW5faW5pdCk6Ci0JICBNYWtlIHN1cmUgZ2V0dGV4dCByZXR1cm5zIHRyYW5zbGF0aW9ucyBpbiBVVEYtOCBlbmNvZGluZyByYXRoZXIKLQkgIHRoYW4gaW4gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nICgjNTQ2ODIyKS4KLQotMjAwOC0wOC0wNyAxNDo0MDoxMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IEFkZCBGSVhNRSBmb3IgMC4xMSB0byBzaW1wbHkgb3V0cHV0IGV2ZXJ5dGhpbmcgd2l0aCB3aWR0aD0zMiBhcyBnaXZlbiBieSBGTEFDIGFuZCBsZXQgYXVkaW9jb24uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICBBZGQgRklYTUUgZm9yIDAuMTEgdG8gc2ltcGx5IG91dHB1dCBldmVyeXRoaW5nIHdpdGggd2lkdGg9MzIgYXMgZ2l2ZW4KLQkgIGJ5IEZMQUMgYW5kIGxldCBhdWRpb2NvbnZlcnQgaGFuZGxlIHRoZSBjb252ZXJzaW9ucyBpbnN0ZWFkIG9mIGRvaW5nCi0JICB0aGVtIGluIGZsYWNkZWMuCi0KLTIwMDgtMDgtMDcgMTA6MjI6MzIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IFdoZW4gb3V0cHV0dGluZyBhIHBhZCB0ZW1wbGF0ZSByYW5nZSBmb3IgdGhlIHNpemUsIGluY2x1ZGUgYSBmcmFtZXJhdGUgcmFuZ2UgdG9vLCB0byBhdm9pZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpOgotCSAgV2hlbiBvdXRwdXR0aW5nIGEgcGFkIHRlbXBsYXRlIHJhbmdlIGZvciB0aGUgc2l6ZSwgaW5jbHVkZSBhIGZyYW1lcmF0ZQotCSAgcmFuZ2UgdG9vLCB0byBhdm9pZCAnbm90IGEgcmVhbCBzdWJzZXQgb2YgdGVtcGxhdGUgY2FwcycgZXJyb3JzLgotCi0yMDA4LTA4LTA2IDE1OjM0OjU1ICswMDAwICBKb25hdGhhbiBNYXR0aGV3IDxub3R2ZXJ5c21hcnRAZ21haWwuY29tPgotCi0JICBleHQvZmxhYy86IFBvcnQgZmxhY3RhZyB0byAwLjEwLCBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgaXQgYW5kIGNsZWFuIGl0IHVwIGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5OiBKb25hdGhhbiBNYXR0aGV3IDxub3R2ZXJ5c21hcnQgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZXh0L2ZsYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWMuYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOiAoZ3N0X2ZsYWNfdGFnX3NldHVwX2ludGVyZmFjZXMpLAotCSAgKGdzdF9mbGFjX3RhZ19iYXNlX2luaXQpLCAoZ3N0X2ZsYWNfdGFnX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mbGFjX3RhZ19kaXNwb3NlKSwgKGdzdF9mbGFjX3RhZ19pbml0KSwKLQkgIChnc3RfZmxhY190YWdfc2lua19zZXRjYXBzKSwgKGdzdF9mbGFjX3RhZ19jaGFpbiksCi0JICAoZ3N0X2ZsYWNfdGFnX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWN0YWcuaDoKLQkgIFBvcnQgZmxhY3RhZyB0byAwLjEwLCBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgaXQgYW5kIGNsZWFuIGl0IHVwIGEgYml0LgotCSAgRml4ZXMgYnVnICM0MTM4NDEuCi0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOiAoZ3N0X2ZsYWNfZW5jX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkgIEFkZCBmbGFjdGFnIGFuZCBmbGFjZW5jIHRvIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBtYXJrCi0JICB0aGUgcHJpdmF0ZSBwYXJ0cyBvZiB0aGUgZmxhY2RlYyBpbnN0YW5jZSBzdHJ1Y3R1cmUgYXMgcHJpdmF0ZS4KLQkgIEFsc28gdXNlIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSgpIGluIGZsYWNkZWMgYW5kCi0JICBmbGFjZW5jLgotCi0yMDA4LTA4LTA2IDEzOjEyOjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogVXNlIGF1ZGlvL3gtcWRtIGZvciBjYXBzLiBDb2xsZWN0IHNvbWUgaW5mbyAtIG1wbGF5ZXIgaGFzIGEgZGVjb2RlciBmb3IgaXQgYnV0IGZmbXBlZyBkb2VzIG5vdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBVc2UgYXVkaW8veC1xZG0gZm9yIGNhcHMuIENvbGxlY3Qgc29tZSBpbmZvIC0gbXBsYXllciBoYXMgYSBkZWNvZGVyCi0JICBmb3IgaXQgYnV0IGZmbXBlZyBkb2VzIG5vdC4KLQotMjAwOC0wOC0wNSAxNTowNTo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogSGFuZGxlIHRoZSBsaXN0IGNodW5rIGFuZCB1c2UgZ3N0X3JpZmZfcGFyc2VfaW5mbygpIHRvIHBhcnNlIHRoZSBpbmZvIHN1Yi1jaHVuay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIEhhbmRsZSB0aGUgbGlzdCBjaHVuayBhbmQgdXNlIGdzdF9yaWZmX3BhcnNlX2luZm8oKSB0byBwYXJzZSB0aGUgaW5mbwotCSAgc3ViLWNodW5rLgotCi0yMDA4LTA4LTA1IDE0OjIyOjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBIYW5kbGUgdGhlIGFjaWQgY2h1bmsgYW5kIHNlbmQgdGVtcG8gYXMgcGFydCBvZiB0YWdzLiBPdGhlciBmaWVsZHMgYXJlIGludGVyZXN0aW5nIHRvbywgYi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgSGFuZGxlIHRoZSBhY2lkIGNodW5rIGFuZCBzZW5kIHRlbXBvIGFzIHBhcnQgb2YgdGFncy4gT3RoZXIgZmllbGRzIGFyZQotCSAgaW50ZXJlc3RpbmcgdG9vLCBidXQgbmVlZCBtb3JlIHRhZy1kZWZpbml0aW9ucy4gRml4ZXMgIzU0NTQzMy4KLQotMjAwOC0wOC0wNSAxNDoxNjozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogUmVmYWN0b3Igd2F2cGFyc2UuIENhbGwgX3Jlc2V0KCkgZnJvbSBkaXNwb3NlKCkgYW5kIG1vdmUgb2xkIGNvZGUgZnJvbSBkaXNwb3NlIGludG8gcmVzZXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIFJlZmFjdG9yIHdhdnBhcnNlLiBDYWxsIF9yZXNldCgpIGZyb20gZGlzcG9zZSgpIGFuZCBtb3ZlIG9sZCBjb2RlIGZyb20KLQkgIGRpc3Bvc2UgaW50byByZXNldC4gVGhpcyB3YXkgd2UgZG9uJ3QgbGVhayB0YWdsaXN0cyB3aGVuIHdlIGFib3J0Ci0JICBwYXJzaW5nLiBGaXggc29tZSBjb21tZW50cy4gTW92ZSBjb2RlIGZvciBza2lwcGluZyBhIGNodW5rIGludG8gZXh0cmEKLQkgIGZ1bmN0aW9uLiBSZXBsYWNlIGNodW5rIHNpemVzIHdpdGggYSBjb25zdCB0byBlYXNlIHJlYWRhYmlsaXR5LgotCi0yMDA4LTA4LTA1IDEzOjU3OjU3ICswMDAwICBBdXJlbGllbiBHcmltYXVkIDxnc3RlbHp6QHlhaG9vLmZyPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IEltcHJvdmUgdWRwIHBvcnQgc2V0dXAuIEZpeGVzICM1NDU3MTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBdXJlbGllbiBHcmltYXVkIDxnc3RlbHp6IGF0IHlhaG9vIGRvdCBmcj4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfYWxsb2NfdWRwX3BvcnRzKToKLQkgIEltcHJvdmUgdWRwIHBvcnQgc2V0dXAuIEZpeGVzICM1NDU3MTAuCi0KLTIwMDgtMDgtMDUgMTM6NTQ6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBBZGQgTVAxUyBkZXBheWxvYWRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jOiAoZ3N0X3J0cF9tcDFzX2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDFzX2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9tcDFzX2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXAxc19kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfbXAxc19kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX21wMXNfZGVwYXlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX21wMXNfZGVwYXlfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX21wMXNfZGVwYXlfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX21wMXNfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5oOgotCSAgQWRkIE1QMVMgZGVwYXlsb2FkZXIuCi0JICAqIGdzdC9ydHNwL1VSTFM6Ci0JICBTb21lIG1vcmUgc2FtcGxlIHJ0c3Agc3RyZWFtcy4KLQotMjAwOC0wOC0wNSAwODo0Mzo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvVVJMUzogQWRkIGFub3RoZXIgVVJMLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL1VSTFM6Ci0JICBBZGQgYW5vdGhlciBVUkwuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6ICh0ZXN0X3RhZ2xpYl9pZDNtdXhfd2l0aF90YWdzKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0KLTIwMDgtMDgtMDQgMDk6MTY6NDAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBQcm92aWRlIGNiU2l6ZSBmaWVsZCBmb3IgYXVkaW8gZXh0cmFfZGF0YSBzaXplLCBhbmQgdGFrZSBjYXJlIHRvIHBhZCBleHRyYV9kYXRhLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyKToKLQkgIFByb3ZpZGUgY2JTaXplIGZpZWxkIGZvciBhdWRpbyBleHRyYV9kYXRhIHNpemUsIGFuZCB0YWtlIGNhcmUgdG8KLQkgIHBhZCBleHRyYV9kYXRhLgotCi0yMDA4LTA4LTA0IDA3OjIzOjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUmV0dXJuIHRoZSByZXN1bHQgb2YgZ3N0X3BhZF97c3RhcnQsc3RvcH1fdGFzayBpbnN0ZWFkIG9mIGhhcmQtY29kZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnc3RfcGFkX3tzdGFydCxzdG9wfV90YXNrIGluc3RlYWQgb2YgaGFyZC1jb2RlZAotCSAgVFJVRS4KLQotMjAwOC0wOC0wNCAwNzoxNzozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcXRkZW11eC86IEFkZCBrZXl3b3JkIHRhZyBzdXBwb3J0LiBGaXhlcyAjNTIwNjk0IGZvciBxdGRlbXV4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkgIEFkZCBrZXl3b3JkIHRhZyBzdXBwb3J0LiBGaXhlcyAjNTIwNjk0IGZvciBxdGRlbXV4LgotCi0yMDA4LTA4LTA0IDA3OjA1OjMzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQWRkIHN1cHBvcnQgZm9yIHRtcG8gdGFnIChCUE0pLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIEFkZCBzdXBwb3J0IGZvciB0bXBvIHRhZyAoQlBNKS4KLQotMjAwOC0wOC0wMyAxMjoyMzo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IFNldCBhbiBlc3RpbWF0ZSBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzIHRoYXQgd2lsbCBiZSBlbmNvZGVkIGlmIHBvc3NpYmxlIHRvIGhlbHAgZGVjb2QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY19lbmNfcXVlcnlfcGVlcl90b3RhbF9zYW1wbGVzKSwKLQkgIChnc3RfZmxhY19lbmNfc2lua19zZXRjYXBzKSwgKGdzdF9mbGFjX2VuY193cml0ZV9jYWxsYmFjayk6Ci0JICBTZXQgYW4gZXN0aW1hdGUgZm9yIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2FtcGxlcyB0aGF0IHdpbGwgYmUgZW5jb2RlZAotCSAgaWYgcG9zc2libGUgdG8gaGVscCBkZWNvZGVycyBpZiB0aGUgc3RyZWFtaW5mbyBjYW4ndCBiZSByZXdyaXR0ZW4KLQkgIGxhdGVyIChsaWtlIHdoZW4gbXV4aW5nIGludG8gT2dnIGNvbnRhaW5lcnMpLgotCSAgQWRkIGEgd2FybmluZyBpZiB3ZSBnZXQgaGVhZGVyIHBhY2tldHMgYWZ0ZXIgZGF0YSBwYWNrZXRzIGFzIHRob3NlCi0JICB3aWxsIGdldCBsb3N0IHdoZW4gbXV4aW5nIGludG8gT2dnLCBpLmUuIHJld3JpdGluZyB0aGUgaGVhZGVycyBkb2Vzbid0Ci0JICB3b3JrLgotCi0yMDA4LTA4LTAzIDExOjM4OjIyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogU3VwcG9ydCBkZWNvZGluZyBvZiBhbGwgZGVwdGhzIGJldHdlZW4gNCBhbmQgMzIgYml0cyBhbmQgcmVhZCB0aGUgZGVwdGggZnJvbSB0aGUgc3RyZWFtaW5mbyBoZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19tZXRhZGF0YV9jYWxsYmFjayksCi0JICAoZ3N0X2ZsYWNfZGVjX3dyaXRlKToKLQkgIFN1cHBvcnQgZGVjb2Rpbmcgb2YgYWxsIGRlcHRocyBiZXR3ZWVuIDQgYW5kIDMyIGJpdHMgYW5kIHJlYWQgdGhlCi0JICBkZXB0aCBmcm9tIHRoZSBzdHJlYW1pbmZvIGhlYWRlciBpZiBuZWVkZWQuIEFsc28gc3VwcG9ydCBhbGwgc2FtcGxpbmcKLQkgIHJhdGVzIGJldHdlZW4gMSBhbmQgNjU1MzUwIEh6LgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICAoZ3N0X2ZsYWNfZW5jX2NhcHNfYXBwZW5kX3N0cnVjdHVyZV93aXRoX3dpZHRocyksCi0JICAoZ3N0X2ZsYWNfZW5jX3NpbmtfZ2V0Y2FwcyksIChnc3RfZmxhY19lbmNfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfZmxhY19lbmNfY2hhaW4pOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmg6Ci0JICBTdXBwb3J0IGVuY29kaW5nIGluIGFsbCBiaXQgZGVwdGhzIHN1cHBvcnRlZCBieSB0aGUgc3RyZWFtYWJsZQotCSAgc3ViZm9ybWF0IChpLmUuIDgsIDEyLCAxNiwgMjAgYW5kIDI0IGJpdHMpIGFuZCBhbGwgc2FtcGxpbmcgcmF0ZXMKLQkgIGJldHdlZW4gMSBIeiBhbmQgNjU1MzUwIEh6LgotCi0yMDA4LTA4LTAzIDA5OjIzOjE0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogU3VwcG9ydCBlbmNvZGluZyBvZiB1cCB0byA4IGNoYW5uZWxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjX2VuY19pbml0KSwKLQkgIChnc3RfZmxhY19lbmNfc2lua19nZXRjYXBzKToKLQkgIFN1cHBvcnQgZW5jb2Rpbmcgb2YgdXAgdG8gOCBjaGFubmVscy4KLQotMjAwOC0wOC0wMiAyMTozOTowMSArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuKjogRml4IHNlZWtpbmcgcmFjZSBjb25kaXRpb24gaW4gIzU0MDMwMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBGaXggc2Vla2luZyByYWNlIGNvbmRpdGlvbiBpbiAjNTQwMzAwCi0JICBQYXRjaCBCeTogV291dGVyIENsb2V0ZW5zICA8d291dGVyIGF0IG1pbmQgYmU+Ci0KLTIwMDgtMDgtMDIgMTg6MzU6MjEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IFdoZW4gcmVjZWl2aW5nIGEgU0VFSyBldmVudCBvbiBhIHNwZWNpZmljIHBhZCBmaXJzdCBzZWFyY2ggZm9yIGEgc2VlayB0YWJsZSBlbnRyeSBmb3IgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FkZW11eF9kb19pbmRleF9zZWVrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfZWxlbWVudF9zZW5kX2V2ZW50KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc3JjX2V2ZW50KToKLQkgIFdoZW4gcmVjZWl2aW5nIGEgU0VFSyBldmVudCBvbiBhIHNwZWNpZmljIHBhZCBmaXJzdCBzZWFyY2ggZm9yIGEgc2VlawotCSAgdGFibGUgZW50cnkgZm9yIHRoZSBzdHJlYW0gb2YgdGhlIHBhZCBhbmQgdGhlbiBmYWxsIGJhY2sgdG8gYW4gZW50cnkKLQkgIGZvciBhIGRpZmZlcmVudCBzdHJlYW0uCi0KLTIwMDgtMDgtMDIgMTg6MjA6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgQnVpbGQgZGVwZW5kIG9uIGNvcmUgQ1ZTIGZvciB0aGUgYXR0YWNobWVudCB0YWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmM6IChnc3RfbWF0cm9za2FfcmVnaXN0ZXJfdGFncyk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIEJ1aWxkIGRlcGVuZCBvbiBjb3JlIENWUyBmb3IgdGhlIGF0dGFjaG1lbnQgdGFnLgotCi0yMDA4LTA4LTAyIDE4OjE4OjA1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIERlY29kZSB0aGUgY29kZWMgcHJpdmF0ZSBkYXRhIGFuZCBmb2xsb3dpbmcgQ29udGVudEVuY29kaW5nIGlmIG5lY2Vzc2FyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21hdHJvc2thL2x6by5jOiAoZ2V0X2J5dGUpLCAoZ2V0X2xlbiksIChjb3B5KSwKLQkgIChjb3B5X2JhY2twdHIpLCAobHpvMXhfZGVjb2RlKSwgKG1haW4pOgotCSAgKiBnc3QvbWF0cm9za2EvbHpvLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9yZWFkX3RyYWNrX2VuY29kaW5nKSwKLQkgIChnc3RfbWF0cm9za2FfZGVjb21wcmVzc19kYXRhKSwgKGdzdF9tYXRyb3NrYV9kZWNvZGVfZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlY29kZV9idWZmZXIpLAotCSAgKGdzdF9tYXRyb3NrYV9kZWNvZGVfY29udGVudF9lbmNvZGluZ3MpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9yZWFkX3RyYWNrX2VuY29kaW5ncyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgRGVjb2RlIHRoZSBjb2RlYyBwcml2YXRlIGRhdGEgYW5kIGZvbGxvd2luZyBDb250ZW50RW5jb2RpbmcgaWYKLQkgIG5lY2Vzc2FyeS4KLQkgIFN1cHBvcnQgYnppcDIsIGx6byBhbmQgaGVhZGVyIHN0cmlwcGVkIGNvbXByZXNzaW9uLiBGb3IgbHpvIHVzZSB0aGUKLQkgIGZmbXBlZyBsem8gaW1wbGVtZW50YXRpb24gYXMgbGlibHpvIGlzIEdQTCBsaWNlbnNlZC4KLQkgIEZpeCB6bGliIGRlY29tcHJlc3Npb24uCi0KLTIwMDgtMDgtMDIgMTg6MTE6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBGaXggbXV4aW5nIG9mIE1QMy9NUDIgd2l0aCBkaWZmZXJlbnQgTVBFRyB2ZXJzaW9ucyBieSBjYWxjdWxhdGluZyB0aGUgZHVyYXRpb24gb2YgYSBmcmFtLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHMpOgotCSAgRml4IG11eGluZyBvZiBNUDMvTVAyIHdpdGggZGlmZmVyZW50IE1QRUcgdmVyc2lvbnMgYnkgY2FsY3VsYXRpbmcgdGhlCi0JICBkdXJhdGlvbiBvZiBhIGZyYW1lIHdpdGggdGhlIG5ldyBtcGVnYXVkaW92ZXJzaW9uIGNhcHMgZmllbGQuCi0KLTIwMDgtMDgtMDIgMTg6MDY6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lio6IEFsbG93IGFuIGluZmluaXRlIG51bWJlciBvZiBzdHJlYW0gaW5zaWRlIE1hdHJvc2thIGNvbnRhaW5lcnMgYW5kIHVzZSBhIEdQdHJBcnJheSBmb3IgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfZmluYWxpemUpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9jbGFzc19pbml0KSwgKGdzdF9tYXRyb3NrYV9kZW11eF9pbml0KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfY29tYmluZV9mbG93cyksIChnc3RfbWF0cm9za2FfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdHJlYW1fZnJvbV9udW0pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF90cmFja251bWJlcl91bmlxdWUpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwgKGdzdF9tYXRyb3NrYV9kZW11eF9zZW5kX2V2ZW50KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zeW5jX3N0cmVhbXMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgQWxsb3cgYW4gaW5maW5pdGUgbnVtYmVyIG9mIHN0cmVhbSBpbnNpZGUgTWF0cm9za2EgY29udGFpbmVycyBhbmQgdXNlCi0JICBhIEdQdHJBcnJheSBmb3Igc3RvcmluZyB0aGVtIGluc3RlYWQgb2YgYWxsb3dpbmcgIm9ubHkiIDEyNyBzdHJlYW1zLgotCi0yMDA4LTA4LTAyIDE4OjAxOjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IEZpeCBpbmRlbnRpb24gZXZlcnl3aGVyZS4gQSBicm9rZW4gaW5kZW50IHZlcnNpb24gaGFzIGFkZGVkIG5ld2xpbmVzIGFmdGVyIGV2ZXJ5IHNpbmdsZSBkZWNsYXJhdGlvbiBzby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2VibWxfcmVhZF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2xldmVsX3VwKSwKLQkgIChnc3RfZWJtbF9yZWFkX3BlZWtfYnl0ZXMpLCAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2lkKSwKLQkgIChnc3RfZWJtbF9yZWFkX2VsZW1lbnRfbGVuZ3RoKSwgKGdzdF9lYm1sX3BlZWtfaWQpLAotCSAgKGdzdF9lYm1sX3JlYWRfZ2V0X2xlbmd0aCksIChnc3RfZWJtbF9yZWFkX3NraXApLAotCSAgKGdzdF9lYm1sX3JlYWRfYnVmZmVyKSwgKGdzdF9lYm1sX3JlYWRfYnl0ZXMpLAotCSAgKGdzdF9lYm1sX3JlYWRfdWludCksIChnc3RfZWJtbF9yZWFkX3NpbnQpLCAoX2V4dDJkYmwpLAotCSAgKGdzdF9lYm1sX3JlYWRfZmxvYXQpLCAoZ3N0X2VibWxfcmVhZF9hc2NpaSksIChnc3RfZWJtbF9yZWFkX2RhdGUpLAotCSAgKGdzdF9lYm1sX3JlYWRfbWFzdGVyKSwgKGdzdF9lYm1sX3JlYWRfYmluYXJ5KSwKLQkgIChnc3RfZWJtbF9yZWFkX2hlYWRlcik6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IChnc3RfZWJtbF93cml0ZV9lbGVtZW50X2lkKSwKLQkgIChnc3RfZWJtbF93cml0ZV9lbGVtZW50X3NpemUpLCAoZ3N0X2VibWxfd3JpdGVfdWludCksCi0JICAoZ3N0X2VibWxfd3JpdGVfc2ludCksIChnc3RfZWJtbF93cml0ZV9hc2NpaSksCi0JICAoZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0KSwgKGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2gpLAotCSAgKGdzdF9lYm1sX3JlcGxhY2VfdWludCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcmVhZF90cmFja19lbmNvZGluZyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3JlYWRfdHJhY2tfZW5jb2RpbmdzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbSksIChnc3RfbWF0cm9za2FkZW11eF9kb19pbmRleF9zZWVrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2VsZW1lbnRfc2VuZF9ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2luaXRfc3RyZWFtKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfdHJhY2tzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXhfY3VldHJhY2spLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9pbmRleF9wb2ludGVudHJ5KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXgpLCAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZm8pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YV9pZF9zaW1wbGVfdGFnKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGFfaWRfdGFnKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGEpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9hdHRhY2hlZF9maWxlKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYXR0YWNobWVudHMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9jaGFwdGVycyksIChnc3RfbWF0cm9za2FfZWJtbG51bV91aW50KSwKLQkgIChnc3RfbWF0cm9za2FfZWJtbG51bV9zaW50KSwgKGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2hkcl9idWYpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2ZsYWNfY29kZWNfcHJpdl9kYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcHVzaF94aXBoX2NvZGVjX3ByaXZfZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfZHZkX2NsdXRfY2hhbmdlX2V2ZW50KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX21wZWdfc2VxX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF93dnBrX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3N1YnRpdGxlX2J1ZmZlciksCi0JICAoZ3N0X21hdHJvc2thX2RlY29kZV9idWZmZXIpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2x1c3RlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW1fcGFyc2VfaWQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wX3N0cmVhbSksIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMpLCAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X2NsYXNzX2luaXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLCAoZ3N0X21hdHJvc2thX211eF9oYW5kbGVfc2lua19ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX211eF92aWRlb19wYWRfc2V0Y2FwcyksCi0JICAoeGlwaDNfc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSksCi0JICAodm9yYmlzX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEpLAotCSAgKHRoZW9yYV9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2F1ZGlvX3BhZF9zZXRjYXBzKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3JlcXVlc3RfbmV3X3BhZCksIChnc3RfbWF0cm9za2FfbXV4X3JlbGVhc2VfcGFkKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3RyYWNrX2hlYWRlciksIChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3NpbXBsZV90YWcpLCAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfYmVzdF9wYWQpLCAoZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2NvbGxlY3RlZCksIChnc3RfbWF0cm9za2FfbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICBGaXggaW5kZW50aW9uIGV2ZXJ5d2hlcmUuIEEgYnJva2VuIGluZGVudCB2ZXJzaW9uIGhhcyBhZGRlZCBuZXdsaW5lcwotCSAgYWZ0ZXIgZXZlcnkgc2luZ2xlIGRlY2xhcmF0aW9uIHNvbWUgdGltZSBhZ28uCi0KLTIwMDgtMDgtMDIgMTc6NTk6MDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IElmIG5vIFRyYWNrcyBhcmUgZm91bmQgZXJyb3Igb3V0IGluc3RlYWQgb2YgdHJ5aW5nIGl0IGFnYWluIHVudGlsIHRoZSBlbmQgb2YgdGltZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW1fcGFyc2VfaWQpOgotCSAgSWYgbm8gVHJhY2tzIGFyZSBmb3VuZCBlcnJvciBvdXQgaW5zdGVhZCBvZiB0cnlpbmcgaXQgYWdhaW4gdW50aWwgdGhlCi0JICBlbmQgb2YgdGltZS4KLQotMjAwOC0wOC0wMiAxNzo1NzozMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogRml4IGRlbXV4aW5nIG9mIHJhdyBpbnRlZ2VyIGF1ZGlvLiBUaGUgc2FtcGxlcyBhcmUgdW5zaWduZWQgb25seSBmb3IgOCBiaXQgYW5kIHNpZ25lZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hdWRpb19jYXBzKToKLQkgIEZpeCBkZW11eGluZyBvZiByYXcgaW50ZWdlciBhdWRpby4gVGhlIHNhbXBsZXMgYXJlIHVuc2lnbmVkIG9ubHkgZm9yIDgKLQkgIGJpdCBhbmQgc2lnbmVkIG90aGVyd2lzZSwgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgotCi0yMDA4LTA4LTAyIDE3OjU0OjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogQWRkIG1vcmUgcmF3IFlVViBmb3JtYXRzIHRvIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIEFkZCBtb3JlIHJhdyBZVVYgZm9ybWF0cyB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cy4KLQotMjAwOC0wOC0wMiAxNzo1MjoxNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEFkZCBzdXBwb3J0IGZvciBtdXhpbmcgcmF3IGZsb2F0IGF1ZGlvIG5vdyB0aGF0IHRoZSBzcGVjIGRlZmluZXMgdGhlIGVuZGlhbm5lc3MgYW5kIGFkZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfc2V0Y2Fwcyk6Ci0JICBBZGQgc3VwcG9ydCBmb3IgbXV4aW5nIHJhdyBmbG9hdCBhdWRpbyBub3cgdGhhdCB0aGUgc3BlYyBkZWZpbmVzIHRoZQotCSAgZW5kaWFubmVzcyBhbmQgYWRkIHN1cHBvcnQgZm9yIG11eGluZyByYXcgaW50ZWdlciBhdWRpbyB3aXRoIDI0IGFuZAotCSAgMzIgYml0cy4KLQkgIEFsbG93IG11eGluZyBvZiBtb3JlIHRoYW4gOCBhdWRpbyBjaGFubmVscy4KLQotMjAwOC0wOC0wMiAxNzo0NzozMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEFkZCBsb2NraW5nIHRvIHRoZSBnbG9iYWwgYXJyYXkgb2YgdXNlZCB0cmFjayBVSURzIHRvIHByZXZlbnQgcmFuZG9tIGNyYXNoZXMgaWYgbW9yZSB0aGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X2NyZWF0ZV91aWQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLCAoZ3N0X21hdHJvc2thX211eF9zdGFydCk6Ci0JICBBZGQgbG9ja2luZyB0byB0aGUgZ2xvYmFsIGFycmF5IG9mIHVzZWQgdHJhY2sgVUlEcyB0byBwcmV2ZW50IHJhbmRvbQotCSAgY3Jhc2hlcyBpZiBtb3JlIHRoYW4gYSBzaW5nbGUgbWF0cm9zbXV4IGluc3RhbmNlIGlzIHVzZWQuCi0JICBVc2UgNjQgYml0IHZhbHVlcyBmb3IgdGhlIHRyYWNrIFVJRHMuCi0JICBVc2UgdGhlIGdsb2JhbCBHUmFuZG9tIG9mIEdMaWIgaW5zdGVhZCBvZiBjcmVhdGluZyBvdXIgb3duIG9uZQotCSAgZm9yIHRoZSBmZXcgcmFuZG9tIG51bWJlcnMgd2UgbmVlZCBldmVyeSBzaW5nbGUgdGltZS4KLQotMjAwOC0wOC0wMiAxNzoxODo0NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IEFsd2F5cyBwb3N0IHRoZSBhdWRpby1jb2RlYyB0YWcsIG5vdCBvbmx5IGlmIG90aGVyIHRhZ3MgYXJlIHByZXNlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZGVjX3NldHVwX3NlZWthYmxlX2RlY29kZXIpLAotCSAgKGdzdF9mbGFjX2RlY19zZXR1cF9zdHJlYW1fZGVjb2RlciksCi0JICAoZ3N0X2ZsYWNfZGVjX3VwZGF0ZV9tZXRhZGF0YSk6Ci0JICBBbHdheXMgcG9zdCB0aGUgYXVkaW8tY29kZWMgdGFnLCBub3Qgb25seSBpZiBvdGhlciB0YWdzIGFyZSBwcmVzZW50LgotCi0yMDA4LTA4LTAxIDIzOjI2OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBCYWNrIHRvIGRldmVsb3BtZW50IC0+IDAuMTAuOS4xCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjkuMQotCi0yMDA4LTA4LTAxIDE1OjU4OjQ3ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZCBtaXNzaW5nIGdzdHJlYW1lciBwbHVnaW5zIHRvIHNwZWMgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbWlzc2luZyBnc3RyZWFtZXIgcGx1Z2lucyB0byBzcGVjIGZpbGUKLQotPT09IHJlbGVhc2UgMC4xMC45ID09PQotCi0yMDA4LTA3LTMxIDIyOjEwOjE3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIGdzdC1wbHVnaW5zLWdvb2QuZG9hcDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC45Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC45Ci0KLTIwMDgtMDctMzEgMjE6NTA6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2RhLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9lcy5wbzoKLQkqIHBvL2V1LnBvOgotCSogcG8vZmkucG86Ci0JKiBwby9mci5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL2x0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9wdF9CUi5wbzoKLQkqIHBvL3J1LnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDgtMDctMzEgMjE6MjY6NDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBEb24ndCB0aHJvdyBhbiBlcnJvciB3aGVuIHNvdXAgY29tcGxldGVzIGEgbXNnIHdpdGggc3RhdHVzICdjYW5jZWxsZWQnLCBhcyB0aGF0IGluZGljYXRlcyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOgotCSAgRG9uJ3QgdGhyb3cgYW4gZXJyb3Igd2hlbiBzb3VwIGNvbXBsZXRlcyBhIG1zZyB3aXRoIHN0YXR1cwotCSAgJ2NhbmNlbGxlZCcsIGFzIHRoYXQgaW5kaWNhdGVzIHdlIGNhbmNlbGxlZCBhIHJlcXVlc3Qgd2hpbGUKLQkgIHNodXR0aW5nIGRvd24gb3Igc2Vla2luZywgYW5kIGl0J3Mgbm90IGFuIGVycm9yLgotCSAgRml4ZXM6ICM1NDAzMDAgYWdhaW4uCi0KLTIwMDgtMDctMjggMjA6MTc6NDYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IDAuMTAuOC40IHByZS1yZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgMC4xMC44LjQgcHJlLXJlbGVhc2UKLQotMjAwOC0wNy0yNSAxNDo1MDowMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGaXggc2VnbWVudC1zdG9wIHJlZ3Jlc3Npb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCk6Ci0JICBGaXggc2VnbWVudC1zdG9wIHJlZ3Jlc3Npb24uCi0JICBBZGQgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgc2VnbWVudHMgaW4gcXVpY2t0aW1lIGZpbGVzIGJ5IFdpbSBUYXltYW5zLgotCSAgRml4ZXMgIzU0NDUwOQotCi0yMDA4LTA3LTI0IDIzOjU1OjU4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiAwLjEwLjguMyBwcmUtcmVsZWFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIDAuMTAuOC4zIHByZS1yZWxlYXNlCi0JICAqIHBvL0xJTkdVQVM6Ci0JICAqIHBvL3B0X0JSLnBvOgotCSAgQWRkIHB0X0JSIHRyYW5zbGF0aW9uCi0KLTIwMDgtMDctMjMgMjI6MDE6MjAgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2dvb20vOiBGaXggYnVpbGQgd2l0aCBNU1ZDOiBpbmNsdWRlIGdsaWIuaCB0byBkZWZpbmUgaW5saW5lIGFwcHJvcHJpYXRlbHksIHVzZSBoZWFkZXIgZ3VhcmRzIHdoZXJlIG5lZWRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9jb252b2x2ZV9meC5jOgotCSAgKiBnc3QvZ29vbS9maWx0ZXJzLmM6Ci0JICAqIGdzdC9nb29tL2dvb21fY29uZmlnLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fY29yZS5jOgotCSAgKiBnc3QvZ29vbS9nb29tX3Rvb2xzLmg6Ci0JICBGaXggYnVpbGQgd2l0aCBNU1ZDOiBpbmNsdWRlIGdsaWIuaCB0byBkZWZpbmUgaW5saW5lIGFwcHJvcHJpYXRlbHksCi0JICB1c2UgaGVhZGVyIGd1YXJkcyB3aGVyZSBuZWVkZWQuCi0JICAqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIEZpeCBidWlsZCB3aXRoIE1TVkM6IHVzZSBXU0EqIGNvbnN0YW50cy9mdW5jdGlvbnMgd2hlcmUgYXBwcm9wcmlhdGUsIHVzZQotCSAgZ19zbnByaW50ZiByYXRoZXIgdGhhbiBzbnByaW50Zi4KLQkgIEZpeGVzICM1NDQ0MzMuCi0KLTIwMDgtMDctMjIgMDY6MzI6MDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC4qOiBTZW50IHRhZ3MgaW4gX3RyYW5zZm9ybV9pcCgpIGluc3RlYWQgb2YgX3N0YXJ0KCkuIEZpeGVzICM1NDM0MDQgcGFydGlhbGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3R0YWdpbmplY3QuYzoKLQkgICogZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC5oOgotCSAgU2VudCB0YWdzIGluIF90cmFuc2Zvcm1faXAoKSBpbnN0ZWFkIG9mIF9zdGFydCgpLiBGaXhlcyAjNTQzNDA0Ci0JICBwYXJ0aWFsbHkuCi0KLTIwMDgtMDctMTkgMTQ6MTI6MzkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IDAuMTAuOC4yIHByZS1yZWxlYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgMC4xMC44LjIgcHJlLXJlbGVhc2UKLQotMjAwOC0wNy0xOSAxMzo1MDo1MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4dC9NYWtlZmlsZS5hbTogRmluaXNoIGhvb2tpbmcgdXAgcHVsc2VhdWRpbyBwbHVnaW4gdG8gdGhlIGJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgIEZpbmlzaCBob29raW5nIHVwIHB1bHNlYXVkaW8gcGx1Z2luIHRvIHRoZSBidWlsZC4KLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXJjdHJsLmM6Ci0JICBGaXggY29tcGlsYXRpb24gZXJyb3IuCi0KLTIwMDgtMDctMTkgMTM6MjM6MjkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBwby86IEFkZCBuZXcgbGl0aHVuaWFuIHRyYW5zbGF0aW9uLCBhbmQgYWRkIGZyZW5jaCB0byB0aGUgTElOR1VBUyBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL0xJTkdVQVM6Ci0JICAqIHBvL2x0LnBvOgotCSAgQWRkIG5ldyBsaXRodW5pYW4gdHJhbnNsYXRpb24sIGFuZCBhZGQgZnJlbmNoIHRvIHRoZSBMSU5HVUFTCi0JICBmaWxlLgotCi0yMDA4LTA3LTE5IDEzOjA4OjQyICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBGaXggU291cCBIVFRQIHNvdXJjZSBzZWVraW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBGaXggU291cCBIVFRQIHNvdXJjZSBzZWVraW5nLgotCSAgUGF0Y2ggQnk6IFdvdXRlciBDbG9ldGVucyAgPHdvdXRlciBhdCBtaW5kIGJlPgotCSAgRml4ZXM6ICM1NDAzMDAKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBuZXcgY2hlY2sgcHJvZ3JhbXMuCi0KLTIwMDgtMDctMTkgMDE6MDE6MTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBNb3ZlIHJlcGxheWdhaW4gYW5kIGludGVybGVhdmUgcGx1Z2lucyBmcm9tIC1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIE1vdmUgcmVwbGF5Z2FpbiBhbmQgaW50ZXJsZWF2ZSBwbHVnaW5zIGZyb20gLWJhZC4KLQkgIEZpeGVzOiAjNTQzNDA2Ci0JICBGaXhlczogIzUzNjIyOAotCi0yMDA4LTA3LTE4IDIwOjAzOjA3ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBSZXZlcnQgSVNPIGJhc2UgbWVkaWEgc3BlYyBiYXNlZCBwaXhlbC1hc3BlY3QtcmF0aW8gY2FsY3VsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksCi0JICAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFJldmVydCBJU08gYmFzZSBtZWRpYSBzcGVjIGJhc2VkIHBpeGVsLWFzcGVjdC1yYXRpbyBjYWxjdWxhdGlvbi4KLQkgIEZpeGVzICM1NDMzMDAuCi0KLTIwMDgtMDctMTcgMTY6NDI6NTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubTogRml4IG1pbm9yIGJ1aWxkIGlzc3VlcyBvbiBtYWNvc3guCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgRml4IG1pbm9yIGJ1aWxkIGlzc3VlcyBvbiBtYWNvc3guCi0JICBGaXhlcyAjNTQzMDU0Ci0KLTIwMDgtMDctMTcgMTQ6NDA6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIE9ubHkgdXNlIC1Xbm8tYXR0cmlidXRlcyAod2hpY2ggaXMgdGhlcmUgdG8gd29yayBhcm91bmQgYSBidWcgaW4gdGhlIHRhZ2xpYiAxLjUgaGVhZGVycykgaWYgdGhlIGMrKyBjb21waWxlciBhY3R1YWxseS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzo6Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06OgotCSAgT25seSB1c2UgLVduby1hdHRyaWJ1dGVzICh3aGljaCBpcyB0aGVyZSB0byB3b3JrIGFyb3VuZCBhCi0JICBidWcgaW4gdGhlIHRhZ2xpYiAxLjUgaGVhZGVycykgaWYgdGhlIGMrKyBjb21waWxlciBhY3R1YWxseQotCSAgc3VwcG9ydHMgaXQgKCM1NDMyNTUpLgotCi0yMDA4LTA3LTE3IDEzOjU0OjM4ICswMDAwICBCZW5vaXQgRm91ZXQgPGJlbm9pdC5mb3VldEBwdXJwbGVsYWJzLmNvbT4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiBBdm9pZCBjb21waWxlciB3YXJuaW5nIGJ5IGluaXRpYWxpc2luZyB2YXJpYWJsZSB0byBOVUxMICgjNTQzMjU5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEJlbm9pdCBGb3VldCA8YmVub2l0LmZvdWV0IHB1cnBsZWxhYnMgY29tPgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19uZWdvdGlhdGUpOgotCSAgQXZvaWQgY29tcGlsZXIgd2FybmluZyBieSBpbml0aWFsaXNpbmcgdmFyaWFibGUgdG8gTlVMTCAoIzU0MzI1OSkuCi0KLTIwMDgtMDctMTQgMTc6MTc6NDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC5jOiBEb24ndCBwYXNzIE5VTEwgdGFnbGlzdHMgdG8gZ3N0X3RhZ19saXN0X2lzX2VtcHR5KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC5jOiAoZ3N0X3RhZ19pbmplY3Rfc3RhcnQpOgotCSAgRG9uJ3QgcGFzcyBOVUxMIHRhZ2xpc3RzIHRvIGdzdF90YWdfbGlzdF9pc19lbXB0eSgpLgotCi0yMDA4LTA3LTE0IDE3OjE1OjQyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLzogRG9uJ3QgdXNlIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxkZWMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYzogKHJ0cF9waXBlbGluZV9jcmVhdGUpLAotCSAgKHJ0cF9waXBlbGluZV9ydW4pOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOiAoc291cGh0dHBzcmNfc3VpdGUpOgotCSAgRG9uJ3QgdXNlIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgotCi0yMDA4LTA3LTE0IDE2OjI4OjI1ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiBBbGlnbiBkb2N1bWVudGF0aW9uIHdpdGggcmVhbGl0eS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICBBbGlnbiBkb2N1bWVudGF0aW9uIHdpdGggcmVhbGl0eS4KLQotMjAwOC0wNy0xNCAxMzoxMToxNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IEVBSV9BRERSRkFNSUxZIHdhcyBvYnNvbGV0ZWQgaW4gQlNEIGF0IHNvbWUgcG9pbnQuIERlZmluZSBpdCB0byB0aGUgb2xkIHZhbHVlICgxKSBpZiBpdCdzIG4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6Ci0JICBFQUlfQUREUkZBTUlMWSB3YXMgb2Jzb2xldGVkIGluIEJTRCBhdCBzb21lIHBvaW50LiBEZWZpbmUgaXQgdG8gdGhlCi0JICBvbGQgdmFsdWUgKDEpIGlmIGl0J3Mgbm90IGRlZmluZWQgd2hpY2ggc2hvdWxkIG5vdCBjYXVzZSBhbnkgcHJvYmxlbXMKLQkgIGFzIHdlJ3JlIHVzaW5nIGl0IGludGVybmFsIG9ubHkgYW55d2F5LgotCi0yMDA4LTA3LTE0IDEzOjAyOjQ4ICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBGaXggYnVpbGQgb2YgYXZpZGVtdXggb24gYmlnIGVuZGlhbiBhcmNoaXRlY3R1cmVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQWxlc3NhbmRybyBEZWNpbmEgPGFsZXNzYW5kcm8gYXQgbm52YSBkb3Qgb3JnPgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3JpZmZfcGFyc2VfdnBycCk6Ci0JICBGaXggYnVpbGQgb2YgYXZpZGVtdXggb24gYmlnIGVuZGlhbiBhcmNoaXRlY3R1cmVzLgotCi0yMDA4LTA3LTEwIDIwOjQ3OjU2ICswMDAwICBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc0BsY2MudWZjZy5lZHUuYnI+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQ29ycmVjdGx5IGRpc3Rpbmd1aXNoIDhiaXQgdnMgMTZiaXQgcmF3IGF1ZGlvLiAgRml4ZXMgIzU0MjQxMC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzIGF0IGxjYyBkb3QgdWZjZyBkb3QgZWR1IGRvdCBicj4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9hdWRpb19jYXBzKToKLQkgIENvcnJlY3RseSBkaXN0aW5ndWlzaCA4Yml0IHZzIDE2Yml0IHJhdyBhdWRpby4gIEZpeGVzICM1NDI0MTAuCi0KLTIwMDgtMDctMDggMjE6MDU6MTggKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IFNldCBwaXhlbC1hc3BlY3QtcmF0aW8gaW4gY2FwcyB1c2luZyBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgcHJvdmlkZWQgaW4gdHJhY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksCi0JICAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFNldCBwaXhlbC1hc3BlY3QtcmF0aW8gaW4gY2FwcyB1c2luZyBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQKLQkgIHByb3ZpZGVkIGluIHRyYWNrLgotCi0yMDA4LTA3LTA4IDEzOjU5OjUxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRG9uJ3QgaW5jbHVkZSBFUlJPUl9DRkxBR1MgaW4gR1NUX0NYWEZMQUdTIGFzIGl0IG1pZ2h0IGluY2x1ZGUgZmxhZ3MgdGhhdCBhcmUgaW52YWxpZCBmb3IgQysrLiBGaXhlcyBidS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIERvbid0IGluY2x1ZGUgRVJST1JfQ0ZMQUdTIGluIEdTVF9DWFhGTEFHUyBhcyBpdCBtaWdodCBpbmNsdWRlCi0JICBmbGFncyB0aGF0IGFyZSBpbnZhbGlkIGZvciBDKysuIEZpeGVzIGJ1ZyAjNTE2NTA5LgotCi0yMDA4LTA3LTA4IDEyOjUxOjM0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIERvbid0IHVzZSBkZWNsYXJhdGlvbnMgYWZ0ZXIgc3RhdGVtZW50cyBhbmQgdmFyaWFibGUgbGVuZ3RoIGFycmF5cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfdXJpX3NldF91cmkpOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogKGdzdF9zcGVleF9lbmNfc2lua19nZXRjYXBzKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19maXhhdGUpOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvZGVtby5jOiAobWVzc2FnZV9oYW5kbGVyKToKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1hdWRpb3Rlc3QuYzogKG1lc3NhZ2VfaGFuZGxlcik6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmM6IChtZXNzYWdlX2hhbmRsZXIpOgotCSAgRG9uJ3QgdXNlIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzIGFuZCB2YXJpYWJsZSBsZW5ndGggYXJyYXlzLgotCi0yMDA4LTA3LTA3IDIxOjI4OjU4ICswMDAwICBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgotCi0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IFRyeSBwcm9ncmVzc2l2ZSB2aWRlbyBpZiBpbnRlcmxhY2VkIGZhaWxzLiBGaXhlcyBidWcgIzU0MTk1NiBhbmQgdGhlIHVzYWdlIG9mIHY0bDJzcmMgb24gT0xQQy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IERhbmllbCBEcmFrZSA8ZHNkIGF0IGdlbnRvbyBkb3Qgb3JnPgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19zZXRfY2FwdHVyZSksCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X25lYXJlc3Rfc2l6ZSk6Ci0JICBUcnkgcHJvZ3Jlc3NpdmUgdmlkZW8gaWYgaW50ZXJsYWNlZCBmYWlscy4gRml4ZXMgYnVnICM1NDE5NTYKLQkgIGFuZCB0aGUgdXNhZ2Ugb2YgdjRsMnNyYyBvbiBPTFBDLgotCi0yMDA4LTA3LTA3IDE1OjM0OjEyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS4qOiBSZXZlcnQgbGFzdCBjaGFuZ2U6IE9ubHkgdGhlIGppdHRlcmJ1ZmZlciBpcyBhYmxlIHRvIGNvbnZlcnQgUlRQIHRvCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6IChnc3RfcnRwX3NwZWV4X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfc3BlZXhfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5oOgotCSAgUmV2ZXJ0IGxhc3QgY2hhbmdlOiBPbmx5IHRoZSBqaXR0ZXJidWZmZXIgaXMgYWJsZSB0byBjb252ZXJ0IFJUUCB0bwotCSAgR3N0cmVhbWVyIHRpbWVzdGFtcHMgYW5kIG5vcm1hbCAoZGUpcGF5bG9hZGVycyBzaG91bGQgc2ltcGx5IGNvcHkgaXQuCi0JICBSZW9wZW5zIGJ1ZyAjNTQxNzg3LgotCi0yMDA4LTA3LTA3IDEwOjMwOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmM6IEluY2x1ZGUgc3RkbGliLmggZm9yIGF0b2koKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOgotCSAgSW5jbHVkZSBzdGRsaWIuaCBmb3IgYXRvaSgpLgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICBVc2UgZmxvYXRpbmcgcG9pbnQgbWF0aCBmb3IgbGF0ZW5jaWVzIDwgMCBzZWMgaW4gbG9nIG91dHB1dC4KLQotMjAwOC0wNy0wNyAxMDoxNjowNyArMDAwMCAgVG9tYXN6IEdyb2JlbG55IDx0b21hc3pAZ3JvYmVsbnkub3N3aWVjZW5pYS5uZXQ+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS4qOiBUYWtlIHRpbWVzdGFtcCBmcm9tIHRoZSBSVFAgcGFja2V0IGFzIGEgZmlyc3Qgc3RlcCB0byBmaXggcHJvYmxlbXMgd2l0aCB0cmFuc21pc3Npb24gb3Zlci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVG9tYXN6IEdyb2JlbG55IDx0b21hc3ogYXQgZ3JvYmVsbnkgZG90IG9zd2llY2VuaWEgZG90IG5ldD4KLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6IChnc3RfcnRwX3NwZWV4X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfc3BlZXhfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5oOgotCSAgVGFrZSB0aW1lc3RhbXAgZnJvbSB0aGUgUlRQIHBhY2tldCBhcyBhIGZpcnN0IHN0ZXAgdG8gZml4IHByb2JsZW1zCi0JICB3aXRoIHRyYW5zbWlzc2lvbiBvdmVyIFJUUCB3aGVuIHRoZSBuZXR3b3JrIGlzIG5vdCByZWxpYWJsZS4KLQkgIEZpeGVzIGJ1ZyAjNTQxNzg3LgotCi0yMDA4LTA3LTA1IDE5OjAxOjI4ICswMDAwICBUZXJvIFNhYXJuaSA8dGVyby5zYWFybmlAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy5jOiBGaXggcGFyc2luZyBvZiB1ZHA6Ly8gVVJJcyBjb250YWluaW5nIElQdjYgYWRkcmVzc2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVGVybyBTYWFybmkgPHRlcm8gZG90IHNhYXJuaSBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19zZXRfdXJpKToKLQkgIEZpeCBwYXJzaW5nIG9mIHVkcDovLyBVUklzIGNvbnRhaW5pbmcgSVB2NiBhZGRyZXNzZXMuCi0JICBGaXhlcyBidWcgIzU0MTY1MC4KLQotMjAwOC0wNy0wNCAyMDo0MzowNyArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiBEbyBub3QgbGVhayBpbmNvbWluZyBidWZmZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfY2hhaW4pOgotCSAgRG8gbm90IGxlYWsgaW5jb21pbmcgYnVmZmVycy4KLQotMjAwOC0wNy0wMyAxOToyNzo1MyArMDAwMCAgRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGdtYWlsLmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggYnVpbGQgb2YgdGhlIFJUUCBwbHVnaW4gd2l0aCBtaW5ndzMyIGJ5IGxpbmtpbmcgdG8gd3MyXzMyIGZvciBodG9ucygpIGFuZCBodG9ubCgpLiBGaXhlcyBidWcgIzU0MTQxMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4gZG90IGxlc3BpYXUgYXQgZ21haWwgZG90IGNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4IGJ1aWxkIG9mIHRoZSBSVFAgcGx1Z2luIHdpdGggbWluZ3czMiBieSBsaW5raW5nIHRvIHdzMl8zMgotCSAgZm9yIGh0b25zKCkgYW5kIGh0b25sKCkuIEZpeGVzIGJ1ZyAjNTQxNDEyLgotCi0yMDA4LTA3LTAyIDA5OjUxOjE2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBIYW5kbGUgcG9zaXRpb24gYW5kIGR1cmF0aW9uIHF1ZXJ5IGluIERFRkFVTFQgZm9ybWF0IGlmIHRoZSBwYWQncyB0cmFjayBoYXMgYSBkZWZhdWx0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2NsYXNzX2luaXQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwgKGdzdF9tYXRyb3NrYV9kZW11eF9xdWVyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2VsZW1lbnRfcXVlcnkpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQpOgotCSAgSGFuZGxlIHBvc2l0aW9uIGFuZCBkdXJhdGlvbiBxdWVyeSBpbiBERUZBVUxUIGZvcm1hdCBpZiB0aGUKLQkgIHBhZCdzIHRyYWNrIGhhcyBhIGRlZmF1bHQgZnJhbWUgZHVyYXRpb24gc2V0LgotCSAgRml4IHNlZWtpbmcgbm93IHRoYXQgdGhlIHNlZ21lbnQncyBkdXJhdGlvbiBkb2Vzbid0IGNvbnRhaW4gdGhlCi0JICAocG9zc2libHkgd3Jvbmcgb3IgaW5hY2N1cmF0ZSkgZHVyYXRpb24gb2YgdGhlIE1hdHJvc2thIGZpbGUuCi0KLTIwMDgtMDctMDIgMDk6MDQ6NTAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiBVc2UgTkFOIGNvbnN0YW50IGluc3RlYWQgb2YgMC4wLzAuMCBpZiBwb3NzaWJsZS4gTkFOIGlzIGRlZmluZWQgaW4gbWF0aC5oIGV4Y2VwdCBvbiBNU1ZDIHdoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiAoX2V4dDJkYmwpOgotCSAgVXNlIE5BTiBjb25zdGFudCBpbnN0ZWFkIG9mIDAuMC8wLjAgaWYgcG9zc2libGUuIE5BTiBpcyBkZWZpbmVkCi0JICBpbiBtYXRoLmggZXhjZXB0IG9uIE1TVkMgd2hlcmUgaXQgaXMgZGVmaW5lZCBpbiB4bWF0aC5oLgotCSAgRml4ZXMgY29tcGlsYXRpb24gd2l0aCBNU1ZDLgotCi0yMDA4LTA3LTAyIDA4OjU3OjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC4qOiBEb24ndCBzZXQgdGhlIHNlZ21lbnQgZHVyYXRpb24gdG8gdGhlIGR1cmF0aW9uIGZyb20gdGhlIE1hdHJvc2thIGhlYWRlciBhcyB0aGlzIHZhbHVlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZm8pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wX3N0cmVhbV9wYXJzZV9pZCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgRG9uJ3Qgc2V0IHRoZSBzZWdtZW50IGR1cmF0aW9uIHRvIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBNYXRyb3NrYQotCSAgaGVhZGVyIGFzIHRoaXMgdmFsdWUgY291bGQgYmUgd3JvbmcgYW5kIGlzIGp1c3QgaW5mb3JtYXRpb25hbC4KLQotMjAwOC0wNy0wMiAwODo0NzowMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogSWYgbm8gVHJhY2tzIGVsZW1lbnQgaXMgZm91bmQgdW50aWwgdGhlIGZpcnN0IENsdXN0ZXIgaXMgZm91bmQgc2VhcmNoIGl0IGFuZCBlcnJvciBvdXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW1fcGFyc2VfaWQpOgotCSAgSWYgbm8gVHJhY2tzIGVsZW1lbnQgaXMgZm91bmQgdW50aWwgdGhlIGZpcnN0IENsdXN0ZXIgaXMgZm91bmQKLQkgIHNlYXJjaCBpdCBhbmQgZXJyb3Igb3V0IGlmIG5vbmUgaXMgZm91bmQgaW4gdGhlIGNvbXBsZXRlIGZpbGUuCi0KLTIwMDgtMDctMDIgMDg6MTQ6MzUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IFJlc3luYyBub24tc3VidGl0bGUgdHJhY2tzIHRvbyBpZiBhIHRvbyBsYXJnZSBnYXAgY29tcGFyZWQgdG8gb3RoZXIgdHJhY2tzIGlzIGRldGVjdGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3N5bmNfc3RyZWFtcyk6Ci0JICBSZXN5bmMgbm9uLXN1YnRpdGxlIHRyYWNrcyB0b28gaWYgYSB0b28gbGFyZ2UgZ2FwIGNvbXBhcmVkIHRvIG90aGVyCi0JICB0cmFja3MgaXMgZGV0ZWN0ZWQuCi0KLTIwMDgtMDctMDEgMTM6Mjg6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBBZGQgcmF3IHZpZGVvIHBheSBhbmQgZGVwYXlsb2FkZXJzLCBzZWUgUkZDNDE3NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jOiAoZ3N0X3J0cF92cmF3X2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF92cmF3X2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF92cmF3X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfdnJhd19kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfdnJhd19kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX3ZyYXdfZGVwYXlfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX3ZyYXdfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuYzogKGdzdF9ydHBfdnJhd19wYXlfZ2V0X3R5cGUpLAotCSAgKGdzdF9ydHBfdnJhd19wYXlfYmFzZV9pbml0KSwgKGdzdF9ydHBfdnJhd19wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF92cmF3X3BheV9pbml0KSwgKGdzdF9ydHBfdnJhd19wYXlfZmluYWxpemUpLAotCSAgKGdzdF9ydHBfdnJhd19wYXlfc2V0Y2FwcyksIChnc3RfcnRwX3ZyYXdfcGF5X2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9ydHBfdnJhd19wYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZyYXdwYXkuaDoKLQkgIEFkZCByYXcgdmlkZW8gcGF5IGFuZCBkZXBheWxvYWRlcnMsIHNlZSBSRkM0MTc1LgotCi0yMDA4LTA2LTMwIDIyOjUzOjM5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogRG9uJ3QgcmV0dXJuIEdTVF9GTE9XX0VSUk9SIHdoZW4gYnVmZmVyX2FsbG9jIGZhaWxzIC0gcmV0dXJuIHdoYXRldmVyIGl0IHJldHVybmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICBEb24ndCByZXR1cm4gR1NUX0ZMT1dfRVJST1Igd2hlbiBidWZmZXJfYWxsb2MgZmFpbHMgLSByZXR1cm4KLQkgIHdoYXRldmVyIGl0IHJldHVybmVkLgotCi0yMDA4LTA2LTI5IDE5OjUyOjUxICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L2F2aS9hdmktaWRzLmg6IEFkZCB2cHJwIGNodW5rIHJlbGF0ZWQgc3RydWN0dXJlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2F2aS1pZHMuaDoKLQkgIEFkZCB2cHJwIGNodW5rIHJlbGF0ZWQgc3RydWN0dXJlcy4KLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9yaWZmX3BhcnNlX3ZwcnApLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKToKLQkgIFBhcnNlIG9wdGlvbmFsIHZwcnAgY2h1bmsgYW5kIGFkZCBjYWxjdWxhdGVkIHBpeGVsLWFzcGVjdC1yYXRpbwotCSAgdG8gY2Fwcy4gIEZpeGVzICM1Mzk0ODIuCi0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4Lmg6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9wYWRfcmVzZXQpLAotCSAgKGdzdF9hdmlfbXV4X3ZpZHNpbmtfc2V0X2NhcHMpLCAoZ3N0X2F2aV9tdXhfcmlmZl9nZXRfYXZpX2hlYWRlcik6Ci0JICBBZGQgYSB2cHJwIGNodW5rIGlmIG5vbi10cml2YWwgcGl4ZWwtYXNwZWN0LXJhdGlvIHByb3ZpZGVkIGluIGNhcHMuCi0KLTIwMDgtMDYtMjggMTk6MzE6NDYgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYzogQWRqdXN0IGF2aW11eCB1bml0IHRlc3QgYWNjb3JkaW5nIHRvIGluY3JlYXNlZCBzdHJlYW1oZWFkZXIgc2l6ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYzogKGNoZWNrX2F2aW11eF9wYWQpOgotCSAgQWRqdXN0IGF2aW11eCB1bml0IHRlc3QgYWNjb3JkaW5nIHRvIGluY3JlYXNlZCBzdHJlYW1oZWFkZXIgc2l6ZS4KLQotMjAwOC0wNi0yNyAxODoxMTowMSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQWRkIERpcmFjIHN0cmVhbSB0eXBlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgRGlyYWMgc3RyZWFtIHR5cGUKLQotMjAwOC0wNi0yNyAxNToyNTowMCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4Lio6IEFkZCA4IGJ5dGVzIHRvIGN1cnJlbnQgc3RyZWFtaGVhZGVyIHRvIG1ha2UgZm9yIGEgY29tcGxldGUgb25lIGFuZCB0byBtYWtlIG1vcmUgcGxheWVycyBoYXBweS4gIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyKToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguaDoKLQkgIEFkZCA4IGJ5dGVzIHRvIGN1cnJlbnQgc3RyZWFtaGVhZGVyIHRvIG1ha2UgZm9yIGEgY29tcGxldGUgb25lCi0JICBhbmQgdG8gbWFrZSBtb3JlIHBsYXllcnMgaGFwcHkuICBGaXhlcyAjNTE5NDYwLgotCi0yMDA4LTA2LTI2IDE2OjM2OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IERvbid0IGluY2x1ZGUgdW51c2VkIGdzdHY0bDJ4b3ZlcmxheS5oLiBGaXhlcyBidWlsZCBpbiBjYXNlIHdoZXJlIFgxMSBoZWFkZXJzIGFyZSBub3QgaW5zdGFsbGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo6Ci0JICBEb24ndCBpbmNsdWRlIHVudXNlZCBnc3R2NGwyeG92ZXJsYXkuaC4gRml4ZXMgYnVpbGQKLQkgIGluIGNhc2Ugd2hlcmUgWDExIGhlYWRlcnMgYXJlIG5vdCBpbnN0YWxsZWQuCi0KLTIwMDgtMDYtMjYgMTA6MDc6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9kdi9nc3Rkdi5jOiBGaXggY29tcGlsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2LmM6IChwbHVnaW5faW5pdCk6Ci0JICBGaXggY29tcGlsYXRpb24uCi0KLTIwMDgtMDYtMjYgMDk6Mzc6MjMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9kdi9nc3Rkdi5jOiBNYXJraW5nIHJhbmsgb2YgZHZkZWMgYXMgR1NUX1JBTktfTUFSR0lOQUwgc2luY2UgaXQncyB0aGUgc2xvd2VzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3Rkdi5jOiAocGx1Z2luX2luaXQpOgotCSAgTWFya2luZyByYW5rIG9mIGR2ZGVjIGFzIEdTVF9SQU5LX01BUkdJTkFMIHNpbmNlIGl0J3MgdGhlIHNsb3dlc3QKLQkgIERWIGRlY29kZXIgYXZhaWxhYmxlLgotCSAgRml4ZXMgIzUzMjM5MwotCi0yMDA4LTA2LTI1IDA4OjEyOjE4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IENhbGwgZ2V0c29ja25hbWUoKSBhZnRlciB0aGUgY2FsbCB0byBiaW5kKCkgdG8gZ2V0IHVwZGF0ZWQgdmFsdWVzIGZvciB0aGUgcG9ydCwgZXRjLiBUaGlzIGZpeGVzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX3N0YXJ0KToKLQkgIENhbGwgZ2V0c29ja25hbWUoKSBhZnRlciB0aGUgY2FsbCB0byBiaW5kKCkgdG8gZ2V0IHVwZGF0ZWQgdmFsdWVzCi0JICBmb3IgdGhlIHBvcnQsIGV0Yy4gVGhpcyBmaXhlcyB0aGUgdXNhZ2Ugb2YgdWRwc3JjIG9uIGFub255bW91cwotCSAgYmluZGluZyBhbmQgaXQncyB1c2FnZSBieSBydHNwc3JjLiBGaXhlcyBidWdzICM1MzkzNzIsICM1Mzk1NDguCi0JICBUaGFua3MgdG8gQXVyZWxpZW4gR3JpbWF1ZCBmb3IgcG9pbnRpbmcgb3V0IHRoZSBvYnZpb3VzIGZpeC4KLQotMjAwOC0wNi0yNSAwNzo1NzoyNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2cGFjay5jOiBSZW1vdmUgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gaWRlbnRpdHkgdGhhdCBpcyBmaXhlZCBpbiAwLjEwLjIwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy93YXZwYWNrLmM6IChidXNfaGFuZGxlcik6Ci0JICBSZW1vdmUgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gaWRlbnRpdHkgdGhhdCBpcyBmaXhlZCBpbiAwLjEwLjIwLgotCi0yMDA4LTA2LTI1IDA2OjM2OjU4ICswMDAwICBKYXNvbiBEb25lbmZlbGQgPEJ1Z1ppbGxhQHp4MmM0LmNvbT4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogRml4IEhUVFAgYXV0aCBzdXBwb3J0IHdpdGggdXNlci9wYXNzd29yZCBwYXNzZWQgdmlhIHRoZSBVUkkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKYXNvbiBEb25lbmZlbGQgPEJ1Z1ppbGxhIGF0IHp4MmM0IGRvdCBjb20+Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IChnc3Rfc291cF9odHRwX3NyY19nb3RfaGVhZGVyc19jYik6Ci0JICBGaXggSFRUUCBhdXRoIHN1cHBvcnQgd2l0aCB1c2VyL3Bhc3N3b3JkIHBhc3NlZCB2aWEgdGhlIFVSSS4KLQkgIEZpeGVzIGJ1ZyAjNTQwMDY3LgotCi0yMDA4LTA2LTI0IDE1OjQyOjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IERlcGVuZCBvbiByZWxlYXNlZCB2ZXJzaW9ucyBvZiBjb3JlIGFuZCAtYmFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEZXBlbmQgb24gcmVsZWFzZWQgdmVyc2lvbnMgb2YgY29yZSBhbmQgLWJhc2UuCi0KLTIwMDgtMDYtMjMgMTY6MTM6NDAgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogRml4IGJ1Z2d5IGZvcm1hdCBzdHJpbmdzIGluIG1hY3Jvcy4gKG1ha2VzIGl0IGJ1aWxkIG9uIE9TIFggYWdhaW4uLi4pCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMDYtMjMgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9yZWFkX3RyYWNrX2VuY29kaW5nKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cF9vcl9zaW1wbGVibG9jayk6IEZpeCBidWdneQotCSAgZm9ybWF0IHN0cmluZ3MgaW4gbWFjcm9zLiAobWFrZXMgaXQgYnVpbGQgb24gT1MgWCBhZ2Fpbi4uLikKLQotMjAwOC0wNi0yMCAxNjoyNDoxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC86IEFkZGVkIGRlYnVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICBBZGRlZCBkZWJ1Zy4KLQotMjAwOC0wNi0yMCAxNToyMTo1OSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBzd2l0Y2ggdjRsMnNyYyBmcm9tIGV4cGVyaW1lbnRhbCB0byBub3JtYWwgYnVpbGQuIEZpeGVzICM1MzY4MzEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc3dpdGNoIHY0bDJzcmMgZnJvbSBleHBlcmltZW50YWwgdG8gbm9ybWFsIGJ1aWxkLiBGaXhlcyAjNTM2ODMxCi0KLTIwMDgtMDYtMTkgMTE6MjQ6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwZzcyNnBheS5jOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHNvIHRoYXQgd2UgY2FuIGNvbXBpbGUgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6IChnc3RfcnRwX2c3MjZfcGF5X3NldGNhcHMpOgotCSAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBzbyB0aGF0IHdlIGNhbiBjb21waWxlIGFnYWluLgotCi0yMDA4LTA2LTE5IDExOjA2OjI5ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6IE5vIG5lZWQgdG8gY2hlY2sgZm9yIGF1ZGlvL0c3MjMgYW5kIGF1ZGlvLzMyS0FEUENNIGhlcmUgYXMgdGhleSBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzogKGdzdF9ydHBfZzcyNl9wYXlfc2V0Y2Fwcyk6Ci0JICBObyBuZWVkIHRvIGNoZWNrIGZvciBhdWRpby9HNzIzIGFuZCBhdWRpby8zMktBRFBDTSBoZXJlIGFzIHRoZXkgYXJlCi0JICBubyBsb25nZXIgc3VwcG9ydGVkLgotCi0yMDA4LTA2LTE5IDEwOjU4OjU3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiBVc2UgR19HSU5UNjRfQ09OU1RBTlQsIHRoaXMgZml4ZXMgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uIGZpbGVzIHdpdGhvdXQga25vd24gbGVuZ3RoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfcmVzZXQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3NyY19xdWVyeSksIChnc3Rfd2F2cGFja19wYXJzZV9jcmVhdGVfc3JjX3BhZCk6Ci0JICBVc2UgR19HSU5UNjRfQ09OU1RBTlQsIHRoaXMgZml4ZXMgdGhlIGR1cmF0aW9uIHF1ZXJ5IG9uIGZpbGVzIHdpdGhvdXQKLQkgIGtub3duIGxlbmd0aC4KLQotMjAwOC0wNi0xOSAxMDo0ODo1NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvOiBGaXggZGVtdXhpbmcgb2YgV2F2UGFjayBmaWxlcy4gTXV4aW5nIGlzIHN0aWxsIGJyb2tlbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3d2cGtfaGVhZGVyKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIEZpeCBkZW11eGluZyBvZiBXYXZQYWNrIGZpbGVzLiBNdXhpbmcgaXMgc3RpbGwgYnJva2VuLgotCi0yMDA4LTA2LTE5IDA5OjEyOjU1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IEFkZCBhICJ2ZnVuYyIgdG8gdGhlIHRyYWNrIGNvbnRleHQgZm9yIHBvc3Rwcm9jZXNzaW5nIGZyYW1lcyBhbmQgY29udmVydCB0aGUgd2F2cGFjayBhbmQgc3VidGl0bGUgcG9zdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX3RyYWNrX2ZyZWUpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfbXBlZ19zZXFfaGVhZGVyKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3d2cGtfaGVhZGVyKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfc3VidGl0bGVfYnVmZmVyKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cF9vcl9zaW1wbGVibG9jayksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMpLCAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgQWRkIGEgInZmdW5jIiB0byB0aGUgdHJhY2sgY29udGV4dCBmb3IgcG9zdHByb2Nlc3NpbmcgZnJhbWVzIGFuZAotCSAgY29udmVydCB0aGUgd2F2cGFjayBhbmQgc3VidGl0bGUgcG9zdHByb2Nlc3NpbmcgdG8gdGhpcyB2ZnVuYy4KLQkgIENvcHkgYnVmZmVyIGZsYWdzIGluIHRob3NlIGZ1bmN0aW9ucyB0byB0aGUgbmV3IGJ1ZmZlcnMgdG9vLgotCSAgUGFyc2UgQ29kZWNTdGF0ZSBlbGVtZW50cyBvZiBCbG9ja3MuCi0JICBBZGQgYSBwb3N0cHJvY2Vzc2luZyBmdW5jdGlvbiBmb3IgTVBFRyB2aWRlbyB0aGF0IGFkZHMgdGhlIHNlcXVlbmNlCi0JICBoZWFkZXIgZnJvbSB0aGUgY29kZWMgcHJpdmF0ZSBkYXRhIG9yIGNvZGVjIHN0YXRlIHRvIHRoZSBmcmFtZXMgaWYKLQkgIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuCi0KLTIwMDgtMDYtMTkgMDg6MjI6MTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IElmIGEgZ2FwIG9mIG1vcmUgdGhhbiAxLzIgc2Vjb25kIGlzIGZvdW5kIGluIG9uZSBzdHJlYW0gc2VuZCBhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2spOgotCSAgSWYgYSBnYXAgb2YgbW9yZSB0aGFuIDEvMiBzZWNvbmQgaXMgZm91bmQgaW4gb25lIHN0cmVhbSBzZW5kIGEKLQkgIE5FV1NFR01FTlQgZXZlbnQgdG8gbm90IHN0YWxsIHRoZSBwaXBlbGluZSBpZiB0aGUgZ2FwIGlzIHRvbyBsYXJnZS4KLQkgIFRoaXMgYWxzbyBmaXhlcyBNYXRyb3NrYSBmaWxlcyB3aGVyZSB0aGUgZmlyc3QgYnVmZmVyIGRvZXNuJ3Qgc3RhcnQKLQkgIGF0IHRpbWVzdGFtcCAwLiBGaXhlcyBidWcgIzQyOTMyMi4KLQkgIFRoZSBkdXJhdGlvbiBvZiBhIGJsb2NrIGlzIHRoZSBkZWZhdWx0IGR1cmF0aW9uIG11bHRpcGxpZWQgd2l0aCB0aGUKLQkgIG51bWJlciBvZiBsYWNlcy4gRXZlcnkgbGFjZSBpcyBvbmUgZnJhbWUgYW5kIHRoZSBkZWZhdWx0IGR1cmF0aW9uCi0JICBpcyB0aGUgZHVyYXRpb24gb2Ygb25lIGZyYW1lLiBUaGlzIGZpeGVzIHBsYXliYWNrIG9mIGZpbGVzIHRoYXQgdXNlCi0JICBsYWNpbmcgZm9yIHNvbWUgdHJhY2tzLgotCi0yMDA4LTA2LTE4IDIwOjA5OjI4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBVcGRhdGUgRklYTUUvVE9ET3MgYW5kIG9ubHkgaWdub3JlIEVPUyBhdCB0aGUgY2VudHJhbCwgaW1wb3J0YW50IHBsYWNlIGluc3RlYWQgb2Ygc2V2ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9jb250ZW50c19zZWVrZW50cnkpOgotCSAgVXBkYXRlIEZJWE1FL1RPRE9zIGFuZCBvbmx5IGlnbm9yZSBFT1MgYXQgdGhlIGNlbnRyYWwsIGltcG9ydGFudCBwbGFjZQotCSAgaW5zdGVhZCBvZiBzZXZlcmFsIHBsYWNlcy4KLQotMjAwOC0wNi0xOCAxNjo1NTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmM6IEZpeCBjYXBzLCBTZWUgIzUzODg5MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYzoKLQkgIEZpeCBjYXBzLCBTZWUgIzUzODg5MS4KLQotMjAwOC0wNi0xOCAxMDoyODoyMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogSW1wcm92ZSBkZWJ1ZyBvdXRwdXQgZXZlcnl3aGVyZSBhbmQgZml4IHRoZSBFT1MgbG9naWMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdHJlYW1fZnJvbV9udW0pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9lbmNvZGluZ19jbXApLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9lbmNvZGluZ19vcmRlcl91bmlxdWUpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9yZWFkX3RyYWNrX2VuY29kaW5nKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcmVhZF90cmFja19lbmNvZGluZ3MpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF90cmFja251bWJlcl91bmlxdWUpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwgKGdzdF9tYXRyb3NrYV9kZW11eF9pbml0X3N0cmVhbSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX3RyYWNrcyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4X2N1ZXRyYWNrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXhfcG9pbnRlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9pbmZvKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGFfaWRfc2ltcGxlX3RhZyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX21ldGFkYXRhX2lkX3RhZyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX21ldGFkYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYXR0YWNoZWRfZmlsZSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2F0dGFjaG1lbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2hhcHRlcnMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zeW5jX3N0cmVhbXMpLCAoZ3N0X21hdHJvc2thX2RlY29kZV9idWZmZXIpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2x1c3RlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW1fcGFyc2VfaWQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wKToKLQkgIEltcHJvdmUgZGVidWcgb3V0cHV0IGV2ZXJ5d2hlcmUgYW5kIGZpeCB0aGUgRU9TIGxvZ2ljLgotCSAgQ2hlY2sgdGhlIHZhbHVlcyBvZiB0aGUgQ29udGVudEVuY29kaW5nIGVsZW1lbnRzIG1vcmUgc3RyaWN0bHkgYW5kCi0JICBkb24ndCB1c2UgdHJhY2tzIGZvciB3aGljaCBpdCdzIGludmFsaWQuCi0JICBDaGVjayB0aGF0IHRoZSB0cmFjayBudW1iZXIgaXMgdW5pcXVlIGZvciB0aGlzIHN0cmVhbS4KLQkgIENoZWNrIHRoYXQgc2VlayBwb3NpdGlvbnMgYXJlIGJlbG93IEdfTUFYSU5UNjQgYXMgb3VyIHNlZWtzIGFyZQotCSAgaW50NjQtYmFzZWQgYW5kIG92ZXJmbG93cyB3aWxsIGZhaWwgYmFkbHkuCi0JICBBZnRlciBzZWVrcyBhbHNvIGRvbid0IHB1c2ggU2ltcGxlQmxvY2tzIHVudGlsIHRoZSBmaXJzdCBvbmUKLQkgIGNvbnRhaW5pbmcgYSBrZXlmcmFtZSBpcyBmb3VuZC4gQmVmb3JlIHRoaXMgd2FzIGRvbmUgb25seSBmb3Igbm9ybWFsCi0JICBCbG9ja3MuCi0JICBVcGRhdGUgc29tZSBGSVhNRS9UT0RPcy4KLQkgICogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiAoZ3N0X2VibWxfcmVhZF9wZWVrX2J5dGVzKSwKLQkgIChnc3RfZWJtbF9yZWFkX3V0ZjgpLCAoZ3N0X2VibWxfcmVhZF9oZWFkZXIpOgotCSAgSW1wcm92ZSBkZWJ1ZyBvdXRwdXQuCi0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF92aWRlb19jb250ZXh0KToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF92aWRlb19wYWRfc2V0Y2Fwcyk6Ci0JICBSZW1vdmUgZXllIG1vZGUgYW5kIGRvbid0IHBhcnNlIGl0IGFueW1vcmUuIFdlIGNhbid0IHVzZSB0aGF0Ci0JICBpbmZvcm1hdGlvbiBpbiBHU3RyZWFtZXIgeWV0IHNvIGl0J3MgdXNlbGVzcy4KLQotMjAwOC0wNi0xOCAxMDoxMjo1NyArMDAwMCAgbWVyc2FkIDxtZXJzYWRAYXhpcy5jb20+Ci0KLQkgIGdzdC9ydHAvOiBBZGRlZCBHNzI2IHBheS9kZXBheWxvYWRlcnMuIEZpeGVzICM1Mzg4OTEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBtZXJzYWQgPG1lcnNhZCBhdCBheGlzIGRvdCBjb20+Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmM6IChnc3RfcnRwX2c3MjZfZGVwYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX2c3MjZfZGVwYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX2c3MjZfZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9nNzI2X2RlcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9nNzI2X2RlcGF5X3Byb2Nlc3MpLAotCSAgKGdzdF9ydHBfZzcyNl9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZzcyNnBheS5jOiAoZ3N0X3J0cF9nNzI2X3BheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfZzcyNl9wYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX2c3MjZfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfZzcyNl9wYXlfc2V0Y2FwcyksIChnc3RfcnRwX2c3MjZfcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBnNzI2cGF5Lmg6Ci0JICBBZGRlZCBHNzI2IHBheS9kZXBheWxvYWRlcnMuIEZpeGVzICM1Mzg4OTEuCi0KLTIwMDgtMDYtMTcgMTA6MTQ6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL1VSTFM6IFNvbWUgbW9yZSB1cmxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL1VSTFM6Ci0JICBTb21lIG1vcmUgdXJscy4KLQkgICogZ3N0L3NtcHRlL2JhcmJveHdpcGVzLmM6Ci0JICBBZGQgYSBjb21tZW50Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaDoKLQkgIEZpeCB0eXBvLCBhZGQgYXVkaW9yZXNhbXBsZSB0byB0aGUgcGlwZWxpbmUuCi0KLTIwMDgtMDYtMTcgMTA6MDU6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9saWJtbmcvOiBTb21ld2hhdCBwb3J0IG1uZ2VuYyBhbmQgbW5nZGVjIHRvIDAuMTAuIERvZXMgbm90IHdvcmsgeWV0IGFuZCBoYXMgbWFueSBiaXRzIGlmZGVmZmVkIG91dCBzdGlsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlibW5nL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZy5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZ2RlYy5jOiAoZ3N0X21uZ19kZWNfYmFzZV9pbml0KSwKLQkgIChnc3RfbW5nX2RlY19jbGFzc19pbml0KSwgKGdzdF9tbmdfZGVjX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X21uZ19kZWNfaW5pdCksIChnc3RfbW5nX2RlY19zcmNfZ2V0Y2FwcyksIChnc3RfbW5nX2RlY19sb29wKSwKLQkgIChnc3RfbW5nX2RlY19nZXRfcHJvcGVydHkpLCAoZ3N0X21uZ19kZWNfc2V0X3Byb3BlcnR5KSwKLQkgIChtbmdkZWNfZXJyb3IpLCAobW5nZGVjX29wZW5zdHJlYW0pLCAobW5nZGVjX2Nsb3Nlc3RyZWFtKSwKLQkgIChnc3RfbW5nX2RlY19zaW5rX2V2ZW50KSwgKG1uZ2RlY19yZWFkZGF0YSksIChtbmdkZWNfc2V0dGltZXIpLAotCSAgKG1uZ2RlY19wcm9jZXNzaGVhZGVyKSwgKG1uZ2RlY19nZXRjYW52YXNsaW5lKSwgKG1uZ2RlY19yZWZyZXNoKSwKLQkgIChnc3RfbW5nX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZ2RlYy5oOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZ2VuYy5jOiAoZ3N0X21uZ19lbmNfYmFzZV9pbml0KSwKLQkgIChnc3RfbW5nX2VuY19jbGFzc19pbml0KSwgKGdzdF9tbmdfZW5jX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X21uZ19lbmNfaW5pdCksIChnc3RfbW5nX2VuY19jaGFpbiksCi0JICAoZ3N0X21uZ19lbmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9tbmdfZW5jX3NldF9wcm9wZXJ0eSk6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmg6Ci0JICBTb21ld2hhdCBwb3J0IG1uZ2VuYyBhbmQgbW5nZGVjIHRvIDAuMTAuIERvZXMgbm90IHdvcmsgeWV0IGFuZCBoYXMgbWFueQotCSAgYml0cyBpZmRlZmZlZCBvdXQgc3RpbGwuCi0KLTIwMDgtMDYtMTYgMTE6MzQ6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IFdoZW4gY29tcGFyaW5nIGluZGV4IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgdGltZSBjb21wYXJlIHRoZWlyIGJsb2NrIG51bWJlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9pbmRleF9jb21wYXJlKToKLQkgIFdoZW4gY29tcGFyaW5nIGluZGV4IGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgdGltZSBjb21wYXJlIHRoZWlyCi0JICBibG9jayBudW1iZXIuCi0KLTIwMDgtMDYtMTYgMTE6MzE6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2F0dGFjaGVkX2ZpbGUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2F0dGFjaGVkX2ZpbGUpCi0JICBJbml0IHZhcmlhYmxlIHRvIE5VTEwgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KLQotMjAwOC0wNi0xNiAxMDo1OTozOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvOiBQYXJzZSBBdHRhY2htZW50cyBhbmQgcG9zdCB0aGVtIGFzIEdTVF9UQUdfSU1BR0UgaWYgd2UgZGV0ZWN0IGl0IGFzIGltYWdlIGFuZCBvdGhlcndpc2UgYXMgR1NUX1RBR19BVFQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYXR0YWNoZWRfZmlsZSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2F0dGFjaG1lbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHNfc2Vla2VudHJ5KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW1fcGFyc2VfaWQpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOiAoZ3N0X21hdHJvc2thX3JlZ2lzdGVyX3RhZ3MpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS5jOiAocGx1Z2luX2luaXQpOgotCSAgUGFyc2UgQXR0YWNobWVudHMgYW5kIHBvc3QgdGhlbSBhcyBHU1RfVEFHX0lNQUdFIGlmIHdlIGRldGVjdAotCSAgaXQgYXMgaW1hZ2UgYW5kIG90aGVyd2lzZSBhcyBHU1RfVEFHX0FUVEFDSE1FTlQuIEluY2x1ZGUgZmlsZW5hbWUKLQkgIGFuZCBkZXNjcmlwdGlvbiBvZiB0aGUgYXR0YWNobWVudHMgaW4gdGhlIGNhcHMuIEZpeGVzIGJ1ZyAjNTM3NjIyLgotCi0yMDA4LTA2LTE2IDEwOjA5OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogQWRkIG1vZGUgcHJvcGVydHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IChnc3Rfc3BlZXhfZW5jX21vZGVfZ2V0X3R5cGUpLAotCSAgKGdzdF9zcGVleF9lbmNfY2xhc3NfaW5pdCksIChnc3Rfc3BlZXhfZW5jX3NpbmtfZ2V0Y2FwcyksCi0JICAoZ3N0X3NwZWV4X2VuY19nZXRfbGF0ZW5jeSksIChnc3Rfc3BlZXhfZW5jX2dldF9xdWVyeV90eXBlcyksCi0JICAoZ3N0X3NwZWV4X2VuY19zcmNfcXVlcnkpLCAoZ3N0X3NwZWV4X2VuY19pbml0KSwKLQkgIChnc3Rfc3BlZXhfZW5jX3NldHVwKSwgKGdzdF9zcGVleF9lbmNfcHVzaF9idWZmZXIpLAotCSAgKGdzdF9zcGVleF9lbmNfY2hhaW4pLCAoZ3N0X3NwZWV4X2VuY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zcGVleF9lbmNfc2V0X3Byb3BlcnR5KToKLQkgIEFkZCBtb2RlIHByb3BlcnR5LgotCSAgU29tZSBjbGVhbnVwcywgYWRkIG1vcmUgZGVidWcgaW5mby4KLQkgIEFkZCBsYXRlbmN5IHF1ZXJ5LgotCi0yMDA4LTA2LTE2IDA5OjU0OjI3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogUmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQgaW5zdGVhZCBvZiBHU1RfRkxPV19FUlJPUiBvbiBzaG9ydCByZWFkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX3BlZWtfYnl0ZXMpOgotCSAgUmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQgaW5zdGVhZCBvZiBHU1RfRkxPV19FUlJPUiBvbiBzaG9ydCByZWFkcy4KLQkgIElmIHdlIGdldCBsZXNzIGJ5dGVzIHRoYW4gcmVxdWVzdGVkIHdlIGNhbid0IGRvIGFueXRoaW5nIGV4Y2VwdCBkb2luZwotCSAgb3VyIEVPUyBsb2dpYy4KLQotMjAwOC0wNi0xNSAxOTowOTo1NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvOiBVc2UgYSBHQXJyYXkgZm9yIHN0b3JpbmcgdGhlIEN1ZSAoaS5lLiBzZWVrKSBpbmZvcm1hdGlvbiwgc3RvcmUgdGhlIEN1ZVRyYWNrUG9zaXRpb25zIGZvciBldmVyeSB0cmFjaywuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9yZXNldCksCi0JICAoZ3N0X21hdHJvc2thZGVtdXhfZG9faW5kZXhfc2VlayksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4X2N1ZXRyYWNrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXhfcG9pbnRlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2luZGV4X2NvbXBhcmUpLCAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGEpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgVXNlIGEgR0FycmF5IGZvciBzdG9yaW5nIHRoZSBDdWUgKGkuZS4gc2VlaykgaW5mb3JtYXRpb24sIHN0b3JlCi0JICB0aGUgQ3VlVHJhY2tQb3NpdGlvbnMgZm9yIGV2ZXJ5IHRyYWNrLCBzdG9yZSB0aGUgYmxvY2sgbnVtYmVyCi0JICBhbmQgb3B0aW1pemUgc2VhcmNoaW5nIGluIHRoZSBhcnJheSBieSBzb3J0aW5nIGl0IGFmdGVyIHRoZSBsYXN0Ci0JICBlbGVtZW50IHdhcyBhZGRlZC4KLQkgIEZpeCBhIHNtYWxsIG1lbW9yeSBsZWFrIHdoZW4gdHJ5aW5nIHRvIHBhcnNlIGEgdGFncyBlbGVtZW50IHRoYXQgd2FzCi0JICBhbHJlYWR5IHBhcnNlZC4KLQotMjAwOC0wNi0xNSAxNToyOToyOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lio6IERvbid0IHdyaXRlIGFub3RoZXIgU2Vla0hlYWQgd2hpY2ggaW5kZXhlcyBhbGwgQ2x1c3RlcnMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhpcyBpc24uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3Jlc2V0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KSwgKGdzdF9tYXRyb3NrYV9tdXhfZmluaXNoKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBEb24ndCB3cml0ZSBhbm90aGVyIFNlZWtIZWFkIHdoaWNoIGluZGV4ZXMgYWxsIENsdXN0ZXJzIHRvIHRoZSBlbmQgb2YKLQkgIHRoZSBmaWxlLiBUaGlzIGlzbid0IHVzZWZ1bCBmb3IgYW55dGhpbmcgYW5kIGp1c3QgaW5jcmVhc2VzIGZpbGVzaXplLgotCi0yMDA4LTA2LTE1IDE1OjAxOjMwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogUHJldmVudCB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyB3aGVuIHJlYWRpbmcgZmxvYXRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKF9leHQyZGJsKSwgKGdzdF9lYm1sX3JlYWRfZmxvYXQpOgotCSAgUHJldmVudCB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyB3aGVuIHJlYWRpbmcgZmxvYXRzLgotCi0yMDA4LTA2LTE1IDE0OjA4OjQxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IE1ha2Ugc3VyZSB0aGF0IGV2ZXJ5IFRhZ3MgZWxlbWVudCBpcyBvbmx5IHBhcnNlZCBvbmNlIGFuZCBpdCdzIGNvbnRhaW5pbmcgdGFncyBhcmUgb25seSBwb3N0ZWQgb25jZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YSk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgTWFrZSBzdXJlIHRoYXQgZXZlcnkgVGFncyBlbGVtZW50IGlzIG9ubHkgcGFyc2VkIG9uY2UgYW5kIGl0J3MKLQkgIGNvbnRhaW5pbmcgdGFncyBhcmUgb25seSBwb3N0ZWQgb25jZS4KLQotMjAwOC0wNi0xNSAwOTo0MzoyNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvOiBIYW5kbGUgRUJNTCBlbGVtZW50cyBsaWtlIFZvaWQgb3IgQ1JDMzIgaW4gdGhlIEVibWxSZWFkIGJhc2UgY2xhc3MgYWxyZWFkeS4gVGhleSdyZSBub3QgdXNlZnVsIGluIHRoZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9wZWVrX2lkKSwKLQkgIChnc3RfZWJtbF9yZWFkX2hlYWRlcik6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV90cmFja3MpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9pbmRleF9jdWV0cmFjayksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4X3BvaW50ZW50cnkpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9pbmRleCksIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5mbyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX21ldGFkYXRhX2lkX3NpbXBsZV90YWcpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YV9pZF90YWcpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2F0dGFjaG1lbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2hhcHRlcnMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2x1c3RlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW1fcGFyc2VfaWQpOgotCSAgSGFuZGxlIEVCTUwgZWxlbWVudHMgbGlrZSBWb2lkIG9yIENSQzMyIGluIHRoZSBFYm1sUmVhZCBiYXNlIGNsYXNzCi0JICBhbHJlYWR5LiBUaGV5J3JlIG5vdCB1c2VmdWwgaW4gdGhlIG1hdHJvc2thIHBhcnNlciBhbmQgb25seSBjYXVzZQotCSAgYWRkaXRpb25hbCBjb2RlLgotCi0yMDA4LTA2LTE0IDE1OjUxOjI1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IFJldmVyc2UgdGhlIGxldmVsIGxpc3QgYXMgd2UgdXN1YWxseSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBmaXJzdCBlbGVtZW50IG9yIHdhbnQgdG8gYWRkIGEgbmV3IGZpci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX2xldmVsX2ZyZWUpLAotCSAgKGdzdF9lYm1sX2ZpbmFsaXplKSwgKGdzdF9lYm1sX3JlYWRfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfZWJtbF9yZWFkX2VsZW1lbnRfbGV2ZWxfdXApLCAoZ3N0X2VibWxfcmVhZF9tYXN0ZXIpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHNfc2Vla2VudHJ5KToKLQkgIFJldmVyc2UgdGhlIGxldmVsIGxpc3QgYXMgd2UgdXN1YWxseSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZQotCSAgZmlyc3QgZWxlbWVudCBvciB3YW50IHRvIGFkZCBhIG5ldyBmaXJzdCBlbGVtZW50LiBIYXZpbmcgdGhlCi0JICBmaXJzdCBlbGVtZW50IHN0b3JlZCBhdCB0aGUgZW5kIGFuZCBjYWxsaW5nIGdfbGlzdF9sYXN0KCkgYW5kCi0JICBnX2xpc3RfYXBwZW5kKCkgaXMgbW9yZSBleHBlbnNpdmUuCi0JICBBbHNvIHVzZSBHU2xpY2UgZm9yIGFsbG9jYXRpbmcgdGhlIEdzdEVibWxMZXZlbCBzdHJ1Y3RzLgotCi0yMDA4LTA2LTEzIDIxOjEzOjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZGVidWcvZ3N0dGFnaW5qZWN0LmM6IERvbid0IHVucmVmIE5VTEwgdGFnbGlzdCBpbiBmaW5hbGl6ZS4gRG9uJ3QgdXNlIGMrKyBzdHlsZSBjb21tZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVidWcvZ3N0dGFnaW5qZWN0LmM6IChnc3RfdGFnX2luamVjdF9maW5hbGl6ZSksCi0JICAoZ3N0X3RhZ19pbmplY3RfY2xhc3NfaW5pdCksIChnc3RfdGFnX2luamVjdF9pbml0KToKLQkgIERvbid0IHVucmVmIE5VTEwgdGFnbGlzdCBpbiBmaW5hbGl6ZS4gRG9uJ3QgdXNlIGMrKyBzdHlsZQotCSAgY29tbWVudHMuCi0KLTIwMDgtMDYtMTMgMTk6MTQ6NDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thLzogVXNlIGdzdF92YWx1ZV9zZXJpYWxpemUoKSBhbmQgZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplKCkgZm9yIHRyYW5zZm9ybWluZyB0YWdzIGZyb20gc29tZSBHVHlwZSB0byBhIHN0cmluLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX21ldGFkYXRhX2lkX3NpbXBsZV90YWcpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3NpbXBsZV90YWcpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfZGF0YSk6Ci0JICBVc2UgZ3N0X3ZhbHVlX3NlcmlhbGl6ZSgpIGFuZCBnc3RfdmFsdWVfZGVzZXJpYWxpemUoKSBmb3IgdHJhbnNmb3JtaW5nCi0JICB0YWdzIGZyb20gc29tZSBHVHlwZSB0byBhIHN0cmluZyBhbmQgdGhlIG90aGVyIHdheSBhcm91bmQuIFRoZSBkZWZhdWx0Ci0JICB0cmFuc2Zvcm1hdGlvbnMgaW4gR0xpYiBkb24ndCBpbmNsdWRlIHRyYW5zZm9ybWF0aW9ucyBmcm9tIHN0cmluZyB0bwotCSAgbnVtYmVyIHR5cGVzLgotCi0yMDA4LTA2LTEzIDE5OjA3OjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC4qOiBPbmx5IHBhcnNlIFRyYWNrcywgU2Vla0hlYWQgYW5kIFNlZ21lbnRJbmZvIGVsZW1lbnRzIG9uY2UgYnV0IGFsbG93Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV90cmFja3MpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9pbmRleCksIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5mbyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2F0dGFjaG1lbnRzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2hhcHRlcnMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9jb250ZW50c19zZWVrZW50cnkpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wX3N0cmVhbV9wYXJzZV9pZCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgT25seSBwYXJzZSBUcmFja3MsIFNlZWtIZWFkIGFuZCBTZWdtZW50SW5mbyBlbGVtZW50cyBvbmNlIGJ1dCBhbGxvdwotCSAgVGFncyBtdWx0aXBsZSB0aW1lcy4gVGhlIGZpcnN0IG9uZXMgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25jZSBidXQgbXVzdAotCSAgY29udGFpbiB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSBmaXJzdCBmb3IgYmFja3VwIHB1cnBvc2VzIHNvIHdlIGlnbm9yZQotCSAgYWxsIGJ1dCB0aGUgZmlyc3Qgb25lLiBUYWdzIGNhbiBhcHBlYXIgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQKLQkgIGNvbnRlbnQuCi0JICBKdW1wIHRvIGFsbCBlbGVtZW50cyBleGNlcHQgQ2x1c3RlcnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gYQotCSAgU2Vla0hlYWQgdG8gbWFrZSBpdCBtb3JlIGxpa2VseSB0byBoYXZlIGFsbCByZXF1aXJlZCBpbmZvcm1hdGlvbnMKLQkgIGJlZm9yZSBnZXR0aW5nIHRvIHRoZSBmaXJzdCBDbHVzdGVycy4KLQkgIEFkZCBkdW1teSBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgQXR0YWNobWVudHMgYW5kIENoYXB0ZXJzLgotCi0yMDA4LTA2LTEzIDE0OjMzOjUyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9yZXBsYXlnYWluLzogTW9yZSBkb2MgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmM6Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jOgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5jOgotCSAgTW9yZSBkb2MgdXBkYXRlcy4KLQotMjAwOC0wNi0xMyAxMTo1OToyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXl0aHR2LnhtbAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLnNpZ25hbHM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHNhc3BkaWYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW1yd2IueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJheWVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJ6Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGF1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkeGFwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdHNkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHZiLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2ZHNwdS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mYWFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZhYWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmJkZXZzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZlc3RpdmFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZpbHRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHZkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mcmVlemUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3NtLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdGludGVybGFjZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWgyNjRwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1ldGFkYXRhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1tcy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb2RwbHVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWcyZW5jLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWc0dmlkZW9wYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tcGVndHNwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tcGVndmlkZW9wYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdXNlcGFjay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdXNpY2JyYWluei54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdmUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXl0aHR2LnhtbAotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmFzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5lb24ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbnNmZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW51dmRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zczQueG1sCi0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yYXdwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZWFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmZic3JjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNkbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2VsZWN0b3IueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc25kZmlsZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VuZHRvdWNoLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwY2RlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVlZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleHJlc2FtcGxlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXN0ZXJlby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zdWJlbmMueG1sCi0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10aW1pZGl0eS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10dGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmNkc3JjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvc2lnbmFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZtbmMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2lsZG1pZGkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teDI2NC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14dmlkLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmRlYy5jOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JlbmMuYzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndicGFyc2UuYzoKLQkgICogZXh0L2RjMTM5NC9nc3RkYzEzOTQuYzoKLQkgICogZXh0L2RpcmVjdGZiL2RmYnZpZGVvc2luay5jOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNkZWMuYzoKLQkgICogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOgotCSAgKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmMuY2M6Ci0JICAqIGV4dC9tcGxleC9nc3RtcGxleC5jYzoKLQkgICogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOgotCSAgKiBleHQvbXl0aHR2L2dzdG15dGh0dnNyYy5jOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOgotCSAgKiBleHQvdGltaWRpdHkvZ3N0dGltaWRpdHkuYzoKLQkgICogZXh0L3RpbWlkaXR5L2dzdHdpbGRtaWRpLmM6Ci0JICAqIGdzdC1saWJzL2dzdC9hcHAvZ3N0YXBwc2luay5jOgotCSAgKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkgICogZ3N0L2R2ZHNwdS9nc3RkdmRzcHUuYzoKLQkgICogZ3N0L2Zlc3RpdmFsL2dzdGZlc3RpdmFsLmM6Ci0JICAqIGdzdC9mcmVlemUvZ3N0ZnJlZXplLmM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICAqIGdzdC9tb2RwbHVnL2dzdG1vZHBsdWcuY2M6Ci0JICAqIGdzdC9udXZkZW11eC9nc3RudXZkZW11eC5jOgotCSAgQWRkIG1pc3NpbmcgZWxlbWVudHMgdG8gZG9jcy4gRml4IGRvYy1tYXJrdXA6IHVzZSBjb252aW5pZW5jZSBzeW50YXgKLQkgIGZvciBleGFtcGxlcyAocHJvZHVjZXMgdmFsaWQgZG9jYm9vayksIGFkZCBzZXZlcmFsIHJlZnNlYzIgd2hlbiB3ZQotCSAgaGF2ZSBzZXZlcmFsIHRpdGxlcy4gRml4IHNvbWUgdHlwZXMuCi0KLTIwMDgtMDYtMTMgMTE6NTQ6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLio6IEFkZCBwcm9wZXJ0eSB0byBjb250cm9sIGF1dG9tYXRpYyBqb2luL2xlYXZlIG9mIG11bHRpY2FzdCBncm91cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY2xhc3NfaW5pdCksIChnc3RfdWRwc3JjX2luaXQpLAotCSAgKGdzdF91ZHBzcmNfY3JlYXRlKSwgKGdzdF91ZHBzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfdWRwc3JjX3N0YXJ0KSwgKGdzdF91ZHBzcmNfc3RvcCk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICBBZGQgcHJvcGVydHkgdG8gY29udHJvbCBhdXRvbWF0aWMgam9pbi9sZWF2ZSBvZiBtdWx0aWNhc3QgZ3JvdXBzLgotCSAgQWRkIEdfTElLRUxZLgotCSAgUmVtb3ZlIHNldHRpbmcgY2FwcyBvbiBidWZmZXJzIGV4cGxpY2l0bHksIGJhc2VzcmMgZG9lcyB0aGF0IGZvciB1cyBub3cuCi0JICBJbXByb3ZlIGRlYnVnIGluZm8uCi0JICBDb252ZXJ0IHNvbWUgbm9uLWZhdGFsIGVycm9yIGludG8gd2FybmluZ3MuCi0JICBVc2UgZ19udG9ocyBmb3IgYmV0dGVyIHBvcnRhYmlsaXR5LgotCSAgTGVhdmUgbXVsdGljYXN0IGdyb3VwcyB3aGVuIHN0b3BwaW5nLgotCSAgV2hlbiB1c2luZyBleHRlcm5hbCBzb2NrZXRzLCB1c2UgZ2V0c29ja25hbWUoKSBvbiB0aGVtIHRvIGZpbGwgdXAgdGhlCi0JICBhZGRyIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyBtZXRob2RzIHRoYXQgdXNlIHRoZSBzdHJ1Y3R1cmUuCi0JICBTaG91bGQgYWxsIGZpeCAjNTM2OTAzLgotCSAgQVBJOiBHc3RVRFBTcmM6OmF1dG8tbXVsdGljYXN0IHByb3BlcnR5Ci0KLTIwMDgtMDYtMTMgMTE6NDc6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzogVXNlIGdfbnRvaGwgZm9yIGJldHRlciBwb3J0YWJpbGl0eS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IChnc3RfdWRwX2lzX211bHRpY2FzdCk6Ci0JICBVc2UgZ19udG9obCBmb3IgYmV0dGVyIHBvcnRhYmlsaXR5LgotCi0yMDA4LTA2LTEzIDExOjQ1OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiBGaXggYSB0eXBvIGFuZCBkbyBzb21lIHNtYWxsIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2luaXRfc2VuZCksCi0JICAoZ3N0X211bHRpdWRwc2lua19yZW1vdmUpOgotCSAgRml4IGEgdHlwbyBhbmQgZG8gc29tZSBzbWFsbCBjbGVhbnVwcy4KLQotMjAwOC0wNi0xMyAwOTozOTo0MSArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOiBNYWtlIHRoZSBkZWxpdmVyeS1tZXRob2QgbWFuZGF0b3J5IG9uIHRoZSBjYXBzIGFuZCBvbmx5IGFjY2VwdCBpbmxpbmUgZm9yIG5vdy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6IChnc3RfcnRwX3RoZW9yYV9kZXBheV9zZXRjYXBzKToKLQkgIE1ha2UgdGhlIGRlbGl2ZXJ5LW1ldGhvZCBtYW5kYXRvcnkgb24gdGhlIGNhcHMgYW5kIG9ubHkgYWNjZXB0IGlubGluZQotCSAgZm9yIG5vdy4KLQkgIFJldmVyc2Ugc3RyY21wIGNoZWNrcyBmb3IgZGVsaXZlcnktbWV0aG9kLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19kZXBheV9zZXRjYXBzKToKLQkgIE1ha2UgZGVsaXZlcnkgbWV0aG9kIG9wdGlvbmFsIHdoZW4gcGFyc2luZyBjYXBzIGFuZCBub3RlIHRoaXMgaW4gdGhlCi0JICBjYXBzLgotCSAgUmV2ZXJzZSBzdHJjbXAgY2hlY2tzIGZvciBkZWxpdmVyeS1tZXRob2QuCi0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICBVcGRhdGUgYSBjb21tZW50IHRvIG5vdGUgdGhhdCB0aGUgZGVsaXZlcnktbWV0aG9kIGlzIG9wdGlvbmFsLAotCSAgRml4ZXMgIzUzNzY3NS4KLQotMjAwOC0wNi0xMiAxNzozMDowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBTZXQgdWRwc3JjIGZvciByZWNlaXZpbmcgZGF0YSBmcm9tIG11bHRpY2FzdCBncm91cHMgdG8gUEFVU0VEIGluc3RlYWQgb2YgbGVhdmluZyB0aGVtIGluIFJFQURZLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tY2FzdCk6Ci0JICBTZXQgdWRwc3JjIGZvciByZWNlaXZpbmcgZGF0YSBmcm9tIG11bHRpY2FzdCBncm91cHMgdG8gUEFVU0VEIGluc3RlYWQgb2YKLQkgIGxlYXZpbmcgdGhlbSBpbiBSRUFEWS4gRml4ZXMgIzUzNzgzMi4KLQotMjAwOC0wNi0xMiAxMjoxNDozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBTaW1wbGlmeSBjb2RlLiBnc3RfdGFnX2xpc3RfbWVyZ2UoKSBkb2VzIHRoZSBOVUxMIGNoZWNrcy4gQWRkIGEgRklYTUUgZm9yIGEgcmFuZG9tIGNvbnN0YW50IGluIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgU2ltcGxpZnkgY29kZS4gZ3N0X3RhZ19saXN0X21lcmdlKCkgZG9lcyB0aGUgTlVMTCBjaGVja3MuIEFkZCBhIEZJWE1FCi0JICBmb3IgYSByYW5kb20gY29uc3RhbnQgaW4gdGFnbXV4aW5nIGNvZGUuCi0KLTIwMDgtMDYtMTEgMTQ6Mjg6NDQgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2RlYnVnL2dzdHRhZ2luamVjdC4qOiBOb3cgYWN0dWFsbHkgYWRkaW5nIHRoZSBuZXcgZWxlbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVidWcvZ3N0dGFnaW5qZWN0LmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3R0YWdpbmplY3QuaDoKLQkgIE5vdyBhY3R1YWxseSBhZGRpbmcgdGhlIG5ldyBlbGVtZW50LgotCi0yMDA4LTA2LTExIDE0OjExOjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIFJlbW92ZSBkdW1teSBwbHVnaW5faW5pdC4gUmVtb3ZlIHNvbWUgdW5kZWZpbmVkIGVudHJpZXMgZnJvbSBkb2MtIHNlY3Rpb24gZmlsZS4gQWRkIHRhZ2luamVjdCBlbGVtZW50IGFuZCByZWJ1aWxkIGRvYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkaW8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JICAqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuYzoKLQkgICogZ3N0L2RlYnVnL2dzdGRlYnVnLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZzZWVrLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RwdXNoZmlsZXNyYy5jOgotCSAgKiBnc3QvZGVidWcvZ3N0cHVzaGZpbGVzcmMuaDoKLQkgICogZ3N0L2RlYnVnL25lZ290aWF0aW9uLmM6Ci0JICAqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5jOgotCSAgKiBnc3QvZGVidWcvcHJvZ3Jlc3NyZXBvcnQuaDoKLQkgICogZ3N0L2RlYnVnL3JuZGJ1ZmZlcnNpemUuYzoKLQkgICogZ3N0L2RlYnVnL3Rlc3RwbHVnaW4uYzoKLQkgIFJlbW92ZSBkdW1teSBwbHVnaW5faW5pdC4gUmVtb3ZlIHNvbWUgdW5kZWZpbmVkIGVudHJpZXMgZnJvbSBkb2MtCi0JICBzZWN0aW9uIGZpbGUuIEFkZCB0YWdpbmplY3QgZWxlbWVudCBhbmQgcmVidWlsZCBkb2NzIGZvciBpdC4KLQotMjAwOC0wNi0xMSAxMToyNzo0NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IFVwZGF0ZSB0aGUgY291bnRlciBmb3IgdGhlIG51bWJlciBvZiBzdHJlYW1zIHdoZW4gcGFkcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyB3aWxsIG0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3JlcXVlc3RfbmV3X3BhZCksCi0JICAoZ3N0X21hdHJvc2thX211eF9yZWxlYXNlX3BhZCksIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgVXBkYXRlIHRoZSBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgd2hlbiBwYWRzIGFyZSBhZGRlZCBvcgotCSAgcmVtb3ZlZC4gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IGEgc2VlayB0YWJsZSBpcyBnZW5lcmF0ZWQgZm9yCi0JICBmaWxlcyB3aXRoIGp1c3Qgb25lIGF1ZGlvIHN0cmVhbS4KLQotMjAwOC0wNi0xMSAxMToxODoyMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvOiBBZGQgc29tZSBtb3JlIHRhZ3MsIGltcHJvdmUgZGVidWdnaW5nIGEgYml0IGFuZCBtYWtlIHN1cmUgdGhhdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YV9pZF9zaW1wbGVfdGFnKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3NpbXBsZV90YWcpOgotCSAgQWRkIHNvbWUgbW9yZSB0YWdzLCBpbXByb3ZlIGRlYnVnZ2luZyBhIGJpdCBhbmQgbWFrZSBzdXJlIHRoYXQKLQkgIEdWYWx1ZSB0cmFuc2Zvcm1hdGlvbiBoYXMgc3VjY2VlZGVkIGJlZm9yZSB1c2luZyB0aGUgcmVzdWx0Ci0JICBhcyBhIHRhZy4KLQotMjAwOC0wNi0xMSAwODo1NjoxNiArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzogVGhlIFRoZW9yYSBSVFAgcGF5bG9hZGVyIG9ubHkgc3VwcG9ydHMgdGhlICJpbmxpbmUiIGRlbGlldmVyeSBtZXRob2Qgc28gbGV0J3MgZGVjbGFyZSB0aGlzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgIFRoZSBUaGVvcmEgUlRQIHBheWxvYWRlciBvbmx5IHN1cHBvcnRzIHRoZSAiaW5saW5lIiBkZWxpZXZlcnkgbWV0aG9kCi0JICBzbyBsZXQncyBkZWNsYXJlIHRoaXMgb24gdGhlIGNhcHMgb2YgdGhlIHN0YXRpYyBwYWQgdGVtcGxhdGUuCi0JICBGaXhlcyBidWcgIzUzNzY3NS4KLQotMjAwOC0wNi0xMCAxNzoyMDo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBSZW1vdmUgYm9ndXMgY2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9xdWV1ZXMpLAotCSAgKGdzdF92aWRlb21peGVyX2JsZW5kX2J1ZmZlcnMpLCAoZ3N0X3ZpZGVvbWl4ZXJfdXBkYXRlX3F1ZXVlcyk6Ci0JICBSZW1vdmUgYm9ndXMgY2hlY2suCi0KLTIwMDgtMDYtMTAgMTY6MjU6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogVXNlIHN0cmVhbV90aW1lIHRvIHN5bmNocm9uaXplIHRoZSBvYmplY3QgcHJvcGVydGllcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9maWxsX3F1ZXVlcyksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfYmxlbmRfYnVmZmVycyk6Ci0JICBVc2Ugc3RyZWFtX3RpbWUgdG8gc3luY2hyb25pemUgdGhlIG9iamVjdCBwcm9wZXJ0aWVzLgotCSAgVXNlIHJ1bm5pbmdfdGltZSBvZiB0aGUgbWFzdGVyIHBhZCB0byB0aW1lc3RhbXAgb3V0Z29pbmcgYnVmZmVycy4KLQkgIEZpeCB0aGUgaW5pdGlhbCBzZWdtZW50IGV2ZW50IHRvIGV4dGVuZCBhbiB1bmtub3duIGFtb3VudCBvZiB0aW1lLgotCSAgRml4ZXMgIzUzNzM2MS4KLQotMjAwOC0wNi0xMCAxMTowNTozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBUcnkgdG8gaWdub3JlIHVucGFyc2FibGUvdW5rbm93biBzdHJlYW1zIGFuZCBnaXZlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dC4gRml4ZXMgIzUzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9tYXNzYWdlX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X2NhbGN1bGF0ZV9kdXJhdGlvbnNfZnJvbV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyX3B1c2gpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsKToKLQkgIFRyeSB0byBpZ25vcmUgdW5wYXJzYWJsZS91bmtub3duIHN0cmVhbXMgYW5kIGdpdmUgYSB3YXJuaW5nIGluc3RlYWQgb2YKLQkgIGVycm9yaW5nIG91dC4gRml4ZXMgIzUzNzM3Ny4KLQotMjAwOC0wNi0xMCAxMDo0NDo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOiBVc2UgR0RPVUJMRV9UT19CRSgpIGluc3RlYWQgb2YgKHByb2JhYmx5IHNsb3dlcikgY3VzdG9tIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzogKGdzdF9lYm1sX3dyaXRlX2Zsb2F0KToKLQkgIFVzZSBHRE9VQkxFX1RPX0JFKCkgaW5zdGVhZCBvZiAocHJvYmFibHkgc2xvd2VyKSBjdXN0b20gY29kZS4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfYmFzZV9pbml0KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfY2xhc3NfaW5pdCksIChnc3RfbWF0cm9za2FfZGVtdXhfaW5pdCksCi0JICAoZ3N0X21hdHJvc2thX3RyYWNrX2ZyZWUpLCAoZ3N0X21hdHJvc2thX2RlbXV4X2VuY29kaW5nX2NtcCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3JlYWRfdHJhY2tfZW5jb2RpbmdzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9pbml0X3N0cmVhbSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4X2N1ZXRyYWNrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXhfcG9pbnRlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZm8pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YV9pZF9zaW1wbGVfdGFnKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGEpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfd3Zwa19oZWFkZXIpLCAoZ3N0X21hdHJvc2thX2RlY29kZV9idWZmZXIpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2x1c3RlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2xvb3Bfc3RyZWFtX3BhcnNlX2lkKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfbG9vcCksIChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2FwcyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9zdWJ0aXRsZV9jb250ZXh0KToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0KSwgKGdzdF9tYXRyb3NrYV9tdXhfaW5pdCksCi0JICAoZ3N0X21hdHJvc2thX211eF9jcmVhdGVfdWlkKSwgKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfc3VidGl0bGVfcGFkX3NldGNhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfcmVxdWVzdF9uZXdfcGFkKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3RyYWNrX2hlYWRlciksIChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3NpbXBsZV90YWcpLCAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfZGF0YSksIChnc3RfbWF0cm9za2FfbXV4X2NvbGxlY3RlZCksCi0JICAoZ3N0X21hdHJvc2thX211eF9zZXRfcHJvcGVydHkpOgotCSAgQWRkIG1hbnkgRklYTUVzL1RPRE9zIGFsbCBvdmVyIHRoZSBtYXRyb3NrYSBtdXhlciBhbmQgZGVtdXhlcgotCSAgZWxlbWVudHMsIGRvIHNvbWUgY2hlY2tzIGZvciB2YWxpZCB2YWx1ZXMgaW4gdGhlIGRlbXV4ZXIsIGhhbmRsZQotCSAgdHJhY2t0aW1lY29kZXNjYWxlIGluIHRoZSBkZW11eGVyLCBzZXQgY29ycmVjdCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsCi0JICBzZXR0aW5ncyBpbiB0aGUgZGVtdXhlciwgcmV2aWV3IGFuZCBhZGQgYWxsIG1pc3NpbmcgbWF0cm9za2EKLQkgIElEcyBhbmQgc29tZSBtb3JlIHJhdyBZVVYgZm9ybWF0cywgYW5kIHNvbWUgdHJpdmlhbCBjbGVhbnVwLgotCi0yMDA4LTA2LTEwIDA4OjU5OjE3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9wdWxzZS86IFNvbWUgc21hbGxlciBjbGVhbnVwLiBVc2UgR19QQVJBTV9TVEFUSUNfU1RSSU5HUywgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2ltcGxlKCkgYW5kIGZpeCBjb2Rpbmcgcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmM6IChnc3RfcHVsc2VtaXhlcl9iYXNlX2luaXQpLAotCSAgKGdzdF9wdWxzZW1peGVyX2NsYXNzX2luaXQpOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6IChnc3RfcHVsc2VzaW5rX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3B1bHNlc2lua19jbGFzc19pbml0KSwgKGdzdF9wdWxzZXNpbmtfcHJlcGFyZSk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOiAoZ3N0X3B1bHNlc3JjX2ludGVyZmFjZV9zdXBwb3J0ZWQpLAotCSAgKGdzdF9wdWxzZXNyY19iYXNlX2luaXQpLCAoZ3N0X3B1bHNlc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9wdWxzZXNyY19wcmVwYXJlKToKLQkgIFNvbWUgc21hbGxlciBjbGVhbnVwLiBVc2UgR19QQVJBTV9TVEFUSUNfU1RSSU5HUywKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSgpIGFuZCBmaXggY29kaW5nIHN0eWxlIGEgYml0Ci0JICBtb3JlLgotCi0yMDA4LTA2LTEwIDA4OjIyOjE3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIEFkZCBkb2N1bWVudGF0aW9uIHRvIHRoZSBwdWxzZWF1ZGlvIHBsdWdpbiBhbmQgcnVuIG1ha2UgdXBkYXRlIGluIGRvY3MvcGx1Z2lucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lcXVhbGl6ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nYW1tYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcHVsc2VhdWRpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JICAqIGV4dC9wdWxzZS9wbHVnaW4uYzoKLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXIuYzoKLQkgICogZXh0L3B1bHNlL3B1bHNlc2luay5jOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzcmMuYzoKLQkgIEFkZCBkb2N1bWVudGF0aW9uIHRvIHRoZSBwdWxzZWF1ZGlvIHBsdWdpbiBhbmQgcnVuIG1ha2UgdXBkYXRlCi0JICBpbiBkb2NzL3BsdWdpbnMuCi0KLTIwMDgtMDYtMTAgMDY6NTI6NDQgKzAwMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmM6IEltcHJvdmVtZW50cyBmb3IgdGhlIFN1bkF1ZGlvIG1peGVyIGJ5IGhhbmRsaW5nIG11dGUgYXMgbm8gZ2FpbiBmb3IgdHJhY2tzIHRoYXQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uIGF0IHN1biBkb3QgY29tPgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkgIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF92b2x1bWUpLAotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X3ZvbHVtZSk6Ci0JICBJbXByb3ZlbWVudHMgZm9yIHRoZSBTdW5BdWRpbyBtaXhlciBieSBoYW5kbGluZyBtdXRlIGFzIG5vIGdhaW4KLQkgIGZvciB0cmFja3MgdGhhdCBoYXZlIGEgZ2FpbiBwcm9wZXJ0eSBidXQgbm8gbXV0ZSBwcm9wZXJ0eS4KLQkgIEZpeGVzIGJ1ZyAjNTM2MDY3LgotCi0yMDA4LTA2LTEwIDA2OjQ1OjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIEFkZCBwdWxzZWF1ZGlvIEdTdHJlYW1lciBlbGVtZW50IGZyb20gZ3N0LXB1bHNlLiBEZXZlbG9wbWVudCB3aWxsIGNvbnRpbnVlIGhlcmUgaW5zdGVhZCBvZiBwdWxzZWF1ZGlvIFNWTi4gRml4ZXMgYnVnIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L3B1bHNlL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcHVsc2UvcGx1Z2luLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmM6IChnc3RfcHVsc2VtaXhlcl9pbnRlcmZhY2Vfc3VwcG9ydGVkKSwKLQkgIChnc3RfcHVsc2VtaXhlcl9pbXBsZW1lbnRzX2ludGVyZmFjZV9pbml0KSwKLQkgIChnc3RfcHVsc2VtaXhlcl9pbml0X2ludGVyZmFjZXMpLCAoZ3N0X3B1bHNlbWl4ZXJfYmFzZV9pbml0KSwKLQkgIChnc3RfcHVsc2VtaXhlcl9jbGFzc19pbml0KSwgKGdzdF9wdWxzZW1peGVyX2luaXQpLAotCSAgKGdzdF9wdWxzZW1peGVyX2ZpbmFsaXplKSwgKGdzdF9wdWxzZW1peGVyX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfZ2V0X3Byb3BlcnR5KSwgKGdzdF9wdWxzZW1peGVyX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVyLmg6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZW1peGVyY3RybC5jOgotCSAgKGdzdF9wdWxzZW1peGVyX2N0cmxfY29udGV4dF9zdGF0ZV9jYiksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9zaW5rX2luZm9fY2IpLAotCSAgKGdzdF9wdWxzZW1peGVyX2N0cmxfc291cmNlX2luZm9fY2IpLAotCSAgKGdzdF9wdWxzZW1peGVyX2N0cmxfc3Vic2NyaWJlX2NiKSwKLQkgIChnc3RfcHVsc2VtaXhlcl9jdHJsX3N1Y2Nlc3NfY2IpLCAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9vcGVuKSwKLQkgIChnc3RfcHVsc2VtaXhlcl9jdHJsX2Nsb3NlKSwgKGdzdF9wdWxzZW1peGVyX2N0cmxfbmV3KSwKLQkgIChnc3RfcHVsc2VtaXhlcl9jdHJsX2ZyZWUpLCAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9saXN0X3RyYWNrcyksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfY3RybF90aW1lb3V0X2V2ZW50KSwgKHJlc3RhcnRfdGltZV9ldmVudCksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9zZXRfdm9sdW1lKSwgKGdzdF9wdWxzZW1peGVyX2N0cmxfZ2V0X3ZvbHVtZSksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfY3RybF9zZXRfcmVjb3JkKSwgKGdzdF9wdWxzZW1peGVyX2N0cmxfc2V0X211dGUpOgotCSAgKiBleHQvcHVsc2UvcHVsc2VtaXhlcmN0cmwuaDoKLQkgICogZXh0L3B1bHNlL3B1bHNlbWl4ZXJ0cmFjay5jOiAoZ3N0X3B1bHNlbWl4ZXJfdHJhY2tfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3B1bHNlbWl4ZXJfdHJhY2tfaW5pdCksIChnc3RfcHVsc2VtaXhlcl90cmFja19uZXcpOgotCSAgKiBleHQvcHVsc2UvcHVsc2VtaXhlcnRyYWNrLmg6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXByb2JlLmM6IChnc3RfcHVsc2Vwcm9iZV9jb250ZXh0X3N0YXRlX2NiKSwKLQkgIChnc3RfcHVsc2Vwcm9iZV9zaW5rX2luZm9fY2IpLCAoZ3N0X3B1bHNlcHJvYmVfc291cmNlX2luZm9fY2IpLAotCSAgKGdzdF9wdWxzZXByb2JlX2ludmFsaWRhdGUpLCAoZ3N0X3B1bHNlcHJvYmVfb3BlbiksCi0JICAoZ3N0X3B1bHNlcHJvYmVfZW51bWVyYXRlKSwgKGdzdF9wdWxzZXByb2JlX2Nsb3NlKSwKLQkgIChnc3RfcHVsc2Vwcm9iZV9uZXcpLCAoZ3N0X3B1bHNlcHJvYmVfZnJlZSksCi0JICAoZ3N0X3B1bHNlcHJvYmVfZ2V0X3Byb3BlcnRpZXMpLCAoZ3N0X3B1bHNlcHJvYmVfbmVlZHNfcHJvYmUpLAotCSAgKGdzdF9wdWxzZXByb2JlX3Byb2JlX3Byb3BlcnR5KSwgKGdzdF9wdWxzZXByb2JlX2dldF92YWx1ZXMpLAotCSAgKGdzdF9wdWxzZXByb2JlX3NldF9zZXJ2ZXIpOgotCSAgKiBleHQvcHVsc2UvcHVsc2Vwcm9iZS5oOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmM6IChnc3RfcHVsc2VzaW5rX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3B1bHNlc2lua19jbGFzc19pbml0KSwgKGdzdF9wdWxzZXNpbmtfaW5pdCksCi0JICAoZ3N0X3B1bHNlc2lua19kZXN0cm95X3N0cmVhbSksIChnc3RfcHVsc2VzaW5rX2Rlc3Ryb3lfY29udGV4dCksCi0JICAoZ3N0X3B1bHNlc2lua19maW5hbGl6ZSksIChnc3RfcHVsc2VzaW5rX2Rpc3Bvc2UpLAotCSAgKGdzdF9wdWxzZXNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9wdWxzZXNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcHVsc2VzaW5rX2NvbnRleHRfc3RhdGVfY2IpLCAoZ3N0X3B1bHNlc2lua19zdHJlYW1fc3RhdGVfY2IpLAotCSAgKGdzdF9wdWxzZXNpbmtfc3RyZWFtX3JlcXVlc3RfY2IpLAotCSAgKGdzdF9wdWxzZXNpbmtfc3RyZWFtX2xhdGVuY3lfdXBkYXRlX2NiKSwgKGdzdF9wdWxzZXNpbmtfb3BlbiksCi0JICAoZ3N0X3B1bHNlc2lua19jbG9zZSksIChnc3RfcHVsc2VzaW5rX3ByZXBhcmUpLAotCSAgKGdzdF9wdWxzZXNpbmtfdW5wcmVwYXJlKSwgKGdzdF9wdWxzZXNpbmtfd3JpdGUpLAotCSAgKGdzdF9wdWxzZXNpbmtfZGVsYXkpLCAoZ3N0X3B1bHNlc2lua19zdWNjZXNzX2NiKSwKLQkgIChnc3RfcHVsc2VzaW5rX3Jlc2V0KSwgKGdzdF9wdWxzZXNpbmtfY2hhbmdlX3RpdGxlKSwKLQkgIChnc3RfcHVsc2VzaW5rX2V2ZW50KSwgKGdzdF9wdWxzZXNpbmtfZ2V0X3R5cGUpOgotCSAgKiBleHQvcHVsc2UvcHVsc2VzaW5rLmg6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXNyYy5jOiAoZ3N0X3B1bHNlc3JjX2ludGVyZmFjZV9zdXBwb3J0ZWQpLAotCSAgKGdzdF9wdWxzZXNyY19pbXBsZW1lbnRzX2ludGVyZmFjZV9pbml0KSwKLQkgIChnc3RfcHVsc2VzcmNfaW5pdF9pbnRlcmZhY2VzKSwgKGdzdF9wdWxzZXNyY19iYXNlX2luaXQpLAotCSAgKGdzdF9wdWxzZXNyY19jbGFzc19pbml0KSwgKGdzdF9wdWxzZXNyY19pbml0KSwKLQkgIChnc3RfcHVsc2VzcmNfZGVzdHJveV9zdHJlYW0pLCAoZ3N0X3B1bHNlc3JjX2Rlc3Ryb3lfY29udGV4dCksCi0JICAoZ3N0X3B1bHNlc3JjX2ZpbmFsaXplKSwgKGdzdF9wdWxzZXNyY19kaXNwb3NlKSwKLQkgIChnc3RfcHVsc2VzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9wdWxzZXNyY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9wdWxzZXNyY19jb250ZXh0X3N0YXRlX2NiKSwgKGdzdF9wdWxzZXNyY19zdHJlYW1fc3RhdGVfY2IpLAotCSAgKGdzdF9wdWxzZXNyY19zdHJlYW1fcmVxdWVzdF9jYiksIChnc3RfcHVsc2VzcmNfb3BlbiksCi0JICAoZ3N0X3B1bHNlc3JjX2Nsb3NlKSwgKGdzdF9wdWxzZXNyY19wcmVwYXJlKSwKLQkgIChnc3RfcHVsc2VzcmNfdW5wcmVwYXJlKSwgKGdzdF9wdWxzZXNyY19yZWFkKSwKLQkgIChnc3RfcHVsc2VzcmNfZGVsYXkpLCAoZ3N0X3B1bHNlc3JjX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3B1bHNlc3JjX2dldF90eXBlKToKLQkgICogZXh0L3B1bHNlL3B1bHNlc3JjLmg6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXV0aWwuYzogKGdzdF9wdWxzZV9maWxsX3NhbXBsZV9zcGVjKSwKLQkgIChnc3RfcHVsc2VfY2xpZW50X25hbWUpLCAoZ3N0X3B1bHNlX2dzdF90b19jaGFubmVsX21hcCk6Ci0JICAqIGV4dC9wdWxzZS9wdWxzZXV0aWwuaDoKLQkgIEFkZCBwdWxzZWF1ZGlvIEdTdHJlYW1lciBlbGVtZW50IGZyb20gZ3N0LXB1bHNlLiBEZXZlbG9wbWVudCB3aWxsCi0JICBjb250aW51ZSBoZXJlIGluc3RlYWQgb2YgcHVsc2VhdWRpbyBTVk4uIEZpeGVzIGJ1ZyAjNDAwNjc5LgotCSAgT25seSBjaGFuZ2VzIG92ZXIgZ3N0LXB1bHNlIFNWTiBhcmUgYWRkZWQgY29weXJpZ2h0IHRvIHRoZSB0b3Agb2YKLQkgIGZpbGVzIGFuZCBjb2Rpbmcgc3R5bGUgY2hhbmdlcy4KLQotMjAwOC0wNi0wOSAyMDowMjowNSArMDAwMCAgQmVuamFtaW4gS2FtcG1hbm4gPGJlbmphbWluQGZsdWVuZG8uY29tPgotCi0JICBleHQvY2Rpby86IEFsc28gZXh0cmFjdCBhbGJ1bSB0aXRsZSBhbmQgYWxidW0gZ2VucmUgZnJvbSBDRC1URVhUIGlmIGF2YWlsYWJsZSAoIzUzNzAyMSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCZW5qYW1pbiBLYW1wbWFubiAgPGJlbmphbWluIGF0IGZsdWVuZG8gZG90IGNvbT4KLQkgICogZXh0L2NkaW8vZ3N0Y2Rpby5jOiAoZ3N0X2NkaW9fZ2V0X2NkdGV4dCksCi0JICAoZ3N0X2NkaW9fYWRkX2NkdGV4dF9hbGJ1bV90YWdzKToKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpby5oOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOiAoZ3N0X2NkaW9fY2RkYV9zcmNfb3Blbik6Ci0JICBBbHNvIGV4dHJhY3QgYWxidW0gdGl0bGUgYW5kIGFsYnVtIGdlbnJlIGZyb20gQ0QtVEVYVCBpZgotCSAgYXZhaWxhYmxlICgjNTM3MDIxKS4KLQotMjAwOC0wNi0wOSAwODo1MjowNCArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IEltcHJvdmUgbmVnb3RpYXRpb24gYSBiaXQgbW9yZSBieSBwaWNraW5nIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSByZXNvbHV0aW9uIHRoYXQgaXMgbGFyZ2VyIHRoYW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX25lZ290aWF0ZSk6Ci0JICBJbXByb3ZlIG5lZ290aWF0aW9uIGEgYml0IG1vcmUgYnkgcGlja2luZyB0aGUgc21hbGxlc3QgcG9zc2libGUKLQkgIHJlc29sdXRpb24gdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVzb2x1dGlvbiBzcGVjaWZpZWQgaW4gdGhlCi0JICBmaXJzdCBjYXBzIGVudHJ5IG9mIHRoZSBwZWVyIGNhcHMuIEZpeGVzIGJ1ZyAjNTM2OTk0LgotCi0yMDA4LTA2LTA5IDA4OjQyOjQ5ICswMDAwICBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzQGhhZGVzcy5uZXQ+Ci0KLQkgIHN5cy92NGwyLzogRml4IGNvbXBpbGF0aW9uIHdpdGggbmV3ZXIgR0lUIGtlcm5lbHMgdGhhdCBkZXByZWNhdGVkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzIGF0IGhhZGVzcyBkb3QgbmV0PgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmM6Ci0JICAqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX2ZpbGxfbGlzdHMpOgotCSAgRml4IGNvbXBpbGF0aW9uIHdpdGggbmV3ZXIgR0lUIGtlcm5lbHMgdGhhdCBkZXByZWNhdGVkCi0JICBWNEwyX0NJRF9IQ0VOVEVSIGFuZCBWNEwyX0NJRF9WQ0VOVEVSLiBGaXhlcyBidWcgIzUzNjMxNy4KLQotMjAwOC0wNi0wNyAxODo0ODo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUmVxdWlyZSBsaWJjZGlvID49IDAuNzYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvLmM6Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW8uaDoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuYzogKGdzdF9jZGlvX2NkZGFfc3JjX29wZW4pOgotCSAgUmVxdWlyZSBsaWJjZGlvID49IDAuNzYuCi0KLTIwMDgtMDYtMDUgMTE6MDc6MTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ludGVybGVhdmUvOiBQcm9wZXJseSBpbXBsZW1lbnQgZHVyYXRpb24gYW5kIHBvc2l0aW9uIHF1ZXJpZXMgaW4gYnl0ZXMgZm9ybWF0LiBXZSBoYXZlIHRvIHRha2UgdGhlIHVwc3RyZWFtIHJlcGx5Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChnc3RfZGVpbnRlcmxlYXZlX2FkZF9uZXdfcGFkcyksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9zcmNfcXVlcnkpOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IChnc3RfaW50ZXJsZWF2ZV9zcmNfcXVlcnlfZHVyYXRpb24pLAotCSAgKGdzdF9pbnRlcmxlYXZlX3NyY19xdWVyeSk6Ci0JICBQcm9wZXJseSBpbXBsZW1lbnQgZHVyYXRpb24gYW5kIHBvc2l0aW9uIHF1ZXJpZXMgaW4gYnl0ZXMgZm9ybWF0LiBXZQotCSAgaGF2ZSB0byB0YWtlIHRoZSB1cHN0cmVhbSByZXBseSBhbmQgZGl2aWRlL211bHRpcGx5IGl0IGJ5IHRoZSBudW1iZXIKLQkgIG9mIGNoYW5uZWxzIHRvIGdldCB0aGUgY29ycmVjdCByZXN1bHQuCi0KLTIwMDgtMDYtMDUgMDk6NDU6MDAgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogQ2F0Y2ggVU5FWFBFQ1RFRCB3aGVuIGRvd25zdHJlYW0gaGFzIHJlYWNoZWQgZW5kIG9mIHNlZ21lbnQgaW4gcmV2ZXJzZSBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIENhdGNoIFVORVhQRUNURUQgd2hlbiBkb3duc3RyZWFtIGhhcyByZWFjaGVkIGVuZCBvZgotCSAgc2VnbWVudCBpbiByZXZlcnNlIG1vZGUuCi0KLTIwMDgtMDYtMDQgMTg6MDg6MzUgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogRml4IHR5cG8gaW4gY29tbWVudAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIEZpeCB0eXBvIGluIGNvbW1lbnQKLQotMjAwOC0wNi0wNCAxODowMzoyNCArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBCZWNhdXNlIHdlIGRvbid0IGtub3cgdGhlIGZyYW1lIG9yZGVyIHdlIG5lZWQgdG8gcHVzaCB0aWxsIHRoZSBuZXh0IGtleWZyYW1lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgQmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBmcmFtZSBvcmRlciB3ZSBuZWVkIHRvIHB1c2ggdGlsbAotCSAgdGhlIG5leHQga2V5ZnJhbWUKLQotMjAwOC0wNi0wNCAxNzozOTozMSArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IFByb3ZpZGUgYSBjdXN0b20gbmVnb3RpYXRpb24gZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRvIHBpY2sgdGhlIGhpZ2hlc3QgcG9zc2libGUgZnJhbWVyYXRlIGFuZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF92NGwyc3JjX2ZpeGF0ZSksIChnc3RfdjRsMnNyY19uZWdvdGlhdGUpOgotCSAgUHJvdmlkZSBhIGN1c3RvbSBuZWdvdGlhdGlvbiBmdW5jdGlvbiB0byBtYWtlIHN1cmUgdG8gcGljayB0aGUgaGlnaGVzdAotCSAgcG9zc2libGUgZnJhbWVyYXRlIGFuZCByZXNvbHV0aW9uLiBGaXhlcyBidWcgIzUzNjY0Ni4KLQotMjAwOC0wNi0wNCAxNjo0OToyNiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBTZXQgRU9TIHdoZW4gZ29pbmcgb3V0IG9mIHRoZSBzZWdtZW50IGluIHJldmVyc2UgcGxheWJhY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBTZXQgRU9TIHdoZW4gZ29pbmcgb3V0IG9mIHRoZSBzZWdtZW50IGluIHJldmVyc2UgcGxheWJhY2sKLQotMjAwOC0wNi0wNCAxNToxOTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3RhZ2xpYi9NYWtlZmlsZS5hbTogQWRkIC1Xbm8tYXR0cmlidXRlcyB0byBDWFhGTEFHUyB0byBzdXBwcmVzcyB3YXJuaW5nIGNhdXNlZCBieSB0YWdsaWIgaGVhZGVycyAod2l0aCBnY2MgNC4zLjEpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06OgotCSAgQWRkIC1Xbm8tYXR0cmlidXRlcyB0byBDWFhGTEFHUyB0byBzdXBwcmVzcyB3YXJuaW5nIGNhdXNlZCBieQotCSAgdGFnbGliIGhlYWRlcnMgKHdpdGggZ2NjIDQuMy4xKS4KLQotMjAwOC0wNi0wNCAxMTo1OToxOCArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogVXNlIHRoZSBuZXcgZ3N0X3J0c3BfY29ubmVjdGlvbl9nZXRfaXAoKSB0byBhY2Nlc3MgdGhlIElQIGFkZHJlc3Mgb2YgYSBHc3RSVFNQQ29ubmVjdGlvbiBzaW5jZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwX3NpbmspOgotCSAgVXNlIHRoZSBuZXcgZ3N0X3J0c3BfY29ubmVjdGlvbl9nZXRfaXAoKSB0byBhY2Nlc3MgdGhlIElQIGFkZHJlc3MKLQkgIG9mIGEgR3N0UlRTUENvbm5lY3Rpb24gc2luY2UgaXQgaXMgYSBwcml2YXRlIG1lbWJlci4KLQotMjAwOC0wNi0wNCAxMDo0Mjo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgVXNlIG5ldyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiBsaWJnc3R0YWcgdG8gcHJvY2VzcyBjb3ZlcmFydCAoIzUxMjMzMykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZXh0cmFjdF9waWN0dXJlX2J1ZmZlcik6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAocGFyc2VfcGljdHVyZV9mcmFtZSk6Ci0JICBVc2UgbmV3IHV0aWxpdHkgZnVuY3Rpb25zIGluIGxpYmdzdHRhZyB0byBwcm9jZXNzIGNvdmVyYXJ0ICgjNTEyMzMzKS4KLQotMjAwOC0wNi0wNCAwODo1NDowOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IFdlIGFjdHVhbGx5IHN1cHBvcnQgbGVmdC9zaWRlLCByaWdodC9zaWRlIGFuZCBtaWQvc2lkZSBmaWxlcy4gVGhlIGNvbnZlcnNpb24gdG8gbm9ybWFsLCBpbnRlcmwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfd3JpdGUpOgotCSAgV2UgYWN0dWFsbHkgc3VwcG9ydCBsZWZ0L3NpZGUsIHJpZ2h0L3NpZGUgYW5kIG1pZC9zaWRlIGZpbGVzLiBUaGUKLQkgIGNvbnZlcnNpb24gdG8gbm9ybWFsLCBpbnRlcmxlYXZlZCBzdGVyZW8gaXMgZG9uZSBieSBsaWJmbGFjLgotCi0yMDA4LTA2LTA0IDA3OjM2OjA3ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IFVucmVmIHRoZSB3cml0ZSBjYWNoZSBpbiBmaW5hbGl6ZSBpZiBpdCB3YXMgc2V0IGFuZCBhZGQgYWRkICJGSVhNRSIgdG8gYSBjb21tZW50IHRoYXQgbmVlZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IChnc3RfZWJtbF93cml0ZV9maW5hbGl6ZSksCi0JICAoZ3N0X2VibWxfd3JpdGVfc2V0X2NhY2hlKToKLQkgIFVucmVmIHRoZSB3cml0ZSBjYWNoZSBpbiBmaW5hbGl6ZSBpZiBpdCB3YXMgc2V0IGFuZCBhZGQgYWRkICJGSVhNRSIKLQkgIHRvIGEgY29tbWVudCB0aGF0IG5lZWRzIGl0LgotCi0yMDA4LTA2LTA0IDA2OjQ4OjQ2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuKjogVXNlIGFuIGFsd2F5cyBpbmNyZWFzaW5nIGludGVnZXIgZm9yIHRoZSBudW1iZXIgaW4gdGhlIG5hbWUgb2YgdGhlIHJlcXVlc3RlZCBzaW5rIHBhZHMgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzogKGdzdF9pbnRlcmxlYXZlX3BhZF9nZXRfdHlwZSksCi0JICAoZ3N0X2ludGVybGVhdmVfcGFkX2dldF9wcm9wZXJ0eSksIChnc3RfaW50ZXJsZWF2ZV9wYWRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2ludGVybGVhdmVfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9pbnRlcmxlYXZlX3JlbGVhc2VfcGFkKToKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5oOgotCSAgVXNlIGFuIGFsd2F5cyBpbmNyZWFzaW5nIGludGVnZXIgZm9yIHRoZSBudW1iZXIgaW4gdGhlIG5hbWUgb2YgdGhlCi0JICByZXF1ZXN0ZWQgc2luayBwYWRzIHRvIGd1YXJhbnR1ZWUgYSB1bmlxdWUgbmFtZS4gQWRkIGEgImNoYW5uZWwiCi0JICBwcm9wZXJ0eSB0byBHc3RJbnRlcmxlYXZlUGFkIHRvIG1ha2UgaXQgcG9zc2libGUgZm9yIGFwcGxpY2F0aW9ucwotCSAgdG8gcmV0cmlldmUgdGhlIGNoYW5uZWwgbnVtYmVyIGluIHRoZSBvdXRwdXQgZm9yIGV2ZXJ5IHBhZC4KLQkgIFVzZSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljX3NpbXBsZSgpIGluc3RlYWQgb2YKLQkgIGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMoKSB0byBzYXZlIHNvbWUgcmVsb2NhdGlvbnMuCi0KLTIwMDgtMDYtMDMgMTQ6MzU6NTkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOiBTdG9wIEdzdENvbGxlY3RQYWRzIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJlbnQncyBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gd2hlbiBnb2luZyBmcm9tIFBBLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOiAoZ3N0X2ludGVybGVhdmVfcGFkX2dldF90eXBlKSwKLQkgIChnc3RfaW50ZXJsZWF2ZV9jaGFuZ2Vfc3RhdGUpOgotCSAgU3RvcCBHc3RDb2xsZWN0UGFkcyBiZWZvcmUgY2FsbGluZyB0aGUgcGFyZW50J3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uCi0JICB3aGVuIGdvaW5nIGZyb20gUEFVU0VEIHRvIFJFQURZIGFzIHdlIG90aGVyd2lzZSBkZWFkbG9jay4KLQkgIEZpeGVzIGJ1ZyAjNTM2MjU4LgotCi0yMDA4LTA2LTAzIDA5OjAzOjE5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzogVXNlIG5ldyBnc3RfYXVkaW9fY2hlY2tfY2hhbm5lbF9wb3NpdGlvbnMoKSBmdW5jdGlvbiBhbmQgcmVnaXN0ZXIgdGhlIEdzdEludGVybGVhdmVQYWQgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgIChnc3RfaW50ZXJsZWF2ZV9jaGVja19jaGFubmVsX3Bvc2l0aW9ucyksCi0JICAoZ3N0X2ludGVybGVhdmVfc2V0X2NoYW5uZWxfcG9zaXRpb25zKSwKLQkgIChnc3RfaW50ZXJsZWF2ZV9jbGFzc19pbml0KToKLQkgIFVzZSBuZXcgZ3N0X2F1ZGlvX2NoZWNrX2NoYW5uZWxfcG9zaXRpb25zKCkgZnVuY3Rpb24gYW5kIHJlZ2lzdGVyCi0JICB0aGUgR3N0SW50ZXJsZWF2ZVBhZCB0eXBlIGZyb20gYSB0aHJlYWRzYWZlIGNvbnRleHQuCi0KLTIwMDgtMDYtMDIgMTY6MTA6MDAgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguKjogSW1wbGVtZW50IHJldmVyc2UgcGxheWJhY2suIEZpeGVzICM1MzUzMDAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXIgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9pbmRleF9uZXh0KSwKLQkgIChnc3RfYXZpX2RlbXV4X2luZGV4X3ByZXYpLCAoZ3N0X2F2aV9kZW11eF9pbmRleF9lbnRyeV9mb3JfdGltZSksCi0JICAoZ3N0X2F2aV9kZW11eF9kb19zZWVrKSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgSW1wbGVtZW50IHJldmVyc2UgcGxheWJhY2suIEZpeGVzICM1MzUzMDAuCi0JICBTbWFsbCBjbGVhbnVwcy4KLQotMjAwOC0wNi0wMiAxMjo0MjoxNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLio6IEFsbG93IHNldHRpbmcgY2hhbm5lbCBwb3NpdGlvbnMgdmlhIGEgcHJvcGVydHkgYW5kIGFsbG93IHVzaW5nIHRoZSBjaGFubmVsIHBvc2l0aW9ucyBvbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IChnc3RfaW50ZXJsZWF2ZV9wYWRfZ2V0X3R5cGUpLAotCSAgKGdzdF9pbnRlcmxlYXZlX2ZpbmFsaXplKSwgKGdzdF9hdWRpb19jaGVja19jaGFubmVsX3Bvc2l0aW9ucyksCi0JICAoZ3N0X2ludGVybGVhdmVfc2V0X2NoYW5uZWxfcG9zaXRpb25zKSwKLQkgIChnc3RfaW50ZXJsZWF2ZV9jbGFzc19pbml0KSwgKGdzdF9pbnRlcmxlYXZlX2luaXQpLAotCSAgKGdzdF9pbnRlcmxlYXZlX3NldF9wcm9wZXJ0eSksIChnc3RfaW50ZXJsZWF2ZV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9pbnRlcmxlYXZlX3JlcXVlc3RfbmV3X3BhZCksIChnc3RfaW50ZXJsZWF2ZV9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X2ludGVybGVhdmVfc2lua19zZXRjYXBzKSwgKGdzdF9pbnRlcmxlYXZlX3NyY19xdWVyeV9kdXJhdGlvbiksCi0JICAoZ3N0X2ludGVybGVhdmVfc3JjX3F1ZXJ5X2xhdGVuY3kpLCAoZ3N0X2ludGVybGVhdmVfY29sbGVjdGVkKToKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5oOgotCSAgQWxsb3cgc2V0dGluZyBjaGFubmVsIHBvc2l0aW9ucyB2aWEgYSBwcm9wZXJ0eSBhbmQgYWxsb3cgdXNpbmcgdGhlCi0JICBjaGFubmVsIHBvc2l0aW9ucyBvbiB0aGUgaW5wdXQgYXMgdGhlIGNoYW5uZWwgcG9zaXRpb25zIG9mIHRoZSBvdXRwdXQuCi0JICBGaXggc29tZSBicm9rZW4gbG9naWMgYW5kIG1lbW9yeSBsZWFrcy4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzogKHNyY19oYW5kb2ZmX2Zsb2F0MzIpLAotCSAgKHNpbmtfaGFuZG9mZl9mbG9hdDMyKSwgKEdTVF9TVEFSVF9URVNUKSwgKGludGVybGVhdmVfc3VpdGUpOgotCSAgQWRkIHVuaXQgdGVzdHMgZm9yIGNoZWNraW5nIGNvcnJlY3QgaGFuZGxpbmcgb2YgY2hhbm5lbCBwb3NpdGlvbnMuCi0KLTIwMDgtMDYtMDIgMTI6MjI6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBXaGVuIHVzaW5nIGdzdF9lbGVtZW50X2l0ZXJhdGVfcGFkcygpIG9uZSBoYXMgdG8gdW5yZWYgZXZlcnkgcGFkIGFmdGVyIHVzYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX3F1ZXJ5X2R1cmF0aW9uKSwKLQkgIChnc3RfdmlkZW9taXhlcl9xdWVyeV9sYXRlbmN5KToKLQkgIFdoZW4gdXNpbmcgZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzKCkgb25lIGhhcyB0byB1bnJlZiBldmVyeSBwYWQKLQkgIGFmdGVyIHVzYWdlLgotCi0yMDA4LTA1LTMxIDE2OjUzOjIzICswMDAwICBCYXN0aWVuIE5vY2VyYSA8aGFkZXNzQGhhZGVzcy5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4LzogSW1wcm92ZSBtZXRhLWRhdGEgaGFuZGxpbmcsIGFkZCAnY29tbWVudCcsICdkZXNjcmlwdGlvbicgYW5kICdjb3B5cmlnaHQnIHRhZyBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEJhc3RpZW4gTm9jZXJhIDxoYWRlc3MgYXQgaGFkZXNzIGRvdCBuZXQ+Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdGFnX2FkZF9zdHIpLAotCSAgKHF0ZGVtdXhfcGFyc2VfdWR0YSk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICBJbXByb3ZlIG1ldGEtZGF0YSBoYW5kbGluZywgYWRkICdjb21tZW50JywgJ2Rlc2NyaXB0aW9uJyBhbmQKLQkgICdjb3B5cmlnaHQnIHRhZyBoYW5kbGluZy4KLQkgIEZpeGVzICM1MzU5MzUKLQotMjAwOC0wNS0zMSAxNTozMDo0MSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogTWFrZSBzdXJlIHdlIHdlIGRvbid0IGNsaXAgdGhlIHNlZ21lbnQncyBzdG9wIHVzaW5nIHRoZSBtYWluIHNlZ21lbnQgZHVyYXRpb24gYXMgdGhhdCBjb3VsZCBjci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTA1LTMxICBKdWxpZW4gTW91dHRlICA8anVsaWVuQGZsdWVuZG8uY29tPgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9maW5kX2tleWZyYW1lKSwKLQkgIChnc3RfcXRkZW11eF9maW5kX3NlZ21lbnQpLCAoZ3N0X3F0ZGVtdXhfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfcXRkZW11eF9zZWVrX3RvX3ByZXZpb3VzX2tleWZyYW1lKSwKLQkgIChnc3RfcXRkZW11eF9hY3RpdmF0ZV9zZWdtZW50KSwgKGdzdF9xdGRlbXV4X2xvb3ApOiBNYWtlIHN1cmUgd2UKLQkgIHdlIGRvbid0IGNsaXAgdGhlIHNlZ21lbnQncyBzdG9wIHVzaW5nIHRoZSBtYWluIHNlZ21lbnQgZHVyYXRpb24KLQkgIGFzCi0JICB0aGF0IGNvdWxkIGNyb3AgcXVpdGUgc29tZSB2aWRlbyBmcmFtZXMuIE1ha2UgcmV2ZXJzZSBwbGF5YmFjawotCSAgc3VwcG9ydAotCSAgbW9yZSByb2J1c3QgYW5kIHN1cHBvcnQgZWRpdCBsaXN0cy4gU3VwcG9ydCBzZWVraW5nIHRvIHRoZSBsYXN0Ci0JICBmcmFtZSwKLQkgIGFuZCBmaXggcmV2ZXJzZSBsb29waW5nIHBsYXliYWNrLiBBZGQgc29tZSBkZWJ1Z2dpbmcuCi0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaDogVXBkYXRlZC4KLQotMjAwOC0wNS0zMSAwODozNzowMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiBEb24ndCBjbGlwIGZsb2F0L2RvdWJsZSBzYW1wbGVzLCBjb3JyZWN0bHkgdW5zZXQgcGFzc3Rocm91Z2ggbW9kZSBhbmQgdXNlIGJldHRlciByb3UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgKGdzdF9paXJfZXF1YWxpemVyX3RyYW5zZm9ybV9pcCk6Ci0JICBEb24ndCBjbGlwIGZsb2F0L2RvdWJsZSBzYW1wbGVzLCBjb3JyZWN0bHkgdW5zZXQgcGFzc3Rocm91Z2ggbW9kZQotCSAgYW5kIHVzZSBiZXR0ZXIgcm91bmRpbmcgZm9yIGludGVnZXIgc2FtcGxlcy4KLQotMjAwOC0wNS0zMCAxMTowMzo1NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci4qOiBVcGRhdGUgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgb25seSB3aGVuIG5lZWRlZCBpbiB0aGUgdHJhbnNmb3JtX2lwIGZ1bmN0aW9uIGFuZCBjb3IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5KSwgKGdzdF9paXJfZXF1YWxpemVyX2luaXQpLAotCSAgKHNldHVwX2ZpbHRlciksIChzZXRfcGFzc3Rocm91Z2gpLCAodXBkYXRlX2NvZWZmaWNpZW50cyksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaDoKLQkgIFVwZGF0ZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyBvbmx5IHdoZW4gbmVlZGVkIGluIHRoZSB0cmFuc2Zvcm1faXAKLQkgIGZ1bmN0aW9uIGFuZCBjb3JyZWN0bHkgc2V0IHRoZSBlbGVtZW50IGludG8gcGFzc3Rocm91Z2ggbW9kZSBpZiB0aGUKLQkgIGdhaW4gb2YgYWxsIGJhbmRzIGlzIDAuCi0KLTIwMDgtMDUtMjkgMTE6MzA6MTYgKzAwMDAgIFNlYmFzdGlhbiBLZWxsZXIgPHNlYmFzdGlhbi1rZWxsZXJAZ214LmRlPgotCi0JICBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogVHJ5IHRvIHNraXAgcGl4ZWxzIG9yIGFyZWFzIHRoYXQgYXJlIHRvbyBkYXJrIG9yIHRvbyBicmlnaHQgZm9yIHVzIHRvIGRvIG1lYW5pbmdmdWxsIGNvbG9yIGRldGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IFNlYmFzdGlhbiBLZWxsZXIgPHNlYmFzdGlhbi1rZWxsZXIgYXQgZ214IGRvdCBkZT4KLQkgICogZ3N0L2FscGhhL2dzdGFscGhhLmM6IChnc3RfYWxwaGFfY2xhc3NfaW5pdCksIChnc3RfYWxwaGFfaW5pdCksCi0JICAoZ3N0X2FscGhhX3NldF9wcm9wZXJ0eSksIChnc3RfYWxwaGFfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYWxwaGFfY2hyb21hX2tleV9heXV2KSwgKGdzdF9hbHBoYV9jaHJvbWFrZXlfcm93X2k0MjApOgotCSAgVHJ5IHRvIHNraXAgcGl4ZWxzIG9yIGFyZWFzIHRoYXQgYXJlIHRvbyBkYXJrIG9yIHRvbyBicmlnaHQgZm9yIHVzIHRvIGRvCi0JICBtZWFuaW5nZnVsbCBjb2xvciBkZXRlY3Rpb24uCi0JICBBZGRlZCBwcm9wZXJ0aWVzIHRvIGNvbnRyb2wgdGhlIHNlbnNpdGl2aXR5IHRvIGxpZ2h0IGFuZCBkYXJrbmVzcy4KLQkgIEFkZGVkIHNvbWUgc21hbGwgY2xlYW51cHMuIEZpeGVzICM1MTIzNDUuCi0KLTIwMDgtMDUtMjggMjA6MDE6MzIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBJZ25vcmUgc29tZSBtb3JlIGdlbmVyYXRlZCB0aGluZ3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBzb21lIG1vcmUgZ2VuZXJhdGVkIHRoaW5ncwotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIElnbm9yZSBPU1MgZWxlbWVudHMgaW4gdGhlIHN0YXRlIGNoYW5nZXMgdGVzdCB0b28uCi0KLTIwMDgtMDUtMjggMTY6MjI6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEFkZCBTTVBURSBlZmZlY3QgZWxlbWVudHMgdG8gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBTTVBURSBlZmZlY3QgZWxlbWVudHMgdG8gZG9jcy4KLQotMjAwOC0wNS0yOCAxNDozMTowNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBEb2N1bWVudCB3aGF0cyBmaXJzdCBzaG93biBvbiB0aGUgZmRvIHBsdWdpbiBkb2NzIHBhZ2UgOikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JICBEb2N1bWVudCB3aGF0cyBmaXJzdCBzaG93biBvbiB0aGUgZmRvIHBsdWdpbiBkb2NzIHBhZ2UgOikKLQotMjAwOC0wNS0yOCAxNDowNzoyMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBSZW5hbWUgYXVkaW92b2ljZSB0byBhdWRpb2thcmFva2UgYW5kIGFkZCBpdCB0byB0aGUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2thcmFva2UuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9rYXJhb2tlLmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvdm9pY2UuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW92b2ljZS5oOgotCSAgUmVuYW1lIGF1ZGlvdm9pY2UgdG8gYXVkaW9rYXJhb2tlIGFuZCBhZGQgaXQgdG8gdGhlIGRvY3MuCi0KLTIwMDgtMDUtMjggMTM6Mjg6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRG9jdW1lbnQgYWFzaW5rIGFuZCBjYWNhc2luay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBSRVFVSVJFTUVOVFM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkaW8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbTJrMS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JICAqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgICogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkgIERvY3VtZW50IGFhc2luayBhbmQgY2FjYXNpbmsuCi0KLTIwMDgtMDUtMjggMDg6MzY6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci4qOiBkdXJhdGlvbiBhbmQgbGF0ZW5jeSBxdWVyaWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX3Jlc2V0KSwKLQkgIChnc3RfdmlkZW9taXhlcl9pbml0KSwgKGdzdF92aWRlb21peGVyX3F1ZXJ5X2R1cmF0aW9uKSwKLQkgIChnc3RfdmlkZW9taXhlcl9xdWVyeV9sYXRlbmN5KSwgKGdzdF92aWRlb21peGVyX3F1ZXJ5KSwKLQkgIChnc3RfdmlkZW9taXhlcl9ibGVuZF9idWZmZXJzKToKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5oOgotCSAgSW1wbGVtZW50IHBvc2l0aW9uIChpbiB0aW1lKSwgZHVyYXRpb24gYW5kIGxhdGVuY3kgcXVlcmllcy4KLQotMjAwOC0wNS0yOCAwODoxNDoxNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IEltcGxlbWVudCBsYXRlbmN5IHF1ZXJ5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzogKGdzdF9pbnRlcmxlYXZlX3NyY19xdWVyeV9kdXJhdGlvbiksCi0JICAoZ3N0X2ludGVybGVhdmVfc3JjX3F1ZXJ5X2xhdGVuY3kpLCAoZ3N0X2ludGVybGVhdmVfc3JjX3F1ZXJ5KToKLQkgIEltcGxlbWVudCBsYXRlbmN5IHF1ZXJ5LgotCi0yMDA4LTA1LTI3IDE3OjU1OjMwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLio6IEltcGxlbWVudCBwcm9wZXIgc2Vlay9uZXdzZWdtZW50IGhhbmRsaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX3Jlc2V0KSwKLQkgIChnc3RfdmlkZW9taXhlcl9pbml0KSwgKGdzdF92aWRlb21peGVyX3JlcXVlc3RfbmV3X3BhZCksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9xdWV1ZXMpLCAoZm9yd2FyZF9ldmVudF9mdW5jKSwKLQkgIChmb3J3YXJkX2V2ZW50KSwgKGdzdF92aWRlb21peGVyX3NyY19ldmVudCksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfc2lua19ldmVudCk6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuaDoKLQkgIEltcGxlbWVudCBwcm9wZXIgc2Vlay9uZXdzZWdtZW50IGhhbmRsaW5nLgotCSAgQmFzZWQgb24gYWRkZXIncyBpbXBsZW1lbnRhdGlvbi4KLQkgIEZpeGVzICM1MzUxMjEKLQotMjAwOC0wNS0yNiAxNjoyNToxNSArMDAwMCAgal4gPGpAb2lsMjEub3JnPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBjYXBzIGZvciBEVkNQUk81MCBhbmQgRFZDUFJPIEhEIFBBTC9OVFNDLiBTZWUgIzUyNjQ4MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IGpeIDxqIGF0IG9pbDIxIGRvdCBvcmc+Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICBBZGQgY2FwcyBmb3IgRFZDUFJPNTAgYW5kIERWQ1BSTyBIRCBQQUwvTlRTQy4gU2VlICM1MjY0ODEuCi0KLTIwMDgtMDUtMjYgMTU6NTE6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogQWRkIHNpbXBsZSB2b2ljZSByZW1vdmFsIGVsZW1lbnQuIFlheSBrYXJhb2tlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvdm9pY2UuYzogKGdzdF9hdWRpb192b2ljZV9iYXNlX2luaXQpLAotCSAgKGdzdF9hdWRpb192b2ljZV9jbGFzc19pbml0KSwgKGdzdF9hdWRpb192b2ljZV9pbml0KSwKLQkgICh1cGRhdGVfZmlsdGVyKSwgKGdzdF9hdWRpb192b2ljZV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9hdWRpb192b2ljZV9nZXRfcHJvcGVydHkpLCAoZ3N0X2F1ZGlvX3ZvaWNlX3NldHVwKSwKLQkgIChnc3RfYXVkaW9fdm9pY2VfdHJhbnNmb3JtX2ludCksIChnc3RfYXVkaW9fdm9pY2VfdHJhbnNmb3JtX2Zsb2F0KSwKLQkgIChnc3RfYXVkaW9fdm9pY2VfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW92b2ljZS5oOgotCSAgQWRkIHNpbXBsZSB2b2ljZSByZW1vdmFsIGVsZW1lbnQuIFlheSBrYXJhb2tlLgotCi0yMDA4LTA1LTI2IDE1OjM5OjI2ICswMDAwICBXaWxsaWFtIE0uIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBGaXggcG90ZW50aWFsIGNhcHMgbGVhay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdpbGxpYW0gTS4gQnJhY2sgPHdicmFjayBhdCBtbW0gZG90IGNvbSBkb3QgaGs+Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdCk6Ci0JICBGaXggcG90ZW50aWFsIGNhcHMgbGVhay4KLQkgIElmIHdlIGNhbid0IGdldCB0aGUgZnJhbWVyYXRlIHdpdGggYW4gaW9jdGwsIHRyeSB0byBnZXQgaXQgd2l0aCB0aGUKLQkgIGN1cnJlbnQgbm9ybS4gRml4ZXMgIzUyMDA5Mi4KLQotMjAwOC0wNS0yNiAxNToxNDo1NSArMDAwMCAgV2lsbGlhbSBNLiBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogSWYgd2UgZmFpbCB0byBnZXQgdGhlIGZyYW1lIGludGVydmFscywgc2ltcGx5IGRvbid0IHRvdWNoIHRoZSBmcmFtZXJhdGVzIG9uIHRoZSB0ZW1wbGF0ZSBjYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV2lsbGlhbSBNLiBCcmFjayA8d2JyYWNrIGF0IG1tbSBkb3QgY29tIGRvdCBoaz4KLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSk6Ci0JICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgZnJhbWUgaW50ZXJ2YWxzLCBzaW1wbHkgZG9uJ3QgdG91Y2ggdGhlIGZyYW1lcmF0ZXMKLQkgIG9uIHRoZSB0ZW1wbGF0ZSBjYXBzIGluc3RlYWQgb2YgZGlzY2FyZGluZyB0aGUgZm9ybWF0LiBTZWUgIzUyMDA5Mi4KLQotMjAwOC0wNS0yNiAxNDo1Mjo1MSArMDAwMCAgV2lsbGlhbSBNLiBCcmFjayA8d2JyYWNrQG1tbS5jb20uaGs+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogQWRkIE5WMTIsIE5WMjEgYW5kIGJheWVyIHN1cHBvcnQuIFNlZSAjNTIwMDkyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV2lsbGlhbSBNLiBCcmFjayA8d2JyYWNrIGF0IG1tbSBkb3QgY29tIGRvdCBoaz4KLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfdjRsMmZvdXJjY190b19zdHJ1Y3R1cmUpLAotCSAgKGdzdF92NGwyX2dldF9jYXBzX2luZm8pOgotCSAgQWRkIE5WMTIsIE5WMjEgYW5kIGJheWVyIHN1cHBvcnQuIFNlZSAjNTIwMDkyLgotCi0yMDA4LTA1LTI2IDEzOjUxOjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IFVuYnJlYWsgc2VnbWVudCBhY3RpdmF0aW9uIGFnYWluLiBGaXhlcyAjNTMxNjcyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2ZpbmRfc2VnbWVudCksCi0JICAoZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCk6Ci0JICBVbmJyZWFrIHNlZ21lbnQgYWN0aXZhdGlvbiBhZ2Fpbi4gRml4ZXMgIzUzMTY3Mi4KLQotMjAwOC0wNS0yNiAxMDoyODo0NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogQWRkIGFub3RoZXIgZXhhbXBsZSBsYXVuY2ggbGluZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIEFkZCBhbm90aGVyIGV4YW1wbGUgbGF1bmNoIGxpbmUuCi0JICAqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzogKGludGVybGVhdmVfMjQpLAotCSAgKGdzdF9pbnRlcmxlYXZlX2ZpbmFsaXplKSwgKGdzdF9pbnRlcmxlYXZlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2ludGVybGVhdmVfY2xhc3NfaW5pdCksIChnc3RfaW50ZXJsZWF2ZV9pbml0KSwKLQkgIChnc3RfaW50ZXJsZWF2ZV9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X2ludGVybGVhdmVfcmVsZWFzZV9wYWQpLAotCSAgKGdzdF9pbnRlcmxlYXZlX2NoYW5nZV9zdGF0ZSksIChfX3JlbW92ZV9jaGFubmVscyksCi0JICAoX19zZXRfY2hhbm5lbHMpLCAoZ3N0X2ludGVybGVhdmVfc2lua19nZXRjYXBzKSwKLQkgIChnc3RfaW50ZXJsZWF2ZV9zZXRfcHJvY2Vzc19mdW5jdGlvbiksCi0JICAoZ3N0X2ludGVybGVhdmVfc2lua19zZXRjYXBzKSwgKGdzdF9pbnRlcmxlYXZlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9pbnRlcmxlYXZlX3NyY19xdWVyeV9kdXJhdGlvbiksIChnc3RfaW50ZXJsZWF2ZV9zcmNfcXVlcnkpLAotCSAgKGZvcndhcmRfZXZlbnRfZnVuYyksIChmb3J3YXJkX2V2ZW50KSwgKGdzdF9pbnRlcmxlYXZlX3NyY19ldmVudCksCi0JICAoZ3N0X2ludGVybGVhdmVfY29sbGVjdGVkKToKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5oOgotCSAgTWFqb3IgcmV3cml0ZSBvZiBpbnRlcmxlYXZlIHVzaW5nIEdzdENvbGxlY3RwYWRzLiBUaGlzIG5ldyB2ZXJzaW9uCi0JICBhbHNvIHN1cHBvcnRzIGFsbW9zdCBhbGwgcmF3IGF1ZGlvIGZvcm1hdHMgYW5kIGhhcyBiZXR0ZXIgY2FwcwotCSAgbmVnb3RpYXRpb24uIEZpeGVzIGJ1ZyAjNTA2NTk0LgotCSAgQWxzbyB1cGRhdGUgZG9jcyBhbmQgYWRkIHNvbWUgbW9yZSBleGFtcGxlcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jOiAoaW50ZXJsZWF2ZV9jaGFpbl9mdW5jKSwKLQkgIChHU1RfU1RBUlRfVEVTVCksIChzcmNfaGFuZG9mZl9mbG9hdDMyKSwgKHNpbmtfaGFuZG9mZl9mbG9hdDMyKSwKLQkgIChpbnRlcmxlYXZlX3N1aXRlKToKLQkgIEFkZCBzb21lIG1vcmUgZXh0ZW5zaXZlIHVuaXQgdGVzdHMgZm9yIGludGVybGVhdmUuCi0KLTIwMDgtMDUtMjYgMDk6NTc6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvbid0IHVzZSBfZ3N0X3BhZCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL3N3aXRjaC9zd2l0Y2hlci5jOiAoc3dpdGNoX3RpbWVyKToKLQkgICogZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYzogKGdzdF9yZ192b2x1bWVfaW5pdCk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL2dzdHJ0cGNsaWVudC5jOiAoY3JlYXRlX3N0cmVhbSk6Ci0JICAqIGdzdC9zZHAvZ3N0c2RwZGVtdXguYzogKGdzdF9zZHBfZGVtdXhfc3RyZWFtX2NvbmZpZ3VyZV91ZHApLAotCSAgKGdzdF9zZHBfZGVtdXhfc3RyZWFtX2NvbmZpZ3VyZV91ZHBfc2luayk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHBhZF9hZGRlZF9zZXR1cF9kYXRhX2NoZWNrX2Zsb2F0MzJfOGNoX2NiKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOiAoc2VuZF9lb3NfZXZlbnQpLAotCSAgKHNlbmRfdGFnX2V2ZW50KToKLQkgIERvbid0IHVzZSBfZ3N0X3BhZCgpLgotCi0yMDA4LTA1LTI1IDE2OjA5OjM5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9mbGFjLzogU2V0IHRoZSBjaGFubmVsIGxheW91dCB3aGVuIGRlY29kaW5nIEZMQUMgZmlsZXMgd2l0aCBtb3JlIHRoYW4gMiBjaGFubmVscyBhcyBkZWZpbmVkIGJ5IHRoZSBGTEFDIHNwZWMuIEZpeC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfd3JpdGUpOgotCSAgU2V0IHRoZSBjaGFubmVsIGxheW91dCB3aGVuIGRlY29kaW5nIEZMQUMgZmlsZXMgd2l0aCBtb3JlIHRoYW4gMgotCSAgY2hhbm5lbHMgYXMgZGVmaW5lZCBieSB0aGUgRkxBQyBzcGVjLiBGaXhlcyBidWcgIzUzNDU3MC4KLQkgIEFsc28gZG9uJ3QgdHJ5IHRvIGRlY29kZSBsZWZ0L3NpZGUsIHJpZ2h0L3NpZGUgYW5kIG1pZC9zaWRlIGZpbGVzCi0JICBhcyB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgYXQgYWxsLgotCi0yMDA4LTA1LTI0IDEyOjU1OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IFdlIG5lZWQgLWJhc2UgQ1ZTIChydHNwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBXZSBuZWVkIC1iYXNlIENWUyAocnRzcCkuCi0KLTIwMDgtMDUtMjIgMTk6NDc6NTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZG9jcy9wbHVnaW5zLzogQWRkIGludGVybGVhdmUvZGVpbnRlcmxlYXZlIHRvIHRoZSBkb2NzIGFuZCB3aGlsZSBhdCB0aGF0IHJ1biBtYWtlIHVwZGF0ZSBpbiBkb2NzL3BsdWdpbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuc2lnbmFsczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsc2FzcGRpZi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbXJ3Yi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYmF5ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYnoyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkYXVkaW8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2R4YXBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRmYnZpZGVvc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdHNkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHZiLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2ZHNwdS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mYWFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZhYWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmJkZXZzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZlc3RpdmFsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZpbHRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHZkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mcmVlemUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3NtLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taDI2NHBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tamFjay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sYWRzcGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWV0YWRhdGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW1zLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vZHBsdWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXBlZzJlbmMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXBlZzR2aWRlb3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWd0c3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWd2aWRlb3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11c2VwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11c2ljYnJhaW56LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW12ZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmVvbi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uc2ZkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbnV2ZGVtdXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmF3cGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVhbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJmYnNyYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZGwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2RwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNlbGVjdG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNuZGZpbGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291bmR0b3VjaC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGNkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXhyZXNhbXBsZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zdGVyZW8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdHRhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZjZHNyYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb3NpZ25hbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12bW5jLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdpbGRtaWRpLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXgyNjQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teHZpZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sOgotCSAgQWRkIGludGVybGVhdmUvZGVpbnRlcmxlYXZlIHRvIHRoZSBkb2NzIGFuZCB3aGlsZSBhdCB0aGF0Ci0JICBydW4gbWFrZSB1cGRhdGUgaW4gZG9jcy9wbHVnaW5zLgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzoKLQkgIEFkZCBhIHBhcmFwcmFwaCBhYm91dCB1c2luZyBhIHF1ZXVlIGFuZCBhdWRpb2NvbnZlcnQgYWZ0ZXIgdGhlIHNvdXJjZQotCSAgcGFkcyB0byB0aGUgZG9jcy4KLQotMjAwOC0wNS0yMiAxODo1NTowOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuKjogRG9uJ3Qgc2V0IGEgZ2V0Y2FwcygpIGZ1bmN0aW9uIG9uIHRoZSBzcmMgcGFkcyBhcyBpdCdzIG5vdCByZXF1aXJlZCBhbmQgdGhlIGRlZmF1bHQgZ2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogKGdzdF9kZWludGVybGVhdmVfYmFzZV9pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX2NsYXNzX2luaXQpLCAoZ3N0X2RlaW50ZXJsZWF2ZV9pbml0KSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX2FkZF9uZXdfcGFkcyksIChnc3RfZGVpbnRlcmxlYXZlX3NpbmtfZ2V0Y2Fwcyk6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5oOgotCSAgRG9uJ3Qgc2V0IGEgZ2V0Y2FwcygpIGZ1bmN0aW9uIG9uIHRoZSBzcmMgcGFkcyBhcyBpdCdzIG5vdCByZXF1aXJlZAotCSAgYW5kIHRoZSBkZWZhdWx0IGdldGNhcHMoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb3JyZWN0IHJlc3VsdHMgZm9yCi0JICBvdXIgc3JjIHBhZHMuCi0JICBDb21wbGV0ZSBkb2N1bWVudGF0aW9uIGFuZCBhZGQgbXlzZWxmIHRvIHRoZSBhdXRob3JzIG9mIHRoZSBlbGVtZW50LgotCi0yMDA4LTA1LTIyIDE0OjQ5OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvdWRwL01ha2VmaWxlLmFtOiBBZGQgLURfR05VX1NPVVJDRSB0byBDRkxBR1Mgc28gd2UgZ2V0IHRoaW5ncyBsaWtlIEVBSV9BRERSRkFNSUxZIHdoZW4gaW5jbHVkaW5nIG5ldGRiLmggd2hlbiBidWkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSAgQWRkIC1EX0dOVV9TT1VSQ0UgdG8gQ0ZMQUdTIHNvIHdlIGdldCB0aGluZ3MgbGlrZSBFQUlfQUREUkZBTUlMWQotCSAgd2hlbiBpbmNsdWRpbmcgbmV0ZGIuaCB3aGVuIGJ1aWxkaW5nIGFnYWluc3QgZ2xpYmMgPj0gMi44LgotCi0yMDA4LTA1LTIyIDExOjE5OjAzICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzogRml4IGRlYnVnIHN0YXRlbWVudCBhcmd1bWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMDUtMjIgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmM6IChnc3Rfc21wdGVfYWxwaGFfc2V0Y2Fwcyk6IEZpeAotCSAgZGVidWcgc3RhdGVtZW50IGFyZ3VtZW50cy4KLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfc2V0dXBfcW9zX2RzY3ApOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IChnc3RfdWRwX2pvaW5fZ3JvdXApLAotCSAgKGdzdF91ZHBfbGVhdmVfZ3JvdXApOiBGaXggSVAgYW5kIElQVjYgb3B0aW9ucyB0byBtYWtlIGl0IHdvcmsKLQkgIG9uIG1vcmUgcGxhdGZvcm1zLgotCi0yMDA4LTA1LTIxIDE3OjUxOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy86IERvbid0IHVzZSBnc3RfZWxlbWVudF9nZXRfcGFkKCksIGl0J3MgYSBiYWQsIGJhZCBtZXRob2QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6IChzZXR1cF9zcmNfcGFkKSwKLQkgICh0ZWFyZG93bl9zcmNfcGFkKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWN5ZGVtdXguYzogKGljeWRlbXV4X2ZvdW5kX3BhZCksCi0JICAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOiAoc2V0dXBfc3JjX3BhZCksCi0JICAodGVhcmRvd25fc3JjX3BhZCksIChzZXR1cF9zaW5rX3BhZCksICh0ZWFyZG93bl9zaW5rX3BhZCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jOiAodmlkZW9fY3JvcF9nZXRfdGVzdF9jYXBzKSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2twYXJzZS5jOiAod2F2cGFja3BhcnNlX2ZvdW5kX3BhZCksCi0JICAoc2V0dXBfd2F2cGFja3BhcnNlKSwgKGNsZWFudXBfd2F2cGFja3BhcnNlKToKLQkgIERvbid0IHVzZSBnc3RfZWxlbWVudF9nZXRfcGFkKCksIGl0J3MgYSBiYWQsIGJhZCBtZXRob2QuCi0KLTIwMDgtMDUtMjEgMTc6Mzk6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIERvbid0IHVzZSBnc3RfZWxlbWVudF9nZXRfcGFkKCksIGl0J3MgYSBiYWQgbWV0aG9kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc3JjLmM6IChnc3RfZ2NvbmZfYXVkaW9fc3JjX3Jlc2V0KSwKLQkgIChkb190b2dnbGVfZWxlbWVudCk6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOiAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfcmVzZXQpLAotCSAgKGRvX3RvZ2dsZV9lbGVtZW50KToKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuYzogKGdzdF9nY29uZl92aWRlb19zcmNfcmVzZXQpLAotCSAgKGRvX3RvZ2dsZV9lbGVtZW50KToKLQkgICogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzogKGdzdF9zd2l0Y2hfY29tbWl0X25ld19raWQpOgotCSAgKiBleHQvaGFsL2dzdGhhbGF1ZGlvc2luay5jOiAoZ3N0X2hhbF9hdWRpb19zaW5rX3Jlc2V0KSwKLQkgIChkb190b2dnbGVfZWxlbWVudCk6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzogKGdzdF9oYWxfYXVkaW9fc3JjX3Jlc2V0KSwKLQkgIChkb190b2dnbGVfZWxlbWVudCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzogKGdzdF9hdXRvX2F1ZGlvX3NpbmtfcmVzZXQpLAotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZGV0ZWN0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOiAoZ3N0X2F1dG9fdmlkZW9fc2lua19yZXNldCksCi0JICAoZ3N0X2F1dG9fdmlkZW9fc2lua19kZXRlY3QpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19pbml0KSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fZnJlZSksIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV91ZHBfc2luayksIChnc3RfcnRzcHNyY19za2lwX2x3cyksCi0JICAoZ3N0X3J0c3BzcmNfdW5za2lwX2x3cyksIChnc3RfcnRzcHNyY19za2lwX2NvbW1hcyksCi0JICAoZ3N0X3J0c3BzcmNfc2tpcF9pdGVtKSwgKGdzdF9ydHNwX2RlY29kZV9xdW90ZWRfc3RyaW5nKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9kaWdlc3RfY2hhbGxlbmdlKSwgKGdzdF9ydHNwc3JjX3BhcnNlX2F1dGhfaGRyKToKLQkgICogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogKHRlc3Rfd2l0aF9jYXBzKSwKLQkgICh2aWRlb19jcm9wX2dldF90ZXN0X2NhcHMpOgotCSAgRG9uJ3QgdXNlIGdzdF9lbGVtZW50X2dldF9wYWQoKSwgaXQncyBhIGJhZCBtZXRob2QuCi0KLTIwMDgtMDUtMjEgMTc6MzU6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvOiBKb2luaW5nIGEgbXVsdGljYXN0IGdyb3VwIGFuZCBzZXR0aW5nIHRoZSBsb29wL3R0bCBwcm9wZXJ0aWVzIGFyZSB0b3RhbGx5IHVucmVsYXRlZCB0YXNrcyBhcmUgbXVzdCBiZSBzZXBhci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2luaXRfc2VuZCksCi0JICAoZ3N0X211bHRpdWRwc2lua19hZGRfaW50ZXJuYWwpOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IChnc3RfdWRwX3NldF9sb29wX3R0bCksCi0JICAoZ3N0X3VkcF9qb2luX2dyb3VwKToKLQkgICogZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19zdGFydCk6Ci0JICBKb2luaW5nIGEgbXVsdGljYXN0IGdyb3VwIGFuZCBzZXR0aW5nIHRoZSBsb29wL3R0bCBwcm9wZXJ0aWVzIGFyZQotCSAgdG90YWxseSB1bnJlbGF0ZWQgdGFza3MgYXJlIG11c3QgYmUgc2VwYXJhdGVkLgotCi0yMDA4LTA1LTIxIDE0OjA5OjQxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEFsc28gc3VwcG9ydCBhbGF3L211bGF3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBBbHNvIHN1cHBvcnQgYWxhdy9tdWxhdy4KLQotMjAwOC0wNS0yMSAxMzo0Nzo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuKjogQWRkIGEgZml4bWUgZm9yIHRoZSBhdXRvLW11bHRpY2FzdCBwcm9wZXJ0eS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX3NldHVwX3Fvc19kc2NwKSwgKGdzdF9tdWx0aXVkcHNpbmtfYWRkX2ludGVybmFsKToKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIEFkZCBhIGZpeG1lIGZvciB0aGUgYXV0by1tdWx0aWNhc3QgcHJvcGVydHkuCi0JICBGaXggc29tZSBjb25mdXNpbmcgZGVidWcgbWVzc2FnZXMuCi0JICBEaXNhYmxlIHNldHRpbmcgYSBxb3MgdmFsdWUgYnkgZGVmYXVsdC4KLQotMjAwOC0wNS0yMSAxMTozODoxNyArMDAwMCAgR3VzdGFmIFLDpG50aWzDpCA8Zy5yYW50aWxhQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogSWdub3JlIEVQRVJNIGVycm9ycyBmcm9tIHNlbmR0by4gRml4ZXMgIzUzMzYxOS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEd1c3RhZiBSw6RudGlsw6QgPGcgZG90IHJhbnRpbGEgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyKToKLQkgIElnbm9yZSBFUEVSTSBlcnJvcnMgZnJvbSBzZW5kdG8uIEZpeGVzICM1MzM2MTkuCi0KLTIwMDgtMDUtMjEgMTA6NTE6NTIgKzAwMDAgIEhlbnJpayBFcmlrc3NvbiA8aGVucmlrZW5AYXhpcy5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLio6IEFkZCBxb3MtZHNjcCBwcm9wZXJ0eSB0byBtYW5hZ2UgdGhlIFF1YWxpdHkgb2Ygc2VydmljZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEhlbnJpayBFcmlrc3NvbiA8aGVucmlrZW4gYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2luaXQpLCAoZ3N0X211bHRpdWRwc2lua19zZXR1cF9xb3NfZHNjcCksCi0JICAoZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpdWRwc2lua19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfaW5pdF9zZW5kKSwgKGdzdF9tdWx0aXVkcHNpbmtfYWRkX2ludGVybmFsKToKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgIEFkZCBxb3MtZHNjcCBwcm9wZXJ0eSB0byBtYW5hZ2UgdGhlIFF1YWxpdHkgb2Ygc2VydmljZS4KLQotMjAwOC0wNS0yMSAxMDowOToyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOiBJbXByb3ZlIGRlYnVnZ2luZyBvZiB0aGUgaWRlbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOiAoZ3N0X3J0cF90aGVvcmFfZGVwYXlfcHJvY2Vzcyk6Ci0JICBJbXByb3ZlIGRlYnVnZ2luZyBvZiB0aGUgaWRlbnQuCi0KLTIwMDgtMDUtMjEgMDk6NTY6MDIgKzAwMDAgIEJydW5vIFNhbnRvcyA8YnJ1bm9mQHVhLnB0PgotCi0JICBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLio6IFByb3ZpZGUgYSBidW5jaCBvZiBoZWxwZXIgbWV0aG9kcyB0byBkZWFsIHdpdGggSVB2NCBhbmQgSVB2NiB0cmFuc3BhcmVudGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQnJ1bm8gU2FudG9zIDxicnVub2YgYXQgdWEgZG90IHB0PgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmM6IChnc3RfdWRwX2dldF9hZGRyKSwKLQkgIChnc3RfdWRwX2pvaW5fZ3JvdXApLCAoZ3N0X3VkcF9sZWF2ZV9ncm91cCksCi0JICAoZ3N0X3VkcF9pc19tdWx0aWNhc3QpOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JICBQcm92aWRlIGEgYnVuY2ggb2YgaGVscGVyIG1ldGhvZHMgdG8gZGVhbCB3aXRoIElQdjQgYW5kIElQdjYKLQkgIHRyYW5zcGFyZW50bHkuCi0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfaW5pdCksIChnc3RfbXVsdGl1ZHBzaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X211bHRpdWRwc2lua19nZXRfcHJvcGVydHkpLCAoam9pbl9tdWx0aWNhc3QpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfaW5pdF9zZW5kKSwgKGdzdF9tdWx0aXVkcHNpbmtfYWRkX2ludGVybmFsKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX3JlbW92ZSk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBBZGQgbXVsdGljYXN0IFRUTCBhbmQgbG9vcGJhY2sgcHJvcGVydGllcy4KLQkgIFVzZSB0aGUgaGVscGVyIG1ldGhvZHMgdG8gaW1wbGVtZW50IGlwNCBhbmQgaXA2LgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jcmVhdGUpLCAoZ3N0X3VkcHNyY19zdGFydCk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICBVc2UgdGhlIGhlbHBlciBtZXRob2RzIHRvIGltcGxlbWVudCBpcDQgYW5kIGlwNi4KLQkgIEZpeGVzICM1MTU5NjIuCi0KLTIwMDgtMDUtMjEgMDk6Mzg6NDggKzAwMDAgIFBhdHJpY2sgUmFkaXppIDxwYXRyaWNrLnJhZGl6aUBheGlzLmNvbT4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC4qOiBEb24ndCBibGluZGx5IGNvcHkgdGhlIG1pbWUtdHlwZSBhcyB0aGUgY2FwcyBuYW1lIGJlY2F1c2UgdGhleSBub3QgYWx3YXlzIG1hcCBkaXJlY3RsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQYXRyaWNrIFJhZGl6aSA8cGF0cmljayBkb3QgcmFkaXppIGF0IGF4aXMgZG90IGNvbT4KLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiAoZ3N0X211bHRpcGFydF9kZW11eF9jbGFzc19pbml0KSwKLQkgIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2dldF9nc3RuYW1lKSwKLQkgIChnc3RfbXVsdGlwYXJ0X2ZpbmRfcGFkX2J5X21pbWUpLCAoZ3N0X211bHRpcGFydF9kZW11eF9jaGFpbik6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaDoKLQkgIERvbid0IGJsaW5kbHkgY29weSB0aGUgbWltZS10eXBlIGFzIHRoZSBjYXBzIG5hbWUgYmVjYXVzZSB0aGV5IG5vdAotCSAgYWx3YXlzIG1hcCBkaXJlY3RseS4gSW5zdGVhZCB1c2UgYSBoYXNodGFibGUgd2l0aCBjb21tb24gbWFwcGluZ3MuCi0JICBGaXhlcyAjNTMzMjg3LgotCi0yMDA4LTA1LTIwIDE3OjI3OjM1ICswMDAwICBNaWNoYWVsIE1lZWtzIDxtbWVla3NAeGltaWFuLm9yZz4KLQotCSAgZXh0L2VzZC9lc2RzaW5rLmM6IFdoZW4gd2UgcG9zdCBhbiBlcnJvciwgd2UgbXVzdCByZXR1cm4gLTEgdG8gbGV0IHRoZSBwYXJlbnQga25vdyB0aGF0IHdlIGNhbm5vdCB3cml0ZSB0aGUgc2VnbWVudCBlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua193cml0ZSk6Ci0JICBXaGVuIHdlIHBvc3QgYW4gZXJyb3IsIHdlIG11c3QgcmV0dXJuIC0xIHRvIGxldCB0aGUgcGFyZW50IGtub3cgdGhhdCB3ZQotCSAgY2Fubm90IHdyaXRlIHRoZSBzZWdtZW50IGVsc2UgaXQgd2lsbCBsb29wIGFuZCBjb250aW51ZSB0byBjYWxsIHVzIGFnYWluCi0JICBmb3JldmVyLiBQYXRjaCBieSBNaWNoYWVsIE1lZWtzLgotCi0yMDA4LTA1LTIwIDE0OjI0OjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogQWRkIG1pc3NpbmcgaW5jdWRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICBBZGQgbWlzc2luZyBpbmN1ZGVzLgotCi0yMDA4LTA1LTIwIDEzOjU3OjQ0ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBoMjY0cGF5Lio6IENvcnJlY3QgYSB0eXBvIChzaW5sZSAtPiBzaW5nbGUpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOiAoZ3N0X2gyNjRfc2Nhbl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfcnRwX2gyNjRfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIENvcnJlY3QgYSB0eXBvIChzaW5sZSAtPiBzaW5nbGUpLgotCi0yMDA4LTA1LTIwIDExOjMzOjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS4qOiBBZGQgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIG91dHB1dHRpbmcgcXVpY2t0aW1lLWxpa2UgQVZDIG91dHB1dCBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiAoZ3N0X3J0cF9oMjY0X2RlcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9pbml0KSwgKGdzdF9ydHBfaDI2NF9kZXBheV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9nZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9oMjY0X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkgIEFkZCBleHBlcmltZW50YWwgc3VwcG9ydCBmb3Igb3V0cHV0dGluZyBxdWlja3RpbWUtbGlrZSBBVkMgb3V0cHV0IGluCi0JICBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgYnl0ZXN0cmVhbSBvdXRwdXQuCi0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOiAoZ3N0X2gyNjRfc2Nhbl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfcnRwX2gyNjRfcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9oMjY0X3BheV9pbml0KSwKLQkgIChnc3RfcnRwX2gyNjRfcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9oMjY0X3BheV9wYXlsb2FkX25hbCksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9oYW5kbGVfYnVmZmVyKSwgKGdzdF9ydHBfaDI2NF9wYXlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2gyNjRfcGF5X2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSAgTWFrZSB0aGUgcGFyc2luZyBtb2RlIGNvbmZpZ3VyYWJsZSwgZm9yIHNvbWUgaW5wdXRzIHdlIGRvbid0IG5lZWQgdG8KLQkgIHNjYW4gZXZlcnkgYnl0ZSBmb3Igc3RhcnQgY29kZXMuCi0JICBPbmx5IHNldCB0aGUgbWFya2VyIGJpdCBvbiBBQ0NFU1MgdW5pdHMuCi0KLTIwMDgtMDUtMjAgMTA6NDc6MTAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogVXNlIGEgYmlnZ2VyIHR5cGUgaW4gaW50ZWdlciBtb2RlIGZvciB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgdG8gcHJldmVudCBvdmVyZmxvd3MuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIFVzZSBhIGJpZ2dlciB0eXBlIGluIGludGVnZXIgbW9kZSBmb3IgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIHRvCi0JICBwcmV2ZW50IG92ZXJmbG93cy4gVGhpcyBmaXhlcyB0aGUgY3JpcHBsZWQgc291bmQgd2hlbiB1c2luZyB0aGUKLQkgIGVxdWFsaXplciBpbiBpbnRlZ2VyIG1vZGUuIEZpeGVzIGJ1ZyAjNTEwODY1LgotCi0yMDA4LTA1LTIwIDEwOjQyOjMzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci4qOiBJbnN0ZWFkIG9mIGEgcmFuZG9tIG51bWJlciBmb3IgdGhlIHJlcXVlc3QgcGFkIGlkJ3MsIHVzZSBhIGNvdW50ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmg6Ci0JICBJbnN0ZWFkIG9mIGEgcmFuZG9tIG51bWJlciBmb3IgdGhlIHJlcXVlc3QgcGFkIGlkJ3MsCi0JICB1c2UgYSBjb3VudGVyLgotCSAgUmVnaXN0ZXIgdGhlIHZpZGVvbWl4ZXJwYWQgY2xhc3MgZnJvbSB0aGUgZWxlbWVudCdzIGNsYXNzX2luaXQKLQkgIHdoZXJlIGl0J3Mgc2FmZXIsIGFuZCBhbGxvd3MgdGhlIGRvY3MgZ2VuZXJhdG9yIHRvIHNjYW4gaXQuCi0KLTIwMDgtMDUtMjAgMDk6Mjk6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9zbXB0ZS86IEFkZCBuZXcgcGx1Z2luIHRoYXQgYWRkcyB0aGUgU01QVEUgdHJhbnNpdGlvbiBpbiB0aGUgYWxwaGEgY2hhbm5lbCBvZgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zbXB0ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfcGx1Z2luX2luaXQpOgotCSAgKiBnc3Qvc21wdGUvZ3N0c21wdGUuaDoKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYzoKLQkgIChnc3Rfc21wdGVfYWxwaGFfdHJhbnNpdGlvbl90eXBlX2dldF90eXBlKSwKLQkgIChnc3Rfc21wdGVfYWxwaGFfZ2V0X3R5cGUpLCAoZ3N0X3NtcHRlX2FscGhhX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3NtcHRlX2FscGhhX2NsYXNzX2luaXQpLCAoZ3N0X3NtcHRlX2FscGhhX3VwZGF0ZV9tYXNrKSwKLQkgIChnc3Rfc21wdGVfYWxwaGFfc2V0Y2FwcyksIChnc3Rfc21wdGVfYWxwaGFfZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X3NtcHRlX2FscGhhX2luaXQpLCAoZ3N0X3NtcHRlX2FscGhhX2ZpbmFsaXplKSwKLQkgIChnc3Rfc21wdGVfYWxwaGFfZG9fYXl1diksIChnc3Rfc21wdGVfYWxwaGFfZG9faTQyMCksCi0JICAoZ3N0X3NtcHRlX2FscGhhX3RyYW5zZm9ybSksIChnc3Rfc21wdGVfYWxwaGFfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc21wdGVfYWxwaGFfZ2V0X3Byb3BlcnR5KSwgKGdzdF9zbXB0ZV9hbHBoYV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmg6Ci0JICAqIGdzdC9zbXB0ZS9wbHVnaW4uYzogKHBsdWdpbl9pbml0KToKLQkgIEFkZCBuZXcgcGx1Z2luIHRoYXQgYWRkcyB0aGUgU01QVEUgdHJhbnNpdGlvbiBpbiB0aGUgYWxwaGEgY2hhbm5lbCBvZgotCSAgSTQyMCBhbmQgQVlVViBmcmFtZXMgc28gdGhhdCB0aGV5IGNhbiBiZSBibGVuZGVkIHdpdGggdmlkZW9taXhlciBsYXRlcgotCSAgb24uIFVzZXMgYWxsIG5pY2V0aWVzIHN1Y2ggYXMgdXNpbmcgYmFzZSB0cmFuc2Zvcm0gZm9yIGVmZmljaWVudCBhbGxvYwotCSAgYW5kIG5lZ290aWF0aW9uLiBJdCBjdXJyZW50bHkgcmVxdWlyZXMgR3N0Q29udHJvbGxlciB0byBjb250cm9sIHRoZQotCSAgcG9zaXRpb24gaW4gdGhlIHRyYW5zaXRpb24gZWZmZWN0LgotCi0yMDA4LTA1LTE5IDIxOjA1OjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIFRyeSB1c2luZyB0aGF5dGFucyBuZXcgbWVjaGFuaXNtIHRvIGdldCBleHRyYSBjbGFzc2VzIGludG8gcGx1Z2luIGRvY3MuIEFwYXJlbnRseSB3b3JrcyBmb3IgdGhlIEVxLiBGb3IgVmlkZW9NaXhlciB0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnR5cGVzOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICBUcnkgdXNpbmcgdGhheXRhbnMgbmV3IG1lY2hhbmlzbSB0byBnZXQgZXh0cmEgY2xhc3NlcyBpbnRvIHBsdWdpbgotCSAgZG9jcy4gQXBhcmVudGx5IHdvcmtzIGZvciB0aGUgRXEuIEZvciBWaWRlb01peGVyIHRoZSBHT2JqZWN0IHN0dWZmIGlzCi0JICBtaXNzaW5nIHN0aWxsLgotCi0yMDA4LTA1LTE5IDEyOjMyOjA2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOiBTZXQga2VlcC1wb3NpdGlvbnMgcHJvcGVydHkgdG8gVFJVRSBmb3IgdGhlIDggY2hhbm5lbCB0ZXN0IHRvIGVuc3VyZSB0aGF0IHRoZSBvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgU2V0IGtlZXAtcG9zaXRpb25zIHByb3BlcnR5IHRvIFRSVUUgZm9yIHRoZSA4IGNoYW5uZWwgdGVzdCB0byBlbnN1cmUKLQkgIHRoYXQgdGhlIG9yaWdpbmFsIGNoYW5uZWwgcG9zaXRpb24gaXMgc2V0IG9uIHRoZSBvdXRwdXQuCi0KLTIwMDgtMDUtMTkgMDc6NDY6MDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLio6IEFkZCBhIHByb3BlcnR5IHRvIHNlbGVjdCB3aGV0aGVyIGNoYW5uZWwgcG9zaXRpb25zIHNob3VsZCBiZSBrZXB0IG9uIHRoZSBtb25vIG91dHB1dCBiLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChnc3RfZGVpbnRlcmxlYXZlX2NsYXNzX2luaXQpLAotCSAgKGdzdF9kZWludGVybGVhdmVfaW5pdCksIChnc3RfZGVpbnRlcmxlYXZlX2FkZF9uZXdfcGFkcyksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9zZXRfcGFkc19jYXBzKSwgKGdzdF9kZWludGVybGVhdmVfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5oOgotCSAgQWRkIGEgcHJvcGVydHkgdG8gc2VsZWN0IHdoZXRoZXIgY2hhbm5lbCBwb3NpdGlvbnMgc2hvdWxkIGJlIGtlcHQgb24KLQkgIHRoZSBtb25vIG91dHB1dCBidWZmZXJzIG9yIHNob3VsZCBiZSBkcm9wcGVkLgotCi0yMDA4LTA1LTE4IDE5OjI3OjU5ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguYzogU2V0IHByb3BlciByYXRlIGluIGF2aSBzdHJlYW0gaGVhZGVyIGZvciBQQ00gYXVkaW8sIGFuZCBhbHNvIGRvIHNvbWUgbW9yZSBzYW5pdHkgY2hlY2tzIG9uIGNhcHMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmlfbXV4X2F1ZHNpbmtfc2V0X2NhcHMpOgotCSAgU2V0IHByb3BlciByYXRlIGluIGF2aSBzdHJlYW0gaGVhZGVyIGZvciBQQ00gYXVkaW8sIGFuZCBhbHNvIGRvIHNvbWUKLQkgIG1vcmUgc2FuaXR5IGNoZWNrcyBvbiBjYXBzIGluIHRoaXMgY2FzZS4gIEZpeGVzICM1MTE0ODkuCi0KLTIwMDgtMDUtMTcgMTk6Mzk6NTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLio6IFF1ZXVlIGV2ZW50cyB1bnRpbCBzcmMgcGFkcyB3ZXJlIGFkZGVkIGFuZCB0aGV5IGNhbiBiZSBzZW50LiBPdGhlcndpc2UgZG93bnN0cmVhbSB3aWxsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChnc3RfZGVpbnRlcmxlYXZlX2ZpbmFsaXplKSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX2luaXQpLCAoZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX3Byb2Nlc3MpLCAoZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX2FjdGl2YXRlX3B1c2gpOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuaDoKLQkgIFF1ZXVlIGV2ZW50cyB1bnRpbCBzcmMgcGFkcyB3ZXJlIGFkZGVkIGFuZCB0aGV5IGNhbiBiZSBzZW50LiBPdGhlcndpc2UKLQkgIGRvd25zdHJlYW0gd2lsbCBuZXZlciBnZXQgdGhlIGZpcnN0IG5ld3NlZ21lbnQgZXZlbnQuCi0KLTIwMDgtMDUtMTcgMTQ6MDU6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IEFsd2F5cyBzZXQgdGhlIGNoYW5uZWwgcG9zaXRpb25zIHdoZW4gZ3N0X2F1ZGlvX2dldF9jaGFubmVsX3Bvc2l0aW9ucygpIHJldHVybnMgc29tZXRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChnc3RfZGVpbnRlcmxlYXZlX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9nZXRjYXBzKToKLQkgIEFsd2F5cyBzZXQgdGhlIGNoYW5uZWwgcG9zaXRpb25zIHdoZW4gZ3N0X2F1ZGlvX2dldF9jaGFubmVsX3Bvc2l0aW9ucygpCi0JICByZXR1cm5zIHNvbWV0aGluZywgZXZlbiBpZiB0aGV5J3JlIG5vdCBzZXQgaW4gdGhlIGNhcHMuIFRoaXMgbWFrZXMKLQkgIHN1cmUgdGhhdCB0aGUgb3V0cHV0IGNoYW5uZWxzIGNhbiBiZSBpbnRlcmxlYXZlZCBhZ2FpbiBjb3JyZWN0bHkKLQkgIGluIHRoZSBtb25vL3N0ZXJlbyBjYXNlcyB0b28uCi0JICBEb24ndCBhc2sgZm9yIHRoZSBwZWVyY2FwcyBvZiB0aGUgY3VycmVudCBwYWQgaW4gZ2V0Y2FwcygpIGFzIHRoaXMKLQkgIG1pZ2h0IGNhbGwgZ2V0Y2FwcygpIGFnYWluIGFuZCBkZWFkbG9jay4KLQotMjAwOC0wNS0xNyAxMDozODoxOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IERvbid0IGluY2x1ZGUgdGhlIGdzdHY0bDJ4b3ZlcmxheS5oIGhlYWRlciBhcyB0aGUgWE92ZXJsYXkgc3VwcG9ydCBpc24ndCBpbXBsZW1lbnRlZCBhdCBhbGwgeWUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBEb24ndCBpbmNsdWRlIHRoZSBnc3R2NGwyeG92ZXJsYXkuaCBoZWFkZXIgYXMgdGhlIFhPdmVybGF5IHN1cHBvcnQKLQkgIGlzbid0IGltcGxlbWVudGVkIGF0IGFsbCB5ZXQgYW5kIHRoaXMgcmVxdWlyZXMgWCBoZWFkZXJzIHRvIGJlCi0JICBpbnN0YWxsZWQuIEZpeGVzIGJ1ZyAjNTMzMjY0LgotCi0yMDA4LTA1LTE2IDIxOjU2OjI0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9pbnRlcmxlYXZlLzogQWRkIHN1cHBvcnQgZm9yIGFsbCByYXcgYXVkaW8gZm9ybWF0cyBhbmQgcHJvdmlkZSBiZXR0ZXIgbmVnb3RpYXRpb24gaWYgdGhlIGNhcHMgYXJlIGNoYW5naW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogKGRlaW50ZXJsZWF2ZV8yNCksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9maW5hbGl6ZSksIChnc3RfZGVpbnRlcmxlYXZlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9jbGFzc19pbml0KSwgKGdzdF9kZWludGVybGVhdmVfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9hZGRfbmV3X3BhZHMpLCAoZ3N0X2RlaW50ZXJsZWF2ZV9zZXRfcGFkc19jYXBzKSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX3NldF9wcm9jZXNzX2Z1bmN0aW9uKSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX3Npbmtfc2V0Y2FwcyksIChfX3JlbW92ZV9jaGFubmVscyksCi0JICAoX19zZXRfY2hhbm5lbHMpLCAoZ3N0X2RlaW50ZXJsZWF2ZV9nZXRjYXBzKSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX3Byb2Nlc3MpLCAoZ3N0X2RlaW50ZXJsZWF2ZV9jaGFpbiksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX2FjdGl2YXRlX3B1c2gpOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuaDoKLQkgIEFkZCBzdXBwb3J0IGZvciBhbGwgcmF3IGF1ZGlvIGZvcm1hdHMgYW5kIHByb3ZpZGUgYmV0dGVyIG5lZ290aWF0aW9uCi0JICBpZiB0aGUgY2FwcyBhcmUgY2hhbmdpbmcuCi0JICBEb24ndCBhbGxvdyBjaGFuZ2VzIG9mIHRoZSBjaGFubmVsIHBvc2l0aW9ucyBhbmQgc2V0IHRoZSBwb3NpdGlvbiBvZgotCSAgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBvbiB0aGUgc3JjIHBhZCBjYXBzLgotCSAgR2VuZXJhbCBjbGVhbnVwIGFuZCBzbWFsbGVyIGJ1Z2ZpeGVzLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGVhdmUuYzogKGZsb2F0X2J1ZmZlcl9jaGVja19wcm9iZSk6Ci0JICBDaGVjayB0aGUgY2hhbm5lbCBwb3NpdGlvbnMgb24gdGhlIG91dHB1dCBidWZmZXIgY2Fwcy4KLQotMjAwOC0wNS0xNiAxNzo1MDoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEZpeCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYzoKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1hdWRpb3Rlc3QuYzoKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgIEZpeCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgotCi0yMDA4LTA1LTE0IDE4OjI4OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiBTbWFsbCBjb21tZW50IGFkZGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6IChnc3RfcnRwX2gyNjRfZGVwYXlfcHJvY2Vzcyk6Ci0JICBTbWFsbCBjb21tZW50IGFkZGVkLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzogKGdzdF9ydHBfaDI2NF9wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9kZWNvZGVfbmFsKSwgKGdzdF9ydHBfaDI2NF9wYXlfcGFyc2Vfc3BzX3BwcyksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9wYXlsb2FkX25hbCksIChnc3RfcnRwX2gyNjRfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgRGVidWcgc3RyaW5nIGNsZWFudXBzIChyZW1vdmUgdHJhaWxpbmcgXG4pCi0JICBSZWZhY3RvciBhbmQgY2xlYW4gdXAgdGhlIHBheWxvYWRlciBhIGJpdCBhbmQgbWFrZSBzdXJlIHRoYXQgd2Ugb25seQotCSAgcHV0IG9uZSBOQUwgdW5pdCBpbiBhbiBSVFAgcGFja2V0IGV2ZW4gaWYgdGhlIGlucHV0IGJ1ZmZlciBjb250YWlucwotCSAgbXVsdGlwbGUgTkFMIHVuaXRzLgotCSAgQWRkIHN1cG9ydCBmb3IgQVZDIGZvcm1hdCBpbnB1dC4KLQotMjAwOC0wNS0xNCAxNzo1ODo1MCArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS4qOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgcHJvZmlsZS1sZXZlbC1pZCBhbmQgc3Byb3AtcGFyYW1ldGVyLXNldHMgdXNpbmcgcHJvcGVydGllcyBpbiBjYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOiAoZ3N0X3J0cF9oMjY0X3BheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2gyNjRfcGF5X2ZpbmFsaXplKSwgKGdzdF9ydHBfaDI2NF9wYXlfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9zZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9oMjY0X3BheV9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIE1ha2UgaXQgcG9zc2libGUgdG8gc3BlY2lmeSBwcm9maWxlLWxldmVsLWlkIGFuZCBzcHJvcC1wYXJhbWV0ZXItc2V0cwotCSAgdXNpbmcgcHJvcGVydGllcyBpbiBjYXNlIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUgaW4tc3RyZWFtLgotCi0yMDA4LTA1LTE0IDE0OjE5OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogQWRkIGRlaW50ZXJsZWF2ZSB1bml0IHRlc3QgdG8gVkFMR1JJTkRfVE9fRklYLCBzaW5jZSBpdCBjYXVzZXMgd2VpcmQgaW52YWxpZCBmcmVlIGVycm9ycyBpbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIEFkZCBkZWludGVybGVhdmUgdW5pdCB0ZXN0IHRvIFZBTEdSSU5EX1RPX0ZJWCwgc2luY2UgaXQgY2F1c2VzCi0JICB3ZWlyZCBpbnZhbGlkIGZyZWUgZXJyb3JzIGluIHZhbGdyaW5kL2xpYmMgYWZ0ZXIgX2V4aXQgZm9yIHNvbWUKLQkgIHJlYXNvbi4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6IChwYWRzX2NyZWF0ZWQpLAotCSAgKHNldF9jaGFubmVsX3Bvc2l0aW9ucyksIChzcmNfaGFuZG9mZl9mbG9hdDMyXzhjaCksCi0JICAoZmxvYXRfYnVmZmVyX2NoZWNrX3Byb2JlKSwKLQkgIChwYWRfYWRkZWRfc2V0dXBfZGF0YV9jaGVja19mbG9hdDMyXzhjaF9jYiksCi0JICAobWFrZV9mYWtlX3NyY184Y2hhbnNfZmxvYXQzMiksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoZGVpbnRlcmxlYXZlX3N1aXRlKToKLQkgIEFkZCBzb21lIG1vcmUgZGVpbnRlcmxlYXZlIHVuaXQgdGVzdCBiaXRzIEkgaGFkIGxvY2FsbHkuCi0KLTIwMDgtMDUtMTQgMTI6NTI6MTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zLzogUmVtb3ZlIGxhZHNwYSBmcm8gcGx1Z2luLWRvY3MsIGl0cyBpbiBnc3QtcGx1Z2lucy1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxhZHNwYS54bWw6Ci0JICBSZW1vdmUgbGFkc3BhIGZybyBwbHVnaW4tZG9jcywgaXRzIGluIGdzdC1wbHVnaW5zLWJhZC4KLQotMjAwOC0wNS0xNCAwNzozMjo0NCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvaW50ZXJsZWF2ZS86IFNwbGl0IGRlZmluaXRpb25zIGludG8gc2VwYXJhdGUgaGVhZGVyIGZpbGVzIGZvciBiZXR0ZXIgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuaDoKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5oOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9wbHVnaW4uaDoKLQkgIFNwbGl0IGRlZmluaXRpb25zIGludG8gc2VwYXJhdGUgaGVhZGVyIGZpbGVzIGZvciBiZXR0ZXIgZG9jdW1lbnRhdGlvbgotCSAgZ2VuZXJhdGlvbi4KLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChnc3RfZGVpbnRlcmxlYXZlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9jbGFzc19pbml0KSwgKGdzdF9kZWludGVybGVhdmVfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfZGVpbnRlcmxlYXZlX3Byb2Nlc3MpOgotCSAgRG9uJ3QgdXNlIGFsbG9jYSwgYWxsb3cgY2FwcyBjaGFuZ2VzIGFzIGxvbmcgYXMgdGhlIG51bWJlciBvZiBjaGFubmVscwotCSAgZG9lcyBub3QgY2hhbmdlLCBkb24ndCB1c2UgZ193YXJuaW5nLCByZXR1cm4gTk9UX05FR09USUFURUQgYXMgZWFybHkKLQkgIGFzIHBvc3NpYmxlIGFuZCBzb21lIG90aGVyIGNsZWFudXAuCi0JICAqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzogKGdzdF9pbnRlcmxlYXZlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2ludGVybGVhdmVfY2xhc3NfaW5pdCk6Ci0JICBEbyBzb21lIHJhbmRvbSBjbGVhbnVwLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoZGVpbnRlcmxlYXZlX2NoYWluX2Z1bmMpLCAoZGVpbnRlcmxlYXZlX3BhZF9hZGRlZCksCi0JICAoZGVpbnRlcmxlYXZlX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3RzIGZvciB0aGUgZGVpbnRlcmxlYXZlIGVsZW1lbnQuCi0KLTIwMDgtMDUtMTMgMjA6MjU6MjAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBTZW5kIGFuIGluaXRpYWwgQllURSBzZWdtZW50IHRvIGluZm9ybSBkb3duc3RyZWFtIG9mIGxhdGVyIHNlZWtpbmcsIGFuZCB0byBmb3JlZ28gc3luYyBhdHRlbXB0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aV9tdXhfc3RhcnRfZmlsZSk6Ci0JICBTZW5kIGFuIGluaXRpYWwgQllURSBzZWdtZW50IHRvIGluZm9ybSBkb3duc3RyZWFtIG9mIGxhdGVyIHNlZWtpbmcsCi0JICBhbmQgdG8gZm9yZWdvIHN5bmMgYXR0ZW1wdHMuCi0KLTIwMDgtMDUtMTMgMDg6NTk6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmM6IEZpeCB3cm9uZyBjYXBzIHN0cmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOiAoZ3N0X3J0cF9nNzI5X2RlcGF5X3NldGNhcHMpOgotCSAgRml4IHdyb25nIGNhcHMgc3RyaW5nLgotCi0yMDA4LTA1LTEzIDA4OjM1OjU1ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwLzogQWRkZWQgRzcyOSBwYXkgYW5kIGRlcGF5bG9hZGVycy4gRml4ZXMgIzUzMjQwOS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jOiAoZ3N0X3J0cF9nNzI5X2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9nNzI5X2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9nNzI5X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfZzcyOV9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfZzcyOV9kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX2c3MjlfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuYzogKGdzdF9ydHBnNzI5cGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cGc3MjlwYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwZzcyOXBheV9pbml0KSwKLQkgIChnc3RfcnRwZzcyOXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfZzcyOV9wYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGc3MjlwYXkuaDoKLQkgIEFkZGVkIEc3MjkgcGF5IGFuZCBkZXBheWxvYWRlcnMuIEZpeGVzICM1MzI0MDkuCi0KLTIwMDgtMDUtMTMgMDg6MjE6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiBGaXggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29uY2VhbG1lbnQgcGFja2V0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKHNwZWV4X2RlY19zaW5rX2V2ZW50KToKLQkgIEZpeCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGR1cmF0aW9uIG9mIHRoZSBjb25jZWFsbWVudCBwYWNrZXRzLgotCi0yMDA4LTA1LTEyIDE4OjI3OjI0ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwLzogQWRkIERWIHBheSBhbmQgZGVwYXlsb2FkZXJzLiBGaXhlcyAjNTMyNDIzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZHZkZXBheS5jOiAoZ3N0X3J0cF9kdl9kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfZHZfZGVwYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX2R2X2RlcGF5X2luaXQpLAotCSAgKHBhcnNlX2VuY29kZSksIChnc3RfcnRwX2R2X2RlcGF5X3NldGNhcHMpLAotCSAgKGNhbGN1bGF0ZV9kaWZibG9ja19sb2NhdGlvbiksIChnc3RfcnRwX2R2X2RlcGF5X3Byb2Nlc3MpLAotCSAgKGdzdF9ydHBfZHZfZGVwYXlfcmVzZXQpLCAoZ3N0X3J0cF9kdl9kZXBheV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfZHZfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBkdnBheS5jOiAoZ3N0X2R2X3BheV9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfcnRwX2R2X3BheV9iYXNlX2luaXQpLCAoZ3N0X3J0cF9kdl9wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9kdl9wYXlfaW5pdCksIChnc3RfZHZfcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2R2X3BheV9nZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9kdl9wYXlfc2V0Y2FwcyksCi0JICAoZ3N0X2R2X3BheV9uZWdvdGlhdGUpLCAoaW5jbHVkZV9kaWYpLAotCSAgKGdzdF9ydHBfZHZfcGF5X2hhbmRsZV9idWZmZXIpLCAoZ3N0X3J0cF9kdl9wYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGR2cGF5Lmg6Ci0JICBBZGQgRFYgcGF5IGFuZCBkZXBheWxvYWRlcnMuIEZpeGVzICM1MzI0MjMuCi0KLTIwMDgtMDUtMTIgMTY6MzU6MzkgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogQ29udmVydCBzdWJ0aXRsZSBwYWxldHRlIGluZm8gaW4gVm9iU3ViIHByaXZhdGUgZGF0YSBmcm9tIFZvYlN1YidzIChidWdneSkgUkdCIHRvIFlVVi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcHVzaF9kdmRfY2x1dF9jaGFuZ2VfZXZlbnQpOgotCSAgQ29udmVydCBzdWJ0aXRsZSBwYWxldHRlIGluZm8gaW4gVm9iU3ViIHByaXZhdGUgZGF0YSBmcm9tIFZvYlN1YidzCi0JICAoYnVnZ3kpIFJHQiB0byBZVVYuCi0KLTIwMDgtMDUtMTIgMTU6MjY6MDEgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBEbyBub3QgbGVhdmUgZm91cmNjIHN0cmVhbSBoZWFkZXIgZmllbGQgZW1wdHkgdXBvbiByZXNldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aV9tdXhfcGFkX3Jlc2V0KToKLQkgIERvIG5vdCBsZWF2ZSBmb3VyY2Mgc3RyZWFtIGhlYWRlciBmaWVsZCBlbXB0eSB1cG9uIHJlc2V0LgotCSAgRml4ZXMgIzUxOTMwMS4KLQotMjAwOC0wNS0xMSAxNDo0MzoyNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEFkZCBnb29tMmsxIGludG8gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbDoKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBBZGQgZ29vbTJrMSBpbnRvIHRoZSBkb2NzLgotCi0yMDA4LTA1LTA4IDE2OjU4OjAyICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IFN1cHBvcnQgRGlnZXN0IGF1dGhlbnRpY2F0aW9uLiBGaXhlcyAjNTMyMDY1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogV291dGVyIENsb2V0ZW5zICA8d291dGVyIGF0IG1pbmQgYmU+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2luaXQpLAotCSAgKGdzdF9ydHNwc3JjX3NraXBfbHdzKSwgKGdzdF9ydHNwc3JjX3Vuc2tpcF9sd3MpLAotCSAgKGdzdF9ydHNwc3JjX3NraXBfY29tbWFzKSwgKGdzdF9ydHNwc3JjX3NraXBfaXRlbSksCi0JICAoZ3N0X3J0c3BfZGVjb2RlX3F1b3RlZF9zdHJpbmcpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX2RpZ2VzdF9jaGFsbGVuZ2UpLCAoZ3N0X3J0c3BzcmNfcGFyc2VfYXV0aF9oZHIpLAotCSAgKGdzdF9ydHNwc3JjX3NldHVwX2F1dGgpOgotCSAgU3VwcG9ydCBEaWdlc3QgYXV0aGVudGljYXRpb24uIEZpeGVzICM1MzIwNjUuCi0KLTIwMDgtMDUtMDggMTA6MjA6NTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2xldmVsL2dzdGxldmVsLmM6IEFsc28gc3VwcG9ydCAzMmJpdCAoZS5nLiB3aGUgaGF2aW5nIGl0IGFmdGVyICdtYWQnKS4gQWRkIG1vcmUgbm90ZXMgYWJvdXQgd2hhdHMgbmVlZGVkIGZvciBsaWJvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBBbHNvIHN1cHBvcnQgMzJiaXQgKGUuZy4gd2hlIGhhdmluZyBpdCBhZnRlciAnbWFkJykuIEFkZCBtb3JlIG5vdGVzCi0JICBhYm91dCB3aGF0cyBuZWVkZWQgZm9yIGxpYm9pbCBhY2NlbGVyYXRpb24uIFNpbXBsaWZ5IGRvY3MgYSBiaXQuCi0KLTIwMDgtMDUtMDggMDg6MTU6MzQgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBVcGRhdGUgdGhlIHRyYWNrIGR1cmF0aW9uIGlmIHRoZSBvbGQgb25lIHdhcyBpbnZhbGlkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9jb2xsZWN0ZWQpOgotCSAgVXBkYXRlIHRoZSB0cmFjayBkdXJhdGlvbiBpZiB0aGUgb2xkIG9uZSB3YXMgaW52YWxpZC4KLQkgIEZpeGVzIGJ1ZyAjNTMyMTE3LgotCi0yMDA4LTA1LTA3IDE2OjM2OjA0ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYyAoZ3N0X3J0cF9oMjY0X3BheV9wYXJzZV9zcHNfcHBzKTogVXNlIEdTVF9TVFJfTlVMTCB3aGVuIHRyeWluZyB0byBwcmludCBzcHMgYW5kIHBwcyBzdHJpbmdzIHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYyAoZ3N0X3J0cF9oMjY0X3BheV9wYXJzZV9zcHNfcHBzKToKLQkgIFVzZSBHU1RfU1RSX05VTEwgd2hlbiB0cnlpbmcgdG8gcHJpbnQgc3BzIGFuZCBwcHMgc3RyaW5ncyB0aGF0IGNvdWxkCi0JICBiZSBOVUxMLCBhcyB0aGlzIG1pZ2h0IGNyYXNoIG9uIHNvbWUgcGxhdGZvcm1zLgotCi0yMDA4LTA1LTA3IDE1OjMzOjUyICswMDAwICBIYWFrb24gU3BvcnNoZWltIDxoYWFrb24uc3BvcnNoZWltQHRhbmRiZXJnLmNvbT4KLQotCSAgc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYyAoZ3N0X2RpcmVjdGRyYXdfc2lua19zZXR1cF9kZHJhdyk6IERvIElEaXJlY3REcmF3Q2xpcHBlcl9TZXRIV25kKCkgaWYgdGhlIHdpbmRvdyBJLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBhdGNoIGJ5OiBIYWFrb24gU3BvcnNoZWltIDxoYWFrb24uc3BvcnNoZWltIGF0IHRhbmRiZXJnIGNvbT4KLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYyAoZ3N0X2RpcmVjdGRyYXdfc2lua19zZXR1cF9kZHJhdyk6Ci0JICBEbyBJRGlyZWN0RHJhd0NsaXBwZXJfU2V0SFduZCgpIGlmIHRoZSB3aW5kb3cgSUQgaGFzIGFscmVhZHkgYmVlbgotCSAgc2V0IGFmdGVyIGNyZWF0aW5nIHRoZSBjbGlwcGVyLgotCi0yMDA4LTA1LTA3IDE1OjI4OjA2ICswMDAwICBIYWFrb24gU3BvcnNoZWltIDxoYWFrb24uc3BvcnNoZWltQHRhbmRiZXJnLmNvbT4KLQotCSAgc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYyAoZ3N0X2RpcmVjdGRyYXdfc2lua19zaG93X2ZyYW1lKTogQWRkZWQgY2hlY2tpbmcgb2Ygc3VyZmFjZSBsb3N0IGNhc2UgYWZ0ZXIgYW4gdW5zLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBhdGNoIGJ5OiBIYWFrb24gU3BvcnNoZWltIDxoYWFrb24uc3BvcnNoZWltIGF0IHRhbmRiZXJnIGNvbT4KLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYyAoZ3N0X2RpcmVjdGRyYXdfc2lua19zaG93X2ZyYW1lKToKLQkgIEFkZGVkIGNoZWNraW5nIG9mIHN1cmZhY2UgbG9zdCBjYXNlIGFmdGVyIGFuIHVuc3VjY2Vzc2Z1bAotCSAgSURpcmVjdERyYXdTdXJmYWNlN19Mb2NrKCkgY2FsbC4KLQkgIElmIHN1cmZhY2UgaXMgbG9zdCwgcmV0dXJuIEdTVF9GTE9XX09LLgotCi0yMDA4LTA1LTA3IDE1OjE5OjQ3ICswMDAwICBIYWFrb24gU3BvcnNoZWltIDxoYWFrb24uc3BvcnNoZWltQHRhbmRiZXJnLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMgKGdzdF9kaXJlY3RkcmF3X3Npbmtfc2hvd19mcmFtZSwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IEhhYWtvbiBTcG9yc2hlaW0gPGhhYWtvbi5zcG9yc2hlaW0gYXQgdGFuZGJlcmcgY29tPgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jIChnc3RfZGlyZWN0ZHJhd19zaW5rX3Nob3dfZnJhbWUsCi0JICBXbmRQcm9jLCBnc3RfZGlyZWN0ZHJhd19zaW5rX3dpbmRvd190aHJlYWQpOgotCSAgSW1wcm92ZWQgV2luZG93cyBtZXNzYWdlIGxvb3AgYW5kIGZpeGVkIHdpbmRvdyBkZXN0cnVjdGlvbiBpc3N1ZS4KLQkgIFdoZW4gdGhlIHdpbmRvdyB3aGljaCBEaXJlY3REcmF3IGlzIHJlbmRlcmluZyB0byBpcyBkZXN0cm95ZWQsIHRoZQotCSAgcmVuZGVyL3Nob3dfZnJhbWUgZnVuY3Rpb24gd2lsbCByZXR1cm4gR1NUX0ZMT1dfRVJST1IuCi0JICBQYXJ0aWFsbHkgZml4ZXMgIzUyMDg4NS4KLQotMjAwOC0wNS0wNyAxNTowOToxMCArMDAwMCAgSGFha29uIFNwb3JzaGVpbSA8aGFha29uLnNwb3JzaGVpbUB0YW5kYmVyZy5jb20+Ci0KLQkgIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMgKGdzdF9kaXJlY3RkcmF3X3Npbmtfc2V0X2NhcHMpOiBGaXhlZCBtaWQgc3RyZWFtIHJlc29sdXRpb24gY2hhbmdlIGJ1ZywgdGhlIG9mZnNjci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogSGFha29uIFNwb3JzaGVpbSA8aGFha29uLnNwb3JzaGVpbSBhdCB0YW5kYmVyZyBjb20+Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMgKGdzdF9kaXJlY3RkcmF3X3Npbmtfc2V0X2NhcHMpOgotCSAgRml4ZWQgbWlkIHN0cmVhbSByZXNvbHV0aW9uIGNoYW5nZSBidWcsIHRoZSBvZmZzY3JlZW4gc3VyZmFjZSBpcyBub3cKLQkgIHJlbGVhc2VkIHdoZW4gc2V0X2NhcHMgaXMgY2FsbGVkLgotCSAgUGFydGlhbGx5IGZpeGVzICM1MjA4ODUuCi0KLTIwMDgtMDUtMDcgMTQ6NTY6MjIgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JICBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYwotCSAgKGdzdF9kaXJlY3RkcmF3X3NpbmtfYnVmZmVyX2FsbG9jKToKLQkgIE1ha2UgaXQgc28gdGhhdCBnc3RfZGlyZWN0ZHJhd19zaW5rX2J1ZmZlcl9hbGxvYyB1c2VzIHRoZSByaWdodAotCSAgd2lkdGgvaGVpZ2h0LgotCSAgRXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgdGhyb3VnaCB0aGUgcG9vbCBvZiBidWZmZXJzLCBtYWtlIHN1cmUgdGhhdAotCSAgdGhlIHdpZHRoL2hlaWdodCBvZiBjYXBzIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgYWxyZWFkeSBuZWdvdGlhdGVkCi0JICBkaW1lbnNpb25zLgotCSAgRm9yIGV4YW1wbGUgaWYgYSBidWZmZXIgd2l0aCBkaWZmZXJlbnQgY2FwcyBpcyByZXF1ZXN0ZWQsIGkuZS4KLQkgIGhpZ2hlciByZXNvbHV0aW9uLCB0aGUgY2FsbGVyIHdvdWxkIGdldCBhIGJ1ZmZlciB3aXRoIHRoZSBvbGQKLQkgIGRpbWVuc2lvbnMgYW5kIHRodXMgY29ycnVwdCB0aGUgaGVhcC4KLQotMjAwOC0wNS0wNyAxNDo0MzozOSArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19idWZmZXJfYWxsb2MpOgotCSAgQ2xlYXIgdGhlIGZsYWdzIG9uIHJlY3ljbGVkIGJ1ZmZlcnMgZnJvbSBidWZmZXJfYWxsb2MuCi0JICBQYXJ0aWFsbHkgZml4ZXMgIzUyMDg4NS4KLQkgIFRoZSByaWdodCBmaXggdGhpcyB0aW1lLgotCi0yMDA4LTA1LTA3IDE0OjM5OjQ1ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JICBSZXZlcnRpbmcgcHJldmlvdXMgY29tbWl0LCBpdCBoYWQgaXQgYWxsIG1peGVkIHVwLCB3YXMgZm9yIGEgZGlmZmVyZW50Ci0JICBwYXRjaCAobWFqb3IgYXV0b21hdGlvbiBzY3Jldy11cCkuIFNvcnJ5IQotCi0yMDA4LTA1LTA3IDEzOjQ4OjI4ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmMKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JICBDbGVhciB0aGUgZmxhZ3Mgb24gcmVjeWNsZWQgYnVmZmVycyBmcm9tIGJ1ZmZlcl9hbGxvYy4KLQkgIFBhcnRpYWxseSBmaXhlcyAjNTIwODg1LgotCi0yMDA4LTA1LTA3IDExOjIyOjUxICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzogQWRkZWQgbWlzc2luZyBzdGRsaWIuaCBpbmNsdWRlIGZvciBzdHJ0b2woKSwgYW5kIG1hZGUgaW5jbHVkZSBvcmRlcmluZyBhbmQgc3R5bGUgY29uc2lzdGVudCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkgIEFkZGVkIG1pc3Npbmcgc3RkbGliLmggaW5jbHVkZSBmb3Igc3RydG9sKCksIGFuZCBtYWRlIGluY2x1ZGUgb3JkZXJpbmcgYW5kCi0JICBzdHlsZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZGVwYXlsb2FkZXIuCi0KLTIwMDgtMDUtMDcgMDk6NTI6MzQgKzAwMDAgIE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOiBBZGRlZCBtaXNzaW5nIHN0ZGxpYi5oIGluY2x1ZGUgZm9yIHN0cnRvbCgpLCBhbmQgbWFkZSBpbmNsdWRlIG9yZGVyaW5nIGFuZCBzdHlsZSBjb25zaXN0ZW50IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOgotCSAgQWRkZWQgbWlzc2luZyBzdGRsaWIuaCBpbmNsdWRlIGZvciBzdHJ0b2woKSwgYW5kIG1hZGUgaW5jbHVkZSBvcmRlcmluZyBhbmQKLQkgIHN0eWxlIGNvbnNpc3RlbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBkZXBheWxvYWRlci4KLQotMjAwOC0wNS0wNyAwODowMzo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBFcnJvciBvdXQgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVxdWlyZWQgY29yZS9iYXNlIHZlcnNpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEVycm9yIG91dCBpZiB3ZSBkb24ndCBoYXZlIHRoZSByZXF1aXJlZCBjb3JlL2Jhc2UgdmVyc2lvbnMuCi0KLTIwMDgtMDUtMDYgMDk6MzM6NDYgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tOiBGaXggY29tcGlsZXIgd2FybmluZ3Mgb24gUFBDNjQuIEZpeGVzIGJ1ZyAjNDk5MzE4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIG9uIFBQQzY0LiBGaXhlcyBidWcgIzQ5OTMxOC4KLQotMjAwOC0wNS0wNSAxMToxOToxMyArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IERvbid0IGxlYWsgZmlsZSBkZXNjcmlwdG9ycyBvbiBlcnJvci4gRml4ZXMgIzUzMTUzMi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2luaXQpLCAoZ3N0X3J0c3BzcmNfb3Blbik6Ci0JICBEb24ndCBsZWFrIGZpbGUgZGVzY3JpcHRvcnMgb24gZXJyb3IuIEZpeGVzICM1MzE1MzIuCi0KLTIwMDgtMDUtMDMgMDk6MTg6MjIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L2djb25mLzogV2hlbiB3ZSBjYW4ndCBjcmVhdGUgYSBmYWtlc2luay9mYWtlc3JjIGNvbXBsYWluIGluc3RlYWQgb2YgdW5yZWZmaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zcmMuYzogKGdzdF9nY29uZl9hdWRpb19zcmNfcmVzZXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6IChnc3RfZ2NvbmZfdmlkZW9fc2lua19yZXNldCksCi0JICAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuYzogKGdzdF9nY29uZl92aWRlb19zcmNfcmVzZXQpLAotCSAgKGdzdF9nY29uZl92aWRlb19zcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzogKGdzdF9zd2l0Y2hfc2lua19yZXNldCksCi0JICAoZ3N0X3N3aXRjaF9jb21taXRfbmV3X2tpZCksIChnc3Rfc3dpdGNoX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIFdoZW4gd2UgY2FuJ3QgY3JlYXRlIGEgZmFrZXNpbmsvZmFrZXNyYyBjb21wbGFpbiBpbnN0ZWFkIG9mIHVucmVmZmluZwotCSAgTlVMTCBwb2ludGVycyBhbmQgY3Jhc2hpbmcgbGF0ZXIuIFNlZSBidWcgIzUzMDUzNS4KLQotMjAwOC0wNS0wMiAxMjo0NDoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6IEFkZCBzb21lIG1vcmUgZGVidWcgaW5mbyBhbmQgZ3VhcmQgYWdhaW5zdCBzbWFsbCBwYXlsb2Fkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzogKGdzdF9ydHBfaDI2M3BfZGVwYXlfcHJvY2Vzcyk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8gYW5kIGd1YXJkIGFnYWluc3Qgc21hbGwgcGF5bG9hZHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6IChnc3RfcnRwX3BjbXVfZGVwYXlfcHJvY2Vzcyk6Ci0JICBTZXQgZHVyYXRpb24gb24gb3V0Z29pbmcgYnVmZmVycyBiZWNhdXNlIHdlIGNhbi4KLQotMjAwOC0wNS0wMiAxMjozOTowMyArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IEFkZCBuZWdvdGlhdGlvbiBmb3IgdGhlIHNwZWV4IGNoYW5uZWxzIGFuZCByYXRlLiBGaXhlcyAjNDY1MTQ2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4X2VuY19zaW5rX2dldGNhcHMpLAotCSAgKGdzdF9zcGVleF9lbmNfaW5pdCksIChnc3Rfc3BlZXhfZW5jX2NoYWluKToKLQkgIEFkZCBuZWdvdGlhdGlvbiBmb3IgdGhlIHNwZWV4IGNoYW5uZWxzIGFuZCByYXRlLiBGaXhlcyAjNDY1MTQ2LgotCi0yMDA4LTA1LTAyIDEyOjM0OjIyICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6IEFkZCBuZWdvdGlhdGlvbiBmb3IgdGhlIHNwZWVjIGNoYW5uZWxzIGFuZCByYXRlLiBTZWUgIzQ2NTE0Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6IChnc3RfcnRwX3NwZWV4X3BheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX3NwZWV4X3BheV9nZXRjYXBzKToKLQkgIEFkZCBuZWdvdGlhdGlvbiBmb3IgdGhlIHNwZWVjIGNoYW5uZWxzIGFuZCByYXRlLiBTZWUgIzQ2NTE0Ni4KLQotMjAwOC0wNS0wMiAxMjoyNDo1NSArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6IEFkZCBuZWdvdGlhdGlvbiBmb3IgdGhlIElMQkMgbW9kZS4gU2VlICM0NjUxNDYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6IChnc3RfcnRwaWxiY3BheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwaWxiY3BheV9zaW5rX3NldGNhcHMpLCAoZ3N0X3J0cGlsYmNwYXlfc2lua19nZXRjYXBzKToKLQkgIEFkZCBuZWdvdGlhdGlvbiBmb3IgdGhlIElMQkMgbW9kZS4gU2VlICM0NjUxNDYuCi0KLTIwMDgtMDUtMDIgMTE6MzI6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogSW5jbHVkZSBzdGRsaWIgdG8gZml4IHRoZSBidWlsZC4gVXNlIGdfZnJlZSBpbnN0ZWFkIG9mIGZyZWUsIGxpYnNvdXAgdXNlcyBnbGliLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6Ci0JICBJbmNsdWRlIHN0ZGxpYiB0byBmaXggdGhlIGJ1aWxkLiBVc2UgZ19mcmVlIGluc3RlYWQgb2YgZnJlZSwgbGlic291cAotCSAgdXNlcyBnbGliLgotCi0yMDA4LTA1LTAyIDA5OjA5OjU4ICswMDAwICBqXiA8akBib290bGFiLm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgbW9yZSBtcGVnMiB2YXJpYW50cy4gRml4ZXMgIzUzMDg4Ni4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IGpeIDxqQGJvb3RsYWIub3JnPgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgQWRkIG1vcmUgbXBlZzIgdmFyaWFudHMuIEZpeGVzICM1MzA4ODYuCi0KLTIwMDgtMDUtMDEgMTA6NTI6MTEgKzAwMDAgIFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IERvbid0IGVycm9yIG91dCBpZiB3ZSBnZXQgYW4gSUNNUCBkZXN0aW5hdGlvbi11bnJlYWNoYWJsZSBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIHJlYWQgcGFja2V0cyBvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpIGF0IGNvbGxhYm9yYSBjbyB1az4KLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY3JlYXRlKToKLQkgIERvbid0IGVycm9yIG91dCBpZiB3ZSBnZXQgYW4gSUNNUCBkZXN0aW5hdGlvbi11bnJlYWNoYWJsZQotCSAgbWVzc2FnZSB3aGVuIHRyeWluZyB0byByZWFkIHBhY2tldHMgb24gd2luMzIgKCM1Mjk0NTQpLgotCi0yMDA4LTA0LTMwIDEyOjE4OjQxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBVc2UgbmV3IGVycm9yIGNvZGUgZm9yIGVuY3J5cHRlZCBzdHJlYW1zICh3aGljaCByZXF1aXJlcyBjb3JlIENWUykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgVXNlIG5ldyBlcnJvciBjb2RlIGZvciBlbmNyeXB0ZWQgc3RyZWFtcyAod2hpY2ggcmVxdWlyZXMgY29yZSBDVlMpLgotCi0yMDA4LTA0LTMwIDEyOjEwOjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEZpeCBzd2FwcGVkIHBhZCB0ZW1wbGF0ZSBuYW1lcywgc3BvdHRlZCBieSBUaGlhZ28gU291c2EgU2FudG9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X3ZpZGVvc3JjX3RlbXBsYXRlKSwKLQkgIChnc3RfcXRkZW11eF9hdWRpb3NyY190ZW1wbGF0ZSk6Ci0JICBGaXggc3dhcHBlZCBwYWQgdGVtcGxhdGUgbmFtZXMsIHNwb3R0ZWQgYnkgVGhpYWdvIFNvdXNhIFNhbnRvcy4KLQotMjAwOC0wNC0zMCAwOTo0ODoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IFByb2R1Y2UgY29uY2VhbG1lbnQgZGF0YSB3aGVuIHRpbWUgcHJvZ3Jlc3NlcyBpbiBhIHNlZ21lbnQgdXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoc3BlZXhfZGVjX3NpbmtfZXZlbnQpLAotCSAgKHNwZWV4X2RlY19jaGFpbl9wYXJzZV9kYXRhKToKLQkgIFByb2R1Y2UgY29uY2VhbG1lbnQgZGF0YSB3aGVuIHRpbWUgcHJvZ3Jlc3NlcyBpbiBhIHNlZ21lbnQgdXBkYXRlLgotCi0yMDA4LTA0LTI5IDE0OjExOjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogVHJ5IHRvIHByZXNlcnZlIGlucHV0IHRpbWVzdGFtcHMgd2hlbiB3ZSBjYW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IChzcGVleF9kZWNfY2hhaW5fcGFyc2VfZGF0YSksCi0JICAoc3BlZXhfZGVjX2NoYWluKToKLQkgIFRyeSB0byBwcmVzZXJ2ZSBpbnB1dCB0aW1lc3RhbXBzIHdoZW4gd2UgY2FuLgotCSAgRG8gYmVnaW5uaW5ncyBvZiBlcnJvciBjb25jZWFsbWVudC4KLQotMjAwOC0wNC0yOCAyMjozODoxMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvZGVidWcvZ3N0bmF2aWdhdGlvbnRlc3QuYzogTVNWQyBkb2Vzbid0IHByb3ZpZGUgcmludCgpLCBkZWZpbmUgYW4gYWRlcXVhdGUgcmVwbGFjZW1lbnQgbG9jYWxseSBhcyBlbHNld2hlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JICBNU1ZDIGRvZXNuJ3QgcHJvdmlkZSByaW50KCksIGRlZmluZSBhbiBhZGVxdWF0ZSByZXBsYWNlbWVudCBsb2NhbGx5IGFzCi0JICBlbHNld2hlcmUuCi0KLTIwMDgtMDQtMjggMTE6MTY6MzIgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvZGVidWcvcm5kYnVmZmVyc2l6ZS5jOiBGaXggcHJpbnRmIGZvcm1hdCB0byBwYWNpZnkgTWFjIE9TWCdzIGdjYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0wNC0yOCAgSnVsaWVuIE1vdXR0ZSAgPGp1bGllbkBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L2RlYnVnL3JuZGJ1ZmZlcnNpemUuYzogKGdzdF9ybmRfYnVmZmVyX3NpemVfbG9vcCk6IEZpeCBwcmludGYKLQkgIGZvcm1hdCB0byBwYWNpZnkgTWFjIE9TWCdzIGdjYy4KLQotMjAwOC0wNC0yNSAxOTozNDozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2RlYnVnL3JuZGJ1ZmZlcnNpemUuYzogQnJpbmcgcm5kYnVmZmVyc2l6ZSBlbGVtZW50IGludG8gYSBzdGF0ZSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSB1cyB0byBtb3ZlIGl0IHRvIC1iYWQgaW1tZWRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL3JuZGJ1ZmZlcnNpemUuYzogKERFRkFVTFRfU0VFRCksIChERUZBVUxUX01JTiksCi0JICAoREVGQVVMVF9NQVgpLCAoc3JjX3RlbXBsYXRlKSwgKHNpbmtfdGVtcGxhdGUpLAotCSAgKGdzdF9ybmRfYnVmZmVyX3NpemVfYmFzZV9pbml0KSwgKGdzdF9ybmRfYnVmZmVyX3NpemVfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3JuZF9idWZmZXJfc2l6ZV9pbml0KSwgKGdzdF9ybmRfYnVmZmVyX3NpemVfYWN0aXZhdGUpLAotCSAgKGdzdF9ybmRfYnVmZmVyX3NpemVfbG9vcCksIChnc3Rfcm5kX2J1ZmZlcl9zaXplX3BsdWdpbl9pbml0KToKLQkgIEJyaW5nIHJuZGJ1ZmZlcnNpemUgZWxlbWVudCBpbnRvIGEgc3RhdGUgdGhhdCBkb2Vzbid0IHJlcXVpcmUgdXMKLQkgIHRvIG1vdmUgaXQgdG8gLWJhZCBpbW1lZGlhdGVseS4gRm9yIG9uZSwgZml4IHVwIGRlZmF1bHQgbWluL21heAotCSAgdmFsdWVzIHNvIHRoYXQgdGhlIGVsZW1lbnQgYWN0dWFsbCB3b3JrcyB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZXMuCi0JICBBbHNvLCBkb24ndCBpZ25vcmUgZmxvdyByZXR1cm4gdmFsdWVzIGFuZCBkbyBzb21lIGtpbmQgb2YgbWluaW1hbAotCSAgZW9zIGxvZ2ljLiBBbGxvdyBtaW49bWF4IHRvIHB1bGwgZml4ZWQtc2l6ZWQgYnVmZmVycy4gQnVuY2ggb2YKLQkgIG90aGVyIGdyYXR1aXRpb3VzIGNsZWFuLXVwcy4KLQotMjAwOC0wNC0yNSAxOToyNDowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zLzogQWRkIGRvY3MgZm9yIGdka3BpeGJ1ZnNpbms7IHVwZGF0ZSBkb2NzIHRvIENWUyB2ZXJzaW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JICBBZGQgZG9jcyBmb3IgZ2RrcGl4YnVmc2luazsgdXBkYXRlIGRvY3MgdG8gQ1ZTIHZlcnNpb24uCi0KLTIwMDgtMDQtMjUgMTg6NDU6MzMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaDogUmVtb3ZlIHRlc3Qgc3luYy1vZmZzZXQgYnkgZGVmYXVsdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXY0bDItSDI2NC1hbHNhc3JjLVBDTUEuc2g6Ci0JICBSZW1vdmUgdGVzdCBzeW5jLW9mZnNldCBieSBkZWZhdWx0LgotCi0yMDA4LTA0LTI1IDEzOjMxOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBVc2UgR0xpYiB2ZXJzaW9ucyBvZiBodG9ubCwgaHRvbnMsIG50b2hsIGFuZCBudG9ocyBpbiBvcmRlciB0byBhdm9pZCBwcm9ibGVtcyBvbiB3aW4zMiAoIzUyOTcwNykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzogKGdzdF9hc3Rlcmlza2gyNjNfY2hhaW4pOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19hZGRfaW50ZXJuYWwpOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19zdGFydCk6Ci0JICBVc2UgR0xpYiB2ZXJzaW9ucyBvZiBodG9ubCwgaHRvbnMsIG50b2hsIGFuZCBudG9ocyBpbiBvcmRlcgotCSAgdG8gYXZvaWQgcHJvYmxlbXMgb24gd2luMzIgKCM1Mjk3MDcpLgotCi0yMDA4LTA0LTI1IDEyOjUyOjQ0ICswMDAwICBKZXPDunMgQ29ycml1cyA8amVzdXNAc29mdGNhdGFsYS5vcmc+Ci0KLQkgIGdzdC9nb29tLzogRml4IGJ1aWxkIHdpdGggbWluZ3czMjogdXNlIHJhbmQoKSBpbnN0ZWFkIG9mIHJhbmRvbSgpIGFuZCByZXBsYWNlIGJ6ZXJvKCkgd2l0aCBtZW1zZXQoKS4gRml4ZXMgIzUyOTY5Mi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEplc8O6cyBDb3JyaXVzIDxqZXN1cyBhdCBzb2Z0Y2F0YWxhIG9yZz4KLQkgICogZ3N0L2dvb20vZmlsdGVycy5jOiAoem9vbVZlY3Rvcik6Ci0JICAqIGdzdC9nb29tL2dvb21fY29yZS5jOiAoaW5pdF9idWZmZXJzKToKLQkgIEZpeCBidWlsZCB3aXRoIG1pbmd3MzI6IHVzZSByYW5kKCkgaW5zdGVhZCBvZiByYW5kb20oKSBhbmQKLQkgIHJlcGxhY2UgYnplcm8oKSB3aXRoIG1lbXNldCgpLiBGaXhlcyAjNTI5NjkyLgotCi0yMDA4LTA0LTI1IDA3OjU2OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IEZpeCB0eXBvIGluIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfY29tYmluZV9mbG93cyk6Ci0JICBGaXggdHlwbyBpbiBjb21tZW50cy4KLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1QQ01BLnNkcDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1QQ01BLnNoOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zZHA6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC1QQ01BLnNoOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQuc2RwOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQuc2g6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zZHA6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuc2g6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjQtYWxzYXNyYy1QQ01BLnNoOgotCSAgQWRkIHNvbWUgbW9yZSBkb2NzIGFuZCBmaXggZXhhbXBsZXMuCi0KLTIwMDgtMDQtMjQgMjI6MDQ6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6IEluY2x1ZGUgc3RkbGliLmggYW5kIHVuaXN0ZC5oIGZvciBta2R0ZW1wLiBTb21lIHBsYXRmb3JtcyBoYXZlIGl0IGRlY2xhcmVkIGluIHRoZSBmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmM6Ci0JICBJbmNsdWRlIHN0ZGxpYi5oIGFuZCB1bmlzdGQuaCBmb3IgbWtkdGVtcC4gU29tZSBwbGF0Zm9ybXMgaGF2ZSBpdAotCSAgZGVjbGFyZWQgaW4gdGhlIGZvcm1lciwgc29tZSBoYXZlIGl0IGRlY2xhcmVkIGluIHRoZSBsYXR0ZXIuCi0KLTIwMDgtMDQtMjQgMjI6MDE6NTIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgU3RvcCB1c2luZyBkZXByZWNhdGVkIEdMaWIgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZGVidWcvdGVzdHMuYzogKG1kNV9nZXRfdmFsdWUpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzogKGdzdF9ydHBfaDI2M3BfZGVwYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOiAoZ3N0X3J0cGlsYmNwYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzogKGdzdF9ydHBfdGhlb3JhX2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19kZXBheV9zZXRjYXBzKToKLQkgIFN0b3AgdXNpbmcgZGVwcmVjYXRlZCBHTGliIGZ1bmN0aW9ucy4KLQotMjAwOC0wNC0yNCAyMToxNzo0MiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBkZXZlbG9wbWVudCAtPiAwLjEwLjguMQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJhY2sgdG8gZGV2ZWxvcG1lbnQgLT4gMC4xMC44LjEKLQkgID09PSByZWxlYXNlIDAuMTAuOCA9PT0KLQotPT09IHJlbGVhc2UgMC4xMC44ID09PQotCi0yMDA4LTA0LTIzIDIzOjQwOjQ4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JICBSZWxlYXNlIDAuMTAuOCBhIGxpdHRsZSBoYXJkZXIgKGVkaXRlZCB0aGUgcmVsZWFzZSBub3RlcykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVsZWFzZSAwLjEwLjggYSBsaXR0bGUgaGFyZGVyIChlZGl0ZWQgdGhlIHJlbGVhc2Ugbm90ZXMpCi0KLTIwMDgtMDQtMjMgMjM6MjY6MjQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nYW1tYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiBwby9MSU5HVUFTOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVsZWFzZSAwLjEwLjgKLQotMjAwOC0wNC0yMyAyMzoxODo0NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGNvbW1vbjoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9iZy5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2ZyLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vcGwucG86Ci0JKiBwby9ydS5wbzoKLQkqIHBvL3NrLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHBvL3poX0NOLnBvOgotCSogcG8vemhfSEsucG86Ci0JKiBwby96aF9UVy5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA4LTA0LTIyIDAwOjI5OjAwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiAwLjEwLjcuNCBwcmUtcmVsZWFzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIDAuMTAuNy40IHByZS1yZWxlYXNlCi0KLTIwMDgtMDQtMjIgMDA6MTg6NTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ29vbS86IEZyZWUgYSBidW5jaCBvZiBzdHVmZiwgYW5kIGluaXRpYWxpc2UgdGhpbmdzIHRvIGZpeCBsZWFrcyBhbmQgdmFsZ3JpbmQgd2FybmluZ3MgaW4gdGhlIHRlc3RzdWl0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9jb25maWdfcGFyYW0uYzogKGdvb21fcGx1Z2luX3BhcmFtZXRlcnNfZnJlZSk6Ci0JICAqIGdzdC9nb29tL2NvbnZvbHZlX2Z4LmM6IChjb252b2x2ZV9pbml0KSwgKGNvbnZvbHZlX2ZyZWUpOgotCSAgKiBnc3QvZ29vbS9maWx0ZXJzLmM6ICh6b29tRmlsdGVyVmlzdWFsRlhXcmFwcGVyX2ZyZWUpOgotCSAgKiBnc3QvZ29vbS9mbHlpbmdfc3RhcnNfZnguYzogKGZzX2ZyZWUpOgotCSAgKiBnc3QvZ29vbS9nb29tX2NvbmZpZ19wYXJhbS5oOgotCSAgKiBnc3QvZ29vbS9nb29tX2NvcmUuYzogKGdvb21faW5pdCksIChnb29tX2Nsb3NlKToKLQkgICogZ3N0L2dvb20vZ29vbV9wbHVnaW5faW5mby5oOgotCSAgKiBnc3QvZ29vbS9nc3Rnb29tLmM6IChnc3RfZ29vbV9maW5hbGl6ZSk6Ci0JICAqIGdzdC9nb29tL2xpbmVzLmM6IChnb29tX2xpbmVzX2ZyZWUpOgotCSAgKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOiAocGx1Z2luX2luZm9faW5pdCksIChwbHVnaW5faW5mb19mcmVlKToKLQkgICogZ3N0L2dvb20vc3VyZjNkLmM6IChncmlkM2RfZnJlZSk6Ci0JICAqIGdzdC9nb29tL3N1cmYzZC5oOgotCSAgKiBnc3QvZ29vbS90ZW50YWNsZTNkLmM6ICh0ZW50YWNsZV9mcmVlKToKLQkgIEZyZWUgYSBidW5jaCBvZiBzdHVmZiwgYW5kIGluaXRpYWxpc2UgdGhpbmdzIHRvIGZpeCBsZWFrcwotCSAgYW5kIHZhbGdyaW5kIHdhcm5pbmdzIGluIHRoZSB0ZXN0c3VpdGUuCi0JICBGaXhlczogIzUyOTI2OAotCi0yMDA4LTA0LTIxIDIxOjU0OjExICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzogRG9uJ3QgbGVhayBhIHRhZyBsaXN0LiBGaXhlcyBidWcgIzUyOTI4NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBEb24ndCBsZWFrIGEgdGFnIGxpc3QuIEZpeGVzIGJ1ZyAjNTI5Mjg1LgotCi0yMDA4LTA0LTIxIDA4OjIxOjE0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IFJlZiBjYXBzIGFzIHRoZSByZXR1cm4gdmFsdWUgZm9yIHRoZSByZXF1ZXN0X3B0X21hcCBzaWduYWwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfaW5pdCksIChyZXF1ZXN0X3B0X21hcCksCi0JICAoZ3N0X3J0c3BzcmNfY29uZmlndXJlX2NhcHMpOgotCSAgUmVmIGNhcHMgYXMgdGhlIHJldHVybiB2YWx1ZSBmb3IgdGhlIHJlcXVlc3RfcHRfbWFwIHNpZ25hbC4KLQkgIFJlbW92ZSBzb21lIGNhcHMgd2VpcmRuZXNzIHdoZW4gY29uZmlndXJpbmcgYSBzdHJlYW0uIFNlZSAjNTI4MjQ1LgotCi0yMDA4LTA0LTE4IDE4OjQ3OjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9pY2xlcy9nZGtwaXhidWZzaW5rLXRlc3QuYzogQWRkIGNhc3QgdG8gcGxhY2F0ZSBnY2MgNC4xLjIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmc2luay10ZXN0LmM6Ci0JICBBZGQgY2FzdCB0byBwbGFjYXRlIGdjYyA0LjEuMi4KLQotMjAwOC0wNC0xNyAyMzowMDoyOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogMC4xMC43LjMgcHJlLXJlbGVhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAwLjEwLjcuMyBwcmUtcmVsZWFzZQotCi0yMDA4LTA0LTE3IDIyOjMyOjE2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IERpc2FibGUgc29tZSBtb3JlIGVsZW1lbnRzIGluIHRoZSBzdGF0ZSB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRGlzYWJsZSBzb21lIG1vcmUgZWxlbWVudHMgaW4gdGhlIHN0YXRlIHRlc3QuCi0JICBBZGQgYSBkZWZpbmUgc28gdGhlIHNvdXAgdGVzdCBjYW4gZmluZCB0aGUgdGVzdCBmaWxlcwotCSAgaXQgbmVlZHMgYXQgcnVudGltZS4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzogKHJ1bl9zZXJ2ZXIpOgotCSAgQWRkIGEgZGVmaW5lIHNvIHRoZSBzb3VwIHRlc3QgY2FuIGZpbmQgdGhlIHRlc3QgZmlsZXMKLQkgIGl0IG5lZWRzIGF0IHJ1bnRpbWUuCi0KLTIwMDgtMDQtMTcgMTg6MDg6NTMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ29vbS9jb252b2x2ZV9meC5jOiBEb24ndCBldmVyIGRyYXcgdGhlIEdPT00gbG9nby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9jb252b2x2ZV9meC5jOiAoY29udm9sdmVfYXBwbHkpOgotCSAgRG9uJ3QgZXZlciBkcmF3IHRoZSBHT09NIGxvZ28uCi0JICBGaXhlczogIzUyODYxNQotCi0yMDA4LTA0LTE3IDEwOjI0OjMyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvOiBnc3RfYXRvbWljX2ludF9zZXQgPT0+IGdfYXRvbWljX2ludF9zZXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSAgZ3N0X2F0b21pY19pbnRfc2V0ID09PiBnX2F0b21pY19pbnRfc2V0Ci0KLTIwMDgtMDQtMTYgMTA6MzE6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFN0cmlwIG91dCB0aGUgY29uZmlnL3NjcmlwdCBwYXJzaW5nIHN0dWZmLCB3ZSBkb24ndCBuZWVkIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2dvb20vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nb29tL2NvbnZvbHZlX2Z4LmM6Ci0JICAqIGdzdC9nb29tL2RlZmF1bHRfc2NyaXB0cy5oOgotCSAgKiBnc3QvZ29vbS9nb29tLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fY29yZS5jOiAoY2hvb3NlX2FfZ29vbV9saW5lKToKLQkgICogZ3N0L2dvb20vZ29vbV9wbHVnaW5faW5mby5oOgotCSAgKiBnc3QvZ29vbS9nb29tc2wuYzoKLQkgICogZ3N0L2dvb20vZ29vbXNsLmg6Ci0JICAqIGdzdC9nb29tL2dvb21zbF9oYXNoLmM6Ci0JICAqIGdzdC9nb29tL2dvb21zbF9oYXNoLmg6Ci0JICAqIGdzdC9nb29tL2dvb21zbF9oZWFwLmM6Ci0JICAqIGdzdC9nb29tL2dvb21zbF9oZWFwLmg6Ci0JICAqIGdzdC9nb29tL2dvb21zbF9wcml2YXRlLmg6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6Ci0JICBTdHJpcCBvdXQgdGhlIGNvbmZpZy9zY3JpcHQgcGFyc2luZyBzdHVmZiwgd2UgZG9uJ3QgbmVlZCBpdC4KLQkgIEZpeGVzICM1Mjc5OTkuCi0KLTIwMDgtMDQtMTUgMTY6NTg6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6IERpc2FibGUgYWx0aXZlYyBvcHRpbWlzYXRpb25zIGZvciAzMi1iaXQgUFBDIGFzIHdlbGwgdG8gbWFrZSB0aGluZ3MgYnVpbGQgcHJvcGVybHkgb24gYWxsIFBQQy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6IChzZXRPcHRpbWl6ZWRNZXRob2RzKToKLQkgIERpc2FibGUgYWx0aXZlYyBvcHRpbWlzYXRpb25zIGZvciAzMi1iaXQgUFBDIGFzIHdlbGwgdG8gbWFrZQotCSAgdGhpbmdzIGJ1aWxkIHByb3Blcmx5IG9uIGFsbCBQUEMgc3lzdGVtcy4gRml4ZXMgIzUyODE0MwotCi0yMDA4LTA0LTE0IDIwOjAxOjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46IFVwZGF0ZSBmb3Igc291cGh0dHBzcmMgcGx1Z2luIHdoaWNoIGhhcyBtb3ZlZCB0byAtZ29vZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBVcGRhdGUgZm9yIHNvdXBodHRwc3JjIHBsdWdpbiB3aGljaCBoYXMgbW92ZWQgdG8gLWdvb2QuCi0KLTIwMDgtMDQtMTQgMTM6Mzg6MzIgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBGaXggb3Blbi1lbmRlZCBzZWVrcyBpbiBtYXRyb3NrYWRlbXV4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50KToKLQkgIEZpeCBvcGVuLWVuZGVkIHNlZWtzIGluIG1hdHJvc2thZGVtdXgKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgc2t5bmV0IGJlPgotCSAgRml4ZXM6ICM1MjY1NTcKLQotMjAwOC0wNC0xMyAyMzoxMzozMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBBZGQgc291cCB0ZXN0IGNlcnRpZmljYXRlcyB0byB0aGUgZGlzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIEFkZCBzb3VwIHRlc3QgY2VydGlmaWNhdGVzIHRvIHRoZSBkaXN0LgotCi0yMDA4LTA0LTEzIDE3OjQzOjUyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L01ha2VmaWxlLmFtOiBSZW1vdmUgTEFEU1BBIHJlZmVyZW5jZSBJIG1pc3NlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgTEFEU1BBIHJlZmVyZW5jZSBJIG1pc3NlZC4KLQotMjAwOC0wNC0xMyAxMzowNjozOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBHaXZlIHNvdXBodHRwc3JjIEdTVF9SQU5LX1BSSU1BUlkgdG8gbWFrZSBpdCB0aGUgZGVmYXVsdCBIVFRQIHNvdXJjZSBvdmVyIGdub21lLXZmcyBhbmQgZXYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAocGx1Z2luX2luaXQpOgotCSAgR2l2ZSBzb3VwaHR0cHNyYyBHU1RfUkFOS19QUklNQVJZIHRvIG1ha2UgaXQgdGhlIGRlZmF1bHQgSFRUUCBzb3VyY2UKLQkgIG92ZXIgZ25vbWUtdmZzIGFuZCBldmVyeXRoaW5nIGVsc2UuIEZpeGVzIGJ1ZyAjNTI3ODQ4LgotCi0yMDA4LTA0LTEyIDIzOjQ3OjIzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUmVtb3ZlIExBRFNQQSBwbHVnaW4uIEZpeGVzOiAjNTE1OTc4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgTEFEU1BBIHBsdWdpbi4gRml4ZXM6ICM1MTU5NzgKLQotMjAwOC0wNC0xMiAyMzozMDo1NCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIE1vdmUgc291cCBwbHVnaW4gZnJvbSAtYmFkIChGaXhlczogIzUyMzEyNCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zb3VwLnhtbDoKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIE1vdmUgc291cCBwbHVnaW4gZnJvbSAtYmFkIChGaXhlczogIzUyMzEyNCkKLQotMjAwOC0wNC0xMSAxMTowODozNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIEZpeCB0aGUgQ2hhbmdlbG9nIC0gYWN0dWFsbHkgc3BlZXggPD0gMS4xLjEyIGFyZSB2dWxuZXJhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggdGhlIENoYW5nZWxvZyAtIGFjdHVhbGx5IHNwZWV4IDw9IDEuMS4xMiBhcmUgdnVsbmVyYWJsZS4KLQotMjAwOC0wNC0xMSAxMDozMjoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiBGaXggYm91bmRzIGNoZWNraW5nIG9mIG1vZGUgaW4gU3BlZXggaGVhZGVyLCB3aGljaCBtYXkgcHJvZHVjZSBuZWdhdGl2ZSBudW1iZXJzIGluIHNwZWV4IDwgMS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoc3BlZXhfZGVjX2NoYWluX3BhcnNlX2hlYWRlcik6Ci0JICBGaXggYm91bmRzIGNoZWNraW5nIG9mIG1vZGUgaW4gU3BlZXggaGVhZGVyLCB3aGljaCBtYXkKLQkgIHByb2R1Y2UgbmVnYXRpdmUgbnVtYmVycyBpbiBzcGVleCA8IDEuMS4xMgotCi0yMDA4LTA0LTEwIDA3OjExOjUxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6IEluY3JlYXNlIHRoZSB0aW1lb3V0IGZvciB0aGUgaW50ZXJuZXQgdGVzdHMgdG8gMjUwIHNlY29uZHMgYW5kIGNoZWNrIGZvciBOVUxMIGNhcC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6IChnb3RfYnVmZmVyKSwKLQkgIChzb3VwaHR0cHNyY19zdWl0ZSk6Ci0JICBJbmNyZWFzZSB0aGUgdGltZW91dCBmb3IgdGhlIGludGVybmV0IHRlc3RzIHRvIDI1MCBzZWNvbmRzCi0JICBhbmQgY2hlY2sgZm9yIE5VTEwgY2FwcyBpbnN0ZWFkIG9mIGp1c3QgY3Jhc2hpbmcuCi0JICBUaGUgcmVhbCBmaXggd291bGQgYmUgdG8gaW1wbGVtZW50IGFuIHNob3V0Y2FzdCBzZXJ2ZXIgZm9yIHRoZSB1bml0IHRlc3QKLQkgIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHdvcmtpbmcgaW50ZXJuZXQgY29ubmVjdGlvbi4KLQkgIEZpeGVzIGJ1ZyAjNTIxNzQ5LgotCi0yMDA4LTA0LTA5IDE2OjExOjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ29vbS86IFJlbW92ZSBhIGJ1bmNoIG9mIGZvbnQvdGV4dCByZWxhdGVkIGNvZGUgdGhhdCB3ZSBkb24ndCBuZWVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ29vbS9nZm9udGxpYi5jOgotCSAgKiBnc3QvZ29vbS9nZm9udGxpYi5oOgotCSAgKiBnc3QvZ29vbS9nZm9udHJsZS5jOgotCSAgKiBnc3QvZ29vbS9nZm9udHJsZS5oOgotCSAgKiBnc3QvZ29vbS9nb29tLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fY29yZS5jOiAoZ29vbV91cGRhdGUpOgotCSAgKiBnc3QvZ29vbS9nb29tX3BsdWdpbl9pbmZvLmg6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2NoYWluKToKLQkgICogZ3N0L2dvb20vcGx1Z2luX2luZm8uYzoKLQkgIFJlbW92ZSBhIGJ1bmNoIG9mIGZvbnQvdGV4dCByZWxhdGVkIGNvZGUgdGhhdCB3ZSBkb24ndCBuZWVkLgotCi0yMDA4LTA0LTA5IDE0OjAyOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZ29vbS86IENoYW5nZSBsaWNlbnNlIG9mIHRoZXNlIGZpbGVzIHRvIExHUEwsIGFzIHBlcm1pdHRlZCBieSB0aGUgYXV0aG9yLCBHdWlsbGF1bWUgQm9yaW9zLiBTZWUgIzUxNTA3My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9wcGNfZHJhd2luZ3MuczoKLQkgICogZ3N0L2dvb20vcHBjX3pvb21fdWx0aW1hdGUuczoKLQkgIENoYW5nZSBsaWNlbnNlIG9mIHRoZXNlIGZpbGVzIHRvIExHUEwsIGFzIHBlcm1pdHRlZCBieSB0aGUKLQkgIGF1dGhvciwgR3VpbGxhdW1lIEJvcmlvcy4gU2VlICM1MTUwNzMuCi0KLTIwMDgtMDQtMDkgMTM6MzE6MjIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2dvb20vOiBBcyBoaW50ZWQgaW4gQnVnICM1MTgyMTMsIHJldmVydCBvbmUgY2hhbmdlIGFuZCBmaXggd2FybmluZ3MgcHJvcGVybHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dvb20vY29udm9sdmVfZnguYzoKLQkgICogZ3N0L2dvb20vbW90aWZfZ29vbTEuaDoKLQkgICogZ3N0L2dvb20vbW90aWZfZ29vbTIuaDoKLQkgIEFzIGhpbnRlZCBpbiBCdWcgIzUxODIxMywgcmV2ZXJ0IG9uZSBjaGFuZ2UgYW5kIGZpeCB3YXJuaW5ncyBwcm9wZXJseS4KLQkgIFRoaXMgZml4ZXMgYm90aCAjNTE4MjEzIGFuZCAjNTIwMDczIGZvciBtZS4KLQotMjAwOC0wNC0wOSAxMjowMjo1NSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IEZpeCB0aGUgRm9ydGUgYnVpbGQgYnkgbWFraW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHNpZ25hdHVyZXMgbWF0Y2ggdGhlIGltcGxlbWVudGF0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX3NlZWspOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9jb250ZW50c19zZWVrZW50cnkpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wKToKLQkgIEZpeCB0aGUgRm9ydGUgYnVpbGQgYnkgbWFraW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHNpZ25hdHVyZXMKLQkgIG1hdGNoIHRoZSBpbXBsZW1lbnRhdGlvbnMuCi0KLTIwMDgtMDQtMDggMTk6NDk6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3MvOiBNb3JlIGxvZ2dpbmcgd2hlbiBwcm9iaW5nIChzZWUgIzUxODQ3NCksIHNvbWUgY29tbWVudHMgaW4gX3Jlc2V0KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzogKGdzdF9vc3NfaGVscGVyX3JhdGVfY2hlY2tfcmF0ZSk6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc19zaW5rX3Jlc2V0KToKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuYzogKGdzdF9vc3Nfc3JjX3Jlc2V0KToKLQkgIE1vcmUgbG9nZ2luZyB3aGVuIHByb2JpbmcgKHNlZSAjNTE4NDc0KSwgc29tZSBjb21tZW50cyBpbiBfcmVzZXQoKS4KLQotMjAwOC0wNC0wNyAxNzoxODo0OCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOiBGaXggYnVpbGQgYmVjYXVzZSBvZiBhIGJhZCBhcmd1bWVudCBudW1iZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMDQtMDcgIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOiAoZ3N0X3J0cF9oMjY0X3BheV9zZXRjYXBzKTogRml4IGJ1aWxkCi0JICBiZWNhdXNlIG9mIGEgYmFkIGFyZ3VtZW50IG51bWJlci4KLQotMjAwOC0wNC0wNiAxODoyODowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvaWNsZXMvOiBJbnRlcmFjdGl2ZSB0ZXN0IGFwcCBmb3IgZ2RrcGl4YnVmc2luay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9pY2xlcy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9pY2xlcy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvaWNsZXMvZ2RrcGl4YnVmc2luay10ZXN0LmM6Ci0JICBJbnRlcmFjdGl2ZSB0ZXN0IGFwcCBmb3IgZ2RrcGl4YnVmc2luay4KLQotMjAwOC0wNC0wNiAwOTowMTo0MiArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBPbmx5IGlnbm9yZSBhY3R1YWwgcmVkaXJlY3RzIG5vdCBhbGwgcmVzcG9uc2VzIHdoZW4gaW4gc3RhdGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IChnc3Rfc291cF9odHRwX3NyY19yZXNwb25zZV9jYik6Ci0JICBPbmx5IGlnbm9yZSBhY3R1YWwgcmVkaXJlY3RzIG5vdCBhbGwgcmVzcG9uc2VzIHdoZW4gaW4gc3RhdGUKLQkgIEdTVF9TT1VQX0hUVFBfU1JDX1NFU1NJT05fSU9fU1RBVFVTX1JVTk5JTkcuIEZpeGVzIGJ1ZyAjNTI2MzM3LgotCi0yMDA4LTA0LTA2IDA4OjU3OjU5ICswMDAwICBEYW1pZW4gTGVzcGlhdSA8ZGFtaWVuLmxlc3BpYXVAZ21haWwuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEFjdHVhbGx5IGJ1aWxkIGRsbHMgd2hlbiBjcm9zcy1jb21waWxpbmcgd2l0aCBtaW5ndzMyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRGFtaWVuIExlc3BpYXUgPGRhbWllbiBkb3QgbGVzcGlhdSBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBBY3R1YWxseSBidWlsZCBkbGxzIHdoZW4gY3Jvc3MtY29tcGlsaW5nIHdpdGggbWluZ3czMi4KLQkgIEZpeGVzIGJ1ZyAjNTI2MjQ3LgotCi0yMDA4LTA0LTA1IDEyOjAwOjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvaGFsL2hhbC5jOiBEb24ndCBtdW5nZSBkZXZpY2Ugc3RyaW5nIHRvICdkZWZhdWx0OngnIGZvciBjYXB0dXJlIGRldmljZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2hhbC9oYWwuYzogKGdzdF9oYWxfZ2V0X2Fsc2FfZWxlbWVudCk6Ci0JICBEb24ndCBtdW5nZSBkZXZpY2Ugc3RyaW5nIHRvICdkZWZhdWx0OngnIGZvciBjYXB0dXJlIGRldmljZXMuCi0JICBGaXhlcyAjNTI1ODMzLgotCi0yMDA4LTA0LTA0IDE5OjAwOjE5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiBBbHdheXMgdXNlIEdTbGljZSBhcyB3ZSBhY3R1YWxseSBkZXBlbmQgb24gR0xpYiAyLjEyIGFscmVhZHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaW5kZXhfZW50cnlfZnJlZSk6Ci0JICBBbHdheXMgdXNlIEdTbGljZSBhcyB3ZSBhY3R1YWxseSBkZXBlbmQgb24gR0xpYiAyLjEyIGFscmVhZHkuCi0KLTIwMDgtMDQtMDQgMTE6MjY6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBjb3JlL2Jhc2UgMC4xMC4xOCBmb3IgQVJHQiBjYXBzIHBhcnNpbmcgZml4ZXMgaW4gbGliZ3N0dmlkZW8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUmVxdWlyZSBjb3JlL2Jhc2UgMC4xMC4xOCBmb3IgQVJHQiBjYXBzIHBhcnNpbmcgZml4ZXMgaW4gbGliZ3N0dmlkZW8uCi0JICBBbHNvIGJ1bXAgdGhlIEdMaWIgcmVxdWlyZW1lbnQgdG8gdGhlIGN1cnJlbnQgZGUtZmFjdG8gcmVxdWlyZW1lbnQKLQkgIChpZS4gMi4xMikuCi0KLTIwMDgtMDQtMDQgMTA6MzI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS4qOiBQYXJzZSBjb2RlY19kYXRhIGZvciBmdXR1cmUgQVZDIGNvbXBhdGliaWxpdHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6IChlbmNvZGVfYmFzZTY0KSwKLQkgIChnc3RfcnRwX2gyNjRfcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9oMjY0X3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5Lmg6Ci0JICBQYXJzZSBjb2RlY19kYXRhIGZvciBmdXR1cmUgQVZDIGNvbXBhdGliaWxpdHkuCi0JICBGYWlsIHdoZW4gd2UgZW5jb3VudGVyIEFWQyBkYXRhIGZvciBub3cuCi0KLTIwMDgtMDQtMDQgMDk6NTA6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiBSZW5hbWUgcHJvcGVydHkgZW51bXMgYW5kIGRlZmF1bHQgZGVmaW5lcyBmb3IgdGhlIHByb3BlcnRpZXMgdG8gbWF0Y2ggdGhlIHByb3BlcnR5IG5hbWVzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zcGVjdHJ1bV9pbml0KSwgKGdzdF9zcGVjdHJ1bV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zcGVjdHJ1bV9nZXRfcHJvcGVydHkpLCAoZ3N0X3NwZWN0cnVtX21lc3NhZ2VfbmV3KToKLQkgIFJlbmFtZSBwcm9wZXJ0eSBlbnVtcyBhbmQgZGVmYXVsdCBkZWZpbmVzIGZvciB0aGUgcHJvcGVydGllcyB0byBtYXRjaAotCSAgdGhlIHByb3BlcnR5IG5hbWVzIGFuZCByZXBocmFzZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbnMgdG8gbWFrZSB0aGVtIGEKLQkgIGJpdCBjbGVhcmVyIChob3BlZnVsbHkpLiBTZWUgIzUxODE4OC4KLQotMjAwOC0wNC0wMyAyMjo1OTo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgdW5pdCB0ZXN0IGZvciBnZGtwaXhidWZzaW5rIGVsZW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYzoKLQkgIEFkZCB1bml0IHRlc3QgZm9yIGdka3BpeGJ1ZnNpbmsgZWxlbWVudC4KLQotMjAwOC0wNC0wMyAyMjo1MDo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2dka19waXhidWYvOiBBZGQgZ2RrcGl4YnVmc2luayBlbGVtZW50IGZvciBlYXN5IHNuYXBzaG90dGluZyAoIzUyNTk0NikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmM6Ci0JICAoZ3N0X2dka19waXhidWZfc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9nZGtfcGl4YnVmX3NpbmtfY2xhc3NfaW5pdCksIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX2luaXQpLAotCSAgKGdzdF9nZGtfcGl4YnVmX3Npbmtfc3RhcnQpLCAoZ3N0X2dka19waXhidWZfc2lua19zdG9wKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3NldF9jYXBzKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3BpeGJ1Zl9kZXN0cm95X25vdGlmeSksCi0JICAoZ3N0X2dka19waXhidWZfc2lua19nZXRfcGl4YnVmX2Zyb21fYnVmZmVyKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX2hhbmRsZV9idWZmZXIpLCAoZ3N0X2dka19waXhidWZfc2lua19wcmVyb2xsKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3JlbmRlciksIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2dka19waXhidWZfc2lua19nZXRfcHJvcGVydHkpOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmg6Ci0JICBBZGQgZ2RrcGl4YnVmc2luayBlbGVtZW50IGZvciBlYXN5IHNuYXBzaG90dGluZyAoIzUyNTk0NikuCi0KLTIwMDgtMDQtMDMgMjA6MjU6MzQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdnBhY2suYzogQnVtcCB0aW1lb3V0IGZyb20gMyB0byA2MCBzZWNvbmRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy93YXZwYWNrLmM6ICh3YXZwYWNrX3N1aXRlKToKLQkgIEJ1bXAgdGltZW91dCBmcm9tIDMgdG8gNjAgc2Vjb25kcy4KLQotMjAwOC0wNC0wMyAyMDoyMToxNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvLmN2aWdub3JlOiBSZW1vdmUgdXNlbGVzcyBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uY3ZpZ25vcmU6Ci0JICBSZW1vdmUgdXNlbGVzcyBmaWxlLgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvLmN2c2lnbm9yZToKLQkgIEFkZCBuZXcgdGVzdCB0byAuY3ZzaWdub3JlLgotCi0yMDA4LTA0LTAzIDIwOjA1OjMxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrLzogQWRkIHVuaXQgdGVzdCB0aGF0IGVuY29kZXMgYW5kIGRlY29kZXMgc29tZSBkYXRhLCBjaGVja3MgdGhhdCBpdCBpcyBzdGlsbCB0aGUgc2FtZSBhbmQgdGhhdCBhbGwgdGltZXN0YS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2cGFjay5jOiAoYnVzX2hhbmRsZXIpLAotCSAgKGlkZW50aXR5X2hhbmRvZmYpLCAoZmFrZXNpbmtfaGFuZG9mZiksIChHU1RfU1RBUlRfVEVTVCksCi0JICAod2F2cGFja19zdWl0ZSksIChtYWluKToKLQkgIEFkZCB1bml0IHRlc3QgdGhhdCBlbmNvZGVzIGFuZCBkZWNvZGVzIHNvbWUgZGF0YSwgY2hlY2tzIHRoYXQgaXQKLQkgIGlzIHN0aWxsIHRoZSBzYW1lIGFuZCB0aGF0IGFsbCB0aW1lc3RhbXBzL29mZnNldHMgYXJlIHBlcmZlY3QuCi0KLTIwMDgtMDQtMDMgMTg6Mjg6MjggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svOiBVc2UgR1NsaWNlIGZvciBhbGxvY2F0aW5nIGluZGV4IGVudHJpZXMgYW5kIHVzZSBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfYmFzZV9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2luZGV4X2VudHJ5X25ldyksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaW5kZXhfZW50cnlfZnJlZSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9pbmRleF9hcHBlbmRfZW50cnkpLCAoZ3N0X3dhdnBhY2tfcGFyc2VfcmVzZXQpOgotCSAgVXNlIEdTbGljZSBmb3IgYWxsb2NhdGluZyBpbmRleCBlbnRyaWVzIGFuZCB1c2UKLQkgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZSgpLgotCi0yMDA4LTA0LTAyIDIyOjM3OjI5ICswMDAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0KLQkgIHN5cy9zdW5hdWRpby86IEZpeCB1cCBjb3B5cmlnaHRzICgjNTI1ODYwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb24gYXQgc3VuIGRvdCBjb20+Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlci5jOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlci5oOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmg6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuaDoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5oOgotCSAgRml4IHVwIGNvcHlyaWdodHMgKCM1MjU4NjApLgotCi0yMDA4LTA0LTAyIDE2OjEwOjMzICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZCBuZXcgZ29vbSBwbHVnaW4gdG8gc3BlYyBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBuZXcgZ29vbSBwbHVnaW4gdG8gc3BlYyBmaWxlCi0KLTIwMDgtMDQtMDIgMTU6NDI6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nb29tL2dvb21zbC5jOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgZnJlYWQoKSB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9nb29tc2wuYzogKGdzbF9yZWFkX2ZpbGUpOgotCSAgQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIGZyZWFkKCkgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCi0KLTIwMDgtMDQtMDEgMTE6MDA6NDMgKzAwMDAgIG1lcnNhZCA8bWVyc2FkQGF4aXMuY29tPgotCi0JICBnc3QvbGF3LzogTWFrZSBuZWdvdGlhdGlvbiBhIGJpdCBtb2Rlcm4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBtZXJzYWQgPG1lcnNhZCBhdCBheGlzIGRvdCBjb20+Ci0JICAqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzogKGdzdF9hbGF3X2RlY19zaW5rX3NldGNhcHMpLAotCSAgKGdzdF9hbGF3X2RlY19jaGFpbiksIChnc3RfYWxhd19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5oOgotCSAgKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6IChnc3RfYWxhd19lbmNfY2hhaW4pOgotCSAgKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOiAobXVsYXdkZWNfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfbXVsYXdkZWNfY2hhaW4pLCAoZ3N0X211bGF3ZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmg6Ci0JICAqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6IChnc3RfbXVsYXdlbmNfY2hhaW4pOgotCSAgTWFrZSBuZWdvdGlhdGlvbiBhIGJpdCBtb2Rlcm4uCi0JICBVc2UgcGFkX2FsbG9jLiBGaXhlcyAjNTI1MzU5LgotCi0yMDA4LTAzLTMxIDIyOjA2OjE0ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L2dvb20veG1teC5jOiBGaXggY29uc3RyYWludHMgb24gYXNtIGNvZGUgc28gdGhhdCBpdCBjb21waWxlcyBjb25zaXN0ZW50bHkuICBGaXhlcyAjNTIyMjc4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL3htbXguYzogRml4IGNvbnN0cmFpbnRzIG9uIGFzbSBjb2RlIHNvIHRoYXQgaXQKLQkgIGNvbXBpbGVzIGNvbnNpc3RlbnRseS4gIEZpeGVzICM1MjIyNzguCi0KLTIwMDgtMDMtMjcgMDk6MzY6NTggKzAwMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvLzogRml4IHVwIHRoZSBtaXhlciB0cmFja3MgdG8gdXNlIGEgdm9sdW1lIHJhbmdlIG9mIDAtMjU1LCB3aGljaCBpcyB3aGF0IHRoZSBzdW4gYXVkaW8gQVBJIHVzZXMuIFRoaXMgc2ltLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uIGF0IHN1biBkb3QgY29tPgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkgIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF92b2x1bWUpLAotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X3ZvbHVtZSk6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzogKGdzdF9zdW5hdWRpb21peGVyX3RyYWNrX25ldyk6Ci0JICBGaXggdXAgdGhlIG1peGVyIHRyYWNrcyB0byB1c2UgYSB2b2x1bWUgcmFuZ2Ugb2YgMC0yNTUsIHdoaWNoIGlzIHdoYXQKLQkgIHRoZSBzdW4gYXVkaW8gQVBJIHVzZXMuIFRoaXMgc2ltcGxpZmllcyB0aGUgY29kZSBhbmQgYXZvaWRzIHJvdW5kaW5nCi0JICBlcnJvcnMuIEZpeGVzICM1MjQ1OTMuCi0KLTIwMDgtMDMtMjYgMTU6MTA6MDggKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogQ2hhbmdlTG9nOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgQWRkIGRldmljZS1mZCBwcm9wZXJ0eSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGFwcHMgdG8gY2FsbCBpb2N0bCdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBZGQgZGV2aWNlLWZkIHByb3BlcnR5IHRvIG1ha2UgaXQgcG9zc2libGUgdG8gYXBwcyB0byBjYWxsIGlvY3RsJ3MuCi0KLTIwMDgtMDMtMjUgMTY6NDQ6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogVW5icmVhayBzdHJlYW1pbmcgbW9kZSBhZ2Fpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChuZXh0X2VudHJ5X3NpemUpOgotCSAgVW5icmVhayBzdHJlYW1pbmcgbW9kZSBhZ2Fpbi4KLQotMjAwOC0wMy0yNSAxMjozOToyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBSZW1vdmUgc3VwZXJmbHVvdXMgREVCVUcgbWFjcm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHR1cmUpOgotCSAgUmVtb3ZlIHN1cGVyZmx1b3VzIERFQlVHIG1hY3JvLgotCi0yMDA4LTAzLTI1IDEyOjMzOjA5ICswMDAwICBXaWxsaWFtIE0uIEJyYWNrIDx3YnJhY2tAbW1tLmNvbS5oaz4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBDaGVjayB3aGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgc2V0dGluZyB0aGUgZnJhbWVyYXRlIGJlZm9yZSB0cnlpbmcgdG8gc2V0IGl0IGFuZCB0aGVuIHBvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBXaWxsaWFtIE0uIEJyYWNrIDx3YnJhY2sgYXQgbW1tIGNvbSBoaz4KLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZnJhY3Rpb25zX2FyZV9lcXVhbCksCi0JICAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHR1cmUpOgotCSAgQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHNldHRpbmcgdGhlIGZyYW1lcmF0ZSBiZWZvcmUKLQkgIHRyeWluZyB0byBzZXQgaXQgYW5kIHRoZW4gcG9zdGluZyBhIHdhcm5pbmcgb3IgZXJyb3IgaWYgaXQgZG9lc24ndAotCSAgd29yayAoIzUxNjY0OSwgIzUyMDA5MikuIEFsc28gY29tcGFyZSBmcmFjdGlvbnMgbW9yZSBjb3JyZWN0bHkuCi0KLTIwMDgtMDMtMjQgMTI6MzI6NTkgKzAwMDAgIFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgTWFrZSByZ2FuYWx5c2lzIGFuZCByZ2xpbWl0ZXIgZWxlbWVudHMgR0FQLWZsYWcgYXdhcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jIChnc3RfcmdfYW5hbHlzaXNfaW5pdCksCi0JICAoZ3N0X3JnX2FuYWx5c2lzX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jIChnc3RfcmdfbGltaXRlcl9pbml0KSwKLQkgIChnc3RfcmdfbGltaXRlcl90cmFuc2Zvcm1faXApOgotCSAgTWFrZSByZ2FuYWx5c2lzIGFuZCByZ2xpbWl0ZXIgZWxlbWVudHMgR0FQLWZsYWcgYXdhcmUuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzogKHRlc3RfZ2FwX2J1ZmZlcnMpLAotCSAgKHJnYW5hbHlzaXNfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2xpbWl0ZXIuYyAodGVzdF9nYXApLCAocmdsaW1pdGVyX3N1aXRlKToKLQkgIEFkZCB0ZXN0cyB0byB2ZXJpZnkgZ2FwLWF3YXJlbmVzcy4KLQotMjAwOC0wMy0yMyAxMzozMToxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2dvb20vTWFrZWZpbGUuYW06IFJlbW92ZSBwcGMgYXNzZW1ibGVyIG9wdGltaXNhdGlvbnMgZnJvbSB0aGUgYnVpbGQgdW50aWwgdGhleSBhY3R1YWxseSBidWlsZCAodGhleSBhbHNvIHNlZW0gdG8gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dvb20vTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgcHBjIGFzc2VtYmxlciBvcHRpbWlzYXRpb25zIGZyb20gdGhlIGJ1aWxkIHVudGlsIHRoZXkKLQkgIGFjdHVhbGx5IGJ1aWxkICh0aGV5IGFsc28gc2VlbSB0byBoYXZlIEdQTCBoZWFkZXJzKS4KLQotMjAwOC0wMy0yMyAxMjo0ODo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgbTQvTWFrZWZpbGUuYW06IEJldHRlciBub3QgZGlzdCBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGFueSBsb25nZXIgKGxyaW50Km00KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBtNC9NYWtlZmlsZS5hbToKLQkgIEJldHRlciBub3QgZGlzdCBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGFueSBsb25nZXIgKGxyaW50Km00KS4KLQotMjAwOC0wMy0yMiAxOToyNjowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBEb24ndCBhdXRvcGx1ZyBzb3VwaHR0cHNyYyBmb3IgZGF2L2RhdnMuIFRoaXMgaXMgYmV0dGVyIGhhbmRsZWQgYnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBfaHR0cF9zcmNfZ290X2hlYWRlcnNfY2IpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2NodW5rX2FsbG9jYXRvciksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfZ290X2NodW5rX2NiKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY191cmlfZ2V0X3Byb3RvY29scyk6Ci0JICBEb24ndCBhdXRvcGx1ZyBzb3VwaHR0cHNyYyBmb3IgZGF2L2RhdnMuIFRoaXMgaXMgYmV0dGVyIGhhbmRsZWQgYnkKLQkgIEdJTyBhbmQgR25vbWVWRlMgYXMgdGhleSBwcm92aWRlIGF1dGhlbnRpY2F0aW9uLgotCSAgRG9uJ3QgbGVhayB0aGUgaWN5IGNhcHMgaWYgd2UgYWxyZWFkeSBzZXQgdGhlbSBhbmQgZ2V0IGEgbmV3Ci0JICBpY3ktbWV0YWludCBoZWFkZXIuCi0JICBUcnkgaGFyZGVyIHRvIHNldCB0aGUgaWN5IGNhcHMgb24gdGhlIG91dHB1dCBidWZmZXIgdG8gaGF2ZSBjb3JyZWN0Ci0JICBjYXBzIGZvciB0aGUgZmlyc3QgYnVmZmVyIGFscmVhZHkuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6IChnb3RfYnVmZmVyKSwKLQkgIChHU1RfU1RBUlRfVEVTVCk6Ci0JICBDaGVjayB0aGF0IHdlIGdldCBhIGJ1ZmZlciB3aXRoIGFwcGxpY2F0aW9uL3gtaWN5IGNhcHMgaWYgaXJhZGlvLW1vZGUKLQkgIGlzIGVuYWJsZWQgYW5kIHdlIGhhdmUgYW4gaWNlY2FzdCBVUkwuCi0KLTIwMDgtMDMtMjIgMTg6MTg6NDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogQWN0dWFsbHkgc2V0IHRoZSBpY3kgY2FwcyBvbiBvdXIgc3JjIHBhZCBpZiB3ZSBoYXZlIGljZWNhc3QgZGF0YS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBfaHR0cF9zcmNfY2h1bmtfYWxsb2NhdG9yKToKLQkgIEFjdHVhbGx5IHNldCB0aGUgaWN5IGNhcHMgb24gb3VyIHNyYyBwYWQgaWYgd2UgaGF2ZSBpY2VjYXN0IGRhdGEuCi0JICBGaXhlcyBidWcgIzUyMzg1NC4KLQotMjAwOC0wMy0yMSAxMzozNjoyNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBSZW1vdmUgbHJpbnQvbHJpbnRmIGNoZWNrcy4gV2UgZG9uJ3QgdXNlIGl0IGFueXdoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogbTQvbHJpbnQubTQ6Ci0JICAqIG00L2xyaW50Zi5tNDoKLQkgIFJlbW92ZSBscmludC9scmludGYgY2hlY2tzLiBXZSBkb24ndCB1c2UgaXQgYW55d2hlcmUuCi0KLTIwMDgtMDMtMTkgMTk6NTY6NTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2ZyZWV6ZS86IEFkZCBleGFtcGxlIHRvIHNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24gYmxvYiBhbmQgcmVtb3ZlIHRoZSAzIGxpbmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZnJlZXplL0ZBUToKLQkgICogZ3N0L2ZyZWV6ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2ZyZWV6ZS9nc3RmcmVlemUuYzoKLQkgIEFkZCBleGFtcGxlIHRvIHNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24gYmxvYiBhbmQgcmVtb3ZlIHRoZSAzIGxpbmUKLQkgIEZBUS4KLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOgotCSAgQWRkIGEgc291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbiBibG9iLgotCi0yMDA4LTAzLTE4IDE1OjAzOjA2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubSAoZ3N0X29zeF92aWRlb19zaW5rX29zeHdpbmRvd19kZXN0cm95KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTAzLTE4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm0KLQkgIChnc3Rfb3N4X3ZpZGVvX3Npbmtfb3N4d2luZG93X2Rlc3Ryb3kpCi0JICAoZ3N0X29zeF92aWRlb19zaW5rX29zeHdpbmRvd19uZXcpOiBBY3R1YWxseSBzZXQgYSBsb2NrIG9uIHRoZQotCSAgdGFzaywgd2hvb3BkZWUuCi0JICAoY29jb2FfZXZlbnRfbG9vcCk6IFBhY2lmeSB0aGUgdGF5bWFucyBieSB1cHBpbmcgdGhlIHVzbGVlcGFnZSB0bwotCSAgMiBtcy4KLQotMjAwOC0wMy0xOCAxMTo1MDowOCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm0gKGdzdF9vc3hfdmlkZW9fc2lua19vc3h3aW5kb3dfZGVzdHJveSkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwOC0wMy0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tIChnc3Rfb3N4X3ZpZGVvX3Npbmtfb3N4d2luZG93X2Rlc3Ryb3kpCi0JICAoZ3N0X29zeF92aWRlb19zaW5rX29zeHdpbmRvd19uZXcsIGNvY29hX2V2ZW50X2xvb3ApOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmggKHN0cnVjdCBfR3N0T1NYVmlkZW9TaW5rKTogSWYgd2UKLQkgIG5lZWQgdG8gcnVuIGFuIGV2ZW50IGxvb3AsIGRvIHNvIGluIGEgdGFzayBpbnN0ZWFkIG9mIGFzc3VtaW5nCi0JICB0aGF0IHRoZXJlIHdpbGwgYmUgYSBHTWFpbkxvb3AuIEZpeGVzICM1MjMxMzQuCi0KLTIwMDgtMDMtMTcgMTk6NTA6NTggKzAwMDAgIFdpbGxpYW0gTS4gQnJhY2sgPHdicmFja0BtbW0uY29tLmhrPgotCi0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IE1ha2Ugc3VyZSB0aGUgcHJvYmVkIGZyYW1lIHNpemVzIGFyZSByZXZlcnNlZCBpbiB0aGUgcmVzdWx0aW5nIGNhcHMgYWxzbyB3aGVuIHVzaW5nIFY0TDJfRlIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdpbGxpYW0gTS4gQnJhY2sgPHdicmFjayBhdCBtbW0gY29tIGhrPgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICAoZ3N0X3Y0bDJzcmNfcHJvYmVfY2Fwc19mb3JfZm9ybWF0X2FuZF9zaXplKSwKLQkgIChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpOgotCSAgTWFrZSBzdXJlIHRoZSBwcm9iZWQgZnJhbWUgc2l6ZXMgYXJlIHJldmVyc2VkIGluIHRoZSByZXN1bHRpbmcKLQkgIGNhcHMgYWxzbyB3aGVuIHVzaW5nIFY0TDJfRlJNU0laRV9TVEVQV0lTRSAoc28gdGhleSBlbmQgdXAKLQkgIGhpZ2hlc3QgcmVzb2x1dGlvbiBmaXJzdCk7IGFsc28gcmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KLQkgIChQYXJ0bHkgZml4ZXMgIzUyMDA5MikKLQotMjAwOC0wMy0xNyAxNTo1NjowMSArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBDYWxsIFdTQVN0YXJ0dXAoKSBhbmQgV1NBQ2xlYW51cCBiZWZvcmUgdXNpbmcgdGhlIFdpbnNvY2sgQVBJLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzICA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2luaXQpLAotCSAgKGdzdF9ydHNwc3JjX2ZpbmFsaXplKToKLQkgIENhbGwgV1NBU3RhcnR1cCgpIGFuZCBXU0FDbGVhbnVwIGJlZm9yZSB1c2luZyB0aGUgV2luc29jayBBUEkuCi0JICBTZWUgIzUyMDgwOC4KLQotMjAwOC0wMy0xNiAxNTowMTowNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IEVybSwgdGhlIGJ1ZmZlci1zaXplIGlzIGp1c3QgZ3VpbnQsIG5vIG5lZWQgZm9yIHRoZSBzcGVjaWFsIGZvcm1hdCBzcGVjaWZpZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgRXJtLCB0aGUgYnVmZmVyLXNpemUgaXMganVzdCBndWludCwgbm8gbmVlZCBmb3IgdGhlIHNwZWNpYWwgZm9ybWF0Ci0JICBzcGVjaWZpZXIuCi0KLTIwMDgtMDMtMTYgMTQ6MzQ6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nb29tLzogU21hbGwgZml4ZXMgdG8gYnVpbGQgbW9yZSBvbiBQUEM6IGlmZGVmIG91dCBjb2RlIHRoYXQgdXNlcyB1bmtub3duIGRlZmluZTsgYWRkIG5ld2xpbmUgYXQgZW5kIG9mIGhlYWRlciBmaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6Ci0JICAqIGdzdC9nb29tL3BwY196b29tX3VsdGltYXRlLmg6Ci0JICBTbWFsbCBmaXhlcyB0byBidWlsZCBtb3JlIG9uIFBQQzogaWZkZWYgb3V0IGNvZGUgdGhhdCB1c2VzIHVua25vd24KLQkgIGRlZmluZTsgYWRkIG5ld2xpbmUgYXQgZW5kIG9mIGhlYWRlciBmaWxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCi0JICBBc3NlbWJsZXIgY29kZSBzdGlsbCBkb2Vzbid0IGJ1aWxkIHRob3VnaC4KLQotMjAwOC0wMy0xNiAxNDowNDoxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IEZpeCB1cCBteSBsYXN0IGNvbW1pdC4gVXNlIEdfR1VJTlQzMl9GT1JNQVQgZm9yIHRoZSBndWludDMyIGRlYnVnIGxvZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBGaXggdXAgbXkgbGFzdCBjb21taXQuIFVzZSBHX0dVSU5UMzJfRk9STUFUIGZvciB0aGUgZ3VpbnQzMiBkZWJ1ZyBsb2cuCi0JICBBbHNvIGRvd25ncmFkZSBhIEdTVF9XQVJOSU5HIHRvIEdTVF9ERUJVRyBhbmQgYWRkIGEgY29tbWVudC4KLQotMjAwOC0wMy0xNSAyMjoxMDozOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IENodW5rc2l6ZSBpcyB1aW50MzIuIEZpeCBmb3JtYXQgc3BlY2lmaWVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgIENodW5rc2l6ZSBpcyB1aW50MzIuIEZpeCBmb3JtYXQgc3BlY2lmaWVyLgotCi0yMDA4LTAzLTE0IDE1OjUzOjAxICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHNwL0NPUFlJTkcuTUlUOgotCSAgZml4IGxpY2Vuc2UgZmlsZSwgcmVtb3ZlIGV4dHJhIGxpbmUgY29waWVkIG92ZXIgYnkgbWlzdGFrZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggbGljZW5zZSBmaWxlLCByZW1vdmUgZXh0cmEgbGluZSBjb3BpZWQgb3ZlciBieSBtaXN0YWtlCi0KLTIwMDgtMDMtMTMgMTQ6MzA6NDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1ZGlvZngvYXVkaW9meC5jOiBVc2UgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUgYW5kIEdTVF9QQUNLQUdFX09SSUdJTiBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdmFsdWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvZnguYzoKLQkgIFVzZSBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSBhbmQgR1NUX1BBQ0tBR0VfT1JJR0lOIGluc3RlYWQKLQkgIG9mIGhhcmRjb2RpbmcgdmFsdWVzLgotCi0yMDA4LTAzLTEzIDA5OjQ1OjA5ICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy4qOiBUcnkgdG8gcmVzdW1lIG9uIHNlcnZlciBkaXNjb25uZWN0LiBGaXhlcyBidWcgIzUyMjEzNC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdvdXRlciBDbG9ldGVucyA8d291dGVyIGF0IG1pbmQgZG90IGJlPgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBfaHR0cF9zcmNfaW5pdCksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfZmluaXNoZWRfY2IpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfcmVzcG9uc2VfY2IpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2J1aWxkX21lc3NhZ2UpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfY3JlYXRlKToKLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIFRyeSB0byByZXN1bWUgb24gc2VydmVyIGRpc2Nvbm5lY3QuIEZpeGVzIGJ1ZyAjNTIyMTM0LgotCi0yMDA4LTAzLTExIDIzOjEyOjA0ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBzeXMvb3NzL2dzdG9zc3NyYy4qOiBDYWNoZSBwcm9iZWQgY2Fwcywgc28gX2dldF9jYXBzKCkgZHVyaW5nIHJlY29yZGluZyBkb2Vzbid0IGNhdXNlIGlvY3RsIGNhbGxzIHdoaWNoIG1heSBkaXNydXB0IHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBza3luZXQgYmU+Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3NzX3NyY19pbml0KSwgKGdzdF9vc3Nfc3JjX2dldGNhcHMpLAotCSAgKGdzdF9vc3Nfc3JjX2Nsb3NlKToKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuaDoKLQkgIENhY2hlIHByb2JlZCBjYXBzLCBzbyBfZ2V0X2NhcHMoKSBkdXJpbmcgcmVjb3JkaW5nIGRvZXNuJ3QgY2F1c2UKLQkgIGlvY3RsIGNhbGxzIHdoaWNoIG1heSBkaXNydXB0IHRoZSByZWNvcmRpbmcgKGZpeGVzICM1MjE4NzUpLgotCi0yMDA4LTAzLTExIDE2OjIzOjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VuZCBhIERJU0NPTlQgYWZ0ZXIgYSBzZWVrIGJ5IHNldHRpbmcgdGhlIHNhbXBsZSBpbmRleCB0byBhbiB1bmRlZmluZWQgdmEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQpLAotCSAgKGdzdF9xdGRlbXV4X3ByZXBhcmVfY3VycmVudF9zYW1wbGUpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIE1ha2Ugc3VyZSB3ZSBhbHdheXMgc2VuZCBhIERJU0NPTlQgYWZ0ZXIgYSBzZWVrIGJ5IHNldHRpbmcgdGhlIHNhbXBsZQotCSAgaW5kZXggdG8gYW4gdW5kZWZpbmVkIHZhbHVlIGFmdGVyIGEgc2Vlay4KLQotMjAwOC0wMy0xMSAxNToxODo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5oOiBGaXggdXAgSVNfRk9PIG1hY3Jvcywgd2hpY2ggbWFrZXMgZ3RrLWRvYyBtdWNoIGhhcHBpZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5oOiAoR1NUX0lTX0FWSV9TVUJUSVRMRSksCi0JICAoR1NUX0lTX0FWSV9TVUJUSVRMRV9DTEFTUyk6Ci0JICBGaXggdXAgSVNfRk9PIG1hY3Jvcywgd2hpY2ggbWFrZXMgZ3RrLWRvYyBtdWNoIGhhcHBpZXIuCi0KLTIwMDgtMDMtMDggMTk6Mjk6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOiBNb3ZlIHRoZSAtbGdzdGZvbyB3aGVyZSBpdCBiZWxvbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgTW92ZSB0aGUgLWxnc3Rmb28gd2hlcmUgaXQgYmVsb25ncy4KLQotMjAwOC0wMy0wOCAxOToxNDoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkKLQotMjAwOC0wMy0wOCAwNDo0MDozMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbWF0cm9za2EvZWJtbC1pZHMuaDogQWRkIElEIGZvciBFQk1MIENSQzMyIGVsZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLWlkcy5oOgotCSAgQWRkIElEIGZvciBFQk1MIENSQzMyIGVsZW1lbnRzLgotCSAgKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX2ZpbmFsaXplKSwKLQkgIChnc3RfZWJtbF9yZWFkX2NsYXNzX2luaXQpLCAoZ3N0X2VibWxfcmVhZF9wZWVrX2J5dGVzKSwKLQkgIChnc3RfZWJtbF9yZWFkX2dldF9sZW5ndGgpLCAoX2V4dDJkYmwpLCAoZ3N0X2VibWxfcmVhZF9mbG9hdCksCi0JICAoZ3N0X2VibWxfcmVhZF9oZWFkZXIpOgotCSAgU3VwcG9ydCByZWFkaW5nIDgwYml0IGZsb2F0cywgYWRkIGZpbmFsaXplIG1ldGhvZCB0byBjbGVhbiB1cAotCSAgaW4gYW55IGNhc2UsIHN1cHBvcnQgcmVhZGluZyBsZW5ndGgvaWQgZWxlbWVudHMgd2l0aCBhbnkgbGVuZ3RoCi0JICBhcyBsb25nIGFzIGl0J3Mgc21hbGxlciB0aGFuIG91ciBzdXBwb3J0ZWQgbWF4aW11bSwgZG9uJ3QgbGVhawotCSAgYnVmZmVycyBpZiByZWFkaW5nIGFzIG11Y2ggZGF0YSBhcyB3ZSB3YW50ZWQgZmFpbGVkIGFuZCBzb21lCi0JICBzbWFsbGVyIGNsZWFudXAuCi0KLTIwMDgtMDMtMDggMDQ6MjE6MzQgKzAwMDAgIE9saXZpZXIgQ3JldGUgPHRlc3RlckB0ZXN0ZXIuY2E+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOiBDaGVjayB0aGF0IGEgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCBiZWZvcmUgcmVhZGluZyBmcm9tIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOiAoZ3N0X3J0cF9oMjYzcF9kZXBheV9wcm9jZXNzKToKLQkgIENoZWNrIHRoYXQgYSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIGJlZm9yZSByZWFkaW5nIGZyb20gaXQuCi0JICBGaXhlcyBidWcgIzUyMTEwMi4KLQotMjAwOC0wMy0wNyAxNTo1NDowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogRml4IGNvbXBpbGF0aW9uIGFmdGVyIHJlbW92aW5nIHRoZSBHc3RQb2xsTW9kZSBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19zdGFydCk6Ci0JICBGaXggY29tcGlsYXRpb24gYWZ0ZXIgcmVtb3ZpbmcgdGhlIEdzdFBvbGxNb2RlIGZyb20gdGhlCi0JICBjb25zdHJ1Y3Rvci4KLQotMjAwOC0wMy0wNyAxMzowODo0MiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBDaGVjayBmb3Igc2luaCgpLCBjb3NoKCkgYW5kIGFzaW5oKCkgYW5kIGRlZmluZSBvdXIgb3duIGltcGxlbWVudGF0aW9ucyBpZiB0aGV5J3JlIG5vdCBhdmFpbGFibGUuIEZpeGVzIGJ1ZyAjNTIwODgwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYzoKLQkgICogZ3N0L2F1ZGlvZngvbWF0aF9jb21wYXQuaDoKLQkgIENoZWNrIGZvciBzaW5oKCksIGNvc2goKSBhbmQgYXNpbmgoKSBhbmQgZGVmaW5lIG91ciBvd24KLQkgIGltcGxlbWVudGF0aW9ucyBpZiB0aGV5J3JlIG5vdCBhdmFpbGFibGUuIEZpeGVzIGJ1ZyAjNTIwODgwLgotCi0yMDA4LTAzLTA3IDEyOjQwOjE4ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogVW5yZWYgdGhlIGJ1ZmZlcnMgb25seSBvbmNlIHdoZW4gaGFuZGxpbmcgbm90LW5lZ290aWF0ZWQgZXJyb3JzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xpdmllciBDcmV0ZSA8dGVzdGVyIGF0IHRlc3RlciBkb3QgY2E+Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4X2VuY19jaGFpbik6Ci0JICBVbnJlZiB0aGUgYnVmZmVycyBvbmx5IG9uY2Ugd2hlbiBoYW5kbGluZyBub3QtbmVnb3RpYXRlZCBlcnJvcnMuCi0JICBGaXhlcyBidWcgIzUyMDc2NC4KLQotMjAwOC0wMy0wNyAxMDowMTo0MCArMDAwMCAgT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRhbmRiZXJnLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogUHJvcGVybHkgYmFsYW5jZSBXU0FfQ2xlYW51cCB3aXRoIFdTQV9TdGFydHVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzICA8b2xlLmFuZHJlLnJhdm5hc0B0YW5kYmVyZy5jb20+Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2ZpbmFsaXplKSwgKGdzdF91ZHBzcmNfc3RhcnQpLAotCSAgKGdzdF91ZHBzcmNfc3RvcCk6Ci0JICBQcm9wZXJseSBiYWxhbmNlIFdTQV9DbGVhbnVwIHdpdGggV1NBX1N0YXJ0dXAuCi0JICBBbHNvIG1ha2UgdGhlIHBvbGwgY29udHJvbGxhYmxlIG9uIHdpbmRvd3MuIEZpeGVzICM1MjA4ODguCi0KLTIwMDgtMDMtMDYgMTk6NDc6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IEhhbmRsZSByZXR1cm4gdmFsdWVzIGZyb20gcHVsbF9yYW5nZSBpbiBhIG1vcmUgZ3JhbnVsYXIgd2F5IHRvIHByb3Blcmx5IHNodXQgZG93biBvbiBzZWVrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX3BlZWtfYnl0ZXMpLAotCSAgKGdzdF9lYm1sX3JlYWRfcHVsbF9ieXRlcyksIChnc3RfZWJtbF9yZWFkX2VsZW1lbnRfaWQpLAotCSAgKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9sZW5ndGgpLCAoZ3N0X2VibWxfcGVla19pZCksCi0JICAoZ3N0X2VibWxfcmVhZF9za2lwKSwgKGdzdF9lYm1sX3JlYWRfYnVmZmVyKSwKLQkgIChnc3RfZWJtbF9yZWFkX2J5dGVzKSwgKGdzdF9lYm1sX3JlYWRfdWludCksIChnc3RfZWJtbF9yZWFkX3NpbnQpLAotCSAgKGdzdF9lYm1sX3JlYWRfZmxvYXQpLCAoZ3N0X2VibWxfcmVhZF9hc2NpaSksIChnc3RfZWJtbF9yZWFkX3V0ZjgpLAotCSAgKGdzdF9lYm1sX3JlYWRfZGF0ZSksIChnc3RfZWJtbF9yZWFkX21hc3RlciksCi0JICAoZ3N0X2VibWxfcmVhZF9iaW5hcnkpLCAoZ3N0X2VibWxfcmVhZF9oZWFkZXIpOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9jb21iaW5lX2Zsb3dzKSwgKGdzdF9tYXRyb3NrYV9kZW11eF9yZXNldCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3JlYWRfdHJhY2tfZW5jb2RpbmdzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2luaXRfc3RyZWFtKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfdHJhY2tzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXhfY3VldHJhY2spLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9pbmRleF9wb2ludGVudHJ5KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaW5kZXgpLCAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZm8pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YV9pZF9zaW1wbGVfdGFnKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGFfaWRfdGFnKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGEpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zeW5jX3N0cmVhbXMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2hkcl9idWYpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2ZsYWNfY29kZWNfcHJpdl9kYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcHVzaF94aXBoX2NvZGVjX3ByaXZfZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF93dnBrX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3N1YnRpdGxlX2J1ZmZlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2spLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9jbHVzdGVyKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHNfc2Vla2VudHJ5KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wX3N0cmVhbV9wYXJzZV9pZCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2xvb3Bfc3RyZWFtKSwgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIEhhbmRsZSByZXR1cm4gdmFsdWVzIGZyb20gcHVsbF9yYW5nZSBpbiBhIG1vcmUgZ3JhbnVsYXIgd2F5IHRvIHByb3Blcmx5Ci0JICBzaHV0IGRvd24gb24gc2Vla3MuCi0JICBDb21iaW5lIHJldHVybiB2YWx1ZXMgZnJvbSBwdXNoLgotCSAgSW1wbGVtZW50IHByb3BlciBlcnJvciBoYW5kbGluZy4KLQkgIFByZXBhcmUgZm9yIGhhbmRsaW5nIHNlZWtpbmcgY29ycmVjdGx5LgotCi0yMDA4LTAzLTAzIDIyOjAxOjU2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiBVc2UgR0lOVDY0IGZvcm1hdHRpbmcgY29uc3RhbnRzIGZyb20gR0xJQi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JICBVc2UgR0lOVDY0IGZvcm1hdHRpbmcgY29uc3RhbnRzIGZyb20gR0xJQi4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBBZGQgc29tZSBndWFyZHMgdG8gYXZvaWQgYSBwb3NzaWJsZSBkaXZpc2lvbiBieSAwIGFuZCBjcmFzaGluZwotCSAgd2l0aCBOVUxMIGV2ZW50cyBvbiBzb21lIHN5c3RlbXMuCi0JICBVc2UgZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCBzb21ld2hlcmUgaW5zdGVhZCBvZiBhbiBpbXBsaWNpdAotCSAgY29udmVyc2lvbi4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgQ2hlY2sgZm9yIGludmFsaWQgdGltZXN0YW1wcyBpbiBhIGJ1bmNoIG9mIHBsYWNlcyB0byBhdm9pZAotCSAgd3JpdGluZyBib2d1cyBkdXJhdGlvbnMgaW50byB0aGUgb3V0cHV0IGZpbGUuCi0JICBGaXggc29tZSBkb3VibGU8LT5naW50NjQgY29udmVyc2lvbnMgdGhhdCB3ZXJlbid0IHVzaW5nCi0JICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlCi0KLTIwMDgtMDMtMDMgMTM6MDM6NDMgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBjb25maWd1cmUuYWM6IE1vdmUgdGhlIGNoZWNrcyBmb3IgYmlzb24sIGZsZXggYW5kIGFzIHRvIHRoZSBwcm9ncmFtIHNlY3Rpb24gYW5kIHRoZSBjaGVjayBmb3IgZ2NjIGlubGluZSBhc20gdG8gdGhlIGMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBNb3ZlIHRoZSBjaGVja3MgZm9yIGJpc29uLCBmbGV4IGFuZCBhcyB0byB0aGUgcHJvZ3JhbSBzZWN0aW9uIGFuZCB0aGUKLQkgIGNoZWNrIGZvciBnY2MgaW5saW5lIGFzbSB0byB0aGUgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzIHNlY3Rpb24uCi0KLTIwMDgtMDMtMDMgMTI6MTA6NTUgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBjb25maWd1cmUuYWM6IFVzZSBBR19HU1RfQ0hFQ0tfUExVR0lOIGFuZCBBR19HU1RfRElTQUJMRV9QTFVHSU4gdG8gc2ltcGxpZnkgd2hpY2ggcGx1Zy1pbnMgYXJlIGluY2x1ZGVkL2V4Y2x1ZGVkLiAoIzQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBVc2UgQUdfR1NUX0NIRUNLX1BMVUdJTiBhbmQgQUdfR1NUX0RJU0FCTEVfUExVR0lOIHRvIHNpbXBsaWZ5IHdoaWNoCi0JICBwbHVnLWlucyBhcmUgaW5jbHVkZWQvZXhjbHVkZWQuICgjNDk4MjIyKQotCi0yMDA4LTAyLTI5IDEyOjM1OjI0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogRG9uJ3QgY2FsbCBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCkgdW5sZXNzIHdlIGhhdmUgYSB2YWxpZCB0aW1lc3RhbXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfYmxlbmRfYnVmZmVycyk6Ci0JICBEb24ndCBjYWxsIGdzdF9vYmplY3Rfc3luY192YWx1ZXMoKSB1bmxlc3Mgd2UgaGF2ZSBhIHZhbGlkIHRpbWVzdGFtcC4KLQotMjAwOC0wMi0yOSAwNjoxODo1NSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IEZpeCBEaXJhYyBtYXBwaW5nLiAgSSBoYWQgcHJldmlvdXNseSBhZGRlZCBhIFZmVy10eXBlIG1hcHBpbmcsIGJ1dCBpdCBsb29rcyBsaWtlIERpcmFjIHdpbGwgZ2V0IGEgbmF0aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIEZpeCBEaXJhYyBtYXBwaW5nLiAgSSBoYWQgcHJldmlvdXNseSBhZGRlZCBhIFZmVy10eXBlCi0JICBtYXBwaW5nLCBidXQgaXQgbG9va3MgbGlrZSBEaXJhYyB3aWxsIGdldCBhIG5hdGl2ZSBNYXRyb3NrYQotCSAgbWFwcGluZywgYW5kIHRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5IG1ldGhvZC4KLQotMjAwOC0wMi0yOCAyMzo1NjozMCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEFkZCBEaXJhYyBlbmNvZGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEFkZCBEaXJhYyBlbmNvZGluZwotCi0yMDA4LTAyLTI4IDExOjUxOjI0ICswMDAwICBQZXRlciBLamVsbGVyc3RlZHQgPHBrakBheGlzLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuKjogUG9ydCB0byBHc3RQb2xsLiBTZWUgIzUwNTQxNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19pbml0KSwgKGdzdF91ZHBzcmNfY3JlYXRlKSwKLQkgIChnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfdWRwc3JjX3N0YXJ0KSwgKGdzdF91ZHBzcmNfdW5sb2NrKSwKLQkgIChnc3RfdWRwc3JjX3VubG9ja19zdG9wKSwgKGdzdF91ZHBzcmNfc3RvcCk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICBQb3J0IHRvIEdzdFBvbGwuIFNlZSAjNTA1NDE3LgotCi0yMDA4LTAyLTI4IDA4OjM3OjQ0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IFJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCB3aGVuIHRoZSBjYXBzIGFyZSBub3Qgc2V0IHlldCBvbiB0aGUgc3JjcGFkLiBXZSBuZWVkIHJhdGUgYW5kIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChnc3RfbXVsYXdkZWNfY2hhaW4pOgotCSAgUmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEIHdoZW4gdGhlIGNhcHMgYXJlIG5vdCBzZXQKLQkgIHlldCBvbiB0aGUgc3JjcGFkLiBXZSBuZWVkIHJhdGUgYW5kIGNoYW5uZWxzIGJlZm9yZSB3ZQotCSAgY2FuIGRvIGFueSBwcm9jZXNzaW5nLiBGaXhlcyBidWcgIzUxOTA4OC4KLQotMjAwOC0wMi0yNiAxMDowOTozOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRGV0ZWN0IGFuZCBpbmRpY2F0ZSBpZiBHQ0MgaW5saW5lIGFzc2VtYmx5IHN5bnRheCBpcyBhdmFpbGFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRGV0ZWN0IGFuZCBpbmRpY2F0ZSBpZiBHQ0MgaW5saW5lIGFzc2VtYmx5IHN5bnRheCBpcwotCSAgYXZhaWxhYmxlLgotCSAgKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2dvb20vY29udm9sdmVfZnguYzoKLQkgICogZ3N0L2dvb20vZmx5aW5nX3N0YXJzX2Z4LmM6Ci0JICAqIGdzdC9nb29tL2dvb21fY29uZmlnLmg6Ci0JICAqIGdzdC9nb29tL2dvb21fY29yZS5jOgotCSAgKiBnc3QvZ29vbS9nb29tc2wuYzoKLQkgICogZ3N0L2dvb20vaWZzLmM6Ci0JICAqIGdzdC9nb29tL21teC5jOgotCSAgKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOgotCSAgKiBnc3QvZ29vbS94bW14LmM6Ci0JICBGaXggdmFyaW91cyBHQ0MtaXNtcywgYW5kIG9ubHkgYnVpbGQgdGhlIGlubGluZSBhc3NlbWJseQotCSAgd2l0aCBjb21waWxlcnMgdGhhdCBzdXBwb3J0IEdDQyBpbmxpbmUgYXNzZW1ibHkuCi0JICBGaXggYSBjb3VwbGUgb2Ygb3RoZXIgd2FybmluZ3Mgc2hvd24gd2l0aCBGb3J0ZS4KLQotMjAwOC0wMi0yNiAwNTozNjoxNyArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgQWRkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgYSBsaXN0IG9mIGNvb2tpZXMgdG8gYmUgcGFzc2VkIGluIHRoZSBIVFRQIHJlcXVlc3QuIEZpeGVzIGJ1ZyAjNTE4NzIyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV291dGVyIENsb2V0ZW5zIDx3b3V0ZXIgYXQgbWluZCBkb3QgYmU+Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IChnc3Rfc291cF9odHRwX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19pbml0KSwgKGdzdF9zb3VwX2h0dHBfc3JjX2Rpc3Bvc2UpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm9wZXJ0eSksIChnc3Rfc291cF9odHRwX3NyY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2NyZWF0ZSk6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmM6IChydW5fdGVzdCksIChHU1RfU1RBUlRfVEVTVCksCi0JICAoc291cGh0dHBzcmNfc3VpdGUpOgotCSAgQWRkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgYSBsaXN0IG9mIGNvb2tpZXMgdG8gYmUgcGFzc2VkIGluCi0JICB0aGUgSFRUUCByZXF1ZXN0LiBGaXhlcyBidWcgIzUxODcyMi4KLQotMjAwOC0wMi0yNSAxMjowMzo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZ29vbS94bW14LmM6IFVzZSAnZW1tcycgaW5zdGVhZCBvZiAnZmVtbXMnIHRvIG5vdCBjcmFzaCBvbiBjcHVzIHRoYXQgZG8gbm90IGltcGxlbWVudCB0aGlzIDNkbm93IHNwZWNpZmljIGluc3RydWMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS94bW14LmM6Ci0JICBVc2UgJ2VtbXMnIGluc3RlYWQgb2YgJ2ZlbW1zJyB0byBub3QgY3Jhc2ggb24gY3B1cyB0aGF0IGRvIG5vdAotCSAgaW1wbGVtZW50IHRoaXMgM2Rub3cgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24uCi0KLTIwMDgtMDItMjUgMTA6MzI6MzUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2dvb20vcGx1Z2luX2luZm8uYzogVXNlIGV4dGVuZGVkIE1NWCBmb3IgZHJhd19saW5lKCkgdG9vIGlmIGF2YWlsYWJsZSwgbm90IG9ubHkgbm9ybWFsIE1NWC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOiAoc2V0T3B0aW1pemVkTWV0aG9kcyk6Ci0JICBVc2UgZXh0ZW5kZWQgTU1YIGZvciBkcmF3X2xpbmUoKSB0b28gaWYgYXZhaWxhYmxlLCBub3Qgb25seQotCSAgbm9ybWFsIE1NWC4KLQotMjAwOC0wMi0yNSAwNjo1MDozMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvanBlZy9nc3RqcGVnLmM6IFJlbW92ZSAoY29tbWVudGVkIG91dCkgc21va2UgdHlwZWZpbmRlci4gVGhpcyBpcyBpbiBiYXNlIG5vdy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnLmM6IChwbHVnaW5faW5pdCk6Ci0JICBSZW1vdmUgKGNvbW1lbnRlZCBvdXQpIHNtb2tlIHR5cGVmaW5kZXIuIFRoaXMgaXMgaW4gYmFzZSBub3cuCi0KLTIwMDgtMDItMjMgMTU6MDI6MTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZ29vbTJrMS86IFJlbmFtZSB0aGUgaW5zdGFsbGVkIGxpYnJhcnksIGFuZCBkb24ndCByZWdpc3RlciB0aGUgc2FtZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tMmsxL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ29vbTJrMS9nc3Rnb29tLmM6Ci0JICBSZW5hbWUgdGhlIGluc3RhbGxlZCBsaWJyYXJ5LCBhbmQgZG9uJ3QgcmVnaXN0ZXIgdGhlIHNhbWUKLQkgIEdUeXBlIG5hbWUgYXMgdGhlIG5ldyBnb29tLgotCi0yMDA4LTAyLTIzIDEyOjIzOjM4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBDaGVjayBmb3IgYW5kIGRlZmluZSBFUlJPUl9DWFhGTEFHUyBhbmQgdXNlIHRoZW0gd2hlbiBidWlsZGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L3RhZ2xpYi9NYWtlZmlsZS5hbToKLQkgIENoZWNrIGZvciBhbmQgZGVmaW5lIEVSUk9SX0NYWEZMQUdTIGFuZCB1c2UgdGhlbSB3aGVuIGJ1aWxkaW5nCi0JICBDKysgY29kZSAoIzUxNjUwOSkuCi0KLTIwMDgtMDItMjMgMTI6MTA6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nb29tLzogQ2FsbCBvaWxfaW5pdCgpLCBvdGhlcndpc2Ugb2lsX2dldF9jcHVfZmxhZ3MoKSB3b24ndCByZXR1cm4gYW55dGhpbmcgdXNlZnVsLiBFeHBvcnQgZ29vbSBkZWJ1ZyBjYXRlZ29yeSBzby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdvb21fZGVidWcpLCAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZ29vbS9wbHVnaW5faW5mby5jOiAoZ29vbV9kZWJ1ZyksIChHU1RfQ0FUX0RFRkFVTFQpLAotCSAgKHNldE9wdGltaXplZE1ldGhvZHMpOgotCSAgQ2FsbCBvaWxfaW5pdCgpLCBvdGhlcndpc2Ugb2lsX2dldF9jcHVfZmxhZ3MoKSB3b24ndCByZXR1cm4KLQkgIGFueXRoaW5nIHVzZWZ1bC4gRXhwb3J0IGdvb20gZGVidWcgY2F0ZWdvcnkgc28gd2UgY2FuIGdldAotCSAgcmlkIG9mIHRoZSBWRVJCT1NFIGRlZmluZSBhbmQgdGhlIHByaW50ZnMuCi0KLTIwMDgtMDItMjMgMTE6NTM6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nb29tLzogQ29tcGlsZSBmaXhlcyBmb3IgeDg2LTY0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL2dvb21zbF9oZWFwLmM6IChhbGlnbl9pdCk6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6IChzZXRPcHRpbWl6ZWRNZXRob2RzKToKLQkgIENvbXBpbGUgZml4ZXMgZm9yIHg4Ni02NC4KLQotMjAwOC0wMi0yMyAwMzoxMDo1NSArMDAwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JICBnc3QvZ29vbS9NYWtlZmlsZS5hbTogRG9uJ3QgY29tcGlsZSBsZXggb3IgeWFjYyBvdXRwdXRzIHdpdGggd2FybmluZ3MsIGJ1dCBhZGQgb3RoZXIgQ0ZMQUdTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dvb20vTWFrZWZpbGUuYW06IERvbid0IGNvbXBpbGUgbGV4IG9yIHlhY2Mgb3V0cHV0cwotCSAgd2l0aCB3YXJuaW5ncywgYnV0IGFkZCBvdGhlciBDRkxBR1MKLQkgICogZ3N0L2dvb20vZ29vbXNsLmMgKGdzbF9pbnN0cl9zZXRfbmFtZXNwYWNlKSwKLQkgIChnc2xfaW5zdHJfYWRkX3BhcmFtKSwgKGlmbG93X2V4ZWN1dGUpLCAoZ3NsX2VudGVybmFtZXNwYWNlKSwKLQkgIChjYWxjdWxhdGVfbGFiZWxzKSwgKGdzbF9yZWFkX2ZpbGUpOgotCSAgKiBnc3QvZ29vbS9nb29tc2xfbGV4Lmw6Ci0JICAqIGdzdC9nb29tL2dvb21zbF95YWNjLnk6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6IFJlbW92ZSBhIGZldyBsaXZlIHByaW50ZiwgYW5kCi0JICBmcHJpbnRmLCByZXBsYWNlIGV4aXQoKSBjYWxscyB3aXRoIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCkKLQkgIGlmIGl0IG5vdCBvcHRpbWFsIGZvciBhIGxpYnJhcnkKLQotMjAwOC0wMi0yMyAwMjozODowMyArMDAwMCAgQmFzdGllbiBOb2NlcmEgPGhhZGVzc0BoYWRlc3MubmV0PgotCi0JICBnc3QvZ29vbS9NYWtlZmlsZS5hbTogUmVtb3ZlIHRoZSB3YXJuaW5ncyBiZWluZyBkaXNhYmxlZCwgZml4IGxpbmthZ2Ugb24geDg2LCBzcG90dGVkIGJ5IFNlYmFzdGlhbiBEcsO2Z2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9NYWtlZmlsZS5hbTogUmVtb3ZlIHRoZSB3YXJuaW5ncyBiZWluZyBkaXNhYmxlZCwKLQkgIGZpeCBsaW5rYWdlIG9uIHg4Niwgc3BvdHRlZCBieSBTZWJhc3RpYW4gRHLDtmdlCi0JICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCSAgKiBnc3QvZ29vbS9jb252b2x2ZV9meC5jIChjb252b2x2ZV9pbml0KSwKLQkgIChjcmVhdGVfb3V0cHV0X3dpdGhfYnJpZ2h0bmVzcyksIChjb252b2x2ZV9hcHBseSk6Ci0JICAqIGdzdC9nb29tL2ZpbHRlcnMuYyAoem9vbUZpbHRlclZpc3VhbEZYV3JhcHBlcl9jcmVhdGUpOgotCSAgKiBnc3QvZ29vbS9nb29tc2wuYzoKLQkgICogZ3N0L2dvb20vaWZzLmMgKGlmc191cGRhdGUpLCAoaWZzX3Zpc3VhbGZ4X2NyZWF0ZSk6Ci0JICAqIGdzdC9nb29tL3BsdWdpbl9pbmZvLmM6Ci0JICAqIGdzdC9nb29tL3RlbnRhY2xlM2QuYyAodGVudGFjbGVfZnhfY3JlYXRlKToKLQkgIEZpeCB3YXJuaW5ncywgYW5kIGRpc2FibGUgdGhlIG1vdGlmcyBpbiB0aGUgY29udm9sdmVfZngKLQkgIHBsdWdpbiAodGhleSB3ZXJlIGNhdXNpbmcgd2FybmluZ3MsIGFuZCB0aGV5IHdlcmUganVzdAotCSAgIkdvb20iIGluIGZ1bm55IGxldHRlcnJpbmcpCi0KLTIwMDgtMDItMjMgMDE6NTE6MzcgKzAwMDAgIEJhc3RpZW4gTm9jZXJhIDxoYWRlc3NAaGFkZXNzLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBBZGQgY2hlY2tzIGZvciBGbGV4L1lhY2MvQmlzb24gYW5kIG90aGVyIGZ1cnJ5IGFuaW1hbHMsIGZvciB0aGUgbmV3IGdvb20gMms0IGJhc2VkIHBsdWdpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTAyLTIzICBCYXN0aWVuIE5vY2VyYSAgPGhhZGVzc0BoYWRlc3MubmV0PgotCSAgKiBjb25maWd1cmUuYWM6IEFkZCBjaGVja3MgZm9yIEZsZXgvWWFjYy9CaXNvbiBhbmQgb3RoZXIKLQkgIGZ1cnJ5IGFuaW1hbHMsIGZvciB0aGUgbmV3IGdvb20gMms0IGJhc2VkIHBsdWdpbgotCSAgKiBnc3QvZ29vbS8qOiBVcGRhdGUgdG8gdXNlIGdvb20gMms0LCB1c2VzIGxpYm9pbCB0byBkZXRlY3QKLQkgIENQVSBvcHRpbWlzYXRpb25zIChub3Qgd29ya2luZyB5ZXQpLCBtb3ZlIHRoZSBvbGQgcGx1Z2luIHRvLi4uCi0JICAqIGdzdC9nb29tMmsxLyo6IC4uLiBoZXJlLCBpbiBjYXNlIHNvbWVib2R5IGlzIHNpY2sgZW5vdWdoCi0JICBGaXhlcyAjNTE1MDczCi0KLTIwMDgtMDItMjIgMDk6NTY6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogUG9zdCB0aGUgc2VydmVyIHJlc3BvbnNlIGNvZGUgaW4gYW4gZXJyb3IgbWVzc2FnZSBpbnN0ZWFkIG9mIGEgZ2VuZXJpYyAnZXJyb3InIG1lc3NhZ2UuIEZpeGVzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpOgotCSAgUG9zdCB0aGUgc2VydmVyIHJlc3BvbnNlIGNvZGUgaW4gYW4gZXJyb3IgbWVzc2FnZSBpbnN0ZWFkIG9mIGEgZ2VuZXJpYwotCSAgJ2Vycm9yJyBtZXNzYWdlLiBGaXhlcyAjNTE3MjM3LgotCi0yMDA4LTAyLTIyIDA3OjIwOjAzICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBJbXBsZW1lbnQgemVyby1jb3B5IGFuZCBtYWtlIHRoZSBidWZmZXIgc2l6ZSBjb25maWd1cmFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBfaHR0cF9zcmNfY2FuY2VsX21lc3NhZ2UpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2ZpbmlzaGVkX2NiKSwgKGdzdF9zb3VwX2h0dHBfc3JjX2NodW5rX2ZyZWUpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2NodW5rX2FsbG9jYXRvciksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfZ290X2NodW5rX2NiKSwgKGdzdF9zb3VwX2h0dHBfc3JjX2NyZWF0ZSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfc3RhcnQpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfc2V0X3Byb3h5KToKLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaDoKLQkgIEltcGxlbWVudCB6ZXJvLWNvcHkgYW5kIG1ha2UgdGhlIGJ1ZmZlciBzaXplIGNvbmZpZ3VyYWJsZS4KLQkgIFByZWZpeCBwcm94eSBVUklzIHdpdGggImh0dHA6Ly8iIGlmIHRoZXkgZG9uJ3Qgc3RhcnQgd2l0aCBpdAotCSAgYWxyZWFkeSBhbmQgY2F0Y2ggZXJyb3JzIGVhcmxpZXIsIGZpeGVzIGhhbmdpbmcgaW4gc29tZSBzaXR1YXRpb25zLgotCSAgRml4ZXMgYnVnICM1MTQ5NDguCi0KLTIwMDgtMDItMjIgMDY6MjI6MzkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IElnbm9yZSBnY29uZmF1ZGlvc3JjIGZvciB0aGUgc3RhdGVzIHVuaXQgdGVzdCB0b28uIEl0IHdpbGwgZmFsbGJhY2sgdG8gYWxzYXNyYyBpZiB0aGUgZ2NvbmYgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBJZ25vcmUgZ2NvbmZhdWRpb3NyYyBmb3IgdGhlIHN0YXRlcyB1bml0IHRlc3QgdG9vLiBJdCB3aWxsIGZhbGxiYWNrCi0JICB0byBhbHNhc3JjIGlmIHRoZSBnY29uZiBzZXR0aW5ncyBjYW4ndCBiZSByZWFkIGFuZCBub3QgZXZlcnlib2R5IGhhcwotCSAgYWxzYS4KLQotMjAwOC0wMi0yMiAwNjowNjowNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuKjogQWx3YXlzIHJlcG9ydCB0aGUgZHVyYXRpb24gaWYgd2Uga25vdyBpdCBpbiBwdXNoIG1vZGUgYW5kIGRvbid0IHJldHVybiAwIGp1c3QgdG8gbWFrZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX3NyY19xdWVyeSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfY3JlYXRlX3NyY19wYWQpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgIEFsd2F5cyByZXBvcnQgdGhlIGR1cmF0aW9uIGlmIHdlIGtub3cgaXQgaW4gcHVzaCBtb2RlIGFuZCBkb24ndAotCSAgcmV0dXJuIDAganVzdCB0byBtYWtlIHRvdGVtIGJlbGlldmUgd2UgY2FuJ3Qgc2VlayBpbiBwdXNoIG1vZGUuCi0JICBOZXdlciB0b3RlbSB2ZXJzaW9uIHVzZSB0aGUgU0VFS0lORyBxdWVyeSB3aGljaCBwcm9wZXJseSByZXBvcnRzCi0JICBpZiB3ZSBjYW4gc2VlayBvciBub3QuCi0KLTIwMDgtMDItMjIgMDU6Mzk6MDEgKzAwMDAgIEplbnMgR3JhbnNldWVyIDxqZW5zZ3JAZ214Lm5ldD4KLQotCSAgdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL2RlbW8uYzogQzg5IGZpeCwgbW92aW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jay4gRml4ZXMgYnVnICM1MTc5MzMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKZW5zIEdyYW5zZXVlciA8amVuc2dyIGF0IGdteCBkb3QgbmV0PgotCSAgKiB0ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvZGVtby5jOiAobWFpbik6Ci0JICBDODkgZml4LCBtb3ZpbmcgdmFyaWFibGUgZGVjbGFyYXRpb25zIHRvIHRoZSBiZWdpbm5pbmcgb2YKLQkgIHRoZSBibG9jay4gRml4ZXMgYnVnICM1MTc5MzMuCi0KLTIwMDgtMDItMjEgMjM6NDc6MzcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJhY2sgdG8gZGV2ZWxvcG1lbnQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIGRldmVsb3BtZW50Li4uCi0KLT09PSByZWxlYXNlIDAuMTAuNyA9PT0KLQotMjAwOC0wMi0yMSAwMDowOTowNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdhbW1hLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JKiBwby9MSU5HVUFTOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjcgLSBSZWQgRG9vciBCbGFjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZWxlYXNlIDAuMTAuNyAtIFJlZCBEb29yIEJsYWNrCi0KLTIwMDgtMDItMjAgMjI6NTE6MDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vYmcucG86Ci0JKiBwby9jYS5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZGEucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2VzLnBvOgotCSogcG8vZXUucG86Ci0JKiBwby9maS5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9qYS5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3BsLnBvOgotCSogcG8vc2sucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSogcG8vemhfQ04ucG86Ci0JKiBwby96aF9ISy5wbzoKLQkqIHBvL3poX1RXLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDgtMDItMTkgMTA6NDc6MjAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2FscGhhL01ha2VmaWxlLmFtOiBMaW5rIGFscGhhIHBsdWdpbiB3aXRoIGxpYmdzdGJhc2UuIEZpeGVzIGJ1ZyAjNTE3Mzg2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkgIExpbmsgYWxwaGEgcGx1Z2luIHdpdGggbGliZ3N0YmFzZS4gRml4ZXMgYnVnICM1MTczODYuCi0KLTIwMDgtMDItMTggMTE6MTM6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogSW5pdCB2YWx1ZXMgdG8gLTEgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAwIHZhbHVlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2NyZWF0ZV9zdHJlYW0pOgotCSAgSW5pdCB2YWx1ZXMgdG8gLTEgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAwIHZhbHVlLgotCSAgRml4ZXMgIzUxNjUyNC4KLQotMjAwOC0wMi0xNCAxNDo1MDozMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9zcGVjdHJ1bS1leGFtcGxlLmM6IEFkZCBtaXNzaW5nIGluY2x1ZGUgdG8gZml4IGNvbXBpbGF0aW9uIHdoZW4gbGlieG1sIHVzYWdlIGlzIGRpc2FibGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL3NwZWN0cnVtLWV4YW1wbGUuYzoKLQkgIEFkZCBtaXNzaW5nIGluY2x1ZGUgdG8gZml4IGNvbXBpbGF0aW9uIHdoZW4gbGlieG1sIHVzYWdlIGlzIGRpc2FibGVkLgotCSAgRml4ZXM6ICM1MTYzNzEKLQotMjAwOC0wMi0xMiAyMzozODoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQotCSAgZml4ZXM6ICM1MTQ4ODkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6ICBXaW0gVGF5bWFucyAgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLQkgIGZpeGVzOiAjNTE0ODg5Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6Ci0JICBGaXggdmFyaW91cyBsZWFrcyBzaG93biB1cCBpbiB2YWxncmluZAotCSAgLSBmcmVlIHNwcm9wcyBhbmQgYnVmZmVyIGluIGVycm9yIGNhc2VzIGluIEgyNjQgcGF5bG9hZGVyCi0JICAtIGZpeCBsZWFrIGluIG1wNGcgZGVwYXlsb2FkZXIgd2hlbiBjb25zdHJ1Y3Rpb24gdGhlIGNhcHMKLQkgIC0gZG9uJ3QgbGVhayBjb25maWcgc3RyaW5nIGluIHRoZSBtcDRnIHBheWxvYWRlcgotCSAgLSBkb24ndCBsZWFrIGJ1ZmZlcnMgYW5kIGhlYWRlcnMgaW4gdGhlb3JhIGFuZCB2b3JiaXMgcGF5bG9hZGVycwotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgRml4IHRoZSBSVFAgZGF0YSB0ZXN0Ci0JICAtIEFjdHVhbGx5IHNlbmQgdmFsaWQgYW1yIGRhdGEgdG8gdGhlIHBheWxvYWRlciBpbnN0ZWFkIG9mIDIwCi0JICB6ZXJvLWJ5dGVzCi0JICAtIFRoZSBtcDRnIHBheWxvYWRlciBleHBlY3RzIGNvZGVjX2RhdGEgb24gdGhlIGNhcHMKLQotMjAwOC0wMi0xMiAyMTozNjo0MCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9NQU5JRkVTVDogQWRkIGxpYmdzdHBuZy5kc3AgdG8gTUFOSUZFU1QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvTUFOSUZFU1Q6Ci0JICBBZGQgbGliZ3N0cG5nLmRzcCB0byBNQU5JRkVTVC4KLQkgICogd2luMzIvdnM2L2xpYmdzdGF1ZGlvZnguZHNwOgotCSAgQWRkIG5ldyBzb3VyY2UgZmlsZXMgdG8gVlMgcHJvamVjdCBmaWxlLgotCi0yMDA4LTAyLTEyIDEzOjM0OjUyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogSW5pdGlhbGlzZSB2YXJpYWJsZXMgd2hlbiBvcGVuaW5nIHRoZSBYIGRpc3BsYXkgcmF0aGVyIHRoYW4gaW4gX3N0YXJ0KCksIGFzIHRoZSBkaXNwbGF5IGNhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIEluaXRpYWxpc2UgdmFyaWFibGVzIHdoZW4gb3BlbmluZyB0aGUgWCBkaXNwbGF5IHJhdGhlcgotCSAgdGhhbiBpbiBfc3RhcnQoKSwgYXMgdGhlIGRpc3BsYXkgY2FuIGJlIG9wZW5lZCBiZWZvcmUgdGhhdC4KLQkgIEZpeGVzOiAjNTE1OTg1Ci0KLTIwMDgtMDItMTIgMTI6MjI6NDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzogUHJvcGVybHkgY2hhaW4gdXAgZmluYWxpemUgZnVuY3Rpb25zLiBGaXhlcyBidWcgIzUxNTk4MC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKGdzdF9kZHJhd3N1cmZhY2VfY2xhc3NfaW5pdCksIChnc3RfZGRyYXdzdXJmYWNlX2ZpbmFsaXplKSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX2ZpbmFsaXplKToKLQkgIFByb3Blcmx5IGNoYWluIHVwIGZpbmFsaXplIGZ1bmN0aW9ucy4gRml4ZXMgYnVnICM1MTU5ODAuCi0KLTIwMDgtMDItMTIgMTE6Mzg6NTQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBDaGFpbiB1cCB0aGUgZmluYWxpemUgZnVuY3Rpb25zLiBGaXhlcyBidWcgIzUxNTk4NC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMl9idWZmZXJfZmluYWxpemUpLAotCSAgKGdzdF92NGwyX2J1ZmZlcl9jbGFzc19pbml0KSwgKGdzdF92NGwyX2J1ZmZlcl9wb29sX2ZpbmFsaXplKSwKLQkgIChnc3RfdjRsMl9idWZmZXJfcG9vbF9jbGFzc19pbml0KToKLQkgIENoYWluIHVwIHRoZSBmaW5hbGl6ZSBmdW5jdGlvbnMuIEZpeGVzIGJ1ZyAjNTE1OTg0LgotCi0yMDA4LTAyLTEyIDExOjE0OjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOiBDaGFpbiB1cCBpbiB0aGUgZmluYWxpemUgZnVuY3Rpb24gZm9yIG91ciBjdXN0b20gYnVmZmVyIHN1Yi1jbGFzcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzoKLQkgIENoYWluIHVwIGluIHRoZSBmaW5hbGl6ZSBmdW5jdGlvbiBmb3Igb3VyIGN1c3RvbQotCSAgYnVmZmVyIHN1Yi1jbGFzcy4KLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCSAgRml4ZXM6ICM1MTU3MDYKLQotMjAwOC0wMi0xMiAxMToxMjo0MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZGVidWcvZWZlbmNlLmM6IFByb3Blcmx5IGNoYWluIHVwIGZpbmFsaXplIG1ldGhvZC4gRml4ZXMgYnVnICM1MTU5NzkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL2VmZW5jZS5jOiAoZ3N0X2ZlbmNlZF9idWZmZXJfZmluYWxpemUpLAotCSAgKGdzdF9mZW5jZWRfYnVmZmVyX2NsYXNzX2luaXQpOgotCSAgUHJvcGVybHkgY2hhaW4gdXAgZmluYWxpemUgbWV0aG9kLiBGaXhlcyBidWcgIzUxNTk3OS4KLQotMjAwOC0wMi0xMiAxMTowOTowOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IEZyZWUgYWxsb2NhdGVkIERhbWFnZSBtZW1vcnkgYmVmb3JlIGNsb3Npbmcgb3VyIGNvbm5lY3Rpb24gdG8gdGhlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIEZyZWUgYWxsb2NhdGVkIERhbWFnZSBtZW1vcnkgYmVmb3JlIGNsb3Npbmcgb3VyIGNvbm5lY3Rpb24gdG8gdGhlCi0JICBYIHNlcnZlci4gRml4ZXM6ICM1MTU3MDYKLQotMjAwOC0wMi0xMiAwNToyMTo0NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOiBJbmNsdWRlIGdsaWIvZ3ByaW50Zi5oIGZvciBnX3Zhc3ByaW50ZigpLiBGaXhlcyBidWcgIzUxNTU2NC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jOgotCSAgSW5jbHVkZSBnbGliL2dwcmludGYuaCBmb3IgZ192YXNwcmludGYoKS4gRml4ZXMgYnVnICM1MTU1NjQuCi0KLTIwMDgtMDItMTIgMDU6MTQ6MTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgQWRkIGEgZmV3IGxpYmpwZWcgc3VwcHJlc3Npb25zIGFuZCBpbml0aWFsaXplIGEgdmFyaWFibGUgdG8gbWFrZSBzbW9rZWVuYyB2YWxncmluZCBjbGVhbi4gRml4ZXMgYnVnICM1MTU3MDEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzogKGdzdF9zbW9rZWVuY19jaGFpbik6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9nc3QtcGx1Z2lucy1nb29kLnN1cHA6Ci0JICBBZGQgYSBmZXcgbGlianBlZyBzdXBwcmVzc2lvbnMgYW5kIGluaXRpYWxpemUgYSB2YXJpYWJsZSB0bwotCSAgbWFrZSBzbW9rZWVuYyB2YWxncmluZCBjbGVhbi4gRml4ZXMgYnVnICM1MTU3MDEuCi0KLTIwMDgtMDItMTEgMjE6MjQ6MzAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFJldmVydCBwYXRjaCB3aGljaCBzZW5kcyB0aW1lc3RhbXBzIG9ubHkgb24ga2V5ZnJhbWVzLCBhcyBpdCBicmVha3MgcGxheWJhY2sgd2l0aCBjdXJyZW50IGdzdC0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBSZXZlcnQgcGF0Y2ggd2hpY2ggc2VuZHMgdGltZXN0YW1wcyBvbmx5IG9uIGtleWZyYW1lcywgYXMgaXQKLQkgIGJyZWFrcyBwbGF5YmFjayB3aXRoIGN1cnJlbnQgZ3N0LWZmbXBlZy4KLQkgIEZpeGVzOiAjNTE1NTYyCi0KLTIwMDgtMDItMTEgMTQ6MDE6NTIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgQ2xvc2Ugc29tZSBtZW1vcnkgbGVha3Mgc3BvdHRlZCBieSB0aGUgdW5pdCB0ZXN0LiBGaXhlcyBidWcgIzUxNTY5Ny4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOiAoZ3N0X211bHRpX2ZpbGVfc3JjX2NyZWF0ZSk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQ2xvc2Ugc29tZSBtZW1vcnkgbGVha3Mgc3BvdHRlZCBieSB0aGUgdW5pdCB0ZXN0LiBGaXhlcyBidWcgIzUxNTY5Ny4KLQotMjAwOC0wMi0xMSAxMzo0ODowMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZ2NvbmYvZ2NvbmYuYzogVXNlIGFuZCB1bnNldCB0aGUgR0Vycm9yIHdoZW4gcGlwZWxpbmUgY3JlYXRpb24gZmFpbHMgaW5zdGVhZCBvZiBzaW1wbHkgbGVha2luZyBpdC4gRml4ZXMgYnVnICM1MTUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2NvbmYvZ2NvbmYuYzogKGdzdF9nY29uZl9yZW5kZXJfYmluX3dpdGhfZGVmYXVsdCk6Ci0JICBVc2UgYW5kIHVuc2V0IHRoZSBHRXJyb3Igd2hlbiBwaXBlbGluZSBjcmVhdGlvbiBmYWlscyBpbnN0ZWFkIG9mCi0JICBzaW1wbHkgbGVha2luZyBpdC4gRml4ZXMgYnVnICM1MTU3MDQuCi0KLTIwMDgtMDItMTAgMTA6NDY6MTMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1ZGlvZngvOiBGaXggbG9uZyBkZXNjcmlwdGlvbiBvZiBhdWRpb2Z4IGVsZW1lbnRzLiBGaXhlcyBidWcgIzUxNTQ1Ny4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGViYmFuZC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkgIEZpeCBsb25nIGRlc2NyaXB0aW9uIG9mIGF1ZGlvZnggZWxlbWVudHMuIEZpeGVzIGJ1ZyAjNTE1NDU3LgotCi0yMDA4LTAyLTA5IDAxOjQ1OjMyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgQWRkIGEgc2ltcGxlIGV4YW1wbGUgYXBwbGljYXRpb24gZm9yIHRoZSBzcGVjdHJ1bSBlbGVtZW50LCBpbmNsdWRlIGl0IGluIHRoZSBkb2NzLCBhbmQgZml4IHNvbWUgZG9jdW1lbnRhdGlvbiBhbWJpZ3VpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL3NwZWN0cnVtLWV4YW1wbGUuYzoKLQkgIEFkZCBhIHNpbXBsZSBleGFtcGxlIGFwcGxpY2F0aW9uIGZvciB0aGUgc3BlY3RydW0gZWxlbWVudCwgaW5jbHVkZSBpdAotCSAgaW4gdGhlIGRvY3MsIGFuZCBmaXggc29tZSBkb2N1bWVudGF0aW9uIGFtYmlndWl0aWVzLgotCSAgRml4ZXM6ICMzNDgwODUKLQotMjAwOC0wMi0wOSAwMDoxNToyNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC86IEZpeCBpbmNsdWRlcyBvcmRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbToKLQkgIEZpeCBpbmNsdWRlcyBvcmRlcgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIEV4Y2x1ZGUgdjRsMnNyYyBmcm9tIHRoZSBzdGF0ZXMgdGVzdCAtIGl0IHRha2VzIHRvbyBsb25nIHRvIHN0YXJ0LgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGVjdHJ1bS5jOgotCSAgTWFrZSB0aGUgdGVzdCBydW4gcHJvcGVybHkgd2l0aCBDS19GT1JLPW5vCi0KLTIwMDgtMDItMDggMTU6MzI6MzYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgYWRkIDMgbmV3IHBsdWdpbnMgdG8gc3BlYyBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCAzIG5ldyBwbHVnaW5zIHRvIHNwZWMgZmlsZQotCi0yMDA4LTAyLTA4IDE1OjI3OjUxICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSAgYWRkIG1pc3NpbmcgaGVhZGVyIGZpbGVzIGZvciBkaXN0aW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBtaXNzaW5nIGhlYWRlciBmaWxlcyBmb3IgZGlzdGluZwotCi0yMDA4LTAyLTA4IDE1OjIwOjMxICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IEZsYWcga2V5ZnJhbWUgYW5kIGRlbHRhIHVuaXRzIGNvcnJlY3RseSB3aGVuIGRlYWxpZ24gd2l0aCBhCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDgtMDItMDggIEp1bGllbiBNb3V0dGUgIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKTogRmxhZwotCSAga2V5ZnJhbWUgYW5kIGRlbHRhIHVuaXRzIGNvcnJlY3RseSB3aGVuIGRlYWxpZ24gd2l0aCBhCi0JICBCbG9ja0dyb3VwLgotCSAgRml4ZXM6ICM1MTQzOTcKLQotMjAwOC0wMi0wOCAxMDoxOTozMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6IFNwZWxsIHRoZSBuZXcgdGVzdHMgY29ycmVjdGx5IGluIC5jdnNpZ25vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgU3BlbGwgdGhlIG5ldyB0ZXN0cyBjb3JyZWN0bHkgaW4gLmN2c2lnbm9yZQotCi0yMDA4LTAyLTA4IDEwOjA5OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOiBOZWVkIHRvIHVzZSBnc2l6ZSBoZXJlIGZvciB0aGUgc2l6ZSwgZml4ZXMgY29tcGlsZXIgd2FybmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOiAoZ3N0X211bHRpX2ZpbGVfc3JjX2NyZWF0ZSk6Ci0JICBOZWVkIHRvIHVzZSBnc2l6ZSBoZXJlIGZvciB0aGUgc2l6ZSwgZml4ZXMgY29tcGlsZXIgd2FybmluZy4KLQkgICogdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vLmN2c2lnbm9yZToKLQkgICogdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JICBBZGQgbWlzc2luZyBmaWxlcyB0byBmaXggdGhlIGJ1aWxkLgotCi0yMDA4LTAyLTA4IDA0OjI1OjMyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgTW92ZSBtdWx0aWZpbGUgcGx1Z2luIGZyb20gLWJhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlmaWxlLnhtbDoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICBNb3ZlIG11bHRpZmlsZSBwbHVnaW4gZnJvbSAtYmFkLgotCSAgRml4ZXM6ICM0OTAyODMKLQotMjAwOC0wMi0wOCAwMzo0NDoxMiArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9tdWx0aWZpbGUvOiBVc2UgZ19maWxlX1tzZ11ldF9jb250ZW50cygpIGluc3RlYWQgb2YgdXNpbmcgc3RkaW8gZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSAgVXNlIGdfZmlsZV9bc2ddZXRfY29udGVudHMoKSBpbnN0ZWFkIG9mIHVzaW5nIHN0ZGlvIGZ1bmN0aW9ucy4KLQkgIFNob3VsZCBiZSBsZXNzIGVycm9yIHByb25lLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYzoKLQkgIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdXNpbmcgc3RhbmRhcmQgZnVuY3Rpb25zIGluc3RlYWQgb2YKLQkgIGNyZWF0aW5nIGEgZGlyZWN0b3J5IGluIHRoZSBjdXJyZW50IGRpci4KLQotMjAwOC0wMi0wOCAwMzoyODo1NyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIE1vdmUgc3BlY3RydW0gcGx1Z2luIGZyb20gLWJhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSAgKiBnc3Qvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgIE1vdmUgc3BlY3RydW0gcGx1Z2luIGZyb20gLWJhZC4KLQkgIE1vdmUgZXhhbXBsZXMgaW50byB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS4KLQotMjAwOC0wMi0wOCAwMjo1NjoxMiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIE1lbnRpb24gYnVnIDQxNTYyNyBmaXhlZCB3aXRoIHByZXZpb3VzIGNvbW1pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBNZW50aW9uIGJ1ZyA0MTU2MjcgZml4ZWQgd2l0aCBwcmV2aW91cyBjb21taXQKLQotMjAwOC0wMi0wOCAwMjo0OToyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIE1vdmUgdGhlIGVxdWFsaXplciBwbHVnaW4gYWNyb3NzIGZyb20gLWJhZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWw6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbToKLQkgIE1vdmUgdGhlIGVxdWFsaXplciBwbHVnaW4gYWNyb3NzIGZyb20gLWJhZAotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgQWRkIGVxdWFsaXplciwgYXVkaW9zaW5jd2JhbmQgYW5kIGF1ZGlvc2luY3dsaW1pdAotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9lcXVhbGl6ZXIuYzoKLQkgIEZpeCBjb21waWxlciB3YXJuaW5ncwotCi0yMDA4LTAyLTA4IDAyOjQ4OjU0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLio6IFJlbW92ZSBlcXVhbGl6ZXIgcGx1Z2luIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICBSZW1vdmUgZXF1YWxpemVyIHBsdWdpbiBkb2NzCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgQWRkIEdTVF9PUFRJT05fQ0ZMQUdTLCB0byBnZXQgLVdlcnJvciAtV2FsbCBpbnRvIHRoZSB0ZXN0cyBhcyBmb3IKLQkgIG90aGVyIG1vZHVsZXMuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnbGltaXRlci5jOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGZyb20gLVdhbGwgLVdlcnJvcgotCi0yMDA4LTAyLTA4IDAxOjA3OjAyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBPbmx5IGJ1aWxkIHdpdGggRElTQUJMRV9ERVBSRUNBVEVEIGR1cmluZyB0aGUgQ1ZTIGN5Y2xlLiBQcmUtcmVsZWFzZXMgYXJlIHRyZWF0ZWQgbGlrZSByZWxlYXNlcyBhbmQgYnVpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgT25seSBidWlsZCB3aXRoIERJU0FCTEVfREVQUkVDQVRFRCBkdXJpbmcgdGhlIENWUyBjeWNsZS4gUHJlLXJlbGVhc2VzCi0JICBhcmUgdHJlYXRlZCBsaWtlIHJlbGVhc2VzIGFuZCBidWlsZCB3aXRob3V0IGl0LgotCi0yMDA4LTAyLTA3IDIxOjU3OjU0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgTW92ZSB0aGUgbHB3c2luYyBhbmQgYnB3c2luYyBlbGVtZW50cyBmcm9tIGdzdC1wbHVnaW5zLWJhZCBpbnRvIHRoZSBhdWRpb2Z4IHBsdWdpbiwgYW5kIHJlbmFtZSB0byBhdWRpb3dzaW5jbGltaXQgYW5kLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5oOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYzoKLQkgIE1vdmUgdGhlIGxwd3NpbmMgYW5kIGJwd3NpbmMgZWxlbWVudHMgZnJvbSBnc3QtcGx1Z2lucy1iYWQgaW50bwotCSAgdGhlIGF1ZGlvZnggcGx1Z2luLCBhbmQgcmVuYW1lIHRvIGF1ZGlvd3NpbmNsaW1pdCBhbmQgYXVkaW93c2luY2JhbmQKLQkgIHJlc3BlY3RpdmVseS4KLQkgIEZpeGVzOiAjNDY3NjY2Ci0KLTIwMDgtMDItMDcgMjE6MTc6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCBpZiB3ZSBnZXQgYSBidWZmZXIgd2l0aG91dCBjYXBzLCBhbmQgYWRkIGEgc29tZXdoYXQgdXNlZnVsIGRlYnVnIG1lc3NhZ2UuIFBsdXMgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzogKGdzdF9pY3lkZW11eF9jaGFpbik6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ljeWRlbXV4LmM6Ci0JICBSZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQgaWYgd2UgZ2V0IGEgYnVmZmVyIHdpdGhvdXQKLQkgIGNhcHMsIGFuZCBhZGQgYSBzb21ld2hhdCB1c2VmdWwgZGVidWcgbWVzc2FnZS4gUGx1cyB0ZXN0LgotCi0yMDA4LTAyLTA3IDE5OjEzOjU2ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogSW5jbHVkZSB1bmlzdGQuaCBvbmx5IGlmIEhBVkVfVU5JU1REX0ggaXMgZGVmaW5lZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIEluY2x1ZGUgdW5pc3RkLmggb25seSBpZiBIQVZFX1VOSVNURF9IIGlzIGRlZmluZWQKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmg6Ci0JICBEZWZpbmUgc29ja2xlbl90IGFzIGl0IHNlZW1zIGl0J3Mgbm90IGRlZmluZWQgaW4gZGVmYXVsdAotCSAgVmlzdWFsIFN0dWRpbyBoZWFkZXJzLgotCSAgKiB3aW4zMi92czYvbGliZ3N0YWxwaGEuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0YXBldGFnLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGF2aS5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RydHAuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0cnRzcC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb21peGVyLmRzcDoKLQkgIFVwZGF0ZSBwcm9qZWN0IGZpbGUgZGVwZW5kZW5jaWVzIGFuZCBhZGQgbmV3IHNvdXJjZSBmaWxlcwotCi0yMDA4LTAyLTA3IDE2OjM4OjU1ICswMDAwICBCamFybmUgUm9zZW5ncmVuIDxiamFybmVAYXhpcy5jb20+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IERvbid0IGxlYWsgYnVmZmVycyB3aGVuIHdlIGRvbid0IHB1c2ggdGhlbSBkb3duc3RyZWFtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQmphcm5lIFJvc2VuZ3JlbiA8Ymphcm5lIGF0IGF4aXMgZG90IGNvbT4KLQkgICogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzogKGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfcHVzaCk6Ci0JICBEb24ndCBsZWFrIGJ1ZmZlcnMgd2hlbiB3ZSBkb24ndCBwdXNoIHRoZW0gZG93bnN0cmVhbS4KLQkgIEZpeGVzIGJ1ZyAjNTE0OTY1LgotCi0yMDA4LTAyLTA3IDEzOjQ4OjIwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOiBBZGQgYSBmaXhtZSBjb21tZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgQWRkIGEgZml4bWUgY29tbWVudC4KLQkgICogZ3N0L3NlbGVjdG9yL2dzdG91dHB1dHNlbGVjdG9yLmM6Ci0JICBGaXggc2FtZSBsZWFrIGFzIGluIGlucHV0LXNlbGVjdG9yLgotCSAgKiB0ZXN0cy9pY2xlcy9vdXRwdXQtc2VsZWN0b3ItdGVzdC5jOgotCSAgSW1wcm92ZSB0aGUgdGVzdC4KLQotMjAwOC0wMi0wNyAxMzo0MToxMSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogSW1wcm92ZSB0aGUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIEltcHJvdmUgdGhlIGRvY3MuCi0KLTIwMDgtMDItMDcgMTA6MTc6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCByZXF1aXJlbWVudHMgdG8gKGdvb2QpIHJlbGVhc2VkIHZlcnNpb25zIHRvIGF2b2lkIGNvbmZ1c2lvbiBhbmQgbWFrZSBpbXBsaWNpdCBjb3JlIHJlcXVpcmVtZW50IGV4cC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgcmVxdWlyZW1lbnRzIHRvIChnb29kKSByZWxlYXNlZCB2ZXJzaW9ucyB0byBhdm9pZAotCSAgY29uZnVzaW9uIGFuZCBtYWtlIGltcGxpY2l0IGNvcmUgcmVxdWlyZW1lbnQgZXhwbGljaXQuCi0KLTIwMDgtMDItMDcgMTA6MDQ6MDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6IEZpeCB0eXBvIGluIHRoZSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOgotCSAgRml4IHR5cG8gaW4gdGhlIGxvbmcgZGVzY3JpcHRpb24gb2YgdGhlIGVsZW1lbnQuCi0KLTIwMDgtMDItMDYgMjM6NDQ6NDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBSZW5hbWUgYXVkaW9jaGVieXNoZXZmcmVxYmFuZCAtPiBhdWRpb2NoZWJiYW5kIGFuZCBhdWRpb2NoZWJ5c2hldmZyZXFsaW1pdCAtPiBhdWRpb2NoZWJsaW1pdCBhbmQgZG8gdGhlIHJlcXVpc2l0ZSBDVlMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICAqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVieXNoZXZmcmVxYmFuZC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJ5c2hldmZyZXFiYW5kLmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0LmM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0Lmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvZnguYzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVieXNoZXZmcmVxYmFuZC5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJ5c2hldmZyZXFsaW1pdC5jOgotCSAgUmVuYW1lIGF1ZGlvY2hlYnlzaGV2ZnJlcWJhbmQgLT4gYXVkaW9jaGViYmFuZCBhbmQKLQkgIGF1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0IC0+IGF1ZGlvY2hlYmxpbWl0IGFuZCBkbyB0aGUgcmVxdWlzaXRlIENWUwotCSAgc3VyZ2VyeS4KLQkgIENsb3NlczogIzQ5MTgxMQotCi0yMDA4LTAyLTA2IDExOjA3OjQ3ICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBGaXggbWVtb3J5IGxlYWsgYW5kIGltcHJvdmUgZGVidWdnaW5nIGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV291dGVyIENsb2V0ZW5zIDx3b3V0ZXIgYXQgbWluZCBkb3QgYmU+Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IChnc3Rfc291cF9odHRwX3NyY19nb3RfY2h1bmtfY2IpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2NyZWF0ZSk6Ci0JICBGaXggbWVtb3J5IGxlYWsgYW5kIGltcHJvdmUgZGVidWdnaW5nIGEgYml0LgotCi0yMDA4LTAyLTA1IDE3OjU5OjI0ICswMDAwICBvcmphbiA8b3JqYW5mQGF4aXMuY29tPgotCi0JICBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiBGaXggY2FwcyBtZW1vcnkgbGVhay4gRml4ZXMgIzUxNDU3My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IG9yamFuIDxvcmphbmYgYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiAoZ3N0X211bHRpcGFydF9tdXhfY29sbGVjdGVkKToKLQkgIEZpeCBjYXBzIG1lbW9yeSBsZWFrLiBGaXhlcyAjNTE0NTczLgotCi0yMDA4LTAyLTA0IDEyOjA3OjE0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IElmIHRoZXJlJ3Mgbm8gZW50cmllcyBpbiB0aGUgc3ViaW5kZXgsIGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBzdHVwaWQsIGp1c3QgcmV0dXJuLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXgpOgotCSAgSWYgdGhlcmUncyBubyBlbnRyaWVzIGluIHRoZSBzdWJpbmRleCwgZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIHN0dXBpZCwKLQkgIGp1c3QgcmV0dXJuLgotCi0yMDA4LTAyLTAyIDE5OjQ3OjUwICswMDAwICBKb2huIE1pbGxpa2luIDxqbWlsbGlraW5AZ21haWwuY29tPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IEZpeCBleHRyYWN0aW9uIG9mIHBpY3R1cmUgYmxvY2tzIHdpdGggbmV3ZXIgbGliZmxhYyB2ZXJzaW9ucyBhZ2FpbjoKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEpvaG4gTWlsbGlraW4gPGptaWxsaWtpbiBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfc2Nhbl9mb3JfbGFzdF9ibG9jayksCi0JICAoZ3N0X2ZsYWNfZXh0cmFjdF9waWN0dXJlX2J1ZmZlciksIChnc3RfZmxhY19kZWNfbWV0YWRhdGFfY2FsbGJhY2spOgotCSAgRml4IGV4dHJhY3Rpb24gb2YgcGljdHVyZSBibG9ja3Mgd2l0aCBuZXdlciBsaWJmbGFjIHZlcnNpb25zIGFnYWluOgotCSAgRkxBQ19fTUVUQURBVEFfVFlQRV9QSUNUVVJFIGlzIGFuIGVudW0sIG5vdCBhIGRlZmluZSAoIzUxMzYyOCkuCi0KLTIwMDgtMDItMDIgMTg6MDY6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBBZGQgcnRwLXBheWxvYWRpbmcgdGVzdCB0byBWQUxHUklORF9UT19GSVguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBBZGQgcnRwLXBheWxvYWRpbmcgdGVzdCB0byBWQUxHUklORF9UT19GSVguCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmM6Ci0JICBBZGQgc2VtaWNvbG9ucyBhZnRlciBHU1RfVEVTVF9FTkQgc28gZ3N0LWluZGVudCBnZXRzIHRoZQotCSAgZm9ybWF0dGluZyByaWdodDsgbWFrZSB0ZXN0IGxlc3MgdmVyYm9zZSBpbiBnZW5lcmFsLCBidXQKLQkgIG1vcmUgdmVyYm9zZSBpbiB0aGUgZXJyb3IgY2FzZSAod2hpY2ggc2hvdWxkIHByb2JhYmx5Ci0JICBtYWtlIHRoZSB0ZXN0IGZhaWwgYW55d2F5KS4KLQotMjAwOC0wMi0wMSAxODoyOToyMSArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIGF2aXN1YnRpdGxlIGFuZCBjaGFuZ2UgY2xhc3MgdG8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIGF2aXN1YnRpdGxlIGFuZCBjaGFuZ2UgY2xhc3MgdG8KLQkgIENvZGVjL1BhcnNlci9TdWJ0aXRsZQotCi0yMDA4LTAxLTMxIDE2OjEyOjI4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiBUcmVhdCBFTk9UVFkgKGRyaXZlciBkb2VzIG5vdCBpbXBsZW1lbnQgaW9jdGwpIHRoZSBzYW1lIGFzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZmlsbF9saXN0cyk6Ci0JICBUcmVhdCBFTk9UVFkgKGRyaXZlciBkb2VzIG5vdCBpbXBsZW1lbnQgaW9jdGwpIHRoZSBzYW1lIGFzCi0JICBFSU5WQUwgc2luY2UgaXQgaW1wbGllcyB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIHN0YW5kYXJkcy4KLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfcHJvYmVfY2Fwc19mb3JfZm9ybWF0KSwKLQkgIChnc3RfdjRsMnNyY19nZXRfbmVhcmVzdF9zaXplKToKLQkgIFJlcGxhY2UgZ3N0X3Y0bDJzcmNfZ2V0X3NpemVfbGltaXRzIHdpdGggMiBjYWxscyB0byBuZXcgZnVuY3Rpb24KLQkgIGdzdF92NGwyc3JjX2dldF9uZWFyZXN0X3NpemUsIGFuZCBnZXQgaXQgdG8gdXNlIFZJRElPQ19TX0ZNVCB0bwotCSAgcHJvYmUgaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IFZJRElPQ19UUllfRk1UIGZvciB3aGF0ZXZlcgotCSAgcmVhc29uLCBhbmQgaWYgd2UgYXJlbid0IHlldCBhY3RpdmVseSBjYXB0dXJpbmcuCi0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIFJlbW92ZSByZXBsYWNlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KLQotMjAwOC0wMS0zMSAxNjowMzo0OCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCBwbHVnaW5zLWJhc2UgcmVxdWlyZW1lbnQgdG8gMC4xMC4xNiBmb3IgdGhlIGdzdF92aWRlb19mb3JtYXRfKgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgcGx1Z2lucy1iYXNlIHJlcXVpcmVtZW50IHRvIDAuMTAuMTYgZm9yIHRoZSBnc3RfdmlkZW9fZm9ybWF0XyoKLQkgIEFQSS4KLQotMjAwOC0wMS0zMSAwOTo1MDozMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBBZGQgY2hhbmdlcyB0byBnc3Rzb3VwaHR0cHNyYy5jIHRoYXQgd2VyZSBtaXNzaW5nIGZyb20gbGFzdCBjb21taXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogKF9kb19pbml0KSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19iYXNlX2luaXQpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfaW5pdCksIChnc3Rfc291cF9odHRwX3NyY19kaXNwb3NlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc291cF9odHRwX3NyY191bmljb2RpZnkpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfY2FuY2VsX21lc3NhZ2UpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3F1ZXVlX21lc3NhZ2UpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2FkZF9yYW5nZV9oZWFkZXIpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19zZXNzaW9uX3BhdXNlX21lc3NhZ2UpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3Nlc3Npb25fY2xvc2UpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2dvdF9oZWFkZXJzX2NiKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19nb3RfYm9keV9jYiksIChnc3Rfc291cF9odHRwX3NyY19maW5pc2hlZF9jYiksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfZ290X2NodW5rX2NiKSwgKGdzdF9zb3VwX2h0dHBfc3JjX3Jlc3BvbnNlX2NiKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19wYXJzZV9zdGF0dXMpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfY3JlYXRlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19zdGFydCksIChnc3Rfc291cF9odHRwX3NyY19zdG9wKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY191bmxvY2spLCAoZ3N0X3NvdXBfaHR0cF9zcmNfdW5sb2NrX3N0b3ApLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2dldF9zaXplKSwgKGdzdF9zb3VwX2h0dHBfc3JjX2lzX3NlZWthYmxlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19kb19zZWVrKSwgKGdzdF9zb3VwX2h0dHBfc3JjX3NldF9sb2NhdGlvbiksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfc2V0X3Byb3h5KSwgKGdzdF9zb3VwX2h0dHBfc3JjX3VyaV9nZXRfdHlwZSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX2dldF9wcm90b2NvbHMpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3VyaV9nZXRfdXJpKSwgKGdzdF9zb3VwX2h0dHBfc3JjX3VyaV9zZXRfdXJpKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY191cmlfaGFuZGxlcl9pbml0KSwgKHBsdWdpbl9pbml0KToKLQkgIEFkZCBjaGFuZ2VzIHRvIGdzdHNvdXBodHRwc3JjLmMgdGhhdCB3ZXJlIG1pc3NpbmcgZnJvbSBsYXN0IGNvbW1pdC4KLQotMjAwOC0wMS0zMSAwODo1NzoxNiArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgTWFrZSBjb2Rpbmcgc3R5bGUgbW9yZSBjb25zaXN0ZW50LCBpbmNsdWRpbmcgY2xhc3MgcmVuYW1pbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfYmFzZV9pbml0KSwgKGdzdF9zb3VwX2h0dHBfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2luaXQpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfZGlzcG9zZSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9zb3VwX2h0dHBfc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfdW5pY29kaWZ5KSwgKGdzdF9zb3VwX2h0dHBfc3JjX2NhbmNlbF9tZXNzYWdlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19xdWV1ZV9tZXNzYWdlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19hZGRfcmFuZ2VfaGVhZGVyKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19zZXNzaW9uX3VucGF1c2VfbWVzc2FnZSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19zZXNzaW9uX2Nsb3NlKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19nb3RfaGVhZGVyc19jYiksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfZ290X2JvZHlfY2IpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfZmluaXNoZWRfY2IpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX2dvdF9jaHVua19jYiksIChnc3Rfc291cF9odHRwX3NyY19yZXNwb25zZV9jYiksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfcGFyc2Vfc3RhdHVzKSwgKGdzdF9zb3VwX2h0dHBfc3JjX2NyZWF0ZSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfc3RhcnQpLCAoZ3N0X3NvdXBfaHR0cF9zcmNfc3RvcCksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfdW5sb2NrKSwgKGdzdF9zb3VwX2h0dHBfc3JjX3VubG9ja19zdG9wKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY19nZXRfc2l6ZSksIChnc3Rfc291cF9odHRwX3NyY19pc19zZWVrYWJsZSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfZG9fc2VlayksIChnc3Rfc291cF9odHRwX3NyY19zZXRfbG9jYXRpb24pLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm94eSksIChnc3Rfc291cF9odHRwX3NyY191cmlfZ2V0X3R5cGUpLAotCSAgKGdzdF9zb3VwX2h0dHBfc3JjX3VyaV9nZXRfcHJvdG9jb2xzKSwKLQkgIChnc3Rfc291cF9odHRwX3NyY191cmlfZ2V0X3VyaSksIChnc3Rfc291cF9odHRwX3NyY191cmlfc2V0X3VyaSksCi0JICAoZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX2hhbmRsZXJfaW5pdCksIChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBNYWtlIGNvZGluZyBzdHlsZSBtb3JlIGNvbnNpc3RlbnQsIGluY2x1ZGluZyBjbGFzcyByZW5hbWluZy4KLQotMjAwOC0wMS0zMSAwMDowMzoyNiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRml4IHR5cG8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4IHR5cG8uCi0KLTIwMDgtMDEtMzEgMDA6MDA6MjMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYWxwaGEvOiBSZS13cml0ZSB0aGUgJ2FscGhhJyBwbHVnaW4gdG8gYmUgQmFzZVRyYW5zZm9ybSBiYXNlZCwgc2ltcGxpZnlpbmcgc29tZSBzdHVmZiwgYW5kIG1ha2luZyBidWZmZXItYWxsb2MgYW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYWxwaGEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgUmUtd3JpdGUgdGhlICdhbHBoYScgcGx1Z2luIHRvIGJlIEJhc2VUcmFuc2Zvcm0gYmFzZWQsIHNpbXBsaWZ5aW5nCi0JICBzb21lIHN0dWZmLCBhbmQgbWFraW5nIGJ1ZmZlci1hbGxvYyBhbmQgcmVzaXppbmcgd29yayBhdXRvbWF0aWNhbGx5LgotCSAgTm8gbG9uZ2VyIGNyYXNoZXMgb24gb2RkIGZyYW1lIHdpZHRocyBhbmQgaGVpZ2h0cywgYWx0aG91Z2ggdGhlcmUKLQkgIHNlZW1zIHRvIGJlIGEgZGlzYWdyZWVtZW50IHdpdGggZmZtcGVnY29sb3JzcGFjZSBhYm91dCB3aGF0IHNpemUKLQkgIGFuIEFZVVYgZnJhbWUgd2l0aCBvZGQgaGVpZ2h0IHNob3VsZCBiZS4KLQotMjAwOC0wMS0zMCAxNTo0MDozNiArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogVXBkYXRlIGRvY3VtZW50YXRpb24gYSBiaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoKLQkgIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGEgYml0LgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxzYXNwZGlmLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2Yi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1maWx0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2xpbWFnZXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXBlZ3ZpZGVvcGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJhd3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2RsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdW5kdG91Y2gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGNkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXhyZXNhbXBsZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zd2l0Y2gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgIFJlZ2VuZXJhdGUgZXZlcnl0aGluZyBmb3IgdGhlIGRvY3VtZW50YXRpb24gY2hhbmdlcyB3ZSBoYWQuCi0KLTIwMDgtMDEtMzAgMTM6Mjk6MTUgKzAwMDAgIFdvdXRlciBDbG9ldGVucyA8d291dGVyQG1pbmQuYmU+Ci0KLQkgIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IExldCB0aGUgcHJveHkgcHJvcGVydHkgZGVmYXVsdCB0byB0aGUgY29udGVudCBvZiB0aGUgJGh0dHBfcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogKGdzdF9zb3VwaHR0cF9zcmNfaW5pdCk6Ci0JICBMZXQgdGhlIHByb3h5IHByb3BlcnR5IGRlZmF1bHQgdG8gdGhlIGNvbnRlbnQgb2YgdGhlICRodHRwX3Byb3h5Ci0JICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQotMjAwOC0wMS0zMCAxMzowODo0NSArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgbWlzc2luZyBmaWxlcyBmb3IgdGhlIHVuaXQgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdvdXRlciBDbG9ldGVucyA8d291dGVyIGF0IG1pbmQgZG90IGJlPgotCSAgKiB0ZXN0cy9jaGVjay90ZXN0LWNlcnQucGVtOgotCSAgKiB0ZXN0cy9jaGVjay90ZXN0LWtleS5wZW06Ci0JICBBZGQgbWlzc2luZyBmaWxlcyBmb3IgdGhlIHVuaXQgdGVzdC4KLQotMjAwOC0wMS0zMCAxMzowNjowMSArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgZG9jcy9wbHVnaW5zLzogQWRkIHNvdXBodHRwc3JjIHRvIHRoZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV291dGVyIENsb2V0ZW5zIDx3b3V0ZXIgYXQgbWluZCBkb3QgYmU+Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBzb3VwaHR0cHNyYyB0byB0aGUgZG9jcy4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBodHRwX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX2luaXQpLCAoZ3N0X3NvdXBodHRwX3NyY19kaXNwb3NlKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3NldF9wcm9wZXJ0eSksIChnc3Rfc291cGh0dHBfc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19jYW5jZWxfbWVzc2FnZSksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19xdWV1ZV9tZXNzYWdlKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX2FkZF9yYW5nZV9oZWFkZXIpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3Nlc3Npb25fY2xvc2UpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfZ290X2hlYWRlcnNfY2IpLCAoZ3N0X3NvdXBodHRwX3NyY19nb3RfYm9keV9jYiksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19maW5pc2hlZF9jYiksIChnc3Rfc291cGh0dHBfc3JjX2dvdF9jaHVua19jYiksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19yZXNwb25zZV9jYiksIChnc3Rfc291cGh0dHBfc3JjX3BhcnNlX3N0YXR1cyksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19jcmVhdGUpLCAoZ3N0X3NvdXBodHRwX3NyY19zdGFydCksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19zdG9wKSwgKGdzdF9zb3VwaHR0cF9zcmNfdW5sb2NrKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3VubG9ja19zdG9wKSwgKGdzdF9zb3VwaHR0cF9zcmNfZ2V0X3NpemUpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfaXNfc2Vla2FibGUpLCAoZ3N0X3NvdXBodHRwX3NyY19kb19zZWVrKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3NldF9sb2NhdGlvbiksIChnc3Rfc291cGh0dHBfc3JjX3NldF9wcm94eSksCi0JICAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgQWRkIHN1cHBvcnQgZm9yIGxpYnNvdXAyLjQgYW5kIHJlcXVpcmUgaXQuIEFsc28gaW1wbGVtZW50IHJlZGlyZWN0aW9uCi0JICBhbmQgbWFudWFsIHByb3h5IHNwZWNpZmljYXRpb24uIEZpeGVzIGJ1ZyAjNTEwNzA4LgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc291cGh0dHBzcmMuYzoKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHNvdXBodHRwc3JjLgotCi0yMDA4LTAxLTI5IDE4OjQzOjMyICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdlbmMuKjogUHJlYWxsb2NhdGUgdGhlIG91dHB1dCBidWZmZXIgc28gdGhhdCBnX21lbWR1cCgpIGFuZCBnc3RfYnVmZmVyX21lcmdlKCkgYXJlbid0IG5lZWRlZCBhbnltb3JlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRybyBhdCBubnZhIGRvdCBvcmc+Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6ICh1c2VyX3dyaXRlX2RhdGEpLCAoZ3N0X3BuZ2VuY19jaGFpbik6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmg6Ci0JICBQcmVhbGxvY2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBzbyB0aGF0IGdfbWVtZHVwKCkgYW5kCi0JICBnc3RfYnVmZmVyX21lcmdlKCkgYXJlbid0IG5lZWRlZCBhbnltb3JlLiBUaGlzIGdyZWF0bHkgaW1wcm92ZXMKLQkgIHBlcmZvcm1hbmNlcyBhbmQgZml4ZXMgIzUxMjU0NC4KLQotMjAwOC0wMS0yOSAxODoyNDoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBHU3RyZWFtZXIgdGltZXN0YW1wcyBhcmUgUFRTIHZhbHVlcyB3aGlsZSBBVkkgb25seSBrbm93cyBhYm91dCBEVFMgdGltZXN0YW1wcy4gTWFrZSBzdXJlIHdlIG9uLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgR1N0cmVhbWVyIHRpbWVzdGFtcHMgYXJlIFBUUyB2YWx1ZXMgd2hpbGUgQVZJIG9ubHkga25vd3MgYWJvdXQgRFRTCi0JICB0aW1lc3RhbXBzLiBNYWtlIHN1cmUgd2Ugb25seSBjb3B5IHRoZSBEVFMgYXMgdGhlIGJ1ZmZlciB0aW1lc3RhbXAgd2hlbgotCSAgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGtleSBmcmFtZS4KLQotMjAwOC0wMS0yOSAxNTo0NTo0OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCBhZGQgdGVzdHN1aXRlIGZvciB0aGUgcnRwLXBheWxvYWRlciB0aGF0IHRyaWVzIHNpbXVsYXRpbmcgZGF0YWZsb3cuIE5lZWRzIG1vcmUgdGVzdCBkYXRhLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jOgotCSAgQWRkIGFkZCB0ZXN0c3VpdGUgZm9yIHRoZSBydHAtcGF5bG9hZGVyIHRoYXQgdHJpZXMgc2ltdWxhdGluZwotCSAgZGF0YWZsb3cuIE5lZWRzIG1vcmUgdGVzdCBkYXRhLgotCi0yMDA4LTAxLTI5IDE1OjI3OjAyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FscGhhY29sb3IuYzogUmVtb3ZlIHR3byB1bnVzZWQgdmFyaWFibGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FscGhhY29sb3IuYzoKLQkgIFJlbW92ZSB0d28gdW51c2VkIHZhcmlhYmxlcy4KLQotMjAwOC0wMS0yOCAxMjoxNzowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBVc2UgZ19hc2NpaV9zdHJ0b2xsKCkgaW5zdGVhZCBvZiBhdG9sbCwgd2hpY2ggaXMgb25seSBhdmFpbGFibGUgaW4gQzk5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3BhcnNlX3J0cGluZm8pOgotCSAgVXNlIGdfYXNjaWlfc3RydG9sbCgpIGluc3RlYWQgb2YgYXRvbGwsIHdoaWNoIGlzIG9ubHkKLQkgIGF2YWlsYWJsZSBpbiBDOTkuCi0KLTIwMDgtMDEtMjYgMTY6MTk6MjYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci86IERvbid0IGltcGxlbWVudCBnZXRfdW5pdF9zaXplKCkgb3Vyc2VsdmVzLCB0aGUgR3N0QXVkaW9GaWx0ZXIgYmFzZSBjbGFzcyBhbHJlYWR5IGRvZXMgdGhpcyBmb3IgdXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChnc3RfYnB3c2luY19jbGFzc19pbml0KToKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6IChnc3RfbHB3c2luY19jbGFzc19pbml0KToKLQkgIERvbid0IGltcGxlbWVudCBnZXRfdW5pdF9zaXplKCkgb3Vyc2VsdmVzLCB0aGUgR3N0QXVkaW9GaWx0ZXIgYmFzZQotCSAgY2xhc3MgYWxyZWFkeSBkb2VzIHRoaXMgZm9yIHVzLgotCi0yMDA4LTAxLTI1IDEwOjUzOjE3ICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQWRkIE1QRUcyIHZpZGVvIHBheWxvYWRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXB2cGF5Lmg6Ci0JICBBZGQgTVBFRzIgdmlkZW8gcGF5bG9hZGVyCi0KLTIwMDgtMDEtMjMgMTc6MDU6MzIgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2xldmVsL2dzdGxldmVsLmM6IFVzZSAjaW5jbHVkZSA8bWF0aC5oPiBpbnN0ZWFkIG9mICNpbmNsdWRlICJtYXRoLmgiLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgVXNlICNpbmNsdWRlIDxtYXRoLmg+IGluc3RlYWQgb2YgI2luY2x1ZGUgIm1hdGguaCIuCi0KLTIwMDgtMDEtMjEgMTk6NDE6NDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogRml4IHVwIHNvbWUgQ0ZMQUdTIHNldHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBGaXggdXAgc29tZSBDRkxBR1Mgc2V0cy4KLQkgIERvbid0IGluY2x1ZGUgZ2NvbmZ2aWRlb3NyYyBpbiB0aGUgc3RhdGVzIHRlc3QuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEFkZCBzb21lIGVycm9yIHN0cmluZ3MgdG8gZmFpbF91bmxlc3MgYXJndW1lbnRzIHRvIGZpeCBzb21lIHdlaXJkCi0JICBjb21waWxlciBlcnJvcnMgb24gU29sYXJpcy4KLQotMjAwOC0wMS0yMSAxOTozNTo1OCArMDAwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCi0JICBjb25maWd1cmUuYWM6IERldGVjdCB2aWRlbzRsaW51eCBoZWFkZXJzIG9uIFNvbGFyaXMgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIERldGVjdCB2aWRlbzRsaW51eCBoZWFkZXJzIG9uIFNvbGFyaXMgdG9vLgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMl9idWZmZXJfZmluYWxpemUpLAotCSAgKGdzdF92NGwyX2J1ZmZlcl9uZXcpOgotCSAgTWFrZSB2NGwyIGJ1aWxkIG9uIFNvbGFyaXMuCi0JICBQYXRjaCBieTogQnJpYW4gQ2FtZXJvbiAgPGJyaWFuLmNhbWVyb24gYXQgc3VuIGRvdCBjb20+Ci0JICBGaXhlczogIzUxMDUwNQotCi0yMDA4LTAxLTIxIDExOjQ2OjE5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOiBVcGRhdGUgbGlzdCBmcm9tIChzdGlsbCBsb2NhbCkgc2Nhbm5pbmcgc2NyaXB0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgVXBkYXRlIGxpc3QgZnJvbSAoc3RpbGwgbG9jYWwpIHNjYW5uaW5nIHNjcmlwdC4KLQotMjAwOC0wMS0yMSAwOTo1NzowNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGQgc3ltYm9scyBmcm9tIC11bnVzZWQudHh0IHRvIHRoZSByaWdodCBwbGFjZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICBBZGQgc3ltYm9scyBmcm9tIC11bnVzZWQudHh0IHRvIHRoZSByaWdodCBwbGFjZS4KLQkgICogZ3N0L2R2ZHNwdS9nc3RkdmRzcHUuYzoKLQkgICogZ3N0L2R2ZHNwdS9nc3RkdmRzcHUuaDoKLQkgIENvaGVyZW50IG5hbWVzcGFjZSB1c2FnZS4KLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBGaXggYnJva2VuIFhNTCBmcmFnbWVudCBpbiBkb2Mgc25pcHBldCBldmVuIG1vcmUuCi0KLTIwMDgtMDEtMjEgMDc6NTQ6MDIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOiBVcGRhdGUgaW5jbHVkZSBsaXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIFVwZGF0ZSBpbmNsdWRlIGxpc3QuCi0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICBVcGRhdGUgeG1sIGluY2x1ZGVzLgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxzYXNwZGlmLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFtcndiLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJheWVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJ6Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZHhhcGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRzZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2YnNyYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdmRzcHUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZhYWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmFhZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mYmRldnNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmVzdGl2YWwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmlsdGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdmRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZyZWV6ZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc20ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ3N0aW50ZXJsYWNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taDI2NHBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWludGVybGVhdmUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1ldGFkYXRhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vZHBsdWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXBlZzR2aWRlb3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWd0c3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWd2aWRlb3BhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11c2ljYnJhaW56LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW12ZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uc2ZkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbnV2ZGVtdXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXRkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVhbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNkbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXhyZXNhbXBsZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zdGVyZW8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3dpdGNoLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRpbWlkaXR5LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXR0YS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2Nyb3AueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9wYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb3NpZ25hbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12bW5jLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdpbGRtaWRpLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXgyNjQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGluZ2hlYWRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14dmlkLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXk0bWVuYy54bWw6Ci0JICBSZWdlbmVyYXRlIGZpbGVzLgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIEZpeCBicm9rZW4gWE1MIGZyYWdtZW50IGluIGRvYyBzbmlwcGV0LgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgQWRkIHRlc3QgYmluYXJ5IHRvIGlnbm9yZXMuCi0KLTIwMDgtMDEtMjAgMDU6MDc6NTIgKzAwMDAgIFdvdXRlciBDbG9ldGVucyA8d291dGVyQG1pbmQuYmU+Ci0KLQkgIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IFJlcG9ydCB0aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGFzIHRoZSB0b3RhbCBzaXplIGluc3RlYWQgb2YgdGhlIHJlbWFpbmluZyBDb250ZW50LUxlbmd0aCwgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV291dGVyIENsb2V0ZW5zIDx3b3V0ZXIgYXQgbWluZCBkb3QgYmU+Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6IChzb3VwX2dvdF9oZWFkZXJzKToKLQkgIFJlcG9ydCB0aGUgc2l6ZSBvZiB0aGUgc3RyZWFtIGFzIHRoZSB0b3RhbCBzaXplIGluc3RlYWQgb2YKLQkgIHRoZSByZW1haW5pbmcgQ29udGVudC1MZW5ndGgsIHdoaWNoIGlzIHdyb25nIGFmdGVyIGEgc2Vlay4KLQotMjAwOC0wMS0xOSAxNDo1OTowOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBBZGQgYnVnIG51bWJlciB0byB0aGUgbGF0ZXN0IGVudHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFkZCBidWcgbnVtYmVyIHRvIHRoZSBsYXRlc3QgZW50cnkKLQotMjAwOC0wMS0xOSAxNDo1Mzo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogU2V0IHZhcmlhYmxlIHRvIE5VTEwgYWZ0ZXIgZnJlZWluZyBpdCB0byBwcmV2ZW50IGRvdWJsZSBmcmVlcyBvciBtYWtlIGZhaWx1cmVzIGJ5IGFub3RoZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gYSBwYXRjaCBieToKLQkgIFZpY3RvciBTVElOTkVSIDx2aWN0b3IgZG90IHN0aW5uZXIgYXQgaGF5cG9jYWxjIGRvdCBjb20+Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKToKLQkgIFNldCB2YXJpYWJsZSB0byBOVUxMIGFmdGVyIGZyZWVpbmcgaXQgdG8gcHJldmVudCBkb3VibGUgZnJlZXMKLQkgIG9yIG1ha2UgZmFpbHVyZXMgYnkgYW5vdGhlciB1c2Ugb2YgaXQgYWZ0ZXJ3YXJkcyBtb3JlIG9idmlvdXMKLQkgIGFuZCBmaXggdXNlIG9mIGl0IGFmdGVyIHRoZSBmcmVlaW5nLgotCi0yMDA4LTAxLTE5IDE0OjM0OjUwICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiBDb3JyZWN0bHkgc2V0IGR1cmF0aW9uIG9uIHRoZSBHc3RCYXNlU3JjIHNlZ21lbnQgd2hlbiB3ZSBrbm93IGl0IHRvIGZpeCBmYWlsaW5nIHRoZSBkdXJhdGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdvdXRlciBDbG9ldGVucyA8d291dGVyIGF0IG1pbmQgZG90IGJlPgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoc291cF9nb3RfaGVhZGVycyk6Ci0JICBDb3JyZWN0bHkgc2V0IGR1cmF0aW9uIG9uIHRoZSBHc3RCYXNlU3JjIHNlZ21lbnQgd2hlbiB3ZSBrbm93IGl0Ci0JICB0byBmaXggZmFpbGluZyB0aGUgZHVyYXRpb24gcXVlcnkuCi0KLTIwMDgtMDEtMTggMTM6NDA6MzggKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IHVzZSBHU1RfV0FSTklORyBmb3IgbG9nZ2luZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6Ci0JICB1c2UgR1NUX1dBUk5JTkcgZm9yIGxvZ2dpbmcKLQotMjAwOC0wMS0xOCAxMDowNTo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOiBGaXggbWVtb3J5IGxlYWsgc3BvdHRlZCBieSB0aGUgdW5pdCB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6IChnc3RfbXVsdGlfZmlsZV9zcmNfY3JlYXRlKToKLQkgIEZpeCBtZW1vcnkgbGVhayBzcG90dGVkIGJ5IHRoZSB1bml0IHRlc3QuCi0KLTIwMDgtMDEtMTggMTA6MDQ6MjUgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IERvbid0IHRyeSB0byBsZWF2ZSBhIG11bHRpY2FzdCBncm91cCB3aXRoIGFuIGludmFsaWQgc29ja2V0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgIERvbid0IHRyeSB0byBsZWF2ZSBhIG11bHRpY2FzdCBncm91cCB3aXRoIGFuIGludmFsaWQgc29ja2V0Ci0KLTIwMDgtMDEtMTggMDg6NDk6NTkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgc29tZSBtaW5pbWFsIHRlc3RzIGZvciB0aGUgZXF1YWxpemVyIHBsdWdpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvZXF1YWxpemVyLmM6IChzZXR1cF9lcXVhbGl6ZXIpLAotCSAgKGNsZWFudXBfZXF1YWxpemVyKSwgKEdTVF9TVEFSVF9URVNUKSwgKGVxdWFsaXplcl9zdWl0ZSksIChtYWluKToKLQkgIEFkZCBzb21lIG1pbmltYWwgdGVzdHMgZm9yIHRoZSBlcXVhbGl6ZXIgcGx1Z2luLgotCi0yMDA4LTAxLTE4IDA3OjAzOjIzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IFVucGFyZW50IGFsbCBiYW5kcyBmcm9tIHRoZSBlcXVhbGl6ZXIgd2hlbiBmaW5hbGl6aW5nIHRvIHN0b3AgbGVha2luZwl0aGVtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IChnc3RfaWlyX2VxdWFsaXplcl9maW5hbGl6ZSk6Ci0JICBVbnBhcmVudCBhbGwgYmFuZHMgZnJvbSB0aGUgZXF1YWxpemVyIHdoZW4gZmluYWxpemluZyB0byBzdG9wCi0JICBsZWFraW5nCXRoZW0uCi0KLTIwMDgtMDEtMTggMDU6MzI6MjYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogQWRkIHN1cHBvcnQgZm9yIFdlYkRBVi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBodHRwX3NyY191cmlfZ2V0X3Byb3RvY29scyk6Ci0JICBBZGQgc3VwcG9ydCBmb3IgV2ViREFWLgotCi0yMDA4LTAxLTE4IDA1OjI0OjM5ICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy4qOiBBZGQgc3VwcG9ydCBmb3Igc2Vla2luZyB0byBzb3VwaHR0cHNyYy4gRml4ZXMgYnVnICM1MDIzMzUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogKGdzdF9zb3VwaHR0cF9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19pbml0KSwgKGdzdF9zb3VwaHR0cF9zcmNfY3JlYXRlKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX2lzX3NlZWthYmxlKSwgKGdzdF9zb3VwaHR0cF9zcmNfZG9fc2VlayksCi0JICAoc291cF9hZGRfcmFuZ2VfaGVhZGVyKSwgKHNvdXBfZ290X2hlYWRlcnMpLCAoc291cF9nb3RfY2h1bmspOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oOgotCSAgQWRkIHN1cHBvcnQgZm9yIHNlZWtpbmcgdG8gc291cGh0dHBzcmMuIEZpeGVzIGJ1ZyAjNTAyMzM1LgotCi0yMDA4LTAxLTE3IDIxOjIzOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IHdoZXJlIHRoZSBwaWN0dXJlIG1ldGFkYXRhIGRlZmluZXMgYW5kIHN0cnVjdHMgZG9uJ3QgZXhpc3QgeWV0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIEZpeCBjb21waWxhdGlvbiBhZ2FpbnN0IGZsYWMgMS4xLjIgKGFzIG9uIGRlYmlhbiBzdGFibGUpLCB3aGVyZQotCSAgdGhlIHBpY3R1cmUgbWV0YWRhdGEgZGVmaW5lcyBhbmQgc3RydWN0cyBkb24ndCBleGlzdCB5ZXQuCi0JICBGaXhlcyAjNTA5MzAxLgotCi0yMDA4LTAxLTE3IDExOjEzOjE2ICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay4qOiBBZGQgcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBqb2luIGEgbXVsdGljYXN0IGdyb3VwIG9yIG5vdC4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gc2hhcmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2luaXQpLCAoZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9tdWx0aXVkcHNpbmtfaW5pdF9zZW5kKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2FkZF9pbnRlcm5hbCksIChnc3RfbXVsdGl1ZHBzaW5rX3JlbW92ZSk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBBZGQgcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBqb2luIGEgbXVsdGljYXN0IGdyb3VwIG9yIG5vdC4gVGhpcyBjYW4gYmUKLQkgIHVzZWZ1bCB3aGVuIHNoYXJpbmcgYSBzb2NrZXQgYmV0d2VlbiBtdWx0aXBsZSBlbGVtZW50cy4KLQkgIEZpeGVzICM1MDk1MzEuCi0KLTIwMDgtMDEtMTYgMjE6NTM6NDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06IEFkZCBjb250cm9sbGVyIGZsYWdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSAgQWRkIGNvbnRyb2xsZXIgZmxhZ3MuCi0KLTIwMDgtMDEtMTYgMjA6MTc6MDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBBbHNvIGNvbW1pdCB0aGUgbWlzc2luZyBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgQWxzbyBjb21taXQgdGhlIG1pc3NpbmcgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcygpLgotCi0yMDA4LTAxLTE2IDA4OjExOjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbTogUmVtb3ZlIGR1cGxpY2F0ZSBlbnRyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBSZW1vdmUgZHVwbGljYXRlIGVudHJ5LgotCi0yMDA4LTAxLTE1IDE2OjUyOjEwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEFkZCAzIG1vcmUgcGx1Z2lucyB0byBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2FtbWEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW9ub3Njb3BlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWw6Ci0JICBBZGQgMyBtb3JlIHBsdWdpbnMgdG8gZG9jcy4KLQotMjAwOC0wMS0xNSAxNjowNDo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBSZXZlcnQgcHJldmlvdXMgY2hhbmdlIGNhdXNlZCBieSBhIGZpbGUgdGhhdCBnb3Qgc3R1Y2sgb24gYW4gb2xkIHJldmlzaW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JICBSZXZlcnQgcHJldmlvdXMgY2hhbmdlIGNhdXNlZCBieSBhIGZpbGUgdGhhdCBnb3Qgc3R1Y2sgb24gYW4gb2xkCi0JICByZXZpc2lvbi4KLQotMjAwOC0wMS0xNSAxNTo0MDo1OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBSZS1hZGQgbXVsdGlwYXJ0ZGVtdXggdG8gdGhlIGRvY3MuIExhc3Qgcm91bmQgb2Ygc2VjdGlvbiBjbGVhbnVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBnc3QvbXVsdGlwYXJ0L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaDoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguaDoKLQkgIFJlLWFkZCBtdWx0aXBhcnRkZW11eCB0byB0aGUgZG9jcy4gTGFzdCByb3VuZCBvZiBzZWN0aW9uIGNsZWFudXAuCi0KLTIwMDgtMDEtMTUgMTU6MjI6NDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgTWFuYWdlZCB0byByZXNvbHZlIG1vc3QgdW51c2VkIGRlY2xhcmF0aW9ucy4gRmlsZWQgYSBidWcgZm9yIG9uZSBsZWZ0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgTWFuYWdlZCB0byByZXNvbHZlIG1vc3QgdW51c2VkIGRlY2xhcmF0aW9ucy4gRmlsZWQgYSBidWcgZm9yIG9uZSBsZWZ0LgotCi0yMDA4LTAxLTE1IDA4OjAzOjQ5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OiBDbGVhbnVwIHNlY3Rpb24gZmlsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIENsZWFudXAgc2VjdGlvbiBmaWxlLgotCi0yMDA4LTAxLTE1IDA3OjQyOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IFVwZGF0ZSBwbHVnaW4gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5zaWduYWxzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgIFVwZGF0ZSBwbHVnaW4gZG9jcy4KLQkgICogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5oOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVycGFkLmg6Ci0JICBTcGxpdCBvdXQgaGVhZGVyIHRvIGZpeCB3YXJuaW5ncyBmcm9tIHRoZSBkb2MtYnVpbGQuCi0KLTIwMDgtMDEtMTQgMTI6MzU6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFzIGZvdW5kIGJ5OiBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW4gbm9raWEgY29tPgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBcyBmb3VuZCBieTogVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pLm15b2hhbmVuIG5va2lhIGNvbT4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyk6Ci0JICBVc2UgYXRvbGwgdG8gcGFyc2UgdGhlIHJ0cHRpbWUgd2l0aCBlbm91Z2ggcHJlY2lzaW9uLiBGaXhlcyAjNTA5MzI5LgotCi0yMDA4LTAxLTE0IDEyOjExOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBJbml0aWFsaXNlIHZhcmlhYmxlcyB0byB3b3JrIGFyb3VuZCAoZmFsc2UpICdmb28gbWlnaHQgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24nIHdhcm5pbmdzIGJ5IGdjYy0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmM6IChnc3RfYXZpX3N1YnRpdGxlX2V4dHJhY3RfZmlsZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NlbmQpOgotCSAgSW5pdGlhbGlzZSB2YXJpYWJsZXMgdG8gd29yayBhcm91bmQgKGZhbHNlKSAnZm9vIG1pZ2h0IGJlIHVzZWQKLQkgIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbicgd2FybmluZ3MgYnkgZ2NjLTMuMy4zICgjNTA5Mjk4KS4KLQotMjAwOC0wMS0xMiAwMjozMjozNSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIElnbm9yZSBtb3JlIGZpbGVzIGZvciB0aGUgYnVpbGRib3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uY3ZzaWdub3JlOgotCSAgSWdub3JlIG1vcmUgZmlsZXMgZm9yIHRoZSBidWlsZGJvdC4KLQotMjAwOC0wMS0xMSAyMTowODo1OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEdlbmVyYXRlIHRoZSBpbWFnZS10eXBlIHZhbHVlcyBjb3JyZWN0bHkuIExlYXZlIHRoZW0gb3V0IG9mIHRoZSBjYXBzIHdoZW4gb3V0cHV0dGluZyBhICJwcmV2aWV3IGltYWdlIiB0YWcsIHNpbmNlIGl0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2V4dHJhY3RfcGljdHVyZV9idWZmZXIpOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKHBhcnNlX3BpY3R1cmVfZnJhbWUpOgotCSAgR2VuZXJhdGUgdGhlIGltYWdlLXR5cGUgdmFsdWVzIGNvcnJlY3RseS4gTGVhdmUgdGhlbSBvdXQgb2YgdGhlIGNhcHMKLQkgIHdoZW4gb3V0cHV0dGluZyBhICJwcmV2aWV3IGltYWdlIiB0YWcsIHNpbmNlIGl0IG9ubHkgbWFrZXMgc2Vuc2UKLQkgIHRvIGhhdmUgb25lIG9mIHRob3NlIC0gdGhlIHR5cGUgaXMgaXJyZWxldmFudC4KLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmM6Ci0JICAoZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9vcGVuKToKLQkgIElmIHdlIGNhbiwgbWFyayB0aGUgbWl4ZXIgbXVsdGlwbGUgb3BlbiB3aGVuIHdlIHVzZSBpdCwgaW4gY2FzZQotCSAgKGZvciBzb21lIHJlYXNvbikgdGhlIHByb2Nlc3Mgd2FudHMgdG8gb3BlbiBpdCBhZ2FpbiBlbHNld2hlcmUuCi0KLTIwMDgtMDEtMTEgMTk6MTY6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLzogSXQncyAiZW5kaWFubmVzcyIsIG5vdCAiZW5kaWFuZXNzIi4gRml4ZXMgdW5pdCB0ZXN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6ICh0ZXN0X2J1ZmZlcl9jb25zdF9mbG9hdF9tb25vKSwKLQkgICh0ZXN0X2J1ZmZlcl9jb25zdF9mbG9hdF9zdGVyZW8pLCAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfbW9ubyksCi0JICAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfc3RlcmVvKSwgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9tb25vKSwKLQkgICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvKSwgKHRlc3RfYnVmZmVyX3NxdWFyZV9pbnQxNl9tb25vKSwKLQkgICh0ZXN0X2J1ZmZlcl9zcXVhcmVfaW50MTZfc3RlcmVvKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmM6IChjcmVhdGVfdGVzdF9idWZmZXIpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jOiAodGVzdF9idWZmZXJfbmV3KToKLQkgIEl0J3MgImVuZGlhbm5lc3MiLCBub3QgImVuZGlhbmVzcyIuIEZpeGVzIHVuaXQgdGVzdHMuCi0KLTIwMDgtMDEtMTEgMTg6NTY6MDYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy8uY3ZpZ25vcmU6Ci0JICBpZ25vcmUgc29tZSBtb3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGlnbm9yZSBzb21lIG1vcmUKLQotMjAwOC0wMS0xMSAxODo1NDozMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkgIGlnbm9yZSBzb21lIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIHNvbWUgbW9yZQotCi0yMDA4LTAxLTExIDE3OjIxOjMwICswMDAwICBPbGl2aWVyIENyZXRlIDx0ZXN0ZXJAdGVzdGVyLmNhPgotCi0JICBnc3QvcnRwLzogRml4IHRoZSBjbG9jayByYXRlIHRvIDkwMDAwIGFzIHJlcXVpcmVkIGJ5IHRoZSBSRkMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBPbGl2aWVyIENyZXRlIDx0ZXN0ZXIgYXQgdGVzdGVyIGRvdCBjYT4KLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOiAoZ3N0X3J0cF90aGVvcmFfZGVwYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICBGaXggdGhlIGNsb2NrIHJhdGUgdG8gOTAwMDAgYXMgcmVxdWlyZWQgYnkgdGhlIFJGQy4KLQkgIEZpeGVzICM1MDg2NDQuCi0KLTIwMDgtMDEtMTEgMTc6MTI6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ljeWRlbXV4LmM6IERvbid0IHVzZSBkZXByZWNhdGVkIEdTVF9QTFVHSU5fREVGSU5FX1NUQVRJQy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOiAoR1NUX1NUQVJUX1RFU1QpLCAoaWN5ZGVtdXhfc3VpdGUpOgotCSAgRG9uJ3QgdXNlIGRlcHJlY2F0ZWQgR1NUX1BMVUdJTl9ERUZJTkVfU1RBVElDLgotCi0yMDA4LTAxLTEwIDEyOjI1OjQ0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGF1dG9nZW4uc2g6IEFkZCAtV25vLXBvcnRhYmlsaXR5IHRvIHRoZSBhdXRvbWFrZSBwYXJhbWV0ZXJzIHRvIHN0b3Agd2FybmluZ3MgYWJvdXQgR05VIG1ha2UgZXh0ZW5zaW9ucyBiZWluZyB1c2VkLiBXZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGF1dG9nZW4uc2g6Ci0JICBBZGQgLVduby1wb3J0YWJpbGl0eSB0byB0aGUgYXV0b21ha2UgcGFyYW1ldGVycyB0byBzdG9wIHdhcm5pbmdzCi0JICBhYm91dCBHTlUgbWFrZSBleHRlbnNpb25zIGJlaW5nIHVzZWQuIFdlIHJlcXVpcmUgR05VIG1ha2UgaW4gYWxtb3N0Ci0JICBldmVyeSBNYWtlZmlsZSBhbnl3YXkuCi0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFVzZSBBTV9QUk9HX0NDX0NfTyBhcyBhIGNvbXBpbGVyIHRoYXQgYWNjZXB0cyBib3RoIC1jIGFuZCAtbwotCSAgYXQgdGhlIHNhbWUgdGltZSBpcyByZXF1aXJlZCBmb3IgcGVyIHRhcmdldCBmbGFncy4KLQotMjAwOC0wMS0wOSAxNToyODoyOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBGaXggZXJyb3IgZnJvbSBteSBsYXN0IGNvbW1pdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9pbml0KToKLQkgIEZpeCBlcnJvciBmcm9tIG15IGxhc3QgY29tbWl0LgotCi0yMDA4LTAxLTA5IDE1OjIwOjE5ICswMDAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW5Abm9raWEuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogTWFrZSBzdXJlIHRoZSBJU08gNjM5LVggbGFuZ3VhZ2UgY29kZSBpbiBJRDN2MiBDT01NIGZyYW1lcyBzbyB3ZSBkb24ndCBlbmQgdXAgd2l0aCBub24tVVQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS5teW9oYW5lbiBub2tpYSBjb20+Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAocGFyc2VfY29tbWVudF9mcmFtZSk6Ci0JICBNYWtlIHN1cmUgdGhlIElTTyA2MzktWCBsYW5ndWFnZSBjb2RlIGluIElEM3YyIENPTU0gZnJhbWVzCi0JICBpcyBhY3R1YWxseSB2YWxpZCBVVEYtOCAob3IgcmF0aGVyOiBBU0NJSSksIHNvIHdlIGRvbid0IGVuZAotCSAgdXAgd2l0aCBub24tVVRGOCBzdHJpbmdzIGluIHRhZ3MgaWYgdGhlcmUncyBnYXJiYWdlIGluIHRoZQotCSAgbGFuZ3VhZ2UgZmllbGQuIEFsc28gbWFrZSBzdXJlIHRoZSBsYW5ndWFnZSBjb2RlIGlzIGFsd2F5cwotCSAgbG93ZXIgY2FzZS4gRml4ZXM6ICM1MDgyOTEuCi0KLTIwMDgtMDEtMDkgMTM6NTU6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQ2hhbmdlTG9nOiBGaXggQ2hhbmdlTG9nIHR5cG8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgRml4IENoYW5nZUxvZyB0eXBvLgotCi0yMDA4LTAxLTA5IDEzOjUwOjA5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1ha2VmaWxlLmFtOiBJbmNsdWRlIGxjb3YubWFrIHRvIGFsbG93IGJ1aWxnaW5nIGNvdmVyYWdlIHJlcG9ydHMuIEd1YXJkIGNoZWNrLXRvcnR1cmUgdGFyZ2V0IGxpa2UgaW4gdGhlIG90aGVyIHBhY2thZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgSW5jbHVkZSBsY292Lm1hayB0byBhbGxvdyBidWlsZ2luZyBjb3ZlcmFnZSByZXBvcnRzLiBHdWFyZAotCSAgY2hlY2stdG9ydHVyZSB0YXJnZXQgbGlrZSBpbiB0aGUgb3RoZXIgcGFja2FnZXMuCi0KLTIwMDgtMDEtMDkgMTI6MzM6NTggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogSW1wbGVtZW50IEdzdENoaWxkUHJveHkgaW50ZXJmYWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICAoZ3N0X3ZpZGVvbWl4ZXJfc2V0X21hc3Rlcl9nZW9tZXRyeSksIChfZG9faW5pdCksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4KSwKLQkgIChnc3RfdmlkZW9taXhlcl9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQpLAotCSAgKGdzdF92aWRlb21peGVyX2NoaWxkX3Byb3h5X2luaXQpLCAoZ3N0X3ZpZGVvbWl4ZXJfcmVzZXQpLAotCSAgKGdzdF92aWRlb21peGVyX2luaXQpLCAoZ3N0X3ZpZGVvbWl4ZXJfcmVxdWVzdF9uZXdfcGFkKSwKLQkgIChnc3RfdmlkZW9taXhlcl9yZWxlYXNlX3BhZCksIChnc3RfdmlkZW9taXhlcl9maWxsX3F1ZXVlcyk6Ci0JICBJbXBsZW1lbnQgR3N0Q2hpbGRQcm94eSBpbnRlcmZhY2UuCi0JICBTZW5kIG5ld3NlZ21lbnQgYXQgdGhlIHJpZ2h0IG1vbWVudAotCSAgRml4ZXMgIzQ4ODg3OQotCi0yMDA4LTAxLTA5IDEyOjAxOjE0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYWxwaGEvOiBNYWtlIHRoZSB2YXJpb3VzIHByb3BlcnRpZXMgb2YgJ2FscGhhJyBjb250cm9sbGFibGUuIFRoaXMgYWxsb3dzIGRvaW5nIG5pY2V0aWVzIGxpa2UgZmFkZS1pbi9mYWRlLW91dC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYWxwaGEvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiAoZ3N0X2FscGhhX2NsYXNzX2luaXQpLCAoZ3N0X2FscGhhX2luaXQpLAotCSAgKGdzdF9hbHBoYV9zaW5rX2V2ZW50KSwgKGdzdF9hbHBoYV9jaGFpbiksCi0JICAoZ3N0X2FscGhhX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JICBNYWtlIHRoZSB2YXJpb3VzIHByb3BlcnRpZXMgb2YgJ2FscGhhJyBjb250cm9sbGFibGUuIFRoaXMgYWxsb3dzIGRvaW5nCi0JICBuaWNldGllcyBsaWtlIGZhZGUtaW4vZmFkZS1vdXQuCi0KLTIwMDgtMDEtMDkgMTE6MTE6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3J0cC86IFJlbW92ZSBjb3B5L3Bhc3RlIHVudXNlZCBjb2RlIChwcm9wZXJ0eSBzZXR0ZXJzIGFuZCBnZXR0ZXIpIGZvdW5kIGJ5IHRoZSBjb3ZlcmFnZSBzdWl0ZSAoeWF5LCBzYXZlcyB+MjBrIG9uLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIFJlbW92ZSBjb3B5L3Bhc3RlIHVudXNlZCBjb2RlIChwcm9wZXJ0eSBzZXR0ZXJzIGFuZCBnZXR0ZXIpIGZvdW5kIGJ5Ci0JICB0aGUgY292ZXJhZ2Ugc3VpdGUgKHlheSwgc2F2ZXMgfjIwayBvbiBkaXNrKS4KLQotMjAwOC0wMS0wOCAyMDowMzozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBBbHNvIGZpeCB1cCBwYWQgdGVtcGxhdGVzIHRvIGluZGljYXRlIHRoYXQgaW1hZ2UvanBlZyBkb2Vzbid0IGFic29sdXRlbHkgcmVxdWlyZSB0aGUgZnJhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoQ09NTU9OX1ZJREVPX0NBUFNfTk9fRlJBTUVSQVRFKSwKLQkgICh2aWRlb3NpbmtfdGVtcGwpOgotCSAgQWxzbyBmaXggdXAgcGFkIHRlbXBsYXRlcyB0byBpbmRpY2F0ZSB0aGF0IGltYWdlL2pwZWcgZG9lc24ndAotCSAgYWJzb2x1dGVseSByZXF1aXJlIHRoZSBmcmFtZXJhdGUgcHJvcGVydHkgdG8gYmUgc2V0ICgjNTA0MDgxKS4KLQotMjAwOC0wMS0wOCAxOTo1NzoyMyArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC4qOiBLZWVwIHRyYWNrIG9mIGZpcnN0IGFuZCBsYXN0IHRpbWVzdGFtcHMgZm9yIGVhY2ggaW5jb21pbmcgc3RyZWFtLCBzbyB3ZSBjYW4gY2FsY3VsYXRlIHRoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgIDx3b3V0ZXIgYXQgbWluZCBiZT4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF92aWRlb19wYWRfc2V0Y2FwcyksCi0JICAoZ3N0X21hdHJvc2thX211eF9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X21hdHJvc2thX211eF9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpLCAoZ3N0X21hdHJvc2thX211eF9jb2xsZWN0ZWQpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBLZWVwIHRyYWNrIG9mIGZpcnN0IGFuZCBsYXN0IHRpbWVzdGFtcHMgZm9yIGVhY2ggaW5jb21pbmcgc3RyZWFtLAotCSAgc28gd2UgY2FuIGNhbGN1bGF0ZSB0aGUgdG90YWwgZHVyYXRpb24gZm9yIGxpdmUgc291cmNlcyBhbmQgb3RoZXIKLQkgIGlucHV0IHdoZXJlIHdlIGNhbid0IHF1ZXJ5IHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBzdGFydCBvciB3aGVyZQotCSAgdGhlcmUncyBubyBjb25zdGFudCBmcmFtZXJhdGUgZnJvbSB3aGljaCB3ZSBjYW4gZGVkdWNlIHRoZQotCSAgZHVyYXRpb247IGFsc28gdXNlIGNhbGN1bGF0ZWQvb2JzZXJ2ZWQgZHVyYXRpb24gaWYgaXQgaXMgYmlnZ2VyCi0JICB0aGFuIHRoZSBwcmV2aW91c2x5IHF1ZXJpZWQgZHVyYXRpb24uIEZ1cnRoZXJtb3JlLCB1c2UKLQkgIGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbigpIGFuZCB0YWtlIGludG8gYWNjb3VudCB0aGF0IGl0IG1heQotCSAgcmV0dXJuIFRSVUUgYnV0IHN0aWxsIGEgZHVyYXRpb24gb2YgQ0xPQ0tfVElNRV9OT05FLCB3aGljaCBlYXNpbHkKLQkgIHNjcmV3cyB1cCBjb21wYXJpc29ucyB3aGVuIHVzaW5nIHVuc2lnbmVkIGludGVnZXJzLiBGaXhlcyAjNTA0MDgxLgotCi0yMDA4LTAxLTA4IDE0OjU4OjE4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIE1ha2UgZWxlbWVudHMgR1NUX0JVRkZFUl9GTEFHX0dBUCBhd2FyZSBhbmQgY2FsbCBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSBmb3IgdGhpcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X2NsaXBwaW5nX21ldGhvZF9nZXRfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfaW5pdCksIChnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzogKGdzdF9hdWRpb19keW5hbWljX2luaXQpLAotCSAgKGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmM6IChnc3RfYXVkaW9faW52ZXJ0X2luaXQpLAotCSAgKGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOiAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2luaXQpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm0pOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9pbml0KToKLQkgIE1ha2UgZWxlbWVudHMgR1NUX0JVRkZFUl9GTEFHX0dBUCBhd2FyZSBhbmQgY2FsbAotCSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgZm9yIHRoaXMuCi0JICBCdW1wIGNvcmUgcmVxdWlyZW1lbnQgdG8gQ1ZTLgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJ5c2hldmZyZXFiYW5kLmM6Ci0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2JhbmRfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVieXNoZXZmcmVxbGltaXQuYzoKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfdHJhbnNmb3JtX2lwKToKLQkgIEFsc28gc3luYyBHT2JqZWN0IHByb3BlcnRpZXMgdG8gdGhlIGNvbnRyb2xsZXIgaWYgb3BlcmF0aW5nCi0JICBpbiBwYXNzdGhyb3VnaCBtb2RlLgotCi0yMDA4LTAxLTA3IDE2OjQxOjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOiBGQUxTRSBpcyBub3QgYSBncG9pbnRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKGdzdF9kaXJlY3RkcmF3X3Npbmtfd2luZG93X3RocmVhZCk6Ci0JICBGQUxTRSBpcyBub3QgYSBncG9pbnRlci4KLQotMjAwOC0wMS0wNSAyMToyMDowOCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6IE1ha2Ugc3VyZSB3ZSBjcmVhdGUgb3VyIGludGVybmFsIHdpbmRvdyBvbmx5IHdoZW4gd2UgbmVlZCBpdC4gVGhhdCB3aWxsIGdpdmUgYSBjaC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA4LTAxLTA1ICBKdWxpZW4gTW91dHRlICA8anVsaWVuQGZsdWVuZG8uY29tPgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKGdzdF9kaXJlY3RkcmF3X3Npbmtfc2V0X3dpbmRvd19pZCksCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19zZXRfY2FwcyksCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9kaXJlY3RkcmF3X3NpbmtfYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX2RyYXdfYm9yZGVycyksCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19zaG93X2ZyYW1lKSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX3NldHVwX2RkcmF3KSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX3dpbmRvd190aHJlYWQpLAotCSAgKGdzdF9kaXJlY3RkcmF3X3NpbmtfZ2V0X2RkcmF3Y2FwcyksCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19zdXJmYWNlX2NyZWF0ZSk6IE1ha2Ugc3VyZSB3ZSBjcmVhdGUgb3VyCi0JICBpbnRlcm5hbCB3aW5kb3cgb25seSB3aGVuIHdlIG5lZWQgaXQuIFRoYXQgd2lsbCBnaXZlIGEgY2hhbmNlIHRvCi0JICB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBwcmVwYXJlLXh3aW5kb3ctaWQgYnVzIG1lc3NhZ2UuIERyYXcKLQkgIGJsYWNrIGJvcmRlcnMgd2hlbiBrZWVwaW5nIGFzcGVjdCByYXRpby4gSGFuZGxlIHRoZSBjYXNlIHdoZXJlCi0JICBvdXIKLQkgIHJlbmRlcmluZyB3aW5kb3cgZGlzYXBwZWFycyAoY2xvc2VkIG9yIGVycm9ycykgbGlrZSBvdGhlciBzaW5rcwotCSAgZG8uIFZhcmlvdXMgODAgY29sdW1ucyBmaXhlcywgaW1wcm92ZSBzdGF0ZSBjaGFuZ2Ugb3JkZXIuIFRoYXQKLQkgIGVsZW1lbnQgY291bGQgbmVlZCBzb21lIG1vcmUgbG92ZS4KLQotMjAwOC0wMS0wNCAxODozMDoyMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvdGFnbGliLzogUmVtb3ZlIHVzZWxlc3MgdHlwZWRlZnMgd2l0aG91dCBuZXcgdHlwZSBuYW1lLiBGaXhlcyBhIHdhcm5pbmcgd2l0aCBnY2MgNC4zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguaDoKLQkgICogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5oOgotCSAgUmVtb3ZlIHVzZWxlc3MgdHlwZWRlZnMgd2l0aG91dCBuZXcgdHlwZSBuYW1lLiBGaXhlcyBhIHdhcm5pbmcgd2l0aAotCSAgZ2NjIDQuMy4KLQotMjAwOC0wMS0wMyAxMjoyNjowMyArMDAwMCAgSm9obiBNaWxsaWtpbiA8am1pbGxpa2luQGdtYWlsLmNvbT4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiBFbWl0IG1ldGFkYXRhIG1lc3NhZ2VzIHdoZW4gYSBQSUNUVVJFIGJsb2NrIGlzIGVuY291bnRlcmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSm9obiBNaWxsaWtpbiA8am1pbGxpa2luIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19zZXR1cF9zZWVrYWJsZV9kZWNvZGVyKSwKLQkgIChnc3RfZmxhY19kZWNfc2V0dXBfc3RyZWFtX2RlY29kZXIpLAotCSAgKGdzdF9mbGFjX25vcm1hbGl6ZV9waWN0dXJlX21pbWVfdHlwZSksCi0JICAoZ3N0X2ZsYWNfZXh0cmFjdF9waWN0dXJlX2J1ZmZlciksCi0JICAoZ3N0X2ZsYWNfZGVjX21ldGFkYXRhX2NhbGxiYWNrKToKLQkgIEVtaXQgbWV0YWRhdGEgbWVzc2FnZXMgd2hlbiBhIFBJQ1RVUkUgYmxvY2sgaXMgZW5jb3VudGVyZWQuCi0JICBGaXhlcyAjNTA2NzE1LgotCi0yMDA4LTAxLTAyIDEzOjU0OjEwICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aS5jOiBpbmNyZWFzZSByYW5rIGJlY2F1c2Ugbm8ga25vd24gaXNzdWVzIGFueW1vcmUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmkuYzoKLQkgIGluY3JlYXNlIHJhbmsgYmVjYXVzZSBubyBrbm93biBpc3N1ZXMgYW55bW9yZSAuLi4KLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSAgc2VuZCBzdWJ0aXRsZSBuYW1lIHRvIHRoZSBzcmNwYWQKLQotMjAwNy0xMi0zMSAxMzoyNzozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBJbXBsZW1lbnQgcmVkaXJlY3QgZm9yIHRoZSBERVNDUklCRSByZXBseS4gRml4ZXMgIzUwNjAyNS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZW5kKSwgKGdzdF9ydHNwc3JjX29wZW4pOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBJbXBsZW1lbnQgcmVkaXJlY3QgZm9yIHRoZSBERVNDUklCRSByZXBseS4gRml4ZXMgIzUwNjAyNS4KLQotMjAwNy0xMi0yOSAxNjo0ODozMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IEZpeCAneHl6IG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQnIGNvbXBpbGVyIHdhcm5pbmdzIGNhdXNlZCBieSBicm9rZW4gZ19hc3NlcnRfbm90X3JlYWNoZWQoKSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfd3JpdGUpOgotCSAgRml4ICd4eXogbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCcgY29tcGlsZXIgd2FybmluZ3MgY2F1c2VkCi0JICBieSBicm9rZW4gZ19hc3NlcnRfbm90X3JlYWNoZWQoKSBtYWNybyBpbiBHTGliLTIuMTUueCBhbmQgZG9uJ3QKLQkgIGFib3J0KCkgaW4gYW55IGNhc2UgYnV0IHByb3Blcmx5IHJlcG9ydCB0aGUgZXJyb3IuCi0KLTIwMDctMTItMjggMTE6NDQ6MjggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9zb3VwLzogVXNlIGdzdF90YWdfZnJlZWZvcm1fc3RyaW5nX3RvX3V0ZjgoKSBhbmQgcG9zdCByYWRpbyBzdGF0aW9uIGluZm8gYXMgdGFncyBvbiB0aGUgYnVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zb3VwL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBodHRwX3NyY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfdW5pY29kaWZ5KSwgKHNvdXBfZ290X2hlYWRlcnMpOgotCSAgVXNlIGdzdF90YWdfZnJlZWZvcm1fc3RyaW5nX3RvX3V0ZjgoKSBhbmQgcG9zdCByYWRpbyBzdGF0aW9uCi0JICBpbmZvIGFzIHRhZ3Mgb24gdGhlIGJ1cy4KLQotMjAwNy0xMi0yNiAxNjowMzo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgRml4ICd4eXogbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZCcgY29tcGlsZXIgd2FybmluZ3MgY2F1c2VkIGJ5IGJyb2tlbiBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpIG1hY3JvIGluIEdMaWItMi4xNS54IChpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9sb29wKToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfY2hhaW4pOgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiAoY29tcG9zaXRlX3BpeGVsKToKLQkgIEZpeCAneHl6IG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQnIGNvbXBpbGVyIHdhcm5pbmdzIGNhdXNlZAotCSAgYnkgYnJva2VuIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCkgbWFjcm8gaW4gR0xpYi0yLjE1LnggKGl0J3MKLQkgIG5vdCByZWFsbHkgbmljZSB0byBhYm9ydCBpbiBhbnkgY2FzZSkuIEZpeGVzICM1MDU3NDUuCi0KLTIwMDctMTItMjAgMTc6MDc6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC86IElnbm9yZSBtb3JlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvLmN2c2lnbm9yZToKLQkgICogZ3N0L3N3aXRjaC8uY3ZzaWdub3JlOgotCSAgSWdub3JlIG1vcmUuCi0KLTIwMDctMTItMTggMjM6MTc6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aXN1YnRpdGxlLmM6IFNtYWxsIHVuaXQgdGVzdCBmaXggKGhhcyBubyBwcmFjdGljYWwgaW1wYWN0IGF0IHRoZSBtb21lbnQsIHNpbmNlIHdlJ3JlIG9ubHkgZmVlZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aXN1YnRpdGxlLmM6IChjaGVja19jb3JyZWN0X2J1ZmZlcik6Ci0JICBTbWFsbCB1bml0IHRlc3QgZml4IChoYXMgbm8gcHJhY3RpY2FsIGltcGFjdCBhdCB0aGUgbW9tZW50LAotCSAgc2luY2Ugd2UncmUgb25seSBmZWVkaW5nIHV0ZjggYW5kIGhlbmNlIGp1c3QgY3JlYXRlIGEgc3ViLQotCSAgYnVmZmVyIGZvciB0aGUgb3V0cHV0KS4KLQotMjAwNy0xMi0xOCAyMToxMzowNSArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgQWRkIHNlZWtpbmcgc3VwcG9ydCBmb3IgYXZpIHN1YnRpdGxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmlzdWJ0aXRsZS5jOgotCSAgQWRkIHNlZWtpbmcgc3VwcG9ydCBmb3IgYXZpIHN1YnRpdGxlCi0KLTIwMDctMTItMTggMTc6NDA6MzQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuKjogUmVtb3ZlIHNvbWUgdW51c2VkIHZhcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZGVjX3Jlc2V0X2RlY29kZXJzKSwKLQkgIChnc3RfZmxhY19kZWNfdXBkYXRlX21ldGFkYXRhKSwgKGdzdF9mbGFjX2RlY19tZXRhZGF0YV9jYWxsYmFjayksCi0JICAoZ3N0X2ZsYWNfZGVjX3dyaXRlKToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgUmVtb3ZlIHNvbWUgdW51c2VkIHZhcnMuCi0JICBEbyBtb3JlIGNsZWFudXAgb2YgbGVmdG92ZXIgZXZlbnRzIGFuZCB0YWdzLgotCSAgT3V0cHV0IHRhZ3MgYWZ0ZXIgdGhlIHNlZ21lbnQgZXZlbnQuIEZpeGVzICM1MDQwMTguCi0KLTIwMDctMTItMTggMTQ6MzE6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzogRGV0ZWN0IG90aGVyIFVURiBieXRlIG9yZGVyIG1hcmtlcnMgYW5kIGNvbnZlcnQgdG8gVVRGLTggYXMgYXBwcm9wcmlhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOiAoSVNfQk9NX1VURjgpLCAoSVNfQk9NX1VURjE2X0JFKSwKLQkgIChJU19CT01fVVRGMTZfTEUpLCAoSVNfQk9NX1VURjMyX0JFKSwgKElTX0JPTV9VVEYzMl9MRSksCi0JICAoZ3N0X2F2aV9zdWJ0aXRsZV9leHRyYWN0X2ZpbGUpLCAoZ3N0X2F2aV9zdWJ0aXRsZV9wYXJzZV9nYWIyX2NodW5rKToKLQkgIERldGVjdCBvdGhlciBVVEYgYnl0ZSBvcmRlciBtYXJrZXJzIGFuZCBjb252ZXJ0IHRvIFVURi04IGFzCi0JICBhcHByb3ByaWF0ZS4KLQotMjAwNy0xMi0xOCAxMzozMDoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS4qOiBSZWZhY3RvciBhIGJpdDsgZml4IG5hbWUgZXh0cmFjdGlvbjsgZG9uJ3QgYXNzdW1lIGFsbCB0aGUgZGF0YSBpbiB0aGUgY2h1bmsgaXMgYWN0dWFsbHkgc3ViLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jOiAoc3JjX3RlbXBsYXRlKSwKLQkgIChnc3RfYXZpX3N1YnRpdGxlX2V4dHJhY3RfdXRmOF9maWxlKSwKLQkgIChnc3RfYXZpX3N1YnRpdGxlX3BhcnNlX2dhYjJfY2h1bmspLCAoZ3N0X2F2aV9zdWJ0aXRsZV9jaGFpbiksCi0JICAoZ3N0X2F2aV9zdWJ0aXRsZV9iYXNlX2luaXQpLCAoZ3N0X2F2aV9zdWJ0aXRsZV9jbGFzc19pbml0KSwKLQkgIChnc3RfYXZpX3N1YnRpdGxlX2luaXQpLCAoZ3N0X2F2aV9zdWJ0aXRsZV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmg6Ci0JICBSZWZhY3RvciBhIGJpdDsgZml4IG5hbWUgZXh0cmFjdGlvbjsgZG9uJ3QgYXNzdW1lIGFsbCB0aGUgZGF0YQotCSAgaW4gdGhlIGNodW5rIGlzIGFjdHVhbGx5IHN1YnRpdGxlIGRhdGEsIHRoZXJlIG1heSBiZSBwYWRkaW5nIGF0Ci0JICB0aGUgZW5kOyBmaXggR1NUX0VMRU1FTlRfRVJST1IgdXNhZ2U7IHN0b3JlIGV4dHJhY3RlZCBzdWJ0aXRsZQotCSAgZmlsZSBzbyBpdCdzIHRoZXJlIHRvIHNlbmQgYWdhaW4gYWZ0ZXIgYSBzZWVrIChmb3IgZnV0dXJlIHVzZSkuCi0KLTIwMDctMTItMTggMDk6MTM6MTIgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIEFkZCBhdmkgc3VidGl0bGUgZWxlbWVudCBmb3IgYnVnICM0NDIwMzQuIE5lZWQgc2Vla2luZyBzdXBwb3J0IGFuZCBtb3JlIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBjb252ZXJzaW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdmkvZ3N0YXZpLmM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpc3VidGl0bGUuYzoKLQkgICogZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5oOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpc3VidGl0bGUuYzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgQWRkIGF2aSBzdWJ0aXRsZSBlbGVtZW50IGZvciBidWcgIzQ0MjAzNC4gTmVlZCBzZWVraW5nIHN1cHBvcnQKLQkgIGFuZCBtb3JlIHN1cHBvcnQgZm9yIGNoYXJhY3RlciBjb252ZXJzaW9uLgotCi0yMDA3LTEyLTE4IDA5OjA3OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBNYWtlZmlsZS5hbTogSW5jbHVkZSBjb21tb24vd2luMzIubWFrIGZvciBDUkxGIGNoZWNrIG9mIHdpbjMyIHByb2plY3QgZmlsZXMgKHNlZSAjMzkzNjI2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgIEluY2x1ZGUgY29tbW9uL3dpbjMyLm1hayBmb3IgQ1JMRiBjaGVjayBvZiB3aW4zMiBwcm9qZWN0Ci0JICBmaWxlcyAoc2VlICMzOTM2MjYpLgotCSAgKiB3aW4zMi92czYvbGliZ3N0cG5nLmRzcDoKLQkgIEZpeCBsaW5lIGVuZGluZ3MgYW5kIGRvIGN2cyBhZG1pbiAta2IuCi0KLTIwMDctMTItMTcgMjE6MTI6MjggKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy4qOiBXaGVuIHN1YnNlcXVlbnQgZmlsZXMgYXJlIHJlYWQsIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIHNlbmQgYW4gRU9TIGluc3RlYWQgb2YgY2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oOgotCSAgV2hlbiBzdWJzZXF1ZW50IGZpbGVzIGFyZSByZWFkLCBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCBzZW5kCi0JICBhbiBFT1MgaW5zdGVhZCBvZiBjYXVzaW5nIGFuIGVycm9yLgotCi0yMDA3LTEyLTE2IDIzOjQzOjQ2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvanBlZy9nc3RqcGVnZGVjLmM6IEFjdHVhbGx5IGRyb3AgdGhlIGJ1ZmZlcnMgd2hpY2ggYXJlIG91dHNpZGUgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIHNlZ21lbnQgaW5zdGVhZCBvZiBqdXN0IGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfY2hhaW4pOgotCSAgQWN0dWFsbHkgZHJvcCB0aGUgYnVmZmVycyB3aGljaCBhcmUgb3V0c2lkZSB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQKLQkgIHNlZ21lbnQgaW5zdGVhZCBvZiBqdXN0IGVtaXR0aW5nIGEgV0FSTklORy4KLQotMjAwNy0xMi0xNCAxODo0OTozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy4qOiBTZW5kIHNlZ21lbnRzIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQuIEZpeGVzICM1MDIxODcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZGVjX21ldGFkYXRhX2NhbGxiYWNrKSwKLQkgIChnc3RfZmxhY19kZWNfd3JpdGUpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBTZW5kIHNlZ21lbnRzIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQuIEZpeGVzICM1MDIxODcuCi0JICBGaXggc2VnbWVudCBzZWVraW5nIGFuZCBhIGJ1bmNoIG9mIG90aGVyIHNlZWtpbmcgY2FzZXMuCi0KLTIwMDctMTItMTQgMTA6MTc6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiBQYXJzZSBXT0FGIGZyYW1lcyBhbmQgcHV0IHRoZSByZXN1bHQgaW50byBHU1RfVEFHX0NPTlRBQ1QsIHdoaWNoIGlzIHdoZXJlIGl0IHdvdWxkIGVuZCB1cC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAocGFyc2VfdXJsX2xpbmtfZnJhbWUpOgotCSAgUGFyc2UgV09BRiBmcmFtZXMgYW5kIHB1dCB0aGUgcmVzdWx0IGludG8gR1NUX1RBR19DT05UQUNULAotCSAgd2hpY2ggaXMgd2hlcmUgaXQgd291bGQgZW5kIHVwIGlmIHRoZSBzYW1lIGluZm9ybWF0aW9uIHdhcwotCSAgcHV0IGluIGEgdm9yYmlzIGNvbW1lbnQgKGRvbid0IHRoaW5rIGl0J3Mgd29ydGggYWRkaW5nIGEKLQkgIG5ldyBVUkkgdGFnIGZvciB0aGlzKS4gRml4ZXMgIzQ4ODExMi4KLQotMjAwNy0xMi0xMSAyMjoyOToxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBXZSBuZWVkIGNvcmUvYmFzZSAwLjEwLjE1IG9yIGxhdGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFdlIG5lZWQgY29yZS9iYXNlIDAuMTAuMTUgb3IgbGF0ZXIuCi0KLTIwMDctMTItMTEgMTY6NDc6MTIgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEZpeCByZWdyZXNzaW9uIGluIHN0cmVhbSBudW1iZXJpbmcuIEZpeGVzICM1MDI2NTUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgc2t5bmV0IGJlPgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aV9tdXhfc3RhcnRfZmlsZSk6Ci0JICBGaXggcmVncmVzc2lvbiBpbiBzdHJlYW0gbnVtYmVyaW5nLiBGaXhlcyAjNTAyNjU1LgotCi0yMDA3LTEyLTExIDE2OjM5OjM5ICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy4qOiBEbyBub3QgdHJ5IHRvIHVucGF1c2UgSS9PIGluIHRoZSAicXVldWVkIiBzdGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdvdXRlciBDbG9ldGVucyA8d291dGVyIGF0IG1pbmQgZG90IGJlPgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoX2RvX2luaXQpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfY2xhc3NfaW5pdCksIChnc3Rfc291cGh0dHBfc3JjX2luaXQpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfZGlzcG9zZSksIChnc3Rfc291cGh0dHBfc3JjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19nZXRfcHJvcGVydHkpLCAodW5pY29kaWZ5KSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3VuaWNvZGlmeSksIChnc3Rfc291cGh0dHBfc3JjX2NyZWF0ZSksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19zdGFydCksIChnc3Rfc291cGh0dHBfc3JjX3N0b3ApLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfdW5sb2NrKSwgKGdzdF9zb3VwaHR0cF9zcmNfdW5sb2NrX3N0b3ApLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfZ2V0X3NpemUpLCAoZ3N0X3NvdXBodHRwX3NyY19pc19zZWVrYWJsZSksCi0JICAoc291cF9nb3RfaGVhZGVycyksIChzb3VwX2dvdF9ib2R5KSwgKHNvdXBfZmluaXNoZWQpLAotCSAgKHNvdXBfZ290X2NodW5rKSwgKHNvdXBfcmVzcG9uc2UpLCAoc291cF9wYXJzZV9zdGF0dXMpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfdXJpX2dldF90eXBlKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3VyaV9nZXRfcHJvdG9jb2xzKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3VyaV9nZXRfdXJpKSwgKGdzdF9zb3VwaHR0cF9zcmNfdXJpX3NldF91cmkpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfdXJpX2hhbmRsZXJfaW5pdCk6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBEbyBub3QgdHJ5IHRvIHVucGF1c2UgSS9PIGluIHRoZSAicXVldWVkIiBzdGF0ZS4KLQkgIFJlb3JnYW5pc2UgYSBidW5jaCBvZiB0aGluZ3MgYW5kIGNsZWFudXBzLgotCSAgVXNlcyBHX0dVSU5UNjRfRk9STUFUIGluc3RlYWQgb2YgaGFyZC1jb2RpbmcgJWxsdS4KLQkgIFNlZSAjNTAyMzM1LgotCi0yMDA3LTEyLTExIDE2OjMxOjQ5ICswMDAwICBXYWktTWluZyBIbyA8d2VicmVnYm94QHlhaG9vLmNvLnVrPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuKjogVXNlIGhpZ2hlciBwZXJmb3JtYW5jZSBzdGFydC1jb2RlIHNlYXJjaGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFdhaS1NaW5nIEhvIDx3ZWJyZWdib3ggYXQgeWFob28gZG90IGNvIGRvdCB1az4KLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6IChnc3RfcnRwX2gyNjRfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfaDI2NF9wYXlfZmluYWxpemUpLCAoZ3N0X3J0cF9oMjY0X3BheV9zZXRjYXBzKSwKLQkgIChuZXh0X3N0YXJ0X2NvZGUpLCAoaXNfbmFsX2VxdWFsKSwgKGdzdF9ydHBfaDI2NF9wYXlfZGVjb2RlX25hbCksCi0JICAoZW5jb2RlX2Jhc2U2NCksIChnc3RfcnRwX2gyNjRfcGF5X3BhcnNlX3Nwc19wcHMpLAotCSAgKGdzdF9ydHBfaDI2NF9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NHBheS5oOgotCSAgVXNlIGhpZ2hlciBwZXJmb3JtYW5jZSBzdGFydC1jb2RlIHNlYXJjaGluZy4KLQkgIFBhcnNlIE5BTHMgYW5kIHN0b3JlIFNQUywgUFBTIGFuZCBwcm9maWxlIGluIHRoZSBjYXBzIHNvIHRoYXQgdGhleSBjYW4KLQkgIGJlIHVzZWQgaW4gdGhlIFNEUC4gRml4ZXMgIzUwMjgxNC4KLQotMjAwNy0xMi0xMSAxMTo1MDo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL3Y0bDIvOiBJbml0IHNvbWUgc3RydWN0cyB0byB6ZXJvIGJlZm9yZSB3ZSBwYXNzIHRoZW0gdG8gaW9jdGwsIHdoaWNoIGF2b2lkcyB2YWxncmluZCB3YXJuaW5ncy4gIEFsc28gZml4IGEgc21hbGwgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZmlsbF9saXN0cyk6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX2ZpbGxfZm9ybWF0X2xpc3QpOgotCSAgSW5pdCBzb21lIHN0cnVjdHMgdG8gemVybyBiZWZvcmUgd2UgcGFzcyB0aGVtIHRvIGlvY3RsLCB3aGljaAotCSAgYXZvaWRzIHZhbGdyaW5kIHdhcm5pbmdzLiAgQWxzbyBmaXggYSBzbWFsbCBtZW1vcnkgbGVhay4KLQotMjAwNy0xMi0xMSAxMTowNTo1NyArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiBDb3B5IHRpbWVzdGFtcCBmcm9tIGlucHV0IHRvIG91dHB1dC4gTm90IHZlcnkgcGVyZmVjdCB5ZXQgYnV0IGJldHRlciB0aGFuIG5vdGhpbmcuIEZpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiAoZ3N0X211bHRpcGFydF9kZW11eF9jaGFpbik6Ci0JICBDb3B5IHRpbWVzdGFtcCBmcm9tIGlucHV0IHRvIG91dHB1dC4gTm90IHZlcnkgcGVyZmVjdCB5ZXQgYnV0IGJldHRlcgotCSAgdGhhbiBub3RoaW5nLiBGaXhlcyAjNTAzMDIzLgotCi0yMDA3LTEyLTA5IDE2OjQ5OjA5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogQWxzbyBwcmludCBhIHVzZWZ1bCBlcnJvciBtZXNzYWdlIHdpdGggdGhlIG9sZCBXYXZwYWNrIEFQSSBpZiBwb3NzaWJsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfY2hhaW4pOgotCSAgQWxzbyBwcmludCBhIHVzZWZ1bCBlcnJvciBtZXNzYWdlIHdpdGggdGhlIG9sZCBXYXZwYWNrIEFQSQotCSAgaWYgcG9zc2libGUuCi0KLTIwMDctMTItMDkgMTY6MzQ6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogTW9yZSBidWlsZCBmaXhlcyBmb3Igb2xkIGxpYndhdnBhY2sgdmVyc2lvbnM6IGluY2x1ZGUgY29uZmlnLmggc28gdGhhdCBXQVZQQUNLX09MRF9BUEkgaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzoKLQkgIE1vcmUgYnVpbGQgZml4ZXMgZm9yIG9sZCBsaWJ3YXZwYWNrIHZlcnNpb25zOiBpbmNsdWRlIGNvbmZpZy5oIHNvCi0JICB0aGF0IFdBVlBBQ0tfT0xEX0FQSSBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIGRldGVjdGVkOyBvbmx5IHVzZQotCSAgV2F2cGFja0dldEVycm9yTWVzc2FnZSBpZiBpdCBpcyBhdmFpbGFibGUuIFRoaXMgZml4ZXMgdGhlIGJ1aWxkCi0JICBvbiBkZWJpYW4gc3RhYmxlIGZvciBtZS4KLQotMjAwNy0xMi0wOSAxNjoyMTowMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay86IFdvcmthcm91bmQgdGhlIG5vbi1leGlzdGFuY2Ugb2YgV2F2cGFja0dldENoYW5uZWxNYXNrIGluIFdhdnBhY2sgdmVyc2lvbnMgYmVsb3cgNC40MC4wLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19jaGFpbik6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NyZWF0ZV9zcmNfcGFkKToKLQkgIFdvcmthcm91bmQgdGhlIG5vbi1leGlzdGFuY2Ugb2YgV2F2cGFja0dldENoYW5uZWxNYXNrIGluIFdhdnBhY2sKLQkgIHZlcnNpb25zIGJlbG93IDQuNDAuMC4KLQotMjAwNy0xMi0wOSAwNToxMzo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBjb25maWd1cmUuYWM6IEFuZCBub3cgZG8gaXQgcmlnaHQgZm9yIHJlYWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBBbmQgbm93IGRvIGl0IHJpZ2h0IGZvciByZWFsLi4uCi0KLTIwMDctMTItMDkgMDU6MDk6NTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBDb3JyZWN0bHkgcmVzZXQgJExJQlMgdG8gbm90IGNvbnRhaW4gLWxtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIENvcnJlY3RseSByZXNldCAkTElCUyB0byBub3QgY29udGFpbiAtbG0uCi0KLTIwMDctMTItMDkgMDU6MDI6MTcgKzAwMDAgIEt3YW5nIFl1bCBTZW8gPGt3YW5neXVsLnNlb0BnbWFpbC5jb20+Ci0KLQkgIEZpeCBjb21waWxhdGlvbiB3aXRoIE1TVkMgYnkgdXNpbmcgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlKCkgYW5kIGNoZWNraW5nIGZvciByaW50KCkgYW5kIGltcGxlbWVudGluZyBpdCBvdXJzZWxmIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBhIHBhdGNoIGJ5OiBLd2FuZyBZdWwgU2VvIDxrd2FuZ3l1bCBkb3Qgc2VvIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5LmM6Ci0JICAoZ3N0X2NhaXJvX3RpbWVfb3ZlcmxheV9wcmludF9zbXB0ZV90aW1lKToKLQkgIEZpeCBjb21waWxhdGlvbiB3aXRoIE1TVkMgYnkgdXNpbmcgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlKCkKLQkgIGFuZCBjaGVja2luZyBmb3IgcmludCgpIGFuZCBpbXBsZW1lbnRpbmcgaXQgb3Vyc2VsZiBpZiBpdCBkb2Vzbid0Ci0JICBleGlzdC4KLQotMjAwNy0xMi0wOSAwNDoyOTowOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBjb25maWd1cmUuYWM6IERvbid0IGRlZmluZSBHU1RfRElTQUJMRV9ERVBSRUNBVEVEIGZvciByZWxlYXNlcy4gRml4ZXMgIzQ5ODE4MS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEb24ndCBkZWZpbmUgR1NUX0RJU0FCTEVfREVQUkVDQVRFRCBmb3IgcmVsZWFzZXMuIEZpeGVzICM0OTgxODEuCi0KLTIwMDctMTItMDggMTY6NDc6MzMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBzeXMvb3NzL2dzdG9zc2hlbHBlci5jOiBWZXJpZnkgdGhhdCB0aGUgZm9ybWF0IHJldHVybmVkIGFmdGVyIHRoZSBpb2N0bCBpcyB0aGUgb25lIHdlIHJlcXVlc3RlZC4gSXQgaXMgdmFsaWQgZm9yIHRoZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5jOgotCSAgVmVyaWZ5IHRoYXQgdGhlIGZvcm1hdCByZXR1cm5lZCBhZnRlciB0aGUgaW9jdGwgaXMgdGhlIG9uZQotCSAgd2UgcmVxdWVzdGVkLiBJdCBpcyB2YWxpZCBmb3IgdGhlIGlvY3RsIHRvIHN1Y2NlZWQgd2hpbGUKLQkgIHN1YnN0aXR1dGluZyBhbiBhbHRlcm5hdGUgJ3N1cHBvcnRlZCcgc2FtcGxlIGZvcm1hdC4KLQotMjAwNy0xMi0wNyAyMDowNzo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL29zcy86IFBvc3QgZGVjZW50IChhbmQgdHJhbnNsYXRlZCkgZXJyb3IgbWVzc2FnZSB3aGVuIHdlIGNhbid0IG9wZW4gdGhlIGF1ZGlvIGRldmljZSBmb3Igc29tZSByZWFzb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NhdWRpby5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3Nfc2lua19vcGVuKToKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuYzogKGdzdF9vc3Nfc3JjX29wZW4pOgotCSAgUG9zdCBkZWNlbnQgKGFuZCB0cmFuc2xhdGVkKSBlcnJvciBtZXNzYWdlIHdoZW4gd2UgY2FuJ3QKLQkgIG9wZW4gdGhlIGF1ZGlvIGRldmljZSBmb3Igc29tZSByZWFzb24uCi0KLTIwMDctMTItMDcgMTk6Mjk6MzkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBzeXMvb3NzLzogQWxsb3cgdGhlIEFVRElPREVWIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHJlZGlyZWN0IHVzIHRvIGEgZGlmZmVyZW50IGRlZmF1bHQgT1NTIGRldmljZSwgbGlrZSBzdW5hdWRpb3NpbmsuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuYzoKLQkgIEFsbG93IHRoZSBBVURJT0RFViBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byByZWRpcmVjdCB1cwotCSAgdG8gYSBkaWZmZXJlbnQgZGVmYXVsdCBPU1MgZGV2aWNlLCBsaWtlIHN1bmF1ZGlvc2luayBkb2VzCi0JICBvbiBTb2xhcmlzIChtYWtlcyBhdWRpbyBwbGF5IGF1dG9tYXRpY2FsbHkgb24gU3VuUmF5cykuCi0KLTIwMDctMTItMDYgMTI6NDU6NTAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogRml4IGNvbXBpbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfdHJhbnNmb3JtX2lwKToKLQkgIEZpeCBjb21waWxhdGlvbi4KLQotMjAwNy0xMi0wNiAxMjo0MjoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiBEb24ndCBwcm9jZXNzIGJ1ZmZlcnMgaW4gcGFzc3Rocm91Z2ggbW9kZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgKGdzdF9paXJfZXF1YWxpemVyX3RyYW5zZm9ybV9pcCk6Ci0JICBEb24ndCBwcm9jZXNzIGJ1ZmZlcnMgaW4gcGFzc3Rocm91Z2ggbW9kZS4KLQotMjAwNy0xMi0wNiAxMjozNzo0MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyLzogVGhlIHRyYW5zZm9ybSgpIG1ldGhvZHMgYXJlIG5vdCBjYWxsZWQgaW4gcGFzc3Rocm91Z2ggbW9kZSBzbyB0aGVyZSdzIG5vIG5lZWQgZm9yIGNoZWNraW5nIGlmIHRoZSBlbGVtZW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuYzogKGJwd3NpbmNfdHJhbnNmb3JtKToKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6IChscHdzaW5jX3RyYW5zZm9ybSk6Ci0JICBUaGUgdHJhbnNmb3JtKCkgbWV0aG9kcyBhcmUgbm90IGNhbGxlZCBpbiBwYXNzdGhyb3VnaCBtb2RlIHNvCi0JICB0aGVyZSdzIG5vIG5lZWQgZm9yIGNoZWNraW5nIGlmIHRoZSBlbGVtZW50IGlzIGluIHBhc3N0aHJvdWdoIG1vZGUuCi0KLTIwMDctMTItMDYgMTI6Mjk6MjYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci86IFN5bmMgdGhlIEdPYmplY3QgcHJvcGVydGllcyB3aXRoIHRoZSBjb250cm9sbGVyIGV2ZW4gaW4gcGFzc3Rocm91Z2ggbW9kZSB0byBnZXQgY29uc2lzdGVudCBwcm9wZXJ0eSB2YWx1ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChicHdzaW5jX3RyYW5zZm9ybSk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAobHB3c2luY190cmFuc2Zvcm0pOgotCSAgU3luYyB0aGUgR09iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIGNvbnRyb2xsZXIgZXZlbiBpbiBwYXNzdGhyb3VnaAotCSAgbW9kZSB0byBnZXQgY29uc2lzdGVudCBwcm9wZXJ0eSB2YWx1ZXMuCi0KLTIwMDctMTItMDYgMTI6MTE6MjkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1ZGlvZngvOiBUaGUgdHJhbnNmb3JtX2lwKCkgbWV0aG9kcyBzaG91bGQgZG8gbm90aGluZyBpZiBpbiBwYXNzdGhyb3VnaCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOiAoZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVieXNoZXZmcmVxYmFuZC5jOgotCSAgKGdzdF9hdWRpb19jaGVieXNoZXZfZnJlcV9iYW5kX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0LmM6Ci0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2xpbWl0X3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOiAoZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYzogKGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2lwKToKLQkgIFRoZSB0cmFuc2Zvcm1faXAoKSBtZXRob2RzIHNob3VsZCBkbyBub3RoaW5nIGlmIGluIHBhc3N0aHJvdWdoIG1vZGUuCi0JICBJdCBtaWdodCBnZXQgbm9uLXdyaXRhYmxlIGJ1ZmZlcnMgaW4gdGhhdCBjYXNlIGJ1dCB0aGUgYnVmZmVyIG1pZ2h0Ci0JICBhcyB3ZWxsIGJlIHdyaXRhYmxlLgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6IChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtKToKLQkgIFRoZSB0cmFuc2Zvcm0oKSBtZXRob2RzIHdvbid0IGJlIGNhbGxlZCBpbiBwYXNzdGhyb3VnaCBtb2RlIGFuZAotCSAgb3RoZXJ3aXNlIHRoZSBidWZmZXIgaXMgYWx3YXlzIHdyaXRhYmxlIHNvIGRvbid0IGNoZWNrIGhlcmUuCi0KLTIwMDctMTItMDYgMTE6NDY6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBGaXggc2Vla2luZyBpbiAud2F2IGZpbGVzIGFnYWluICgjNTAxNzc1KS4gIFNvbWUgcGVvcGxlIHNlZW0gdG8gdGhpbmsgdGhleSBkb24ndCBuZWVkIHRvIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCk6Ci0JICBGaXggc2Vla2luZyBpbiAud2F2IGZpbGVzIGFnYWluICgjNTAxNzc1KS4gIFNvbWUgcGVvcGxlIHNlZW0gdG8gdGhpbmsKLQkgIHRoZXkgZG9uJ3QgbmVlZCB0byB0ZXN0IHRoZWlyIGNoYW5nZXMgd2hlbiB0aGV5J3JlIGp1c3QgJ3JlZmxvd2luZycKLQkgIHNvbWUgY29kZS4KLQotMjAwNy0xMi0wNSAxNjowNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay4qOiBGaXggZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JICAoZ3N0X2F1dG9fdmlkZW9fc2lua19jbGFzc19pbml0KSwgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZGlzcG9zZSksCi0JICAoZ3N0X2F1dG9fdmlkZW9fc2lua19pbml0KSwKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX2NyZWF0ZV9lbGVtZW50X3dpdGhfcHJldHR5X25hbWUpLAotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZmluZF9iZXN0KSwKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1dG9fdmlkZW9fc2lua19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmg6Ci0JICBGaXggZG9jcy4KLQkgIFVzZSBzYW1lIGVycm9yIHJlcG9ydGluZyBjb2RlIGFzIGF1dG9hdWRpb3NpbmsuCi0JICBBZGQgcHJvcGVydHkgdG8gZmlsdGVyIHNpbmtzIGJhc2VkIG9uIGNhcHMuIE9ubHkgc2VsZWN0IHJhdyB2aWRlbyBzaW5rcwotCSAgYnkgZGVmYXVsdCBmb3IgYmFja3dhcmRzIGNvbXBhdC4KLQkgIEFQSTogR3N0QXV0b1ZpZGVvU2luazo6ZmlsdGVyLWNhcHMKLQotMjAwNy0xMi0wNSAxNjowMjoxNSArMDAwMCAgVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSAgZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay4qOiBBZGQgcHJvcGVydHkgdG8gZmlsdGVyIHNpbmtzIGJhc2VkIG9uIGNhcHMuIE9ubHkgc2VsZWN0IHJhdyBhdWRpbyBzaW5rcyBieSBkZWZhdWx0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUb21taSBNecO2aMOkbmVuICA8ZXh0LXRvbW1pIGRvdCBteW9oYW5lbiBhdCBub2tpYSBkb3QgY29tPgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19jbGFzc19pbml0KSwgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZGlzcG9zZSksCi0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19pbml0KSwgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZmluZF9iZXN0KSwKLQkgIChnc3RfYXV0b19hdWRpb19zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmg6Ci0JICBBZGQgcHJvcGVydHkgdG8gZmlsdGVyIHNpbmtzIGJhc2VkIG9uIGNhcHMuIE9ubHkgc2VsZWN0IHJhdyBhdWRpbyBzaW5rcwotCSAgYnkgZGVmYXVsdCBmb3IgYmFja3dhcmRzIGNvbXBhdC4gIEZpeGVzICM0MTc0MjAuCi0JICBBUEk6IEdzdEF1dG9BdWRpb1Npbms6OmZpbHRlci1jYXBzCi0KLTIwMDctMTEtMjkgMTE6NDA6MTUgKzAwMDAgIEFyZWsgS29yYmlrIDxhcmthZGluaUBnbWFpbC5jb20+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBJbml0aWFsaXNlIGxpYm9pbCBpbiBwbHVnaW5faW5pdCgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBcmVrIEtvcmJpayA8YXJrYWRpbmlAZ21haWwuY29tPgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKHBsdWdpbl9pbml0KToKLQkgIEluaXRpYWxpc2UgbGlib2lsIGluIHBsdWdpbl9pbml0KCkKLQotMjAwNy0xMS0yOSAxMDo0OToxOCArMDAwMCAgV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLQotCSAgY29uZmlndXJlLmFjOiBCdW1wIGxpYnNvdXAgcmVxdWlyZW1lbnQgYXMgbGlic291cCBkb2VzIG5vdCBzdXBwb3J0IGFzeW5jIGNsaWVudCBvcGVyYXRpb24gcHJpb3IgdG8gdmVyc2lvbiAyLjIuMTA0IGFuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlciBhdCBtaW5kIGRvdCBiZT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgQnVtcCBsaWJzb3VwIHJlcXVpcmVtZW50IGFzIGxpYnNvdXAgZG9lcyBub3Qgc3VwcG9ydCBhc3luYyBjbGllbnQKLQkgIG9wZXJhdGlvbiBwcmlvciB0byB2ZXJzaW9uIDIuMi4xMDQgYW5kIGl0IGhhcyBzb21lIGxlYWtzLgotCSAgKiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOiAoZ3N0X3NvdXBodHRwX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX2luaXQpLCAoZ3N0X3NvdXBodHRwX3NyY19kaXNwb3NlKSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3NldF9wcm9wZXJ0eSksIChnc3Rfc291cGh0dHBfc3JjX2NyZWF0ZSksCi0JICAoZ3N0X3NvdXBodHRwX3NyY19zdGFydCksIChnc3Rfc291cGh0dHBfc3JjX3N0b3ApLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfdW5sb2NrKSwgKGdzdF9zb3VwaHR0cF9zcmNfdW5sb2NrX3N0b3ApLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfZ2V0X3NpemUpLCAoc291cF9nb3RfaGVhZGVycyksIChzb3VwX2dvdF9ib2R5KSwKLQkgIChzb3VwX2ZpbmlzaGVkKSwgKHNvdXBfZ290X2NodW5rKSwgKHNvdXBfcmVzcG9uc2UpLAotCSAgKHNvdXBfc2Vzc2lvbl9jbG9zZSk6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBJbXBsZW1lbnQgdW5sb2NrKCkuCi0JICBQaWNrcyB1cCB0aGUgc2l6ZSBmcm9tIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgYW5kIGVtaXQgYSBkdXJhdGlvbgotCSAgbWVzc2FnZS4KLQkgIERvbid0IGxlYWsgdGhlIEdNYWluQ29udGV4dCBvYmplY3QuCi0JICBGaXhlcyAjNTAwMDk5LgotCi0yMDA3LTExLTI5IDEwOjM0OjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiBQb3N0IGVycm9yIGJlZm9yZSBzZW5kaW5nIEVPUy4gRml4ZXMgIzQ5OTE3OC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY190YXNrKToKLQkgIFBvc3QgZXJyb3IgYmVmb3JlIHNlbmRpbmcgRU9TLiBGaXhlcyAjNDk5MTc4LgotCi0yMDA3LTExLTI4IDIxOjU0OjUwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHdpbjMyL3ZzNi86IEFkZCBhIHByb2plY3QgZmlsZSBmb3IgbGliZ3N0cG5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM2L2dzdF9wbHVnaW5zX2dvb2QuZHN3OgotCSAgKiB3aW4zMi92czYvbGliZ3N0cG5nLmRzcDoKLQkgIEFkZCBhIHByb2plY3QgZmlsZSBmb3IgbGliZ3N0cG5nCi0KLTIwMDctMTEtMjggMTc6NDg6NDUgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmM6IENvZGUgYmVhdXRpZmljYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzogKGdzdF9ydHBfaDI2M19kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2gyNjNfZGVwYXlfcHJvY2Vzcyk6Ci0JICBDb2RlIGJlYXV0aWZpY2F0aW9uLgotCSAgQWRkZWQgZGVidWcgc3RhdGVtZW50cy4KLQkgIERvbid0IGJpdC1zaGlmdCBldmVyeXRoaW5nLCBqdXN0IGRvIG9wZXJhdGlvbnMgb24gbGFzdC9maXJzdCBieXRlCi0JICBpbnN0ZWFkLgotCi0yMDA3LTExLTI3IDExOjExOjA4ICswMDAwICBKYXlhcmFtYSBTLiBTYW50YW5hIDxzdW5kYXJzYW50YW5hQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzogRml4IHdyb25nIGNvbXBhcmlzb24gaW4gb3ZlcnJ1biBjaGVjay4gRml4ZXMgIzQ5OTIzOSBzb21lIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKYXlhcmFtYSBTLiBTYW50YW5hIDxzdW5kYXJzYW50YW5hIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6IChnc3RfcnRwX21wNGFfZGVwYXlfcHJvY2Vzcyk6Ci0JICBGaXggd3JvbmcgY29tcGFyaXNvbiBpbiBvdmVycnVuIGNoZWNrLiBGaXhlcyAjNDk5MjM5IHNvbWUgbW9yZS4KLQotMjAwNy0xMS0yNyAwMDowMTo0MSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuKjogRml4IGgyNjMgZGVwYXlsb2FkZXIgc28gdGhhdCBBTlkgaDI2MyBkZWNvZGVyIGNhbiBoYW5kbGUgdGhlIG91dGdvaW5nIHN0cmVhbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOiAoZ3N0X3J0cF9oMjYzX2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfaDI2M19kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuaDoKLQkgIEZpeCBoMjYzIGRlcGF5bG9hZGVyIHNvIHRoYXQgQU5ZIGgyNjMgZGVjb2RlciBjYW4gaGFuZGxlIHRoZSBvdXRnb2luZwotCSAgc3RyZWFtLgotCi0yMDA3LTExLTI2IDE5OjE3OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS4qOiBGaXggZGVwYXlsb2FkaW5nIHdoZW4gbXVsdGlwbGUgZnJhbWVzIGFyZSBpbnNpZGUgb25lIFJUUCBwYWNrZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIFBhdGggYnk6IEpheWFyYW1hIFMuIFNhbnRhbmEgPHN1bmRhcnNhbnRhbmEgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzogKGdzdF9ydHBfbXA0YV9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wNGFfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5Lmg6Ci0JICBGaXggZGVwYXlsb2FkaW5nIHdoZW4gbXVsdGlwbGUgZnJhbWVzIGFyZSBpbnNpZGUgb25lIFJUUCBwYWNrZXQuCi0JICBGaXhlcyAjNDk5MjM5LgotCi0yMDA3LTExLTI2IDEyOjI2OjIwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiBBZGQgR0FQLWZsYWcgc3VwcG9ydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIEFkZCBHQVAtZmxhZyBzdXBwb3J0LgotCi0yMDA3LTExLTI2IDEyOjAxOjExICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOiBSZWFkIHRoZSBJIGZsYWcgZm9yIE1vZGUgQSBoMjYzIHJ0cCBzdHJlYW0gYW5kIHNldCB0aGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5jOiAoZ3N0X3J0cF9oMjYzX2RlcGF5X3Byb2Nlc3MpOgotCSAgUmVhZCB0aGUgSSBmbGFnIGZvciBNb2RlIEEgaDI2MyBydHAgc3RyZWFtIGFuZCBzZXQgdGhlCi0JICBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCBhY2NvcmRpbmdseS4KLQkgIEZpeGVzICM0OTkzODMKLQotMjAwNy0xMS0yNiAxMDowODoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogVXNlIGRpc3Bvc2UgYW5kIGZpbmFsaXplLiBEaXNwb3NlIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBVc2UgZGlzcG9zZSBhbmQgZmluYWxpemUuIERpc3Bvc2UgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KLQotMjAwNy0xMS0yNiAxMDowNDo0OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogUmVtb3ZlIHNvbWUgZGVhZCBjb2RlIGFuZCBkbyBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIFJlbW92ZSBzb21lIGRlYWQgY29kZSBhbmQgZG8gY2xlYW51cHMuCi0KLTIwMDctMTEtMjYgMDk6MTM6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzogSW1wcm92ZSB0aGUgdGVzdHMgYnkgYWxsb3dpbmcgdG8gc2V0IGEgdGFyZ2V0IHN0YXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JICBJbXByb3ZlIHRoZSB0ZXN0cyBieSBhbGxvd2luZyB0byBzZXQgYSB0YXJnZXQgc3RhdGUuCi0KLTIwMDctMTEtMjYgMDk6MDQ6MTcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOiBEb24ndCBjaGVjayB0aGUgY2FwcyBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBpZiB0aGV5J3JlIGVxdWFsIHNvbWUgb3RoZXIgY2Fwcy4gVGhlIGNhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRG9uJ3QgY2hlY2sgdGhlIGNhcHMgb2YgdGhlIG91dHB1dCBidWZmZXIgaWYgdGhleSdyZSBlcXVhbCBzb21lCi0JICBvdGhlciBjYXBzLiBUaGUgY2FwcyBjYW4gY2hhbmdlIGluIGEgYmFja3dhcmQgY29tcGF0aWJsZSB3YXkKLQkgIGFuZCBkaWQgYXQgdGhpcyBwb2ludC4KLQotMjAwNy0xMS0yNCAxNDo1NTowNCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogSW1wbGVtZW50IHJldmVyc2UgcGxheWJhY2sgc3VwcG9ydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0xMS0yNCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9maW5kX3NlZ21lbnQpLAotCSAgKGdzdF9xdGRlbXV4X21vdmVfc3RyZWFtKSwgKGdzdF9xdGRlbXV4X2RvX3NlZWspLAotCSAgKGdzdF9xdGRlbXV4X3NlZWtfdG9fcHJldmlvdXNfa2V5ZnJhbWUpLAotCSAgKGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQpLCAoZ3N0X3F0ZGVtdXhfYWR2YW5jZV9zYW1wbGUpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpLCAoZ3N0X3F0ZGVtdXhfbG9vcCk6IEltcGxlbWVudAotCSAgcmV2ZXJzZSBwbGF5YmFjayBzdXBwb3J0LgotCi0yMDA3LTExLTIxIDA5OjU2OjU0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9maWx0ZXIvOiBQb3N0IGEgR1NUX01FU1NBR0VfTEFURU5DWSBpZiB0aGUgbGF0ZW5jeSBjaGFuZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoYnB3c2luY19zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogKGxwd3NpbmNfc2V0X3Byb3BlcnR5KToKLQkgIFBvc3QgYSBHU1RfTUVTU0FHRV9MQVRFTkNZIGlmIHRoZSBsYXRlbmN5IGNoYW5nZXMuCi0KLTIwMDctMTEtMjEgMDg6MjE6MTAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2VxdWFsaXplci86IFJlbW92ZSBwcmVzZXQgaWZhY2UgYWdhaW4uIFdlJ2xsIHJlLWFkZCB0aGlzIGFmdGVyIGl0cyBiZWVuIHJlbGVhc2VkIGluIC1nb29kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jOgotCSAgUmVtb3ZlIHByZXNldCBpZmFjZSBhZ2Fpbi4gV2UnbGwgcmUtYWRkIHRoaXMgYWZ0ZXIgaXRzIGJlZW4gcmVsZWFzZWQKLQkgIGluIC1nb29kLgotCi0yMDA3LTExLTIwIDEzOjE0OjQwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uYzogQWxzbyBzZXQgdGhlIGNoYW5uZWwgbGF5b3V0IG9uIHRoZSBXYXZwYWNrIGNhcHMgaWYgd2UncmUgaGF2aW5nIGEgbW9ubyBsYXlvdXQuIE9mIGNvdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uYzogKGdzdF93YXZwYWNrX3NldF9jaGFubmVsX2xheW91dCk6Ci0JICBBbHNvIHNldCB0aGUgY2hhbm5lbCBsYXlvdXQgb24gdGhlIFdhdnBhY2sgY2FwcyBpZiB3ZSdyZSBoYXZpbmcKLQkgIGEgbW9ubyBsYXlvdXQuIE9mIGNvdXJzZSBvbmx5IGRvIGl0IGZvciAiYXVkaW8veC13YXZwYWNrIi4KLQotMjAwNy0xMS0yMCAxMzowODo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay86IEFkZCBzdXBwb3J0IGZvciBlbmNvZGluZywgcGFyc2luZyBhbmQgZGVjb2RpbmcgbXVsdGljaGFubmVsIGZpbGVzIHdpdGggdXAgdG8gOCBjaGFubmVscy4gVGhpcyBhbHNvIGltcHIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmM6Ci0JICAoZ3N0X3dhdnBhY2tfZ2V0X2RlZmF1bHRfY2hhbm5lbF9tYXNrKSwKLQkgIChnc3Rfd2F2cGFja19zZXRfY2hhbm5lbF9sYXlvdXQpLAotCSAgKGdzdF93YXZwYWNrX2dldF9kZWZhdWx0X2NoYW5uZWxfcG9zaXRpb25zKSwKLQkgIChnc3Rfd2F2cGFja19nZXRfY2hhbm5lbF9tYXNrX2Zyb21fcG9zaXRpb25zKSwKLQkgIChnc3Rfd2F2cGFja19zZXRfY2hhbm5lbF9tYXBwaW5nKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2NvbW1vbi5oOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfcmVzZXQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19zaW5rX3NldF9jYXBzKSwgKGdzdF93YXZwYWNrX2RlY19jaGFpbik6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX3Jlc2V0KSwKLQkgIChnc3Rfd2F2cGFja19lbmNfaW5pdCksIChnc3Rfd2F2cGFja19lbmNfc2lua19zZXRfY2FwcyksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcpLCAoZ3N0X3dhdnBhY2tfZW5jX3B1c2hfYmxvY2spLAotCSAgKGdzdF93YXZwYWNrX2VuY19maXhfY2hhbm5lbF9vcmRlciksIChnc3Rfd2F2cGFja19lbmNfY2hhaW4pLAotCSAgKGdzdF93YXZwYWNrX2VuY19yZXdyaXRlX2ZpcnN0X2Jsb2NrKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfc2lua19ldmVudCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaW5kZXhfYXBwZW5kX2VudHJ5KSwgKGdzdF93YXZwYWNrX3BhcnNlX3Jlc2V0KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zY2FuX3RvX2ZpbmRfc2FtcGxlKSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zaW5rX2V2ZW50KSwgKGdzdF93YXZwYWNrX3BhcnNlX2NyZWF0ZV9zcmNfcGFkKSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9wdXNoX2J1ZmZlciksIChnc3Rfd2F2cGFja19wYXJzZV9sb29wKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgZW5jb2RpbmcsIHBhcnNpbmcgYW5kIGRlY29kaW5nIG11bHRpY2hhbm5lbAotCSAgZmlsZXMgd2l0aCB1cCB0byA4IGNoYW5uZWxzLiBUaGlzIGFsc28gaW1wcm92ZXMgdGhlIHJvYnVzdG5lc3MKLQkgIG9mIHBhcnNpbmcgcXVpdGUgYSBiaXQuCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYzoKLQkgIChnc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX3JlYWRfYnl0ZXMpLAotCSAgKGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfZ2V0X3BvcyksCi0JICAoZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9zZXRfcG9zX2FicyksCi0JICAoZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9zZXRfcG9zX3JlbCksCi0JICAoZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9wdXNoX2JhY2tfYnl0ZSksCi0JICAoZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9nZXRfbGVuZ3RoKSwKLQkgIChnc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX2Nhbl9zZWVrKSwKLQkgIChnc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX3dyaXRlX2J5dGVzKToKLQkgIEltcHJvdmUgZGVidWdnaW5nLgotCi0yMDA3LTExLTIwIDEyOjIwOjM4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLio6IERvbid0IHJlbGVhc2UgdGhlIHBuZy1tZW1vcnkgZnJvbSB3aXRoaW4gdGhlIGNhbGxiYWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmg6Ci0JICBEb24ndCByZWxlYXNlIHRoZSBwbmctbWVtb3J5IGZyb20gd2l0aGluIHRoZSBjYWxsYmFjay4KLQotMjAwNy0xMS0yMCAxMjoxMToxMyArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogRG9uJ3QgbGVhayBidWZmZXIgZGF0YSBtZW1vcnkuIEZpeGVzICM0OTgzOTUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBSZW7DqSBTdGFkbGVyIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRvdCBkZT4KLQkgICogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIERvbid0IGxlYWsgYnVmZmVyIGRhdGEgbWVtb3J5LiBGaXhlcyAjNDk4Mzk1LgotCi0yMDA3LTExLTIwIDExOjQ2OjI4ICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOiBUZXN0cyBmb3IgIzQ5ODM5NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZG90IGRlPgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgVGVzdHMgZm9yICM0OTgzOTUuCi0KLTIwMDctMTEtMjAgMTE6NDE6MTMgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBGaXggYnVpbGQgb24gTWFjIE9TIFggMTAuNQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTExLTIwICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmM6IChnc3RfdGFnX2xpYl9tdXhfcmVuZGVyX3RhZyksCi0JICAoZ3N0X3RhZ19saWJfbXV4X2FkanVzdF9ldmVudF9vZmZzZXRzKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90aGVvcmFfZXh0ZW5zaW9uKToKLQkgICogc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cuaDoKLQkgICogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lm06IEZpeCBidWlsZCBvbiBNYWMgT1MgWCAxMC41Ci0KLTIwMDctMTEtMTkgMjA6MzA6MTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2VxdWFsaXplci86IEFjdGl2YXRlIHByZXNldCBpZmFjZSBhbmQgdXBsb2FkIHR3byBwcmVzZXRzIGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JICBBY3RpdmF0ZSBwcmVzZXQgaWZhY2UgYW5kIHVwbG9hZCB0d28gcHJlc2V0cyBoZXJlLgotCi0yMDA3LTExLTE2IDA1OjUyOjU1ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6IENoYW5nZSBzdHJjYXNlY21wKCkgdG8gZ19zdHJjYXNlY21wKCkuICBGaXhlcyAjNDk3MjkyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSAgQ2hhbmdlIHN0cmNhc2VjbXAoKSB0byBnX3N0cmNhc2VjbXAoKS4gIEZpeGVzICM0OTcyOTIuCi0KLTIwMDctMTEtMTUgMTg6MTk6MTkgKzAwMDAgIEpvcmRpIEphZW4gUGFsbGFyZXMgPGpvcmRpanBAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuKjogRmlsbCB0aGUgTVRVIHdpdGggYXMgbWFueSBwYWNrZXRzIGFzIHBvc3NpYmxlLiBGaXhlcyAjNDkxMzIzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSm9yZGkgSmFlbiBQYWxsYXJlcyA8am9yZGlqcCBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuYzogKGdzdF9ydHBfbXAydF9wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDJ0X3BheV9pbml0KSwgKGdzdF9ydHBfbXAydF9wYXlfZmluYWxpemUpLAotCSAgKGdzdF9ydHBfbXAydF9wYXlfZmx1c2gpLCAoZ3N0X3J0cF9tcDJ0X3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5Lmg6Ci0JICBGaWxsIHRoZSBNVFUgd2l0aCBhcyBtYW55IHBhY2tldHMgYXMgcG9zc2libGUuIEZpeGVzICM0OTEzMjMuCi0KLTIwMDctMTEtMTUgMTc6NDc6NDMgKzAwMDAgIFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS5teW9oYW5lbkBub2tpYS5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRml4IHNvbWUgbW9yZSBsZWFrcy4gRml4ZXMgIzQ5NzAwNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gIDxleHQtdG9tbWkgZG90IG15b2hhbmVuIGF0IG5va2lhIGRvdCBjb20+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpOgotCSAgRml4IHNvbWUgbW9yZSBsZWFrcy4gRml4ZXMgIzQ5NzAwNy4KLQotMjAwNy0xMS0xNSAxNzozNToxOCArMDAwMCAgVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBGaXggMyBwYWQgbGVha3MuIEZpeGVzICM0OTY5ODMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUb21taSBNecO2aMOkbmVuICA8ZXh0LXRvbW1pIGRvdCBteW9oYW5lbiBhdCBub2tpYSBkb3QgY29tPgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zdHJlYW1fZnJlZSksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90Y3ApOgotCSAgRml4IDMgcGFkIGxlYWtzLiBGaXhlcyAjNDk2OTgzLgotCi0yMDA3LTExLTE1IDE3OjI2OjI1ICswMDAwICBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotCi0JICBBZGRlZCBIVFRQIHNvdXJjZSBiYXNlZCBvbiBsaWJzb3VwLiBGaXhlcyAjNDk3MDIwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogV291dGVyIENsb2V0ZW5zIDx3b3V0ZXIgYXQgbWluZCBkb3QgYmU+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvc291cC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzogKF9kb19pbml0KSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX2Jhc2VfaW5pdCksIChnc3Rfc291cGh0dHBfc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfaW5pdCksIChnc3Rfc291cGh0dHBfc3JjX2Rpc3Bvc2UpLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9zb3VwaHR0cF9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX2NyZWF0ZSksIChnc3Rfc291cGh0dHBfc3JjX3N0YXJ0KSwKLQkgIChnc3Rfc291cGh0dHBfc3JjX3N0b3ApLCAoZ3N0X3NvdXBodHRwX3NyY191bmxvY2spLAotCSAgKGdzdF9zb3VwaHR0cF9zcmNfc2V0X2xvY2F0aW9uKSwgKHNvdXBfZ290X2NodW5rKSwgKHNvdXBfcmVzcG9uc2UpLAotCSAgKHNvdXBfc2Vzc2lvbl9jbG9zZSksIChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmg6Ci0JICBBZGRlZCBIVFRQIHNvdXJjZSBiYXNlZCBvbiBsaWJzb3VwLiBGaXhlcyAjNDk3MDIwLgotCi0yMDA3LTExLTE1IDE3OjAxOjMyICswMDAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW5Abm9raWEuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiBGaXggc21hbGwgbGVhay4gRml4ZXMgIzQ5NzAxNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gIDxleHQtdG9tbWkgZG90IG15b2hhbmVuIGF0IG5va2lhIGRvdCBjb20+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6IChnc3RfcnRwX2gyNjRfZGVwYXlfc2V0Y2Fwcyk6Ci0JICBGaXggc21hbGwgbGVhay4gRml4ZXMgIzQ5NzAxNy4KLQotMjAwNy0xMS0xNSAxNjozMTozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvOiBBZGQgc3VwcHBvcnQgZm9yIHRoZW9yYSBpbiBxdWlja3RpbWUgYWNjb3JkaW5nIHRvIFhpcGhRVC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9xdGRlbXV4X3ByZXBhcmVfY3VycmVudF9zYW1wbGUpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpLCAocXRkZW11eF9wYXJzZV90aGVvcmFfZXh0ZW5zaW9uKSwKLQkgIChxdGRlbXV4X3BhcnNlX25vZGUpLCAocXRkZW11eF9wYXJzZV90cmFrKSwgKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzoKLQkgIEFkZCBzdXBwcG9ydCBmb3IgdGhlb3JhIGluIHF1aWNrdGltZSBhY2NvcmRpbmcgdG8gWGlwaFFULgotCi0yMDA3LTExLTE1IDEyOjIyOjEwICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIEFsd2F5cyBjb3B5IGJ1ZmZlcnMgYnkgZGVmYXVsdCAoaGFuZGxlIHNhZmVyIHdpdGggYnVnZ2VkIGRyaXZlcnMpIGFuZCBhZGRlZCBhIHByb3BlcnR5IHRvIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIG1tYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBbHdheXMgY29weSBidWZmZXJzIGJ5IGRlZmF1bHQgKGhhbmRsZSBzYWZlciB3aXRoIGJ1Z2dlZCBkcml2ZXJzKSBhbmQgYWRkZWQgYSBwcm9wZXJ0eSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBtbWFwIGVmZmVjdGl2ZWx5IChubyBjb3B5IGlmIHBvc3NpYmxlKSB3aGVuIGFwcGxpY2F0aW9uIHdhbnRzIHRvLiBGaXhlczogIzQ4MDU1Ny4KLQotMjAwNy0xMS0xNCAyMTozOTo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4LzogV2UgZG9uJ3Qgd2FudCB0aGUgc2FtZSBzdHJpbmcgbXVsdGlwbGUgdGltZXMgaW4gYSB0YWcgbGlzdCBmb3IgdGhlIHNhbWUgdGFnIGV2ZXIsIGZvciBhbnkgdGFnLCBub3QganVzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuYzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuaDoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDN2Ml90YWdfdG9fdGFnbGlzdCk6Ci0JICBXZSBkb24ndCB3YW50IHRoZSBzYW1lIHN0cmluZyBtdWx0aXBsZSB0aW1lcyBpbiBhIHRhZyBsaXN0IGZvciB0aGUKLQkgIHNhbWUgdGFnIGV2ZXIsIGZvciBhbnkgdGFnLCBub3QganVzdCBmb3IgR1NUX1RBR19HRU5SRSwgc28gbWFrZSBzdXJlCi0JICB0aGlzIGRvZXNuJ3QgaGFwcGVuIGFuZCByZW1vdmUgc3BlY2lhbC1jYXNlIGNvZGUgZm9yIEdTVF9UQUdfR0VOUkUuCi0KLTIwMDctMTEtMTQgMjE6MDQ6MTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6IFdyaXRlIEdTVF9UQUdfTVVTSUNCUkFJTlpfRElTQ0lEIGFuZCBHU1RfVEFHX0NEREFfQ0REQl9ESVNDSUQgaW50byBJRDN2MiBUWFhYIGZyYW1lcyAoZml4ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6IChhZGRfbXVzaWNicmFpbnpfdGFnKSwgKGFkZF9mdW5jcyk6Ci0JICBXcml0ZSBHU1RfVEFHX01VU0lDQlJBSU5aX0RJU0NJRCBhbmQgR1NUX1RBR19DRERBX0NEREJfRElTQ0lECi0JICBpbnRvIElEM3YyIFRYWFggZnJhbWVzIChmaXhlcyAjMzQ3ODQ4KS4KLQotMjAwNy0xMS0xNCAyMDozNDoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBEb24ndCBsZWFrIHNkcCBtZXNzYWdlIGNvbnRlbnRzIChmaXhlcyAjNDk2NzczKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19vcGVuKToKLQkgIERvbid0IGxlYWsgc2RwIG1lc3NhZ2UgY29udGVudHMgKGZpeGVzICM0OTY3NzMpLgotCSAgKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX2ZpbmFsaXplKToKLQkgIERvbid0IGxlYWsgVVJJIHN0cmluZy4KLQotMjAwNy0xMS0xNCAxOToxMDozNyArMDAwMCAgSnVsaWVuIFB1eWR0IDxqdWxpZW4ucHV5ZHRAbGFwb3N0ZS5uZXQ+Ci0KLQkgIGV4dC9yYXcxMzk0LzogSW1wbGVtZW50IEdzdFByb3BlcnR5UHJvYmUgaW50ZXJmYWNlIGFuZCBhZGQgImRldmljZS1uYW1lIiBwcm9wZXJ0eSwgc28gYXBwbGljYXRpb25zIGNhbiB1c2UgdGhpcyB0byBwci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSnVsaWVuIFB1eWR0IDxqdWxpZW4gZG90IHB1eWR0IGF0IGxhcG9zdGUgbmV0PgotCSAgKiBleHQvcmF3MTM5NC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3JhdzEzOTQvZ3N0MTM5NHByb2JlLmM6IChnc3RfMTM5NF9nZXRfZ3VpZF9hcnJheSksCi0JICAoZ3N0XzEzOTRfcHJvcGVydHlfcHJvYmVfZ2V0X3Byb3BlcnRpZXMpLAotCSAgKGdzdF8xMzk0X3Byb3BlcnR5X3Byb2JlX3Byb2JlX3Byb3BlcnR5KSwKLQkgIChnc3RfMTM5NF9wcm9wZXJ0eV9wcm9iZV9uZWVkc19wcm9iZSksCi0JICAoZ3N0XzEzOTRfcHJvcGVydHlfcHJvYmVfZ2V0X3ZhbHVlcyksCi0JICAoZ3N0XzEzOTRfcHJvcGVydHlfcHJvYmVfaW50ZXJmYWNlX2luaXQpLAotCSAgKGdzdF8xMzk0X3R5cGVfYWRkX3Byb3BlcnR5X3Byb2JlX2ludGVyZmFjZSk6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdDEzOTRwcm9iZS5oOiAoR1NUXzEzOTRfUFJPQkVfSCk6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOiAoX2RvX2luaXQpLCAoZ3N0X2R2MTM5NHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfZHYxMzk0c3JjX2luaXQpLCAoZ3N0X2R2MTM5NHNyY19kaXNwb3NlKSwKLQkgIChnc3RfZHYxMzk0c3JjX3NldF9wcm9wZXJ0eSksIChnc3RfZHYxMzk0c3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2R2MTM5NHNyY19kaXNjb3Zlcl9hdmNfbm9kZSksIChnc3RfZHYxMzk0c3JjX3F1ZXJ5KSwKLQkgIChnc3RfZHYxMzk0c3JjX3VwZGF0ZV9kZXZpY2VfbmFtZSk6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5oOgotCSAgSW1wbGVtZW50IEdzdFByb3BlcnR5UHJvYmUgaW50ZXJmYWNlIGFuZCBhZGQgImRldmljZS1uYW1lIiBwcm9wZXJ0eSwKLQkgIHNvIGFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoaXMgdG8gcHJvYmUgZm9yIGF2YWlsYWJsZSBkZXZpY2VzIGluIHRoZQotCSAgc2FtZSB3YXkgdGhleSBjYW4gYWxyZWFkeSB3aXRoIHY0bHNyYyBhbmQgdjRsMnNyYyAoaG93ZXZlciBob3JyaWJsZQotCSAgdGhpcyBwcm9wZXJ0eSBwcm9iZSBpbnRlcmZhY2UgbWF5IGJlKS4gRml4ZXMgIzM1ODg0MS4KLQotMjAwNy0xMS0xNCAxNzowMzoxOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGVjdHJ1bS5jOiBGaXggc3BlY3RydW0gdW5pdCB0ZXN0IGZvciB0aGUgbGF0ZXN0IHNwZWN0cnVtIGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCBzcGVjdHJ1bSB1bml0IHRlc3QgZm9yIHRoZSBsYXRlc3Qgc3BlY3RydW0gY2hhbmdlcy4KLQotMjAwNy0xMS0xNCAxNToyOTowNSArMDAwMCAgVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBEb24ndCBsZWFrIGV2ZW50LCBkb24ndCBsZWFrIHJhbmdlIChmaXhlcyAjNDk2NzUyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gIDxleHQtdG9tbWkgZG90IG15b2hhbmVuIGF0IG5va2lhIGRvdCBjb20+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2hhbmRsZV9zcmNfZXZlbnQpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX3JhbmdlKToKLQkgIERvbid0IGxlYWsgZXZlbnQsIGRvbid0IGxlYWsgcmFuZ2UgKGZpeGVzICM0OTY3NTIpLgotCi0yMDA3LTExLTE0IDEwOjIyOjQxICswMDAwICBBcmVrIEtvcmJpayA8YXJrYWRpbmlAZ21haWwuY29tPgotCi0JICBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiBEZXRlY3QgUkdCQS9CR1JBIGNvcnJlY3RseSBvbiBsaXR0bGUgZW5kaWFuIHN5c3RlbXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBcmVrIEtvcmJpayA8YXJrYWRpbmlAZ21haWwuY29tPgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiAoZ3N0X2FscGhhX2NvbG9yX3NldF9jYXBzKToKLQkgIERldGVjdCBSR0JBL0JHUkEgY29ycmVjdGx5IG9uIGxpdHRsZSBlbmRpYW4gc3lzdGVtcy4KLQotMjAwNy0xMS0xMyAxNzoxOToxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBidXQgdGhlIGNvcnJlc3BvbmRpbmcgaW9jdGwoKSBjYWxsIGZhaWxzIGV2ZW4gdGhvdWdoIHRoZSBkcml2ZXIgY2xhaW1zIHRvIHN1cHBvcnQgdGhpcyBmb3JtLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfcHJvYmVfY2Fwc19mb3JfZm9ybWF0KToKLQkgIElmIFZJRElPQ19FTlVNX0ZSQU1FU0laRVMgaXMgZGVmaW5lZCAoPSByZWNlbnQga2VybmVsKSwgYnV0IHRoZQotCSAgY29ycmVzcG9uZGluZyBpb2N0bCgpIGNhbGwgZmFpbHMgZXZlbiB0aG91Z2ggdGhlIGRyaXZlciBjbGFpbXMgdG8KLQkgIHN1cHBvcnQgdGhpcyBmb3JtYXQsIGp1c3QgZmFsbCBiYWNrIHRvIHRoZSBwcmUtMi42LjE5IGtlcm5lbAotCSAgcm91dGluZSB0aGF0IGNyZWF0ZXMgY2FwcyB3aXRoIHN1aXRhYmxlIGhlaWdodCBhbmQgd2lkdGggcmFuZ2VzCi0JICAoc2VlICM0NDgyNzgpLgotCi0yMDA3LTExLTEzIDE3OjAxOjA3ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBnc3QvbWF0cm9za2EvOiBFeHRyYWN0IHBhbGV0dGUgZGF0YSBmb3IgZHZkIHN1YnBpY3R1cmUgc3RyZWFtcyBhbmQgc2VuZCBpdCBkb3duc3RyZWFtIGFzIGN1c3RvbSBnc3RyZWFtZXIgZHZkIGV2ZW50ICguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBza3luZXQgYmU+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2R2ZF9jbHV0X2NoYW5nZV9ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2spLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgRXh0cmFjdCBwYWxldHRlIGRhdGEgZm9yIGR2ZCBzdWJwaWN0dXJlIHN0cmVhbXMgYW5kIHNlbmQgaXQKLQkgIGRvd25zdHJlYW0gYXMgY3VzdG9tIGdzdHJlYW1lciBkdmQgZXZlbnQgKGZpeGVzICM0NTM0MTcpLgotCi0yMDA3LTExLTEzIDE0OjUxOjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogSW1wbGVtZW50IG1pbmltYWwgcGFyc2luZyBvZiB0aGUgcGFzc2VkIHBhbmdvIGZvbnQgZGVzY3JpcHRpb24gc3RyaW5nLCBzbyBwYXNzaW5nIGEgZm9udCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0X292ZXJsYXlfZm9udF9pbml0KToKLQkgIEltcGxlbWVudCBtaW5pbWFsIHBhcnNpbmcgb2YgdGhlIHBhc3NlZCBwYW5nbyBmb250IGRlc2NyaXB0aW9uCi0JICBzdHJpbmcsIHNvIHBhc3NpbmcgYSBmb250IHNpemUgd29ya3MgdGhlIHNhbWUgYXMgd2l0aCB0aGUKLQkgIHBhbmdvIHRleHRvdmVybGF5IHBsdWdpbjsgZml4ZXMgIzQ1NTA4Ni4KLQkgIChNYXliZSB3ZSBjb3VsZCBqdXN0IHVzZSBwYW5nb2NhaXJvIGhlcmUgYXQgc29tZSBwb2ludCkuCi0KLTIwMDctMTEtMTMgMDY6NTU6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogUmV0dXJuIHRoZSByZXN1bHQgaW4gX2FjdGl2YXRlX3B1bGwoKS4gRG9uJ3QgcmVmIGVsZW1lbnQgdGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIFJldHVybiB0aGUgcmVzdWx0IGluIF9hY3RpdmF0ZV9wdWxsKCkuIERvbid0IHJlZiBlbGVtZW50IHRoZXJlLgotCi0yMDA3LTExLTEzIDA2OjIzOjUxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBSZWYgdGhlIGVsZW1lbnQgd2hlbiB3ZSBzaG91bGQsIGJ1dCBub3Qgd2hlbiB3ZSBpdHMgbm90IG5lZWRlZC4gUmVmbG93IHRoZSBldmVudF9oYW5kbGluZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwKLQkgIChnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQpLCAoZ3N0X3dhdnBhcnNlX3BhZF9xdWVyeSksCi0JICAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCk6Ci0JICBSZWYgdGhlIGVsZW1lbnQgd2hlbiB3ZSBzaG91bGQsIGJ1dCBub3Qgd2hlbiB3ZSBpdHMgbm90IG5lZWRlZC4gUmVmbG93Ci0JICB0aGUgZXZlbnRfaGFuZGxpbmcgdG8gbm90IGxlYWsgdGhlIGV2ZW50LgotCi0yMDA3LTExLTEyIDIxOjA3OjMxICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBnc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM6IEF2b2lkIHNsb3dkb3duIGZyb20gZGVub3JtYWxzIHdoZW4gcHJvY2Vzc2luZyBuZWFyLXNpbGVuY2UgaW5wdXQgZGF0YS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZG90IGRlPgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM6ICh5dWxlX2ZpbHRlcik6Ci0JICBBdm9pZCBzbG93ZG93biBmcm9tIGRlbm9ybWFscyB3aGVuIHByb2Nlc3NpbmcgbmVhci1zaWxlbmNlIGlucHV0IGRhdGEuCi0JICBTcG90dGVkIGJ5IEdhYnJpZWwgQm91dmlnbmUuIEZpeGVzICM0OTQ0OTkuCi0KLTIwMDctMTEtMTIgMTc6NTk6NDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUHJvcGVybHkgZnJlZSBRVERlbXV4U2FtcGxlcyBhcnJheS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCSAgKHF0ZGVtdXhfcGFyc2Vfc2FtcGxlcyk6Ci0JICBQcm9wZXJseSBmcmVlIFFURGVtdXhTYW1wbGVzIGFycmF5LgotCSAgUHJvdGVjdCB0YWJsZSB3cml0ZSB3aXRoIGEgc2Vuc2libGUgY2hlY2ssIHNvbWUgZmlsZXMgYXBwYXJlbnRseSBETyBjb250YWluCi0JICBzdHRzIHZhbHVlcyBzdGFydGluZyB3aXRoIDAgOigKLQotMjAwNy0xMS0xMiAxNzoyMTo1OSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvOiBEcm9wIEVPUyBpbiBfaGFuZGxlX3NyY19ldmVudCgpLiBGaXggdGhlIHJlZmNvdW50IGluIHF0ZGVtdXggdGhhdCBwcmV2aW91cyBjb21taXQgbWVzc2VkIHVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgRHJvcCBFT1MgaW4gX2hhbmRsZV9zcmNfZXZlbnQoKS4gRml4IHRoZSByZWZjb3VudCBpbiBxdGRlbXV4IHRoYXQKLQkgIHByZXZpb3VzIGNvbW1pdCBtZXNzZWQgdXAuCi0KLTIwMDctMTEtMTIgMTc6MDY6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogU3luYyBfaGFuZGxlX3NyY19ldmVudCgpIHdpdGggb2dnZGVtdXguIEluIGF2aWRlbXV4IGFsc28gcmVmIHRoZSBlbGVtZW50IHdoZW4gd2Ugc2hvdWxkLCBidXQgbm90IHdoZW4gd2UgaXRzIG5vLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBTeW5jIF9oYW5kbGVfc3JjX2V2ZW50KCkgd2l0aCBvZ2dkZW11eC4gSW4gYXZpZGVtdXggYWxzbyByZWYgdGhlCi0JICBlbGVtZW50IHdoZW4gd2Ugc2hvdWxkLCBidXQgbm90IHdoZW4gd2UgaXRzIG5vdCBuZWVkZWQuCi0KLTIwMDctMTEtMTEgMjE6MTI6MTAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0LzogQ2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBtYWduaXR1ZGUgdmFsdWVzIGdpdmVuIGluIHRoZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZGVtby5jOiAoZHJhd19zcGVjdHJ1bSk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOiAoZHJhd19zcGVjdHJ1bSk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAoZHJhd19zcGVjdHJ1bSk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQpOgotCSAgQ2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBtYWduaXR1ZGUgdmFsdWVzIGdpdmVuIGluIHRoZQotCSAgR3N0TWVzc2FnZXMgYnkgc3BlY3RydW0gdG8gZGVjaWJlbCBpbnN0ZWFkIG9mCi0JICBkZWNpYmVsK3RocmVzaG9sZC4KLQotMjAwNy0xMS0xMSAxMzo1NToyNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZXF1YWxpemVyLzogQW5kIGNvbnRpbnVlIHRvIHVwZGF0ZSBkb2NzLiBBbHNvIGluY2x1ZGUgc29tZSBzYW1wbGUgY29kZSBmb3IgdGhlIG4tYmFuZCBlcXVhbGl6ZXIgaW4gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JICBBbmQgY29udGludWUgdG8gdXBkYXRlIGRvY3MuIEFsc28gaW5jbHVkZSBzb21lIHNhbXBsZSBjb2RlCi0JICBmb3IgdGhlIG4tYmFuZCBlcXVhbGl6ZXIgaW4gdGhlIGRvY3MuCi0KLTIwMDctMTEtMTEgMTI6NTQ6MzEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2VxdWFsaXplci86IFVwZGF0ZSBkb2NzIGFuZCBwcm9wZXJ0eSByYW5nZXMgdG8gdGhlIHJlYWwgdmFsdWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSAgKGdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfM2JhbmRzX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jOgotCSAgVXBkYXRlIGRvY3MgYW5kIHByb3BlcnR5IHJhbmdlcyB0byB0aGUgcmVhbCB2YWx1ZXMuCi0KLTIwMDctMTEtMDkgMTc6Mjc6MDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IE5vdyBkbyB0aGUgc2NhbGluZyByaWdodCBmb3IgcmVhbC4gQWxzbyBpbml0aWFsaXplIGEgcHJldmlvdXNseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgTm93IGRvIHRoZSBzY2FsaW5nIHJpZ2h0IGZvciByZWFsLiBBbHNvIGluaXRpYWxpemUgYSBwcmV2aW91c2x5Ci0JICB1bmluaXRpYWxpemVkIHZhcmlhYmxlLgotCi0yMDA3LTExLTA4IDE1OjU2OjQ2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvZGVtby5jOiBNYWtlIGRlZmF1bHQgdm9sdW1lIGEgYml0IGxlc3MuIEltcHJvdmUgbGF5b3V0IGJ5IGdpdmluZyBtb3JlIHNwYWNlIHRvIHRoZSBzbGlkZXIgd2l0aCBiaWctbnVtYi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZGVtby5jOgotCSAgTWFrZSBkZWZhdWx0IHZvbHVtZSBhIGJpdCBsZXNzLiBJbXByb3ZlIGxheW91dCBieSBnaXZpbmcgbW9yZSBzcGFjZSB0bwotCSAgdGhlIHNsaWRlciB3aXRoIGJpZy1udW1iZXJzIGFuZCBlbmFibGUgZmlsbC4KLQotMjAwNy0xMS0wOCAxNTowMDo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogUmV0dXJuIEZBTFNFIGlmIHdlIGNhbid0IGhhbmRsZSBhIHF1ZXJ5IGluc3RlYWQgb2YgY2hhbmdpbmcgdGhlIGZvcm1hdC4gSWdub3JlIGZhY3Qgd2hlbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIFJldHVybiBGQUxTRSBpZiB3ZSBjYW4ndCBoYW5kbGUgYSBxdWVyeSBpbnN0ZWFkIG9mIGNoYW5naW5nIHRoZQotCSAgZm9ybWF0LiBJZ25vcmUgZmFjdCB3aGVuIGRlYWxpbmcgd2l0aCBtcGVnIGF1ZGlvLgotCi0yMDA3LTExLTA2IDEyOjIzOjM1ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOiBVc2UgYXV0b2F1ZGlvc2luayBpbnN0ZWFkIG9mIGFsc2FzaW5rIGFuZCB1c2UgYSBzaW5lIHdhdmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6IChtYWluKToKLQkgIFVzZSBhdXRvYXVkaW9zaW5rIGluc3RlYWQgb2YgYWxzYXNpbmsgYW5kIHVzZSBhIHNpbmUgd2F2ZS4KLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICBGaXggdGhlIG1hZ25pdHVkZSBjYWxjdWxhdGlvbi4KLQotMjAwNy0xMS0wMyAxOTo1MDoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZXF1YWxpemVyLzogQWxsb3cgc2V0dGluZyAwIGFzIGJhbmR3aWR0aCBhbmQgaGFuZGxlIHRoaXMgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZGVtby5jOiAobWFpbik6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9jbGFzc19pbml0KSwgKHNldHVwX2ZpbHRlcik6Ci0JICBBbGxvdyBzZXR0aW5nIDAgYXMgYmFuZHdpZHRoIGFuZCBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuCi0JICBBbHNvIGhhbmRsZSBhIGJhbmR3aWR0aCBvZiByYXRlLzIgcHJvcGVybHkuCi0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2NsYXNzX2luaXQpOgotCSAgTWFrZSBpdCBwb3NzaWJsZSB0byBnZW5lcmF0ZSBhIE4tYmFuZCBlcXVhbGl6ZXIgd2l0aCAxIGJhbmRzLiBUaGUKLQkgIHByZXZpb3VzIGxpbWl0IG9mIDIgd2FzIGNhdXNlZCBieSBhIG5vd2FkYXlzIHJlcGxhY2VkIGNhbGN1bGF0aW9uCi0JICBkb2luZyBhIGRpdmlzaW9uIGJ5IHplcm8gaWYgbnVtYmVyIG9mIGJhbmRzIHdhcyAxLgotCi0yMDA3LTExLTAyIDIxOjE2OjA5ICswMDAwICBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCi0JICBGaXggaW5jbHVkZXMgZm9yIE1TVkMgYW5kIEdMaWItMi4xNC4wICgjNDkyMzg4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9sZSBBbmRyw6kgVmFkbGEgUmF2bsOlcyAgPG9sZS5hbmRyZS5yYXZuYXNAdGFuZGJlcmcuY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSAgKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc2luay5oOgotCSAgRml4IGluY2x1ZGVzIGZvciBNU1ZDIGFuZCBHTGliLTIuMTQuMCAoIzQ5MjM4OCkuCi0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX3N0YXJ0KToKLQkgIE5vIG1vcmUgcGlwZSBkZWZpbmUgc2luY2UgR0xpYi0yLjE0LjAsIG5lZWQgdG8gdXNlIF9waXBlKCkgZGlyZWN0bHkuCi0KLTIwMDctMTEtMDIgMTc6MjM6NDMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9sYXcvbXVsYXctZGVjb2RlLio6IENhbGN1bGF0ZSBvdXRnb2luZyBidWZmZXIgZHVyYXRpb24gaWYgaW5jb21pbmcgYnVmZmVyIGRpZG4ndCBoYXZlIGEgdmFsaWQgZHVyYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzogKG11bGF3ZGVjX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X211bGF3ZGVjX2NoYWluKToKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaDoKLQkgIENhbGN1bGF0ZSBvdXRnb2luZyBidWZmZXIgZHVyYXRpb24gaWYgaW5jb21pbmcgYnVmZmVyIGRpZG4ndCBoYXZlIGEKLQkgIHZhbGlkIGR1cmF0aW9uLgotCi0yMDA3LTEwLTMwIDIxOjM3OjQ5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvOiBBZGQgc21hbGwgZGVtbyBhcHBsaWNhdGlvbiBiYXNlZCBvbiB0aGUgc3BlY3RydW0gZGVtbyBhcHBsaWNhdGlvbnMgdGhhdCBnZXRzIHdoaXRlIG5vaXNlIGFzIGlucHV0LCBwdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZGVtby5jOiAob25fd2luZG93X2Rlc3Ryb3kpLCAob25fY29uZmlndXJlX2V2ZW50KSwKLQkgIChvbl9nYWluX2NoYW5nZWQpLCAob25fYmFuZHdpZHRoX2NoYW5nZWQpLCAob25fZnJlcV9jaGFuZ2VkKSwKLQkgIChkcmF3X3NwZWN0cnVtKSwgKG1lc3NhZ2VfaGFuZGxlciksIChtYWluKToKLQkgIEFkZCBzbWFsbCBkZW1vIGFwcGxpY2F0aW9uIGJhc2VkIG9uIHRoZSBzcGVjdHJ1bSBkZW1vIGFwcGxpY2F0aW9ucwotCSAgdGhhdCBnZXRzIHdoaXRlIG5vaXNlIGFzIGlucHV0LCBwdXNoZXMgaXQgdGhyb3VnaCBhbiBlcXVhbGl6ZXIgYW5kCi0JICBwYWludHMgdGhlIHNwZWN0cnVtLiBGb3IgZXZlcnkgZXF1YWxpemVyIGJhbmQgaXQncyBwb3NzaWJsZSB0byBzZXQKLQkgIGdhaW4sIGJhbmR3aWR0aCBhbmQgZnJlcXVlbmN5LgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiAoc2V0dXBfZmlsdGVyKToKLQkgIEFkZCBzb21lIGd1YXJkaW5nIGFnYWluc3QgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbCBmcmVxdWVuY2llcyBhbmQKLQkgIGJhbmR3aWR0aHMuIEFsc28gaW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQuCi0KLTIwMDctMTAtMzAgMjE6MTg6NDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogUmVwbGFjZSBmaWx0ZXJzIHdpdGggYSBiaXQgYmV0dGVyIGZpbHRlcnMgZm9yIHdoaWNoIHdlIGNhbiBhY3R1YWxseSBmaW5kIGRvY3VtZW50YXRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYW5kX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfY2xhc3NfaW5pdCksIChhcmdfdG9fc2NhbGUpLAotCSAgKHNldHVwX2ZpbHRlciksIChnc3RfaWlyX2VxdWFsaXplcl9jb21wdXRlX2ZyZXF1ZW5jaWVzKToKLQkgIFJlcGxhY2UgZmlsdGVycyB3aXRoIGEgYml0IGJldHRlciBmaWx0ZXJzIGZvciB3aGljaCB3ZSBjYW4gYWN0dWFsbHkKLQkgIGZpbmQgZG9jdW1lbnRhdGlvbiwgd2hpY2ggZG9uJ3QgY2hhbmdlIGFueXRoaW5nIG9uIHplcm8gZ2FpbiwgZXRjLgotCSAgTWFrZSB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBiYW5kcyB3cml0YWJsZSwgcmVuYW1lIHRoZQotCSAgYmFuZC13aWR0aCBwcm9wZXJ0eSB0byBiYW5kd2lkdGggYW5kIGNoYW5nZSB0aGUJbWVhbmluZyB0byB0aGUKLQkgIGZyZXF1ZW5jeSBkaWZmZXJlbmNlIGJldHdlZW4gYmFuZGVkZ2VzLCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlCi0JICBnYWluIHByb3BlcnR5IHRvIGRCIGluc3RlYWQgb2YgYSB3ZWlyZCBzY2FsZSBiZXR3ZWVuIC0xCWFuZCAxIHRoYXQKLQkgIGhhcyBubyByZWFsIG1lYW5pbmcuCi0KLTIwMDctMTAtMzAgMTI6Mjk6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogU21hcnRlciBjb21iaW5lX2Zsb3cgY29kZSB0aGF0IGFsc28gZGVhbHMgd2l0aCBkb3duc3RyZWFtIGVsZW1lbnRzIHJldHVybmluZyBVTkVYUEVDVEVEIHdoZW4gdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQpLAotCSAgKGdzdF9xdGRlbXV4X2NvbWJpbmVfZmxvd3MpLCAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSk6Ci0JICBTbWFydGVyIGNvbWJpbmVfZmxvdyBjb2RlIHRoYXQgYWxzbyBkZWFscyB3aXRoIGRvd25zdHJlYW0gZWxlbWVudHMKLQkgIHJldHVybmluZyBVTkVYUEVDVEVEIHdoZW4gdGhleSByZWNlaXZlIGRhdGEgb3V0IG9mIHRoZSBzZWdtZW50Ci0JICBib3VuZGFyaWVzLiBGaXhlcyAjNDkxMzA1LgotCi0yMDA3LTEwLTI3IDE2OjA0OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IExldCdzIG5vdCBjYWxsIGV2ZXJ5IHJlcXVlc3QgcGFkIHdlIGNyZWF0ZSAic2luayVkIiwgdGhhdCdsbCBjcmVhdGUgcHJvYmxlbXMgaWYgdGhlcmUncyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IChnc3RfaW50ZXJsZWF2ZV9yZXF1ZXN0X25ld19wYWQpOgotCSAgTGV0J3Mgbm90IGNhbGwgZXZlcnkgcmVxdWVzdCBwYWQgd2UgY3JlYXRlICJzaW5rJWQiLCB0aGF0J2xsCi0JICBjcmVhdGUgcHJvYmxlbXMgaWYgdGhlcmUncyB0byBiZSBtb3JlIHRoYW4gb25lIHBhZC4gRml4ZXMgIzQ5MDY4Mi4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2ludGVybGVhdmUuYzoKLQkgIEFkZCB1bml0IHRlc3QgZm9yIHRoZSBhYm92ZS4KLQotMjAwNy0xMC0yNiAxNTowMzowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBGaXggJ3VudXNlZCB2YXJpYWJsZScgY29tcGlsZXIgd2FybmluZyB3aGVuIGNvbXBpbGluZyBhZ2FpbnN0IG9sZGVyIGtlcm5lbCBoZWFkZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIEZpeCAndW51c2VkIHZhcmlhYmxlJyBjb21waWxlciB3YXJuaW5nIHdoZW4gY29tcGlsaW5nIGFnYWluc3QKLQkgIG9sZGVyIGtlcm5lbCBoZWFkZXJzLgotCi0yMDA3LTEwLTI2IDEyOjEwOjQzICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIHVwZGF0ZSBzcGVjIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHNwZWMgZmlsZQotCi0yMDA3LTEwLTI1IDIzOjQyOjUyICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgSW1wcm92ZSBkb2N1bWVudGF0aW9uLCB3cml0ZSBzb21lIHRlc3RzIGZvciBtdWx0aWZpbGVzcmMvc2luayBmb3IgdXBjb21pbmcgLT5nb29kIHJldmlldy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgICogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL211bHRpZmlsZS5jOgotCSAgSW1wcm92ZSBkb2N1bWVudGF0aW9uLCB3cml0ZSBzb21lIHRlc3RzIGZvciBtdWx0aWZpbGVzcmMvc2luawotCSAgZm9yIHVwY29taW5nIC0+Z29vZCByZXZpZXcuCi0KLTIwMDctMTAtMjUgMTU6MDA6MTUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2MgKGFkZF9mdW5jcyk6IE1hcCBuZXcgU09SVE5BTUUgdGFncyB0byBJRDN2MiBUU09QLCBUU09BIGFuZCBUU09UIGZyYW1lcyAoIzQxNDUzOSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYyAoYWRkX2Z1bmNzKToKLQkgIE1hcCBuZXcgU09SVE5BTUUgdGFncyB0byBJRDN2MiBUU09QLCBUU09BIGFuZCBUU09UIGZyYW1lcyAoIzQxNDUzOSkuCi0KLTIwMDctMTAtMjQgMDc6MDE6NDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYzogSW1wcm92ZSB0aGUgdGVzdHMgYSBsaXR0bGUgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jOgotCSAgSW1wcm92ZSB0aGUgdGVzdHMgYSBsaXR0bGUgbW9yZS4KLQotMjAwNy0xMC0yMyAwODozODo1MCArMDAwMCAgWXVuIFpoZW5nIEh1IDx5dW56aGVuZy5odUBnbWFpbC5jb20+Ci0KLQkgIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOiBVc2UgZGVmYXVsdCBpbnB1dCBkZXZpY2UgaW5zdGVhZCBvZiBkZWZhdWx0IG91dHB1dCBkZXZpY2UgYW5kIG9ubHkgbWVtY3B5IGFjdHVhbCBhdmFpbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBwYXRjaCBieTogWXVuIFpoZW5nIEh1Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgVXNlIGRlZmF1bHQgaW5wdXQgZGV2aWNlIGluc3RlYWQgb2YgZGVmYXVsdCBvdXRwdXQgZGV2aWNlIGFuZAotCSAgb25seSBtZW1jcHkgYWN0dWFsIGF2YWlsYWJsZSBieXRlcy4KLQotMjAwNy0xMC0yMiAxOToxNDowOCArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IEZpeGVzICJ2NGwyc3JjICEgcXVldWUgISB4dmltYWdlc2luayIuIFRoZSBxdWV1ZSBhc2sgZm9yIGJ1ZmZlciB0b28gZWFybHkuIEl0IGlzIHRlbXBvcmFyeSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19ncmFiX2ZyYW1lKToKLQkgIEZpeGVzICJ2NGwyc3JjICEgcXVldWUgISB4dmltYWdlc2luayIuIFRoZSBxdWV1ZSBhc2sgZm9yIGJ1ZmZlciB0b28KLQkgIGVhcmx5LiBJdCBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgZmluZCBzb21ldGhpbmcgYmV0dGVyLgotCi0yMDA3LTEwLTIyIDE2OjQ0OjQ4ICswMDAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW5Abm9raWEuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IEZpeCByYWNlIHdoZW4gcGF1c2luZyBhIFJUU1Agc3RyZWFtIGluIGludGVybGVhdmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVG9tbWkgTXnDtmjDpG5lbiAgPGV4dC10b21taSBkb3QgbXlvaGFuZW4gYXQgbm9raWEgZG90IGNvbT4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfbG9vcF9pbnRlcmxlYXZlZCk6Ci0JICBGaXggcmFjZSB3aGVuIHBhdXNpbmcgYSBSVFNQIHN0cmVhbSBpbiBpbnRlcmxlYXZlZC4KLQkgIEZpeGVzICM0NzU3ODQuCi0KLTIwMDctMTAtMjIgMDk6NTM6MTYgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogVXNlIGNvcnJlY3QgdW5yZWYgZnVuY3Rpb24gZm9yIGJ1ZmZlcnMuICM0ODg4NDQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBhdCBheGlzIGNvbT4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IChnc3RfcnRwX21wNHZfcGF5X2ZpbmFsaXplKToKLQkgIFVzZSBjb3JyZWN0IHVucmVmIGZ1bmN0aW9uIGZvciBidWZmZXJzLiAjNDg4ODQ0LgotCi0yMDA3LTEwLTE5IDE5OjMzOjE2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEFkZCBzb21lIGRlYnVnIGFuZCBzeW5jIHRlc3RzIHdpdGggdGhlIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYzoKLQkgIEFkZCBzb21lIGRlYnVnIGFuZCBzeW5jIHRlc3RzIHdpdGggdGhlIGZpeC4KLQotMjAwNy0xMC0xOCAxNzowNDoxNCArMDAwMCAgTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlQHlhaG9vLmZyPgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy5jOiBXaGVuIHRoZSBzb2NrZXQgaXMgdXNlZCBieSB0aGUgYXBwIGZvciBvdGhlciBwdXJwb3NlcywgZG9uJ3QgZ2VuZXJhdGUgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYWN0aXYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IExhdXJlbnQgR2xheWFsICA8c3BnbGVnbGUgeWFob28gZnI+Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NyZWF0ZSk6Ci0JICBXaGVuIHRoZSBzb2NrZXQgaXMgdXNlZCBieSB0aGUgYXBwIGZvciBvdGhlciBwdXJwb3NlcywgZG9uJ3QgZ2VuZXJhdGUgYW4KLQkgIGVycm9yIGlmIHRoZXJlIGlzIGFjdGl2YXR5IG9uIHRoZSBzb2NrZXQgdGhhdCBpcyBub3QgZGF0YSByZWxhdGVkLgotCSAgRml4ZXMgIzQ4NzQ4OC4KLQotMjAwNy0xMC0xOCAxNDo1NTozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uIEdlbmVyYXRlIGFuIGVycm9yIHdoZW4gd2UgcnVuIG91dCBvZiBidWZmZXJzIGZvciBzb21lIHJlYXNvbi4gU2VlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJfYnVmZmVyX2ZpbmFsaXplKSwKLQkgIChnc3RfdjRsMnNyY19ncmFiX2ZyYW1lKToKLQkgIEFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4gR2VuZXJhdGUgYW4gZXJyb3Igd2hlbiB3ZSBydW4gb3V0IG9mIGJ1ZmZlcnMKLQkgIGZvciBzb21lIHJlYXNvbi4gU2VlICM0ODA1NTcuCi0KLTIwMDctMTAtMTggMDg6Mjc6NTYgKzAwMDAgIEFuZGVycyBTa2FyZ3JlbiA8YW5kZXJzLnNrYXJncmVuQGF4aXMuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzogU2V0IG1hcmtlciBiaXQgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQW5kZXJzIFNrYXJncmVuIDxhbmRlcnMgZG90IHNrYXJncmVuIGF0IGF4aXMgZG90IGNvbT4KLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6IChnc3RfcnRwX2gyNjRfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgU2V0IG1hcmtlciBiaXQgY29ycmVjdGx5LgotCi0yMDA3LTEwLTE4IDA2OjIwOjIxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IEFkZCBhIG1pc3NpbmcgYnJlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYW5kX3NldF9wcm9wZXJ0eSk6Ci0JICBBZGQgYSBtaXNzaW5nIGJyZWFrLgotCi0yMDA3LTEwLTE4IDA2OjE0OjQyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLio6IE1vdmUgYmFuZHdpZHRoIHByb3BlcnR5IHRvIHRoZSBzZXBhcmF0ZSBiYW5kcyBhbmQgYWRkIGZsb2F0NjQgc3VwcG9ydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSAgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9jbGFzc19pbml0KSwgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfaW5pdCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9nZXRfdHlwZSksIChnc3RfaWlyX2VxdWFsaXplcl9jbGFzc19pbml0KSwKLQkgIChzZXR1cF9maWx0ZXIpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfc2V0dXApOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oOgotCSAgTW92ZSBiYW5kd2lkdGggcHJvcGVydHkgdG8gdGhlIHNlcGFyYXRlIGJhbmRzIGFuZCBhZGQgZmxvYXQ2NCBzdXBwb3J0LgotCi0yMDA3LTEwLTE3IDE1OjA4OjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IFVzZSBhbGxvd2VkIG5hbWUgZm9yIHRoZSBHc3RTdHJ1Y3R1cmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfb3Blbik6Ci0JICBVc2UgYWxsb3dlZCBuYW1lIGZvciB0aGUgR3N0U3RydWN0dXJlLgotCi0yMDA3LTEwLTE3IDExOjQ3OjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBVc2UgbmV3IGdzdF9idXNfcG9wX2ZpbHRlcmVkKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSAgVXNlIG5ldyBnc3RfYnVzX3BvcF9maWx0ZXJlZCgpLgotCi0yMDA3LTEwLTEzIDEyOjAzOjQ0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvdjRsMi86IFdoZW4gcHJvYmluZyB0aGUgZm9ybWF0cyBhbmQgc2l6ZXMgYSBjYW1lcmEgc3VwcG9ydHMsIG1ha2Ugc3VyZSB0aGUgYmVzdCBvbmVzIChoaWdoZXN0IHJlc29sdXRpb24sIHByZWZlcmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIFdoZW4gcHJvYmluZyB0aGUgZm9ybWF0cyBhbmQgc2l6ZXMgYSBjYW1lcmEgc3VwcG9ydHMsIG1ha2UKLQkgIHN1cmUgdGhlIGJlc3Qgb25lcyAoaGlnaGVzdCByZXNvbHV0aW9uLCBwcmVmZXJlZCBmb3JtYXQpCi0JICBlbmQgdXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJvYmVkIGNhcHMgYW5kIHRoZSBsZXNzCi0JICBkZXNpcmFibGUgb25lcyBhdCB0aGUgZW5kLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUKLQkgIG9yZGVyIHdpdGhpbiB0aGUgY2FwcyBtYXR0ZXJzIGZvciB0aGluZ3MgbGlrZSBmaXhhdGlvbiBhbmQKLQkgIG5lZ290aWF0aW9uLCBpZS4gd2hhdCBmb3JtYXQgaXMgY2hvc2VuIGluIHRoZSBlbmQuCi0JICBXaXRoIHJlY2VudCBrZXJuZWxzLCB0aGUgY3VycmVudCBwcm9iaW5nIGNvZGUgd2lsbCBlbmQgdXAKLQkgIHF1ZXJ5aW5nIHRoZSBzdXBwb3J0ZWQgc2l6ZXMgZnJvbSBsb3dlc3QgcmVzb2x1dGlvbiB0bwotCSAgaGlnaGVzdCByZXNvbHV0aW9uLCBhZGRpbmcgdGhlbSB0byB0aGUgcHJvYmVkIGNhcHMgaW4gdGhhdAotCSAgb3JkZXIsIHJlc3VsdGluZyB0byB2NGwyc3JjIGZpeGF0aW5nIHRvIHRoZSBsb3dlc3QgcG9zc2libGUKLQkgIHJlc29sdXRpb24gaWYgZG93bnN0cmVhbSBkb2VzIG5vdCBleHByZXNzIGEgc2l6ZSBwcmVmZXJlbmNlLgotCSAgQWxzbyBtYWtlIHVwIGEgc29tZXdoYXQgcmFuZG9tIHJhbmtpbmcgb2YgcHJlZmVyZWQgb3V0cHV0Ci0JICBmb3JtYXRzIGZvciB0aGUgc2FtZSByZWFzb24uIEZpeGVzICM0ODU4MjguCi0KLTIwMDctMTAtMTEgMTc6NTU6MjkgKzAwMDAgIEphc29uIEtpdmxpZ2huIDxqa2l2bGlnaG5AZ21haWwuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogRXh0cmFjdCBsaWNlbnNlL2NvcHlyaWdodCBVUklzIGZyb20gSUQzdjIgV0NPUCBmcmFtZXMgKEZpeGVzICM0NDcwMDApLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogSmFzb24gS2l2bGlnaG4gIDxqa2l2bGlnaG4gZ21haWwgY29tPgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzoKLQkgIEV4dHJhY3QgbGljZW5zZS9jb3B5cmlnaHQgVVJJcyBmcm9tIElEM3YyIFdDT1AgZnJhbWVzCi0JICAoRml4ZXMgIzQ0NzAwMCkuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM2RlbXV4LmM6Ci0JICAqIHRlc3RzL2ZpbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9maWxlcy9pZDMtNDQ3MDAwLXdjb3AudGFnOgotCSAgQWRkIHNpbXBsZSB1bml0IHRlc3QuCi0KLTIwMDctMTAtMTEgMTY6NDE6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6IEFkZCBzdXBwb3J0IGZvciBsaWNlbnNlL2NvcHlyaWdodCBVUkkgdGFncyAoSUQzdjIgV0NPUCBmcmFtZSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIEFkZCBzdXBwb3J0IGZvciBsaWNlbnNlL2NvcHlyaWdodCBVUkkgdGFncyAoSUQzdjIgV0NPUCBmcmFtZSkuCi0JICBQcmVyZXF1aXNpdGUgZm9yICM0NDcwMDAuCi0KLTIwMDctMTAtMDggMTc6NDQ6NDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IEZpeCBjb21waWxlciB3YXJuaW5nIGJ5IHVzaW5nIEdTVF9DTE9DS19USU1FX05PTkUgdG8gaW5pdGlhbGlzZSBhIEdzdENsb2NrVGltZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19mbHVzaCk6Ci0JICBGaXggY29tcGlsZXIgd2FybmluZyBieSB1c2luZyBHU1RfQ0xPQ0tfVElNRV9OT05FIHRvIGluaXRpYWxpc2UKLQkgIGEgR3N0Q2xvY2tUaW1lLgotCi0yMDA3LTEwLTA4IDExOjU4OjUxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IE1vcmUgc2Vla2luZyBmaXhlcywgbW9zdGx5IHBhc3NpbmcgYXJvdW5kIHRoZSBuZXcgcGxheWJhY2sgc2VnbWVudCBpbiBvcmRlciB0byBjb25maWd1cmUgaXQgcHIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19mbHVzaCksCi0JICAoZ3N0X3J0c3BzcmNfZG9fc2VlayksIChnc3RfcnRzcHNyY19wZXJmb3JtX3NlZWspLAotCSAgKGdzdF9ydHNwc3JjX2NvbmZpZ3VyZV9jYXBzKSwgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9yYW5nZSksIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX3BsYXkpLAotCSAgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBNb3JlIHNlZWtpbmcgZml4ZXMsIG1vc3RseSBwYXNzaW5nIGFyb3VuZCB0aGUgbmV3IHBsYXliYWNrIHNlZ21lbnQgaW4KLQkgIG9yZGVyIHRvIGNvbmZpZ3VyZSBpdCBwcm9wZXJseS4KLQkgIEFsc28gcmVzZXQgYmFzZV90aW1lIG9mIHVkcCBzb3VyY2VzIHdoZW4gc2V0dGluZyB0aGVtIGJhY2sgdG8gUExBWUlORyBhcwotCSAgYSB0ZW1wb3JhcnkgaGFjayB1bnRpbCBjb3JlIHN1cHBvcnRzIHNlZWsgaW4gbGl2ZSBzb3VyY2VzIHByb3Blcmx5LgotCi0yMDA3LTEwLTA4IDEwOjM0OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOiBGaXggY2FwcyBhcyB0byBub3QgY29uZnVzZSBhdXRvcGx1Z2dlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzoKLQkgIEZpeCBjYXBzIGFzIHRvIG5vdCBjb25mdXNlIGF1dG9wbHVnZ2Vycy4KLQotMjAwNy0xMC0wNiAxNjoxMzoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4LzogUG9ydCBJRDMgdGFnIGRlbXV4ZXIgb3ZlciB0byB0aGUgbmV3IEdzdFRhZ0RlbXV4IGluIC1iYXNlIChub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gdGVzdCByZS1pbXBvcnRpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5oOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5oOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzoKLQkgIFBvcnQgSUQzIHRhZyBkZW11eGVyIG92ZXIgdG8gdGhlIG5ldyBHc3RUYWdEZW11eCBpbiAtYmFzZQotCSAgKG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byB0ZXN0IHJlLWltcG9ydGluZyB5b3VyIG11c2ljCi0JICBjb2xsZWN0aW9uKS4KLQotMjAwNy0xMC0wNiAxNToxMzowOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2FwZXRhZy86IFBvcnQgQVBFIHRhZyBkZW11eGVyIG92ZXIgdG8gdGhlIG5ldyBHc3RUYWdEZW11eCBpbiAtYmFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaDoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4Lmg6Ci0JICBQb3J0IEFQRSB0YWcgZGVtdXhlciBvdmVyIHRvIHRoZSBuZXcgR3N0VGFnRGVtdXggaW4gLWJhc2UuCi0KLTIwMDctMTAtMDUgMTM6MTg6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogSW1wcm92ZSBmbHVzaGluZyBiZWhhdmlvdXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfZmx1c2gpLAotCSAgKGdzdF9ydHNwc3JjX3BlcmZvcm1fc2VlayksIChnc3RfcnRzcHNyY19oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfaW50ZXJuYWxfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfc3JjX3F1ZXJ5KSwgKG5ld19zZXNzaW9uX3BhZCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90Y3ApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kKToKLQkgIEltcHJvdmUgZmx1c2hpbmcgYmVoYXZpb3VyLgotCSAgU2V0IHN0YXRlIG9mIHRoZSB1ZHAgc291cmNlcyB0byBQQVVTRS9QTEFZSU5HIGNvcnJlY3RseS4KLQkgIEhhbmRsZSBldmVudHMgYW5kIHF1ZXJpZXMgZm9yIFVEUCBhbmQgVENQIHRyYW5zcG9ydCBub3cuCi0KLTIwMDctMTAtMDQgMDc6Mjk6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3J0cC86IEFkZCBsb2cgY2F0ZWdvcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSAgQWRkIGxvZyBjYXRlZ29yeS4KLQotMjAwNy0xMC0wNCAwNzoyNDowMiArMDAwMCAgVGltbyBIb3R0aSA8VGltby5Ib3R0aUBzeXNvcGVuZGlnaWEuY29tPgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCB1bml0IHRlc3RzIGZvciBwYXlsb2FkZXJzL2RlcGF5bG9hZGVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRpbW8gSG90dGkgPFRpbW8uSG90dGlAc3lzb3BlbmRpZ2lhLmNvbT4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL3BpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmM6Ci0JICBBZGQgdW5pdCB0ZXN0cyBmb3IgcGF5bG9hZGVycy9kZXBheWxvYWRlcnMuCi0KLTIwMDctMTAtMDIgMTA6NDk6MDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguKjogQWxzbyBzYXZlIGNvZGVjIGRhdGEgZm9yIGF1ZGlvIHN0cmVhbXMuIEZpeGVzICM0ODI0OTUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguaDoKLQkgIEFsc28gc2F2ZSBjb2RlYyBkYXRhIGZvciBhdWRpbyBzdHJlYW1zLiBGaXhlcyAjNDgyNDk1LgotCi0yMDA3LTEwLTAyIDEwOjIzOjA0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEZpeCAiSW5kZXggZW50cnkgaGFzIGludmFsaWQgc3RyZWFtIG5yIDEiLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBGaXggIkluZGV4IGVudHJ5IGhhcyBpbnZhbGlkIHN0cmVhbSBuciAxIi4KLQkgIEFkZCBzdXBwb3J0IGZvciBtdXhpbmcgYWFjIC0gd29yayBpbiBwcm9ncmVzcyAoc2VlICM0ODI0OTUpLgotCi0yMDA3LTEwLTAxIDE2OjM0OjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IFBhcnNlIGJhbmR3aWR0aCBtb2RpZmllcnMsIHRoZXkgYXJlIG5vdCB5ZXQgY29uZmlndXJlZCBpbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGJlY2F1c2Ugd2UgZG9uJ3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19nZXRfYmFuZHdpZHRoKSwKLQkgIChnc3RfcnRzcHNyY19jb2xsZWN0X2JhbmR3aWR0aCksIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkgIChnc3RfcnRzcHNyY19tZWRpYV90b19jYXBzKSwgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBQYXJzZSBiYW5kd2lkdGggbW9kaWZpZXJzLCB0aGV5IGFyZSBub3QgeWV0IGNvbmZpZ3VyZWQgaW4gdGhlIHNlc3Npb24KLQkgIG1hbmFnZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFuIEFQSSBmb3IgdGhhdCB5ZXQuCi0KLTIwMDctMTAtMDEgMTM6NTc6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogVXNlIHNoaW55IG5ldyBmdW5jdGlvbiBpbiAtYmFzZSB0byBnZXQgdGhlIGRlZmF1bHQgY2xvY2stcmF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19wYXJzZV9ydHBtYXApLAotCSAgKGdzdF9ydHNwc3JjX21lZGlhX3RvX2NhcHMpLCAoZ3N0X3J0c3BzcmNfbG9vcF9pbnRlcmxlYXZlZCk6Ci0JICBVc2Ugc2hpbnkgbmV3IGZ1bmN0aW9uIGluIC1iYXNlIHRvIGdldCB0aGUgZGVmYXVsdCBjbG9jay1yYXRlLgotCSAgVXBkYXRlIHNvbWUgZG9jcy4KLQotMjAwNy0wOS0yOSAxMjo1MDozNiArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi9NQU5JRkVTVDogQWRkIGZpbGVzIHRvIHdpbjMyIG1hbmlmZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL01BTklGRVNUOgotCSAgQWRkIGZpbGVzIHRvIHdpbjMyIG1hbmlmZXN0LgotCSAgKiB3aW4zMi92czYvbGliZ3N0YXVkaW9meC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RxdGRlbXV4LmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHJ0cC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RydHNwLmRzcDoKLQkgIFVwZGF0ZSBwcm9qZWN0IGZpbGVzLgotCi0yMDA3LTA5LTI4IDE0OjU2OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IEluIFRDUCBtb2RlLCBvbmx5IHRpbWVzdGFtcCB0aGUgZmlyc3QgYnVmZmVyLiBUQ1AgaXMgbm90IHJlYWwgdGltZSBhbmQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkKSwKLQkgIChnc3RfcnRzcHNyY19wbGF5KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgSW4gVENQIG1vZGUsIG9ubHkgdGltZXN0YW1wIHRoZSBmaXJzdCBidWZmZXIuIFRDUCBpcyBub3QgcmVhbCB0aW1lIGFuZAotCSAgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB0cnkgdG8gc2tldyBjb21wZW5zYXRlLCBhbHNvIHNvbWUgc2VydmVycyBzZW5kCi0JICB0aGUgZmlyc3QgYmF0Y2ggb2YgZGF0YSBpbiBhIGJ1cnN0LgotCi0yMDA3LTA5LTI3IDE1OjAwOjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogRml4IHNldHRpbmcgdGhlIGRpc2NvbnQgZmxhZyBvbiB0aGUgZmlyc3QgYnVmZmVyIHB1c2hlZCBkb3duc3RyZWFtIGZvciBmb3JtYXRzIHdpdGggcHIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIEZpeCBzZXR0aW5nIHRoZSBkaXNjb250IGZsYWcgb24gdGhlIGZpcnN0IGJ1ZmZlcgotCSAgcHVzaGVkIGRvd25zdHJlYW0gZm9yIGZvcm1hdHMgd2l0aCBwcml2YXRlIGNvZGVjCi0JICBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZGVzZXJpYWxpc2VkIGludG8gYnVmZmVycwotCSAgKHN1Y2ggYXMgdm9yYmlzIGFuZCBGTEFDIHdoZW4gaW4gYSBtYXRyb3NrYSBjb250YWluZXIpLgotCi0yMDA3LTA5LTI3IDExOjEwOjEyICswMDAwICBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDBAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuKjogRnJlZSB0aGUgY29uZmlnIHN0cmluZy4gRml4ZXMgIzQ4MDcwNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMCBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogKGdzdF9ydHBfbXA0dl9wYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDR2X3BheV9maW5hbGl6ZSksIChnc3RfcnRwX21wNHZfcGF5X2ZsdXNoKSwKLQkgIChnc3RfcnRwX21wNHZfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkgIEZyZWUgdGhlIGNvbmZpZyBzdHJpbmcuIEZpeGVzICM0ODA3MDcuCi0JICBDbGVhbiB1cCB0aGUgdGltZXN0YW1wIGNvZGUgYSBsaXR0bGUuCi0KLTIwMDctMDktMjYgMjA6MTI6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuKjogU2V0IHRpbWVzdGFtcHMgb24gUlRQIGJ1ZmZlcnMgaW4gaW50ZXJsZWF2ZWQgbW9kZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKSwgKGdzdF9ydHNwc3JjX2Nsb3NlKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgU2V0IHRpbWVzdGFtcHMgb24gUlRQIGJ1ZmZlcnMgaW4gaW50ZXJsZWF2ZWQgbW9kZS4KLQkgIE1hcmsgZmlyc3QgYnVmZmVycyB3aXRoIGEgRElTQ09OVC4KLQkgIFJlbW92ZSBmbHVzaCBoYWNrIG5vdyB0aGF0IHN5bmMgZm9yIGxpdmUgc291cmNlcyBoYXMgYmVlbiBmaWd1cmVkIG91dC4KLQotMjAwNy0wOS0yNiAxNDoyODoyMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogVXBkYXRlIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY3JlYXRlKToKLQkgIFVwZGF0ZSBkb2N1bWVudGF0aW9uLgotCi0yMDA3LTA5LTI2IDE0OjI2OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9nc3RydHB4cXRkZXBheS4qOiBGYWlsIGlmIHdlIGRvbid0IGtub3cgdGhlIHF1aWNrdGltZSBmb3JtYXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvZ3N0cnRweHF0ZGVwYXkuYzogKGdzdF9ydHBfeHF0X2RlcGF5X3Byb2Nlc3MpLAotCSAgKGdzdF9ydHBfeHF0X2RlcGF5X2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9xdGRlbXV4L2dzdHJ0cHhxdGRlcGF5Lmg6Ci0JICBGYWlsIGlmIHdlIGRvbid0IGtub3cgdGhlIHF1aWNrdGltZSBmb3JtYXQuCi0KLTIwMDctMDktMjYgMTM6MTk6MTcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuKjogU2F2ZSB0aGUgZmxvdyByZXR1cm4gZnJvbSB0aGUgbGFzdCBnc3RfcGFkX3B1c2goKSBhbmQgbWFrZSBzdXJlIHdlIHBhc3MgdGhlIHJpZ2h0IGZsb3cgcmV0dXJuIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgU2F2ZSB0aGUgZmxvdyByZXR1cm4gZnJvbSB0aGUgbGFzdCBnc3RfcGFkX3B1c2goKSBhbmQKLQkgIG1ha2Ugc3VyZSB3ZSBwYXNzIHRoZSByaWdodCBmbG93IHJldHVybiB2YWx1ZSB1cHN0cmVhbQotCSAgaW4gdGhlIGNhc2Ugb2YgZmFpbHVyZTsgbWlub3IgY2xlYW4tdXBzLgotCi0yMDA3LTA5LTI1IDE5OjA5OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBHU1RfVEFHX0NPTVBPU0VSICgjNDU5ODA5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdGFwZXYybXV4LmNjOgotCSAgKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6Ci0JICBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBHU1RfVEFHX0NPTVBPU0VSICgjNDU5ODA5KS4KLQotMjAwNy0wOS0yNSAxNzoxODozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2xhdy86IENvbXB1bHNpdmUgY2xlYW4tdXBzOiB1c2UgYm9pbGVycGxhdGUgbWFjcm9zLCBhZGQgZGVidWcgY2F0ZWdvcmllcywgZml4IHVwIHRoaW5ncyB0byBjb25mb3JtIHRvIHN5bWJvbCBub21lLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSAgKiBnc3QvbGF3L2FsYXctZGVjb2RlLmg6Ci0JICAqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkgICogZ3N0L2xhdy9hbGF3LWVuY29kZS5oOgotCSAgKiBnc3QvbGF3L2FsYXcuYzoKLQkgICogZ3N0L2xhdy9tdWxhdy1jb252ZXJzaW9uLmg6Ci0JICBDb21wdWxzaXZlIGNsZWFuLXVwczogdXNlIGJvaWxlcnBsYXRlIG1hY3JvcywgYWRkIGRlYnVnCi0JICBjYXRlZ29yaWVzLCBmaXggdXAgdGhpbmdzIHRvIGNvbmZvcm0gdG8gc3ltYm9sIG5vbWVua2xhdHVyYSwKLQkgIGV0Yy4KLQotMjAwNy0wOS0yNSAxNjowNToyOSArMDAwMCAgTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlQHlhaG9vLmZyPgotCi0JICBnc3QvbGF3LzogVXNlIHN0YXRpYyB0YWJsZXMgZm9yIEEtTGF3IGRlY29kaW5nIGFuZCBlbmNvZGluZzsgdGhpcyBtYWtlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogTGF1cmVudCBHbGF5YWwgIDxzcGdsZWdsZSB5YWhvbyBmcj4KLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOgotCSAgKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JICBVc2Ugc3RhdGljIHRhYmxlcyBmb3IgQS1MYXcgZGVjb2RpbmcgYW5kIGVuY29kaW5nOyB0aGlzIG1ha2VzCi0JICBBLUxhdyBkZWNvZGluZyBhbmQgZW5jb2RpbmcgbGVzcyBDUFUtaW50ZW5zaXZlLCBidXQgaW5jcmVhc2VzCi0JICB0aGUgYmluYXJ5IHNpemUgYSBiaXQuIExlYXZpbmcgb2xkIGNvZGUgYXJvdW5kIGZvciBub3csCi0JICBzZWxlY3RhYmxlIGJ5IGEgZGVmaW5lIGluIHRoZSBjb2RlLiBGaXhlcyAjNDM1NDM1LgotCi0yMDA3LTA5LTI1IDA4OjUxOjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogVXNlIEFHX0dTVF9BUkdfV0lUSF9QTFVHSU5TLCBBR19HU1RfQVJHX0VOQUJMRV9FWFRFUk5BTCBhbmQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBVc2UgQUdfR1NUX0FSR19XSVRIX1BMVUdJTlMsIEFHX0dTVF9BUkdfRU5BQkxFX0VYVEVSTkFMIGFuZAotCSAgQUdfR1NUX0FSR19FTkFCTEVfRVhQRVJJTUVOVEFMIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhvc2UgbWFjcm9zCi0JICBpbiBjb25maWd1cmUuYWMuCi0KLTIwMDctMDktMjUgMDU6MDM6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgZm91cmNjcyBmb3IgTVBFRzIgSERWIHN0cmVhbXMuIEZpeGVzICM0Nzk5NjAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiA8aiBhdCBib290bGFiIGRvdCBvcmc+Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICBBZGQgZm91cmNjcyBmb3IgTVBFRzIgSERWIHN0cmVhbXMuIEZpeGVzICM0Nzk5NjAuCi0KLTIwMDctMDktMjQgMTA6NTM6MzYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgTWFzc2l2ZSBsZWFrIGZpeGluZywgcGx1cyBjb2RlIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuYzoKLQkgICogZXh0L3gyNjQvZ3N0eDI2NGVuYy5jOgotCSAgKiBnc3QvZHZkc3B1L2dzdGR2ZHNwdS5jOgotCSAgKiBnc3QvZHZkc3B1L2dzdGR2ZHNwdS5oOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuYzoKLQkgICogZ3N0L2gyNjRwYXJzZS9nc3RoMjY0cGFyc2UuYzoKLQkgICogZ3N0L21wZWd0c3BhcnNlL21wZWd0c3BhY2tldGl6ZXIuYzoKLQkgICogZ3N0L21wZWd0c3BhcnNlL21wZWd0c3BhcnNlLmM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jOgotCSAgKiBnc3QvbnV2ZGVtdXgvZ3N0bnV2ZGVtdXguYzoKLQkgICogc3lzL2RzaG93c3Jjd3JhcHBlci9nc3Rkc2hvd2F1ZGlvc3JjLmM6Ci0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvZ3N0ZHNob3d2aWRlb3NyYy5jOgotCSAgKiBzeXMvdmNkL3ZjZHNyYy5jOgotCSAgTWFzc2l2ZSBsZWFrIGZpeGluZywgcGx1cyBjb2RlIGNsZWFudXBzLgotCi0yMDA3LTA5LTIzIDE4OjU3OjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0b3NzaGVscGVyLmM6IFVzZSBHU1RfV0FSTklORyBpbnN0ZWFkIG9mIGEgZ19jcml0aWNhbC4gVGhpcyBzaXR1YXRpb24gaXMgbm90IGNhdXNlZCBieSB0aGUgYXBwbGljYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzoKLQkgIFVzZSBHU1RfV0FSTklORyBpbnN0ZWFkIG9mIGEgZ19jcml0aWNhbC4gVGhpcyBzaXR1YXRpb24gaXMgbm90IGNhdXNlZAotCSAgYnkgdGhlIGFwcGxpY2F0aW9uLgotCi0yMDA3LTA5LTIyIDE4OjE1OjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vOiBVcGRhdGVkIHRyYW5zbGF0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9MSU5HVUFTOgotCSAgKiBwby9ubC5wbzoKLQkgIFVwZGF0ZWQgdHJhbnNsYXRpb25zLgotCi0yMDA3LTA5LTIyIDE4OjEzOjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vZXUucG86IEFkZGVkIEJhc3F1ZSB0cmFuc2xhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJhbnNsYXRlZCBieTogTWlrZWwgT2xhc2FnYXN0aSA8aGV5X25la2VuQG11bmR1cmF0Lm5ldD4KLQkgICogcG8vZXUucG86Ci0JICBBZGRlZCBCYXNxdWUgdHJhbnNsYXRpb24uCi0KLTIwMDctMDktMjIgMTg6MTM6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby86IEFkZGVkIENoaW5lc2UgKHRyYWRpdGlvbmFsIGFuZCBIb25nIEtvbmcpIHRyYW5zbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0cmFuc2xhdGVkIGJ5OiBBYmVsIENoZXVuZyA8YWJlbGNoZXVuZ0BnbWFpbC5jb20+Ci0JICAqIHBvL3poX0hLLnBvOgotCSAgKiBwby96aF9UVy5wbzoKLQkgIEFkZGVkIENoaW5lc2UgKHRyYWRpdGlvbmFsIGFuZCBIb25nIEtvbmcpIHRyYW5zbGF0aW9uLgotCi0yMDA3LTA5LTIyIDE4OjEwOjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vcGwucG86IEFkZGVkIFBvbGlzaCB0cmFuc2xhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJhbnNsYXRlZCBieTogSmFrdWIgQm9ndXN6IDxxYm9vc2hAcGxkLWxpbnV4Lm9yZz4KLQkgICogcG8vcGwucG86Ci0JICBBZGRlZCBQb2xpc2ggdHJhbnNsYXRpb24uCi0KLTIwMDctMDktMjIgMTg6MDk6NTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby9maS5wbzogQWRkZWQgRmlubmlzaCB0cmFuc2xhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJhbnNsYXRlZCBieTogSWxra2EgVHVvaGVsYSA8aGlsZUBpa2kuZmk+Ci0JICAqIHBvL2ZpLnBvOgotCSAgQWRkZWQgRmlubmlzaCB0cmFuc2xhdGlvbi4KLQotMjAwNy0wOS0yMiAxODowOTowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBvL2VzLnBvOiBBZGRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0cmFuc2xhdGVkIGJ5OiBKb3JnZSBHb256w6FsZXogR29uesOhbGV6IDxhbG9yaWVsQGdtYWlsLmNvbT4KLQkgICogcG8vZXMucG86Ci0JICBBZGRlZCBTcGFuaXNoIHRyYW5zbGF0aW9uLgotCi0yMDA3LTA5LTIyIDE4OjA4OjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG8vZGEucG86IEFkZGVkIERhbmlzaCB0cmFuc2xhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdHJhbnNsYXRlZCBieTogTW9nZW5zIEphZWdlciA8bW9nZW5zQGphZWdlci50Zj4KLQkgICogcG8vZGEucG86Ci0JICBBZGRlZCBEYW5pc2ggdHJhbnNsYXRpb24uCi0KLTIwMDctMDktMjIgMTg6MDY6NTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby96aF9DTi5wbzogQWRkZWQgQ2hpbmVzZSAoc2ltcGxpZmllZCkgdHJhbnNsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHRyYW5zbGF0ZWQgYnk6IEZ1bmRhIFdhbmcgPGZ1bmRhd2FuZ0BsaW51eC5uZXQuY24+Ci0JICAqIHBvL3poX0NOLnBvOgotCSAgQWRkZWQgQ2hpbmVzZSAoc2ltcGxpZmllZCkgdHJhbnNsYXRpb24uCi0KLTIwMDctMDktMjIgMTg6MDU6MzcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBwby9iZy5wbzogQWRkZWQgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0cmFuc2xhdGVkIGJ5OiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAY29udGFjdC5iZz4KLQkgICogcG8vYmcucG86Ci0JICBBZGRlZCBCdWxnYXJpYW4gdHJhbnNsYXRpb24uCi0KLTIwMDctMDktMjIgMDg6MTI6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuaDoKLQkgIGZpeCBoZWFkZXIgYW5kIGNvbW1lbnRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBoZWFkZXIgYW5kIGNvbW1lbnRzCi0KLTIwMDctMDktMjEgMTE6MzQ6MzQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogU2V0IG91dGdvaW5nIHBhY2tldCBkdXJhdGlvbiBiZWNhdXNlIHdlIGNhbi4gRml4ZXMgIzQ3ODI0NCBzb21lIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOiAoZ3N0X3J0cF9hbXJfZGVwYXlfcHJvY2Vzcyk6Ci0JICBTZXQgb3V0Z29pbmcgcGFja2V0IGR1cmF0aW9uIGJlY2F1c2Ugd2UgY2FuLiBGaXhlcyAjNDc4MjQ0IHNvbWUgbW9yZS4KLQotMjAwNy0wOS0yMCAxMzozNTozNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogQWRkIGluZm8gYWJvdXQgc3RhdGljIGxlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JICBBZGQgaW5mbyBhYm91dCBzdGF0aWMgbGVhay4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6Ci0JICBJbXByb3ZlZCBzdGF0ZSBjaGFuZ2UgdW5pdCB0ZXN0LgotCi0yMDA3LTA5LTE5IDE4OjE5OjQ5ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIElnbm9yZSByZWdpc3RyaWVzIGluIGFueSBmb3JtYXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrLy5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgcmVnaXN0cmllcyBpbiBhbnkgZm9ybWF0LgotCi0yMDA3LTA5LTE5IDE2OjI0OjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOiBSZW1vdmVkIHNvbWUgdW51c2VkIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzogKGdzdF9ydHBfTDE2X3BheV9oYW5kbGVfYnVmZmVyKToKLQkgIFJlbW92ZWQgc29tZSB1bnVzZWQgY29kZS4KLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzogKGdzdF9ydHBfYW1yX3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzogKGdzdF9ydHBfZ3NtX3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmM6IChnc3RfcnRwX21wMnRfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6IChnc3RfcnRwX3NwZWV4X3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzogKGdzdF9ydHBfdGhlb3JhX3BheV9pbml0X3BhY2tldCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2ZsdXNoX3BhY2tldCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19wYXlfZmx1c2hfcGFja2V0KToKLQkgIFRyeSB0byBwcmVzZXJ2ZSB0aGUgaW5jb21taW5nIGJ1ZmZlciBkdXJhdGlvbiBvbiB0aGUgb3V0Z29pbmcKLQkgIHBhY2tldHMuIEZpeGVzICM0NzgyNDQuCi0KLTIwMDctMDktMTkgMTA6MjI6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvOiBXb3JrIGFyb3VuZCBjb21waWxlciB3YXJuaW5ncyB3aXRoIGcrKy00LjIgd2hlbiBhc3NpZ25pbmcgYSBzdHJpbmcgY29uc3RhbnQgdG8gYSBnY2hhciAqIChwYXJ0aWFsbHkgZml4ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2M6Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICBXb3JrIGFyb3VuZCBjb21waWxlciB3YXJuaW5ncyB3aXRoIGcrKy00LjIgd2hlbiBhc3NpZ25pbmcgYQotCSAgc3RyaW5nIGNvbnN0YW50IHRvIGEgZ2NoYXIgKiAocGFydGlhbGx5IGZpeGVzICM0NzgwOTIpLgotCi0yMDA3LTA5LTE4IDE2OjQ0OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IFdlIHJlcXVpcmUgY29yZSBDVlMgbm93IGZvciBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFdlIHJlcXVpcmUgY29yZSBDVlMgbm93IGZvciBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCgpLgotCi0yMDA3LTA5LTE4IDEzOjU1OjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9zcGVjdHJ1bS86IEhhbmRsaW5nIHdpbmRvdyByZXNpemUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOgotCSAgSGFuZGxpbmcgd2luZG93IHJlc2l6ZS4KLQotMjAwNy0wOS0xOCAxMTo0NTowNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBDaGFuZ2VMb2c6IEFkZCBtaXNzaW5nIG5ld2xpbmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogQ2hhbmdlTG9nOgotCSAgQWRkIG1pc3NpbmcgbmV3bGluZS4KLQkgICogZ3N0L2xpYnJmYi9yZmJkZWNvZGVyLmM6Ci0JICBGaXggdGhlIGJ1aWxkIChtaXNzaW5nIHN0ZGxpYi5oKS4KLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5oOgotCSAgVXNlIGJhc2V0cmFuc2Zvcm0gc2VnbWVudCBzbyB0aGF0IGl0IGlzIGNvcnJlY3RseSBtYW5hZ2VkIG9uIGZsdXNoZXMKLQkgIGFuZCBzdGFydC9zdG9wLiBSZXBvcnQgbWVzc2FnZSB0aW1lc3RhbXAgYXMgc3RyZWFtIHRpbWUsIHdoaWNoIGlzIHdoYXQKLQkgIGFuIGFwcGxpY2F0aW9uIGNhbiB1bmRlcnN0YW5kLiAoWWVzIHRoZXNlIGFyZSBhZGFwdGVkIGZyb20gd2ltIHJlY2VudAotCSAgbGV2ZWwgZWxlbWVudCBjaGFuZ2VzKQotCi0yMDA3LTA5LTE3IDE3OjM1OjEzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0LzogRml4IGNvbXBpbGVyIHdhcm5pbmdzIHNob3duIHdpdGggRm9ydGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6IChnc3RfYXVkaW9fZHluYW1pY19jbGFzc19pbml0KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksCi0JICAobmV3X3Nlc3Npb25fcGFkKSwgKHJlcXVlc3RfcHRfbWFwKSwgKGdzdF9ydHNwc3JjX2RvX3N0cmVhbV9lb3MpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLCAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpOgotCSAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIHNob3duIHdpdGggRm9ydGUuCi0KLTIwMDctMDktMTcgMDI6MDU6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogR2l2ZSBtZWFuaW5nZnVsbCBlcnJvciB3aGVuIGFsbCBzdHJlYW1zIGZhaWxlZCB0byBjb25maWd1cmUgZm9yIHNvbWUgcmVhc29uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpLAotCSAgKGdzdF9ydHNwc3JjX2R1cF9wcmludGYpOgotCSAgR2l2ZSBtZWFuaW5nZnVsbCBlcnJvciB3aGVuIGFsbCBzdHJlYW1zIGZhaWxlZCB0byBjb25maWd1cmUgZm9yIHNvbWUKLQkgIHJlYXNvbi4KLQotMjAwNy0wOS0xNiAxOToxMzo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9SRUFETUU6IFVwZGF0ZSBSRUFETUUgd2l0aCB0aGUgZGVzaWduIGZvciBzeW5jaHJvbmlzYXRpb24gcnVsZXMgb2YgUlRQIG9uIHNlbmRlciBhbmQgcmVjZWl2ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9SRUFETUU6Ci0JICBVcGRhdGUgUkVBRE1FIHdpdGggdGhlIGRlc2lnbiBmb3Igc3luY2hyb25pc2F0aW9uIHJ1bGVzIG9mIFJUUCBvbgotCSAgc2VuZGVyIGFuZCByZWNlaXZlci4KLQotMjAwNy0wOS0xNCAwOTo0MDo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogRG9uJ3QgcHVzaCBFT1MgZnJvbSB0aGUgY2hhaW4gZnVuY3Rpb24sIHRoZSBlbGVtZW50IGRyaXZpbmcgdGhlIHBpcGVsaW5lIGlzIHJlc3BvbnNpYmxlIGYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9sb29wKSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhaW4pOgotCSAgRG9uJ3QgcHVzaCBFT1MgZnJvbSB0aGUgY2hhaW4gZnVuY3Rpb24sIHRoZSBlbGVtZW50Ci0JICBkcml2aW5nIHRoZSBwaXBlbGluZSBpcyByZXNwb25zaWJsZSBmb3IgdGhpcy4gVGhlIGJ1ZwotCSAgdGhpcyB3YXMgbWVhbnQgdG8gZml4IHNlZW1zIHRvIGJlIHF1ZXVlIG5vdCBmb3J3YXJkaW5nCi0JICBFT1MgaW4gYWxsIGNhc2VzIChzZWUgIzQ3NjUxNCkuCi0KLTIwMDctMDktMTMgMTc6MzE6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC4qOiBVc2UgYmFzZXRyYW5zZm9ybSBzZWdtZW50IHNvIHRoYXQgaXQgaXMgY29ycmVjdGx5IG1hbmFnZWQgb24gZmx1c2hlcyBhbmQgc3RhcnQvc3RvcC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9jbGFzc19pbml0KSwgKGdzdF9sZXZlbF9zdGFydCksCi0JICAoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSAgVXNlIGJhc2V0cmFuc2Zvcm0gc2VnbWVudCBzbyB0aGF0IGl0IGlzIGNvcnJlY3RseSBtYW5hZ2VkIG9uIGZsdXNoZXMgYW5kCi0JICBzdGFydC9zdG9wLgotCSAgUmVwb3J0IG1lc3NhZ2UgdGltZXN0YW1wIGFzIHN0cmVhbSB0aW1lLCB3aGljaCBpcyB3aGF0IGFuIGFwcGxpY2F0aW9uCi0JICBjYW4gdW5kZXJzdGFuZC4KLQotMjAwNy0wOS0xMyAxNTowNDoxNSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBVcGRhdGUgbXkgbWFpbCBhZGRyZXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2M6Ci0JICAqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguaDoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXBldjJtdXguYzoKLQkgIFVwZGF0ZSBteSBtYWlsIGFkZHJlc3MuCi0KLTIwMDctMDktMTMgMTI6Mzc6NTYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IEFkZCBFT1MgbG9naWMgZm9yIHRoZSBwdXNoLWJhc2VkIG1vZGUgdG9vLiBGaXhlcyAjNDc2NTE0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3BlcmZvcm1fZW9zKSwKLQkgIChnc3Rfd2F2cGFyc2VfbG9vcCksIChnc3Rfd2F2cGFyc2VfY2hhaW4pOgotCSAgQWRkIEVPUyBsb2dpYyBmb3IgdGhlIHB1c2gtYmFzZWQgbW9kZSB0b28uIEZpeGVzICM0NzY1MTQuCi0KLTIwMDctMDktMTIgMjI6MDE6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9sYXcvOiBGaXggbGF3IGVuY29kZXIgdGltZXN0YW1wcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6IChnc3RfYWxhd2VuY19pbml0KSwgKGdzdF9hbGF3ZW5jX2NoYWluKToKLQkgICogZ3N0L2xhdy9hbGF3LWVuY29kZS5oOgotCSAgKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOiAoZ3N0X211bGF3ZW5jX2luaXQpLAotCSAgKGdzdF9tdWxhd2VuY19jaGFpbik6Ci0JICAqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmg6Ci0JICBGaXggbGF3IGVuY29kZXIgdGltZXN0YW1wcy4KLQotMjAwNy0wOS0xMiAwOToxMzozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogRml4IHdhcm5pbmcgd2hlbiBidWlsZGluZyB3aXRob3V0IGRlYnVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5jOgotCSAgRml4IHdhcm5pbmcgd2hlbiBidWlsZGluZyB3aXRob3V0IGRlYnVnLgotCSAgKiBzeXMvb3NzL2dzdG9zc21peGVydHJhY2suYzoKLQkgIFVzZSBjb25zdCBsaWtlIGluIGFsc2FtaXhlcnRyYWNrLmMgKGZpeGVzIHdhcm5pbmdzKS4KLQotMjAwNy0wOS0xMiAwODozODoyMSArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC86IFByaW50ZiBmb3JtYXQgZml4ZXMgKCM0NzYxMjgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QtbGlicy9nc3QvYXBwL2dzdGFwcHNpbmsuYzoKLQkgICogZ3N0L2Zsdi9nc3RmbHZkZW11eC5jOgotCSAgKiBnc3QvZmx2L2dzdGZsdnBhcnNlLmM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5jOgotCSAgUHJpbnRmIGZvcm1hdCBmaXhlcyAoIzQ3NjEyOCkuCi0KLTIwMDctMDktMTEgMTU6Mzc6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogRml4IGZyYW1lcmF0ZSBkZXRlY3Rpb24gY29kZSBzb21lIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSk6Ci0JICBGaXggZnJhbWVyYXRlIGRldGVjdGlvbiBjb2RlIHNvbWUgbW9yZS4KLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHdlaXJkIHN0ZXAgaW4gdGhlIHN0ZXB3aXNlIGZyYW1lcmF0ZXMuCi0JICBEb24ndCBvdmVyd3JpdGUgdGhlIG1pbiBpbnRlcnZhbCB3aXRoIHRoZSBmcmFtZXJhdGUsIHVzZSBhIHRlbXAgdmFyaWFibGUKLQkgIGluc3RlYWQuCi0JICBVc2UgbWF4IGluIHRoZSBDb250aW51b3VzIGZyYW1lcmF0ZSBpbnRlcnZhbHMgaW5zdGVhZCBvZiBzdGVwLCB3aGljaCBpcwotCSAgMSBhY2NvcmRpbmcgdG8gdGhlIGRvY3MuIEZpeGVzICM0NzU0MjQuCi0KLTIwMDctMDktMTAgMTk6NTM6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IE1ha2UgdWRwc3JjIHRpbWVzdGFtcCBvdXRnb2luZyBidWZmZXJzIGJhc2VkIG9uIHdoZW4gdGhleSB3ZXJlIHJlY2VpdmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2luaXQpLCAoZ3N0X3VkcHNyY19jcmVhdGUpOgotCSAgTWFrZSB1ZHBzcmMgdGltZXN0YW1wIG91dGdvaW5nIGJ1ZmZlcnMgYmFzZWQgb24gd2hlbiB0aGV5IHdlcmUgcmVjZWl2ZWQuCi0JICBBbHNvIG1ha2UgaXQgb3V0cHV0IGEgc2VnbWVudCBpbiB0aW1lLgotCi0yMDA3LTA5LTEwIDA2OjQ5OjMyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogUGx1ZyBhIGxpdHRsZSBsZWFrLiBMaXR0bGUgY29kZSBjbGVhbnVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBQbHVnIGEgbGl0dGxlIGxlYWsuIExpdHRsZSBjb2RlIGNsZWFudXBzLgotCi0yMDA3LTA5LTA5IDE4OjA4OjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IFVzZSBBQ19UUllfQ09NUElMRSBpbnN0ZWFkIG9mIEFDX1RSWV9SVU4gdG8gY2hlY2sgZm9yIG9sZCBmbGFjIHZlcnNpb25zLCAncyBnb29kIGZvciBjcm9zcy1jb21waWxhdGlvbiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBVc2UgQUNfVFJZX0NPTVBJTEUgaW5zdGVhZCBvZiBBQ19UUllfUlVOIHRvIGNoZWNrIGZvciBvbGQKLQkgIGZsYWMgdmVyc2lvbnMsICdzIGdvb2QgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIGthcm1hLgotCi0yMDA3LTA5LTA3IDE4OjA0OjQxICswMDAwICBIYWFrb24gU3BvcnNoZWltIDxoYWFrb24uc3BvcnNoZWltQHRhbmRiZXJnLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6IEZpeCB1cCBoZWFkZXIgc3RydWN0dXJlIHNvIHRoYXQgY29tcGlsZXJzIGRvbid0IGFkZCBwYWRkaW5nIGJldHdlZW4gdGhlIHN0cnVjdHVyZSBmaWVsZHMsIHNpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBIYWFrb24gU3BvcnNoZWltICA8aGFha29uLnNwb3JzaGVpbSBhdCB0YW5kYmVyZyBjb20+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgRml4IHVwIGhlYWRlciBzdHJ1Y3R1cmUgc28gdGhhdCBjb21waWxlcnMgZG9uJ3QgYWRkIHBhZGRpbmcKLQkgIGJldHdlZW4gdGhlIHN0cnVjdHVyZSBmaWVsZHMsIHNpbmNlIHRoYXQgd291bGQgbGVhZCB0byB1cwotCSAgc2VuZGluZyBSVFAgcGFja2V0cyB3aXRoIGJyb2tlbiBoZWFkZXJzIChhcyBpcyBjdXJyZW50bHkgdGhlCi0JICBjYXNlIHdoZW4gY29tcGlsaW5nIHdpdGggTVNWQykuIEFsc28gc2VlIHNpbWlsYXIgZml4ZXMgaW4KLQkgIGxpYmdzdHJ0cCBpbiBnc3QtcGx1Z2lucy1iYXNlLiAoIzQ3NDYxNjsgIzQ3MTE5NCkKLQotMjAwNy0wOS0wNyAxNjowNDoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBEb24ndCBvdmVyd3JpdGUgb3VyIEdWYWx1ZSB3aXRoIDAgYnV0IGluc3RlYWQgdXNlIHRoZSBwcmV2aW91c2x5IGNvbXB1dGVkIHZhbHVlLiBGaXhlcyAjNDcxLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSk6Ci0JICBEb24ndCBvdmVyd3JpdGUgb3VyIEdWYWx1ZSB3aXRoIDAgYnV0IGluc3RlYWQgdXNlIHRoZSBwcmV2aW91c2x5Ci0JICBjb21wdXRlZCB2YWx1ZS4gRml4ZXMgIzQ3MTgyMyBzb21lIG1vcmUuCi0KLTIwMDctMDktMDcgMTU6NTQ6MzggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IFVzZSB0aGUgY29ycmVjdCBwYXJhbWV0ZXIgb3JkZXIgZm9yIHRoZSBtZW1zZXQgY2FsbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fc3RhcnQpLAotCSAgKGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgVXNlIHRoZSBjb3JyZWN0IHBhcmFtZXRlciBvcmRlciBmb3IgdGhlIG1lbXNldCBjYWxscy4KLQkgIFRoYW5rcyB0byBDaHJpc3RpYW4gU2NoYWxsZXIgZm9yIG5vdGljaW5nLgotCi0yMDA3LTA5LTA2IDEyOjAwOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeTogTm8gdGFicyBpbiB0aGlzIGZpbGUgcGxlYXNlLCBvciBndGstZG9jIHdpbGwgZW5kIHVwIGRvY3VtZW50aW5nIHJhdGguLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgIE5vIHRhYnMgaW4gdGhpcyBmaWxlIHBsZWFzZSwgb3IgZ3RrLWRvYyB3aWxsIGVuZCB1cCBkb2N1bWVudGluZwotCSAgcmF0aGVyIGFic3VyZCBjbGFzcyBoaWVyYXJjaGllcy4KLQotMjAwNy0wOS0wNiAxMDo0ODo1NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzogSWYgdGhlIG5ldyBraWQgZWxlbWVudCBmYWlscyB0byBjaGFuZ2Ugc3RhdGUgZm9yIHNvbWUgcmVhc29uIGZvcndhcmQgdGhlIGVycm9yIG1lc3NhZ2UgaXQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzoKLQkgIElmIHRoZSBuZXcga2lkIGVsZW1lbnQgZmFpbHMgdG8gY2hhbmdlIHN0YXRlIGZvciBzb21lIHJlYXNvbgotCSAgKGUuZy4gZXNkc2luayBub3QgYmVpbmcgYWJsZSB0byBjb25uZWN0IHRvIHRoZSBzb3VuZCBzZXJ2ZXIpLAotCSAgZm9yd2FyZCB0aGUgZXJyb3IgbWVzc2FnZSBpdCBwb3N0ZWQgb24gdGhlIGJ1cyBpbnN0ZWFkIG9mIGp1c3QKLQkgIHBvc3RpbmcgYSBnZW5lcmljICdJbnRlcm5hbCBzdGF0ZSBjaGFuZ2UgZXJyb3I6IHBsZWFzZSBmaWxlIGEKLQkgIGJ1ZycgZXJyb3IgbWVzc2FnZS4gRml4ZXMgIzQ3MTM2NC4KLQotMjAwNy0wOS0wNiAwNzoyMToyMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBQb3J0IEdzdFNwZWN0cnVtIHRvIEdzdEF1ZGlvRmlsdGVyIGFuZCBsaWJnc3RmZnQsIGFkZCBzdXBwb3J0IGZvciBpbnQzMiwgZmxvYXQgYW5kIGRvdWJsZSwgdXNlIGZsb2F0cyBmb3IgdGhlIG1lc3NhZ2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6IChkcmF3X3NwZWN0cnVtKSwKLQkgIChtZXNzYWdlX2hhbmRsZXIpLCAobWFpbik6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAoZHJhd19zcGVjdHJ1bSksIChtZXNzYWdlX2hhbmRsZXIpOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV9iYXNlX2luaXQpLAotCSAgKGdzdF9zcGVjdHJ1bV9jbGFzc19pbml0KSwgKGdzdF9zcGVjdHJ1bV9pbml0KSwKLQkgIChnc3Rfc3BlY3RydW1fZGlzcG9zZSksIChnc3Rfc3BlY3RydW1fc2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc3BlY3RydW1fZ2V0X3Byb3BlcnR5KSwgKGdzdF9zcGVjdHJ1bV9zdGFydCksCi0JICAoZ3N0X3NwZWN0cnVtX3NldHVwKSwgKGdzdF9zcGVjdHJ1bV9tZXNzYWdlX25ldyksCi0JICAoZ3N0X3NwZWN0cnVtX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5oOgotCSAgUG9ydCBHc3RTcGVjdHJ1bSB0byBHc3RBdWRpb0ZpbHRlciBhbmQgbGliZ3N0ZmZ0LCBhZGQgc3VwcG9ydAotCSAgZm9yIGludDMyLCBmbG9hdCBhbmQgZG91YmxlLCB1c2UgZmxvYXRzIGZvciB0aGUgbWVzc2FnZSBjb250ZW50cywKLQkgIGF2ZXJhZ2UgYWxsIEZGVHMgZG9uZSBpbiBvbmUgaW50ZXJ2YWwgZm9yIGJldHRlciByZXN1bHRzLCB1c2UKLQkgIGEgYmV0dGVyIHdpbmRvd2luZyBmdW5jdGlvbiwgYWxsb3cgcG9zdGluZyB0aGUgcGhhc2UgaW4gdGhlIG1lc3NhZ2UKLQkgIGFuZCBhY3R1YWxseSBkbyBhbiBGRlQgd2l0aCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBiYW5kcyBpbnN0ZWFkCi0JICBvZiBpbnRlcnBvbGF0aW5nLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zcGVjdHJ1bS5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHNwZWN0cnVtX3N1aXRlKToKLQkgIEltcHJvdmUgdGhlIHVuaXRzIHRlc3RzIGJ5IGNoZWNraW5nIGZvciBhIDExMDI1SHogc2luZSB3YXZlCi0JICBhbmQgYWRkIHVuaXQgdGVzdHMgZm9yIGFsbCA0IHN1cHBvcnRlZCBzYW1wbGUgdHlwZXMuCi0KLTIwMDctMDktMDUgMTY6MjM6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4LzogRG9uJ3QgYXNzdW1lIHRhZ3MgYXJlIGVuY29kZWQgYXMgVVRGLTggKCM0NzM2NzApLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBEb24ndCBhc3N1bWUgdGFncyBhcmUgZW5jb2RlZCBhcyBVVEYtOCAoIzQ3MzY3MCkuCi0KLTIwMDctMDktMDUgMTQ6NDM6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy92NGwyLzogSW1wbGVtZW50IExBVEVOQ1kgcXVlcmllcyBpbiB0aGUgY3J1ZGVzdCB3YXkgcG9zc2libGUgc28gSSBkb24ndCBoYXZlIHRvIHVzZSBzeW5jPWZhbHNlIGFueSBsb25nZXIgd2hlbiB0ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICBJbXBsZW1lbnQgTEFURU5DWSBxdWVyaWVzIGluIHRoZSBjcnVkZXN0IHdheSBwb3NzaWJsZSBzbyBJIGRvbid0Ci0JICBoYXZlIHRvIHVzZSBzeW5jPWZhbHNlIGFueSBsb25nZXIgd2hlbiB0ZXN0aW5nIHdpdGggdmlkZW9zaW5rcy4KLQotMjAwNy0wOS0wNSAwOToyNToyMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggYnVpbGQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4IGJ1aWxkLgotCi0yMDA3LTA5LTA1IDAwOjEyOjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IEFkZCBzb21lIG1vcmUgZGVidWdnaW5nIGluIHRoZSBmcmFtZXJhdGUgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnZ2luZyBpbiB0aGUgZnJhbWVyYXRlIGZ1bmN0aW9uLgotCSAgSXRlcmF0ZSBzdGVwd2lzZSBmcmFtZXJhdGUgdXAgdG8gYW5kIF9pbmNsdWRpbmdfIHRoZSBtYXggYW5kIGlmIG5vdGhpbmcKLQkgIHdhcyBhZGRlZCB0byB0aGUgbGlzdCwgYWRkIGEgZHVtbXkgMC8xIHRvIDEwMC8xIGZyYW1lcmF0ZSBzbyB0aGF0IHdlCi0JICBkb24ndCBlbmQgdXAgd2l0aCBhbiBlbXB0eSBsaXN0LgotCi0yMDA3LTA5LTA0IDIyOjQyOjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiBBZGQgcHJvcGVydHkgZG8gY29uZmlndXJlIGRlc3RpbmF0aW9uIGFkZHJlc3MvcG9ydCBwYWlycwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfc2V0X2NsaWVudHNfc3RyaW5nKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2dldF9jbGllbnRzX3N0cmluZyksCi0JICAoZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpdWRwc2lua19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfaW5pdF9zZW5kKSwgKGdzdF9tdWx0aXVkcHNpbmtfYWRkX2ludGVybmFsKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2FkZCksIChnc3RfbXVsdGl1ZHBzaW5rX2NsZWFyX2ludGVybmFsKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2NsZWFyKToKLQkgIEFkZCBwcm9wZXJ0eSBkbyBjb25maWd1cmUgZGVzdGluYXRpb24gYWRkcmVzcy9wb3J0IHBhaXJzCi0JICBBUEk6R3N0TXVsdGlVRFBTaW5rOjpjbGllbnRzCi0KLTIwMDctMDktMDQgMTg6MzA6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzLzogQWRkZWQgc29tZSBSVFAgZXhhbXBsZSBzY3JpcHRzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgUlRQIHN0cmVhbXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1BTVIuc2g6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3AtUENNQS5zZHA6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3AtUENNQS5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LVBDTUEuc2RwOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1QQ01BLnNoOgotCSAgKiB0ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1IMjYzcC1BVFMtUENNQS5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuc2g6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaDoKLQkgICogdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci12NGwyLUgyNjQtYWxzYXNyYy1QQ01BLnNoOgotCSAgQWRkZWQgc29tZSBSVFAgZXhhbXBsZSBzY3JpcHRzIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgUlRQIHN0cmVhbXMuCi0KLTIwMDctMDktMDQgMTY6NDA6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogUmVzdHJ1Y3R1cmUgdGhlIHNldGNhcHMgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWxzbyBjb21wdXRlIHRoZSBleHBlY3RlZCBHU3RyZWFtZXIgb3V0cHV0IHNpei4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyX2dldF9jYXBzX2luZm8pLAotCSAgKGdzdF92NGwyc3JjX3NldF9jYXBzKSwgKGdzdF92NGwyc3JjX2dldF9tbWFwKToKLQkgIFJlc3RydWN0dXJlIHRoZSBzZXRjYXBzIGZ1bmN0aW9uIHNvIHRoYXQgd2UgY2FuIGFsc28gY29tcHV0ZSB0aGUKLQkgIGV4cGVjdGVkIEdTdHJlYW1lciBvdXRwdXQgc2l6ZSBvZiB0aGUgdmlkZW8gZnJhbWVzLgotCSAgU2V0IGZyYW1lX2J5dGVfc2l6ZSBjb3JyZWN0bHkgc28gdGhhdCByZWFkLWJhc2VkIGRldmljZXMgaGF2ZSBhIGNoYW5jZQotCSAgb2Ygd29ya2luZyBjb3JyZWN0bHkuCi0JICBXaGVuIGdyYWJiaW5nIGEgZnJhbWUsIGRpc2NhcmQgZnJhbWVzIHRoYXQgYXJlIG5vdCBvZiB0aGUgZXhwZWN0ZWQgc2l6ZS4KLQkgIFNvbWUgY2FtZXJhcyBkb24ndCBvdXRwdXQgdGhlIHJpZ2h0IGZyYW1lc2l6ZSBmb3IgdGhlIGZpcnN0IGJ1ZmZlci4KLQkgIFRyeSBvbmx5IGEgY291cGxlIG9mIHRpbWVzIHRvIGdldCBhIHZhbGlkIGZyYW1lLCBlbHNlIGVycm9yIG91dC4KLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZ2V0X2NhcGFiaWxpdGllcyksCi0JICAoZ3N0X3Y0bDJfZmlsbF9saXN0cyksIChnc3RfdjRsMl9nZXRfaW5wdXQpOgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1ZyBpbmZvIHdoZW4gc2Nhbm5pbmcgdGhlIGRldmljZS4KLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJfYnVmZmVyX25ldyksCi0JICAoZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfbmV3KSwgKGdzdF92NGwyX2J1ZmZlcl9wb29sX2FjdGl2YXRlKSwKLQkgIChnc3RfdjRsMnNyY19maWxsX2Zvcm1hdF9saXN0KSwgKGdzdF92NGwyc3JjX2dyYWJfZnJhbWUpLAotCSAgKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKSwgKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCk6Ci0JICBBZGQgc29tZSBtb3JlIGRlYnVnIGluZm8gd2hlbiBkZXF1ZWluZyBhIGZyYW1lLgotCi0yMDA3LTA5LTA0IDE0OjM3OjIyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBNb3JlIGNvZGUgY2xlYW51cHMuIEFkZCBzb21lIG1vcmUgY29tbWVudCBhbmQgaW1wcm92ZSBkZWJ1Z3MgbG9ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIE1vcmUgY29kZSBjbGVhbnVwcy4gQWRkIHNvbWUgbW9yZSBjb21tZW50IGFuZCBpbXByb3ZlIGRlYnVncyBsb2dzLgotCi0yMDA3LTA5LTA0IDA3OjU4OjM2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS4qOiBJbXBsZW1lbnQgc2Vlay1xdWVyeS4gUmVmYWN0b3IgZHVyYXRpb24gY2FsY3VsYXRpb25zLiBBcHByb3ByaWF0ZSB1c2Ugb2YgdWludDY0X3NjYWxlX2ludC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIEltcGxlbWVudCBzZWVrLXF1ZXJ5LiBSZWZhY3RvciBkdXJhdGlvbiBjYWxjdWxhdGlvbnMuIEFwcHJvcHJpYXRlIHVzZQotCSAgb2YgdWludDY0X3NjYWxlX2ludCBhbmQgdWludDY0X3NjYWxlLiBNb3ZlIHJlcGVhZGVkbHkgY2FsY3VsYXRlZCBzdHVmZgotCSAgb3V0IG9mIGxvb3BzLgotCi0yMDA3LTA5LTAzIDA3OjQ0OjM0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogSW1wbGVtZW50IHNlZWstcXVlcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgSW1wbGVtZW50IHNlZWstcXVlcnkuCi0KLTIwMDctMDgtMjkgMjE6NDM6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogVXNlIG5ldyBiYXNlc2luayBhc3luYyBwcm9wZXJ0eSB0byBtYWtlIHNwYXJzZSBSVENQIHBhY2tldCBub3Qgd2FpdCBmb3IgcHJlcm9sbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcF9zaW5rKSwKLQkgIChnc3RfcnRzcHNyY19kdXBfcHJpbnRmKToKLQkgIFVzZSBuZXcgYmFzZXNpbmsgYXN5bmMgcHJvcGVydHkgdG8gbWFrZSBzcGFyc2UgUlRDUCBwYWNrZXQgbm90IHdhaXQgZm9yCi0JICBwcmVyb2xsLgotCi0yMDA3LTA4LTI3IDE0OjQ0OjE5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06IERpc3QgdGhlIHJpZ2h0IGZpbGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JICBEaXN0IHRoZSByaWdodCBmaWxlLgotCi0yMDA3LTA4LTIzIDE2OjI3OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IE1ha2Ugc3VyZSB3ZSBnZW5lcmF0ZSBhbmQgcGFyc2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGluIHRoZSBQT1NJWCBsb2NhbGUgaW5zdGVhZCBvZiB0aGUgY3VycmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19kdXBfcHJpbnRmKSwKLQkgIChnc3RfcnRzcHNyY19nZXRfZmxvYXQpLCAoZ3N0X3J0c3BzcmNfcGxheSk6Ci0JICBNYWtlIHN1cmUgd2UgZ2VuZXJhdGUgYW5kIHBhcnNlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbiB0aGUgUE9TSVgKLQkgIGxvY2FsZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IGxvY2FsZS4KLQotMjAwNy0wOC0yMiAxNTowMToyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBGaXggbWV0aG9kIGRldGVjdGlvbiBhZ2Fpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19kb19zZWVrKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCSAgKGdzdF9ydHNwc3JjX3BsYXkpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBGaXggbWV0aG9kIGRldGVjdGlvbiBhZ2Fpbi4KLQkgIEtlZXAgdHJhY2sgb2Ygd2hlbiB3ZSBtdXN0IHNlbmQgYSBSYW5nZSBoZWFkZXIuCi0JICBVc2Ugc2VnbWVudCB2YWx1ZXMgZm9yIFJhbmdlLCBTcGVlZCBhbmQgU2NhbGUgaGVhZGVycy4KLQkgIFBhcnNlIFNwZWVkIGFuZCBTY2FsZSBoZWFkZXJzIHRvIHVwZGF0ZSB0aGUgc2VnbWVudCB2YWx1ZXMuCi0KLTIwMDctMDgtMjIgMDg6MjI6NTAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogSGFuZGxlIG9wdGlvbmFsIHY0bDIgaW9jdGxzIGdyYWNlZnVsbHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICBIYW5kbGUgb3B0aW9uYWwgdjRsMiBpb2N0bHMgZ3JhY2VmdWxseS4KLQotMjAwNy0wOC0yMCAxNjo1MjowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIGFuIEgyNjMgZGVwYXlsb2FkZXIuIEZpeGVzICMzNjkzOTIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYzogKGdzdF9ydHBfaDI2M19kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfaDI2M19kZXBheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfaDI2M19kZXBheV9pbml0KSwKLQkgIChnc3RfcnRwX2gyNjNfZGVwYXlfZmluYWxpemUpLCAoZ3N0X3J0cF9oMjYzX2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfaDI2M19kZXBheV9wcm9jZXNzKSwgKGdzdF9ydHBfaDI2M19kZXBheV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaDI2M19kZXBheV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaDI2M19kZXBheV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfaDI2M19kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5Lmg6Ci0JICBBZGRlZCBhbiBIMjYzIGRlcGF5bG9hZGVyLiBGaXhlcyAjMzY5MzkyLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzogKGdzdF9ydHBfaDI2M3BfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9oMjYzcF9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOiAoZ3N0X2ZyYWdtZW50YXRpb25fbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X3J0cF9oMjYzcF9wYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX2gyNjNwX3BheV9mbHVzaCk6Ci0JICBNYWtlIHRoZSBIMjYzKyBwYXkvZGVwYXlsb2FkZXIgc3VwcG9ydCBIMjYzLTE5OTggYW5kIEgyNjMtMjAwMAotCSAgcGF5bG9hZHMuCi0JICBBbHNvIGFsb3cgcGxhaW4gSDI2MyBvbiB0aGUgaDI2M3AgcGF5bG9hZGVycy4gRml4ZXMgIzQ2NTA0MC4KLQotMjAwNy0wOC0xOSAxOToxNjozMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyLzogQWRkIHNtYWxsIGNvbXBhcmlzaW9uIHdpdGggdGhlIGNoZWJ5c2hldiBmaWx0ZXJzIGluIHRoZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzoKLQkgIEFkZCBzbWFsbCBjb21wYXJpc2lvbiB3aXRoIHRoZSBjaGVieXNoZXYgZmlsdGVycyBpbiB0aGUgZG9jcy4KLQotMjAwNy0wOC0xOSAxOToxMTowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXVkaW9meC86IEFkZCBzbWFsbCBjb21wYXJpc2lvbiB3aXRoIHRoZSB3aW5kb3dlZCBzaW5jIGZpbHRlcnMgaW4gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVieXNoZXZmcmVxYmFuZC5jOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJ5c2hldmZyZXFsaW1pdC5jOgotCSAgQWRkIHNtYWxsIGNvbXBhcmlzaW9uIHdpdGggdGhlIHdpbmRvd2VkIHNpbmMgZmlsdGVycyBpbiB0aGUgZG9jcy4KLQotMjAwNy0wOC0xOSAxOTowMTo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy86IEFsc28gdGVzdCBldmVyeXRoaW5nIGluIDMyIGJpdCBmbG9hdCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Jwd3NpbmMuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChicHdzaW5jX3N1aXRlKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbHB3c2luYy5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGxwd3NpbmNfc3VpdGUpOgotCSAgQWxzbyB0ZXN0IGV2ZXJ5dGhpbmcgaW4gMzIgYml0IGZsb2F0IG1vZGUuCi0KLTIwMDctMDgtMTkgMTg6NDc6MTkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvOiBBbHNvIHRlc3QgMzIgYml0IGZsb2F0IG1vZGUgYW5kIHRoZSB0eXBlIDIgdmFyaWFudHMgb2YgdGhlIGZpbHRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVieXNoZXZmcmVxYmFuZC5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGF1ZGlvY2hlYnlzaGV2ZnJlcWJhbmRfc3VpdGUpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJ5c2hldmZyZXFsaW1pdC5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGF1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0X3N1aXRlKToKLQkgIEFsc28gdGVzdCAzMiBiaXQgZmxvYXQgbW9kZSBhbmQgdGhlIHR5cGUgMiB2YXJpYW50cyBvZiB0aGUgZmlsdGVycy4KLQotMjAwNy0wOC0xOCAxOTo0NDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBSZWZhY3RvciB0aGUgdWRwIGFuZCBpbnRlcmxlYXZlZCBsb29wIGZ1bmN0aW9uIGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKSwgKGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3ApOgotCSAgUmVmYWN0b3IgdGhlIHVkcCBhbmQgaW50ZXJsZWF2ZWQgbG9vcCBmdW5jdGlvbiBhIGJpdC4KLQotMjAwNy0wOC0xNyAxNzowODoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBQcm90ZWN0IGNvbm5lY3Rpb24gYWN0aXZpdHkgd2l0aCBhIG5ldyBsb2NrLCBhdm9pZHMgZGVhZGxvY2tzIHdoZW4gZ29pbmcgdG8gUEFVU0VELiBGaXhlcyAjNDU1Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfZmluYWxpemUpLCAoZ3N0X3J0c3BzcmNfY29ubmVjdGlvbl9zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19jb25uZWN0aW9uX3JlY2VpdmUpLCAoZ3N0X3J0c3BzcmNfc2lua19jaGFpbiksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX3JlcXVlc3QpLCAoZ3N0X3J0c3BzcmNfc2VuZF9rZWVwX2FsaXZlKSwKLQkgIChnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkKSwgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKSwKLQkgIChnc3RfcnRzcHNyY190cnlfc2VuZCksIChnc3RfcnRzcHNyY19wYXVzZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIFByb3RlY3QgY29ubmVjdGlvbiBhY3Rpdml0eSB3aXRoIGEgbmV3IGxvY2ssIGF2b2lkcyBkZWFkbG9ja3Mgd2hlbiBnb2luZwotCSAgdG8gUEFVU0VELiBGaXhlcyAjNDU1ODA4LgotCi0yMDA3LTA4LTE3IDE1OjMwOjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZGVidWcvcm5kYnVmZmVyc2l6ZS5jOiBGaXggZGVidWcgc3RhdGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9ybmRidWZmZXJzaXplLmM6IChnc3Rfcm5kX2J1ZmZlcl9zaXplX2xvb3ApOgotCSAgRml4IGRlYnVnIHN0YXRlbWVudC4KLQotMjAwNy0wOC0xNyAxNToyODo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBGaXggc3RyYXkgJXUgaW4gZGVidWcgbGluZSBhcyBzcG90dGVkIGJ5IFNhdXIgb24gSVJDLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2RvX3N0cmVhbV9lb3MpOgotCSAgRml4IHN0cmF5ICV1IGluIGRlYnVnIGxpbmUgYXMgc3BvdHRlZCBieSBTYXVyIG9uIElSQy4KLQotMjAwNy0wOC0xNyAxNTowNToxNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBVc2UgZ2VuZXJhdG9yIG1hY3JvcyBmb3IgdGhlIHByb2Nlc3MgZnVuY3Rpb25zIGZvciB0aGUgZGlmZmVyZW50IHNhbXBsZSB0eXBlcywgYWRkIGxvd2VyIHVwcGVyIGJvdW5kYXJpZXMgZm9yIHRoZSBHT2IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuYzogKGdzdF9icHdzaW5jX2NsYXNzX2luaXQpLAotCSAgKGJwd3NpbmNfc2V0X3Byb3BlcnR5KSwgKGJwd3NpbmNfZ2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmg6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2xwd3NpbmNfaW5pdCksIChscHdzaW5jX2J1aWxkX2tlcm5lbCksIChscHdzaW5jX3NldF9wcm9wZXJ0eSksCi0JICAobHB3c2luY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuaDoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbHB3c2luYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgVXNlIGdlbmVyYXRvciBtYWNyb3MgZm9yIHRoZSBwcm9jZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIGRpZmZlcmVudAotCSAgc2FtcGxlIHR5cGVzLCBhZGQgbG93ZXIgdXBwZXIgYm91bmRhcmllcyBmb3IgdGhlIEdPYmplY3QgcHJvcGVydGllcwotCSAgc28gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgVUlzIGNhbiB1c2Ugc2xpZGVycyBhbmQgY2hhbmdlIGZyZXF1ZW5jeQotCSAgcHJvcGVydGllcyB0byBmbG9hdHMgdG8gc2F2ZSBhIGJpdCBvZiBtZW1vcnksIGV2ZW4gaW50cyB3b3VsZCBpbgotCSAgdGhlb3J5IGJlIGVub3VnaC4gQWxzbyByZW5hbWUgZnJlcXVlbmN5IHRvIGN1dG9mZiBmb3IgY29uc2lzdGVuY3kKLQkgIHJlYXNvbnMuCi0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuc2lnbmFsczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzdHJ0cG1hbmFnZXIueG1sOgotCSAgUmVnZW5lcmF0ZWQgZm9yIHRoZSBhYm92ZSBjaGFuZ2VzLgotCi0yMDA3LTA4LTE3IDE0OjQzOjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogVXNlIGdlbmVyYXRvciBtYWNyb3MgZm9yIHRoZSBwcm9jZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIGRpZmZlcmVudCBzYW1wbGUgdHlwZXMsIGFkZCBsb3dlciB1cHBlciBib3VuZGFyaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYnlzaGV2ZnJlcWJhbmQuYzoKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfYmFuZF9jbGFzc19pbml0KToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVieXNoZXZmcmVxbGltaXQuYzoKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfY2xhc3NfaW5pdCk6Ci0JICBVc2UgZ2VuZXJhdG9yIG1hY3JvcyBmb3IgdGhlIHByb2Nlc3MgZnVuY3Rpb25zIGZvciB0aGUgZGlmZmVyZW50Ci0JICBzYW1wbGUgdHlwZXMsIGFkZCBsb3dlciB1cHBlciBib3VuZGFyaWVzIGZvciB0aGUgR09iamVjdCBwcm9wZXJ0aWVzCi0JICBzbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBVSXMgY2FuIHVzZSBzbGlkZXJzIGFuZCBhZGQgYSBub3RlIGFib3V0Ci0JICB0aGUgbnVtYmVyIG9mIHBvbGVzIGFzIGEgdG9vIGhpZ2ggbnVtYmVyIG9mIHBvbGVzIGNvbWJpbmVkIHdpdGgKLQkgIHZlcnkgbG93IG9yIHZlcnkgaGlnaCBmcmVxdWVuY2llcyB3aWxsIHByb2R1Y2Ugb25seSBub2lzZS4KLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgUmVnZW5lcmF0ZWQgZm9yIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLgotCi0yMDA3LTA4LTE3IDE0OjE1OjE5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IEltcHJvdmUgdGltZW91dCBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHNwc3JjX2ZsdXNoKSwgKGdzdF9ydHNwc3JjX3NpbmtfY2hhaW4pLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwX3NpbmspLAotCSAgKGdzdF9ydHNwc3JjX3NlbmRfa2VlcF9hbGl2ZSksIChnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkKSwKLQkgIChnc3RfcnRzcHNyY19sb29wX3VkcCksIChnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kKSwKLQkgIChnc3RfcnRzcHNyY190cnlfc2VuZCksIChnc3RfcnRzcHNyY19zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKSwgKGdzdF9ydHNwc3JjX3BhcnNlX3JhbmdlKSwKLQkgIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX2Nsb3NlKSwgKGdzdF9ydHNwc3JjX3BhdXNlKSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSksIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBJbXByb3ZlIHRpbWVvdXQgaGFuZGxpbmcuCi0JICBVc2UgdGhlIHNhbWUgc29ja2V0IGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgUlRDUCBwYWNrZXRzIHNvIHRoYXQgc29tZQotCSAgc2VydmVycyBjYW4gdHJhY2sgY2xpZW50cyBiZXR0ZXIuCi0JICBJbXByb3ZlIGNvbm5lY3Rpb24gY2xvc2VkIGhhbmRsaW5nLiBUcnkgdG8gcmVjb25uZWN0LgotCSAgRG9uJ3Qgb3ZlcndyaXRlIG91ciBjb250ZW50IGJhc2Ugd2l0aCBOVUxMLgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcuCi0JICBJbXByb3ZlIHJhbmdlIHBhcnNpbmcgYW5kIGhhbmRsaW5nLgotCSAgUmVtb3ZlIGZsdXNoaW5nIGhhY2sgbm93IHRoYXQgY29yZSBkb2VzIHRoZSByaWdodCB0aGluZy4KLQotMjAwNy0wOC0xNyAxMzo1OToxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuKjogQWRkIHN1cHBvcnQgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIHNvY2tldCB0byB1c2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X211bHRpdWRwc2lua19pbml0KSwgKGdzdF9tdWx0aXVkcHNpbmtfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfbXVsdGl1ZHBzaW5rX2luaXRfc2VuZCksCi0JICAoZ3N0X211bHRpdWRwc2lua19jbG9zZSksIChnc3RfbXVsdGl1ZHBzaW5rX2FkZCk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgc29ja2V0IHRvIHVzZS4KLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY2xhc3NfaW5pdCksIChnc3RfdWRwc3JjX2luaXQpLAotCSAgKGdzdF91ZHBzcmNfY3JlYXRlKSwgKGdzdF91ZHBzcmNfZ2V0X3Byb3BlcnR5KToKLQkgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSBjdXJyZW50bHkgdXNlZCBzb2NrZXQuCi0KLTIwMDctMDgtMTYgMTk6MjI6NDggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci9nc3RicHdzaW5jLio6IEltcGxlbWVudCBsYXRlbmN5IHF1ZXJ5IGFuZCBvbmx5IGZvcndhcmQgdGhvc2Ugc2FtcGxlcyBkb3duc3RyZWFtIHRoYXQgYWN0dWFsbHkgY29udGFpbiB0aGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChnc3RfYnB3c2luY19jbGFzc19pbml0KSwKLQkgIChnc3RfYnB3c2luY19pbml0KSwgKHByb2Nlc3NfMzIpLCAocHJvY2Vzc182NCksCi0JICAoYnB3c2luY19idWlsZF9rZXJuZWwpLCAoYnB3c2luY19wdXNoX3Jlc2lkdWUpLAotCSAgKGJwd3NpbmNfdHJhbnNmb3JtKSwgKGJwd3NpbmNfc3RhcnQpLCAoYnB3c2luY19xdWVyeSksCi0JICAoYnB3c2luY19xdWVyeV90eXBlKSwgKGJwd3NpbmNfZXZlbnQpLCAoYnB3c2luY19zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuaDoKLQkgIEltcGxlbWVudCBsYXRlbmN5IHF1ZXJ5IGFuZCBvbmx5IGZvcndhcmQgdGhvc2Ugc2FtcGxlcyBkb3duc3RyZWFtCi0JICB0aGF0IGFjdHVhbGx5IGNvbnRhaW4gdGhlIGRhdGEgd2Ugd2FudCwgaS5lLiBkcm9wIGtlcm5lbF9sZW5ndGgvMgotCSAgaW4gdGhlIGJlZ2lubmluZyBhbmQgYXBwZW5kIGtlcm5lbF9sZW5ndGgvMiAoY3JlYXRlZCBieSBjb252b2x2aW5nCi0JICB0aGUgZmlsdGVyIGtlcm5lbCB3aXRoIHplcm9lcykgdG8gdGhlIGVuZC4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYnB3c2luYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRqdXN0IHRoZSB1bml0IHRlc3QgZm9yIHRoaXMgc2xpZ2h0bHkgY2hhbmdlZCBiZWhhdmlvdXIuCi0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAobHB3c2luY19idWlsZF9rZXJuZWwpOgotCSAgUmVzZXQgcmVzaWR1ZSBsZW5ndGggb25seSB3aGVuIGFjdHVhbGx5IGNyZWF0aW5nIGEgcmVzaWR1ZS4KLQotMjAwNy0wOC0xNiAxNzowMjowNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXVkaW9meC86IEFkZCBDaGVieXNoZXYgbG93cGFzcy9oaWdocGFzcyBhbmQgYmFuZHBhc3MvYmFuZHJlamVjdCBlbGVtZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmV2aWV3ZWQgYnk6IFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0JICAqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2NoZWJ5c2hldmZyZXFiYW5kLmM6Ci0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2JhbmRfbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2JhbmRfYmFzZV9pbml0KSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfYmFuZF9kaXNwb3NlKSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfYmFuZF9jbGFzc19pbml0KSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfYmFuZF9pbml0KSwKLQkgIChnZW5lcmF0ZV9iaXF1YWRfY29lZmZpY2llbnRzKSwgKGNhbGN1bGF0ZV9nYWluKSwKLQkgIChnZW5lcmF0ZV9jb2VmZmljaWVudHMpLAotCSAgKGdzdF9hdWRpb19jaGVieXNoZXZfZnJlcV9iYW5kX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2JhbmRfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfYmFuZF9zZXR1cCksIChwcm9jZXNzKSwgKHByb2Nlc3NfNjQpLAotCSAgKHByb2Nlc3NfMzIpLCAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2JhbmRfdHJhbnNmb3JtX2lwKSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfYmFuZF9zdGFydCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYnlzaGV2ZnJlcWJhbmQuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9jaGVieXNoZXZmcmVxbGltaXQuYzoKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2xpbWl0X2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2NoZWJ5c2hldl9mcmVxX2xpbWl0X2Rpc3Bvc2UpLAotCSAgKGdzdF9hdWRpb19jaGVieXNoZXZfZnJlcV9saW1pdF9jbGFzc19pbml0KSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfaW5pdCksCi0JICAoZ2VuZXJhdGVfYmlxdWFkX2NvZWZmaWNpZW50cyksIChjYWxjdWxhdGVfZ2FpbiksCi0JICAoZ2VuZXJhdGVfY29lZmZpY2llbnRzKSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fY2hlYnlzaGV2X2ZyZXFfbGltaXRfc2V0dXApLCAocHJvY2VzcyksIChwcm9jZXNzXzY0KSwKLQkgIChwcm9jZXNzXzMyKSwgKGdzdF9hdWRpb19jaGVieXNoZXZfZnJlcV9saW1pdF90cmFuc2Zvcm1faXApLAotCSAgKGdzdF9hdWRpb19jaGVieXNoZXZfZnJlcV9saW1pdF9zdGFydCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0Lmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvZnguYzogKHBsdWdpbl9pbml0KToKLQkgIEFkZCBDaGVieXNoZXYgbG93cGFzcy9oaWdocGFzcyBhbmQgYmFuZHBhc3MvYmFuZHJlamVjdCBlbGVtZW50cy4KLQkgIEZpeGVzICM0NjQ4MDAuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJ5c2hldmZyZXFiYW5kLmM6Ci0JICAoc2V0dXBfYXVkaW9jaGVieXNoZXZmcmVxYmFuZCksIChjbGVhbnVwX2F1ZGlvY2hlYnlzaGV2ZnJlcWJhbmQpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGF1ZGlvY2hlYnlzaGV2ZnJlcWJhbmRfc3VpdGUpLCAobWFpbik6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYnlzaGV2ZnJlcWxpbWl0LmM6Ci0JICAoc2V0dXBfYXVkaW9jaGVieXNoZXZmcmVxbGltaXQpLCAoY2xlYW51cF9hdWRpb2NoZWJ5c2hldmZyZXFsaW1pdCksCi0JICAoR1NUX1NUQVJUX1RFU1QpLCAoYXVkaW9jaGVieXNoZXZmcmVxbGltaXRfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIGNoZWJ5c2hldiBmaWx0ZXJzLgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWw6Ci0JICBBbmQgYWRkIGRvY3MgZm9yIHRoZSBjaGVieXNoZXYgZmlsdGVycy4gV2hpbGUgZG9pbmcKLQkgIHRoYXQgYWxzbyBydW4gbWFrZSB1cGRhdGUgaW4gZG9jcy9wbHVnaW5zLgotCi0yMDA3LTA4LTE2IDEyOjE1OjA2ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1ha2Ugcm8gbWVtb3J5IHRvIHNoYXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWx0YWcuYzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIE1ha2Ugcm8gbWVtb3J5IHRvIHNoYXJlLgotCi0yMDA3LTA4LTE2IDExOjQ5OjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy5jOiBJbXByb3ZlIFVEUCBwZXJmb3JtYW5jZSBieSBhdm9pZGluZyBhIHNlbGVjdCgpIHdoZW4gd2UgaGF2ZSBkYXRhIGF2YWlsYWJsZSBpbW1lZGlhdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NyZWF0ZSk6Ci0JICBJbXByb3ZlIFVEUCBwZXJmb3JtYW5jZSBieSBhdm9pZGluZyBhIHNlbGVjdCgpIHdoZW4gd2UgaGF2ZSBkYXRhCi0JICBhdmFpbGFibGUgaW1tZWRpYXRseS4KLQotMjAwNy0wOC0xNiAxMTo0NzoxOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRwZGVjLio6IEFkZCAoZHVtbXkpIFNTUkMgbWFuYWdlbWVudCBzaWduYWxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cF9kZWNfbWFyc2hhbF9WT0lEX19VSU5UX1VJTlQpLAotCSAgKGdzdF9ydHBfZGVjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHBkZWMuaDoKLQkgIEFkZCAoZHVtbXkpIFNTUkMgbWFuYWdlbWVudCBzaWduYWxzLgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfcnRzcHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3J0c3BzcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChmaW5kX3N0cmVhbSksIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwgKG5ld19zZXNzaW9uX3BhZCksCi0JICAocmVxdWVzdF9wdF9tYXApLCAoZ3N0X3J0c3BzcmNfZG9fc3RyZWFtX2VvcyksIChvbl9ieWVfc3NyYyksCi0JICAob25fdGltZW91dCksIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX21hbmFnZXIpLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9wdXNoX2V2ZW50KSwgKGdzdF9ydHNwc3JjX3B1c2hfZXZlbnQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLCAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpLCAoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgQWRkIGNvbm5lY3Rpb24tc3BlZWQgcHJvcGVydHkuCi0JICBBZGQgZmluZF9zdHJlYW0gaGVscGVyIGZ1bmN0aW9ucy4KLQkgIEhhbmRsZSBzdHJlYW0gRU9TIGJhc2VkIG9uIEJZRSBtZXNzYWdlcyBvciBTU1JDIHRpbWVvdXQuCi0JICBSZXR1cm5zIFNVQ0NFU1MgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGFzIHdlIGhpZGUgb3VyIGFzeW5jCi0JICBlbGVtZW50cyBmcm9tIHRoZSBwYXJlbnQuCi0KLTIwMDctMDgtMTYgMDk6NDg6MjcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci9nc3RscHdzaW5jLio6IEltcGxlbWVudCBsYXRlbmN5IHF1ZXJ5IGFuZCBvbmx5IGZvcndhcmQgdGhvc2Ugc2FtcGxlcyBkb3duc3RyZWFtIHRoYXQgYWN0dWFsbHkgY29udGFpbiB0aGUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6IChnc3RfbHB3c2luY19jbGFzc19pbml0KSwKLQkgIChnc3RfbHB3c2luY19pbml0KSwgKHByb2Nlc3NfMzIpLCAocHJvY2Vzc182NCksCi0JICAobHB3c2luY19idWlsZF9rZXJuZWwpLCAobHB3c2luY19wdXNoX3Jlc2lkdWUpLAotCSAgKGxwd3NpbmNfdHJhbnNmb3JtKSwgKGxwd3NpbmNfc3RhcnQpLCAobHB3c2luY19xdWVyeSksCi0JICAobHB3c2luY19xdWVyeV90eXBlKSwgKGxwd3NpbmNfZXZlbnQpLCAobHB3c2luY19zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuaDoKLQkgIEltcGxlbWVudCBsYXRlbmN5IHF1ZXJ5IGFuZCBvbmx5IGZvcndhcmQgdGhvc2Ugc2FtcGxlcyBkb3duc3RyZWFtCi0JICB0aGF0IGFjdHVhbGx5IGNvbnRhaW4gdGhlIGRhdGEgd2Ugd2FudCwgaS5lLiBkcm9wIGtlcm5lbF9sZW5ndGgvMgotCSAgaW4gdGhlIGJlZ2lubmluZyBhbmQgYXBwZW5kIGtlcm5lbF9sZW5ndGgvMiAoY3JlYXRlZCBieSBjb252b2x2aW5nCi0JICB0aGUgZmlsdGVyIGtlcm5lbCB3aXRoIHplcm9lcykgdG8gdGhlIGVuZC4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbHB3c2luYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWRqdXN0IHRoZSB1bml0IHRlc3QgZm9yIHRoaXMgc2xpZ2h0bHkgY2hhbmdlZCBiZWhhdmlvdXIuCi0KLTIwMDctMDgtMTYgMDc6NDA6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2RlYnVnL3JuZGJ1ZmZlcnNpemUuYzogRml4IGRhIGxlYWsuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL3JuZGJ1ZmZlcnNpemUuYzoKLQkgIEZpeCBkYSBsZWFrLgotCi0yMDA3LTA4LTE0IDEzOjUwOjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9kZWJ1Zy86IEFkZCBuZXcgdGVzdCBlbGVtZW50IGFuZCBjbGVhbi11cCB0aGUgb3RoZXJzIGEgbGl0dGxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RkZWJ1Zy5jOgotCSAgKiBnc3QvZGVidWcvbmVnb3RpYXRpb24uYzoKLQkgICogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6Ci0JICAqIGdzdC9kZWJ1Zy9ybmRidWZmZXJzaXplLmM6Ci0JICAqIGdzdC9kZWJ1Zy90ZXN0cGx1Z2luLmM6Ci0JICBBZGQgbmV3IHRlc3QgZWxlbWVudCBhbmQgY2xlYW4tdXAgdGhlIG90aGVycyBhIGxpdHRsZS4KLQotMjAwNy0wOC0xMyAxMzo1MDozOSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBZGQgZG9jcyBmb3IgbHB3c2luYyBhbmQgYnB3c2luYyBhbmQgaW50ZWdyYXRlIHRoZW0gaW50byB0aGUgYnVpbGQgc3lzdGVtLiBXaGlsZSBkb2luZyB0aGF0IGFsc28gdXBkYXRlIGFsbCBvdGhlciBkb2MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuc2lnbmFsczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWJ6Mi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZHhhcGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRzZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZhYWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmFhZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1maWx0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZnJlZXplLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdzbS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc3RydHBtYW5hZ2VyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWgyNjRwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb2RwbHVnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1wZWcyZW5jLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11c2VwYWNrLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11c2ljYnJhaW56LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5zZmRlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdW5kdG91Y2gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BjZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWVkLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXR0YS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb3NpZ25hbC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW5naGVhZGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXh2aWQueG1sOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuYzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmg6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuaDoKLQkgIEFkZCBkb2NzIGZvciBscHdzaW5jIGFuZCBicHdzaW5jIGFuZCBpbnRlZ3JhdGUgdGhlbQotCSAgaW50byB0aGUgYnVpbGQgc3lzdGVtLiBXaGlsZSBkb2luZyB0aGF0IGFsc28gdXBkYXRlCi0JICBhbGwgb3RoZXIgZG9jcyB2aWEgbWFrZSB1cGRhdGUgaW4gZG9jcy9wbHVnaW5zLgotCi0yMDA3LTA4LTEyIDIwOjU1OjAxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Jwd3NpbmMuYzogTWFrZSBvbmUgdGVzdCBjb25zdHJhaW50IGEgYml0IHN0cmljdGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Jwd3NpbmMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIE1ha2Ugb25lIHRlc3QgY29uc3RyYWludCBhIGJpdCBzdHJpY3Rlci4KLQotMjAwNy0wOC0xMiAyMDo1MzoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCB1bml0IHRlc3RzIGZvciBicHdzaW5jLCB0ZXN0aW5nIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2Jwd3NpbmMuYzogKHNldHVwX2Jwd3NpbmMpLAotCSAgKGNsZWFudXBfYnB3c2luYyksIChHU1RfU1RBUlRfVEVTVCksIChicHdzaW5jX3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHVuaXQgdGVzdHMgZm9yIGJwd3NpbmMsIHRlc3RpbmcgZnVuZGFtZW50YWwgZnVuY3Rpb25hbGl0eSBhZ2Fpbi4KLQotMjAwNy0wOC0xMiAyMDoxOTozNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCB1bml0IHRlc3RzIGZvciBscHdzaW5jLCB0ZXN0aW5nIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xwd3NpbmMuYzogKHNldHVwX2xwd3NpbmMpLAotCSAgKGNsZWFudXBfbHB3c2luYyksIChHU1RfU1RBUlRfVEVTVCksIChscHdzaW5jX3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHVuaXQgdGVzdHMgZm9yIGxwd3NpbmMsIHRlc3RpbmcgZnVuZGFtZW50YWwgZnVuY3Rpb25hbGl0eS4KLQotMjAwNy0wOC0xMiAxNTo0MTo1NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyLzogSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChicHdzaW5jX2J1aWxkX2tlcm5lbCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAobHB3c2luY19idWlsZF9rZXJuZWwpOgotCSAgSW1wcm92ZSBkZWJ1Z2dpbmcgYSBiaXQuCi0KLTIwMDctMDgtMTIgMTQ6MzU6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRml4IHBhcnNpbmcgb2YgbXA0YSB2ZXJzaW9uIDAgYXRvbXMuIEZpeGVzICM0NjU3NzQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV9ub2RlKToKLQkgIEZpeCBwYXJzaW5nIG9mIG1wNGEgdmVyc2lvbiAwIGF0b21zLiBGaXhlcyAjNDY1Nzc0LgotCi0yMDA3LTA4LTEyIDEyOjQ2OjIwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9maWx0ZXIvOiBSZXNldCB0aGUgcmVzaWR1ZSBpbiBCYXNlVHJhbnNmb3JtOjpzdGFydCB0byBnZXQgYSBjbGVhbiByZXNpZHVlIG9uIHN0cmVhbSBjaGFuZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoZ3N0X2Jwd3NpbmNfY2xhc3NfaW5pdCksCi0JICAoYnB3c2luY19zdGFydCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCksCi0JICAobHB3c2luY19zdGFydCk6Ci0JICBSZXNldCB0aGUgcmVzaWR1ZSBpbiBCYXNlVHJhbnNmb3JtOjpzdGFydCB0byBnZXQgYSBjbGVhbiByZXNpZHVlCi0JICBvbiBzdHJlYW0gY2hhbmdlcy4KLQotMjAwNy0wOC0xMSAxNTo1ODozMCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyLzogRml4IHByb2Nlc3Npbmcgd2l0aCBidWZmZXIgc2l6ZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGZpbHRlciBrZXJuZWwgc2l6ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuYzogKHByb2Nlc3NfMzIpLCAocHJvY2Vzc182NCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAocHJvY2Vzc18zMiksIChwcm9jZXNzXzY0KToKLQkgIEZpeCBwcm9jZXNzaW5nIHdpdGggYnVmZmVyIHNpemVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBmaWx0ZXIKLQkgIGtlcm5lbCBzaXplLgotCi0yMDA3LTA4LTEwIDE3OjA4OjAxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6IEluY2x1ZGUgc3RkbGliLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JICBJbmNsdWRlIHN0ZGxpYi4KLQotMjAwNy0wOC0xMCAxNjoxMDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOiBTZXQgdGhlIG1wZWd2ZXJzaW9uIGluIHRoZSBjYXBzIHNvIHRoYXQgYXV0b3BsdWdnaW5nIGRvZXMgbm90IGdldCBjb25mdXNlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6Ci0JICBTZXQgdGhlIG1wZWd2ZXJzaW9uIGluIHRoZSBjYXBzIHNvIHRoYXQgYXV0b3BsdWdnaW5nIGRvZXMgbm90IGdldAotCSAgY29uZnVzZWQuCi0KLTIwMDctMDgtMTAgMDU6NTE6NDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IEZpeCBhIHNlZ2ZhdWx0IHdpdGggbW9yZSB0aGFuIG9uZSBjaGFubmVsIGFuZCBkb24ndCByZWJ1aWxkIHRoZSBrZXJuZWwgJiByZXNpZHVlIHdpdGggZXZlcnkgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChicHdzaW5jX2J1aWxkX2tlcm5lbCk6Ci0JICBGaXggYSBzZWdmYXVsdCB3aXRoIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCBhbmQgZG9uJ3QgcmVidWlsZAotCSAgdGhlIGtlcm5lbCAmIHJlc2lkdWUgd2l0aCBldmVyeSBidWZmZXIuCi0KLTIwMDctMDgtMTAgMDU6MzU6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci9nc3RicHdzaW5jLio6IEFkZCBzdXBwb3J0IGZvciBhIGJhbmRyZWplY3QgbW9kZSBhbmQgYWxsb3cgc3BlY2lmeWluZyB0aGUgd2luZG93IGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChnc3RfYnB3c2luY19tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfYnB3c2luY193aW5kb3dfZ2V0X3R5cGUpLCAoZ3N0X2Jwd3NpbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2Jwd3NpbmNfaW5pdCksIChicHdzaW5jX2J1aWxkX2tlcm5lbCksIChicHdzaW5jX3NldF9wcm9wZXJ0eSksCi0JICAoYnB3c2luY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuaDoKLQkgIEFkZCBzdXBwb3J0IGZvciBhIGJhbmRyZWplY3QgbW9kZSBhbmQgYWxsb3cgc3BlY2lmeWluZyB0aGUgd2luZG93Ci0JICBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB1c2VkLgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzoKLQkgIEFuZCBhbm90aGVyIHNtYWxsIGZvcm1hdHRpbmcgZml4LgotCi0yMDA3LTA4LTEwIDA1OjIwOjA2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy4qOiBBcHBseSB0aGUgc2FtZSBjaGFuZ2VzIHRvIHRoZSBiYW5kcGFzcyBmaWx0ZXI6Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RicHdzaW5jLmM6IChnc3RfYnB3c2luY19jbGFzc19pbml0KSwKLQkgIChnc3RfYnB3c2luY19pbml0KSwgKHByb2Nlc3NfMzIpLCAocHJvY2Vzc182NCksCi0JICAoYnB3c2luY19idWlsZF9rZXJuZWwpLCAoYnB3c2luY19zZXR1cCksIChicHdzaW5jX2dldF91bml0X3NpemUpLAotCSAgKGJwd3NpbmNfdHJhbnNmb3JtKSwgKGJwd3NpbmNfc2V0X3Byb3BlcnR5KSwKLQkgIChicHdzaW5jX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5oOgotCSAgQXBwbHkgdGhlIHNhbWUgY2hhbmdlcyB0byB0aGUgYmFuZHBhc3MgZmlsdGVyOgotCSAgLSBTdXBwb3J0IGRvdWJsZSBpbnB1dAotCSAgLSBGaXggcHJvY2Vzc2luZyBmb3IgaW5wdXQgd2l0aCA+MSBjaGFubmVscwotCSAgLSBTcGVjaWZ5IGZyZXF1ZW5jeSBpbiBIegotCSAgLSBTcGVjaWZ5IGFjdHVhbCBmaWx0ZXIga2VybmVsIGxlbmd0aAotCSAgLSBVc2UgdHJhbnNmb3JtIGluc3RlYWQgb2YgdHJhbnNmb3JtX2lwIGFzIHdlJ3JlIHdvcmtpbmcKLQkgIG91dCBvZiBwbGFjZSBhbnl3YXkKLQkgIC0gRmFjdG9yIG91dCBmaWx0ZXIga2VybmVsIGdlbmVyYXRpb24gYW5kIHVwZGF0ZSB0aGUgZmlsdGVyCi0JICBrZXJuZWwgd2hlbiB0aGUgcHJvcGVydGllcyBhcmUgc2V0Ci0JICBGaXggYmFuZHBhc3MgZmlsdGVyIGtlcm5lbCBnZW5lcmF0aW9uIHRvIGFjdHVhbGx5IGdlbmVyYXRlCi0JICBhIGJhbmRwYXNzIGZpbHRlciBieSBjcmVhdGluZyBhIGhpZ2hwYXNzIGluc3RlYWQgb2YgYSBzZWNvbmQKLQkgIGxvd3Bhc3MuCi0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCk6Ci0JICBTbWFsbCBmb3JtYXR0aW5nIGZpeC4KLQotMjAwNy0wOC0xMCAwNDo0NDo0MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuKjogU3BlY2lmeSB0aGUgYWN0dWFsIGZpbHRlciBsZW5ndGggaW5zdGVhZCBvZiBhIHdlaXJkIDJOKzEuIFNldHRpbmcgdGhlIHByb3BlcnR5IHdpbGwgcm91bmQgdG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogKGdzdF9scHdzaW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9scHdzaW5jX2luaXQpLCAocHJvY2Vzc18zMiksIChwcm9jZXNzXzY0KSwKLQkgIChscHdzaW5jX2J1aWxkX2tlcm5lbCksIChscHdzaW5jX3NldF9wcm9wZXJ0eSksCi0JICAobHB3c2luY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuaDoKLQkgIFNwZWNpZnkgdGhlIGFjdHVhbCBmaWx0ZXIgbGVuZ3RoIGluc3RlYWQgb2YgYSB3ZWlyZAotCSAgMk4rMS4gU2V0dGluZyB0aGUgcHJvcGVydHkgd2lsbCByb3VuZCB0byB0aGUgbmV4dCBvZGQgbnVtYmVyLgotCSAgQWxzbyByZW1vdmUgbm93IG9ic29sZXRlIEZJWE1Fcy4KLQotMjAwNy0wOC0xMCAwNDozMjo0NyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuKjogQWxsb3cgY2hvb3NpbmcgYmV0d2VlbiBoYW1taW5nIGFuZCBibGFja21hbiB3aW5kb3cuIFRoZSBibGFja21hbiB3aW5kb3cgcHJvdmlkZXMgYSBiZXR0ZXIgc3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogKGdzdF9scHdzaW5jX3dpbmRvd19nZXRfdHlwZSksCi0JICAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCksIChnc3RfbHB3c2luY19pbml0KSwKLQkgIChscHdzaW5jX2J1aWxkX2tlcm5lbCksIChscHdzaW5jX3NldF9wcm9wZXJ0eSksCi0JICAobHB3c2luY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuaDoKLQkgIEFsbG93IGNob29zaW5nIGJldHdlZW4gaGFtbWluZyBhbmQgYmxhY2ttYW4gd2luZG93LiBUaGUgYmxhY2ttYW4KLQkgIHdpbmRvdyBwcm92aWRlcyBhIGJldHRlciBzdG9wYmFuZCBhdHRlbnVhdGlvbiBidXQgYSBiaXQgc2xvd2VyCi0JICByb2xsb2ZmLgotCi0yMDA3LTA4LTEwIDA0OjIxOjM5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy4qOiBBZGQgYSBoaWdocGFzcyBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAoZ3N0X2xwd3NpbmNfbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCksIChwcm9jZXNzXzMyKSwgKHByb2Nlc3NfNjQpLAotCSAgKGxwd3NpbmNfYnVpbGRfa2VybmVsKSwgKGxwd3NpbmNfc2V0X3Byb3BlcnR5KSwKLQkgIChscHdzaW5jX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5oOgotCSAgQWRkIGEgaGlnaHBhc3MgbW9kZS4KLQotMjAwNy0wOC0xMCAwNDowNjo1MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogRml4IHByb2Nlc3NpbmcgaWYgdGhlIGlucHV0IGhhcyBtb3JlIHRoYW4gb25lIGNoYW5uZWwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6IChwcm9jZXNzXzMyKSwgKHByb2Nlc3NfNjQpLAotCSAgKGxwd3NpbmNfYnVpbGRfa2VybmVsKToKLQkgIEZpeCBwcm9jZXNzaW5nIGlmIHRoZSBpbnB1dCBoYXMgbW9yZSB0aGFuIG9uZSBjaGFubmVsLgotCi0yMDA3LTA4LTA5IDE5OjIzOjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAidGhpcyIgaXMgYSBDKysga2V5d29yZCwgdXNlICJzZWxmIiBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoZ3N0X2Jwd3NpbmNfZGlzcG9zZSksCi0JICAoZ3N0X2Jwd3NpbmNfaW5pdCksIChicHdzaW5jX3NldHVwKSwgKGJwd3NpbmNfdHJhbnNmb3JtX2lwKSwKLQkgIChicHdzaW5jX3NldF9wcm9wZXJ0eSksIChicHdzaW5jX2dldF9wcm9wZXJ0eSk6Ci0JICAidGhpcyIgaXMgYSBDKysga2V5d29yZCwgdXNlICJzZWxmIiBpbnN0ZWFkLgotCSAgQWRkIFRPRE9zIGFuZCBGSVhNRXMgYW5kIHJlbW92ZSB0d28gd3JvbmcgRklYTUVzLgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzoKLQkgIEFkZCBGSVhNRXMgYW5kIGEgbmV3IFRPRE8uCi0KLTIwMDctMDgtMDkgMTg6MDg6MDUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2ZpbHRlci9nc3RscHdzaW5jLio6IEFkZCBkb3VibGUgc3VwcG9ydCwgcmVwbGFjZSAidGhpcyIgd2l0aCAic2VsZiIgYXMgdGhlIGZvcm1lciBpcyBhIEMrKyBrZXl3b3JkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAoZ3N0X2xwd3NpbmNfZGlzcG9zZSksCi0JICAoZ3N0X2xwd3NpbmNfY2xhc3NfaW5pdCksIChnc3RfbHB3c2luY19pbml0KSwgKHByb2Nlc3NfMzIpLAotCSAgKHByb2Nlc3NfNjQpLCAobHB3c2luY19idWlsZF9rZXJuZWwpLCAobHB3c2luY19zZXR1cCksCi0JICAobHB3c2luY19nZXRfdW5pdF9zaXplKSwgKGxwd3NpbmNfdHJhbnNmb3JtKSwKLQkgIChscHdzaW5jX3NldF9wcm9wZXJ0eSksIChscHdzaW5jX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5oOgotCSAgQWRkIGRvdWJsZSBzdXBwb3J0LCByZXBsYWNlICJ0aGlzIiB3aXRoICJzZWxmIiBhcyB0aGUgZm9ybWVyCi0JICBpcyBhIEMrKyBrZXl3b3JkLgotCSAgSW1wbGVtZW50IHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgaW4gSHogaW5zdGVhZCBvZiBmcmFjdGlvbgotCSAgb2Ygc2FtcGxpbmcgZnJlcXVlbmN5LgotCSAgUmVtb3ZlIHNvbWUgdW5lY2Vzc2FyeSBGSVhNRXMgYW5kIGFkZCBzb21lIFRPRE9zLCBhZGQgc29tZQotCSAgcmVxdWlyZWQgbG9ja2luZyBhbmQgcmVmYWN0b3IgdGhlIGtlcm5lbCBnZW5lcmF0aW9uIGludG8gYQotCSAgc2VwYXJhdGUgZnVuY3Rpb24gdGhhdCBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSBwcm9wZXJ0aWVzCi0JICBjaGFuZ2Ugbm93LgotCSAgQW5kIHVzZSBCYXNlVHJhbnNmb3JtOjp0cmFuc2Zvcm0gaW5zdGVhZCBvZiB0cmFuc2Zvcm1faXAKLQkgIGFzIHRoZSBjb252b2x1dGlvbiBpcyBkb25lIG91dCBvZiBwbGFjZSBhbnl3YXkuIFNob3VsZAotCSAgYmUgZG9uZSBpbiBwbGFjZSBsYXRlci4KLQotMjAwNy0wOC0wOSAxMDo1NDowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBvLzogVXBkYXRlZCB0cmFuc2xhdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcG8vaHUucG86Ci0JICAqIHBvL3VrLnBvOgotCSAgKiBwby92aS5wbzoKLQkgIFVwZGF0ZWQgdHJhbnNsYXRpb25zLgotCi0yMDA3LTA4LTA4IDIwOjQ3OjMzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9maWx0ZXIvOiBVc2UgR3N0QXVkaW9GaWx0ZXIgYXMgYmFzZSBjbGFzcyBhbmQgZG9uJ3QgbGVhayB0aGUgbWVtb3J5IG9mIHRoZSBmaWx0ZXIga2VybmVsIGFuZCByZXNpZHVlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoZ3N0X2Jwd3NpbmNfZGlzcG9zZSksCi0JICAoZ3N0X2Jwd3NpbmNfYmFzZV9pbml0KSwgKGdzdF9icHdzaW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9icHdzaW5jX2luaXQpLCAoYnB3c2luY19zZXR1cCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5oOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogKGdzdF9scHdzaW5jX2Rpc3Bvc2UpLAotCSAgKGdzdF9scHdzaW5jX2Jhc2VfaW5pdCksIChnc3RfbHB3c2luY19jbGFzc19pbml0KSwKLQkgIChnc3RfbHB3c2luY19pbml0KSwgKGxwd3NpbmNfc2V0dXApOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuaDoKLQkgIFVzZSBHc3RBdWRpb0ZpbHRlciBhcyBiYXNlIGNsYXNzIGFuZCBkb24ndCBsZWFrIHRoZSBtZW1vcnkKLQkgIG9mIHRoZSBmaWx0ZXIga2VybmVsIGFuZCByZXNpZHVlLgotCi0yMDA3LTA4LTA4IDE3OjQ3OjA1ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBSZW5kZXIgcmlnaHQgYm9yZGVyIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF9heXV2X2k0MjApOgotCSAgUmVuZGVyIHJpZ2h0IGJvcmRlciBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KLQotMjAwNy0wOC0wOCAxMDo1NDo1MCArMDAwMCAgT2xpdmllciBDcmV0ZSA8dGVzdGVyQHRlc3Rlci5jYT4KLQotCSAgZ3N0L3J0cC86IE1ha2UgbW9kZSBwcm9wZXJ0eSBhIHN0cmluZy4gRml4ZXMgIzQ2NDQ3NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE9saXZpZXIgQ3JldGUgPHRlc3RlciBhdCB0ZXN0ZXIgZG90IGNhPgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOiAoZ3N0X3J0cF9pbGJjX2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzogKGdzdF9ydHBpbGJjcGF5X3NldGNhcHMpOgotCSAgTWFrZSBtb2RlIHByb3BlcnR5IGEgc3RyaW5nLiBGaXhlcyAjNDY0NDc1LgotCi0yMDA3LTA4LTA1IDE0OjU4OjIwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogV2lkZW4gY2FwcyB0byBtYXRjaCBkZWNvZGVyIGEgYml0IGFuZCBhZGQgbW9yZSBGSVhNRXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgV2lkZW4gY2FwcyB0byBtYXRjaCBkZWNvZGVyIGEgYml0IGFuZCBhZGQgbW9yZSBGSVhNRXMuCi0KLTIwMDctMDgtMDUgMTQ6NTM6MzYgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IEZpeCBPRE1MIGluZGV4IHRhZyBudW1iZXJpbmcuIEZpeGVzICM0NjM2MjQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgRml4IE9ETUwgaW5kZXggdGFnIG51bWJlcmluZy4gRml4ZXMgIzQ2MzYyNC4KLQotMjAwNy0wOC0wMyAxNjowODo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBGaXggZGVmYXVsdCBjbG9jay1yYXRlIGZvciByZWFsbWVkaWEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ2V0X2RlZmF1bHRfcmF0ZV9mb3JfcHQpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX3J0cG1hcCksIChnc3RfcnRzcHNyY19tZWRpYV90b19jYXBzKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RjcCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV91ZHBfc2luayk6Ci0JICBGaXggZGVmYXVsdCBjbG9jay1yYXRlIGZvciByZWFsbWVkaWEuCi0JICBGaXggcGFyc2luZyBvZiB0cmFuc3BvcnQuCi0JICBEb24ndCB0cnkgdG8gbGluayBOVUxMIHBhZHMuCi0KLTIwMDctMDctMzAgMTc6MTc6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBvL1BPVEZJTEVTLnNraXA6IEFkZCBQT1RGSUxFUy5za2lwIHdpdGggbGlzdCBvZiBzb3VyY2UgZmlsZXMgdGhhdCBhcmVuJ3QgZGlzdGVkIGF0IHRoZSBtb21lbnQgYnV0IGNvbnRhaW4gdHJhbnNsYXRhYi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL1BPVEZJTEVTLnNraXA6Ci0JICBBZGQgUE9URklMRVMuc2tpcCB3aXRoIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHRoYXQgYXJlbid0IGRpc3RlZCBhdCB0aGUKLQkgIG1vbWVudCBidXQgY29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5ncy4gU2hvdWxkIGhvcGVmdWxseSBwYWNpZnkKLQkgIGJyb2tlbiB0b29scyBhbmQgbWFrZSBpdCBjbGVhcmVyIHRoYXQgdGhlc2UgZmlsZXMgYXJlIGxlZnQgb3V0Ci0JICBpbnRlbnRpb25hbGx5ICgjNDYxNjAwKS4KLQotMjAwNy0wNy0zMCAxMjo0MTo1OCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBJZiB0aGUgYnVmZmVyIHdhcyBlbnRpcmVseSBjbGlwcGVkIC4uLiBkb24ndCB0cnkgc2VuZGluZyBpdCA6KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpOgotCSAgSWYgdGhlIGJ1ZmZlciB3YXMgZW50aXJlbHkgY2xpcHBlZCAuLi4gZG9uJ3QgdHJ5IHNlbmRpbmcgaXQgOikKLQotMjAwNy0wNy0yNyAxNjo1Njo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBJZiB3ZSBkb24ndCBoYXYgYSBzZXNzaW9uIG1hbmFnZXIsIHNldCB0aGUgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzIG91cnNlbHZlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19hY3RpdmF0ZV9zdHJlYW1zKSwKLQkgIChnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkKSwgKGdzdF9ydHNwc3JjX3BhcnNlX21ldGhvZHMpLAotCSAgKGdzdF9ydHNwc3JjX2NyZWF0ZV90cmFuc3BvcnRzX3N0cmluZyksCi0JICAoZ3N0X3J0c3BzcmNfcHJlcGFyZV90cmFuc3BvcnRzKToKLQkgIElmIHdlIGRvbid0IGhhdiBhIHNlc3Npb24gbWFuYWdlciwgc2V0IHRoZSBjYXBzIG9uIG91dGdvaW5nIGJ1ZmZlcnMKLQkgIG91cnNlbHZlcy4KLQkgIEZvcmNlIFBBVVNFL1BMQVkgbWV0aG9kcyBmb3Igbm93IHVudGlsIHRoZSBleHRlbnNpb25zIGNhbiBvdmVyd3JpdGUuCi0JICBBcHBlbmQgZmluYWwgYml0IG9mIHRoZSB0cmFuc3BvcnQgc3RyaW5nIGV2ZW4gd2hlbiBpdCBkb2VzIG5vdCBjb250YWluIGEKLQkgIHBsYWNlaG9sZGVyLgotCi0yMDA3LTA3LTI3IDExOjIxOjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC86IENsZWFuIHVwIHRoZSBpbnRlcmZhY2UgbGlzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwZXh0LmM6IChnc3RfcnRzcF9leHRfbGlzdF9mcmVlKSwKLQkgIChnc3RfcnRzcF9leHRfbGlzdF9jb25uZWN0KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcGV4dC5oOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19pbml0KSwKLQkgIChnc3RfcnRzcHNyY19maW5hbGl6ZSksIChnc3RfcnRzcHNyY19zZW5kX2NiKToKLQkgIENsZWFuIHVwIHRoZSBpbnRlcmZhY2UgbGlzdC4KLQkgIEFsbG93IGNvbm5lY3RpbmcgdG8gaW50ZXJmYWNlIHNpZ25hbHMgZm9yIHRoZSBleHRlbnNpb25zLgotCSAgUmVtb3ZlIG9sZCBleHRlbnNpb24gY29kZS4KLQkgIEZyZWUgbGlzdCBvbiBjbGVhbnVwLgotCSAgQWxsb3cgZXh0ZW5zaW9ucyB0byBzZW5kIGFkZGl0aW9uYWwgUlRTUCBtZXNzYWdlcy4KLQotMjAwNy0wNy0yNyAxMDozODozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4dC9nY29uZi9nY29uZi5jOiBIYW5kbGUgYSBOVUxMIGdjb25mIGtleSBncmFjZWZ1bGx5IGJ5IHJlbmRlcmluZyB0aGUgZGVmYXVsdCBlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nY29uZi9nY29uZi5jOiAoZ3N0X2djb25mX3JlbmRlcl9iaW5fd2l0aF9kZWZhdWx0KToKLQkgIEhhbmRsZSBhIE5VTEwgZ2NvbmYga2V5IGdyYWNlZnVsbHkgYnkgcmVuZGVyaW5nIHRoZSBkZWZhdWx0IGVsZW1lbnQuCi0KLTIwMDctMDctMjcgMTA6MTE6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BleHQuaDogRml4IGluY2x1ZGUgcGF0aCBmb3IgZXh0ZW5zaW9uIGludGVyZmFjZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwZXh0Lmg6Ci0JICBGaXggaW5jbHVkZSBwYXRoIGZvciBleHRlbnNpb24gaW50ZXJmYWNlLgotCi0yMDA3LTA3LTI2IDE5OjQ1OjMwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5oOiBBbHNvIHJlbW92ZSBhIG5vdyB1bmVjZXNzYXJ5IHZhcmlhYmxlIGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5Lmg6Ci0JICBBbHNvIHJlbW92ZSBhIG5vdyB1bmVjZXNzYXJ5IHZhcmlhYmxlIGhlcmUuCi0KLTIwMDctMDctMjYgMTk6NDE6MDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1ZGlvZngvOiBEb24ndCBzYXZlIGZvcm1hdCBpbmZvcm1hdGlvbiBvdXJzZWx2ZXMsIHRoaXMgaXMgYWxyZWFkeSBzYXZlZCBpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOiAoZ3N0X2F1ZGlvX2FtcGxpZnlfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0dXApLCAoZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmM6Ci0JICAoZ3N0X2F1ZGlvX2R5bmFtaWNfc2V0X3Byb2Nlc3NfZnVuY3Rpb24pLCAoZ3N0X2F1ZGlvX2R5bmFtaWNfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2R5bmFtaWNfc2V0dXApLCAoZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmg6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmM6IChnc3RfYXVkaW9faW52ZXJ0X2luaXQpLAotCSAgKGdzdF9hdWRpb19pbnZlcnRfc2V0dXApLCAoZ3N0X2F1ZGlvX2ludmVydF90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5oOgotCSAgRG9uJ3Qgc2F2ZSBmb3JtYXQgaW5mb3JtYXRpb24gb3Vyc2VsdmVzLCB0aGlzIGlzIGFscmVhZHkgc2F2ZWQgaW4KLQkgIEdzdEF1ZGlvRmlsdGVyLgotCi0yMDA3LTA3LTI2IDE1OjQ4OjQ3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC86IFVzZSByYW5rIHRvIGZpbHRlciBvdXQgZXh0ZW5zaW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwZXh0LmM6IChnc3RfcnRzcF9leHRfbGlzdF9maWx0ZXIpLAotCSAgKGdzdF9ydHNwX2V4dF9saXN0X3N0cmVhbV9zZWxlY3QpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwZXh0Lmg6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpOgotCSAgVXNlIHJhbmsgdG8gZmlsdGVyIG91dCBleHRlbnNpb25zLgotCSAgQWRkIHVybCB0byBzdHJlYW1fc2VsZWN0IGludGVyZmFjZSBjYWxsLgotCi0yMDA3LTA3LTI1IDE4OjUwOjA4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC86IFVzZSBzaGlueSBuZXcgUlRTUCBhbmQgU0RQIGxpYnJhcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHNwL2Jhc2U2NC5jOgotCSAgKiBnc3QvcnRzcC9iYXNlNjQuaDoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcGV4dC5jOiAoZ3N0X3J0c3BfZXh0X2xpc3RfZmlsdGVyKSwKLQkgIChnc3RfcnRzcF9leHRfbGlzdF9pbml0KSwgKGdzdF9ydHNwX2V4dF9saXN0X2dldCksCi0JICAoZ3N0X3J0c3BfZXh0X2xpc3RfZGV0ZWN0X3NlcnZlciksIChnc3RfcnRzcF9leHRfbGlzdF9iZWZvcmVfc2VuZCksCi0JICAoZ3N0X3J0c3BfZXh0X2xpc3RfYWZ0ZXJfc2VuZCksIChnc3RfcnRzcF9leHRfbGlzdF9wYXJzZV9zZHApLAotCSAgKGdzdF9ydHNwX2V4dF9saXN0X3NldHVwX21lZGlhKSwKLQkgIChnc3RfcnRzcF9leHRfbGlzdF9jb25maWd1cmVfc3RyZWFtKSwKLQkgIChnc3RfcnRzcF9leHRfbGlzdF9nZXRfdHJhbnNwb3J0cyksCi0JICAoZ3N0X3J0c3BfZXh0X2xpc3Rfc3RyZWFtX3NlbGVjdCk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BleHQuaDoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BfbG93ZXJfdHJhbnNfZ2V0X3R5cGUpLAotCSAgKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3J0c3BzcmNfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfZmluYWxpemUpLCAoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwbWFwKSwgKGdzdF9ydHNwc3JjX21lZGlhX3RvX2NhcHMpLAotCSAgKGdzdF9ydHNwc3JjX2ZsdXNoKSwgKGdzdF9ydHNwc3JjX2RvX3NlZWspLAotCSAgKGdzdF9ydHNwc3JjX3NpbmtfY2hhaW4pLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tYW5hZ2VyKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RjcCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tY2FzdCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV91ZHApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwX3NpbmspLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfcmVxdWVzdCksIChnc3RfcnRzcHNyY19zZW5kX2tlZXBfYWxpdmUpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLCAoZ3N0X3J0c3BzcmNfbG9vcF91ZHApLAotCSAgKGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQpLCAoZ3N0X3J0c3BfYXV0aF9tZXRob2RfdG9fc3RyaW5nKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9hdXRoX2hkciksIChnc3RfcnRzcHNyY19zZXR1cF9hdXRoKSwKLQkgIChnc3RfcnRzcHNyY190cnlfc2VuZCksIChnc3RfcnRzcHNyY19zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKSwKLQkgIChnc3RfcnRzcHNyY19jcmVhdGVfdHJhbnNwb3J0c19zdHJpbmcpLAotCSAgKGdzdF9ydHNwc3JjX3ByZXBhcmVfdHJhbnNwb3J0cyksIChnc3RfcnRzcHNyY19zZXR1cF9zdHJlYW1zKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9yYW5nZSksIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX2Nsb3NlKSwKLQkgIChnc3RfcnRzcHNyY19wbGF5KSwgKGdzdF9ydHNwc3JjX3BhdXNlKSwKLQkgIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3J0c3BzcmNfdXJpX3NldF91cmkpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3AuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uaDoKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuYzoKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGV4dC5oOgotCSAgKiBnc3QvcnRzcC9ydHNwZXh0d21zLmM6Ci0JICAqIGdzdC9ydHNwL3J0c3BleHR3bXMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuYzoKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuaDoKLQkgICogZ3N0L3J0c3AvcnRzcHJhbmdlLmM6Ci0JICAqIGdzdC9ydHNwL3J0c3ByYW5nZS5oOgotCSAgKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuaDoKLQkgICogZ3N0L3J0c3AvcnRzcHVybC5jOgotCSAgKiBnc3QvcnRzcC9ydHNwdXJsLmg6Ci0JICAqIGdzdC9ydHNwL3NkcC5oOgotCSAgKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmM6Ci0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuaDoKLQkgICogZ3N0L3J0c3AvdGVzdC5jOgotCSAgVXNlIHNoaW55IG5ldyBSVFNQIGFuZCBTRFAgbGlicmFyeS4KLQkgIEltcGxlbWVudCBSVFNQIGV4dGVuc2lvbnMgdXNpbmcgdGhlIG5ldyBpbnRlcmZhY2UuCi0JICBSZW1vdmUgYSBsb3Qgb2Ygb2xkIGNvZGUuCi0KLTIwMDctMDctMjQgMTQ6MzE6NTYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQWRkIGNvZGVjIG1hcHBpbmcgZm9yICcydnV5JyAoUmF3IFlVViBwcm9kdWNlZCBieSBGQ1ApIGFuZCAnZGl2eCcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEFkZCBjb2RlYyBtYXBwaW5nIGZvciAnMnZ1eScgKFJhdyBZVVYgcHJvZHVjZWQgYnkgRkNQKSBhbmQgJ2RpdngnLgotCi0yMDA3LTA3LTI0IDA1OjA3OjU5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogRG9uJ3QgdW5yZWYgdGhlIG91dGdvaW5nIGJ1ZmZlciB0d2ljZSB3aGVuIGRyb3BwaW5nIGl0IGJlY2F1c2UgaXQncyBvdXRzaWRlIG9mIHRoZSBzZWdtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19jaGFpbik6Ci0JICBEb24ndCB1bnJlZiB0aGUgb3V0Z29pbmcgYnVmZmVyIHR3aWNlIHdoZW4gZHJvcHBpbmcgaXQgYmVjYXVzZSBpdCdzCi0JICBvdXRzaWRlIG9mIHRoZSBzZWdtZW50LgotCi0yMDA3LTA3LTI0IDA0OjU3OjIwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIFVzZSB0aGUgbmV3IGJ1ZmZlciBjbGlwcGluZyBmdW5jdGlvbiBmcm9tIGdzdGF1ZGlvIGhlcmUgYW5kIHJlcXVpcmUgZ3N0LXBsdWdpbnMtYmFzZSBDVlMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfcmVzZXQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19jaGFpbiksIChnc3Rfd2F2cGFja19kZWNfc2lua19ldmVudCk6Ci0JICBVc2UgdGhlIG5ldyBidWZmZXIgY2xpcHBpbmcgZnVuY3Rpb24gZnJvbSBnc3RhdWRpbyBoZXJlIGFuZAotCSAgcmVxdWlyZSBnc3QtcGx1Z2lucy1iYXNlIENWUy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2RlYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRm9yIGZyYW1lZCBXYXZwYWNrIGJ1ZmZlcnMgd2UgcmVxdWlyZSBhIHZhbGlkIHRpbWVzdGFtcC4KLQotMjAwNy0wNy0yMyAxODowMzo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBDbGlwIHJhdyBhdWRpbyBhbmQgdmlkZW8gd2hlbiB3ZSBjYW4sIGtlZXAgdHJhY2sgb2YgY3VycmVudCBvdXRwdXQgc2VnbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9hY3RpdmF0ZV9zZWdtZW50KSwKLQkgIChnc3RfcXRkZW11eF9jbGlwX2J1ZmZlciksIChnc3RfcXRkZW11eF9sb29wX3N0YXRlX21vdmllKSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyYWspLCAocXRkZW11eF92aWRlb19jYXBzKSwgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBDbGlwIHJhdyBhdWRpbyBhbmQgdmlkZW8gd2hlbiB3ZSBjYW4sIGtlZXAgdHJhY2sgb2YgY3VycmVudCBvdXRwdXQKLQkgIHNlZ21lbnQuCi0JICBEb24ndCBsZWFrIGJ1ZmZlcnMgYW5kIGV2ZW50cyB3aGVuIHRoZXJlIGlzIG5vIG91dHB1dCBwYWQuCi0JICBJbXByb3ZlIGRlYnVnZ2luZyBoZXJlIGFuZCB0aGVyZS4KLQotMjAwNy0wNy0yMyAwOTowMjowNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjb25maWd1cmUuYWM6IFN5bmMgbGlib2lsIGNoZWNrIHdpdGggcGx1Z2lucy1iYXNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFN5bmMgbGlib2lsIGNoZWNrIHdpdGggcGx1Z2lucy1iYXNlLgotCi0yMDA3LTA3LTIwIDExOjM3OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvOiBCZXR0ZXIgYWxnb3JpdGggZm9yIHRoZSBjZW50ZXIgZnJlcXVlbmNpZXMuIFN1YnRyYWN0IGJhbmQgZmlsdGVycyBmcm9tIGlucHV0IGZvciBuZWdhdGl2ZSBnYWlucy4gUmV3by4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9jaGlsZF9wcm94eV9pbnRlcmZhY2VfaW5pdCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfY2xhc3NfaW5pdCksIChhcmdfdG9fc2NhbGUpLCAoc2V0dXBfZmlsdGVyKSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9jb21wdXRlX2ZyZXF1ZW5jaWVzKToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfMTBiYW5kc19jbGFzc19pbml0KToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYzoKLQkgIChnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmM6Ci0JICBCZXR0ZXIgYWxnb3JpdGggZm9yIHRoZSBjZW50ZXIgZnJlcXVlbmNpZXMuIFN1YnRyYWN0IGJhbmQgZmlsdGVycyBmcm9tCi0JICBpbnB1dCBmb3IgbmVnYXRpdmUgZ2FpbnMuIFJld29yayB0aGUgZ2FpbiBtYXBwaW5nLgotCi0yMDA3LTA3LTIwIDA3OjQxOjU4ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC9hbm5vZGV4L01ha2VmaWxlLmFtOiBGaXggQ0ZMQUdTL0xJQlMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2Fubm9kZXgvTWFrZWZpbGUuYW06Ci0JICBGaXggQ0ZMQUdTL0xJQlMuCi0JICAqIGV4dC9jZGlvL2dzdGNkaW9jZGRhc3JjLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IChnc3RfcG5nZGVjX3Rhc2spOgotCSAgSW5jbHVkZSBzdGRsaWIKLQkgICogZXh0L2NhaXJvL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2xldmVsL01ha2VmaWxlLmFtOgotCSAgVXNlICQoTElCTSkgaW5zdGVhZCBvZiAtbG0KLQotMjAwNy0wNy0xOCAxMTo1NToxMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IEFkZCBhbm90aGVyIGV4YW1wbGUgcGlwZWxpbmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgQWRkIGFub3RoZXIgZXhhbXBsZSBwaXBlbGluZS4KLQotMjAwNy0wNy0xOCAxMTo0MjozMyArMDAwMCAgQWxleGFuZGVyIEVpY2huZXIgPGFsZXhlaWNoaUB5YWhvby5kZT4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiBVc2UgZGVmaW5lIGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbGV4YW5kZXIgRWljaG5lciA8YWxleGVpY2hpQHlhaG9vLmRlPgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19pbml0KToKLQkgIFVzZSBkZWZpbmUgaGVyZS4KLQkgICogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6Ci0JICAoZ3N0X3Y0bDJfdHVuZXJfc2V0X2ZyZXF1ZW5jeV9hbmRfbm90aWZ5KToKLQkgIERvbid0IHRvdWNoIHRoZSBwcm9wZXJ0eSAtIGl0cyBzdGlsbCBkaXNhYmxlZC4KLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfcHJvYmVfY2Fwc19mb3JfZm9ybWF0KSwKLQkgIChnc3RfdjRsMnNyY19ncmFiX2ZyYW1lKSwgKGdzdF92NGwyc3JjX2dldF9zaXplX2xpbWl0cyk6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIEltcHJvdmUgZmFsbGJhY2sgZm9ybWF0IG5lZ290aW9uYXRpb24uIEZpeGVzICM0NTEzODgKLQotMjAwNy0wNy0xOCAxMDozMzozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzogRml4IHRoZSB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IHRoZSB0ZXN0LgotCi0yMDA3LTA3LTE4IDA5OjIxOjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1vcmUgZG9jcy4gTW9yZSBsb2dzIGluIHBuZ2RlYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY190YXNrKSwKLQkgIChnc3RfcG5nZGVjX3Npbmtfc2V0Y2Fwcyk6Ci0JICBNb3JlIGRvY3MuIE1vcmUgbG9ncyBpbiBwbmdkZWMuCi0KLTIwMDctMDctMTggMDc6NTE6MTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzogQWRkIGV4YW1wbGUgdG8gdGhlIGRvY3MuIEZpeCBidWZmZXItb2Zmc2V0LWVuZCBhbmQgYWRkIHNvbWUgZGVidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYzogKGdzdF9tdWx0aV9maWxlX3NyY19jcmVhdGUpOgotCSAgQWRkIGV4YW1wbGUgdG8gdGhlIGRvY3MuIEZpeCBidWZmZXItb2Zmc2V0LWVuZCBhbmQgYWRkIHNvbWUgZGVidWcuCi0KLTIwMDctMDctMTggMDc6MzU6MzIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgQWRkIHN0ZGxpYiBpbmNsdWRlIChmcmVlLCBhdG9pLCBleGl0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleGFtcGxlcy9hcHAvYXBwc3JjX2V4LmM6Ci0JICAqIGV4YW1wbGVzL3N3aXRjaC9zd2l0Y2hlci5jOgotCSAgKiBleHQvbmVvbi9nc3RuZW9uaHR0cHNyYy5jOgotCSAgKiBleHQvdGltaWRpdHkvZ3N0d2lsZG1pZGkuYzoKLQkgICogZXh0L3gyNjQvZ3N0eDI2NGVuYy5jOgotCSAgKiBnc3QvbXZlL212ZWF1ZGlvZW5jLmM6IChtdmVfY29tcHJlc3NfYXVkaW8pOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBjbGllbnQuYzoKLQkgICogZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOgotCSAgKiBnc3Qvc3BlY3RydW0vZGVtby1vc3NzcmMuYzoKLQkgICogc3lzL2R2Yi9nc3RkdmJzcmMuYzoKLQkgIEFkZCBzdGRsaWIgaW5jbHVkZSAoZnJlZSwgYXRvaSwgZXhpdCkuCi0KLTIwMDctMDctMTcgMTE6MzU6MjkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiBJbml0aWFsaXplIG51bV9idWZmZXJzIHdpdGggbWluaW11bSB2YWx1ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19pbml0KToKLQkgIEluaXRpYWxpemUgbnVtX2J1ZmZlcnMgd2l0aCBtaW5pbXVtIHZhbHVlLgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19maWxsX2Zvcm1hdF9saXN0KSwKLQkgIChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpLCAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSk6Ci0JICBIYW5kbGUgZnJhbWUtc2l6ZSBxdWVyeSBmYWlsdXJlIGdyYWNlZnVsbHkuCi0KLTIwMDctMDctMTYgMTI6MTE6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRml4IHBhcnNpbmcgb2YgZXNkcyBhdG9tcyBpbnNpZGUgbXA0YSBhdG9tcyBzbyB0aGF0IHdlIGNhbiBzZXQgY29ycmVjdCBjb2RlY19pbmZvIGZvciBBQUMgYXVkaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2Vfbm9kZSk6Ci0JICBGaXggcGFyc2luZyBvZiBlc2RzIGF0b21zIGluc2lkZSBtcDRhIGF0b21zIHNvIHRoYXQgd2UgY2FuIHNldCBjb3JyZWN0Ci0JICBjb2RlY19pbmZvIGZvciBBQUMgYXVkaW8uIEZpeGVzICM0NTcwOTcgYWxvbmcgd2l0aCBhIHdob2xlIG90aGVyIGJ1bmNoCi0JICBvZiBxdC9hYWMgZmlsZXMuCi0KLTIwMDctMDctMTYgMDk6MTY6MDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiBGaXggYnVmZmVyIGNsaXBwaW5nIHRvIGNvcnJlY3RseSBjbGlwIHRvIHRoZSBzZWdtZW50IHN0b3AuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSAgKGdzdF93YXZwYWNrX2RlY19jbGlwX291dGdvaW5nX2J1ZmZlcik6Ci0JICBGaXggYnVmZmVyIGNsaXBwaW5nIHRvIGNvcnJlY3RseSBjbGlwIHRvIHRoZSBzZWdtZW50IHN0b3AuCi0KLTIwMDctMDctMTMgMTY6MzE6MjcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBSZW1vdmUgYm9ndXMgY2hlY2sgZm9yIGxpYmNoZWNrLCBzaW5jZSB3ZSBjaGVjayBmb3IgZ3N0cmVhbWVyLWNoZWNrIGFuZCBpdCBwdWxscyBpbiB0aGUgcmVxdWlyZWQgaW5mbyBmcm9tIHRoZXJlLCBhbmQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHRlc3RzL01ha2VmaWxlLmFtOgotCSAgUmVtb3ZlIGJvZ3VzIGNoZWNrIGZvciBsaWJjaGVjaywgc2luY2Ugd2UgY2hlY2sgZm9yCi0JICBnc3RyZWFtZXItY2hlY2sgYW5kIGl0IHB1bGxzIGluIHRoZSByZXF1aXJlZCBpbmZvIGZyb20gdGhlcmUsCi0JICBhbmQgd2Ugd2VyZW4ndCBhY3R1YWxseSBfdXNpbmdfIHRoZSBpbmZvcm1hdGlvbiBmb3IgbGliY2hlY2sKLQkgIG91cnNlbHZlcyBhbnl3YXkuCi0KLTIwMDctMDctMTIgMTE6MjE6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBVc2UgcGtnLWNvbmZpZyB0byBsb2NhdGUgY2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgVXNlIHBrZy1jb25maWcgdG8gbG9jYXRlIGNoZWNrLgotCi0yMDA3LTA3LTExIDIzOjQzOjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBGaXggYnVpbGQgYWdhaW5zdCBjb3JlIENWUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogKGdzdF9kZWludGVybGVhdmVfcHJvY2Vzcyk6Ci0JICAqIGdzdC92bW5jL3ZtbmNkZWMuYzogKHZtbmNfbWFrZV9idWZmZXIpOgotCSAgRml4IGJ1aWxkIGFnYWluc3QgY29yZSBDVlMuCi0KLTIwMDctMDctMTEgMjI6MzE6MDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEZpeCBidWlsZCBhZ2FpbnN0IGNvcmUgQ1ZTLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5jOiAoZ3N0X2NhaXJvX3RpbWVfb3ZlcmxheV90cmFuc2Zvcm0pOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6IChnc3RfanBlZ2VuY19jaGFpbik6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChnc3RfcG5nZW5jX2NoYWluKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2NoYWluKToKLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6IChnc3RfbmF2aWdhdGlvbnRlc3RfdHJhbnNmb3JtKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYzogKGdzdF9hZ2luZ3R2X3RyYW5zZm9ybSk6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzogKGdzdF9kaWNldHZfdHJhbnNmb3JtKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOiAoZ3N0X2VkZ2V0dl90cmFuc2Zvcm0pOgotCSAgKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOiAoZ3N0X3F1YXJrdHZfdHJhbnNmb3JtKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6IChnc3RfcmV2dHZfdHJhbnNmb3JtKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOiAoZ3N0X3NoYWdhZGVsaWN0dl90cmFuc2Zvcm0pOgotCSAgKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6IChnc3RfdmVydGlnb3R2X3RyYW5zZm9ybSk6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzogKGdzdF93YXJwdHZfdHJhbnNmb3JtKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF93dnBrX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3N1YnRpdGxlX2J1ZmZlciksCi0JICAoZ3N0X21hdHJvc2thX2RlY29kZV9idWZmZXIpOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6IChnc3RfdmlkZW9fZmxpcF90cmFuc2Zvcm0pOgotCSAgRml4IGJ1aWxkIGFnYWluc3QgY29yZSBDVlMuCi0KLTIwMDctMDctMTAgMTA6MTY6MzggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiBEb24ndCByZXR1cm4gR1NUX0ZMT1dfRVJST1Igd2hlbiBwdXNoaW5nIGFuIGV2ZW50IHJldHVybnMgRkFMU0UuIFdlIGRvbid0IGhhdmUgZW5vdWdoIGdyYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAoZ3N0X2lkM2RlbXV4X2NoYWluKToKLQkgIERvbid0IHJldHVybiBHU1RfRkxPV19FUlJPUiB3aGVuIHB1c2hpbmcgYW4gZXZlbnQgcmV0dXJucyBGQUxTRS4gV2UKLQkgIGRvbid0IGhhdmUgZW5vdWdoIGdyYW51bGFyaXR5IHRvIGNvbnZlcnQgdGhhdCBib29sZWFuIGludG8gYQotCSAgR3N0Rmxvd1JldHVybi4KLQotMjAwNy0wNy0wNiAxNTowMDo0NyArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvbGF3LzogRml4IGNhcHNuZWdvIGJvZ29zaXR5IGluICpsYXcgZGVjb2RlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoYWxhd2RlY19zaW5rX3NldGNhcHMpLAotCSAgKGdzdF9hbGF3ZGVjX2NsYXNzX2luaXQpLCAoZ3N0X2FsYXdkZWNfaW5pdCksIChnc3RfYWxhd2RlY19jaGFpbiksCi0JICAoZ3N0X2FsYXdkZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5oOgotCSAgKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOiAobXVsYXdkZWNfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfbXVsYXdkZWNfY2xhc3NfaW5pdCksIChnc3RfbXVsYXdkZWNfaW5pdCksCi0JICAoZ3N0X211bGF3ZGVjX2NoYWluKSwgKGdzdF9tdWxhd2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvbGF3L211bGF3LWRlY29kZS5oOgotCSAgRml4IGNhcHNuZWdvIGJvZ29zaXR5IGluICpsYXcgZGVjb2RlcnMuCi0KLTIwMDctMDctMDYgMTQ6MzU6NTkgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZXh0L2pwZWcvZ3N0c21va2VlbmMuKjogUmVtb3ZlIHN0dXBpZGl0eSBpbiBnZXQvc2V0IGNhcHMgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6IChnc3Rfc21va2VlbmNfaW5pdCksCi0JICAoZ3N0X3Ntb2tlZW5jX3NldGNhcHMpLCAoZ3N0X3Ntb2tlZW5jX2NoYWluKSwKLQkgIChnc3Rfc21va2VlbmNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuaDoKLQkgIFJlbW92ZSBzdHVwaWRpdHkgaW4gZ2V0L3NldCBjYXBzIGZ1bmN0aW9ucy4KLQkgIEZpeCBzb21lIHJlZmNvdW50aW5nIHByb2JsZW1zLgotCi0yMDA3LTA3LTA2IDExOjQyOjUzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogUmVtb3ZlIGVuZGlhbm5lc3MtZmxpcHBpbmcgaGFjayB0aGF0IHNlZW1zIHRvIGhhdmUgYmVlbiByZXF1aXJlZCBvbmx5IGJlY2F1c2Ugb2YgYSBidWcgaW4gZmZtLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCk6Ci0JICBSZW1vdmUgZW5kaWFubmVzcy1mbGlwcGluZyBoYWNrIHRoYXQgc2VlbXMgdG8gaGF2ZSBiZWVuIHJlcXVpcmVkCi0JICBvbmx5IGJlY2F1c2Ugb2YgYSBidWcgaW4gZmZtcGVnY29sb3JzcGFjZS4KLQkgIFBhcnRpYWxseSBGaXhlczogIzQ1MTkwOAotCi0yMDA3LTA3LTA1IDA4OjQ0OjExICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbTogU2ltcGxpZnkgLS1leHRyYS1kaXIgYXMgZ3RrZG9jIHNjYW5zIHJlY3Vyc2l2ZWx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIFNpbXBsaWZ5IC0tZXh0cmEtZGlyIGFzIGd0a2RvYyBzY2FucyByZWN1cnNpdmVseS4KLQotMjAwNy0wNy0wMyAwOTo1OTo0NiArMDAwMCAgVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6IFNldCB0aGUgZW5jb2RpbmctbmFtZSBpbiB0aGUgcnRwIGNhcHMgdG8gYWxsIHVwcGVyY2FzZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGNhcHMgc3BlYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gIDxleHQtdG9tbWkgZG90IG15b2hhbmVuIGF0IG5va2lhIGRvdCBjb20+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOiAoZ3N0X3J0cGlsYmNwYXlfc2V0Y2Fwcyk6Ci0JICBTZXQgdGhlIGVuY29kaW5nLW5hbWUgaW4gdGhlIHJ0cCBjYXBzIHRvIGFsbCB1cHBlcmNhc2UsIGFzIHJlcXVpcmVkIGJ5Ci0JICB0aGUgY2FwcyBzcGVjLgotCSAgU29tZSBzbWFsbCBjbGVhbnVwcyBpbiB0aGUgZXJyb3IgcGF0aHMuIEZpeGVzICM0NTMwMzcuCi0KLTIwMDctMDctMDMgMDg6MDE6MTggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L211bHRpZmlsZS86IEFkZCAuaCBmaWxlcyB0byBiZSBhYmxlIHRvIGFkZCBpdCB0byB0aGUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZS5jOgotCSAgKiBnc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgICogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmg6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmg6Ci0JICBBZGQgLmggZmlsZXMgdG8gYmUgYWJsZSB0byBhZGQgaXQgdG8gdGhlIGRvY3MuCi0KLTIwMDctMDctMDMgMDc6MTY6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuaDogRml4IEdPYmplY3QgbWFjcm9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmg6Ci0JICBGaXggR09iamVjdCBtYWNyb3MuCi0KLTIwMDctMDYtMjggMTk6MDA6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLio6IFVzZSBhIEdTTGlzdCBmb3IgdGhlIEdBcnJheSB0aGF0IGlzIHVzZWQgbGlrZSBhIGxpc3QgYW55d2F5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2luZGV4X2dldF9sYXN0X2VudHJ5KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9pbmRleF9nZXRfZW50cnlfZnJvbV9zYW1wbGUpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2luZGV4X2FwcGVuZF9lbnRyeSksIChnc3Rfd2F2cGFja19wYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2Vfc2Nhbl90b19maW5kX3NhbXBsZSk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5oOgotCSAgVXNlIGEgR1NMaXN0IGZvciB0aGUgR0FycmF5IHRoYXQgaXMgdXNlZCBsaWtlIGEgbGlzdCBhbnl3YXkuCi0KLTIwMDctMDYtMjggMTM6MjU6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiBBZGQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHdoZXJlIHdlIHNldCAwLzEgYXMgZGVmYXVsdCBmcmFtZXJhdGUgaW4gY2FzZSBvdXIgc2V0Y2FwcyBmdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9jbGFzc19pbml0KSwgKGdzdF9nZGtfcGl4YnVmX2ZsdXNoKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX2V2ZW50KSwgKGdzdF9nZGtfcGl4YnVmX2NoYW5nZV9zdGF0ZSk6Ci0JICBBZGQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHdoZXJlIHdlIHNldCAwLzEgYXMgZGVmYXVsdCBmcmFtZXJhdGUgaW4KLQkgIGNhc2Ugb3VyIHNldGNhcHMgZnVuY3Rpb24gaXNuJ3QgY2FsbGVkLCBsaWtlIGl0IG1pZ2h0IG5vdCBpbiBhCi0JICBmaWxlc3JjICEgZ2RrcGl4YnVmZGVjIHNjZW5hcmlvLiBGaXhlcyBhc3NlcnRpb24gdHJpZ2dlcmVkIGJ5Ci0JICBnZGtwaXhidWZkZWMgdHJ5aW5nIHRvIGNyZWF0ZSBjYXBzIHdpdGggYSAwLzAgZnJhbWVyYXRlLgotCSAgQWxzbyBwb3N0IGFuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGJ1cyBpZiBnc3RfcGFkX3B1c2goKSBmYWlscyB3aGVuCi0JICBjYWxsZWQgZnJvbSBvdXIgc2luayBldmVudCBoYW5kbGVyICgrMSBmb3IgZmxvdyByZXR1cm5zIGZvciBldmVudAotCSAgZnVuY3Rpb25zIGluIDAuMTEpIGluc3RlYWQgb2YgZmFpbGluZyBzaWxlbnRseS4KLQotMjAwNy0wNi0yNyAxMTozNjoyNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBDYXN0IHN0YWNrIGFyZ3MgdG8gdGhlIHByb3BlciB0eXBlcy4gRml4ZXMgIzQ1MTI0OS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jb25maWd1cmVfY2Fwcyk6Ci0JICBDYXN0IHN0YWNrIGFyZ3MgdG8gdGhlIHByb3BlciB0eXBlcy4gRml4ZXMgIzQ1MTI0OS4KLQotMjAwNy0wNi0yNyAxMTowNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBGb3IgY29udGFpbmVyIGZvcm1hdHMgd2Ugb25seSBuZWVkIHRvIGFjdGl2YXRlIG9uZSBvZiB0aGUgc3RyZWFtcyBzbyB0aGF0IHdlIGNvcnJlY3RseSBzaWduYWwgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksCi0JICAobmV3X3Nlc3Npb25fcGFkKSwgKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBGb3IgY29udGFpbmVyIGZvcm1hdHMgd2Ugb25seSBuZWVkIHRvIGFjdGl2YXRlIG9uZSBvZiB0aGUgc3RyZWFtcyBzbwotCSAgdGhhdCB3ZSBjb3JyZWN0bHkgc2lnbmFsIG5vLW1vcmUtcGFkcy4gRml4ZXMgIzQ1MTAxNS4KLQotMjAwNy0wNi0yNSAxMjo0NjowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBVcGRhdGUgZG9jcyB3aXRoIGNhcHMgaW5mby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sYWRzcGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdWlja3RpbWUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSAgVXBkYXRlIGRvY3Mgd2l0aCBjYXBzIGluZm8uCi0KLTIwMDctMDYtMjUgMTI6MTM6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBvL1BPVEZJTEVTLmluOiBBZGQgbW9yZSBmaWxlcyB3aXRoIHRyYW5zbGF0YWJsZSBzdHJpbmdzICgjNDUwODc4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9QT1RGSUxFUy5pbjoKLQkgIEFkZCBtb3JlIGZpbGVzIHdpdGggdHJhbnNsYXRhYmxlIHN0cmluZ3MgKCM0NTA4NzgpLgotCi0yMDA3LTA2LTIyIDIwOjIzOjE4ICswMDAwICBKZW5zIEdyYW5zZXVlciA8amVuc2dyQGdteC5uZXQ+Ci0KLQkgIGdzdC86IEJ1aWxkIGZpeGVzIGZvciBnY2MtMi45eCAobm8gbWlkLWJsb2NrIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBldGMuKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEplbnMgR3JhbnNldWVyICA8amVuc2dyIGF0IGdteCBuZXQ+Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jOgotCSAgKiBnc3QvcnRwbWFuYWdlci9hc3luY19qaXR0ZXJfcXVldWUuYzoKLQkgIChhc3luY19qaXR0ZXJfcXVldWVfcHVzaF9zb3J0ZWQpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYzoKLQkgIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pOgotCSAgKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5jOiAoZ3N0X3N3aXRjaF9jaGFpbik6Ci0JICBCdWlsZCBmaXhlcyBmb3IgZ2NjLTIuOXggKG5vIG1pZC1ibG9jayB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgZXRjLikuCi0JICBGaXhlcyAjNDUwMTg1LgotCi0yMDA3LTA2LTIyIDE0OjI2OjM2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgTUFJTlRBSU5FUlM6IFVwZGF0aW5nIGFsbCB0aGUgbWFpbnRhaW5lcnMgZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNQUlOVEFJTkVSUzoKLQkgIFVwZGF0aW5nIGFsbCB0aGUgbWFpbnRhaW5lcnMgZmlsZXMKLQotMjAwNy0wNi0yMiAxMDoxMjoxNSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgRml4IG1lbW9yeSBsZWFrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6IChnc3RfZmxhY190YWdfaW5pdCk6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOiAoZGVpbnRlcmxlYXZlX2luaXQpLAotCSAgKGRlaW50ZXJsZWF2ZV9zaW5rX2xpbmspOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IChpbnRlcmxlYXZlX2luaXQpOgotCSAgKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5jOiAoZ3N0X21lZGlhbl9pbml0KToKLQkgICogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmM6IChnc3RfbXVsdGlmaWxlc3JjX2luaXQpOgotCSAgRml4IG1lbW9yeSBsZWFrcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzZGVtdXguYzogKHBhZF9hZGRlZF9jYik6Ci0JICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgotCi0yMDA3LTA2LTIxIDEwOjQ4OjEwICswMDAwICBEYW1pZW4gQ2FyYmVyeSA8ZGFtaWVuLmNhcmJlcnlAc3VuLmNvbT4KLQotCSAgZXh0L2djb25mL2djb25mLmg6IE1ha2UgdGhlIHByb3RvdHlwZSBvZiBnc3RfZ2NvbmZfZ2V0X2tleV9mb3Jfc2lua19wcm9maWxlIG1hdGNoIHRoZSBpbXBsZW1lbnRhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2NvbmYvZ2NvbmYuaDoKLQkgIE1ha2UgdGhlIHByb3RvdHlwZSBvZiBnc3RfZ2NvbmZfZ2V0X2tleV9mb3Jfc2lua19wcm9maWxlCi0JICBtYXRjaCB0aGUgaW1wbGVtZW50YXRpb24uCi0JICBQYXRjaCBieTogRGFtaWVuIENhcmJlcnkgPGRhbWllbiBkb3QgY2FyYmVyeSBhdCBzdW4gZG90IGNvbT4KLQkgIEZpeGVzOiAjNDQ5NzQ3Ci0KLTIwMDctMDYtMjAgMTI6NTY6MTIgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L3J0cC9nc3RydHBkZXBheS5jOiBGaXggZGVzY3JpcHRpb24gLSBydHBkZXBheSBpcyBub3QgYSBwYXlsb2FkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSAgRml4IGRlc2NyaXB0aW9uIC0gcnRwZGVwYXkgaXMgbm90IGEgcGF5bG9hZGVyLgotCi0yMDA3LTA2LTIwIDEwOjE1OjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IERvY3VtZW50IHBhcmFtZXRlciBtYXBwaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JICBEb2N1bWVudCBwYXJhbWV0ZXIgbWFwcGluZy4KLQotMjAwNy0wNi0yMCAwODo1NjoxNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogRml4IGxlYWtpbmcgYnVmZmVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV9ldmVudCksCi0JICAoZ3N0X3NwZWN0cnVtX3RyYW5zZm9ybV9pcCk6Ci0JICBGaXggbGVha2luZyBidWZmZXJzLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYzogKHNldHVwX3NwZWN0cnVtKSwKLQkgIChjbGVhbnVwX3NwZWN0cnVtKSwgKEdTVF9TVEFSVF9URVNUKSwgKHNwZWN0cnVtX3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHNpbXBsZSB0ZXN0IGZvciBzcGVjdHJ1bSBlbGVtZW50LgotCi0yMDA3LTA2LTIwIDA4OjI2OjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4LzogQWRkIE1KUEcgdG8gdGhlIHZhcmlhbnRzIG9mIG1vdGlvbiBqcGVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2Vfc2FtcGxlcyksCi0JICAocXRkZW11eF92aWRlb19jYXBzKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eF9mb3VyY2MuaDoKLQkgIEFkZCBNSlBHIHRvIHRoZSB2YXJpYW50cyBvZiBtb3Rpb24ganBlZy4KLQotMjAwNy0wNi0xOSAxNjo0MDo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svOiBBZGQgR1NUX09QVElPTl9DRkxBR1MgdG8gQ0ZMQUdTIHdoZW4gYnVpbGRpbmcgdW5pdCB0ZXN0cywgc28gdGhlIGVycm9yIGZsYWdzIGFyZSBpbmNsdWRlZCBhbmQgaXQgZXJyb3JzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja3BhcnNlLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBBZGQgR1NUX09QVElPTl9DRkxBR1MgdG8gQ0ZMQUdTIHdoZW4gYnVpbGRpbmcgdW5pdCB0ZXN0cywgc28gdGhlCi0JICBlcnJvciBmbGFncyBhcmUgaW5jbHVkZWQgYW5kIGl0IGVycm9ycyBvdXQgb24gY29tcGlsZXIgd2FybmluZ3MKLQkgIGZvciBDVlMgYnVpbGRzOyByZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBpbiB2YXJpb3VzIHVuaXQgdGVzdHMuCi0KLTIwMDctMDYtMTkgMTQ6NDg6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IFVzZSB0aHJlYWRzYWZlIGluZXRfbnRvcCB0byBjb252ZXJ0IGFuIGlwIG51bWJlciB0byBhIHN0cmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX2Nvbm5lY3QpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9jbG9zZSksIChydHNwX2Nvbm5lY3Rpb25fZnJlZSk6Ci0JICBVc2UgdGhyZWFkc2FmZSBpbmV0X250b3AgdG8gY29udmVydCBhbiBpcCBudW1iZXIgdG8gYSBzdHJpbmcuCi0JICBGaXhlcyAjNDQ3OTYxLgotCSAgRG9uJ3QgbGVhayBmZCAoYW5kIGlwKSB3aGVuIGZyZWVpbmcgYSBjb25uZWN0aW9uIHdpdGhvdXQgZmlyc3QgY2xvc2luZwotCSAgaXQuCi0KLTIwMDctMDYtMTkgMTQ6MTE6NDkgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvTEVHQUw6Ci0JICBhZGQgJ0xFR0FMJyBmaWxlIGRlc2NyaWJpbmcgd2h5IHRoaXMgaXMgaW4gLWdvb2QgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyBpdCBtaWdodCBuZWVkIHRvIG1vdmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCAnTEVHQUwnIGZpbGUgZGVzY3JpYmluZyB3aHkgdGhpcyBpcyBpbiAtZ29vZCBhbmQgdW5kZXIgd2hhdAotCSAgY2lyY3Vtc3RhbmNlcyBpdCBtaWdodCBuZWVkIHRvIG1vdmUuCi0KLTIwMDctMDYtMTkgMTA6NDE6NDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IEJhY2sgdG8gQ1ZTCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQmFjayB0byBDVlMKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC5kb2FwOgotCSAgQWRkIDAuMTAuNiB0byB0aGUgZG9hcCBmaWxlLgotCi09PT0gcmVsZWFzZSAwLjEwLjYgPT09Ci0KLTIwMDctMDYtMTkgMTA6MjQ6NTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXVpY2t0aW1lLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYmFsYW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVsZWFzZSAwLjEwLjYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmVsZWFzZSAwLjEwLjYKLQotMjAwNy0wNi0xOCAxNzo1MzoyMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL2phLnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA3LTA2LTE3IDEyOjM1OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiBSZXZlcnQgcHJldmlvdXMgY29tbWl0IGFnYWluLCBzaW5jZSB3ZSBhcmUgZnJvemVuIChzb3JyeSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jb25uZWN0KSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fZnJlZSk6Ci0JICBSZXZlcnQgcHJldmlvdXMgY29tbWl0IGFnYWluLCBzaW5jZSB3ZSBhcmUgZnJvemVuIChzb3JyeSkuCi0KLTIwMDctMDYtMTcgMTI6MjQ6NTggKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiBpbmV0X250b2EoKSB1c2VzIGEgc3RhdGljIGJ1ZmZlciBpbnRlcm5hbGx5LCBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIHJldHVybmVkIHN0cmluZyBpZiB3ZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX2Nvbm5lY3QpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9mcmVlKToKLQkgIGluZXRfbnRvYSgpIHVzZXMgYSBzdGF0aWMgYnVmZmVyIGludGVybmFsbHksIHNvIHdlIG5lZWQgdG8gY29weSB0aGUKLQkgIHJldHVybmVkIHN0cmluZyBpZiB3ZSB3YW50IHRvIHN0b3JlIGl0IGZvciBsYXRlciAoIzQ0Nzk2MSkuCi0KLTIwMDctMDYtMTUgMDk6MTM6NTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB3aW4zMi92czYvOiBNYXJrICouZHNwICYgKi5kc3cgYXMgYmluYXJ5IGZpbGVzIGFuZCBjb252ZXJ0IHRvIERPUyBsaW5lIGVuZGluZ3MsIGFzIHRoZXkgZG9uJ3QgbG9hZCBpbnRvIFZTNiBjb3JyZWN0bHkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi92czYvYXV0b2dlbi5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9nc3RfcGx1Z2luc19nb29kLmRzdzoKLQkgICogd2luMzIvdnM2L2xpYmdzdGFsYXcuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0YWxwaGEuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0YWxwaGFjb2xvci5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RhcGV0YWcuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0YXVkaW9meC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RhdXBhcnNlLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGF1dG9kZXRlY3QuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0YXZpLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGN1dHRlci5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RkaXJlY3RkcmF3LmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGRpcmVjdHNvdW5kLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGVmZmVjdHYuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0Zmx4LmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGdvb20uZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0aWN5ZGVtdXguZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0aWQzZGVtdXguZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0aW50ZXJsZWF2ZS5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RqcGVnLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGxldmVsLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdG1hdHJvc2thLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdG1lZGlhbi5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3Rtb25vc2NvcGUuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0bXVsYXcuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0bXVsdGlwYXJ0LmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHF0ZGVtdXguZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0cnRwLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHJ0c3AuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0c21wdGUuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0c3BlZXguZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0dWRwLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHZpZGVvYmFsYW5jZS5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb2JveC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb2Nyb3AuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0dmlkZW9mbGlwLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHZpZGVvbWl4ZXIuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0d2F2ZWZvcm0uZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0d2F2ZW5jLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHdhdnBhcnNlLmRzcDoKLQkgIE1hcmsgKi5kc3AgJiAqLmRzdyBhcyBiaW5hcnkgZmlsZXMgYW5kIGNvbnZlcnQgdG8gRE9TIGxpbmUKLQkgIGVuZGluZ3MsIGFzIHRoZXkgZG9uJ3QgbG9hZCBpbnRvIFZTNiBjb3JyZWN0bHkgb3RoZXJ3aXNlLgotCi0yMDA3LTA2LTE1IDA4OjMyOjUyICswMDAwICBWaW5jZW50IFRvcnJpIDx2dG9ycmlAdW5pdi1ldnJ5LmZyPgotCi0JICBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiBGaXggdGhlIE1pbmdXIGJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fY3JlYXRlKSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fY29ubmVjdCk6Ci0JICBGaXggdGhlIE1pbmdXIGJ1aWxkLgotCSAgUGF0Y2ggQnk6IFZpbmNlbnQgVG9ycmkgPHZ0b3JyaSBhdCB1bml2LWV2cnkgZG90IGZyPgotCSAgRml4ZXM6ICM0NDY5ODEKLQotMjAwNy0wNi0xNCAxNDowMzo0MSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzLzogSHVzaCB0aGUgYnVpbGRib3RzIHVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvaWNsZXMvLmN2c2lnbm9yZToKLQkgIEh1c2ggdGhlIGJ1aWxkYm90cyB1cAotCi0yMDA3LTA2LTE0IDEyOjE0OjI0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgTWFrZSBzdXJlIHRvIGRpc3QgZXZlcnl0aGluZyBuZWVkZWQgZm9yIHdpbjMyIGJ1aWxkcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHN5cy9NYWtlZmlsZS5hbToKLQkgICogc3lzL2RpcmVjdGRyYXcvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZS5hbToKLQkgICogc3lzL3dhdmVmb3JtL01ha2VmaWxlLmFtOgotCSAgTWFrZSBzdXJlIHRvIGRpc3QgZXZlcnl0aGluZyBuZWVkZWQgZm9yIHdpbjMyIGJ1aWxkcy4KLQotMjAwNy0wNi0xNCAxMDoyMzoyMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGb3IgQU1SLU5CIHN0cmVhbXMsIGV4cG9ydCB0aGUgQU1SU3BlY2lmaWNCb3ggYXMgY29kZWNfZGF0YSBvbiB0aGUgY2Fwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRm9yIEFNUi1OQiBzdHJlYW1zLCBleHBvcnQgdGhlIEFNUlNwZWNpZmljQm94IGFzIGNvZGVjX2RhdGEgb24gdGhlCi0JICBjYXBzLgotCSAgRml4ZXMgIzQ0NzQ1OAotCi0yMDA3LTA2LTEzIDE3OjExOjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiBNYWtlIHN1cmUgd2UgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGNvZGVjX2RhdGEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzogKGdzdF9ydHBfaDI2NF9kZXBheV9zZXRjYXBzKToKLQkgIE1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgY29kZWNfZGF0YS4KLQkgIEZpeGVzICM0NDcyMTAuCi0KLTIwMDctMDYtMTIgMjE6MDU6MjIgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvTUFOSUZFU1Q6IEFkZCB2aWRlb2Nyb3AgcHJvamVjdCBmaWxlIHRvIHRoZSB3aW4zMiBtYW5pZmVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgIEFkZCB2aWRlb2Nyb3AgcHJvamVjdCBmaWxlIHRvIHRoZSB3aW4zMiBtYW5pZmVzdC4KLQkgICogd2luMzIvdnM2L2dzdF9wbHVnaW5zX2dvb2QuZHN3OgotCSAgQWRkIHF0ZGVtdXgsdmlkZW9jcm9wIGFuZCB3YXZlZm9ybSBwcm9qZWN0cyB0byB0aGUgd29ya3NwYWNlLgotCSAgKiB3aW4zMi92czYvbGliZ3N0cXRkZW11eC5kc3A6Ci0JICBBZGQgemxpYiB0byB0aGUgbGluayBsaXN0IG9mIHF0ZGVtdXguCi0JICAqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb2Nyb3AuZHNwOgotCSAgQWRkIGEgcHJvamVjdCBmaWxlIGZvciB2aWRlb2Nyb3AuCi0KLTIwMDctMDYtMTIgMjA6MjI6MjYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBwby9QT1RGSUxFUy5pbjogQWRkIHF0ZGVtdXggZm9yIHRyYW5zbGF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogcG8vUE9URklMRVMuaW46Ci0JICBBZGQgcXRkZW11eCBmb3IgdHJhbnNsYXRpb24KLQotMjAwNy0wNi0xMiAyMDoxNToyOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIE1vdmUgdmlkZW9jcm9wIGFuZCBvc3h2aWRlbyBmcm9tIC1iYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JICAqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgICogc3lzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2ljbGVzL3ZpZGVvY3JvcC10ZXN0LmM6Ci0JICBNb3ZlIHZpZGVvY3JvcCBhbmQgb3N4dmlkZW8gZnJvbSAtYmFkLgotCi0yMDA3LTA2LTEyIDE5OjM1OjA4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgTW92ZSBxdGRlbXV4IGZyb20gLWJhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdGRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF1aWNrdGltZS54bWw6Ci0JICAqIHdpbjMyL01BTklGRVNUOgotCSAgTW92ZSBxdGRlbXV4IGZyb20gLWJhZC4KLQkgICogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgVXBkYXRlIHNwZWMgZmlsZSB0byByZWZsZWN0IG1vdmluZyBvZiBxdGRlbXV4IGFuZCB3YXZwYWNrCi0KLTIwMDctMDYtMTIgMTk6MDE6NDEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiB3aW4zMi9NQU5JRkVTVDoKLQkgIEZpeCB0eXBvIGluIHRoZSBjaGFuZ2Vsb2cgYW5kIGNvbW1pdCB0aGUgbWFuaWZlc3QgdG9vCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCB0eXBvIGluIHRoZSBjaGFuZ2Vsb2cgYW5kIGNvbW1pdCB0aGUgbWFuaWZlc3QgdG9vCi0KLTIwMDctMDYtMTIgMTg6NTI6MzMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB3aW4zMi9NQU5JRkVTVAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHdpbjMyL01BTklGRVNUCi0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGlyZWN0ZHJhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kaXJlY3Rzb3VuZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlZm9ybS54bWw6Ci0JICBNb3ZlIHRoZSB3YXZlZm9ybSBwbHVnaW4gZnJvbSAtYmFkIHRvby4gVXBkYXRlIHRoZSBpbnNwZWN0IHhtbAotCSAgZmlsZXMgdG8gbWVudGlvbiBQbHVnaW5zIEdvb2QgaW5zdGVhZCBvZiBQbHVnaW5zIEJhZC4KLQotMjAwNy0wNi0xMiAxMzozMzo1NiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBwb29sIGJ1ZmZlciBpZiBhbGwgbW1hcCBidWZmZXJzIGhhdmUgYmVlbiBkZXF1ZXVlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKGdzdF92NGwyc3JjX2dyYWJfZnJhbWUpOiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBwb29sIGJ1ZmZlciBpZiBhbGwKLQkgIG1tYXAgYnVmZmVycyBoYXZlIGJlZW4gZGVxdWV1ZWQuCi0KLTIwMDctMDYtMTIgMTE6MjM6MDEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jIChnc3RfdjRsMl9idWZmZXJfZmluYWxpemUpIChnc3RfdjRsMl9idWZmZXJfY2xhc3NfaW5pdCwgZ3N0X3Y0bDJfYnVmZmVyX2dldF90eXBlKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA2LTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmMgKGdzdF92NGwyX2J1ZmZlcl9maW5hbGl6ZSkKLQkgIChnc3RfdjRsMl9idWZmZXJfY2xhc3NfaW5pdCwgZ3N0X3Y0bDJfYnVmZmVyX2dldF90eXBlKQotCSAgKGdzdF92NGwyX2J1ZmZlcl9uZXcpOiBCZWhhdmUgbW9yZSBsaWtlIHhpbWFnZXNpbmsncyBidWZmZXJzLCB3aXRoCi0JICBmaW5hbGl6YXRpb24gYW5kIHJlc3VzY2l0YXRpb24uIE5vIGxvbmdlciBwdWJsaWMuCi0JICAoZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZmluYWxpemUsIGdzdF92NGwyX2J1ZmZlcl9wb29sX2luaXQpCi0JICAoZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfY2xhc3NfaW5pdCwgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZ2V0X3R5cGUpCi0JICAoZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfbmV3LCBnc3RfdjRsMl9idWZmZXJfcG9vbF9hY3RpdmF0ZSkKLQkgIChnc3RfdjRsMl9idWZmZXJfcG9vbF9kZXN0cm95KTogTWFrZSB0aGUgcG9vbCBmb2xsb3cgY29tbW9uCi0JICBtaW5pb2JqZWN0IHNlbWFudGljcywgYW5kIGJlIHRocmVhZHNhZmUuCi0JICAoZ3N0X3Y0bDJzcmNfcXVldWVfZnJhbWUpOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiwgYXMgd2UganVzdCBjYWxsCi0JICB0aGUgaW9jdGxzIGRpcmVjdGx5IGluIHRoZSB0d28gcGxhY2VzIHdoZXJlIHdlIHF1ZXVlIGJ1ZmZlcnMuCi0JICAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSk6IFJldHVybiBhIGZsb3dyZXR1cm4gYW5kIGZpbGwgdGhlIGJ1ZmZlcgotCSAgZGlyZWN0bHkuCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KTogVXNlIHRoZSBuZXcgYnVmZmVyX3Bvb2xfbmV3IGZ1bmN0aW9uCi0JICB0byBhbGxvY2F0ZSB0aGUgcG9vbCwgd2hpY2ggYWxzbyBwcmVhbGxvY2F0ZXMgdGhlIEdzdEJ1ZmZlcnMuCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdGFydCk6IENhbGwgYnVmZmVyX3Bvb2xfYWN0aXZhdGUgaW5zdGVhZCBvZgotCSAgcXVldWVpbmcgdGhlIGZyYW1lcyBkaXJlY3RseS4KLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oIChzdHJ1Y3QgX0dzdFY0bDJCdWZmZXJQb29sKTogTWFrZSB0aGlzIGEKLQkgIHJlYWwgTWluaU9iamVjdCBpbnN0ZWFkIG9mIHJvbGxpbmcgb3VyIG93biByZWZjb3VudGluZyBhbmQKLQkgIGZpbmFsaXppbmcuIEdpdmUgaXQgYSBsb2NrLgotCSAgKHN0cnVjdCBfR3N0VjRsMkJ1ZmZlcik6IFJlbW92ZSBvbmUgaW50ZXJtZWRpYXJ5IG9iamVjdCwgaGF2aW5nCi0JICB0aGUgYnVmZmVycyBob2xkIHRoZSBzdHJ1Y3QgdjRsMl9idWZmZXIgZGlyZWN0bHkuCi0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYyAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHMpOiBQYXNzIHRoZSBjYXBzIHRvCi0JICBjYXB0dXJlX2luaXQgc28gdGhhdCBpdCBjYW4gc2V0IHRoZW0gb24gdGhlIGJ1ZmZlcnMgdGhhdCBpdCB3aWxsCi0JICBjcmVhdGUuCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X3JlYWQpOiBGb3IgYmV0dGVyIG9yIGZvciB3b3JzZSwgaW5jbHVkZSB0aGUKLQkgIHRpbWVzdGFtcGluZyBhbmQgb2Zmc2V0dGluZyBjb2RlIGhlcmU7IHJlYWxseSB3ZSBzaG91bGQgYmUgdXNpbmcKLQkgIGJ1ZmZlcmFsbG9jIHRob3VnaC4KLQkgIChnc3RfdjRsMnNyY19nZXRfbW1hcCk6IEp1c3QgbWFrZSBncmFiX2ZyYW1lIHJldHVybiBvbmUgb2Ygb3VyCi0JICBwcmVhbGxvY2F0ZWQsIG1tYXAnZCBidWZmZXJzLgotCi0yMDA3LTA2LTExIDExOjQxOjU2ICswMDAwICBkYW5pZWwgZmlzY2hlciA8ZGFuQGYzYy5jb20+Ci0KLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IEFjdHVhbGx5IHVzZSB0aGUgZGlzcGxheV9uYW1lIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGR1bXAgYW55IGF2YWlsYWJsZSBYIGRpc3BsYXkuIEZpeGVzIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogZGFuaWVsIGZpc2NoZXIgPGRhbiBhdCBmM2MgZG90IGNvbT4KLQkgICogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogKGdzdF94aW1hZ2Vfc3JjX3N0YXJ0KSwKLQkgIChnc3RfeGltYWdlX3NyY19nZXRfY2Fwcyk6Ci0JICBBY3R1YWxseSB1c2UgdGhlIGRpc3BsYXlfbmFtZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkdW1wIGFueQotCSAgYXZhaWxhYmxlIFggZGlzcGxheS4gRml4ZXMgIzQ0NTkwNS4KLQotMjAwNy0wNi0xMSAxMDoyMToxMyArMDAwMCAgVG9tbWkgTXnDtmjDpG5lbiA8ZXh0LXRvbW1pLm15b2hhbmVuQG5va2lhLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZCBtaXNzaW5nIHJhdGUgZmllbGRzIHRvIGNhcHMuIEZpeGVzICM0NDExMTguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUb21taSBNecO2aMOkbmVuICA8ZXh0LXRvbW1pIGRvdCBteW9oYW5lbiBhdCBub2tpYSBkb3QgY29tPgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOiAoZ3N0X3J0cF9wY21hX2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOiAoZ3N0X3J0cF9wY211X2RlcGF5X3NldGNhcHMpOgotCSAgQWRkIG1pc3NpbmcgcmF0ZSBmaWVsZHMgdG8gY2Fwcy4gRml4ZXMgIzQ0MTExOC4KLQotMjAwNy0wNi0xMCAyMToxNDoxMSArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICB3aW4zMi86IEFkZCBEaXJlY3RTb3VuZCBhbmQgRGlyZWN0RHJhdyBzaW5rcyBwcm9qZWN0IGZpbGVzIHRvIHdvcmtzcGFjZSBhbmQgc29sdXRpb24gZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM2L2dzdF9wbHVnaW5zX2dvb2QuZHN3OgotCSAgKiB3aW4zMi92czgvZ3N0LXBsdWdpbnMtZ29vZC5zbG46Ci0JICBBZGQgRGlyZWN0U291bmQgYW5kIERpcmVjdERyYXcgc2lua3MgcHJvamVjdCBmaWxlcyB0bwotCSAgd29ya3NwYWNlIGFuZCBzb2x1dGlvbiBmaWxlcy4KLQotMjAwNy0wNi0xMCAxMDo1MzoyNiArMDAwMCAgSm9zaCBDb2Fsc29uIDx4ZmxhY0B5YWhvby5jb20+Ci0KLQkgIEFkZCBzdXBwb3J0IGZvciBmbGFjID49IDEuMS4zIHdoaWNoIGNoYW5nZWQgdGhlIEFQSS4gRml4ZXMgYnVnICMzODU4ODcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKb3NoIENvYWxzb24gPHhmbGFjIGF0IHlhaG9vIGRvdCBjb20+LAotCSAgdXBkYXRlZCBieSBBbGV4aXMgQmFsbGllciA8YWJhbGxpZXIgYXQgZ2VudG9vIGRvdCBvcmc+OgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19yZXNldF9kZWNvZGVycyksCi0JICAoZ3N0X2ZsYWNfZGVjX3NldHVwX3NlZWthYmxlX2RlY29kZXIpLAotCSAgKGdzdF9mbGFjX2RlY19zZXR1cF9zdHJlYW1fZGVjb2RlciksIChnc3RfZmxhY19kZWNfc2VlayksCi0JICAoZ3N0X2ZsYWNfZGVjX3RlbGwpLCAoZ3N0X2ZsYWNfZGVjX2xlbmd0aCksIChnc3RfZmxhY19kZWNfZW9mKSwKLQkgIChnc3RfZmxhY19kZWNfcmVhZF9zZWVrYWJsZSksIChnc3RfZmxhY19kZWNfcmVhZF9zdHJlYW0pOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjX2VuY19pbml0KSwKLQkgIChnc3RfZmxhY19lbmNfZmluYWxpemUpLCAoZ3N0X2ZsYWNfZW5jX3NldF9tZXRhZGF0YSksCi0JICAoZ3N0X2ZsYWNfZW5jX3Npbmtfc2V0Y2FwcyksIChnc3RfZmxhY19lbmNfdXBkYXRlX3F1YWxpdHkpLAotCSAgKGdzdF9mbGFjX2VuY19zZWVrX2NhbGxiYWNrKSwgKGdzdF9mbGFjX2VuY193cml0ZV9jYWxsYmFjayksCi0JICAoZ3N0X2ZsYWNfZW5jX3RlbGxfY2FsbGJhY2spLCAoZ3N0X2ZsYWNfZW5jX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9mbGFjX2VuY19jaGFpbiksIChnc3RfZmxhY19lbmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfZmxhY19lbmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9mbGFjX2VuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgZmxhYyA+PSAxLjEuMyB3aGljaCBjaGFuZ2VkIHRoZSBBUEkuIEZpeGVzIGJ1ZyAjMzg1ODg3LgotCi0yMDA3LTA2LTA5IDE1OjQxOjUyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogUmVtb3ZlIHdvcmthcm91bmQgZm9yIGJ1ZyAjNDIxNTQzLiBUaGlzIGlzIGZpeGVkIGluIGNvcmUgMC4xMC4xMyBhbmQgbm90IG5lY2Vzc2FyeSBhbnltby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19zaW5rX3NldF9jYXBzKToKLQkgIFJlbW92ZSB3b3JrYXJvdW5kIGZvciBidWcgIzQyMTU0My4gVGhpcyBpcyBmaXhlZCBpbiBjb3JlIDAuMTAuMTMgYW5kCi0JICBub3QgbmVjZXNzYXJ5IGFueW1vcmUgYXMgd2UgbmVlZCBhdCBsZWFzdCB0aGF0IGNvcmUgdmVyc2lvbi4KLQotMjAwNy0wNi0wOSAxNTozMzozMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay86IEltcHJvdmUgZGlzY29udCBoYW5kbGluZyBieSBjaGVja2luZyBpZiB0aGUgbmV4dCBXYXZwYWNrIGJsb2NrIGhhcyB0aGUgZXhwZWN0ZWQsIGZvbGxvd2luZyBibG9jayBpbmRleC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfcmVzZXQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19jaGFpbik6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfcHVzaF9idWZmZXIpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgIEltcHJvdmUgZGlzY29udCBoYW5kbGluZyBieSBjaGVja2luZyBpZiB0aGUgbmV4dCBXYXZwYWNrIGJsb2NrIGhhcwotCSAgdGhlIGV4cGVjdGVkLCBmb2xsb3dpbmcgYmxvY2sgaW5kZXguCi0KLTIwMDctMDYtMDggMjA6MjM6MDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSAgbW9hcCBpZ25vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9hcCBpZ25vcmUKLQotMjAwNy0wNi0wOCAyMDoyMDo1NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jIChnc3RfcnRwX21wNHZwYXlfZGV0YWlscyk6IEZpeCBlbGVtZW50IGRlc2NyaXB0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jIChnc3RfcnRwX21wNHZwYXlfZGV0YWlscyk6Ci0JICBGaXggZWxlbWVudCBkZXNjcmlwdGlvbi4KLQotMjAwNy0wNi0wOCAyMDoxOTo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIG1vdmUgd2F2cGFjayBwbHVnaW4uICBTZWUgIzM1MjYwNS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIG1vdmUgd2F2cGFjayBwbHVnaW4uICBTZWUgIzM1MjYwNS4KLQotMjAwNy0wNi0wOCAxOTo0NTo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgIHRoZSBhbHBoYWJldCB0cmlwcGluZyB1cCBwZW9wbGUgc2luY2UgMTA5MjlCQwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB0aGUgYWxwaGFiZXQKLQkgIHRyaXBwaW5nIHVwIHBlb3BsZSBzaW5jZSAxMDkyOUJDCi0KLTIwMDctMDYtMDggMTc6Mzc6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBBZGQgRGlyZWN0RHJhdyAmIERpcmVjdFNvdW5kIHBsdWdpbnMgdG8gdGhlIGJ1aWxkIGFuZCBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogc3lzL01ha2VmaWxlLmFtOgotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgIEFkZCBEaXJlY3REcmF3ICYgRGlyZWN0U291bmQgcGx1Z2lucyB0byB0aGUgYnVpbGQgYW5kIGRvY3MuCi0KLTIwMDctMDYtMDggMTY6MzE6MTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBSZW5hbWUgdGhlIGtlZXAtYXNwZWN0LXJhdGlvIHByb3BlcnR5IHRvIGZvcmNlLWFzcGVjdC1yYXRpbyB0byBtYWtlIGl0IGNvbnNpc3RlbnQgd2l0aCB4dmltYWdlc2luayBhbmQgeGltYWdlc2luay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX2NsYXNzX2luaXQpOgotCSAgUmVuYW1lIHRoZSBrZWVwLWFzcGVjdC1yYXRpbyBwcm9wZXJ0eSB0byBmb3JjZS1hc3BlY3QtcmF0aW8gdG8gbWFrZQotCSAgaXQgY29uc2lzdGVudCB3aXRoIHh2aW1hZ2VzaW5rIGFuZCB4aW1hZ2VzaW5rLgotCi0yMDA3LTA2LTA4IDEwOjQzOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvOiBXaGVuIG9wZXJhdGluZyBpbiBwdWxsIG1vZGUsIGVycm9yIG91dCBjb3JyZWN0IG9uIG5vdC1saW5rZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2ZGVtdXguYzogKGdzdF9kdmRlbXV4X2xvb3ApOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAodXNlcl9yZWFkX2RhdGEpLCAoZ3N0X3BuZ2RlY190YXNrKToKLQkgIFdoZW4gb3BlcmF0aW5nIGluIHB1bGwgbW9kZSwgZXJyb3Igb3V0IGNvcnJlY3Qgb24gbm90LWxpbmtlZC4KLQotMjAwNy0wNi0wOCAwODoxMjo0MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogRGVmYXVsdCB0byB4dmltYWdlc2luayBpbnN0ZWFkIG9mIGF1dG92aWRlb3Npbmsgd2hpbGUgYXV0b3ZpZGVvc2luay9naG9zdHBhZHMvd2hhdGV2ZXIgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogKG1haW4pOgotCSAgRGVmYXVsdCB0byB4dmltYWdlc2luayBpbnN0ZWFkIG9mIGF1dG92aWRlb3Npbmsgd2hpbGUKLQkgIGF1dG92aWRlb3NpbmsvZ2hvc3RwYWRzL3doYXRldmVyIGRvbid0IGhhbmRsZSB0aGUgd2F5IHdlIHVzZSBpdCBpbgotCSAgdGhlIHdheSB3ZSBleHBlY3QgaXQgdG8uCi0KLTIwMDctMDYtMDYgMTA6MTk6MTcgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jIChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDYtMDYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYyAoZ3N0X3Y0bDJzcmNfcHJvYmVfY2Fwc19mb3JfZm9ybWF0KQotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSk6IE9ubHkgcHJvYmUgZm9yCi0JICBmb3JtYXQgYW5kIHNpemUgaWYgdGhlIGlvY3RscyBhcmUgZGVmaW5lZDsgc2hvdWxkIGZpeCBjb21waWxhdGlvbgotCSAgb24gTGludXggPCAyLjE2LjE5LgotCi0yMDA3LTA2LTA2IDA4OjUzOjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogUHJpbnRmIGZpeGVzIGluIGRlYnVnIHN0YXRlbWVudHM7IHVzZSBMT0cgbGV2ZWwgZm9yIGRlYnVnIHN0YXRlbWVudHMgdGhhdCBhcmUgcHJpbnRlZCBmb3IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfYXl1dl9pNDIwKToKLQkgIFByaW50ZiBmaXhlcyBpbiBkZWJ1ZyBzdGF0ZW1lbnRzOyB1c2UgTE9HIGxldmVsIGZvciBkZWJ1ZyBzdGF0ZW1lbnRzCi0JICB0aGF0IGFyZSBwcmludGVkIGZvciBlYWNoIGFuZCBldmVyeSBmcmFtZTsgY29udmVydCBjKysgY29tbWVudHMgdG8KLQkgIEMtc3R5bGUgY29tbWVudHM7IG5vdCBtdWNoIHBvaW50IHVzaW5nIGdfdHJ5X21hbGxvYygpIGlmIHdlIHRoZW4gbm90Ci0JICBldmVuIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuCi0KLTIwMDctMDYtMDUgMTY6MzI6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCByZXF1aXJlbWVudHMgdG8gcmVsZWFzZWQgdmVyc2lvbnMgKGNvcmUgYW5kIGJhc2UgMC4xMC4xMykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQnVtcCByZXF1aXJlbWVudHMgdG8gcmVsZWFzZWQgdmVyc2lvbnMgKGNvcmUgYW5kIGJhc2UgMC4xMC4xMykuCi0JICAqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOiAoZ3N0X2ljeWRlbXV4X3VuaWNvZGlmeSk6Ci0JICBVc2UgZ3N0X3RhZ191dGY4X2Zyb21fZnJlZWZvcm1fc3RyaW5nKCkgZnJvbSBsaWJnc3R0YWcgaW5zdGVhZCBvZgotCSAgb3duIGltcGxlbWVudGF0aW9uLgotCi0yMDA3LTA2LTA1IDE0OjE3OjI1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYyAoZ3N0X3Y0bDJzcmNfc3RhcnQsIGdzdF92NGwyc3JjX3N0b3ApOiBBZGQgc29tZSB1c2VsZXNzIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA3LTA2LTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmMgKGdzdF92NGwyc3JjX3N0YXJ0LCBnc3RfdjRsMnNyY19zdG9wKTogQWRkCi0JICBzb21lIHVzZWxlc3MgY29tbWVudHMuCi0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYyAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KTogRG9uJ3QgcXVldWUKLQkgIGZyYW1lcyBiZWZvcmUgY2FsbGluZyBTVFJFQU1PTiwgdGhhdCBtaWdodCBsZWF2ZSB0aGVtIGluIGEgc3RhdGUKLQkgIHdoZXJlIHRoZXkgY2FuJ3QgYmUgZGVxdWV1ZWQgaWYgd2UgZ28gYmFjayB0byBOVUxMIHdpdGhvdXQgY2FsbGluZwotCSAgU1RSRUFNT04sIGFjY29yZGluZyB0byB0aGUgZG9jcy4KLQkgIChnc3RfdjRsMnNyY19jYXB0dXJlX3N0YXJ0KTogRW5xdWV1ZSBidWZmZXJzIGhlcmUgaW5zdGVhZCwgcmlnaHQKLQkgIGJlZm9yZSB3ZSBjYWxsIFNUUkVBTU9OLgotCSAgKGdzdF92NGwyc3JjX2NhcHR1cmVfZGVpbml0KTogUmVtb3ZlIGNyYWNrIHRvIHdvcmsgYXJvdW5kIGRlcXVldWUKLQkgIGZhaWx1cmVzLiAoRm9yIG1lIHRoaXMgY29kZSBodW5nLikgVGhlIHBvb2wgcmVmY291bnRpbmcgaXMgc3RpbGwKLQkgIGNyYWNrOyBhZGRlZCBhIG5vdGUgdG8gdGhhdCBlZmZlY3QuCi0KLTIwMDctMDYtMDUgMDk6MTE6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IEFkZCBzdXBwb3J0IGZvciBtYXBwaW5nIGdzdCBzdHJ1Y3R1cmUgbmFtZXMgdG8gdGhlIE1JTUUgdHlwZSBlcXVpdmFsZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9jbGFzc19pbml0KSwKLQkgIChnc3RfbXVsdGlwYXJ0X211eF9nZXRfbWltZSksIChnc3RfbXVsdGlwYXJ0X211eF9jb2xsZWN0ZWQpOgotCSAgQWRkIHN1cHBvcnQgZm9yIG1hcHBpbmcgZ3N0IHN0cnVjdHVyZSBuYW1lcyB0byB0aGUgTUlNRSB0eXBlIGVxdWl2YWxlbnQuCi0JICBJbXBsZW1lbnRlZCBmb3IgYXVkaW8veC1tdWxhdy0+YXVkaW8vYmFzaWMuIEZpeGVzICM0NDI4NzQuCi0KLTIwMDctMDYtMDMgMTE6MjE6NDQgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3dhdmVuYy9nc3R3YXZlbmMuKjogUHJvcGVybHkgd3JpdGUgd2F2IGZpbGVzIHdpdGggd2lkdGghPWRlcHRoIGJ5IGhhdmluZyB0aGUgZGVwdGggbW9zdCBzaWduaWZpY2FudCBieXRlcyBzZXQgYW5kLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY3JlYXRlX2hlYWRlcl9idWYpLAotCSAgKGdzdF93YXZlbmNfc2lua19zZXRjYXBzKSwgKGdzdF93YXZlbmNfZm9ybWF0X3NhbXBsZXMpLAotCSAgKGdzdF93YXZlbmNfY2hhaW4pLCAoZ3N0X3dhdmVuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oOgotCSAgUHJvcGVybHkgd3JpdGUgd2F2IGZpbGVzIHdpdGggd2lkdGghPWRlcHRoIGJ5IGhhdmluZyB0aGUgZGVwdGggbW9zdAotCSAgc2lnbmlmaWNhbnQgYnl0ZXMgc2V0IGFuZCBhbGwgb3RoZXJzIHplcm8uIEZpeGVzICM0NDI1MzUuCi0KLTIwMDctMDYtMDEgMTM6NTI6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IEFkZCBpbmNsdWRlIHRvIG1ha2UgYnVpbGRib3QgaGFwcHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzoKLQkgIEFkZCBpbmNsdWRlIHRvIG1ha2UgYnVpbGRib3QgaGFwcHkuCi0KLTIwMDctMDYtMDEgMTM6MDc6MTEgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRzcC86IEltcHJvdmVzIHZlcnNpb24gY2hlY2tpbmcsIGFsbG93aW5nIGFuIFJUU1Agc2VydmVyIHRvIHJlcGx5IHdpdGggIjUwNQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX2NyZWF0ZSksCi0JICAocnRzcF9jb25uZWN0aW9uX2Nvbm5lY3QpLCAoYWRkX2RhdGVfaGVhZGVyKSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fc2VuZCksIChwYXJzZV9yZXNwb25zZV9zdGF0dXMpLAotCSAgKHBhcnNlX3JlcXVlc3RfbGluZSksIChwYXJzZV9saW5lKSwgKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuYzogKHJ0c3BfdmVyc2lvbl9hc190ZXh0KToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuYzogKGtleV92YWx1ZV9mb3JlYWNoKSwKLQkgIChydHNwX21lc3NhZ2VfaW5pdF9yZXF1ZXN0KSwgKHJ0c3BfbWVzc2FnZV9pbml0X3Jlc3BvbnNlKSwKLQkgIChydHNwX21lc3NhZ2VfcmVtb3ZlX2hlYWRlciksIChydHNwX21lc3NhZ2VfYXBwZW5kX2hlYWRlcnMpLAotCSAgKHJ0c3BfbWVzc2FnZV9kdW1wKToKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuaDoKLQkgIEltcHJvdmVzIHZlcnNpb24gY2hlY2tpbmcsIGFsbG93aW5nIGFuIFJUU1Agc2VydmVyIHRvIHJlcGx5IHdpdGggIjUwNQotCSAgUlRTUCBWZXJzaW9uIG5vdCBzdXBwb3J0ZWQuCi0JICBBZGRzIGEgRGF0ZSBoZWFkZXIgdG8gYWxsIG1lc3NhZ2VzLgotCSAgUmVwbGllcyB3aXRoIFJUU1BfRVBBUlNFIHJhdGhlciB0aGFuIFJUU1BfRUlOVkFMSUQgaW4gY2FzZXMgd2hlcmUgd2UKLQkgIHdhbnQgdG8gYmUgYWJsZSB0byBzZW5kIGEgcmVzcG9uc2UgZXZlbiBpZiBzb21ldGhpbmcgaW4gdGhlIHJlcXVlc3Qgd2FzCi0JICBpbnZhbGlkLiBFSU5WQUwgaXMgb25seSB1c2VkIHdoZW4gcGFzc2luZyB3cm9uZyBhcmd1bWVudHMgdG8gZnVuY3Rpb25zLgotCSAgRG8gbm90IGhhbmRsZSBhbiBpbnZhbGlkIG1ldGhvZCBpbiBwYXJzZV9yZXF1ZXN0X2xpbmUoKS4gRGVmZXIgdGhpcyB0bwotCSAgdGhlIGNhbGxlciBzbyBpdCBjYW4gcmVzcG9uZCB3aXRoICI0MDUgTWV0aG9kIE5vdCBBbGxvd2VkIi4KLQkgIEltcHJvdmVzIHBhcnNpbmcgb2YgdGhlIHRpbWVvdXQgcGFyYW1ldGVyIHRvIHRoZSBTZXNzaW9uIGhlYWRlciwKLQkgIGFsbG93aW5nIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIHNlbWljb2xvbi4KLQkgIEF2b2lkcyBhIGNvbXBpbGVyIHdhcm5pbmcgZHVlIHRvIHZhcmlhYmxlcyBzaGFkb3dpbmcgYSBmdW5jdGlvbiBhcmd1bWVudC4KLQotMjAwNy0wNi0wMSAxMToxNjoxNyArMDAwMCAgRGFuaWVsIENoYXJsZXMgPGRjaGFybGVzQHRpLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZCBzdXBwb3J0IGZvciBBTVItV0IuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIFBhdGNoIGJ5OiBEYW5pZWwgQ2hhcmxlcyA8ZGNoYXJsZXMgYXQgdGkgZG90IGNvbT4KLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOiAoZ3N0X3J0cF9hbXJfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9hbXJfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzogKGdzdF9ydHBfYW1yX3BheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfYW1yX3BheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfYW1yX3BheV9pbml0KSwKLQkgIChnc3RfcnRwX2Ftcl9wYXlfc2V0Y2FwcyksIChnc3RfcnRwX2Ftcl9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5Lmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgQU1SLVdCLgotCSAgU21hbGwgY2xlYW51cHMgc3VjaCBhcyB1c2luZyBCT0lMRVJQTEFURS4KLQotMjAwNy0wNS0zMSAxNTo1NzowNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvcnRzcGV4dHdtcy5jOiBGaXggY29tcGlsZSB3YXJuaW5nIHdoZW4gZGVidWcgaXMgZGlzYWJsZWQgYXMgc3BvdHRlZCBidSBTYXVyIG9uIElSQy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwZXh0d21zLmM6IChydHNwX2V4dF93bXNfY29uZmlndXJlX3N0cmVhbSk6Ci0JICBGaXggY29tcGlsZSB3YXJuaW5nIHdoZW4gZGVidWcgaXMgZGlzYWJsZWQgYXMgc3BvdHRlZCBidSBTYXVyIG9uIElSQy4KLQotMjAwNy0wNS0zMCAxNDo1Nzo0NCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lio6IFJldmVydCBzb21lIHVuaW50ZW5kZWQgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wNS0zMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmMgKGdzdF92NGwyX29iamVjdF9uZXcpOiBSZXZlcnQgc29tZQotCSAgdW5pbnRlbmRlZCBjaGFuZ2VzLgotCi0yMDA3LTA1LTMwIDE0OjQwOjUzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuKjogU3RvcmUgdGhlIGZvcm1hdCBsaXN0IGluIHRoZSBvcmRlciB0aGF0IHRoZSBkcml2ZXIgZ2l2ZXMgaXQgdG8gdXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDUtMzAgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jIChnc3RfdjRsMnNyY19maWxsX2Zvcm1hdF9saXN0KTogU3RvcmUKLQkgIHRoZSBmb3JtYXQgbGlzdCBpbiB0aGUgb3JkZXIgdGhhdCB0aGUgZHJpdmVyIGdpdmVzIGl0IHRvIHVzLgotCSAgKGdzdF92NGwyc3JjX3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSkKLQkgIChnc3RfdjRsMnNyY19wcm9iZV9jYXBzX2Zvcl9mb3JtYXQpOiBOZXcgZnVuY3Rpb25zLCBmaWxsIEdzdENhcHMKLQkgIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZS4KLQkgIChnc3RfdjRsMnNyY19ncmFiX2ZyYW1lKTogVXBkYXRlIGZvciBvYmplY3QgdmFyaWFibGUgcmVuYW1pbmcuCi0JICAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHR1cmUpOiBVcGRhdGUgdG8gYmUgc3RyaWN0IGluIGl0cyBwYXJhbWV0ZXJzLAotCSAgYXMgaW4gdGhlIHNldF9jYXBzIGJlbG93LgotCSAgKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCk6IFVwZGF0ZSBmb3Igb2JqZWN0IHZhcmlhYmxlIHJlbmFtaW5nLAotCSAgYW5kIHJlZmxvdy4KLQkgIChnc3RfdjRsMnNyY19jYXB0dXJlX3N0YXJ0LCBnc3RfdjRsMnNyY19jYXB0dXJlX3N0b3ApCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9kZWluaXQpOiBVcGRhdGUgZm9yIG9iamVjdCB2YXJpYWJsZSByZW5hbWluZy4KLQkgIChnc3RfdjRsMnNyY191cGRhdGVfZnBzLCBnc3RfdjRsMnNyY19zZXRfZnBzKQotCSAgKGdzdF92NGwyc3JjX2dldF9mcHMpOiBSZW1vdmU7IHRoZXNlIGZ1bmN0aW9ucyBkb24ndCBoYXZlIG11Y2gKLQkgIG1lYW5pbmcgb3V0c2lkZSBvZiBhbiBhdG9taWMgc2V0X2NhcHMgbWV0aG9kLgotCSAgKGdzdF92NGwyc3JjX2J1ZmZlcl9uZXcpOiBEb24ndCBzZXQgYnVmZmVyIGR1cmF0aW9uLCBpdCBpcyBub3QKLQkgIGtub3duLgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYyAoZ3N0X3Y0bDJfdHVuZXJfc2V0X2NoYW5uZWwpOiBSZW1vdmUKLQkgIGNhbGwgdG8gdXBkYXRlX2Zwczsgbm90IHN1cmUgYWJvdXQgdGhpcyBjaGFuZ2UuCi0JICAoZ3N0X3Y0bDJfdHVuZXJfc2V0X25vcm0pOiBXb3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IGZvciB0aGUKLQkgIG1vbWVudCB3ZSBkb24ndCBoYXZlIGFuIHVwZGF0ZV9mcHNfZnVuYy4KLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oIChzdHJ1Y3QgX0dzdFY0bDJTcmMpOiBEb24ndCBwdXQgdjRsMgotCSAgc3RydWN0dXJlcyBpbiB0aGUgb2JqZWN0LCBqdXN0IHN0b3JlIHdoYXQgd2UgbmVlZC4gRG8gc3RvcmUgdGhlCi0JICBwcm9iZWQgY2FwcyBvZiB0aGUgZGV2aWNlLiBEb24ndCBzdG9yZSB0aGUgY3VycmVudCBmcmFtZSByYXRlLgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmMgKGdzdF92NGwyc3JjX2luaXQpOiBSZW1vdmUgdGhlCi0JICB1cGRhdGVfZnBzX2Z1bmN0aW9uLCBmb3Igbm93LiBVcGRhdGUgZm9yIG5ldyBvYmplY3QgdmFyaWFibGUKLQkgIG5hbWluZy4KLQkgIChnc3RfdjRsMnNyY19zZXRfcHJvcGVydHksIGdzdF92NGwyc3JjX2dldF9wcm9wZXJ0eSk6IFVwZGF0ZSBmb3IKLQkgIG5ldyBvYmplY3QgdmFyaWFibGUgbmFtaW5nLgotCSAgKGdzdF92NGwyc3JjX3Y0bDJmb3VyY2NfdG9fc3RydWN0dXJlKTogUmVuYW1lIGZyb20gLi4uX3RvX2NhcHMuCi0JICAoZ3N0X3Y0bDJfc3RydWN0dXJlX3RvX3Y0bDJmb3VyY2MpOiBSZW5hbWUgZnJvbSAuLi5jYXBzX3RvXy4uLi4KLQkgIChnc3RfdjRsMnNyY19nZXRfY2Fwcyk6IFJld29yayB0byBwcm9iZSB0aGUgZGV2aWNlIGZvciBzdXBwb3J0ZWQKLQkgIGZyYW1lIHNpemVzIGFuZCBmcmFtZSByYXRlcy4KLQkgIChnc3RfdjRsMnNyY19zZXRfY2Fwcyk6IFJld29yayB0byBiZSBzdHJpY3QgaW4gdGhlIGdpdmVuCi0JICBwYXJhbWV0ZXJzOiBpZiBzb21lb25lIGFza3MgdXMgdG8gaGF2ZSBhIGNlcnRhaW4gc2l6ZSBhbmQgcmF0ZSwKLQkgIHRoYXQgaXMgd2hhdCB3ZSBjb25maWd1cmUuCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X3JlYWQpOiBVcGRhdGUgZm9yIG9iamVjdCB2YXJpYWJsZSBuYW1pbmcuIERvbid0Ci0JICBsZWFrIGJ1ZmZlcnMgb24gc2hvcnQgcmVhZHMuCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X21tYXApOiBVcGRhdGUgZm9yIG9iamVjdCB2YXJpYWJsZSBuYW1pbmcsIGFuZCBhZGQKLQkgIGNvbW1lbnRzLgotCSAgKGdzdF92NGwyc3JjX2NyZWF0ZSk6IFVwZGF0ZSBmb3Igb2JqZWN0IHZhcmlhYmxlIG5hbWluZy4KLQotMjAwNy0wNS0zMCAxNDozODo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC4qOiBQYXJzZSBzdWJ0aXRsZSB0ZXh0IHN0cmVhbXMgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQgKCM0NDIwMzQpLiBTdGlsbCBuZWVkcyBhIHBhcnNlciBmb3IgdGhlIHN1Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9iYXNlX2luaXQpLAotCSAgKGdzdF9hdmlfZGVtdXhfcmVzZXQpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBQYXJzZSBzdWJ0aXRsZSB0ZXh0IHN0cmVhbXMgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQgKCM0NDIwMzQpLiBTdGlsbAotCSAgbmVlZHMgYSBwYXJzZXIgZm9yIHRoZSBzdWJ0aXRsZXMgdG8gYWN0dWFsbHkgc2hvdyB1cC4KLQotMjAwNy0wNS0zMCAxMjo0NjozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBNYWtlIF9wdXNoX2V2ZW50KCkgcmV0dXJuIFRSVUUgaWYgdGhlIGV2ZW50IGNvdWxkIGJlIHB1c2hlZCBvbiBhdCBsZWFzdCBvbmUgcGFkIGFuZCBub3Qgb25seSBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50KSwKLQkgIChnc3RfYXZpX2RlbXV4X2xvb3ApOgotCSAgTWFrZSBfcHVzaF9ldmVudCgpIHJldHVybiBUUlVFIGlmIHRoZSBldmVudCBjb3VsZCBiZSBwdXNoZWQgb24gYXQKLQkgIGxlYXN0IG9uZSBwYWQgYW5kIG5vdCBvbmx5IGlmIGl0IGNvdWxkIGJlIHB1c2hlZCBvbiBhbGwgcGFkcywKLQkgIG90aGVyd2lzZSB3ZSdsbCBlbmQgdXAgcG9zdGluZyBhbiBlcnJvciBtZXNzYWdlIG9uIEVPUyBpZiBvbmUgb3IKLQkgIG1vcmUgc291cmNlIHBhZHMgYXJlIG5vdCBjb25uZWN0ZWQuCi0KLTIwMDctMDUtMjggMTY6Mzk6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuYzogVXNlIHJlbmFtZWQgUlRQIGJpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6Ci0JICBVc2UgcmVuYW1lZCBSVFAgYmluLgotCi0yMDA3LTA1LTI4IDE1OjAxOjMzICswMDAwICBEZWphbiBTYWtlbMWhYWsgPHNha2RlYW5AZ21haWwuY29tPgotCi0JICBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogQWRkIEFZVVYtPkFZVVYgYW5kIEFZVVYtPkk0MjAgZm9ybWF0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IERlamFuIFNha2VsxaFhayA8c2FrZGVhbiBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2JveF9zZXRfcHJvcGVydHkpLCAoZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fY2FwcyksCi0JICAodmlkZW9fYm94X3JlY2FsY190cmFuc2Zvcm0pLCAoZ3N0X3ZpZGVvX2JveF9zZXRfY2FwcyksCi0JICAoZ3N0X3ZpZGVvX2JveF9nZXRfdW5pdF9zaXplKSwgKGdzdF92aWRlb19ib3hfYXBwbHlfYWxwaGEpLAotCSAgKGdzdF92aWRlb19ib3hfYXl1dl9heXV2KSwgKGdzdF92aWRlb19ib3hfY2xlYXIpLCAoVVZmbG9vciksCi0JICAoVVZjZWlsKSwgKGdzdF92aWRlb19ib3hfYXl1dl9pNDIwKSwgKGdzdF92aWRlb19ib3hfaTQyMF9heXV2KSwKLQkgIChnc3RfdmlkZW9fYm94X2k0MjBfaTQyMCksIChnc3RfdmlkZW9fYm94X3RyYW5zZm9ybSksCi0JICAocGx1Z2luX2luaXQpOgotCSAgQWRkIEFZVVYtPkFZVVYgYW5kIEFZVVYtPkk0MjAgZm9ybWF0cy4KLQkgIEZpeCBuZWdvdGlhdGlvbiBhbmQgSTQyMC0+QVlVViBjb252ZXJzaW9uLgotCSAgRml4ZXMgIzQyOTMyOS4KLQotMjAwNy0wNS0yNiAxNToyNToxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IFVzZSBkaWZmZXJlbnQgdmFyaWFibGVzIGZvciBuZXN0ZWQgZm9yIGxvb3BzIHNvIHRoYXQgdGhlIG91dGVyIGxvb3AgZnVuY3Rpb25zIHByb3Blcmx5IGFuZCBzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IChzcGVleF9kZWNfY2hhaW5fcGFyc2VfZGF0YSk6Ci0JICBVc2UgZGlmZmVyZW50IHZhcmlhYmxlcyBmb3IgbmVzdGVkIGZvciBsb29wcyBzbyB0aGF0IHRoZSBvdXRlciBsb29wCi0JICBmdW5jdGlvbnMgcHJvcGVybHkgYW5kIHNwZWV4IGZpbGVzIHdpdGggbXVsdGlwbGUgZnJhbWVzIHBlciBidWZmZXIgd29yawotCSAgcHJvcGVybHkuCi0JICBGaXhlcyAjNDQxNDA4LgotCi0yMDA3LTA1LTI1IDIwOjUxOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogRG9uJ3QgbGVhayBuZXdzZWdtZW50IGV2ZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9zaW5rX2V2ZW50KToKLQkgIERvbid0IGxlYWsgbmV3c2VnbWVudCBldmVudHMuCi0KLTIwMDctMDUtMjUgMjA6MzM6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbTogQWRkICctbG0nIHRvIExJQlMgZm9yIGNlaWwoKSwgZG9uJ3QgYXNzdW1lIG9uZSBvZiBvdXIgZGVwZW5kZW5jaWVzIGRyYWdzIGl0IGluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbToKLQkgIEFkZCAnLWxtJyB0byBMSUJTIGZvciBjZWlsKCksIGRvbid0IGFzc3VtZSBvbmUgb2Ygb3VyIGRlcGVuZGVuY2llcwotCSAgZHJhZ3MgaXQgaW4uCi0KLTIwMDctMDUtMjUgMTY6MDI6NTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuKjogQ29sbGVjdCBoZWFkZXJzLCBhZGQgInN0cmVhbWhlYWRlciIgZmllbGQgdG8gb3V0cHV0IGNhcHMgYW5kIHNldAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjX2VuY19pbml0KSwKLQkgIChub3Rnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2J1ZmZlciksCi0JICAoZ3N0X2ZsYWNfZW5jX3Byb2Nlc3Nfc3RyZWFtX2hlYWRlcnMpLAotCSAgKGdzdF9mbGFjX2VuY193cml0ZV9jYWxsYmFjayksIChnc3RfZmxhY19lbmNfY2hhaW4pLAotCSAgKGdzdF9mbGFjX2VuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmg6Ci0JICBDb2xsZWN0IGhlYWRlcnMsIGFkZCAic3RyZWFtaGVhZGVyIiBmaWVsZCB0byBvdXRwdXQgY2FwcyBhbmQgc2V0Ci0JICBCVUZGRVJfSU5fQ0FQUyBmbGFnIG9uIHB1c2hlZCBoZWFkZXIgYnVmZmVycy4gVGhhdCB3YXkgb2dnbXV4Ci0JICBwcm9kdWNlcyBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBvZmZpY2lhbCBGTEFDLXRvLU9nZyBtYXBwaW5nCi0JICBpbnN0ZWFkIG9mIGNvbXBsZXRlbHkgYnJva2VuIGZpbGVzLiBGaXhlcyAjNDI2MDQ0LgotCi0yMDA3LTA1LTI1IDEwOjQ0OjEyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0LzogSGFuZGxlIGFuZCBhZGp1c3QgbmV3LXNlZ21lbnQgZXZlbnRzIHNvIHRoYXQgZG93bnN0cmVhbSByZWFsbHkgc2VlcyBhIHN0cmVhbSB3aXRoIHRoZSB0YWcgcGllY2VzIHN0cmlwcGVkIG9mZiB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9pZDNkZW11eF9zZW5kX25ld19zZWdtZW50KSwgKGdzdF9pZDNkZW11eF9jaGFpbiksCi0JICAoZ3N0X2lkM2RlbXV4X3NpbmtfZXZlbnQpOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguaDoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9yZXNldCksCi0JICAoZ3N0X3RhZ19kZW11eF9jaGFpbiksIChnc3RfdGFnX2RlbXV4X3NpbmtfZXZlbnQpLAotCSAgKGdzdF90YWdfZGVtdXhfc2VuZF9uZXdfc2VnbWVudCk6Ci0JICBIYW5kbGUgYW5kIGFkanVzdCBuZXctc2VnbWVudCBldmVudHMgc28gdGhhdCBkb3duc3RyZWFtIHJlYWxseQotCSAgc2VlcyBhIHN0cmVhbSB3aXRoIHRoZSB0YWcgcGllY2VzIHN0cmlwcGVkIG9mZiB0aGUgZnJvbnQgYW5kIGJhY2suCi0JICBGaXhlcyBzdHJhbmdlbmVzcyBpbiBzZWVraW5nIHdoZW4gbXAzIGRlY29kZXJzIHVzZSB0aGUgbmV3LXNlZ21lbnQKLQkgIGJ5dGUgcG9zaXRpb24gdG8gZXN0aW1hdGUgdGhlaXIgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiB0aW1lc3RhbXAKLQkgIGFuZCB0aGVuIHRoZSBhcnJpdmluZyBidWZmZXJzIGRvbid0IG1hdGNoIHVwLgotCi0yMDA3LTA1LTI1IDEwOjIzOjQ5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOiBEb24ndCB1bm5lY2Vzc2FyaWx5IHBlcmZvcm0gYSBSRUFEWS0+TlVMTC0+UkVBRFkgdHJhbnNpdGlvbiBvbiB0aGUgZGV0ZWN0ZWQgYXVkaW8gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOiAoZ3N0X2F1dG9fYXVkaW9fc2lua19kZXRlY3QpOgotCSAgRG9uJ3QgdW5uZWNlc3NhcmlseSBwZXJmb3JtIGEgUkVBRFktPk5VTEwtPlJFQURZIHRyYW5zaXRpb24gb24gdGhlCi0JICBkZXRlY3RlZCBhdWRpbyBzaW5rIHdoZW4gc3RhcnRpbmcgdXAuIEZpeGVzOiAjNDQwMTI3Ci0KLTIwMDctMDUtMjQgMTc6MDA6MjEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogRG9uJ3QgY3Jhc2ggaW4gY2hhaW4gZnVuY3Rpb24gaWYgc2V0Y2FwcyBoYXNuJ3QgYmVlbiBjYWxsZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOiAoZ3N0X2ZsYWNfZW5jX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X2ZsYWNfZW5jX2NoYWluKToKLQkgIERvbid0IGNyYXNoIGluIGNoYWluIGZ1bmN0aW9uIGlmIHNldGNhcHMgaGFzbid0IGJlZW4gY2FsbGVkLgotCi0yMDA3LTA1LTI0IDA4OjM1OjIzICswMDAwICBWaW5jZW50IFRvcnJpIDx2dG9ycmlAdW5pdi1ldnJ5LmZyPgotCi0JICBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay4qOiBGaXggbW9yZSB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIE1pbmdXICgjNDM5OTE0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFZpbmNlbnQgVG9ycmkgIDx2dG9ycmkgYXQgdW5pdi1ldnJ5IGZyPgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKGdzdF9kaXJlY3RkcmF3X3NpbmtfYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX3Nob3dfZnJhbWUpLAotCSAgKGdzdF9kaXJlY3RkcmF3X3NpbmtfY2hlY2tfcHJpbWFyeV9zdXJmYWNlKSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX2NoZWNrX29mZnNjcmVlbl9zdXJmYWNlKSwKLQkgIChFbnVtTW9kZXNDYWxsYmFjazIpLCAoZ3N0X2RpcmVjdGRyYXdfc2lua19nZXRfZGRyYXdjYXBzKSwKLQkgIChnc3RfZGlyZWN0ZHJhd19zaW5rX3N1cmZhY2VfY3JlYXRlKToKLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuaDoKLQkgIEZpeCBtb3JlIHdhcm5pbmdzIHdoZW4gY29tcGlsaW5nIHdpdGggTWluZ1cgKCM0Mzk5MTQpLgotCi0yMDA3LTA1LTI0IDA4OjE0OjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IEluaXQgdmFsdWUgdG8gYXZvaWQgaW5maW50ZSBsb29wcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKToKLQkgIEluaXQgdmFsdWUgdG8gYXZvaWQgaW5maW50ZSBsb29wcy4KLQotMjAwNy0wNS0yNCAwODoxMDo0MiArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC9ydHNwLzogRml4IGZvciBuZXcgQVBJLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZXR1cF9hdXRoKSwKLQkgIChnc3RfcnRzcHNyY190cnlfc2VuZCksIChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKSwKLQkgIChnc3RfcnRzcHNyY19zZXR1cF9zdHJlYW1zKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCSAgKGdzdF9ydHNwc3JjX3BsYXkpOgotCSAgKHJ0c3BfY29ubmVjdGlvbl9zZW5kKSwgKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKToKLQkgICogZ3N0L3J0c3AvcnRzcGV4dHdtcy5jOiAocnRzcF9leHRfd21zX2FmdGVyX3NlbmQpOgotCSAgRml4IGZvciBuZXcgQVBJLgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAoYWRkX2F1dGhfaGVhZGVyKSwKLQkgIE9ubHkgYWRkIGF1dGhvcmlzYXRpb24gYW5kIHNlc3Npb24gaGVhZGVycyB3aGVuIHNlbmRpbmcgbWVzc2FnZXMuCi0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmM6IChrZXlfdmFsdWVfZm9yZWFjaCksIChydHNwX21lc3NhZ2VfaW5pdCksCi0JICAocnRzcF9tZXNzYWdlX2luaXRfcmVxdWVzdCksIChydHNwX21lc3NhZ2VfaW5pdF9yZXNwb25zZSksCi0JICAocnRzcF9tZXNzYWdlX3Vuc2V0KSwgKHJ0c3BfbWVzc2FnZV9hZGRfaGVhZGVyKSwKLQkgIChydHNwX21lc3NhZ2VfcmVtb3ZlX2hlYWRlciksIChydHNwX21lc3NhZ2VfZ2V0X2hlYWRlciksCi0JICAocnRzcF9tZXNzYWdlX2FwcGVuZF9oZWFkZXJzKSwgKGR1bXBfa2V5X3ZhbHVlKSwKLQkgIChydHNwX21lc3NhZ2VfZHVtcCk6Ci0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgaGVhZGVycyBvZiB0aGUgc2FtZSB0eXBlIGJ5IHN0b3JpbmcgdGhlIHBhcnNlZAotCSAgaGVhZGVycyBpbiBhIEdBcnJheSBpbnN0YWVkIG9mIGEgaGFzaHRhYmxlLgotCi0yMDA3LTA1LTIzIDIyOjQ0OjEyICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOiBSZW1vdmUgZGlyZWN0c291bmRzaW5rIHByb3BlcnR5IGRvYyBhcyB0aGlzIHNpbmsgdXNlIHRoZSBtaXhlciBpbnRlcmZhY2Ugbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOgotCSAgUmVtb3ZlIGRpcmVjdHNvdW5kc2luayBwcm9wZXJ0eSBkb2MgYXMgdGhpcyBzaW5rIHVzZSB0aGUgbWl4ZXIKLQkgIGludGVyZmFjZSBub3cuCi0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5pbnRlcmZhY2VzOgotCSAgQWRkIGludGVyZmFjZXMgaW1wbGVtZW50ZWQgYnkgV2luZG93cyBzaW5rcy4KLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JICBSZW1vdmUgZGlyZWN0c291bmRzaW5rIHByb3BlcnR5ICBhbmQgaW1wbGVtZW50IHRoZSBtaXhlciBpbnRlcmZhY2UuCi0JICAqIHdpbjMyL3ZzNi9nc3RfcGx1Z2luc19iYWQuZHN3OgotCSAgKiB3aW4zMi92czYvbGliZ3N0ZGlyZWN0c291bmQuZHNwOgotCSAgVXBkYXRlIHByb2plY3QgZmlsZXMuCi0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9nc3Rkc2hvdy5jcHA6Ci0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9nc3Rkc2hvdy5oOgotCSAgKiBnc3QtbGlicy9nc3QvZHNob3cvZ3N0ZHNob3dmYWtlc2luay5jcHA6Ci0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9nc3Rkc2hvd2Zha2VzaW5rLmg6Ci0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9nc3Rkc2hvd2Zha2VzcmMuY3BwOgotCSAgKiBnc3QtbGlicy9nc3QvZHNob3cvZ3N0ZHNob3dmYWtlc3JjLmg6Ci0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9nc3Rkc2hvd2ludGVyZmFjZS5jcHA6Ci0JICAqIGdzdC1saWJzL2dzdC9kc2hvdy9nc3Rkc2hvd2ludGVyZmFjZS5oOgotCSAgKiB3aW4zMi9jb21tb24vbGliZ3N0ZHNob3cuZGVmOgotCSAgKiB3aW4zMi92czYvbGliZ3N0ZHNob3cuZHNwOgotCSAgQWRkIGEgbmV3IGdzdCBsaWJyYXJ5IHdoaWNoIGFsbG93IHRvIGNyZWF0ZSBpbnRlcm5hbCBEaXJlY3QgU2hvdwotCSAgZ3JhcGggKHBpcGVsaW5lcykgdG8gd3JhcCBXaW5kb3dzIHNvdXJjZXMsIGRlY29kZXJzIG9yIGVuY29kZXJzLgotCSAgSXQgaW5jbHVkZXMgYSBEaXJlY3RTaG93IGZha2Ugc291cmNlIGFuZCBzaW5rIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucy4KLQkgICogc3lzL2RzaG93c3Jjd3JhcHBlci9nc3Rkc2hvd2F1ZGlvc3JjLmM6Ci0JICAqIHN5cy9kc2hvd3NyY3dyYXBwZXIvZ3N0ZHNob3dhdWRpb3NyYy5oOgotCSAgKiBzeXMvZHNob3dzcmN3cmFwcGVyL2dzdGRzaG93c3Jjd3JhcHBlci5jOgotCSAgKiBzeXMvZHNob3dzcmN3cmFwcGVyL2dzdGRzaG93c3Jjd3JhcHBlci5oOgotCSAgKiBzeXMvZHNob3dzcmN3cmFwcGVyL2dzdGRzaG93dmlkZW9zcmMuYzoKLQkgICogc3lzL2RzaG93c3Jjd3JhcHBlci9nc3Rkc2hvd3ZpZGVvc3JjLmg6Ci0JICAqIHdpbjMyL3ZzNi9saWJkc2hvd3NyY3dyYXBwZXIuZHNwOgotCSAgQWRkIGEgbmV3IHBsdWdpbiB0byB3cmFwIERpcmVjdFNob3cgc291cmNlcyBvbiBXaW5kb3dzLgotCSAgSXQgZ2V0cyBkYXRhIGZyb20gYW55IHdlYmNhbSwgZHYgY2FtLCBtaWNyby4gV2UgY291bGQgYWRkCi0JICB0diB0dW5uZXIgY2FyZCBsYXRlci4KLQotMjAwNy0wNS0yMiAxMToxNDoxMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjb25maWd1cmUuYWM6IERlcGVuZCBvbiBnc3RyZWFtZXItMC4xMC4xMi4xLiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jIChBUkdfQkFORF9XSURUSCwgX2RvX2luaXQsIEFSR19HQUlOLCBfR3MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBEZXBlbmQgb24gZ3N0cmVhbWVyLTAuMTAuMTIuMS4KLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYyAoQVJHX0JBTkRfV0lEVEgsIF9kb19pbml0LCBBUkdfR0FJTiwKLQkgIF9Hc3RJaXJFcXVhbGl6ZXJCYW5kLCBvYmplY3QsIF9Hc3RJaXJFcXVhbGl6ZXJCYW5kQ2xhc3MsCi0JICBwYXJlbnRfY2xhc3MsIGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5LAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9jbGFzc19pbml0LCBnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF90eXBlLAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4LAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50LAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfaW50ZXJmYWNlX2luaXQsIHNldHVwX2ZpbHRlciwKLQkgIGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMsCi0JICBnc3RfaWlyX2VxdWFsaXplcl9zZXRfcHJvcGVydHksIGdzdF9paXJfZXF1YWxpemVyX2dldF9wcm9wZXJ0eSwKLQkgIHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaCAoYXVkaW9maWx0ZXIpOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jIChBUkdfTlVNX0JBTkRTLAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2Jhc2VfaW5pdCwgZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2luaXQsCi0JICBnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfc2V0X3Byb3BlcnR5KToKLQkgIFVzZSBuZXcgbG9ja2luZyBtYWNyb3MuCi0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jIChicHdzaW5jX3NldF9jYXBzKToKLQkgIEFkZCBmaXhtZS4KLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmMgKFNQRUNUUlVNX1dJTkRPV19CQVNFLAotCSAgU1BFQ1RSVU1fV0lORE9XX0xFTiwgZ3N0X3NwZWN0cnVtX2luaXQsIGdzdF9zcGVjdHJ1bV9zZXRfcHJvcGVydHksCi0JICBnc3Rfc3BlY3RydW1fZXZlbnQsIGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgVXNlIG5ldyBsb2NraW5nIG1hY3Jvcy4gVHVybiB0d28gZml4ZWQgdmFsdWVzIGludG8gI2RlZmluZXMuCi0KLTIwMDctMDUtMjIgMTE6MDM6MzAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbTogQWxzbyBsb29rIGZvciAubSAob2JqZWN0aXZlYykgZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgQWxzbyBsb29rIGZvciAubSAob2JqZWN0aXZlYykgZmlsZXMuCi0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZWxlbWVudCBhbmQgcHJvcGVydGllcy4KLQotMjAwNy0wNS0yMSAxNDowMToxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBDaGFuZ2VMb2c6IENoYW5nZUxvZyBzdXJnZXJ5LiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jIChBUkdfQkFORF9XSURUSCwgX2RvX2luaXQsIEFSR19HQUlOLCBfR3N0SWlyRXF1YWxpemVyQmEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeS4KLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYyAoQVJHX0JBTkRfV0lEVEgsIF9kb19pbml0LCBBUkdfR0FJTiwKLQkgIF9Hc3RJaXJFcXVhbGl6ZXJCYW5kLCBvYmplY3QsIF9Hc3RJaXJFcXVhbGl6ZXJCYW5kQ2xhc3MsCi0JICBwYXJlbnRfY2xhc3MsIGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5LAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9jbGFzc19pbml0LCBnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF90eXBlLAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4LAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50LAotCSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfaW50ZXJmYWNlX2luaXQsIHNldHVwX2ZpbHRlciwKLQkgIGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMsIHBsdWdpbl9pbml0KToKLQkgICogdGVzdHMvaWNsZXMvZXF1YWxpemVyLXRlc3QuYzoKLQkgIEFkZCBmaXhtZSBhbmQgY29tbWVudCBmb3IgZXhhbXBsZS4KLQotMjAwNy0wNS0yMSAxMjo0MzozNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkgIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jIChnc3Rfc3BlY3RydW1fc2V0X3Byb3BlcnR5LCBnc3Rfc3BlY3RydW1fZXZlbnQsIGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jIChnc3Rfc3BlY3RydW1fc2V0X3Byb3BlcnR5LAotCSAgZ3N0X3NwZWN0cnVtX2V2ZW50LCBnc3Rfc3BlY3RydW1fdHJhbnNmb3JtX2lwKToKLQkgIFVzZSBsb2NrIHRvIHByb3RlY3QgZnJvbSBjb25jdXJyZW50IGFjY2Vzcy4KLQotMjAwNy0wNS0yMSAxMTozNzoxNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6IFNwZWNpZnkgYW5kIHVzZSBwcm9wZXJ0aWVzIGFzIHVuc2lnbmVkIGludCB0aGF0IGFyZSBhbiB1bnNpZ25lZCBpbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2VuY19zZXRfcHJvcGVydHkpLCAoZ3N0X3dhdnBhY2tfZW5jX2dldF9wcm9wZXJ0eSk6Ci0JICBTcGVjaWZ5IGFuZCB1c2UgcHJvcGVydGllcyBhcyB1bnNpZ25lZCBpbnQgdGhhdCBhcmUgYW4gdW5zaWduZWQgaW50LgotCi0yMDA3LTA1LTIxIDExOjE3OjIxICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuKjogRml4dXAgZG9jcywgbWFrZSB0aGUgYml0cmF0ZSBwcm9wZXJ0eSBhbiBpbnQgYXMgaXQgc2hvdWxkIGJlIGFuZCBhbGxvdyB0byBzZXQgdGhlIGRpZmZlci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19jbGFzc19pbml0KSwKLQkgIChnc3Rfd2F2cGFja19lbmNfaW5pdCksIChnc3Rfd2F2cGFja19lbmNfc2V0X3dwX2NvbmZpZyksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3NldF9wcm9wZXJ0eSksIChnc3Rfd2F2cGFja19lbmNfZ2V0X3Byb3BlcnR5KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSAgRml4dXAgZG9jcywgbWFrZSB0aGUgYml0cmF0ZSBwcm9wZXJ0eSBhbiBpbnQgYXMgaXQgc2hvdWxkIGJlIGFuZAotCSAgYWxsb3cgdG8gc2V0IHRoZSBkaWZmZXJlbnQgZXh0cmEgcHJvY2Vzc2luZyBtb2RlcyBpbnN0ZWFkIG9mIG9ubHkKLQkgIGFsbG93aW5nIG5vbmUgYW5kIHRoZSBkZWZhdWx0IG9uZS4KLQotMjAwNy0wNS0yMSAxMDowNzowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogU2luY2Ugd2UgZGVwZW5kIG9uIDAuMTAuMTMgLWNvcmUsIG92ZXJyaWRlIHRoZSB1bmxvY2tfc3RvcCB2bWV0aG9kIGZvciBzYWZlciBzaHV0ZG93bi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfdWRwc3JjX2NyZWF0ZSksIChnc3RfdWRwc3JjX3VubG9jayksIChnc3RfdWRwc3JjX3VubG9ja19zdG9wKToKLQkgIFNpbmNlIHdlIGRlcGVuZCBvbiAwLjEwLjEzIC1jb3JlLCBvdmVycmlkZSB0aGUgdW5sb2NrX3N0b3Agdm1ldGhvZCBmb3IKLQkgIHNhZmVyIHNodXRkb3duLgotCi0yMDA3LTA1LTIxIDEwOjAzOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHBkZWMuKjogQWRkZWQgc2lnbmFsIGZvciBiYWNrd2FyZHMgY29tcGF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cF9kZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5oOgotCSAgQWRkZWQgc2lnbmFsIGZvciBiYWNrd2FyZHMgY29tcGF0LgotCi0yMDA3LTA1LTIxIDA5OjMyOjI2ICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBVc2UgYXVkaW9jb252ZXJ0IGZvciBjb252ZXJ0aW5nIGZyb20gbm9uLW5hdGl2ZSBlbmRpYW5uZXNzIGZsb2F0cyBpbiBhdXBhcnNlIGluc3RlYWQgb2YgZG9pbmcgaXQgb3Vyc2VsZi4gRml4ZXMgIzQyNDUyNy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZG90IGRlPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzogKGdzdF9hdV9wYXJzZV9yZXNldCksCi0JICAoZ3N0X2F1X3BhcnNlX3BhcnNlX2hlYWRlciksIChnc3RfYXVfcGFyc2VfY2hhaW4pOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmg6Ci0JICBVc2UgYXVkaW9jb252ZXJ0IGZvciBjb252ZXJ0aW5nIGZyb20gbm9uLW5hdGl2ZSBlbmRpYW5uZXNzIGZsb2F0cwotCSAgaW4gYXVwYXJzZSBpbnN0ZWFkIG9mIGRvaW5nIGl0IG91cnNlbGYuIEZpeGVzICM0MjQ1MjcuCi0JICBUaGlzIG5lZWRzIHRoZSBhdWRpb2NvbnZlcnQgZnJvbSBwbHVnaW5zLWJhc2UgQ1ZTLgotCi0yMDA3LTA1LTIxIDA5OjI5OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6IEZpeCBlbnVtIHJlZ2lzdHJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6IChnc3RfZnJhZ21lbnRhdGlvbl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfcnRwX2gyNjNwX3BheV9mbHVzaCk6Ci0JICBGaXggZW51bSByZWdpc3RyYXRpb24uCi0KLTIwMDctMDUtMjEgMDg6NTc6MTggKzAwMDAgIEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMEBnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuKjogQWRkIG5ldyBmcmFnbWVudGF0aW9uIG1vZGUgYmFzZSBvbiBHT0IgaGVhZGVycy4gRml4ZXMgIzQzODk0MC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMCBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6IChnc3RfZnJhZ21lbnRhdGlvbl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3RfcnRwX2gyNjNwX3BheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfaDI2M3BfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfaDI2M3BfcGF5X3NldF9wcm9wZXJ0eSksIChnc3RfcnRwX2gyNjNwX3BheV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfaDI2M3BfcGF5X2ZsdXNoKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5oOgotCSAgQWRkIG5ldyBmcmFnbWVudGF0aW9uIG1vZGUgYmFzZSBvbiBHT0IgaGVhZGVycy4gRml4ZXMgIzQzODk0MC4KLQotMjAwNy0wNS0yMCAyMTozMTo1OCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6IEFkZCBtaXNzaW5nIGF1ZGlvY29udmVydHMgaW4gdGhlIGV4YW1wbGUgcGlwZWxpbmVzIG9mIHdhdnBhY2tlbmMuIEFzIHRoZSB3YXZwYWNrIHN0dWZmIG4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6Ci0JICBBZGQgbWlzc2luZyBhdWRpb2NvbnZlcnRzIGluIHRoZSBleGFtcGxlIHBpcGVsaW5lcyBvZiB3YXZwYWNrZW5jLiBBcwotCSAgdGhlIHdhdnBhY2sgc3R1ZmYgbm93IG5lZWRzIGlucHV0IHdpdGggMzIgYml0IHdpZHRoIChhbmQgcmFuZG9tIGRlcHRoKQotCSAgdGhpcyBpcyBuZWVkZWQgbm93LiBUaGUgZXhhbXBsZSBwaXBlbGluZXMgZm9yIHRoZSBwYXJzZXIgYW5kIGRlY29kZXIKLQkgIGFyZSBzdGlsbCBmaW5lLgotCi0yMDA3LTA1LTIwIDE0OjU5OjQ2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOiBCdW5jaCBvZiBzbWFsbCBmaXhlczogcmVtb3ZlIHN0YXRpYyBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgZXhpc3Q7IGRlY2xhcmUgYW5vdGhlciAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOiAoZ3N0X2RkcmF3c3VyZmFjZV9maW5hbGl6ZSksCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19idWZmZXJfYWxsb2MpLAotCSAgKGdzdF9kaXJlY3RkcmF3X3NpbmtfZ2V0X2RkcmF3Y2FwcyksCi0JICAoZ3N0X2RpcmVjdGRyYXdfc2lua19zdXJmYWNlX2NyZWF0ZSk6Ci0JICBCdW5jaCBvZiBzbWFsbCBmaXhlczogcmVtb3ZlIHN0YXRpYyBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QgZXhpc3Q7Ci0JICBkZWNsYXJlIGFub3RoZXIgb25lIHRoYXQgZG9lczsgcHJpbnRmIGZvcm1hdCBmaXg7IHVzZSByaWdodCBtYWNybwotCSAgd2hlbiBzcGVjaWZ5aW5nIGRlYnVnIGNhdGVnb3J5OyByZW1vdmUgYSBidW5jaCBvZiB1bnVzZWQgdmFyaWFibGVzOwotCSAgI2lmIDAgb3V0IGFuIHVudXNlZCBjaHVuayBvZiBjb2RlIChwYXJ0aWFsbHkgZml4ZXMgIzQzOTkxNCkuCi0KLTIwMDctMDUtMjAgMTQ6MTQ6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC86IFByaW50ZiBmb3JtYXQgZml4ZXMgKCM0Mzk5MTAsICM0Mzk5MTEpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X3ByZXBhcmVfY3VycmVudF9zYW1wbGUpOgotCSAgKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5jOiAoZ3N0X3N3aXRjaF9jaGFpbik6Ci0JICBQcmludGYgZm9ybWF0IGZpeGVzICgjNDM5OTEwLCAjNDM5OTExKS4KLQotMjAwNy0wNS0yMCAxNDowNTo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBQcmludGYgZm9ybWF0IGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19sb29wX3VkcCk6Ci0JICBQcmludGYgZm9ybWF0IGZpeC4KLQotMjAwNy0wNS0xOSAxMDowMTo0NSArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgQWRkIHJlcGxheWdhaW4gcGxheWJhY2sgZWxlbWVudHMgKCM0MTI3MTApLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciA8bWFpbCBhdCByZW5lc3RhZGxlciBkZT4KLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JICAqIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmM6IChnc3RfcmdfYW5hbHlzaXNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3JnX2FuYWx5c2lzX3N0YXJ0KSwgKGdzdF9yZ19hbmFseXNpc19zZXRfY2FwcyksCi0JICAoZ3N0X3JnX2FuYWx5c2lzX3RyYW5zZm9ybV9pcCksIChnc3RfcmdfYW5hbHlzaXNfZXZlbnQpLAotCSAgKGdzdF9yZ19hbmFseXNpc19zdG9wKSwgKGdzdF9yZ19hbmFseXNpc19oYW5kbGVfdGFncyksCi0JICAoZ3N0X3JnX2FuYWx5c2lzX2hhbmRsZV9lb3MpLCAoZ3N0X3JnX2FuYWx5c2lzX3RyYWNrX3Jlc3VsdCksCi0JICAoZ3N0X3JnX2FuYWx5c2lzX2FsYnVtX3Jlc3VsdCk6Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuaDoKLQkgICogZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmM6IChnc3RfcmdfbGltaXRlcl9iYXNlX2luaXQpLAotCSAgKGdzdF9yZ19saW1pdGVyX2NsYXNzX2luaXQpLCAoZ3N0X3JnX2xpbWl0ZXJfaW5pdCksCi0JICAoZ3N0X3JnX2xpbWl0ZXJfc2V0X3Byb3BlcnR5KSwgKGdzdF9yZ19saW1pdGVyX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3JnX2xpbWl0ZXJfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmg6Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmM6IChnc3Rfcmdfdm9sdW1lX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3JnX3ZvbHVtZV9jbGFzc19pbml0KSwgKGdzdF9yZ192b2x1bWVfaW5pdCksCi0JICAoZ3N0X3JnX3ZvbHVtZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3JnX3ZvbHVtZV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9yZ192b2x1bWVfZGlzcG9zZSksIChnc3Rfcmdfdm9sdW1lX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3JnX3ZvbHVtZV9zaW5rX2V2ZW50KSwgKGdzdF9yZ192b2x1bWVfdGFnX2V2ZW50KSwKLQkgIChnc3Rfcmdfdm9sdW1lX3Jlc2V0KSwgKGdzdF9yZ192b2x1bWVfdXBkYXRlX2dhaW4pLAotCSAgKGdzdF9yZ192b2x1bWVfZGV0ZXJtaW5lX2dhaW4pOgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ3ZvbHVtZS5oOgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9yZXBsYXlnYWluLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9yZXBsYXlnYWluL3JlcGxheWdhaW4uaDoKLQkgICogZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5oOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOiAoc2VuZF9lb3NfZXZlbnQpLAotCSAgKEdTVF9TVEFSVF9URVNUKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmM6IChzZXR1cF9yZ2xpbWl0ZXIpLAotCSAgKGNsZWFudXBfcmdsaW1pdGVyKSwgKHNldF9wbGF5aW5nX3N0YXRlKSwgKGNyZWF0ZV90ZXN0X2J1ZmZlciksCi0JICAodmVyaWZ5X3Rlc3RfYnVmZmVyKSwgKEdTVF9TVEFSVF9URVNUKSwgKHJnbGltaXRlcl9zdWl0ZSksIChtYWluKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmd2b2x1bWUuYzogKGV2ZW50X2Z1bmMpLCAoc2V0dXBfcmd2b2x1bWUpLAotCSAgKGNsZWFudXBfcmd2b2x1bWUpLCAoc2V0X3BsYXlpbmdfc3RhdGUpLCAoc2V0X251bGxfc3RhdGUpLAotCSAgKHNlbmRfZW9zX2V2ZW50KSwgKHNlbmRfdGFnX2V2ZW50KSwgKHRlc3RfYnVmZmVyX25ldyksCi0JICAoZmFpbF91bmxlc3NfdGFyZ2V0X2dhaW4pLCAoZmFpbF91bmxlc3NfcmVzdWx0X2dhaW4pLAotCSAgKGZhaWxfdW5sZXNzX2dhaW4pLCAoR1NUX1NUQVJUX1RFU1QpLCAocmd2b2x1bWVfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgcmVwbGF5Z2FpbiBwbGF5YmFjayBlbGVtZW50cyAoIzQxMjcxMCkuCi0KLTIwMDctMDUtMTggMTM6Mjc6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRG9uJ3QgY3Jhc2ggd2hlbiBhbiB1bnN1cHBvcnRlZCB0cmFuc3BvcnQgZXJyb3Igd2FzIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIsIGp1c3QgdHJ5IHRvIGNvbmZpZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NldHVwX3N0cmVhbXMpOgotCSAgRG9uJ3QgY3Jhc2ggd2hlbiBhbiB1bnN1cHBvcnRlZCB0cmFuc3BvcnQgZXJyb3Igd2FzIHJldHVybmVkIGJ5IHRoZQotCSAgc2VydmVyLCBqdXN0IHRyeSB0byBjb25maWd1cmUgdGhlIG5leHQgc3RyZWFtLiBGaXhlcyAjNDM5MjU1LgotCi0yMDA3LTA1LTE4IDExOjM5OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IEFkZCBUQ1AgdGltZW91dCBwcm9wZXJ0eSBhbmQgdXNlIGl0IGZvciBhbGwgVENQIGNvbm5lY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHNwc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV91ZHApLCAoZ3N0X3J0c3BzcmNfbG9vcF9pbnRlcmxlYXZlZCksCi0JICAoZ3N0X3J0c3BzcmNfbG9vcF91ZHApLCAoZ3N0X3J0c3BzcmNfdHJ5X3NlbmQpLCAoZ3N0X3J0c3BzcmNfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfc2V0dXBfc3RyZWFtcyksIChnc3RfcnRzcHNyY19vcGVuKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgQWRkIFRDUCB0aW1lb3V0IHByb3BlcnR5IGFuZCB1c2UgaXQgZm9yIGFsbCBUQ1AgY29ubmVjdGlvbi4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jb25uZWN0KSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fd3JpdGUpLCAocnRzcF9jb25uZWN0aW9uX25leHRfdGltZW91dCksCi0JICAocnRzcF9jb25uZWN0aW9uX3Jlc2V0X3RpbWVvdXQpOgotCSAgTWFrZSBjb25uZWN0IGFuZCB3cml0ZXMgY2FuY2VsYWJsZSBhbmQgbWFrZSB0aGVtIHVzZSB0aGUgdGltZW91dC4KLQotMjAwNy0wNS0xOCAxMDozNjoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBSZWZhY3RvciB0aW1lb3V0IGhhbmRsaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NlbmRfa2VlcF9hbGl2ZSksCi0JICAoZ3N0X3J0c3BzcmNfbG9vcF9pbnRlcmxlYXZlZCksIChnc3RfcnRzcHNyY19sb29wX3VkcCksCi0JICAoZ3N0X3J0c3BzcmNfdHJ5X3NlbmQpLCAoZ3N0X3J0c3BzcmNfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfc2V0dXBfc3RyZWFtcyk6Ci0JICBSZWZhY3RvciB0aW1lb3V0IGhhbmRsaW5nLgotCSAgQWxzbyBzZW5kIGtlZXAtYWxpdmUgd2hlbiBkZWFsaW5nIHdpdGggVENQIHRyYW5zcG9ydC4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jcmVhdGUpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9mcmVlKSwgKHJ0c3BfY29ubmVjdGlvbl9uZXh0X3RpbWVvdXQpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9yZXNldF90aW1lb3V0KToKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uaDoKLQkgIFVzZSBhIHRpbWVyIHRvIGhhbmRsZSB0aGUgc2Vzc2lvbiB0aW1lb3V0cywgYWRkIHNvbWUgbWV0aG9kcyB0byBkZWFsCi0JICB3aXRoIHRpbWVvdXRzLgotCi0yMDA3LTA1LTE3IDE0OjU2OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IElnbm9yZSBzdHJlYW1zIHRoYXQgZmFpbCB0aGUgc2V0dXAgY29tbWFuZCwgd2Ugd2lsbCByZXRyeSB3aXRoIGEgZGlmZmVyZW50IHRyYW5zcG9ydCBsYXRlciBvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19zZXR1cF9zdHJlYW1zKToKLQkgIElnbm9yZSBzdHJlYW1zIHRoYXQgZmFpbCB0aGUgc2V0dXAgY29tbWFuZCwgd2Ugd2lsbCByZXRyeSB3aXRoIGEKLQkgIGRpZmZlcmVudCB0cmFuc3BvcnQgbGF0ZXIgb24uCi0JICAqIGdzdC9ydHNwL3J0c3BleHR3bXMuYzogKHJ0c3BfZXh0X3dtc19wYXJzZV9zZHApLAotCSAgKHJ0c3BfZXh0X3dtc19jb25maWd1cmVfc3RyZWFtKToKLQkgIEZpeCBlbmNvZGluZyBuYW1lIGNhc2UuCi0KLTIwMDctMDUtMTcgMTA6NTk6MDAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuKjogUmVtb3ZlIHRoZSBldmVudC1sb29wLWluLXNlcGFyYXRlLXRocmVhZCBtb2RpZmljYXRpb25zLCBiZWNhdXNlIE1hY09TWCBpcyAkI0AoKiUkIyAhIEZvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgUmVtb3ZlIHRoZSBldmVudC1sb29wLWluLXNlcGFyYXRlLXRocmVhZCBtb2RpZmljYXRpb25zLCBiZWNhdXNlIE1hY09TWAotCSAgaXMgJCNAKColJCMgISBGb3IgdGhvc2Ugd29uZGVyaW5nLCB0aGUgZXZlbnQgaGFuZGxpbmcgbmVlZHMgdG8gYmUgZG9uZQotCSAgaW4gdGhlIG1haW4gdGhyZWFkIGFmdGVyIGFsbC4uCi0KLTIwMDctMDUtMTcgMDk6NDE6NDggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuKjogRml4IGEgc3R1cGlkICNpZiB2cyAjaWZkZWYgYnVnLiBTaG91bGQgdXNlIHRoZSBwcm9wZXIgY29sb3JzcGFjZSBub3cuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBGaXggYSBzdHVwaWQgI2lmIHZzICNpZmRlZiBidWcuIFNob3VsZCB1c2UgdGhlIHByb3BlciBjb2xvcnNwYWNlIG5vdy4KLQkgIFVzZSBhIHNlcGFyYXRlIHRocmVhZC90YXNrIGZvciB0aGUgY29jb2EgZXZlbnRfbG9vcCwgZWxzZSBpdCB3b3VsZG4ndAotCSAgc3RvcC4KLQotMjAwNy0wNS0xNiAxNjo1MDoyMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogRml4IGJ1aWxkIG9uIG1hY29zeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAodXNlcl9lbmRyb3dfY2FsbGJhY2spLCAodXNlcl9yZWFkX2RhdGEpOgotCSAgRml4IGJ1aWxkIG9uIG1hY29zeC4KLQotMjAwNy0wNS0xNiAxNjozMDowMyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogUmVwbGFjZSBkaXJlY3QgY29tcGFyaXNvbiBvZiBhIHN0cmluZyB3aXRoIHRoZSBzdHJpbmcgbGl0ZXJhbCAiIiB3aXRoIGEgY29tcGFyaXNvbiBvZiB0aGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfdXJpX3NldF91cmkpOgotCSAgUmVwbGFjZSBkaXJlY3QgY29tcGFyaXNvbiBvZiBhIHN0cmluZyB3aXRoIHRoZSBzdHJpbmcgbGl0ZXJhbCAiIiB3aXRoCi0JICBhIGNvbXBhcmlzb24gb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB3aXRoICdcMCcuIEZpeGVzICM0Mzg5MjYuCi0KLTIwMDctMDUtMTUgMTc6MjI6NTggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFkZCBESVJFQ1REUkFXX0NGTEFHUyBhbmQgRElSRUNUU09VTkRfQ0ZMQUdTIHRvIE1ha2VmaWxlLmFtOyBzYXZlIGFuZCByZXN0b3JlIHRoZSB2YXJpb3VzIGZsYWdzIGluIHRoZSBkaXJlY3RkcmF3L2Rpci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogc3lzL2RpcmVjdGRyYXcvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZS5hbToKLQkgIEFkZCBESVJFQ1REUkFXX0NGTEFHUyBhbmQgRElSRUNUU09VTkRfQ0ZMQUdTIHRvIE1ha2VmaWxlLmFtOyBzYXZlCi0JICBhbmQgcmVzdG9yZSB0aGUgdmFyaW91cyBmbGFncyBpbiB0aGUgZGlyZWN0ZHJhdy9kaXJlY3Rzb3VuZAotCSAgZGV0ZWN0aW9uIHNlY3Rpb24uIEFwcGFyZW50bHkgaW1wcm92ZXMgY3Jvc3MtY29tcGlsaW5nIGZvciB3aW4zMgotCSAgd2l0aCBtaW5ndzMyIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyAoIzQzNzUzOSkuCi0KLTIwMDctMDUtMTUgMTE6MTg6MzMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmMgKGdzdF9icmVha19teV9kYXRhX2luaXQpOiBPbmUgbW9yZSB0cnkuIFRoaXMgc2hvdWxkIGJlIHRoZSBwcm9wZXIgZml4IG5vdy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVidWcvYnJlYWtteWRhdGEuYyAoZ3N0X2JyZWFrX215X2RhdGFfaW5pdCk6Ci0JICBPbmUgbW9yZSB0cnkuIFRoaXMgc2hvdWxkIGJlIHRoZSBwcm9wZXIgZml4IG5vdy4KLQotMjAwNy0wNS0xNSAwNjo0MTo1OCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZGVidWcvYnJlYWtteWRhdGEuYzogT29vcHMsIG5vIC8vIGNvbW1lbnRzIHBsZWFzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVidWcvYnJlYWtteWRhdGEuYzoKLQkgIE9vb3BzLCBubyAvLyBjb21tZW50cyBwbGVhc2UuCi0KLTIwMDctMDUtMTUgMDY6MzQ6NDggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6IEZpeCBnc3RfYnVmZmVyX2lzX3dyaXRhYmxlKCkgYXNzZXJ0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9icmVha215ZGF0YS5jOiAoZ3N0X2JyZWFrX215X2RhdGFfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2JyZWFrX215X2RhdGFfaW5pdCk6Ci0JICBGaXggZ3N0X2J1ZmZlcl9pc193cml0YWJsZSgpIGFzc2VydGlvbi4KLQotMjAwNy0wNS0xNSAwMjo1NjoyMyArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogQWRkIHN1cHBvcnQgZm9yIEJheWVyIGltYWdlcyBhcyB2aWRlby94LXJhdy1iYXllci4gIEZpeGVzICMzMTQxNjAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiBBZGQgc3VwcG9ydCBmb3IgQmF5ZXIgaW1hZ2VzIGFzCi0JICB2aWRlby94LXJhdy1iYXllci4gIEZpeGVzICMzMTQxNjAuCi0KLTIwMDctMDUtMTQgMTc6MTA6MTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBVcGRhdGUgdGhlb3JhIHBheS9kZXBheWxvYWRlciBpbiBhIHNpbWlsYXIgdG8gdm9yYmlzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzogKGRlY29kZV9iYXNlNjQpLAotCSAgKGdzdF9ydHBfdGhlb3JhX2RlcGF5X3BhcnNlX2NvbmZpZ3VyYXRpb24pOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOiAoZW5jb2RlX2Jhc2U2NCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2ZpbmlzaF9oZWFkZXJzKSwKLQkgIChnc3RfcnRwX3RoZW9yYV9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBVcGRhdGUgdGhlb3JhIHBheS9kZXBheWxvYWRlciBpbiBhIHNpbWlsYXIgdG8gdm9yYmlzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6Ci0JICAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfcGFyc2VfY29uZmlndXJhdGlvbik6Ci0JICBVcGRhdGUgZG9jcy4KLQotMjAwNy0wNS0xNCAxNjoxOTo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBXaGVuIHdlIHRyeSB0byBleGVjdXRlIGEgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLCBkb24ndCBlcnJvciBvdXQgYnV0IHJlbW92Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc2VuZCk6Ci0JICBXaGVuIHdlIHRyeSB0byBleGVjdXRlIGEgbWV0aG9kIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLAotCSAgZG9uJ3QgZXJyb3Igb3V0IGJ1dCByZW1vdmUgdGhlIG1ldGhvZCBmcm9tIHRoZSBhY2NlcHRlZCBtZXRob2RzIHNvIHRoYXQKLQkgIHdlIG5ldmVyIHRyeSB0byBwZXJmb3JtIHRoaXMgbWV0aG9kIGFnYWluLgotCi0yMDA3LTA1LTE0IDE0OjQ3OjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6IFJlbW92ZSBhbm5veWluZyBfZHVtcF9tZW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOiAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfcHJvY2Vzcyk6Ci0JICBSZW1vdmUgYW5ub3lpbmcgX2R1bXBfbWVtLgotCi0yMDA3LTA1LTE0IDExOjExOjQyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IFBhcnNlIHJhbmdlIGNvcnJlY3RseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19wYXJzZV9yYW5nZSk6Ci0JICBQYXJzZSByYW5nZSBjb3JyZWN0bHkuCi0JICAqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX2dldF9yZXF1ZXN0X3VyaSk6Ci0JICBUaGUgYmFzZXVybCBub3cgYWx3YXlzIGhhcyBhICcvJyBhdCB0aGUgc3RhcnQuCi0KLTIwMDctMDUtMTQgMDk6MDE6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRmFjdG9yIG91dCBjYXBzIGNvbmZpZ3VyYXRpb24gYW5kIGNvbmZpZ3VyZSBtb3JlIHN0dWZmIHN1Y2ggYXMgdGhlIHRpbWUgcmFuZ2VzIGFuZCBzcGVlZC9zY2FsZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2NvbmZpZ3VyZV9jYXBzKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9yYW5nZSksIChnc3RfcnRzcHNyY19vcGVuKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9ydHBpbmZvKSwgKGdzdF9ydHNwc3JjX3BsYXkpOgotCSAgRmFjdG9yIG91dCBjYXBzIGNvbmZpZ3VyYXRpb24gYW5kIGNvbmZpZ3VyZSBtb3JlIHN0dWZmIHN1Y2ggYXMgdGhlIHRpbWUKLQkgIHJhbmdlcyBhbmQgc3BlZWQvc2NhbGUgdmFsdWVzLgotCSAgKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6Ci0JICBBZGQgQ29weXJpZ2h0IGFmdGVyIG5vbi10cml2YWwgZml4ZXMuCi0KLTIwMDctMDUtMTMgMTk6NTc6NDUgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmM6IEZpeCB3cm9uZyBpZmRlZiBmb3IgdmlzdWFsIEMrKy4gIEZpeGVzOiAjNDM3NDAzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYzoKLQkgIEZpeCB3cm9uZyBpZmRlZiBmb3IgdmlzdWFsIEMrKy4gIEZpeGVzOiAjNDM3NDAzLgotCSAgQnkgQWxpIFNhYmlsIDxhbGkuc2FiaWxAZ21haWwuY29tPi4KLQotMjAwNy0wNS0xMyAxNTo0NzoxMyArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogVXNlIGd1aW50OCAqIGluc3RlYWQgb2YgZ3BvaW50ZXIgdGhlbiB2czYgY2FuIGJ1aWxkIGluX2RhdGEgKz0gKGZpbHRlci0+d2lkdGggLyA4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF90cmFuc2Zvcm1faXApOgotCSAgVXNlIGd1aW50OCAqIGluc3RlYWQgb2YgZ3BvaW50ZXIgdGhlbiB2czYgY2FuIGJ1aWxkCi0JICBpbl9kYXRhICs9IChmaWx0ZXItPndpZHRoIC8gOCkuCi0KLTIwMDctMDUtMTIgMTY6Mzc6NTAgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRzcC86IE1ha2UgY2hhbm5lbCBndWludDggd2hlcmUgcG9zc2libGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKToKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuYzogKHJ0c3BfbWVzc2FnZV9pbml0X2RhdGEpLAotCSAgKHJ0c3BfbWVzc2FnZV9nZXRfaGVhZGVyKToKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuaDoKLQkgIE1ha2UgY2hhbm5lbCBndWludDggd2hlcmUgcG9zc2libGUuCi0JICBNYWtlIHJ0c3BfbWVzc2FnZV9pbml0X2RhdGEoKSB0YWtlIHRoZSBjaGFubmVsIGFzIGEgZ3VpbnQ4LgotCSAgKiBnc3QvcnRzcC9ydHNwZGVmcy5jOgotCSAgRml4ZWQgYSB0eXBvOiBUaW1vdXQgLT4gVGltZW91dAotCSAgKiBnc3QvcnRzcC9ydHNwZGVmcy5oOgotCSAgTWFrZSBSVFNQX0NIRUNLKCkgYmVoYXZlIGFzIGEgc3RhdGVtZW50LgotCSAgKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmM6Ci0JICBBdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcgaW4gSU5JVF9BUlJBWSgpLgotCSAgRml4ZXMgIzQzNzY5Mi4KLQotMjAwNy0wNS0xMiAxNjoyNzo1MSArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3B1cmwuKjogQWRkIHN1cHBvcnQgZm9yIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gUlRTUCBVUkxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvcnRzcC9ydHNwdXJsLmM6IChydHNwX3VybF9wYXJzZSksIChydHNwX3VybF9mcmVlKSwKLQkgIChydHNwX3VybF9nZXRfcmVxdWVzdF91cmkpOgotCSAgKiBnc3QvcnRzcC9ydHNwdXJsLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgcXVlcnkgcGFyYW1ldGVycyB0byBSVFNQIFVSTHMuCi0KLTIwMDctMDUtMTIgMTY6MjY6MDYgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0Lio6IEFkZCB2YWxpZGF0aW9uIHRvIHJ0c3BfdHJhbnNwb3J0X3BhcnNlKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuYzogKHJ0c3BfdHJhbnNwb3J0X2luaXQpLCAocGFyc2VfbW9kZSksCi0JICAocGFyc2VfcmFuZ2UpLCAocmFuZ2VfYXNfdGV4dCksIChydHNwX3RyYW5zcG9ydF9tb2RlX2FzX3RleHQpLAotCSAgKHJ0c3BfdHJhbnNwb3J0X3Byb2ZpbGVfYXNfdGV4dCksIChydHNwX3RyYW5zcG9ydF9sdHJhbnNfYXNfdGV4dCksCi0JICAocnRzcF90cmFuc3BvcnRfcGFyc2UpLCAocnRzcF90cmFuc3BvcnRfYXNfdGV4dCk6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuaDoKLQkgIEFkZCB2YWxpZGF0aW9uIHRvIHJ0c3BfdHJhbnNwb3J0X3BhcnNlKCkuCi0JICBBZGQgcnRzcF90cmFuc3BvcnRfYXNfdGV4dCgpIHRvIGdlbmVyYXRlIGFuIFJUU1AgaGVhZGVyIGZyb20gYW4KLQkgIFJUU1BUcmFuc3BvcnQuCi0JICBDaGFuZ2Ugc3NyYyB0byBndWludCAod2FzIGEgc3RyaW5nKSBzaW5jZSB0aGF0IGlzIHdoYXQgaXQgaXMsIGV2ZW4KLQkgIHRob3VnaCBpdCBpcyBzZW50IGFzIGEgaGV4IHN0cmluZy4KLQkgIENvcnJlY3RseSBpZGVudGlmeSBQTEFZfFJFQ09SRCBtb2RlIHBhcmFtZXRlcnMgKHRoZSBzeW50YXggaW4gdGhlIFJGQyBpcwotCSAgaW5jb3JyZWN0LCB3aGljaCBjYW4gYmUgc2VlbiB3aGVuIGxvb2tpbmcgYXQgdGhlIGV4YW1wbGVzIGluIHRoZSBSRkMpLgotCSAgRml4ZXMgIzQzNzY3MC4KLQotMjAwNy0wNS0xMSAxNjoxMTowNCArMDAwMCAgRXJpYyBBbmhvbHQgPGFuaG9sdEBmcmVlYnNkLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmMgKGdzdF94aW1hZ2Vfc3JjX29wZW5fZGlzcGxheSwgZ3N0X3hpbWFnZV9zcmNfeGltYWdlX2dldCk6Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBFcmljIEFuaG9sdAotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jIChnc3RfeGltYWdlX3NyY19vcGVuX2Rpc3BsYXksCi0JICBnc3RfeGltYWdlX3NyY194aW1hZ2VfZ2V0KToKLQkgIFVzZSB1bmlvbiBvZiBhbGwgZGFtYWdlIGJldHdlZW4gZnJhbWVzIHRvIG1ha2UgaXQgZmFzdGVyLgotCSAgRml4ZXMgYnVnICMzNDI0NjMuCi0JICBBbHNvIGZpeCBjcmFzaGVyIHdoZW4gY3Vyc29yIGlzIGF0IGJvdHRvbSByaWdodCBvZiB3aW5kb3cuCi0KLTIwMDctMDUtMTEgMTY6MDE6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBTa2lwIExJU1QgY2h1bmtzIGJlZm9yZSB0aGUgZm10IGNodW5rIChmaXhlcyAjNDM3NDk5KS4gQWxzbyBmaXggc3RyZWFtaW5nIG1vZGUgcmVncmVzc2lvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKToKLQkgIFNraXAgTElTVCBjaHVua3MgYmVmb3JlIHRoZSBmbXQgY2h1bmsgKGZpeGVzICM0Mzc0OTkpLiBBbHNvIGZpeAotCSAgc3RyZWFtaW5nIG1vZGUgcmVncmVzc2lvbiBmb3IgZmlsZSBmcm9tICMzNDM4Mzcgd2l0aCAnYmV4dCcgY2h1bmsKLQkgIGJlZm9yZSB0aGUgJ2ZtdCcgY2h1bmsuCi0KLTIwMDctMDUtMTEgMTU6MDk6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwLzogUHJlbGltaW5hcnkgc2VlayBzdXBwb3J0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2ZsdXNoKSwKLQkgIChnc3RfcnRzcHNyY19kb19zZWVrKSwgKGdzdF9ydHNwc3JjX3BlcmZvcm1fc2VlayksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tYW5hZ2VyKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RjcCksIChnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkKSwKLQkgIChnc3RfcnRzcHNyY19zZW5kX2tlZXBfYWxpdmUpLCAoZ3N0X3J0c3BzcmNfb3BlbiksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyksIChnc3RfcnRzcHNyY19wbGF5KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgKiBnc3QvcnRzcC9ydHNwZGVmcy5oOgotCSAgUHJlbGltaW5hcnkgc2VlayBzdXBwb3J0LgotCSAgQWN0aXZhdGUgaW50ZXJuYWwgcGFkcyBzbyB0aGF0IHdlIGNhbiByZWNlaXZlIGV2ZW50cyBvbiB0aGVtLgotCSAgRG9uJ3QgdHJ5IHRvIHBhcnNlIGEgcmFuZ2Ugc3RyaW5nIHdoZW4gaXQncyBOVUxMLgotCi0yMDA3LTA1LTExIDE1OjA0OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL1JFQURNRTogVXBkYXRlIFJFQURNRSB3aXRoIG5ldyBSVFAgdmFyaWFibGVzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBzeW5jaHJvbmlzYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9SRUFETUU6Ci0JICBVcGRhdGUgUkVBRE1FIHdpdGggbmV3IFJUUCB2YXJpYWJsZXMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yCi0JICBzeW5jaHJvbmlzYXRpb24uCi0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzogKGRlY29kZV9iYXNlNjQpLAotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X3BhcnNlX2NvbmZpZ3VyYXRpb24pLAotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOiAoZW5jb2RlX2Jhc2U2NCksCi0JICAoZ3N0X3J0cF92b3JiaXNfcGF5X2ZpbmlzaF9oZWFkZXJzKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBVcGRhdGUgdm9yYmlzIHBheSBhbmQgZGVwYXlsb2FkZXIgdG8gZHJhZnQtMDQuCi0KLTIwMDctMDUtMTEgMTE6MjQ6MTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuYzogVURQIE1DQVNUIGlzIGFjdHVhbGx5IHRoZSBkZWZhdWx0IGZvciBSVFAvQVZQLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuYzoKLQkgIFVEUCBNQ0FTVCBpcyBhY3R1YWxseSB0aGUgZGVmYXVsdCBmb3IgUlRQL0FWUC4KLQotMjAwNy0wNS0xMSAxMDozMToyNyArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYyAoZ3N0X3hpbWFnZV9zcmNfc3RhcnQsIGdzdF94aW1hZ2Vfc3JjX3hpbWFnZV9nZXQpOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmMgKGdzdF94aW1hZ2Vfc3JjX3N0YXJ0LAotCSAgZ3N0X3hpbWFnZV9zcmNfeGltYWdlX2dldCk6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmggKGxhc3RfeGltYWdlKToKLQkgIFdoZW4gdXNpbmcgRGFtYWdlIGFjdHVhbGx5IGtlZXAgdGhlIGxhc3QgZnJhbWUsIGFuZCBub3QgYXNzdW1lCi0JICB0aGF0IHRoZSBidWZmZXIgd2UgZ2V0IGFscmVhZHkgaGFzIHRoZSBsYXN0IGZyYW1lIG9uIGl0LgotCSAgQ29weSB0aGUgY3Vyc29yIG92ZXIgaWYgd2Ugc3BlY2lmeSBhIG5vbi16ZXJvIHN0YXJ0IHggYW5kCi0JICBzdGFydCB5LgotCi0yMDA3LTA1LTExIDA5OjEyOjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6IE1ha2UgVURQIHRoZSBkZWZhdWx0IHRyYW5zcG9ydCB3aGVuIG5vdCBzcGVjaWZpZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5jOgotCSAgTWFrZSBVRFAgdGhlIGRlZmF1bHQgdHJhbnNwb3J0IHdoZW4gbm90IHNwZWNpZmllZC4KLQotMjAwNy0wNS0xMCAxNDowMjowNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmMgKGdzdF9xdGRlbXV4X21vdmVfc3RyZWFtLCBnc3RfcXRkZW11eF9sb29wX3N0YXRlX2hlYWRlciwgZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCwgZ3N0X3F0ZGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmMgKGdzdF9xdGRlbXV4X21vdmVfc3RyZWFtLAotCSAgZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIsIGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQsCi0JICBnc3RfcXRkZW11eF9wcmVwYXJlX2N1cnJlbnRfc2FtcGxlLCBnc3RfcXRkZW11eF9jb21iaW5lX2Zsb3dzLAotCSAgZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSwgZ3N0X3F0ZGVtdXhfbG9vcCwKLQkgIHF0ZGVtdXhfcGFyc2Vfc2VnbWVudHMsIHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICAqIGdzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYyAocnRwX3Nlc3Npb25fZ2V0X2JhbmR3aWR0aCwKLQkgIHJ0cF9zZXNzaW9uX2dldF9ydGNwX2JhbmR3aWR0aCwgcnRwX3Nlc3Npb25fZ2V0X2NuYW1lLAotCSAgcnRwX3Nlc3Npb25fZ2V0X25hbWUsIHJ0cF9zZXNzaW9uX2dldF9lbWFpbCwgcnRwX3Nlc3Npb25fZ2V0X3Bob25lLAotCSAgcnRwX3Nlc3Npb25fZ2V0X2xvY2F0aW9uLCBydHBfc2Vzc2lvbl9nZXRfdG9vbCwKLQkgIHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllLCBzZXNzaW9uX3JlcG9ydF9ibG9ja3MpOgotCSAgKiBnc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuYyAocnRwX3NvdXJjZV9wcm9jZXNzX3J0cCwKLQkgIHJ0cF9zb3VyY2Vfc2VuZF9ydHAsIHJ0cF9zb3VyY2VfcHJvY2Vzc19zciwgcnRwX3NvdXJjZV9wcm9jZXNzX3JiKToKLQkgIE1vcmUgZm9ybWF0IGFyZyBmaXhpbmcgKHNwb3R0ZWQgYnkgQWxpIFNhYmlsIDxhbGkuc2FiaWxAZ21haWwuY29tPikuCi0JICAqIGdzdC9zd2l0Y2gvTWFrZWZpbGUuYW06Ci0JICBBZGQgcmVxdWlyZSBsaWJyYXJpZXMoc3BvdHRlZCBieSBBbGkgU2FiaWwgPGFsaS5zYWJpbEBnbWFpbC5jb20+KS4KLQotMjAwNy0wNS0xMCAwMToyMToxOSArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICBSZXZlcnQgbGFzdCBjaGFuZ2UuCi0KLTIwMDctMDUtMDkgMjE6MzA6NTMgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L2xldmVsL2dzdGxldmVsLmM6IFVzZSBndWludDggKiBpbnN0ZWFkIG9mIGdwb2ludGVyIHRoZW4gdnM2IGtub3cgdGhlIHNpemUgb2YgZGF0YSBwb2ludGVkIHdoZW4gbW92aW5nIHRoZSBwb2ludGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX2NhbGN1bGF0ZV8jI1RZUEUpLAotCSAgKGdzdF9sZXZlbF90cmFuc2Zvcm1faXApOgotCSAgVXNlIGd1aW50OCAqIGluc3RlYWQgb2YgZ3BvaW50ZXIgdGhlbiB2czYga25vdyB0aGUgc2l6ZSBvZiBkYXRhCi0JICBwb2ludGVkIHdoZW4gbW92aW5nIHRoZSBwb2ludGVyLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYzogKGdzdF9ydHBfaDI2NF9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBNb3ZlIGluc3RydWN0aW9ucyBhZnRlciB2YXJpYWJsZXMgZGVjbGFyYXRpb24uCi0JICAqIHdpbjMyL3ZzNi9hdXRvZ2VuLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHJ0cC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RydHNwLmRzcDoKLQkgIFVwZGF0ZSB2czYgcHJvamVjdCBmaWxlcy4KLQotMjAwNy0wNS0wOSAxMToyMzozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvOiBBZGQgY29kZSB0byBwYXJzZSB0aW1lIHJhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X3J0c3BzcmNfc2VuZF9rZWVwX2FsaXZlKSwgKGdzdF9ydHNwc3JjX29wZW4pOgotCSAgKiBnc3QvcnRzcC9ydHNwcmFuZ2UuYzogKHBhcnNlX25wdF90aW1lKSwgKHBhcnNlX25wdF9yYW5nZSksCi0JICAocGFyc2VfY2xvY2tfcmFuZ2UpLCAocGFyc2Vfc21wdGVfcmFuZ2UpLCAocnRzcF9yYW5nZV9wYXJzZSksCi0JICAocnRzcF9yYW5nZV9mcmVlKToKLQkgICogZ3N0L3J0c3AvcnRzcHJhbmdlLmg6Ci0JICBBZGQgY29kZSB0byBwYXJzZSB0aW1lIHJhbmdlcy4KLQkgIFJlcG9ydCBEVVJBVElPTiBvbiB0aGUgc3RyZWFtIHdoZW4gcG9zc2libGUuCi0KLTIwMDctMDUtMDggMTU6NDk6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogRml4IHN0cmlkZXMgY2FsY3VsYXRpb24gZm9yIEFZVVYgKGl0J3MganVzdCB3aWR0aCo0KSAoIzQzNjkxMCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfYmxlbmRfYXl1dl9heXV2KSwKLQkgIChnc3RfdmlkZW9taXhlcl9maWxsX2NoZWNrZXIpLCAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jb2xvciksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfY29sbGVjdGVkKToKLQkgIEZpeCBzdHJpZGVzIGNhbGN1bGF0aW9uIGZvciBBWVVWIChpdCdzIGp1c3Qgd2lkdGgqNCkgKCM0MzY5MTApLgotCi0yMDA3LTA1LTA2IDIxOjMyOjQwICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogU3luYyB0aGUgR09iamVjdCBwcm9wZXJ0aWVzIGJlZm9yZSBlYWNoIHByb2Nlc3Npbmcgc3RlcCB0byBwcm9wZXJseSB3b3JrIHdpdGggdGhlIGNvbnRyb2xsZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmM6IChnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuYzogKGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmM6IChnc3RfYXVkaW9faW52ZXJ0X3RyYW5zZm9ybV9pcCk6Ci0JICBTeW5jIHRoZSBHT2JqZWN0IHByb3BlcnRpZXMgYmVmb3JlIGVhY2ggcHJvY2Vzc2luZyBzdGVwIHRvIHByb3Blcmx5Ci0JICB3b3JrIHdpdGggdGhlIGNvbnRyb2xsZXIuCi0KLTIwMDctMDUtMDQgMTU6MTc6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogTGV0IG1vcmUgZXJyb3Igc3RhdGUgdHJpY2tsZSBkb3duIHNvIHRoYXQgd2UgY2FuIGNhdGNoIG1vcmUgZXJyb3IgY2FzZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc2VuZF9rZWVwX2FsaXZlKSwKLQkgIChnc3RfcnRzcHNyY19sb29wX3VkcCksIChnc3RfcnRzcHNyY190cnlfc2VuZCksIChnc3RfcnRzcHNyY19zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19zZXR1cF9zdHJlYW1zKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCSAgKGdzdF9ydHNwc3JjX2Nsb3NlKSwgKGdzdF9ydHNwc3JjX3BsYXkpLCAoZ3N0X3J0c3BzcmNfcGF1c2UpLAotCSAgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBMZXQgbW9yZSBlcnJvciBzdGF0ZSB0cmlja2xlIGRvd24gc28gdGhhdCB3ZSBjYW4gY2F0Y2ggbW9yZSBlcnJvcgotCSAgY2FzZXMuCi0JICBIYW5kbGUga2VlcC1hbGl2ZSBhIGxpdHRsZSBzbWFydGVyIGJ5IHNlbGVjdGluZyBhIG1ldGhvZCB0aGUgc2VydmVyCi0JICBhY3R1YWxseSBzdXBwb3J0cy4KLQkgIEZpeCBhIHJhY2UgaW4gVURQIHN0cmVhbWluZyBzaHV0ZG93bi4KLQotMjAwNy0wNS0wNCAxMzowNDozMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBJZ25vcmUgZXJyb3JzIHdoZW4gdHJ5aW5nIHRvIHVzZSB0aGUga2VlcC1hbGl2ZSBtZXNzYWdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZW5kX2tlZXBfYWxpdmUpOgotCSAgSWdub3JlIGVycm9ycyB3aGVuIHRyeWluZyB0byB1c2UgdGhlIGtlZXAtYWxpdmUgbWVzc2FnZXMuCi0KLTIwMDctMDUtMDQgMTI6MzE6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogU2VuZCBSVENQIG1lc3NhZ2VzIGJhY2sgdG8gdGhlIHNlcnZlciBvdmVyIHRoZSBUQ1AgY29ubmVjdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9ydHNwc3JjX3NpbmtfY2hhaW4pLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfbWFuYWdlciksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2ZyZWVfdWRwKSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdGNwKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX21jYXN0KSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV91ZHBfc2luayksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpOgotCSAgU2VuZCBSVENQIG1lc3NhZ2VzIGJhY2sgdG8gdGhlIHNlcnZlciBvdmVyIHRoZSBUQ1AgY29ubmVjdGlvbi4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl93cml0ZSksCi0JICAocnRzcF9jb25uZWN0aW9uX3NlbmQpLCAocnRzcF9jb25uZWN0aW9uX3JlYWQpLCAocmVhZF9ib2R5KSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fcmVjZWl2ZSk6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmg6Ci0JICBGYWN0b3Igb3V0IGFuZCBleHBvc2UgbG93bGV2ZWwgX3dyaXRlIGFuZCBfcmVhZCBtZXRob2RzLgotCSAgSW1wbGVtZW50IHNlbmRpbmcgZGF0YSBtZXNzYWdlcyB0byB0aGUgc2VydmVyLgotCi0yMDA3LTA1LTAzIDE1OjU1OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiBGaXggdGltZXN0YW1wcyBvbiBvdXRnb2luZyBidWZmZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9xdWV1ZV9wYWRzKSwKLQkgIChnc3RfbXVsdGlwYXJ0X211eF9jb2xsZWN0ZWQpOgotCSAgRml4IHRpbWVzdGFtcHMgb24gb3V0Z29pbmcgYnVmZmVycy4KLQotMjAwNy0wNS0wMyAxNDozOTowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogRW1pdCBORVdTRUdNRU5UIGV2ZW50cyBiZWZvcmUgcHVzaGluZyB0aGUgZmlyc3QgYnVmZmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JICAoZ3N0X211bHRpcGFydF9tdXhfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9tdWx0aXBhcnRfbXV4X2NvbGxlY3RlZCksCi0JICAoZ3N0X211bHRpcGFydF9tdXhfY2hhbmdlX3N0YXRlKToKLQkgIEVtaXQgTkVXU0VHTUVOVCBldmVudHMgYmVmb3JlIHB1c2hpbmcgdGhlIGZpcnN0IGJ1ZmZlci4KLQotMjAwNy0wNS0wMyAxMzo0ODo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBSZWZhY3RvciB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2ZpbmFsaXplKSwKLQkgIChnc3RfcnRzcHNyY19hbGxvY191ZHBfcG9ydHMpLCAoZ3N0X3J0c3BzcmNfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tYW5hZ2VyKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fZnJlZV91ZHApLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90Y3ApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfbWNhc3QpLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcF9zaW5rKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksIChnc3RfcnRzcHNyY19wdXNoX2V2ZW50KSwKLQkgIChnc3RfcnRzcHNyY19sb29wX3VkcCksIChnc3RfcnRzcHNyY19vcGVuKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9ydHBpbmZvKSwgKGdzdF9ydHNwc3JjX3BsYXkpLAotCSAgKGdzdF9ydHNwc3JjX3BhdXNlKToKLQkgIFJlZmFjdG9yIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGNvZGUuCi0JICBDcmVhdGUgaW50ZXJuYWwgcGFkcyBmb3IgVENQIHRyYW5zcG9ydCBzbyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgZXZlbnRzCi0JICBhbmQgcXVlcmllcy4KLQkgIEhhbmRsZSBldmVudHMgYW5kIHF1ZXJpZXMuCi0JICBQYXJzZSByYW5nZSBmcm9tIHRoZSBTRFAuCi0JICBGaXggcmFjZSBpbiBwYXVzZSBoYW5kbGVyIHdoZXJlIHRoZSBjb25uZWN0aW9uIGNvdWxkIHN0aWxsIGJlIGZsdXNoaW5nLgotCi0yMDA3LTA1LTAyIDE5OjMyOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IEZpeCByYWNlIHdoZW4gbXVsdGlwbGUgdWRwIHNvdXJjZXMgcG9zdCB0aW1lb3V0cywganVzdCBhY3Qgb24gdGhlIGZpcnN0IHJlY2VpdmVkIHRpbWVvdXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfZmluYWxpemUpLCAobmV3X3Nlc3Npb25fcGFkKSwgKHJlcXVlc3RfcHRfbWFwKSwKLQkgIChnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kKSwgKGdzdF9ydHNwc3JjX3RyeV9zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19zZW5kKSwgKGdzdF9ydHNwc3JjX2FzeW5jX29wZW4pLCAoZ3N0X3J0c3BzcmNfY2xvc2UpLAotCSAgKGdzdF9ydHNwc3JjX3BsYXkpLCAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpLAotCSAgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEZpeCByYWNlIHdoZW4gbXVsdGlwbGUgdWRwIHNvdXJjZXMgcG9zdCB0aW1lb3V0cywganVzdCBhY3Qgb24gdGhlIGZpcnN0Ci0JICByZWNlaXZlZCB0aW1lb3V0LgotCSAgUHJvdGVjdCBzdHJlYW0gbGlzdCB3aXRoIGEgcmVjdXJzaXZlIGxvY2sgdG8gZml4IHNvbWUgcmFjZXMuCi0JICBGbHVzaCBjb25uZWN0aW9uIHdoZW4gd2UgbmVlZCB0byBkbyBhIHJlY29ubmVjdCBvciBzdG9wLgotCSAgTWFrZSBzdGF0ZSBsb2NrIHJlY3Vyc2l2ZS4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jb25uZWN0KSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fY2xvc2UpOgotCSAgU29tZSBzbWFsbCBjbGVhbnVwcy4KLQotMjAwNy0wNS0wMiAxODozMToxNiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrLmM6IENhbGwgYmluZHRleHRkb21haW4oKSB0byBnZXQgbG9jYWxpemVkIHN0cmluZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFjay5jOiAocGx1Z2luX2luaXQpOgotCSAgQ2FsbCBiaW5kdGV4dGRvbWFpbigpIHRvIGdldCBsb2NhbGl6ZWQgc3RyaW5ncy4KLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2NoYWluKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3B1c2hfYnVmZmVyKSwgKGdzdF93YXZwYWNrX3BhcnNlX2NoYWluKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmg6Ci0JICBIYW5kbGUgRElTQ09OVCBidWZmZXJzIGJ5IGNvcnJlY3RseSBzZXR0aW5nIHRoZSBESVNDT05UIGZsYWcKLQkgIG9uIG91dGdvaW5nIGJ1ZmZlcnMgd2hlbiBuZWNlc3NhcnkuCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQpCi0JICBTZW5kIG5ld3NlZ21lbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLQotMjAwNy0wNS0wMiAxODoyNTowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IE9ubHkgc2V0IERJU0NPTlQgd2hlbiB0aGVyZSBhY3R1YWxseSBpcyBhIGRpc2NvbnQgb3Igd2hlbiB3ZSBqdXN0IHN0YXJ0ZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKToKLQkgIE9ubHkgc2V0IERJU0NPTlQgd2hlbiB0aGVyZSBhY3R1YWxseSBpcyBhIGRpc2NvbnQgb3Igd2hlbiB3ZSBqdXN0Ci0JICBzdGFydGVkLgotCi0yMDA3LTA1LTAyIDE4OjAxOjUyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWMuYzogQ2FsbCBiaW5kdGV4dGRvbWFpbigpIHRvIGdldCBsb2NhbGl6ZWQgc3RyaW5ncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjLmM6IChwbHVnaW5faW5pdCk6Ci0JICBDYWxsIGJpbmR0ZXh0ZG9tYWluKCkgdG8gZ2V0IGxvY2FsaXplZCBzdHJpbmdzLgotCi0yMDA3LTA1LTAyIDE3OjE5OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuKjogQmUgYSBiaXQgbW9yZSBjbGV2ZXIgd2hlbiBkZWFsaW5nIHdpdGggVkJSIGZpbGVzIHdpdGggRkFDVCB0YWdzLCB3ZSBkb24ndCB3YW50IHRvIHRpbWVzdGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksIChnc3Rfd2F2cGFyc2VfYWRkX3NyY19wYWQpLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSAgQmUgYSBiaXQgbW9yZSBjbGV2ZXIgd2hlbiBkZWFsaW5nIHdpdGggVkJSIGZpbGVzIHdpdGggRkFDVCB0YWdzLCB3ZQotCSAgZG9uJ3Qgd2FudCB0byB0aW1lc3RhbXAgYnVmZmVycyBpbiB0aGF0IGNhc2UgYnV0IHRoZSBlc3RpbWF0ZWQgQlBTIGNhbgotCSAgYmUgdXNlZCBmb3Igc2Vla2luZy4KLQkgIE9ubHkgc2VuZCBjbG9zZSBzZWdtZW50IGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgotCi0yMDA3LTA1LTAyIDE3OjA4OjA5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogQ29ycmVjdGx5IHBvc3QgYW4gZXJyb3Igb24gdGhlIGJ1cyBpZiBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgbG9vcCBmdW5jdGlvbi4gVGhpcyBmaXhlcyBhIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19sb29wKToKLQkgIENvcnJlY3RseSBwb3N0IGFuIGVycm9yIG9uIHRoZSBidXMgaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIGxvb3AKLQkgIGZ1bmN0aW9uLiBUaGlzIGZpeGVzIGEgZmV3IGNhc2VzIHdoZXJlIHRoZSB0YXNrIHdhcyBwYXVzZWQgYW5kIG5vdGhpbmcKLQkgIGhhcHBlbmVkIGFueW1vcmUuCi0KLTIwMDctMDUtMDIgMTY6NTg6MDYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IFJlbW92ZSBvbGQgd29ya2Fyb3VuZCB0aGF0IHdhcyBuZWVkZWQgd2hlbiBzZWVraW5nIGFmdGVyIHRoZSBsYXN0IHNhbXBsZS4gV2l0aCB0aGUgZml4Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQpOgotCSAgUmVtb3ZlIG9sZCB3b3JrYXJvdW5kIHRoYXQgd2FzIG5lZWRlZCB3aGVuIHNlZWtpbmcgYWZ0ZXIgdGhlIGxhc3QKLQkgIHNhbXBsZS4gV2l0aCB0aGUgZml4ZWQgZXJyb3IgaGFuZGxpbmcgdGhpcyB3b3JrcyBub3cgYXMgZXhwZWN0ZWQKLQkgIHdpdGhvdXQgcHVzaGluZyB0aGUgbGFzdCBzYW1wbGUgYWx0aG91Z2ggaXQgd2Fzbid0IHJlcXVlc3RlZC4KLQotMjAwNy0wNS0wMiAxNjo0NTo0MyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogSGFuZGxlIHNlZ21lbnQgc2Vla3MgaW4gdGhlIHNlZWsgZXZlbnQgaGFuZGxlciwgY29ycmVjdGx5IHdvcmsgd2l0aCBzdG9wIHBvc2l0aW9uID09IC0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9oYW5kbGVfc2Vla19ldmVudCk6Ci0JICBIYW5kbGUgc2VnbWVudCBzZWVrcyBpbiB0aGUgc2VlayBldmVudCBoYW5kbGVyLCBjb3JyZWN0bHkgd29yayB3aXRoCi0JICBzdG9wIHBvc2l0aW9uID09IC0xIGFuZCBpbnN0ZWFkIG9mIHN0b3BwaW5nIHRoZSB0YXNrIG9uIHNlZWsganVzdAotCSAgcGF1c2UgaXQuCi0KLTIwMDctMDUtMDIgMTY6MTk6NTggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IEFkZCBoYW5kbGluZyBmb3Igc2VnbWVudCBzZWVrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX2xvb3ApOgotCSAgQWRkIGhhbmRsaW5nIGZvciBzZWdtZW50IHNlZWtzLgotCi0yMDA3LTA1LTAyIDE1OjEzOjA0ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiBDb3JyZWN0bHkgaGFuZGxlIGVycm9ycywgZXNwZWNpYWxseSBpbiB0aGUgbG9vcCBmdW5jdGlvbi4gQmVmb3JlIGl0IHdhcyBlYXN5IHRvIGdldCB0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfcHVsbF9idWZmZXIpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NyZWF0ZV9zcmNfcGFkKSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9yZXN5bmNfbG9vcCksIChnc3Rfd2F2cGFja19wYXJzZV9sb29wKSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9jaGFpbik6Ci0JICBDb3JyZWN0bHkgaGFuZGxlIGVycm9ycywgZXNwZWNpYWxseSBpbiB0aGUgbG9vcCBmdW5jdGlvbi4gQmVmb3JlIGl0Ci0JICB3YXMgZWFzeSB0byBnZXQgdGhlIHRhc2sgcGF1c2VkIGJ1dCBubyBlcnJvciBiZWluZyBwb3N0ZWQgb24gdGhlIGJ1cy4KLQotMjAwNy0wNS0wMiAxNDoyNzoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvdGVzdC5jOiBGaXggY29tcGlsYXRpb24gb2YgZGVwcmVjYXRlZCB0ZXN0IGp1c3QgYmVjYXVzZSBJJ20gdG9vIGxhenkgdG8gZGVsZXRlIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL3Rlc3QuYzogKG1haW4pOgotCSAgRml4IGNvbXBpbGF0aW9uIG9mIGRlcHJlY2F0ZWQgdGVzdCBqdXN0IGJlY2F1c2UgSSdtIHRvbyBsYXp5IHRvIGRlbGV0ZQotCSAgaXQuCi0KLTIwMDctMDUtMDIgMTM6MzI6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuKjogRml4IHNlbmRpbmcgUlRDUCB0byB0aGUgcmlnaHQgcGxhY2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfZmluYWxpemUpLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLAotCSAgKGdzdF9ydHNwc3JjX2hhbmRsZV9yZXF1ZXN0KSwgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLAotCSAgKGdzdF9ydHNwc3JjX3NlbmRfa2VlcF9hbGl2ZSksIChnc3RfcnRzcHNyY19sb29wX3VkcCksCi0JICAoZ3N0X3J0c3BzcmNfbG9vcF9zZW5kX2NtZCksIChnc3RfcnRzcHNyY190cnlfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfb3BlbiksIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEZpeCBzZW5kaW5nIFJUQ1AgdG8gdGhlIHJpZ2h0IHBsYWNlLgotCSAgRml4IGJ1ZyBpbiByZWZmaW5nIHRoZSB3cm9uZyBVRFAgZWxlbWVudC4KLQkgIFVzZSBuZXcgcGFkIG5hbWVzIGZvciB0aGUgc2Vzc2lvbiBtYW5hZ2VyLgotCSAgSW1wbGVtZW50IGhhbmRsaW5nIHNlcnZlciByZXF1ZXN0cyBpbiBpbnRlcmxlYXZlZCBhbmQgVURQIG1vZGVzLgotCSAgSGFuZGxlIHNlc3Npb24ga2VlcC1hbGl2ZSBpbiBVRFAgbW9kZXMuCi0JICBSZW1vdmUgR0NvbmQgZm9yIGhhbmRsaW5nIFVEUCB0aW1lb3V0cy4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jb25uZWN0KSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fc2VuZCksIChydHNwX2Nvbm5lY3Rpb25fcmVhZCksIChyZWFkX2JvZHkpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKSwgKHJ0c3BfY29ubmVjdGlvbl9jbG9zZSk6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmg6Ci0JICBTdG9yZSBjb25uZWN0aW9uIElQIGFkZHJlc3MgZm9yIGxhdGVyLgotCSAgQWRkIHRpbWVvdXQgYXJncyB0byBhbGwgb3BlcmF0aW9ucyB0aGF0IG1pZ2h0IGJsb2NrIGZvcmV2ZXIuCi0JICBQYXJzZSBzZXNzaW9uIHRpbWVvdXQuCi0JICBPbmx5IGNsb3NlIHNvY2tldHMgd2hlbiBub3QgYWxyZWFkeSBjbG9zZWQuCi0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmM6Ci0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JICBBZGQgdGltZW91dCByZXR1cm4gdmFsdWUgYW5kIGVycm9yIHN0cmluZy4KLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuYzogKHJ0c3BfbWVzc2FnZV9pbml0X3Jlc3BvbnNlKToKLQkgIEFkZCBzbWFsbCBjb21tZW50LgotCi0yMDA3LTA1LTAxIDE2OjEzOjU4ICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS4qOiBIYW5kbGUgTkVXU0VHTUVOVCBhbmQgRkxVU0ggZXZlbnRzLiBGaXhlcyAjNDM0ODI0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IChnc3RfcnRwX21wNHZfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXA0dl9wYXlfZW1wdHkpLCAoZ3N0X3J0cF9tcDR2X3BheV9ldmVudCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSAgSGFuZGxlIE5FV1NFR01FTlQgYW5kIEZMVVNIIGV2ZW50cy4gRml4ZXMgIzQzNDgyNC4KLQotMjAwNy0wNC0zMCAxMToxNTo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6IFJlbW92ZSB2NGwyc3JjIGZyb20gZG9jcywgc2luY2UgaXQgYnJlYWtzIHRoZSBkb2NzIGJ1aWxkLCBhbmQgdGhlIHBsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICBSZW1vdmUgdjRsMnNyYyBmcm9tIGRvY3MsIHNpbmNlIGl0IGJyZWFrcyB0aGUgZG9jcyBidWlsZCwgYW5kIHRoZQotCSAgcGx1Z2luIGlzIG9ubHkgYnVpbHQgaWYgLS1lbmFibGUtZXhwZXJpbWVudGFsIGlzIHVzZWQgYW55d2F5LgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBTcGFjZXMgPT4gdGFiLgotCi0yMDA3LTA0LTI5IDE0OjQzOjM3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiBBZGQgY29kZSB0byBkcm9wIG1lbWJlcnNoaXAgb2YgYSBtdWx0aWNhc3QgZ3JvdXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGxlYXZlX211bHRpY2FzdCksCi0JICAoZ3N0X211bHRpdWRwc2lua19hZGQpLCAoZ3N0X211bHRpdWRwc2lua19yZW1vdmUpOgotCSAgQWRkIGNvZGUgdG8gZHJvcCBtZW1iZXJzaGlwIG9mIGEgbXVsdGljYXN0IGdyb3VwLgotCSAgKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX3VwZGF0ZV91cmkpLAotCSAgKGdzdF91ZHBzaW5rX3NldF91cmkpOgotCSAgSW1wbGVtZW50IFVSSSBoYW5kbGVyLgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyk6Ci0JICBVc2UgVVJJIGhhbmRsZXIgdG8gbWFrZSB1ZHBzaW5rIGluc3RhY2UuCi0JICBJbXByb3ZlIGNvZGUgdG8gY29uZmlndXJlIHBvcnQgYW5kIGRlc3RpbmF0aW9uLgotCi0yMDA3LTA0LTI5IDEzOjU2OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIDgwIGNoYXIgcG9saWNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDgwIGNoYXIgcG9saWNlCi0KLTIwMDctMDQtMjkgMTM6NTM6MTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBhdXRvZ2VuLnNoOiBSZXF1aXJlIGF1dG9tYWtlIDEuNwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGF1dG9nZW4uc2g6Ci0JICBSZXF1aXJlIGF1dG9tYWtlIDEuNwotCSAgKiBleHQvYWxzYXNwZGlmL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZGl2eC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2l2b3JiaXMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9tdXNpY2JyYWluei9NYWtlZmlsZS5hbToKLQkgICogZXh0L25lb24vTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zZGwvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zd2ZkZWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90aGVvcmEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSAgKiBleHQveHZpZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21vZHBsdWcvTWFrZWZpbGUuYW06Ci0JICBGaXggdXAgTWFrZWZpbGUuYW0gYWNjb3JkaW5nbHkuCi0KLTIwMDctMDQtMjkgMTM6NDk6MDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBkb2NzL3BsdWdpbnMvaW5zcGVjdC86IEFkZCBqYWNrIGFuZCB1cGRhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsc2FzcGRpZi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1iejIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2R4YXBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRmYnZpZGVvc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mYWFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZhYWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmlsdGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZyZWV6ZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nbGltYWdlc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nc20ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taDI2NHBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbW1zLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vZHBsdWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVzZXBhY2sueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVzaWNicmFpbnoueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmVvbi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uc2ZkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZGwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291bmR0b3VjaC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVjdHJ1bS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVlZC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10dGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGluZ2hlYWRlci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14dmlkLnhtbDoKLQkgIEFkZCBqYWNrIGFuZCB1cGRhdGUuCi0KLTIwMDctMDQtMjkgMTI6MTk6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IEZpeCBtdWx0aWNhc3QgZGV0ZWN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2FkZCk6Ci0JICBGaXggbXVsdGljYXN0IGRldGVjdGlvbi4KLQkgIERvbid0IHRyeSB0byBqb2luIGEgbXVsdGljYXN0IGdyb3VwIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCBtdWx0aWNhc3QuCi0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX3VwZGF0ZV91cmkpOgotCSAgU21hbGwgZGVidWcgaW1wcm92ZW1lbnQuCi0KLTIwMDctMDQtMjcgMTY6NDQ6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogSWdub3JlIEFTWU5DIHN0YXRlIG1lc3NhZ2VzIGZyb20gdGhlIHVkcHNpbmssIGl0J3MgaXJyZWxldmFudCBmb3IgdGhlIHBhcmVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyksIChnc3RfcnRzcHNyY19wbGF5KSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSk6Ci0JICBJZ25vcmUgQVNZTkMgc3RhdGUgbWVzc2FnZXMgZnJvbSB0aGUgdWRwc2luaywgaXQncyBpcnJlbGV2YW50IGZvciB0aGUKLQkgIHBhcmVudC4KLQotMjAwNy0wNC0yNyAxNTozMDozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuaDogRml4IG1vZGUgcHJvcGVydHkgd2hlbiBzcGVjaWZpZWQgYXMgYW4gYXJnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5Lmg6Ci0JICBGaXggbW9kZSBwcm9wZXJ0eSB3aGVuIHNwZWNpZmllZCBhcyBhbiBhcmcuCi0KLTIwMDctMDQtMjYgMTU6MDg6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEFkZCBkb2N1bWVudGF0aW9uIGZvciBvc3hhdWRpbyBwbHVnaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zeGF1ZGlvLnhtbDoKLQkgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBvc3hhdWRpbyBwbHVnaW4uCi0KLTIwMDctMDQtMjYgMTQ6MzE6MzIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEFkZCBkb2N1bWVudGF0aW9uIGZvciBvc3h2aWRlbwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3h2aWRlby54bWw6Ci0JICBBZGQgZG9jdW1lbnRhdGlvbiBmb3Igb3N4dmlkZW8KLQotMjAwNy0wNC0yNiAxMDowODoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBQcm90ZWN0IHN0YXRlIGNoYW5nZXMgd2l0aCBhIGxvY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfZmluYWxpemUpLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLAotCSAgKGdzdF9ydHNwc3JjX29wZW4pLCAoZ3N0X3J0c3BzcmNfY2xvc2UpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX3J0cGluZm8pLCAoZ3N0X3J0c3BzcmNfcGxheSksCi0JICAoZ3N0X3J0c3BzcmNfcGF1c2UpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBQcm90ZWN0IHN0YXRlIGNoYW5nZXMgd2l0aCBhIGxvY2suCi0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fY3JlYXRlKSwKLQkgIChwYXJzZV9saW5lKToKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uaDoKLQkgIFJlbW92ZSBzb21lIHVudXNlZCBzdHVmZi4KLQotMjAwNy0wNC0yNiAwODo0ODozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBleGFjdGx5IDAgYnl0ZXMgdG8gcmVhZCBhbmQgdGhlIGlvY3RsIGRpZCBub3QgcmVwb3J0IGFuIGVycm9yLiBGLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY3JlYXRlKToKLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgZXhhY3RseSAwIGJ5dGVzIHRvIHJlYWQgYW5kIHRoZSBpb2N0bAotCSAgZGlkIG5vdCByZXBvcnQgYW4gZXJyb3IuIEZpeGVzICM0MzM1MzAuCi0KLTIwMDctMDQtMjYgMDg6Mzk6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS4qOiBBcHBseSBESVNDT05UIHRvIGJ1ZmZlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JICBBcHBseSBESVNDT05UIHRvIGJ1ZmZlcnMuCi0JICBPbmx5IGFwcGx5IHRpbWVzdGFtcCB0byB0aGUgZmlyc3Qgc2FtcGxlIGFmdGVyIGEgRElTQ09OVCwgdG9vIG1hbnkgVkJSCi0JICBmaWxlcyBjYXVzZSByYW5kb20gaml0dGVyIGluIHRoZSB0aW1lc3RhbXBzLiBGaXhlcyAjNDMzMTE5LgotCi0yMDA3LTA0LTI1IDE1OjU1OjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHBkZWMuKjogQWRkIGR1bW15IGxhdGVuY3kgcHJvcGVydHkgdG8gYmUgYmFja3dhcmRzIGNvbXBhdCB3aXRoIHJ0cGJpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHBkZWMuYzogKGdzdF9ydHBfZGVjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfZGVjX2luaXQpLCAoZ3N0X3J0cF9kZWNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2RlY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRzcC9nc3RydHBkZWMuaDoKLQkgIEFkZCBkdW1teSBsYXRlbmN5IHByb3BlcnR5IHRvIGJlIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBydHBiaW4uCi0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHNwc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfcnRzcHNyY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9ydHBpbmZvKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgQWRkIGxhdGVuY3kgcHJvcGVydHkgYW5kIGNvbmZpZ3VyZSBpbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyLgotCSAgRG9uJ3Qgc2V0IGludmFsaWQgY2xvY2stYmFzZSBhbmQgc2VxbnVtLWJhc2Ugb24gY2Fwcywgc29tZSBzZXJ2ZXJzCi0JICBzb21ldGltZXMgZG9uJ3Qgc2VuZCB0aGVtLgotCi0yMDA3LTA0LTI1IDE1OjMxOjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiBEb3VibGUtY2hlY2sgdGhhdCBSR0IgaW5wdXQgY2FwcyBhcmUgcmVhbGx5IFJHQkEgY2FwcyAoYXBwYXJlbnRseSB0aGUgY29yZSBkb2Vzbid0IGFsd2F5cyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiAoZ3N0X2FscGhhX2NvbG9yX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzKSwgKGdzdF9hbHBoYV9jb2xvcl9zZXRfY2Fwcyk6Ci0JICBEb3VibGUtY2hlY2sgdGhhdCBSR0IgaW5wdXQgY2FwcyBhcmUgcmVhbGx5IFJHQkEgY2FwcyAoYXBwYXJlbnRseQotCSAgdGhlIGNvcmUgZG9lc24ndCBhbHdheXMgY2F0Y2ggaXQgaWYgdGhvc2UgY2FwcyBhcmVuJ3QgYSBzdWJzZXQgb2YKLQkgIG91ciB0ZW1wbGF0ZSBjYXBzLCBhbHNvIHNlZSAjNDIxNTQzKS4gRml4ZXMgIzQyOTMxOSBpbiBhIHdheS4KLQkgIEFsc28sIGRvbid0IGxlYWsgdGhlIHBhZCB0ZW1wbGF0ZSBpbiB0aGUgdHJhbnNmb3JtX2NhcHMgZnVuY3Rpb24uCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hbHBoYWNvbG9yLmM6IChzZXR1cF9hbHBoYWNvbG9yKSwKLQkgIChjbGVhbnVwX2FscGhhY29sb3IpLCAoY3JlYXRlX2NhcHNfcmdiMjQpLCAoY3JlYXRlX2NhcHNfcmdiYTMyKSwKLQkgIChjcmVhdGVfYnVmZmVyX3JnYjI0XzN4NCksIChjcmVhdGVfYnVmZmVyX3JnYmEzMl8zeDQpLAotCSAgKEdTVF9TVEFSVF9URVNUKSwgKGFscGhhY29sb3Jfc3VpdGUpOgotCSAgQWRkIHNvbWUgYmFzaWMgdW5pdCB0ZXN0cyBmb3IgYWxwaGFjb2xvci4KLQotMjAwNy0wNC0yNSAxNTowODoyMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogSWYgd2UgZ2V0IGEgZmF0YWwgZmxvdyByZXR1cm4gaW4gdGhlIGxvb3AgZnVuY3Rpb24sIGZpcnN0IHBvc3QgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIG9ubHkgdGhlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfdGFzayk6Ci0JICBJZiB3ZSBnZXQgYSBmYXRhbCBmbG93IHJldHVybiBpbiB0aGUgbG9vcCBmdW5jdGlvbiwgZmlyc3QgcG9zdCB0aGUKLQkgIGVycm9yIG1lc3NhZ2UgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBFT1MgZXZlbnQgZG93bnN0cmVhbSwgb3RoZXJ3aXNlCi0JICBhcHBsaWNhdGlvbnMgbWlnaHQgZ2V0IGFuIGVvcyBtZXNzYWdlIGJlZm9yZSB0aGUgZXJyb3IgbWVzc2FnZSBhbmQKLQkgIHRoaW5rIGV2ZXJ5dGhpbmcgd2FzIG9rIChyZWxhdGVkIHRvICM0MjkzMTkpLgotCi0yMDA3LTA0LTI1IDEwOjA3OjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiBSZWFkIHRoZSBjaGFubmVsIGJ5dGUgYXMgYW4gdW5zaWduZWQgYnl0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX3JlY2VpdmUpOgotCSAgUmVhZCB0aGUgY2hhbm5lbCBieXRlIGFzIGFuIHVuc2lnbmVkIGJ5dGUuCi0KLTIwMDctMDQtMjUgMDk6NDc6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBNYWtlIHN1cmUgd2UgY29uZmlndXJlIHRoZSBjbG9ja19yYXRlIGluIHRoZSBiYXNlY2xhc3MgaW4gdGhlIHNldGNhcHMgZnVuY3Rpb24uIEZpeGVzICM0MzEyODIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOiAoZ3N0X3J0cF9MMTZfZGVwYXlfc2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOiAoZ3N0X3J0cF9hbXJfZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9hbXJfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX2Ftcl9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOiAoZ3N0X3J0cF9nc21fZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9nc21fZGVwYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOiAoZ3N0X3J0cF9oMjYzcF9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzogKGdzdF9ydHBfaDI2NF9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzogKGdzdF9ydHBfaWxiY19kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2lsYmNfZGVwYXlfaW5pdCksIChnc3RfcnRwX2lsYmNfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9pbGJjX2RlcGF5X3Byb2Nlc3MpLCAoZ3N0X2lsYmNfZGVwYXlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWxiY19kZXBheV9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOiAoZ3N0X3J0cF9tcDJ0X2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOiAoZ3N0X3J0cF9wY21hX2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfcGNtYV9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzogKGdzdF9ydHBfcGNtdV9kZXBheV9pbml0KSwKLQkgIChnc3RfcnRwX3BjbXVfZGVwYXlfc2V0Y2Fwcyk6Ci0JICBNYWtlIHN1cmUgd2UgY29uZmlndXJlIHRoZSBjbG9ja19yYXRlIGluIHRoZSBiYXNlY2xhc3MgaW4gdGhlIHNldGNhcHMKLQkgIGZ1bmN0aW9uLiBGaXhlcyAjNDMxMjgyLgotCi0yMDA3LTA0LTI1IDA4OjM2OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IFBhcnNlIHNlcnZlciBhZGRyZXNzIGZyb20gU0RQLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2ZpbmFsaXplKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fZnJlZSksIChyZXF1ZXN0X3B0X21hcCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLCAoZ3N0X3J0c3BzcmNfb3Blbik6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIFBhcnNlIHNlcnZlciBhZGRyZXNzIGZyb20gU0RQLgotCSAgSG9vayB1cCBhIHVkcHNpbmsgdG8gc2VuZCBSVENQIGJhY2sgdG8gdGhlIHNlcnZlci4KLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuaDoKLQkgIEFkZCBzb21lIGRvY3MuCi0KLTIwMDctMDQtMjUgMDY6NTI6MDkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IE1ha2UgaGVhZGVyIGZpZWxkIGNoZWNrIGNvbmRpdGlvbmFsLiBGaXhlcyAjNDMzMTM1Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOgotCSAgTWFrZSBoZWFkZXIgZmllbGQgY2hlY2sgY29uZGl0aW9uYWwuIEZpeGVzICM0MzMxMzUKLQotMjAwNy0wNC0yNCAwOToxMjo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIG1pbmltYWwgZG9jcyBibHVyYiB0byBhbHBoYWNvbG9yOyBzcGxpdCBvdXQgaGVhZGVycyBpbnRvIHNlcGFyYXRlIGhlYWRlciBmaWxlIGZvciBndGstZG9jLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JICAqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgICogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuaDoKLQkgIEFkZCBtaW5pbWFsIGRvY3MgYmx1cmIgdG8gYWxwaGFjb2xvcjsgc3BsaXQgb3V0IGhlYWRlcnMgaW50bwotCSAgc2VwYXJhdGUgaGVhZGVyIGZpbGUgZm9yIGd0ay1kb2MuCi0KLTIwMDctMDQtMjAgMTc6MjU6NTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5jOiBEb24ndCB0cnkgdG8gcG9zdCBOVUxMIG1lc3NhZ2UgKGluIGNhc2Ugd2UgY2FuJ3QgcXVlcnkgdXBzdHJlYW0gcG9zaXRpb24gb3IgZHVyYXRpb24pLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5jOiAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9yZXBvcnQpOgotCSAgRG9uJ3QgdHJ5IHRvIHBvc3QgTlVMTCBtZXNzYWdlIChpbiBjYXNlIHdlIGNhbid0IHF1ZXJ5IHVwc3RyZWFtCi0JICBwb3NpdGlvbiBvciBkdXJhdGlvbikuCi0KLTIwMDctMDQtMTggMTI6MzY6MzcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2N1dHRlci9nc3RjdXR0ZXIuKjogRml4IHNvbWUgb2YgdGhlIG1vc3Qgb2J2aW91cyBidWdzIGluIGN1dHRlci4gTm93IGRvZXNuJ3QgbGVhayBldmVyeXRoaW5nIGlmIGlucHV0IGlzIHNpbGVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOiAoZ3N0X2N1dHRlcl9pbml0KSwgKGdzdF9jdXR0ZXJfY2hhaW4pLAotCSAgKGdzdF9jdXR0ZXJfZ2V0X2NhcHMpOgotCSAgKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5oOgotCSAgRml4IHNvbWUgb2YgdGhlIG1vc3Qgb2J2aW91cyBidWdzIGluIGN1dHRlci4gTm93IGRvZXNuJ3QgbGVhawotCSAgZXZlcnl0aGluZyBpZiBpbnB1dCBpcyBzaWxlbnQuCi0KLTIwMDctMDQtMTggMDk6NDg6MjUgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3dhdmVuYy9nc3R3YXZlbmMuKjogZXZlcnl0aGluZyBlbHNlIHJlc3VsdHMgaW4gYSBpbnZhbGlkIGJsb2NrIGFsaWduIGFuZCBpbnZhbGlkIGZpbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX2NyZWF0ZV9oZWFkZXJfYnVmKSwKLQkgIChnc3Rfd2F2ZW5jX3Npbmtfc2V0Y2FwcyksIChnc3Rfd2F2ZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmg6Ci0JICBXYXYgYXBwYXJlbnRseSBvbmx5IHN1cHBvcnRzIHdpZHRoPT1HU1RfUk9VTkRfVVAoZGVwdGgpLCBldmVyeXRoaW5nCi0JICBlbHNlIHJlc3VsdHMgaW4gYSBpbnZhbGlkIGJsb2NrIGFsaWduIGFuZCBpbnZhbGlkIGZpbGVzLgotCi0yMDA3LTA0LTE3IDE2OjM5OjAyICswMDAwICBTbmFpayA8c25haWszMkBnbWFpbC5jb20+Ci0KLQkgIGdzdC9zbXB0ZS9iYXJib3h3aXBlcy5jOiBBZGQgbWlzc2luZyBicmVhayBzdGF0ZW1lbnQgZm9yIEJPWF9IT1JJWk9OVEFMIGNhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTbmFpayA8c25haWszMiBnbWFpbCBjb20+Ci0JICAqIGdzdC9zbXB0ZS9iYXJib3h3aXBlcy5jOiAoZ3N0X3dpcGVfYm94ZXNfZHJhdyk6Ci0JICBBZGQgbWlzc2luZyBicmVhayBzdGF0ZW1lbnQgZm9yIEJPWF9IT1JJWk9OVEFMIGNhc2UuCi0KLTIwMDctMDQtMTcgMTA6MTQ6NDMgKzAwMDAgIFZpbmNlbnQgVG9ycmkgPHZ0b3JyaUB1bml2LWV2cnkuZnI+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBVc2UgY29ycmVjdCBmb3JtYXQgc3RyaW5ncyBmb3IgaW50ZWdlciB0eXBlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFZpbmNlbnQgVG9ycmkgPHZ0b3JyaSBhdCB1bml2LWV2cnkgZG90IGZyPgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyk6Ci0JICBVc2UgY29ycmVjdCBmb3JtYXQgc3RyaW5ncyBmb3IgaW50ZWdlciB0eXBlcy4KLQotMjAwNy0wNC0xNyAwMjo1MTowMiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogVXNlIGdzdF9yaWZmX2NyZWF0ZV9hdWRpb190ZW1wbGF0ZV9jYXBzICgpIGluc3RlYWQgb2YgdGhlIGxvY2FsIGNhcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCk6Ci0JICBVc2UgZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX3RlbXBsYXRlX2NhcHMgKCkgaW5zdGVhZCBvZiB0aGUgbG9jYWwgY2Fwcy4KLQkgIFRoaXMgbWFrZXMgdXBkYXRlcyBvZiB0aGUgbG9jYWwgY2FwcyB1bmVjZXNzYXJ5IHdoZW5ldmVyIGxpYmdzdHJpZmYKLQkgIGdldHMgc3VwcG9ydCBmb3IgbmV3IGZvcm1hdHMuCi0KLTIwMDctMDQtMTYgMjE6Mjk6NDAgKzAwMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvLzogRml4IGFuZC9vciB1cGRhdGUgY29weXJpZ2h0IGF0dHJpYnV0aW9ucyAoIzQzMDIyOCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCcmlhbiBDYW1lcm9uICA8YnJpYW4uY2FtZXJvbiBhdCBzdW4gZG90IGNvbT4KLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmg6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuaDoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuaDoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5oOgotCSAgRml4IGFuZC9vciB1cGRhdGUgY29weXJpZ2h0IGF0dHJpYnV0aW9ucyAoIzQzMDIyOCkuCi0KLTIwMDctMDQtMTQgMTc6MTg6MTQgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvOiBBZGQgeG1sIGRvYyBmaWxlcyBmb3IgV2luZG93cyBzaW5rcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kaXJlY3RkcmF3LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRpcmVjdHNvdW5kLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVmb3JtLnhtbDoKLQkgIEFkZCB4bWwgZG9jIGZpbGVzIGZvciBXaW5kb3dzIHNpbmtzCi0JICAqIHdpbjMyL3ZzNi9saWJnc3RxdGRlbXV4LmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdG1wZWd2aWRlb3BhcnNlLmRzcDoKLQkgICogd2luMzIvdnM2L2dzdF9wbHVnaW5zX2JhZC5kc3c6Ci0JICBVcGRhdGUgcHJvamVjdHMgZmlsZXMuCi0KLTIwMDctMDQtMTMgMDk6MzI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OiBGaXggZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIEZpeCBkb2NzLgotCSAgKiBnc3QvcnRzcC9VUkxTOgotCSAgQWRkIHNvbWUgbW9yZSBleGFtcGxlIHVybHMuCi0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cF9kZWNfbWFyc2hhbF9CT1hFRF9fVUlOVF9VSU5UKSwKLQkgIChnc3RfcnRwX2RlY19jaGFpbl9ydHApOgotCSAgQmV0dGVyIGRlYnVnZ2luZy4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAocmVxdWVzdF9wdF9tYXApLAotCSAgKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpLCAoZ3N0X3J0c3BzcmNfbG9vcF9pbnRlcmxlYXZlZCksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyk6Ci0JICBSZW1vdmUgdW51c2VkIGNvZGUuCi0KLTIwMDctMDQtMTMgMDg6MTk6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IFJlbGF4IHRoZSBhdWRpby9tcGVnIGNhcHMgYWdhaW4gYW5kIGFkZCBGSVhNRTogY29tbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKHVpbnQ2NF9jZWlsaW5nX3NjYWxlX2ludCksCi0JICAoZ3N0X3dhdnBhcnNlX3BlcmZvcm1fc2VlayksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSk6Ci0JICBSZWxheCB0aGUgYXVkaW8vbXBlZyBjYXBzIGFnYWluIGFuZCBhZGQgRklYTUU6IGNvbW1lbnQuCi0KLTIwMDctMDQtMTMgMDY6MjA6MjggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLio6IE1vcmUgc2FuaXR5IGNoZWNrIGZvciB0aGUgaGVhZGVyIGZpZWxkcy4gRml4IHR5cGUgZm9yICdyYXRlJyBoZWFkZXIgZmllbGQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6ICh1aW50NjRfY2VpbGluZ19zY2FsZV9pbnQpLAotCSAgKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIE1vcmUgc2FuaXR5IGNoZWNrIGZvciB0aGUgaGVhZGVyIGZpZWxkcy4gRml4IHR5cGUgZm9yICdyYXRlJyBoZWFkZXIKLQkgIGZpZWxkLgotCi0yMDA3LTA0LTEyIDE2OjA2OjMxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzogSWYgdGhlIG1ldGFkYXRhIHN0cmluZ3Mgd2UgZ2V0IGluIHRoZSBzdHJlYW0gYXJlIG5vdCBVVEYtOCwgdHJ5IHRvIGludGVycHJldCB0aGVtIGFjY29yZGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzogKG5vdGdzdF90YWdfZnJlZWZvcm1fc3RyaW5nX3RvX3V0ZjgpLAotCSAgKGdzdF9pY3lkZW11eF91bmljb2RpZnkpOgotCSAgSWYgdGhlIG1ldGFkYXRhIHN0cmluZ3Mgd2UgZ2V0IGluIHRoZSBzdHJlYW0gYXJlIG5vdCBVVEYtOCwgdHJ5IHRvCi0JICBpbnRlcnByZXQgdGhlbSBhY2NvcmRpbmcgdG8gdGhlIGNoYXJhY3RlciBlbmNvZGluZ3Mgc3BlY2lmaWVkIGluIHRoZQotCSAgR1NUX0lDWV9UQUdfRU5DT0RJTkcgYW5kIEdTVF9UQUdfRU5DT0RJTkcgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBhbmQKLQkgIG9ubHkgZmFsbCBiYWNrIHRvIGxvY2FsZS9JU08tODg1OS0xIGlmIHRob3NlIGFyZW4ndCBzZXQgb3IgZG9uJ3QKLQkgIHdvcmsuIFNob3VsZCBmaXggIzQyODkwMS4KLQotMjAwNy0wNC0xMiAxNDoyMDo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzogVXNlIHRoZSBwcm9wZXIgc3luYyB3b3JkIGZvciBTUFMgYW5kIFBQUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgVXNlIHRoZSBwcm9wZXIgc3luYyB3b3JkIGZvciBTUFMgYW5kIFBQUy4KLQotMjAwNy0wNC0xMiAxMTo0MToxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC9ydHAvTWFrZWZpbGUuYW06IGdzdC9ydHAvZm52MWhhc2guYyAoTUFTS18yNCwgRk5WMV9IQVNIXzMyX0lOSVQsIEZOVjFfSEFTSF8zMl9QUklNRSwgZm52MV9oYXNoXzMyX25ldywgZm52MV9oYXNoXy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZm52MWhhc2guYyAoTUFTS18yNCwgRk5WMV9IQVNIXzMyX0lOSVQsIEZOVjFfSEFTSF8zMl9QUklNRSwKLQkgIGZudjFfaGFzaF8zMl9uZXcsIGZudjFfaGFzaF8zMl91cGRhdGUsIGZudjFfaGFzaF8zMl90b18yNCk6Ci0JICAqIGdzdC9ydHAvZm52MWhhc2guaCAoX19HU1RfRk5WMV9IQVNIX0hfXyk6Ci0JICBBZGQgYSBzaW1wbGUgaGFzaGluZyBpbXBsZW1lbnRhdGlvbiB0aGF0IHdlIGNhbiB1c2UgdG8gZ2VuZXJhdGUKLQkgIGEgMjQtYml0IGlkZW50IHZhbHVlIGJhc2VkIG9uIHRoZSBjb2RlYm9va3MgZm9yIHZvcmJpcyBhbmQgdGhlb3JhLgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jIChnc3RfcnRwX3RoZW9yYV9wYXlfZmluaXNoX2hlYWRlcnMsCi0JICBnc3RfcnRwX3RoZW9yYV9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYwotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X3BhcnNlX2NvbmZpZ3VyYXRpb24sCi0JICBnc3RfcnRwX3ZvcmJpc19kZXBheV9zd2l0Y2hfY29kZWJvb2ssIGdzdF9ydHBfdm9yYmlzX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jIChnc3RfcnRwX3ZvcmJpc19wYXlfcmVzZXRfcGFja2V0LAotCSAgZ3N0X3J0cF92b3JiaXNfcGF5X2luaXRfcGFja2V0LCBnc3RfcnRwX3ZvcmJpc19wYXlfZmx1c2hfcGFja2V0LAotCSAgZ3N0X3J0cF92b3JiaXNfcGF5X2ZpbmlzaF9oZWFkZXJzLCBnc3RfcnRwX3ZvcmJpc19wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBVc2UgdGhlIGhhc2hpbmcgZnVuY3Rpb24sIGVuc3VyaW5nIHRoYXQgdGhlIHNhbWUgY29kZWJvb2tzIHJlc3VsdAotCSAgaW4gdGhlIHNhbWUgaWRlbnQgYW5kIHRodXMgdGhlIHNhbWUgU0RQIGRlc2NyaXB0aW9uLgotCSAgVmFyaW91cyBsb2cgZml4ZXMvY2hhbmdlcy4KLQotMjAwNy0wNC0xMiAxMTozNzo1MCArMDAwMCAgamVycnkgdGFuIDxqZXJyeS50YW5Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6IGl0IGlzIHRoZSBhcHBsaWNhdGlvbidzIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSBpdCBvcGVuIHRoZSBkZXZpY2Ugb25jZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IGplcnJ5IHRhbiA8amVycnkgZG90IHRhbiBhdCBzdW4gZG90IGNvbT4KLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6IChnc3Rfc3VuYXVkaW9zcmNfb3Blbik6Ci0JICByZW1vdmUgdGhlIGNhbGwgb2YgIGlvY3RsIChmZCwgQVVESU9fTUlYRVJfTVVMVElQTEVfT1BFTiksIGl0IGlzIHRoZQotCSAgYXBwbGljYXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgaXQgb3BlbiB0aGUgZGV2aWNlIG9uY2UuCi0JICBSZW1vdmUgYSBjYXJlbGVzcyBlcnJvciBpZiBBVURJT0RFViBpcyBzZXQuIEZpeGVzICMzOTI2MjAuCi0KLTIwMDctMDQtMTIgMTA6NTI6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogTWFrZSB0aW1lc2NhbGUgMzIgYml0cyBhZ2FpbiBzbyB3ZSBkb24ndCBzY3JldyB1cCB0aGUgcHRzX29mZnNldCBjYWxjdWxhdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgTWFrZSB0aW1lc2NhbGUgMzIgYml0cyBhZ2FpbiBzbyB3ZSBkb24ndCBzY3JldyB1cCB0aGUgcHRzX29mZnNldAotCSAgY2FsY3VsYXRpb25zLgotCi0yMDA3LTA0LTEyIDA4OjIxOjI4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHBkZWMuKjogTWFrZSBiYWNrd2FyZCBjb21wYXQgd2l0aCBydHBiaW4gYnkgYWRkaW5nIHRoZSByZXF1ZXN0LXB0LW1hcCBzaWduYWxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cF9kZWNfbWFyc2hhbF9CT1hFRF9fVUlOVF9VSU5UKSwKLQkgIChnc3RfcnRwX2RlY19jbGFzc19pbml0KSwgKGdzdF9ydHBfZGVjX2NoYWluX3J0cCk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5oOgotCSAgTWFrZSBiYWNrd2FyZCBjb21wYXQgd2l0aCBydHBiaW4gYnkgYWRkaW5nIHRoZSByZXF1ZXN0LXB0LW1hcCBzaWduYWxzLgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkgIChuZXdfc2Vzc2lvbl9wYWQpLCAocmVxdWVzdF9wdF9tYXApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX2NhcHMpLAotCSAgKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBJbXBsZW1lbnQgcmVxdWVzdC1wdC1tYXAgc2lnbmFscyBpbnN0ZWFkIG9mIHNldHRpbmcgY2FwcyBvbiB0aGUgYnVmZmVycwotCSAgZm9yIHRoZSBzZXNzaW9uIG1hbmFnZXIuCi0KLTIwMDctMDQtMTEgMTA6MjU6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwLmM6IFJlZ2lzdGVyIEdzdE5ldEJ1ZmZlciBpbiBwbHVnaW5faW5pdCBzbyB0aGF0IHRoZSB0eXBlIGNhbiBiZSB1c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyB3aXRob3V0IHJhY2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICBSZWdpc3RlciBHc3ROZXRCdWZmZXIgaW4gcGx1Z2luX2luaXQgc28gdGhhdCB0aGUgdHlwZSBjYW4gYmUgdXNlZCBmcm9tCi0JICBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQgcmFjZXMuCi0KLTIwMDctMDQtMTEgMTA6MTk6MDYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgdXBkYXRlIHRvIHNwZWMgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgdG8gc3BlYyBmaWxlCi0KLTIwMDctMDQtMTEgMDk6NTM6MzggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4LzogSGFuZGxlIHZlcnNpb24gMSBtZGhkIGF0b21zIHRvIGdldCBleHRlbmRlZCBwcmVjaXNpb24gZHVyYXRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2dldF9kdXJhdGlvbiksCi0JICAocXRkZW11eF9wYXJzZV9zYW1wbGVzKSwgKHF0ZGVtdXhfcGFyc2Vfc2VnbWVudHMpLAotCSAgKHF0ZGVtdXhfcGFyc2VfdHJhayksIChxdGRlbXV4X3BhcnNlX3RyZWUpOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzogKHF0ZGVtdXhfZHVtcF9tZGhkKToKLQkgIEhhbmRsZSB2ZXJzaW9uIDEgbWRoZCBhdG9tcyB0byBnZXQgZXh0ZW5kZWQgcHJlY2lzaW9uIGR1cmF0aW9ucy4KLQkgIEZpeGVzICM0MjY5NzIuCi0KLTIwMDctMDQtMTAgMTc6MDY6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogRml4IGRlcGF5bG9hZGVyIGNsb2NrX3JhdGUgYW5kIHNvbWUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOiAoZ3N0X3J0cF9hbXJfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9hbXJfZGVwYXlfcHJvY2Vzcyk6Ci0JICBGaXggZGVwYXlsb2FkZXIgY2xvY2tfcmF0ZSBhbmQgc29tZSBjbGVhbnVwcy4KLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzogKGdzdF9ydHBfaDI2NF9kZXBheV9maW5hbGl6ZSksCi0JICAoZ3N0X3J0cF9oMjY0X2RlcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9oMjY0X2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oOgotCSAgRG9uJ3QgcHVzaCBjb2RlY19kYXRhIGluIHRoZSBhZGFwdGVyIGJlY2F1c2UgaXQgbWlnaHQgZ2V0IGZsdXNoZWQgd2hlbgotCSAgd2UgZ2V0IGEgZGlzY29udC4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzogKGdzdF9ydHBfbXA0Z19kZXBheV9wcm9jZXNzKToKLQkgIEhhbmRsZSBtdWx0aXBsZSBBVSBwZXIgcGFja2V0LgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOiAoZ3N0X3J0cF9zdjN2X2RlcGF5X3Byb2Nlc3MpLAotCSAgKGdzdF9ydHBfc3Yzdl9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICBEaXNhYmxlIHJhbmssIHRoaXMgb25lIGRvZXMgbm90IHdvcmsuCi0JICBSZW1vdmUgdGltZXN0YW1waW5nLCBiYXNlIGNsYXNzIGRvZXMgdGhhdC4KLQotMjAwNy0wNC0xMCAxMjowMTozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IGxpbWl0IGNhcHMgdG8gdGhlIGZvcm1hdHMgd2UgYW5ub3VuY2UgaW4gdGhlIHRlbXBsYXRlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOiAoZ3N0X2F1X3BhcnNlX3BhcnNlX2hlYWRlcik6Ci0JICBsaW1pdCBjYXBzIHRvIHRoZSBmb3JtYXRzIHdlIGFubm91bmNlIGluIHRoZSB0ZW1wbGF0ZQotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKHVpbnQ2NF9jZWlsaW5nX3NjYWxlX2ludCksCi0JICAoZ3N0X3dhdnBhcnNlX3BlcmZvcm1fc2VlayksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLAotCSAgKGdzdF93YXZwYXJzZV9hZGRfc3JjX3BhZCksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpOgotCSAgZml4IHNvbWUgY3Jhc2hlcnMvYXNzZXJ0cyB3aGVuIGRlYWxpbmcgd2l0aCBicm9rZW4gZmlsZXMKLQotMjAwNy0wNC0xMCAxMDowMToxNCArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC86IEZpeCBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLiBGaXhlcyAjNDI4MTgyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6IChnc3RfcnRwX21wNGdfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOiAoZ3N0X3J0cF9zcGVleF9kZXBheV9nZXRfbW9kZSksCi0JICAoZ3N0X3J0cF9zcGVleF9kZXBheV9zZXRjYXBzKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLCAoZ3N0X3J0c3BzcmNfbG9vcF91ZHApOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19pbml0X3NlbmQpOgotCSAgRml4IHNvbWUgY29tcGlsZXIgd2FybmluZ3MuIEZpeGVzICM0MjgxODIuCi0KLTIwMDctMDQtMDYgMTI6NTQ6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwLzogTW9ycGggUlRQRGVjIGludG8gc29tZXRoaW5nIGNvbXBhdGlibGUgd2l0aCBSVFBCaW4gYXMgYSBmYWxsYmFjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IChmaW5kX3Nlc3Npb25fYnlfaWQpLCAoY3JlYXRlX3Nlc3Npb24pLAotCSAgKGZyZWVfc2Vzc2lvbiksIChnc3RfcnRwX2RlY19iYXNlX2luaXQpLCAoZ3N0X3J0cF9kZWNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9kZWNfaW5pdCksIChnc3RfcnRwX2RlY19maW5hbGl6ZSksCi0JICAoZ3N0X3J0cF9kZWNfcXVlcnlfc3JjKSwgKGdzdF9ydHBfZGVjX2NoYWluX3J0cCksCi0JICAoZ3N0X3J0cF9kZWNfY2hhaW5fcnRjcCksIChnc3RfcnRwX2RlY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfZGVjX2dldF9wcm9wZXJ0eSksIChnc3RfcnRwX2RlY19wcm92aWRlX2Nsb2NrKSwKLQkgIChnc3RfcnRwX2RlY19jaGFuZ2Vfc3RhdGUpLCAoY3JlYXRlX3JlY3ZfcnRwKSwgKGNyZWF0ZV9yZWN2X3J0Y3ApLAotCSAgKGNyZWF0ZV9ydGNwKSwgKGdzdF9ydHBfZGVjX3JlcXVlc3RfbmV3X3BhZCksCi0JICAoZ3N0X3J0cF9kZWNfcmVsZWFzZV9wYWQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHBkZWMuaDoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcC5jOiAocGx1Z2luX2luaXQpOgotCSAgTW9ycGggUlRQRGVjIGludG8gc29tZXRoaW5nIGNvbXBhdGlibGUgd2l0aCBSVFBCaW4gYXMgYSBmYWxsYmFjay4KLQkgIFZhcmlvdXMgb3RoZXIgc3R5bGUgZml4ZXMuCi0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGZpbmRfc3RyZWFtX2J5X2lkKSwKLQkgIChmaW5kX3N0cmVhbV9ieV91ZHBzcmMpLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX2ZyZWUpLAotCSAgKGdzdF9ydHNwc3JjX2NsZWFudXApLCAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAobmV3X3Nlc3Npb25fcGFkKSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19hY3RpdmF0ZV9zdHJlYW1zKSwgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKSwgKGdzdF9ydHNwc3JjX3NldHVwX2F1dGgpLAotCSAgKGdzdF9ydHNwc3JjX2hhbmRsZV9tZXNzYWdlKSwgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEltcGxlbWVudCBSVFBCaW4gc2Vzc2lvbiBtYW5hZ2VyIGhhbmRsaW5nLgotCSAgRG9uJ3QgdHJ5IHRvIGFkZCBlbXB0eSBwcm9wZXJ0aWVzIHRvIGNhcHMuCi0JICBJbXBsZW1lbnQgZmFsbGJhY2sgc2Vzc2lvbiBtYW5hZ2VyLCBoYW5kbGluZy4KLQkgIERvbid0IGNvbWJpbmUgZXJyb3JzIGZyb20gUlRDUCBzdHJlYW1zLCBqdXN0IGlnbm9yZSB0aGVtLgotCSAgKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6IChydHNwX3RyYW5zcG9ydF9nZXRfbWFuYWdlcik6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuaDoKLQkgIEltcGxlbWVudCBmYWxsYmFjayBzZXNzaW9uIG1hbmFnZXIuCi0JICBNYWtlIFJUUEJpbiB0aGUgZGVmYXVsdCBvbmUgd2hlbiBhdmFpbGFibGUuCi0KLTIwMDctMDQtMDUgMTU6MDU6MjQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L2dzdHJ0cHhxdGRlcGF5Lio6IFRyeSB0byByZWNvdmVyIGZyb20gcGFja2V0IGxvc3MgYSBsaXR0bGUgYmV0dGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L2dzdHJ0cHhxdGRlcGF5LmM6IChnc3RfcnRwX3hxdF9kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX3hxdF9kZXBheV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvcXRkZW11eC9nc3RydHB4cXRkZXBheS5oOgotCSAgVHJ5IHRvIHJlY292ZXIgZnJvbSBwYWNrZXQgbG9zcyBhIGxpdHRsZSBiZXR0ZXIuCi0KLTIwMDctMDQtMDUgMTM6NTY6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmM6IFRoaXMgZWxlbWVudCBpcyByZWFkeSB0byBiZSBhdXRvcGx1Z2dlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOiAoZ3N0X3J0cF9tcDRhX2RlcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfbXA0YV9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfbXA0YV9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICBUaGlzIGVsZW1lbnQgaXMgcmVhZHkgdG8gYmUgYXV0b3BsdWdnZWQuCi0KLTIwMDctMDQtMDUgMTE6MjY6MjUgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IERvbid0IGxlYXZlIHRoZSBvZmZzZXRzIGRlZmluZWQgYnkgdXBzdHJlYW0gZWxlbWVudCBvbiB0aGUgY29tcHJlc3NlZCBkYXRhIGJ1ZmZlciB3ZSBhcmUgcHVzaGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wNC0wNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSk6Ci0JICBEb24ndCBsZWF2ZSB0aGUgb2Zmc2V0cyBkZWZpbmVkIGJ5IHVwc3RyZWFtIGVsZW1lbnQgb24gdGhlCi0JICBjb21wcmVzc2VkIGRhdGEgYnVmZmVyIHdlIGFyZSBwdXNoaW5nIGRvd25zdHJlYW0uIE1ha2UgdGhlbQotCSAgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORS4KLQotMjAwNy0wNC0wNCAxMjozOTo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpLzogRG9uJ3QgYWJvcnQgb24gb3V0LW9mLW1lbW9yeS4gVXNlIHN0cmVhbS1uciBhcyB1bnNpZ25lZCBpbnRlZ2VyIG9ubHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9SRUFETUU6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9zeW5jKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwgKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdXNoKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXJfcHVsbCksIChnc3RfYXZpX2RlbXV4X2NvbWJpbmVfZmxvd3MpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgRG9uJ3QgYWJvcnQgb24gb3V0LW9mLW1lbW9yeS4gVXNlIHN0cmVhbS1uciBhcyB1bnNpZ25lZCBpbnRlZ2VyIG9ubHkuCi0KLTIwMDctMDQtMDMgMDk6NTU6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9zbXB0ZS9iYXJib3h3aXBlcy5jOgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zbXB0ZS9iYXJib3h3aXBlcy5jOgotCSAgRml4IGVycm9yIGFzIHNwb3R0ZWQgYnkgU25haWsgPHNuYWlrMzIgYXQgZ21haWwgZG90IGNvbT4KLQotMjAwNy0wMy0zMCAxNzoxOTozNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogU3VwcG9ydCBhdWRpby94LXJhdy1mbG9hdCBpbiB3YXYgZmlsZXMuIFRoaXMgb25seSB3b3JrcyB3aXRoIHBsdWdpbnMtYmFzZSBDVlMsIHVzaW5nIGFuIG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIFN1cHBvcnQgYXVkaW8veC1yYXctZmxvYXQgaW4gd2F2IGZpbGVzLiBUaGlzIG9ubHkgd29ya3Mgd2l0aAotCSAgcGx1Z2lucy1iYXNlIENWUywgdXNpbmcgYW4gb2xkZXIgdmVyc2lvbiBkb2Vzbid0IGhhdmUgYW55Ci0JICBkaXNhZHZhbnRhZ2VzIHRob3VnaC4KLQotMjAwNy0wMy0zMCAxNTo1OToyNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBSZXZlcnQgbGFzdCBjaGFuZ2UgYXMgd2UgZG9uJ3Qgd2FudCBwbHVnaW5zLWdvb2QgdG8gZGVwZW5kIG9uIHBsdWdpbnMtYmFzZSBDVlMgbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOiAoZ3N0X2F1X3BhcnNlX3Jlc2V0KSwKLQkgIChnc3RfYXVfcGFyc2VfcGFyc2VfaGVhZGVyKSwgKGdzdF9hdV9wYXJzZV9jaGFpbik6Ci0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuaDoKLQkgIFJldmVydCBsYXN0IGNoYW5nZSBhcyB3ZSBkb24ndCB3YW50IHBsdWdpbnMtZ29vZCB0byBkZXBlbmQgb24KLQkgIHBsdWdpbnMtYmFzZSBDVlMgbm93LgotCi0yMDA3LTAzLTMwIDA0OjUwOjExICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrLzogRG9uJ3QgcGxheSBhdWRpb2NvbnZlcnQuIEFzIHdhdnBhY2sgd2FudHMvb3V0cHV0cyBhbGwgc2FtcGxlcyB3aXRoIHdpZHRoPT0zMiBhbmQgZGVwdGg9WzEsMzJdIGFjY2VwdCB0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2luaXQpLCAoZ3N0X3dhdnBhY2tfZGVjX3Npbmtfc2V0X2NhcHMpLAotCSAgKGdzdF93YXZwYWNrX2RlY19jbGlwX291dGdvaW5nX2J1ZmZlciksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX3Bvc3RfdGFncyksIChnc3Rfd2F2cGFja19kZWNfY2hhaW4pOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmg6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3Npbmtfc2V0X2NhcHMpLCAoZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcpLAotCSAgKGdzdF93YXZwYWNrX2VuY19jaGFpbik6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JICBEb24ndCBwbGF5IGF1ZGlvY29udmVydC4gQXMgd2F2cGFjayB3YW50cy9vdXRwdXRzIGFsbCBzYW1wbGVzIHdpdGgKLQkgIHdpZHRoPT0zMiBhbmQgZGVwdGg9WzEsMzJdIGFjY2VwdCB0aGlzIGFuZCBsZXQgYXVkaW9jb252ZXJ0IGNvbnZlcnQKLQkgIHRvIGFjY2VwdGVkIGZvcm1hdHMgaW5zdGVhZCBvZiBkb2luZyBpdCBpbiB0aGUgZWxlbWVudCBmb3Igbio4IGRlcHRocy4KLQkgIFRoaXMgYWxzbyBhZGRzIHN1cHBvcnQgZm9yIG5vbi1uKjggZGVwdGhzIGFuZCBwcmV2ZW50cyBzb21lIHVzZWxlc3MKLQkgIG1lbW9yeSBhbGxvY2F0aW9ucy4gRml4ZXMgIzQyMTU5OAotCSAgQWxzbyBhZGQgYSB3b3JrYXJvdW5kIGZvciBidWcgIzQyMTU0MiBpbiB3YXZwYWNrZW5jIGZvciBub3cuLi4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2RlYy5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrZW5jLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2twYXJzZS5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQ29uc2lkZXIgdGhlIGNoYW5nZSBhYm92ZSBpbiB0aGUgdW5pdCB0ZXN0cyBhbmQgdGVzdCBpZiB0aGUgY29ycmVjdAotCSAgY2FwcyBhcmUgYWNjZXB0ZWQgYW5kIHNldC4gQWxzbyBjaGVjayBmb3IgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIGluCi0JICB0aGUgd2F2cGFja3BhcnNlIHVuaXQgdGVzdC4KLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19zaW5rX3NldF9jYXBzKToKLQkgIFNldCBjYXBzIG9uIHRoZSBzcmMgcGFkIGFzIHNvb24gYXMgcG9zc2libGUuCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2NvbW1vbi5oOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmg6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5oOgotCSAgRml4IGluZGVudGlvbi4gZ3N0LWluZGVudCBpcyBub3cgY2FsbGVkIGJ5IGNpY2wuCi0KLTIwMDctMDMtMjkgMTg6NTE6MzMgKzAwMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogUmVxdWlyZSBnc3QtcGx1Z2lucy1iYXNlIENWUyBmb3IgYXVkaW9jb252ZXJ0IHdpdGggbm9uLW5hdGl2ZSBmbG9hdCBzdXBwb3J0IGFuZCB3aWR0aC9kZXB0aCBmaXggaW4gbGliZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFJlcXVpcmUgZ3N0LXBsdWdpbnMtYmFzZSBDVlMgZm9yIGF1ZGlvY29udmVydCB3aXRoIG5vbi1uYXRpdmUKLQkgIGZsb2F0IHN1cHBvcnQgYW5kIHdpZHRoL2RlcHRoIGZpeCBpbiBsaWJnc3RyaWZmLgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZG90IGRlPgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVfcGFyc2VfcmVzZXQpLAotCSAgKGdzdF9hdV9wYXJzZV9wYXJzZV9oZWFkZXIpLCAoZ3N0X2F1X3BhcnNlX2NoYWluKToKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5oOgotCSAgRG9uJ3Qgc3dhcCB0aGUgZmxvYXRzIG91cnNlbGYgaWYgdGhleSdyZSBub3QgaW4gbmF0aXZlIGVuZGlhbm5lc3MuCi0JICBJbnN0ZWFkIGxldCBhdWRpb2NvbnZlcnQgaGFuZGxlIHRoaXMuIEZpeGVzICMzMzk4MzguCi0KLTIwMDctMDMtMjkgMTQ6NDA6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBGbHVzaCBhZGFwdGVyIG9uIGRpc2NvbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOiAoZ3N0X3J0cF9oMjYzcF9kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX2gyNjNwX2RlcGF5X2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiAoZ3N0X3J0cF9oMjY0X2RlcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfaDI2NF9kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX2gyNjRfZGVwYXlfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuYzogKGdzdF9ydHBfbXA0YV9kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX21wNGFfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX21wNGFfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6IChnc3RfcnRwX21wNGdfZGVwYXlfcHJvY2Vzcyk6Ci0JICBGbHVzaCBhZGFwdGVyIG9uIGRpc2NvbnRzLgotCi0yMDA3LTAzLTI5IDE0OjAzOjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogVXNlIG1vcmUgZWZmaWNpZW50IGFkYXB0ZXIgYW5kIHJ0cGJ1ZmZlciBtZXRob2RzIHdoZW4gcG9zc2libGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOiAoZ3N0X3J0cF9MMTZfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzogKGdzdF9ydHBfZ3NtX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOiAoZ3N0X3J0cF9pbGJjX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOiAoZ3N0X3J0cF9tcDJ0X2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOiAoZ3N0X3J0cF9tcDRnX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzogKGdzdF9ydHBfbXA0Z19wYXlfZmx1c2gpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOiAoZ3N0X3J0cF9tcDR2X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfbXA0dl9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6IChnc3RfcnRwX21wNHZfcGF5X2ZsdXNoKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOiAoZ3N0X3J0cF9tcGFfZGVwYXlfcHJvY2Vzcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6IChnc3RfcnRwX21wYV9wYXlfZmx1c2gpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6IChnc3RfcnRwX21wdl9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzogKGdzdF9ydHBfcGNtYV9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzogKGdzdF9ydHBfcGNtdV9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYzogKGdzdF9ydHBfc3Yzdl9kZXBheV9wcm9jZXNzKToKLQkgIFVzZSBtb3JlIGVmZmljaWVudCBhZGFwdGVyIGFuZCBydHBidWZmZXIgbWV0aG9kcyB3aGVuIHBvc3NpYmxlLgotCi0yMDA3LTAzLTI5IDEyOjE0OjIyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IENvcnJlY3RseSBoYW5kbGUgd2lkdGghPWRlcHRoIGlucHV0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX2NyZWF0ZV9oZWFkZXJfYnVmKSwKLQkgIChnc3Rfd2F2ZW5jX3Npbmtfc2V0Y2Fwcyk6Ci0JICBDb3JyZWN0bHkgaGFuZGxlIHdpZHRoIT1kZXB0aCBpbnB1dC4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBBbHJlYWR5IGV4cG9ydCBpbiB0aGUgY2FwcyB0aGF0IHdpZHRoPT04IHVzZXMgdW5zaWduZWQgc2FtcGxlcyBhbmQKLQkgIGV2ZXJ5dGhpbmcgZWxzZSB1c2VzIHNpZ25lZCBzYW1wbGVzLgotCi0yMDA3LTAzLTI5IDA5OjU5OjIzICswMDAwICBMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGVAeWFob28uZnI+Ci0KLQkgIGdzdC91ZHAvOiBSZXdvcmsgdGhlIHNvY2tldCBhbGxvY2F0aW9uIGEgYml0IGJhc2VkIG9uIHRoZSBzb2NrZmQgYXJndW1lbnQgc28gdGhhdCBpdCBiZWNvbWVzIHVzYWJsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZSBhdCB5YWhvbyBkb3QgZnI+Ci0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOiAoZ3N0X2R5bnVkcHNpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2R5bnVkcHNpbmtfaW5pdCksIChnc3RfZHludWRwc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9keW51ZHBzaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfZHludWRwc2lua19pbml0X3NlbmQpLAotCSAgKGdzdF9keW51ZHBzaW5rX2Nsb3NlKToKLQkgICogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmg6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3VkcHNyY19pbml0KSwKLQkgIChnc3RfdWRwc3JjX2NyZWF0ZSksIChnc3RfdWRwc3JjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3VkcHNyY19nZXRfcHJvcGVydHkpLCAoZ3N0X3VkcHNyY19zdGFydCksIChnc3RfdWRwc3JjX3N0b3ApOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgUmV3b3JrIHRoZSBzb2NrZXQgYWxsb2NhdGlvbiBhIGJpdCBiYXNlZCBvbiB0aGUgc29ja2ZkIGFyZ3VtZW50IHNvIHRoYXQKLQkgIGl0IGJlY29tZXMgdXNhYmxlLgotCSAgQWRkIGEgY2xvc2VmZCBwcm9wZXJ0eSB0byBpbnN0cnVjdCB0aGUgdWRwIGVsZW1lbnRzIHRvIGNsb3NlIHRoZSBjdXN0b20KLQkgIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBnb2luZyB0byBSRUFEWS4gRml4ZXMgIzQyMzMwNC4KLQkgIEFQSTpHc3RVRFBTcmM6OmNsb3NlZmQgcHJvcGVydHkKLQkgIEFQSTpHc3REeW5VRFBTaW5rOjpjbG9zZWZkIHByb3BlcnR5Ci0KLTIwMDctMDMtMjkgMDg6MDg6NDkgKzAwMDAgIExhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIEgyNjQgcGF5bG9hZGVyLiBGaXhlcyAjNDIzNzgyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTGF1cmVudCBHbGF5YWwgPHNwZ2xlZ2xlIGF0IHlhaG9vIGRvdCBmcj4KLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmM6IChnc3RfcnRwX2gyNjRfcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfaDI2NF9wYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9maW5hbGl6ZSksIChnc3RfcnRwX2gyNjRfcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfaDI2NF9wYXlfaGFuZGxlX2J1ZmZlciksIChnc3RfcnRwX2gyNjRfcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9oMjY0X3BheV9nZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9oMjY0X3BheV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfaDI2NF9wYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaDoKLQkgIEFkZGVkIEgyNjQgcGF5bG9hZGVyLiBGaXhlcyAjNDIzNzgyLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiAoZ3N0X3J0cF9oMjY0X2RlcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfaDI2NF9kZXBheV9wcm9jZXNzKToKLQkgIFNtYWxsIGZpeGVzLgotCi0yMDA3LTAzLTI4IDIyOjI3OjM2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBBY3R1YWxseSBzdXBwb3J0IGRlcHRocyBmcm9tIDEgdG8gMzIsIG5vdCBvbmx5IDggdG8gMzIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBBY3R1YWxseSBzdXBwb3J0IGRlcHRocyBmcm9tIDEgdG8gMzIsIG5vdCBvbmx5IDggdG8gMzIuCi0KLTIwMDctMDMtMjggMjI6MjM6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IEFkZCBzdXBwb3J0IGZvciB3YXYgZmlsZXMgY29udGFpbmluZyBhdWRpby94LXJhdy1pbnQgd2l0aCByYW5kb20gZGVwdGhzIGJldHdlZW4gMSBhbmQgMzIgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBBZGQgc3VwcG9ydCBmb3Igd2F2IGZpbGVzIGNvbnRhaW5pbmcgYXVkaW8veC1yYXctaW50IHdpdGggcmFuZG9tCi0JICBkZXB0aHMgYmV0d2VlbiAxIGFuZCAzMiBiaXRzLgotCi0yMDA3LTAzLTI4IDE4OjQwOjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkgIGdzdC9ydHAvOiBBZGRlZCBNUDRBLUxBVE0gZGVwYXlsb2FkZXIuIEZpeGVzICM0MTc3OTIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jOiAoZ3N0X3J0cF9tcDRhX2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDRhX2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9tcDRhX2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXA0YV9kZXBheV9maW5hbGl6ZSksIChnc3RfcnRwX21wNGFfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcDRhX2RlcGF5X3Byb2Nlc3MpLCAoZ3N0X3J0cF9tcDRhX2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9tcDRhX2RlcGF5X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9tcDRhX2RlcGF5X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cF9tcDRhX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRhZGVwYXkuaDoKLQkgIEFkZGVkIE1QNEEtTEFUTSBkZXBheWxvYWRlci4gRml4ZXMgIzQxNzc5Mi4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzogKGdzdF9ydHBfbXA0dl9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wNHZfZGVwYXlfcHJvY2Vzcyk6Ci0JICBGaXh1cCBkZXBheWxvYWRlciwgc2V0dGluZyBjb2RlY19kYXRhLCB1c2luZyBtb3JlIGVmZmljaWVudCBhZGFwdG9yIGFuZAotCSAgcnRwYnVmZmVyIGhhbmRsaW5nLgotCSAgKiBnc3QvcnRzcC9VUkxTOgotCSAgQWRkIHVybCB0byB0ZXN0IGFib3ZlLgotCi0yMDA3LTAzLTI4IDE1OjE3OjI3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvcXRkZW11eC86IFByb2Nlc3MgJ2N0dHMnIGF0b21zLCB3aGljaCBhcmUgcHJlc2VudCBpbiBBVkMgSVNPIGZpbGVzICgubW92IGZpbGVzIHdpdGggaDI2NCB2aWRlbykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfcHJlcGFyZV9jdXJyZW50X3NhbXBsZSksCi0JICAoZ3N0X3F0ZGVtdXhfY2hhaW4pLCAocXRkZW11eF9wYXJzZV9zYW1wbGVzKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eF9kdW1wLmM6IChxdGRlbXV4X2R1bXBfY3R0cyk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZHVtcC5oOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X2ZvdXJjYy5oOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X3R5cGVzLmM6Ci0JICBQcm9jZXNzICdjdHRzJyBhdG9tcywgd2hpY2ggYXJlIHByZXNlbnQgaW4gQVZDIElTTyBmaWxlcyAoLm1vdiBmaWxlcwotCSAgd2l0aCBoMjY0IHZpZGVvKS4KLQkgIFVzZSB0aGUgb2Zmc2V0IHByZXNlbnQgaW4gJ2N0dHMnIHRvIGNhbGN1bGF0ZSB0aGUgUFRTIGZvciBlYWNoIHBhY2tldAotCSAgYW5kIHNldCB0aGUgUFRTIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0JICBGaXhlcyAjNDIzMjgzCi0KLTIwMDctMDMtMjUgMTU6MzQ6NDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuKjogSGFuZGxlIGRlZmF1bHQgY2xvY2stcmF0ZXMgZm9yIHN0YXRpYyBwYXlsb2FkIHR5cGVzLCByZWFycmFuZ2Ugc3R1ZmYgc28gdGhhdCB0aGUgcnRwbWFwIGZpZWxkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGZpbmRfc3RyZWFtX2J5X3NldHVwKSwKLQkgIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9mcmVlKSwKLQkgIChnZXRfZGVmYXVsdF9yYXRlX2Zvcl9wdCksIChnc3RfcnRzcHNyY19wYXJzZV9ydHBtYXApLAotCSAgKGdzdF9ydHNwc3JjX21lZGlhX3RvX2NhcHMpLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX2NhcHMpLAotCSAgKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpLCAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEhhbmRsZSBkZWZhdWx0IGNsb2NrLXJhdGVzIGZvciBzdGF0aWMgcGF5bG9hZCB0eXBlcywgcmVhcnJhbmdlIHN0dWZmIHNvCi0JICB0aGF0IHRoZSBydHBtYXAgZmllbGQgaW4gdGhlIHNkcCBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgotCSAgUGFyc2UgUlRQLUluZm8gZmllbGQgdG8gZ2V0IHRoZSBzZXFudW0gYW5kIHRpbWViYXNlIGZpZWxkcyB0aGF0IHNob3VsZAotCSAgZ28gaW4gdGhlIGNhcHMuCi0JICBEZWxheSBjb25maWd1cmluZyBjYXBzIGFmdGVyIHdlIGdvdCB0aGUgUlRQLUluZm8gZnJvbSB0aGUgUExBWSByZXBseSBmcm9tCi0JICB0aGUgc2VydmVyLgotCi0yMDA3LTAzLTI0IDE5OjQ2OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogUmVtb3ZlICdjaGFubmVsLXBvc2l0aW9ucycgZmllbGQgd2hlbiBtdW5naW5nIGlucHV0IGNhcHMgaW50byAxLWNoYW5uZWwgb3V0cHV0IGNhcHMgKEkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogKGdzdF9kZWludGVybGVhdmVfc2lua19zZXRjYXBzKToKLQkgIFJlbW92ZSAnY2hhbm5lbC1wb3NpdGlvbnMnIGZpZWxkIHdoZW4gbXVuZ2luZyBpbnB1dCBjYXBzIGludG8KLQkgIDEtY2hhbm5lbCBvdXRwdXQgY2FwcyAoSSBndWVzcyB0ZWNobmljYWxseSB3ZSBzaG91bGQgc2V0IHRoZQotCSAgcG9zaXRpb24gZm9yIGVhY2ggY2hhbm5lbCBvbiB0aGUgb3V0cHV0IGNhcHMgaWYgaXQncyBub24tTk9ORSwKLQkgIGJ1dCBJJ2xsIHNhdmUgdGhhdCBhcyBhIHRhc2sgZm9yIGFub3RoZXIgZGF5KS4KLQotMjAwNy0wMy0yMiAyMjoxNDoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IERvbid0IGxlYWsgaW5wdXQgYnVmZmVyIGluIGNoYWluIGZ1bmN0aW9uOyBtYWludGFpbiBvdXIgb3duIGxpc3Qgb2Ygc291cmNlIHBhZHMgLSB0aGVyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChnc3RfZGVpbnRlcmxlYXZlX2FkZF9uZXdfcGFkcyksCi0JICAoZ3N0X2RlaW50ZXJsZWF2ZV9yZW1vdmVfcGFkcyksIChnc3RfZGVpbnRlcmxlYXZlX3Byb2Nlc3MpLAotCSAgKGdzdF9kZWludGVybGVhdmVfY2hhaW4pOgotCSAgRG9uJ3QgbGVhayBpbnB1dCBidWZmZXIgaW4gY2hhaW4gZnVuY3Rpb247IG1haW50YWluIG91ciBvd24gbGlzdCBvZgotCSAgc291cmNlIHBhZHMgLSB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBhYm91dCB0aGUgb3JkZXIgb2YgdGhlIGxpc3QKLQkgIGluIHRoZSBHc3RFbGVtZW50IHN0cnVjdCwgYW5kIHdlIHdhbnQgYSB2ZXJ5IHNwZWNpZmljIG9yZGVyOyBsYXN0bHksCi0JICBzb21lIG1vcmUgZGVidWdnaW5nLgotCi0yMDA3LTAzLTIyIDE2OjI1OjU2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiBSZXZlcnQgbGFzdCBjb21taXQsIHByZXZlbnRpbmcgaW5maW5pdGUgcGx1Z2dpbmcgbG9vcHMgd2l0aCByYW5rcyBpcyBubyBjbGVhbiBzb2x1dGlvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfcGx1Z2luX2luaXQpOgotCSAgUmV2ZXJ0IGxhc3QgY29tbWl0LCBwcmV2ZW50aW5nIGluZmluaXRlIHBsdWdnaW5nIGxvb3BzIHdpdGggcmFua3MKLQkgIGlzIG5vIGNsZWFuIHNvbHV0aW9uIGFuZCBpbiBnZW5lcmFsIHRoZXJlJ3Mgbm8gcmVhc29uIHdoeSBvbmUgd2FudHMKLQkgIHRvIHBhcnNlIGZyYW1lZCB3YXZwYWNrIGRhdGEgYWdhaW4uCi0KLTIwMDctMDMtMjIgMTU6NTI6NTEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiBTZW5kIHRoZSBuZXcgc2VnbWVudCBldmVudCBpbiB0aW1lIGZvcm1hdCBpbnN0ZWFkIG9mIGJ5dGVzLiBUaGlzIGFsbG93cyAid2F2cGFja2VuYyAhIHdhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX3B1c2hfYmxvY2spOgotCSAgU2VuZCB0aGUgbmV3IHNlZ21lbnQgZXZlbnQgaW4gdGltZSBmb3JtYXQgaW5zdGVhZCBvZiBieXRlcy4gVGhpcwotCSAgYWxsb3dzICJ3YXZwYWNrZW5jICEgd2F2cGFja2RlYyAhIHNvbWVhdWRpb3NpbmsiIHBpcGVsaW5lcy4KLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9wbHVnaW5faW5pdCk6Ci0JICBBY2NlcHQgZnJhbWVkIGFuZCBub24tZnJhbWVkIGlucHV0LCB3YXZwYWNrcGFyc2UgZG9lc24ndCBjYXJlLiBUbwotCSAgcHJldmVudCAid2F2cGFja3BhcnNlICEgd2F2cGFja3BhcnNlICEgLi4uIiBwaXBlbGluZXMgbG93ZXIgdGhlCi0JICByYW5rIG9mIHdhdnBhY2twYXJzZSBieSBvbmUuIFRoaXMgYWxsb3dzICJ3YXZwYWNrZW5jICEgd2F2cGFja3BhcnNlICEKLQkgIC4uLiIgcGlwZWxpbmVzLgotCi0yMDA3LTAzLTIyIDExOjA4OjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogUmV2ZXJ0IHRvIHVzZSBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIGhlcmUuIFdlIGNhbiBhbmQgc2hvdWxkIHVzZSBpdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfY2hhaW4pOgotCSAgUmV2ZXJ0IHRvIHVzZSBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIGhlcmUuIFdlIGNhbiBhbmQgc2hvdWxkIHVzZSBpdC4KLQkgIFRoYW5rcyB0byBKYW4gYW5kIE1pa2UgZm9yIG5vdGljaW5nIG15IG1pc3Rha2UuCi0KLTIwMDctMDMtMjIgMDk6NDQ6MTcgKzAwMDAgIENocmlzdG9waGUgRGVoYWlzIDxjaHJpc3RvcGhlLmRlaGFpc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9nY29uZi9nY29uZi5jOiBBY2NlcHQgY29tcGxleCBwaXBlbGluZSBkZXNjcmlwdGlvbnMgYXMgYW4gYXVkaW8gcHJvZmlsZSBpbnN0ZWFkIG9mIGp1c3QgYSBzaW5nbGUgZWxlbWVudC4gRml4ZXMgIy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQ2hyaXN0b3BoZSBEZWhhaXMgPGNocmlzdG9waGUgZG90IGRlaGFpcyBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBleHQvZ2NvbmYvZ2NvbmYuYzogKGdzdF9nY29uZl9yZW5kZXJfYmluX3dpdGhfZGVmYXVsdCk6Ci0JICBBY2NlcHQgY29tcGxleCBwaXBlbGluZSBkZXNjcmlwdGlvbnMgYXMgYW4gYXVkaW8gcHJvZmlsZSBpbnN0ZWFkIG9mIGp1c3QKLQkgIGEgc2luZ2xlIGVsZW1lbnQuIEZpeGVzICM0MjA2NTguCi0KLTIwMDctMDMtMjIgMDA6MTc6NDEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy4qOiBQdXQgdGhlIHdyaXRlIGhlbHBlcnMgaW50byB0aGUgR3N0V2F2cGFja0VuYyBzdHJ1Y3QgZGlyZWN0bHkgYW5kIG5vdCBhcyBhIHBvaW50ZXIgdG8gc2F2Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2VuY19pbml0KSwgKGdzdF93YXZwYWNrX2VuY19jaGFpbiksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3Jld3JpdGVfZmlyc3RfYmxvY2spOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmg6Ci0JICBQdXQgdGhlIHdyaXRlIGhlbHBlcnMgaW50byB0aGUgR3N0V2F2cGFja0VuYyBzdHJ1Y3QgZGlyZWN0bHkgYW5kIG5vdAotCSAgYXMgYSBwb2ludGVyIHRvIHNhdmUgdHdvIHNtYWxsLCBidXQgdXNlbGVzcyBtYWxsb2NzLiBUaGlzIGFsc28gbWFrZXMKLQkgIGl0IHBvc3NpYmxlIHRvIGRyb3AgdGhlIGZpbmFsaXplIG1ldGhvZC4KLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9wdXNoX2J1ZmZlcik6Ci0JICBGb3IgY29uc2lzdGVuY3kgcmVhc29ucyBhbHNvIHNldCBHU1RfQlVGRkVSX09GRlNFVF9FTkQgb24gdGhlIG91dGdvaW5nCi0JICBidWZmZXJzIHRoZSBzYW1lIHdheSB3YXZwYWNrZW5jIGRvZXMgaXQuCi0KLTIwMDctMDMtMjEgMjM6NTA6MDkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiBEb24ndCB1c2UgZ3N0X3BhZF9hbGxvY19idWZmZXIoKSBhcyB3ZSBtaWdodCBjbGlwIHRoZSBidWZmZXIgbGF0ZXIgYW5kCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2NoYWluKToKLQkgIERvbid0IHVzZSBnc3RfcGFkX2FsbG9jX2J1ZmZlcigpIGFzIHdlIG1pZ2h0IGNsaXAgdGhlIGJ1ZmZlciBsYXRlciBhbmQKLQkgIEJhc2VUcmFuc2Zvcm0tYmFzZWQgZWxlbWVudHMgd2lsbCBsaWtlbHkgYnJlYWsgYmVjYXVzZSBvZiB3cm9uZwotCSAgdW5pdC1zaXplLiBBbHNvIHBsdWcgYSBwb3NzaWJsZSBtZW1sZWFrIHRoYXQgaGFwcGVucyB3aGVuIGRlY29kaW5nCi0JICBmYWlscyBmb3Igc29tZSByZWFzb24uCi0KLTIwMDctMDMtMjEgMTE6NDk6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hcGV0YWcvZ3N0dGFnZGVtdXguYzogUmVuYW1lIHJlZ2lzdGVyZWQgdHlwZSBpbiBwcmVwYXJhdGlvbiBvZiBHc3RUYWdEZW11eCBtb3ZpbmcgdG8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IChnc3RfdGFnX2RlbXV4X2dldF90eXBlKToKLQkgIFJlbmFtZSByZWdpc3RlcmVkIHR5cGUgaW4gcHJlcGFyYXRpb24gb2YgR3N0VGFnRGVtdXggbW92aW5nIHRvCi0JICAtYmFzZSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCi0KLTIwMDctMDMtMTkgMTA6Mjk6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBTdHJlYW1pbmcgbW9kZSBmaXhlczogZG9uJ3QgdW5yZWYgYnVmZmVyIHdlIGRvbid0IG93biBhbnkgbG9uZ2VyOyByZW1vdmUgYm9ndXMgYWRhcHRlciBmbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKToKLQkgIFN0cmVhbWluZyBtb2RlIGZpeGVzOiBkb24ndCB1bnJlZiBidWZmZXIgd2UgZG9uJ3Qgb3duIGFueSBsb25nZXI7Ci0JICByZW1vdmUgYm9ndXMgYWRhcHRlciBmbHVzaC4gRml4ZXMgIzQxOTMzOC4KLQotMjAwNy0wMy0xOCAwNDoyMToyOCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIFJFUVVJUkVNRU5UUzogQ2hhbmdlIHRoZSBmb3JtYXQgdG8ga2V5L3ZhbHVlLCBhZGQgYSBidW5jaCBvZiBpbmZvcm1hdGlvbiwgcmVtb3ZlIGEgYnVuY2ggb2YgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIGZvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIFJFUVVJUkVNRU5UUzogQ2hhbmdlIHRoZSBmb3JtYXQgdG8ga2V5L3ZhbHVlLCBhZGQgYSBidW5jaCBvZgotCSAgaW5mb3JtYXRpb24sIHJlbW92ZSBhIGJ1bmNoIG9mIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBmb3IKLQkgIG90aGVyIEdTdHJlYW1lciBwYWNrYWdlcy4KLQotMjAwNy0wMy0xOCAwMjowMDo1NCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIFJFUVVJUkVNRU5UUzogRml4IGEgZmV3IHRoaW5ncy4gIFRoaXMgZmlsZSByZWFsbHkgbmVlZHMgYSBnb29kIG9uY2Utb3Zlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBSRVFVSVJFTUVOVFM6IEZpeCBhIGZldyB0aGluZ3MuICBUaGlzIGZpbGUgcmVhbGx5IG5lZWRzIGEKLQkgIGdvb2Qgb25jZS1vdmVyLgotCi0yMDA3LTAzLTE2IDE4OjM4OjE4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06IEZpeCBwcmV2aW91cyBjb21taXQsIHdlIHdhbnQgdG8gcGFzcyB0aGUgTlNWaWV3IGluIHRoZSBtZXNzYWdlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIEZpeCBwcmV2aW91cyBjb21taXQsIHdlIHdhbnQgdG8gcGFzcyB0aGUgTlNWaWV3IGluIHRoZSBtZXNzYWdlLgotCi0yMDA3LTAzLTE2IDE2OjI3OjIwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06IEVtaXQgJ2hhdmUtbnMtdmlldycgbWVzc2FnZSB3aGVuIHdvcmtpbmcgaW4gZW1iZWRkZWQgbW9kZS4gVGhlIG1lc3NhZ2Ugd2lsbCBjb250YWluIGEgcG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBFbWl0ICdoYXZlLW5zLXZpZXcnIG1lc3NhZ2Ugd2hlbiB3b3JraW5nIGluIGVtYmVkZGVkIG1vZGUuIFRoZSBtZXNzYWdlCi0JICB3aWxsIGNvbnRhaW4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIE5TVmlldy4KLQotMjAwNy0wMy0xNiAwOTo1Nzo0MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuYzogQSAxMCBiYW5kIEVRIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byAxIGJhbmRzIGFuZCBub3QgdG8gMy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuYzoKLQkgIChnc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX2luaXQpOgotCSAgQSAxMCBiYW5kIEVRIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byAxIGJhbmRzIGFuZCBub3QgdG8gMy4KLQotMjAwNy0wMy0xNSAxMjowNTowMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgc3lzL01ha2VmaWxlLmFtOiBEb24ndCBmb3JnZXQgdG8gZGlzdHJpYnV0ZSB0aGUgc3lzL29zeGF1ZGlvLyBkaXJlY3RvcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgZm9yZ2V0IHRvIGRpc3RyaWJ1dGUgdGhlIHN5cy9vc3hhdWRpby8gZGlyZWN0b3J5LgotCi0yMDA3LTAzLTE1IDExOjM5OjUzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBBY3RpdmF0ZSBvc3hhdWRpbyBpbiBnc3QtcGx1Z2lucy1nb29kIHdpdGggcHJvcGVyIGJ1aWxkIHNldHVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogc3lzL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICAoZ3N0X29zeF9hdWRpb19zaW5rX29zeGVsZW1lbnRfZG9faW5pdCksIChnc3Rfb3N4X2F1ZGlvX3NpbmtfaW5pdCksCi0JICAoZ3N0X29zeF9hdWRpb19zaW5rX2dldGNhcHMpLAotCSAgKGdzdF9vc3hfYXVkaW9fc2lua19jcmVhdGVfcmluZ2J1ZmZlciksIChwbHVnaW5faW5pdCk6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgKGdzdF9vc3hfYXVkaW9fc3JjX29zeGVsZW1lbnRfZG9faW5pdCksIChnc3Rfb3N4X2F1ZGlvX3NyY19pbml0KSwKLQkgIChnc3Rfb3N4X2F1ZGlvX3NyY19jcmVhdGVfcmluZ2J1ZmZlcik6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6IChnc3Rfb3N4X3JpbmdfYnVmZmVyX2dldF90eXBlKSwKLQkgIChnc3Rfb3N4X3JpbmdfYnVmZmVyX2NsYXNzX2luaXQpLCAoZ3N0X29zeF9yaW5nX2J1ZmZlcl9pbml0KSwKLQkgIChnc3Rfb3N4X3JpbmdfYnVmZmVyX2FjcXVpcmUpLCAoZ3N0X29zeF9yaW5nX2J1ZmZlcl9zdGFydCksCi0JICAoZ3N0X29zeF9yaW5nX2J1ZmZlcl9wYXVzZSksIChnc3Rfb3N4X3JpbmdfYnVmZmVyX3N0b3ApOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5oOgotCSAgQWN0aXZhdGUgb3N4YXVkaW8gaW4gZ3N0LXBsdWdpbnMtZ29vZCB3aXRoIHByb3BlciBidWlsZCBzZXR1cC4KLQkgIEFkZCBpbmxpbmVkIGRvY3VtZW50YXRpb24uCi0JICBGaXggZGVidWcgc3RhdGVtZW50cwotCSAgRml4IHJpbmdidWZmZXIgd2hlbiBwYXVzaW5nLgotCSAgRml4ZXMgIzMyMzQ3MQotCi0yMDA3LTAzLTE0IDIyOjIxOjI2ICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QvcnRwLzogUG9ydGVkIG11bGF3IGFuZCBhbGF3IHBheWxvYWRlcnMgdG8gdXNlIG5ldyBiYXNlIGNsYXNzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBwY211cGF5Lmg6Ci0JICBQb3J0ZWQgbXVsYXcgYW5kIGFsYXcgcGF5bG9hZGVycyB0byB1c2UgbmV3IGJhc2UgY2xhc3MKLQotMjAwNy0wMy0xNCAxNjozMDoxOSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgc3lzL29zeHZpZGVvLzogRml4IGxlYWtzIHdoZW4gcnVubmluZyBhIE5TQXBwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oOgotCSAgKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBGaXggbGVha3Mgd2hlbiBydW5uaW5nIGEgTlNBcHAuCi0JICBBY2NlcHQgYW55IGtpbmQgb2YgcmVzb2x1dGlvbnMuCi0JICBXb3JrcyBpbiBmdWxsc2NyZWVuLiBDYW4gbWF4aW1pemUuCi0JICBPbmx5IHRoaW5nIGxlZnQgYmVmb3JlIGJlaW5nIGFibGUgdG8gbW92ZSB0aGlzIHRvIC1nb29kIGlzIGRvY3VtZW50YXRpb24KLQkgIGFuZCBlbWJlZGRlZCB3aW5kb3cgc3VwcG9ydC4KLQotMjAwNy0wMy0xNCAxNToyNToxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIHBvLzogVXBkYXRlIHRyYW5zbGF0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9hZi5wbzoKLQkgICogcG8vYXoucG86Ci0JICAqIHBvL2NzLnBvOgotCSAgKiBwby9lbl9HQi5wbzoKLQkgICogcG8vaXQucG86Ci0JICAqIHBvL25sLnBvOgotCSAgKiBwby9vci5wbzoKLQkgICogcG8vc3EucG86Ci0JICAqIHBvL3NyLnBvOgotCSAgKiBwby9zdi5wbzoKLQkgICogcG8vdWsucG86Ci0JICAqIHBvL3ZpLnBvOgotCSAgVXBkYXRlIHRyYW5zbGF0aW9ucy4KLQotMjAwNy0wMy0xNCAxNDo0OTo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBGaXggc3RyaW5nIHJlcGxhY2UgZXJyb3IgKEFHX0FHX0dTVF8qID0+IEFHX0dTVF8qKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBGaXggc3RyaW5nIHJlcGxhY2UgZXJyb3IgKEFHX0FHX0dTVF8qID0+IEFHX0dTVF8qKS4KLQotMjAwNy0wMy0xNCAxNDo0ODowOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZXF1YWxpemVyLzogQWRkIDMgYW5kIDEwIGJhbmQgdmVyc2lvbiBhbmQgYWRkIG1pc3NpbmcgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiAoX2RvX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2NsYXNzX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfZ2V0X3R5cGUpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9jaGlsZF9wcm94eV9pbnRlcmZhY2VfaW5pdCksIChzZXR1cF9maWx0ZXIpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3RyYW5zZm9ybV9pcCksIChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jOgotCSAgKGdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHNfYmFzZV9pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX2NsYXNzX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHNfaW5pdCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfMTBiYW5kc19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHNfZ2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmg6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmM6Ci0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfM2JhbmRzX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfM2JhbmRzX2NsYXNzX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyXzNiYW5kc19pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfZ2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuaDoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYzoKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfYmFzZV9pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfaW5pdCk6Ci0JICBBZGQgMyBhbmQgMTAgYmFuZCB2ZXJzaW9uIGFuZCBhZGQgbWlzc2luZyBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzLgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV9ldmVudCksCi0JICAoZ3N0X3NwZWN0cnVtX3RyYW5zZm9ybV9pcCk6Ci0JICBBZGQgc29tZSBjb21tZW50cyBhYm91dCBmbG9hdCBzdXBwb3J0LgotCi0yMDA3LTAzLTEyIDE3OjU2OjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IEZpeCBoYW5kbGluZyBvZiAtMSB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcyB3aGVuIHNlZWtpbmcsIGFuZCBTRUVLX0NVUitTRUVLX0VORCBoZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IChnc3RfdGFnX2RlbXV4X3NyY3BhZF9ldmVudCk6Ci0JICBGaXggaGFuZGxpbmcgb2YgLTEgdmFsdWVzIGZvciBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgd2hlbiBzZWVraW5nLAotCSAgYW5kIFNFRUtfQ1VSK1NFRUtfRU5EIGhlcmUgYXMgd2VsbC4KLQotMjAwNy0wMy0xMiAxNzoyNDoyMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiBGaXggaGFuZGxpbmcgb2YgLTEgdmFsdWVzIGZvciBzdGFydCBhbmQgc3RvcCB2YWx1ZXMgd2hlbiBzZWVraW5nLCBhbmQgU0VFS19DVVIrU0VFS19FTkQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfc3JjcGFkX2V2ZW50KToKLQkgIEZpeCBoYW5kbGluZyBvZiAtMSB2YWx1ZXMgZm9yIHN0YXJ0IGFuZCBzdG9wIHZhbHVlcyB3aGVuIHNlZWtpbmcsCi0JICBhbmQgU0VFS19DVVIrU0VFS19FTkQuCi0KLTIwMDctMDMtMTIgMTU6NDk6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBJJ20gdG9vIGxhenkgdG8gY29tbWVudCB0aGlzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFkZCBQYXRjaCBieTogbGluZSBmb3Igd2ltLCBzaW5jZSBoZSdzIGF3YXkKLQotMjAwNy0wMy0xMiAxMzoyODoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IEZpeCBwYXJzaW5nIG9mIElEMyB2Mi4yLjAgUElDIGZyYW1lcy4gT25seSBpbiB2ZXJzaW9uID49IDIuMy4wIGlzIHRoZSBpbWFnZSBmb3JtYXQgYSB2YXJpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChwYXJzZV9waWN0dXJlX2ZyYW1lKToKLQkgIEZpeCBwYXJzaW5nIG9mIElEMyB2Mi4yLjAgUElDIGZyYW1lcy4gT25seSBpbiB2ZXJzaW9uID49IDIuMy4wIGlzCi0JICB0aGUgaW1hZ2UgZm9ybWF0IGEgdmFyaWFibGUtbGVuZ3RoIE5VTC10ZXJtaW5hdGVkIHN0cmluZzsgaW4KLQkgIHZlcnNpb25zIGJlZm9yZSB0aGF0IHRoZSBpbWFnZSBmb3JtYXQgaXMgYSBmaXhlZC1sZW5ndGggc3RyaW5nIG9mCi0JICAzIGNoYXJhY3RlcnMgKHNlZSAjMzQ4NjQ0IGZvciBhIHNhbXBsZSB0YWcpLgotCSAgQWxzbyBtYWtlIHN1cHBsaWVkIG1pbWUgdHlwZSBsb3dlci1jYXNlIGFuZCBmaXggdXAgJ2pwZycgdG8gJ2pwZWcnLgotCi0yMDA3LTAzLTExIDIyOjIzOjA0ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLio6IEhhbmRsZSBkaXNwbGF5IG1vZGUgY2hhbmdlcyBkdXJpbmcgcGxheWJhY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuaDoKLQkgIEhhbmRsZSBkaXNwbGF5IG1vZGUgY2hhbmdlcyBkdXJpbmcgcGxheWJhY2suCi0KLTIwMDctMDMtMTAgMTY6MDc6MzEgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvTUFOSUZFU1Q6IEFkZCBuZXcgcHJvamVjdCBmaWxlcyB0byBNQU5JRkVTVC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgIEFkZCBuZXcgcHJvamVjdCBmaWxlcyB0byBNQU5JRkVTVC4KLQkgICogd2luMzIvdnM2L2xpYmdzdGF1ZGlvZnguZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0cnRwLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdHJ0c3AuZHNwOgotCSAgVXBkYXRlIHByb2plY3QgZmlsZXMuCi0KLTIwMDctMDMtMTAgMTI6MzA6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFByaW50ZiBmb3JtYXQgZml4ZXM7IGFsc28gYWRkIHNvbWUgbWlzc2luZyBxdW90ZXMgaW4gdHJhbnNsYXRlZCBzdHJpbmdzLiBGaXhlcyAjNDE2NzI4IGFuZCAjNDE2NzI3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpOgotCSAgKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IChnc3RfdjRsMl9maWxsX2xpc3RzKToKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSk6Ci0JICBQcmludGYgZm9ybWF0IGZpeGVzOyBhbHNvIGFkZCBzb21lIG1pc3NpbmcgcXVvdGVzIGluIHRyYW5zbGF0ZWQKLQkgIHN0cmluZ3MuIEZpeGVzICM0MTY3MjggYW5kICM0MTY3MjcuCi0KLTIwMDctMDMtMDkgMjA6MTI6MDggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6IFRpbSBhbmQgSSBjYW4ndCB0aGluayBvZiBhbnkgcmVhc29uIHRoZSBjaGlsZCBhdWRpbyBzaW5rIG5lZWRzIHRvIGJlIHNldCBiYWNrIHRvIE4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6IChnc3RfYXV0b19hdWRpb19zaW5rX2ZpbmRfYmVzdCk6Ci0JICBUaW0gYW5kIEkgY2FuJ3QgdGhpbmsgb2YgYW55IHJlYXNvbiB0aGUgY2hpbGQgYXVkaW8gc2luayBuZWVkcyB0bwotCSAgYmUgc2V0IGJhY2sgdG8gTlVMTCBhZnRlciBzdWNjZXNzZnVsbHkgZGV0ZXJtaW5pbmcgdGhhdCBpdCBjYW4KLQkgIHJlYWNoIFJFQURZIC0gaXQgZ2V0cyBpbW1lZGlhdGVseSBzZXQgYmFjayB0byBSRUFEWSBieSB0aGUgY2FsbGVyCi0JICBhbnl3YXksIGNhdXNpbmcgYW4gdW5uZWNlc3NhcnkgY2xvc2Uvb3BlbiBvZiBhbnkgYXVkaW8gZGV2aWNlcwotCSAgaW52b2x2ZWQuCi0KLTIwMDctMDMtMDkgMTk6NTE6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBvLzogQWRkIGphLnBvIGZpbGUgZnJvbSAjMzc3MzA2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL0xJTkdVQVM6Ci0JICAqIHBvL2phLnBvOgotCSAgQWRkIGphLnBvIGZpbGUgZnJvbSAjMzc3MzA2LgotCi0yMDA3LTAzLTA5IDE5OjQ0OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvc3VuYXVkaW8vOiBBY3R1YWxseSB0cmFuc2xhdGUgc3VuYXVkaW8gbWl4ZXIgdHJhY2sgbGFiZWxzIGluc3RlYWQgb2YganVzdCBtYXJraW5nIHRoZSBzdHJpbmdzIGFzIHRyYW5zbGF0YWJsZSAoIzMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW8uYzogKHBsdWdpbl9pbml0KToKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX3RyYWNrX25ldyk6Ci0JICBBY3R1YWxseSB0cmFuc2xhdGUgc3VuYXVkaW8gbWl4ZXIgdHJhY2sgbGFiZWxzIGluc3RlYWQgb2YganVzdAotCSAgbWFya2luZyB0aGUgc3RyaW5ncyBhcyB0cmFuc2xhdGFibGUgKCMzNzczMDYpOyBjbGVhbiB1cCB3ZWlyZAotCSAgbGFiZWwgc3RyaW5nIG1hcHBpbmcgY29kZSB0aGF0IHNlcnZlcyBubyBhcHBhcmVudCBwdXJwb3NlLiBBbHNvCi0JICBzZXQgdGhlICd1bnRyYW5zbGF0ZWQtbGFiZWwnIHByb3BlcnR5IHdoZW4gY3JlYXRpbmcgbWl4ZXIgdHJhY2tzCi0JICBpZiB0aGUgR3N0TWl4ZXJUcmFjayBiYXNlIGNsYXNzIHN1cHBvcnRzIHRoaXMuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9zdW5hdWRpby5jOiAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHN1bmF1ZGlvX3N1aXRlKToKLQkgIFZlcnkgbWluaW1hbGlzdGljIHVuaXQgdGVzdCBmb3Igc3VuYXVkaW9taXhlciBlbGVtZW50IChjb21waWxlcywgYnV0IG5vdAotCSAgYWN0dWFsbHkgdGVzdGVkIG9uIGEgc3lzdGVtIHdoZXJlIHN1bmF1ZGlvbWl4ZXIgaXMgYXZhaWxhYmxlKS4KLQotMjAwNy0wMy0wOSAxODo0OTozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBSZS1lbmFibGUgdGhlIHN0YXRlcyB0ZXN0IGFuZCBzZWUgaWYgaXQgd29ya3Mgb24gdGhlIGJ1aWxkYm90cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIFJlLWVuYWJsZSB0aGUgc3RhdGVzIHRlc3QgYW5kIHNlZSBpZiBpdCB3b3JrcyBvbiB0aGUgYnVpbGRib3RzLgotCi0yMDA3LTAzLTA5IDE3OjMyOjMyICswMDAwICBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotCi0JICBleHQvZHYvZ3N0ZHZkZWMuKjogSW5mZXIgcGl4ZWwtYXNwZWN0LXJhdGlvIGZyb20gdGhlIHZpZGVvIGZyYW1lIGZvcm1hdCBpZiBpdCBpc24ndCBwcm92aWRlZCBieSB0aGUgY29udGFpbmVyLCBhcyBoYXAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19pbml0KSwgKGdzdF9kdmRlY19zaW5rX3NldGNhcHMpLAotCSAgKGdzdF9kdmRlY19zcmNfbmVnb3RpYXRlKSwgKGdzdF9kdmRlY19jaGFpbiksCi0JICAoZ3N0X2R2ZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5oOgotCSAgSW5mZXIgcGl4ZWwtYXNwZWN0LXJhdGlvIGZyb20gdGhlIHZpZGVvIGZyYW1lIGZvcm1hdCBpZiBpdCBpc24ndAotCSAgcHJvdmlkZWQgYnkgdGhlIGNvbnRhaW5lciwgYXMgaGFwcGVucyB3aGVuIHBsYXlpbmcgRFYgZnJvbSBBVkkKLQkgIG9yIFF1aWNrdGltZSBjb250YWluZXJzLgotCSAgUGF0Y2ggYnk6IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0JICBGaXhlcyAjMzgwOTQ0Ci0KLTIwMDctMDMtMDkgMTc6MDU6MTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogV2hlbiBhY3RpdmF0ZWQsIHJlbW92ZSB0aGUgdWRwc3JjIHRpbWVvdXQsIHdlIGhhdmUgZGF0YWZsb3cgYW5kIHRpbWVvdXRzIHdpbGwgbGF0ZXIgYmUgaGFuZGxlZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpOgotCSAgV2hlbiBhY3RpdmF0ZWQsIHJlbW92ZSB0aGUgdWRwc3JjIHRpbWVvdXQsIHdlIGhhdmUgZGF0YWZsb3cgYW5kIHRpbWVvdXRzCi0JICB3aWxsIGxhdGVyIGJlIGhhbmRsZWQgYnkgdGhlIGppdHRlcmJ1ZmZlci4KLQotMjAwNy0wMy0wOSAxNjo1MzozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzogQWRkIHdyaXRlIHN1cHBvcnQgZm9yIEdTVF9UQUdfTVVTSUNCUkFJTlpfU09SVE5BTUUgKFRTT1ApIHRhZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgQWRkIHdyaXRlIHN1cHBvcnQgZm9yIEdTVF9UQUdfTVVTSUNCUkFJTlpfU09SVE5BTUUgKFRTT1ApIHRhZy4KLQkgIEZpeGVzICM0MTQ0OTYuCi0KLTIwMDctMDMtMDkgMTU6MDQ6NDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogRml4IHN0cmVhbSBwb3NpdGlvbiByZXBvcnRpbmcgYWZ0ZXIgYSBzZWVrLiBGaXhlcyAjNDE2NDQ1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X3B1c2hfZXZlbnQpLCAoZ3N0X2F2aV9kZW11eF9kb19zZWVrKSwKLQkgIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwKLQkgIChnc3RfYXZpX2RlbXV4X2NoYWluKToKLQkgIEZpeCBzdHJlYW0gcG9zaXRpb24gcmVwb3J0aW5nIGFmdGVyIGEgc2Vlay4gRml4ZXMgIzQxNjQ0NS4KLQotMjAwNy0wMy0wOSAwODo1ODoyNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvZXF1YWxpemVyLzogUmVmYWN0b3IgcGx1Z2luIGludG8gYSBiYXNlIGNsYXNzIGFuZCBhIGZpcnN0IHN1YmNsYXNzIChuYmFuZCBlcSkuIFRoZSBuYmFuZCBlcSB1c2VzIEdzdENoaWxkUHJveHkgYW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZXF1YWxpemVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiAoX2RvX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9jbGFzc19pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF90eXBlKSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXgpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfaW50ZXJmYWNlX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2Jhc2VfaW5pdCksIChnc3RfaWlyX2VxdWFsaXplcl9jbGFzc19pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9maW5hbGl6ZSksIChzZXR1cF9maWx0ZXIpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3NldF9wcm9wZXJ0eSksIChnc3RfaWlyX2VxdWFsaXplcl9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3NldHVwKSwgKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaDoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYzoKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfYmFzZV9pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX25iYW5kc19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX25iYW5kc19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5oOgotCSAgUmVmYWN0b3IgcGx1Z2luIGludG8gYSBiYXNlIGNsYXNzIGFuZCBhIGZpcnN0IHN1YmNsYXNzIChuYmFuZCBlcSkuIFRoZQotCSAgbmJhbmQgZXEgdXNlcyBHc3RDaGlsZFByb3h5IGFuZCBpcyBjb250cm9sYWJsZS4gTW9yZSBzdWJjbGFzc2VzIHdpbGwKLQkgIGZvbGxvdy4KLQotMjAwNy0wMy0wOCAxNjowMTo0MiArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBNYWtlIGF2aWRlbXV4IGFjY2VwdCBvcHRpb25hbCBoZWFkZXIgY2h1bmtzIGluIGFueSBvcmRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWwgYXQgcmVuZXN0YWRsZXIgZG90IGRlPgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksCi0JICAoZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50KSwgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwgKGdzdF9hdmlfZGVtdXhfY2hhaW4pOgotCSAgTWFrZSBhdmlkZW11eCBhY2NlcHQgb3B0aW9uYWwgaGVhZGVyIGNodW5rcyBpbiBhbnkgb3JkZXIuCi0JICBGaXhlcyAjNDE1NDQ2LgotCi0yMDA3LTAzLTA4IDEyOjIzOjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IERpc2FibGUgdGhlIHN0YXRlcyBjaGVjayB1bnRpbCB0aGUgcmVtYWluaW5nIFZhbGdyaW5kIGVycm9ycyBhcmUgZml4ZWQgb3Igc3VwcHJlc3NlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIERpc2FibGUgdGhlIHN0YXRlcyBjaGVjayB1bnRpbCB0aGUgcmVtYWluaW5nIFZhbGdyaW5kIGVycm9ycwotCSAgYXJlIGZpeGVkIG9yIHN1cHByZXNzZWQuCi0KLTIwMDctMDMtMDggMTA6MjQ6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZTogQWRkIGF1ZGlvZHluYW1pYyBjaGVjayB0byAuY3ZzaWdub3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgIEFkZCBhdWRpb2R5bmFtaWMgY2hlY2sgdG8gLmN2c2lnbm9yZQotCi0yMDA3LTAzLTA4IDEwOjAyOjEyICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogQWRkIG5ldyBhdWRpb2R5bmFtaWMgZWxlbWVudCB3aGljaCBjYW4gYWN0IGFzIGEgY29tcHJlc3NvciBvciBleHBhbmRlci4gU3VwcG9ydGVkIGFyZSBoYXJkLWtuZWUgYW5kIHNvZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQkgICogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jOgotCSAgKGdzdF9hdWRpb19keW5hbWljX2NoYXJhY3RlcmlzdGljc19nZXRfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2R5bmFtaWNfbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2R5bmFtaWNfc2V0X3Byb2Nlc3NfZnVuY3Rpb24pLAotCSAgKGdzdF9hdWRpb19keW5hbWljX2Jhc2VfaW5pdCksIChnc3RfYXVkaW9fZHluYW1pY19jbGFzc19pbml0KSwKLQkgIChnc3RfYXVkaW9fZHluYW1pY19pbml0KSwgKGdzdF9hdWRpb19keW5hbWljX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX2R5bmFtaWNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9hdWRpb19keW5hbWljX3NldHVwKSwKLQkgIChnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faGFyZF9rbmVlX2NvbXByZXNzb3JfaW50KSwKLQkgIChnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faGFyZF9rbmVlX2NvbXByZXNzb3JfZmxvYXQpLAotCSAgKGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9zb2Z0X2tuZWVfY29tcHJlc3Nvcl9pbnQpLAotCSAgKGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9zb2Z0X2tuZWVfY29tcHJlc3Nvcl9mbG9hdCksCi0JICAoZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2hhcmRfa25lZV9leHBhbmRlcl9pbnQpLAotCSAgKGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9oYXJkX2tuZWVfZXhwYW5kZXJfZmxvYXQpLAotCSAgKGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9zb2Z0X2tuZWVfZXhwYW5kZXJfaW50KSwKLQkgIChnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2V4cGFuZGVyX2Zsb2F0KSwKLQkgIChnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meC5jOiAocGx1Z2luX2luaXQpOgotCSAgQWRkIG5ldyBhdWRpb2R5bmFtaWMgZWxlbWVudCB3aGljaCBjYW4gYWN0IGFzIGEgY29tcHJlc3NvciBvcgotCSAgZXhwYW5kZXIuIFN1cHBvcnRlZCBhcmUgaGFyZC1rbmVlIGFuZCBzb2Z0LWtuZWUgb3BlcmF0aW9uIG1vZGVzIHdpdGgKLQkgIHVzZXItc3BlY2lmaWVkIHJhdGlvIGFuZCB0aHJlc2hvbGQuCi0JICBBdHRhY2sgYW5kIHJlbGVhc2UgcGFyYW1ldGVycyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZCBidXQgd2lsbCBmb2xsb3cuCi0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkgIEludGVncmF0ZSBhdWRpb2R5bmFtaWMgaW50byB0aGUgZG9jcy4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jOiAoc2V0dXBfZHluYW1pYyksCi0JICAoY2xlYW51cF9keW5hbWljKSwgKEdTVF9TVEFSVF9URVNUKSwgKGR5bmFtaWNfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgdW5pdCB0ZXN0IGZvciBhdWRpb2R5bmFtaWMuCi0KLTIwMDctMDMtMDcgMTk6NDg6MDMgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogRnJlZSBoYW5kbGVzIHRoYXQgd2UgYWxsb2NhdGVkIHdoZW4gZXhpdGluZyB2aWEgdGhlIGVycm9yIHBhdGhzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOiAoZ3N0X2R2MTM5NHNyY19zdGFydCk6Ci0JICBGcmVlIGhhbmRsZXMgdGhhdCB3ZSBhbGxvY2F0ZWQgd2hlbiBleGl0aW5nIHZpYSB0aGUgZXJyb3IgcGF0aHMuCi0KLTIwMDctMDMtMDcgMTI6MDc6MDcgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svOiBVc2UgYSBnZW5lcmFsIHdhdnBhY2sgZGVidWcgY2F0ZWdvcnkgZm9yIGNvbW1vbiBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2suYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2NvbW1vbi5jOgotCSAgVXNlIGEgZ2VuZXJhbCB3YXZwYWNrIGRlYnVnIGNhdGVnb3J5IGZvciBjb21tb24gY29kZS4KLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jOgotCSAgKGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfc2V0X3Bvc19hYnMpLAotCSAgKGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfc2V0X3Bvc19yZWwpLAotCSAgKGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfd3JpdGVfYnl0ZXMpOgotCSAgVXNlIHRoZSBnZW5lcmFsIHdhdnBhY2sgZGVidWcgY2F0ZWdvcnkgaGVyZSB0b28gYW5kIGFkZCBkZWJ1ZwotCSAgb3V0cHV0IHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBzaG91bGQgbm90IGJlIGNhbGxlZCBhdCBhbGwgYnkKLQkgIHRoZSB3YXZwYWNrIGxpYnJhcnkuCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19wbHVnaW5faW5pdCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19wbHVnaW5faW5pdCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfcGx1Z2luX2luaXQpOgotCSAgQ2hhbmdlIGRlYnVnZ2luZyBjYXRlZ29yeSBuYW1lcyB0byBjb25mb3JtIHRvIHRoZSBjb252ZW50aW9ucy4KLQotMjAwNy0wMy0wNyAxMTozNzoyMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC4qOiBTaGFyZSBxdGRlbXV4IGRlYnVnIGNhdGVnb3J5IGFjcm9zcyBhbGwgZmlsZXMsIG90aGVyd2lzZSBhbGwgZGVidWdnaW5nIGluIGZpbGVzIG90aGVyIHRoYW4gcXRkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBTaGFyZSBxdGRlbXV4IGRlYnVnIGNhdGVnb3J5IGFjcm9zcyBhbGwgZmlsZXMsIG90aGVyd2lzZSBhbGwgZGVidWdnaW5nCi0JICBpbiBmaWxlcyBvdGhlciB0aGFuIHF0ZGVtdXguYyB3b3VsZCBlbmQgdXAgaW4gdGhlIGRlZmF1bHQgY2F0ZWdvcnkuCi0KLTIwMDctMDMtMDcgMTE6MjQ6MDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2xldmVsL2dzdGxldmVsLio6IFJlc29sdmUgbWVzc2FnZSB0aW1lc3RhbXBzIGFnYWluc3QgdGhlIHBsYXliYWNrIHNlZ21lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6IChnc3RfbGV2ZWxfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2xldmVsX3NldF9jYXBzKSwgKGdzdF9sZXZlbF9zdGFydCksIChnc3RfbGV2ZWxfZXZlbnQpLAotCSAgKGdzdF9sZXZlbF90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkgIFJlc29sdmUgbWVzc2FnZSB0aW1lc3RhbXBzIGFnYWluc3QgdGhlIHBsYXliYWNrIHNlZ21lbnQuCi0KLTIwMDctMDMtMDcgMTE6MjM6MjAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLio6IE9uZSBGSVhNRSBsZXNzLCBieSByZXNvbHZpbmcgbWVzc2FnZSB0aW1lc3RhbXBzIGFnYWluc3QgdGhlIHBsYXliYWNrIHNlZ21lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fc3RhcnQpLAotCSAgKGdzdF9zcGVjdHJ1bV9ldmVudCksIChnc3Rfc3BlY3RydW1fdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmg6Ci0JICBPbmUgRklYTUUgbGVzcywgYnkgcmVzb2x2aW5nIG1lc3NhZ2UgdGltZXN0YW1wcyBhZ2FpbnN0IHRoZSBwbGF5YmFjawotCSAgc2VnbWVudC4KLQotMjAwNy0wMy0wNiAyMzoyMTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSAgRml4IENoYW5nZUxvZyBtZXNzYWdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCBDaGFuZ2VMb2cgbWVzc2FnZQotCi0yMDA3LTAzLTA2IDIzOjE5OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogRG9uJ3QgbGVhayBjYXBzOiBtYWtlIGdzdF9pZDNkZW11eF9hZGRfc3JjcGFkKCkgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBjYXBzIHBhc3NlZCB0byAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9hZGRfc3JjcGFkKSwKLQkgIChnc3RfaWQzZGVtdXhfc2lua19hY3RpdmF0ZSk6Ci0JICBEb24ndCBsZWFrIGNhcHM6IG1ha2UgZ3N0X2lkM2RlbXV4X2FkZF9zcmNwYWQoKSBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlCi0JICBjYXBzIHBhc3NlZCB0byBpdCAocHJldmlvdXNsbHkgb25lIGNvZGUgcGF0aCBhc3N1bWVzIGl0IHRha2VzIG93bmVyc2hpcAotCSAgd2hpbGUgYW5vdGhlciBvbmUgYXNzdW1lcyBpdCBkb2Vzbid0KS4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiB0ZXN0cy9maWxlcy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZmlsZXMvaWQzLTQwNzM0OS0xLnRhZzoKLQkgICogdGVzdHMvZmlsZXMvaWQzLTQwNzM0OS0yLnRhZzoKLQkgIEFkZCBkaXJlY3Rvcnkgd2hlcmUgZGF0YSBmb3IgdW5pdCB0ZXN0cyBjYW4gYmUgc3RvcmVkLgotCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM2RlbXV4LmM6IChwYWRfYWRkZWRfY2IpLCAoZXJyb3JfY2IpLAotCSAgKHJlYWRfdGFnc19mcm9tX2ZpbGUpLCAocnVuX2NoZWNrX2Zvcl9maWxlKSwKLQkgIChjaGVja19kYXRlXzE5NzdfMDZfMjMpLCAoR1NUX1NUQVJUX1RFU1QpLCAoaWQzZGVtdXhfc3VpdGUpOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgaWQzZGVtdXgsIGFuZCBpbiBwYXJ0aWN1bGFyIGZvciBidWcgIzQwNzM0OS4gT25seQotCSAgdGVzdGluZyBwdWxsLW1vZGUgZm9yIG5vdzsgcHVzaCBtb2RlIGRvZXNuJ3Qgd29yayB5ZXQgYmVjYXVzZSB0aGUgdGVzdAotCSAgZmlsZXMgYXJlIHNtYWxsZXIgdGhhbiBJRDNfVFlQRV9GSU5EX01JTl9TSVpFLgotCi0yMDA3LTAzLTA2IDIyOjE0OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogQWRkIG1pc3NpbmcgYmFja3NsYXNoIGF0IGVuZCBvZiBsaW5lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgQWRkIG1pc3NpbmcgYmFja3NsYXNoIGF0IGVuZCBvZiBsaW5lLgotCi0yMDA3LTAzLTA2IDE4OjM2OjA5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogY29tbW9uOgotCSAgVHJpZ2dlciByZWJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBUcmlnZ2VyIHJlYnVpbGQuCi0KLTIwMDctMDMtMDYgMTg6MTY6NDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC86IERvIG5vdCBjb252ZXJ0IG9ic29sZXRlIFREQS9UREFUIGZyYW1lcyB0byBURFJDIGZyYW1lcywgb3RoZXJ3aXNlIHRoZSBmb3VyLWRpZ2l0IG51bWJlciB3aWxsIGJlIGludGVycC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6IChpZDNkZW11eF9pZDN2Ml9mcmFtZXNfdG9fdGFnX2xpc3QpOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5oOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKGlkM2RlbXV4X2lkM3YyX3BhcnNlX2ZyYW1lKSwKLQkgIChwYXJzZV9vYnNvbGV0ZV90ZGF0X2ZyYW1lKToKLQkgIERvIG5vdCBjb252ZXJ0IG9ic29sZXRlIFREQS9UREFUIGZyYW1lcyB0byBURFJDIGZyYW1lcywgb3RoZXJ3aXNlCi0JICB0aGUgZm91ci1kaWdpdCBudW1iZXIgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHllYXIsIHdoZXJlYXMgaXQgaXMKLQkgIG1vbnRoIGFuZCBkYXkgaW4gRERNTSBmb3JtYXQuIEluc3RlYWQsIHBhcnNlIFREQVQgZnJhbWVzIGFuZCBmaXggdXAKLQkgIHRoZSBkYXRlIGluIHRoZSBHU1RfVEFHX0RBVEUgdGFnIGxhdGVyIGlmIHdlIGFsc28gZXh0cmFjdGVkIGEgeWVhci4KLQkgIEZpeGVzICM0MDczNDkuCi0KLTIwMDctMDMtMDYgMTQ6NTM6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOiBGaXggdXAgdGhlIGRpc3Bvc2UgbG9naWMgc28gaXQgZG9lc24ndCBsZWFrLCBhbmQgZml4IHNldHRpbmcgb2YgdGhlIGNoaWxkIHN0YXRlIHNvIHRoYXQgd2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOiAoZ3N0X3N3aXRjaF9zaW5rX2Rpc3Bvc2UpLAotCSAgKGdzdF9zd2l0Y2hfY29tbWl0X25ld19raWQpOgotCSAgRml4IHVwIHRoZSBkaXNwb3NlIGxvZ2ljIHNvIGl0IGRvZXNuJ3QgbGVhaywgYW5kIGZpeCBzZXR0aW5nIG9mCi0JICB0aGUgY2hpbGQgc3RhdGUgc28gdGhhdCB3ZSBkb24ndCBzZXQgYSBjaGlsZCB0byBvdXIgY3VycmVudCBzdGF0ZQotCSAganVzdCBhcyB3ZSBhcmUgY2hhbmdpbmcgaXQgdG8gc29tZXRoaW5nIGVsc2UuCi0KLTIwMDctMDMtMDYgMTM6NTc6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiBGaXggYW5kIGNsZWFudXAgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX2luaXQpLCAoZ3N0X3NwZWN0cnVtX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3NwZWN0cnVtX3RyYW5zZm9ybV9pcCk6Ci0JICBGaXggYW5kIGNsZWFudXAgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMuCi0JICBBZGQgRklYTUVzIGZvciBzdHVmZiB0aGF0IGxvb2tzIHJhdGhlciB3cm9uZy4KLQotMjAwNy0wMy0wNiAxMzoyMToyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2dvb20vZ3N0Z29vbS4qOiBEb2N1bWVudCwgZml4IGFuZCBpbXByb3ZlIGdvb20gYWRhcHRlciBiZWhhdmlvdXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21fc3JjX3NldGNhcHMpLCAoZ2V0X2J1ZmZlciksCi0JICAoZ3N0X2dvb21fY2hhaW4pOgotCSAgKiBnc3QvZ29vbS9nc3Rnb29tLmg6Ci0JICBEb2N1bWVudCwgZml4IGFuZCBpbXByb3ZlIGdvb20gYWRhcHRlciBiZWhhdmlvdXIuCi0JICBGaXhlcyAjNDA3MDA2LgotCi0yMDA3LTAzLTA1IDE4OjQzOjI5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2VzZC9lc2RzaW5rLmM6IFVucmVmIHN0YXRpYyBwYWQgdGVtcGxhdGUgYWZ0ZXIgdXNpbmcgaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19vcGVuKToKLQkgIFVucmVmIHN0YXRpYyBwYWQgdGVtcGxhdGUgYWZ0ZXIgdXNpbmcgaXQuCi0KLTIwMDctMDMtMDUgMTc6MTc6MDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOiBGaXggdXAgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBvZiB0aGUgY2hpbGQgZWxlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuYzogKGdzdF9zd2l0Y2hfc2lua19kaXNwb3NlKSwKLQkgIChnc3Rfc3dpdGNoX2NvbW1pdF9uZXdfa2lkKToKLQkgIEZpeCB1cCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIG9mIHRoZSBjaGlsZCBlbGVtZW50cy4KLQotMjAwNy0wMy0wNSAxNzowODozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEZpeCBlbmNvZGluZy1uYW1lIGNhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6IChnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOiAoZ3N0X3J0cF90aGVvcmFfcGF5X2ZpbmlzaF9oZWFkZXJzKToKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzogKGdzdF9ydHBfdm9yYmlzX3BheV9maW5pc2hfaGVhZGVycyk6Ci0JICBGaXggZW5jb2RpbmctbmFtZSBjYXNlLgotCi0yMDA3LTAzLTA1IDE2OjM5OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogRml4IHNwZWV4IChkZSlwYXlsb2FkZXIuIEZpeGVzICMzNTgwNDAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6IChnc3RfcnRwX3NwZWV4X2RlcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfc3BlZXhfZGVwYXlfZ2V0X21vZGUpLCAoZ3N0X3J0cF9zcGVleF9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3NwZWV4X2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6IChnc3RfcnRwX3NwZWV4X3BheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfc3BlZXhfcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9zcGVleF9wYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9zcGVleF9wYXlfcGFyc2VfaWRlbnQpLCAoZ3N0X3J0cF9zcGVleF9wYXlfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cF9zcGVleF9wYXlfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5oOgotCSAgRml4IHNwZWV4IChkZSlwYXlsb2FkZXIuIEZpeGVzICMzNTgwNDAuCi0KLTIwMDctMDMtMDUgMTU6NDI6NTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOiBJbnN0YWxsIGZha2VzaW5rIGluIE5VTEwgYnkgZml4aW5nIHNvbWUgYnJva2VuIGxvZ2ljLiBUaGlzIG9idmlhdGVzIHRoZSBuZWVkIHRvIG1hbnVhbGx5IHMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOiAoZ3N0X3N3aXRjaF9zaW5rX3Jlc2V0KSwKLQkgIChnc3Rfc3dpdGNoX2NvbW1pdF9uZXdfa2lkKSwgKGdzdF9zd2l0Y2hfc2lua19zZXRfY2hpbGQpOgotCSAgSW5zdGFsbCBmYWtlc2luayBpbiBOVUxMIGJ5IGZpeGluZyBzb21lIGJyb2tlbiBsb2dpYy4gVGhpcyBvYnZpYXRlcwotCSAgdGhlIG5lZWQgdG8gbWFudWFsbHkgc2V0IF9JU19TSU5LLgotCSAgQWRkIHNvbWUgY29tbWVudHMgYW5kIHJlbW92ZSBhIGxpdHRsZSBjcnVmdCB3aGlsZSBJJ20gYXQgaXQuCi0KLTIwMDctMDMtMDUgMTQ6NDY6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmM6IE1hcmsgdXMgYXMgYSBzaW5rIHdoZW4gd2UgaGF2ZSBubyBmYWtlc2luayBpbiBOVUxMLiBGaXhlcyAjNDE0ODg3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmM6IChnc3Rfc3dpdGNoX3NpbmtfcmVzZXQpOgotCSAgTWFyayB1cyBhcyBhIHNpbmsgd2hlbiB3ZSBoYXZlIG5vIGZha2VzaW5rIGluIE5VTEwuIEZpeGVzICM0MTQ4ODcuCi0KLTIwMDctMDMtMDUgMDg6MzA6NTIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtLzogUmVtb3ZlIHR3byBvYnNvbGV0ZSBhbmQgY29uZnVzaW5nIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jOiAobWVzc2FnZV9oYW5kbGVyKToKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmM6IChtZXNzYWdlX2hhbmRsZXIpOgotCSAgUmVtb3ZlIHR3byBvYnNvbGV0ZSBhbmQgY29uZnVzaW5nIGNvbW1lbnRzLgotCi0yMDA3LTAzLTA0IDE4OjUyOjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwby9QT1RGSUxFUy5pbjogVXBkYXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvL1BPVEZJTEVTLmluOgotCSAgVXBkYXRlLgotCi0yMDA3LTAzLTA0IDE3OjMzOjM0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IEdhaCEgQWxzbyBkaXNhYmxlIGdjb25mdmlkZW9zaW5rIGZyb20gdGhlIHRlc3RzLCBvdGhlcndpc2UgaXQgd2lsbCBpbnN0YW50aWF0ZSBhdXRvdmlkZW9zaW5rLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBHYWghIEFsc28gZGlzYWJsZSBnY29uZnZpZGVvc2luayBmcm9tIHRoZSB0ZXN0cywgb3RoZXJ3aXNlCi0JICBpdCB3aWxsIGluc3RhbnRpYXRlIGF1dG92aWRlb3NpbmssIGFuZCBkZmJ2aWRlb3NpbmsgYW5kCi0JICBsZWFrIG9uIHRoZSBidWlsZGJvdHMuCi0KLTIwMDctMDMtMDQgMTc6MTM6MTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOiBNYWtlIHN1cmUgd2UgYWx3YXlzIGRlc3Ryb3kgb3VyIGxpYmNkaW8gaGFuZGxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW9jZGRhc3JjLmM6IChnc3RfY2Rpb19jZGRhX3NyY19vcGVuKSwKLQkgIChnc3RfY2Rpb19jZGRhX3NyY19maW5hbGl6ZSk6Ci0JICBNYWtlIHN1cmUgd2UgYWx3YXlzIGRlc3Ryb3kgb3VyIGxpYmNkaW8gaGFuZGxlLgotCi0yMDA3LTAzLTA0IDE3OjA1OjU4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IERpc2FibGUgYXV0b3ZpZGVvc2luayBzbyB0aGUgYnVpbGRib3RzIGRvbid0IGJhcmYgb3ZlciBtZW1vcnkgbGVha2VkIGluIHRoZSBkaXJlY3RmYiBzaW5rLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRGlzYWJsZSBhdXRvdmlkZW9zaW5rIHNvIHRoZSBidWlsZGJvdHMgZG9uJ3QgYmFyZiBvdmVyIG1lbW9yeQotCSAgbGVha2VkIGluIHRoZSBkaXJlY3RmYiBzaW5rLgotCi0yMDA3LTAzLTA0IDE1OjI4OjMwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogQ2hhaW4gdXAgaW4gZGlzcG9zZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IChnc3RfeGltYWdlX3NyY19kaXNwb3NlKToKLQkgIENoYWluIHVwIGluIGRpc3Bvc2UKLQotMjAwNy0wMy0wNCAxNTowNzoxNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogVXNlIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlIGluc3RlYWQgb2Ygc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQrcGFkX25ldy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6IChnc3RfbXVsdGlwYXJ0X2RlbXV4X2luaXQpLAotCSAgKGdzdF9tdWx0aXBhcnRfZmluZF9wYWRfYnlfbWltZSk6Ci0JICBVc2UgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgaW5zdGVhZCBvZgotCSAgc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQrcGFkX25ldy4KLQotMjAwNy0wMy0wNCAxNDo1Njo1MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IENhdGNoIHRoZSBjYXNlIHdoZXJlIG5vIGNsb2NrIGhhcyBiZWVuIHNldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiAoZ3N0X3hpbWFnZV9zcmNfY3JlYXRlKToKLQkgIENhdGNoIHRoZSBjYXNlIHdoZXJlIG5vIGNsb2NrIGhhcyBiZWVuIHNldC4KLQotMjAwNy0wMy0wNCAxMzo1MjowMyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIEZpeCBhIGJ1bmNoIG9mIGxlYWtzIHNob3duIGJ5IHRoZSBuZXdseS1hZGRlZCBzdGF0ZXMgdGVzdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY19lbmNfZmluYWxpemUpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogKGdzdF9nY29uZl9hdWRpb19zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zaW5rX2Rpc3Bvc2UpLCAoZ3N0X2djb25mX2F1ZGlvX3NpbmtfZmluYWxpemUpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOiAoZ3N0X2djb25mX2F1ZGlvX3NyY19iYXNlX2luaXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zcmNfY2xhc3NfaW5pdCksIChnc3RfZ2NvbmZfYXVkaW9fc3JjX2Rpc3Bvc2UpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zcmNfZmluYWxpemUpLCAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuYzogKGdzdF9nY29uZl92aWRlb19zaW5rX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCksIChnc3RfZ2NvbmZfdmlkZW9fc2lua19maW5hbGl6ZSksCi0JICAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5jOiAoZ3N0X2djb25mX3ZpZGVvX3NyY19iYXNlX2luaXQpLAotCSAgKGdzdF9nY29uZl92aWRlb19zcmNfY2xhc3NfaW5pdCksIChnc3RfZ2NvbmZfdmlkZW9fc3JjX2Rpc3Bvc2UpLAotCSAgKGdzdF9nY29uZl92aWRlb19zcmNfZmluYWxpemUpLCAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0c3dpdGNoc2luay5jOiAoZ3N0X3N3aXRjaF9zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zd2l0Y2hfc2lua19yZXNldCksIChnc3Rfc3dpdGNoX3Npbmtfc2V0X2NoaWxkKToKLQkgICogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzogKGdzdF9oYWxfYXVkaW9fc2lua19iYXNlX2luaXQpOgotCSAgKiBleHQvaGFsL2dzdGhhbGF1ZGlvc3JjLmM6IChnc3RfaGFsX2F1ZGlvX3NyY19iYXNlX2luaXQpOgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiAoZ3N0X3Nob3V0MnNlbmRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3Nob3V0MnNlbmRfaW5pdCksIChnc3Rfc2hvdXQyc2VuZF9maW5hbGl6ZSk6Ci0JICAqIGdzdC9kZWJ1Zy90ZXN0cGx1Z2luLmM6IChnc3RfdGVzdF9jbGFzc19pbml0KSwKLQkgIChnc3RfdGVzdF9maW5hbGl6ZSk6Ci0JICAqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9mbHhkZWNfZGlzcG9zZSk6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9maW5hbGl6ZSk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOiAoZ3N0X3J0cF9tcDRnX3BheV9maW5hbGl6ZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2luaXQpLAotCSAgKGdzdF9ydHNwc3JjX2ZpbmFsaXplKToKLQkgICogZ3N0L3J0c3AvcnRzcGV4dHdtcy5jOiAocnRzcF9leHRfd21zX2ZyZWVfY29udGV4dCk6Ci0JICAqIGdzdC9ydHNwL3J0c3BleHR3bXMuaDoKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NtcHRlX2ZpbmFsaXplKToKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfZmluYWxpemUpOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF91ZHBzaW5rX2ZpbmFsaXplKToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfZGlzcG9zZSksCi0JICAoZ3N0X3dhdnBhcnNlX3NpbmtfYWN0aXZhdGUpOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3Nfc2lua19maW5hbGlzZSk6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3NzX3NyY19jbGFzc19pbml0KSwKLQkgIChnc3Rfb3NzX3NyY19maW5hbGl6ZSk6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogKGdzdF92NGwyX29iamVjdF9kZXN0cm95KToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfdjRsMnNyY19maW5hbGl6ZSk6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IChnc3RfeGltYWdlX3NyY194aW1hZ2VfZ2V0KToKLQkgIEZpeCBhIGJ1bmNoIG9mIGxlYWtzIHNob3duIGJ5IHRoZSBuZXdseS1hZGRlZCBzdGF0ZXMgdGVzdC4KLQotMjAwNy0wMy0wNCAxMzo0MTowMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGV4dC9kdi9nc3RkdmRlYy5jOiBVc2UgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgaW5zdGVhZCBvZiBzdGF0aWNfcGFkX3RlbXBsYXRlX2dldCtwYWRfbmV3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2luaXQpOgotCSAgVXNlIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlIGluc3RlYWQgb2YKLQkgIHN0YXRpY19wYWRfdGVtcGxhdGVfZ2V0K3BhZF9uZXcuCi0KLTIwMDctMDMtMDMgMTM6MDY6MjEgKzAwMDAgIExvw69jIE1pbmllciA8bG9vbCtnbm9tZUB2aWEuZWNwLmZyPgotCi0JICBEb24ndCBtaXggdGFicyBhbmQgc3BhY2VzICgjNDE0MTY4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IExvw69jIE1pbmllciA8bG9vbCtnbm9tZSBhdCB2aWEgZWNwIGZyPgotCSAgKiBleHQvbGliY2FjYS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgbWl4IHRhYnMgYW5kIHNwYWNlcyAoIzQxNDE2OCkuCi0KLTIwMDctMDMtMDIgMjE6MzU6MTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZ2VuZXJpYy8uY3ZzaWdub3JlOiBJZ25vcmUgZmlsZXMgdG8gcGxlYXNlIGJ1aWxkYm90LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvLmN2c2lnbm9yZToKLQkgIElnbm9yZSBmaWxlcyB0byBwbGVhc2UgYnVpbGRib3QuCi0KLTIwMDctMDMtMDIgMjE6MDE6MTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IFVuYnJlYWsgbXkgcHJldmlvdXMgY29tbWl0IChzd2FwcGVkIG5vbWluYXRvciAmIGRlbm9taW5hdG9yKS4gVGltLCB0aGFua3MgZm9yIHNwb3R0aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpOgotCSAgVW5icmVhayBteSBwcmV2aW91cyBjb21taXQgKHN3YXBwZWQgbm9taW5hdG9yICYgZGVub21pbmF0b3IpLiBUaW0sCi0JICB0aGFua3MgZm9yIHNwb3R0aW5nLgotCi0yMDA3LTAzLTAyIDE2OjA4OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOiBTbWFsbCBjb2RlIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW9jZGRhc3JjLmM6IChnc3RfY2Rpb19jZGRhX3NyY19wcm9iZV9kZXZpY2VzKSwKLQkgIChnc3RfY2Rpb19jZGRhX3NyY19yZWFkX3NlY3RvciksIChnc3RfY2Rpb19jZGRhX3NyY19vcGVuKSwKLQkgIChnc3RfY2Rpb19jZGRhX3NyY19maW5hbGl6ZSk6Ci0JICBTbWFsbCBjb2RlIGNsZWFudXBzLgotCSAgRG9uJ3QgdXNlIHBhZF9hbGxvYyBhcyB0aGUgYmFzZSBjbGFzcyBjYW5ub3QgZGVhbCB3aXRoIHRoZSBlcnJvciBjb2Rlcy4KLQotMjAwNy0wMy0wMiAxMzo0MDowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogRml4IGRvYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfdWRwc3JjX2NyZWF0ZSk6Ci0JICBGaXggZG9jLgotCi0yMDA3LTAzLTAyIDEzOjI5OjI1ICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogSGFuZGxlIHJvdW5kaW5nIGJldHRlciB0byBub3QgZHJvcCBsYXN0IHNhbXBsZSBmcmFtZS4gRml4ZXMgIzM1NjY5MgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6ICh1aW50NjRfY2VpbGluZ19zY2FsZV9pbnQpLAotCSAgKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpOgotCSAgSGFuZGxlIHJvdW5kaW5nIGJldHRlciB0byBub3QgZHJvcCBsYXN0IHNhbXBsZSBmcmFtZS4gRml4ZXMgIzM1NjY5MgotCi0yMDA3LTAzLTAyIDEzOjE5OjU3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IERpc2FibGUgY2FjYXNpbmsgZnJvbSB0aGUgc3RhdGVzIGNoZWNrIHRvbyAtIGl0IGFsc28gY2FsbHMgZXhpdCgxKSBvbiB1cyB3aGVuIGl0IGNhbid0IGZpbmQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBEaXNhYmxlIGNhY2FzaW5rIGZyb20gdGhlIHN0YXRlcyBjaGVjayB0b28gLSBpdCBhbHNvIGNhbGxzIGV4aXQoMSkKLQkgIG9uIHVzIHdoZW4gaXQgY2FuJ3QgZmluZCBhIHRlcm1pbmFsIHRvIHRhbGsgdG8uCi0KLTIwMDctMDMtMDIgMTI6NTY6MTMgKzAwMDAgIFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLio6IEFkZCBzdXBwb3J0IHRvIHN0cmlwIHByb3ByaWV0YXJ5IGhlYWRlcnMuIEZpeGVzICMzNTAyOTYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXIgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY2xhc3NfaW5pdCksIChnc3RfdWRwc3JjX2luaXQpLAotCSAgKGdzdF91ZHBzcmNfY3JlYXRlKSwgKGdzdF91ZHBzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICBBZGQgc3VwcG9ydCB0byBzdHJpcCBwcm9wcmlldGFyeSBoZWFkZXJzLiBGaXhlcyAjMzUwMjk2LgotCi0yMDA3LTAzLTAyIDEyOjUyOjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOiBGaXggY29tcGlsYXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzogKGdzdF9ydHBfbXAydF9kZXBheV9wcm9jZXNzKToKLQkgIEZpeCBjb21waWxhdGlvbi4KLQotMjAwNy0wMy0wMiAxMjoxNjoxNiArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuKjogQWRkIHN1cHBvcnQgdG8gc3RyaXAgb2ZmIHByb3ByaWV0YXJ5IGhlYWRlcnMuIEZpeGVzICMzNTAyNzguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXIgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzogKGdzdF9ydHBfbXAydF9kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfaW5pdCksIChnc3RfcnRwX21wMnRfZGVwYXlfcHJvY2VzcyksCi0JICAoZ3N0X3J0cF9tcDJ0X2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9tcDJ0X2RlcGF5X2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5Lmg6Ci0JICBBZGQgc3VwcG9ydCB0byBzdHJpcCBvZmYgcHJvcHJpZXRhcnkgaGVhZGVycy4gRml4ZXMgIzM1MDI3OC4KLQotMjAwNy0wMy0wMiAxMToyMjozNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2hhbC9oYWwuYzogRml4IGNvbXBpbGF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9oYWwvaGFsLmM6Ci0JICBGaXggY29tcGlsYXRpb24uCi0KLTIwMDctMDMtMDIgMTA6NTQ6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy4qOiBSZW1vdmUgZGV2aWNlLW5hbWUgZnJvbSBHc3RTdW5BdWRpb1NyYy4gRml4ZXMgIzQxMjU5Ny4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzogKGdzdF9zdW5hdWRpb3NyY19jbGFzc19pbml0KSwKLQkgIChnc3Rfc3VuYXVkaW9zcmNfaW5pdCksIChnc3Rfc3VuYXVkaW9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc3VuYXVkaW9zcmNfb3Blbik6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5oOgotCSAgUmVtb3ZlIGRldmljZS1uYW1lIGZyb20gR3N0U3VuQXVkaW9TcmMuIEZpeGVzICM0MTI1OTcuCi0KLTIwMDctMDMtMDEgMjE6NTA6MzYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L2hhbC86IEhhdmluZyBOVUxMIGFzIFVESSBwcmV2aW91c2x5IHNlbGVjdGVkIHRoZSBkZWZhdWx0IHNpbmsvc3JjLiBDaGFuZ2UgdGhpcyBiYWNrIGJ1dCBtZW50aW9uIGl0IGluIHRoZSBkZWJ1ZyBvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2hhbC9nc3RoYWxhdWRpb3NpbmsuYzogKGRvX3RvZ2dsZV9lbGVtZW50KToKLQkgICogZXh0L2hhbC9nc3RoYWxhdWRpb3NyYy5jOiAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgSGF2aW5nIE5VTEwgYXMgVURJIHByZXZpb3VzbHkgc2VsZWN0ZWQgdGhlIGRlZmF1bHQgc2luay9zcmMuIENoYW5nZQotCSAgdGhpcyBiYWNrIGJ1dCBtZW50aW9uIGl0IGluIHRoZSBkZWJ1ZyBvdXRwdXQuCi0JICAqIGV4dC9oYWwvaGFsLmM6IChnc3RfaGFsX2dldF9hbHNhX2VsZW1lbnQpLAotCSAgKGdzdF9oYWxfZ2V0X29zc19lbGVtZW50KSwgKGdzdF9oYWxfZ2V0X3N0cmluZyksCi0JICAoZ3N0X2hhbF9yZW5kZXJfYmluX2Zyb21fdWRpKSwgKGdzdF9oYWxfZ2V0X2F1ZGlvX3NpbmspLAotCSAgKGdzdF9oYWxfZ2V0X2F1ZGlvX3NyYyk6Ci0JICAqIGV4dC9oYWwvaGFsLmg6Ci0JICBSZWZhY3RvciBhIGJpdCwgY2hlY2sgYWxsIGVycm9yIGNvbmRpdGlvbnMsIGdyZWF0bHkgaW1wcm92ZSBkZWJ1Z2dpbmcKLQkgIGFuZCBmaXggc29tZSBwb3NzaWJsZSBtZW1vcnkgbGVha3MuIEFsc28gaW1wbGVtZW50IE9TUyBzdXBwb3J0Ci0JICBhbmQgYWxsb3cgc3BlY2lmeWluZyBhbiBVREkgdGhhdCBwb2ludHMgdG8gYSByZWFsIGRldmljZS4gRm9yIHRoaXMgdGhlCi0JICBjaGlsZCBkZXZpY2Ugd2hpY2ggc3VwcG9ydHMgQUxTQSAocHJlZmVycmVkKSBvciBPU1MgaXMgdXNlZC4KLQkgIEFzIGEgc2lkZSBlZmZlY3QgdGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIG5vdyB0byBnZXQgYSBhbHNhc2luayBpbgotCSAgaGFsYXVkaW9zcmMgYW5kIGEgYWxzYXNyYyBpbiBoYWxhdWRpb3NpbmsuCi0KLTIwMDctMDMtMDEgMTg6NDc6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRXJyb3JzIGZyb20gdGhlIHVkcCBzb3VyY2VzIGFyZSBub3QgZmF0YWwgdW5sZXNzIGFsbCBvZiB0aGVtIGFyZSBpbiBlcnJvci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChmaW5kX3N0cmVhbV9ieV9jaGFubmVsKSwKLQkgIChmaW5kX3N0cmVhbV9ieV91ZHBzcmMpLCAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpOgotCSAgRXJyb3JzIGZyb20gdGhlIHVkcCBzb3VyY2VzIGFyZSBub3QgZmF0YWwgdW5sZXNzIGFsbCBvZiB0aGVtIGFyZSBpbgotCSAgZXJyb3IuCi0KLTIwMDctMDMtMDEgMTg6MTQ6NDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbTogRGlzYWJsZSBhYXNpbmsgaW4gdGhlIHN0YXRlcyB0ZXN0LiBJIHN1c3BlY3QgdGhpcyBpcyB0aGUgZWxlbWVudCB0aGF0IGlzIGNhbGxpbmcgZXhpdCgxKSB3aGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIERpc2FibGUgYWFzaW5rIGluIHRoZSBzdGF0ZXMgdGVzdC4gSSBzdXNwZWN0IHRoaXMgaXMgdGhlIGVsZW1lbnQgdGhhdAotCSAgaXMgY2FsbGluZyBleGl0KDEpIHdoZW4gaXQgY2FuJ3QgcHJvY2VlZC4KLQotMjAwNy0wMy0wMSAxNzoyNjozMCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEcmF3IHBsdWdpbnMgaW4gZnJvbSB0aGUgYnVpbGQgdHJlZSBzeXMvIGRpciwgcmF0aGVyIHRoYW4gcGlja2luZyB1cCB0aGUgYWxyZWFkeSBpbnN0YWxsZWQgdi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRHJhdyBwbHVnaW5zIGluIGZyb20gdGhlIGJ1aWxkIHRyZWUgc3lzLyBkaXIsIHJhdGhlciB0aGFuIHBpY2tpbmcKLQkgIHVwIHRoZSBhbHJlYWR5IGluc3RhbGxlZCB2ZXJzaW9ucy4KLQotMjAwNy0wMy0wMSAxMDo0NDozNiArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogRXJyb3Igb3V0IGNvcnJlY3RseSB3aGVuIGdldHRpbmcgeGNvbnRleHQgZmFpbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDMtMDEgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogKGdzdF94aW1hZ2Vfc3JjX29wZW5fZGlzcGxheSk6Ci0JICBFcnJvciBvdXQgY29ycmVjdGx5IHdoZW4gZ2V0dGluZyB4Y29udGV4dCBmYWlscy4KLQotMjAwNy0wMy0wMSAwOToyOTozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IE1ha2Ugc3RhdGUgY2hhbmdlIHRvIFBBVVNFRCBOT19QUkVST0xMIGJlY2F1c2UgdGhhdCdzIHdoYXQgaXQgd2lsbCBiZSBpbiB0aGUgZnV0dXJlIGFuZCBydHNwc3JjLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICBNYWtlIHN0YXRlIGNoYW5nZSB0byBQQVVTRUQgTk9fUFJFUk9MTCBiZWNhdXNlIHRoYXQncyB3aGF0IGl0IHdpbGwgYmUgaW4KLQkgIHRoZSBmdXR1cmUgYW5kIHJ0c3BzcmMgcmVsaWVzIG9uIGl0LgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksCi0JICAoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkgIERvbid0IGVycm9yIG91dCB3aGVuIHdlIGRvbid0IGdldCBhbiBlcnJvciBmcm9tIHRoZSBzdGF0ZSBjaGFuZ2UKLQkgIGZ1bmN0aW9uLgotCi0yMDA3LTAzLTAxIDAxOjQ4OjU5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC9oYWwvOiBDaGVjayBpZiB0aGUgZGV2aWNlIFVESSBpcyBzZXQgYmVmb3JlIHRyeWluZyB0byBxdWVyeSBIQUwgYWJvdXQgaXQgYW5kIGdpdmUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpZiBpdCB3YS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zaW5rLmM6IChkb190b2dnbGVfZWxlbWVudCk6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzogKGRvX3RvZ2dsZV9lbGVtZW50KToKLQkgIENoZWNrIGlmIHRoZSBkZXZpY2UgVURJIGlzIHNldCBiZWZvcmUgdHJ5aW5nIHRvIHF1ZXJ5IEhBTAotCSAgYWJvdXQgaXQgYW5kIGdpdmUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpZiBpdCB3YXNuJ3Qgc2V0LgotCSAgKiBleHQvaGFsL2hhbC5jOiAoZ3N0X2hhbF9nZXRfc3RyaW5nKToKLQkgIERvbid0IHF1ZXJ5IEhBTCBmb3IgTlVMTCBVRElzLiBQYXNzaW5nIE5VTEwgYXMgVURJIHRvIEhBTAotCSAgZ2l2ZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaW4gRC1CdXMgd2hlbiBydW5uaW5nIHdpdGgKLQkgIERCVVNfRkFUQUxfV0FSTklOR1M9MS4KLQotMjAwNy0wMi0yOCAxOToyOTo0MiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZSBjb25maWcgdG8gdHJ1bmsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGNvbmZpZyB0byB0cnVuawotCi0yMDA3LTAyLTI4IDE5OjI5OjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBDb252ZXJ0IHRvIG5ldyBBR19HU1Qgc3R5bGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQ29udmVydCB0byBuZXcgQUdfR1NUIHN0eWxlLgotCi0yMDA3LTAyLTI4IDEyOjU5OjQzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgdGVzdHMvY2hlY2svOiBhZGQgdGVzdCBmb3Igc3RhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmM6IChHU1RfU1RBUlRfVEVTVCksIChzdGF0ZXNfc3VpdGUpOgotCSAgYWRkIHRlc3QgZm9yIHN0YXRlcwotCi0yMDA3LTAyLTI4IDEwOjU4OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOiBBZGQgbmV3IHZpZGVvZmlsdGVyIGNoZWNrIHRvIC5jdnNpZ25vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgIEFkZCBuZXcgdmlkZW9maWx0ZXIgY2hlY2sgdG8gLmN2c2lnbm9yZS4KLQotMjAwNy0wMi0yOCAxMDo1NDo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBGaXggY29tYmluZWQgZmxvdyByZXR1cm4uIEZpeGVzICM0MTI2MDguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9jb21iaW5lX2Zsb3dzKSwKLQkgIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwKLQkgIChnc3RfYXZpX2RlbXV4X2xvb3ApLCAoZ3N0X2F2aV9kZW11eF9jaGFpbik6Ci0JICBGaXggY29tYmluZWQgZmxvdyByZXR1cm4uIEZpeGVzICM0MTI2MDguCi0KLTIwMDctMDItMjggMTA6NDE6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbTogRGlzdCBoZWFkZXIuLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkgIERpc3QgaGVhZGVyLi4KLQotMjAwNy0wMi0yOCAxMDoyOTowOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmg6IEFkZCBoZWFkZXIgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5oOgotCSAgQWRkIGhlYWRlciB0b28uCi0KLTIwMDctMDItMjggMTA6MTc6MTUgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC92aWRlb2ZpbHRlci86IFBvcnQgZ2FtbWEgZmlsdGVyIHRvIDAuMTAuIEZpeGVzICM0MTI3MDQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOiAoZ3N0X2dhbW1hX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2dhbW1hX2NsYXNzX2luaXQpLCAoZ3N0X2dhbW1hX2luaXQpLCAoZ3N0X2dhbW1hX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2dhbW1hX2dldF9wcm9wZXJ0eSksIChnc3RfZ2FtbWFfY2FsY3VsYXRlX3RhYmxlcyksCi0JICAob2lsX3RhYmxlbG9va3VwX3U4KSwgKGdzdF9nYW1tYV9zZXRfY2FwcyksCi0JICAoZ3N0X2dhbW1hX3BsYW5hcjQxMV9pcCksIChnc3RfZ2FtbWFfdHJhbnNmb3JtX2lwKSwgKHBsdWdpbl9pbml0KToKLQkgIFBvcnQgZ2FtbWEgZmlsdGVyIHRvIDAuMTAuIEZpeGVzICM0MTI3MDQuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2ZpbHRlci5jOiAoc2V0dXBfZmlsdGVyKSwKLQkgIChjbGVhbnVwX2ZpbHRlciksIChjaGVja19maWx0ZXIpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHZpZGVvYmFsYW5jZV9zdWl0ZSksICh2aWRlb2ZsaXBfc3VpdGUpLCAoZ2FtbWFfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgdW5pdCB0ZXN0cyBmb3IgdmlkZW9maWx0ZXJzLgotCi0yMDA3LTAyLTI4IDEwOjA2OjI3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9VUkxTOiBBZGQgYW5vdGhlciBpbnRlcmVzdGluZyB0ZXN0IHVybC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9VUkxTOgotCSAgQWRkIGFub3RoZXIgaW50ZXJlc3RpbmcgdGVzdCB1cmwuCi0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmM6IChydHNwX21lc3NhZ2VfZ2V0X2hlYWRlcik6Ci0JICBEb24ndCBhbGxvdyBnZXR0aW5nIGhlYWRlciBmaWVsZHMgZnJvbSBkYXRhIHBhY2tldHMuCi0KLTIwMDctMDItMjcgMjM6NDM6MDggKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZXh0L3Nob3V0Mi9nc3RzaG91dDIuKjogQWRkIGEgcHJvcGVydHkgZm9yIHVzZXJuYW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChnc3Rfc2hvdXQyc2VuZF9jbGFzc19pbml0KSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9pbml0KSwgKGdzdF9zaG91dDJzZW5kX3N0YXJ0KSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9zZXRfcHJvcGVydHkpLCAoZ3N0X3Nob3V0MnNlbmRfZ2V0X3Byb3BlcnR5KToKLQkgICogZXh0L3Nob3V0Mi9nc3RzaG91dDIuaDoKLQkgIEFkZCBhIHByb3BlcnR5IGZvciB1c2VybmFtZS4KLQotMjAwNy0wMi0yNyAxMjowMjowMyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3cGx1Z2luLmM6Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuaDoKLQkqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHBsdWdpbi5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oOgotCSogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIHVwZGF0ZSBjb3B5cmlnaHQgc3RhdGVtZW50cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgY29weXJpZ2h0IHN0YXRlbWVudHMKLQotMjAwNy0wMi0yNyAxMTo1OToyMSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkgIHVwZGF0ZSBjb3B5cmlnaHQgc3RhdGVtZW50Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSBjb3B5cmlnaHQgc3RhdGVtZW50Ci0KLTIwMDctMDItMjcgMTE6MzA6MTkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy9vc3h2aWRlby86IERpc2FibGUgdGhlIGNvY29hIGV2ZW50IGxvb3Agc2luY2UgaXQncyBhIGh1Z2UgbWVtb3J5IGxlYWsuIFNob3VsZCBvbmx5IG1hdHRlciBpZiB0aGUgc2luayBpc24ndCB1c2VkIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oOgotCSAgKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBEaXNhYmxlIHRoZSBjb2NvYSBldmVudCBsb29wIHNpbmNlIGl0J3MgYSBodWdlIG1lbW9yeSBsZWFrLiBTaG91bGQgb25seQotCSAgbWF0dGVyIGlmIHRoZSBzaW5rIGlzbid0IHVzZWQgd2l0aGluIGFuIE5TQXBwICh3aGljaCBoYXMgYWxyZWFkeSBnb3QKLQkgIGEgY29jYSBldmVudCBsb29wKS4KLQkgIFJlbW92ZSBhbGwgdW51c2VkIGNvZGUuCi0KLTIwMDctMDItMjYgMTI6MDc6MTQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvcnRzcC9NYWtlZmlsZS5hbTogRml4IG1ha2UgY2hlY2sgdG9vLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSAgRml4IG1ha2UgY2hlY2sgdG9vLgotCi0yMDA3LTAyLTI2IDEwOjAwOjI4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L3J0c3AvYmFzZTY0Lio6IENvbW1pdCBtaXNzaW5nIGZpbGVzIGZvciBiYXNlNjQgZW5jb2RpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvYmFzZTY0LmM6ICh1dGlsX2Jhc2U2NF9lbmNvZGUpOgotCSAgKiBnc3QvcnRzcC9iYXNlNjQuaDoKLQkgIENvbW1pdCBtaXNzaW5nIGZpbGVzIGZvciBiYXNlNjQgZW5jb2RpbmcuCi0KLTIwMDctMDItMjQgMjI6NTc6NDkgKzAwMDAgIExvw69jIE1pbmllciA8bG9vbCtnbm9tZUB2aWEuZWNwLmZyPgotCi0JICBGaXggYnVpbGQgd2l0aCBMREZMQUdTPSctV2wsLXosZGVmcycgKCM0MTA5OTcpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBMb8OvYyBNaW5pZXIgPGxvb2wrZ25vbWUgYXQgdmlhIGVjcCBmcj4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvYW5ub2RleC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2pwZWcvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zcGVleC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvY3V0dGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVidWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ29vbS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2xldmVsL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkgIEZpeCBidWlsZCB3aXRoIExERkxBR1M9Jy1XbCwteixkZWZzJyAoIzQxMDk5NykKLQotMjAwNy0wMi0yNCAyMjo1Mjo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgRml4IGJ1aWxkIHdpdGggTERGTEFHUz0nLVdsLC16LGRlZnMnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L2dzbS9NYWtlZmlsZS5hbToKLQkgICogZXh0L2xhZHNwYS9NYWtlZmlsZS5hbToKLQkgICogZXh0L3dhdnBhY2svTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tdmUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9uc2YvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3BlZWQvTWFrZWZpbGUuYW06Ci0JICBGaXggYnVpbGQgd2l0aCBMREZMQUdTPSctV2wsLXosZGVmcycuCi0KLTIwMDctMDItMjMgMTk6MTI6NTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvcnRzcC86IGdfYmFzZTY0X2VuY29kZSBpcyBhIEdMaWIgMi4xMiBmdW5jdGlvbi4gVXNlIGFuIGVxdWl2YWxlbnQgdGFrZW4gZnJvbSBpY2VjYXN0IHRvIHJlcGxhY2UgaXQuIFJlbGljZW5zZWQgZnIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKGFwcGVuZF9hdXRoX2hlYWRlciksCi0JICAocnRzcF9jb25uZWN0aW9uX3NlbmQpLCAocnRzcF9jb25uZWN0aW9uX3NldF9hdXRoKToKLQkgIGdfYmFzZTY0X2VuY29kZSBpcyBhIEdMaWIgMi4xMiBmdW5jdGlvbi4gVXNlIGFuIGVxdWl2YWxlbnQgdGFrZW4KLQkgIGZyb20gaWNlY2FzdCB0byByZXBsYWNlIGl0LiBSZWxpY2Vuc2VkIGZyb20gR1BMIGNvdXJ0ZXN5IG9mIE1pa2UKLQkgIFNtaXRoLgotCi0yMDA3LTAyLTIzIDE4OjEyOjI3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L3J0c3AvOiBJbXBsZW1lbnQgc2ltcGxlIEJhc2ljIEF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgc28gdGhhdCB1cmxzIGxpa2UgcnRzcDovL3VzZXI6cGFzc0Bob3N0bmFtZS9ydHNwc3RyZWFtIHdvcmsgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfZmluYWxpemUpLAotCSAgKGdzdF9ydHNwc3JjX2NyZWF0ZV9zdHJlYW0pLCAocnRzcF9hdXRoX21ldGhvZF90b19zdHJpbmcpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX2F1dGhfaGRyKSwgKGdzdF9ydHNwc3JjX3NldHVwX2F1dGgpLAotCSAgKGdzdF9ydHNwc3JjX3NlbmQpLCAoZ3N0X3J0c3BzcmNfdHJ5X3NlbmQpLCAoZ3N0X3J0c3BzcmNfb3BlbiksCi0JICAoZ3N0X3J0c3BzcmNfY2xvc2UpLCAoZ3N0X3J0c3BzcmNfcGxheSksIChnc3RfcnRzcHNyY19wYXVzZSksCi0JICAoZ3N0X3J0c3BzcmNfdXJpX3NldF91cmkpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fY3JlYXRlKSwKLQkgIChhcHBlbmRfYXV0aF9oZWFkZXIpLCAocnRzcF9jb25uZWN0aW9uX3NlbmQpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9mcmVlKSwgKHJ0c3BfY29ubmVjdGlvbl9zZXRfYXV0aCk6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX2dldF9yZXF1ZXN0X3VyaSk6Ci0JICAqIGdzdC9ydHNwL3J0c3B1cmwuaDoKLQkgIEltcGxlbWVudCBzaW1wbGUgQmFzaWMgQXV0aGVudGljYXRpb24gc3VwcG9ydCBzbyB0aGF0IHVybHMgbGlrZQotCSAgcnRzcDovL3VzZXI6cGFzc0Bob3N0bmFtZS9ydHNwc3RyZWFtIHdvcmsgb24gaG9zdHMgdGhhdCByZXF1aXJlCi0JICBhdXRoZW50aWNhdGlvbi4KLQotMjAwNy0wMi0yMiAxNzo1MzoyNiArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkgIEZpeCBzZWdmYXVsdCB3aGVuIG9wcGVuaW5nIGEgcmFkaW8gZGV2aWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggc2VnZmF1bHQgd2hlbiBvcHBlbmluZyBhIHJhZGlvIGRldmljZS4KLQotMjAwNy0wMi0yMiAxNDozNToyOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBGaXggbGV2ZWwgZm9yIG11bHRpLWNoYW5uZWwgY2FzZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9zZXRfY2FwcyksCi0JICAoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICAqIHN5cy92NGwyL1JFQURNRToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCBsZXZlbCBmb3IgbXVsdGktY2hhbm5lbCBjYXNlLgotCi0yMDA3LTAyLTIxIDEwOjE4OjEyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC4qOiBVc2UgZnVuY3Rpb24gcG9pbnRlciBmb3IgcHJvY2VzcyBmdW5jdGlvbiBhbmQgYWRkIHByb2Nlc3MgZnVuY3Rpb25zIGZvciBmbG9hdCBhdWRpby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9pbml0KSwgKGdzdF9sZXZlbF9zZXRfY2FwcyksCi0JICAoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSAgVXNlIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIHByb2Nlc3MgZnVuY3Rpb24gYW5kIGFkZCBwcm9jZXNzIGZ1bmN0aW9ucwotCSAgZm9yIGZsb2F0IGF1ZGlvLgotCi0yMDA3LTAyLTIwIDIxOjM0OjAwICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuKjogUmVtb3ZlIGluY2x1ZGUgb2YgdW51c2VkIGhlYWRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JICBSZW1vdmUgaW5jbHVkZSBvZiB1bnVzZWQgaGVhZGVycy4KLQkgICogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3JtcGx1Z2luLmM6Ci0JICAqIHN5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYzoKLQkgICogc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3Jtc2luay5oOgotCSAgKiB3aW4zMi92czYvbGliZ3N0d2F2ZWZvcm0uZHNwOgotCSAgQWRkIGEgbmV3IHdhdmVmb3JtIHBsdWdpbiB3aGljaCBpbmNsdWRlcyBhbiBhdWRpbyBzaW5rCi0JICBlbGVtZW50IHVzaW5nIHRoZSBXYXZlRm9ybSB3aW4zMiBBUEkuCi0JICAqIHdpbjMyL01BTklGRVNUOgotCSAgQWRkIHRoZSBuZXcgcHJvamVjdCBmaWxlIGZvcm0gd2F2ZWZvcm0gcGx1Z2luLgotCi0yMDA3LTAyLTE5IDEyOjIyOjQzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogUmVhZGQgR1NUX0VMRU1FTlRfRVJST1IgaWYgd2UgY2FuJ3QgcmVlbnF1ZSBidWZmZXJzIGFmdGVyIEVJTywgZml4ZXMgIzQwNzM2OQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX2ZpbGxfZm9ybWF0X2xpc3QpLAotCSAgKGdzdF92NGwyc3JjX2dyYWJfZnJhbWUpLCAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHR1cmUpLAotCSAgKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCk6Ci0JICBSZWFkZCBHU1RfRUxFTUVOVF9FUlJPUiBpZiB3ZSBjYW4ndCByZWVucXVlIGJ1ZmZlcnMgYWZ0ZXIgRUlPLAotCSAgZml4ZXMgIzQwNzM2OQotCi0yMDA3LTAyLTE4IDE4OjAwOjUxICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHN5cy9kaXJlY3RkcmF3LzogUHJlcGFyZSB0aGUgcGx1Z2luIHRvIG1vdmUgdG8gZ29vZDoKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3cGx1Z2luLmM6Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmg6Ci0JICBQcmVwYXJlIHRoZSBwbHVnaW4gdG8gbW92ZSB0byBnb29kOgotCSAgUmVtb3ZlIHVudXNlZC91bnRlc3RlZCBjb2RlIChyZW5kZXJpbmcgdG8gYW4gZXh0ZXJuIHN1cmZhY2UsCi0JICB5dXYgZm9ybWF0IHJlbmRlcmluZykuVXNlIEdTVF8oREVCVUcvKilfT0JKRUNUIG1hY3JvcwotCSAgUmVuYW1lIGFsbCBmdW5jdGlvbnMgZnJvbSBnc3RfZGlyZWN0ZHJhd3NpbmsgdG8gZ3N0X2RpcmVjdGRyYXdfc2luay4KLQkgIEFkZCBndGsgZG9jIHNlY3Rpb24KLQkgIEZpeCBhIGJ1ZyBpbiBnc3RfZGlyZWN0ZHJhd19zaW5rX3Nob3dfZnJhbWUsIG1lbWNweSBsaW5lIGJ5IGxpbmUKLQkgIHJlc3BlY3RpbmcgZGVzdGluYXRpb24gc3VyZmFjZSBzdHJpZGUuCi0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHBsdWdpbi5jOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuaDoKLQkgIFByZXBhcmUgdGhlIHBsdWdpbiB0byBtb3ZlIHRvIGdvb2Q6Ci0JICBSZW5hbWUgYWxsIGZ1bmN0aW9ucyBmcm9tIGdzdF9kaXJlY3Rzb3VuZHNpbmsgdG8gZ3N0X2RpcmVjdHNvdW5kX3NpbmsuCi0JICBBZGQgZ3RrIGRvYyBzZWN0aW9uCi0JICAqIHdpbjMyL2NvbW1vbi9jb25maWcuaC5pbjoKLQkgICogd2luMzIvTUFOSUZFU1Q6Ci0JICBBZGQgY29uZmlnLmguaW4KLQotMjAwNy0wMi0xOCAxMzoyNDoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIHNpbXBsZSBtcGVnIHRyYW5zcG9ydCBzdHJlYW0gcGF5bG9hZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXAydHBheS5jOiAoZ3N0X3J0cF9tcDJ0X3BheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfbXAydF9wYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX21wMnRfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXAydF9wYXlfc2V0Y2FwcyksIChnc3RfcnRwX21wMnRfcGF5X2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9ydHBfbXAydF9wYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRwYXkuaDoKLQkgIEFkZGVkIHNpbXBsZSBtcGVnIHRyYW5zcG9ydCBzdHJlYW0gcGF5bG9hZGVyLgotCi0yMDA3LTAyLTE2IDEyOjMyOjAxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9VUkxTOiBBZGQgZXhhbXBsZSBIMjY0IHJ0c3AgdXJsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL1VSTFM6Ci0JICBBZGQgZXhhbXBsZSBIMjY0IHJ0c3AgdXJsLgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19tZWRpYV90b19jYXBzKSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSksIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgY29udmVydCB2YWx1ZXMgdG8gbG93ZXJjYXNlIG9yIHdlIG1pZ2h0IG1lc3MgdXAgYmFzZTY0IGVuY29kZWQKLQkgIHByb3BlcnRpZXMuCi0KLTIwMDctMDItMTYgMTI6MzA6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvUkVBRE1FOiBGaXggY2FzZSBvZiBzdHJpbmcgcGFyYW1zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvUkVBRE1FOgotCSAgRml4IGNhc2Ugb2Ygc3RyaW5nIHBhcmFtcy4KLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzogKGdzdF9ydHBfaDI2NF9kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2gyNjRfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX2gyNjRfZGVwYXlfcHJvY2Vzcyk6Ci0JICBGaXggZGVwYXlsb2FkZXIsIHN1cHBvcnQgbW9yZSBwYWNrZXQgdHlwZXMuCi0JICBBZGQgc3luYyBjb2RlcyB0byBtYWtlIHN1cmUgdGhlIHBhY2tldGl6ZXIgY2FuIGRvIGl0cyBqb2IuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6IChnc3RfcnRwX21wdl9kZXBheV9wcm9jZXNzKToKLQkgIEZpeCBjYXBzIGNhc2UgYWdhaW4uCi0KLTIwMDctMDItMTUgMTI6MjY6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6IFNldCByaWdodCBjYXBzIG9uIG91dHB1dCBidWZmZXJzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6IChnc3RfcnRwX2gyNjRfZGVwYXlfcHJvY2Vzcyk6Ci0JICBTZXQgcmlnaHQgY2FwcyBvbiBvdXRwdXQgYnVmZmVycy4KLQotMjAwNy0wMi0xNCAxNzowNDo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3Avc2RwbWVzc2FnZS5jOiBDbGVhciBzdGFjayBhbGxvY2F0ZWQgU0RQTWVkaWEgc3RydWN0IGJlZm9yZSBjYWxsaW5nIF9pbml0KCkgb24gaXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3Avc2RwbWVzc2FnZS5jOiAoc2RwX3BhcnNlX2xpbmUpOgotCSAgQXMgc3BvdHRlZCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPjoKLQkgIENsZWFyIHN0YWNrIGFsbG9jYXRlZCBTRFBNZWRpYSBzdHJ1Y3QgYmVmb3JlIGNhbGxpbmcgX2luaXQoKSBvbiBpdC4KLQkgIENsYXJpZnkgdGhpcyBpbiB0aGUgZG9jcyBhcyB3ZWxsLgotCi0yMDA3LTAyLTE0IDE3OjAxOjI1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6IERvbid0IHJlc2V0IHRoZSBwcm9maWxlIHdoZW4gZ29pbmcgc3dpdGNoaW5nIHN0YXRlcywgYXMgaXQgbWFrZXMgdGhlIGVsZW1lbnQgbm9uLXJldXNhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6IChnc3RfZ2NvbmZfYXVkaW9fc2lua19yZXNldCksCi0JICAoZG9fY2hhbmdlX2NoaWxkKToKLQkgIERvbid0IHJlc2V0IHRoZSBwcm9maWxlIHdoZW4gZ29pbmcgc3dpdGNoaW5nIHN0YXRlcywgYXMgaXQgbWFrZXMKLQkgIHRoZSBlbGVtZW50IG5vbi1yZXVzYWJsZS4KLQotMjAwNy0wMi0xNCAxNToyNDo1MCArMDAwMCAganAubGl1IDxqcF9saXVAYXN0cm9jb20uY24+Ci0KLQkgIGdzdC9ydHNwL3NkcG1lc3NhZ2UuKjogRml4IG1lbW9yeSBtYW5hZ2VtZW50IG9mIFNEUCBtZXNzYWdlcy4gRml4ZXMgIzQwNzc5My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmM6IChzZHBfb3JpZ2luX2luaXQpLCAoc2RwX2Nvbm5lY3Rpb25faW5pdCksCi0JICAoc2RwX2JhbmR3aWR0aF9pbml0KSwgKHNkcF90aW1lX2luaXQpLCAoc2RwX3pvbmVfaW5pdCksCi0JICAoc2RwX2tleV9pbml0KSwgKHNkcF9hdHRyaWJ1dGVfaW5pdCksIChzZHBfbWVzc2FnZV9pbml0KSwKLQkgIChzZHBfbWVzc2FnZV91bmluaXQpLCAoc2RwX21lc3NhZ2VfZnJlZSksIChzZHBfbWVkaWFfaW5pdCksCi0JICAoc2RwX21lZGlhX3VuaW5pdCksIChzZHBfbWVkaWFfZnJlZSksIChzZHBfbWVzc2FnZV9hZGRfbWVkaWEpLAotCSAgKHNkcF9wYXJzZV9saW5lKToKLQkgICogZ3N0L3J0c3Avc2RwbWVzc2FnZS5oOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IGpwLmxpdSA8anBfbGl1IGF0IGFzdHJvY29tIGRvdCBjbj4KLQkgIEZpeCBtZW1vcnkgbWFuYWdlbWVudCBvZiBTRFAgbWVzc2FnZXMuIEZpeGVzICM0MDc3OTMuCi0KLTIwMDctMDItMTQgMTI6MDc6MDEgKzAwMDAgIHpoYW5nZmVpIGdhbyA8Z2FvemhhbmdmZWlAeWFob28uY29tLmNuPgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBBbGxvdyBtdXhpbmcgdmlkZW8veC1oMjY0ICh3YXMgYWxyZWFkeSBpbiB0aGUgY2FwcykuIEZpeGVzICM0MDc3ODAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiB6aGFuZ2ZlaSBnYW8gPGdhb3poYW5nZmVpQHlhaG9vLmNvbS5jbj4KLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmlfbXV4X3ZpZHNpbmtfc2V0X2NhcHMpOgotCSAgQWxsb3cgbXV4aW5nIHZpZGVvL3gtaDI2NCAod2FzIGFscmVhZHkgaW4gdGhlIGNhcHMpLiBGaXhlcyAjNDA3NzgwLgotCi0yMDA3LTAyLTE0IDEwOjA5OjEyICswMDAwICBqcC5saXUgPGpwX2xpdUBhc3Ryb2NvbS5jbj4KLQotCSAgZ3N0L3J0c3AvcnRzcHVybC5jOiBGaXggcGFyc2luZyBvZiBwYXNzd29yZCBmaWVsZCBpbiB1cmwuIEZpeGVzICM0MDc3OTcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBqcC5saXUgPGpwX2xpdSBhdCBhc3Ryb2NvbSBkb3QgY24+Ci0JICAqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX3BhcnNlKToKLQkgIEZpeCBwYXJzaW5nIG9mIHBhc3N3b3JkIGZpZWxkIGluIHVybC4gRml4ZXMgIzQwNzc5Ny4KLQotMjAwNy0wMi0xNCAwOTo1NTo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLio6IFVwZGF0ZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYXJzZV9yZXNldCksIChnc3Rfd2F2cGFyc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX2Rlc3Ryb3lfc291cmNlcGFkKSwgKGdzdF93YXZwYXJzZV9mbXQpLAotCSAgKGdzdF93YXZwYXJzZV9wYXJzZV9maWxlX2hlYWRlciksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2luaXQpLAotCSAgKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLCAoZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmtfaW5mbyksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9wYXJzZV9zdHJlYW1faW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX2FkZF9zcmNfcGFkKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksCi0JICAoZ3N0X3dhdnBhcnNlX2xvb3ApLCAoZ3N0X3dhdnBhcnNlX2NoYWluKSwKLQkgIChnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQpLCAoZ3N0X3dhdnBhcnNlX3BhZF9xdWVyeSksCi0JICAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCksIChnc3Rfd2F2cGFyc2VfY2hhbmdlX3N0YXRlKSwKLQkgIChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSAgVXBkYXRlIGRvY3MuCi0JICBVc2UgYm9pbGVycGxhdGUuCi0JICBWYXJpb3VzIGNvZGUgY2xlYW51cHMuCi0JICBXaGVuIHRoZSBiaXRyYXRlIGlzIG5vdCBrbm93biAoYnBzID09IDAgb3IgY29tcHJlc3NlZCBmb3JtYXRzKSBsZXQKLQkgIGRvd25zdHJlYW0gZWxlbWVudCBndWVzdGltYXRlIHRoZSBkdXJhdGlvbiBhbmQgcG9zaXRpb24gYW5kIGRvbid0Ci0JICBnZW5lcmF0ZSB0aW1lc3RhbXBzIG9yIGR1cmF0aW9ucy4gRml4ZXMgIzQwNTIxMy4KLQkgIEZpeCBFT1MgYW5kIEVSUk9SIGNvbmRpdGlvbnMgaW4gY2hhaW4gbW9kZSwgd2UganVzdCBuZWVkIHRvIGZvcndhcmQgdGhlCi0JICBlcnJvciBmbG93cmV0dXJuIHVwc3RyZWFtLgotCi0yMDA3LTAyLTEzIDE2OjAxOjI5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUmUtZmFjdG9yIHRoZSBnY29uZmF1ZGlvc2luayBpbnRvIGEgIkdzdFN3aXRjaFNpbmsiIGJhc2UgY2xhc3MgYW5kIGEgY2hpbGQgdGhhdCBpbXBsZW1lbnRzIHRoZSBHQ29uZiBrZXkgbW9uaXRvcmluZy4gLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZ2NvbmYvZ2NvbmYuYzogKGdzdF9nY29uZl9nZXRfc3RyaW5nKSwKLQkgIChnc3RfZ2NvbmZfZ2V0X2tleV9mb3Jfc2lua19wcm9maWxlKSwgKGdzdF9nY29uZl9zZXRfc3RyaW5nKSwKLQkgIChnc3RfZ2NvbmZfcmVuZGVyX2Jpbl93aXRoX2RlZmF1bHQpOgotCSAgKiBleHQvZ2NvbmYvZ2NvbmYuaDoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6IChnc3RfZ2NvbmZfYXVkaW9fc2lua19iYXNlX2luaXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zaW5rX3Jlc2V0KSwgKGdzdF9nY29uZl9hdWRpb19zaW5rX2luaXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zaW5rX2Rpc3Bvc2UpLCAoZG9fY2hhbmdlX2NoaWxkKSwKLQkgIChnc3RfZ2NvbmZfc3dpdGNoX3Byb2ZpbGUpLCAoZ3N0X2djb25mX2F1ZGlvX3Npbmtfc2V0X3Byb3BlcnR5KSwKLQkgIChjYl9jaGFuZ2VfY2hpbGQpLCAoZ3N0X2djb25mX2F1ZGlvX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmg6Ci0JICAqIGV4dC9nY29uZi9nc3Rzd2l0Y2hzaW5rLmM6IChnc3Rfc3dpdGNoX3NpbmtfYmFzZV9pbml0KSwKLQkgIChnc3Rfc3dpdGNoX3NpbmtfY2xhc3NfaW5pdCksIChnc3Rfc3dpdGNoX3NpbmtfcmVzZXQpLAotCSAgKGdzdF9zd2l0Y2hfc2lua19pbml0KSwgKGdzdF9zd2l0Y2hfc2lua19kaXNwb3NlKSwKLQkgIChnc3Rfc3dpdGNoX2NvbW1pdF9uZXdfa2lkKSwgKGdzdF9zd2l0Y2hfc2lua19zZXRfY2hpbGQpLAotCSAgKGdzdF9zd2l0Y2hfc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X3N3aXRjaF9zaW5rX2hhbmRsZV9ldmVudCksCi0JICAoZ3N0X3N3aXRjaF9zaW5rX2dldF9wcm9wZXJ0eSksIChnc3Rfc3dpdGNoX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdHN3aXRjaHNpbmsuaDoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCksIChnc3RfYXV0b19hdWRpb19zaW5rX2Rpc3Bvc2UpLAotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfY2xlYXJfa2lkKSwgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfcmVzZXQpLAotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZGV0ZWN0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCksIChnc3RfYXV0b192aWRlb19zaW5rX2Rpc3Bvc2UpLAotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfY2xlYXJfa2lkKSwgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfcmVzZXQpLAotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZGV0ZWN0KToKLQkgIFJlLWZhY3RvciB0aGUgZ2NvbmZhdWRpb3NpbmsgaW50byBhICJHc3RTd2l0Y2hTaW5rIiBiYXNlIGNsYXNzCi0JICBhbmQgYSBjaGlsZCB0aGF0IGltcGxlbWVudHMgdGhlIEdDb25mIGtleSBtb25pdG9yaW5nLiBUaGUgZW5kIGdvYWwgb2YKLQkgIHRoaXMgaXMgYW4gYXVkaW8gc2luayB0aGF0IGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSBmbHksIGJ1dCBhdCB0aGUKLQkgIG1vbWVudCBpdCBzdGlsbCBvbmx5IGNoYW5nZXMgb24gdGhlIG5leHQgUkVBRFkgdHJhbnNpdGlvbi4KLQotMjAwNy0wMi0xMyAxMTo1NzoxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFB1dCBkZWJ1ZyBzdHVmZiBpbnRvICNpZm5kZWYgR1NUX0RJU0FCTEVfREVCVUcgI2VuZGlmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N5bmMpLCAoZ3N0X2F2aV9kZW11eF9tYXNzYWdlX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X2NhbGN1bGF0ZV9kdXJhdGlvbnNfZnJvbV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsKSwKLQkgIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwKLQkgIChnc3RfYXZpX2RlbXV4X2xvb3ApOgotCSAgUHV0IGRlYnVnIHN0dWZmIGludG8gI2lmbmRlZiBHU1RfRElTQUJMRV9ERUJVRyAjZW5kaWYKLQotMjAwNy0wMi0xMyAwOTo0NjoyNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBBZGQgY3Jvc3NyZWZlcmVuY2VzIHRvIGdsaWIvZ29iamVjdC9nc3RyZWFtIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBBZGQgY3Jvc3NyZWZlcmVuY2VzIHRvIGdsaWIvZ29iamVjdC9nc3RyZWFtIGRvY3MuCi0KLTIwMDctMDItMTIgMjM6MzU6MTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tb25vc2NvcGUvOiBGaXggY29weSduJ3Bhc3RlLW8gaW4gZG9jcyBjaHVuay4gQWxzbyBhZGQgc29tZSBtaXNzaW5nIENGTEFHUyAoYnV0IG5vIExJQlMsIHNpbmNlIHdlIG9ubHkgdXNlIGRlZmluZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tb25vc2NvcGUvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JICBGaXggY29weSduJ3Bhc3RlLW8gaW4gZG9jcyBjaHVuay4gQWxzbyBhZGQgc29tZSBtaXNzaW5nIENGTEFHUwotCSAgKGJ1dCBubyBMSUJTLCBzaW5jZSB3ZSBvbmx5IHVzZSBkZWZpbmVzIGZyb20gdGhlIGhlYWRlcnMpLgotCi0yMDA3LTAyLTEyIDIzOjI3OjMxICswMDAwICBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBrYW9saW4ud2g5Lm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IEZpeCBtYXNzaXZlIG1lbW9yeSBsZWFrIHdoZW4gb3BlcmF0aW5nIGluIHN0cmVhbWluZyBtb2RlIGR1ZSB0bwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogSm9uYXRoYW4gTWF0dGhldyAgPGpvbmF0aGFuIGF0IGthb2xpbiB3aDkgbmV0PgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wYXJzZV9zdHJlYW1faW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKToKLQkgIEZpeCBtYXNzaXZlIG1lbW9yeSBsZWFrIHdoZW4gb3BlcmF0aW5nIGluIHN0cmVhbWluZyBtb2RlIGR1ZSB0bwotCSAgR1NUX0JVRkZFUl9NQUxMT0NEQVRBKCkgbm90IGJlaW5nIHNldCBvbiBuZXdseS1jcmVhdGVkIGJ1ZmZlcnMuCi0JICBGaXhlcyAjNDA3MDU3LgotCi0yMDA3LTAyLTEyIDE1OjI5OjQ0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguKjogU2F2ZSBzb21lIG1lbW9yeSAoOCUpIGJ5IHJlcGFja2luZyB0aGUgaW5kZXggZW50cnkgc3RydWN0dXJlIChtb3JlIHRvIGNvbWUpLiBBZGQgbW9yZSBGSVhNRXMgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F2aV9kZW11eF9yZXNldCksIChnc3RfYXZpX2RlbXV4X2luZGV4X2VudHJ5X2Zvcl90aW1lKSwKLQkgIChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdXBlcmluZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N5bmMpLCAoZ3N0X2F2aV9kZW11eF9uZXh0X2RhdGFfYnVmZmVyKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwgKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHVzaF9ldmVudCksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXJfcHVsbCksCi0JICAoZ3N0X2F2aV9kZW11eF9kb19zZWVrKSwgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwgKGdzdF9hdmlfZGVtdXhfbG9vcCk6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIFNhdmUgc29tZSBtZW1vcnkgKDglKSBieSByZXBhY2tpbmcgdGhlIGluZGV4IGVudHJ5IHN0cnVjdHVyZSAobW9yZSB0bwotCSAgY29tZSkuIEFkZCBtb3JlIEZJWE1FcyB0byBxdWVzdGlvbmFibGUgcGFydHMuCi0KLTIwMDctMDItMTIgMTI6NTc6MjIgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgc3lzL3Y0bDIvOiBNb3JlIEZJWE1FIGNvbW1lbnRzIGFuZCBtZXNzYWdpbmcgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY192NGwyZm91cmNjX3RvX2NhcHMpLAotCSAgKGdzdF92NGwyc3JjX2dldF9jYXBzKToKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfZmlsbF9mb3JtYXRfbGlzdCksCi0JICAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSksIChnc3RfdjRsMnNyY19zZXRfY2FwdHVyZSksCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KToKLQkgIE1vcmUgRklYTUUgY29tbWVudHMgYW5kIG1lc3NhZ2luZyBjaGFuZ2VzLgotCi0yMDA3LTAyLTEyIDEyOjQzOjAwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9nb29tL2dzdGdvb20uKjogSW1wcm92ZWQgZG9jcyBhbmQgdXNlIEdTVF9ERUJVR19GVU5DUFRSLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2NsYXNzX2luaXQpLCAoZ3N0X2dvb21faW5pdCksCi0JICAoZ3N0X2dvb21fY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5oOgotCSAgSW1wcm92ZWQgZG9jcyBhbmQgdXNlIEdTVF9ERUJVR19GVU5DUFRSLgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9jbGFzc19pbml0KToKLQkgIFVzZSBHU1RfREVCVUdfRlVOQ1BUUi4KLQkgICogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogKGdzdF9tb25vc2NvcGVfaW5pdCksCi0JICAoZ3N0X21vbm9zY29wZV9jaGFpbiksIChnc3RfbW9ub3Njb3BlX2NoYW5nZV9zdGF0ZSk6Ci0JICBJbXByb3ZlZCBkb2NzIHNvdXJjZSBjbGVhbnVwcy4KLQotMjAwNy0wMi0xMiAxMDoyOTo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2RlYnVnLzogQWRkIGNvZGUgZm9yIGEgcHVzaGZpbGVzcmMgZWxlbWVudCB0aGF0IGltcGxlbWVudHMgYSBwdXNoZmlsZTovLyBVUkkgaGFuZGxlciwgdG8gbWFrZSBkZWJ1Z2dpbmcgcHVzaC1tb2RlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVidWcvZ3N0ZGVidWcuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2RlYnVnL2dzdHB1c2hmaWxlc3JjLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RwdXNoZmlsZXNyYy5oOgotCSAgQWRkIGNvZGUgZm9yIGEgcHVzaGZpbGVzcmMgZWxlbWVudCB0aGF0IGltcGxlbWVudHMgYSBwdXNoZmlsZTovLyBVUkkKLQkgIGhhbmRsZXIsIHRvIG1ha2UgZGVidWdnaW5nIHB1c2gtbW9kZSBvcGVyYXRpb24gb2YgZGVtdXhlci9kZWNvZGVycwotCSAgdGhhdCBzdXBwb3J0IGJvdGggZWFzaWVyIGluIGNvbm5lY3Rpb24gd2l0aCBzZWVrL3BsYXliaW4vZXRjLgotCSAgVGhlIGVsZW1lbnQgaXNuJ3QgcmVnaXN0ZXJlZCBhdCB0aGUgbW9tZW50LgotCi0yMDA3LTAyLTExIDE1OjI2OjQ5ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIE1ha2VmaWxlLmFtOiBBZGQgd2luMzIgTUFOSUZFU1QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgIEFkZCB3aW4zMiBNQU5JRkVTVAotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5oOgotCSAgQ2xlYXIgdW51c2VkIGNvZGUgYW5kIGFkZCBjb21tZW50cy4KLQkgIFJlbW92ZSB5dXYgZnJvbSB0ZW1wbGF0ZSBjYXBzLCBpdCBvbmx5IHN1cHBvcnRzIFJHQgotCSAgYWN0dWFsbHkuCi0JICBJbXBsZW1lbnQgWE92ZXJsYXkgaW50ZXJmYWNlIGFuZCByZW1vdmUgd2luZG93IGFuZCBmdWxsc2NyZWVuCi0JICBwcm9wZXJ0aWVzLgotCSAgQWRkIGRlYnVnIGxvZ3MuCi0JICBUZXN0IGZvciBibGl0IGNhcGFiaWxpdGllcyB0byByZXR1cm4gb25seSB0aGUgY3VycmVudCBjb2xvcnNwYWNlIGlmCi0JICB0aGUgaGFyZHdhcmUgY2FuJ3QgYmxpdCBmb3Igb25lIGNvbG9yc3BhY2UgdG8gYW5vdGhlci4KLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgQWRkIHNvbWUgZGVidWdzLgotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgIEFkZCBWUzcgcHJvamVjdCBmaWxlcyBhbmQgc29sdXRpb24uCi0JICAqIHdpbjMyL3ZzNi9nc3RfcGx1Z2luc19iYWQuZHN3OgotCSAgKiB3aW4zMi92czYvbGliZ3N0ZGlyZWN0ZHJhdy5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RkaXJlY3Rzb3VuZC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RxdGRlbXV4LmRzcDoKLQkgIFVwZGF0ZSBwcm9qZWN0IGZpbGVzLgotCi0yMDA3LTAyLTExIDEyOjU3OjQ3ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IENvbW1lbnQgYSAjaWYgMCBpbiBjYXBzIHRlbXBsYXRlIGRlZmluaXRpb24gYXMgVlM2IHNlZW1zIHRvIGRvIG5vdCBzdXBwb3J0IGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBDb21tZW50IGEgI2lmIDAgaW4gY2FwcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGFzIFZTNiBzZWVtcyB0bwotCSAgZG8gbm90IHN1cHBvcnQgaXQuCi0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzooZ3N0X3J0c3BzcmNfbG9vcF91ZHApOgotCSAgVXNlIGdzdF9ndWludDY0X3RvX2dkb3VibGUgZm9yIGNvbnZlcnNpb24uCi0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6KHJ0c3BfY29ubmVjdGlvbl9zZW5kKToKLQkgIE1vdmUgdmFyaWFibGVzIGRlY2xhcmF0aW9uIGJlZm9yZSB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24uCi0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmM6KHJ0c3Bfc3RycmVzdWx0KToKLQkgIERvbid0IHVzZSBoc3RyZXJyb3IgZm9yIGVycm9yIGxvZyBvbiBHX09TX1dJTjMyIGJ1aWxkIGFzIGl0J3Mgbm90IHN1cHBvcnRlZC4KLQkgIEFuZCBkb24ndCBpbmNsdWRlIG5ldGRiLmggZm9yIEdfT1NfV0lOMzIKLQkgICogZ3N0L3J0c3Avc2RwbWVzc2FnZS5jOihzZHBfcGFyc2VfbGluZSk6Ci0JICBUaGlzIGluaXRpYWxpemF0aW9uIFNEUE1lZGlhIG5tZWRpYSA9IHsubWVkaWEgPSBOVUxMIH07IGlzIG5vdCBzdXBwb3J0ZWQKLQkgIGJ5IFZTNiB0aGVuIHVzZSBhbiBvdGhlciB3YXkgdG8gaW5pdGlhbGl6ZSBTRFBNZWRpYSBzdHJ1Y3R1cmUuCi0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5oOgotCSAgKiBnc3QvdWRwL2dzdGR5bnVkcG5ldHV0aWxzLmg6Ci0JICBEbyBub3QgaW5jbHVkZSA8c3lzL3RpbWUuaD4gZm9yIEdfT1NfV0lOMzIKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgIERlZmluZSBzb2NrbGVuX3QgYXMgaW50IGZvciBHX09TX1dJTjMyCi0JICAqIHdpbi9jb21tb24vY29uZmlnLmguaW46Ci0JICBVbmRlZiBIQVZFX05FVElORVRfSU5fSAotCSAgKiB3aW4zMi92czYvZ3N0X3BsdWdpbnNfZ29vZC5kc3c6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RydHAuZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0cnRzcC5kc3A6Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RhdXRvZ2VuLmRzcDoKLQkgICogd2luMzIvdnM2L2xpYmdzdGF1ZGlvZnguZHNwOgotCSAgKiB3aW4zMi92czYvbGliZ3N0dWRwLmRzcDoKLQkgIEFkZCBhbmQgdXBkYXRlIHByb2plY3QgZmlsZXMuCi0JICAqIHdpbjMyL2NvbW1vbi9nc3R1ZHAtZW51bXR5cGVzLmM6Ci0JICAqIHdpbjMyL2NvbW1vbi9nc3R1ZHAtZW51bXR5cGVzLmg6Ci0JICBBZGQgYSBjb3B5IG9mIHVkcCBlbnVtdHlwZXMgdG8gd2luMzIvY29tbW9uIGFzIGluIGNvcmUKLQkgIGFuZCBiYXNlLgotCi0yMDA3LTAyLTExIDEwOjUzOjIxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQWN0aXZhdGUgbW9ub3Njb3BlIHdoZW4gYnVpbGRpbmcgd2l0aCAtLWVuYWJsZS1leHBlcmltZW50YWwuIEZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEFjdGl2YXRlIG1vbm9zY29wZSB3aGVuIGJ1aWxkaW5nIHdpdGggLS1lbmFibGUtZXhwZXJpbWVudGFsLiBGaXgKLQkgIC0tZW5hYmxlLWV4dGVybmFsIGNvbmZpZ3VyZSBzd2l0Y2ggZGVzY3JpcHRpb24uCi0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmM6IChnc3Rfc3VuYXVkaW9taXhlcl9iYXNlX2luaXQpOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYzogKGdzdF9zdW5hdWRpb3NyY19kaXNwb3NlKToKLQkgIEhlbHAgZ3N0LWluZGVudC4KLQotMjAwNy0wMi0wOSAwOToyNDo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguYzogRXhwbGljaXRseSBjYXN0IHJlc3VsdCBvZiBwb2ludGVyIGFyaXRobWV0aWMgdG8gaW50ZWdlciBpbiBvcmRlciB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncyBvbiBzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmlfbXV4X3JpZmZfZ2V0X2F2aV9oZWFkZXIpOgotCSAgRXhwbGljaXRseSBjYXN0IHJlc3VsdCBvZiBwb2ludGVyIGFyaXRobWV0aWMgdG8gaW50ZWdlciBpbiBvcmRlciB0bwotCSAgYXZvaWQgY29tcGlsZXIgd2FybmluZ3Mgb24gc29tZSA2NC1iaXQgc3lzdGVtcy4gU2hvdWxkIGZpeCAjNDA2MDE4LgotCi0yMDA3LTAyLTA4IDExOjA5OjE1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvZGVidWcvcHJvZ3Jlc3NyZXBvcnQuYzogU29tZSBtb3JlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6Ci0JICBTb21lIG1vcmUgZG9jcy4KLQotMjAwNy0wMi0wNyAyMTowOTo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6IFVwZGF0ZSBmb3IgbmV3IGVsZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSAgVXBkYXRlIGZvciBuZXcgZWxlbWVudHMuCi0JICAqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5oOgotCSAgQ29tbWl0IG5ld2x5LWNyZWF0ZWQgaGVhZGVyIGZpbGUgYXMgd2VsbC4KLQotMjAwNy0wMi0wNyAyMDozOToxNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgTWFrZSBwcm9ncmVzc3JlcG9ydCBlbGVtZW50IHBvc3QgbWVzc2FnZXMgd2l0aCB0aGUgY3VycmVudCBwcm9ncmVzcyBvbiB0aGUgYnVzLiBBbHNvIGFkZCBzb21lIGJhc2ljIGRvY3MgZm9yIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVidWcvcHJvZ3Jlc3NyZXBvcnQuYzogKGdzdF9wcm9ncmVzc19yZXBvcnRfcG9zdF9wcm9ncmVzcyksCi0JICAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9kb19xdWVyeSksIChnc3RfcHJvZ3Jlc3NfcmVwb3J0X3JlcG9ydCk6Ci0JICBNYWtlIHByb2dyZXNzcmVwb3J0IGVsZW1lbnQgcG9zdCBtZXNzYWdlcyB3aXRoIHRoZSBjdXJyZW50IHByb2dyZXNzCi0JICBvbiB0aGUgYnVzLiBBbHNvIGFkZCBzb21lIGJhc2ljIGRvY3MgZm9yIGl0LgotCi0yMDA3LTAyLTA3IDEzOjA4OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvaGFsL2hhbC4qOiBTb21lIHNtYWxsIGNsZWFudXBzOyBkZWFsIHdpdGggZXJyb3JzIHdoZW4gcGFyc2luZyB0aGUgSEFMIEFMU0EgY2FwYWJpbGl0aWVzIGEgYml0IGJldHRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvaGFsL2hhbC5jOiAoZ3N0X2hhbF9nZXRfc3RyaW5nKToKLQkgICogZXh0L2hhbC9oYWwuaDoKLQkgIFNvbWUgc21hbGwgY2xlYW51cHM7IGRlYWwgd2l0aCBlcnJvcnMgd2hlbiBwYXJzaW5nIHRoZSBIQUwgQUxTQQotCSAgY2FwYWJpbGl0aWVzIGEgYml0IGJldHRlci4KLQotMjAwNy0wMi0wNiAxNjoyOTozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IExldCdzIHRyeSB0aGlzIGFnYWluIGFuZCB1c2UgdGhlIHJpZ2h0IGNhc3QgdGhpcyB0aW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOiAoZ3N0X3NtcHRlX3RyYW5zaXRpb25fdHlwZV9nZXRfdHlwZSk6Ci0JICBMZXQncyB0cnkgdGhpcyBhZ2FpbiBhbmQgdXNlIHRoZSByaWdodCBjYXN0IHRoaXMgdGltZS4KLQotMjAwNy0wMi0wNiAxNjoyNDo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IEFkZCBjYXN0IHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggb2xkZXIgR0xpYiB2ZXJzaW9ucyB3aGVyZSB0aGUgbmljay9uYW1lIG1lbWJlcnMgaW4gR0VuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfdHJhbnNpdGlvbl90eXBlX2dldF90eXBlKToKLQkgIEFkZCBjYXN0IHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggb2xkZXIgR0xpYiB2ZXJzaW9ucwotCSAgd2hlcmUgdGhlIG5pY2svbmFtZSBtZW1iZXJzIGluIEdFbnVtVmFsdWUgYXJlIG5vdCBkZWNsYXJlZCBhcwotCSAgY29uc3RhbnQgc3RyaW5ncy4KLQotMjAwNy0wMi0wNiAxNTo1NjoxNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2djb25mLzogSW4gZ2NvbmZhdWRpb3NpbmssIGdldCB0aGUgcmlnaHQga2V5IGFzIHRoZSBvbGQga2V5IGluIGRvX3RvZ2dsZSAoaWUuIG9uZSBkZXBlbmRlbnQgb24gdGhlIHByb2ZpbGUgc2VsZWN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2djb25mLmM6IChnc3RfZ2NvbmZfZ2V0X2tleV9mb3Jfc2lua19wcm9maWxlKSwKLQkgIChnc3RfZ2NvbmZfcmVuZGVyX2Jpbl9mcm9tX2tleSksCi0JICAoZ3N0X2djb25mX2dldF9kZWZhdWx0X2F1ZGlvX3NpbmspOgotCSAgKiBleHQvZ2NvbmYvZ2NvbmYuaDoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6IChnZXRfZ2NvbmZfa2V5X2Zvcl9wcm9maWxlKSwKLQkgIChkb190b2dnbGVfZWxlbWVudCksIChnc3RfZ2NvbmZfYXVkaW9fc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zaW5rX2dldF9wcm9wZXJ0eSk6Ci0JICBJbiBnY29uZmF1ZGlvc2luaywgZ2V0IHRoZSByaWdodCBrZXkgYXMgdGhlIG9sZCBrZXkgaW4gZG9fdG9nZ2xlCi0JICAoaWUuIG9uZSBkZXBlbmRlbnQgb24gdGhlIHByb2ZpbGUgc2VsZWN0ZWQpLiBMb2cgc29tZSBtb3JlIHN0dWZmIHNvCi0JICB3ZSBjYW4gc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4KLQotMjAwNy0wMi0wNiAxMToxNjo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXVkaW9meC86IFNvbWUgc21hbGwgY2xlYW51cHMgYW5kIHBvcnQgYm90aCBlbGVtZW50cyB0byB0aGUgbmV3IEdzdEF1ZGlvRmlsdGVyIGJhc2UgY2xhc3MgdG8gc2F2ZSBhIGZldyBsaW5lcyBvZiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuYzogKGdzdF9hdWRpb19hbXBsaWZ5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfY2xhc3NfaW5pdCksIChnc3RfYXVkaW9fYW1wbGlmeV9pbml0KSwKLQkgIChnc3RfYXVkaW9fYW1wbGlmeV9zZXRfcHJvY2Vzc19mdW5jdGlvbiksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0dXApOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYzogKGdzdF9hdWRpb19pbnZlcnRfYmFzZV9pbml0KSwKLQkgIChnc3RfYXVkaW9faW52ZXJ0X2NsYXNzX2luaXQpLCAoZ3N0X2F1ZGlvX2ludmVydF9zZXR1cCk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0Lmg6Ci0JICBTb21lIHNtYWxsIGNsZWFudXBzIGFuZCBwb3J0IGJvdGggZWxlbWVudHMgdG8gdGhlIG5ldyBHc3RBdWRpb0ZpbHRlcgotCSAgYmFzZSBjbGFzcyB0byBzYXZlIGEgZmV3IGxpbmVzIG9mIGNvbW1vbiBjb2RlLgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgIExpbmsgYWdhaW5zdCBsaWJnc3RhdWRpbyBmb3IgdGhlIGFib3ZlIGNoYW5nZXMKLQotMjAwNy0wMi0wMyAyMzozNToyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgRml4IHVwIHRvIHVzZSB0aGUgbmV3bHkgcG9ydGVkIChhY3R1YWxseSB3b3JraW5nKSBHc3RBdWRpb0ZpbHRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IChnc3RfaWlyX2VxdWFsaXplcl9iYXNlX2luaXQpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX2NsYXNzX2luaXQpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfaW5pdCksCi0JICAoc2V0dXBfZmlsdGVyKSwgKGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3NldF9wcm9wZXJ0eSksIChnc3RfaWlyX2VxdWFsaXplcl9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9paXJfZXF1YWxpemVyX3RyYW5zZm9ybV9pcCksIChnc3RfaWlyX2VxdWFsaXplcl9zZXR1cCksCi0JICAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oOgotCSAgRml4IHVwIHRvIHVzZSB0aGUgbmV3bHkgcG9ydGVkIChhY3R1YWxseSB3b3JraW5nKSBHc3RBdWRpb0ZpbHRlci4KLQkgIEJ1bXAgY29yZS9iYXNlIHJlcXVpcmVtZW50cyB0byBDVlMgZm9yIHRoaXMuCi0JICAqIHRlc3RzL2ljbGVzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jOiAoY2hlY2tfYnVzKSwKLQkgIChlcXVhbGl6ZXJfc2V0X2JhbmRfdmFsdWUpLCAoZXF1YWxpemVyX3NldF9hbGxfYmFuZF92YWx1ZXMpLAotCSAgKGVxdWFsaXplcl9zZXRfYmFuZF92YWx1ZV9hbmRfd2FpdCksCi0JICAoZXF1YWxpemVyX3NldF9hbGxfYmFuZF92YWx1ZXNfYW5kX3dhaXQpLCAoZG9fc2xpZGVyX2ZpZGRsaW5nKSwKLQkgIChtYWluKToKLQkgIEFkZCBicmFpbi1kZWFkIGludGVyYWN0aXZlIHRlc3QgZm9yIGVxdWFsaXplci4KLQotMjAwNy0wMi0wMiAxODozNjoyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogUmVuYW1lICJ2YWx1ZXMiIHByb3BlcnR5IHRvICJiYW5kLXZhbHVlcyIgYW5kIGNoYW5nZSB0eXBlIGludG8gYQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IChnc3RfaWlyX2VxdWFsaXplcl9jbGFzc19pbml0KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9zZXRfcHJvcGVydHkpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9maWx0ZXJfaW5wbGFjZSk6Ci0JICBSZW5hbWUgInZhbHVlcyIgcHJvcGVydHkgdG8gImJhbmQtdmFsdWVzIiBhbmQgY2hhbmdlIHR5cGUgaW50byBhCi0JICBHVmFsdWVBcnJheSwgc28gaXQncyBtb3JlIGVhc2lseSBiaW5kYWJsZSBhbmQgdGhlIHJhbmdlIG9mIHRoZQotCSAgdmFsdWVzIHBhc3NlZCBpbiBpcyBkZWZpbmVkIGFuZCBjaGVja2VkIGV0Yy47IGFsc28gZG8gc29tZQotCSAgbG9ja2luZy4KLQotMjAwNy0wMi0wMiAxNzozOToyMSArMDAwMCAgSmFtZXMgRG9jIExpdmluZ3N0b24gPGRvY2xpdmluZ3N0b25AZ21haWwuY29tPgotCi0JICBQb3J0IGVxdWFsaXplciBwbHVnaW4gdG8gMC4xMCAoIzQwMzU3MikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKYW1lcyAiRG9jIiBMaXZpbmdzdG9uICA8ZG9jbGl2aW5nc3RvbiBhdCBnbWFpbCBjb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2VxdWFsaXplci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogKGdzdF9paXJfZXF1YWxpemVyX2dldF90eXBlKSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9iYXNlX2luaXQpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyksCi0JICAoZ3N0X2lpcl9lcXVhbGl6ZXJfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfaWlyX2VxdWFsaXplcl9maWx0ZXJfaW5wbGFjZSksIChnc3RfaWlyX2VxdWFsaXplcl9zZXR1cCksCi0JICAocGx1Z2luX2luaXQpOgotCSAgUG9ydCBlcXVhbGl6ZXIgcGx1Z2luIHRvIDAuMTAgKCM0MDM1NzIpLgotCi0yMDA3LTAxLTMxIDA4OjMyOjU5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiBGaXggYSBvZmYgYnkgb25lIHRoYXQgbGVhZHMgdG8gdGhlIGR1cmF0aW9uIHJlcG9ydGVkIGFzIG9uZSBzYW1wbGUgbGVzcyB0aGFuIGl0IGlzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9zcmNfcXVlcnkpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2hhbmRsZV9zZWVrX2V2ZW50KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9jcmVhdGVfc3JjX3BhZCk6Ci0JICBGaXggYSBvZmYgYnkgb25lIHRoYXQgbGVhZHMgdG8gdGhlIGR1cmF0aW9uIHJlcG9ydGVkIGFzIG9uZQotCSAgc2FtcGxlIGxlc3MgdGhhbiBpdCBpcwotCi0yMDA3LTAxLTMwIDE3OjE5OjMzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBjb25maWd1cmUuYWM6IENoZWNrIGZvciBhbiBPYmplY3RpdmUgQyBjb21waWxlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIENoZWNrIGZvciBhbiBPYmplY3RpdmUgQyBjb21waWxlcgotCSAgKiBzeXMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3h2aWRlby9NYWtlZmlsZS5hbToKLQkgICogc3lzL29zeHZpZGVvL2NvY29hd2luZG93Lmg6Ci0JICAqIHN5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmg6Ci0JICAqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLQkgIFBvcnQgb2Ygb3N4dmlkZW8gcGx1Z2luIHRvIDAuMTAuIERvIE5PVCBjb25zaWRlciAxMDAlIHN0YWJsZSAhCi0JICBGaXhlcyAjNDAyNDcwCi0KLTIwMDctMDEtMjkgMTA6NTk6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6IFNvbWUgbW9yZSBpZ25vcmVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICBTb21lIG1vcmUgaWdub3Jlcy4KLQotMjAwNy0wMS0yOCAxODoyODozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzogRml4IGNyb3BwaW5nIGZvciBwYWNrZWQgNDoyOjIgZm9ybWF0cyBZVVlWL1lVWTIgYW5kIFVZVlkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgIChnc3RfdmlkZW9fY3JvcF9nZXRfaW1hZ2VfZGV0YWlsc19mcm9tX2NhcHMpLAotCSAgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wYWNrZWRfY29tcGxleCk6Ci0JICBGaXggY3JvcHBpbmcgZm9yIHBhY2tlZCA0OjI6MiBmb3JtYXRzIFlVWVYvWVVZMiBhbmQgVVlWWS4KLQkgICogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogKGNoZWNrX2J1c19mb3JfZXJyb3JzKSwKLQkgICh0ZXN0X3dpdGhfY2FwcyksIChtYWluKToKLQkgIEJsb2NrIHN0cmVhbWluZyB0aHJlYWQgYmVmb3JlIGNoYW5naW5nIGZpbHRlciBjYXBzIHdoaWxlIHRoZQotCSAgcGlwZWxpbmUgaXMgcnVubmluZyBzbyB0aGF0IHdlIGRvbid0IGdldCByYW5kb20gbm90LW5lZ290aWF0ZWQKLQkgIGVycm9ycyBqdXN0IGJlY2F1c2UgR1N0cmVhbWVyIGNhbid0IGhhbmRsZSB0aGF0IHlldC4KLQotMjAwNy0wMS0yNyAxNjowODoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogQ2F0Y2ggZXJyb3JzIHdoaWxlIHRoZSB0ZXN0IGlzIHJ1bm5pbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogKHRlc3Rfd2l0aF9jYXBzKToKLQkgIENhdGNoIGVycm9ycyB3aGlsZSB0aGUgdGVzdCBpcyBydW5uaW5nLgotCi0yMDA3LTAxLTI2IDEyOjIxOjQxICswMDAwICBjaGFybGVzIDxjaGFybGVzZzNAZ21haWwuY29tPgotCi0JICBleHQvc2hvdXQyL2dzdHNob3V0Mi4qOiBQcm9wZXJseSBoYW5kbGUgdGFncyBpbiBzaG91dDJzZW5kLiBGaXhlcyAjMzk5ODI1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogY2hhcmxlcyA8Y2hhcmxlc2czIGF0IGdtYWlsIGRvdCBjb20+Ci0JICAqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChnc3Rfc2hvdXQyc2VuZF9pbml0KSwKLQkgIChzZXRfc2hvdXRfbWV0YWRhdGEpLCAoZ3N0X3Nob3V0MnNlbmRfZXZlbnQpOgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSAgUHJvcGVybHkgaGFuZGxlIHRhZ3MgaW4gc2hvdXQyc2VuZC4gRml4ZXMgIzM5OTgyNS4KLQotMjAwNy0wMS0yNSAyMzoyNzo1OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogRml4IHRoZSBTRUVLSU5HIHF1ZXJ5LiBXZSBjYW4gc2VlayBpZiB3ZSBhcmUgaW4gcHVsbCBtb2RlLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIEEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX3NyY19xdWVyeSk6Ci0JICBGaXggdGhlIFNFRUtJTkcgcXVlcnkuIFdlIGNhbiBzZWVrIGlmIHdlIGFyZSBpbiBwdWxsIG1vZGUsIG5vdCB0aGUKLQkgIG90aGVyIHdheSBhcm91bmQuIEFsc28gc2V0IHRoZSBjb3JyZWN0IGZvcm1hdCBpbiB0aGUgc2Vla2luZyBxdWVyeSBhbmQKLQkgIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgaGVhZGVycyBhcmUgbm90IHJlYWQgeWV0IGFuZCB3ZSBjYW4ndCBzYXkKLQkgIGFueXRoaW5nIGFib3V0IG91ciBzZWVraW5nIGNhcGFiaWxpdGllcy4KLQotMjAwNy0wMS0yNSAyMTo1NTo0OSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay86IEZpeCBzcGVsbGluZyBpbiAyIHBsYWNlczogSXQncyBjYWxsZWQgV2F2cGFjaywgbm90IFdhdmVQYWNrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19iYXNlX2luaXQpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX2Jhc2VfaW5pdCk6Ci0JICBGaXggc3BlbGxpbmcgaW4gMiBwbGFjZXM6IEl0J3MgY2FsbGVkIFdhdnBhY2ssIG5vdCBXYXZlUGFjay4KLQotMjAwNy0wMS0yNSAxNDo0MDoxNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBDb252ZXJ0IFNEUCBmaWVsZHMgdG8gdXBwZXIvbG93ZXJjYXNlIGZvbGxvd2luZyB0aGUgcnVsZXMgaW4gdGhlIFNEUCB0byBjYXBzIGRvY3VtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX21lZGlhX3RvX2NhcHMpLAotCSAgKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpOgotCSAgQ29udmVydCBTRFAgZmllbGRzIHRvIHVwcGVyL2xvd2VyY2FzZSBmb2xsb3dpbmcgdGhlIHJ1bGVzIGluIHRoZSBTRFAgdG8KLQkgIGNhcHMgZG9jdW1lbnQuCi0KLTIwMDctMDEtMjUgMTQ6MjI6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBGaXggY2FzZSBvZiBlbmNvZGluZy1uYW1lIGFuZCBrZXkvdmFsdWUgcGFpcnMgdG8gbWF0Y2ggdGhlIGRvY3VtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvUkVBRE1FOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOgotCSAgRml4IGNhc2Ugb2YgZW5jb2RpbmctbmFtZSBhbmQga2V5L3ZhbHVlIHBhaXJzIHRvIG1hdGNoIHRoZSBkb2N1bWVudC4KLQkgIFRoaXMgaXMgdG8gbWFrZSBpbnRlcm9wZXJhdGlvbiB3aXRoIFNEUCBjYXNlLWluc2Vuc2l0aXZlIGFzIHJlcXVpcmVkIGJ5Ci0JICB0aGUgcmVsZXZhbnQgUkZDcy4KLQotMjAwNy0wMS0yNSAxMjowNToxMSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0LzogVXNlIHByb3BlciBwcmludCBzdGF0ZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jOgotCSAgKGdzdF9tdWx0aV9maWxlX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6IChnc3RfbXVsdGlfZmlsZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tdmUvZ3N0bXZlZGVtdXguYzogKGdzdF9tdmVfdmlkZW9fY3JlYXRlX2J1ZmZlciksCi0JICAoZ3N0X212ZV92aWRlb19wYWxldHRlKSwgKGdzdF9tdmVfdmlkZW9fY29kZV9tYXApLAotCSAgKGdzdF9tdmVfYXVkaW9faW5pdCksIChnc3RfbXZlX2F1ZGlvX2RhdGEpLCAoZ3N0X212ZV90aW1lcl9jcmVhdGUpLAotCSAgKGdzdF9tdmVfZGVtdXhfY2hhaW4pOgotCSAgKiBnc3QvbXZlL2dzdG12ZW11eC5jOiAoZ3N0X212ZV9tdXhfcHVzaF9jaHVuayk6Ci0JICAqIGdzdC9tdmUvbXZlYXVkaW9lbmMuYzogKG12ZV9jb21wcmVzc19hdWRpbyk6Ci0JICAqIGdzdC9tdmUvbXZldmlkZW9kZWMxNi5jOiAoaXB2aWRlb19jb3B5X2Jsb2NrKToKLQkgICogZ3N0L212ZS9tdmV2aWRlb2RlYzguYzogKGlwdmlkZW9fY29weV9ibG9jayk6Ci0JICAqIGdzdC9tdmUvbXZldmlkZW9lbmMxNi5jOiAobXZlX2VuY29kZV9mcmFtZTE2KToKLQkgICogZ3N0L212ZS9tdmV2aWRlb2VuYzguYzogKG12ZV9lbmNvZGVfZnJhbWU4KToKLQkgIFVzZSBwcm9wZXIgcHJpbnQgc3RhdGVtZW50cy4KLQkgIEZpeGVzIGJ1aWxkIG9uIG1hYyBvcyB4LgotCSAgPHdpbmdvPiBvbyBsb29rIGF0IG1lIG15IG5hbWUgaXMgZWR3YXJkIGknbSBoYWNraW5nIG9uIG1hY29zIHdvb28KLQotMjAwNy0wMS0yNSAxMTowMjowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBCdW1wIHJlcXVpcmVkIC1jb3JlLy1iYXNlIHRvIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgcmVxdWlyZWQgLWNvcmUvLWJhc2UgdG8gQ1ZTCi0KLTIwMDctMDEtMjUgMTA6NTQ6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwTDE2cGF5Lio6IEZpbGwgdXAgdG8gTVRVIHVzaW5nIGFkYXB0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzogKGdzdF9ydHBfTDE2X3BheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX0wxNl9wYXlfZmx1c2gpLCAoZ3N0X3J0cF9MMTZfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5oOgotCSAgRmlsbCB1cCB0byBNVFUgdXNpbmcgYWRhcHRlci4KLQkgIFRpbWVzdGFtcCBydHAgcGFja2V0cy4KLQotMjAwNy0wMS0yNSAxMDozNjozNSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgVXNlIEdfR1NJWkVfRk9STUFUIGluIHByaW50IHN0YXRlbWVudHMgZm9yIHBvcnRhYmlsaXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9jb2xsZWN0ZWQpOgotCSAgKiBzeXMveGltYWdlL3hpbWFnZXV0aWwuYzogKHhpbWFnZXV0aWxfY2hlY2tfeHNobV9jYWxscyk6Ci0JICBVc2UgR19HU0laRV9GT1JNQVQgaW4gcHJpbnQgc3RhdGVtZW50cyBmb3IgcG9ydGFiaWxpdHkuCi0JICBGaXhlcyBidWlsZCBvbiBtYWNvc3guCi0KLTIwMDctMDEtMjQgMTg6MjA6MTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBQb3J0IGFuZCBlbmFibGUgcmF3IGF1ZGlvIHBheWxvYWRlci9kZXBheWxvYWRlci4gTmVlZHMgYSBiaXQgbW9yZSB3b3JrIG9uIHRoZSBwYXlsb2FkZXIgc2lkZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6IChnc3RfcnRwX0wxNl9kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfTDE2X2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9MMTZfZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9MMTZfZGVwYXlfcGFyc2VfaW50KSwgKGdzdF9ydHBfTDE2X2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfTDE2X2RlcGF5X3Byb2Nlc3MpLCAoZ3N0X3J0cF9MMTZfZGVwYXlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX0wxNl9kZXBheV9nZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9MMTZfZGVwYXlfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX0wxNl9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzogKGdzdF9ydHBfTDE2X3BheV9nZXRfdHlwZSksCi0JICAoZ3N0X3J0cF9MMTZfcGF5X2Jhc2VfaW5pdCksIChnc3RfcnRwX0wxNl9wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9MMTZfcGF5X2luaXQpLCAoZ3N0X3J0cF9MMTZfcGF5X2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX0wxNl9wYXlfc2V0Y2FwcyksIChnc3RfcnRwX0wxNl9wYXlfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cF9MMTZfcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkgIFBvcnQgYW5kIGVuYWJsZSByYXcgYXVkaW8gcGF5bG9hZGVyL2RlcGF5bG9hZGVyLiBOZWVkcyBhIGJpdCBtb3JlIHdvcmsKLQkgIG9uIHRoZSBwYXlsb2FkZXIgc2lkZS4KLQotMjAwNy0wMS0yNCAxNjoyNTo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBPbmx5IHVuYmxvY2sgdGhlIHVkcCBwYWRzIHdoZW4gd2UgbGlua2VkIGFuZCBhY3RpdmF0ZWQgdGhlbSBhbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAocGFkX2Jsb2NrZWQpLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwKLQkgIChnc3RfcnRzcHNyY19hY3RpdmF0ZV9zdHJlYW1zKSwgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgT25seSB1bmJsb2NrIHRoZSB1ZHAgcGFkcyB3aGVuIHdlIGxpbmtlZCBhbmQgYWN0aXZhdGVkIHRoZW0gYWxsLgotCSAgRml4ZXMgIzM5NTY4OC4KLQotMjAwNy0wMS0yNCAxNToxODozNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIHNpbXBsZSBBQzMgZGVwYXlsb2FkZXIgKFJGQyA0MTg0KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5LmM6IChnc3RfcnRwX2FjM19kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfYWMzX2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9hYzNfZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9hYzNfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX2FjM19kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX2FjM19kZXBheV9zZXRfcHJvcGVydHkpLCAoZ3N0X3J0cF9hYzNfZGVwYXlfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX2FjM19kZXBheV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3J0cF9hYzNfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFjM2RlcGF5Lmg6Ci0JICBBZGRlZCBzaW1wbGUgQUMzIGRlcGF5bG9hZGVyIChSRkMgNDE4NCkuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXAydGRlcGF5LmM6IChnc3RfcnRwX21wMnRfZGVwYXlfc2V0Y2Fwcyk6Ci0JICBGaXggYSBsZWFrLgotCi0yMDA3LTAxLTI0IDEyOjQxOjAzICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGdzdC9hdWRpb2Z4LzogQWRkIG5ldyBlbGVtZW50ICJhdWRpb2FtcGxpZnkiLiBUaGlzIGFsbG93cyBzY2FsaW5nIG9mIHJhdyBhdWRpbyBzYW1wbGVzLCBzaW1pbGFyIHRvIHRoZSAidm9sdW1lIiBlbGVtZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQkgICogZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jOgotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X2NsaXBwaW5nX21ldGhvZF9nZXRfdHlwZSksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfYmFzZV9pbml0KSwgKGdzdF9hdWRpb19hbXBsaWZ5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X2luaXQpLCAoZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0X3Byb2Nlc3NfZnVuY3Rpb24pLAotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X3NldF9wcm9wZXJ0eSksIChnc3RfYXVkaW9fYW1wbGlmeV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X3NldF9jYXBzKSwKLQkgIChnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1faW50X2NsaXApLAotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9pbnRfd3JhcF9uZWdhdGl2ZSksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2ludF93cmFwX3Bvc2l0aXZlKSwKLQkgIChnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZmxvYXRfY2xpcCksCi0JICAoZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2Zsb2F0X3dyYXBfbmVnYXRpdmUpLAotCSAgKGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9mbG9hdF93cmFwX3Bvc2l0aXZlKSwKLQkgIChnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaDoKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meC5jOiAocGx1Z2luX2luaXQpOgotCSAgQWRkIG5ldyBlbGVtZW50ICJhdWRpb2FtcGxpZnkiLiBUaGlzIGFsbG93cyBzY2FsaW5nIG9mIHJhdyBhdWRpbwotCSAgc2FtcGxlcywgc2ltaWxhciB0byB0aGUgInZvbHVtZSIgZWxlbWVudCwgYnV0IHByb3ZpZGVzIGRpZmZlcmVudCBtb2RlcwotCSAgZm9yIGNsaXBwaW5nIGFuZCBhbGxvd3MgdW5saW1pdGVkIGFtcGxpZmljYXRpb24uIEl0J3MgbWFpbmx5IHRhcmdldGVkCi0JICBmb3IgY3JlYXRpdmUgc291bmQgZGVzaWduIGFuZCBub3QgYXMgYSByZXBsYWNlbWVudCBvZiB0aGUgInZvbHVtZSIKLQkgIGVsZW1lbnQuIEZpeGVzICMzOTcxNjIKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgQWRkIGRvY3MgZm9yIGF1ZGlvYW1wbGlmeSBhbmQgaW50ZWdyYXRlIHRoZW0gaW50byB0aGUgYnVpbGQgc3lzdGVtCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2FtcGxpZnkuYzogKHNldHVwX2FtcGxpZnkpLAotCSAgKGNsZWFudXBfYW1wbGlmeSksIChHU1RfU1RBUlRfVEVTVCksIChhbXBsaWZ5X3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIGZhaXJseSBleHRlbnNpdmUgdW5pdCB0ZXN0IHN1aXRlIGZvciBhdWRpb2FtcGxpZnkKLQotMjAwNy0wMS0yNCAxMjoyNjo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBVbmJsb2NrIHBhZHMgYWZ0ZXIgYWRkaW5nIHRoZSBwYWRzIHRvIHRoZSBlbGVtZW50IHNvIHRoYXQgYXV0b3BsdWdnZXJzIGdldCBhIGNoYW5nZSB0byBsaW5rIHNvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAocGFkX3VuYmxvY2tlZCksIChwYWRfYmxvY2tlZCk6Ci0JICBVbmJsb2NrIHBhZHMgYWZ0ZXIgYWRkaW5nIHRoZSBwYWRzIHRvIHRoZSBlbGVtZW50IHNvIHRoYXQgYXV0b3BsdWdnZXJzCi0JICBnZXQgYSBjaGFuZ2UgdG8gbGluayBzb21ldGhpbmcuIFBvc3NpYmx5IGZpeGVzICMzOTU2ODguCi0KLTIwMDctMDEtMjQgMTI6MjI6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBGaXggY2FwcyB3aXRoIHBheWxvYWQgbnVtYmVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6IChnc3RfcnRwX21wNHZfZGVwYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6IChnc3RfcnRwX21wYV9kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX21wYV9kZXBheV9pbml0KSwgKGdzdF9ydHBfbXBhX2RlcGF5X3NldGNhcHMpLAotCSAgKGdzdF9ydHBfbXBhX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmM6IChnc3RfcnRwX21wdl9kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX21wdl9kZXBheV9pbml0KSwgKGdzdF9ydHBfbXB2X2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzoKLQkgIEZpeCBjYXBzIHdpdGggcGF5bG9hZCBudW1iZXJzLgotCSAgQWRkIHNvbWUgZml4ZWQgcGF5bG9hZCBudW1iZXJzIHRvIGNhcHMgd2hlbiBwb3NzaWJsZS4KLQotMjAwNy0wMS0yNCAxMToyOTowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvZ3N0cnRweHF0ZGVwYXkuYzogRml4IGNhcHMgb24gdGhlIGRlcGF5bG9hZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L2dzdHJ0cHhxdGRlcGF5LmM6Ci0JICBGaXggY2FwcyBvbiB0aGUgZGVwYXlsb2FkZXIuCi0KLTIwMDctMDEtMjMgMTg6MTY6MDkgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZ3N0L2F1ZGlvZngvOiBBZGQgbmV3IGF1ZGlvZnggZWxlbWVudCAiYXVkaW9pbnZlcnQiLiBUaGlzIGVsZW1lbnQgc3dhcHMgdGhlIHVwcGVyIGFuZCBsb3dlciBoYWxmIG9mIHNhbXBsZXMgYW5kIGNhbiBiLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJldmlld2VkIGJ5OiBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCSAgKiBnc3QvYXVkaW9meC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9meC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2ludmVydC5jOiAoZ3N0X2F1ZGlvX2ludmVydF9iYXNlX2luaXQpLAotCSAgKGdzdF9hdWRpb19pbnZlcnRfY2xhc3NfaW5pdCksIChnc3RfYXVkaW9faW52ZXJ0X2luaXQpLAotCSAgKGdzdF9hdWRpb19pbnZlcnRfc2V0X3Byb3BlcnR5KSwgKGdzdF9hdWRpb19pbnZlcnRfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9faW52ZXJ0X3NldF9jYXBzKSwgKGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2ludCksCi0JICAoZ3N0X2F1ZGlvX2ludmVydF90cmFuc2Zvcm1fZmxvYXQpLAotCSAgKGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuaDoKLQkgIEFkZCBuZXcgYXVkaW9meCBlbGVtZW50ICJhdWRpb2ludmVydCIuIFRoaXMgZWxlbWVudCBzd2FwcyB0aGUgdXBwZXIKLQkgIGFuZCBsb3dlciBoYWxmIG9mIHNhbXBsZXMgYW5kIGNhbiBiZSB1c2VkIGZvciBleGFtcGxlIGZvciBhCi0JICB3aWRlLXN0ZXJlbyBlZmZlY3QuIEZpeGVzICMzOTYwNTcKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sOgotCSAgQWRkIGRvY3MgZm9yIHRoZSBhdWRpb2ludmVydCBlbGVtZW50IGFuZCBhZGQgdGhlbSB0byB0aGUgYnVpbGQgc3lzdGVtLgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9pbnZlcnQuYzogKHNldHVwX2ludmVydCksCi0JICAoY2xlYW51cF9pbnZlcnQpLCAoR1NUX1NUQVJUX1RFU1QpLCAoaW52ZXJ0X3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHVuaXQgdGVzdCBzdWl0ZSBmb3IgdGhlIGF1ZGlvaW52ZXJ0IGVsZW1lbnQuCi0KLTIwMDctMDEtMjMgMTc6MzY6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6IFBhcnNlIGNvbmZpZyBwYXJhbXMgYXMgc3RyaW5nIGFuZCBpbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzogKGdzdF9ydHBfbXA0Z19kZXBheV9wYXJzZV9pbnQpLAotCSAgKGdzdF9ydHBfbXA0Z19kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfbXA0Z19kZXBheV9wcm9jZXNzKToKLQkgIFBhcnNlIGNvbmZpZyBwYXJhbXMgYXMgc3RyaW5nIGFuZCBpbnQuCi0JICBQYXJzZSBhbmQgdXNlIEFVIGhlYWRlciBsZW5ndGgKLQotMjAwNy0wMS0yMyAxNzoyNzozOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3NtcHRlLzogY29uc3RpZnkgc29tZSBzdGF0aWMgc3RydWN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc21wdGUvYmFyYm94d2lwZXMuYzogKGdzdF93aXBlX2JveGVzX2RyYXcpLAotCSAgKGdzdF93aXBlX3RyaWFuZ2xlc19jbG9ja19kcmF3KSwgKGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3KToKLQkgICogZ3N0L3NtcHRlL2dzdG1hc2suYzogKF9nc3RfbWFza19yZWdpc3Rlcik6Ci0JICAqIGdzdC9zbXB0ZS9nc3RtYXNrLmg6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOiAoZ3N0X3NtcHRlX3VwZGF0ZV9tYXNrKToKLQkgICogZ3N0L3NtcHRlL3BhaW50LmM6IChnc3Rfc21wdGVfcGFpbnRfaGJveCksIChkcmF3X2JyZXNlbmhhbV9saW5lKSwKLQkgIChnc3Rfc21wdGVfcGFpbnRfdHJpYW5nbGVfY2xvY2spOgotCSAgY29uc3RpZnkgc29tZSBzdGF0aWMgc3RydWN0cy4KLQkgIERvbid0IHVwZGF0ZSB0aGUgbWFzayBpZiBub3RoaW5nIGNoYW5nZWQgdG8gdGhlIHBhcmFtcy4KLQkgIE1ha2Ugc3VyZSB3ZSBuZXZlciBkcmF3IG91dHNpZGUgb2YgdGhlIHBpY3R1cmUuIEZpeGVzICMzOTgzMjUuCi0KLTIwMDctMDEtMjIgMTM6MDY6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogRXJyb3Igb3V0IHByb3Blcmx5IHdoZW4gcHVsbF9yYW5nZSBmYWlscyB3aGlsZSB3ZSdyZSByZWFkaW5nIHRoZSBoZWFkZXJzLCBpbnN0ZWFkIG9mIGp1c3QgcGF1cy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsKToKLQkgIEVycm9yIG91dCBwcm9wZXJseSB3aGVuIHB1bGxfcmFuZ2UgZmFpbHMgd2hpbGUgd2UncmUgcmVhZGluZyB0aGUKLQkgIGhlYWRlcnMsIGluc3RlYWQgb2YganVzdCBwYXVzaW5nIHRoZSB0YXNrIHNpbGVudGx5LiBGaXhlcyAjMzk5MzM4LgotCi0yMDA3LTAxLTE5IDEzOjA2OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3Qvc21wdGUvZ3N0c21wdGUuYzogU29tZSBtb3JlIHNhbml0eSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoZSBpbnB1dCBmb3JtYXRzIG1hdGNoIGFuZCB0aGUgaW5wdXQgcGFkcyBhcmUgYWN0dWFsbHkgbmUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzogKGdzdF9zbXB0ZV9jb2xsZWN0ZWQpOgotCSAgU29tZSBtb3JlIHNhbml0eSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoZSBpbnB1dCBmb3JtYXRzIG1hdGNoIGFuZCB0aGUKLQkgIGlucHV0IHBhZHMgYXJlIGFjdHVhbGx5IG5lZ290aWF0ZWQsIGluIGNhc2Ugc29tZW9uZSB0cmllcyB0byBmZWVkCi0JICBidWZmZXJzIGZyb20gZmFrZXNyYyBvciBmaWxlc3JjLiBGaXhlcyAjMzk4Mjk5LgotCSAgQWxzbyBjb25zdC1pZnkgYW4gYXJyYXksIGp1c3QgYmVjYXVzZSB3ZSBjYW4uCi0KLTIwMDctMDEtMTkgMTA6MzU6MTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOiBJZ25vcmUgcHJldmlvdXMgY29tbWl0LCB0aGF0IHdhcyBvbmx5IHZhbGlkIGZvciB3aWR0aHMgYW5kIGhlaWdodHMgdGhhdCBhcmUgbXVsdGlwbGVzIG9mIDQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChmaWxsX2k0MjApLCAoZ3N0X3NtcHRlX2NvbGxlY3RlZCk6Ci0JICBJZ25vcmUgcHJldmlvdXMgY29tbWl0LCB0aGF0IHdhcyBvbmx5IHZhbGlkIGZvciB3aWR0aHMgYW5kIGhlaWdodHMKLQkgIHRoYXQgYXJlIG11bHRpcGxlcyBvZiA0LgotCSAgQ29weSBvdmVyIHNpemUvc3RyaWRlIG1hY3JvcyBmcm9tIGpwZWdkZWMuIFRoaXMgYWxsb3dzIHRoZSBlbGVtZW50Ci0JICB0byB3b3JrIHdpdGggYW55IHdpZHRoLGhlaWdodC4uLgotCSAgLi4uIGJ1dCBwdXRzIGluIGV2aWRlbmNlIHRoYXQgdGhlIGFjdHVhbCB0cmFuc2Zvcm1hdGlvbnMgb25seSB3b3JrCi0JICB3aXRoIHdpZHRoL2hlaWdodCB0aGF0IGFyZSBtdWx0aXBsZXMgb2YgNC4KLQotMjAwNy0wMS0xOSAwOTo0ODo0NyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IEFsbG9jYXRlIGJ1ZmZlcnMgb2YgdGhlIHJpZ2h0IHNpemUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfY29sbGVjdGVkKToKLQkgIEFsbG9jYXRlIGJ1ZmZlcnMgb2YgdGhlIHJpZ2h0IHNpemUuCi0JICBUaGUgcHJvcGVyIHNpemUgb2YgYSBJNDIwIGJ1ZmZlciBpbiBieXRlcyBpczoKLQkgIHdpZHRoICogaGVpZ2h0ICogMwotCSAgLS0tLS0tLS0tLS0tLS0tLS0tCi0JICAyCi0KLTIwMDctMDEtMTggMTg6Mzc6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOiBQcm94eSBnZXRjYXBzIG9uIHNpbmsgcGFkcyB0b28sIHNvIHRoYXQgd2UgZWl0aGVyIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvbnMgb24gYWxsIHBhZHMgby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOiAoZ3N0X3NtcHRlX2luaXQpOgotCSAgUHJveHkgZ2V0Y2FwcyBvbiBzaW5rIHBhZHMgdG9vLCBzbyB0aGF0IHdlIGVpdGhlciBlbmQgdXAgd2l0aCB0aGUKLQkgIHNhbWUgZGltZW5zaW9ucyBvbiBhbGwgcGFkcyBvciBlcnJvciBvdXQgaWYgdGhhdCdzIG5vdCBwb3NzaWJsZQotCSAgKHNlZW1zIHRvIHdvcmsgZXZlbiEpLiBGaXhlcyAjMzk4MDg2LCBJIHRoaW5rLgotCi0yMDA3LTAxLTE4IDExOjI5OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBSZW1vdmUgbGFkc3BhIGZyb20gZG9jczsgYWRkIGhpZXJhcmNoeSBpbmZvIGZvciBHc3RBdWRpb1Bhbm9yYW1hOyBmaXggaW50ZWdlciBwcm9wZXJ0aWVzIHdpdGggLTEgYXMgbWkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgIFJlbW92ZSBsYWRzcGEgZnJvbSBkb2NzOyBhZGQgaGllcmFyY2h5IGluZm8gZm9yIEdzdEF1ZGlvUGFub3JhbWE7Ci0JICBmaXggaW50ZWdlciBwcm9wZXJ0aWVzIHdpdGggLTEgYXMgbWluaW11bSB2YWx1ZS4KLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSAgVXBkYXRlIHRvIENWUy4KLQotMjAwNy0wMS0xOCAxMToyMzozNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6IEZpeCBkb2Mgc2VjdGlvbiBuYW1lIChGaXhlcyAjMzk3OTQ2KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYzoKLQkgIEZpeCBkb2Mgc2VjdGlvbiBuYW1lIChGaXhlcyAjMzk3OTQ2KQotCi0yMDA3LTAxLTE4IDEwOjMzOjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBSZW1vdmUgYm9ndXMgQ2hhbmdlTG9nIGVudHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbW92ZSBib2d1cyBDaGFuZ2VMb2cgZW50cnkKLQotMjAwNy0wMS0xNyAxNDozMDo1MCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBzeXMvdjRsMi86IEZpeCBFSU8gaGFuZGluZyB3aGVuIGNhcHR1cmluZy4gQWRkIG5ldyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgYnVmZmVycyB0byBlbnF1ZSAoYW5kIHJlbW92ZSB0aGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICAoZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIpLAotCSAgKGdzdF92NGwyX29iamVjdF9zZXRfcHJvcGVydHlfaGVscGVyKSwKLQkgIChnc3RfdjRsMl9vYmplY3RfZ2V0X3Byb3BlcnR5X2hlbHBlciksIChnc3RfdjRsMl9zZXRfZGVmYXVsdHMpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF92NGwyc3JjX2luaXQpLCAoZ3N0X3Y0bDJzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfdjRsMnNyY19nZXRfcHJvcGVydHkpLCAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHMpOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19maWxsX2Zvcm1hdF9saXN0KSwKLQkgIChnc3RfdjRsMnNyY19ncmFiX2ZyYW1lKSwgKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKSwKLQkgIChnc3RfdjRsMnNyY19jYXB0dXJlX2luaXQpLCAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdGFydCksCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9kZWluaXQpOgotCSAgRml4IEVJTyBoYW5kaW5nIHdoZW4gY2FwdHVyaW5nLiBBZGQgbmV3IHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZgotCSAgYnVmZmVycyB0byBlbnF1ZSAoYW5kIHJlbW92ZSB0aGUgYm9ya2VkIG51bS1idWZmZXJzIHVzYWdlKS4KLQotMjAwNy0wMS0xNiAwODoyOToxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6IFVzZSBhIGZ1bmN0aW9uIGFycmF5IGZvciBwcm9jZXNzIG1ldGhvZHMsIGFkZCBtb3JlIGRvY3MgYW5kIGRlZmluZSB0aGUgc3RhcnRpbmRleCBvZiBlbnVtcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vIGNpcmN1bGFyLWNoYW9zIG9yZz4KLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOiAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV9zZXRfcHJvY2Vzc19mdW5jdGlvbik6Ci0JICBVc2UgYSBmdW5jdGlvbiBhcnJheSBmb3IgcHJvY2VzcyBtZXRob2RzLCBhZGQgbW9yZSBkb2NzIGFuZCBkZWZpbmUgdGhlCi0JICBzdGFydGluZGV4IG9mIGVudW1zLgotCi0yMDA3LTAxLTE0IDE3OjU1OjMzICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBBZGQgc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSBhdWRpbyBzdHJlYW07IHdyaXRlIGJldHRlciBBVklYIGhlYWRlcjsgcmVmYWN0b3IgY29kZSBhIGJpdDsgZG9uJ3QgYW5ub3VuY2Ugdm9yYmlzIGNhcHMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1dyBhdCBza3luZXQgYmU+Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9maW5hbGl6ZSksCi0JICAoZ3N0X2F2aV9tdXhfcGFkX3Jlc2V0KSwgKGdzdF9hdmlfbXV4X3Jlc2V0KSwgKGdzdF9hdmlfbXV4X2luaXQpLAotCSAgKGdzdF9hdmlfbXV4X3ZpZHNpbmtfc2V0X2NhcHMpLCAoZ3N0X2F2aV9tdXhfYXVkc2lua19zZXRfY2FwcyksCi0JICAoZ3N0X2F2aV9tdXhfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9hdmlfbXV4X3JlbGVhc2VfcGFkKSwKLQkgIChnc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyKSwKLQkgIChnc3RfYXZpX211eF9yaWZmX2dldF9hdml4X2hlYWRlciksIChnc3RfYXZpX211eF9yaWZmX2dldF9oZWFkZXIpLAotCSAgKGdzdF9hdmlfbXV4X3dyaXRlX2F2aXhfaW5kZXgpLCAoZ3N0X2F2aV9tdXhfYWRkX2luZGV4KSwKLQkgIChnc3RfYXZpX211eF9iaWdmaWxlKSwgKGdzdF9hdmlfbXV4X3N0YXJ0X2ZpbGUpLAotCSAgKGdzdF9hdmlfbXV4X3N0b3BfZmlsZSksIChnc3RfYXZpX211eF9oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF9hdmlfbXV4X2RvX2J1ZmZlciksIChnc3RfYXZpX211eF9kb19vbmVfYnVmZmVyKSwKLQkgIChnc3RfYXZpX211eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5oOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYzogKHRlYXJkb3duX3NyY19wYWQpOgotCSAgQWRkIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgYXVkaW8gc3RyZWFtOyB3cml0ZSBiZXR0ZXIgQVZJWAotCSAgaGVhZGVyOyByZWZhY3RvciBjb2RlIGEgYml0OyBkb24ndCBhbm5vdW5jZSB2b3JiaXMgY2FwcyBvbiBvdXIgYXVkaW8KLQkgIHNpbmsgcGFkcyBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IGl0IGFueXdheS4gQ2xvc2VzICMzNzkyOTguCi0KLTIwMDctMDEtMTMgMTk6MTI6MzIgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmMgKGdzdF9kZWludGVybGVhdmVfYWRkX25ld19wYWRzKTogVXNlIGZpeGVkIGNhcHMgb24gc3JjIHBhZHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDctMDEtMTMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jIChnc3RfZGVpbnRlcmxlYXZlX2FkZF9uZXdfcGFkcyk6Ci0JICBVc2UgZml4ZWQgY2FwcyBvbiBzcmMgcGFkcy4KLQkgIChnc3RfZGVpbnRlcmxlYXZlX3JlbW92ZV9wYWRzKTogUmVtb3ZlIHNyYyBwYWRzLCBub3Qgc2luayBwYWRzLiBJCi0JICBzZWVtIHRvIGhhdmUgcmV2ZXJzZSBtaWRhcyBkaXNlYXNlIQotCSAgKGdzdF9kZWludGVybGVhdmVfcHJvY2Vzcyk6IFByb3h5IHRpbWVzdGFtcHMsIG9mZnNldHMsIGR1cmF0aW9ucywKLQkgIGFuZCBzZXQgY2FwcyBvbiBvdXRnb2luZyBidWZmZXJzLiBGaXhlcyAjMzk1NTk3LCBJIHRoaW5rLgotCi0yMDA3LTAxLTEzIDE4OjAxOjQxICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYyAoZ3N0X2ludGVybGVhdmVfaW5pdCk6IEluaXQgdGhlIGFjdGl2YXRpb24gbW9kZSBwcm9wZXJseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMS0xMyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jIChnc3RfaW50ZXJsZWF2ZV9pbml0KTogSW5pdCB0aGUKLQkgIGFjdGl2YXRpb24gbW9kZSBwcm9wZXJseS4KLQkgIChnc3RfaW50ZXJsZWF2ZV9zcmNfc2V0Y2FwcywgZ3N0X2ludGVybGVhdmVfc3JjX2dldGNhcHMpCi0JICAoZ3N0X2ludGVybGVhdmVfaW5pdCk6IFNldCBhIHNldGNhcHMgYW5kIGdldGNhcHMgZnVuY3Rpb24gb24gdGhlCi0JICBzcmMgcGFkLCBzbyB0aGF0IHdlIGNhbiBpbXBsZW1lbnQgcHVsbC1tb2RlIG5lZ290aWF0aW9uLgotCSAgKGdzdF9pbnRlcmxlYXZlX3Npbmtfc2V0Y2Fwcyk6IFJlbmFtZWQgZnJvbQotCSAgZ3N0X2ludGVybGVhdmVfc2V0Y2FwcywgYXMgaXQgb25seSBkb2VzIHRoZSBzaW5rIGxvZ2ljIG5vdy4KLQkgIEltcGxlbWVudCBib3RoIGZvciBwdWxsLW1vZGUgYW5kIHB1c2gtbW9kZS4KLQkgIChnc3RfaW50ZXJsZWF2ZV9wcm9jZXNzKTogU2V0IGNhcHMgb24gb3VyIG91dGdvaW5nIGJ1ZmZlci4KLQkgIChnc3RfaW50ZXJsZWF2ZV9zcmNfYWN0aXZhdGVfcHVsbCk6IEZpeCBzb21lIG1vcmUgYm9ndXMgY2FzdHMuCi0JICBXaGF0IGlzIHVwIHdpdGggdGhpcy4KLQotMjAwNy0wMS0xMyAxNTo1MjoxOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLio6IEFkZCAnbWV0aG9kJyBwcm9wZXJ0eSBhbmQgcHJvdmlkZSBhIHNpbXBsZSAobm9uLXBzeWNob2FjdXN0aWMpIHByb2Nlc3NpbmcgbWV0aG9kICgjMzk0ODU5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vIGNpcmN1bGFyLWNoYW9zIG9yZz4KLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV9tZXRob2RfZ2V0X3R5cGUpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV9jbGFzc19pbml0KSwgKGdzdF9hdWRpb19wYW5vcmFtYV9pbml0KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfc2V0X3Byb2Nlc3NfZnVuY3Rpb24pLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV9nZXRfcHJvcGVydHkpLCAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9jYXBzKSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX20yc19pbnRfc2ltcGxlKSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3Myc19pbnRfc2ltcGxlKSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX20yc19mbG9hdF9zaW1wbGUpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fczJzX2Zsb2F0X3NpbXBsZSk6Ci0JICAqIGdzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuaDoKLQkgIEFkZCAnbWV0aG9kJyBwcm9wZXJ0eSBhbmQgcHJvdmlkZSBhIHNpbXBsZSAobm9uLXBzeWNob2FjdXN0aWMpCi0JICBwcm9jZXNzaW5nIG1ldGhvZCAoIzM5NDg1OSkuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzogKEdTVF9TVEFSVF9URVNUKSwKLQkgIChwYW5vcmFtYV9zdWl0ZSk6Ci0JICBUZXN0cyBmb3IgbmV3IG1ldGhvZC4KLQotMjAwNy0wMS0xMiAxODoyODoxMyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBjb21tZW50IG91dCBMQURTUEEgcGx1Z2luIGZvciBub3cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY29tbWVudCBvdXQgTEFEU1BBIHBsdWdpbiBmb3Igbm93Ci0KLTIwMDctMDEtMTIgMTc6MTY6NTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4LzogQWRkIFgtUVQgZGVwYXlsb2FkZXIgdGhhdCB3aWxsIGV2ZW50dWFsbHkgc2hhcmUgY29kZSB3aXRoIHRoZSBkZW11eGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcXRkZW11eC9nc3RydHB4cXRkZXBheS5jOiAoZ3N0X3J0cF94cXRfZGVwYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX3hxdF9kZXBheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfeHF0X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfeHF0X2RlcGF5X2ZpbmFsaXplKSwgKGdzdF9ydHBfcXVpY2t0aW1lX3BhcnNlX3NkKSwKLQkgIChnc3RfcnRwX3hxdF9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfeHF0X2RlcGF5X3Byb2Nlc3MpLAotCSAgKGdzdF9ydHBfeHF0X2RlcGF5X3NldF9wcm9wZXJ0eSksIChnc3RfcnRwX3hxdF9kZXBheV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfeHF0X2RlcGF5X2NoYW5nZV9zdGF0ZSksIChnc3RfcnRwX3hxdF9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9xdGRlbXV4L2dzdHJ0cHhxdGRlcGF5Lmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIpLCAoZ3N0X3F0ZGVtdXhfbG9vcCksCi0JICAocXRkZW11eF9wYXJzZV9tb292KSwgKHF0ZGVtdXhfcGFyc2VfY29udGFpbmVyKSwKLQkgIChxdGRlbXV4X3BhcnNlX25vZGUpLCAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksCi0JICAocXRkZW11eF9wYXJzZV90cmFrKSwgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgICogZ3N0L3F0ZGVtdXgvcXVpY2t0aW1lLmM6IChwbHVnaW5faW5pdCk6Ci0JICBBZGQgWC1RVCBkZXBheWxvYWRlciB0aGF0IHdpbGwgZXZlbnR1YWxseSBzaGFyZSBjb2RlIHdpdGggdGhlIGRlbXV4ZXIuCi0JICBNYWtlIG5ldyBwbHVnaW4gZW50cnkgcG9pbnQgd2l0aCBxdWlja3RpbWUgcmVsZWF0ZWQgc3R1ZmYuCi0KLTIwMDctMDEtMTIgMTI6MTA6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOiBEaXN0IGFsbCBuZXcgZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvTWFrZWZpbGUuYW06Ci0JICBEaXN0IGFsbCBuZXcgZmlsZXMuCi0KLTIwMDctMDEtMTIgMTA6Mjc6MjUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEFjdGl2YXRlIGRvY3MgZm9yIGphY2ssIHNkbCBhbmQgcXRkZW11eC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5zaWduYWxzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXRkZW11eC54bWw6Ci0JICBBY3RpdmF0ZSBkb2NzIGZvciBqYWNrLCBzZGwgYW5kIHF0ZGVtdXguCi0KLTIwMDctMDEtMTIgMTA6MjI6MTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4LzogQ2xlYW51cCBhbmQgcmVmYWN0b3IgdG8gbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChleHRyYWN0X2luaXRpYWxfbGVuZ3RoX2FuZF9mb3VyY2MpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfaGVhZGVyKSwgKGdzdF9xdGRlbXV4X2NvbWJpbmVfZmxvd3MpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpLCAoZ3N0X3F0ZGVtdXhfbG9vcCksCi0JICAoZ3N0X3F0ZGVtdXhfY2hhaW4pLCAocXRkZW11eF9zaW5rX2FjdGl2YXRlX3B1bGwpLAotCSAgKHF0ZGVtdXhfaW5mbGF0ZSksIChxdGRlbXV4X3BhcnNlX21vb3YpLCAocXRkZW11eF9wYXJzZV9jb250YWluZXIpLAotCSAgKHF0ZGVtdXhfcGFyc2Vfbm9kZSksIChxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUpLAotCSAgKHF0ZGVtdXhfdHJlZV9nZXRfc2libGluZ19ieV90eXBlKSwgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLAotCSAgKHF0ZGVtdXhfcGFyc2Vfc2FtcGxlcyksIChxdGRlbXV4X3BhcnNlX3NlZ21lbnRzKSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyYWspLCAocXRkZW11eF90YWdfYWRkX3N0ciksIChxdGRlbXV4X3RhZ19hZGRfbnVtKSwKLQkgIChxdGRlbXV4X3RhZ19hZGRfZGF0ZSksIChxdGRlbXV4X3RhZ19hZGRfZ25yZSksCi0JICAocXRkZW11eF9wYXJzZV91ZHRhKSwgKHF0ZGVtdXhfcmVkaXJlY3RzX3NvcnRfZnVuYyksCi0JICAocXRkZW11eF9wcm9jZXNzX3JlZGlyZWN0cyksIChxdGRlbXV4X3BhcnNlX3JlZGlyZWN0cyksCi0JICAocXRkZW11eF9wYXJzZV90cmVlKSwgKGdzdF9xdGRlbXV4X2hhbmRsZV9lc2RzKSwKLQkgIChxdGRlbXV4X3ZpZGVvX2NhcHMpLCAocXRkZW11eF9hdWRpb19jYXBzKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X2R1bXAuYzogKHF0ZGVtdXhfZHVtcF9tdmhkKSwKLQkgIChxdGRlbXV4X2R1bXBfdGtoZCksIChxdGRlbXV4X2R1bXBfZWxzdCksIChxdGRlbXV4X2R1bXBfbWRoZCksCi0JICAocXRkZW11eF9kdW1wX2hkbHIpLCAocXRkZW11eF9kdW1wX3ZtaGQpLCAocXRkZW11eF9kdW1wX2RyZWYpLAotCSAgKHF0ZGVtdXhfZHVtcF9zdHNkKSwgKHF0ZGVtdXhfZHVtcF9zdHRzKSwgKHF0ZGVtdXhfZHVtcF9zdHNzKSwKLQkgIChxdGRlbXV4X2R1bXBfc3RzYyksIChxdGRlbXV4X2R1bXBfc3RzeiksIChxdGRlbXV4X2R1bXBfc3RjbyksCi0JICAocXRkZW11eF9kdW1wX2NvNjQpLCAocXRkZW11eF9kdW1wX2Rjb20pLCAocXRkZW11eF9kdW1wX2NtdmQpLAotCSAgKHF0ZGVtdXhfZHVtcF91bmtub3duKSwgKHF0ZGVtdXhfbm9kZV9kdW1wX2ZvcmVhY2gpLAotCSAgKHF0ZGVtdXhfbm9kZV9kdW1wKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eF9kdW1wLmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfZm91cmNjLmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXhfdHlwZXMuYzogKHF0ZGVtdXhfdHlwZV9nZXQpOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4X3R5cGVzLmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0cGFsZXR0ZS5oOgotCSAgQ2xlYW51cCBhbmQgcmVmYWN0b3IgdG8gbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRhYmxlLgotCSAgTW92ZSBkZWJ1Z2dpbmcvdGFibGVzIGludG8gc2VwYXJhdGUgZmlsZXMuCi0JICBBZGQgMi80LzE2IGNvbG9yIHBhbGxldGVlIHN1cHBvcnQuCi0JICBGaXggcmF3IDE1IGJpdCBSR0IgaGFuZGxpbmcuCi0JICBVc2UgbW9yZSBGT1VSQ0MgY29uc3RhbnRzLgotCSAgQWRkIHNvbWUgZG9jcy4KLQotMjAwNy0wMS0xMSAxOTo1MTowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6IE1pbm9yIGNsZWFuLXVwOiB1c2UgZW51bSB2YWx1ZXMgaW5zdGVhZCBvZiBoYXJkY29kZWQgY29uc3RhbnRzICgjMzk1NTM2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19tb2RlX2dldF90eXBlKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfY29ycmVjdGlvbl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfam9pbnRfc3RlcmVvX21vZGVfZ2V0X3R5cGUpOgotCSAgTWlub3IgY2xlYW4tdXA6IHVzZSBlbnVtIHZhbHVlcyBpbnN0ZWFkIG9mIGhhcmRjb2RlZCBjb25zdGFudHMgKCMzOTU1MzYpLgotCi0yMDA3LTAxLTExIDE2OjU5OjQwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBTZXQgY29ycmVjdCBjYXBzIG9uIG91dGdvaW5nIHB1bGxlZCBidWZmZXJzLCBvciB0aGluZ3MgYmxvdyB1cCBhZnRlciByZWNlbnQgY29yZSBjaGFuZ2VzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0dGFnZGVtdXguYzogKGdzdF90YWdfZGVtdXhfcmVhZF9yYW5nZSk6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAoZ3N0X2lkM2RlbXV4X3JlYWRfcmFuZ2UpOgotCSAgU2V0IGNvcnJlY3QgY2FwcyBvbiBvdXRnb2luZyBwdWxsZWQgYnVmZmVycywgb3IgdGhpbmdzIGJsb3cgdXAKLQkgIGFmdGVyIHJlY2VudCBjb3JlIGNoYW5nZXMuCi0KLTIwMDctMDEtMTEgMTE6MDU6MDQgKzAwMDAgIEpvbmFzIEhvbG1iZXJnIDxqb25hcy5ob2xtYmVyZ0BheGlzLmNvbT4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogUmV0dXJuIEZMT1cgZXJyb3JzIEFTQVAuIEZpeGVzICMzOTQ5NzcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBKb25hcyBIb2xtYmVyZyA8am9uYXMgZG90IGhvbG1iZXJnIGF0IGF4aXMgZG90IGNvbT4KLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2luaXQpLAotCSAgKGdzdF9tdWx0aXBhcnRfbXV4X3JlcXVlc3RfbmV3X3BhZCksCi0JICAoZ3N0X211bHRpcGFydF9tdXhfcXVldWVfcGFkcyksIChnc3RfbXVsdGlwYXJ0X211eF9jb2xsZWN0ZWQpLAotCSAgKGdzdF9tdWx0aXBhcnRfbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICBSZXR1cm4gRkxPVyBlcnJvcnMgQVNBUC4gRml4ZXMgIzM5NDk3Ny4KLQkgIE1pc2MgY2xlYW51cHMuCi0KLTIwMDctMDEtMTEgMDk6MzA6NTkgKzAwMDAgIEx1dHogTXVlbGxlciA8bHV0ekB0b3Bmcm9zZS5kZT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBDaGVjayBmb3Igc3RyZWFtIHBhZCBiZWZvcmUgYWN0aXZhdGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEx1dHogTXVlbGxlciA8bHV0eiBhdCB0b3Bmcm9zZSBkb3QgZGU+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpOgotCSAgQ2hlY2sgZm9yIHN0cmVhbSBwYWQgYmVmb3JlIGFjdGl2YXRpbmcuCi0KLTIwMDctMDEtMTAgMTU6MTk6NDggKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBnc3QvcnRzcC86IEFsbG93IHVybCB0byBiZSBOVUxMIHRvIGJlIGFibGUgdG8gdXNlIGl0IGZvciBzZXJ2ZXIgY29ubmVjdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2ogYXQgYXhpcyBjb20+Ci0JICAqIGdzdC9ydHNwL0NPUFlJTkcuTUlUOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fZnJlZSksIChnc3RfcnRzcHNyY19jbGVhbnVwKSwKLQkgIChnc3RfcnRzcHNyY19hbGxvY191ZHBfcG9ydHMpLCAocGFkX3VuYmxvY2tlZCksIChwYWRfYmxvY2tlZCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLAotCSAgKGdzdF9ydHNwc3JjX2FjdGl2YXRlX3N0cmVhbXMpLCAoZ3N0X3J0c3BzcmNfbG9vcF9pbnRlcmxlYXZlZCksCi0JICAoZ3N0X3J0c3BzcmNfbG9vcF91ZHApLCAoZ3N0X3J0c3BzcmNfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfbWV0aG9kcyksCi0JICAoZ3N0X3J0c3BzcmNfY3JlYXRlX3RyYW5zcG9ydHNfc3RyaW5nKSwKLQkgIChnc3RfcnRzcHNyY19wcmVwYXJlX3RyYW5zcG9ydHMpLCAoZ3N0X3J0c3BzcmNfc2V0dXBfc3RyZWFtcyksCi0JICAoZ3N0X3J0c3BzcmNfb3BlbiksIChnc3RfcnRzcHNyY19jbG9zZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jcmVhdGUpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9jb25uZWN0KSwgKHJ0c3BfY29ubmVjdGlvbl9zZW5kKSwgKHJlYWRfbGluZSksCi0JICAocGFyc2VfcmVxdWVzdF9saW5lKSwgKHBhcnNlX2xpbmUpLCAocnRzcF9jb25uZWN0aW9uX3JlYWQpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9jbG9zZSk6Ci0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmM6IChydHNwX2luaXRfc3RhdHVzKSwgKHJ0c3Bfc3RycmVzdWx0KSwKLQkgIChydHNwX21ldGhvZF9hc190ZXh0KSwgKHJ0c3BfaGVhZGVyX2FzX3RleHQpLAotCSAgKHJ0c3Bfc3RhdHVzX2FzX3RleHQpLCAocnRzcF9maW5kX2hlYWRlcl9maWVsZCksCi0JICAocnRzcF9maW5kX21ldGhvZCk6Ci0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3BleHR3bXMuYzogKHJ0c3BfZXh0X3dtc19hZnRlcl9zZW5kKSwKLQkgIChydHNwX2V4dF93bXNfY29uZmlndXJlX3N0cmVhbSk6Ci0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmM6IChydHNwX21lc3NhZ2VfbmV3KSwgKHJ0c3BfbWVzc2FnZV9pbml0KSwKLQkgIChydHNwX21lc3NhZ2VfbmV3X3JlcXVlc3QpLCAocnRzcF9tZXNzYWdlX2luaXRfcmVxdWVzdCksCi0JICAocnRzcF9tZXNzYWdlX25ld19yZXNwb25zZSksIChydHNwX21lc3NhZ2VfaW5pdF9yZXNwb25zZSksCi0JICAocnRzcF9tZXNzYWdlX2luaXRfZGF0YSksIChydHNwX21lc3NhZ2VfdW5zZXQpLAotCSAgKHJ0c3BfbWVzc2FnZV9mcmVlKSwgKHJ0c3BfbWVzc2FnZV9hZGRfaGVhZGVyKSwKLQkgIChydHNwX21lc3NhZ2VfZ2V0X2hlYWRlciksIChydHNwX21lc3NhZ2Vfc2V0X2JvZHkpLAotCSAgKHJ0c3BfbWVzc2FnZV9nZXRfYm9keSksIChkdW1wX21lbSksIChydHNwX21lc3NhZ2VfZHVtcCk6Ci0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmg6Ci0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuYzogKHNkcF9tZXNzYWdlX2dldF9hdHRyaWJ1dGVfdmFsX24pLAotCSAgKHNkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbF9uKSwgKHJlYWRfc3RyaW5nKSwgKHJlYWRfc3RyaW5nX2RlbCksCi0JICAoc2RwX3BhcnNlX2xpbmUpLCAoc2RwX21lc3NhZ2VfcGFyc2VfYnVmZmVyKSwgKHByaW50X21lZGlhKSwKLQkgIChzZHBfbWVzc2FnZV9kdW1wKToKLQkgIEFsbG93IHVybCB0byBiZSBOVUxMIHRvIGJlIGFibGUgdG8gdXNlIGl0IGZvciBzZXJ2ZXIgY29ubmVjdGlvbnMuCi0JICBDYW4gbm93IHNlbmQgcmVzcG9uc2VzIGFzIHdlbGwgYXMgcmVxdWVzdHMuCi0JICBObyBsb25nZXIgaGFuZ3MgaW4gYW4gZW5kbGVzcyBsb29wIGlmIEVPRiBpcyByZWNlaXZlZC4KLQkgIENhbiBub3cgY29udmVydCBhIHN0YXR1cyBjb2RlIHRvIGEgdGV4dCBzdHJpbmcuCi0JICBSZXR1cm4gUlRTUF9IRFJfSU5WQUxJRCBmb3IgdW5rbm93biBoZWFkZXJzLgotCSAgUmV0dXJuIFJUU1BfSU5WQUxJRCBmb3IgdW5rbm93biBtZXRob2RzLgotCSAgQ29weSBDU2VxIGFuZCBTZXNzaW9uIGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdC4KLQkgIE9ubHkgZnJlZSBtZW1vcnkgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IHNldCBtZXNzYWdlIHR5cGUuCi0JICBBZGRlZCBjb25zdCB0byBmdW5jdGlvbiBhcmd1bWVudHMgYXMgYXBwcm9wcmlhdGUuCi0JICBBdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcgd2hlbiBpbml0aWFsaXppbmcgbm1lZGlhLgotCSAgVXNlIGd1aW50IHJhdGhlciB0aGFuIGdpbnQgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCi0JICBGaXggY3Jhc2hlciBpbiB3bXMgZXh0ZW5zaW9uLgotCSAgRmFjdG9yIG91dCBzdHJlYW0gc2V0dXAgZnJvbSBvcGVuX2Nvbm5lY3Rpb24uCi0JICBEZWxheSBhY3RpdmF0aW9uIG9mIHN0cmVhbXMgd2hlbiBhY3R1YWwgZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZQotCSAgc2VydmVyLCB0aGlzIHByZXBhcmVzIHVzIHRvIGRvIHByb3BlciBwcm90b2NvbCBzd2l0Y2hpbmcuCi0JICBBZGRlZCBuZXcgbGljZW5zZS4KLQkgIEZpeGVzICMzODA4OTUuCi0KLTIwMDctMDEtMTAgMDk6NDc6NDMgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgU29tZSBzbWFsbCBkb2NzIGZpeGVzICgjMzk0ODUxKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vIHVidW50dSBjb20+Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jOgotCSAgU29tZSBzbWFsbCBkb2NzIGZpeGVzICgjMzk0ODUxKS4KLQotMjAwNy0wMS0wOSAxMjoyNToyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBGaXggZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICBGaXggZG9jcy4KLQotMjAwNy0wMS0wOSAxMjoyMzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIFJGQyAyMjUwIE1QRUcgVmlkZW8gRGVwYXlsb2FkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5jOiAoZ3N0X3J0cF9tcHZfZGVwYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX21wdl9kZXBheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfbXB2X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXB2X2RlcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF9tcHZfZGVwYXlfcHJvY2VzcyksCi0JICAoZ3N0X3J0cF9tcHZfZGVwYXlfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBfbXB2X2RlcGF5X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9tcHZfZGVwYXlfY2hhbmdlX3N0YXRlKSwgKGdzdF9ydHBfbXB2X2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcHZkZXBheS5oOgotCSAgQWRkZWQgUkZDIDIyNTAgTVBFRyBWaWRlbyBEZXBheWxvYWRlci4KLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzogKGdzdF9ydHBfaDI2M3BfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9oMjYzcF9kZXBheV9wcm9jZXNzKToKLQkgIEZpeCBIZWFkZXIgZmlsZS4gU21hbGwgY2xlYW51cHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmM6IChnc3RfcnRwX21wNGdfZGVwYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X2luaXQpLCAoZ3N0X3J0cF9tcDRnX2RlcGF5X2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX21wNGdfZGVwYXlfcHJvY2VzcyksIChnc3RfcnRwX21wNGdfZGVwYXlfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzogKGdzdF9ydHBfbXA0dl9kZXBheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX21wNHZfZGVwYXlfaW5pdCksIChnc3RfcnRwX21wNHZfZGVwYXlfZmluYWxpemUpLAotCSAgKGdzdF9ydHBfbXA0dl9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfbXA0dl9kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX21wNHZfZGVwYXlfY2hhbmdlX3N0YXRlKToKLQkgIFJlbW92ZSB1c3VzZWQgY29kZS4gUmVtb3ZlIEFkYXB0ZXIgZnJvbSBzdGF0ZSBDaGFuZ2UuIEFkZGVkIGRlYnVnLgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6IChnc3RfcnRwX21wYV9kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfbXBhX2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9tcGFfZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF9tcGFfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX21wYV9kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSAgU3ViY2xhc3MgYmFzZSBkZXBheWxvYWRlci4KLQkgIEFkZGVkIGRlYnVnLgotCSAgU3VwcG9ydCBzdGF0aWMgcGF5bG9hZCB0eXBlIGFzc2lnbm1lbnQgYXMgd2VsbC4KLQkgICogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgIEZpeCBjYXBzLgotCi0yMDA3LTAxLTA4IDEyOjQ1OjEwICswMDAwICBWaW5jZW50IFRvcnJpIDx2dG9ycmlAdW5pdi1ldnJ5LmZyPgotCi0JICBleHQvanBlZy86IFRoZXNlIGxpYmpwZWcgY2FsbGJhY2tzIHNob3VsZCByZXR1cm4gYSAnYm9vbGVhbicgKHVuc2lnbmVkIGNoYXIgYXBwYXJlbnRseSkgYW5kIG5vdCBhICdnYm9vbGVhbicgKHdoaWNoIG0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFZpbmNlbnQgVG9ycmkgIDx2dG9ycmkgYXQgdW5pdi1ldnJ5IGZyPgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzoKLQkgICogZXh0L2pwZWcvc21va2Vjb2RlYy5jOgotCSAgVGhlc2UgbGlianBlZyBjYWxsYmFja3Mgc2hvdWxkIHJldHVybiBhICdib29sZWFuJyAodW5zaWduZWQgY2hhcgotCSAgYXBwYXJlbnRseSkgYW5kIG5vdCBhICdnYm9vbGVhbicgKHdoaWNoIG1hcHMgdG8gZ2ludCkuIEZpeGVzCi0JICB3YXJuaW5ncyB3aGVuIGNvbXBpbGluZyB3aXRoIE1pbmdXICgjMzkzNDI3KS4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9yZWFkKToKLQkgIFVzZSBpb2N0bHNvY2tldCBvbiB3aW4zMi4KLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY3JlYXRlKToKLQkgIFNvbWUgcHJpbnRmIGZvcm1hdCBmaXhlcyBmb3Igd2luMzIuCi0KLTIwMDctMDEtMDcgMjI6MDM6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgTmV3IGVsZW1lbnRzIGludGVybGVhdmUgYW5kIGRlaW50ZXJsZWF2ZSwgaW1wbGVtZW50IGNoYW5uZWwgaW50ZXJsZWF2aW5nIGFuZCBkZWludGVybGVhdmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNy0wMS0wNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2ludGVybGVhdmUvcGx1Z2luLmg6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL3BsdWdpbi5jOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOiBOZXcgZWxlbWVudHMgaW50ZXJsZWF2ZSBhbmQKLQkgIGRlaW50ZXJsZWF2ZSwgaW1wbGVtZW50IGNoYW5uZWwgaW50ZXJsZWF2aW5nIGFuZCBkZWludGVybGVhdmluZy4KLQkgIFRoZSBpbnRlcmxlYXZlciBjYW4gb3BlcmF0ZSBpbiBwdWxsIG9yIHB1c2ggbW9kZSBidXQgdGhlCi0JICBkZWludGVybGVhdmVyIGlzIG1vcmUgbGlrZSBhIGRlbXV4ZXIgYW5kIGNhbiBvbmx5IG9wZXJhdGUgaW4gcHVzaAotCSAgbW9kZS4KLQotMjAwNy0wMS0wNyAxMDo0NDoxMiArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOiBVc2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSBmb3IgY29udmVyc2lvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOiAoZ3N0X2N1dHRlcl9jaGFpbik6Ci0JICBVc2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSBmb3IgY29udmVyc2lvbi4KLQkgICogd2luMzIvdnM2L2xpYmdzdG1hdHJvc2thLmRzcDoKLQkgIEFkZCB6bGliIHRvIHRoZSBsaW5rLgotCSAgKiB3aW4zMi92czYvbGliZ3N0dmlkZW9ib3guZHNwOgotCSAgVXBkYXRlIGxpYm9pbCBsaWJyYXJ5IG5hbWUgKHByb2plY3QgaXMgbGlua2VkIHRvIGxpYm9pbC0wLjMtMC5saWIgbm93KS4KLQotMjAwNy0wMS0wNSAxODozMjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQ2hlY2sgZm9yIHpsaWIgYW5kIGlmIGF2YWlsYWJsZSBwYXNzIGl0IGV4cGxpY2l0bHkgdG8gdGhlIGxpbmtlciB3aGVuIGxpbmtpbmcgcXRkZW11eC4gSWYgbm90IGF2YWlsYWJsZSAob3IgLS1kaXNhYmxlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvcXRkZW11eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV9tb292KToKLQkgIENoZWNrIGZvciB6bGliIGFuZCBpZiBhdmFpbGFibGUgcGFzcyBpdCBleHBsaWNpdGx5IHRvIHRoZSBsaW5rZXIKLQkgIHdoZW4gbGlua2luZyBxdGRlbXV4LiBJZiBub3QgYXZhaWxhYmxlIChvciAtLWRpc2FibGUtZXh0ZXJuYWwgaGFzCi0JICBiZWVuIHNwZWNpZmllZCEpLCBkaXNhYmxlIHRoZSBiaXRzIGluIHF0ZGVtdXggdGhhdCB1c2UgaXQuIEZpeGVzCi0JICBidWlsZCBvbiBNaW5nVyAoIzM5Mjg1NikuCi0KLTIwMDctMDEtMDUgMTc6MjM6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbTogSWYgemxpYiBpcyBhdmFpbGFibGUgYW5kIHVzZWQsIHdlIG11c3QgbGluayBpdCBleHBsaWNpdGx5IGZvciB0aGluZ3MgdG8gd29yayBvbiBNaW5nVyAoZml4ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbToKLQkgIElmIHpsaWIgaXMgYXZhaWxhYmxlIGFuZCB1c2VkLCB3ZSBtdXN0IGxpbmsgaXQgZXhwbGljaXRseSBmb3IKLQkgIHRoaW5ncyB0byB3b3JrIG9uIE1pbmdXIChmaXhlcyAjMzkyODU1KS4KLQotMjAwNy0wMS0wNSAxNjowNzoxMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogQ2FsbCBnX3RocmVhZF9pbml0KCkgcmlnaHQgYXQgdGhlIGJlZ2lubmluZy4gUmVtb3ZlIHN1cGVyZmx1b3VzIGdzdF9pbml0KCkgLSB3ZSd2ZSBhbHJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYzogKG1haW4pOgotCSAgQ2FsbCBnX3RocmVhZF9pbml0KCkgcmlnaHQgYXQgdGhlIGJlZ2lubmluZy4gUmVtb3ZlIHN1cGVyZmx1b3VzCi0JICBnc3RfaW5pdCgpIC0gd2UndmUgYWxyZWFkeSBiZWVuIGluaXRlZCB2aWEgdGhlIEdPcHRpb24gc3R1ZmYuCi0KLTIwMDctMDEtMDQgMTE6MDI6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9lc2QvZXNkc2luay5jOiBEb24ndCByZXR1cm4gYm9ndXMgdmFsdWVzIHdoZW4gZXNkX2dldF9kZWxheSgpIGZhaWxzIGZvciBzb21lIHJlYXNvbiAoIzM5MjE4OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19kZWxheSk6Ci0JICBEb24ndCByZXR1cm4gYm9ndXMgdmFsdWVzIHdoZW4gZXNkX2dldF9kZWxheSgpIGZhaWxzIGZvciBzb21lCi0JICByZWFzb24gKCMzOTIxODkpLgotCi0yMDA3LTAxLTA0IDA5OjQ0OjU3ICswMDAwICBWaW5jZW50IFRvcnJpIDx2dG9ycmlAdW5pdi1ldnJ5LmZyPgotCi0JICBBZGQgZGlyZWN0c291bmRzaW5rIHRvIGJ1aWxkIGFuZCBkaXN0IGl0LCBzbyBpdCBnZXRzIGJ1aWx0IHdoZW4gY29tcGlsaW5nIHdpdGggTWluZ1cgb24gd2luMzIgYW5kIHRoZSByZXF1aXJlZCBoZWFkZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFZpbmNlbnQgVG9ycmkgIDx2dG9ycmkgYXQgdW5pdi1ldnJ5IGZyPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIHN5cy9NYWtlZmlsZS5hbToKLQkgICogc3lzL2RpcmVjdHNvdW5kL01ha2VmaWxlLmFtOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICAoZ3N0X2RpcmVjdHNvdW5kc2lua19yZXNldCk6Ci0JICBBZGQgZGlyZWN0c291bmRzaW5rIHRvIGJ1aWxkIGFuZCBkaXN0IGl0LCBzbyBpdCBnZXRzIGJ1aWx0IHdoZW4KLQkgIGNvbXBpbGluZyB3aXRoIE1pbmdXIG9uIHdpbjMyIGFuZCB0aGUgcmVxdWlyZWQgaGVhZGVycyBhbmQgbGlicmFyaWVzCi0JICBhcmUgYXZhaWxhYmxlIChmaXhlczogIzM5MjYzOCkuIEFsc28gc2ltcGxpZnkgRGlyZWN0RHJhdyBjaGVjayBhIGJpdC4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvLmN2c2lnbm9yZToKLQkgIEZpeCBDVlMgaWdub3JlIGZvciBuZW9uaHR0cHNyYyB0ZXN0IGJpbmFyeS4KLQotMjAwNy0wMS0wMyAxOTo1NDozMyArMDAwMCAgVmluY2VudCBUb3JyaSA8dnRvcnJpQHVuaXYtZXZyeS5mcj4KLQotCSAgQWRkIGRpcmVjdGRyYXdzaW5rIHRvIGJ1aWxkIGFuZCBkaXN0IGl0LCBzbyBpdCBnZXRzIGJ1aWx0IHdoZW4gY29tcGlsaW5nIHdpdGggTWluZ1cgb24gd2luMzIgYW5kIHRoZSByZXF1aXJlZCBoZWFkZXJzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBWaW5jZW50IFRvcnJpICA8dnRvcnJpIGF0IHVuaXYtZXZyeSBmcj4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBzeXMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9kaXJlY3RkcmF3L01ha2VmaWxlLmFtOgotCSAgQWRkIGRpcmVjdGRyYXdzaW5rIHRvIGJ1aWxkIGFuZCBkaXN0IGl0LCBzbyBpdCBnZXRzIGJ1aWx0IHdoZW4KLQkgIGNvbXBpbGluZyB3aXRoIE1pbmdXIG9uIHdpbjMyIGFuZCB0aGUgcmVxdWlyZWQgaGVhZGVycyBhbmQgbGlicmFyaWVzCi0JICBhcmUgYXZhaWxhYmxlIChmaXhlczogIzM5MjMxMykuCi0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JICAoZ3N0X2RpcmVjdGRyYXdzaW5rX2NlbnRlcl9yZWN0KSwgKGdzdF9kaXJlY3RkcmF3c2lua19zaG93X2ZyYW1lKSwKLQkgIChnc3RfZGlyZWN0ZHJhd3Npbmtfc2V0dXBfZGRyYXcpLAotCSAgKGdzdF9kaXJlY3RkcmF3c2lua19zdXJmYWNlX2NyZWF0ZSk6Ci0JICBDb21tZW50IG91dCBzb21lIHVudXNlZCB0aGluZ3MgYW5kIGZpeCBzb21lIHByaW50ZiBmb3JtYXQgaXNzdWVzIGluCi0JICBvcmRlciB0byBhdm9pZCB3YXJuaW5ncyB3aGVuIGJ1aWxkbGluZyB3aXRoIE1pbmdXICgjMzkyMzEzKS4KLQotMjAwNy0wMS0wMyAxNjo0MToxMCArMDAwMCAgSmVucyBHcmFuc2V1ZXIgPGplbnNnckBnbXgubmV0PgotCi0JICBGaXggYnVpbGQgd2l0aCBnY2MtMi54IChkZWNsYXJlIHZhcmlhYmxlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgYmxvY2sgZXRjLikuIEZpeGVzICMzOTE5NzEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKZW5zIEdyYW5zZXVlciAgPGplbnNnciBhdCBnbXggbmV0PgotCSAgKiBleHQveHZpZC9nc3R4dmlkZW5jLmM6IChnc3RfeHZpZGVuY19lbmNvZGUpLAotCSAgKGdzdF94dmlkZW5jX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoYnB3c2luY190cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvZmlsdGVyL2dzdGZpbHRlci5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGlpci5jOiAoaWlyX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0bHB3c2luYy5jOiAobHB3c2luY190cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvbW9kcGx1Zy9nc3Rtb2RwbHVnLmNjOgotCSAgKiBnc3QvbnV2ZGVtdXgvZ3N0bnV2ZGVtdXguYzogKGdzdF9udXZfZGVtdXhfaGVhZGVyX2xvYWQpLAotCSAgKGdzdF9udXZfZGVtdXhfc3RyZWFtX2V4dGVuZF9oZWFkZXIpOgotCSAgRml4IGJ1aWxkIHdpdGggZ2NjLTIueCAoZGVjbGFyZSB2YXJpYWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhCi0JICBibG9jayBldGMuKS4gRml4ZXMgIzM5MTk3MS4KLQotMjAwNi0xMi0zMCAxMjo0NDowMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6IFdoZW4gd2UgY2FuJ3QgY3JlYXRlIGFuIGVsZW1lbnQgbmVlZGVkIGZvciB0aGUgdGVzdCwgcHJpbnQgYSBtZXNzYWdlIGRldGFpbGluZyB3aGljLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9jcm9wLmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAodmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmdfaW5pdF9jb250ZXh0KToKLQkgIFdoZW4gd2UgY2FuJ3QgY3JlYXRlIGFuIGVsZW1lbnQgbmVlZGVkIGZvciB0aGUgdGVzdCwgcHJpbnQgYSBtZXNzYWdlCi0JICBkZXRhaWxpbmcgd2hpY2ggZWxlbWVudCBpdCBhY3R1YWxseSBpcyB0aGF0J3MgbWlzc2luZyAoIzM5MDY3MykuCi0KLTIwMDYtMTItMjQgMTE6MzY6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IEZpeCBwcmVzdW1hYmx5IGNvcHknbidwYXN0byBmb3IgMTZicHAgZGVwdGguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzogKGNvbXBvc2l0ZV9waXhlbCk6Ci0JICBGaXggcHJlc3VtYWJseSBjb3B5J24ncGFzdG8gZm9yIDE2YnBwIGRlcHRoLgotCi0yMDA2LTEyLTI0IDExOjI0OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IFRoZSAic2lnbmVkIiBmaWVsZCBpbiBhdWRpbyBjYXBzIGlzIG9mIGJvb2xlYW4gdHlwZSwgdHJ5aW5nIHRvIHVzZSBnc3Rfc3RydWN0dXJlX2dldF9pbnQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfc2V0Y2Fwcyk6Ci0JICBUaGUgInNpZ25lZCIgZmllbGQgaW4gYXVkaW8gY2FwcyBpcyBvZiBib29sZWFuIHR5cGUsIHRyeWluZyB0byB1c2UKLQkgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCgpIHRvIGV4dHJhY3QgaXQgd2lsbCBmYWlsLiBGaXhpbmcgdGhpcyBtYWtlcwotCSAgbWF0cm9za2FtdXggYWNjZXB0IHJhdyBhdWRpbyBpbnB1dCAoIzM4NzEyMSkgKHVzZSBhdCB5b3VyIG93biByaXNrCi0JICB0aG91Z2gsIGR1ZSB0byB0aGUgbWF0cm9za2Egc3BlYyBiZWluZyBub3QgZW50aXJlbHkgdXNlZnVsIGluIHRoaXMKLQkgIHJlc3BlY3QpLgotCSAgQWxzbyBmaXggdXAgcmF3IGF1ZGlvIHN0cnVjdHVyZXMgaW4gdGVtcGxhdGUgY2FwcyBzbyB0aGF0IHRoZXkKLQkgIHJlcHJlc2VudCB3aGF0IG91ciBzZXRjYXBzIGZ1bmN0aW9uIHdpbGwgYWN0dWFsbHkgYWNjZXB0LCBzbyB0aGF0Ci0JICBjb252ZXJ0ZXJzIGtub3cgd2hhdCB0byBjb252ZXJ0IHRvLgotCSAgRmluYWxseSwgZG9uJ3QgZmFpbCBpZiB0aGVyZSBpc24ndCBhbiAiZW5kaWFubmVzcyIgZmllbGQgaW4gOC1iaXQKLQkgIFBDTSBjYXBzLgotCi0yMDA2LTEyLTIyIDEwOjE1OjI0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLzogcmVhcHBseSBjb25zaXN0ZW50IHBhZCAoZGUpYWN0aXZhdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21wZWcyZW5jLmM6IChzZXR1cF9tcGVnMmVuYyksCi0JICAoY2xlYW51cF9tcGVnMmVuYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzogKGNsZWFudXBfcmdhbmFseXNpcyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYzogKHNldHVwX3dhdnBhY2tkZWMpLAotCSAgKGNsZWFudXBfd2F2cGFja2RlYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tlbmMuYzogKHNldHVwX3dhdnBhY2tlbmMpLAotCSAgKGNsZWFudXBfd2F2cGFja2VuYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3k0bWVuYy5jOiAoc2V0dXBfeTRtZW5jKSwgKGNsZWFudXBfeTRtZW5jKToKLQkgIHJlYXBwbHkgY29uc2lzdGVudCBwYWQgKGRlKWFjdGl2YXRpb24KLQotMjAwNi0xMi0yMiAxMDoxNToyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy86IHJlYXBwbHkgY29uc2lzdGVudCBwYWQgKGRlKWFjdGl2YXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmM6IChjbGVhbnVwX3Bhbm9yYW1hKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6IChzZXR1cF9hdmltdXgpLCAoY2xlYW51cF9hdmltdXgpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6IChzZXR1cF9jbW1sZGVjKSwKLQkgICh0ZWFyZG93bl9jbW1sZGVjKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOiAoc2V0dXBfY21tbGVuYyksCi0JICAodGVhcmRvd25fY21tbGVuYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6IChzZXR1cF9sZXZlbCksIChjbGVhbnVwX2xldmVsKToKLQkgIHJlYXBwbHkgY29uc2lzdGVudCBwYWQgKGRlKWFjdGl2YXRpb24KLQotMjAwNi0xMi0yMSAxNzowMzozOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIENWUwotCSAgKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JICBBZGQgMC4xMC41IGRvYXAgZW50cnkKLQotPT09IHJlbGVhc2UgMC4xMC40ID09PQotCi0yMDA2LTEyLTIxIDE1OjQ1OjAyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC4xMC40LCAiQmxhY2sgQnVncyIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgPT09IHJlbGVhc2UgMC4xMC40ID09PQotCSAgMjAwNi0xMi0yMSAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbGVhc2luZyAwLjEwLjQsICJCbGFjayBCdWdzIgotCi09PT0gcmVsZWFzZSAwLjEwLjUgPT09Ci0KLTIwMDYtMTItMjEgMTU6NDA6NTUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IHJlbGVhc2luZyAwLjEwLjUsICJUaGUgUGF0aCBvZiBUaG9ybnMiCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgID09PSByZWxlYXNlIDAuMTAuNSA9PT0KLQkgIDIwMDYtMTItMjEgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICByZWxlYXNpbmcgMC4xMC41LCAiVGhlIFBhdGggb2YgVGhvcm5zIgotCi0yMDA2LTEyLTIxIDE0OjAzOjQyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21wZWcyZW5jLmM6IChzZXR1cF9tcGVnMmVuYykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tcGVnMmVuYy5jOiAoc2V0dXBfbXBlZzJlbmMpCi0JICAoY2xlYW51cF9tcGVnMmVuYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3JnYW5hbHlzaXMuYzogKGNsZWFudXBfcmdhbmFseXNpcyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYzogKHNldHVwX3dhdnBhY2tkZWMpLAotCSAgKGNsZWFudXBfd2F2cGFja2RlYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tlbmMuYzogKHNldHVwX3dhdnBhY2tlbmMpLAotCSAgKGNsZWFudXBfd2F2cGFja2VuYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3k0bWVuYy5jOiAoc2V0dXBfeTRtZW5jKSwgKGNsZWFudXBfeTRtZW5jKToKLQkgIHJldmVydCBteSBmcmVlemUgYnJlYWthZ2UKLQotMjAwNi0xMi0yMSAxMjo0ODozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy86IHJldmVydCBteSBmcmVlemUgYnJlYWthZ2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmM6IChjbGVhbnVwX3Bhbm9yYW1hKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmM6IChzZXR1cF9hdmltdXgpLCAoY2xlYW51cF9hdmltdXgpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6IChzZXR1cF9jbW1sZGVjKSwKLQkgICh0ZWFyZG93bl9jbW1sZGVjKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOiAoc2V0dXBfY21tbGVuYyksCi0JICAodGVhcmRvd25fY21tbGVuYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6IChzZXR1cF9sZXZlbCksIChjbGVhbnVwX2xldmVsKToKLQkgIHJldmVydCBteSBmcmVlemUgYnJlYWthZ2UKLQotMjAwNi0xMi0yMSAwODoyMDoxMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy86IGNvbnNpc3RlbnQgcGFkIChkZSlhY3RpdmF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbXBlZzJlbmMuYzogKHNldHVwX21wZWcyZW5jKSwKLQkgIChjbGVhbnVwX21wZWcyZW5jKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jOiAoY2xlYW51cF9yZ2FuYWx5c2lzKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2RlYy5jOiAoc2V0dXBfd2F2cGFja2RlYyksCi0JICAoY2xlYW51cF93YXZwYWNrZGVjKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jOiAoc2V0dXBfd2F2cGFja2VuYyksCi0JICAoY2xlYW51cF93YXZwYWNrZW5jKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmM6IChzZXR1cF95NG1lbmMpLCAoY2xlYW51cF95NG1lbmMpOgotCSAgY29uc2lzdGVudCBwYWQgKGRlKWFjdGl2YXRpb24KLQotMjAwNi0xMi0yMSAwODoxNToyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy86IGNvbnNpc3RlbnQgcGFkIChkZSlhY3RpdmF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jOiAoY2xlYW51cF9wYW5vcmFtYSk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aW11eC5jOiAoc2V0dXBfYXZpbXV4KSwgKGNsZWFudXBfYXZpbXV4KToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOiAoc2V0dXBfY21tbGRlYyksCi0JICAodGVhcmRvd25fY21tbGRlYyk6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxlbmMuYzogKHNldHVwX2NtbWxlbmMpLAotCSAgKHRlYXJkb3duX2NtbWxlbmMpOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOiAoc2V0dXBfbGV2ZWwpLCAoY2xlYW51cF9sZXZlbCk6Ci0JICBjb25zaXN0ZW50IHBhZCAoZGUpYWN0aXZhdGlvbgotCi0yMDA2LTEyLTE4IDE3OjExOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IERvbid0IHBvc3QgQlVGRkVSSU5HIG1lc3NhZ2VzIGluIHN0cmVhbWluZyBtb2RlIGlmIHRoZSBzdHJlYW0gaGVhZGVycyBhcmUgYmVoaW5kIHRoZSBtb3ZpZSBkYXQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9wb3N0X3Byb2dyZXNzKSwKLQkgIChnc3RfcXRkZW11eF9jaGFpbik6Ci0JICBEb24ndCBwb3N0IEJVRkZFUklORyBtZXNzYWdlcyBpbiBzdHJlYW1pbmcgbW9kZSBpZiB0aGUgc3RyZWFtCi0JICBoZWFkZXJzIGFyZSBiZWhpbmQgdGhlIG1vdmllIGRhdGE7IGluc3RlYWQsIHBvc3QgInByb2dyZXNzIiBlbGVtZW50Ci0JICBtZXNzYWdlcyBhcyBhIHRlbXBvcmFyeSBzb2x1dGlvbi4gQXBwcyBtaWdodCBnZXQgY29uZnVzZWQgYW5kIGRvCi0JICBzaWxseSB0aGluZ3MgdG8gdGhlIHBpcGVsaW5lIHN0YXRlIGlmIHRoZXkgc2VlIGJ1ZmZlcmluZyBtZXNzYWdlcwotCSAgZnJvbSBkaWZmZXJlbnQgc291cmNlcyBhbmQgZG9uJ3QgcmVhbGl6ZSB0aGV5IGNvbWUgZnJvbSBkaWZmZXJlbnQKLQkgIHNvdXJjZXMgKCMzODcxNjApLgotCi0yMDA2LTEyLTE4IDE2OjQ2OjE3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgRGlzYWJsZSBMQURQU0EsIGFzIGl0IGhhcyBtb3ZlZCB0byB0aGUgLWJhZCBtb2R1bGUgZm9yIHRoZSBkdXJhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgIERpc2FibGUgTEFEUFNBLCBhcyBpdCBoYXMgbW92ZWQgdG8gdGhlIC1iYWQgbW9kdWxlIGZvciB0aGUgZHVyYXRpb24uCi0KLTIwMDYtMTItMTggMTU6NTE6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmM6IFJlc2V0IGZsb3dfc3RhdGUgYmFjayB0byBfT0sgYWZ0ZXIgYSBmbHVzaCBzdG9wIHNvIHRoYXQgd2UgZXhpdCBvdXIgZXJyb3Igc3RhdGUgYWZ0ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmM6IChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zZXRjYXBzKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9ldmVudCk6Ci0JICBSZXNldCBmbG93X3N0YXRlIGJhY2sgdG8gX09LIGFmdGVyIGEgZmx1c2ggc3RvcCBzbyB0aGF0IHdlIGV4aXQgb3VyCi0JICBlcnJvciBzdGF0ZSBhZnRlciB0aGUgZmx1c2guIEZpeGVzICMzNzQyMTMKLQotMjAwNi0xMi0xOCAxNTo0OTowOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIENoYW5nZUxvZyBzdXJnZXJ5IG9uIG9uZSBvZiBTdGVmYW4ncyBjb21taXRzIGZyb20gQXVndXN0OgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeSBvbiBvbmUgb2YgU3RlZmFuJ3MgY29tbWl0cyBmcm9tIEF1Z3VzdDoKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgUXVpZXRseSAoYWNjaWRlbnRhbGx5KSBlbmFibGUgTEFEU1BBIGZvciBidWlsZGluZyBieSBkZWZhdWx0LAotCSAgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IGl0IGRvZXNuJ3QgbWVldCB0aGUgcGx1Z2luIGNoZWNrbGlzdC4KLQkgIC0tIEFkZGVkIGJ5IEphbiBTY2htaWR0IDE4IERlYyAyMDA2Ci0KLTIwMDYtMTItMTggMTM6NDA6MzQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IERvbid0IG91dHB1dCBnX3dhcm5pbmcgZm9yIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCwganVzdCBzZW5kIGEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFpbiksCi0JICAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSk6Ci0JICBEb24ndCBvdXRwdXQgZ193YXJuaW5nIGZvciBhbiB1bnN1cHBvcnRlZCBmb3JtYXQsIGp1c3Qgc2VuZCBhCi0JICBHU1RfRUxFTUVOVF9XQVJOSU5HIGFuZCBkb24ndCBhZGQgdGhlIHBhZC4KLQkgIEZpeCB0aGUgY2FzZSB3aGVyZSBpdCBkb2Vzbid0IGNoZWNrIGZvciBhIE5VTEwgcGFkIGluIHN0cmVhbWluZyBtb2RlLgotCSAgRml4ZXMgIzM4NzEzNwotCi0yMDA2LTEyLTE4IDEyOjI3OjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEZpeCBjcmFzaCBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlciBpZiB0aGVyZSdzIG5vIHN0Y28gYXRvbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRml4IGNyYXNoIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVyIGlmIHRoZXJlJ3Mgbm8gc3RjbyBhdG9tLgotCSAgRml4ZXMgIzM4NzEyMi4KLQotMjAwNi0xMi0xOCAxMDowMjo1NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AdWJ1bnR1LmNvbT4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOiBVc2UgbG9jYWwgY29weSBvZiBtZDUuaCwgYXMgaXQgZGlzYXBwZWFyZWQgaW4gcmVjZW50IHdhdnBhY2sgaW5zdGFsbHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSAgVXNlIGxvY2FsIGNvcHkgb2YgbWQ1LmgsIGFzIGl0IGRpc2FwcGVhcmVkIGluIHJlY2VudCB3YXZwYWNrCi0JICBpbnN0YWxscy4KLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tbyBhdCB1YnVudHUgZG90IGNvbT4KLQkgIEZpeGVzOiAjMzg3MDc2Ci0KLTIwMDYtMTItMTcgMTk6NDI6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDYtMTItMTcgMDY6MTE6MzkgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLio6IERlY2VudCBlZmZvcnQgYXQgcG9ydGluZyB0byAwLjEwLiAgTmVlZHMgY2xlYW51cCBvbiBPUy9YLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaDoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tOgotCSAgRGVjZW50IGVmZm9ydCBhdCBwb3J0aW5nIHRvIDAuMTAuICBOZWVkcyBjbGVhbnVwIG9uIE9TL1guCi0KLTIwMDYtMTItMTcgMDU6MDc6MDcgKzAwMDAgIFZpamF5IFNhbnRoYW5hbSA8dmlqYXlAc2FudGhhbmFtLmdtYWlsLmNvbT4KLQotCSAgc3lzL29zeHZpZGVvLzogUHJlbGltaW5hcnkgcGF0Y2ggZm9yIHBvcnRpbmcgb3N4dmlkZW9zaW5rCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBWaWpheSBTYW50aGFuYW0gPHZpamF5IHNhbnRoYW5hbSBnbWFpbCBjb20+Ci0JICAqIHN5cy9vc3h2aWRlby9NYWtlZmlsZS5hbToKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBQcmVsaW1pbmFyeSBwYXRjaCBmb3IgcG9ydGluZyBvc3h2aWRlb3NpbmsKLQotMjAwNi0xMi0xNiAxNjoyMToyNiArMDAwMCAgU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PgotCi0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IEludHJvZHVjZSBzb21lIGxvY2tpbmcgYXJvdW5kIHRoZSB2aWRlb21peGVyIHN0YXRlIHNvIHRoYXQgaXQgZG9lcyBub3QgY3Jhc2ggd2hlbiBhZGRpbmcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZCBhdCBsdW9uIGRvdCBuZXQ+Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX3BhZF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF92aWRlb21peGVyX3NldF9tYXN0ZXJfZ2VvbWV0cnkpLAotCSAgKGdzdF92aWRlb21peGVyX3BhZF9zaW5rX3NldGNhcHMpLCAoZ3N0X3ZpZGVvbWl4ZXJfY29sbGVjdF9mcmVlKSwKLQkgIChnc3RfdmlkZW9taXhlcl9yZXNldCksIChnc3RfdmlkZW9taXhlcl9pbml0KSwKLQkgIChnc3RfdmlkZW9taXhlcl9maW5hbGl6ZSksIChnc3RfdmlkZW9taXhlcl9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF92aWRlb21peGVyX3JlbGVhc2VfcGFkKSwgKGdzdF92aWRlb21peGVyX2NvbGxlY3RlZCksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfY2hhbmdlX3N0YXRlKToKLQkgIEludHJvZHVjZSBzb21lIGxvY2tpbmcgYXJvdW5kIHRoZSB2aWRlb21peGVyIHN0YXRlIHNvIHRoYXQgaXQgZG9lcyBub3QKLQkgIGNyYXNoIHdoZW4gYWRkaW5nL3JlbW92aW5nIHBhZHMuIEZpeGVzICMzODMwNDMuCi0KLTIwMDYtMTItMTYgMTU6MjU6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogV2UgZG9uJ3Qgc3VwcG9ydCBzZWVraW5nIGluIHN0cmVhbWluZyBtb2RlLCBzbyBkb24ndCBldmVuIHRyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfZXZlbnQpOgotCSAgV2UgZG9uJ3Qgc3VwcG9ydCBzZWVraW5nIGluIHN0cmVhbWluZyBtb2RlLCBzbyBkb24ndCBldmVuIHRyeS4KLQkgIEltcGxlbWVudCBzZWVraW5nIHF1ZXJ5IHNvIGFwcHMgY2FuIHF1ZXJ5IHNlZWthYmlsaXR5IHByb3Blcmx5Ci0JICAoc2VlICMzNjU0MTQpLiBGaXggZHVyYXRpb24gcXVlcnkuCi0KLTIwMDYtMTItMTYgMTE6NDI6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogTWFrZSBzdXJlIGxpYmNhY2EgY2FuIGFjdHVhbGx5IGJlIHVzZWQgaW5zdGVhZCBvZiBqdXN0IGNoZWNraW5nIGZvciAvdXNyL2Jpbi9jYWNhLWNvbmZpZywgc28gd2UgZG9uJ3Qgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIE1ha2Ugc3VyZSBsaWJjYWNhIGNhbiBhY3R1YWxseSBiZSB1c2VkIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBmb3IKLQkgIC91c3IvYmluL2NhY2EtY29uZmlnLCBzbyB3ZSBkb24ndCB3cm9uZ2x5IHRyeSB0byBidWlsZCBjYWNhc2luayB3aGVuCi0JICBjcm9zcy1jb21waWxpbmcgKGZpeGVzICMzODQ1ODcpLgotCi0yMDA2LTEyLTE1IDEwOjU0OjI4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYWRkaW5nIGRvYXAgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIE1ha2VmaWxlLmFtOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kLmRvYXA6Ci0JICAqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZGluZyBkb2FwIGZpbGUKLQotMjAwNi0xMi0xNCAxNjoyMDoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBsaWJmbGFjLTEuMS4zIGNoYW5nZWQgQVBJIGFnYWluLCBidXQgd2UgY2FuJ3QgYnVpbGQgYWdhaW5zdCBpdCB5ZXQsIHNvIG1ha2Ugc3VyZSBvdXIgY2hlY2sgZG9lc24ndCB1c2UgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgbGliZmxhYy0xLjEuMyBjaGFuZ2VkIEFQSSBhZ2FpbiwgYnV0IHdlIGNhbid0IGJ1aWxkIGFnYWluc3QgaXQgeWV0LAotCSAgc28gbWFrZSBzdXJlIG91ciBjaGVjayBkb2Vzbid0IHVzZSBsaWJmbGFjLTEuMS4zIGFuZCBhZGQgYSBjb21tZW50Ci0JICB0byB0aGlzIGVmZmVjdC4KLQotMjAwNi0xMi0xNCAxNDoyNToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzogQWRkIHNvbWUgTlVMTCBwb2ludGVyIGNoZWNrcyAocG9zc2libHkgcmVsYXRlZCB0byAjMzg1NjIzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOiAoZ3N0X3F1YXJrdHZfdHJhbnNmb3JtKSwKLQkgIChnc3RfcXVhcmt0dl9wbGFuZXRhYmxlX2NsZWFyKToKLQkgIEFkZCBzb21lIE5VTEwgcG9pbnRlciBjaGVja3MgKHBvc3NpYmx5IHJlbGF0ZWQgdG8gIzM4NTYyMykuCi0KLTIwMDYtMTItMTMgMTc6MTI6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQWRkIEFNUi1XQiB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9nZXRfZHVyYXRpb24pLAotCSAgKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLCAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkgIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgQWRkIEFNUi1XQiB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cy4KLQotMjAwNi0xMi0xMiAxODo0NTo1OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogSW4gc3RyZWFtaW5nIG1vZGUsIGlmIHRoZSBmaXJzdCBidWZmZXIgd2UgZ2V0IGRvZXNuJ3QgaGF2ZSBhbiBvZmZzZXQsIGZpeCBpdCB1cCB0byBiZSAwLCBvdGhlcndpc2UgdHJpbW1pbmcgd29uLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9jaGFpbl9wYXJzZV90YWcpLAotCSAgKGdzdF90YWdfZGVtdXhfY2hhaW4pOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9jaGFpbik6Ci0JICBJbiBzdHJlYW1pbmcgbW9kZSwgaWYgdGhlIGZpcnN0IGJ1ZmZlciB3ZSBnZXQgZG9lc24ndCBoYXZlIGFuCi0JICBvZmZzZXQsIGZpeCBpdCB1cCB0byBiZSAwLCBvdGhlcndpc2UgdHJpbW1pbmcgd29uJ3Qgd29yayBsYXRlciBvbgotCSAgYW5kIHdlJ2xsIGJlIHR5cGVmaW5kaW5nIGFwcGxpY2F0aW9uL3gtaWQzLCB3aGljaCBtYXkgcmVzdWx0IGluCi0JICBkZWNvZGViaW4gcGx1Z2dpbmcgYW4gZW5kbGVzcyBudW1iZXIgb2YgaWQzZGVtdXggZWxlbWVudHMgYXMgYQotCSAgY29uc2VxdWVuY2UuIEZpeGVzICMzODUwMzEuCi0KLTIwMDYtMTItMTEgMjE6MjE6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6IElnbm9yZSB0aGUgYnVmZmVyX3RpbWUgdGhlIHNvdW5kIGRldmljZSByZXBvcnRzLiBUdXJucyBvdXQgaXQgaXMgc29tZXRpbWVzIGNvbXBsZXRlbHkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6IChnc3Rfc3VuYXVkaW9zaW5rX3ByZXBhcmUpOgotCSAgSWdub3JlIHRoZSBidWZmZXJfdGltZSB0aGUgc291bmQgZGV2aWNlIHJlcG9ydHMuIFR1cm5zIG91dCBpdCBpcwotCSAgc29tZXRpbWVzIGNvbXBsZXRlbHkgYm9ndXMgYW5kIHdlJ3JlIGJldHRlciBvZmYgd2l0aG91dCBpdC4KLQotMjAwNi0xMi0xMSAxNzozMzoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGaXggbm9uLXdvcmtpbmcgcmVkaXJlY3RzIGZyb20gaW5ldGZpbG0uY29tIChoYW5kbGUgJ2FsaXMnIHJlZmVyZW5jZSBkYXRhIHR5cGUgYXMgd2VsbCkuIEZpeGVzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmVlKToKLQkgIEZpeCBub24td29ya2luZyByZWRpcmVjdHMgZnJvbSBpbmV0ZmlsbS5jb20gKGhhbmRsZSAnYWxpcycgcmVmZXJlbmNlCi0JICBkYXRhIHR5cGUgYXMgd2VsbCkuIEZpeGVzICMzNzg2MTMuCi0KLTIwMDYtMTItMTEgMTM6NTk6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IFRyeSBoYXJkZXIgdG8gZXh0cmFjdCB0aGUgZnJhbWVyYXRlIGZvciB2aWRlbyB0cmFja3MgY29ycmVjdGx5IGFuZCBzYXZlIGl0IGRpcmVjdGx5IGluc3RlYWQgb2YgY29udmVydC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF92aWRlb19jYXBzKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jOgotCSAgKGdzdF9tYXRyb3NrYV90cmFja19pbml0X3ZpZGVvX2NvbnRleHQpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBUcnkgaGFyZGVyIHRvIGV4dHJhY3QgdGhlIGZyYW1lcmF0ZSBmb3IgdmlkZW8gdHJhY2tzIGNvcnJlY3RseSBhbmQKLQkgIHNhdmUgaXQgZGlyZWN0bHkgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIGl0IGJhY2sgYW5kIGZvcnRoIGEgZmV3Ci0JICB0aW1lcy4gTW9zdGx5IG1ha2VzIGEgZGlmZmVyZW5jZSBmb3IgdmVyeSBzbWFsbCBmcmFtZXJhdGVzICg8MSkuCi0JICBGaXhlcyAjMzgwMTk5LgotCi0yMDA2LTEyLTExIDExOjQxOjE4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy4qOiBSZW1vdmUgZ2NvbmYgbm90aWZ5IGhvb2sgd2hlbiB0aGUgZ2NvbmZhdWRpb3NyYyBlbGVtZW50IGlzIGRlc3Ryb3llZCwgb3RoZXJ3aXNlIHRoZSBjYWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOiAoZ3N0X2djb25mX2F1ZGlvX3NyY19pbml0KSwKLQkgIChnc3RfZ2NvbmZfYXVkaW9fc3JjX2Rpc3Bvc2UpLCAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5oOgotCSAgUmVtb3ZlIGdjb25mIG5vdGlmeSBob29rIHdoZW4gdGhlIGdjb25mYXVkaW9zcmMgZWxlbWVudCBpcwotCSAgZGVzdHJveWVkLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgb24gYW4KLQkgIGFscmVhZHktZGVzdHJveWVkIGluc3RhbmNlIGFuZCBiYWQgdGhpbmdzIGhhcHBlbi4gU2hvdWxkIGZpeAotCSAgIzM3ODE4NC4KLQkgIEFsc28gaWdub3JlIGdjb25mIGtleSBjaGFuZ2VzIHdoZW4gdGhlIHNvdXJjZSBpcyBhbHJlYWR5IHJ1bm5pbmcuCi0KLTIwMDYtMTItMDkgMTk6Mjc6MjggKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPG1haWxAc2xvbW9zbmFpbC5kZT4KLQotCSAgZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQgcGFyc2UgYW55IHBvc3NpYmxlIGZsb2F0aW5nIHBvaW50IHN0cmluZyBmb3JtYXQgKCIxLDIzNCIgb3IgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlICA8bWFpbCBhdCBzbG9tb3NuYWlsIGRlPgotCSAgKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6IChhcGVfZGVtdXhfcGFyc2VfdGFncyk6Ci0JICBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQgcGFyc2UgYW55IHBvc3NpYmxlIGZsb2F0aW5nIHBvaW50IHN0cmluZwotCSAgZm9ybWF0ICgiMSwyMzQiIG9yICIxLjIzNCIpIGlycmVzcGVjdGl2ZSBvZiB0aGUgY3VycmVudCBsb2NhbGUuIGdfc3Ryb2QoKQotCSAgd2lsbCBwYXJzZSB0aGUgZm9ybWVyIG9ubHkgaW4gY2VydGFpbiBsb2NhbGVzIHRob3VnaCwgc28gd2UgcmVhbGx5IG5lZWQKLQkgIHRvIGNhbm9uaWNhbGlzZSB0aGUgc2VwYXJhdG9yIHRvICcuJyBhbmQgdGhlbiB1c2UgZ19hc2NpaV9zdHJ0b2QoKSB0bwotCSAgbWFrZSBzdXJlIHdlIGNhbiBwYXJzZSBlaXRoZXIgdmVyc2lvbiBhdCBhbGwgdGltZXMuCi0JICBGaXhlcyAjMzgyOTgyIGZvciByZWFsLgotCi0yMDA2LTEyLTA5IDE2OjE3OjMzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvLzogVXNlIHRoZSBzdW5hdWRpbyBkZWJ1ZyBjYXRlZ29yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6Ci0JICBVc2UgdGhlIHN1bmF1ZGlvIGRlYnVnIGNhdGVnb3J5LgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6IChnc3Rfc3VuYXVkaW9zaW5rX2ZpbmFsaXplKSwKLQkgIChnc3Rfc3VuYXVkaW9zaW5rX2NsYXNzX2luaXQpLCAoZ3N0X3N1bmF1ZGlvc2lua19pbml0KSwKLQkgIChnc3Rfc3VuYXVkaW9zaW5rX3NldF9wcm9wZXJ0eSksIChnc3Rfc3VuYXVkaW9zaW5rX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3N1bmF1ZGlvc2lua19vcGVuKSwgKGdzdF9zdW5hdWRpb3NpbmtfY2xvc2UpLAotCSAgKGdzdF9zdW5hdWRpb3NpbmtfcHJlcGFyZSksIChnc3Rfc3VuYXVkaW9fc2lua19kb19kZWxheSksCi0JICAoZ3N0X3N1bmF1ZGlvc2lua193cml0ZSksIChnc3Rfc3VuYXVkaW9zaW5rX2RlbGF5KSwKLQkgIChnc3Rfc3VuYXVkaW9zaW5rX3Jlc2V0KToKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5oOgotCSAgVXNlcyB0aGUgc3VuYXVkaW8gZGVidWcgY2F0ZWdvcnkgZm9yIGFsbCBkZWJ1ZyBvdXRwdXQKLQkgIEltcGxlbWVudHMgdGhlIF9kZWxheSgpIGNhbGxiYWNrIHRvIHN5bmNocm9uaXNlIHZpZGVvIHBsYXliYWNrIGJldHRlcgotCSAgQ2hhbmdlIHRoZSBzZWd0b3RhbCBhbmQgc2Vnc2l6ZSB2YWx1ZXMgYmFjayB0byB0aGUgcGFyZW50IGNsYXNzCi0JICBkZWZhdWx0cyAodGFrZW4gZnJvbSBidWZmZXJfdGltZSBhbmQgbGF0ZW5jeV90aW1lcyBvZiAyMDBtcyBhbmQgMTBtcwotCSAgcmVzcGVjdGl2ZWx5KQotCSAgTWVhc3VyZSB0aGUgc2FtcGxlcyB3cml0dGVuIHRvIHRoZSBkZXZpY2UgdnMuIHBsYXllZC4KLQkgIEtlZXAgdHJhY2sgb2Ygc2VnbWVudHMgaW4gdGhlIGRldmljZSBieSB3cml0aW5nIGVtcHR5IGVvZiBmcmFtZXMsIGFuZAotCSAgc2xlZXAgdXNpbmcgYSBHQ29uZCB3aGVuIHdlIGdldCB0b28gZmFyIGFoZWFkIGFuZCByaXNrIG92ZXJydW5uaW5nIHRoZQotCSAgc2luaydzIHJpbmdidWZmZXIuCi0JICBGaXhlczogIzM2MDY3MwotCi0yMDA2LTEyLTA4IDIxOjEyOjQ3ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ29ycmVjdCB0aGUgYXR0cmlidXRpb24gb2YgdGhlIHByZXZpb3VzIGNvbW1pdC4gVGhlIHBhdGNoIGluIHF1ZXN0aW9uIHdhcyB3cml0dGVuIGJ5IEJyaWFuIENhbWVyb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENvcnJlY3QgdGhlIGF0dHJpYnV0aW9uIG9mIHRoZSBwcmV2aW91cyBjb21taXQuIFRoZSBwYXRjaCBpbgotCSAgcXVlc3Rpb24gd2FzIHdyaXR0ZW4gYnkgQnJpYW4gQ2FtZXJvbi4KLQotMjAwNi0xMi0wOCAxNzowNjo0MyArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGaXggY2FwcyBmb3IgMjQgYml0IHJhdyBQQ00gYXVkaW8gKDIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciAgPG1haWwgYXQgcmVuZXN0YWRsZXIgZGU+Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2dldF9kdXJhdGlvbiksCi0JICAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksIChxdGRlbXV4X3BhcnNlX3RyYWspLAotCSAgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBGaXggY2FwcyBmb3IgMjQgYml0IHJhdyBQQ00gYXVkaW8gKDIpLgotCSAgRml4ZXMgIzM4MzQ3MS4KLQotMjAwNi0xMi0wOCAxNjozODoxOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8bWFpbEBzbG9tb3NuYWlsLmRlPgotCi0JICBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLio6IEZpeCBhdWRpb3Bhbm9yYW1lIHdpdGggZmxvYXQgc2FtcGxlcy4gRml4ZXMgIzM4MzcyNi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgIDxtYWlsIGF0IHNsb21vc25haWwgZGUgPgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmM6IChnc3RfYXVkaW9fcGFub3JhbWFfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9jYXBzKSwgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm0pOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmg6Ci0JICBGaXggYXVkaW9wYW5vcmFtZSB3aXRoIGZsb2F0IHNhbXBsZXMuIEZpeGVzICMzODM3MjYuCi0KLTIwMDYtMTItMDggMTU6MTI6MDEgKzAwMDAgIFBhZHJhaWcgTydCcmlhaW4gPHBhZHJhaWcub2JyaWFpbkBzdW4uY29tPgotCi0JICBzeXMvc3VuYXVkaW8vOiBJbXBsZW1lbnQgcmVzZXQgZnVuY3Rpb25zIHRvIHVuYmxvY2sgdGhlIHNyYy9zaW5rIG1vcmUgcXVpY2tseSBvbiBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jOiAoZ3N0X3N1bmF1ZGlvc2lua19yZXNldCk6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOiAoZ3N0X3N1bmF1ZGlvc3JjX29wZW4pLAotCSAgKGdzdF9zdW5hdWRpb3NyY19yZXNldCk6Ci0JICBJbXBsZW1lbnQgcmVzZXQgZnVuY3Rpb25zIHRvIHVuYmxvY2sgdGhlIHNyYy9zaW5rIG1vcmUgcXVpY2tseSBvbgotCSAgc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgotCSAgUGF0Y2ggYnk6IFBhZHJhaWcgTydCcmlhaW4gPHBhZHJhaWcgZG90IG9icmlhaW4gYXQgc3VuIGRvdCBjb20+Ci0KLTIwMDYtMTItMDggMTQ6NDI6NDIgKzAwMDAgIEplcnJ5IFRhbiA8amVycnkudGFuQHN1bi5jb20+Ci0KLQkgIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmM6IENvbnN0cnVjdCB0aGUgY29ycmVjdCBtaXhlciBkZXZpY2UgbmFtZSB3aGVuIHRoZSBBVURJT0RFViBlbnYgdmFyIGlzIHNldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlci5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX2NoYW5nZV9zdGF0ZSk6Ci0JICBDb25zdHJ1Y3QgdGhlIGNvcnJlY3QgbWl4ZXIgZGV2aWNlIG5hbWUgd2hlbiB0aGUgQVVESU9ERVYgZW52IHZhcgotCSAgaXMgc2V0LgotCSAgUGF0Y2ggYnk6IEplcnJ5IFRhbiA8amVycnkudGFuIGF0IHN1biBkb3QgY29tPgotCSAgRml4ZXM6ICMzODM1OTYKLQotMjAwNi0xMi0wOCAxNDozMjo1MSArMDAwMCAgSmVycnkgVGFuIDxqZXJyeS50YW5Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6IEFwcGx5IHBhdGNoIHRvIG9wZW4gdGhlIG1peGVyIGNvbnRyb2wgYW5kIHNldCB0aGUgTVVMVElQTEVfT1BFTiBpb2N0bC4gT24gc29sYXJpcywgdGhlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6IChnc3Rfc3VuYXVkaW9zcmNfb3Blbik6Ci0JICBBcHBseSBwYXRjaCB0byBvcGVuIHRoZSBtaXhlciBjb250cm9sIGFuZCBzZXQgdGhlIE1VTFRJUExFX09QRU4KLQkgIGlvY3RsLiBPbiBzb2xhcmlzLCB0aGUgbWl4ZXIgZGV2aWNlIGRvZXNuJ3QgbmVlZCBvcGVuaW5nIG5vbi1ibG9ja2luZwotCSAgLSBpdCBjYW4gYmUgb3BlbmVkIGJ5IG11bHRpcGxlIHByb2Nlc3NlcyBieSBkZWZhdWx0LCBidXQgbmVlZHMgdGhlIGlvY3RsIAlmb3IgbXVsdGlwbGUgb3BlbnMgd2l0aGluIDEgcHJvY2Vzcy4KLQkgIFBhdGNoIGJ5OiBKZXJyeSBUYW4gPGplcnJ5LnRhbiBhdCBzdW4gZG90IGNvbT4KLQkgIEZpeGVzOiAjMzQ5MDE1Ci0KLTIwMDYtMTItMDcgMTc6MzA6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9zbXB0ZS86IFBvcnQgdG8gMC4xMCBzb21lIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NtcHRlL2dzdG1hc2suaDoKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NtcHRlX3NldGNhcHMpLCAoZ3N0X3NtcHRlX2luaXQpLCAoZ3N0X3NtcHRlX3Jlc2V0KSwKLQkgIChnc3Rfc21wdGVfY29sbGVjdGVkKSwgKGdzdF9zbXB0ZV9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zbXB0ZV9nZXRfcHJvcGVydHkpLCAoZ3N0X3NtcHRlX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5oOgotCSAgUG9ydCB0byAwLjEwIHNvbWUgbW9yZS4KLQkgIEFkZGVkIGR1cmF0aW9uIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLgotCSAgTWFrZSBmcmFtZXJhdGUgYSBmcmFjdGlvbi4KLQkgIERlcHJlY2F0ZSBmcHMgcHJvcGVydHksIHdlIG9ubHkgdXNlIG5lZ290aWF0ZWQgZnBzLgotCSAgQWRkZWQgZG9jcy4KLQkgIEZpeCBjb2xsZWN0cGFkIHVzYWdlLgotCSAgUmVzZXQgc3RhdGUgaW4gUkVBRFkuCi0JICBTZW5kIE5FV1NFR01FTlQgZXZlbnQuCi0JICBGaXggcmFjeSB1cGRhdGVzIG9mIG9iamVjdCBwcm9wZXJ0aWVzLgotCSAgQWRkZWQgZGVidWcgY2F0ZWdvcnkuCi0JICBGaXhlcyAjMzgzMzIzLgotCi0yMDA2LTEyLTA3IDExOjM1OjQxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEhhbmRsZSBtb3JlIEgyNjMgdmFyaWFudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfZ2V0X2R1cmF0aW9uKSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKHF0ZGVtdXhfcGFyc2VfdHJhayksCi0JICAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEhhbmRsZSBtb3JlIEgyNjMgdmFyaWFudHMuCi0KLTIwMDYtMTItMDYgMTU6MDY6MDQgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBEb24ndCByZXNldCB4cG9zIGFuZCB5cG9zIGluIHRoZSBzZXRjYXBzIGZ1bmN0aW9uIGJlY2F1c2UgY2F1c2VzIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgKGdzdF92aWRlb21peGVyX3NldF9tYXN0ZXJfZ2VvbWV0cnkpLAotCSAgKGdzdF92aWRlb21peGVyX3BhZF9zaW5rX3NldGNhcHMpLCAoZ3N0X3ZpZGVvbWl4ZXJfY29sbGVjdF9mcmVlKToKLQkgIERvbid0IHJlc2V0IHhwb3MgYW5kIHlwb3MgaW4gdGhlIHNldGNhcHMgZnVuY3Rpb24gYmVjYXVzZSBjYXVzZXMKLQkgIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLgotCSAgRml4ZXMgIzM4MjE3OS4KLQotMjAwNi0xMi0wNiAxNDo0NTozMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogS2VlcCB0cmFjayBvZiB0aGUgYnVmZmVyIHRpbWVzdGFtcCBpbiB0aGUgY29sbGVjdGRhdGEgbWVtYmVyIGluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBiLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2NvbXBhcmVfcGFkcyksCi0JICAoZ3N0X211bHRpcGFydF9tdXhfcXVldWVfcGFkcyksIChnc3RfbXVsdGlwYXJ0X211eF9jb2xsZWN0ZWQpOgotCSAgS2VlcCB0cmFjayBvZiB0aGUgYnVmZmVyIHRpbWVzdGFtcCBpbiB0aGUgY29sbGVjdGRhdGEgbWVtYmVyIGluc3RlYWQKLQkgIG9mIG1vZGlmeWluZyB0aGUgYnVmZmVyIHdpdGhvdXQgbWFraW5nIHRoZSBtZXRhZGF0YSB3cml0YWJsZSBmaXJzdC4KLQkgIEZpeGVzICMzODIyNzcuCi0KLTIwMDYtMTItMDYgMTQ6MzM6NTQgKzAwMDAgIFJvYiBUYXlsb3IgPHJvYnRheWxvckBmbG9vcGlseS5vcmc+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IElmIHVzaW5nIG11bHRpY2FzdCBpbiB1ZHBzcmMsIGJpbmQgdG8gdGhlIG11bHRpY2FzdCBhZGRyZXNzIHJhdGhlciB0aGFuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBSb2IgVGF5bG9yIDxyb2J0YXlsb3IgYXQgZmxvb3BpbHkgZG90IG9yZz4KLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfc3RhcnQpOgotCSAgSWYgdXNpbmcgbXVsdGljYXN0IGluIHVkcHNyYywgYmluZCB0byB0aGUgbXVsdGljYXN0IGFkZHJlc3MgcmF0aGVyIHRoYW4KLQkgIElOX0FERFJfQU5ZLgotCSAgVGhpcyBhbGxvd3MgdGhlIHNpbXVsdGFub3VzIHVzZSBvZiBtdWx0aXBsZSB1ZHBzcmNzIGxpc3RlbmluZyBvbgotCSAgZGlmZmVyZW50IG11bHRpY2F0IGFkZHJlc3Nlcy4gV2l0aG91dCB0aGlzIGFsbCB1ZHBzcmNzIHdpbGwgcmVjZWl2ZSBhbGwKLQkgIHBhY2tldHMgZnJvbSBhbGwgc3Vic2NyaWJlZCBtdWx0aWNhc3QgYWRkcmVzc2VzLgotCSAgRml4ZXMgIzM4MzAwMS4KLQotMjAwNi0xMi0wNiAxMzozNTo1MiArMDAwMCAgSm9uYXRoYW4gTWF0dGhldyA8am9uYXRoYW5AMGthb2xpbi53aDkubmV0PgotCi0JICBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOiBEb24ndCBhdHRlbXB0IHRvIHdyaXRlIGEgTlVMTCBmcmFtZSBpbnRvIHRoZSBJRDMgdGFnIHNldCB3aGVuIHRoZSBjcmVhdGVGcmFtZSBtZXRob2QgcmV0dXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgRG9uJ3QgYXR0ZW1wdCB0byB3cml0ZSBhIE5VTEwgZnJhbWUgaW50byB0aGUgSUQzIHRhZyBzZXQgd2hlbiB0aGUKLQkgIGNyZWF0ZUZyYW1lIG1ldGhvZCByZXR1cm5lZCBOVUxMLgotCSAgRml4ZXM6ICMzODE4NTcKLQkgIFBhdGNoIGJ5OiBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbiBhdCAwa2FvbGluIHdoOSBuZXQgPgotCi0yMDA2LTEyLTA2IDEzOjE2OjU5ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxtYWlsQHNsb21vc25haWwuZGU+Ci0KLQkgIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzogVXNlIGdfc3RydG9kKCkgaW5zdGVhZCBvZiBzc2NhbmYgdG8gcGFyc2UgZG91Ymxlcywgc28gdGhhdCBpdCB3aWxsIHRyeSBwYXJzaW5nIGluIHRoZSBDIGxvYy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzogKGFwZV9kZW11eF9wYXJzZV90YWdzKToKLQkgIFVzZSBnX3N0cnRvZCgpIGluc3RlYWQgb2Ygc3NjYW5mIHRvIHBhcnNlIGRvdWJsZXMsIHNvIHRoYXQgaXQgd2lsbAotCSAgdHJ5IHBhcnNpbmcgaW4gdGhlIEMgbG9jYWxlIGlmIHRoZSBjdXJyZW50IGxvY2FsZSBmYWlscy4KLQkgIEZpeGVzOiAjMzgyOTgyCi0JICBQYXRjaCBieTogU2ViYXN0aWFuIERyw7ZnZSAgPG1haWwgYXQgc2xvbW9zbmFpbCBkZSA+Ci0KLTIwMDYtMTItMDEgMTA6MzE6NDYgKzAwMDAgIFNlcmdleSBTY29iaWNoIDxzZXJnZXkuc2NvYmljaEBnbWFpbC5jb20+Ci0KLQkgIHdpbjMyL01BTklGRVNUOiBGaXggY29tcGlsYXRpb24gb24gd2luMzIgdW5kZXIgVlM4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvTUFOSUZFU1Q6Ci0JICBGaXggY29tcGlsYXRpb24gb24gd2luMzIgdW5kZXIgVlM4Ci0JICBQYXRjaCBieTogU2VyZ2V5IFNjb2JpY2ggPHNlcmdleSBkb3Qgc2NvYmljaCBhdCBnbWFpbCBkb3QgY29tPgotCSAgUGFydGlhbGx5IGZpeGVzICMzODExNzUKLQotMjAwNi0xMS0zMCAxNjo0ODo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBhY2NlcHQgYWxsIG1wZWd2ZXJzaW9ucyxmaXhlcyAjMzgwODI1IHNwb3R0ZWQgYnk6IEplcm9tZSBBbGV0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIGFjY2VwdCBhbGwgbXBlZ3ZlcnNpb25zLGZpeGVzICMzODA4MjUKLQkgIHNwb3R0ZWQgYnk6IEplcm9tZSBBbGV0Ci0KLTIwMDYtMTEtMzAgMTY6NDY6MTMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBjbGVhbnVwIHRoZSBlcnJvciBtZXNzYWdlIGEgYml0IG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19maWxsX2Zvcm1hdF9saXN0KSwKLQkgIChnc3RfdjRsMnNyY19xdWV1ZV9mcmFtZSksIChnc3RfdjRsMnNyY19ncmFiX2ZyYW1lKSwKLQkgIChnc3RfdjRsMnNyY19nZXRfY2FwdHVyZSksIChnc3RfdjRsMnNyY19zZXRfY2FwdHVyZSksCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KSwgKGdzdF92NGwyc3JjX2J1ZmZlcl9maW5hbGl6ZSk6Ci0JICBjbGVhbnVwIHRoZSBlcnJvciBtZXNzYWdlIGEgYml0IG1vcmUKLQotMjAwNi0xMS0zMCAxNTowODowOCArMDAwMCAgUmVuw6kgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLQotCSAgZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jOiBDYWxsIHRoZSBiYXNlIGNsYXNzIGhhbmRsZXIuICBGaXhlcyAjMzgwNjEwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUmVuw6kgU3RhZGxlciAgPG1haWwgYXQgcmVuZXN0YWRsZXIgZGU+Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzogKGdzdF9yZ19hbmFseXNpc19ldmVudCk6Ci0JICBDYWxsIHRoZSBiYXNlIGNsYXNzIGhhbmRsZXIuICBGaXhlcyAjMzgwNjEwLgotCi0yMDA2LTExLTI4IDEyOjMwOjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOiBGaXggd2lkdGggYW5kIGhlaWdodCBwcm9wZXJ0aWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6IChnc3RfY2FjYXNpbmtfY2xhc3NfaW5pdCk6Ci0JICBGaXggd2lkdGggYW5kIGhlaWdodCBwcm9wZXJ0aWVzLgotCSAgKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5oOgotCSAgRml4IGNvbXBpbGF0aW9uIG9uIG5ld2VyIGxpYmNhY2EgdGhhdCByZXF1aXJlIHVzIHRvIGluY2x1ZGUgYSBuZXcKLQkgIGhlYWRlci4gRml4ZXMgIzM3OTkxOC4KLQotMjAwNi0xMS0yOCAxMTo1MjoyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvOiBBZGQgbWV0aG9kIHNvIHRoYXQgZXh0ZW5zaW9ucyBjYW4gY2hvb3NlIHRvIGRpc2FibGUgdGhlIHNldHVwIG9mIGEgc3RyZWFtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX29wZW4pOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3BleHQuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGV4dHdtcy5jOiAocnRzcF9leHRfd21zX2NvbmZpZ3VyZV9zdHJlYW0pLAotCSAgKHJ0c3BfZXh0X3dtc19nZXRfY29udGV4dCk6Ci0JICBBZGQgbWV0aG9kIHNvIHRoYXQgZXh0ZW5zaW9ucyBjYW4gY2hvb3NlIHRvIGRpc2FibGUgdGhlIHNldHVwIG9mCi0JICBhIHN0cmVhbS4KLQkgIE1ha2UgdGhlIFdNUyBleHRlbnNpb24gc2tpcCBzZXR1cCBvZiB4LXdtcy1ydHggc3RyZWFtcy4gRml4ZXMgIzM3Nzc5Mi4KLQotMjAwNi0xMS0yNyAxNzoxNjoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBSZW1vdmUgc29tZSBhc3NlcnRzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHByb3BlciBlcnJvciBtZXNzYWdlLiBGaXhlcyAjMzc5MjYxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2dldF9kdXJhdGlvbiksCi0JICAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksIChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgUmVtb3ZlIHNvbWUgYXNzZXJ0cyBhbmQgcmVwbGFjZSB0aGVtIHdpdGggYSBwcm9wZXIgZXJyb3IKLQkgIG1lc3NhZ2UuIEZpeGVzICMzNzkyNjEuCi0KLTIwMDYtMTEtMjcgMTY6MzA6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIG1lbnRpb24gYnVnIGZpeAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBtZW50aW9uIGJ1ZyBmaXgKLQotMjAwNi0xMS0yNyAxNjoyOTowNyArMDAwMCAgSm9uYXMgSG9sbWJlcmcgPGpvbmFzLmhvbG1iZXJnQGF4aXMuY29tPgotCi0JICBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiBQdXNoIGhlYWRlciBpbiBhIHNlcGFyYXRlIGJ1ZmZlciBpbnN0ZWFkIG9mIG1lbWNweTppbmcgYWxsIGRhdGEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEpvbmFzIEhvbG1iZXJnIDxqb25hcyBkb3QgaG9sbWJlcmcgYXQgYXhpcyBkb3QgY29tPgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiAoZ3N0X211bHRpcGFydF9tdXhfY29sbGVjdGVkKToKLQkgIFB1c2ggaGVhZGVyIGluIGEgc2VwYXJhdGUgYnVmZmVyIGluc3RlYWQgb2YgbWVtY3B5OmluZyBhbGwgZGF0YQotCSAgQ2hhbmdlIExGID0+IENSTEYgaW4gaGVhZGVycwotCSAgTW92ZSB0cmFpbGluZyBMRiB0byBoZWFkZXIKLQotMjAwNi0xMS0yNyAxNjoyNjo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOiBTbWFsbCBidWZmZXIgb3ZlcmZsb3cgZml4IGFuZCBpbXByb3ZlIGRlYnVnZ2luZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6IChnc3RfcnRwX21wYV9kZXBheV9jaGFpbik6Ci0JICBTbWFsbCBidWZmZXIgb3ZlcmZsb3cgZml4IGFuZCBpbXByb3ZlIGRlYnVnZ2luZy4KLQotMjAwNi0xMS0yNCAwODo1ODo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvZXNkLzogcmVtb3ZlIG9ic29sZXRlIF9mYWN0b3J5X2luaXQgcHJvdG9zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2Rtb24uaDoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmg6Ci0JICByZW1vdmUgb2Jzb2xldGUgX2ZhY3RvcnlfaW5pdCBwcm90b3MKLQotMjAwNi0xMS0yNCAwNzo0Njo1NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IHJlbW92ZSBkZWFkIGNvZGUsIHR3ZWFrIGRlYnVncyBzdGF0ZW1lbnRzLCBhZGQgY29tbWVudHMsIHVzZSBfdWludDY0X3NjYWxlIGluc3RlYWQgX3VpbnQ2NF9zY2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2luZGV4X2VudHJ5X2Zvcl90aW1lKSwKLQkgIChnc3RfYXZpX2RlbXV4X3NyY19jb252ZXJ0KSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JICAoZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rKSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1c2gpLAotCSAgKGdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1bGwpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3luYyksIChnc3RfYXZpX2RlbXV4X25leHRfZGF0YV9idWZmZXIpLAotCSAgKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsKSwgKGdzdF9hdmlfZGVtdXhfZG9fc2VlayksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2VlayksIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSksIChnc3RfYXZpX2RlbXV4X2xvb3ApOgotCSAgcmVtb3ZlIGRlYWQgY29kZSwgdHdlYWsgZGVidWdzIHN0YXRlbWVudHMsIGFkZCBjb21tZW50cywgdXNlCi0JICBfdWludDY0X3NjYWxlIGluc3RlYWQgX3VpbnQ2NF9zY2FsZV9pbnQgd2hlbiB1c2luZyBndWludDY0IHZhbHVlcywKLQkgIHNtYWxsIG9wdGltaXphdGlvbnMsIHJlZmxvdyBzb21lIGVycm9yIGhhbmRsaW5nCi0KLTIwMDYtMTEtMjIgMTc6Mzk6MTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHBvLy5jdnNpZ25vcmU6IFdlIG5ldmVyIHB1dCAucG90IGZpbGVzIGluIGN2cy4gTGV0J3MgaWdub3JlIHRoZW0gYWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHBvLy5jdnNpZ25vcmU6Ci0JICBXZSBuZXZlciBwdXQgLnBvdCBmaWxlcyBpbiBjdnMuIExldCdzIGlnbm9yZSB0aGVtIGFsbC4KLQotMjAwNi0xMS0yMSAxMjo1Nzo1MCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBlbmFsYmUgTEFEU1BBIHBsdWdpbiBpbiBzcGVjIGZpbGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZW5hbGJlIExBRFNQQSBwbHVnaW4gaW4gc3BlYyBmaWxlCi0KLTIwMDYtMTEtMTkgMTg6NDY6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHBvL1BPVEZJTEVTLmluOiAuLi4gYnV0IGJldHRlciBleGNsdWRlIGZpbGVzIHRoYXQgYXJlbid0IGRpc3RlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9QT1RGSUxFUy5pbjoKLQkgIC4uLiBidXQgYmV0dGVyIGV4Y2x1ZGUgZmlsZXMgdGhhdCBhcmVuJ3QgZGlzdGVkLgotCi0yMDA2LTExLTE5IDE2OjMyOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBwby9QT1RGSUxFUy5pbjogQWRkIHY0bDIgc291cmNlIGZpbGVzIHRvIGxpc3Qgb2YgZmlsZXMgd2l0aCB0cmFuc2xhdGlvbnMsIHNvIHRoZSBzdHJpbmdzIGFyZSBhY3R1YWxseSBleHRyYWN0ZWQgKGhvd2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBwby9QT1RGSUxFUy5pbjoKLQkgIEFkZCB2NGwyIHNvdXJjZSBmaWxlcyB0byBsaXN0IG9mIGZpbGVzIHdpdGggdHJhbnNsYXRpb25zLCBzbyB0aGUKLQkgIHN0cmluZ3MgYXJlIGFjdHVhbGx5IGV4dHJhY3RlZCAoaG93ZXZlciBiYWQgdGhleSBzdGlsbCBtYXkgYmUpLgotCi0yMDA2LTExLTE5IDE2OjMwOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogTWlub3IgY2xlYW4tdXBzOiBjb25zdC1pZnkgc3RhdGljIGFycmF5LCByZW1vdmUgdHJhaWxpbmcgY29tbWEgZnJvbSB1c2UgR1NUX0RFQlVHX0ZVTkNQVFIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IChnc3RfdmlkZW9fYm94X2NsYXNzX2luaXQpOgotCSAgTWlub3IgY2xlYW4tdXBzOiBjb25zdC1pZnkgc3RhdGljIGFycmF5LCByZW1vdmUgdHJhaWxpbmcgY29tbWEgZnJvbQotCSAgbGFzdCBlbnVtIChnY2MtMi45eCB0cmlwcyBvdmVyIHRoYXQpLCB1c2UgR1NUX0RFQlVHX0ZVTkNQVFIuCi0KLTIwMDYtMTEtMTkgMTM6NDE6NTMgKzAwMDAgIFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiBNYWtlIHN1cmUgdGhhdCBnX2ZyZWUgYWx3YXlzIGdldHMgY2FsbGVkIG9uIHRoZSBzYW1lIHBvaW50ZXIgdGhhdCB3YXMgcmV0dXJuZWQgYnkgZ19tYWxsby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaWQzZGVtdXhfaWQzdjJfcGFyc2VfZnJhbWUpOgotCSAgTWFrZSBzdXJlIHRoYXQgZ19mcmVlIGFsd2F5cyBnZXRzIGNhbGxlZCBvbiB0aGUgc2FtZSBwb2ludGVyIHRoYXQgd2FzCi0JICByZXR1cm5lZCBieSBnX21hbGxvYy4gIEZpeGVzICMzNzY1OTQuCi0JICBEbyBub3QgbGVhayBtZW1vcnkgaWYgZGVjb21wcmVzc2VkIHNpemUgaXMgd3JvbmcuCi0JICBSZW1vdmUgdW5uZWVkZWQgY2hlY2sgb2YgcmV0dXJuIHZhbHVlIG9mIGdfbWFsbG9jLgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0KLTIwMDYtMTEtMTggMTg6MTQ6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogQWRkIG1pc3NpbmcgY3VybHkgYnJhY2tldHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9kZWluaXQpOgotCSAgQWRkIG1pc3NpbmcgY3VybHkgYnJhY2tldHMuCi0KLTIwMDYtMTEtMTcgMTQ6NTQ6MDEgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogQ2hhbmdlTG9nOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgRml4IGNhcHR1cmVfZGVpbml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggY2FwdHVyZV9kZWluaXQuCi0KLTIwMDYtMTEtMTYgMTU6MzY6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogVXNlIEdTVF9ERUJVR19GVU5DUFRSOyBhY3RpdmF0ZSByZXF1ZXN0IHBhZCBiZWZvcmUgcmV0dXJuaW5nIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfY2xhc3NfaW5pdCksCi0JICAoZ3N0X21hdHJvc2thX211eF9yZXF1ZXN0X25ld19wYWQpOgotCSAgVXNlIEdTVF9ERUJVR19GVU5DUFRSOyBhY3RpdmF0ZSByZXF1ZXN0IHBhZCBiZWZvcmUgcmV0dXJuaW5nIGl0LgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOiAoc2V0dXBfc3JjX3BhZCksCi0JICAoc2V0dXBfc2lua19wYWQpLCAoR1NUX1NUQVJUX1RFU1QpOgotCSAgQWN0aXZhdGUgcGFkcyBiZWZvcmUgdXNpbmcgdGhlbS4KLQotMjAwNi0xMS0xNiAxNTowNDo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBJbml0aWFsaXNlIHZhcmlhYmxlIHRvIGdldCByaWQgb2YgYm9ndXMgY29tcGlsZXIgd2FybmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKToKLQkgIEluaXRpYWxpc2UgdmFyaWFibGUgdG8gZ2V0IHJpZCBvZiBib2d1cyBjb21waWxlciB3YXJuaW5nLgotCi0yMDA2LTExLTE2IDA3OjI2OjE3ICswMDAwICBWaWxsZSBTeXJqYWxhIDx2aWxsZS5zeXJqYWxhQG1vdmlhbC5maT4KLQotCSAgZ3N0L3J0cC86IFNwZWNpZnkgSC4yNjMgdmFyaWFudCBhbmQgdmVyc2lvbiBpbiB0aGUgY2FwcyAoZml4ZXMgIzM2MTYzNykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFZpbGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbW92aWFsLmZpPgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgIFNwZWNpZnkgSC4yNjMgdmFyaWFudCBhbmQgdmVyc2lvbiBpbiB0aGUgY2FwcyAoZml4ZXMgIzM2MTYzNykKLQotMjAwNi0xMS0xNSAxNzo0NDowMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogRG9uJ3Qgc2V0IGEgZGF0YSBwb2ludGVyIHRvIE5VTEwgYW5kIGEgc2l6ZSA+IDAgd2hlbiB3ZSBkZWFsIHdpdGggZW1wdHkgcGFja2V0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocmVhZF9ib2R5KToKLQkgIERvbid0IHNldCBhIGRhdGEgcG9pbnRlciB0byBOVUxMIGFuZCBhIHNpemUgPiAwIHdoZW4gd2UgZGVhbAotCSAgd2l0aCBlbXB0eSBwYWNrZXRzLgotCSAgKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5jOiAocnRzcF9tZXNzYWdlX25ld19yZXNwb25zZSksCi0JICAocnRzcF9tZXNzYWdlX2luaXRfcmVzcG9uc2UpLCAocnRzcF9tZXNzYWdlX2luaXRfZGF0YSksCi0JICAocnRzcF9tZXNzYWdlX3Vuc2V0KSwgKHJ0c3BfbWVzc2FnZV9mcmVlKSwKLQkgIChydHNwX21lc3NhZ2VfdGFrZV9ib2R5KToKLQkgIENoZWNrIHRoYXQgd2UgY2FuJ3QgY3JlYXRlIGludmFsaWQgZW1wdHkgcGFja2V0cy4KLQotMjAwNi0xMS0xNSAxMjozNTo0NiArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay86IFNvbWUgc21hbGwgY2xlYW4tdXBzOiB1c2UgZW51bXMgaW5zdGVhZCBvZiBoYXJkLWNvZGVkIG51bWJlcnMsIGNvbnN0LWlmeSBlbGVtZW50IGRldGFpbHMsIHJlLWZhY3RvciBzb20uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2luaXQpLCAoZ3N0X3dhdnBhY2tfZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19iYXNlX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2VuY19jbGFzc19pbml0KSwgKGdzdF93YXZwYWNrX2VuY19yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX2luaXQpLCAoZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcpLAotCSAgKGdzdF93YXZwYWNrX2VuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIFNvbWUgc21hbGwgY2xlYW4tdXBzOiB1c2UgZW51bXMgaW5zdGVhZCBvZiBoYXJkLWNvZGVkIG51bWJlcnMsCi0JICBjb25zdC1pZnkgZWxlbWVudCBkZXRhaWxzLCByZS1mYWN0b3Igc29tZSBjb2RlIGludG8gX3Jlc2V0KCkKLQkgIGZ1bmN0aW9ucyAoIzM1MjYwNSkuCi0KLTIwMDYtMTEtMTUgMTI6MDg6MjAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguKjogQWRkIGJhc2ljIHRhZyB3cml0aW5nIHN1cHBvcnQ7IGltcGxlbWVudCByZWxlYXNpbmcgcGFkcyAoIzM3NDY1OCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzICA8bWFuYXV3IGF0IHNreW5ldCBiZT4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9hZGRfaW50ZXJmYWNlcyksCi0JICAoZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0KSwgKGdzdF9tYXRyb3NrYV9wYWRfZnJlZSksCi0JICAoZ3N0X21hdHJvc2thX211eF9yZXNldCksIChnc3RfbWF0cm9za2FfbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3JlcXVlc3RfbmV3X3BhZCksIChnc3RfbWF0cm9za2FfbXV4X3JlbGVhc2VfcGFkKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3RyYWNrX2hlYWRlciksIChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3NpbXBsZV90YWcpLCAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JICBBZGQgYmFzaWMgdGFnIHdyaXRpbmcgc3VwcG9ydDsgaW1wbGVtZW50IHJlbGVhc2luZyBwYWRzICgjMzc0NjU4KS4KLQotMjAwNi0xMS0xNSAxMToxOToxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IEhhbmRsZSBvcGFxdWUvdW5zcGVjaWZpZWQgQV9BQUMgYXVkaW8gY29kZWMgSUQgKGZpeGVzICMzNzQ3MzcpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hdWRpb19jYXBzKToKLQkgIEhhbmRsZSBvcGFxdWUvdW5zcGVjaWZpZWQgQV9BQUMgYXVkaW8gY29kZWMgSUQgKGZpeGVzICMzNzQ3MzcpLgotCi0yMDA2LTExLTE1IDAwOjEyOjE5ICswMDAwICBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBBZGQgRGlyYWMgZm91cmNjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogQWRkIERpcmFjIGZvdXJjYy4KLQotMjAwNi0xMS0xNCAyMDowNzoyMiArMDAwMCAgU2VyZ2V5IFNjb2JpY2ggPHNlcmdleS5zY29iaWNoQGdtYWlsLmNvbT4KLQotCSAgd2luMzIvdnM4LzogTWFrZSBlbmQtb2YtbGluZSByZXR1cm5zIHVuaXh5LCBzbyB0aGF0IHdoZW4gdGhlIGZpbGVzIGFyZSBjaGVja2VkIG91dCBvbiB3aW4zMiB0aGUgbGluZSByZXR1cm5zIHdpbGwgYmUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZXJnZXkgU2NvYmljaCAgPHNlcmdleS5zY29iaWNoIGF0IGdtYWlsIGNvbT4KLQkgICogd2luMzIvdnM4L2dzdC1wbHVnaW5zLWdvb2Quc2xuOgotCSAgKiB3aW4zMi92czgvbGliZ3N0MTM5NC52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhYXNpbmsudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YWxhdy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhbHBoYS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhbHBoYWNvbG9yLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGFubm9kZXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YXBldGFnLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGF1ZGlvZngudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YXVwYXJzZS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhdXRvZGV0ZWN0LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGF2aS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RjYWNhc2luay52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RjZGlvLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGN1dHRlci52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3Rkdi52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RlZmZlY3R2LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGZsYWMudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0Zmx4ZGVjLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGdvb20udmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0aWN5ZGVtdXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0aWQzZGVtdXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0anBlZy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RsYWRzcGEudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bGV2ZWwudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bWF0cm9za2EudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bWlrbW9kLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdG1uZy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3Rtb25vc2NvcGUudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bXVsYXcudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bXVsdGlwYXJ0LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHBuZy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RydHAudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0cnRzcC52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RzaG91dDIudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0c21wdGUudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0c3BlZXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0dGFnbGliLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHVkcC52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3R2aWRlb2JhbGFuY2UudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0dmlkZW9ib3gudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0dmlkZW9mbGlwLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHZpZGVvbWl4ZXIudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0d2F2ZW5jLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHdhdnBhcnNlLnZjcHJvajoKLQkgIE1ha2UgZW5kLW9mLWxpbmUgcmV0dXJucyB1bml4eSwgc28gdGhhdCB3aGVuIHRoZSBmaWxlcyBhcmUgY2hlY2tlZAotCSAgb3V0IG9uIHdpbjMyIHRoZSBsaW5lIHJldHVybnMgd2lsbCBiZSAwZCAwYSBhbmQgbm90IDBkIDBkIDBhLgotCSAgSG9wZWZ1bGx5IGZpeGVzICMzNjY0OTIuCi0KLTIwMDYtMTEtMTQgMTU6NTU6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogRGlzYWJsZSBpbml0X2ZyYW1lcyBkZWxheSB0aW1lc3RhbXAgYWRqdXN0bWVudCwgaXQgZG9lcyBub3Qgc2VlbSB0byBiZSBuZWVkZWQgYXQgYWxsLiBGaXhlcyAjMy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCk6Ci0JICBEaXNhYmxlIGluaXRfZnJhbWVzIGRlbGF5IHRpbWVzdGFtcCBhZGp1c3RtZW50LCBpdCBkb2VzIG5vdAotCSAgc2VlbSB0byBiZSBuZWVkZWQgYXQgYWxsLiBGaXhlcyAjMzY5NjIxLgotCi0yMDA2LTExLTE0IDExOjQzOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IERvbid0IHBhcnNlIGV4dHJhIHNhbXBsZSBwYXJhbXMgZm9yIHJhdyBwY20uIEZpeGVzICMzNzQ5MTQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfZ2V0X2R1cmF0aW9uKSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBEb24ndCBwYXJzZSBleHRyYSBzYW1wbGUgcGFyYW1zIGZvciByYXcgcGNtLiBGaXhlcyAjMzc0OTE0LgotCi0yMDA2LTExLTEzIDE4OjMxOjE4ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IEZpeCBtZW1sZWFrIGJ5IHVucmVmJ2luZyBjb2xsZWN0cGFkcyBpbnN0YW5jZSAod2hlbiBmaW5hbGl6aW5nKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyAgPG1hbmF1dyBhdCBza3luZXQgYmU+Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIChnc3RfdmlkZW9taXhlcl9zZXRfbWFzdGVyX2dlb21ldHJ5KSwKLQkgIChnc3RfdmlkZW9taXhlcl9wYWRfc2lua19zZXRjYXBzKSwgKGdzdF92aWRlb21peGVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb21peGVyX2NvbGxlY3RfZnJlZSksIChnc3RfdmlkZW9taXhlcl9yZXNldCksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfaW5pdCksIChnc3RfdmlkZW9taXhlcl9maW5hbGl6ZSksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF92aWRlb21peGVyX3JlbGVhc2VfcGFkKSwKLQkgIChnc3RfdmlkZW9taXhlcl9jb2xsZWN0ZWQpLCAoZ3N0X3ZpZGVvbWl4ZXJfY2hhbmdlX3N0YXRlKToKLQkgIEZpeCBtZW1sZWFrIGJ5IHVucmVmJ2luZyBjb2xsZWN0cGFkcyBpbnN0YW5jZSAod2hlbiBmaW5hbGl6aW5nKQotCSAgSW1wbGVtZW50IHJlbGVhc2luZyBhIHJlcXVlc3QgcGFkLiBGaXhlcyAjMzc0NDc5LgotCi0yMDA2LTExLTEwIDIwOjA4OjQyICswMDAwICBTZXJnZXkgU2NvYmljaCA8c2VyZ2V5LnNjb2JpY2hAZ21haWwuY29tPgotCi0JICB3aW4zMi92czgvOiBBZGQgVlM4IHByb2plY3QgZmlsZXMgKG5vdGUgdGhhdCBtYW55IG9mIHRoZSBwbHVnaW5zIGluIGV4dCBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIEZpeGVzICMzNjY0OTIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZXJnZXkgU2NvYmljaCAgPHNlcmdleS5zY29iaWNoIGF0IGdtYWlsIGNvbT4KLQkgICogd2luMzIvdnM4L2dzdC1wbHVnaW5zLWdvb2Quc2xuOgotCSAgKiB3aW4zMi92czgvbGliZ3N0MTM5NC52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhYXNpbmsudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YWxhdy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhbHBoYS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhbHBoYWNvbG9yLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGFubm9kZXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YXBldGFnLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGF1ZGlvZngudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0YXVwYXJzZS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RhdXRvZGV0ZWN0LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGF2aS52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RjYWNhc2luay52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RjZGlvLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGN1dHRlci52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3Rkdi52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RlZmZlY3R2LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGZsYWMudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0Zmx4ZGVjLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGdvb20udmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0aWN5ZGVtdXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0aWQzZGVtdXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0anBlZy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RsYWRzcGEudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bGV2ZWwudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bWF0cm9za2EudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bWlrbW9kLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdG1uZy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3Rtb25vc2NvcGUudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bXVsYXcudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0bXVsdGlwYXJ0LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHBuZy52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RydHAudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0cnRzcC52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3RzaG91dDIudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0c21wdGUudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0c3BlZXgudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0dGFnbGliLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHVkcC52Y3Byb2o6Ci0JICAqIHdpbjMyL3ZzOC9saWJnc3R2aWRlb2JhbGFuY2UudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0dmlkZW9ib3gudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0dmlkZW9mbGlwLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHZpZGVvbWl4ZXIudmNwcm9qOgotCSAgKiB3aW4zMi92czgvbGliZ3N0d2F2ZW5jLnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdHdhdnBhcnNlLnZjcHJvajoKLQkgIEFkZCBWUzggcHJvamVjdCBmaWxlcyAobm90ZSB0aGF0IG1hbnkgb2YgdGhlIHBsdWdpbnMgaW4gZXh0IGFyZQotCSAgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIEZpeGVzICMzNjY0OTIuCi0KLTIwMDYtMTEtMTAgMTk6MTg6MzMgKzAwMDAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotCi0JICBnc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtOiBMZXQncyBub3QgZGVwZW5kIG9uIGEgZmlsZSB0aGF0IGRvZXNuJ3QgZXhpc3QuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L211bHRpZmlsZS9NYWtlZmlsZS5hbToKLQkgIExldCdzIG5vdCBkZXBlbmQgb24gYSBmaWxlIHRoYXQgZG9lc24ndCBleGlzdC4KLQotMjAwNi0xMS0xMCAxODo1MToxMCArMDAwMCAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkgIFJldml2ZSBtdWx0aWZpbGVbc3JjfHNpbmtdLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L211bHRpZmlsZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGUuYzoKLQkgICogZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JICAqIGdzdC9tdWx0aWZpbGUvbXVsdGlmaWxlLnZwcm9qOgotCSAgUmV2aXZlIG11bHRpZmlsZVtzcmN8c2lua10uCi0KLTIwMDYtMTEtMTAgMDg6MDk6MDUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiB3ZSBkbyBub3QgdHJhbnNsYXRlIGRlYnVnIG1lc3NhZ2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSk6Ci0JICB3ZSBkbyBub3QgdHJhbnNsYXRlIGRlYnVnIG1lc3NhZ2VzCi0KLTIwMDYtMTEtMDggMTI6MDQ6MDMgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2ZseC9nc3RmbHhkZWMuYzogZml4IGNhdGVnb3Jpc2F0aW9uLCBtYWtlIHNob3J0IGRlc2MgbW9yZSBleHBsaWNpdCwgcmVtb3ZlIHVudXNlZCBjb2RlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZseC9nc3RmbHhkZWMuYzogKGdzdF9mbHhkZWNfY2xhc3NfaW5pdCk6Ci0JICBmaXggY2F0ZWdvcmlzYXRpb24sIG1ha2Ugc2hvcnQgZGVzYyBtb3JlIGV4cGxpY2l0LCByZW1vdmUgdW51c2VkIGNvZGUKLQkgIEZpeGVzICMzNzIwMjEKLQotMjAwNi0xMS0wOCAwMTozMDozOSArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JICBnc3QvcnRwLzogRml4IGVsZW1lbnQgZGVzY3JpcHRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOgotCSAgRml4IGVsZW1lbnQgZGVzY3JpcHRpb25zLgotCi0yMDA2LTExLTA4IDAxOjI5OjUxICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkgIGdzdC9ydHAvOiBGaXggZGVzY3JpcHRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jOiAoZ3N0X3J0cF92b3JiaXNfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgRml4IGRlc2NyaXB0aW9uLgotCSAgU21hbGwgY2xlYW51cCBpbiB0aGUgcGF5bG9hZGVyLgotCi0yMDA2LTExLTA4IDAxOjI4OjAwICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkgIGdzdC9ydHAvOiBBZGQgdGhlb3JhIHBheS9kZXBheWxvYWRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jOiAoZ3N0X3J0cF90aGVvcmFfZGVwYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX3RoZW9yYV9kZXBheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfdGhlb3JhX2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfdGhlb3JhX2RlcGF5X2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX3RoZW9yYV9kZXBheV9wYXJzZV9jb25maWd1cmF0aW9uKSwKLQkgIChnc3RfcnRwX3RoZW9yYV9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3RoZW9yYV9kZXBheV9zd2l0Y2hfY29kZWJvb2spLAotCSAgKGdzdF9ydHBfdGhlb3JhX2RlcGF5X3Byb2Nlc3MpLAotCSAgKGdzdF9ydHBfdGhlb3JhX2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF90aGVvcmFfZGVwYXlfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX3RoZW9yYV9kZXBheV9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9ydHBfdGhlb3JhX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jOiAoZ3N0X3J0cF90aGVvcmFfcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF90aGVvcmFfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfdGhlb3JhX3BheV9zZXRjYXBzKSwgKGdzdF9ydHBfdGhlb3JhX3BheV9yZXNldF9wYWNrZXQpLAotCSAgKGdzdF9ydHBfdGhlb3JhX3BheV9pbml0X3BhY2tldCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2ZsdXNoX3BhY2tldCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2ZpbmlzaF9oZWFkZXJzKSwgKGdzdF9ydHBfdGhlb3JhX3BheV9wYXJzZV9pZCksCi0JICAoZ3N0X3J0cF90aGVvcmFfcGF5X2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9ydHBfdGhlb3JhX3BheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5Lmg6Ci0JICBBZGQgdGhlb3JhIHBheS9kZXBheWxvYWRlcnMuCi0KLTIwMDYtMTEtMDcgMDE6NDM6MDYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSAgZ3N0L3J0cC9NYWtlZmlsZS5hbTogV2UgZGVwZW5kIG9uIGdzdHRhZyB0byBnZW5lcmF0ZSB0aGUgdm9yYmlzIGNvbW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICBXZSBkZXBlbmQgb24gZ3N0dGFnIHRvIGdlbmVyYXRlIHRoZSB2b3JiaXMgY29tbWVudHMuCi0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzZGVwYXkuYzoKLQkgIChnc3RfcnRwX3ZvcmJpc19kZXBheV9wYXJzZV9jb25maWd1cmF0aW9uKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19kZXBheV9zd2l0Y2hfY29kZWJvb2spLAotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5Lmg6Ci0JICBQYXJzZSBjb25maWd1cmF0aW9uIHN0cmluZyBpbiB0aGUgZGVwYXlsb2FkZXIuCi0JICBJbXBsZW1lbnQgc2VsZWN0aW5nIGFuZCBzd2l0Y2hpbmcgdG8gYSBuZXcgY29kZWJvb2suCi0JICBSZWNlaXZpbmcgdm9yYmlzIG92ZXIgUlRQIG5vdyB3b3Jrcy4KLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzogKGdzdF9ydHBfdm9yYmlzX3BheV9yZXNldF9wYWNrZXQpLAotCSAgKGdzdF9ydHBfdm9yYmlzX3BheV9pbml0X3BhY2tldCksCi0JICAoZ3N0X3J0cF92b3JiaXNfcGF5X2ZpbmlzaF9oZWFkZXJzKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5Lmg6Ci0JICBTZXQgdGltZXN0YW1wcyBvbiBvdXRnb2luZyBidWZmZXJzIGFuZCBSVFAgcGFja2V0cy4KLQkgIEZpeCBjb25maWd1cmF0aW9uIHN0cmluZywgcHJlcGVuZCBudW1iZXIgb2YgUGFja2V0IGhlYWRlcnMuCi0JICBGaXggZW5jb2Rpbmcgb2YgaWRlbnQgc3RyaW5nLgotCSAgQWRkIGRlbGl2ZXJ5LW1ldGhvZCB0byBjYXBzLgotCSAgU3RyZWFtaW5nIHZvcmJpcyBvdmVyIFJUUCBub3cgd29ya3MuCi0KLTIwMDYtMTEtMDYgMjA6NTI6MTAgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSAgZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuKjogR2VuZXJhdGUgYSB2YWxpZCBjb25maWd1cmF0aW9uIHN0cmluZyBpbiB0aGUgY2FwcyBiYXNlZCBvbiB0aGUgdm9yYmlzIGhlYWRlcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzogKGdzdF9ydHBfdm9yYmlzX3BheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfZmluaXNoX2hlYWRlcnMpLCAoZ3N0X3J0cF92b3JiaXNfcGF5X3BhcnNlX2lkKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5Lmg6Ci0JICBHZW5lcmF0ZSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gc3RyaW5nIGluIHRoZSBjYXBzIGJhc2VkIG9uIHRoZQotCSAgdm9yYmlzIGhlYWRlcnMuCi0KLTIwMDYtMTEtMDIgMjA6MTM6MjYgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgRml4IGVudW0gbmlja3M7IG9ubHkgZW1pdCBuby1tb3JlLXBhZHMgb25jZTsgYWRkIHN1cHBvcnQgZm9yIHZlcnkgZmFzdCBlbmNvZGluZyBtb2RlIGluIHVwY29taW5nIDQuNDAuMCByZWxlYXNlICgjMzY5Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tbyBhdCBjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX21vZGVfZ2V0X3R5cGUpLAotCSAgKGdzdF93YXZwYWNrX2VuY19jb3JyZWN0aW9uX21vZGVfZ2V0X3R5cGUpLAotCSAgKGdzdF93YXZwYWNrX2VuY19qb2ludF9zdGVyZW9fbW9kZV9nZXRfdHlwZSksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX2luaXQpLCAoZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcpOgotCSAgRml4IGVudW0gbmlja3M7IG9ubHkgZW1pdCBuby1tb3JlLXBhZHMgb25jZTsgYWRkIHN1cHBvcnQgZm9yIHZlcnkKLQkgIGZhc3QgZW5jb2RpbmcgbW9kZSBpbiB1cGNvbWluZyA0LjQwLjAgcmVsZWFzZSAoIzM2OTUzOSkuCi0KLTIwMDYtMTEtMDIgMTQ6NDM6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9jZGlvLzogTW92ZSBDRC1URVhUIHV0aWxpdHkgZnVuY3Rpb24gaW50byBjb21tb24gZmlsZSBzbyBpdCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGEgZnV0dXJlIGNkaW9wYXJhbm9pYXNyYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvLmM6IChnc3RfY2Rpb19nZXRfY2R0ZXh0KToKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpby5oOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOiAoZ3N0X2NkaW9fY2RkYV9zcmNfb3Blbik6Ci0JICBNb3ZlIENELVRFWFQgdXRpbGl0eSBmdW5jdGlvbiBpbnRvIGNvbW1vbiBmaWxlIHNvIGl0IGNhbiBhbHNvIGJlCi0JICB1c2VkIGJ5IGEgZnV0dXJlIGNkaW9wYXJhbm9pYXNyYy4KLQotMjAwNi0xMS0wMSAxOTo0ODoyNiArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBzeXMvdjRsMi9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIEltcHJvdmVkIGNvbW1lbnRzIGluIEVMRU1FTlRfRVJST1IvV0FSTklORyBhbmQgYWRkZWQgIiNpZiAwIiB0byB4b3ZlcmxheSBjb2RlIHRoYXQgaXMgc3RpbGwgbm90IGltcGxlbWVudGVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBJbXByb3ZlZCBjb21tZW50cyBpbiBFTEVNRU5UX0VSUk9SL1dBUk5JTkcgYW5kIGFkZGVkICIjaWYgMCIgdG8geG92ZXJsYXkgY29kZSB0aGF0IGlzIHN0aWxsIG5vdCBpbXBsZW1lbnRlZC4KLQotMjAwNi0xMS0wMSAxMzo1OTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IFdlIHJlcXVpcmUgYSAtYmFzZSBtb3JlIHJlY2VudCB0aGFuIDAuMTAuOSwgc28gaXQncyBzYWZlIHRvIHVzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAocGFyc2VfcGljdHVyZV9mcmFtZSk6Ci0JICBXZSByZXF1aXJlIGEgLWJhc2UgbW9yZSByZWNlbnQgdGhhbiAwLjEwLjksIHNvIGl0J3Mgc2FmZSB0byB1c2UKLQkgIEdTVF9UWVBFX1RBR19JTUFHRV9UWVBFIHVuY29uZGl0aW9uYWxseSBub3cuCi0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX3NpbmtfZXZlbnQpOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfc2lua19ldmVudCk6Ci0JICBVc2UgX25ld3NlZ21lbnRfZnVsbCgpIG5vdyB0aGF0IHdlIGRlcGVuZCBvbiBhIHJlY2VudCBlbm91Z2ggY29yZS4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBSZW1vdmUgY3J1ZnQgdGhhdCB3ZSBkb24ndCBuZWVkIGFueSBsb25nZXIgbm93IHRoYXQgd2UgZGVwZW5kIG9uCi0JICBhIHJlY2VudCBlbm91Z2ggLWJhc2UuCi0KLTIwMDYtMTEtMDEgMTA6MTk6MTggKzAwMDAgIFNlcmdleSBTY29iaWNoIDxzZXJnZXkuc2NvYmljaEBnbWFpbC5jb20+Ci0KLQkgIHN5cy86IFdhaXQgdW50aWwgdGhlIHdpbmRvdyBpcyBjcmVhdGVkIGJlZm9yZSB1c2luZyBpdDsgZ3VhcmQgdW5pc3RkLmggaW5jbHVkZXMgd2l0aCBIQVZFX1VOSVNURF9ILiAoIzM2NjUyMykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlcmdleSBTY29iaWNoICA8c2VyZ2V5IGRvdCBzY29iaWNoIGF0IGdtYWlsIGNvbT4KLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzoKLQkgIChnc3RfZGlyZWN0ZHJhd3Npbmtfd2luZG93X3RocmVhZCksCi0JICAoZ3N0X2RpcmVjdGRyYXdzaW5rX2NyZWF0ZV9kZWZhdWx0X3dpbmRvdyk6Ci0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmg6Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIFdhaXQgdW50aWwgdGhlIHdpbmRvdyBpcyBjcmVhdGVkIGJlZm9yZSB1c2luZyBpdDsgZ3VhcmQgdW5pc3RkLmgKLQkgIGluY2x1ZGVzIHdpdGggSEFWRV9VTklTVERfSC4gKCMzNjY1MjMpCi0JICAqIHdpbjMyL3ZzOC9saWJnc3RkaXJlY3RkcmF3LnZjcHJvajoKLQkgICogd2luMzIvdnM4L2xpYmdzdGRpcmVjdHNvdW5kLnZjcHJvajoKLQkgIFVwZGF0ZSBwcm9qZWN0IGZpbGVzLgotCi0yMDA2LTEwLTMxIDEwOjUyOjMxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogRml4IGFuZCBhY3RpdmF0ZSBJTEJDIHBheSBhbmQgZGVwYXlsb2FkZXJzLiBGaXhlcyAjMzY4MTYyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOiAoZ3N0X3J0cGlsYmNwYXlfaW5pdCksCi0JICAoZ3N0X3J0cGlsYmNwYXlfc2V0Y2Fwcyk6Ci0JICBGaXggYW5kIGFjdGl2YXRlIElMQkMgcGF5IGFuZCBkZXBheWxvYWRlcnMuIEZpeGVzICMzNjgxNjIuCi0KLTIwMDYtMTAtMzEgMTA6MzE6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogSGFuZGxlIHVuYm91bmRlZCBsZW5ndGggc3RyZWFtcyBhIGJpdCBiZXR0ZXIuIEZpeGVzICMzNjc2OTYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfZ2V0X2R1cmF0aW9uKSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKHF0ZGVtdXhfcGFyc2VfdHJlZSksCi0JICAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIEhhbmRsZSB1bmJvdW5kZWQgbGVuZ3RoIHN0cmVhbXMgYSBiaXQgYmV0dGVyLiBGaXhlcyAjMzY3Njk2LgotCi0yMDA2LTEwLTMxIDA5OjQ0OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogU29tZSBzbWFsbCBjbGVhbnVwcywgdXNlIF9zY2FsZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKHNwZWV4X2RlY19jb252ZXJ0KSwKLQkgIChzcGVleF9kZWNfc2lua19ldmVudCksIChzcGVleF9kZWNfY2hhaW5fcGFyc2VfaGVhZGVyKToKLQkgIFNvbWUgc21hbGwgY2xlYW51cHMsIHVzZSBfc2NhbGUuCi0KLTIwMDYtMTAtMzEgMDk6Mjk6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogVXNlIGhpZ2hlciBwcmVjaXNpb24gc2NhbGUgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KToKLQkgIFVzZSBoaWdoZXIgcHJlY2lzaW9uIHNjYWxlIGZ1bmN0aW9uLgotCi0yMDA2LTEwLTMwIDE2OjE4OjE4ICswMDAwICBNaWNoYWwgQmVuZXMgPG1pY2hhbC5iZW5lc0BpdG9uaXMudHY+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBGaXggc2V2ZXJhbCBpc3N1ZXMgd2l0aCBlbmNvZGVkL2NvbXByZXNzZWQvZW5jcnlwdGVkL3NpZ25lZCB0cmFja3M7IGFsc28sIHJlbW92ZSBzdXBlci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWljaGFsIEJlbmVzICA8bWljaGFsIGRvdCBiZW5lcyBhdCBpdG9uaXMgdHY+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2VuY29kaW5nX2NtcCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3JlYWRfdHJhY2tfZW5jb2RpbmdzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVjb2RlX2J1ZmZlcik6Ci0JICBGaXggc2V2ZXJhbCBpc3N1ZXMgd2l0aCBlbmNvZGVkL2NvbXByZXNzZWQvZW5jcnlwdGVkL3NpZ25lZCB0cmFja3M7Ci0JICBhbHNvLCByZW1vdmUgc3VwZXJmbHVvdXMgbmV3bGluZSBjaGFyYWN0ZXJzIGZyb20gc29tZSBkZWJ1ZwotCSAgc3RhdGVtZW50cy4gKCMzNjYxNTUpCi0KLTIwMDYtMTAtMzAgMDk6MjQ6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9qcGVnLzogVmFyaW91cyBjbGVhbnVwcywgY2Fwc25lZ28gYW5kIGxlYWsgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAoZ3N0X2pwZWdlbmNfZ2V0Y2Fwcyk6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6IChnc3Rfc21va2VkZWNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3Ntb2tlZGVjX2luaXQpLCAoZ3N0X3Ntb2tlZGVjX2ZpbmFsaXplKSwgKGdzdF9zbW9rZWRlY19jaGFpbiksCi0JICAoZ3N0X3Ntb2tlZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6IChnc3Rfc21va2VlbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3Ntb2tlZW5jX2luaXQpLCAoZ3N0X3Ntb2tlZW5jX2ZpbmFsaXplKSwKLQkgIChnc3Rfc21va2VlbmNfZ2V0Y2FwcyksIChnc3Rfc21va2VlbmNfc2V0Y2FwcyksCi0JICAoZ3N0X3Ntb2tlZW5jX3Jlc3luYyksIChnc3Rfc21va2VlbmNfY2hhaW4pLAotCSAgKGdzdF9zbW9rZWVuY19zZXRfcHJvcGVydHkpLCAoZ3N0X3Ntb2tlZW5jX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3Ntb2tlZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JICBWYXJpb3VzIGNsZWFudXBzLCBjYXBzbmVnbyBhbmQgbGVhayBmaXhlcy4KLQotMjAwNi0xMC0zMCAwODoxNzowOCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBGaXggdmlkZW9taXhlciBzbyB0aGF0IGl0IGNhbiBoYW5kbGUgYW55IGNvbWJpbmF0aW9uIG9mIGZyYW1lcmF0ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzICA8bWFuYXV3IGF0IHNreW5ldCBiZT4KLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfdXBkYXRlX3F1ZXVlcyk6Ci0JICBGaXggdmlkZW9taXhlciBzbyB0aGF0IGl0IGNhbiBoYW5kbGUgYW55IGNvbWJpbmF0aW9uIG9mIGZyYW1lcmF0ZXMuCi0JICBGaXhlcyAjMzY3MjIxLgotCi0yMDA2LTEwLTI4IDE2OjM3OjIwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IEZpeCBwb3NpdGlvbiBxdWVyeSBmb3IgYXVkaW8uIGFsc28gZml4ZXMgdGltZXN0YW1wcyBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgYnVnICMzNjQ5NTguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2ZpbGVfaGVhZGVyKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0X3B1c2gpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdXNoKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpLAotCSAgKGdzdF9hdmlfZGVtdXhfY2hhaW4pOgotCSAgRml4IHBvc2l0aW9uIHF1ZXJ5IGZvciBhdWRpby4gYWxzbyBmaXhlcyB0aW1lc3RhbXBzIGluIHN0cmVhbWluZwotCSAgbW9kZSBhbmQgYnVnICMzNjQ5NTguCi0JICBTbWFsbCBjbGVhbnVwcy4KLQotMjAwNi0xMC0yNyAxNzoxMDo0MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdlbmMuKjogRml4IHN0cmlkZXMuIEZpeGVzICMzNjQ4NTYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogKGdzdF9wbmdlbmNfc2V0Y2FwcyksIChnc3RfcG5nZW5jX2NoYWluKToKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdlbmMuaDoKLQkgIEZpeCBzdHJpZGVzLiBGaXhlcyAjMzY0ODU2LgotCSAgQ2xlYW51cCBjYXBzbmVnby4KLQkgIFNldCBjYXBzIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0KLTIwMDYtMTAtMTggMTc6MDY6MjEgKzAwMDAgIFZpbGxlIFN5cmphbGEgPHZpbGxlLnN5cmphbGFAbW92aWFsLmZpPgotCi0JICBnc3QvcnRwLzogQWRkIHN0YXRpYyBwYXlsb2FkIG51bWJlcnMgaW4gYWRkaXRpb24gdG8gdGhlIGR5bmFtaWMgb25lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFZpbGxlIFN5cmphbGEgPHZpbGxlIGRvdCBzeXJqYWxhIGF0IG1vdmlhbCBkb3QgZmk+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuYzogKGdzdF9ydHBfcGNtYV9wYXlfZmx1c2gpLAotCSAgKGdzdF9ydHBfcGNtYV9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOiAoZ3N0X3J0cF9wY211X3BheV9mbHVzaCk6Ci0JICBBZGQgc3RhdGljIHBheWxvYWQgbnVtYmVycyBpbiBhZGRpdGlvbiB0byB0aGUgZHluYW1pYyBvbmVzLgotCSAgRml4ZXMgIzM2MTYzOS4KLQotMjAwNi0xMC0xOCAxNjoxODo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvOiBSZXVzZSBhbHJlYWR5IGV4aXN0aW5nIGVudW0gZm9yIGxvd2VyIHRyYW5zcG9ydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcF9sb3dlcl90cmFuc19nZXRfdHlwZSksCi0JICAoZ3N0X3J0c3BzcmNfY2xhc3NfaW5pdCksIChnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkKSwKLQkgIChnc3RfcnRzcHNyY19sb29wX3VkcCksIChnc3RfcnRzcHNyY19vcGVuKSwKLQkgIChnc3RfcnRzcHNyY191cmlfZ2V0X3Byb3RvY29scyksIChnc3RfcnRzcHNyY191cmlfc2V0X3VyaSk6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fY3JlYXRlKToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcHVybC5jOiAocnRzcF91cmxfcGFyc2UpOgotCSAgKiBnc3QvcnRzcC9ydHNwdXJsLmg6Ci0JICBSZXVzZSBhbHJlYWR5IGV4aXN0aW5nIGVudW0gZm9yIGxvd2VyIHRyYW5zcG9ydC4KLQkgIEFkZCBydHNwdCBhbmQgcnRzcHUgcHJvdG9jb2xzLgotCSAgU2VuZCByZWRpcmVjdCB0byBydHNwdCB3aGVuIHVkcCB0aW1lcyBvdXQuCi0KLTIwMDYtMTAtMTggMTQ6MDA6NDQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBGaXggc2Vla2luZyBzb21lIG1vcmUsIG1vc3RseSBmb3Igc3BlZWQgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSk6Ci0JICBGaXggc2Vla2luZyBzb21lIG1vcmUsIG1vc3RseSBmb3Igc3BlZWQgY2hhbmdlcy4KLQotMjAwNi0xMC0xOCAxMToyODowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGZpeCBGcmVkcmlrJ3MgZS1tYWlsIGFkZHJlc3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IGZpeCBGcmVkcmlrJ3MgZS1tYWlsIGFkZHJlc3MKLQotMjAwNi0xMC0xOCAxMTowNDowOSArMDAwMCAgRnJlZHJpayBQZXJzc29uIDxmcmVwZUBicm9hZGJhbmQubmV0PgotCi0JICBzeXMvdjRsMi9nc3R2NGwydHVuZXIuKjogRml4IF9zZXRfY2hhbm5lbCgpOiByZW1vdmUgdXNlbGVzcyBnX29iamVjdF9ub3RpZnkoKSBmb3IgImNoYW5uZWwiIHByb3BlcnR5IHRoYXQgZG9lc24ndCBleGkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEZyZWRyaWsgUGVyc3NvbiAgPGZyZXBlIGF0IGJyb2FkYmFuZCBuZXQ+Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkgIEZpeCBfc2V0X2NoYW5uZWwoKTogcmVtb3ZlIHVzZWxlc3MgZ19vYmplY3Rfbm90aWZ5KCkgZm9yICJjaGFubmVsIgotCSAgcHJvcGVydHkgdGhhdCBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIgYW5kIHRoZXJlZm9yZSBub3cgYWxzbwotCSAgdXNlbGVzcyByZWRpcmVjdCAoIzMzODgxOCkuCi0KLTIwMDYtMTAtMTcgMTU6MTY6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIGFkZGluZyB0aGVtIHRvIHJ1bm5pbmcgZWxlbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6IChnc3Rfd2F2cGFja19lbmNfc2V0X3dwX2NvbmZpZyk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NyZWF0ZV9zcmNfcGFkKToKLQkgICogZ3N0L251dmRlbXV4L2dzdG51dmRlbXV4LmM6IChnc3RfbnV2X2RlbXV4X2NyZWF0ZV9wYWRzKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja3BhcnNlLmM6ICh3YXZwYWNrcGFyc2VfZm91bmRfcGFkKToKLQkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIGFkZGluZyB0aGVtIHRvIHJ1bm5pbmcgZWxlbWVudC4KLQotMjAwNi0xMC0xNyAxNDo1NzoxNyArMDAwMCAgSm9zZXAgVG9ycmEgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBNYWtlIGNvbXBpbGUgd2l0aCBGb3J0ZSBjb21waWxlciwgbW9zdGx5IGRvbid0IGRvIHBvaW50ZXIgYXJpdGhtZXRpYyB3aXRoIHZvaWQgcG9pbnRlcnMgKCMzNjI2Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKb3NlcCBUb3JyYSBWYWxsZXMgIDxqb3NlcCBhdCBmbHVlbmRvIGNvbT4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpLAotCSAgKG5leHRfZW50cnlfc2l6ZSksIChxdGRlbXV4X2luZmxhdGUpLCAocXRkZW11eF9wYXJzZV9tb292KSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyZWUpLCAocXRkZW11eF9wYXJzZV90cmFrKSwgKHF0ZGVtdXhfdGFnX2FkZF9zdHIpLAotCSAgKHF0ZGVtdXhfdGFnX2FkZF9udW0pLCAocXRkZW11eF90YWdfYWRkX2RhdGUpLAotCSAgKHF0ZGVtdXhfdGFnX2FkZF9nbnJlKToKLQkgIE1ha2UgY29tcGlsZSB3aXRoIEZvcnRlIGNvbXBpbGVyLCBtb3N0bHkgZG9uJ3QgZG8gcG9pbnRlciBhcml0aG1ldGljCi0JICB3aXRoIHZvaWQgcG9pbnRlcnMgKCMzNjI2MjYpLgotCi0yMDA2LTEwLTE3IDE0OjM3OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvb3NzL2dzdG9zc3NpbmsuYzogU29tZSBkcml2ZXJzIGRvIG5vdCBzdXBwb3J0IHVuc2V0dGluZyB0aGUgbm9uLWJsb2NraW5nIGZsYWcgb25jZSB0aGUgZGV2aWNlIGlzIG9wZW5lZC4gSW4gdGhvc2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3Nfc2lua19wcmVwYXJlKToKLQkgIFNvbWUgZHJpdmVycyBkbyBub3Qgc3VwcG9ydCB1bnNldHRpbmcgdGhlIG5vbi1ibG9ja2luZyBmbGFnIG9uY2UgdGhlCi0JICBkZXZpY2UgaXMgb3BlbmVkLiBJbiB0aG9zZSBjYXNlcywgY2xvc2Uvb3BlbiB0aGUgZGV2aWNlIGluCi0JICBub24tYmxvY2tpbmcgbW9kZS4gRml4ZXMgIzM2MjY3My4KLQotMjAwNi0xMC0xNyAxMzo0NDoxNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBzeXMvdjRsMi86IGRlYXIgc3RlZmFuLCBmcmFtZXNwZXJzZWNvbmQgaXMgbm90IGZyYW1lcGVyaW9kLCByZXZlcnRpbmcgYnV0IGFkZGluZyBjb21tZW50Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZmlsbF9saXN0cyk6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX3NldF9mcHMpLAotCSAgKGdzdF92NGwyc3JjX2dldF9mcHMpOgotCSAgZGVhciBzdGVmYW4sIGZyYW1lc3BlcnNlY29uZCBpcyBub3QgZnJhbWVwZXJpb2QsIHJldmVydGluZyBidXQgYWRkaW5nCi0JICBjb21tZW50Ci0KLTIwMDYtMTAtMTcgMTE6Mjg6NTAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgc3lzL3Y0bDIvOiBOdW1lcmF0b3IgaXMgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpcyBkZW5vbWluYXRvci4gU2F5IHRoYXQgYWxvdWQgNSB0aW1lcyBhbmQgcmV0cnkgYWZ0ZXIgbmV4dCBiZWVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX2ZpbGxfbGlzdHMpOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19zZXRfZnBzKSwKLQkgIChnc3RfdjRsMnNyY19nZXRfZnBzKToKLQkgIE51bWVyYXRvciBpcyBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGlzIGRlbm9taW5hdG9yLiBTYXkgdGhhdCBhbG91ZAotCSAgNSB0aW1lcyBhbmQgcmV0cnkgYWZ0ZXIgbmV4dCBiZWVyLgotCi0yMDA2LTEwLTE3IDEwOjU5OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4Lio6IEF2b2lkIHZvaWQgcG9pbnRlciB1c2FnZSwgYmV0dGVyIHVzZSBndWludDggKiBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2VfbW9vdiksIChxdGRlbXV4X3BhcnNlKSwKLQkgIChxdGRlbXV4X25vZGVfZHVtcF9mb3JlYWNoKSwgKHF0ZGVtdXhfZHVtcF9tdmhkKSwKLQkgIChxdGRlbXV4X2R1bXBfdGtoZCksIChxdGRlbXV4X2R1bXBfZWxzdCksIChxdGRlbXV4X2R1bXBfbWRoZCksCi0JICAocXRkZW11eF9kdW1wX2hkbHIpLCAocXRkZW11eF9kdW1wX3ZtaGQpLCAocXRkZW11eF9kdW1wX2RyZWYpLAotCSAgKHF0ZGVtdXhfZHVtcF9zdHNkKSwgKHF0ZGVtdXhfZHVtcF9zdHRzKSwgKHF0ZGVtdXhfZHVtcF9zdHNzKSwKLQkgIChxdGRlbXV4X2R1bXBfc3RzYyksIChxdGRlbXV4X2R1bXBfc3RzeiksIChxdGRlbXV4X2R1bXBfc3RjbyksCi0JICAocXRkZW11eF9kdW1wX2NvNjQpLCAocXRkZW11eF9kdW1wX2Rjb20pLCAocXRkZW11eF9kdW1wX2NtdmQpLAotCSAgKHF0ZGVtdXhfZHVtcF91bmtub3duKSwgKHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSksCi0JICAocXRkZW11eF90cmVlX2dldF9zaWJsaW5nX2J5X3R5cGUpOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBBdm9pZCB2b2lkIHBvaW50ZXIgdXNhZ2UsIGJldHRlciB1c2UgZ3VpbnQ4ICogaW5zdGVhZC4KLQotMjAwNi0xMC0xNiAxODoyMjo0NyArMDAwMCAgSm9zZXAgVG9ycmEgVmFsbGVzIDxqb3NlcEBmbHVlbmRvLmNvbT4KLQotCSAgRml4IGEgYnVuY2ggb2YgcHJvYmxlbXMgZGlzY292ZXJlZCBieSB0aGUgRm9ydGUgY29tcGlsZXIsIG1vc3RseSB0eXBlIG1peHVwcyBhbmQgcG9pbnRlciBhcml0aG1ldGljcyB3aXRoIHZvaWQgcG9pbnRlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKb3NlcCBUb3JyYSBWYWxsZXMgIDxqb3NlcCBhdCBmbHVlbmRvIGNvbT4KLQkgICogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5LmM6IChnc3RfY2Fpcm9fdGltZV9vdmVybGF5X3RyYW5zZm9ybSk6Ci0JICAqIGV4dC9lc2QvZXNkc2luay5jOiAoZ3N0X2VzZHNpbmtfd3JpdGUpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfbGVuZ3RoKSwKLQkgIChnc3RfZmxhY19kZWNfcmVhZF9zZWVrYWJsZSksIChnc3RfZmxhY19kZWNfY2hhaW4pLAotCSAgKGdzdF9mbGFjX2RlY19zZW5kX25ld3NlZ21lbnQpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY19lbmNfc2Vla19jYWxsYmFjayksCi0JICAoZ3N0X2ZsYWNfZW5jX3RlbGxfY2FsbGJhY2spOgotCSAgKiBleHQvanBlZy9zbW9rZWNvZGVjLmM6IChmaW5kX2Jlc3Rfc2l6ZSksIChzbW9rZWNvZGVjX2VuY29kZSksCi0JICAoc21va2Vjb2RlY19wYXJzZV9oZWFkZXIpLCAoc21va2Vjb2RlY19kZWNvZGUpOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aV9tdXhfd3JpdGVfYXZpeF9pbmRleCk6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuYzogKGdzdF9mZW5jZWRfYnVmZmVyX2FsbG9jKToKLQkgICogZ3N0L2dvb20vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6IChnc3RfaWN5ZGVtdXhfdHlwZWZpbmRfb3JfZm9yd2FyZCk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9yZWFkKToKLQkgICogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suaDoKLQkgIEZpeCBhIGJ1bmNoIG9mIHByb2JsZW1zIGRpc2NvdmVyZWQgYnkgdGhlIEZvcnRlIGNvbXBpbGVyLCBtb3N0bHkgdHlwZQotCSAgbWl4dXBzIGFuZCBwb2ludGVyIGFyaXRobWV0aWNzIHdpdGggdm9pZCBwb2ludGVycy4gRml4ZXMgIzM2MjYwMy4KLQotMjAwNi0xMC0xMiAxOTowMjo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3NwZWV4LzogTWlzY2VsbGFuZW91cyBjbGVhbi11cHMsIGFtb25nIG90aGVyIHRoaW5nczogc3BlZXhlbmMgPT4gZW5jIHRvIGVuaGFuY2UgY29kZSByZWFkYWJpbGl0eTsgY2hhbmdlIHNwZWV4ZW5jLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4LmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4X2VuY19nZXRfZm9ybWF0cyksCi0JICAoZ3N0X3NwZWV4X2VuY19zZXR1cF9pbnRlcmZhY2VzKSwgKGdzdF9zcGVleF9lbmNfYmFzZV9pbml0KSwKLQkgIChnc3Rfc3BlZXhfZW5jX2NsYXNzX2luaXQpLCAoZ3N0X3NwZWV4X2VuY19maW5hbGl6ZSksCi0JICAoZ3N0X3NwZWV4X2VuY19zaW5rX3NldGNhcHMpLCAoZ3N0X3NwZWV4X2VuY19jb252ZXJ0X3NyYyksCi0JICAoZ3N0X3NwZWV4X2VuY19jb252ZXJ0X3NpbmspLCAoZ3N0X3NwZWV4X2VuY19nZXRfcXVlcnlfdHlwZXMpLAotCSAgKGdzdF9zcGVleF9lbmNfc3JjX3F1ZXJ5KSwgKGdzdF9zcGVleF9lbmNfc2lua19xdWVyeSksCi0JICAoZ3N0X3NwZWV4X2VuY19pbml0KSwgKGdzdF9zcGVleF9lbmNfY3JlYXRlX21ldGFkYXRhX2J1ZmZlciksCi0JICAoZ3N0X3NwZWV4X2VuY19zZXRfbGFzdF9tc2cpLCAoZ3N0X3NwZWV4X2VuY19zZXR1cCksCi0JICAoZ3N0X3NwZWV4X2VuY19idWZmZXJfZnJvbV9kYXRhKSwgKGdzdF9zcGVleF9lbmNfcHVzaF9idWZmZXIpLAotCSAgKGdzdF9zcGVleF9lbmNfc2V0X2hlYWRlcl9vbl9jYXBzKSwgKGdzdF9zcGVleF9lbmNfc2lua2V2ZW50KSwKLQkgIChnc3Rfc3BlZXhfZW5jX2NoYWluKSwgKGdzdF9zcGVleF9lbmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc3BlZXhfZW5jX3NldF9wcm9wZXJ0eSksIChnc3Rfc3BlZXhfZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgTWlzY2VsbGFuZW91cyBjbGVhbi11cHMsIGFtb25nIG90aGVyIHRoaW5nczogc3BlZXhlbmMgPT4gZW5jIHRvCi0JICBlbmhhbmNlIGNvZGUgcmVhZGFiaWxpdHk7IGNoYW5nZSBzcGVleGVuYyA9PiBzcGVleF9lbmM7IGluIGNoYWluCi0JICBmdW5jdGlvbiB1bnJlZiBpbnB1dCBidWZmZXIgaW4gY2FzZSBvZiBlcnJvcjsgdGFrZSByZWZlcmVuY2UgaW4KLQkgIGV2ZW50IGZ1bmN0aW9uOyB1c2UgYm9pbGVycGxhdGUgbWFjcm87IHVzZSBnc3RfcGFkX3F1ZXJ5X3BlZXJfKgotCSAgY29udmVuaWVuY2UgZnVuY3Rpb25zLgotCi0yMDA2LTEwLTEyIDE4OjM1OjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogRml4IHNvbWUgbWVtIGxlYWtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2ZpbmFsaXplKSwKLQkgIChnc3Rfc3BlZXhlbmNfc2V0X2xhc3RfbXNnKSwgKGdzdF9zcGVleGVuY19zZXR1cCksCi0JICAoZ3N0X3NwZWV4ZW5jX3NldF9oZWFkZXJfb25fY2Fwcyk6Ci0JICBGaXggc29tZSBtZW0gbGVha3MuCi0KLTIwMDYtMTAtMTEgMTY6MjE6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL1VSTFM6IEFkZGVkIHNvbWUgb3RoZXIgVVJMLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL1VSTFM6Ci0JICBBZGRlZCBzb21lIG90aGVyIFVSTC4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfbG9vcF91ZHApLAotCSAgKGdzdF9ydHNwc3JjX2hhbmRsZV9yZXF1ZXN0KSwgKGdzdF9ydHNwc3JjX3NlbmQpLAotCSAgKGdzdF9ydHNwc3JjX29wZW4pLCAoZ3N0X3J0c3BzcmNfcGxheSksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpLCAoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgV29yayBvbiBmYWxsYmFjayB0byBUQ1AgY29ubmVjdGlvbiB3aGVuIHRoZSBVRFAgc29ja2V0IHRpbWVzIG91dC4KLQkgIEhhbmRsZXIgc2VydmVyIHJlcXVlc3RzLCBqdXN0IHJlcGx5IHdpdGggT0sgZm9yIG5vdy4KLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuYzogKHJ0c3Bfc3RycmVzdWx0KToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgIEFkZGVkIHNvbWUgbW9yZSBSZWFsIGV4dGVuc2lvbiBoZWFkZXJzLgotCSAgKiBnc3QvcnRzcC9ydHNwdXJsLmM6IChydHNwX3VybF9wYXJzZSk6Ci0JICBGaXggcGFyc2luZyBvZiB1cmxzIHdpdGggYSAnOicgdGhhdCBpcyBub3QgcGFydCBvZiB0aGUgaG9zdG5hbWU6cG9ydAotCSAgcGFydCBvZiB0aGUgdXJsLgotCi0yMDA2LTEwLTExIDEzOjQ5OjI2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBzb21lIGZvdXJjYyBmb3IgRFYgZm9ybWF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICBBZGQgc29tZSBmb3VyY2MgZm9yIERWIGZvcm1hdC4KLQotMjAwNi0xMC0xMSAxMzoyNDo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogQWN0aXZhdGUgcGFkIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGFscmVhZHktcnVubmluZyBlbGVtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0dGFnZGVtdXguYzogKGdzdF90YWdfZGVtdXhfYWRkX3NyY3BhZCk6Ci0JICAqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOiAoZ3N0X2ljeWRlbXV4X2FkZF9zcmNwYWQpOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9hZGRfc3JjcGFkKToKLQkgIEFjdGl2YXRlIHBhZCBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBhbHJlYWR5LXJ1bm5pbmcgZWxlbWVudC4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWN5ZGVtdXguYzogKGljeWRlbXV4X2ZvdW5kX3BhZCk6Ci0JICBBY3RpdmF0ZSBuZXdseS1jcmVhdGVkIHBhZCB0b28uCi0KLTIwMDYtMTAtMTEgMDg6MzQ6MTQgKzAwMDAgIFNlYmFzdGllbiBDb3RlIDxzZWJhczY0MkB5YWhvby5jYT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogRml4IHNvbWUgbGVha3MgaW4gY2FwcyBhbmQgdXJpcy4gRml4ZXMgIzM2MTI1Mi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGllbiBDb3RlIDxzZWJhczY0MiBhdCB5YWhvbyBkb3QgY2E+Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF91ZHBzcmNfZmluYWxpemUpLCAoZ3N0X3VkcHNyY19jcmVhdGUpLCAoZ3N0X3VkcHNyY19zZXRfdXJpKSwKLQkgIChnc3RfdWRwc3JjX3N0YXJ0KToKLQkgIEZpeCBzb21lIGxlYWtzIGluIGNhcHMgYW5kIHVyaXMuIEZpeGVzICMzNjEyNTIuCi0KLTIwMDYtMTAtMTAgMTg6NTQ6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUHJpbnRmIGZvcm1hdCBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChleHRyYWN0X2luaXRpYWxfbGVuZ3RoX2FuZF9mb3VyY2MpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfaGVhZGVyKToKLQkgIFByaW50ZiBmb3JtYXQgZml4ZXMuCi0JICAqIHN5cy9kdmIvZ3N0ZHZic3JjLmM6Ci0JICBVc2UgIl9zdGRpbnQuaCIuCi0KLTIwMDYtMTAtMTAgMDk6NTc6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUmVvcmdhbmlzZSBzb21lIHN0dWZmLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2luaXQpLAotCSAgKGdzdF9xdGRlbXV4X3B1c2hfZXZlbnQpLCAoZ3N0X3F0ZGVtdXhfZG9fc2VlayksCi0JICAoZ3N0X3F0ZGVtdXhfY2hhbmdlX3N0YXRlKSwgKGV4dHJhY3RfaW5pdGlhbF9sZW5ndGhfYW5kX2ZvdXJjYyksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIpLCAoZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSksIChnc3RfcXRkZW11eF9sb29wKSwKLQkgIChnc3RfcXRkZW11eF9wb3N0X2J1ZmZlcmluZyksIChnc3RfcXRkZW11eF9jaGFpbiksCi0JICAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksIChxdGRlbXV4X3Byb2Nlc3NfcmVkaXJlY3RzKSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyZWUpLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFJlb3JnYW5pc2Ugc29tZSBzdHVmZi4KLQkgIFBhcnNlIFJUU1AgcmVkaXJlY3Rpb24gVVJMUy4KLQotMjAwNi0xMC0xMCAwODoyOTowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL01ha2VmaWxlLmFtOiBGaXggY29weSduJ3Bhc3RlLW8gKHNwb3R0ZWQgYnkgTWFyayBOYXV3ZWxhZXJ0cywgIzM0MTQ4OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL01ha2VmaWxlLmFtOgotCSAgRml4IGNvcHknbidwYXN0ZS1vIChzcG90dGVkIGJ5IE1hcmsgTmF1d2VsYWVydHMsICMzNDE0ODkpLgotCi0yMDA2LTEwLTA5IDA3OjAxOjE5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5Lio6IEZpeCBidWlsZCBhcyBwZXIgdGhlIHBhdGNoIGluICMzMzg4MTggY29tbWVudCAzNi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5Lmg6Ci0JICBGaXggYnVpbGQgYXMgcGVyIHRoZSBwYXRjaCBpbiAjMzM4ODE4IGNvbW1lbnQgMzYuCi0KLTIwMDYtMTAtMDggMjA6MDU6MTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkgIGluc3BlY3QgdXBkYXRlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpbnNwZWN0IHVwZGF0ZXMKLQotMjAwNi0xMC0wNyAyMToxNTo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBBY3RpdmF0ZSBwYWRzIGJlZm9yZSBhZGRpbmcgdGhlbSB0byB0aGUgc291cmNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KToKLQkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIGFkZGluZyB0aGVtIHRvIHRoZSBzb3VyY2UuCi0KLTIwMDYtMTAtMDcgMTE6Mzc6NTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGRvY3MvcGx1Z2lucy86IEFkZC91cGRhdGUgZG9jcyBzdHVmZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmludGVyZmFjZXM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRzZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1tcy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tcGVnMmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uZW9uLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJlcGxheWdhaW4ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291bmR0b3VjaC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGNkZWMueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3dmZGVjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYWNrLnhtbDoKLQkgIEFkZC91cGRhdGUgZG9jcyBzdHVmZi4KLQotMjAwNi0xMC0wNiAxNzowMDoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgQWN0aXZhdGUgcGFkcyBiZWZvcmUgYWRkaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9hZGRfcGFkcyksIChnc3RfZHZkZW11eF9jaGFpbik6Ci0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzogKGdzdF9hdV9wYXJzZV9hZGRfc3JjcGFkKToKLQkgIEFjdGl2YXRlIHBhZHMgYmVmb3JlIGFkZGluZy4KLQotMjAwNi0xMC0wNiAxNjowMzoyMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiBBY3RpdmF0ZSBwYWRzIGJlZm9yZSBhZGRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiAoZ3N0X211bHRpcGFydF9kZW11eF9pbml0KSwKLQkgIChnc3RfbXVsdGlwYXJ0X2ZpbmRfcGFkX2J5X21pbWUpOgotCSAgQWN0aXZhdGUgcGFkcyBiZWZvcmUgYWRkaW5nLgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOiAoZ3N0X3J0cF9tcDR2X2RlcGF5X2NsYXNzX2luaXQpOgotCSAgQk9JTEVSUExBVEUgc2V0cyBwYXJlbnRfY2xhc3MgZm9yIHVzLgotCi0yMDA2LTEwLTA2IDE1OjU2OjAxICswMDAwICBSZW7DqSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotCi0JICBBZGQgUmVwbGF5R2FpbiBhbmFseXNpcyBlbGVtZW50ICgjMzU3MDY5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFJlbsOpIFN0YWRsZXIgIDxtYWlsIGF0IHJlbmVzdGFkbGVyIGRlPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuYzogKGdzdF9yZ19hbmFseXNpc19iYXNlX2luaXQpLAotCSAgKGdzdF9yZ19hbmFseXNpc19jbGFzc19pbml0KSwgKGdzdF9yZ19hbmFseXNpc19pbml0KSwKLQkgIChnc3RfcmdfYW5hbHlzaXNfc2V0X3Byb3BlcnR5KSwgKGdzdF9yZ19hbmFseXNpc19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9yZ19hbmFseXNpc19zdGFydCksIChnc3RfcmdfYW5hbHlzaXNfc2V0X2NhcHMpLAotCSAgKGdzdF9yZ19hbmFseXNpc190cmFuc2Zvcm1faXApLCAoZ3N0X3JnX2FuYWx5c2lzX2V2ZW50KSwKLQkgIChnc3RfcmdfYW5hbHlzaXNfc3RvcCksIChnc3RfcmdfYW5hbHlzaXNfaGFuZGxlX3RhZ3MpLAotCSAgKGdzdF9yZ19hbmFseXNpc19oYW5kbGVfZW9zKSwgKGdzdF9yZ19hbmFseXNpc190cmFja19yZXN1bHQpLAotCSAgKGdzdF9yZ19hbmFseXNpc19hbGJ1bV9yZXN1bHQpLCAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmg6Ci0JICAqIGdzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYzogKHl1bGVfZmlsdGVyKSwgKGJ1dHRlcl9maWx0ZXIpLAotCSAgKGFwcGx5X2ZpbHRlcnMpLCAocmVzZXRfZmlsdGVycyksIChhY2N1bXVsYXRvcl9hZGQpLAotCSAgKGFjY3VtdWxhdG9yX2NsZWFyKSwgKGFjY3VtdWxhdG9yX3Jlc3VsdCksIChyZ19hbmFseXNpc19uZXcpLAotCSAgKHJnX2FuYWx5c2lzX3NldF9zYW1wbGVfcmF0ZSksIChyZ19hbmFseXNpc19kZXN0cm95KSwKLQkgIChyZ19hbmFseXNpc19hbmFseXplX21vbm9fZmxvYXQpLAotCSAgKHJnX2FuYWx5c2lzX2FuYWx5emVfc3RlcmVvX2Zsb2F0KSwKLQkgIChyZ19hbmFseXNpc19hbmFseXplX21vbm9faW50MTYpLAotCSAgKHJnX2FuYWx5c2lzX2FuYWx5emVfc3RlcmVvX2ludDE2KSwgKHJnX2FuYWx5c2lzX2FuYWx5emUpLAotCSAgKHJnX2FuYWx5c2lzX3RyYWNrX3Jlc3VsdCksIChyZ19hbmFseXNpc19hbGJ1bV9yZXN1bHQpLAotCSAgKHJnX2FuYWx5c2lzX3Jlc2V0X2FsYnVtKSwgKHJnX2FuYWx5c2lzX3Jlc2V0KToKLQkgICogZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5oOgotCSAgQWRkIFJlcGxheUdhaW4gYW5hbHlzaXMgZWxlbWVudCAoIzM1NzA2OSkuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmM6IChnZXRfZXhwZWN0ZWRfZ2FpbiksCi0JICAoc2V0dXBfcmdhbmFseXNpcyksIChjbGVhbnVwX3JnYW5hbHlzaXMpLCAoc2V0X3BsYXlpbmdfc3RhdGUpLAotCSAgKHNlbmRfZW9zX2V2ZW50KSwgKHNlbmRfdGFnX2V2ZW50KSwgKHBvbGxfZW9zKSwgKHBvbGxfdGFncyksCi0JICAoZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiksIChmYWlsX3VubGVzc190cmFja19wZWFrKSwKLQkgIChmYWlsX3VubGVzc19hbGJ1bV9nYWluKSwgKGZhaWxfdW5sZXNzX2FsYnVtX3BlYWspLAotCSAgKGZhaWxfaWZfdHJhY2tfdGFncyksIChmYWlsX2lmX2FsYnVtX3RhZ3MpLAotCSAgKGZhaWxfdW5sZXNzX251bV90cmFja3MpLCAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfbW9ubyksCi0JICAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvKSwgKHRlc3RfYnVmZmVyX2NvbnN0X2ludDE2X21vbm8pLAotCSAgKHRlc3RfYnVmZmVyX2NvbnN0X2ludDE2X3N0ZXJlbyksICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfbW9ubyksCi0JICAodGVzdF9idWZmZXJfc3F1YXJlX2Zsb2F0X3N0ZXJlbyksICh0ZXN0X2J1ZmZlcl9zcXVhcmVfaW50MTZfbW9ubyksCi0JICAodGVzdF9idWZmZXJfc3F1YXJlX2ludDE2X3N0ZXJlbyksIChwdXNoX2J1ZmZlciksIChHU1RfU1RBUlRfVEVTVCksCi0JICAocmdhbmFseXNpc19zdWl0ZSksIChtYWluKToKLQkgIFVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgcmVwbGF5Z2FpbiBlbGVtZW50LgotCi0yMDA2LTEwLTA2IDE1OjQ5OjM5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvZmFhZC9nc3RmYWFkLmM6IFNvbWUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfc2V0Y2FwcyksIChnc3RfZmFhZF9jaGFpbiksCi0JICAoZ3N0X2ZhYWRfY2xvc2VfZGVjb2Rlcik6Ci0JICBTb21lIGNsZWFudXBzLgotCSAgQWRkZWQgc29tZSBtb3JlIGRlYnVnZ2luZy4KLQkgIERvbid0IGV2ZXIgaWdub3JlIHVubGlua2VkLCB3ZSdyZSBub3QgYSBkZW11eGVyLgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9hZGRfc3RyZWFtKToKLQkgIEFjdGl2YXRlIHBhZCBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBlbGVtZW50LgotCi0yMDA2LTEwLTA2IDEyOjU1OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IFJld29yayBob3cgdGhlIHRyYW5zcG9ydCBzdHJpbmcgaXMgY29uc3RydWN0ZWQsIHRyeSB0byBzaGFyZSBjaGFubmVscyBhbmQgdWRwIHBvcnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwX3Byb3RvX2dldF90eXBlKSwKLQkgIChnc3RfcnRzcHNyY19jbGFzc19pbml0KSwgKGdzdF9ydHNwc3JjX2luaXQpLAotCSAgKGdzdF9ydHNwc3JjX2NyZWF0ZV9zdHJlYW0pLCAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAoZ3N0X3J0c3BzcmNfYWxsb2NfdWRwX3BvcnRzKSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksIChmaW5kX3N0cmVhbV9ieV9jaGFubmVsKSwKLQkgIChnc3RfcnRzcHNyY19wdXNoX2V2ZW50KSwgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLAotCSAgKGdzdF9ydHNwc3JjX2NyZWF0ZV90cmFuc3BvcnRzX3N0cmluZyksCi0JICAoZ3N0X3J0c3BzcmNfY29uZmlndXJlX3RyYW5zcG9ydHMpLCAoZ3N0X3J0c3BzcmNfb3BlbiksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpLCAoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgUmV3b3JrIGhvdyB0aGUgdHJhbnNwb3J0IHN0cmluZyBpcyBjb25zdHJ1Y3RlZCwgdHJ5IHRvIHNoYXJlIGNoYW5uZWxzCi0JICBhbmQgdWRwIHBvcnRzLgotCSAgTWFrZSBtb3N0IG9mIHRoZSBzdHVmZiBsZXNzIGRlcGVuZGFudCBvbiBSVFAgYXMgd2UgYXJlIGFsc28gZ29pbmcgdG8gdXNlCi0JICBpdCBmb3IgUkRULgotCSAgQWRkIHN1cHBvcnQgZm9yIHRyYW5zcG9ydCBzcGVjaWZpYyBzZXNzaW9uIG1hbmFnZXJzLgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX2ZsdXNoKToKLQkgIEltcGxlbWVudCBfZmx1c2goKS4KLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuYzogKHJ0c3Bfc3RycmVzdWx0KToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgIEFkZCBnZW5lcmljIGVycm9yIHJldHVybiBjb2RlLgotCSAgKiBnc3QvcnRzcC9ydHNwZXh0Lmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgcGx1Z2dhYmxlIHRyYW5wb3J0IHN0cmluZ3MuCi0JICAqIGdzdC9ydHNwL3J0c3BleHR3bXMuYzogKHJ0c3BfZXh0X3dtc19iZWZvcmVfc2VuZCksCi0JICAocnRzcF9leHRfd21zX2FmdGVyX3NlbmQpLCAocnRzcF9leHRfd21zX3BhcnNlX3NkcCksCi0JICAocnRzcF9leHRfd21zX2dldF9jb250ZXh0KToKLQkgIERldGVjdCBXTVNlcnZlciBhbmQgYWN0aXZhdGUgdGhlIGV4dGVuc2lvbi4KLQkgICogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5jOiAocnRzcF90cmFuc3BvcnRfZ2V0X21pbWUpLAotCSAgKHJ0c3BfdHJhbnNwb3J0X2dldF9tYW5hZ2VyKSwgKHJ0c3BfdHJhbnNwb3J0X3BhcnNlKToKLQkgICogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5oOgotCSAgQWRkZWQgbWV0aG9kcyB0byBnZXQgbWltZS9tYW5hZ2VyIGZvciBjZXJ0YWluIHRyYW5zcG9ydHMuCi0KLTIwMDYtMTAtMDYgMTE6MzE6MTEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiBGaXggbWVtIGxlYWssIGF2b2lkIHVubmVjZXNzYXJ5IG1lbWNweS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgRml4IG1lbSBsZWFrLCBhdm9pZCB1bm5lY2Vzc2FyeSBtZW1jcHkuCi0KLTIwMDYtMTAtMDYgMDI6Mjk6MzUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IFJlbW92ZWQgY3J1ZnQgY29kZSB0aGF0IHdhcyBqdXN0IGNvbW1lbnRlZCBvdXQuIFJlbW92ZWQgc29tZSBvYnNvbGV0ZSBkZWJ1ZyBsb2dzIHN0YXRlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1faW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX3RyYW5zZm9ybV9pcCk6Ci0JICBSZW1vdmVkIGNydWZ0IGNvZGUgdGhhdCB3YXMganVzdCBjb21tZW50ZWQgb3V0LiBSZW1vdmVkIHNvbWUgb2Jzb2xldGUKLQkgIGRlYnVnIGxvZ3Mgc3RhdGVtZW50cy4KLQotMjAwNi0xMC0wNSAxODoxNDo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQW5vdGhlciBiYXRjaCBvZiBwcmludGYgZm9ybWF0IGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdHMvZ3N0ZHRzZGVjLmM6IChnc3RfZHRzZGVjX2NoYWluKToKLQkgICogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOiAoZ3N0X3RybV9zZXRjYXBzKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX3Npbmtfc2V0X2NhcHMpOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFpbiksIChxdGRlbXV4X3BhcnNlKSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogKGdzdF9zcGVjdHJ1bV90cmFuc2Zvcm1faXApOgotCSAgQW5vdGhlciBiYXRjaCBvZiBwcmludGYgZm9ybWF0IGZpeGVzLgotCi0yMDA2LTEwLTA1IDE2OjM3OjMzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBQcmludGYgZm9ybWF0IGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5jOgotCSAgKGdzdF9jYWlyb190aW1lX292ZXJsYXlfdXBkYXRlX2ZvbnRfaGVpZ2h0KToKLQkgICogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzogKGdzdF9waXhidWZzY2FsZV90cmFuc2Zvcm1fY2Fwcyk6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19wYXJzZV9pbWFnZV9kYXRhKToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAoZ3N0X2pwZWdlbmNfY2hhaW4pOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOiAoZ3N0X3Ntb2tlZGVjX2NoYWluKToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzogKGdzdF9zbW9rZWVuY19jaGFpbik6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6ICh1c2VyX2VuZHJvd19jYWxsYmFjayk6Ci0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzogKGdzdF9hdV9wYXJzZV9wYXJzZV9oZWFkZXIpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1cGVyaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOiAoZ3N0X2N1dHRlcl9jaGFpbik6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuYzogKGdzdF9lZmVuY2VfYnVmZmVyX2FsbG9jKSwKLQkgIChnc3RfZmVuY2VkX2J1ZmZlcl9jb3B5KToKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDNkZW11eF9pZDN2Ml9wYXJzZV9mcmFtZSk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyk6Ci0JICAqIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOiAoeGltYWdldXRpbF94Y29udGV4dF9nZXQpOgotCSAgUHJpbnRmIGZvcm1hdCBmaXhlcy4KLQotMjAwNi0xMC0wNCAyMjozNzowNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuKjogSGFuZGxlIHBhY2tlZCBZVVYgZm9ybWF0cyAoVVlWWSwgWVVZMiwgWVVZVikgc2VwYXJhdGVseTsgYWxzbywgZml4IHBhc3N0aHJvdWdoIG1vZGU7IGxhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzogKGdzdF92aWRlb19jcm9wX2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb19jcm9wX2luaXQpLAotCSAgKGdzdF92aWRlb19jcm9wX2dldF9pbWFnZV9kZXRhaWxzX2Zyb21fY2FwcyksCi0JICAoZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX3BhY2tlZF9jb21wbGV4KSwKLQkgIChnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fcGFja2VkX3NpbXBsZSksCi0JICAoZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtKSwgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9jYXBzKSwKLQkgIChnc3RfdmlkZW9fY3JvcF9zZXRfY2FwcyksCi0JICAoZ3N0X3ZpZGVvY3JvcF9jbGVhcl9uZWdvdGlhdGVkX2NhcHNfbG9ja2VkKSwKLQkgIChnc3RfdmlkZW9fY3JvcF9zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5oOgotCSAgSGFuZGxlIHBhY2tlZCBZVVYgZm9ybWF0cyAoVVlWWSwgWVVZMiwgWVVZVikgc2VwYXJhdGVseTsgYWxzbywgZml4Ci0JICBwYXNzdGhyb3VnaCBtb2RlOyBsYXN0bHksIGNsZWFyIG5lZ290aWF0ZWQgYmFzZXRyYW5zZm9ybSBjYXBzIHdoZW4KLQkgIHRoZSBjcm9wcGluZyBjaGFuZ2VzIGluIG9yZGVyIHRvIGZvcmNlIHJlbmVnb3RpYXRpb24uCi0KLTIwMDYtMTAtMDQgMjA6MDU6MDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2ljbGVzLzogVmlzdWFsIHRlc3QgZm9yIHZpZGVvY3JvcCwgc2hvd3MgdGhhdCBwYWNrZWQgeXV2IGRvZXNuJ3Qgd29yayByaWdodCB5ZXQuIC0td2l0aC1mZm1wZWdjb2xvcnNwYWNlIG9wdGlvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2ljbGVzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2ljbGVzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pY2xlcy92aWRlb2Nyb3AtdGVzdC5jOiAocXVpdF9tYWlubG9vcCksICh0aWNrX2NiKSwKLQkgICh0ZXN0X3dpdGhfY2FwcyksICh2aWRlb19jcm9wX2dldF90ZXN0X2NhcHMpLCAobWFpbik6Ci0JICBWaXN1YWwgdGVzdCBmb3IgdmlkZW9jcm9wLCBzaG93cyB0aGF0IHBhY2tlZCB5dXYgZG9lc24ndCB3b3JrIHJpZ2h0Ci0JICB5ZXQuIC0td2l0aC1mZm1wZWdjb2xvcnNwYWNlIG9wdGlvbiBkb2Vzbid0IHdvcmsgeWV0IGZvciB1bmtub3duCi0JICByZWFzb25zIChhbm90aGVyIGJhc2V0cmFuc2Zvcm0gaXNzdWU/KQotCi0yMDA2LTEwLTA0IDE3OjUzOjEyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9NYWtlZmlsZS5hbTogRGlzdCBuZXcgLmggZmlsZSB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvTWFrZWZpbGUuYW06Ci0JICBEaXN0IG5ldyAuaCBmaWxlIHRvby4KLQotMjAwNi0xMC0wNCAxNzoyNDo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvOiBGYWN0b3Igb3V0IGV4dGVuc2lvbiBpbiBzZXBhcmF0ZSBtb2R1bGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cGRlY19nZXRjYXBzKSwKLQkgIChnc3RfcnRwZGVjX2NoYWluX3J0cCksIChnc3RfcnRwZGVjX2NoYWluX3J0Y3ApOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19pbml0KSwKLQkgIChnc3RfcnRzcHNyY19maW5hbGl6ZSksIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9ydHBtYXApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGdzdF9ydHNwc3JjX3NlbmQpLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX21ldGhvZHMpLCAoZ3N0X3J0c3BzcmNfb3BlbiksCi0JICAoZ3N0X3J0c3BzcmNfcGxheSksIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuYzogKHJ0c3Bfc3RycmVzdWx0KToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcGV4dC5oOgotCSAgKiBnc3QvcnRzcC9ydHNwZXh0d21zLmM6IChydHNwX2V4dF93bXNfcGFyc2Vfc2RwKSwKLQkgIChydHNwX2V4dF93bXNfZ2V0X2NvbnRleHQpOgotCSAgKiBnc3QvcnRzcC9ydHNwZXh0d21zLmg6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuYzogKHJ0c3BfdHJhbnNwb3J0X2luaXQpLCAocGFyc2VfbW9kZSksCi0JICAocnRzcF90cmFuc3BvcnRfcGFyc2UpOgotCSAgKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0Lmg6Ci0JICBGYWN0b3Igb3V0IGV4dGVuc2lvbiBpbiBzZXBhcmF0ZSBtb2R1bGUuCi0JICBGaXggZ2V0Y2FwcyB0byBmaWx0ZXIgYWdhaW5zdCB0aGUgcGFkdGVtcGxhdGUuCi0JICBVc2UgQ29udGVudC1CYXNlIGlmIHRoZSBzZXJ2ZXIgZ2l2ZXMgb25lLgotCSAgUmV3b3JrIHRoZSB0cmFuc3BvcnQgcGFyc2luZyBhIGJpdCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuCi0JICBBZGRlZCBzb21lIFJlYWwgSGVhZGVyIGZpZWxkIGRlZmluaXRpb25zLgotCi0yMDA2LTEwLTA0IDEwOjI5OjExICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZG9jcy9wbHVnaW5zLzogYWRkZWQgdjRsMiBzdHVicwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgYWRkZWQgdjRsMiBzdHVicwotCSAgKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBhZGQgdjRsMgotCi0yMDA2LTEwLTA0IDEwOjI0OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6IEV4dHJhY3QgZGlzYy9hbGJ1bS9tZWRpdW0gbnVtYmVyIGFuZCBjb3VudCBhbmQgdHJ5IGhhcmRlciB0byBleHRyYWN0IHRyYWNrIG51bWJlci9jb3VudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL2dzdGFwZWRlbXV4LmM6IChhcGVfZGVtdXhfcGFyc2VfdGFncyk6Ci0JICBFeHRyYWN0IGRpc2MvYWxidW0vbWVkaXVtIG51bWJlciBhbmQgY291bnQgYW5kIHRyeSBoYXJkZXIKLQkgIHRvIGV4dHJhY3QgdHJhY2sgbnVtYmVyL2NvdW50LgotCi0yMDA2LTEwLTAzIDE4OjM2OjI5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvaWNsZXMvLmdpdGlnbm9yZToKLQkgIG1vYXAgaWdub3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vYXAgaWdub3JlCi0KLTIwMDYtMTAtMDMgMTg6MzU6MzQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9pY2xlcy9NYWtlZmlsZS5hbToKLQkgIGFkZCBpY2xlIGZvciB2NGwyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBpY2xlIGZvciB2NGwyCi0KLTIwMDYtMTAtMDMgMTg6MTU6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBhZGQgYnVpbGQgc3R1ZmYgZm9yIHY0bDIsIG5lZWRzIC0tZW5hYmxlLWV4cGVyaW1lbnRhbCB1bnRpbCB0aGUgbGFzdCBiaXRzIGFyZSByZXNvbHZlZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogc3lzL01ha2VmaWxlLmFtOgotCSAgYWRkIGJ1aWxkIHN0dWZmIGZvciB2NGwyLCBuZWVkcyAtLWVuYWJsZS1leHBlcmltZW50YWwgdW50aWwKLQkgIHRoZSBsYXN0IGJpdHMgYXJlIHJlc29sdmVkCi0KLTIwMDYtMTAtMDMgMTM6NDc6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICBjb21tZW50IG91dCB0aGUgbm90aWZpZXMgZm9yIHJlbW92ZWQgcHJvcGVydGllcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb21tZW50IG91dCB0aGUgbm90aWZpZXMgZm9yIHJlbW92ZWQgcHJvcGVydGllcwotCi0yMDA2LTEwLTAzIDEzOjMwOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOiBjb21tZW50IG91dCB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBhbHJlYWR5IHBhcnQgb2YgdGhlIHR1bmVyIGludGVyZmFjZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICAoZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIpOgotCSAgY29tbWVudCBvdXQgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgYWxyZWFkeSBwYXJ0IG9mIHRoZSB0dW5lcgotCSAgaW50ZXJmYWNlLgotCi0yMDA2LTEwLTAzIDEzOjE4OjU5ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IEltcHJvdmUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0xMC0wMyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBJbXByb3ZlIGRvY3MuCi0KLTIwMDYtMTAtMDIgMTY6MTQ6MDYgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgc3RvcCByZW1vdmluZyBnZGtwaXhidWYgcGx1Z2luIGZyb20gcGFja2FnZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzdG9wIHJlbW92aW5nIGdka3BpeGJ1ZiBwbHVnaW4gZnJvbSBwYWNrYWdlCi0KLTIwMDYtMDktMjkgMTU6Mzk6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEaXNhYmxlIGF1dG9kZXRlY3QgdGVzdCB0ZW1wb3JhcmlseSwgc28gdGhhdCB0aGUgYnVpbGQgYm90cyB1cGRhdGUgLWJhZCBhbmQgdGhlIHJhbmtzIG9mIHVuci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRGlzYWJsZSBhdXRvZGV0ZWN0IHRlc3QgdGVtcG9yYXJpbHksIHNvIHRoYXQgdGhlIGJ1aWxkIGJvdHMKLQkgIHVwZGF0ZSAtYmFkIGFuZCB0aGUgcmFua3Mgb2YgdW5yZWxpYWJsZSB2aWRlbyBzaW5rcyBpbiB0aGVyZS4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvYXV0b2RldGVjdC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgU2tpcCB0ZXN0IGlmIG5vIHVzYWJsZSB2aWRlb3NpbmsgaXMgZm91bmQuCi0KLTIwMDYtMDktMjkgMTU6Mzc6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL1VSTFM6IEFkZCBzb21lIG1vcmUgVVJMcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9VUkxTOgotCSAgQWRkIHNvbWUgbW9yZSBVUkxzLgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfcnRzcHNyY19pbml0KSwgKGdzdF9ydHNwc3JjX2ZpbmFsaXplKSwKLQkgIChnc3RfcnRzcHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3J0c3BzcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRzcHNyY19zdHJlYW1fc2V0dXBfcnRwKSwgKGdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3BfdWRwKSwgKGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQpLAotCSAgKGdzdF9ydHNwc3JjX2xvb3ApLCAoZ3N0X3J0c3BzcmNfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfcGFyc2VfbWV0aG9kcyksIChnc3RfcnRzcHNyY19vcGVuKSwKLQkgIChnc3RfcnRzcHNyY19jbG9zZSksIChnc3RfcnRzcHNyY19wbGF5KSwgKGdzdF9ydHNwc3JjX3BhdXNlKSwKLQkgIChnc3RfcnRzcHNyY19oYW5kbGVfbWVzc2FnZSksIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBBZGQgdGltZW91dCBwcm9wZXJ0eSB0byBjb250cm9sIFVEUCB0aW1lb3V0cy4KLQkgIEZpeCBlcnJvciBtZXNzYWdlcy4KLQkgIEFsc28gc3RhcnQgYSBsb29wIGZ1bmN0aW9uIHdoZW4gb3BlcmF0aW5nIGluIFVEUCBtb2RlIHNvIHRoYXQgd2UgY2FuCi0JICBkbyBzb21lIG1vcmUgc3R1ZmYgYXN5bmMuCi0JICBIYW5kbGUgZWxlbWVudCBtZXNzYWdlcyBmcm9tIHVkcHNyYyB0byBkZXRlY3QgdGltZW91dHMuIElmIGEgdGltZW91dAotCSAgaGFwcGVucyB3ZSBjdXJyZW50bHkgZ2VuZXJhdGUgYW4gZXJyb3IuCi0JICBBUEk6IHJ0c3BzcmM6OnRpbWVvdXQgcHJvcGVydHkuCi0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF91ZHBzcmNfY3JlYXRlKToKLQkgIFJlYWxseSBpbXBsZW1lbnQgdGhlIHRpbWVvdXQgaW4gbWljcm9zZWNvbmRzIGFuZCBub3QgbWlsbGlzZWNvbmRzLgotCi0yMDA2LTA5LTI5IDExOjA5OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy4qOiBBZGRlZCBwcm9wZXJ0eSB0byBwb3N0IGEgbWVzc2FnZSBvbiB0aW1lb3V0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3VkcHNyY19pbml0KSwKLQkgIChnc3RfdWRwc3JjX2NyZWF0ZSksIChnc3RfdWRwc3JjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3VkcHNyY19nZXRfcHJvcGVydHkpLCAoZ3N0X3VkcHNyY191bmxvY2spLCAoZ3N0X3VkcHNyY19zdG9wKToKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQkgIEFkZGVkIHByb3BlcnR5IHRvIHBvc3QgYSBtZXNzYWdlIG9uIHRpbWVvdXQuCi0JICBVcGRhdGVkIGRvY3MuCi0JICBXaGVuIHJlc3RhcnRpbmcgdGhlIHNlbGVjdCwgaW5pdGlhbGl6ZSB0aGUgZmRzZXRzIGFnYWluLgotCSAgSW5pdCBjb250cm9sIHNvY2tldHMgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNsb3NlIGEgcmFuZG9tIHNvY2tldC4KLQkgIEFQSTogR3N0VURQU3JjOjp0aW1lb3V0IHByb3BlcnR5Ci0KLTIwMDYtMDktMjkgMDg6MTU6MDUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogRml4IGZsYWcgcmVnaXN0cmF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwX3Byb3RvX2dldF90eXBlKToKLQkgIEZpeCBmbGFnIHJlZ2lzdHJhdGlvbi4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9yZWFkKToKLQkgIFJlYWRpbmcgMCBhbHNvIG1lYW5zICdubyBtb3JlIGNvbW1hbmRzJwotCi0yMDA2LTA5LTI5IDA4OjA5OjI0ICswMDAwICBBbnRvaW5lIFRyZW1ibGF5IDxoZXhhMDBAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy5jOiBGaXggcG9zc2libGUgaW5maW5pdGUgbG9vcCB3aGVuIHNodXR0aW5nIGRvd24sIGEgcmVhZCBjYW4gYWxzbyByZXR1cm4gMCB0byBpbmRpY2F0ZSBubyBtb3JlIG1lc3MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFudG9pbmUgVHJlbWJsYXkgPGhleGEwMCBhdCBnbWFpbCBkb3QgY29tPgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jcmVhdGUpOgotCSAgRml4IHBvc3NpYmxlIGluZmluaXRlIGxvb3Agd2hlbiBzaHV0dGluZyBkb3duLCBhIHJlYWQgY2FuIGFsc28gcmV0dXJuCi0JICAwIHRvIGluZGljYXRlIG5vIG1vcmUgbWVzc2FnZXMgYXJlIGF2YWlsYWJsZS4gRml4ZXMgIzM1ODE1Ni4KLQotMjAwNi0wOS0yOCAxNzowODo0NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvOiBGcmFtZXJhdGUgY2FuIGJlIDAvMSB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfZ2V0X2FsbF9jYXBzKSwKLQkgIChnc3RfdjRsMnNyY19nZXRfY2Fwcyk6Ci0JICAqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX2ZpbGxfbGlzdHMpOgotCSAgRnJhbWVyYXRlIGNhbiBiZSAwLzEgdG9vLgotCSAgSW5pdCBmcmFtZXJhdGUgdG8gMC8xIGJlZm9yZSBxdWVyeWluZyBpdCBzbyB0aGF0IHdlIGNhbiBkZXRlY3QKLQkgIGRldmljZXMgdGhhdCBkb24ndCBrbm93IGFib3V0IGEgZnJhbWVyYXRlLgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mby4KLQotMjAwNi0wOS0yOCAxNDozMTo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgc3VwcG9ydCBmb3IgJ3l2MTInIGZvdXJjYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgQWRkIHN1cHBvcnQgZm9yICd5djEyJyBmb3VyY2MuCi0KLTIwMDYtMDktMjcgMTc6NDc6NTcgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBSZW1vdmVkIHNldC11bmRlZi1mcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbW92ZWQgc2V0LXVuZGVmLWZwcy4KLQotMjAwNi0wOS0yNyAxNzowNDoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvOiBSZW5hbWVkIHNvbWUgcHJvcGVydGllcyB0byBtYXRjaCB0aGUgdHVuZXIgaW50ZXJmYWNlIG5hbWluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JICAoZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIpLCAoZ3N0X3Y0bDJfb2JqZWN0X25ldyksCi0JICAoZ3N0X3Y0bDJfb2JqZWN0X3NldF9wcm9wZXJ0eV9oZWxwZXIpLAotCSAgKGdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyKSwgKGdzdF92NGwyX3NldF9kZWZhdWx0cyk6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuaDoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3Y0bDJzcmNfY3JlYXRlKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6IChnc3RfdjRsMl90dW5lcl9jb250YWluc19jaGFubmVsKSwKLQkgIChnc3RfdjRsMl90dW5lcl9saXN0X2NoYW5uZWxzKSwKLQkgIChnc3RfdjRsMl90dW5lcl9zZXRfY2hhbm5lbF9hbmRfbm90aWZ5KSwKLQkgIChnc3RfdjRsMl90dW5lcl9nZXRfY2hhbm5lbCksIChnc3RfdjRsMl90dW5lcl9jb250YWluc19ub3JtKSwKLQkgIChnc3RfdjRsMl90dW5lcl9saXN0X25vcm1zKSwgKGdzdF92NGwyX3R1bmVyX3NldF9ub3JtX2FuZF9ub3RpZnkpLAotCSAgKGdzdF92NGwyX3R1bmVyX2dldF9ub3JtKToKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZ2V0X2NhcGFiaWxpdGllcyksCi0JICAoZ3N0X3Y0bDJfZmlsbF9saXN0cyksIChnc3RfdjRsMl9lbXB0eV9saXN0cyk6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX2dldF9mcHMpOgotCSAgUmVuYW1lZCBzb21lIHByb3BlcnRpZXMgdG8gbWF0Y2ggdGhlIHR1bmVyIGludGVyZmFjZSBuYW1pbmcuCi0KLTIwMDYtMDktMjcgMTY6MTQ6MTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIFNtYWxsIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogKGdzdF92NGwyX29iamVjdF9zZXRfcHJvcGVydHlfaGVscGVyKSwKLQkgIChnc3RfdjRsMl9zZXRfZGVmYXVsdHMpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19nZXRfcmVhZCksCi0JICAoZ3N0X3Y0bDJzcmNfY3JlYXRlKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5LmM6IChnc3RfdjRsMl94b3ZlcmxheV9vcGVuKToKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZ2V0X2NhcGFiaWxpdGllcyksCi0JICAoZ3N0X3Y0bDJfZmlsbF9saXN0cyksIChnc3RfdjRsMl9vcGVuKSwgKGdzdF92NGwyX3NldF9ub3JtKSwKLQkgIChnc3RfdjRsMl9nZXRfZnJlcXVlbmN5KSwgKGdzdF92NGwyX3NldF9mcmVxdWVuY3kpLAotCSAgKGdzdF92NGwyX3NpZ25hbF9zdHJlbmd0aCksIChnc3RfdjRsMl9nZXRfYXR0cmlidXRlKSwKLQkgIChnc3RfdjRsMl9zZXRfYXR0cmlidXRlKSwgKGdzdF92NGwyX2dldF9pbnB1dCksCi0JICAoZ3N0X3Y0bDJfc2V0X2lucHV0KToKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfZmlsbF9mb3JtYXRfbGlzdCksCi0JICAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSksIChnc3RfdjRsMnNyY19nZXRfY2FwdHVyZSksCi0JICAoZ3N0X3Y0bDJzcmNfc2V0X2NhcHR1cmUpLCAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KSwKLQkgIChnc3RfdjRsMnNyY19jYXB0dXJlX3N0YXJ0KSwgKGdzdF92NGwyc3JjX2NhcHR1cmVfc3RvcCksCi0JICAoZ3N0X3Y0bDJzcmNfYnVmZmVyX25ldyk6Ci0JICAqIHRlc3RzL2ljbGVzL3Y0bDJzcmMtdGVzdC5jOiAobXlfYnVzX2NhbGxiYWNrKSwgKG1haW4pOgotCSAgU21hbGwgY2xlYW51cHMuCi0JICBGaXggZXJyb3IgbWVzc2FnZXMuCi0JICBVc2UgbG9ja3Mgd2hlbiBnZXR0aW5nIHRpbWVzdGFtcHMuCi0JICBGaXggbGVha3MgaW4gdGVzdC4KLQkgIEFkZCBsaWNlbnNpbmcgaGVhZGVyIHRvIHRlc3RzLgotCi0yMDA2LTA5LTI3IDE1OjE0OjA3ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBTb21lIGNsZWFudXBzIGFuZCBjb21tZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgU29tZSBjbGVhbnVwcyBhbmQgY29tbWVudHMuCi0KLTIwMDYtMDktMjcgMTM6NDE6MzUgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgYWRkIGF1ZGlvZnggcGx1Z2luCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhdWRpb2Z4IHBsdWdpbgotCi0yMDA2LTA5LTI2IDE0OjE3OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGQgdjRsMiBwbHVnaW4gdG8gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgQWRkIHY0bDIgcGx1Z2luIHRvIHRoZSBkb2NzLgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19nZXRfcmVhZCksCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X21tYXApLCAoZ3N0X3Y0bDJzcmNfY3JlYXRlKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmM6Ci0JICBGaXggZG9jcy4KLQkgIFJlbW92ZSBzb21lIG1vcmUgZXh0ZXJucy4KLQotMjAwNi0wOS0yNiAxMzoxODowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL3Y0bDIvTWFrZWZpbGUuYW06IEZpeCBtYWtlZmlsZSwgbGlzdCBsaWJzIGluIHN0YWNrIG9yZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSAgRml4IG1ha2VmaWxlLCBsaXN0IGxpYnMgaW4gc3RhY2sgb3JkZXIuCi0JICAqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6IChnc3RfdjRsMl9kZXZpY2VfZ2V0X3R5cGUpLAotCSAgKGdzdF92NGwyX29iamVjdF9pbnN0YWxsX3Byb3BlcnRpZXNfaGVscGVyKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19nZXRfcmVhZCksCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X21tYXApLCAoZ3N0X3Y0bDJzcmNfY3JlYXRlKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnZpZG9yaWVudC5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuaDoKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmg6Ci0JICBGaXggY29kaW5nIHN0eWxlOgotCSAgLSBSZW1vdmUgZXh0ZXJuIGZyb20gZnVuY3Rpb25zLgotCSAgLSBGaXggaGVhZGVyIGluZGVudGF0aW9uLgotCSAgRml4IEZsYWdzLCBhZGQgZGVmYXVsdHMgZm9yIHByb3BlcnRpZXMuCi0JICBSZW1vdmUgdW51c2VkIGVudW1zLgotCSAgRml4IFRPT19MQVpZIGluIGVycm9yIG1lc3NhZ2VzLgotCi0yMDA2LTA5LTI2IDExOjA2OjE3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvdjRsMi86IEZpeCBwYXNzIGF0IGNvZGUgY2xlYW51cHMsIG1vdmUgZXJyb3JzIGNhc2VzIG91dCBvZiB0aGUgbm9ybWFsIGZsb3cgZm9yIGFkZGl0aW9uYWwgY29kZSBjbGFyaXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogKGdzdF92NGwyX2NsYXNzX3Byb2JlX2RldmljZXMpLAotCSAgKGdzdF92NGwyX3Byb2JlX25lZWRzX3Byb2JlKSwKLQkgIChnc3RfdjRsMl9vYmplY3RfaW5zdGFsbF9wcm9wZXJ0aWVzX2hlbHBlciksIChnc3RfdjRsMl9vYmplY3RfbmV3KSwKLQkgIChnc3RfdjRsMl9vYmplY3RfZGVzdHJveSksIChnc3RfdjRsMl9vYmplY3Rfc2V0X3Byb3BlcnR5X2hlbHBlciksCi0JICAoZ3N0X3Y0bDJfb2JqZWN0X2dldF9wcm9wZXJ0eV9oZWxwZXIpLCAoZ3N0X3Y0bDJfc2V0X2RlZmF1bHRzKSwKLQkgIChnc3RfdjRsMl9vYmplY3Rfc3RhcnQpLCAoZ3N0X3Y0bDJfb2JqZWN0X3N0b3ApOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF92NGwyc3JjX2luaXQpLCAoZ3N0X3Y0bDJzcmNfZGlzcG9zZSksCi0JICAoZ3N0X3Y0bDJzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF92NGwyc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3Y0bDJzcmNfZml4YXRlKSwgKGdzdF92NGwyc3JjX2dldF9jYXBzKSwKLQkgIChnc3RfdjRsMnNyY19zZXRfY2FwcyksIChnc3RfdjRsMnNyY19nZXRfcmVhZCksCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X21tYXApLCAoZ3N0X3Y0bDJzcmNfY3JlYXRlKToKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOiAoZ3N0X3Y0bDJfZ2V0X2NhcGFiaWxpdGllcyksCi0JICAoZ3N0X3Y0bDJfb3BlbiksIChnc3RfdjRsMl9jbG9zZSksIChnc3RfdjRsMl9nZXRfbm9ybSksCi0JICAoZ3N0X3Y0bDJfc2V0X25vcm0pLCAoZ3N0X3Y0bDJfZ2V0X2ZyZXF1ZW5jeSksCi0JICAoZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSksIChnc3RfdjRsMl9zaWduYWxfc3RyZW5ndGgpLAotCSAgKGdzdF92NGwyX2dldF9hdHRyaWJ1dGUpLCAoZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSksCi0JICAoZ3N0X3Y0bDJfZ2V0X2lucHV0KSwgKGdzdF92NGwyX3NldF9pbnB1dCk6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX2ZpbGxfZm9ybWF0X2xpc3QpLAotCSAgKGdzdF92NGwyc3JjX3F1ZXVlX2ZyYW1lKSwgKGdzdF92NGwyc3JjX2dyYWJfZnJhbWUpLAotCSAgKGdzdF92NGwyc3JjX2dldF9jYXB0dXJlKSwgKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKSwKLQkgIChnc3RfdjRsMnNyY19jYXB0dXJlX2luaXQpLCAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdGFydCksCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdG9wKSwgKGdzdF92NGwyc3JjX2NhcHR1cmVfZGVpbml0KSwKLQkgIChnc3RfdjRsMnNyY19nZXRfc2l6ZV9saW1pdHMpLCAoZ3N0X3Y0bDJzcmNfc2V0X2ZwcyksCi0JICAoZ3N0X3Y0bDJzcmNfZ2V0X2ZwcyksIChnc3RfdjRsMnNyY19idWZmZXJfZmluYWxpemUpLAotCSAgKGdzdF92NGwyc3JjX2J1ZmZlcl9uZXcpOgotCSAgRml4IHBhc3MgYXQgY29kZSBjbGVhbnVwcywgbW92ZSBlcnJvcnMgY2FzZXMgb3V0IG9mIHRoZSBub3JtYWwKLQkgIGZsb3cgZm9yIGFkZGl0aW9uYWwgY29kZSBjbGFyaXR5LgotCi0yMDA2LTA5LTI1IDEzOjU1OjQ0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXV0b2RldGVjdC86IFNtYWxsIGNsZWFudXBzLiBkb24ndCB0cnkgdG8gc2V0ICJzeW5jIiBwcm9wZXJ0eSB3aGVuIGl0IGlzIG5vdCBhdmFpbGFibGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfYmFzZV9pbml0KSwgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19maW5kX2Jlc3QpOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6IChnc3RfYXV0b192aWRlb19zaW5rX2RldGVjdCk6Ci0JICBTbWFsbCBjbGVhbnVwcy4KLQkgIGRvbid0IHRyeSB0byBzZXQgInN5bmMiIHByb3BlcnR5IHdoZW4gaXQgaXMgbm90IGF2YWlsYWJsZS4KLQotMjAwNi0wOS0yNSAxMTo0Nzo0MiArMDAwMCAgUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+Ci0KLQkgIGdzdC86IEluY2x1ZGUgc3RkbGliLmggaW4gc29tZSBtb3JlIHBsYWNlcywgbWFrZXMgdGhpbmdzIGNvbXBpbGUgd2l0aCB1Q2xpYmMgYW5kIC1XZXJyb3IgKCMzNTc1OTIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgY29tPgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIEluY2x1ZGUgc3RkbGliLmggaW4gc29tZSBtb3JlIHBsYWNlcywgbWFrZXMgdGhpbmdzIGNvbXBpbGUKLQkgIHdpdGggdUNsaWJjIGFuZCAtV2Vycm9yICgjMzU3NTkyKS4KLQotMjAwNi0wOS0yNSAwOToxNToxMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiBvdXIgY29kZSBzaG91bGQgaGFuZGxlIHRoYXQgZmluZS4gU29tZSBvZiB0aGUgYnV0dG9ucyBvbiB0aGUgYXBwbGUgdHJhaWxlciBzaXRlIGFyZSBhcHBhcmVudGx5Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAgU2V0IG1pbmltdW0gaGVpZ2h0IHRvIDggKGZyb20gMTYpLCBvdXIgY29kZSBzaG91bGQgaGFuZGxlCi0JICB0aGF0IGZpbmUuIFNvbWUgb2YgdGhlIGJ1dHRvbnMgb24gdGhlIGFwcGxlIHRyYWlsZXIgc2l0ZQotCSAgYXJlIGFwcGFyZW50bHkgb25seSAxNSBwaXhlbHMgaGlnaCAoc2VlICMzNTc0NzApLgotCi0yMDA2LTA5LTIzIDE1OjMxOjU2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC86IEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2xvb3ApLCAoZ3N0X3J0c3BzcmNfc2VuZCksCi0JICAoZ3N0X3J0c3BzcmNfb3Blbik6Ci0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fY3JlYXRlKSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fY29ubmVjdCksIChydHNwX2Nvbm5lY3Rpb25fcmVhZCksIChyZWFkX2JvZHkpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuYzogKHJ0c3Bfc3RycmVzdWx0KToKLQkgICogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkgIEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nLgotCi0yMDA2LTA5LTIzIDE1OjMwOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogRml4IGtsYXNzIHR5cG9zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6IChnc3RfYXN0ZXJpc2toMjYzX3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOiAoZ3N0X3J0cF9MMTZkZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogKGdzdF9ydHBfYW1yX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6IChnc3RfcnRwX2dzbV9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOiAoZ3N0X3J0cF9oMjYzcF9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6IChnc3RfcnRwX2gyNjRfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOiAoZ3N0X3J0cF9pbGJjX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYzogKGdzdF9ydHBfbXAydF9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOiAoZ3N0X3J0cF9tcDRnX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzogKGdzdF9ydHBfbXA0dl9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzogKGdzdF9ydHBfbXBhX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYzogKGdzdF9ydHBfcGNtYV9kZXBheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6IChnc3RfcnRwX3BjbXVfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzogKGdzdF9ydHBfc3BlZXhfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOiAoZ3N0X3J0cF9zdjN2X2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jOiAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgRml4IGtsYXNzIHR5cG9zLgotCSAgTWFyayBSQU5LX01BUkdJTkFMLCBkZWNvZGViaW4gY2FuIGhhbmRsZSB0aGUgZGVwYXlsb2FkZXJzIGZpbmUuCi0KLTIwMDYtMDktMjIgMTc6NTM6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogTmVlZCAgLWJhc2UgQ1ZTIGZvciBnc3RfYmFzZV9ydHBfZGVwYXlsb2FkX3B1c2hfdHMoKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBOZWVkICAtYmFzZSBDVlMgZm9yIGdzdF9iYXNlX3J0cF9kZXBheWxvYWRfcHVzaF90cygpLgotCi0yMDA2LTA5LTIyIDE3OjIyOjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IERvbid0IGNoZWNrIGZvciBhIHRhZyB0aGF0IGlzIG5ldmVyIHRoZXJlIGFuZCBjaGVjayBpZiB3ZSByZWFkIHRoZSBjb3JyZWN0IHRhZy4gRml4ZXMgc2Vla2luZyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCk6Ci0JICBEb24ndCBjaGVjayBmb3IgYSB0YWcgdGhhdCBpcyBuZXZlciB0aGVyZSBhbmQgY2hlY2sgaWYgd2UgcmVhZCB0aGUKLQkgIGNvcnJlY3QgdGFnLiBGaXhlcyBzZWVraW5nIGFnYWluLgotCSAgV2UgbXVzdCBwb3N0IGFuIGVycm9yIHdoZW4gYWxsIHBhZHMgYXJlIHVubGlua2VkLgotCi0yMDA2LTA5LTIyIDE1OjE1OjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogTW9yZSBmaXhhZ2UsIHNldCBlbmRvZGVyLXBhcmFtcyBjb3JyZWN0bHkgaW4gdGhlIHBheWxvYWRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19kZXBheV9wcm9jZXNzKToKLQkgICogZ3N0L3J0cC9nc3RydHB2b3JiaXNwYXkuYzogKGdzdF9ydHBfdm9yYmlzX3BheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfcmVzZXRfcGFja2V0KSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfaW5pdF9wYWNrZXQpLAotCSAgKGdzdF9ydHBfdm9yYmlzX3BheV9mbHVzaF9wYWNrZXQpLCAoZ3N0X3J0cF92b3JiaXNfcGF5X3BhcnNlX2lkKSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBNb3JlIGZpeGFnZSwgc2V0IGVuZG9kZXItcGFyYW1zIGNvcnJlY3RseSBpbiB0aGUgcGF5bG9hZGVyLgotCi0yMDA2LTA5LTIyIDEyOjEyOjEwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXV0b2RldGVjdC86IE1ha2Ugc3RhdGljIHBhZCB0ZW1wbGF0ZXMgc3RhdGljIHRvIGFwcGVhc2UgdmFsZ3JpbmQncyBsZWFrIGRldGVjdG9yLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkgIChnc3RfYXV0b19hdWRpb19zaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX2Jhc2VfaW5pdCk6Ci0JICBNYWtlIHN0YXRpYyBwYWQgdGVtcGxhdGVzIHN0YXRpYyB0byBhcHBlYXNlIHZhbGdyaW5kJ3MgbGVhawotCSAgZGV0ZWN0b3IuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdXRvZGV0ZWN0LmM6IChHU1RfU1RBUlRfVEVTVCksCi0JICAoYXV0b2RldGVjdF9zdWl0ZSk6Ci0JICBBZGQgc2ltcGxlIHRlc3QgZm9yIHRoZSBnaG9zdHBhZCBsb2NrdXAgb24gc2h1dGRvd24gZml4ZWQgaW4gY29yZQotCSAgQ1ZTIChhdWRpbyBiaXQgZGlzYWJsZWQgYmVjYXVzZSBpdCB3b3VsZCBuZWVkIGRvemVucyBvZiBhbHNhCi0JICBzdXBwcmVzc2lvbnMgYW5kIEknbSB0b28gbGF6eSB0byBhZGQgdGhvc2Ugbm93KS4KLQotMjAwNi0wOS0yMiAxMjowODoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IFNtYWxsIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzogKGdzdF9ydHBfTDE2ZGVwYXlfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzogKGdzdF9ydHBfbXA0Z19kZXBheV9jbGFzc19pbml0KToKLQkgIFNtYWxsIGNsZWFudXBzLgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfaW5pdCksCi0JICAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfZmluYWxpemUpLCAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfcHJvY2VzcyksCi0JICAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX3ZvcmJpc19kZXBheV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cF92b3JiaXNfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmM6IChnc3RfcnRwX3ZvcmJpc19wYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX3ZvcmJpc19wYXlfaW5pdCksCi0JICAoZ3N0X3J0cF92b3JiaXNfcGF5X3NldGNhcHMpLCAoZ3N0X3J0cF92b3JiaXNfcGF5X2luaXRfcGFja2V0KSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfZmx1c2hfcGFja2V0KSwKLQkgIChnc3RfcnRwX3ZvcmJpc19wYXlfYXBwZW5kX2J1ZmZlciksCi0JICAoZ3N0X3J0cF92b3JiaXNfcGF5X2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9ydHBfdm9yYmlzX3BheV9wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5Lmg6Ci0JICBBZGQgZXhwZXJpbWVudGFsIHZvcmJpcyBwYXkgYW5kIGRlcGF5bG9hZGVycy4KLQotMjAwNi0wOS0yMSAxMzozMzoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6IEZpeCBwcm9maWxlLWxldmVsLWlkIHBhcnNpbmcgYW5kIHNldHVwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOiAoZ3N0X3J0cF9tcDRnX3BheV9wYXJzZV9hdWRpb19jb25maWcpOgotCSAgRml4IHByb2ZpbGUtbGV2ZWwtaWQgcGFyc2luZyBhbmQgc2V0dXAuCi0KLTIwMDYtMDktMjEgMDk6NTA6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvOiBVcGRhdGUgUkVBRE1FLCBzaW1wbGUgY2xlYW51cC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL1JFQURNRToKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfc2V0X3Byb3BlcnR5KToKLQkgIFVwZGF0ZSBSRUFETUUsIHNpbXBsZSBjbGVhbnVwLgotCi0yMDA2LTA5LTIxIDA5OjM1OjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL1JFQURNRTogVXBkYXRlIFJFQURNRSB3aXRoIHNvbWUgZXhhbXBsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9SRUFETUU6Ci0JICBVcGRhdGUgUkVBRE1FIHdpdGggc29tZSBleGFtcGxlcy4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6IChnc3RfcnRwX21wNGdfcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfZmluYWxpemUpLCAoZ3N0X3J0cF9tcDRnX3BheV9wYXJzZV9hdWRpb19jb25maWcpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfcGFyc2VfdmlkZW9fY29uZmlnKSwgKGdzdF9ydHBfbXA0Z19wYXlfbmV3X2NhcHMpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOgotCSAgTWFrZSBvcHRpb25hbCBSVFAgcGFyYW1ldGVycyBvZiB0eXBlIFNUUklORywgYXMgcmVxdWlyZWQgYnkgdGhlCi0JICBhcHBsaWNhdGlvbi94LXJ0cCBjYXBzIHNwZWNpZmljYXRpb24uCi0KLTIwMDYtMDktMjAgMTk6Mzc6NDUgKzAwMDAgIFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIGdzdC9ydHAvOiBDb3JyZWN0bHkgY2FsY3VsYXRlIHNpemUgb2YgZWFjaCBIMjYzKyBSVFAgYnVmZmVyIHRha2luZyBpbnRvIGFjY291bnQgTVRVIGFuZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICBDb3JyZWN0bHkgY2FsY3VsYXRlIHNpemUgb2YgZWFjaCBIMjYzKyBSVFAgYnVmZmVyIHRha2luZyBpbnRvIGFjY291bnQgTVRVIGFuZAotCSAgUlRQIGhlYWRlci4KLQotMjAwNi0wOS0yMCAxNjo0MTo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9NYWtlZmlsZS5hbTogQW5kIG1ha2VmaWxlIHRvby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgQW5kIG1ha2VmaWxlIHRvby4KLQotMjAwNi0wOS0yMCAxNjowOTowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIHByZWxpbWluYXJ5IEFTRiBkZXBheWxvYWRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFzZmRlcGF5LmM6IChnc3RfcnRwX2FzZl9kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfYXNmX2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9hc2ZfZGVwYXlfaW5pdCksCi0JICAoZGVjb2RlX2Jhc2U2NCksIChnc3RfcnRwX2FzZl9kZXBheV9zZXRjYXBzKSwKLQkgIChnc3RfcnRwX2FzZl9kZXBheV9wcm9jZXNzKSwgKGdzdF9ydHBfYXNmX2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9hc2ZfZGVwYXlfZ2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBfYXNmX2RlcGF5X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cF9hc2ZfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFzZmRlcGF5Lmg6Ci0JICBBZGRlZCBwcmVsaW1pbmFyeSBBU0YgZGVwYXlsb2FkZXIuCi0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmM6IChkZWNvZGVfYmFzZTY0KToKLQkgIEZpeCBiYXNlNjQgZGVjb2RpbmcuCi0KLTIwMDYtMDktMjAgMTY6MDY6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL1VSTFM6IEFkZGVkIHNvbWUgdGVzdCBVUkxTLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL1VSTFM6Ci0JICBBZGRlZCBzb21lIHRlc3QgVVJMUy4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksCi0JICAoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY19vcGVuKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgV2hlbiBjcmVhdGluZyBzdHJlYW1zLCBnaXZlIGFjY2VzcyB0byB0aGUgY29tcGxldGUgU0RQLgotCSAgRml4IHNvbWUgbGVha3MuCi0JICBDb2xsZWN0IGFuZCBtZXJnZSBnbG9iYWwgc3RyZWFtIHByb3BlcnRpZXMgaW4gc3RyZWFtIGNhcHMuCi0JICBQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBXTVNlcnZlci4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJ0c3BfY29ubmVjdGlvbl9jcmVhdGUpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9jb25uZWN0KSwgKHJ0c3BfY29ubmVjdGlvbl9yZWFkKSwgKHJlYWRfYm9keSksCi0JICAocnRzcF9jb25uZWN0aW9uX3JlY2VpdmUpOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5oOgotCSAgTWFrZSBjb25uZWN0aW9uIGludGVycnVwdGFibGUuCi0JICBSZWZhY3RvciB0byBtYWtlIGl0IHJlY29ubmVjdGFibGUuCi0JICBEb24ndCBmYWlsIG9uIHNob3J0IHJlYWRzIHdoZW4gcmVhZGluZyBkYXRhIHBhY2tldHMuCi0JICAqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX3BhcnNlKSwgKHJ0c3BfdXJsX3NldF9wb3J0KSwKLQkgIChydHNwX3VybF9nZXRfcG9ydCk6Ci0JICAqIGdzdC9ydHNwL3J0c3B1cmwuaDoKLQkgIEFkZCBtZXRob2RzIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIHBvcnQuCi0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuYzogKHNkcF9tZXNzYWdlX2dldF9hdHRyaWJ1dGVfdmFsX24pLAotCSAgKHNkcF9tZXNzYWdlX2dldF9hdHRyaWJ1dGVfdmFsKSwgKHNkcF9tZWRpYV9nZXRfYXR0cmlidXRlKSwKLQkgIChzZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWxfbiksIChzZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwpLAotCSAgKHNkcF9tZWRpYV9nZXRfZm9ybWF0KSwgKHNkcF9wYXJzZV9saW5lKSwKLQkgIChzZHBfbWVzc2FnZV9wYXJzZV9idWZmZXIpOgotCSAgRml4IGhlYWRlcnMuCi0JICBBZGQgbWV0aG9kcyBmb3IgZ2V0dGluZyBtdWx0aXBsZSBhdHRyaWJ1dGVzIHdpdGggdGhlIHNhbWUgbmFtZS4KLQkgIEluY3JlYXNlIGJ1ZmZlciBzaXplIHdoZW4gcGFyc2luZy4KLQkgIEZpeCBwYXJzaW5nIG9mIGE9Zm9vIGZpZWxkcy4KLQkgICogZ3N0L3J0c3AvdGVzdC5jOiAobWFpbik6Ci0JICBVcGRhdGUgdG8gbmV3IGNvbm5lY3Rpb24gQVBJLgotCSAgKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5jOiAocnRzcF9tZXNzYWdlX25ld19yZXNwb25zZSksCi0JICAocnRzcF9tZXNzYWdlX2luaXRfcmVzcG9uc2UpLCAocnRzcF9tZXNzYWdlX2luaXRfZGF0YSksCi0JICAocnRzcF9tZXNzYWdlX3Vuc2V0KSwgKHJ0c3BfbWVzc2FnZV9mcmVlKSwgKHJ0c3BfbWVzc2FnZV9kdW1wKToKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuaDoKLQkgICogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5jOiAocnRzcF90cmFuc3BvcnRfZnJlZSk6Ci0JICAqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuaDoKLQkgICogZ3N0L3J0c3Avc2RwLmg6Ci0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuaDoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcC5jOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwLmg6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSAgKiBnc3QvcnRzcC9nc3RydHBkZWMuaDoKLQkgICogZ3N0L3J0c3AvcnRzcC5oOgotCSAgKiBnc3QvcnRzcC9ydHNwZGVmcy5jOgotCSAgKiBnc3QvcnRzcC9ydHNwZGVmcy5oOgotCSAgRHVhbCBsaWNlbnNlZCB1bmRlciBNSVQgYW5kIExHUEwgbm93LgotCi0yMDA2LTA5LTE5IDE3OjI1OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9nc3RydHNwc3JjLio6IFJlb3JnYW5pemUgc3RyZWFtIHBhcnNpbmcgYW5kIGNyZWF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGZpbmRfc3RyZWFtX2J5X3B0KSwKLQkgIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwgKGdzdF9ydHNwc3JjX2ZyZWVfc3RyZWFtKSwKLQkgIChnc3RfcnRzcHNyY19tZWRpYV90b19jYXBzKSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9zZXR1cF9ydHApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGZpbmRfc3RyZWFtX2J5X2NoYW5uZWwpLAotCSAgKGdzdF9ydHNwc3JjX3B1c2hfZXZlbnQpLCAoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY19zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCSAgKGdzdF9ydHNwc3JjX3BhcnNlX3J0cGluZm8pLCAoZ3N0X3J0c3BzcmNfcGxheSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIFJlb3JnYW5pemUgc3RyZWFtIHBhcnNpbmcgYW5kIGNyZWF0aW9uLgotCSAgRGV0ZWN0IGNvbnRhaW5lciBmb3JtYXRzIGluIGludGVybGVhdmVkIG1vZGUuCi0JICBLZWVwIG1vcmUgc3RhdGUgYWJvdXQgdGhlIHN0cmVhbXMuCi0JICBBc3N1bWUgYSBzZXJ2ZXIgYWxzbyBzdXBwb3J0cyBQTEFZIGlmIGl0IGRvZXMgbm90IHNheS4KLQkgIEFkZCB1bmljYXN0IGFuZCBpbnRlcmxlYXZlZCBwcm9wZXJ0aWVzIHRvIFRDUCB0cmFuc3BvcnQgcmVxdWVzdHMgdG8gbWFrZQotCSAgc29tZSBzZXJ2ZXJzIGhhcHB5IChXTVNlcnZlcikuCi0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuaDoKLQkgIEFkZCBzb21lIGRlZmluZXMgZm9yIHRoZSBzdGFuZGFyZCBCYW5kd2lkdGggdHlwZXMuCi0KLTIwMDYtMDktMTkgMTY6MjQ6MTAgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBKdXN0IGEgc21hbGwgZml4IHRvIHRoZSBhcHAgb3B0aW9ucy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSnVzdCBhIHNtYWxsIGZpeCB0byB0aGUgYXBwIG9wdGlvbnMuCi0KLTIwMDYtMDktMTkgMTM6MDg6MzUgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50Lmg6Ci0JKiB0ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYzoKLQkgIEFkZCBWaWRlbyBPcmllbnRhdGlvbiBpbnRlcmZhY2Ugc3VwcG9ydCB0byB2NGwyc3JjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBZGQgVmlkZW8gT3JpZW50YXRpb24gaW50ZXJmYWNlIHN1cHBvcnQgdG8gdjRsMnNyYy4KLQotMjAwNi0wOS0xOSAxMDo1Mzo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvdGVzdC5jOiBGaXggYnVpbGQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvdGVzdC5jOiAobWFpbik6Ci0JICBGaXggYnVpbGQuCi0KLTIwMDYtMDktMTkgMTA6MTQ6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBBZGQgbXMtZ3NtIHRvIHRoZSBzcmMgdGVtcGxhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBBZGQgbXMtZ3NtIHRvIHRoZSBzcmMgdGVtcGxhdGUuCi0KLTIwMDYtMDktMTggMTc6Mzc6NDYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuKjogU21hbGwgY2xlYW51cHMsIGFkZGVkIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAoZ3N0X3J0c3BzcmNfc2VuZCksIChnc3RfcnRzcHNyY19wYXJzZV9tZXRob2RzKSwKLQkgIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX2Nsb3NlKSwgKGdzdF9ydHNwc3JjX3BsYXkpLAotCSAgKGdzdF9ydHNwc3JjX3BhdXNlKSwgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0c3BzcmNfdXJpX2dldF91cmkpLCAoZ3N0X3J0c3BzcmNfdXJpX3NldF91cmkpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICBTbWFsbCBjbGVhbnVwcywgYWRkZWQgZG9jdW1lbnRhdGlvbi4KLQkgIFRyeSB0byBjbGVhbiB1cCB0aGUgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KLQkgIFJlZmFjdG9yIHBhcnNpbmcgdGhlIHN1cHBvcnRlZCBtZXRob2RzLgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX29wZW4pLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9jcmVhdGUpLCAocnRzcF9jb25uZWN0aW9uX3NlbmQpLAotCSAgKHBhcnNlX3Jlc3BvbnNlX3N0YXR1cyksIChwYXJzZV9yZXF1ZXN0X2xpbmUpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKSwgKHJ0c3BfY29ubmVjdGlvbl9jbG9zZSksCi0JICAocnRzcF9jb25uZWN0aW9uX2ZyZWUpOgotCSAgKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6IChydHNwX3RyYW5zcG9ydF9uZXcpLAotCSAgKHJ0c3BfdHJhbnNwb3J0X2luaXQpLCAocnRzcF90cmFuc3BvcnRfcGFyc2UpLAotCSAgKHJ0c3BfdHJhbnNwb3J0X2ZyZWUpOgotCSAgKiBnc3QvcnRzcC9ydHNwdXJsLmM6IChydHNwX3VybF9wYXJzZSk6Ci0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuYzogKHNkcF9tZXNzYWdlX25ldyksIChzZHBfbWVzc2FnZV9pbml0KSwKLQkgIChzZHBfbWVzc2FnZV9jbGVhbiksIChzZHBfbWVzc2FnZV9mcmVlKSwgKHNkcF9tZWRpYV9uZXcpLAotCSAgKHNkcF9tZWRpYV9pbml0KSwgKHNkcF9tZXNzYWdlX3BhcnNlX2J1ZmZlciksIChzZHBfbWVzc2FnZV9kdW1wKToKLQkgIFVzZSBnX3JldHVybl92YWwgc29tZSBtb3JlLgotCSAgKiBnc3QvcnRzcC9ydHNwZGVmcy5oOgotCSAgQWRkIG1vcmUgZW51bSB2YWx1ZXMgdG8gdHJhY2sgaW5pdGlhbCBzdGF0ZXMuCi0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmM6IChydHNwX21lc3NhZ2VfbmV3X3JlcXVlc3QpLAotCSAgKHJ0c3BfbWVzc2FnZV9pbml0X3JlcXVlc3QpLCAocnRzcF9tZXNzYWdlX25ld19yZXNwb25zZSksCi0JICAocnRzcF9tZXNzYWdlX2luaXRfcmVzcG9uc2UpLCAocnRzcF9tZXNzYWdlX2luaXRfZGF0YSksCi0JICAocnRzcF9tZXNzYWdlX3Vuc2V0KSwgKHJ0c3BfbWVzc2FnZV9mcmVlKSwKLQkgIChydHNwX21lc3NhZ2VfYWRkX2hlYWRlciksIChydHNwX21lc3NhZ2VfcmVtb3ZlX2hlYWRlciksCi0JICAocnRzcF9tZXNzYWdlX2dldF9oZWFkZXIpLCAocnRzcF9tZXNzYWdlX3NldF9ib2R5KSwKLQkgIChydHNwX21lc3NhZ2VfdGFrZV9ib2R5KSwgKHJ0c3BfbWVzc2FnZV9nZXRfYm9keSksCi0JICAocnRzcF9tZXNzYWdlX3N0ZWFsX2JvZHkpLCAocnRzcF9tZXNzYWdlX2R1bXApOgotCSAgKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5oOgotCSAgUmVvcmRlciBhcmd1bWVudHMsIG9iamVjdCBnb2VzIGFzIHRoZSBmaXJzdCBvbmUuCi0JICBVc2UgZ19yZXR1cm5fdmFsIHNvbWUgbW9yZS4KLQotMjAwNi0wOS0xOCAxNTozNjoxNCArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICBGaXggR1NUX0JVRkZFUl9EVVJBVElPTi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4IEdTVF9CVUZGRVJfRFVSQVRJT04uCi0KLTIwMDYtMDktMTggMTQ6MDA6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuKjogRXhwb3J0IHNvbWV0aW1lcyBzb3VyY2UgcGFkIHdpdGggY29ycmVjdCBjYXBzIG9uIHRoZSB0ZW1wbGF0ZSwgY3JlYXRlIHRoZSBnaG9zdHBhZCBmcm9tIHRoZSB0ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLCAoZ3N0X3J0c3BzcmNfcHVzaF9ldmVudCksCi0JICAoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY191cmlfc2V0X3VyaSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEV4cG9ydCBzb21ldGltZXMgc291cmNlIHBhZCB3aXRoIGNvcnJlY3QgY2FwcyBvbiB0aGUgdGVtcGxhdGUsIGNyZWF0ZQotCSAgdGhlIGdob3N0cGFkIGZyb20gdGhlIHRlbXBsYXRlLgotCSAgUmVtb3ZlIFJUQ1AgdGVtcGxhdGUgYXMgd2UgbmV2ZXIgZXhwb3NlIFJUQ1AuCi0JICBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBib2R5IHNpemUuCi0JICBBdm9pZCBtZW1jcHkgd2hlbiBjcmVhdGluZyB0aGUgb3V0cHV0IGJ1ZmZlci4KLQkgIFByb3Blcmx5IHBvc3QgYW4gZXJyb3IgYW5kIHNlbmQgRU9TIHdoZW4gdGhlIGxvb3AgZnVuY3Rpb24gaXMgc2h1dCBkb3duLgotCi0yMDA2LTA5LTE4IDExOjI5OjEyICswMDAwICBMdXR6IE11ZWxsZXIgPGx1dHpAdG9wZnJvc2UuZGU+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0c3BzcmMuKjogTWFrZSBzdXJlIHdlIGNhbiBuZXZlciBzZXQgYW4gaW52YWxpZCBsb2NhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQmFzZWQgb24gcGF0Y2ggYnk6IEx1dHogTXVlbGxlciA8bHV0eiBhdCB0b3Bmcm9zZSBkb3QgZGU+Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHNwc3JjX2luaXQpLCAoZ3N0X3J0c3BzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCSAgKGdzdF9ydHNwc3JjX3VyaV9nZXRfdXJpKSwgKGdzdF9ydHNwc3JjX3VyaV9zZXRfdXJpKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSAgTWFrZSBzdXJlIHdlIGNhbiBuZXZlciBzZXQgYW4gaW52YWxpZCBsb2NhdGlvbi4KLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuYzogKHJ0c3BfbWVzc2FnZV9zdGVhbF9ib2R5KToKLQkgICogZ3N0L3J0c3AvcnRzcG1lc3NhZ2UuaDoKLQkgIEFkZGVkIF9zdGVhbF9ib2R5IG1ldGhvZCBmb3IgZnV0dXJlIHVzZS4KLQkgICogZ3N0L3J0c3AvcnRzcHVybC5jOiAocnRzcF91cmxfcGFyc2UpLCAocnRzcF91cmxfZnJlZSk6Ci0JICBNYWtlIGZyZWVpbmcgb2YgTlVMTCB1cmwgcmV0dXJuIGltbWVkaWF0bHkuCi0KLTIwMDYtMDktMTggMTA6NDI6NTIgKzAwMDAgIEx1dHogTXVlbGxlciA8bHV0ekB0b3Bmcm9zZS5kZT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy4qOiBVc2UgYm9pbGVycGxhdGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBMdXR6IE11ZWxsZXIgPGx1dHogYXQgdG9wZnJvc2UgZG90IGRlPgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChfZG9faW5pdCksIChnc3RfcnRzcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfcnRzcHNyY19pbml0KSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9zZXR1cF9ydHApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGdzdF9ydHNwc3JjX3BsYXkpLAotCSAgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIFVzZSBib2lsZXJwbGF0ZS4KLQkgIE1ha2UgcnRzcHNyYyBzdWJjbGFzcyBHc3RCaW4gdG8gbWFrZSBzdGF0ZSBjaGFuZ2VzIGVhc2llci4KLQkgIEFkZCBSYW5nZSBoZWFkZXIgZmllbGQgb24gdGhlIFBMQVkgcmVxdWVzdC4KLQotMjAwNi0wOS0xOCAwODo1OToxNyArMDAwMCAgVGhpanMgVmVybWVpciA8dGhpanMudmVybWVpckBiYXJjby5jb20+Ci0KLQkgIGdzdC9ydHNwLzogU21hbGwgY2xlYW51cHMuIHdoZW4gbXVsdGljYXN0IGlzIHNlbGVjdGVkIGFzIHRoZSB0cmFuc3BvcnQsIGNyZWF0ZSBVRFAgc291cmNlcyBhbmQgY29ubmVjdCB0byB0aGUgbXVsdGljYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogVGhpanMgVmVybWVpciA8dGhpanMgZG90IHZlcm1laXIgYXQgYmFyY28gZG90IGNvbT4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc2V0X3N0YXRlKSwKLQkgIChnc3RfcnRzcHNyY19tZWRpYV90b19jYXBzKSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9zZXR1cF9ydHApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCSAgKGdzdF9ydHNwc3JjX2Nsb3NlKSwgKGdzdF9ydHNwc3JjX3BsYXkpLCAoZ3N0X3J0c3BzcmNfcGF1c2UpOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAoaW5ldF9hdG9uKToKLQkgIFNtYWxsIGNsZWFudXBzLgotCSAgd2hlbiBtdWx0aWNhc3QgaXMgc2VsZWN0ZWQgYXMgdGhlIHRyYW5zcG9ydCwgY3JlYXRlIFVEUCBzb3VyY2VzIGFuZAotCSAgY29ubmVjdCB0byB0aGUgbXVsdGljYXN0IGdyb3VwLgotCSAgTW92ZSBwYXJzaW5nIGFuZCBzZXR0aW5nIG9mIGNhcHMgdG8gYSBjb21tb24gcGxhY2UuCi0JICBGaXhlcyAjMzQ5ODk0LgotCi0yMDA2LTA5LTE2IDIyOjE0OjM1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIE1vcmUgR19PQkpFQ1QgbWFjcm8gZml4aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9oZXJtZXMvZ3N0aGVybWVzY29sb3JzcGFjZS5jOgotCSAgKiBleHQvaXZvcmJpcy92b3JiaXNmaWxlLmM6Ci0JICAqIGV4dC9sY3MvZ3N0Y29sb3JzcGFjZS5jOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmg6Ci0JICAqIGV4dC94aW5lL3hpbmVhdWRpb2RlYy5jOgotCSAgKiBleHQveGluZS94aW5lYXVkaW9zaW5rLmM6Ci0JICAqIGV4dC94aW5lL3hpbmVpbnB1dC5jOgotCSAgKiBnc3QvY2hhcnQvZ3N0Y2hhcnQuYzoKLQkgICogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkgICogZ3N0L2dhbWVzL2dzdHB1enpsZS5jOgotCSAgKiBnc3QvbGlicmZiL2dzdHJmYnNyYy5jOgotCSAgKiBnc3QvbWl4bWF0cml4L21peG1hdHJpeC5jOgotCSAgKiBnc3QvbnNmL2dzdG5zZi5oOgotCSAgKiBnc3QvdmJpZGVjL2dzdHZiaWRlYy5jOgotCSAgKiBnc3QvdmlydHVhbGR1Yi9nc3R4c2hhcnBlbi5jOgotCSAgTW9yZSBHX09CSkVDVCBtYWNybyBmaXhpbmcuCi0KLTIwMDYtMDktMTYgMjE6NTc6MjkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgTW9yZSBHX09CSkVDVCBtYWNybyBmaXhpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkgICogZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6Ci0JICAqIGdzdC9kZWJ1Zy9uZWdvdGlhdGlvbi5jOgotCSAgKiBnc3QvZGVidWcvdGVzdHBsdWdpbi5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3RkaWNlLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkgICogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW90ZW1wbGF0ZS5jOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5oOgotCSAgTW9yZSBHX09CSkVDVCBtYWNybyBmaXhpbmcuCi0KLTIwMDYtMDktMTYgMTQ6MzA6NTkgKzAwMDAgIFl2ZXMgTGVmZWJ2cmUgPGl2YW5vaGVAYWJhY29tLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguYzogQ29ycmVjdGx5IHNldCB0aGUgZHdMZW5ndGggaW4gc3RyaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFl2ZXMgTGVmZWJ2cmUgPGl2YW5vaGUgYXQgYWJhY29tIGRvdCBjb20+Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9zdG9wX2ZpbGUpOgotCSAgQ29ycmVjdGx5IHNldCB0aGUgZHdMZW5ndGggaW4gc3RyaC4KLQkgIFdpdGggdGhpcyBwYXRjaCwgdGhlIGZpbGUgZHVyYXRpb24gaXMgbm93IGRpc3BsYXllZCBjb3JyZWN0bHkgaW4gd2luZG93Ci0JICBtZWRpYSBwbGF5ZXIgYW5kIHRoZSBBVkkgcGxheXMgY29tcGxldGVseS4gRml4ZXMgIzM1NjE0NwotCi0yMDA2LTA5LTE1IDE5OjExOjAwICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBUaGUgdGVzdCBhcHBsaWNhdGlvbiBhbmQgdGhlIHBsZ2luZCBlcnJvciBtZXNzYWdlcyBoYXMgYmVlbiBpbXByb3ZlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVGhlIHRlc3QgYXBwbGljYXRpb24gYW5kIHRoZSBwbGdpbmQgZXJyb3IgbWVzc2FnZXMgaGFzIGJlZW4gaW1wcm92ZWQuCi0KLTIwMDYtMDktMTUgMTc6MTA6MjIgKzAwMDAgIERhcnJlbiBLZW5ueSA8ZGFycmVuLmtlbm55QHN1bi5jb20+Ci0KLQkgIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOiBTZXQgdGhlIG91dHB1dCB0cmFjayBhcyB0aGUgTUFTVEVSIHNvIHRoYXQgdGhlIGdub21lLXNldHRpbmdzLWRhZW1vbiBrZXliaW5kaW5ncy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogRGFycmVuIEtlbm55IDxkYXJyZW4gZG90IGtlbm55IGF0IHN1biBkb3QgY29tPgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkgIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2J1aWxkX2xpc3QpOgotCSAgU2V0IHRoZSBvdXRwdXQgdHJhY2sgYXMgdGhlIE1BU1RFUiBzbyB0aGF0IHRoZSBnbm9tZS1zZXR0aW5ncy1kYWVtb24KLQkgIGtleWJpbmRpbmdzIGZvciBjaGFuZ2luZyB0aGUgdm9sdW1lIHVzaW5nIHRoZSBrZXlib2FyZCB3b3Jrcy4KLQkgIEZpeGVzICMzNTYxNDIuCi0KLTIwMDYtMDktMTUgMTY6MDE6NDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogRml4IGRvY3VtZW50YXRpb24sIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb250cm9sIHRoZSBmcmFtZXJhdGUgb2YganBlZ2RlYyB1c2luZyBmaWx0ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhaW4pOgotCSAgRml4IGRvY3VtZW50YXRpb24sIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb250cm9sIHRoZSBmcmFtZXJhdGUgb2YganBlZ2RlYwotCSAgdXNpbmcgZmlsdGVyZWQgY2FwcyB5ZXQuIEZpeGVzICMzNTUyMTAuCi0JICBSZXR1cm4gdGhlIGRvd25zdHJlYW0gR3N0Rmxvd1JldHVybiBpbnN0ZWFkIG9mIEdTVF9GTE9XX09LIHNvIHRoYXQgd2UKLQkgIHN0b3Agd2hlbiB0aGVyZSBpcyBhbiBlcnJvci4KLQotMjAwNi0wOS0xNCAxMTowNTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogRG9uJ3QgaW50ZXJwcmV0IGEgZmlyc3QgYnVmZmVyIHdpdGggYW4gb2Zmc2V0IG9mIE5PTkUgYXMgJ2Zyb20gdGhlIG1pZGRsZSBvZiB0aGUgc3RyZWFtJywgYnV0IG9ubHkgYSBmaXJzdCBidWZmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9jaGFpbl9wYXJzZV90YWcpOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9jaGFpbik6Ci0JICBEb24ndCBpbnRlcnByZXQgYSBmaXJzdCBidWZmZXIgd2l0aCBhbiBvZmZzZXQgb2YgTk9ORSBhcwotCSAgJ2Zyb20gdGhlIG1pZGRsZSBvZiB0aGUgc3RyZWFtJywgYnV0IG9ubHkgYSBmaXJzdCBidWZmZXIKLQkgIHRoYXQgaGFzIGEgdmFsaWQgYnVmZmVyIG9mZnNldCB0aGF0J3Mgbm9uLXplcm8gKHNlZSAjMzQ1NDQ5KS4KLQotMjAwNi0wOS0xNCAxMDozODo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4Lio6IFdoZW4gd2UgbWVyZ2UvY29sbGVjdCBtdWx0aXBsZSBpbmNvbWluZyBidWZmZXJzIGZvciB0eXBlZmluZGluZyBwdXJwb3Nlcywga2VlcCBhbiBpbml0aWFsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6IChnc3RfaWN5ZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9pY3lkZW11eF90eXBlZmluZF9vcl9mb3J3YXJkKToKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4Lmg6Ci0JICBXaGVuIHdlIG1lcmdlL2NvbGxlY3QgbXVsdGlwbGUgaW5jb21pbmcgYnVmZmVycyBmb3IgdHlwZWZpbmRpbmcKLQkgIHB1cnBvc2VzLCBrZWVwIGFuIGluaXRpYWwgMCBvZmZzZXQgb24gdGhlIGZpcnN0IG91dGdvaW5nIGJ1ZmZlcgotCSAgYXMgd2VsbCAob3RoZXJ3aXNlIGlkM2RlbXV4IHdvbid0IHdvcmsgcmlnaHQpLiBGaXhlcyAjMzQ1NDQ5LgotCSAgQWxzbyBNYWtlIGJ1ZmZlciBtZXRhZGF0YSB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyBidWZmZXIgY2Fwcy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWN5ZGVtdXguYzogKHR5cGVmaW5kX3N1Y2NlZWQpLAotCSAgKGNsZWFudXBfaWN5ZGVtdXgpLCAocHVzaF9kYXRhKSwgKEdTVF9TVEFSVF9URVNUKSwKLQkgIChpY3lkZW11eF9zdWl0ZSk6Ci0JICBTbWFsbCB0ZXN0IGNhc2UgZm9yIHRoZSBhYm92ZS4KLQotMjAwNi0wOS0xMyAxMzoyNjoxNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IE1vcmUgY29kZSByZXVzZSBhbmQgYmV0dGVyIGxvZ2dpbmcgaW4gX3BlZWtfY2h1bmsoKS4gUmVpbnRyb2R1Y2UgY2hlY2sgZm9yIGNodW5rIHNpemVzIGJlZm9yZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmspLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfc3luYyksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyX3B1c2gpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpLAotCSAgKGdzdF9hdmlfZGVtdXhfbG9vcCk6Ci0JICBNb3JlIGNvZGUgcmV1c2UgYW5kIGJldHRlciBsb2dnaW5nIGluIF9wZWVrX2NodW5rKCkuIFJlaW50cm9kdWNlIGNoZWNrCi0JICBmb3IgY2h1bmsgc2l6ZXMgYmVmb3JlIHJlYWRpbmcgdGhlbSAoYXZvaWQgb29tKS4gQmV0dGVyIGhhbmRsaW5nIGZvcgotCSAgaW52YWxpZCBjaHVua3NpemVzIHdoZW4gc3RyZWFtaW5nLgotCi0yMDA2LTA5LTEyIDIwOjE4OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiBJbXBsZW1lbnRzIHN0b3AoKSB0byBjbGVhciB0aGUgYWRhcHRlciBhbmQgZXZlbnQoKSB0byBjbGVhciB0aGUgYWRhcHRlciBvbiBGTFVTSF9TVE9QIGFuZC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zcGVjdHJ1bV9zdGFydCksIChnc3Rfc3BlY3RydW1fc3RvcCksIChnc3Rfc3BlY3RydW1fZXZlbnQpOgotCSAgSW1wbGVtZW50cyBzdG9wKCkgdG8gY2xlYXIgdGhlIGFkYXB0ZXIgYW5kIGV2ZW50KCkgdG8gY2xlYXIgdGhlCi0JICBhZGFwdGVyIG9uIEZMVVNIX1NUT1AgYW5kIEVPUy4KLQotMjAwNi0wOS0xMSAyMDozODo0MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvbGV2ZWwvZ3N0bGV2ZWwuKjogRml4IHR5cGUgbWl4dXAgaW4gbGV2ZWwtPmludGVydmFsIChnZG91YmxlPC0+Z3VpbnQ2NCkuIFNwb3R0ZWQgYnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9zZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkgIEZpeCB0eXBlIG1peHVwIGluIGxldmVsLT5pbnRlcnZhbCAoZ2RvdWJsZTwtPmd1aW50NjQpLiBTcG90dGVkIGJ5Ci0JICBSZW7DqSBTdGFkbGVyCi0KLTIwMDYtMDktMTEgMTg6MjM6NTkgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLio6IEZpeCB0eXBlIG1peHVwIGluIHNwZWN0cnVtLT5pbnRlcnZhbCAoZ2RvdWJsZTwtPmd1aW50NjQpLiBTcG90dGVkIGJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1faW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX3NldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5oOgotCSAgRml4IHR5cGUgbWl4dXAgaW4gc3BlY3RydW0tPmludGVydmFsIChnZG91YmxlPC0+Z3VpbnQ2NCkuIFNwb3R0ZWQgYnkKLQkgIFJlbsOpIFN0YWRsZXIKLQotMjAwNi0wOS0xMSAxODowMjozOSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vZGVtby1vc3NzcmMuYzogVXNlIG1vcmUgZGVmaW5lcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAoZHJhd19zcGVjdHJ1bSksIChtYWluKToKLQkgIFVzZSBtb3JlIGRlZmluZXMKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1faW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX2Rpc3Bvc2UpLCAoZ3N0X3NwZWN0cnVtX3NldF9jYXBzKSwKLQkgIChnc3Rfc3BlY3RydW1fdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmg6Ci0JICBBcHBseSBzb21lIG9mIHRoZSBzcGVjdHJ1bSBjbGVhbnVwIGNoYW5nZXMgc3VnZ2VzdGVkIGluICMzNDgwODUuCi0KLTIwMDYtMDktMDggMTY6NDc6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCByZXF1aXJlbWVudHMgb2YgLWJhc2UgKHZpZGVvY3JvcCB0ZXN0IGNhc2UgbmVlZHMgdGhpcykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQnVtcCByZXF1aXJlbWVudHMgb2YgLWJhc2UgKHZpZGVvY3JvcCB0ZXN0IGNhc2UgbmVlZHMgdGhpcykuCi0JICAqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JICBEb2N1bWVudCBzbG9wcHkgaGFuZGxpbmcgb2Ygc3Vic2FtcGxlZCBjaHJvbWEgcGxhbmVzIGlmCi0JICBsZWZ0L3RvcCBjcm9wcGluZyBpcyBhbiBvZGQgbnVtYmVyLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzogKGhhbmRvZmZfY2IpLAotCSAgKHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nX2luaXRfY29udGV4dCksCi0JICAodmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmdfZGVpbml0X2NvbnRleHQpLAotCSAgKHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nKSwgKGNoZWNrXzF4MV9idWZmZXIpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHZpZGVvY3JvcF9zdWl0ZSksIChtYWluKToKLQkgIEFkZCBhbm90aGVyIHVuaXQgdGVzdCB0aGF0IGNyb3BzIHRoZSBpbnB1dCB0byAxeDEgKGFuZCBjaGVja3MKLQkgIHRoYXQgdGhhdCBwaXhlbCBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlcyBpbiBhIG51bWJlciBvZiBmb3JtYXRzKS4KLQotMjAwNi0wOS0wOCAxMTowNDoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3ZpZGVvY3JvcC86IFNvbWUgcXVpY2sgdGVzdHMgaW5kaWNhdGUgdGhhdCBpdCBkb2Vzbid0IG1ha2UgYSBncmVhdCBkZWFsIG9mIHNlbnNlIHRvIHVzZSBsaWJvaWwgaGVyZSwgYXQgbGVhc3Qgbm90Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3ZpZGVvY3JvcC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzogKGdzdF92aWRlb19jcm9wX2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wYWNrZWQpLAotCSAgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wbGFuYXIpOgotCSAgU29tZSBxdWljayB0ZXN0cyBpbmRpY2F0ZSB0aGF0IGl0IGRvZXNuJ3QgbWFrZSBhIGdyZWF0IGRlYWwKLQkgIG9mIHNlbnNlIHRvIHVzZSBsaWJvaWwgaGVyZSwgYXQgbGVhc3Qgbm90IGZvciB0aGUgbWVtY3B5KClzCi0JICB3ZSBkbywgc28gcmVtb3ZlIGxpYm9pbCB1c2FnZSB1bnRpbCB0aGVyZSBpcyBjbGVhciBldmlkZW5jZQotCSAgaXQgYWN0dWFsbHkgbWFrZXMgYSBwb3NpdGl2ZSBkaWZmZXJlbmNlIHNvbWV3aGVyZS4KLQotMjAwNi0wOS0wNiAwOTowNTozMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFJldmVydCBvbmUgY2hhbmdlIHRvIGZpeCBzdHJlYW1pbmcgYXZpIChhZGFwdGVyIHNpemUgIT0gZGF0YSBzaXplKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3JlYWRfc3ViaW5kZXhlc19wdWxsKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N5bmMpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyX3B1c2gpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgUmV2ZXJ0IG9uZSBjaGFuZ2UgdG8gZml4IHN0cmVhbWluZyBhdmkgKGFkYXB0ZXIgc2l6ZSAhPSBkYXRhIHNpemUpLgotCi0yMDA2LTA5LTA0IDE2OjIxOjE3ICswMDAwICBGcsOpZMOpcmljIFJpc3MgPGZyZWRlcmljLnJpc3NAZ21haWwuY29tPgotCi0JICBnc3QvbWF0cm9za2EvOiBBZGQgc3VwcG9ydCBmb3IgVk9CU1VCIHN1YnRpdGxlIHRyYWNrcyBhbmQgemxpYi1jb21wcmVzc2VkIHRyYWNrcy4gTWFrZSBzdXJlIHdlIHN0YXJ0IG9uIGEga2V5ZnJhbWUgYWYuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEZyw6lkw6lyaWMgUmlzcyAgPGZyZWRlcmljLnJpc3MgYXQgZ21haWwgZG90IGNvbT4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfdHJhY2tfZnJlZSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcmVhZF90cmFja19lbmNvZGluZ3MpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwgKGdzdF9tYXRyb3NrYV9kZWNvZGVfYnVmZmVyKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cF9vcl9zaW1wbGVibG9jayksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3N1YnRpdGxlX2NhcHMpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgVk9CU1VCIHN1YnRpdGxlIHRyYWNrcyBhbmQgemxpYi1jb21wcmVzc2VkCi0JICB0cmFja3MuIE1ha2Ugc3VyZSB3ZSBzdGFydCBvbiBhIGtleWZyYW1lIGFmdGVyIGEgc2Vlay4gKCMzNDMzNDgpCi0KLTIwMDYtMDktMDQgMTU6MDY6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IG5vdCBwZXJmZWN0IHlldCB0aG91Z2gsIG5lZWRzIHNvbWUgdHdlYWtpbmcgaW4gZmxhY2RlYzsgYWxzbywgc2Vla2luZyBjb3VsZCBiZSBiZXR0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfcHVzaF9oZHJfYnVmKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcHVzaF9mbGFjX2NvZGVjX3ByaXZfZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfeGlwaF9jb2RlY19wcml2X2RhdGEpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2FwcyksIChnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgIEFkZCBiYXNpYyBGTEFDIHN1cHBvcnQgKCMzMTE1ODYpLCBub3QgcGVyZmVjdCB5ZXQgdGhvdWdoLCBuZWVkcyBzb21lCi0JICB0d2Vha2luZyBpbiBmbGFjZGVjOyBhbHNvLCBzZWVraW5nIGNvdWxkIGJlIGJldHRlci4KLQkgIERvIGJldHRlciBib3VuZHMgY2hlY2tpbmcgd2hlbiBkZXNlcmlhbGlzaW5nIHZvcmJpcyBzdHJlYW0gaGVhZGVycwotCSAgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBvbiBiYWQgaW5wdXQuCi0KLTIwMDYtMDktMDQgMDk6MzQ6MjUgKzAwMDAgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgotCi0JICBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6IFNlZWtpbmcgYmFjayBpbiBhIGZpbGUgY29udGFpbmluZyBhIENNTUwgc3RyZWFtIGVycm9ycyBvdXQgaWYgdGhlIHNlZWsgZ29lcyBiYWNrIHVwIHRvIHRoZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvIGF0IG5udmEgZG90IG9yZz4KLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOiAoZ3N0X2NtbWxfZGVjX2NoYWluKToKLQkgIFNlZWtpbmcgYmFjayBpbiBhIGZpbGUgY29udGFpbmluZyBhIENNTUwgc3RyZWFtIGVycm9ycyBvdXQgaWYgdGhlIHNlZWsKLQkgIGdvZXMgYmFjayB1cCB0byB0aGUgQ01NTCBoZWFkZXJzLiBUaGlzIGlzIGJlY2F1c2UgYWZ0ZXIgdGhlIHNlZWsgdGhlIHhtbAotCSAgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA8P3htbCAuLi4/PiBpcyBzdWJtaXR0ZWQgdG8gdGhlIHhtbCBwYXJzZXIgYWdhaW4sCi0JICB3aGljaCByZXN1bHRzIGluIGFuIGVycm9yLiBUaGUgYXR0YWNoZWQgcGF0Y2ggZml4ZXMgdGhlIHByb2JsZW0uCi0JICBGaXhlcyAjMzUzOTA4LgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmg6Ci0JICBGaXggYXV0aG9ycyBuYW1lLgotCi0yMDA2LTA5LTAzIDEwOjQ2OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzogTW9yZSB0ZXN0czogY2hlY2sgcGFzc3Rocm91Z2ggbW9kZSBhbmQgY2FwcyB0cmFuc2Zvcm0gaW4gYm90aCBkaXJlY3Rpb25zIHdpdGggZml4ZWQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzogKGhhbmRvZmZfY2IpLAotCSAgKGJ1ZmZlcl9wcm9iZV9jYiksICh0ZXN0X2NhcHNfdHJhbnNmb3JtKSwgKHRlc3RfcGFzc3Rocm91Z2gpLAotCSAgKG5vdGdzdF92YWx1ZV9saXN0X2dldF9udGhfaW50KSwgKHZpZGVvY3JvcF9zdWl0ZSk6Ci0JICBNb3JlIHRlc3RzOiBjaGVjayBwYXNzdGhyb3VnaCBtb2RlIGFuZCBjYXBzIHRyYW5zZm9ybSBpbgotCSAgYm90aCBkaXJlY3Rpb25zIHdpdGggZml4ZWQgdmFsdWVzLCByYW5nZXMgYW5kIGxpc3RzLgotCi0yMDA2LTA5LTAyIDE4OjQ5OjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGQgdmlkZW9jcm9wIHRvIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgQWRkIHZpZGVvY3JvcCB0byBkb2NzLgotCSAgKiBnc3QvdmlkZW9jcm9wL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jOgotCSAgKiBnc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5oOgotCSAgTW92ZSBib2lsZXJwbGF0ZSBzdHVmZiBhbmQgc3RydWN0dXJlcyBpbnRvIGEgaGVhZGVyIGZpbGUuCi0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYzogKHZpZGVvX2Nyb3BfZ2V0X3Rlc3RfY2FwcyksCi0JICAodGVzdF91bml0X3NpemVzKSwgKHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nX2luaXRfY29udGV4dCksCi0JICAodmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmdfZGVpbml0X2NvbnRleHQpLAotCSAgKHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nKSwgKHRlc3RfY3JvcHBpbmcpLCAodmlkZW9jcm9wX3N1aXRlKToKLQkgIEFkZCB1bml0IHRlc3RzIGZvciB2aWRlb2Nyb3AuCi0KLTIwMDYtMDktMDIgMTU6MzA6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFBvcnQvcmV3cml0ZSB2aWRlb2Nyb3AgZnJvbSBzY3JhdGNoIGZvciBHU3RyZWFtZXItMC4xMCwgYW5kIG1ha2UgaXQgc3VwcG9ydCBhbGwgZm9ybWF0cyB2aWRlb3NjYWxlIHN1cHBvcnRzICgjMzQ1NjUzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC92aWRlb2Nyb3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6IChnc3RfdmlkZW9fY3JvcF9iYXNlX2luaXQpLAotCSAgKGdzdF92aWRlb19jcm9wX2NsYXNzX2luaXQpLCAoZ3N0X3ZpZGVvX2Nyb3BfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2Nyb3BfZ2V0X2ltYWdlX2RldGFpbHNfZnJvbV9jYXBzKSwKLQkgIChnc3RfdmlkZW9fY3JvcF9nZXRfdW5pdF9zaXplKSwgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wYWNrZWQpLAotCSAgKGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wbGFuYXIpLCAoZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtKSwKLQkgIChnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fZGltZW5zaW9uKSwKLQkgIChnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fZGltZW5zaW9uX3ZhbHVlKSwKLQkgIChnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fY2FwcyksIChnc3RfdmlkZW9fY3JvcF9zZXRfY2FwcyksCi0JICAoZ3N0X3ZpZGVvX2Nyb3Bfc2V0X3Byb3BlcnR5KSwgKGdzdF92aWRlb19jcm9wX2dldF9wcm9wZXJ0eSksCi0JICAocGx1Z2luX2luaXQpOgotCSAgUG9ydC9yZXdyaXRlIHZpZGVvY3JvcCBmcm9tIHNjcmF0Y2ggZm9yIEdTdHJlYW1lci0wLjEwLCBhbmQgbWFrZQotCSAgaXQgc3VwcG9ydCBhbGwgZm9ybWF0cyB2aWRlb3NjYWxlIHN1cHBvcnRzICgjMzQ1NjUzKS4KLQotMjAwNi0wOS0wMiAxNDo0NTowNCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBzeXMvdjRsMi86IFdoaXRlc3BhY2UgY2xlYW51cHMsIGRhc2hpZnkgcHJvcGVydHktbmFtZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzoKLQkgIChnc3RfdjRsMl9vYmplY3RfaW5zdGFsbF9wcm9wZXJ0aWVzX2hlbHBlcik6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JICBXaGl0ZXNwYWNlIGNsZWFudXBzLCBkYXNoaWZ5IHByb3BlcnR5LW5hbWVzLgotCi0yMDA2LTA5LTAyIDE0OjI4OjU1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHN5cy92NGwyLzogQ2xlYW51cCBlcnJvciBtZXNzYWdlcyBhbmQgdW5pZnkgaGVhZGVyIGNvbW1lbnRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmM6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaDoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOiAoZ3N0X3Y0bDJfeG92ZXJsYXlfb3Blbik6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5oOgotCSAgKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IChnc3RfdjRsMl9nZXRfY2FwYWJpbGl0aWVzKSwKLQkgIChnc3RfdjRsMl9vcGVuKToKLQkgICogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSAgKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19xdWV1ZV9mcmFtZSksCi0JICAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KToKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgQ2xlYW51cCBlcnJvciBtZXNzYWdlcyBhbmQgdW5pZnkgaGVhZGVyIGNvbW1lbnRzCi0KLTIwMDYtMDgtMzAgMTg6MDE6NTIgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgQW5vdGhlciBzbWFsbCBmaXggdG8gc2V0X2NhcHMgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFub3RoZXIgc21hbGwgZml4IHRvIHNldF9jYXBzIGZ1bmN0aW9uLgotCi0yMDA2LTA4LTMwIDEzOjMwOjEzICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIFNlbmQgbmV3X3NlZ21lbnQgaW4gR1NUX0ZPUk1BVF9USU1FIGluc3RlYWQgb2YgaW4gR1NUX0ZPUk1BVF9CWVRFUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgU2VuZCBuZXdfc2VnbWVudCBpbiBHU1RfRk9STUFUX1RJTUUgaW5zdGVhZCBvZiBpbiBHU1RfRk9STUFUX0JZVEVTLgotCi0yMDA2LTA4LTMwIDExOjM2OjA2ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIEEgc21hbGwgZml4IHRvIHNldF9jYXBzIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBIHNtYWxsIGZpeCB0byBzZXRfY2FwcyBmdW5jdGlvbi4KLQotMjAwNi0wOC0zMCAxMToyNzo0MCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBSZXNldCBlYWNoIHN0cmVhbXMgbGFzdF9mbG93IHRvIEdTVF9GTE9XX09LLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIChnc3RfcXRkZW11eF9kb19zZWVrKToKLQkgIFJlc2V0IGVhY2ggc3RyZWFtcyBsYXN0X2Zsb3cgdG8gR1NUX0ZMT1dfT0suCi0JICAoZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCk6Ci0JICBSZW1vdmluZyBteXN0aWMgbW9kaWZpY2F0aW9ucyBmb3IgZ29vZC4KLQotMjAwNi0wOC0zMCAxMTowNzozNyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IHB1dCBiYWNrICdzZWdtZW50IHN0YXJ0PD1zdG9wJyBjaGFuZ2UgdGhhdCB3YXMgbXlzdGljYWxseSByZXZlcnRlZCBieSB0aGUgbGFzdCBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9hY3RpdmF0ZV9zZWdtZW50KSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyZWUpOgotCSAgcHV0IGJhY2sgJ3NlZ21lbnQgc3RhcnQ8PXN0b3AnIGNoYW5nZSB0aGF0IHdhcyBteXN0aWNhbGx5IHJldmVydGVkIGJ5Ci0JICB0aGUgbGFzdCBjb21taXQKLQotMjAwNi0wOC0zMCAxMDo0Mzo1MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEZpeCB0aGUgYnVpbGQgZm9yIGRpc2FibGVkIGRlYnVnCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCksCi0JICAocXRkZW11eF9wYXJzZV90cmVlKToKLQkgIEZpeCB0aGUgYnVpbGQgZm9yIGRpc2FibGVkIGRlYnVnCi0KLTIwMDYtMDgtMjkgMjA6NTk6NDcgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgRml4ZWQgZnJhbWVyYXRlIG5lZ290aWF0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXhlZCBmcmFtZXJhdGUgbmVnb3RpYXRpb24uCi0KLTIwMDYtMDgtMjggMTc6NDc6MjkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogTWFrZSBzdXJlIHNlZ21lbnQgc3RhcnQ8PXN0b3AgaW4gd2VpcmQgcXVpY2t0aW1lIGZpbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQpLAotCSAgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkgIChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgTWFrZSBzdXJlIHNlZ21lbnQgc3RhcnQ8PXN0b3AgaW4gd2VpcmQgcXVpY2t0aW1lIGZpbGVzLgotCi0yMDA2LTA4LTI4IDE2OjU5OjEzICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jIChnc3RfZHYxMzk0c3JjX2Zyb21fcmF3MTM5NGhhbmRsZSk6IE5ldyBoZWxwZXIgZnVuY3Rpb24gdG8gbGVzc2VuIHRoZSBpZmRlZnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDgtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jIChnc3RfZHYxMzk0c3JjX2Zyb21fcmF3MTM5NGhhbmRsZSk6Ci0JICBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIGxlc3NlbiB0aGUgaWZkZWZzLgotCSAgKEdTVF9JTkZPX09CSkVDVCk6Ci0JICAoZ3N0X2R2MTM5NHNyY19pc29fcmVjZWl2ZSk6IFVzZSBpdC4KLQkgIChnc3RfZHYxMzk0c3JjX2NyZWF0ZSk6IEFsc28gdXNlIHRoZSBjb250cm9sIHNvY2tldHMgaW4gaWVjNjE4ODMKLQkgIG1vZGUuCi0JICAoZ3N0X2R2MTM5NHNyY19zdGFydCwgZ3N0X2R2MTM5NHNyY19zdG9wKTogQWx3YXlzIHVzZSBhIHNlcGFyYXRlCi0JICBoYW5kbGUgZm9yIEFWQyBvcGVyYXRpb25zOyBmaXhlcyAjMzQ4MjMzLgotCi0yMDA2LTA4LTI4IDE0OjU5OjA1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogYWRkIGNvbW1lbnRzIGFuZCBtb3JlIGRlYnVnIGxvZ2dpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IChnc3RfdjRsMl9maWxsX2xpc3RzKToKLQkgIGFkZCBjb21tZW50cyBhbmQgbW9yZSBkZWJ1ZyBsb2dnaW5nCi0KLTIwMDYtMDgtMjcgMTc6MTQ6MDYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgUmVuYW1lIGFnYWluIChhdWRpb2Z4Z29vZCAtPiBhdWRpb2Z4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4Z29vZC54bWw6Ci0JICAqIGdzdC9hdWRpb2Z4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meC9hdWRpb2Z4LmM6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC8uY3ZzaWdub3JlOgotCSAgKiBnc3QvYXVkaW9meGdvb2QvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb2Z4LmM6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmM6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmg6Ci0JICBSZW5hbWUgYWdhaW4gKGF1ZGlvZnhnb29kIC0+IGF1ZGlvZngpLgotCi0yMDA2LTA4LTI3IDEzOjEyOjUyICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogSW5pdGlhbHplIHZhcmlhYmxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X25leHRfZGF0YV9idWZmZXIpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX3NjYW4pOgotCSAgSW5pdGlhbHplIHZhcmlhYmxlcy4KLQotMjAwNi0wOC0yNSAxNjoyMTozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC4qOiBNb3JlIGF0dGVtcHRzIHRvIHR1cm4gdGhpcyBpbnRvIHJlYWRhYmxlIGNvZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9jbGFzc19pbml0KSwKLQkgIChnc3RfYXZpX2RlbXV4X2luaXQpLCAoZ3N0X2F2aV9kZW11eF9maW5hbGl6ZSksCi0JICAoZ3N0X2F2aV9kZW11eF9yZXNldCksIChnc3RfYXZpX2RlbXV4X2luZGV4X2xhc3QpLAotCSAgKGdzdF9hdmlfZGVtdXhfaW5kZXhfbmV4dCksIChnc3RfYXZpX2RlbXV4X2luZGV4X2VudHJ5X2Zvcl90aW1lKSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfcGVla190YWcpLAotCSAgKGdzdF9hdmlfZGVtdXhfbmV4dF9kYXRhX2J1ZmZlciksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwKLQkgIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfY2FsY3VsYXRlX2R1cmF0aW9uc19mcm9tX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXJfcHVsbCksIChnc3RfYXZpX2RlbXV4X2RvX3NlZWspLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKGdzdF9hdmlfZGVtdXhfbG9vcCksCi0JICAoZ3N0X2F2aV9kZW11eF9jaGFpbiksIChnc3RfYXZpX2RlbXV4X3NpbmtfYWN0aXZhdGUpLAotCSAgKGdzdF9hdmlfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgTW9yZSBhdHRlbXB0cyB0byB0dXJuIHRoaXMgaW50byByZWFkYWJsZSBjb2RlLgotCSAgRG9uJ3QgbGVhayBhZGFwdGVycy4KLQkgIENhbGN1bGF0ZSBkdXJhdGlvbiBhY2NvcmRpbmcgdG8gaW5kZXggbW9yZSBlZmZpY2llbnRseS4KLQkgIERvbid0IHRyeSB0byBhY3QgbGlrZSB3ZSBkcml2ZSB0aGUgcGlwZWxpbmUgaW4gY2hhaW4gbW9kZS4KLQotMjAwNi0wOC0yNSAwOTo1MzoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2Fubm9kZXgvZ3N0Y21tbHV0aWxzLmM6IEZpeCBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sdXRpbHMuYzogKGdzdF9jbW1sX2Nsb2NrX3RpbWVfZnJvbV9ucHQpOgotCSAgRml4IGJ1aWxkLgotCi0yMDA2LTA4LTI1IDA5OjQyOjQzICswMDAwICBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRyb0BubnZhLm9yZz4KLQotCSAgZXh0L2Fubm9kZXgvZ3N0YW5ub2RleC5jOiBEbyBzb21lIGV4dHJhIHNhbml0eSBjaGVja3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBBbGVzc2FuZHJvIERlY2luYSA8YWxlc3NhbmRybyBhdCBubnZhIGRvdCBvcmc+Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGFubm9kZXguYzogKGdzdF9hbm5vZGV4X2dyYW51bGVfdG9fdGltZSk6Ci0JICBEbyBzb21lIGV4dHJhIHNhbml0eSBjaGVja3MuCi0JICBGaXhlcyAjMzUwMzQwLgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6IChnc3RfY21tbF9lbmNfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfY21tbF9lbmNfcGFyc2VfdGFnX2hlYWQpLCAoZ3N0X2NtbWxfZW5jX3BhcnNlX3RhZ19jbGlwKSwKLQkgIChnc3RfY21tbF9lbmNfcHVzaF9jbGlwKSwgKGdzdF9jbW1sX2VuY19wdXNoKToKLQkgIENoZWNrIGlmIGNsaXAtPnN0YXJ0X3RpbWUgaXMgdmFsaWQgYmVmb3JlIGFkZGluZyB0aGUgY2xpcCB0byB0aGUKLQkgIHRyYWNrIGxpc3QuCi0JICBSZXNldCBlbmMtPnByZWFtYmxlIGdvaW5nIGZyb20gUEFVU0VEIHRvIFJFQURZLgotCSAgRG9uJ3QgdXNlIEdTVF9GTE9XX1VORVhQRUNURUQgZm9yIHdyb25nIHVzYWdlIG9mIHRoZSBlbGVtZW50LCBpdCBpcwotCSAgb25seSB1c2VkIGZvciBFT1MuCi0JICBPbmx5IHBvc3QgYW4gZXJyb3IgbWVzc2FnZSBpZiB3ZSB3ZXJlIHRoZSBvbmUgdGhhdCBjcmVhdGVkIHRoZSBmYXRhbAotCSAgR3N0Rmxvd1JldHVybiB2YWx1ZS4KLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbHV0aWxzLmM6IChnc3RfY21tbF9jbG9ja190aW1lX2Zyb21fbnB0KSwKLQkgIChnc3RfY21tbF9jbG9ja190aW1lX3RvX2dyYW51bGUpLCAoZ3N0X2NtbWxfdHJhY2tfbGlzdF9oYXNfY2xpcCk6Ci0JICBQYXJzZSB0aGUgc2Vjb25kcyBmaWVsZCBvZiB0aGUgbnB0LXNlYyB0aW1lIGZvcm1hdCB1c2luZyAlbGx1IHJhdGhlciB0aGFuCi0JICAlZCBhbmQgY2hlY2sgdGhhdCB0aGUgdmFsdWUgc2NhbGVkIGJ5IEdTVF9TRUNPTkQgZG9lc24ndCBvdmVyZmxvdy4KLQkgIFVzZSBndWludDY0KHMpIHRvIHJlcHJlc2VudCB0aGUga2V5aW5kZXggYW5kIGtleW9mZnNldCBmaWVsZHMgb2YgYSBncmFudWxlcG9zLgotCSAgTG9va3VwIGEgY2xpcCdzIHRyYWNrIHdpdGggY2xpcC0+dHJhY2sgcmF0aGVyIHRoYW4gY2xpcC0+aWQgd2hpY2gKLQkgIG1ha2VzIG5vIHNlbnNlLgotCSAgSWRlbnRpZnkgYSBjbGlwIGJ5IGl0cyB0cmFjayBhbmQgc3RhcnQgdGltZSBhbmQgbm90IGl0cyB4bWwgaWQuCi0JICBkbyBzb21lIG1vcmUgaW5wdXQgY2hlY2tpbmcgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBkbyB1bmRlZmluZWQgc2hpZnRzLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6IChzZXR1cF9jbW1sZGVjKSwKLQkgICh0ZWFyZG93bl9jbW1sZGVjKSwgKGNoZWNrX291dHB1dF9idWZmZXJfaXNfZXF1YWwpLCAocHVzaF9kYXRhKSwKLQkgIChjbW1sX3RhZ19tZXNzYWdlX3BvcCksIChjaGVja19oZWFkZXJzKSwgKHB1c2hfY2xpcF9mdWxsKSwKLQkgIChwdXNoX2NsaXApLCAocHVzaF9lbXB0eV9jbGlwKSwgKGNoZWNrX291dHB1dF9jbGlwKSwKLQkgIChHU1RfU1RBUlRfVEVTVCksIChjbW1sZGVjX3N1aXRlKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOiAoc2V0dXBfY21tbGVuYyksCi0JICAodGVhcmRvd25fY21tbGVuYyksIChjaGVja19vdXRwdXRfYnVmZmVyX2lzX2VxdWFsKSwgKHB1c2hfZGF0YSksCi0JICAoY2hlY2tfaGVhZGVycyksIChwdXNoX2NsaXApLCAoY2hlY2tfY2xpcF90aW1lcyksIChjaGVja19jbGlwKSwKLQkgIChjaGVja19lbXB0eV9jbGlwKSwgKEdTVF9TVEFSVF9URVNUKSwgKGNtbWxlbmNfc3VpdGUpOgotCSAgQWRkZWQgc29tZSBtb3JlIGNoZWNrcy4KLQotMjAwNi0wOC0yNCAxOTowMDoyMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBNYWtlIGFsc28gdGhlIHBhbi1wcm9wZXJ0eSBmbG9hdCAoc2F2ZXMgc2NhbGluZyBhbmQgeWllbGRzIGJldHRlciByZXNvbHV0aW9uKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmM6IChnc3RfYXVkaW9fcGFub3JhbWFfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybV9tMnNfaW50KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3Myc19pbnQpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fbTJzX2Zsb2F0KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3Myc19mbG9hdCk6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmg6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIE1ha2UgYWxzbyB0aGUgcGFuLXByb3BlcnR5IGZsb2F0IChzYXZlcyBzY2FsaW5nIGFuZCB5aWVsZHMgYmV0dGVyCi0JICByZXNvbHV0aW9uKQotCi0yMDA2LTA4LTI0IDE4OjIzOjE0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmM6IENoYW5nZUxvZyBzdXJnZXJ5IHRvIGFkZCBjeW1heCdzIHJlYWwgbmFtZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmM6IChnc3RfYXVkaW9fcGFub3JhbWFfc2V0X2NhcHMpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fbTJzX2Zsb2F0KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3Myc19mbG9hdCk6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeSB0byBhZGQgY3ltYXgncyByZWFsIG5hbWUKLQotMjAwNi0wOC0yNCAxODoxNzoyMCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXVkaW9meGdvb2QvYXVkaW9wYW5vcmFtYS4qOiBBZGRlZCBmbG9hdCBzdXBwb3J0ICh0aGFua3MgY3ltYXgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZnhnb29kL2F1ZGlvcGFub3JhbWEuYzogKGdzdF9hdWRpb19wYW5vcmFtYV9zZXRfY2FwcyksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybV9tMnNfaW50KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3Myc19pbnQpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fbTJzX2Zsb2F0KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3Myc19mbG9hdCksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybSk6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmg6Ci0JICBBZGRlZCBmbG9hdCBzdXBwb3J0ICh0aGFua3MgY3ltYXgpCi0KLTIwMDYtMDgtMjQgMTQ6MTY6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2F1ZGlvZnhnb29kL2F1ZGlvcGFub3JhbWEuYzogRml4IGRvY3MgJiBkZWJ1ZyBjYXRlZ29yeS4gQWRkIEZpeG1lIGZvciB2b2x1bWUgcGFuIGxldmVscy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVkaW9meGdvb2QvYXVkaW9wYW5vcmFtYS5jOgotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fbTJzKToKLQkgIEZpeCBkb2NzICYgZGVidWcgY2F0ZWdvcnkuIEFkZCBGaXhtZSBmb3Igdm9sdW1lIHBhbiBsZXZlbHMuCi0KLTIwMDYtMDgtMjQgMTM6NTE6MTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiB1bmJyZWFrIEFWSSBpbmRleCBoYW5kbGluZywgc29tZSBtb3JlIGRlYnVnLCByZW1vdmUgYW4gb2Jzb2xldGUgYWRhcHRlcl9mbHVzaCB0aGF0IGNhdXNlZCBzdHJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9yZWFkX3N1YmluZGV4ZXNfcHVsbCksCi0JICAoZ3N0X2F2aV9kZW11eF9zeW5jKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdXNoKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXJfcHVsbCksCi0JICAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSksCi0JICAoZ3N0X2F2aV9kZW11eF9jaGFpbik6Ci0JICB1bmJyZWFrIEFWSSBpbmRleCBoYW5kbGluZywgc29tZSBtb3JlIGRlYnVnLCByZW1vdmUgYW4gb2Jzb2xldGUKLQkgIGFkYXB0ZXJfZmx1c2ggdGhhdCBjYXVzZWQgc3RyZWFtaW5nIHRvIHdhbmRlciBvZmYgaW4gdGhlIHdpbGQKLQotMjAwNi0wOC0yNCAxMToyMTowNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC4qOiBTb21lIG1vcmUgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1cGVyaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdWJpbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9vZG1sKSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X2NhbGN1bGF0ZV9kdXJhdGlvbnNfZnJvbV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyX3B1c2gpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgU29tZSBtb3JlIGNsZWFudXBzLgotCSAgRml4IHRvdGFsRnJhbWVzIHBhcnNpbmcgaW4gT0RNTC4KLQkgIERpc2FibGUgdXNlIG9mIGluZGV4IGZvciBsZW5ndGggY2FsY3VsYXRpb24gaW4gY2FzZSBvZiBPRE1MIGFzIHRoaXMgaXMKLQkgIGJyb2tlbiBub3cuCi0KLTIwMDYtMDgtMjQgMTA6MDM6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogVXNlIGxpYmdzdHRhZyBoZWxwZXIgZnVuY3Rpb24gaGVyZSB0b28uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZGVjX3VwZGF0ZV9tZXRhZGF0YSk6Ci0JICBVc2UgbGliZ3N0dGFnIGhlbHBlciBmdW5jdGlvbiBoZXJlIHRvby4KLQotMjAwNi0wOC0yNCAwOToyNDoxMSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IFBvc3QgYXVkaW8gY29kZWMgYW5kIGF2ZXJhZ2UgYml0cmF0ZSB0YWdzIG9uIGJ1cyAoIzM0NDQ3MikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tbyBhdCBjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19wb3N0X3RhZ3MpLAotCSAgKGdzdF93YXZwYWNrX2RlY19jaGFpbik6Ci0JICBQb3N0IGF1ZGlvIGNvZGVjIGFuZCBhdmVyYWdlIGJpdHJhdGUgdGFncyBvbiBidXMgKCMzNDQ0NzIpLgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2Vfc3JjX3F1ZXJ5KToKLQkgIEZvcndhcmQgcXVlcmllcyBpbiBvdGhlciBmb3JtYXRzIChCWVRFIGZvcm1hdCBpbiBwYXJ0aWN1bGFyKQotCSAgdXBzdHJlYW07IGFkZCBTZWJhc3RpYW4gdG8gYXV0aG9ycy4KLQotMjAwNi0wOC0yNCAwMDo0MDowNyArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmg6Ci0JICBGaXggc2V0X2NhcHMgdG8gc2V0IHdpZHRoIGFuZCBoZWlnaHQgdG8gdGhlIHZhbHVlcyB0aGUgZHJpdmVyIGlzIHJlYWxseSB3b3JraW5nIHdpdGguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCBzZXRfY2FwcyB0byBzZXQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgdmFsdWVzIHRoZSBkcml2ZXIgaXMgcmVhbGx5IHdvcmtpbmcgd2l0aC4KLQotMjAwNi0wOC0yMyAxNTozMzo0NyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4Lio6IEluaXRpYWwgc3RyZWFtaW5nIHN1cHBvcnQgZm9yIGF2aWRlbXV4IChmaXhlcyAjMzM2NDY1KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F2aV9kZW11eF9pbml0KSwgKGdzdF9hdmlfZGVtdXhfZGlzcG9zZSksCi0JICAoZ3N0X2F2aV9kZW11eF9yZXNldCksIChnc3RfYXZpX2RlbXV4X2luZGV4X25leHQpLAotCSAgKGdzdF9hdmlfZGVtdXhfaW5kZXhfZW50cnlfZm9yX3RpbWUpLCAoZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rX2luZm8pLCAoZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0X3B1c2gpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5pdF9wdWxsKSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3JlYWRfc3ViaW5kZXhlc19wdXNoKSwKLQkgIChnc3RfYXZpX2RlbXV4X3JlYWRfc3ViaW5kZXhlc19wdWxsKSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChzb3J0KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3luYyksIChnc3RfYXZpX2RlbXV4X3BlZWtfdGFnKSwKLQkgIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyX3B1c2gpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsKSwKLQkgIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwKLQkgIChwdXNoX3RhZ19saXN0cyksIChnc3RfYXZpX2RlbXV4X2xvb3ApLCAoZ3N0X2F2aV9kZW11eF9jaGFpbiksCi0JICAoZ3N0X2F2aV9kZW11eF9zaW5rX2FjdGl2YXRlKSwgKGdzdF9hdmlfZGVtdXhfYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X2F2aV9kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBJbml0aWFsIHN0cmVhbWluZyBzdXBwb3J0IGZvciBhdmlkZW11eCAoZml4ZXMgIzMzNjQ2NSkKLQotMjAwNi0wOC0yMyAxMDozMDozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiBGaXggbWVtIGxlYWssIHNlbmQgbmV3c2VnbWVudCBldmVudCBvbiBjb3JyZWN0aW9uIHBhZCBhcyB3ZWxsICgjMzUyNDc2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmM6IChnc3Rfd2F2cGFja19lbmNfcHVzaF9ibG9jayk6Ci0JICBGaXggbWVtIGxlYWssIHNlbmQgbmV3c2VnbWVudCBldmVudCBvbiBjb3JyZWN0aW9uIHBhZAotCSAgYXMgd2VsbCAoIzM1MjQ3NikuCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfYmFzZV9pbml0KToKLQkgIFJlc3RvcmUgb3JpZ2luYWwgYXV0aG9yIChvbiBTZWJhc3RpYW4ncyByZXF1ZXN0KS4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2dzdC1wbHVnaW5zLWJhZC5zdXBwOgotCSAgQWRkIChzbyBmYXIgZW1wdHkpIHN1cHByZXNzaW9uIGZpbGUgZm9yIC1iYWQuIFJlbW92ZQotCSAgd2F2cGFja2VuYyB0ZXN0IGZyb20gVkFMR1JJTkRfVE9fRklYIG5vdyB0aGF0IHRoZSBsZWFrCi0JICBpcyBmaXhlZC4KLQotMjAwNi0wOC0yMyAwOToyMjowNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICB0ZXN0cy9jaGVjay86IEFkZCB1bml0IHRlc3RzIGZvciB3YXZwYWNrIGVsZW1lbnRzICgjMzUyNDc2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vIGF0IGNpcmN1bGFyLWNoYW9zLm9yZz4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYzogKHNldHVwX3dhdnBhY2tkZWMpLAotCSAgKGNsZWFudXBfd2F2cGFja2RlYyksIChHU1RfU1RBUlRfVEVTVCksICh3YXZwYWNrZGVjX3N1aXRlKSwgKG1haW4pOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrZW5jLmM6IChzZXR1cF93YXZwYWNrZW5jKSwKLQkgIChjbGVhbnVwX3dhdnBhY2tlbmMpLCAoR1NUX1NUQVJUX1RFU1QpLCAod2F2cGFja2VuY19zdWl0ZSksIChtYWluKToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja3BhcnNlLmM6ICh3YXZwYWNrcGFyc2VfZm91bmRfcGFkKSwKLQkgIChzZXR1cF93YXZwYWNrcGFyc2UpLCAoY2xlYW51cF93YXZwYWNrcGFyc2UpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKHdhdnBhY2twYXJzZV9zdWl0ZSksIChtYWluKToKLQkgIEFkZCB1bml0IHRlc3RzIGZvciB3YXZwYWNrIGVsZW1lbnRzICgjMzUyNDc2KS4KLQotMjAwNi0wOC0yMyAwODo1Mjo1MCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBBZGQgZG9jcyBmb3Igd2F2cGFjayBlbGVtZW50cyAoIzM1MjQ3NikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tbyBhdCBjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmg6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgIEFkZCBkb2NzIGZvciB3YXZwYWNrIGVsZW1lbnRzICgjMzUyNDc2KS4KLQotMjAwNi0wOC0yMiAyMDozOToyNiArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JICBGaXhlZCBxdWVyeSBzaXplIHRvIHdvcmsgd2l0aCBkcml2ZXJzIHRoYXQgdXNlcyBpbnRlcm1lZGlhdGUgc3RlcCBsaWtlICJ3aWR0aCAqIGhlaWdodCIgdG8gZmluZCBjbG9zZXN0IHNpemUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeGVkIHF1ZXJ5IHNpemUgdG8gd29yayB3aXRoIGRyaXZlcnMgdGhhdCB1c2VzIGludGVybWVkaWF0ZSBzdGVwIGxpa2UgIndpZHRoICogaGVpZ2h0IiB0byBmaW5kIGNsb3Nlc3Qgc2l6ZS4KLQotMjAwNi0wOC0yMiAxNzoyMDo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6IFRoZXJlIGlzIG5vIHRhZ2xpYm11eCBlbGVtZW50IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgVGhlcmUgaXMgbm8gdGFnbGlibXV4IGVsZW1lbnQgLi4uCi0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzoKLQkgIFVzZSAnJScgcmF0aGVyIHRoYW4gJyZwZXJjOycgaW4gZ3RrLWRvYyBibHVyYiwgZG9jcyBidWlsZAotCSAgd2FzIGNvbXBsYWluaW5nIGFib3V0IHVua25vd24gZW50aXR5IGhlcmUuCi0KLTIwMDYtMDgtMjIgMTc6MDI6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguKjogTWFyayBESVNDT05ULgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X2RvX3NlZWspLCAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2VlayksCi0JICAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBNYXJrIERJU0NPTlQuCi0JICBSZW1vdmUgb2xkIHVudXNlZCBmaWVsZHMgYW5kIHJlb3JkZXIgdGhlIHN0cnVjdCBhIGJpdC4KLQotMjAwNi0wOC0yMiAxNjo0NTozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgU21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX21lZGlhX3RvX2NhcHMpLAotCSAgKGdzdF9ydHNwc3JjX3NlbmQpLCAoZ3N0X3J0c3BzcmNfY2xvc2UpLCAoZ3N0X3J0c3BzcmNfcGxheSksCi0JICAoZ3N0X3J0c3BzcmNfcGF1c2UpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc19zaW5rX29wZW4pLAotCSAgKGdzdF9vc3Nfc2lua19wcmVwYXJlKSwgKGdzdF9vc3Nfc2lua191bnByZXBhcmUpOgotCSAgU21hbGwgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgotCi0yMDA2LTA4LTIyIDE2OjQyOjIyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4Lio6IFByZWNhbGMgbW9zdCBvZiB0aGUgZHVyYXRpb24gcXVlcnkgZm9yIGVhY2ggc3RyZWFtLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9hdmlfZGVtdXhfaW5kZXhfZW50cnlfZm9yX3RpbWUpLAotCSAgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksIChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luaXQpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfcGVla190YWcpLAotCSAgKGdzdF9hdmlfZGVtdXhfbmV4dF9kYXRhX2J1ZmZlciksCi0JICAoZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlciksIChnc3RfYXZpX2RlbXV4X2RvX3NlZWspLAotCSAgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspLCAoZ3N0X2F2aV9kZW11eF9hZ2dyZWdhdGVkX2Zsb3cpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKGdzdF9hdmlfZGVtdXhfbG9vcCksCi0JICAoZ3N0X2F2aV9kZW11eF9zaW5rX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X2F2aV9kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBQcmVjYWxjIG1vc3Qgb2YgdGhlIGR1cmF0aW9uIHF1ZXJ5IGZvciBlYWNoIHN0cmVhbS4KLQkgIE1ha2Ugc2Vla2luZyBtb3JlIGNvcnJlY3QuCi0JICBVc2UgR3N0U2VnbWVudCB0byB0cmFjayBwb3NpdGlvbiBhbmQgZHVyYXRpb24uCi0JICBDb2RlIGNsZWFudXBzIGFuZCBsZWFrIGZpeGVzLgotCSAgQ2FsY3VsYXRlIGNvcnJlY3QgdG90YWwgZHVyYXRpb24gYmFzZWQgb24gaW5kZXggbGVuZ3RoLgotCi0yMDA2LTA4LTIyIDEzOjUzOjM0ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IElmIHN0cmluZ3MgaW4gdGV4dCBmaWVsZHMgYXJlIG1hcmtlZCBJU084ODU5LTEsIGJ1dCBjb250YWluIHZhbGlkIFVURi04IGFscmVhZHksIHRoZW4gaGFuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChwYXJzZV90ZXh0X2lkZW50aWZpY2F0aW9uX2ZyYW1lKSwKLQkgIChwYXJzZV9pbnNlcnRfc3RyaW5nX2ZpZWxkKToKLQkgIElmIHN0cmluZ3MgaW4gdGV4dCBmaWVsZHMgYXJlIG1hcmtlZCBJU084ODU5LTEsIGJ1dCBjb250YWluCi0JICB2YWxpZCBVVEYtOCBhbHJlYWR5LCB0aGVuIGhhbmRsZSB0aGVtIGFzIFVURi04IGFuZCBpZ25vcmUKLQkgIHRoZSBlbmNvZGluZy4gKCMzNTE3OTQpCi0KLTIwMDYtMDgtMjIgMTI6Mjg6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuKjogTWFrZSBmbGFjLWluLW9nZyB3b3JrICgjMzUyMTAwKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfc2Nhbl9nb3RfZnJhbWUpLAotCSAgKGdzdF9mbGFjX2RlY193cml0ZSksIChnc3RfZmxhY19kZWNfbG9vcCksCi0JICAoZ3N0X2ZsYWNfZGVjX3NpbmtfZXZlbnQpLCAoZ3N0X2ZsYWNfZGVjX2NoYWluKSwKLQkgIChnc3RfZmxhY19kZWNfc3JjX3F1ZXJ5KToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgTWFrZSBmbGFjLWluLW9nZyB3b3JrICgjMzUyMTAwKS4KLQotMjAwNi0wOC0yMiAxMjoxMDozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogRG9uJ3QgdW5yZWYgYnVmZmVycyBvZiB3aGljaCB3ZSd2ZSBhbHJlYWR5IGdpdmVuIGF3YXkgb3duZXJzaGlwIHRvIHRoZSBhZGFwdGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6IChnc3RfbW9ub3Njb3BlX2NoYWluKToKLQkgIERvbid0IHVucmVmIGJ1ZmZlcnMgb2Ygd2hpY2ggd2UndmUgYWxyZWFkeSBnaXZlbiBhd2F5Ci0JICBvd25lcnNoaXAgdG8gdGhlIGFkYXB0ZXIuCi0KLTIwMDYtMDgtMjIgMTA6MzI6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiBNYWtlIG1ldGFkYXRhIGV4dHJhY3Rpb24gYWN0dWFsbHkgd29yay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKHNwZWV4X2RlY19jaGFpbl9wYXJzZV9jb21tZW50cyk6Ci0JICBNYWtlIG1ldGFkYXRhIGV4dHJhY3Rpb24gYWN0dWFsbHkgd29yay4KLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IChnc3Rfc3BlZXhlbmNfYmFzZV9pbml0KSwKLQkgIChnc3Rfc3BlZXhlbmNfaW5pdCksIChnc3Rfc3BlZXhlbmNfY3JlYXRlX21ldGFkYXRhX2J1ZmZlciksCi0JICAoZ3N0X3NwZWV4ZW5jX2NoYWluKToKLQkgIEZpeCBtZXRhZGF0YSB3cml0aW5nOiByZXBsYWNlIG9sZCBjb2RlIHdoaWNoIHdyb3RlIGNvbXBsZXRlbHkKLQkgIGJyb2tlbiB0YWdzIHdpdGggbGliZ3N0dGFnLWJhc2VkIGNvZGUuIFBsdXMgbWlzY2VsbGFuZW91cwotCSAgY29kZSBjbGVhbnVwcyAodXNlIHN0YXRpYyBwYWQgdGVtcGxhdGVzIGV0Yy4pIGFuZCBhIGJ1bmNoCi0JICBvZiBsZWFrIGZpeGVzLgotCi0yMDA2LTA4LTIxIDE5OjM0OjAzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdWRpb3Bhbm9yYW1hLzogZGllISBkaWUhIGRpZSEgeW91IHNob3VsZCBuZXZlciBoYXZlIGJlZW4gdGhlcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVkaW9wYW5vcmFtYS8uY3ZzaWdub3JlOgotCSAgKiBnc3QvYXVkaW9wYW5vcmFtYS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvcGFub3JhbWEvYXVkaW9meC5jOgotCSAgKiBnc3QvYXVkaW9wYW5vcmFtYS9hdWRpb3Bhbm9yYW1hLmM6Ci0JICAqIGdzdC9hdWRpb3Bhbm9yYW1hL2F1ZGlvcGFub3JhbWEuaDoKLQkgIGRpZSEgZGllISBkaWUhIHlvdSBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIHRoZXJlCi0KLTIwMDYtMDgtMjEgMTY6MjQ6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogU29tZSBtb3JlIGNvbnN0aWZpY2F0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9wYXJzZSksCi0JICAocXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCksIChxdGRlbXV4X3BhcnNlX3RyYWspLAotCSAgKHF0ZGVtdXhfdmlkZW9fY2FwcyksIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgU29tZSBtb3JlIGNvbnN0aWZpY2F0aW9uLgotCSAgRml4IHNvbWUgcGFsZXR0ZWQgZGF0YSBmb3JtYXRzIGFnYWluLgotCSAgRml4IHVsYXcvYWxhdyBpbiBxdC4KLQkgIFNldCBjb3JyZWN0IGNhcHMgZm9yIHJhdyBSR0IuCi0JICBBZGQgc3VwcG9ydCBmb3IgeXV2Miwgd2hpY2ggaXMgbGlrZSBZdXYyLgotCSAgQWRkIHN1cHBvcnQgZm9yIHJhdyBhdWRpbyB3aXRoIHRoZSBOT05FIGZvdXJjYywgd2hpY2ggaXMgbGlrZSByYXcuCi0KLTIwMDYtMDgtMjEgMTM6NTk6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC93YXZwYWNrLzogTW9yZSBjbGVhbi11cHM6IHVzZSBzaG9ydGVyIHZhcmlhYmxlIG5hbWVzIHRvIG1ha2UgY29kZSBlYXNpZXIgdG8gcmVhZDsgcHJlZml4IHN0cnVjdHVyZXMgd2UgZGVmaW5lIHdpdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19pbml0KSwKLQkgIChnc3Rfd2F2cGFja19lbmNfZmluYWxpemUpLCAoZ3N0X3dhdnBhY2tfZW5jX3Npbmtfc2V0X2NhcHMpLAotCSAgKGdzdF93YXZwYWNrX2VuY19zZXRfd3BfY29uZmlnKSwgKGdzdF93YXZwYWNrX2VuY19mb3JtYXRfc2FtcGxlcyksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3B1c2hfYmxvY2spLCAoZ3N0X3dhdnBhY2tfZW5jX2NoYWluKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfcmV3cml0ZV9maXJzdF9ibG9jayksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3NpbmtfZXZlbnQpLCAoZ3N0X3dhdnBhY2tfZW5jX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3NldF9wcm9wZXJ0eSksIChnc3Rfd2F2cGFja19lbmNfZ2V0X3Byb3BlcnR5KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX3Jlc2V0KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zcmNfcXVlcnkpLCAoZ3N0X3dhdnBhY2tfcGFyc2Vfc3JjX2V2ZW50KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9pbml0KSwgKGdzdF93YXZwYWNrX3BhcnNlX2dldF91cHN0cmVhbV9sZW5ndGgpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2xvb3ApOgotCSAgTW9yZSBjbGVhbi11cHM6IHVzZSBzaG9ydGVyIHZhcmlhYmxlIG5hbWVzIHRvIG1ha2UgY29kZSBlYXNpZXIgdG8KLQkgIHJlYWQ7IHByZWZpeCBzdHJ1Y3R1cmVzIHdlIGRlZmluZSB3aXRoICdHc3QnIHRvIG1ha2UgaXQgY2xlYXJlcgotCSAgd2hlcmUgdGhleSBjb21lIGZyb20uCi0KLTIwMDYtMDgtMjEgMTM6MjY6MzcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogRml4IGNhcHMgc2V0IG9uIGJ1ZmZlcnMgYW5kIHRlbXBsYXRlIGNhcHMgKG91dHB1dCBpcyBmcmFtZWQpIGFuZCBtYWtlIHRoZW0gbWF0Y2ggKCMzNTE2Ni4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19pbml0KSwKLQkgIChnc3Rfd2F2cGFja19lbmNfc2V0X3dwX2NvbmZpZyksIChnc3Rfd2F2cGFja19lbmNfcHVzaF9ibG9jayksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX2NoYWluKSwgKGdzdF93YXZwYWNrX2VuY19yZXdyaXRlX2ZpcnN0X2Jsb2NrKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfc2lua19ldmVudCk6Ci0JICBGaXggY2FwcyBzZXQgb24gYnVmZmVycyBhbmQgdGVtcGxhdGUgY2FwcyAob3V0cHV0IGlzIGZyYW1lZCkKLQkgIGFuZCBtYWtlIHRoZW0gbWF0Y2ggKCMzNTE2NjMpOyB1c2UgR1NUX1dBUk5JTkdfT0JKRUNUIGluc3RlYWQgb2YKLQkgIEdTVF9FTEVNRU5UX1dBUk5JTkc7IHNpbXBsaWZ5IHB1c2hfYmxvY2soKTsgZG8gc29tZSBzbWFsbAotCSAgY2xlYW4tdXBzIGhlcmUgYW5kIHRoZXJlOyBmaXggbWVtbGVhayAoIzM1MTY2MykuCi0KLTIwMDYtMDgtMjEgMTM6MTI6NDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmM6IEZpeCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgaW4gYXVkaW9wYW5vcmFtYSB0ZXN0IHN1aXRlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgaW4gYXVkaW9wYW5vcmFtYSB0ZXN0IHN1aXRlLgotCi0yMDA2LTA4LTIxIDExOjM0OjQxICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOiBpZ25vcmUgYnVpbHQgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6Ci0JICBpZ25vcmUgYnVpbHQgZmlsZQotCi0yMDA2LTA4LTIxIDEwOjQ2OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL01ha2VmaWxlLmFtOiBGaXggdGhlIGJ1aWxkIGFnYWluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICBGaXggdGhlIGJ1aWxkIGFnYWluLgotCi0yMDA2LTA4LTIxIDA5OjIxOjI3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdWRpb2Z4Z29vZC86IHJlc3VibWl0IHdpdGggdGhlIGRlc2lyZWQgbmFtZSAqYWdhaW4qCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1ZGlvZnhnb29kLy5jdnNpZ25vcmU6Ci0JICAqIGdzdC9hdWRpb2Z4Z29vZC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2F1ZGlvZnhnb29kL2F1ZGlvZnguYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2F1ZGlvZnhnb29kL2F1ZGlvcGFub3JhbWEuYzogKGdzdF9hdWRpb19wYW5vcmFtYV9iYXNlX2luaXQpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV9jbGFzc19pbml0KSwgKGdzdF9hdWRpb19wYW5vcmFtYV9pbml0KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybV9jYXBzKSwgKGdzdF9hdWRpb19wYW5vcmFtYV9zZXRfY2FwcyksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybV9tMnMpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fczJzKSwgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm0pOgotCSAgKiBnc3QvYXVkaW9meGdvb2QvYXVkaW9wYW5vcmFtYS5oOgotCSAgcmVzdWJtaXQgd2l0aCB0aGUgZGVzaXJlZCBuYW1lICphZ2FpbioKLQotMjAwNi0wOC0yMCAxMzowOTo1MSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB1c2UgZ19hc3NlcnQgaW4gX2dldF91bml0X3NpemUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOiAoZ3N0X3BpeGJ1ZnNjYWxlX2dldF91bml0X3NpemUpOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfZ2V0X3VuaXRfc2l6ZSk6Ci0JICB1c2UgZ19hc3NlcnQgaW4gX2dldF91bml0X3NpemUKLQotMjAwNi0wOC0yMCAxMzowNjo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBjbGVhbnVwIC11bnVzZWQudHh0IHRvIG1ha2UgaXQgdXNlZnVsLCBhZGQgcHJldmlvdXNseSBtaXNzaW5nIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb2Z4Z29vZC54bWw6Ci0JICBjbGVhbnVwIC11bnVzZWQudHh0IHRvIG1ha2UgaXQgdXNlZnVsLCBhZGQgcHJldmlvdXNseSBtaXNzaW5nIGRvY3MKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZXNkL2VzZG1vbi5jOgotCSAgKiBleHQvZXNkL2VzZHNpbmsuYzoKLQkgICogZXh0L2VzZC9nc3Rlc2QuYzogKHBsdWdpbl9pbml0KToKLQkgIHJlZmxvdyB0byBnZXQgcmlkIG9mIHR3byBleHRlcm5hbCBzeW1ib2xzCi0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb2Z4LmM6IChwbHVnaW5faW5pdCk6Ci0JICByZS1hZGQKLQotMjAwNi0wOC0yMCAxMjowOToxNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXVkaW9meGdvb2QvYXVkaW9meC5jCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvYXVkaW9meGdvb2QvLmN2c2lnbm9yZToKLQkgICogZ3N0L2F1ZGlvZnhnb29kL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVkaW9meGdvb2QvYXVkaW9meC5jCi0JICAqIGdzdC9hdWRpb2Z4Z29vZC9hdWRpb3Bhbm9yYW1hLmM6IChnc3RfYXVkaW9fcGFub3JhbWFfYmFzZV9pbml0KSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfY2xhc3NfaW5pdCksIChnc3RfYXVkaW9fcGFub3JhbWFfaW5pdCksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF91bml0X3NpemUpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fY2FwcyksIChnc3RfYXVkaW9fcGFub3JhbWFfc2V0X2NhcHMpLAotCSAgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fbTJzKSwKLQkgIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtX3MycyksIChnc3RfYXVkaW9fcGFub3JhbWFfdHJhbnNmb3JtKToKLQkgICogZ3N0L2F1ZGlvZnhnb29kL2F1ZGlvcGFub3JhbWEuaDoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYzogKHNldHVwX3Bhbm9yYW1hX20pLAotCSAgKHNldHVwX3Bhbm9yYW1hX3MpLCAoY2xlYW51cF9wYW5vcmFtYSksIChHU1RfU1RBUlRfVEVTVCksCi0JICAocGFub3JhbWFfc3VpdGUpLCAobWFpbik6Ci0JICBBZGQgYXVkaW9meGdvb2QgcGx1Z2luIHdpdGggYXVkaW9wYW5vcmFtYSBlbGVtZW50Ci0KLTIwMDYtMDgtMTggMjE6Mzk6MDAgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IEZpeCByZXN5bmNpbmcgaW4gcHVzaCBtb2RlIG5vdCBzdG9wcGluZyByZS1zeW5jaW5nIGF0IGVtYmVkZGVkIHplcm9lczsgc2tpcCBnYXJiYWdlIGJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEJhc2VkIG9uIHBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tbyBhdCBjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2Vfc2lua19ldmVudCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfZ2V0X3Vwc3RyZWFtX2xlbmd0aCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfZmluZF9tYXJrZXIpLCAoZ3N0X3dhdnBhY2tfcGFyc2VfcmVzeW5jX2xvb3ApLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2xvb3ApLCAoZ3N0X3dhdnBhY2tfcGFyc2VfcmVzeW5jX2FkYXB0ZXIpOgotCSAgRml4IHJlc3luY2luZyBpbiBwdXNoIG1vZGUgbm90IHN0b3BwaW5nIHJlLXN5bmNpbmcgYXQgZW1iZWRkZWQKLQkgIHplcm9lczsgc2tpcCBnYXJiYWdlIGJldHdlZW4gZnJhbWVzIGluIHB1bGwgbW9kZSBhcyB3ZWxsIGlmCi0JICBuZWNlc3Nhcnk7IHVzZSBnc3RfcGFkX3F1ZXJ5X3BlZXJfZHVyYXRpb24oKTsgcHVzaCBFT1MgYW5kCi0JICBORVdTRUdNRU5UIGV2ZW50IGluIHJpZ2h0IGRpcmVjdGlvbiAoIzM1MTY1OSkuCi0KLTIwMDYtMDgtMTggMTc6MDA6NTMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbTogTW9yZSBPc3MgZG9jcyBmaXhhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgTW9yZSBPc3MgZG9jcyBmaXhhZ2UuCi0KLTIwMDYtMDgtMTggMTY6NTI6MjEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBBZGRlZCBleHBlcmltZW50YWwgU1ZRMyBkZXBheWxvYWRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5jOiAoZ3N0X3J0cF9zdjN2X2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9zdjN2X2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9zdjN2X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfc3Yzdl9kZXBheV9maW5hbGl6ZSksIChnc3RfcnRwX3N2M3ZfZGVwYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9zdjN2X2RlcGF5X3Byb2Nlc3MpLCAoZ3N0X3J0cF9zdjN2X2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9zdjN2X2RlcGF5X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9zdjN2X2RlcGF5X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cF9zdjN2X2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuaDoKLQkgIEFkZGVkIGV4cGVyaW1lbnRhbCBTVlEzIGRlcGF5bG9hZGVyLgotCi0yMDA2LTA4LTE4IDEzOjI1OjA2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvZHYvZ3N0ZHZkZW11eC4qOiBXaGVuIGhhbmRsaW5nIHNlZWsgcmVxdWVzdHMsIGRvbid0IHNlbmQgdGhlIG5ld3NlZ21lbnQgZXZlbnQgZnJvbSB0aGUgY2FsbGluZyB0aHJlYWQuIEluc3RlYWQgc2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfaGFuZGxlX3B1bGxfc2VlayksCi0JICAoZ3N0X2R2ZGVtdXhfbG9vcCksIChnc3RfZHZkZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSAgV2hlbiBoYW5kbGluZyBzZWVrIHJlcXVlc3RzLCBkb24ndCBzZW5kIHRoZSBuZXdzZWdtZW50IGV2ZW50IGZyb20gdGhlCi0JICBjYWxsaW5nIHRocmVhZC4gSW5zdGVhZCBzYXZlIGl0IHNvIGl0IGNhbiBiZSBzZW50IGZyb20gdGhlIHN0cmVhbWluZwotCSAgdGhyZWFkLgotCi0yMDA2LTA4LTE3IDE1OjUxOjUwICswMDAwICBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0KLQkgIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogQWNjZXB0IGxlYWRpbmcgd2hpdGVzcGFjZSBiZWZvcmUgdGhlIGJvdW5kYXJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTam9lcmQgU2ltb25zIDxzam9lcmQgYXQgbHVvbiBkb3QgbmV0PgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6IChtdWx0aXBhcnRfcGFyc2VfaGVhZGVyKToKLQkgIEFjY2VwdCBsZWFkaW5nIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBib3VuZGFyeQotCSAgVGhpcyBwYXRjaCBtYWtlcyB0aGUgZGVtdXhlciBhbGxvdyBzb21lIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBhY3R1YWwKLQkgIGJvdW5kYXJ5LiBUaGlzIG1ha2VzIHRoZSBkZW11eGVyIHdvcmsgd2l0aCB0aGUgYGBvbGQnJyBnc3RyZWFtZXIKLQkgIG11bHRpcGFydG11eGVyIGFnYWluICh3aGljaCBwbGFjZWQgYW4gZXh0cmEgXG4gYmVmb3JlIHRoZSBzdGFydAotCSAgb2YgdGhlIHN0cmVhbSkgRml4ZXMgIzM0OTA2OC4KLQotMjAwNi0wOC0xNyAxNTo0NzoyOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYzogRXJyb3Igb3V0IG9uIG5vbi1pbXBsZW1lbnRlZCBzdHVmZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiAoZ3N0X3J0cF9oMjY0X2RlcGF5X3Byb2Nlc3MpOgotCSAgRXJyb3Igb3V0IG9uIG5vbi1pbXBsZW1lbnRlZCBzdHVmZi4KLQotMjAwNi0wOC0xNiAxNjo1MDowMCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOiBNYWtlIGxhZHNwYSBlbGVtZW50cyByZXVzYWJsZS4gRml4ZXMgIzM1MDAwNi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94IGRvdCBjb20+Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmM6IChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zZXR1cCksCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc3RhcnQpLCAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc3RvcCksCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfY2xlYW51cCksIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zZXRjYXBzKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9wZW5fYnVmZmVyKSwgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2ZsdXNoKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9kb19wdWxscyksIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9kb19wdXNoZXMpLAotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2NoYW5nZV9zdGF0ZSk6Ci0JICBNYWtlIGxhZHNwYSBlbGVtZW50cyByZXVzYWJsZS4gRml4ZXMgIzM1MDAwNi4KLQotMjAwNi0wOC0xNiAxNTozMzoxMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2xhZHNwYS9nc3RsYWRzcGEuYzogQ29udmVydCAnICcgaW50byAnXycuIFRyeSB0byBrZWVwIGFzIG1hbnkgY2hhcmFjdGVycyBpbiB0aGUgcGFkdGVtcGxhdGUgbmFtZXMgYXMgcG9zc2libGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xhZHNwYS9nc3RsYWRzcGEuYzogKGdzdF9sYWRzcGFfYmFzZV9pbml0KToKLQkgIENvbnZlcnQgJyAnIGludG8gJ18nLiBUcnkgdG8ga2VlcCBhcyBtYW55IGNoYXJhY3RlcnMgaW4gdGhlIHBhZHRlbXBsYXRlCi0JICBuYW1lcyBhcyBwb3NzaWJsZS4KLQotMjAwNi0wOC0xNiAxNDo0Nzo1MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYzogQSBwdXNoKCkgZ2l2ZXMgYXdheSBvdXIgcmVmY291bnQgc28gd2Ugc2hvdWxkIG5vdCB1c2UgdGhlIGJ1ZmZlciBvbiB0aGUgcGVuIGFueW1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYzogKGdzdF9zaWduYWxfcHJvY2Vzc29yX2ZsdXNoKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9kb19wdXNoZXMpOgotCSAgQSBwdXNoKCkgZ2l2ZXMgYXdheSBvdXIgcmVmY291bnQgc28gd2Ugc2hvdWxkIG5vdCB1c2UgdGhlIGJ1ZmZlciBvbiB0aGUKLQkgIHBlbiBhbnltb3JlLgotCi0yMDA2LTA4LTE2IDEzOjQ4OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvb3NzL2dzdG9zc21peGVyZWxlbWVudC5jOiBEb24ndCBsZWFrIGRldmljZSBzdHJpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NtaXhlcmVsZW1lbnQuYzogKGdzdF9vc3NfbWl4ZXJfZWxlbWVudF9jbGFzc19pbml0KSwKLQkgIChnc3Rfb3NzX21peGVyX2VsZW1lbnRfZmluYWxpemUpOgotCSAgRG9uJ3QgbGVhayBkZXZpY2Ugc3RyaW5nLgotCi0yMDA2LTA4LTE2IDEzOjAxOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IFJlcXVpcmUgQ1ZTIG9mIEdTdHJlYW1lciBjb3JlIGFuZCAtYmFzZSAoZm9yCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgUmVxdWlyZSBDVlMgb2YgR1N0cmVhbWVyIGNvcmUgYW5kIC1iYXNlIChmb3IKLQkgIEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCBhbmQgZ3N0X3RhZ19wYXJzZV9leHRlbmRlZF9jb21tZW50KCkpLgotCSAgKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgV3JpdGUgZXh0ZW5kZWQgY29tbWVudCB0YWdzIHByb3Blcmx5ICgjMzQ4NzYyKS4KLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDNkZW11eF9pZDN2Ml9wYXJzZV9mcmFtZSksCi0JICAocGFyc2VfY29tbWVudF9mcmFtZSk6Ci0JICBFeHRyYWN0IENPTU0gZnJhbWVzIGludG8gZXh0ZW5kZWQgY29tbWVudHMsIHdoaWNoIG1ha2VzIGl0Ci0JICBlYXNpZXIgdG8gcHJvcGVybHkgcmV0YWluIHRoZSBkZXNjcmlwdGlvbiBiaXQgb2YgdGhlIHRhZwotCSAgYW5kIG1haW50YWluIHRoaXMgaW5mb3JtYXRpb24gd2hlbiByZS10YWdnaW5nICgjMzQ4NzYyKS4KLQotMjAwNi0wOC0xNiAxMjowMjo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IERvbid0IHRyeSB0byBydW4gYW5ub2RleCB1bml0IHRlc3RzIGlmIHRoZSBhbm5vZGV4IHBsdWdpbiBoYXMgbm90IGJlZW4gYnVpbHQgKEZpeGVzICMzNTExMTYpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgRG9uJ3QgdHJ5IHRvIHJ1biBhbm5vZGV4IHVuaXQgdGVzdHMgaWYgdGhlIGFubm9kZXgKLQkgIHBsdWdpbiBoYXMgbm90IGJlZW4gYnVpbHQgKEZpeGVzICMzNTExMTYpLgotCi0yMDA2LTA4LTE2IDEwOjUzOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6IFdoZW4gd2UgY2FuJ3QgZmluZCBhIHVzYWJsZSBhdWRpb3NpbmssIGRvbid0IGVycm9yIG91dCwgYnV0IHVzZSBhIGZha2Ugc2luayBpbnN0ZWEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19maW5kX2Jlc3QpOgotCSAgV2hlbiB3ZSBjYW4ndCBmaW5kIGEgdXNhYmxlIGF1ZGlvc2luaywgZG9uJ3QgZXJyb3Igb3V0LAotCSAgYnV0IHVzZSBhIGZha2Ugc2luayBpbnN0ZWFkIGFuZCBwb3N0IGEgd2FybmluZyBtZXNzYWdlCi0JICBvbiB0aGUgYnVzICgjMzQxMjc4KS4KLQotMjAwNi0wOC0xNiAxMDo0MDowNCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay86IEluIHB1c2ggbW9kZSwgcmUtc3luYyB0byBuZXh0IHdhdnBhY2sgaGVhZGVyIGlmIHN5bmMgaXMgbG9zdCAoIzM1MTU1NykuIEFsc28gdXNlIGh5cGhlbnMgaW5zdGVhZCBvZiB1bmQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vIGF0IGNpcmN1bGFyLWNoYW9zLm9yZz4KLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jOiAoZ3N0X3dhdnBhY2tfZW5jX2NsYXNzX2luaXQpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9yZXN5bmNfYWRhcHRlciksIChnc3Rfd2F2cGFja19wYXJzZV9jaGFpbik6Ci0JICBJbiBwdXNoIG1vZGUsIHJlLXN5bmMgdG8gbmV4dCB3YXZwYWNrIGhlYWRlciBpZiBzeW5jIGlzIGxvc3QKLQkgICgjMzUxNTU3KS4gQWxzbyB1c2UgaHlwaGVucyBpbnN0ZWFkIG9mIHVuZGVyc2NvcmVzIGluCi0JICBHT2JqZWN0IHByb3BlcnR5IG5hbWVzLgotCi0yMDA2LTA4LTE2IDEwOjIyOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvb3NzLzogRG9jdW1lbnQgT1NTIGVsZW1lbnRzOyBhZGQgZ3RrLWRvYyBibHVyYiB3aXRoICdTaW5jZSAwLjEwLjUnIGZvciBvc3NtaXhlcidzIG5ldyBkZXZpY2UgcHJvcGVydHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NtaXhlcmVsZW1lbnQuYzogKGdzdF9vc3NfbWl4ZXJfZWxlbWVudF9jbGFzc19pbml0KToKLQkgICogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JICBEb2N1bWVudCBPU1MgZWxlbWVudHM7IGFkZCBndGstZG9jIGJsdXJiIHdpdGggJ1NpbmNlIDAuMTAuNScgZm9yCi0JICBvc3NtaXhlcidzIG5ldyBkZXZpY2UgcHJvcGVydHkuCi0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIEFkZCBkb2NzIGZvciBPU1MgZWxlbWVudHMuCi0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSAgVXBkYXRlIHRvIENWUyB2ZXJzaW9uLgotCi0yMDA2LTA4LTE2IDEwOjA1OjAwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQ2FwcyBleHRyYSBwcm9wZXJ0aWVzIG11c3QgYmUgZGVmaW5lZCBhcyBzdHJpbmdzIGZvciBkZXBheWxvYWRlcnMgYmVjYXVzZSB0aGV5IGFyZSBnZW5lcmF0ZWQgZnJvbSBhbiBTRFAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jOgotCSAgQ2FwcyBleHRyYSBwcm9wZXJ0aWVzIG11c3QgYmUgZGVmaW5lZCBhcyBzdHJpbmdzIGZvcgotCSAgZGVwYXlsb2FkZXJzIGJlY2F1c2UgdGhleSBhcmUgZ2VuZXJhdGVkIGZyb20gYW4gU0RQLgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5jOiAoZ3N0X3J0cF9oMjY0X2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9oMjY0X2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9oMjY0X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfaDI2NF9kZXBheV9maW5hbGl6ZSksIChkZWNvZGVfYmFzZTY0KSwKLQkgIChnc3RfcnRwX2gyNjRfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX2gyNjRfZGVwYXlfcHJvY2VzcyksCi0JICAoZ3N0X3J0cF9oMjY0X2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9oMjY0X2RlcGF5X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9oMjY0X2RlcGF5X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cF9oMjY0X2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuaDoKLQkgIEFkZGVkIGJhc2ljLCBub3QgY29tcGxldGVseSBmdW5jdGlvbmFsIFJGQyAzOTg0IEgyNjQgZGVwYXlsb2FkZXIuCi0KLTIwMDYtMDgtMTYgMDk6NDg6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiBBZGQgcGFkcyBhZnRlciBzZXR0aW5nIHRoZW0gdXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2luaXQpLCAoZ3N0X3J0cGRlY19nZXRjYXBzKToKLQkgIEFkZCBwYWRzIGFmdGVyIHNldHRpbmcgdGhlbSB1cC4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0c3BzcmNfaW5pdCksIChnc3RfcnRzcHNyY19maW5hbGl6ZSksCi0JICAoZ3N0X3J0c3BzcmNfZnJlZV9zdHJlYW0pLCAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpLAotCSAgKGdzdF9ydHNwc3JjX2NvbWJpbmVfZmxvd3MpLCAoZ3N0X3J0c3BzcmNfbG9vcCksCi0JICAoZ3N0X3J0c3BzcmNfb3BlbiksIChnc3RfcnRzcHNyY19jbG9zZSksIChnc3RfcnRzcHNyY19wbGF5KSwKLQkgIChnc3RfcnRzcHNyY19wYXVzZSk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEZpeCBpbnRlcmxlYXZlZCBtb2RlLgotCSAgLSBQcm90ZWN0IHN0cmVhbWluZyB3aXRoIGxvY2suCi0JICAtIENvbWJpbmUgZmxvd3MKLQkgIC0gc2V0IGNhcHMgb24gb3V0Z29pbmcgYnVmZmVycy4KLQkgIC0gc3RyaXAgdHJhaWxpbmcgXDAgZnJvbSBkYXRhIHBhY2tldHMuCi0JICAtIENvbmZpZ3VyZSBSVFAvUlRDUCBpbiBzdHJlYW0uCi0JICBVc2UgREVCVUdfT0JKRUNUIG1vcmUuCi0KLTIwMDYtMDgtMTYgMDk6Mjk6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IFR1cm4gYSBnX3ByaW50IGludG8gYSBERUJVRyBsaW5lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2FkZCk6Ci0JICBUdXJuIGEgZ19wcmludCBpbnRvIGEgREVCVUcgbGluZS4KLQotMjAwNi0wOC0xNiAwOToyNToxNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgc3lzL29zcy86IFNtYWxsIGNsZWFudXBzLiBCZXR0ZXIgZXJyb3IgcmVwb3J0aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzbWl4ZXIuYzogKGdzdF9vc3NtaXhlcl9vcGVuKSwgKGdzdF9vc3NtaXhlcl9uZXcpOgotCSAgKiBzeXMvb3NzL2dzdG9zc21peGVyZWxlbWVudC5jOiAoZ3N0X29zc19taXhlcl9lbGVtZW50X2NsYXNzX2luaXQpLAotCSAgKGdzdF9vc3NfbWl4ZXJfZWxlbWVudF9pbml0KSwgKGdzdF9vc3NfbWl4ZXJfZWxlbWVudF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9vc3NfbWl4ZXJfZWxlbWVudF9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9vc3NfbWl4ZXJfZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBzeXMvb3NzL2dzdG9zc21peGVyZWxlbWVudC5oOgotCSAgU21hbGwgY2xlYW51cHMuIEJldHRlciBlcnJvciByZXBvcnRpbmcuCi0JICBBZGQgZGV2aWNlIHByb3BlcnR5IGZvciB0aGUgbWl4ZXIgaW5zdGVhZCBvZiB0aGUgaGFyZGNvZGVkCi0JICAvZGV2L21peGVyLiBGaXhlcyAjMzUwNzg1LgotCSAgQVBJOiBHc3RPc3NNaXhlckVsZW1lbnQ6OmRldmljZSBwcm9wZXJ0eQotCi0yMDA2LTA4LTE1IDIyOjQ0OjI3ICswMDAwICBKZW5zIEdyYW5zZXVlciA8amVuc2dyQGdteC5uZXQ+Ci0KLQkgIGdjb25mL01ha2VmaWxlLmFtOiBNYWtlIC0tZGlzYWJsZS1zY2hlbWFzIHdvcmsgcmlnaHQgKHRoZXkgc3RpbGwgbmVlZCB0byBiZSBjb3BpZWQgdG8gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIGp1cy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSmVucyBHcmFuc2V1ZXIgPGplbnNnciBhdCBnbXggbmV0PgotCSAgKiBnY29uZi9NYWtlZmlsZS5hbToKLQkgIE1ha2UgLS1kaXNhYmxlLXNjaGVtYXMgd29yayByaWdodCAodGhleSBzdGlsbCBuZWVkCi0JICB0byBiZSBjb3BpZWQgdG8gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnksIGp1c3Qgbm90Ci0JICBhcHBsaWVkKS4gRml4ZXMgIzM1MTM0NyAoYWxzbyAjMzQ0MTAwKS4KLQotMjAwNi0wOC0xNSAyMDoyOTo0NSArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuKjogTWFrZSB3YXZwYWNrcGFyc2UgYWxzbyB3b3JrIGluIHB1c2gtbW9kZSAobm90IHNlZWthYmxlIHlldCB0aG91Z2gpOyBzb21lIHNtYWxsIGNsZWFuLXUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3Jlc2V0KSwgKGdzdF93YXZwYWNrX3BhcnNlX2dldF9zcmNfcXVlcnlfdHlwZXMpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3NyY19xdWVyeSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3NpbmtfZXZlbnQpLCAoZ3N0X3dhdnBhY2tfcGFyc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfY3JlYXRlX3NyY19wYWQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3B1c2hfYnVmZmVyKSwgKGdzdF93YXZwYWNrX3BhcnNlX2xvb3ApLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NoYWluKSwgKGdzdF93YXZwYWNrX3BhcnNlX3NpbmtfYWN0aXZhdGUpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3NpbmtfYWN0aXZhdGVfcHVsbCk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5oOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vIGF0IGNpcmN1bGFyLWNoYW9zLm9yZz4KLQkgIE1ha2Ugd2F2cGFja3BhcnNlIGFsc28gd29yayBpbiBwdXNoLW1vZGUgKG5vdCBzZWVrYWJsZSB5ZXQgdGhvdWdoKTsKLQkgIHNvbWUgc21hbGwgY2xlYW4tdXBzIGFsb25nIHRoZSB3YXk7IGFkZCBzdXBwb3J0IGZvciBTRUVLSU5HIHF1ZXJ5Ci0JICBhbmQgcXVlcnkgdHlwZXMgZnVuY3Rpb24uICgjMzUxNDk1KS4KLQotMjAwNi0wOC0xNCAxMTozNzoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotMjAwNi0wOC0xNCAxMToxNDo0MyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhY29sb3IueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1oYWxlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWN5ZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYmFsYW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHJlbGVhc2luZyAwLjEwLjQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVsZWFzaW5nIDAuMTAuNAotCi0yMDA2LTA4LTE0IDEwOjA2OjU1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEV4dHJhY3QgYWxsIHJlZmVyZW5jZXMvcmVkaXJlY3Rpb25zIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYW5kIHNvcnQgdGhlbTsgYWxzbyBleHRyYWN0IG1pbmkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3JlZGlyZWN0c19zb3J0X2Z1bmMpLAotCSAgKHF0ZGVtdXhfcHJvY2Vzc19yZWRpcmVjdHMpLCAocXRkZW11eF9wYXJzZV90cmVlKToKLQkgIEV4dHJhY3QgYWxsIHJlZmVyZW5jZXMvcmVkaXJlY3Rpb25zIGlmIHRoZXJlIGlzIG1vcmUKLQkgIHRoYW4gb25lIGFuZCBzb3J0IHRoZW07IGFsc28gZXh0cmFjdCBtaW5pbXVtIHJlcXVpcmVkCi0JICBiaXRyYXRlIGluZm9ybWF0aW9uIGlmIGF2YWlsYWJsZS4gKCMzNTAzOTkpCi0KLTIwMDYtMDgtMTAgMTQ6MTA6MjggKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSAgU2VuZCB0aGUgbmV3c2VnbWVudCBldmVudCBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSk6Ci0JICBTZW5kIHRoZSBuZXdzZWdtZW50IGV2ZW50IGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgotCSAgRml4ZXMgIzM0NzUyOQotCi0yMDA2LTA4LTEwIDE0OjAyOjQ1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgYnVtcGVkIGZvciBwcmVyZWwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYnVtcGVkIGZvciBwcmVyZWwKLQotMjAwNi0wOC0xMCAxMzoxMDozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JICB1cGRhdGUgdHJhbnNsYXRpb25zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAwNi0wOC0wOCAxNDo1NTo1MyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGaXggc2lsbHkgdHlwby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyZWUpOgotCSAgRml4IHNpbGx5IHR5cG8uCi0KLTIwMDYtMDgtMDggMTQ6NDY6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBtZW50aW9uIGJ1ZyBudW1iZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IG1lbnRpb24gYnVnIG51bWJlcgotCi0yMDA2LTA4LTA4IDE0OjQwOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvanBlZy86IFJlZnVzZSBzaW5rIGNhcHMgaW4gdGhlIGVuY29kZXIgaWYgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDE2LCB0aGUgZW5jb2RlciBkb2VzIG5vdCBzdXBwb3J0IHQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOiAoZ3N0X3Ntb2tlZGVjX2NoYWluKToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzogKGdzdF9zbW9rZWVuY19zZXRjYXBzKSwKLQkgIChnc3Rfc21va2VlbmNfcmVzeW5jKSwgKGdzdF9zbW9rZWVuY19jaGFpbik6Ci0JICBSZWZ1c2Ugc2luayBjYXBzIGluIHRoZSBlbmNvZGVyIGlmIHdpZHRoIG9yIGhlaWdodCBpcyBub3QgYQotCSAgbXVsdGlwbGUgb2YgMTYsIHRoZSBlbmNvZGVyIGRvZXMgbm90IHN1cHBvcnQgdGhhdCB5ZXQ7IGFsb25nIHRoZQotCSAgc2FtZSBsaW5lcywgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZW5jb2RlciBzZXR1cCBmdW5jdGlvbjsKLQkgIGFsc28gcmVtb3ZlIHNvbWUgZGVidWcgbG9nIGNsdXR0ZXIuCi0KLTIwMDYtMDgtMDQgMTE6Mzg6NTQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuaDogQWRkIGluZnJhc3RydWN0dXJlIGZvciBzdG9yaW5nIHdoZXRoZXIgYSBwcm9jZXNzb3IgY2FuIHdvcmsgaW4gcGxhY2Ugb3Igbm90LCBhbmQgZm9yLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDgtMDQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmg6IEFkZCBpbmZyYXN0cnVjdHVyZSBmb3Igc3RvcmluZwotCSAgd2hldGhlciBhIHByb2Nlc3NvciBjYW4gd29yayBpbiBwbGFjZSBvciBub3QsIGFuZCBmb3Iga2VlcGluZwotCSAgdHJhY2sgb2YgaXRzIHN0YXRlLiBDaGFuZ2UgdGhlIEZsb3dSZXR1cm4gaW5zdGFuY2UgdmFyaWFibGUgZnJvbQotCSAgInN0YXRlIiB0byAiZmxvd19zdGF0ZSIsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCi0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmMgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3NldHVwKQotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3N0YXJ0LCBnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zdG9wKQotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2NsZWFudXApOiBOZXcgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUKLQkgIHByb2Nlc3NvcidzIHN0YXRlLgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3NldGNhcHMpOiBzdGFydCgpIGFzIHdlbGwgYXMgc2V0dXAoKSBoZXJlLgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3ByZXBhcmUpOiBSZXNwZWN0IENBTl9QUk9DRVNTX0lOX1BMQUNFLgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2NoYW5nZV9zdGF0ZSk6IFN0b3AgYW5kIGNsZWFudXAgdGhlCi0JICBwcm9jZXNzb3IgYXMgd2UgZ28gdG8gTlVMTC4KLQkgICogZXh0L2xhZHNwYS9nc3RsYWRzcGEuYyAoZ3N0X2xhZHNwYV9iYXNlX2luaXQpOiBSZXVzZSBidWZmZXJzIGlmCi0JICBJTlBMQUNFX0JST0tFTiBpcyBub3Qgc2V0LgotCSAgKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9wcmVwYXJlKToKLQkgIERvIHRoZSBhbGxvY19idWZmZXIgaW4gYnl0ZXMsIG5vdCBmcmFtZXMuCi0KLTIwMDYtMDgtMDQgMTA6MjE6MjYgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHN5cy94aW1hZ2UveGltYWdldXRpbC5jOiBGaXggcmdiIG1hc2tzIHdoZW4gcmVjb3JkaW5nIGluIDwgMjRicHAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDgtMDQgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogc3lzL3hpbWFnZS94aW1hZ2V1dGlsLmM6ICh4aW1hZ2V1dGlsX3hjb250ZXh0X2dldCk6Ci0JICBGaXggcmdiIG1hc2tzIHdoZW4gcmVjb3JkaW5nIGluIDwgMjRicHAuCi0KLTIwMDYtMDgtMDQgMDk6MjA6MjYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYzoKLQkgIEJQQgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc3JjX2FjdGl2YXRlX3B1bGwpOiBCUEIKLQotMjAwNi0wOC0wNCAwOTowNTo1MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOgotCSAgZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYyAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc2V0Y2FwcykgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3ByZXBhcmUpIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl91Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDgtMDQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmMgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3NldGNhcHMpCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfcHJlcGFyZSkKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl91cGRhdGVfaW5wdXRzKQotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3Byb2Nlc3MsIGdzdF9zaWduYWxfcHJvY2Vzc29yX3Blbl9idWZmZXIpCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfZmx1c2gpCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc2lua19hY3RpdmF0ZV9wdXNoKQotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3NyY19hY3RpdmF0ZV9wdWxsKQotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2NoYW5nZV9zdGF0ZSk6IFJlbW92ZSB0aGUgbGFzdCBvZiB0aGUgY29kZQotCSAgdGhhdCBhc3N1bWVzIHRoYXQgd2UgcHJvY2VzcyB3aG9sZSBidWZmZXJzIGF0IGEgdGltZS4gRml4IHNvbWUKLQkgIGRlYnVnZ2luZy4gU2VlbXMgdG8gd29yayBub3cgaW4gc29tZSBjYXNlcy4KLQotMjAwNi0wNy0zMSAyMjoyNzoyMiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9wcm9jZXNzKTogRml4IG5mcmFtZXMtY2hvb3NpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDgtMDEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmMgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3Byb2Nlc3MpOgotCSAgRml4IG5mcmFtZXMtY2hvb3NpbmcuCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfaW5pdCk6IEluaXQgcGVuZGluZ19pbiBhbmQgcGVuZGluZ19vdXQuCi0KLTIwMDYtMDctMzEgMjI6MDM6MDkgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYyAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfaW5pdCk6IE5vIG1vcmUgZGVmYXVsdCBzYW1wbGUgcmF0ZSwgYWx0aG91Z2ggd2UgbmV2ZXIgY2hlY2sgdGhhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDgtMDEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmMgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2luaXQpOiBObwotCSAgbW9yZSBkZWZhdWx0IHNhbXBsZSByYXRlLCBhbHRob3VnaCB3ZSBuZXZlciBjaGVjayB0aGF0IHRoZSBzYW1wbGUKLQkgIHJhdGUgYWN0dWFsbHkgZ2V0cyBzZXQuIFNvbWV0aGluZyBmb3IgdGhlIGZ1dHVyZS4KLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zZXRjYXBzKTogU29tZSByZWZjb3VudCBmaXhlcywgZmxvdyBmaXhlcy4KLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9ldmVudCk6IFJlZmNvdW50IGZpeGVuLgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3Byb2Nlc3MpOiBQdWxsIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvCi0JICBwcm9jZXNzIGZyb20gdGhlIHNpemVzIG9mIHRoZSBidWZmZXJzIGluIHRoZSBpbnB1dCBwZW5zLgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3Blbl9idWZmZXIpOiBSZW1vdmUgYW4gaW5jb3JyZWN0IEZJWE1FIDopCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfZG9fcHVsbHMpOiBBZGQgYW4gbmZyYW1lcyBhcmd1bWVudCwgYW5kIHVzZQotCSAgaXQgaW5zdGVhZCBvZiBidWZmZXJfZnJhbWVzLgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2dldHJhbmdlKTogUmVmY291bnQgZml4ZW4sIHBhc3MgbmZyYW1lcyBvbgotCSAgdG8gZG9fcHVsbHMuCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfY2hhaW4pCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc2lua19hY3RpdmF0ZV9wdXNoKQotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3NyY19hY3RpdmF0ZV9wdWxsKTogIFJlZmNvdW50IGZpeGVuLgotCSAgKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5oOiBObyBtb3JlIGJ1ZmZlcl9mcmFtZXMsIHlheS4KLQotMjAwNi0wNy0zMSAxOTo0NDoxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOiBkb24ndCBxdWVyeSBidWZmZXItZnJhbWVzIGZyb20gY2FwcywgYWRkIGxvdHMgb2YgZGVidWctbG9nLCB0cnkgZml4IGZvciBhc3NlcnQgKCMzNDkuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOiAoZ3N0X3NpZ25hbF9wcm9jZXNzb3Jfc2V0Y2FwcyksCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfcHJvY2Vzcyk6Ci0JICBkb24ndCBxdWVyeSBidWZmZXItZnJhbWVzIGZyb20gY2FwcywgYWRkIGxvdHMgb2YgZGVidWctbG9nLAotCSAgdHJ5IGZpeCBmb3IgYXNzZXJ0ICgjMzQ5MTg5KQotCi0yMDA2LTA3LTMxIDE1OjU4OjQzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy5jOiBGaXggZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgRml4IGRvY3MuCi0KLTIwMDYtMDctMjkgMTY6MzI6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYzogQWRkIGRlYnVncyBsb2dzIGhlcmUgYW5kIHRoZXJlLCBhZGQgbW9yZSBlcnJvciBoYW5kbGluZywgYWRkIHNvbWUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOgotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2FkZF9wYWRfZnJvbV90ZW1wbGF0ZSksCi0JICAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfaW5pdCksIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zZXRjYXBzKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9wcm9jZXNzKSwgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3Blbl9idWZmZXIpLAotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2RvX3B1bGxzKSwgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2dldHJhbmdlKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9zaW5rX2FjdGl2YXRlX3B1c2gpLAotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX3NyY19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9jaGFuZ2Vfc3RhdGUpOgotCSAgQWRkIGRlYnVncyBsb2dzIGhlcmUgYW5kIHRoZXJlLCBhZGQgbW9yZSBlcnJvciBoYW5kbGluZywgYWRkIHNvbWUKLQkgIEZJWE1FIGNvbW1lbnRzLCBmaWxlZCAjMzQ5MTg5Ci0KLTIwMDYtMDctMjkgMTE6MjI6NDcgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6IFNldCBjYXBzIG9uIGJ1ZmZlciBjb3JyZWN0bHkuICBGaXhlcyBidWcgIzM0OTE1NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNy0yOSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiAoZ3N0X3Ntb2tlZW5jX2dldGNhcHMpLAotCSAgKGdzdF9zbW9rZWVuY19zZXRjYXBzKSwgKGdzdF9zbW9rZWVuY19jaGFpbik6Ci0JICBTZXQgY2FwcyBvbiBidWZmZXIgY29ycmVjdGx5LiAgRml4ZXMgYnVnICMzNDkxNTUuCi0KLTIwMDYtMDctMjggMTY6MTc6MTcgKzAwMDAgIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLQotCSAgZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiBVc2VzIEdzdEFkYXB0ZXIgaW5zdGVhZCBvZiBvd24gYnVmZmVyaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogU2pvZXJkIFNpbW9ucyA8c2pvZXJkIGF0IGx1b24gZG90IG5ldD4KLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiAoZ3N0X211bHRpcGFydF9kZW11eF9iYXNlX2luaXQpLAotCSAgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2xhc3NfaW5pdCksIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2luaXQpLAotCSAgKGdzdF9tdWx0aXBhcnRfZGVtdXhfZmluYWxpemUpLCAoZ2V0X2xpbmVfZW5kKSwKLQkgIChtdWx0aXBhcnRfcGFyc2VfaGVhZGVyKSwgKG11bHRpcGFydF9maW5kX2JvdW5kYXJ5KSwKLQkgIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2NoYWluKSwgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfbXVsdGlwYXJ0X3NldF9wcm9wZXJ0eSksIChnc3RfbXVsdGlwYXJ0X2dldF9wcm9wZXJ0eSk6Ci0JICBVc2VzIEdzdEFkYXB0ZXIgaW5zdGVhZCBvZiBvd24gYnVmZmVyaW5nLgotCSAgQWN0dWFsbHkgcGFyc2VzIHRoZSBtaW1lLXR5cGUgY29ycmVjdGx5IChJbiB0ZXN0cyB0aGUgbWltZS10eXBlIHdhcwotCSAgYWx3YXlzICIiIHdpdGggdGhlIG9sZCB2ZXJzaW9uKS4KLQkgIFVzZXMgdGhlIENvbnRlbnQtbGVuZ3RoIGhlYWRlciBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgdGhpbmdzLgotCSAgUmVsaWFibHkgYXV0b3NjYW5zIHRoZSBib3VuZGFyeSBuYW1lIGJ5IGRlZmF1bHQuCi0JICBGaXhlcyAjMzQ5MDY4LgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiAoZ3N0X211bHRpcGFydF9tdXhfY29sbGVjdGVkKToKLQkgIERvbid0IHN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhIFxuLgotCi0yMDA2LTA3LTI4IDA4OjMyOjQ3ICswMDAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0KLQkgIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOiBPcGVuIHNvdXJjZSB3aXRoIE9fTk9OQkxPQ0sgKCMzNDkwMTUpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQnJpYW4gQ2FtZXJvbiA8YnJpYW4gZG90IGNhbWVyb24gYXQgc3VuIGNvbT4KLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmM6IChnc3Rfc3VuYXVkaW9zcmNfb3Blbik6Ci0JICBPcGVuIHNvdXJjZSB3aXRoIE9fTk9OQkxPQ0sgKCMzNDkwMTUpLgotCi0yMDA2LTA3LTI4IDA4OjIxOjI3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguKjogV2hpdGVzcGFjZSBmaXhlcyBhbmQgbW9yZSBkZWJ1ZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBXaGl0ZXNwYWNlIGZpeGVzIGFuZCBtb3JlIGRlYnVnCi0KLTIwMDYtMDctMjcgMTE6MjE6NTMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzogR2V0IHJpZCBvZiBvbGQgYW5kIHVudXNlZCBtYWdpYyBzb3VuZC1zZXJ2ZXIgcHJvcGVydGllcyBzdHVmZi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19jcmVhdGVfZWxlbWVudF93aXRoX3ByZXR0eV9uYW1lKSwKLQkgIChnc3RfYXV0b19hdWRpb19zaW5rX2ZpbmRfYmVzdCksCi0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgR2V0IHJpZCBvZiBvbGQgYW5kIHVudXNlZCBtYWdpYyBzb3VuZC1zZXJ2ZXIgcHJvcGVydGllcyBzdHVmZi4KLQkgIEFkZCBzdWZmaXggdG8gY2hpbGQgc2luaydzIG5hbWUgdGhhdCBtYWtlcyBpdCBlYXN5IHRvIHNlZSBmcm9tCi0JICB0aGUgbmFtZSBhbG9uZSB3aGljaCB0eXBlIGl0IGFjdHVhbGx5IGlzIChhbHNhLCBvc3MsIGVzZCwgZXRjLikuCi0KLTIwMDYtMDctMjcgMTA6MDU6MjcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLio6IFJlbmFtZSAiYnVmZmVyIiB0byAiYnVmZmVyLXNpemUiIHRvIG1ha2UgY2xlYXIgaXQgaXMgYSBzaXplIHdlIHNldCBhbmQgbm90IHNvbWUgc29ydCBvZiBmZWF0dXJlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3VkcHNyY19pbml0KSwKLQkgIChnc3RfdWRwc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3VkcHNyY19zdGFydCk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICBSZW5hbWUgImJ1ZmZlciIgdG8gImJ1ZmZlci1zaXplIiB0byBtYWtlIGNsZWFyIGl0IGlzIGEgc2l6ZSB3ZSBzZXQgYW5kCi0JICBub3Qgc29tZSBzb3J0IG9mIGZlYXR1cmUgd2UgZW5hYmxlLgotCi0yMDA2LTA3LTI3IDEwOjAxOjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvdWRwL2dzdHVkcHNyYy5jOiBVc2UgQ0xPU0VfU09DS0VUKCkgaGVyZSBpbnN0ZWFkIG9mIGNsb3NlKCkgdG8gbWFpbnRhaW4gd2luMzIgd29ya2luZXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX3N0YXJ0KToKLQkgIFVzZSBDTE9TRV9TT0NLRVQoKSBoZXJlIGluc3RlYWQgb2YgY2xvc2UoKSB0byBtYWludGFpbgotCSAgd2luMzIgd29ya2luZXNzLgotCi0yMDA2LTA3LTI3IDA5OjA0OjUxICswMDAwICBUaGlqcyBWZXJtZWlyIDx0aGlqcy52ZXJtZWlyQGJhcmNvLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuKjogQWRkZWQgImJ1ZmZlciIgcHJvcGVydHkgdG8gY29udHJvbCB0aGUga2VybmVsIHJlY2VpdmUgYnVmZmVyIHNpemUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBUaGlqcyBWZXJtZWlyIDx0aGlqcyBkb3QgdmVybWVpciBhdCBiYXJjbyBkb3QgY29tPgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwgKGdzdF91ZHBzcmNfaW5pdCksCi0JICAoZ3N0X3VkcHNyY19jcmVhdGUpLCAoZ3N0X3VkcHNyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF91ZHBzcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF91ZHBzcmNfc3RhcnQpOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5oOgotCSAgQWRkZWQgImJ1ZmZlciIgcHJvcGVydHkgdG8gY29udHJvbCB0aGUga2VybmVsIHJlY2VpdmUgYnVmZmVyIHNpemUuCi0JICBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KLQkgIFNtYWxsIGNsZWFudXBzLiBGaXhlcyAjMzQ4NzUyLgotCSAgQVBJOiBidWZmZXIgcHJvcGVydHkKLQotMjAwNi0wNy0yNiAxNjozNjo1OSArMDAwMCAgS2FpIFZlaG1hbmVuIDxrdjIwMDRAZWNhLmN4PgotCi0JICBnc3QvcnRwLzogRml4IHRpbWVzdGFtcCBjYWxjdWxhdGlvbiBvbiBvdXRnb2luZyBSVFAgcGFja2V0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEthaSBWZWhtYW5lbiA8a3YyMDA0IGF0IGVjYSBkb3QgY3g+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOiAoZ3N0X3J0cF9wY21hX3BheV9mbHVzaCksCi0JICAoZ3N0X3J0cF9wY21hX3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6IChnc3RfcnRwX3BjbXVfcGF5X2ZsdXNoKSwKLQkgIChnc3RfcnRwX3BjbXVfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgRml4IHRpbWVzdGFtcCBjYWxjdWxhdGlvbiBvbiBvdXRnb2luZyBSVFAgcGFja2V0cy4KLQkgIEZpeGVzICMzNDg2NzUuCi0KLTIwMDYtMDctMjYgMTA6MDc6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6IGlzIHN0aWxsIHN1Yi1vcHRpbWFsIHRob3VnaCwgc2luY2Ugd2UgZG9uJ3QgcmV0YWluIG9yIGV4dHJhY3QgdGhlIGNvbW1lbnQgZGVzY3JpcHRpb25zIHByby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICBGaXggd3JpdGluZyBvZiBjb21tZW50IGZyYW1lcyAoc2hvdWxkIGJlIENPTU0gbm90IFRDT00pLAotCSAgaXMgc3RpbGwgc3ViLW9wdGltYWwgdGhvdWdoLCBzaW5jZSB3ZSBkb24ndCByZXRhaW4gb3IKLQkgIGV4dHJhY3QgdGhlIGNvbW1lbnQgZGVzY3JpcHRpb25zIHByb3Blcmx5ICgjMzM0Mzc1LAotCSAgYWxzbyBzZWUgIzMzNDM3NSkuCi0KLTIwMDYtMDctMjYgMDk6MDI6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAjZGVmaW5lICdmYWN0JyBSSUZGIGNodW5rIGlmIHdlIGFyZSBub3QgY29tcGlsaW5nIGFnYWluc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgICNkZWZpbmUgJ2ZhY3QnIFJJRkYgY2h1bmsgaWYgd2UgYXJlIG5vdCBjb21waWxpbmcgYWdhaW5zdAotCSAgLWJhc2UgQ1ZTICh3ZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiAtYmFzZSBDVlMgZm9yIHRoaXMKLQkgIG9uZSBkZWZpbmUgb25seSwgYW5kIGFsc28gbm90IGZvciByZWxlYXNlIG9yZGVyIHJlYXNvbnMpLgotCi0yMDA2LTA3LTI2IDA4OjE3OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOiBIYW5kbGUgbXVsdGlwbGUgdGFncyBvZiB0aGUgc2FtZSB0eXBlIHByb3Blcmx5LiBSZS1pbmplY3QgdW5wYXJzZWQgSUQzdjIgZnJhbWVzIHRoYXQgd2UgZ2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgSGFuZGxlIG11bHRpcGxlIHRhZ3Mgb2YgdGhlIHNhbWUgdHlwZSBwcm9wZXJseS4gUmUtaW5qZWN0Ci0JICB1bnBhcnNlZCBJRDN2MiBmcmFtZXMgdGhhdCB3ZSBnZXQgYXMgYmluYXJ5IGJsb2JzIGZyb20KLQkgIGlkM2RlbXV4IGludG8gdGhlIHRhZyBhZ2FpbiBzbyB3ZSBkb24ndCBsb3NlIGluZm9ybWF0aW9uCi0JICB3aGVuIHJldGFnZ2luZyAoIzMzNDM3NSkuCi0KLTIwMDYtMDctMjUgMTc6NTQ6MjUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IERvY3VtZW50IG5ld2x5LWFkZGVkIHByb3BlcnRpZXMgcHJvcGVybHksIHNvIHRoYXQgdGhlcmUgaXMgYSAnU2luY2U6IDAuMTAuNCcgaW4gdGhlIHBsdWdpbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IChnc3RfeGltYWdlX3NyY19jbGFzc19pbml0KToKLQkgIERvY3VtZW50IG5ld2x5LWFkZGVkIHByb3BlcnRpZXMgcHJvcGVybHksIHNvIHRoYXQgdGhlcmUgaXMgYQotCSAgJ1NpbmNlOiAwLjEwLjQnIGluIHRoZSBwbHVnaW4gZG9jcy4gQ29udmVydCBzb21lIHByb3BlcnR5Ci0JICBuYW1lcyBpbnRvIGNhbm9uaWNhbCBHT2JqZWN0IHN0eWxlIChHT2JqZWN0IHdpbGwgZG8gdGhhdAotCSAgaW50ZXJuYWxseSBhbnl3YXkpLgotCi0yMDA2LTA3LTI1IDE2OjQ3OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiBFeHRyYWN0IGZyYW1lcyBmb3IgSUQzdjIgdmVyc2lvbnMgcHJpb3IgdG8gSUQzdjIuMy4wIHByb3Blcmx5IGFzIHdlbGwsIGFuZCBhZGQgdGhlIHZlcnNpb24gdG8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgKGlkM2RlbXV4X2FkZF9pZDN2Ml9mcmFtZV9ibG9iX3RvX3RhZ2xpc3QpOgotCSAgRXh0cmFjdCBmcmFtZXMgZm9yIElEM3YyIHZlcnNpb25zIHByaW9yIHRvIElEM3YyLjMuMCBwcm9wZXJseSBhcwotCSAgd2VsbCwgYW5kIGFkZCB0aGUgdmVyc2lvbiB0byB0aGUgYmxvYidzIGJ1ZmZlciBjYXBzLCBzaW5jZSB0aGF0Ci0JICBpbmZvcm1hdGlvbiB3aWxsIGJlIG5lZWRlZCBmb3IgZGVzZXJpYWxpc2F0aW9uIGxhdGVyIG9uICgjMzQ4NjQ0KS4KLQotMjAwNi0wNy0yNSAxMzoxNDowNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IE1vdmVkIHdpbjMyIHZhcmlhbnQgb2YgR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiB0byBnc3RpbmZvLmguIEZpeGVkIGluZGVudGF0aW9uIGFuZCBzcGFjaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzKSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSk6Ci0JICBNb3ZlZCB3aW4zMiB2YXJpYW50IG9mIEdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gdG8gZ3N0aW5mby5oLiBGaXhlZAotCSAgaW5kZW50YXRpb24gYW5kIHNwYWNpbmcuCi0KLTIwMDYtMDctMjQgMjE6NDM6MDYgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay4qOiBBZGQgYW4gYXR0ZW51YXRpb24gcHJvcGVydHkgdGhhdCB3aWxsIGRpcmVjdGx5IGF0dGVudWF0ZSB0aGUgZGlyZWN0c291bmQgYnVmZmVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuaDoKLQkgICogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jOgotCSAgQWRkIGFuIGF0dGVudWF0aW9uIHByb3BlcnR5IHRoYXQgd2lsbCBkaXJlY3RseSBhdHRlbnVhdGUgdGhlCi0JICBkaXJlY3Rzb3VuZCBidWZmZXIuCi0JICBDaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGRpcmVjdHNvdW5kIHNlY29uZGFyeSBidWZmZXIgdG8gYSBoYWxmIHNlY29uZC4KLQkgIEFkZCBtb3JlIGRlYnVnIGxvZ3MuCi0JICBBZGQgYSBsb2NrIHRvIHByb3RlY3QgZHNvdW5kIGJ1ZmZlciB3cml0ZSBhY2Nlc3MuCi0JICBGaXggYSBiYWQgaW1wbGVtZW50YXRpb24gb2YgcmVzZXQuCi0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0ZHJhd3NpbmsuaDoKLQkgIEFkZCBhIGtlZXBfYXNwZWN0X3JhdGlvIHByb3BlcnR5LgotCSAgRG8gbm90IHVzZSBvdmVybGF5IGlmIG5vdCBzdXBwb3J0ZWQuCi0JICBBZGQgbW9yZSBkZWJ1ZyBsb2dzLgotCSAgUmVtb3ZlIG92ZXJ3cml0ZSBvZiBXTV9FUkFTRUJLR05EIG1lc3NhZ2UgaGFuZGxpbmcuIEl0IHdhcyBub3QKLQkgIHJlZHJhd2luZyBib3JkZXIgd2hlbiBrZWVwX2FzcGVjdF9yYXRpbyB3YXMgZW5hYmxlZC4KLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgdXBkYXRlIHZlcnNpb24gd2FpdGluZyBhbiBhdXRvLWdlbmVyYXRlZCBjb25maWcuaAotCi0yMDA2LTA3LTI0IDE1OjI1OjQ5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBVcGRhdGUgZmlsZXMgdG8gQ1ZTL1ByZXJlbGVhc2UgdmVyc2lvbiwgYWRkIGVzZHNpbmsgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxhdy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFubm9kZXgueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JhbGFuY2UueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXhpbWFnZXNyYy54bWw6Ci0JICBVcGRhdGUgZmlsZXMgdG8gQ1ZTL1ByZXJlbGVhc2UgdmVyc2lvbiwgYWRkIGVzZHNpbmsgZG9jcy4KLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6Ci0JICBBZGQgZ3RrLWRvYyBibHVyYi4KLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JICBGaXggdHlwbyBpbiBlbGVtZW50IGRlc2NyaXB0aW9uLgotCi0yMDA2LTA3LTI0IDE0OjU0OjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2VMb2cgc3VyZ2VyeTogZml4IFN0ZWZhbidzIGUtbWFpbCBhZGRyZXNzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBmaXggU3RlZmFuJ3MgZS1tYWlsIGFkZHJlc3MKLQotMjAwNi0wNy0yNCAxNDo0OToxOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2VzZC9lc2RzaW5rLmM6IFByZXZlbnQgbGliZXNkIGZyb20gYXV0by1zcGF3bmluZyBhIHNvdW5kIGRhZW1vbiBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiBOb3cgdGhhdCB3ZSBkb24ndCBkLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19vcGVuKSwKLQkgIChnc3RfZXNkc2lua19mYWN0b3J5X2luaXQpOgotCSAgUHJldmVudCBsaWJlc2QgZnJvbSBhdXRvLXNwYXduaW5nIGEgc291bmQgZGFlbW9uIGlmIGl0Ci0JICBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiBOb3cgdGhhdCB3ZSBkb24ndCBkbyBldmlsIHN0dWZmCi0JICBsaWtlIHRoYXQgYW55IGxvbmdlciB3ZSBjYW4gZ2l2ZSBlc2RzaW5rIGEgcmFuayBzbyB0aGF0Ci0JICBhdXRvYXVkaW9zaW5rIHdpbGwgdHJ5IGl0IGFzIHdlbGwgaWYgYWxsIG90aGVyIGF1ZGlvCi0JICBzaW5rcyBmYWlsICgjMzQzMDUxKS4KLQotMjAwNi0wNy0yNCAxNDo0MjoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2VzZC9NYWtlZmlsZS5hbTogT29wcywgbmVlZCB0byByZW1vdmUgUkVBRE1FIGZyb20gRVhUUkFfRElTVCBhcyB3ZWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9lc2QvTWFrZWZpbGUuYW06Ci0JICBPb3BzLCBuZWVkIHRvIHJlbW92ZSBSRUFETUUgZnJvbSBFWFRSQV9ESVNUIGFzIHdlbGwuCi0KLTIwMDYtMDctMjQgMTQ6Mzc6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9lc2QvUkVBRE1FOiBSZW1vdmUsIGl0IGNvbnRhaW5zIG5vdGhpbmcgdXNlZnVsIGFueXdheS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZXNkL1JFQURNRToKLQkgIFJlbW92ZSwgaXQgY29udGFpbnMgbm90aGluZyB1c2VmdWwgYW55d2F5LgotCSAgKiBleHQvZXNkL2VzZHNpbmsuYzogKGdzdF9lc2RzaW5rX2luaXQpLCAoZ3N0X2VzZHNpbmtfcHJlcGFyZSksCi0JICAoZ3N0X2VzZHNpbmtfZGVsYXkpOgotCSAgU29tZSBzbWFsbCBjbGVhbi11cHM7IHVzZSBHU1RfQk9JTEVSUExBVEUgZXRjLgotCi0yMDA2LTA3LTI0IDE0OjE2OjA2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvbGF3LzogRml4IG5lZ290aWF0aW9uIHRvIGRlYWwgd2l0aCBBTlkvRU1QVFkgY2FwcyBpbnN0ZWFkIG9mIGxlYWtpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoYWxhd2RlY19nZXRjYXBzKToKLQkgICogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOiAoYWxhd2VuY19nZXRjYXBzKSwgKGdzdF9hbGF3ZW5jX2NoYWluKToKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzogKG11bGF3ZGVjX2dldGNhcHMpOgotCSAgKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOiAobXVsYXdlbmNfZ2V0Y2Fwcyk6Ci0JICBGaXggbmVnb3RpYXRpb24gdG8gZGVhbCB3aXRoIEFOWS9FTVBUWSBjYXBzIGluc3RlYWQgb2YgbGVha2luZy4KLQotMjAwNi0wNy0yNCAxMzo0MDo1NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuKjogVXNlIGluZm9ybWF0aW9uIGZyb20gJ2ZhY3QnIGNodW5rIGZvciBsZW5ndGggY2FsY3VsYXRpb24gb2YgY29tcHJlc3NlZCBzYW1wbGVzLiBDYWxjdWxhdGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhcnNlX290aGVyKSwgKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9nZXRfdXBzdHJlYW1fc2l6ZSksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLAotCSAgKGdzdF93YXZwYXJzZV9hZGRfc3JjX3BhZCksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpLAotCSAgKGdzdF93YXZwYXJzZV9wYWRfcXVlcnkpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIFVzZSBpbmZvcm1hdGlvbiBmcm9tICdmYWN0JyBjaHVuayBmb3IgbGVuZ3RoIGNhbGN1bGF0aW9uIG9mIGNvbXByZXNzZWQKLQkgIHNhbXBsZXMuIENhbGN1bGF0ZSBicHMgaWYgYm9ndXMgdmFsdWUgaXMgZm91bmQgaW4gd2F2IGhlYWRlciAoZW1iZWRlZAotCSAgbXAyL21wMykuCi0KLTIwMDYtMDctMjQgMTE6NDg6MDMgKzAwMDAgIEpvbmkgVmFsdGFuZW4gPGpvbmkudmFsdGFuZW5AbW92aWFsLmZpPgotCi0JICBQb3J0IHVkcCBwbHVnaW4gdG8gd2luMzIgKCMzNDUyODgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBCYXNlZCBvbiBwYXRjaCBieTogSm9uaSBWYWx0YW5lbiAgPGpvbmkgZG90IHZhbHRhbmVuIGF0IG1vdmlhbCBmaT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzogKGdzdF9keW51ZHBzaW5rX2luaXQpLAotCSAgKGdzdF9keW51ZHBzaW5rX2ZpbmFsaXplKSwgKGdzdF9keW51ZHBzaW5rX2Nsb3NlKToKLQkgICogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmg6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2luaXQpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfZmluYWxpemUpLCAoZ3N0X211bHRpdWRwc2lua19jbG9zZSk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc2luay5oOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19pbml0KSwgKGdzdF91ZHBzcmNfY3JlYXRlKSwKLQkgIChnc3RfdWRwc3JjX3N0YXJ0KSwgKGdzdF91ZHBzcmNfc3RvcCk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYzogKGdzdF91ZHBfbmV0X3V0aWxzX3dpbjMyX2luZXRfYXRvbiksCi0JICAoZ3N0X3VkcF9uZXRfdXRpbHNfd2luMzJfd3NhX3N0YXJ0dXApOgotCSAgKiBnc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmg6Ci0JICBQb3J0IHVkcCBwbHVnaW4gdG8gd2luMzIgKCMzNDUyODgpLgotCi0yMDA2LTA3LTI0IDExOjAwOjM0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiBSZW1vdmUgdW53YW50ZWQgREVCVUcgbGluZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX3NlbmQpOgotCSAgUmVtb3ZlIHVud2FudGVkIERFQlVHIGxpbmUuCi0KLTIwMDYtMDctMjMgMTE6MzM6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC86IE9uIHNlY29uZCB0aG91Z2h0LCBpdCBtaWdodCBiZSB3aXNlciBhbmQgbW9yZSBlZmZpY2llbnQgbm90IHRvIGRvIHRhZyByZWdpc3RyYXRpb24gZnJvbSBhIHN0cmVhbWluZyB0aC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOgotCSAgKGlkM2RlbXV4X2FkZF9pZDN2Ml9mcmFtZV9ibG9iX3RvX3RhZ2xpc3QpOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5oOgotCSAgT24gc2Vjb25kIHRob3VnaHQsIGl0IG1pZ2h0IGJlIHdpc2VyIGFuZCBtb3JlIGVmZmljaWVudAotCSAgbm90IHRvIGRvIHRhZyByZWdpc3RyYXRpb24gZnJvbSBhIHN0cmVhbWluZyB0aHJlYWQuCi0KLTIwMDYtMDctMjMgMTA6NTY6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6IFB1dCBJRDN2MiBmcmFtZXMgd2UgY2FuJ3QgcGFyc2UgYXMgYmluYXJ5IGJsb2JzIGludG8gcHJpdmF0ZSB0YWdzLCBzbyB0aGF0IHRoZXkgYXJlIG5vdCBsb3N0IC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JICAoaWQzZGVtdXhfYWRkX2lkM3YyX2ZyYW1lX2Jsb2JfdG9fdGFnbGlzdCksCi0JICAoaWQzZGVtdXhfaWQzdjJfZnJhbWVzX3RvX3RhZ19saXN0KToKLQkgIFB1dCBJRDN2MiBmcmFtZXMgd2UgY2FuJ3QgcGFyc2UgYXMgYmluYXJ5IGJsb2JzIGludG8gcHJpdmF0ZQotCSAgdGFncywgc28gdGhhdCB0aGV5IGFyZSBub3QgbG9zdCB3aGVuIHJldGFnZ2luZywgYXQgbGVhc3Qgb25jZQotCSAgaWQzdjJtdXggaGFzIGJlZW4gdGF1Z2h0IHRvIHJlLWluamVjdCB0aG9zZSBmcmFtZXMgYWdhaW4uCi0JICBTZWUgYnVnICMzMzQzNzUuCi0KLTIwMDYtMDctMjEgMTA6NTc6MDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogRml4IHNvbWUgbGVha3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQkgIEZpeCBzb21lIGxlYWtzLgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAoaWQzZGVtdXhfaWQzdjJfZnJhbWVzX3RvX3RhZ19saXN0KToKLQkgIERvbid0IHVzZSBcbiBpbiBkZWJ1ZyBsaW5lcy4KLQotMjAwNi0wNy0yMCAxODo0ODozMiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGQgYW5ub2RleCBhbmQgaWN5ZGVtdXgsIGNsZWFudXAgdGhlIHNlY3Rpb25zIGEgYml0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgQWRkIGFubm9kZXggYW5kIGljeWRlbXV4LCBjbGVhbnVwIHRoZSBzZWN0aW9ucyBhIGJpdAotCi0yMDA2LTA3LTE5IDE0OjM2OjAwICswMDAwICBNYXJ0aW4gU3p1bGVja2kgPGNvbXBpekBzdWtpbWFzaGl0YS5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogSWYgImRldmljZS1uYW1lIiBpcyByZXF1ZXN0ZWQgYW5kIHRoZSBkZXZpY2UgaXMgbm90IG9wZW4sIHRyeSB0byB0ZW1wb3JhcmlseSBvcGVuIGl0IHRvIG9idC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFydGluIFN6dWxlY2tpCi0JICAqIHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzogKGdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyKToKLQkgIElmICJkZXZpY2UtbmFtZSIgaXMgcmVxdWVzdGVkIGFuZCB0aGUgZGV2aWNlIGlzIG5vdAotCSAgb3BlbiwgdHJ5IHRvIHRlbXBvcmFyaWx5IG9wZW4gaXQgdG8gb2J0YWluIHRoaXMKLQkgIGluZm9ybWF0aW9uICgjMzQyNDk0KS4KLQotMjAwNi0wNy0xOSAxMTo1Mjo1MyArMDAwMCAgQWxleCBMYW5jYXN0ZXIgPGFsZXhsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzogV3JpdGUgR1NUX1RBR19FTkNPREVSIGFuZCBHU1RfVEFHX0VOQ09ERVJfVkVSU0lPTiBhcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQWxleCBMYW5jYXN0ZXIgPGFsZXhsIGF0IHVzZXJzIHNvdXJjZWZvcmdlIG5ldD4KLQkgICogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIFdyaXRlIEdTVF9UQUdfRU5DT0RFUiBhbmQgR1NUX1RBR19FTkNPREVSX1ZFUlNJT04gYXMKLQkgIElEM3YyIFRTU0UgZnJhbWVzICgjMzQ3ODk4KS4KLQotMjAwNi0wNy0xOSAwNzo0MDo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnk6IG1lbnRpb24gZml4ZWQgYnVnCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5OiBtZW50aW9uIGZpeGVkIGJ1ZwotCi0yMDA2LTA3LTE4IDE5OjU5OjAxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IFJlc3BlY3QgbXBlZ3ZlcnNpb24gZm9yICJ2aWRlby9tcGVnIiBhbmQgZ2l2ZSBtZXNzYWdlIGluIGNhc2Ugb2YgdW5oYW5kbGVkIHZlcnNpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF92aWRzaW5rX3NldF9jYXBzKToKLQkgIFJlc3BlY3QgbXBlZ3ZlcnNpb24gZm9yICJ2aWRlby9tcGVnIiBhbmQgZ2l2ZSBtZXNzYWdlIGluIGNhc2Ugb2YKLQkgIHVuaGFuZGxlZCB2ZXJzaW9ucy4KLQotMjAwNi0wNy0xOCAxODowNToxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiBGaXggY2FwcyBhZnRlciBwcmV2aW91cyBjaGFuZ2UgdG8gYnl0ZSBvcmRlciBlbmRpYW5uZXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19jaGFpbik6Ci0JICBGaXggY2FwcyBhZnRlciBwcmV2aW91cyBjaGFuZ2UgdG8gYnl0ZSBvcmRlciBlbmRpYW5uZXNzLgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX3Jlc2V0KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zaW5rX2V2ZW50KSwgKGdzdF93YXZwYWNrX3BhcnNlX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2xvb3ApOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgIFF1ZXVlIGluY29taW5nIGV2ZW50cyBpZiB0aGVyZSdzIG5vIHNvdXJjZSBwYWQgeWV0IGFuZAotCSAgc2VuZCB0aGVtIGRvd25zdHJlYW0gbGF0ZXIgd2hlbiB0aGUgcGFkIGlzIHRoZXJlLgotCi0yMDA2LTA3LTE4IDE2OjQ3OjI1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLio6IE91dHB1dCBhdWRpbyBpbiBuYXRpdmUgYnl0ZSBvcmRlciAod2hpY2ggaXMgYWxzbyBob3cgd2UgZ2V0IHNhbXBsZXMgZnJvbSB3YXZwYWNrKTsgb3V0cHUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfaW5pdCksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2Zvcm1hdF9zYW1wbGVzKSwKLQkgIChnc3Rfd2F2cGFja19kZWNfY2xpcF9vdXRnb2luZ19idWZmZXIpLCAoZ3N0X3dhdnBhY2tfZGVjX2NoYWluKSwKLQkgIChnc3Rfd2F2cGFja19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSAgT3V0cHV0IGF1ZGlvIGluIG5hdGl2ZSBieXRlIG9yZGVyICh3aGljaCBpcyBhbHNvIGhvdyB3ZSBnZXQKLQkgIHNhbXBsZXMgZnJvbSB3YXZwYWNrKTsgb3V0cHV0IHNhbXBsZXMgd2l0aCAyMS0yNCBiaXQgZGVwdGgKLQkgIHdpdGggMzIgYml0IHdpZHRoIChtYWtlcyB0aGluZ3MgZWFzaWVyIGZvciB1cykuCi0KLTIwMDYtMDctMTggMTU6NTM6MzUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuKjogTW9yZSBjbGVhbi11cHM6IHJlbW92ZSBtb3N0IG9mIHRoZSBkaXNmdW5jdGlvbmFsIGNvcnJlY3Rpb24gcGFkIHN0dWZmIGZvciBub3csIGlmIGl0IGV2ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19iYXNlX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19jbGFzc19pbml0KSwgKGdzdF93YXZwYWNrX2RlY19pbml0KSwKLQkgIChnc3Rfd2F2cGFja19kZWNfZmluYWxpemUpLCAoZ3N0X3dhdnBhY2tfZGVjX2Zvcm1hdF9zYW1wbGVzKSwKLQkgIChnc3Rfd2F2cGFja19kZWNfY2xpcF9vdXRnb2luZ19idWZmZXIpLCAoZ3N0X3dhdnBhY2tfZGVjX2NoYWluKSwKLQkgIChnc3Rfd2F2cGFja19kZWNfc2lua19ldmVudCksIChnc3Rfd2F2cGFja19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSAgTW9yZSBjbGVhbi11cHM6IHJlbW92ZSBtb3N0IG9mIHRoZSBkaXNmdW5jdGlvbmFsIGNvcnJlY3Rpb24KLQkgIHBhZCBzdHVmZiBmb3Igbm93LCBpZiBpdCBldmVyIGdldHMgaW1wbGVtZW50ZWQgYSBsb3Qgb2Ygc3R1ZmYKLQkgIHdpbGwgaGF2ZSB0byBiZSByZXdyaXR0ZW4gYW55d2F5OyByZWRvIGNoYWluIGZ1bmN0aW9uLCBtb3ZlCi0JICBlcnJvcnMgdG8gZW5kLCBlcnJvciBvdXQgaW5zdGVhZCBvZiBnX2Fzc2VydCgpaW5nLiBBbHNvIHJlbmFtZQotCSAgb3Zlcmx5IGxvbmcgdmFyaWFibGUgJ3dhdnBhY2tkZWMnIHRvIGp1c3QgJ2RlYyc7IG1pc2NlbGxhbmVvdXMKLQkgIG90aGVyIHNtYWxsIHN0dWZmLgotCi0yMDA2LTA3LTE4IDE0OjA4OjA2ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHdhdnBhY2sgdmVyc2lvbiBhbmQgZGVmaW5lIFdBVlBBQ0tfT0xEX0FQSSBpZiBuZWNlc3NhcnkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tbyBhdCBjaXJjdWxhci1jaGFvcy5vcmc+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIENoZWNrIGZvciB3YXZwYWNrIHZlcnNpb24gYW5kIGRlZmluZSBXQVZQQUNLX09MRF9BUEkgaWYKLQkgIG5lY2Vzc2FyeS4KLQkgICogZXh0L3dhdnBhY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uYzogKGdzdF93YXZwYWNrX3JlYWRfaGVhZGVyKSwKLQkgIChnc3Rfd2F2cGFja19yZWFkX21ldGFkYXRhKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2NvbW1vbi5oOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFja19kZWNfY2xhc3NfaW5pdCksIChnc3Rfd2F2cGFja19kZWNfaW5pdCksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2ZpbmFsaXplKSwgKGdzdF93YXZwYWNrX2RlY19mb3JtYXRfc2FtcGxlcyksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2NsaXBfb3V0Z29pbmdfYnVmZmVyKSwgKGdzdF93YXZwYWNrX2RlY19jaGFpbiksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX3NpbmtfZXZlbnQpLCAoZ3N0X3dhdnBhY2tfZGVjX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX3JlcXVlc3RfbmV3X3BhZCksIChnc3Rfd2F2cGFja19kZWNfcGx1Z2luX2luaXQpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmg6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19jbGFzc19pbml0KSwKLQkgIChnc3Rfd2F2cGFja19lbmNfaW5pdCksIChnc3Rfd2F2cGFja19lbmNfZmluYWxpemUpLAotCSAgKGdzdF93YXZwYWNrX2VuY19zZXRfd3BfY29uZmlnKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9iYXNlX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2ZpbmFsaXplKSwgKGdzdF93YXZwYWNrX3BhcnNlX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2luZGV4X2dldF9lbnRyeV9mcm9tX3NhbXBsZSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2Vfc2Nhbl90b19maW5kX3NhbXBsZSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NyZWF0ZV9zcmNfcGFkKToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmg6Ci0JICBQb3J0IHRvIG5ldy9vZmZpY2lhbCB3YXZwYWNrIEFQSSwgZG9uJ3QgdXNlIEFQSSB0aGF0IHdhcyBleHBvcnRlZAotCSAgaW4gd2F2cGFjayBoZWFkZXIgZmlsZXMgYW5kIGluIHRoZSBsaWIgYnV0IG1lYW50IHRvIGJlIHByaXZhdGUsIGF0Ci0JICBsZWFzdCBub3QgZm9yIHJlY2VudCB3YXZwYWNrIHZlcnNpb25zOyBtaXNjLiAnY2xlYW51cHMnICgjMzQ3NDQzKS4KLQotMjAwNi0wNy0xNyAxMDoyNTo1NyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBTdG9yZSBkdXJhdGlvbiBpbiB1aW50NjQgdG9vIGluc3RlYWQgb2YgY2xpcHBpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfcXRkZW11eF9wcmVwYXJlX2N1cnJlbnRfc2FtcGxlKSwKLQkgIChnc3RfcXRkZW11eF9sb29wX3N0YXRlX21vdmllKToKLQkgIFN0b3JlIGR1cmF0aW9uIGluIHVpbnQ2NCB0b28gaW5zdGVhZCBvZiBjbGlwcGluZy4KLQkgIFdoZW4gd2UgZG8gYSBrZXlmcmFtZSBzZWVrIGFuZCB0aGUgcmVxdWVzdGVkIHRpbWUgaXMgYXQgdGhlCi0JICBrZXlmcmFtZSwgZG9uJ3Qgc2VlayBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGtleWZyYW1lLgotCSAgRml4ZXMgIzM0NzQzOS4KLQotMjAwNi0wNy0xNyAxMDoyMjo1NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuKjogVXNlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHNlZ21lbnQgaW5zdGVhZCBvZiBsZWFraW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IChnc3RfcG5nZGVjX2luaXQpLCAoYnVmZmVyX2NsaXApLAotCSAgKGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCksIChnc3RfcG5nZGVjX3Rhc2spLAotCSAgKGdzdF9wbmdkZWNfY2hhaW4pLCAoZ3N0X3BuZ2RlY19zaW5rX2V2ZW50KSwKLQkgIChnc3RfcG5nZGVjX2xpYnBuZ19pbml0KSwgKGdzdF9wbmdkZWNfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcG5nZGVjX3NpbmtfYWN0aXZhdGVfcHVzaCk6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmg6Ci0JICBVc2Ugc3RhdGljYWxseSBhbGxvY2F0ZWQgc2VnbWVudCBpbnN0ZWFkIG9mIGxlYWtpbmcuCi0JICBWYXJpb3VzIGNsZWFudXBzLgotCSAgRml4IGZsdXNoIGFuZCBzZWVrIGhhbmRsaW5nLgotCi0yMDA2LTA3LTE2IDE0OjMxOjQ4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQWRkZWQgc2ltcGxlIGdlbmVyaWMgbXBlZzQgZGVwYXlsb2FkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuYzogKGdzdF9ydHBfbXA0Z19kZXBheV9iYXNlX2luaXQpLAotCSAgKGdzdF9ydHBfbXA0Z19kZXBheV9jbGFzc19pbml0KSwgKGdzdF9ydHBfbXA0Z19kZXBheV9pbml0KSwKLQkgIChnc3RfcnRwX21wNGdfZGVwYXlfc2V0Y2FwcyksIChnc3RfcnRwX21wNGdfZGVwYXlfcHJvY2VzcyksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cF9tcDRnX2RlcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6IChnc3RfcnRwX21wNGdfcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfcGFyc2VfYXVkaW9fY29uZmlnKSwgKGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcDRnX3BheV9mbHVzaCk6Ci0JICBBZGRlZCBzaW1wbGUgZ2VuZXJpYyBtcGVnNCBkZXBheWxvYWRlci4KLQkgIEZpeCBnZW5lcmljIG1wZWc0IHBheWxvYWRlci4KLQotMjAwNi0wNy0xNSAxNToyNTowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBEb24ndCB0cnkgZG9pbmcgc3RhdGUgY2hhbmdlcyBvbiBhIE5VTEwgcG9pbnRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZXRfc3RhdGUpOgotCSAgRG9uJ3QgdHJ5IGRvaW5nIHN0YXRlIGNoYW5nZXMgb24gYSBOVUxMIHBvaW50ZXIuCi0KLTIwMDYtMDctMTUgMTE6NTA6MjUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtLzogRG8gbm90IHVzZSBkZXByZWNhdGVkIGd0ayBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6IChtYWluKToKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmM6IChtYWluKToKLQkgIERvIG5vdCB1c2UgZGVwcmVjYXRlZCBndGsgZnVuY3Rpb25zLgotCi0yMDA2LTA3LTE0IDEzOjMzOjU0ICswMDAwICBTZWJhc3RpZW4gQ290ZSA8c2ViYXM2NDJAeWFob28uY2E+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuKjogcnRwYW1yZGVjIGlzbid0IGEgc3ViY2xhc3Mgb2YgR3N0QmFzZVJ0cERlcGF5bG9hZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGllbiBDb3RlIDxzZWJhczY0MiBhdCB5YWhvbyBkb3QgY2E+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogKGdzdF9ydHBfYW1yX2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9hbXJfZGVwYXlfY2xhc3NfaW5pdCksIChnc3RfcnRwX2Ftcl9kZXBheV9pbml0KSwKLQkgIChnc3RfcnRwX2Ftcl9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfYW1yX2RlcGF5X3Byb2Nlc3MpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5Lmg6Ci0JICBydHBhbXJkZWMgaXNuJ3QgYSBzdWJjbGFzcyBvZiBHc3RCYXNlUnRwRGVwYXlsb2FkLgotCSAgRml4ZXMgIzMyMTE5MQotCi0yMDA2LTA3LTE0IDEyOjAxOjA1ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiBGaXggc2VnZmF1bHQgd2hlbiBtb3ZpbmcgbW91c2UgcG9pbnRlciB0byB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNy0xNCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiAoZ3N0X3hpbWFnZV9zcmNfeGltYWdlX2dldCksCi0JICAoZ3N0X3hpbWFnZV9zcmNfZ2V0X2NhcHMpLCAoZ3N0X3hpbWFnZV9zcmNfY2xhc3NfaW5pdCk6Ci0JICBGaXggc2VnZmF1bHQgd2hlbiBtb3ZpbmcgbW91c2UgcG9pbnRlciB0byB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4KLQotMjAwNi0wNy0xMyAxNToyMjoyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdGRlbXV4LnhtbDoKLQkgIHJlbW92ZSBzZGx2aWRlb3NpbmsgcGx1Z2luIGFuZCB1cGRhdGUgdGhlIHJlc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHNkbHZpZGVvc2luayBwbHVnaW4gYW5kIHVwZGF0ZSB0aGUgcmVzdAotCi0yMDA2LTA3LTEyIDA5OjM0OjE1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQWRkZWQgbXBlZzIgVFMgZGVwYXlsb2FkZXIuIENsb3NpbmcgIzM0NzIzNC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jOiAoZ3N0X3J0cF9tcDJ0X2RlcGF5X2Jhc2VfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDJ0X2RlcGF5X2NsYXNzX2luaXQpLCAoZ3N0X3J0cF9tcDJ0X2RlcGF5X2luaXQpLAotCSAgKGdzdF9ydHBfbXAydF9kZXBheV9zZXRjYXBzKSwgKGdzdF9ydHBfbXAydF9kZXBheV9wcm9jZXNzKSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcnRwX21wMnRfZGVwYXlfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5oOgotCSAgQWRkZWQgbXBlZzIgVFMgZGVwYXlsb2FkZXIuIENsb3NpbmcgIzM0NzIzNC4KLQotMjAwNi0wNy0xMiAwOToyODo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IEZpeCB0eXBvIGluIHByb3BlcnR5IG5pY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fY2xhc3NfaW5pdCk6Ci0JICBGaXggdHlwbyBpbiBwcm9wZXJ0eSBuaWNrLgotCi0yMDA2LTA3LTExIDIyOjQ2OjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvY2Rpby9nc3RjZGlvY2RkYXNyYy5jOiBSZW1vdmUgZ19hc3NlcnQgdGhhdCBzaG91bGRuJ3QgYmUgdGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuYzogKGdzdF9jZGlvX2NkZGFfc3JjX2Nsb3NlKToKLQkgIFJlbW92ZSBnX2Fzc2VydCB0aGF0IHNob3VsZG4ndCBiZSB0aGVyZS4KLQotMjAwNi0wNy0xMCAyMDoxMTozNCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC4qOiBEb24ndCBwdXNoIHRhZyBldmVudHMgZm91bmQgYnkgZ3N0X3JpZmZfcGFyc2VfaW5mbygpIGJlZm9yZSBvdXRwdXR0aW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9yZXNldCksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKSwgKHB1c2hfdGFnX2xpc3RzKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgRG9uJ3QgcHVzaCB0YWcgZXZlbnRzIGZvdW5kIGJ5IGdzdF9yaWZmX3BhcnNlX2luZm8oKSBiZWZvcmUgb3V0cHV0dGluZwotCSAgR1NUX0VWRU5UX05FV1NFR01FTlQuCi0KLTIwMDYtMDctMTAgMTY6NDE6NTcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwLzogcmVwbGFjZWQgY2xvc2Vzb2NrZXQgYW5kIGNsb3NlIGluIGNvZGUgd2l0aCBvbmUgQ0xPU0VfU09DS0VULgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocnRzcF9jb25uZWN0aW9uX3NlbmQpLAotCSAgKHJ0c3BfY29ubmVjdGlvbl9jbG9zZSk6Ci0JICAqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JICByZXBsYWNlZCBjbG9zZXNvY2tldCBhbmQgY2xvc2UgaW4gY29kZSB3aXRoIG9uZSBDTE9TRV9TT0NLRVQuCi0JICBTb21lIG1vcmUgY2xlYW51cHMuIEZpeGVzICMzNDUzMDEuCi0KLTIwMDYtMDctMTAgMTU6MjY6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzogRml4IGV4YW1wbGUgcGlwZWxpbmUgaW4gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JICBGaXggZXhhbXBsZSBwaXBlbGluZSBpbiBkb2NzLgotCi0yMDA2LTA3LTEwIDE0OjQ5OjQ2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZmlsdGVyLzogRG9uJ3QgZm9yZ2V0IG5ldyBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuaDoKLQkgICogZ3N0L2ZpbHRlci9nc3RpaXIuaDoKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmg6Ci0JICBEb24ndCBmb3JnZXQgbmV3IGZpbGVzLgotCi0yMDA2LTA3LTEwIDE0OjQyOjE1ICswMDAwICBNYXRoaXMgSG9mZXIgPG1hdGhpcy5ob2ZlckBkcmVhbWxhYi5uZXQ+Ci0KLQkgIFBvcnRlZCB0aGUgZ3N0ZmlsdGVyIHBsdWdpbiB0byBHU3RyZWFtZXIgMC4xMC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hdGhpcyBIb2ZlciA8bWF0aGlzIGRvdCBob2ZlciBhdCBkcmVhbWxhYiBkb3QgbmV0PgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOiAoZ3N0X2Jwd3NpbmNfZGlzcG9zZSksCi0JICAoZ3N0X2Jwd3NpbmNfYmFzZV9pbml0KSwgKGdzdF9icHdzaW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9icHdzaW5jX2luaXQpLCAoYnB3c2luY19zZXRfY2FwcyksIChicHdzaW5jX3RyYW5zZm9ybV9pcCksCi0JICAoYnB3c2luY19zZXRfcHJvcGVydHkpLCAoYnB3c2luY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGZpbHRlci5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGZpbHRlci5oOgotCSAgKiBnc3QvZmlsdGVyL2dzdGlpci5jOiAoZ3N0X2lpcl9kaXNwb3NlKSwgKGdzdF9paXJfYmFzZV9pbml0KSwKLQkgIChnc3RfaWlyX2NsYXNzX2luaXQpLCAoZ3N0X2lpcl9pbml0KSwgKGlpcl9zZXRfY2FwcyksCi0JICAoaWlyX3RyYW5zZm9ybV9pcCksIChpaXJfc2V0X3Byb3BlcnR5KSwgKGlpcl9nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzogKGdzdF9scHdzaW5jX2Rpc3Bvc2UpLAotCSAgKGdzdF9scHdzaW5jX2Jhc2VfaW5pdCksIChnc3RfbHB3c2luY19jbGFzc19pbml0KSwKLQkgIChnc3RfbHB3c2luY19pbml0KSwgKGxwd3NpbmNfc2V0X2NhcHMpLCAobHB3c2luY190cmFuc2Zvcm1faXApLAotCSAgKGxwd3NpbmNfc2V0X3Byb3BlcnR5KSwgKGxwd3NpbmNfZ2V0X3Byb3BlcnR5KToKLQkgIFBvcnRlZCB0aGUgZ3N0ZmlsdGVyIHBsdWdpbiB0byBHU3RyZWFtZXIgMC4xMC4KLQotMjAwNi0wNy0xMCAxMDoyMTo1NyArMDAwMCAgUm9iIFRheWxvciA8cm9idGF5bG9yQGZsb29waWx5Lm9yZz4KLQotCSAgZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogSWYgYSBkZXN0aW5hdGlvbiBpcyBhZGRlZCBiZWZvcmUgdGhlIHN0cmVhbSBpcyBzZXQgdG8gUEFVU0VELCB0aGUgbXVsdGljYXN0IGdyb3VwIGlzIG5vdCBqLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBSb2IgVGF5bG9yIDxyb2J0YXlsb3IgYXQgZmxvb3BpbHkgZG90IG9yZz4KLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGpvaW5fbXVsdGljYXN0KSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2luaXRfc2VuZCksIChnc3RfbXVsdGl1ZHBzaW5rX2FkZCk6Ci0JICBJZiBhIGRlc3RpbmF0aW9uIGlzIGFkZGVkIGJlZm9yZSB0aGUgc3RyZWFtIGlzIHNldCB0byBQQVVTRUQsIHRoZQotCSAgbXVsdGljYXN0IGdyb3VwIGlzIG5vdCBqb2luZWQgYXMgdGhlIHNvY2tldCBpcyBub3QgY3JlYXRlZCB5ZXQuCi0JICBBbHNvIFRUTCBhbmQgTE9PUCBzaG91bGQgYWxzbyBiZSBzZXQuIEZpeGVzICMzNDY5MjEuCi0KLTIwMDYtMDctMTAgMDk6NTc6MjYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRXh0cmFjdCBjb21tZW50IGluZm9ybWF0aW9uISEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3VkdGEpOgotCSAgRXh0cmFjdCBjb21tZW50IGluZm9ybWF0aW9uISEKLQotMjAwNi0wNy0xMCAwOTo0NjoyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBFeHRyYWN0IHllYXIvZGF0ZSBpbmZvcm1hdGlvbiAoZml4ZXMgIzM0NzA3OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV91ZHRhKSwKLQkgIChxdGRlbXV4X3RhZ19hZGRfZGF0ZSk6Ci0JICBFeHRyYWN0IHllYXIvZGF0ZSBpbmZvcm1hdGlvbiAoZml4ZXMgIzM0NzA3OSkuCi0KLTIwMDYtMDctMDggMjI6NDE6MjUgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLio6IEZpeCB1c2UtZGFtYWdlIHByb3BlcnR5IHRvIGFjdHVhbGx5IHdvcmsgOikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNy0wOSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiAoZ3N0X3hpbWFnZV9zcmNfeGltYWdlX2dldCksCi0JICAoZ3N0X3hpbWFnZV9zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF94aW1hZ2Vfc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3hpbWFnZV9zcmNfZ2V0X2NhcHMpLCAoZ3N0X3hpbWFnZV9zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3hpbWFnZV9zcmNfaW5pdCk6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmg6Ci0JICBGaXggdXNlLWRhbWFnZSBwcm9wZXJ0eSB0byBhY3R1YWxseSB3b3JrIDopCi0JICBBZGQgc3RhcnR4LCBzdGFydHksIGVuZHgsIGVuZHkgcHJvcGVydGllcyBzbyBzY3JlZW5jYXN0cyBvdGhlciB0aGFuIGZ1bGwKLQkgIHNjcmVlbiBvbmVzIGNhbiB3b3JrLgotCi0yMDA2LTA3LTA4IDE5OjAzOjU0ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy4qOiBBZGQgdXNlX2RhbWFnZSBwcm9wZXJ0eSB0byBvZmZlciBhYmlsaXR5IHRvIGNob29zZSB3aGV0aGVyIHRvIHVzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA3LTA4ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IChnc3RfeGltYWdlX3NyY194aW1hZ2VfZ2V0KSwKLQkgIChnc3RfeGltYWdlX3NyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3hpbWFnZV9zcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfeGltYWdlX3NyY19jbGFzc19pbml0KSwgKGdzdF94aW1hZ2Vfc3JjX2luaXQpOgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5oOgotCSAgQWRkIHVzZV9kYW1hZ2UgcHJvcGVydHkgdG8gb2ZmZXIgYWJpbGl0eSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UKLQkgIFhEYW1hZ2Ugb3Igbm90LgotCi0yMDA2LTA3LTA3IDE1OjA0OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ29vbS9maWx0ZXJzLmM6IEF2b2lkIGdvb20gY29yZWR1bXBpbmcgYnkgY2xlYXJpbmcgbWVtb3J5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL2ZpbHRlcnMuYzogKHpvb21GaWx0ZXJTZXRSZXNvbHV0aW9uKToKLQkgIEF2b2lkIGdvb20gY29yZWR1bXBpbmcgYnkgY2xlYXJpbmcgbWVtb3J5LgotCSAgRml4ZXMgMzQ1Njc5LgotCi0yMDA2LTA3LTA3IDE0OjMwOjI2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IERvbid0IGNyYXNoIG9uIHR3b3Mvc293dC9yYXcgYXVkaW8uICMzNDU4MzAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIERvbid0IGNyYXNoIG9uIHR3b3Mvc293dC9yYXcgYXVkaW8uICMzNDU4MzAuCi0KLTIwMDYtMDctMDUgMjA6MjE6MDIgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgd2luMzIvdnM2L2xpYmdzdGlkM2RlbXV4LmRzcDogQWRkIGEgbGluayB0byBsaWJnc3R0YWctMC4xMC5saWIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogd2luMzIvdnM2L2xpYmdzdGlkM2RlbXV4LmRzcDoKLQkgIEFkZCBhIGxpbmsgdG8gbGliZ3N0dGFnLTAuMTAubGliLgotCi0yMDA2LTA3LTA1IDE0OjUyOjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvOiBEb24ndCByZXR1cm4gRkxPV19VTkVYUEVDVEVEIHdoZW4gYSBidWZmZXIgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtICh3aGljaCBtaWdodCBoYXBwZW4gd2l0aCBsYXJnZSBJRDMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IChnc3RfdGFnX2RlbXV4X3RyaW1fYnVmZmVyKSwKLQkgIChnc3RfdGFnX2RlbXV4X3JlYWRfcmFuZ2UpOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF90cmltX2J1ZmZlciksCi0JICAoZ3N0X2lkM2RlbXV4X3JlYWRfcmFuZ2UpOgotCSAgRG9uJ3QgcmV0dXJuIEZMT1dfVU5FWFBFQ1RFRCB3aGVuIGEgYnVmZmVyIGlzIGJlZm9yZQotCSAgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKHdoaWNoIG1pZ2h0IGhhcHBlbiB3aXRoCi0JICBsYXJnZSBJRDN2MiB0YWdzIGlmIHRoZSB0YWcgcmVhZGluZyB3YXMgZG9uZSBwdWxscmFuZ2UKLQkgIGJhc2VkIGFuZCB3ZSB0aGVuIHN3aXRjaGVkIHRvIHB1c2ggbW9kZSBsYXRlciBvbikuCi0JICBGaXhlcyByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgY29tbWl0IGZyb20gSnVuZSAyOXRoLgotCi0yMDA2LTA3LTA1IDEwOjE0OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOiBNYWtlIFVURi04IHRoZSBkZWZhdWx0IGVuY29kaW5nIHdoZW4gd3JpdGluZyBzdHJpbmcgdGFncyAoYmVmb3JlLCBvdXIgVVRGLTggc3RyaW5ncyB3b3VsZCAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdGlkM3YybXV4LmNjOgotCSAgTWFrZSBVVEYtOCB0aGUgZGVmYXVsdCBlbmNvZGluZyB3aGVuIHdyaXRpbmcgc3RyaW5nCi0JICB0YWdzIChiZWZvcmUsIG91ciBVVEYtOCBzdHJpbmdzIHdvdWxkIGF1dG9tYXRpY2FsbHkKLQkgIGJlIGNvbnZlcnRlZCB0byBJU08tODg1OS0xIGJ5IHRhZ2xpYiBhbmQgd3JpdHRlbiBhcwotCSAgSVNPLTg4NTktMSBmaWVsZHMgaWYgdGhhdCB3YXMgcG9zc2libGUpLgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pZDN2Mm11eC5jOiAodXRmOF9zdHJpbmdfaW5fYnVmKSwKLQkgICh0ZXN0X3RhZ2xpYl9pZDNtdXhfY2hlY2tfdGFnX2J1ZmZlciksIChpZGVudGl0eV9jYiksCi0JICAodGVzdF90YWdsaWJfaWQzbXV4X3dpdGhfdGFncyk6Ci0JICBBZGQgdGVzdCBjYXNlIHRoYXQgbWFrZXMgc3VyZSBvdXIgVVRGLTggc3RyaW5ncyBoYXZlCi0JICBhY3R1YWxseSBiZWVuIHdyaXR0ZW4gaW50byB0aGUgdGFnIGFzIFVURi04LgotCi0yMDA2LTA3LTA0IDE2OjAwOjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IExldCdzIHRyeSB0aGF0IGFnYWluLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIExldCdzIHRyeSB0aGF0IGFnYWluLgotCi0yMDA2LTA3LTA0IDE1OjQwOjQ3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IERpc2FibGUgbW9ub3Njb3BlIHBsdWdpbiBmb3Igbm93IHVudGlsIGl0IGZ1bGZpbGxzIGFsbCB0aGUgcmVxdWlyZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIERpc2FibGUgbW9ub3Njb3BlIHBsdWdpbiBmb3Igbm93IHVudGlsIGl0IGZ1bGZpbGxzCi0JICBhbGwgdGhlIHJlcXVpcmVtZW50cy4KLQotMjAwNi0wNy0wMyAyMDozNTo0NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUG9ydCBtb25vc2NvcGUgdmlzdWFsaXNhdGlvbiB0byAwLjEwLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L21vbm9zY29wZS9NYWtlZmlsZS5hbToKLQkgICogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogKGdzdF9tb25vc2NvcGVfYmFzZV9pbml0KSwKLQkgIChnc3RfbW9ub3Njb3BlX2NsYXNzX2luaXQpLCAoZ3N0X21vbm9zY29wZV9pbml0KSwKLQkgIChnc3RfbW9ub3Njb3BlX2ZpbmFsaXplKSwgKGdzdF9tb25vc2NvcGVfcmVzZXQpLAotCSAgKGdzdF9tb25vc2NvcGVfc2lua19zZXRjYXBzKSwgKGdzdF9tb25vc2NvcGVfc3JjX3NldGNhcHMpLAotCSAgKGdzdF9tb25vc2NvcGVfc3JjX25lZ290aWF0ZSksIChnZXRfYnVmZmVyKSwgKGdzdF9tb25vc2NvcGVfY2hhaW4pLAotCSAgKGdzdF9tb25vc2NvcGVfc2lua19ldmVudCksIChnc3RfbW9ub3Njb3BlX3NyY19ldmVudCksCi0JICAoZ3N0X21vbm9zY29wZV9jaGFuZ2Vfc3RhdGUpLCAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5oOgotCSAgUG9ydCBtb25vc2NvcGUgdmlzdWFsaXNhdGlvbiB0byAwLjEwLgotCi0yMDA2LTA3LTAzIDIwOjAyOjU2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEZpeCBzaWxseSBjcmFzaGVyIGluIHN0YXRlIGNoYW5nZSBmdW5jdGlvbjsgYWRkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcXRkZW11eF9sb29wX3N0YXRlX2hlYWRlciksIChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgRml4IHNpbGx5IGNyYXNoZXIgaW4gc3RhdGUgY2hhbmdlIGZ1bmN0aW9uOyBhZGQKLQkgIElWNDEgZm91cmNjIChzZWUgYnVnICMxNzExMTEpOyBkb24ndCBvdXRwdXQgY29uZnVzaW5nCi0JICBkZWJ1ZyBtZXNzYWdlIHdoZW4gc2tpcHBpbmcgYXRvbXMuCi0KLTIwMDYtMDctMDMgMTY6NDM6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC86IFJldHVybiBGTE9XX1VORVhQRUNURUQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBub3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IChnc3RfdGFnX2RlbXV4X2NoYWluKToKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfY2hhaW4pOgotCSAgUmV0dXJuIEZMT1dfVU5FWFBFQ1RFRCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIG5vdAotCSAgRkxPV19FUlJPUi4gRml4ZXMgJ2ludGVybmFsIHN0cmVhbSBlcnJvcicgZXJyb3JzIHRoYXQKLQkgIHdvdWxkIHNvbWV0aW1lcyBvY2N1ciBpbiB0b3RlbSB3aGVuIHNjcnViYmluZyB0byB0aGUKLQkgIGVuZCBvZiBhbiBJRDN2MSB0YWdnZWQgbXAzIGZpbGUuCi0KLTIwMDYtMDctMDMgMTU6MzE6MjIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLio6IEltcGxlbWVudCBidWZmZXIgY2xpcHBpbmcvZHJvcHBpbmcgdXNpbmcgR3N0U2VnbWVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY19pbml0KSwgKHVzZXJfaW5mb19jYWxsYmFjayksCi0JICAoYnVmZmVyX2NsaXApLCAodXNlcl9lbmRfY2FsbGJhY2spLCAoZ3N0X3BuZ2RlY19jaGFpbiksCi0JICAoZ3N0X3BuZ2RlY19zaW5rX2V2ZW50KSwgKGdzdF9wbmdkZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuaDoKLQkgIEltcGxlbWVudCBidWZmZXIgY2xpcHBpbmcvZHJvcHBpbmcgdXNpbmcgR3N0U2VnbWVudC4KLQkgIFRoaXMgcHJvdmlkZXMgYWNjdXJhdGUgc2Vla2luZy4KLQotMjAwNi0wNy0wMyAxNToyODo0OCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC4qOiBQcm9wZXIgYWdncmVnYXRpb24gb2YgZWFjaCBzdHJlYW0ncyBHc3RGbG93UmV0dXJuIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgdGFzayBzaG91Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9yZXNldCksCi0JICAoZ3N0X2F2aV9kZW11eF9yZWFkX3N1YmluZGV4ZXMpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pLAotCSAgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspLCAoZ3N0X2F2aV9kZW11eF9hZ2dyZWdhdGVkX2Zsb3cpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKHB1c2hfdGFnX2xpc3RzKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwgKGdzdF9hdmlfZGVtdXhfbG9vcCk6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIFByb3BlciBhZ2dyZWdhdGlvbiBvZiBlYWNoIHN0cmVhbSdzIEdzdEZsb3dSZXR1cm4gaW4gb3JkZXIgdG8gZmlndXJlIG91dAotCSAgd2hldGhlciB0aGUgdGFzayBzaG91bGQgc3RvcCBvciBub3QuCi0JICBEb24ndCBzZW5kIGlubGluZSBldmVudHMgYmVmb3JlIHB1c2hpbmcgb3V0IGEgTkVXX1NFR01FTlQsIG1vcmUKLQkgIHNwZWNpZmljYWxseSBmb3IgR1NUX1RBR19FVkVOVC4KLQkgIENoYW5nZSBhIEdTVF9FUlJPUiB0byBhIEdTVF9XQVJOSU5HIGZvciBhIG5vbi1mYXRhbCBzaXR1YXRpb24gaW4gcmVhZGluZwotCSAgc3ViLWluZGV4ZXMuCi0KLTIwMDYtMDYtMzAgMDc6MTE6MjQgKzAwMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmM6IE1vdmUgIk1vbml0b3IiIHNsaWRlciB0byBpbnB1dCB0YWIgc28gaXQgd29ya3MgbW9yZSBsaWtlIHNkdGF1ZGlvY29udHJvbCwgd2hpY2ggLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCcmlhbiBDYW1lcm9uICA8YnJpYW4gZG90IGNhbWVyb24gYXQgc3VuIGRvdCBjb20+Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfYnVpbGRfbGlzdCk6Ci0JICBNb3ZlICJNb25pdG9yIiBzbGlkZXIgdG8gaW5wdXQgdGFiIHNvIGl0IHdvcmtzIG1vcmUgbGlrZQotCSAgc2R0YXVkaW9jb250cm9sLCB3aGljaCBpcyB3aGF0IHBlb3BsZSBvbiBTb2xhcmlzIGFyZSB1c2VkCi0JICB0byB1c2luZyBmb3IgdGhlaXIgbWl4ZXIgcHJvZ3JhbSAoIzM0NjI1OSkuCi0KLTIwMDYtMDYtMjkgMTQ6NTA6MTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICB0ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jOiBmaXggYSBsZWFrLCBjbGVhbiB1cCBhdCB0aGUgZW5kCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIGZpeCBhIGxlYWssIGNsZWFuIHVwIGF0IHRoZSBlbmQKLQotMjAwNi0wNi0yOSAxMTo0MTo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thLzogU2VuZCB0YWcgZXZlbnQgYWZ0ZXIgbmV3c2VnbWVudCBldmVudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2xvb3Bfc3RyZWFtX3BhcnNlX2lkKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgU2VuZCB0YWcgZXZlbnQgYWZ0ZXIgbmV3c2VnbWVudCBldmVudC4KLQotMjAwNi0wNi0yOSAxMToxMTo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IE1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gR1NUX0ZMT1dfT0sgd2l0aCBhIE5VTEwgYnVmZmVyIGluIGNlcnRhaW4gY2FzZXMgd2hlcmUgYSByZWFkIGJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfdHJpbV9idWZmZXIpLAotCSAgKGdzdF9pZDNkZW11eF9yZWFkX3JhbmdlKToKLQkgIE1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1cm4gR1NUX0ZMT1dfT0sgd2l0aCBhIE5VTEwgYnVmZmVyIGluCi0JICBjZXJ0YWluIGNhc2VzIHdoZXJlIGEgcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcwotCSAgcmVxdWVzdGVkLiBGaXhlcyAjMzQ1OTMwLgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IChnc3RfdGFnX2RlbXV4X3RyaW1fYnVmZmVyKSwKLQkgIChnc3RfdGFnX2RlbXV4X3JlYWRfcmFuZ2UpOgotCSAgRml4IHNhbWUgaXNzdWUgaGVyZSBhcyB3ZWxsLgotCi0yMDA2LTA2LTI5IDExOjA1OjE0ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOiBGaXggaHlwb3RoZXRpY2FsIGNyYXNoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA2LTI5ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6IChnc3RfeGltYWdlX3NyY194aW1hZ2VfZ2V0KToKLQkgIEZpeCBoeXBvdGhldGljYWwgY3Jhc2guCi0KLTIwMDYtMDYtMjggMDg6MzY6MzAgKzAwMDAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jOiBEbyBub3QgbW9kaWZ5IHRoZSBwb3J0cyB2YWx1ZS4gSWYgdGhlIHVzZXIgaGFzIHR1cm5lZCBvZmYgdGhlIGJ1aWx0LWluIHNwZWFrZXJzLCB0aGVuLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBCcmlhbiBDYW1lcm9uICA8YnJpYW4gZG90IGNhbWVyb24gYXQgc3VuIGRvdCBjb20+Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzogKGdzdF9zdW5hdWRpb3NpbmtfcHJlcGFyZSk6Ci0JICBEbyBub3QgbW9kaWZ5IHRoZSBwb3J0cyB2YWx1ZS4gSWYgdGhlIHVzZXIgaGFzIHR1cm5lZCBvZmYgdGhlCi0JICBidWlsdC1pbiBzcGVha2VycywgdGhlbiB3ZSBzaG91bGQgbm90IHJlc2V0IGl0IGluIHRoZSBwcmVwYXJlCi0JICBmdW5jdGlvbiwgc2luY2UgdGhpcyBjYXVzZXMgdGhlIGJ1aWx0LWluIHNwZWFrZXJzIHRvIHR1cm4KLQkgIGJhY2sgb24gYW55dGltZSB0aGUgdXNlciBjaGFuZ2VzIGEgdHJhY2sgaW4gdG90ZW0sIHJoeXRobWJveCwKLQkgIGV0Yy4gKCMzNDYwNjYpLgotCi0yMDA2LTA2LTIzIDA5OjM1OjQ1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvZ29vbS9nc3Rnb29tLmM6IEZpeCBkb3VibGUgY2FwcyB1bnJlZiB3aGVuIG5lZ290aWF0aW9uIGZhaWxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX3NyY19uZWdvdGlhdGUpOgotCSAgRml4IGRvdWJsZSBjYXBzIHVucmVmIHdoZW4gbmVnb3RpYXRpb24gZmFpbHMuCi0KLTIwMDYtMDYtMjIgMTk6MzE6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFVzZSBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIHdoZXJlIHBvc3NpYmxlICgjMzQyNTAzKSBwbHVzIHR3byBtaW5vciBtYWNybyBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbHBhcnNlci5jOgotCSAgKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkgICogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkgICogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgICogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzoKLQkgICogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzoKLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JICAqIGdzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5jOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnQuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgKiBnc3QvcnRzcC9nc3RydHBkZWMuYzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSAgKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzoKLQkgICogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgIFVzZSBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIHdoZXJlIHBvc3NpYmxlICgjMzQyNTAzKQotCSAgcGx1cyB0d28gbWlub3IgbWFjcm8gZml4ZXMuCi0KLTIwMDYtMDYtMjIgMTY6Mjc6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IFRyeSB0byBmaXggdXAgYnJva2VuIG1hdHJvc2thIGZpbGVzIGNvbnRhaW5pbmcgc3VidGl0bGUgc3RyZWFtcyB3aXRoIG5vbi1VVEY4IGNoYXJhY3RlciBlbmNvZGluZ3MgKGNvdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9jaGVja19zdWJ0aXRsZV9idWZmZXIpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfc3VidGl0bGVfY2Fwcyk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9zdWJ0aXRsZV9jb250ZXh0KToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgVHJ5IHRvIGZpeCB1cCBicm9rZW4gbWF0cm9za2EgZmlsZXMgY29udGFpbmluZyBzdWJ0aXRsZQotCSAgc3RyZWFtcyB3aXRoIG5vbi1VVEY4IGNoYXJhY3RlciBlbmNvZGluZ3MgKGNvdXJ0ZXN5IG9mCi0JICBta3ZtZXJnZSkgdXNpbmcgZWl0aGVyIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlCi0JICBHU1RfU1VCVElUTEVfRU5DT0RJTkcgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdGhlCi0JICBjdXJyZW50IGxvY2FsZSdzIGNoYXJhY3RlciBzZXQgaWYgaXQgaXMgbm9uLVVURjguCi0JICBGaXhlcyAjMzM3MDc2LgotCi0yMDA2LTA2LTIyIDEyOjE3OjEzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogU2V0IGltYWdlIHR5cGUgZnJvbSBBUElDIGZyYW1lIGFzICJpbWFnZS10eXBlIiBmaWVsZCBvZiBHU1RfVEFHX0lNQUdFIGJ1ZmZlciBjYXBzICgjMzQ0NjA1KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKHBhcnNlX3BpY3R1cmVfZnJhbWUpOgotCSAgU2V0IGltYWdlIHR5cGUgZnJvbSBBUElDIGZyYW1lIGFzICJpbWFnZS10eXBlIiBmaWVsZAotCSAgb2YgR1NUX1RBR19JTUFHRSBidWZmZXIgY2FwcyAoIzM0NDYwNSkuCi0KLTIwMDYtMDYtMjAgMTk6NDA6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjLzogU3VwcG9ydCBjaGFpbi1iYXNlZCBvcGVyYXRpb24sIHNob3VsZCBtYWtlIGZsYWMtb3Zlci1EQUFQIHdvcmsgKCMzNDA0OTIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfaW5pdCksCi0JICAoZ3N0X2ZsYWNfZGVjX3Jlc2V0X2RlY29kZXJzKSwKLQkgIChnc3RfZmxhY19kZWNfc2V0dXBfc2Vla2FibGVfZGVjb2RlciksCi0JICAoZ3N0X2ZsYWNfZGVjX3NldHVwX3N0cmVhbV9kZWNvZGVyKSwgKGdzdF9mbGFjX2RlY19maW5hbGl6ZSksCi0JICAoZ3N0X2ZsYWNfZGVjX21ldGFkYXRhX2NhbGxiYWNrKSwKLQkgIChnc3RfZmxhY19kZWNfbWV0YWRhdGFfY2FsbGJhY2tfc2Vla2FibGUpLAotCSAgKGdzdF9mbGFjX2RlY19tZXRhZGF0YV9jYWxsYmFja19zdHJlYW0pLAotCSAgKGdzdF9mbGFjX2RlY19lcnJvcl9jYWxsYmFjayksCi0JICAoZ3N0X2ZsYWNfZGVjX2Vycm9yX2NhbGxiYWNrX3NlZWthYmxlKSwKLQkgIChnc3RfZmxhY19kZWNfZXJyb3JfY2FsbGJhY2tfc3RyZWFtKSwgKGdzdF9mbGFjX2RlY19yZWFkX3NlZWthYmxlKSwKLQkgIChnc3RfZmxhY19kZWNfcmVhZF9zdHJlYW0pLCAoZ3N0X2ZsYWNfZGVjX3dyaXRlKSwKLQkgIChnc3RfZmxhY19kZWNfd3JpdGVfc2Vla2FibGUpLCAoZ3N0X2ZsYWNfZGVjX3dyaXRlX3N0cmVhbSksCi0JICAoZ3N0X2ZsYWNfZGVjX2xvb3ApLCAoZ3N0X2ZsYWNfZGVjX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9mbGFjX2RlY19jaGFpbiksIChnc3RfZmxhY19kZWNfY29udmVydF9zaW5rKSwKLQkgIChnc3RfZmxhY19kZWNfZ2V0X3NpbmtfcXVlcnlfdHlwZXMpLCAoZ3N0X2ZsYWNfZGVjX3NpbmtfcXVlcnkpLAotCSAgKGdzdF9mbGFjX2RlY19nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwgKGdzdF9mbGFjX2RlY19zcmNfcXVlcnkpLAotCSAgKGdzdF9mbGFjX2RlY19oYW5kbGVfc2Vla19ldmVudCksIChnc3RfZmxhY19kZWNfc2lua19hY3RpdmF0ZSksCi0JICAoZ3N0X2ZsYWNfZGVjX3NpbmtfYWN0aXZhdGVfcHVzaCksCi0JICAoZ3N0X2ZsYWNfZGVjX3NpbmtfYWN0aXZhdGVfcHVsbCksIChnc3RfZmxhY19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgU3VwcG9ydCBjaGFpbi1iYXNlZCBvcGVyYXRpb24sIHNob3VsZCBtYWtlIGZsYWMtb3Zlci1EQUFQCi0JICB3b3JrICgjMzQwNDkyKS4KLQotMjAwNi0wNi0yMCAxNTozNTowNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6IERvYyB1cGRhdGVzLCBtZXJnZSBzb21lIHVudXNlZCBzeW1ib2xzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgRG9jIHVwZGF0ZXMsIG1lcmdlIHNvbWUgdW51c2VkIHN5bWJvbHMuCi0KLTIwMDYtMDYtMjAgMTQ6NTc6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBydHNwIHBsdWdpbi4gRml4ZXMgIzM0NTM5My4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBydHNwIHBsdWdpbi4gRml4ZXMgIzM0NTM5My4KLQotMjAwNi0wNi0yMCAxMjoxMDoyOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogVXNlIGJldHRlciBHX09TXyogbWFjcm9zLiBGaXhlcyAjMzQ1MzAxIHNvbWUgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAoaW5ldF9hdG9uKSwgKHJ0c3BfY29ubmVjdGlvbl9zZW5kKSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fY2xvc2UpLCAocnRzcF9jb25uZWN0aW9uX2ZyZWUpOgotCSAgVXNlIGJldHRlciBHX09TXyogbWFjcm9zLiBGaXhlcyAjMzQ1MzAxIHNvbWUgbW9yZS4KLQotMjAwNi0wNi0yMCAxMDozNTo0OCArMDAwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCi0JICBzeXMvc3VuYXVkaW8vOiBBZGQgYSBTdW5BdWRpbyBzb3VyY2UgcGx1Z2luLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogQnJpYW4gQ2FtZXJvbiA8YnJpYW4gZG90IGNhbWVyb24gYXQgc3VuIGRvdCBjb20+Ci0JICAqIHN5cy9zdW5hdWRpby9NYWtlZmlsZS5hbToKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfYnVpbGRfbGlzdCksIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX25ldyksCi0JICAoZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9saXN0X3RyYWNrcyksCi0JICAoZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9nZXRfdm9sdW1lKSwKLQkgIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF92b2x1bWUpLAotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X211dGUpLAotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X3JlY29yZCk6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5oOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmM6Ci0JICAoZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfaW5pdCksIChnc3Rfc3VuYXVkaW9taXhlcl90cmFja19uZXcpOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmg6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOiAoZ3N0X3N1bmF1ZGlvc3JjX2Rpc3Bvc2UpLAotCSAgKGdzdF9zdW5hdWRpb3NyY19iYXNlX2luaXQpLCAoZ3N0X3N1bmF1ZGlvc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zdW5hdWRpb3NyY19pbml0KSwgKGdzdF9zdW5hdWRpb3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zdW5hdWRpb3NyY19nZXRfcHJvcGVydHkpLCAoZ3N0X3N1bmF1ZGlvc3JjX2dldGNhcHMpLAotCSAgKGdzdF9zdW5hdWRpb3NyY19vcGVuKSwgKGdzdF9zdW5hdWRpb3NyY19jbG9zZSksCi0JICAoZ3N0X3N1bmF1ZGlvc3JjX3ByZXBhcmUpLCAoZ3N0X3N1bmF1ZGlvc3JjX3VucHJlcGFyZSksCi0JICAoZ3N0X3N1bmF1ZGlvc3JjX3JlYWQpLCAoZ3N0X3N1bmF1ZGlvc3JjX2RlbGF5KSwKLQkgIChnc3Rfc3VuYXVkaW9zcmNfcmVzZXQpOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuaDoKLQkgIEFkZCBhIFN1bkF1ZGlvIHNvdXJjZSBwbHVnaW4uCi0JICBTdXBwb3J0IHN0ZXJlbyBhbmQgcmlnaHQvbGVmdCBjaGFubmVsIGdhaW4gaW4gdGhlIG1peGVyIHBsdWdpbi4KLQkgIFN1cHBvcnQgdGhlIFJFQ09SRCBmbGFnIHNvIHRoYXQgeW91IGNhbiBzd2l0Y2ggYmV0d2VlbiBsaW5lLWlucHV0IGFuZAotCSAgbWljcm9waG9uZSBpbiBnbm9tZS12b2x1bWUtY29udHJvbC4KLQkgIENvZGUgY2xlYW51cHMgbGlrZSB1c2luZyBhbiBlbnVtZXJhdG9yIGZvciB0cmFjayBudW1iZXIgaW5zdGVhZCBvZiBhbgotCSAgaW50ZWdlci4gRml4ZXMgIzM0NDkyMy4KLQotMjAwNi0wNi0yMCAxMDozMTo0MSArMDAwMCAgSm9uaSBWYWx0YW5lbiA8am9uaS52YWx0YW5lbkBtb3ZpYWwuZmk+Ci0KLQkgIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IE1ha2UgUlRTUCBwbHVnaW4gY29tcGlsZSBvbiB3aW5kb3dzLiBGaXhlcyAjMzQ1MzAxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSm9uaSBWYWx0YW5lbiA8am9uaSBkb3QgdmFsdGFuZW4gYXQgbW92aWFsIGRvdCBmaT4KLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKGluZXRfYXRvbiksIChydHNwX2Nvbm5lY3Rpb25fc2VuZCksCi0JICAocnRzcF9jb25uZWN0aW9uX2Nsb3NlKToKLQkgIE1ha2UgUlRTUCBwbHVnaW4gY29tcGlsZSBvbiB3aW5kb3dzLiBGaXhlcyAjMzQ1MzAxLgotCSAgU29tZSBjaGFuZ2VzIHRvIG9yaWdpbmFsIHBhdGNoIHRvIGNhdGNoIGVycm9ycyBiZXR0ZXIuCi0JICB1c2UgaWZkZWYgV0lOMzIgaW5zdGVhZCBvZiBpZm5kZWYuCi0KLTIwMDYtMDYtMTkgMTA6MDA6MTggKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogSWYgd2UgaGF2ZSBsaWJyYXcxMzk0ID49IDEuMi4xLCB0aGVuIHdlIG5lZWQgbGliaWVjNjE4ODMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDYtMTkgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogY29uZmlndXJlLmFjOgotCSAgSWYgd2UgaGF2ZSBsaWJyYXcxMzk0ID49IDEuMi4xLCB0aGVuIHdlIG5lZWQgbGliaWVjNjE4ODMuCi0KLTIwMDYtMDYtMTggMTQ6MDA6MTkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogQWZ0ZXIgYSBmYWlsZWQgYnVmZmVyIGFsbG9jLCB3ZSBuZWVkIHRvIGFib3J0IHRoZSBqcGVnIGRlY29kaW5nIChpdCBzdGFydGVkIHdoZW4gcGFyc2luZyBoZWFkZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICBBZnRlciBhIGZhaWxlZCBidWZmZXIgYWxsb2MsIHdlIG5lZWQgdG8gYWJvcnQgdGhlIGpwZWcgZGVjb2RpbmcgKGl0Ci0JICBzdGFydGVkIHdoZW4gcGFyc2luZyBoZWFkZXJzIHRvIGZpZ3VyZSBvdXQgaG93IG1hbnkgYnl0ZXMgd2UgbmVlZAotCSAgdG8gcmVxdWVzdCBkb3duc3RyZWFtKS4KLQotMjAwNi0wNi0xOCAxMjozNzoxMiArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IE1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlICgjMzQ1MjMyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgIDxtYW5hdXcgYXQgc2t5bmV0IGJlPgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspOgotCSAgTWFrZSBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgKCMzNDUyMzIpLgotCi0yMDA2LTA2LTE3IDE0OjM1OjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IEZpeCAtLWRpc2FibGUtZXh0ZXJuYWwgKGNhbid0IHNldCBjb25kaXRpb25hbHMgY29uZGl0aW9uYWxseSwgIzM0MzYwMikuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgRml4IC0tZGlzYWJsZS1leHRlcm5hbCAoY2FuJ3Qgc2V0IGNvbmRpdGlvbmFscyBjb25kaXRpb25hbGx5LAotCSAgIzM0MzYwMikuCi0KLTIwMDYtMDYtMTYgMTI6MzU6MDggKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbTogRml4IGJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA2LTE2ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICAqIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbToKLQkgIEZpeCBidWlsZC4KLQotMjAwNi0wNi0xNiAxMDo1NjoyNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgVXNlIEdTVF9QTFVHSU5fRE9DUywgLS1lbmFibGUtcGx1Z2luLWRvY3MgZXRjLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGF1dG9nZW4uc2g6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9NYWtlZmlsZS5hbToKLQkgIFVzZSBHU1RfUExVR0lOX0RPQ1MsIC0tZW5hYmxlLXBsdWdpbi1kb2NzIGV0Yy4KLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWw6Ci0JICBBZGQvZml4IGFwZXYybXV4IGRvY3MuCi0KLTIwMDYtMDYtMTYgMDk6NDk6MDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtLzogcG9ydCB0byB1c2UgbWVzc2FnZSB0byBnZXQgcmVzdWx0cywgY2xlYW5seSBleGl0IHdoZW4gY2xvc2luZyB0aGUgd2luZG93Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmM6IChvbl93aW5kb3dfZGVzdHJveSksCi0JICAoZHJhd19zcGVjdHJ1bSksIChtZXNzYWdlX2hhbmRsZXIpLCAobWFpbik6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAob25fd2luZG93X2Rlc3Ryb3kpLCAoZHJhd19zcGVjdHJ1bSksCi0JICAobWVzc2FnZV9oYW5kbGVyKSwgKG1haW4pOgotCSAgcG9ydCB0byB1c2UgbWVzc2FnZSB0byBnZXQgcmVzdWx0cywgY2xlYW5seSBleGl0IHdoZW4gY2xvc2luZyB0aGUgd2luZG93Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zcGVjdHJ1bV9pbml0KSwgKGdzdF9zcGVjdHJ1bV9kaXNwb3NlKSwKLQkgIChnc3Rfc3BlY3RydW1fc2V0X3Byb3BlcnR5KSwgKGdzdF9zcGVjdHJ1bV9nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9zcGVjdHJ1bV9zZXRfY2FwcyksIChnc3Rfc3BlY3RydW1fc3RhcnQpLAotCSAgKGdzdF9zcGVjdHJ1bV9tZXNzYWdlX25ldyksIChnc3Rfc3BlY3RydW1fdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmg6Ci0JICBwb3J0IHRvIGRlcml2ZSBmcm9tIGJhc2V0cmFuc2Zvcm0gYW5kIHNlbmQgcmVzdWx0cyB2aWEgbWVzc2FnZXMKLQkgIChsaWtlIGxldmVsIGVsZW1lbnQpCi0KLTIwMDYtMDYtMTUgMTU6NTg6MDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQ29tYmluZSByZXR1cm4gdmFsdWVzIGZyb20gc3JjIHBhZCBwdXNoZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3RfcXRkZW11eF9jb21iaW5lX2Zsb3dzKSwgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpLAotCSAgKGdzdF9xdGRlbXV4X2xvb3ApLCAoZ3N0X3F0ZGVtdXhfY2hhaW4pLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIENvbWJpbmUgcmV0dXJuIHZhbHVlcyBmcm9tIHNyYyBwYWQgcHVzaGVzLgotCi0yMDA2LTA2LTE1IDA4OjUwOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IERvbid0IGNyYXNoIG9uIGZpbGVzIHdpdGggMCBzYW1wbGVzLCBFT1MgaW1tZWRpYXRseSBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfaGVhZGVyKSwKLQkgIChnc3RfcXRkZW11eF9wcmVwYXJlX2N1cnJlbnRfc2FtcGxlKSwgKGdzdF9xdGRlbXV4X2FkdmFuY2Vfc2FtcGxlKSwKLQkgIChnc3RfcXRkZW11eF9hZGRfc3RyZWFtKToKLQkgIERvbid0IGNyYXNoIG9uIGZpbGVzIHdpdGggMCBzYW1wbGVzLCBFT1MgaW1tZWRpYXRseSBpbnN0ZWFkLgotCSAgRml4ZXMgIzM0NDk0NC4KLQotMjAwNi0wNi0xNCAxNTo1OTo1NiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2R2L2dzdGR2ZGVjLmM6IFJlc2V0IHNlZ21lbnQgaW5mbyBvbiBmbHVzaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19jbGFzc19pbml0KSwgKGdzdF9kdmRlY19pbml0KSwKLQkgIChnc3RfZHZkZWNfZmluYWxpemUpLCAoZ3N0X2R2ZGVjX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9kdmRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgUmVzZXQgc2VnbWVudCBpbmZvIG9uIGZsdXNoLgotCSAgQWxsb2Mgc2VnbWVudCBpbiBfaW5pdCwgZnJlZSBpbiBfZmluYWxpemUuCi0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9oYW5kbGVfcHVsbF9zZWVrKToKLQkgIERvbid0IHNlbmQgc2VnbWVudHMgdHdpY2UuCi0KLTIwMDYtMDYtMTQgMTU6MDc6MjIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9kdi9nc3RkdmRlbXV4LmM6IFJlc3BlY3Qgc2VnbWVudC5zdG9wLiBGaXhlcyAjMzQyNTkyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSk6Ci0JICBSZXNwZWN0IHNlZ21lbnQuc3RvcC4gRml4ZXMgIzM0MjU5Mi4KLQotMjAwNi0wNi0xNCAxMToyODo0MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IE5vIGxhbmd1YWdlIHNwZWNpZmllZCBtZWFucyB0aGUgaW1wbGllZCBsYW5ndWFnZSBpcyBFbmdsaXNoIGFjY29yZGluZyB0byB0aGUgbWF0cm9za2EgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbSk6Ci0JICBObyBsYW5ndWFnZSBzcGVjaWZpZWQgbWVhbnMgdGhlIGltcGxpZWQgbGFuZ3VhZ2UgaXMgRW5nbGlzaAotCSAgYWNjb3JkaW5nIHRvIHRoZSBtYXRyb3NrYSBzcGVjIChwYXJ0aWFsbHkgZml4ZXMgIzM0NDcwOCk7Ci0JICBhZGQgc29tZSBtb3JlIGRlYnVnIG91dHB1dC4KLQotMjAwNi0wNi0xNCAwOTozMjoyNyArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JICBleHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLio6IFVzZSBiaXRyYXRlIHByb3BlcnR5IHNvbGVseSBmb3IgYml0cmF0ZXMgYW5kIGFkZCBuZXcgYml0cy1wZXItc2FtcGxlIHByb3BlcnR5IGZvciB0aGUgb3QuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tbyBhdCBjaXJjdWxhci1jaGFvcyBvcmc+Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19iYXNlX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2VuY19jbGFzc19pbml0KSwgKGdzdF93YXZwYWNrX2VuY19zZXRfd3BfY29uZmlnKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfY2hhaW4pLCAoZ3N0X3dhdnBhY2tfZW5jX3NpbmtfZXZlbnQpLAotCSAgKGdzdF93YXZwYWNrX2VuY19zZXRfcHJvcGVydHkpLCAoZ3N0X3dhdnBhY2tfZW5jX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuaDoKLQkgIFVzZSBiaXRyYXRlIHByb3BlcnR5IHNvbGVseSBmb3IgYml0cmF0ZXMgYW5kIGFkZCBuZXcKLQkgIGJpdHMtcGVyLXNhbXBsZSBwcm9wZXJ0eSBmb3IgdGhlIG90aGVyIHN0dWZmLiBTZXQgZHVyYXRpb24KLQkgIHRvICd1bmtub3duJyBpbiBpbml0aWFsIGhlYWRlciBhbmQgcmVzZW5kIGhlYWRlciB3aXRoIHByb3BlcgotCSAgZHVyYXRpb24gb24gRU9TOyB1cGRhdGUgU2ViYXN0aWFuJ3MgZS1tYWlsIGFkZHJlc3MuCi0KLTIwMDYtMDYtMTQgMDg6MDY6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBXaGVuIG9wZXJhdGluZyBjaGFpbi1iYXNlZCwgZG9uJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNodW5raW5nIG9mIHRoZSBpbmNvbWluZy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmtfaW5mbyksCi0JICAoZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmspLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhaW4pOgotCSAgV2hlbiBvcGVyYXRpbmcgY2hhaW4tYmFzZWQsIGRvbid0IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoZQotCSAgY2h1bmtpbmcgb2YgdGhlIGluY29taW5nIGRhdGEgYW5kIG1ha2Ugc3RyZWFtaW5nIHdvcmsgb24gZGF5cyBvdGhlcgotCSAgdGhhbiB0aGUgc2Vjb25kIFRodXJzZGF5IGFmdGVyIGEgZnVsbCBtb29uLiBBbHNvIGZpeCB1cCBkZWJ1ZwotCSAgbWVzc2FnZXMgaGVyZSBhbmQgdGhlcmUgYW5kIG1ha2UgdXNlIG9mIHRoZSBtb3N0IGV4Y2VsbGVudCBuZXcKLQkgIGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbigpIHV0aWxpdHkgZnVuY3Rpb24uCi0JICBTa2lwIGFueSAnYmV4dCcgY2h1bmtzIGluIGZyb250IG9mIHRoZSAnZm10ICcgY2h1bmsuIEZpeGVzICMzNDM4MzcuCi0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSAgUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFmdGVyIGxhc3QgZW51bSB2YWx1ZSwgc29tZSBjb21waWxlcnMgZG9uJ3QKLQkgIGxpa2UgdGhhdC4KLQotMjAwNi0wNi0xMyAxNzowNToyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IEhhbmRsZSBwcmVtYXR1cmUgRU9TIGdyYWNlZnVsbHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpOgotCSAgSGFuZGxlIHByZW1hdHVyZSBFT1MgZ3JhY2VmdWxseS4KLQotMjAwNi0wNi0xMyAwOTo1NDoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBQcmV2ZW50IG91dCBvZiBib3VuZHMgYXJyYXkgYWNjZXNzIHdoZW4gc2NydWJiaW5nIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZmlsZSBiZXR3ZWVuIHRoZSBsYXN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vlayk6Ci0JICBQcmV2ZW50IG91dCBvZiBib3VuZHMgYXJyYXkgYWNjZXNzIHdoZW4gc2NydWJiaW5nIHRvd2FyZHMKLQkgIHRoZSBlbmQgb2YgdGhlIGZpbGUgYmV0d2VlbiB0aGUgbGFzdCBpbmRleCBlbnRyeSBhbmQgdGhlCi0JICBlbmQuIEZpeGVzIG9jY2FzaW9uYWwgJ3N0YXJ0IDw9IHN0b3AnIG5ld3NlZ21lbnQgZXZlbnQKLQkgIGFzc2VydGlvbnMgd2hlbiBzY3J1YmJpbmcgaW4gTUpQRUcgZmlsZXMuCi0KLTIwMDYtMDYtMTIgMTE6MTM6MzkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5jdnNpZ25vcmU6IEFuZCBhbm90aGVyIG9uZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgQW5kIGFub3RoZXIgb25lLgotCi0yMDA2LTA2LTEyIDExOjA0OjU5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vLmN2c2lnbm9yZTogSWdub3JlIG1vcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtLy5jdnNpZ25vcmU6Ci0JICBJZ25vcmUgbW9yZS4KLQotMjAwNi0wNi0xMiAxMDo1MzoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2xpYm1tcy9nc3RtbXMuYzogU2V0IGNhcHMgb24gb3V0Z29pbmcgYnVmZmVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlibW1zL2dzdG1tcy5jOiAoZ3N0X21tc19jcmVhdGUpOgotCSAgU2V0IGNhcHMgb24gb3V0Z29pbmcgYnVmZmVycy4KLQkgICogc3lzL2RpcmVjdGRyYXcvZ3N0ZGlyZWN0ZHJhd3NpbmsuYzogKGdzdF9kaXJlY3RkcmF3c2lua19pbml0KToKLQkgIENvbW1lbnQgb3V0IHVudXNlZCBnbG9iYWwgaW5zdGFuY2UgdmFyaWFibGUuCi0KLTIwMDYtMDYtMTEgMTk6MzE6MTAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiBFeHRyYWN0IGltYWdlcyBmcm9tIElEM3YyIHRhZ3MgKEFQSUMgZnJhbWVzKS4gRml4ZXMgIzMzOTcwNC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKGlkM2RlbXV4X2lkM3YyX3BhcnNlX2ZyYW1lKSwKLQkgIChzY2FuX2VuY29kZWRfc3RyaW5nKSwgKHBhcnNlX3BpY3R1cmVfZnJhbWUpOgotCSAgRXh0cmFjdCBpbWFnZXMgZnJvbSBJRDN2MiB0YWdzIChBUElDIGZyYW1lcykuIEZpeGVzICMzMzk3MDQuCi0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFJlcXVpcmUgY29yZSA+PSAwLjEwLjggKGZvciBHU1RfVEFHX0lNQUdFIGFuZAotCSAgR1NUX1RBR19QUEVWSUVXX0lNQUdFIHVzZWQgaW4gdGhlIHBhdGNoIGFib3ZlKS4KLQotMjAwNi0wNi0xMSAxODo1NjoyNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGV4dC9yYXcxMzk0Ly5naXRpZ25vcmU6Ci0JKiBleHQvdGFnbGliLy5naXRpZ25vcmU6Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uZ2l0aWdub3JlOgotCSogdGVzdHMvZXhhbXBsZXMvbGV2ZWwvLmdpdGlnbm9yZToKLQkgIG1vYXAgaWdub3JlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vYXAgaWdub3JlCi0KLTIwMDYtMDYtMTEgMTg6NTI6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogZ3JhdHVpdG91cyBjb21tZW50IGNoYW5nZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfZGlzY292ZXJfYXZjX25vZGUpOgotCSAgZ3JhdHVpdG91cyBjb21tZW50IGNoYW5nZXMKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIGZpeCBsZXZlbCB0ZXN0IGxlYWtzCi0KLTIwMDYtMDYtMTEgMTg6NDQ6NTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiAuZ2l0aWdub3JlOgotCSAgaWdub3JlIG1vcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgaWdub3JlIG1vcmUKLQotMjAwNi0wNi0xMSAxODoyMDozOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogVXNlIGdzdF9wYWRfcXVlcnlfcGVlcl9kdXJhdGlvbigpIHV0aWxpdHkgZnVuY3Rpb24gaGVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6IChnc3RfdGFnX2RlbXV4X2dldF91cHN0cmVhbV9zaXplKToKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChpZDNkZW11eF9nZXRfdXBzdHJlYW1fc2l6ZSk6Ci0JICBVc2UgZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uKCkgdXRpbGl0eSBmdW5jdGlvbiBoZXJlLgotCi0yMDA2LTA2LTExIDEzOjU3OjE5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYXV0b2dlbi5zaDogcmVxdWlyZSBhbTE3Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogYXV0b2dlbi5zaDoKLQkgIHJlcXVpcmUgYW0xNwotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGV4dC9hbm5vZGV4L01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2Rpby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2R2L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZXNkL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmxhYy9NYWtlZmlsZS5hbToKLQkgICogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9sYWRzcGEvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9saWJjYWNhL01ha2VmaWxlLmFtOgotCSAgKiBleHQvc3BlZXgvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3MvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9zdW5hdWRpby9NYWtlZmlsZS5hbToKLQkgICogc3lzL3hpbWFnZS9NYWtlZmlsZS5hbToKLQkgIGNsZWFuIHVwIGJ1aWxkIGZ1cnRoZXIKLQotMjAwNi0wNi0xMSAxMzo1NTozNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIHVwZGF0ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUKLQotMjAwNi0wNi0xMCAxNTozMzoxOCArMDAwMCAgU2ViYXN0aWFuIERyw7ZnZSA8bWFpbEBzbG9tb3NuYWlsLmRlPgotCi0JICBleHQvd2F2cGFjay86IEFkZCB3YXZwYWNrIGVuY29kZXIgZWxlbWVudCAoIzM0MzEzMSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlICA8bWFpbCBhdCBzbG9tb3NuYWlsIGRlPgotCSAgKiBleHQvd2F2cGFjay9NYWtlZmlsZS5hbToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFjay5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmg6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYzogKGdzdF93YXZwYWNrX2VuY19tb2RlX2dldF90eXBlKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfY29ycmVjdGlvbl9tb2RlX2dldF90eXBlKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfam9pbnRfc3RlcmVvX21vZGVfZ2V0X3R5cGUpLAotCSAgKGdzdF93YXZwYWNrX2VuY19iYXNlX2luaXQpLCAoZ3N0X3dhdnBhY2tfZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX2VuY19pbml0KSwgKGdzdF93YXZwYWNrX2VuY19kaXNwb3NlKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfc2lua19zZXRfY2FwcyksIChnc3Rfd2F2cGFja19lbmNfc2V0X3dwX2NvbmZpZyksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX2Zvcm1hdF9zYW1wbGVzKSwgKGdzdF93YXZwYWNrX2VuY19wdXNoX2Jsb2NrKSwKLQkgIChnc3Rfd2F2cGFja19lbmNfY2hhaW4pLCAoZ3N0X3dhdnBhY2tfZW5jX3Jld3JpdGVfZmlyc3RfYmxvY2spLAotCSAgKGdzdF93YXZwYWNrX2VuY19zaW5rX2V2ZW50KSwgKGdzdF93YXZwYWNrX2VuY19jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF93YXZwYWNrX2VuY19zZXRfcHJvcGVydHkpLCAoZ3N0X3dhdnBhY2tfZW5jX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3dhdnBhY2tfZW5jX3BsdWdpbl9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oOgotCSAgKiBleHQvd2F2cGFjay9tZDUuYzoKLQkgICogZXh0L3dhdnBhY2svbWQ1Lmg6Ci0JICBBZGQgd2F2cGFjayBlbmNvZGVyIGVsZW1lbnQgKCMzNDMxMzEpLgotCi0yMDA2LTA2LTA5IDIwOjM2OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnY29uZi9NYWtlZmlsZS5hbTogSG9ub3VyIC0tZGlzYWJsZS1zY2hlbWFzLWluc3RhbGwgY29uZmlndXJlIG9wdGlvbi4gRml4ZXMgIzM0NDEwMC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnY29uZi9NYWtlZmlsZS5hbToKLQkgIEhvbm91ciAtLWRpc2FibGUtc2NoZW1hcy1pbnN0YWxsIGNvbmZpZ3VyZSBvcHRpb24uIEZpeGVzICMzNDQxMDAuCi0KLTIwMDYtMDYtMDkgMTg6MzM6MDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2V4YW1wbGVzL2xldmVsL01ha2VmaWxlLmFtOiBBZGQgLWxtIHRvIExJQlMgZm9yIHBvdygpIGZ1bmN0aW9uLCBkb24ndCBhc3N1bWUgb25lIG9mIG91ciBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgbC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2xldmVsL01ha2VmaWxlLmFtOgotCSAgQWRkIC1sbSB0byBMSUJTIGZvciBwb3coKSBmdW5jdGlvbiwgZG9uJ3QgYXNzdW1lIG9uZSBvZiBvdXIKLQkgIGRlcGVuZGVuY2llcyAoc3VjaCBhcyBsaWJ4bWwtMi4wKSBkcmFncyBpdCBpbiBhdXRvbWF0aWNhbGx5Ci0JICAoIzM0MzYwMykuCi0KLTIwMDYtMDYtMDkgMTg6MTc6MjMgKzAwMDAgIFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqQGF4aXMuY29tPgotCi0JICBjb25maWd1cmUuYWM6IFdlIHNob3VsZCB1c2UgJFNFRCBhbmQgbm90ICQoU0VEKSBpbiBjb25maWd1cmUuYWMgKCMzNDM2NzgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0ICA8cGtqIGF0IGF4aXMgZG90IGNvbT4KLQkgICogY29uZmlndXJlLmFjOgotCSAgV2Ugc2hvdWxkIHVzZSAkU0VEIGFuZCBub3QgJChTRUQpIGluIGNvbmZpZ3VyZS5hYyAoIzM0MzY3OCkuCi0KLTIwMDYtMDYtMDkgMTc6Mzg6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIFggYmVmb3JlIHVzaW5nIFhfQ0ZMQUdTIGluIHRoZSBjaGVjayBmb3Igb3BlbmdsICgjMzQzODY2KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBDaGVjayBmb3IgWCBiZWZvcmUgdXNpbmcgWF9DRkxBR1MgaW4gdGhlIGNoZWNrIGZvciBvcGVuZ2wgKCMzNDM4NjYpLgotCSAgKiBleHQvbXVzZXBhY2svTWFrZWZpbGUuYW06Ci0JICAqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3BlZWQvTWFrZWZpbGUuYW06Ci0JICBBZGQgbWlzc2luZyBHU1RfTElCUywgZml4ZXMgYnVpbGQgb24gY3lnd2luICgjMzQzODY2KS4KLQotMjAwNi0wNi0wOSAxNzoyOTowOCArMDAwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCi0JICBzeXMvc3VuYXVkaW8vOiBBdHRhY2hlZCBmaW5kIGEgcGF0Y2ggdGhhdCBmaXhlcyBhIG51bWJlciBvZiBidWdzIHdpdGggdGhlIFN1bkF1ZGlvIG1peGVyIHBsdWdpbiBhbmQgZml4ZXMgIzM0NDEwMTogMS4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEJyaWFuIENhbWVyb24gPGJyaWFuIGRvdCBjYW1lcm9uIGF0IHN1biBkb3QgY29tPgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkgIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX29wZW4pLCAoZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9idWlsZF9saXN0KSwKLQkgIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX25ldyksIChnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF92b2x1bWUpLAotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X211dGUpOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6IChnc3Rfc3VuYXVkaW9zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zdW5hdWRpb3NpbmtfaW5pdCksIChnc3Rfc3VuYXVkaW9zaW5rX3ByZXBhcmUpLAotCSAgKGdzdF9zdW5hdWRpb3Npbmtfd3JpdGUpOgotCSAgQXR0YWNoZWQgZmluZCBhIHBhdGNoIHRoYXQgZml4ZXMgYSBudW1iZXIgb2YgYnVncyB3aXRoIHRoZSBTdW5BdWRpbyBtaXhlcgotCSAgcGx1Z2luIGFuZCBmaXhlcyAjMzQ0MTAxOgotCSAgMS4gVGhlIGdzdF9zdW5hdWRpb21peGVyX2N0cmxfYnVpbGRfbGlzdCBrZXB0IGFwcGVuZGluZyB0aGUgc2FtZSAzIHRyYWNrcyBvbnRvCi0JICB0aGUgdHJhY2tsaXN0IGNhdXNpbmcgZ25vbWUtdm9sdW1lLWNvbnRyb2wncyBwcmVmZXJlbmNlcyBkaWFsb2cgdG8gYmUgbWVzc2VkCi0JICB1cCBhbmQgd291bGQgY29yZSBkdW1wIGlmIHlvdSBjaGVja2VkL3VuY2hlY2tlZCBhbnkgaXRlbS4KLQkgIDIuIFdlIHdlcmVuJ3QgcHJldmlvdXNseSBzZXR0aW5nIHRoZSBNVVRFIGZsYWcgcHJvcGVybHkuICBGaXhpbmcgdGhpcyBtYWtlcwotCSAgZ25vbWUtdm9sdW1lLWNvbnRyb2wgd29yayBiZXR0ZXIuCi0JICAzLiBOb3cgd2UgcHJvcGVybHkgZGVmaW5lIHRoZSBpbnB1dCB0cmFjayB0byBiZSBHU1RfTUlYRVJfVFJBQ0tfSU5QVVQgYW5kCi0JICB0aGUgbW9uaXRvciB0byBiZSBHU1RfTUlYRVJfVFJBQ0tfT1VUUFVULCBzbyB0aGF0IG1ha2VzIGdub21lLXZvbHVtZS1jb250cm9sCi0JICBsb29rIGJldHRlci4KLQkgIEFsc28gc29tZSBtaW5vciBjbGVhbnVwIGluIGdzdHN1bmF1ZGlvc2luay5jLgotCi0yMDA2LTA2LTA5IDE3OjEyOjUyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvanBlZy9nc3RqcGVnZGVjLio6IEFQSTogQWRkZWQgSURDVCBtZXRob2QgcHJvcGVydHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfaWRjdF9tZXRob2RfZ2V0X3R5cGUpLAotCSAgKGdzdF9qcGVnX2RlY19jbGFzc19pbml0KSwgKGdzdF9qcGVnX2RlY19pbml0KSwKLQkgIChnc3RfanBlZ19kZWNfZGVjb2RlX2luZGlyZWN0KSwgKGdzdF9qcGVnX2RlY19kZWNvZGVfZGlyZWN0KSwKLQkgIChnc3RfanBlZ19kZWNfY2hhaW4pLCAoZ3N0X2pwZWdfZGVjX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9qcGVnX2RlY19zZXRfcHJvcGVydHkpLCAoZ3N0X2pwZWdfZGVjX2dldF9wcm9wZXJ0eSk6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuaDoKLQkgIEFQSTogQWRkZWQgSURDVCBtZXRob2QgcHJvcGVydHkKLQkgIFNtYWxsIGNsZWFudXBzLgotCSAgQXZvaWQgZHluYW1pYyBhbGxvY2F0aW9uIG9mIHRyaXZpYWwgZml4ZWQgc3RydWN0dXJlLgotCSAgQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0ZW1wIDQ6NDo0IFlVViBidWZmZXJzLiBGaXhlcyAjMzQzNjYxLgotCi0yMDA2LTA2LTA3IDA5OjI1OjE2ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBjb25maWd1cmUuYWM6IFdlIG5vdyByZXF1aXJlIGxpYnJhdzEzOTQgPj0gMS4xLjAgYW5kIHRoYXQgdmVyc2lvbiBvbndhcmRzIGFsbCBoYXZlIC5wYyBmaWxlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNi0wNyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBXZSBub3cgcmVxdWlyZSBsaWJyYXcxMzk0ID49IDEuMS4wIGFuZCB0aGF0IHZlcnNpb24gb253YXJkcyBhbGwKLQkgIGhhdmUgLnBjIGZpbGVzLgotCi0yMDA2LTA2LTAyIDE1OjAyOjU0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvbGF3L2FsYXctZGVjb2RlLmM6IFRyeWluZyB0byBnZXQgaXRlbXMgZnJvbSBhbiBBTlkgb3IgRU1QVFkgY2FwcyBpcyAuLi4gc3R1cGlkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzogKGFsYXdkZWNfZ2V0Y2Fwcyk6Ci0JICBUcnlpbmcgdG8gZ2V0IGl0ZW1zIGZyb20gYW4gQU5ZIG9yIEVNUFRZIGNhcHMgaXMgLi4uIHN0dXBpZC4KLQotMjAwNi0wNi0wMiAxMTozMzoxOCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZXh0L2R2L2dzdGR2ZGVjLio6IEFkZGVkIEdzdFNlZ21lbnQgaGFuZGxpbmcsIG5vdyBpbXBsZW1lbnRzIGRyb3BwaW5nL2NsaXBwaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2luaXQpLCAoZ3N0X2R2ZGVjX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9kdmRlY19jaGFpbiksIChnc3RfZHZkZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2R2L2dzdGR2ZGVjLmg6Ci0JICBBZGRlZCBHc3RTZWdtZW50IGhhbmRsaW5nLCBub3cgaW1wbGVtZW50cyBkcm9wcGluZy9jbGlwcGluZy4KLQotMjAwNi0wNi0wMSAyMjowMDoyNiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBGaXggbW9yZSBnb2JqZWN0IG1hY3Jvczogb2JqPC0+a2xhc3MsIEdzdFhYWDwtPkdzdFhYWENsYXNzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2Fsc2FzcGRpZi9hbHNhc3BkaWZzaW5rLmg6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmRlYy5oOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JlbmMuaDoKLQkgICogZXh0L2FtcndiL2dzdGFtcndicGFyc2UuaDoKLQkgICogZXh0L2FydHMvZ3N0X2FydHMuaDoKLQkgICogZXh0L2FydHNkL2dzdGFydHNkc2luay5oOgotCSAgKiBleHQvYXVkaW9maWxlL2dzdGFmcGFyc2UuaDoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuaDoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5oOgotCSAgKiBleHQvYXVkaW9yZXNhbXBsZS9nc3RhdWRpb3Jlc2FtcGxlLmg6Ci0JICAqIGV4dC9iejIvZ3N0YnoyZGVjLmg6Ci0JICAqIGV4dC9iejIvZ3N0YnoyZW5jLmg6Ci0JICAqIGV4dC9kaXJhYy9nc3RkaXJhY2RlYy5oOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmg6Ci0JICAqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuaDoKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGVuYy5oOgotCSAgKiBleHQvZHRzL2dzdGR0c2RlYy5oOgotCSAgKiBleHQvZmFhYy9nc3RmYWFjLmg6Ci0JICAqIGV4dC9nc20vZ3N0Z3NtZGVjLmg6Ci0JICAqIGV4dC9nc20vZ3N0Z3NtZW5jLmg6Ci0JICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2VuYy5oOgotCSAgKiBleHQvbGliZmFtZS9nc3RsaWJmYW1lLmg6Ci0JICAqIGV4dC9uYXMvbmFzc2luay5oOgotCSAgKiBleHQvbmVvbi9nc3RuZW9uaHR0cHNyYy5oOgotCSAgKiBleHQvcG9seXAvcG9seXBzaW5rLmg6Ci0JICAqIGV4dC9zZGwvc2RsYXVkaW9zaW5rLmg6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmg6Ci0JICAqIGV4dC9zaG91dC9nc3RzaG91dC5oOgotCSAgKiBleHQvc25hcHNob3QvZ3N0c25hcHNob3QuaDoKLQkgICogZXh0L3NuZGZpbGUvZ3N0c2YuaDoKLQkgICogZXh0L3N3ZmRlYy9nc3Rzd2ZkZWMuaDoKLQkgICogZXh0L3Rhcmtpbi9nc3R0YXJraW5kZWMuaDoKLQkgICogZXh0L3Rhcmtpbi9nc3R0YXJraW5lbmMuaDoKLQkgICogZXh0L3RoZW9yYS90aGVvcmFkZWMuaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgICogZXh0L3hpbmUvZ3N0eGluZS5oOgotCSAgKiBleHQveHZpZC9nc3R4dmlkZGVjLmg6Ci0JICAqIGV4dC94dmlkL2dzdHh2aWRlbmMuaDoKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuaDoKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhc3RyaXAuaDoKLQkgICogZ3N0L2NvbG9yc3BhY2UvZ3N0Y29sb3JzcGFjZS5oOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuaDoKLQkgICogZ3N0L2ZyZWV6ZS9nc3RmcmVlemUuaDoKLQkgICogZ3N0L2dkcC9nc3RnZHBkZXBheS5oOgotCSAgKiBnc3QvZ2RwL2dzdGdkcHBheS5oOgotCSAgKiBnc3QvbW9kcGx1Zy9nc3Rtb2RwbHVnLmg6Ci0JICAqIGdzdC9tcGVnMXN5cy9nc3RtcGVnMXN5c3RlbWVuY29kZS5oOgotCSAgKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuaDoKLQkgICogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5oOgotCSAgKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuaDoKLQkgICogZ3N0L211bHRpZmlsZXNpbmsvZ3N0bXVsdGlmaWxlc2luay5oOgotCSAgKiBnc3Qvb3ZlcmxheS9nc3RvdmVybGF5Lmg6Ci0JICAqIGdzdC9wbGF5b25kZW1hbmQvZ3N0cGxheW9uZGVtYW5kLmg6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdkZWMuaDoKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdlbmMuaDoKLQkgICogZ3N0L3Ntb290aC9nc3RzbW9vdGguaDoKLQkgICogZ3N0L3Ntb290aHdhdmUvZ3N0c21vb3Rod2F2ZS5oOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgICogZ3N0L3NwZWVkL2dzdHNwZWVkLmg6Ci0JICAqIGdzdC9zdGVyZW8vZ3N0c3RlcmVvLmg6Ci0JICAqIGdzdC9zd2l0Y2gvZ3N0c3dpdGNoLmg6Ci0JICAqIGdzdC90dGEvZ3N0dHRhZGVjLmg6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuaDoKLQkgICogZ3N0L3ZpZGVvZHJvcC9nc3R2aWRlb2Ryb3AuaDoKLQkgICogZ3N0L3hpbmdoZWFkZXIvZ3N0eGluZ211eC5oOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5oOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JICAqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuaDoKLQkgICogc3lzL2R4cjMvZHhyM3NwdXNpbmsuaDoKLQkgICogc3lzL2R4cjMvZHhyM3ZpZGVvc2luay5oOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmg6Ci0JICAqIHN5cy92Y2QvdmNkc3JjLmg6Ci0JICBGaXggbW9yZSBnb2JqZWN0IG1hY3Jvczogb2JqPC0+a2xhc3MsIEdzdFhYWDwtPkdzdFhYWENsYXNzCi0KLTIwMDYtMDYtMDEgMjE6MDc6MjYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRml4IG1vcmUgZ29iamVjdCBtYWNyb3M6IG9iajwtPmtsYXNzLCBHc3RYWFg8LT5Hc3RYWFhDbGFzcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hYWxpYi9nc3RhYXNpbmsuaDoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5oOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuaDoKLQkgICogZXh0L2R2L2dzdGR2ZGVjLmg6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4Lmg6Ci0JICAqIGV4dC9lc2QvZXNkbW9uLmg6Ci0JICAqIGV4dC9lc2QvZXNkc2luay5oOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmg6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5oOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5oOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuaDoKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuaDoKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrYW5pbWF0aW9uLmg6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmg6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zaW5rLmg6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuaDoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5oOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5oOgotCSAgKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5oOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZ2RlYy5oOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZ2VuYy5oOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5oOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5oOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuaDoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuaDoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5oOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICAqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmg6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuaDoKLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0Lmg6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZzZWVrLmg6Ci0JICAqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmg6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uaDoKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4Lmg6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5oOgotCSAgKiBnc3QvbGF3L2FsYXctZGVjb2RlLmg6Ci0JICAqIGdzdC9sYXcvYWxhdy1lbmNvZGUuaDoKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaDoKLQkgICogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5oOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RhZ2dyZWdhdG9yLmg6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdGZkc2luay5oOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RtZDVzaW5rLmg6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdG11bHRpZmlsZXNyYy5oOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RwaXBlZmlsdGVyLmg6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdHNoYXBlci5oOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RzdGF0aXN0aWNzLmg6Ci0JICAqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBnc21wYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBwY211cGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5Lmg6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5oOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmg6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5oOgotCSAgKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuaDoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzaW5rLmg6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaDoKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgKiBzeXMvb3NzL2dzdG9zc2RtYWJ1ZmZlci5oOgotCSAgKiBzeXMvb3NzL2dzdG9zc21peGVyZWxlbWVudC5oOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuaDoKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuaDoKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlci5oOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmg6Ci0JICAqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmg6Ci0JICBGaXggbW9yZSBnb2JqZWN0IG1hY3Jvczogb2JqPC0+a2xhc3MsIEdzdFhYWDwtPkdzdFhYWENsYXNzCi0KLTIwMDYtMDUtMzEgMTY6MjM6NTQgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9nb29tL2dzdGdvb20uKjogSGFuZGxlIFFvUy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9nc3Rnb29tLmM6IChnc3RfZ29vbV9jbGFzc19pbml0KSwgKGdzdF9nb29tX2luaXQpLAotCSAgKGdzdF9nb29tX2ZpbmFsaXplKSwgKGdzdF9nb29tX3Jlc2V0KSwgKGdzdF9nb29tX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X2dvb21fc3JjX3NldGNhcHMpLCAoZ3N0X2dvb21fc3JjX2V2ZW50KSwKLQkgIChnc3RfZ29vbV9zaW5rX2V2ZW50KSwgKGdldF9idWZmZXIpLCAoZ3N0X2dvb21fY2hhaW4pLAotCSAgKGdzdF9nb29tX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uaDoKLQkgIEhhbmRsZSBRb1MuCi0JICBIYW5kbGUgZmx1c2hpbmcsIGRpc2NvbnQgYW5kIGV2ZW50cy4KLQkgIEZpeCB0aW1lc3RhbXBzIGFuZCB2YXJpb3VzIG90aGVyIGNsZWFudXBzLgotCi0yMDA2LTA1LTMxIDE1OjM3OjE2ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogRml4IGJ1cyByZXNldCB3aGVuIHVzaW5nIGxpYmllYzYxODgzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDUtMzEgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6IChnc3RfZHYxMzk0c3JjX2J1c19yZXNldCk6Ci0JICBGaXggYnVzIHJlc2V0IHdoZW4gdXNpbmcgbGliaWVjNjE4ODMKLQotMjAwNi0wNS0zMSAxMDozMToyMyArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBEZXRlY3QgbGliaWVjNjE4ODMgYW5kIHNldCBuZWNlc3NhcnkgQ0ZMQUdTIGFuZCBMSUJTIGZvciBkdjEzOTQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDUtMzEgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogY29uZmlndXJlLmFjOgotCSAgRGV0ZWN0IGxpYmllYzYxODgzIGFuZCBzZXQgbmVjZXNzYXJ5IENGTEFHUyBhbmQgTElCUyBmb3IgZHYxMzk0LgotCSAgKiBleHQvcmF3MTM5NC9NYWtlZmlsZS5hbToKLQkgIEFkZCBDRkxBR1MuCi0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOiAoZ3N0X2R2MTM5NHNyY19pZWM2MTg4M19yZWNlaXZlKSwKLQkgIE5ldyBtZXRob2QsIHRvIHJlY2VpdmUgdXNpbmcgbGliaWVjNjE4ODMuCi0JICAoZ3N0X2R2MTM5NHNyY19pc29fcmVjZWl2ZSksCi0JICAjaWZkZWYnZCBvdXQgaWYgbGliaWVjNjE4ODMgaXMgcHJlc2VudC4KLQkgIChnc3RfZHYxMzk0c3JjX2J1c19yZXNldCksCi0JICBHZXQgdXNlcmRhdGEgY29ycmVjdGx5IGlmIHVzaW5nIGxpYmllYzYxODgzLgotCSAgKGdzdF9kdjEzOTRzcmNfY3JlYXRlKSwKLQkgIFdoZW4gdXNpbmcgbGliaWVjNjE4ODMsIG9ubHkgcG9sbCBvbmUgZmQgYW5kIG5vIG5lZWQgdG8gcmVhZC4KLQkgIChnc3RfZHYxMzk0c3JjX2Rpc2NvdmVyX2F2Y19ub2RlKSwKLQkgIFJlcGxhY2UgZ193YXJuaW5ncy4KLQkgIChnc3RfZHYxMzk0c3JjX3N0YXJ0KSwKLQkgIENyZWF0ZSBuZXcgaGFuZGxlIHdoZW4gd2Uga25vdyB3aGljaCBkdiBwb3J0LiAgTW9yZSByZWxpYWJsZQotCSAgdGhhbiBzZXR0aW5nIHBvcnQgb24gYW4gZXhpc3RpbmcgaGFuZGxlLiAgSW5pdGlhbGlzZSBsaWJpZWM2MTg4My4KLQkgIChnc3RfZHYxMzk0c3JjX3N0b3ApOgotCSAgSWYgdXNpbmcgbGliaWVjNjE4ODMsIHRoZW4gY2xlYW51cCBpdHMgaGFuZGxlIHByb3Blcmx5LgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuaDoKLQkgIEFkZCBsaWJpZWM2MTg4MyBoYW5kbGUuCi0KLTIwMDYtMDUtMzAgMjE6MDc6MzggKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBhZGQgYW4gZXhwbGljaXQgZGxsIGltcG9ydGVkIGRlY2xhcmF0aW9uIGZvciBHU1RfQ0FUX0VWRU5UK1dJTjMyCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOgotCSAgYWRkIGFuIGV4cGxpY2l0IGRsbCBpbXBvcnRlZCBkZWNsYXJhdGlvbiBmb3IgR1NUX0NBVF9FVkVOVCtXSU4zMgotCSAgKiB3aW4zMi9NQU5JRkVTVDoKLQkgIHNvcnQgZmlsZSBsaXN0aW5nCi0JICAqIHdpbjMyL3ZzNi9saWJnc3RhdmkuZHNwOgotCSAgYWRkIGdzdGF2aW11eC5jIHRvIHRoZSBwcm9qZWN0Ci0JICAqIHdpbjMyL3ZzNi9saWJnc3RpZDNkZW11eC5kc3A6Ci0JICBhZGQgbGluayB0byB6bGliIGxpYnJhcnkKLQkgICogd2luMzIvdnM2L2xpYmdzdG1hdHJvc2thLmRzcDoKLQkgIGFkZCBtYXRyb3NrYS1pZHMuYyB0byB0aGUgcHJvamVjdAotCi0yMDA2LTA1LTMwIDE0OjM1OjE4ICswMDAwICBTZWJhc3RpYW4gRHLDtmdlIDxtYWlsQHNsb21vc25haWwuZGU+Ci0KLQkgIEFkZCBhcGV2Mm11eCBlbGVtZW50ICgjMzQzMTIyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFNlYmFzdGlhbiBEcsO2Z2UgIDxtYWlsIGF0IHNsb21vc25haWwgZGUgPgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguY2M6Ci0JICAqIGV4dC90YWdsaWIvZ3N0YXBldjJtdXguaDoKLQkgICogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguaDoKLQkgIEFkZCBhcGV2Mm11eCBlbGVtZW50ICgjMzQzMTIyKS4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2FwZXYybXV4LmM6Ci0JICAodGVzdF90YWdsaWJfYXBldjJtdXhfY3JlYXRlX3RhZ3MpLAotCSAgKHRlc3RfdGFnbGliX2FwZXYybXV4X2NoZWNrX3RhZ3MpLCAoZmlsbF9tcDNfYnVmZmVyKSwgKGdvdF9idWZmZXIpLAotCSAgKGRlbXV4X3BhZF9hZGRlZCksICh0ZXN0X3RhZ2xpYl9hcGV2Mm11eF9jaGVja19vdXRwdXRfYnVmZmVyKSwKLQkgICh0ZXN0X3RhZ2xpYl9hcGV2Mm11eF93aXRoX3RhZ3MpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGFwZXYybXV4X3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgYXBldjJtdXggZWxlbWVudC4KLQotMjAwNi0wNS0yOCAxNzozMzoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogR1NUX1BUUl9GT1JNQVQgc2hvdWxkIGJlIHVzZWQgdG8gcHJpbnQgY2FwcyBpbiBkZWJ1ZyBzdGF0ZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6IChnc3RfYWxwaGFfY29sb3JfdHJhbnNmb3JtX2NhcHMpOgotCSAgKiBnc3QvZGVidWcvbmVnb3RpYXRpb24uYzogKGdzdF9uZWdvdGlhdGlvbl91cGRhdGVfY2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6IChnc3RfcnRwX2lsYmNfZGVwYXlfc2V0Y2Fwcyk6Ci0JICBHU1RfUFRSX0ZPUk1BVCBzaG91bGQgYmUgdXNlZCB0byBwcmludCBjYXBzIGluIGRlYnVnIHN0YXRlbWVudHMuCi0KLTIwMDYtMDUtMjggMTQ6Mzg6MTEgKzAwMDAgIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQHVidW50dS5jb20+Ci0KLQkgIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzogU29tZSBjbGVhbi11cHMgYW5kIGFkZGl0aW9uczogbWFwIEFQRSAnZmlsZScgdGFnIHRvCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW8gYXQgdWJ1bnR1IGRvdCBjb20+Ci0JICAqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzogKGFwZV9kZW11eF9nZXRfZ3N0X3RhZ19mcm9tX3RhZyksCi0JICAoYXBlX2RlbXV4X3BhcnNlX3RhZ3MpOgotCSAgU29tZSBjbGVhbi11cHMgYW5kIGFkZGl0aW9uczogbWFwIEFQRSAnZmlsZScgdGFnIHRvCi0JICBHU1RfVEFHX0xPQ0FUSU9OICgjMzQzMTIzKTsgYWRkIHN1cHBvcnQgZm9yIGV4dHJhY3RpbmcKLQkgIHRoZSB0cmFjayBjb3VudCBhbmQgY2xlYW4gdXAgcGFyc2luZyBhIGJpdCAoIzM0MzEyNykuCi0KLTIwMDYtMDUtMjggMTM6NDk6MTIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogSW5pdGlhbGl6ZSBzZWdtZW50IHRvIEdTVF9GT1JNQVRfVU5ERUZJTkVEIGluIFJFQURZLT5QQVVTRUQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdfZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICBJbml0aWFsaXplIHNlZ21lbnQgdG8gR1NUX0ZPUk1BVF9VTkRFRklORUQgaW4gUkVBRFktPlBBVVNFRC4KLQotMjAwNi0wNS0yOCAxMzozMDoxMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy4qOiBDbGlwIG91dGdvaW5nIGJ1ZmZlcnMgYWNjb3JkaW5nIHRvIGN1cnJlbnRseSBjb25maWd1cmVkIHNlZ21lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdfZGVjX2ZpbmFsaXplKSwKLQkgIChnc3RfanBlZ19kZWNfaW5pdCksIChnc3RfanBlZ19kZWNfY2hhaW4pLAotCSAgKGdzdF9qcGVnX2RlY19zaW5rX2V2ZW50KSwgKGdzdF9qcGVnX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBDbGlwIG91dGdvaW5nIGJ1ZmZlcnMgYWNjb3JkaW5nIHRvIGN1cnJlbnRseSBjb25maWd1cmVkIHNlZ21lbnQuCi0KLTIwMDYtMDUtMjggMTA6Mzk6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6IEhhbmRsZSAgd3JpdGluZyBvZiB0cmFjay1jb3VudCBvciBhbGJ1bS12b2x1bWUtY291bnQgd2l0aG91dCB0cmFjay1udW1iZXIgb3IgYWxidW1lLXZvbHVtZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICBIYW5kbGUgIHdyaXRpbmcgb2YgdHJhY2stY291bnQgb3IgYWxidW0tdm9sdW1lLWNvdW50IHdpdGhvdXQKLQkgIHRyYWNrLW51bWJlciBvciBhbGJ1bWUtdm9sdW1lLW51bWJlciAoaW4gdGhpcyBjYXNlIHRoZSBudW1iZXIKLQkgIHdpbGwganVzdCBiZSBzZXQgdG8gMCkuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6ICh0ZXN0X3RhZ2xpYl9pZDNtdXhfY2hlY2tfdGFncyk6Ci0JICBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGFjdHVhbGx5IGNoZWNrZWQgdGhlIHZhbHVlcyByZWNlaXZlZCBmb3IKLQkgIHRyYWNrL2FsYnVtLXZvbHVtZSBudW1iZXIvY291bnQgaW4gIF9jaGVja190YWdzKCksIHJhdGhlciB0aGFuCi0JICBzZXR0aW5nIHRoZW0gYWdhaW4gLi4uCi0KLTIwMDYtMDUtMjggMTA6MDU6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiBBIHRyYWNrL3ZvbHVtZSBudW1iZXIgb3IgY291bnQgb2YgMCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBqdXN0IGlnbm9yZSBpdCBhbG9uZyB3aXRoIG5lZ2F0aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaWQzdjJfdGFnX3RvX3RhZ2xpc3QpOgotCSAgQSB0cmFjay92b2x1bWUgbnVtYmVyIG9yIGNvdW50IG9mIDAgZG9lcyBub3QgbWFrZSBzZW5zZSwKLQkgIGp1c3QgaWdub3JlIGl0IGFsb25nIHdpdGggbmVnYXRpdmUgbnVtYmVycyAoYSB0YWcgbWlnaHQKLQkgIG9ubHkgY29udGFpbiBhIHRyYWNrIGNvdW50IHdpdGhvdXQgYSB0cmFjayBudW1iZXIpLgotCi0yMDA2LTA1LTI3IDEzOjExOjM3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvanBlZy9nc3RqcGVnZGVjLmM6IEFib3J0IGRlY29tcHJlc3Npb24gd2hlbiByZWNlaXZpbmcgRkxVU0hfU1RPUC4gVGhpcyBzaG91bGQgYXZvaWQgaXNzdWVzIHdoZW4gaW50ZXJydXB0aW5nIGRlY28uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfaW5pdCksCi0JICAoZ3N0X2pwZWdfZGVjX3NpbmtfZXZlbnQpOgotCSAgQWJvcnQgZGVjb21wcmVzc2lvbiB3aGVuIHJlY2VpdmluZyBGTFVTSF9TVE9QLiBUaGlzIHNob3VsZCBhdm9pZAotCSAgaXNzdWVzIHdoZW4gaW50ZXJydXB0aW5nIGRlY29kaW5nIHdpdGggZmx1c2hlcy4KLQotMjAwNi0wNS0yNyAxMjoxMDo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhYy5jOiBEb24ndCAjaW5jbHVkZSBmaWxlIHdlIGRvbid0IGRpc3QgYW55IGxvbmdlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjLmM6Ci0JICBEb24ndCAjaW5jbHVkZSBmaWxlIHdlIGRvbid0IGRpc3QgYW55IGxvbmdlci4KLQotMjAwNi0wNS0yNyAxMToyNzo1OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUkVBRE1FOiBSZXBsYWNlIGN1cnJlbnQgUkVBRE1FIChjb250YWluaW5nIHRoZSByZWxlYXNlIG5vdGVzIGZyb20gc29tZSAwLjkueCB2ZXJzaW9uKSB3aXRoIGEgcHJvcGVyIFJFQURNRSB0YWtlbiBmcm9tLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogUkVBRE1FOgotCSAgUmVwbGFjZSBjdXJyZW50IFJFQURNRSAoY29udGFpbmluZyB0aGUgcmVsZWFzZSBub3RlcyBmcm9tCi0JICBzb21lIDAuOS54IHZlcnNpb24pIHdpdGggYSBwcm9wZXIgUkVBRE1FIHRha2VuIGZyb20gdGhlIGNvcmUuCi0KLTIwMDYtMDUtMjYgMjI6MzU6MDAgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3NwZWN0cnVtLzogYWRkZWQgYW5vdGhlciBleGFtcGxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmFtOgotCSAgKiBnc3Qvc3BlY3RydW0vZGVtby1hdWRpb3Rlc3QuYzogKG9uX2ZyZXF1ZW5jeV9jaGFuZ2VkKSwKLQkgIChzcGVjdHJ1bV9jaGFpbiksIChtYWluKToKLQkgICogZ3N0L3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmM6Ci0JICBhZGRlZCBhbm90aGVyIGV4YW1wbGUKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgZml4IHR5cG8KLQotMjAwNi0wNS0yNiAxMzoxNjo1NCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBDbGlwIHRoZSBvdXRwdXRlZCBORVdTRUdNRU5UIHN0b3AgdGltZSB0byB0aGUgY29uZmlndXJlZCBzZWdtZW50IHN0b3AgdGltZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9hY3RpdmF0ZV9zZWdtZW50KToKLQkgIENsaXAgdGhlIG91dHB1dGVkIE5FV1NFR01FTlQgc3RvcCB0aW1lIHRvIHRoZSBjb25maWd1cmVkIHNlZ21lbnQgc3RvcAotCSAgdGltZS4KLQotMjAwNi0wNS0yNiAxMTo0ODo0NCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBEb24ndCBjbGVhciB0aGUgcnVubmluZyB2YXJpYWJsZSBpbiB0aGUgc2VlayBjb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2RvX3NlZWspOgotCSAgRG9uJ3QgY2xlYXIgdGhlIHJ1bm5pbmcgdmFyaWFibGUgaW4gdGhlIHNlZWsgY29kZS4KLQotMjAwNi0wNS0yNCAxNjowMzo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2R2L2dzdGR2ZGVtdXguYzogSW1wbGVtZW50IEVPUyBjb3JyZWN0bHkgYnkgZWl0aGVyIHBvc3RpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfbG9vcCk6Ci0JICBJbXBsZW1lbnQgRU9TIGNvcnJlY3RseSBieSBlaXRoZXIgcG9zdGluZwotCSAgU0VHTUVOVF9ET05FIG9yIHB1c2hpbmcgYW4gRU9TIG1lc3NhZ2UgZGVwZW5kaW5nCi0JICBvbiB0aGUgc2VlayB0eXBlLiBGaXhlcyAjMzQyNTkyCi0KLTIwMDYtMDUtMjQgMTE6NTY6NDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRGV0ZWN0IFFDRUxQIGluIG1wNGEgZGVzY3JpcHRvcnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfaGFuZGxlX2VzZHMpOgotCSAgRGV0ZWN0IFFDRUxQIGluIG1wNGEgZGVzY3JpcHRvcnMuCi0KLTIwMDYtMDUtMjQgMTA6MDA6NTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9sYXcvOiBTb21lIGNsZWFudXBzIGluIHRoZSBjaGFpbiBmdW5jdGlvbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoZ3N0X2FsYXdkZWNfY2hhaW4pOgotCSAgKiBnc3QvbGF3L2FsYXctZGVjb2RlLmg6Ci0JICAqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzogKGdzdF9hbGF3ZW5jX2NoYWluKToKLQkgICogZ3N0L2xhdy9hbGF3LWVuY29kZS5oOgotCSAgKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOiAoZ3N0X211bGF3ZGVjX2NoYWluKToKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaDoKLQkgICogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzogKGdzdF9tdWxhd2VuY19jaGFpbik6Ci0JICAqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmg6Ci0JICBTb21lIGNsZWFudXBzIGluIHRoZSBjaGFpbiBmdW5jdGlvbnMuCi0JICBSZW1vdmUgc29tZSBHU3RyZWFtZXIgMC4wLjIgYml0cy4KLQotMjAwNi0wNS0yMyAyMDoxNTowNCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBnc3RfY29sbGVjdF9wYWRzX3N0b3AoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNoYWluaW5nIHVwIHRvIHRoZSBwYXJlbnQgY2xhc3MgKCMzNDI3Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzICA8bWFuYXV3IGF0IHNreW5ldCBiZT4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9jaGFuZ2Vfc3RhdGUpOgotCSAgZ3N0X2NvbGxlY3RfcGFkc19zdG9wKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjaGFpbmluZyB1cAotCSAgdG8gdGhlIHBhcmVudCBjbGFzcyAoIzM0MjczNCkuCi0KLTIwMDYtMDUtMjMgMTY6NDU6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjLzogUmVtb3ZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNydWZ0IGZvciBkZWFsaW5nIHdpdGggRkxBQyBBUEkgY2hhbmdlcyBpbiB0aGUgMS4wLnggc2VyaWVzIC0gd2UgcmVxdWlyZSAxLi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL01ha2VmaWxlLmFtOgotCSAgKiBleHQvZmxhYy9mbGFjX2NvbXBhdC5oOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjLmM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19pbml0KToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSAgUmVtb3ZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNydWZ0IGZvciBkZWFsaW5nIHdpdGggRkxBQyBBUEkKLQkgIGNoYW5nZXMgaW4gdGhlIDEuMC54IHNlcmllcyAtIHdlIHJlcXVpcmUgMS4xLjEgb3IgbmV3ZXIgdGhlc2UgZGF5cy4KLQotMjAwNi0wNS0yMyAxMzo0NDoxMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thLzogQWRkIHN1cHBvcnQgZm9yIG11eGluZy9kZW11eGluZyB0aGVvcmEgdmlkZW8gKCMzNDI0NDg7IHRvbyBiYWQgbm9uZSBvZiB0aGUgdXN1YWwgbGludXggcGxheWVycyBjYW4gYWN0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfeGlwaF9jb2RlY19wcml2X2RhdGEpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2FwcyksIChnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9iYXNlX2luaXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpLAotCSAgKHhpcGgzX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEpLAotCSAgKHZvcmJpc19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhKSwKLQkgICh0aGVvcmFfc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfc2V0Y2FwcyksCi0JICAoZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhKToKLQkgIEFkZCBzdXBwb3J0IGZvciBtdXhpbmcvZGVtdXhpbmcgdGhlb3JhIHZpZGVvICgjMzQyNDQ4OyB0b28gYmFkCi0JICBub25lIG9mIHRoZSB1c3VhbCBsaW51eCBwbGF5ZXJzIGNhbiBhY3R1YWxseSBwbGF5IHRoaXMpLiBQbGF5YmFjawotCSAgaW4gR1N0cmVhbWVyIHdpbGwgcmVxdWlyZSBhZGRpdGlvbmFsIGNoYW5nZXMgdG8gdGhlb3JhZGVjIGluIC1iYXNlLgotCSAgUmVmYWN0b3Igc3RyZWFtaGVhZGVycyA8PT4gQ29kZWNQcml2YXRlRGF0YSBjb2RlIGEgYml0OyBzb21lIHNtYWxsCi0JICBjbGVhbnVwcy4KLQotMjAwNi0wNS0yMiAxODowMDo1MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBwby9QT1RGSUxFUy5pbjoKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspLCAocGx1Z2luX2luaXQpOgotCSAgcG8vUE9URklMRVMuaW46Ci0JICBUaHJvdyBhbiBlcnJvciB3aGVuIHRoZSBmaWxlIGlzIGVuY3J5cHRlZC4gTW92ZSBwbHVnaW5faW5pdCBzdHVmZgotCSAgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgYWRkIHN0dWZmIGZvciBpMThuLCBtYWtlIGRlYnVnIGNhdGVnb3J5Ci0JICBzdGF0aWMuCi0KLTIwMDYtMDUtMjIgMTU6MjM6MDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogRml4IGNyYXNoZXMgd2hlbiB0aGUgaG9yaXpvbnRhbCBzdWJzYW1wbGluZyBpcyAxLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGhyZXNhbXBsZWNweTEpLAotCSAgKGdzdF9qcGVnX2RlY19kZWNvZGVfaW5kaXJlY3QpLCAoZ3N0X2pwZWdfZGVjX2NoYWluKToKLQkgIEZpeCBjcmFzaGVzIHdoZW4gdGhlIGhvcml6b250YWwgc3Vic2FtcGxpbmcgaXMgMS4KLQkgIEZpeGVzICMzNDIwOTcuCi0KLTIwMDYtMDUtMjIgMTQ6NTY6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5oOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuaDoKLQkgIGNvdmVyIHVwIHRoZSBkaXJ0eSB0cnV0aAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb3ZlciB1cCB0aGUgZGlydHkgdHJ1dGgKLQotMjAwNi0wNS0yMiAxMzo1MzoxOCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgZ3N0L2F2aS9nc3RhdmltdXguKjogLSBhZGQgb2RtbCAobGFyZ2UgZmlsZSkgaW5kZXggc3VwcG9ydAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyAgPG1hbmF1dyBhdCBza3luZXQgYmU+Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpX211eF9maW5hbGl6ZSksIChnc3RfYXZpX211eF9pbml0KSwKLQkgIChnc3RfYXZpX211eF92aWRzaW5rX3NldF9jYXBzKSwgKGdzdF9hdmlfbXV4X2F1ZHNpbmtfc2V0X2NhcHMpLAotCSAgKGdzdF9hdmlfbXV4X3dyaXRlX3RhZyksIChnc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyKSwKLQkgIChnc3RfYXZpX211eF9yaWZmX2dldF9hdml4X2hlYWRlciksIChnc3RfYXZpX211eF93cml0ZV9hdml4X2luZGV4KSwKLQkgIChnc3RfYXZpX211eF9hZGRfaW5kZXgpLCAoZ3N0X2F2aV9tdXhfYmlnZmlsZSksCi0JICAoZ3N0X2F2aV9tdXhfc3RhcnRfZmlsZSksIChnc3RfYXZpX211eF9zdG9wX2ZpbGUpLAotCSAgKGdzdF9hdmlfbXV4X2hhbmRsZV9ldmVudCksIChnc3RfYXZpX211eF9kb19hdWRpb19idWZmZXIpLAotCSAgKGdzdF9hdmlfbXV4X2RvX3ZpZGVvX2J1ZmZlciksIChnc3RfYXZpX211eF9kb19vbmVfYnVmZmVyKSwKLQkgIChnc3RfYXZpX211eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5oOgotCSAgU29tZSBlbmhhbmNlbWVudHMgZm9yIGF2aW11eCAoIzM0MjUyNik6Ci0JICAtIGFkZCBvZG1sIChsYXJnZSBmaWxlKSBpbmRleCBzdXBwb3J0Ci0JICAtIHN0b3JlIGNvZGVjIGluaXQgZGF0YSAoZS5nLiBodWZmeXV2KQotCSAgLSBtaXNjZWxsYW5lb3VzIG90aGVyIGZpeGVzL2NsZWFudXBzCi0KLTIwMDYtMDUtMjIgMTM6NTE6MzAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY21hcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkgIGZpeCBkZXNjcmlwdGlvbnMgYW5kIGxpY2Vuc2UgYmxvY2tzIGN1dCBhbmQgcGFzdGUgYW55b25lID8KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRlc2NyaXB0aW9ucyBhbmQgbGljZW5zZSBibG9ja3MKLQkgIGN1dCBhbmQgcGFzdGUgYW55b25lID8KLQotMjAwNi0wNS0yMSAxNjo0MTo0NCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzogVXNlIGJvaWxlcnBsYXRlIG1hY3JvLCBmaXggc3RyaW5ncyB0byBtYXRjaCBwbHVnaW4tbW92YWwtcmVxdWlyZW1lbnRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX2luaXQpLCAoZ3N0X3NwZWN0cnVtX3NldF9zaW5rX2NhcHMpLAotCSAgKGdzdF9zcGVjdHJ1bV9nZXRfc2lua19jYXBzKSwgKGdzdF9zcGVjdHJ1bV9jaGFpbik6Ci0JICBVc2UgYm9pbGVycGxhdGUgbWFjcm8sIGZpeCBzdHJpbmdzIHRvIG1hdGNoIHBsdWdpbi1tb3ZhbC1yZXF1aXJlbWVudHMKLQotMjAwNi0wNS0yMSAxNjoyMzoyMyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvc3BlY3RydW0vTWFrZWZpbGUuYW06IExpbmsgdG8gYmFzZSBsaWJyYXJpZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvc3BlY3RydW0vTWFrZWZpbGUuYW06Ci0JICBMaW5rIHRvIGJhc2UgbGlicmFyaWVzCi0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAobWFpbik6Ci0JICB1c2UgbmV3IHRocmVzaGhvbGQgcHJvcGVydHkKLQkgICogZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmM6IChnc3Rfc3BlY3RydW1fY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NwZWN0cnVtX2luaXQpLCAoZ3N0X3NwZWN0cnVtX2Rpc3Bvc2UpLAotCSAgKGdzdF9zcGVjdHJ1bV9zZXRfcHJvcGVydHkpLCAoZ3N0X3NwZWN0cnVtX3NldF9zaW5rX2NhcHMpLAotCSAgKGdzdF9zcGVjdHJ1bV9nZXRfc2lua19jYXBzKSwgKGdzdF9zcGVjdHJ1bV9jaGFpbiksCi0JICAoZ3N0X3NwZWN0cnVtX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5oOgotCSAgVXNlIGdzdF9hZGFwdGVyLCBzdXBwb3J0IG11bHRpcGxlLWNoYW5uZWxzLCBhZGQgdGhyZXNob2xkIHByb3BlcnR5IGZvcgotCSAgcmVzdWx0LCBhZGQgZG9jcywgZml4IHJlc3VsdGluZyBzcGVjdHJ1bSByYW5nZSAod2FzIGluY2x1ZGluZyBtaXJyb3JlZAotCSAgcmVzdWx0cykKLQotMjAwNi0wNS0yMCAyMjo0MjoxNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBJbml0aWFsIHBvcnQgb2YgdGhlIHNwZWN0cnVtIGVsZW1lbnQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAoc3BlY3RydW1fY2hhaW4pLCAobWFpbik6Ci0JICAqIGdzdC9zcGVjdHJ1bS9maXhfZmZ0LmM6IChnc3Rfc3BlY3RydW1fZml4X2RvdCk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2dldF90eXBlKSwKLQkgIChnc3Rfc3BlY3RydW1fYmFzZV9pbml0KSwgKGdzdF9zcGVjdHJ1bV9jbGFzc19pbml0KSwKLQkgIChnc3Rfc3BlY3RydW1faW5pdCksIChnc3Rfc3BlY3RydW1fZGlzcG9zZSksCi0JICAoZ3N0X3NwZWN0cnVtX3NldF9wcm9wZXJ0eSksIChnc3Rfc3BlY3RydW1fY2hhaW4pOgotCSAgKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaDoKLQkgIEluaXRpYWwgcG9ydCBvZiB0aGUgc3BlY3RydW0gZWxlbWVudAotCi0yMDA2LTA1LTE5IDE4OjU4OjA1ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOgotCSAgSSBmb3JnZXQgdG8gYWRkIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jIGluIGxhcyBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSSBmb3JnZXQgdG8gYWRkIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jIGluIGxhcyBjb21taXQKLQotMjAwNi0wNS0xOSAxODozMToyNSArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBTb21lIGNsZWFuLXVwcyByZXF1ZXN0ZWQgYnkgd2luZ28gaW4gYnVnICMzMzg4MTguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNvbWUgY2xlYW4tdXBzIHJlcXVlc3RlZCBieSB3aW5nbyBpbiBidWcgIzMzODgxOC4KLQotMjAwNi0wNS0xOSAxNDowNTo1MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiBEb24ndCBvdXRwdXQgYW55IHRhZyB3aGVuIHdlIGVuY291bnRlciBhIG5lZ2F0aXZlIHRyYWNrIG51bWJlciAtIHRoZSB0YWcgdHlwZSBpcyB1aW50LCBzby4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaWQzdjJfdGFnX3RvX3RhZ2xpc3QpOgotCSAgRG9uJ3Qgb3V0cHV0IGFueSB0YWcgd2hlbiB3ZSBlbmNvdW50ZXIgYSBuZWdhdGl2ZSB0cmFjayBudW1iZXIgLSB0aGUKLQkgIHRhZyB0eXBlIGlzIHVpbnQsIHNvIHdlIGVuZCB1cCBvdXRwdXR0aW5nIGh1Z2UgcG9zaXRpdmUgbnVtYmVycwotCSAgaW5zdGVhZC4gKEZpeGVzOiAjMzQyMDI5KQotCi0yMDA2LTA1LTE4IDIzOjA0OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiB1cGRhdGUgZm9yIG5ldyBHU1RQQl9QTFVHSU5TX0RJUgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHVwZGF0ZSBmb3IgbmV3IEdTVFBCX1BMVUdJTlNfRElSCi0KLTIwMDYtMDUtMTggMTk6MzQ6NDcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBDaGVjayBmb3IgWDExCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQ2hlY2sgZm9yIFgxMQotCSAgKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6IChnc3RfdjRsMl9jbGFzc19wcm9iZV9kZXZpY2VzKToKLQkgICogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5oOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19pZmFjZV9zdXBwb3J0ZWQpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5jOiAoZ3N0X3Y0bDJfeG92ZXJsYXlfb3Blbik6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5oOgotCSAgQ29kZSBjbGVhbnVwcywgZml4IGRlYnVnIG1hY3JvcwotCi0yMDA2LTA1LTE4IDE0OjQ1OjMzICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JICBydHAvZ3N0L2dzdHJ0cGgyNjNwYXkuYzogUHJvcGVybHkgc2V0IHN0YXRpYyBjYXBzIGZvciBIMjYzIGF0IDM0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA1LTE4ICBQaGlsaXBwZSBLYWxhZiAgPHBoaWxpcHBlLmthbGFmIGF0IGNvbGxhYm9yYS5jby51az4KLQkgICogcnRwL2dzdC9nc3RydHBoMjYzcGF5LmM6Ci0JICBQcm9wZXJseSBzZXQgc3RhdGljIGNhcHMgZm9yIEgyNjMgYXQgMzQuCi0KLTIwMDYtMDUtMTggMTI6NDY6MDggKzAwMDAgIEphbWVzIERvYyBMaXZpbmdzdG9uIDxkb2NsaXZpbmdzdG9uQGdtYWlsLmNvbT4KLQotCSAgZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzogTWVyZ2UgZXZlbnQgdGFncyBhbmQgdGFnIHNldHRlciB0YWdzIGNvcnJlY3RseSAoIzMzOTkxOCkuIEFsc28sIGRvbid0IGxlYWsgdGFnbGlzdCBpbiBjYXNlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKYW1lcyAiRG9jIiBMaXZpbmdzdG9uICA8ZG9jbGl2aW5nc3RvbiBnbWFpbCBjb20+Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmM6IChnc3RfdGFnX2xpYl9tdXhfcmVuZGVyX3RhZyk6Ci0JICBNZXJnZSBldmVudCB0YWdzIGFuZCB0YWcgc2V0dGVyIHRhZ3MgY29ycmVjdGx5ICgjMzM5OTE4KS4gQWxzbywKLQkgIGRvbid0IGxlYWsgdGFnbGlzdCBpbiBjYXNlIG9mIGFuIGVycm9yLgotCi0yMDA2LTA1LTE3IDE4OjA5OjA2ICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JKiBjb21tb246Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgIEZpeGVkIGNhcHMgZm9yIEgyNjMgKG5vdCB0aGUgc2FtZSBhcyBIMjYzKykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4ZWQgY2FwcyBmb3IgSDI2MyAobm90IHRoZSBzYW1lIGFzIEgyNjMrKQotCi0yMDA2LTA1LTE3IDEyOjM2OjI2ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvbGF3L211bGF3LWRlY29kZS5jOiBXZSBjYW4gb25seSBkbyBjYXBzIGludGVyc2VjdGlvbiBpZiB0aGUgb3RoZXJjYXBzIGFyZSBub24tZW1wdHkgYW5kIG5vdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChtdWxhd2RlY19nZXRjYXBzKToKLQkgIFdlIGNhbiBvbmx5IGRvIGNhcHMgaW50ZXJzZWN0aW9uIGlmIHRoZSBvdGhlcmNhcHMgYXJlIG5vbi1lbXB0eSBhbmQgbm90Ci0JICBBTlkuIEVsc2Ugd2UgcmV0dXJuIHRoZSBwYWQgdGVtcGxhdGUgKGJhc2VfY2FwcykuCi0KLTIwMDYtMDUtMTcgMTE6MjA6NDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogRml4IGNyYXNoIHdoZW4gb3V0cHV0dGluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGNlcnRhaW4gcGljdHVyZXMgKGFsd2F5cyBnb29kIHRvIHVzZSB0aGUgci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICBGaXggY3Jhc2ggd2hlbiBvdXRwdXR0aW5nIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IgY2VydGFpbgotCSAgcGljdHVyZXMgKGFsd2F5cyBnb29kIHRvIHVzZSB0aGUgcmlnaHQgc3RydWN0IG1lbWJlciBmb3IKLQkgIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBpbiBhbiBhcnJheSkuCi0KLTIwMDYtMDUtMTcgMDg6MTA6MzEgKzAwMDAgIEppbmRyaWNoIE1ha292aWNrYSA8amluZHJpY2gubWFraXZpY2thQGl0b25pcy50dj4KLQotCSAgZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiBEb24ndCBjcmVhdGUgdW5uZWNlc3Nhcnkgc3ViLWJ1ZmZlcnMgYWxsIHRoZSB0aW1lLiBEcmFtYXRpY2FsbHkgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2l0aCBtLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBKaW5kcmljaCBNYWtvdmlja2EgIDxqaW5kcmljaC5tYWtpdmlja2EgYXQgaXRvbmlzIHR2PgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX3BlZWtfYnl0ZXMpLAotCSAgKGdzdF9lYm1sX3JlYWRfcHVsbF9ieXRlcyksIChnc3RfZWJtbF9yZWFkX2VsZW1lbnRfaWQpLAotCSAgKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9sZW5ndGgpLCAoZ3N0X2VibWxfcmVhZF9idWZmZXIpLAotCSAgKGdzdF9lYm1sX3JlYWRfYnl0ZXMpLCAoZ3N0X2VibWxfcmVhZF91aW50KSwgKGdzdF9lYm1sX3JlYWRfc2ludCksCi0JICAoZ3N0X2VibWxfcmVhZF9mbG9hdCksIChnc3RfZWJtbF9yZWFkX2FzY2lpKSwKLQkgIChnc3RfZWJtbF9yZWFkX2JpbmFyeSk6Ci0JICBEb24ndCBjcmVhdGUgdW5uZWNlc3Nhcnkgc3ViLWJ1ZmZlcnMgYWxsIHRoZSB0aW1lLiBEcmFtYXRpY2FsbHkKLQkgIGltcHJvdmVzIHBlcmZvcm1hbmNlIHdpdGggbXVsdGlwbGUgY29uY3VycmVudGx5IHJ1bm5pbmcKLQkgIG1hdHJvc2thZGVtdXggaW5zdGFuY2VzICgjMzQxODE4KSAoYW5kIGF2b2lkcyBkb2luZwotCSAgdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudCB0aGluZ3MgaW4gdGhlIGdlbmVyYWwgY2FzZSkuCi0KLTIwMDYtMDUtMTYgMTc6MjA6MDQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IEluIHNuYXBzaG90IG1vZGUsIHdlIGFsd2F5cyByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRCB3aGF0ZXZlciB0aGUgcmV0dXJuIHZhbHVlIG9mIGdzdF9wYWRfcC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChnc3RfcG5nZW5jX2NoYWluKToKLQkgIEluIHNuYXBzaG90IG1vZGUsIHdlIGFsd2F5cyByZXR1cm4gR1NUX0ZMT1dfVU5FWFBFQ1RFRCB3aGF0ZXZlciB0aGUKLQkgIHJldHVybiB2YWx1ZSBvZiBnc3RfcGFkX3B1c2hfZXZlbnQoKS4KLQotMjAwNi0wNS0xNiAxNDowNzoyOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9hdXRvZGV0ZWN0LzogTWFrZSB0aGUgbmFtZSBvZiB0aGUgY2hpbGQgZWxlbWVudCBiZSBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0aGUgcGFyZW50LCBzbyB0aGF0IGRlYnVnIG91dHB1dCBpcyBtb3JlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkgIChnc3RfYXV0b19hdWRpb19zaW5rX2ZpbmRfYmVzdCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX2ZpbmRfYmVzdCk6Ci0JICBNYWtlIHRoZSBuYW1lIG9mIHRoZSBjaGlsZCBlbGVtZW50IGJlIGJhc2VkIG9uIHRoZSBuYW1lIG9mIHRoZQotCSAgcGFyZW50LCBzbyB0aGF0IGRlYnVnIG91dHB1dCBpcyBtb3JlIHVzZWZ1bC4KLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChmaW5kX3V0ZjE2X2JvbSksCi0JICAocGFyc2VfaW5zZXJ0X3N0cmluZ19maWVsZCksIChwYXJzZV9zcGxpdF9zdHJpbmdzKToKLQkgIFJld29yayBzdHJpbmcgcGFyc2luZyB0byBhbHdheXMgd2FsayBvdmVyIEJPTSBtYXJrZXJzIGluIFVURjE2Ci0JICBzdHJpbmdzLCB1c2luZyB0aGUgZW5kaWFubmVzcyBpbmRpY2F0ZWQgYnkgdGhlIGlubmVybW9zdCBvbmUsCi0JICB0aGVuIHRyeWluZyB0aGUgb3Bwb3NpdGUgZW5kaWFubmVzcyBpZiB0aGF0IGZhaWxzIHRvIGNvbnZlcnQKLQkgIHRvIHZhbGlkIFVURi04LiBGaXhlcyAjMzQxNzc0Ci0KLTIwMDYtMDUtMTYgMTM6MzE6MDIgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIGV4dC9saWJwbmcvTWFrZWZpbGUuYW06IEFkZCBMSUJQTkdfQ0ZMQUdTLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA1LTE2ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICBQYXRjaCBmcm9tOiBNYXR0aGlldSA8bWF0dGhpZXUgYXQgZmx1ZW5kbyBkb3QgY29tPgotCSAgKiBleHQvbGlicG5nL01ha2VmaWxlLmFtOgotCSAgQWRkIExJQlBOR19DRkxBR1MuCi0KLTIwMDYtMDUtMTUgMTE6MjA6MjEgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgdXBkYXRlIHdpdGggbGF0ZXN0IGNoYW5nZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHdpdGggbGF0ZXN0IGNoYW5nZXMKLQotMjAwNi0wNS0xNSAwOTowMDo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzogQWRkIHN1cHBvcnQgZm9yIHdyaXRpbmcgaW1hZ2VzIChBUElDIGZyYW1lcykgaW50byBJRDN2MiB0YWdzIChwaWN0dXJlIHR5cGUgYWx3YXlzIHNldCB0byAnLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIGltYWdlcyAoQVBJQyBmcmFtZXMpIGludG8gSUQzdjIKLQkgIHRhZ3MgKHBpY3R1cmUgdHlwZSBhbHdheXMgc2V0IHRvICdvdGhlcicgZm9yIG5vdyB0aG91Z2gpLgotCi0yMDA2LTA1LTE0IDEyOjUwOjA3ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBVcGRhdGUgZG9jczsgd2F2cGFyc2UgaW1wbGVtZW50cyBwdXNoIGFuZCBwdWxsIG1vZGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgVXBkYXRlIGRvY3M7IHdhdnBhcnNlIGltcGxlbWVudHMgcHVzaCBhbmQgcHVsbCBtb2Rlcy4KLQotMjAwNi0wNS0xMiAxODoxMDozNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBPb29wcywgYml0dGVuIGJ5IHRoZSBjb3B5LWFuZC1wYXN0ZSBkZXNpZ24gcGFyYWRpZ20sIGZpeGVzIHNlZWsgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9pbmRleF9uZXh0KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2VlayksIChnc3RfYXZpX2RlbXV4X2xvb3ApOgotCSAgT29vcHMsIGJpdHRlbiBieSB0aGUgY29weS1hbmQtcGFzdGUgZGVzaWduIHBhcmFkaWdtLCBmaXhlcwotCSAgc2VlayBhZ2Fpbi4KLQotMjAwNi0wNS0xMiAxODowNDoyMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC4qOiBTb21lIGNsZWFudXBzLCBwcmVwYXJlIHRvIHVzZSBHc3RTZWdtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9hdmlfZGVtdXhfaW5kZXhfbmV4dCksIChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCSAgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwKLQkgIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfY2FsY3VsYXRlX2R1cmF0aW9uc19mcm9tX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3B1c2hfZXZlbnQpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKSwKLQkgIChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zZWVrKSwgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwKLQkgIChnc3RfYXZpX2RlbXV4X2xvb3ApOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBTb21lIGNsZWFudXBzLCBwcmVwYXJlIHRvIHVzZSBHc3RTZWdtZW50LgotCSAgRml4IGVycm9yIGluIGVudHJ5IHdhbGtpbmcgY29kZS4KLQkgIEZpeCBWQlIgZGV0ZWN0aW9uLgotCSAgU21hcnRlciB0aW1lc3RhbXAgY2FsY3VsYXRpb24gY29kZS4KLQkgIFVuaWZvcm0gZXJyb3IvZW9zIGhhbmRsaW5nLgotCi0yMDA2LTA1LTEyIDE3OjQ0OjE1ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBGaXggdXNlIG9mIHVuaW5pdGlhbGlzZWQgdmFsdWVzIGlmIHdlJ3JlIE5PVCBzZWVraW5nIGluIHJlYWR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2ZtdCksCi0JICAoZ3N0X3dhdnBhcnNlX3BlcmZvcm1fc2VlayksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOgotCSAgRml4IHVzZSBvZiB1bmluaXRpYWxpc2VkIHZhbHVlcyBpZiB3ZSdyZSBOT1Qgc2Vla2luZyBpbiByZWFkeS4KLQkgIEZpeCB0eXBvcy4KLQotMjAwNi0wNS0xMiAwODoyMzoxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL01ha2VmaWxlLmFtOiBBZGQgQ0ZMQUdTIGFuZCBMSUJTIGZvciBsaWJnc3RiYXNlLCBmaXhlcyBidWlsZCBvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbToKLQkgIEFkZCBDRkxBR1MgYW5kIExJQlMgZm9yIGxpYmdzdGJhc2UsIGZpeGVzIGJ1aWxkIG9uCi0JICBDeWd3aW4gKCMzNDE0ODkpLgotCi0yMDA2LTA1LTEyIDA4OjIxOjM3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogU29tZSBtb3JlIGRlYnVnIGluZm8uIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGdfY29udmVydCgpIGlzIHJlYWwuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKHBhcnNlX2luc2VydF9zdHJpbmdfZmllbGQpOgotCSAgU29tZSBtb3JlIGRlYnVnIGluZm8uIE5vIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGUgc3RyaW5nCi0JICByZXR1cm5lZCBieSBnX2NvbnZlcnQoKSBpcyByZWFsbHkgVVRGLTggLSBlaXRoZXIgaXQgaXMgb3IKLQkgIHdlIGdldCBOVUxMIHJldHVybmVkLgotCi0yMDA2LTA1LTExIDE3OjU5OjU5ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIENoYW5nZXMgcHJvcG9zZWQgYnkgV2luZ28gaW4gYnVnICMzMzg4MTguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIENoYW5nZXMgcHJvcG9zZWQgYnkgV2luZ28gaW4gYnVnICMzMzg4MTguCi0KLTIwMDYtMDUtMTEgMDk6MDk6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRmlndXJlIG91dCB0aGUgcmVhbCBhdWRpbyB0eXBlIGluIG1wNGEgYm94ZXMgYnkgcGFyc2luZyB0aGUgb3B0aW9uYWwgZGVzY3JpcHRvcnMgaW4gdGhlIG9wdGlvbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyk6Ci0JICBGaWd1cmUgb3V0IHRoZSByZWFsIGF1ZGlvIHR5cGUgaW4gbXA0YSBib3hlcyBieSBwYXJzaW5nIHRoZQotCSAgb3B0aW9uYWwgZGVzY3JpcHRvcnMgaW4gdGhlIG9wdGlvbmFsIGVzZHMgYm94LiBQcm9tb3RlIHRoZQotCSAgZGVmYXVsdCBBQUMgdG8gbXAzIHdoZW4gaW5kaWNhdGVkLiBGaXhlcyAjMzMwNjMyLgotCi0yMDA2LTA1LTEwIDE3OjQ0OjUwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IFBhcnNlIHZlcnNpb24gMiBzYW1wbGUgZGVzY3JpcHRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF9kdW1wX3Vua25vd24pLAotCSAgKHF0ZGVtdXhfcGFyc2VfdHJhayksIChnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyk6Ci0JICBQYXJzZSB2ZXJzaW9uIDIgc2FtcGxlIGRlc2NyaXB0aW9ucy4KLQkgIERvbid0ICNkZWZpbmUgZ3N0X3V0aWxfZHVtcF9tZW0oKSwgdXNlIHNvbWV0aGluZyBtb3JlCi0JICBzcGVjaWZpYyBpbnN0ZWFkIHRvIGF2b2lkIGNvbmZ1c2lvbi4KLQotMjAwNi0wNS0xMCAxMzo1MTowMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiBGaXggcGFyc2luZyBvZiBudW1lcmljIGdlbnJlIHN0cmluZ3Mgc29tZSBtb3JlLCBieSBlbnN1cmluZyB0aGF0IHdlIG9ubHkgdHJ5IGFuZCBwYXJzZSBzdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaWQzdjJfZ2VucmVfZmllbGRzX3RvX3RhZ2xpc3QpOgotCSAgRml4IHBhcnNpbmcgb2YgbnVtZXJpYyBnZW5yZSBzdHJpbmdzIHNvbWUgbW9yZSwgYnkgZW5zdXJpbmcgdGhhdAotCSAgd2Ugb25seSB0cnkgYW5kIHBhcnNlIHN0cmluZ3MgdGhhdCBhKSBTdGFydCB3aXRoICcoJyBhbmQgYikgQ29uc2lzdAotCSAgb25seSBvZiBkaWdpdHMuCi0JICBBbHNvLCB3aGVuIGZpbmRpbmcgYW4gZXNjYXBpbmcgJygoJyBzZXF1ZW5jZSwgYnVzdCBpdCBiYWNrIHRvICcoJyBieQotCSAgc3dhbGxvd2luZyB0aGUgZmlyc3QgcGFyZW50aGVzaXMKLQotMjAwNi0wNS0xMCAxMToxNzozMSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2VzZC9lc2RzaW5rLio6IE1vdmUgdGhlIGVzZF9nZXRfc2VydmVyX2luZm8oKSBpbnRvIGdzdF9lc2RzaW5rX29wZW4oKSBhbmQgZmFpbCB3aXRoIGEgZGVjZW50IGVycm9yIG1lc3NhZ2Ugb24gZXJyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19maW5hbGl6ZSksIChnc3RfZXNkc2lua19nZXRjYXBzKSwKLQkgIChnc3RfZXNkc2lua19vcGVuKSwgKGdzdF9lc2RzaW5rX2Nsb3NlKToKLQkgICogZXh0L2VzZC9lc2RzaW5rLmg6Ci0JICBNb3ZlIHRoZSBlc2RfZ2V0X3NlcnZlcl9pbmZvKCkgaW50byBnc3RfZXNkc2lua19vcGVuKCkgYW5kIGZhaWwKLQkgIHdpdGggYSBkZWNlbnQgZXJyb3IgbWVzc2FnZSBvbiBlcnJvcnMuCi0KLTIwMDYtMDUtMTAgMTA6Mjk6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIENvbnN0LWlmeSBHRW51bVZhbHVlIGFycmF5cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZXNkL2VzZG1vbi5jOiAoZ3N0X2VzZG1vbl9kZXB0aHNfZ2V0X3R5cGUpLAotCSAgKGdzdF9lc2Rtb25fY2hhbm5lbHNfZ2V0X3R5cGUpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogKGdzdF9nY29uZl9wcm9maWxlX2dldF90eXBlKToKLQkgICogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzogKGdzdF9waXhidWZzY2FsZV9tZXRob2RfZ2V0X3R5cGUpOgotCSAgKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOiAoZ3N0X2NhY2FzaW5rX2RpdGhlcl9nZXRfdHlwZSk6Ci0JICAqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChnc3Rfc2hvdXQyc2VuZF9wcm90b2NvbF9nZXRfdHlwZSk6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiAoZ3N0X2FscGhhX21ldGhvZF9nZXRfdHlwZSk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6IChnc3RfaWxiY19tb2RlX2dldF90eXBlKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BfcHJvdG9fZ2V0X3R5cGUpOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfZmlsbF9nZXRfdHlwZSk6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzogKGdzdF92aWRlb19mbGlwX21ldGhvZF9nZXRfdHlwZSk6Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIChnc3RfdmlkZW9fbWl4ZXJfYmFja2dyb3VuZF9nZXRfdHlwZSk6Ci0JICBDb25zdC1pZnkgR0VudW1WYWx1ZSBhcnJheXMuCi0KLTIwMDYtMDUtMDkgMTQ6MDg6MTUgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aW11eC5jOiBXb3JrIGFyb3VuZCBnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUoKSBidWcgdGhhdCByZXN1bHRzIGluIGF2aW11eCBtYXJraW5nIGFsbCBmcmFtZXMgaW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgIDxtYW5hdXcgYXQgc2t5bmV0IGJldD4KLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmlfbXV4X2RvX2F1ZGlvX2J1ZmZlciksCi0JICAoZ3N0X2F2aV9tdXhfZG9fdmlkZW9fYnVmZmVyKToKLQkgIFdvcmsgYXJvdW5kIGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZSgpIGJ1ZyB0aGF0Ci0JICByZXN1bHRzIGluIGF2aW11eCBtYXJraW5nIGFsbCBmcmFtZXMgaW4gdGhlIGluZGV4IGFzCi0JICBrZXlmcmFtZXMgKCMzNDA4NTkpLgotCi0yMDA2LTA1LTA4IDE5OjIxOjE4ICswMDAwICBNYXJ0aW4gUnVibGkgPG1hcnRpbl9ydWJsaUBsb2dpdGVjaC5jb20+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkgIEZpeCBmb3VyY2MgbmFtZSBwcmludGVkIG91dC4gUGF0Y2ggZnJvbSBNYXJ0aW4gUnVibGkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCBmb3VyY2MgbmFtZSBwcmludGVkIG91dC4gUGF0Y2ggZnJvbSBNYXJ0aW4gUnVibGkuCi0KLTIwMDYtMDUtMDggMTU6MjA6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRG9uJ3QgY2F1c2Ugc2lkZSBlZmZlY3RzIGluIGEgZGVidWdnaW5nIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCSAgKHF0ZGVtdXhfZHVtcF9tdmhkKToKLQkgIERvbid0IGNhdXNlIHNpZGUgZWZmZWN0cyBpbiBhIGRlYnVnZ2luZyBmdW5jdGlvbi4KLQkgIEFsc28gcmVwb3J0IGR1cmF0aW9uIGluIHB1c2ggbW9kZSBzaW5jZSB3ZSBjYW4uCi0KLTIwMDYtMDUtMDggMTQ6MzU6MjAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3B1cmwuYzogTWFrZSBwYXJzaW5nIG9mIHVybHMgc3VjayBzbGlnaHRseSBsZXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX3BhcnNlKToKLQkgIE1ha2UgcGFyc2luZyBvZiB1cmxzIHN1Y2sgc2xpZ2h0bHkgbGVzcy4KLQotMjAwNi0wNS0wOCAxMTo1MzowMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgYXV0b2dlbi5zaDogbGlidG9vbGl6ZSBvbiBEYXJ3aW4vTWFjT1NYIGlzIGNhbGxlZCBnbGlidG9vbGl6ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBhdXRvZ2VuLnNoOiAoQ09ORklHVVJFX0RFRl9PUFQpOgotCSAgbGlidG9vbGl6ZSBvbiBEYXJ3aW4vTWFjT1NYIGlzIGNhbGxlZCBnbGlidG9vbGl6ZS4KLQotMjAwNi0wNS0wOCAxMDo1OTowNSArMDAwMCAgSmVucyBHcmFuc2V1ZXIgPGplbnNnckBnbXgubmV0PgotCi0JICBDODkgY29tcGxpYW5jZSBmaXhlcy4gRml4ZXMgIzM0MDk4MAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSmVucyBHcmFuc2V1ZXIgPGplbnNnciBhdCBnbXggZG90IG5ldD4KLQkgICogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzogKGdzdF9waXhidWZzY2FsZV9pbml0KToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfZGlzcG9zZSk6Ci0JICBDODkgY29tcGxpYW5jZSBmaXhlcy4gRml4ZXMgIzM0MDk4MAotCi0yMDA2LTA1LTA2IDA5OjAxOjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLio6IEhhbmRsZSBzZWdtZW50IHNlZWtzIHRoYXQgaW5jbHVkZSB0aGUgZW5kIG9mIHRoZSBmaWxlIGFzIHN0b3AgcG9pbnQgcHJvcGVybHk6IHdoZW4gdGhlIGRlY29kZXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfbG9vcCk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkgIEhhbmRsZSBzZWdtZW50IHNlZWtzIHRoYXQgaW5jbHVkZSB0aGUgZW5kIG9mIHRoZSBmaWxlIGFzIHN0b3AgcG9pbnQKLQkgIHByb3Blcmx5OiB3aGVuIHRoZSBkZWNvZGVyIGhpdHMgRU9TIHdlIHdhbnQgdG8gc2VuZCBhIFNFR01FTlRfRE9ORQotCSAgbWVzc2FnZSBpbnN0ZWFkIG9mIGFuIEVPUyBldmVudCBpbiBjYXNlIHdlJ3JlIGluIHNlZ21lbnQgc2VlawotCSAgbW9kZSAoZml4ZXMgIzM0MDY5OSkuCi0KLTIwMDYtMDUtMDYgMDA6MTQ6MDkgKzAwMDAgIE1hY2llaiBLYXRhZmlhc3ogPG1hdGhyaWNrQG1hdGhyaWNrLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jOgotCSogZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6Ci0JKiBnc3QvZGVidWcvdGVzdHBsdWdpbi5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSAgQWRkIHNlbWljb2xvbnMgYWZ0ZXIgR1NUX0JPSUxFUlBMQVRFW19GVUxMXSBzbyB0aGF0IGluZGVudCBkb2Vzbid0IG1lc3MgdXAgZm9sbG93aW5nIGxpbmVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBZGQgc2VtaWNvbG9ucyBhZnRlciBHU1RfQk9JTEVSUExBVEVbX0ZVTExdIHNvIHRoYXQgaW5kZW50IGRvZXNuJ3QgbWVzcyB1cCBmb2xsb3dpbmcgbGluZXMuCi0KLTIwMDYtMDUtMDUgMjA6MTI6NTkgKzAwMDAgIE1hcnRpbiBSdWJsaSA8bWFydGluX3J1YmxpQGxvZ2l0ZWNoLmNvbT4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5oOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSogdGVzdHMvaWNsZXMvdjRsMnNyYy10ZXN0LmM6Ci0JICBTb21lIGNoYW5nZXMgcHJvcG9zZWQgYnkgd2luZ28gaW4gYnVnICMzMzg4MTggKGJ1dCBub3QgZXZlcnl0aGluZyB5ZXQpLiBQYXRjaCBmcm9tIE1hcnRpbiBSdWJsaSB0byBmaXggZnJhbWVyYXRlIGRldGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgU29tZSBjaGFuZ2VzIHByb3Bvc2VkIGJ5IHdpbmdvIGluIGJ1ZyAjMzM4ODE4IChidXQgbm90IGV2ZXJ5dGhpbmcgeWV0KS4gUGF0Y2ggZnJvbSBNYXJ0aW4gUnVibGkgdG8gZml4IGZyYW1lcmF0ZSBkZXRlY3Rpb24uCi0KLTIwMDYtMDUtMDQgMTc6Mjc6MjcgKzAwMDAgIE1pY2hhbCBCZW5lcyA8bWljaGFsLmJlbmVzQHhlcmlzLmN6PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogRG9uJ3QgbGVhayBjYXBzIHdoZW4gZnJlZWluZyB0aGUgc3RyZWFtIGNvbnRleHQgKCMzNDA2MjMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWljaGFsIEJlbmVzICA8bWljaGFsIGRvdCBiZW5lcyBhdCB4ZXJpcyBkb3QgY3o+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0KToKLQkgIERvbid0IGxlYWsgY2FwcyB3aGVuIGZyZWVpbmcgdGhlIHN0cmVhbSBjb250ZXh0ICgjMzQwNjIzKS4KLQotMjAwNi0wNS0wNCAxNTo0MDoxOCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIENWUwotCi09PT0gcmVsZWFzZSAwLjEwLjMgPT09Ci0KLTIwMDYtMDUtMDQgMTU6MzY6MDIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taWQzZGVtdXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSogd2luMzIvY29tbW9uL2NvbmZpZy5oOgotCSAgUmVhbGx5IHJlbGVhc2UgMC4xMC4zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlYWxseSByZWxlYXNlIDAuMTAuMwotCi0yMDA2LTA1LTA0IDE1OjI4OjUzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF0ZGVtdXgueG1sOgotCSAgUmVhbGx5IHJlbGVhc2UgMC4xMC4zIHRoaXMgdGltZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZWFsbHkgcmVsZWFzZSAwLjEwLjMgdGhpcyB0aW1lCi0KLTIwMDYtMDUtMDQgMTU6MDU6MDAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFsczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbm5vZGV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdka3BpeGJ1Zi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taGFsZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdGRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYmFsYW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbDoKLQkqIHdpbjMyL2NvbW1vbi9jb25maWcuaDoKLQkgIFJlbGVhc2UgMC4xMC4zCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJlbGVhc2UgMC4xMC4zCi0KLTIwMDYtMDUtMDMgMTg6NDQ6MzggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDYtMDUtMDMgMTg6NDE6NDcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogRG9uJ3Qgc3RyY21wKCkgTlVMTCBzdHJpbmdzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIChnc3RfbWF0cm9za2FfbXV4X3N0cmVhbV9pc192b3JiaXNfaGVhZGVyKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgRG9uJ3Qgc3RyY21wKCkgTlVMTCBzdHJpbmdzLgotCSAgT25seSBzdGFydCBuZXcgY2x1c3RlcnMgb24gdmlkZW8ga2V5ZnJhbWVzLCBub3Qgb24gYW55Ci0JICByYW5kb20gYXVkaW8gYnVmZmVyIHRoYXQgZG9lc24ndCBoYXZlIHRoZSBERUxUQV9VTklUCi0JICBmbGFnIHNldCAoZml4ZXMgJ21ha2UgY2hlY2snIGFnYWluKS4KLQotMjAwNi0wNS0wMyAxNDo1MTo1MCArMDAwMCAgTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBEb24ndCBtaXNpbnRlcnByZXQgR1NUX0NMT0NLX1RJTUVfTk9ORSBhcyB2ZXJ5IGhpZ2ggdGltZXN0YW1wIHZhbHVlIGFuZCB0aGVuIGRlYWQtbG9jayB3Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNYXJrIE5hdXdlbGFlcnRzICA8bWFuYXV3IGF0IHNreW5ldCBiZT4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9iZXN0X3BhZCksCi0JICAoZ3N0X21hdHJvc2thX211eF9zdHJlYW1faXNfdm9yYmlzX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhKToKLQkgIERvbid0IG1pc2ludGVycHJldCBHU1RfQ0xPQ0tfVElNRV9OT05FIGFzIHZlcnkgaGlnaCB0aW1lc3RhbXAKLQkgIHZhbHVlIGFuZCB0aGVuIGRlYWQtbG9jayB3aGVuIG11eGluZyB2b3JiaXMgYXVkaW8gc3RyZWFtcwotCSAgKHRoZSB0aHJlZSB2b3JiaXMgaGVhZGVyIGJ1ZmZlcnMgY2Fycnkgbm8gdGltZXN0YW1wLCBhbmQgaXQKLQkgIHdvdWxkIHRyeSB0byBtdXggdGhlc2UgYWZ0ZXIgYWxsIHZpZGVvIGJ1ZmZlcnMpLiBGaXhlcyAjMzQwMzQ2LgotCSAgSW1wcm92ZSBjbHVzdGVyaW5nOiBzdGFydCBhIG5ldyBjbHVzdGVyIGFsc28gd2hlbmV2ZXIgd2UgZ2V0Ci0JICBhIGtleWZyYW1lLgotCi0yMDA2LTA1LTAzIDE0OjMwOjIxICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBDbGVhbiB1cCBvbmUgcGllY2Ugb2YgbG9naWMgc2xpZ2h0bHkgYW5kIHJlbW92ZSBhIGRlYWQgY29kZSBibG9jay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgQ2xlYW4gdXAgb25lIHBpZWNlIG9mIGxvZ2ljIHNsaWdodGx5IGFuZCByZW1vdmUgYQotCSAgZGVhZCBjb2RlIGJsb2NrLgotCi0yMDA2LTA1LTAzIDE0OjI4OjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYWRkIHdpbjMyIHN0dWZmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogTWFrZWZpbGUuYW06Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogd2luMzIvY29tbW9uL2NvbmZpZy5oLmluOgotCSAgYWRkIHdpbjMyIHN0dWZmCi0KLTIwMDYtMDUtMDMgMTQ6MjY6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBhZGQgd2luMzIgc3R1ZmYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiB3aW4zMi9jb21tb24vY29uZmlnLmguaW46Ci0JICBhZGQgd2luMzIgc3R1ZmYKLQotMjAwNi0wNS0wMiAyMjozNDo1MiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzogRml4IHRpbWVvdmVybGF5IGZvciBub24tbXVsdGlwbGUtb2YtNCB3aWR0aHMuIFRoaXMgZm91cmNjIGNyYXAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzogKGdzdF9jYWlyb190aW1lX292ZXJsYXlfdHJhbnNmb3JtKToKLQkgIEZpeCB0aW1lb3ZlcmxheSBmb3Igbm9uLW11bHRpcGxlLW9mLTQgd2lkdGhzLiBUaGlzIGZvdXJjYyBjcmFwCi0JICBTVUNLUy4KLQotMjAwNi0wNS0wMiAyMTo1Mjo0OCArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBGaXggZ2V0X2NhcHMgZnVuYyB0byB3b3JrIHdoZW4gbm8gZnJhbWVyYXRlIGlzIGF2YWlsYWJsZSBhbmQgdGhlIGNhcHMgaXNuJ3Qgc2ltcGxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggZ2V0X2NhcHMgZnVuYyB0byB3b3JrIHdoZW4gbm8gZnJhbWVyYXRlIGlzIGF2YWlsYWJsZSBhbmQgdGhlIGNhcHMgaXNuJ3Qgc2ltcGxlLgotCi0yMDA2LTA1LTAyIDE4OjUwOjIzICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC86IGRvbid0IGxlYWsgY2Fwcy1zdHJpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiAoZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzKToKLQkgICogZ3N0L2RlYnVnL25lZ290aWF0aW9uLmM6IChnc3RfbmVnb3RpYXRpb25fdXBkYXRlX2NhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jOiAoZ3N0X3J0cF9pbGJjX2RlcGF5X3NldGNhcHMpOgotCSAgZG9uJ3QgbGVhayBjYXBzLXN0cmluZwotCi0yMDA2LTA1LTAyIDE1OjQ2OjAyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogTGV0IGNvcmUgaW5zZXJ0IGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBmb3IgVFlQRV9OT1RfRk9VTkQgZXJyb3JzLCBpdCdzIGp1c3QgYXMgZ29vZCBhcyBvdXIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9jaGFpbiksCi0JICAoZ3N0X2lkM2RlbXV4X3NpbmtfYWN0aXZhdGUpOgotCSAgTGV0IGNvcmUgaW5zZXJ0IGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBmb3IgVFlQRV9OT1RfRk9VTkQKLQkgIGVycm9ycywgaXQncyBqdXN0IGFzIGdvb2QgYXMgb3VyIG93biBhbmQgaGFzIHRoZSBhZGRlZAotCSAgYm9udXMgb2YgYmVpbmcgdHJhbnNsYXRlZC4KLQotMjAwNi0wNS0wMiAxNTo0MDoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0LzogUG9zdCBhbiBlcnJvciBtZXNzYWdlIHdoZW4gd2UgZ2V0IGFuIEVPUyBldmVudCBhbmQgd2VyZSBub3QgYWJsZSB0byBmaW5kIG91dCB0aGUgdHlwZSBvZiBzdHJlYW0uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9pbml0KSwKLQkgIChnc3RfdGFnX2RlbXV4X3NpbmtfZXZlbnQpOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9pbml0KSwKLQkgIChnc3RfaWQzZGVtdXhfc2lua19ldmVudCk6Ci0JICBQb3N0IGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiB3ZSBnZXQgYW4gRU9TIGV2ZW50IGFuZCB3ZXJlIG5vdAotCSAgYWJsZSB0byBmaW5kIG91dCB0aGUgdHlwZSBvZiBzdHJlYW0uCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6IChmaWxsX21wM19idWZmZXIpLCAoZ290X2J1ZmZlciksCi0JICAodGVzdF90YWdsaWJfaWQzbXV4X3dpdGhfdGFncyk6Ci0JICBEZWNyZWFzZSBudW0tYnVmZmVycyB0byAxNiBwZXIgaXRlcmF0aW9uIGFnYWluLCBvdGhlcndpc2UgdGhlCi0JICBtYW55IG1lbWNweSgpcyBhbmQgcmVhbGxvY2F0aW9ucyBpbiB0aGUgdGVzdCB3aWxsIGhhbW1lciBzbG93Ci0JICBDUFVzIGNvbXBsZXRlbHkgYW5kIG1ha2UgdGhlIHRlc3QgdGltZW91dC4KLQotMjAwNi0wNS0wMiAxMzoyNDozOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogZmlndXJlIG91dCB3aGVyZSBwbHVnaW5zLWJhc2UgcGx1Z2lucyBhcmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBmaWd1cmUgb3V0IHdoZXJlIHBsdWdpbnMtYmFzZSBwbHVnaW5zIGFyZQotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgIHVzZSBwbHVnaW5zLWJhc2UgcGx1Z2lucywgc28gd2UgaGF2ZSB0eXBlZmluZCBmdW5jdGlvbnMKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYzogKHRlc3RfdGFnbGliX2lkM211eF93aXRoX3RhZ3MpOgotCSAgaW5jcmVhc2UgbnVtLWJ1ZmZlcnMsIHRoaXMgbWFrZXMgc3VyZSB0aGUgdGVzdCBlcnJvcnMgb3V0IGluc3RlYWQKLQkgIG9mIHRpbWluZyBvdXQgd2hlbiBubyB0eXBlZmluZCBmdW5jdGlvbnMgYXJlIHByZXNlbnQKLQotMjAwNi0wNS0wMiAxMzowMTo1MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgZml4IGRvY3MgZm9yIHdhdnBhcnNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBkb2NzIGZvciB3YXZwYXJzZQotCi0yMDA2LTA1LTAxIDIxOjM3OjUxICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JKiB0ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYzoKLQkgIEZldyBpbXByb3ZlbWVudHMgdG8gbW92ZSB0byBnb29kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGZXcgaW1wcm92ZW1lbnRzIHRvIG1vdmUgdG8gZ29vZC4KLQotMjAwNi0wNS0wMSAxMTo0NjozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbTogYWxzbyBjaGVjayAuY2MgZmlsZXMgZm9yIGd0ay1kb2MgbWFya3VwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgYWxzbyBjaGVjayAuY2MgZmlsZXMgZm9yIGd0ay1kb2MgbWFya3VwCi0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYzogKGlkM3YybXV4X3N1aXRlKSwgKG1haW4pOgotCSAgKiBleHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguaDoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguaDoKLQkgIG1vdmUgdGFnbGliLWJhc2VkIGlkM3YybXV4ZXIgdG8gLWdvb2QuICBGaXhlcyAjMzM2MTEwLgotCi0yMDA2LTA1LTAxIDExOjQ1OjE1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbDoKLQkgIGFkZCBpY3lkZW11eCBpbnNwZWN0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBpY3lkZW11eCBpbnNwZWN0aW9uCi0KLTIwMDYtMDUtMDEgMTE6NDM6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9pdC5wbzoKLQkqIHBvL25iLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9vci5wbzoKLQkqIHBvL3NxLnBvOgotCSogcG8vc3IucG86Ci0JKiBwby9zdi5wbzoKLQkqIHBvL3VrLnBvOgotCSogcG8vdmkucG86Ci0JICBhZGQgeGltYWdlc3JjIGZvciB0cmFuc2xhdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgeGltYWdlc3JjIGZvciB0cmFuc2xhdGlvbgotCi0yMDA2LTA0LTMwIDE2OjE2OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkqIGV4dC90YWdsaWIvZ3N0dGFnbGlibXV4LmM6Ci0JICBzbWFsbCBjbGVhbnVwcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBzbWFsbCBjbGVhbnVwcwotCi0yMDA2LTA0LTMwIDE1OjMyOjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYzoKLQkgIGZpeCBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBkb2NzCi0KLTIwMDYtMDQtMzAgMTQ6NTU6MTUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXRkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbDoKLQkgIHVwZGF0ZSB0byBsYXRlc3QgdmVyc2lvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgdG8gbGF0ZXN0IHZlcnNpb24KLQotMjAwNi0wNC0yOSAxODo0NjozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3RhZ2xpYi9nc3R0YWdsaWIuY2M6IFBvc3QgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgYnVzIGluIHRoZSAoZXh0cmVtZWx5IHVubGlrZWx5KSBjYXNlIG9mIGFuIGVycm9yLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGliLmNjOgotCSAgUG9zdCBhbiBlcnJvciBtZXNzYWdlIG9uIHRoZSBidXMgaW4gdGhlIChleHRyZW1lbHkgdW5saWtlbHkpCi0JICBjYXNlIG9mIGFuIGVycm9yLgotCi0yMDA2LTA0LTI5IDE4OjE4OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvdGFnbGliLzogU3BsaXQgdGhlIGFjdHVhbCBJRDN2MiB0YWcgcmVuZGVyaW5nIGNvZGUgaW50byBpdHMgb3duIHN1YmNsYXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2M6Ci0JICAqIGV4dC90YWdsaWIvZ3N0aWQzdjJtdXguaDoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWIuY2M6Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGliLmg6Ci0JICBTcGxpdCB0aGUgYWN0dWFsIElEM3YyIHRhZyByZW5kZXJpbmcgY29kZSBpbnRvCi0JICBpdHMgb3duIHN1YmNsYXNzLgotCi0yMDA2LTA0LTI5IDE2OjE0OjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogLi4uIGFuZCBmaXggbXVsdGljaGFubmVsL1dBVkZPUk1BVEVYIHN1cHBvcnQgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOgotCSAgLi4uIGFuZCBmaXggbXVsdGljaGFubmVsL1dBVkZPUk1BVEVYIHN1cHBvcnQgYWdhaW4uCi0KLTIwMDYtMDQtMjggMjM6MDk6MTcgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLio6IEFkZCBwdXNoIChzdHJlYW1pbmcpIG1vZGUgdG8gd2F2cGFyc2UgKGZpeGVzICMzMzc2MjUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY2xhc3NfaW5pdCksIChnc3Rfd2F2cGFyc2VfZGlzcG9zZSksCi0JICAoZ3N0X3dhdnBhcnNlX3Jlc2V0KSwgKGdzdF93YXZwYXJzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCksIChnc3Rfd2F2cGFyc2VfcGFyc2VfYWR0bCksCi0JICAoZ3N0X3dhdnBhcnNlX3BhcnNlX2N1ZXMpLCAoZ3N0X3dhdnBhcnNlX3BhcnNlX2ZpbGVfaGVhZGVyKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2luaXQpLCAoZ3N0X3dhdnBhcnNlX3BlcmZvcm1fc2VlayksCi0JICAoZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmtfaW5mbyksIChnc3Rfd2F2cGFyc2VfcGVla19jaHVuayksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9wYXJzZV9zdHJlYW1faW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX3NlbmRfZXZlbnQpLCAoZ3N0X3dhdnBhcnNlX2FkZF9zcmNfcGFkKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpLCAoZ3N0X3dhdnBhcnNlX2xvb3ApLAotCSAgKGdzdF93YXZwYXJzZV9jaGFpbiksIChnc3Rfd2F2cGFyc2Vfc3JjcGFkX2V2ZW50KSwKLQkgIChnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZSksIChnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JICBBZGQgcHVzaCAoc3RyZWFtaW5nKSBtb2RlIHRvIHdhdnBhcnNlIChmaXhlcyAjMzM3NjI1KQotCi0yMDA2LTA0LTI4IDIxOjQzOjA3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYzoKLQkgIGVsZW1lbnQgcmVuYW1lZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBlbGVtZW50IHJlbmFtZWQKLQotMjAwNi0wNC0yOCAxOToyMjo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sOgotCSAgYWRkIHBsdWdpbiBkb2NzIGZvciB4aW1hZ2VzcmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHBsdWdpbiBkb2NzIGZvciB4aW1hZ2VzcmMKLQotMjAwNi0wNC0yOCAxOToxNTowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGFkZCB4aW1hZ2VzcmMgaWNsZXMgdGVzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogdGVzdHMvTWFrZWZpbGUuYW06Ci0JICBhZGQgeGltYWdlc3JjIGljbGVzIHRlc3QKLQotMjAwNi0wNC0yOCAxODo1NzowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIE1vdmUgeGltYWdlc3JjIHBsdWctaW4gdG8gZ29vZCBhZnRlciByZXZpZXcuICBGaXhlcyAjMzM2NzU2LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzogKGdzdF9jbW1sX2VuY19jbGFzc19pbml0KSwKLQkgIChnc3RfY21tbF9lbmNfcHVzaF9jbGlwKToKLQkgICogc3lzL01ha2VmaWxlLmFtOgotCSAgKiBzeXMveGltYWdlL01ha2VmaWxlLmFtOgotCSAgKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgTW92ZSB4aW1hZ2VzcmMgcGx1Zy1pbiB0byBnb29kIGFmdGVyIHJldmlldy4gIEZpeGVzICMzMzY3NTYuCi0KLTIwMDYtMDQtMjggMTY6NTE6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaDoKLQkgIGJvcmdpZnkgbmFtaW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJvcmdpZnkgbmFtaW5nCi0KLTIwMDYtMDQtMjggMTY6NDY6NTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgZG9jIHR3ZWFrcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2MgdHdlYWtzCi0KLTIwMDYtMDQtMjggMTY6MTU6MjAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBzeXMveGltYWdlL01ha2VmaWxlLmFtOgotCSogc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYzoKLQkgIGNsZWFuIHVwIE1ha2VmaWxlLmFtCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuIHVwIE1ha2VmaWxlLmFtCi0KLTIwMDYtMDQtMjggMTU6MzM6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBleHQvdGFnbGliL2dzdHRhZ2xpYm11eC5jOgotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguaDoKLQkgIHBlZGFudGljIGNsZWFudXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHBlZGFudGljIGNsZWFudXBzCi0KLTIwMDYtMDQtMjggMTQ6NTc6NTcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4Lio6IEZpeCBldmVudCBoYW5kbGluZzogY2FjaGUgZXZlbnRzIHdoZW4gdHlwZWZpbmRpbmcgYW5kIGZvcndhcmQgbGF0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6IChnc3RfaWN5ZGVtdXhfcmVzZXQpLCAgICAgICAgIChnc3RfaWN5ZGVtdXhfaW5pdCksIChnc3RfaWN5ZGVtdXhfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfaWN5ZGVtdXhfYWRkX3NyY3BhZCksIChnc3RfaWN5ZGVtdXhfcGFyc2VfYW5kX3NlbmRfdGFncyksCi0JICAoZ3N0X2ljeWRlbXV4X2hhbmRsZV9ldmVudCksIChnc3RfaWN5ZGVtdXhfc2VuZF9jYWNoZWRfZXZlbnRzKSwKLQkgIChnc3RfaWN5ZGVtdXhfdHlwZWZpbmRfb3JfZm9yd2FyZCksIChnc3RfaWN5ZGVtdXhfYWRkX21ldGEpLAotCSAgKGdzdF9pY3lkZW11eF9jaGFpbiksIChnc3RfaWN5ZGVtdXhfc2VuZF90YWdfZXZlbnQpOgotCSAgKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguaDoKLQkgIEZpeCBldmVudCBoYW5kbGluZzogY2FjaGUgZXZlbnRzIHdoZW4gdHlwZWZpbmRpbmcgYW5kIGZvcndhcmQgbGF0ZXIuCi0KLTIwMDYtMDQtMjggMTQ6NTU6MjAgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzogUmVnaXN0ZXIgb3N4YXVkaW9zcmMgdG8gdGhlIHBsdWdpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNC0yOCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICAocGx1Z2luX2luaXQpOgotCSAgUmVnaXN0ZXIgb3N4YXVkaW9zcmMgdG8gdGhlIHBsdWdpbi4KLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JICAoZ3N0X29zeF9hdWRpb19zcmNfb3N4ZWxlbWVudF9kb19pbml0KSwKLQkgIChnc3Rfb3N4X2F1ZGlvX3NyY19iYXNlX2luaXQpLCAoZ3N0X29zeF9hdWRpb19zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X29zeF9hdWRpb19zcmNfaW5pdCksIChnc3Rfb3N4X2F1ZGlvX3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9vc3hfYXVkaW9fc3JjX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X29zeF9hdWRpb19zcmNfY3JlYXRlX3JpbmdidWZmZXIpLCAoZ3N0X29zeF9hdWRpb19zcmNfaW9fcHJvYyksCi0JICAoZ3N0X29zeF9hdWRpb19zcmNfb3N4ZWxlbWVudF9pbml0KToKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmg6Ci0JICBQb3J0IG9mIG9zeGF1ZGlvc3JjIHRvIDAuMTAuCi0JICAqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbToKLQkgIEFkZCBvc3hhdWRpb3NyYwotCi0yMDA2LTA0LTI4IDEyOjAwOjM5ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBjb21taXQgQ2hhbmdlbG9nIGZvciBwcmV2aW91cyBjb21taXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY29tbWl0IENoYW5nZWxvZyBmb3IgcHJldmlvdXMgY29tbWl0Ci0KLTIwMDYtMDQtMjggMTE6NTc6MzkgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hyaW5nYnVmZmVyLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4cmluZ2J1ZmZlci5oOgotCSAgRm9yZ290IHRvIGNvbW1pdCwgcXVpY2sgY29tbWl0IGJlNCBhcHBsZSBkaWVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZvcmdvdCB0byBjb21taXQsIHF1aWNrIGNvbW1pdCBiZTQgYXBwbGUgZGllcwotCi0yMDA2LTA0LTI4IDExOjM3OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogUmVjb2duaXNlIGFuZCBza2lwIGFueSBieXRlIG9yZGVyIG1hcmtlciAoQk9NKSBpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaGFzX3V0ZjE2X2JvbSksCi0JICAocGFyc2Vfc3BsaXRfc3RyaW5ncyk6Ci0JICBSZWNvZ25pc2UgYW5kIHNraXAgYW55IGJ5dGUgb3JkZXIgbWFya2VyIChCT00pIGluCi0JICBVVEYtMTYgc3RyaW5ncy4KLQotMjAwNi0wNC0yNyAxNjowNTo1NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIGRvY3MgZm9yIGJvdGggYXZpZGVtdXggYW5kIGF2aW11eC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JICBBZGQgZG9jcyBmb3IgYm90aCBhdmlkZW11eCBhbmQgYXZpbXV4LgotCi0yMDA2LTA0LTI3IDE0OjUxOjA2ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBnc3QvYXZpLzogUG9ydCBBVkkgbXV4ZXIgdG8gR1N0cmVhbWVyLTAuMTAgKCMzMzIwMzEpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyAgPG1hbmF1dyBhdCBza3luZXQgZG90IGJlPgotCSAgKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXZpL2dzdGF2aS5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aV9tdXhfZ2V0X3R5cGUpLAotCSAgKGdzdF9hdmlfbXV4X2Jhc2VfaW5pdCksIChnc3RfYXZpX211eF9maW5hbGl6ZSksCi0JICAoZ3N0X2F2aV9tdXhfY2xhc3NfaW5pdCksIChnc3RfYXZpX211eF9pbml0KSwKLQkgIChnc3RfYXZpX211eF92aWRzaW5rX3NldF9jYXBzKSwgKGdzdF9hdmlfbXV4X2F1ZHNpbmtfc2V0X2NhcHMpLAotCSAgKGdzdF9hdmlfbXV4X3BhZF9saW5rKSwgKGdzdF9hdmlfbXV4X3BhZF91bmxpbmspLAotCSAgKGdzdF9hdmlfbXV4X3JlcXVlc3RfbmV3X3BhZCksIChnc3RfYXZpX211eF9yZWxlYXNlX3BhZCksCi0JICAoZ3N0X2F2aV9tdXhfd3JpdGVfdGFnKSwgKGdzdF9hdmlfbXV4X3JpZmZfZ2V0X2F2aV9oZWFkZXIpLAotCSAgKGdzdF9hdmlfbXV4X3JpZmZfZ2V0X2F2aXhfaGVhZGVyKSwKLQkgIChnc3RfYXZpX211eF9yaWZmX2dldF92aWRlb19oZWFkZXIpLAotCSAgKGdzdF9hdmlfbXV4X3JpZmZfZ2V0X2F1ZGlvX2hlYWRlciksIChnc3RfYXZpX211eF9hZGRfaW5kZXgpLAotCSAgKGdzdF9hdmlfbXV4X3dyaXRlX2luZGV4KSwgKGdzdF9hdmlfbXV4X2JpZ2ZpbGUpLAotCSAgKGdzdF9hdmlfbXV4X3N0YXJ0X2ZpbGUpLCAoZ3N0X2F2aV9tdXhfc3RvcF9maWxlKSwKLQkgIChnc3RfYXZpX211eF9yZXN0YXJ0X2ZpbGUpLCAoZ3N0X2F2aV9tdXhfaGFuZGxlX2V2ZW50KSwKLQkgIChnc3RfYXZpX211eF9maWxsX3F1ZXVlKSwgKGdzdF9hdmlfbXV4X3NlbmRfcGFkX2RhdGEpLAotCSAgKGdzdF9hdmlfbXV4X3N0cmlwX2J1ZmZlciksIChnc3RfYXZpX211eF9kb19hdWRpb19idWZmZXIpLAotCSAgKGdzdF9hdmlfbXV4X2RvX3ZpZGVvX2J1ZmZlciksIChnc3RfYXZpX211eF9kb19vbmVfYnVmZmVyKSwKLQkgIChnc3RfYXZpX211eF9sb29wKSwgKGdzdF9hdmlfbXV4X2NvbGxlY3RfcGFkcyksCi0JICAoZ3N0X2F2aV9tdXhfZ2V0X3Byb3BlcnR5KSwgKGdzdF9hdmlfbXV4X3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2F2aV9tdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguaDoKLQkgIFBvcnQgQVZJIG11eGVyIHRvIEdTdHJlYW1lci0wLjEwICgjMzMyMDMxKS4KLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aW11eC5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy8uY3ZzaWdub3JlOgotCSAgQWRkIHVuaXQgdGVzdCBmb3IgQVZJIG11eGVyLgotCi0yMDA2LTA0LTI2IDIxOjI5OjQ1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS4qOiByZXZlcnRlZCBwYXRjaCAjMzM3NjI1IGZvciB0aGUgcHJpY2Ugb2YgMSBob3VyIHNsZWVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY2xhc3NfaW5pdCksIChnc3Rfd2F2cGFyc2VfcmVzZXQpLAotCSAgKGdzdF93YXZwYXJzZV9pbml0KSwgKGdzdF93YXZwYXJzZV9jcmVhdGVfc291cmNlcGFkKSwKLQkgIChnc3Rfd2F2cGFyc2VfcGFyc2VfZmlsZV9oZWFkZXIpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksCi0JICAoZ3N0X3dhdnBhcnNlX3NlbmRfZXZlbnQpLCAoZ3N0X3dhdnBhcnNlX2FkZF9zcmNfcGFkKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpLCAoZ3N0X3dhdnBhcnNlX2xvb3ApLAotCSAgKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpLCAoZ3N0X3dhdnBhcnNlX3NpbmtfYWN0aXZhdGUpLAotCSAgKGdzdF93YXZwYXJzZV9zaW5rX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSksCi0JICAocGx1Z2luX2luaXQpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIHJldmVydGVkIHBhdGNoICMzMzc2MjUgZm9yIHRoZSBwcmljZSBvZiAxIGhvdXIgc2xlZXAKLQotMjAwNi0wNC0yNiAyMDoxMToxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuKjogY29ycmVjdCBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHB1c2ggbW9kZSAoZnJvbSBteSBsYXN0IGNvbW1pdCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9iYXNlX2luaXQpLAotCSAgKGdzdF93YXZwYXJzZV9jbGFzc19pbml0KSwgKGdzdF93YXZwYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhcnNlX2luaXQpLCAoZ3N0X3dhdnBhcnNlX2NyZWF0ZV9zb3VyY2VwYWQpLAotCSAgKGdzdF93YXZwYXJzZV9wYXJzZV9hZHRsKSwgKGdzdF93YXZwYXJzZV9wYXJzZV9jdWVzKSwKLQkgIChnc3Rfd2F2cGFyc2VfcGFyc2VfZmlsZV9oZWFkZXIpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKSwgKGdzdF93YXZwYXJzZV9sb29wKSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhaW4pLCAocGx1Z2luX2luaXQpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIGNvcnJlY3QgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBwdXNoIG1vZGUKLQkgIChmcm9tIG15IGxhc3QgY29tbWl0KQotCi0yMDA2LTA0LTI2IDE3OjM3OjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvZXNkL2VzZHNpbmsuYzogRml4IGNvbXBpbGUgcHJvYmxlbSBieSBkZWZpbmluZyBFU0RfTUFYX1dSSVRFX1NJWkUgaWYgaXQgaXMgbm90IGluIGVzZC5oCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6Ci0JICBGaXggY29tcGlsZSBwcm9ibGVtIGJ5IGRlZmluaW5nIEVTRF9NQVhfV1JJVEVfU0laRSBpZgotCSAgaXQgaXMgbm90IGluIGVzZC5oCi0KLTIwMDYtMDQtMjYgMTc6MDg6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuKjogUmV3cml0ZSBhdXBhcnNlIHRvIHN1Y2sgYSBsaXR0bGUgYml0IGxlc3M6IG1ha2Ugc291cmNlIHBhZCBkeW5hbWljLCBzbyBkZWNvZGViaW4vcGxheWJpbiB3by4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzogKGdzdF9hdV9wYXJzZV9iYXNlX2luaXQpLAotCSAgKGdzdF9hdV9wYXJzZV9jbGFzc19pbml0KSwgKGdzdF9hdV9wYXJzZV9pbml0KSwKLQkgIChnc3RfYXVfcGFyc2VfcmVzZXQpLCAoZ3N0X2F1X3BhcnNlX2FkZF9zcmNwYWQpLAotCSAgKGdzdF9hdV9wYXJzZV9yZW1vdmVfc3JjcGFkKSwgKGdzdF9hdV9wYXJzZV9wYXJzZV9oZWFkZXIpLAotCSAgKGdzdF9hdV9wYXJzZV9jaGFpbiksIChnc3RfYXVfcGFyc2Vfc3JjX2NvbnZlcnQpLAotCSAgKGdzdF9hdV9wYXJzZV9zcmNfcXVlcnkpLCAoZ3N0X2F1X3BhcnNlX2hhbmRsZV9zZWVrKSwKLQkgIChnc3RfYXVfcGFyc2Vfc2lua19ldmVudCksIChnc3RfYXVfcGFyc2Vfc3JjX2V2ZW50KSwKLQkgIChnc3RfYXVfcGFyc2VfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5oOgotCSAgUmV3cml0ZSBhdXBhcnNlIHRvIHN1Y2sgYSBsaXR0bGUgYml0IGxlc3M6IG1ha2Ugc291cmNlIHBhZAotCSAgZHluYW1pYywgc28gZGVjb2RlYmluL3BsYXliaW4gd29yayB3aXRoIG5vbi1yYXcgZm9ybWF0cwotCSAgbGlrZSBhbGF3L211bGF3OyBhZGQgcXVlcnkgZnVuY3Rpb24gZm9yIGR1cmF0aW9uL3Bvc2l0aW9uCi0JICBxdWVyaWVzOyBjaGVjayB3aGV0aGVyIHdlIGhhdmUgZW5vdWdoIGRhdGEgYmVmb3JlIGF0dGVtcHRpbmcKLQkgIHRvIHBhcnNlIHRoZSBoZWFkZXIgKGluc3RlYWQgb2YgY3Jhc2hpbmcgd2hlbiB0aGF0IGlzIG5vdCB0aGUKLQkgIGNhc2UpOyB3b3JrIGFyb3VuZCBhdWRpb2NvbnZlcnQgc3Vja2luZyBieSBzd2FwcGluZyBlbmRpYW5uZXNzCi0JICB0byB0aGUgbmF0aXZlIGVuZGlhbm5lc3Mgb3Vyc2VsdmVzIGZvciBmbG9hdCBmb3JtYXRzOyBzZW5kCi0JICBpbml0aWFsIG5ld3NlZ21lbnQgZXZlbnQuIEZpeGVzICMxNjE3MTIuCi0KLTIwMDYtMDQtMjYgMTY6Mjk6MzggKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHN5cy9vc3hhdWRpby86IFBvcnQgb2Ygb3N4YXVkaW9zaW5rIHRvIDAuMTAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wNC0yNiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuYzoKLQkgIChnc3Rfb3N4X2F1ZGlvX2VsZW1lbnRfZ2V0X3R5cGUpLAotCSAgKGdzdF9vc3hfYXVkaW9fZWxlbWVudF9jbGFzc19pbml0KToKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5oOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JICAoZ3N0X29zeF9hdWRpb19zaW5rX29zeGVsZW1lbnRfZG9faW5pdCksCi0JICAoZ3N0X29zeF9hdWRpb19zaW5rX2Jhc2VfaW5pdCksIChnc3Rfb3N4X2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X29zeF9hdWRpb19zaW5rX2luaXQpLCAoZ3N0X29zeF9hdWRpb19zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X29zeF9hdWRpb19zaW5rX2dldF9wcm9wZXJ0eSksIChnc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0Y2FwcyksCi0JICAoZ3N0X29zeF9hdWRpb19zaW5rX2NyZWF0ZV9yaW5nYnVmZmVyKSwKLQkgIChnc3Rfb3N4X2F1ZGlvX3NpbmtfaW9fcHJvYyksIChnc3Rfb3N4X2F1ZGlvX3Npbmtfb3N4ZWxlbWVudF9pbml0KSwKLQkgIChwbHVnaW5faW5pdCk6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkgIFBvcnQgb2Ygb3N4YXVkaW9zaW5rIHRvIDAuMTAKLQotMjAwNi0wNC0yNiAwODo1NToyNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2VzZC9lc2RzaW5rLmM6IEFsd2F5cyB3cml0ZSBFU0RfQlVGX1NJWkUgYnl0ZXMgYW5kIHVzZSBFU0RfTUFYX1dSSVRFX1NJWkUgYXMgdGhlIHNpemUgb2YgdGhlIHJpbmdidWZmZXIuIFRoaXMgc2hvLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19wcmVwYXJlKSwgKGdzdF9lc2RzaW5rX2RlbGF5KToKLQkgIEFsd2F5cyB3cml0ZSBFU0RfQlVGX1NJWkUgYnl0ZXMgYW5kIHVzZSBFU0RfTUFYX1dSSVRFX1NJWkUgYXMKLQkgIHRoZSBzaXplIG9mIHRoZSByaW5nYnVmZmVyLiBUaGlzIHNob3VsZCBmaXggaGFuZ3Mgd2l0aCBvbGRlcgotCSAgZXNkIHNvdW5kIHNlcnZlcnMuCi0KLTIwMDYtMDQtMjUgMjE6NTY6MzggKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRGVmaW5lIEdzdEVsZW1lbnREZXRhaWxzIGFzIGNvbnN0IGFuZCBhbHNvIHN0YXRpYyAod2hlbiBkZWZpbmVkIGFzIGdsb2JhbCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JkZWMuYzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndiZW5jLmM6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YnBhcnNlLmM6Ci0JICAqIGV4dC9hcnRzL2dzdF9hcnRzLmM6Ci0JICAqIGV4dC9hcnRzZC9nc3RhcnRzZHNpbmsuYzoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnBhcnNlLmM6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzoKLQkgICogZXh0L2F1ZGlvcmVzYW1wbGUvZ3N0YXVkaW9yZXNhbXBsZS5jOgotCSAgKiBleHQvYnoyL2dzdGJ6MmRlYy5jOgotCSAgKiBleHQvYnoyL2dzdGJ6MmVuYy5jOgotCSAgKiBleHQvY2RhdWRpby9nc3RjZGF1ZGlvLmM6Ci0JICAqIGV4dC9kaXJlY3RmYi9kZmJ2aWRlb3NpbmsuYzoKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGRlYy5jOgotCSAgKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmM6Ci0JICAqIGV4dC9kdHMvZ3N0ZHRzZGVjLmM6IChnc3RfZHRzZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9mYWFjL2dzdGZhYWMuYzogKGdzdF9mYWFjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9mYWFkL2dzdGZhYWQuYzoKLQkgICogZXh0L2dzbS9nc3Rnc21kZWMuYzoKLQkgICogZXh0L2dzbS9nc3Rnc21lbmMuYzoKLQkgICogZXh0L2hlcm1lcy9nc3RoZXJtZXNjb2xvcnNwYWNlLmM6Ci0JICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2ZpbGUuYzoKLQkgICogZXh0L2xjcy9nc3Rjb2xvcnNwYWNlLmM6Ci0JICAqIGV4dC9saWJmYW1lL2dzdGxpYmZhbWUuYzoKLQkgICogZXh0L2xpYm1tcy9nc3RtbXMuYzogKGdzdF9tbXNfYmFzZV9pbml0KToKLQkgICogZXh0L211c2VwYWNrL2dzdG11c2VwYWNrZGVjLmM6IChnc3RfbXVzZXBhY2tkZWNfYmFzZV9pbml0KToKLQkgICogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOiAoZ3N0X211c2ljYnJhaW56X2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9uYXMvbmFzc2luay5jOiAoZ3N0X25hc3NpbmtfYmFzZV9pbml0KToKLQkgICogZXh0L25lb24vZ3N0bmVvbmh0dHBzcmMuYzoKLQkgICogZXh0L3NkbC9zZGxhdWRpb3NpbmsuYzoKLQkgICogZXh0L3NkbC9zZGx2aWRlb3NpbmsuYzoKLQkgICogZXh0L3Nob3V0L2dzdHNob3V0LmM6Ci0JICAqIGV4dC9zbmFwc2hvdC9nc3RzbmFwc2hvdC5jOgotCSAgKiBleHQvc25kZmlsZS9nc3RzZi5jOgotCSAgKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmRlYy5jOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmVuYy5jOgotCSAgKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfYmFzZV9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9iYXNlX2luaXQpOgotCSAgKiBleHQveHZpZC9nc3R4dmlkZGVjLmM6Ci0JICAqIGV4dC94dmlkL2dzdHh2aWRlbmMuYzoKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuYzogKGdzdF9jZHhhX3BhcnNlX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXN0cmlwLmM6IChnc3RfY2R4YXN0cmlwX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9jaGFydC9nc3RjaGFydC5jOgotCSAgKiBnc3QvY29sb3JzcGFjZS9nc3Rjb2xvcnNwYWNlLmM6Ci0JICAqIGdzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jOgotCSAgKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOiAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFzZV9pbml0KToKLQkgICogZ3N0L2Zlc3RpdmFsL2dzdGZlc3RpdmFsLmM6Ci0JICAqIGdzdC9maWx0ZXIvZ3N0YnB3c2luYy5jOgotCSAgKiBnc3QvZmlsdGVyL2dzdGlpci5jOgotCSAgKiBnc3QvZmlsdGVyL2dzdGxwd3NpbmMuYzoKLQkgICogZ3N0L2ZyZWV6ZS9nc3RmcmVlemUuYzoKLQkgICogZ3N0L2dhbWVzL2dzdHB1enpsZS5jOiAoZ3N0X3B1enpsZV9iYXNlX2luaXQpOgotCSAgKiBnc3QvbGlicmZiL2dzdHJmYnNyYy5jOgotCSAgKiBnc3QvbWl4bWF0cml4L21peG1hdHJpeC5jOgotCSAgKiBnc3QvbXBlZzFzeXMvZ3N0bXBlZzFzeXN0ZW1lbmNvZGUuYzoKLQkgICogZ3N0L21wZWcxdmlkZW9wYXJzZS9nc3RtcDF2aWRlb3BhcnNlLmM6Ci0JICAqIGdzdC9tcGVnMnN1Yi9nc3RtcGVnMnN1YnQuYzoKLQkgICogZ3N0L21wZWdhdWRpb3BhcnNlL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JICAqIGdzdC9tdWx0aWZpbGVzaW5rL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkgICogZ3N0L292ZXJsYXkvZ3N0b3ZlcmxheS5jOgotCSAgKiBnc3QvcGFzc3Rocm91Z2gvZ3N0cGFzc3Rocm91Z2guYzoKLQkgICogZ3N0L3BsYXlvbmRlbWFuZC9nc3RwbGF5b25kZW1hbmQuYzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgKiBnc3QvcnRqcGVnL2dzdHJ0anBlZ2RlYy5jOgotCSAgKiBnc3QvcnRqcGVnL2dzdHJ0anBlZ2VuYy5jOgotCSAgKiBnc3Qvc21vb3RoL2dzdHNtb290aC5jOgotCSAgKiBnc3Qvc21vb3Rod2F2ZS9nc3RzbW9vdGh3YXZlLmM6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOgotCSAgKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuYzoKLQkgICogZ3N0L3N0ZXJlby9nc3RzdGVyZW8uYzoKLQkgICogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzoKLQkgICogZ3N0L3R0YS9nc3R0dGFkZWMuYzogKGdzdF90dGFfZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYzogKGdzdF90dGFfcGFyc2VfYmFzZV9pbml0KToKLQkgICogZ3N0L3ZiaWRlYy9nc3R2YmlkZWMuYzoKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgICogZ3N0L3ZpZGVvZHJvcC9nc3R2aWRlb2Ryb3AuYzoKLQkgICogZ3N0L3ZpcnR1YWxkdWIvZ3N0eHNoYXJwZW4uYzoKLQkgICogZ3N0L3hpbmdoZWFkZXIvZ3N0eGluZ211eC5jOiAoZ3N0X3hpbmdfbXV4X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICAqIHN5cy9jZHJvbS9nc3RjZHBsYXllci5jOgotCSAgKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5jOgotCSAgKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JICAqIHN5cy9nbHNpbmsvZ2xpbWFnZXNpbmsuYzoKLQkgICogc3lzL3FjYW0vZ3N0cWNhbXNyYy5jOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICAqIHN5cy92Y2QvdmNkc3JjLmM6IChnc3RfdmNkc3JjX2Jhc2VfaW5pdCk6Ci0JICAqIHN5cy94aW1hZ2VzcmMveGltYWdlc3JjLmM6Ci0JICBEZWZpbmUgR3N0RWxlbWVudERldGFpbHMgYXMgY29uc3QgYW5kIGFsc28gc3RhdGljICh3aGVuIGRlZmluZWQgYXMKLQkgIGdsb2JhbCkKLQotMjAwNi0wNC0yNSAyMTozOTo0NiArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBEZWZpbmUgR3N0RWxlbWVudERldGFpbHMgYXMgY29uc3QgYW5kIGFsc28gc3RhdGljICh3aGVuIGRlZmluZWQgYXMgZ2xvYmFsKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuYzoKLQkgICogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6Ci0JICAqIGV4dC9lc2QvZXNkbW9uLmM6Ci0JICAqIGV4dC9lc2QvZXNkc2luay5jOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6IChnc3RfZ2NvbmZfYXVkaW9fc2lua19iYXNlX2luaXQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NyYy5jOiAoZ3N0X2djb25mX2F1ZGlvX3NyY19iYXNlX2luaXQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuYzogKGdzdF9nY29uZl92aWRlb19zaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc3JjLmM6IChnc3RfZ2NvbmZfdmlkZW9fc3JjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zaW5rLmM6IChnc3RfaGFsX2F1ZGlvX3NpbmtfYmFzZV9pbml0KToKLQkgICogZXh0L2hhbC9nc3RoYWxhdWRpb3NyYy5jOiAoZ3N0X2hhbF9hdWRpb19zcmNfYmFzZV9pbml0KToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6Ci0JICAqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZGVjLmM6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JICAqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiAoZ3N0X3Nob3V0MnNlbmRfaW5pdCk6Ci0JICAqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmg6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkgICogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19iYXNlX2luaXQpOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JICAoZ3N0X2F1dG9fdmlkZW9fc2lua19iYXNlX2luaXQpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpbXV4X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JICAqIGdzdC9kZWJ1Zy9icmVha215ZGF0YS5jOgotCSAgKiBnc3QvZGVidWcvZWZlbmNlLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSAgKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5jOgotCSAgKiBnc3QvZGVidWcvbmVnb3RpYXRpb24uYzoKLQkgICogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6Ci0JICAqIGdzdC9kZWJ1Zy90ZXN0cGx1Z2luLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQkgICogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSAgKiBnc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6Ci0JICAqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzogKGdzdF9hbGF3ZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzogKGdzdF9hbGF3ZW5jX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChnc3RfbXVsYXdkZWNfYmFzZV9pbml0KToKLQkgICogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzogKGdzdF9tdWxhd2VuY19iYXNlX2luaXQpOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfYmFzZV9pbml0KToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9iYXNlX2luaXQpOgotCSAgKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5jOgotCSAgKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdGFnZ3JlZ2F0b3IuYzoKLQkgICogZ3N0L29sZGNvcmUvZ3N0ZmRzaW5rLmM6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdG1kNXNpbmsuYzoKLQkgICogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdHBpcGVmaWx0ZXIuYzoKLQkgICogZ3N0L29sZGNvcmUvZ3N0c2hhcGVyLmM6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdHN0YXRpc3RpY3MuYzoKLQkgICogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSAgKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzoKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzoKLQkgICogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzogKGdzdF9nYW1tYV9iYXNlX2luaXQpOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvdGVtcGxhdGUuYzoKLQkgIChnc3RfdmlkZW90ZW1wbGF0ZV9iYXNlX2luaXQpOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX2NsYXNzX2luaXQpLCAoZ3N0X3dhdnBhcnNlX2Rpc3Bvc2UpLAotCSAgKGdzdF93YXZwYXJzZV9yZXNldCksIChnc3Rfd2F2cGFyc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX3BlcmZvcm1fc2VlayksIChnc3Rfd2F2cGFyc2VfcGVla19jaHVua19pbmZvKSwKLQkgIChnc3Rfd2F2cGFyc2VfcGVla19jaHVuayksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLAotCSAgKGdzdF93YXZwYXJzZV9wYXJzZV9zdHJlYW1faW5pdCksIChnc3Rfd2F2cGFyc2Vfc2VuZF9ldmVudCksCi0JICAoZ3N0X3dhdnBhcnNlX2FkZF9zcmNfcGFkKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksCi0JICAoZ3N0X3dhdnBhcnNlX2NoYWluKSwgKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpLAotCSAgKGdzdF93YXZwYXJzZV9zaW5rX2FjdGl2YXRlKSwgKGdzdF93YXZwYXJzZV9zaW5rX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF93YXZwYXJzZV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgICogc3lzL29zcy9nc3Rvc3NtaXhlcmVsZW1lbnQuYzoKLQkgICogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuYzoKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuYzoKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jOgotCSAgRGVmaW5lIEdzdEVsZW1lbnREZXRhaWxzIGFzIGNvbnN0IGFuZCBhbHNvIHN0YXRpYyAod2hlbiBkZWZpbmVkIGFzCi0JICBnbG9iYWwpCi0KLTIwMDYtMDQtMjUgMTc6NTc6MjMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogU291cmNlIHBhZCBoYXMgZml4ZWQgY2Fwcy4gSWYgd2UgZG9uJ3Qgc2V0IHRoaXMsIGJhZCB0aGluZ3MgaGFwcGVuIHdoZW4gdGhlIHdpbmRvdyBpcyByZXNpemVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICBTb3VyY2UgcGFkIGhhcyBmaXhlZCBjYXBzLiBJZiB3ZSBkb24ndCBzZXQgdGhpcywgYmFkCi0JICB0aGluZ3MgaGFwcGVuIHdoZW4gdGhlIHdpbmRvdyBpcyByZXNpemVkLgotCi0yMDA2LTA0LTI1IDE2OjM4OjUwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvOiBIYW5kbGUgY2FzZSB3aGVyZSB0aGUgVHJhY2tUeXBlIGVibWwgY2h1bmsgZG9lcyBub3QgY29tZSBiZWZvcmUgdGhlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NyY19ldmVudCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuYzoKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF92aWRlb19jb250ZXh0KSwKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9hdWRpb19jb250ZXh0KSwKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9zdWJ0aXRsZV9jb250ZXh0KSwKLQkgIChnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9jb21wbGV4X2NvbnRleHQpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBIYW5kbGUgY2FzZSB3aGVyZSB0aGUgVHJhY2tUeXBlIGVibWwgY2h1bmsgZG9lcyBub3QgY29tZSBiZWZvcmUgdGhlCi0JICBUcmFja0luZm9BdWRpbyBvciBUcmFja0luZm9WaWRlbyBlYm1sIGNodW5rICgjMzM5NDQ2KS4gSWdub3JlIFFvUwotCSAgZXZlbnRzLgotCi0yMDA2LTA0LTI1IDE2OjA5OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogSXQncyBjb2RlY19kYXRhLCBub3QgY29kZWNfaW5mby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYzogKGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOiAoZ3N0X3J0cF9tcDR2X3BheV9zZXRjYXBzKToKLQkgIEl0J3MgY29kZWNfZGF0YSwgbm90IGNvZGVjX2luZm8uCi0KLTIwMDYtMDQtMjUgMTE6NDU6MDAgKzAwMDAgIE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBIYW5kbGUgY29kZWNfZGF0YSBmb3IgVmZXIGNvbXBhdGliaWxpdHkgY29kZWMgSURzICgjMzM5NDUxKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogTWFyayBOYXV3ZWxhZXJ0cyAgPG1hbmF1dyBhdCBza3luZXQgZG90IGJlPgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF92aWRlb19jYXBzKToKLQkgIEhhbmRsZSBjb2RlY19kYXRhIGZvciBWZlcgY29tcGF0aWJpbGl0eSBjb2RlYyBJRHMgKCMzMzk0NTEpCi0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIChnc3RfbWF0cm9za2FfbXV4X3ZpZGVvX3BhZF9zZXRjYXBzKToKLQkgIFNhbWUgaGVyZSwgaGFuZGxlIGNvZGVjX2RhdGEgYW5kIGFkZCBhZGRpdGlvbmFsIGNhcHMgd2UgY2FuIGhhbmRsZQotCSAgbm93IHRvIHRoZSBwYWQgdGVtcGxhdGUgKGh1ZmZ5dXYsIGR2IGFuZCBoMjYzIHZpZGVvKSAoIzMzOTQ1MSkKLQotMjAwNi0wNC0yNSAxMTowOToyNCArMDAwMCAgSm9zZWYgWmxvbWVrIDxqb3NlZi56bG9tZWtAaXRvbmlzLnR2PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEZpeCB0aW1lc3RhbXBpbmcgb2YgQi1mcmFtZXMsIHVzZSBzaWduZWQgaW50ZWdlcnMsIGRvIHNvbWUgcm91bmRpbmcgKCMzMzk2NzgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogSm9zZWYgWmxvbWVrICA8am9zZWYgZG90IHpsb21layBhdCBpdG9uaXMgZG90IHR2PgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF9jcmVhdGVfYnVmZmVyX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhKToKLQkgIEZpeCB0aW1lc3RhbXBpbmcgb2YgQi1mcmFtZXMsIHVzZSBzaWduZWQgaW50ZWdlcnMsIGRvCi0JICBzb21lIHJvdW5kaW5nICgjMzM5Njc4KS4KLQotMjAwNi0wNC0yNCAxODozMDo1NSArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvYW5ub2RleC9nc3RjbW1scGFyc2VyLmM6Ci0JICBqdXN0IG1ha2UgaXQgY29tcGlsZSB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGp1c3QgbWFrZSBpdCBjb21waWxlIHdpdGggLS1kaXNhYmxlLWdzdC1kZWJ1Zy4KLQotMjAwNi0wNC0yMyAxNTo1NTozMCArMDAwMCAgU8OpYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogRml4IGEgYmFkIGNvbnZlcnNpb24gdXNpbmcgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZS4gZmFicyAoKGdkb3VibGUpIGRlbXV4LT5pbmRleFtlbnRyeV0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYWRlbXV4X2RvX2luZGV4X3NlZWspOgotCSAgRml4IGEgYmFkIGNvbnZlcnNpb24gdXNpbmcgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZS4KLQkgIGZhYnMgKChnZG91YmxlKSBkZW11eC0+aW5kZXhbZW50cnldLnRpbWUgLSAoZ2RvdWJsZSkgc2Vla19wb3MpIGNhbiBub3QgYmUKLQkgIHJlcGxhY2VkIGJ5IGZhYnMgKGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGRlbXV4LT5pbmRleFtlbnRyeV0udGltZSAtIHNlZWtfcG9zKSkgYXMgdGhlCi0JICBkaWZmZXJlbmNlIGNvdWxkIGJlIG5lZ2F0aXZlLiBmYWJzIChnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChkZW11eC0+aW5kZXhbZW50cnldLnRpbWUpIC0KLQkgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHNlZWtfcG9zKSkgaXMgdGhlIGdvb2Qgc29sdXRpb24uIFRoYW5rcyB0byBUaW0gd2hvIGhhcyBzZWVuIG15Ci0JICBtaXN0YWtlLgotCi0yMDA2LTA0LTIyIDE1OjMyOjQ4ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBVc2UgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSBmb3IgY29udmVyc2lvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYWRlbXV4X2RvX2luZGV4X3NlZWspOgotCSAgVXNlIGdzdF9ndWludDY0X3RvX2dkb3VibGUgZm9yIGNvbnZlcnNpb25zCi0JICAqIHdpbjMyL3ZzNi9nc3RfcGx1Z2luc19nb29kLmRzdzoKLQkgICogd2luMzIvdnM2L2xpYmdzdGljeWRlbXV4LmRzcDoKLQkgIEFkZCBhIHByb2plY3QgZmlsZSBmb3IgaWN5ZGVtdXgKLQotMjAwNi0wNC0yMSAxODowNzoxMCArMDAwMCAgRmFicml6aW8gR2VubmFyaSA8ZmFicml6aW8uZ2VAdGlzY2FsaS5pdD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBXaGVuIHNwbGl0dGluZyBhdWRpbyBjaHVua3MsIHRoZSBibG9jayBhbGlnbm1lbnQgaXMgbm90IHRha2VuIGluIGNvbnNpZGVyYXRpb24sIHNvIHRoZSBzbWFsbGVyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGYWJyaXppbyBHZW5uYXJpIDxmYWJyaXppbyBkb3QgZ2UgYXQgdGlzY2FsaSBkb3QgaXQ+Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCk6Ci0JICBXaGVuIHNwbGl0dGluZyBhdWRpbyBjaHVua3MsIHRoZSBibG9jayBhbGlnbm1lbnQgaXMgbm90IHRha2VuIGluCi0JICBjb25zaWRlcmF0aW9uLCBzbyB0aGUgc21hbGxlciBjaHVua3MgY291bGQgYmUgb2Ygc2l6ZSB3aGljaCBpcwotCSAgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIGFsaWdubWVudC4gRml4ZXMgIzMzNjkwNAotCi0yMDA2LTA0LTIxIDE3OjU5OjAzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogVXNlIHNjYWxlIGZ1bmN0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOiAoZ3N0X2R2MTM5NHNyY19jb252ZXJ0KToKLQkgIFVzZSBzY2FsZSBmdW5jdGlvbnMKLQotMjAwNi0wNC0yMSAxNzoyNzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2R2L2dzdGR2LmM6IEZpeCBidWlsZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHYuYzogKHBsdWdpbl9pbml0KToKLQkgIEZpeCBidWlsZC4KLQotMjAwNi0wNC0yMSAxNzoxNToyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6IEFkZCAnZm9ybWF0JyBwcm9wZXJ0eSB0byBmb3JjZSBxdWVyeWluZyB0byBhIHBhcnRpY3VsYXIgZm9ybWF0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5jOiAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9maW5hbGl6ZSksCi0JICAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9jbGFzc19pbml0KSwgKGdzdF9wcm9ncmVzc19yZXBvcnRfaW5pdCksCi0JICAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9kb19xdWVyeSksIChnc3RfcHJvZ3Jlc3NfcmVwb3J0X3JlcG9ydCksCi0JICAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9wcm9ncmVzc19yZXBvcnRfZ2V0X3Byb3BlcnR5KToKLQkgIEFkZCAnZm9ybWF0JyBwcm9wZXJ0eSB0byBmb3JjZSBxdWVyeWluZyB0byBhIHBhcnRpY3VsYXIgZm9ybWF0LgotCi0yMDA2LTA0LTIxIDE1OjUwOjI4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGV4dC9kdi9nc3Rkdi5jIChwbHVnaW5faW5pdCk6IGxpYmR2IGlzIGEgbWFyZ2luYWwgZGVjb2RlciwgYXQgYmVzdCwgb24gYmlnIGVuZGlhbiBzeXN0ZW1zLiBEcm9wIGl0cyByYW5rIGluIHRoYXQgY2FzZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA0LTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBleHQvZHYvZ3N0ZHYuYyAocGx1Z2luX2luaXQpOiBsaWJkdiBpcyBhIG1hcmdpbmFsIGRlY29kZXIsIGF0Ci0JICBiZXN0LCBvbiBiaWcgZW5kaWFuIHN5c3RlbXMuIERyb3AgaXRzIHJhbmsgaW4gdGhhdCBjYXNlLiBPVE9IIG9uCi0JICB4ODYgaXQncyBxdWl0ZSBmaW5lLiBTZWUgY2hhbmdlcyBmcm9tIHRvZGF5IGluIGdzdC1mZm1wZWcgYXMgd2VsbC4KLQotMjAwNi0wNC0yMSAwOToyNzoxMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBBZGQgaWN5ZGVtdXgsIGFuZCB0ZXN0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9pY3lkZW11eC9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmM6IChnc3RfaWN5ZGVtdXhfZ2V0X3R5cGUpLAotCSAgKGdzdF9pY3lkZW11eF9iYXNlX2luaXQpLCAoZ3N0X2ljeWRlbXV4X2NsYXNzX2luaXQpLAotCSAgKGdzdF9pY3lkZW11eF9yZXNldCksIChnc3RfaWN5ZGVtdXhfaW5pdCksCi0JICAoZ3N0X2ljeWRlbXV4X3Npbmtfc2V0Y2FwcyksIChnc3RfaWN5ZGVtdXhfZGlzcG9zZSksCi0JICAoZ3N0X2ljeWRlbXV4X2FkZF9zcmNwYWQpLCAoZ3N0X2ljeWRlbXV4X3JlbW92ZV9zcmNwYWQpLAotCSAgKHVuaWNvZGlmeSksIChnc3RfaWN5ZGVtdXhfdW5pY29kaWZ5KSwKLQkgIChnc3RfaWN5ZGVtdXhfcGFyc2VfYW5kX3NlbmRfdGFncyksCi0JICAoZ3N0X2ljeWRlbXV4X3R5cGVmaW5kX29yX2ZvcndhcmQpLCAoZ3N0X2ljeWRlbXV4X2FkZF9tZXRhKSwKLQkgIChnc3RfaWN5ZGVtdXhfY2hhaW4pLCAoZ3N0X2ljeWRlbXV4X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X2ljeWRlbXV4X3NlbmRfdGFnX2V2ZW50KSwgKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4Lmg6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jOiAodHlwZWZpbmRfc3VjY2VlZCksCi0JICAocGx1Z2luX2luaXQpLCAoaWN5ZGVtdXhfZm91bmRfcGFkKSwgKGNyZWF0ZV9pY3lkZW11eCksCi0JICAoY2xlYW51cF9pY3lkZW11eCksIChwdXNoX2RhdGEpLCAoR1NUX1NUQVJUX1RFU1QpLAotCSAgKGljeWRlbXV4X3N1aXRlKSwgKG1haW4pOgotCSAgQWRkIGljeWRlbXV4LCBhbmQgdGVzdHMuCi0KLTIwMDYtMDQtMjAgMTc6NDg6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogUG9zdCBTRUdNRU5UX0RPTkUgbWVzc2FnZSBpbiBUSU1FIGZvcm1hdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19kZWNfbG9vcCk6Ci0JICBQb3N0IFNFR01FTlRfRE9ORSBtZXNzYWdlIGluIFRJTUUgZm9ybWF0LgotCi0yMDA2LTA0LTIwIDE3OjI5OjU2ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIEFkZGVkIGEgY291cGxlIG9mIGlmZGVmcyB0byBtYWtlIGl0IGNvbXBpbGUgd2l0aCBvdGhlciBrZXJuZWxzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBZGRlZCBhIGNvdXBsZSBvZiBpZmRlZnMgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggb3RoZXIga2VybmVscy4KLQotMjAwNi0wNC0yMCAxNjozMzo1NSArMDAwMCAgRmFicml6aW8gR2VubmFyaSA8ZmFicml6aW8uZ2VAdGlzY2FsaS5pdD4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiBGaXggaW5kZXggY3JlYXRpb24gd2hlbiB3ZSBoYXZlIHRvIHNjYW4gdGhlIGZpbGUgdG8gY3JlYXRlIGFuIGluZGV4LiBUaGVyZSBtYXkgYmUgb3RoZXIgdHlwZXMgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBGYWJyaXppbyBHZW5uYXJpICA8ZmFicml6aW8gZG90IGdlIGF0IHRpc2NhbGkgZG90IGl0PgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BlZWtfdGFnKSwKLQkgIChnc3RfYXZpX2RlbXV4X25leHRfZGF0YV9idWZmZXIpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fc2Nhbik6Ci0JICBGaXggaW5kZXggY3JlYXRpb24gd2hlbiB3ZSBoYXZlIHRvIHNjYW4gdGhlIGZpbGUgdG8gY3JlYXRlCi0JICBhbiBpbmRleC4gVGhlcmUgbWF5IGJlIG90aGVyIHR5cGVzIG9mIFJJRkYgJ0xJU1QnIGNodW5rcyB0aGFuCi0JICAnbW92aScgYW5kIHdlIG5lZWQgdG8gc2tpcCB0aGVtIHByb3Blcmx5IGFzIHdlbGwgb3Igd2UnbGwgZW5kIHVwCi0JICByZWFkaW5nIGdhcmJhZ2UgKCMzMzY4ODkpLiBTb21lIG90aGVyIGNvc21ldGljIGNoYW5nZXMuCi0KLTIwMDYtMDQtMjAgMTQ6MjE6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogQWRkIHN1cHBvcnQgZm9yIHNlZ21lbnQgc2Vla3MgKGZpeGVzICMzMzgyOTApLiBBbHNvIGRlbW90ZSBzb21lIHJlY3VycmluZyBkZWJ1ZyBtZXNzYWdlIGZyb20gRC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19sb29wKSwKLQkgIChnc3RfZmxhY19kZWNfaGFuZGxlX3NlZWtfZXZlbnQpOgotCSAgQWRkIHN1cHBvcnQgZm9yIHNlZ21lbnQgc2Vla3MgKGZpeGVzICMzMzgyOTApLiBBbHNvIGRlbW90ZQotCSAgc29tZSByZWN1cnJpbmcgZGVidWcgbWVzc2FnZSBmcm9tIERFQlVHIHRvIExPRyBsZXZlbC4KLQotMjAwNi0wNC0yMCAxMzoyMzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thLzogU2V0IERJU0NPTlQgZmxhZyBvbiBmaXJzdCBidWZmZXIgYWZ0ZXIgYSBkaXNjb250aW51aXR5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pLAotCSAgKGdzdF9tYXRyb3NrYWRlbXV4X2RvX2luZGV4X3NlZWspLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2spOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBTZXQgRElTQ09OVCBmbGFnIG9uIGZpcnN0IGJ1ZmZlciBhZnRlciBhIGRpc2NvbnRpbnVpdHkuCi0JICBGaXggbmV3c2VnbWVudCBldmVudHMgc2VudCB3aGVuIHNlZWtpbmcgYW5kIGhvbm91ciBLRVlfVU5JVAotCSAgc2VlayBmbGFnLiBDcmVhdGUgcGFkIHdpdGggYm9ndXMgY2FwcyBpZiB3ZSBkb24ndCByZWNvZ25pc2UKLQkgIHRoZSBzdHJlYW0gY29kZWMgaWQuCi0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgRml4IEdPYmplY3QgbWFjcm9zLgotCi0yMDA2LTA0LTIwIDExOjAwOjE2ICswMDAwICBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogSGFuZGxlIGVuZCBvZiBzZWdtZW50IHByb3Blcmx5IHdoZW4gc2V0OyBkb24ndCBkZWFkLWxvY2sgd2hlbiBwb3N0aW5nIHN0YXJ0IG9mIHNlZ21lbnQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IE1hcmsgTmF1d2VsYWVydHMgIDxtYW5hdXcgYXQgc2t5bmV0IGRvdCBiZT4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50KSwgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wKToKLQkgIEhhbmRsZSBlbmQgb2Ygc2VnbWVudCBwcm9wZXJseSB3aGVuIHNldDsgZG9uJ3QgZGVhZC1sb2NrIHdoZW4KLQkgIHBvc3Rpbmcgc3RhcnQgb2Ygc2VnbWVudCBtZXNzYWdlIHdoZW4gZG9pbmcgYSBzZWdtZW50IHNlZWsuCi0JICBGaXhlcyAjMzM4ODEwLgotCi0yMDA2LTA0LTIwIDA5OjQ4OjA1ICswMDAwICBqXiA8akBib290bGFiLm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBOZXZlciB0cmVhdCB2aWRlbyBzdHJlYW1zIGFzIGFuIGF1ZGlvIHN0cmVhbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IGpeIDxqIGF0IGJvb3RsYWIgZG90IG9yZz4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkgIChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgTmV2ZXIgdHJlYXQgdmlkZW8gc3RyZWFtcyBhcyBhbiBhdWRpbyBzdHJlYW0uCi0JICBBZGQgcXRkcncgbWltZSB0eXBlLgotCSAgRml4ZXMgIzMzOTA0MQotCi0yMDA2LTA0LTIwIDA5OjExOjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogTWFrZSBtcGVnMiBhYWMgYXVkaW8gd29yazogY3JlYXRlIGFydGlmaWNpYWwgcHJpdmF0ZSBjb2RlYyBkYXRhIGNodW5rIHdoaWNoIGZhYWQyIHNlZW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hdWRpb19jYXBzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGx1Z2luX2luaXQpOgotCSAgTWFrZSBtcGVnMiBhYWMgYXVkaW8gd29yazogY3JlYXRlIGFydGlmaWNpYWwgcHJpdmF0ZSBjb2RlYyBkYXRhCi0JICBjaHVuayB3aGljaCBmYWFkMiBzZWVtcyB0byByZXF1aXJlLCBqdXN0IGFzIHdlIGRvIGZvciBtcGVnNCBhYWMuCi0JICBBbHNvIGNhbGwgZ3N0X3JpZmZfaW5pdCgpLiBQYXJ0aWFsbHkgZml4ZXMgIzMzODc2Ny4KLQotMjAwNi0wNC0xOSAxNToxNjozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3dhdmVuYy9nc3R3YXZlbmMuKjogU2V0IGNhcHMgb24gZmlyc3Qgb3V0Z29pbmcgYnVmZmVyLCBzbyB0aGF0IGl0IGRvZXNuJ3QgZXJyb3Igb3V0IGltbWVkaWF0ZWx5IHdpdGggYSBub24tbmVnb3RpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2ZW5jX2NsYXNzX2luaXQpLCAoZ3N0X3dhdmVuY19pbml0KSwKLQkgIChnc3Rfd2F2ZW5jX2NyZWF0ZV9oZWFkZXJfYnVmKSwgKGdzdF93YXZlbmNfcHVzaF9oZWFkZXIpLAotCSAgKGdzdF93YXZlbmNfc2lua19zZXRjYXBzKSwgKGdldF9pZF9mcm9tX25hbWUpLCAoZ3N0X3dhdmVuY19ldmVudCksCi0JICAoZ3N0X3dhdmVuY19jaGFpbiksIChnc3Rfd2F2ZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmg6Ci0JICBTZXQgY2FwcyBvbiBmaXJzdCBvdXRnb2luZyBidWZmZXIsIHNvIHRoYXQgaXQgZG9lc24ndCBlcnJvciBvdXQKLQkgIGltbWVkaWF0ZWx5IHdpdGggYSBub24tbmVnb3RpYXRlZCBlcnJvciAoIzMzODcxNikuIFJld3JpdGUgYW5kCi0JICBjbGVhbiB1cCBhIGJpdDsgZml4IHNldGNhcHMgZnVuY3Rpb24gdG8gcGFyc2UgdGhpbmdzIHByb3Blcmx5OwotCSAgZml4IHNpbmsgY2FwcyAoOGJpdCBhdWRpbyBpcyB1bnNpZ25lZCBhbmQgZG9lc24ndCBoYXZlIGRlcHRoKTsKLQkgIHVzZSBib2lsZXJwbGF0ZSBtYWNyb3M7IHJlbW92ZSB1bnVzZWQgcHJvcGVydGllcyBzdHVmZi4KLQotMjAwNi0wNC0xOSAwOToyNzowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGb3IgVkJSIGF1ZGlvLCBkb24ndCB0cnkgdG8gY2FsY3VsYXRlIHRoZSBzYW1wbGVzX3Blcl9mcmFtZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRm9yIFZCUiBhdWRpbywgZG9uJ3QgdHJ5IHRvIGNhbGN1bGF0ZSB0aGUgc2FtcGxlc19wZXJfZnJhbWUuCi0JICBGaXhlcyAjMzM4OTM1LgotCi0yMDA2LTA0LTE4IDE4OjE0OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogTGVhdmUgSlBFRyBkZWNvZGluZyB0byBvdXIganBlZ2RlYyBwbHVnaW4uIGdka3BpeGJ1ZmRlYyBjYW5ub3QgaGFuZGxlIE1KUEVHIHN0cmVhbXMgYW4uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkgIExlYXZlIEpQRUcgZGVjb2RpbmcgdG8gb3VyIGpwZWdkZWMgcGx1Z2luLiBnZGtwaXhidWZkZWMgY2Fubm90Ci0JICBoYW5kbGUgTUpQRUcgc3RyZWFtcyBhbmQgbWlnaHQgYmUgYXV0b3BsdWdnZWQgZm9yIHRob3NlIGlmIHRoZQotCSAgdXNlciBkb2Vzbid0IGhhdmUganBlZ2RlYyBpbnN0YWxsZWQgKHJlc3VsdGluZyBpbiBhIGNyeXB0aWMgZXJyb3IKLQkgIG1lc3NhZ2UgYWJvdXQgaHVmZm1hbiB0YWJsZXMpLiBCZXR0ZXIgdG8gZGlzYWJsZSBKUEVHIGRlY29kaW5nIGhlcmUKLQkgIGFuZCBsZXQgdGhlIHVzZXIgZmlndXJlIG91dCB0aGF0IHNoZSBuZWVkcyB0byBpbnN0YWxsIGpwZWdkZWMuCi0KLTIwMDYtMDQtMTggMTg6MDQ6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi4qOiBNYWtlIHdvcmsgd2l0aCBwYWNrZXRpc2VkL2ZyYW1lZCBpbnB1dCAoZS5nLiBwbmctaW4tcXVpY2t0aW1lKS4gVXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3NldGNhcHMpLAotCSAgKGdzdF9nZGtfcGl4YnVmX2NsYXNzX2luaXQpLCAoZ3N0X2dka19waXhidWZfaW5pdCksCi0JICAoZ3N0X2dka19waXhidWZfZmx1c2gpLCAoZ3N0X2dka19waXhidWZfY2hhaW4pOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuaDoKLQkgIE1ha2Ugd29yayB3aXRoIHBhY2tldGlzZWQvZnJhbWVkIGlucHV0IChlLmcuIHBuZy1pbi1xdWlja3RpbWUpLiBVc2UKLQkgIEdTVF9FTEVNRU5UX0VSUk9SIHdoZW4gd2UgcmV0dXJuIEdTVF9GTE9XX0VSUk9SLiBBZGQgc29tZQotCSAgR1NUX0RFQlVHX0ZVTkNQVFIgaGVyZSBhbmQgdGhlcmUuIFVzZSBHU1RfTE9HIGZvciByZWN1cnJpbmcKLQkgIGRlYnVnIG1lc3NhZ2VzLiBGaXggYm9pbGVycGxhdGUgbWFjcm9zLgotCi0yMDA2LTA0LTE4IDE3OjI5OjQyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogTm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgZm9yIEdkay0yLjAgYW55IGxvbmdlciwgd2UgcmVxdWlyZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfZ2V0X2NhcHNsaXN0KSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9zZXRfcHJvcGVydHkpLCAoZ3N0X2dka19waXhidWZfZ2V0X3Byb3BlcnR5KToKLQkgIE5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGZvciBHZGstMi4wIGFueSBsb25nZXIsIHdlIHJlcXVpcmUKLQkgIEdkayAyLjIgb3IgbmV3ZXI7IG1pbm9yIGNsZWFuLXVwcy4KLQotMjAwNi0wNC0xOCAxNzoxNzo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUmV3cml0ZSBhIGJpdDogdXNlIEdzdEJhc2VTaW5rOjpzdGFydCBhbmQgc3RvcCBpbnN0ZWFkIG9mIGEgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uOyB1c2UgR1NUX0VMRU1FTlRfRVJST1IgZm9yIGVycm9yIHJlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzogKGdzdF9zaG91dDJzZW5kX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3Nob3V0MnNlbmRfY2xhc3NfaW5pdCksIChnc3Rfc2hvdXQyc2VuZF9pbml0KSwKLQkgIChzZXRfc2hvdXRfbWV0YWRhdGEpLCAoZ3N0X3Nob3V0MnNlbmRfc2V0X21ldGFkYXRhKSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9ldmVudCksIChnc3Rfc2hvdXQyc2VuZF9zdGFydCksCi0JICAoZ3N0X3Nob3V0MnNlbmRfY29ubmVjdCksIChnc3Rfc2hvdXQyc2VuZF9zdG9wKSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9yZW5kZXIpLCAoZ3N0X3Nob3V0MnNlbmRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9nZXRfcHJvcGVydHkpLCAoZ3N0X3Nob3V0MnNlbmRfc2V0Y2FwcyksCi0JICAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSAgKiBwby9QT1RGSUxFUy5pbjoKLQkgIFJld3JpdGUgYSBiaXQ6IHVzZSBHc3RCYXNlU2luazo6c3RhcnQgYW5kIHN0b3AgaW5zdGVhZCBvZiBhIHN0YXRlCi0JICBjaGFuZ2UgZnVuY3Rpb247IHVzZSBHU1RfRUxFTUVOVF9FUlJPUiBmb3IgZXJyb3IgcmVwb3J0aW5nLCBub3QKLQkgIGdfZXJyb3IoKSBvciBHU1RfRVJST1IoKTsgZG9uJ3QgdW5yZWYgY2FwcyBpbiBzZXRjYXBzIGZ1bmN0aW9uLAotCSAgd2lsbCBjYXVzZSBjcmFzaGVzIG9yIGFzc2VydGlvbiBmYWlsdXJlczsgcmVtb3ZlICh1bnVzZWQpICJzeW5jIgotCSAgcHJvcGVydHksIGJhc2VzaW5rIGFscmVhZHkgaGFzIHN1Y2ggYSBwcm9wZXJ0eTsgbWlzYy4gb3RoZXIKLQkgIG1pbm9yIGZpeGVzIGFuZCBjbGVhbnVwcy4KLQotMjAwNi0wNC0xOCAxNDoxNTozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgQWRkIHRyYW5zbGF0YWJsZSBlcnJvciBtZXNzYWdlIGZvciB3aGVuIHdlIGNhbm5vdCBjb25uZWN0IHRvIHRoZSBzb3VuZCBzZXJ2ZXIsIGFzICJDYW5ub3Qgb3BlbiByZXNvdXJjZSBmb3Igd3JpdGluZyIgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19vcGVuKSwgKGdzdF9lc2RzaW5rX3ByZXBhcmUpOgotCSAgKiBleHQvZXNkL2dzdGVzZC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBwby9QT1RGSUxFUy5pbjoKLQkgIEFkZCB0cmFuc2xhdGFibGUgZXJyb3IgbWVzc2FnZSBmb3Igd2hlbiB3ZSBjYW5ub3QKLQkgIGNvbm5lY3QgdG8gdGhlIHNvdW5kIHNlcnZlciwgYXMgIkNhbm5vdCBvcGVuIHJlc291cmNlCi0JICBmb3Igd3JpdGluZyIgaXNuJ3QgcmVhbGx5IGFuIGFjY2VwdGFibGUgbWVzc2FnZSB0byBzaG93Ci0JICB0byB0aGUgdXNlciBpbiB0aGlzIGNhc2UuCi0KLTIwMDYtMDQtMTggMTM6MzI6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0LWkxOG4tcGx1Z2luLmg6IFJlbW92ZSBib2d1cyBmaWxlIHRoYXQgZG9lc24ndCBiZWxvbmcgaGVyZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdC1pMThuLXBsdWdpbi5oOgotCSAgUmVtb3ZlIGJvZ3VzIGZpbGUgdGhhdCBkb2Vzbid0IGJlbG9uZyBoZXJlLgotCi0yMDA2LTA0LTE3IDE5OjU3OjEwICswMDAwICBQaGlsaXBwZSBWYWxlbWJvaXMgPGxlcGhpbG91c29waGVAdXNlcnMuc2YubmV0PgotCi0JICBleHQvc2hvdXQyL2dzdHNob3V0Mi4qOiBIYW5kbGUgdGFncyBiZWluZyByZWNlaXZlZCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBpcyBlc3RhYmxpc2hlZCBwcm9wZXJseSAoc2VlICMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IFBoaWxpcHBlIFZhbGVtYm9pcwotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiAoZ3N0X3Nob3V0MnNlbmRfaW5pdCksCi0JICAoZ3N0X3Nob3V0MnNlbmRfc2V0X21ldGFkYXRhKSwgKGdzdF9zaG91dDJzZW5kX2V2ZW50KSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9yZW5kZXIpLCAoZ3N0X3Nob3V0MnNlbmRfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L3Nob3V0Mi9nc3RzaG91dDIuaDoKLQkgIEhhbmRsZSB0YWdzIGJlaW5nIHJlY2VpdmVkIGJlZm9yZSB0aGUgY29ubmVjdGlvbiB0bwotCSAgdGhlIHNlcnZlciBpcyBlc3RhYmxpc2hlZCBwcm9wZXJseSAoc2VlICMzMzg2MzYpLgotCi0yMDA2LTA0LTE3IDE5OjQzOjMyICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzoKLQkgIEp1c3QgYWRkZWQgYSBndGstZG9jIGNvbW1lbnQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEp1c3QgYWRkZWQgYSBndGstZG9jIGNvbW1lbnQuCi0KLTIwMDYtMDQtMTcgMTk6MTI6MzYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IERvbid0IGNyYXNoIGluIGNhc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBmYWlsczogZG9uJ3Qgc2V0IHBvaW50ZXIgdG8gTlVMTCBieSBhc3NpZ25pbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChnc3Rfc2hvdXQyc2VuZF9yZW5kZXIpOgotCSAgRG9uJ3QgY3Jhc2ggaW4gY2FzZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGZhaWxzOgotCSAgZG9uJ3Qgc2V0IHBvaW50ZXIgdG8gTlVMTCBieSBhc3NpZ25pbmcgRkFMU0U7IGVycm9yIG91dAotCSAgcHJvcGVybHkgYnkgdXNpbmcgR1NUX0VMRU1FTlRfRVJST1IgYW5kIHJldHVybmluZwotCSAgR1NUX0ZMT1dfRVJST1IgKGZpeGVzICMzMzg2MzYpLiBMYXN0bHksIGZyZWUgY29ubmVjdGlvbgotCSAgYmVmb3JlIHJlc2V0dGluZyB0aGUgcG9pbnRlci4KLQotMjAwNi0wNC0xNyAxMDowMTo1MSArMDAwMCAgQWxleCBMYW5jYXN0ZXIgPGFsZXhsYW5AZmVkb3JhcHJvamVjdC5vcmc+Ci0KLQkgIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6IChGaXhlcyAjMzM4NzEzKQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN0YWdzLmM6Ci0JICBSZWNvZ25pc2UgVENPIChHZW5yZSkgdGFncyBpbiBJRDN2Mi4yLiBQYXRjaCBieSBBbGV4IExhbmNhc3RlcgotCSAgKEZpeGVzICMzMzg3MTMpCi0KLTIwMDYtMDQtMTMgMjE6NDU6NTcgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgRml4ZWQgc29tZSBtZW1vcnkgbGVha3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeGVkIHNvbWUgbWVtb3J5IGxlYWtzLgotCi0yMDA2LTA0LTEzIDA5OjE1OjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBwY211cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuaDoKLQkgIHJldmVydGluZyBydHAgcGF0Y2hlcyB0byBmaXggZnJlZXplIGJyZWFrIG9uIC1iYXNlIGFzIGV4cGxhaW5lZCBvbiB0aGUgbGlzdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZlcnRpbmcgcnRwIHBhdGNoZXMgdG8gZml4IGZyZWV6ZSBicmVhayBvbiAtYmFzZSBhcyBleHBsYWluZWQgb24gdGhlIGxpc3QKLQotMjAwNi0wNC0xMyAwOTowMToxNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3J0cC86IEZpeCBHT2JqZWN0IG1hY3Jvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5Lmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuaDoKLQkgIEZpeCBHT2JqZWN0IG1hY3Jvcy4KLQotMjAwNi0wNC0xMyAwMzo0Mjo1MSArMDAwMCAgUGhpbGlwcGUgS2FsYWYgPHBoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51az4KLQotCSAgZ3N0L3J0cC86IFBvcnRlZCBtdWxhdyBhbmQgYWxhdyBwYXlsb2FkZXJzIHRvIHVzZSBuZXcgYmFzZSBjbGFzcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA0LTEyIFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBwY211cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5oOgotCSAgUG9ydGVkIG11bGF3IGFuZCBhbGF3IHBheWxvYWRlcnMgdG8gdXNlIG5ldyBiYXNlIGNsYXNzCi0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaWxiY3BheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGlsYmNwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuaDoKLQkgIEFkZGVkIG5ldyBpTEJDIHBheWxvYWRlci9kZXBheWxvYWRlci4gUGF5bG9hZGVyIHVzZXMgbmV3IGF1ZGlvIHBheWxvYWQgYmFzZQotCSAgY2xhc3MuCi0KLTIwMDYtMDQtMTIgMjE6NTc6MDIgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgRml4IHRvIHdvcmsgaW4gcmVhZCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggdG8gd29yayBpbiByZWFkIG1vZGUuCi0KLTIwMDYtMDQtMTIgMDk6NDI6MTAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiBTb21lIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9nZXRfY2Fwc2xpc3QpLCAoZ3N0X2dka19waXhidWZfc2lua19nZXRjYXBzKSwKLQkgIChnc3RfZ2RrX3BpeGJ1Zl9jbGFzc19pbml0KSwgKGdzdF9nZGtfcGl4YnVmX2luaXQpLAotCSAgKGdzdF9nZGtfcGl4YnVmX2ZsdXNoKSwgKGdzdF9nZGtfcGl4YnVmX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9nZGtfcGl4YnVmX2NoYWluKToKLQkgIFNvbWUgY2xlYW51cHMuCi0JICBBZGRlZCBSR0JBIGFzIGEgcG9zc2libGUgb3V0cHV0IGZvcm1hdC4KLQkgIENvcnJlY3RseSBmcmVlIHRoZSBzdXBwb3J0ZWQgbWltZXR5cGVzLgotCSAgZGVwcmVjYXRlIHNpbGVudCBhcmcsIGl0J3Mgbm90IHVzZWQuCi0JICBSZXR1cm4gcmVzdWx0IGZyb20gX2FsbG9jX2J1ZmZlciB0byBwZWVyLgotCi0yMDA2LTA0LTExIDE4OjAzOjM2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOiBEb24ndCBsZWFrIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKCkgYnkgb3ZlcndyaXRpbmcgR1NUX0JVRkZFUl9NQUxMT0MuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOiAoZ3N0X3J0cF9tcDR2X2RlcGF5X3Byb2Nlc3MpOgotCSAgRG9uJ3QgbGVhayBtZW1vcnkgYWxsb2NhdGVkIGJ5IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYygpIGJ5Ci0JICBvdmVyd3JpdGluZyBHU1RfQlVGRkVSX01BTExPQ0RBVEEuCi0KLTIwMDYtMDQtMTEgMTU6Mjc6MzEgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgZml4IHZlcnNpb24gbnVtYmVyIG1hY3JvCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCB2ZXJzaW9uIG51bWJlciBtYWNybwotCi0yMDA2LTA0LTExIDA5OjM1OjQ1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvbGlicG5nL2dzdHBuZ2RlYy4qOiBIYW5kbGUgbW9yZSB0aGFuIG9uZSBmcmFtZSBpZiB0aGUgY29udGVudCBpcyBmcmFtZWQsIGxpa2Ugd2l0aCBwbmctaW4tcXVpY2t0aW1lICgjMzMxOTE3KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY19pbml0KSwKLQkgICh1c2VyX2VuZHJvd19jYWxsYmFjayksICh1c2VyX2VuZF9jYWxsYmFjayksCi0JICAoZ3N0X3BuZ2RlY19jYXBzX2NyZWF0ZV9hbmRfc2V0KSwgKGdzdF9wbmdkZWNfY2hhaW4pLAotCSAgKGdzdF9wbmdkZWNfc2lua19zZXRjYXBzKSwgKGdzdF9wbmdkZWNfc2lua19ldmVudCksCi0JICAoZ3N0X3BuZ2RlY19saWJwbmdfY2xlYXIpLCAoZ3N0X3BuZ2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5oOgotCSAgSGFuZGxlIG1vcmUgdGhhbiBvbmUgZnJhbWUgaWYgdGhlIGNvbnRlbnQgaXMgZnJhbWVkLAotCSAgbGlrZSB3aXRoIHBuZy1pbi1xdWlja3RpbWUgKCMzMzE5MTcpLgotCi0yMDA2LTA0LTEwIDE5OjU1OjMxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgc3lzL29zcy86IC0gdGhlIHVzZXItdmlzaWJsZSBlcnJvciBzdHJpbmdzIHdlcmUgaW4gdGhlIHdyb25nIGNhdGVnb3J5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9NYWtlZmlsZS5hbToKLQkgICogc3lzL29zcy9jb21tb24uaDoKLQkgICogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3NzX3NpbmtfaW5pdCksIChnc3Rfb3NzX3Npbmtfb3BlbiksCi0JICAoZ3N0X29zc19zaW5rX3ByZXBhcmUpLCAoZ3N0X29zc19zaW5rX3VucHJlcGFyZSk6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3NzX3NyY19wcmVwYXJlKSwKLQkgIChnc3Rfb3NzX3NyY191bnByZXBhcmUpOgotCSAgLSB0aGUgdXNlci12aXNpYmxlIGVycm9yIHN0cmluZ3Mgd2VyZSBpbiB0aGUgd3JvbmcgY2F0ZWdvcnkKLQkgIC0gYW5kIHRoZSBtZXNzYWdlcyB3ZXJlIG5vdCBtYXJrZWQgZm9yIHRyYW5zbGF0aW9uCi0JICAtIHdoaWNoIGlzIGFjdHVhbGx5IGEgZ29vZCB0aGluZywgYmVjYXVzZSB0aGV5IHdlcmUgZXhhY3RseQotCSAgdGhlIGtpbmQgb2YgbWVzc2FnZSB5b3Ugd291bGQgbmV2ZXIgd2FudCBhbnlvbmUgdG8gc2VlCi0JICAtIHRoZSBtYWNyb3Mgd2VyZSB1c2luZyB2YXJpYWJsZXMgdGhhdCBkaWRuJ3QgZXhpc3QgaW4gdGhlIG1hY3JvCi0JICBhcmd1bWVudHMKLQkgIC0gYW5kIHRoZXkgd2VyZSBvYnZpb3VzbHkgY29waWVkIGZyb20gZWFjaCBvdGhlciBhbmQgdGhlbiBtb2RpZmllZAotCSAgLSBzbyBhIGNvbW1vbiBoZWFkZXIgbWFrZXMgc2Vuc2UKLQotMjAwNi0wNC0xMCAxNzoxNjowOSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGaXggcGFyc2luZyBvZiBuZXdlciBzdHNkIGNodW5rcyBhZ2Fpbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRml4IHBhcnNpbmcgb2YgbmV3ZXIgc3RzZCBjaHVua3MgYWdhaW4uCi0KLTIwMDYtMDQtMTAgMTY6MDk6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogRG9uJ3QgdHJ5IHRvIG1vZGlmeSByZWFkLW9ubHkgZGF0YS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX3NpbnQpOgotCSAgRG9uJ3QgdHJ5IHRvIG1vZGlmeSByZWFkLW9ubHkgZGF0YS4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2spOgotCSAgRml4IGNvbW1lbnQgKHdvbid0IGNyYXNoIGFueSBsb25nZXIgbm93KS4KLQotMjAwNi0wNC0xMCAxNTo0ODo1NSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6IFVzZSBjb3BpZXMgb2YgaGVhZGVyIGJ1ZmZlcnMgZm9yIGNhcHMgdG8gYXZvaWQgY2lyY3VsYXIgcmVmY291bnRpbmcgcHJvYmxlbXMgKGFzIGluIHRoZW9yYWQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6IChnc3RfY21tbF9lbmNfc2V0X2hlYWRlcl9vbl9jYXBzKToKLQkgIFVzZSBjb3BpZXMgb2YgaGVhZGVyIGJ1ZmZlcnMgZm9yIGNhcHMgdG8gYXZvaWQgY2lyY3VsYXIgcmVmY291bnRpbmcKLQkgIHByb2JsZW1zIChhcyBpbiB0aGVvcmFkZWMsIHZvcmJpc2RlYykuCi0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxkZWMuYzogKEdTVF9TVEFSVF9URVNUKToKLQkgIEZpeCBhIHR5cG8gaW4gdGVzdCB0aGF0IG1lYW50IGl0IHdhcyB0ZXN0aW5nIHRoZSB3cm9uZyB0aGluZy4KLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGVuYy5jOiAoY2hlY2tfaGVhZGVycyk6Ci0JICBGaXggcmVmY291bnQgY2hlY2tzIG5vdyB0aGF0IHdlIHVzZSBidWZmZXItY29waWVzIGZvciBjYXBzLgotCi0yMDA2LTA0LTEwIDE1OjQzOjU0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogVXNlIHN0YXRpYyBwYWQgdGVtcGxhdGVzIHdpdGggQU5ZIGNhcHMgZm9yIGF1ZGlvIGFuZCB2aWRlbyBzb3VyY2UgcGFkcyBhbmQgZ2V0IHJpZCBvZiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9iYXNlX2luaXQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMpLCAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGx1Z2luX2luaXQpOgotCSAgVXNlIHN0YXRpYyBwYWQgdGVtcGxhdGVzIHdpdGggQU5ZIGNhcHMgZm9yIGF1ZGlvIGFuZCB2aWRlbwotCSAgc291cmNlIHBhZHMgYW5kIGdldCByaWQgb2YgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgKGFuZCBwYXJ0aWFsbHkKLQkgIGJyb2tlbikgY29kZSBmb3IgdGhlIHRlbXBsYXRlIGNhcHMuIENsZWFuIHVwIGNhcHMgZmluZGluZwotCSAgZnVuY3Rpb25zLiBGaXhlcyBwbGF5YmFjayBvZiBhdWRpbyBmaWxlcy9zdHJlYW1zIHRoYXQgZG8gbm90Ci0JICBjb250YWluIHRoZSBzYW1wbGUgcmF0ZSBhbmQvb3IgbnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBhdWRpbwotCSAgY29udGV4dCAoaGFwcGVucyBhIGxvdCB3aXRoIHZvcmJpcy9tcDMgLm1rYSBmaWxlcyBpdCBzZWVtcykuCi0JICBGaXhlcyAjMzM3MTgzLgotCSAgQWxzbyBhZGQgbXlzZWxmIHRvIGNvcHlyaWdodCBob2xkZXJzLgotCi0yMDA2LTA0LTEwIDE1OjI5OjIxICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGV4dC9hbm5vZGV4L2dzdGNtbWx1dGlscy5jOiBVc2UgZ19saXN0X2RlbGV0ZV9saW5rICgpIGluc3RlYWQgb2YgZ19saXN0X3JlbW92ZV9saW5rICgpIHNvIHRoYXQgd2UgZnJlZSB0aGUgbGluayBhcyB3ZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWx1dGlscy5jOiAoZ3N0X2NtbWxfdHJhY2tfbGlzdF9kZWxfY2xpcCk6Ci0JICBVc2UgZ19saXN0X2RlbGV0ZV9saW5rICgpIGluc3RlYWQgb2YgZ19saXN0X3JlbW92ZV9saW5rICgpIHNvIHRoYXQKLQkgIHdlIGZyZWUgdGhlIGxpbmsgYXMgd2VsbCBhcyB0aGUgY29udGFpbmVkIGRhdGEuCi0KLTIwMDYtMDQtMTAgMTQ6MjA6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRml4IGZyYW1lcmF0ZSBjYWxjdWxhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9hZGRfc3RyZWFtKSwKLQkgIChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRml4IGZyYW1lcmF0ZSBjYWxjdWxhdGlvbi4KLQotMjAwNi0wNC0xMCAxMDoxMDo1NSArMDAwMCAgUnlhbiBMb3J0aWUgKGRlc3J0KSA8ZGVzcnRAZGVzdHIuY2E+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogRml4IHNvbWUgY3Jhc2hlcnMgd2l0aCBlbXB0eSBjaHVua3MuIChGaXhlcyAjMzM3NzQ5KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogUnlhbiBMb3J0aWUgKGRlc3J0KSA8ZGVzcnQgYXQgZGVzdHIgZG90IGNhPgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1cGVyaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwgKGdzdF9hdmlfZGVtdXhfcGFyc2VfaW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcik6Ci0JICBGaXggc29tZSBjcmFzaGVycyB3aXRoIGVtcHR5IGNodW5rcy4gKEZpeGVzICMzMzc3NDkpCi0KLTIwMDYtMDQtMTAgMDg6MzE6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogZm9yY2UgbW9ubyA4MDAwIEh6IG9uIEFNUiBzYW1wbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBmb3JjZSBtb25vIDgwMDAgSHogb24gQU1SIHNhbXBsZXMuCi0KLTIwMDYtMDQtMDkgMTg6MzA6NTEgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgZXh0L25lb24vZ3N0bmVvbmh0dHBzcmMuYzogcmVtb3ZlIGF0b2xsIGJ5IHVzaW5nIGdfYXNjaWlfc3RydG91bGwgKGF0b2xsIGlzIG5vdCBzdXBwb3J0ZWQgb24gV0lOMzIpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L25lb24vZ3N0bmVvbmh0dHBzcmMuYzogKGdzdF9uZW9uaHR0cF9zcmNfc3RhcnQpOgotCSAgcmVtb3ZlIGF0b2xsIGJ5IHVzaW5nIGdfYXNjaWlfc3RydG91bGwgKGF0b2xsIGlzIG5vdCBzdXBwb3J0ZWQgb24gV0lOMzIpCi0JICAqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIGRvbmUgc29tZSBjbGVhbnMgaW4gc291cmNlcwotCSAgKiB3aW4zMi92czY6Ci0JICBhZGQgcHJvamVjdCBmaWxlcyBmb3IgbmVvbiwgcXRkZW11eAotCi0yMDA2LTA0LTA5IDE3OjMxOjM3ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiB1c2UgR19HSU5UNjRfQ09OU1RBTlQgZm9yIElOVDY0IGNvbnN0YW50cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX3NldF9jYXBzKSwoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICB1c2UgR19HSU5UNjRfQ09OU1RBTlQgZm9yIElOVDY0IGNvbnN0YW50cwotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICBkZWZpbmUgcmludCBmb3IgV0lOMzIgI2RlZmluZSByaW50KHgpIChmbG9vcigoeCkrMC41KSkKLQkgICogd2luMzIvdnM2L2xpYmdzdGF2aS5kc3A6Ci0JICBhZGQgbWlzc2luZyBsaWJyYXJpZXMgZm9yIHRoZSBsaW5rIGFuZCByZW1vdmUgYXZpbXV4LmMgZnJvbQotCSAgdGhlIHByb2plY3QgYXMgaXQgaXNuJ3QgcG9ydGVkIHRvIDAuMTAgeWV0Ci0KLTIwMDYtMDQtMDkgMTQ6MDA6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgd2UgYWN0dWFsbHkgZGlkIHRoZSByaWdodCB0aGluZyBoZXJlIChhbHNvLCBHX0dVSU5UNjRfQ09OU1RBTlQgb25seS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfc2ludCk6Ci0JICBFdmVuIGJldHRlciB3b3VsZCBiZSBpZiB3ZSBhY3R1YWxseSBkaWQgdGhlIHJpZ2h0IHRoaW5nCi0JICBoZXJlIChhbHNvLCBHX0dVSU5UNjRfQ09OU1RBTlQgb25seSBleGlzdHMgc2luY2UgR0xpYi0yLjEwKS4KLQotMjAwNi0wNC0wOSAxMzo1MjowMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiBDYW4ndCBqdXN0IHJlcGxhY2UgMUxMIHdpdGggMUwgaGVyZSBqdXN0IGJlY2F1c2UgTVNWQyBkb2Vzbid0IHN1cHBvcnQgaXQsIGFzIGl0IG1pZ2h0IGxlYWQgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiAoZ3N0X2VibWxfcmVhZF9zaW50KToKLQkgIENhbid0IGp1c3QgcmVwbGFjZSAxTEwgd2l0aCAxTCBoZXJlIGp1c3QgYmVjYXVzZSBNU1ZDIGRvZXNuJ3QKLQkgIHN1cHBvcnQgaXQsIGFzIGl0IG1pZ2h0IGxlYWQgdG8gaW5jb3JyZWN0IHJlc3VsdHMgd2hlbiBkb2luZyB0aGUKLQkgIGJpdHNoaWZ0aW5nIGhlcmUuIFVzaW5nIEdMaWIncyBHX0dVSU5UNjRfQ09OU1RBTlQoKSBtYWNybyB0bwotCSAgZm9yY2UgYSA2NC1iaXQgY29uc3RhbnQgaW4gYSB3YXkgdGhhdCBhbGwgY29tcGlsZXJzIGFyZSBoYXBweSB3aXRoLgotCi0yMDA2LTA0LTA4IDIxOjQ4OjAxICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpeCAjMzM3MzY1IChnX3R5cGVfY2xhc3NfcmVmIDwtPiBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndiZGVjLmM6IChnc3RfYW1yd2JkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmVuYy5jOiAoZ3N0X2FtcndiZW5jX2NsYXNzX2luaXQpOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JwYXJzZS5jOiAoZ3N0X2FtcndicGFyc2VfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hcnRzL2dzdF9hcnRzLmM6IChnc3RfYXJ0c19jbGFzc19pbml0KToKLQkgICogZXh0L2FydHNkL2dzdGFydHNkc2luay5jOiAoZ3N0X2FydHNkc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuYzogKGdzdF9hZnNpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzogKGdzdF9hZnNyY19jbGFzc19pbml0KToKLQkgICogZXh0L2F1ZGlvcmVzYW1wbGUvZ3N0YXVkaW9yZXNhbXBsZS5jOgotCSAgKiBleHQvY2RhdWRpby9nc3RjZGF1ZGlvLmM6IChnc3RfY2RhdWRpb19jbGFzc19pbml0KToKLQkgICogZXh0L2RpcmVjdGZiL2RmYnZpZGVvc2luay5jOiAoZ3N0X2RmYnZpZGVvc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGRlYy5jOiAoZ3N0X2RpdnhkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9oZXJtZXMvZ3N0aGVybWVzY29sb3JzcGFjZS5jOgotCSAgKGdzdF9oZXJtZXNfY29sb3JzcGFjZV9jbGFzc19pbml0KToKLQkgICogZXh0L2l2b3JiaXMvdm9yYmlzZmlsZS5jOiAoZ3N0X2l2b3JiaXNmaWxlX2NsYXNzX2luaXQpOgotCSAgKiBleHQvamFjay9nc3RqYWNrLmM6IChnc3RfamFja19jbGFzc19pbml0KToKLQkgICogZXh0L2phY2svZ3N0amFja2Jpbi5jOiAoZ3N0X2phY2tfYmluX2NsYXNzX2luaXQpOgotCSAgKiBleHQvbGNzL2dzdGNvbG9yc3BhY2UuYzogKGdzdF9jb2xvcnNwYWNlX2NsYXNzX2luaXQpOgotCSAgKiBleHQvbGliZmFtZS9nc3RsaWJmYW1lLmM6IChnc3RfZmFtZWVuY19jbGFzc19pbml0KToKLQkgICogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOiAoZ3N0X211c2ljYnJhaW56X2NsYXNzX2luaXQpOgotCSAgKiBleHQvbmFzL25hc3NpbmsuYzogKGdzdF9uYXNzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvc2hvdXQvZ3N0c2hvdXQuYzogKGdzdF9pY2VjYXN0c2VuZF9jbGFzc19pbml0KToKLQkgICogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90LmM6IChnc3Rfc25hcHNob3RfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9zbmRmaWxlL2dzdHNmLmM6IChnc3Rfc2ZfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6IChnc3Rfc3dmZGVjYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9zd2ZkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC90YXJraW4vZ3N0dGFya2luZGVjLmM6IChnc3RfdGFya2luZGVjX2NsYXNzX2luaXQpOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmVuYy5jOiAoZ3N0X3RhcmtpbmVuY19jbGFzc19pbml0KToKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhc3RyaXAuYzogKGdzdF9jZHhhc3RyaXBfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9jaGFydC9nc3RjaGFydC5jOiAoZ3N0X2NoYXJ0X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvY29sb3JzcGFjZS9nc3Rjb2xvcnNwYWNlLmM6IChnc3RfY29sb3JzcGFjZV9jbGFzc19pbml0KToKLQkgICogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6IChnc3RfZGVpbnRlcmxhY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9mZXN0aXZhbC9nc3RmZXN0aXZhbC5jOiAoZ3N0X2Zlc3RpdmFsX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGJwd3NpbmMuYzogKGdzdF9icHdzaW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZmlsdGVyL2dzdGlpci5jOiAoZ3N0X2lpcl9jbGFzc19pbml0KToKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6IChnc3RfbHB3c2luY19jbGFzc19pbml0KToKLQkgICogZ3N0L2xpYnJmYi9nc3RyZmJzcmMuYzogKGdzdF9yZmJzcmNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9taXhtYXRyaXgvbWl4bWF0cml4LmM6IChnc3RfbWl4bWF0cml4X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbXBlZzFzeXMvZ3N0bXBlZzFzeXN0ZW1lbmNvZGUuYzoKLQkgIChnc3Rfc3lzdGVtX2VuY29kZV9jbGFzc19pbml0KToKLQkgICogZ3N0L21wZWcxdmlkZW9wYXJzZS9nc3RtcDF2aWRlb3BhcnNlLmM6Ci0JICAoZ3N0X21wMXZpZGVvcGFyc2VfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tcGVnMnN1Yi9nc3RtcGVnMnN1YnQuYzogKGdzdF9tcGVnMnN1YnRfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tcGVnYXVkaW9wYXJzZS9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgKGdzdF9tcDNwYXJzZV9jbGFzc19pbml0KToKLQkgICogZ3N0L292ZXJsYXkvZ3N0b3ZlcmxheS5jOiAoZ3N0X292ZXJsYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9wYXNzdGhyb3VnaC9nc3RwYXNzdGhyb3VnaC5jOiAocGFzc3Rocm91Z2hfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9wbGF5b25kZW1hbmQvZ3N0cGxheW9uZGVtYW5kLmM6IChwbGF5X29uX2RlbWFuZF9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdkZWMuYzogKGdzdF9ydGpwZWdkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydGpwZWcvZ3N0cnRqcGVnZW5jLmM6IChnc3RfcnRqcGVnZW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3Qvc21vb3RoL2dzdHNtb290aC5jOiAoZ3N0X3Ntb290aF9jbGFzc19pbml0KToKLQkgICogZ3N0L3Ntb290aHdhdmUvZ3N0c21vb3Rod2F2ZS5jOiAoZ3N0X3Ntb290aHdhdmVfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jOiAoZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQpOgotCSAgKiBnc3Qvc3RlcmVvL2dzdHN0ZXJlby5jOiAoZ3N0X3N0ZXJlb19jbGFzc19pbml0KToKLQkgICogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC90dGEvZ3N0dHRhZGVjLmM6IChnc3RfdHRhX2RlY19jbGFzc19pbml0KToKLQkgICogZ3N0L3R0YS9nc3R0dGFwYXJzZS5jOiAoZ3N0X3R0YV9wYXJzZV9jbGFzc19pbml0KToKLQkgICogZ3N0L3ZiaWRlYy9nc3R2YmlkZWMuYzogKGdzdF92YmlkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6IChnc3RfdmlkZW9fY3JvcF9jbGFzc19pbml0KToKLQkgICogZ3N0L3ZpcnR1YWxkdWIvZ3N0eHNoYXJwZW4uYzogKGdzdF94c2hhcnBlbl9jbGFzc19pbml0KToKLQkgICogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzogKGdzdF95NG1lbmNvZGVfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9jZHJvbS9nc3RjZHBsYXllci5jOiAoY2RwbGF5ZXJfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuYzoKLQkgIChnc3RfZGlyZWN0c291bmRzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvZHhyMy9keHIzYXVkaW9zaW5rLmM6IChkeHIzYXVkaW9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvZHhyMy9keHIzc3B1c2luay5jOiAoZHhyM3NwdXNpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuYzogKGR4cjN2aWRlb3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9xY2FtL2dzdHFjYW1zcmMuYzogKGdzdF9xY2Ftc3JjX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmM6Ci0JICAoZ3N0X3Y0bDJfY29sb3JfYmFsYW5jZV9jaGFubmVsX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzogKGdzdF92NGwyX3R1bmVyX2NoYW5uZWxfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3Y0bDJfdHVuZXJfbm9ybV9jbGFzc19pbml0KToKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2VzcmMuYzogKGdzdF94aW1hZ2VzcmNfY2xhc3NfaW5pdCk6Ci0JICBGaXggIzMzNzM2NSAoZ190eXBlX2NsYXNzX3JlZiA8LT4gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50KQotCi0yMDA2LTA0LTA4IDIxOjIxOjQ1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpeCAjMzM3MzY1IChnX3R5cGVfY2xhc3NfcmVmIDwtPiBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2FhbGliL2dzdGFhc2luay5jOiAoZ3N0X2Fhc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOiAoZ3N0X2ZsYWNfdGFnX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKGdzdF9nZGtfcGl4YnVmX2NsYXNzX2luaXQpOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6IChnc3RfanBlZ2VuY19jbGFzc19pbml0KToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VkZWMuYzogKGdzdF9zbW9rZWRlY19jbGFzc19pbml0KToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzogKGdzdF9zbW9rZWVuY19jbGFzc19pbml0KToKLQkgICogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzogKGdzdF9jYWNhc2lua19jbGFzc19pbml0KToKLQkgICogZXh0L2xpYm1uZy9nc3RtbmdkZWMuYzogKGdzdF9tbmdkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmM6IChnc3RfbW5nZW5jX2NsYXNzX2luaXQpOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY19jbGFzc19pbml0KToKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogKGdzdF9wbmdlbmNfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6IChnc3RfbWlrbW9kX2NsYXNzX2luaXQpOgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiAoZ3N0X3Nob3V0MnNlbmRfY2xhc3NfaW5pdCk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9jbGFzc19pbml0KToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuYzogKGdzdF9lZmVuY2VfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9kZWJ1Zy9uZWdvdGlhdGlvbi5jOiAoZ3N0X25lZ290aWF0aW9uX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5jOiAoZ3N0X2ZseGRlY19jbGFzc19pbml0KToKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21fY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAoZ3N0X2lkM2RlbXV4X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogKGRlaW50ZXJsZWF2ZV9jbGFzc19pbml0KToKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOiAoaW50ZXJsZWF2ZV9jbGFzc19pbml0KToKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoZ3N0X2FsYXdkZWNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzogKGdzdF9hbGF3ZW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOiAoZ3N0X211bGF3ZW5jX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5jOiAoZ3N0X21lZGlhbl9jbGFzc19pbml0KToKLQkgICogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogKGdzdF9tb25vc2NvcGVfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzogKGdzdF9hc3Rlcmlza2gyNjNfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYzogKGdzdF9ydHBfTDE2ZGVwYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5LmM6IChnc3RfcnRwTDE2cGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6IChnc3RfcnRwX2Ftcl9kZXBheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzogKGdzdF9ydHBfYW1yX3BheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBkZXBheS5jOiAoZ3N0X3J0cF9kZXBheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOiAoZ3N0X3J0cF9nc21fZGVwYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6IChnc3RfcnRwX2dzbV9wYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOiAoZ3N0X3J0cF9oMjYzX3BheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6IChnc3RfcnRwX2gyNjNwX2RlcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6IChnc3RfcnRwX2gyNjNwX3BheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6IChnc3RfcnRwX21wNGdfcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOiAoZ3N0X3J0cF9tcDR2X2RlcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogKGdzdF9ydHBfbXA0dl9wYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzogKGdzdF9ydHBfbXBhX2RlcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOiAoZ3N0X3J0cF9tcGFfcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5jOiAoZ3N0X3J0cF9wY21hX2RlcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbWFwYXkuYzogKGdzdF9ydHBfcGNtYV9wYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmM6IChnc3RfcnRwX3BjbXVfZGVwYXlfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtdXBheS5jOiAoZ3N0X3J0cF9wY211X3BheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6IChnc3RfcnRwX3NwZWV4X2RlcGF5X2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6IChnc3RfcnRwX3NwZWV4X3BheV9jbGFzc19pbml0KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19jbGFzc19pbml0KToKLQkgICogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOiAoZ3N0X2R5bnVkcHNpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX2NsYXNzX2luaXQpOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9jbGFzc19pbml0KToKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzZG1hYnVmZmVyLmM6IChnc3Rfb3NzZG1hYnVmZmVyX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3Nfc2lua19jbGFzc19pbml0KToKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5jOgotCSAgKGdzdF9vc3hhdWRpb2VsZW1lbnRfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzogKGdzdF9vc3hhdWRpb3NpbmtfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOiAoZ3N0X29zeGF1ZGlvc3JjX2NsYXNzX2luaXQpOgotCSAgKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLmM6IChnc3Rfc3VuYXVkaW9zaW5rX2NsYXNzX2luaXQpOgotCSAgRml4ICMzMzczNjUgKGdfdHlwZV9jbGFzc19yZWYgPC0+IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCkKLQotMjAwNi0wNC0wOCAxOTowNjoyNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBGaXggbW9yZSBicm9rZW4gR09iamVjdCBtYWNyb3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvbWlrbW9kL2dzdG1pa21vZC5oOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkgIEZpeCBtb3JlIGJyb2tlbiBHT2JqZWN0IG1hY3JvcwotCi0yMDA2LTA0LTA4IDE4OjQxOjA3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIEZpeCBicm9rZW4gR09iamVjdCBtYWNyb3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQveGluZS9nc3R4aW5lLmg6Ci0JICAqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuaDoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuaDoKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2V1dGlsLmg6Ci0JICBGaXggYnJva2VuIEdPYmplY3QgbWFjcm9zCi0KLTIwMDYtMDQtMDggMTg6MjU6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgRml4IGJyb2tlbiBHT2JqZWN0IG1hY3JvcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuaDoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5oOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sdGFnLmg6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5oOgotCSAgKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5oOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmg6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuaDoKLQkgIEZpeCBicm9rZW4gR09iamVjdCBtYWNyb3MKLQotMjAwNi0wNC0wOCAxODoyMzowNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBEb24ndCBtYWtlIHJvdW5kaW5nIGVycm9ycyBpbiB0aW1lc3RhbXAvZHVyYXRpb24gY2FsY3VsYXRpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X3ByZXBhcmVfY3VycmVudF9zYW1wbGUpLAotCSAgKGdzdF9xdGRlbXV4X2NoYWluKSwgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9kdW1wX3N0c3opLAotCSAgKHF0ZGVtdXhfZHVtcF9zdGNvKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBEb24ndCBtYWtlIHJvdW5kaW5nIGVycm9ycyBpbiB0aW1lc3RhbXAvZHVyYXRpb24gY2FsY3VsYXRpb25zLgotCSAgRml4IHRpbWVzdGFtcHMgZm9yIEFNUiBhbmQgSU1BNC4gIEZpeGVzICgjMzM3NDM2KS4KLQkgIENyZWF0ZSBhIGR1bW15IHNlZ21lbnQgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGVkaXQgbGlzdC4KLQotMjAwNi0wNC0wOCAxMzowOTo1MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiBEb24ndCB0cnkgdG8gc2VlayBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSAod291bGQgb2NjYXNpb25hbGx5IGRpc3BsYXkgZXJyb3IgZGlhbG9ncyBpbiB0b3RlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNfZGVjX2hhbmRsZV9zZWVrX2V2ZW50KToKLQkgIERvbid0IHRyeSB0byBzZWVrIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlICh3b3VsZAotCSAgb2NjYXNpb25hbGx5IGRpc3BsYXkgZXJyb3IgZGlhbG9ncyBpbiB0b3RlbSB3aGVuIHNlZWtpbmcKLQkgIHRvIHRoZSBlbmQpICgjMzM1ODY5KS4gV2lsbCBzdGlsbCB0aHJvdyBhbiBlcnJvciB0aG91Z2gKLQkgIGlmIHRoZSBmaWxlIGlzIHRydW5jYXRlZCBhbmQgdGhlIHRvdGFsX3NhbXBsZXMgdmFsdWUgaW4KLQkgIHRoZSBzdHJlYW0gaGVhZGVyIGlzIHdyb25nLgotCi0yMDA2LTA0LTA3IDE4OjE1OjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZmxhYy9nc3RmbGFjZGVjLio6IElmIHRoZSBzdHJlYW0gaGVhZGVyIGRvZXNuJ3QgY29udGFpbiB0aGUgdG90YWwgbnVtYmVyIG9mIHNhbXBsZXMsIHNlYXJjaCBmb3IgdGhlIGxhc3QgZmxhYyBmcmEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY19jYWxjdWxhdGVfY3JjOCksCi0JICAoZ3N0X2ZsYWNfZGVjX3NjYW5fZ290X2ZyYW1lKSwgKGdzdF9mbGFjX2RlY19zY2FuX2Zvcl9sYXN0X2Jsb2NrKSwKLQkgIChnc3RfZmxhY19kZWNfbWV0YWRhdGFfY2FsbGJhY2spOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBJZiB0aGUgc3RyZWFtIGhlYWRlciBkb2Vzbid0IGNvbnRhaW4gdGhlIHRvdGFsIG51bWJlciBvZiBzYW1wbGVzLAotCSAgc2VhcmNoIGZvciB0aGUgbGFzdCBmbGFjIGZyYW1lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNhbGN1bGF0ZQotCSAgdGhlIHRvdGFsIGR1cmF0aW9uIGZyb20gdGhhdCBmcmFtZSdzIG9mZnNldCAoZml4ZXMgIzMzNzYwOSkuCi0KLTIwMDYtMDQtMDcgMTU6NTM6NDMgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIFR5cG8gZml4LCBzL1hGcmVlODYvWDExIGFuZCBhZGRlZCBkb2MgYmx1cmIgc2F5aW5nIHRoYXQgaXQgZml4YXRlcyB0byAyNWZwcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTA0LTA3ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0JICAqIGV4dC9hbXJ3Yi9hbXJ3Yi1jb2RlL01ha2VmaWxlLmFtOgotCSAgKiBzeXMveGltYWdlc3JjL3hpbWFnZXNyYy5jOiAoZ3N0X3hpbWFnZXNyY19yZWNhbGMpLAotCSAgKGdzdF94aW1hZ2VzcmNfY3JlYXRlKSwgKGdzdF94aW1hZ2VzcmNfc2V0X3Byb3BlcnR5KToKLQkgIFR5cG8gZml4LCBzL1hGcmVlODYvWDExIGFuZCBhZGRlZCBkb2MgYmx1cmIgc2F5aW5nIHRoYXQgaXQgZml4YXRlcyB0bwotCSAgMjVmcHMKLQotMjAwNi0wNC0wNyAxNTo0NzoyNyArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgdGVzdHMvaWNsZXMveGltYWdlc3JjLXRlc3QuYzogQWN0dWFsbHkgYXNzZXJ0IHRoYXQgcGlwZWxpbmUgZ29lcyB0byBwbGF5aW5nCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDQtMDcgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogdGVzdHMvaWNsZXMveGltYWdlc3JjLXRlc3QuYzogKG1haW4pOgotCSAgQWN0dWFsbHkgYXNzZXJ0IHRoYXQgcGlwZWxpbmUgZ29lcyB0byBwbGF5aW5nCi0KLTIwMDYtMDQtMDcgMTU6Mjc6NDAgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHN5cy94aW1hZ2VzcmMveGltYWdlc3JjLmM6IEZpeCB0eXBvLCBDKysgc3R5bGUgY29tbWVudHMgYW5kIG90aGVyIHNtYWxsIGNsZWFudXBzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDQtMDcgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2VzcmMuYzogKGdzdF94aW1hZ2VzcmNfcmVjYWxjKSwKLQkgIChjb21wb3NpdGVfcGl4ZWwpLCAoZ3N0X3hpbWFnZXNyY194aW1hZ2VfZ2V0KSwKLQkgIChnc3RfeGltYWdlc3JjX2NyZWF0ZSksIChnc3RfeGltYWdlc3JjX3NldF9wcm9wZXJ0eSk6Ci0JICBGaXggdHlwbywgQysrIHN0eWxlIGNvbW1lbnRzIGFuZCBvdGhlciBzbWFsbCBjbGVhbnVwcwotCi0yMDA2LTA0LTA3IDEwOjQ4OjE5ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IERvbid0IHVucmVmIHRoZSBHc3RQYWRUZW1wbGF0ZSByZXR1cm5lZCBieSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlKCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJlYW0pOgotCSAgRG9uJ3QgdW5yZWYgdGhlIEdzdFBhZFRlbXBsYXRlIHJldHVybmVkIGJ5Ci0JICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlKCkuCi0KLTIwMDYtMDQtMDYgMTk6MTY6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQWRkZWQgZnVsbCBlZGl0IGxpc3Qgc3VwcG9ydC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9pbml0KSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9xdGRlbXV4X2ZpbmRfaW5kZXgpLAotCSAgKGdzdF9xdGRlbXV4X2ZpbmRfa2V5ZnJhbWUpLCAoZ3N0X3F0ZGVtdXhfZmluZF9zZWdtZW50KSwKLQkgIChnc3RfcXRkZW11eF9tb3ZlX3N0cmVhbSksIChnc3RfcXRkZW11eF9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF9xdGRlbXV4X2RvX3NlZWspLCAoZ3N0X3F0ZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcXRkZW11eF9hY3RpdmF0ZV9zZWdtZW50KSwKLQkgIChnc3RfcXRkZW11eF9wcmVwYXJlX2N1cnJlbnRfc2FtcGxlKSwgKGdzdF9xdGRlbXV4X2FkdmFuY2Vfc2FtcGxlKSwKLQkgIChnc3RfcXRkZW11eF9sb29wX3N0YXRlX21vdmllKSwgKGdzdF9xdGRlbXV4X2xvb3ApLAotCSAgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBBZGRlZCBmdWxsIGVkaXQgbGlzdCBzdXBwb3J0LgotCSAgQXZvaWQgb3ZlcmZsb3dzIGluIHByb2xvZ3VlIGltYWdlIGRldGVjdGlvbiBjb2RlLgotCSAgQXZvaWQgcm91bmRvZmYgZXJyb3JzIGluIHRpbWVzdGFtcCBjYWxjdWxhdGlvbnMuCi0KLTIwMDYtMDQtMDYgMTE6MzU6MjYgKzAwMDAgIGpeIDxqQGJvb3RsYWIub3JnPgotCi0JICBVbmlmeSB0aGUgbG9uZyBkZXNjcmlwdGlvbnMgaW4gdGhlIHBsdWdpbiBkZXRhaWxzICgjMzM3MjYzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IGpeICA8aiBhdCBib290bGFiIGRvdCBvcmc+Ci0JICAqIGV4dC9hbXJ3Yi9nc3RhbXJ3YmRlYy5jOgotCSAgKiBleHQvYW1yd2IvZ3N0YW1yd2JlbmMuYzoKLQkgICogZXh0L2FtcndiL2dzdGFtcndicGFyc2UuYzoKLQkgICogZXh0L2FydHMvZ3N0X2FydHMuYzoKLQkgICogZXh0L2FydHNkL2dzdGFydHNkc2luay5jOgotCSAgKiBleHQvYXVkaW9maWxlL2dzdGFmcGFyc2UuYzoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuYzoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5jOgotCSAgKiBleHQvY2RhdWRpby9nc3RjZGF1ZGlvLmM6Ci0JICAqIGV4dC9kaXJlY3RmYi9kZmJ2aWRlb3NpbmsuYzoKLQkgICogZXh0L2RpdngvZ3N0ZGl2eGRlYy5jOgotCSAgKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmM6Ci0JICAqIGV4dC9kdHMvZ3N0ZHRzZGVjLmM6IChnc3RfZHRzZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9mYWFjL2dzdGZhYWMuYzogKGdzdF9mYWFjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9mYWFkL2dzdGZhYWQuYzoKLQkgICogZXh0L2dzbS9nc3Rnc21kZWMuYzoKLQkgICogZXh0L2dzbS9nc3Rnc21lbmMuYzoKLQkgICogZXh0L2hlcm1lcy9nc3RoZXJtZXNjb2xvcnNwYWNlLmM6Ci0JICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2ZpbGUuYzoKLQkgICogZXh0L2xjcy9nc3Rjb2xvcnNwYWNlLmM6Ci0JICAqIGV4dC9saWJmYW1lL2dzdGxpYmZhbWUuYzoKLQkgICogZXh0L2xpYm1tcy9nc3RtbXMuYzogKGdzdF9tbXNfYmFzZV9pbml0KToKLQkgICogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOiAoZ3N0X211c2ljYnJhaW56X2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9uYXMvbmFzc2luay5jOiAoZ3N0X25hc3NpbmtfYmFzZV9pbml0KToKLQkgICogZXh0L25lb24vZ3N0bmVvbmh0dHBzcmMuYzoKLQkgICogZXh0L3BvbHlwL3BvbHlwc2luay5jOiAoZ3N0X3BvbHlwc2lua19iYXNlX2luaXQpOgotCSAgKiBleHQvc2RsL3NkbGF1ZGlvc2luay5jOgotCSAgKiBleHQvc2RsL3NkbHZpZGVvc2luay5jOgotCSAgKiBleHQvc2hvdXQvZ3N0c2hvdXQuYzoKLQkgICogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90LmM6Ci0JICAqIGV4dC9zbmRmaWxlL2dzdHNmLmM6Ci0JICAqIGV4dC90YXJraW4vZ3N0dGFya2luZGVjLmM6Ci0JICAqIGV4dC90YXJraW4vZ3N0dGFya2luZW5jLmM6Ci0JICAqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19iYXNlX2luaXQpOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzoKLQkgICogZXh0L3h2aWQvZ3N0eHZpZGVuYy5jOgotCSAgKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFwYXJzZS5jOiAoZ3N0X2NkeGFfcGFyc2VfYmFzZV9pbml0KToKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhc3RyaXAuYzogKGdzdF9jZHhhc3RyaXBfYmFzZV9pbml0KToKLQkgICogZ3N0L2NoYXJ0L2dzdGNoYXJ0LmM6Ci0JICAqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6IChnc3RfaWlyX2VxdWFsaXplcl9iYXNlX2luaXQpOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuYzoKLQkgICogZ3N0L2ZpbHRlci9nc3RpaXIuYzoKLQkgICogZ3N0L2ZpbHRlci9nc3RscHdzaW5jLmM6Ci0JICAqIGdzdC9mcmVlemUvZ3N0ZnJlZXplLmM6Ci0JICAqIGdzdC9nYW1lcy9nc3RwdXp6bGUuYzogKGdzdF9wdXp6bGVfYmFzZV9pbml0KToKLQkgICogZ3N0L21peG1hdHJpeC9taXhtYXRyaXguYzoKLQkgICogZ3N0L21wZWcxc3lzL2dzdG1wZWcxc3lzdGVtZW5jb2RlLmM6Ci0JICAqIGdzdC9tcGVnMXZpZGVvcGFyc2UvZ3N0bXAxdmlkZW9wYXJzZS5jOgotCSAgKiBnc3QvbXBlZzJzdWIvZ3N0bXBlZzJzdWJ0LmM6Ci0JICAqIGdzdC9tcGVnYXVkaW9wYXJzZS9nc3RtcGVnYXVkaW9wYXJzZS5jOgotCSAgKiBnc3QvbXVsdGlmaWxlc2luay9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICAqIGdzdC9vdmVybGF5L2dzdG92ZXJsYXkuYzoKLQkgICogZ3N0L3Bhc3N0aHJvdWdoL2dzdHBhc3N0aHJvdWdoLmM6Ci0JICAqIGdzdC9wbGF5b25kZW1hbmQvZ3N0cGxheW9uZGVtYW5kLmM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdkZWMuYzoKLQkgICogZ3N0L3J0anBlZy9nc3RydGpwZWdlbmMuYzoKLQkgICogZ3N0L3Ntb290aC9nc3RzbW9vdGguYzoKLQkgICogZ3N0L3R0YS9nc3R0dGFkZWMuYzogKGdzdF90dGFfZGVjX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYzogKGdzdF90dGFfcGFyc2VfYmFzZV9pbml0KToKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkgICogZ3N0L3ZpZGVvZHJvcC9nc3R2aWRlb2Ryb3AuYzoKLQkgICogZ3N0L3ZpcnR1YWxkdWIvZ3N0eHNoYXJwZW4uYzoKLQkgICogZ3N0L3hpbmdoZWFkZXIvZ3N0eGluZ211eC5jOiAoZ3N0X3hpbmdfbXV4X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC95NG0vZ3N0eTRtZW5jb2RlLmM6Ci0JICBVbmlmeSB0aGUgbG9uZyBkZXNjcmlwdGlvbnMgaW4gdGhlIHBsdWdpbiBkZXRhaWxzICgjMzM3MjYzKS4KLQotMjAwNi0wNC0wNiAwOToxNDozMCArMDAwMCAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotCi0JICBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zaW5rLio6IFVzZSBzcGVjLT5zZWdzaXplIGFuZCBzcGVjLT5zZWd0b3RhbCBpbiB0aGUgcHJlcGFyZSBmdW5jdGlvbiB0byBpbml0aWFsaXNlIHRoZSByaW5nIGIuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggYnk6IEJyaWFuIENhbWVyb24gIDxicmlhbiBkb3QgY2FtZXJvbiBhdCBzdW4gZG90IGNvbT4KLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jOiAoZ3N0X3N1bmF1ZGlvc2lua19pbml0KSwKLQkgIChnc3Rfc3VuYXVkaW9zaW5rX3ByZXBhcmUpLCAoZ3N0X3N1bmF1ZGlvc2lua193cml0ZSk6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuaDoKLQkgIFVzZSBzcGVjLT5zZWdzaXplIGFuZCBzcGVjLT5zZWd0b3RhbCBpbiB0aGUgcHJlcGFyZSBmdW5jdGlvbgotCSAgdG8gaW5pdGlhbGlzZSB0aGUgcmluZyBidWZmZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgYnVmZmVyLXRpbWUKLQkgIHByb3BlcnR5ICgjMzM3NDIxKS4KLQotMjAwNi0wNC0wNiAwODo1Mjo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBCdW1wIGNvcmUgcmVxdWlyZW1lbnRzIHRvIENWUyBmb3IgZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uKCkgd2hpY2ggaXMgdXNlZCBieSBzcGVleGRlYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCdW1wIGNvcmUgcmVxdWlyZW1lbnRzIHRvIENWUyBmb3IgZ3N0X3BhZF9xdWVyeV9wZWVyX2R1cmF0aW9uKCkKLQkgIHdoaWNoIGlzIHVzZWQgYnkgc3BlZXhkZWMuCi0KLTIwMDYtMDQtMDUgMTg6Mjc6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9zcGVleC86IEZpeCBzZWVraW5nIGFuZCBkdXJhdGlvbiBxdWVyaWVzICgjMzM3MDMzKTsgY2xlYW4gdXAgYW5kIHJlZmFjdG9yIGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKGdzdF9zcGVleF9kZWNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NwZWV4X2RlY19yZXNldCksIChnc3Rfc3BlZXhfZGVjX2luaXQpLCAoc3BlZXhfZGVjX2NvbnZlcnQpLAotCSAgKHNwZWV4X2dldF9zaW5rX3F1ZXJ5X3R5cGVzKSwgKHNwZWV4X2RlY19zaW5rX3F1ZXJ5KSwKLQkgIChzcGVleF9nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwgKHNwZWV4X2RlY19zcmNfcXVlcnkpLAotCSAgKHNwZWV4X2RlY19zcmNfZXZlbnQpLCAoc3BlZXhfZGVjX3NpbmtfZXZlbnQpLAotCSAgKHNwZWV4X2RlY19jaGFpbl9wYXJzZV9oZWFkZXIpLCAoc3BlZXhfZGVjX2NoYWluX3BhcnNlX2NvbW1lbnRzKSwKLQkgIChzcGVleF9kZWNfY2hhaW5fcGFyc2VfZGF0YSksIChzcGVleF9kZWNfY2hhaW4pLAotCSAgKGdzdF9zcGVleF9kZWNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9zcGVleF9kZWNfc2V0X3Byb3BlcnR5KSwKLQkgIChzcGVleF9kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JICBGaXggc2Vla2luZyBhbmQgZHVyYXRpb24gcXVlcmllcyAoIzMzNzAzMyk7IGNsZWFuIHVwIGFuZAotCSAgcmVmYWN0b3IgYSBiaXQuCi0KLTIwMDYtMDQtMDUgMTI6NDE6MTQgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogZGlzdGluZ3Vpc2ggYmV0d2VlbiBkZXZpY2Ugbm90IGZvdW5kIGFuZCBjb3VsZCBub3Qgb3BlbiBmb3IgcmVhZGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgZGlzdGluZ3Vpc2ggYmV0d2VlbiBkZXZpY2Ugbm90IGZvdW5kIGFuZCBjb3VsZCBub3Qgb3BlbiBmb3IKLQkgIHJlYWRpbmcKLQotMjAwNi0wNC0wNSAwODozNjo1NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBVc2UgZHVyYXRpb24gYXMgc2VnbWVudCBzdG9wIHBvc2l0aW9uIGlmIG5vbmUgaXMgZXhwbGljaXRseSBjb25maWd1cmVkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X3BlcmZvcm1fc2VlayksCi0JICAoZ3N0X3F0ZGVtdXhfZG9fc2VlayksIChnc3RfcXRkZW11eF9sb29wX3N0YXRlX21vdmllKSwKLQkgIChnc3RfcXRkZW11eF9sb29wKToKLQkgIFVzZSBkdXJhdGlvbiBhcyBzZWdtZW50IHN0b3AgcG9zaXRpb24gaWYgbm9uZSBpcwotCSAgZXhwbGljaXRseSBjb25maWd1cmVkLgotCSAgQWxzbyBwZXJmb3JtIEVPUyB3aGVuIHdlIHJ1biBwYXN0IHRoZSBzZWdtZW50IHN0b3AuCi0KLTIwMDYtMDQtMDQgMTE6MjA6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogTW9yZSBjbGVhbnVwcywgYWRkZWQgY29tbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfZ29fYmFjayksCi0JICAoZ3N0X3F0ZGVtdXhfcGVyZm9ybV9zZWVrKSwgKGdzdF9xdGRlbXV4X2RvX3NlZWspLAotCSAgKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfbW92aWUpLCAoZ3N0X3F0ZGVtdXhfbG9vcCksCi0JICAoZ3N0X3F0ZGVtdXhfY2hhaW4pLCAocXRkZW11eF9wYXJzZV90cmVlKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBNb3JlIGNsZWFudXBzLCBhZGRlZCBjb21tZW50cy4KLQkgIE1hcmsgZGlzY29udGludWl0aWVzIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0JICBQb3N0IGJldHRlciBlcnJvcnMgd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KLQkgIEhhbmRsZSBFT1MgYW5kIHNlZ21lbnQgZW5kIHByb3Blcmx5LgotCi0yMDA2LTA0LTA0IDA4OjMxOjEwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4Lio6IEhhbmRsZSBzdHNzIGJveGVzIHNvIHdlIGNhbiBtYXJrIGFuZCBmaW5kIGtleWZyYW1lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9pbml0KSwKLQkgIChnc3RfcXRkZW11eF9wdXNoX2V2ZW50KSwgKGdzdF9xdGRlbXV4X2dvX2JhY2spLAotCSAgKGdzdF9xdGRlbXV4X3BlcmZvcm1fc2VlayksIChnc3RfcXRkZW11eF9kb19zZWVrKSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwgKHBsdWdpbl9pbml0KSwKLQkgIChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcCksIChnc3RfcXRkZW11eF9jaGFpbiksCi0JICAocXRkZW11eF9zaW5rX2FjdGl2YXRlX3B1bGwpLCAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksCi0JICAocXRkZW11eF9wYXJzZSksIChxdGRlbXV4X3BhcnNlX3RyZWUpLCAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkgIChxdGRlbXV4X3BhcnNlX3VkdGEpLCAocXRkZW11eF90YWdfYWRkX3N0ciksIChxdGRlbXV4X3RhZ19hZGRfbnVtKSwKLQkgIChxdGRlbXV4X3RhZ19hZGRfZ25yZSksIChnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIEhhbmRsZSBzdHNzIGJveGVzIHNvIHdlIGNhbiBtYXJrIGFuZCBmaW5kIGtleWZyYW1lcy4KLQkgIEltcGxlbWVudCBjb3JyZWN0IGFjY3VyYXRlIGFuZCBrZXlmcmFtZSBzZWVraW5nLgotCSAgVXNlIF9ERUJVR19PQkpFQ1Qgd2hlbiBwb3NzaWJsZS4KLQotMjAwNi0wNC0wMyAxMzoyOToyMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA2LTA0LTAzIDEzOjI4OjU1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSAgZml4IGRpc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRpc3QKLQotMjAwNi0wNC0wMyAwOTowMjoyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGFkZCBhIC5wYyBmaWxlIHNvIG90aGVyIG1vZHVsZXMgY2FuIHVzZSBnb29kIHBsdWdpbnMgaW4gdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBwa2djb25maWcvLmN2c2lnbm9yZToKLQkgICogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSAgKiBwa2djb25maWcvZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbjoKLQkgIGFkZCBhIC5wYyBmaWxlIHNvIG90aGVyIG1vZHVsZXMgY2FuIHVzZSBnb29kIHBsdWdpbnMgaW4gdGVzdHMKLQotMjAwNi0wNC0wMSAxNjo1MDo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdGRlbXV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi10YWdsaWIueG1sOgotCSogZXh0L3RhZ2xpYi9nc3R0YWdsaWJtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmM6Ci0JICBhZGQgdGFnbGliIGNoZWNrcyBhbmQgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgdGFnbGliIGNoZWNrcyBhbmQgZG9jcwotCi0yMDA2LTA0LTAxIDE1OjMwOjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3VwbG9hZC5tYWs6Ci0JICBkaXNhYmxlIHVzZSBvZiBBU19MSUJUT09MX1RBR1MsIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZGlzYWJsZSB1c2Ugb2YgQVNfTElCVE9PTF9UQUdTLCBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5Ci0KLTIwMDYtMDQtMDEgMTQ6MDM6MDMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYW5ub2RleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Rpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWhhbGVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGFkc3BhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9iYWxhbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgIGFkZGluZyBpbnNwZWN0IGZpbGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZGluZyBpbnNwZWN0IGZpbGVzCi0KLTIwMDYtMDQtMDEgMTA6MTU6MzMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9pY2xlcy94aW1hZ2VzcmMtdGVzdC5jOgotCSAgNSBzZWNvbmQgdGltZW91dAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICA1IHNlY29uZCB0aW1lb3V0Ci0KLTIwMDYtMDQtMDEgMTA6MTQ6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiB0ZXN0cy9pY2xlcy8uZ2l0aWdub3JlOgotCSogdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0cy9pY2xlcy94aW1hZ2VzcmMtdGVzdC5jOgotCSAgcmVuYW1lIHRlc3QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVuYW1lIHRlc3QKLQotMjAwNi0wNC0wMSAxMDowOToxMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyLmM6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JKiBnc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYzoKLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3cGx1Z2luLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRwbHVnaW4uYzoKLQkqIHN5cy92NGwyL2dzdHY0bDIuYzoKLQkqIHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6Ci0JICByZXdvcmsgYnVpbGQ7IGFkZCB0cmFuc2xhdGlvbnMgZm9yIHY0bDIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmV3b3JrIGJ1aWxkOyBhZGQgdHJhbnNsYXRpb25zIGZvciB2NGwyCi0KLTIwMDYtMDQtMDEgMDk6NTY6NDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGNsZWFuIHVwLCB1c2UgQVNfVkVSU0lPTiBhbmQgQVNfTkFOTwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGNsZWFuIHVwLCB1c2UgQVNfVkVSU0lPTiBhbmQgQVNfTkFOTwotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KToKLQkgIHVzZSBQQUNLQUdFX1ZFUlNJT04gZGVmaW5lCi0JICAqIHBvL2FmLnBvOgotCSAgKiBwby9hei5wbzoKLQkgICogcG8vY3MucG86Ci0JICAqIHBvL2VuX0dCLnBvOgotCSAgKiBwby9odS5wbzoKLQkgICogcG8vaXQucG86Ci0JICAqIHBvL25iLnBvOgotCSAgKiBwby9ubC5wbzoKLQkgICogcG8vb3IucG86Ci0JICAqIHBvL3NxLnBvOgotCSAgKiBwby9zci5wbzoKLQkgICogcG8vc3YucG86Ci0JICAqIHBvL3VrLnBvOgotCSAgKiBwby92aS5wbzoKLQkgIHVwZGF0ZWQKLQotMjAwNi0wMy0zMSAxNzo1MjozNiArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSAgQWRkIHRlc3RzIGFuZCBmaXggUEFSIGNhcHMgaXNzdWUgdG8geGltYWdlc3JjCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMzEgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogTWFrZWZpbGUuYW06Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2VzcmMuYzoKLQkgIChnc3RfeGltYWdlc3JjX3hpbWFnZV9nZXQpLAotCSAgKGdzdF94aW1hZ2VzcmNfZ2V0X2NhcHMpLCAoZ3N0X3hpbWFnZXNyY19jbGFzc19pbml0KToKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2V1dGlsLmM6Ci0JICAqIHRlc3RzL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9pY2xlcy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvaWNsZXMveGltYWdlc3JjLXRlc3QuYzogKHRlcm1pbmF0ZV9wbGF5YmFjayksIChtYWluKToKLQkgIEFkZCB0ZXN0cyBhbmQgZml4IFBBUiBjYXBzIGlzc3VlIHRvIHhpbWFnZXNyYwotCi0yMDA2LTAzLTMxIDE2OjMyOjQ3ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBzeXMveGltYWdlc3JjL3hpbWFnZXNyYy5jOiBBZGQgZG9jcyB0byB4aW1hZ2VzcmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMy0zMSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBzeXMveGltYWdlc3JjL3hpbWFnZXNyYy5jOgotCSAgQWRkIGRvY3MgdG8geGltYWdlc3JjCi0KLTIwMDYtMDMtMzEgMTU6MjE6MzUgKzAwMDAgIFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzQG1lcmFsaS5vcmc+Ci0KLQkgIHN5cy94aW1hZ2VzcmMvOiBGaXggeGltYWdlc3JjIHNvIGEpIHRoZSBjdXJzb3IgZG9lc250IHRyYWlsIGFuZCBiKSB0aGVyZSBhcmUgbm8geWVsbG93IHJlY3RhbmdsZXMgd2l0aCB0aGUgY3Vyc29yCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMzEgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2VzcmMuYzogKGNvbXBvc2l0ZV9waXhlbCksCi0JICAoZ3N0X3hpbWFnZXNyY194aW1hZ2VfZ2V0KSwgKGdzdF94aW1hZ2VzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfeGltYWdlc3JjX2dldF9jYXBzKSwgKGdzdF94aW1hZ2VzcmNfY2xhc3NfaW5pdCk6Ci0JICAqIHN5cy94aW1hZ2VzcmMveGltYWdlc3JjLmg6Ci0JICAqIHN5cy94aW1hZ2VzcmMveGltYWdldXRpbC5jOiAoeGltYWdldXRpbF94Y29udGV4dF9nZXQpOgotCSAgKiBzeXMveGltYWdlc3JjL3hpbWFnZXV0aWwuaDoKLQkgIEZpeCB4aW1hZ2VzcmMgc28gYSkgdGhlIGN1cnNvciBkb2VzbnQgdHJhaWwgYW5kIGIpIHRoZXJlIGFyZSBubwotCSAgeWVsbG93IHJlY3RhbmdsZXMgd2l0aCB0aGUgY3Vyc29yCi0KLTIwMDYtMDMtMzAgMjM6NDY6NDIgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSogd2luMzIvdnM2L2dzdF9wbHVnaW5zX2dvb2QuZHN3OgotCSogd2luMzIvdnM2L2xpYmdzdGFsYXcuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGFscGhhLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RhbHBoYWNvbG9yLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RhcGV0YWcuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF1cGFyc2UuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF1dG9kZXRlY3QuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGF2aS5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0Y3V0dGVyLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RlZmZlY3R2LmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RmbHguZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGdvb20uZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdGlkM2RlbXV4LmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RpbnRlcmxlYXZlLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RqcGVnLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RsZXZlbC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0bWF0cm9za2EuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdG1lZGlhbi5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0bW9ub3Njb3BlLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RtdWxhdy5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0bXVsdGlwYXJ0LmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RydHAuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHJ0c3AuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHNtcHRlLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3RzcGVleC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0dmlkZW9iYWxhbmNlLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb2JveC5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0dmlkZW9mbGlwLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3R2aWRlb21peGVyLmRzcDoKLQkqIHdpbjMyL3ZzNi9saWJnc3R3YXZlbmMuZHNwOgotCSogd2luMzIvdnM2L2xpYmdzdHdhdnBhcnNlLmRzcDoKLQkgIEknbSB0b28gbGF6eSB0byBjb21tZW50IHRoaXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKgotCi0yMDA2LTAzLTMwIDIzOjM3OjE2ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGV4dFxqcGVnXHNtb2tlY29kZWMuYzogdXNlIG9mIEdTVF9ERUJVRyBpbnN0ZWFkIG9mIERFQlVHKGEuLi4pIGZvciBXSU4zMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dFxqcGVnXHNtb2tlY29kZWMuYzoKLQkgIHVzZSBvZiBHU1RfREVCVUcgaW5zdGVhZCBvZiBERUJVRyhhLi4uKSBmb3IgV0lOMzIKLQkgICogZXh0XHNwZWV4XGdzdHNwZWV4ZW5jLmM6IChnc3Rfc3BlZXhlbmNfc2V0X2hlYWRlcl9vbl9jYXBzKToKLQkgIG1vdmUgZmlyc3QgaW5zdHJ1Y3Rpb24gYWZ0ZXIgYWxsIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKLQkgICogZ3N0XGFscGhhXGdzdGFscGhhLmM6Ci0JICAqIGdzdFxlZmZlY3R2XGdzdHNoYWdhZGVsaWMuYzoKLQkgICogZ3N0XHNtcHRlXHBhaW50LmM6Ci0JICAqIGdzdFx2aWRlb2ZpbHRlclxnc3R2aWRlb2JhbGFuY2UuYzoKLQkgIGRlZmluZSBNX1BJIGlmIGl0J3Mgbm90IGRlZmluZWQgKGl0J3Mgbm90IGRlZmluZWQgb24gV0lOMzIpCi0JICAqIGdzdFxjdXR0ZXJcZ3N0Y3V0dGVyLmM6IChnc3RfY3V0dGVyX2NoYWluKToKLQkgICogZ3N0XGlkM2RlbXV4XGlkM3YyZnJhbWVzLmM6IChwYXJzZV9yZWxhdGl2ZV92b2x1bWVfYWRqdXN0bWVudF90d28pOgotCSAgKiBnc3RcbGV2ZWxcZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9zZXRfcHJvcGVydHkpLCAoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdFxtYXRyb3NrYVxtYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZm8pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF92aWRlb19jYXBzKToKLQkgICogZ3N0XG1hdHJvc2thXG1hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9zdGFydCksIChnc3RfbWF0cm9za2FfbXV4X2ZpbmlzaCk6Ci0JICAqIGdzdFx3YXZwYXJzZVxnc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKToKLQkgIHVzZSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIGZvciBjb252ZXJzaW9ucwotCSAgKiBnc3RcZ29vbVxmaWx0ZXJzLmM6IChzZXRQaXhlbFJHQl8pOgotCSAgZml4IGEgZGVidWcgd2hpY2ggd2FzIHVzaW5nIHVuZGVmaW5lZCB2YXJpYWJsZQotCSAgKiBnc3RcbGV2ZWxcZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9zZXRfY2FwcyksIChnc3RfbGV2ZWxfdHJhbnNmb3JtX2lwKToKLQkgICogZ3N0XG1hdHJvc2thXGVibWwtcmVhZC5jOiAoZ3N0X2VibWxfcmVhZF9zaW50KToKLQkgIHJlcGxhY2UgTEwgc3VmZml4IHdpdGggTCBzdWZmaXggKExMIGlzbid0IHN1cHBvcnRlZCBieSBNU1ZDNi4wKQotCSAgKiB3aW4zMi92czY6Ci0JICBhZGQgdnM2IHByb2plY3RzIGZpbGVzIGZvciBtb3N0IG9mIHBsdWdpbnMtZ29vZAotCi0yMDA2LTAzLTMwIDE1OjM3OjA1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBiZXR0ZXIvdW5pZmllZCBsb25nIGRlc2NyaXB0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuYzoKLQkgICogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JICAqIGV4dC9lc2QvZXNkbW9uLmM6Ci0JICAqIGV4dC9lc2QvZXNkc2luay5jOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogKGdzdF9nY29uZl9hdWRpb19zaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc3JjLmM6IChnc3RfZ2NvbmZfYXVkaW9fc3JjX2Jhc2VfaW5pdCk6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOiAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfYmFzZV9pbml0KToKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuYzogKGdzdF9nY29uZl92aWRlb19zcmNfYmFzZV9pbml0KToKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zaW5rLmM6IChnc3RfaGFsX2F1ZGlvX3NpbmtfYmFzZV9pbml0KToKLQkgICogZXh0L2hhbC9nc3RoYWxhdWRpb3NyYy5jOiAoZ3N0X2hhbF9hdWRpb19zcmNfYmFzZV9pbml0KToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6Ci0JICAqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZGVjLmM6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JICAqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6Ci0JICAqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkgIChnc3RfYXV0b19hdWRpb19zaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpbXV4X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JICAqIGdzdC9kZWJ1Zy9icmVha215ZGF0YS5jOgotCSAgKiBnc3QvZGVidWcvZWZlbmNlLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSAgKiBnc3QvZGVidWcvbmVnb3RpYXRpb24uYzoKLQkgICogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6Ci0JICAqIGdzdC9kZWJ1Zy90ZXN0cGx1Z2luLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3RyZXYuYzoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSAgKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JICAqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6Ci0JICAqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzoKLQkgICogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoZ3N0X2FsYXdkZWNfYmFzZV9pbml0KToKLQkgICogZ3N0L2xhdy9hbGF3LWVuY29kZS5jOiAoZ3N0X2FsYXdlbmNfYmFzZV9pbml0KToKLQkgICogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzogKGdzdF9tdWxhd2RlY19iYXNlX2luaXQpOgotCSAgKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOiAoZ3N0X211bGF3ZW5jX2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9iYXNlX2luaXQpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X2Jhc2VfaW5pdCk6Ci0JICAqIGdzdC9tZWRpYW4vZ3N0bWVkaWFuLmM6Ci0JICAqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkgICogZ3N0L29sZGNvcmUvZ3N0bWQ1c2luay5jOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RtdWx0aWZpbGVzcmMuYzoKLQkgICogZ3N0L29sZGNvcmUvZ3N0cGlwZWZpbHRlci5jOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RzaGFwZXIuYzoKLQkgICogZ3N0L29sZGNvcmUvZ3N0c3RhdGlzdGljcy5jOgotCSAgKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwcGNtYXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cHBjbXVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6Ci0JICAqIGdzdC9zbXB0ZS9nc3RzbXB0ZS5jOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6IChnc3RfZ2FtbWFfYmFzZV9pbml0KToKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JICAoZ3N0X3ZpZGVvdGVtcGxhdGVfYmFzZV9pbml0KToKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9iYXNlX2luaXQpOgotCSAgYmV0dGVyL3VuaWZpZWQgbG9uZyBkZXNjcmlwdGlvbnMKLQkgIEZpeGVkICMzMzY2MDIKLQkgIFNvbWUgY2xlYW51cHMgdG8gYXVwYXJzZSwgZG9uJ3Qgc2VuZCBtdWx0aXBsZSBuZXdzZWdtZW50cy4KLQotMjAwNi0wMy0yOSAxNjowNjo1MCArMDAwMCAgTWljaGFlbCBEb21pbmljIEsgPG1ka0BtZGsub3JnLnBsPgotCi0JICBleHQvZHYvZ3N0ZHZkZW11eC4qOiBTZWVrIGluIFJFQURZIHBhdGNoLiBPbmx5IHdvcmtzIGZvciBwdWxsIGJhc2VkIG1vZGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZyb20gYSBwYXRjaCBieTogTWljaGFlbCBEb21pbmljIEsuIDxtZGsgYXQgbWRrIGRvdCBvcmcgZG90IHBsPgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2R2ZGVtdXhfcmVzZXQpLCAoZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQpLAotCSAgKGdzdF9kdmRlbXV4X3NlbmRfZXZlbnQpLCAoZ3N0X2R2ZGVtdXhfZmx1c2gpLCAoZ3N0X2R2ZGVtdXhfbG9vcCksCi0JICAoZ3N0X2R2ZGVtdXhfc2lua19hY3RpdmF0ZV9wdWxsKSwgKGdzdF9kdmRlbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4Lmg6Ci0JICBTZWVrIGluIFJFQURZIHBhdGNoLiBPbmx5IHdvcmtzIGZvciBwdWxsIGJhc2VkIG1vZGUuCi0JICBGaXhlcyAjMzIzODgwCi0KLTIwMDYtMDMtMjcgMTc6MDY6NDUgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSAgU21hbGwgZml4LCBub3cgcHdjIGRyaXZlciBjYW4gdGVsbCBhYm91dCBpdHMgYnVmZmVycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgU21hbGwgZml4LCBub3cgcHdjIGRyaXZlciBjYW4gdGVsbCBhYm91dCBpdHMgYnVmZmVycy4KLQotMjAwNi0wMy0yNyAxNDowOToxOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IEZpeCB0d28gY3Jhc2hlcnM6IGRvbid0IHVucmVmIHRoZSBzYW1lIGNhcHMgdHdpY2UsIGFuZCBzZXQgcGl4YnVmIGxvYWRlciB0byBOVUxMIGFmdGVyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl9mbHVzaCksCi0JICAoZ3N0X2dka19waXhidWZfZXZlbnQpOgotCSAgRml4IHR3byBjcmFzaGVyczogZG9uJ3QgdW5yZWYgdGhlIHNhbWUgY2FwcyB0d2ljZSwgYW5kCi0JICBzZXQgcGl4YnVmIGxvYWRlciB0byBOVUxMIGFmdGVyIGZyZWVpbmcgaXQuCi0KLTIwMDYtMDMtMjcgMTQ6MDA6MDIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9zcGVleC9nc3RzcGVleGVuYy4qOiBEb24ndCBsZWFrIGFkYXB0ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IChnc3Rfc3BlZXhlbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3NwZWV4ZW5jX2ZpbmFsaXplKSwgKGdzdF9zcGVleGVuY19zaW5rX3NldGNhcHMpLAotCSAgKGdzdF9zcGVleGVuY19jaGFpbik6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgRG9uJ3QgbGVhayBhZGFwdGVyLgotCSAgQSBwdXNoICphbHdheXMqIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyLCBldmVuIG9uCi0JICBlcnJvcnMuCi0JICBTbWFsbCBjbGVhbnVwcy4KLQotMjAwNi0wMy0yNiAxOTo1NjozNyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3RhZ2xpYi9nc3R0YWdsaWIuKjogRml4IG5ld3NlZ21lbnQgZXZlbnQgaGFuZGxpbmcgYSBiaXQuIFdlIG5lZWQgdG8gY2FjaGUgdGhlIGZpcnN0IG5ld3NlZ21lbnQgZXZlbnQsIGJlY2F1c2Ugd2UgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWIuY2M6Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGliLmg6Ci0JICBGaXggbmV3c2VnbWVudCBldmVudCBoYW5kbGluZyBhIGJpdC4gV2UgbmVlZCB0bwotCSAgY2FjaGUgdGhlIGZpcnN0IG5ld3NlZ21lbnQgZXZlbnQsIGJlY2F1c2Ugd2UgY2FuJ3QKLQkgIGFkanVzdCBvZmZzZXRzIHlldCB3aGVuIHdlIGdldCBpdCwgYXMgd2UgZG9uJ3QKLQkgIGtub3cgdGhlIHNpemUgb2YgdGhlIHRhZyB5ZXQgZm9yIHN1cmUgYXQgdGhhdCBwb2ludC4KLQkgIEFsc28gZG8gc29tZSBtaW5vciBjbGVhbmluZyB1cCBoZXJlIGFuZCB0aGVyZSBhbmQgYWRkCi0JICBzb21lIGRlYnVnIHN0YXRlbWVudHMuCi0KLTIwMDYtMDMtMjYgMTI6MjQ6NTYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiBDcmVhdGUgc291cmNlIHBhZCB3aXRob3V0IGxlYWtpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfYWRkX3NyY3BhZCk6Ci0JICBDcmVhdGUgc291cmNlIHBhZCB3aXRob3V0IGxlYWtpbmcuCi0KLTIwMDYtMDMtMjUgMjE6NTc6MjQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0dGFnbGliLmNjOiBXZSBkbyBub3Qgd2FudCB0byBwcm94eSB0aGUgY2FwcyBvbiB0aGUgc2luayBwYWQ7IG91ciBzb3VyY2UgcGFkIHNob3VsZCBoYXZlIGFwcGxpY2F0aW9uL3gtaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGliLmNjOgotCSAgV2UgZG8gbm90IHdhbnQgdG8gcHJveHkgdGhlIGNhcHMgb24gdGhlIHNpbmsgcGFkOyBvdXIKLQkgIHNvdXJjZSBwYWQgc2hvdWxkIGhhdmUgYXBwbGljYXRpb24veC1pZDMgY2FwczsgYWxzbywKLQkgIGRvbid0IHVzZSBhbHJlYWR5LWZyZWVkIHN0cmluZ3MgaW4gZGVidWcgbWVzc2FnZXM7Ci0JICBmaW5hbGx5LCBhZGp1c3QgYnVmZmVyIG9mZnNldHMgb24gYnVmZmVycyBzZW50IG91dC4KLQotMjAwNi0wMy0yNSAxMzowMjo1NSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiBPbGRlciBrZXJuZWxzIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGlzIHBhcnRpY3VsYXIgdjRsMiBmb3JtYXQsIHNvIGNvbW1lbnQgb3V0IHVudGlsIHRoaXMgZ2V0cyBmLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSAgT2xkZXIga2VybmVscyBkb24ndCBzZWVtIHRvIGhhdmUgdGhpcyBwYXJ0aWN1bGFyIHY0bDIgZm9ybWF0LAotCSAgc28gY29tbWVudCBvdXQgdW50aWwgdGhpcyBnZXRzIGZpeGVkIHByb3Blcmx5IChhbmQgbWFrZQotCSAgYnVpbGRib3RzIGhhcHB5KS4KLQotMjAwNi0wMy0yNSAwNTozMToyOCArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBjb21tb246Ci0JKiBzeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyZWxlbWVudC5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmg6Ci0JICBKdXN0IG1ha2UgZmV3IHRoaW5ncyBtb3JlIHJvYnVzdCBhbmQgYWxzbyBzb21lIGlkZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEp1c3QgbWFrZSBmZXcgdGhpbmdzIG1vcmUgcm9idXN0IGFuZCBhbHNvIHNvbWUgaWRlbnRhdGlvbi4KLQotMjAwNi0wMy0yNCAxOTo0MTowMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZXh0L2ZsYWMvOiBTcGlmaWZ5IGEgYml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19oYW5kbGVfc2Vla19ldmVudCk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgU3BpZmlmeSBhIGJpdC4KLQkgIEZpeCBkZWFkbHkgbG9jayBvcmRlciBlcnJvciBpbiBzZWVraW5nIGNvZGUsIFNUUkVBTV9MT0NLCi0JICBjYW5ub3QgYmUgdGFrZW4gd2l0aGluIExPQ0sgYW5kIHRoZSBzdHJlYW1pbmcgdmFyaWFibGVzIGFyZQotCSAgcHJvdGVjdGVkIHdpdGggdGhlIFNUUkVBTV9MT0NLIGFueXdheS4KLQotMjAwNi0wMy0yNCAxODo1NjoxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiB0aGlzIHBhdGNoIGNvbWJpbmVzIHRoZSBnbG9iYWwgaW5pdF9mcmFtZXMgd2l0aCB0aGUgc3RyZWFtIGluaXRfZnJhbWVzLiBSYXRpb25hbGUgYmVpbmcgdGhhdCB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wYXJzZV9pbmRleCksCi0JICAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fc2NhbiksCi0JICAoZ3N0X2F2aV9kZW11eF9tYXNzYWdlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspOgotCSAgdGhpcyBwYXRjaCBjb21iaW5lcyB0aGUgZ2xvYmFsIGluaXRfZnJhbWVzIHdpdGggdGhlIHN0cmVhbQotCSAgaW5pdF9mcmFtZXMuIFJhdGlvbmFsZSBiZWluZyB0aGF0IHRoZSBnbG9iYWwgZGVsYXkgc2hvdWxkCi0JICBiZSBzdWJ0cmFjdGVkIGZyb20gYW55IHN0cmVhbSBkZWxheS4KLQkgIEZpeGVzICMzMzU4NTguCi0KLTIwMDYtMDMtMjQgMTc6MTE6NTYgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0LzogdXNlIERFQlVHX0ZVTkNQVFIgZm9yIGNvbGxlY3RwYWRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9pbml0KToKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2luaXQpOgotCSAgKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzogKGdzdF9zbXB0ZV9pbml0KToKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfaW5pdCk6Ci0JICB1c2UgREVCVUdfRlVOQ1BUUiBmb3IgY29sbGVjdHBhZHMKLQotMjAwNi0wMy0yNCAwOTo1NDowMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiBEb24ndCBjcmFzaCB3aGVuIGVuY29kaW5nIGltYWdlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIHJvd3MgaXNuJ3QgYSBtdWx0aXBsZSBvZiAyKkRDVFNJWkUuIEFkZCBzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAoZ3N0X2pwZWdlbmNfaW5pdCksIChnc3RfanBlZ2VuY19jaGFpbik6Ci0JICBEb24ndCBjcmFzaCB3aGVuIGVuY29kaW5nIGltYWdlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIHJvd3MgaXNuJ3QKLQkgIGEgbXVsdGlwbGUgb2YgMipEQ1RTSVpFLiBBZGQgc29tZSBHU1RfREVCVUdfRlVOQ1BUUi4KLQotMjAwNi0wMy0yMyAyMToyODowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgTW9yZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IChzcGVleF9kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChkZWludGVybGVhdmVfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jOiAoaW50ZXJsZWF2ZV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiAoZ3N0X3dhdmVuY19jaGFuZ2Vfc3RhdGUpOgotCSAgTW9yZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gZml4ZXMuCi0KLTIwMDYtMDMtMjMgMjA6MTI6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9lc2QvZXNkc2luay4qOiBGaXggZXNkIGNob3BweSBwbGF5YmFjayBieSBjb25maWd1cmluZyBhdWRpb3NpbmsgY29ycmVjdGx5LiBGaXhlcyAjMzI1MTkxCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jbGFzc19pbml0KSwKLQkgIChnc3RfZXNkc2lua19nZXRjYXBzKSwgKGdzdF9lc2RzaW5rX29wZW4pLCAoZ3N0X2VzZHNpbmtfY2xvc2UpLAotCSAgKGdzdF9lc2RzaW5rX3ByZXBhcmUpLCAoZ3N0X2VzZHNpbmtfdW5wcmVwYXJlKSwKLQkgIChnc3RfZXNkc2lua19kZWxheSksIChnc3RfZXNkc2lua19yZXNldCk6Ci0JICAqIGV4dC9lc2QvZXNkc2luay5oOgotCSAgRml4IGVzZCBjaG9wcHkgcGxheWJhY2sgYnkgY29uZmlndXJpbmcgYXVkaW9zaW5rCi0JICBjb3JyZWN0bHkuIEZpeGVzICMzMjUxOTEKLQotMjAwNi0wMy0yMyAxOTo1NzozNCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogTWFrZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gdGhyZWFkLXNhZmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfY2hhbmdlX3N0YXRlKToKLQkgIE1ha2Ugc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHRocmVhZC1zYWZlLgotCi0yMDA2LTAzLTIzIDE2OjUwOjMyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogRG9uJ3QgdHJ5IHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUganVzdCBiZWNhdXNlIHRoZSBoZWFkZXIgY2xhaW1zIGEgYmlnZ2VyIHNpemUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9nZXRfdXBzdHJlYW1fc2l6ZSksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSk6Ci0JICBEb24ndCB0cnkgdG8gcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSBqdXN0IGJlY2F1c2UKLQkgIHRoZSBoZWFkZXIgY2xhaW1zIGEgYmlnZ2VyIHNpemUgKGxpa2Ugd2l0aCB0cnVuY2F0ZWQgZmlsZXMpLgotCi0yMDA2LTAzLTIzIDE1OjM2OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuKjogRGVsYXkgc291cmNlIHBhZCBjcmVhdGlvbiB1bnRpbCB3ZSBoYXZlIHRoZSBmaXJzdCBjaHVuayBvZiBtZWRpYSBkYXRhLCBzbyB0aGUgd2UgY2FuIGV4YW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksIChnc3Rfd2F2cGFyc2VfYWRkX3NyY19wYWQpLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksIChnc3Rfd2F2cGFyc2VfbG9vcCk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSAgRGVsYXkgc291cmNlIHBhZCBjcmVhdGlvbiB1bnRpbCB3ZSBoYXZlIHRoZSBmaXJzdCBjaHVuayBvZgotCSAgbWVkaWEgZGF0YSwgc28gdGhlIHdlIGNhbiBleGFtaW5lIHRoZSBkYXRhIGFuZCBhZGp1c3QgdGhlCi0JICBjYXBzIGFjY29yZGluZ2x5IGlmIHJlcXVpcmVkLiBUaGlzIG1ha2VzIHBsYXliYWNrIG9mIC53YXYKLQkgIGZpbGVzIHdpdGggRFRTLWRlY2xhcmVkLWFzLVBDTSBjb250ZW50IHdvcmsgKCMzMTMyNjYpLgotCi0yMDA2LTAzLTIyIDE5OjUwOjU2ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZCB2aWRlb2JhbGFuY2UgcGx1Z24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHZpZGVvYmFsYW5jZSBwbHVnbgotCi0yMDA2LTAzLTIyIDEzOjAyOjExICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgbWVudGlvbiBmaXhlZCBidWcgbnVtYmVyIGluIHRoZSBjaGFuZ2Vsb2cKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbWVudGlvbiBmaXhlZCBidWcgbnVtYmVyIGluIHRoZSBjaGFuZ2Vsb2cKLQotMjAwNi0wMy0yMiAxMzowMDozNCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC86IERvbid0IGF0dGVtcHQgdHlwZWZpbmRpbmcgb24gdG9vLXNob3J0IGJ1ZmZlcnMgdGhhdCBoYXZlIGJlZW4gY29tcGxldGVseSB0cmltbWVkIGF3YXkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9jaGFpbik6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAoZ3N0X2lkM2RlbXV4X2NoYWluKToKLQkgIERvbid0IGF0dGVtcHQgdHlwZWZpbmRpbmcgb24gdG9vLXNob3J0IGJ1ZmZlcnMgdGhhdCBoYXZlIGJlZW4KLQkgIGNvbXBsZXRlbHkgdHJpbW1lZCBhd2F5LgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAoaWQzZGVtdXhfcmVhZF9pZDN2Ml90YWcpOgotCSAgSW1wcm92ZSB0aGUgZGVidWcgb3V0cHV0Ci0KLTIwMDYtMDMtMjEgMTg6MTI6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9lc2QvZXNkc2luay5jOiBTb21lIGNsZWFudXBzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9lc2QvZXNkc2luay5jOiAoZ3N0X2VzZHNpbmtfY2xhc3NfaW5pdCksIChnc3RfZXNkc2lua19pbml0KSwKLQkgIChnc3RfZXNkc2lua19maW5hbGl6ZSksIChnc3RfZXNkc2lua19nZXRjYXBzKSwgKGdzdF9lc2RzaW5rX29wZW4pLAotCSAgKGdzdF9lc2RzaW5rX2Nsb3NlKSwgKGdzdF9lc2RzaW5rX3ByZXBhcmUpLCAoZ3N0X2VzZHNpbmtfd3JpdGUpLAotCSAgKGdzdF9lc2RzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfZXNkc2lua19nZXRfcHJvcGVydHkpOgotCSAgU29tZSBjbGVhbnVwcy4KLQkgIFJlc2V0IGZkIHRvIC0xIHdoZW4gd2UgY2xvc2UgdGhlbS4KLQotMjAwNi0wMy0yMSAxNjoxOTozNyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiB0aGUgT1BUSU9OUyByZXF1ZXN0IHJlc3VsdCBpcyBvcHRpb25hbCBzbyBkb24ndCBmYWlsIG9uIGl0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX29wZW4pOgotCSAgdGhlIE9QVElPTlMgcmVxdWVzdCByZXN1bHQgaXMgb3B0aW9uYWwgc28gZG9uJ3QKLQkgIGZhaWwgb24gaXQuCi0KLTIwMDYtMDMtMjEgMTQ6NTM6MzYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC86IGdjYyA0LjEgdW5yZWZlcmVuY2VkIHBvaW50ZXIgZml4ZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9yZXNldCk6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAoZ3N0X2lkM2RlbXV4X3Jlc2V0KToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9zZW5kX2V2ZW50KSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhbmdlX3N0YXRlKToKLQkgIGdjYyA0LjEgdW5yZWZlcmVuY2VkIHBvaW50ZXIgZml4ZXMuCi0KLTIwMDYtMDMtMjEgMTM6MDc6MzEgKzAwMDAgIFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taS5teW9oYW5lbkBub2tpYS5jb20+Ci0KLQkgIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiBGaXggYmxvY2sgYWxpZ25tZW50IGNhbGN1bGF0aW9uLiBBbGlnbm1lbnQgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGFkZGluZyB0aGUgYnl0ZSBvZmZzZXQgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBQYXRjaCBieTogVG9tbWkgTXnDtmjDpG5lbiAgPGV4dC10b21taSBkb3QgbXlvaGFuZW4gYXQgbm9raWEgZG90IGNvbT4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKToKLQkgIEZpeCBibG9jayBhbGlnbm1lbnQgY2FsY3VsYXRpb24uIEFsaWdubWVudCBzaG91bGQgYmUgZG9uZSBiZWZvcmUKLQkgIGFkZGluZyB0aGUgYnl0ZSBvZmZzZXQgd2hlcmUgdGhlIGRhdGEgc3RhcnRzICgjMzM1MjMxKS4KLQotMjAwNi0wMy0yMCAxODozNDoyMSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IEVuc3VyZSB0aGF0IHdlIHNldCBjb3JyZWN0IGNhcHMgb24gYnVmZmVycyB0aGF0IGFyZSB0cmFuc2ZlcnJlZCBkaXJlY3QgZnJvbSB0aGUgaW5wdXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzogKGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfcHVzaCk6Ci0JICBFbnN1cmUgdGhhdCB3ZSBzZXQgY29ycmVjdCBjYXBzIG9uIGJ1ZmZlcnMgdGhhdCBhcmUgdHJhbnNmZXJyZWQKLQkgIGRpcmVjdCBmcm9tIHRoZSBpbnB1dC4KLQotMjAwNi0wMy0yMCAxNzozODo0OCArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nb29tLzogRnJlZSBmaWx0ZXIgZGF0YSB3aGVuIGNsZWFuaW5nIHVwLiAoRml4ZXM6ICMzMzQ5OTUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2dvb20vZmlsdGVycy5jOiAoem9vbUZpbHRlckRlc3Ryb3kpOgotCSAgKiBnc3QvZ29vbS9nb29tX2NvcmUuYzogKGdvb21fY2xvc2UpOgotCSAgRnJlZSBmaWx0ZXIgZGF0YSB3aGVuIGNsZWFuaW5nIHVwLiAoRml4ZXM6ICMzMzQ5OTUpCi0KLTIwMDYtMDMtMjAgMDg6NTk6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC90YWdsaWIvZ3N0dGFnbGliLmg6IEZpeCBsZWZ0LW92ZXIgZ3N0X215X2ZpbHRlcl9nZXRfdHlwZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdHRhZ2xpYi5oOgotCSAgRml4IGxlZnQtb3ZlciBnc3RfbXlfZmlsdGVyX2dldF90eXBlLgotCi0yMDA2LTAzLTE3IDE2OjM0OjM2ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JKiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOgotCSAgSGF2ZSBhIHNob3cgbW91c2UgcG9pbnRlciBwcm9wZXJ0eSBhbmQgdXNlIGl0IGlmIHdlIGNhbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBIYXZlIGEgc2hvdyBtb3VzZSBwb2ludGVyIHByb3BlcnR5IGFuZCB1c2UgaXQgaWYgd2UgY2FuCi0KLTIwMDYtMDMtMTcgMTU6MzM6MDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogRG9uJ3QgY29tcGlsZSB1ZHAgYW5kIHJ0c3AgcGx1Z2lucyBvbiB3aW4zMiAobWluZ3cpIG9yIG90aGVyIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIDxzeXMvc29ja2V0Lmg+IGZvci4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIERvbid0IGNvbXBpbGUgdWRwIGFuZCBydHNwIHBsdWdpbnMgb24gd2luMzIgKG1pbmd3KSBvciBvdGhlcgotCSAgc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgPHN5cy9zb2NrZXQuaD4gZm9yIHNvbWUgcmVhc29uICgjMzE2MjAzKS4KLQotMjAwNi0wMy0xNiAxNzoyODowNyArMDAwMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXNAbWVyYWxpLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuaDoKLQkgIENoYW5nZSBidXMgcmVzZXQgaGFuZGxlciBzbyBpdCByZXBvcnRzIHVzZWZ1bCBpbmZvcm1hdGlvbiBzdWNoIGFzIHdoZXRoZXIgdGhlIGRldmljZSBiZWluZyB1c2VkIGNvbm5lY3RlZCBvciBkaXNjb25uZS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBDaGFuZ2UgYnVzIHJlc2V0IGhhbmRsZXIgc28gaXQgcmVwb3J0cyB1c2VmdWwgaW5mb3JtYXRpb24gc3VjaCBhcwotCSAgd2hldGhlciB0aGUgZGV2aWNlIGJlaW5nIHVzZWQgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZAotCi0yMDA2LTAzLTE2IDE2OjA2OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogV2Ugb25seSBjYXJlIGFib3V0IGdhaW4gYW5kIHBlYWsgZGF0YSBmb3IgdGhlIG1hc3RlciB2b2x1bWUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6Ci0JICAocGFyc2VfcmVsYXRpdmVfdm9sdW1lX2FkanVzdG1lbnRfdHdvKToKLQkgIFdlIG9ubHkgY2FyZSBhYm91dCBnYWluIGFuZCBwZWFrIGRhdGEgZm9yIHRoZSBtYXN0ZXIgdm9sdW1lLgotCi0yMDA2LTAzLTE2IDEzOjIyOjI4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogUmVhZCByZXBsYXkgZ2FpbiB0YWdzICgjMzIzNzIxKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKGlkM2RlbXV4X2lkM3YyX3BhcnNlX2ZyYW1lKSwKLQkgIChwYXJzZV9pZF9zdHJpbmcpLCAocGFyc2VfdW5pcXVlX2ZpbGVfaWRlbnRpZmllciksCi0JICAocGFyc2VfcmVsYXRpdmVfdm9sdW1lX2FkanVzdG1lbnRfdHdvKSwgKGlkM3YyX3RhZ190b190YWdsaXN0KToKLQkgIFJlYWQgcmVwbGF5IGdhaW4gdGFncyAoIzMyMzcyMSkuCi0KLTIwMDYtMDMtMTUgMjM6MTk6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCByZXF1aXJlbWVudHMgdG8gZ3N0LXBsdWdpbnMtYmFzZSBDVlMgYmVjYXVzZSBvZiBidWdneSBnc3RfdGFnX2Zyb21faWQzX3VzZXJfdGFnKCkgaW4gMC4xMC41LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgcmVxdWlyZW1lbnRzIHRvIGdzdC1wbHVnaW5zLWJhc2UgQ1ZTIGJlY2F1c2UKLQkgIG9mIGJ1Z2d5IGdzdF90YWdfZnJvbV9pZDNfdXNlcl90YWcoKSBpbiAwLjEwLjUuCi0KLTIwMDYtMDMtMTUgMjI6MzA6MjQgKzAwMDAgIFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmM6Ci0JICBGaXhlZCBvbmUgb2YgdGhlIGNhcHMgaW4gdGhlIGNvZGUgZnJvbSBtdWxhdyB0byBhbGF3LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXhlZCBvbmUgb2YgdGhlIGNhcHMgaW4gdGhlIGNvZGUgZnJvbSBtdWxhdyB0byBhbGF3LgotCi0yMDA2LTAzLTE1IDE2OjIxOjM4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiBFbnN1cmUgdGhhdCB3ZSBzZXQgY2FwcyBvbiB0aGUgYnVmZmVycyB3ZSBwYXNzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0dGFnZGVtdXguYzogKGdzdF90YWdfZGVtdXhfY2hhaW4pOgotCSAgRW5zdXJlIHRoYXQgd2Ugc2V0IGNhcHMgb24gdGhlIGJ1ZmZlcnMgd2UgcGFzcy4KLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9pZDNkZW11eF9zaW5rX2FjdGl2YXRlKToKLQkgIEVuc3VyZSB0aGF0IHdlIHNldCBjYXBzIG9uIHRoZSBidWZmZXJzIHdlIHBhc3MuCi0JICBVc2UgU1RSRUFNLCBUWVBFX05PVF9GT1VORCBhcyB0aGUgZXJyb3IgY2xhc3Mgd2hlbgotCSAgdHlwZWZpbmRpbmcgZmFpbHMuCi0KLTIwMDYtMDMtMTUgMTY6MTc6MTIgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIEZpeCBtZW1sZWFrIHdpdGggZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6IChnc3RfdGV4dF9vdmVybGF5X2luaXQpOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfaW5pdCksIChnc3RfZHZkZW11eF9hZGRfcGFkcyk6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfaW5pdCk6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19pbml0KSwKLQkgIChnc3RfanBlZ19kZWNfc2V0Y2Fwcyk6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX2luaXQpOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOiAoZ3N0X3Ntb2tlZGVjX2luaXQpOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiAoZ3N0X3Ntb2tlZW5jX2luaXQpOgotCSAgKiBleHQvbGlibW5nL2dzdG1uZ2RlYy5jOiAoZ3N0X21uZ2RlY19pbml0KSwKLQkgIChnc3RfbW5nZGVjX3NyY19nZXRjYXBzKToKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfaW5pdCksCi0JICAoZ3N0X3BuZ2RlY19jYXBzX2NyZWF0ZV9hbmRfc2V0KToKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogKGdzdF9wbmdlbmNfaW5pdCk6Ci0JICAqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6IChnc3RfbWlrbW9kX2luaXQpOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKGdzdF9zcGVleF9kZWNfaW5pdCk6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiAoZ3N0X2FscGhhX2luaXQpOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVfcGFyc2VfaW5pdCk6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaW5pdCksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKToKLQkgICogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzogKGdzdF9jdXR0ZXJfaW5pdCk6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuYzogKGdzdF9lZmVuY2VfaW5pdCksIChnc3RfZWZlbmNlX2dldHJhbmdlKSwKLQkgIChnc3RfZWZlbmNlX2NoZWNrZ2V0cmFuZ2UpOgotCSAgKiBnc3QvZGVidWcvbmVnb3RpYXRpb24uYzogKGdzdF9uZWdvdGlhdGlvbl9pbml0KToKLQkgICogZ3N0L2ZseC9nc3RmbHhkZWMuYzogKGdzdF9mbHhkZWNfaW5pdCk6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOiAoZ3N0X2FzdGVyaXNraDI2M19pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5jOiAoZ3N0X3J0cF9MMTZkZXBheV9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzogKGdzdF9ydHBMMTZwYXlfaW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzogKGdzdF9ydHBfYW1yX2RlcGF5X2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGRlcGF5LmM6IChnc3RfcnRwX2RlcGF5X2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmM6IChnc3RfcnRwX21wYV9kZXBheV9pbml0KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2luaXQpOgotCSAgKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzogKGdzdF9zbXB0ZV9pbml0KToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX2NyZWF0ZV9zb3VyY2VwYWQpOgotCSAgRml4IG1lbWxlYWsgd2l0aCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoKS4KLQkgIFRoaXMgdXNlcyBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSgpIGluc3RlYWQuCi0JICBGaXhlcyAjMzMzNTEyCi0KLTIwMDYtMDMtMTUgMTU6MDg6MjAgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogTGV0J3Mgbm90IGZvcmdldCB0byBjaGFpbiB1cCB0byB0aGUgcGFyZW50IGRpc3Bvc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfZGlzcG9zZSk6Ci0JICBMZXQncyBub3QgZm9yZ2V0IHRvIGNoYWluIHVwIHRvIHRoZSBwYXJlbnQgZGlzcG9zZS4KLQotMjAwNi0wMy0xNSAxNDozOToyNSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBTZXJpZXMgb2YgbWVtbGVhayBmaXhlczoKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jbGFzc19pbml0KSwKLQkgIChnc3RfcXRkZW11eF9pbml0KSwgKGdzdF9xdGRlbXV4X2Rpc3Bvc2UpLAotCSAgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFNlcmllcyBvZiBtZW1sZWFrIGZpeGVzOgotCSAgLSBVbnJlZiB0aGUgR3N0QWRhcHRlciBpbiBmaW5hbGl6ZS4KLQkgIC0gVXNlIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlKCksIHNob3J0ZXIgYW5kIHNhZmVyLgotCSAgLSBGcmVlIHVudXNlZCBRdERlbXV4U3RyZWFtIHdoZW4gbm90IHVzZWQuCi0KLTIwMDYtMDMtMTQgMTc6NTY6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCAtYmFzZSByZXF1aXJlbWVudCB0byAwLjEwLjUgZm9yIGdzdF90YWdfZnJvbV9pZDNfdXNlcl90YWcoKSwgdXNlZCBieSBpZDNkZW11eC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCdW1wIC1iYXNlIHJlcXVpcmVtZW50IHRvIDAuMTAuNSBmb3IgZ3N0X3RhZ19mcm9tX2lkM191c2VyX3RhZygpLAotCSAgdXNlZCBieSBpZDNkZW11eC4KLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaWQzZGVtdXhfaWQzdjJfcGFyc2VfZnJhbWUpLAotCSAgKHBhcnNlX3VzZXJfdGV4dF9pZGVudGlmaWNhdGlvbl9mcmFtZSksCi0JICAocGFyc2VfdW5pcXVlX2ZpbGVfaWRlbnRpZmllcik6Ci0JICBBZGQgc3VwcG9ydCBmb3IgVUZJRCBhbmQgVFhYWCBmcmFtZXMgYW5kIGV4dHJhY3QgbXVzaWNicmFpbnogdGFncy4KLQotMjAwNi0wMy0xNCAxNzoyNDowMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiBJbml0aWFsaXphdGlvbiBvZiB0aGUgZGVidWdnaW5nIGNhdGVnb3J5IHNob3VsZCBiZSBhcyBlYXJseSBhcyBwb3NzaWJsZSwgbW92aW5nIGl0IGZyb20gX2NsYXNzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfYmFzZV9pbml0KSwKLQkgIChnc3RfdjRsMnNyY19jbGFzc19pbml0KToKLQkgIEluaXRpYWxpemF0aW9uIG9mIHRoZSBkZWJ1Z2dpbmcgY2F0ZWdvcnkgc2hvdWxkIGJlIGFzIGVhcmx5IGFzIHBvc3NpYmxlLAotCSAgbW92aW5nIGl0IGZyb20gX2NsYXNzX2luaXQoKSB0byBiZWdpbm5pbmcgb2YgX2Jhc2VfaW5pdCgpLgotCi0yMDA2LTAzLTE0IDE1OjI4OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IENhdGNoIHNob3J0IHJlYWRzLCBsaWtlIHRoZXkgbWlnaHQgaGFwcGVuIHdpdGggdHJ1bmNhdGVkIGZpbGVzIChzZWUgIzMwNTI3OSk7IHJlbW92ZSB1bm5lY2Vzc2EuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSk6Ci0JICBDYXRjaCBzaG9ydCByZWFkcywgbGlrZSB0aGV5IG1pZ2h0IGhhcHBlbiB3aXRoIHRydW5jYXRlZAotCSAgZmlsZXMgKHNlZSAjMzA1Mjc5KTsgcmVtb3ZlIHVubmVjZXNzYXJ5IGluZGVudGF0aW9uLgotCi0yMDA2LTAzLTE0IDE0OjE4OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IEZpeCBESUIgaW1hZ2UgaW52ZXJzaW9uIGZvciBwaWN0dXJlcyB3aXRoIGEgZGVwdGggIT0gOCAoIzMwNTI3OSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9pbnZlcnQpOgotCSAgRml4IERJQiBpbWFnZSBpbnZlcnNpb24gZm9yIHBpY3R1cmVzIHdpdGggYQotCSAgZGVwdGggIT0gOCAoIzMwNTI3OSkuCi0KLTIwMDYtMDMtMTQgMDk6MjM6MDkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuKjogRml4IGR1cmF0aW9ucyBvbiBvdXRnb2luZyBidWZmZXJzIGFmdGVyIHNlZWtpbmcgaW4gTUpQRUcgZmlsZXMgKCMzMzQwODMpOyBzb21lIG1pbm9yIGNsZWFuLXVwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2pwZWdfZGVjX2NoYWluKSwgKGdzdF9qcGVnX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBGaXggZHVyYXRpb25zIG9uIG91dGdvaW5nIGJ1ZmZlcnMgYWZ0ZXIgc2Vla2luZwotCSAgaW4gTUpQRUcgZmlsZXMgKCMzMzQwODMpOyBzb21lIG1pbm9yIGNsZWFuLXVwcy4KLQotMjAwNi0wMy0xMyAxODoyODoxOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IEltcGxlbWVudCBzZWVrIGluIFJFQURZIChyZS1maXhlcyAjMzI3NjU4KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3Jlc2V0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhbmdlX3N0YXRlKToKLQkgIEltcGxlbWVudCBzZWVrIGluIFJFQURZIChyZS1maXhlcyAjMzI3NjU4KQotCi0yMDA2LTAzLTEzIDE3OjIyOjE5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvdGFnbGliL2dzdHRhZ2xpYi5jYzogQWRkIGd0ay1kb2MgYmx1cmIgKHVudXNlZCBmb3IgdGhlIHRpbWUgYmVpbmcpOyBtYXRjaCByZWdpc3RlcmVkIHBsdWdpbiBuYW1lIHRvIHRoZSBmaWxlbmFtZSAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL2dzdHRhZ2xpYi5jYzoKLQkgIEFkZCBndGstZG9jIGJsdXJiICh1bnVzZWQgZm9yIHRoZSB0aW1lIGJlaW5nKTsgbWF0Y2ggcmVnaXN0ZXJlZAotCSAgcGx1Z2luIG5hbWUgdG8gdGhlIGZpbGVuYW1lIG9mIHRoZSBwbHVnaW4gKHRhZ2xpYm11eCA9PiB0YWdsaWIpCi0KLTIwMDYtMDMtMTMgMTU6NDk6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGNsb3NlICMzMzM3ODQgdW5yZWYgdGhlIHJlc3VsdCBvZiBnc3RfcGFkX2dldF9wYXJlbnQoKSBieTogQ2hyaXN0b3BoZSBGZXJnZWF1LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9zZXRjYXBzKToKLQkgICogZXh0L2VzZC9lc2Rtb24uYzogKGdzdF9lc2Rtb25fZ2V0KToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOiAoZ3N0X2ZsYWNfdGFnX2NoYWluKToKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3NldGNhcHMpLAotCSAgKGdzdF9nZGtfcGl4YnVmX3NpbmtfZ2V0Y2Fwcyk6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX2dldGNhcHMpLAotCSAgKGdzdF9qcGVnZW5jX3NldGNhcHMpOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOiAoZ3N0X3Ntb2tlZGVjX2NoYWluKToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzogKGdzdF9zbW9rZWVuY19nZXRjYXBzKSwKLQkgIChnc3Rfc21va2VlbmNfc2V0Y2Fwcyk6Ci0JICAqIGV4dC9saWJtbmcvZ3N0bW5nZGVjLmM6IChnc3RfbW5nZGVjX3NpbmtsaW5rKSwKLQkgIChnc3RfbW5nZGVjX3NyY19nZXRjYXBzKToKLQkgICogZXh0L2xpYm1uZy9nc3RtbmdlbmMuYzogKGdzdF9tbmdlbmNfc2lua2xpbmspLAotCSAgKGdzdF9tbmdlbmNfY2hhaW4pOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOiAoZ3N0X3BuZ2VuY19zZXRjYXBzKToKLQkgICogZXh0L21pa21vZC9nc3RtaWttb2QuYzogKGdzdF9taWttb2Rfc3JjbGluayk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoc3BlZXhfZGVjX2NvbnZlcnQpLAotCSAgKHNwZWV4X2RlY19zcmNfZXZlbnQpLCAoc3BlZXhfZGVjX2NoYWluKToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfdmlkc2lua2Nvbm5lY3QpLAotCSAgKGdzdF9hdmltdXhfYXVkc2lua2Nvbm5lY3QpLCAoZ3N0X2F2aW11eF9oYW5kbGVfZXZlbnQpOgotCSAgKiBnc3QvZGVidWcvbmVnb3RpYXRpb24uYzogKGdzdF9uZWdvdGlhdGlvbl9nZXRjYXBzKSwKLQkgIChnc3RfbmVnb3RpYXRpb25fcGFkX2xpbmspLCAoZ3N0X25lZ290aWF0aW9uX2NoYWluKToKLQkgICogZ3N0L2ZseC9nc3RmbHhkZWMuYzogKGdzdF9mbHhkZWNfc3JjX3F1ZXJ5X2hhbmRsZXIpLAotCSAgKGdzdF9mbHhkZWNfY2hhaW4pOgotCSAgKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogKGRlaW50ZXJsZWF2ZV9zaW5rX2xpbmspLAotCSAgKGRlaW50ZXJsZWF2ZV9jaGFpbik6Ci0JICAqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6IChtdWxhd2VuY19zZXRjYXBzKToKLQkgICogZ3N0L21lZGlhbi9nc3RtZWRpYW4uYzogKGdzdF9tZWRpYW5fbGluayk6Ci0JICAqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6IChnc3RfbW9ub3Njb3BlX3NyY2Nvbm5lY3QpLAotCSAgKGdzdF9tb25vc2NvcGVfY2hhaW4pOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOiAoZ3N0X3J0cEwxNnBheV9zaW5rY29ubmVjdCk6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX3Npbmtfc2V0Y2Fwcyk6Ci0JICAqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzogKGdzdF9vc3hhdWRpb3NpbmtfY2hhaW4pOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzogKGdzdF9vc3hhdWRpb3NyY19nZXQpOgotCSAgY2xvc2UgIzMzMzc4NCB1bnJlZiB0aGUgcmVzdWx0IG9mIGdzdF9wYWRfZ2V0X3BhcmVudCgpCi0JICBieTogQ2hyaXN0b3BoZSBGZXJnZWF1LgotCi0yMDA2LTAzLTEzIDEwOjA1OjA5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgRml4IGJ1aWxkIG9mIHY0bDIgKHNpZ2gpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMTMgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRlY2wtbGlzdC50eHQ6Ci0JICAqIHN5cy92NGwyL01ha2VmaWxlLmFtOiBGaXggYnVpbGQgb2YgdjRsMiAoc2lnaCkKLQotMjAwNi0wMy0xMiAxNTozMzowMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiBnX2F0b21pY19pbnRfc2V0IGlzIG9ubHkgYXZhaWxhYmxlIGluIGdsaWItMC4xMCwgdXNlIGdzdF9hdG9taWNfaW50X2V0IGluc3RlYWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KSwKLQkgIChnc3RfdjRsMnNyY19idWZmZXJfcG9vbF9mcmVlKToKLQkgIGdfYXRvbWljX2ludF9zZXQgaXMgb25seSBhdmFpbGFibGUgaW4gZ2xpYi0wLjEwLCB1c2UgZ3N0X2F0b21pY19pbnRfZXQKLQkgIGluc3RlYWQuCi0KLTIwMDYtMDMtMTIgMTU6MjU6NTEgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6IFJlbW92ZSB0aW0ncyBhZGRpdGlvbiBvZiAiX3N0ZGludC5oIiBzaW5jZSBpdCBkb2Vzbid0IG1ha2UgdGhlIFBQQyBidWlsZGJvdCBoYXBweS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyZWxlbWVudC5oOgotCSAgUmVtb3ZlIHRpbSdzIGFkZGl0aW9uIG9mICJfc3RkaW50LmgiIHNpbmNlIGl0IGRvZXNuJ3QgbWFrZSB0aGUgUFBDCi0JICBidWlsZGJvdCBoYXBweS4KLQkgIEkgd2lsbCBqdXN0IHVzZSB0aGUgc2FtZSBjb21tZW50IFJvbmFsZCB1c2VkIHdoZW4gaGUgYWRkZWQgdGhlc2UgbGluZXM6Ci0JICBZZXQgQW5vdGhlciBIYWNrICh0bSkgZm9yIGtlcm5lbCBoZWFkZXIgYm9ya2VkbmVzcy4KLQotMjAwNi0wMy0xMiAxNTowMjowMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3RhZ2xpYi86IEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIE11c2ljQnJhaW56IElEcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvdGFnbGliL01ha2VmaWxlLmFtOgotCSAgKiBleHQvdGFnbGliL2dzdHRhZ2xpYi5jYzoKLQkgICogZXh0L3RhZ2xpYi9nc3R0YWdsaWIuaDoKLQkgIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIE11c2ljQnJhaW56IElEcy4KLQotMjAwNi0wMy0xMiAxNDo0Mzo1NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuaDogSW5jbHVkZSAiX3N0ZGludC5oIiBpbiBhbiBhdHRlbXB0IHRvIG1ha2UgdGhlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuaDoKLQkgIEluY2x1ZGUgIl9zdGRpbnQuaCIgaW4gYW4gYXR0ZW1wdCB0byBtYWtlIHRoZQotCSAgUFBDLWJ1aWxkYm90IGhhcHB5LgotCi0yMDA2LTAzLTExIDIyOjUwOjAzICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSogc3lzL3Y0bDIvZ3N0djRsMi5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnhvdmVybGF5LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuaDoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuaDoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuaDoKLQkgIFY0TDIgcG9ydGVkIHRvIDAuMTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFY0TDIgcG9ydGVkIHRvIDAuMTAuCi0KLTIwMDYtMDMtMTEgMTA6NTg6MDggKzAwMDAgIEFsZXggTGFuY2FzdGVyIDxhbGV4bGFuQGZlZG9yYXByb2plY3Qub3JnPgotCi0JICBleHQvdGFnbGliL2dzdHRhZ2xpYi5jYzogYW5kIGFkZCBzdXBwb3J0IGZvciBUQ09QIChjb3B5cmlnaHQpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMTEgIENocmlzdG9waGUgRmVyZ2VhdSAgPHRldWZAZ25vbWUub3JnPgotCSAgUGF0Y2ggYnk6IEFsZXggTGFuY2FzdGVyCi0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGliLmNjOiBmaXggd3JpdGluZyBvZiBUUE9TIHRhZ3MgKGFsYnVtIG51bWJlciksCi0JICBhbmQgYWRkIHN1cHBvcnQgZm9yIFRDT1AgKGNvcHlyaWdodCkKLQotMjAwNi0wMy0wOSAyMDowMjo0NCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBGaXggYnVpbGQgd2l0aCBnY2MtNC4xICgjMzI3MzU1KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9zZW5kX2V2ZW50KToKLQkgIEZpeCBidWlsZCB3aXRoIGdjYy00LjEgKCMzMjczNTUpLgotCi0yMDA2LTAzLTA5IDE3OjQ0OjE3ICswMDAwICBDaHJpc3RvcGhlIEZlcmdlYXUgPHRldWZAZ25vbWUub3JnPgotCi0JICBuZXcgaWQzdjIgbXV4ZXIgYmFzZWQgb24gVGFnTGliCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMDkgIENocmlzdG9waGUgRmVyZ2VhdSAgPHRldWZAZ25vbWUub3JnPgotCSAgcmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC90YWdsaWIvZ3N0dGFnbGliLmNjOgotCSAgKiBleHQvdGFnbGliL2dzdHRhZ2xpYi5oOiBuZXcgaWQzdjIgbXV4ZXIgYmFzZWQgb24gVGFnTGliCi0KLTIwMDYtMDMtMDkgMTE6NDc6MzIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9kdi9nc3RkdmRlbXV4LmM6IEhhbmRsZSBldmVudHMgaW4gcHVzaCBtb2RlIGJldHRlciwgY2FuIG5vdyBkbyBub24tZmx1c2hpbmcgc2Vla3MgaW4gcHVzaCBtb2RlIGFzIHdlbGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2ZGVtdXguYzogKGdzdF9kdmRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkgIChnc3RfZHZkZW11eF9jb252ZXJ0X3NlZ21lbnQpLCAoZ3N0X2R2ZGVtdXhfZGVtdXhfZnJhbWUpOgotCSAgSGFuZGxlIGV2ZW50cyBpbiBwdXNoIG1vZGUgYmV0dGVyLCBjYW4gbm93IGRvIG5vbi1mbHVzaGluZwotCSAgc2Vla3MgaW4gcHVzaCBtb2RlIGFzIHdlbGwuCi0KLTIwMDYtMDMtMDggMTI6MTY6MTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRXh0cmFjdCBkaXNjIG51bWJlciBhbmQgY291bnQgZnJvbSBmaWxlcyB0aGF0IHVzZSAnZGlzaycgaW5zdGVhZCBvZiAnZGlzYycgYXMgbm9kZSBpZGVudGlmaWVyIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2VfdWR0YSk6Ci0JICBFeHRyYWN0IGRpc2MgbnVtYmVyIGFuZCBjb3VudCBmcm9tIGZpbGVzIHRoYXQgdXNlCi0JICAnZGlzaycgaW5zdGVhZCBvZiAnZGlzYycgYXMgbm9kZSBpZGVudGlmaWVyIGZvciB0aGF0Ci0JICAoZml4ZXMgIzMzMjA2NikuCi0KLTIwMDYtMDMtMDcgMTc6MzE6MDMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOiBBcHBsaWVkIHBhdGNoIGZyb20gS2FpIFZlaG1hbmVuLCBmaXhlcyAjMzMzNjI0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOiAoZ3N0X2R5bnVkcHNpbmtfY2xhc3NfaW5pdCk6Ci0JICBBcHBsaWVkIHBhdGNoIGZyb20gS2FpIFZlaG1hbmVuLCBmaXhlcyAjMzMzNjI0LgotCi0yMDA2LTAzLTA2IDIyOjIyOjQ1ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogSW1wbGVtZW50IHBhbGV0dGVkIGFuZCBncmF5c2NhbGUgcG5nIGZpbGVzIGhhbmRsaW5nLiAoIzE1MDM2MykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDMtMDYgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCk6Ci0JICBJbXBsZW1lbnQgcGFsZXR0ZWQgYW5kIGdyYXlzY2FsZSBwbmcgZmlsZXMgaGFuZGxpbmcuCi0JICAoIzE1MDM2MykuCi0KLTIwMDYtMDMtMDYgMDA6MTA6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogZml4IGEgdGFnIGxpc3QgYXNzZXJ0IGZvbGxvdyBnc3QtcGx1Z2lucy1iYXNlL2V4dC9vZ2cvUkVBRE1FOyBzZXQgT0ZGU0VUIGFuZCBPRkZTRVRfRU5ELiAgTXUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogKGdzdF9zcGVleGVuY19zZXRfaGVhZGVyX29uX2NhcHMpLAotCSAgKGdzdF9zcGVleGVuY19jaGFpbik6Ci0JICBmaXggYSB0YWcgbGlzdCBhc3NlcnQKLQkgIGZvbGxvdyBnc3QtcGx1Z2lucy1iYXNlL2V4dC9vZ2cvUkVBRE1FOyBzZXQgT0ZGU0VUCi0JICBhbmQgT0ZGU0VUX0VORC4gIE11eGVzIGNvcnJlY3RseSB3aXRoIGdzdC1wbHVnaW5zLWJhc2UKLQkgID4gMC45LjMKLQotMjAwNi0wMy0wNSAxMzowMzo0MCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBBZGQgc3VwcG9ydCBmb3IgJzNJVkQnIGZvdXJjYyAoIzMzMzQwMykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEFkZCBzdXBwb3J0IGZvciAnM0lWRCcgZm91cmNjICgjMzMzNDAzKS4KLQotMjAwNi0wMy0wNCAyMDoxMTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4LzogVXNlIG5ldyB0eXBlZmluZCBoZWxwZXIgZnVuY3Rpb25zIGhlcmUgYXMgd2VsbCwgYW5kIGRvIHR5cGVmaW5kaW5nIGluIHB1bGwtbW9kZSBpZiB1cHN0cmVhbSBzdXBwb3J0cyB0Li4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9hZGRfc3JjcGFkKSwKLQkgIChnc3RfaWQzZGVtdXhfY2hhaW4pLCAoZ3N0X2lkM2RlbXV4X3NpbmtfYWN0aXZhdGUpOgotCSAgVXNlIG5ldyB0eXBlZmluZCBoZWxwZXIgZnVuY3Rpb25zIGhlcmUgYXMgd2VsbCwgYW5kCi0JICBkbyB0eXBlZmluZGluZyBpbiBwdWxsLW1vZGUgaWYgdXBzdHJlYW0gc3VwcG9ydHMgdGhhdC4KLQotMjAwNi0wMy0wNCAxODo1NzozNyArMDAwMCAgQmVuamFtaW4gUGluZWF1IDxiZW4ucGluZWF1QGdtYWlsLmNvbT4KLQotCSAgc3lzL3N1bmF1ZGlvLzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMsIGJyZWFrcyBidWlsZCBmcm9tIENWUwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX2N0cmxfZ2V0X3ZvbHVtZSksCi0JICAoZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9zZXRfdm9sdW1lKToKLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jOgotCSAgKGdzdF9zdW5hdWRpb21peGVyX3RyYWNrX25ldyk6Ci0JICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcywgYnJlYWtzIGJ1aWxkIGZyb20gQ1ZTCi0JICB3aXRoIC1XZXJyb3IgKCMzMzMzOTIsIHBhdGNoIGJ5OiBCZW5qYW1pbiBQaW5lYXUpCi0KLTIwMDYtMDMtMDMgMjM6NDU6MjMgKzAwMDAgIFPDqWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQotCSAgc3lzLzogc2lua3MgYXJlIG5vdyB1c2luZyBHU1RfUkFOS19QUklNQVJZIHRvIGJlIHVzZWQgd2l0aCBhdXRvZGVjdGVjdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9kaXJlY3RkcmF3OgotCSAgKiBzeXMvZGlyZWN0c291bmQ6Ci0JICBzaW5rcyBhcmUgbm93IHVzaW5nIEdTVF9SQU5LX1BSSU1BUlkgdG8gYmUgdXNlZCB3aXRoIGF1dG9kZWN0ZWN0aW9uCi0JICAqIHdpbjMyL3ZzNjoKLQkgIHByb2plY3QgZmlsZXMgdXBkYXRlZCB0byBmaXggc29tZSBidWdzCi0JICAqIHdpbjMyL3ZzNzoKLQkgICogd2luMzIvdnM4OgotCSAgdnM3IGFuZCB2czggcHJvamVjdCBmaWxlcyBhZGRlZAotCi0yMDA2LTAzLTAzIDE4OjM2OjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGRlZCB3YXZwYXJzZSBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgQWRkZWQgd2F2cGFyc2UgZG9jcy4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3dhdnBhcnNlX3Jlc2V0KSwgKGdzdF93YXZwYXJzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCksIChnc3Rfd2F2cGFyc2VfcGFyc2VfZmlsZV9oZWFkZXIpLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1faW5pdCksIChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLCAoZ3N0X3dhdnBhcnNlX3NlbmRfZXZlbnQpLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksIChnc3Rfd2F2cGFyc2VfbG9vcCksCi0JICAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCksIChnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZV9wdWxsKSwKLQkgIChnc3Rfd2F2cGFyc2VfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JICBJbXBsZW1lbnQgc2VlayBpbiBSRUFEWSAoZml4ZXMgIzMyNzY1OCkKLQkgIEFkZGVkIGRvY3MgYW5kIGRpZCBzb21lIGNsZWFudXBzLgotCi0yMDA2LTAzLTAzIDE3OjUxOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4Lio6IElmIHdlIGhhdmUgYW4gaW5kZXgsIHVzZSBhIGR1cmF0aW9uIGJhc2VkIG9uIHRoZSBpbmRleCBpbnN0ZWFkIG9mIGJsaW5kbHkgdHJ1c3RpbmcgdGhlIGluZm9ybWEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCSAgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksCi0JICAoZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXgpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcik6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIElmIHdlIGhhdmUgYW4gaW5kZXgsIHVzZSBhIGR1cmF0aW9uIGJhc2VkIG9uIHRoZSBpbmRleCBpbnN0ZWFkCi0JICBvZiBibGluZGx5IHRydXN0aW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc3RyZWFtIGhlYWRlcnMKLQkgIChmaXhlcyAjMzMxODE3KS4KLQotMjAwNi0wMy0wMyAxNTo1MDo0MCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zLzogQWRkZWQgc21va2UgYW5kIGpwZWcgdG8gdGhlIGRvY3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5OgotCSAgQWRkZWQgc21va2UgYW5kIGpwZWcgdG8gdGhlIGRvY3MuCi0JICAqIGV4dC9qcGVnL01ha2VmaWxlLmFtOgotCSAgKiBleHQvanBlZy9nc3RqcGVnLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdlbmMuaDoKLQkgICogZXh0L2pwZWcvZ3N0c21va2VkZWMuYzogKGdzdF9zbW9rZWRlY19pbml0KSwKLQkgIChnc3Rfc21va2VkZWNfY2hhaW4pOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWRlYy5oOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiAoZ3N0X3Ntb2tlZW5jX2NoYWluKToKLQkgICogZXh0L2pwZWcvZ3N0c21va2VlbmMuaDoKLQkgICogZXh0L2pwZWcvc21va2Vjb2RlYy5oOgotCSAgUG9ydCBzbW9rZWRlYyAoZml4ZXMgIzMzMTkwNSkuCi0JICBBZGRlZCBzb21lIGRvY3MuCi0JICBTb21lIGNsZWFudXBzLgotCi0yMDA2LTAzLTAzIDE0OjM5OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGRlZCB2aWRlb2JhbGFuY2UgYW5kIHZpZGVvZmxpcCB0byB0aGUgZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICBBZGRlZCB2aWRlb2JhbGFuY2UgYW5kIHZpZGVvZmxpcCB0byB0aGUgZG9jcy4KLQkgICogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JICAoZ3N0X3ZpZGVvX2JhbGFuY2VfdXBkYXRlX3RhYmxlc19wbGFuYXI0MTEpLAotCSAgKGdzdF92aWRlb19iYWxhbmNlX2lzX3Bhc3N0aHJvdWdoKSwKLQkgIChnc3RfdmlkZW9fYmFsYW5jZV91cGRhdGVfcHJvcGVydGllcyksIChvaWxfdGFibGVsb29rdXBfdTgpLAotCSAgKGdzdF92aWRlb19iYWxhbmNlX3BsYW5hcjQxMV9pcCksIChnc3RfdmlkZW9fYmFsYW5jZV9zZXRfY2FwcyksCi0JICAoZ3N0X3ZpZGVvX2JhbGFuY2VfdHJhbnNmb3JtX2lwKSwgKGdzdF92aWRlb19iYWxhbmNlX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2JhbGFuY2VfZmluYWxpemUpLCAoZ3N0X3ZpZGVvX2JhbGFuY2VfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2JhbGFuY2VfaW5pdCksIChnc3RfdmlkZW9fYmFsYW5jZV9pbnRlcmZhY2Vfc3VwcG9ydGVkKSwKLQkgIChnc3RfdmlkZW9fYmFsYW5jZV9pbnRlcmZhY2VfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2JhbGFuY2VfY29sb3JiYWxhbmNlX2xpc3RfY2hhbm5lbHMpLAotCSAgKGdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWUpLAotCSAgKGdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9nZXRfdmFsdWUpLAotCSAgKGdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9pbml0KSwKLQkgIChnc3RfdmlkZW9fYmFsYW5jZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3ZpZGVvX2JhbGFuY2VfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfdmlkZW9fYmFsYW5jZV9nZXRfdHlwZSksIChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaDoKLQkgIFBvcnRlZCB0byAwLjEwLiAoRml4ZXMgIzMyNjE2MCkKLQkgIEFkZGVkIGRvY3MuCi0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzoKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgQWRkZWQgZG9jcy4KLQotMjAwNi0wMy0wMyAxMTowNzo0MSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBVc2UgR1NUX1dBUk5JTkcgaW5zdGVhZCBvZiBHU1RfRVJST1IgZm9yIGFsbCB0aGUgdG9vIHNob3J0L2xvbmcgYXRvbXMgd2hlbiBwYXJzaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFVzZSBHU1RfV0FSTklORyBpbnN0ZWFkIG9mIEdTVF9FUlJPUiBmb3IgYWxsIHRoZSB0b28gc2hvcnQvbG9uZyBhdG9tcwotCSAgd2hlbiBwYXJzaW5nLgotCSAgQWxzbyBsZXQncyBiZSBhIGJpdCBsZXNzIHZ1bGdhciBpbiBvdXIgd2FybmluZyBtZXNzYWdlcyA6KQotCi0yMDA2LTAzLTAyIDE1OjE0OjIyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IEJ1bXAgcmVxdWlyZW1lbnRzIHRvIGN1cnJlbnQgY29yZSBhbmQgLWJhc2UgQ1ZTIChjb3JlIGZvciBuZXcgdHlwZWZpbmQgaGVscGVyIEFQSSwgYW5kIC1iYXNlIGZvciB0aGUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCdW1wIHJlcXVpcmVtZW50cyB0byBjdXJyZW50IGNvcmUgYW5kIC1iYXNlIENWUwotCSAgKGNvcmUgZm9yIG5ldyB0eXBlZmluZCBoZWxwZXIgQVBJLCBhbmQgLWJhc2UgZm9yIHRoZQotCSAgV0FWRk9STUFURVggc3VwcG9ydCB0aGF0IHdhcyBhZGRlZCB0byBsaWJnc3RyaWZmIGFuZAotCSAgaXMgbmVlZGVkIGJ5IHdhdnBhcnNlKS4KLQkgICogZ3N0L2FwZXRhZy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAoZ3N0X3RhZ19kZW11eF9jaGFpbiksCi0JICAoZ3N0X3RhZ19kZW11eF9zaW5rX2FjdGl2YXRlKToKLQkgIFVzZSBuZXcgdHlwZWZpbmQgaGVscGVycyBmb3IgdHlwZWZpbmRpbmcgaW5zdGVhZCBvZiBvdXIKLQkgIGhvbWUtZ3Jvd24gc3R1ZmY7IGFsc28sIGRvIHR5cGVmaW5kaW5nIGluIHB1bGwtbW9kZSBpZgotCSAgdXBzdHJlYW0gc3VwcG9ydHMgdGhhdC4KLQotMjAwNi0wMi0yOCAxMTo1OTo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBDYW4ndCBkaXZpZGUgdGhyb3VnaCB6ZXJvIChzdXBwcmVzcyB3YXJuaW5nIGluIGNhc2Ugb2Ygc3RyZWFtIHdpdGggb25lIHNpbmdsZSBzdGlsbCBwaWN0dXJlKSAoLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIENhbid0IGRpdmlkZSB0aHJvdWdoIHplcm8gKHN1cHByZXNzIHdhcm5pbmcgaW4gY2FzZSBvZgotCSAgc3RyZWFtIHdpdGggb25lIHNpbmdsZSBzdGlsbCBwaWN0dXJlKSAoc2VlICMzMjcwODMpCi0KLTIwMDYtMDItMjggMTA6NDA6MDEgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSAgcmVtb3ZlIGNvbmZsaWN0IGluZGljYXRvcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgY29uZmxpY3QgaW5kaWNhdG9yCi0KLTIwMDYtMDItMjggMTA6Mzk6MDggKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSAgYWRkIG1pc3NpbmcgZW50cnkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1pc3NpbmcgZW50cnkKLQotMjAwNi0wMi0yOCAxMDoyOToxNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IFVzZSBERUJVR19PQkpFQ1QgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpLAotCSAgKGdzdF93YXZwYXJzZV9wYWRfY29udmVydCksIChnc3Rfd2F2cGFyc2Vfc3JjcGFkX2V2ZW50KSwKLQkgIChnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZSksIChnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZV9wdWxsKToKLQkgIFVzZSBERUJVR19PQkpFQ1QgbW9yZS4KLQotMjAwNi0wMi0yOCAxMDoyMjoxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZG9jcy9wbHVnaW5zLzogQWRkZWQgZHZkZWMgYW5kIGR2ZGVtdXggdG8gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgIEFkZGVkIGR2ZGVjIGFuZCBkdmRlbXV4IHRvIGRvY3MuCi0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2Jhc2VfaW5pdCksIChnc3RfZHZkZWNfY2hhaW4pOgotCSAgQWRkZWQgZG9jcy4KLQkgIENoZWNrIGZyYW1lIHNpemVzIHNvIHdlIGRvbid0IGNyYXNoIHdoZW4gZG9uJ3QgaGF2ZSBlbm91Z2gKLQkgIGRhdGEuCi0JICBTZW5kIG5pY2UgZXJyb3IgbWVzc2FnZXMgb24gZXJyb3IuCi0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9iYXNlX2luaXQpLAotCSAgKGdzdF9kdmRlbXV4X2NsYXNzX2luaXQpLCAoZ3N0X2R2ZGVtdXhfaW5pdCksCi0JICAoZ3N0X2R2ZGVtdXhfZmluYWxpemUpLCAoZ3N0X2R2ZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9kdmRlbXV4X3NyY19jb252ZXJ0KSwgKGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCksCi0JICAoZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5KSwgKGdzdF9kdmRlbXV4X3NpbmtfcXVlcnkpLAotCSAgKGdzdF9kdmRlbXV4X3B1c2hfZXZlbnQpLCAoZ3N0X2R2ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9kdmRlbXV4X2NvbnZlcnRfc3JjX3BhaXIpLCAoZ3N0X2R2ZGVtdXhfY29udmVydF9zaW5rX3BhaXIpLAotCSAgKGdzdF9kdmRlbXV4X2NvbnZlcnRfc3JjX3RvX3NpbmspLCAoZ3N0X2R2ZGVtdXhfaGFuZGxlX3B1c2hfc2VlayksCi0JICAoZ3N0X2R2ZGVtdXhfZG9fc2VlayksIChnc3RfZHZkZW11eF9oYW5kbGVfcHVsbF9zZWVrKSwKLQkgIChnc3RfZHZkZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwgKGdzdF9kdmRlbXV4X2RlbXV4X2F1ZGlvKSwKLQkgIChnc3RfZHZkZW11eF9kZW11eF92aWRlbyksIChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSksCi0JICAoZ3N0X2R2ZGVtdXhfZmx1c2gpLCAoZ3N0X2R2ZGVtdXhfY2hhaW4pLCAoZ3N0X2R2ZGVtdXhfbG9vcCksCi0JICAoZ3N0X2R2ZGVtdXhfc2lua19hY3RpdmF0ZV9wdXNoKSwgKGdzdF9kdmRlbXV4X3NpbmtfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X2R2ZGVtdXhfc2lua19hY3RpdmF0ZSksIChnc3RfZHZkZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSAgQWRkZWQgZG9jcy4KLQkgIEltcGxlbWVudCBwdWxsIG1vZGUuCi0JICBGaXggbWVtbGVha3MuCi0JICBSZWR1Y2UgbWVtY3B5IGZvciB0aGUgdmlkZW8gZGVtdXhpbmcuCi0KLTIwMDYtMDItMjggMDk6MjE6MjcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvYW5ub2RleC86IEFkZCBhIGxpdHRsZSBleHRyYSBkZWJ1Zy4gTWFrZSB0aGUgZGVjb2RlciBub3QgcmV0dXJuIE5PVF9MSU5LRUQsIGFzIHdlIHdhbnQgdG8gY29udGludWUgZGVjb2RpbmcgYWxsIEMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6IChnc3RfY21tbF9kZWNfc2lua19ldmVudCksCi0JICAoZ3N0X2NtbWxfZGVjX25ld19idWZmZXIpLCAoZ3N0X2NtbWxfZGVjX3BhcnNlX3ByZWFtYmxlKSwKLQkgIChnc3RfY21tbF9kZWNfcGFyc2VfaGVhZCksIChnc3RfY21tbF9kZWNfcHVzaF9jbGlwKToKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbHBhcnNlci5jOiAoZ3N0X2NtbWxfcGFyc2VyX3BhcnNlX2NodW5rKToKLQkgIEFkZCBhIGxpdHRsZSBleHRyYSBkZWJ1Zy4gTWFrZSB0aGUgZGVjb2RlciBub3QgcmV0dXJuIE5PVF9MSU5LRUQsCi0JICBhcyB3ZSB3YW50IHRvIGNvbnRpbnVlIGRlY29kaW5nIGFsbCBDTU1MIGFuZCBlbWl0dGluZyB0YWdzLgotCi0yMDA2LTAyLTI3IDE0OjM3OjI5ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZCBhbm5vZGV4IHBsdWdpbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYW5ub2RleCBwbHVnaW4KLQotMjAwNi0wMi0yNyAxNDowMDoxOCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBleHQvYW5ub2RleC9nc3Rza2VsdGFnLio6IERlbGV0ZWQ7IHRoZXNlIGZpbGVzIGFyZW4ndCB1c2VkIGFueSBtb3JlIGVpdGhlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYW5ub2RleC9nc3Rza2VsdGFnLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdHNrZWx0YWcuaDoKLQkgIERlbGV0ZWQ7IHRoZXNlIGZpbGVzIGFyZW4ndCB1c2VkIGFueSBtb3JlIGVpdGhlci4KLQotMjAwNi0wMi0yNSAyMDozNzoyOSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGV4dC9NYWtlZmlsZS5hbTogRml4IGRpc3QtY2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDItMjUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZXh0L01ha2VmaWxlLmFtOiBGaXggZGlzdC1jaGVjay4KLQotMjAwNi0wMi0yNSAxOTozNjoyNCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzogRml4IGFub3RoZXIgbWVtbGVhay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0yNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6IChnc3RfY21tbF9lbmNfcHVzaF9jbGlwKTogRml4IGFub3RoZXIKLQkgIG1lbWxlYWsuCi0KLTIwMDYtMDItMjUgMTk6MDc6NDEgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBGaXggYSBtZW1sZWFrIGluIGdzdF9jbW1sX3RyYWNrX2xpc3RfYWRkX2NsaXAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDItMjUgIEFsZXNzYW5kcm8gRGVjaW5hIDxhbGVzc2FuZHJvQG5udmEub3JnPgotCSAgKiBleHQvYW5ub2RleC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2Fubm9kZXgvZ3N0YW5ub2RleC5jOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWxlbmMuYzoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbHBhcnNlci5jOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1scGFyc2VyLmg6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWx1dGlscy5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxlbmMuYzoKLQkgIEZpeCBhIG1lbWxlYWsgaW4gZ3N0X2NtbWxfdHJhY2tfbGlzdF9hZGRfY2xpcC4KLQkgIEhhbmRsZSBvdmVyZmxvd3MgaW4gY2xpcCdzIHN0YXJ0IGFuZCBlbmQgdGltZXMuCi0JICBBZGQgdGhlICJlbmNvZGVkIiBwYXJhbWV0ZXIgdG8gY21tbGRlYyBhbmQgY21tbGVuYyBjYXBzLgotCSAgRG8gbm90IHBhcnNlIGp1bmsgYXQgdGhlIGVuZCBvZiBhIENNTUwgcHJlYW1ibGUgYnVmZmVyLgotCSAgUmVnaXN0ZXIgYSBsaWJ4bWwgZXJyb3IgaGFuZGxlciB0byBub3QgcHJpbnQgc3R1ZmYgb24gc3RkZXJyLgotCSAgQ2hlY2sgZm9yIGJhZCBjbGlwIHN0YXJ0IGFuZCBlbmQgdGltZXMgaW4gdGhlIHRlc3RzdWl0ZXMuCi0KLTIwMDYtMDItMjUgMTE6Mzc6MTAgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBleHQvYW5ub2RleC86IEZpeCBwb3NzaWJsZSBtZW1sZWFrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0yNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6IChnc3RfY21tbF9kZWNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2NtbWxfZGVjX2ZpbmFsaXplKSwgKGdzdF9jbW1sX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmM6IChnc3RfY21tbF9lbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2NtbWxfZW5jX2ZpbmFsaXplKSwgKGdzdF9jbW1sX2VuY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sdXRpbHMuYzogKGdzdF9jbW1sX3RyYWNrX2xpc3RfZGVzdHJveSk6IEZpeAotCSAgcG9zc2libGUgbWVtbGVha3MuCi0KLTIwMDYtMDItMjQgMjM6NTI6MjggKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICB0ZXN0cy9jaGVjay86IEZpeCB0ZXN0cyBzbyB0aGF0IHRoZXkgdXNlIHRoZSBwbHVnaW5zLWJhc2UgdGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0yNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiB0ZXN0cy9jaGVjay9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvY21tbGRlYy5jOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZW5jLmM6IEZpeCB0ZXN0cyBzbyB0aGF0IHRoZXkgdXNlCi0JICB0aGUgcGx1Z2lucy1iYXNlIHRhZ3MuCi0KLTIwMDYtMDItMjQgMjM6MzY6NTggKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBleHQvTWFrZWZpbGUuYW06IFJlLWVuYWJsZSBtb2R1bGUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDItMjUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZXh0L01ha2VmaWxlLmFtOiBSZS1lbmFibGUgbW9kdWxlLgotCi0yMDA2LTAyLTI0IDIzOjMyOjE0ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06IEZvcmdvdCB0byByZW1vdmUgdGhhdCB0ZXN0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTI1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBGb3Jnb3QgdG8gcmVtb3ZlIHRoYXQgdGVzdC4KLQotMjAwNi0wMi0yNCAyMzozMTowOCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIFRyeSB0byBmaXggQW5ub2RleCBwbHVnaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDItMjUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZXh0L2Fubm9kZXgvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGFubm9kZXguYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGRlYy5jOgotCSAgKiBleHQvYW5ub2RleC9nc3Rza2VsZGVjLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdHNrZWxkZWMuaDoKLQkgICogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL3NrZWxkZWMuYzogVHJ5IHRvIGZpeCBBbm5vZGV4IHBsdWdpbi4KLQotMjAwNi0wMi0yNCAyMzowNjoyNyArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEaXNhYmxlIHRob3NlIGNoZWNrcyBhcyB3ZWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTI1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOiBEaXNhYmxlIHRob3NlIGNoZWNrcyBhcyB3ZWxsLgotCi0yMDA2LTAyLTI0IDIyOjQ5OjI5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZXh0L01ha2VmaWxlLmFtOiBEaXNhYmxlIGFubm9kZXggZm9yIG5vdyB1bnRpbCB3ZSBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIGl0IGJ1aWxkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTI0ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGV4dC9NYWtlZmlsZS5hbTogRGlzYWJsZSBhbm5vZGV4IGZvciBub3cgdW50aWwgd2UgZmlndXJlIG91dAotCSAgaG93IHRvIG1ha2UgaXQgYnVpbGQuCi0JICAqIGV4dC9nZGtfcGl4YnVmL01ha2VmaWxlLmFtOiBOb3RlIGZvciBUaG9tYXMgOgotCSAgQWRkIGEgcnVsZSB0byB5b3VyIGNoZWNrbGlzdCA6ICJwbGVhc2UgdHJ5IHRvIGF0IGxlYXN0IGJ1aWxkCi0JICB3aGF0IHlvdSBhcmUgZ29pbmcgdG8gY29tbWl0IGludG8gLWdvb2QsIG9yIGlmIHlvdSBhcmUgdG9vIGxhenkKLQkgIHRvIGRvIHRoYXQsIHBsZWFzZSBjaGVjayB0aGF0IHRoZSBidWlsZGJvdHMgYXJlIG5vdCBjcnlpbmcgYmVjYXVzZQotCSAgb2YgeW91ciBjb21taXQuIgotCi0yMDA2LTAyLTI0IDE5OjUxOjI5ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9nZGtfcGl4YnVmL01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuaDoKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5oOgotCSAgSSdtIHRvbyBsYXp5IHRvIGNvbW1lbnQgdGhpcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBHZGtwaXhidWYgcG9ydGVkIGZyb20gMC44IHRvIDAuMTAgYnkgUmVuYXRvIEZpbGhvIDxyZW5hdG8uZmlsaG9AaW5kdC5vcmcuYnI+LiBnc3RfbG9hZGVyIGFuZCBnZGtwaXhidWZhbmltYXRpb24gc3RpbGwgbmVlZCBwb3J0LgotCi0yMDA2LTAyLTI0IDE5OjQ5OjMyICswMDAwICBGYWJyaXppbyBHZW5uYXJpIDxmYWJyaXppby5nZUB0aXNjYWxpLml0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBzdXBwb3J0IGZvciBwYWxldHRpc2VkIEFwcGxlIFNNQyB2aWRlb3MgKCMzMjcwNzUsIGJhc2VkIG9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksCi0JICAocXRkZW11eF9wYXJzZV90cmFrKSwgKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICBBZGQgc3VwcG9ydCBmb3IgcGFsZXR0aXNlZCBBcHBsZSBTTUMgdmlkZW9zICgjMzI3MDc1LCBiYXNlZCBvbgotCSAgcGF0Y2ggYnk6IEZhYnJpemlvIEdlbm5hcmkgPGZhYnJpemlvIGRvdCBnZSBhdCB0aXNjYWxpIGRvdCBpdD4pLgotCi0yMDA2LTAyLTI0IDE5OjA3OjEwICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIEFkZCBBbm5vZGV4IGVsZW1lbnRzIGZyb20gQWxlc3NlbmRybyBEZWNpbmE6IHNrZWxldG9uIGFuZCBDTU1MLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2Fubm9kZXgvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGFubm9kZXguYzoKLQkgICogZXh0L2Fubm9kZXgvZ3N0YW5ub2RleC5oOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZGVjLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWxkZWMuaDoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbGVuYy5jOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sZW5jLmg6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWxwYXJzZXIuYzoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbHBhcnNlci5oOgotCSAgKiBleHQvYW5ub2RleC9nc3RjbW1sdGFnLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWx0YWcuaDoKLQkgICogZXh0L2Fubm9kZXgvZ3N0Y21tbHV0aWxzLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdGNtbWx1dGlscy5oOgotCSAgKiBleHQvYW5ub2RleC9nc3Rza2VsZGVjLmM6Ci0JICAqIGV4dC9hbm5vZGV4L2dzdHNrZWxkZWMuaDoKLQkgICogZXh0L2Fubm9kZXgvZ3N0c2tlbHRhZy5jOgotCSAgKiBleHQvYW5ub2RleC9nc3Rza2VsdGFnLmg6Ci0JICAqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9jbW1sZGVjLmM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2NtbWxlbmMuYzoKLQkgICogdGVzdHMvY2hlY2svZWxlbWVudHMvc2tlbGRlYy5jOgotCSAgQWRkIEFubm9kZXggZWxlbWVudHMgZnJvbSBBbGVzc2VuZHJvIERlY2luYTogc2tlbGV0b24gYW5kIENNTUwuCi0JICBJbmNsdWRlcyB0ZXN0cyAmIGRvY3MsIG9oIG15ISBQYXNzZXMgVGhvbWFzJ3MgLWdvb2QgY2hlY2tsaXN0Ci0JICBlbnRpcmVseS4gV293LgotCi0yMDA2LTAyLTI0IDE3OjA5OjU2ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGF1dG9nZW4uc2g6IENoZWNrIGZvciBhdXRvbWFrZSAxLjkgYXMgd2VsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBhdXRvZ2VuLnNoOgotCSAgQ2hlY2sgZm9yIGF1dG9tYWtlIDEuOSBhcyB3ZWxsLgotCi0yMDA2LTAyLTI0IDE0OjQ5OjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IENoYW5nZSBtaW4uIHNhbXBsZSByYXRlIHRvIDhrSHogdG8gbWF0Y2ggZmxhY2RlYydzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkgIENoYW5nZSBtaW4uIHNhbXBsZSByYXRlIHRvIDhrSHogdG8gbWF0Y2ggZmxhY2RlYydzLgotCi0yMDA2LTAyLTIzIDIwOjA4OjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvY2Rpby9NYWtlZmlsZS5hbTogQWRkIEdTVF9CQVNFX0NGTEFHUyBhbmQgR1NUX0JBU0VfTElCUyAoc2VlbXMgdG8gYmUgcmVxdWlyZWQgZm9yIEN5Z3dpbiwgc2VlICMzMTcwNDgpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NkaW8vTWFrZWZpbGUuYW06Ci0JICBBZGQgR1NUX0JBU0VfQ0ZMQUdTIGFuZCBHU1RfQkFTRV9MSUJTIChzZWVtcyB0byBiZQotCSAgcmVxdWlyZWQgZm9yIEN5Z3dpbiwgc2VlICMzMTcwNDgpCi0JICAqIGdzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmM6Ci0JICBDeWd3aW4gaGFzIGluY2x1ZGVzIGZvciBib3RoIHRoZSB1bml4IG5ldHdvcmsgc29ja2V0IEFQSQotCSAgYW5kIHRoZSB3aW5kb3dzIEFQSSwgYnV0IG9ubHkgb25lIGNhbiBiZSBpbmNsdWRlZCwgc28gZml4Ci0JICBpbmNsdWRlcyB0byBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBwcmVmZXJpbmcgdGhlIHVueGkKLQkgIG9uZSAoIzMxNzA0OCkuCi0KLTIwMDYtMDItMjMgMTI6MjE6MjUgKzAwMDAgIFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Ci0KLQkgIHJ0cC9nc3QvOiBTZXBhcmF0ZWQgdGhlIEc3MTEgcGF5bG9hZGVycy9kZXBheWxvYWRlcnMgaW50byBzZXBhcmF0ZSBlbGVtZW50cyBmb3IgbXVsYXcvYWxhdy4gQWxzbyByZW1vdmVkIHRoZSBvbGQgZzcxMS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAyLTIzICBQaGlsaXBwZSBLYWxhZiAgPHBoaWxpcHBlLmthbGFmIGF0IGNvbGxhYm9yYS5jby51az4KLQkgICogcnRwL2dzdC9nc3RydHBwY21hZGVwYXkuYzoKLQkgICogcnRwL2dzdC9nc3RydHBwY21hZGVwYXkuaDoKLQkgICogcnRwL2dzdC9nc3Rnc3RydHBwY21hcGF5LmM6Ci0JICAqIHJ0cC9nc3QvZ3N0Z3N0cnRwcGNtYXBheS5oOgotCSAgKiBydHAvZ3N0L2dzdHJ0cHBjbXVkZXBheS5jOgotCSAgKiBydHAvZ3N0L2dzdHJ0cHBjbXVkZXBheS5oOgotCSAgKiBydHAvZ3N0L2dzdHJ0cHBjbXVwYXkuYzoKLQkgICogcnRwL2dzdC9nc3RydHBwY211cGF5Lmg6Ci0JICAqIHJ0cC9nc3QvTWFrZWZpbGUuYW06Ci0JICAqIHJ0cC9nc3QvZ3N0cnRwLmM6Ci0JICAqIHJ0cC9nc3QvUkVBRE1FOgotCSAgU2VwYXJhdGVkIHRoZSBHNzExIHBheWxvYWRlcnMvZGVwYXlsb2FkZXJzIGludG8gc2VwYXJhdGUgZWxlbWVudHMgZm9yCi0JICBtdWxhdy9hbGF3LiBBbHNvIHJlbW92ZWQgdGhlIG9sZCBnNzExIHBheWxvYWRlcnMvZGVwYXlsb2FkZXJzLgotCi0yMDA2LTAyLTIyIDIwOjIyOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvZHYvOiBVZWJlciBzcGlmZmlmeSBzb21lIG1vcmUsIGFkZGVkIGRlYnVnIGNhdGVnb3J5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2Jhc2VfaW5pdCksIChnc3RfZHZkZWNfaW5pdCksCi0JICAoZ3N0X2R2ZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5oOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfYmFzZV9pbml0KSwgKGdzdF9kdmRlbXV4X2luaXQpLAotCSAgKGdzdF9kdmRlbXV4X3NyY19jb252ZXJ0KSwgKGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCksCi0JICAoZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5KSwgKGdzdF9kdmRlbXV4X3NpbmtfcXVlcnkpLAotCSAgKGdzdF9kdmRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF9kdmRlbXV4X2RlbXV4X2ZyYW1lKSwKLQkgIChnc3RfZHZkZW11eF9mbHVzaCksIChnc3RfZHZkZW11eF9jaGFpbiksCi0JICAoZ3N0X2R2ZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2R2L2dzdGR2ZGVtdXguaDoKLQkgIFVlYmVyIHNwaWZmaWZ5IHNvbWUgbW9yZSwgYWRkZWQgZGVidWcgY2F0ZWdvcnkuCi0JICBVc2UgX3NjYWxlLgotCSAgVXNlIHNlZ21lbnRzLCByZXNwZWN0IHBsYXliYWNrIHJhdGUgZnJvbSBuZXdzZWdtZW50LgotCSAgRml4IHJlZmNvdW50IGlzc3VlLgotCi0yMDA2LTAyLTIyIDA5OjMzOjI1ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCAnZHZzZCcgYW5kICdkdjI1JyB0byBsaXN0IG9mIHBvc3NpYmxlIGZvdXJjYyB2YWx1ZXMgZm9yIERWIFZpZGVvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXZpZXdlZCBieSA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEFkZCAnZHZzZCcgYW5kICdkdjI1JyB0byBsaXN0IG9mIHBvc3NpYmxlIGZvdXJjYyB2YWx1ZXMgZm9yIERWIFZpZGVvLgotCSAgQWRkIGltYWdlL3BuZyBmb3IgZm91cmNjICdwbmcgJwotCi0yMDA2LTAyLTIwIDIxOjE5OjU5ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUG9ydCB4aW1hZ2VzcmMgdG8gMC4xMCAoQ2xvc2VzICMzMDQ3OTUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBzeXMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy94aW1hZ2VzcmMvTWFrZWZpbGUuYW06Ci0JICAqIHN5cy94aW1hZ2VzcmMveGltYWdlc3JjLmM6IChnc3RfeGltYWdlc3JjX3JldHVybl9idWYpLAotCSAgKGdzdF94aW1hZ2VzcmNfb3Blbl9kaXNwbGF5KSwgKGdzdF94aW1hZ2VzcmNfc3RhcnQpLAotCSAgKGdzdF94aW1hZ2VzcmNfc3RvcCksIChnc3RfeGltYWdlc3JjX3VubG9jayksCi0JICAoZ3N0X3hpbWFnZXNyY19yZWNhbGMpLCAoY29tcG9zaXRlX3BpeGVsKSwKLQkgIChnc3RfeGltYWdlc3JjX3hpbWFnZV9nZXQpLCAoZ3N0X3hpbWFnZXNyY19jcmVhdGUpLAotCSAgKGdzdF94aW1hZ2VzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF94aW1hZ2VzcmNfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfeGltYWdlc3JjX2NsZWFyX2J1ZnBvb2wpLCAoZ3N0X3hpbWFnZXNyY19iYXNlX2luaXQpLAotCSAgKGdzdF94aW1hZ2VzcmNfZGlzcG9zZSksIChnc3RfeGltYWdlc3JjX2ZpbmFsaXplKSwKLQkgIChnc3RfeGltYWdlc3JjX2dldF9jYXBzKSwgKGdzdF94aW1hZ2VzcmNfc2V0X2NhcHMpLAotCSAgKGdzdF94aW1hZ2VzcmNfZml4YXRlKSwgKGdzdF94aW1hZ2VzcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3hpbWFnZXNyY19pbml0KSwgKHBsdWdpbl9pbml0KToKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2VzcmMuaDoKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2V1dGlsLmM6ICh4aW1hZ2V1dGlsX2hhbmRsZV94ZXJyb3IpLAotCSAgKHhpbWFnZXV0aWxfY2hlY2tfeHNobV9jYWxscyksICh4aW1hZ2V1dGlsX3hjb250ZXh0X2dldCksCi0JICAoeGltYWdldXRpbF94Y29udGV4dF9jbGVhciksCi0JICAoeGltYWdldXRpbF9jYWxjdWxhdGVfcGl4ZWxfYXNwZWN0X3JhdGlvKSwKLQkgIChnc3RfeGltYWdlc3JjX2J1ZmZlcl9maW5hbGl6ZSksIChnc3RfeGltYWdlX2J1ZmZlcl9mcmVlKSwKLQkgIChnc3RfeGltYWdlc3JjX2J1ZmZlcl9pbml0KSwgKGdzdF94aW1hZ2VzcmNfYnVmZmVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF94aW1hZ2VzcmNfYnVmZmVyX2dldF90eXBlKSwgKGdzdF94aW1hZ2V1dGlsX3hpbWFnZV9uZXcpLAotCSAgKGdzdF94aW1hZ2V1dGlsX3hpbWFnZV9kZXN0cm95KToKLQkgICogc3lzL3hpbWFnZXNyYy94aW1hZ2V1dGlsLmg6Ci0JICBQb3J0IHhpbWFnZXNyYyB0byAwLjEwIChDbG9zZXMgIzMwNDc5NSkKLQotPT09IHJlbGVhc2UgMC4xMC4xID09PQotCi0yMDA2LTAyLTIwIDE5OjEyOjEwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC4xMC4xLCAiU2xpbXkgLSB5ZXQgc2F0aXNmeWluZyIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0yMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbGVhc2luZyAwLjEwLjEsICJTbGlteSAtIHlldCBzYXRpc2Z5aW5nIgotCi0yMDA2LTAyLTIwIDEzOjA4OjUwICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYzogRml4IGNvbXBpbGF0aW9uIG9mIExBRFBTQS4gSXQgZG9lc24ndCBzZWVtIHRvIHdvcmssIGFuZCBpc24ndCBlbmFibGVkIGZvciB0aGUgYnVpbGQsLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYzogKGdzdF9zaWduYWxfcHJvY2Vzc29yX2V2ZW50KSwKLQkgIChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9wcm9jZXNzKToKLQkgIEZpeCBjb21waWxhdGlvbiBvZiBMQURQU0EuIEl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLCBhbmQgaXNuJ3QKLQkgIGVuYWJsZWQgZm9yIHRoZSBidWlsZCwgYnV0IGl0IGhlbHBzIG1lIHdpbiB0aGUgZmVhdHVyZS1jb3VudAotCSAgY29tcGV0aXRpb25zIG9vaCB5ZWFoLgotCi0yMDA2LTAyLTE5IDE2OjAyOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFVzZSBzY2FsaW5nIGNvZGUgZm9yIGFkZGVkIHByZWNpc3Npb24gYW5kIG1vcmUgY29ycmVjdCBzdG9wIHBvc2l0aW9uIGluIGNhc2Ugc2NhbGU9PTAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksCi0JICAoZ3N0X2F2aV9kZW11eF9wYXJzZV9maWxlX2hlYWRlciksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX2F2aWgpLCAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdXBlcmluZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpLCAoZ3N0X2F2aV9kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgVXNlIHNjYWxpbmcgY29kZSBmb3IgYWRkZWQgcHJlY2lzc2lvbiBhbmQgbW9yZSBjb3JyZWN0IHN0b3AKLQkgIHBvc2l0aW9uIGluIGNhc2Ugc2NhbGU9PTAuCi0KLTIwMDYtMDItMTkgMTI6MDk6MTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9mbHgvZ3N0Zmx4ZGVjLio6IEltcGxlbWVudCBEVVJBVElPTiBxdWVyeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5jOiAoZ3N0X2ZseGRlY19zcmNfcXVlcnlfaGFuZGxlciksCi0JICAoZ3N0X2ZseGRlY19jaGFpbik6Ci0JICAqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmg6Ci0JICBJbXBsZW1lbnQgRFVSQVRJT04gcXVlcnkuCi0KLTIwMDYtMDItMTkgMTE6NTc6NTggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9mbHgvOiBTZXQgTUFMTE9DREFUQSBmb3IgdGhlIHRlbXAgYnVmZmVycyBzbyB3ZSBkb24ndCBsZWFrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9mbHgvZmx4X2NvbG9yLmg6Ci0JICAqIGdzdC9mbHgvZmx4X2ZtdC5oOgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5jOiAoZ3N0X2ZseGRlY19pbml0KSwKLQkgIChnc3RfZmx4ZGVjX3NyY19xdWVyeV9oYW5kbGVyKSwgKGZseF9kZWNvZGVfY29sb3IpLAotCSAgKGdzdF9mbHhkZWNfY2hhaW4pOgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5oOgotCSAgU2V0IE1BTExPQ0RBVEEgZm9yIHRoZSB0ZW1wIGJ1ZmZlcnMgc28gd2UgZG9uJ3QgbGVhay4KLQkgIFNvbWUgZGVidWcgY2xlYW51cHMuCi0JICBDb25zdW1lIGFsbCBkYXRhIGluIHRoZSBhZGFwdGVyIGJlZm9yZSBsZWF2aW5nIHRoZSBjaGFpbgotCSAgZnVuY3Rpb24uIEZpeGVzICMzMzA2NzguCi0KLTIwMDYtMDItMTggMjA6NDg6MDkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvOiBIYW5kbGUgMCBkYXRhIHNpemUgaW4gb3RoZXJ3aXNlIHZhbGlkIGZyYW1lcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAoaWQzZGVtdXhfaWQzdjJfZnJhbWVzX3RvX3RhZ19saXN0KToKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDN2Ml9nZW5yZV9maWVsZHNfdG9fdGFnbGlzdCk6Ci0JICBIYW5kbGUgMCBkYXRhIHNpemUgaW4gb3RoZXJ3aXNlIHZhbGlkIGZyYW1lcy4KLQkgIEhhbmRsZSBudW1lcmljIHN0cmluZ3MgaW4gMi40LjAgZXZlbiB3aGVuIG5vdCBpbiBwYXJlbnRoZXNlcwotCi0yMDA2LTAyLTE4IDE3OjIwOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvOiBSZWNvZ25pc2UgU1NBL0FTUyBhbmQgVVNGIHN1YnRpdGxlIGZvcm1hdHMgYW5kIHNldCBwcm9wZXIgY2FwcyB3aGVuIHRoZXkgYXJlIGZvdW5kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBSZWNvZ25pc2UgU1NBL0FTUyBhbmQgVVNGIHN1YnRpdGxlIGZvcm1hdHMgYW5kCi0JICBzZXQgcHJvcGVyIGNhcHMgd2hlbiB0aGV5IGFyZSBmb3VuZC4KLQotMjAwNi0wMi0xNyAxODoyNTo0MiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBEb24ndCBHU1RfTE9HIHRpbWVzdGFtcHMgZnJvbSBub25leGlzdGVudCBpbmRleCBlbnRyaWVzICgjMzMxNTgyKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9sb29wX3N0YXRlX21vdmllKToKLQkgIERvbid0IEdTVF9MT0cgdGltZXN0YW1wcyBmcm9tIG5vbmV4aXN0ZW50IGluZGV4Ci0JICBlbnRyaWVzICgjMzMxNTgyKS4KLQotMjAwNi0wMi0xNyAxNzo1NDowNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiBGaXggaW52YWxpZCBtZW1vcnkgYWNjZXNzIGZvciBzb21lIG9kZC1zaXplZCBpbWFnZXMgKHNlZSBpbWFnZSBjb250YWluZWQgaW4gcXVpY2t0aW1lIHN0cmVhbSBpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdfZGVjX2RlY29kZV9kaXJlY3QpLAotCSAgKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICBGaXggaW52YWxpZCBtZW1vcnkgYWNjZXNzIGZvciBzb21lIG9kZC1zaXplZCBpbWFnZXMKLQkgIChzZWUgaW1hZ2UgY29udGFpbmVkIGluIHF1aWNrdGltZSBzdHJlYW0gaW4gIzMyNzA4Myk7Ci0JICB1c2UgZ19tYWxsb2MoKSBpbnN0ZWFkIG9mIGdfYWxsb2NhKCkuCi0KLTIwMDYtMDItMTcgMTY6Mjg6MjkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogQ2hlY2sgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIG9mIHRoZSBjb3JyZWN0IHNpemUgYmVjYXVzZSB0aGUgcGFyc2VyIGFzc3VtZXMgdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3Bfc3RhdGVfaGVhZGVyKToKLQkgIENoZWNrIHRoYXQgdGhlIHNpemUgb2YgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyBvZiB0aGUgY29ycmVjdCBzaXplCi0JICBiZWNhdXNlIHRoZSBwYXJzZXIgYXNzdW1lcyB0aGF0LgotCSAgRml4ZXMgIzMzMTU0My4KLQotMjAwNi0wMi0xNyAxNTozNzozOCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOiBQYXRjaCBmcm9tIFNlYmFzdGllbiBDb3RlLCBmaXhlcyAjMzE5ODg0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOiAoZ3N0X3J0cF9hbXJfZGVwYXlfY2hhaW4pOgotCSAgUGF0Y2ggZnJvbSBTZWJhc3RpZW4gQ290ZSwgZml4ZXMgIzMxOTg4NAotCi0yMDA2LTAyLTE3IDExOjE5OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvY2Rpby9nc3RjZGlvLmM6IEluaXQgZGVidWcgY2F0ZWdvcnkgKCMzMzEyNTMpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW8uYzogKHBsdWdpbl9pbml0KToKLQkgIEluaXQgZGVidWcgY2F0ZWdvcnkgKCMzMzEyNTMpLgotCi0yMDA2LTAyLTE3IDEwOjUzOjM4ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGV4dC9nY29uZi9nY29uZi5jOgotCSogZXh0L2djb25mL2djb25mLmg6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzoKLQkqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5oOgotCSogZ2NvbmYvZ3N0cmVhbWVyLnNjaGVtYXMuaW46Ci0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBhZGQgSnVyZydzIHBhdGNoIGZvciBtdWx0aWRldmljZSBzdXBwb3J0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBKdXJnJ3MgcGF0Y2ggZm9yIG11bHRpZGV2aWNlIHN1cHBvcnQKLQotMjAwNi0wMi0xNiAyMDozMDoxMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IFBhc3MgZXh0cmFfZGF0YSB0byBnc3RfcmlmZl9jcmVhdGVfYXVkaW9fY2FwcygpLCBzbyB0aGF0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOgotCSAgUGFzcyBleHRyYV9kYXRhIHRvIGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzKCksIHNvIHRoYXQKLQkgIFdBVkVGT1JNQVRFWCBzdHVmZiB3b3Jrcy4gUG9zdCBhdWRpbyBjb2RlYyBuYW1lIGFuZCBwb3N0Ci0JICBpdCBhcyB0YWdsaXN0IG9uIHRoZSBidXMuIEFsbG93IHVwIHRvIDggY2hhbm5lc2wgZm9yIHJhdwotCSAgUENNIGluIHRoZSBzb3VyY2UgcGFkIHRlbXBsYXRlIGNhcHMuCi0KLTIwMDYtMDItMTYgMTY6NTM6NTIgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogQXBwbGllZCAjMzE4NjYzLiBHaXZlcyBxdWl0ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgaW4gYXV0b3NjYW4gbW9kZSwgYnV0IGl0J3MgYmV0dGVyIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogKGdzdF9tdWx0aXBhcnRfZGVtdXhfYmFzZV9pbml0KSwKLQkgIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2NsYXNzX2luaXQpLCAoZ3N0X211bHRpcGFydF9kZW11eF9pbml0KSwKLQkgIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2ZpbmFsaXplKSwgKGdzdF9tdWx0aXBhcnRfZmluZF9wYWRfYnlfbWltZSksCi0JICAoZ3N0X211bHRpcGFydF9kZW11eF9jaGFpbiksIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X211bHRpcGFydF9zZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpcGFydF9nZXRfcHJvcGVydHkpOgotCSAgQXBwbGllZCAjMzE4NjYzLiBHaXZlcyBxdWl0ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgaW4KLQkgIGF1dG9zY2FuIG1vZGUsIGJ1dCBpdCdzIGJldHRlciB0aGFuIG5vdGhpbmcuIE5vdCBjbG9zaW5nIHlldC4KLQotMjAwNi0wMi0xNiAxNDoxMzo0OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgVXBkYXRlIGRvY3VtZW50YXRpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3VkcHNyY19pbml0KSwKLQkgIChnc3RfdWRwc3JjX3N0YXJ0KToKLQkgIFVwZGF0ZSBkb2N1bWVudGF0aW9uLgotCSAgRml4IGFyZ3MuCi0KLTIwMDYtMDItMTYgMTQ6MDI6NTcgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRG9uJ3Qgc3RvcCB0aGUgdGFzayBpZiB0aGUgcGFkIGlzbid0IGxpbmtlZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfcXRkZW11eF9sb29wKSwgKHF0ZGVtdXhfc2lua19hY3RpdmF0ZV9wdWxsKToKLQkgIERvbid0IHN0b3AgdGhlIHRhc2sgaWYgdGhlIHBhZCBpc24ndCBsaW5rZWQuCi0KLTIwMDYtMDItMTYgMTA6NTg6MTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiBJRDMgMi4zLjAgdXNlZCBzeW5jaC1zYWZlIGludGVnZXJzIGZvciB0aGUgdGFnIHNpemUsIGJ1dCBub3QgZm9yIHRoZSBmcmFtZSBzaXplLiAoRml4ZXMgIzMzMTM2OCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAoaWQzZGVtdXhfaWQzdjJfZnJhbWVzX3RvX3RhZ19saXN0KToKLQkgIElEMyAyLjMuMCB1c2VkIHN5bmNoLXNhZmUgaW50ZWdlcnMgZm9yIHRoZSB0YWcgc2l6ZSwgYnV0IG5vdCBmb3IgdGhlCi0JICBmcmFtZSBzaXplLiAoRml4ZXMgIzMzMTM2OCkKLQotMjAwNi0wMi0xNiAxMDo0MjoyNSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvUkVBRE1FOiBVcGRhdGVkIFJFQURNRS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9SRUFETUU6Ci0JICBVcGRhdGVkIFJFQURNRS4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfZ2V0X3R5cGUpLAotCSAgKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3J0c3BzcmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRzcHNyY19nZXRfcHJvcGVydHkpLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCk6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkgIE1ha2Ugc3VyZSB0aGUgUlRQIHBvcnQgaXMgYW4gZXZlbiBwb3J0IGFuIHRyeSB0byBhbGxvY2F0ZQotCSAgYW5vdGhlciBpZiBub3QuCi0JICBBZGRlZCByZXRyeSBwcm9wZXJ0eSB0byBjb250cm9sIG1heCByZXRyaWVzIGZvciBwb3J0IGFsbG9jYXRpb24uCi0JICBNYWtlIHN1cmUgUlRDUCBwb3J0IGlzIFJUUCBwb3J0KzEuCi0JICBDbGVhbnVwIHdoZW4gcG9ydCBhbGxvY2F0aW9uIGZhaWxzLgotCSAgRml4ZXMgIzMxOTE4My4KLQotMjAwNi0wMi0xNiAwOToxNzo1OCArMDAwMCAgV291dGVyIFBhZXNlbiA8d291dGVyQGthbmdhcm9vdC5uZXQ+Ci0KLQkgIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiBEb24ndCBpZ25vcmUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwYXJlbnQgY2xhc3MncyBzdGF0ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiAoZ3N0X2FscGhhX2NoYW5nZV9zdGF0ZSk6Ci0JICBEb24ndCBpZ25vcmUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwYXJlbnQgY2xhc3MncyBzdGF0ZQotCSAgY2hhbmdlIGZ1bmN0aW9uICgjMzMxMzg1LCBwYXRjaCBieTogV291dGVyIFBhZXNlbikuCi0KLTIwMDYtMDItMTUgMTI6MTc6MjggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEFkZCBIQUwgc291bmQgZGV2aWNlIHdyYXBwZXIgcGx1Z2lucy4gQ2xvc2VzICMzMjkxMDYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZXh0L01ha2VmaWxlLmFtOgotCSAgKiBleHQvaGFsL01ha2VmaWxlLmFtOgotCSAgKiBleHQvaGFsL2dzdGhhbGF1ZGlvc2luay5jOiAoZ3N0X2hhbF9hdWRpb19zaW5rX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2hhbF9hdWRpb19zaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2hhbF9hdWRpb19zaW5rX3Jlc2V0KSwKLQkgIChnc3RfaGFsX2F1ZGlvX3NpbmtfaW5pdCksIChnc3RfaGFsX2F1ZGlvX3NpbmtfZGlzcG9zZSksCi0JICAoZG9fdG9nZ2xlX2VsZW1lbnQpLCAoZ3N0X2hhbF9hdWRpb19zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2hhbF9hdWRpb19zaW5rX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2hhbF9hdWRpb19zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zaW5rLmg6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsYXVkaW9zcmMuYzogKGdzdF9oYWxfYXVkaW9fc3JjX2Jhc2VfaW5pdCksCi0JICAoZ3N0X2hhbF9hdWRpb19zcmNfY2xhc3NfaW5pdCksIChnc3RfaGFsX2F1ZGlvX3NyY19yZXNldCksCi0JICAoZ3N0X2hhbF9hdWRpb19zcmNfaW5pdCksIChnc3RfaGFsX2F1ZGlvX3NyY19kaXNwb3NlKSwKLQkgIChkb190b2dnbGVfZWxlbWVudCksIChnc3RfaGFsX2F1ZGlvX3NyY19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9oYWxfYXVkaW9fc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfaGFsX2F1ZGlvX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvaGFsL2dzdGhhbGF1ZGlvc3JjLmg6Ci0JICAqIGV4dC9oYWwvZ3N0aGFsZWxlbWVudHMuYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L2hhbC9nc3RoYWxlbGVtZW50cy5oOgotCSAgKiBleHQvaGFsL2hhbC5jOiAoZ3N0X2hhbF9nZXRfc3RyaW5nKSwKLQkgIChnc3RfaGFsX3JlbmRlcl9iaW5fZnJvbV91ZGkpLCAoZ3N0X2hhbF9nZXRfYXVkaW9fc2luayksCi0JICAoZ3N0X2hhbF9nZXRfYXVkaW9fc3JjKToKLQkgICogZXh0L2hhbC9oYWwuaDoKLQkgIEFkZCBIQUwgc291bmQgZGV2aWNlIHdyYXBwZXIgcGx1Z2lucy4gQ2xvc2VzICMzMjkxMDYKLQotMjAwNi0wMi0xNSAxMjoxMzo0NyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBJdCBhcHBlYXJzIDEwMCUgZXF1YWxzIDEvMSBhbmQgbm90IDEwMC8xIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2NoYWluKToKLQkgIEl0IGFwcGVhcnMgMTAwJSBlcXVhbHMgMS8xIGFuZCBub3QgMTAwLzEgLi4uCi0KLTIwMDYtMDItMTUgMTA6MTU6NDcgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogQWRkIGNvbW1lbnQgaW4gYSBmdWx0aWxlIGF0dGVtcHQgdG8gc3RvcCB0aGUgY29weS1hbmQtcGFzdGUgcGFyYWRpZ20gbGVhZGluZyB0byBkdXBsaWNhdGlvbiBvZi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCk6Ci0JICBBZGQgY29tbWVudCBpbiBhIGZ1bHRpbGUgYXR0ZW1wdCB0byBzdG9wIHRoZSBjb3B5LWFuZC1wYXN0ZQotCSAgcGFyYWRpZ20gbGVhZGluZyB0byBkdXBsaWNhdGlvbiBvZiBiYWQgY29kZS4KLQkgICogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5jOiAocnRzcF90cmFuc3BvcnRfcGFyc2UpOgotCSAgTWltZSBwYXJhbWV0ZXJzIGhhdmUgdG8gYmUgY2hlY2tlZCBjYXNlIGluc2Vuc2l0aXZlCi0KLTIwMDYtMDItMTUgMDk6NDU6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogV2hlbiBidWZmZXJpbmcgTURBVCBkYXRhLCBzaG93IHRoZSB1c2VyIHNvbWV0aGluZyBpcyBoYXBwZW5pbmcgYnkgcG9zdGluZyAnYnVmZmVyaW5nJyBtZXNzYWdlcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X3Bvc3RfYnVmZmVyaW5nKSwKLQkgIChnc3RfcXRkZW11eF9jaGFpbik6Ci0JICBXaGVuIGJ1ZmZlcmluZyBNREFUIGRhdGEsIHNob3cgdGhlIHVzZXIgc29tZXRoaW5nIGlzCi0JICBoYXBwZW5pbmcgYnkgcG9zdGluZyAnYnVmZmVyaW5nJyBtZXNzYWdlcyBvbiB0aGUgYnVzLgotCi0yMDA2LTAyLTE0IDIzOjIzOjA4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogQWR2YW5jZSBzdHJlYW0gdGltZSBmb3IgbGFnZ2luZyBzdWJ0aXRsZSBzdHJlYW1zIGJ5IHNlbmRpbmcgbmV3c2VnbWVudCBldmVudHMgd2l0aCB0aGUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9zeW5jX3N0cmVhbXMpOgotCSAgQWR2YW5jZSBzdHJlYW0gdGltZSBmb3IgbGFnZ2luZyBzdWJ0aXRsZSBzdHJlYW1zIGJ5IHNlbmRpbmcKLQkgIG5ld3NlZ21lbnQgZXZlbnRzIHdpdGggdGhlIHVwZGF0ZSBmbGFnIHNldC4KLQotMjAwNi0wMi0xNCAxODo1MDoxMyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC4qOiBNYWtlIHB1c2gtYmFzZWQgd29yayBpZiBtZGF0IGF0b20gaXMgYmVmb3JlIG1vb3YgYXRvbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9pbml0KSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSksCi0JICAobmV4dF9lbnRyeV9zaXplKSwgKGdzdF9xdGRlbXV4X2NoYWluKToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgTWFrZSBwdXNoLWJhc2VkIHdvcmsgaWYgbWRhdCBhdG9tIGlzIGJlZm9yZSBtb292IGF0b20uCi0JICBEb24ndCBhbnN3ZXIgZHVyYXRpb24gcXVlcnkuIFRoaXMgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGludG8gcmVwbHlpbmcKLQkgIEZBTFNFIHRvIHNlZWsgZXZlbnRzLgotCi0yMDA2LTAyLTE0IDE2OjU4OjMwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFRoZXJlIGNhbiBiZSBib2d1cyBkYXRhIGJlZm9yZSB0aGUgaGRybCBMSVNUIHRhZyBpbiB0aGUgUklGRiBoZWFkZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKToKLQkgIFRoZXJlIGNhbiBiZSBib2d1cyBkYXRhIGJlZm9yZSB0aGUgaGRybCBMSVNUIHRhZyBpbiB0aGUgUklGRiBoZWFkZXIuCi0JICBJdCdzIGhhcmQgdG8gc2F5IGlmIGl0J3Mgbm90IHJlc3BlY3RpbmcgdGhlIEFWSSBzcGVjaWZpY2F0aW9ucyBvciBub3QsCi0JICBidXQgc2luY2UgR29vZ2xlIFZpZGVvIGlzIHByb2R1Y2luZyBBVklzIGxpa2UgdGhhdCBhbmQgdGhlIG90aGVyIHBsYXllcgotCSAgZG9uJ3Qgc2VlbSB0byBjb21wbGFpbiwgSSBndWVzcyB3ZSBzaG91bGQgZG8gdGhlIHNhbWUuCi0KLTIwMDYtMDItMTQgMTE6MjQ6NTMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGRhdGEgYXRvbXMgYXJlIGJlZm9yZSBtb292IGF0b21zIGluIHB1c2gtYmFzZWQgbW9kZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChuZXh0X2VudHJ5X3NpemUpLCAoZ3N0X3F0ZGVtdXhfY2hhaW4pOgotCSAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGRhdGEgYXRvbXMgYXJlIGJlZm9yZSBtb292IGF0b21zIGluIHB1c2gtYmFzZWQgbW9kZS4KLQkgIEVycm9ycyBvdXQgZ3JhY2VmdWxseS4KLQotMjAwNi0wMi0xMyAyMjowNDo0MiArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvOiBRdERlbXV4IGNhbiBub3cgd29yayBwdXNoLWJhc2VkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9pbml0KSwKLQkgIChnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCksIChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCSAgKGV4dHJhY3RfaW5pdGlhbF9sZW5ndGhfYW5kX2ZvdXJjYyksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIpLCAoZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSksCi0JICAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLCAobmV4dF9lbnRyeV9zaXplKSwgKGdzdF9xdGRlbXV4X2NoYWluKSwKLQkgIChxdGRlbXV4X3NpbmtfYWN0aXZhdGUpLCAocXRkZW11eF9zaW5rX2FjdGl2YXRlX3B1bGwpLAotCSAgKHF0ZGVtdXhfc2lua19hY3RpdmF0ZV9wdXNoKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIFF0RGVtdXggY2FuIG5vdyB3b3JrIHB1c2gtYmFzZWQuCi0JICBJdCBzdGlsbCBuZWVkcyBzb21lIGxvdmUgZm9yIHNlZWtpbmcuCi0KLTIwMDYtMDItMTMgMTI6MDA6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogQWRkIG1vcmUgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIGNoYXIgZW5jb2RpbmcgY29udmVyc2lvbiBwcm9kdWNlZCBhIHZhbGlkIFVURi04IHN0cmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKHBhcnNlX2luc2VydF9zdHJpbmdfZmllbGQpLAotCSAgKHBhcnNlX3NwbGl0X3N0cmluZ3MpOgotCSAgQWRkIG1vcmUgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhhdCBhIGNoYXIgZW5jb2RpbmcgY29udmVyc2lvbgotCSAgcHJvZHVjZWQgYSB2YWxpZCBVVEYtOCBzdHJpbmcuCi0KLTIwMDYtMDItMTMgMTA6NDM6MTUgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogUHJvcGVybHkgaGFuZGxlIGVuZCBvZiBzZWdtZW50LiBDbG9zZXMgIzMzMDg4NS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQkgIFByb3Blcmx5IGhhbmRsZSBlbmQgb2Ygc2VnbWVudC4gQ2xvc2VzICMzMzA4ODUuCi0KLTIwMDYtMDItMTMgMTA6MzY6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oOiBGb3IgZ290IHRvIGNvbW1pdCB0aGlzIG9uZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuaDoKLQkgIEZvciBnb3QgdG8gY29tbWl0IHRoaXMgb25lLgotCi0yMDA2LTAyLTEyIDE4OjU5OjM2ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNGdwYXkuKjogTWFrZSBtb3JlIHRoaW5ncyB3b3JrLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jOiAoZ3N0X3J0cF9tcDRnX3BheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX21wNGdfcGF5X2luaXQpLCAoZ3N0X3J0cF9tcDRnX3BheV9wYXJzZV9hdWRpb19jb25maWcpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfcGFyc2VfdmlkZW9fY29uZmlnKSwgKGdzdF9ydHBfbXA0Z19wYXlfbmV3X2NhcHMpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyksIChnc3RfcnRwX21wNGdfcGF5X2ZsdXNoKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5Lmg6Ci0JICBNYWtlIG1vcmUgdGhpbmdzIHdvcmsuCi0JICBIYW5kbGUgQUNDIGNvbmZpZyBzdHJpbmdzLgotCi0yMDA2LTAyLTEyIDEzOjEwOjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzogc2V0IHRpbWVzdGFtcHMgaWYgbm8gaW5jb21pbmcgdGltZXN0YW1wcyBzZXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOiAoZ3N0X3J0cF9hbXJfcGF5X2hhbmRsZV9idWZmZXIpOgotCSAgc2V0IHRpbWVzdGFtcHMgaWYgbm8gaW5jb21pbmcgdGltZXN0YW1wcyBzZXQKLQotMjAwNi0wMi0xMSAxMzo1NDoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2FwZXRhZy9nc3R0YWdkZW11eC5jOiAuLi4gYW5kIGZpeCB0aGUgdmVyeSBzYW1lIGxlYWtzIGluIEdzdFRhZ0RlbXV4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0dGFnZGVtdXguYzogKGdzdF90YWdfZGVtdXhfZ2V0X3Vwc3RyZWFtX3NpemUpLAotCSAgKGdzdF90YWdfZGVtdXhfZG9fdHlwZWZpbmQpOgotCSAgLi4uIGFuZCBmaXggdGhlIHZlcnkgc2FtZSBsZWFrcyBpbiBHc3RUYWdEZW11eC4KLQotMjAwNi0wMi0xMSAxMzozNToxMyArMDAwMCAgSm9uIFRyb3dicmlkZ2UgPHRyb3dAeGltaWFuLmNvbT4KLQotCSAgZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChpZDNkZW11eF9nZXRfdXBzdHJlYW1fc2l6ZSksCi0JICAoZ3N0X2lkM2RlbXV4X2RvX3R5cGVmaW5kKToKLQkgIEZpeCBhIGNvdXBsZSBvZiBtZW0gbGVha3MuIChQYXRjaCBieSBKb25hdGhhbiBNYXR0aGV3Ci0JICA8am9uYXRoYW4gYXQga2FvbGluIGRvdCB3aDkgZG90IG5ldD4pCi0KLTIwMDYtMDItMTAgMTc6Mzc6MzkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOiBGaXJzdCBzZXQgb3B0aW9ucywgdGhlbiBzZXQgY2FwcyBvciBlbHNlIHRoZSBiYXNlY2xhc3Mgd2lsbCBub3Qga25vdyBhYm91dCB0aGUgb3B0aW9ucywgZHVoLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOiAoZ3N0X3J0cF9tcDR2X3BheV9zZXRjYXBzKToKLQkgIEZpcnN0IHNldCBvcHRpb25zLCB0aGVuIHNldCBjYXBzIG9yIGVsc2UgdGhlIGJhc2VjbGFzcwotCSAgd2lsbCBub3Qga25vdyBhYm91dCB0aGUgb3B0aW9ucywgZHVoLgotCi0yMDA2LTAyLTEwIDE3OjE2OjU1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogRG9uJ3Qgd2FzdGUgdGltZSBsb29raW5nIGZvciBhIGNvbmZpZyBzdHJpbmcgaWYgd2UgaGF2ZSBjb2RlY19pbmZvIG9uIHRoZSBpbmNvbW1pbmcgY2Fwcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogKGdzdF9ydHBfbXA0dl9wYXlfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cF9tcDR2X3BheV9zZXRjYXBzKToKLQkgIERvbid0IHdhc3RlIHRpbWUgbG9va2luZyBmb3IgYSBjb25maWcgc3RyaW5nIGlmIHdlIGhhdmUgY29kZWNfaW5mbwotCSAgb24gdGhlIGluY29tbWluZyBjYXBzLgotCi0yMDA2LTAyLTEwIDE2OjQwOjU4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL1JFQURNRTogU2F5IHNvbWV0aGluZyBhYm91dCBjYXNlLXNlbnNpdGl2aXR5IG9mIGNhcHMgdnMgbWltZS1hdHRyaWJ1dGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvUkVBRE1FOgotCSAgU2F5IHNvbWV0aGluZyBhYm91dCBjYXNlLXNlbnNpdGl2aXR5IG9mIGNhcHMgdnMgbWltZS1hdHRyaWJ1dGVzLgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOiAoZ3N0X3J0cF9hbXJfcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfYW1yX3BheV9oYW5kbGVfYnVmZmVyKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5LmM6IChnc3RfcnRwX21wNGdfcGF5X2dldF90eXBlKSwKLQkgIChnc3RfcnRwX21wNGdfcGF5X2Jhc2VfaW5pdCksIChnc3RfcnRwX21wNGdfcGF5X2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfaW5pdCksIChnc3RfcnRwX21wNGdfcGF5X2ZpbmFsaXplKSwKLQkgIChnc3RfcnRwX21wNGdfcGF5X25ld19jYXBzKSwgKGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cF9tcDRnX3BheV9mbHVzaCksIChnc3RfcnRwX21wNGdfcGF5X2hhbmRsZV9idWZmZXIpLAotCSAgKGdzdF9ydHBfbXA0Z19wYXlfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBfbXA0Z19wYXlfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwX21wNGdfcGF5X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDRncGF5Lmg6Ci0JICBBZGRlZCBiZWdpbm5pbmdzIG9mIG1wZWc0LWdlbmVyaWMgcGF5bG9hZGVyIChSRkMgMzY0MCkKLQotMjAwNi0wMi0wOSAxNDoyMDoxNCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvOiBSZXN1cmVjdGVkIHJ0cGRlYyB0byBtYWtlIHJ0c3BzcmMgaGFwcHkgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHNwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cGRlY19nZXRfdHlwZSksCi0JICAoZ3N0X3J0cGRlY19jbGFzc19pbml0KSwgKGdzdF9ydHBkZWNfaW5pdCksIChnc3RfcnRwZGVjX2dldGNhcHMpLAotCSAgKGdzdF9ydHBkZWNfY2hhaW5fcnRwKSwgKGdzdF9ydHBkZWNfY2hhaW5fcnRjcCksCi0JICAoZ3N0X3J0cGRlY19zZXRfcHJvcGVydHkpLCAoZ3N0X3J0cGRlY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBkZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L3J0c3AvZ3N0cnRwZGVjLmg6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3AuYzogKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90cmFuc3BvcnQpOgotCSAgKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5jOiAocmVhZF9ib2R5KSwKLQkgIChydHNwX2Nvbm5lY3Rpb25fcmVjZWl2ZSk6Ci0JICAqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmM6IChydHNwX21lc3NhZ2VfZHVtcCk6Ci0JICBSZXN1cmVjdGVkIHJ0cGRlYyB0byBtYWtlIHJ0c3BzcmMgaGFwcHkgYWdhaW4uCi0JICBTa2lwIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2Vzc2lvbiBpZC4KLQkgIERvbid0IGNyYXNoIHdoZW4gZHVtcGluZyBhIG1lc3NhZ2Ugd2l0aCBhbiBlbXB0eSBib2R5LgotCi0yMDA2LTAyLTA5IDE0OjE0OjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6IEFkZGVkIG1vcmUgbWVhbmluZ2Z1bGwgd2FybmluZ3Mgd2hlbiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6IChnc3RfcnRwX2Ftcl9kZXBheV9jaGFpbik6Ci0JICBBZGRlZCBtb3JlIG1lYW5pbmdmdWxsIHdhcm5pbmdzIHdoZW4gc29tZXRoaW5nIGdvZXMgd3JvbmcuCi0JICBDbGVhciBGIGJpdCBvbiBvdXRnb2luZyBBTVIgcGFja2V0cy4KLQkgICogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzogKGdzdF9ydHBfYW1yX3BheV9jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwX2Ftcl9wYXlfaGFuZGxlX2J1ZmZlcik6Ci0JICBBZGRlZCBkZWJ1Z2dpbmcgY2F0ZWdvcnkKLQkgIFN1cHBvcnQgcGF5bG9hZGluZyBvZiBtdWx0aXBsZSBBTVIgZnJhbWVzLgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzogKGdzdF9ydHBfbXA0dl9wYXlfZGVwYXlfZGF0YSk6Ci0JICBBZGRlZCBzb21lIGRlYnVnZ2luZy4KLQotMjAwNi0wMi0wOSAxMToyNTo0MiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQmFjayB0byBDVlMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBCYWNrIHRvIENWUwotCi09PT0gcmVsZWFzZSAwLjEwLjIgPT09Ci0KLTIwMDYtMDItMDkgMTE6MjI6MzggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hcGV0YWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgUmVsZWFzaW5nIDAuMTAuMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZWxlYXNpbmcgMC4xMC4yCi0KLTIwMDYtMDItMDggMTc6MzU6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDYtMDItMDggMTc6MTg6MjAgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBPb3BzLCBqdW1waW5nIHRoZSBndW4gd2l0aCB0aGUgQ2hhbmdlTG9nIGVudHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE9vcHMsIGp1bXBpbmcgdGhlIGd1biB3aXRoIHRoZSBDaGFuZ2VMb2cgZW50cnkKLQotMjAwNi0wMi0wOCAxNzoxNjo0NiArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQnVtcCBjb3JlIGFuZCBwbHVnaW5zLWJhc2UgcmVxdWlyZW1lbnQgdG8gMC4xMC4yLjIgZm9yIEFQSSBhZGRpdGlvbnMgKGFuZCAxIG1pZ3JhdGlvbiBvZiBnc3RfYmluX2ZpbmRfdS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEJ1bXAgY29yZSBhbmQgcGx1Z2lucy1iYXNlIHJlcXVpcmVtZW50IHRvIDAuMTAuMi4yCi0JICBmb3IgQVBJIGFkZGl0aW9ucyAoYW5kIDEgbWlncmF0aW9uIG9mIGdzdF9iaW5fZmluZF91bmNvbm5lY3RlZF9wYWQpCi0KLTIwMDYtMDItMDggMTc6MTI6NDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC86IFJlZ2lzdGVyIG11c2ljYnJhaW56IHRhZ3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhYy5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXguYzogKHBsdWdpbl9pbml0KToKLQkgIFJlZ2lzdGVyIG11c2ljYnJhaW56IHRhZ3MuCi0KLTIwMDYtMDItMDcgMTg6MzE6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICByZW1vdmUgdW51c2VkIHZhcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgdW51c2VkIHZhcgotCi0yMDA2LTAyLTA3IDE4OjAxOjE3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiB1c2UgdGhlIGNvcnJlY3QgdmFyaWFibGUgdG8gY2hlY2sgaWYgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgbGFzdCBjaHVuay4gIExvb2tzIGxpa2UgYW4gb2J2aW91cyBiLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCSAgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICB1c2UgdGhlIGNvcnJlY3QgdmFyaWFibGUgdG8gY2hlY2sgaWYgd2UgY2FuIGNhbGN1bGF0ZQotCSAgdGhlIGxhc3QgY2h1bmsuICBMb29rcyBsaWtlIGFuIG9idmlvdXMgYnVnLCBhbmQgbWFrZXMKLQkgIHRoZSBkdW1wIG9mIG9mZnNldHMgY29tcGFyYWJsZSB0byBvdGhlciB0b29scwotCi0yMDA2LTAyLTA3IDE3OjU0OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBjbGVhbiB1cCBzb21lIGRlYnVnZ2luZywgdXNpbmcgX09CSkVDVCwgbW92aW5nIHJlY3VycmluZyBtZXNzYWdlcyB0byBMT0cgbGV2ZWwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9sb29wX2hlYWRlciksCi0JICAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIGNsZWFuIHVwIHNvbWUgZGVidWdnaW5nLCB1c2luZyBfT0JKRUNULCBtb3ZpbmcgcmVjdXJyaW5nCi0JICBtZXNzYWdlcyB0byBMT0cgbGV2ZWwKLQotMjAwNi0wMi0wNyAxNjoyMzozMyArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2djb25mL2djb25mLmg6IFJlbW92ZSBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiB0aGF0IG5vIGxvbmdlciBleGlzdHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2djb25mLmg6Ci0JICBSZW1vdmUgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24gdGhhdCBubyBsb25nZXIgZXhpc3RzLgotCi0yMDA2LTAyLTA3IDEzOjM5OjA4ICswMDAwICBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhc0BtZXJhbGkub3JnPgotCi0JICBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiBNYWtlIHNob3V0MiB3b3JrIGZvciBub24gb2dnIHN0cmVhbXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNi0wMi0wNyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCSAgKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiAoZ3N0X3Nob3V0MnNlbmRfcmVuZGVyKSwKLQkgIChnc3Rfc2hvdXQyc2VuZF9zZXRjYXBzKSwgKGdzdF9zaG91dDJzZW5kX2NoYW5nZV9zdGF0ZSk6Ci0JICBNYWtlIHNob3V0MiB3b3JrIGZvciBub24gb2dnIHN0cmVhbXMKLQotMjAwNi0wMi0wNiAxNzoyNjo0MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuKjogVXBkYXRlZCBkb2NzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyKSwgKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2luaXRfc2VuZCksIChnc3RfbXVsdGl1ZHBzaW5rX2FkZCksCi0JICAoZ3N0X211bHRpdWRwc2lua19yZW1vdmUpLCAoZ3N0X211bHRpdWRwc2lua19jbGVhciksCi0JICAoZ3N0X211bHRpdWRwc2lua19nZXRfc3RhdHMpLCAoZ3N0X211bHRpdWRwc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSAgVXBkYXRlZCBkb2NzLgotCSAgQWRkZWQgcHJvcGVydGllcyBieXRlcy1zZXJ2ZWQsIGJ5dGVzX3RvX3NlcnZlLgotCSAgUG9zdCBwcm9wZXIgZXJyb3IgbWVzc2FnZXMsCi0JICBFbWl0IGNsaWVudCBhZGRlZCBzaWduYWwgdG9vLgotCi0yMDA2LTAyLTA2IDE1OjQxOjI1ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4Lio6IFNvbWUgUVQgZGVtdXggbG92aW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCSAgKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCSAgKHF0ZGVtdXhfaW5mbGF0ZSksIChxdGRlbXV4X3BhcnNlKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayksCi0JICAocXRkZW11eF9wYXJzZV91ZHRhKSwgKHF0ZGVtdXhfdGFnX2FkZF9zdHIpLCAocXRkZW11eF90YWdfYWRkX251bSksCi0JICAocXRkZW11eF90YWdfYWRkX2ducmUpLCAoZ3N0X3F0ZGVtdXhfaGFuZGxlX2VzZHMpLAotCSAgKHF0ZGVtdXhfdmlkZW9fY2FwcyksIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBTb21lIFFUIGRlbXV4IGxvdmluZy4KLQkgIEhhbmRsZSBzZWVraW5nIGluIGEgbGVzcyBicm9rZW4gd2F5LgotCSAgRml4IEFNUiBjYXBzIHRvIG1hdGNoIHRoZSBBTVIgZGVjb2Rlci4KLQkgIFNldCBmaXJzdCB0aW1lc3RhbXAgb24gQU1SIHNhbXBsZXMgdG8gMCBmb3Igbm93LgotCSAgUmVtb3ZlIHNvbWUgXG4gaW4gREVCVUcgc3RyaW5ncy4KLQkgIFVzZSBfc2NhbGVfaW50IGZvciBtYXhpbXVtIHByZWNpc2lvbi4KLQotMjAwNi0wMi0wNiAxNTozMToxNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSAgYWRkaW5nIGRvY3MgZm9yIG11bHRpdWRwc2luawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRpbmcgZG9jcyBmb3IgbXVsdGl1ZHBzaW5rCi0KLTIwMDYtMDItMDYgMTU6Mjg6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogcGVhayBiZWxvdyBkZWNheSBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IsIHNvIGRvbid0IEVSUk9SIGxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICBwZWFrIGJlbG93IGRlY2F5IGlzIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvciwgc28gZG9uJ3QgRVJST1IgbG9nCi0KLTIwMDYtMDItMDYgMTU6Mjc6MDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1uYXZpZ2F0aW9udGVzdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWw6Ci0JICBjdnMgdmVyc2lvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgY3ZzIHZlcnNpb25zCi0KLTIwMDYtMDItMDYgMTQ6MjU6MzQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLio6IE1ha2Ugc3VyZSB3ZSBzZW5kIGEgbmV3c2VnbWVudCBldmVudCBpbiBCWVRFUyBmb3JtYXQgYmVmb3JlIHNlbmRpbmcgYnVmZmVycyAoIzMyODUzMSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzogKGdzdF9lYm1sX3dyaXRlX3Jlc2V0KSwKLQkgIChnc3RfZWJtbF93cml0ZV9mbHVzaF9jYWNoZSksIChnc3RfZWJtbF93cml0ZV9lbGVtZW50X3B1c2gpLAotCSAgKGdzdF9lYm1sX3dyaXRlX3NlZWspOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSAgTWFrZSBzdXJlIHdlIHNlbmQgYSBuZXdzZWdtZW50IGV2ZW50IGluIEJZVEVTIGZvcm1hdAotCSAgYmVmb3JlIHNlbmRpbmcgYnVmZmVycyAoIzMyODUzMSkuCi0KLTIwMDYtMDItMDYgMTI6MTg6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFBhc3MgdW5oYW5kbGVkIHF1ZXJpZXMgdXBzdHJlYW0gaW5zdGVhZCBvZiBqdXN0IGRyb3BwaW5nIHRoZW0gKCMzMjY0NDYpLiBVcGRhdGUgcXVlcnkgdHlwZSBhcnJheXMgaGVyZSBhbmQgdGhlcmUuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2ZGVtdXguYzogKGdzdF9kdmRlbXV4X3NyY19xdWVyeSksCi0JICAoZ3N0X2R2ZGVtdXhfc2lua19xdWVyeSk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19zcmNfcXVlcnkpOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKHNwZWV4X2dldF9xdWVyeV90eXBlcyksCi0JICAoc3BlZXhfZGVjX3NyY19xdWVyeSk6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX3NyY19xdWVyeSksCi0JICAoZ3N0X3NwZWV4ZW5jX3NpbmtfcXVlcnkpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfZ2V0X3NyY19xdWVyeV90eXBlcyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9nZXRfcXVlcnlfdHlwZXMpLAotCSAgKGdzdF93YXZwYXJzZV9wYWRfcXVlcnkpOgotCSAgUGFzcyB1bmhhbmRsZWQgcXVlcmllcyB1cHN0cmVhbSBpbnN0ZWFkIG9mIGp1c3QgZHJvcHBpbmcKLQkgIHRoZW0gKCMzMjY0NDYpLiBVcGRhdGUgcXVlcnkgdHlwZSBhcnJheXMgaGVyZSBhbmQgdGhlcmUuCi0KLTIwMDYtMDItMDYgMTE6NTc6NTIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6IENvbGxlY3RwYWRzIGluIGNvcmUgZ290IGNoYW5nZWQgYW5kIG5vdyBhbHNvIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGFueSBwYWQgdGhhdCBpcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6IChzZXR1cF9zcmNfcGFkKToKLQkgIENvbGxlY3RwYWRzIGluIGNvcmUgZ290IGNoYW5nZWQgYW5kIG5vdyBhbHNvIGhvbGRzIGEKLQkgIHJlZmVyZW5jZSB0byBhbnkgcGFkIHRoYXQgaXMgcGFydCBvZiBpdC4gRml4IHJlZmNvdW50Ci0JICBjaGVja3MgaW4gdGVzdCBjYXNlIGFjY29yZGluZ2x5LgotCi0yMDA2LTAyLTA2IDExOjQxOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXBldGFnL2dzdGFwZWRlbXV4Lmg6IEZpeCBpbmNsdWRlLCBmb3Igbm93IEdzdFRhZ0RlbXV4IGlzIGluIHRoZSBhcGV0YWcgZGlyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaDoKLQkgIEZpeCBpbmNsdWRlLCBmb3Igbm93IEdzdFRhZ0RlbXV4IGlzIGluIHRoZSBhcGV0YWcgZGlyLgotCi0yMDA2LTAyLTA2IDExOjM0OjIzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBBZGQgY2RpbyBwbHVnaW4gdG8gZG9jcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNkaW8ueG1sOgotCSAgQWRkIGNkaW8gcGx1Z2luIHRvIGRvY3MuCi0JICAqIGV4dC9jZGlvL2dzdGNkaW9jZGRhc3JjLmM6Ci0JICBBZGQgZ3RrLWRvYyBibHVyYi4KLQkgICogZXh0L2NkaW8vZ3N0Y2Rpby5jOgotCSAgVGhlIHBsdWdpbiBpcyBjYWxsZWQgJ2NkaW8nIG5vdCAnY2RkaW8nLgotCi0yMDA2LTAyLTA2IDEwOjU2OjA3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBBZGQgQVBFIHRhZyBkZW11eGVyICgjMzI1NjQ5KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWw6Ci0JICAqIGdzdC9hcGV0YWcvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9hcGV0YWcvZ3N0YXBlZGVtdXguYzoKLQkgICogZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5oOgotCSAgKiBnc3QvYXBldGFnL2dzdHRhZ2RlbXV4LmM6Ci0JICAqIGdzdC9hcGV0YWcvZ3N0dGFnZGVtdXguaDoKLQkgIEFkZCBBUEUgdGFnIGRlbXV4ZXIgKCMzMjU2NDkpLgotCi0yMDA2LTAyLTA1IDIyOjIyOjU2ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZXh0L2djb25mLzogSWdub3JlIGNoYW5naW5nIHRoZSBHQ29uZiBrZXkgdG8gIiIuIElnbm9yZSBHQ29uZiBrZXkgdXBkYXRlcyB0aGF0IGRvbid0IGFjdHVhbGx5IGNoYW5nZSB0aGUgc3RyaW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nY29uZi9nY29uZi5jOiAoZ3N0X2djb25mX2dldF9kZWZhdWx0X2F1ZGlvX3NpbmspLAotCSAgKGdzdF9nY29uZl9nZXRfZGVmYXVsdF92aWRlb19zaW5rKSwKLQkgIChnc3RfZ2NvbmZfZ2V0X2RlZmF1bHRfYXVkaW9fc3JjKSwKLQkgIChnc3RfZ2NvbmZfZ2V0X2RlZmF1bHRfdmlkZW9fc3JjKToKLQkgICogZXh0L2djb25mL2djb25mLmg6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5jOiAoZ3N0X2djb25mX2F1ZGlvX3NpbmtfcmVzZXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zaW5rX2luaXQpLCAoZ3N0X2djb25mX2F1ZGlvX3NpbmtfZGlzcG9zZSksCi0JICAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuaDoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zcmMuYzogKGdzdF9nY29uZl9hdWRpb19zcmNfcmVzZXQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zcmNfaW5pdCksIChnc3RfZ2NvbmZfYXVkaW9fc3JjX2Rpc3Bvc2UpLAotCSAgKGRvX3RvZ2dsZV9lbGVtZW50KToKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zcmMuaDoKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6IChnc3RfZ2NvbmZfdmlkZW9fc2lua19yZXNldCksCi0JICAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfaW5pdCksIChnc3RfZ2NvbmZfdmlkZW9fc2lua19kaXNwb3NlKSwKLQkgIChkb190b2dnbGVfZWxlbWVudCk6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5oOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5jOiAoZ3N0X2djb25mX3ZpZGVvX3NyY19yZXNldCksCi0JICAoZ3N0X2djb25mX3ZpZGVvX3NyY19pbml0KSwgKGdzdF9nY29uZl92aWRlb19zcmNfZGlzcG9zZSksCi0JICAoZG9fdG9nZ2xlX2VsZW1lbnQpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NyYy5oOgotCSAgSWdub3JlIGNoYW5naW5nIHRoZSBHQ29uZiBrZXkgdG8gIiIuIElnbm9yZSBHQ29uZiBrZXkgdXBkYXRlcwotCSAgdGhhdCBkb24ndCBhY3R1YWxseSBjaGFuZ2UgdGhlIHN0cmluZy4KLQkgIEZvciBub3csIGlnbm9yZSB0aGUgR0NvbmYga2V5IHdoZW4gdGhlIHN0YXRlIGlzID4gUkVBRFksIGFzCi0JICBpdCBicmVha3Mgc3RyZWFtaW5nLiBTb21ldGltZSBpdCB3aWxsIGJlIG5pY2UgdG8gYnJpbmcgdGhlCi0JICBuZXcgc2luayBvbmxpbmUgZXZlbiBtaWQtc3RyZWFtLCBieSBzZW5kaW5nIE5FV1NFR01FTlQgaW5mbwotCSAgYW5kIHBvc3NpYmx5IHByZXJvbGxpbmcuCi0JICAoRml4ZXMgIzMyNjczNikKLQotMjAwNi0wMi0wNSAyMDo0Mzo0OSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9nb29tLzogTWFrZSBnb29tIHJlZW50cmFudCBieSBtb3ZpbmcgYWxsIGltcG9ydGFudCBzdGF0aWMgdmFyaWFibGVzIGludG8gaW5zdGFuY2Ugc3RydWN0dXJlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9maWx0ZXJzLmM6ICh6b29tRmlsdGVyTmV3KSwgKGNhbGN1bGF0ZVBYYW5kUFkpLAotCSAgKHNldFBpeGVsUkdCKSwgKHNldFBpeGVsUkdCXyksIChnZXRQaXhlbFJHQiksIChnZXRQaXhlbFJHQl8pLAotCSAgKHpvb21GaWx0ZXJTZXRSZXNvbHV0aW9uKSwgKHpvb21GaWx0ZXJEZXN0cm95KSwKLQkgICh6b29tRmlsdGVyRmFzdFJHQiksIChwb2ludEZpbHRlcik6Ci0JICAqIGdzdC9nb29tL2ZpbHRlcnMuaDoKLQkgICogZ3N0L2dvb20vZ29vbV9jb3JlLmM6IChnb29tX2luaXQpLCAoZ29vbV9zZXRfcmVzb2x1dGlvbiksCi0JICAoZ29vbV91cGRhdGUpLCAoZ29vbV9jbG9zZSk6Ci0JICAqIGdzdC9nb29tL2dvb21fY29yZS5oOgotCSAgKiBnc3QvZ29vbS9nb29tX3Rvb2xzLmg6Ci0JICAqIGdzdC9nb29tL2dyYXBoaWMuYzoKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21fY2xhc3NfaW5pdCksIChnc3RfZ29vbV9pbml0KSwKLQkgIChnc3RfZ29vbV9kaXNwb3NlKSwgKGdzdF9nb29tX3NyY19zZXRjYXBzKSwgKGdzdF9nb29tX2NoYWluKToKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5oOgotCSAgKiBnc3QvZ29vbS9saW5lcy5jOiAoZ29vbV9saW5lcyk6Ci0JICAqIGdzdC9nb29tL2xpbmVzLmg6Ci0JICBNYWtlIGdvb20gcmVlbnRyYW50IGJ5IG1vdmluZyBhbGwgaW1wb3J0YW50IHN0YXRpYyB2YXJpYWJsZXMKLQkgIGludG8gaW5zdGFuY2Ugc3RydWN0dXJlcy4KLQkgIChGaXhlcyAjMzI5MTgxKQotCi0yMDA2LTAyLTA0IDE1OjQxOjQzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4Lio6IFRoaXJkIGF0dGVtcHQsIHVzZSBnc3RfcGFkX2lzX2xpbmtlZCgpIHRoaXMgdGltZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksCi0JICAoZ3N0X2F2aV9kZW11eF9hbGxfc291cmNlX3BhZHNfdW5saW5rZWQpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgVGhpcmQgYXR0ZW1wdCwgdXNlIGdzdF9wYWRfaXNfbGlua2VkKCkgdGhpcyB0aW1lLgotCi0yMDA2LTAyLTA0IDEzOjMwOjEyICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IEFkanVzdCBmb3IgZGF0YSBsZW5ndGggaW5kaWNhdG9ycyB3aGVuIHBhcnNpbmcgKEZpeGVzICMzMjk4MTApCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDNkZW11eF9pZDN2Ml9wYXJzZV9mcmFtZSksCi0JICAocGFyc2Vfc3BsaXRfc3RyaW5ncyk6Ci0JICBBZGp1c3QgZm9yIGRhdGEgbGVuZ3RoIGluZGljYXRvcnMgd2hlbiBwYXJzaW5nIChGaXhlcyAjMzI5ODEwKQotCSAgRml4IHN0dXBpZCBidWcgcGFyc2luZyBVVEYtOCB0YWcgdGV4dC4KLQkgIE91dHB1dCB0YWcgc3RyaW5ncyB3aXRoIG11bHRpcGxlIGZpZWxkcyBhcyBtdWx0aXBsZSB0YWdzLCBzbyB0aGUKLQkgIGFwcCBnZXRzIGFsbCB0aGUgZGF0YS4KLQotMjAwNi0wMi0wMyAyMDowNToyMCArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICBGaXhlZCBhIGJ1ZyBhZGQgaW4gbGFzdCBjb21taXQsIHdoZXJlIG5vIGV2ZW50IGlzIHNlbmQuIFRoYW5rcyBUaW0gdG8gc2hvdyBtZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4ZWQgYSBidWcgYWRkIGluIGxhc3QgY29tbWl0LCB3aGVyZSBubyBldmVudCBpcyBzZW5kLiBUaGFua3MgVGltIHRvIHNob3cgbWUuCi0KLTIwMDYtMDItMDMgMTg6MDc6MzUgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogQ2hhbmdlTG9nOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOgotCSAgSnVzdCBtYWtlIGl0IGNvbXBpbGUgd2l0aCAtLWRpc2FibGUtZ3N0LWRlYnVnLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBKdXN0IG1ha2UgaXQgY29tcGlsZSB3aXRoIC0tZGlzYWJsZS1nc3QtZGVidWcuCi0KLTIwMDYtMDItMDMgMTY6NTU6NDIgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgdXBkYXRlIHNwZWMgZmlsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGUgc3BlYyBmaWxlCi0KLTIwMDYtMDItMDMgMTM6MDY6MjQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogTmV2ZXIgb3V0cHV0IGEgdGFnIHdpdGggYSBudWxsIGNvbnRlbnRzIHN0cmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKHBhcnNlX3RleHRfaWRlbnRpZmljYXRpb25fZnJhbWUpLAotCSAgKGlkM3YyX3RhZ190b190YWdsaXN0KSwgKGlkM3YyX2dlbnJlX3N0cmluZ190b190YWdsaXN0KSwKLQkgIChpZDN2Ml9nZW5yZV9maWVsZHNfdG9fdGFnbGlzdCk6Ci0JICBOZXZlciBvdXRwdXQgYSB0YWcgd2l0aCBhIG51bGwgY29udGVudHMgc3RyaW5nLgotCi0yMDA2LTAyLTAyIDIxOjAwOjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IE9ubHkgcGF1c2UgaWYgYWxsIHBhZHMgYXJlIHVubGlua2VkIEFORCB3ZSd2ZSB0cmllZCB0byBzZW5kIGRhdGEgb24gYWxsIG9mIHRoZW0gYXQgbGVhc3Qgb25jZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2FsbF9zb3VyY2VfcGFkc191bmxpbmtlZCk6Ci0JICBPbmx5IHBhdXNlIGlmIGFsbCBwYWRzIGFyZSB1bmxpbmtlZCBBTkQgd2UndmUgdHJpZWQgdG8gc2VuZCBkYXRhCi0JICBvbiBhbGwgb2YgdGhlbSBhdCBsZWFzdCBvbmNlLgotCi0yMDA2LTAyLTAyIDEyOjI5OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IE1ha2UgbG9vcCBmdW5jdGlvbi90YXNrIHBhdXNlIGl0c2VsZiB3aGVuIGFsbCBzb3VyY2UgcGFkcyBhcmUgdW5saW5rZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9hbGxfc291cmNlX3BhZHNfdW5saW5rZWQpLAotCSAgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKGdzdF9hdmlfZGVtdXhfbG9vcCk6Ci0JICBNYWtlIGxvb3AgZnVuY3Rpb24vdGFzayBwYXVzZSBpdHNlbGYgd2hlbiBhbGwgc291cmNlIHBhZHMgYXJlCi0JICB1bmxpbmtlZC4KLQotMjAwNi0wMi0wMiAxMDo0NzoxNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgVXNlIG5ldyBmdW5jdGlvbnMgZnJvbSBjb3JlIHRvIHJlbmRlciBhIGJpbiBmcm9tIGEgc3RyaW5nLiBGaXhlcyBidWlsZC4gVXAgcmVxdWlyZW1lbnRzIHRvIGNvcmUgQ1ZTLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZXh0L2djb25mL2djb25mLmM6IChnc3RfZ2NvbmZfcmVuZGVyX2Jpbl9mcm9tX2tleSk6Ci0JICBVc2UgbmV3IGZ1bmN0aW9ucyBmcm9tIGNvcmUgdG8gcmVuZGVyIGEgYmluIGZyb20gYQotCSAgc3RyaW5nLiBGaXhlcyBidWlsZC4gVXAgcmVxdWlyZW1lbnRzIHRvIGNvcmUgQ1ZTLgotCi0yMDA2LTAyLTAxIDExOjAxOjA0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IERvbid0IHB1c2ggYnVmZmVycyBpbnRvIHRoZSBhZGFwdGVyIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHB1c2ggZG93bnN0cmVhbSBhZ2FpbiB3aXRob3V0IGZyYW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVfcGFyc2VfY2hhaW4pOgotCSAgRG9uJ3QgcHVzaCBidWZmZXJzIGludG8gdGhlIGFkYXB0ZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8KLQkgIHB1c2ggZG93bnN0cmVhbSBhZ2FpbiB3aXRob3V0IGZyYW1pbmcgYW55d2F5LiBBbHNvLCB0aGUKLQkgIGFkYXB0b3IgdGFrZXMgb3duZXJzaGlwIG9mIGJ1ZmZlcnMgcHV0IGludG8gaXQgKGZpeGVzCi0JICBhdXBhcnNlIHB1c2hpbmcgaW52YWxpZCBidWZmZXJzIGZvciAuYXUgZmlsZXMgd2l0aAotCSAgQURQQ00gY29udGVudHMpLiBGaW5hbGx5LCBzZXQgY2FwcyBvbiBhbGwgb3V0Z29pbmcgYnVmZmVycy4KLQotMjAwNi0wMS0zMCAyMzoxMzowNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGdzdC9pZDNkZW11eC86IFNvbWVvbmUgc2hvdWxkIGtpY2sgbXkgYnV0dC4gUmVtb3ZlIElEM3YxIHRhZ3MgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaWxlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5jOiAoZ3N0X2lkM2RlbXV4X2NoYWluKSwKLQkgIChnc3RfaWQzZGVtdXhfcmVhZF9pZDN2MSksIChnc3RfaWQzZGVtdXhfc2lua19hY3RpdmF0ZSksCi0JICAoZ3N0X2lkM2RlbXV4X3NlbmRfdGFnX2V2ZW50KToKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuYzogKGlkM2RlbXV4X3JlYWRfaWQzdjFfdGFnKToKLQkgIFNvbWVvbmUgc2hvdWxkIGtpY2sgbXkgYnV0dC4gUmVtb3ZlIElEM3YxIHRhZ3MgZnJvbSB0aGUgZW5kIG9mIHRoZQotCSAgZmlsZS4KLQkgIEltcHJvdmUgZXJyb3IgbWVzc2FnZXMuIFNlbmQgdGhlIFRBRyBtZXNzYWdlIGFzIHNvb24gYXMgd2UgY29tcGxldGUKLQkgIHR5cGVmaW5kaW5nLCBpbnN0ZWFkIG9mIHdhaXRpbmcgdW50aWwgd2Ugc2VuZCB0aGUgZmlyc3QgYnVmZmVyLgotCSAgRG93bnN0cmVhbSB0YWcgZXZlbnQgaXMgc3RpbGwgc2VudCBiZWZvcmUgdGhlIGZpcnN0IGJ1ZmZlci4KLQotMjAwNi0wMS0yOSAyMDowNzo0OSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiBBZGQgZGVidWcgY2F0ZWdvcnksIHVzZSBib2lsZXJwbGF0ZSBtYWNyb3MsIGZpeCBoYW5kbGluZyBvZiB3aWR0aHMgb2YgMzIgYml0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6IChnc3Rfd2F2cGFja19kZWNfc2V0Y2FwcyksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2Jhc2VfaW5pdCksIChnc3Rfd2F2cGFja19kZWNfZGlzcG9zZSksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2NsYXNzX2luaXQpLCAoZ3N0X3dhdnBhY2tfZGVjX3NpbmtfZXZlbnQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19pbml0KSwgKGdzdF93YXZwYWNrX2RlY19mb3JtYXRfc2FtcGxlcyksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2NoYWluKSwgKGdzdF93YXZwYWNrX2RlY19wbHVnaW5faW5pdCk6Ci0JICBBZGQgZGVidWcgY2F0ZWdvcnksIHVzZSBib2lsZXJwbGF0ZSBtYWNyb3MsIGZpeCBoYW5kbGluZwotCSAgb2Ygd2lkdGhzIG9mIDMyIGJpdHMuCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2twYXJzZS5jOiAoZ3N0X3dhdnBhY2tfcGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9kaXNwb3NlKSwgKGdzdF93YXZwYWNrX3BhcnNlX2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2luZGV4X2dldF9sYXN0X2VudHJ5KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9pbmRleF9nZXRfZW50cnlfZnJvbV9zYW1wbGUpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2luZGV4X2FwcGVuZF9lbnRyeSksIChnc3Rfd2F2cGFja19wYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2Vfc3JjX3F1ZXJ5KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zY2FuX3RvX2ZpbmRfc2FtcGxlKSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zZW5kX25ld3NlZ21lbnQpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2hhbmRsZV9zZWVrX2V2ZW50KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9zcmNfZXZlbnQpLCAoZ3N0X3dhdnBhY2tfcGFyc2VfaW5pdCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfZ2V0X3Vwc3RyZWFtX2xlbmd0aCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfcHVsbF9idWZmZXIpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NyZWF0ZV9zcmNfcGFkKSwgKGdzdF93YXZwYWNrX3BhcnNlX2xvb3ApLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3dhdmVwYWNrX3BhcnNlX3NpbmtfYWN0aXZhdGUpLAotCSAgKGdzdF93YXZlcGFja19wYXJzZV9zaW5rX2FjdGl2YXRlX3B1bGwpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3BsdWdpbl9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmg6Ci0JICBSZXdyaXRlIGEgYml0LCBtb3N0bHkgdG8gZml4IGZsb3cgbG9naWMgYW5kIHRvIG1ha2Ugc2Vla2luZyB3b3JrLgotCSAgRml4IGJ1ZmZlci9ldmVudCByZWZjb3VudGluZy4gQWRkIHNvbWUgZGVidWcgc3RhdGVtZW50cy4gQWRkCi0JICB3aWR0aCBvZiAzMiB0byBzb3VyY2UgcGFkIHRlbXBsYXRlIGNhcHMuIFVzZSBib2lsZXJwbGF0ZSBtYWNyb3MuCi0KLTIwMDYtMDEtMjcgMTI6MTc6NTYgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZXh0L2R2LzogQ2FsbCBkdl9zZXRfZXJyb3JfbG9nIChkdl9kZWNvZGVyX3QgKiwgTlVMTCk7IGFmdGVyIGR2X2RlY29kZXJfbmV3IHRvIG5vdCBoYXZlIHdhcmluZ3MgZmxvb2Rpbmcgc3RkZXJyLiB0aGlzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDEtMjcgIEphbiBHZXJiZXIgIDxqQGJvb3RsYWIub3JnPgotCSAgUmV2aWV3ZWQgYnk6IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZXh0L2R2L2dzdGR2ZGVjLmMgKGdzdF9kdmRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jIChnc3RfZHZkZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgQ2FsbCBkdl9zZXRfZXJyb3JfbG9nIChkdl9kZWNvZGVyX3QgKiwgTlVMTCk7IGFmdGVyIGR2X2RlY29kZXJfbmV3Ci0JICB0byBub3QgaGF2ZSB3YXJpbmdzIGZsb29kaW5nIHN0ZGVyci4gdGhpcyBpcyB0aGUgc3VnZ2VzdGVkIHdheQotCSAgYWxzbyB1c2VkIGluIGR2Z3JhYiBhbmQga2luby4gKCMzMjgzMzYpCi0KLTIwMDYtMDEtMjcgMDE6NDM6MDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBzeXMvb3NzL2dzdG9zc3NpbmsuYzogRnJlZSB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nIHdoZW4gZmluYWxpc2VkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc19zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9vc3Nfc2lua19pbml0KSwgKGdzdF9vc3Nfc2lua19maW5hbGlzZSk6Ci0JICBGcmVlIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcgd2hlbiBmaW5hbGlzZWQuCi0KLTIwMDYtMDEtMjYgMTY6MjM6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogRml4IHdyb25nIG1lbWNweSBzb3VyY2UgcG9pbnRlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRml4IHdyb25nIG1lbWNweSBzb3VyY2UgcG9pbnRlci4KLQotMjAwNi0wMS0yNSAyMjowNToyOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IERvbid0IHB1dCBmdW5jdGlvbiBjYWxscyBpbiBnX3JldHVybl9pZl9mYWlsKCkgc3RhdGVtZW50cywgb3IgdGhleSdsbCBiZSByZXBsYWNlZCB3aXRoIE5PLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfcmVtb3ZlX3NyY3BhZCk6Ci0JICBEb24ndCBwdXQgZnVuY3Rpb24gY2FsbHMgaW4gZ19yZXR1cm5faWZfZmFpbCgpIHN0YXRlbWVudHMsCi0JICBvciB0aGV5J2xsIGJlIHJlcGxhY2VkIHdpdGggTk9PUHMgaWYgc29tZW9uZSBjb21waWxlcyB3aXRoCi0JICBHX0RJU0FCTEVfQ0hFQ0tTIGRlZmluZWQuCi0KLTIwMDYtMDEtMjUgMjA6MzM6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBjaGFuZ2Vsb2cgc3VyZ2VyeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjaGFuZ2Vsb2cgc3VyZ2VyeQotCi0yMDA2LTAxLTI1IDE4OjIzOjA1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IE5ldmVyIHRydXN0IEFOWSBpbmZvcm1hdGlvbiBlbmNvZGVkIGluIGEgbWVkaWEgZmlsZSwgZXNwZWNpYWxseSB3aGVuIGl0J3MgZ2l2aW5nIHlvdSBzaXplLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDNkZW11eF9pZDN2Ml9wYXJzZV9mcmFtZSk6Ci0JICBOZXZlciB0cnVzdCBBTlkgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiBhIG1lZGlhIGZpbGUsIGVzcGVjaWFsbHkKLQkgIHdoZW4gaXQncyBnaXZpbmcgeW91IHNpemVzLiAoRml4ZXMgIzMyODQ1MikKLQotMjAwNi0wMS0yNCAxODowMzo0NiArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFwYXkuYzoKLQkgIEknbSB0b28gbGF6eSB0byBjb21tZW50IHRoaXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF0Y2ggd3JpdHRlbiBieSBLYWkgVmVobWFuZW4gPGthaS52ZWhtYW5lbkBub2tpYS5jb20+IGFwcGxpZWQuIFNlZSBidWcgIzMyNTE0OC4KLQotMjAwNi0wMS0yNCAxMTo1ODo1MyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBNb3JlIGNvaGVyZW50IGZyYW1lcmF0ZSBzZXR0aW5nIG9uIGNhcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCSAgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIE1vcmUgY29oZXJlbnQgZnJhbWVyYXRlIHNldHRpbmcgb24gY2Fwcy4KLQkgIElmIHNhbXBsZV9zaXplIGlzIGF2YWlsYWJsZSwgdXNlIHRoYXQgZm9yIHRoZSBzYW1wbGVzJyBkdXJhdGlvbiBpbgotCSAgdGhlIGluZGV4LiBUaGlzIGVuYWJsZXMgc2luZ2xlIGZyYW1lIHN0cmVhbXMgdG8gd29yayAoYW5kIEkgaW1hZ2luZQotCSAgZml4ZXMgc29tZSBvdGhlciBjYXNlcykuCi0JICBUZXN0ZWQgb24gdGVzdHN1aXRlLCBubyByZWdyZXNzaW9uLgotCi0yMDA2LTAxLTIzIDE4OjM5OjMxICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvbWF0cm9za2EvOiBBZGRlZCByZWNvZ25pdGlvbiBvZiBSZWFsIEF1ZGlvIGFuZCBWaWRlbyBzdHJlYW1zIGluIG1hdHJvc2thIGRlbXV4ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2FwcyksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpLCAoZ3N0X21hdHJvc2thX2RlbXV4X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgQWRkZWQgcmVjb2duaXRpb24gb2YgUmVhbCBBdWRpbyBhbmQgVmlkZW8gc3RyZWFtcyBpbiBtYXRyb3NrYSBkZW11eGVyLgotCi0yMDA2LTAxLTIzIDE1OjEwOjU1ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZGVkIGNvZGVjIHJlY29nbml0aW9uIGZvcjogXyBWUDMxIDogdmlkZW8veC12cDMgXyBBVkRKIDogaW1hZ2UvanBlZyBfIGR2Y3AsIGR2YyAgOiB2aWRlby94LWQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyYWspLAotCSAgKHF0ZGVtdXhfdmlkZW9fY2FwcyksIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgQWRkZWQgY29kZWMgcmVjb2duaXRpb24gZm9yOgotCSAgXyBWUDMxIDogdmlkZW8veC12cDMKLQkgIF8gQVZESiA6IGltYWdlL2pwZWcKLQkgIF8gZHZjcCwgZHZjICA6IHZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZQotCSAgXyAweDZkNzMwMDE3IDogYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpcXVpY2t0aW1lCi0KLTIwMDYtMDEtMjMgMTQ6MzI6NDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogUmVtb3ZlIGVycmFudCBicmVhayBzdGF0ZW1lbnQsIGFuZCBmaXggY29tcGlsYXRpb24gd2l0aCBvbGRlciBHQ0MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyZnJhbWVzLmM6IChpZDN2Ml90YWdfdG9fdGFnbGlzdCk6Ci0JICBSZW1vdmUgZXJyYW50IGJyZWFrIHN0YXRlbWVudCwgYW5kIGZpeCBjb21waWxhdGlvbiB3aXRoCi0JICBvbGRlciBHQ0MuCi0KLTIwMDYtMDEtMjMgMTI6MDQ6MTIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBNZW50aW9uIHRoYXQgbXkgbGFzdCBjb21taXQgZml4ZXMgIzMyODI0MQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBNZW50aW9uIHRoYXQgbXkgbGFzdCBjb21taXQgZml4ZXMgIzMyODI0MQotCi0yMDA2LTAxLTIzIDExOjA2OjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvc3VuYXVkaW8vOiBFeHBvcnQgZnVuY3Rpb25zIHRoYXQgYXJlIG5lZWRlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSwgbWFrZXMgdGhlIG1peGVyIGFjdHVhbGx5IHdvcms7IGFkanVzdCBtYWcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmM6Ci0JICAqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYzogKGdzdF9zdW5hdWRpb3NpbmtfaW5pdCk6Ci0JICBFeHBvcnQgZnVuY3Rpb25zIHRoYXQgYXJlIG5lZWRlZCBpbiBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSwKLQkgIG1ha2VzIHRoZSBtaXhlciBhY3R1YWxseSB3b3JrOyBhZGp1c3QgbWFnaWMgbWluaW11bSBidWZmZXItdGltZQotCSAgdmFsdWUgZnJvbSAzbXMgdG8gNW1zIHRvIHdvcmsgYXJvdW5kIHN0dXR0ZXJpbmcgZHVyaW5nIG1wMwotCSAgcGxheWJhY2sgKCMzMjc3NjUpLgotCi0yMDA2LTAxLTIzIDEwOjQ0OjAzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEZpeCBwb3NzaWJsZSBkZWFkbG9jayBpbiBtYXRyb3NrYSBtdXhlciAoIzMyNzgyNSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfYmVzdF9wYWQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfZGF0YSksIChnc3RfbWF0cm9za2FfbXV4X2NvbGxlY3RlZCk6Ci0JICBGaXggcG9zc2libGUgZGVhZGxvY2sgaW4gbWF0cm9za2EgbXV4ZXIgKCMzMjc4MjUpLgotCi0yMDA2LTAxLTIzIDA5OjU5OjAzICswMDAwICBKZW5zIEdyYW5zZXVlciA8amVuc2dyQGdteC5uZXQ+Ci0KLQkgIEM4OSBmaXhlczogZGVjbGFyZSB2YXJpYWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrIGFuZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChnc3RfcG5nZW5jX2NoYWluKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9pbnZlcnQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOiAoZ3N0X3J0cF9tcDR2X2RlcGF5X3NldGNhcHMpOgotCSAgKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmg6Ci0JICAqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5jOiAoZ3N0X2R5bnVkcHNpbmtfcmVuZGVyKToKLQkgICogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3N0YXRzKToKLQkgIEM4OSBmaXhlczogZGVjbGFyZSB2YXJpYWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrIGFuZAotCSAgbWFrZSBnY2MtMi45eCBoYXBweSAoIzMyODI2NDsgcGF0Y2ggYnk6IEplbnMgR3JhbnNldWVyCi0JICA8amVuc2dyIGF0IGdteCBkb3QgbmV0PikuCi0KLTIwMDYtMDEtMjMgMDk6MjI6MTcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvOiBSZXdyaXRlIHBhcnNpbmcgb2YgdGV4dCB0YWdzIHRvIGhhbmRsZSBtdWx0aXBsZSBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5ncy4gUGFyc2UgbnVtZXJpYyBnZW5yZSBzdHJpbmdzIGEuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAoaWQzZGVtdXhfcmVhZF9pZDN2Ml90YWcpOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5oOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKGlkM2RlbXV4X2lkM3YyX3BhcnNlX2ZyYW1lKSwKLQkgIChwYXJzZV9jb21tZW50X2ZyYW1lKSwgKHBhcnNlX3RleHRfaWRlbnRpZmljYXRpb25fZnJhbWUpLAotCSAgKGlkM3YyX3RhZ190b190YWdsaXN0KSwgKGlkM3YyX2FyZV9kaWdpdHMpLAotCSAgKGlkM3YyX2dlbnJlX3N0cmluZ190b190YWdsaXN0KSwgKGlkM3YyX2dlbnJlX2ZpZWxkc190b190YWdsaXN0KSwKLQkgIChwYXJzZV9zcGxpdF9zdHJpbmdzKSwgKGZyZWVfdGFnX3N0cmluZ3MpOgotCSAgUmV3cml0ZSBwYXJzaW5nIG9mIHRleHQgdGFncyB0byBoYW5kbGUgbXVsdGlwbGUgTlVMTCB0ZXJtaW5hdGVkCi0JICBzdHJpbmdzLiBQYXJzZSBudW1lcmljIGdlbnJlIHN0cmluZ3MgYW5kIElEM3YyIHR5cGUKLQkgICIoMykoNilBbHRlcm5hdGl2ZSIgc3R5bGUgZ2VucmUgc3RyaW5ncy4KLQkgIFBhcnNlIGRhdGVzIHRoYXQgYXJlIG9ubHkgWVlZWSBvciBZWVlZLW1tIGZvcm1hdC4KLQotMjAwNi0wMS0yMSAxMTo0Mzo1MyArMDAwMCAgRmFicml6aW8gPGZhYnJpemlvLmdlQHRpc2NhbGkuaXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogJ3R3b3MnIGFuZCAnc293dCcgZm91cmNjIGNhbiBiZSAxNmJpdCBvciA4Yml0IGF1ZGlvLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2VfdHJhayksCi0JICAocXRkZW11eF9hdWRpb19jYXBzKToKLQkgICd0d29zJyBhbmQgJ3Nvd3QnIGZvdXJjYyBjYW4gYmUgMTZiaXQgb3IgOGJpdCBhdWRpby4KLQkgIEZpeCA4Yml0IGNhc2UgKCMzMjcxMzMsIGJhc2VkIG9uIHBhdGNoIGJ5OiBGYWJyaXppbwotCSAgR2VubmFyaSA8ZmFicml6aW8gZG90IGdlIGF0IHRpc2NhbGkgZG90IGl0PikuCi0JICBBbHNvLCAiR19MSVRUTEVfRU5ESUFOIiBhbmQgIkdfQklHX0VORElBTiIgYXJlIG5vdAotCSAgdmFsaWQgbGl0ZXJhbHMgZm9yIGVuZGlhbm5lc3MgaW4gY2FwcyBzdHJpbmdzLAotCSAgb25seSAiTElUVExFX0VORElBTiIgYW5kICJCSUdfRU5ESUFOIiBhcmUgdmFsaWQuCi0KLTIwMDYtMDEtMjAgMTU6MDY6MjggKzAwMDAgIENocmlzdG9waCBCdXJnaGFyZHQgPGhhd2tlc0B3ZWIuZGU+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBEb24ndCBmb3JnZXQgdG8gaW5pdGlhbGl6ZSBsaWJvaWwsIG90aGVyd2lzZSBvdXIgb2lsIGZ1bmN0aW9ucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF9jbGFzc19pbml0KToKLQkgIERvbid0IGZvcmdldCB0byBpbml0aWFsaXplIGxpYm9pbCwgb3RoZXJ3aXNlIG91ciBvaWwgZnVuY3Rpb25zCi0JICB3aWxsIGNyYXNoIChmaXhlcyAjMzI3ODcxOyBwYXRjaCBieTogQ2hyaXN0b3BoIEJ1cmdoYXJkdAotCSAgPGhhd2tlcyBhdCB3ZWIgZG90IGRlPikuCi0KLTIwMDYtMDEtMTkgMjE6NDY6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIENoYW5nZUxvZyBzdXJnZXJ5IChsYXN0IGVudHJ5IG1heSBoYXZlIGJlZW4gc2xpZ2h0bHkgbWlzbGVhZGluZykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkgKGxhc3QgZW50cnkgbWF5IGhhdmUgYmVlbiBzbGlnaHRseSBtaXNsZWFkaW5nKQotCi0yMDA2LTAxLTE5IDIxOjAwOjUwICswMDAwICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYzoganVzdCBsaWtlIGluIHRoZSBjb3JlIGFuZCBnc3QtcGx1Z2lucy1iYXNlLiBGaXhlcyBidWlsZCBvbiBTb2xhcmlzIChmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIFVzZSBwbGFpbiBBU19MSUJUT09MX1RBR1MgaW5zdGVhZCBvZiBBU19MSUJUT09MX1RBR1MoW0NYWF0pLCBqdXN0Ci0JICBsaWtlIGluIHRoZSBjb3JlIGFuZCBnc3QtcGx1Z2lucy1iYXNlLiBGaXhlcyBidWlsZCBvbiBTb2xhcmlzIChmaXhlcwotCSAgIzMyNjY4MzsgcGF0Y2ggYnk6IEJyaWFuIENhbWVyb24gPGJyaWFuIGRvdCBjYW1lcm9uIGF0IHN1biBkb3QgY29tPikKLQotMjAwNi0wMS0xOSAwMDoxMDo1MSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2NkaW8vOiBGaXggYnVpbGQgZm9yIGxpYmNkaW8gdmVyc2lvbnMgPj0gNzY7IGdpdmUgc2xpZ2h0bHkgbG93ZXIgcmFuayB0aGFuIGNkcGFyYW5vaWEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpby5jOiAoZ3N0X2NkaW9fYWRkX2NkdGV4dF9maWVsZCksIChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW8uaDoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuYzogKGdzdF9jZGlvX2NkZGFfc3JjX2dldF9jZHRleHQpOgotCSAgRml4IGJ1aWxkIGZvciBsaWJjZGlvIHZlcnNpb25zID49IDc2OyBnaXZlIHNsaWdodGx5IGxvd2VyIHJhbmsKLQkgIHRoYW4gY2RwYXJhbm9pYS4KLQotMjAwNi0wMS0xOCAxOTozMDozNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgUG9ydCBsaWJjZGlvIGNkZGEgc291cmNlLCBmb3JtZXJseSBrbm93biBhcyBjZGRhc3JjLCBub3cga25vd24gYXMgY2Rpb2NkZGFzcmMgKGZpeGVzICMzMjMzMjcpLiBTaG91bGQgYWxzbyByZWFkIENELVRFLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBleHQvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9jZGlvL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2Rpby9nc3RjZGlvLmM6Ci0JICAqIGV4dC9jZGlvL2dzdGNkaW8uaDoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuYzoKLQkgICogZXh0L2NkaW8vZ3N0Y2Rpb2NkZGFzcmMuaDoKLQkgIFBvcnQgbGliY2RpbyBjZGRhIHNvdXJjZSwgZm9ybWVybHkga25vd24gYXMgY2RkYXNyYywgbm93IGtub3duIGFzCi0JICBjZGlvY2RkYXNyYyAoZml4ZXMgIzMyMzMyNykuIFNob3VsZCBhbHNvIHJlYWQgQ0QtVEVYVCBpZiBhdmFpbGFibGUsCi0JICBidXQgdGhhdCdzIG5vdCB0ZXN0ZWQgKGZpeGVzICMzMTc2NTgpLgotCi0yMDA2LTAxLTE4IDE5OjA4OjA4ICswMDAwICBUb21taSBNecO2aMOkbmVuIDxleHQtdG9tbWkubXlvaGFuZW5Abm9raWEuY29tPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogRml4IGNvbnZlcnNpb24gZnJvbSBUSU1FIHRvIEJZVEVTIGZvcm1hdCAoZml4ZXMgIzMyNjg2NDsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wYWRfY29udmVydCk6Ci0JICBGaXggY29udmVyc2lvbiBmcm9tIFRJTUUgdG8gQllURVMgZm9ybWF0IChmaXhlcyAjMzI2ODY0OwotCSAgcGF0Y2ggYnk6IFRvbW1pIE15w7Zow6RuZW4gPGV4dC10b21taSBkb3QgbXlvaGFuZW4gYXQgbm9raWEgZG90IGNvbT4pCi0KLTIwMDYtMDEtMTggMTg6NTQ6MDIgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgUm9uYWxkJ3MgcGF0Y2ggYXBwbGllZC4gc2VlIGJ1ZyAjMzI2MzE4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSb25hbGQncyBwYXRjaCBhcHBsaWVkLiBzZWUgYnVnICMzMjYzMTguCi0KLTIwMDYtMDEtMTcgMTY6NDU6NDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguKjogRml4IHNlZWtpbmcgZm9yIHF1aWNrdGltZSBmaWxlcy4gQ291bGQgc3RpbGwgdXNlIHNvbWUgbW9yZSBsb3ZlIGFuZCBzb3BoaXN0aWNhdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9pbml0KSwKLQkgIChnc3RfcXRkZW11eF9zZW5kX2V2ZW50KSwgKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCSAgKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSksIChnc3RfcXRkZW11eF9sb29wX2hlYWRlcik6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkgIEZpeCBzZWVraW5nIGZvciBxdWlja3RpbWUgZmlsZXMuIENvdWxkIHN0aWxsIHVzZSBzb21lIG1vcmUKLQkgIGxvdmUgYW5kIHNvcGhpc3RpY2F0aW9uLgotCi0yMDA2LTAxLTE2IDEwOjIzOjQ3ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIHVwZGF0ZSB3aXRoIGxvdmUKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHdpdGggbG92ZQotCi0yMDA2LTAxLTE1IDIwOjIxOjQ4ICswMDAwICBTZXJnZXkgU2NvYmljaCA8c2VyZ2V5LnNjb2JpY2hAZ21haWwuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogRml4IGNvbXBpbGF0aW9uIG9mIGlkM2RlbXV4IHdoZW4gemxpYiBpcyBub3QgcHJlc2VudC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjJmcmFtZXMuYzogKGlkM2RlbXV4X2lkM3YyX3BhcnNlX2ZyYW1lKToKLQkgIEZpeCBjb21waWxhdGlvbiBvZiBpZDNkZW11eCB3aGVuIHpsaWIgaXMgbm90IHByZXNlbnQuCi0JICAoRml4ZXMgIzMyNjYwMjsgcGF0Y2ggYnk6IFNlcmdleSBTY29iaWNoKQotCi0yMDA2LTAxLTE1IDE0OjEyOjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZXNkL01ha2VmaWxlLmFtOiBvdGhlcndpc2UgYnVpbGQgd2lsbCBmYWlsIGZvciBmb2xrcyB3aXRoIGxpYmVzZCBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXggKCMzMjcwMDkpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9lc2QvTWFrZWZpbGUuYW06Ci0JICBBZGQgJChFU0RfQ0ZMQUdTKSwgb3RoZXJ3aXNlIGJ1aWxkIHdpbGwgZmFpbCBmb3IgZm9sa3MKLQkgIHdpdGggbGliZXNkIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeCAoIzMyNzAwOSkuCi0KLTIwMDYtMDEtMTMgMTk6Mjk6MjcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBiYWNrIHRvIGhlYWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmFjayB0byBoZWFkCi0KLTIwMDYtMDEtMTMgMTk6MjU6NDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGRvY3MvdXBsb2FkLm1hazoKLQkgIHJlbGVhc2luZyAwLjEwLjEKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVsZWFzaW5nIDAuMTAuMQotCi0yMDA2LTAxLTEzIDE4OjM3OjEzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiBmaXggbWVtbGVhay4gIEZpeGVzICMzMjY2MTgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcGF0Y2ggYnk6IFdpbSBUYXltYW5zCi0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6IChnc3Rfc21va2VlbmNfY2hhaW4pOgotCSAgZml4IG1lbWxlYWsuICBGaXhlcyAjMzI2NjE4Ci0KLTIwMDYtMDEtMTMgMTg6MzU6MDAgKzAwMDAgIE1pa2UgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L2xldmVsL2dzdGxldmVsLmM6IEZpeCBtZW1sZWFrLiAgRml4ZXMgIzMyNjYxMgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA2LTAxLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCSAgcGF0Y2ggYnk6IE1pa2UgU21pdGgKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6IChnc3RfbGV2ZWxfbWVzc2FnZV9uZXcpLAotCSAgKGdzdF9sZXZlbF9tZXNzYWdlX2FwcGVuZF9jaGFubmVsKToKLQkgIEZpeCBtZW1sZWFrLiAgRml4ZXMgIzMyNjYxMgotCi0yMDA2LTAxLTExIDExOjM5OjEwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29uZmlndXJlLmFjOiBwcmVyZWxlYXNpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBwcmVyZWxlYXNpbmcKLQkgICogcG8vYWYucG86Ci0JICAqIHBvL2F6LnBvOgotCSAgKiBwby9jcy5wbzoKLQkgICogcG8vZW5fR0IucG86Ci0JICAqIHBvL2h1LnBvOgotCSAgKiBwby9pdC5wbzoKLQkgICogcG8vbmIucG86Ci0JICAqIHBvL25sLnBvOgotCSAgKiBwby9vci5wbzoKLQkgICogcG8vc3EucG86Ci0JICAqIHBvL3NyLnBvOgotCSAgKiBwby9zdi5wbzoKLQkgICogcG8vdWsucG86Ci0JICAqIHBvL3ZpLnBvOgotCSAgdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDA2LTAxLTExIDExOjA0OjAzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBzdXBwb3J0IGZvciBJbmRlbzMgdmlkZW8gaW4gUXVpY2t0aW1lIGZpbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXZpZXdlZCBieTogRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEFkZCBzdXBwb3J0IGZvciBJbmRlbzMgdmlkZW8gaW4gUXVpY2t0aW1lIGZpbGVzLgotCSAgQ2xvc2VzICMzMjY1MjQKLQotMjAwNi0wMS0xMCAxMjozODo1OSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogRG9uJ3QgbGVhayBmaWx0ZXIgYXJyYXlzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX2NsYXNzX2luaXQpLAotCSAgKGdzdF9sZXZlbF9kaXNwb3NlKToKLQkgIERvbid0IGxlYWsgZmlsdGVyIGFycmF5cy4KLQotMjAwNi0wMS0wOSAxNzowNDo1MiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvdXBsb2FkLm1hazoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkqIHN5cy9NYWtlZmlsZS5hbToKLQkqIHN5cy9zdW5hdWRpby9NYWtlZmlsZS5hbToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmg6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYzoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5oOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5oOgotCSAgYWRkIFN1biBBdWRpbyBwbHVnaW4uIFZlcmlmaWVkIHRoYXQgbm90aGluZyBicmVha3MgYW5kIHRoYXQgbWFrZSBjaGVjayB3b3Jrcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIFN1biBBdWRpbyBwbHVnaW4uIFZlcmlmaWVkIHRoYXQgbm90aGluZyBicmVha3MgYW5kIHRoYXQgbWFrZSBjaGVjayB3b3Jrcy4KLQkgIERvbid0IHRoaW5rIHRoZSBkb2NzIGdldHMgcHJvcGVybHkgYnVpbHQgeWV0LCBidXQgSSBkb24ndCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRvIGVuYWJsZSB0aGF0LgotCi0yMDA2LTAxLTA3IDIwOjAxOjA5ICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QtcGx1Z2lucy1nb29kL2dzdC91ZHAvOiBBbGxvdyB1ZHBzcmMgYW5kIGR5bnVkcHNpbmsgdG8gdGFrZSBhIHNvY2tmZCBhcyBhIHBhcmFtZXRlci4gRm9yIHVkcHNyYywgb3ZlcnJpZGVzIHRoZSBwb3IuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wMS0wNyAgUGhpbGlwcGUgS2hhbGFmICA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC91ZHAvZ3N0ZHludWRwc2luay5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICBBbGxvdyB1ZHBzcmMgYW5kIGR5bnVkcHNpbmsgdG8gdGFrZSBhIHNvY2tmZCBhcyBhIHBhcmFtZXRlci4gRm9yIHVkcHNyYywKLQkgIG92ZXJyaWRlcyB0aGUgcG9ydCBvciBtdWx0aWNhc3QgcGFyYW1ldGVycy4gRml4ZXMgYnVncyAjMzIzMDIxLgotCi0yMDA2LTAxLTA2IDE2OjI4OjMwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvZ2NvbmYvOiBBZGQgbmV3IGdjb25mYXVkaW9zcmMgYW5kIGdjb25mdmlkZW9zcmMgZWxlbWVudHMgKG5lZWRlZCBmb3IgZ25vbWUtc291bmQtcmVjb3JkZXIpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9nY29uZi9NYWtlZmlsZS5hbToKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zcmMuYzogKGdzdF9nY29uZl9hdWRpb19zcmNfYmFzZV9pbml0KSwKLQkgIChnc3RfZ2NvbmZfYXVkaW9fc3JjX2NsYXNzX2luaXQpLCAoZ3N0X2djb25mX2F1ZGlvX3NyY19yZXNldCksCi0JICAoZ3N0X2djb25mX2F1ZGlvX3NyY19pbml0KSwgKGdzdF9nY29uZl9hdWRpb19zcmNfZGlzcG9zZSksCi0JICAoZG9fdG9nZ2xlX2VsZW1lbnQpLCAoY2JfdG9nZ2xlX2VsZW1lbnQpLAotCSAgKGdzdF9nY29uZl9hdWRpb19zcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zcmMuaDoKLQkgICogZXh0L2djb25mL2dzdGdjb25mZWxlbWVudHMuYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuYzogKGdzdF9nY29uZl92aWRlb19zcmNfYmFzZV9pbml0KSwKLQkgIChnc3RfZ2NvbmZfdmlkZW9fc3JjX2NsYXNzX2luaXQpLCAoZ3N0X2djb25mX3ZpZGVvX3NyY19yZXNldCksCi0JICAoZ3N0X2djb25mX3ZpZGVvX3NyY19pbml0KSwgKGdzdF9nY29uZl92aWRlb19zcmNfZGlzcG9zZSksCi0JICAoZG9fdG9nZ2xlX2VsZW1lbnQpLCAoY2JfdG9nZ2xlX2VsZW1lbnQpLAotCSAgKGdzdF9nY29uZl92aWRlb19zcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zcmMuaDoKLQkgIEFkZCBuZXcgZ2NvbmZhdWRpb3NyYyBhbmQgZ2NvbmZ2aWRlb3NyYyBlbGVtZW50cwotCSAgKG5lZWRlZCBmb3IgZ25vbWUtc291bmQtcmVjb3JkZXIpLgotCi0yMDA2LTAxLTA2IDExOjQ2OjUzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogQWRkIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcygpIGZvciBwcm9wZXIgZGVjb2RlYmluIGJlaGF2aW91ci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9pZDNkZW11eF9hZGRfc3JjcGFkKToKLQkgIEFkZCBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMoKSBmb3IgcHJvcGVyIGRlY29kZWJpbiBiZWhhdmlvdXIuCi0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAocGFyc2VfY29tbWVudF9mcmFtZSksCi0JICAocGFyc2VfdGV4dF9pZGVudGlmaWNhdGlvbl9mcmFtZSksIChwYXJzZV9zcGxpdF9zdHJpbmdzKToKLQkgIEZhaWx1cmUgdG8gZGVjb2RlIHNvbWUgdGFncyBpcyBub3QgYSBHU1RfRVJST1IoKSBidXQgYQotCSAgR1NUX1dBUk5JTkcoKQotCSAgV2hlbiBpdGVyYXRpbmcgb3ZlciBhIGNodW5rIG9mIHRleHQsIGNoZWNrIHRoYXQgd2UgaGF2ZW4ndCBnb25lIHRvbwotCSAgZmFyLgotCi0yMDA2LTAxLTA1IDIzOjE3OjQ0ICswMDAwICBTw6liYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdwbHVnaW4uYzoKLQkqIHN5cy9kaXJlY3RkcmF3L2dzdGRpcmVjdGRyYXdzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0ZHJhdy9nc3RkaXJlY3RkcmF3c2luay5oOgotCSogc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kcGx1Z2luLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmM6Ci0JKiBzeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmg6Ci0JKiB3aW4zMi92czYvbGliZ3N0ZGlyZWN0ZHJhdy5kc3A6Ci0JKiB3aW4zMi92czYvbGliZ3N0ZGlyZWN0c291bmQuZHNwOgotCSAgYWRkZWQgc3lzL2RpcmVjdGRyYXcgYWRkZWQgc3lzL2RpcmVjdHNvdW5kIGFkZGVkIHdpbjMyL3ZzNi9nc3RfcGx1Z2luc19iYWQuZHN3IGFkZGVkIHdpbjMyL3ZzNi9saWJnc3RkaXJlY3Rzb3VuZC5kc3AgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDYtMDEtMDUgIFNlYmFzdGllbiBNb3V0dGUgIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLQkgICogYWRkZWQgc3lzL2RpcmVjdGRyYXcKLQkgICogYWRkZWQgc3lzL2RpcmVjdHNvdW5kCi0JICAqIGFkZGVkIHdpbjMyL3ZzNi9nc3RfcGx1Z2luc19iYWQuZHN3Ci0JICAqIGFkZGVkIHdpbjMyL3ZzNi9saWJnc3RkaXJlY3Rzb3VuZC5kc3AKLQkgICogYWRkZWQgd2luMzIvdnM2L2xpYmdzdGRpcmVjdGRyYXcuZHNwCi0JICAqIGFkZGVkIHdpbjMyL2NvbW1vbi9jb25maWcuaAotCi0yMDA2LTAxLTA1IDE3OjAzOjQ1ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBjYWxsIG9pbF9pbml0KCkgd2hlbiB1c2luZyBsaWJvaWwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCksCi0JICAocGx1Z2luX2luaXQpOgotCSAgY2FsbCBvaWxfaW5pdCgpIHdoZW4gdXNpbmcgbGlib2lsCi0KLTIwMDYtMDEtMDQgMTc6Mjg6NDkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9qcGVnLzogRml4IGxlYWtzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6IChnc3Rfc21va2VkZWNfY2hhaW4pOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiAoZ3N0X3Ntb2tlZW5jX2NoYWluKToKLQkgIEZpeCBsZWFrcy4KLQotMjAwNi0wMS0wMiAxOTozODozMiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiBEb24ndCBnX2Fzc2VydCgpIHdoZXJlIHdlIHNob3VsZCBqdXN0IHJldHVybiBGQUxTRTsgcmVtb3ZlIHVubmVjZXNzYXJ5IGdfYXNzZXJ0KCk7IGluaXRpYWxpemUgLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY193cml0ZSksCi0JICAoZ3N0X2ZsYWNfZGVjX2NvbnZlcnRfc3JjKSwgKGdzdF9mbGFjX2RlY19zcmNfcXVlcnkpLAotCSAgKGdzdF9mbGFjX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgZ19hc3NlcnQoKSB3aGVyZSB3ZSBzaG91bGQganVzdCByZXR1cm4gRkFMU0U7IHJlbW92ZQotCSAgdW5uZWNlc3NhcnkgZ19hc3NlcnQoKTsgaW5pdGlhbGl6ZSBzb21lIGZpZWxkcyBwcm9wZXJseSBpbgotCSAgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIChmaXhlcyAjMzI1NTA0KS4gQWxzbywgdXNlCi0JICBHU1RfREVCVUdfT0JKRUNUIGluIHR3byBtb3JlIHBsYWNlcy4KLQotMjAwNS0xMi0zMCAxNTo1MTowNSArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICBjb25maWd1cmUuYWM6IGFsc28gcmVtb3ZlIHNtb290aHdhdmUncyBNYWtlZmlsZS5hbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIGFsc28gcmVtb3ZlIHNtb290aHdhdmUncyBNYWtlZmlsZS5hbQotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICBmaXggcGx1Z2luIGRvY3MKLQotMjAwNS0xMi0zMCAxNTozOToxNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9zbW9vdGh3YXZlLy5naXRpZ25vcmU6Ci0JKiBnc3Qvc21vb3Rod2F2ZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9zbW9vdGh3YXZlL1JFQURNRToKLQkqIGdzdC9zbW9vdGh3YXZlL2RlbW8tb3Nzc3JjLmM6Ci0JKiBnc3Qvc21vb3Rod2F2ZS9nc3RzbW9vdGh3YXZlLmM6Ci0JKiBnc3Qvc21vb3Rod2F2ZS9nc3RzbW9vdGh3YXZlLmg6Ci0JICByZW1vdmUgb2xkIHBsdWdpbiB0aGF0IHdlbnQgYmFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBvbGQgcGx1Z2luIHRoYXQgd2VudCBiYWQKLQotMjAwNS0xMi0zMCAxNTozNDoxOCArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5hbTogYWRkZWQgbWlzc2luZyBNYWtlZmlsZS5hbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHRlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtOgotCSAgYWRkZWQgbWlzc2luZyBNYWtlZmlsZS5hbQotCi0yMDA1LTEyLTMwIDE1OjI4OjQ0ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIG1vdmVkIGxldmVsLWV4YW1wbGUgdG8gdGVzdHMvZXhhbXBsZXMvbGV2ZWwtZXhhbXBsZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2xldmVsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOgotCSAgKiB0ZXN0cy9NYWtlZmlsZS5hbToKLQkgICogdGVzdHMvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUuYW06Ci0JICAqIHRlc3RzL2V4YW1wbGVzL2xldmVsL2xldmVsLWV4YW1wbGUuYzogKG1lc3NhZ2VfaGFuZGxlciksIChtYWluKToKLQkgIG1vdmVkIGxldmVsLWV4YW1wbGUgdG8gdGVzdHMvZXhhbXBsZXMvbGV2ZWwtZXhhbXBsZQotCSAgKiB0ZXN0cy9vbGQvZXhhbXBsZXMvbGV2ZWwvZGVtby5jOiAobWFpbik6Ci0JICAqIHRlc3RzL29sZC9leGFtcGxlcy9sZXZlbC9wbG90LmM6IChtYWluKToKLQkgIHNvbWUgaW5pdGlhbCBmaXhlcwotCi0yMDA1LTEyLTI5IDE2OjM2OjE5ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLio6IFRyYWNrIHBhY2tldHMgc2VudCBwZXIgY2xpZW50IGluIGFkZGl0aW9uIHRvIGJ5dGVzIHNlbnQ7IHByb3ZpZGUgdGhpcyBpbmZvIHRocm91Z2ggZ2V0LXN0YS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlciksCi0JICAoZ3N0X211bHRpdWRwc2lua19yZW1vdmUpLCAoZ3N0X211bHRpdWRwc2lua19nZXRfc3RhdHMpOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSAgVHJhY2sgcGFja2V0cyBzZW50IHBlciBjbGllbnQgaW4gYWRkaXRpb24gdG8gYnl0ZXMgc2VudDsgcHJvdmlkZQotCSAgdGhpcyBpbmZvIHRocm91Z2ggZ2V0LXN0YXRzIHNpZ25hbAotCi0yMDA1LTEyLTI5IDExOjI2OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IENhbid0IHVzZSBnc3Rfb2JqZWN0X3VucmVmKCkgb24gYSBHc3RBZGFwdGVyICgjMzI1MTkxKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVfcGFyc2VfZGlzcG9zZSk6Ci0JICBDYW4ndCB1c2UgZ3N0X29iamVjdF91bnJlZigpIG9uIGEgR3N0QWRhcHRlciAoIzMyNTE5MSkuCi0KLTIwMDUtMTItMjggMTg6NTU6MzIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiBJZiBhIGJyb2tlbiB0YWcgaGFzIDAgYnl0ZXMgcGF5bG9hZCwgYXQgbGVhc3Qgc3RpbGwgc2tpcCB0aGUgMTAgYnl0ZSBoZWFkZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAoaWQzZGVtdXhfcmVhZF9pZDN2Ml90YWcpOgotCSAgSWYgYSBicm9rZW4gdGFnIGhhcyAwIGJ5dGVzIHBheWxvYWQsIGF0IGxlYXN0IHN0aWxsIHNraXAKLQkgIHRoZSAxMCBieXRlIGhlYWRlcgotCi0yMDA1LTEyLTIyIDE1OjAwOjQxICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvOiBNYWtpbmcgdGhlc2UgZGVwYXlsb2FkZXJzIChIMjYzKyBhbmQgbXBlZzQgdmlkZW8pIGluaGVyaXQgZnJvbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEyLTIyICBQaGlsaXBwZSBLaGFsYWYgIDxidXJnZXJAc3BlZWR5Lm9yZz4KLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuaDoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5oOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmM6Ci0JICBNYWtpbmcgdGhlc2UgZGVwYXlsb2FkZXJzIChIMjYzKyBhbmQgbXBlZzQgdmlkZW8pIGluaGVyaXQgZnJvbQotCSAgUnRwQmFzZURlcGF5bG9hZGVyQ2xhc3MuIEZpeGVzIGJ1Z3MgIzMyMzkyMiBhbmQgIzMyMzkwOC4KLQotMjAwNS0xMi0yMSAxNzoxNTowOSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuKjogUmVnZW5lcmF0ZSB0aGUgcGx1Z2luIGhpZWFyY2h5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5oaWVyYXJjaHk6Ci0JICBSZWdlbmVyYXRlIHRoZSBwbHVnaW4gaGllYXJjaHkuCi0KLTIwMDUtMTItMjEgMTU6MjQ6NTkgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgaWQzZGVtdXguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTItMjEgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgICogZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmM6IChnc3RfaWQzZGVtdXhfZ2V0X3R5cGUpLAotCSAgKGdzdF9pZDNkZW11eF9iYXNlX2luaXQpLCAoZ3N0X2lkM2RlbXV4X2NsYXNzX2luaXQpLAotCSAgKGdzdF9pZDNkZW11eF9jaGFpbik6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5oOgotCSAgQWRkIGRvY3VtZW50YXRpb24gZm9yIGlkM2RlbXV4LgotCSAgRG9uJ3QgZmFpbCBpZiB0aGUgZmlyc3QgYnVmZmVyIGlzIG5vdCBhdCBvZmZzZXQgMCwganVzdAotCSAgYXR0ZW1wdCB0byB0eXBlZmluZCBhbmQgZG8gcGFzcyB0aHJvdWdoCi0JICBSZW5hbWUgdGhlIGdzdF90eXBlIGZ1bmN0aW9uIGZyb20gZ3N0X2dzdF9pZDNkZW11eC4uCi0KLTIwMDUtMTItMjAgMTI6NDQ6MjUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSAgZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuKjogQ29sbGVjdCBzdGF0aXN0aWNzOyByZXR1cm4gdGhlbSBmcm9tIGdldF9zdGF0cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOiAoZ3N0X211bHRpdWRwc2lua19yZW5kZXIpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfYWRkKSwgKGdzdF9tdWx0aXVkcHNpbmtfcmVtb3ZlKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2dldF9zdGF0cyk6Ci0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmg6Ci0JICBDb2xsZWN0IHN0YXRpc3RpY3M7IHJldHVybiB0aGVtIGZyb20gZ2V0X3N0YXRzLgotCi0yMDA1LTEyLTE5IDE1OjQzOjMwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IFN0dXBpZCBzaWduZWRuZXNzIGlzc3VlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fc2Nhbik6Ci0JICBTdHVwaWQgc2lnbmVkbmVzcyBpc3N1ZS4uLgotCi0yMDA1LTEyLTE5IDE1OjE5OjQ0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOiBBZGQgZGVidWdnaW5nIGNhdGVnb3J5IGFuZCByZXR1cm4gR3N0Rmxvd1JldHVybiBpbiB0aGUgcmlnaHQgcGxhY2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3N3ZmRlYy9nc3Rzd2ZkZWMuYzogKGdzdF9zd2ZkZWNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3N3ZmRlY19jaGFpbiksIChnc3Rfc3dmZGVjX3JlbmRlcik6Ci0JICBBZGQgZGVidWdnaW5nIGNhdGVnb3J5IGFuZCByZXR1cm4gR3N0Rmxvd1JldHVybiBpbiB0aGUgcmlnaHQgcGxhY2VzCi0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYzogKGdzdF93YXZwYWNrX2RlY19saW5rKToKLQkgIEdldCBzb21ldGhpbmcgZnJvbSB0aGUgcGVlciBwYWQgb25jZSB3ZSd2ZSBjaGVja2VkIGlmIHRoZXJlIGlzIGEgcGVlciBwYWQuCi0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSksCi0JICAocXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayksCi0JICAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIENvdXBsZSBvZiBmaXhlcwotCi0yMDA1LTEyLTE5IDE1OjA2OjI3ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IENvbnN0cnVjdCBpbmRleCBmb3IgaW5kZXhsZXNzIGZpbGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksCi0JICAoZ3N0X2F2aV9kZW11eF9wYXJzZV9vZG1sKSwgKGdzdF9hdmlfZGVtdXhfcGVla190YWcpLAotCSAgKGdzdF9hdmlfZGVtdXhfbmV4dF9kYXRhX2J1ZmZlciksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpLCAoZ3N0X2F2aV9kZW11eF9sb29wKToKLQkgIENvbnN0cnVjdCBpbmRleCBmb3IgaW5kZXhsZXNzIGZpbGVzLgotCSAgTWFrZSBzdXJlIHBhZC9idWZmZXJzIGFyZSBjb3JyZWN0bHkgcmVzZXQgdG8gTlVMTCBvbmNlIHdlIGRvbid0IG5lZWQKLQkgIHRoZW0gYW55bW9yZSwgZWxzZSB3ZSBnZXQgbG92ZWx5IHNlZ2ZhdWx0cy9hc3NlcnRpb25zLgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIFllcywgeW91IGNhbiBoYXZlIDk2S0h6IGF1ZGlvIGFuZCB3bWEgaW4gd2F2IDooCi0KLTIwMDUtMTItMTggMTU6MTQ6NDQgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBjb25maWd1cmUuYWM6IENoZWNrIGZvciBvcHRpb25hbCBkZXBlbmRlbmN5IG9uIHpsaWIgZm9yIGlkM2RlbXV4Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQ2hlY2sgZm9yIG9wdGlvbmFsIGRlcGVuZGVuY3kgb24gemxpYiBmb3IgaWQzZGVtdXgKLQkgICogZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmFtOgotCSAgKiBnc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYzogKGdzdF9nc3RfaWQzZGVtdXhfZ2V0X3R5cGUpLAotCSAgKGdzdF9pZDNkZW11eF9iYXNlX2luaXQpLCAoZ3N0X2lkM2RlbXV4X2NsYXNzX2luaXQpLAotCSAgKGdzdF9pZDNkZW11eF9yZXNldCksIChnc3RfaWQzZGVtdXhfaW5pdCksIChnc3RfaWQzZGVtdXhfZGlzcG9zZSksCi0JICAoZ3N0X2lkM2RlbXV4X2FkZF9zcmNwYWQpLCAoZ3N0X2lkM2RlbXV4X3JlbW92ZV9zcmNwYWQpLAotCSAgKGdzdF9pZDNkZW11eF90cmltX2J1ZmZlciksIChnc3RfaWQzZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9pZDNkZW11eF9zZXRfcHJvcGVydHkpLCAoZ3N0X2lkM2RlbXV4X2dldF9wcm9wZXJ0eSksCi0JICAoaWQzZGVtdXhfZ2V0X3Vwc3RyZWFtX3NpemUpLCAoZ3N0X2lkM2RlbXV4X3NyY3BhZF9ldmVudCksCi0JICAoZ3N0X2lkM2RlbXV4X3JlYWRfaWQzdjEpLCAoZ3N0X2lkM2RlbXV4X3JlYWRfaWQzdjIpLAotCSAgKGdzdF9pZDNkZW11eF9zaW5rX2FjdGl2YXRlKSwgKGdzdF9pZDNkZW11eF9zcmNfYWN0aXZhdGVfcHVsbCksCi0JICAoZ3N0X2lkM2RlbXV4X3NyY19jaGVja2dldHJhbmdlKSwgKGdzdF9pZDNkZW11eF9yZWFkX3JhbmdlKSwKLQkgIChnc3RfaWQzZGVtdXhfc3JjX2dldHJhbmdlKSwgKGdzdF9pZDNkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9pZDNkZW11eF9wYWRfcXVlcnkpLCAoZ3N0X2lkM2RlbXV4X2dldF9xdWVyeV90eXBlcyksCi0JICAoc2ltcGxlX2ZpbmRfcGVlayksIChzaW1wbGVfZmluZF9zdWdnZXN0KSwKLQkgIChnc3RfaWQzZGVtdXhfZG9fdHlwZWZpbmQpLCAoZ3N0X2lkM2RlbXV4X3NlbmRfdGFnX2V2ZW50KSwKLQkgIChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5oOgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdGFncy5jOiAocmVhZF9zeW5jaF91aW50KSwKLQkgIChpZDNkZW11eF9yZWFkX2lkM3YxX3RhZyksIChpZDNkZW11eF9yZWFkX2lkM3YyX3RhZyksCi0JICAoaWQzZGVtdXhfaWQzdjJfZnJhbWVfaGRyX3NpemUpLCAoY29udmVydF9maWRfdG9fdjI0MCksCi0JICAoaWQzZGVtdXhfaWQzdjJfZnJhbWVzX3RvX3RhZ19saXN0KToKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3RhZ3MuaDoKLQkgICogZ3N0L2lkM2RlbXV4L2lkM3YyLjQuMC1mcmFtZXMudHh0OgotCSAgKiBnc3QvaWQzZGVtdXgvaWQzdjIuNC4wLXN0cnVjdHVyZS50eHQ6Ci0JICAqIGdzdC9pZDNkZW11eC9pZDN2MmZyYW1lcy5jOiAoaWQzZGVtdXhfaWQzdjJfcGFyc2VfZnJhbWUpLAotCSAgKHBhcnNlX2NvbW1lbnRfZnJhbWUpLCAocGFyc2VfdGV4dF9pZGVudGlmaWNhdGlvbl9mcmFtZSksCi0JICAoaWQzdjJfdGFnX3RvX3RhZ2xpc3QpLCAocGFyc2Vfc3BsaXRfc3RyaW5ncyk6Ci0JICBBbGwgbmV3IExHUEwgaWQzIGRlbXV4ZXIuIENhbiB1c2UgemxpYiBmb3IgY29tcHJlc3NlZCBmcmFtZXMsCi0JICBvdGhlcndpc2UgaXQgZGlzY2FyZHMgdGhlbS4gV29ya3Mgb24gbXkgdGVzdCBmaWxlcy4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfbG9vcCk6Ci0JICBEb24ndCBzZW5kIEVPUyB0byBhIG5vbi1leGlzdGluZyBzcmNwYWQKLQkgIFRoZSBkZWJ1ZyBjYXRlZ29yeSBjYW4gYmUgc3RhdGljCi0KLTIwMDUtMTItMTcgMTc6NDg6MzggKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvOiBVcGRhdGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEyLTE3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy1kZWNsLnR4dDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLXVuZG9jdW1lbnRlZC50eHQ6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy5hcmdzOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zLnNpZ25hbHM6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZmJ2aWRlb3NpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcXRkZW11eC54bWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zZGx2aWRlb3NpbmsueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZWQueG1sOgotCSAgKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdHRhLnhtbDogVXBkYXRlcy4KLQkgICogZXh0L2RpcmVjdGZiL2RmYnZpZGVvc2luay5jOgotCSAgKGdzdF9kZmJ2aWRlb3Npbmtfc3VyZmFjZV9jcmVhdGUpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfZXZlbnRfdGhyZWFkKSwgKGdzdF9kZmJ2aWRlb3NpbmtfZW51bV92bW9kZXMpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfZW51bV9kZXZpY2VzKSwgKGdzdF9kZmJ2aWRlb3Npbmtfc2V0dXApLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfY2xlYW51cCksCi0JICAoZ3N0X2RmYnZpZGVvc2lua19jYW5fYmxpdF9mcm9tX2Zvcm1hdCksCi0JICAoZ3N0X2RmYnZpZGVvc2lua19nZXRfYmVzdF92bW9kZSksIChnc3RfZGZidmlkZW9zaW5rX2dldGNhcHMpLAotCSAgKGdzdF9kZmJ2aWRlb3Npbmtfc2V0Y2FwcyksIChnc3RfZGZidmlkZW9zaW5rX3Nob3dfZnJhbWUpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfYnVmZmVyX2FsbG9jKSwgKGdzdF9kZmJzdXJmYWNlX2ZpbmFsaXplKSwKLQkgIChnc3RfZGZidmlkZW9zaW5rX2ludGVyZmFjZV9zdXBwb3J0ZWQpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfbmF2aWdhdGlvbl9zZW5kX2V2ZW50KSwKLQkgIChnc3RfZGZidmlkZW9zaW5rX3VwZGF0ZV9jb2xvcmJhbGFuY2UpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfY29sb3JiYWxhbmNlX2xpc3RfY2hhbm5lbHMpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfY29sb3JiYWxhbmNlX3NldF92YWx1ZSksCi0JICAoZ3N0X2RmYnZpZGVvc2lua19jb2xvcmJhbGFuY2VfZ2V0X3ZhbHVlKSwKLQkgIChnc3RfZGZidmlkZW9zaW5rX2NvbG9yYmFsYW5jZV9pbml0KSwKLQkgIChnc3RfZGZidmlkZW9zaW5rX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2RmYnZpZGVvc2lua19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9kZmJ2aWRlb3NpbmtfaW5pdCksIChnc3RfZGZidmlkZW9zaW5rX2NsYXNzX2luaXQpOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmg6IEltcGxlbWVudCB2ZXJ0aWNhbCBzeW5jIGFuZAotCSAgY29sb3IgYmFsYW5jZSBpbnRlcmZhY2UuCi0KLTIwMDUtMTItMTYgMjE6NTc6NTEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgY2hhbmdlIHNvbWUgY2hhciogaW50byBjaGFyW10KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZXNkL2VzZG1vbi5jOiAoZ3N0X2VzZG1vbl9vcGVuX2F1ZGlvKToKLQkgICogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19wcmVwYXJlKToKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgY2hhbmdlIHNvbWUgY2hhciogaW50byBjaGFyW10KLQotMjAwNS0xMi0xNiAxOTozMjo1MyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLio6IFVzZSBHc3RTZWdtZW50IHRvIGltcGxlbWVudCBtb3JlIHNlZWtpbmcgZmVhdHVyZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcmVzZXQpLAotCSAgKGdzdF93YXZwYXJzZV9vdGhlciksIChnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKSwKLQkgIChnc3Rfd2F2cGFyc2VfbG9vcCksIChnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQpLAotCSAgKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpLCAoZ3N0X3dhdnBhcnNlX3NpbmtfYWN0aXZhdGVfcHVsbCk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSAgVXNlIEdzdFNlZ21lbnQgdG8gaW1wbGVtZW50IG1vcmUgc2Vla2luZyBmZWF0dXJlcy4KLQotMjAwNS0xMi0xNiAxMjoyNTozOCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiBPb3BzLCByZW1vdmUgdHJhaWxpbmcgY29tbWEgZnJvbSBjYXBzIHN0cmluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmM6Ci0JICBPb3BzLCByZW1vdmUgdHJhaWxpbmcgY29tbWEgZnJvbSBjYXBzIHN0cmluZy4KLQotMjAwNS0xMi0xNiAxMDoxMjo0OSArMDAwMCAgQmVuamFtaW4gUGluZWF1IDxiZW4ucGluZWF1QGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogQWRkIDxuZXRpbmV0L2luLmg+IGluY2x1ZGUgYW5kIG1vdmUgPGFycGEvaW5ldC5oPiBpbmNsdWRlIHRvIG1ha2UgdGhpbmdzIHdvcmsgb24gT3BlbkJTRCBhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzoKLQkgIEFkZCA8bmV0aW5ldC9pbi5oPiBpbmNsdWRlIGFuZCBtb3ZlIDxhcnBhL2luZXQuaD4gaW5jbHVkZQotCSAgdG8gbWFrZSB0aGluZ3Mgd29yayBvbiBPcGVuQlNEIGFzIHdlbGwgKGZpeGVzICMzMjM3MTc7Ci0JICBwYXRjaCBieTogQmVuamFtaW4gUGluZWF1KQotCi0yMDA1LTEyLTE2IDA5OjU5OjIxICswMDAwICBnY29jYXRyZUBnbWFpbC5jb20gPGdjb2NhdHJlQGdtYWlsLmNvbT4KLQotCSAgZXh0L3dhdnBhY2svOiBXYXZwYWNrIHN1cHBvcnRzIHNhbXBsZXJhdGVzIGZyb20gNi0xOTJrSHosIGZpeCBwYWQgdGVtcGxhdGUgcmVtb3ZlIGJ1ZmZlci1mcmFtZXMgZnJvbSBjYXBzLCB0aGV5IGFyZSBnLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2xpbmspOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzoKLQkgIFdhdnBhY2sgc3VwcG9ydHMgc2FtcGxlcmF0ZXMgZnJvbSA2LTE5MmtIeiwgZml4IHBhZCB0ZW1wbGF0ZQotCSAgY2FwcyAoZml4ZXMgIzMyMjk3MzsgcGF0Y2ggYnk6IGdjb2NhdHJlQGdtYWlsLmNvbSkuIEFsc28KLQkgIHJlbW92ZSBidWZmZXItZnJhbWVzIGZyb20gY2FwcywgdGhleSBhcmUgZ29uZSBpbiAwLjEwLgotCi0yMDA1LTEyLTE0IDIwOjA1OjQ1ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jOgotCSAgU2V0IGNsb2NrIHJhdGUgdG8gYmUgZml4ZWQgaW4gODAwMC4gSXQgZml4ZXMgYnVnICMzMjQwMTIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNldCBjbG9jayByYXRlIHRvIGJlIGZpeGVkIGluIDgwMDAuIEl0IGZpeGVzIGJ1ZyAjMzI0MDEyLgotCi0yMDA1LTEyLTE0IDE4OjA3OjE2ICswMDAwICBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotCi0JICBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvOiBGaXhlZCBwYXlsb2FkIHJhbmdlIGluIHBheWxvZGVyIGNhcHMuIFJlbW92ZWQgcGF5bG9hZCByYW5nZSBjb21wbGV0bHkgZnJvbSBkZXBheWxvYWRlcnMgYXMuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0xNCAgUGhpbGlwcGUgS2hhbGFmICA8YnVyZ2VyQHNwZWVkeS5vcmc+Ci0JICAqIGdzdC1wbHVnaW5zLWdvb2QvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JICAqIGdzdC1wbHVnaW5zLWdvb2QvZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cGc3MTFkZXBheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwZzcxMWRlcGF5LmM6Ci0JICAqIGdzdC1wbHVnaW5zLWdvb2QvZ3N0L3J0cC9nc3RydHBnc21kZXBheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwaDI2M3BheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwbXA0dnBheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC9nc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSAgKiBnc3QtcGx1Z2lucy1nb29kL2dzdC9ydHAvUkVBRE1FOgotCSAgRml4ZWQgcGF5bG9hZCByYW5nZSBpbiBwYXlsb2RlciBjYXBzLiBSZW1vdmVkIHBheWxvYWQgcmFuZ2UgY29tcGxldGx5IGZyb20KLQkgIGRlcGF5bG9hZGVycyBhcyB0aGV5IGRvbid0IHJlcXVpcmUgcGF5bG9hZCB0eXBlIGluIHRoZWlyIGNhcHMuIEluIGVmZmVjdCwKLQkgIHRoZXJlIGlzbid0IGFueSBzcGVjaWZpYyBwYXlsb2FkIHR5cGUgZm9yIGFueSBnaXZlbiBjb2RlYywgb25seSBzdWdnZXN0aW9ucy4KLQkgIEZpeGVzIGJ1ZyAjMzI0MDExLgotCi0yMDA1LTEyLTEzIDIxOjU4OjQyICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBDb2RlIGNsZWFudXAgYW5kIHJlLWVuYWJsaW5nIHF1ZXVlZCB0aW1lIHZhbGlkaXR5IGNoZWNrIGZvciBjb3JyZWN0IEVPUyBoYW5kbGluZy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0xMyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9pbml0KSwKLQkgIChnc3RfdmlkZW9taXhlcl9maWxsX3F1ZXVlcyksIChnc3RfdmlkZW9taXhlcl9ibGVuZF9idWZmZXJzKSwKLQkgIChnc3RfdmlkZW9taXhlcl9jb2xsZWN0ZWQpOiBDb2RlIGNsZWFudXAgYW5kIHJlLWVuYWJsaW5nCi0JICBxdWV1ZWQgdGltZSB2YWxpZGl0eSBjaGVjayBmb3IgY29ycmVjdCBFT1MgaGFuZGxpbmcuCi0KLTIwMDUtMTItMTMgMTc6MTg6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50LmM6IEFkZCAnZGV2aWNlLW5hbWUnIHByb3BlcnR5IGFuZCBmaXggc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50LmM6IChnc3Rfb3NzX21peGVyX2VsZW1lbnRfY2xhc3NfaW5pdCksCi0JICAoZ3N0X29zc19taXhlcl9lbGVtZW50X2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X29zc19taXhlcl9lbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JICBBZGQgJ2RldmljZS1uYW1lJyBwcm9wZXJ0eSBhbmQgZml4IHN0YXRlIGNoYW5nZSBmdW5jdGlvbi4KLQotMjAwNS0xMi0xMyAxMDo0NTowNCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L2ZseC9nc3RmbHhkZWMuYzogSWYgdGhlIHNwZWVkIG9mIHRoZSBmaWxlIGlzIG51bGwgaW4gdGhlIGhlYWRlciwgc2V0IHRoZSBmcmFtZV90aW1lIHRvIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgR1NULi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2ZseC9nc3RmbHhkZWMuYzogKGdzdF9mbHhkZWNfY2hhaW4pOgotCSAgSWYgdGhlIHNwZWVkIG9mIHRoZSBmaWxlIGlzIG51bGwgaW4gdGhlIGhlYWRlciwgc2V0IHRoZSBmcmFtZV90aW1lIHRvIHRoZSBkZWZhdWx0Ci0JICBzZXR0aW5nIG9mIEdTVF9TRUNPTkQgLyA3MC4gV2hpY2ggaXMgdGhlIGRlZmF1bHQgZnJhbWVfZGVsYXkgZm9yIC5mbGkgZmlsZXMgYXMKLQkgIHN0YXRlZCBpbiB0aGlzIGRvY3VtZW50IDogaHR0cDovL3d3dy5jb21wdXBoYXNlLmNvbS9mbGljLmh0bQotCSAgV291bGQgYmUgbmljZSB0byBoYXZlIHRoZSB0aW1lIGNvbnZlcnNpb24gZG9uZSBwcm9wZXJseSB0b28KLQkgIChkdXJhdGlvbiA9IGZseGgtPmZyYW1lcyAqIGZseGRlYy0+ZnJhbWVfdGltZSkKLQotMjAwNS0xMi0xMiAyMjoyOTozNCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIEFkZGluZyBkb2N1bWVudGF0aW9uIGZvciB2aWRlb21peGVyIG9uIG15IHdheSB3aXRoIGEgZnVubnkgc2FtcGxlIHBpcGVsaW5lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEyLTEyICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0OgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgKGdzdF92aWRlb21peGVyX3BhZF9zaW5rX3NldGNhcHMpLAotCSAgKGdzdF92aWRlb21peGVyX2dldGNhcHMpLCAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9xdWV1ZXMpLAotCSAgKGdzdF92aWRlb21peGVyX3VwZGF0ZV9xdWV1ZXMpLCAoZ3N0X3ZpZGVvbWl4ZXJfY29sbGVjdGVkKToKLQkgIEFkZGluZwotCSAgZG9jdW1lbnRhdGlvbiBmb3IgdmlkZW9taXhlciBvbiBteSB3YXkgd2l0aCBhIGZ1bm55IHNhbXBsZQotCSAgcGlwZWxpbmUuCi0KLTIwMDUtMTItMTIgMjE6NDM6MDAgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IEZpeCBjYXBzIG5lZ290aWF0aW9uLiAoIzMyMzg5NikKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0xMiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICAoZ3N0X3ZpZGVvbWl4ZXJfcGFkX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfZ2V0Y2FwcyksIChnc3RfdmlkZW9taXhlcl9maWxsX3F1ZXVlcyksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfdXBkYXRlX3F1ZXVlcyksIChnc3RfdmlkZW9taXhlcl9jb2xsZWN0ZWQpOgotCSAgRml4IGNhcHMgbmVnb3RpYXRpb24uICgjMzIzODk2KQotCi0yMDA1LTEyLTEyIDE4OjE0OjU4ICswMDAwICBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICBTZXQgY29ycmVjdCB0aW1lc3RhbXBzIG9uIGF1ZGlvIGxhY2VzLCBmaXhlcyBwbGF5YmFjayBvZiBtcDMgZnJvbSBtYXRyb3NrYS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgU2V0IGNvcnJlY3QgdGltZXN0YW1wcyBvbiBhdWRpbyBsYWNlcywgZml4ZXMgcGxheWJhY2sgb2YgbXAzIGZyb20gbWF0cm9za2EuCi0KLTIwMDUtMTItMTIgMTA6NDA6NDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC86IEdzdE9iamVjdHMgbXVzdCBiZSB1bnJlZidlZCB3aXRoIGdzdF9vYmplY3RfdW5yZWYoKSBpbnN0ZWFkIG9mIGdfb2JqZWN0X3VucmVmKCksIG90aGVyd2lzZSB0aGluZ3MgYnJlYWsgZm9yIEdMaS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9pdm9yYmlzL3ZvcmJpc2ZpbGUuYzogKGdzdF9pdm9yYmlzZmlsZV9sb29wKToKLQkgICogZXh0L2xpYm1tcy9nc3RtbXMuYzogKGdzdF9tbXNfc3JjX3F1ZXJ5KSwgKGdzdF9tbXNfY3JlYXRlKToKLQkgICogZXh0L211c2VwYWNrL2dzdG11c2VwYWNrZGVjLmM6IChnc3RfbXVzZXBhY2tkZWNfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfbXVzZXBhY2tkZWNfbG9vcCk6Ci0JICAqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6IChnc3Rfc3dmZGVjX3ZpZGVvX2xpbmspLAotCSAgKGdzdF9zd2ZkZWNfc3JjX3F1ZXJ5KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6IChnc3Rfd2F2cGFja19wYXJzZV9zcmNfcXVlcnkpOgotCSAgR3N0T2JqZWN0cyBtdXN0IGJlIHVucmVmJ2VkIHdpdGggZ3N0X29iamVjdF91bnJlZigpIGluc3RlYWQgb2YKLQkgIGdfb2JqZWN0X3VucmVmKCksIG90aGVyd2lzZSB0aGluZ3MgYnJlYWsgZm9yIEdMaWItMi42IHVzZXJzLgotCi0yMDA1LTEyLTEyIDEwOjMwOjIwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLio6IFVzZSBnc3Rfb2JqZWN0X3VucmVmKCkgZm9yIEdzdE9iamVjdHMgaW5zdGVhZCBvZiBnX29iamVjdF91bnJlZigpIGFuZCBmaXggYSBtZW0gbGVhayBpbiBhIGQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVfcGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3RfYXVfcGFyc2VfY2xhc3NfaW5pdCksIChnc3RfYXVfcGFyc2VfaW5pdCksCi0JICAoZ3N0X2F1X3BhcnNlX2Rpc3Bvc2UpLCAoZ3N0X2F1X3BhcnNlX2NoYWluKSwKLQkgIChnc3RfYXVfcGFyc2VfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5oOgotCSAgVXNlIGdzdF9vYmplY3RfdW5yZWYoKSBmb3IgR3N0T2JqZWN0cyBpbnN0ZWFkIG9mCi0JICBnX29iamVjdF91bnJlZigpIGFuZCBmaXggYSBtZW0gbGVhayBpbiBhIGRlYnVnCi0JICBzdGF0ZW1lbnQ7IHdoaWxlIHdlJ3JlIGF0IGl0LCBhbHNvIGJvcmdpZnksIHVzZQotCSAgYm9pbGVycGxhdGUgbWFjcm9zIGFuZCBjbGVhbiB1cCBhIGxpdHRsZSBiaXQuCi0KLTIwMDUtMTItMTEgMjA6Mjc6MDYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9kZWJ1Zy9lZmVuY2UuYzogQWRkZWQgcHVsbCBtb2RlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9lZmVuY2UuYzogKGdzdF9lZmVuY2VfaW5pdCksIChnc3RfZWZlbmNlX2dldHJhbmdlKSwKLQkgIChnc3RfZWZlbmNlX2NoZWNrZ2V0cmFuZ2UpLCAoZ3N0X2VmZW5jZV9hY3RpdmF0ZV9zcmNfcHVsbCk6Ci0JICBBZGRlZCBwdWxsIG1vZGUuCi0KLTIwMDUtMTItMTEgMTk6MjU6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC86IFVzZSBhdWRpb3Rlc3RzcmMgaW5zdGVhZCBvZiBzaW5lc3JjICgjMzIzNzk4KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICAqIGdzdC9sZXZlbC9sZXZlbC1leGFtcGxlLmM6IChtYWluKToKLQkgICogZ3N0L3Ntb290aHdhdmUvZGVtby1vc3NzcmMuYzogKG1haW4pOgotCSAgVXNlIGF1ZGlvdGVzdHNyYyBpbnN0ZWFkIG9mIHNpbmVzcmMgKCMzMjM3OTgpLgotCi0yMDA1LTEyLTExIDE3OjUwOjUwICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiBtb3JlIGRlYnVnLWZ1bmMtcHRyIHVzYWdlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3NzX3NpbmtfY2xhc3NfaW5pdCk6Ci0JICBtb3JlIGRlYnVnLWZ1bmMtcHRyIHVzYWdlCi0KLTIwMDUtMTItMTEgMTY6NDM6NDIgKzAwMDAgIFplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvZmx4L2ZseF9jb2xvci5jOgotCSogZ3N0L2ZseC9mbHhfY29sb3IuaDoKLQkqIGdzdC9mbHgvZmx4X2ZtdC5oOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmg6Ci0JICBOb3cgZmx4ZGVjIHdvcmtzIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMgYXMgd2VsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgTm93IGZseGRlYyB3b3JrcyBvbiBiaWctZW5kaWFuIG1hY2hpbmVzIGFzIHdlbGwuCi0KLTIwMDUtMTItMTEgMTY6MTQ6MjIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9kZWJ1Zy9lZmVuY2UuYzogTWFrZSBzdXJlIEdTVF9CVUZGRVJfREFUQSBpcyBzZXQgb24gZmVuY2VkIGNvcGllZCBidWZmZXJzOyBmaXgKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVidWcvZWZlbmNlLmM6IChnc3RfZWZlbmNlX2luaXQpLCAoZ3N0X2VmZW5jZV9jaGFpbiksCi0JICAoZ3N0X2ZlbmNlZF9idWZmZXJfY29weSk6Ci0JICBNYWtlIHN1cmUgR1NUX0JVRkZFUl9EQVRBIGlzIHNldCBvbiBmZW5jZWQgY29waWVkIGJ1ZmZlcnM7IGZpeAotCSAgR1NUX0RFQlVHIGNyYXNoZXIgd2hlcmUgR1NUX1RJTUVfRk9STUFUIHdhcyBub3QgdXNlZCBpbgotCSAgY29uanVuY3Rpb24gd2l0aCBHU1RfVElNRV9BUkdTLiBBbHNvLCBkb24ndCBsZWFrIHBhZCB0ZW1wbGF0ZXMKLQkgIGFuZCB1c2UgR1NUX0RFQlVHX0ZVTkNQVFIgZm9yIHBhZCBmdW5jdGlvbnMuCi0KLTIwMDUtMTItMTAgMjA6MjY6MzMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuKjogUmV3cml0ZSBmbGFjZGVjIGEgYml0LCBzbyB0aGF0IGV2ZW4gc2Vla2luZyBtaWdodCB3b3JrIG5vdy4gTW9zdCBpbXBvcnRhbnRseSwgZG9uJ3QgYWN0IHVwb24gYS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjX2RlY19iYXNlX2luaXQpLAotCSAgKGdzdF9mbGFjX2RlY19jbGFzc19pbml0KSwgKGdzdF9mbGFjX2RlY19pbml0KSwKLQkgIChnc3RfZmxhY19kZWNfbWV0YWRhdGFfY2FsbGJhY2spLCAoZ3N0X2ZsYWNfZGVjX2Vycm9yX2NhbGxiYWNrKSwKLQkgIChnc3RfZmxhY19kZWNfZW9mKSwgKGdzdF9mbGFjX2RlY193cml0ZSksIChnc3RfZmxhY19kZWNfbG9vcCksCi0JICAoZ3N0X2ZsYWNfZGVjX2NvbnZlcnRfc3JjKSwgKGdzdF9mbGFjX2RlY19nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkgIChnc3RfZmxhY19kZWNfc3JjX3F1ZXJ5KSwgKGdzdF9mbGFjX2RlY19zZW5kX25ld3NlZ21lbnQpLAotCSAgKGdzdF9mbGFjX2RlY19oYW5kbGVfc2Vla19ldmVudCksIChnc3RfZmxhY19kZWNfc3JjX2V2ZW50KSwKLQkgIChnc3RfZmxhY19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oOgotCSAgUmV3cml0ZSBmbGFjZGVjIGEgYml0LCBzbyB0aGF0IGV2ZW4gc2Vla2luZyBtaWdodCB3b3JrIG5vdy4gTW9zdAotCSAgaW1wb3J0YW50bHksIGRvbid0IGFjdCB1cG9uIGFueSBmbG93IHJldHVybiB2YWx1ZXMgd2UgZ2V0LCBqdXN0IHRlbGwKLQkgIHRoZSBkZWNvZGVyIGV2ZXJ5dGhpbmcncyBkYW5keSBhbmQgYWN0IG9uIHRoZSBmbG93IHJldHVybiB2YWx1ZXMKLQkgIGxhdGVyIG9uIGluIHRoZSBsb29wIGZ1bmN0aW9uLiBXZSBkb24ndCB3YW50IHRvIG1lc3MgdXAgdGhlIGludGVybmFsCi0JICBkZWNvZGVyIHN0YXRlIGZvciBub24tZmF0YWwgdGhpbmdzIGxpa2UgZmx1c2hpbmcgcGFkcyBldGMuIE90aGVyCi0JICB0aGFuIHRoYXQsIHVzZSBHc3RTZWdtZW50IChzZWdtZW50IHNlZWtzIGRvbid0IHdvcmsgeWV0IHRob3VnaCwgYnV0Ci0JICBzaG91bGQgYmUgZWFzeSB0byBhZGQpLCB1c2UgYm9pbGVycGxhdGUgbWFjcm9zLCBkcm9wIHRoZSBzdXBlcmZsdW91cwotCSAgJ2ZsYWNkZWM6JyBmcm9tIGRlYnVnIG1lc3NhZ2VzLCB1c2UgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCwgYW5kCi0JICBsb3RzIG9mIG90aGVyIHRoaW5ncy4KLQotMjAwNS0xMi0xMCAxNDo1Nzo0OCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgY29uZmlndXJlLmFjOiBVcGRhdGUgY29tbWVudCBpbiBPU1MgaW5jbHVkZXMgY2hlY2suCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgVXBkYXRlIGNvbW1lbnQgaW4gT1NTIGluY2x1ZGVzIGNoZWNrLgotCSAgKiBzeXMvb3NzL2dzdG9zc2RtYWJ1ZmZlci5jOgotCSAgKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5jOgotCSAgKiBzeXMvb3NzL2dzdG9zc21peGVyLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJ0cmFjay5jOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzoKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuYzoKLQkgICogc3lzL29zcy9vc3NfcHJvYmUuYzoKLQkgIERvbid0IGFzc3VtZSB0aGUgT1NTIHNvdW5kY2FyZC5oIGluY2x1ZGUgaXMgYWx3YXlzIGluCi0JICB0aGUgc3lzLyBkaXJlY3RvcnkuIEluc3RlYWQsIHVzZSB0aGUgZXhpc3RpbmcgZGVmaW5lcwotCSAgZnJvbSBjb25maWcuaCB0byBpbmNsdWRlIHRoZSByaWdodCBmaWxlLiBGaXhlcwotCSAgY29tcGlsYXRpb24gb24gT3BlbkJTRCAzLjggKCMzMjM3MTgpLgotCi0yMDA1LTEyLTA5IDE5OjUxOjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkqIGV4dC9mbGFjL2dzdGZsYWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkgIGJvcmdpZnkgYW5kIGZpeCB1cCBkb2N1bWVudGF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJvcmdpZnkgYW5kIGZpeCB1cCBkb2N1bWVudGF0aW9uCi0KLTIwMDUtMTItMDkgMTU6MzA6MjEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBleHQvZmFhZC9nc3RmYWFkLmM6IEFzc3VtZSB0aGF0IGFuIHVua25vd24gY2hhbm5lbCBtYXBwaW5nIHdpdGggMiBjaGFubmVscyBpcyBzdGVyZW8gYW5kIHBsYXkgaXQgdGhhdCB3YXkgaW5zdGVhZCBvZiAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9jaGFucG9zX3RvX2dzdCksCi0JICAoZ3N0X2ZhYWRfdXBkYXRlX2NhcHMpOgotCSAgQXNzdW1lIHRoYXQgYW4gdW5rbm93biBjaGFubmVsIG1hcHBpbmcgd2l0aCAyIGNoYW5uZWxzCi0JICBpcyBzdGVyZW8gYW5kIHBsYXkgaXQgdGhhdCB3YXkgaW5zdGVhZCBvZiBlcnJvcmluZy4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCSAgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIEhhbmRsZSBlLmcuIGpwZWcgc3RyZWFtcyB3aXRoIDAgZHVyYXRpb24gZnJhbWVzIGFzIGhhdmluZyAwIGZyYW1lcmF0ZS4KLQkgIERlYnVnIGZpeGVzLiBTb21lIDY0IGJpdCB2YXJpYWJsZSBmaXhlcwotCi0yMDA1LTEyLTA5IDExOjEyOjQ4ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogQWNjZXB0IGEgd2lkZXIgcmFuZ2Ugb2YgZmxhYyBmaWxlcywgbW9yZSBjbG9zZWx5IG1hdGNoaW5nIGZsYWMgc3AKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChyYXdfY2Fwc19mYWN0b3J5KSwgKGdzdF9mbGFjZGVjX3dyaXRlKToKLQkgIEFjY2VwdCBhIHdpZGVyIHJhbmdlIG9mIGZsYWMgZmlsZXMsIG1vcmUgY2xvc2VseSBtYXRjaGluZyBmbGFjIHNwCi0KLTIwMDUtMTItMDggMTY6Mjc6MTIgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06IEFkZCBtdWx0aXBhcnQgZWxlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTItMDggIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOiBBZGQgbXVsdGlwYXJ0IGVsZW1lbnRzLgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6IEZpeCBmbGFjLgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiBBZGQgZG9jcy4KLQotMjAwNS0xMi0wNyAxMTo0NjoxNSArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBNZW1sZWFrIGZpeGVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwKLQkgIChnc3RfcXRkZW11eF9hZGRfc3RyZWFtKToKLQkgIE1lbWxlYWsgZml4ZXMuCi0JICBTZW5kIG91dCBFT1MgZm9yIHZhbGlkIHJlYXNvbnMgKGNvdWxkbid0IHB1bGxfcmFuZ2UoKSBmcm9tIHVwc3RyZWFtCi0JICBmb3IgZXhhbXBsZSkuCi0KLTIwMDUtMTItMDcgMTE6NDA6NDYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogTWVtbGVhayBhbmQgY3Jhc2hlciBmaXhlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCSAgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlciksCi0JICAoZ3N0X2F2aV9kZW11eF9pbnZlcnQpOgotCSAgTWVtbGVhayBhbmQgY3Jhc2hlciBmaXhlcy4KLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfYmFzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOgotCSAgTWVtbGVhayBmaXhlcwotCi0yMDA1LTEyLTA2IDE5OjU1OjU4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwydHVuZXIuaDoKLQkqIHN5cy92NGwyL2dzdHY0bDJ4b3ZlcmxheS5oOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgZXhwYW5kIHRhYnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZXhwYW5kIHRhYnMKLQotMjAwNS0xMi0wNiAxOTo0NDo1OCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuaDoKLQkqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5oOgotCSogZXh0L2R2L2dzdGR2ZGVjLmg6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguaDoKLQkqIGV4dC9lc2QvZXNkc2luay5oOgotCSogZXh0L2ZsYWMvZmxhY19jb21wYXQuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkqIGV4dC9nY29uZi9nY29uZi5oOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmg6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuaDoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka2FuaW1hdGlvbi5oOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSogZXh0L2pwZWcvc21va2Vjb2RlYy5oOgotCSogZXh0L2pwZWcvc21va2Vmb3JtYXQuaDoKLQkqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmg6Ci0JKiBleHQvbGFkc3BhL3NlYXJjaC5jOgotCSogZXh0L2xhZHNwYS91dGlscy5oOgotCSogZXh0L2xpYm1uZy9nc3RtbmdkZWMuaDoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmM6Ci0JKiBleHQvbGlibW5nL2dzdG1uZ2VuYy5oOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmg6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmg6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5oOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuaDoKLQkqIGdzdC9kZWJ1Zy90ZXN0cy5jOgotCSogZ3N0L2RlYnVnL3Rlc3RzLmg6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JKiBnc3QvZmx4L2ZseF9mbXQuaDoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmg6Ci0JKiBnc3QvZ29vbS9maWx0ZXJzLmM6Ci0JKiBnc3QvZ29vbS9maWx0ZXJzLmg6Ci0JKiBnc3QvZ29vbS9nb29tX3Rvb2xzLmg6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jOgotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5oOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGFnZ3JlZ2F0b3IuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGFnZ3JlZ2F0b3IuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdG1kNXNpbmsuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdG1kNXNpbmsuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmg6Ci0JKiBnc3Qvb2xkY29yZS9nc3RwaXBlZmlsdGVyLmg6Ci0JKiBnc3Qvb2xkY29yZS9nc3RzaGFwZXIuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCSogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uaDoKLQkqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5oOgotCSogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5oOgotCSogZ3N0L3J0c3AvcnRzcHVybC5jOgotCSogZ3N0L3J0c3AvcnRzcHVybC5oOgotCSogZ3N0L3J0c3Avc2RwbWVzc2FnZS5jOgotCSogZ3N0L3J0c3Avc2RwbWVzc2FnZS5oOgotCSogZ3N0L3NtcHRlL2JhcmJveHdpcGVzLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0bWFzay5oOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmg6Ci0JKiBnc3Qvc21wdGUvcGFpbnQuYzoKLQkqIGdzdC9zbXB0ZS9wYWludC5oOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmg6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JKiBnc3Qvd2F2ZW5jL3JpZmYuaDoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSogc3lzL29zcy9nc3Rvc3NkbWFidWZmZXIuaDoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXIuaDoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50Lmg6Ci0JKiBzeXMvb3NzL2dzdG9zc21peGVydHJhY2suaDoKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmg6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5oOgotCSAgZXhwYW5kIHRhYnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZXhwYW5kIHRhYnMKLQotMjAwNS0xMi0wNSAxODoxMjowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC4xMC4wID09PQotCi0yMDA1LTEyLTA1IDE4OjAzOjIzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZW5jZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbWF0cm9za2EueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgIHJlbGVhc2luZyAwLjEwLjAKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVsZWFzaW5nIDAuMTAuMAotCi0yMDA1LTEyLTA1IDE4OjAxOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF0ZGVtdXgueG1sOgotCSAgcmVsZWFzaW5nIDAuMTAuMAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC4xMC4wCi0KLTIwMDUtMTItMDUgMTY6MjE6MDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDUtMTItMDUgMTU6MDg6NDYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIHRyYW5zbGF0aW9ucwotCi0yMDA1LTEyLTA1IDEzOjA0OjIyICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIFVwZGF0ZSBmb3IgYWxsb2NfYnVmZmVyIGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTItMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9mYWFjL2dzdGZhYWMuYzogKGdzdF9mYWFjX3NpbmtfZXZlbnQpLCAoZ3N0X2ZhYWNfY2hhaW4pOgotCSAgKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9jaGFpbik6Ci0JICAqIGV4dC9oZXJtZXMvZ3N0aGVybWVzY29sb3JzcGFjZS5jOiAoZ3N0X2hlcm1lc19jb2xvcnNwYWNlX2NoYWluKToKLQkgICogZXh0L2xjcy9nc3Rjb2xvcnNwYWNlLmM6IChnc3RfY29sb3JzcGFjZV9jaGFpbik6Ci0JICAqIGV4dC94aW5lL3hpbmVpbnB1dC5jOiAoZ3N0X3hpbmVfaW5wdXRfZ2V0KToKLQkgICogZ3N0L2NvbG9yc3BhY2UvZ3N0Y29sb3JzcGFjZS5jOiAoZ3N0X2NvbG9yc3BhY2VfY2hhaW4pOgotCSAgKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuYzogKHNwZWVkX2NoYWluKToKLQkgICogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzogKGdzdF92aWRlb19jcm9wX2NoYWluKTogVXBkYXRlIGZvcgotCSAgYWxsb2NfYnVmZmVyIGNoYW5nZXMuCi0KLTIwMDUtMTItMDUgMTM6MDM6MDAgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgVXBkYXRlIGZvciBhbGxvY19idWZmZXIgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMi0wNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfY2hhaW4pOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY2RlY193cml0ZSk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjZW5jX3dyaXRlX2NhbGxiYWNrKToKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl9jaGFpbik6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6IChnc3RfcGl4YnVmc2NhbGVfY2hhaW4pOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfY2hhaW4pOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6IChnc3RfanBlZ2VuY19jaGFpbik6Ci0JICAqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmM6IChnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9wcm9jZXNzKToKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKHVzZXJfaW5mb19jYWxsYmFjayksIChnc3RfcG5nZGVjX3Rhc2spOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKHNwZWV4X2RlY19jaGFpbik6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2NoYWluKToKLQkgICogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOiAoZ3N0X2F1cGFyc2VfY2hhaW4pOgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5jOiAoZ3N0X2ZseGRlY19jaGFpbik6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2NoYWluKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfdm9yYmlzX2NvZGVjX3ByaXZfZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF93dnBrX2hlYWRlcik6Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhaW4pOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiAoZ3N0X211bHRpcGFydF9tdXhfY29sbGVjdGVkKToKLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfY29sbGVjdGVkKToKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2hhaW4pOiBVcGRhdGUgZm9yCi0JICBhbGxvY19idWZmZXIgY2hhbmdlcy4KLQotMjAwNS0xMi0wNSAxMjoyMzoyMiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6IFJlbW92ZSBhcmdzIGZvciBwbHVnaW5zIHRoYXQgYXJlbid0IGluIC1nb29kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkgIFJlbW92ZSBhcmdzIGZvciBwbHVnaW5zIHRoYXQgYXJlbid0IGluIC1nb29kLgotCi0yMDA1LTEyLTA0IDIyOjI2OjA3ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIHJlbW92ZSBwYW5nbyBwbHVnaW4gYXMgaXRzIGdvbmUgaW50byBiYXNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBwYW5nbyBwbHVnaW4gYXMgaXRzIGdvbmUgaW50byBiYXNlCi0KLTIwMDUtMTItMDMgMTg6NTE6NDggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JICBmaXggZWxlbWVudCBkZXNjcmlwdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGVsZW1lbnQgZGVzY3JpcHRpb25zCi0KLTIwMDUtMTItMDMgMTg6NTA6MTIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmRzcmMueG1sOgotCSAgcmVtb3ZlIGZkc3JjIGRvY3MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIGZkc3JjIGRvY3MKLQotMjAwNS0xMi0wMSAxOToxODowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gSEVBRAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIEhFQUQKLQotPT09IHJlbGVhc2UgMC45LjcgPT09Ci0KLTIwMDUtMTItMDEgMTk6MTQ6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgcmVsZWFzaW5nIDAuOS43Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjkuNwotCi0yMDA1LTEyLTAxIDE5OjEzOjIwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXF0ZGVtdXgueG1sOgotCSAgcmVsZWFzaW5nIDAuOS43Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjkuNwotCi0yMDA1LTEyLTAxIDE3OjUzOjI5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA1LTEyLTAxIDE1OjM0OjEzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aXBhcnQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JICBhZGQgbXVsdGlwYXJ0IHBsdWdpbiB0byBkb2NzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBtdWx0aXBhcnQgcGx1Z2luIHRvIGRvY3MKLQotMjAwNS0xMi0wMSAxNToyMjoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9wYW5nby9NYWtlZmlsZS5hbToKLQkqIGV4dC9wYW5nby9nc3RjbG9ja292ZXJsYXkuYzoKLQkqIGV4dC9wYW5nby9nc3RjbG9ja292ZXJsYXkuaDoKLQkqIGV4dC9wYW5nby9nc3R0ZXh0b3ZlcmxheS5jOgotCSogZXh0L3BhbmdvL2dzdHRleHRvdmVybGF5Lmg6Ci0JKiBleHQvcGFuZ28vZ3N0dGV4dHJlbmRlci5jOgotCSogZXh0L3BhbmdvL2dzdHRleHRyZW5kZXIuaDoKLQkqIGV4dC9wYW5nby9nc3R0aW1lb3ZlcmxheS5jOgotCSogZXh0L3BhbmdvL2dzdHRpbWVvdmVybGF5Lmg6Ci0JICBtb3ZlIHBhbmdvIHRvIGJhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW92ZSBwYW5nbyB0byBiYXNlCi0KLTIwMDUtMTItMDEgMTQ6Mzk6MzAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBnc3QvcnRwLzogcGFyc2VycyBhcmUgZGVwYXllcnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBMMTZwYXJzZS5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cEwxNnBhcnNlLmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBnc21kZXBheS5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGdzbXBhcnNlLmM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtcGFyc2UuaDoKLQkgIHBhcnNlcnMgYXJlIGRlcGF5ZXJzCi0KLTIwMDUtMTItMDEgMTQ6MzA6MDEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZlbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwTDE2cGFyc2UuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwTDE2cGFyc2UuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwTDE2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVjLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJlbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1ycGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVjLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWRlYy5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWVuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBnNzExcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWVuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M2VuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZWMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlYy5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmVuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWRlYy5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZWMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4cGF5Lmg6Ci0JICBEbyBidXJnZXIncyByZW5hbWUgZm9yIHJ0cCBwYXlsb2FkZXJzIGFuZCBkZXBheWxvYWRlcnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRG8gYnVyZ2VyJ3MgcmVuYW1lIGZvciBydHAgcGF5bG9hZGVycyBhbmQgZGVwYXlsb2FkZXJzCi0KLTIwMDUtMTEtMzAgMTk6MDI6MzUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGV4dC9kdi86IEZpeCBzZWVraW5nIGluIGR2ZGVtdXggYWdhaW4sIGFkZCBzb21lIG1vcmUgZGVidWcgaW5mby4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19jaGFpbik6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSk6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4Lmg6Ci0JICBGaXggc2Vla2luZyBpbiBkdmRlbXV4IGFnYWluLCBhZGQgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0KLTIwMDUtMTEtMzAgMTg6NDg6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBmaXggdGVzdHMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHRlc3RzCi0KLTIwMDUtMTEtMzAgMTg6NDA6MTkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGFkZCB0ZXN0cyBzdWJkaXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIHRlc3RzIHN1YmRpcgotCi0yMDA1LTExLTMwIDE4OjM2OjAyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBhZGQgTWFrZWZpbGUuYW0KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIE1ha2VmaWxlLmFtCi0KLTIwMDUtMTEtMzAgMTg6Mjg6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBtb3ZlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogUE9SVEVEXzA5OgotCSAgKiBkb2NzL3JhbmRvbS9QT1JURURfMDk6Ci0JICBtb3ZlCi0JICAqIHRlc3RzL01ha2VmaWxlLmFtOgotCSAgYWRkCi0JICAqIHdpbjMyL2dzdC5zbG46Ci0JICByZW1vdmUKLQotMjAwNS0xMS0zMCAxODoyNDowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE1ha2VmaWxlLmFtOgotCSogY2hlY2svLmdpdGlnbm9yZToKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIGNoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JKiBjaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOgotCSogY29uZmlndXJlLmFjOgotCSogZXhhbXBsZXMvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9jYXBzZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvY2Fwc2ZpbHRlci9jYXBzZmlsdGVyMS5jOgotCSogZXhhbXBsZXMvZ29iL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvZ29iL2dzdC1pZGVudGl0eTIuZ29iOgotCSogZXhhbXBsZXMvZ3N0cGxheS8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvZ3N0cGxheS9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL2dzdHBsYXkvcGxheWVyLmM6Ci0JKiBleGFtcGxlcy9pbmRleGluZy8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvaW5kZXhpbmcvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9pbmRleGluZy9pbmRleG1wZWcuYzoKLQkqIGV4YW1wbGVzL2xldmVsL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvbGV2ZWwvUkVBRE1FOgotCSogZXhhbXBsZXMvbGV2ZWwvZGVtby5jOgotCSogZXhhbXBsZXMvbGV2ZWwvcGxvdC5jOgotCSogZXhhbXBsZXMvc3RhdHMvTWFrZWZpbGUuYW06Ci0JKiBleGFtcGxlcy9zdGF0cy9tcDJvZ2cuYzoKLQkqIGV4YW1wbGVzL3N3aXRjaC8uZ2l0aWdub3JlOgotCSogZXhhbXBsZXMvc3dpdGNoL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvc3dpdGNoL3N3aXRjaGVyLmM6Ci0JICBtb3ZlIHVuZGVyIHRlc3RzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1vdmUgdW5kZXIgdGVzdHMKLQotMjAwNS0xMS0zMCAxNjo1Nzo1NyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBjb21tb246Ci0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICB1cGRhdGUgZm9yIGxhdGVzdCBjaGFuZ2VzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVwZGF0ZSBmb3IgbGF0ZXN0IGNoYW5nZXMKLQotMjAwNS0xMS0zMCAxNDo1MzoyOSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3BhbmdvL2dzdHRleHRyZW5kZXIuKjogQWRkIG1pc3NpbmcgZmlsZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3BhbmdvL2dzdHRleHRyZW5kZXIuYzogKGdzdF90ZXh0X3JlbmRlcl9iYXNlX2luaXQpLAotCSAgKGdzdF90ZXh0X3JlbmRlcl9jbGFzc19pbml0KSwgKHJlc2l6ZV9iaXRtYXApLAotCSAgKGdzdF90ZXh0X3JlbmRlcl9yZW5kZXJfdGV4dCksIChnc3RfdGV4dF9yZW5kZXJfc2V0Y2FwcyksCi0JICAoZ3N0X3RleHRfcmVuZGVyX2ZpeGF0ZV9jYXBzKSwgKGdzdF90ZXh0X3JlbmRlcmVyX2JpdG1hcF90b19heXV2KSwKLQkgIChnc3RfdGV4dF9yZW5kZXJfY2hhaW4pLCAoZ3N0X3RleHRfcmVuZGVyX2ZpbmFsaXplKSwKLQkgIChnc3RfdGV4dF9yZW5kZXJfaW5pdCksIChnc3RfdGV4dF9yZW5kZXJfc2V0X3Byb3BlcnR5KToKLQkgICogZXh0L3BhbmdvL2dzdHRleHRyZW5kZXIuaDoKLQkgIEFkZCBtaXNzaW5nIGZpbGVzLgotCi0yMDA1LTExLTMwIDEzOjIwOjU3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBQb3J0IHBhbmdvLWJhc2VkIHRleHRvdmVybGF5LCB0aW1lb3ZlcmxheSBhbmQgdGV4dHJlbmRlciB0byAwLjkgYW5kIGFkZCBiYWNrZ3JvdW5kIHNoYWRpbmcgYW5kIHRleHQgd3JhcHBpbmcgbW9kZXMuIE0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgICogZXh0L3BhbmdvL01ha2VmaWxlLmFtOgotCSAgKiBleHQvcGFuZ28vZ3N0Y2xvY2tvdmVybGF5LmM6IChnc3RfY2xvY2tfb3ZlcmxheV9iYXNlX2luaXQpLAotCSAgKGdzdF9jbG9ja19vdmVybGF5X3JlbmRlcl90aW1lKSwgKGdzdF9jbG9ja19vdmVybGF5X2dldF90ZXh0KSwKLQkgIChnc3RfY2xvY2tfb3ZlcmxheV9jbGFzc19pbml0KSwgKGdzdF9jbG9ja19vdmVybGF5X2luaXQpOgotCSAgKiBleHQvcGFuZ28vZ3N0Y2xvY2tvdmVybGF5Lmg6Ci0JICAqIGV4dC9wYW5nby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9iYXNlX2luaXQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfZ2V0X3RleHQpLCAoZ3N0X3RleHRfb3ZlcmxheV9jbGFzc19pbml0KSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X2ZpbmFsaXplKSwgKGdzdF90ZXh0X292ZXJsYXlfaW5pdCksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV91cGRhdGVfd3JhcF9tb2RlKSwgKGdzdF90ZXh0X292ZXJsYXlfc2V0Y2FwcyksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV90ZXh0X3BhZF9saW5rZWQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfdGV4dF9wYWRfdW5saW5rZWQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfc2V0X3Byb3BlcnR5KSwgKGdzdF90ZXh0X292ZXJsYXlfZ2V0Y2FwcyksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9zaGFkZV95KSwgKGdzdF90ZXh0X292ZXJsYXlfYmxpdF95dXY0MjApLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfcmVzaXplX2JpdG1hcCksIChnc3RfdGV4dF9vdmVybGF5X3JlbmRlcl90ZXh0KSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X3B1c2hfZnJhbWUpLCAoZ3N0X3RleHRfb3ZlcmxheV9wb3BfdmlkZW8pLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfcG9wX3RleHQpLCAoZ3N0X3RleHRfb3ZlcmxheV9jb2xsZWN0ZWQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgICogZXh0L3BhbmdvL2dzdHRleHRvdmVybGF5Lmg6Ci0JICAqIGV4dC9wYW5nby9nc3R0aW1lb3ZlcmxheS5jOiAoZ3N0X3RpbWVfb3ZlcmxheV9iYXNlX2luaXQpLAotCSAgKGdzdF90aW1lX292ZXJsYXlfcmVuZGVyX3RpbWUpLCAoZ3N0X3RpbWVfb3ZlcmxheV9nZXRfdGV4dCksCi0JICAoZ3N0X3RpbWVfb3ZlcmxheV9jbGFzc19pbml0KSwgKGdzdF90aW1lX292ZXJsYXlfaW5pdCk6Ci0JICAqIGV4dC9wYW5nby9nc3R0aW1lb3ZlcmxheS5oOgotCSAgUG9ydCBwYW5nby1iYXNlZCB0ZXh0b3ZlcmxheSwgdGltZW92ZXJsYXkgYW5kIHRleHRyZW5kZXIgdG8gMC45Ci0JICBhbmQgYWRkIGJhY2tncm91bmQgc2hhZGluZyBhbmQgdGV4dCB3cmFwcGluZyBtb2Rlcy4gTWFrZQotCSAgdGltb3ZlcmxheSBkZXJpdmUgZnJvbSB0ZXh0b3ZlcmxheS4gQWxzbyBhZGQgbmV3IGNsb2Nrb3ZlcmxheQotCSAgZWxlbWVudC4KLQotMjAwNS0xMS0zMCAxMToxMDowMSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC91ZHAvTWFrZWZpbGUuYW06IE1vdmVkIHRvIG5ldGJ1ZmZlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0zMCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvdWRwL01ha2VmaWxlLmFtOiBNb3ZlZCB0byBuZXRidWZmZXIuCi0KLTIwMDUtMTEtMzAgMTA6MTg6NDIgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBQb3J0ZWQgbXVsdGlwYXJ0IG11eC9kZW11eCB0byAwLjkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMzAgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBQT1JURURfTzk6Ci0JICAqIGdzdC9tdWx0aXBhcnQvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzoKLQkgIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X211bHRpcGFydF9kZW11eF9jbGFzc19pbml0KSwgKGdzdF9tdWx0aXBhcnRfZGVtdXhfaW5pdCksCi0JICAoZ3N0X211bHRpcGFydF9maW5kX3BhZF9ieV9taW1lKSwgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhaW4pLAotCSAgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfbXVsdGlwYXJ0X2RlbXV4X3BsdWdpbl9pbml0KToKLQkgICogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2NsYXNzX2luaXQpLAotCSAgKGdzdF9tdWx0aXBhcnRfbXV4X2luaXQpLCAoZ3N0X211bHRpcGFydF9tdXhfZmluYWxpemUpLAotCSAgKGdzdF9tdWx0aXBhcnRfbXV4X3Npbmtjb25uZWN0KSwKLQkgIChnc3RfbXVsdGlwYXJ0X211eF9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF9tdWx0aXBhcnRfbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCSAgKGdzdF9tdWx0aXBhcnRfbXV4X3F1ZXVlX3BhZHMpLCAoZ3N0X211bHRpcGFydF9tdXhfY29sbGVjdGVkKSwKLQkgIChnc3RfbXVsdGlwYXJ0X211eF9jaGFuZ2Vfc3RhdGUpOiBQb3J0ZWQgbXVsdGlwYXJ0IG11eC9kZW11eCB0bwotCSAgMC45LgotCi0yMDA1LTExLTMwIDA4OjI2OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0LzogdXBkYXRlIGZvciBzeW1ib2xzIGNoYW5nZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOiAoZ3N0X25hdmlnYXRpb250ZXN0X2dldF90eXBlKToKLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0Lmg6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6IChnc3RfYWdpbmd0dl9nZXRfdHlwZSk6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGRpY2UuYzogKGdzdF9kaWNldHZfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6IChnc3RfZWRnZXR2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzogKGdzdF9xdWFya3R2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0cmV2LmM6IChnc3RfcmV2dHZfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmM6IChnc3Rfc2hhZ2FkZWxpY3R2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOiAoZ3N0X3ZlcnRpZ290dl9nZXRfdHlwZSk6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzogKGdzdF93YXJwdHZfZ2V0X3R5cGUpOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6IChnc3RfdmlkZW9fZmxpcF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF92aWRlb19mbGlwX2dldF90eXBlKToKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgdXBkYXRlIGZvciBzeW1ib2xzIGNoYW5nZQotCi0yMDA1LTExLTI5IDE3OjQ2OjA0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L3VkcC86IHRoZSBvbGQgZ3N0bmV0IGxpYiB3YXMgcmVuYW1lZCBnc3RuZXRidWZmZXIgKCMzMjIyNTcpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6Ci0JICB0aGUgb2xkIGdzdG5ldCBsaWIgd2FzIHJlbmFtZWQgZ3N0bmV0YnVmZmVyICgjMzIyMjU3KQotCi0yMDA1LTExLTI5IDE1OjQyOjAxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogQWN0dWFsbHkgcmVuZGVyIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgcGFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9yZW5kZXJfdGV4dCksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9jb2xsZWN0ZWQpOgotCSAgQWN0dWFsbHkgcmVuZGVyIHRoZSB0ZXh0IGZyb20gdGhlIHRleHQgcGFkLgotCi0yMDA1LTExLTI5IDE0OjQ5OjAwICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvZGVidWcvOiBVcGRhdGUgZm9yIEdzdEJhc2VUcmFuc2Zvcm0gZXZlbnQgdmlydHVhbCBtZXRob2QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5jOiAoZ3N0X25hdnNlZWtfZXZlbnQpOgotCSAgKiBnc3QvZGVidWcvcHJvZ3Jlc3NyZXBvcnQuYzogKGdzdF9wcm9ncmVzc19yZXBvcnRfZXZlbnQpOgotCSAgVXBkYXRlIGZvciBHc3RCYXNlVHJhbnNmb3JtIGV2ZW50IHZpcnR1YWwgbWV0aG9kCi0KLTIwMDUtMTEtMjkgMTA6NTU6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBleHQvY2Fpcm8vTWFrZWZpbGUuYW06IG5vIG5lZWQgdG8gbGluayB0byB2aWRlb2ZpbHRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCSAgKiBleHQvY2Fpcm8vTWFrZWZpbGUuYW06Ci0JICBubyBuZWVkIHRvIGxpbmsgdG8gdmlkZW9maWx0ZXIKLQotMjAwNS0xMS0yOSAxMDo0NjowMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5oOgotCSogZ3N0L2VmZmVjdHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmlsdGVyLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9maWx0ZXIuaDoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuaDoKLQkgIHJlbW92ZSB0aGUgdmlkZW9maWx0ZXIgbGlicmFyeSBhbmQgbGluayB0byB0aGUgb25lIGluIGJhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcmVtb3ZlIHRoZSB2aWRlb2ZpbHRlciBsaWJyYXJ5IGFuZCBsaW5rIHRvIHRoZSBvbmUgaW4gYmFzZQotCi0yMDA1LTExLTI5IDAxOjMwOjQwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oOgotCSAgYm9yZ2lmeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBib3JnaWZ5Ci0KLTIwMDUtMTEtMjggMTc6MzE6NDQgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogVXNlbGVzcyBjaGVjayBub3cgd2UncmUgc2V0dGluZyB0aGUgY3VycmVudCBlbnRyeSBjb3JyZWN0bHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpOgotCSAgVXNlbGVzcyBjaGVjayBub3cgd2UncmUgc2V0dGluZyB0aGUgY3VycmVudCBlbnRyeSBjb3JyZWN0bHkuCi0KLTIwMDUtMTEtMjggMTY6NTQ6MDMgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogRG9uJ3QgbGVhayBpbnB1dCBidWZmZXIgaW4gY2hhaW4gZnVuY3Rpb24gKGZpeGVzICMzMjI2NjcpOyBtYWtlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiB0aHJlYWQtcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX3Jlc3luYyksIChnc3RfanBlZ2VuY19jaGFpbiksCi0JICAoZ3N0X2pwZWdlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9qcGVnZW5jX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2pwZWdlbmNfY2hhbmdlX3N0YXRlKToKLQkgIERvbid0IGxlYWsgaW5wdXQgYnVmZmVyIGluIGNoYWluIGZ1bmN0aW9uIChmaXhlcyAjMzIyNjY3KTsgbWFrZQotCSAgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIHRocmVhZC1zYWZlOyBkb24ndCByZXBlYXQgdGhlIGN1cnJlbnQgZnVuY3Rpb24KLQkgIG5hbWUgaW4gR1NUX0RFQlVHIHN0YXRlbWVudHM7IHVzZSBHU1RfUk9VTkRfVVBfKiBtYWNyb3M7IHVzZQotCSAgZ3N0X3BhZF9hbGxvY19idWZmZXIoKTsgbWlzYy4gbWlub3IgY2xlYW51cHMuCi0KLTIwMDUtMTEtMjggMTU6NDM6MjkgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9mYWFkL2dzdGZhYWQuYzogSGFuZGxlIGdyYWNlZnVsbHkgdGhlIGNvbnNlcXVlbmNlIG9mICJNYXhpbXVtIG51bWJlciBvZiBzY2FsZWZhY3RvciBiYW5kcyBleGNlZWRlZCIsIHdoaWNoIHJlc3VsdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX3NyY2dldGNhcHMpOgotCSAgSGFuZGxlIGdyYWNlZnVsbHkgdGhlIGNvbnNlcXVlbmNlIG9mICJNYXhpbXVtIG51bWJlciBvZiBzY2FsZWZhY3RvcgotCSAgYmFuZHMgZXhjZWVkZWQiLCB3aGljaCByZXN1bHRzIGluIDAgY2hhbm5lbHMgd2l0aCBzYW1wbGVyYXRlcyBvZiAwLgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgRG8gdXB3YXJkIHRyYW5zaXRpb25zLCB0aGVuIGNhbGwgcGFyZW50IHN0YXRlX2NoYW5nZSwgdGhlbiBkbwotCSAgZG93bndhcmQgdHJhbnNpdGlvbnMuCi0KLTIwMDUtMTEtMjggMTU6MTM6MjIgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IExvb2sgZm9yIHBpeGVsLWFzcGVjdC1yYXRpbyBpbiBjYXBzLCBub3QgcGl4ZWxfd2lkdGggYW5kIHBpeGVsX2hlaWdodCAoRml4ZXM6ICMzMjI2NDUpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpOgotCSAgTG9vayBmb3IgcGl4ZWwtYXNwZWN0LXJhdGlvIGluIGNhcHMsIG5vdCBwaXhlbF93aWR0aCBhbmQKLQkgIHBpeGVsX2hlaWdodCAoRml4ZXM6ICMzMjI2NDUpCi0KLTIwMDUtMTEtMjggMTI6NTk6MDUgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEZyb20gTWljaGFsIEJlbmVzOiBmcmFtZSBkdXJhdGlvbiBzaG91bGQgYmUgR1NUX1NFQ09ORCAvIGZyYW1lcmF0ZSwgbm90Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpOgotCSAgRnJvbSBNaWNoYWwgQmVuZXM6Ci0JICBmcmFtZSBkdXJhdGlvbiBzaG91bGQgYmUgR1NUX1NFQ09ORCAvIGZyYW1lcmF0ZSwgbm90Ci0JICBHU1RfU0VDT05EICogZnJhbWVyYXRlLiAoRml4ZXM6ICMzMjI2NDMpCi0KLTIwMDUtMTEtMjcgMTc6MDI6NTMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBjb25maWd1cmUuYWM6IGZpeCB1cCBHU1RfUExVR0lOX0xERkxBR1MKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBmaXggdXAgR1NUX1BMVUdJTl9MREZMQUdTCi0JICAqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6Ci0JICBmaXggaW5jbHVkZXMgKHNlZSAjMzE3MDQzKQotCSAgKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICBzdG9wIGluc3RhbGxpbmcgdGhpcyBsaWJyYXJ5Ci0KLTIwMDUtMTEtMjcgMTU6MzA6MjUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBubyBuZWVkIGZvciBhbiBBU19MSUJUT09MIGNhbGwKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbm8gbmVlZCBmb3IgYW4gQVNfTElCVE9PTCBjYWxsCi0KLTIwMDUtMTEtMjcgMTQ6MzM6MzEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbW1vbjoKLQkqIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjoKLQkgIGFkZCBBQ0xPQ0FMX0FNRkxBR1M7IHJlbW92ZSBvbGQgc3R1ZmYgZnJvbSBzcGVjIGNoYW5nZWxvZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgQUNMT0NBTF9BTUZMQUdTOyByZW1vdmUgb2xkIHN0dWZmIGZyb20gc3BlYyBjaGFuZ2Vsb2cKLQotMjAwNS0xMS0yNiAxMjo1NDo0NyArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgZXh0L2R2L2dzdGR2ZGVjLmM6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgaW5jb21pbmcgVmlkZW8gZHYgc3RyZWFtIGRvZXNuJ3QgaGF2ZSBhIHBpeGVsIGFzcGVjdCByYXRpbyBzZXQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfc2lua19zZXRjYXBzKToKLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgaW5jb21pbmcgVmlkZW8gZHYgc3RyZWFtIGRvZXNuJ3QgaGF2ZQotCSAgYSBwaXhlbCBhc3BlY3QgcmF0aW8gc2V0LgotCi0yMDA1LTExLTI1IDIyOjE0OjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzoKLQkgIGRvY3VtZW50IGZsYWNkZWMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9jdW1lbnQgZmxhY2RlYwotCi0yMDA1LTExLTI1IDIxOjM2OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGV4dC9jYWlyby9nc3RjYWlyby5jOgotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuaDoKLQkqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5jOgotCSogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5Lmg6Ci0JICBkbyBzb21lIG5hbWUgYm9yZ2lmeWluZyBkb2N1bWVudAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkbyBzb21lIG5hbWUgYm9yZ2lmeWluZwotCSAgZG9jdW1lbnQKLQotMjAwNS0xMS0yNSAyMTowMjoxNiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGRvY3VtZW50aW5nIGF1dG8qc2luayB1c2luZyBzdHJzdHIgZm9yIHRoZSB2aWRlbyBzaW5rIGxvb2t1cCwgY2xhc3MgZmllbGQgaXMgbm90IG9yZGVyZWQgdXBkYXRlIG90aGVyIHBsdWdpbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBkb2NzL3BsdWdpbnMvTWFrZWZpbGUuYW06Ci0JICAqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dDoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfYmFzZV9pbml0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfYmFzZV9pbml0KSwKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX2ZhY3RvcnlfZmlsdGVyKToKLQkgIGRvY3VtZW50aW5nIGF1dG8qc2luawotCSAgdXNpbmcgc3Ryc3RyIGZvciB0aGUgdmlkZW8gc2luayBsb29rdXAsIGNsYXNzIGZpZWxkIGlzIG5vdCBvcmRlcmVkCi0JICB1cGRhdGUgb3RoZXIgcGx1Z2lucwotCi0yMDA1LTExLTI1IDE5OjU4OjE5ICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIGV4dC93YXZwYWNrL01ha2VmaWxlLmFtOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmM6Ci0JKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuaDoKLQkgIFdhdnBhY2sgcG9ydGVkIHRvIDAuOS4gTm8gc3VwcG9ydCBmb3IgY29ycmVjdGlvbiBmaWxlIHlldC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgV2F2cGFjayBwb3J0ZWQgdG8gMC45LiBObyBzdXBwb3J0IGZvciBjb3JyZWN0aW9uIGZpbGUgeWV0LgotCi0yMDA1LTExLTI1IDE4OjE1OjUxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZXh0L3dhdnBhY2svOiBwdXQgYmFjayB3YXZwYWNrIC0gc3RpbGwgbmVlZHMgcG9ydGluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uaDoKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5jOiAoZ3N0X3dhdnBhY2tfZGVjX2xpbmspLAotCSAgKGdzdF93YXZwYWNrX2RlY193dmNsaW5rKSwgKGdzdF93YXZwYWNrX2RlY19nZXRfdHlwZSksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2Jhc2VfaW5pdCksIChnc3Rfd2F2cGFja19kZWNfZGlzcG9zZSksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2NsYXNzX2luaXQpLCAoZ3N0X3dhdnBhY2tfZGVjX3NyY19xdWVyeSksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX2luaXQpLCAoZ3N0X3dhdnBhY2tfZGVjX3NldHVwX2NvbnRleHQpLAotCSAgKGdzdF93YXZwYWNrX2RlY19mb3JtYXRfc2FtcGxlcyksIChnc3Rfd2F2cGFja19kZWNfbG9vcCksCi0JICAoZ3N0X3dhdnBhY2tfZGVjX3BsdWdpbl9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oOgotCSAgKiBleHQvd2F2cGFjay9nc3R3YXZwYWNrcGFyc2UuYzogKGdzdF93YXZwYWNrX3BhcnNlX2dldF90eXBlKSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9iYXNlX2luaXQpLCAoZ3N0X3dhdnBhY2tfcGFyc2VfZGlzcG9zZSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfY2xhc3NfaW5pdCksIChnc3Rfd2F2cGFja19wYXJzZV9zcmNfcXVlcnkpLAotCSAgKGdzdF93YXZwYWNrX3BhcnNlX3NyY19ldmVudCksIChmaW5kX2hlYWRlciksIChmaW5kX3NhbXBsZSksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2Vfc2VlayksIChnc3Rfd2F2cGFja19wYXJzZV9pbml0KSwKLQkgIChnc3Rfd2F2cGFja19wYXJzZV9oYW5kbGVfZXZlbnQpLCAoZ3N0X3dhdnBhY2tfcGFyc2VfbG9vcCksCi0JICAoZ3N0X3dhdnBhY2tfcGFyc2VfY2hhbmdlX3N0YXRlKSwgKGdzdF93YXZwYWNrX3BhcnNlX3BsdWdpbl9pbml0KToKLQkgICogZXh0L3dhdnBhY2svZ3N0d2F2cGFja3BhcnNlLmg6Ci0JICBwdXQgYmFjayB3YXZwYWNrIC0gc3RpbGwgbmVlZHMgcG9ydGluZwotCi0yMDA1LTExLTI1IDE4OjAzOjI0ICswMDAwICBTZWJhc3RpZW4gQ290ZSA8c2ViYXM2NDJAeWFob28uY2E+Ci0KLQkgIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IFBhdGNoIGZyb20gU2ViYXN0aWVuIENvdGUgdG8gY2xvc2UgY29udHJvbCBzb2NrZXRzIGluIHVkcHNyYy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19zdG9wKToKLQkgIFBhdGNoIGZyb20gU2ViYXN0aWVuIENvdGUgdG8gY2xvc2UgY29udHJvbCBzb2NrZXRzIGluIHVkcHNyYy4KLQotMjAwNS0xMS0yNCAxNTowNzowNiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6IEZsdXNoIHRoZSBwbGFuZXMgbGlzdCBvbiByZXZlcnNlIGNhcHMgbmVnb3RpYXRpb24uIFRoaXMgd2FzIGNyYXNoaW5nIGJlY2F1c2Ugb2YgZGlmZmVyZW50bHkgcy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTI0ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6IChnc3RfcXVhcmt0dl9zZXRfY2FwcyksCi0JICAoZ3N0X3F1YXJrdHZfZ2V0X3VuaXRfc2l6ZSksIChnc3RfcXVhcmt0dl90cmFuc2Zvcm0pLAotCSAgKGdzdF9xdWFya3R2X3BsYW5ldGFibGVfY2xlYXIpLCAoZ3N0X3F1YXJrdHZfY2hhbmdlX3N0YXRlKSwKLQkgIChnc3RfcXVhcmt0dl9iYXNlX2luaXQpLCAoZ3N0X3F1YXJrdHZfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3F1YXJrdHZfaW5pdCk6IEZsdXNoIHRoZSBwbGFuZXMgbGlzdCBvbiByZXZlcnNlIGNhcHMKLQkgIG5lZ290aWF0aW9uLiBUaGlzIHdhcyBjcmFzaGluZyBiZWNhdXNlIG9mIGRpZmZlcmVudGx5IHNpemVkCi0JICBidWZmZXJzLgotCi0yMDA1LTExLTI0IDEyOjUwOjI4ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0LzogSGFuZGxlIHN0cmlkZXMgY29ycmVjdGx5LCBmaXggaWRlbnRpdHkgZmxpcHBpbmcsIGNvbnZlcnQgbmF2aWdhdGlvbiBldmVudCBjb3JyZWN0bHkgYWdhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6IChkcmF3X2JveF9wbGFuYXI0MTEpOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6Ci0JICAoZ3N0X3ZpZGVvZmxpcF9tZXRob2RfZ2V0X3R5cGUpLAotCSAgKGdzdF92aWRlb2ZsaXBfc2V0X2NhcHMpLCAoZ3N0X3ZpZGVvZmxpcF90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X3ZpZGVvZmxpcF9nZXRfdW5pdF9zaXplKSwgKGdzdF92aWRlb2ZsaXBfZmxpcCksCi0JICAoZ3N0X3ZpZGVvZmxpcF90cmFuc2Zvcm0pLCAoZ3N0X3ZpZGVvZmxpcF9oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfdmlkZW9mbGlwX3NldF9wcm9wZXJ0eSksIChnc3RfdmlkZW9mbGlwX2Jhc2VfaW5pdCksCi0JICAoZ3N0X3ZpZGVvZmxpcF9jbGFzc19pbml0KSwgKGdzdF92aWRlb2ZsaXBfaW5pdCk6IEhhbmRsZSBzdHJpZGVzCi0JICBjb3JyZWN0bHksIGZpeCBpZGVudGl0eSBmbGlwcGluZywgY29udmVydCBuYXZpZ2F0aW9uIGV2ZW50Ci0JICBjb3JyZWN0bHkgYWdhaW4uCi0KLTIwMDUtMTEtMjQgMTE6MTY6NTMgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogUkVBRE1FOgotCSAgRml4ICMzMjAyODg6IHdyb25nIHJlYWRtZSBpbiBwbHVnaW5zLWdvb2QKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4ICMzMjAyODg6IHdyb25nIHJlYWRtZSBpbiBwbHVnaW5zLWdvb2QKLQotMjAwNS0xMS0yNCAxMTowNjoyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgZml4IHRvcnR1cmUgdGFyZ2V0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCB0b3J0dXJlIHRhcmdldAotCi0yMDA1LTExLTIzIDIxOjI1OjU2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBhZGQgYSB0b3J0dXJlIHRhcmdldAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgYSB0b3J0dXJlIHRhcmdldAotCi0yMDA1LTExLTIzIDIwOjA1OjI2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBIRUFECi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gSEVBRAotCi09PT0gcmVsZWFzZSAwLjkuNiA9PT0KLQotMjAwNS0xMS0yMyAxOTo1Nzo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1xdGRlbXV4LnhtbDoKLQkgIHJlbGVhc2luZyAwLjkuNgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC45LjYKLQotMjAwNS0xMS0yMyAxOTo1NjozMSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWw6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhaXJvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZlbmNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmZlY3R2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lc2RzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcG5nLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNob3V0MnNlbmQueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9mbGlwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb21peGVyLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgIHJlbGVhc2luZyAwLjkuNgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC45LjYKLQotMjAwNS0xMS0yMyAxOToxNDowNyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jdXR0ZXIueG1sOgotCSAgYWRkaW5nIGN1dHRlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGRpbmcgY3V0dGVyCi0KLTIwMDUtMTEtMjMgMTk6MDU6MjkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBVcGRhdGUgLnBvIGZpbGVzCi0KLTIwMDUtMTEtMjMgMTY6NDk6MTYgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvZGVidWcvZ3N0bmF2aWdhdGlvbnRlc3QuYzogT29wcywgaW5pdGlhbGlzZSB0aGUgZnJhbWVyYXRlIEdWYWx1ZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOiAoZ3N0X25hdmlnYXRpb250ZXN0X2luaXQpOgotCSAgT29wcywgaW5pdGlhbGlzZSB0aGUgZnJhbWVyYXRlIEdWYWx1ZQotCi0yMDA1LTExLTIzIDE1OjUwOjUxICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgVmlkZW9GaWx0ZXIgaW5oZXJpdHMgZnJvbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIzICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5jOgotCSAgKGdzdF90aW1lb3ZlcmxheV91cGRhdGVfZm9udF9oZWlnaHQpLAotCSAgKGdzdF90aW1lb3ZlcmxheV9zZXRfY2FwcyksIChnc3RfdGltZW92ZXJsYXlfZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X3RpbWVvdmVybGF5X3RyYW5zZm9ybSksIChnc3RfdGltZW92ZXJsYXlfYmFzZV9pbml0KSwKLQkgIChnc3RfdGltZW92ZXJsYXlfY2xhc3NfaW5pdCksIChnc3RfdGltZW92ZXJsYXlfaW5pdCksCi0JICAoZ3N0X3RpbWVvdmVybGF5X2dldF90eXBlKToKLQkgICogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5Lmg6Ci0JICAqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JICAoZ3N0X25hdmlnYXRpb250ZXN0X2hhbmRsZV9zcmNfZXZlbnQpLAotCSAgKGdzdF9uYXZpZ2F0aW9udGVzdF9nZXRfdW5pdF9zaXplKSwKLQkgIChnc3RfbmF2aWdhdGlvbnRlc3Rfc2V0X2NhcHMpLAotCSAgKGdzdF9uYXZpZ2F0aW9udGVzdF90cmFuc2Zvcm0pLAotCSAgKGdzdF9uYXZpZ2F0aW9udGVzdF9jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9uYXZpZ2F0aW9udGVzdF9iYXNlX2luaXQpLCAoZ3N0X25hdmlnYXRpb250ZXN0X2NsYXNzX2luaXQpLAotCSAgKGdzdF9uYXZpZ2F0aW9udGVzdF9pbml0KSwgKGdzdF9uYXZpZ2F0aW9udGVzdF9nZXRfdHlwZSksCi0JICAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvZGVidWcvZ3N0bmF2aWdhdGlvbnRlc3QuaDoKLQkgICogZ3N0L2VmZmVjdHYvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6IChnc3RfYWdpbmd0dl9zZXRfY2FwcyksCi0JICAoZ3N0X2FnaW5ndHZfZ2V0X3VuaXRfc2l6ZSksIChnc3RfYWdpbmd0dl90cmFuc2Zvcm0pLAotCSAgKGdzdF9hZ2luZ3R2X2Jhc2VfaW5pdCksIChnc3RfYWdpbmd0dl9jbGFzc19pbml0KSwKLQkgIChnc3RfYWdpbmd0dl9pbml0KSwgKGdzdF9hZ2luZ3R2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jOiAoZ3N0X2RpY2V0dl9zZXRfY2FwcyksCi0JICAoZ3N0X2RpY2V0dl9nZXRfdW5pdF9zaXplKSwgKGdzdF9kaWNldHZfdHJhbnNmb3JtKSwKLQkgIChnc3RfZGljZXR2X2Jhc2VfaW5pdCksIChnc3RfZGljZXR2X2NsYXNzX2luaXQpLAotCSAgKGdzdF9kaWNldHZfaW5pdCksCi0JICAoZ3N0X2RpY2V0dl9nZXRfdHlwZSk6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGVkZ2UuYzogKGdzdF9lZGdldHZfc2V0X2NhcHMpLAotCSAgKGdzdF9lZGdldHZfZ2V0X3VuaXRfc2l6ZSksIChnc3RfZWRnZXR2X3RyYW5zZm9ybSksCi0JICAoZ3N0X2VkZ2V0dl9iYXNlX2luaXQpLCAoZ3N0X2VkZ2V0dl9jbGFzc19pbml0KSwKLQkgIChnc3RfZWRnZXR2X2luaXQpLAotCSAgKGdzdF9lZGdldHZfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZWZmZWN0di9nc3RlZmZlY3R2LmM6Ci0JICAqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuaDoKLQkgICogZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYzogKGdzdF9xdWFya3R2X3NldF9jYXBzKSwKLQkgIChnc3RfcXVhcmt0dl9nZXRfdW5pdF9zaXplKSwgKGZhc3RyYW5kKSwKLQkgIChnc3RfcXVhcmt0dl90cmFuc2Zvcm0pLAotCSAgKGdzdF9xdWFya3R2X2NoYW5nZV9zdGF0ZSksIChnc3RfcXVhcmt0dl9iYXNlX2luaXQpLAotCSAgKGdzdF9xdWFya3R2X2NsYXNzX2luaXQpLCAoZ3N0X3F1YXJrdHZfaW5pdCksCi0JICAoZ3N0X3F1YXJrdHZfZ2V0X3R5cGUpOgotCSAgKiBnc3QvZWZmZWN0di9nc3RyZXYuYzogKGdzdF9yZXZ0dl9zZXRfY2FwcyksCi0JICAoZ3N0X3JldnR2X2dldF91bml0X3NpemUpLCAoZ3N0X3JldnR2X3RyYW5zZm9ybSksCi0JICAoZ3N0X3JldnR2X2Jhc2VfaW5pdCksIChnc3RfcmV2dHZfY2xhc3NfaW5pdCksIChnc3RfcmV2dHZfaW5pdCksCi0JICAoZ3N0X3JldnR2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOiAoZ3N0X3NoYWdhZGVsaWN0dl9zZXRfY2FwcyksCi0JICAoZ3N0X3NoYWdhZGVsaWN0dl9nZXRfdW5pdF9zaXplKSwgKGdzdF9zaGFnYWRlbGljdHZfdHJhbnNmb3JtKSwKLQkgIChnc3Rfc2hhZ2FkZWxpY3R2X2Jhc2VfaW5pdCksIChnc3Rfc2hhZ2FkZWxpY3R2X2NsYXNzX2luaXQpLAotCSAgKGdzdF9zaGFnYWRlbGljdHZfaW5pdCksIChnc3Rfc2hhZ2FkZWxpY3R2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5jOiAoZ3N0X3ZlcnRpZ290dl9zZXRfY2FwcyksCi0JICAoZ3N0X3ZlcnRpZ290dl9nZXRfdW5pdF9zaXplKSwgKGdzdF92ZXJ0aWdvdHZfdHJhbnNmb3JtKSwKLQkgIChnc3RfdmVydGlnb3R2X2Jhc2VfaW5pdCksIChnc3RfdmVydGlnb3R2X2NsYXNzX2luaXQpLAotCSAgKGdzdF92ZXJ0aWdvdHZfaW5pdCksIChnc3RfdmVydGlnb3R2X2dldF90eXBlKToKLQkgICogZ3N0L2VmZmVjdHYvZ3N0d2FycC5jOiAoZ3N0X3dhcnB0dl9zZXRfY2FwcyksCi0JICAoZ3N0X3dhcnB0dl9nZXRfdW5pdF9zaXplKSwgKGdzdF93YXJwdHZfdHJhbnNmb3JtKSwKLQkgIChnc3Rfd2FycHR2X2Jhc2VfaW5pdCksIChnc3Rfd2FycHR2X2NsYXNzX2luaXQpLAotCSAgKGdzdF93YXJwdHZfaW5pdCksCi0JICAoZ3N0X3dhcnB0dl9nZXRfdHlwZSk6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmg6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5jOiAoZ3N0X3ZpZGVvZmlsdGVyX2dldF90eXBlKSwKLQkgIChnc3RfdmlkZW9maWx0ZXJfY2xhc3NfaW5pdCksIChnc3RfdmlkZW9maWx0ZXJfaW5pdCk6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5oOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmM6IChnc3RfdmlkZW9mbGlwX3NldF9jYXBzKSwKLQkgIChnc3RfdmlkZW9mbGlwX3RyYW5zZm9ybV9jYXBzKSwgKGdzdF92aWRlb2ZsaXBfZ2V0X3VuaXRfc2l6ZSksCi0JICAoZ3N0X3ZpZGVvZmxpcF9mbGlwKSwgKGdzdF92aWRlb2ZsaXBfdHJhbnNmb3JtKSwKLQkgIChnc3RfdmlkZW9mbGlwX2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X3ZpZGVvZmxpcF9zZXRfcHJvcGVydHkpLAotCSAgKGdzdF92aWRlb2ZsaXBfYmFzZV9pbml0KSwgKGdzdF92aWRlb2ZsaXBfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3ZpZGVvZmxpcF9pbml0KSwgKHBsdWdpbl9pbml0KSwgKGdzdF92aWRlb2ZsaXBfZ2V0X3R5cGUpOgotCSAgKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmg6IFZpZGVvRmlsdGVyIGluaGVyaXRzIGZyb20KLQkgIEJhc2VUcmFuc2Zvcm0sIGl0J3MganVzdCBhIHBsYWNlIGhvbGRlciBmb3Igbm93IGFuZCBldmVyeSB2aWRlbwotCSAgZWZmZWN0IHBsdWdpbiBoYXMgYmVlbiBwb3J0ZWQgdG8gdXNlIEJhc2VUcmFuc2Zvcm0gZmVhdHVyZXMKLQkgIGRpcmVjdGx5LiBRdWFya1RWIHdhcyBmaXhlZCB0b28gKHdhcyBicm9rZW4pLCBuYXZpZ2F0aW9udGVzdAotCSAgd29ya3MKLQkgIGFuZCBiZXN0IGZvciB0aGUgZW5kLCB2aWRlb2ZsaXAgY29udmVydHMgbmF2aWdhdGlvbiBldmVudHMKLQkgIGRlcGVuZGluZwotCSAgb24gZmxpcCBtZXRob2QgISBGaXhlcyAjMzIwOTUzCi0KLTIwMDUtMTEtMjMgMTQ6MjI6MTggKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBGaXhlcyBmb3IgQVBJIGNoYW5nZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX2ZpeGF0ZSk6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9jb2xsZWN0ZWQpOgotCSAgKiBnc3QvZ29vbS9nc3Rnb29tLmM6IChnc3RfZ29vbV9pbml0KSwgKGdzdF9nb29tX3NyY19zZXRjYXBzKSwKLQkgIChnc3RfZ29vbV9zcmNfbmVnb3RpYXRlKSwgKGdzdF9nb29tX2NoYWluKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBGaXhlcyBmb3IgQVBJIGNoYW5nZXMKLQotMjAwNS0xMS0yMyAxMjoxOTowNiArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBhZGQgY3V0dGVyIHRvIHNwZWMgaW4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGN1dHRlciB0byBzcGVjIGluCi0KLTIwMDUtMTEtMjMgMTE6NTc6NTEgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IENvbnZlcnQgdG8gZnJhY3Rpb25hbCBmcmFtZXJhdGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCSAgKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9kdW1wX212aGQpLAotCSAgKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBDb252ZXJ0IHRvIGZyYWN0aW9uYWwgZnJhbWVyYXRlcwotCi0yMDA1LTExLTIyIDIzOjU4OjE0ICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGV4dC9qcGVnLzogSlBFRyBmcmFjdGlvbnkgZ29vZG5lc3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdfZGVjX3NldGNhcHMpLAotCSAgKGdzdF9qcGVnX2RlY19jaGFpbiksIChnc3RfanBlZ19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6IChnc3RfanBlZ2VuY19zZXRjYXBzKToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2VuYy5oOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiAoZ3N0X3Ntb2tlZW5jX3NldGNhcHMpLAotCSAgKGdzdF9zbW9rZWVuY19yZXN5bmMpOgotCSAgKiBleHQvanBlZy9nc3RzbW9rZWVuYy5oOgotCSAgSlBFRyBmcmFjdGlvbnkgZ29vZG5lc3MuCi0KLTIwMDUtMTEtMjIgMjI6MzU6NTcgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2dvb20vZmlsdGVycy5jOgotCSogZ3N0L2dvb20vZ3JhcGhpYy5oOgotCSAgRml4IGZvciAjMzIxNDMwOiB1bnJlc29sdmVkIHN5bWJvbHMgZHVlIHRvIGluY29ycmVjdCBsaW5rYWdlIG9uIGlubGluZSBmdW5jdGlvbnMgaW4gZ29vbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgRml4IGZvciAjMzIxNDMwOiB1bnJlc29sdmVkIHN5bWJvbHMgZHVlIHRvIGluY29ycmVjdCBsaW5rYWdlIG9uIGlubGluZSBmdW5jdGlvbnMKLQkgIGluIGdvb20uCi0JICBEb2VzIG5vdCwgaG93ZXZlciwgZml4IHRoZSBnZW5lcmFsIGNyYWNraGVhZGVkbmVzcyBvZiBnb29tIChnbG9iYWwgdmFyaWFibGVzLAotCSAgb2ggbXkhKTsgdGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gLWJhZC4KLQotMjAwNS0xMS0yMiAyMjoyMTozNyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIE1vcmUgZnJhY3Rpb25hbCBmcmFtZXJhdGUgY29udmVyc2lvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0X292ZXJsYXlfaW5pdCksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9zZXRjYXBzKSwgKGdzdF90ZXh0X292ZXJsYXlfY29sbGVjdGVkKToKLQkgICogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5Lmg6Ci0JICAqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfc2lua19saW5rKToKLQkgICogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmg6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IChnc3RfcG5nZGVjX2luaXQpLAotCSAgKGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCk6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmg6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChnc3RfcG5nZW5jX3NldGNhcHMpOgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiAoZ3N0X2FscGhhX2NvbG9yX3NldF9jYXBzKToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfaW5pdCksCi0JICAoZ3N0X2F2aW11eF92aWRzaW5rY29ubmVjdCk6Ci0JICAqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX2NoYWluKToKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21faW5pdCksIChnc3RfZ29vbV9zcmNfc2V0Y2FwcyksCi0JICAoZ3N0X2dvb21fc3JjX25lZ290aWF0ZSksIChnc3RfZ29vbV9jaGFpbik6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgIChnc3RfbWF0cm9za2FfbXV4X3ZpZGVvX3BhZF9zZXRjYXBzKToKLQkgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBNb3JlIGZyYWN0aW9uYWwgZnJhbWVyYXRlIGNvbnZlcnNpb25zCi0KLTIwMDUtMTEtMjIgMjA6MDc6NDcgKzAwMDAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JICBDb252ZXJ0IHRvIGZyYWN0aW9uYWwgZnJhbWVyYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX2ZpeGF0ZSk6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSAgKGdzdF9uYXZpZ2F0aW9udGVzdF9oYW5kbGVfc3JjX2V2ZW50KToKLQkgICogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmlsdGVyLmM6Ci0JICAoZ3N0X3ZpZGVvZmlsdGVyX2Zvcm1hdF9nZXRfc3RydWN0dXJlKSwgKGdzdF92aWRlb2ZpbHRlcl9zZXRjYXBzKSwKLQkgIChnc3RfdmlkZW9maWx0ZXJfaW5pdCk6Ci0JICAqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5oOgotCSAgQ29udmVydCB0byBmcmFjdGlvbmFsIGZyYW1lcmF0ZXMuCi0KLTIwMDUtMTEtMjIgMTg6MTE6NTggKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9lc2QvZXNkbW9uLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGFnZ3JlZ2F0b3IuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdHNoYXBlci5jOgotCSogZ3N0L3NtcHRlL2JhcmJveHdpcGVzLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSAgZml4IHVwIG1vcmUgZW51bXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHVwIG1vcmUgZW51bXMKLQotMjAwNS0xMS0yMiAxNzozOToxMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IEZyYWN0aW9uYWwgZnJhbWVyYXRlcywgdmlkZW9taXhlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9wYWRfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfdmlkZW9taXhlcl9nZXRjYXBzKSwgKGdzdF92aWRlb21peGVyX2ZpbGxfcXVldWVzKSwKLQkgIChnc3RfdmlkZW9taXhlcl91cGRhdGVfcXVldWVzKToKLQkgIEZyYWN0aW9uYWwgZnJhbWVyYXRlcywgdmlkZW9taXhlci4KLQotMjAwNS0xMS0yMiAxNzowOTozNiArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBleHQvZHYvOiBGcmFjdGlvbmFsIGZyYW1lcmF0ZXMgZm9yIERWLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2luaXQpLCAoZ3N0X2R2ZGVjX3Npbmtfc2V0Y2Fwcyk6Ci0JICAqIGV4dC9kdi9nc3RkdmRlYy5oOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfaW5pdCksCi0JICAoZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQpLCAoZ3N0X2R2ZGVtdXhfc2lua19jb252ZXJ0KSwKLQkgIChnc3RfZHZkZW11eF9kZW11eF92aWRlbyksIChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSksCi0JICAoZ3N0X2R2ZGVtdXhfZmx1c2gpOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSAgRnJhY3Rpb25hbCBmcmFtZXJhdGVzIGZvciBEVi4KLQotMjAwNS0xMS0yMiAxNDo0NDoyNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L2F1dG9kZXRlY3QvOiBVc2UgZ3N0X3BsdWdpbl9mZWF0dXJlX2xpc3RfZnJlZSgpIHRvIGZyZWUgZmVhdHVyZSBsaXN0IGFuZCBpbiB0aGUgY2FzZSBvZiBhdXRvdmlkZW9zaW5rIGZyZWUgdGhlIGxpLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZmluZF9iZXN0KSwgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZGV0ZWN0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZmluZF9iZXN0KSwgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZGV0ZWN0KToKLQkgIFVzZSBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlKCkgdG8gZnJlZSBmZWF0dXJlIGxpc3QgYW5kCi0JICBpbiB0aGUgY2FzZSBvZiBhdXRvdmlkZW9zaW5rIGZyZWUgdGhlIGxpc3QgYXQgYWxsLiBBbHNvCi0JICBtaXNjZWxsYW5lb3VzIGNvc21ldGljIGZpeGVzLgotCi0yMDA1LTExLTIyIDEzOjEzOjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzogY29weSBjYWxjdWxhdGlvbiBjb2RlIGZyb20gbGV2ZWw7IHJlbW92ZSB1c2Ugb2Ygc29tZSBhdWRpbyBmdW5jdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOiAoZ3N0X2N1dHRlcl9jaGFpbiksCi0JICAoZ3N0X2N1dHRlcl9zZXRfcHJvcGVydHkpLCAoZ3N0X2N1dHRlcl9nZXRfY2Fwcyk6Ci0JICBjb3B5IGNhbGN1bGF0aW9uIGNvZGUgZnJvbSBsZXZlbDsgcmVtb3ZlIHVzZSBvZiBzb21lIGF1ZGlvCi0JICBmdW5jdGlvbnMKLQotMjAwNS0xMS0yMiAxMzoxMToyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgdmFyaW91cyBjb3NtZXRpYyBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB2YXJpb3VzIGNvc21ldGljIGZpeGVzCi0KLTIwMDUtMTEtMjIgMTI6NDg6MTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIHZhcmlvdXMgY29zbWV0aWMgZml4ZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdmFyaW91cyBjb3NtZXRpYyBmaXhlcwotCi0yMDA1LTExLTIyIDEyOjQxOjM1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICB2YXJpb3VzIGNvc21ldGljIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHZhcmlvdXMgY29zbWV0aWMgZml4ZXMKLQotMjAwNS0xMS0yMiAxMjozODozMyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSAgVXBkYXRlIGZvciBnc3RfdGFnX3NldHRlciBBUEkgY2hhbmdlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogVXBkYXRlIGZvciBnc3RfdGFnX3NldHRlciBBUEkgY2hhbmdlcy4KLQotMjAwNS0xMS0yMiAxMTo1Nzo1MSArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBleHQvZmFhZC9nc3RmYWFkLmMgKGdzdF9mYWFkX2V2ZW50KSBleHQvaXZvcmJpcy92b3JiaXNmaWxlLmMgKGdzdF9pdm9yYmlzZmlsZV9sb29wKSBnc3QvcXRkZW11eC9xdGRlbXV4LmMgKGdzdF9xdGRlbXUuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMS0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZXh0L2ZhYWQvZ3N0ZmFhZC5jIChnc3RfZmFhZF9ldmVudCkKLQkgICogZXh0L2l2b3JiaXMvdm9yYmlzZmlsZS5jIChnc3RfaXZvcmJpc2ZpbGVfbG9vcCkKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jIChnc3RfcXRkZW11eF9sb29wX2hlYWRlcikKLQkgICogZ3N0L3NwZWVkL2dzdHNwZWVkLmMgKHNwZWVkX3NpbmtfZXZlbnQpCi0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYyAoZ3N0X3R0YV9wYXJzZV9zcmNfZXZlbnQpCi0JICAoZ3N0X3R0YV9wYXJzZV9wYXJzZV9oZWFkZXIpOiBSdW4gdXBkYXRlLWZ1bmNuYW1lcy4KLQotMjAwNS0xMS0yMiAxMTo1MzozNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOgotCSogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkgIGV4dC9kdi9nc3RkdmRlbXV4LmMgKGdzdF9kdmRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSAoZ3N0X2R2ZGVtdXhfZGVtdXhfZnJhbWUpIGV4dC9mbGFjL2dzdGZsYWNkZWMuYyAoZ3N0X2ZsYWNkZWNfd3JpdC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jIChnc3RfZHZkZW11eF9oYW5kbGVfc2lua19ldmVudCkKLQkgIChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSkKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jIChnc3RfZmxhY2RlY193cml0ZSkKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jIChnc3RfZmxhY2VuY19zZWVrX2NhbGxiYWNrKQotCSAgKGdzdF9mbGFjZW5jX3NpbmtfZXZlbnQpCi0JICAqIGV4dC9nY29uZi9nc3RnY29uZmF1ZGlvc2luay5jIChnc3RfZ2NvbmZfYXVkaW9fc2lua19pbml0KQotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuYyAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfaW5pdCkKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYyAoZ3N0X3BuZ2RlY19jYXBzX2NyZWF0ZV9hbmRfc2V0KQotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYyAoc3BlZXhfZGVjX2V2ZW50LCBzcGVleF9kZWNfY2hhaW4pCi0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYyAoZ3N0X2F1cGFyc2VfY2hhaW4pCi0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYyAoZ3N0X2F1dG9fYXVkaW9fc2lua19pbml0KQotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmMgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfaW5pdCkKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2VlaykKLQkgICogZ3N0L2dvb20vZ3N0Z29vbS5jIChnc3RfZ29vbV9ldmVudCkKLQkgICogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYyAoZ3N0X2VibWxfd3JpdGVfc2VlaykKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmMKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQpCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2xvb3Bfc3RyZWFtX3BhcnNlX2lkKQotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jIChnc3Rfd2F2ZW5jX3N0b3BfZmlsZSkKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmMgKGdzdF93YXZwYXJzZV9oYW5kbGVfc2VlaykKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOiBSdW4gdXBkYXRlLWZ1bmNuYW1lcy4KLQotMjAwNS0xMS0yMiAxMTo0OTozMCArMDAwMCAgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLQotCSAgVVJJSGFuZGxlciBpbnRlcmZhY2UgYW5kIGVsZW1lbnQgcHJvcGVydGllcyBhcmUgbm93IHByb3Blcmx5IHN5bmNocm9uaXplZCBmb3IgRFYxMzk0c3JjIGFuZCBVRFBTcmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2R2MTM5NHNyY19pbml0KSwgKGdzdF9kdjEzOTRzcmNfZGlzcG9zZSksCi0JICAoZ3N0X2R2MTM5NHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X2R2MTM5NHNyY19kaXNjb3Zlcl9hdmNfbm9kZSksCi0JICAoZ3N0X2R2MTM5NHNyY191cmlfc2V0X3VyaSk6Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLAotCSAgKGdzdF91ZHBzcmNfdXBkYXRlX3VyaSksIChnc3RfdWRwc3JjX3NldF91cmkpLAotCSAgKGdzdF91ZHBzcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF91ZHBzcmNfdXJpX2dldF91cmkpOgotCSAgVVJJSGFuZGxlciBpbnRlcmZhY2UgYW5kIGVsZW1lbnQgcHJvcGVydGllcyBhcmUgbm93IHByb3Blcmx5Ci0JICBzeW5jaHJvbml6ZWQgZm9yIERWMTM5NHNyYyBhbmQgVURQU3JjCi0KLTIwMDUtMTEtMjIgMTE6MzY6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC86IGxpYmdzdHRhZ2VkaXQgaGFzIGJlZW4gcmVuYW1lZCB0byBsaWJnc3R0YWcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvTWFrZWZpbGUuYW06Ci0JICAqIGV4dC9zcGVleC9NYWtlZmlsZS5hbToKLQkgIGxpYmdzdHRhZ2VkaXQgaGFzIGJlZW4gcmVuYW1lZCB0byBsaWJnc3R0YWcuCi0KLTIwMDUtMTEtMjEgMjA6MTE6NTkgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IEFwcGx5IHBhdGNoIGZyb20gU2ViYXN0aWVuIENvdGUgdG8gZml4ICMzMTkxODQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uYzogKHJlYWRfYm9keSk6Ci0JICBBcHBseSBwYXRjaCBmcm9tIFNlYmFzdGllbiBDb3RlIHRvIGZpeCAjMzE5MTg0LgotCi0yMDA1LTExLTIxIDE5OjUwOjI1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgcG9ydCBjdXR0ZXIKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICAqIGdzdC9jdXR0ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6IChnc3RfY3V0dGVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF9jdXR0ZXJfaW5pdCksIChnc3RfY3V0dGVyX21lc3NhZ2VfbmV3KSwgKGdzdF9jdXR0ZXJfY2hhaW4pLAotCSAgKGdzdF9jdXR0ZXJfc2V0X3Byb3BlcnR5KSwgKGdzdF9jdXR0ZXJfZ2V0X3Byb3BlcnR5KSwKLQkgIChwbHVnaW5faW5pdCksIChnc3RfY3V0dGVyX2dldF9jYXBzKToKLQkgIHBvcnQgY3V0dGVyCi0JICAqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgZml4IHVwIHBsdWdpbiBkZXRhaWxzCi0KLTIwMDUtMTEtMjEgMTg6MDk6MDIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFVwZGF0ZSBmb3Igc3RyZWFtIGxvY2sgQVBJIGNoYW5nZXM6IGRvbid0IHRha2Ugc3RyZWFtIGxvZyBpbiBzaW5rIGV2ZW50IGhhbmRsZXJzIGFueSBsb25nZXIgYW5kIGNoYW5nZSBHU1RfU1RSRUFNX0xPQy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9oYW5kbGVfc2lua19ldmVudCk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjZGVjX2xvb3ApLAotCSAgKGdzdF9mbGFjZGVjX3NyY19ldmVudCk6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjZW5jX3NpbmtfZXZlbnQpOgotCSAgKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOiAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfZXZlbnQpLAotCSAgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2dldHJhbmdlKSwgKGdzdF9zaWduYWxfcHJvY2Vzc29yX2NoYWluKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vlayk6Ci0JICAqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX3NyY19ldmVudF9oYW5kbGVyKSwKLQkgIChnc3RfZmx4ZGVjX3NpbmtfZXZlbnRfaGFuZGxlcik6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2hhbmRsZV9zZWVrKToKLQkgIFVwZGF0ZSBmb3Igc3RyZWFtIGxvY2sgQVBJIGNoYW5nZXM6IGRvbid0IHRha2Ugc3RyZWFtIGxvZwotCSAgaW4gc2luayBldmVudCBoYW5kbGVycyBhbnkgbG9uZ2VyIGFuZCBjaGFuZ2UgR1NUX1NUUkVBTV9MT0NLCi0JICB0byBHU1RfUEFEX1NUUkVBTV9MT0NLLiBEb24ndCBsZWFrIHJlZmVyZW5jZXMgaW4gZmx4ZGVjIGV2ZW50Ci0JICBmdW5jdGlvbnMuCi0KLTIwMDUtMTEtMjEgMTc6NTI6MTUgKzAwMDAgIE1pY2hhZWwgU21pdGggPG1zbWl0aEB4aXBoLm9yZz4KLQotCSogZ3N0L2F1cGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmg6Ci0JICBGb3Jnb3QgdG8gY29tbWl0IGhlYWRlciBmaWxlIGNoYW5nZXMsIE1ha2VmaWxlLmFtIGNoYW5nZXMuIE9vcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZvcmdvdCB0byBjb21taXQgaGVhZGVyIGZpbGUgY2hhbmdlcywgTWFrZWZpbGUuYW0gY2hhbmdlcy4gT29wcy4KLQotMjAwNS0xMS0yMSAxNzo0OToyMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBnc3Rfb2JqZWN0X3VucmVmLCBub3QgZ19vYmplY3RfdW5yZWYKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZ3N0X29iamVjdF91bnJlZiwgbm90IGdfb2JqZWN0X3VucmVmCi0KLTIwMDUtMTEtMjEgMTc6Mzc6NDEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIEZpeCBmb3Igc3RyZWFtIGxvY2sgdXBkYXRlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZmFhYy9nc3RmYWFjLmM6IChnc3RfZmFhY19zaW5rX2V2ZW50KToKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19ldmVudCk6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYzogKGdzdF90dGFfcGFyc2Vfc3JjX2V2ZW50KToKLQkgIEZpeCBmb3Igc3RyZWFtIGxvY2sgdXBkYXRlcy4KLQotMjAwNS0xMS0yMSAxNzoyMzo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IFVzZSBHU1RfREVCVUdfRlVOQ1BUUjsgYWRkIGRlYnVnIG1lc3NhZ2UgaW4gcGFkIGFjdGl2YXRlIGZ1bmN0aW9uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2luaXQpLAotCSAgKGdzdF93YXZwYXJzZV9jcmVhdGVfc291cmNlcGFkKSwgKGdzdF93YXZwYXJzZV9zaW5rX2FjdGl2YXRlKToKLQkgIFVzZSBHU1RfREVCVUdfRlVOQ1BUUjsgYWRkIGRlYnVnIG1lc3NhZ2UgaW4gcGFkIGFjdGl2YXRlIGZ1bmN0aW9uLgotCi0yMDA1LTExLTIxIDE3OjE4OjAxICswMDAwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAeGlwaC5vcmc+Ci0KLQkgIGdzdC9hdXBhcnNlLzogUGFydGlhbGx5IGZpeCAjMTYxNzEyLiBwbGF5YmluIHN0aWxsIGRvZXNuJ3Qgd29yayBvbiB0aGVzZSBmaWxlcywgKG9uIHRoZSBidWcgcmVwb3J0LCBBbmR5IHNheXMgd2UgYXJlbi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXBhcnNlL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVwYXJzZV9jbGFzc19pbml0KSwKLQkgIChnc3RfYXVwYXJzZV9pbml0KSwgKGdzdF9hdXBhcnNlX2Rpc3Bvc2UpLCAoZ3N0X2F1cGFyc2VfY2hhaW4pLAotCSAgKGdzdF9hdXBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuaDoKLQkgIFBhcnRpYWxseSBmaXggIzE2MTcxMi4gcGxheWJpbiBzdGlsbCBkb2Vzbid0IHdvcmsgb24gdGhlc2UgZmlsZXMsCi0JICAob24gdGhlIGJ1ZyByZXBvcnQsIEFuZHkgc2F5cyB3ZSBhcmVuJ3QgdHlwZWZpbmRpbmcgaXQgZm9yIHNvbWUKLQkgIHJlYXNvbj8pIGJ1dCBhdCBsZWFzdCBhdXBhcnNlIGlzbid0IHRvdGFsbHkgYnVzdGVkIGxpa2UgaXQgd2FzIGJlZm9yZS4KLQotMjAwNS0xMS0yMSAxNjo0NTo0NiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiBqQGJvb3RsYWIub3JnLCAjMzIxOTAzKS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgQWRkIERYNTAsIERJVlggYW5kIERJVjMgZm91cmNjcyAocGF0Y2ggYnkKLQkgIGpAYm9vdGxhYi5vcmcsICMzMjE5MDMpLgotCi0yMDA1LTExLTIxIDE2OjM2OjA1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgICouKjogUmFuIHNjcmlwdHMvdXBkYXRlLW1hY3Jvcy4gT2ggeWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIxICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiAqLmg6Ci0JICAqICouYzogUmFuIHNjcmlwdHMvdXBkYXRlLW1hY3Jvcy4gT2ggeWVzLgotCi0yMDA1LTExLTIxIDE1OjA2OjM1ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogRmlsbGVyIGV2ZW50cyBhcmUgZ29uZSBmb3Igbm93LCBjb21tZW50IG91dCBzZWN0aW9uIGdlbmVyYXRpbmcgdGhlbS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9zeW5jX3N0cmVhbXMpOgotCSAgRmlsbGVyIGV2ZW50cyBhcmUgZ29uZSBmb3Igbm93LCBjb21tZW50IG91dCBzZWN0aW9uIGdlbmVyYXRpbmcKLQkgIHRoZW0uCi0KLTIwMDUtMTEtMjEgMTQ6Mzk6MDQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFVwZGF0ZSBmb3IgR1NUX0ZPVVJDQ19GT1JNQVQgQVBJIGNoYW5nZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZGlyZWN0ZmIvZGZidmlkZW9zaW5rLmM6Ci0JICAoZ3N0X2RmYnZpZGVvc2lua19nZXRfZm9ybWF0X2Zyb21fY2Fwcyk6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2NyZWF0ZSk6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwKLQkgIChxdGRlbXV4X3BhcnNlKSwgKHF0ZGVtdXhfdHlwZV9nZXQpLCAocXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCksCi0JICAocXRkZW11eF9kdW1wX2hkbHIpLCAocXRkZW11eF9kdW1wX2RyZWYpLCAocXRkZW11eF9kdW1wX3N0c2QpLAotCSAgKHF0ZGVtdXhfZHVtcF9kY29tKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayksIChxdGRlbXV4X3ZpZGVvX2NhcHMpLAotCSAgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX3Y0bDJmb3VyY2NfdG9fY2Fwcyk6Ci0JICAqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX2ZpbGxfZm9ybWF0X2xpc3QpLAotCSAgKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCksIChnc3RfdjRsMnNyY19nZXRfc2l6ZV9saW1pdHMpOgotCSAgVXBkYXRlIGZvciBHU1RfRk9VUkNDX0ZPUk1BVCBBUEkgY2hhbmdlLgotCi0yMDA1LTExLTIxIDE0OjMzOjExICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUmVuYW1lIGdzdF9jYXBzX3N0cnVjdHVyZV9maXhhdGVfKiB0byBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV8qICgjMzIyMDI3KQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuYzoKLQkgICogZXh0L3BvbHlwL3BvbHlwc2luay5jOiAoZ3N0X3BvbHlwc2lua19zaW5rX2ZpeGF0ZSk6Ci0JICAqIGdzdC9saWJyZmIvZ3N0cmZic3JjLmM6IChnc3RfcmZic3JjX2ZpeGF0ZSk6Ci0JICAqIGdzdC9tb2RwbHVnL2dzdG1vZHBsdWcuY2M6Ci0JICAqIHN5cy9nbHNpbmsvZ2xpbWFnZXNpbmsuYzogKGdzdF9nbGltYWdlc2lua19maXhhdGUpOgotCSAgKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19maXhhdGUpOgotCSAgUmVuYW1lIGdzdF9jYXBzX3N0cnVjdHVyZV9maXhhdGVfKiB0byBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV8qCi0JICAoIzMyMjAyNykKLQotMjAwNS0xMS0yMSAxNDozMTowNSArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIFJlbmFtZSBnc3RfY2Fwc19zdHJ1Y3R1cmVfZml4YXRlXyogdG8gZ3N0X3N0cnVjdHVyZV9maXhhdGVfKiAoIzMyMjAyNykKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX2ZpeGF0ZSk6Ci0JICAqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6IChnc3RfbWlrbW9kX3NyY2ZpeGF0ZSk6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX3NyY19uZWdvdGlhdGUpOgotCSAgKiBzeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm06Ci0JICBSZW5hbWUgZ3N0X2NhcHNfc3RydWN0dXJlX2ZpeGF0ZV8qIHRvIGdzdF9zdHJ1Y3R1cmVfZml4YXRlXyoKLQkgICgjMzIyMDI3KQotCi0yMDA1LTExLTIxIDEzOjM4OjI0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBGaXhlcyBmb3IgR1NUX0ZPVVJDQ19GT1JNQVQgQVBJIGNoYW5nZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX3NldGNhcHMpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX2ZpbGVfaGVhZGVyKSwKLQkgIChnc3RfYXZpX2RlbXV4X3JlYWRfc3ViaW5kZXhlcyksIChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksCi0JICAoZ3N0X2F2aV9kZW11eF9wYXJzZV9vZG1sKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N5bmMpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6ICh3cml0ZV9tZXRhZGF0YSk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3BhcnNlX2FkdGwpLAotCSAgKGdzdF93YXZwYXJzZV9wYXJzZV9maWxlX2hlYWRlciksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpOgotCSAgRml4ZXMgZm9yIEdTVF9GT1VSQ0NfRk9STUFUIEFQSSBjaGFuZ2UuCi0KLTIwMDUtMTEtMjEgMTI6MTM6NDggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIEZpeCBmb3IgY29sbGVjdCBwYWRzIEFQSSBjaGFuZ2UuIEFsc28gZml4IHRleHRvdmVybGF5IHN0YXRlIGNoYW5nZSBmdW5jdGlvbi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0X292ZXJsYXlfZmluYWxpemUpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfaW5pdCksIChnc3RfdGV4dF9vdmVybGF5X3RleHRfcGFkX2xpbmtlZCksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV90ZXh0X3BhZF91bmxpbmtlZCksIChnc3RfdGV4dF9vdmVybGF5X3BvcF92aWRlbyksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9wb3BfdGV4dCksIChnc3RfdGV4dF9vdmVybGF5X2NvbGxlY3RlZCksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X2luaXQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLCAoZ3N0X21hdHJvc2thX211eF9yZXF1ZXN0X25ld19wYWQpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfYmVzdF9wYWQpLCAoZ3N0X21hdHJvc2thX211eF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzogKGdzdF9zbXB0ZV9pbml0KSwgKGdzdF9zbXB0ZV9jb2xsZWN0ZWQpOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9pbml0KSwKLQkgIChnc3RfdmlkZW9taXhlcl9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9xdWV1ZXMpLAotCSAgKGdzdF92aWRlb21peGVyX2NoYW5nZV9zdGF0ZSk6Ci0JICBGaXggZm9yIGNvbGxlY3QgcGFkcyBBUEkgY2hhbmdlLiBBbHNvIGZpeCB0ZXh0b3ZlcmxheSBzdGF0ZQotCSAgY2hhbmdlIGZ1bmN0aW9uLgotCi0yMDA1LTExLTIwIDE3OjA0OjU1ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBSZXBsYWNlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMjAgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9zdGFydCk6IFJlcGxhY2UKLQkgIEdTVF9QQURfSVNfVVNBQkxFIGJ5IHNvbWV0aGluZyBhcHByb2FjaGluZyBpdC4KLQotMjAwNS0xMS0yMCAxNjo0MzozMiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogRml4IGZvcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTExLTIwICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQpOiBGaXggZm9yCi0JICBBUEkgY2hhbmdlcy4KLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2hhaW4pOiBGaXggZm9yIEFQSQotCSAgY2hhbmdlcywKLQkgIGJ1dCBhbHNvIGZpeCB0aGUgY29kZSB0aGF0IHdhcyBub3QgY2hlY2tpbmcgcmV0dXJuIHZhbHVlcyBmcm9tCi0JICBwYWRfcHVzaCBuZWl0aGVyIHVzaW5nIHBhZF9hbGxvY19idWZmZXIuCi0KLTIwMDUtMTEtMTggMTg6MTk6MjEgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IEFkZGVkIGRlYnVnIGNhdGVnb3J5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogKGdzdF9wbmdlbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3BuZ2VuY19jaGFpbik6Ci0JICBBZGRlZCBkZWJ1ZyBjYXRlZ29yeQotCSAgUmV0dXJuIEdTVF9GTE9XX1VORVhQRUNURUQgd2hlbiBzZW5kaW5nIGFuIEVPUywgc28gdGhlIHdob2xlIHBpcGVsaW5lCi0JICBnb2VzIHRvIEVPUy4KLQotMjAwNS0xMS0xNyAxODoyMzoyMyArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMXBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlYy5oOgotCSogZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhlbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuaDoKLQkgIENyZWF0ZWQgU3BlZXggcGF5bG9hZGVyIGFuZCBkZXBheWxvYWRlcjsgT3B0aW1pemUgRzcxMSBwYXlsb2FkZXIgdG8gdXNlIGFkYXB0ZXIgYW5kIHNlbmQgcGFja2V0cyB1bnRpbCBNVFUgc2l6ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQ3JlYXRlZCBTcGVleCBwYXlsb2FkZXIgYW5kIGRlcGF5bG9hZGVyOyBPcHRpbWl6ZSBHNzExIHBheWxvYWRlciB0byB1c2UgYWRhcHRlciBhbmQgc2VuZCBwYWNrZXRzIHVudGlsIE1UVSBzaXplLgotCi0yMDA1LTExLTE2IDE5OjA4OjU0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBjaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOiBGaXggbGVhayBpbiBjaGVjay4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOiAoc2V0dXBfc3JjX3BhZCksIChzZXR1cF9zaW5rX3BhZCk6Ci0JICBGaXggbGVhayBpbiBjaGVjay4KLQotMjAwNS0xMS0xNiAxNzowMDozMiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2ZseC9nc3RmbHhkZWMuYzogRml4IHN0YXRlIGNoYW5nZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5jOiAoZ3N0X2ZseGRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgRml4IHN0YXRlIGNoYW5nZS4KLQotMjAwNS0xMS0xNiAxMTowMjoyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgTW92ZSBjb21tZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAoZ3N0X3VkcHNyY19jcmVhdGUpOiBNb3ZlIGNvbW1lbnQuCi0KLTIwMDUtMTEtMTYgMTA6NDM6NDQgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZ3N0L3VkcC9nc3R1ZHBzcmMuYzogQ2xlYW4gdXAgd2l0aCB0aGUgYm9pbGVycGxhdGUgbWFjcm8uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTEtMTYgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IENsZWFuIHVwIHdpdGggdGhlIGJvaWxlcnBsYXRlIG1hY3JvLgotCi0yMDA1LTExLTE1IDE5OjQxOjIxICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogV2hlbiBzZWVraW5nLCBzZWVrIHRvIGNsb3Nlc3QgaW5kZXggZW50cnkgYXQgb3IgYmVmb3JlIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiwgbm8uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FkZW11eF9kb19pbmRleF9zZWVrKToKLQkgIFdoZW4gc2Vla2luZywgc2VlayB0byBjbG9zZXN0IGluZGV4IGVudHJ5IGF0IG9yIGJlZm9yZSB0aGUgcmVxdWVzdGVkCi0JICBzZWVrIHBvc2l0aW9uLCBub3QganVzdCB0aGUgY2xvc2VzdCBvbmUgKCMzMjEwMDEpLgotCi0yMDA1LTExLTE1IDEyOjE2OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IEludmVydCBESUIgaW1hZ2VzIGFnYWluIChzZWUgIzEzMjM0MSkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoc3dhcF9saW5lKSwgKGdzdF9hdmlfZGVtdXhfaW52ZXJ0KSwKLQkgIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKToKLQkgIEludmVydCBESUIgaW1hZ2VzIGFnYWluIChzZWUgIzEzMjM0MSkuCi0KLTIwMDUtMTEtMTQgMDI6MTM6MzUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm8uYzoKLQkqIGV4dC9kdi9nc3Rkdi5jOgotCSogZXh0L2VzZC9nc3Rlc2QuYzoKLQkqIGV4dC9mbGFjL2dzdGZsYWMuYzoKLQkqIGV4dC9nY29uZi9nc3RnY29uZmVsZW1lbnRzLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9qcGVnL2dzdGpwZWcuYzoKLQkqIGV4dC9sYWRzcGEvZ3N0bGFkc3BhLmM6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYm1uZy9nc3RtbmcuYzoKLQkqIGV4dC9saWJwbmcvZ3N0cG5nLmM6Ci0JKiBleHQvbWlrbW9kL2dzdG1pa21vZC5jOgotCSogZXh0L3BhbmdvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvcGFuZ28vZ3N0dGltZW92ZXJsYXkuYzoKLQkqIGV4dC9yYXcxMzk0L2dzdDEzOTQuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleC5jOgotCSogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5jOgotCSogZ3N0L2F2aS9nc3RhdmkuYzoKLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvZGVidWcvZWZlbmNlLmM6Ci0JKiBnc3QvZGVidWcvZ3N0ZGVidWcuYzoKLQkqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5jOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9nb29tL2dzdGdvb20uYzoKLQkqIGdzdC9sYXcvYWxhdy5jOgotCSogZ3N0L2xhdy9tdWxhdy5jOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EuYzoKLQkqIGdzdC9tZWRpYW4vZ3N0bWVkaWFuLmM6Ci0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnQuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGVsZW1lbnRzLmM6Ci0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRzcC9nc3RydHNwLmM6Ci0JKiBnc3Qvc21vb3Rod2F2ZS9nc3RzbW9vdGh3YXZlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzoKLQkqIGdzdC91ZHAvZ3N0dWRwLmM6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvdGVtcGxhdGUuYzoKLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzYXVkaW8uYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jOgotCSAgcmV3b3JrIGNvbmZpZ3VyZS5hYzsgbWFrZSBhc3RlcmlzayBydHAgc3R1ZmYgY29tcGlsZSBvbiBtaW5ndwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZXdvcmsgY29uZmlndXJlLmFjOyBtYWtlIGFzdGVyaXNrIHJ0cCBzdHVmZiBjb21waWxlIG9uIG1pbmd3Ci0KLTIwMDUtMTEtMTIgMTM6MzE6NTYgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogT25seSBHU1RfREVCVUcoKSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFsaWQgY29tcG9uZW50cy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfY2hhaW4pOgotCSAgT25seSBHU1RfREVCVUcoKSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFsaWQgY29tcG9uZW50cy4KLQotMjAwNS0xMS0xMSAxOTozNDo1MCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJhY2sgdG8gaGVhZAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBiYWNrIHRvIGhlYWQKLQotPT09IHJlbGVhc2UgMC45LjUgPT09Ci0KLTIwMDUtMTEtMTEgMTk6MzM6MjMgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBORVdTOgotCSogUkVMRUFTRToKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgcmVsZWFzaW5nIDAuOS41Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjkuNQotCi0yMDA1LTExLTExIDE4OjMzOjIxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIFVwZGF0ZSAucG8gZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlIC5wbyBmaWxlcwotCi0yMDA1LTExLTExIDE2OjQ4OjU4ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4Lio6IFllYWgsIGltcGxlbWVudCBwcm9wZXIgc2Vla2luZy4gRXhhY3Qgc2Vla2luZyBhbmQgc2VnbWVudCBzZWVraW5nLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVzZXQpLAotCSAgKGdzdF9hdmlfZGVtdXhfc3JjX2NvbnZlcnQpLCAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpLCAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2VlayksCi0JICAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSksCi0JICAoZ3N0X2F2aV9kZW11eF9sb29wKToKLQkgICogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgWWVhaCwgaW1wbGVtZW50IHByb3BlciBzZWVraW5nLiBFeGFjdCBzZWVraW5nIGFuZCBzZWdtZW50IHNlZWtpbmcuCi0JICBTdGlsbCBuZWVkIHRvIGRvIHNvbWUgY2hlY2tzIGZvciBzZWdtZW50X3N0b3AuCi0KLTIwMDUtMTEtMTEgMTU6MTc6NDQgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgZml4IENhaXJvIGVudHJ5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBDYWlybyBlbnRyeQotCi0yMDA1LTExLTEwIDEyOjM0OjI2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IEFkZCBzdXBwb3J0IGZvciBjdXN0b20gZ2VucmUgdGFncy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV91ZHRhKToKLQkgIEFkZCBzdXBwb3J0IGZvciBjdXN0b20gZ2VucmUgdGFncy4KLQotMjAwNS0xMS0xMCAxMjoyMjozMCArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiBEb24ndCB0cnkgdG8gcmVhZHkgYnVmZmVyIGR1cmF0aW9uIGZyb20gYnVmZmVyIHRoYXQgd2UgZG9uJ3Qgb3duIGFueSAgbG9uZ2VyIGFuZCB0aGF0IG1pLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFJldmlld2VkIGJ5OiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfZGF0YSk6Ci0JICBEb24ndCB0cnkgdG8gcmVhZHkgYnVmZmVyIGR1cmF0aW9uIGZyb20gYnVmZmVyIHRoYXQgd2UgZG9uJ3QKLQkgIG93biBhbnkgIGxvbmdlciBhbmQgdGhhdCBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiB1bnJlZmZlZC4KLQkgICgjMzIxMTM2KQotCi0yMDA1LTExLTA5IDIxOjM1OjI5ICswMDAwICBaZWVzaGFuIEFsaSA8emVlbml4QGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkgIEF0dGVtcHRpbmcgdG8gb3B0aW1pemUgdGhlIGNvZGUgZm9yIGVtYmVkZGVkIHN5c3RlbXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEF0dGVtcHRpbmcgdG8gb3B0aW1pemUgdGhlIGNvZGUgZm9yIGVtYmVkZGVkIHN5c3RlbXMuCi0KLTIwMDUtMTEtMDggMDg6NTQ6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiBEb24ndCByZS11c2UgYWxyZWFkeSBjbG9zZWQgZmlsZSBkZXNjcmlwdG9yLiAoIzMyMDkyMCkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3NzX3NpbmtfY2xvc2UpOgotCSAgRG9uJ3QgcmUtdXNlIGFscmVhZHkgY2xvc2VkIGZpbGUgZGVzY3JpcHRvci4gKCMzMjA5MjApCi0KLTIwMDUtMTEtMDcgMTc6MzU6MjAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0b3Nzc2luay4qOiBDYWNoZSBwcm9iZWQgY2FwczsgZml4IGRlYnVnIG91dHB1dCBmb3IgU0VUX1BBUkFNIG1hY3Jvcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3Nfc2lua19kaXNwb3NlKSwKLQkgIChnc3Rfb3NzX3Npbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9vc3Nfc2lua19nZXRjYXBzKSwKLQkgIChnc3Rfb3NzX3NpbmtfcHJlcGFyZSk6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5oOgotCSAgQ2FjaGUgcHJvYmVkIGNhcHM7IGZpeCBkZWJ1ZyBvdXRwdXQgZm9yIFNFVF9QQVJBTSBtYWNyb3MuCi0KLTIwMDUtMTEtMDcgMTU6MDk6NTQgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9jYWlyby86IFBvcnQgY2Fpcm8gdGV4dG92ZXJsYXkgcGx1Z2luIHRvIDAuOS4gQWRkICdzaGFkZWQtYmFja2dyb3VuZCcgcHJvcGVydHkgYW5kIHJlZG8gcG9zaXRpb24uIERvZXNuJ3QgaGFuZGxlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9jYWlyby9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NhaXJvL2dzdGNhaXJvLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRfb3ZlcmxheV9iYXNlX2luaXQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfY2xhc3NfaW5pdCksIChnc3RfdGV4dF9vdmVybGF5X2ZpbmFsaXplKSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X2luaXQpLCAoZ3N0X3RleHRfb3ZlcmxheV9mb250X2luaXQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfc2V0X3Byb3BlcnR5KSwgKGdzdF90ZXh0X292ZXJsYXlfcmVuZGVyX3RleHQpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfZ2V0Y2FwcyksIChnc3RfdGV4dF9vdmVybGF5X3NldGNhcHMpLAotCSAgKGdzdF90ZXh0X292ZXJsYXlfdGV4dF9wYWRfbGlua2VkKSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X3RleHRfcGFkX3VubGlua2VkKSwgKGdzdF90ZXh0X292ZXJsYXlfc2hhZGVfeSksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9ibGl0XzEpLCAoZ3N0X3RleHRfb3ZlcmxheV9ibGl0X3N1YjJ4MiksCi0JICAoZ3N0X3RleHRfb3ZlcmxheV9wdXNoX2ZyYW1lKSwgKGdzdF90ZXh0X292ZXJsYXlfcG9wX3ZpZGVvKSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X3BvcF90ZXh0KSwgKGdzdF90ZXh0X292ZXJsYXlfY29sbGVjdGVkKSwKLQkgIChnc3RfdGV4dF9vdmVybGF5X2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9jYWlyby9nc3R0ZXh0b3ZlcmxheS5oOgotCSAgUG9ydCBjYWlybyB0ZXh0b3ZlcmxheSBwbHVnaW4gdG8gMC45LiBBZGQgJ3NoYWRlZC1iYWNrZ3JvdW5kJwotCSAgcHJvcGVydHkgYW5kIHJlZG8gcG9zaXRpb24uIERvZXNuJ3QgaGFuZGxlIHVwc3RyZWFtIHJlbmVnb3RpYXRpb24KLQkgIHlldCB0aG91Z2guCi0KLTIwMDUtMTEtMDcgMTA6MzE6MzIgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogTm8gbmVlZCB0byB0YWtlIHRoZSBTVFJFQU1fTE9DSyBpbiB0aGUgbG9vcCBmdW5jdGlvbi4gSW1wcm92ZSBzb21lIGRlYnVnIG1lc3NhZ2VzLiBEb24ndCBsZWFrIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwKLQkgIChnc3RfYXZpX2RlbXV4X2xvb3ApOgotCSAgTm8gbmVlZCB0byB0YWtlIHRoZSBTVFJFQU1fTE9DSyBpbiB0aGUgbG9vcCBmdW5jdGlvbi4gSW1wcm92ZQotCSAgc29tZSBkZWJ1ZyBtZXNzYWdlcy4gRG9uJ3QgbGVhayBwYWQgbmFtZXMgaW4gZGVidWcgbWVzc2FnZXMuCi0KLTIwMDUtMTEtMDcgMTA6Mjc6MDAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBEb24ndCBlcnJvciBvdXQgd2hlbiB0aGUgc291cmNlIHBhZCBpc24ndCBsaW5rZWQuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfdm9yYmlzX2NvZGVjX3ByaXZfZGF0YSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF93dnBrX2hlYWRlcik6Ci0JICBEb24ndCBlcnJvciBvdXQgd2hlbiB0aGUgc291cmNlIHBhZCBpc24ndCBsaW5rZWQuCi0KLTIwMDUtMTEtMDIgMTk6NDI6MzggKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGV4dC9nY29uZi86IEZpeCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zIGhlcmUgYXMgd2VsbCBhbmQgc2V0IGtpZCB0byBOVUxMIHN0YXRlIGJlZm9yZSByZW1vdmluZyBpdC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogKGRvX3RvZ2dsZV9lbGVtZW50KSwKLQkgIChnc3RfZ2NvbmZfYXVkaW9fc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZ2NvbmYvZ3N0Z2NvbmZ2aWRlb3NpbmsuYzogKGRvX3RvZ2dsZV9lbGVtZW50KSwKLQkgIChnc3RfZ2NvbmZfdmlkZW9fc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgRml4IHN0YXRlIGNoYW5nZSBmdW5jdGlvbnMgaGVyZSBhcyB3ZWxsIGFuZCBzZXQga2lkCi0JICB0byBOVUxMIHN0YXRlIGJlZm9yZSByZW1vdmluZyBpdC4KLQotMjAwNS0xMS0wMiAxNjo0ODo1NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JKiBjb21tb246Ci0JKiB0ZXN0cy9jaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOgotCSAgc2lnaCwgc3RhdGljIHBhZCB0ZW1wbGF0ZXMgYXJlbid0IHJlZmNvdW50ZWQgcHJvcGVybHkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgc2lnaCwgc3RhdGljIHBhZCB0ZW1wbGF0ZXMgYXJlbid0IHJlZmNvdW50ZWQgcHJvcGVybHkKLQotMjAwNS0xMS0wMSAxNjoxNDoyNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JKiBnc3QvbGV2ZWwvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA1LTExLTAxIDE1OjE1OjQ0ICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiBBZGRlZCBwcm9wZXIgZXZlbnQgaGFuZGxpbmQsIG1hZGUgZG93bnN0cmVhbSBuZXdzZWdtZW50IGV2ZW50IHVzZSBHU1RfRk9STUFUX0JZVEVTIChvdGhlcndpc2UuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiAoZ3N0X3dhdmVuY19zdG9wX2ZpbGUpLAotCSAgKGdzdF93YXZlbmNfaW5pdCksIChnc3Rfd2F2ZW5jX2V2ZW50KSwgKGdzdF93YXZlbmNfY2hhaW4pOgotCSAgQWRkZWQgcHJvcGVyIGV2ZW50IGhhbmRsaW5kLAotCSAgbWFkZSBkb3duc3RyZWFtIG5ld3NlZ21lbnQgZXZlbnQgdXNlIEdTVF9GT1JNQVRfQllURVMgKG90aGVyd2lzZSBpdCdzCi0JICBpZ25vcmVkKSwKLQkgIGFuZCBkb24ndCBzZXQgYSBkdXJhdGlvbiBvZiAwIGZvciBidWZmZXJzIG90aGVyd2lzZSB0aGV5IGFyZSBkaXNjYXJkZWQKLQkgIGJ5IEdzdEJhc2VTaW5rLgotCSAgR3N0V2F2RW5jIG5lZWRzIHNvbWUgc2VyaW91cyBsb3ZpbmcsIGFmdGVyIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgSSdtCi0JICByZWFsbHkgd29uZGVyaW5nIGhvdyB0aGlzIGNhbiBzdGF5IGluIC1nb29kIC4uLgotCi0yMDA1LTExLTAxIDE1OjExOjE2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgRml4IGxlYWtzIGFuZCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgYXMgcmVwb3J0ZWQgYnkgdmFsZ3JpbmQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9lbGVtZW50cy9tYXRyb3NrYW11eC5jOiAoc2V0dXBfc3JjX3BhZCksIChzZXR1cF9zaW5rX3BhZCksCi0JICAoc2V0dXBfbWF0cm9za2FtdXgpLCAoY2hlY2tfYnVmZmVyX2RhdGEpLCAoR1NUX1NUQVJUX1RFU1QpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X2ZpbmFsaXplKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X3Jlc2V0KSwgKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQpLCAoZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhKSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2NvbGxlY3RlZCk6Ci0JICBGaXggbGVha3MgYW5kIGludmFsaWQgbWVtb3J5IGFjY2VzcyBhcyByZXBvcnRlZCBieSB2YWxncmluZAotCi0yMDA1LTExLTAxIDE0OjQxOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmM6Ci0JICAuLi4gYW5kIGFkZCB0aGUgbWlzc2luZyBmaWxlCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIC4uLiBhbmQgYWRkIHRoZSBtaXNzaW5nIGZpbGUKLQotMjAwNS0xMS0wMSAxNDozNjowMiArMDAwMCAgTWljaGFsIEJlbmVzIDxtaWNoYWwuYmVuZXNAeGVyaXMuY3o+Ci0KLQkgIGFkZCBhIHVuaXQgdGVzdCBmb3IgbWF0cm9za2FtdXggZml4IHRoZSBidWdzIHRoYXQgdGhlIHVuaXQgdGVzdCBleHBvc2VkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFBhdGNoIGJ5OiBNaWNoYWwgQmVuZXMgPG1pY2hhbC5iZW5lc0B4ZXJpcy5jej4KLQkgICogY2hlY2svTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IChnc3RfZWJtbF93cml0ZV9zZWVrKToKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9oYW5kbGVfc3JjX2V2ZW50KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2F1ZGlvX3BhZF9zZXRjYXBzKSwgKGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQpOgotCSAgYWRkIGEgdW5pdCB0ZXN0IGZvciBtYXRyb3NrYW11eAotCSAgZml4IHRoZSBidWdzIHRoYXQgdGhlIHVuaXQgdGVzdCBleHBvc2VkCi0KLTIwMDUtMTEtMDEgMTQ6MzQ6MjIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgZml4IE1ha2VmaWxlLmFtCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBNYWtlZmlsZS5hbQotCi0yMDA1LTExLTAxIDEyOjM5OjE2ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXV0b2RldGVjdC86IEZpeCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gYW5kIHVzZSBHU1RfREVCVUdfRlVOQ1BUUiBpbiBjbGFzc19pbml0LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYzoKLQkgIChnc3RfYXV0b19hdWRpb19zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOgotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2F1dG9fdmlkZW9fc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgRml4IHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBhbmQgdXNlIEdTVF9ERUJVR19GVU5DUFRSIGluCi0JICBjbGFzc19pbml0LgotCi0yMDA1LTExLTAxIDEyOjM1OjM5ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvOiBTZXQgdGltZXN0YW1wcyBvbiBvdXRnb2luZyBlYm1sIGhlYWRlcnMgYXMgd2VsbCwgc28gdGhhdCB0aGUgZWxlbWVudCBhZnRlciBtYXRyb3NrYW11eCBjYW4gZ2V0IHRoZSB0aW0uLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzogKGdzdF9lYm1sX3dyaXRlX25ldyksCi0JICAoZ3N0X2VibWxfd3JpdGVfcmVzZXQpLCAoZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9uZXcpOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgU2V0IHRpbWVzdGFtcHMgb24gb3V0Z29pbmcgZWJtbCBoZWFkZXJzIGFzIHdlbGwsIHNvIHRoYXQgdGhlCi0JICBlbGVtZW50IGFmdGVyIG1hdHJvc2thbXV4IGNhbiBnZXQgdGhlIHRpbWVzdGFtcCBhbHJlYWR5IHdoZW4KLQkgIHJlYWRpbmcgdGhlIGZpcnN0IGVibWwgZWxlbWVudCBhbmQgZG9lc24ndCBoYXZlIHRvIHdhaXQgZm9yCi0JICB0aGUgYWN0dWFsIGRhdGEgYnVmZmVyIGZvciB0aGF0ICgjMzIwMzA4KS4KLQotMjAwNS0xMC0zMSAyMjowODo1MiArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6Ci0JICBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmMgKGdzdF92aWRlb21peGVyX3BhZF91bmxpbmspCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMzEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYyAoZ3N0X3ZpZGVvbWl4ZXJfcGFkX3VubGluaykKLQkgIChnc3RfdmlkZW9taXhlcl9wYWRfbGluayk6IEtpbGwgc29tZSBtZW1sZWFrcy4KLQkgIChnc3RfdmlkZW9taXhlcl9wYWRfZ2V0X3Byb3BlcnR5KTogU3R5bGUgZml4LgotCSAgKGdzdF92aWRlb21peGVyX3BhZF9zZXRfcHJvcGVydHkpOiBTdHlsZSBmaXguCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfcGFkX2luaXQpOiBTdHlsZSBmaXguCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfdXBkYXRlX3F1ZXVlcyk6IEtpbGwgbWVtbGVhay4KLQkgIChnc3RfdmlkZW9taXhlcl9sb29wKTogS2lsbCBtZW1sZWFrLgotCSAgKGdzdF92aWRlb21peGVyX2NvbGxlY3RlZCk6IEtpbGwgbWVtbGVhay4KLQotMjAwNS0xMC0zMSAxOTowODoyNyArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JICBKdXN0IHNvbWUgY2xlYW51cC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgSnVzdCBzb21lIGNsZWFudXAuCi0KLTIwMDUtMTAtMzEgMTQ6NDE6MzEgKzAwMDAgIEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotCSogQ2hhbmdlTG9nOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBBZGQgY2hlY2tzIHRvIEdTVF9GTE9XX05PVF9MSU5LRUQgZm9yIHZhbHVlcyByZXR1cm5lZCBmcm9tIGdzdF9wYWRfcHVzaC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQWRkIGNoZWNrcyB0byBHU1RfRkxPV19OT1RfTElOS0VEIGZvciB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBnc3RfcGFkX3B1c2guCi0KLTIwMDUtMTAtMzEgMTI6MDA6MTAgKzAwMDAgIFplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWRlcGF5LmM6Ci0JICBQYXlsb2FkZXIgbm93IHNldHMgc29tZSBkZWZhdWx0IGNhcHMgb24gdGhlIHNyY3BhZCBpZiBjYXBzIG9uIHRoZSBzaW5rcGFkIGFyZSBuZXZlciBzZXQuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB0aGUgZzcuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUGF5bG9hZGVyIG5vdyBzZXRzIHNvbWUgZGVmYXVsdCBjYXBzIG9uIHRoZSBzcmNwYWQgaWYgY2FwcyBvbiB0aGUgc2lua3BhZCBhcmUgbmV2ZXIgc2V0LiBUaGlzIGlzIGltcG9ydGFudCBmb3IgdGhlIGc3MTEgdG8gd29yayB3aXRoIGJ1cmdlcidzIHJ0cGJpbiBlbGVtZW50LgotCi0yMDA1LTEwLTI4IDE5OjE5OjQwICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSAgQWRkIGNoZWNrcyBmb3IgcmV0dXJuIHZhbHVlcyBmcm9tIGdzdF9wYWRfcHVzaCBhbmQgZ3N0X3BhZF9hbGxvY19idWZmZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEFkZCBjaGVja3MgZm9yIHJldHVybiB2YWx1ZXMgZnJvbSBnc3RfcGFkX3B1c2ggYW5kIGdzdF9wYWRfYWxsb2NfYnVmZmVyLgotCi0yMDA1LTEwLTI4IDE1OjMyOjQ4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvOiBBZGQgU2ltcGxlQmxvY2sgc3VwcG9ydCB0byBtYXRyb3NrYSBkZW11eGVyIGFuZCBtdXhlciAocGFydCBvZgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBSZXZpZXdlZCBieTogVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9pbml0X3N0cmVhbSksCi0JICAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZm8pLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY2x1c3Rlcik6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2luaXQpLCAoZ3N0X21hdHJvc2thX211eF9zdGFydCksCi0JICAoZ3N0X21hdHJvc2thX211eF9jcmVhdGVfYnVmZmVyX2hlYWRlciksCi0JICAoZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhKSwgKGdzdF9tYXRyb3NrYV9tdXhfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfbWF0cm9za2FfbXV4X2dldF9wcm9wZXJ0eSk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaDoKLQkgIEFkZCBTaW1wbGVCbG9jayBzdXBwb3J0IHRvIG1hdHJvc2thIGRlbXV4ZXIgYW5kIG11eGVyIChwYXJ0IG9mCi0JICBNYXRyb3NrYSB2MikuICgjMzE5NzMxKQotCi0yMDA1LTEwLTI4IDEzOjI0OjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvanBlZy9nc3RqcGVnZGVjLio6IENsZWFudXBzLiBEb24ndCBjcmVhdGUgY2FwcyBmb3IgZXZlcnkgY2hhaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdfZGVjX2luaXQpLCAoZ3N0X2pwZWdfZGVjX2NoYWluKSwKLQkgIChnc3RfanBlZ19kZWNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAgQ2xlYW51cHMuIERvbid0IGNyZWF0ZSBjYXBzIGZvciBldmVyeSBjaGFpbi4KLQotMjAwNS0xMC0yNyAxODo0NjozMiArMDAwMCAgRmxhdmlvIE9saXZlaXJhIDxmbGF2aW8ub2xpdmVpcmFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzoKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuaDoKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5oOgotCSAgRml4IHRvIHNldCB0aW1lc3RhbXAgb24gYnVmZmVyLCBpdCB3YXMgdGVzdGVkIHdpdGggUlRQIEc3MTEgZWxlbWVudHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEZpeCB0byBzZXQgdGltZXN0YW1wIG9uIGJ1ZmZlciwgaXQgd2FzIHRlc3RlZCB3aXRoIFJUUCBHNzExIGVsZW1lbnRzLgotCi0yMDA1LTEwLTI3IDExOjI3OjUzICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6IFJlbW92ZSBnb3RfcmVkaXJlY3QgZnJvbSBjbGFzcyBzdHJ1Y3R1cmUgYXMgd2VsbC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBSZW1vdmUgZ290X3JlZGlyZWN0IGZyb20gY2xhc3Mgc3RydWN0dXJlIGFzIHdlbGwuCi0KLTIwMDUtMTAtMjcgMTE6MjU6MTkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogUmVtb3ZlICdnb3QtcmVkaXJlY3QnIHNpZ25hbCBhbmQgcG9zdCBlbGVtZW50IG1lc3NhZ2Ugb24gdGhlIGJ1cyBpbnN0ZWFkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2NsYXNzX2luaXQpLAotCSAgKHF0ZGVtdXhfcGFyc2VfdHJlZSk6Ci0JICBSZW1vdmUgJ2dvdC1yZWRpcmVjdCcgc2lnbmFsIGFuZCBwb3N0IGVsZW1lbnQgbWVzc2FnZQotCSAgb24gdGhlIGJ1cyBpbnN0ZWFkLgotCi0yMDA1LTEwLTI3IDExOjAwOjQwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvb3NzL2dzdG9zc3NyYy5jOiBTZXQgY29ycmVjdCBmb3JtYXQgb24gb3NzIGluc3RlYWQgb2YgYSBzaWxseSB2YWx1ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NyYy5jOiAoZ3N0X29zc19zcmNfcHJlcGFyZSk6Ci0JICBTZXQgY29ycmVjdCBmb3JtYXQgb24gb3NzIGluc3RlYWQgb2YgYSBzaWxseSB2YWx1ZS4KLQotMjAwNS0xMC0yNyAwOTo1MjowOCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBVc2UgbGlib2lsIGZvcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF9jbGFzc19pbml0KSwKLQkgIChnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9jYXBzKSwgKGdzdF92aWRlb19ib3hfc2V0X2NhcHMpLAotCSAgKGdzdF92aWRlb19ib3hfZ2V0X3VuaXRfc2l6ZSksIChnc3RfdmlkZW9fYm94X2NvcHlfcGxhbmVfaTQyMCksCi0JICAoZ3N0X3ZpZGVvX2JveF9pNDIwKSwgKGdzdF92aWRlb19ib3hfYXl1dik6IFVzZSBsaWJvaWwgZm9yCi0JICBJNDIwIHJlbmRlcmluZyBhcyB3ZWxsLCBkb2Vzbid0IGJyaW5nIG11Y2ggZm9yIG15IHBsYXRmb3JtLgotCSAgTWlnaHQgaGVscCBvbiBzb21lIG90aGVyIHBsYXRmb3Jtcy4KLQotMjAwNS0xMC0yNiAyMTo0NzozNiArMDAwMCAgWmVlc2hhbiBBbGkgPHplZW5peEBnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBhcnNlLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSAgRGVjbGFyaW5nIHRoZSBwYWR0ZW1wbGF0ZSBjb3JyZWN0bHkuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIERlY2xhcmluZyB0aGUgcGFkdGVtcGxhdGUgY29ycmVjdGx5LgotCi0yMDA1LTEwLTI2IDIwOjI4OjMyICswMDAwICBaZWVzaGFuIEFsaSA8emVlbml4QGdtYWlsLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBhcnNlLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSAgU2V0dGluZyB0aGUgcHJvcGVyIGNvcHlyaWdodCBub3RpY2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNldHRpbmcgdGhlIHByb3BlciBjb3B5cmlnaHQgbm90aWNlLgotCi0yMDA1LTEwLTI2IDE3OjIzOjA2ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmFtOiBVc2UgbGlib2lsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI2ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC92aWRlb2JveC9NYWtlZmlsZS5hbTogVXNlIGxpYm9pbC4KLQkgICogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IChnc3RfdmlkZW9fYm94X2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb19ib3hfc2V0X3Byb3BlcnR5KSwgKGdzdF92aWRlb19ib3hfdHJhbnNmb3JtX2NhcHMpLAotCSAgKGdzdF92aWRlb19ib3hfc2V0X2NhcHMpLCAoZ3N0X3ZpZGVvX2JveF9nZXRfdW5pdF9zaXplKSwKLQkgIChnc3RfdmlkZW9fYm94X2F5dXYpOiBMb3Qgb2Ygb3B0aW1pemF0aW9uIGluIEFZVVYgcmVuZGVyaW5nCi0JICB1c2luZyBsaWJvaWwuIFdpbGwgZG90IHRoZSBzYW1lIHRvIEk0MjAgYm9yZGVyIGdlbmVyYXRpb24KLQkgIHRvbW9ycm93LgotCi0yMDA1LTEwLTI2IDE2OjM2OjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkgIGZpeCBhdXRvbWFrZSB3YXJuaW5ncwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYXV0b21ha2Ugd2FybmluZ3MKLQotMjAwNS0xMC0yNiAxNDo1MDo1OSArMDAwMCAgWmVlc2hhbiBBbGkgPHplZW5peEBnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVjLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkgIEhhY2tlZCB0aGUgRzcxMSAoZGUpcGF5bG9hZGVyIHRvIHRyeSB0byBtYWtlIHRoaW5ncyByaWdodC4gcnRwZzcxMWRlYyBub3cgaW5oZXJpdHMgZnJvbSB0aGUgYmFzZXJ0cGRlcGF5bG9hZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBIYWNrZWQgdGhlIEc3MTEgKGRlKXBheWxvYWRlciB0byB0cnkgdG8gbWFrZSB0aGluZ3MgcmlnaHQuIHJ0cGc3MTFkZWMgbm93IGluaGVyaXRzIGZyb20gdGhlIGJhc2VydHBkZXBheWxvYWRlci4KLQotMjAwNS0xMC0yNiAxNDoyMzo0NSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBSZW1vdmluZyB0aGlzIGZvcmdvdHRlbiBkZWJ1Zy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0yNiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fY2FwcyksIChnc3RfdmlkZW9fYm94X2dldF91bml0X3NpemUpLAotCSAgKGdzdF92aWRlb19ib3hfYXl1dik6IFJlbW92aW5nIHRoaXMgZm9yZ290dGVuIGRlYnVnLgotCi0yMDA1LTEwLTI2IDE0OjA4OjQ5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IEZpeCB0aGUgc3RyaWRlIGlzc3VlIHdoZW4gYm94aW5nIHRvIEFZVVYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMjYgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IChnc3RfdmlkZW9fYm94X2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb19ib3hfdHJhbnNmb3JtX2NhcHMpLCAoZ3N0X3ZpZGVvX2JveF9nZXRfdW5pdF9zaXplKSwKLQkgIChnc3RfdmlkZW9fYm94X2F5dXYpOiBGaXggdGhlIHN0cmlkZSBpc3N1ZSB3aGVuIGJveGluZyB0byBBWVVWLgotCi0yMDA1LTEwLTI2IDExOjEyOjM0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvb3NzLzogQWN0dWFsbHkgdXNlIHRoZSAnb3NzJyBkZWJ1ZyBjYXRlZ29yeSB3ZSByZWdpc3Rlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBzeXMvb3NzL2dzdG9zc2F1ZGlvLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzZG1hYnVmZmVyLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzaGVscGVyLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3NzbWl4ZXIuYzoKLQkgICogc3lzL29zcy9nc3Rvc3NtaXhlcmVsZW1lbnQuYzoKLQkgICogc3lzL29zcy9nc3Rvc3NtaXhlcnRyYWNrLmM6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSAgQWN0dWFsbHkgdXNlIHRoZSAnb3NzJyBkZWJ1ZyBjYXRlZ29yeSB3ZSByZWdpc3Rlci4KLQotMjAwNS0xMC0yNiAxMDozODoxOCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogVXNlIGdzdF9wYWRfZ2V0X3BhcmVudCBhbmQgZHJvcCB0aGUgcmVmIHRoYXQgd2FzIGFkZGVkIHRocm91Z2ggdGhhdCBjYWxsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI2ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzoKLQkgIChnc3RfdmlkZW9taXhlcl9wYWRfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfdmlkZW9taXhlcl9wYWRfc2lua19zZXRjYXBzKSwgKGdzdF92aWRlb21peGVyX2dldGNhcHMpOgotCSAgVXNlIGdzdF9wYWRfZ2V0X3BhcmVudCBhbmQgZHJvcCB0aGUgcmVmIHRoYXQgd2FzIGFkZGVkIHRocm91Z2gKLQkgIHRoYXQgY2FsbC4KLQotMjAwNS0xMC0yNiAxMDowMzowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5jOgotCSAgZml4IGNvbXBpbGF0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBjb21waWxhdGlvbgotCi0yMDA1LTEwLTI1IDIxOjA5OjM2ICswMDAwICBGbGF2aW8gT2xpdmVpcmEgPGZsYXZpby5vbGl2ZWlyYUBpbmR0Lm9yZy5icj4KLQotCSogQ2hhbmdlTG9nOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFkZXBheS5jOgotCSAgSnVzdCByZW1vdmVkIGEgY291cGxlIG9mIGxpbmVzIG9mIHdlaXJkIGNvZGUgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQvdGVzdCB0aW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBKdXN0IHJlbW92ZWQgYSBjb3VwbGUgb2YgbGluZXMgb2Ygd2VpcmQgY29kZSB1c2VkIGR1cmluZyBkZXZlbG9wbWVudC90ZXN0IHRpbWUuCi0KLTIwMDUtMTAtMjUgMTk6MTk6MzggKzAwMDAgIEZsYXZpbyBPbGl2ZWlyYSA8ZmxhdmlvLm9saXZlaXJhQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVjLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMWVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnNzExZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGc3MTFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZzcxMXBheS5oOgotCSAgRzcxMSBwYXlsb2FkZXIgYW5kIGRlcGF5bG9hZGVyIGNyZWF0ZWQgYnkgRWRnYXJkIExpbWEgKGl0IHN1cHBvcnRzIG11bGF3IGFuZCBhbGF3IChkZWMpZW5jb2RlcnMpCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIEc3MTEgcGF5bG9hZGVyIGFuZCBkZXBheWxvYWRlciBjcmVhdGVkIGJ5IEVkZ2FyZCBMaW1hIChpdCBzdXBwb3J0cwotCSAgbXVsYXcgYW5kIGFsYXcgKGRlYyllbmNvZGVycykKLQotMjAwNS0xMC0yNSAxNzo1NToxOSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBEb2ggISBJIGludHJvZHVjZWQgd2luZ28ncyBidWcgYWdhaW4gISBTb3JyeS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF9jbGFzc19pbml0KSwKLQkgIChnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9jYXBzKSwgKGdzdF92aWRlb19ib3hfZ2V0X3VuaXRfc2l6ZSk6Ci0JICBEb2ggISBJIGludHJvZHVjZWQgd2luZ28ncyBidWcgYWdhaW4gISBTb3JyeS4uLgotCi0yMDA1LTEwLTI1IDE2OjAyOjM4ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICBhZGQgbWlzc2luZyBoZWFkZXIgZmlsZXMgZm9yIGRpc3RpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIG1pc3NpbmcgaGVhZGVyIGZpbGVzIGZvciBkaXN0aW5nCi0KLTIwMDUtMTAtMjUgMTU6MDc6MDIgKzAwMDAgIFplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21lbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGFyc2UuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGFyc2UuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbXBheS5oOgotCSAgR2V0dGluZyB0aGUgR1NNIChkZSlwYXlsb2FkZXIgd29ya2luZyBhbmQgY29tcGF0aWJsZSB3aXRoIG91ciBwbGFucyBmb3IgUlRQLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBHZXR0aW5nIHRoZSBHU00gKGRlKXBheWxvYWRlciB3b3JraW5nIGFuZCBjb21wYXRpYmxlIHdpdGggb3VyIHBsYW5zIGZvciBSVFAuCi0KLTIwMDUtMTAtMjUgMTM6MDM6MDQgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0L3J0cC9nc3RydHAuYzoKLQkgIGZpeCBtaXN0YWtlbiBjbGFpbSBvbiBHUEwsIGl0cyBMR1BMCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBtaXN0YWtlbiBjbGFpbSBvbiBHUEwsIGl0cyBMR1BMCi0KLTIwMDUtMTAtMjUgMTA6NDc6MDkgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiBQdXNoIGEgbmV3c2VnbWVudCBldmVudCwgbW92ZSBzb21lIHJlZHVuZGFudCBjb2RlIGluIGEgc2luZ2xlIHBsYWNlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6ICh1c2VyX2luZm9fY2FsbGJhY2spLAotCSAgKGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCksIChnc3RfcG5nZGVjX3Rhc2spOiBQdXNoCi0JICBhIG5ld3NlZ21lbnQgZXZlbnQsIG1vdmUgc29tZSByZWR1bmRhbnQgY29kZSBpbiBhIHNpbmdsZSBwbGFjZS4KLQotMjAwNS0xMC0yNSAxMDoyMzoyNiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IFRlbXBvcmFyeSBoYWNrIHRvIGdldCBjb3JyZWN0IGNvbG9ycyBvcmRlciB3aGVuIHdlIGhhdmUgYSBwbmcgaW1hZ2Ugd2l0aCBhbHBoYSBjaGFubmVsLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTI1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6ICh1c2VyX2luZm9fY2FsbGJhY2spLAotCSAgKGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCksIChnc3RfcG5nZGVjX3Rhc2spOiBUZW1wb3JhcnkKLQkgIGhhY2sgdG8gZ2V0IGNvcnJlY3QgY29sb3JzIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHBuZyBpbWFnZSB3aXRoCi0JICBhbHBoYSBjaGFubmVsLgotCi0yMDA1LTEwLTI0IDE3OjI5OjAyICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvZHYvZ3N0ZHZkZW11eC5jOiBDYWxsIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyB3aGVuIHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBwYWRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9hZGRfcGFkcyk6Ci0JICBDYWxsIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyB3aGVuIHRoZXJlIHdpbGwgYmUgbm8gbW9yZSBwYWRzLgotCi0yMDA1LTEwLTI0IDE2OjM5OjM4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogQWRkZWQgdHdvIG5ldyBwYXlsb2FkZXJzLCBhbiBSRkMgMjE5MCBwYXlsb2FkZXIgZm9yIGgyNjMgYW5kIGEgcGF5bG9hZCBjb252ZXJ0b3IgZm9yIGFuIGFzdGVyaXNrIHNlcnZlci4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jOiAoZ3N0X2FzdGVyaXNraDI2M19nZXRfdHlwZSksCi0JICAoZ3N0X2FzdGVyaXNraDI2M19iYXNlX2luaXQpLCAoZ3N0X2FzdGVyaXNraDI2M19jbGFzc19pbml0KSwKLQkgIChnc3RfYXN0ZXJpc2toMjYzX2luaXQpLCAoZ3N0X2FzdGVyaXNraDI2M19maW5hbGl6ZSksCi0JICAoZ3N0X2FzdGVyaXNraDI2M19jaGFpbiksIChnc3RfYXN0ZXJpc2toMjYzX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2FzdGVyaXNraDI2M19nZXRfcHJvcGVydHkpLCAoZ3N0X2FzdGVyaXNraDI2M19jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9hc3Rlcmlza2gyNjNfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdGFzdGVyaXNraDI2My5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNlbmMuYzogKGdzdF9ydHBoMjYzZW5jX2dldF90eXBlKSwKLQkgIChnc3RfcnRwaDI2M2VuY19iYXNlX2luaXQpLCAoZ3N0X3J0cGgyNjNlbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cGgyNjNlbmNfaW5pdCksIChnc3RfcnRwaDI2M2VuY19maW5hbGl6ZSksCi0JICAoZ3N0X3J0cGgyNjNlbmNfc2V0Y2FwcyksIChnc3RfcnRwaDI2M2VuY19nb2JmaW5lciksCi0JICAoZ3N0X3J0cGgyNjNlbmNfZmx1c2gpLCAoZ3N0X3J0cGgyNjNlbmNfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cGgyNjNlbmNfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cGgyNjNlbmMuaDoKLQkgIEFkZGVkIHR3byBuZXcgcGF5bG9hZGVycywgYW4gUkZDIDIxOTAgcGF5bG9hZGVyIGZvciBoMjYzIGFuZAotCSAgYSBwYXlsb2FkIGNvbnZlcnRvciBmb3IgYW4gYXN0ZXJpc2sgc2VydmVyLgotCi0yMDA1LTEwLTI0IDE1OjU3OjE3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBzeXMvb3NzL2dzdG9zc3NyYy5jOiBTZXQgYnl0ZXNfcGVyX3NhbXBsZSBjb3JyZWN0bHkgKGlzIG5vdCBhbHdheXMgNCwgYnV0IGRlcGVuZHMgb24gd2lkdGggYW5kIG51bWJlciBvZiBjaGFubmVscykuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogc3lzL29zcy9nc3Rvc3NzcmMuYzogKGdzdF9vc3Nfc3JjX3ByZXBhcmUpOgotCSAgU2V0IGJ5dGVzX3Blcl9zYW1wbGUgY29ycmVjdGx5IChpcyBub3QgYWx3YXlzIDQsIGJ1dAotCSAgZGVwZW5kcyBvbiB3aWR0aCBhbmQgbnVtYmVyIG9mIGNoYW5uZWxzKS4KLQotMjAwNS0xMC0yNCAxNTo1MDowNiArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2VuYy4qOiBGaXggc2Vla2luZywgc28gdGhhdCBmbGFjZW5jIGNhbiByZXdyaXRlIHRoZSBoZWFkZXIgd2l0aCB0aGUgY29ycmVjdCBkdXJhdGlvbiBhbmQgYW1vdW50IG9mIHNhLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jOiAoZ3N0X2ZsYWNlbmNfYmFzZV9pbml0KSwKLQkgIChnc3RfZmxhY2VuY19pbml0KSwgKGdzdF9mbGFjZW5jX3Npbmtfc2V0Y2FwcyksCi0JICAoZ3N0X2ZsYWNlbmNfc2Vla19jYWxsYmFjayksIChnc3RfZmxhY2VuY193cml0ZV9jYWxsYmFjayksCi0JICAoZ3N0X2ZsYWNlbmNfc2lua19ldmVudCksIChnc3RfZmxhY2VuY19jaGFpbiksCi0JICAoZ3N0X2ZsYWNlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9mbGFjZW5jX2dldF9wcm9wZXJ0eSksCi0JICAoZ3N0X2ZsYWNlbmNfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgRml4IHNlZWtpbmcsIHNvIHRoYXQgZmxhY2VuYyBjYW4gcmV3cml0ZSB0aGUgaGVhZGVyIHdpdGggdGhlCi0JICBjb3JyZWN0IGR1cmF0aW9uIGFuZCBhbW91bnQgb2Ygc2FtcGxlcyBhbmQgYWxsIHRoYXQgYXQgRU9TOwotCSAgYWxzbyBzZXQgdGltZXN0YW1wcyBhbmQgZ3JhbnVsZXBvcyBvbiBvdXRnb2luZyBidWZmZXJzOyBhZGQKLQkgIGRlYnVnIGNhdGVnb3J5OyBmaXggc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLgotCi0yMDA1LTEwLTI0IDEzOjQ2OjA5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBEb24ndCByZXN0cmljdCB2aWRlbyBnZW9tZXRyeSBmcm9tIDE2IHRvIDQwOTYuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMjQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiBEb24ndCByZXN0cmljdCB2aWRlbyBnZW9tZXRyeQotCSAgZnJvbSAxNiB0byA0MDk2LgotCi0yMDA1LTEwLTI0IDEzOjIyOjE0ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IEZpeCBjYXBzIG5lZ290aWF0aW9uIGNvcnJlY3RseSwgYWRkIGRlYnVnZ2luZyBjYXRlZ29yeS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0yNCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fY2FwcyksIChnc3RfdmlkZW9fYm94X2dldF91bml0X3NpemUpOgotCSAgRml4IGNhcHMgbmVnb3RpYXRpb24gY29ycmVjdGx5LCBhZGQgZGVidWdnaW5nIGNhdGVnb3J5LgotCi0yMDA1LTEwLTI0IDEzOjAyOjQ3ICswMDAwICBDaHJpc3RpYW4gU2NoYWxsZXIgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHBvcnQgb3ZlciBwbHVnaW4gbGlzdGluZyBmcm9tIGJhc2UKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgcG9ydCBvdmVyIHBsdWdpbiBsaXN0aW5nIGZyb20gYmFzZQotCi0yMDA1LTEwLTI0IDA4OjU5OjI0ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogRG9uJ3QgdXNlIGZpeGVkIGNhcHMgb24gYSBzaW5rIHBhZC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0yNCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY19pbml0KTogRG9uJ3QgdXNlIGZpeGVkCi0JICBjYXBzIG9uCi0JICBhIHNpbmsgcGFkLgotCi0yMDA1LTEwLTIzIDIzOjA1OjU5ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy91cGxvYWQubWFrOgotCSAgYmFjayB0byBIRUFECi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gSEVBRAotCi09PT0gcmVsZWFzZSAwLjkuNCA9PT0KLQotMjAwNS0xMC0yMyAyMjo0MzowOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFsczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXBhcnNlLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVidWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR2LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1lZmVuY2UueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZseGRlYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2NvbmZlbGVtZW50cy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tanBlZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVuYy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIHJlbGVhc2luZyAwLjkuNAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZWxlYXNpbmcgMC45LjQKLQotMjAwNS0xMC0yMyAxMTowNzoxMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgU1RPUFBFRC0+RkFJTEVECi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIFNUT1BQRUQtPkZBSUxFRAotCi0yMDA1LTEwLTIxIDE3OjAwOjU4ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogQWRkIHBvc2l0aW9uIGFuZCBkdXJhdGlvbiBxdWVyeSwgZml4IHF1ZXJ5IHR5cGUgZnVuY3Rpb24uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IChnc3Rfc3BlZXhlbmNfZ2V0X3F1ZXJ5X3R5cGVzKSwKLQkgIChnc3Rfc3BlZXhlbmNfc3JjX3F1ZXJ5KToKLQkgIEFkZCBwb3NpdGlvbiBhbmQgZHVyYXRpb24gcXVlcnksIGZpeCBxdWVyeSB0eXBlIGZ1bmN0aW9uLgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2FwcyksIChnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBMZXQncyBub3Qgc2V0IG5vbi1maXhlZCBjYXBzIG9uIHNvdXJjZSBwYWRzLgotCi0yMDA1LTEwLTIxIDE2OjE1OjU3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBTZXQgY29ycmVjdCBzdHJlYW1fdGltZSBpbiBuZXdzZWdtZW50IGV2ZW50LiBhdmkgY2FuIGFsc28gaGFuZGxlIGEgZHVyYXRpb24gcXVlcnkgbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9kdi9nc3RkdmRlbXV4LmM6IChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSk6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfZ2V0X3NyY19xdWVyeV90eXBlcyksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vlayk6Ci0JICBTZXQgY29ycmVjdCBzdHJlYW1fdGltZSBpbiBuZXdzZWdtZW50IGV2ZW50LgotCSAgYXZpIGNhbiBhbHNvIGhhbmRsZSBhIGR1cmF0aW9uIHF1ZXJ5IG5vdy4KLQotMjAwNS0xMC0yMSAxMDowNjo0MCArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICB1cGRhdGUgZm9yIGxhdGVzdCBhZGRpdGlvbnMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgdXBkYXRlIGZvciBsYXRlc3QgYWRkaXRpb25zCi0KLTIwMDUtMTAtMjAgMTk6MTQ6MjcgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiBGaXggZHVyYXRpb24gcXVlcnk7IGZpeCBiYXNldGltZSBpbiBuZXdzZWdtZW50IGV2ZW50IGFmdGVyIHNlZWs7IGZpeCBkdXJhdGlvbiBpbiBpbml0aS4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQpLAotCSAgKGdzdF9tYXRyb3NrYV9kZW11eF9sb29wX3N0cmVhbV9wYXJzZV9pZCk6Ci0JICBGaXggZHVyYXRpb24gcXVlcnk7IGZpeCBiYXNldGltZSBpbiBuZXdzZWdtZW50IGV2ZW50IGFmdGVyCi0JICBzZWVrOyBmaXggZHVyYXRpb24gaW4gaW5pdGlhbCBuZXdzZWdtZW50IGV2ZW50LgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JICAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfc2V0Y2FwcyksIChnc3RfbWF0cm9za2FfbXV4X3N0YXJ0KToKLQkgIEV4dHJhY3QgbnVtYmVyIG9mIGNoYW5uZWxzIGFuZCBzYW1wbGVyYXRlIGZyb20gdm9yYmlzIGhlYWRlcnM7Ci0JICBhZGQgc29tZSBkZWJ1ZyBtZXNzYWdlcyB3aGVuIHF1ZXJ5aW5nIHRoZSBkdXJhdGlvbnMgb2YgdGhlCi0JICBpbnB1dCBzdHJlYW1zLgotCi0yMDA1LTEwLTIwIDExOjUwOjUzICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogU2V0IHN0cmVhbSB0aW1lIGNvcnJlY3RseSBpbiBuZXdzZWdtZW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2hhbmRsZV9zZWVrKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKSwKLQkgIChnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQpLCAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCk6Ci0JICBTZXQgc3RyZWFtIHRpbWUgY29ycmVjdGx5IGluIG5ld3NlZ21lbnQuCi0KLTIwMDUtMTAtMjAgMTE6Mzk6NDAgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogQ29ycmVjdGx5IGZpbGwgaW4gdGhlIHN0cmVhbSB0aW1lLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspOgotCSAgQ29ycmVjdGx5IGZpbGwgaW4gdGhlIHN0cmVhbSB0aW1lLgotCi0yMDA1LTEwLTE5IDIwOjQ4OjI0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY2hlY2svZWxlbWVudHMvbGV2ZWwuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSogZ3N0L2xldmVsL2xldmVsLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICB1c2UgRUxFTUVOVCBtZXNzYWdlcyBpbnN0ZWFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHVzZSBFTEVNRU5UIG1lc3NhZ2VzIGluc3RlYWQKLQotMjAwNS0xMC0xOSAxNTo1ODowMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0LzogQVBJIGNoYW5nZSBmaXguCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfZ2V0X3NyY19xdWVyeV90eXBlcyksCi0JICAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICAqIGdzdC9zcGVlZC9nc3RzcGVlZC5jOiAoc3BlZWRfZ2V0X3F1ZXJ5X3R5cGVzKSwgKHNwZWVkX3NyY19xdWVyeSk6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYzogKGdzdF90dGFfcGFyc2Vfc3JjX2V2ZW50KSwKLQkgIChnc3RfdHRhX3BhcnNlX2dldF9xdWVyeV90eXBlcyksIChnc3RfdHRhX3BhcnNlX3F1ZXJ5KToKLQkgIEFQSSBjaGFuZ2UgZml4LgotCi0yMDA1LTEwLTE5IDE1OjU3OjA0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBBUEkgY2hhbmdlIGZpeC4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfZ2V0X3NyY19xdWVyeV90eXBlcyksCi0JICAoZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5KToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNkZWNfbGVuZ3RoKSwKLQkgIChnc3RfZmxhY2RlY19zcmNfcXVlcnkpOgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfcXVlcnkpOgotCSAgKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKHNwZWV4X2RlY19zcmNfcXVlcnkpOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpOgotCSAgKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5jOiAoZ3N0X25hdnNlZWtfc2Vlayk6Ci0JICAqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5jOiAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9yZXBvcnQpOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX2dldF9sZW5ndGgpOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQpOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9oYW5kbGVfc2VlayksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksCi0JICAoZ3N0X3dhdnBhcnNlX3BhZF9jb252ZXJ0KSwgKGdzdF93YXZwYXJzZV9wYWRfcXVlcnkpLAotCSAgKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpOgotCSAgQVBJIGNoYW5nZSBmaXguCi0KLTIwMDUtMTAtMTkgMTA6NTc6NDYgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9nb29tLzogTWFrZSBpbmxpbmUgZnVuY3Rpb25zIGVpdGhlciAnc3RhdGljIGlubGluZScgb3IgJ2V4dGVybiBpbmxpbmUnLCBvdGhlcndpc2UgdGhlIEZvcnRlIGNvbXBpbGVyIGFwcGFyZW50bHkgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9nb29tL2ZpbHRlcnMuYzoKLQkgICogZ3N0L2dvb20vZ3JhcGhpYy5oOgotCSAgKiBnc3QvZ29vbS9saW5lcy5jOgotCSAgTWFrZSBpbmxpbmUgZnVuY3Rpb25zIGVpdGhlciAnc3RhdGljIGlubGluZScgb3IgJ2V4dGVybiBpbmxpbmUnLAotCSAgb3RoZXJ3aXNlIHRoZSBGb3J0ZSBjb21waWxlciBhcHBhcmVudGx5IHdvbid0IGlubGluZSB0aGVtICgjMzE3MzAwKS4KLQotMjAwNS0xMC0xOCAyMjo1MDoxMSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IGZvcmdvdCB0aGUgYnVmZmVyIHVucmVmIGluIHB1bGwuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTkgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogZm9yZ290IHRoZSBidWZmZXIgdW5yZWYgaW4gcHVsbC4KLQotMjAwNS0xMC0xOCAyMjo0NDoxMSArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGV4dC9saWJwbmcvZ3N0cG5nZGVjLio6IENvbXBsZXRlIHJld3JpdGUgb2YgcG5nZGVjLiBJdCdzIG5vdyB2ZXJ5IG5pY2UgYW5kIGhhbmRsZSBwdXNoL3B1bGwgYmFzZWQgbW9kZWwuIGlmIHlvdSBoYXZlIC4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTE5ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IChnc3RfcG5nZGVjX2NsYXNzX2luaXQpLAotCSAgKGdzdF9wbmdkZWNfaW5pdCksICh1c2VyX2Vycm9yX2ZuKSwgKHVzZXJfd2FybmluZ19mbiksCi0JICAodXNlcl9pbmZvX2NhbGxiYWNrKSwgKHVzZXJfZW5kcm93X2NhbGxiYWNrKSwKLQkgICh1c2VyX2VuZF9jYWxsYmFjayksCi0JICAodXNlcl9yZWFkX2RhdGEpLCAoZ3N0X3BuZ2RlY19jYXBzX2NyZWF0ZV9hbmRfc2V0KSwKLQkgIChnc3RfcG5nZGVjX3Rhc2spLCAoZ3N0X3BuZ2RlY19jaGFpbiksIChnc3RfcG5nZGVjX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9wbmdkZWNfbGlicG5nX2NsZWFyKSwgKGdzdF9wbmdkZWNfbGlicG5nX2luaXQpLAotCSAgKGdzdF9wbmdkZWNfY2hhbmdlX3N0YXRlKSwgKGdzdF9wbmdkZWNfc2lua19hY3RpdmF0ZV9wdXNoKSwKLQkgIChnc3RfcG5nZGVjX3NpbmtfYWN0aXZhdGVfcHVsbCksIChnc3RfcG5nZGVjX3NpbmtfYWN0aXZhdGUpOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5oOiBDb21wbGV0ZSByZXdyaXRlIG9mIHBuZ2RlYy4gSXQncyBub3cKLQkgIHZlcnkgbmljZSBhbmQgaGFuZGxlIHB1c2gvcHVsbCBiYXNlZCBtb2RlbC4gaWYgeW91IGhhdmUgZmlsZXNyYwotCSAgY29ubmVjdGVkIHRvIGl0LCBpdCB3aWxsIGRvIHJhbmRvbSBhY2Nlc3MgdG8gbG9hZCB0aGUgcG5nIGZpbGUuCi0JICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgc291cmNlIHRoYXQgY2FuJ3QgZG8gX2dldHJhbmdlLCBpdCBkb2VzCi0JICBwcm9ncmVzc2l2ZSBsb2FkaW5nIHRocm91Z2ggdGhlIGNoYWluIGZ1bmN0aW9uLgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiAoZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzKSwKLQkgICh0cmFuc2Zvcm1fcmdiKSwgKHRyYW5zZm9ybV9iZ3IpOiBGaXggY2FwcyBuZWdvdGlhdGlvbiBjb3JyZWN0bHkKLQkgIHRoYW5rcyB0byBNYXN0ZXIgV2ltIFRheW1hbnMgOy0pCi0KLTIwMDUtMTAtMTggMTg6MTI6MzEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9tYXRyb3NrYS86IFBvcnRlZCBtYXRyb3NrYSBkZW11eGVyIHRvIDAuOS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkgICogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS5jOiAocGx1Z2luX2luaXQpOgotCSAgUG9ydGVkIG1hdHJvc2thIGRlbXV4ZXIgdG8gMC45LgotCi0yMDA1LTEwLTE4IDE4OjA2OjE0ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IEZpeCBtcGVnNCBpbnB1dCBoYW5kbGluZyAoIzMxODg0Nyk7IGFsc28sIHdoaWxlIHdlJ3JlIGF0IGl0LCBmaXggbWVkaWEgdHlwZSBmb3IgTW90aW9uLUouLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOgotCSAgKGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHMpLAotCSAgKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHMpOgotCSAgRml4IG1wZWc0IGlucHV0IGhhbmRsaW5nICgjMzE4ODQ3KTsgYWxzbywgd2hpbGUgd2UncmUgYXQgaXQsCi0JICBmaXggbWVkaWEgdHlwZSBmb3IgTW90aW9uLUpQRUc6IHNob3VsZCBiZSBpbWFnZS9qcGVnLgotCi0yMDA1LTEwLTE4IDEzOjIxOjE4ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogRml4IGZvciBzZWdtZW50LXN0YXJ0L3N0b3AgQVBJIGNoYW5nZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9oYW5kbGVfc2VlayksCi0JICAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksCi0JICAoZ3N0X3dhdnBhcnNlX3BhZF9jb252ZXJ0KSwgKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpOgotCSAgRml4IGZvciBzZWdtZW50LXN0YXJ0L3N0b3AgQVBJIGNoYW5nZS4KLQotMjAwNS0xMC0xNyAxNzoxODo1NiArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6IEhhbmRsZSBjYXBzIG5lZ290aWF0aW9uIGluIGEgYmV0dGVyIHdheS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xNyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jOiAoZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzKSwKLQkgICh0cmFuc2Zvcm1fcmdiKSwgKHRyYW5zZm9ybV9iZ3IpOiBIYW5kbGUgY2FwcyBuZWdvdGlhdGlvbiBpbiBhCi0JICBiZXR0ZXIKLQkgIHdheS4KLQotMjAwNS0xMC0xNyAxNjo1OToyMCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBGaXggY2FwcyBuZWdvIHNvbWUgbW9yZSB0byBnZXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xNyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfdHJhbnNmb3JtX2NhcHMpLAotCSAgKGdzdF92aWRlb19ib3hfZ2V0X3VuaXRfc2l6ZSk6IEZpeCBjYXBzIG5lZ28gc29tZSBtb3JlIHRvIGdldAotCSAgQVlVVgotCSAgb3V0cHV0IGRlY2xhcmVkIGluIHRyYW5zZm9ybV9jYXBzLgotCi0yMDA1LTEwLTE3IDE1OjIzOjI0ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogV2UgdXNlIGZpeGVkIGNhcHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfaW5pdCk6IFdlIHVzZSBmaXhlZCBjYXBzLgotCi0yMDA1LTEwLTE3IDE1OjE0OjI5ICswMDAwICBKdWxpZW4gTW91dHRlIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSAgZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IEZpeCB3cm9uZyBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaW1wbGVtZW50IGdldF91bml0X3NpemUgY29ycmVjdGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTE3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fY2FwcyksCi0JICAoZ3N0X3ZpZGVvX2JveF9nZXRfdW5pdF9zaXplKTogRml4IHdyb25nIHNpemUgY2FsY3VsYXRpb25zIGFuZAotCSAgaW1wbGVtZW50IGdldF91bml0X3NpemUgY29ycmVjdGx5LgotCi0yMDA1LTEwLTE3IDE0OjU2OjEyICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IEVuYWJsZSBmbHggcGx1Z2luLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgIEVuYWJsZSBmbHggcGx1Z2luLgotCSAgKiBnc3QvZmx4L2dzdGZseGRlYy5jOiAoZmx4X2RlY29kZV9jaHVua3MpOgotCSAgRml4IGdjYzQgc2lnbmVkbmVzcyBpc3N1ZS4KLQotMjAwNS0xMC0xNyAwODo0NjozMCArMDAwMCAgSnVsaWVuIE1vdXR0ZSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQWRkaW5nIHZpZGVvbWl4ZXIuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQkgICogY29uZmlndXJlLmFjOiBBZGRpbmcgdmlkZW9taXhlci4KLQkgICogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzogKGdzdF9wbmdkZWNfY2xhc3NfaW5pdCksCi0JICAodXNlcl9yZWFkX2RhdGEpLCAoZ3N0X3BuZ2RlY19jaGFpbik6IE1vcmUgZGVidWdnaW5nLgotCSAgKiBnc3QvYWxwaGEvTWFrZWZpbGUuYW06IEFkZGluZyBhbHBoYWNvbG9yCi0JICAqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6IChnc3RfYWxwaGFfY29sb3JfYmFzZV9pbml0KSwKLQkgIChnc3RfYWxwaGFfY29sb3JfY2xhc3NfaW5pdCksIChnc3RfYWxwaGFfY29sb3JfaW5pdCksCi0JICAoZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzKSwgKGdzdF9hbHBoYV9jb2xvcl9zZXRfY2FwcyksCi0JICAodHJhbnNmb3JtX3JnYiksICh0cmFuc2Zvcm1fYmdyKSwKLQkgIChnc3RfYWxwaGFfY29sb3JfdHJhbnNmb3JtX2lwKSwKLQkgIChwbHVnaW5faW5pdCk6IFBvcnRlZCB0byAwLjkgdXNpbmcgaW4gcGxhY2UgYmFzZSB0cmFuZm9ybS4KLQkgICogZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX3BhZF9nZXRfdHlwZSksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfcGFkX2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb21peGVyX3BhZF9zaW5rX3NldGNhcHMpLAotCSAgKGdzdF92aWRlb21peGVyX3BhZF9saW5rKSwgKGdzdF92aWRlb21peGVyX3BhZF91bmxpbmspLAotCSAgKGdzdF92aWRlb21peGVyX3BhZF9pbml0KSwgKGdzdF92aWRlb21peGVyX2NsYXNzX2luaXQpLAotCSAgKGdzdF92aWRlb21peGVyX2luaXQpLCAoZ3N0X3ZpZGVvbWl4ZXJfZ2V0Y2FwcyksCi0JICAoZ3N0X3ZpZGVvbWl4ZXJfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF92aWRlb21peGVyX2ZpbGxfcXVldWVzKSwKLQkgIChnc3RfdmlkZW9taXhlcl9ibGVuZF9idWZmZXJzKSwgKGdzdF92aWRlb21peGVyX3VwZGF0ZV9xdWV1ZXMpLAotCSAgKGdzdF92aWRlb21peGVyX2NvbGxlY3RlZCksIChnc3RfdmlkZW9taXhlcl9jaGFuZ2Vfc3RhdGUpOgotCSAgUG9ydGVkCi0JICB0byAwLjkgdXNpbmcgY29sbGVjdHBhZHMuCi0KLTIwMDUtMTAtMTYgMjE6MTk6NDQgKzAwMDAgIFplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZmx4L01ha2VmaWxlLmFtOgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmg6Ci0JICBmbHggcGx1Z2luIHBvcnRlZCB0byAwLjkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZmx4IHBsdWdpbiBwb3J0ZWQgdG8gMC45Ci0KLTIwMDUtMTAtMTYgMTQ6MzM6MDUgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOgotCSAgdXNlIGdzdF92ZXJzaW9uX3N0cmluZwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1c2UgZ3N0X3ZlcnNpb25fc3RyaW5nCi0KLTIwMDUtMTAtMTYgMTM6MTc6MTEgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgY29uZmlndXJlLmFjOiBHTElCX0NIRUNLLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTE2ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBjb25maWd1cmUuYWM6IEdMSUJfQ0hFQ0suCi0KLTIwMDUtMTAtMTUgMTY6NDg6NTUgKzAwMDAgIEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JICBleHQvbGlicG5nLzogUG9ydGVkIHBuZ2RlYyB0byAwLjkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0xNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCSAgKiBleHQvbGlicG5nL01ha2VmaWxlLmFtOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZy5jOiAocGx1Z2luX2luaXQpOgotCSAgKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY19jbGFzc19pbml0KSwKLQkgIChnc3RfcG5nZGVjX2luaXQpLCAodXNlcl9yZWFkX2RhdGEpLCAoZ3N0X3BuZ2RlY19jaGFpbik6Ci0JICAqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmg6IFBvcnRlZCBwbmdkZWMgdG8gMC45Ci0KLTIwMDUtMTAtMTQgMTI6NDM6MzAgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIFBvcnQgbWF0cm9za2EgbXV4ZXIgdG8gMC45ICgjMzE4ODQ3KS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQkgICogY29uZmlndXJlLmFjOgotCSAgKiBnc3QvbWF0cm9za2EvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9tYXRyb3NrYS9lYm1sLWlkcy5oOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSAgKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzoKLQkgICogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSAgKiBnc3QvbWF0cm9za2EvbWF0cm9za2EuYzogKHBsdWdpbl9pbml0KToKLQkgIFBvcnQgbWF0cm9za2EgbXV4ZXIgdG8gMC45ICgjMzE4ODQ3KS4KLQotMjAwNS0xMC0xMyAxODo1OTozNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IEZpeCBoYW5kbGluZyBvZiBHU1RfVEFHX0RBVEUsIHdoaWNoIGlzIG5vdyBvZiBHU1RfVFlQRV9EQVRFOyB1c2UgR1NUX1JFQURfVUlOVDMyX0xFKCkgYW5kIGZyLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IChnc3Rfc3BlZXhlbmNfZ2V0X3RhZ192YWx1ZSksCi0JICAoY29tbWVudF9pbml0KSwgKGNvbW1lbnRfYWRkKToKLQkgIEZpeCBoYW5kbGluZyBvZiBHU1RfVEFHX0RBVEUsIHdoaWNoIGlzIG5vdyBvZiBHU1RfVFlQRV9EQVRFOwotCSAgdXNlIEdTVF9SRUFEX1VJTlQzMl9MRSgpIGFuZCBmcmllbmRzIHJhdGhlciB0aGFuIHRoZSBwcml2YXRlCi0JICBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBzYW1lIG1hY3Jvcy4KLQotMjAwNS0xMC0xMyAxNjowMTozNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGV4dC9jYWlyby9NYWtlZmlsZS5hbToKLQkgIGZpeCBkaXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGZpeCBkaXN0Ci0KLTIwMDUtMTAtMTMgMTU6Mjg6MDEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZXhhbXBsZXMvc3RhdHMvbXAyb2dnLmM6IG1vcmUgdHlwbyBmaXhlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL3N0YXRzL21wMm9nZy5jOgotCSAgbW9yZSB0eXBvIGZpeGVzCi0KLTIwMDUtMTAtMTIgMTQ6Mjk6NTUgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgcmVuYW1lZCBHU1RfRkxBR1MgbWFjcm9zIHRvIEdTVF9PQkpFQ1RfRkxBR1MgbW92ZWQgYml0c2hpZnQgZnJvbSBtYWNybyB0byBlbnVtIGRlZmluaXRpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleGFtcGxlcy9pbmRleGluZy9pbmRleG1wZWcuYzogKG1haW4pOgotCSAgKiBleHQvYXJ0c2QvZ3N0YXJ0c2RzaW5rLmM6IChnc3RfYXJ0c2RzaW5rX29wZW5fYXVkaW8pLAotCSAgKGdzdF9hcnRzZHNpbmtfY2xvc2VfYXVkaW8pLCAoZ3N0X2FydHNkc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvYXJ0c2QvZ3N0YXJ0c2RzaW5rLmg6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZwYXJzZS5jOiAoZ3N0X2FmcGFyc2Vfb3Blbl9maWxlKSwKLQkgIChnc3RfYWZwYXJzZV9jbG9zZV9maWxlKToKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnBhcnNlLmg6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6IChnc3RfYWZzaW5rX29wZW5fZmlsZSksCi0JICAoZ3N0X2Fmc2lua19jbG9zZV9maWxlKSwgKGdzdF9hZnNpbmtfY2hhaW4pLAotCSAgKGdzdF9hZnNpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuaDoKLQkgICogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5jOiAoZ3N0X2Fmc3JjX29wZW5fZmlsZSksCi0JICAoZ3N0X2Fmc3JjX2Nsb3NlX2ZpbGUpLCAoZ3N0X2Fmc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuaDoKLQkgICogZXh0L2NkYXVkaW8vZ3N0Y2RhdWRpby5jOiAoZ3N0X2NkYXVkaW9faW5pdCk6Ci0JICAqIGV4dC9kaXJlY3RmYi9kaXJlY3RmYnZpZGVvc2luay5jOiAoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2luaXQpOgotCSAgKiBleHQvZHRzL2dzdGR0c2RlYy5jOiAoZ3N0X2R0c2RlY19pbml0KToKLQkgICogZXh0L2phY2svZ3N0amFjay5oOgotCSAgKiBleHQvamFjay9nc3RqYWNrYmluLmM6IChnc3RfamFja19iaW5faW5pdCksCi0JICAoZ3N0X2phY2tfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja2RlYy5jOiAoZ3N0X211c2VwYWNrZGVjX2luaXQpOgotCSAgKiBleHQvbXVzaWNicmFpbnovZ3N0dHJtLmM6IChnc3RfbXVzaWNicmFpbnpfaW5pdCk6Ci0JICAqIGV4dC9uYXMvbmFzc2luay5jOiAoZ3N0X25hc3Npbmtfb3Blbl9hdWRpbyksCi0JICAoZ3N0X25hc3NpbmtfY2xvc2VfYXVkaW8pLCAoZ3N0X25hc3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L25hcy9uYXNzaW5rLmg6Ci0JICAqIGV4dC9wb2x5cC9wb2x5cHNpbmsuYzogKGdzdF9wb2x5cHNpbmtfaW5pdCk6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmg6Ci0JICAqIGV4dC9zbW9vdGh3YXZlL2dzdHNtb290aHdhdmUuYzogKGdzdF9zbW9vdGh3YXZlX2luaXQpOgotCSAgKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3NmX2NoYW5nZV9zdGF0ZSksIChnc3Rfc2ZfcmVsZWFzZV9yZXF1ZXN0X3BhZCksCi0JICAoZ3N0X3NmX29wZW5fZmlsZSksIChnc3Rfc2ZfY2xvc2VfZmlsZSksIChnc3Rfc2ZfbG9vcCk6Ci0JICAqIGV4dC9zbmRmaWxlL2dzdHNmLmg6Ci0JICAqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6IChnc3Rfc3dmZGVjX2luaXQpOgotCSAgKiBleHQvdGFya2luL2dzdHRhcmtpbmRlYy5jOiAoZ3N0X3RhcmtpbmRlY19pbml0KToKLQkgICogZ3N0L2FwZXRhZy9hcGVkZW11eC5jOiAoZ3N0X2FwZV9kZW11eF9pbml0KToKLQkgICogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuYzogKGdzdF9jZHhhcGFyc2VfaW5pdCk6Ci0JICAqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXN0cmlwLmM6IChnc3RfY2R4YXN0cmlwX2luaXQpOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuYzogKGdzdF9mZXN0aXZhbF9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuaDoKLQkgICogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOiAoZ3N0X21wZWcyc3VidF9pbml0KToKLQkgICogZ3N0L211bHRpZmlsZXNpbmsvZ3N0bXVsdGlmaWxlc2luay5jOiAoZ3N0X211bHRpZmlsZXNpbmtfaW5pdCksCi0JICAoZ3N0X211bHRpZmlsZXNpbmtfc2V0X2xvY2F0aW9uKSwgKGdzdF9tdWx0aWZpbGVzaW5rX29wZW5fZmlsZSksCi0JICAoZ3N0X211bHRpZmlsZXNpbmtfY2xvc2VfZmlsZSksIChnc3RfbXVsdGlmaWxlc2lua19uZXh0X2ZpbGUpLAotCSAgKGdzdF9tdWx0aWZpbGVzaW5rX3BhZF9xdWVyeSksIChnc3RfbXVsdGlmaWxlc2lua19oYW5kbGVfZXZlbnQpLAotCSAgKGdzdF9tdWx0aWZpbGVzaW5rX2NoYWluKSwgKGdzdF9tdWx0aWZpbGVzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9tdWx0aWZpbGVzaW5rL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkgICogZ3N0L3ZpZGVvZHJvcC9nc3R2aWRlb2Ryb3AuYzogKGdzdF92aWRlb2Ryb3BfaW5pdCk6Ci0JICAqIHN5cy9jZHJvbS9nc3RjZHBsYXllci5jOiAoY2RwbGF5ZXJfaW5pdCk6Ci0JICAqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuYzogKGR4cjNhdWRpb3NpbmtfaW5pdCksCi0JICAoZHhyM2F1ZGlvc2lua19vcGVuKSwgKGR4cjNhdWRpb3NpbmtfY2xvc2UpLAotCSAgKGR4cjNhdWRpb3NpbmtfY2hhaW5fcGNtKSwgKGR4cjNhdWRpb3NpbmtfY2hhaW5fYWMzKSwKLQkgIChkeHIzYXVkaW9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuaDoKLQkgICogc3lzL2R4cjMvZHhyM3NwdXNpbmsuYzogKGR4cjNzcHVzaW5rX2luaXQpLCAoZHhyM3NwdXNpbmtfb3BlbiksCi0JICAoZHhyM3NwdXNpbmtfY2xvc2UpLCAoZHhyM3NwdXNpbmtfY2hhaW4pLAotCSAgKGR4cjNzcHVzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9keHIzL2R4cjNzcHVzaW5rLmg6Ci0JICAqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuYzogKGR4cjN2aWRlb3NpbmtfaW5pdCksCi0JICAoZHhyM3ZpZGVvc2lua19vcGVuKSwgKGR4cjN2aWRlb3NpbmtfY2xvc2UpLAotCSAgKGR4cjN2aWRlb3Npbmtfd3JpdGVfZGF0YSksIChkeHIzdmlkZW9zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuaDoKLQkgICogc3lzL2dsc2luay9nbGltYWdlc2luay5jOiAoZ3N0X2dsaW1hZ2VzaW5rX2luaXQpOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmM6IChnc3RfcWNhbXNyY19jaGFuZ2Vfc3RhdGUpLAotCSAgKGdzdF9xY2Ftc3JjX29wZW4pLCAoZ3N0X3FjYW1zcmNfY2xvc2UpOgotCSAgKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmg6Ci0JICAqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2luaXQpOgotCSAgKiBzeXMvdmNkL3ZjZHNyYy5jOiAoZ3N0X3ZjZHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3ZjZHNyY19nZXQpLAotCSAgKGdzdF92Y2RzcmNfb3Blbl9maWxlKSwgKGdzdF92Y2RzcmNfY2xvc2VfZmlsZSksCi0JICAoZ3N0X3ZjZHNyY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3ZjZHNyY19yZWNhbGN1bGF0ZSk6Ci0JICAqIHN5cy92Y2QvdmNkc3JjLmg6Ci0JICByZW5hbWVkIEdTVF9GTEFHUyBtYWNyb3MgdG8gR1NUX09CSkVDVF9GTEFHUwotCSAgbW92ZWQgYml0c2hpZnQgZnJvbSBtYWNybyB0byBlbnVtIGRlZmluaXRpb24KLQotMjAwNS0xMC0xMiAxNDoyOTo0MyArMDAwMCAgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JICByZW5hbWVkIEdTVF9GTEFHUyBtYWNyb3MgdG8gR1NUX09CSkVDVF9GTEFHUyBtb3ZlZCBiaXRzaGlmdCBmcm9tIG1hY3JvIHRvIGVudW0gZGVmaW5pdGlvbgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4YW1wbGVzL2luZGV4aW5nL2luZGV4bXBlZy5jOiAobWFpbik6Ci0JICAqIGV4dC9lc2QvZXNkbW9uLmM6IChnc3RfZXNkbW9uX29wZW5fYXVkaW8pLAotCSAgKGdzdF9lc2Rtb25fY2xvc2VfYXVkaW8pLCAoZ3N0X2VzZG1vbl9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBleHQvZXNkL2VzZG1vbi5oOgotCSAgKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKGdzdF9nZGtfcGl4YnVmX2luaXQpOgotCSAgKiBleHQvcGFuZ28vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0b3ZlcmxheV9pbml0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOiAoZ3N0X2F1dG9fYXVkaW9fc2lua19pbml0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOiAoZ3N0X2F1dG9fdmlkZW9fc2lua19pbml0KToKLQkgICogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfaW5pdCk6Ci0JICAqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2luaXQpOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6IChnc3RfbXVsdGlwYXJ0X2RlbXV4X2luaXQpOgotCSAgKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOiAoZ3N0X211bHRpcGFydF9tdXhfaW5pdCk6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdG11bHRpZmlsZXNyYy5jOiAoZ3N0X211bHRpZmlsZXNyY19pbml0KSwKLQkgIChnc3RfbXVsdGlmaWxlc3JjX2dldCksIChnc3RfbXVsdGlmaWxlc3JjX29wZW5fZmlsZSksCi0JICAoZ3N0X211bHRpZmlsZXNyY19jbG9zZV9maWxlKSwgKGdzdF9tdWx0aWZpbGVzcmNfY2hhbmdlX3N0YXRlKToKLQkgICogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmg6Ci0JICAqIGdzdC9vbGRjb3JlL2dzdHBpcGVmaWx0ZXIuYzogKGdzdF9waXBlZmlsdGVyX2luaXQpLAotCSAgKGdzdF9waXBlZmlsdGVyX29wZW5fZmlsZSksIChnc3RfcGlwZWZpbHRlcl9jbG9zZV9maWxlKSwKLQkgIChnc3RfcGlwZWZpbHRlcl9jaGFuZ2Vfc3RhdGUpOgotCSAgKiBnc3Qvb2xkY29yZS9nc3RwaXBlZmlsdGVyLmg6Ci0JICAqIGdzdC9zbW9vdGh3YXZlL2dzdHNtb290aHdhdmUuYzogKGdzdF9zbW9vdGh3YXZlX2luaXQpOgotCSAgKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9pbml0KToKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOiAoZ3N0X29zeGF1ZGlvc2lua19pbml0KToKLQkgICogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oOgotCSAgKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaDoKLQkgIHJlbmFtZWQgR1NUX0ZMQUdTIG1hY3JvcyB0byBHU1RfT0JKRUNUX0ZMQUdTCi0JICBtb3ZlZCBiaXRzaGlmdCBmcm9tIG1hY3JvIHRvIGVudW0gZGVmaW5pdGlvbgotCi0yMDA1LTEwLTEyIDAzOjE0OjU3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZXh0L01ha2VmaWxlLmFtOgotCSAgZGlzdCBjYWlybwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkaXN0IGNhaXJvCi0KLTIwMDUtMTAtMTIgMDM6MTI6NTcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JICBleHQvOiB1cGRhdGUgb2YgY2Fpcm8tYmFzZWQgdGltZW92ZXJsYXkgdG8gMS4wIENhaXJvIEFQSSBkb2Vzbid0IHdvcmsgeWV0IGZvciByZXNpemluZyBvZiBvdXRwdXQgc2luawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9NYWtlZmlsZS5hbToKLQkgICogZXh0L2NhaXJvL01ha2VmaWxlLmFtOgotCSAgKiBleHQvY2Fpcm8vZ3N0Y2Fpcm8uYzogKHBsdWdpbl9pbml0KToKLQkgICogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6IChnc3RfdGV4dG92ZXJsYXlfY2hhbmdlX3N0YXRlKToKLQkgICogZXh0L2NhaXJvL2dzdHRpbWVvdmVybGF5LmM6IChnc3RfdGltZW92ZXJsYXlfdXBkYXRlX2ZvbnRfaGVpZ2h0KSwKLQkgIChnc3RfdGltZW92ZXJsYXlfc2V0dXApLCAoZ3N0X3RpbWVvdmVybGF5X3BsYW5hcjQxMSk6Ci0JICAqIGV4dC9jYWlyby9nc3R0aW1lb3ZlcmxheS5oOgotCSAgdXBkYXRlIG9mIGNhaXJvLWJhc2VkIHRpbWVvdmVybGF5IHRvIDEuMCBDYWlybyBBUEkKLQkgIGRvZXNuJ3Qgd29yayB5ZXQgZm9yIHJlc2l6aW5nIG9mIG91dHB1dCBzaW5rCi0KLTIwMDUtMTAtMTIgMDM6MDc6MjYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBkb24ndCBidWlsZCBjaGVja3MgaWYgd2UgZG9uJ3QgaGF2ZSBjaGVjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb24ndCBidWlsZCBjaGVja3MgaWYgd2UgZG9uJ3QgaGF2ZSBjaGVjawotCi0yMDA1LTEwLTEyIDAzOjAzOjI3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb21tb246Ci0JICBkb24ndCBidWlsZCBjaGVja3MgaWYgd2UgZG9uJ3QgaGF2ZSBnc3RjaGVjawotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb24ndCBidWlsZCBjaGVja3MgaWYgd2UgZG9uJ3QgaGF2ZSBnc3RjaGVjawotCi0yMDA1LTEwLTExIDE3OjM4OjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogbmV3c2VnbWVudCBBUEkgZml4LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoc3BlZXhfZGVjX2V2ZW50KSwgKHNwZWV4X2RlY19jaGFpbik6Ci0JICBuZXdzZWdtZW50IEFQSSBmaXguCi0KLTIwMDUtMTAtMTEgMTY6MzQ6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC86IG5ld3NlZ21lbnQgQVBJIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9sb29wX2hlYWRlcik6Ci0JICAqIGdzdC90dGEvZ3N0dHRhcGFyc2UuYzogKGdzdF90dGFfcGFyc2Vfc3JjX2V2ZW50KSwKLQkgIChnc3RfdHRhX3BhcnNlX3BhcnNlX2hlYWRlcik6Ci0JICBuZXdzZWdtZW50IEFQSSB1cGRhdGUuCi0KLTIwMDUtMTAtMTEgMTY6MzM6MDggKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIG5ld3NlZ21lbnQgQVBJIHVwZGF0ZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpLAotCSAgKGdzdF9kdmRlbXV4X2RlbXV4X2ZyYW1lKToKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNkZWNfd3JpdGUpOgotCSAgKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVwYXJzZV9jaGFpbik6Ci0JICAqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlciksCi0JICAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vlayk6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2V2ZW50KToKLQkgICogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfc3RvcF9maWxlKToKLQkgICogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfaGFuZGxlX3NlZWspLAotCSAgKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEpLAotCSAgKGdzdF93YXZwYXJzZV9sb29wKSwgKGdzdF93YXZwYXJzZV9wYWRfY29udmVydCksCi0JICAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCk6Ci0JICBuZXdzZWdtZW50IEFQSSB1cGRhdGUuCi0KLTIwMDUtMTAtMTEgMTA6MDc6MzUgKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IFNpZ25lZG5lc3MgY2xlYW51cHMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMTEgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiBTaWduZWRuZXNzIGNsZWFudXBzLgotCi0yMDA1LTEwLTEwIDE5OjU3OjQwICswMDAwICBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIFBPUlRFRF8wOToKLQkqIGV4dC9zcGVleC9NYWtlZmlsZS5hbToKLQkqIGV4dC9zcGVleC9nc3RzcGVleC5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBTcGVleGVuYyBwb3J0ZWQgdG8gMC45LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBTcGVleGVuYyBwb3J0ZWQgdG8gMC45LgotCi0yMDA1LTEwLTEwIDE0OjE2OjIxICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBzeXMvb3NzLzogQ2xlYW51cHMsIG1ha2UgZGV2aWNlIGNvbmZpZ3VyYWJsZSBpbiB0aGUgc2luaywgaGFuZGxlIGFuZCByZXBvcnQgZXJyb3JzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc19zaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9vc3Nfc2lua19pbml0KSwgKGdzdF9vc3Nfc2lua19zZXRfcHJvcGVydHkpLAotCSAgKGdzdF9vc3Nfc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X29zc19zaW5rX29wZW4pLAotCSAgKGdzdF9vc3Nfc2lua19wcmVwYXJlKSwgKGdzdF9vc3Nfc2lua19yZXNldCk6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5oOgotCSAgKiBzeXMvb3NzL2dzdG9zc3NyYy5jOiAoZ3N0X29zc19zcmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X29zc19zcmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9vc3Nfc3JjX2luaXQpLCAoZ3N0X29zc19zcmNfb3BlbiksCi0JICAoZ3N0X29zc19zcmNfcHJlcGFyZSk6Ci0JICBDbGVhbnVwcywgbWFrZSBkZXZpY2UgY29uZmlndXJhYmxlIGluIHRoZSBzaW5rLCBoYW5kbGUgYW5kIHJlcG9ydAotCSAgZXJyb3JzLgotCi0yMDA1LTEwLTEwIDEyOjMxOjA3ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBleHQvZ2NvbmYvOiBNYWtlIHN1cmUgZWxlbWVudCBpcyBOVUxMIGJlZm9yZSByZW1vdmluZyBmcm9tIHRoZSBiaW4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2djb25mL2dzdGdjb25mYXVkaW9zaW5rLmM6IChnc3RfZ2NvbmZfYXVkaW9fc2lua19yZXNldCk6Ci0JICAqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOiAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfcmVzZXQpOgotCSAgTWFrZSBzdXJlIGVsZW1lbnQgaXMgTlVMTCBiZWZvcmUgcmVtb3ZpbmcgZnJvbSB0aGUgYmluLgotCi0yMDA1LTEwLTA3IDE2OjI4OjI0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgRG9uJ3QgdW5yZWYgdGhlIG1lc3NhZ2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIChnc3RfZHYxMzk0c3JjX2J1c19yZXNldCk6IERvbid0IHVucmVmIHRoZSBtZXNzYWdlLgotCi0yMDA1LTEwLTA3IDE2OjIyOjU5ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSAgUG9zdCBhIG1lc3NhZ2Ugd2hlbiB0aGUgY2FibGUgaXMgdW5wbHVnZ2VkLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAoZ3N0X2R2MTM5NHNyY19idXNfcmVzZXQpOiBQb3N0IGEgbWVzc2FnZSB3aGVuIHRoZSBjYWJsZSBpcwotCSAgdW5wbHVnZ2VkLgotCSAgKGdzdF9kdjEzOTRzcmNfY3JlYXRlLCBnc3RfZHYxMzk0c3JjX3VubG9jayk6IFJlbW92ZSBzb21lIHByaW50cy4KLQotMjAwNS0xMC0wNyAxNToyNDoyNCArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogTWFrZSBpbnRlcnJ1cHRpYmxlLCBzbyBpdCB3b24ndCBibG9jayBmb3JldmVyIGluIGEgcmVhZCgpLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTEwLTA3ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogTWFrZSBpbnRlcnJ1cHRpYmxlLCBzbyBpdCB3b24ndAotCSAgYmxvY2sgZm9yZXZlciBpbiBhIHJlYWQoKS4KLQotMjAwNS0xMC0wNyAxMzoxNzo1MyArMDAwMCAgQW5keSBXaW5nbyA8d2luZ29AcG9ib3guY29tPgotCi0JICBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogQ2xlYW4gdXAgZm9yIHN0eWxlIGJlZm9yZSBkb2luZyBzb21lIGhhY2tpbmcuIFRoZSBvbmx5IGNoYW5nZSBzaG91bGQgYmUgdGhhdCB0aGUgc3RhdGUgY2guLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0xMC0wNyAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6IENsZWFuIHVwIGZvciBzdHlsZSBiZWZvcmUgZG9pbmcgc29tZQotCSAgaGFja2luZy4gVGhlIG9ubHkgY2hhbmdlIHNob3VsZCBiZSB0aGF0IHRoZSBzdGF0ZSBjaGFuZ2Ugc3R1ZmYgd2FzCi0JICBwdXQgaW50byBiYXNlc3JjJ3Mgc3RhcnQoKSBhbmQgc3RvcCgpIHJvdXRpbmVzLCB3aGljaCBjb2FsZXNjZXMKLQkgIHNvbWUgc3RlcHMuCi0KLTIwMDUtMTAtMDcgMTE6MzA6NDEgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGNvbmZpZ3VyZS5hYzogQWRkIGNoZWNrIGZvciBtbWFwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29uZmlndXJlLmFjOgotCSAgQWRkIGNoZWNrIGZvciBtbWFwCi0JICAqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkgIE9ubHkgY29tcGlsZSBlZmVuY2UgcGx1Z2luIG9uIHN5c3RlbXMgdGhhdCBoYXZlIG1tYXAuCi0KLTIwMDUtMTAtMDUgMTY6MzY6NTcgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgYWRkIGxhdGVzdCBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgbGF0ZXN0IGZpbGVzCi0KLTIwMDUtMTAtMDUgMTE6Mzg6MjkgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIGdzdC9kZWJ1Zy86IFBvcnQgcHJvZ3Jlc3NyZXBvcnQsIG5hdnNlZWssIG5hdmlnYXRpb250ZXN0LCB0ZXN0c2luayBhbmQgYnJlYWtteWRhdGEuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVidWcvYnJlYWtteWRhdGEuYzoKLQkgICogZ3N0L2RlYnVnL2dzdGRlYnVnLmM6Ci0JICAqIGdzdC9kZWJ1Zy9nc3RuYXZpZ2F0aW9udGVzdC5jOgotCSAgKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5jOgotCSAgKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5oOgotCSAgKiBnc3QvZGVidWcvcHJvZ3Jlc3NyZXBvcnQuYzoKLQkgICogZ3N0L2RlYnVnL3Rlc3RwbHVnaW4uYzoKLQkgIFBvcnQgcHJvZ3Jlc3NyZXBvcnQsIG5hdnNlZWssIG5hdmlnYXRpb250ZXN0LCB0ZXN0c2luayBhbmQKLQkgIGJyZWFrbXlkYXRhLgotCi0yMDA1LTEwLTA1IDExOjE1OjIzICswMDAwICBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JICBleHQvZHYvZ3N0ZHZkZW11eC5jOiBGaXhlcyBmb3IgYmV0dGVyIGNvbnZlcnNpb24KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQpLAotCSAgKGdzdF9kdmRlbXV4X3NyY19xdWVyeSk6Ci0JICBGaXhlcyBmb3IgYmV0dGVyIGNvbnZlcnNpb24KLQotMjAwNS0xMC0wNCAxNzo1ODo0MCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3QvYXV0b2RldGVjdC86IFNldCBzdGF0ZSBvZiBlbGVtZW50cyB0byBOVUxMIGJlZm9yZSByZW1vdmluZyBmcm9tIGJpbnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOiAoZ3N0X2F1dG9fYXVkaW9fc2lua19yZXNldCksCi0JICAoZ3N0X2F1dG9fYXVkaW9fc2lua19maW5kX2Jlc3QpLCAoZ3N0X2F1dG9fYXVkaW9fc2lua19kZXRlY3QpOgotCSAgKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6IChnc3RfYXV0b192aWRlb19zaW5rX3Jlc2V0KSwKLQkgIChnc3RfYXV0b192aWRlb19zaW5rX2ZpbmRfYmVzdCksIChnc3RfYXV0b192aWRlb19zaW5rX2RldGVjdCk6Ci0JICBTZXQgc3RhdGUgb2YgZWxlbWVudHMgdG8gTlVMTCBiZWZvcmUgcmVtb3ZpbmcgZnJvbSBiaW5zLgotCSAgU2V0IHN0YXRlIG9mIHRlc3QgZWxlbWVudCB0byBOVUxMIGlmIHdlIGZhaWxlZCB0byBtb3ZlIGl0IHRvIFJFQURZCi0KLTIwMDUtMTAtMDQgMTc6NDQ6NDMgKzAwMDAgIEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkgIGV4dC9kdi86IEFkZGVkIERFRkFVTFQgPD09PiBCWVRFUywgVElNRSBjb252ZXJzaW9ucyBvbiBzcmNwYWQsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2R2L01ha2VmaWxlLmFtOgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jOiAoZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5KSwgKGdzdF9kdmRlbXV4X3NyY19jb252ZXIpOgotCSAgQWRkZWQgREVGQVVMVCA8PT0+IEJZVEVTLCBUSU1FIGNvbnZlcnNpb25zIG9uIHNyY3BhZCwKLQkgIENvcnJlY3RlZCB0aGUgcXVlcnkgZnVuY3Rpb24gZm9yIHBvc2l0aW9uIHNvIGl0IGRvZXNuJ3QgZm9yZ2V0IHdoYXQKLQkgIGZvcm1hdCB3YXMgYXNrZWQsIGFuZCBjYWxscyB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgb24gdGhlIGNvcnJlY3QgcGFkLgotCi0yMDA1LTEwLTAzIDE3OjU5OjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBoZWFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGJhY2sgdG8gaGVhZAotCi09PT0gcmVsZWFzZSAwLjkuMyA9PT0KLQotMjAwNS0xMC0wMyAxNzo0ODo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE5FV1M6Ci0JKiBSRUFETUU6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vaXQucG86Ci0JKiBwby9uYi5wbzoKLQkqIHBvL25sLnBvOgotCSogcG8vb3IucG86Ci0JKiBwby9zcS5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkqIHBvL3ZpLnBvOgotCSAgcmVsZWFzZSB0aW1lCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2UgdGltZQotCi0yMDA1LTEwLTAyIDIzOjA4OjM1ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGV4dC9mbGFjL2dzdGZsYWNkZWMuYyAoZ3N0X2ZsYWNkZWNfd3JpdGUpOiBEZWFsIHdpdGggcGFkX2FsbG9jIGVycm9yIHJldHVybnMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMDMgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYyAoZ3N0X2ZsYWNkZWNfd3JpdGUpOiBEZWFsIHdpdGggcGFkX2FsbG9jCi0JICBlcnJvciByZXR1cm5zLgotCi0yMDA1LTEwLTAyIDE1OjMzOjE0ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGNvbmZpZ3VyZS5hYyAoR1NUX1BMVUdJTl9MREZMQUdTKTogQ2hhbmdlIHRvIGJlIGxpa2UgLWJhc2UuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMTAtMDIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIGNvbmZpZ3VyZS5hYyAoR1NUX1BMVUdJTl9MREZMQUdTKTogQ2hhbmdlIHRvIGJlIGxpa2UgLWJhc2UuCi0JICAqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogUG9ydGVkIHRvIDAuOS4KLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jIChnc3RfZmxhY2RlY19sb29wKTogSGFuZGxlIGVycm9ycyBiZXR0ZXIuCi0JICAqIGV4dC9mbGFjL01ha2VmaWxlLmFtOiBBZGQgdGhlIEdTVF9QTFVHSU5TX0JBU0UgY2ZsYWdzIGFuZCBsaWJzLAotCSAgYW5kIGxpbmsgdG8gZ3N0dGFnZWRpdC4gRW5hYmxlIGZsYWNlbmMuCi0JICAqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogUmUtZW5hYmxlIHRhZyByZWFkaW5nLgotCi0yMDA1LTA5LTMwIDE2OjM2OjQ5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwLzogVmFyaW91cyBjbGFzcyBhbmQgY2FwcyBmaXhlcyBmcm9tIEFuZHJlIE1hZ2FsaGFlcyAoYW5kcnVua28pCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJlbmMuYzogKGdzdF9ydHBhbXJlbmNfc2V0Y2Fwcyk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZ3NtcGFyc2UuYzoKLQkgICogZ3N0L3J0cC9nc3RydHBoMjYzcGVuYy5jOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZlbmMuYzogKGdzdF9ydHBtcDR2ZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBtcDR2ZW5jX3BhcnNlX2RhdGEpLCAoZ3N0X3J0cG1wNHZlbmNfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cG1wNHZlbmNfc2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcGFlbmMuYzogKGdzdF9ydHBtcGFlbmNfaGFuZGxlX2J1ZmZlcik6Ci0JICBWYXJpb3VzIGNsYXNzIGFuZCBjYXBzIGZpeGVzIGZyb20gQW5kcmUgTWFnYWxoYWVzIChhbmRydW5rbykKLQotMjAwNS0wOS0yOSAxMzowODo0MSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2xldmVsL2xldmVsLWV4YW1wbGUuYzogVXBkYXRlIGZvciBuZXcgYnVzIEFQSS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOiAobWFpbik6Ci0JICBVcGRhdGUgZm9yIG5ldyBidXMgQVBJLgotCi0yMDA1LTA5LTI4IDEzOjM4OjAyICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IE5vIG5lZWQgdG8gdGFrZSBzdHJlYW0gbG9jayBoZXJlLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKToKLQkgIE5vIG5lZWQgdG8gdGFrZSBzdHJlYW0gbG9jayBoZXJlLgotCi0yMDA1LTA5LTI4IDA5OjQ1OjAwICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBjb25maWd1cmUuYWM6IEZpeCB1bmV4cGFuZGVkIGF1dG9jb25mIG1hY3JvIEdTVF9ET0MsIHdoaWNoIGhhcyBiZWVuIHJlbmFtZWQgdG8gR1NUX0RPQ0JPT0tfQ0hFQ0sgKHNlZSBjb21tb24vbTQvZ3N0LWQuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjb25maWd1cmUuYWM6Ci0JICBGaXggdW5leHBhbmRlZCBhdXRvY29uZiBtYWNybyBHU1RfRE9DLCB3aGljaCBoYXMgYmVlbiByZW5hbWVkCi0JICB0byBHU1RfRE9DQk9PS19DSEVDSyAoc2VlIGNvbW1vbi9tNC9nc3QtZG9jLm00KSAoIzMxNjIwMikuCi0KLTIwMDUtMDktMjcgMTU6MTI6NDUgKzAwMDAgIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+Ci0KLQkgIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiBGaXggcGxheWJhY2sgb2YgbW9ubyBzdHJlYW1zIChieXRlc19wZXJfc2FtcGxlIHNob3VsZCBiZSBzZXQgZnJvbSB0aGUgc2FtcGxlIHdpZHRoIGFuZCB0aGUgbnVtYi4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc19zaW5rX3ByZXBhcmUpOgotCSAgRml4IHBsYXliYWNrIG9mIG1vbm8gc3RyZWFtcyAoYnl0ZXNfcGVyX3NhbXBsZSBzaG91bGQgYmUgc2V0Ci0JICBmcm9tIHRoZSBzYW1wbGUgd2lkdGggYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgbmVnb3RpYXRlZCwKLQkgIGFuZCBub3QganVzdCBiZSBzZXQgdG8gNCkgKCMzMTczMzgpCi0KLTIwMDUtMDktMjYgMTQ6NTk6MTAgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgYWRkIGF1cGFyc2UgdG8gcGx1Z2lucyBsaXN0Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBhdXBhcnNlIHRvIHBsdWdpbnMgbGlzdAotCi0yMDA1LTA5LTI2IDE0OjQyOjA5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cG1wYWVuYy5jOiBTZXQgYnVmZmVyIGR1cmF0aW9uIGNvcnJlY3RseS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWVuYy5jOiAoZ3N0X3J0cG1wYWVuY19mbHVzaCksCi0JICAoZ3N0X3J0cG1wYWVuY19oYW5kbGVfYnVmZmVyKToKLQkgIFNldCBidWZmZXIgZHVyYXRpb24gY29ycmVjdGx5LgotCi0yMDA1LTA5LTI2IDEzOjA2OjI3ICswMDAwICBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIubmV0PgotCi0JICBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IERvbid0IGNyYXNoIHdoZW4gZW5jb3VudGVyaW5nIGEgc3RyZWFtIHdpdGggYW4gdW5rbm93biBmb3VyY2Mgb3IgY29kZWMgaWQuIEluc3RlYWQsIGNyZWF0ZSBhIHAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2Jhc2VfaW5pdCksCi0JICAoZ3N0X2F2aV9kZW11eF9jbGFzc19pbml0KSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwKLQkgIChnc3RfYXZpX2RlbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JICBEb24ndCBjcmFzaCB3aGVuIGVuY291bnRlcmluZyBhIHN0cmVhbSB3aXRoIGFuIHVua25vd24gZm91cmNjIG9yCi0JICBjb2RlYyBpZC4gSW5zdGVhZCwgY3JlYXRlIGEgcGFkIG9mIHR5cGUgdmlkZW8veC1hdmktdW5rbm93biBvcgotCSAgYXVkaW8veC1hdmktdW5rbm93biwgd2hpY2ggYXMgYSBzaWRlLWVmZmVjdCBhbHNvIHJlc3VsdHMgaW4gbGVzcwotCSAgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIGluIHBsYXllcnMgKCdubyBkZWNvZGVyJyB2cy4gJ25vIHN0cmVhbXMnKTsKLQkgIG1pbm9yIGZpeGVzIHRvIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBhbmQgY2xhc3NfaW5pdCBmdW5jdGlvbi4KLQotMjAwNS0wOS0yNCAxMzozNDo0NiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svTWFrZWZpbGUuYW06Ci0JICBzZXQgdXAgcGx1Z2luIHBhdGhzIHByb3Blcmx5Ci0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHNldCB1cCBwbHVnaW4gcGF0aHMgcHJvcGVybHkKLQotMjAwNS0wOS0yNCAxMzoxMDo1MiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2F1dG9kZXRlY3QvOiBUaGVzZSBhcmUgc2lua3MuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOiAoZ3N0X2F1dG9fYXVkaW9fc2lua19pbml0KToKLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jOiAoZ3N0X2F1dG9fdmlkZW9fc2lua19pbml0KToKLQkgIFRoZXNlIGFyZSBzaW5rcy4KLQotMjAwNS0wOS0yNCAxMjoxMDowMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGNoZWNrL2VsZW1lbnRzL2xldmVsLmM6IGZpeCB0ZXN0IGZvciBuZXcgR3N0Q2xvY2tUaW1lIHVzZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNoZWNrL2VsZW1lbnRzL2xldmVsLmM6IChHU1RfU1RBUlRfVEVTVCk6Ci0JICBmaXggdGVzdCBmb3IgbmV3IEdzdENsb2NrVGltZSB1c2UKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6IChnc3RfbGV2ZWxfaW5pdCksIChnc3RfbGV2ZWxfc2V0X2NhcHMpLAotCSAgKGdzdF9sZXZlbF90cmFuc2Zvcm1faXApOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkgIGZpeCB1cCB0aGUgZGVjYXkgcGVhaywgZW5zdXJpbmcgdGhlIGRlY2F5IHBlYWsgaXMgbmV2ZXIgbG93ZXIKLQkgIHRoYW4gdGhlIHBlYWsgZm9yIHRoYXQgaW50ZXJ2YWwKLQotMjAwNS0wOS0yMyAxODoyMzowNCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJnczoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOgotCSAgdXBkYXRpbmcgZG9jcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB1cGRhdGluZyBkb2NzCi0KLTIwMDUtMDktMjMgMTg6MTU6NTEgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBNYWtlZmlsZS5hbToKLQkqIGNoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JKiBjb21tb246Ci0JKiBnc3QvbGV2ZWwvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSogZ3N0L2xldmVsL2xldmVsLWV4YW1wbGUuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBjb252ZXJ0IHRvIHVzaW5nIEdzdENsb2NrVGltZSBmb3IgYWxsIHRpbWUgdmFsdWVzLCBmaW5hbGx5LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBjb252ZXJ0IHRvIHVzaW5nIEdzdENsb2NrVGltZSBmb3IgYWxsIHRpbWUgdmFsdWVzLCBmaW5hbGx5LgotCi0yMDA1LTA5LTIzIDE1OjAxOjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2dvb20vTWFrZWZpbGUuYW06Ci0JICBmaXggYnVpbGQgb2YgZ29vbQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYnVpbGQgb2YgZ29vbQotCi0yMDA1LTA5LTIzIDE0OjIwOjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogY29tbW9uOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6Ci0JICB3ZSBoYW5kbGUgbW9yZSB0aGFuIHR3byBjaGFubmVscwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICB3ZSBoYW5kbGUgbW9yZSB0aGFuIHR3byBjaGFubmVscwotCi0yMDA1LTA5LTIzIDA0OjIzOjAwICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2NhaXJvL01ha2VmaWxlLmFtOgotCSogZXh0L2R2L01ha2VmaWxlLmFtOgotCSogZXh0L2VzZC9NYWtlZmlsZS5hbToKLQkqIGV4dC9mbGFjL01ha2VmaWxlLmFtOgotCSogZXh0L2djb25mL01ha2VmaWxlLmFtOgotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JKiBleHQvanBlZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9sYWRzcGEvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGliY2FjYS9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJtbmcvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGlicG5nL01ha2VmaWxlLmFtOgotCSogZXh0L21pa21vZC9NYWtlZmlsZS5hbToKLQkqIGV4dC9wYW5nby9NYWtlZmlsZS5hbToKLQkqIGV4dC9yYXcxMzk0L01ha2VmaWxlLmFtOgotCSogZXh0L3Nob3V0Mi9NYWtlZmlsZS5hbToKLQkqIGV4dC9zcGVleC9NYWtlZmlsZS5hbToKLQkqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hdXBhcnNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCSogZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSogZ3N0L2N1dHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSogZ3N0L2ZseC9NYWtlZmlsZS5hbToKLQkqIGdzdC9nb29tL01ha2VmaWxlLmFtOgotCSogZ3N0L2xhdy9NYWtlZmlsZS5hbToKLQkqIGdzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9tZWRpYW4vTWFrZWZpbGUuYW06Ci0JKiBnc3QvbW9ub3Njb3BlL01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpcGFydC9NYWtlZmlsZS5hbToKLQkqIGdzdC9vbGRjb3JlL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSogZ3N0L3Ntb290aHdhdmUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9ib3gvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZlbmMvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBzeXMvb3NzL01ha2VmaWxlLmFtOgotCSogc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtOgotCSAgZml4IGJ1aWxkIGFuZCB1c2Ugb2YgR1NUX0xJQlMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGJ1aWxkIGFuZCB1c2Ugb2YgR1NUX0xJQlMKLQotMjAwNS0wOS0yMiAyMjozODo0OCArMDAwMCAgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBQT1JURURfMDk6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmg6Ci0JICBBdXBhcnNlIHBvcnRlZCB0byAwLjkuIFRlc3RlZCB3aXRoIGZpbGVzcmMgISBhdXBhcnNlICEgb3Nzc2luayBhbmQgYWxzYXNpbmsKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgQXVwYXJzZSBwb3J0ZWQgdG8gMC45LiBUZXN0ZWQgd2l0aCBmaWxlc3JjICEgYXVwYXJzZSAhIG9zc3NpbmsgYW5kIGFsc2FzaW5rCi0KLTIwMDUtMDktMjIgMTQ6MTM6MzYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvOiBVc2UgaXNfZmlsbGVkIHRvIGJvdGggY2hlY2sgTVRVIGFuZCBtYXgtcHRpbWUgb2YgYmFzZSBjbGFzcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRwL1RPRE86Ci0JICAqIGdzdC9ydHAvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2dldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZlbmMuYzogKGdzdF9ydHBtcDR2ZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBtcDR2ZW5jX3BhcnNlX2RhdGEpLCAoZ3N0X3J0cG1wNHZlbmNfaGFuZGxlX2J1ZmZlciksCi0JICAoZ3N0X3J0cG1wNHZlbmNfc2V0X3Byb3BlcnR5KToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZW5jLmg6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZW5jLmM6IChnc3RfcnRwbXBhZW5jX2hhbmRsZV9idWZmZXIpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWVuYy5oOgotCSAgVXNlIGlzX2ZpbGxlZCB0byBib3RoIGNoZWNrIE1UVSBhbmQgbWF4LXB0aW1lIG9mIGJhc2UgY2xhc3MuCi0KLTIwMDUtMDktMjIgMTE6Mjg6MjMgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwbXA0dmVuYy5jOiBEb24ndCBmcmFnbWVudCBwYWNrZXRzIHdpdGggbXVsdGlwbGUgZnJhbWVzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmVuYy5jOiAoZ3N0X3J0cG1wNHZlbmNfY2xhc3NfaW5pdCksCi0JICAoZ3N0X3J0cG1wNHZlbmNfcGFyc2VfZGF0YSksIChnc3RfcnRwbXA0dmVuY19oYW5kbGVfYnVmZmVyKSwKLQkgIChnc3RfcnRwbXA0dmVuY19zZXRfcHJvcGVydHkpOgotCSAgRG9uJ3QgZnJhZ21lbnQgcGFja2V0cyB3aXRoIG11bHRpcGxlIGZyYW1lcy4KLQotMjAwNS0wOS0yMiAxMDozOToxMSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IFJlbW92ZSBnX3ByaW50LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvVE9ETzoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZGVjLmM6IChnc3RfcnRwbXA0dmRlY19zZXRjYXBzKToKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZW5jLmM6IChnc3RfcnRwbXA0dmVuY19jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwbXA0dmVuY19pbml0KSwgKGdzdF9ydHBtcDR2ZW5jX3BhcnNlX2RhdGEpLAotCSAgKGdzdF9ydHBtcDR2ZW5jX2hhbmRsZV9idWZmZXIpLCAoZ3N0X3J0cG1wNHZlbmNfc2V0X3Byb3BlcnR5KSwKLQkgIChnc3RfcnRwbXA0dmVuY19nZXRfcHJvcGVydHkpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZlbmMuaDoKLQkgIFJlbW92ZSBnX3ByaW50LgotCSAgVXBkYXRlIFRPRE8KLQkgIE1ha2UgcGF5bG9hZCBlbmNvZGVyIGEgYml0IHNtYXJ0ZXIgYW5kIG1vcmUgY29ycmVjdCB3aXRoCi0JICB0aW1lc3RhbXBzLgotCSAgQWRkZWQgb3B0aW9uIGluIHBheWxvYWRlciB0byBpbmNsdWRlIGNvbmZpZyBzdHJpbmcgaW4tYmFuZC4KLQotMjAwNS0wOS0yMSAxOTo0MTo0NSArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBTdHJpcCBzcGFjZXMgZm9yIGtleS92YWx1ZSBwYWlycy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19wYXJzZV9ydHBtYXApLAotCSAgKGdzdF9ydHNwc3JjX21lZGlhX3RvX2NhcHMpLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksCi0JICAoZ3N0X3J0c3BzcmNfc2VuZCk6Ci0JICBTdHJpcCBzcGFjZXMgZm9yIGtleS92YWx1ZSBwYWlycy4KLQotMjAwNS0wOS0yMSAxNzo1MzoyNiArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiBNb3JlIFNEUCBwYXJzaW5nIGFuZCBjYXBzIHNldHRpbmcuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfcGFyc2VfcnRwbWFwKSwKLQkgIChnc3RfcnRzcHNyY19tZWRpYV90b19jYXBzKSwgKGdzdF9ydHNwc3JjX3N0cmVhbV9zZXR1cF9ydHApLAotCSAgKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGdzdF9ydHNwc3JjX3NlbmQpLAotCSAgKGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBNb3JlIFNEUCBwYXJzaW5nIGFuZCBjYXBzIHNldHRpbmcuCi0JICBEbyBOT19QUkVST0xMIGRpZmZlcmVudGx5LgotCSAgYWRkIHBhZHMgb25seSBhZnRlciBuZWdvdGlhdGVkLgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwKLQkgIChnc3RfdWRwc3JjX2dldGNhcHMpOgotCSAgSW1wbGVtZW50IHRoZSBnZXRjYXBzIGZ1bmN0aW9uLgotCi0yMDA1LTA5LTIxIDE3OjUwOjI5ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL2dzdHJ0cGFtcmRlYy5jOiBIYW5kbGUgbXVsdGlwbGUgQU1yIHBhY2tldHMgcGVyIHBheWxvYWQuIEhhbmRsZSBDUkMgYW5kIHBhcnNlIElMTC9JTFAuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L3J0cC9nc3RydHBhbXJkZWMuYzogKGdzdF9ydHBhbXJkZWNfc2lua19zZXRjYXBzKSwKLQkgIChnc3RfcnRwYW1yZGVjX2NoYWluKToKLQkgIEhhbmRsZSBtdWx0aXBsZSBBTXIgcGFja2V0cyBwZXIgcGF5bG9hZC4gSGFuZGxlIENSQyBhbmQKLQkgIHBhcnNlIElMTC9JTFAuCi0JICAqIGdzdC9ydHAvZ3N0cnRwYW1yZW5jLmM6IChnc3RfcnRwYW1yZW5jX3NldGNhcHMpOgotCSAgTWFrZSBjYXBzIHBhcmFtcyBzdHJpbmdzIGZvciBlYXN5IFNEUCBtYXBwaW5nLgotCSAgKiBnc3QvcnRwL2dzdHJ0cGRlYy5jOiAoZ3N0X3J0cGRlY19pbml0KSwgKGdzdF9ydHBkZWNfZ2V0Y2Fwcyk6Ci0JICBIYW5kbGUgY2Fwc25lZ28gYmV0dGVyLgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZWMuYzogKGdzdF9ydHBtcDR2ZGVjX3NldGNhcHMpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZlbmMuYzogKGdzdF9ydHBtcDR2ZW5jX25ld19jYXBzKToKLQkgIEdlbmVyYXRlIGFuZCBwYXJzZSBjb25maWcgc3RyaW5nIGluIHRoZSBjYXBzLgotCi0yMDA1LTA5LTIxIDEyOjE5OjI0ICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3QvcnRwL1JFQURNRTogVXBkYXRlIFJFQURNRQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvUkVBRE1FOgotCSAgVXBkYXRlIFJFQURNRQotCSAgKiBnc3QvcnRwL2dzdHJ0cGFtcmRlYy5jOiAoZ3N0X3J0cGFtcmRlY19zaW5rX3NldGNhcHMpOgotCSAgTWFrZSBleHRyYSBwYXJhbXMgYXMgc3RyaW5ncy4KLQkgICogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BzcmNfc2V0X3N0YXRlKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9ydHBtYXApLCAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksIChnc3RfcnRzcHNyY19zZW5kKToKLQkgIE1ha2Ugc3RhdGUgY2hhbmdlIHJldHVybiBOT19QUkVST0xMIGFzIHRoaXMgaXMgYSBsaXZlCi0JICBzb3VyY2UuCi0JICAqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX3NldF9wcm9wZXJ0eSk6Ci0JICBEb24ndCB1bnJlZiBvbGQgY2FwcyB3aGVuIE5VTEwuCi0KLTIwMDUtMDktMjAgMTc6MzU6MTEgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHNwLzogQWRkIFVSSSBoYW5kbGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX2dldF90eXBlKSwKLQkgIChnc3RfcnRzcHNyY19wYXJzZV9ydHBtYXApLCAoZ3N0X3J0c3BzcmNfbWVkaWFfdG9fY2FwcyksCi0JICAoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksIChnc3RfcnRzcHNyY19zZW5kKSwKLQkgIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX3VyaV9nZXRfdHlwZSksCi0JICAoZ3N0X3J0c3BzcmNfdXJpX2dldF9wcm90b2NvbHMpLCAoZ3N0X3J0c3BzcmNfdXJpX2dldF91cmkpLAotCSAgKGdzdF9ydHNwc3JjX3VyaV9zZXRfdXJpKSwgKGdzdF9ydHNwc3JjX3VyaV9oYW5kbGVyX2luaXQpOgotCSAgKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmM6IChzZHBfbWVkaWFfZ2V0X2Zvcm1hdCk6Ci0JICAqIGdzdC9ydHNwL3NkcG1lc3NhZ2UuaDoKLQkgIEFkZCBVUkkgaGFuZGxlci4KLQkgIFBhcnNlIFNEUCBhbmQgY3JlYXRlIGNhcHMuCi0KLTIwMDUtMDktMjAgMTc6MTk6NDMgKzAwMDAgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgbW9yZSBzcGVjIGZpbGUgZml4b3JpbmcKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgbW9yZSBzcGVjIGZpbGUgZml4b3JpbmcKLQotMjAwNS0wOS0yMCAxNzowNDozMyArMDAwMCAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JKiBnc3QtcGx1Z2lucy5zcGVjLmluOgotCSAgZml4IHNwZWMgZmlsZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IHNwZWMgZmlsZXMKLQotMjAwNS0wOS0yMCAxMDo1MTo1MSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9ydHAvUkVBRE1FOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21lbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5LmM6Ci0JICBkb24ndCB1c2UgdW5kZXJzY29yZXMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZG9uJ3QgdXNlIHVuZGVyc2NvcmVzCi0KLTIwMDUtMDktMjAgMDc6MzA6MzEgKzAwMDAgIFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSAgZ3N0L2FscGhhL2dzdGFscGhhLmM6IGZpeCBlbGVtZW50IGRlc2NyaXB0aW9uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JICBmaXggZWxlbWVudCBkZXNjcmlwdGlvbgotCi0yMDA1LTA5LTE5IDE3OjU3OjA2ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy5wcmVyZXF1aXNpdGVzOgotCSAgcHJlcmVxcyBhcyB3ZWxsCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHByZXJlcXMgYXMgd2VsbAotCi0yMDA1LTA5LTE5IDE3OjUzOjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3M6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlczoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFsczoKLQkgIGNvbW1pdCByZXN1bHQgb2Ygc2Nhbm9iaiBzdGVwCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbW1pdCByZXN1bHQgb2Ygc2Nhbm9iaiBzdGVwCi0KLTIwMDUtMDktMTkgMTc6MDM6NTUgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkgIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZWMuYzogRG9uJ3QgY2hlY2sgcGF5bG9hZCBmb3Igbm93LgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZWMuYzogKGdzdF9ydHBoMjYzcGRlY19jaGFpbik6Ci0JICBEb24ndCBjaGVjayBwYXlsb2FkIGZvciBub3cuCi0KLTIwMDUtMDktMTkgMTY6NDM6NTYgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkgIGFkZCBjaGVjay12YWxncmluZCB0YXJnZXQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYWRkIGNoZWNrLXZhbGdyaW5kIHRhcmdldAotCi0yMDA1LTA5LTE5IDE2OjI2OjMwICswMDAwICBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotCi0JICBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuKjogRml4IHdhdnBhcnNlIHNvbWUgbW9yZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9yZXNldCksCi0JICAoZ3N0X3dhdnBhcnNlX2luaXQpLCAoZ3N0X3dhdnBhcnNlX3BhcnNlX2ZpbGVfaGVhZGVyKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2luaXQpLCAoZ3N0X3dhdnBhcnNlX2hhbmRsZV9zZWVrKSwKLQkgIChnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMpLCAoZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhKSwKLQkgIChnc3Rfd2F2cGFyc2VfbG9vcCksIChnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQpLAotCSAgKGdzdF93YXZwYXJzZV9wYWRfcXVlcnkpLCAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCksCi0JICAoZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSAgRml4IHdhdnBhcnNlIHNvbWUgbW9yZS4KLQotMjAwNS0wOS0xOSAxMTo0ODoxMyArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgY2hlY2svZWxlbWVudHMvbGV2ZWwuYzogRml4IGZvciBidXMgQVBJIGNoYW5nZS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBjaGVjay9lbGVtZW50cy9sZXZlbC5jOiAoR1NUX1NUQVJUX1RFU1QpOgotCSAgRml4IGZvciBidXMgQVBJIGNoYW5nZS4KLQotMjAwNS0wOS0xOSAxMTozODoxMCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L2xldmVsL2xldmVsLWV4YW1wbGUuYzogRml4IGZvciBuZXcgYnVzIEFQSS4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBnc3QvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jOiAobWFpbik6Ci0JICBGaXggZm9yIG5ldyBidXMgQVBJLgotCSAgKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19zZXRfcHJvcGVydHkpOgotCSAgU2V0IGNhcHMgb24gcGFkcy4KLQotMjAwNS0wOS0xOSAxMTowNjowNSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkgIGRpc2FibGUgZmxhZ3MgZm9yIHVuYnVpbHQgcGx1Z2lucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkaXNhYmxlIGZsYWdzIGZvciB1bmJ1aWx0IHBsdWdpbnMKLQotMjAwNS0wOS0xOSAwODoyMToyOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbW1vbjoKLQkqIGRvY3MvcGx1Z2lucy9zY2Fub2JqLWJ1aWxkLnN0YW1wOgotCSAgbm9ybWFsIGJ1aWxkcyBzaG91bGRuJ3Qgc2NhbiBnb2JqZWN0cwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBub3JtYWwgYnVpbGRzIHNob3VsZG4ndCBzY2FuIGdvYmplY3RzCi0KLTIwMDUtMDktMTYgMDA6Mzg6NTAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjaGVjay9NYWtlZmlsZS5hbToKLQkqIGNvbW1vbjoKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSAgcmVtb3ZlIGdzdC1yZWdpc3RlcgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICByZW1vdmUgZ3N0LXJlZ2lzdGVyCi0KLTIwMDUtMDktMTUgMTM6NTc6NTYgKzAwMDAgIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL1JFQURNRToKLQkqIGdzdC9ydHAvZ3N0cnRwLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcnBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWVuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5oOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGF5Lmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlYy5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dmVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBtcDR2ZW5jLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wNHZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXA0dnBheS5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWVuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhcGF5Lmg6Ci0JICBVcGRhdGVzIHRvIHBheWxvYWRlci9kZXBheWxvYWRlcnMsIG1ha2UgcGF5bG9hZGVycyB1c2UgdGhlIGJhc2UgY2xhc3Nlcy4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgVXBkYXRlcyB0byBwYXlsb2FkZXIvZGVwYXlsb2FkZXJzLCBtYWtlIHBheWxvYWRlcnMgdXNlCi0JICB0aGUgYmFzZSBjbGFzc2VzLgotCSAgVXBkYXRlZCBSRUFETUUgd2l0aCBzdWdnZXN0ZWQgUlRQIGNhcHMgYW5kIGhvdyB0byBjb252ZXJ0Ci0JICB0by9mcm9tIFNEUC4KLQkgIEFkZGVkIGNvbmZpZyBkZXNjcmlwdG9yIGluIG1wNHYgcGF5bG9hZGVyLgotCi0yMDA1LTA5LTE1IDEwOjQ3OjU4ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuYyAoZ3N0X2F1dG9fYXVkaW9fc2lua19maW5kX2Jlc3QpOiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmMKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgMjAwNS0wOS0xNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQkgICogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jIChnc3RfYXV0b19hdWRpb19zaW5rX2ZpbmRfYmVzdCk6Ci0JICAqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYwotCSAgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZmluZF9iZXN0KTogVXBkYXRlIGZvciBuZXcgcmVnaXN0cnkgQVBJLgotCi0yMDA1LTA5LTE0IDIwOjUxOjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgY29tbW9uLzogYSBzaW1wbGUgcHkgc2NyaXB0IHRvIGdlbmVyYXRlIHZhbGlkIHhtbCBmcm9tIGEgQyBleGFtcGxlIHByb2JhYmx5IGFsc28gbmVlZCB0byBzdHJpcCBhbiBNSVQgbGljZW5zZSB3aGVuIHdlLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogY29tbW9uL2MtdG8teG1sLnB5OgotCSAgKiBjb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkgIGEgc2ltcGxlIHB5IHNjcmlwdCB0byBnZW5lcmF0ZSB2YWxpZCB4bWwgZnJvbSBhIEMgZXhhbXBsZQotCSAgcHJvYmFibHkgYWxzbyBuZWVkIHRvIHN0cmlwIGFuIE1JVCBsaWNlbnNlIHdoZW4gd2UgZGVjaWRlCi0JICAqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkgICogZ3N0L2xldmVsL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9pbml0KToKLQkgICogZ3N0L2xldmVsL2xldmVsLWV4YW1wbGUuYzogKG1lc3NhZ2VfaGFuZGxlciksIChtYWluKToKLQkgIGFkZCBhbiBleGFtcGxlIHRvIGxldmVsIHRoYXQgd2lsbCBzaG93IHVwIGluIHRoZSBkb2NzCi0JICAqIGdzdC9ydHAvVE9ETzoKLQkgIGFkZCBhIG5vdGUgZm9yIHRoZSBmdXR1cmUKLQotMjAwNS0wOS0xNCAxMTo0NDoxMSArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JICBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiBBY3R1YWxseSBkZWZpbmUgdGhlIGRlYnVnIG9iamVjdCBiZWluZyB1c2VkIGluIHdhdmVuYy4gRml4ZXMgIzMxNjIwNQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX2NsYXNzX2luaXQpOgotCSAgQWN0dWFsbHkgZGVmaW5lIHRoZSBkZWJ1ZyBvYmplY3QgYmVpbmcgdXNlZCBpbiB3YXZlbmMuIEZpeGVzICMzMTYyMDUKLQotMjAwNS0wOS0xNCAxMToyMzo0NCArMDAwMCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQHhpcGgub3JnPgotCi0JKiBDaGFuZ2VMb2c6Ci0JKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JICBMaW5rIHNtcHRlIHBsdWdpbiBhZ2FpbnN0IEdTVF9CQVNFX0xJQlMsIHRvIGdldCBsaWJnc3RiYXNlOyBuZWVkZWQgdG8gYnVpbGQgb24gd2luMzIgYXMgdGhpcyBwbHVnaW4gdXNlcyBjb2xsZWN0cGFkcyAuLi4KLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgTGluayBzbXB0ZSBwbHVnaW4gYWdhaW5zdCBHU1RfQkFTRV9MSUJTLCB0byBnZXQgbGliZ3N0YmFzZTsgbmVlZGVkIHRvCi0JICBidWlsZCBvbiB3aW4zMiBhcyB0aGlzIHBsdWdpbiB1c2VzIGNvbGxlY3RwYWRzIChidWcgMzE2MjA0KQotCi0yMDA1LTA5LTEyIDE2OjM3OjA1ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCSAgRml4IHVwIGJvZ3VzIENoYW5nZUxvZyBlbnRyeQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggdXAgYm9ndXMgQ2hhbmdlTG9nIGVudHJ5Ci0KLTIwMDUtMDktMTIgMTY6MTQ6NDggKzAwMDAgIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLQotCSAgYXV0b2dlbi5zaCAocGFja2FnZSk6IE5vdyB0eXBlICdtYWtlJyB0byBidWlsZCBnc3QtcGx1Z2lucy1nb29kLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTEyICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBhdXRvZ2VuLnNoIChwYWNrYWdlKTogTm93IHR5cGUgJ21ha2UnIHRvIGJ1aWxkIGdzdC1wbHVnaW5zLWdvb2QuCi0KLTIwMDUtMDktMTEgMTc6NTI6MDkgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb21tb246Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXV0b2RldGVjdC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXZpLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWNhc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVzZHNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZkc3JjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nY29uZmVsZW1lbnRzLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zc2F1ZGlvLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRzcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZsaXAueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbDoKLQkgIGFkZCBzb3VyY2UgbW9kdWxlIHRvIGRvY3M7IHJlaW5zcGVjdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgc291cmNlIG1vZHVsZSB0byBkb2NzOyByZWluc3BlY3QKLQotMjAwNS0wOS0wOSAxNzo1Njo0MyArMDAwMCAgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkgIE1vdmUgZmRzcmMgYmFjayBpbnRvIGdzdHJlYW1lciBjb3JlIGVsZW1lbnRzLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2Zkc3JjL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZmRzcmMvZ3N0ZmRzcmMuYzoKLQkgICogZ3N0L2Zkc3JjL2dzdGZkc3JjLmg6Ci0JICBNb3ZlIGZkc3JjIGJhY2sgaW50byBnc3RyZWFtZXIgY29yZSBlbGVtZW50cy4KLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmM6IChnc3RfbGV2ZWxfY2xhc3NfaW5pdCksCi0JICAoZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCk6Ci0JICAqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF9zZXRfcHJvcGVydHkpOgotCSAgQmFzZXRyYW5zZm9ybSBjaGFuZ2VzLgotCi0yMDA1LTA5LTA5IDE2OjExOjQ4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzoKLQkqIGV4dC9qcGVnL3Ntb2tlY29kZWMuYzoKLQkgIGZpeCBjb21waWxlciB3YXJuaW5ncwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggY29tcGlsZXIgd2FybmluZ3MKLQotMjAwNS0wOS0wOSAxMTowOTo0OSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkgIGdzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbjogc3BlYyBmaWxlIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgc3BlYyBmaWxlIGZpeGVzCi0JICAqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpLAotCSAgKGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyKSwgKGdzdF9tdWx0aXVkcHNpbmtfYWRkKSwKLQkgIChnc3RfbXVsdGl1ZHBzaW5rX2NsZWFyKToKLQkgIGl0IGFjdHVhbGx5IGhlbHBzIHRvIGFjdHVhbGx5IHN0cmVhbSBpZiB3ZSBob29rIHVwIHRoZQotCSAgYWRkIHNpZ25hbCB0byBhbiBhY3R1YWwgaW1wbGVtZW50YXRpb24KLQkgICogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfc3RhcnQpOgotCSAgc29tZSBkZWJ1Z2dpbmcKLQotMjAwNS0wOS0wOCAxNjo1ODo0MCArMDAwMCAgRmxhdmlvIE9saXZlaXJhIDxmbGF2aW8ub2xpdmVpcmFAaW5kdC5vcmcuYnI+Ci0KLQkqIGV4dC9qcGVnL01ha2VmaWxlLmFtOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOgotCSogZXh0L2pwZWcvZ3N0c21va2VlbmMuYzoKLQkgIGpwZ2VuYyBwb3J0ZWQgdG8gR1NUcmVhbWVyIDAuOQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBqcGdlbmMgcG9ydGVkIHRvIEdTVHJlYW1lciAwLjkKLQotMjAwNS0wOS0wOCAxNjoyNjoxNyArMDAwMCAgRmxhdmlvIE9saXZlaXJhIDxmbGF2aW8ub2xpdmVpcmFAaW5kdC5vcmcuYnI+Ci0KLQkqIENoYW5nZUxvZzoKLQkgIGpwZWdlbmMgcG9ydGVkIHRvIEdTdHJlYW1lciAwLjkKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAganBlZ2VuYyBwb3J0ZWQgdG8gR1N0cmVhbWVyIDAuOQotCi0yMDA1LTA5LTA3IDEzOjQ5OjM3ICswMDAwICBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkgIGV4dC86IGdzdHRhZ2ludGVyZmFjZS5oIC0+IGdzdHRhZ3NldHRlci5oCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JICAqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzoKLQkgICogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6Ci0JICBnc3R0YWdpbnRlcmZhY2UuaCAtPiBnc3R0YWdzZXR0ZXIuaAotCi0yMDA1LTA5LTA2IDIzOjMwOjAzICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSAgUG9ydCB0byAwLjkgYW5kIHJlLWVuYWJsZSBlZmVuY2UgcGx1Z2luLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGNvbmZpZ3VyZS5hYzoKLQkgICogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZGVidWcvZWZlbmNlLmM6IChnc3RfZWZlbmNlX2NsYXNzX2luaXQpLCAoZ3N0X2VmZW5jZV9pbml0KSwKLQkgIChnc3RfZWZlbmNlX2NoYWluKSwgKGdzdF9lZmVuY2VfYnVmZmVyX2FsbG9jKSwgKHBsdWdpbl9pbml0KSwKLQkgIChnc3RfZmVuY2VkX2J1ZmZlcl9maW5hbGl6ZSksIChnc3RfZmVuY2VkX2J1ZmZlcl9jb3B5KSwKLQkgIChnc3RfZmVuY2VkX2J1ZmZlcl9hbGxvYyksIChnc3RfZmVuY2VkX2J1ZmZlcl9jbGFzc19pbml0KSwKLQkgIChnc3RfZmVuY2VkX2J1ZmZlcl9pbml0KSwgKGdzdF9mZW5jZWRfYnVmZmVyX2dldF90eXBlKToKLQkgIFBvcnQgdG8gMC45IGFuZCByZS1lbmFibGUgZWZlbmNlIHBsdWdpbi4KLQotMjAwNS0wOS0wNiAyMTozMToyNSArMDAwMCAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLm5ldD4KLQotCSAgZXh0L2ZsYWMvZ3N0ZmxhY2RlYy4qOiBBZGQgc3VwcG9ydCBmb3IgZmxhYyBmaWxlcyB3aXRoIDI0LzMyIGJpdHMgcGVyIHNhbXBsZTsgYW5kIG1pc2MuIG1pbm9yIGNsZWFuLXVwcy4gU2Vla2luZyBpcyBzLi4uCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgICogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZmxhY19jYXBzX2ZhY3RvcnkpLCAocmF3X2NhcHNfZmFjdG9yeSksCi0JICAoZ3N0X2ZsYWNkZWNfd3JpdGUpLCAoZ3N0X2ZsYWNkZWNfY29udmVydF9zcmMpOgotCSAgKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgZmxhYyBmaWxlcyB3aXRoIDI0LzMyIGJpdHMgcGVyIHNhbXBsZTsgYW5kIG1pc2MuCi0JICBtaW5vciBjbGVhbi11cHMuIFNlZWtpbmcgaXMgc3RpbGwgcGFydGx5IGJyb2tlbiAoZm9yIG1lIGF0IGxlYXN0KS4KLQotMjAwNS0wOS0wNiAxNTo1MDo1OCArMDAwMCAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLQotCSAgZ3N0L3J0cC86IEFkZGVkIG1wZWc0IHZpZGVvIHBheWxvYWQgZW5jb2Rlci9kZWNvZGVyLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JICAqIGdzdC9ydHAvZ3N0cnRwLmM6IChwbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmRlYy5jOiAoZ3N0X3J0cG1wNHZkZWNfZ2V0X3R5cGUpLAotCSAgKGdzdF9ydHBtcDR2ZGVjX2Jhc2VfaW5pdCksIChnc3RfcnRwbXA0dmRlY19jbGFzc19pbml0KSwKLQkgIChnc3RfcnRwbXA0dmRlY19pbml0KSwgKGdzdF9ydHBtcDR2ZGVjX3NldGNhcHMpLAotCSAgKGdzdF9ydHBtcDR2ZGVjX2NoYWluKSwgKGdzdF9ydHBtcDR2ZGVjX3NldF9wcm9wZXJ0eSksCi0JICAoZ3N0X3J0cG1wNHZkZWNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBtcDR2ZGVjX2NoYW5nZV9zdGF0ZSksCi0JICAoZ3N0X3J0cG1wNHZkZWNfcGx1Z2luX2luaXQpOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wNHZkZWMuaDoKLQkgICogZ3N0L3J0cC9nc3RydHBtcDR2ZW5jLmM6IChnc3RfcnRwbXA0dmVuY19nZXRfdHlwZSksCi0JICAoZ3N0X3J0cG1wNHZlbmNfYmFzZV9pbml0KSwgKGdzdF9ydHBtcDR2ZW5jX2NsYXNzX2luaXQpLAotCSAgKGdzdF9ydHBtcDR2ZW5jX2luaXQpLCAoZ3N0X3J0cG1wNHZlbmNfc2V0Y2FwcyksCi0JICAoZ3N0X3J0cG1wNHZlbmNfZmx1c2gpLCAoZ3N0X3J0cG1wNHZlbmNfY2hhaW4pLAotCSAgKGdzdF9ydHBtcDR2ZW5jX3NldF9wcm9wZXJ0eSksIChnc3RfcnRwbXA0dmVuY19nZXRfcHJvcGVydHkpLAotCSAgKGdzdF9ydHBtcDR2ZW5jX2NoYW5nZV9zdGF0ZSksIChnc3RfcnRwbXA0dmVuY19wbHVnaW5faW5pdCk6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXA0dmVuYy5oOgotCSAgKiBnc3QvcnRwL2dzdHJ0cG1wYWRlYy5jOiAoZ3N0X3J0cG1wYWRlY19jaGFpbik6Ci0JICAqIGdzdC9ydHAvZ3N0cnRwbXBhZW5jLmM6IChnc3RfcnRwbXBhZW5jX2ZsdXNoKToKLQkgIEFkZGVkIG1wZWc0IHZpZGVvIHBheWxvYWQgZW5jb2Rlci9kZWNvZGVyLgotCSAgQWRkZWQgc29tZSBkb2NzIGluIG1wYSBwYXlsb2FkZXIuCi0KLTIwMDUtMDktMDYgMTQ6MDY6NDcgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBiYWNrIHRvIEhFQUQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYmFjayB0byBIRUFECi0KLT09PSByZWxlYXNlIDAuOS4xID09PQotCi0yMDA1LTA5LTA2IDE0OjA1OjMzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogQ2hhbmdlTG9nOgotCSogTkVXUzoKLQkqIFJFQURNRToKLQkqIFJFTEVBU0U6Ci0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSogY29uZmlndXJlLmFjOgotCSAgcmVsZWFzaW5nIDAuOS4yCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbGVhc2luZyAwLjkuMgotCi0yMDA1LTA5LTA1IDE3OjIwOjI4ICswMDAwICBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6Ci0JICBGaXggdXAgYWxsIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBGaXggdXAgYWxsIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb25zLgotCi0yMDA1LTA5LTA1IDE2OjI4OjE2ICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkgIGV4dC9kdi9nc3RkdmRlbXV4LmMgKGdzdF9kdmRlbXV4X2NoYWluKTogTW92ZSB0aGUgcGFkIGFkZGluZyBoZXJlIGZyb20gdGhlIHN0YXRlIGNoYW5nZSBoYW5kbGVyLCBzbyB3ZSBmaXJlIHNpZ25hbHMgdy4uLgotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICAyMDA1LTA5LTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCSAgKiBleHQvZHYvZ3N0ZHZkZW11eC5jIChnc3RfZHZkZW11eF9jaGFpbik6IE1vdmUgdGhlIHBhZCBhZGRpbmcKLQkgIGhlcmUgZnJvbSB0aGUgc3RhdGUgY2hhbmdlIGhhbmRsZXIsIHNvIHdlIGZpcmUgc2lnbmFscyB3aXRob3V0Ci0JICBob2xkaW5nIHRoZSBzdGF0ZSBsb2NrLgotCi0yMDA1LTA5LTA1IDE1OjEwOjE4ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOgotCSAgY2xlYW5pbmcgdXAgYmFkCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNsZWFuaW5nIHVwIGJhZAotCi0yMDA1LTA5LTA1IDEzOjE4OjQyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy8uZ2l0aWdub3JlOgotCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JICBtYWludGVuYW5jZSBjb21taXRzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIG1haW50ZW5hbmNlIGNvbW1pdHMKLQotMjAwNS0wOS0wNCAxNTowOTozMyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QtYnVpbGQuc3RhbXA6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC5zdGFtcDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi0xMzk0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFscGhhLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXNkc2luay54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmRzcmMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsYWMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdjb25mZWxlbWVudHMueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWxldmVsLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbDoKLQkqIGRvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zbXB0ZS54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlZXgueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXVkcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9ib3gueG1sOgotCSogZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvZmxpcC54bWw6Ci0JKiBkb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFyc2UueG1sOgotCSAgZGlzdGNoZWNrIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGRpc3RjaGVjayBmaXhlcwotCi0yMDA1LTA5LTA0IDExOjUwOjQ3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBhdXRvZ2VuLnNoOgotCSogY29tbW9uOgotCSogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkgIGZpeCBkaXN0Y2hlY2sKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgZml4IGRpc3RjaGVjawotCi0yMDA1LTA5LTAyIDE1OjU2OjUyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluOgotCSAgdmFyaW91cyBzcGVjIGZpeGVzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHZhcmlvdXMgc3BlYyBmaXhlcwotCi0yMDA1LTA5LTAyIDE1OjQ0OjUwICswMDAwICBBbmR5IFdpbmdvIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGNoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JKiBleGFtcGxlcy9nc3RwbGF5L3BsYXllci5jOgotCSogZXhhbXBsZXMvc3RhdHMvbXAyb2dnLmM6Ci0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzoKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzoKLQkqIGV4dC9lc2QvZXNkbW9uLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzoKLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrYW5pbWF0aW9uLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6Ci0JKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZGVjLmM6Ci0JKiBleHQvbWlrbW9kL2dzdG1pa21vZC5jOgotCSogZXh0L3BhbmdvL2dzdHRleHRvdmVybGF5LmM6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZ3N0L2FscGhhL2dzdGFscGhhLmM6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmM6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOgotCSogZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6Ci0JKiBnc3QvZGVidWcvZ3N0bmF2aWdhdGlvbnRlc3QuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6Ci0JKiBnc3QvZmRzcmMvZ3N0ZmRzcmMuYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jOgotCSogZ3N0L29sZGNvcmUvZ3N0bWQ1c2luay5jOgotCSogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmM6Ci0JKiBnc3Qvb2xkY29yZS9nc3RwaXBlZmlsdGVyLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cEwxNmVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXJzZS5jOgotCSogZ3N0L3J0cC9nc3RydHBMMTZwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBhbXJwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVjLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cGdzbWVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXJzZS5jOgotCSogZ3N0L3J0cC9nc3RydHBnc21wYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGVuYy5jOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5jOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZWMuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuYzoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZW5jLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYXBheS5jOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOgotCSogZ3N0L3Ntb290aHdhdmUvZ3N0c21vb3Rod2F2ZS5jOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6Ci0JKiBnc3QvdWRwL2dzdG11bHRpdWRwc2luay5jOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JKiBwby92aS5wbzoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50LmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50LmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmM6Ci0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYzoKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBBbGwgcGx1Z2lucyB1cGRhdGVkIGZvciBlbGVtZW50IHN0YXRlIGNoYW5nZXMuCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIDIwMDUtMDktMDIgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0JICAqIEFsbCBwbHVnaW5zIHVwZGF0ZWQgZm9yIGVsZW1lbnQgc3RhdGUgY2hhbmdlcy4KLQotMjAwNS0wOS0wMSAyMToyNDo1NyArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGV4dC9hYWxpYi9NYWtlZmlsZS5hbToKLQkgIGZpeCBidWlsZCBhZnRlciBjbGVhbmluZyB1cCBteSB2b21pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYnVpbGQgYWZ0ZXIgY2xlYW5pbmcgdXAgbXkgdm9taXQKLQotMjAwNS0wOS0wMSAyMToyMzowOSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGV4dC9hYWxpYi9NYWtlZmlsZS5hbToKLQkgIGZpeCBidWlsZCBhZnRlciBjbGVhbmluZyB1cCBteSB2b21pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYnVpbGQgYWZ0ZXIgY2xlYW5pbmcgdXAgbXkgdm9taXQKLQotMjAwNS0wOS0wMSAyMToyMDo0NSArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9zbXB0ZS9NYWtlZmlsZS5hbToKLQkgIGZpeCBidWlsZCBhZnRlciBjbGVhbmluZyB1cCBteSB2b21pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYnVpbGQgYWZ0ZXIgY2xlYW5pbmcgdXAgbXkgdm9taXQKLQotMjAwNS0wOS0wMSAyMToxNTozMCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIGdzdC9zbXB0ZS9NYWtlZmlsZS5hbToKLQkgIGZpeCBidWlsZCBhZnRlciBjbGVhbmluZyB1cCBteSB2b21pdAotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBmaXggYnVpbGQgYWZ0ZXIgY2xlYW5pbmcgdXAgbXkgdm9taXQKLQotMjAwNS0wOS0wMSAyMDoyMzoyMiArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIE1ha2VmaWxlLmFtOgotCSogY2hlY2svLmdpdGlnbm9yZToKLQkqIGNoZWNrL01ha2VmaWxlLmFtOgotCSogY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIGNoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JKiBjb21tb246Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSogdGVzdHMvY2hlY2svLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL01ha2VmaWxlLmFtOgotCSogdGVzdHMvY2hlY2svZWxlbWVudHMvLmdpdGlnbm9yZToKLQkqIHRlc3RzL2NoZWNrL2VsZW1lbnRzL2xldmVsLmM6Ci0JICBBbmRyZXdpbyBQYXRyaWNrb2ZvcnVzIFdpbmdvbnltdXMgLSA1IGFkZGl0aW9uYWwgdGVzdHMgZm9yIHlvdXIgc2lucwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBBbmRyZXdpbyBQYXRyaWNrb2ZvcnVzIFdpbmdvbnltdXMgLSA1IGFkZGl0aW9uYWwgdGVzdHMgZm9yIHlvdXIgc2lucwotCSAgQWRkIGEgcmVncmVzc2lvbiB0ZXN0IGZvciBsZXZlbCBhbmQgZml4IGEgY2FzdGluZyBidWcgdGhhdCBtYWRlIHRoZSBhZGRpdGlvbmFsCi0JICBjaGFubmVscyB0dXJuIG91dCB3cm9uZwotCi0yMDA1LTA5LTAxIDE3OjU1OjE0ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYWRkIGRvY3MgdG8gYnVpbGQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgKiBNYWtlZmlsZS5hbToKLQkgICogY29uZmlndXJlLmFjOgotCSAgYWRkIGRvY3MgdG8gYnVpbGQKLQkgICogY29tbW9uL3BsdWdpbnMueHNsOgotCSAgd3JhcCBEZXNjcmlwdGlvbiBpbnRvIGEgcmVmc2VjdDIKLQkgICogZG9jcy9NYWtlZmlsZS5hbToKLQkgICogZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtOgotCSAgKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRvY3Muc2dtbDoKLQkgICogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JICAqIGdzdC9nb29tL01ha2VmaWxlLmFtOgotCSAgKiBnc3QvZ29vbS9nc3Rnb29tLmM6IChnc3RfZ29vbV9nZXRfdHlwZSksIChnc3RfZ29vbV9iYXNlX2luaXQpLAotCSAgKGdzdF9nb29tX2NsYXNzX2luaXQpLCAoZ3N0X2dvb21faW5pdCksIChnc3RfZ29vbV9kaXNwb3NlKSwKLQkgIChnc3RfZ29vbV9zaW5rX3NldGNhcHMpLCAoZ3N0X2dvb21fc3JjX3NldGNhcHMpLAotCSAgKGdzdF9nb29tX3NyY19uZWdvdGlhdGUpLCAoZ3N0X2dvb21fZXZlbnQpLCAoZ3N0X2dvb21fY2hhaW4pLAotCSAgKGdzdF9nb29tX2NoYW5nZV9zdGF0ZSk6Ci0JICAqIGdzdC9nb29tL2dzdGdvb20uaDoKLQkgIEdzdEdPT00gLT4gR3N0R29vbQotCSAgYWRkIGFuIGV4YW1wbGUgbGF1bmNoIGxpbmUKLQkgICogZ3N0L2xldmVsL2dzdGxldmVsLmg6Ci0JICAqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6Ci0JICBjbGVhbnVwcwotCi0yMDA1LTA4LTMxIDE2OjI4OjA1ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZ3N0L2R2ZGxwY21kZWMvLmdpdGlnbm9yZToKLQkqIGdzdC9kdmRscGNtZGVjL01ha2VmaWxlLmFtOgotCSogZ3N0L2R2ZGxwY21kZWMvZ3N0ZHZkbHBjbWRlYy5jOgotCSogZ3N0L2R2ZGxwY21kZWMvZ3N0ZHZkbHBjbWRlYy5oOgotCSAgcmVtb3ZlIGR2ZGxwY21kZWMsIGl0J3MgZHZkIHN0dWZmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIHJlbW92ZSBkdmRscGNtZGVjLCBpdCdzIGR2ZCBzdHVmZgotCi0yMDA1LTA4LTMwIDE5OjQxOjEyICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvZ2V0dGV4dC5oOgotCSogZ3N0LWxpYnMvZ3N0L2dzdC1pMThuLXBsdWdpbi5oOgotCSAgYWRkIHNvbWUgaTE4biBoZWFkZXJzCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGFkZCBzb21lIGkxOG4gaGVhZGVycwotCi0yMDA1LTA4LTMwIDE5OjI0OjM3ICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9wbHVnaW5zLy5naXRpZ25vcmU6Ci0JICBpZ25vcmUgbW9yZQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBpZ25vcmUgbW9yZQotCi0yMDA1LTA4LTMwIDE5OjI0OjAzICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSogZG9jcy9NYWtlZmlsZS5hbToKLQkgIE1ha2VmaWxlLmFtCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIE1ha2VmaWxlLmFtCi0KLTIwMDUtMDgtMzAgMTk6MjA6MDIgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiBkb2NzL3VwbG9hZC5tYWs6Ci0JKiBkb2NzL3ZlcnNpb24uZW50aXRpZXMuaW46Ci0JICBjb21taXQgbmV3IHN0dWZmCi0JICBPcmlnaW5hbCBjb21taXQgbWVzc2FnZSBmcm9tIENWUzoKLQkgIGNvbW1pdCBuZXcgc3R1ZmYKLQotMjAwNS0wOC0zMCAxOTowMToxOCArMDAwMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0KLQkqIENoYW5nZUxvZzoKLQkqIGNvbW1vbjoKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGRvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sOgotCSogZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zZWN0aW9ucy50eHQ6Ci0JKiBkb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnR5cGVzOgotCSAgZG9jdW1lbnQgZWxlbWVudHMgYW5kIHBsdWdpbnMuICBTaGF6YW0gIQotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBkb2N1bWVudCBlbGVtZW50cyBhbmQgcGx1Z2lucy4gIFNoYXphbSAhCi0KLTIwMDUtMDgtMzAgMTc6Mzc6MDAgKzAwMDAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hc0BhcGVzdGFhcnQub3JnPgotCi0JKiAuZ2l0aWdub3JlOgotCSogQ09QWUlORzoKLQkqIFJFTEVBU0U6Ci0JKiBnc3QtcGx1Z2lucy1nb29kLnNwZWMuaW46Ci0JICBhZGQgc29tZSBmaWxlcwotCSAgT3JpZ2luYWwgY29tbWl0IG1lc3NhZ2UgZnJvbSBDVlM6Ci0JICBhZGQgc29tZSBmaWxlcwotCi0yMDAxLTEyLTE3IDE4OjM3OjAxICswMDAwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotCSAgYnVpbGRpbmcgdXAgc3BlZWQKLQkgIE9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGZyb20gQ1ZTOgotCSAgYnVpbGRpbmcgdXAgc3BlZWQKLQpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOTk4NDAuLjAwMDAwMDAKLS0tIGEvSU5TVEFMTAorKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBACi1JbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zCi0qKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUNvcHlyaWdodCAoQykgMTk5NC0xOTk2LCAxOTk5LTIwMDIsIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi1JbmMuCi0KLSAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCi1hcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKLW5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLAotd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZC4KLQotQmFzaWMgSW5zdGFsbGF0aW9uCi09PT09PT09PT09PT09PT09PT0KLQotICAgQnJpZWZseSwgdGhlIHNoZWxsIGNvbW1hbmQgYC4vY29uZmlndXJlICYmIG1ha2UgJiYgbWFrZSBpbnN0YWxsJwotc2hvdWxkIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBpbnN0YWxsIHRoaXMgcGFja2FnZS4gIFRoZSBmb2xsb3dpbmcKLW1vcmUtZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmljOyBzZWUgdGhlIGBSRUFETUUnIGZpbGUgZm9yCi1pbnN0cnVjdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlLiAgU29tZSBwYWNrYWdlcyBwcm92aWRlIHRoaXMKLWBJTlNUQUxMJyBmaWxlIGJ1dCBkbyBub3QgaW1wbGVtZW50IGFsbCBvZiB0aGUgZmVhdHVyZXMgZG9jdW1lbnRlZAotYmVsb3cuICBUaGUgbGFjayBvZiBhbiBvcHRpb25hbCBmZWF0dXJlIGluIGEgZ2l2ZW4gcGFja2FnZSBpcyBub3QKLW5lY2Vzc2FyaWx5IGEgYnVnLiAgTW9yZSByZWNvbW1lbmRhdGlvbnMgZm9yIEdOVSBwYWNrYWdlcyBjYW4gYmUgZm91bmQKLWluICpub3RlIE1ha2VmaWxlIENvbnZlbnRpb25zOiAoc3RhbmRhcmRzKU1ha2VmaWxlIENvbnZlbnRpb25zLgotCi0gICBUaGUgYGNvbmZpZ3VyZScgc2hlbGwgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGNvcnJlY3QgdmFsdWVzIGZvcgotdmFyaW91cyBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4gIEl0IHVzZXMKLXRob3NlIHZhbHVlcyB0byBjcmVhdGUgYSBgTWFrZWZpbGUnIGluIGVhY2ggZGlyZWN0b3J5IG9mIHRoZSBwYWNrYWdlLgotSXQgbWF5IGFsc28gY3JlYXRlIG9uZSBvciBtb3JlIGAuaCcgZmlsZXMgY29udGFpbmluZyBzeXN0ZW0tZGVwZW5kZW50Ci1kZWZpbml0aW9ucy4gIEZpbmFsbHksIGl0IGNyZWF0ZXMgYSBzaGVsbCBzY3JpcHQgYGNvbmZpZy5zdGF0dXMnIHRoYXQKLXlvdSBjYW4gcnVuIGluIHRoZSBmdXR1cmUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW5kIGEKLWZpbGUgYGNvbmZpZy5sb2cnIGNvbnRhaW5pbmcgY29tcGlsZXIgb3V0cHV0ICh1c2VmdWwgbWFpbmx5IGZvcgotZGVidWdnaW5nIGBjb25maWd1cmUnKS4KLQotICAgSXQgY2FuIGFsc28gdXNlIGFuIG9wdGlvbmFsIGZpbGUgKHR5cGljYWxseSBjYWxsZWQgYGNvbmZpZy5jYWNoZScKLWFuZCBlbmFibGVkIHdpdGggYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnIG9yIHNpbXBseSBgLUMnKSB0aGF0IHNhdmVzCi10aGUgcmVzdWx0cyBvZiBpdHMgdGVzdHMgdG8gc3BlZWQgdXAgcmVjb25maWd1cmluZy4gIENhY2hpbmcgaXMKLWRpc2FibGVkIGJ5IGRlZmF1bHQgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoIGFjY2lkZW50YWwgdXNlIG9mIHN0YWxlCi1jYWNoZSBmaWxlcy4KLQotICAgSWYgeW91IG5lZWQgdG8gZG8gdW51c3VhbCB0aGluZ3MgdG8gY29tcGlsZSB0aGUgcGFja2FnZSwgcGxlYXNlIHRyeQotdG8gZmlndXJlIG91dCBob3cgYGNvbmZpZ3VyZScgY291bGQgY2hlY2sgd2hldGhlciB0byBkbyB0aGVtLCBhbmQgbWFpbAotZGlmZnMgb3IgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGluIHRoZSBgUkVBRE1FJyBzbyB0aGV5IGNhbgotYmUgY29uc2lkZXJlZCBmb3IgdGhlIG5leHQgcmVsZWFzZS4gIElmIHlvdSBhcmUgdXNpbmcgdGhlIGNhY2hlLCBhbmQgYXQKLXNvbWUgcG9pbnQgYGNvbmZpZy5jYWNoZScgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UKLW1heSByZW1vdmUgb3IgZWRpdCBpdC4KLQotICAgVGhlIGZpbGUgYGNvbmZpZ3VyZS5hYycgKG9yIGBjb25maWd1cmUuaW4nKSBpcyB1c2VkIHRvIGNyZWF0ZQotYGNvbmZpZ3VyZScgYnkgYSBwcm9ncmFtIGNhbGxlZCBgYXV0b2NvbmYnLiAgWW91IG5lZWQgYGNvbmZpZ3VyZS5hYycgaWYKLXlvdSB3YW50IHRvIGNoYW5nZSBpdCBvciByZWdlbmVyYXRlIGBjb25maWd1cmUnIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbgotb2YgYGF1dG9jb25mJy4KLQotICAgVGhlIHNpbXBsZXN0IHdheSB0byBjb21waWxlIHRoaXMgcGFja2FnZSBpczoKLQotICAxLiBgY2QnIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGFuZCB0eXBlCi0gICAgIGAuL2NvbmZpZ3VyZScgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIGZvciB5b3VyIHN5c3RlbS4KLQotICAgICBSdW5uaW5nIGBjb25maWd1cmUnIG1pZ2h0IHRha2UgYSB3aGlsZS4gIFdoaWxlIHJ1bm5pbmcsIGl0IHByaW50cwotICAgICBzb21lIG1lc3NhZ2VzIHRlbGxpbmcgd2hpY2ggZmVhdHVyZXMgaXQgaXMgY2hlY2tpbmcgZm9yLgotCi0gIDIuIFR5cGUgYG1ha2UnIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UuCi0KLSAgMy4gT3B0aW9uYWxseSwgdHlwZSBgbWFrZSBjaGVjaycgdG8gcnVuIGFueSBzZWxmLXRlc3RzIHRoYXQgY29tZSB3aXRoCi0gICAgIHRoZSBwYWNrYWdlLCBnZW5lcmFsbHkgdXNpbmcgdGhlIGp1c3QtYnVpbHQgdW5pbnN0YWxsZWQgYmluYXJpZXMuCi0KLSAgNC4gVHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIHRoZSBwcm9ncmFtcyBhbmQgYW55IGRhdGEgZmlsZXMgYW5kCi0gICAgIGRvY3VtZW50YXRpb24uICBXaGVuIGluc3RhbGxpbmcgaW50byBhIHByZWZpeCBvd25lZCBieSByb290LCBpdCBpcwotICAgICByZWNvbW1lbmRlZCB0aGF0IHRoZSBwYWNrYWdlIGJlIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGFzIGEgcmVndWxhcgotICAgICB1c2VyLCBhbmQgb25seSB0aGUgYG1ha2UgaW5zdGFsbCcgcGhhc2UgZXhlY3V0ZWQgd2l0aCByb290Ci0gICAgIHByaXZpbGVnZXMuCi0KLSAgNS4gT3B0aW9uYWxseSwgdHlwZSBgbWFrZSBpbnN0YWxsY2hlY2snIHRvIHJlcGVhdCBhbnkgc2VsZi10ZXN0cywgYnV0Ci0gICAgIHRoaXMgdGltZSB1c2luZyB0aGUgYmluYXJpZXMgaW4gdGhlaXIgZmluYWwgaW5zdGFsbGVkIGxvY2F0aW9uLgotICAgICBUaGlzIHRhcmdldCBkb2VzIG5vdCBpbnN0YWxsIGFueXRoaW5nLiAgUnVubmluZyB0aGlzIHRhcmdldCBhcyBhCi0gICAgIHJlZ3VsYXIgdXNlciwgcGFydGljdWxhcmx5IGlmIHRoZSBwcmlvciBgbWFrZSBpbnN0YWxsJyByZXF1aXJlZAotICAgICByb290IHByaXZpbGVnZXMsIHZlcmlmaWVzIHRoYXQgdGhlIGluc3RhbGxhdGlvbiBjb21wbGV0ZWQKLSAgICAgY29ycmVjdGx5LgotCi0gIDYuIFlvdSBjYW4gcmVtb3ZlIHRoZSBwcm9ncmFtIGJpbmFyaWVzIGFuZCBvYmplY3QgZmlsZXMgZnJvbSB0aGUKLSAgICAgc291cmNlIGNvZGUgZGlyZWN0b3J5IGJ5IHR5cGluZyBgbWFrZSBjbGVhbicuICBUbyBhbHNvIHJlbW92ZSB0aGUKLSAgICAgZmlsZXMgdGhhdCBgY29uZmlndXJlJyBjcmVhdGVkIChzbyB5b3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yCi0gICAgIGEgZGlmZmVyZW50IGtpbmQgb2YgY29tcHV0ZXIpLCB0eXBlIGBtYWtlIGRpc3RjbGVhbicuICBUaGVyZSBpcwotICAgICBhbHNvIGEgYG1ha2UgbWFpbnRhaW5lci1jbGVhbicgdGFyZ2V0LCBidXQgdGhhdCBpcyBpbnRlbmRlZCBtYWlubHkKLSAgICAgZm9yIHRoZSBwYWNrYWdlJ3MgZGV2ZWxvcGVycy4gIElmIHlvdSB1c2UgaXQsIHlvdSBtYXkgaGF2ZSB0byBnZXQKLSAgICAgYWxsIHNvcnRzIG9mIG90aGVyIHByb2dyYW1zIGluIG9yZGVyIHRvIHJlZ2VuZXJhdGUgZmlsZXMgdGhhdCBjYW1lCi0gICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICA3LiBPZnRlbiwgeW91IGNhbiBhbHNvIHR5cGUgYG1ha2UgdW5pbnN0YWxsJyB0byByZW1vdmUgdGhlIGluc3RhbGxlZAotICAgICBmaWxlcyBhZ2Fpbi4gIEluIHByYWN0aWNlLCBub3QgYWxsIHBhY2thZ2VzIGhhdmUgdGVzdGVkIHRoYXQKLSAgICAgdW5pbnN0YWxsYXRpb24gd29ya3MgY29ycmVjdGx5LCBldmVuIHRob3VnaCBpdCBpcyByZXF1aXJlZCBieSB0aGUKLSAgICAgR05VIENvZGluZyBTdGFuZGFyZHMuCi0KLSAgOC4gU29tZSBwYWNrYWdlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgdXNlIEF1dG9tYWtlLCBwcm92aWRlIGBtYWtlCi0gICAgIGRpc3RjaGVjaycsIHdoaWNoIGNhbiBieSB1c2VkIGJ5IGRldmVsb3BlcnMgdG8gdGVzdCB0aGF0IGFsbCBvdGhlcgotICAgICB0YXJnZXRzIGxpa2UgYG1ha2UgaW5zdGFsbCcgYW5kIGBtYWtlIHVuaW5zdGFsbCcgd29yayBjb3JyZWN0bHkuCi0gICAgIFRoaXMgdGFyZ2V0IGlzIGdlbmVyYWxseSBub3QgcnVuIGJ5IGVuZCB1c2Vycy4KLQotQ29tcGlsZXJzIGFuZCBPcHRpb25zCi09PT09PT09PT09PT09PT09PT09PT0KLQotICAgU29tZSBzeXN0ZW1zIHJlcXVpcmUgdW51c3VhbCBvcHRpb25zIGZvciBjb21waWxhdGlvbiBvciBsaW5raW5nIHRoYXQKLXRoZSBgY29uZmlndXJlJyBzY3JpcHQgZG9lcyBub3Qga25vdyBhYm91dC4gIFJ1biBgLi9jb25maWd1cmUgLS1oZWxwJwotZm9yIGRldGFpbHMgb24gc29tZSBvZiB0aGUgcGVydGluZW50IGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQotICAgWW91IGNhbiBnaXZlIGBjb25maWd1cmUnIGluaXRpYWwgdmFsdWVzIGZvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLWJ5IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LiAgSGVyZQotaXMgYW4gZXhhbXBsZToKLQotICAgICAuL2NvbmZpZ3VyZSBDQz1jOTkgQ0ZMQUdTPS1nIExJQlM9LWxwb3NpeAotCi0gICAqTm90ZSBEZWZpbmluZyBWYXJpYWJsZXM6OiwgZm9yIG1vcmUgZGV0YWlscy4KLQotQ29tcGlsaW5nIEZvciBNdWx0aXBsZSBBcmNoaXRlY3R1cmVzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgWW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBtb3JlIHRoYW4gb25lIGtpbmQgb2YgY29tcHV0ZXIgYXQgdGhlCi1zYW1lIHRpbWUsIGJ5IHBsYWNpbmcgdGhlIG9iamVjdCBmaWxlcyBmb3IgZWFjaCBhcmNoaXRlY3R1cmUgaW4gdGhlaXIKLW93biBkaXJlY3RvcnkuICBUbyBkbyB0aGlzLCB5b3UgY2FuIHVzZSBHTlUgYG1ha2UnLiAgYGNkJyB0byB0aGUKLWRpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudCB0aGUgb2JqZWN0IGZpbGVzIGFuZCBleGVjdXRhYmxlcyB0byBnbyBhbmQgcnVuCi10aGUgYGNvbmZpZ3VyZScgc2NyaXB0LiAgYGNvbmZpZ3VyZScgYXV0b21hdGljYWxseSBjaGVja3MgZm9yIHRoZQotc291cmNlIGNvZGUgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGBjb25maWd1cmUnIGlzIGluIGFuZCBpbiBgLi4nLiAgVGhpcwotaXMga25vd24gYXMgYSAiVlBBVEgiIGJ1aWxkLgotCi0gICBXaXRoIGEgbm9uLUdOVSBgbWFrZScsIGl0IGlzIHNhZmVyIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG9uZQotYXJjaGl0ZWN0dXJlIGF0IGEgdGltZSBpbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LiAgQWZ0ZXIgeW91IGhhdmUKLWluc3RhbGxlZCB0aGUgcGFja2FnZSBmb3Igb25lIGFyY2hpdGVjdHVyZSwgdXNlIGBtYWtlIGRpc3RjbGVhbicgYmVmb3JlCi1yZWNvbmZpZ3VyaW5nIGZvciBhbm90aGVyIGFyY2hpdGVjdHVyZS4KLQotICAgT24gTWFjT1MgWCAxMC41IGFuZCBsYXRlciBzeXN0ZW1zLCB5b3UgY2FuIGNyZWF0ZSBsaWJyYXJpZXMgYW5kCi1leGVjdXRhYmxlcyB0aGF0IHdvcmsgb24gbXVsdGlwbGUgc3lzdGVtIHR5cGVzLS1rbm93biBhcyAiZmF0IiBvcgotInVuaXZlcnNhbCIgYmluYXJpZXMtLWJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgYC1hcmNoJyBvcHRpb25zIHRvIHRoZQotY29tcGlsZXIgYnV0IG9ubHkgYSBzaW5nbGUgYC1hcmNoJyBvcHRpb24gdG8gdGhlIHByZXByb2Nlc3Nvci4gIExpa2UKLXRoaXM6Ci0KLSAgICAgLi9jb25maWd1cmUgQ0M9ImdjYyAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQiIFwKLSAgICAgICAgICAgICAgICAgQ1hYPSJnKysgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IiBcCi0gICAgICAgICAgICAgICAgIENQUD0iZ2NjIC1FIiBDWFhDUFA9ImcrKyAtRSIKLQotICAgVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBwcm9kdWNlIHdvcmtpbmcgb3V0cHV0IGluIGFsbCBjYXNlcywgeW91Ci1tYXkgaGF2ZSB0byBidWlsZCBvbmUgYXJjaGl0ZWN0dXJlIGF0IGEgdGltZSBhbmQgY29tYmluZSB0aGUgcmVzdWx0cwotdXNpbmcgdGhlIGBsaXBvJyB0b29sIGlmIHlvdSBoYXZlIHByb2JsZW1zLgotCi1JbnN0YWxsYXRpb24gTmFtZXMKLT09PT09PT09PT09PT09PT09PQotCi0gICBCeSBkZWZhdWx0LCBgbWFrZSBpbnN0YWxsJyBpbnN0YWxscyB0aGUgcGFja2FnZSdzIGNvbW1hbmRzIHVuZGVyCi1gL3Vzci9sb2NhbC9iaW4nLCBpbmNsdWRlIGZpbGVzIHVuZGVyIGAvdXNyL2xvY2FsL2luY2x1ZGUnLCBldGMuICBZb3UKLWNhbiBzcGVjaWZ5IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBgL3Vzci9sb2NhbCcgYnkgZ2l2aW5nCi1gY29uZmlndXJlJyB0aGUgb3B0aW9uIGAtLXByZWZpeD1QUkVGSVgnLCB3aGVyZSBQUkVGSVggbXVzdCBiZSBhbgotYWJzb2x1dGUgZmlsZSBuYW1lLgotCi0gICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgotYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKLXBhc3MgdGhlIG9wdGlvbiBgLS1leGVjLXByZWZpeD1QUkVGSVgnIHRvIGBjb25maWd1cmUnLCB0aGUgcGFja2FnZSB1c2VzCi1QUkVGSVggYXMgdGhlIHByZWZpeCBmb3IgaW5zdGFsbGluZyBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLgotRG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZGF0YSBmaWxlcyBzdGlsbCB1c2UgdGhlIHJlZ3VsYXIgcHJlZml4LgotCi0gICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCi1vcHRpb25zIGxpa2UgYC0tYmluZGlyPURJUicgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCi1raW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKLXlvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uICBJbiBnZW5lcmFsLCB0aGUKLWRlZmF1bHQgZm9yIHRoZXNlIG9wdGlvbnMgaXMgZXhwcmVzc2VkIGluIHRlcm1zIG9mIGAke3ByZWZpeH0nLCBzbyB0aGF0Ci1zcGVjaWZ5aW5nIGp1c3QgYC0tcHJlZml4JyB3aWxsIGFmZmVjdCBhbGwgb2YgdGhlIG90aGVyIGRpcmVjdG9yeQotc3BlY2lmaWNhdGlvbnMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5IHByb3ZpZGVkLgotCi0gICBUaGUgbW9zdCBwb3J0YWJsZSB3YXkgdG8gYWZmZWN0IGluc3RhbGxhdGlvbiBsb2NhdGlvbnMgaXMgdG8gcGFzcyB0aGUKLWNvcnJlY3QgbG9jYXRpb25zIHRvIGBjb25maWd1cmUnOyBob3dldmVyLCBtYW55IHBhY2thZ2VzIHByb3ZpZGUgb25lIG9yCi1ib3RoIG9mIHRoZSBmb2xsb3dpbmcgc2hvcnRjdXRzIG9mIHBhc3NpbmcgdmFyaWFibGUgYXNzaWdubWVudHMgdG8gdGhlCi1gbWFrZSBpbnN0YWxsJyBjb21tYW5kIGxpbmUgdG8gY2hhbmdlIGluc3RhbGxhdGlvbiBsb2NhdGlvbnMgd2l0aG91dAotaGF2aW5nIHRvIHJlY29uZmlndXJlIG9yIHJlY29tcGlsZS4KLQotICAgVGhlIGZpcnN0IG1ldGhvZCBpbnZvbHZlcyBwcm92aWRpbmcgYW4gb3ZlcnJpZGUgdmFyaWFibGUgZm9yIGVhY2gKLWFmZmVjdGVkIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCBgbWFrZSBpbnN0YWxsCi1wcmVmaXg9L2FsdGVybmF0ZS9kaXJlY3RvcnknIHdpbGwgY2hvb3NlIGFuIGFsdGVybmF0ZSBsb2NhdGlvbiBmb3IgYWxsCi1kaXJlY3RvcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZgotYCR7cHJlZml4fScuICBBbnkgZGlyZWN0b3JpZXMgdGhhdCB3ZXJlIHNwZWNpZmllZCBkdXJpbmcgYGNvbmZpZ3VyZScsCi1idXQgbm90IGluIHRlcm1zIG9mIGAke3ByZWZpeH0nLCBtdXN0IGVhY2ggYmUgb3ZlcnJpZGRlbiBhdCBpbnN0YWxsCi10aW1lIGZvciB0aGUgZW50aXJlIGluc3RhbGxhdGlvbiB0byBiZSByZWxvY2F0ZWQuICBUaGUgYXBwcm9hY2ggb2YKLW1ha2VmaWxlIHZhcmlhYmxlIG92ZXJyaWRlcyBmb3IgZWFjaCBkaXJlY3RvcnkgdmFyaWFibGUgaXMgcmVxdWlyZWQgYnkKLXRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kIGlkZWFsbHkgY2F1c2VzIG5vIHJlY29tcGlsYXRpb24uCi1Ib3dldmVyLCBzb21lIHBsYXRmb3JtcyBoYXZlIGtub3duIGxpbWl0YXRpb25zIHdpdGggdGhlIHNlbWFudGljcyBvZgotc2hhcmVkIGxpYnJhcmllcyB0aGF0IGVuZCB1cCByZXF1aXJpbmcgcmVjb21waWxhdGlvbiB3aGVuIHVzaW5nIHRoaXMKLW1ldGhvZCwgcGFydGljdWxhcmx5IG5vdGljZWFibGUgaW4gcGFja2FnZXMgdGhhdCB1c2UgR05VIExpYnRvb2wuCi0KLSAgIFRoZSBzZWNvbmQgbWV0aG9kIGludm9sdmVzIHByb3ZpZGluZyB0aGUgYERFU1RESVInIHZhcmlhYmxlLiAgRm9yCi1leGFtcGxlLCBgbWFrZSBpbnN0YWxsIERFU1RESVI9L2FsdGVybmF0ZS9kaXJlY3RvcnknIHdpbGwgcHJlcGVuZAotYC9hbHRlcm5hdGUvZGlyZWN0b3J5JyBiZWZvcmUgYWxsIGluc3RhbGxhdGlvbiBuYW1lcy4gIFRoZSBhcHByb2FjaCBvZgotYERFU1RESVInIG92ZXJyaWRlcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLCBhbmQKLWRvZXMgbm90IHdvcmsgb24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBkcml2ZSBsZXR0ZXJzLiAgT24gdGhlIG90aGVyIGhhbmQsCi1pdCBkb2VzIGJldHRlciBhdCBhdm9pZGluZyByZWNvbXBpbGF0aW9uIGlzc3VlcywgYW5kIHdvcmtzIHdlbGwgZXZlbgotd2hlbiBzb21lIGRpcmVjdG9yeSBvcHRpb25zIHdlcmUgbm90IHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9JwotYXQgYGNvbmZpZ3VyZScgdGltZS4KLQotT3B0aW9uYWwgRmVhdHVyZXMKLT09PT09PT09PT09PT09PT09Ci0KLSAgIElmIHRoZSBwYWNrYWdlIHN1cHBvcnRzIGl0LCB5b3UgY2FuIGNhdXNlIHByb2dyYW1zIHRvIGJlIGluc3RhbGxlZAotd2l0aCBhbiBleHRyYSBwcmVmaXggb3Igc3VmZml4IG9uIHRoZWlyIG5hbWVzIGJ5IGdpdmluZyBgY29uZmlndXJlJyB0aGUKLW9wdGlvbiBgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVgnIG9yIGAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCcuCi0KLSAgIFNvbWUgcGFja2FnZXMgcGF5IGF0dGVudGlvbiB0byBgLS1lbmFibGUtRkVBVFVSRScgb3B0aW9ucyB0bwotYGNvbmZpZ3VyZScsIHdoZXJlIEZFQVRVUkUgaW5kaWNhdGVzIGFuIG9wdGlvbmFsIHBhcnQgb2YgdGhlIHBhY2thZ2UuCi1UaGV5IG1heSBhbHNvIHBheSBhdHRlbnRpb24gdG8gYC0td2l0aC1QQUNLQUdFJyBvcHRpb25zLCB3aGVyZSBQQUNLQUdFCi1pcyBzb21ldGhpbmcgbGlrZSBgZ251LWFzJyBvciBgeCcgKGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtKS4gIFRoZQotYFJFQURNRScgc2hvdWxkIG1lbnRpb24gYW55IGAtLWVuYWJsZS0nIGFuZCBgLS13aXRoLScgb3B0aW9ucyB0aGF0IHRoZQotcGFja2FnZSByZWNvZ25pemVzLgotCi0gICBGb3IgcGFja2FnZXMgdGhhdCB1c2UgdGhlIFggV2luZG93IFN5c3RlbSwgYGNvbmZpZ3VyZScgY2FuIHVzdWFsbHkKLWZpbmQgdGhlIFggaW5jbHVkZSBhbmQgbGlicmFyeSBmaWxlcyBhdXRvbWF0aWNhbGx5LCBidXQgaWYgaXQgZG9lc24ndCwKLXlvdSBjYW4gdXNlIHRoZSBgY29uZmlndXJlJyBvcHRpb25zIGAtLXgtaW5jbHVkZXM9RElSJyBhbmQKLWAtLXgtbGlicmFyaWVzPURJUicgdG8gc3BlY2lmeSB0aGVpciBsb2NhdGlvbnMuCi0KLSAgIFNvbWUgcGFja2FnZXMgb2ZmZXIgdGhlIGFiaWxpdHkgdG8gY29uZmlndXJlIGhvdyB2ZXJib3NlIHRoZQotZXhlY3V0aW9uIG9mIGBtYWtlJyB3aWxsIGJlLiAgRm9yIHRoZXNlIHBhY2thZ2VzLCBydW5uaW5nIGAuL2NvbmZpZ3VyZQotLS1lbmFibGUtc2lsZW50LXJ1bGVzJyBzZXRzIHRoZSBkZWZhdWx0IHRvIG1pbmltYWwgb3V0cHV0LCB3aGljaCBjYW4gYmUKLW92ZXJyaWRkZW4gd2l0aCBgbWFrZSBWPTEnOyB3aGlsZSBydW5uaW5nIGAuL2NvbmZpZ3VyZQotLS1kaXNhYmxlLXNpbGVudC1ydWxlcycgc2V0cyB0aGUgZGVmYXVsdCB0byB2ZXJib3NlLCB3aGljaCBjYW4gYmUKLW92ZXJyaWRkZW4gd2l0aCBgbWFrZSBWPTAnLgotCi1QYXJ0aWN1bGFyIHN5c3RlbXMKLT09PT09PT09PT09PT09PT09PQotCi0gICBPbiBIUC1VWCwgdGhlIGRlZmF1bHQgQyBjb21waWxlciBpcyBub3QgQU5TSSBDIGNvbXBhdGlibGUuICBJZiBHTlUKLUNDIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgaW4KLW9yZGVyIHRvIHVzZSBhbiBBTlNJIEMgY29tcGlsZXI6Ci0KLSAgICAgLi9jb25maWd1cmUgQ0M9ImNjIC1BZSAtRF9YT1BFTl9TT1VSQ0U9NTAwIgotCi1hbmQgaWYgdGhhdCBkb2Vzbid0IHdvcmssIGluc3RhbGwgcHJlLWJ1aWx0IGJpbmFyaWVzIG9mIEdDQyBmb3IgSFAtVVguCi0KLSAgIEhQLVVYIGBtYWtlJyB1cGRhdGVzIHRhcmdldHMgd2hpY2ggaGF2ZSB0aGUgc2FtZSB0aW1lIHN0YW1wcyBhcwotdGhlaXIgcHJlcmVxdWlzaXRlcywgd2hpY2ggbWFrZXMgaXQgZ2VuZXJhbGx5IHVudXNhYmxlIHdoZW4gc2hpcHBlZAotZ2VuZXJhdGVkIGZpbGVzIHN1Y2ggYXMgYGNvbmZpZ3VyZScgYXJlIGludm9sdmVkLiAgVXNlIEdOVSBgbWFrZScKLWluc3RlYWQuCi0KLSAgIE9uIE9TRi8xIGEuay5hLiBUcnU2NCwgc29tZSB2ZXJzaW9ucyBvZiB0aGUgZGVmYXVsdCBDIGNvbXBpbGVyIGNhbm5vdAotcGFyc2UgaXRzIGA8d2NoYXIuaD4nIGhlYWRlciBmaWxlLiAgVGhlIG9wdGlvbiBgLW5vZHRrJyBjYW4gYmUgdXNlZCBhcwotYSB3b3JrYXJvdW5kLiAgSWYgR05VIENDIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZAotdG8gdHJ5Ci0KLSAgICAgLi9jb25maWd1cmUgQ0M9ImNjIgotCi1hbmQgaWYgdGhhdCBkb2Vzbid0IHdvcmssIHRyeQotCi0gICAgIC4vY29uZmlndXJlIENDPSJjYyAtbm9kdGsiCi0KLSAgIE9uIFNvbGFyaXMsIGRvbid0IHB1dCBgL3Vzci91Y2InIGVhcmx5IGluIHlvdXIgYFBBVEgnLiAgVGhpcwotZGlyZWN0b3J5IGNvbnRhaW5zIHNldmVyYWwgZHlzZnVuY3Rpb25hbCBwcm9ncmFtczsgd29ya2luZyB2YXJpYW50cyBvZgotdGhlc2UgcHJvZ3JhbXMgYXJlIGF2YWlsYWJsZSBpbiBgL3Vzci9iaW4nLiAgU28sIGlmIHlvdSBuZWVkIGAvdXNyL3VjYicKLWluIHlvdXIgYFBBVEgnLCBwdXQgaXQgX2FmdGVyXyBgL3Vzci9iaW4nLgotCi0gICBPbiBIYWlrdSwgc29mdHdhcmUgaW5zdGFsbGVkIGZvciBhbGwgdXNlcnMgZ29lcyBpbiBgL2Jvb3QvY29tbW9uJywKLW5vdCBgL3Vzci9sb2NhbCcuICBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zOgotCi0gICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS9ib290L2NvbW1vbgotCi1TcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2Fubm90IGZpZ3VyZSBvdXQKLWF1dG9tYXRpY2FsbHksIGJ1dCBuZWVkcyB0byBkZXRlcm1pbmUgYnkgdGhlIHR5cGUgb2YgbWFjaGluZSB0aGUgcGFja2FnZQotd2lsbCBydW4gb24uICBVc3VhbGx5LCBhc3N1bWluZyB0aGUgcGFja2FnZSBpcyBidWlsdCB0byBiZSBydW4gb24gdGhlCi1fc2FtZV8gYXJjaGl0ZWN0dXJlcywgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cwotYSBtZXNzYWdlIHNheWluZyBpdCBjYW5ub3QgZ3Vlc3MgdGhlIG1hY2hpbmUgdHlwZSwgZ2l2ZSBpdCB0aGUKLWAtLWJ1aWxkPVRZUEUnIG9wdGlvbi4gIFRZUEUgY2FuIGVpdGhlciBiZSBhIHNob3J0IG5hbWUgZm9yIHRoZSBzeXN0ZW0KLXR5cGUsIHN1Y2ggYXMgYHN1bjQnLCBvciBhIGNhbm9uaWNhbCBuYW1lIHdoaWNoIGhhcyB0aGUgZm9ybToKLQotICAgICBDUFUtQ09NUEFOWS1TWVNURU0KLQotd2hlcmUgU1lTVEVNIGNhbiBoYXZlIG9uZSBvZiB0aGVzZSBmb3JtczoKLQotICAgICBPUwotICAgICBLRVJORUwtT1MKLQotICAgU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKLWBjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKLW5lZWQgdG8ga25vdyB0aGUgbWFjaGluZSB0eXBlLgotCi0gICBJZiB5b3UgYXJlIF9idWlsZGluZ18gY29tcGlsZXIgdG9vbHMgZm9yIGNyb3NzLWNvbXBpbGluZywgeW91IHNob3VsZAotdXNlIHRoZSBvcHRpb24gYC0tdGFyZ2V0PVRZUEUnIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBzeXN0ZW0gdGhleSB3aWxsCi1wcm9kdWNlIGNvZGUgZm9yLgotCi0gICBJZiB5b3Ugd2FudCB0byBfdXNlXyBhIGNyb3NzIGNvbXBpbGVyLCB0aGF0IGdlbmVyYXRlcyBjb2RlIGZvciBhCi1wbGF0Zm9ybSBkaWZmZXJlbnQgZnJvbSB0aGUgYnVpbGQgcGxhdGZvcm0sIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUKLSJob3N0IiBwbGF0Zm9ybSAoaS5lLiwgdGhhdCBvbiB3aGljaCB0aGUgZ2VuZXJhdGVkIHByb2dyYW1zIHdpbGwKLWV2ZW50dWFsbHkgYmUgcnVuKSB3aXRoIGAtLWhvc3Q9VFlQRScuCi0KLVNoYXJpbmcgRGVmYXVsdHMKLT09PT09PT09PT09PT09PT0KLQotICAgSWYgeW91IHdhbnQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBgY29uZmlndXJlJyBzY3JpcHRzIHRvIHNoYXJlLAoteW91IGNhbiBjcmVhdGUgYSBzaXRlIHNoZWxsIHNjcmlwdCBjYWxsZWQgYGNvbmZpZy5zaXRlJyB0aGF0IGdpdmVzCi1kZWZhdWx0IHZhbHVlcyBmb3IgdmFyaWFibGVzIGxpa2UgYENDJywgYGNhY2hlX2ZpbGUnLCBhbmQgYHByZWZpeCcuCi1gY29uZmlndXJlJyBsb29rcyBmb3IgYFBSRUZJWC9zaGFyZS9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLCB0aGVuCi1gUFJFRklYL2V0Yy9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLiAgT3IsIHlvdSBjYW4gc2V0IHRoZQotYENPTkZJR19TSVRFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHNpdGUgc2NyaXB0LgotQSB3YXJuaW5nOiBub3QgYWxsIGBjb25maWd1cmUnIHNjcmlwdHMgbG9vayBmb3IgYSBzaXRlIHNjcmlwdC4KLQotRGVmaW5pbmcgVmFyaWFibGVzCi09PT09PT09PT09PT09PT09PT0KLQotICAgVmFyaWFibGVzIG5vdCBkZWZpbmVkIGluIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FuIGJlIHNldCBpbiB0aGUKLWVudmlyb25tZW50IHBhc3NlZCB0byBgY29uZmlndXJlJy4gIEhvd2V2ZXIsIHNvbWUgcGFja2FnZXMgbWF5IHJ1bgotY29uZmlndXJlIGFnYWluIGR1cmluZyB0aGUgYnVpbGQsIGFuZCB0aGUgY3VzdG9taXplZCB2YWx1ZXMgb2YgdGhlc2UKLXZhcmlhYmxlcyBtYXkgYmUgbG9zdC4gIEluIG9yZGVyIHRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgeW91IHNob3VsZCBzZXQKLXRoZW0gaW4gdGhlIGBjb25maWd1cmUnIGNvbW1hbmQgbGluZSwgdXNpbmcgYFZBUj12YWx1ZScuICBGb3IgZXhhbXBsZToKLQotICAgICAuL2NvbmZpZ3VyZSBDQz0vdXNyL2xvY2FsMi9iaW4vZ2NjCi0KLWNhdXNlcyB0aGUgc3BlY2lmaWVkIGBnY2MnIHRvIGJlIHVzZWQgYXMgdGhlIEMgY29tcGlsZXIgKHVubGVzcyBpdCBpcwotb3ZlcnJpZGRlbiBpbiB0aGUgc2l0ZSBzaGVsbCBzY3JpcHQpLgotCi1VbmZvcnR1bmF0ZWx5LCB0aGlzIHRlY2huaXF1ZSBkb2VzIG5vdCB3b3JrIGZvciBgQ09ORklHX1NIRUxMJyBkdWUgdG8KLWFuIEF1dG9jb25mIGxpbWl0YXRpb24uICBVbnRpbCB0aGUgbGltaXRhdGlvbiBpcyBsaWZ0ZWQsIHlvdSBjYW4gdXNlCi10aGlzIHdvcmthcm91bmQ6Ci0KLSAgICAgQ09ORklHX1NIRUxMPS9iaW4vYmFzaCAuL2NvbmZpZ3VyZSBDT05GSUdfU0hFTEw9L2Jpbi9iYXNoCi0KLWBjb25maWd1cmUnIEludm9jYXRpb24KLT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQKLW9wZXJhdGVzLgotCi1gLS1oZWxwJwotYC1oJwotICAgICBQcmludCBhIHN1bW1hcnkgb2YgYWxsIG9mIHRoZSBvcHRpb25zIHRvIGBjb25maWd1cmUnLCBhbmQgZXhpdC4KLQotYC0taGVscD1zaG9ydCcKLWAtLWhlbHA9cmVjdXJzaXZlJwotICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSdzCi0gICAgIGBjb25maWd1cmUnLCBhbmQgZXhpdC4gIFRoZSBgc2hvcnQnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucyB1c2VkCi0gICAgIG9ubHkgaW4gdGhlIHRvcCBsZXZlbCwgd2hpbGUgdGhlIGByZWN1cnNpdmUnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucwotICAgICBhbHNvIHByZXNlbnQgaW4gYW55IG5lc3RlZCBwYWNrYWdlcy4KLQotYC0tdmVyc2lvbicKLWAtVicKLSAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgQXV0b2NvbmYgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYGNvbmZpZ3VyZScKLSAgICAgc2NyaXB0LCBhbmQgZXhpdC4KLQotYC0tY2FjaGUtZmlsZT1GSUxFJwotICAgICBFbmFibGUgdGhlIGNhY2hlOiB1c2UgYW5kIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIGluIEZJTEUsCi0gICAgIHRyYWRpdGlvbmFsbHkgYGNvbmZpZy5jYWNoZScuICBGSUxFIGRlZmF1bHRzIHRvIGAvZGV2L251bGwnIHRvCi0gICAgIGRpc2FibGUgY2FjaGluZy4KLQotYC0tY29uZmlnLWNhY2hlJwotYC1DJwotICAgICBBbGlhcyBmb3IgYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnLgotCi1gLS1xdWlldCcKLWAtLXNpbGVudCcKLWAtcScKLSAgICAgRG8gbm90IHByaW50IG1lc3NhZ2VzIHNheWluZyB3aGljaCBjaGVja3MgYXJlIGJlaW5nIG1hZGUuICBUbwotICAgICBzdXBwcmVzcyBhbGwgbm9ybWFsIG91dHB1dCwgcmVkaXJlY3QgaXQgdG8gYC9kZXYvbnVsbCcgKGFueSBlcnJvcgotICAgICBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duKS4KLQotYC0tc3JjZGlyPURJUicKLSAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQotICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCi0KLWAtLXByZWZpeD1ESVInCi0gICAgIFVzZSBESVIgYXMgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXguICAqbm90ZSBJbnN0YWxsYXRpb24gTmFtZXM6OgotICAgICBmb3IgbW9yZSBkZXRhaWxzLCBpbmNsdWRpbmcgb3RoZXIgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGZpbmUtdHVuaW5nCi0gICAgIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zLgotCi1gLS1uby1jcmVhdGUnCi1gLW4nCi0gICAgIFJ1biB0aGUgY29uZmlndXJlIGNoZWNrcywgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIGFueSBvdXRwdXQKLSAgICAgZmlsZXMuCi0KLWBjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4gIFJ1bgotYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzk3ODZmLi4wMDAwMDAwCi0tLSBhL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUz0tLWVuYWJsZS1ndGstZG9jCi0KLUFMV0FZU19TVUJESVJTID0JCVwKLQlnc3Qgc3lzIGV4dCAJCVwKLQl0ZXN0cwkJCVwKLQlkb2NzCQkJXAotCXBvCQkJXAotCWNvbW1vbgkJCVwKLQltNAkJCVwKLQlwa2djb25maWcKLQotU1VCRElSUyA9ICQoQUxXQVlTX1NVQkRJUlMpCi0KLURJU1RfU1VCRElSUyA9ICQoQUxXQVlTX1NVQkRJUlMpCi0KLSMgaW5jbHVkZSBiZWZvcmUgRVhUUkFfRElTVCBmb3Igd2luMzIgYXNzaWdubWVudAotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi93aW4zMi5tYWsKLQotRVhUUkFfRElTVCA9IFwKLQlnc3QtcGx1Z2lucy1nb29kLnNwZWMgZGVwY29tcCBcCi0JQVVUSE9SUyBDT1BZSU5HIE5FV1MgUkVBRE1FIFJFTEVBU0UgUkVRVUlSRU1FTlRTIFwKLQlDaGFuZ2VMb2cgZ3N0LXBsdWdpbnMtZ29vZC5kb2FwIGF1dG9nZW4uc2ggXAotCSQod2luMzIpCi0KLURJU1RDTEVBTkZJTEVTID0gX3N0ZGludC5oCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWdzdC1saWJzL2dzdC9nZXR0ZXh0LmggXAotCWdzdC1saWJzL2dzdC9nc3QtaTE4bi1wbHVnaW4uaCBcCi0JZ3N0LWxpYnMvZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaAotCi1BQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtSSBjb21tb24vbTQKLQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9yZWxlYXNlLm1hawotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wby5tYWsKLQotY2hlY2stdmFsZ3JpbmQ6Ci0JJChNQUtFKSAtQyB0ZXN0cy9jaGVjayBjaGVjay12YWxncmluZAotCi1pZiBIQVZFX0dTVF9DSEVDSwotY2hlY2stdG9ydHVyZToKLQkkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIHRvcnR1cmUKLWJ1aWxkLWNoZWNrczoKLQkkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGJ1aWxkLWNoZWNrcwotZWxzZQotY2hlY2stdG9ydHVyZToKLQl0cnVlCi1idWlsZC1jaGVja3M6Ci0JdHJ1ZQotZW5kaWYKLQotd2luMzItdXBkYXRlOgotCWNwICQodG9wX2J1aWxkZGlyKS93aW4zMi9jb21tb24vY29uZmlnLmgtbmV3IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vY29uZmlnLmgKLQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hawotCi0jIGNydWZ0OiBwbHVnaW5zIHRoYXQgaGF2ZSBiZWVuIG1lcmdlZCBvciBtb3ZlZCBvciByZW5hbWVkCi0KLUNSVUZUX0ZJTEVTID0gXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vc2hhdmUgXAotCSQodG9wX2J1aWxkZGlyKS9jb21tb24vc2hhdmUtbGlidG9vbCBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC9tZWRpYW4vLmxpYnMvKi57c28sZGxsLERMTCxkeWxpYn0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvcXRkZW11eC8ubGlicy8qLntzbyxkbGwsRExMLGR5bGlifSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC9xdWlja3RpbWUvLmxpYnMvKi57c28sZGxsLERMTCxkeWxpYn0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvdmlkZW9maWx0ZXIvLmxpYnMvKnZpZGVvZmxpcC57c28sZGxsLERMTCxkeWxpYn0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvdmlkZW9maWx0ZXIvLmxpYnMvKnZpZGVvYmFsYW5jZS57c28sZGxsLERMTCxkeWxpYn0gXAotCSQodG9wX2J1aWxkZGlyKS9nc3QvdmlkZW9maWx0ZXIvLmxpYnMvKmdhbW1hLntzbyxkbGwsRExMLGR5bGlifQotCi1DUlVGVF9ESVJTID0gXAotCSQodG9wX3NyY2RpcikvZG9jcy9wbHVnaW5zL3RtcGwgXAotCSQodG9wX3NyY2RpcikvZ3N0L21lZGlhbiBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcXRkZW11eCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcXVpY2t0aW1lIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9hbm5vZGV4Ci0KLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vY3J1ZnQubWFrCi0KLWFsbC1sb2NhbDogY2hlY2stY3J1ZnQKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzY2U3YzQuLjAwMDAwMDAKLS0tIGEvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMzU0ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIHZhcmlvdXMgdGVzdHMgdG8gbWFrZSBzdXJlIHdlIGRpc3QgdGhlIHdpbjMyIHN0dWZmIChmb3IgTVNWQyBidWlsZHMpIHJpZ2h0Ci0KLSMgaW5jbHVkZSB0aGlzIHNuaXBwZXQgdG8gYWRkIGEgY29tbW9uIHJlbGVhc2U6IHRhcmdldCBieSB1c2luZwotIyBpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrCi0KLSMgY2hlY2tzIGZvciBsZWZ0LW92ZXIgZmlsZXMgaW4gdGhlICh1c3VhbGx5IHVuaW5zdGFsbGVkKSB0cmVlLCBpZS4gZm9yCi0jIHN0dWZmIHRoYXQgYmVzdCBiZSBkZWxldGVkIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgaGF2aW5nIG9sZCBwbHVnaW4gYmluYXJpZXMKLSMgbHlpbmcgYXJvdW5kLgotIwotIyBzZXQgQ1JVRlRfRklMRVMgYW5kL29yIENSVUZUX0RJUlMgaW4geW91ciBNYWtlZmlsZS5hbSB3aGVuIHlvdSBpbmNsdWRlIHRoaXMKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gLgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29uZmlndXJlIFwKLQkkKGFtX19jb25maWd1cmVfZGVwcykgJChub2luc3RfSEVBREVSUykgJChhbV9fRElTVF9DT01NT04pCi1hbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAotIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9IGdzdC1wbHVnaW5zLWdvb2Quc3BlYwotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCi0JY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAotCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKLQlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLVJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCi0gIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLWFtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKLSAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAotICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCi0gICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCi0JY3Njb3BlIGRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSBcCi0JJChMSVNQKWNvbmZpZy5oLmluCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotQ1NDT1BFID0gY3Njb3BlCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJChzcmNkaXIpL2NvbmZpZy5oLmluIFwKLQkkKHNyY2RpcikvZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hayBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vY3J1ZnQubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3BvLm1hayBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vcmVsZWFzZS5tYWsgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL3dpbjMyLm1hayBBQk9VVC1OTFMgQVVUSE9SUyBDT1BZSU5HIFwKLQlDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRSBjb21waWxlIGNvbmZpZy5ndWVzcyBcCi0JY29uZmlnLnJwYXRoIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdG1haW4uc2ggbWlzc2luZwotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWRpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKLXRvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQotYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAotICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpIjsgdGhlbiBcCi0gICAgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCi0gICAgICAmJiBybSAtcmYgIiQoZGlzdGRpcikiIFwKLSAgICAgIHx8IHsgc2xlZXAgNSAmJiBybSAtcmYgIiQoZGlzdGRpcikiOyB9OyBcCi0gIGVsc2UgOjsgZmkKLWFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyID0gJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUdaSVBfRU5WID0gLS1iZXN0Ci1ESVNUX0FSQ0hJVkVTID0gJChkaXN0ZGlyKS50YXIueHoKLURJU1RfVEFSR0VUUyA9IGRpc3QteHoKLWRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKLWFtX19kaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSBcCi0gIHwgc2VkICdzfF5cLi98JChwcmVmaXgpL3wnIHwgZ3JlcCAtdiAnJChpbmZvZGlyKS9kaXIkJCcKLWRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtSSBjb21tb24vbTQKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUyA9IC0tZW5hYmxlLWd0ay1kb2MKLUFMV0FZU19TVUJESVJTID0gXAotCWdzdCBzeXMgZXh0IAkJXAotCXRlc3RzCQkJXAotCWRvY3MJCQlcCi0JcG8JCQlcCi0JY29tbW9uCQkJXAotCW00CQkJXAotCXBrZ2NvbmZpZwotCi1TVUJESVJTID0gJChBTFdBWVNfU1VCRElSUykKLURJU1RfU1VCRElSUyA9ICQoQUxXQVlTX1NVQkRJUlMpCi0KLSMgdGhlIE1BTklGRVNUIGNvbnRhaW5zIGFsbCB3aW4zMiByZWxhdGVkIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGRpc3RlZAotd2luMzIgPSAkKHNoZWxsIGNhdCAkKHRvcF9zcmNkaXIpL3dpbjMyL01BTklGRVNUKQotCi0jIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKLSMgdGhlc2UgYXJlIGxpYnJhcnkgLmRlZiBmaWxlcyB3aXRoIHRoZSBzeW1ib2xzIHRvIGV4cG9ydAotd2luMzJkZWZzID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uIC1uYW1lICcqLmRlZicpCi0KLSMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAotIyB0aGVzZSBhcmUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGRpc3RlZCB3aXRoIENSTEYgbGluZSBlbmRpbmdzOgotd2luMzJjcmxmID0gJChzaGVsbCBmaW5kICQodG9wX3NyY2Rpcikvd2luMzIgLW5hbWUgJyouZHN3JyAtbyAtbmFtZSAnKi5kc3AnKQotCi0jIGluY2x1ZGUgYmVmb3JlIEVYVFJBX0RJU1QgZm9yIHdpbjMyIGFzc2lnbm1lbnQKLUVYVFJBX0RJU1QgPSBcCi0JZ3N0LXBsdWdpbnMtZ29vZC5zcGVjIGRlcGNvbXAgXAotCUFVVEhPUlMgQ09QWUlORyBORVdTIFJFQURNRSBSRUxFQVNFIFJFUVVJUkVNRU5UUyBcCi0JQ2hhbmdlTG9nIGdzdC1wbHVnaW5zLWdvb2QuZG9hcCBhdXRvZ2VuLnNoIFwKLQkkKHdpbjMyKQotCi1ESVNUQ0xFQU5GSUxFUyA9IF9zdGRpbnQuaAotbm9pbnN0X0hFQURFUlMgPSBcCi0JZ3N0LWxpYnMvZ3N0L2dldHRleHQuaCBcCi0JZ3N0LWxpYnMvZ3N0L2dzdC1pMThuLXBsdWdpbi5oIFwKLQlnc3QtbGlicy9nc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oCi0KLQotIyBjcnVmdDogcGx1Z2lucyB0aGF0IGhhdmUgYmVlbiBtZXJnZWQgb3IgbW92ZWQgb3IgcmVuYW1lZAotQ1JVRlRfRklMRVMgPSBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9zaGF2ZSBcCi0JJCh0b3BfYnVpbGRkaXIpL2NvbW1vbi9zaGF2ZS1saWJ0b29sIFwKLQkkKHRvcF9idWlsZGRpcikvZ3N0L21lZGlhbi8ubGlicy8qLntzbyxkbGwsRExMLGR5bGlifSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC9xdGRlbXV4Ly5saWJzLyoue3NvLGRsbCxETEwsZHlsaWJ9IFwKLQkkKHRvcF9idWlsZGRpcikvZ3N0L3F1aWNrdGltZS8ubGlicy8qLntzbyxkbGwsRExMLGR5bGlifSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC92aWRlb2ZpbHRlci8ubGlicy8qdmlkZW9mbGlwLntzbyxkbGwsRExMLGR5bGlifSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC92aWRlb2ZpbHRlci8ubGlicy8qdmlkZW9iYWxhbmNlLntzbyxkbGwsRExMLGR5bGlifSBcCi0JJCh0b3BfYnVpbGRkaXIpL2dzdC92aWRlb2ZpbHRlci8ubGlicy8qZ2FtbWEue3NvLGRsbCxETEwsZHlsaWJ9Ci0KLUNSVUZUX0RJUlMgPSBcCi0JJCh0b3Bfc3JjZGlyKS9kb2NzL3BsdWdpbnMvdG1wbCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbWVkaWFuIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9xdGRlbXV4IFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9xdWlja3RpbWUgXAotCSQodG9wX3NyY2RpcikvZXh0L2Fubm9kZXgKLQotYWxsOiBjb25maWcuaAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotYW0tLXJlZnJlc2g6IE1ha2VmaWxlCi0JQDoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vd2luMzIubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3BvLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jcnVmdC5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgZWNobyAnIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSc7IFwKLQkgICAgICAkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IFwKLQkJJiYgZXhpdCAwOyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBNYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCi0JICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotJCh0b3Bfc3JjZGlyKS9jb21tb24vd2luMzIubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrICQodG9wX3NyY2RpcikvY29tbW9uL3BvLm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jb3ZlcmFnZS9sY292Lm1hayAkKHRvcF9zcmNkaXIpL2NvbW1vbi9jcnVmdC5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNvbmZpZy5oOiBzdGFtcC1oMQotCUB0ZXN0IC1mICRAIHx8IHJtIC1mIHN0YW1wLWgxCi0JQHRlc3QgLWYgJEAgfHwgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgc3RhbXAtaDEKLQotc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBybSAtZiBzdGFtcC1oMQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLSQoc3JjZGlyKS9jb25maWcuaC5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykgCi0JKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCi0Jcm0gLWYgc3RhbXAtaDEKLQl0b3VjaCAkQAotCi1kaXN0Y2xlYW4taGRyOgotCS1ybSAtZiBjb25maWcuaCBzdGFtcC1oMQotZ3N0LXBsdWdpbnMtZ29vZC5zcGVjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1kaXN0Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgbGlidG9vbCBjb25maWcubHQKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGU6IGNzY29wZS5maWxlcwotCXRlc3QgISAtcyBjc2NvcGUuZmlsZXMgXAotCSAgfHwgJChDU0NPUEUpIC1iIC1xICQoQU1fQ1NDT1BFRkxBR1MpICQoQ1NDT1BFRkxBR1MpIC1pIGNzY29wZS5maWxlcyAkKENTQ09QRV9BUkdTKQotY2xlYW4tY3Njb3BlOgotCS1ybSAtZiBjc2NvcGUuZmlsZXMKLWNzY29wZS5maWxlczogY2xlYW4tY3Njb3BlIGNzY29wZWxpc3QKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQktcm0gLWYgY3Njb3BlLm91dCBjc2NvcGUuaW4ub3V0IGNzY29wZS5wby5vdXQgY3Njb3BlLmZpbGVzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQotCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCi0JICBkaXN0LWhvb2sKLQktdGVzdCAtbiAiJChhbV9fc2tpcF9tb2RlX2ZpeCkiIFwKLQl8fCBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTc1NSBcCi0JCS1leGVjIGNobW9kIHUrcnd4LGdvK3J4IHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKLQkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAotCXx8IGNobW9kIC1SIGErciAiJChkaXN0ZGlyKSIKLWRpc3QtZ3ppcDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6Ci0JJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKLQotZGlzdC1iemlwMjogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBCWklQMj0kJHtCWklQMi0tOX0gYnppcDIgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QtbHppcDogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBsemlwIC1jICQke0xaSVBfT1BULS05fSA+JChkaXN0ZGlyKS50YXIubHoKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotZGlzdC14ejogZGlzdGRpcgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBYWl9PUFQ9JCR7WFpfT1BULS1lfSB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotCi1kaXN0LXRhclo6IGRpc3RkaXIKLQlAZWNobyBXQVJOSU5HOiAiU3VwcG9ydCBmb3IgZGlzdHJpYnV0aW9uIGFyY2hpdmVzIGNvbXByZXNzZWQgd2l0aCIgXAotCQkgICAgICAgImxlZ2FjeSBwcm9ncmFtICdjb21wcmVzcycgaXMgZGVwcmVjYXRlZC4iID4mMgotCUBlY2hvIFdBUk5JTkc6ICJJdCB3aWxsIGJlIHJlbW92ZWQgYWx0b2dldGhlciBpbiBBdXRvbWFrZSAyLjAiID4mMgotCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBjb21wcmVzcyAtYyA+JChkaXN0ZGlyKS50YXIuWgotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3Qtc2hhcjogZGlzdGRpcgotCUBlY2hvIFdBUk5JTkc6ICJTdXBwb3J0IGZvciBzaGFyIGRpc3RyaWJ1dGlvbiBhcmNoaXZlcyBpcyIgXAotCSAgICAgICAgICAgICAgICJkZXByZWNhdGVkLiIgPiYyCi0JQGVjaG8gV0FSTklORzogIkl0IHdpbGwgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIEF1dG9tYWtlIDIuMCIgPiYyCi0Jc2hhciAkKGRpc3RkaXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnNoYXIuZ3oKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotCi1kaXN0LXppcDogZGlzdGRpcgotCS1ybSAtZiAkKGRpc3RkaXIpLnppcAotCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0KLWRpc3QgZGlzdC1hbGw6Ci0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKLQkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQotCi0jIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCi0jIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCi0jIHRhcmZpbGUuCi1kaXN0Y2hlY2s6IGRpc3QKLQljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCi0JKi50YXIuZ3oqKSBcCi0JICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAotCSoudGFyLmJ6MiopIFwKLQkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCi0JKi50YXIubHoqKSBcCi0JICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKLQkqLnRhci54eiopIFwKLQkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKLQkqLnRhci5aKikgXAotCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAotCSouc2hhci5neiopIFwKLQkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAotCSouemlwKikgXAotCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCi0JZXNhYwotCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCi0JY2htb2QgdSt3ICQoZGlzdGRpcikKLQlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19idWlsZC9zdWIgJChkaXN0ZGlyKS9faW5zdAotCWNobW9kIGEtdyAkKGRpc3RkaXIpCi0JdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKLQlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKLQkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdGNoZWNrLWhvb2sgXAotCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQvc3ViIFwKLQkgICYmIC4uLy4uL2NvbmZpZ3VyZSBcCi0JICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAotCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKLQkgICAgLS1zcmNkaXI9Li4vLi4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAotCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCi0JICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAotCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAotCSAgJiYgKHsgXAotCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCi0JICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKLQkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCi0JICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKLQkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKLQkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCi0JICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKLQkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKLQkgICYmIGNkICIkJGFtX19jd2QiIFwKLQkgIHx8IGV4aXQgMQotCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCi0JQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKLQkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKLQkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JwotZGlzdHVuaW5zdGFsbGNoZWNrOgotCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKLQkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKLQkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKLQkgIGV4aXQgMTsgXAotCX07IFwKLQkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAotCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAotCSAgZXhpdCAxOyBcCi0JfTsgXAotCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKLQkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAotCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAotCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAotCSAgICAgICAgZmkgOyBcCi0JICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAotCSAgICAgICAgZXhpdCAxOyB9ID4mMgotZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgotCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAotCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAotCSAgZXhpdCAxIDsgXAotCWZpCi0JQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCi0JICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKLQkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAotCSAgICAgICBleGl0IDE7IH0gPiYyCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlICQoSEVBREVSUykgY29uZmlnLmggYWxsLWxvY2FsCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQotCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGFsbC1sb2NhbCBcCi0JYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tY3Njb3BlIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY3Njb3BlIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdCBcCi0JZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1ob29rIGRpc3QtbHppcCBkaXN0LXNoYXIgXAotCWRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKLQlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgXAotCWluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi13aW4zMi1kZWJ1ZzoKLQlAZWNobzsgXAotCWVjaG8gd2luMzIgICAgID0gJCh3aW4zMik7IFwKLQllY2hvOyBcCi0JZWNobyB3aW4zMmRlZnMgPSAkKHdpbjMyZGVmcyk7IFwKLQllY2hvOyBcCi0JZWNobyB3aW4zMmNybGYgPSAkKHdpbjMyY3JsZik7IFwKLQllY2hvCi0KLXdpbjMyLWNoZWNrLWNybGY6Ci0JQGVjaG8gQ2hlY2tpbmcgd2luMzIgZmlsZXMgZm9yIENSIExGIGxpbmUgZW5kaW5ncyAuLi47IFwKLQlmYWlsPTAgOyBcCi0JZm9yIGVhY2ggaW4gJCh3aW4zMmNybGYpIDsgZG8gXAotCSAgcmVzdWx0PWBwZXJsIC1lICdwcmludCBncmVwKC9cclxuLyw8PiknICIkJGVhY2giIHwgd2MgLWxgOyBcCi0JICBpZiB0ZXN0ICIkJHJlc3VsdCIgPSAwIDsgdGhlbiBcCi0JICAgIGVjaG8gJCRlYWNoIG11c3QgYmUgZml4ZWQgdG8gaGF2ZSBDUkxGIGxpbmUgZW5kaW5ncyA7IFwKLQkgICAgZmFpbD0xOyBcCi0JICBmaSA7IFwKLQlkb25lIDsgXAotCWV4aXQgJCRmYWlsCi0KLSMgbWFrZSBzdXJlIGFsbCBzeW1ib2xzIHdlIGV4cG9ydCBvbiBsaW51eCBhcmUgZGVmaW5lZCBpbiB0aGUgd2luMzIgLmRlZiB0b28KLSMgKGRvbid0IGNhcmUgYWJvdXQgb3RoZXIgdW5peGVzIGZvciBub3csIGl0J3MgZW5vdWdoIGlmIGl0IHdvcmtzIG9uIG9uZSBvZgotIyB0aGUgbGludXggYnVpbGQgYm90czsgd2UgYXNzdW1lIC5zbyApCi1jaGVjay1leHBvcnRzOgotCUBmYWlsPTAgOyBcCi0JZm9yIGwgaW4gJCh3aW4zMmRlZnMpOyBkbyBcCi0JICBsaWJiYXNlPWBiYXNlbmFtZSAiJCRsIiAiLmRlZiJgOyBcCi0JICBsaWJzbz1gZmluZCAiJCh0b3BfYnVpbGRkaXIpIiAtbmFtZSAiJCRsaWJiYXNlLUBHU1RfQVBJX1ZFUlNJT05ALnNvIiB8IGdyZXAgLXYgL19idWlsZC8gfCBoZWFkIC1uMWA7IFwKLQkgIGxpYmRlZj0iJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vJCRsaWJiYXNlLmRlZiI7IFwKLQkgIGlmIHRlc3QgIngkJGxpYnNvIiAhPSAieCI7IHRoZW4gXAotCSAgICBlY2hvIENoZWNraW5nIHN5bWJvbHMgaW4gJCRsaWJzbzsgXAotCSAgICBpZiAhICgkKHRvcF9zcmNkaXIpL2NvbW1vbi9jaGVjay1leHBvcnRzICQkbGliZGVmICQkbGlic28pIDsgdGhlbiBcCi0JICAgICAgZWNobyAiJCRsaWJkZWYiOyBcCi0JICAgICAgaWYgdGVzdCAiJCRsaWJiYXNlIiAhPSAibGliZ3N0Z2wiOyB0aGVuIFwKLQkgICAgICAgIGZhaWw9MTsgXAotCSAgICAgIGZpOyBcCi0JICAgIGZpOyBcCi0JICBmaTsgXAotCWRvbmUgOyBcCi0JaWYgdGVzdCAkJGZhaWwgIT0gMDsgdGhlbiBcCi0JICBlY2hvICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc7IFwKLQkgIGVjaG8gJ1J1biB0aGlzIHRvIHVwZGF0ZSB0aGUgLmRlZiBmaWxlczonOyBcCi0JICBlY2hvICdtYWtlIHVwZGF0ZS1leHBvcnRzJzsgXAotCSAgZWNobyAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nOyBcCi0JZmk7IFwKLQlleGl0ICQkZmFpbAotCi11cGRhdGUtZXhwb3J0czoKLQltYWtlIGNoZWNrLWV4cG9ydHMgMj4mMSB8IHBhdGNoIC1wMQotCWlmIHRlc3QgLWYgIiQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uL2xpYmdzdGdsLmRlZiI7IHRoZW4gXAotCSAgZ2l0IGNoZWNrb3V0ICIkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9saWJnc3RnbC5kZWYiOyAgXAotCWZpCi0JZ2l0IGFkZCAkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9saWJnc3QqLmRlZgotCWdpdCBkaWZmIC0tY2FjaGVkIC0tICQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uLwotCWVjaG8gJ15eXi0tLSB1cGRhdGVkIGFuZCBzdGFnZWQgY2hhbmdlcyBhYm92ZScKLQotIyBjb21wbGFpbiBhYm91dCBub25wb3J0YWJsZSBwcmludGYgZm9ybWF0IHN0cmluZ3MgKCVsbGQsICVsbHUsICV6dSBldGMuKQotY2hlY2stbm9ucG9ydGFibGUtcHJpbnQtZm9ybWF0OgotCUBmYWlsPTAgOyBcCi0JbG9jPWBmaW5kICIkKHRvcF9zcmNkaXIpIiAtbmFtZSAnKi5jJyB8IHhhcmdzIGdyZXAgLW4gLWUgJyVbMC05XSpsbFt1ZHhdJyAtZSAnJVswLTldKnpbdWR4XSdgOyBcCi0JaWYgdGVzdCAieCQkbG9jIiAhPSAieCI7IHRoZW4gXAotCSAgZWNobyAiUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIHByaW50IGZvcm1hdCBzdHJpbmdzOiIgOyBcCi0JICBmaW5kICIkKHRvcF9zcmNkaXIpIiAtbmFtZSAnKi5jJyB8IHhhcmdzIGdyZXAgLW4gLWUgJyVbMC05XSpsbFt1ZHhdJyAtZSAnJVswLTldKnpbdWR4XSc7IFwKLQkgIGZhaWw9MTsgXAotCWZpOyBcCi0JZXhpdCAkJGZhaWwKLQotZGlzdC1ob29rOiBjaGVjay1leHBvcnRzIHdpbjMyLWNoZWNrLWNybGYKLQotcmVsZWFzZTogZGlzdAotCUAkKE1BS0UpICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHouc2hhMjU2c3VtCi0JQGVjaG8KLQlAZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLQlAZWNobyAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyQoUEFDS0FHRSkvJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiIKLQlAY2F0ICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHouc2hhMjU2c3VtCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0JQGlmIFsgLWQgfi9yZWxlYXNlcy8gXTsgdGhlbiBcCi0JICBjcCAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6IH4vcmVsZWFzZXMvOyBcCi0JZmkKLQlAaWYgWyAtZCAuLi93d3cvZGF0YS9zcmMgXTsgdGhlbiBcCi0JICBtdiAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6IC4uL3d3dy9kYXRhL3NyYy8kKFBBQ0tBR0UpLyA7IFwKLQkgIG12IC12ICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHouc2hhMjU2c3VtIC4uL3d3dy9kYXRhL3NyYy8kKFBBQ0tBR0UpLyA7IFwKLQllbGlmIFsgLWQgLi4vLi4vd3d3L2RhdGEvc3JjIF07IHRoZW4gXAotCSAgbXYgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiAuLi8uLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JICBtdiAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bSAuLi8uLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JZmkKLQlAZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKLQotIyBnZW5lcmF0ZSBzaGEyNTYgc3VtIGZpbGVzCi0lLnNoYTI1NnN1bTogJQotCUBzaGEyNTZzdW0gJDwgPiAkQAotCi0jIGNoZWNrIHRoYXQgbm8gbWFyc2hhbCBvciBlbnVtdHlwZXMgZmlsZXMgYXJlIGluY2x1ZGVkCi0jIHRoaXMgaW4gdHVybiBlbnN1cmVzIHRoYXQgZGlzdGNoZWNrIGZhaWxzIGZvciBtaXNzaW5nIC5saXN0IGZpbGVzIHdoaWNoIGlzIGN1cnJlbnRseQotIyBzaGFkb3dlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIC5jIGFuZCAuaCBmaWxlcyBhcmUgaW5jbHVkZWQuCi1kaXN0Y2hlY2staG9vazoKLQlAdGVzdCAieCIgPSAieGBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotZW51bXR5cGVzLltjaF0gfCBncmVwIC12IHdpbjMyYCIgJiYgXAotCXRlc3QgIngiID0gInhgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLW1hcnNoYWwuW2NoXWAiIHx8IFwKLQkoIGVjaG8gIioqKiBMZWZ0b3ZlciBlbnVtdHlwZXMgb3IgbWFyc2hhbCBmaWxlcyBpbiB0aGUgdGFyYmFsbC4iICYmIFwKLQkgIGVjaG8gIioqKiBNYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgbm90IGRpc3RlZDoiICYmIFwKLQkgIGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1lbnVtdHlwZXMuW2NoXSB8IGdyZXAgLXYgd2luMzIgJiYgXAotCSAgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLW1hcnNoYWwuW2NoXSAmJiBcCi0JICBmYWxzZSApCi0KLSMgcnVsZSB0byBkb3dubG9hZCB0aGUgbGF0ZXN0IC5wbyBmaWxlcwotZG93bmxvYWQtcG86ICQodG9wX3NyY2RpcikvY29tbW9uL2Rvd25sb2FkLXRyYW5zbGF0aW9ucwotCSQodG9wX3NyY2RpcikvY29tbW9uL2Rvd25sb2FkLXRyYW5zbGF0aW9ucyAkKFBBQ0tBR0UpCi0KLWNoZWNrLXZhbGdyaW5kOgotCSQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgY2hlY2stdmFsZ3JpbmQKLQotQEhBVkVfR1NUX0NIRUNLX1RSVUVAY2hlY2stdG9ydHVyZToKLUBIQVZFX0dTVF9DSEVDS19UUlVFQAkkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIHRvcnR1cmUKLUBIQVZFX0dTVF9DSEVDS19UUlVFQGJ1aWxkLWNoZWNrczoKLUBIQVZFX0dTVF9DSEVDS19UUlVFQAkkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGJ1aWxkLWNoZWNrcwotQEhBVkVfR1NUX0NIRUNLX0ZBTFNFQGNoZWNrLXRvcnR1cmU6Ci1ASEFWRV9HU1RfQ0hFQ0tfRkFMU0VACXRydWUKLUBIQVZFX0dTVF9DSEVDS19GQUxTRUBidWlsZC1jaGVja3M6Ci1ASEFWRV9HU1RfQ0hFQ0tfRkFMU0VACXRydWUKLQotd2luMzItdXBkYXRlOgotCWNwICQodG9wX2J1aWxkZGlyKS93aW4zMi9jb21tb24vY29uZmlnLmgtbmV3IFwKLQkgICAgJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vY29uZmlnLmgKLS5QSE9OWTogbGNvdi1yZXNldCBsY292IGxjb3YtcnVuIGxjb3YtcmVwb3J0IGxjb3YtdXBsb2FkIGxjb3YtY2xlYW4KLQotIyBydW4gbGNvdiBmcm9tIHNjcmF0Y2gsIGFsd2F5cwotbGNvdi1yZXNldDoKLQkkKE1BS0UpIGxjb3YtcnVuCi0JJChNQUtFKSBsY292LXJlcG9ydAotCi0jIHJ1biBsY292IGZyb20gc2NyYXRjaCBpZiB0aGUgZGlyIGlzIG5vdCB0aGVyZQotbGNvdjoKLQkkKE1BS0UpIGxjb3YtcmVzZXQKLQotIyByZXNldCBsY292IHN0YXRzCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQGxjb3YtY2xlYW46Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlALXJtIC1yZiBsY292Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlsY292IC0tZGlyZWN0b3J5IC4gLS16ZXJvY291bnRlcnMKLQotIyByZXNldCBydW4gY292ZXJhZ2UgdGVzdHMKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVAbGNvdi1ydW46Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAktJChNQUtFKSBsY292LWNsZWFuCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAktaWYgdGVzdCAtZCB0ZXN0cy9jaGVjazsgdGhlbiAkKE1BS0UpIC1DIHRlc3RzL2NoZWNrIGluc3BlY3Q7IGZpCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAktJChNQUtFKSBjaGVjawotCi0jIGdlbmVyYXRlIHJlcG9ydCBiYXNlZCBvbiBjdXJyZW50IGNvdmVyYWdlIGRhdGEKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVAbGNvdi1yZXBvcnQ6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlta2RpciBsY292Ci1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlsY292IC0tY29tcGF0LWxpYnRvb2wgLS1kaXJlY3RvcnkgLiAtLWNhcHR1cmUgLS1vdXRwdXQtZmlsZSBsY292L2xjb3YuaW5mbwotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAtdiAiYGNkICQodG9wX3NyY2RpcikgJiYgcHdkYCIgfCBjdXQgLWRcfCAtZjEgPiBsY292L3JlbW92ZQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAidGVzdHMvY2hlY2svIiB8IGN1dCAtZFx8IC1mMSA+PiBsY292L3JlbW92ZQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAiZG9jcy9wbHVnaW5zLyIgfCBjdXQgLWRcfCAtZjEgPj4gbGNvdi9yZW1vdmUKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACWxjb3YgLXIgbGNvdi9sY292LmluZm8gYGNhdCBsY292L3JlbW92ZWAgPiBsY292L2xjb3YuY2xlYW5lZC5pbmZvCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAlybSBsY292L3JlbW92ZQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJbXYgbGNvdi9sY292LmNsZWFuZWQuaW5mbyBsY292L2xjb3YuaW5mbwotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJZ2VuaHRtbCAtdCAiJChQQUNLQUdFX1NUUklORykiIC1vIGxjb3YgLS1udW0tc3BhY2VzIDIgbGNvdi9sY292LmluZm8KLQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUBsY292LXVwbG9hZDogbGNvdgotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJcnN5bmMgLXJ2eiAtZSBzc2ggLS1kZWxldGUgbGNvdi8qIGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmc6L3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2NvdmVyYWdlL2xjb3YvJChQQUNLQUdFKQotCi1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUBsY292LXJ1bjoKLUBHU1RfR0NPVl9FTkFCTEVEX0ZBTFNFQAllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLQotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VAbGNvdi1yZXBvcnQ6Ci1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAJZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCi0KLWNoZWNrLWNydWZ0OgotCUBjcnVmdF9maWxlcz0iIjsgY3J1ZnRfZGlycz0iIjsgXAotCWZvciBmIGluICQoQ1JVRlRfRklMRVMpOyBkbyBcCi0JICBpZiB0ZXN0IC1lICQkZjsgdGhlbiBcCi0JICAgIGNydWZ0X2ZpbGVzPSIkJGNydWZ0X2ZpbGVzICQkZiI7IFwKLQkgIGZpIFwKLQlkb25lOyBcCi0JZm9yIGQgaW4gJChDUlVGVF9ESVJTKTsgZG8gXAotCSAgaWYgdGVzdCAtZSAkJGQ7IHRoZW4gXAotCSAgICBjcnVmdF9kaXJzPSIkJGNydWZ0X2RpcnMgJCRkIjsgXAotCSAgZmkgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICJ4JCRjcnVmdF9maWxlcyQkY3J1ZnRfZGlycyIgIT0geDsgdGhlbiBcCi0JICBlY2hvOyBcCi0JICBlY2hvICIqKioqIENSVUZUIEFMRVJUICoqKioqIjsgXAotCSAgZWNobzsgXAotCSAgZWNobyAiVGhlIGZvbGxvd2luZyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgbWF5IG5vdCBiZSBuZWVkZWQgYW55ICI7IFwKLQkgIGVjaG8gImxvbmdlciAodXN1YWxseSBiZWNhdXNlIGEgcGx1Z2luIGhhcyBiZWVuIG1lcmdlZCBpbnRvICAgICAiOyBcCi0JICBlY2hvICJhbm90aGVyIHBsdWdpbiwgbW92ZWQgdG8gYSBkaWZmZXJlbnQgbW9kdWxlLCBvciBiZWVuICAgICAgIjsgXAotCSAgZWNobyAicmVuYW1lZCksIGFuZCB5b3UgcHJvYmFibHkgd2FudCB0byBjbGVhbiB0aGVtIHVwIGlmIHlvdSAgICI7IFwKLQkgIGVjaG8gImRvbid0IGhhdmUgbG9jYWwgY2hhbmdlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOyBcCi0JICBlY2hvOyBcCi0JICBmb3IgZiBpbiAkJGNydWZ0X2ZpbGVzOyBkbyBlY2hvICJmaWxlICQkZiI7IGRvbmU7IFwKLQkgIGVjaG87IFwKLQkgIGZvciBkIGluICQkY3J1ZnRfZGlyczsgZG8gZWNobyAiZGlyZWN0b3J5ICQkZCI7IGRvbmU7IFwKLQkgIGVjaG87IFwKLQkgIGVjaG8gIidtYWtlIGNsZWFuLWNydWZ0JyB3aWxsIHJlbW92ZSB0aGVzZSBmb3IgeW91LiI7IFwKLQkgIGVjaG87IFwKLQlmaQotCi1jbGVhbi1jcnVmdC1kaXJzOgotCUBmb3IgZCBpbiAkKENSVUZUX0RJUlMpOyBkbyBcCi0JICBpZiB0ZXN0IC1lICQkZDsgdGhlbiBcCi0JICAgIHJtIC1yICIkJGQiICYmIGVjaG8gIlJlbW92ZWQgZGlyZWN0b3J5ICQkZCI7IFwKLQkgIGZpIFwKLQlkb25lCi0KLWNsZWFuLWNydWZ0LWZpbGVzOgotCUBmb3IgZiBpbiAkKENSVUZUX0ZJTEVTKTsgZG8gXAotCSAgaWYgdGVzdCAtZSAkJGY7IHRoZW4gXAotCSAgICBybSAiJCRmIiAmJiBlY2hvICJSZW1vdmVkIGZpbGUgJCRmIjsgXAotCSAgZmkgXAotCWRvbmUKLQotY2xlYW4tY3J1ZnQ6IGNsZWFuLWNydWZ0LWRpcnMgY2xlYW4tY3J1ZnQtZmlsZXMKLQotIyBhbHNvIG1pZ2h0IHdhbnQgdG8gYWRkIHRoaXMgdG8geW91ciBNYWtlZmlsZS5hbToKLSMKLSMgYWxsLWxvY2FsOiBjaGVjay1jcnVmdAotCi1hbGwtbG9jYWw6IGNoZWNrLWNydWZ0Ci0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjA0NDI0Li4wMDAwMDAwCi0tLSBhL05FV1MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjE2ICswLDAgQEAKLSMgR1N0cmVhbWVyIDEuMTAgUmVsZWFzZSBOb3RlcwotCi1HU3RyZWFtZXIgMS4xMC4wIHdhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIG9uIDFzdCBOb3ZlbWJlciAyMDE2LgotVGhlIGxhdGVzdCBidWctZml4IHJlbGVhc2UgaW4gdGhlIDEuMTAgc2VyaWVzIGlzIFsxLjEwLjRdKCMxLjEwLjQpIGFuZCB3YXMKLXJlbGVhc2VkIG9uIDIzIEZlYnJ1YXJ5IDIwMTcuCi0KLVRoZSBHU3RyZWFtZXIgdGVhbSBpcyBwcm91ZCB0byBhbm5vdW5jZSBhIG5ldyBtYWpvciBmZWF0dXJlIHJlbGVhc2UgaW4gdGhlCi1zdGFibGUgMS54IEFQSSBzZXJpZXMgb2YgeW91ciBmYXZvdXJpdGUgY3Jvc3MtcGxhdGZvcm0gbXVsdGltZWRpYSBmcmFtZXdvcmshCi0KLUFzIGFsd2F5cywgdGhpcyByZWxlYXNlIGlzIGFnYWluIHBhY2tlZCB3aXRoIG5ldyBmZWF0dXJlcywgYnVnIGZpeGVzIGFuZCBvdGhlcgotaW1wcm92ZW1lbnRzLgotCi1TZWUgW2h0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8xLjEwL11bbGF0ZXN0XSBmb3IgdGhlIGxhdGVzdAotdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LgotCi0qTGFzdCB1cGRhdGVkOiBUaHVyc2RheSAyMyBGZWIgMjAxNywgMTU6MDAgVVRDIFsobG9nKV1bZ2l0bG9nXSoKLQotW2xhdGVzdF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8xLjEwLwotW2dpdGxvZ106IGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL3d3dy9sb2cvc3JjL2h0ZG9jcy9yZWxlYXNlcy8xLjEwL3JlbGVhc2Utbm90ZXMtMS4xMC5tZAotCi0jIyBJbnRyb2R1Y3Rpb24KLQotVGhlIEdTdHJlYW1lciB0ZWFtIGlzIHByb3VkIHRvIGFubm91bmNlIGEgbmV3IG1ham9yIGZlYXR1cmUgcmVsZWFzZSBpbiB0aGUKLXN0YWJsZSAxLnggQVBJIHNlcmllcyBvZiB5b3VyIGZhdm91cml0ZSBjcm9zcy1wbGF0Zm9ybSBtdWx0aW1lZGlhIGZyYW1ld29yayEKLQotQXMgYWx3YXlzLCB0aGlzIHJlbGVhc2UgaXMgYWdhaW4gcGFja2VkIHdpdGggbmV3IGZlYXR1cmVzLCBidWcgZml4ZXMgYW5kIG90aGVyCi1pbXByb3ZlbWVudHMuCi0KLSMjIEhpZ2hsaWdodHMKLQotLSBTZXZlcmFsIGNvbnZlbmllbmNlIEFQSXMgaGF2ZSBiZWVuIGFkZGVkIHRvIG1ha2UgZGV2ZWxvcGVycycgbGl2ZXMgZWFzaWVyCi0tIEEgbmV3IGBHc3RTdHJlYW1gIEFQSSBwcm92aWRlcyBhcHBsaWNhdGlvbnMgYSBtb3JlIG1lYW5pbmdmdWwgdmlldyBvZiB0aGUKLSAgc3RydWN0dXJlIG9mIHN0cmVhbXMsIHNpbXBsaWZ5aW5nIHRoZSBwcm9jZXNzIG9mIGRlYWxpbmcgd2l0aCBtZWRpYSBpbgotICBjb21wbGV4IGNvbnRhaW5lciBmb3JtYXRzCi0tIEV4cGVyaW1lbnRhbCBgZGVjb2RlYmluM2AgYW5kIGBwbGF5YmluM2AgZWxlbWVudHMgd2hpY2ggYnJpbmcgYSBudW1iZXIgb2YKLSAgaW1wcm92ZW1lbnRzIHdoaWNoIHdlcmUgaGFyZCB0byBpbXBsZW1lbnQgd2l0aGluIGBkZWNvZGViaW5gIGFuZCBgcGxheWJpbmAKLS0gQSBuZXcgYHBhcnNlYmluYCBlbGVtZW50IHRvIGF1dG9tYXRpY2FsbHkgdW5wYWNrIGFuZCBwYXJzZSBhIHN0cmVhbSwgc3RvcHBpbmcKLSAganVzdCBzaG9ydCBvZiBkZWNvZGluZwotLSBFeHBlcmltZW50YWwgbmV3IGBtZXNvbmAtYmFzZWQgYnVpbGQgc3lzdGVtLCBicmluZ2luZyBmYXN0ZXIgYnVpbGQgYW5kIG11Y2gKLSAgYmV0dGVyIFdpbmRvd3Mgc3VwcG9ydCAoaW5jbHVkaW5nIGZvciBidWlsZGluZyB3aXRoIFZpc3VhbCBTdHVkaW8pCi0tIEEgbmV3IGBnc3QtZG9jc2AgbW9kdWxlIGhhcyBiZWVuIGNyZWF0ZWQsIGFuZCB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbW92aW5nCi0gIG91ciBkb2N1bWVudGF0aW9uIHRvIGEgbWFya2Rvd24tYmFzZWQgZm9ybWF0IGZvciBlYXNpZXIgbWFpbnRlbmFuY2UgYW5kCi0gIHVwZGF0ZXMKLS0gQSBuZXcgYGdzdC1leGFtcGxlc2AgbW9kdWxlIGhhcyBiZWVuIGNyZWF0ZWQsIHdoaWNoIGNvbnRhaW5zIGV4YW1wbGUKLSAgR1N0cmVhbWVyIGFwcGxpY2F0aW9ucyBhbmQgaXMgZXhwZWN0ZWQgdG8gZ3JvdyB3aXRoIG1hbnkgbW9yZSBleGFtcGxlcyBpbgotICB0aGUgZnV0dXJlCi0tIFZhcmlvdXMgT3BlbkdMIGFuZCBPcGVuR0x8RVMtcmVsYXRlZCBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIGZvciBncmVhdGVyCi0gIGVmZmljaWVuY3kgb24gZGVza3RvcCBhbmQgbW9iaWxlIHBsYXRmb3JtcywgYW5kIFZ1bGthbiBzdXBwb3J0IG9uIFdheWxhbmQgd2FzCi0gIGFsc28gYWRkZWQKLS0gRXh0ZW5zaXZlIGltcHJvdmVtZW50cyB0byB0aGUgVkFBUEkgcGx1Z2lucyBmb3IgaW1wcm92ZWQgcm9idXN0bmVzcyBhbmQKLSAgZWZmaWNpZW5jeQotLSBMb3RzIG9mIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgYWNyb3NzIHRoZSBib2FyZCwgc3Bhbm5pbmcgUlRQL1JUU1AsIFY0TDIsCi0gIEJsdWV0b290aCwgYXVkaW8gY29udmVyc2lvbiwgZWNobyBjYW5jZWxsYXRpb24sIGFuZCBtb3JlIQotCi0jIyBNYWpvciBuZXcgZmVhdHVyZXMgYW5kIGNoYW5nZXMKLQotIyMjIE5vdGV3b3J0aHkgbmV3IEFQSSwgZmVhdHVyZXMgYW5kIG90aGVyIGNoYW5nZXMKLQotIyMjIyBDb3JlIEFQSSBhZGRpdGlvbnMKLQotIyMjIyMgUmVjZWl2ZSBwcm9wZXJ0eSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB2aWEgYnVzIG1lc3NhZ2VzCi0KLU5ldyBBUEkgd2FzIGFkZGVkIHRvIHJlY2VpdmUgZWxlbWVudCBwcm9wZXJ0eSBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB2aWEKLWJ1cyBtZXNzYWdlcy4gU28gZmFyLCBhcHBsaWNhdGlvbnMgaGFkIHRvIGNvbm5lY3QgYSBjYWxsYmFjayB0byBhbiBlbGVtZW50J3MKLWBub3RpZnk6OnByb3BlcnR5LW5hbWVgIHNpZ25hbCB2aWEgdGhlIEdPYmplY3QgQVBJLCB3aGljaCB3YXMgaW5jb252ZW5pZW50IGZvcgotYXQgbGVhc3QgdHdvIHJlYXNvbnM6IG9uZSBoYWQgdG8gaW1wbGVtZW50IGEgc2lnbmFsIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgdGhhdAotY2FsbGJhY2sgZnVuY3Rpb24gd291bGQgdXN1YWxseSBiZSBjYWxsZWQgZnJvbSBvbmUgb2YgdGhlIHN0cmVhbWluZyB0aHJlYWRzLCBzbwotb25lIGhhZCB0byBtYXJzaGFsIChzZW5kKSBhbnkgaW5mb3JtYXRpb24gZ2F0aGVyZWQgb3IgcGVuZGluZyByZXF1ZXN0cyB0byB0aGUKLW1haW4gYXBwbGljYXRpb24gdGhyZWFkIHdoaWNoIHdhcyB0ZWRpb3VzIGFuZCBlcnJvci1wcm9uZS4KLQotRW50ZXIgW2Bnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfbm90aWZ5X3dhdGNoKClgXVtub3RpZnktd2F0Y2hdIGFuZAotW2Bnc3RfZWxlbWVudF9hZGRfcHJvcGVydHlfZGVlcF9ub3RpZnlfd2F0Y2goKWBdW2RlZXAtbm90aWZ5LXdhdGNoXSB3aGljaCB3aWxsCi13YXRjaCBmb3IgY2hhbmdlcyBvZiBhIHByb3BlcnR5IG9uIHRoZSBzcGVjaWZpZWQgZWxlbWVudCwgZWl0aGVyIG9ubHkgZm9yIHRoaXMKLWVsZW1lbnQgb3IgcmVjdXJzaXZlbHkgZm9yIGEgd2hvbGUgYmluIG9yIHBpcGVsaW5lLiBXaGVuZXZlciBzdWNoIGEKLXByb3BlcnR5IGNoYW5nZSBoYXBwZW5zLCBhIGBHU1RfTUVTU0FHRV9QUk9QRVJUWV9OT1RJRllgIG1lc3NhZ2Ugd2lsbCBiZSBwb3N0ZWQKLW9uIHRoZSBwaXBlbGluZSBidXMgd2l0aCBkZXRhaWxzIG9mIHRoZSBlbGVtZW50LCB0aGUgcHJvcGVydHkgYW5kIHRoZSBuZXcKLXByb3BlcnR5IHZhbHVlLCBhbGwgb2Ygd2hpY2ggY2FuIGJlIHJldHJpZXZlZCBsYXRlciBmcm9tIHRoZSBtZXNzYWdlIGluIHRoZQotYXBwbGljYXRpb24gdmlhIFtgZ3N0X21lc3NhZ2VfcGFyc2VfcHJvcGVydHlfbm90aWZ5KClgXVtwYXJzZS1ub3RpZnldLiBVbmxpa2UKLXRoZSBHc3RCdXMgd2F0Y2ggZnVuY3Rpb25zLCB0aGlzIEFQSSBkb2VzIG5vdCByZWx5IG9uIGEgcnVubmluZyBHTGliIG1haW4gbG9vcC4KLQotVGhlIGFib3ZlIGNhbiBiZSB1c2VkIHRvIGJlIG5vdGlmaWVkIGFzeW5jaHJvbm91c2x5IG9mIGNhcHMgY2hhbmdlcyBpbiB0aGUKLXBpcGVsaW5lLCBvciB2b2x1bWUgY2hhbmdlcyBvbiBhbiBhdWRpbyBzaW5rIGVsZW1lbnQsIGZvciBleGFtcGxlLgotCi1bbm90aWZ5LXdhdGNoXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1hZGQtcHJvcGVydHktbm90aWZ5LXdhdGNoCi1bZGVlcC1ub3RpZnktd2F0Y2hdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWFkZC1wcm9wZXJ0eS1kZWVwLW5vdGlmeS13YXRjaAotW3BhcnNlLW5vdGlmeV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtcGFyc2UtcHJvcGVydHktbm90aWZ5Ci0KLSMjIyMjIEdzdEJpbiAiZGVlcCIgZWxlbWVudC1hZGRlZCBhbmQgZWxlbWVudC1yZW1vdmVkIHNpZ25hbHMKLQotR3N0QmluIGhhcyBnYWluZWQgYCJkZWVwLWVsZW1lbnQtYWRkZWQiYCBhbmQgYCJkZWVwLWVsZW1lbnQtcmVtb3ZlZCJgIHNpZ25hbHMKLXdoaWNoIG1ha2VzIGl0IGVhc2llciBmb3IgYXBwbGljYXRpb25zIGFuZCBoaWdoZXItbGV2ZWwgcGx1Z2lucyB0byB0cmFjayB3aGVuCi1lbGVtZW50cyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEgY29tcGxleCBwaXBlbGluZSB3aXRoIG11bHRpcGxlIHN1Yi1iaW5zLgotCi1gcGxheWJpbmAgbWFrZXMgdXNlIG9mIHRoaXMgdG8gaW1wbGVtZW50IHRoZSBuZXcgYCJlbGVtZW50LXNldHVwImAgc2lnbmFsIHdoaWNoCi1jYW4gYmUgdXNlZCB0byBjb25maWd1cmUgZWxlbWVudHMgYXMgdGhleSBhcmUgYWRkZWQgdG8gYHBsYXliaW5gLCBqdXN0IGxpa2UgdGhlCi1leGlzdGluZyBgInNvdXJjZS1zZXR1cCJgIHNpZ25hbCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHNvdXJjZQotZWxlbWVudCBjcmVhdGVkLgotCi0jIyMjIyBFcnJvciBtZXNzYWdlcyBjYW4gY29udGFpbiBhZGRpdGlvbmFsIHN0cnVjdHVyZWQgZGV0YWlscwotCi1JdCBpcyBvZnRlbiB1c2VmdWwgdG8gcHJvdmlkZSBhZGRpdGlvbmFsLCBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGluIGVycm9yLAotd2FybmluZyBvciBpbmZvIG1lc3NhZ2VzIGZvciBhcHBsaWNhdGlvbnMgKG9yIGhpZ2hlci1sZXZlbCBlbGVtZW50cykgdG8gbWFrZQotaW50ZWxsaWdlbnQgZGVjaXNpb25zIGJhc2VkIG9uIHRoZW0uIFRvIGFsbG93IHRoaXMsIGVycm9yLCB3YXJuaW5nIGFuZCBpbmZvCi1tZXNzYWdlcyBub3cgaGF2ZSBBUEkgZm9yIGFkZGluZyBhcmJpdHJhcnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byB0aGVtCi11c2luZyBhIGBHc3RTdHJ1Y3R1cmVgOgotW2BHU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFNgXVtlbGVtZW50LWVycm9yLXdpdGgtZGV0YWlsc10gYW5kCi1jb3JyZXNwb25kaW5nIEFQSSBmb3IgdGhlIG90aGVyIG1lc3NhZ2UgdHlwZXMuCi0KLVRoaXMgaXMgbm93IHVzZWQgZS5nLiBieSB0aGUgbmV3IFtgR1NUX0VMRU1FTlRfRkxPV19FUlJPUmBdW2VsZW1lbnQtZmxvdy1lcnJvcl0KLUFQSSB0byBpbmNsdWRlIHRoZSBhY3R1YWwgZmxvdyBlcnJvciBpbiB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHRoZQotW3NvdXBodHRwc3JjIGVsZW1lbnRdW3NvdXBodHRwc3JjLWRldGFpbGVkLWVycm9yc10gdG8gcHJvdmlkZSB0aGUgSFRUUAotc3RhdHVzIGNvZGUsIGFuZCB0aGUgVVJMIChpZiBhbnkpIHRvIHdoaWNoIGEgcmVkaXJlY3Rpb24gaGFzIGhhcHBlbmVkLgotCi1bZWxlbWVudC1lcnJvci13aXRoLWRldGFpbHNdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudC5odG1sI0dTVC1FTEVNRU5ULUVSUk9SLVdJVEgtREVUQUlMUzpDQVBTCi1bZWxlbWVudC1mbG93LWVycm9yXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEVsZW1lbnQuaHRtbCNHU1QtRUxFTUVOVC1GTE9XLUVSUk9SOkNBUFMKLVtzb3VwaHR0cHNyYy1kZXRhaWxlZC1lcnJvcnNdOiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kL3RyZWUvZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYz9pZD02MGQzMGRiOTEyYTFhZWRkNzQzZTY2YjlkY2QyZTIxZDcxZmJiMjRmI24xMzE4Ci0KLSMjIyMjIFJlZGlyZWN0IG1lc3NhZ2VzIGhhdmUgb2ZmaWNpYWwgQVBJIG5vdwotCi1Tb21ldGltZXMsIGVsZW1lbnRzIG5lZWQgdG8gcmVkaXJlY3QgdGhlIGN1cnJlbnQgc3RyZWFtIFVSTCBhbmQgdGVsbCB0aGUKLWFwcGxpY2F0aW9uIHRvIHByb2NlZWQgd2l0aCB0aGlzIG5ldyBVUkwsIHBvc3NpYmx5IHVzaW5nIGEgZGlmZmVyZW50Ci1wcm90b2NvbCB0b28gKHRodXMgY2hhbmdpbmcgdGhlIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24pLiBVbnRpbCBub3csIHRoaXMgd2FzCi1pbmZvcm1hbGx5IGltcGxlbWVudGVkIHVzaW5nIGBFTEVNRU5UYCBtZXNzYWdlcyBvbiB0aGUgYnVzLgotCi1Ob3cgdGhpcyBoYXMgYmVlbiBmb3JtYWxpemVkIGluIHRoZSBmb3JtIG9mIGEgbmV3IGBHU1RfTUVTU0FHRV9SRURJUkVDVGAgbWVzc2FnZS4KLUEgbmV3IHJlZGlyZWN0IG1lc3NhZ2UgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgW2Bnc3RfbWVzc2FnZV9uZXdfcmVkaXJlY3QoKWBdW25ldy1yZWRpcmVjdF0uCi1JZiBuZWVkZWQsIG11bHRpcGxlIHJlZGlyZWN0IGxvY2F0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IGNhbGxpbmcKLVtgZ3N0X21lc3NhZ2VfYWRkX3JlZGlyZWN0X2VudHJ5KClgXVthZGQtcmVkaXJlY3RdIHRvIGFkZCBmdXJ0aGVyIHJlZGlyZWN0Ci1lbnRyaWVzLCBhbGwgd2l0aCBtZXRhZGF0YSwgc28gdGhlIGFwcGxpY2F0aW9uIGNhbiBkZWNpZGUgd2hpY2ggaXMKLW1vc3Qgc3VpdGFibGUgKGUuZy4gZGVwZW5kaW5nIG9uIHRoZSBiaXRyYXRlIHRhZ3MpLgotCi1bbmV3LXJlZGlyZWN0XTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctcmVkaXJlY3QKLVthZGQtcmVkaXJlY3RdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0TWVzc2FnZS5odG1sI2dzdC1tZXNzYWdlLWFkZC1yZWRpcmVjdC1lbnRyeQotCi0jIyMjIyBOZXcgcGFkIGxpbmtpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgYXV0b21hdGljYWxseSBjcmVhdGUgZ2hvc3QgcGFkcwotCi1OZXcgcGFkIGxpbmtpbmcgY29udmVuaWVuY2UgZnVuY3Rpb25zIHdlcmUgYWRkZWQ6Ci1bYGdzdF9wYWRfbGlua19tYXliZV9naG9zdGluZygpYF1bcGFkLW1heWJlLWdob3N0XSBhbmQKLVtgZ3N0X3BhZF9saW5rX21heWJlX2dob3N0aW5nX2Z1bGwoKWBdW3BhZC1tYXliZS1naG9zdC1mdWxsXSB3aGljaCB3ZXJlCi1wcmV2aW91c2x5IGludGVybmFsIHRvIEdTdHJlYW1lciBoYXZlIG5vdyBiZWVuIGV4cG9zZWQgZm9yIGdlbmVyYWwgdXNlLgotCi1UaGUgZXhpc3RpbmcgcGFkIGxpbmsgZnVuY3Rpb25zIHdpbGwgcmVmdXNlIHRvIGxpbmsgcGFkcyBvciBlbGVtZW50cyBhdAotZGlmZmVyZW50IGxldmVscyBpbiB0aGUgcGlwZWxpbmUgaGllcmFyY2h5LCByZXF1aXJpbmcgdGhlIGRldmVsb3BlciB0bwotY3JlYXRlIGdob3N0IHBhZHMgd2hlcmUgbmVjZXNzYXJ5LiBUaGVzZSBuZXcgdXRpbGl0eSBmdW5jdGlvbnMgd2lsbAotYXV0b21hdGljYWxseSBjcmVhdGUgZ2hvc3RwYWRzIGFzIG5lZWRlZCB3aGVuIGxpbmtpbmcgcGFkcyBhdCBkaWZmZXJlbnQKLWxldmVscyBvZiB0aGUgaGllcmFyY2h5IChlLmcuIGZyb20gYW4gZWxlbWVudCBpbnNpZGUgYSBiaW4gdG8gb25lIHRoYXQncyBhdAotdGhlIHNhbWUgbGV2ZWwgaW4gdGhlIGhpZXJhcmNoeSBhcyB0aGUgYmluLCBvciBpbiBhbm90aGVyIGJpbikuCi0KLVtwYWQtbWF5YmUtZ2hvc3RdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLW1heWJlLWdob3N0aW5nCi1bcGFkLW1heWJlLWdob3N0LWZ1bGxdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1saW5rLW1heWJlLWdob3N0aW5nLWZ1bGwKLQotIyMjIyMgTWlzY2VsbGFuZW91cwotCi1QYWQgcHJvYmVzOiBJRExFIGFuZCBCTE9DSyBwcm9iZXMgbm93IHdvcmsgc2xpZ2h0bHkgZGlmZmVyZW50bHkgaW4gcHVsbCBtb2RlLAotc28gdGhhdCBwdXNoIGFuZCBwdWxsIG1vZGUgaGF2ZSBvcHBvc2l0ZSBzY2VuYXJpb3MgZm9yIGlkbGUgYW5kIGJsb2NraW5nIHByb2Jlcy4KLUluIHB1c2ggbW9kZSwgaXQgd2lsbCBibG9jayB3aXRoIHNvbWUgZGF0YSB0eXBlIGFuZCBJRExFIHdvbid0IGhhdmUgYW55IGRhdGEuCi1JbiBwdWxsIG1vZGUsIGl0IHdpbGwgYmxvY2sgX2JlZm9yZV8gZ2V0dGluZyBhIGJ1ZmZlciBhbmQgd2lsbCBiZSBJRExFIG9uY2Ugc29tZQotZGF0YSBoYXMgYmVlbiBvYnRhaW5lZC4gKFtjb21taXRdW2NvbW1pdC1wYWQtcHJvYmVzXSwgW2J1Z11bYnVnLXBhZC1wcm9iZXNdKQotCi1bY29tbWl0LXBhZC1wcm9iZXNdOiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvY29tbWl0L2dzdC9nc3RwYWQuYz9pZD0zNjhlZThhMzM2ZDBjODY4ZDgxZmRhY2U1NGIyNDQzMWE4YjQ4Y2JmCi1bYnVnLXBhZC1wcm9iZXNdOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxMjExCi0KLVtgZ3N0X3BhcnNlX2xhdW5jaF9mdWxsKClgXVtwYXJzZS1sYXVuY2gtZnVsbF0gY2FuIG5vdyBiZSBtYWRlIHRvIHJldHVybiBhCi1gR3N0QmluYCBpbnN0ZWFkIG9mIGEgdG9wLWxldmVsIHBpcGVsaW5lIGJ5IHBhc3NpbmcgdGhlIG5ldwotYEdTVF9QQVJTRV9GTEFHX1BMQUNFX0lOX0JJTmAgZmxhZy4KLQotW3BhcnNlLWxhdW5jaC1mdWxsXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RQYXJzZS5odG1sI2dzdC1wYXJzZS1sYXVuY2gtZnVsbAotCi1UaGUgZGVmYXVsdCBHU3RyZWFtZXIgZGVidWcgbG9nIGhhbmRsZXIgY2FuIG5vdyBiZSByZW1vdmVkIGJlZm9yZQotY2FsbGluZyBgZ3N0X2luaXQoKWAsIHNvIHRoYXQgaXQgd2lsbCBuZXZlciBnZXQgaW5zdGFsbGVkIGFuZCB3b24ndCBiZSBhY3RpdmUKLWR1cmluZyBpbml0aWFsaXphdGlvbi4KLQotQSBuZXcgW2BTVFJFQU1fR1JPVVBfRE9ORWAgZXZlbnRdW3N0cmVhbS1ncm91cC1kb25lLWV2ZW50XSB3YXMgYWRkZWQuIEluIHNvbWUKLXdheXMgaXQgd29ya3Mgc2ltaWxhciB0byB0aGUgYEVPU2AgZXZlbnQgaW4gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byB1bmJsb2NrCi1kb3duc3RyZWFtIGVsZW1lbnRzIHdoaWNoIG1heSBiZSB3YWl0aW5nIGZvciBmdXJ0aGVyIGRhdGEsIHN1Y2ggYXMgZm9yIGV4YW1wbGUKLWBpbnB1dC1zZWxlY3RvcmAuIFVubGlrZSBgRU9TYCwgZnVydGhlciBkYXRhIGZsb3cgbWF5IGhhcHBlbiBhZnRlciB0aGUKLWBTVFJFQU1fR1JPVVBfRE9ORWAgZXZlbnQgdGhvdWdoIChhbmQgd2l0aG91dCB0aGUgbmVlZCB0byBmbHVzaCB0aGUgcGlwZWxpbmUpLgotVGhpcyBpcyB1c2VkIHRvIHVuYmxvY2sgaW5wdXQtc2VsZWN0b3Igd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBzdHJlYW1zIGluCi1hZGFwdGl2ZSBzdHJlYW1pbmcgc2NlbmFyaW9zIChlLmcuIEhMUykuCi0KLVtzdHJlYW0tZ3JvdXAtZG9uZS1ldmVudF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RyZWFtLWdyb3VwLWRvbmUKLQotVGhlIGBnc3QtbGF1bmNoLTEuMGAgY29tbWFuZCBsaW5lIHRvb2wgd2lsbCBub3cgcHJpbnQgdW5lc2NhcGVkIGNhcHMgaW4gdmVyYm9zZQotbW9kZSAoZW5hYmxlZCBieSB0aGUgLXYgc3dpdGNoKS4KLQotW2Bnc3RfZWxlbWVudF9jYWxsX2FzeW5jKClgXVtjYWxsLWFzeW5jXSBoYXMgYmVlbiBhZGRlZCBhcyBjb252ZW5pZW5jZSBBUEkgZm9yCi1wbHVnaW4gZGV2ZWxvcGVycy4gSXQgaXMgdXNlZnVsIGZvciBvbmUtc2hvdCBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lCi1mcm9tIGEgdGhyZWFkIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgc3RyZWFtaW5nIHRocmVhZC4gSXQgaXMgYmFja2VkIGJ5IGEKLXRocmVhZC1wb29sIHRoYXQgaXMgc2hhcmVkIGJ5IGFsbCBlbGVtZW50cy4KLQotW2NhbGwtYXN5bmNdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWNhbGwtYXN5bmMKLQotVmFyaW91cyByYWNlIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGZpeGVkIGFyb3VuZCB0aGUgYEdzdFBvbGxgIEFQSSB1c2VkIGJ5IGUuZy4KLWBHc3RCdXNgIGFuZCBgR3N0QnVmZmVyUG9vbGAuIFNvbWUgb2YgdGhlc2UgbWFuaWZlc3RlZCB0aGVtc2VsdmVzIHByaW1hcmlseQotb24gV2luZG93cy4KLQotYEdzdEFkYXB0ZXJgIGNhbiBub3cga2VlcCB0cmFjayBvZiBkaXNjb250aW51aXRpZXMgc2lnbmFsbGVkIHZpYSB0aGUgYERJU0NPTlRgCi1idWZmZXIgZmxhZywgYW5kIGhhcyBnYWluZWQgW25ldyBBUEldW25ldy1hZGFwdGVyLWFwaV0gdG8gdHJhY2sgUFRTLCBEVFMgYW5kCi1vZmZzZXQgYXQgdGhlIGxhc3QgZGlzY29udC4gVGhpcyBpcyB1c2VmdWwgZm9yIHBsdWdpbnMgaW1wbGVtZW50aW5nIGFkdmFuY2VkCi10cmljayBtb2RlIHNjZW5hcmlvcy4KLQotW25ldy1hZGFwdGVyLWFwaV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXItbGlicy9odG1sL0dzdEFkYXB0ZXIuaHRtbCNnc3QtYWRhcHRlci1wdHMtYXQtZGlzY29udAotCi1gR3N0VGVzdENsb2NrYCBnYWluZWQgYSBuZXcgW2AiY2xvY2stdHlwZSJgIHByb3BlcnR5XVtjbG9jay10eXBlLXByb3BdLgotCi1bY2xvY2stdHlwZS1wcm9wXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci1saWJzL2h0bWwvR3N0VGVzdENsb2NrLmh0bWwjR3N0VGVzdENsb2NrLS1jbG9jay10eXBlCi0KLSMjIyMgR3N0U3RyZWFtIEFQSSBmb3Igc3RyZWFtIGFubm91bmNlbWVudCBhbmQgc3RyZWFtIHNlbGVjdGlvbgotCi1OZXcgc3RyZWFtIGxpc3RpbmcgYW5kIHN0cmVhbSBzZWxlY3Rpb24gQVBJOiBuZXcgQVBJIGhhcyBiZWVuIGFkZGVkIHRvCi1wcm92aWRlIGhpZ2gtbGV2ZWwgYWJzdHJhY3Rpb25zIGZvciBzdHJlYW1zIChbYEdzdFN0cmVhbWBdW3N0cmVhbS1hcGldKQotYW5kIGNvbGxlY3Rpb25zIG9mIHN0cmVhbXMgKFtgR3N0U3RyZWFtQ29sbGVjdGlvbnNgXVtzdHJlYW0tY29sbGVjdGlvbi1hcGldKS4KLQotIyMjIyMgU3RyZWFtIGxpc3RpbmcKLQotQSBbYEdzdFN0cmVhbWBdW3N0cmVhbS1hcGldIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gcGVydGluZW50IHRvIGEgc3RyZWFtLAotc3VjaCBhcyBzdHJlYW0gaWQsIGNhcHMsIHRhZ3MsIGZsYWdzIGFuZCBzdHJlYW0gdHlwZShzKTsgaXQgY2FuIHJlcHJlc2VudCBhCi1zaW5nbGUgZWxlbWVudGFyeSBzdHJlYW0gKGUuZy4gYXVkaW8sIHZpZGVvLCBzdWJ0aXRsZXMsIGV0Yy4pIG9yIGEgY29udGFpbmVyCi1zdHJlYW0uIFRoaXMgd2lsbCBkZXBlbmQgb24gdGhlIGNvbnRleHQuIEluIGEgZGVjb2RlYmluMy9wbGF5YmluMyBvbmUKLWl0IHdpbGwgdHlwaWNhbGx5IGJlIGVsZW1lbnRhcnkgc3RyZWFtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBhbmQgdW5zZWxlY3RlZC4KLQotQSBbYEdzdFN0cmVhbUNvbGxlY3Rpb25gXVtzdHJlYW0tY29sbGVjdGlvbi1hcGldIHJlcHJlc2VudHMgYSBncm91cCBvZiBzdHJlYW1zCi1hbmQgaXMgdXNlZCB0byBhbm5vdW5jZSBvciBwdWJsaXNoIGFsbCBhdmFpbGFibGUgc3RyZWFtcy4gQSBHc3RTdHJlYW1Db2xsZWN0aW9uCi1pcyBpbW11dGFibGUgLSBvbmNlIGNyZWF0ZWQgaXQgd29uJ3QgY2hhbmdlLiBJZiB0aGUgYXZhaWxhYmxlIHN0cmVhbXMgY2hhbmdlLAotZS5nLiBiZWNhdXNlIGEgbmV3IHN0cmVhbSBhcHBlYXJlZCBvciBzb21lIHN0cmVhbXMgZGlzYXBwZWFyZWQsIGEgbmV3IHN0cmVhbQotY29sbGVjdGlvbiB3aWxsIGJlIHB1Ymxpc2hlZC4gVGhpcyBuZXcgc3RyZWFtIGNvbGxlY3Rpb24gbWF5IGNvbnRhaW4gc3RyZWFtcwotZnJvbSB0aGUgcHJldmlvdXMgY29sbGVjdGlvbiBpZiB0aG9zZSBzdHJlYW1zIHBlcnNpc3QsIG9yIGNvbXBsZXRlbHkgbmV3IG9uZXMuCi1TdHJlYW0gY29sbGVjdGlvbnMgZG8gbm90IHlldCBsaXN0IGFsbCB0aGVvcmV0aWNhbGx5IGF2YWlsYWJsZSBzdHJlYW1zLAotZS5nLiBvdGhlciBhdmFpbGFibGUgRFZEIGFuZ2xlcyBvciBhbHRlcm5hdGl2ZSByZXNvbHV0aW9ucy9iaXRyYXRlIG9mIHRoZSBzYW1lCi1zdHJlYW0gaW4gY2FzZSBvZiBhZGFwdGl2ZSBzdHJlYW1pbmcuCi0KLU5ldyBldmVudHMgYW5kIG1lc3NhZ2VzIGhhdmUgYmVlbiBhZGRlZCB0byBub3RpZnkgb3IgdXBkYXRlIG90aGVyIGVsZW1lbnRzIGFuZAotdGhlIGFwcGxpY2F0aW9uIGFib3V0IHdoaWNoIHN0cmVhbXMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgYW5kL29yIHNlbGVjdGVkLgotVGhpcyB3YXksIHdlIGNhbiBlYXNpbHkgYW5kIHNlYW1sZXNzbHkgbGV0IHRoZSBhcHBsaWNhdGlvbiBrbm93IHdoZW5ldmVyIHRoZQotYXZhaWxhYmxlIHN0cmVhbXMgY2hhbmdlLCBhcyBoYXBwZW5zIGZyZXF1ZW50bHkgd2l0aCBkaWdpdGFsIHRlbGV2aXNpb24gc3RyZWFtcwotZm9yIGV4YW1wbGUuIFRoZSBuZXcgc3lzdGVtIGlzIGFsc28gbW9yZSBmbGV4aWJsZS4gRm9yIGV4YW1wbGUsIGl0IGlzIG5vdyBhbHNvCi1wb3NzaWJsZSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbGVjdCBtdWx0aXBsZSBzdHJlYW1zIG9mIHRoZSBzYW1lIHR5cGUKLShlLmcuIGluIGEgdHJhbnNjb2RpbmcvdHJhbnNtdXhpbmcgc2NlbmFyaW8pLgotCi1BIFtgU1RSRUFNX0NPTExFQ1RJT05gIG1lc3NhZ2VdW3N0cmVhbS1jb2xsZWN0aW9uLW1zZ10gaXMgcG9zdGVkIG9uIHRoZSBidXMKLXRvIGluZm9ybSB0aGUgcGFyZW50IGJpbiAoZS5nLiBgcGxheWJpbjNgLCBgZGVjb2RlYmluM2ApIGFuZC9vciB0aGUgYXBwbGljYXRpb24KLWFib3V0IHdoYXQgc3RyZWFtcyBhcmUgYXZhaWxhYmxlLCBzbyB5b3Ugbm8gbG9uZ2VyIGhhdmUgdG8gaHVudCBmb3IgdGhpcwotaW5mb3JtYXRpb24gYXQgZGlmZmVyZW50IHBsYWNlcy4gVGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBudW1iZXIgb2YKLXN0cmVhbXMgb2YgZWFjaCB0eXBlLCBjYXBzLCB0YWdzIGV0Yy4gIEJpbnMgYW5kL29yIHRoZSBhcHBsaWNhdGlvbiBjYW4gaW50ZXJjZXB0Ci10aGUgbWVzc2FnZSBzeW5jaHJvbm91c2x5IHRvIHNlbGVjdCBhbmQgZGVzZWxlY3Qgc3RyZWFtcyBiZWZvcmUgYW55IGRhdGEgaXMKLXByb2R1Y2VkIC0gZm9yIHRoZSBjYXNlIHdoZXJlIGVsZW1lbnRzIHN1Y2ggYXMgdGhlIGRlbXV4ZXJzIHN1cHBvcnQgdGhlIG5ldwotc3RyZWFtIEFQSSwgbm90IG5lY2Vzc2FyaWx5IGluIHRoZSBwYXJzZWJpbiBjb21wYXRpYmlsaXR5IGZhbGxiYWNrIGNhc2UuCi0KLVNpbWlsYXJseSwgdGhlcmUgaXMgYWxzbyBhIFtgU1RSRUFNX0NPTExFQ1RJT05gIGV2ZW50XVtzdHJlYW0tY29sbGVjdGlvbi1ldmVudF0KLXRvIGluZm9ybSBkb3duc3RyZWFtIGVsZW1lbnRzIG9mIHRoZSBhdmFpbGFibGUgc3RyZWFtcy4gVGhpcyBldmVudCBjYW4gYmUgdXNlZAotYnkgZWxlbWVudHMgdG8gYWdncmVnYXRlIHN0cmVhbXMgZnJvbSBtdWx0aXBsZSBpbnB1dHMgaW50byBvbmUgc2luZ2xlIGNvbGxlY3Rpb24uCi0KLVRoZSBgU1RSRUFNX1NUQVJUYCBldmVudCB3YXMgZXh0ZW5kZWQgc28gdGhhdCBpdCBjYW4gYWxzbyBjb250YWluIGEgR3N0U3RyZWFtCi1vYmplY3Qgd2l0aCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RyZWFtLCBzZWUKLVtgZ3N0X2V2ZW50X3NldF9zdHJlYW0oKWBdW2V2ZW50LXNldC1zdHJlYW1dIGFuZAotW2Bnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtKClgXVtldmVudC1wYXJzZS1zdHJlYW1dLgotW2Bnc3RfcGFkX2dldF9zdHJlYW0oKWBdW3BhZC1nZXQtc3RyZWFtXSBpcyBhIG5ldyB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlCi11c2VkIHRvIGxvb2sgdXAgdGhlIEdzdFN0cmVhbSBmcm9tIHRoZSBgU1RSRUFNX1NUQVJUYCBzdGlja3kgZXZlbnQgb24gYSBwYWQuCi0KLVtzdHJlYW0tYXBpXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL2dzdHJlYW1lci1Hc3RTdHJlYW0uaHRtbAotW3N0cmVhbS1jb2xsZWN0aW9uLWFwaV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9nc3RyZWFtZXItR3N0U3RyZWFtQ29sbGVjdGlvbi5odG1sCi1bc3RyZWFtLWNvbGxlY3Rpb24tbXNnXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1uZXctc3RyZWFtLWNvbGxlY3Rpb24KLVtzdHJlYW0tY29sbGVjdGlvbi1ldmVudF06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc3RyZWFtLWNvbGxlY3Rpb24KLVtldmVudC1zZXQtc3RyZWFtXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdHJlYW1lci9odG1sL0dzdEV2ZW50Lmh0bWwjZ3N0LWV2ZW50LXNldC1zdHJlYW0KLVtldmVudC1wYXJzZS1zdHJlYW1dOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0RXZlbnQuaHRtbCNnc3QtZXZlbnQtcGFyc2Utc3RyZWFtCi1bcGFkLWdldC1zdHJlYW1dOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0cmVhbWVyL2h0bWwvR3N0UGFkLmh0bWwjZ3N0LXBhZC1nZXQtc3RyZWFtCi0KLSMjIyMjIFN0cmVhbSBzZWxlY3Rpb24KLQotT25jZSB0aGUgYXZhaWxhYmxlIHN0cmVhbXMgaGF2ZSBiZWVuIHB1Ymxpc2hlZCwgc3RyZWFtcyBjYW4gYmUgc2VsZWN0ZWQgdmlhCi10aGVpciBzdHJlYW0gSUQgdXNpbmcgdGhlIG5ldyBgU0VMRUNUX1NUUkVBTVNgIGV2ZW50LCB3aGljaCBjYW4gYmUgY3JlYXRlZAotd2l0aCBbYGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoKWBdW2V2ZW50LXNlbGVjdC1zdHJlYW1zXS4gVGhlIG5ldyBBUEkKLXN1cHBvcnRzIHNlbGVjdGluZyBtdWx0aXBsZSBzdHJlYW1zIHBlciBzdHJlYW0gdHlwZS4gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IGFsc28KLWltcGxlbWVudCBleHBsaWNpdCBkZXNlbGVjdGlvbiBvZiBzdHJlYW1zIHRoYXQgd2lsbCBuZXZlciBiZSB1c2VkLCBzbwotZWxlbWVudHMgY2FuIHNraXAgdGhlc2UgYW5kIG5ldmVyIGV4cG9zZSB0aGVtIG9yIG91dHB1dCBkYXRhIGZvciB0aGVtIGluIHRoZQotZmlyc3QgcGxhY2UuCi0KLVRoZSBhcHBsaWNhdGlvbiBpcyB0aGVuIG5vdGlmaWVkIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RyZWFtcyB2aWEgdGhlCi1uZXcgYFNUUkVBTVNfU0VMRUNURURgIG1lc3NhZ2Ugb24gdGhlIHBpcGVsaW5lIGJ1cywgY29udGFpbmluZyBib3RoIHRoZSBjdXJyZW50Ci1zdHJlYW0gY29sbGVjdGlvbiBhcyB3ZWxsIGFzIHRoZSBzZWxlY3RlZCBzdHJlYW1zLiBUaGlzIG1pZ2h0IGJlIHBvc3RlZCBpbgotcmVzcG9uc2UgdG8gdGhlIGFwcGxpY2F0aW9uIHNlbmRpbmcgYSBgU0VMRUNUX1NUUkVBTVNgIGV2ZW50IG9yIHdoZW4KLWBkZWNvZGViaW4zYCBvciBgcGxheWJpbjNgIGRlY2lkZSBvbiB0aGUgc3RyZWFtcyB0byBiZSBpbml0aWFsbHkgc2VsZWN0ZWQgd2l0aG91dAotYXBwbGljYXRpb24gaW5wdXQuCi0KLVtldmVudC1zZWxlY3Qtc3RyZWFtc106IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3RyZWFtZXIvaHRtbC9Hc3RFdmVudC5odG1sI2dzdC1ldmVudC1uZXctc2VsZWN0LXN0cmVhbXMKLQotIyMjIyMgRnVydGhlciByZWFkaW5nCi0KLVNlZSBmdXJ0aGVyIGJlbG93IGZvciBzb21lIG5vdGVzIG9uIHRoZSBuZXcgZWxlbWVudHMgc3VwcG9ydGluZyB0aGlzIG5ldwotc3RyZWFtIEFQSSwgbmFtZWx5OiBgZGVjb2RlYmluM2AsIGBwbGF5YmluM2AgYW5kIGBwYXJzZWJpbmAuCi0KLU1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5ldyBBUEkgYW5kIHRoZSBuZXcgZWxlbWVudHMgY2FuIGFsc28gYmUgZm91bmQgaGVyZToKLQotLSBHU3RyZWFtZXIgW3N0cmVhbSBzZWxlY3Rpb24gZGVzaWduIGRvY3NdW3N0cmVhbXMtZGVzaWduXQotLSBFZHdhcmQgSGVydmV5J3MgdGFsayBbIlRoZSBuZXcgc3RyZWFtcyBBUEk6IERlc2lnbiBhbmQgdXNhZ2UiXVtzdHJlYW1zLXRhbGtdIChbc2xpZGVzXVtzdHJlYW1zLXNsaWRlc10pCi0tIEVkd2FyZCBIZXJ2ZXkncyB0YWxrIFsiRGVjb2RlYmluMzogRGVhbGluZyB3aXRoIG1vZGVybiBwbGF5YmFjayB1c2UgY2FzZXMiXVtkYjMtdGFsa10gKFtzbGlkZXNdW2RiMy1zbGlkZXNdKQotCi1bc3RyZWFtcy1kZXNpZ25dOiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXIvdHJlZS9kb2NzL2Rlc2lnbi9wYXJ0LXN0cmVhbS1zZWxlY3Rpb24udHh0Ci1bc3RyZWFtcy10YWxrXTogaHR0cHM6Ly9nc3Rjb25mLnViaWNhc3QudHYvdmlkZW9zL3RoZS1uZXctZ3N0c3RyZWFtLWFwaS1kZXNpZ24tYW5kLXVzYWdlLwotW3N0cmVhbXMtc2xpZGVzXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZXZlbnRzL2dzdHJlYW1lci1jb25mZXJlbmNlLzIwMTYvRWR3YXJkJTIwSGVydmV5JTIwLSUyMFRoZSUyME5ldyUyMFN0cmVhbXMlMjBBUEklMjBEZXNpZ24lMjBhbmQlMjBVc2FnZS5wZGYKLVtkYjMtdGFsa106IGh0dHBzOi8vZ3N0Y29uZi51YmljYXN0LnR2L3ZpZGVvcy9kZWNvZGViaW4zLW9yLWRlYWxpbmctd2l0aC1tb2Rlcm4tcGxheWJhY2stdXNlLWNhc2VzLwotW2RiMy1zbGlkZXNdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9ldmVudHMvZ3N0cmVhbWVyLWNvbmZlcmVuY2UvMjAxNS9FZHdhcmQlMjBIZXJ2ZXklMjAtJTIwZGVjb2RlYmluMy5wZGYKLQotIyMjIyBBdWRpbyBjb252ZXJzaW9uIGFuZCByZXNhbXBsaW5nIEFQSQotCi1UaGUgYXVkaW8gY29udmVyc2lvbiBsaWJyYXJ5IHJlY2VpdmVkIGEgY29tcGxldGVseSBuZXcgYW5kIHJld3JpdHRlbiBhdWRpbwotcmVzYW1wbGVyLCBjb21wbGVtZW50aW5nIHRoZSBhdWRpbyBjb252ZXJzaW9uIHJvdXRpbmVzIG1vdmVkIGludG8gdGhlIGF1ZGlvCi1saWJyYXJ5IGluIHRoZSBbcHJldmlvdXMgcmVsZWFzZV1bcmVsZWFzZS1ub3Rlcy0xLjhdLiBJbnRlZ3JhdGluZyB0aGUgcmVzYW1wbGVyCi13aXRoIHRoZSBvdGhlciBhdWRpbyBjb252ZXJzaW9uIGxpYnJhcnkgYWxsb3dzIHVzIHRvIGltcGxlbWVudCBnZW5lcmljCi1jb252ZXJzaW9uIG11Y2ggbW9yZSBlZmZpY2llbnRseSwgYXMgZm9ybWF0IGNvbnZlcnNpb24gYW5kIHJlc2FtcGxpbmcgY2FuIG5vdwotYmUgZG9uZSBpbiB0aGUgc2FtZSBwcm9jZXNzaW5nIGxvb3AgaW5zdGVhZCBvZiBoYXZpbmcgdG8gZG8gaXQgaW4gc2VwYXJhdGUKLXN0ZXBzIChvdXIgZWxlbWVudCBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IG1ha2UgdXNlIG9mIHRoaXMgeWV0IHRob3VnaCkuCi0KLVRoZSBuZXcgYXVkaW8gcmVzYW1wbGVyIGxpYnJhcnkgaXMgYSBjb21iaW5hdGlvbiBvZiBzb21lIG9mIHRoZSBiZXN0IGZlYXR1cmVzCi1vZiBvdGhlciBzYW1wbGVycyBzdWNoIGFzIGZmbXBlZywgc3BlZXggYW5kIFNSQy4gSXQgbmF0aXZlbHkgc3VwcG9ydHMgUzE2LCBTMzIsCi1GMzIgYW5kIEY2NCBmb3JtYXRzIGFuZCB1c2VzIG9wdGltaXplZCB4ODYgYW5kIG5lb24gYXNzZW1ibHkgZm9yIG1vc3Qgb2YgaXRzCi1wcm9jZXNzaW5nLiBJdCBhbHNvIGhhcyBzdXBwb3J0IGZvciBkeW5hbWljYWxseSBjaGFuZ2luZyBzYW1wbGUgcmF0ZXMgYnkgaW5jcmVtZW50YWxseQotdXBkYXRpbmcgdGhlIGZpbHRlciB0YWJsZXMgdXNpbmcgbGluZWFyIG9yIGN1YmljIGludGVycG9sYXRpb24uIEFjY29yZGluZyB0bwotc29tZSBiZW5jaG1hcmtzLCBpdCdzIG9uZSBvZiB0aGUgZmFzdGVzdCBhbmQgbW9zdCBhY2N1cmF0ZSByZXNhbXBsZXJzIGFyb3VuZC4KLQotVGhlIGBhdWRpb3Jlc2FtcGxlYCBwbHVnaW4gaGFzIGJlZW4gcG9ydGVkIHRvIHRoZSBuZXcgYXVkaW8gbGlicmFyeSBmdW5jdGlvbnMKLXRvIG1ha2UgdXNlIG9mIHRoZSBuZXcgcmVzYW1wbGVyLgotCi1bcmVsZWFzZS1ub3Rlcy0xLjhdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvMS44LwotCi0jIyMjIFN1cHBvcnQgZm9yIFNNUFRFIHRpbWVjb2RlcwotCi1TdXBwb3J0IGZvciBTTVBURSB0aW1lY29kZXMgd2FzIGFkZGVkIHRvIHRoZSBHU3RyZWFtZXIgdmlkZW8gbGlicmFyeS4gVGhpcwotY29tZXMgd2l0aCBhbiBhYnN0cmFjdGlvbiBmb3IgdGltZWNvZGVzLCBbYEdzdFZpZGVvVGltZUNvZGVgXVt2aWRlby10aW1lY29kZV0KLWFuZCBhIFtgR3N0TWV0YWBdW3ZpZGVvLXRpbWVjb2RlLW1ldGFdIHRoYXQgY2FuIGJlIHBsYWNlZCBvbiB2aWRlbyBidWZmZXJzIGZvcgotY2FycnlpbmcgdGhlIHRpbWVjb2RlIGluZm9ybWF0aW9uIGZvciBlYWNoIGZyYW1lLiBBZGRpdGlvbmFsbHkgdGhlcmUgaXMKLXZhcmlvdXMgQVBJIGZvciBtYWtpbmcgaGFuZGxpbmcgb2YgdGltZWNvZGVzIGVhc3kgYW5kIHRvIGRvIHZhcmlvdXMKLWNhbGN1bGF0aW9ucyB3aXRoIHRoZW0uCi0KLUEgbmV3IHBsdWdpbiBjYWxsZWQgW2B0aW1lY29kZWBdW3RpbWVjb2RlLXBsdWdpbl0gd2FzIGFkZGVkLCB0aGF0IGNvbnRhaW5zIGFuCi1lbGVtZW50IGNhbGxlZCBgdGltZWNvZGVzdGFtcGVyYCBmb3IgcHV0dGluZyB0aGUgdGltZWNvZGUgbWV0YSBvbiB2aWRlbyBmcmFtZXMKLWJhc2VkIG9uIGNvdW50aW5nIHRoZSBmcmFtZXMgYW5kIGFub3RoZXIgZWxlbWVudCBjYWxsZWQgYHRpbWVjb2Rld2FpdGAgdGhhdAotZHJvcHMgYWxsIHZpZGVvIChhbmQgYXVkaW8pIHVudGlsIGEgc3BlY2lmaWMgdGltZWNvZGUgaXMgcmVhY2hlZC4KLQotQWRkaXRpb25hbGx5IHN1cHBvcnQgd2FzIGFkZGVkIHRvIHRoZSBEZWNrbGluayBwbHVnaW4gZm9yIGluY2x1ZGluZyB0aGUKLXRpbWVjb2RlIGluZm9ybWF0aW9uIHdoZW4gc2VuZGluZyB2aWRlbyBvdXQgb3IgY2FwdHVyaW5nIGl0IHZpYSBTREksIHRoZQotYHF0bXV4YCBlbGVtZW50IGlzIGFibGUgdG8gd3JpdGUgdGltZWNvZGUgaW5mb3JtYXRpb24gaW50byB0aGUgTU9WIGNvbnRhaW5lciwKLWFuZCB0aGUgYHRpbWVvdmVybGF5YCBlbGVtZW50IGNhbiBvdmVybGF5IHRpbWVjb2RlcyBvbiB0b3Agb2YgdGhlIHZpZGVvLgotCi1Nb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgW3RhbGsgYWJvdXQgdGltZWNvZGVzXVt0aW1lY29kZS10YWxrXSBhdAotdGhlIEdTdHJlYW1lciBDb25mZXJlbmNlIDIwMTYuCi0KLVt2aWRlby10aW1lY29kZV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW8uaHRtbCNHc3RWaWRlb1RpbWVDb2RlCi1bdmlkZW8tdGltZWNvZGUtbWV0YV06IGh0dHBzOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9tZXRhLmh0bWwjZ3N0LWJ1ZmZlci1hZGQtdmlkZW8tdGltZS1jb2RlLW1ldGEKLVt0aW1lY29kZS1wbHVnaW5dOiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvdHJlZS9nc3QvdGltZWNvZGUKLVt0aW1lY29kZS10YWxrXTogaHR0cHM6Ly9nc3Rjb25mLnViaWNhc3QudHYvdmlkZW9zL3NtcHRlLXRpbWVjb2Rlcy1pbi1nc3RyZWFtZXIvCi0KLSMjIyMgR1N0cmVhbWVyIE9wZW5NQVggSUwgcGx1Z2luCi0KLVRoZSBsYXN0IGdzdC1vbXggcmVsZWFzZSwgMS4yLjAsIHdhcyBpbiBKdWx5IDIwMTQuIEl0IHdhcyBhYm91dCB0aW1lIHRvIGdldAotYSBuZXcgb25lIG91dCB3aXRoIGFsbCB0aGUgaW1wcm92ZW1lbnRzIHRoYXQgaGF2ZSBoYXBwZW5lZCBpbiB0aGUgbWVhbnRpbWUuCi1Gcm9tIG5vdyBvbiwgd2Ugd2lsbCB0cnkgdG8gcmVsZWFzZSBnc3Qtb214IHRvZ2V0aGVyIHdpdGggYWxsIG90aGVyIG1vZHVsZXMuCi0KLVRoaXMgcmVsZWFzZSBmZWF0dXJlcyBhIGxvdCBvZiBidWdmaXhlcywgaW1wcm92ZWQgc3VwcG9ydCBmb3IgdGhlIFJhc3BiZXJyeSBQaQotYW5kIGluIGdlbmVyYWwgaW1wcm92ZWQgc3VwcG9ydCBmb3IgemVyb2NvcHkgcmVuZGVyaW5nIHZpYSBFR0wgYW5kIGEgZmV3IG1pbm9yCi1uZXcgZmVhdHVyZXMuCi0KLUF0IHRoaXMgcG9pbnQsIGdzdC1vbXggaXMga25vd24gdG8gd29yayBiZXN0IG9uIHRoZSBSYXNwYmVycnkgUGkgcGxhdGZvcm0gYnV0Ci1pdCBpcyBhbHNvIGtub3duIHRvIHdvcmsgb24gdmFyaW91cyBvdGhlciBwbGF0Zm9ybXMuIFVuZm9ydHVuYXRlbHksIHdlIGFyZQotbm90IGluY2x1ZGluZyBjb25maWd1cmF0aW9ucyBmb3IgYW55IG90aGVyIHBsYXRmb3Jtcywgc28gaWYgeW91IGhhcHBlbiB0byB1c2UKLWdzdC1vbXg6IHBsZWFzZSBzZW5kIHVzIHBhdGNoZXMgd2l0aCB5b3VyIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUgY2hhbmdlcyEKLQotIyMjIE5ldyBFbGVtZW50cwotCi0jIyMjIGRlY29kZWJpbjMsIHBsYXliaW4zLCBwYXJzZWJpbiAoZXhwZXJpbWVudGFsKQotCi1UaGlzIHJlbGVhc2UgZmVhdHVyZXMgbmV3IGRlY29kaW5nIGFuZCBwbGF5YmFjayBlbGVtZW50cyBhcyBleHBlcmltZW50YWwKLXRlY2hub2xvZ3kgcHJldmlld3M6IGBkZWNvZGViaW4zYCBhbmQgYHBsYXliaW4zYCB3aWxsIHNvb24gc3VwZXJzZWRlIHRoZQotZXhpc3RpbmcgYGRlY29kZWJpbmAgYW5kIGBwbGF5YmluYCBlbGVtZW50cy4gV2Ugc2tpcHBlZCB0aGUgbnVtYmVyIDIgYmVjYXVzZQotaXQgd2FzIGFscmVhZHkgdXNlZCBiYWNrIGluIHRoZSAwLjEwIGRheXMsIHdoaWNoIG1pZ2h0IGNhdXNlIGNvbmZ1c2lvbi4KLUV4cGVyaW1lbnRhbCB0ZWNobm9sb2d5IHByZXZpZXcgbWVhbnMgdGhhdCBldmVyeXRoaW5nIHNob3VsZCB3b3JrIGZpbmUgYWxyZWFkeSwKLWJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUgdGhlcmUgd29uJ3QgYmUgbWlub3IgYmVoYXZpb3VyYWwgY2hhbmdlcyBpbiB0aGUKLW5leHQgY3ljbGUuIEluIGFueSBjYXNlLCBwbGVhc2UgdGVzdCBhbmQgcmVwb3J0IGFueSBwcm9ibGVtcyBiYWNrLgotCi1CZWZvcmUgd2UgZ28gaW50byBkZXRhaWwgYWJvdXQgd2hhdCB0aGVzZSBuZXcgZWxlbWVudHMgaW1wcm92ZSwgbGV0J3MgbG9vayBhdAotdGhlIG5ldyBbYHBhcnNlYmluYF1bcGFyc2ViaW5dIGVsZW1lbnQuIEl0IHdvcmtzIHNpbWlsYXJseSB0byBgZGVjb2RlYmluYCBhbmQKLWBkZWNvZGViaW4zYCwgb25seSB0aGF0IGl0IHN0b3BzIG9uZSBzdGVwIHNob3J0IGFuZCBkb2VzIG5vdCBwbHVnIGFueSBhY3R1YWwKLWRlY29kZXIgZWxlbWVudHMuIEl0IHdpbGwgb25seSBwbHVnIHBhcnNlcnMsIHRhZyByZWFkZXJzLCBkZW11eGVycyBhbmQKLWRlcGF5bG9hZGVycy4gQWxzbyBub3RlIHRoYXQgcGFyc2ViaW4gZG9lcyBub3QgY29udGFpbiBhbnkgcXVldWVpbmcgZWxlbWVudC4KLQotW2BkZWNvZGViaW4zYCdzXVtkZWNvZGViaW4zXSBpbnRlcm5hbCBhcmNoaXRlY3R1cmUgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20KLXRoZSBleGlzdGluZyBgZGVjb2RlYmluYCBlbGVtZW50IGFuZCBmaXhlcyBtYW55IGxvbmctc3RhbmRpbmcgaXNzdWVzIHdpdGggb3VyCi1kZWNvZGluZyBlbmdpbmUuIEZvciBvbmUsIGRhdGEgaXMgbm93IGZlZCBpbnRvIHRoZSBpbnRlcm5hbCBgbXVsdGlxdWV1ZWAgZWxlbWVudAotKmFmdGVyKiBpdCBoYXMgYmVlbiBwYXJzZWQgYW5kIHRpbWVzdGFtcGVkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBgbXVsdGlxdWV1ZWAKLWVsZW1lbnQgbm93IGhhcyBtb3JlIGtub3dsZWRnZSBhbmQgaXMgYWJsZSB0byBjYWxjdWxhdGUgdGhlIGludGVybGVhdmluZyBvZiB0aGUKLXZhcmlvdXMgc3RyZWFtcywgdGh1cyBtaW5pbWl6aW5nIG1lbW9yeSByZXF1aXJlbWVudHMgYW5kIGRvaW5nIGF3YXkgd2l0aCBtYWdpYwotdmFsdWVzIGZvciBidWZmZXJpbmcgbGltaXRzIHRoYXQgd2VyZSBjb25jZWl2ZWQgd2hlbiB2aWRlb3Mgd2VyZSAyNDBwIG9yIDM2MHAuCi1BbnlvbmUgd2hvIGhhcyB0cmllZCB0byBwbGF5IGJhY2sgNGsgdmlkZW8gc3RyZWFtcyB3aXRoIGRlY29kZWJpbjIKLXdpbGwgaGF2ZSBub3RpY2VkIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGF0IGFwcHJvYWNoLiBUaGUgaW1wcm92ZWQgdGltZXN0YW1wCi10cmFja2luZyBhbHNvIGVuYWJsZXMgYG11bHRpcXVldWVgIHRvIGtlZXAgc3RyZWFtcyBvZiB0aGUgc2FtZSB0eXBlIChhdWRpbywKLXZpZGVvKSBhbGlnbmVkIGJldHRlciwgbWFraW5nIHN1cmUgc3dpdGNoaW5nIGJldHdlZW4gc3RyZWFtcyBvZiB0aGUgc2FtZSB0eXBlCi1pcyB2ZXJ5IGZhc3QuCi0KLUFub3RoZXIgbWFqb3IgaW1wcm92ZW1lbnQgaW4gYGRlY29kZWJpbjNgIGlzIHRoYXQgaXQgd2lsbCBubyBsb25nZXIgZGVjb2RlCi1zdHJlYW1zIHRoYXQgYXJlIG5vdCBiZWluZyB1c2VkLiBXaXRoIHRoZSBvbGQgYGRlY29kZWJpbmAgYW5kIGBwbGF5YmluYCwgd2hlbgotdGhlcmUgd2VyZSA4IGF1ZGlvIHN0cmVhbXMgd2Ugd291bGQgYWx3YXlzIGRlY29kZSBhbGwgOCBzdHJlYW1zIGV2ZW4KLWlmIDcgd2VyZSBub3QgYWN0dWFsbHkgdXNlZC4gVGhpcyBjYXVzZWQgYSBsb3Qgb2YgQ1BVIG92ZXJoZWFkLCB3aGljaCB3YXMKLXBhcnRpY3VsYXJseSBwcm9ibGVtYXRpYyBvbiBlbWJlZGRlZCBkZXZpY2VzLiBXaGVuIHN3aXRjaGluZyBiZXR3ZWVuIHN0cmVhbXMKLWBkZWNvZGViaW4zYCB3aWxsIHRyeSBoYXJkIHRvIHJlLXVzZSBleGlzdGluZyBkZWNvZGVycy4gVGhpcyBpcyB1c2VmdWwgd2hlbgotc3dpdGNoaW5nIGJldHdlZW4gbXVsdGlwbGUgc3RyZWFtcyBvZiB0aGUgc2FtZSB0eXBlIGlmIHRoZXkgYXJlIGVuY29kZWQgaW4gdGhlCi1zYW1lIGZvcm1hdC4KLQotUmUtdXNpbmcgZGVjb2RlcnMgaXMgYWxzbyB1c2VmdWwgd2hlbiB0aGUgYXZhaWxhYmxlIHN0cmVhbXMgY2hhbmdlIG9uIHRoZSBmbHksCi1hcyBtaWdodCBoYXBwZW4gd2l0aCByYWRpbyBzdHJlYW1zIChjaGFpbmVkIE9nZ3MpLCBkaWdpdGFsIHRlbGV2aXNpb24KLWJyb2FkY2FzdHMsIHdoZW4gYWRhcHRpdmUgc3RyZWFtaW5nIHN0cmVhbXMgY2hhbmdlIGJpdHJhdGUsIG9yIHdoZW4gc3dpdGNoaW5nCi1nYXBsZXNzbHkgdG8gdGhlIG5leHQgdGl0bGUuIEluIG9yZGVyIHRvIGd1YXJhbnRlZSBhIHNlYW1sZXNzIHRyYW5zaXRpb24sIHRoZQotb2xkIGBkZWNvZGViaW4yYCB3b3VsZCBwbHVnIGEgc2Vjb25kIGRlY29kZXIgZm9yIHRoZSBuZXcgc3RyZWFtIHdoaWxlIGZpbmlzaGluZwotdXAgdGhlIG9sZCBzdHJlYW0uIFdpdGggYGRlY29kZWJpbjNgLCB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgLSBhdCBsZWFzdCBub3QKLXdoZW4gdGhlIG5ldyBhbmQgb2xkIGZvcm1hdCBhcmUgdGhlIHNhbWUuIFRoaXMgd2lsbCBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsCi1vbiBlbWJlZGRlZCBzeXN0ZW1zIHdoZXJlIGl0IGlzIG9mdGVuIG5vdCBwb3NzaWJsZSB0byBydW4gbXVsdGlwbGUgZGVjb2RlcnMKLWF0IHRoZSBzYW1lIHRpbWUsIG9yIHdoZW4gdGVhcmluZyBkb3duIGFuZCBzZXR0aW5nIHVwIGRlY29kZXJzIGlzIGZhaXJseQotZXhwZW5zaXZlLgotCi1gZGVjb2RlYmluM2AgYWxzbyBhbGxvd3MgZm9yIG11bHRpcGxlIGlucHV0IHN0cmVhbXMsIG5vdCBqdXN0IGEgc2luZ2xlIG9uZS4KLVRoaXMgd2lsbCBiZSB1c2VmdWwsIGluIHRoZSBmdXR1cmUsIGZvciBnYXBsZXNzIHBsYXliYWNrLCBvciBmb3IgZmVlZGluZwotbXVsdGlwbGUgZXh0ZXJuYWwgc3VidGl0bGUgc3RyZWFtcyB0byBkZWNvZGViaW4vcGxheWJpbi4KLQotYHBsYXliaW4zYCB1c2VzIGBkZWNvZGViaW4zYCBpbnRlcm5hbGx5LCBhbmQgd2lsbCBzdXBlcmNlZGUgYHBsYXliaW5gLgotSXQgd2FzIGRlY2lkZWQgdGhhdCBpdCB3b3VsZCBiZSB0b28gcmlza3kgdG8gbWFrZSB0aGUgb2xkIGBwbGF5YmluYCB1c2UgdGhlCi1uZXcgYGRlY29kZWJpbjNgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgd2F5LiBUaGUgbmV3IGFyY2hpdGVjdHVyZQotbWFrZXMgaXQgYXdrd2FyZCwgaWYgbm90IGltcG9zc2libGUsIHRvIG1haW50YWluIHBlcmZlY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLWluIHNvbWUgYXNwZWN0cywgaGVuY2UgYHBsYXliaW4zYCB3YXMgYm9ybiwgYW5kIGRldmVsb3BlcnMgY2FuIG1pZ3JhdGUgdG8gdGhlCi1uZXcgZWxlbWVudCBhbmQgbmV3IEFQSSBhdCB0aGVpciBvd24gcGFjZS4KLQotQWxsIG9mIHRoZXNlIG5ldyBlbGVtZW50cyBtYWtlIHVzZSBvZiB0aGUgbmV3IGBHc3RTdHJlYW1gIEFQSSBmb3IgbGlzdGluZyBhbmQKLXNlbGVjdGluZyBzdHJlYW1zLCBhcyBkZXNjcmliZWQgYWJvdmUuIGBwYXJzZWJpbmAgcHJvdmlkZXMgYmFja3dhcmRzCi1jb21wYXRpYmlsaXR5IGZvciBkZW11eGVycyBhbmQgcGFyc2VycyB3aGljaCBkbyBub3QgYWR2ZXJ0aXNlIHRoZWlyIHN0cmVhbXMKLXVzaW5nIHRoZSBuZXcgQVBJIHlldCAod2hpY2ggaXMgbW9zdCkuCi0KLVRoZSBuZXcgZWxlbWVudHMgYXJlIG5vdCBlbnRpcmVseSBmZWF0dXJlLWNvbXBsZXRlIHlldDogYHBsYXliaW4zYCBkb2VzIG5vdAotc3VwcG9ydCBzby1jYWxsZWQgZGVjb2RlcnNpbmtzIHlldCB3aGVyZSB0aGUgZGF0YSBpcyBub3QgZGVjb2RlZCBpbnNpZGUKLUdTdHJlYW1lciBidXQgcGFzc2VkIGRpcmVjdGx5IGZvciBkZWNvZGluZyB0byB0aGUgc2luay4gYGRlY29kZWJpbjNgIGlzIG1pc3NpbmcKLXRoZSB2YXJpb3VzIGBhdXRvcGx1Zy0qYCBzaWduYWxzIHRvIGluZmx1ZW5jZSB3aGljaCBkZWNvZGVycyBnZXQgYXV0b3BsdWdnZWQKLWluIHdoaWNoIG9yZGVyLiBXZSdyZSBsb29raW5nIHRvIGFkZCBiYWNrIHRoaXMgZnVuY3Rpb25hbGl0eSwgYnV0IGl0IHdpbGwgcHJvYmFibHkKLWJlIGluIGEgZGlmZmVyZW50IHdheSwgd2l0aCBhIHNpbmdsZSB1bmlmaWVkIHNpZ25hbCBhbmQgdXNpbmcgR3N0U3RyZWFtIHBlcmhhcHMuCi0KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZXNlIG5ldyBlbGVtZW50cywgY2hlY2sgb3V0IEVkd2FyZCBIZXJ2ZXkncyB0YWxrCi1bKmRlY29kZWJpbjMgLSBkZWFsaW5nIHdpdGggbW9kZXJuIHBsYXliYWNrIHVzZSBjYXNlcypdW2RiMy10YWxrXQotCi1bcGFyc2ViaW5dOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0LXBsdWdpbnMtYmFzZS1wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1wbHVnaW5zLXBhcnNlYmluLmh0bWwKLVtkZWNvZGViaW4zXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtcGx1Z2lucy1kZWNvZGViaW4zLmh0bWwKLVtkYjMtdGFsa106IGh0dHBzOi8vZ3N0Y29uZi51YmljYXN0LnR2L3ZpZGVvcy9kZWNvZGViaW4zLW9yLWRlYWxpbmctd2l0aC1tb2Rlcm4tcGxheWJhY2stdXNlLWNhc2VzLwotCi0jIyMjIExWMiBwb3J0ZWQgZnJvbSAwLjEwIGFuZCBzd2l0Y2hlZCBmcm9tIHNsdjIgdG8gbGlsdjIKLQotVGhlIExWMiB3cmFwcGVyIHBsdWdpbiBoYXMgYmVlbiBwb3J0ZWQgdG8gMS4wIGFuZCBtb3ZlZCBmcm9tIHVzaW5nIHRoZQotZGVwcmVjYXRlZCBzbHYyIGxpYnJhcnkgdG8gaXRzIHJlcGxhY2VtZW50IGxpYmx2Mi4gV2Ugc3VwcG9ydCBzb3VyY2VzIGFuZAotZmlsdGVyIGVsZW1lbnRzLiBsdjIgaXMgc2hvcnQgZm9yICpMaW51eCBBdWRpbyBEZXZlbG9wZXIncyBTaW1wbGUgUGx1Z2luIEFQSQotKExBRFNQQSkgdmVyc2lvbiAyKiBhbmQgaXMgYW4gb3BlbiBzdGFuZGFyZCBmb3IgYXVkaW8gcGx1Z2lucyB3aGljaCBpbmNsdWRlcwotc3VwcG9ydCBmb3IgYXVkaW8gc3ludGhlc2lzIChnZW5lcmF0aW9uKSwgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc2luZyBvZiBkaWdpdGFsCi1hdWRpbywgYW5kIE1JREkuIFRoZSBuZXcgbHYyIHBsdWdpbiBzdXBlcnNlZGVzIHRoZSBleGlzdGluZyBMQURTUEEgcGx1Z2luLgotCi0jIyMjIFdlYlJUQyBEU1AgUGx1Z2luIGZvciBlY2hvLWNhbmNlbGxhdGlvbiwgZ2FpbiBjb250cm9sIGFuZCBub2lzZSBzdXBwcmVzc2lvbgotCi1BIHNldCBvZiBuZXcgZWxlbWVudHMgKFt3ZWJydGNkc3BdW3dlYnJ0Y2RzcF0sIFt3ZWJydGNlY2hvcHJvYmVdW3dlYnJ0Y2VjaG9wcm9iZV0pCi1iYXNlZCBvbiB0aGUgV2ViUlRDIERTUCBzb2Z0d2FyZSBzdGFjayBjYW4gbm93IGJlIHVzZWQgdG8gaW1wcm92ZSB5b3VyIGF1ZGlvCi12b2ljZSBjb21tdW5pY2F0aW9uIHBpcGVsaW5lcy4gVGhleSBzdXBwb3J0IGVjaG8gY2FuY2VsbGF0aW9uLCBnYWluIGNvbnRyb2wsCi1ub2lzZSBzdXBwcmVzc2lvbiBhbmQgbW9yZS4gRm9yIG1vcmUgZGV0YWlscyB5b3UgbWF5IHJlYWQKLVtOaWNvbGFzJyBibG9nIHBvc3RdW3dlYnJ0Yy1ibG9nLXBvc3RdLgotCi1bd2VicnRjZHNwXTogaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWJhZC1wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMtd2VicnRjZHNwLmh0bWwKLVt3ZWJydGNlY2hvcHJvYmVdOiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0LXBsdWdpbnMtYmFkLXBsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1iYWQtcGx1Z2lucy13ZWJydGNlY2hvcHJvYmUuaHRtbAotW3dlYnJ0Yy1ibG9nLXBvc3RdOiBodHRwczovL25kdWZyZXNuZS5jYS8yMDE2LzA2L2dzdHJlYW1lci1lY2hvLWNhbmNlbGxlci8KLQotIyMjIyBGcmF1bmhvZmVyIEZESyBBQUMgZW5jb2RlciBhbmQgZGVjb2RlcgotCi1OZXcgZW5jb2RlciBhbmQgZGVjb2RlciBlbGVtZW50cyB3cmFwcGluZyB0aGUgRnJhdW5ob2ZlciBGREsgQUFDIGxpYnJhcnkgaGF2ZQotYmVlbiBhZGRlZCAoYGZka2FhY2RlY2AsIGBmZGthYWNkZWNgKS4gVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBlbmNvZGVyIGlzCi1nZW5lcmFsbHkgY29uc2lkZXJlZCB0byBiZSBhIHZlcnkgaGlnaC1xdWFsaXR5IEFBQyBlbmNvZGVyLCBidXQgdW5mb3J0dW5hdGVseQotaXQgY29tZXMgdW5kZXIgYSBub24tZnJlZSBsaWNlbnNlIHdpdGggdGhlIG9wdGlvbiB0byBvYnRhaW4gYSBwYWlkLCBjb21tZXJjaWFsCi1saWNlbnNlLgotCi0jIyMgTm90ZXdvcnRoeSBlbGVtZW50IGZlYXR1cmVzIGFuZCBhZGRpdGlvbnMKLQotIyMjIyBNYWpvciBSVFAgYW5kIFJUU1AgaW1wcm92ZW1lbnRzCi0KLS0gVGhlIFJUU1Agc2VydmVyIGFuZCBzb3VyY2UgZWxlbWVudCwgYXMgd2VsbCBhcyB0aGUgUlRQIGppdHRlcmJ1ZmZlciBub3cgc3VwcG9ydAotICByZW1vdGUgY2xvY2sgc3luY2hyb25pemF0aW9uIGFjY29yZGluZyB0byBbUkZDNzI3M11baHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyNzNdLgotLSBTdXBwb3J0IGZvciBhcHBsaWNhdGlvbiBhbmQgcHJvZmlsZSBzcGVjaWZpYyBSVENQIHBhY2tldHMgd2FzIGFkZGVkLgotLSBUaGUgSDI2NS9IRVZDIHBheWxvYWRlci9kZXBheWxvYWRlciBpcyBhZ2FpbiBpbiBzeW5jIHdpdGggdGhlIGZpbmFsIFJGQy4KLS0gU2Vla2luZyBzdGFiaWxpdHkgb2YgdGhlIFJUU1Agc291cmNlIGFuZCBzZXJ2ZXIgd2FzIGltcHJvdmVkIGEgbG90IGFuZAotICBydW5zIHN0YWJseSBub3csIGV2ZW4gd2hlbiBkb2luZyBzY3J1Yi1zZWVraW5nLgotLSBUaGUgUlRTUCBzZXJ2ZXIgcmVjZWl2ZWQgdmFyaW91cyBtYWpvciBidWdmaXhlcywgaW5jbHVkaW5nIGZvciByZWdyZXNzaW9ucyB0aGF0Ci0gIGNhdXNlZCB0aGUgSVAvcG9ydCBhZGRyZXNzIHBvb2wgdG8gbm90IGJlIGNvbnNpZGVyZWQsIG9yIE5BVCBob2xlIHB1bmNoaW5nCi0gIHRvIG5vdCB3b3JrIGFueW1vcmUuIFtCdWd6aWxsYSAjNzY2NjEyXVtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEyXQotLSBWYXJpb3VzIG90aGVyIGJ1Z2ZpeGVzIHRoYXQgaW1wcm92ZSB0aGUgc3RhYmlsaXR5IG9mIFJUUCBhbmQgUlRTUCwgaW5jbHVkaW5nCi0gIG1hbnkgbmV3IHVuaXQgLyBpbnRlZ3JhdGlvbiB0ZXN0cy4KLQotIyMjIyBJbXByb3ZlbWVudHMgdG8gc3BsaXRtdXhzcmMgYW5kIHNwbGl0bXV4c2luawotCi0tIFRoZSBzcGxpdG11eCBlbGVtZW50IHJlY2VpdmVkIHJlbGlhYmlsaXR5IGFuZCBlcnJvciBoYW5kbGluZyBpbXByb3ZlbWVudHMsCi0gIHJlbW92aW5nIGF0IGxlYXN0IG9uZSBkZWFkbG9jayBjYXNlLiBgc3BsaXRtdXhzcmNgIG5vdyBzdG9wcyBjbGVhbmx5IGF0IHRoZSBlbmQKLSAgb2YgdGhlIHNlZ21lbnQgd2hlbiBoYW5kbGluZyBzZWVrcyB3aXRoIGEgc3RvcCB0aW1lLiBXZSBmaXhlZCBhIGJ1ZyB3aXRoIGxhcmdlCi0gIGFtb3VudHMgb2YgZG93bnN0cmVhbSBidWZmZXJpbmcgY2F1c2luZyBpbmNvcnJlY3Qgb3V0LW9mLXNlcXVlbmNlIHBsYXliYWNrLgotCi0tIGBzcGxpdG11eHNyY2Agbm93IGhhcyBhIGAiZm9ybWF0LWxvY2F0aW9uImAgc2lnbmFsIHRvIGRpcmVjdGx5IHNwZWNpZnkgdGhlIGxpc3QKLSAgb2YgZmlsZXMgdG8gcGxheSBmcm9tLgotCi0tIGBzcGxpdG11eHNpbmtgIGNhbiBub3cgb3B0aW9uYWxseSBzZW5kIGZvcmNlLWtleXVuaXQgZXZlbnRzIHRvIHVwc3RyZWFtCi0gIGVsZW1lbnRzIHRvIGFsbG93IHNwbGl0dGluZyBmaWxlcyBtb3JlIGFjY3VyYXRlbHkgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd2FpdAotICBmb3IgdXBzdHJlYW0gdG8gcHJvdmlkZSBhIG5ldyBrZXlmcmFtZSBieSBpdHNlbGYuCi0KLSMjIyMgT3BlbkdML0dMRVMgaW1wcm92ZW1lbnRzCi0KLSMjIyMjIGlPUyBhbmQgbWFjT1MgKE9TL1gpCi0KLS0gV2Ugbm93IGNyZWF0ZSBPcGVuR0x8RVMgMy54IGNvbnRleHRzIG9uIGlPUyBieSBkZWZhdWx0IHdpdGggYSBmYWxsYmFjayB0bwotICBPcGVuR0x8RVMgMi54IGlmIHRoYXQgZmFpbHMuCi0tIFZhcmlvdXMgemVyb2NvcHkgZGVjb2RpbmcgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyB3aXRoIHRoZQotICBlbmNvZGluZy9kZWNvZGluZy9jYXB0dXJpbmcgZWxlbWVudHMuCi0tIGxpYmRpc3BhdGNoIGlzIG5vdyB1c2VkIG9uIGFsbCBBcHBsZSBwbGF0Zm9ybXMgaW5zdGVhZCBvZiBHTWFpbkxvb3AsIHJlbW92aW5nCi0gIHRoZSBleHBlbnNpdmUgcG9sbCgpL3B0aHJlYWRfKigpIG92ZXJoZWFkLgotCi0jIyMjIyBOZXcgQVBJCi0KLS0gYEdzdEdMRnJhbWVidWZmZXJgIC0gZm9yIHdyYXBwaW5nIE9wZW5HTCBmcmFtZSBidWZmZXIgb2JqZWN0cy4gIEl0IHByb3ZpZGVzCi0gIGZhY2lsaXRpZXMgZm9yIGF0dGFjaGluZyBgR3N0R0xNZW1vcnlgIG9iamVjdHMgdG8gdGhlIG5lY2Vzc2FyeSBhdHRhY2htZW50Ci0gIHBvaW50cywgYmluZGluZyBhbmQgdW5iaW5kaW5nIGFuZCBydW5uaW5nIGEgdXNlci1zdXBwbGllZCBmdW5jdGlvbiB3aXRoIHRoZQotICBmcmFtZWJ1ZmZlciBib3VuZC4KLS0gYEdzdEdMUmVuZGVyYnVmZmVyYCAoYSBgR3N0R0xCYXNlTWVtb3J5YCBzdWJjbGFzcykgLSBmb3Igd3JhcHBpbmcgT3BlbkdMCi0gIHJlbmRlciBidWZmZXIgb2JqZWN0cyB0aGF0IGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgZGVwdGgvc3RlbmNpbCBidWZmZXJzIG9yCi0gIGZvciBjb2xvciBidWZmZXJzIHdoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIG91dHB1dC4KLS0gYEdzdEdMTWVtb3J5RUdMYCAoYSBgR3N0R0xNZW1vcnlgIHN1YmNsYXNzKSAtIGZvciBjb21iaW5pbmcgYEVHTEltYWdlYHMgd2l0aCBhIEdMCi0gIHRleHR1cmUgdGhhdCByZXBsYWNlcyBgR3N0RUdMSW1hZ2VNZW1vcnlgIGJyaW5naW5nIHRoZSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUKLSAgb3RoZXIgYEdzdEdMTWVtb3J5YCBpbXBsZW1lbnRhdGlvbnMuICBUaGlzIGZpeGVzIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiBpbgotICB6ZXJvY29weSBkZWNvZGluZyBvbiB0aGUgUmFzcGJlcnJ5IFBpIHdoZW4gdXNlZCB3aXRoIGFuIHVwZGF0ZWQgZ3N0LW9teC4KLQotIyMjIyMgTWlzY2VsbGFuZW91cyBpbXByb3ZlbWVudHMKLQotLSBgZ2x0ZXN0c3JjYCBpcyBub3cgdXNhYmxlIG9uIGRldmljZXMvcGxhdGZvcm1zIHdpdGggT3BlbkdMIDMueCBhbmQgT3BlbkdMfEVTCi0gIGFuZCBoYXMgY29tcGxldGVkIG9yIGdhaW5lZCBzdXBwb3J0IGZvciBuZXcgcGF0dGVybnMgaW4gbGluZSB3aXRoIHRoZQotICBleGlzdGluZyBvbmVzIGluIGB2aWRlb3Rlc3RzcmNgLgotLSBgZ2xkZWludGVybGFjZWAgaXMgbm93IGF2YWlsYWJsZSBvbiBkZXZpY2VzL3BsYXRmb3JtcyB3aXRoIE9wZW5HTHxFUwotICBpbXBsZW1lbnRhdGlvbnMuCi0tIFRoZSBkaXNwbWFueCBiYWNrZW5kICh1c2VkIG9uIHRoZSBSYXNwYmVycnkgUGkpIG5vdyBzdXBwb3J0cyB0aGUKLSAgYGdzdF92aWRlb19vdmVybGF5X3NldF93aW5kb3dfaGFuZGxlKClgIGFuZAotICBgZ3N0X3ZpZGVvX292ZXJsYXlfc2V0X3JlbmRlcl9yZWN0YW5nbGUoKWAgZnVuY3Rpb25zLgotLSBUaGUgYGdsdHJhbnNmb3JtYXRpb25gIGVsZW1lbnQgbm93IGNvcnJlY3RseSB0cmFuc2Zvcm1zIG1vdXNlIGNvb3JkaW5hdGVzIChpbgotICB3aW5kb3cgc3BhY2UpIHRvIHN0cmVhbSBjb29yZGluYXRlcyBmb3IgYm90aCBwZXJzcGVjdGl2ZSBhbmQgb3J0aG9ncmFwaGljCi0gIHByb2plY3Rpb25zLgotLSBUaGUgYGdsdHJhbnNmb3JtYXRpb25gIGVsZW1lbnQgbm93IGRldGVjdHMgaWYgdGhlCi0gIGBHc3RWaWRlb0FmZmluZVRyYW5zZm9ybWF0aW9uTWV0YWAgaXMgc3VwcG9ydGVkIGRvd25zdHJlYW0gYW5kIHdpbGwgZWZmaWNpZW50bHkKLSAgcGFzcyBpdHMgdHJhbnNmb3JtYXRpb24gZG93bnN0cmVhbS4gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGFzIGl0Ci0gIHJlc3VsdHMgaW4gbGVzcyBwcm9jZXNzaW5nIGJlaW5nIHJlcXVpcmVkLgotLSBUaGUgd2F5bGFuZCBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyB0aGUgbXVsdGktdGhyZWFkZWQgc2FmZSBldmVudC1sb29wIEFQSQotICBhbGxvd2luZyBjb3JyZWN0IHVzYWdlIGluIGFwcGxpY2F0aW9ucyB0aGF0IGNhbGwgd2F5bGFuZCBmdW5jdGlvbnMgZnJvbQotICBtdWx0aXBsZSB0aHJlYWRzLgotLSBTdXBwb3J0IGZvciBuYXRpdmUgOTAgZGVncmVlIHJvdGF0aW9ucyBhbmQgaG9yaXpvbnRhbC92ZXJ0aWNhbCBmbGlwcwotICBpbiBgZ2xpbWFnZXNpbmtgLgotCi0jIyMjIFZ1bGthbgotCi0tIFRoZSBWdWxrYW4gZWxlbWVudHMgbm93IHdvcmsgdW5kZXIgV2F5bGFuZCBhbmQgaGF2ZSByZWNlaXZlZCBudW1lcm91cwotICBidWdmaXhlcy4KLQotIyMjIyBRTUwgZWxlbWVudHMKLQotLSBgcW1sZ2xzaW5rYCB2aWRlbyBzaW5rIG5vdyB3b3JrcyBvbiBtb3JlIHBsYXRmb3Jtcywgbm90YWJseSwgV2luZG93cywgV2F5bGFuZCwKLSAgYW5kIFF0J3MgZWdsZnMgKGZvciBlbWJlZGRlZCBkZXZpY2VzIHdpdGggYW4gT3BlbkdMIGltcGxlbWVudGF0aW9uKSBpbmNsdWRpbmcKLSAgdGhlIFJhc3BiZXJyeSBQaS4KLS0gTmV3IGVsZW1lbnQgYHFtbGdsc3JjYCB0byByZWNvcmQgYSBRTUwgc2NlbmUgaW50byBhIEdTdHJlYW1lciBwaXBlbGluZS4KLQotIyMjIyBLTVMgdmlkZW8gc2luawotCi0tIE5ldyBlbGVtZW50IGBrbXNzaW5rYCB0byByZW5kZXIgdmlkZW8gdXNpbmcgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyCi0gIChEUk0pIGFuZCBLZXJuZWwgTW9kZSBTZXR0aW5nIChLTVMpIHN1YnN5c3RlbXMgaW4gdGhlIExpbnV4Ci0gIGtlcm5lbC4gSXQgaXMgb3JpZW50ZWQgdG8gYmUgdXNlZCBtb3N0bHkgaW4gZW1iZWRkZWQgc3lzdGVtcy4KLQotIyMjIyBXYXlsYW5kIHZpZGVvIHNpbmsKLQotLSBgd2F5bGFuZHNpbmtgIG5vdyBzdXBwb3J0cyB0aGUgd2xfdmlld3BvcnRlciBleHRlbnNpb24gYWxsb3dpbmcKLSAgdmlkZW8gc2NhbGluZyBhbmQgY3JvcHBpbmcgdG8gYmUgZGVsZWdhdGVkIHRvIHRoZSBXYXlsYW5kCi0gIGNvbXBvc2l0b3IuIFRoaXMgZXh0ZW5zaW9uIGlzIGFsc28gYmVlbiBtYWRlIG9wdGlvbmFsLCBzbyB0aGF0IGl0IGNhbgotICBhbHNvIHdvcmsgb24gY3VycmVudCBjb21wb3NpdG9ycyB0aGF0IGRvbid0IHN1cHBvcnQgaXQuIEl0IGFsc28gbm93IGhhcwotICBzdXBwb3J0IGZvciB0aGUgdmlkZW8gbWV0YSwgYWxsb3dpbmcgemVyby1jb3B5IG9wZXJhdGlvbnMgaW4gbW9yZQotICBjYXNlcy4KLQotIyMjIyBEVkIgaW1wcm92ZW1lbnRzCi0KLS0gYGR2YnNyY2Agbm93IGhhcyBiZXR0ZXIgZGVsaXZlcnktc3lzdGVtIGF1dG9kZXRlY3Rpb24gYW5kIHNldmVyYWwKLSAgbmV3IHBhcmFtZXRlciBzYW5pdHktY2hlY2tzIHRvIGltcHJvdmUgaXRzIHJlc2lsaWVuY2UgdG8gY29uZmlndXJhdGlvbgotICBvbWlzc2lvbnMgYW5kIGVycm9ycy4gU3VwZXJmbHVvdXMgcG9sbGluZyBjb250aW51ZXMgdG8gYmUgdHJpbW1lZCBkb3duLAotICBhbmQgdGhlIGRlYnVnZ2luZyBvdXRwdXQgaGFzIGJlZW4gbWFkZSBtb3JlIGNvbnNpc3RlbnQgYW5kIHByZWNpc2UuCi0gIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5uZWwtY29uZmlndXJhdGlvbiBwYXJzZXIgbm93IHN1cHBvcnRzIHRoZSBuZXcgZHZidjUKLSAgZm9ybWF0LCBlbmFibGluZyBgZHZiYmFzZWJpbmAgdG8gYXV0b21hdGljYWxseSBwbGF5YmFjayBjb250ZW50IHRyYW5zbWl0dGVkCi0gIG9uIGRlbGl2ZXJ5IHN5c3RlbXMgdGhhdCBwcmV2aW91c2x5IHJlcXVpcmVkIG1hbnVhbCBkZXNjcmlwdGlvbiwgbGlrZSBJU0RCLVQuCi0KLSMjIyMgREFTSCwgSExTIGFuZCBhZGFwdGl2ZWRlbXV4Ci0KLS0gSExTIG5vdyBoYXMgc3VwcG9ydCBmb3IgQWx0ZXJuYXRlIFJlbmRpdGlvbiBhdWRpbyBhbmQgdmlkZW8gdHJhY2tzLiBGdWxsCi0gIHN1cHBvcnQgZm9yIEFsdGVybmF0ZSBSZW5kaXRpb24gc3VidGl0bGUgdHJhY2tzIHdpbGwgYmUgaW4gYW4gdXBjb21pbmcgcmVsZWFzZS4KLS0gREFTSCByZWNlaXZlZCBzdXBwb3J0IGZvciBrZXlmcmFtZS1vbmx5IHRyaWNrIG1vZGVzIGlmIHRoZQotICBgR1NUX1NFRUtfRkxBR19UUklDS01PREVfS0VZX1VOSVRTYCBmbGFnIGlzIGdpdmVuIHdoZW4gc2Vla2luZy4gSXQgd2lsbAotICBvbmx5IGRvd25sb2FkIGtleWZyYW1lcyB0aGVuLCB3aGljaCBzaG91bGQgaGVscCB3aXRoIGhpZ2gtc3BlZWQgcGxheWJhY2suCi0gIENoYW5nZXMgdG8gc2tpcCBvdmVyIG11bHRpcGxlIGZyYW1lcyBiYXNlZCBvbiBiYW5kd2lkdGggYW5kIG90aGVyIG1ldHJpY3MKLSAgd2lsbCBiZSBhZGRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCi0tIExvdHMgb2YgcmVsaWFiaWxpdHkgZml4ZXMgYXJvdW5kIHNlZWsgaGFuZGxpbmcgYW5kIGJpdHJhdGUgc3dpdGNoaW5nLgotCi0jIyMjIEJsdWV0b290aCBpbXByb3ZlbWVudHMKLQotLSBUaGUgYGF2ZHRwc3JjYCBlbGVtZW50IG5vdyBzdXBwb3J0cyBtZXRhZGF0YSBzdWNoIGFzIHRyYWNrIHRpdGxlLCBhcnRpc3QKLSAgbmFtZSwgYW5kIG1vcmUsIHdoaWNoIGRldmljZXMgY2FuIHNlbmQgdmlhIEFWUkNQLiBUaGVzZSBhcmUgcHVibGlzaGVkIGFzCi0gIHRhZ3Mgb24gdGhlIHBpcGVsaW5lLgotLSBUaGUgYGEyZHBzaW5rYCBlbGVtZW50IHJlY2VpdmVkIHNvbWUgbG92ZSBhbmQgd2FzIGNsZWFuZWQgdXAgc28gdGhhdCBpdAotICBhY3R1YWxseSB3b3JrcyBhZnRlciB0aGUgaW5pdGlhbCBHU3RyZWFtZXIgMS4wIHBvcnQuCi0KLSMjIyMgR1N0cmVhbWVyIFZBQVBJCi0KLS0gQWxsIHRoZSBkZWNvZGVycyBoYXZlIGJlZW4gc3BsaXQsIG9uZSBwbHVnaW4gZmVhdHVyZSBwZXIgY29kZWMuIFNvCi0gIGZhciwgdGhlIGF2YWlsYWJsZSBvbmVzLCBkZXBlbmRpbmcgb24gdGhlIGRyaXZlciwgYXJlOgotICBgdmFhcGltcGVnMmRlY2AsIGB2YWFwaWgyNjRkZWNgLCBgdmFhcGloMjY1ZGVjYCwgYHZhYXBpdmMxZGVjYCwgYHZhYXBpdnA4ZGVjYCwKLSAgYHZhYXBpdnA5ZGVjYCBhbmQgYHZhYXBpanBlZ2RlY2AgKHdoaWNoIGFscmVhZHkgd2FzIHNwbGl0KS4KLS0gSW1wcm92ZW1lbnRzIHdoZW4gbWFwcGluZyBWQSBzdXJmYWNlcyBpbnRvIG1lbW9yeS4gSXQgbm93IGRpZmZlcmVudGlhdGVzCi0gIGJldHdlZW4gbmVnb3RpYXRpb24gY2FwcyBhbmQgYWxsb2NhdGlvbnMgY2Fwcywgc2luY2UgdGhlIGFsbG9jYXRpb24KLSAgbWVtb3J5IGZvciBzdXJmYWNlcyBtYXkgYmUgYmlnZ2VyIHRoYW4gb25lIHRoYXQgaXMgZ29pbmcgdG8gYmUKLSAgbWFwcGVkLgotLSBgdmFhcGloMjY1ZW5jYCBub3cgc3VwcG9ydHMgY29uc3RhbnQgYml0cmF0ZSBtb2RlIChDQlIpLgotLSBTaW5jZSBzZXZlcmFsIFZBIGRyaXZlcnMgYXJlIHVubWFpbnRhaW5lZCwgd2UgZGVjaWRlIHRvIGtlZXAgYSB3aGl0ZWxpc3QKLSAgd2l0aCB0aGUgdmEgZHJpdmVycyB3ZSBhY3R1YWxseSB0ZXN0LCB3aGljaCBpcyBtb3N0bHkgdGhlIGk5MTUgYW5kIHRvIGEgbGVzc2VyCi0gIGRlZ3JlZSBnYWxsaXVtIGZyb20gdGhlIG1lc2EgcHJvamVjdC4gRXhwb3J0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICBgR1NUX1ZBQVBJX0FMTF9EUklWRVJTYCBkaXNhYmxlcyB0aGUgd2hpdGVsaXN0LgotLSBQbHVnaW4gZmVhdHVyZXMgYXJlIHJlZ2lzdGVyZWQgYXQgcnVuLXRpbWUsIGFjY29yZGluZyB0byB0aGVpciBzdXBwb3J0IGJ5Ci0gIHRoZSBsb2FkZWQgVkEgZHJpdmVyLiBTbyBvbmx5IHRoZSBkZWNvZGVycyBhbmQgZW5jb2RlciBzdXBwb3J0ZWQgYnkgdGhlCi0gIHN5c3RlbSBhcmUgcmVnaXN0ZXJlZC4gU2luY2UgdGhlIGRyaXZlciBjYW4gY2hhbmdlLCBzb21lIGRlcGVuZGVuY2llcyBhcmUKLSAgdHJhY2tlZCB0byBpbnZhbGlkYXRlIHRoZSBHU3RyZWFtZXIgcmVnaXN0cnkgYW5kIHJlbG9hZCB0aGUgcGx1Z2luLgotLSBgZG1hYnVmYCBpbXBvcnRhdGlvbiBmcm9tIHVwc3RyZWFtIGhhcyBiZWVuIGltcHJvdmVkLCBnYWluaW5nIHBlcmZvcm1hbmNlLgotLSBgdmFhcGlwb3N0cHJvY2Agbm93IGNhbiBuZWdvdGlhdGUgYnVmZmVyIHRyYW5zZm9ybWF0aW9ucyB2aWEgY2Fwcy4KLS0gRGVjb2RlcnMgbm93IGNhbiBkbyBJLWZyYW1lIG9ubHkgcmV2ZXJzZSBwbGF5YmFjay4gVGhpcyBkZWNvZGVzIEktZnJhbWVzCi0gIG9ubHkgYmVjYXVzZSB0aGUgc3VyZmFjZSBwb29sIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVxdWlyZWQgYnkgdGhlIEdPUCB0byBzaG93IGFsbCB0aGUKLSAgZnJhbWVzLgotLSBUaGUgdXBsb2FkIG9mIGZyYW1lcyBvbnRvIG5hdGl2ZSBHTCB0ZXh0dXJlcyBoYXMgYmVlbiBvcHRpbWl6ZWQgdG9vLCBrZWVwaW5nCi0gIGEgY2FjaGUgb2YgdGhlIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIHRoZSBvZmZlcmVkIHRleHR1cmVzIGJ5IHRoZSBzaW5rLgotCi0jIyMjIFY0TDIgY2hhbmdlcwotCi0tIE1vcmUgcGl4ZWxzIGZvcm1hdHMgYXJlIG5vdyBzdXBwb3J0ZWQKLS0gRGVjb2RlciBpcyBub3cgdXNpbmcgYEdfU0VMRUNUSU9OYCBpbnN0ZWFkIG9mIHRoZSBkZXByZWNhdGVkIGBHX0NST1BgCi0tIERlY29kZXIgbm93IHVzZXMgdGhlIGBTVE9QYCBjb21tYW5kIHRvIGhhbmRsZSBFT1MKLS0gVHJhbnNmb3JtIGVsZW1lbnQgY2FuIG5vdyBzY2FsZSB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvCi0tIENvbG9yaW1ldHJ5IHN1cHBvcnQgaGFzIGJlZW4gaW1wcm92ZWQgZXZlbiBtb3JlCi0tIFdlIG5vdyBzdXBwb3J0IHRoZSBgT1VUUFVUX09WRVJMQVlgIHR5cGUgb2YgdmlkZW8gbm9kZSBpbiB2NGwyc2luawotCi0jIyMjIE1pc2NlbGxhbmVvdXMKLQotLSBgbXVsdGlxdWV1ZWAncyBpbnB1dCBwYWRzIGdhaW5lZCBhIG5ldyBgImdyb3VwLWlkImAgcHJvcGVydHkgd2hpY2gKLSAgY2FuIGJlIHVzZWQgdG8gZ3JvdXAgaW5wdXQgc3RyZWFtcy4gVHlwaWNhbGx5IG9uZSB3aWxsIGFzc2lnbgotICBkaWZmZXJlbnQgaWQgbnVtYmVycyB0byBhdWRpbywgdmlkZW8gYW5kIHN1YnRpdGxlIHN0cmVhbXMgZm9yCi0gIGV4YW1wbGUuIFRoaXMgd2F5IGBtdWx0aXF1ZXVlYCBjYW4gbWFrZSBzdXJlIHN0cmVhbXMgb2YgdGhlIHNhbWUKLSAgdHlwZSBhZHZhbmNlIGluIGxvY2tzdGVwIGlmIHNvbWUgb2YgdGhlIHN0cmVhbXMgYXJlIHVubGlua2VkIGFuZCB0aGUKLSAgYCJzeW5jLWJ5LXJ1bm5pbmctdGltZSJgIHByb3BlcnR5IGlzIHNldC4gVGhpcyBpcyB1c2VkIGluCi0gIGRlY29kZWJpbjMvcGxheWJpbjMgdG8gaW1wbGVtZW50IGFsbW9zdC1pbnN0YW50YW5lb3VzIHN0cmVhbQotICBzd2l0Y2hpbmcuICBUaGUgZ3JvdXBpbmcgaXMgcmVxdWlyZWQgYmVjYXVzZSBkaWZmZXJlbnQgZG93bnN0cmVhbQotICBwYXRocyAoYXVkaW8sIHZpZGVvLCBldGMuKSAgbWF5IGhhdmUgZGlmZmVyZW50IGJ1ZmZlcmluZy9sYXRlbmN5Ci0gIGV0Yy4gc28gbWlnaHQgYmUgY29uc3VtaW5nIGRhdGEgZnJvbSBtdWx0aXF1ZXVlIHdpdGggYSBzbGlnaHRseQotICBkaWZmZXJlbnQgcGhhc2UsIGFuZCBpZiB3ZSB0cmFjayBkaWZmZXJlbnQgc3RyZWFtIGdyb3VwcyBzZXBhcmF0ZWx5Ci0gIHdlIG1pbmltaXplIHN0cmVhbSBzd2l0Y2hpbmcgZGVsYXlzIGFuZCBidWZmZXJpbmcgaW5zaWRlIHRoZQotICBgbXVsdGlxdWV1ZWAuCi0tIGBhbHNhc3JjYCBub3cgc3VwcG9ydHMgQUxTQSBkcml2ZXJzIHdpdGhvdXQgYSBwb3NpdGlvbiBmb3IgZWFjaAotICBjaGFubmVsLCB0aGlzIGlzIGNvbW1vbiBpbiBzb21lIHByb2Zlc3Npb25hbCBvciBpbmR1c3RyaWFsIGhhcmR3YXJlLgotLSBgbGlidnB4YCBiYXNlZCBkZWNvZGVycyAoYHZwOGRlY2AgYW5kIGB2cDlkZWNgKSBub3cgY3JlYXRlIG11bHRpcGxlIHRocmVhZHMgb24KLSAgY29tcHV0ZXJzIHdpdGggbXVsdGlwbGUgQ1BVcyBhdXRvbWF0aWNhbGx5LgotLSBgcmZic3JjYCAtIHVzZWQgZm9yIGNhcHR1cmluZyBmcm9tIGEgVk5DIHNlcnZlciAtIGhhcyBzZWVuIGEgbG90IG9mCi0gIGRlYnVnZ2luZy4gSXQgbm93IHN1cHBvcnRzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgUkZCCi0gIHByb3RvY29sIGFuZCB1c2VzIEdJTyBldmVyeXdoZXJlLgotLSBgdHNkZW11eGAgY2FuIG5vdyByZWFkIEFUU0MgRS1BQy0zIHN0cmVhbXMuCi0tIE5ldyBgR3N0VmlkZW9EaXJlY3Rpb25gIHZpZGVvIG9yaWVudGF0aW9uIGludGVyZmFjZSBmb3Igcm90YXRpbmcsIGZsaXBwaW5nCi0gIGFuZCBtaXJyb3JpbmcgdmlkZW8gaW4gOTDCsCBzdGVwcy4gSXQgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIGB2aWRlb2ZsaXBgIGFuZAotICBgZ2x2aWRlb2ZsaXBgIGVsZW1lbnRzIGN1cnJlbnRseS4KLS0gSXQgaXMgbm93IHBvc3NpYmxlIHRvIGdpdmUgYGFwcHNyY2AgYSBkdXJhdGlvbiBpbiB0aW1lLCBhbmQgdGhlcmUgaXMgbm93IGEKLSAgbm9uLWJsb2NraW5nIHRyeS1wdWxsIEFQSSBmb3IgYGFwcHNpbmtgIHRoYXQgcmV0dXJucyBOVUxMIGlmIG5vdGhpbmcgaXMKLSAgYXZhaWxhYmxlIHJpZ2h0IG5vdy4KLS0gYHgyNjRlbmNgIGhhcyBzdXBwb3J0IG5vdyBmb3IgY2hyb21hLXNpdGUgYW5kIGNvbG9yaW1ldHJ5IHNldHRpbmdzCi0tIEEgbmV3IEpQRUcyMDAwIHBhcnNlciBlbGVtZW50IHdhcyBhZGRlZCwgYW5kIHRoZSBKUEVHMjAwMCBjYXBzIHdlcmUgY2xlYW5lZAotICB1cCBhbmQgZ2FpbmVkIG1vcmUgaW5mb3JtYXRpb24gbmVlZGVkIGluIGNvbWJpbmF0aW9uIHdpdGggUlRQIGFuZCB2YXJpb3VzCi0gIGNvbnRhaW5lciBmb3JtYXRzLgotLSBSZXZlcnNlIHBsYXliYWNrIHN1cHBvcnQgZm9yIGB2aWRlb3JhdGVgIGFuZCBgZGVpbnRlcmxhY2VgIHdhcyBpbXBsZW1lbnRlZAotLSBWYXJpb3VzIGltcHJvdmVtZW50cyBldmVyeXdoZXJlIGZvciByZXZlcnNlIHBsYXliYWNrIGFuZCBgS0VZX1VOSVRTYCB0cmljayBtb2RlCi0tIE5ldyBjbGVhbmVkIHVwIGByYXdhdWRpb3BhcnNlYCBhbmQgYHJhd3ZpZGVvcGFyc2VgIGVsZW1lbnRzIHRoYXQgcmVwbGFjZSB0aGUKLSAgb2xkIGBhdWRpb3BhcnNlYCBhbmQgYHZpZGVvcGFyc2VgIGVsZW1lbnRzLiBUaGVyZSBhcmUgY29tcGF0aWJpbGl0eSBlbGVtZW50Ci0gIGZhY3RvcmllcyByZWdpc3RlcmVkIHdpdGggdGhlIG9sZCBuYW1lcyB0byBhbGxvdyBleGlzdGluZyBjb2RlIHRvIGNvbnRpbnVlCi0gIHRvIHdvcmsuCi0tIFRoZSBEZWNrbGluayBwbHVnaW4gZ2FpbmVkIHN1cHBvcnQgZm9yIDEwIGJpdCB2aWRlbyBTTVBURSB0aW1lY29kZXMsIGFuZAotICBnZW5lcmFsbHkgZ290IG1hbnkgYnVnZml4ZXMgZm9yIHZhcmlvdXMgaXNzdWVzLgotLSBOZXcgQVBJIGluIGBHc3RQbGF5ZXJgIGZvciBzZXR0aW5nIHRoZSBtdWx0aXZpZXcgbW9kZSBmb3Igc3RlcmVvc2NvcGljCi0gIHZpZGVvLCBzZXR0aW5nIGFuIEhUVFAvUlRTUCB1c2VyIGFnZW50IGFuZCBhIHRpbWUgb2Zmc2V0IGJldHdlZW4gYXVkaW8gYW5kCi0gIHZpZGVvLiBJbiBhZGRpdGlvbiB0byB0aGF0LCB0aGVyZSB3ZXJlIHZhcmlvdXMgYnVnZml4ZXMgYW5kIHRoZSBuZXcKLSAgZ3N0LWV4YW1wbGVzIG1vZHVsZSBjb250YWlucyBBbmRyb2lkLCBpT1MsIEdUSysgYW5kIFF0IGV4YW1wbGUgYXBwbGljYXRpb25zLgotLSBgR3N0QmluYCBoYXMgbmV3IEFQSSBmb3Igc3VwcHJlc3NpbmcgdmFyaW91cyBgR3N0RWxlbWVudGAgb3IgYEdzdE9iamVjdGAKLSAgZmxhZ3MgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgYWZmZWN0ZWQgYnkgYWRkZWQvcmVtb3ZlZCBjaGlsZCBlbGVtZW50cy4gVGhpcwotICBuZXcgQVBJIGFsbG93cyBgR3N0QmluYCBzdWJjbGFzc2VzIHRvIGhhbmRsZSBmb3IgdGhlbXNlbHZlcyBpZiB0aGV5Ci0gIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgc2luayBvciBzb3VyY2UgZWxlbWVudCwgZm9yIGV4YW1wbGUuCi0tIFRoZSBgc3VicGFyc2VgIGVsZW1lbnQgY2FuIGhhbmRsZSBXZWJWVFQgc3RyZWFtcyBub3cuCi0tIEEgbmV3IGBzZHBzcmNgIGVsZW1lbnQgd2FzIGFkZGVkIHRoYXQgY2FuIHJlYWQgYW4gU0RQIGZyb20gYSBmaWxlLCBvciBnZXQgaXQKLSAgYXMgYSBzdHJpbmcgYXMgcHJvcGVydHkgYW5kIHRoZW4gc2V0cyB1cCBhbiBSVFAgcGlwZWxpbmUgYWNjb3JkaW5nbHkuCi0KLSMjIyBQbHVnaW4gbW92ZXMKLQotTm8gcGx1Z2lucyB3ZXJlIG1vdmVkIHRoaXMgY3ljbGUuIFdlJ2xsIG1ha2UgdXAgZm9yIGl0IG5leHQgY3ljbGUsIHByb21pc2UhCi0KLSMjIyBSZXdyaXR0ZW4gbWVtb3J5IGxlYWsgdHJhY2VyCi0KLUdTdHJlYW1lciBoYXMgaGFkIGJhc2ljIGZ1bmN0aW9uYWxpdHkgdG8gdHJhY2UgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZgotYm90aCBtaW5pLW9iamVjdHMgKGJ1ZmZlcnMsIGV2ZW50cywgY2FwcywgZXRjLikgYW5kIG9iamVjdHMgaW4gdGhlIGZvcm0gb2YgdGhlCi1pbnRlcm5hbCBgR3N0QWxsb2NUcmFjZWAgdHJhY2luZyBzeXN0ZW0uIFRoaXMgQVBJIHdhcyBuZXZlciBleHBvc2VkIGluIHRoZQotMS54IEFQSSBzZXJpZXMgdGhvdWdoLiBXaGVuIHJlcXVlc3RlZCwgdGhpcyB3b3VsZCBkdW1wIGEgbGlzdCBvZiBvYmplY3RzIGFuZAotbWluaS1vYmplY3RzIGF0IGV4aXQgdGltZSB3aGljaCBoYWQgc3RpbGwgbm90IGJlZW4gZnJlZWQgYXQgdGhhdCBwb2ludCwKLWVuYWJsZWQgd2l0aCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gVGhpcyBzdWJzeXN0ZW0gaGFzIG5vdyBiZWVuIHJlbW92ZWQKLWluIGZhdm91ciBvZiBhIG5ldyBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgcmVjZW50bHktYWRkZWQgdHJhY2luZyBmcmFtZXdvcmsuCi0KLVRyYWNpbmcgaG9va3MgaGF2ZSBiZWVuIGFkZGVkIHRvIHRyYWNlIHRoZSBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YKLUdzdE9iamVjdHMgYW5kIG1pbmktb2JqZWN0cywgYW5kIGEgbmV3IHRyYWNlciBwbHVnaW4gaGFzIGJlZW4gd3JpdHRlbiB1c2luZwotdGhvc2UgbmV3IGhvb2tzIHRvIHRyYWNrIHdoaWNoIG9iamVjdHMgYXJlIHN0aWxsIGxpdmUgYW5kIHdoaWNoIGFyZSBub3QuIElmCi1HU3RyZWFtZXIgaGFzIGJlZW4gY29tcGlsZWQgYWdhaW5zdCB0aGUgbGlidW53aW5kIGxpYnJhcnksIHRoZSBuZXcgbGVha3MgdHJhY2VyCi13aWxsIHJlbWVtYmVyIHdoZXJlIG9iamVjdHMgd2VyZSBhbGxvY2F0ZWQgZnJvbSBhcyB3ZWxsLiBCeSBkZWZhdWx0IHRoZSBsZWFrcwotdHJhY2VyIHdpbGwgc2ltcGx5IG91dHB1dCBhIHdhcm5pbmcgaWYgbGVha3MgaGF2ZSBiZWVuIGRldGVjdGVkIG9uIGBnc3RfZGVpbml0KClgLgotCi1JZiB0aGUgYEdTVF9MRUFLU19UUkFDRVJfU0lHYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoZSBsZWFrcyB0cmFjZXIKLXdpbGwgYWxzbyBoYW5kbGUgdGhlIGZvbGxvd2luZyBVTklYIHNpZ25hbHM6Ci0KLSAtIGBTSUdVU1IxYDogbG9nIGFsaXZlIG9iamVjdHMKLSAtIGBTSUdVU1IyYDogY3JlYXRlIGEgY2hlY2twb2ludCBhbmQgcHJpbnQgYSBsaXN0IG9mIG9iamVjdHMgY3JlYXRlZCBhbmQKLSAgIGRlc3Ryb3llZCBzaW5jZSB0aGUgcHJldmlvdXMgY2hlY2twb2ludC4KLQotVW5mb3J0dW5hdGVseSB0aGlzIHdpbGwgbm90IHdvcmsgb24gV2luZG93cyBkdWUgdG8gbm8gc2lnbmFscywgaG93ZXZlci4KLQotSWYgdGhlIGBHU1RfTEVBS1NfVFJBQ0VSX1NUQUNLX1RSQUNFYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoZSBsZWFrcwotdHJhY2VyIHdpbGwgYWxzbyBsb2cgdGhlIGNyZWF0aW9uIHN0YWNrIHRyYWNlIG9mIGxlYWtlZCBvYmplY3RzLiBUaGlzIG1heQotc2lnbmlmaWNhbnRseSBpbmNyZWFzZSBtZW1vcnkgY29uc3VtcHRpb24gaG93ZXZlci4KLQotTmV3IGBNQVlfQkVfTEVBS0VEYCBmbGFncyBoYXZlIGJlZW4gYWRkZWQgdG8gR3N0T2JqZWN0IGFuZCBHc3RNaW5pT2JqZWN0LCBzbwotdGhhdCBvYmplY3RzIGFuZCBtaW5pLW9iamVjdHMgdGhhdCBhcmUgbGlrZWx5IHRvIHN0YXkgYXJvdW5kIGZvcmV2ZXIgY2FuIGJlCi1mbGFnZ2VkIGFuZCBibGFja2xpc3RlZCBmcm9tIHRoZSBsZWFrIG91dHB1dC4KLQotVG8gZ2l2ZSB0aGUgbmV3IGxlYWsgdHJhY2VyIGEgc3Bpbiwgc2ltcGx5IGNhbGwgYW55IEdTdHJlYW1lciBhcHBsaWNhdGlvbiBzdWNoCi1hcyBgZ3N0LWxhdW5jaC0xLjBgIG9yIGBnc3QtcGxheS0xLjBgIGxpa2UgdGhpczoKLQotICAgIEdTVF9UUkFDRVJTPWxlYWtzIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0xMCAhIGZha2VzaW5rCi0KLUlmIHRoZXJlIGFyZSBhbnkgbGVha3MsIGEgd2FybmluZyB3aWxsIGJlIHJhaXNlZCBhdCB0aGUgZW5kLgotCi1JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHRyYWNlIG9ubHkgY2VydGFpbiB0eXBlcyBvZiBvYmplY3RzIG9yIG1pbmktb2JqZWN0czoKLQotICAgIEdTVF9UUkFDRVJTPSJsZWFrcyhHc3RFdmVudCxHc3RNZXNzYWdlKSIgZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwICEgZmFrZXNpbmsKLQotVGhpcyBkZWRpY2F0ZWQgbGVha3MgdHJhY2VyIGlzIG11Y2ggbXVjaCBmYXN0ZXIgdGhhbiB2YWxncmluZCBzaW5jZSBhbGwgY29kZSBpcwotZXhlY3V0ZWQgbmF0aXZlbHkgaW5zdGVhZCBvZiBiZWluZyBpbnN0cnVtZW50ZWQuIFRoaXMgbWFrZXMgaXQgdmVyeSBzdWl0YWJsZQotZm9yIHVzZSBvbiBzbG93IG1hY2hpbmVzIG9yIGVtYmVkZGVkIGRldmljZXMuIEl0IGlzIGhvd2V2ZXIgbGltaXRlZCB0byBjZXJ0YWluCi10eXBlcyBvZiBsZWFrcyBhbmQgd29uJ3QgY2F0Y2ggbWVtb3J5IGxlYWtzIHdoZW4gdGhlIGFsbG9jYXRpb24gaGFzIGJlZW4gbWFkZQotdmlhIHBsYWluIG9sZCBgbWFsbG9jKClgIG9yIGBnX21hbGxvYygpYCBvciBvdGhlciBtZWFucy4gSXQgd2lsbCBhbHNvIG5vdCB0cmFjZQotbm9uLUdzdE9iamVjdCBHT2JqZWN0cy4KLQotVGhlIGdvYWwgaXMgdG8gZW5hYmxlIGxlYWsgdHJhY2luZyBvbiBHU3RyZWFtZXIncyBDb250aW51b3VzLUludGVncmF0aW9uIGFuZAotdGVzdGluZyBzeXN0ZW0sIGJvdGggZm9yIHRoZSByZWd1bGFyIHVuaXQgdGVzdHMgKG1ha2UgY2hlY2spIGFuZCBtZWRpYSB0ZXN0cwotKGdzdC12YWxpZGF0ZSksIHNvIHRoYXQgYWNjaWRlbnRhbCBsZWFrcyBpbiBjb21tb24gY29kZSBwYXRocyBjYW4gYmUgZGV0ZWN0ZWQKLWFuZCBmaXhlZCBxdWlja2x5LgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IHRyYWNlciwgY2hlY2sgb3V0IEd1aWxsYXVtZSBEZXNtb3R0ZXMncwotWyJUcmFja2luZyBNZW1vcnkgTGVha3MiXVtsZWFrcy10YWxrXSB0YWxrIG9yIGhpcyBbYmxvZyBwb3N0XVtsZWFrcy1ibG9nXSBhYm91dAotdGhlIHRvcGljLgotCi1bbGVha3MtdGFsa106IGh0dHBzOi8vZ3N0Y29uZi51YmljYXN0LnR2L3ZpZGVvcy90cmFja2luZy1tZW1vcnktbGVha3MvCi1bbGVha3MtYmxvZ106IGh0dHBzOi8vYmxvZy5kZXNtb3R0ZXMuYmUvP3Bvc3QvMjAxNi8wNi8yMC9HU3RyZWFtZXItbGVha3MtdHJhY2VyCi0KLSMjIyBHRVMgYW5kIE5MRSBjaGFuZ2VzCi0KLS0gQ2xpcCBwcmlvcml0aWVzIGFyZSBub3cgaGFuZGxlZCBieSB0aGUgbGF5ZXJzLCBhbmQgdGhlIEdFU1RpbWVsaW5lRWxlbWVudAotICBwcmlvcml0eSBwcm9wZXJ0eSBpcyBub3cgZGVwcmVjYXRlZCBhbmQgdW51c2VkCi0tIEVuaGFuY2VkIChkZSlpbnRlcmxhY2luZyBzdXBwb3J0IHRvIGFsd2F5cyB1c2UgdGhlIGBkZWludGVybGFjZWAgZWxlbWVudAotICBhbmQgZXhwb3NlIG5lZWRlZCBwcm9wZXJ0aWVzIHRvIHVzZXJzCi0tIEFsbG93IHJldXNpbmcgY2xpcHMgY2hpbGRyZW4gYWZ0ZXIgcmVtb3ZpbmcgdGhlIGNsaXAgZnJvbSBhIGxheWVyCi0tIFdlIGFyZSBub3cgdGVzdGluZyBtYW55IG1vcmUgcmVuZGVyaW5nIGZvcm1hdHMgaW4gdGhlIGdzdC12YWxpZGF0ZQotICB0ZXN0IHN1aXRlLCBhbmQgZmFpbHVyZXMgaGF2ZSBiZWVuIGZpeGVkLgotLSBBbHNvIG1hbnkgYnVncyBoYXZlIGJlZW4gZml4ZWQgaW4gdGhpcyBjeWNsZSEKLQotIyMjIEdTdHJlYW1lciB2YWxpZGF0ZSBjaGFuZ2VzCi0KLVRoaXMgY3ljbGUgaGFzIGJlZW4gZm9jdXNlZCBvbiBtYWtpbmcgR3N0VmFsaWRhdGUgbW9yZSB0aGFuIGp1c3QgYSB2YWxpZGF0aW5nCi10b29sLCBidXQgYWxzbyBhIHRvb2wgdG8gaGVscCBkZXZlbG9wZXJzIGRlYnVnIHRoZWlyIEdTdHJlYW1lciBpc3N1ZXMuIFdoZW4KLXJlcG9ydGluZyBpc3N1ZXMsIHdlIHRyeSB0byBnYXRoZXIgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBhbmQgZXhwb3NlCi1pdCB0byBlbmQgdXNlcnMgaW4gYSB1c2VmdWwgd2F5LiBGb3IgYW4gZXhhbXBsZSBvZiBzdWNoIGVuaGFuY2VtZW50cywgY2hlY2sgb3V0Ci1UaGliYXVsdCBTYXVuaWVyJ3MgW2Jsb2cgcG9zdF0oaW1wcm92aW5nLWRlYnVnZ2luZy1nc3RyZWFtZXItdmFsaWRhdGUpIGFib3V0Ci10aGUgbmV3IE5vdCBOZWdvdGlhdGVkIEVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20uCi0KLVBsYXliaW4zIHN1cHBvcnQgaGFzIGJlZW4gYWRkZWQgc28gd2UgY2FuIHJ1biB2YWxpZGF0ZSB0ZXN0cyB3aXRoIGBwbGF5YmluM2AKLWluc3RlYWQgb2YgcGxheWJpbi4KLQotV2UgYXJlIG5vdyBhYmxlIHRvIHByb3Blcmx5IGNvbW11bmljYXRlIGJldHdlZW4gYGdzdC12YWxpZGF0ZS1sYXVuY2hlcmAgYW5kCi1sYXVuY2hlZCBzdWJwcm9jZXNzZXMgd2l0aCBhY3R1YWwgSVBDIGJldHdlZW4gdGhlbS4gVGhhdCBoYXMgZW5hYmxlZCB0aGUgdGVzdAotbGF1bmNoZXIgdG8gaGFuZGxlIGZhaWxpbmcgdGVzdHMgc3BlY2lmeWluZyB0aGUgZXhhY3QgZXhwZWN0ZWQgaXNzdWUocykuCi0KLVtpbXByb3ZpbmctZGVidWdnaW5nLWdzdHJlYW1lci12YWxpZGF0ZV06IGh0dHBzOi8vYmxvZ3Mucy1vc2cub3JnL2ltcHJvdmluZy1kZWJ1Z2dpbmctZ3N0cmVhbWVyLXZhbGlkYXRlLwotCi0jIyMgZ3N0LWxpYmF2IGNoYW5nZXMKLQotZ3N0LWxpYmF2IHVzZXMgdGhlIHJlY2VudGx5IHJlbGVhc2VkIGZmbXBlZyAzLjIgbm93LCB3aGljaCBicmluZ3MgYSBsb3Qgb2YKLWltcHJvdmVtZW50cyBhbmQgYnVnZml4ZXMgZnJvbSB0aGUgZmZtcGVnIHRlYW0gaW4gYWRkaXRpb24gdG8gdmFyaW91cyBuZXcKLWNvZGVjIG1hcHBpbmdzIG9uIHRoZSBHU3RyZWFtZXIgc2lkZSBhbmQgcXVpdGUgYSBmZXcgYnVnZml4ZXMgdG8gdGhlIEdTdHJlYW1lcgotaW50ZWdyYXRpb24gdG8gbWFrZSBpdCBtb3JlIHJvYnVzdC4KLQotIyMgQnVpbGQgYW5kIERlcGVuZGVuY2llcwotCi0jIyMgRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIE1lc29uIGFzIGJ1aWxkIHN5c3RlbQotCi0jIyMjIE92ZXJ2aWV3Ci0KLVdlIGhhdmUgaGF2ZSBhZGRlZCBzdXBwb3J0IGZvciBidWlsZGluZyBHU3RyZWFtZXIgdXNpbmcgdGhlCi1bTWVzb24gYnVpbGQgc3lzdGVtXVttZXNvbl0uIFRoaXMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbCwgYnV0IHNob3VsZCB3b3JrCi1maW5lIGF0IGxlYXN0IG9uIExpbnV4IHVzaW5nIHRoZSBnY2Mgb3IgY2xhbmcgdG9vbGNoYWlucyBhbmQgb24gV2luZG93cyB1c2luZwotdGhlIE1pbmdXIG9yIE1TVkMgdG9vbGNoYWlucy4KLQotQXV0b3Rvb2xzIHJlbWFpbnMgdGhlIHByaW1hcnkgYnVpbGQgc3lzdGVtIGZvciB0aGUgdGltZSBiZWluZywgYnV0IHdlIGhvcGUgdG8KLXNvbWVkYXkgcmVwbGFjZSBpdCBhbmQgd2lsbCBzdGVhZGlseSB3b3JrIHRvd2FyZHMgdGhhdCBnb2FsLgotCi1Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYWNrZ3JvdW5kIGFuZCBpbXBsaWNhdGlvbnMgb2YgYWxsIHRoaXMgYW5kIHdoZXJlCi13ZSdyZSBob3BpbmcgdG8gZ28gaW4gZnV0dXJlIHdpdGggdGhpcyBjYW4gYmUgZm91bmQgaW4gW1RpbSdzIG1haWxdW21lc29uLW1haWxdCi10byB0aGUgZ3N0cmVhbWVyLWRldmVsIG1haWxpbmcgbGlzdC4KLQotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTWVzb24gY2hlY2sgb3V0IFt0aGVzZSB2aWRlb3NdW21lc29uLXZpZGVvc10gYW5kIGFsc28KLXRoZSBbTWVzb24gdGFsa11bbWVzb24tZ3N0Y29uZl0gYXQgdGhlIEdTdHJlYW1lciBDb25mZXJlbmNlLgotCi1JbW1lZGlhdGUgYmVuZWZpdHMgZm9yIExpbnV4IHVzZXJzIGFyZSBmYXN0ZXIgYnVpbGRzIGFuZCByZWJ1aWxkcy4gQXQgdGhlIHRpbWUKLW9mIHdyaXRpbmcgdGhlIE1lc29uIGJ1aWxkIG9mIEdTdHJlYW1lciBpcyB1c2VkIGJ5IGRlZmF1bHQgaW4gR05PTUUncyBqaGJ1aWxkCi1zeXN0ZW0uCi0KLVRoZSBNZXNvbiBidWlsZCBjdXJyZW50bHkgc3RpbGwgbGFja3MgbWFueSBvZiB0aGUgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24KLW9wdGlvbnMgdG8gZW5hYmxlL2Rpc2FibGUgc3BlY2lmaWMgcGx1Z2lucy4gVGhlc2Ugd2lsbCBiZSBhZGRlZCBiYWNrIGluIGR1ZQotY291cnNlLgotCi1Ob3RlOiBUaGUgbWVzb24gYnVpbGQgZmlsZXMgYXJlIG5vdCBkaXN0cmlidXRlZCBpbiB0aGUgc291cmNlIHRhcmJhbGxzLCB5b3Ugd2lsbAotbmVlZCB0byBnZXQgR1N0cmVhbWVyIGZyb20gZ2l0IGlmIHlvdSB3YW50IHRyeSBpdCBvdXQuCi0KLVttZXNvbl06IGh0dHA6Ly9tZXNvbmJ1aWxkLmNvbS8KLVttZXNvbi1tYWlsXTogaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvZ3N0cmVhbWVyLWRldmVsLzIwMTYtU2VwdGVtYmVyLzA2MDIzMS5odG1sCi1bbWVzb24tdmlkZW9zXTogaHR0cDovL21lc29uYnVpbGQuY29tL3ZpZGVvcy5odG1sCi1bbWVzb24tZ3N0Y29uZl06IGh0dHBzOi8vZ3N0Y29uZi51YmljYXN0LnR2L3ZpZGVvcy9nc3RyZWFtZXItZGV2ZWxvcG1lbnQtb24td2luZG93cy1hbnMtZmFzdGVyLWJ1aWxkcy1ldmVyeXdoZXJlLXdpdGgtbWVzb24vCi0KLSMjIyMgV2luZG93cyBWaXN1YWwgU3R1ZGlvIHRvb2xjaGFpbiBzdXBwb3J0Ci0KLVdpbmRvd3MgdXNlcnMgbWlnaHQgYXBwcmVjaWF0ZSBiZWluZyBhYmxlIHRvIGJ1aWxkIEdTdHJlYW1lciB1c2luZyB0aGUgTVNWQwotdG9vbGNoYWluLCB3aGljaCBpcyBub3QgcG9zc2libGUgdXNpbmcgYXV0b3Rvb2xzLiBUaGlzIG1lYW5zIHRoYXQgaXQgd2lsbCBiZQotcG9zc2libGUgdG8gZGVidWcgR1N0cmVhbWVyIGFuZCBhcHBsaWNhdGlvbnMgaW4gVmlzdWFsIFN0dWRpbywgZm9yIGV4YW1wbGUuCi1XZSByZXF1aXJlIFZTMjAxNSBvciBuZXdlciBmb3IgdGhpcyBhdCB0aGUgbW9tZW50LgotCi1UaGVyZSBhcmUgdHdvIHdheXMgdG8gYnVpbGQgR1N0cmVhbWVyIHVzaW5nIHRoZSBNU1ZDIHRvb2xjaGFpbjoKLQotMS4gVXNpbmcgdGhlIE1TVkMgY29tbWFuZC1saW5lIHRvb2xzIChgY2wuZXhlYCBldGMuKSB2aWEgTWVzb24ncyAibmluamEiIGJhY2tlbmQuCi0yLiBMZXR0aW5nIE1lc29uJ3MgInZzMjAxNSIgYmFja2VuZCBnZW5lcmF0ZSBWaXN1YWwgU3R1ZGlvIHByb2plY3QgZmlsZXMgdGhhdAotICAgY2FuIGJlIG9wZW5lZCBpbiBWaXN1YWwgU3R1ZGlvIGFuZCBjb21waWxlZCBmcm9tIHRoZXJlLgotCi1UaGlzIGlzIGN1cnJlbnRseSBvbmx5IGZvciBhZHZlbnR1cm91cyBzb3VscyB0aG91Z2guIEFsbCB0aGUgYml0cyBhcmUgaW4gcGxhY2UsCi1idXQgc3VwcG9ydCBmb3IgYWxsIG9mIHRoaXMgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIEdTdHJlYW1lcidzIGNlcmJlcm8gYnVpbGQKLXRvb2wgeWV0IGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcuIFRoaXMgd2lsbCBob3BlZnVsbHkgaGFwcGVuIGluIHRoZSBuZXh0IGN5Y2xlLAotYnV0IGZvciBub3cgdGhpcyBtZWFucyB0aGF0IHRob3NlIHdpc2hpbmcgdG8gY29tcGlsZSBHU3RyZWFtZXIgd2l0aCBNU1ZDIHdpbGwKLWhhdmUgdG8gZ2V0IHRoZWlyIGhhbmRzIGRpcnR5LgotCi1UaGVyZSBhcmUgYWxzbyBubyBiaW5hcnkgU0RLIGJ1aWxkcyB1c2luZyB0aGUgTVNWQyB0b29sY2hhaW4geWV0LgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBHU3RyZWFtZXIgYnVpbGRzIHVzaW5nIE1lc29uIGFuZCB0aGUgV2luZG93cyB0b29sY2hhaW4KLWNoZWNrIG91dCBOaXJiaGVlayBDaGF1aGFuJ3MgYmxvZyBwb3N0IFsiQnVpbGRpbmcgYW5kIGRldmVsb3BpbmcgR1N0cmVhbWVyIHVzaW5nIFZpc3VhbCBTdHVkaW8iXVttc3ZjLWJsb2ddLgotCi1bbXN2Yy1ibG9nXTogaHR0cDovL2Jsb2cubmlyYmhlZWsuaW4vMjAxNi8wNy9idWlsZGluZy1hbmQtZGV2ZWxvcGluZy1nc3RyZWFtZXItdXNpbmcuaHRtbAotCi0jIyMgRGVwZW5kZW5jaWVzCi0KLSMjIyMgZ3N0cmVhbWVyCi0KLWxpYnVud2luZCB3YXMgYWRkZWQgYXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeS4gSXQgaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcKLWFuZCB0cmFjaW5nIHB1cnBvc2VzLgotCi1UaGUgYG9wZW5jdmAgcGx1Z2luIGluIGdzdC1wbHVnaW5zLWJhZCBjYW4gbm93IGJlIGJ1aWx0IGFnYWluc3QgT3BlbkNWCi12ZXJzaW9uIDMuMSwgcHJldmlvdXNseSBvbmx5IDIuMy0yLjUgd2VyZSBzdXBwb3J0ZWQuCi0KLSMjIyMgZ3N0LXBsdWdpbnMtdWdseQotCi0tIGBtcGVnMmRlY2Agbm93IHJlcXVpcmVzIGF0IGxlYXN0IGxpYm1wZWcyIDAuNS4xIChmcm9tIDIwMDgpLgotCi0jIyMjIGdzdC1wbHVnaW5zLWJhZAotCi0tIGBnbHRyYW5zZm9ybWF0aW9uYCBub3cgcmVxdWlyZXMgYXQgbGVhc3QgZ3JhcGhlbmUgMS40LjAuCi0KLS0gYGx2MmAgbm93IHBsdWdpbiByZXF1aXJlcyBhdCBsZWFzdCBsaWx2IDAuMTYgaW5zdGVhZCBvZiBzbHYyLgotCi0jIyMgUGFja2FnaW5nIG5vdGVzCi0KLVBhY2thZ2VycyBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBgZ3N0L2dzdGNvbmZpZy5oYCBwdWJsaWMgaGVhZGVyIGZpbGUgaW4gdGhlCi1HU3RyZWFtZXIgY29yZSBsaWJyYXJ5IG1vdmVkIGJhY2sgZnJvbSBiZWluZyBhbiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IGluY2x1ZGUKLXRvIGJlaW5nIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCwgYW5kIHRodXMgaXQgaXMgbm8gbG9uZ2VyIGluc3RhbGxlZCBpbnRvCi1gJChsaWJkaXIpL2dzdHJlYW1lci0xLjAvaW5jbHVkZS9nc3RgIGJ1dCBpbnRvIHRoZSBub3JtYWwgaW5jbHVkZSBkaXJlY3RvcnkKLXdoZXJlIGl0IGxpdmVzIGhhcHBpbHkgZXZlciBhZnRlciB3aXRoIGFsbCB0aGUgb3RoZXIgcHVibGljIGhlYWRlciBmaWxlcy4gVGhlCi1yZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB3ZSBub3cgY2hlY2sgd2hldGhlciB0aGUgdGFyZ2V0IHN1cHBvcnRzIHVuYWxpZ25lZAotbWVtb3J5IGFjY2VzcyBiYXNlZCBvbiBwcmVkZWZpbmVkIGNvbXBpbGVyIG1hY3JvcyBhdCBjb21waWxlIHRpbWUgaW5zdGVhZCBvZgotY2hlY2tpbmcgaXQgYXQgY29uZmlndXJlIHRpbWUuCi0KLSMjIFBsYXRmb3JtLXNwZWNpZmljIGltcHJvdmVtZW50cwotCi0jIyMgQW5kcm9pZAotCi0jIyMjIE5ldyB1bml2ZXJzYWwgYmluYXJpZXMgZm9yIGFsbCBzdXBwb3J0ZWQgQUJJcwotCi1XZSBub3cgcHJvdmlkZSBhICJ1bml2ZXJzYWwiIHRhcmJhbGwgdG8gYWxsb3cgYnVpbGRpbmcgYXBwcyBhZ2FpbnN0IGFsbCB0aGUKLWFyY2hpdGVjdHVyZXMgY3VycmVudGx5IHN1cHBvcnRlZCAoeDg2LCB4ODYtNjQsIGFybWVhYmksIGFybWVhYmktdjdhLAotYXJtZWFiaS12OGEpLiBUaGlzIGlzIG5lZWRlZCBmb3IgYnVpbGRpbmcgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIEFuZHJvaWQKLU5ESyB3aGljaCBkZWZhdWx0cyB0byBidWlsZGluZyBhZ2FpbnN0IGFsbCBzdXBwb3J0ZWQgQUJJcy4gVXNlIFt0aGUgQW5kcm9pZAotcGxheWVyIGV4YW1wbGVdW2FuZHJvaWQtcGxheWVyLWV4YW1wbGUtYnVpbGRdIGFzIGEgcmVmZXJlbmNlIGZvciB0aGUgcmVxdWlyZWQKLWNoYW5nZXMuCi0KLVthbmRyb2lkLXBsYXllci1leGFtcGxlLWJ1aWxkXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWV4YW1wbGVzL2NvbW1pdC9wbGF5YmFjay9wbGF5ZXIvYW5kcm9pZD9pZD1hNWNkZGU5MTE5ZjAzOGExZWIzNjVhY2EyMGZhYTk3NDFhMzhlNzg4Ci0KLSMjIyMgTWlzY2VsbGFuZW91cwotCi0tIE5ldyBgYWhzc3JjYCBlbGVtZW50IHRoYXQgYWxsb3dzIHJlYWRpbmcgdGhlIGhhcmR3YXJlIHNlbnNvcnMsIGUuZy4gY29tcGFzcwotICBvciBhY2NlbGVyb21ldGVyLgotCi0jIyMgbWFjT1MgKE9TL1gpIGFuZCBpT1MKLQotLSBTdXBwb3J0IGZvciBxdWVyeWluZyBhdmFpbGFibGUgZGV2aWNlcyBvbiBPUy9YIHZpYSB0aGUgR3N0RGV2aWNlUHJvdmlkZXIKLSAgQVBJIHdhcyBhZGRlZC4KLS0gSXQgaXMgbm93IHBvc3NpYmxlIHRvIGNyZWF0ZSBPcGVuR0x8RVMgMy54IGNvbnRleHRzIG9uIGlPUyBhbmQgdXNlIHRoZW0gaW4KLSAgY29tYmluYXRpb24gd2l0aCB0aGUgVmlkZW9Ub29sYm94IGJhc2VkIGRlY29kZXIgZWxlbWVudC4KLS0gbWFueSBPcGVuR0wvR0xFUyBpbXByb3ZlbWVudHMsIHNlZSBPcGVuR0wgc2VjdGlvbiBhYm92ZQotCi0jIyMgV2luZG93cwotCi0tIGdzdGNvbmZpZy5oOiBBbHdheXMgdXNlIGRsbGV4cG9ydC9pbXBvcnQgb24gV2luZG93cyB3aXRoIE1TVkMKLS0gTWlzY2VsbGFuZW91cyBmaXhlcyB0byBtYWtlIGxpYnMgYW5kIHBsdWdpbnMgY29tcGlsZSB3aXRoIHRoZSBNVlNDIHRvb2xjaGFpbgotLSBNU1ZDIHRvb2xjaGFpbiBzdXBwb3J0IChzZWUgTWVzb24gc2VjdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzKQotCi0jIyBOZXcgTW9kdWxlcyBmb3IgRG9jdW1lbnRhdGlvbiwgRXhhbXBsZXMsIE1lc29uIEJ1aWxkCi0KLVRocmVlIG5ldyBnaXQgbW9kdWxlcyBoYXZlIGJlZW4gYWRkZWQgcmVjZW50bHk6Ci0KLSMjIyBnc3QtZG9jcwotCi1UaGlzIGlzIGEgbmV3IG1vZHVsZSB3aGVyZSB3ZSB3aWxsIG1haW50YWluIGRvY3VtZW50YXRpb24gaW4gdGhlIG1hcmtkb3duCi1mb3JtYXQuCi0KLUl0IGNvbnRhaW5zIHRoZSBmb3JtZXIgZ3N0cmVhbWVyLmNvbSBTREsgdHV0b3JpYWxzIHdoaWNoIGhhdmUga2luZGx5IGJlZW4gbWFkZQotYXZhaWxhYmxlIGJ5IEZsdWVuZG8gdW5kZXIgYSBDcmVhdGl2ZSBDb21tb25zIGxpY2Vuc2UuIFRoZSB0dXRvcmlhbHMgaGF2ZSBiZWVuCi1yZXZpZXdlZCBhbmQgdXBkYXRlZCBmb3IgR1N0cmVhbWVyIDEueCBhbmQgd2lsbCBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUKLVtvZmZpY2lhbCBHU3RyZWFtZXIgZG9jdW1lbnRhdGlvbl1bZG9jXSBnb2luZyBmb3J3YXJkLiBUaGUgb2xkIGdzdHJlYW1lci5jb20KLXNpdGUgd2lsbCB0aGVuIGJlIHNodXQgZG93biB3aXRoIHJlZGlyZWN0cyBwb2ludGluZyB0byB0aGUgdXBkYXRlZCB0dXRvcmlhbHMuCi0KLVNvbWUgb2YgdGhlIGV4aXN0aW5nIGRvY2Jvb2sgWE1MLWZvcm1hdHRlZCBkb2N1bWVudGF0aW9uIGZyb20gdGhlIEdTdHJlYW1lcgotY29yZSBtb2R1bGUgc3VjaCBhcyB0aGUgKkFwcGxpY2F0aW9uIERldmVsb3BtZW50IE1hbnVhbCogYW5kIHRoZSAqUGx1Z2luCi1Xcml0ZXIncyBHdWlkZSogaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBtYXJrZG93biBhcyB3ZWxsIGFuZCB3aWxsIGJlIG1haW50YWluZWQKLWluIHRoZSBnc3QtZG9jcyBtb2R1bGUgaW4gZnV0dXJlLiBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBHU3RyZWFtZXIgY29yZQotbW9kdWxlIGluIHRoZSBuZXh0IGN5Y2xlLgotCi1UaGlzIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gT3VyIGdvYWwgaXMgdG8gcHJvdmlkZSBhIG1vcmUgY29oZXNpdmUgZG9jdW1lbnRhdGlvbgotZXhwZXJpZW5jZSBmb3Igb3VyIHVzZXJzIGdvaW5nIGZvcndhcmQsIGFuZCBlYXNpZXIgdG8gY3JlYXRlIGFuZCBtYWludGFpbgotZG9jdW1lbnRhdGlvbiBmb3IgZGV2ZWxvcGVycy4gVGhlcmUgaXMgYSBsb3QgbW9yZSB3b3JrIHRvIGRvLCBnZXQgaW4gdG91Y2ggaWYKLXlvdSB3YW50IHRvIGhlbHAgb3V0LgotCi1JZiB5b3UgZW5jb3VudGVyIGFueSBwcm9ibGVtcyBvciBzcG90IGFueSBvbWlzc2lvbnMgb3Igb3V0ZGF0ZWQgY29udGVudCBpbiB0aGUKLW5ldyBkb2N1bWVudGF0aW9uLCBwbGVhc2UgW2ZpbGUgYSBidWcgaW4gYnVnemlsbGFdW2RvYy1idWddIHRvIGxldCB1cyBrbm93LgotCi1XZSB3aWxsIHByb2JhYmx5IHJlbGVhc2UgZ3N0LWRvY3MgYXMgYSBzZXBhcmF0ZSB0YXJiYWxsIGZvciBkaXN0cmlidXRpb25zIHRvCi1wYWNrYWdlIGluIHRoZSBuZXh0IGN5Y2xlLgotCi1bZG9jXTogaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbi8KLVtkb2MtYnVnXTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lciZjb21wb25lbnQ9ZG9jdW1lbnRhdGlvbgotCi0jIyMgZ3N0LWV4YW1wbGVzCi0KLUEgbmV3IFttb2R1bGVdW2V4YW1wbGVzLWdpdF0gaGFzIGJlZW4gYWRkZWQgZm9yIGV4YW1wbGVzLiBJdCBkb2VzIG5vdCBjb250YWluCi1tdWNoIHlldCwgY3VycmVudGx5IGl0IG9ubHkgY29udGFpbnMgYSBzbWFsbCBbaHR0cC1sYXVuY2hdW2h0dHAtbGF1bmNoXSB1dGlsaXR5Ci10aGF0IHNlcnZlcyBhIHBpcGVsaW5lIG92ZXIgaHR0cCBhcyB3ZWxsIGFzIHZhcmlvdXMgW0dzdFBsYXllciBwbGF5YmFjayBmcm9udGVuZHNdW3B1aXNdCi1mb3IgQW5kcm9pZCwgaU9TLCBHdGsrIGFuZCBRdC4KLQotTW9yZSBleGFtcGxlcyB3aWxsIGJlIGFkZGVkIG92ZXIgdGltZS4gVGhlIGV4YW1wbGVzIGluIHRoaXMgcmVwb3NpdG9yeSBzaG91bGQKLWJlIG1vcmUgdXNlZnVsIGFuZCBtb3JlIHN1YnN0YW50aWFsIHRoYW4gbW9zdCBvZiB0aGUgZXhhbXBsZXMgd2Ugc2hpcCBhcyBwYXJ0Ci1vZiBvdXIgb3RoZXIgbW9kdWxlcywgYW5kIGFsc28gd3JpdHRlbiBpbiBhIHdheSB0aGF0IG1ha2VzIHRoZW0gZ29vZCBleGFtcGxlCi1jb2RlLiBJZiB5b3UgaGF2ZSBpZGVhcyBmb3IgZXhhbXBsZXMsIGxldCB1cyBrbm93LgotCi1ObyBkZWNpc2lvbiBoYXMgYmVlbiBtYWRlIHlldCBpZiB0aGlzIG1vZHVsZSB3aWxsIGJlIHJlbGVhc2VkIGFuZC9vciBwYWNrYWdlZC4KLUl0IHByb2JhYmx5IG1ha2VzIHNlbnNlIHRvIGRvIHNvIHRob3VnaC4KLQotW2V4YW1wbGVzLWdpdF06IGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1leGFtcGxlcy90cmVlLwotW2h0dHAtbGF1bmNoXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWV4YW1wbGVzL3RyZWUvbmV0d29yay9odHRwLWxhdW5jaC8KLVtwdWlzXTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWV4YW1wbGVzL3RyZWUvcGxheWJhY2svcGxheWVyCi0KLSMjIyBnc3QtYnVpbGQKLQotW2dzdC1idWlsZF1bZ3N0LWJ1aWxkLWdpdF0gaXMgYSBuZXcgbWV0YSBtb2R1bGUgdG8gYnVpbGQgR1N0cmVhbWVyIHVzaW5nIHRoZQotbmV3IE1lc29uIGJ1aWxkIHN5c3RlbS4gVGhpcyBtb2R1bGUgaXMgbm90IHJlcXVpcmVkIHRvIGJ1aWxkIEdTdHJlYW1lciB3aXRoCi1NZXNvbiwgaXQgaXMgbWVyZWx5IGZvciBjb252ZW5pZW5jZSBhbmQgYWltcyB0byBwcm92aWRlIGEgZGV2ZWxvcG1lbnQgc2V0dXAKLXNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nIGBnc3QtdW5pbnN0YWxsZWRgIHNldHVwLgotCi1nc3QtYnVpbGQgbWFrZXMgdXNlIG9mIE1lc29uJ3MgW3N1YnByb2plY3QgZmVhdHVyZV1bbWVzb24tc3VicHJvamVjdHNdIGFuZCBzZXRzCi11cCB0aGUgdmFyaW91cyBHU3RyZWFtZXIgbW9kdWxlcyBhcyBzdWJwcm9qZWN0cywgc28gdGhleSBjYW4gYWxsIGJlIHVwZGF0ZWQgYW5kCi1idWlsdCBpbiBwYXJhbGxlbC4KLQotVGhpcyBtb2R1bGUgaXMgc3RpbGwgdmVyeSBuZXcgYW5kIGhpZ2hseSBleHBlcmltZW50YWwuIEl0IHNob3VsZCB3b3JrIGF0IGxlYXN0Ci1vbiBMaW51eCBhbmQgV2luZG93cyAoT1MvWCBuZWVkcyBzb21lIGJ1aWxkIGZpeGVzKS4gTGV0IHVzIGtub3cgb2YgYW55IGlzc3VlcwoteW91IGVuY291bnRlciBieSBwb3BwaW5nIGludG8gdGhlIGAjZ3N0cmVhbWVyYCBJUkMgY2hhbm5lbCBvciBieQotW2ZpbGluZyBhIGJ1Z11bZ3N0LWJ1aWxkLWJ1Z10uCi0KLVRoaXMgbW9kdWxlIHdpbGwgcHJvYmFibHkgbm90IGJlIHJlbGVhc2VkIG9yIHBhY2thZ2VkIChkb2VzIG5vdCByZWFsbHkgbWFrZSBzZW5zZSkuCi0KLVtnc3QtYnVpbGQtZ2l0XTogaHR0cHM6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LWJ1aWxkL3RyZWUvCi1bZ3N0LWJ1aWxkLWJ1Z106IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXImY29tcG9uZW50PWdzdC1idWlsZAotW21lc29uLXN1YnByb2plY3RzXTogaHR0cHM6Ly9naXRodWIuY29tL21lc29uYnVpbGQvbWVzb24vd2lraS9TdWJwcm9qZWN0cwotCi0jIyBDb250cmlidXRvcnMKLQotQWFyb24gQm94ZXIsIEFsZWl4IENvbmNoaWxsbyBGbGFxdcOpLCBBbGVzc2FuZHJvIERlY2luYSwgQWxleGFuZHJ1IELEg2x1yJssIEFsZXgKLUFzaGxleSwgQWxleC1QLiBOYXRzaW9zLCBBbGlzdGFpciBCdXh0b24sIEFsbGVuIFpoYW5nLCBBbmRyZWFzIE5hdW1hbm4sIEFuZHJldwotRWlrdW0sIEFuZHkgRGV2YXIsIEFudGhvbnkgRy4gQmFzaWxlLCBBcmplbiBWZWVuaHVpemVuLCBBcm5hdWQgVnJhYywgQXJ0ZW0KLU1hcnR5bm92aWNoLCBBcnVuIFJhZ2hhdmFuLCBBdXLDqWxpZW4gWmFuZWxsaSwgQmFydW4gS3VtYXIgU2luZ2gsIEJlcm5oYXJkCi1NaWxsZXIsIEJyYWQgTGFja2V5LCBCcmFua28gU3ViYXNpYywgQ2FybG9zIEdhcmNpYSBDYW1wb3MsIENhcmxvcyBSYWZhZWwKLUdpYW5pLCBDaHJpc3RvZmZlciBTdGVuZ3JlbiwgRGFpa2kgVWVubywgRGFtaWFuIFppb2JybywgRGFuaWxvIENlc2FyIExlbWVzIGRlCi1QYXVsYSwgRGF2aWQgQnVjaG1hbm4sIERpbWl0cmlvcyBLYXRzYXJvcywgRHVuY2FuIFBhbG1lciwgRWR3YXJkIEhlcnZleSwKLUVtbWFudWVsIFBvaXRpZXIsIEVucmljbyBKb3JucywgRW5yaXF1ZSBPY2HDsWEgR29uesOhbGV6LCBGYWJyaWNlIEJlbGxldCwKLUZsb3JpYW4gWndvY2gsIEZsb3JpbiBBcG9zdG9sLCBGcmFuY2lzY28gVmVsYXpxdWV6LCBGcsOpZMOpcmljIEJlcnRvbHVzLCBGcmVkcmlrCi1Gb3Jud2FsbCwgR2F1cmF2IEd1cHRhLCBHZW9yZ2UgS2lhZ2lhZGFraXMsIEdlb3JnIExpcHBpdHNjaCwgR8O2cmFuIErDtm5zc29uLAotR3JhaGFtIExlZ2dldHQsIEdyZWdvaXJlIEdlbnRpbCwgR3VpbGxhdW1lIERlc21vdHRlcywgR3dhbmcgWW9vbiBId2FuZywgSGFha29uCi1TcG9yc2hlaW0sIEhhaWh1YSBIdSwgSGF2YXJkIEdyYWZmLCBIZWlucmljaCBGaW5rLCBIb29uaGVlIExlZSwgSHl1bmp1biBLbywKLUlhaW4gTGFuZSwgSWFuLCBJYW4gSmFtaXNvbiwgSmFneXVtIEtvbywgSmFrZSBGb3l0aWssIEpha3ViIEFkYW0sIEphbgotQWxleGFuZGVyIFN0ZWZmZW5zIChoZWZ0aWcpLCBKYW4gU2NobWlkdCwgSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzLCBKZXJvbWUKLUxhaGV1cnRlLCBKZXNwZXIgTGFyc2VuLCBKaWUgSmlhbmcsIEppaGFlIFlpLCBKaW1teSBPaG4sIEppbndvbyBBaG4sIEpvYWtpbQotSm9oYW5zc29uLCBKb2FuIFBhdSBCZWx0cmFuLCBKb25hcyBIb2xtYmVyZywgSm9uYXRoYW4gTWF0dGhldywgSm9uYXRoYW4gUm95LAotSm9zZXAgVG9ycmEsIEp1bGllbiBJc29yY2UsIEp1biBKaSwgSsO8cmdlbiBTbG93YWNrLCBKdXN0aW4gS2ltLCBLYXp1bm9yaQotS29iYXlhc2hpLCBLaWVyYW4gQmluZ2hhbSwgS2lwcCBDYW5ub24sIEtvb3AgTWFzdCwgS291aGVpIFN1dG91LCBLc2VuaWlhLCBLeWxlCi1TY2h3YXJ6LCBLeXVuZ3lvbmcgS2ltLCBMaW51cyBTdmVuc3NvbiwgTHVpcyBkZSBCZXRoZW5jb3VydCwgTWFyY2luIEtvbG55LAotTWFyY2luIExld2FuZG93c2tpLCBNYXJpYW5uYSBTbWlkdGggQnVzY2hsZSwgTWFyaW8gU2FuY2hleiBQcmFkYSwgTWFyawotQ29tYmVsbGFjaywgTWFyayBOYXV3ZWxhZXJ0cywgTWFydGluIEtlbGx5LCBNYXRlaiBLbm9wcCwgTWF0aGlldSBEdXBvbmNoZWxsZSwKLU1hdHMgTGluZGVzdGFtLCBNYXR0aGV3IEdydWVua2UsIE1hdHRoZXcgV2F0ZXJzLCBNaWNoYWVsIE9sYnJpY2gsIE1pY2hhbCBMYXpvLAotTWlndWVsIFBhcsOtcyBEw61heiwgTWlraGFpbCBGbHVka292LCBNaW5qYWUgS2ltLCBNb2hhbiBSLCBNdW5leiwgTmljb2xhIE11cmlubywKLU5pY29sYXMgRHVmcmVzbmUsIE5pY29sYXMgSHVldCwgTmlraXRhIEJvYmtvdiwgTmlyYmhlZWsgQ2hhdWhhbiwgT2xpdmllcgotQ3LDqnRlLCBQYW9sbyBQZXR0aW5hdG8sIFBhdHJpY2lhIE11c2NhbHUsIFBhdWxvIE5ldmVzLCBQZW5nIExpdSwgUGV0ZXIKLVNlaWRlcmVyLCBQaGlsaXBwZSBOb3JtYW5kLCBQaGlsaXBwZSBSZW5vbiwgUGhpbGlwcCBaYWJlbCwgUGllcnJlIExhbW90LCBQaW90cgotRHLEhWcsIFByYXNoYW50IEdvdGFybmUsIFJhZmZhZWxlIFJvc3NpLCBSYXkgU3Ryb2RlLCBSZXluYWxkbyBILiBWZXJkZWpvCi1QaW5vY2hldCwgU2FudGlhZ28gQ2Fyb3QtTmVtZXNpbywgU2NvdHQgRCBQaGlsbGlwcywgU2ViYXN0aWFuIERyw7ZnZSwgU2ViYXN0aWFuCi1SYXNtdXNzZW4sIFNlcmdlaSBTYXZlbGlldiwgU2VyZ2V5IEJvcm92a292LCBTZXJnZXkgTWFtb25vdiwgU2VyZ2lvIFRvcnJlcwotU29sZGFkbywgU2V1bmdoYSBZYW5nLCBzZXplcm8sIFNvbmcgQmluZywgU3JlZXJlbmogQmFsYWNoYW5kcmFuLCBTdGVmYW4gU2F1ZXIsCi1TdGVwaGVuLCBTdGV2ZW4gSG92aW5nLCBTdGlhbiBTZWxuZXMsIFRoaWFnbyBTYW50b3MsIFRoaWJhdWx0IFNhdW5pZXIsIFRoaWpzCi1WZXJtZWlyLCBUaG9tYXMgQmx1ZW1lbCwgVGhvbWFzIEpvbmVzLCBUaG9tYXMgS2xhdXNuZXIsIFRob21hcyBTY2hldWVybWFubiwKLVRpbS1QaGlsaXBwIE3DvGxsZXIsIFRpbmctV2VpIExhbiwgVG9tIFNjaG9vbmphbnMsIFVyc3VsYSBNYXBsZWh1cnN0LCBWYW5lc3NhCi1DaGlwaXJyYXMgTmF2YWxvbiwgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsLCBWaW5jZW50IFBlbnF1ZXJjJ2gsIFZpbmVldGggVE0sCi1WaXZpYSBOaWtvbGFpZG91LCBWb290ZWxlIFZlc3RlcmJsb20sIFdhbmcgWGluLXl1ICjnjovmmJXlrocpLCBXaWxsaWFtIE1hbmxleSwKLVdpbSBUYXltYW5zLCBXb25jaHVsIExlZSwgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIsIFhhdmllciBDbGFlc3NlbnMsIHhsYXpvbTAwLAotWWFubiBKb3VhbmluLCBaYWhlZXIgQWJiYXMgTWVyYWxpCi0KLS4uLiBhbmQgbWFueSBvdGhlcnMgd2hvIGhhdmUgY29udHJpYnV0ZWQgYnVnIHJlcG9ydHMsIHRyYW5zbGF0aW9ucywgc2VudAotc3VnZ2VzdGlvbnMgb3IgaGVscGVkIHRlc3RpbmcuCi0KLSMjIEJ1Z3MgZml4ZWQgaW4gMS4xMAotCi1Nb3JlIHRoYW4gWzc1MCBidWdzXVtidWdzLWZpeGVkLWluLTEuMTBdIGhhdmUgYmVlbiBmaXhlZCBkdXJpbmcKLXRoZSBkZXZlbG9wbWVudCBvZiAxLjEwLgotCi1UaGlzIGxpc3QgZG9lcyBub3QgaW5jbHVkZSBpc3N1ZXMgdGhhdCBoYXZlIGJlZW4gY2hlcnJ5LXBpY2tlZCBpbnRvIHRoZQotc3RhYmxlIDEuOCBicmFuY2ggYW5kIGZpeGVkIHRoZXJlIGFzIHdlbGwsIGFsbCBmaXhlcyB0aGF0IGVuZGVkIHVwIGluIHRoZQotMS44IGJyYW5jaCBhcmUgYWxzbyBpbmNsdWRlZCBpbiAxLjEwLgotCi1UaGlzIGxpc3QgYWxzbyBkb2VzIG5vdCBpbmNsdWRlIGlzc3VlcyB0aGF0IGhhdmUgYmVlbiBmaXhlZCB3aXRob3V0IGEgYnVnCi1yZXBvcnQgaW4gYnVnemlsbGEsIHNvIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGZpeGVzIGlzIG11Y2ggaGlnaGVyLgotCi1bYnVncy1maXhlZC1pbi0xLjEwXTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/YnVnX3N0YXR1cz1SRVNPTFZFRCZidWdfc3RhdHVzPVZFUklGSUVEJmNsYXNzaWZpY2F0aW9uPVBsYXRmb3JtJmxpbWl0PTAmbGlzdF9pZD0xNjQwNzQmb3JkZXI9YnVnX2lkJnByb2R1Y3Q9R1N0cmVhbWVyJnF1ZXJ5X2Zvcm1hdD1hZHZhbmNlZCZyZXNvbHV0aW9uPUZJWEVEJnRhcmdldF9taWxlc3RvbmU9MS44LjEmdGFyZ2V0X21pbGVzdG9uZT0xLjguMiZ0YXJnZXRfbWlsZXN0b25lPTEuOC4zJnRhcmdldF9taWxlc3RvbmU9MS44LjQmdGFyZ2V0X21pbGVzdG9uZT0xLjkuMSZ0YXJnZXRfbWlsZXN0b25lPTEuOS4yJnRhcmdldF9taWxlc3RvbmU9MS45LjkwJnRhcmdldF9taWxlc3RvbmU9MS4xMC4wCi0KLSMjIFN0YWJsZSAxLjEwIGJyYW5jaAotCi1BZnRlciB0aGUgMS4xMC4wIHJlbGVhc2UgdGhlcmUgd2lsbCBiZSBzZXZlcmFsIDEuMTAueCBidWctZml4IHJlbGVhc2VzIHdoaWNoCi13aWxsIGNvbnRhaW4gYnVnIGZpeGVzIHdoaWNoIGhhdmUgYmVlbiBkZWVtZWQgc3VpdGFibGUgZm9yIGEgc3RhYmxlIGJyYW5jaCwKLWJ1dCBubyBuZXcgZmVhdHVyZXMgb3IgaW50cnVzaXZlIGNoYW5nZXMgd2lsbCBiZSBhZGRlZCB0byBhIGJ1Zy1maXggcmVsZWFzZQotdXN1YWxseS4gVGhlIDEuMTAueCBidWctZml4IHJlbGVhc2VzIHdpbGwgYmUgbWFkZSBmcm9tIHRoZSBnaXQgMS4xMCBicmFuY2gsCi13aGljaCBpcyBhIHN0YWJsZSBicmFuY2guCi0KLSMjIyAxLjEwLjAKLQotMS4xMC4wIHdhcyByZWxlYXNlZCBvbiAxc3QgTm92ZW1iZXIgMjAxNi4KLQotPGEgbmFtZT0iMS4xMC4xIj48L2E+Ci0KLSMjIyAxLjEwLjEKLQotVGhlIGZpcnN0IDEuMTAgYnVnLWZpeCByZWxlYXNlICgxLjEwLjEpIHdhcyByZWxlYXNlZCBvbiAxNyBOb3ZlbWJlciAyMDE2LgotVGhpcyByZWxlYXNlIG9ubHkgY29udGFpbnMgYnVnZml4ZXMgYW5kIGl0IHNob3VsZCBiZSBzYWZlIHRvIHVwZGF0ZSBmcm9tIDEuMTAueC4KLQotIyMjIyBNYWpvciBidWdmaXhlcyBpbiAxLjEwLjEKLQotIC0gU2VjdXJpdHktcmVsZXZhbnQgYnVnZml4IGluIHRoZSB2bW5jIGRlY29kZXIgKENWRS0yMDE2LTk0NDUsIENWRS0yMDE2LTk0NDYpCi0gLSBWYXJpb3VzIGJ1Z2ZpeGVzIHRvIHBsYXliaW4zL2RlY29kZWJpbjMKLSAtIEZpeCBlcnJvciBhdCB0aGUgZW5kIG9mIHBsYXlpbmcgYW55IFdBViBmaWxlCi0gLSBGaXggdXNhYmlsaXR5IG9mIGFuZHJvaWRtZWRpYSBwbHVnaW4gaWYgdGhlIGNhbWVyYSBvciBzZW5zb3IgQVBJIGlzIG5vdAotICAgYXZhaWxhYmxlLCBidXQgY29kZWNzIGFyZQotIC0gSGFuZGxlIHJlZGlyZWN0aW9ucyBvbiBQTEFZLCBhbmQgbWlzc2luZyBjb250cm9sIGF0dHJpYnV0ZSBpbiB0aGUgUlRTUCBzb3VyY2UKLSAtIFZhcmlvdXMgT3BlbkdMIHJlbGF0ZWQgYnVnZml4ZXMKLSAtIC4uLiBhbmQgbWFueSwgbWFueSBtb3JlIQotCi1Gb3IgYSBmdWxsIGxpc3Qgb2YgYnVnZml4ZXMgc2VlIFtCdWd6aWxsYV1bYnVnbGlzdC0xLjEwLjFdLiBOb3RlIHRoYXQgdGhpcyBpcwotbm90IHRoZSBmdWxsIGxpc3Qgb2YgY2hhbmdlcy4gRm9yIHRoZSBmdWxsIGxpc3Qgb2YgY2hhbmdlcyBwbGVhc2UgcmVmZXIgdG8gdGhlCi1HSVQgbG9ncyBvciBDaGFuZ2VMb2dzIG9mIHRoZSBwYXJ0aWN1bGFyIG1vZHVsZXMuCi0KLVtidWdsaXN0LTEuMTAuMV06IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP2J1Z19zdGF0dXM9UkVTT0xWRUQmYnVnX3N0YXR1cz1WRVJJRklFRCZjbGFzc2lmaWNhdGlvbj1QbGF0Zm9ybSZsaW1pdD0wJmxpc3RfaWQ9MTY4MTcyJm9yZGVyPWJ1Z19pZCZwcm9kdWN0PUdTdHJlYW1lciZxdWVyeV9mb3JtYXQ9YWR2YW5jZWQmcmVzb2x1dGlvbj1GSVhFRCZ0YXJnZXRfbWlsZXN0b25lPTEuMTAuMQotCi08YSBuYW1lPSIxLjEwLjIiPjwvYT4KLQotIyMjIDEuMTAuMgotCi1UaGUgc2Vjb25kIDEuMTAgYnVnLWZpeCByZWxlYXNlICgxLjEwLjIpIHdhcyByZWxlYXNlZCBvbiAyOSBOb3ZlbWJlciAyMDE2LgotVGhpcyByZWxlYXNlIG9ubHkgY29udGFpbnMgYnVnZml4ZXMgYW5kIGl0IHNob3VsZCBiZSBzYWZlIHRvIHVwZGF0ZSBmcm9tIDEuMTAueC4KLQotIyMjIyBNYWpvciBidWdmaXhlcyBpbiAxLjEwLjIKLQotIC0gU2VjdXJpdHktcmVsZXZhbnQgYnVnZml4IGluIHRoZSBGTEkvRkxYL0ZMQyBkZWNvZGVyIChDVkUtMjAxNi05NjM0LAotICAgQ1ZFLTIwMTYtOTYzNSwgQ1ZFLTIwMTYtOTYzNikKLSAtIFZhcmlvdXMgZml4ZXMgZm9yIGNyYXNoZXMsIGFzc2VydGlvbnMgYW5kIG90aGVyIGZhaWx1cmVzIG9uIGZ1enplZCBpbnB1dAotICAgZmlsZXMuIEFtb25nIG90aGVycywgdGhhbmtzIHRvIEhhbm5vIELDtmNrIGZvciB0ZXN0aW5nIGFuZCByZXBvcnRpbmcKLSAgIChDVkUtMjAxNi05ODA3LCBDVkUtMjAxNi05ODA4LCBDVkUtMjAxNi05ODA5LCBDVkUtMjAxNi05ODEwLCBDVkUtMjAxNi05ODExLAotICAgQ1ZFLTIwMTYtOTgxMiwgQ1ZFLTIwMTYtOTgxMykuCi0gLSBTQVZQL1NBVlBGIHByb2ZpbGUgaW4gZ3N0LXJ0c3Atc2VydmVyIHdvcmtzIGZvciBsaXZlIHN0cmVhbXMgYWdhaW4sIGFuZCB0aGUKLSAgIGNvcnJlY3QgTUlLRVkgcG9saWN5IG1lc3NhZ2UgaXMgZ2VuZXJhdGVkCi0gLSBGdXJ0aGVyIE9wZW5HTCByZWxhdGVkIGJ1Z2ZpeGVzCi0gLSBnc3QtbGliYXYgd2FzIHVwZGF0ZWQgdG8gZmZtcGVnIDMuMi4xCi0gLSAuLi4gYW5kIG1hbnksIG1hbnkgbW9yZSEKLQotRm9yIGEgZnVsbCBsaXN0IG9mIGJ1Z2ZpeGVzIHNlZSBbQnVnemlsbGFdW2J1Z2xpc3QtMS4xMC4yXS4gTm90ZSB0aGF0IHRoaXMgaXMKLW5vdCB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMuIEZvciB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgcGxlYXNlIHJlZmVyIHRvIHRoZQotR0lUIGxvZ3Mgb3IgQ2hhbmdlTG9ncyBvZiB0aGUgcGFydGljdWxhciBtb2R1bGVzLgotCi1bYnVnbGlzdC0xLjEwLjJdOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9idWdfc3RhdHVzPVJFU09MVkVEJmJ1Z19zdGF0dXM9VkVSSUZJRUQmY2xhc3NpZmljYXRpb249UGxhdGZvcm0mbGltaXQ9MCZsaXN0X2lkPTE2ODE3MiZvcmRlcj1idWdfaWQmcHJvZHVjdD1HU3RyZWFtZXImcXVlcnlfZm9ybWF0PWFkdmFuY2VkJnJlc29sdXRpb249RklYRUQmdGFyZ2V0X21pbGVzdG9uZT0xLjEwLjIKLQotPGEgbmFtZT0iMS4xMC4zIj48L2E+Ci0KLSMjIyAxLjEwLjMKLQotVGhlIHRoaXJkIDEuMTAgYnVnLWZpeCByZWxlYXNlICgxLjEwLjMpIHdhcyByZWxlYXNlZCBvbiAzMCBKYW51YXJ5IDIwMTcuCi1UaGlzIHJlbGVhc2Ugb25seSBjb250YWlucyBidWdmaXhlcyBhbmQgaXQgc2hvdWxkIGJlIHNhZmUgdG8gdXBkYXRlIGZyb20gMS4xMC54LgotCi0jIyMjIE1ham9yIGJ1Z2ZpeGVzIGluIDEuMTAuMwotCi0gLSBWYXJpb3VzIGZpeGVzIGZvciBjcmFzaGVzLCBhc3NlcnRpb25zLCBkZWFkbG9ja3MgYW5kIG1lbW9yeSBsZWFrcyBvbiBmdXp6ZWQKLSAgIGlucHV0IGZpbGVzIGFuZCBpbiBvdGhlciBzaXR1YXRpb25zIChDVkUtMjAxNi0xMDE5OCwgQ1ZFLTIwMTYtMTAxOTksCi0gICBDVkUtMjAxNy01ODM3LCBDVkUtMjAxNy01ODM4LCBDVkUtMjAxNy01ODM5LCBDVkUtMjAxNy01ODQwLCBDVkUtMjAxNy01ODQxLAotICAgQ1ZFLTIwMTctNTg0MiwgQ1ZFLTIwMTctNTg0MywgQ1ZFLTIwMTctNTg0NCwgQ1ZFLTIwMTctNTg0NSwgQ1ZFLTIwMTctNTg0NikKLSAtIFJlZ3Jlc3Npb24gZml4ZXMgZm9yIHNvdXBodHRwc3JjIHdpdGggcmVkaXJlY3Rpb24gdHJhY2tpbmcgYW5kIHJldHJ5aW5nCi0gLSBSZWdyZXNzaW9uIGZpeCBmb3IgZ3N0LXJ0c3Atc2VydmVyIG5vdCBoYW5kbGluZyBUQ1Atb25seSBtZWRpYXMgYW55bW9yZQotIC0gVmFyaW91cyBvdGhlciBidWdmaXhlcyB0aGUgUlRQL1JUU1AgY29kZWJhc2UKLSAtIEZpeCBmb3IgZ21vZHVsZSBvbiA2NCBiaXQgQW5kcm9pZCwgaXQgd2FzIG5ldmVyIHdvcmtpbmcgYmVmb3JlIHRoZXJlCi0gLSB2cDhlbmMgd29ya3MgYWdhaW4gb24gMzIgYml0IFdpbmRvd3MKLSAtIEZpeGVzIHRvIE9wdXMgUExDIGhhbmRsaW5nIGluIHRoZSBkZWNvZGVyCi0gLSBGaXggZm9yIHN0cmVhbSBjb3JydXB0aW9uIGluIG11bHRpaGFuZGxlc2luayB3aGVuIHJlbW92aW5nIGNsaWVudHMKLSAtIGdzdC1saWJhdiB3YXMgdXBkYXRlZCB0byBmZm1wZWcgMy4yLjIKLSAtIC4uLiBhbmQgbWFueSwgbWFueSBtb3JlIQotCi1Gb3IgYSBmdWxsIGxpc3Qgb2YgYnVnZml4ZXMgc2VlIFtCdWd6aWxsYV1bYnVnbGlzdC0xLjEwLjNdLiBOb3RlIHRoYXQgdGhpcyBpcwotbm90IHRoZSBmdWxsIGxpc3Qgb2YgY2hhbmdlcy4gRm9yIHRoZSBmdWxsIGxpc3Qgb2YgY2hhbmdlcyBwbGVhc2UgcmVmZXIgdG8gdGhlCi1HSVQgbG9ncyBvciBDaGFuZ2VMb2dzIG9mIHRoZSBwYXJ0aWN1bGFyIG1vZHVsZXMuCi0KLVtidWdsaXN0LTEuMTAuM106IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP2J1Z19zdGF0dXM9UkVTT0xWRUQmYnVnX3N0YXR1cz1WRVJJRklFRCZjbGFzc2lmaWNhdGlvbj1QbGF0Zm9ybSZsaW1pdD0wJmxpc3RfaWQ9MTg3MDU0Jm9yZGVyPWJ1Z19pZCZwcm9kdWN0PUdTdHJlYW1lciZxdWVyeV9mb3JtYXQ9YWR2YW5jZWQmcmVzb2x1dGlvbj1GSVhFRCZ0YXJnZXRfbWlsZXN0b25lPTEuMTAuMwotCi08YSBuYW1lPSIxLjEwLjQiPjwvYT4KLQotIyMjIDEuMTAuNAotCi1UaGUgdGhpcmQgMS4xMCBidWctZml4IHJlbGVhc2UgKDEuMTAuNCkgd2FzIHJlbGVhc2VkIG9uIDIzIEZlYnJ1YXJ5IDIwMTcuCi1UaGlzIHJlbGVhc2Ugb25seSBjb250YWlucyBidWdmaXhlcyBhbmQgaXQgc2hvdWxkIGJlIHNhZmUgdG8gdXBkYXRlIGZyb20gMS4xMC54LgotCi0jIyMjIE1ham9yIGJ1Z2ZpeGVzIGluIDEuMTAuNAotCi0gLSBWYXJpb3VzIGZpeGVzIGZvciBjcmFzaGVzLCBhc3NlcnRpb25zLCBkZWFkbG9ja3MgYW5kIG1lbW9yeSBsZWFrcyBvbiBmdXp6ZWQKLSAgIGlucHV0IGZpbGVzIGFuZCBpbiBvdGhlciBzaXR1YXRpb25zIChDVkUtMjAxNy01ODQ3LCBDVkUtMjAxNy01ODQ4KQotIC0gTW9yZSByZWdyZXNzaW9uIGZpeGVzIGZvciBzb3VwaHR0cHNyYyByZWRpcmVjdGlvbiB0cmFja2luZwotIC0gUmVncmVzc2lvbiBmaXggZm9yIGdtb2R1bGUgb24gMzIgYml0IEFuZHJvaWQsIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGFzIHBhcnQKLSAgIG9mIHRoZSA2NCBiaXQgQW5kcm9pZCBmaXggaW4gMS4xMC4zIGFuZCBicm9rZSB0aGUgYW5kcm9pZG1lZGlhIHBsdWdpbgotIC0gVmFyaW91cyBidWdmaXhlcyBmb3IgcmVncmVzc2lvbnMgYW5kIG90aGVyIHByb2JsZW1zIGluIHRoZSBWNEwyIHBsdWdpbgotIC0gRml4IGZvciA1LjEsIDYuMSBhbmQgNy4xIGNoYW5uZWwgbGF5b3V0cyBmb3IgVm9yYmlzCi0gLSBGaXhlcyBmb3IgdGltZXN0YW1wIGdlbmVyYXRpb24gb2YgQW5kcm9pZCB2aWRlbyBlbmNvZGVyIGVsZW1lbnQKLSAtIGdzdC1saWJhdiB3YXMgdXBkYXRlZCB0byBmZm1wZWcgMy4yLjQsIGZpeGluZyBhIGNvdXBsZSBvZiBDVkVzCi0gLSAuLi4gYW5kIG1hbnksIG1hbnkgbW9yZSEKLQotRm9yIGEgZnVsbCBsaXN0IG9mIGJ1Z2ZpeGVzIHNlZSBbQnVnemlsbGFdW2J1Z2xpc3QtMS4xMC40XS4gTm90ZSB0aGF0IHRoaXMgaXMKLW5vdCB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMuIEZvciB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgcGxlYXNlIHJlZmVyIHRvIHRoZQotR0lUIGxvZ3Mgb3IgQ2hhbmdlTG9ncyBvZiB0aGUgcGFydGljdWxhciBtb2R1bGVzLgotCi1bYnVnbGlzdC0xLjEwLjRdOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9idWdfc3RhdHVzPVJFU09MVkVEJmJ1Z19zdGF0dXM9VkVSSUZJRUQmY2xhc3NpZmljYXRpb249UGxhdGZvcm0mbGltaXQ9MCZsaXN0X2lkPTE4NzA1NCZvcmRlcj1idWdfaWQmcHJvZHVjdD1HU3RyZWFtZXImcXVlcnlfZm9ybWF0PWFkdmFuY2VkJnJlc29sdXRpb249RklYRUQmdGFyZ2V0X21pbGVzdG9uZT0xLjEwLjQKLQotIyMgS25vd24gSXNzdWVzCi0KLS0gaU9TIGJ1aWxkcyB3aXRoIGlPUyA2IFNESyBhbmQgb2xkIEMrKyBTVEwuIFlvdSBuZWVkIHRvIHNlbGVjdCBpT1MgNiBpbnN0ZWFkCi0gIG9mIDcgb3IgOCBpbiB5b3VyIHByb2plY3RzIHNldHRpbmdzIHRvIGJlIGFibGUgdG8gbGluayBhcHBsaWNhdGlvbnMuCi0gIFtCdWcgIzc2NjM2Nl0oaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjM2NikKLS0gQ29kZSBzaWduaW5nIGZvciBBcHBsZSBwbGF0Zm9ybXMgaGFzIHNvbWUgcHJvYmxlbXMgY3VycmVudGx5LCByZXF1aXJpbmcKLSAgbWFudWFsIHdvcmsgdG8gZ2V0IHlvdXIgYXBwbGljYXRpb24gc2lnbmVkLiBbQnVnICM3NzE4NjBdKGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NzE4NjApCi0tIEJ1aWxkaW5nIGFwcGxpY2F0aW9ucyB3aXRoIEFuZHJvaWQgTkRLIHIxMyBvbiBXaW5kb3dzIGRvZXMgbm90IHdvcmsuIE90aGVyCi0gIHBsYXRmb3JtcyBhbmQgZWFybGllci9sYXRlciB2ZXJzaW9ucyBvZiB0aGUgTkRLIGFyZSBub3QgYWZmZWN0ZWQuCi0gIFtCdWcgIzc3Mjg0Ml0oaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc3Mjg0MikKLQotIyMgU2NoZWR1bGUgZm9yIDEuMTIKLQotT3VyIG5leHQgbWFqb3IgZmVhdHVyZSByZWxlYXNlIHdpbGwgYmUgMS4xMiwgYW5kIDEuMTEgd2lsbCBiZSB0aGUgdW5zdGFibGUKLWRldmVsb3BtZW50IHZlcnNpb24gbGVhZGluZyB1cCB0byB0aGUgc3RhYmxlIDEuMTIgcmVsZWFzZS4gVGhlIGRldmVsb3BtZW50Ci1vZiAxLjExLzEuMTIgd2lsbCBoYXBwZW4gaW4gdGhlIGdpdCBtYXN0ZXIgYnJhbmNoLgotCi1UaGUgcGxhbiBmb3IgdGhlIDEuMTIgZGV2ZWxvcG1lbnQgY3ljbGUgaXMgeWV0IHRvIGJlIGNvbmZpcm1lZCwgYnV0IGl0IGlzCi1leHBlY3RlZCB0aGF0IGZlYXR1cmUgZnJlZXplIHdpbGwgYmUgYXJvdW5kIGVhcmx5L21pZC1GZWJydWFyeSwKLWZvbGxvd2VkIGJ5IHNldmVyYWwgMS4xMSBwcmUtcmVsZWFzZXMgYW5kIHRoZSBuZXcgMS4xMiBzdGFibGUgcmVsZWFzZQotaW4gQXByaWwuCi0KLTEuMTIgd2lsbCBiZSBiYWNrd2FyZHMtY29tcGF0aWJsZSB0byB0aGUgc3RhYmxlIDEuMTAsIDEuOCwgMS42LCAxLjQsIDEuMiBhbmQKLTEuMCByZWxlYXNlIHNlcmllcy4KLQotLSAtIC0KLQotKlRoZXNlIHJlbGVhc2Ugbm90ZXMgaGF2ZSBiZWVuIHByZXBhcmVkIGJ5IE9saXZpZXIgQ3LDqnRlLCBTZWJhc3RpYW4gRHLDtmdlLAotTmljb2xhcyBEdWZyZXNuZSwgRWR3YXJkIEhlcnZleSwgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsLCBUaW0tUGhpbGlwcAotTcO8bGxlciwgUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCwgQXJ1biBSYWdoYXZhbiwgVGhpYmF1bHQgU2F1bmllciwKLUphbiBTY2htaWR0LCBXaW0gVGF5bWFucywgTWF0dGhldyBXYXRlcnMqCi0KLSpMaWNlbnNlOiBbQ0MgQlktU0EgNC4wXShodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvKSoKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhlMmM5Zi4uMDAwMDAwMAotLS0gYS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotR1N0cmVhbWVyIDEuOS54IGRldmVsb3BtZW50IHNlcmllcwotCi1XSEFUIElUIElTCi0tLS0tLS0tLS0tCi0KLVRoaXMgaXMgR1N0cmVhbWVyLCBhIGZyYW1ld29yayBmb3Igc3RyZWFtaW5nIG1lZGlhLgotCi1XSEVSRSBUTyBTVEFSVAotLS0tLS0tLS0tLS0tLS0KLQotV2UgaGF2ZSBhIHdlYnNpdGUgYXQKLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwotCi1Zb3Ugc2hvdWxkIHN0YXJ0IGJ5IGdvaW5nIHRocm91Z2ggb3VyIEZBUSBhdAotaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZmFxL2h0bWwvCi0KLVRoZXJlIGlzIG1vcmUgZG9jdW1lbnRhdGlvbjsgZ28gdG8KLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RvY3VtZW50YXRpb24KLQotWW91IGNhbiBzdWJzY3JpYmUgdG8gb3VyIG1haWxpbmcgbGlzdHM7IHNlZSB0aGUgd2Vic2l0ZSBmb3IgZGV0YWlscy4KLQotV2UgdHJhY2sgYnVncyBpbiBHTk9NRSdzIGJ1Z3ppbGxhOyBzZWUgdGhlIHdlYnNpdGUgZm9yIGRldGFpbHMuCi0KLVlvdSBjYW4gam9pbiB1cyBvbiBJUkMgLSAjZ3N0cmVhbWVyIG9uIGlyYy5mcmVlbm9kZS5vcmcKLQotR1N0cmVhbWVyIDEuMCBzZXJpZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVN0YXJyaW5nCi0KLSAgR1NUUkVBTUVSCi0KLVRoZSBjb3JlIGFyb3VuZCB3aGljaCBhbGwgb3RoZXIgbW9kdWxlcyByZXZvbHZlLiAgQmFzZSBmdW5jdGlvbmFsaXR5IGFuZAotbGlicmFyaWVzLCBzb21lIGVzc2VudGlhbCBlbGVtZW50cywgZG9jdW1lbnRhdGlvbiwgYW5kIHRlc3RpbmcuCi0KLSAgQkFTRQotCi1BIHdlbGwtZ3Jvb21lZCBhbmQgd2VsbC1tYWludGFpbmVkIGNvbGxlY3Rpb24gb2YgR1N0cmVhbWVyIHBsdWctaW5zIGFuZAotZWxlbWVudHMsIHNwYW5uaW5nIHRoZSByYW5nZSBvZiBwb3NzaWJsZSB0eXBlcyBvZiBlbGVtZW50cyBvbmUgd291bGQgd2FudAotdG8gd3JpdGUgZm9yIEdTdHJlYW1lci4gIAotCi1BbmQgaW50cm9kdWNpbmcsIGZvciB0aGUgZmlyc3QgdGltZSBldmVyLCBvbiB0aGUgZGV2ZWxvcG1lbnQgc2NyZWVuIC4uLgotCi0gIFRIRSBHT09ECi0KLSAtLS0gIlN1Y2ggaW5ncmF0aXR1ZGUuICBBZnRlciBhbGwgdGhlIHRpbWVzIEkndmUgc2F2ZWQgeW91ciBsaWZlLiIKLQotQSBjb2xsZWN0aW9uIG9mIHBsdWctaW5zIHlvdSdkIHdhbnQgdG8gaGF2ZSByaWdodCBuZXh0IHRvIHlvdSBvbiB0aGUKLWJhdHRsZWZpZWxkLiAgU2hvb3Rpbmcgc2hhcnAgYW5kIG1ha2luZyBubyBtaXN0YWtlcywgdGhlc2UgcGx1Zy1pbnMgaGF2ZSBpdAotYWxsOiBnb29kIGxvb2tzLCBnb29kIGNvZGUsIGFuZCBnb29kIGxpY2Vuc2luZy4gIERvY3VtZW50ZWQgYW5kIGRyZXNzZWQgdXAKLWluIHRlc3RzLiAgSWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgcm9sZSBtb2RlbCB0byBiYXNlIHlvdXIgb3duIHBsdWctaW4gb24sCi1oZXJlIGl0IGlzLgotCi1JZiB5b3UgZmluZCBhIHBsb3QgaG9sZSBvciBhIGJhZGx5IGxpcC1zeW5jZWQgbGluZSBvZiBjb2RlIGluIHRoZW0sCi1sZXQgdXMga25vdyAtIGl0IGlzIGEgbWF0dGVyIG9mIGhvbm91ciBmb3IgdXMgdG8gZW5zdXJlIEJsb25kaWUgZG9lc24ndCBsb29rCi1saWtlIGhlJ3MgYmVlbiB3YWxraW5nIDEwMCBtaWxlcyB0aHJvdWdoIHRoZSBkZXNlcnQgd2l0aG91dCB3YXRlci4KLQotICBUSEUgVUdMWQotCi0gIC0tLSAiV2hlbiB5b3UgaGF2ZSB0byBzaG9vdCwgc2hvb3QuICBEb24ndCB0YWxrLiIKLQotVGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhlIHdvcmxkIG5lZWRzIGEgY29sb3IgYmV0d2VlbiBibGFjayBhbmQgd2hpdGUuCi1RdWFsaXR5IGNvZGUgdG8gbWF0Y2ggdGhlIGdvb2QncywgYnV0IHR3by10aW1pbmcsIGJhY2tzdGFiYmluZyBhbmQgcmVhZHkgdG8KLXNlbGwgeW91ciBmcmVlZG9tIGRvd24gdGhlIHJpdmVyLiAgVGhlc2UgcGx1Zy1pbnMgbWlnaHQgaGF2ZSBhIHBhdGVudCBub29zZQotYXJvdW5kIHRoZWlyIG5lY2ssIG9yIGEgbG9jay11cCBsaWNlbnNlLCBvciBhbnkgb3RoZXIgcHJvYmxlbSB0aGF0IG1ha2VzIHlvdQotdGhpbmsgdHdpY2UgYWJvdXQgc2hpcHBpbmcgdGhlbS4KLQotV2UgZG9uJ3QgY2FsbCB0aGVtIHVnbHkgYmVjYXVzZSB3ZSBsaWtlIHRoZW0gbGVzcy4gIERvZXMgYSBtb3RoZXIgbG92ZSBoZXIKLXNvbiBsZXNzIGJlY2F1c2UgaGUncyBub3QgYXMgcHJldHR5IGFzIHRoZSBvdGhlciBvbmVzID8gTm8gIC0gc2hlIGNvbW1lbmRzCi1oaW0gb24gaGlzIGdyZWF0IHBlcnNvbmFsaXR5LiAgVGhlc2UgcGx1Zy1pbnMgYXJlIHRoZSBsaWZlIG9mIHRoZSBwYXJ0eS4KLUFuZCB3ZSdsbCBzdGlsbCBzdGVwIGluIGFuZCBzZXQgdGhlbSBzdHJhaWdodCBpZiB5b3UgcmVwb3J0IGFueSB1bmFjY2VwdGFibGUKLWJlaGF2aW91ciAtIGJlY2F1c2UgdGhlcmUgYXJlIHR3byBraW5kcyBvZiBwZW9wbGUgaW4gdGhlIHdvcmxkLCBteSBmcmllbmQ6Ci10aG9zZSB3aXRoIGEgcm9wZSBhcm91bmQgdGhlaXIgbmVjayBhbmQgdGhlIHBlb3BsZSB3aG8gZG8gdGhlIGN1dHRpbmcuCi0KLSAgVEhFIEJBRAotCi0gIC0tLSAiVGhhdCBhbiBhY2N1c2F0aW9uPyIKLQotTm8gcGVyZmVjdGx5IGdyb29tZWQgbW91c3RhY2hlIG9yIGFueSBhbW91bnQgb2YgZmluZSBjbG90aGluZyBpcyBnb2luZyB0bwotY292ZXIgdXAgdGhlIHRydXRoIC0gdGhlc2UgcGx1Zy1pbnMgYXJlIEJhZCB3aXRoIGEgY2FwaXRhbCBCLiAKLVRoZXkgbG9vayBmaW5lIG9uIHRoZSBvdXRzaWRlLCBhbmQgbWlnaHQgZXZlbiBhcHBlYXIgdG8gZ2V0IHRoZSBqb2IgZG9uZSwgYnV0Ci1hdCB0aGUgZW5kIG9mIHRoZSBkYXkgdGhleSdyZSBhIGJsYWNrIHNoZWVwLiBXaXRob3V0IGEgZ29sZGVuLWhhaXJlZCBhbmdlbAotdG8gd2F0Y2ggb3ZlciB0aGVtLCB0aGV5J2xsIHByb2JhYmx5IGxhbmQgaW4gYW4gdW5tYXJrZWQgZ3JhdmUgYXQgdGhlIGZpbmFsCi1zaG93ZG93bi4KLQotRG9uJ3QgYnVnIHVzIGFib3V0IHRoZWlyIHF1YWxpdHkgLSBleGVyY2lzZSB5b3VyIEZyZWUgU29mdHdhcmUgcmlnaHRzLAotcGF0Y2ggdXAgdGhlIG9mZmVuZGVyIGFuZCBzZW5kIHVzIHRoZSBwYXRjaCBvbiB0aGUgZmFzdGVzdCBzdGVlZCB5b3UgY2FuCi1zdGVhbCBmcm9tIHRoZSBDb25mZWRlcmF0ZXMuIEJlY2F1c2UgeW91IHNlZSwgaW4gdGhpcyB3b3JsZCwgdGhlcmUncyB0d28KLWtpbmRzIG9mIHBlb3BsZSwgbXkgZnJpZW5kOiB0aG9zZSB3aXRoIGxvYWRlZCBndW5zIGFuZCB0aG9zZSB3aG8gZGlnLgotWW91IGRpZy4KLQotVGhlIExvd2Rvd24KLS0tLS0tLS0tLS0tCi0KLSAgLS0tICJJJ3ZlIG5ldmVyIHNlZW4gc28gbWFueSBwbHVnLWlucyB3YXN0ZWQgc28gYmFkbHkuIgotCi1HU3RyZWFtZXIgUGx1Zy1pbnMgaGFzIGdyb3duIHNvIGJpZyB0aGF0IGl0J3MgaGFyZCB0byBzZXBhcmF0ZSB0aGUgd2hlYXQgZnJvbQotdGhlIGNoYWZmLiAgQWxzbywgZGlzdHJpYnV0b3JzIGhhdmUgYnJvdWdodCB1cCBpc3N1ZXMgYWJvdXQgdGhlIGxlZ2FsIHN0YXR1cwotb2Ygc29tZSBvZiB0aGUgcGx1Zy1pbnMgd2Ugc2hpcC4gIFRvIHJlbWVkeSB0aGlzLCB3ZSd2ZSBkaXZpZGVkIHRoZSBwcmV2aW91cwotc2V0IG9mIGF2YWlsYWJsZSBwbHVnLWlucyBpbnRvIGZvdXIgbW9kdWxlczoKLQotLSBnc3QtcGx1Z2lucy1iYXNlOiBhIHNtYWxsIGFuZCBmaXhlZCBzZXQgb2YgcGx1Zy1pbnMsIGNvdmVyaW5nIGEgd2lkZSByYW5nZQotICBvZiBwb3NzaWJsZSB0eXBlcyBvZiBlbGVtZW50czsgdGhlc2UgYXJlIGNvbnRpbnVvdXNseSBrZXB0IHVwLXRvLWRhdGUKLSAgd2l0aCBhbnkgY29yZSBjaGFuZ2VzIGR1cmluZyB0aGUgZGV2ZWxvcG1lbnQgc2VyaWVzLgotCi0gIC0gV2UgYmVsaWV2ZSBkaXN0cmlidXRvcnMgY2FuIHNhZmVseSBzaGlwIHRoZXNlIHBsdWctaW5zLgotICAtIFBlb3BsZSB3cml0aW5nIGVsZW1lbnRzIHNob3VsZCBiYXNlIHRoZWlyIGNvZGUgb24gdGhlc2UgZWxlbWVudHMuCi0gIC0gVGhlc2UgZWxlbWVudHMgY29tZSB3aXRoIGV4YW1wbGVzLCBkb2N1bWVudGF0aW9uLCBhbmQgcmVncmVzc2lvbiB0ZXN0cy4KLQotLSBnc3QtcGx1Z2lucy1nb29kOiBhIHNldCBvZiBwbHVnLWlucyB0aGF0IHdlIGNvbnNpZGVyIHRvIGhhdmUgZ29vZCBxdWFsaXR5Ci0gIGNvZGUsIGNvcnJlY3QgZnVuY3Rpb25hbGl0eSwgb3VyIHByZWZlcnJlZCBsaWNlbnNlIChMR1BMIGZvciB0aGUgcGx1Zy1pbgotICBjb2RlLCBMR1BMIG9yIExHUEwtY29tcGF0aWJsZSBmb3IgdGhlIHN1cHBvcnRpbmcgbGlicmFyeSkuCi0KLSAgLSBXZSBiZWxpZXZlIGRpc3RyaWJ1dG9ycyBjYW4gc2FmZWx5IHNoaXAgdGhlc2UgcGx1Zy1pbnMuCi0gIC0gUGVvcGxlIHdyaXRpbmcgZWxlbWVudHMgc2hvdWxkIGJhc2UgdGhlaXIgY29kZSBvbiB0aGVzZSBlbGVtZW50cy4KLSAKLS0gZ3N0LXBsdWdpbnMtdWdseTogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCBoYXZlIGdvb2QgcXVhbGl0eSBhbmQgY29ycmVjdAotICBmdW5jdGlvbmFsaXR5LCBidXQgZGlzdHJpYnV0aW5nIHRoZW0gbWlnaHQgcG9zZSBwcm9ibGVtcy4gIFRoZSBsaWNlbnNlCi0gIG9uIGVpdGhlciB0aGUgcGx1Zy1pbnMgb3IgdGhlIHN1cHBvcnRpbmcgbGlicmFyaWVzIG1pZ2h0IG5vdCBiZSBob3cgd2UnZAotICBsaWtlLiBUaGUgY29kZSBtaWdodCBiZSB3aWRlbHkga25vd24gdG8gcHJlc2VudCBwYXRlbnQgcHJvYmxlbXMuCi0KLSAgLSBEaXN0cmlidXRvcnMgc2hvdWxkIGNoZWNrIGlmIHRoZXkgd2FudC9jYW4gc2hpcCB0aGVzZSBwbHVnLWlucy4KLSAgLSBQZW9wbGUgd3JpdGluZyBlbGVtZW50cyBzaG91bGQgYmFzZSB0aGVpciBjb2RlIG9uIHRoZXNlIGVsZW1lbnRzLgotCi0tIGdzdC1wbHVnaW5zLWJhZDogYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCBhcmVuJ3QgdXAgdG8gcGFyIGNvbXBhcmVkIHRvIHRoZQotICByZXN0LiAgVGhleSBtaWdodCBiZSBjbG9zZSB0byBiZWluZyBnb29kIHF1YWxpdHksIGJ1dCB0aGV5J3JlIG1pc3NpbmcKLSAgc29tZXRoaW5nIC0gYmUgaXQgYSBnb29kIGNvZGUgcmV2aWV3LCBzb21lIGRvY3VtZW50YXRpb24sIGEgc2V0IG9mIHRlc3RzLAotICBhIHJlYWwgbGl2ZSBtYWludGFpbmVyLCBvciBzb21lIGFjdHVhbCB3aWRlIHVzZS4KLSAgSWYgdGhlIGJsYW5rcyBhcmUgZmlsbGVkIGluIHRoZXkgbWlnaHQgYmUgdXBncmFkZWQgdG8gYmVjb21lIHBhcnQgb2YKLSAgZWl0aGVyIGdzdC1wbHVnaW5zLWdvb2Qgb3IgZ3N0LXBsdWdpbnMtdWdseSwgZGVwZW5kaW5nIG9uIHRoZSBvdGhlciBmYWN0b3JzLgotCi0gIC0gSWYgdGhlIHBsdWctaW5zIGJyZWFrLCB5b3UgY2FuJ3QgY29tcGxhaW4gLSBpbnN0ZWFkLCB5b3UgY2FuIGZpeCB0aGUKLSAgICBwcm9ibGVtIGFuZCBzZW5kIHVzIGEgcGF0Y2gsIG9yIGJyaWJlIHNvbWVvbmUgaW50byBmaXhpbmcgdGhlbSBmb3IgeW91LgotICAtIE5ldyBjb250cmlidXRvcnMgY2FuIHN0YXJ0IGhlcmUgZm9yIHRoaW5ncyB0byB3b3JrIG9uLgotCi1QTEFURk9STVMKLS0tLS0tLS0tLQotCi0tIExpbnV4IGlzIG9mIGNvdXJzZSBmdWxseSBzdXBwb3J0ZWQKLS0gRnJlZUJTRCBpcyByZXBvcnRlZCB0byB3b3JrOyBvdGhlciBCU0RzIHNob3VsZCB3b3JrIHRvbwotLSBTb2xhcmlzIGlzIHJlcG9ydGVkIHRvIHdvcms7IGEgc3BlY2lmaWMgc3VuYXVkaW9zaW5rIHBsdWdpbiBoYXMgYmVlbiB3cml0dGVuCi0tIE1hY09TWCB3b3JrcywgYmluYXJ5IDEueCBwYWNrYWdlcyBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIGNlcmJlcm8gYnVpbGQgdG9vbAotLSBXaW5kb3dzIHdvcmtzOyBiaW5hcnkgMS54IHBhY2thZ2VzIGNhbiBiZSBidWlsdCB1c2luZyB0aGUgY2VyYmVybyBidWlsZCB0b29sCi0gIC0gTVN5cy9NaW5HVyBidWlsZHMKLSAgLSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBidWlsZHMgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlIG9yIHN1cHBvcnRlZAotLSBBbmRyb2lkIHdvcmtzLCBiaW5hcnkgMS54IHBhY2thZ2VzIGNhbiBiZSBidWlsdCB1c2luZyB0aGUgY2VyYmVybyBidWlsZCB0b29sCi0tIGlPUyB3b3JrcwotCi1JTlNUQUxMSU5HIEZST00gUEFDS0FHRVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Zb3Ugc2hvdWxkIGFsd2F5cyBwcmVmZXIgaW5zdGFsbGluZyBmcm9tIHBhY2thZ2VzIGZpcnN0LiAgR1N0cmVhbWVyIGlzCi13ZWxsLW1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyBGZWRvcmEsIERlYmlhbiwKLVVidW50dSwgTWFuZHJha2UsIEdlbnRvbywgLi4uCi0KLU9ubHkgaW4gY2FzZXMgd2hlcmUgeW91OgotLSB3YW50IHRvIGhhY2sgb24gR1N0cmVhbWVyCi0tIHdhbnQgdG8gdmVyaWZ5IHRoYXQgYSBidWcgaGFzIGJlZW4gZml4ZWQKLS0gZG8gbm90IGhhdmUgYSBzYW5lIGRpc3RyaWJ1dGlvbgotc2hvdWxkIHlvdSBjaG9vc2UgdG8gYnVpbGQgZnJvbSBzb3VyY2UgdGFyYmFsbHMgb3IgZ2l0LgotCi1GaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhcmlvdXMgcGFja2FnZXMgYXQKLWh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLwotCi1DT01QSUxJTkcgRlJPTSBTT1VSQ0UgVEFSQkFMTFMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIGFnYWluLCBtYWtlIHN1cmUgdGhhdCB5b3UgcmVhbGx5IG5lZWQgdG8gaW5zdGFsbCBmcm9tIHNvdXJjZSAhCi0gIElmIEdTdHJlYW1lciBpcyBvbmUgb2YgeW91ciBmaXJzdCBwcm9qZWN0cyBldmVyIHRoYXQgeW91IGJ1aWxkIGZyb20gc291cmNlLAotICBjb25zaWRlciB0YWtpbmcgb24gYW4gZWFzaWVyIHByb2plY3QuCi0KLS0gY2hlY2sgb3V0cHV0IG9mIC4vY29uZmlndXJlIC0taGVscCB0byBzZWUgaWYgYW55IG9wdGlvbnMgYXBwbHkgdG8geW91Ci0tIHJ1bgotICAuL2NvbmZpZ3VyZQotICBtYWtlCi0KLSAgdG8gYnVpbGQgR1N0cmVhbWVyLgotLSBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIGl0IChub3QgcmVxdWlyZWQsIGJ1dCB3aGF0IHlvdSB1c3VhbGx5IHdhbnQgdG8gZG8pLCBydW4KLSAgbWFrZSBpbnN0YWxsCi0KLS0gdHJ5IG91dCBhIHNpbXBsZSB0ZXN0OgotICBnc3QtbGF1bmNoIC12IGZha2VzcmMgbnVtX2J1ZmZlcnM9NSAhIGZha2VzaW5rCi0gIChJZiB5b3UgZGlkbid0IGluc3RhbGwgR1N0cmVhbWVyLCBwcmVmaXggZ3N0LWxhdW5jaCB3aXRoIHRvb2xzLykKLQotICBJZiBpdCBvdXRwdXRzIGEgYnVuY2ggb2YgbWVzc2FnZXMgZnJvbSBmYWtlc3JjIGFuZCBmYWtlc2luaywgZXZlcnl0aGluZyBpcwotICBvay4KLQotICBJZiBpdCBkaWQgbm90IHdvcmssIGtlZXAgaW4gbWluZCB0aGF0IHlvdSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGUKLSAgUEFUSCBhbmQvb3IgTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBtYWtlIHRoZSBzeXN0ZW0KLSAgZmluZCBHU3RyZWFtZXIgaW4gdGhlIHByZWZpeCB3aGVyZSB5b3UgaW5zdGFsbGVkIChieSBkZWZhdWx0IHRoYXQgaXMgL3Vzci9sb2NhbCkuCi0KLS0gQWZ0ZXIgdGhpcywgeW91J3JlIHJlYWR5IHRvIGluc3RhbGwgZ3N0LXBsdWdpbnMsIHdoaWNoIHdpbGwgcHJvdmlkZSB0aGUKLSAgZnVuY3Rpb25hbGl0eSB5b3UncmUgcHJvYmFibHkgbG9va2luZyBmb3IgYnkgbm93LCBzbyBnbyBvbiBhbmQgcmVhZAotICB0aGF0IFJFQURNRS4KLQotQ09NUElMSU5HIEZST00gR0lUCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlbiBidWlsZGluZyBmcm9tIGdpdCBzb3VyY2VzLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1biBhdXRvZ2VuLnNoIHRvIGdlbmVyYXRlCi10aGUgYnVpbGQgc3lzdGVtIGZpbGVzLgotCi1Zb3Ugd2lsbCBuZWVkIGEgc2V0IG9mIGFkZGl0aW9uYWwgdG9vbHMgdHlwaWNhbCBmb3IgYnVpbGRpbmcgZnJvbSBnaXQsCi1pbmNsdWRpbmc6Ci0tIGF1dG9jb25mCi0tIGF1dG9tYWtlCi0tIGxpYnRvb2wKLQotYXV0b2dlbi5zaCB3aWxsIGNoZWNrIGZvciByZWNlbnQgZW5vdWdoIHZlcnNpb25zIGFuZCBjb21wbGFpbiBpZiB5b3UgZG9uJ3QgaGF2ZQotdGhlbS4gIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHNwZWNpZmljIHZlcnNpb25zIG9mIGF1dG9tYWtlIGFuZCBhdXRvY29uZiB3aXRoCi0tLXdpdGgtYXV0b21ha2UgYW5kIC0td2l0aC1hdXRvY29uZgotCi1DaGVjayBhdXRvZ2VuLnNoIG9wdGlvbnMgYnkgcnVubmluZyBhdXRvZ2VuLnNoIC0taGVscAotCi1hdXRvZ2VuLnNoIGNhbiBwYXNzIG9uIGFyZ3VtZW50cyB0byBjb25maWd1cmUKLQotV2hlbiB5b3UgaGF2ZSBkb25lIHRoaXMgb25jZSwgeW91IGNhbiB1c2UgYXV0b3JlZ2VuLnNoIHRvIHJlLWF1dG9nZW4gd2l0aAotdGhlIGxhc3QgcGFzc2VkIG9wdGlvbnMgYXMgYSBoYW5keSBzaG9ydGN1dC4gIFVzZSBpdC4KLQotQWZ0ZXIgdGhlIGF1dG9nZW4uc2ggc3RhZ2UsIHlvdSBjYW4gZm9sbG93IHRoZSBkaXJlY3Rpb25zIGxpc3RlZCBpbgotIkNPTVBJTElORyBGUk9NIFNPVVJDRSIKLQotWW91IGNhbiBhbHNvIHJ1biB5b3VyIHdob2xlIGdpdCBzdGFjayB1bmluc3RhbGxlZCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LAotc28gdGhhdCB5b3UgY2FuIHF1aWNrbHkgdGVzdCBjaGFuZ2VzIHdpdGhvdXQgYWZmZWN0aW5nIHlvdXIgc3lzdGVtIHNldHVwIG9yCi1pbnRlcmZlcmluZyB3aXRoIEdTdHJlYW1lciBpbnN0YWxsZWQgZnJvbSBwYWNrYWdlcy4gIE1hbnkgR1N0cmVhbWVyIGRldmVsb3BlcnMKLXVzZSBhbiB1bmluc3RhbGxlZCBzZXR1cCBmb3IgdGhlaXIgd29yay4KLQotVGhlcmUgaXMgYSAnY3JlYXRlLXVuaW5zdGFsbGVkLXNldHVwLnNoJyBzY3JpcHQgaW4KLQotICBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdHJlYW1lci90cmVlL3NjcmlwdHMvCi0KLXRvIGVhc2lseSBjcmVhdGUgYW4gdW5pbnN0YWxsZWQgc2V0dXAgZnJvbSBzY3JhdGNoLgotCi0KLVBMVUctSU4gREVQRU5ERU5DSUVTIEFORCBMSUNFTlNFUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUdTdHJlYW1lciBpcyBkZXZlbG9wZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMR1BMIChzZWUgTElDRU5TRSBmaWxlIGZvcgotZGV0YWlscykuIFNvbWUgb2Ygb3VyIHBsdWctaW5zIGhvd2V2ZXIgcmVseSBvbiBsaWJyYXJpZXMgd2hpY2ggYXJlIGF2YWlsYWJsZQotdW5kZXIgb3RoZXIgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgYXJlIGRpc3RyaWJ1dGluZyBhbiBhcHBsaWNhdGlvbgotd2hpY2ggaGFzIGEgbm9uLUdQTCBjb21wYXRpYmxlIGxpY2Vuc2UgKGZvciBpbnN0YW5jZSBhIGNsb3NlZC1zb3VyY2UKLWFwcGxpY2F0aW9uKSB3aXRoIEdTdHJlYW1lciwgeW91IGhhdmUgdG8gbWFrZSBzdXJlIG5vdCB0byBkaXN0cmlidXRlIEdQTC1saW5rZWQKLXBsdWctaW5zLgotCi1XaGVuIHVzaW5nIEdQTC1saW5rZWQgcGx1Zy1pbnMsIEdTdHJlYW1lciBpcyBmb3IgYWxsIHByYWN0aWNhbCByZWFzb25zCi11bmRlciB0aGUgR1BMIGl0c2VsZi4KLQotSElTVE9SWQotLS0tLS0tLQotCi1UaGUgZnVuZGFtZW50YWwgZGVzaWduIGNvbWVzIGZyb20gdGhlIHZpZGVvIHBpcGVsaW5lIGF0IE9yZWdvbiBHcmFkdWF0ZQotSW5zdGl0dXRlLCBhcyB3ZWxsIGFzIHNvbWUgaWRlYXMgZnJvbSBEaXJlY3RNZWRpYS4gIEl0J3MgYmFzZWQgb24gcGx1Zy1pbnMgdGhhdAotd2lsbCBwcm92aWRlIHRoZSB2YXJpb3VzIGNvZGVjIGFuZCBvdGhlciBmdW5jdGlvbmFsaXR5LiAgVGhlIGludGVyZmFjZQotaG9wZWZ1bGx5IGlzIGdlbmVyaWMgZW5vdWdoIGZvciB2YXJpb3VzIGNvbXBhbmllcyAoYWhlbSwgQXBwbGUpIHRvIHJlbGVhc2UKLWJpbmFyeSBjb2RlY3MgZm9yIExpbnV4LCB1bnRpbCBzdWNoIHRpbWUgYXMgdGhleSBnZXQgYSBjbHVlIGFuZCByZWxlYXNlIHRoZQotc291cmNlLgpkaWZmIC0tZ2l0IGEvUkVMRUFTRSBiL1JFTEVBU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMzJiNjQuLjAwMDAwMDAKLS0tIGEvUkVMRUFTRQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0KLVJlbGVhc2Ugbm90ZXMgZm9yIEdTdHJlYW1lciBHb29kIFBsdWdpbnPCoDEuMTAuNAotCi1UaGUgR1N0cmVhbWVyIHRlYW0gaXMgcHJvdWQgdG8gYW5ub3VuY2UgdGhlIGZvdXJ0aCBidWdmaXggcmVsZWFzZSBpbiB0aGUgc3RhYmxlCi0xLjEwIHJlbGVhc2Ugc2VyaWVzIG9mIHlvdXIgZmF2b3VyaXRlIGNyb3NzLXBsYXRmb3JtIG11bHRpbWVkaWEgZnJhbWV3b3JrIQotCi0KLVRoaXMgcmVsZWFzZSBvbmx5IGNvbnRhaW5zIGJ1Z2ZpeGVzIGFuZCBpdCBpcyBzYWZlIHRvIHVwZGF0ZSBmcm9tIDEuMTAueC4gRm9yIGEKLWZ1bGwgbGlzdCBvZiBidWdmaXhlcyBzZWUgQnVnemlsbGEuCi0KLQotU2VlIC9yZWxlYXNlcy8xLjEwLyBmb3IgdGhlIGZ1bGwgcmVsZWFzZSBub3Rlcy4KLQotCi0iU3VjaCBpbmdyYXRpdHVkZS4gIEFmdGVyIGFsbCB0aGUgdGltZXMgSSd2ZSBzYXZlZCB5b3VyIGxpZmUuIgotCi0KLUEgY29sbGVjdGlvbiBvZiBwbHVnaW5zIHlvdSdkIHdhbnQgdG8gaGF2ZSByaWdodCBuZXh0IHRvIHlvdSBvbiB0aGUKLWJhdHRsZWZpZWxkLiAgU2hvb3Rpbmcgc2hhcnAgYW5kIG1ha2luZyBubyBtaXN0YWtlcywgdGhlc2UgcGx1Z2lucyBoYXZlIGl0Ci1hbGw6IGdvb2QgbG9va3MsIGdvb2QgY29kZSwgYW5kIGdvb2QgbGljZW5zaW5nLiAgRG9jdW1lbnRlZCBhbmQgZHJlc3NlZCB1cAotaW4gdGVzdHMuICBJZiB5b3UncmUgbG9va2luZyBmb3IgYSByb2xlIG1vZGVsIHRvIGJhc2UgeW91ciBvd24gcGx1Z2luIG9uLAotaGVyZSBpdCBpcy4KLQotCi1JZiB5b3UgZmluZCBhIHBsb3QgaG9sZSBvciBhIGJhZGx5IGxpcC1zeW5jZWQgbGluZSBvZiBjb2RlIGluIHRoZW0sCi1sZXQgdXMga25vdyAtIGl0IGlzIGEgbWF0dGVyIG9mIGhvbm91ciBmb3IgdXMgdG8gZW5zdXJlIEJsb25kaWUgZG9lc24ndCBsb29rCi1saWtlIGhlJ3MgYmVlbiB3YWxraW5nIDEwMCBtaWxlcyB0aHJvdWdoIHRoZSBkZXNlcnQgd2l0aG91dCB3YXRlci4KLQotCi1UaGlzIG1vZHVsZSBjb250YWlucyBhIHNldCBvZiBwbHVnaW5zIHRoYXQgd2UgY29uc2lkZXIgdG8gaGF2ZSBnb29kIHF1YWxpdHkKLSAgY29kZSwgY29ycmVjdCBmdW5jdGlvbmFsaXR5LCBvdXIgcHJlZmVycmVkIGxpY2Vuc2UgKExHUEwgZm9yIHRoZSBwbHVnaW4KLSAgY29kZSwgTEdQTCBvciBMR1BMLWNvbXBhdGlibGUgZm9yIHRoZSBzdXBwb3J0aW5nIGxpYnJhcnkpLgotV2UgYmVsaWV2ZSBkaXN0cmlidXRvcnMgY2FuIHNhZmVseSBzaGlwIHRoZXNlIHBsdWdpbnMuCi1QZW9wbGUgd3JpdGluZyBlbGVtZW50cyBzaG91bGQgYmFzZSB0aGVpciBjb2RlIG9uIHRoZXNlIGVsZW1lbnRzLgotCi0KLU90aGVyIG1vZHVsZXMgY29udGFpbmluZyBwbHVnaW5zIGFyZToKLQotCi1nc3QtcGx1Z2lucy1iYXNlCi1jb250YWlucyBhIGJhc2ljIHNldCBvZiB3ZWxsLXN1cHBvcnRlZCBwbHVnaW5zCi1nc3QtcGx1Z2lucy11Z2x5Ci1jb250YWlucyBhIHNldCBvZiB3ZWxsLXN1cHBvcnRlZCBwbHVnaW5zLCBidXQgbWlnaHQgcG9zZSBwcm9ibGVtcyBmb3IKLSAgICBkaXN0cmlidXRvcnMKLWdzdC1wbHVnaW5zLWJhZAotY29udGFpbnMgYSBzZXQgb2YgbGVzcyBzdXBwb3J0ZWQgcGx1Z2lucyB0aGF0IGhhdmVuJ3QgcGFzc2VkIHRoZQotICAgIHJpZ29yb3VzIHF1YWxpdHkgdGVzdGluZyB3ZSBleHBlY3QsIG9yIGFyZSBzdGlsbCBtaXNzaW5nIGRvY3VtZW50YXRpb24KLSAgICBhbmQvb3IgdW5pdCB0ZXN0cwotZ3N0LWxpYmF2Ci1jb250YWlucyBhIHNldCBvZiBjb2RlY3MgcGx1Z2lucyBiYXNlZCBvbiBsaWJhdiAoZm9ybWVybHkgZ3N0LWZmbXBlZykKLQotCi0KLSAgCi0KLUJ1Z3MgZml4ZWQgaW4gdGhpcyByZWxlYXNlCi0gICAgIAotICAgICAgKiA3NzgzNDEgOiBydHBqaXR0ZXJidWZmZXI6IHJlc2V0dGluZyBwdHMgdG8gMCBhZnRlciBnYXAKLSAgICAgICogNzc1NzAyIDogdjRsMm9iamVjdDogRG9uJ3Qgc2V0IGVtcHR5IGludGVybGFjZS1tb2RlIGxpc3QKLSAgICAgICogNzc2MTA2IDogdjRsMm9iamVjdDogRG9uJ3QgY2hlY2sgc2l6ZSBpbiBhIG5vbi1saXN0IHZhbHVlCi0gICAgICAqIDc3NzM5OSA6IHY0bDJhbGxvY2F0b3I6IG1lbW9yeSByZWZlcmVuY2VkIHRvbyBsYXRlCi0gICAgICAqIDc3Nzk0MCA6IHF0ZGVtdXg6IGh1Z2UgbWVtb3J5IGFsbG9jYXRpb24KLSAgICAgICogNzc4NDI4IDogc291cGh0dHBzcmM6IE9yaWdpbmFsIGNvbm5lY3Rpb24gZG9lcyBub3QgY2xlYXJlZCBpZiB0aGUgdXJpIGlzIHJlZGlyZWN0ZWQKLSAgICAgICogNzc4NDM3IDogaWN5ZGVtdXg6IHJlc2V0IHRhZ3Mgb24gZW1wdHkgU3RyZWFtVGl0bGUgdmFsdWUKLSAgICAgICogNzc4NDUzIDogdjRsMnZpZGVvZGVjOiBNYWtlcyBzaW5nbGV0b24gY2FwcyByZWYgaW5jcmVhc2Ugb24gZXZlcnkgYWNjZXNzCi0gICAgICAqIDc3ODgxNSA6IHR5cG8gaW4gZ3N0djRsMm9iamVjdCdzICBfYWNxdWlyZV9mb3JtYXQoKSBzZXQgb2YgZXJyb3IgbWVzc2FnZXMKLSAgICAgICogNzc1NTY0IDogdjRsMiAxLjEwIFJlZ3Jlc3Npb246IHdoaXRlIHBpeGVscyB3aXRoIGNhbWVyYSBvbiBSYXNwYmVycnkgUGkgJiBnc3RnbAotCi09PT09IERvd25sb2FkID09PT0KLQotWW91IGNhbiBmaW5kIHNvdXJjZSByZWxlYXNlcyBvZiBnc3QtcGx1Z2lucy1nb29kIGluIHRoZSBkb3dubG9hZAotZGlyZWN0b3J5OiBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvCi0KLVRoZSBnaXQgcmVwb3NpdG9yeSBhbmQgZGV0YWlscyBob3cgdG8gY2xvbmUgaXQgY2FuIGJlIGZvdW5kIGF0Ci1odHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QvCi0KLT09PT0gSG9tZXBhZ2UgPT09PQotCi1UaGUgcHJvamVjdCdzIHdlYnNpdGUgaXMgaHR0cHM6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwotCi09PT09IFN1cHBvcnQgYW5kIEJ1Z3MgPT09PQotCi1XZSB1c2UgR05PTUUncyBidWd6aWxsYSBmb3IgYnVnIHJlcG9ydHMgYW5kIGZlYXR1cmUgcmVxdWVzdHM6Ci1odHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXIKLQotUGxlYXNlIHN1Ym1pdCBwYXRjaGVzIHZpYSBidWd6aWxsYSBhcyB3ZWxsLgotCi1Gb3IgaGVscCBhbmQgc3VwcG9ydCwgcGxlYXNlIHN1YnNjcmliZSB0byBhbmQgc2VuZCBxdWVzdGlvbnMgdG8gdGhlCi1nc3RyZWFtZXItZGV2ZWwgbWFpbGluZyBsaXN0IChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLgotCi1UaGVyZSBpcyBhbHNvIGEgI2dzdHJlYW1lciBJUkMgY2hhbm5lbCBvbiB0aGUgRnJlZW5vZGUgSVJDIG5ldHdvcmsuCi0KLT09PT0gRGV2ZWxvcGVycyA9PT09Ci0KLUdTdHJlYW1lciBpcyBzdG9yZWQgaW4gR2l0LCBob3N0ZWQgYXQgZ2l0LmZyZWVkZXNrdG9wLm9yZywgYW5kIGNhbiBiZSBjbG9uZWQKLWZyb20gdGhlcmUgKHNlZSBsaW5rIGFib3ZlKS4KLQotSW50ZXJlc3RlZCBkZXZlbG9wZXJzIG9mIHRoZSBjb3JlIGxpYnJhcnksIHBsdWdpbnMsIGFuZCBhcHBsaWNhdGlvbnMgc2hvdWxkCi1zdWJzY3JpYmUgdG8gdGhlIGdzdHJlYW1lci1kZXZlbCBsaXN0LgotCi0gICAgICAgIAotQ29udHJpYnV0b3JzIHRvIHRoaXMgcmVsZWFzZQotICAgIAotICAgICAgKiBBcnVuIFJhZ2hhdmFuCi0gICAgICAqIEphbiBTY2htaWR0Ci0gICAgICAqIEplYW4tQ2hyaXN0b3BoZSBUcm90aW4KLSAgICAgICogSnVhbiBQYWJsbyBVZ2FydGUKLSAgICAgICogTmljb2xhcyBEdWZyZXNuZQotICAgICAgKiBSZXluYWxkbyBILiBWZXJkZWpvIFBpbm9jaGV0Ci0gICAgICAqIFNlYmFzdGlhbiBEcsO2Z2UKLSAgICAgICogU2V1bmdoYSBZYW5nCi0gICAgICAqIFPDuHJlbiBKdXVsCi0gICAgICAqIFRoaWJhdWx0IFNhdW5pZXIKLSAgICAgICogVGltLVBoaWxpcHAgTcO8bGxlcgotICAgICAgKiBWw61jdG9yIE1hbnVlbCBKw6FxdWV6IExlYWwKLcKgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUkVRVUlSRU1FTlRTIGIvUkVRVUlSRU1FTlRTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjFiMTA2Li4wMDAwMDAwCi0tLSBhL1JFUVVJUkVNRU5UUworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi1HU3RyZWFtZXIgdXNlcyBhICpsYXJnZSogYXJyYXkgb2YgdG9vbHMgYW5kIGxpYnJhcmllcywgbW9zdCBvZiB3aGljaCBhcmUKLW9wdGlvbmFsLiBXZSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29kZSB0aGF0IGRlcGVuZHMgb24KLW9wdGlvbmFsIGxpYnJhcmllcyBkb2Vzbid0IGdldCBidWlsdCB1bmxlc3MgeW91IGhhdmUgdGhvc2UgbGlicmFyaWVzLiBJZgoteW91IGZpbmQgdGhpcyBub3QgdG8gYmUgdGhlIGNhc2UsIHBsZWFzZSwgbGV0IHVzIGtub3cgYnkgZmlsaW5nIGEgYnVnCi1yZXBvcnQgYXQgaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy8uCi0KLU9uIERlYmlhbi9VYnVudHUsIHRoZSBlYXNpZXN0IHdheSB0byBpbnN0YWxsIG1vc3QgYnVpbGQgcmVxdWlyZW1lbnRzIGlzOgotCi0gICAgICAgIHN1ZG8gYXB0LWdldCBidWlsZC1kZXAgZ3N0LXBsdWdpbnMtZ29vZDEuMAotCi1SZXF1aXJlZCB0b29sczoKLT09PT09PT09PT09PT09PQotCi1BbiBleHRyYSBzZXQgb2YgdG9vbHMgaXMgcmVxdWlyZWQgaWYgeW91IHdpc2ggdG8gYnVpbGQgR1N0cmVhbWVyCi1mcm9tIGdpdCAodXNpbmcgYXV0b2dlbi5zaCk6Ci0KLWF1dG9jb25mICA+PSAyLjY4ICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi8KLWF1dG9tYWtlICA+PSAxLjExICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvbWFrZS8KLWdldHRleHQgICA+PSAwLjE3ICAgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZXR0ZXh0LwotbGlidG9vbCAgID49IDIuMi42ICBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvCi1wa2djb25maWcgPj0gMC45LjAgIGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9wa2djb25maWcvCi0KLVJlcXVpcmVkIGxpYnJhcmllczoKLT09PT09PT09PT09PT09PT09PT0KLQotUGFja2FnZTogICAgICAgIEdTdHJlYW1lcgotVmVyc2lvbjogICAgICAgIDEueCAoc2FtZSAxLnggdmVyc2lvbiBhcyB0aGlzIHBhY2thZ2UpCi1SZWNvbW1lbmRlZDogICAgTGF0ZXN0IDEueAotVVJMOiAgICAgICAgICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwotRGViaWFuUGFja2FnZTogIGxpYmdzdHJlYW1lcjEuMC1kZXYKLU5vdGVzOiAgICAgICAgICBUaGUgcmVxdWlyZWQgdmVyc2lvbiBpcyB1cGRhdGVkIGZyZXF1ZW50bHksIHNvIHRoZSB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgbGlzdGVkIGluIHRoaXMgZmlsZSBpcyBvZnRlbiBvdXQgb2YgZGF0ZS4gSWYgeW91IGFyZSBjb21waWxpbmcKLSAgICAgICAgICAgICAgICBmcm9tIGdpdCBtYXN0ZXIsIHlvdSB3aWxsIHVzdWFsbHkgbmVlZCBHU3RyZWFtZXIgY29yZSBhbmQKLSAgICAgICAgICAgICAgICBnc3QtcGx1Z2lucy1iYXNlIGZyb20gZ2l0IG1hc3RlciBhcyB3ZWxsLgotCi1QYWNrYWdlOiAgICAgICAgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucwotVmVyc2lvbjogICAgICAgIDEueCAoc2FtZSAxLnggdmVyc2lvbiBhcyB0aGlzIHBhY2thZ2UpCi1SZWNvbW1lbmRlZDogICAgTGF0ZXN0IDEueAotVVJMOiAgICAgICAgICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLwotRGViaWFuUGFja2FnZTogIGxpYmdzdHJlYW1lci1wbHVnaW5zLWJhc2UxLjAtZGV2Ci1Ob3RlczogICAgICAgICAgVGhlIHJlcXVpcmVkIHZlcnNpb24gaXMgdXBkYXRlZCBmcmVxdWVudGx5LCBzbyB0aGUgdmVyc2lvbgotICAgICAgICAgICAgICAgIGxpc3RlZCBpbiB0aGlzIGZpbGUgaXMgb2Z0ZW4gb3V0IG9mIGRhdGUuIElmIHlvdSBhcmUgY29tcGlsaW5nCi0gICAgICAgICAgICAgICAgZnJvbSBnaXQgbWFzdGVyLCB5b3Ugd2lsbCB1c3VhbGx5IG5lZWQgR1N0cmVhbWVyIGNvcmUgYW5kCi0gICAgICAgICAgICAgICAgZ3N0LXBsdWdpbnMtYmFzZSBmcm9tIGdpdCBtYXN0ZXIgYXMgd2VsbC4KLQotCi1PcHRpb25hbCBsaWJyYXJpZXM6Ci09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgZmlsZSBsaXN0cyBzdXBwb3J0aW5nIGxpYnJhcmllcyBmb3Igd2hpY2ggZ3N0LXBsdWdpbnMtZ29vZCBjb250YWlucwotcGx1Z2lucywgYXMgd2VsbCBhcyB0aGVpciBtaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24uIFlvdSBjYW4gZmluZCB0aGUKLWNvcnJlc3BvbmRpbmcgcGx1Z2lucyBpbiBleHQvKGxpYnJhcnkpCi0KLVBhY2thZ2U6ICAgICAgICBPcmMKLVZlcnNpb246ICAgICAgICA+PSAwLjQuMTcKLVJlY29tbWVuZGVkOiAgICBMYXRlc3QgMC40LngKLVVSTDogICAgICAgICAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL3NyYy9vcmMvCi1EZWJpYW5QYWNrYWdlOiAgbGlib3JjLTAuNC1kZXYKLU5vdGVzOgkJVXNlZCBieSBtYW55IHBsdWdpbnMgZm9yIGFjY2VsZXJhdGluZyBTSU1EIHByb2Nlc3NpbmcgdXNpbmcKLSAgICAgICAgICAgICAgICBydW4tdGltZSBnZW5lcmF0ZWQgYXNzZW1ibHkuIE5vdCBhIGhhcmQgcmVxdWlyZW1lbnQsIGJ1dAotICAgICAgICAgICAgICAgIGhpZ2hseSByZWNvbW1lbmRlZC4gUGFja2FnZXJzLCBwbGVhc2UgaGFyZC1kZXBlbmQgb24gbGlib3JjLgotICAgICAgICAgICAgICAgIFRoZSBnaXQgcmVwb3NpdG9yeSBpcyBodHRwOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL29yYy8KLSAgICAgICAgICAgICAgICAoYWxsIHZlcnNpb25zIG9uIGVudHJvcHl3YXZlLmNvbSBhcmUgb3V0ZGF0ZWQpCi0KLVBhY2thZ2U6ICAgICAgICBnZGstcGl4YnVmIExpYnJhcnkKLVZlcnNpb246ICAgICAgICA+PSAyLjguMAotUmVjb21tZW5kZWQ6ICAgIExhdGVzdCAyLngKLVVSTDogICAgICAgICAgICBodHRwOi8vd3d3Lmd0ay5vcmcvCi1EZWJpYW5QYWNrYWdlOiAgbGliZ2RrLXBpeGJ1ZjIuMC1kZXYKLVBsdWdpbnM6ICAgICAgICBnZGtwaXhidWYgKGdka3BpeGJ1ZmRlYywgZ2RrcGl4YnVmb3ZlcmxheSkKLU5vdGVzOiAgICAgICAgICBUaGlzIGxpYnJhcnkgZG9lcyBub3QgZGVwZW5kIG9uIEd0aysgb3IgR2RrIG9yIGFueSB3aW5kb3cgc3lzdGVtCi0KLVBhY2thZ2U6ICAgICAgICBHVEsrCi1WZXJzaW9uOiAgICAgICAgPj0gMy4wCi1SZWNvbW1lbmRlZDogICAgTGF0ZXN0IDMueAotVVJMOiAgICAgICAgICAgIGh0dHA6Ly93d3cuZ3RrLm9yZy8KLURlYmlhblBhY2thZ2U6ICBsaWJndGstMy1kZXYKLVBsdWdpbnM6ICAgICAgICBOb25lCi1Ob3RlczoJICAgICAgICBPbmx5IG5lZWRlZCBieSBzb21lIG9mIHRoZSBleGFtcGxlcywgbm90IGJ5IGFueSBwbHVnaW5zLgotCi1QYWNrYWdlOiAgICAgICAgWGxpYgotUGx1Z2luczogICAgICAgIHhpbWFnZXNyYwotRGViaWFuUGFja2FnZTogIGxpYngxMS1kZXYgbGlieHYtZGV2IGxpYnh0LWRldgotCi1QYWNrYWdlOiAgICAgICAgQUFMaWIKLVBsdWdpbnM6ICAgICAgICBhYXNpbmsKLVVSTDogICAgICAgICAgICBodHRwOi8vYWEtcHJvamVjdC5zb3VyY2Vmb3JnZS5uZXQvYWFsaWIvCi0KLVBhY2thZ2U6ICAgICAgICBDYWlybwotVmVyc2lvbjogICAgICAgID49IDEuMTAKLURlYmlhblBhY2thZ2U6ICBsaWJjYWlybzItZGV2Ci1QbHVnaW5zOiAgICAgICAgY2Fpcm8gKGNhaXJvb3ZlcmxheSkKLVVSTDogICAgICAgICAgICBodHRwOi8vY2Fpcm9ncmFwaGljcy5vcmcvCi0KLVBhY2thZ2U6ICAgICAgICBGTEFDCi1WZXJzaW9uOiAgICAgICAgPj0gMS4xLjQKLURlYmlhblBhY2thZ2U6ICBsaWJmbGFjLWRldgotUGx1Z2luczogICAgICAgIGZsYWMgKGZsYWNlbmMsIGZsYWNkZWMpCi1VUkw6ICAgICAgICAgICAgaHR0cDovL2ZsYWMuc291cmNlZm9yZ2UubmV0LwotCi1QYWNrYWdlOiAgICAgICAgZ3VkZXYKLVZlcnNpb246ICAgICAgICA+PSAxNDcKLURlYmlhblBhY2thZ2U6ICBsaWJndWRldi0xLjAtZGV2Ci1QbHVnaW5zOiAgICAgICAgdjRsMiAodjRsMnNyYykKLVVSTDogICAgICAgICAgICBodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zeXN0ZW1kLwotTm90ZXM6ICAgICAgICAgIFRoaXMgZGVwZW5kZW5jeSBpcyBlbnRpcmVseSBvcHRpb25hbCwgdGhlIHZpZGVvNGxpbnV4IHBsdWdpbgotICAgICAgICAgICAgICAgIHdpbGwgd29yayBqdXN0IGZpbmUgd2l0aG91dCBpdC4gZ3VkZXYgaXMgb25seSByZXF1aXJlZCBmb3IKLSAgICAgICAgICAgICAgICB0aGUgZGV2aWNlIHByb2JpbmcgYW5kIG1vbml0b3JpbmcgZnVuY3Rpb25hbGl0eSB0byBkZXRlY3QKLSAgICAgICAgICAgICAgICB2aWRlbzRsaW51eCBkZXZpY2VzIGFwcGVhcmluZy9kaXNhcHBlYXJpbmcgYXQgcnVuLXRpbWUuCi0KLVBhY2thZ2U6ICAgICAgICBKUEVHIGxpYnJhcnkKLVBsdWdpbnM6ICAgICAgICBqcGVnIChqcGVnZW5jLCBqcGVnZGVjLCBzbW9rZWVuYywgc21va2VkZWMpCi1EZWJpYW5QYWNrYWdlOiAgbGlianBlZy1kZXYKLVVSTDogICAgICAgICAgICBodHRwOi8vd3d3LmxpYmpwZWctdHVyYm8ub3JnLwotICAgICAgICAgICAgICAgIG9yIGh0dHA6Ly93d3cuaWpnLm9yZy8gZm9yIHRoZSBJSkcgdmVyc2lvbgotCi1QYWNrYWdlOiAgICAgICAgTGliY2FjYQotUGx1Z2luczogICAgICAgIGNhY2FzaW5rCi1EZWJpYW5QYWNrYWdlOiAgbGliY2FjYS1kZXYKLVVSTDogICAgICAgICAgICBodHRwOi8vbGliY2FjYS56b3kub3JnLwotCi1QYWNrYWdlOiAgICAgICAgTGliZHYKLVZlcnNpb246ICAgICAgICA+PSAwLjEwMAotRGViaWFuUGFja2FnZTogIGxpYmR2NC1kZXYKLVBsdWdpbnM6ICAgICAgICBkdiAoZHZkZWMpCi1VUkw6ICAgICAgICAgICAgaHR0cDovL2xpYmR2LnNvdXJjZWZvcmdlLm5ldC8KLQotUGFja2FnZTogICAgICAgIExpYnBuZwotVmVyc2lvbjogICAgICAgID49IDEuMgotRGViaWFuUGFja2FnZTogIGxpYnBuZzEyLWRldgotUGx1Z2luczogICAgICAgIHBuZyAocG5nZW5jLCBwbmdkZWMpCi1VUkw6ICAgICAgICAgICAgaHR0cDovL3d3dy5saWJwbmcub3JnL3B1Yi9wbmcvbGlicG5nLmh0bWwKLQotUGFja2FnZTogICAgICAgIGxpYnJhdzEzOTQKLVBsdWdpbnM6ICAgICAgICBkdjEzOTQKLVVSTDogICAgICAgICAgICBodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCi0KLVBhY2thZ2U6ICAgICAgICBsaWJzaG91dAotVmVyc2lvbjogICAgICAgID49IDIuMAotRGViaWFuUGFja2FnZTogIGxpYnNob3V0My1kZXYKLXBsdWdpbnM6ICAgICAgICBzaG91dDIgKHNob3V0MnNlbmQpCi1VUkw6ICAgICAgICAgICAgaHR0cDovL3d3dy5pY2VjYXN0Lm9yZy8KLQotUGFja2FnZTogICAgICAgIHNwZWV4Ci1WZXJzaW9uOiAgICAgICAgPj0gMS4xLjYKLVBsdWdpbnM6ICAgICAgICBzcGVleCAoc3BlZXhlbmMsIHNwZWV4ZGVjKQotVVJMOiAgICAgICAgICAgIGh0dHA6Ly93d3cuc3BlZXgub3JnLwotCi1QYWNrYWdlOiAgICAgICAgdGFnbGliCi1WZXJzaW9uOiAgICAgICAgPj0gMS41Ci1EZWJpYW5QYWNrYWdlOiAgbGlidGFnMS1kZXYKLVBsdWdpbnM6ICAgICAgICB0YWdsaWIgKGlkM3YybXV4KQotVVJMOiAgICAgICAgICAgIGh0dHA6Ly90YWdsaWIuZ2l0aHViLmlvLwotCi1QYWNrYWdlOiAgICAgICAgemxpYgotRGViaWFuUGFja2FnZTogIHpsaWIxZy1kZXYKLVBsdWdpbnM6ICAgICAgICBpc29tcDQgKHF0ZGVtdXgpLCBtYXRyb3NrYSAobWF0cm9za2FkZW11eCkKLVVSTDogICAgICAgICAgICBodHRwOi8vd3d3LnpsaWIubmV0LwotCi1PcHRpb25hbCAoZGViaWFuKSBwYWNrYWdlczoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1ndGstZG9jLXRvb2xzID49IDEuMTIgIC0tIG5lZWRlZCB0byBidWlsZCBkb2N1bWVudGF0aW9uCi1weXRob24teG1sICAtLSBuZWVkZWQgdG8gYnVpbGQgcGx1Z2luIGRvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2Q3Nzc4Li4wMDAwMDAwCi0tLSBhL2FjbG9jYWwubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE2ICswLDAgQEAKLSMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjE1IC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1tNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKLW00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCi0gIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKLW00X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjldLCwKLVttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42OS4KLVlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIEl0IG1heSB3b3JrLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8uCi1JZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KLVRvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgJ2F1dG9yZWNvbmYnLl0pXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KLSMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCi0jIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQotQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAotW2FtX19hcGlfdmVyc2lvbj0nMS4xNScKLWRubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KLWRubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCi1tNF9pZihbJDFdLCBbMS4xNV0sIFtdLAotICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAotXSkKLQotIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCi0jIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCi0jIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCi1tNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCi0KLSMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCi0jIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KLUFDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKLVtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjE1XSlkbmwKLW00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCi0gIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKLV9BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQotCi0jIEZpZ3VyZSBvdXQgaG93IHRvIHJ1biB0aGUgYXNzZW1ibGVyLiAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9QUk9HX0FTCi0jIC0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9QUk9HX0FTXSwKLVsjIEJ5IGRlZmF1bHQgd2Ugc2ltcGx5IHVzZSB0aGUgQyBjb21waWxlciB0byBidWlsZCBhc3NlbWJseSBjb2RlLgotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCi10ZXN0ICIke0NDQVMrc2V0fSIgPSBzZXQgfHwgQ0NBUz0kQ0MKLXRlc3QgIiR7Q0NBU0ZMQUdTK3NldH0iID0gc2V0IHx8IENDQVNGTEFHUz0kQ0ZMQUdTCi1BQ19BUkdfVkFSKFtDQ0FTXSwgICAgICBbYXNzZW1ibGVyIGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHRzIHRvIENDKV0pCi1BQ19BUkdfVkFSKFtDQ0FTRkxBR1NdLCBbYXNzZW1ibGVyIGNvbXBpbGVyIGZsYWdzIChkZWZhdWx0cyB0byBDRkxBR1MpXSkKLV9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLCBbX0FNX0RFUEVOREVOQ0lFUyhbQ0NBU10pXSlkbmwKLV0pCi0KLSMgQU1fQVVYX0RJUl9FWFBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKLSMgJGFjX2F1eF9kaXIgdG8gJyRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KLSMgJyRzcmNkaXInLCAnJHNyY2Rpci8uLicsIG9yICckc3JjZGlyLy4uLy4uJy4KLSMKLSMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQotIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAotIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKLSMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCi0jIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCi0jIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQotIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgotIwotIyAkYWNfYXV4X2Rpci9taXNzaW5nCi0jICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKLSMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZwotIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKLSMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKLSMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgotIwotIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgotIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQotIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgJy4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKLSMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KLSMKLSMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCi0jIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgotIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAotIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKLSMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKLSMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKLSMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KLSMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgotIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCi0jCi0jIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgotIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCi0jIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KLQotQUNfREVGVU4oW0FNX0FVWF9ESVJfRVhQQU5EXSwKLVtBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKLSMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCi1hbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKLV0pCi0KLSMgQU1fQ09ORElUSU9OQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KLUFDX0RFRlVOKFtBTV9DT05ESVRJT05BTF0sCi1bQUNfUFJFUkVRKFsyLjUyXSlkbmwKLSBtNF9pZihbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCi0gICAgICAgWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAotQUNfU1VCU1QoWyQxX1RSVUVdKWRubAotQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCi1tNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKLWlmICQyOyB0aGVuCi0gICQxX1RSVUU9Ci0gICQxX0ZBTFNFPScjJwotZWxzZQotICAkMV9UUlVFPScjJwotICAkMV9GQUxTRT0KLWZpCi1BQ19DT05GSUdfQ09NTUFORFNfUFJFKAotW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgotICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCi1maV0pXSkKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0KLSMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgJ0FDX1BST0dfQ0MnIGJlCi0jIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAotIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKLSMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZwotIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCi0KLQotIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgotIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiT0JKQyIsICJPQkpDWFgiLCAiVVBDIiwgb3IgIkdKQyIuCi0jIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCi0jCi0jIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcwotIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgotIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCi0jIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgotQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAotW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAotQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAotQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKLUFDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCi0KLW00X2lmKFskMV0sIFtDQ10sICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAotICAgICAgWyQxXSwgW0NYWF0sICBbZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PV0sCi0gICAgICBbJDFdLCBbT0JKQ10sIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICBbJDFdLCBbT0JKQ1hYXSwgW2RlcGNjPSIkT0JKQ1hYIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAotICAgICAgWyQxXSwgW1VQQ10sICBbZGVwY2M9IiRVUEMiICBhbV9jb21waWxlcl9saXN0PV0sCi0gICAgICBbJDFdLCBbR0NKXSwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICAgICAgICAgICAgICAgIFtkZXBjYz0iJCQxIiAgIGFtX2NvbXBpbGVyX2xpc3Q9XSkKLQotQUNfQ0FDSEVfQ0hFQ0soW2RlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjXSwKLSAgICAgICAgICAgICAgIFthbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0sCi1baWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotICBtNF9jYXNlKFskMV0sIFtDQ10sCi0gICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAotICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OwotICAgICBlc2FjXSwKLSAgICBbQ1hYXSwKLSAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWNdKQotCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KLSAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAotICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KLSAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQotICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBnY2MpCi0gICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgotICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKLSAgICAgIDs7Ci0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQotICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKLSAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAotICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KLSAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICAgIGFtX19taW51c19vYmo9Ci0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0KLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotZWxzZQotICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotXSkKLUFDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQotQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKLV0pCi0KLQotIyBBTV9TRVRfREVQRElSCi0jIC0tLS0tLS0tLS0tLS0KLSMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCi0jIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUy4KLUFDX0RFRlVOKFtBTV9TRVRfREVQRElSXSwKLVtBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAotQUNfU1VCU1QoW0RFUERJUl0sIFsiJHthbV9fbGVhZGluZ19kb3R9ZGVwcyJdKWRubAotXSkKLQotCi0jIEFNX0RFUF9UUkFDSwotIyAtLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9ERVBfVFJBQ0tdLAotW0FDX0FSR19FTkFCTEUoW2RlcGVuZGVuY3ktdHJhY2tpbmddLCBbZG5sCi1BU19IRUxQX1NUUklORygKLSAgWy0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmddLAotICBbZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCi1BU19IRUxQX1NUUklORygKLSAgWy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nXSwKLSAgW3NwZWVkcyB1cCBvbmUtdGltZSBidWlsZF0pXSkKLWlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgotICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgotICBBTURFUEJBQ0tTTEFTSD0nXCcKLSAgYW1fX25vZGVwPSdfbm8nCi1maQotQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCi1BQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKWRubAotX0FNX1NVQlNUX05PVE1BS0UoW0FNREVQQkFDS1NMQVNIXSlkbmwKLUFDX1NVQlNUKFthbV9fbm9kZXBdKWRubAotX0FNX1NVQlNUX05PVE1BS0UoW2FtX19ub2RlcF0pZG5sCi1dKQotCi0jIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotCi0jIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotW3sKLSAgIyBPbGRlciBBdXRvY29uZiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCi0gICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKLSAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCi0gIGNhc2UgJENPTkZJR19GSUxFUyBpbgotICAqXCcqKSBldmFsIHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7OwotICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsKLSAgZXNhYwotICBzaGlmdAotICBmb3IgbWYKLSAgZG8KLSAgICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICAgIG1mPWBlY2hvICIkbWYiIHwgc2VkIC1lICdzLzouKiQvLydgCi0gICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgJ01ha2VmaWxlLmluJywgYnV0Ci0gICAgIyBzb21lIHBlb3BsZSByZW5hbWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuCi0gICAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgotICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMgbm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lCi0gICAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCi0gICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwgZ3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCi0gICAgZWxzZQotICAgICAgY29udGludWUKLSAgICBmaQotICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgotICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgICAjIGV4cGFuc2lvbi4KLSAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJ2A7IGRvCi0gICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAotICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQotICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgotICAgIGRvbmUKLSAgZG9uZQotfQotXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotCi0KLSMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgotIwotIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCi0jIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoICcuUCcgZmlsZSB0aGF0IHdlIHdpbGwKLSMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KLUFDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCi1bQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCi0gICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCi1dKQotCi0jIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKLSMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KLQotZG5sIFJlZGVmaW5lIEFDX1BST0dfQ0MgdG8gYXV0b21hdGljYWxseSBpbnZva2UgX0FNX1BST0dfQ0NfQ19PLgotbTRfZGVmaW5lKFtBQ19QUk9HX0NDXSwKLW00X2RlZm4oW0FDX1BST0dfQ0NdKQotW19BTV9QUk9HX0NDX0NfTwotXSkKLQotIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQotIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCi0jIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKLSMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCi0jIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCi0jIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgotIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAotIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCi0jIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCi1BQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCi1bQUNfUFJFUkVRKFsyLjY1XSlkbmwKLWRubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93Ci1kbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KLW00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAotQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAotaWYgdGVzdCAiYGNkICRzcmNkaXIgJiYgcHdkYCIgIT0gImBwd2RgIjsgdGhlbgotICAjIFVzZSAtSSQoc3JjZGlyKSBvbmx5IHdoZW4gJChzcmNkaXIpICE9IC4sIHNvIHRoYXQgbWFrZSdzIG91dHB1dAotICAjIGlzIG5vdCBwb2xsdXRlZCB3aXRoIHJlcGVhdGVkICItSS4iCi0gIEFDX1NVQlNUKFthbV9faXNyY10sIFsnIC1JJChzcmNkaXIpJ10pX0FNX1NVQlNUX05PVE1BS0UoW2FtX19pc3JjXSlkbmwKLSAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCi0gIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuICJtYWtlIGRpc3RjbGVhbiIgdGhlcmUgZmlyc3RdKQotICBmaQotZmkKLQotIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCi1pZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgotICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KLSAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCi0gIGVsc2UKLSAgICBDWUdQQVRIX1c9ZWNobwotICBmaQotZmkKLUFDX1NVQlNUKFtDWUdQQVRIX1ddKQotCi0jIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCi1kbmwgRGlzdGluZ3Vpc2ggYmV0d2VlbiBvbGQtc3R5bGUgYW5kIG5ldy1zdHlsZSBjYWxscy4KLW00X2lmdmFsKFskMl0sCi1bQUNfRElBR05PU0UoW29ic29sZXRlXSwKLSAgICAgICAgICAgICBbJDA6IHR3by0gYW5kIHRocmVlLWFyZ3VtZW50cyBmb3JtcyBhcmUgZGVwcmVjYXRlZC5dKQotbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCi0gQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAotIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLAotW19BTV9TRVRfT1BUSU9OUyhbJDFdKWRubAotZG5sIERpYWdub3NlIG9sZC1zdHlsZSBBQ19JTklUIHdpdGggbmV3LXN0eWxlIEFNX0FVVE9NQUtFX0lOSVQuCi1tNF9pZigKLSAgbTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIFtva10pOm00X2lmZGVmKFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbb2tdKSwKLSAgW29rOm9rXSwsCi0gIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCi0gQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAotIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAotCi1fQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKLVtBQ19ERUZJTkVfVU5RVU9URUQoW1BBQ0tBR0VdLCBbIiRQQUNLQUdFIl0sIFtOYW1lIG9mIHBhY2thZ2VdKQotIEFDX0RFRklORV9VTlFVT1RFRChbVkVSU0lPTl0sIFsiJFZFUlNJT04iXSwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCi0KLSMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KLUFDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCi1BQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCi1BTV9NSVNTSU5HX1BST0coW0FDTE9DQUxdLCBbYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn1dKQotQU1fTUlTU0lOR19QUk9HKFtBVVRPQ09ORl0sIFthdXRvY29uZl0pCi1BTV9NSVNTSU5HX1BST0coW0FVVE9NQUtFXSwgW2F1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufV0pCi1BTV9NSVNTSU5HX1BST0coW0FVVE9IRUFERVJdLCBbYXV0b2hlYWRlcl0pCi1BTV9NSVNTSU5HX1BST0coW01BS0VJTkZPXSwgW21ha2VpbmZvXSkKLUFDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCi1BQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19NS0RJUl9QXSlkbmwKLSMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54Ci0jIGRpZXMgb3V0IGZvciBnb29kLiAgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlOgotIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMDEuaHRtbD4KLSMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+Ci1BQ19TVUJTVChbbWtkaXJfcF0sIFsnJChNS0RJUl9QKSddKQotIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0IChhbmQgcG9zc2libHkgdGhlIFRBUCBkcml2ZXIpLiAgVGhlCi0jIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24gc29tZSBwbGF0Zm9ybXMuCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKLUFDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCi1fQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKLQkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKLQkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKLV9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKLQkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ0NdKV0sCi0JCSAgW200X2RlZmluZShbQUNfUFJPR19DQ10sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKFtDQ10pXSldKWRubAotQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLQkJICBbX0FNX0RFUEVOREVOQ0lFUyhbQ1hYXSldLAotCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwKLQkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtDWFhdKV0pXSlkbmwKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAotCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldLAotCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ10sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0pXSlkbmwKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNYWF0sCi0JCSAgW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSwKLQkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNYWF0sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldKV0pZG5sCi1dKQotQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSlkbmwKLWRubCBUaGUgdGVzdHN1aXRlIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQotZG5sICdhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcwotZG5sIG1hY3JvIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KLUFDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCi1bbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCi0gIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAotCi0jIFBPU0lYIHdpbGwgc2F5IGluIGEgZnV0dXJlIHZlcnNpb24gdGhhdCBydW5uaW5nICJybSAtZiIgd2l0aCBubyBhcmd1bWVudAotIyBpcyBPSzsgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBtYWtlIHRoYXQgYXNzdW1wdGlvbiBpbiBvdXIgTWFrZWZpbGUKLSMgcmVjaXBlcy4gIFNvIHVzZSBhbiBhZ2dyZXNzaXZlIHByb2JlIHRvIGNoZWNrIHRoYXQgdGhlIHVzYWdlIHdlIHdhbnQgaXMKLSMgYWN0dWFsbHkgc3VwcG9ydGVkICJpbiB0aGUgd2lsZCIgdG8gYW4gYWNjZXB0YWJsZSBkZWdyZWUuCi0jIFNlZSBhdXRvbWFrZSBidWcjMTA4MjguCi0jIFRvIG1ha2UgYW55IGlzc3VlIG1vcmUgdmlzaWJsZSwgY2F1c2UgdGhlIHJ1bm5pbmcgY29uZmlndXJlIHRvIGJlIGFib3J0ZWQKLSMgYnkgZGVmYXVsdCBpZiB0aGUgJ3JtJyBwcm9ncmFtIGluIHVzZSBkb2Vzbid0IG1hdGNoIG91ciBleHBlY3RhdGlvbnM7IHRoZQotIyB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSB0aGlzIHRob3VnaC4KLWlmIHJtIC1mICYmIHJtIC1mciAmJiBybSAtcmY7IHRoZW4gOiBPSzsgZWxzZQotICBjYXQgPiYyIDw8J0VORCcKLU9vcHMhCi0KLVlvdXIgJ3JtJyBwcm9ncmFtIHNlZW1zIHVuYWJsZSB0byBydW4gd2l0aG91dCBmaWxlIG9wZXJhbmRzIHNwZWNpZmllZAotb24gdGhlIGNvbW1hbmQgbGluZSwgZXZlbiB3aGVuIHRoZSAnLWYnIG9wdGlvbiBpcyBwcmVzZW50LiAgVGhpcyBpcyBjb250cmFyeQotdG8gdGhlIGJlaGF2aW91ciBvZiBtb3N0IHJtIHByb2dyYW1zIG91dCB0aGVyZSwgYW5kIG5vdCBjb25mb3JtaW5nIHdpdGgKLXRoZSB1cGNvbWluZyBQT1NJWCBzdGFuZGFyZDogPGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTU0Mj4KLQotUGxlYXNlIHRlbGwgYnVnLWF1dG9tYWtlQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFsdWUKLW9mIHlvdXIgJFBBVEggYW5kIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gIFRoaXMKLWNhbiBoZWxwIHVzIGltcHJvdmUgZnV0dXJlIGF1dG9tYWtlIHZlcnNpb25zLgotCi1FTkQKLSAgaWYgdGVzdCB4IiRBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSIgPSB4InllcyI7IHRoZW4KLSAgICBlY2hvICdDb25maWd1cmF0aW9uIHdpbGwgcHJvY2VlZCBhbnl3YXksIHNpbmNlIHlvdSBoYXZlIHNldCB0aGUnID4mMgotICAgIGVjaG8gJ0FDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIHZhcmlhYmxlIHRvICJ5ZXMiJyA+JjIKLSAgICBlY2hvID4mMgotICBlbHNlCi0gICAgY2F0ID4mMiA8PCdFTkQnCi1BYm9ydGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB0byBlbnN1cmUgeW91IHRha2Ugbm90aWNlIG9mIHRoZSBpc3N1ZS4KLQotWW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBHTlUgY29yZXV0aWxzIHRvIGdldCBhbiAncm0nIGltcGxlbWVudGF0aW9uCi10aGF0IGJlaGF2ZXMgcHJvcGVybHk6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4uCi0KLUlmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgdXNpbmcgeW91ciBwcm9ibGVtYXRpYwotJ3JtJyBhbnl3YXksIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0KLXRvICJ5ZXMiLCBhbmQgcmUtcnVuIGNvbmZpZ3VyZS4KLQotRU5ECi0gICAgQUNfTVNHX0VSUk9SKFtZb3VyICdybScgcHJvZ3JhbSBpcyBiYWQsIHNvcnJ5Ll0pCi0gIGZpCi1maQotZG5sIFRoZSB0cmFpbGluZyBuZXdsaW5lIGluIHRoaXMgbWFjcm8ncyBkZWZpbml0aW9uIGlzIGRlbGliZXJhdGUsIGZvcgotZG5sIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHRvIGFsbG93IHRyYWlsaW5nICdkbmwnLXN0eWxlIGNvbW1lbnRzCi1kbmwgYWZ0ZXIgdGhlIEFNX0lOSVRfQVVUT01BS0UgaW52b2NhdGlvbi4gU2VlIGF1dG9tYWtlIGJ1ZyMxNjg0MS4KLV0pCi0KLWRubCBIb29rIGludG8gJ19BQ19DT01QSUxFUl9FWEVFWFQnIGVhcmx5IHRvIGxlYXJuIGl0cyBleHBhbnNpb24uICBEbyBub3QKLWRubCBhZGQgdGhlIGNvbmRpdGlvbmFsIHJpZ2h0IGhlcmUsIGFzIF9BQ19DT01QSUxFUl9FWEVFWFQgbWF5IGJlIGZ1cnRoZXIKLWRubCBtYW5nbGVkIGJ5IEF1dG9jb25mIGFuZCBydW4gaW4gYSBzaGVsbCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuCi1tNF9kZWZpbmUoW19BQ19DT01QSUxFUl9FWEVFWFRdLAotbTRfZGVmbihbX0FDX0NPTVBJTEVSX0VYRUVYVF0pW200X3Byb3ZpZGUoW19BTV9DT01QSUxFUl9FWEVFWFRdKV0pCi0KLSMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KLSMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCi0jIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KLQotIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQotIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCi0jIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KLUFDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKLVsjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCi1fYW1fYXJnPSQxCi1fYW1fc3RhbXBfY291bnQ9MQotZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCi0gIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQotICAgICAgYnJlYWsgOzsKLSAgICAqICkKLSAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKLSAgZXNhYwotZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQotCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NICi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgJGluc3RhbGxfc2guCi1BQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1pZiB0ZXN0IHgiJHtpbnN0YWxsX3NoK3NldH0iICE9IHhzZXQ7IHRoZW4KLSAgY2FzZSAkYW1fYXV4X2RpciBpbgotICAqXCAqIHwgKlwJKikKLSAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OwotICAqKQotICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgotICBlc2FjCi1maQotQUNfU1VCU1QoW2luc3RhbGxfc2hdKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBDaGVjayB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGZpbGUtc3lzdGVtIHN1cHBvcnRzIGZpbGVuYW1lcwotIyB3aXRoIGEgbGVhZGluZyBkb3QuICBGb3IgaW5zdGFuY2UgTVMtRE9TIGRvZXNuJ3QuCi1BQ19ERUZVTihbQU1fU0VUX0xFQURJTkdfRE9UXSwKLVtybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAotbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAudHN0OyB0aGVuCi0gIGFtX19sZWFkaW5nX2RvdD0uCi1lbHNlCi0gIGFtX19sZWFkaW5nX2RvdD1fCi1maQotcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAotQUNfU1VCU1QoW2FtX19sZWFkaW5nX2RvdF0pXSkKLQotIyBBZGQgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB0byBjb25maWd1cmUuICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotIyBGcm9tIEppbSBNZXllcmluZwotCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fTUFJTlRBSU5FUl9NT0RFKFtERUZBVUxULU1PREVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbnRyb2wgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuCi0jIERlZmF1bHQgaXMgdG8gZGlzYWJsZSB0aGVtLCB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkIGxpdGVyYWxseS4KLSMgRm9yIHN5bW1ldHJ5LCAnZGlzYWJsZScgbWF5IGJlIHBhc3NlZCBhcyB3ZWxsLiAgQW55d2F5LCB0aGUgdXNlcgotIyBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2l0aCB0aGUgLS1lbmFibGUvLS1kaXNhYmxlIHN3aXRjaC4KLUFDX0RFRlVOKFtBTV9NQUlOVEFJTkVSX01PREVdLAotW200X2Nhc2UobTRfZGVmYXVsdChbJDFdLCBbZGlzYWJsZV0pLAotICAgICAgIFtlbmFibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2Rpc2FibGVdKV0sCi0gICAgICAgW2Rpc2FibGVdLCBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pXSwKLSAgICAgICBbbTRfZGVmaW5lKFthbV9tYWludGFpbmVyX290aGVyXSwgW2VuYWJsZV0pCi0gICAgICAgIG00X3dhcm4oW3N5bnRheF0sIFt1bmV4cGVjdGVkIGFyZ3VtZW50IHRvIEFNQCZ0QF9NQUlOVEFJTkVSX01PREU6ICQxXSldKQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCi0gIGRubCBtYWludGFpbmVyLW1vZGUncyBkZWZhdWx0IGlzICdkaXNhYmxlJyB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkCi0gIEFDX0FSR19FTkFCTEUoW21haW50YWluZXItbW9kZV0sCi0gICAgW0FTX0hFTFBfU1RSSU5HKFstLV1hbV9tYWludGFpbmVyX290aGVyWy1tYWludGFpbmVyLW1vZGVdLAotICAgICAgYW1fbWFpbnRhaW5lcl9vdGhlclsgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKLSAgICAgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdKV0sCi0gICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCi0gICAgW1VTRV9NQUlOVEFJTkVSX01PREU9XW00X2lmKGFtX21haW50YWluZXJfb3RoZXIsIFtlbmFibGVdLCBbbm9dLCBbeWVzXSkpCi0gIEFDX01TR19SRVNVTFQoWyRVU0VfTUFJTlRBSU5FUl9NT0RFXSkKLSAgQU1fQ09ORElUSU9OQUwoW01BSU5UQUlORVJfTU9ERV0sIFt0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzXSkKLSAgTUFJTlQ9JE1BSU5UQUlORVJfTU9ERV9UUlVFCi0gIEFDX1NVQlNUKFtNQUlOVF0pZG5sCi1dCi0pCi0KLSMgQ2hlY2sgdG8gc2VlIGhvdyAnbWFrZScgdHJlYXRzIGluY2x1ZGVzLgkgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9NQUtFX0lOQ0xVREUoKQotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgotQUNfREVGVU4oW0FNX01BS0VfSU5DTFVERV0sCi1bYW1fbWFrZT0ke01BS0UtbWFrZX0KLWNhdCA+IGNvbmZpbmMgPDwgJ0VORCcKLWFtX19kb2l0OgotCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAotLlBIT05ZOiBhbV9fZG9pdAotRU5ECi0jIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2VdKQotYW1fX2luY2x1ZGU9IiMiCi1hbV9fcXVvdGU9Ci1fYW1fcmVzdWx0PW5vbmUKLSMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCi1lY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCi0jIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSAnbWFrZScuCi1jYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAotKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCi0gIGFtX19pbmNsdWRlPWluY2x1ZGUKLSAgYW1fX3F1b3RlPQotICBfYW1fcmVzdWx0PUdOVQotICA7OwotZXNhYwotIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCi1pZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCi0gICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCi0gICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAotICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCi0gICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgIGFtX19xdW90ZT0iXCIiCi0gICAgIF9hbV9yZXN1bHQ9QlNECi0gICAgIDs7Ci0gICBlc2FjCi1maQotQUNfU1VCU1QoW2FtX19pbmNsdWRlXSkKLUFDX1NVQlNUKFthbV9fcXVvdGVdKQotQUNfTVNHX1JFU1VMVChbJF9hbV9yZXN1bHRdKQotcm0gLWYgY29uZmluYyBjb25mbWYKLV0pCi0KLSMgRmFrZSB0aGUgZXhpc3RlbmNlIG9mIHByb2dyYW1zIHRoYXQgR05VIG1haW50YWluZXJzIHVzZS4gIC0qLSBBdXRvY29uZiAtKi0KLQotIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9NSVNTSU5HX1BST0ddLAotW0FDX1JFUVVJUkUoW0FNX01JU1NJTkdfSEFTX1JVTl0pCi0kMT0keyQxLSIke2FtX21pc3NpbmdfcnVufSQyIn0KLUFDX1NVQlNUKCQxKV0pCi0KLSMgQU1fTUlTU0lOR19IQVNfUlVOCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgaXMgbW9kZXJuIGVub3VnaC4KLSMgSWYgaXQgaXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KLUFDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAotW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKLUFDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubAotaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCi0gIGNhc2UgJGFtX2F1eF9kaXIgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OwotICAqKQotICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OwotICBlc2FjCi1maQotIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgotZWxzZQotICBhbV9taXNzaW5nX3J1bj0KLSAgQUNfTVNHX1dBUk4oWydtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nXSkKLWZpCi1dKQotCi0jIENvcHlyaWdodCAoQykgMjAwMy0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19NS0RJUl9QCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgJ21rZGlyIC1wJy4KLUFDX0RFRlVOKFtBTV9QUk9HX01LRElSX1BdLAotW0FDX1BSRVJFUShbMi42MF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAotZG5sIEZJWE1FIHdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8gcmVtb3ZlIHRoaXMhIGFkanVzdCB3YXJuaW5nCi1kbmwgRklYTUUgbWVzc2FnZSBhY2NvcmRpbmdseS4KLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IHRoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgc29vbiBiZSByZW1vdmVkLgotWW91IHNob3VsZCB1c2UgdGhlIEF1dG9jb25mLXByb3ZpZGVkICdBQ11bX1BST0dfTUtESVJfUCcgbWFjcm8gaW5zdGVhZCwKLWFuZCB1c2UgJyQoTUtESVJfUCknIGluc3RlYWQgb2YgJyQobWtkaXJfcCknaW4geW91ciBNYWtlZmlsZS5hbSBmaWxlcy5dKQotZG5sIEF1dG9tYWtlIDEuOCB0byAxLjkuNiB1c2VkIHRvIGRlZmluZSBta2Rpcl9wLiAgV2Ugbm93IHVzZSBNS0RJUl9QLAotZG5sIHdoaWxlIGtlZXBpbmcgYSBkZWZpbml0aW9uIG9mIG1rZGlyX3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1kbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCi1kbmwgSG93ZXZlciB3ZSBjYW5ub3QgZGVmaW5lIG1rZGlyX3AgYXMgJChNS0RJUl9QKSBmb3IgdGhlIHNha2Ugb2YKLWRubCBNYWtlZmlsZS5pbnMgdGhhdCBkbyBub3QgZGVmaW5lIE1LRElSX1AsIHNvIHdlIGRvIG91ciBvd24KLWRubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KLWRubCBNS0RJUl9QKS4KLUFDX1NVQlNUKFtta2Rpcl9wXSwgWyIkTUtESVJfUCJdKWRubAotY2FzZSAkbWtkaXJfcCBpbgotICBbW1xcLyRdXSogfCA/OltbXFwvXV0qKSA7OwotICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Ci1lc2FjCi1dKQotCi0jIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKLVtbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQotCi0jIF9BTV9TRVRfT1BUSU9OKE5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBvcHRpb24gTkFNRS4gIFByZXNlbnRseSB0aGF0IG9ubHkgbWVhbnMgZGVmaW5pbmcgYSBmbGFnIGZvciB0aGlzIG9wdGlvbi4KLUFDX0RFRlVOKFtfQU1fU0VUX09QVElPTl0sCi1bbTRfZGVmaW5lKF9BTV9NQU5HTEVfT1BUSU9OKFskMV0pLCBbMV0pXSkKLQotIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgotQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCi1bbTRfZm9yZWFjaF93KFtfQU1fT3B0aW9uXSwgWyQxXSwgW19BTV9TRVRfT1BUSU9OKF9BTV9PcHRpb24pXSldKQotCi0jIF9BTV9JRl9PUFRJT04oT1BUSU9OLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KLUFDX0RFRlVOKFtfQU1fSUZfT1BUSU9OXSwKLVttNF9pZnNldChfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWyQyXSwgWyQzXSldKQotCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgX0FNX1BST0dfQ0NfQ19PCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBMaWtlIEFDX1BST0dfQ0NfQ19PLCBidXQgY2hhbmdlZCBmb3IgYXV0b21ha2UuICBXZSByZXdyaXRlIEFDX1BST0dfQ0MKLSMgdG8gYXV0b21hdGljYWxseSBjYWxsIHRoaXMuCi1BQ19ERUZVTihbX0FNX1BST0dfQ0NfQ19PXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1BQ19SRVFVSVJFX0FVWF9GSUxFKFtjb21waWxlXSlkbmwKLUFDX0xBTkdfUFVTSChbQ10pZG5sCi1BQ19DQUNIRV9DSEVDSygKLSAgW3doZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlcl0sCi0gIFthbV9jdl9wcm9nX2NjX2Nfb10sCi0gIFtBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW10pXSkKLSAgIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCi0gICMgRm9sbG93aW5nIEFDX1BST0dfQ0NfQ19PLCB3ZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUKLSAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCi0gICMgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgotICBhbV9jdl9wcm9nX2NjX2Nfbz15ZXMKLSAgZm9yIGFtX2kgaW4gMSAyOyBkbwotICAgIGlmIEFNX1JVTl9MT0coWyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0XSkgXAotICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dDsgdGhlbgotICAgICAgOiBPSwotICAgIGVsc2UKLSAgICAgIGFtX2N2X3Byb2dfY2NfY19vPW5vCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgcm0gLWYgY29yZSBjb25mdGVzdCoKLSAgdW5zZXQgYW1faV0pCi1pZiB0ZXN0ICIkYW1fY3ZfcHJvZ19jY19jX28iICE9IHllczsgdGhlbgotICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KLSAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCi0gICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KLSAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKLSAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCi0gICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCi1maQotQUNfTEFOR19QT1AoW0NdKV0pCi0KLSMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1BQ19ERUZVTl9PTkNFKFtBTV9QUk9HX0NDX0NfT10sIFtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSldKQotCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLQotIyBBTV9QQVRIX1BZVEhPTihbTUlOSU1VTS1WRVJTSU9OXSwgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZHMgc3VwcG9ydCBmb3IgZGlzdHJpYnV0aW5nIFB5dGhvbiBtb2R1bGVzIGFuZCBwYWNrYWdlcy4gIFRvCi0jIGluc3RhbGwgbW9kdWxlcywgY29weSB0aGVtIHRvICQocHl0aG9uZGlyKSwgdXNpbmcgdGhlIHB5dGhvbl9QWVRIT04KLSMgYXV0b21ha2UgdmFyaWFibGUuICBUbyBpbnN0YWxsIGEgcGFja2FnZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlCi0jIGF1dG9tYWtlIHBhY2thZ2UsIGluc3RhbGwgdG8gJChwa2dweXRob25kaXIpLCBvciB1c2UgdGhlCi0jIHBrZ3B5dGhvbl9QWVRIT04gYXV0b21ha2UgdmFyaWFibGUuCi0jCi0jIFRoZSB2YXJpYWJsZXMgJChweWV4ZWNkaXIpIGFuZCAkKHBrZ3B5ZXhlY2RpcikgYXJlIHByb3ZpZGVkIGFzCi0jIGxvY2F0aW9ucyB0byBpbnN0YWxsIHB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyAoc2hhcmVkIGxpYnJhcmllcykuCi0jIEFub3RoZXIgbWFjcm8gaXMgcmVxdWlyZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgdG8gY29tcGlsZQotIyBleHRlbnNpb24gbW9kdWxlcy4KLSMKLSMgSWYgeW91ciBwYWNrYWdlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGRpZmZlcmVudCBwcmVmaXggdG8gcHl0aG9uLAotIyB1c2VycyB3aWxsIGhhdmUgdG8gYWRkIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSB0byB0aGUgUFlUSE9OUEFUSAotIyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgY3JlYXRlIGEgLnB0aCBmaWxlIChzZWUgdGhlIHB5dGhvbgotIyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4KLSMKLSMgSWYgdGhlIE1JTklNVU0tVkVSU0lPTiBhcmd1bWVudCBpcyBwYXNzZWQsIEFNX1BBVEhfUFlUSE9OIHdpbGwKLSMgY2F1c2UgYW4gZXJyb3IgaWYgdGhlIHZlcnNpb24gb2YgcHl0aG9uIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtCi0jIGRvZXNuJ3QgbWVldCB0aGUgcmVxdWlyZW1lbnQuICBNSU5JTVVNLVZFUlNJT04gc2hvdWxkIGNvbnNpc3Qgb2YKLSMgbnVtYmVycyBhbmQgZG90cyBvbmx5LgotQUNfREVGVU4oW0FNX1BBVEhfUFlUSE9OXSwKLSBbCi0gIGRubCBGaW5kIGEgUHl0aG9uIGludGVycHJldGVyLiAgUHl0aG9uIHZlcnNpb25zIHByaW9yIHRvIDIuMCBhcmUgbm90Ci0gIGRubCBzdXBwb3J0ZWQuICgyLjAgd2FzIHJlbGVhc2VkIG9uIE9jdG9iZXIgMTYsIDIwMDApLgotICBtNF9kZWZpbmVfZGVmYXVsdChbX0FNX1BZVEhPTl9JTlRFUlBSRVRFUl9MSVNUXSwKLVtweXRob24gcHl0aG9uMiBweXRob24zIHB5dGhvbjMuMyBweXRob24zLjIgcHl0aG9uMy4xIHB5dGhvbjMuMCBweXRob24yLjcgZG5sCi0gcHl0aG9uMi42IHB5dGhvbjIuNSBweXRob24yLjQgcHl0aG9uMi4zIHB5dGhvbjIuMiBweXRob24yLjEgcHl0aG9uMi4wXSkKLQotICBBQ19BUkdfVkFSKFtQWVRIT05dLCBbdGhlIFB5dGhvbiBpbnRlcnByZXRlcl0pCi0KLSAgbTRfaWYoWyQxXSxbXSxbCi0gICAgZG5sIE5vIHZlcnNpb24gY2hlY2sgaXMgbmVlZGVkLgotICAgICMgRmluZCBhbnkgUHl0aG9uIGludGVycHJldGVyLgotICAgIGlmIHRlc3QgLXogIiRQWVRIT04iOyB0aGVuCi0gICAgICBBQ19QQVRIX1BST0dTKFtQWVRIT05dLCBfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1QsIDopCi0gICAgZmkKLSAgICBhbV9kaXNwbGF5X1BZVEhPTj1weXRob24KLSAgXSwgWwotICAgIGRubCBBIHZlcnNpb24gY2hlY2sgaXMgbmVlZGVkLgotICAgIGlmIHRlc3QgLW4gIiRQWVRIT04iOyB0aGVuCi0gICAgICAjIElmIHRoZSB1c2VyIHNldCAkUFlUSE9OLCB1c2UgaXQgYW5kIGRvbid0IHNlYXJjaCBzb21ldGhpbmcgZWxzZS4KLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciAkUFlUSE9OIHZlcnNpb24gaXMgPj0gJDFdKQotICAgICAgQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT04oWyRQWVRIT05dLCBbJDFdLAotCQkJICAgICAgW0FDX01TR19SRVNVTFQoW3llc10pXSwKLQkJCSAgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pCi0JCQkgICAgICAgQUNfTVNHX0VSUk9SKFtQeXRob24gaW50ZXJwcmV0ZXIgaXMgdG9vIG9sZF0pXSkKLSAgICAgIGFtX2Rpc3BsYXlfUFlUSE9OPSRQWVRIT04KLSAgICBlbHNlCi0gICAgICAjIE90aGVyd2lzZSwgdHJ5IGVhY2ggaW50ZXJwcmV0ZXIgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBzYXRpc2ZpZXMKLSAgICAgICMgVkVSU0lPTi4KLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgYSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCB2ZXJzaW9uID49ICQxXSwKLQlbYW1fY3ZfcGF0aGxlc3NfUFlUSE9OXSxbCi0JZm9yIGFtX2N2X3BhdGhsZXNzX1BZVEhPTiBpbiBfQU1fUFlUSE9OX0lOVEVSUFJFVEVSX0xJU1Qgbm9uZTsgZG8KLQkgIHRlc3QgIiRhbV9jdl9wYXRobGVzc19QWVRIT04iID0gbm9uZSAmJiBicmVhawotCSAgQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT04oWyRhbV9jdl9wYXRobGVzc19QWVRIT05dLCBbJDFdLCBbYnJlYWtdKQotCWRvbmVdKQotICAgICAgIyBTZXQgJFBZVEhPTiB0byB0aGUgYWJzb2x1dGUgcGF0aCBvZiAkYW1fY3ZfcGF0aGxlc3NfUFlUSE9OLgotICAgICAgaWYgdGVzdCAiJGFtX2N2X3BhdGhsZXNzX1BZVEhPTiIgPSBub25lOyB0aGVuCi0JUFlUSE9OPToKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfUEFUSF9QUk9HKFtQWVRIT05dLCBbJGFtX2N2X3BhdGhsZXNzX1BZVEhPTl0pCi0gICAgICBmaQotICAgICAgYW1fZGlzcGxheV9QWVRIT049JGFtX2N2X3BhdGhsZXNzX1BZVEhPTgotICAgIGZpCi0gIF0pCi0KLSAgaWYgdGVzdCAiJFBZVEhPTiIgPSA6OyB0aGVuCi0gIGRubCBSdW4gYW55IHVzZXItc3BlY2lmaWVkIGFjdGlvbiwgb3IgYWJvcnQuCi0gICAgbTRfZGVmYXVsdChbJDNdLCBbQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJsZSBQeXRob24gaW50ZXJwcmV0ZXIgZm91bmRdKV0pCi0gIGVsc2UKLQotICBkbmwgUXVlcnkgUHl0aG9uIGZvciBpdHMgdmVyc2lvbiBudW1iZXIuICBHZXR0aW5nIFs6M10gc2VlbXMgdG8gYmUKLSAgZG5sIHRoZSBiZXN0IHdheSB0byBkbyB0aGlzOyBpdCdzIHdoYXQgInNpdGUucHkiIGRvZXMgaW4gdGhlIHN0YW5kYXJkCi0gIGRubCBsaWJyYXJ5LgotCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb25dLCBbYW1fY3ZfcHl0aG9uX3ZlcnNpb25dLAotICAgIFthbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbltbOjNdXSkiYF0pCi0gIEFDX1NVQlNUKFtQWVRIT05fVkVSU0lPTl0sIFskYW1fY3ZfcHl0aG9uX3ZlcnNpb25dKQotCi0gIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0gIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKLSAgZG5sIGRpc3RpbmN0IHZhcmlhYmxlcyBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGlmIG5lZWQgYmUuICBIb3dldmVyLAotICBkbmwgZ2VuZXJhbCBjb25zZW5zdXMgaXMgdGhhdCB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhYmlsaXR5LgotCi0gIEFDX1NVQlNUKFtQWVRIT05fUFJFRklYXSwgWycke3ByZWZpeH0nXSkKLSAgQUNfU1VCU1QoW1BZVEhPTl9FWEVDX1BSRUZJWF0sIFsnJHtleGVjX3ByZWZpeH0nXSkKLQotICBkbmwgQXQgdGltZXMgKGxpa2Ugd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKSB5b3UgbWF5IHdhbnQKLSAgZG5sIHRvIGtub3cgd2hpY2ggT1MgcGxhdGZvcm0gUHl0aG9uIHRoaW5rcyB0aGlzIGlzLgotCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHBsYXRmb3JtXSwgW2FtX2N2X3B5dGhvbl9wbGF0Zm9ybV0sCi0gICAgW2FtX2N2X3B5dGhvbl9wbGF0Zm9ybT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMucGxhdGZvcm0pImBdKQotICBBQ19TVUJTVChbUFlUSE9OX1BMQVRGT1JNXSwgWyRhbV9jdl9weXRob25fcGxhdGZvcm1dKQotCi0gICMgSnVzdCBmYWN0b3Igb3V0IHNvbWUgY29kZSBkdXBsaWNhdGlvbi4KLSAgYW1fcHl0aG9uX3NldHVwX3N5c2NvbmZpZz0iXAotaW1wb3J0IHN5cwotIyBQcmVmZXIgc3lzY29uZmlnIG92ZXIgZGlzdHV0aWxzLnN5c2NvbmZpZywgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5Ci0jIHdpdGggcHl0aG9uIDMueC4gIFNlZSBhdXRvbWFrZSBidWcjMTAyMjcuCi10cnk6Ci0gICAgaW1wb3J0IHN5c2NvbmZpZwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGNhbl91c2Vfc3lzY29uZmlnID0gMAotZWxzZToKLSAgICBjYW5fdXNlX3N5c2NvbmZpZyA9IDEKLSMgQ2FuJ3QgdXNlIHN5c2NvbmZpZyBpbiBDUHl0aG9uIDIuNywgc2luY2UgaXQncyBicm9rZW4gaW4gdmlydHVhbGVudnM6Ci0jIDxodHRwczovL2dpdGh1Yi5jb20vcHlwYS92aXJ0dWFsZW52L2lzc3Vlcy8xMTg+Ci10cnk6Ci0gICAgZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX2ltcGxlbWVudGF0aW9uCi0gICAgaWYgcHl0aG9uX2ltcGxlbWVudGF0aW9uKCkgPT0gJ0NQeXRob24nIGFuZCBzeXMudmVyc2lvbltbOjNdXSA9PSAnMi43JzoKLSAgICAgICAgY2FuX3VzZV9zeXNjb25maWcgPSAwCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcyIKLQotICBkbmwgU2V0IHVwIDQgZGlyZWN0b3JpZXM6Ci0KLSAgZG5sIHB5dGhvbmRpciAtLSB3aGVyZSB0byBpbnN0YWxsIHB5dGhvbiBzY3JpcHRzLiAgVGhpcyBpcyB0aGUKLSAgZG5sICAgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIG5vdCB0aGUgcHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkKLSAgZG5sICAgZGlyZWN0b3J5IGxpa2UgaW4gcHJldmlvdXMgYXV0b21ha2UgYmV0YXMuICBUaGlzIGJlaGF2aW9yCi0gIGRubCAgIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGxpc3BkaXIubTQgZm9yIGV4YW1wbGUuCi0gIGRubCBRdWVyeSBkaXN0dXRpbHMgZm9yIHRoaXMgZGlyZWN0b3J5LgotICBBQ19DQUNIRV9DSEVDSyhbZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBzY3JpcHQgZGlyZWN0b3J5XSwKLSAgICBbYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcl0sCi0gICAgW2lmIHRlc3QgIngkcHJlZml4IiA9IHhOT05FCi0gICAgIHRoZW4KLSAgICAgICBhbV9weV9wcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Ci0gICAgIGVsc2UKLSAgICAgICBhbV9weV9wcmVmaXg9JHByZWZpeAotICAgICBmaQotICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWAkUFlUSE9OIC1jICIKLSRhbV9weXRob25fc2V0dXBfc3lzY29uZmlnCi1pZiBjYW5fdXNlX3N5c2NvbmZpZzoKLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9wYXRoKCdwdXJlbGliJywgdmFycz17J2Jhc2UnOickYW1fcHlfcHJlZml4J30pCi1lbHNlOgotICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCi1zeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpImAKLSAgICAgY2FzZSAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciBpbgotICAgICAkYW1fcHlfcHJlZml4KikKLSAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCi0gICAgICAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj1gZWNobyAiJGFtX2N2X3B5dGhvbl9weXRob25kaXIiIHwgc2VkICJzLF4kYW1fX3N0cmlwX3ByZWZpeCwkUFlUSE9OX1BSRUZJWCwiYAotICAgICAgIDs7Ci0gICAgICopCi0gICAgICAgY2FzZSAkYW1fcHlfcHJlZml4IGluCi0gICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OwotICAgICAgICAgKikKLQkgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9JFBZVEhPTl9QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCi0JICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwotICAgICBlc2FjCi0gICAgXSkKLSAgQUNfU1VCU1QoW3B5dGhvbmRpcl0sIFskYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcl0pCi0KLSAgZG5sIHBrZ3B5dGhvbmRpciAtLSAkUEFDS0FHRSBkaXJlY3RvcnkgdW5kZXIgcHl0aG9uZGlyLiAgV2FzCi0gIGRubCAgIFBZVEhPTl9TSVRFX1BBQ0tBR0UgaW4gcHJldmlvdXMgYmV0YXMsIGJ1dCB0aGlzIG5hbWluZyBpcwotICBkbmwgICBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiBhdXRvbWFrZS4KLQotICBBQ19TVUJTVChbcGtncHl0aG9uZGlyXSwgW1wke3B5dGhvbmRpcn0vJFBBQ0tBR0VdKQotCi0gIGRubCBweWV4ZWNkaXIgLS0gZGlyZWN0b3J5IGZvciBpbnN0YWxsaW5nIHB5dGhvbiBleHRlbnNpb24gbW9kdWxlcwotICBkbmwgICAoc2hhcmVkIGxpYnJhcmllcykKLSAgZG5sIFF1ZXJ5IGRpc3R1dGlscyBmb3IgdGhpcyBkaXJlY3RvcnkuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIGV4dGVuc2lvbiBtb2R1bGUgZGlyZWN0b3J5XSwKLSAgICBbYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcl0sCi0gICAgW2lmIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUKLSAgICAgdGhlbgotICAgICAgIGFtX3B5X2V4ZWNfcHJlZml4PSRhbV9weV9wcmVmaXgKLSAgICAgZWxzZQotICAgICAgIGFtX3B5X2V4ZWNfcHJlZml4PSRleGVjX3ByZWZpeAotICAgICBmaQotICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWAkUFlUSE9OIC1jICIKLSRhbV9weXRob25fc2V0dXBfc3lzY29uZmlnCi1pZiBjYW5fdXNlX3N5c2NvbmZpZzoKLSAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0bGliJywgdmFycz17J3BsYXRiYXNlJzonJGFtX3B5X3ByZWZpeCd9KQotZWxzZToKLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYigxLCAwLCBwcmVmaXg9JyRhbV9weV9wcmVmaXgnKQotc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCi0gICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIgaW4KLSAgICAgJGFtX3B5X2V4ZWNfcHJlZml4KikKLSAgICAgICBhbV9fc3RyaXBfcHJlZml4PWBlY2hvICIkYW1fcHlfZXhlY19wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKLSAgICAgICBhbV9jdl9weXRob25fcHlleGVjZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fRVhFQ19QUkVGSVgsImAKLSAgICAgICA7OwotICAgICAqKQotICAgICAgIGNhc2UgJGFtX3B5X2V4ZWNfcHJlZml4IGluCi0gICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OwotICAgICAgICAgKikKLQkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fRVhFQ19QUkVGSVgvbGliL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCi0JICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgZXNhYwotICAgIF0pCi0gIEFDX1NVQlNUKFtweWV4ZWNkaXJdLCBbJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXJdKQotCi0gIGRubCBwa2dweWV4ZWNkaXIgLS0gJChweWV4ZWNkaXIpLyQoUEFDS0FHRSkKLQotICBBQ19TVUJTVChbcGtncHlleGVjZGlyXSwgW1wke3B5ZXhlY2Rpcn0vJFBBQ0tBR0VdKQotCi0gIGRubCBSdW4gYW55IHVzZXItc3BlY2lmaWVkIGFjdGlvbi4KLSAgJDIKLSAgZmkKLQotXSkKLQotCi0jIEFNX1BZVEhPTl9DSEVDS19WRVJTSU9OKFBST0csIFZFUlNJT04sIFtBQ1RJT04tSUYtVFJVRV0sIFtBQ1RJT04tSUYtRkFMU0VdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIEFDVElPTi1JRi1UUlVFIGlmIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgUFJPRyBoYXMgdmVyc2lvbiA+PSBWRVJTSU9OLgotIyBSdW4gQUNUSU9OLUlGLUZBTFNFIG90aGVyd2lzZS4KLSMgVGhpcyB0ZXN0IHVzZXMgc3lzLmhleHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgc3RyaW5nIGVxdWl2YWxlbnQgKGZpcnN0Ci0jIHdvcmQgb2Ygc3lzLnZlcnNpb24pLCBpbiBvcmRlciB0byBjb3BlIHdpdGggdmVyc2lvbnMgc3VjaCBhcyAyLjJjMS4KLSMgVGhpcyBzdXBwb3J0cyBQeXRob24gMi4wIG9yIGhpZ2hlci4gKDIuMCB3YXMgcmVsZWFzZWQgb24gT2N0b2JlciAxNiwgMjAwMCkuCi1BQ19ERUZVTihbQU1fUFlUSE9OX0NIRUNLX1ZFUlNJT05dLAotIFtwcm9nPSJpbXBvcnQgc3lzCi0jIHNwbGl0IHN0cmluZ3MgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMuICBBcHBlbmQgc29tZSB6ZXJvcwotIyBiZWNhdXNlIHdlIG5lZWQgYXQgbGVhc3QgNCBkaWdpdHMgZm9yIHRoZSBoZXggY29udmVyc2lvbi4KLSMgbWFwIHJldHVybnMgYW4gaXRlcmF0b3IgaW4gUHl0aG9uIDMuMCBhbmQgYSBsaXN0IGluIDIueAotbWludmVyID0gbGlzdChtYXAoaW50LCAnJDInLnNwbGl0KCcuJykpKSArIFtbMCwgMCwgMF1dCi1taW52ZXJoZXggPSAwCi0jIHhyYW5nZSBpcyBub3QgcHJlc2VudCBpbiBQeXRob24gMy4wIGFuZCByYW5nZSByZXR1cm5zIGFuIGl0ZXJhdG9yCi1mb3IgaSBpbiBsaXN0KHJhbmdlKDAsIDQpKTogbWludmVyaGV4ID0gKG1pbnZlcmhleCA8PCA4KSArIG1pbnZlcltbaV1dCi1zeXMuZXhpdChzeXMuaGV4dmVyc2lvbiA8IG1pbnZlcmhleCkiCi0gIEFTX0lGKFtBTV9SVU5fTE9HKFskMSAtYyAiJHByb2ciXSldLCBbJDNdLCBbJDRdKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBBTV9SVU5fTE9HKENPTU1BTkQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIENPTU1BTkQsIHNhdmUgdGhlIGV4aXQgc3RhdHVzIGluIGFjX3N0YXR1cywgYW5kIGxvZyBpdC4KLSMgKFRoaXMgaGFzIGJlZW4gYWRhcHRlZCBmcm9tIEF1dG9jb25mJ3MgX0FDX1JVTl9MT0cgbWFjcm8uKQotQUNfREVGVU4oW0FNX1JVTl9MT0ddLAotW3sgZWNobyAiJGFzX21lOiRMSU5FTk86ICQxIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAoJDEpID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGFjX3N0YXR1cz0kPwotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIChleGl0ICRhY19zdGF0dXMpOyB9XSkKLQotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fU0FOSVRZX0NIRUNLCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCi1bQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQotIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKLSMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KLWFtX2xmPScKLScKLWNhc2UgYHB3ZGAgaW4KLSAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCi0gICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKLWVzYWMKLWNhc2UgJHNyY2RpciBpbgotICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCi0gICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiAnJHNyY2RpciddKTs7Ci1lc2FjCi0KLSMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKLSMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQotIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwotIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKLSMgZGlyZWN0b3J5KS4KLWlmICgKLSAgIGFtX2hhc19zbGVwdD1ubwotICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCi0gICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQotICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCi0JIyAtTCBkaWRuJ3Qgd29yay4KLQlzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAotICAgICBmaQotICAgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCi0JJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KLQotCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLQkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCi0JIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQotCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLQlBQ19NU0dfRVJST1IoW2xzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLSAgYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCi0gICAgIGZpCi0gICAgIGlmIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4KLSAgICAgICBicmVhawotICAgICBmaQotICAgICAjIEp1c3QgaW4gY2FzZS4KLSAgICAgc2xlZXAgMQotICAgICBhbV9oYXNfc2xlcHQ9eWVzCi0gICBkb25lCi0gICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKLSAgICkKLXRoZW4KLSAgICMgT2suCi0gICA6Ci1lbHNlCi0gICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQotZmkKLUFDX01TR19SRVNVTFQoW3llc10pCi0jIElmIHdlIGRpZG4ndCBzbGVlcCwgd2Ugc3RpbGwgbmVlZCB0byBlbnN1cmUgdGltZSBzdGFtcHMgb2YgY29uZmlnLnN0YXR1cyBhbmQKLSMgZ2VuZXJhdGVkIGZpbGVzIGFyZSBzdHJpY3RseSBuZXdlci4KLWFtX3NsZWVwX3BpZD0KLWlmIGdyZXAgJ3NsZXB0OiBubycgY29uZnRlc3QuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgKCBzbGVlcCAxICkgJgotICBhbV9zbGVlcF9waWQ9JCEKLWZpCi1BQ19DT05GSUdfQ09NTUFORFNfUFJFKAotICBbQUNfTVNHX0NIRUNLSU5HKFt0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmVdKQotICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KLSAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgotICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKLSAgIGZpCi0gICBBQ19NU0dfUkVTVUxUKFtkb25lXSldKQotcm0gLWYgY29uZnRlc3QuZmlsZQotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKLSMgKCJ5ZXMiIGJlaW5nIGxlc3MgdmVyYm9zZSwgIm5vIiBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KLUFDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAotW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sIFtkbmwKLUFTX0hFTFBfU1RSSU5HKAotICBbLS1lbmFibGUtc2lsZW50LXJ1bGVzXSwKLSAgW2xlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpXSkKLUFTX0hFTFBfU1RSSU5HKAotICBbLS1kaXNhYmxlLXNpbGVudC1ydWxlc10sCi0gIFt2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIildKWRubAotXSkKLWNhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gQCU6QCAoKCgKLSAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLSAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLSAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT1tNF9pZihbJDFdLCBbeWVzXSwgWzBdLCBbMV0pOzsKLWVzYWMKLWRubAotZG5sIEEgZmV3ICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIE5vblN0b3AgT1MgYW5kIE5leHRTdGVwKQotZG5sIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCB2YXJpYWJsZSBleHBhbnNpb25zLgotZG5sIFNlZSBhdXRvbWFrZSBidWcjOTkyOCBhbmQgYnVnIzEwMjM3LgotYW1fbWFrZT0ke01BS0UtbWFrZX0KLUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXNdLAotICAgW2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzXSwKLSAgIFtpZiBBU19FQ0hPKFtbJ1RSVUU9JChCQVIkKFYpKQotQkFSMD1mYWxzZQotQkFSMT10cnVlCi1WPTEKLWFtX19kb2l0OgotCUAkKFRSVUUpCi0uUEhPTlk6IGFtX19kb2l0J11dKSB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcwotZWxzZQotICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubwotZmldKQotaWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KLSAgZG5sIFVzaW5nICckVicgaW5zdGVhZCBvZiAnJChWKScgYnJlYWtzIElSSVggbWFrZS4KLSAgQU1fVj0nJChWKScKLSAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKLWVsc2UKLSAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKLSAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQotZmkKLUFDX1NVQlNUKFtBTV9WXSlkbmwKLUFNX1NVQlNUX05PVE1BS0UoW0FNX1ZdKWRubAotQUNfU1VCU1QoW0FNX0RFRkFVTFRfVl0pZG5sCi1BTV9TVUJTVF9OT1RNQUtFKFtBTV9ERUZBVUxUX1ZdKWRubAotQUNfU1VCU1QoW0FNX0RFRkFVTFRfVkVSQk9TSVRZXSlkbmwKLUFNX0JBQ0tTTEFTSD0nXCcKLUFDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAotX0FNX1NVQlNUX05PVE1BS0UoW0FNX0JBQ0tTTEFTSF0pZG5sCi1dKQotCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NUUklQCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgJ2luc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKLSMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5Ci0jIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCi0jIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgotIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCi0jIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiAibWFrZSBpbnN0YWxsLXN0cmlwIiwgYW5kIGluaXRpYWxpemUKLSMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KLUFDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAotW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCi0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyAnc3RyaXAnIHdoZW4gdGhlIHVzZXIKLSMgcnVuICJtYWtlIGluc3RhbGwtc3RyaXAiLiAgSG93ZXZlciAnc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKLSMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKLSMgd2lsbCBob25vciB0aGUgJ1NUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCi1kbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSAnbWF5YmUnLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KLSAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQotZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCi1BQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQotCi0jIENvcHlyaWdodCAoQykgMjAwNi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgX0FNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcmV2ZW50IEF1dG9tYWtlIGZyb20gb3V0cHV0dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCi0jIFRoaXMgbWFjcm8gaXMgdHJhY2VkIGJ5IEF1dG9tYWtlLgotQUNfREVGVU4oW19BTV9TVUJTVF9OT1RNQUtFXSkKLQotIyBBTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgotQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKLQotIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgX0FNX1BST0dfVEFSKEZPUk1BVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KLSMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgJ3Y3JywgJ3VzdGFyJywgb3IgJ3BheCcuCi0jCi0jIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX190YXIpIHRoYXQgaXMgYSBjb21tYW5kCi0jIHdyaXRpbmcgdG8gc3Rkb3V0IGEgRk9STUFULXRhcmJhbGwgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5Ci0jICR0YXJkaXIuCi0jICAgICB0YXJkaXI9ZGlyZWN0b3J5ICYmICQoYW1fX3RhcikgPiByZXN1bHQudGFyCi0jCi0jIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKLSMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KLSMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKLSMKLUFDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAotWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCi0jIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KLUFDX1NVQlNUKFtBTVRBUl0sIFsnJCR7VEFSLXRhcn0nXSkKLQotIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgotX2FtX3Rvb2xzPSdnbnV0YXIgbTRfaWYoWyQxXSwgW3VzdGFyXSwgW3BsYWludGFyXSkgcGF4IGNwaW8gbm9uZScKLQotbTRfaWYoWyQxXSwgW3Y3XSwKLSAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKLQotICBbbTRfY2FzZShbJDFdLAotICAgIFt1c3Rhcl0sCi0gICAgIFsjIFRoZSBQT1NJWCAxOTg4ICd1c3RhcicgZm9ybWF0IGlzIGRlZmluZWQgd2l0aCBmaXhlZC1zaXplIGZpZWxkcy4KLSAgICAgICMgVGhlcmUgaXMgbm90YWJseSBhIDIxIGJpdHMgbGltaXQgZm9yIHRoZSBVSUQgYW5kIHRoZSBHSUQuICBJbiBmYWN0LAotICAgICAgIyB0aGUgJ3BheCcgdXRpbGl0eSBjYW4gaGFuZyBvbiBiaWdnZXIgVUlEL0dJRCAoc2VlIGF1dG9tYWtlIGJ1ZyM4MzQzCi0gICAgICAjIGFuZCBidWcjMTM1ODgpLgotICAgICAgYW1fbWF4X3VpZD0yMDk3MTUxICMgMl4yMSAtIDEKLSAgICAgIGFtX21heF9naWQ9JGFtX21heF91aWQKLSAgICAgICMgVGhlICRVSUQgYW5kICRHSUQgdmFyaWFibGVzIGFyZSBub3QgcG9ydGFibGUsIHNvIHdlIG5lZWQgdG8gcmVzb3J0Ci0gICAgICAjIHRvIHRoZSBQT1NJWC1tYW5kYXRlZCBpZCgxKSB1dGlsaXR5LiAgRXJyb3JzIGluIHRoZSAnaWQnIGNhbGxzCi0gICAgICAjIGJlbG93IGFyZSBkZWZpbml0ZWx5IHVuZXhwZWN0ZWQsIHNvIGFsbG93IHRoZSB1c2VycyB0byBzZWUgdGhlbQotICAgICAgIyAodGhhdCBpcywgYXZvaWQgc3RkZXJyIHJlZGlyZWN0aW9uKS4KLSAgICAgIGFtX3VpZD1gaWQgLXUgfHwgZWNobyB1bmtub3duYAotICAgICAgYW1fZ2lkPWBpZCAtZyB8fCBlY2hvIHVua25vd25gCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgVUlEICckYW1fdWlkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0XSkKLSAgICAgIGlmIHRlc3QgJGFtX3VpZCAtbGUgJGFtX21heF91aWQ7IHRoZW4KLSAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0gICAgICBlbHNlCi0gICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgICAgICBfYW1fdG9vbHM9bm9uZQotICAgICAgZmkKLSAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBHSUQgJyRhbV9naWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQotICAgICAgaWYgdGVzdCAkYW1fZ2lkIC1sZSAkYW1fbWF4X2dpZDsgdGhlbgotICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgICAgICBfYW1fdG9vbHM9bm9uZQotICAgICAgZmldLAotCi0gIFtwYXhdLAotICAgIFtdLAotCi0gIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQotCi0gIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKLQotICAjIEdvIGFoZWFkIGV2ZW4gaWYgd2UgaGF2ZSB0aGUgdmFsdWUgYWxyZWFkeSBjYWNoZWQuICBXZSBkbyBzbyBiZWNhdXNlIHdlCi0gICMgbmVlZCB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlICdhbV9fdGFyJyBhbmQgJ2FtX191bnRhcicgdmFyaWFibGVzLgotICBfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQotCi0gIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzOyBkbwotICAgIGNhc2UgJF9hbV90b29sIGluCi0gICAgZ251dGFyKQotICAgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOyBkbwotICAgICAgICBBTV9SVU5fTE9HKFskX2FtX3RhciAtLXZlcnNpb25dKSAmJiBicmVhawotICAgICAgZG9uZQotICAgICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCi0gICAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkdGFyZGlyIicKLSAgICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCi0gICAgICA7OwotICAgIHBsYWludGFyKQotICAgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKLSAgICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCi0gICAgICAodGFyIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxICYmIGNvbnRpbnVlCi0gICAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKLSAgICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJwotICAgICAgYW1fX3VudGFyPSd0YXIgeGYgLScKLSAgICAgIDs7Ci0gICAgcGF4KQotICAgICAgYW1fX3Rhcj0ncGF4IC1MIC14ICQxIC13ICIkJHRhcmRpciInCi0gICAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKLSAgICAgIGFtX191bnRhcj0ncGF4IC1yJwotICAgICAgOzsKLSAgICBjcGlvKQotICAgICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCi0gICAgICBhbV9fdGFyXz0nZmluZCAiJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKLSAgICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKLSAgICAgIDs7Ci0gICAgbm9uZSkKLSAgICAgIGFtX190YXI9ZmFsc2UKLSAgICAgIGFtX190YXJfPWZhbHNlCi0gICAgICBhbV9fdW50YXI9ZmFsc2UKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBJZiB0aGUgdmFsdWUgd2FzIGNhY2hlZCwgc3RvcCBub3cuICBXZSBqdXN0IHdhbnRlZCB0byBoYXZlIGFtX190YXIKLSAgICAjIGFuZCBhbV9fdW50YXIgc2V0LgotICAgIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhawotCi0gICAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzLgotICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgICBta2RpciBjb25mdGVzdC5kaXIKLSAgICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCi0gICAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKLSAgICBybSAtcmYgY29uZnRlc3QuZGlyCi0gICAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KLSAgICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCi0gICAgICBBTV9SVU5fTE9HKFtjYXQgY29uZnRlc3QuZGlyL2ZpbGVdKQotICAgICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBybSAtcmYgY29uZnRlc3QuZGlyCi0KLSAgQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQotICBBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCi0KLUFDX1NVQlNUKFthbV9fdGFyXSkKLUFDX1NVQlNUKFthbV9fdW50YXJdKQotXSkgIyBfQU1fUFJPR19UQVIKLQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvYXMtYXV0by1hbHQubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLWxpYnRvb2wubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2FzLXZlcnNpb24ubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvYXhfcHRocmVhZC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWFyY2gubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1hcmdzLm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtY2hlY2subTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1kZWZhdWx0Lm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWVycm9yLm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LWdldHRleHQubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1nbGliMi5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTRdKQotbTRfaW5jbHVkZShbY29tbW9uL200L2dzdC5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvZ3RrLWRvYy5tNF0pCi1tNF9pbmNsdWRlKFtjb21tb24vbTQvb3JjLm00XSkKLW00X2luY2x1ZGUoW2NvbW1vbi9tNC9wa2cubTRdKQotbTRfaW5jbHVkZShbbTQvYWFsaWIubTRdKQotbTRfaW5jbHVkZShbbTQvZ2V0dGV4dC5tNF0pCi1tNF9pbmNsdWRlKFttNC9nc3QtZmlvbnJlYWQubTRdKQotbTRfaW5jbHVkZShbbTQvaWNvbnYubTRdKQotbTRfaW5jbHVkZShbbTQvaW50bG1hY29zeC5tNF0pCi1tNF9pbmNsdWRlKFttNC9saWItbGQubTRdKQotbTRfaW5jbHVkZShbbTQvbGliLWxpbmsubTRdKQotbTRfaW5jbHVkZShbbTQvbGliLXByZWZpeC5tNF0pCi1tNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKLW00X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCi1tNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKLW00X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCi1tNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCi1tNF9pbmNsdWRlKFttNC9ubHMubTRdKQotbTRfaW5jbHVkZShbbTQvcG8ubTRdKQotbTRfaW5jbHVkZShbbTQvcHJvZ3Rlc3QubTRdKQpkaWZmIC0tZ2l0IGEvYXV0b2dlbi5zaCBiL2F1dG9nZW4uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk5MDQyMGYuLjAwMDAwMDAKLS0tIGEvYXV0b2dlbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgZ3N0LXBsdWdpbnMtZ29vZCBhdXRvZ2VuLnNoCi0jCi0jIFJ1biB0aGlzIHRvIGdlbmVyYXRlIGFsbCB0aGUgaW5pdGlhbCBtYWtlZmlsZXMsIGV0Yy4KLSMKLSMgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIGNvbW1vbi9hdXRvZ2VuLnNoLmluIHZpYSBjb21tb24vdXBkYXRlLWF1dG9nZW4KLQotCi10ZXN0IC1uICIkc3JjZGlyIiB8fCBzcmNkaXI9YGRpcm5hbWUgIiQwImAKLXRlc3QgLW4gIiRzcmNkaXIiIHx8IHNyY2Rpcj0uCi0KLW9sZGRpcj1gcHdkYAotY2QgIiRzcmNkaXIiCi0KLXBhY2thZ2U9Z3N0LXBsdWdpbnMtZ29vZAotc3JjZmlsZT1nc3QtcGx1Z2lucy1nb29kLmRvYXAKLQotIyBNYWtlIHN1cmUgd2UgaGF2ZSBjb21tb24KLWlmIHRlc3QgISAtZiBjb21tb24vZ3N0LWF1dG9nZW4uc2g7Ci10aGVuCi0gIGVjaG8gIisgU2V0dGluZyB1cCBjb21tb24gc3VibW9kdWxlIgotICBnaXQgc3VibW9kdWxlIGluaXQKLWZpCi1naXQgc3VibW9kdWxlIHVwZGF0ZQotCi0jIHNvdXJjZSBoZWxwZXIgZnVuY3Rpb25zCi1pZiB0ZXN0ICEgLWYgY29tbW9uL2dzdC1hdXRvZ2VuLnNoOwotdGhlbgotICBlY2hvIFRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHlvdXIgc291cmNlIHRyZWUuCi0gIGVjaG8gWW91IGFyZSBtaXNzaW5nIGNvbW1vbi9nc3QtYXV0b2dlbi5zaAotICBleGl0IDEKLWZpCi0uIGNvbW1vbi9nc3QtYXV0b2dlbi5zaAotCi0jIGluc3RhbGwgcHJlLWNvbW1pdCBob29rIGZvciBkb2luZyBjbGVhbiBjb21taXRzCi1pZiB0ZXN0ICEgXCggLXggLmdpdC9ob29rcy9wcmUtY29tbWl0IC1hIC1MIC5naXQvaG9va3MvcHJlLWNvbW1pdCBcKTsKLXRoZW4KLSAgICBybSAtZiAuZ2l0L2hvb2tzL3ByZS1jb21taXQKLSAgICBpZiAhIGxuIC1zIC4uLy4uL2NvbW1vbi9ob29rcy9wcmUtY29tbWl0Lmhvb2sgLmdpdC9ob29rcy9wcmUtY29tbWl0IDI+IC9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgICAgZWNobyAiRmFpbGVkIHRvIGNyZWF0ZSBjb21taXQgaG9vayBzeW1saW5rLCBjb3B5aW5nIGluc3RlYWQgLi4uIgotICAgICAgICBjcCBjb21tb24vaG9va3MvcHJlLWNvbW1pdC5ob29rIC5naXQvaG9va3MvcHJlLWNvbW1pdAotICAgIGZpCi1maQotCi0jIEdOVSBnZXR0ZXh0IGF1dG9tYWtlIHN1cHBvcnQgZG9lc24ndCBnZXQgYWxvbmcgd2l0aCBnaXQuCi0jIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NjExMjgKLWlmIHRlc3QgLWQgcG8gOyB0aGVuCi0gIHRvdWNoIC10IDIwMDAwMTAxMDAwMCBwby9nc3QtcGx1Z2lucy1nb29kLTEuMC5wb3QKLWZpCi0KLUNPTkZJR1VSRV9ERUZfT1BUPSctLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgLS1lbmFibGUtZ3RrLWRvYycKLQotaWYgdGVzdCAieCRwYWNrYWdlIiA9ICJ4Z3N0cmVhbWVyIjsgdGhlbgotICBDT05GSUdVUkVfREVGX09QVD0iJENPTkZJR1VSRV9ERUZfT1BUIC0tZW5hYmxlLWRvY2Jvb2sgLS1lbmFibGUtZmFpbGluZy10ZXN0cyAtLWVuYWJsZS1wb2lzb25pbmciCi1lbGlmIHRlc3QgIngkcGFja2FnZSIgPSAieGdzdC1wbHVnaW5zLWJhZCI7IHRoZW4KLSAgQ09ORklHVVJFX0RFRl9PUFQ9IiRDT05GSUdVUkVfREVGX09QVCAtLXdpdGgtcGxheWVyLXRlc3RzIgotZmkKLQotYXV0b2dlbl9vcHRpb25zICRACi0KLXByaW50ZiAiKyBjaGVjayBmb3IgYnVpbGQgdG9vbHMiCi1pZiB0ZXN0IC16ICIkTk9DSEVDSyI7IHRoZW4KLSAgZWNobwotCi0gIHByaW50ZiAiICBjaGVja2luZyBmb3IgYXV0b3JlY29uZiAuLi4gIgotICBlY2hvCi0gIHdoaWNoICJhdXRvcmVjb25mIiAyPi9kZXYvbnVsbCB8fCB7Ci0gICAgZWNobyAibm90IGZvdW5kISBQbGVhc2UgaW5zdGFsbCB0aGUgYXV0b2NvbmYgcGFja2FnZS4iCi0gICAgZXhpdCAxCi0gIH0KLQotICBwcmludGYgIiAgY2hlY2tpbmcgZm9yIHBrZy1jb25maWcgLi4uICIKLSAgZWNobwotICB3aGljaCAicGtnLWNvbmZpZyIgMj4vZGV2L251bGwgfHwgewotICAgIGVjaG8gIm5vdCBmb3VuZCEgUGxlYXNlIGluc3RhbGwgcGtnLWNvbmZpZy4iCi0gICAgZXhpdCAxCi0gIH0KLWVsc2UKLSAgZWNobyAiOiBza2lwcGVkIHZlcnNpb24gY2hlY2tzIgotZmkKLQotIyBpZiBubyBhcmd1bWVudHMgc3BlY2lmaWVkIHRoZW4gdGhpcyB3aWxsIGJlIHByaW50ZWQKLWlmIHRlc3QgLXogIiQqIiAmJiB0ZXN0IC16ICIkTk9DT05GSUdVUkUiOyB0aGVuCi0gIGVjaG8gIisgY2hlY2tpbmcgZm9yIGF1dG9nZW4uc2ggb3B0aW9ucyIKLSAgZWNobyAiICBUaGlzIGF1dG9nZW4gc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBydW4gLi9jb25maWd1cmUgYXM6IgotICBlY2hvICIgIC4vY29uZmlndXJlICRDT05GSUdVUkVfREVGX09QVCIKLSAgZWNobyAiICBUbyBwYXNzIGFueSBhZGRpdGlvbmFsIG9wdGlvbnMsIHBsZWFzZSBzcGVjaWZ5IHRoZW0gb24gdGhlICQwIgotICBlY2hvICIgIGNvbW1hbmQgbGluZS4iCi1maQotCi10b3BsZXZlbF9jaGVjayAkc3JjZmlsZQotCi0jIGF1dG9wb2ludAotaWYgdGVzdCAtZCBwbyAmJiBncmVwIF5BTV9HTlVfR0VUVEVYVF9WRVJTSU9OIGNvbmZpZ3VyZS5hYyA+L2Rldi9udWxsIDsgdGhlbgotICB0b29sX3J1biAiYXV0b3BvaW50IiAiLS1mb3JjZSIKLWZpCi0KLSMgYWNsb2NhbAotaWYgdGVzdCAtZiBhY2luY2x1ZGUubTQ7IHRoZW4gcm0gYWNpbmNsdWRlLm00OyBmaQotCi1hdXRvcmVjb25mIC0tZm9yY2UgLS1pbnN0YWxsIHx8IGV4aXQgMQotCi10ZXN0IC1uICIkTk9DT05GSUdVUkUiICYmIHsKLSAgZWNobyAiKyBza2lwcGluZyBjb25maWd1cmUgc3RhZ2UgZm9yIHBhY2thZ2UgJHBhY2thZ2UsIGFzIHJlcXVlc3RlZC4iCi0gIGVjaG8gIisgYXV0b2dlbi5zaCBkb25lLiIKLSAgZXhpdCAwCi19Ci0KLWNkICIkb2xkZGlyIgotCi1lY2hvICIrIHJ1bm5pbmcgY29uZmlndXJlIC4uLiAiCi10ZXN0ICEgLXogIiRDT05GSUdVUkVfREVGX09QVCIgJiYgZWNobyAiICBkZWZhdWx0IGZsYWdzOiAgJENPTkZJR1VSRV9ERUZfT1BUIgotdGVzdCAhIC16ICIkQ09ORklHVVJFX0VYVF9PUFQiICYmIGVjaG8gIiAgZXh0ZXJuYWwgZmxhZ3M6ICRDT05GSUdVUkVfRVhUX09QVCIKLWVjaG8KLQotZWNobyAiJHNyY2Rpci9jb25maWd1cmUiICRDT05GSUdVUkVfREVGX09QVCAkQ09ORklHVVJFX0VYVF9PUFQKLSIkc3JjZGlyL2NvbmZpZ3VyZSIgJENPTkZJR1VSRV9ERUZfT1BUICRDT05GSUdVUkVfRVhUX09QVCB8fCB7Ci0gICAgICAgIGVjaG8gIiAgY29uZmlndXJlIGZhaWxlZCIKLSAgICAgICAgZXhpdCAxCi19Ci0KLWVjaG8gIk5vdyB0eXBlICdtYWtlJyB0byBjb21waWxlICRwYWNrYWdlLiIKZGlmZiAtLWdpdCBhL2NvbW1vbi9DaGFuZ2VMb2cgYi9jb21tb24vQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmQwZDI1Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9DaGFuZ2VMb2cKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEyICswLDAgQEAKLTIwMDgtMTItMTcgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGdtYWlsLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JQW5kIHlldCBhbm90aGVyIHZhcmlhdGlvbiBvZiB0aGUgR3N0QXVkaW9GaWx0ZXIgbGVhay4KLQotMjAwOC0xMi0xNSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JUGF0Y2ggYnk6IFJvbGFuZCBJbGxpZyA8cm9sYW5kIGRvdCBpbGxpZyBhdCBnbXggZG90IGRlPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCUZpeCBBR19HU1RfQklTT05fQ0hFQ0sgdG8gaGFuZGxlIHZlcnNpb24gbnVtYmVycyB3aXRoIG1vcmUgdGhhbgotCXR3byBjb21wb25lbnRzIChpLmUuIDIuNC4xKS4gRml4ZXMgYnVnICM1NjQ1MDcuCi0KLTIwMDgtMTItMTQgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGdtYWlsLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JQW5kIHlldCBhbm90aGVyIHZhcmlhbnQgb2YgdGhlIEdzdEF1ZGlvRmlsdGVyIGxlYWsuCi0KLTIwMDgtMTItMTMgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkZWQgdmFyaWFudHMgb2YgbGVha3Mgb2YgZHluYW1pYyBwYWQgdGVtcGxhdGVzIGNyZWF0ZWQgaW4KLQlHc3RBdWRpb0ZpbHRlci4KLQlBZGQgY29uZGl0aW9uYWwganVtcCB0cmlnZ2VyZWQgYnkgZ2V0YWRkcmluZm8gKG1heWJlIGdsaWJjLTIuOSkuCi0KLTIwMDgtMTItMTIgIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0LnN1cHA6Ci0JRml4IGxlYWsgaW4gR0lPIGNhbGxlZCBieSBnbm9tZXZmcy4gTm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhpcy4KLQotMjAwOC0xMi0xMiAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Quc3VwcDoKLQlBZGRlZCBhbm90aGVyIHN1cHByZXNzaW9uIGZvciBkeW5hbWljIHBhZCB0ZW1wbGF0ZXMsIGluIHRoaXMgY2FzZQotCUdzdEF1ZGlvRmlsdGVyLgotCUFkZGVkIHN1cHByZXNzaW9uIGZvciBQYW5nb0xhbmd1YWdlIHdoaWNoIGNhbiBuZXZlciBiZSBmcmVlZAotCWFjY29yZGluZyB0byB0aGUgUGFuZ28gQVBJLgotCi0yMDA4LTEyLTEyICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC5zdXBwOgotCUEgd2hvbGUgYnVuY2ggb2Ygc3VwcHJlc3Npb25zIGRldGVjdGVkIG9uIGxhdGVzdCBnZW50b28gfmFtZDY0LgotCU1ha2Ugc29tZSBleGlzdGluZyBzdXBwcmVzc2lvbnMgbW9yZSBnZW5lcmljIChmb3Igc3VidGxlIGRlcGVuZGVjeQotCWNvZGUgY2hhbmdlcykuCi0JQWRkZWQgc3VwcHJlc3Npb25zIGZvciBnbGliYy0yLjkuCi0JQWRkZWQgc3VwcHJlc3Npb25zIGZvciBuZXcgdmFyaWFudHMgb2YgQUxTQSBsZWFrcy4KLQlBZGRlZCBzdXBwcmVzc2lvbnMgZm9yIGEgc2VyaWVzIG9mIGxlYWtzIGluIHBsdWdpbnMgcmVnaXN0cmF0aW9ucyBkdWUKLQl0byBzb21lIHBhZCB0ZW1wbGF0ZXMnIGNhcHMgY2FsY3VsYXRlZCBhdCBydW50aW1lLgotCUFkZGVkIHN1cHByZXNzaW9ucyBmb3IgdmFyaWFudHMgb2Ygc29tZSBsZWFrcyBpbiBwYW5nby9mb250Y29uZmlnLgotCUFkZGVkIHN1cHByZXNzaW9ucyBmb3IgbGVhayBpbiBnc3RmZm1wZWdjc3AuYyAobm90aGluZyB3ZSBjYW4gZG8KLQlhYm91dCBpdCwgYnV0IHdpbGwgb25seSBleGlzdCBvbmNlKS4KLQotMjAwOC0xMi0wNCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBtNC9nc3QtcGx1Z2luLWRvY3MubTQ6Ci0JUmVtb3ZlIHRoZSBjaGVjayBpZiAkaGF2ZV9ndGtfZG9jIGVxdWFscyB5ZXMgYXMgaXQncyBub3QgZGVmaW5lZAotCWFuZCAkZW5hYmxlX2d0a19kb2Mgc2hvdWxkIGJlIGdvb2QgZW5vdWdoLgotCUFsc28gdGhpcyByZXN0b3JlcyB0aGUgYnVpbGQgb2YgdGhlIHBsdWdpbiBkb2N1bWVudGF0aW9uLgotCi0yMDA4LTEyLTAxICBNYXJrIE5hdXdlbGFlcnRzICA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBzdXBwcmVzc2lvbiB2YXJpYW50IGZvciBVYnVudHUgSGFyZHkgeDg2LzY0Yml0LgotCi0yMDA4LTEyLTAxICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogZ3RrLWRvYy5tYWs6Ci0JICBTaW1wbGlseSB1bmluc3RhbGwgcnVsZS4gSXRzIGNsb3NlciB0byB1cHN0cmVhbSBhbmQgZml4ZXMgIzE1MDMzMS4KLQotMjAwOC0xMS0yOSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBtNC9nbGliLWdldHRleHQubTQ6Ci0JVXBkYXRlIGdsaWItZ2V0dGV4dC5tNCBmcm9tIGxhdGVzdCBzdGFibGUgR0xpYiByZWxlYXNlLgotCi0yMDA4LTExLTI5ICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQlQYXRjaCBieTogQ3lnd2luIFBvcnRzIG1haW50YWluZXIKLQkgICAgICAgICAgIDx5c2Vsa293aXR6IGF0IHVzZXJzIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgotCi0JKiBnZXR0ZXh0LnBhdGNoOgotCVVwZGF0ZSB0aGUgZ2V0dGV4dCBwYXRjaCBmb3IgdXNlIHdpdGggZ2V0dGV4dCAwLjE3IHdoaWNoIGlzCi0JcmVxdWlyZWQgdG8gYnVpbGQgd2l0aCBsaWJ0b29sIDIuMiBiZWNhdXNlIG9mIGNvbmZsaWN0cy4KLQlGaXJzdCBwYXJ0IG9mIGJ1ZyAjNTU2MDkxLgotCi0yMDA4LTExLTI5ICBTZWJhc3RpYW4gRHLDtmdlICA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIG00L2d0ay1kb2MubTQ6Ci0JKiBtNC9wa2cubTQ6Ci0JVXBkYXRlIGd0ay1kb2MgYW5kIHBrZy1jb25maWcgbTQgbWFjcm9zIGZyb20gdGhlaXIgbGF0ZXN0IHJlbGVhc2VzLgotCi0yMDA4LTExLTIwICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAc29uZ2JpcmRuZXN0LmNvbT4KLQotCSogbTQvYXMtb2JqYy5tNDoKLQkgIEZpeCBvYmplY3RpdmUgQyB0ZXN0IG1hY3JvIHdoZW4gbm9uZSBvZiB0aGUgY29tcGlsZXJzIGFyZSBmb3VuZCBhdCBhbGwuCi0KLTIwMDgtMTAtMzAgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgQWxzbyBjcCB0aGUgZW50aXRpZXMgaGVyZSB0byBhbGwgeGlubGN1ZGUgYmFzZWQgZG9jcyAod29ya2Fyb3VuZCBmb3IKLQkgIG5vdCBiZWluZyBhYmxlIHRvIHNldCB1cCBhIHNlYXJjaCBwYXRoKS4KLQotMjAwOC0xMC0xNyAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBndGstZG9jLm1hazoKLQkgIERvbid0IGNsb2JiZXIgdGhlIHJlYWwgcmVnaXN0cnkgY2FjaGUgZmlsZSB3aGVuCi0JICBidWlsZGluZyBkb2NzLgotCi0yMDA4LTEwLTA3ICBKYW4gU2NobWlkdCAtIFN1biBNaWNyb3N5c3RlbXMgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQkgIEFsc28gZGlzYWJsZSB0aGUgYm9ndXMgImxvb3Agbm90IGVudGVyZWQgYXQgdG9wIiB3YXJuaW5ncyBhcHBlYXJpbmcgb24gU3BhcmMgRm9ydGUgYnVpbGRzLgotCi0yMDA4LTEwLTA2ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBndGstZG9jLm1hazoKLQkgIEFwcGx5IHRoZSBzYW1lIGZpeCBhcyBiZWxvdyB0byBndGstZG9jLm1hay4gU29tZWhvdyBkaWQgbm90IGVuZCB1cCBpbgotCSAgQ1ZTLgotCi0yMDA4LTA5LTA1ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6IEZpeCB0aGUgY2hlY2sgZm9yIGd0a2RvYy1yZWJhc2U6IGRvbid0Ci0JICBwYXNzIHRoZSAnd2hpY2gnIGVycm9yIGJhY2sgdG8gbWFrZS4gIFRoaXMgZml4IGlzIG1vcmUgc3BlY2lmaWMKLQkgIHRoYW4gd2hhdCBpcyBpbiB1cHN0cmVhbS4KLQotMjAwOC0wOS0wNSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBndGstZG9jLm1hazogRml4IHRoZSBjaGVjayBmb3IgZ3RrZG9jLXJlYmFzZTogZG9uJ3QgcGFzcyB0aGUKLQkgICd3aGljaCcgZXJyb3IgYmFjayB0byBtYWtlLiAgVGhpcyBmaXggaXMgbW9yZSBzcGVjaWZpYyB0aGFuCi0JICB3aGF0IGlzIGluIHVwc3RyZWFtLgotCi0yMDA4LTA5LTA0ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogZ3RrLWRvYy5tYWs6Ci0JICBHZXQgY2xvc2VyIHRvIHVwc3RyZWFtIG1ha2VmaWxlcy4gRG9uJ3QgaW5zdGFsbCBpbmRleC5zZ21sIHR3aWNlLiBDYWxsCi0JICBndGtkb2MtcmViYXNlIChpZiBleGlzdHMpLgotCi0yMDA4LTA4LTIxICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgUmV2ZXJ0ICQodG9wX2J1aWxkZGlyKSAtPiAkKGJ1aWxkZGlyKSBjaGFuZ2Ugb2YgcmV2LiAxLjM5IGFzIHRoZXJlIGlzCi0JICBubyB2YXJpYWJsZSBjYWxsZWQgYnVpbGRkaXIuCi0KLTIwMDgtMDctMzEgIE1hcmsgTmF1d2VsYWVydHMgIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIHN1cHByZXNzaW9ucyBmb3IgVWJ1bnR5IEhhcmR5IHg4Ni82NGJpdCwgc2ltaWxhciB0byBlYXJsaWVyCi0JdmVyc2lvbnMgYW5kIDMyYml0IHZhcmlhbnQuCi0KLTIwMDgtMDctMzEgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JUmVtb3ZlIEdTVF9ESVNBQkxFXyhFTlVNVFlQRVN8SU5ERVh8VVJJKS4KLQotMjAwOC0wNy0yMSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbS5tdWxsZXIgYXQgY29sbGFib3JhIGNvIHVrPgotCi0JKiBtNC9nc3QtZXJyb3IubTQ6OgotCSAgV2hlbiBjaGVja2luZyBmb3IgR1NUX0VSUk9SX0NYWEZMQUdTLCBjaGVjayBlYWNoIGNvbXBpbGVyIGZsYWcKLQkgIGluZGl2aWR1YWxseSwgbm90IGFsbCB0b2dldGhlci4KLQotMjAwOC0wNy0yMCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbS5tdWxsZXIgYXQgY29sbGFib3JhIGNvIHVrPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OjoKLQkgIEZpeCBiaXNvbiB2ZXJzaW9uIG51bWJlciBkZXRlY3Rpb24gZm9yIG9sZGVyIC0tdmVyc2lvbgotCSAgb3V0cHV0IGZvcm1hdCAoYXMgYmlzb24gMS4yOCBvbiBPU1ggMTAuNCBvdXRwdXRzKS4KLQkgIEZpeGVzICM1NDM4NTMuCi0KLTIwMDgtMDctMTIgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMueHNsOgotCSAgU3BsaXQgcmVmc2VjdDIgYWxzbyBoZXJlIHRvIG1ha2UgIkVsZW1lbnQgUGFkcyIgc3VidGl0bGUgdmlzaWJsZS4KLQotMjAwOC0wNy0wOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JQWRkIGNvbXBpbGVyIGZsYWdzIHRvIHdhcm4gaWYgZGVjbGFyYXRpb25zIGFmdGVyIHN0YXRlbWVudHMgb3IKLQl2YXJpYWJsZSBsZW5ndGggYXJyYXlzIGFyZSB1c2VkLiBUaGVzZSBhcmUgQzk5L0dDQyBleHRlbnNpb25zIGFuZAotCWFyZSBub3Qgc3VwcG9ydGVkIGJ5IHNvbWUgY29tcGlsZXJzIHdlIHdhbnQgdG8gc3VwcG9ydC4KLQotMjAwOC0wNy0wMiAgTWFyayBOYXV3ZWxhZXJ0cyAgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCU9ubHkgY2xlYW4gZG9jIG1haW50YWluZXIgc3RhbXBzIGluIG1haW50YWluZXItY2xlYW4uICBGaXhlcyAjNTM5OTc3LgotCi0yMDA4LTA2LTIwICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0JQWx3YXlzIHVzZSBmb3JtYXQgc3RyaW5ncyBmb3IgcHJpbnRmLWxpa2UgZnVuY3Rpb25zLCBldmVuIGlmIHRoZXkganVzdAotCXByaW50IGEgc3RyaW5nLiBGaXhlcyBidWcgIzUzNjk4MS4KLQotMjAwOC0wNi0yMCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIGd0ay1kb2MubWFrOgotCUluY2x1ZGUgQ0ZMQUdTIGFuZCBMREZMQUdTIGluIEdUS0RPQ19DRkxBR1MgYW5kIEdUS0RPQ19MREZMQUdTLAotCW90aGVyd2lzZSB0aGUgdmFsdWVzIHBhc3NlZCB0byBjb25maWd1cmUgYXJlIGlnbm9yZWQuCi0JRml4ZXMgYnVnICM1MzY5NzguCi0KLTIwMDgtMDYtMDUgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0ubXVsbGVyIGF0IGNvbGxhYm9yYSBjbyB1az4KLQotCSogbTQvZ3N0LWVycm9yLm00OgotCSAgQWRkIC1mbm8tc3RyaWN0LWFsaWFzaW5nIHdoZW4gY29tcGlsaW5nIHdpdGggLVdlcnJvciwgdG8gd29yayBhcm91bmQKLQkgIHdhcm5pbmdzIGNhdXNlZCBieSBHX0xPQ0sgd2l0aCByZWNlbnQgR0xpYiB2ZXJzaW9ucyAoMi4xNi54KSAoIzMxNjIyMSkuCi0KLTIwMDgtMDYtMDUgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3RrLWRvYy5tYWs6Ci0JRG9uJ3QgY29weSBodG1sLyoucG5nIGZpbGVzIHVubGVzcyB0aGV5IGRvbid0IGFscmVhZHkgZXhpc3QKLQlpbiB0aGUgZGVzdGRpci4gRml4ZXMgZGlzdGNoZWNrIGZhaWx1cmUgY2F1c2VkIGJ5IHBlcm1pc3Npb25zCi0JcHJvYmxlbXMgdHJ5aW5nIHRvIGNvcHkgYSBmaWxlIGludG8gdGhlIGRlc3RkaXIgd2hlbiBpdCBhbHJlYWR5Ci0JZXhpc3RzLgotCi0yMDA4LTA1LTI4ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBwbHVnaW5zLnhzbDoKLQkgIFRoZSBjbGFzcyB3YXMgbm90IHNob3duIGluIHBsdWdpbiBkb2NzLiBGaXggdHlwbyBpbiBjaGFuZ2Vsb2cgYmVsb3cuCi0KLTIwMDgtMDUtMjIgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3N0ZG9jLXNjYW5nb2JqOgotCUVtaXQgd2FybmluZ3MgaWYgb25lIG9mIHRoZSBHVHlwZXMgd2UncmUgZXhwZWN0aW5nIGlzIDAKLQl3aGVuIHNjYW5uaW5nLgotCi0yMDA4LTA1LTIxICBGZWxpcGUgQ29udHJlcmFzICA8ZmVsaXBlLmNvbnRyZXJhc0BnbWFpbC5jb20+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQlGaXggaW5zdGFsbGluZyBwbmcgaW1hZ2VzIHdoZW4gZ3RrLWRvYyBpcyBkaXNhYmxlZC4KLQotMjAwOC0wNS0yMSAgRmVsaXBlIENvbnRyZXJhcyAgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogZ3RrLWRvYy5tYWs6Ci0JRml4IG1ha2UgY2xlYW4gd2hlbiBndGstZG9jIGlzIGRpc2FibGVkIGFuZCBvdGhlciBjbGVhbnVwcy4KLQotMjAwOC0wNS0xNyAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCUJlIG1vcmUgcXVpZXQgd2hlbiB0aGUgZmlsZXMgZG9uJ3QgeWV0IGV4aXN0LgotCi0yMDA4LTA1LTE2ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIGdzdGRvYy1zY2FuZ29iajoKLQlBZGQgYSBtZWNoYW5pc20gZm9yIGFkZGluZyAnaW1wbGljaXRseSBjcmVhdGVkJyBHVHlwZXMgaW50byB0aGUKLQlzY2FuLCBhbGxvd2luZyBmb3IgZG9jdW1lbnRpbmcgcGx1Z2luLXByaXZhdGUgYmFzZSBjbGFzc2VzIHRoYXQKLQlwcm92aWRlIHNpZ25hbHMgb3IgcHJvcGVydGllcyBmb3IgcHVibGljIGVsZW1lbnRzLgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCVVzZSAkKGJ1aWxkZGlyKSBpbnN0ZWFkIG9mICQodG9wX2J1aWxkZGlyKSBpbiBhIGZldyBwbGFjZXMgLSB0aGVyZSdzCi0Jbm8gbmVlZCB0byBoYXJkIGNvZGUgJ2RvY3MvcGx1Z2lucycgYXMgdGhlIG9ubHkgdXNlYWJsZSBwYXRoLgotCi0yMDA4LTA1LTE0ICBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2pAYXhpcy5jb20+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCVJlcG9ydCBwbHVnLWlucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgbm90IGJlIGJ1aWx0Ci0JZXZlbiB3aGVuIHRoZSBuYW1lIG9mIHRoZSBwbHVnLWluIGlzIGEgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGx1Zy1pbiwKLQllLmcuLCBnb29tIHZzLiBnb29tMmsxLgotCi0yMDA4LTA1LTE0ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltLm11bGxlciBhdCBjb2xsYWJvcmEgY28gdWs+Ci0KLQkqIGdzdC5zdXBwOgotCSAgQWRkIHN1cHByZXNzaW9uIGZvciBnbGliYyBidWcgb24gZ3V0c3kveDg2LTY0Ci0KLTIwMDgtMDUtMTIgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIHBsdWdpbnMueHNsOgotCSAgSW1wcm92ZSB0aGUgbGF5b3V0IG9mIHRoZSBjYXBzLCBidXQgc3BsaXR0aW5nIHRoZW0gb24gIjsiLgotCi0yMDA4LTA1LTA5ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCQotCVBhdGNoIGJ5OiBCcmlhbiBDYW1lcm9uIDxicmlhbiBkb3QgY2FtZXJvbiBhdCBzdW4gZG90IGNvbT4KLQotCSogbTQvZ3N0LWRlZmF1bHQubTQ6Ci0JRG9uJ3Qgc2V0IHRoZSBkZWZhdWx0IGF1ZGlvIHNpbmsgdG8gdGhlIGRlZmF1bHQgdmlzdWFsaXplci4KLQlGaXhlcyBidWcgIzUzMjI5NS4KLQotMjAwOC0wNS0wNyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbS5tdWxsZXIgYXQgY29sbGFib3JhIGNvIHVrPgotCi0JKiBjaGVjay5tYWs6IChoZWxwKToKLQkgIERvY3VtZW50IEdTVF9DSEVDS1MgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gY2hlY2tzICdtYWtlIGhlbHAnLgotCi0yMDA4LTA1LTA2ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JUGF0Y2ggYnk6IE1hcmMtQW5kcmUgTHVyZWF1IDxtYXJjYW5kcmUgZG90IGx1cmVhdSBhdCBnbWFpbCBkb3QgY29tPgotCi0JKiBzY2FuZ29iai1tZXJnZS5weToKLQlEb24ndCBkZXBlbmQgb24gVHdpc3RlZCBqdXN0IGZvciB0aGUgT3JkZXJlZERpY3QgYnV0IGltcGxlbWVudCBvdXIKLQlvd24gb3JkZXJlZCBkaWN0aW9uYXJ5IGNsYXNzLiBGaXhlcyBidWcgIzUzMTU3Ny4KLQotMjAwOC0wNC0yMyAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotCi0JKiBnc3Quc3VwcDoKLQlSZS1hcnJhbmdlIGxhdGVzdCBzdXBwcmVzc2lvbnMuCi0JQWRkIGFsbCBrbm93biBzdXBwcmVzc2lvbnMgZm9yIHVidW50dSBoYXJkeS4gU2FtZSBhcyBmb3Igb2xkZXIKLQl1YnVudHVzLCBidXQgd2l0aCBkaWZmZXJlbnQgY29kZXBhdGhzLgotCi0yMDA4LTA0LTIyICBFZHdhcmQgSGVydmV5ICA8YmlsYm9lZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC5zdXBwOiBNYWtlIHRscyBsZWFrIHN1cHByZXNzaW9uIGEgYml0IG1vcmUgZ2VuZXJpYy4KLQotMjAwOC0wNC0yMiAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAZ21haWwuY29tPgotCi0JKiBnc3Quc3VwcDogRml4IG9tbWlzc2lvbiBpbiBsYXRlc3QgY29tbWl0LgotCU1ha2UgdGxzIGxlYWsgc3VwcHJlc3Npb24gbW9yZSBnZW5lcmljIGluIG9yZGVyIHRvIGNvdmVyIG1vcmUKLQlkaXN0cmlidXRpb25zIChhbmQgaG9wZWZ1bGx5IGFsc28gZnV0dXJlIGRpc3RyaWJ1dGlvbnMpLgotCi0yMDA4LTA0LTIyICBFZHdhcmQgSGVydmV5ICA8YmlsYm9lZEBnbWFpbC5jb20+Ci0KLQkqIGdzdC5zdXBwOiBBZGQgc3VwcHJlc3Npb25zIGZvciBIYXJkeS4KLQlUaGV5J3JlIGp1c3QgdGhlIG5ld2VyIHZlcnNpb25zIG9mIHNpbWlsYXIgc3VwcHJlc3Npb25zIHdlIGhhZAotCWZvciB0aGUgcHJldmlvdXMgdmVyc2lvbnMgb2YgdWJ1bnR1LgotCi0yMDA4LTA0LTE1ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIG00L01ha2VmaWxlLmFtOgotCURpc3QgYWxsIGZpbGVzIGluIGNvbW1vbi4gRml4ZXMgYnVnICM1Mjc5ODQuCi0KLTIwMDgtMDQtMTQgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LWZ1bmN0aW9uLm00OgotCSAgUmVuYW1lIEFDX0NBQ0hFX1ZBTCBjYWNoZS1pZHMgdG8gY29udGFpbiAnX2N2XycgaW4gb3JkZXIgdG8gbWFrZQotCSAgYXV0b2NvbmYtMi42MiBjb21wbGFpbiBsZXNzLgotCi0yMDA4LTA0LTEzICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSogbTQvZ3N0LXZhbGdyaW5kLm00OgotCSAgQnVtcCB2YWxncmluZCByZXF1aXJlbWVudCB0byAzLjAgKHdoaWNoIHdhcyByZWxlYXNlZCBpbiBBdWd1c3QgMjAwNSkuCi0JICBGaXhlcyAjNDg5MjY5LiBBbHNvLCBjaGVjayBmb3IgdmVyc2lvbiA+PVJFUSBhbmQgbm90ID5SRVEuCi0KLTIwMDgtMDQtMDkgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LWRlZmF1bHQubTQ6Ci0JICBBZGQgLS13aXRoLWRlZmF1bHQte2F1ZGlvc2lua3xhdWRpb3NyY3x2aWRlb3Npbmt8dmlkZW9zcmN8dmlzdWFsaXplcn0KLQkgIGNvbmZpZ3VyZSBzd2l0Y2hlcyAoIzUxOTQxNykuCi0KLTIwMDgtMDQtMDMgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICBBZGQgLS1kaXNhYmxlLWZvbyBzd2l0Y2ggZm9yIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW5zICgjNTI1NTg2KS4KLQotMjAwOC0wNC0wMSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbTQvZ3N0LXBhcnNlci5tNDoKLQlVbmNvbmRpdGlvbmFsbHkgcmVxdWlyZSBmbGV4IDIuNS4zMSBhbmQgYmlzb24gMS44NzUuCi0KLTIwMDgtMDMtMjMgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1hcmNoLm00OgotCWFtZDY0L3g4Nl82NCBhbGxvd3MgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgdG9vLgotCi0yMDA4LTAzLTIxICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBtNC9nc3QtZG93aGlsZS5tNDoKLQlBZGQgbWFjcm8gdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGRvIHt9IHdoaWxlICgwKQotCW1hY3JvcyBhbmQgZGVmaW5lIEhBVkVfRE9XSElMRV9NQUNST1MgaWYgaXQgZG9lcy4gVGhpcyBpcwotCW5lZWRlZCBieSBnbGliL2dtYWNyb3MuaCB0byB1c2Ugc29tZXRoaW5nIGVsc2UgdGhhbgotCWlmICgxKSBlbHNlIGZvciBHX1NUTVRfU1RBUlQvRU5EIHdoZW4gY29tcGxpbmcgQysrLCB3aGljaAotCWNhdXNlcyBjb21waWxlciB3YXJuaW5ncyBiZWNhdXNlIG9mIGFtYmlnaW91cyBlbHNlIHdpdGggZysrIDQuMy4KLQotMjAwOC0wMy0yMSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogbTQvZ3N0LXBsdWdpbi1kb2NzLm00OgotCSogbWFuZ2xlLXRtcGwucHk6Ci0JRG9uJ3QgZGVwZW5kIG9uIFB5WE1MIGFuZCB1c2Ugb25seSBYTUwgbW9kdWxlcyB0aGF0IGFyZSBzaGlwcGVkCi0Jd2l0aCBweXRob24uIEZpeGVzIGJ1ZyAjNTE5NjM1LgotCi0yMDA4LTAzLTA3ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIG00L2d0ay1kb2MubTQ6IChHVEtfRE9DX0NIRUNLKTogCi0JVGhlIHByZXZpb3VzIGNvbW1pdCB0byB0aGlzIGZpbGUgYnkgU3RlZmFuIEtvc3QgbWVudGlvbm5lZCBjaGVja2luZyBmb3IKLQlTRUQsIGJ1dCBOT1QgY2hlY2tpbmcgZm9yIGd0a2RvYy1jaGVjayAod3RoIGlzIHRoYXQgZG9pbmcgdGhlcmUgPz8pLgotCVRoZXJlZm9yZSwgcmVtb3ZpbmcgdGhlIGNoZWNrIGZvciBndGtkb2MtY2hlY2sKLQotMjAwOC0wMy0wMyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBtNC9heF9jcmVhdGVfc3RkaW50X2gubTQ6IE9vcHMsIGNoZWNrZWQgaW4gdGhlIHdyb25nIGNvcHkgb2YKLQkgIHRoaXMgZmlsZS4gIChVcGRhdGUgZnJvbSB1cHN0cmVhbSkKLQotMjAwOC0wMy0wMyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBtNC9heF9jcmVhdGVfc3RkaW50X2gubTQ6ICBVcGRhdGUgZnJvbSB1cHN0cmVhbS4gIEZpeGVzIGEgYnVnCi0JICBjb21waWxpbmcgd2l0aCBNU1ZDLgotCi0yMDA4LTAzLTAzICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWs+Ci0KLQkqIG00L3BrZy5tNDoKLQlBbGxvdyBvdmVycmlkZSBvZiBwa2ctY29uZmlnIHJlc3VsdHMsIGFzIHByb3Bvc2VkIGJ5IGNvbmZpZ3VyZSAtLWhlbHAuCi0JVGhpcyBpcyBpbiBmYWN0IGp1c3QgYSBiYWNrcG9ydCBmcm9tIHVwc3RyZWFtIHBrZy5tNC4KLQlGaXhlcyAjNTE4ODkyCi0KLTIwMDgtMDMtMDMgIFBldGVyIEtqZWxsZXJzdGVkdCAgPHBrakBheGlzLmNvbT4KLQotCSogQ2hhbmdlTG9nOgotCUNoYW5nZWxvZyBzdXJnZXJ5IG9mIG15IHByZXZpb3VzIGNvbW1pdCB0byBhZGQgYnVnemlsbGEgcmVmZXJlbmNlLgotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JQWRkIEFHX0dTVF9DSEVDS19QTFVHSU4gYW5kIEFHX0dTVF9ESVNBQkxFX1BMVUdJTiB0byBtYWtlIGl0IGVhc2llcgotCXRvIGluY2x1ZGUgYW5kIGV4Y2x1ZGUgcGx1Zy1pbnMgd2l0aG91dCBleHRlcm5hbCByZWZlcmVuY2VzLCBpLmUuLAotCXBsdWctaW5zIGxpc3RlZCBpbiBHU1RfUExVR0lOU19TRUxFQ1RFRC4gKCM0OTgyMjIpCi0KLTIwMDgtMDMtMDMgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBhbm90aGVyIGdsaWJjIHN1cHByZXNzaW9uLgotCi0yMDA4LTAyLTI5ICBQZXRlciBLamVsbGVyc3RlZHQgIDxwa2pAYXhpcy5jb20+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCU1ha2UgdGhlIGNvbW1lbnQgYmVmb3JlIGRlZmluZXMgZ2VuZXJhdGVkIHZpYSBBR19HU1RfQ0hFQ0tfRkVBVFVSRQotCWxvb2sgbmljZXIuICgjNDk4MjIyKQotCi0yMDA4LTAyLTI2ICBKYW4gU2NobWlkdCAgPGphbi5zY2htaWR0QHN1bi5jb20+Ci0KLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNDoKLQlBZGQgRGF2ZSBTY2hsZWVmJ3MgR0NDIGlubGluZSBhc3NlbWJseSBkZXRlY3Rpb24gbWFjcm8KLQlmb3IgdXNpbmcgaW4gZ3N0LXBsdWdpbnMtZ29vZCBpbiB0aGUgZ29vbSAyazQgcGx1Z2luLgotCi0yMDA4LTAyLTI1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QtYXV0b2dlbi5zaDogSW5zdGVhZCBvZiBvbmx5IHBhc3NpbmcgY2VydGFpbiBhcmd1bWVudHMgdG8KLQljb25maWd1cmUsIHBhc3MgYW55dGhpbmcgdGhhdCB3ZSBkaWRuJ3QgaGFuZGxlLiBNdWNoIGZyaWVuZGxpZXIuCi0JRml4ZXMgIzM0NDEyLgotCi0yMDA4LTAyLTIzICBKYW4gU2NobWlkdCAgPEphbi5TY2htaWR0QHN1bi5jb20+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQlTdG9yZSB0aGUgZGV0ZWN0ZWQgY29tcGlsZXIgZmxhZ3MgaW50byBFUlJPUl9DRkxBR1MgcmF0aGVyIHRoYW4KLQlFUlJPUl9DWFhGTEFHUywgYW5kIHVzZSB0aGUgbWFjcm8gdGhhdCBjaGVja3MgdGhlIEMgY29tcGlsZXIsIG5vdAotCXRoZSBDKysgb25lLgotCi0yMDA4LTAyLTIzICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIG00L2dzdC1lcnJvci5tNDoKLQkgIFJlZmxvdyBjaGVja3MgZm9yIGFkZGl0aW9uYWwgd2FybmluZyBmbGFncyBzbyB0aGV5J3JlIG5vdAotCSAgbmVzdGVkLCB3aGljaCBmaXhlcyB0aGUgcmVzdWx0IHJlcG9ydGluZyBpbiB0aGUgY29uZmlndXJlCi0JICBvdXRwdXQuCi0KLTIwMDgtMDItMjIgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogbTQvYXMtY29tcGlsZXItZmxhZy5tNDoKLQkgIEFkZCBBU19DWFhfQ09NUElMRVJfRkxBRwotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JICBBZGQgQUdfR1NUX1NFVF9FUlJPUl9DWFhGTEFHUyAoRm9ydGUgYml0cyBuZWVkIHRlc3RpbmcpCi0KLTIwMDgtMDItMjIgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkgIEFkZCAnY2hlY2staW5zcGVjdGVkLXZlcnNpb25zJyB0YXJnZXQ7IHRoaXMgaGVscHMgaWRlbnRpZnkKLQkgIGZpbGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIG9yIHdoZXJlIHRoZSB2ZXJzaW9uCi0JICBudW1iZXIgc2hvdWxkIChpZGVhbGx5KSBiZSB1cGRhdGVkIGJlZm9yZSBhIHJlbGVhc2UKLQkgICh3aGljaCBkb2Vzbid0IGhhcHBlbiBhdXRvbWF0aWNhbGx5IGlmIHRoZSByZWxlYXNlciBkb2Vzbid0Ci0JICBidWlsZCB0aGF0IHBsdWdpbiBsb2NhbGx5KS4gTm90IGFkZGluZyBhdCBhIGRpc3RjaGVjayBob29rCi0JICB5ZXQgdGhvdWdoLCBiZWNhdXNlIGl0J3Mgbm90IHJlYWxseSB0aGF0IGltcG9ydGFudCBhbmQgd291bGQKLQkgIHByb2JhYmx5IGFsc28gYmUgYSBwcm9ibGVtIG9uIGJ1aWxkYm90cy4KLQotMjAwOC0wMi0yMiAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIGV2ZW4gbW9yZSBnbGliYyAyLjcgc3VwcHJlc3Npb25zLgotCi0yMDA4LTAyLTIyICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgYW5vdGhlciBzdXBwcmVzc2lvbiBmb3IgR0xpYiBjYWNoaW5nIHNvbWUgdmFsdWVzIGFmdGVyCi0JdGhlIGZpcnN0IGNhbGwuCi0KLTIwMDgtMDItMTIgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQlQYXRjaCBieToKLQkgIFRpbSBNb29uZXkgPG1vb25leSBhdCBkb2diZXJ0IGRvdCBjYyBkb3QgbmRzdSBkb3Qgbm9kYWsgZG90IGVkdT4KLQotCSogbTQvZ3N0LWVycm9yLm00OgotCVVzZSBubyVFX01BQ1JPX1JFREVGSU5FRCBvbiBTb2xhcmlzIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MuCi0JRml4ZXMgYnVnICM1MTU5MDUuCi0KLTIwMDgtMDItMTEgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBhIGZldyBtb3JlIGdsaWJjIDIuNyBzdXBwcmVzc2lvbnMgdG8gbWFrZSB0aGUgYXZpc3VidGl0bGUgdW5pdAotCXRlc3QgdmFsZ3JpbmQgY2xlYW4uIEZpeGVzIGJ1ZyAjNTE1NzAzLgotCi0yMDA4LTAyLTA4ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBDaGFuZ2VMb2c6Ci0JICBDaGFuZ2Vsb2cgc3VyZ2VyeSBmb3IgbGFzdCBjb21taXQuCi0KLTIwMDgtMDItMDggIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIG00L2d0ay1kb2MubTQ6Ci0JICBDb25kaXRpb25hbGx5IGNoZWNrIGZvciBTRUQuIEFsc28gc3luYyBhIGJpdCB3aXRoIHVwc3RyZWFtIG1hY3JvLgotCi0yMDA4LTAyLTA4ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogZ3RrLWRvYy5tYWs6Ci0JICBVc2UgJyQoU0VEKScgaW5zdGVhZCBvZiAnc2VkJy4gRG9uJ3QgdXNlIC1pIGZvciBpbi1wbGFjZSBhcyBpdHMgZ251Ci0JICBvbmx5LCBtb3ZlIHRvIGEgdGVtcCBmaWxlIGluc3RlYWQuCi0KLTIwMDgtMDItMDYgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQkgQXMgb3VyIGRvY3MgYXJlIHZlcnNpb25lZCwgd2UgbmVlZCB0byBwYXRjaCB0aGUgaW5kZXguc2dtbCBmaWxlIHRvIGhhdmUKLQkgY29ycmVjdCBwYXRocyB0aGVyZSwgdW5sZXNzIHdlIGFsc28gd2FudCB0byBmb3JrIGd0ay1kb2MncyB4c2wgKHdoaWNoCi0JIHdlIGRvbid0KS4gVGhpcyBob3BlZnVsbHkgZml4ZXMgeHJlZnMgYmV0d2VlbiBtb2R1bGVzLgotCi0yMDA4LTAyLTAyICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQlVc2UgcHJpbnRmIGluc3RlYWQgb2YgZWNobyBhcyAiZWNobyAtZSIgaXNuJ3QgUE9TSVggYW5kIGRvZXNuJ3Qgd29yawotCXdpdGggc3RyaWN0IFBPU0lYIHNoZWxscyBsaWtlIHRjc2ggb3IgZGFzaCBhbmQgYWxzbyBub3QgZXZlcnkgcGxhdGZvcm0KLQloYXMgYSAvYmluL2VjaG8gdGhhdCBzdXBwb3J0cyBpdC4KLQotMjAwOC0wMS0yNCAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogQ2hhbmdlTG9nOgotCSAgQ2hhbmdlTG9nIHN1cmdlcnkuCi0KLQkqIGdzdGRvYy1zY2FuZ29iajoKLQkgIFN5bmMgdGhlIG9iamVjdCBzY2FubmVyIHdpdGggZ3RrLWRvYyBmaXhlcy4gVXBkYXRlIGFyZ3MgYW5kIGhpZXJhcmNoeQotCSAgZmlsZXMuCi0KLTIwMDgtMDEtMjAgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGNoZWNrLm1hazoKLQkqIGNvdmVyYWdlL2xjb3YubWFrOgotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkqIHJlbGVhc2UubWFrOgotCVVzZSAkKE1BS0UpIGluc3RlYWQgb2YgbWFrZSB0byBmaXggdGhlIGJ1aWxkIGlmIEdOVSBtYWtlIGlzIGNhbGxlZAotCXNvbWV0aGluZyBlbHNlIG9uIHRoZSBzeXN0ZW0uCi0JCi0JKiBtNC9hcy1kb2Nib29rLm00OgotCUZpeCBwYXRoIGZvciBkb2Nib29rLnhzbCBpZiB3ZSBoYXZlIG5vIC9ldGMveG1sL2NhdGFsb2cgYW5kIGFkZCBhCi0JZG9jYm9vay14c2wgc2VhcmNoIHBhdGggZm9yIEZyZWVCU0QuCi0KLTIwMDgtMDEtMTggIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBhIHN1cHByZXNzaW9uIGZvciBhIGdsaWJjIGJ1ZzoKLQlodHRwOi8vdmFsZ3JpbmQub3JnL2RvY3MvbWFudWFsL2ZhcS5odG1sI2ZhcS5leGl0X2Vycm9ycz4KLQotMjAwOC0wMS0xOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIHNvbWUgbW9yZSBnbGliYyAyLjcgc3VwcHJlc3Npb25zIGFuZCBtYWtlIHRoZSBHTGliIHN1cHByZXNzaW9ucwotCWZvciB0aGUgaG9tZS90bXAvZXRjIGRpcmVjdG9yeSBjYWNoaW5nIGEgYml0IG1vcmUgZ2VuZXJpYy4KLQotMjAwOC0wMS0xOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkIHNvbWUgZ2xpYmMgMi43IHN1cHJlc3Npb25zIGFzIGZvdW5kIG9uIERlYmlhbi91bnN0YWJsZS4KLQotMjAwOC0wMS0xNCAgSmFuIFNjaG1pZHQgIDxqYW4uc2NobWlkdEBzdW4uY29tPgotCi0JKiBkb3dubG9hZC10cmFuc2xhdGlvbnM6Ci0JQXBwYXJlbnRseSBJIGhhdmUgcHJvYmxlbXMgd2l0aCBsZWF2aW5nIHRoaW5ncyBjb21tZW50ZWQgb3V0IHdoZW4KLQlJIGVkaXQgc2hlbGwgc2NyaXB0cy4KLQotMjAwOC0wMS0xMiAgSmFuIFNjaG1pZHQgIDxKYW4uU2NobWlkdEBzdW4uY29tPgotCi0JKiBkb3dubG9hZC10cmFuc2xhdGlvbnM6Ci0JUmVtb3ZlIGJhc2gtaXNtcwotCi0yMDA4LTAxLTEyICBKYW4gU2NobWlkdCAgPEphbi5TY2htaWR0QHN1bi5jb20+Ci0KLQkqIGNoZWNrLWV4cG9ydHM6Ci0JUmVzdG9yZSB0aGUgY2xlYW51cCBybSBvZiBvdXIgdG1wIGZpbGUgd2hpY2ggSSBkaWRuJ3QgbWVhbiB0byBsZWF2ZSAKLQljb21tZW50ZWQgb3V0LgotCi0yMDA4LTAxLTEyICBKYW4gU2NobWlkdCAgPEphbi5TY2htaWR0QHN1bi5jb20+Ci0KLQkqIGNoZWNrLWV4cG9ydHM6Ci0JICBGaXhlcyB0byBtYWtlIGNoZWNrLWV4cG9ydCB3b3JrIG9uIGJvdGggU29sYXJpcyBhbmQgTGludXgKLQotCSogbTQvZ3N0LWVycm9yLm00OgotCSAgRGlzYWJsZSBleHRyYSB3YXJuaW5nIGNhdGVnb3J5IChhcmd1bWVudCBtaXNtYXRjaCkgYXMgYW4gZXJyb3IKLQkgIG9uIEZvcnRlLCBhcyBpdCBwcmV2ZW50cyB0aGUgbGliY2hlY2sgZmFpbF9pZiBtYWNyb3MgZnJvbSBjb21waWxpbmcuCi0KLQkqIHdpbjMyLm1hazoKLQkgIFN1YnN0aXR1dGUgdGhlIEdTdHJlYW1lciB2ZXJzaW9uIHNvIHRoaW5ncyB3aWxsIGtlZXAgd29ya2luZyBpbiAwLjExCi0KLTIwMDgtMDEtMTEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCVBhdGNoIGJ5OiBQZXRlciBLamVsbGVyc3RlZHQgPHBraiBheGlzIGNvbT4KLQotCSogbTQvZ3N0LWdsaWIyLm00OgotCSogbTQvZ3N0LWxpYnhtbDIubTQ6Ci0JICBJbXByb3ZlL2ZpeCBvdXRwdXQgZnJvbSBjb25maWd1cmUgaWYgZWl0aGVyIGdsaWItMi4wIG9yCi0JICBsaWJ4bWwyIGFyZSBub3QgaW5zdGFsbGVkICgjNDk4MjIyKS4KLQotMjAwOC0wMS0wOSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogY292ZXJhZ2UvbGNvdi5tYWs6Ci0JICBVcGRhdGUgY292ZXJhZ2UgbWFrZS1ydWxlczogdXNlIHRoZW0gY29uZGl0aW9uYWx5LCB1c2UgbGlidG9vbCBtb2RlCi0JICBhbmQgdXNlIGxjb3YgdG8gY2xlYW51cC4KLQotMjAwNy0xMi0xOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ2xpYi1nZW4ubWFrOgotCSAgQWxzbyB1c2UgI2luY2x1ZGUgImhlYWRlciIgaW5zdGVhZCBvZiAjaW5jbHVkZSA8aGVhZGVyPiBmb3IgdGhlCi0JICBoZWFkZXJzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2UgZmlsZXMgZm9yIHRoZSBzYW1lCi0JICByZWFzb24gYXMgYmVsb3cuCi0KLQkgIFJlbW92ZSB3aGl0ZXNwYWNlIGJlZm9yZSAjaW5jbHVkZS4KLQotMjAwNy0xMi0xOCAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCSogZ2xpYi1nZW4ubWFrOgotCSAgVXNlICNpbmNsdWRlICJoZWFkZXIiIGluc3RlYWQgb2YgI2luY2x1ZGUgPGhlYWRlcj4gZm9yIHRoZSBnZW5lcmF0ZWQKLQkgIGVudW0gQyBmaWxlcyBhcyB0aGUgZmlsZSB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYW5kCi0JICBzb21lIGNvbXBpbGVycyBzZWVtIHRvIGJlIGEgYml0IHN0cmljdCBhYm91dCB0aGF0IHVubGVzcyAuIGlzIGFkZGVkCi0JICB0byB0aGUgaW5jbHVkZSBwYXRoLgotCi0JICBJbmNsdWRlIGFsbCBoZWFkZXJzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBzb3VyY2UgZmlsZXMgaW4KLQkgIHRoZSBDIGZpbGUgYXMgdGhleSdyZSB1c2VkIHRoZXJlLgotCi0yMDA3LTEyLTE3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIHdpbjMyLm1hazogKHdpbjMyKSwgKHdpbjMyZGVmcyksICh3aW4zMmNybGYpOgotCSAgTWFrZSBjaGVjayBmb3IgQ1IgTEYgaW4gVmlzdWFsIEMrKyA2LjAgcHJvamVjdCBmaWxlcwotCSAgd29yaywgYmFzZWQgb24gcGF0Y2ggYnkgRGF2aWQgU2NobGVlZiAoIzQ5NjcyMiwgIzM5MzYyNikuCi0JCi0yMDA3LTEyLTE3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgRG9uJ3QgZm9yZ2V0IHRvIGRpc3QgdGhlIG5ldyB3aW4zMi5tYWsuCi0KLTIwMDctMTItMTcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogd2luMzIubWFrOiAod2luMzIpLCAod2luMzJkZWZzKToKLQkgIE1vdmUgY29tbW9uIHdpbjMyIE1ha2VmaWxlIGZvbyBpbnRvIHRoaXMgbmV3IGZpbGUuCi0KLTIwMDctMTItMTUgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQkgIFdlIHNob3VsZCBoYXZlIG5ldmVyIGZvcmtlZCB0aGlzIHRoYXQgbXVjaCA6Ly4KLQotMjAwNy0xMi0xMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBjaGVjay1leHBvcnRzOgotCSAgRml4IGJ1aWxkIG9uIHRoZSBwcGM2NCBidWlsZCBib3QuCi0KLTIwMDctMTItMTMgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogY2hlY2stZXhwb3J0czoKLQkgIFN1cHByZXNzIG1vcmUgdW5pbnRlbnRpb25hbCBleHBvcnRzICh0b28gbXVjaCBoYXNzbGUgdG8gcmVuYW1lIHRoZW0sCi0JICBzaW5jZSB0aGUgd2luMzIgcHJvamVjdCBmaWxlcyB3b3VsZCBuZWVkIGNoYW5naW5nIHRvbykuCi0KLTIwMDctMTItMTIgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogTWFrZWZpbGUuYW06Ci0JICBjaGVjay1leHBvcnRzIHNob3VsZCBiZSBkaXN0ZWQuCi0KLTIwMDctMTItMTIgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogY2hlY2stZXhwb3J0czoKLQkgIEFkZCBxdWljayduJ2RpcnR5IHNjcmlwdCB0byBjaGVjayB0aGUgZXhwb3J0ZWQgc3ltYm9scyBvZiBhIGxpYnJhcnkKLQkgIGFnYWluc3QgdGhlIHN5bWJvbHMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgLmRlZiBmaWxlICgjNDkzOTgzKS4gQmFzZWQKLQkgIG9uIHNjcmlwdCBieSBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMuCi0KLTIwMDctMTEtMDYgIEphbiBTY2htaWR0ICA8amFuLnNjaG1pZHRAc3VuLmNvbT4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQlGaXggZGlzdGNoZWNrIGJ5IG1ha2luZyBzdXJlIHRoZSB0eXBlcyBmaWxlcyBhcmUgdHJlYXRlZCBsaWtlIHRoZQotCW90aGVyIGd0a2RvYy1zY2FuZ29iaiBnZW5lcmF0ZWQgZmlsZXMuCi0KLTIwMDctMDktMjEgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSAgTGV0IHRoZSBBR19HU1RfQVJHX0VOQUJMRV9FWFBFUklNRU5UQUwgbWFjcm8gZGVmYXVsdCB0byBkaXNhYmxlCi0JICBidWlsZGluZyBvZiBleHBlcmltZW50YWwgcGx1Z2lucy4gTm9ib2R5IHVzZXMgaXQgeWV0IGFuZCB0aGUKLQkgIC0tZW5hYmxlLS1leHBlcmltZW50YWwgc3R1ZmYgZnJvbSBnc3QtcGx1Z2lucy1nb29kIGRlZmF1bHRzIHRvCi0JICBkaXNhYmxlIHRvby4KLQotMjAwNy0wOS0wNiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgSnVzdCB1c2UgdGhlIG5vcm1hbCAnY2hlY2snIHRhcmdldCBhbmQgYXZvaWQgYSBjaXJjdWxhcgotCSAgZGVwZW5kZW5jeS4KLQotMjAwNy0wOS0wNiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgQWRkIHJ1bGUgdG8gZXJyb3Igb3V0IGlmIC5oaWVyYXJjaHkgZmlsZSBjb250YWlucyB0YWJzLgotCi0yMDA3LTA4LTIwICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGRvd25sb2FkLXRyYW5zbGF0aW9uczoKLQkqIHBvLm1hazoKLQkgIElmIHRoZXJlIGFyZSBuZXcgbGFuZ3VhZ2VzLCB0aGV5IG5lZWQgdG8gYmUgYWRkZWQgdG8gcG8vTElOR1VBUy4KLQotMjAwNy0wOC0yMCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBkb3dubG9hZC10cmFuc2xhdGlvbnM6Ci0JKiBwby5tYWs6Ci0JICBGaXggdXAgJ2Rvd25sb2FkLXBvJyBhIGJpdCwgc28gdGhhdCB3ZSBmaW5kIG5ldyB0cmFuc2xhdGlvbnMKLQkgIGZvciBsYW5ndWFnZXMgdGhhdCBhcmVuJ3QgaW4gb3VyIHBvL0xJTkdVQVMgZmlsZSB5ZXQgdG9vLgotCi0yMDA3LTA3LTE2ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBhIHN1cHByZXNzaW9uIGZvciBHTGliIGNhY2hpbmcgdGhlIHRtcCBkaXIgc2VlbiBvbiBhbgotCVVidW50dSBGZWlzdHkgc3lzdGVtLgotCi0yMDA3LTA3LTEzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCUlmIHdlIHdhbnQgdG8gdXNlICdlY2hvIC1lJywgY2FsbCAvYmluL2VjaG8gaW5zdGVhZCBvZiB0aGUgc2hlbGwncwotCXNpbmNlIC1lIGlzIGEgYmFzaCBleHRlbnNpb24sIGFuZCBvdXIgL2Jpbi9zaCBtaWdodCBub3QgYmUgYmVpbmcKLQlwcm92aWRlZCBieSBiYXNoLgotCi0yMDA3LTA3LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby5tYWs6Ci0JICBUcmFuc2xhdGlvbiBwcm9qZWN0IGhhcyBtb3ZlZC4gIEFsc28sIG5vIGlkZWEgaG93IHRoaXMgdXNlZCB0bwotCSAgd29yayBnaXZlbiB0aGF0IHdlIHdlcmVuJ3QgZG93bmxvYWRpbmcgYSAucG8gZmlsZS4KLQotMjAwNy0wNi0yNSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0LXhtbGluc3BlY3QucHk6Ci0JKiBwbHVnaW5zLnhzbDoKLQkgIEFsc28gZXh0cmFjdCBlbGVtZW50IGNhcHMgZm9yIHBsdWdpbi1kb2NzLiBGaXhlcyBwYXJ0cyBvZiAjMTE3NjkyLgotCi0yMDA3LTA2LTIxICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQlQYXRjaCBieTogQW5kcmVhcyBTY2h3YWIKLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JICBGaXggcXVvdGluZyAoIzQ0OTQ5MykuCi0KLTIwMDctMDYtMTAgIFNlYmFzdGlhbiBEcsO2Z2UgIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JT25seSBnZW5lcmF0ZSB0aGUgcGFyc2VyIGlmIGJpc29uID49IDEuODc1IF9hbmRfIGZsZXggPj0gMi41LjMxIGlzCi0JaW5zdGFsbGVkIGFuZCB1c2UgcHJlLWdlbmVyYXRlZCBzb3VyY2VzIG90aGVyd2lzZS4gRml4ZXMgYnVnICM0NDQ4MjAuCi0KLTIwMDctMDUtMTEgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JICBTdXBwcmVzc2lvbiB2YXJpYW50IGZvciBvdXIgZ29vZCBmcmllbmQgdGhlIFRMUyBsZWFrLCB0aGlzIHRpbWUgZm9yCi0JICBVYnVudHUgRmVpc3R5L3g4Ni4KLQotMjAwNy0wNS0wOSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgRml4IG1ha2UgZGlzdGNoZWNrIGFnYWluOyBjaGFuZ2Ugc29tZSBzcGFjZXMgdG8gdGFicyBpbiBtYWtlZmlsZS4KLQotMjAwNy0wNC0yOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hayAoLW1vZHVsZSk6Ci0JICBFcnJvciBvdXQgd2hlbiB0aGUgaHRtbCBidWlsZCBzdGVwIGdpdmVzIHdhcm5pbmdzLCBzbyB0aGV5IGdldAotCSAgZml4ZWQgcHJvcGVybHkuCi0KLTIwMDctMDQtMjMgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCSAgQWRkIG1hY3JvIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRVMgdGhhdCBjaGVja3MgdGhlIGRlZmluZXMgaW4KLQkgIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBhbmQgQUNfREVGSU5FUyB0aGUgc2V0aW5ncy4KLQotMjAwNy0wNC0xOSAgU2ViYXN0aWFuIERyw7ZnZSAgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotCVBhdGNoIGJ5OiBWaW5jZW50IFRvcnJpIDx2dG9ycmkgYXQgdW5pdi1ldnJ5IGRvdCBmcj4KLQotCSogbTQvZ3N0LXBhcnNlci5tNDoKLQlQdXQgdGhlIEFDX01TR19SRVNVTFQgb3V0cHV0IGluIGJyYWNrZXRzIHRvIGdldCBpdCBwcm9wZXJseSB3cml0dGVuIHRvCi0JdGhlIHRlcm1pbmFsLgotCi0yMDA3LTA0LTE4ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCUNoZWNrIGZvciBmbGV4ID49IDIuNS4zMSBhbmQgc2V0IEdFTkVSQVRFX1BBUlNFUiBpZiB3ZSBoYXZlIGF0IGxlYXN0Ci0JdGhhdCB2ZXJzaW9uLiBPdGhlcndpc2UgdXNlIHByZS1nZW5lcmF0ZWQgcGFyc2VyIHNvdXJjZXMgYXMgd2UgY2FuJ3QKLQlyYWlzZSB0aGUgcmVxdWlyZWQgZmxleCB2ZXJzaW9uLiBIQVZFX01UX1NBVkVfRkxFWCBpcyBvYnNvbGV0ZSBub3cKLQlhcyB3ZSB1c2UgYSBuZXcgZW5vdWdoIGZsZXggdmVyc2lvbiBhbnl3YXkuIEZpcnN0IHBhcnQgb2YgIzM0OTE4MAotCi0yMDA3LTA0LTEwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtY2hlY2subTQ6Ci0JICBBbGxvdyBwcmUtc2V0dGluZyB0aGUgR1NUKFBCKV9UT09MUy9QTFVHSU5TX0RJUiB2YXJpYWJsZXMgdG8gaGVscAotCSAgYnVpbGRzIGFnYWluc3Qgb2xkZXIgR1N0cmVhbWVyLgotCi0yMDA3LTAzLTI1ICBTZWJhc3RpYW4gRHLDtmdlICA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCUZpeCB0aGUgZmxleCB2ZXJzaW9uIGNoZWNrLiBJdCBpZ25vcmVkIHRoZSBtaWNybyB2ZXJzaW9uIGJlZm9yZS4KLQotMjAwNy0wMy0wOSAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBjaGVjay5tYWs6Ci0JVXNlIHRoZSBzYW1lIHRpbWVvdXQgd2hlbiBnZW5lcmF0aW5nIHZhbGdyaW5kIHN1cHByZXNzaW9ucyBhcyAKLQlydW5uaW5nIHRoZSB2YWxncmluZCB0ZXN0LgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgc29tZSBtb3JlIHN1cHByZXNzaW9ucyBhbmQgc3R1ZmYuCi0KLTIwMDctMDMtMDggIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogY2hlY2subWFrOgotCU1ha2Ugc3VyZSBHU2xpY2UgaXMgZGlzYWJsZWQgd2hlbiBidWlsZGluZyBzdXBwcmVzc2lvbnMgdG9vLgotCi0JKiBnc3Quc3VwcDoKLQlBZGQgYXJvdW5kICo4NTAqIGxpbmVzIG9mIHN1cHByZXNzaW9ucyBmb3Igb25lLXRpbWUgaW5pdGlhbGlzYXRpb25zCi0JaW5zaWRlIGxpYmFzb3VuZCBhbmQgZ2NvbmYvYm9ub2JvL09SQml0LiBJIGZlZWwgc28gZGlydHkuCi0KLTIwMDctMDMtMDcgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JYWRkIGEgc3VwcHJlc3Npb24gZm9yIHRoaXMgR0NvbmYgZmx1cCBvbiB0aGUgRkM1IGJ1aWxkYm90LgotCi0yMDA3LTAzLTA2ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCU1ha2UgdGhlIHN1cHByZXNzaW9uIGEgbGl0dGxlIG1vcmUgZ2VuZXJpYywgdG8gY2F0Y2ggdGhlIEZDNSAKLQliYWNrdHJhY2UgdG9vLgotCi0yMDA3LTAzLTA2ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCUFkZCBhIHN1cHByZXNzaW9uIGZvciBsaWJjZGlvIDAuNzYuIEl0IGxlYWtzIGFuIGludGVybmFsIHN0cnVjdAotCXdoZW4gdGhlIENELVJPTSBkZXZpY2UgaXMgbm90IGFjY2Vzc2libGUuCi0KLTIwMDctMDItMjggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmNoLm00OgotCSAgTW92ZSBhIGxpbmUgdGhhdCB3YXMgaW4gdGhlIHdyb25nIG1hY3JvCi0KLTIwMDctMDItMjggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC5tNDoKLQkgIEFkZAotCSogbTQvZ3N0LWFyY2gubTQ6Ci0JKiBtNC9nc3QtYXJncy5tNDoKLQkqIG00L2dzdC1jaGVjay5tNDoKLQkqIG00L2dzdC1kZWJ1Z2luZm8ubTQ6Ci0JKiBtNC9nc3QtZGVmYXVsdC5tNDoKLQkqIG00L2dzdC1kb2MubTQ6Ci0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQkqIG00L2dzdC1mdW5jdGlvbi5tNDoKLQkqIG00L2dzdC1nZXR0ZXh0Lm00OgotCSogbTQvZ3N0LWdsaWIyLm00OgotCSogbTQvZ3N0LWxpYnhtbDIubTQ6Ci0JKiBtNC9nc3QtcGFyc2VyLm00OgotCSogbTQvZ3N0LXBsdWdpbi1kb2NzLm00OgotCSogbTQvZ3N0LXBsdWdpbmRpci5tNDoKLQkqIG00L2dzdC12YWxncmluZC5tNDoKLQkqIG00L2dzdC14MTEubTQ6Ci0JICBDb252ZXJ0IGFsbCBtYWNyb3MgdG8gdXNlIEFHX0dTVCBzdHlsZSBzbyB3ZSBjYW4gcHJvcGVybHkgd2FybgotCSAgd2hlbiB0aGV5J3JlIG1pc3NpbmcgaWYgY29uZmlndXJlLmFjIGNhbGxzIEFHX0dTVF9JTklUCi0JICBXaWxsIHJlcXVpcmUgdXBkYXRlIGluIGFsbCBHU3RyZWFtZXIgbW9kdWxlcy4KLQotMjAwNy0wMi0xMSAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICBSZW1vdmUgJ2VuYWJsZScgZnJvbSBjb25maWd1cmUgc3dpdGNoIGRlc2NyaXB0aW9uIGFzIHRoaXMgbGVhZHMgdG8gCi0JICBjb25mdXNpbmcgbGluZXMgbGlrZSAiZGlzYWJsZSBlbmFibGUgYnVpbGluZyAuLi4iLgotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JICBGaXggY29tbWVudCB0byBzb3VuZCBsZXNzIGhvcnJpYmxlLgotCi0yMDA3LTAyLTA3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQlQYXRjaCBieTogV2lsbCBOZXd0b24gIDx3aWxsLm5ld3RvbiBnbWFpbCBjb20+Ci0KLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIFVzZSAkUEtHX0NPTkZJRyByYXRoZXIgdGhhbiBwa2ctY29uZmlnIGRpcmVjdGx5LCB0aGUgb25lIGluIG91ciBwYXRoCi0JICBtaWdodCBub3QgYmUgdGhlIG9uZSB3ZSB3YW50LCBsaWtlIHdoZW4gY3Jvc3MtY29tcGlsaW5nLiBBbHNvLCBvdGhlcgotCSAgbWFjcm9zIHN1Y2ggYXMgUEtHX0NIRUNLX01PRFVMRVMgdXNlICRQS0dfQ09ORklHLCBzbyB3ZSBzaG91bGQKLQkgIHByb2JhYmx5IHRvbyBqdXN0IGZvciBjb25zaXN0ZW5jeS4gRml4ZXMgIzQwNTI4OC4KLQotMjAwNy0wMS0wOCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCSAgTmVlZCB0byB1c2UgZG91YmxlIHNxdWFyZSBicmFja2V0cyBhZ2FpbiBzbyBtNCBkb2Vzbid0IHJlbW92ZSB0aGVtCi0JICAoZml4ZXMgIzM3ODkzMSkuCi0KLQkqIG00L2dzdC1hcmdzLm00OgotCSAgVXNlIGRvdWJsZSBzcXVhcmUgYnJhY2tldHMgaGVyZSBhcyB3ZWxsLCBmb3IgdGhlIHNhbWUgcmVhc29uLgotCi0yMDA3LTAxLTA1ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JICBVc2UgJ3NlZCcgcmF0aGVyIHRoYW4gJ3RyJyB0byBzdHJpcCB0cmFpbGluZyBsZXR0ZXJzIGZyb20gdmVyc2lvbgotCSAgbnVtYmVycywgc2luY2UgJ3RyJyBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGFuZCB3ZSBrbm93IHNlZCBpcwotCSAgKCMzNzg5MzEpLgotCi0yMDA2LTEwLTIxICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIEluY3JlYXNlIGRlZmF1bHQgdGltZW91dCB1bmRlciB2YWxncmluZCwgNjAgaXMganVzdCB0b28gc2hvcnQgYW5kCi0JICBzb21lIHRlc3RzIHRha2UgYSBiaXQgbG9uZ2VyIHRoZXNlIGRheXMgYW5kIG5vdCBldmVyeW9uZSBoYXMgYQotCSAgYmVlZnkgbWFjaGluZS4KLQotMjAwNi0wOS0yOSAgTWljaGFlbCBTbWl0aCAgPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JICBNb3JlIHN1cHByZXNzaW9ucyBmb3IgZWRneS4gCi0KLTIwMDYtMDktMjggIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogbTQvZ3N0LWdsaWIyLm00OgotCVVzZSBnbW9kdWxlLW5vLWV4cG9ydC0yLjAucGMgaW5zdGVhZCBvZiBnbW9kdWxlLTIuMC5wYyAtIHdlIG5laXRoZXIKLQl3YW50IG5vciBuZWVkIC0tZXhwb3J0LWR5bmFtaWMgKHdoaWNoIGVuZHMgdXAgbWFraW5nIHVzIGV4cG9ydCBhIGJ1bmNoCi0Jb2YgdW5uZWVkZWQgc3ltYm9scykKLQotMjAwNi0wOS0xNCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3Quc3VwcDoKLQkgIFNvbWUgc3VwcHJlc3Npb25zIGZvciB0aGUgbW9yZSByZWNlbnQgbGQuc28gaW4gdWJ1bnR1IGVkZ3kuCi0KLTIwMDYtMDgtMjMgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZ3N0LnN1cHA6Ci0JICBTaG9ydGVuIGZ1bmN0aW9uIHRyYWlsIHNvIHRoZSBzdXBwcmVzc2lvbiB3b3JrcyBvbgotCSAgbXkgdWJ1bnR1IGRhcHBlciBzeXN0ZW0gd2l0aCBjb3JlIGN2cyBhcyB3ZWxsLgotCi0yMDA2LTA3LTI4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCUV4dHJhIHN1cHByZXNzaW9ucyBmcm9tIG15IFVidW50dSB4ODZfNjQgbWFjaGluZQotCi0yMDA2LTA3LTI0ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQlQYXRjaCBieTogRnJlZGVyaWMgUGV0ZXJzIDxmcGV0ZXJzIGF0IGVudHJvdXZlcnQgY29tPgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCSAgTmVlZCB0byBkb3VibGUgc3F1YXJlIGJyYWNrZXRzIGluIC5tNCBmaWxlcy4gU2hvdWxkIGZpeCBiaXNvbgotCSAgdmVyc2lvbiBkZXRlY3Rpb24gd2l0aCB2ZXJzaW9uIG51bWJlcnMgbGlrZSAxLjIzYSAoIzM0ODM1NCkuCi0KLTIwMDYtMDctMjQgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogY2hlY2subWFrOgotCVZhbGdyaW5kIGZhaWxzIHRvIGZpbmQgdGVzdHMgd3JpdHRlbiBpbiB0ZXN0cy9jaGVjay8gZGlyZWN0bHkgKHJhdGhlcgotCXRoYW4gYSBzdWJkaXIpIC0gYmVjYXVzZSB2YWxncmluZCBnZXRzIHJ1biB3aXRoIGEgZmlsZW5hbWUgdGhhdAotCWRvZXNuJ3QgY29udGFpbiBhIHJlbGF0aXZlIHBhdGgsIGl0IGdvZXMgc2VhcmNoaW5nIC91c3IvYmluIGluc3RlYWQuCi0JUnVuIHdpdGggLi8uLi4uIHRvIG1ha2UgdGhpbmdzIHdvcmsgZWl0aGVyIHdheS4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQlBZGQgJCh0b3BfYnVpbGRkaXIpL3NyYyBhcyBhIHBsYWNlIHRvIGxvb2sgZm9yIHBsdWdpbnMKLQl3aGVuIGJ1aWxkaW5nIHRvbywgc2luY2UgdGhhdCdzIHdoZXJlIGdzdC10ZW1wbGF0ZSBrZWVwcyB0aGluZ3MKLQotMjAwNi0wNy0yMyAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCVBhdGNoIGJ5OiBGcmVkZXJpYyBQZXRlcnMgPGZwZXRlcnNAZW50cm91dmVydC5jb20+Ci0KLQkqIG00L2dzdC1wYXJzZXIubTQ6Ci0JICBGaXggYmlzb24gZGV0ZWN0aW9uICgjMzQ4MzU0KQotCi0yMDA2LTA3LTIxICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBtNC9nc3QtcGFyc2VyLm00OgotCSAgY2hlY2sgZm9yIGJpc29uIGFuZCBmbGV4Ci0KLTIwMDYtMDctMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1wbHVnaW4tZG9jcy5tNDoKLQkgIHJlbW92ZSB0aGUgY29uZmlndXJlIGFyZ3VtZW50IGZvciBlbmFibGluZyBwbHVnaW4gZG9jIGJ1aWxkOwotCSAgaGF2aW5nIGd0ay1kb2MgZW5hYmxlZCBhbmQgcHl4bWwgcHJlc2VudCBpcyBlbm91Z2ggb2YgYSB0cmlnZ2VyCi0KLTIwMDYtMDctMDMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvdmVyYWdlL2xjb3YubWFrOgotCSAgZml4IHVwIHJ1bGVzIHRvIHdvcmsgd2l0aCBnc3QtcHl0aG9uIGFzIHdlbGwKLQkgIHJ1biAibWFrZSBsY292IiB0byB0ZXN0IGFuZCBnZW5lcmF0ZSB0aGUgcmVwb3J0cwotCSAgcnVuICJtYWtlIGxjb3YtcmVzZXQiIHRvIHJlZG8gaXQgYWZ0ZXIgdGhhdAotCi0yMDA2LTA3LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNoZWNrLm1hazoKLQkgIGFkZCBhbiBpbnNwZWN0IHRhcmdldCB0aGF0IGluc3BlY3RzIGV2ZXJ5IGVsZW1lbnQgZmVhdHVyZSwKLQkgIHNvIHdlIGNhbiBoYXZlIHRoYXQgYWRkZWQgZm9yIGNvdmVyYWdlCi0JKiBjb3ZlcmFnZS9sY292Lm1hazoKLQkgIGFkZCBzdXBwb3J0IGZvciBsY292Ci0KLTIwMDYtMDctMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSAgd2hlbiBidWlsZGluZyB3aXRoIGdjb3YsIHJlc2V0IENGTEFHUyBhbmQgZnJpZW5kcyB0byBPMAotCi0yMDA2LTA3LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtYXJncy5tNDoKLQkgIEZpbmQgdGhlIGdjb3YgdGhhdCBtYXRjaGVzIHRoZSBnY2MgdmVyc2lvbgotCSAgT25seSBhbGxvdyBnY292IGlmIHdlIHVzZSBnY2MKLQotMjAwNi0wNy0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBjb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGw6Ci0JKiBjb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw6Ci0JKiBjb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsOgotCSAgY29weSBjb3ZlcmFnZSByZXBvcnRpbmcgZmlsZXMgZnJvbSBkYnVzCi0KLTIwMDYtMDctMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSAgbGlidG9vbCBzdHJpcHMgZ2NvdidzIC1mIGZsYWdzLCBzbyBsaWJnY292IGRvZXMgbm90IGdldAotCSAgbGlua2VkIGluLiAgU2V0dGluZyBHQ09WX0xJQlMgd2l0aCAtbGdjb3YgZml4ZXMgbGlidG9vbCdzCi0JICBzdHJpcHBpbmcKLQkgIGFsc28gc2hvdyB3aGF0IHBrZy1jb25maWctcGF0aCB3ZSBzZXQKLQotMjAwNi0wNi0yMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JUGF0Y2ggYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGtqIGF0IGF4aXMgY29tPgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQkgIFNob3cgbGlzdCBvZiBwbHVnaW5zIHdpdGhvdXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQKLQkgIHdpbGwgbm90IGJlIGJ1aWx0IGFzIHdlbGwgKCMzNDQxMzYpLgotCi0yMDA2LTA2LTE1ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIG00L2dzdC1wbHVnaW4tZG9jcy5tNDoKLQkgIGFkZCBHU1RfUExVR0lOX0RPQ1MsIHdoaWNoIGNoZWNrcyBmb3IgZXZlcnl0aGluZyBuZWVkZWQKLQkgIHRvIGJ1aWxkIHRoZSBwbHVnaW4gZG9jcyAobmFtZWx5IGd0ay1kb2MgYW5kIHB5eG1sKTsgYWxzbwotCSAgYWRkcyBhIG5ldyAtLWVuYWJsZS1wbHVnaW4tZG9jcyBjb25maWd1cmUgc3dpdGNoOyB3aWxsCi0JICBzZXQgRU5BQkxFX1BMVUdJTl9ET0NTIGNvbmRpdGlvbmFsIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0KLQkgIGZpbGVzIChzZWUgIzM0NDAzOSkuCi0KLTIwMDYtMDYtMTEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIGFkZCBHU1RfUEtHX0NIRUNLX01PRFVMRVMsIHdoaWNoIGluIHRoZSBub3JtYWwgY2FzZSBvZiBjaGVja2luZwotCSAgZm9yIGEgZGVwZW5kZW5jeSBsaWIgZm9yIGEgcGx1Zy1pbiBvbmx5IG5lZWRzIHR3byBhcmd1bWVudHMKLQkgIHRvIGRvIHRoZSByaWdodCB0aGluZy4KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCSAgY2xlYW4gdXAgb3V0cHV0IGEgbGl0dGxlIG9mIGZlYXR1cmUgY2hlY2tpbmc7IGFsc28gZGVhbCB3aXRoCi0JICBub24tcGx1Zy1pbiBmZWF0dXJlIGNoZWNrcwotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9nc3QtZ3N0cmVhbWVyLm00OgotCSAgcmVtb3ZlIHRoaXMgZmlsZTsgaXQncyBhIHVzZWxlc3MgY2hlY2sKLQotMjAwNi0wNi0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyY2gubTQ6Ci0JICBhZGQgUFBDNjQgc28gd2UgY2FuIGhhdmUgc2VwYXJhdGUgc3RydWN0dXJlIHNpemVzIGZvciBpdAotCi0yMDA2LTA2LTA1ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgotCi0JKiBndGstZG9jLm1hazoKLQlDaGVjayBmb3IgdGhlIHByb3BlciAuZGV2aGVscDIgZmlsZSB0byByZW1vdmUuCi0KLTIwMDYtMDUtMzEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgYWxsb3cgYSBtYWdpYyB2YXJpYWJsZSB0byBzdXBwcmVzcyBlcnJvcnMgZnJvbSBkb2NidWlsZGluZwotCi0yMDA2LTA1LTMwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZ3RrLWRvYy5tYWs6Ci0JICBlcnJvciBvdXQgaWYgZ3RrZG9jLW1rdG1wbCBmaW5kcyB1bnVzZWQgZGVjbGFyYXRpb25zCi0KLTIwMDYtMDUtMjggIEVkd2FyZCBIZXJ2ZXkgIDxlZHdhcmRAZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCVJldmVydGluZyBwcmV2aW91cyBjb21taXQuICBUaGF0J3MgZ29vZCB0byBrbm93LCBFZHdhcmQsIGJ1dCB3aHkgPwotCQotMjAwNi0wNS0yOCAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JQWRkZWQgc3VwcHJlc2lvbiBmb3IgbWVtbGVhayBpbiBnX29wdGlvbl9jb250ZXh0X3BhcnNlIG9uIGZjNS02NAotCi0yMDA2LTA1LTE5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtY2hlY2subTQ6Ci0JICBzZXQgR1NUUEJfUExVR0lOU19ESVIganVzdCBsaWtlIEdTVF9QTFVHSU5TX0RJUgotCi0yMDA2LTA1LTE4ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIEZpeCAnbWFrZSBoZWxwJyBpbiBjaGVjayBkaXJlY3RvcmllcywgaXQgc2hvdWxkIGJlCi0JICAndmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9ucycgbm90ICd2YWxncmluZC1nZW4tc3VwcHJlc3Npb25zJwotCSAgKG5vdCBjaGFuZ2luZyB0YXJnZXQgdG8gbWF0Y2ggaGVscCBzdHJpbmcgb24gcHVycG9zZSB0byBrZWVwCi0JICBzY3JpcHRzIGV0Yy4gZnVuY3Rpb25hbCkuCi0KLTIwMDYtMDUtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlQYXRjaCBieTogUGV0ZXIgS2plbGxlcnN0ZWR0Ci0KLQkqIG00L2dzdC1hcmNoLm00OgotCSAgYWRkIHN1cHBvcnQgZm9yIENSSVMgYW5kIENSSVN2MzIuCi0KLTIwMDYtMDUtMTcgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JRml4IHRoZSBtYWNyb3MgZm9yIGNvbW1hbmQtbGluZSBzdXBwbGllZCBwYWNrYWdlIGFuZCBvcmlnaW4gbmFtZXMKLQlzbyB0aGV5IGRvbid0IGVuZCB1cCBiZWluZyBjb25maWd1cmUgYXMgIiIgKEZpeGVzICMzNDE0NzkpCi0KLTIwMDYtMDUtMTQgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBndGstZG9jLm1hazoKLQlBZGQgdW5pbnN0YWxsIHJ1bGUgdG8gcmVtb3ZlIC5kZXZoZWxwMiBmaWxlcy4KLQotMjAwNi0wNS0wOSAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6IAotCSAgQWRkIHN1cHByZXNzaW9uIGZvciBHU2xpY2UgdmVyc2lvbiBvZgotCSAgZ190eXBlX2luaXQgY2FsbG9jIGxlYWsKLQotMjAwNi0wNC0wNSAgTWljaGFlbCBTbWl0aCAgPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6Ci0JICBEZWxldGUgYSBib2d1cyBzdXBwcmVzc2lvbiBmb3IgdGhlIHJlZ2lzdHJ5IGNvZGUuCi0JICBHZW5lcmFsaXNlIGEgc3VwcHJlc3Npb24gZm9yIGEgZ2xpYiBidWcgKHNlZSAjMzM3NDA0KQotCi0yMDA2LTA0LTA0ICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCSAgQWRkIGEgbGVhayBzdXBwcmVzc2lvbjogdGhlIGV4aXN0aW5nIGdsaWJjLWRvZXNuJ3QtZnJlZS1UTFMgb25lCi0JICB3YXNuJ3QgdHJpZ2dlcmluZyBoZXJlLgotCi0yMDA2LTA0LTA0ICBNaWNoYWVsIFNtaXRoIDxtc21pdGhAZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC5zdXBwOgotCSAgQWRkIHNvbWUgbWluaW1hbGx5LW5lY2Nlc2FyeSBzdXBwcmVzc2lvbnMgZm9yIG15IHg4Ni9kYXBwZXIgc3lzdGVtLgotCi0yMDA2LTA0LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwbHVnaW5zLnhzbDoKLQkgIERvIG5vdCBkaXNwbGF5IGFuIG9yaWdpbiBsaW5rIGlmIG9yaWdpbiBkb2VzIG5vdCBzdGFydCB3aXRoIGh0dHAKLQkgIFNlZSAjMzIzNzk4Ci0KLTIwMDYtMDQtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0JICBhZGQgbW9yZSBtYWNyb3MKLQkqIG00L2dzdC14MTEubTQ6Ci0JICBYMTEtcmVsYXRlZCBjaGVja3MKLQotMjAwNi0wNC0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvYXMtdmVyc2lvbi5tNDoKLQkgIG5ld2VyIHZlcnNpb24KLQkqIG00L2dzdC1hcmdzLm00OgotCSogbTQvZ3N0LWRvYy5tNDoKLQkgIHVwZGF0ZSBhbmQgYWRkIG90aGVyIG1hY3JvcyB0byBiZSBzaGFyZWQgYWNyb3NzIHByb2plY3RzCi0KLTIwMDYtMDMtMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC5zdXBwOgotCSAgYWRkIGEgc3VwcHJlc3Npb24gZm9yIGdfcGFyc2VfZGVidWdfc3RyaW5nCi0KLTIwMDYtMDMtMjMgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGdzdGRvYy1zY2FuZ29iajoKLQkgIHN5bmMgZnVsbHkgd2l0aCBndGtkb2MtMC4xNQotCi0yMDA2LTAzLTIzICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0JKiBndGstZG9jLm1hazoKLQkgIHN5bmMgYSBsaXR0bGUgd2l0aCBndGstZG9jIG1haW5saW5lCi0KLTIwMDYtMDMtMTcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3Quc3VwcDoKLQkgIGFkZCBhbm90aGVyIGNsb25lIHN1cHByZXNzaW9uCi0JICBjaGFuZ2UgYWxsIGdsaWJjIHN1cHByZXNzaW9ucyB0byBtYXRjaCAyLjMuKgotCi0yMDA2LTAzLTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9jaGVjay5tNDoKLQkgIGZpeCB0ZXN0IHNvIGl0IGFjdHVhbGx5IHdvcmtzIHdoZW4gdGhlIG5vcm1hbCBjaGVjayBpcyB1c2VkCi0JICBvdmVyIGRlYmlhbidzL3VidW50dSdzCi0KLTIwMDYtMDMtMDggIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogY2hlY2subWFrOgotCVNldCBHX1NMSUNFPWFsd2F5cy1tYWxsb2Mgd2hlbiB2YWxncmluZGluZyB0ZXN0cwotCShjbG9zZXMgIzMzMzI3MikKLQotMjAwNi0wMi0yMSAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBtNC9nc3QtZ2xpYjIubTQ6Ci0JRml4IGRlYnVnIG91dHB1dCB3aGVuIHRoZSBHTGliIHZlcnNpb24gcHJlcmVxdWlzaXRlIGlzIG5vdCBmb3VuZAotCi0yMDA2LTAyLTEzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBtNC9jaGVjay5tNDogSGFjayBhcm91bmQgRGViaWFuL1VidW50dSdzIGJyb2tlbiBpbnN0YWxsYXRpb24gb2YKLQl0aGUgUElDIHZlcnNpb24gb2YgY2hlY2sgYXMgbGliY2hlY2tfcGljLmEuIFNob3VsZCB3b3JrIHdpdGgKLQljcm9zcy1jb21waWxhdGlvbiB0b28uIEdyci4KLQotMjAwNi0wMi0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWRlZmF1bHQubTQ6Ci0JICBzd2l0Y2ggdG8gYXV0byogc2lua3MgZm9yIGRlZmF1bHRzCi0KLTIwMDYtMDItMDIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjaGVjay5tYWs6Ci0JICBhZGQgYSAudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9ucyB0YXJnZXQgdG8gYWlkIGluIGdlbmVyYXRpbmcKLQkgIHN1cHByZXNzaW9ucwotCSogZ3N0LnN1cHA6Ci0JICBhZGQgbW9yZSByZXByZXNzaW9ucyBmcm9tIG15IGRlYmlhbiBnbGliYyBhcyBvZiB0b2RheQotCi0yMDA2LTAyLTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgb25seSBhZGQgc3JjZGlyL2dzdCBpZiBpdCBleGlzdHMKLQotMjAwNi0wMS0zMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogcmVsZWFzZS5tYWs6Ci0JICBkb24ndCBjb21wbGFpbiBhYm91dCBkaXN0ZWQgZW51bXMgaW4gd2luMzIKLQotMjAwNi0wMS0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgQUNfU1VCU1QgQ0ZMQUdTIGFuZCBMSUJTCi0JICBkbyBhIG5vbi1jb21tYW5kIGJlY2F1c2Ugc29tZXRoaW5nIGlzIHN0cmlwcGluZyBvdXQgb3VyIEFDX1NVQlNUCi0KLTIwMDYtMDEtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1hcmdzLm00OgotCSogbTQvZ3N0LXZhbGdyaW5kLm00OgotCSAgcHJvcGVybHkgZ2l2ZSBhICJubyIgcmVzdWx0IG1hbnVhbGx5IHdoZW4gcHJvdmlkaW5nIGEKLQkgIG5vdC1mb3VuZCBhY3Rpb24gdG8gZml4IGNvbmZpZ3VyZSBvdXRwdXQKLQotMjAwNi0wMS0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvcGtnLm00OgotCSAgdXBkYXRlIHdpdGggYSBtb3JlIHJlY2VudCB2ZXJzaW9uCi0KLTIwMDYtMDEtMDcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdldHRleHQucGF0Y2g6Ci0JICBtYWtlIE1ha2VmaWxlIGRlcGVuZCBvbiBMSU5HVUFTLCBzbyByZWJ1aWxkcyB3b3JrIHdoZW4gYWRkaW5nCi0JICBhIGxhbmd1YWdlCi0KLTIwMDYtMDEtMDMgIE1pY2hhZWwgU21pdGggIDxtc21pdGhAZmx1ZW5kby5jb20+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIENsYXJpZnkgZXJyb3IgbWVzc2FnZSBmcm9tIHZhbGdyaW5kIHRlc3QgcnVucy4KLQotMjAwNS0xMi0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyY2gubTQ6Ci0JICBkZWZpbmUgSE9TVF9DUFUKLQotMjAwNS0xMS0yOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgYWRkIGEgdmFsZ3JpbmQtZm9yZXZlciB0YXJnZXQgZm9yIHRlc3RzCi0KLTIwMDUtMTEtMjggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIHdoZW4gYSAibWFrZSB0ZXN0LmNoZWNrIiBydW4gZmFpbHMsIG1ha2UgaXQgcmVydW4gdGhlIHRlc3Qgd2l0aAkKLQkgIGF0IGxlYXN0IGRlYnVnIGxldmVsIDIKLQotMjAwNS0xMS0xNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvTWFrZWZpbGUuYW06Ci0JKiBtNC9nc3QtY2hlY2subTQ6Ci0JICBmaXggY2hlY2sgZm9yIGJhc2UgcGx1Z2lucwotCSogbTQvZ3N0LWRlZmF1bHQubTQ6Ci0JICBhZGQgbTQgdG8gc2V0IGRlZmF1bHQgZWxlbWVudHMKLQotMjAwNS0xMC0xOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgY2hlY2sgZm9yIHRvb2xzIGNvcnJlY3RseQotCi0yMDA1LTEwLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBndGstZG9jLm1hazoKLQkgIG9ubHkgZW5hYmxlIGJyZWFraW5nIG9uIG5ldyBBUEkgd2hlbiBtYWtlIGRpc3RjaGVjayBwYXNzZXMsCi0JICBub3QgYmVmb3JlCi0KLTIwMDUtMTAtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIFJlc3VycmVjdCBKdWxpZW4ncyBkZWFkIGJvZHkgYW5kIHdpcGUgaGlzIG1pbmQgY2xlYW4KLQotMjAwNS0xMC0xOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWNoZWNrLm00OgotCSAgS2lsbCBKdWxpZW4KLQotMjAwNS0xMC0xNyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBtNC9nc3QtY2hlY2subTQ6IEkga25vdyBUaG9tYXMgd2lsbCBraWxsIG1lIGJ1dCB0aGlzIAotCWlmZWxzZSBzdGF0ZW1lbnQgc2VlbXMgaW5jb3JyZWN0IGFzIGl0IGlzIGFsd2F5cyBzZXR0aW5nCi0JcmVxdWlyZWQgdG8gInllcyIuIFdpdGggdGhpcyBvbmUgaXQgc2VlbXMgdG8gd29yay4gRml4ZXMKLQlidWlsZCBvZiBnc3QtcGx1Z2lucy1iYXNlIG9uIG15IHNldHVwIHdoZXJlIGdzdHJlYW1lci1jaGVjawotCWlzIGRlZmluaXRlbHkgbm90IHByZXNlbnQvcmVxdWlyZWQuCi0KLTIwMDUtMTAtMTggIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgbWFrZSBidWlsZCBicmVhayBvbiBuZXcgYXBpIHRoYXQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHRoZQotCSAgc2VjdGlvbnMgZmlsZQotCi0yMDA1LTEwLTE3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZ2xpYjIubTQ6Ci0JKiBtNC9NYWtlZmlsZS5hbToKLQkqIG00L2dzdC1jaGVjay5tNDoKLQkgIGFkZCBtYWNybyBmb3IgZWFzeSBjaGVja3MgZm9yIEdTdHJlYW1lciBsaWJzCi0KLTIwMDUtMTAtMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1nbGliMi5tNDoKLQkgIHVwZGF0ZSwgd2FybiBpbiBlcnJvciBjYXNlcwotCi0yMDA1LTEwLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JICBhZGQgR1NUX1NFVF9ERUZBVUxUX0xFVkVMCi0KLTIwMDUtMTAtMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvZ3N0LWdldHRleHQubTQ6Ci0JICByZW1vdmUgdGhlIEFNX0dOVV9HRVRURVhUKiBjYWxscywgdGhleSBuZWVkIHRvIGJlIGluIGNvbmZpZ3VyZS5hYwotCSogbTQvZ3N0LWdsaWIyLm00OgotCSAgY2xlYW4gdXAgYW5kIHJlLXVzZSBpbiBjb3JlIHNvb24KLQkqIG00L2dzdC1wbHVnaW5kaXIubTQ6Ci0JICBtYWNybyB0byBzZXQgdXAgUExVR0lORElSIGFuZCBwbHVnaW5kaXIgZGVmaW5lL3ZhcgotCi0yMDA1LTEwLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9NYWtlZmlsZS5hbToKLQkqIG00L2dzdC1nZXR0ZXh0Lm00OgotCSAgYWRkIG1hY3JvIGZvciBzZXR0aW5nIHVwIGdldHRleHQKLQotMjAwNS0xMC0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWFyZ3MubTQ6Ci0JICBhZGQgc29tZSAubTQncyBmb3IgYXJndW1lbnQgY2hlY2tpbmcgdGhhdCBjYW4gYmUgc2hhcmVkIGFtb25nIG1vZHVsZXMKLQotMjAwNS0xMC0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvYXMtbGlidG9vbC5tNDoKLQkgIHNldCBfTFRfTERGTEFHUwotCSogbTQvZ3N0LWxpYnhtbDIubTQ6Ci0JICBkb2N1bWVudAotCi0yMDA1LTEwLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtYXJjaC5tNDoKLQkgIGluZGVudCBhIGxpdHRsZQotCSAgYWRkIEFDX1JFUVVJUkUKLQkqIG00L2dzdC1lcnJvci5tNDoKLQkgIGNsZWFuIHVwCi0KLTIwMDUtMTAtMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1hdXRvZ2VuLnNoOgotCSAgdXBkYXRlIHZlcnNpb24gZGV0ZWN0aW9uIGV4cHJlc3Npb24gdG8gY2F0Y2ggc3R1ZmYgbGlrZQotCSAgTGlidG9vbCAobGlidG9vbDE1KSAxLjUuMAotCi0yMDA1LTEwLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3Quc3VwcDoKLQkgIGNvbW1pdCA2IG5ldyBzdXBwcmVzc2lvbnMgcmVsYXRlZCB0byBnX21vZHVsZV9vcGVuOyBjYW4gdGhlc2UKLQkgIHJlYWxseSBub3QgYmUgZm9sZGVkIGludG8gb25lID8KLQotMjAwNS0xMC0xMSAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LnN1cHA6IAotCW1hZGUgdGhlIDxnX3R5cGVfaW5pdCBjYWxsb2MgMj4gc3VwcHJlc3Npb24gbW9yZSBnZW5lcmljCi0JQWRkZWQgcHRocmVhZCBtZW1sZWFrIHN1cHByZXNpb25zCi0JQWRkZWQgbnNzX3BhcnNlXyogbWVtbGVhayBzdXBwcmVzaW9uICh1c2VkIGJ5IGdfb3B0aW9uX2NvbnRleHRfcGFyc2UpCi0KLTIwMDUtMTAtMTEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIGJlIG1vcmUgc3RyaWN0LCBtb3JlIGxlYWsgcmVzb2x1dGlvbgotCSogZ3N0LnN1cHA6Ci0JICBjbGVhbiB1cCB0aGUgZ190eXBlX2luaXQgc3VwcHJlc3Npb25zCi0KLTIwMDUtMTAtMDcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L01ha2VmaWxlLmFtOgotCSogbTQvZ3N0LXZhbGdyaW5kLm00OgotCSAgcHV0IHRoZSB2YWxncmluZCBkZXRlY3Rpb24gaW4gYW4gLm00Ci0KLTIwMDUtMDktMjkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIGFkZCBzb21lIG1vcmUgdGFyZ2V0cywgbGlrZSAiaGVscCIsIGJ1dCBhbHNvIG1vcmUgaW50ZW5zaXZlIHRlc3RzCi0KLTIwMDUtMDktMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MubWFrOgotCSAgbWFrZSBjZXJ0YWluIGRvYyB3YXJuaW5ncyBmYXRhbCBzbyBwZW9wbGUgbWFpbnRhaW4gZG9jcyBhZ2FpbgotCi0yMDA1LTA5LTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBzY2FuZ29iai1tZXJnZS5weToKLQkgIG1lcmdlIGFkZGl0aW9ucyBmcm9tIHRoZSAuc2lnbmFscy5uZXcgYW5kIC5hcmdzLm5ldyBmaWxlIGluCi0JICB0aGUgb3JpZ2luYWwgb25lcywgb25seSB1cGRhdGluZyBpZiBuZWNlc3NhcnkKLQotMjAwNS0wOS0yMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LXhtbGluc3BlY3QucHk6Ci0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgZml4IHByb3Blcmx5IGZvciBuZXcgQVBJOyBtYWtlIHVwZGF0ZSBpbiBwbHVnaW5zIGRpciBub3cgd29ya3MKLQotMjAwNS0wOS0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LXhtbGluc3BlY3QucHk6Ci0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0JICBzb21lIGZpeGVzIGZvciBuZXcgQVBJCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgc2V0IGVudmlyb25tZW50IHByb3Blcmx5Ci0KLTIwMDUtMDktMTcgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazogVXNlIG5ldyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0KLTIwMDUtMDktMTYgIE1pY2hhZWwgU21pdGggPG1zbWl0aEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0ZG9jLXNjYW5nb2JqOgotCSAgTWFrZSB0aGUgc2Nhbm9iaiBjb2RlIHJlZmxlY3QgcmVnaXN0cnkvcGx1Z2luIEFQSSBjaGFuZ2VzCi0KLTIwMDUtMDktMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JICBzcGxpdCBvdXQgc2Nhbm9iaiBzdGVwICh3aGljaCB3aWxsIGJlIHJ1biBieSBkb2MgbWFpbnRhaW5lcikKLQkgIGZyb20gc2NhbiBzdGVwICh3aGljaCB3aWxsIGJlIHJ1biBvbiBldmVyeSBidWlsZCkKLQkgIGNsZWFuIHVwIHNvbWUgb2YgdGhlIGNvbW1hbmRzIGZvciBtYWtlIGRpc3RjaGVjawotCi0yMDA1LTA5LTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSogbWFuZ2xlLXRtcGwucHk6Ci0JICBmaXJzdCBzdGFiIGF0IHJlb3JnYW5pemluZyB0aGUgcGx1Z2lucyBidWlsZCBzbyB3ZSBjYW4gbWFpbnRhaW4KLQkgIGVsZW1lbnQgZG9jcwotCi0yMDA1LTA5LTE0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGFzLWxpYnRvb2wubWFrOiBSZW1vdmUKLQkqIG00L2FzLWxpYnRvb2wubTQ6IFRoZSBsaWJ0b29sIGJ1ZyB0aGF0IHRoaXMgd29ya2VkIGFyb3VuZCBoYXMKLQkgIGJlZW4gZml4ZWQuCi0JKiBtNC9hcy12ZXJzaW9uLm00OiBEb24ndCBkZWZpbmUgR1NUX1JFTEVBU0UsIHNpbmNlIGl0IGNhdXNlcwotCSAgY29uZmlnLmggdG8gYmUgcmVnZW5lcmF0ZWQgbmVlZGxlc3NseSwgYW5kIHdlIGRvbid0IHVzZSBpdC4KLQotMjAwNS0wOS0xNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3RrLWRvYy1wbHVnaW5zLm1hazoKLQkgIGVycm9yIG91dCBvbiBpbnNwZWN0IGZhaWx1cmUKLQotMjAwNS0wOS0xNCAgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgotCi0JKiBnbGliLWdlbi5tYWs6Ci0JICBEb24ndCBjYWxsIGdsaWItbWtlbnVtcyB3aXRoIGFyZ3VtZW50cyB0aGF0IGNvbmZ1c2UvYnJlYWsgTWluR1csCi0JICBmaXhlcyAzMTYxNTUuCi0KLTIwMDUtMDktMDMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGd0ay1kb2MtcGx1Z2lucy5tYWs6Ci0JKiBndGstZG9jLm1hazoKLQkqIG00L2dzdC1kb2MubTQ6Ci0JICBzZXBhcmF0ZSBvdXQgZ3RrLWRvYyBhbmQgZG9jYm9vayBzdHVmZgotCSAgaGF2ZSB0d28gc2VwYXJhdGUgLS1lbmFibGUgY29uZmlndXJlIGZsYWdzCi0KLTIwMDUtMDgtMjYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIGFkZCBhIC5nZGIgdGFyZ2V0OyByZWJ1aWxkIHJlZ2lzdHJ5IGZvciBlYWNoIHRhcmdldCwgb3RoZXJ3aXNlCi0JICBhIGNvZGUgcmVidWlsZCBhbHdheXMgdHJpZ2dlcnMgYSByZWcgcmVidWlsZCwgYW5kIGl0J3MganVzdCB0b28KLQkgIGFubm95aW5nCi0JKiBnc3Rkb2Mtc2NhbmdvYmo6Ci0KLTIwMDUtMDgtMjEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNoZWNrLm1hazoKLQkgIHNlcGFyYXRlIG91dCBSRUdJU1RSWV9FTlZJUk9OTUVOVDsgd2Ugd2FudCB0byB1c2UgdGhhdCBmcm9tCi0JICBvdXIgdmFsZ3JpbmQgcnVucywgYnV0IHdlIGFsc28gd2FudCBURVNUU19FTlZJUk9OTUVOVCB0byBjb250YWluCi0JICBldmVyeXRoaW5nIHRoYXQgdGhlIGZpcnN0IHRlc3QsIGdzdC1yZWdpc3RlciwgbmVlZHMKLQotMjAwNS0wOC0yMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgcGFyc2Ugb3V0cHV0IG9mIHZhbGdyaW5kIGFuZCBjaGVjayBmb3IgZGVmaW5pdGVseSBsb3N0LCBhbmQgZXJyb3IKLQkgIG91dDsgc29tZWhvdyBJIHdhcyBsZWQgdG8gYmVsaWV2ZSB2YWxncmluZCByZXR1cm5zIG5vbi16ZXJvIGZvcgotCSAgbGVha3MsIGJ1dCBJIGNhbid0IG1ha2UgaXQgZG8gdGhhdCwgc28gbGV0J3MgcGFyc2UKLQotMjAwNS0wOC0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY2hlY2subWFrOgotCSAgZm9yIHNvbWUgd2VpcmQgcmVhc29uIHZhbGdyaW5kIGRvZXMgbm90IHJlcG9ydCBhY3R1YWwgbWVtbGVha3MKLQkgIGlmIEdTVF9QTFVHSU5fUEFUSCBpcyBzZXQgdG8gYW55dGhpbmcgYnV0IHRoZSBjb3JlIGdzdHJlYW1lciBkaXIKLQkgIHdoaWxlIHZhbGdyaW5kIGlzIHJ1bm5pbmcuICBTaW5jZSB0aGUgcmVnaXN0cnkgaXMgZ29pbmcgdG8gZ28KLQkgIGFueXdheSwgSSBkb24ndCB3YW50IHRvIHdhc3RlIGFueSBtb3JlIHRpbWUgb24gdGhpczsgSSBqdXN0IHJ1bgotCSAgdmFsZ3JpbmQgd2l0aG91dCBHU1RfUExVR0lOX1BBVEggc2V0LiAgU2luY2UgdGhlIHJlZ2lzdHJ5IGxvYWRpbmcKLQkgIGRvZXNuJ3QgY2hlY2sgaWYgR1NUX1BMVUdJTl9QQVRIIGdvdCBjaGFuZ2VkIGFzIGEgcmVhc29uIHRvIHJlYnVpbGQKLQkgIHRoZSByZWdpc3RyeSwgdGhhdCdzIGFjdHVhbGx5IGZpbmUuCi0KLTIwMDUtMDgtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG1hbmdsZS10bXBsLnB5OgotCSAga2VlcCBvcmlnaW5hbCBMb25nX0Rlc2NyaXB0aW9uOyBvbmx5IGluc2VydCBhbiBpbmNsdWRlIGlmIGl0J3MKLQkgIG5vdCBhbHJlYWR5IHRoZSBmaXJzdCBsaW5lIGluIHRoZXJlCi0JKiBwbHVnaW5zLnhzbDoKLQkgIG91dHB1dCBtb3JlIGluZm9ybWF0aW9uIGZvciBwbHVnaW5zLCBpbmNsdWRpbmcgYW4gb3JpZ2luIGh5cGVybGluawotCi0yMDA1LTA4LTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QteG1saW5zcGVjdC5weToKLQkgIGEgZmlyc3Qgc3RhYiBhdCBpbnNwZWN0aW5nIHBsdWdpbnMgYW5kIG91dHB1dHRpbmcgYW4geG1sIGRlc2NyaXB0aW9uCi0JKiBndGstZG9jLXBsdWdpbnMubWFrOgotCSAgYSBndGstZG9jIHVzaW5nIHNuaXBwZXQgZm9yIHBsdWdpbnMgZG9jdW1lbnRhdGlvbgotCSogcGx1Z2lucy54c2w6Ci0JICBhIHN0eWxlc2hlZXQgdG8gY29udmVydCBnc3QteG1saW5zcGVjdC5weSBvdXRwdXQgdG8gZG9jYm9vayBvdXRwdXQKLQkgIGZvciBpbmNsdXNpb24gaW4gdGhlIGd0ay1kb2Mgc3R1ZmYKLQotMjAwNS0wNy0yMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogbTQvZ3N0LWRvYy5tNDoKLQkgIHMvcGRmL2Vwcy8gaW4gdGVzdCBmb3Igd2hldGhlciB3ZSBvdXRwdXQgRVBTIGltYWdlcyAoIzMwOTM3OSkuCi0KLTIwMDUtMDctMTggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIG00L2FzLWxpYnRvb2wtdGFncy5tNDogT29oLCBiYWNrcG9ydGVkIGZyb20gbGlidG9vbCAxLjYuIE11Y2gKLQliZXR0ZXIuIFRoYW5rcywgUGFvbG8gQm9uemluaSEKLQkKLQkqIG00L01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogCi0JKiBtNC9hcy1saWJ0b29sLXRhZ3MubTQ6IE5ldyBmaWxlLCB0cmllcyB0byBkaXNhYmxlIHNvbWUgQ1hYIGFuZAotCWZvcnRyYW4gY2hlY2tzLgotCi0yMDA1LTA3LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZXJyb3IubTQ6Ci0JICBhZGQgbWFjcm8gdG8gc2V0IEVSUk9SX0NGTEFHUwotCi0yMDA1LTA2LTMwICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC1hdXRvZ2VuLnNoOgotCSAgUmVtb3ZlIHRoZSBvbGQgYXV0b3JlZ2VuLnNoIGlmIGl0IGV4aXN0cyBiZWZvcmUgcmVjcmVhdGluZyBpdCwKLQkgIHRvIHByZXZlbnQgY29uZnVzaW5nIGFueSBzaGVsbCBwcm9jZXNzIHRoYXQgbWlnaHQgYmUgcmVhZGluZyBpdAotCSAgY3VycmVudGx5LgotCi0yMDA1LTA2LTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9ndGstZG9jLm00OgotCSAgYWRkZWQKLQotMjAwNS0wNi0wMyAgU3RlZmFuIEtvc3QgIDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLQotCSogZ3N0LWF1dG9nZW4uc2g6IGNyZWF0ZSBhdXRvcmVnZW4uc2ggKmJlZm9yZSogc2hpZnRpbmcgdGhlIG9wdGlvbnMKLQotMjAwNS0wNS0xNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWF1dG9nZW4uc2g6IG9ubHkgdXBkYXRlIGF1dG9yZWdlbi5zaCBvbiBhY3R1YWwgcnVucwotCi0yMDA1LTAzLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9jaGVjay5tNDogbTQgZnJvbSB0aGUgY2hlY2sgdW5pdCB0ZXN0IHN1aXRlCi0KLTIwMDQtMTItMTQgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogbTQvZ3N0LWFyY2gubTQ6IHJlbW92ZSBNTVggc3R1ZmYsIHNpbmNlIGl0IGRvZXNuJ3Qgd29yayBhbmQKLQlpc24ndCBuZWVkZWQgYW55d2hlcmUKLQotMjAwNC0xMi0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWF1dG9nZW4uc2g6Ci0JICBhbGxvdyBmYWlsdXJlIGNvbW1hbmQgdG8gYmUgcnVuIHNvIHdlIGNhbiBjbGVhbiB1cGZyb20gYXV0b3BvaW50Ci0KLTIwMDQtMDktMDMgIFplZXNoYW4gQWxpIEtoYXR0YWsgPHplZW5peEBnbWFpbC5jb20+Ci0JKiBtNC9nc3QtZmVhdHVyZS5tNDogVHJ5aW5nIHRvIGNvcnJlY3QgdGhlIEdTVF9DSEVDS19DT05GSUdQUk9HIG1hY3JvCi0KLTIwMDQtMDctMjEgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogbTQvLmN2c2lnbm9yZTogZXhjaXRpbmcgdXBkYXRlcyBmb3IgbGlidG9vbCBtNCBmaWxlcwotCi0yMDA0LTA3LTEyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIG00L2FzLW9iamMubTQ6ICBBZGQgYSBtYWNybyB0byB0ZXN0IGZvciBvYmplY3RpdmUgQwotCi0yMDA0LTA2LTEyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLQkgIG5vdCBhbGwgb2YgdGhlbSBzdXBwb3J0IC0tcGx1Z2luLWxpYnMsIHNvIHJlZGlyZWN0IHN0ZGVycgotCi0yMDA0LTA2LTEyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hcy1zY3J1Yi1pbmNsdWRlLm00OgotCSAgc3luYyB3aXRoIHVwc3RyZWFtIHRvIDAuMS40LiAgRml4ZXMgIzEzMjQ0MAotCi0yMDA0LTA2LTA3ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIG00L2dzdC1mZWF0dXJlLm00OgotCSAgd3JpdGUgYSBiaWcgbWFya2VyIGludG8gY29uZmlndXJlIG91dHB1dCB3aGVuIGNoZWNraW5nIG5leHQgcGx1Z2luCi0JICB0byBhbGxvdyBlYXNpZXIgcGFyc2luZyBvZiB3aHkgcGx1Z2lucyBhcmUobid0KSBidWlsdC4KLQotMjAwNC0wNi0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvYXMtY29tcGlsZXItZmxhZy5tNDoKLQkqIG00L2FzLWNvbXBpbGVyLm00OgotCSogbTQvYXMtbGlidG9vbC5tNDoKLQkqIG00L2FzLXZlcnNpb24ubTQ6Ci0JICBzeW5jIHdpdGggdXBzdHJlYW0sIGNoYW5nZSBzdGlja3kgb3B0aW9ucyB0byAta28KLQotMjAwNC0wNS0yNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvYXMtc2NydWItaW5jbHVkZS5tNDogc3luY2VkIHdpdGggdXBzdHJlYW0KLQotMjAwNC0wNS0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogcG8ubWFrOgotICAgICAgICAgIHNuaXBwZXQgZm9yIHVwZGF0aW5nIC5wbyBmaWxlcwotCi0yMDA0LTAzLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIG00L01ha2VmaWxlLmFtOgotICAgICAgICAgIGludGVncmF0ZSB0aGVzZSB3aXRoIHRoZSBkaXN0Ci0KLTIwMDQtMDMtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHJlbGVhc2UubWFrOiBhZGQgYSByZWxlYXNlIHRhcmdldAotCi0yMDA0LTAzLTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JcGF0Y2ggYnk6IFN0ZXBoYW5lIExvZXVpbGxldAotCi0JKiBtNC9heF9jcmVhdGVfc3RkaW50X2gubTQ6Ci0gICAgICAgICAgdXNlIGhlYWQgLW4gaW5zdGVhZCBvZiBoZWFkIC0gKCMxMzY1MDApCi0KLTIwMDQtMDMtMDUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIG00L2dzdC1kb2MubTQ6IGRvbid0IGJ1aWxkIFBTIHdpdGhvdXQgZHZpcHMgYmluYXJ5Ci0KLTIwMDQtMDItMjIgICBKdWxpbyBNLiBNZXJpbm8gVmlkYWwgPGptbXZAbWVudGEubmV0PgotCi0JcmV2aWV3ZWQgYnk6IEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogbTQvYXMtZG9jYm9vay5tNDoKLQkgIGRvbid0IHVzZSA9PSBvcGVyYXRvciB3aXRoIHRlc3QoMSkgKGZpeGVzICMxMzUxMTUpCi0KLTIwMDQtMDItMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gCi0JKiBjb21tb24vbTQvZ3N0LWFyY2gubTQ6IHg4Nl82NCBpcyB4ODYgdG9vIChjbHVlIGZyb20gRmVkb3JhIDIgdGVzdCkKLQotMjAwNC0wMi0xMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogbTQvZ3N0LWZlYXR1cmUubTQ6Ci0gICAgICAgICAgcmVtb3ZlIEFNX0NPTkRJVElPTkFMIGZvciB0aGUgc3Vic3lzdGVtIHNpbmNlIGF1dG9tYWtlIDEuNi54Ci0gICAgICAgICAgcmVxdWlyZXMgdGhhdCBjYWxsIGJlIGluIGNvbmZpZ3VyZS5hYwotCi0yMDA0LTAyLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtbGlieG1sMi5tNDoKLSAgICAgICAgICB0YWtlIHJlcXVpcmVkIHZlcnNpb24gYXMgYXJndW1lbnQsIGFuZCBkZWZhdWx0IHRvIDIuNC45IGlmIG5vdAotICAgICAgICAgIHNwZWNpZmllZAotCi0yMDA0LTAyLTEyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9nc3QtZmVhdHVyZS5tNDoKLSAgICAgICAgICByZW5hbWUgYW5kIGZpeCB1cCBHU1RfQ0hFQ0tfRElTQUJMRV9TVUJTWVNURU0KLQotMjAwNC0wMi0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNDoKLQkqIGNvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNDoKLQkqIGNvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00OgotCSogY29tbW9uL200L2FzLWNvbXBpbGVyLm00OgotCSogY29tbW9uL200L2FzLWRvY2Jvb2subTQ6Ci0JKiBjb21tb24vbTQvYXMtbGlidG9vbC5tNDoKLQkqIGNvbW1vbi9tNC9hcy1zY3J1Yi1pbmNsdWRlLm00OgotCSogY29tbW9uL200L2FzLXZlcnNpb24ubTQ6Ci0JKiBjb21tb24vbTQvZ2xpYi1nZXR0ZXh0Lm00OgotCSogY29tbW9uL200L2dzdC1hcmNoLm00OgotCSogY29tbW9uL200L2dzdC1kZWJ1Z2luZm8ubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LWRvYy5tNDoKLQkqIGNvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNDoKLQkqIGNvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LWdsaWIyLm00OgotCSogY29tbW9uL200L2dzdC1nc3RyZWFtZXIubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LWxpYnhtbDIubTQ6Ci0JKiBjb21tb24vbTQvZ3N0LW1ha2Vjb250ZXh0Lm00OgotCSogY29tbW9uL200L2dzdC1tY3NjLm00OgotCSogY29tbW9uL200L3BrZy5tNDoKLSAgICAgICAgICBmaXggdW5kZXJxdW90ZWQgbWFjcm9zIGFzIHJlcG9ydGVkIGJ5IGF1dG9tYWtlIDEuOC54ICgjMTMzODAwKQotCi0yMDA0LTAyLTExICBKb2hhbiBEYWhsaW4gIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC1hdXRvZ2VuLnNoOiBVc2UgQS1aIGluc3RlYWQgb2YgQS16IGluIHNlZCBleHByZXNzaW9uIHRvCi0JYXZvaWQgYSB3YXJuaW5nCi0KLTIwMDQtMDItMDUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBtNC9nc3QtZG9jLm00OgotICAgICAgICAgIHdlIHVzZSAtLW91dHB1dC1mb3JtYXQ9eG1sIGFuZCAtLWluZ25vcmUtZmlsZXMgb3B0aW9ucyB0bwotICAgICAgICAgIGd0a2RvYy1ta2RiLCB3aGljaCBnb3QgYWRkZWQgYmV0d2VlbiAwLjkgYW5kIDEuMAotCi0yMDA0LTAyLTA0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hcy1saWJ0b29sLm00OiByZW1vdmUgQU1fUFJPR19MSUJUT09MIHNvIGl0IGNhbiBtb3ZlIGJhY2sKLSAgICAgICAgICB0byBjb25maWd1cmUuYWMgdG8gc2h1dCB1cCBsaWJ0b29saXplCi0KLTIwMDQtMDItMDMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLSAgICAgICAgKiBnbGliLWdlbi5tYWs6IGFkZGVkOyB1c2VkIHRvIGdlbmVyYXRlIGVudW1zIGFuZCBtYXJzaGFsIGNvZGUKLQotMjAwNC0wMS0xMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotICAgICAgICAqIGdldHRleHQucGF0Y2g6IGFkZGVkOyB1c2VkIGJ5IGF1dG9nZW4uc2ggdG8gbWFrZSBzdXJlCi0gICAgICAgICAgR0VUVEVYVF9QQUNLQUdFIGlzIHVuZGVyc3Rvb2QgZnJvbSBwby9NYWtlZmlsZS5pbi5pbiAtPiBwby9NYWtlZmlsZS5pbgotCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYWM3ZDguLjAwMDAwMDAKLS0tIGEvY29tbW9uL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotU1VCRElSUyA9IG00Ci0KLUVYVFJBX0RJU1QgPSBcCi0JQ2hhbmdlTG9nIFwKLQlnZXR0ZXh0LnBhdGNoIFwKLQlnbGliLWdlbi5tYWsgZ3RrLWRvYy5tYWsgdXBsb2FkLWRvYy5tYWsgXAotCWNydWZ0Lm1hayByZWxlYXNlLm1hayB3aW4zMi5tYWsgcG8ubWFrIFwKLQlwYXJhbGxlbC1zdWJkaXJzLm1hayBcCi0JZ3N0LWF1dG9nZW4uc2ggXAotCWNoZWNrLWV4cG9ydHMgXAotCWMtdG8teG1sLnB5IG1hbmdsZS1kYi5weSBzY2FuZ29iai1tZXJnZS5weSBcCi0JZ3RrLWRvYy1wbHVnaW5zLm1hayBcCi0JcGx1Z2lucy54c2wgZ3N0ZG9jLXNjYW5nb2JqIFwKLQlnc3Quc3VwcCBjaGVjay5tYWsgXAotCWNvdmVyYWdlL2xjb3YubWFrIFwKLQljb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwgXAotCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wgXAotCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbCBcCi0JZG93bmxvYWQtdHJhbnNsYXRpb25zIFwKLQlleHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSBcCi0JZ3N0LWluZGVudCBcCi0Jb3JjLm1hawpkaWZmIC0tZ2l0IGEvY29tbW9uL01ha2VmaWxlLmluIGIvY29tbW9uL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDkwMTg0Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg4MyArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGNvbW1vbgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGNzY29wZWxpc3QtcmVjdXJzaXZlIFwKLQljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWR2aS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAotCWluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgXAotCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSBcCi0JdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLVJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCi0gIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLWFtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKLSAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAotICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCi0gICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCi0JZGlzdGRpcgotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1ESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gQ2hhbmdlTG9nIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1TVUJESVJTID0gbTQKLUVYVFJBX0RJU1QgPSBcCi0JQ2hhbmdlTG9nIFwKLQlnZXR0ZXh0LnBhdGNoIFwKLQlnbGliLWdlbi5tYWsgZ3RrLWRvYy5tYWsgdXBsb2FkLWRvYy5tYWsgXAotCWNydWZ0Lm1hayByZWxlYXNlLm1hayB3aW4zMi5tYWsgcG8ubWFrIFwKLQlwYXJhbGxlbC1zdWJkaXJzLm1hayBcCi0JZ3N0LWF1dG9nZW4uc2ggXAotCWNoZWNrLWV4cG9ydHMgXAotCWMtdG8teG1sLnB5IG1hbmdsZS1kYi5weSBzY2FuZ29iai1tZXJnZS5weSBcCi0JZ3RrLWRvYy1wbHVnaW5zLm1hayBcCi0JcGx1Z2lucy54c2wgZ3N0ZG9jLXNjYW5nb2JqIFwKLQlnc3Quc3VwcCBjaGVjay5tYWsgXAotCWNvdmVyYWdlL2xjb3YubWFrIFwKLQljb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwgXAotCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wgXAotCWNvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbCBcCi0JZG93bmxvYWQtdHJhbnNsYXRpb25zIFwKLQlleHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSBcCi0JZ3N0LWluZGVudCBcCi0Jb3JjLm1hawotCi1hbGw6IGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgY29tbW9uL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGNvbW1vbi9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9jb21tb24vUkVBRE1FIGIvY29tbW9uL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNhMWI4OC4uMDAwMDAwMAotLS0gYS9jb21tb24vUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMjU1ICswLDAgQEAKLUdTdHJlYW1lciBAU0VSSUVTX1ZFUlNJT05ACi0KLVdIQVQgSVQgSVMKLS0tLS0tLS0tLS0KLQotVGhpcyBpcyBHU3RyZWFtZXIsIGEgZnJhbWV3b3JrIGZvciBzdHJlYW1pbmcgbWVkaWEuCi0KLVdIRVJFIFRPIFNUQVJUCi0tLS0tLS0tLS0tLS0tLQotCi1XZSBoYXZlIGEgd2Vic2l0ZSBhdAotaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCi0KLVlvdSBzaG91bGQgc3RhcnQgYnkgZ29pbmcgdGhyb3VnaCBvdXIgRkFRIGF0Ci1odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9mYXEvaHRtbC8KLQotVGhlcmUgaXMgbW9yZSBkb2N1bWVudGF0aW9uOyBnbyB0bwotaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbgotCi1Zb3UgY2FuIHN1YnNjcmliZSB0byBvdXIgbWFpbGluZyBsaXN0czsgc2VlIHRoZSB3ZWJzaXRlIGZvciBkZXRhaWxzLgotCi1XZSB0cmFjayBidWdzIGluIEdOT01FJ3MgYnVnemlsbGE7IHNlZSB0aGUgd2Vic2l0ZSBmb3IgZGV0YWlscy4KLQotWW91IGNhbiBqb2luIHVzIG9uIElSQyAtICNnc3RyZWFtZXIgb24gaXJjLmZyZWVub2RlLm9yZwotCi1HU3RyZWFtZXIgMS4wIHNlcmllcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU3RhcnJpbmcKLQotICBHU1RSRUFNRVIKLQotVGhlIGNvcmUgYXJvdW5kIHdoaWNoIGFsbCBvdGhlciBtb2R1bGVzIHJldm9sdmUuICBCYXNlIGZ1bmN0aW9uYWxpdHkgYW5kCi1saWJyYXJpZXMsIHNvbWUgZXNzZW50aWFsIGVsZW1lbnRzLCBkb2N1bWVudGF0aW9uLCBhbmQgdGVzdGluZy4KLQotICBCQVNFCi0KLUEgd2VsbC1ncm9vbWVkIGFuZCB3ZWxsLW1haW50YWluZWQgY29sbGVjdGlvbiBvZiBHU3RyZWFtZXIgcGx1Zy1pbnMgYW5kCi1lbGVtZW50cywgc3Bhbm5pbmcgdGhlIHJhbmdlIG9mIHBvc3NpYmxlIHR5cGVzIG9mIGVsZW1lbnRzIG9uZSB3b3VsZCB3YW50Ci10byB3cml0ZSBmb3IgR1N0cmVhbWVyLiAgCi0KLUFuZCBpbnRyb2R1Y2luZywgZm9yIHRoZSBmaXJzdCB0aW1lIGV2ZXIsIG9uIHRoZSBkZXZlbG9wbWVudCBzY3JlZW4gLi4uCi0KLSAgVEhFIEdPT0QKLQotIC0tLSAiU3VjaCBpbmdyYXRpdHVkZS4gIEFmdGVyIGFsbCB0aGUgdGltZXMgSSd2ZSBzYXZlZCB5b3VyIGxpZmUuIgotCi1BIGNvbGxlY3Rpb24gb2YgcGx1Zy1pbnMgeW91J2Qgd2FudCB0byBoYXZlIHJpZ2h0IG5leHQgdG8geW91IG9uIHRoZQotYmF0dGxlZmllbGQuICBTaG9vdGluZyBzaGFycCBhbmQgbWFraW5nIG5vIG1pc3Rha2VzLCB0aGVzZSBwbHVnLWlucyBoYXZlIGl0Ci1hbGw6IGdvb2QgbG9va3MsIGdvb2QgY29kZSwgYW5kIGdvb2QgbGljZW5zaW5nLiAgRG9jdW1lbnRlZCBhbmQgZHJlc3NlZCB1cAotaW4gdGVzdHMuICBJZiB5b3UncmUgbG9va2luZyBmb3IgYSByb2xlIG1vZGVsIHRvIGJhc2UgeW91ciBvd24gcGx1Zy1pbiBvbiwKLWhlcmUgaXQgaXMuCi0KLUlmIHlvdSBmaW5kIGEgcGxvdCBob2xlIG9yIGEgYmFkbHkgbGlwLXN5bmNlZCBsaW5lIG9mIGNvZGUgaW4gdGhlbSwKLWxldCB1cyBrbm93IC0gaXQgaXMgYSBtYXR0ZXIgb2YgaG9ub3VyIGZvciB1cyB0byBlbnN1cmUgQmxvbmRpZSBkb2Vzbid0IGxvb2sKLWxpa2UgaGUncyBiZWVuIHdhbGtpbmcgMTAwIG1pbGVzIHRocm91Z2ggdGhlIGRlc2VydCB3aXRob3V0IHdhdGVyLgotCi0gIFRIRSBVR0xZCi0KLSAgLS0tICJXaGVuIHlvdSBoYXZlIHRvIHNob290LCBzaG9vdC4gIERvbid0IHRhbGsuIgotCi1UaGVyZSBhcmUgdGltZXMgd2hlbiB0aGUgd29ybGQgbmVlZHMgYSBjb2xvciBiZXR3ZWVuIGJsYWNrIGFuZCB3aGl0ZS4KLVF1YWxpdHkgY29kZSB0byBtYXRjaCB0aGUgZ29vZCdzLCBidXQgdHdvLXRpbWluZywgYmFja3N0YWJiaW5nIGFuZCByZWFkeSB0bwotc2VsbCB5b3VyIGZyZWVkb20gZG93biB0aGUgcml2ZXIuICBUaGVzZSBwbHVnLWlucyBtaWdodCBoYXZlIGEgcGF0ZW50IG5vb3NlCi1hcm91bmQgdGhlaXIgbmVjaywgb3IgYSBsb2NrLXVwIGxpY2Vuc2UsIG9yIGFueSBvdGhlciBwcm9ibGVtIHRoYXQgbWFrZXMgeW91Ci10aGluayB0d2ljZSBhYm91dCBzaGlwcGluZyB0aGVtLgotCi1XZSBkb24ndCBjYWxsIHRoZW0gdWdseSBiZWNhdXNlIHdlIGxpa2UgdGhlbSBsZXNzLiAgRG9lcyBhIG1vdGhlciBsb3ZlIGhlcgotc29uIGxlc3MgYmVjYXVzZSBoZSdzIG5vdCBhcyBwcmV0dHkgYXMgdGhlIG90aGVyIG9uZXMgPyBObyAgLSBzaGUgY29tbWVuZHMKLWhpbSBvbiBoaXMgZ3JlYXQgcGVyc29uYWxpdHkuICBUaGVzZSBwbHVnLWlucyBhcmUgdGhlIGxpZmUgb2YgdGhlIHBhcnR5LgotQW5kIHdlJ2xsIHN0aWxsIHN0ZXAgaW4gYW5kIHNldCB0aGVtIHN0cmFpZ2h0IGlmIHlvdSByZXBvcnQgYW55IHVuYWNjZXB0YWJsZQotYmVoYXZpb3VyIC0gYmVjYXVzZSB0aGVyZSBhcmUgdHdvIGtpbmRzIG9mIHBlb3BsZSBpbiB0aGUgd29ybGQsIG15IGZyaWVuZDoKLXRob3NlIHdpdGggYSByb3BlIGFyb3VuZCB0aGVpciBuZWNrIGFuZCB0aGUgcGVvcGxlIHdobyBkbyB0aGUgY3V0dGluZy4KLQotICBUSEUgQkFECi0KLSAgLS0tICJUaGF0IGFuIGFjY3VzYXRpb24/IgotCi1ObyBwZXJmZWN0bHkgZ3Jvb21lZCBtb3VzdGFjaGUgb3IgYW55IGFtb3VudCBvZiBmaW5lIGNsb3RoaW5nIGlzIGdvaW5nIHRvCi1jb3ZlciB1cCB0aGUgdHJ1dGggLSB0aGVzZSBwbHVnLWlucyBhcmUgQmFkIHdpdGggYSBjYXBpdGFsIEIuIAotVGhleSBsb29rIGZpbmUgb24gdGhlIG91dHNpZGUsIGFuZCBtaWdodCBldmVuIGFwcGVhciB0byBnZXQgdGhlIGpvYiBkb25lLCBidXQKLWF0IHRoZSBlbmQgb2YgdGhlIGRheSB0aGV5J3JlIGEgYmxhY2sgc2hlZXAuIFdpdGhvdXQgYSBnb2xkZW4taGFpcmVkIGFuZ2VsCi10byB3YXRjaCBvdmVyIHRoZW0sIHRoZXknbGwgcHJvYmFibHkgbGFuZCBpbiBhbiB1bm1hcmtlZCBncmF2ZSBhdCB0aGUgZmluYWwKLXNob3dkb3duLgotCi1Eb24ndCBidWcgdXMgYWJvdXQgdGhlaXIgcXVhbGl0eSAtIGV4ZXJjaXNlIHlvdXIgRnJlZSBTb2Z0d2FyZSByaWdodHMsCi1wYXRjaCB1cCB0aGUgb2ZmZW5kZXIgYW5kIHNlbmQgdXMgdGhlIHBhdGNoIG9uIHRoZSBmYXN0ZXN0IHN0ZWVkIHlvdSBjYW4KLXN0ZWFsIGZyb20gdGhlIENvbmZlZGVyYXRlcy4gQmVjYXVzZSB5b3Ugc2VlLCBpbiB0aGlzIHdvcmxkLCB0aGVyZSdzIHR3bwota2luZHMgb2YgcGVvcGxlLCBteSBmcmllbmQ6IHRob3NlIHdpdGggbG9hZGVkIGd1bnMgYW5kIHRob3NlIHdobyBkaWcuCi1Zb3UgZGlnLgotCi1UaGUgTG93ZG93bgotLS0tLS0tLS0tLS0KLQotICAtLS0gIkkndmUgbmV2ZXIgc2VlbiBzbyBtYW55IHBsdWctaW5zIHdhc3RlZCBzbyBiYWRseS4iCi0KLUdTdHJlYW1lciBQbHVnLWlucyBoYXMgZ3Jvd24gc28gYmlnIHRoYXQgaXQncyBoYXJkIHRvIHNlcGFyYXRlIHRoZSB3aGVhdCBmcm9tCi10aGUgY2hhZmYuICBBbHNvLCBkaXN0cmlidXRvcnMgaGF2ZSBicm91Z2h0IHVwIGlzc3VlcyBhYm91dCB0aGUgbGVnYWwgc3RhdHVzCi1vZiBzb21lIG9mIHRoZSBwbHVnLWlucyB3ZSBzaGlwLiAgVG8gcmVtZWR5IHRoaXMsIHdlJ3ZlIGRpdmlkZWQgdGhlIHByZXZpb3VzCi1zZXQgb2YgYXZhaWxhYmxlIHBsdWctaW5zIGludG8gZm91ciBtb2R1bGVzOgotCi0tIGdzdC1wbHVnaW5zLWJhc2U6IGEgc21hbGwgYW5kIGZpeGVkIHNldCBvZiBwbHVnLWlucywgY292ZXJpbmcgYSB3aWRlIHJhbmdlCi0gIG9mIHBvc3NpYmxlIHR5cGVzIG9mIGVsZW1lbnRzOyB0aGVzZSBhcmUgY29udGludW91c2x5IGtlcHQgdXAtdG8tZGF0ZQotICB3aXRoIGFueSBjb3JlIGNoYW5nZXMgZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBzZXJpZXMuCi0KLSAgLSBXZSBiZWxpZXZlIGRpc3RyaWJ1dG9ycyBjYW4gc2FmZWx5IHNoaXAgdGhlc2UgcGx1Zy1pbnMuCi0gIC0gUGVvcGxlIHdyaXRpbmcgZWxlbWVudHMgc2hvdWxkIGJhc2UgdGhlaXIgY29kZSBvbiB0aGVzZSBlbGVtZW50cy4KLSAgLSBUaGVzZSBlbGVtZW50cyBjb21lIHdpdGggZXhhbXBsZXMsIGRvY3VtZW50YXRpb24sIGFuZCByZWdyZXNzaW9uIHRlc3RzLgotCi0tIGdzdC1wbHVnaW5zLWdvb2Q6IGEgc2V0IG9mIHBsdWctaW5zIHRoYXQgd2UgY29uc2lkZXIgdG8gaGF2ZSBnb29kIHF1YWxpdHkKLSAgY29kZSwgY29ycmVjdCBmdW5jdGlvbmFsaXR5LCBvdXIgcHJlZmVycmVkIGxpY2Vuc2UgKExHUEwgZm9yIHRoZSBwbHVnLWluCi0gIGNvZGUsIExHUEwgb3IgTEdQTC1jb21wYXRpYmxlIGZvciB0aGUgc3VwcG9ydGluZyBsaWJyYXJ5KS4KLQotICAtIFdlIGJlbGlldmUgZGlzdHJpYnV0b3JzIGNhbiBzYWZlbHkgc2hpcCB0aGVzZSBwbHVnLWlucy4KLSAgLSBQZW9wbGUgd3JpdGluZyBlbGVtZW50cyBzaG91bGQgYmFzZSB0aGVpciBjb2RlIG9uIHRoZXNlIGVsZW1lbnRzLgotIAotLSBnc3QtcGx1Z2lucy11Z2x5OiBhIHNldCBvZiBwbHVnLWlucyB0aGF0IGhhdmUgZ29vZCBxdWFsaXR5IGFuZCBjb3JyZWN0Ci0gIGZ1bmN0aW9uYWxpdHksIGJ1dCBkaXN0cmlidXRpbmcgdGhlbSBtaWdodCBwb3NlIHByb2JsZW1zLiAgVGhlIGxpY2Vuc2UKLSAgb24gZWl0aGVyIHRoZSBwbHVnLWlucyBvciB0aGUgc3VwcG9ydGluZyBsaWJyYXJpZXMgbWlnaHQgbm90IGJlIGhvdyB3ZSdkCi0gIGxpa2UuIFRoZSBjb2RlIG1pZ2h0IGJlIHdpZGVseSBrbm93biB0byBwcmVzZW50IHBhdGVudCBwcm9ibGVtcy4KLQotICAtIERpc3RyaWJ1dG9ycyBzaG91bGQgY2hlY2sgaWYgdGhleSB3YW50L2NhbiBzaGlwIHRoZXNlIHBsdWctaW5zLgotICAtIFBlb3BsZSB3cml0aW5nIGVsZW1lbnRzIHNob3VsZCBiYXNlIHRoZWlyIGNvZGUgb24gdGhlc2UgZWxlbWVudHMuCi0KLS0gZ3N0LXBsdWdpbnMtYmFkOiBhIHNldCBvZiBwbHVnLWlucyB0aGF0IGFyZW4ndCB1cCB0byBwYXIgY29tcGFyZWQgdG8gdGhlCi0gIHJlc3QuICBUaGV5IG1pZ2h0IGJlIGNsb3NlIHRvIGJlaW5nIGdvb2QgcXVhbGl0eSwgYnV0IHRoZXkncmUgbWlzc2luZwotICBzb21ldGhpbmcgLSBiZSBpdCBhIGdvb2QgY29kZSByZXZpZXcsIHNvbWUgZG9jdW1lbnRhdGlvbiwgYSBzZXQgb2YgdGVzdHMsCi0gIGEgcmVhbCBsaXZlIG1haW50YWluZXIsIG9yIHNvbWUgYWN0dWFsIHdpZGUgdXNlLgotICBJZiB0aGUgYmxhbmtzIGFyZSBmaWxsZWQgaW4gdGhleSBtaWdodCBiZSB1cGdyYWRlZCB0byBiZWNvbWUgcGFydCBvZgotICBlaXRoZXIgZ3N0LXBsdWdpbnMtZ29vZCBvciBnc3QtcGx1Z2lucy11Z2x5LCBkZXBlbmRpbmcgb24gdGhlIG90aGVyIGZhY3RvcnMuCi0KLSAgLSBJZiB0aGUgcGx1Zy1pbnMgYnJlYWssIHlvdSBjYW4ndCBjb21wbGFpbiAtIGluc3RlYWQsIHlvdSBjYW4gZml4IHRoZQotICAgIHByb2JsZW0gYW5kIHNlbmQgdXMgYSBwYXRjaCwgb3IgYnJpYmUgc29tZW9uZSBpbnRvIGZpeGluZyB0aGVtIGZvciB5b3UuCi0gIC0gTmV3IGNvbnRyaWJ1dG9ycyBjYW4gc3RhcnQgaGVyZSBmb3IgdGhpbmdzIHRvIHdvcmsgb24uCi0KLVBMQVRGT1JNUwotLS0tLS0tLS0tCi0KLS0gTGludXggaXMgb2YgY291cnNlIGZ1bGx5IHN1cHBvcnRlZAotLSBGcmVlQlNEIGlzIHJlcG9ydGVkIHRvIHdvcms7IG90aGVyIEJTRHMgc2hvdWxkIHdvcmsgdG9vCi0tIFNvbGFyaXMgaXMgcmVwb3J0ZWQgdG8gd29yazsgYSBzcGVjaWZpYyBzdW5hdWRpb3NpbmsgcGx1Z2luIGhhcyBiZWVuIHdyaXR0ZW4KLS0gTWFjT1NYIHdvcmtzLCBiaW5hcnkgMS54IHBhY2thZ2VzIGNhbiBiZSBidWlsdCB1c2luZyB0aGUgY2VyYmVybyBidWlsZCB0b29sCi0tIFdpbmRvd3Mgd29ya3M7IGJpbmFyeSAxLnggcGFja2FnZXMgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBjZXJiZXJvIGJ1aWxkIHRvb2wKLSAgLSBNU3lzL01pbkdXIGJ1aWxkcwotICAtIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIGJ1aWxkcyBhcmUgbm90IHlldCBhdmFpbGFibGUgb3Igc3VwcG9ydGVkCi0tIEFuZHJvaWQgd29ya3MsIGJpbmFyeSAxLnggcGFja2FnZXMgY2FuIGJlIGJ1aWx0IHVzaW5nIHRoZSBjZXJiZXJvIGJ1aWxkIHRvb2wKLS0gaU9TIHdvcmtzCi0KLUlOU1RBTExJTkcgRlJPTSBQQUNLQUdFUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVlvdSBzaG91bGQgYWx3YXlzIHByZWZlciBpbnN0YWxsaW5nIGZyb20gcGFja2FnZXMgZmlyc3QuICBHU3RyZWFtZXIgaXMKLXdlbGwtbWFpbnRhaW5lZCBmb3IgYSBudW1iZXIgb2YgZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nIEZlZG9yYSwgRGViaWFuLAotVWJ1bnR1LCBNYW5kcmFrZSwgR2VudG9vLCAuLi4KLQotT25seSBpbiBjYXNlcyB3aGVyZSB5b3U6Ci0tIHdhbnQgdG8gaGFjayBvbiBHU3RyZWFtZXIKLS0gd2FudCB0byB2ZXJpZnkgdGhhdCBhIGJ1ZyBoYXMgYmVlbiBmaXhlZAotLSBkbyBub3QgaGF2ZSBhIHNhbmUgZGlzdHJpYnV0aW9uCi1zaG91bGQgeW91IGNob29zZSB0byBidWlsZCBmcm9tIHNvdXJjZSB0YXJiYWxscyBvciBnaXQuCi0KLUZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaW91cyBwYWNrYWdlcyBhdAotaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvCi0KLUNPTVBJTElORyBGUk9NIFNPVVJDRSBUQVJCQUxMUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gYWdhaW4sIG1ha2Ugc3VyZSB0aGF0IHlvdSByZWFsbHkgbmVlZCB0byBpbnN0YWxsIGZyb20gc291cmNlICEKLSAgSWYgR1N0cmVhbWVyIGlzIG9uZSBvZiB5b3VyIGZpcnN0IHByb2plY3RzIGV2ZXIgdGhhdCB5b3UgYnVpbGQgZnJvbSBzb3VyY2UsCi0gIGNvbnNpZGVyIHRha2luZyBvbiBhbiBlYXNpZXIgcHJvamVjdC4KLQotLSBjaGVjayBvdXRwdXQgb2YgLi9jb25maWd1cmUgLS1oZWxwIHRvIHNlZSBpZiBhbnkgb3B0aW9ucyBhcHBseSB0byB5b3UKLS0gcnVuCi0gIC4vY29uZmlndXJlCi0gIG1ha2UKLQotICB0byBidWlsZCBHU3RyZWFtZXIuCi0tIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgaXQgKG5vdCByZXF1aXJlZCwgYnV0IHdoYXQgeW91IHVzdWFsbHkgd2FudCB0byBkbyksIHJ1bgotICBtYWtlIGluc3RhbGwKLQotLSB0cnkgb3V0IGEgc2ltcGxlIHRlc3Q6Ci0gIGdzdC1sYXVuY2ggLXYgZmFrZXNyYyBudW1fYnVmZmVycz01ICEgZmFrZXNpbmsKLSAgKElmIHlvdSBkaWRuJ3QgaW5zdGFsbCBHU3RyZWFtZXIsIHByZWZpeCBnc3QtbGF1bmNoIHdpdGggdG9vbHMvKQotCi0gIElmIGl0IG91dHB1dHMgYSBidW5jaCBvZiBtZXNzYWdlcyBmcm9tIGZha2VzcmMgYW5kIGZha2VzaW5rLCBldmVyeXRoaW5nIGlzCi0gIG9rLgotCi0gIElmIGl0IGRpZCBub3Qgd29yaywga2VlcCBpbiBtaW5kIHRoYXQgeW91IG1pZ2h0IG5lZWQgdG8gYWRqdXN0IHRoZQotICBQQVRIIGFuZC9vciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG1ha2UgdGhlIHN5c3RlbQotICBmaW5kIEdTdHJlYW1lciBpbiB0aGUgcHJlZml4IHdoZXJlIHlvdSBpbnN0YWxsZWQgKGJ5IGRlZmF1bHQgdGhhdCBpcyAvdXNyL2xvY2FsKS4KLQotLSBBZnRlciB0aGlzLCB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCBnc3QtcGx1Z2lucywgd2hpY2ggd2lsbCBwcm92aWRlIHRoZQotICBmdW5jdGlvbmFsaXR5IHlvdSdyZSBwcm9iYWJseSBsb29raW5nIGZvciBieSBub3csIHNvIGdvIG9uIGFuZCByZWFkCi0gIHRoYXQgUkVBRE1FLgotCi1DT01QSUxJTkcgRlJPTSBHSVQKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGVuIGJ1aWxkaW5nIGZyb20gZ2l0IHNvdXJjZXMsIHlvdSB3aWxsIG5lZWQgdG8gcnVuIGF1dG9nZW4uc2ggdG8gZ2VuZXJhdGUKLXRoZSBidWlsZCBzeXN0ZW0gZmlsZXMuCi0KLVlvdSB3aWxsIG5lZWQgYSBzZXQgb2YgYWRkaXRpb25hbCB0b29scyB0eXBpY2FsIGZvciBidWlsZGluZyBmcm9tIGdpdCwKLWluY2x1ZGluZzoKLS0gYXV0b2NvbmYKLS0gYXV0b21ha2UKLS0gbGlidG9vbAotCi1hdXRvZ2VuLnNoIHdpbGwgY2hlY2sgZm9yIHJlY2VudCBlbm91Z2ggdmVyc2lvbnMgYW5kIGNvbXBsYWluIGlmIHlvdSBkb24ndCBoYXZlCi10aGVtLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgc3BlY2lmaWMgdmVyc2lvbnMgb2YgYXV0b21ha2UgYW5kIGF1dG9jb25mIHdpdGgKLS0td2l0aC1hdXRvbWFrZSBhbmQgLS13aXRoLWF1dG9jb25mCi0KLUNoZWNrIGF1dG9nZW4uc2ggb3B0aW9ucyBieSBydW5uaW5nIGF1dG9nZW4uc2ggLS1oZWxwCi0KLWF1dG9nZW4uc2ggY2FuIHBhc3Mgb24gYXJndW1lbnRzIHRvIGNvbmZpZ3VyZQotCi1XaGVuIHlvdSBoYXZlIGRvbmUgdGhpcyBvbmNlLCB5b3UgY2FuIHVzZSBhdXRvcmVnZW4uc2ggdG8gcmUtYXV0b2dlbiB3aXRoCi10aGUgbGFzdCBwYXNzZWQgb3B0aW9ucyBhcyBhIGhhbmR5IHNob3J0Y3V0LiAgVXNlIGl0LgotCi1BZnRlciB0aGUgYXV0b2dlbi5zaCBzdGFnZSwgeW91IGNhbiBmb2xsb3cgdGhlIGRpcmVjdGlvbnMgbGlzdGVkIGluCi0iQ09NUElMSU5HIEZST00gU09VUkNFIgotCi1Zb3UgY2FuIGFsc28gcnVuIHlvdXIgd2hvbGUgZ2l0IHN0YWNrIHVuaW5zdGFsbGVkIGluIHlvdXIgaG9tZSBkaXJlY3RvcnksCi1zbyB0aGF0IHlvdSBjYW4gcXVpY2tseSB0ZXN0IGNoYW5nZXMgd2l0aG91dCBhZmZlY3RpbmcgeW91ciBzeXN0ZW0gc2V0dXAgb3IKLWludGVyZmVyaW5nIHdpdGggR1N0cmVhbWVyIGluc3RhbGxlZCBmcm9tIHBhY2thZ2VzLiAgTWFueSBHU3RyZWFtZXIgZGV2ZWxvcGVycwotdXNlIGFuIHVuaW5zdGFsbGVkIHNldHVwIGZvciB0aGVpciB3b3JrLgotCi1UaGVyZSBpcyBhICdjcmVhdGUtdW5pbnN0YWxsZWQtc2V0dXAuc2gnIHNjcmlwdCBpbgotCi0gIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyL3RyZWUvc2NyaXB0cy8KLQotdG8gZWFzaWx5IGNyZWF0ZSBhbiB1bmluc3RhbGxlZCBzZXR1cCBmcm9tIHNjcmF0Y2guCi0KLQotUExVRy1JTiBERVBFTkRFTkNJRVMgQU5EIExJQ0VOU0VTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotR1N0cmVhbWVyIGlzIGRldmVsb3BlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExHUEwgKHNlZSBMSUNFTlNFIGZpbGUgZm9yCi1kZXRhaWxzKS4gU29tZSBvZiBvdXIgcGx1Zy1pbnMgaG93ZXZlciByZWx5IG9uIGxpYnJhcmllcyB3aGljaCBhcmUgYXZhaWxhYmxlCi11bmRlciBvdGhlciBsaWNlbnNlcy4gVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBhcmUgZGlzdHJpYnV0aW5nIGFuIGFwcGxpY2F0aW9uCi13aGljaCBoYXMgYSBub24tR1BMIGNvbXBhdGlibGUgbGljZW5zZSAoZm9yIGluc3RhbmNlIGEgY2xvc2VkLXNvdXJjZQotYXBwbGljYXRpb24pIHdpdGggR1N0cmVhbWVyLCB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgbm90IHRvIGRpc3RyaWJ1dGUgR1BMLWxpbmtlZAotcGx1Zy1pbnMuCi0KLVdoZW4gdXNpbmcgR1BMLWxpbmtlZCBwbHVnLWlucywgR1N0cmVhbWVyIGlzIGZvciBhbGwgcHJhY3RpY2FsIHJlYXNvbnMKLXVuZGVyIHRoZSBHUEwgaXRzZWxmLgotCi1ISVNUT1JZCi0tLS0tLS0tCi0KLVRoZSBmdW5kYW1lbnRhbCBkZXNpZ24gY29tZXMgZnJvbSB0aGUgdmlkZW8gcGlwZWxpbmUgYXQgT3JlZ29uIEdyYWR1YXRlCi1JbnN0aXR1dGUsIGFzIHdlbGwgYXMgc29tZSBpZGVhcyBmcm9tIERpcmVjdE1lZGlhLiAgSXQncyBiYXNlZCBvbiBwbHVnLWlucyB0aGF0Ci13aWxsIHByb3ZpZGUgdGhlIHZhcmlvdXMgY29kZWMgYW5kIG90aGVyIGZ1bmN0aW9uYWxpdHkuICBUaGUgaW50ZXJmYWNlCi1ob3BlZnVsbHkgaXMgZ2VuZXJpYyBlbm91Z2ggZm9yIHZhcmlvdXMgY29tcGFuaWVzIChhaGVtLCBBcHBsZSkgdG8gcmVsZWFzZQotYmluYXJ5IGNvZGVjcyBmb3IgTGludXgsIHVudGlsIHN1Y2ggdGltZSBhcyB0aGV5IGdldCBhIGNsdWUgYW5kIHJlbGVhc2UgdGhlCi1zb3VyY2UuCmRpZmYgLS1naXQgYS9jb21tb24vYy10by14bWwucHkgYi9jb21tb24vYy10by14bWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhN2EzNWIuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2MtdG8teG1sLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyAtKi0gTW9kZTogUHl0aG9uIC0qLQotIyB2aTpzaTpldDpzdz00OnN0cz00OnRzPTQKLQotIiIiCi1Db252ZXJ0IGEgQyBwcm9ncmFtIHRvIHZhbGlkIFhNTCB0byBiZSBpbmNsdWRlZCBpbiBkb2Nib29rCi0iIiIKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgdW5pY29kZV9saXRlcmFscwotCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWZyb20geG1sLnNheCBpbXBvcnQgc2F4dXRpbHMKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlBsZWFzZSBzcGVjaWZ5IGEgc291cmNlIGZpbGUgdG8gY29udmVydCIpCi0gICAgICAgIHN5cy5leGl0KDEpCi0gICAgc291cmNlID0gc3lzLmFyZ3ZbMV0KLQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2UpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlcyBkb2VzIG5vdCBleGlzdC5cbiIgJSBzb3VyY2UpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBjb250ZW50ID0gb3Blbihzb3VyY2UsICJyIikucmVhZCgpCi0KLSAgICAjIHByaW50IGhlYWRlcgotICAgIHByaW50ICgnPD94bWwgdmVyc2lvbj0iMS4wIj8+JykKLSAgICBwcmludCAoJzwhRE9DVFlQRSByZWZlbnRyeSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4nKQotICAgIHByaW50ICgpCi0gICAgcHJpbnQgKCc8cHJvZ3JhbWxpc3Rpbmc+JykKLQotICAgICMgcHJpbnQgY29udGVudAotICAgIHByaW50IChzYXh1dGlscy5lc2NhcGUoY29udGVudCkpCi0gICAgcHJpbnQgKCc8L3Byb2dyYW1saXN0aW5nPicpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NoZWNrLWV4cG9ydHMgYi9jb21tb24vY2hlY2stZXhwb3J0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWUwMWZmNy4uMDAwMDAwMAotLS0gYS9jb21tb24vY2hlY2stZXhwb3J0cworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLSMhL2Jpbi9zaAotIyBjaGVjay1leHBvcnRzCi0jCi0jIHF1aWNrJ24nZGlydHkgc2NyaXB0IHRoYXQgcmV0cmlldmVzIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMgb2YgYSBnaXZlbgotIyBsaWJyYXJ5IHVzaW5nICdubScsIGFuZCBjb21wYXJlcyB0aGF0IGFnYWluc3QgdGhlIGxpc3Qgb2Ygc3ltYm9scy10by1leHBvcnQKLSMgb2Ygb3VyIHdpbjMyL2NvbW1vbi9saWJmb28uZGVmIGZpbGVzLgotCi1pZiBbICQjIC1uZSAyIF07IHRoZW4KLQllY2hvICJVc2FnZTogJDAgbGlicmFyeS5kZWYgbGlicmFyeS5zbyIKLQlleGl0IDEKLWZpCi0KLWRlZl9wYXRoPSIkMSIKLWRlZl9uYW1lPSIkKGJhc2VuYW1lICRkZWZfcGF0aCkiCi1saWJfcGF0aD0iJDIiCi0KLWxpYl9yZXN1bHQ9ImBta3RlbXAgL3RtcC9kZWZuYW1lLlhYWFhYWGAiCi0KLUxDX0FMTD1DCi1leHBvcnQgTENfQUxMCi0KLSMgT24gU29sYXJpcywgYWRkIC1wIHRvIGdldCB0aGUgY29ycmVjdCBvdXRwdXQgZm9ybWF0Ci1OTUFSR1M9Ci1pZiBubSAtViAyPiYxIHxncmVwIFNvbGFyaXMgPiAvZGV2L251bGw7IHRoZW4KLSAgTk1BUkdTPS1wCi1maQotCi0jIF9lbmQgaXMgc3BlY2lhbCBjYXNlZCBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiBpdCBpcyByZXBvcnRlZCBhcyBhbiBleHBvcnRlZAotIyBCU1Mgc3ltYm9sLCB1bmxpa2Ugb24gbGludXggd2hlcmUgaXQncyBhIGxvY2FsIGFic29sdXRlIHN5bWJvbC4KLW5tICROTUFSR1MgJGxpYl9wYXRoIHwgYXdrIFwKLQknewotCQlpZiAoJDMgfiAvXltfXT8oZ3N0X3xHc3R8R1NUXykuKi8pCi0JCXsKLQkJCWlmICgkMiB+IC9eW0JTREddJC8pCi0JCQkJcHJpbnQgIlx0IiAkMyAiIERBVEEiCi0JCQllbHNlIGlmICgkMiA9PSAiVCIpCi0JCQkJcHJpbnQgIlx0IiAkMwotCQl9Ci0JIH0nIHwgc29ydCB8IGF3ayAneyBpZiAoTlIgPT0gMSkgcHJpbnQgIkVYUE9SVFMiOyBwcmludCAkMDsgfScgXAotCT4gJGxpYl9yZXN1bHQKLQotZGlmZm91dHB1dD1gZGlmZiAtdSAkZGVmX3BhdGggJGxpYl9yZXN1bHRgCi1kaWZmcmVzdWx0PSQ/Ci0KLXJtICRsaWJfcmVzdWx0Ci0KLWlmIHRlc3QgIiRkaWZmcmVzdWx0IiAtZXEgMDsgdGhlbgotICBleGl0IDA7Ci1lbHNlCi0gIGVjaG8gLW4gIiRkaWZmb3V0cHV0IiA+JjIKLSAgZWNobyA+JjIKLSAgZXhpdCAxOwotZmkKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NoZWNrLm1hayBiL2NvbW1vbi9jaGVjay5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NDk3ZmYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NoZWNrLm1haworKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0jIGtlZXAgdGFyZ2V0IGFyb3VuZCwgc2luY2UgaXQncyByZWZlcmVuY2VkIGluIHRoZSBtb2R1bGVzJyBNYWtlZmlsZXMKLWNsZWFuLWxvY2FsLWNoZWNrOgotCUBlY2hvCi0KLWlmIEhBVkVfVkFMR1JJTkQKLSMgaGFuZ3Mgc3BlY3RhY3VsYXJseSBvbiBzb21lIG1hY2hpbmVzLCBzbyBsZXQncyBub3QgZG8gdGhpcyBieSBkZWZhdWx0IHlldAotY2hlY2stdmFsZ3JpbmQ6Ci0JJChNQUtFKSB2YWxncmluZAotZWxzZQotY2hlY2stdmFsZ3JpbmQ6Ci0JQHRydWUKLWVuZGlmCi0KLUxPT1BTID89IDEwCi1BTV9URVNUU19FTlZJUk9OTUVOVCA9IENLX0RFRkFVTFRfVElNRU9VVD0yMAotCi0jIHJ1biBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC5jaGVjawotIyBpZiB0aGUgdGVzdCBmYWlscywgcnVuIGl0IGFnYWluIGF0IGF0IGxlYXN0IGRlYnVnIGxldmVsIDIKLSUuY2hlY2s6ICUKLQlAJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKiB8fAkJCQkJCQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQlHU1RfREVCVUc9JCRHU1RfREVCVUcsKjoyCQkJCVwKLQkkKgotCi0jIGp1c3QgbGlrZSAnY2hlY2snLCBidXQgZG9uJ3QgcnVuIGl0IGFnYWluIGlmIGl0IGZhaWxzICh1c2VmdWwgZm9yIGRlYnVnZ2luZykKLSUuY2hlY2stbm9yZXBlYXQ6ICUKLQlAJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKgotCi0jIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhIGxvb3AKLSUudG9ydHVyZTogJQotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKjsgZG9uZQotCi0jIHJ1biBhbnkgZ2l2ZW4gdGVzdCBpbiBhbiBpbmZpbml0ZSBsb29wCi0lLmZvcmV2ZXI6ICUKLQlAd2hpbGUgdHJ1ZTsgZG8JCQkJCQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQkkKiB8fCBicmVhazsgZG9uZQotCi0jIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LnZhbGdyaW5kCi0lLnZhbGdyaW5kOiAlCi0JQHZhbGdyaW5kX2xvZz0kKHN1YnN0IC8sLSwkKi12YWxncmluZC5sb2cpOwkJXAotCSQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JQ0tfREVGQVVMVF9USU1FT1VUPTM2MAkJCQkJXAotCUdfU0xJQ0U9YWx3YXlzLW1hbGxvYwkJCQkJXAotCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAotCSQoVkFMR1JJTkRfUEFUSCkgLXEJCQkJCVwKLQkkKGZvcmVhY2ggcywkKFNVUFBSRVNTSU9OUyksLS1zdXBwcmVzc2lvbnM9JChzKSkJXAotCS0tdG9vbD1tZW1jaGVjayAtLWxlYWstY2hlY2s9ZnVsbCAtLXRyYWNlLWNoaWxkcmVuPXllcwlcCi0JLS1zaG93LXBvc3NpYmx5LWxvc3Q9bm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JLS1sZWFrLXJlc29sdXRpb249aGlnaCAtLW51bS1jYWxsZXJzPTIwCQkJXAotCS4vJCogMj4mMSB8IHRlZSAkJHZhbGdyaW5kX2xvZyA7CQkJXAotCWlmIGdyZXAgIl49PSIgJCR2YWxncmluZF9sb2cgPiAvZGV2L251bGwgMj4mMTsgdGhlbglcCi0JICAgIHJtICQkdmFsZ3JpbmRfbG9nOwkJCQkJXAotCSAgICBleGl0IDE7CQkJCQkJXAotCWZpIDsJCQkJCQkJXAotCXJtICQkdmFsZ3JpbmRfbG9nCi0KLSMgdmFsZ3JpbmQgYW55IGdpdmVuIHRlc3QgYW5kIGdlbmVyYXRlIHN1cHByZXNzaW9ucyBmb3IgaXQKLSUudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczogJQotCUAkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCUNLX0RFRkFVTFRfVElNRU9VVD0zNjAJCQkJCVwKLQlHX1NMSUNFPWFsd2F5cy1tYWxsb2MJCQkJCVwKLQkkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCQkJCVwKLQkkKFZBTEdSSU5EX1BBVEgpIC1xIAkJCQkJXAotCSQoZm9yZWFjaCBzLCQoU1VQUFJFU1NJT05TKSwtLXN1cHByZXNzaW9ucz0kKHMpKQlcCi0JLS10b29sPW1lbWNoZWNrIC0tbGVhay1jaGVjaz1mdWxsIC0tdHJhY2UtY2hpbGRyZW49eWVzCVwKLQktLXNob3ctcG9zc2libHktbG9zdD1ubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQktLWxlYWstcmVzb2x1dGlvbj1oaWdoIC0tbnVtLWNhbGxlcnM9MjAJCQlcCi0JLS1nZW4tc3VwcHJlc3Npb25zPWFsbAkJCQkJXAotCS4vJCogMj4mMSB8IHRlZSBzdXBwcmVzc2lvbnMubG9nCi0KLSMgdmFsZ3JpbmQgdG9ydHVyZSBhbnkgZ2l2ZW4gdGVzdAotJS52YWxncmluZC10b3J0dXJlOiAlCi0JQGZvciBpIGluIGBzZXEgMSAkKExPT1BTKWA7IGRvCQkJCVwKLQkJJChNQUtFKSAkKi52YWxncmluZCB8fAkJCQlcCi0JCShlY2hvICJGYWlsdXJlIGFmdGVyICQkaSBydW5zIjsgZXhpdCAxKSB8fAlcCi0JCWV4aXQgMTsJCQkJCQlcCi0JZG9uZQotCUBiYW5uZXI9IkFsbCAkKExPT1BTKSBsb29wcyBwYXNzZWQiOwkJCVwKLQlkYXNoZXM9YGVjaG8gIiQkYmFubmVyIiB8IHNlZCBzLy4vPS9nYDsJCQlcCi0JZWNobyAkJGRhc2hlczsgZWNobyAkJGJhbm5lcjsgZWNobyAkJGRhc2hlcwotCi0jIHZhbGdyaW5kIGFueSBnaXZlbiB0ZXN0IHVudGlsIGZhaWx1cmUgYnkgcnVubmluZyBtYWtlIHRlc3QudmFsZ3JpbmQtZm9yZXZlcgotJS52YWxncmluZC1mb3JldmVyOiAlCi0JQHdoaWxlICQoTUFLRSkgJCoudmFsZ3JpbmQ7IGRvCQkJCVwKLQkgIHRydWU7IGRvbmUKLQotIyBnZGIgYW55IGdpdmVuIHRlc3QgYnkgcnVubmluZyBtYWtlIHRlc3QuZ2RiCi0lLmdkYjogJQotCUAkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCUNLX0ZPUks9bm8JCQkJCQlcCi0JJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQkJCQlcCi0JZ2RiICQqCi0KLSUubGNvdi1yZXNldDoKLQkkKE1BS0UpICQqLmxjb3YtcnVuCi0JJChNQUtFKSAkKi5sY292LXJlcG9ydAotCi0lLmxjb3Y6ICUKLQkkKE1BS0UpICQqLmxjb3YtcmVzZXQKLQotaWYgR1NUX0dDT1ZfRU5BQkxFRAotJS5sY292LWNsZWFuOgotCSQoTUFLRSkgLUMgJCh0b3BfYnVpbGRkaXIpIGxjb3YtY2xlYW4KLQotJS5sY292LXJ1bjoKLQkkKE1BS0UpICQqLmxjb3YtY2xlYW4KLQkkKE1BS0UpICQqLmNoZWNrCi0KLSUubGNvdi1yZXBvcnQ6Ci0JJChNQUtFKSAtQyAkKHRvcF9idWlsZGRpcikgbGNvdi1yZXBvcnQKLWVsc2UKLSUubGNvdi1ydW46Ci0JZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCi0KLSUubGNvdi1yZXBvcnQ6Ci0JZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCi1lbmRpZgotCi0jIHRvcnR1cmUgdGVzdHMKLXRvcnR1cmU6ICQoVEVTVFMpCi0JLXJtIHRlc3QtcmVnaXN0cnkuKgotCUBlY2hvICJUb3J0dXJpbmcgdGVzdHMgLi4uIgotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JCSQoTUFLRSkgY2hlY2sgfHwJCQkJXAotCQkoZWNobyAiRmFpbHVyZSBhZnRlciAkJGkgcnVucyI7IGV4aXQgMSkgfHwJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQlAYmFubmVyPSJBbGwgJChMT09QUykgbG9vcHMgcGFzc2VkIjsJCQlcCi0JZGFzaGVzPWBlY2hvICIkJGJhbm5lciIgfCBzZWQgcy8uLz0vZ2A7CQkJXAotCWVjaG8gJCRkYXNoZXM7IGVjaG8gJCRiYW5uZXI7IGVjaG8gJCRkYXNoZXMKLQotIyBmb3JldmVyIHRlc3RzCi1mb3JldmVyOiAkKFRFU1RTKQotCS1ybSB0ZXN0LXJlZ2lzdHJ5LioKLQlAZWNobyAiRm9yZXZlciB0ZXN0cyAuLi4iCi0JQHdoaWxlIHRydWU7IGRvCQkJCQkJXAotCQkkKE1BS0UpIGNoZWNrIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUiOyBleGl0IDEpIHx8CQkJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQotIyB2YWxncmluZCBhbGwgdGVzdHMKLXZhbGdyaW5kOiAkKFRFU1RTKQotCUBlY2hvICJWYWxncmluZGluZyB0ZXN0cyAuLi4iCi0JQGZhaWxlZD0wOyB2YWxncmluZF90YXJnZXRzPSIiOwkJCQkJXAotCWZvciB0IGluICQoZmlsdGVyLW91dCAkKFZBTEdSSU5EX1RFU1RTX0RJU0FCTEUpLCQoVEVTVFMpKTsgZG8JXAotCSAgdmFsZ3JpbmRfdGFyZ2V0cz0iJCR2YWxncmluZF90YXJnZXRzICQkdC52YWxncmluZCI7CQlcCi0JZG9uZTsJCQkJCQkJCVwKLQlpZiAhICQoTUFLRSkgJCR2YWxncmluZF90YXJnZXRzIDsgdGhlbgkJCQlcCi0JICBlY2hvICJTb21lIHRlc3RzIGhhZCBsZWFrcyBvciBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQiOwkJXAotCSAgZmFsc2U7CQkJCQkJCVwKLQlmaQotCi0jIHZhbGdyaW5kIGFsbCB0ZXN0cyB1bnRpbCBmYWlsdXJlCi12YWxncmluZC1mb3JldmVyOiAkKFRFU1RTKQotCS1ybSB0ZXN0LXJlZ2lzdHJ5LioKLQlAZWNobyAiRm9yZXZlciB2YWxncmluZGluZyB0ZXN0cyAuLi4iCi0JQHdoaWxlIHRydWU7IGRvCQkJCQkJXAotCQkkKE1BS0UpIHZhbGdyaW5kIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUiOyBleGl0IDEpIHx8CQkJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQotIyB2YWxncmluZCB0b3J0dXJlIGFsbCB0ZXN0cwotdmFsZ3JpbmQtdG9ydHVyZTogJChURVNUUykKLQktcm0gdGVzdC1yZWdpc3RyeS4qCi0JQGVjaG8gIlRvcnR1cmluZyBhbmQgdmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JCSQoTUFLRSkgdmFsZ3JpbmQgfHwJCQkJXAotCQkoZWNobyAiRmFpbHVyZSBhZnRlciAkJGkgcnVucyI7IGV4aXQgMSkgfHwJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQlAYmFubmVyPSJBbGwgJChMT09QUykgbG9vcHMgcGFzc2VkIjsJCQlcCi0JZGFzaGVzPWBlY2hvICIkJGJhbm5lciIgfCBzZWQgcy8uLz0vZ2A7CQkJXAotCWVjaG8gJCRkYXNoZXM7IGVjaG8gJCRiYW5uZXI7IGVjaG8gJCRkYXNoZXMKLQotIyB2YWxncmluZCBhbGwgdGVzdHMgYW5kIGdlbmVyYXRlIHN1cHByZXNzaW9ucwotdmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczogJChURVNUUykKLQlAZWNobyAiVmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUBmYWlsZWQ9MDsJCQkJCQkJXAotCWZvciB0IGluICQoZmlsdGVyLW91dCAkKFZBTEdSSU5EX1RFU1RTX0RJU0FCTEUpLCQoVEVTVFMpKTsgZG8JXAotCQkkKE1BS0UpICQkdC52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zOwkJCVwKLQkJaWYgdGVzdCAiJCQ/IiAtbmUgMDsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQllY2hvICJWYWxncmluZCBlcnJvciBmb3IgdGVzdCAkJHQiOwkJXAotCQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7CQkJXAotCQkJd2hpY2h0PSIkJHdoaWNodCAkJHQiOwkJCQlcCi0JCWZpOwkJCQkJCQlcCi0JZG9uZTsJCQkJCQkJCVwKLQlpZiB0ZXN0ICIkJGZhaWxlZCIgLW5lIDA7IHRoZW4JCQkJCVwKLQkJZWNobyAiJCRmYWlsZWQgdGVzdHMgaGFkIGxlYWtzIG9yIGVycm9ycyB1bmRlciB2YWxncmluZDoiOwlcCi0JCWVjaG8gIiQkd2hpY2h0IjsJCQkJCVwKLQkJZmFsc2U7CQkJCQkJCVwKLQlmaQotCi0jIGluc3BlY3QgZXZlcnkgcGx1Z2luIGZlYXR1cmUKLUdTVF9JTlNQRUNUID0gJChHU1RfVE9PTFNfRElSKS9nc3QtaW5zcGVjdC0kKEdTVF9BUElfVkVSU0lPTikKLWluc3BlY3Q6Ci0JQGVjaG8gIkluc3BlY3RpbmcgZmVhdHVyZXMgLi4uIgotCUBmb3IgZSBpbiBgJChBTV9URVNUU19FTlZJUk9OTUVOVCkgJChHU1RfSU5TUEVDVCkgfCBoZWFkIC1uIC0yIAlcCi0JICB8IGN1dCAtZDogLWYyYDsJCQkJCQlcCi0JICBkbyBlY2hvIEluc3BlY3RpbmcgJCRlOwkJCQkJXAotCSAgICAgJChHU1RfSU5TUEVDVCkgJCRlID4gL2Rldi9udWxsIDI+JjE7IGRvbmUKLQotIyBidWlsZCBhbGwgdGVzdHMKLWJ1aWxkLWNoZWNrczogJChURVNUUykKLQotaGVscDoKLQlAZWNobwotCUBlY2hvICJtYWtlIGNoZWNrICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJ1biBhbGwgY2hlY2tzIgotCUBlY2hvICJtYWtlIHRvcnR1cmUgICAgICAgICAgICAgICAgICAgICAgIC0tIHJ1biBhbGwgY2hlY2tzICQoTE9PUFMpIHRpbWVzIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5jaGVjayAgICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgb25jZSwgcmVwZWF0IHdpdGggR1NUX0RFQlVHPSo6MiBpZiBpdCBmYWlscyIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuY2hlY2stbm9yZXBlYXQgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrIG9uY2UsIGJ1dCBkb24ndCBydW4gaXQgYWdhaW4gaWYgaXQgZmFpbHMiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmZvcmV2ZXIgICAgICAgICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayBmb3JldmVyIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS50b3J0dXJlICAgICAgICAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgJChMT09QUykgdGltZXMiCi0JQGVjaG8KLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuZ2RiICAgICAgICAgICAgICAtLSBzdGFydCB1cCBnZGIgZm9yIHRoZSBnaXZlbiB0ZXN0IgotCUBlY2hvCi0JQGVjaG8gIm1ha2UgdmFsZ3JpbmQgICAgICAgICAgICAgICAgICAgICAgLS0gdmFsZ3JpbmQgYWxsIHRlc3RzIgotCUBlY2hvICJtYWtlIHZhbGdyaW5kLWZvcmV2ZXIgICAgICAgICAgICAgIC0tIHZhbGdyaW5kIGFsbCB0ZXN0cyBmb3JldmVyIgotCUBlY2hvICJtYWtlIHZhbGdyaW5kLXRvcnR1cmUgICAgICAgICAgICAgIC0tIHZhbGdyaW5kIGFsbCB0ZXN0cyAkKExPT1BTKSB0aW1lcyIKLQlAZWNobyAibWFrZSB2YWxncmluZC5nZW4tc3VwcHJlc3Npb25zICAgICAtLSBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMgZm9yIGFsbCB0ZXN0cyIKLQlAZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc2F2ZSB0byBzdXBwcmVzc2lvbnMubG9nIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZCAgICAgICAgIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0IgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS52YWxncmluZC1mb3JldmVyIC0tIHZhbGdyaW5kIHRoZSBnaXZlbiB0ZXN0IGZvcmV2ZXIiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kLXRvcnR1cmUgLS0gdmFsZ3JpbmQgdGhlIGdpdmVuIHRlc3QgJChMT09QUykgdGltZXMiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnMgLS0gZ2VuZXJhdGUgc3VwcHJlc3Npb25zIgotCUBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzYXZlIHRvIHN1cHByZXNzaW9ucy5sb2ciCi0JQGVjaG8gIm1ha2UgaW5zcGVjdCAgICAgICAgICAgICAgICAgICAgICAgLS0gaW5zcGVjdCBhbGwgcGx1Z2luIGZlYXR1cmVzIgotCUBlY2hvICJtYWtlIGJ1aWxkLWNoZWNrcyAgICAgICAgICAgICAgICAgIC0tIGJ1aWxkIGFsbCBjaGVja3MgKGJ1dCBkb24ndCBydW4gdGhlbSkiCi0JQGVjaG8KLQlAZWNobwotCUBlY2hvICJBZGRpdGlvbmFsbHksIHlvdSBjYW4gdXNlIHRoZSBHU1RfQ0hFQ0tTIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIgotCUBlY2hvICJzcGVjaWZ5IHdoaWNoIHRlc3Qocykgc2hvdWxkIGJlIHJ1bi4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZSIKLQlAZWNobyAiZGVidWdnaW5nIGEgZmFpbHVyZSBpbiBvbmUgcGFydGljdWxhciB0ZXN0LCBvciB3YW50IHRvIHJlcHJvZHVjZSIKLQlAZWNobyAiYSByYWNlIGNvbmRpdGlvbiBpbiBhIHNpbmdsZSB0ZXN0LiIKLQlAZWNobwotCUBlY2hvICJFeGFtcGxlczoiCi0JQGVjaG8KLQlAZWNobyAiICBHU1RfQ0hFQ0tTPXRlc3RfdGhpcyx0ZXN0X3RoYXQgIG1ha2UgZWxlbWVudC9mb29iYXIuY2hlY2siCi0JQGVjaG8gIiAgR1NUX0NIRUNLUz10ZXN0X21hbnlfdGhyZWFkcyAgICBtYWtlIGVsZW1lbnQvZm9vYmFyLmZvcmV2ZXIiCi0JQGVjaG8KLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbCBiL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQtZW50cnkucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMDM2YjMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC1lbnRyeS5wbAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDYgRGFuaWVsIEJlcnJhbmdlCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0KLQotcHJpbnQgPDxFT0Y7Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPkNvdmVyYWdlIHJlcG9ydCBmb3IgJEFSR1ZbMF08L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSAgICAgICAgICBzcGFuLnBlcmZlY3QgewotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDAsMjU1LDApOwotICAgICAgICAgIH0KLSAgICAgICAgICBzcGFuLnRlcnJpYmxlIHsKLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigyNTUsMCwwKTsKLSAgICAgICAgICB9Ci08L3N0eWxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+Q292ZXJhZ2UgcmVwb3J0IGZvciAkQVJHVlswXTwvaDE+Ci0KLTxwcmU+Ci1FT0YKLQotCi13aGlsZSAoPD4pIHsKLSAgICBzLyYvJmFtcDsvZzsKLSAgICBzLzwvJmx0Oy9nOwotICAgIHMvPi8mZ3Q7L2c7Ci0KLSAgICBpZiAoL15ccypmdW5jdGlvbiAoXFMrKSBjYWxsZWQgKFxkKykgcmV0dXJuZWQgXGQrJSBibG9ja3MgZXhlY3V0ZWQgXGQrJS8pIHsKLQlteSAkY2xhc3MgPSAkMiA+IDAgPyAicGVyZmVjdCIgOiAidGVycmlibGUiOwotCSRfID0gIjxzcGFuIGNsYXNzPVwiJGNsYXNzXCIgaWQ9XCIiIC4gJDEgLiAiXCI+JF88L3NwYW4+IjsKLSAgICB9IGVsc2lmICgvXlxzKmJyYW5jaFxzK1xkK1xzK3Rha2VuXHMrKFxkKyklXHMrLiokLykgewotCW15ICRjbGFzcyA9ICQxID4gMCA/ICJwZXJmZWN0IiA6ICJ0ZXJyaWJsZSI7Ci0JJF8gPSAiPHNwYW4gY2xhc3M9XCIkY2xhc3NcIj4kXzwvc3Bhbj4iOwotICAgIH0gZWxzaWYgKC9eXHMqYnJhbmNoXHMrXGQrXHMrbmV2ZXIgZXhlY3V0ZWQuKiQvKSB7Ci0JbXkgJGNsYXNzID0gInRlcnJpYmxlIjsKLQkkXyA9ICI8c3BhbiBjbGFzcz1cIiRjbGFzc1wiPiRfPC9zcGFuPiI7Ci0gICAgfSBlbHNpZiAoL15ccypjYWxsXHMrXGQrXHMrbmV2ZXIgZXhlY3V0ZWQuKiQvKSB7Ci0JbXkgJGNsYXNzID0gInRlcnJpYmxlIjsKLQkkXyA9ICI8c3BhbiBjbGFzcz1cIiRjbGFzc1wiPiRfPC9zcGFuPiI7Ci0gICAgfSBlbHNpZiAoL15ccypjYWxsXHMrXGQrXHMrcmV0dXJuZWRccysoXGQrKSUuKiQvKSB7Ci0JbXkgJGNsYXNzID0gJDEgPiAwID8gInBlcmZlY3QiIDogInRlcnJpYmxlIjsKLQkkXyA9ICI8c3BhbiBjbGFzcz1cIiRjbGFzc1wiPiRfPC9zcGFuPiI7Ci0gICAgfQotCi0gICAgcHJpbnQ7Ci19Ci0KLXByaW50IDw8RU9GOwotPC9wcmU+Ci08L2JvZHk+Ci08L2h0bWw+Ci1FT0YKZGlmZiAtLWdpdCBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwgYi9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGJkNmYxLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jCi0jIENvcHlyaWdodCAoQykgMjAwNiBEYW5pZWwgQmVycmFuZ2UKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLQotdXNlIHdhcm5pbmdzOwotdXNlIHN0cmljdDsKLQotbXkgJWNvdmVyYWdlID0gKCBmdW5jdGlvbnMgPT4ge30sIGZpbGVzID0+IHt9ICk7Ci0KLW15ICVmaWxlbWFwOwotCi1teSAkdHlwZTsKLW15ICRuYW1lOwotCi1teSBAZnVuY3Rpb25zOwotCi13aGlsZSAoPD4pIHsKLSAgICBpZiAoL15GdW5jdGlvbiAnKC4qKSdccyokLykgewotCSR0eXBlID0gImZ1bmN0aW9uIjsKLQkkbmFtZSA9ICQxOwotCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0gPSB7fTsKLQlwdXNoIEBmdW5jdGlvbnMsICRuYW1lOwotICAgIH0gZWxzaWYgKC9eRmlsZSAnKC4qPyknXHMqJC8pIHsKLQkkdHlwZSA9ICJmaWxlIjsKLQkkbmFtZSA9ICQxOwotCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0gPSB7fTsKLQotCWZvcmVhY2ggbXkgJGZ1bmMgKEBmdW5jdGlvbnMpIHsKLQkgICAgJGNvdmVyYWdleyJmdW5jdGlvbiJ9LT57JGZ1bmN9LT57ZmlsZX0gPSAkbmFtZTsKLQl9Ci0JQGZ1bmN0aW9ucyA9ICgpOwotICAgIH0gZWxzaWYgKC9eTGluZXMgZXhlY3V0ZWQ6KC4qKSVccypvZlxzKihcZCspXHMqJC8pIHsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57bGluZXN9ID0gJDI7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2xpbmVzQ292ZXJhZ2V9ID0gJDE7Ci0gICAgfSBlbHNpZiAoL15CcmFuY2hlcyBleGVjdXRlZDooLiopJVxzKm9mXHMqKFxkKylccyokLykgewotCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0tPnticmFuY2hlc30gPSAkMjsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXNDb3ZlcmFnZX0gPSAkMTsKLSAgICB9IGVsc2lmICgvXlRha2VuIGF0IGxlYXN0IG9uY2U6KC4qKSVccypvZlxzKihcZCspXHMqJC8pIHsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y29uZHN9ID0gJDI7Ci0JJGNvdmVyYWdleyR0eXBlfS0+eyRuYW1lfS0+e2NvbmRzQ292ZXJhZ2V9ID0gJDE7Ci0gICAgfSBlbHNpZiAoL15DYWxscyBleGVjdXRlZDooLiopJVxzKm9mXHMqKFxkKylccyokLykgewotCSRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX0tPntjYWxsc30gPSAkMjsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHNDb3ZlcmFnZX0gPSAkMTsKLSAgICB9IGVsc2lmICgvXk5vIGJyYW5jaGVzJC8pIHsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXN9ID0gMDsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57YnJhbmNoZXNDb3ZlcmFnZX0gPSAiMTAwLjAwIjsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y29uZHN9ID0gMDsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y29uZHNDb3ZlcmFnZX0gPSAiMTAwLjAwIjsKLSAgICB9IGVsc2lmICgvXk5vIGNhbGxzJC8pIHsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHN9ID0gMDsKLQkkY292ZXJhZ2V7JHR5cGV9LT57JG5hbWV9LT57Y2FsbHNDb3ZlcmFnZX0gPSAiMTAwLjAwIjsKLSAgICB9IGVsc2lmICgvXlxzKiguKik6Y3JlYXRpbmcgJyguKiknXHMqJC8pIHsKLQkkZmlsZW1hcHskMX0gPSAkMjsKLSAgICB9IGVsc2lmICgvXlxzKiQvKSB7Ci0JIyBuYWRhCi0gICAgfSBlbHNlIHsKLQl3YXJuICJTaGl0IFskX11cbiI7Ci0gICAgfQotfQotCi1teSAlc3VtbWFyeTsKLWZvcmVhY2ggbXkgJHR5cGUgKCJmdW5jdGlvbiIsICJmaWxlIikgewotICAgICRzdW1tYXJ5eyR0eXBlfSA9IHt9OwotICAgIGZvcmVhY2ggbXkgJG0gKCJsaW5lcyIsICJicmFuY2hlcyIsICJjb25kcyIsICJjYWxscyIpIHsKLQlteSAkdG90YWxHb3QgPSAwOwotCW15ICR0b3RhbE1pc3MgPSAwOwotCW15ICRjb3VudCA9IDA7Ci0JZm9yZWFjaCBteSAkZnVuYyAoa2V5cyAleyRjb3ZlcmFnZXtmdW5jdGlvbn19KSB7Ci0JICAgICRjb3VudCsrOwotCSAgICBteSAkZ290ID0gJGNvdmVyYWdle2Z1bmN0aW9ufS0+eyRmdW5jfS0+eyRtfTsKLQkgICAgJHRvdGFsR290ICs9ICRnb3Q7Ci0JICAgIG15ICRtaXNzID0gJGdvdCAqICRjb3ZlcmFnZXtmdW5jdGlvbn0tPnskZnVuY30tPnskbSAuIkNvdmVyYWdlIn0gLyAxMDA7Ci0JICAgICR0b3RhbE1pc3MgKz0gJG1pc3M7Ci0JfQotCSRzdW1tYXJ5eyR0eXBlfS0+eyRtfSA9IHNwcmludGYoIiVkIiwgJHRvdGFsR290KTsKLQkkc3VtbWFyeXskdHlwZX0tPnskbSAuICJDb3ZlcmFnZSJ9ID0gc3ByaW50ZigiJS4yZiIsICR0b3RhbE1pc3MgLyAkdG90YWxHb3QgKiAxMDApOwotICAgIH0KLX0KLQotCi0KLXByaW50ICI8Y292ZXJhZ2U+XG4iOwotCi1mb3JlYWNoIG15ICR0eXBlICgiZnVuY3Rpb24iLCAiZmlsZSIpIHsKLSAgICBwcmludGYgIjwlc3M+XG4iLCAkdHlwZTsKLSAgICBmb3JlYWNoIG15ICRuYW1lIChzb3J0IHsgJGEgY21wICRiIH0ga2V5cyAleyRjb3ZlcmFnZXskdHlwZX19KSB7Ci0JbXkgJHJlYyA9ICRjb3ZlcmFnZXskdHlwZX0tPnskbmFtZX07Ci0JcHJpbnRmICIgIDxlbnRyeSBuYW1lPVwiJXNcIiBkZXRhaWxzPVwiJXNcIj5cbiIsICRuYW1lLCAoJHR5cGUgZXEgImZpbGUiID8gJGZpbGVtYXB7JG5hbWV9IDogJGZpbGVtYXB7JHJlYy0+e2ZpbGV9fSk7Ci0JcHJpbnRmICIgICAgPGxpbmVzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHJlYy0+e2xpbmVzfSwgJHJlYy0+e2xpbmVzQ292ZXJhZ2V9OwotCWlmIChleGlzdHMgJHJlYy0+e2JyYW5jaGVzfSkgewotCSAgICBwcmludGYgIiAgICA8YnJhbmNoZXMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkcmVjLT57YnJhbmNoZXN9LCAkcmVjLT57YnJhbmNoZXNDb3ZlcmFnZX07Ci0JfQotCWlmIChleGlzdHMgJHJlYy0+e2NvbmRzfSkgewotCSAgICBwcmludGYgIiAgICA8Y29uZGl0aW9ucyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRyZWMtPntjb25kc30sICRyZWMtPntjb25kc0NvdmVyYWdlfTsKLQl9Ci0JaWYgKGV4aXN0cyAkcmVjLT57Y2FsbHN9KSB7Ci0JICAgIHByaW50ZiAiICAgIDxjYWxscyBjb3VudD1cIiVzXCIgY292ZXJhZ2U9XCIlc1wiLz5cbiIsICRyZWMtPntjYWxsc30sICRyZWMtPntjYWxsc0NvdmVyYWdlfTsKLQl9Ci0JcHJpbnQgICIgIDwvZW50cnk+XG4iOwotICAgIH0KLQotICAgIHByaW50ZiAiICA8c3VtbWFyeT5cbiI7Ci0gICAgcHJpbnRmICIgICAgPGxpbmVzIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHN1bW1hcnl7JHR5cGV9LT57bGluZXN9LCAkc3VtbWFyeXskdHlwZX0tPntsaW5lc0NvdmVyYWdlfTsKLSAgICBwcmludGYgIiAgICA8YnJhbmNoZXMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkc3VtbWFyeXskdHlwZX0tPnticmFuY2hlc30sICRzdW1tYXJ5eyR0eXBlfS0+e2JyYW5jaGVzQ292ZXJhZ2V9OwotICAgIHByaW50ZiAiICAgIDxjb25kaXRpb25zIGNvdW50PVwiJXNcIiBjb3ZlcmFnZT1cIiVzXCIvPlxuIiwgJHN1bW1hcnl7JHR5cGV9LT57Y29uZHN9LCAkc3VtbWFyeXskdHlwZX0tPntjb25kc0NvdmVyYWdlfTsKLSAgICBwcmludGYgIiAgICA8Y2FsbHMgY291bnQ9XCIlc1wiIGNvdmVyYWdlPVwiJXNcIi8+XG4iLCAkc3VtbWFyeXskdHlwZX0tPntjYWxsc30sICRzdW1tYXJ5eyR0eXBlfS0+e2NhbGxzQ292ZXJhZ2V9OwotICAgIHByaW50ZiAgIiAgPC9zdW1tYXJ5PlxuIjsKLSAgICBwcmludGYgIjwvJXNzPlxuIiwgJHR5cGU7Ci19Ci0KLXByaW50ICI8L2NvdmVyYWdlPlxuIjsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQueHNsIGIvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZTEyNGIuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCi08IS0tDQotIw0KLSMgQ29weXJpZ2h0IChDKSAyMDA2IERhbmllbCBCZXJyYW5nZQ0KLSMNCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQotIw0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCi0jDQotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBDQotLS0+DQotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIg0KLSAgICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjAiPg0KLQ0KLSAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIi8+DQotDQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJjb3ZlcmFnZSI+DQotICAgIDxodG1sPg0KLSAgICAgIDxoZWFkPg0KLSAgICAgICAgPHRpdGxlPkNvdmVyYWdlIHJlcG9ydDwvdGl0bGU+DQotICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLSAgICAgICAgICB0Ym9keSB0ci5vZGQgdGQubGFiZWwgew0KLSAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMTI4LDEyOCwxMjgpOw0KLSAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI4LDEyOCwxMjgpOw0KLSAgICAgICAgICB9DQotICAgICAgICAgIHRib2R5IHRyLm9kZCB0ZC5sYWJlbCB7DQotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDIwMCwyMDAsMjAwKTsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICANCi0gICAgICAgICAgdGhlYWQsIHRmb290IHsNCi0gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoNjAsNjAsNjApOw0KLSAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsNCi0gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsNCi0gICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICB0ciB0ZC5wZXJmZWN0IHsNCi0gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMCwyNTUsMCk7DQotICAgICAgICAgICAgY29sb3I6IGJsYWNrOw0KLSAgICAgICAgICB9DQotICAgICAgICAgIHRyIHRkLmV4Y2VsbGFudCB7DQotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDE0MCwyNTUsMTQwKTsNCi0gICAgICAgICAgICBjb2xvcjogYmxhY2s7DQotICAgICAgICAgIH0NCi0gICAgICAgICAgdHIgdGQuZ29vZCB7DQotICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiKDE2MCwyNTUsMCk7DQotICAgICAgICAgICAgY29sb3I6IGJsYWNrOw0KLSAgICAgICAgICB9DQotICAgICAgICAgIHRyIHRkLnBvb3Igew0KLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigyNTUsMTYwLDApOw0KLSAgICAgICAgICAgIGNvbG9yOiBibGFjazsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICB0ciB0ZC5iYWQgew0KLSAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYigyNTUsMTQwLDE0MCk7DQotICAgICAgICAgICAgY29sb3I6IGJsYWNrOw0KLSAgICAgICAgICB9DQotICAgICAgICAgIHRyIHRkLnRlcnJpYmxlIHsNCi0gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LDAsMCk7DQotICAgICAgICAgICAgY29sb3I6IGJsYWNrOw0KLSAgICAgICAgICB9DQotICAgICAgICA8L3N0eWxlPg0KLSAgICAgIDwvaGVhZD4NCi0gICAgICA8Ym9keT4NCi0gICAgICAgIDxoMT5Db3ZlcmFnZSByZXBvcnQ8L2gxPg0KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPg0KLSAgICAgIDwvYm9keT4NCi0gICAgPC9odG1sPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotDQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmdW5jdGlvbnMiPg0KLSAgICA8aDI+RnVuY3Rpb24gY292ZXJhZ2U8L2gyPg0KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29udGVudCI+DQotICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InR5cGUiIHNlbGVjdD0iJ2Z1bmN0aW9uJyIvPg0KLSAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotICANCi0NCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImZpbGVzIj4NCi0gICAgPGgyPkZpbGUgY292ZXJhZ2U8L2gyPg0KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iY29udGVudCI+DQotICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InR5cGUiIHNlbGVjdD0iJ2ZpbGUnIi8+DQotICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0NCi0gIDx4c2w6dGVtcGxhdGUgbmFtZT0iY29udGVudCI+DQotICAgIDx4c2w6cGFyYW0gbmFtZT0idHlwZSIvPg0KLSAgICA8dGFibGU+DQotICAgICAgPHRoZWFkPg0KLSAgICAgICAgPHRyPg0KLSAgICAgICAgICA8dGg+TmFtZTwvdGg+DQotICAgICAgICAgIDx0aD5MaW5lczwvdGg+DQotICAgICAgICAgIDx0aD5CcmFuY2hlczwvdGg+DQotICAgICAgICAgIDx0aD5Db25kaXRpb25zPC90aD4NCi0gICAgICAgICAgPHRoPkNhbGxzPC90aD4NCi0gICAgICAgIDwvdHI+DQotICAgICAgPC90aGVhZD4NCi0gICAgICA8dGJvZHk+DQotICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0iZW50cnkiPg0KLSAgICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0iZW50cnkiPg0KLSAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJ0eXBlIiBzZWxlY3Q9IiR0eXBlIi8+DQotICAgICAgICAgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9ImNsYXNzIj4NCi0gICAgICAgICAgICAgIDx4c2w6Y2hvb3NlPg0KLSAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0icG9zaXRpb24oKSBtb2QgMiI+DQotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0Pm9kZDwveHNsOnRleHQ+DQotICAgICAgICAgICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KLSAgICAgICAgICAgICAgICAgIDx4c2w6dGV4dD5ldmVuPC94c2w6dGV4dD4NCi0gICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KLSAgICAgICAgICAgICAgPC94c2w6Y2hvb3NlPg0KLSAgICAgICAgICAgIDwveHNsOndpdGgtcGFyYW0+DQotICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+DQotICAgICAgICA8L3hzbDpmb3ItZWFjaD4NCi0gICAgICA8L3Rib2R5Pg0KLSAgICAgIDx0Zm9vdD4NCi0gICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJzdW1tYXJ5Ij4NCi0gICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9ImVudHJ5Ij4NCi0gICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0idHlwZSIgc2VsZWN0PSInc3VtbWFyeSciLz4NCi0gICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0iY2xhc3MiPg0KLSAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+DQotICAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJwb3NpdGlvbigpIG1vZCAyIj4NCi0gICAgICAgICAgICAgICAgICA8eHNsOnRleHQ+b2RkPC94c2w6dGV4dD4NCi0gICAgICAgICAgICAgICAgPC94c2w6d2hlbj4NCi0gICAgICAgICAgICAgICAgPHhzbDpvdGhlcndpc2U+DQotICAgICAgICAgICAgICAgICAgPHhzbDp0ZXh0PmV2ZW48L3hzbDp0ZXh0Pg0KLSAgICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+DQotICAgICAgICAgICAgICA8L3hzbDpjaG9vc2U+DQotICAgICAgICAgICAgPC94c2w6d2l0aC1wYXJhbT4NCi0gICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4NCi0gICAgICAgIDwveHNsOmZvci1lYWNoPg0KLSAgICAgIDwvdGZvb3Q+DQotICAgIDwvdGFibGU+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0gIA0KLSAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJlbnRyeSI+DQotICAgIDx4c2w6cGFyYW0gbmFtZT0idHlwZSIvPg0KLSAgICA8eHNsOnBhcmFtIG5hbWU9ImNsYXNzIi8+DQotICAgIDx0ciBjbGFzcz0ieyRjbGFzc30iPg0KLSAgICAgIDx4c2w6Y2hvb3NlPg0KLSAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiR0eXBlID0gJ2Z1bmN0aW9uJyI+DQotICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxhIGhyZWY9IntAZGV0YWlsc30uaHRtbCN7QG5hbWV9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz48L2E+PC90ZD4NCi0gICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICA8eHNsOndoZW4gdGVzdD0iJHR5cGUgPSAnZmlsZSciPg0KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48YSBocmVmPSJ7QGRldGFpbHN9Lmh0bWwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPjwvYT48L3RkPg0KLSAgICAgICAgPC94c2w6d2hlbj4NCi0gICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KLSAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj5TdW1tYXJ5PC90ZD4NCi0gICAgICAgIDwveHNsOm90aGVyd2lzZT4NCi0gICAgICA8L3hzbDpjaG9vc2U+DQotDQotICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChsaW5lcykiPg0KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJsaW5lcyIvPg0KLSAgICAgIDwveHNsOmlmPg0KLSAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvdW50KGxpbmVzKSkiPg0KLSAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1pc3NpbmciLz4NCi0gICAgICA8L3hzbDppZj4NCi0NCi0gICAgICA8eHNsOmlmIHRlc3Q9ImNvdW50KGJyYW5jaGVzKSI+DQotICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyBzZWxlY3Q9ImJyYW5jaGVzIi8+DQotICAgICAgPC94c2w6aWY+DQotICAgICAgPHhzbDppZiB0ZXN0PSJub3QoY291bnQoYnJhbmNoZXMpKSI+DQotICAgICAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ibWlzc2luZyIvPg0KLSAgICAgIDwveHNsOmlmPg0KLQ0KLSAgICAgIDx4c2w6aWYgdGVzdD0iY291bnQoY29uZGl0aW9ucykiPg0KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjb25kaXRpb25zIi8+DQotICAgICAgPC94c2w6aWY+DQotICAgICAgPHhzbDppZiB0ZXN0PSJub3QoY291bnQoY29uZGl0aW9ucykpIj4NCi0gICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJtaXNzaW5nIi8+DQotICAgICAgPC94c2w6aWY+DQotDQotICAgICAgPHhzbDppZiB0ZXN0PSJjb3VudChjYWxscykiPg0KLSAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJjYWxscyIvPg0KLSAgICAgIDwveHNsOmlmPg0KLSAgICAgIDx4c2w6aWYgdGVzdD0ibm90KGNvdW50KGNhbGxzKSkiPg0KLSAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9Im1pc3NpbmciLz4NCi0gICAgICA8L3hzbDppZj4NCi0NCi0gICAgPC90cj4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLSAgDQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJsaW5lcyI+DQotICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPSJyb3ciLz4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLQ0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYnJhbmNoZXMiPg0KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icm93Ii8+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0NCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNvbmRpdGlvbnMiPg0KLSAgICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0icm93Ii8+DQotICA8L3hzbDp0ZW1wbGF0ZT4NCi0NCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImNhbGxzIj4NCi0gICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9InJvdyIvPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotDQotICA8eHNsOnRlbXBsYXRlIG5hbWU9Im1pc3NpbmciPg0KLSAgICA8dGQ+PC90ZD4NCi0gIDwveHNsOnRlbXBsYXRlPg0KLQ0KLSAgPHhzbDp0ZW1wbGF0ZSBuYW1lPSJyb3ciPg0KLSAgICA8eHNsOnZhcmlhYmxlIG5hbWU9InF1YWxpdHkiPg0KLSAgICAgIDx4c2w6Y2hvb3NlPg0KLSAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjb3ZlcmFnZSA9IDEwMCI+DQotICAgICAgICAgIDx4c2w6dGV4dD5wZXJmZWN0PC94c2w6dGV4dD4NCi0gICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGNvdmVyYWdlID49IDgwLjAiPg0KLSAgICAgICAgICA8eHNsOnRleHQ+ZXhjZWxsYW50PC94c2w6dGV4dD4NCi0gICAgICAgIDwveHNsOndoZW4+DQotICAgICAgICA8eHNsOndoZW4gdGVzdD0iQGNvdmVyYWdlID49IDYwLjAiPg0KLSAgICAgICAgICA8eHNsOnRleHQ+Z29vZDwveHNsOnRleHQ+DQotICAgICAgICA8L3hzbDp3aGVuPg0KLSAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IkBjb3ZlcmFnZSA+PSA0MC4wIj4NCi0gICAgICAgICAgPHhzbDp0ZXh0PnBvb3I8L3hzbDp0ZXh0Pg0KLSAgICAgICAgPC94c2w6d2hlbj4NCi0gICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJAY292ZXJhZ2UgPj0gMjAuMCI+DQotICAgICAgICAgIDx4c2w6dGV4dD5iYWQ8L3hzbDp0ZXh0Pg0KLSAgICAgICAgPC94c2w6d2hlbj4NCi0gICAgICAgIDx4c2w6b3RoZXJ3aXNlPg0KLSAgICAgICAgICA8eHNsOnRleHQ+dGVycmlibGU8L3hzbDp0ZXh0Pg0KLSAgICAgICAgPC94c2w6b3RoZXJ3aXNlPg0KLSAgICAgIDwveHNsOmNob29zZT4NCi0gICAgPC94c2w6dmFyaWFibGU+DQotICAgIA0KLSAgICA8dGQgY2xhc3M9InskcXVhbGl0eX0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY292ZXJhZ2UiLz4lIG9mIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAY291bnQiLz48L3RkPg0KLSAgPC94c2w6dGVtcGxhdGU+DQotDQotPC94c2w6c3R5bGVzaGVldD4NCmRpZmYgLS1naXQgYS9jb21tb24vY292ZXJhZ2UvbGNvdi5tYWsgYi9jb21tb24vY292ZXJhZ2UvbGNvdi5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTcyOGEuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2NvdmVyYWdlL2xjb3YubWFrCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyMgLlBIT05ZIHNvIGl0IGFsd2F5cyByZWJ1aWxkcyBpdAotLlBIT05ZOiBsY292LXJlc2V0IGxjb3YgbGNvdi1ydW4gbGNvdi1yZXBvcnQgbGNvdi11cGxvYWQgbGNvdi1jbGVhbgotCi0jIHJ1biBsY292IGZyb20gc2NyYXRjaCwgYWx3YXlzCi1sY292LXJlc2V0OgotCSQoTUFLRSkgbGNvdi1ydW4KLQkkKE1BS0UpIGxjb3YtcmVwb3J0Ci0KLSMgcnVuIGxjb3YgZnJvbSBzY3JhdGNoIGlmIHRoZSBkaXIgaXMgbm90IHRoZXJlCi1sY292OgotCSQoTUFLRSkgbGNvdi1yZXNldAotCi1pZiBHU1RfR0NPVl9FTkFCTEVECi0jIHJlc2V0IGxjb3Ygc3RhdHMKLWxjb3YtY2xlYW46Ci0JQC1ybSAtcmYgbGNvdgotCWxjb3YgLS1kaXJlY3RvcnkgLiAtLXplcm9jb3VudGVycwotCi0jIHJlc2V0IHJ1biBjb3ZlcmFnZSB0ZXN0cwotbGNvdi1ydW46Ci0JLSQoTUFLRSkgbGNvdi1jbGVhbgotCS1pZiB0ZXN0IC1kIHRlc3RzL2NoZWNrOyB0aGVuICQoTUFLRSkgLUMgdGVzdHMvY2hlY2sgaW5zcGVjdDsgZmkKLQktJChNQUtFKSBjaGVjawotCi0jIGdlbmVyYXRlIHJlcG9ydCBiYXNlZCBvbiBjdXJyZW50IGNvdmVyYWdlIGRhdGEKLWxjb3YtcmVwb3J0OgotCW1rZGlyIGxjb3YKLQlsY292IC0tY29tcGF0LWxpYnRvb2wgLS1kaXJlY3RvcnkgLiAtLWNhcHR1cmUgLS1vdXRwdXQtZmlsZSBsY292L2xjb3YuaW5mbwotCWxjb3YgLS1saXN0LWZ1bGwtcGF0aCAtbCBsY292L2xjb3YuaW5mbyB8IGdyZXAgLXYgImBjZCAkKHRvcF9zcmNkaXIpICYmIHB3ZGAiIHwgY3V0IC1kXHwgLWYxID4gbGNvdi9yZW1vdmUKLQlsY292IC0tbGlzdC1mdWxsLXBhdGggLWwgbGNvdi9sY292LmluZm8gfCBncmVwICJ0ZXN0cy9jaGVjay8iIHwgY3V0IC1kXHwgLWYxID4+IGxjb3YvcmVtb3ZlCi0JbGNvdiAtLWxpc3QtZnVsbC1wYXRoIC1sIGxjb3YvbGNvdi5pbmZvIHwgZ3JlcCAiZG9jcy9wbHVnaW5zLyIgfCBjdXQgLWRcfCAtZjEgPj4gbGNvdi9yZW1vdmUKLQlsY292IC1yIGxjb3YvbGNvdi5pbmZvIGBjYXQgbGNvdi9yZW1vdmVgID4gbGNvdi9sY292LmNsZWFuZWQuaW5mbwotCXJtIGxjb3YvcmVtb3ZlCi0JbXYgbGNvdi9sY292LmNsZWFuZWQuaW5mbyBsY292L2xjb3YuaW5mbwotCWdlbmh0bWwgLXQgIiQoUEFDS0FHRV9TVFJJTkcpIiAtbyBsY292IC0tbnVtLXNwYWNlcyAyIGxjb3YvbGNvdi5pbmZvCi0KLWxjb3YtdXBsb2FkOiBsY292Ci0JcnN5bmMgLXJ2eiAtZSBzc2ggLS1kZWxldGUgbGNvdi8qIGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmc6L3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2NvdmVyYWdlL2xjb3YvJChQQUNLQUdFKQotCi1lbHNlCi1sY292LXJ1bjoKLQllY2hvICJOZWVkIHRvIHJlY29uZmlndXJlIHdpdGggLS1lbmFibGUtZ2NvdiIKLQotbGNvdi1yZXBvcnQ6Ci0JZWNobyAiTmVlZCB0byByZWNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWdjb3YiCi1lbmRpZgotCmRpZmYgLS1naXQgYS9jb21tb24vY3J1ZnQubWFrIGIvY29tbW9uL2NydWZ0Lm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlZWMyNC4uMDAwMDAwMAotLS0gYS9jb21tb24vY3J1ZnQubWFrCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotIyBjaGVja3MgZm9yIGxlZnQtb3ZlciBmaWxlcyBpbiB0aGUgKHVzdWFsbHkgdW5pbnN0YWxsZWQpIHRyZWUsIGllLiBmb3IKLSMgc3R1ZmYgdGhhdCBiZXN0IGJlIGRlbGV0ZWQgdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSBoYXZpbmcgb2xkIHBsdWdpbiBiaW5hcmllcwotIyBseWluZyBhcm91bmQuCi0jCi0jIHNldCBDUlVGVF9GSUxFUyBhbmQvb3IgQ1JVRlRfRElSUyBpbiB5b3VyIE1ha2VmaWxlLmFtIHdoZW4geW91IGluY2x1ZGUgdGhpcwotCi1jaGVjay1jcnVmdDoKLQlAY3J1ZnRfZmlsZXM9IiI7IGNydWZ0X2RpcnM9IiI7IFwKLQlmb3IgZiBpbiAkKENSVUZUX0ZJTEVTKTsgZG8gXAotCSAgaWYgdGVzdCAtZSAkJGY7IHRoZW4gXAotCSAgICBjcnVmdF9maWxlcz0iJCRjcnVmdF9maWxlcyAkJGYiOyBcCi0JICBmaSBcCi0JZG9uZTsgXAotCWZvciBkIGluICQoQ1JVRlRfRElSUyk7IGRvIFwKLQkgIGlmIHRlc3QgLWUgJCRkOyB0aGVuIFwKLQkgICAgY3J1ZnRfZGlycz0iJCRjcnVmdF9kaXJzICQkZCI7IFwKLQkgIGZpIFwKLQlkb25lOyBcCi0JaWYgdGVzdCAieCQkY3J1ZnRfZmlsZXMkJGNydWZ0X2RpcnMiICE9IHg7IHRoZW4gXAotCSAgZWNobzsgXAotCSAgZWNobyAiKioqKiBDUlVGVCBBTEVSVCAqKioqKiI7IFwKLQkgIGVjaG87IFwKLQkgIGVjaG8gIlRoZSBmb2xsb3dpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG1heSBub3QgYmUgbmVlZGVkIGFueSAiOyBcCi0JICBlY2hvICJsb25nZXIgKHVzdWFsbHkgYmVjYXVzZSBhIHBsdWdpbiBoYXMgYmVlbiBtZXJnZWQgaW50byAgICAgIjsgXAotCSAgZWNobyAiYW5vdGhlciBwbHVnaW4sIG1vdmVkIHRvIGEgZGlmZmVyZW50IG1vZHVsZSwgb3IgYmVlbiAgICAgICI7IFwKLQkgIGVjaG8gInJlbmFtZWQpLCBhbmQgeW91IHByb2JhYmx5IHdhbnQgdG8gY2xlYW4gdGhlbSB1cCBpZiB5b3UgICAiOyBcCi0JICBlY2hvICJkb24ndCBoYXZlIGxvY2FsIGNoYW5nZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsgXAotCSAgZWNobzsgXAotCSAgZm9yIGYgaW4gJCRjcnVmdF9maWxlczsgZG8gZWNobyAiZmlsZSAkJGYiOyBkb25lOyBcCi0JICBlY2hvOyBcCi0JICBmb3IgZCBpbiAkJGNydWZ0X2RpcnM7IGRvIGVjaG8gImRpcmVjdG9yeSAkJGQiOyBkb25lOyBcCi0JICBlY2hvOyBcCi0JICBlY2hvICInbWFrZSBjbGVhbi1jcnVmdCcgd2lsbCByZW1vdmUgdGhlc2UgZm9yIHlvdS4iOyBcCi0JICBlY2hvOyBcCi0JZmkKLQotY2xlYW4tY3J1ZnQtZGlyczoKLQlAZm9yIGQgaW4gJChDUlVGVF9ESVJTKTsgZG8gXAotCSAgaWYgdGVzdCAtZSAkJGQ7IHRoZW4gXAotCSAgICBybSAtciAiJCRkIiAmJiBlY2hvICJSZW1vdmVkIGRpcmVjdG9yeSAkJGQiOyBcCi0JICBmaSBcCi0JZG9uZQotCi1jbGVhbi1jcnVmdC1maWxlczoKLQlAZm9yIGYgaW4gJChDUlVGVF9GSUxFUyk7IGRvIFwKLQkgIGlmIHRlc3QgLWUgJCRmOyB0aGVuIFwKLQkgICAgcm0gIiQkZiIgJiYgZWNobyAiUmVtb3ZlZCBmaWxlICQkZiI7IFwKLQkgIGZpIFwKLQlkb25lCi0KLWNsZWFuLWNydWZ0OiBjbGVhbi1jcnVmdC1kaXJzIGNsZWFuLWNydWZ0LWZpbGVzCi0KLSMgYWxzbyBtaWdodCB3YW50IHRvIGFkZCB0aGlzIHRvIHlvdXIgTWFrZWZpbGUuYW06Ci0jCi0jIGFsbC1sb2NhbDogY2hlY2stY3J1ZnQKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2Rvd25sb2FkLXRyYW5zbGF0aW9ucyBiL2NvbW1vbi9kb3dubG9hZC10cmFuc2xhdGlvbnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFlZjFkMzEuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2Rvd25sb2FkLXRyYW5zbGF0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0jIS9iaW4vc2gKLSMgU2hlbGwgc2NyaXB0IHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgdHJhbnNsYXRpb25zIGZvciBhIGdpdmVuIEdTdHJlYW1lcgotIyBwYWNrYWdlIGZyb20gdHJhbnNsYXRpb25wcm9qZWN0Lm9yZwotCi0KLSMgRE9NQUlOUyBiYXNlZCBvbiBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy9leHRyYS9tYXRyaXguaHRtbAotIyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBkb21haW5zLCBub3Qgb25seSBwby9MSU5HVUFTLCBzaW5jZSB0aGVyZSBtaWdodCBiZQotIyBuZXcgdHJhbnNsYXRpb25zCi1ET01BSU5TPVwKLSJhZiBhbSBhciBheiBiZSBiZyBwdF9CUiBicyBjYSB6aF9DTiBjcyBjeSBkYSBkZSBlbCBlbyBlcyBldCBldSBmYSBmaSBmciAiXAotImdhIGVuX0dCIGdsIGd1IGhlIGhpIHpoX0hLIGhyIGh1IGlkIGlzIGl0IGphIGtvIGt1IGt5IGxnIGx0IGx2IG1rIG1uIG1zICJcCi0ibXQgbmIgbmUgbmwgbm4gb3IgcGEgcGwgcHQgcm0gcm8gcnUgcncgc2sgc2wgc3Egc3Igc3YgdGEgdHEgdGggdGsgIlwKLSJ0ciB6aF9UVyB1ayB2ZW4gdmkgd2EgeGggenUiCi0KLSMgZm9yIHRlc3RpbmcvZGVidWdnaW5nOgotI0RPTUFJTlM9ImVzIGZyIGh1IHN2IHBsIHh4IgotCi0jIGNoZWNrIGZvciAnZGlmZicgcHJvZ3JhbQotZGlmZiAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbAotaWYgWyAhICQ/IF07IHRoZW4KLSAgZWNobyAiPT09PSBZb3UgbXVzdCBoYXZlIHRoZSAnZGlmZicgcHJvZ3JhbSBpbnN0YWxsZWQgZm9yIHRoaXMgc2NyaXB0ID09PT0iCi0gIGV4aXQgMQotZmkKLQotIyBjaGVjayBmb3IgJ3dnZXQnIHByb2dyYW0KLXdnZXQgLS12ZXJzaW9uIDI+L2Rldi9udWxsID4vZGV2L251bGwKLWlmIFsgISAkPyBdOyB0aGVuCi0gIGVjaG8gIj09PT0gWW91IG11c3QgaGF2ZSB0aGUgJ3dnZXQnIHByb2dyYW0gaW5zdGFsbGVkIGZvciB0aGlzIHNjcmlwdCA9PT09IgotICBleGl0IDEKLWZpCi0KLSMgbWFrZSBzdXJlIHdlJ3JlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Ci1pZiBbICEgLWQgLi9wbyBdOyB0aGVuCi0gIGVjaG8gIj09PT0gTm8gLi9wbyBkaXJlY3RvcnkgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgPT09PSIKLSAgZXhpdCAxCi1maQotCi0jIG1ha2Ugc3VyZSBhIHBhY2thZ2UgYXJndW1lbnQgd2FzIHBhc3NlZCB0byB1cwotaWYgWyAteiAiJDEiIF07IHRoZW4KLSAgZWNobyAiVXNhZ2U6ICQwIFBBQ0tBR0UsIGUuZy4gJDAgZ3N0LXBsdWdpbnMtZ29vZCIKLSAgZXhpdCAxCi1maQotCi1pZiB0ZXN0ICIkMSIgIT0gImdzdHJlYW1lciIgLWEgXAotICAgICAgICAiJDEiICE9ICJnc3QtcGx1Z2lucy1iYXNlIiAtYSBcCi0gICAgICAgICIkMSIgIT0gImdzdC1wbHVnaW5zLWdvb2QiIC1hIFwKLSAgICAgICAgIiQxIiAhPSAiZ3N0LXBsdWdpbnMtdWdseSIgLWEgXAotICAgICAgICAiJDEiICE9ICJnc3QtcGx1Z2lucy1iYWQiOyB0aGVuCi0gIGVjaG8gIlVuZXhwZWN0ZWQgcGFja2FnZSAnJDEnID8hIgotICBleGl0IDEKLWZpCi0KLVBBQ0tBR0U9IiQxIgotCi1ET01BSU5TX1RPX0FERD0iIgotRE9NQUlOU19VUERBVEVEPSIiCi1ET01BSU5TX05PVF9JTl9MSU5HVUFTPSIiCi0KLWVjaG8gIkRvd25sb2FkaW5nIGxhdGVzdCB0cmFuc2xhdGlvbiBmaWxlcyBmb3IgcGFja2FnZSAkUEFDS0FHRSAuLi4iCi1lY2hvCi0KLWZvciBkIGluICRET01BSU5TCi1kbwotICBQQUNLQUdFX1BPX1VSTF9CQVNFPSJodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy9sYXRlc3QvJFBBQ0tBR0UiCi0gIFBPX1VSTD0iJFBBQ0tBR0VfUE9fVVJMX0JBU0UvJGQucG8iCi0gIFBPX0ZJTEVOQU1FPSIkUEFDS0FHRS4kZC5wbyIKLSAgaWYgd2dldCAtcSAtbmMgLU8gJFBPX0ZJTEVOQU1FICRQT19VUkw7IHRoZW4KLSAgICAjIHdlIHdhbnQgYWxsIC5wbyBmaWxlcyBpbiBVVEYtOCBmb3JtYXQgcmVhbGx5LCBzbyBjb252ZXJ0IGlmIG5lZWRlZC4uCi0gICAgQ0hBUlNFVD1gZ3JlcCBDb250ZW50LVR5cGUgJFBPX0ZJTEVOQU1FIHwgc2VkIC1lICdzLy4qY2hhcnNldD1cKC4qXClcXFxcbi4qL1wxLydgCi0gICAgaWYgdGVzdCAieCRDSEFSU0VUIiAhPSAieFVURi04IiAtYSAieCRDSEFSU0VUIiAhPSAieHV0Zi04IjsgdGhlbgotICAgICAgIyBub3RlOiB0aGluZ3MgbGlrZSB0aGUgYnVncyBhZGRyZXNzIHdpbGwgYmUgYWRkZWQgYmFjayBieSBtYWtlIHVwZGF0ZS1wbwotICAgICAgaWYgbXNndW5pcSAkUE9fRklMRU5BTUUgLS1uby1sb2NhdGlvbiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLW91dHB1dC1maWxlPSRQT19GSUxFTkFNRS51dGY4IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdG8tY29kZT1VVEYtODsgdGhlbgotICAgICAgICBtdiAkUE9fRklMRU5BTUUudXRmOCAkUE9fRklMRU5BTUUKLSAgICAgIGVsc2UKLSAgICAgICAgZWNobyAiKioqKiAkZDogY29udmVyc2lvbiBmcm9tICRDSEFSU0VUIHRvIFVURi04IGZhaWxlZCAqKioqIgotICAgICAgZmkKLSAgICBmaQotICAgIGlmIFsgLWYgInBvLyRkLnBvIiBdOyB0aGVuCi0gICAgICAjIC4vcG8vZm9vLnBvIGV4aXN0cywgc28gbGV0J3MgY2hlY2sgaWYgb3VycyBtYXRjaGVzIHRoZSBsYXRlc3QgZnJvbSB0aGUKLSAgICAgICMgdHJhbnNsYXRpb24gcHJvamVjdCB3ZWJzaXRlCi0gICAgICBSRVZEQVRFX05FVz1gZ3JlcCBQTy1SZXZpc2lvbi1EYXRlICRQT19GSUxFTkFNRWA7Ci0gICAgICBSRVZEQVRFX09MRD1gZ3JlcCBQTy1SZXZpc2lvbi1EYXRlIHBvLyRkLnBvYDsKLSAgICAgIENIQVJTRVRfT0xEPWBncmVwIENvbnRlbnQtVHlwZSBwby8kZC5wbyB8IHNlZCAtZSAncy8uKmNoYXJzZXQ9XCguKlwpXFxcXG4uKi9cMS8nYAotICAgICAgaWYgdGVzdCAieCRSRVZEQVRFX05FVyIgPSAieCRSRVZEQVRFX09MRCIgLWEgIngkQ0hBUlNFVF9PTEQiID0gInhVVEYtOCI7IHRoZW4KLSAgICAgICAgIyBub3RlOiBzb3VyY2UgY29kZSBsaW5lIG1hcmtlcnMgd2lsbCBiZSByZW1vdmVkIGxhdGVyIGJ5IG1ha2UgdXBsb2FkLXBvCi0gICAgICAgIGVjaG8gIiRkLnBvOiB1cC10by1kYXRlIgotICAgICAgICBybSAtZiAkUE9fRklMRU5BTUUKLSAgICAgIGVsc2UKLSAgICAgICAgbXYgJFBPX0ZJTEVOQU1FICJwby8kZC5wbyIKLSAgICAgICAgaWYgdGVzdCAieCRDSEFSU0VUX09MRCIgIT0gInhVVEYtOCIgLWEgIngkQ0hBUlNFVF9PTEQiICE9ICJ4dXRmLTgiOyB0aGVuCi0gICAgICAgICAgZWNobyAiJGQucG86IHVwZGF0ZSAoYW5kIGNoYXJzZXQgY29udmVydGVkIGZyb20gJENIQVJTRVRfT0xEIHRvIFVURi04KSIKLSAgICAgICAgZWxzZQotICAgICAgICAgIGVjaG8gIiRkLnBvOiB1cGRhdGVkIgotICAgICAgICBmaQotICAgICAgICBET01BSU5TX1VQREFURUQ9IiRET01BSU5TX1VQREFURUQgJGQiCi0gICAgICBmaQotICAgICAgIyBtYWtlIHN1cmUgZG9tYWluIGlzIGxpc3RlZCBpbiBMSU5HVUFTCi0gICAgICBpZiAhIGdyZXAgJGQgInBvL0xJTkdVQVMiID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgRE9NQUlOU19OT1RfSU5fTElOR1VBUz0iJERPTUFJTlNfTk9UX0lOX0xJTkdVQVMgJGQiCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgICMgLi9wby9mb28ucG8gZG9lc24ndCBleGlzdCwgYnV0IGZvby5wbyBleGlzdHMgb24gdGhlIHRyYW5zbGF0aW9uIHByb2plY3QKLSAgICAgICMgd2Vic2l0ZSwgc28gaXQncyBwcm9iYWJseSBhIG5ldyB0cmFuc2xhdGlvbgotICAgICAgZWNobyAiJGQucG86IG5ldyBsYW5ndWFnZSIKLSAgICAgIG12ICRQT19GSUxFTkFNRSAicG8vJGQucG8iCi0gICAgICBET01BSU5TX1VQREFURUQ9IiRET01BSU5TX1VQREFURUQgJGQiCi0gICAgICBET01BSU5TX1RPX0FERD0iJERPTUFJTlNfVE9fQUREICRkIgotICAgIGZpCi0gIGVsc2UKLSAgICBybSAtZiAkUE9fRklMRU5BTUUKLSAgICBlY2hvICIkZC5wbzogZmFpbHVyZSAoZG9lcyBwcm9iYWJseSBub3QgZXhpc3QpIgotICBmaQotZG9uZQotCi1pZiBbIC1uICIkRE9NQUlOU19VUERBVEVEIiBdOyB0aGVuCi0gIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgotICBlY2hvCi0gIGVjaG8gIkxhbmd1YWdlIGRvbWFpbnMgdXBkYXRlZCAgICA6JERPTUFJTlNfVVBEQVRFRCIKLSAgZWNobyAiTGFuZ3VhZ2UgZG9tYWlucyB0byBnaXQgYWRkIDokRE9NQUlOU19UT19BREQiCi0gIGVjaG8KLSAgZWNobyAiU291cmNlOiBodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy9sYXRlc3QvJFBBQ0tBR0UvIgotICBlY2hvCi0gIGlmIFsgLW4gIiRET01BSU5TX1RPX0FERCIgXTsgdGhlbgotICAgIENNRF9TVFJJTkc9ImdpdCBhZGQiCi0gICAgZm9yIGQgaW4gJERPTUFJTlNfVE9fQUREOyBkbwotICAgICAgQ01EX1NUUklORz0iJENNRF9TVFJJTkcgcG8vJGQucG8iCi0gICAgZG9uZQotICAgIGVjaG8gIlBsZWFzZSBydW4iCi0gICAgZWNobwotICAgIGVjaG8gIiAgJENNRF9TVFJJTkciCi0gICAgZWNobwotICAgIGVjaG8gIm5vdyBhbmQgYWRkIHRoZSBmb2xsb3dpbmcgZG9tYWlucyB0byB0aGUgcG8vTElOR1VBUyBmaWxlOiIKLSAgICBlY2hvCi0gICAgZWNobyAiICAkRE9NQUlOU19UT19BREQiCi0gICAgZWNobwotICAgIGVjaG8KLSAgZmkKLSAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi1maQotCi1pZiBbIC1uICIkRE9NQUlOU19OT1RfSU5fTElOR1VBUyIgXTsgdGhlbgotICBlY2hvCi0gIGVjaG8gIkV4aXN0aW5nIGRvbWFpbnMgbWlzc2luZyBmcm9tIHRoZSBwby9MSU5HVUFTIGZpbGU6IgotICBlY2hvCi0gIGVjaG8gIiAgJERPTUFJTlNfTk9UX0lOX0xJTkdVQVMiCi0gIGVjaG8KLSAgZWNobwotZmkKLQotCmRpZmYgLS1naXQgYS9jb21tb24vZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUgYi9jb21tb24vZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY1N2UzMDcuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2V4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyEvYmluL3NoCi0jIFNoZWxsIHNjcmlwdCB0byBleHRyYWN0IHRoZSBkYXRlIGdpdmVuIGEgcmVsZWFzZSB2ZXJzaW9uIGFuZCBhIC5kb2FwIGZpbGUKLQotaWYgdGVzdCAieCQxIiA9ICJ4IiAtbyAieCQyIiA9ICJ4IiAtbyAhIC1zICIkMiI7IHRoZW4KLSAgZWNobyAiVXNhZ2U6ICQwIFJFTEVBU0UtVkVSU0lPTi1OVU1CRVIgRE9BUC1GSUxFIiA+JjI7Ci0gIGV4aXQgMQotZmkKLQotaWYgISBncmVwICc8UHJvamVjdCcgIiQyIiA+L2Rldi9udWxsIDsgdGhlbgotICBlY2hvICIkMiBkb2VzIG5vdCBsb29rIGxpa2EgYSAuZG9hcCBmaWxlIiA+JjI7Ci0gIGV4aXQgMQotZmkKLQotaWYgISBncmVwICIkMSIgIiQyIiA+L2Rldi9udWxsIDsgdGhlbgotICBlY2hvICIkMiBjb250YWlucyBubyByZWZlcmVuY2UgdG8gYSB2ZXJzaW9uICQxIiA+JjI7Ci0gIGV4aXQgMQotZmkKLQotYXdrICdCRUdJTiB7eD0wfQotewotaWYgKCAkMCB+IC88cmVsZWFzZT4vICkge3g9MTsgY2h1bms9IiJ9Ci1pZiAoeD09MSkgewotICBpZiAoJDAgfiAvPHJldmlzaW9uPi8pIHsgY2h1bmsgPSBjaHVuayAkMCB9Ci0gIGlmICgkMCB+IC88Y3JlYXRlZD4vKSB7IGNodW5rID0gY2h1bmsgJDAgfQotfQotaWYgKCQwIH4gLzxcL3JlbGVhc2U+Lykge3g9MDsgcHJpbnQgY2h1bmt9Ci19JyA8ICIkMiIgfCBcCi1cCi1ncmVwICc8cmV2aXNpb24+JyIkMSInPC9yZXZpc2lvbj4nIHwgXAotXAotc2VkIC1lICdzL14uKjxjcmVhdGVkPi8vJyAtZSAncy88XC9jcmVhdGVkPi4qJC8vJwotCmRpZmYgLS1naXQgYS9jb21tb24vZ2V0dGV4dC5wYXRjaCBiL2NvbW1vbi9nZXR0ZXh0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODJiOTA1Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9nZXR0ZXh0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotLS0tIHBvL01ha2VmaWxlLmluLmluLm9yaWcJMjAwNi0wMS0wNyAxMjowMzo0NS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBwby9NYWtlZmlsZS5pbi5pbgkyMDA2LTAxLTA3IDEyOjA0OjIzLjAwMDAwMDAwMCArMDEwMAotQEAgLTExLDYgKzExLDkgQEAKLSBQQUNLQUdFID0gQFBBQ0tBR0VACi0gVkVSU0lPTiA9IEBWRVJTSU9OQAotIAotKyMgdGhvbWFzOiBhZGQgR0VUVEVYVF9QQUNLQUdFIHN1YnN0aXR1dGlvbiBhcyB1c2VkIGluIE1ha2V2YXJzCi0rR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLSsKLSBTSEVMTCA9IC9iaW4vc2gKLSBAU0VUX01BS0VACi0gCmRpZmYgLS1naXQgYS9jb21tb24vZ2xpYi1nZW4ubWFrIGIvY29tbW9uL2dsaWItZ2VuLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY5M2E1Zi4uMDAwMDAwMAotLS0gYS9jb21tb24vZ2xpYi1nZW4ubWFrCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyB0aGVzZSBhcmUgdGhlIHZhcmlhYmxlcyB5b3VyIE1ha2VmaWxlLmFtIHNob3VsZCBzZXQKLSMgdGhlIGV4YW1wbGUgaXMgYmFzZWQgb24gdGhlIGNvbG9yYmFsYW5jZSBpbnRlcmZhY2UKLQotI2dsaWJfZW51bV9oZWFkZXJzPSQoY29sb3JiYWxhbmNlX2hlYWRlcnMpCi0jZ2xpYl9lbnVtX2RlZmluZT1HU1RfQ09MT1JfQkFMQU5DRQotI2dsaWJfZW51bV9wcmVmaXg9Z3N0X2NvbG9yX2JhbGFuY2UKLQotZW51bV9oZWFkZXJzPSQoZm9yZWFjaCBoLCQoZ2xpYl9lbnVtX2hlYWRlcnMpLFxuXCNpbmNsdWRlIFwiJChoKVwiKQotCi0jIHRoZXNlIGFyZSBhbGwgdGhlIHJ1bGVzIGdlbmVyYXRpbmcgdGhlIHJlbGV2YW50IGZpbGVzCi0lLW1hcnNoYWwuaDogJS1tYXJzaGFsLmxpc3QKLQkkKEFNX1ZfR0VOKWdsaWItZ2VubWFyc2hhbCAtLWhlYWRlciAtLXByZWZpeD0kKGdsaWJfZW51bV9wcmVmaXgpX21hcnNoYWwgJF4gPiAkKi1tYXJzaGFsLmgudG1wICYmIFwKLQltdiAkKi1tYXJzaGFsLmgudG1wICQqLW1hcnNoYWwuaAotCi0lLW1hcnNoYWwuYzogJS1tYXJzaGFsLmxpc3QKLQkkKEFNX1ZfR0VOKWVjaG8gIiNpbmNsdWRlIFwiJCotbWFyc2hhbC5oXCIiID4+ICQqLW1hcnNoYWwuYy50bXAgJiYgXAotCWdsaWItZ2VubWFyc2hhbCAtLWJvZHkgLS1wcmVmaXg9JChnbGliX2VudW1fcHJlZml4KV9tYXJzaGFsICReID4+ICQqLW1hcnNoYWwuYy50bXAgJiYgXAotCW12ICQqLW1hcnNoYWwuYy50bXAgJCotbWFyc2hhbC5jCi0KLSUtZW51bXR5cGVzLmg6ICQoZ2xpYl9lbnVtX2hlYWRlcnMpCi0JJChBTV9WX0dFTilnbGliLW1rZW51bXMgXAotCS0tZmhlYWQgIiNpZm5kZWYgX18kKGdsaWJfZW51bV9kZWZpbmUpX0VOVU1fVFlQRVNfSF9fXG4jZGVmaW5lIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCi0JLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqL1xuIiBcCi0JLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSBHU1RfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCi0JLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfXyAqLyIgXAotCSReID4gJEAKLQotJS1lbnVtdHlwZXMuYzogJChnbGliX2VudW1faGVhZGVycykKLQlAaWYgdGVzdCAieCQoZ2xpYl9lbnVtX2hlYWRlcnMpIiA9ICJ4IjsgdGhlbiBlY2hvICJFUlJPUjogZ2xpYl9lbnVtX2hlYWRlcnMgaXMgZW1wdHksIHBsZWFzZSBmaXggTWFrZWZpbGUiOyBleGl0IDE7IGZpCi0JJChBTV9WX0dFTilnbGliLW1rZW51bXMgXAotCS0tZmhlYWQgIiNpbmNsdWRlIFwiJCotZW51bXR5cGVzLmhcIlxuJChlbnVtX2hlYWRlcnMpIiBcCi0JLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqLyIgXAotCS0tdmhlYWQgIkdUeXBlXG5AZW51bV9uYW1lQF9nZXRfdHlwZSAodm9pZClcbntcbiAgc3RhdGljIHZvbGF0aWxlIGdzaXplIGdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlID0gMDtcbiAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGUpKSB7XG4gICAgc3RhdGljIGNvbnN0IEdAVHlwZUBWYWx1ZSB2YWx1ZXNbXSA9IHsiICAgICBcCi0JLS12cHJvZCAiICAgICAgeyBAVkFMVUVOQU1FQCwgXCJAVkFMVUVOQU1FQFwiLCBcIkB2YWx1ZW5pY2tAXCIgfSwiIFwKLQktLXZ0YWlsICIgICAgICB7IDAsIE5VTEwsIE5VTEwgfVxuICAgIH07XG4gICAgR1R5cGUgZ19kZWZpbmVfdHlwZV9pZCA9IGdfQHR5cGVAX3JlZ2lzdGVyX3N0YXRpYyAoXCJARW51bU5hbWVAXCIsIHZhbHVlcyk7XG4gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSwgZ19kZWZpbmVfdHlwZV9pZCk7XG4gIH1cbiAgcmV0dXJuIGdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlO1xufVxuIiBcCi0JJF4gPiAkQAotCi0jIGEgaGFjayBydWxlIHRvIG1ha2Ugc3VyZSAuUGxvIGZpbGVzIGV4aXN0IGJlY2F1c2UgdGhleSBnZXQgaW5jbHVkZSdkCi0jIGZyb20gTWFrZWZpbGUncwotLmRlcHMvJS1tYXJzaGFsLlBsbzoKLQlAdG91Y2ggJEAKLQotLmRlcHMvJS1lbnVtdHlwZXMuUGxvOgotCUB0b3VjaCAkQApkaWZmIC0tZ2l0IGEvY29tbW9uL2dzdC1hdXRvZ2VuLnNoIGIvY29tbW9uL2dzdC1hdXRvZ2VuLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTA0OWU2Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9nc3QtYXV0b2dlbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0jIGEgc2lsbHkgaGFjayB0aGF0IGdlbmVyYXRlcyBhdXRvcmVnZW4uc2ggYnV0IGl0J3MgaGFuZHkKLSMgUmVtb3ZlIHRoZSBvbGQgYXV0b3JlZ2VuLnNoIGZpcnN0IHRvIGNyZWF0ZSBhIG5ldyBmaWxlLAotIyBhcyB0aGUgY3VycmVudCBvbmUgbWF5IGJlIGJlaW5nIHJlYWQgYnkgdGhlIHNoZWxsIGV4ZWN1dGluZwotIyB0aGlzIHNjcmlwdC4KLWlmIFsgLWYgImF1dG9yZWdlbi5zaCIgXTsgdGhlbgotICBybSBhdXRvcmVnZW4uc2gKLWZpCi1lY2hvICIjIS9iaW4vc2giID4gYXV0b3JlZ2VuLnNoCi1lY2hvICIuL2F1dG9nZW4uc2ggJEAgXCRAIiA+PiBhdXRvcmVnZW4uc2gKLWNobW9kICt4IGF1dG9yZWdlbi5zaAotCi0jIGhlbHBlciBmdW5jdGlvbnMgZm9yIGF1dG9nZW4uc2gKLQotZGVidWcgKCkKLSMgcHJpbnQgb3V0IGEgZGVidWcgbWVzc2FnZSBpZiBERUJVRyBpcyBhIGRlZmluZWQgdmFyaWFibGUKLXsKLSAgaWYgdGVzdCAhIC16ICIkREVCVUciCi0gIHRoZW4KLSAgICBlY2hvICJERUJVRzogJDEiCi0gIGZpCi19Ci0KLQotYXV0b2dlbl9vcHRpb25zICgpCi17Ci0gIGlmIHRlc3QgIngkMSIgPSAieCI7IHRoZW4KLSAgICByZXR1cm4gMAotICBmaQotCi0gIHdoaWxlIHRlc3QgIngkMSIgIT0gIngiIDsgZG8KLSAgICBvcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCi0gICAgY2FzZSAiJDEiIGluCi0gICAgICAtLW5vY29uZmlndXJlKQotICAgICAgICAgIE5PQ09ORklHVVJFPWRlZmluZWQKLQkgIEFVVE9HRU5fRVhUX09QVD0iJEFVVE9HRU5fRVhUX09QVCAtLW5vY29uZmlndXJlIgotICAgICAgICAgIGVjaG8gIisgY29uZmlndXJlIHJ1biBkaXNhYmxlZCIKLSAgICAgICAgICBzaGlmdAotICAgICAgICAgIDs7Ci0gICAgICAtLW5vY2hlY2spCi0JICBBVVRPR0VOX0VYVF9PUFQ9IiRBVVRPR0VOX0VYVF9PUFQgLS1ub2NoZWNrIgotICAgICAgICAgIE5PQ0hFQ0s9ZGVmaW5lZAotICAgICAgICAgIGVjaG8gIisgYXV0b3Rvb2xzIHZlcnNpb24gY2hlY2sgZGlzYWJsZWQiCi0gICAgICAgICAgc2hpZnQKLSAgICAgICAgICA7OwotICAgICAgLWR8LS1kZWJ1ZykKLSAgICAgICAgICBERUJVRz1kZWZpbmVkCi0JICBBVVRPR0VOX0VYVF9PUFQ9IiRBVVRPR0VOX0VYVF9PUFQgLS1kZWJ1ZyIKLSAgICAgICAgICBlY2hvICIrIGRlYnVnIG91dHB1dCBlbmFibGVkIgotICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgOzsKLSAgICAgIC1ofC0taGVscCkKLSAgICAgICAgICBlY2hvICJhdXRvZ2VuLnNoIChhdXRvZ2VuIG9wdGlvbnMpIC0tIChjb25maWd1cmUgb3B0aW9ucykiCi0gICAgICAgICAgZWNobyAiYXV0b2dlbi5zaCBoZWxwIG9wdGlvbnM6ICIKLSAgICAgICAgICBlY2hvICIgLS1ub2NvbmZpZ3VyZSAgICAgICAgICAgIGRvbid0IHJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCIKLSAgICAgICAgICBlY2hvICIgLS1ub2NoZWNrICAgICAgICAgICAgICAgIGRvbid0IGRvIHZlcnNpb24gY2hlY2tzIgotICAgICAgICAgIGVjaG8gIiAtLWRlYnVnICAgICAgICAgICAgICAgICAgZGVidWcgdGhlIGF1dG9nZW4gcHJvY2VzcyIKLSAgICAgICAgICBlY2hvCi0gICAgICAgICAgZWNobyAiIC0td2l0aC1hdXRvY29uZiBQQVRIICAgICB1c2UgYXV0b2NvbmYgaW4gUEFUSCIKLSAgICAgICAgICBlY2hvICIgLS13aXRoLWF1dG9tYWtlIFBBVEggICAgIHVzZSBhdXRvbWFrZSBpbiBQQVRIIgotICAgICAgICAgIGVjaG8KLSAgICAgICAgICBlY2hvICJBbnkgYXJndW1lbnQgZWl0aGVyIG5vdCBpbiB0aGUgYWJvdmUgbGlzdCBvciBhZnRlciBhICctLScgd2lsbCBiZSAiCi0gICAgICAgICAgZWNobyAicGFzc2VkIHRvIC4vY29uZmlndXJlLiIKLQkgIGV4aXQgMQotICAgICAgICAgIDs7Ci0gICAgICAtLXdpdGgtYXV0b21ha2U9KikKLSAgICAgICAgICBBVVRPTUFLRT0kb3B0YXJnCi0gICAgICAgICAgZWNobyAiKyB1c2luZyBhbHRlcm5hdGUgYXV0b21ha2UgaW4gJG9wdGFyZyIKLQkgIENPTkZJR1VSRV9ERUZfT1BUPSIkQ09ORklHVVJFX0RFRl9PUFQgLS13aXRoLWF1dG9tYWtlPSRBVVRPTUFLRSIKLSAgICAgICAgICBzaGlmdAotICAgICAgICAgIDs7Ci0gICAgICAtLXdpdGgtYXV0b2NvbmY9KikKLSAgICAgICAgICBBVVRPQ09ORj0kb3B0YXJnCi0gICAgICAgICAgZWNobyAiKyB1c2luZyBhbHRlcm5hdGUgYXV0b2NvbmYgaW4gJG9wdGFyZyIKLQkgIENPTkZJR1VSRV9ERUZfT1BUPSIkQ09ORklHVVJFX0RFRl9PUFQgLS13aXRoLWF1dG9jb25mPSRBVVRPQ09ORiIKLSAgICAgICAgICBzaGlmdAotICAgICAgICAgIDs7Ci0gICAgICAtLSkgc2hpZnQgOyBicmVhayA7OwotICAgICAgKikKLSAgICAgICAgICBlY2hvICIrIHBhc3NpbmcgYXJndW1lbnQgJDEgdG8gY29uZmlndXJlIgotCSAgQ09ORklHVVJFX0VYVF9PUFQ9IiRDT05GSUdVUkVfRVhUX09QVCAkMSIKLSAgICAgICAgICBzaGlmdAotICAgICAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgZm9yIGFyZyBkbyBDT05GSUdVUkVfRVhUX09QVD0iJENPTkZJR1VSRV9FWFRfT1BUICRhcmciOyBkb25lCi0gIGlmIHRlc3QgISAteiAiJENPTkZJR1VSRV9FWFRfT1BUIgotICB0aGVuCi0gICAgZWNobyAiKyBvcHRpb25zIHBhc3NlZCB0byBjb25maWd1cmU6ICRDT05GSUdVUkVfRVhUX09QVCIKLSAgZmkKLX0KLQotdG9wbGV2ZWxfY2hlY2sgKCkKLXsKLSAgc3JjZmlsZT0kMQotICB0ZXN0IC1mICRzcmNmaWxlIHx8IHsKLSAgICAgICAgZWNobyAiWW91IG11c3QgcnVuIHRoaXMgc2NyaXB0IGluIHRoZSB0b3AtbGV2ZWwgJHBhY2thZ2UgZGlyZWN0b3J5IgotICAgICAgICBleGl0IDEKLSAgfQotfQotCi10b29sX3J1biAoKQotewotICB0b29sPSQxCi0gIG9wdGlvbnM9JDIKLSAgcnVuX2lmX2ZhaWw9JDMKLSAgZWNobyAiKyBydW5uaW5nICR0b29sICRvcHRpb25zLi4uIgotICAkdG9vbCAkb3B0aW9ucyB8fCB7Ci0gICAgZWNobwotICAgIGVjaG8gJHRvb2wgZmFpbGVkCi0gICAgZXZhbCAkcnVuX2lmX2ZhaWwKLSAgICBleGl0IDEKLSAgfQotfQotCi1pbnN0YWxsX2dpdF9ob29rcyAoKQotewotICBpZiB0ZXN0IC1kIC5naXQ7IHRoZW4KLSAgICAjIGluc3RhbGwgcHJlLWNvbW1pdCBob29rIGZvciBkb2luZyBjbGVhbiBjb21taXRzCi0gICAgZm9yIGhvb2sgaW4gcHJlLWNvbW1pdDsgZG8KLSAgICAgIGlmIHRlc3QgISBcKCAteCAuZ2l0L2hvb2tzLyRob29rIC1hIC1MIC5naXQvaG9va3MvJGhvb2sgXCk7IHRoZW4KLSAgICAgICAgZWNobyAiKyBJbnN0YWxsaW5nIGdpdCAkaG9vayBob29rIgotICAgICAgICBybSAtZiAuZ2l0L2hvb2tzLyRob29rCi0gICAgICAgIGxuIC1zIC4uLy4uL2NvbW1vbi9ob29rcy8kaG9vay5ob29rIC5naXQvaG9va3MvJGhvb2sgfHwgewotICAgICAgICAgICMgaWYgd2UgY291bGRuJ3QgY3JlYXRlIGEgc3ltYm9saWMgbGluaywgdHJ5IGRvaW5nIGEgcGxhaW4gY3AKLSAgICAgICAgICBpZiBjcCBjb21tb24vaG9va3MvcHJlLWNvbW1pdC5ob29rIC5naXQvaG9va3MvcHJlLWNvbW1pdDsgdGhlbgotICAgICAgICAgICAgY2htb2QgK3ggLmdpdC9ob29rcy9wcmUtY29tbWl0OwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8gIioqKioqKioqKiogQ291bGRuJ3QgaW5zdGFsbCBnaXQgJGhvb2sgaG9vayAqKioqKioqKioqIjsKLSAgICAgICAgICBmaQotICAgICAgICB9Ci0gICAgICBmaQotICAgIGRvbmUKLSAgZmkKLX0KZGlmZiAtLWdpdCBhL2NvbW1vbi9nc3QtZ2xpYi1nZW4ubWFrIGIvY29tbW9uL2dzdC1nbGliLWdlbi5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGE1ZTkuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2dzdC1nbGliLWdlbi5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIHRoZXNlIGFyZSB0aGUgdmFyaWFibGVzIHlvdXIgTWFrZWZpbGUuYW0gc2hvdWxkIHNldAotIyB0aGUgZXhhbXBsZSBpcyBiYXNlZCBvbiB0aGUgY29sb3JiYWxhbmNlIGludGVyZmFjZQotCi0jZ2xpYl9lbnVtX2hlYWRlcnM9JChjb2xvcmJhbGFuY2VfaGVhZGVycykKLSNnbGliX2VudW1fZGVmaW5lPUdTVF9DT0xPUl9CQUxBTkNFCi0jZ2xpYl9nZW5fcHJlZml4PWdzdF9jb2xvcl9iYWxhbmNlCi0jZ2xpYl9nZW5fYmFzZW5hbWU9Y29sb3JiYWxhbmNlCi0KLWVudW1faGVhZGVycz0kKGZvcmVhY2ggaCwkKGdsaWJfZW51bV9oZWFkZXJzKSxcblwjaW5jbHVkZSBcIiQoaClcIikKLQotIyB0aGVzZSBhcmUgYWxsIHRoZSBydWxlcyBnZW5lcmF0aW5nIHRoZSByZWxldmFudCBmaWxlcwotJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5oOiAkKGdsaWJfZ2VuX2Jhc2VuYW1lKS1tYXJzaGFsLmxpc3QKLQkkKEFNX1ZfR0VOKSQoR0xJQl9HRU5NQVJTSEFMKSAtLWhlYWRlciAtLXByZWZpeD0kKGdsaWJfZ2VuX3ByZWZpeClfbWFyc2hhbCAkXiA+ICQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuaC50bXAgJiYgXAotCW12ICQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuaC50bXAgJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5oCi0KLSQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuYzogJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5saXN0Ci0JJChBTV9WX0dFTillY2hvICIjaW5jbHVkZSBcIiQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuaFwiIiA+PiAkKGdsaWJfZ2VuX2Jhc2VuYW1lKS1tYXJzaGFsLmMudG1wICYmIFwKLQkkKEdMSUJfR0VOTUFSU0hBTCkgLS1ib2R5IC0tcHJlZml4PSQoZ2xpYl9nZW5fcHJlZml4KV9tYXJzaGFsICReID4+ICQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuYy50bXAgJiYgXAotCW12ICQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuYy50bXAgJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5jCi0KLSQoZ2xpYl9nZW5fYmFzZW5hbWUpLWVudW10eXBlcy5oOiAkKGdsaWJfZW51bV9oZWFkZXJzKQotCSQoQU1fVl9HRU4pJChHTElCX01LRU5VTVMpIFwKLQktLWZoZWFkICIjaWZuZGVmIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfX1xuI2RlZmluZSBfXyQoZ2xpYl9lbnVtX2RlZmluZSlfRU5VTV9UWVBFU19IX19cblxuI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+XG5cbkdfQkVHSU5fREVDTFNcbiIgXAotCS0tZnByb2QgIlxuLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi9cbiIgXAotCS0tdmhlYWQgIkdUeXBlIEBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKTtcbiNkZWZpbmUgR1NUX1RZUEVfQEVOVU1TSE9SVEAgKEBlbnVtX25hbWVAX2dldF90eXBlKCkpXG4iICAgICAgICAgXAotCS0tZnRhaWwgIkdfRU5EX0RFQ0xTXG5cbiNlbmRpZiAvKiBfXyQoZ2xpYl9lbnVtX2RlZmluZSlfRU5VTV9UWVBFU19IX18gKi8iIFwKLQkkXiA+ICRACi0KLSQoZ2xpYl9nZW5fYmFzZW5hbWUpLWVudW10eXBlcy5jOiAkKGdsaWJfZW51bV9oZWFkZXJzKQotCUBpZiB0ZXN0ICJ4JChnbGliX2VudW1faGVhZGVycykiID0gIngiOyB0aGVuIGVjaG8gIkVSUk9SOiBnbGliX2VudW1faGVhZGVycyBpcyBlbXB0eSwgcGxlYXNlIGZpeCBNYWtlZmlsZSI7IGV4aXQgMTsgZmkKLQkkKEFNX1ZfR0VOKSQoR0xJQl9NS0VOVU1TKSBcCi0JLS1maGVhZCAiI2luY2x1ZGUgXCIkKGdsaWJfZ2VuX2Jhc2VuYW1lKS1lbnVtdHlwZXMuaFwiXG4kKGVudW1faGVhZGVycykiIFwKLQktLWZwcm9kICJcbi8qIGVudW1lcmF0aW9ucyBmcm9tIFwiQGZpbGVuYW1lQFwiICovIiBcCi0JLS12aGVhZCAiR1R5cGVcbkBlbnVtX25hbWVAX2dldF90eXBlICh2b2lkKVxue1xuICBzdGF0aWMgdm9sYXRpbGUgZ3NpemUgZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGUgPSAwO1xuICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSkpIHtcbiAgICBzdGF0aWMgY29uc3QgR0BUeXBlQFZhbHVlIHZhbHVlc1tdID0geyIgICAgIFwKLQktLXZwcm9kICIgICAgICB7IEBWQUxVRU5BTUVALCBcIkBWQUxVRU5BTUVAXCIsIFwiQHZhbHVlbmlja0BcIiB9LCIgXAotCS0tdnRhaWwgIiAgICAgIHsgMCwgTlVMTCwgTlVMTCB9XG4gICAgfTtcbiAgICBHVHlwZSBnX2RlZmluZV90eXBlX2lkID0gZ19AdHlwZUBfcmVnaXN0ZXJfc3RhdGljIChcIkBFbnVtTmFtZUBcIiwgdmFsdWVzKTtcbiAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJmdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlLCBnX2RlZmluZV90eXBlX2lkKTtcbiAgfVxuICByZXR1cm4gZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGU7XG59XG4iIFwKLQkkXiA+ICRACi0KLSMgYSBoYWNrIHJ1bGUgdG8gbWFrZSBzdXJlIC5QbG8gZmlsZXMgZXhpc3QgYmVjYXVzZSB0aGV5IGdldCBpbmNsdWRlJ2QKLSMgZnJvbSBNYWtlZmlsZSdzCi0uZGVwcy8lLW1hcnNoYWwuUGxvOgotCUB0b3VjaCAkQAotCi0uZGVwcy8lLWVudW10eXBlcy5QbG86Ci0JQHRvdWNoICRACmRpZmYgLS1naXQgYS9jb21tb24vZ3N0LWluZGVudCBiL2NvbW1vbi9nc3QtaW5kZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNWU4MDhmLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9nc3QtaW5kZW50CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIENoZWNrIHRoYXQgdGhlIGNvZGUgZm9sbG93cyBhIGNvbnNpc3RhbnQgY29kZSBzdHlsZQotIwotCi0jIENoZWNrIGZvciBleGlzdGVuY2Ugb2YgaW5kZW50LCBhbmQgZXJyb3Igb3V0IGlmIG5vdCBwcmVzZW50LgotIyBPbiBzb21lICpic2Qgc3lzdGVtcyB0aGUgYmluYXJ5IHNlZW1zIHRvIGJlIGNhbGxlZCBnbnVuaW5kZW50LAotIyBzbyBjaGVjayBmb3IgdGhhdCBmaXJzdC4KLQotdmVyc2lvbj1gZ251aW5kZW50IC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKLWlmIHRlc3QgIngkdmVyc2lvbiIgPSAieCI7IHRoZW4KLSAgdmVyc2lvbj1gZ2luZGVudCAtLXZlcnNpb24gMj4vZGV2L251bGxgCi0gIGlmIHRlc3QgIngkdmVyc2lvbiIgPSAieCI7IHRoZW4KLSAgICB2ZXJzaW9uPWBpbmRlbnQgLS12ZXJzaW9uIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgIngkdmVyc2lvbiIgPSAieCI7IHRoZW4KLSAgICAgIGVjaG8gIkdTdHJlYW1lciBnaXQgcHJlLWNvbW1pdCBob29rOiIKLSAgICAgIGVjaG8gIkRpZCBub3QgZmluZCBHTlUgaW5kZW50LCBwbGVhc2UgaW5zdGFsbCBpdCBiZWZvcmUgY29udGludWluZy4iCi0gICAgICBleGl0IDEKLSAgICBlbHNlCi0gICAgICBJTkRFTlQ9aW5kZW50Ci0gICAgZmkKLSAgZWxzZQotICAgIElOREVOVD1naW5kZW50Ci0gIGZpCi1lbHNlCi0gIElOREVOVD1nbnVpbmRlbnQKLWZpCi0KLWNhc2UgYCRJTkRFTlQgLS12ZXJzaW9uYCBpbgotICBHTlUqKQotICAgICAgOzsKLSAgZGVmYXVsdCkKLSAgICAgIGVjaG8gIkdTdHJlYW1lciBnaXQgcHJlLWNvbW1pdCBob29rOiIKLSAgICAgIGVjaG8gIkRpZCBub3QgZmluZCBHTlUgaW5kZW50LCBwbGVhc2UgaW5zdGFsbCBpdCBiZWZvcmUgY29udGludWluZy4iCi0gICAgICBlY2hvICIoRm91bmQgJElOREVOVCwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBHTlUgaW5kZW50KSIKLSAgICAgIGV4aXQgMQotICAgICAgOzsKLWVzYWMKLQotSU5ERU5UX1BBUkFNRVRFUlM9Ii0tYnJhY2VzLW9uLWlmLWxpbmUgXAotCS0tY2FzZS1icmFjZS1pbmRlbnRhdGlvbjAgXAotCS0tY2FzZS1pbmRlbnRhdGlvbjIgXAotCS0tYnJhY2VzLWFmdGVyLXN0cnVjdC1kZWNsLWxpbmUgXAotCS0tbGluZS1sZW5ndGg4MCBcCi0JLS1uby10YWJzIFwKLQktLWN1ZGRsZS1lbHNlIFwKLQktLWRvbnQtbGluZS11cC1wYXJlbnRoZXNlcyBcCi0JLS1jb250aW51YXRpb24taW5kZW50YXRpb240IFwKLQktLWhvbm91ci1uZXdsaW5lcyBcCi0JLS10YWItc2l6ZTggXAotCS0taW5kZW50LWxldmVsMiBcCi0JLS1sZWF2ZS1wcmVwcm9jZXNzb3Itc3BhY2UiCi0KLSRJTkRFTlQgJHtJTkRFTlRfUEFSQU1FVEVSU30gJEAKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2dzdC5zdXBwIGIvY29tbW9uL2dzdC5zdXBwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODVjZDY5Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9nc3Quc3VwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwMjcgKzAsMCBAQAotIyMjIHRoaXMgZmlsZSBjb250YWlucyBzdXBwcmVzc2lvbnMgZm9yIHZhbGdyaW5kIHdoZW4gcnVubmluZwotIyMjIHRoZSBnc3RyZWFtZXIgdW5pdCB0ZXN0cwotIyMjIGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Igd2lkZXIgdXNlIGFzIHdlbGwKLQotIyMjIHN5c2NhbGwgc3VwcHJlc3Npb25zCi0KLXsKLSAgIDxjbG9uZSBvbiBXaW0ncyBEZWJpYW4+Ci0gICBNZW1jaGVjazpQYXJhbQotICAgY2xvbmUocGFyZW50X3RpZHB0cikKLSAgIGZ1bjpjbG9uZQotICAgZnVuOmNsb25lCi19Ci0KLXsKLSAgIDxjbG9uZSBvbiBXaW0ncyBEZWJpYW4+Ci0gICBNZW1jaGVjazpQYXJhbQotICAgY2xvbmUoY2hpbGRfdGlkcHRyKQotICAgZnVuOmNsb25lCi0gICBmdW46Y2xvbmUKLX0KLQotewotICAgPGNsb25lIG9uIFdpbSdzIERlYmlhbj4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBjbG9uZSh0bHNpbmZvKQotICAgZnVuOmNsb25lCi0gICBmdW46Y2xvbmUKLX0KLQotIyMjIGdsaWJjIHN1cHByZXNzaW9ucwotCi17Ci0gICA8Y29uZGl0aW9uYWwganVtcCBvbiB3aW0ncyBkZWJpYW4gMi8yLzA2PgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuKi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIG9iajovbGliL2xkLTIuKi5zbwotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotfQotCi17Ci0gICA8Q29uZGl0aW9uYWwganVtcD4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpzdHJsZW4KLSAgIGZ1bjpmaWxsaW5fcnBhdGgKLSAgIGZ1bjpfZGxfaW5pdF9wYXRocwotICAgZnVuOmRsX21haW4KLSAgIGZ1bjpfZGxfc3lzZGVwX3N0YXJ0Ci0gICBmdW46X2RsX3N0YXJ0Ci0gICBvYmo6L2xpYjY0L2xkLTIuKi5zbwotICAgb2JqOioKLSAgIG9iajoqCi19Ci0KLXsKLSAgIDxDb25kaXRpb25hbCBqdW1wPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotfQotCi17Ci0gICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Ci19Ci0KLSMgZ2xpYmMgZG9lcyBub3QgZGVhbGxvY2F0ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZQotCi17Ci0gICA8dGxzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKLSAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAKgotfQotCi17Ci0gICA8dGxzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmFsbG9jYXRlX2R0dgotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHMKLX0KLQotIyBJIGdldCBhbiBleHRyYSBzdGFjayBlbnRyeSBvbiB4ODYvZGFwcGVyCi17Ci0gICA8dGxzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCi0gICBmdW46cHRocmVhZF9jcmVhdGVAQCoKLX0KLQotCi17Ci0gICA8cHRocmVhZCBzdHJzdHI+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46c3Ryc3RyCi0gICBmdW46X19wdGhyZWFkX2luaXRpYWxpemVfbWluaW1hbAotICAgb2JqOi9saWIvbGlicHRocmVhZC0qLnNvCi0gICBvYmo6L2xpYi9saWJwdGhyZWFkLSouc28KLSAgIGZ1bjpjYWxsX2luaXQKLSAgIGZ1bjpfZGxfaW5pdAotICAgb2JqOi9saWIvbGQtKi5zbwotfQotCi0jIGEgdGhyZWFkLXJlbGF0ZWQgZnJlZSBwcm9ibGVtIGluIGdsaWJjIGZyb20gRWRnYXJkCi17Ci0gICBfX2xpYmNfZnJlZXJlc19yd19hY2VzcwotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajoqCi0gICBvYmo6KgotICAgb2JqOioKLSAgIG9iajoqCi0gICBvYmo6KgotICAgZnVuOl9fbGliY19mcmVlcmVzCi19Ci0KLXsKLSAgIDxhIGNvbmRpdGlvbmFsIGp1bXAgb24gd2ltJ3MgZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi19Ci0KLSMgZ19tb2R1bGVfb3Blbi1yZWxhdGVkIHByb2JsZW1zCi17Ci0gICA8c3RhcnRlZCBzaG93aW5nIHVwIG9uIGZjNC1xdWljaz4KLSAgIE1lbWNoZWNrOkFkZHIyCi0gICBmdW46bWVtY3B5Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9maWxlCi0gICBmdW46Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbAotICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKLSAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsCi0gICBmdW46aW5pdF9wb3N0Ci0gICBmdW46Z19vcHRpb25fY29udGV4dF9wYXJzZQotICAgZnVuOmdzdF9pbml0X2NoZWNrCi0gICBmdW46Z3N0X2luaXQKLSAgIGZ1bjpnc3RfY2hlY2tfaW5pdAotICAgZnVuOm1haW4KLX0KLQotewotICAgPHN0YXJ0ZWQgc2hvd2luZyB1cCBvbiBmYzQtcXVpY2s+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgZnVuOm1lbWNweQotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotICAgZnVuOmdzdF9yZWdpc3RyeV9zY2FuX3BhdGhfbGV2ZWwKLSAgIGZ1bjpnc3RfcmVnaXN0cnlfc2Nhbl9wYXRoX2xldmVsCi0gICBmdW46Z3N0X3JlZ2lzdHJ5X3NjYW5fcGF0aF9sZXZlbAotICAgZnVuOmluaXRfcG9zdAotICAgZnVuOmdfb3B0aW9uX2NvbnRleHRfcGFyc2UKLSAgIGZ1bjpnc3RfaW5pdF9jaGVjawotICAgZnVuOmdzdF9pbml0Ci0gICBmdW46Z3N0X2NoZWNrX2luaXQKLSAgIGZ1bjptYWluCi19Ci0KLXsKLSAgIDxnX21vZHVsZV9vcGVuIG9uIHdpbSdzIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpkb19zeW0KLSAgIGZ1bjpfZGxfc3ltCi0gICBmdW46ZGxzeW1fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbHN5bQotICAgZnVuOmdfbW9kdWxlX3N5bWJvbAotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotfQotCi17Ci0gICA8Z19tb2R1bGVfb3BlbiBvbiB3aW0ncyBkZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotfQotewotICAgPGdfbW9kdWxlX29wZW4gb24gd2ltJ3MgZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9maWxlCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkX2J5X25hbWUKLSAgIGZ1bjpnc3RfcGx1Z2luX2ZlYXR1cmVfbG9hZAotfQotCi17Ci0gICA8bGVhayBvbiB3aW0ncyBkZWJpYW4gaW4gZ19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvbiB3aW0ncyBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsZXJyb3JfcnVuCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuIC0gMjAwNi0wMi0wMj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvbiB3aW0ncyBkZWJpYW4gLSAyMDA2LTAyLTAyPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb24gd2ltJ3MgZGViaWFuIC0gMjAwNi0wMi0wMj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46ZG9fc3ltCi0gICBmdW46X2RsX3N5bQotICAgZnVuOmRsc3ltX2RvaXQKLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxzeW0KLSAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxmdXRleCBvbiBBbmR5J3MgNjQtYml0IHVidW50dT4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBmdXRleCh1YWRkcjIpCi0gICBmdW46cHRocmVhZF9vbmNlCi0gICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCi0gICBmdW46bWJzbnJ0b3djcwotICAgZnVuOnZmcHJpbnRmCi0gICBmdW46dnNwcmludGYKLSAgIGZ1bjpzcHJpbnRmCi0gICBvYmo6L2xpYi9saWJjLTIuMy4qLnNvCi0gICBmdW46dG1wZmlsZQotICAgZnVuOnNldHVwX3BpcGUKLSAgIGZ1bjpzZXR1cF9tZXNzYWdpbmdfd2l0aF9rZXkKLSAgIGZ1bjpzZXR1cF9tZXNzYWdpbmcKLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOl9kbF9zeW0KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsc3ltCi0gICBmdW46Z19tb2R1bGVfc3ltYm9sCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOmljb252X29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOmljb252X29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gVWJ1bnR5IEhhcmR5IDY0LWJpdD4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgZnVuOmljb252X29wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gVWJ1bnR5IEhhcmR5IDY0LWJpdD4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIGZ1bjppY29udl9vcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBVYnVudHkgSGFyZHkgNjQtYml0PgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLX0KLQotewotICAgPHN1cHByZXNzaW9uIGZvciBnbGliYyAyLjcgb24gZGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8c3VwcHJlc3Npb24gZm9yIGdsaWJjIDIuNyBvbiBkZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi19Ci0KLXsKLSAgIDxzdXBwcmVzc2lvbiBmb3IgZ2xpYmMgMi43IG9uIGRlYmlhbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotfQotCi0jIHN1cHByZXNzaW9uIGZvciBhIGdsaWJjIGJ1ZzoKLSMgaHR0cDovL3ZhbGdyaW5kLm9yZy9kb2NzL21hbnVhbC9mYXEuaHRtbCNmYXEuZXhpdF9lcnJvcnM+Ci17Ci0gICA8V29ya2Fyb3VuZCBmb3IgYSBnbGliYyBidWc+Ci0gICBNZW1jaGVjazpGcmVlCi0gICBmdW46ZnJlZQotICAgb2JqOipsaWJjLSouc28KLSAgIGZ1bjpfX2xpYmNfZnJlZXJlcwotICAgZnVuOioKLSAgIGZ1bjpfRXhpdAotfQotCi0jIHNhbWUgYXMgYWJvdmUsIGp1c3Qgc28gaXQgd29ya3MgZm9yIHRwbSBvbiBndXRzeS94ODYtNjQKLXsKLSAgIDx3b3JrYXJvdW5kIGdsaWJjIGJ1ZyBvbiBndXRzeSB4ODYtNjQ+Ci0gICBNZW1jaGVjazpGcmVlCi0gICBmdW46ZnJlZQotICAgZnVuOmZyZWVfbWVtCi0gICBmdW46X19saWJjX2ZyZWVyZXMKLX0KLQotIyB2YWxncmluZCBkb2Vzbid0IGFsbG93IG1lIHRvIHNwZWNpZnkgYSBzdXBwcmVzc2lvbiBmb3IgQWRkcjEsIEFkZHIyLCBBZGRyNAotIyBhcyBBZGRyKiwgc28gMyBjb3BpZXMgZm9yIHRoYXQ7IGFuZCB0aGVuIDIgb2YgZWFjaCBmb3IgdGhhdCBwZXNreSBtZW1jcHkKLXsKLSAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KLSAgIE1lbWNoZWNrOkFkZHIxCi0gICBmdW46X2RsX3NpZ25hbF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPEludmFsaWQgcmVhZCBvZiBzaXplIDEsIDIsIDQgb24gdGhvbWFzJ3MgRkM0PgotICAgTWVtY2hlY2s6QWRkcjIKLSAgIGZ1bjpfZGxfc2lnbmFsX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotewotICAgPEludmFsaWQgcmVhZCBvZiBzaXplIDEsIDIsIDQgb24gdGhvbWFzJ3MgRkM0PgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIGZ1bjpfZGxfc2lnbmFsX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4xCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8SW52YWxpZCByZWFkIG9mIHNpemUgMSwgMiwgNCBvbiB0aG9tYXMncyBGQzQ+Ci0gICBNZW1jaGVjazpBZGRyMQotICAgZnVuOm1lbWNweQotICAgZnVuOl9kbF9zaWduYWxfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjEKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KLSAgIE1lbWNoZWNrOkFkZHIyCi0gICBmdW46bWVtY3B5Ci0gICBmdW46X2RsX3NpZ25hbF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLXsKLSAgIDxJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxLCAyLCA0IG9uIHRob21hcydzIEZDND4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBmdW46bWVtY3B5Ci0gICBmdW46X2RsX3NpZ25hbF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPEFkZHI4IG9uIEFuZHkncyBBTUQ2NCB1YnVudHUgaW4gZGxfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGliYy0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfb3BlbgotICAgb2JqOi9saWIvbGliZGwtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi19Ci0KLXsKLSAgIDxDb25kaXRpb25hbCBqdW1wIG9uIEFuZHkncyBBTUQ2NCB1YnVudHU+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjMuKi5zbwotICAgb2JqOi9saWIvbGliYy0yLjMuKi5zbwotICAgb2JqOi9saWIvbGQtMi4zLiouc28KLSAgIGZ1bjpfZGxfb3BlbgotICAgb2JqOi9saWIvbGliZGwtMi4zLiouc28KLSAgIG9iajovbGliL2xkLTIuMy4qLnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjMuKi5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfZmlsZQotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF9ieV9uYW1lCi0gICBmdW46Z3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQKLX0KLQotewotICAgPE1pa2UncyB4ODYgZGFwcGVyPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8TWlrZSdzIHg4NiBkYXBwZXI+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbwotICAgZnVuOmRsb3BlbgotfQotCi17Ci0gICA8QW5vdGhlciBkYXBwZXIgb25lPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLjYuc28KLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgZnVuOl9kbF9vcGVuCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjMuNi5zbwotICAgZnVuOmRsb3BlbgotfQotCi0jIyMgZ2xpYiBzdXBwcmVzc2lvbnMKLXsKLSAgIDxnX3BhcnNlX2RlYnVnX3N0cmluZz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpnX3BhcnNlX2RlYnVnX3N0cmluZwotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MwCi19Ci0KLXsKLSAgIDxnX3R5cGVfaW5pdCBsZWFrcz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfdHlwZV9pbml0KgotICAgZnVuOmluaXRfcHJlKgotfQotCi17Ci0gICA8Z190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsIGxlYWtzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46Z190eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsCi19Ci0KLXsKLSAgIDxnbGliIDIuMjEgc3RhdGljIHR5cGUgZGF0YT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpyZWFsbG9jCi0gICBmdW46Z19yZWFsbG9jCi0gICBmdW46dHlwZV9ub2RlX2FueV9uZXdfVwotfQotCi17Ci0gICA8Z2xpYiAyLjIxIHN0YXRpYyB0eXBlIGRhdGE+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46cmVhbGxvYwotICAgZnVuOmdfcmVhbGxvYwotICAgZnVuOnR5cGVfbm9kZV9hbnlfbmV3X1cKLX0KLQotewotICAgPGdsaWIgMi4yMSBzdGF0aWMgdHlwZSBkYXRhPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLX0KLQotewotICAgPGdsaWIgMi4yMSBzdGF0aWMgdHlwZSBkYXRhPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnJlYWxsb2MKLSAgIGZ1bjpnX3JlYWxsb2MKLSAgIGZ1bjp0eXBlX2FkZF9mbGFnc19XCi19Ci0KLXsKLSAgIDxnbGliIDIuMjEgc3RhdGljIHR5cGUgZGF0YT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjp0eXBlX2FkZF9mbGFnc19XCi19Ci0KLSNwdGhyZWFkIG1lbWxlYWtzCi0KLXsKLSAgIFRocmVhZCBjcmVhdGlvbiBsZWFrCi0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46YWxsb2NhdGVfZHR2Ci0gICBmdW46X2RsX2FsbG9jYXRlKgotICAgZnVuOl9kbF9hbGxvY2F0ZSoKLSAgIGZ1bjpfX3B0aHJlYWRfaW5pdGlhbGl6ZV9taW5pbWFsCi19Ci0KLXsKLSAgIFRocmVhZCBtYW5hZ2VtZW50IGxlYWsKLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjphbGxvY2F0ZV9kdHYKLSAgIGZ1bjpfZGxfYWxsb2NhdGUqCi0gICBmdW46X2RsX2FsbG9jYXRlKgotICAgZnVuOl9fcHRocmVhZF8qCi19Ci0KLXsKLSAgIFRocmVhZCBtYW5hZ2VtZW50IGxlYWsgMgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1lbWFsaWduCi0gICBmdW46X2RsX2FsbG9jYXRlKgotICAgZnVuOl9kbF9hbGxvY2F0ZSoKLSAgIGZ1bjpfX3B0aHJlYWRfKgotfQotCi17Ci0gICBwdGhyZWFkX2NyZWF0ZSBTeXNjYWxsIHBhcmFtIHdyaXRlKGJ1ZikgcG9pbnRzIHRvIHVuaW5pdGlhbGlzZWQgYnl0ZShzKQotICAgTWVtY2hlY2s6UGFyYW0KLSAgIHdyaXRlKGJ1ZikKLSAgIGZ1bjpwdGhyZWFkX2NyZWF0ZUBAR0xJQkNfMi4yLjUKLSAgIGZ1bjpnX3RocmVhZF9jcmVhdGUqCi0KLX0KLQotIyBuc3NfcGFyc2VfKiBtZW1sZWFrICh1c2VkIGJ5IGdfb3B0aW9uX2NvbnRleHRfcGFyc2UpCi17Ci0gICBuc3NfcGFyc2VfKiBtZW1sZWFrCi0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46bnNzX3BhcnNlX3NlcnZpY2VfbGlzdAotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotfQotCi0jIGxpYm9pbCBzdXBwcmVzc2lvbnMKLXsKLSAgIDxsaWJvaWwgY3B1X2ZhdWx0X2NoZWNrX3RyeT4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgb2JqOi91c3IvbGliL2xpYm9pbC0wLjMuc28uMC4xLjAKLSAgIG9iajovdXNyL2xpYi9saWJvaWwtMC4zLnNvLjAuMS4wCi0gICBvYmo6L3Vzci9saWIvbGlib2lsLTAuMy5zby4wLjEuMAotICAgZnVuOm9pbF9jcHVfZmF1bHRfY2hlY2tfdHJ5Ci0gICBmdW46b2lsX3Rlc3RfY2hlY2tfaW1wbAotICAgZnVuOm9pbF9jbGFzc19vcHRpbWl6ZQotICAgZnVuOm9pbF9vcHRpbWl6ZV9hbGwKLSAgIGZ1bjpvaWxfaW5pdAotfQotCi17Ci0gICA8YW5ub3lpbmcgcmVhZCBlcnJvciBpbnNpZGUgZGxvcGVuIHN0dWZmIG9uIFVidW50dSBEYXBwZXIgeDg2XzY0PgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi19Ci0KLXsKLSAgIDxVYnVudHUgRGFwcGVyIHg4Nl82ND4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBmdXRleCh1YWRkcjIpCi0gICBmdW46cHRocmVhZF9vbmNlCi0gICBvYmo6L2xpYi9saWJjLTIuMy42LnNvCi0gICBvYmo6L2xpYi9saWJjLTIuMy42LnNvCi0gICBmdW46c2V0bG9jYWxlCi0gICBmdW46aW5pdF9wcmUKLSAgIGZ1bjpnX29wdGlvbl9jb250ZXh0X3BhcnNlCi0gICBmdW46Z3N0X2luaXRfY2hlY2sKLSAgIGZ1bjpnc3RfaW5pdAotICAgZnVuOmdzdF9jaGVja19pbml0Ci0gICBmdW46bWFpbgotfQotCi17Ci0gICA8VWJ1bnR1IERhcHBlciB4ODZfNjQgZGxvcGVuIHN0dWZmIGFnYWluPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi4zLjYuc28KLSAgIG9iajovbGliL2xkLTIuMy42LnNvCi0gICBmdW46X2RsX29wZW4KLSAgIG9iajovbGliL2xpYmRsLTIuMy42LnNvCi0gICBvYmo6L2xpYi9sZC0yLjMuNi5zbwotICAgb2JqOi9saWIvbGliZGwtMi4zLjYuc28KLSAgIGZ1bjpkbG9wZW4KLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkX2ZpbGUKLX0KLSMgdGhpcyBleGlzdHMgaW4gYSBidW5jaCBvZiBkaWZmZXJlbnQgdmFyaWF0aW9ucywgaGVuY2UgdGhlIHNob3J0IHRhaWwvdHJhY2UKLXsKLSAgIDxkbG9wZW4gaW52YWxpZCByZWFkIG9mIHNpemUgNCBzdXBwcmVzc2lvbiBvbiB0cG0ncyBVYnVudHUgZWRneS94ODY+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLX0KLXsKLSAgIDxhbmQgdGhlIHNhbWUgZm9yIDY0Yml0IHN5c3RlbXM+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLX0KLQotIyBNb3JlIGVkZ3kgc3VwcHJlc3Npb25zIChNaWtlKQotewotICAgPGRsb3BlbiBDb25kaXRpb24ganVtcCBzdXBwcmVzc2lvbnMgZm9yIFVidW50dSBFZGd5L3g4Nj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotfQotCi17Ci0gICA8ZGxvcGVuIENvbmRpdGlvbiBqdW1wIHN1cHByZXNzaW9ucyBmb3IgVWJ1bnR1IEVkZ3kveDg2PgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMQotfQotCi17Ci0gICA8ZGxvcGVuIENvbmRpdGlvbiBqdW1wIHN1cHByZXNzaW9ucyBmb3IgVWJ1bnR1IEVkZ3kveDg2PgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgZnVuOmRvX3N5bQotICAgZnVuOl9kbF9zeW0KLX0KLQotIyBUaGlzIG9uZSdzIG92ZXJseSBnZW5lcmFsLCBidXQgdGhlcmUncyB6ZXJvIG90aGVyIGluZm9ybWF0aW9uIGluIHRoZSBzdGFjawotIyB0cmFjZSAtIGp1c3QgdGhlc2UgZml2ZSBsaW5lcyEKLXsKLSAgIDxkbG9wZW4gQ29uZGl0aW9uIGp1bXAgc3VwcHJlc3Npb25zIGZvciBVYnVudHUgRWRneS94ODY+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBvYmo6L2xpYi9sZC0yLjQuc28KLSAgIG9iajovbGliL2xkLTIuNC5zbwotfQotCi17Ci0gICA8dGxzIGxlYWtzIG9uIEVkZ3kveDg2PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgb2JqOi9saWIvbGQtMi40LnNvCi0gICBmdW46X2RsX2FsbG9jYXRlX3RscwotICAgZnVuOnB0aHJlYWRfY3JlYXRlQEBHTElCQ18yLjEKLX0KLQotIyBUTFMgbGVha3MgZm9yIGZlaXN0eS94ODYKLXsKLSAgIDx0bHMgbGVha3Mgb24gRmVpc3R5L3g4Nj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjphbGxvY2F0ZV9kdHYKLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzCi0gICBmdW46cHRocmVhZF9jcmVhdGVAQEdMSUJDXzIuMQotfQotCi17Ci0gICA8bGliY2RpbyAwLjc2IGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBvYmo6L3Vzci9saWIvbGliY2Rpby5zby42LjAuMQotICAgZnVuOmNkaW9fb3Blbl9hbV9saW51eAotICAgb2JqOi91c3IvbGliL2xpYmNkaW8uc28uNi4wLjEKLSAgIGZ1bjpjZGlvX29wZW5fYW0KLX0KLQotewotICAgPEFkZHI4IG9uIEphbidzIEFNRDY0IHVidW50dSBGZWlzdHkgaW4gZGxfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjUuc28KLX0KLQotewotICAgPEZpcnN0IG9mIG1hbnkgQWxzYSBlcnJvcnM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46c25kX3BjbV9kaXJlY3Rfc2htX2NyZWF0ZV9vcl9jb25uZWN0Ci0gICBmdW46c25kX3BjbV9kc25vb3Bfb3BlbgotICAgZnVuOl9zbmRfcGNtX2Rzbm9vcF9vcGVuCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBmdW46c25kX3BjbV9vcGVuX3NsYXZlCi0gICBmdW46X3NuZF9wY21fcGx1Z19vcGVuCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBmdW46c25kX3BjbV9vcGVuX3NsYXZlCi0gICBmdW46X3NuZF9wY21fYXN5bV9vcGVuCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi19Ci0KLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOnNuZCpfcGNtX2h3X3BhcmFtX3NldF9uZWFyCi19Ci0KLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6Q29uZAotICAgLi4uCi0gICBmdW46c25kKl9wY21faHdfcGFyYW1fc2V0X25lYXIKLX0KLQotewotICAgPGFsc2EgZXJyb3I+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBvYmo6LypsaWIvbGliYXNvdW5kLnNvLjIuMC4wCi0gICBmdW46c25kX3BjbV9jbG9zZQotICAgb2JqOi8qbGliL2xpYmFzb3VuZC5zby4yLjAuMAotfQotewotICAgPGFsc2EgZXJyb3I+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46c25kX3BjbV9kaXJlY3Rfc2htX2NyZWF0ZV9vcl9jb25uZWN0Ci0gICBmdW46c25kX3BjbV9kbWl4X29wZW4KLSAgIGZ1bjpfc25kX3BjbV9kbWl4X29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9zb2Z0dm9sX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9wbHVnX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9hc3ltX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLX0KLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnN0cmR1cAotICAgZnVuOnNuZF9kbG9ial9jYWNoZV9hZGQKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpzbmRfcGNtX2Rzbm9vcF9vcGVuCi0gICBmdW46X3NuZF9wY21fZHNub29wX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9wbHVnX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIGZ1bjpzbmRfcGNtX29wZW5fc2xhdmUKLSAgIGZ1bjpfc25kX3BjbV9hc3ltX29wZW4KLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLSAgIG9iajovKmxpYi9saWJhc291bmQuc28uMi4wLjAKLX0KLSMgQ2F0Y2ggYWJvdXQgMTUgdmFyaWF0aW9ucyBvbiBpbnNlcnRpbmcgaW5mbyBpbnRvIGFuIEFMU0EKLSMgaW50ZXJuYWwgY2FjaGUKLXsKLSAgIDxhbHNhIGVycm9yPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgLi4uCi0gICBmdW46c25kKl9kbG9ial9jYWNoZV9hZGQKLSAgIG9iajovKmxpYiovbGliYXNvdW5kLnNvLjIuMC4wCi19Ci0KLXsKLSAgIDxhbHNhIGxlYWsgaW4gbG9hZGluZyBjb25maWd1cmF0aW9uPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46c25kX3BjbV9vcGVuX2NvbmYKLX0KLQotewotICAgPGFsc2EgbGVhayBzbmRfY29uZmlnX2hvb2tfbG9hZD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIG9iajovKmxpYiovbGliYXNvdW5kLnNvLjIuMC4wCi0gICAuLi4KLSAgIGZ1bjpzbmRfY29uZmlnX2hvb2tfbG9hZAotfQotCi17Ci0gICA8YWxzYSBsZWFrIHNuZF9jb25maWdfdXBkYXRlX3I+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBvYmo6LypsaWIqL2xpYmFzb3VuZC5zby4yLjAuMAotICAgLi4uCi0gICBmdW46c25kX2NvbmZpZ191cGRhdGVfcgotICAgZnVuOnNuZF9jb25maWdfdXBkYXRlCi19Ci17Ci0gICA8YWxzYSBsZWFrIHNuZF9jb25maWdfdXBkYXRlX3I+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46c3RyZHVwCi0gICAuLi4KLSAgIGZ1bjpzbmRfY29uZmlnX3VwZGF0ZV9yCi0gICBmdW46c25kX2NvbmZpZ191cGRhdGUKLX0KLXsKLSAgIDxhbHNhIGxlYWsgc25kX2NvbmZpZ19zZWFyY2hhX2hvb2tzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIC4uLgotICAgZnVuOnNuZF9jb25maWdfc2VhcmNoYV9ob29rcwotfQotCi17Ci0gICA8bnNzIGxvb2t1cCB3aXRoaW4gQUxTQT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIG9iajovbGliL2xpYmMqLnNvCi0gICBmdW46X19uc3NfZGF0YWJhc2VfbG9va3VwCi0gICBvYmo6KgotICAgb2JqOioKLSAgIGZ1bjpnZXRncm5hbV9yCi0gICBmdW46Z2V0Z3JuYW0KLSAgIGZ1bjpzbmRfcGNtX2RpcmVjdF9wYXJzZV9vcGVuX2NvbmYKLX0KLQotewotICAgPGxpYnhjYiBsZWFrIG9uIFVidW50dSBGZWlzdHk+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X1hDQkluaXREaXNwbGF5TG9jawotICAgZnVuOlhPcGVuRGlzcGxheQotfQotCi0jIEdDb25mIGludGVybmFsIGluaXRpYWxpc2F0aW9ucyByZWxhdGVkIHRvIGdldHRpbmcgdGhlIGRlZmF1bHQgY2xpZW50LgotewotICAgPE9yYml0IHNvbWV0aGluZyBvciBvdGhlcj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY190Y3ZhbAotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28uKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKLSAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgotICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGludGVybmFsIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKLSAgIG9iajoqCi0gICBmdW46UG9ydGFibGVTZXJ2ZXJfUE9BX3NlcnZhbnRfdG9fcmVmZXJlbmNlCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci17Ci0gICA8Z2NvbmYgaW50ZXJuYWwgbGVhaz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY190Y3ZhbAotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28uKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvLioKLSAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgotICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGludGVybmFsIGluaXRpYWxpc2F0aW9uPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOioKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCi0gICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAotICAgZnVuOk9SQml0X2RlbWFyc2hhbF92YWx1ZQotICAgZnVuOioKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1YgotICAgZnVuOkNvbmZpZ1NlcnZlcl9nZXRfZGVmYXVsdF9kYXRhYmFzZQotICAgZnVuOioKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxnY29uZiBpbnRlcm5hbCBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOioKLSAgIGZ1bjpJT1BfZ2VuZXJhdGVfcHJvZmlsZXMKLSAgIGZ1bjpPUkJpdF9tYXJzaGFsX29iamVjdAotICAgZnVuOk9SQml0X21hcnNoYWxfdmFsdWUKLSAgIGZ1bjoqCi0gICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKLSAgIGZ1bjpDb25maWdTZXJ2ZXJfYWRkX2NsaWVudAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci17Ci0gICA8Z2NvbmYgaW50ZXJuYWwgaW5pdD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY19ieV90YwotICAgZnVuOioKLSAgIGZ1bjpQb3J0YWJsZVNlcnZlcl9QT0Ffc2VydmFudF90b19yZWZlcmVuY2UKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxnY29uZiBpbnRlcm5hbCBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jX2J5X3RjCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zby4qCi0gICBmdW46T1JCaXRfZGVtYXJzaGFsX0lPUgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9vYmplY3QKLSAgIGZ1bjpDT1JCQV9PUkJfc3RyaW5nX3RvX29iamVjdAotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28uKgotICAgZnVuOmdjb25mX2dldF9jdXJyZW50X2xvY2tfaG9sZGVyCi0gICBmdW46Z2NvbmZfYWN0aXZhdGVfc2VydmVyCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zby4qCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zby4qCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci0KLXsKLSAgIDxpbnNlcnQgYSBzdXBwcmVzc2lvbiBuYW1lIGhlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46KgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKLX0KLQotIyBTb21lIGxpYk9SQml0L2Jvbm9ibyBpbml0aWFsaXNhdGlvbiBzdHVmZgotewotICAgPGJvbm9ibyBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46T1JCaXRfYWxsb2Nfc3RyaW5nCi0gICBmdW46Q09SQkFfc3RyaW5nX2R1cAotICAgZnVuOkJvbm9ib19BY3RpdmF0aW9uRW52VmFsdWVfc2V0Ci0gICBmdW46Ym9ub2JvX2FjdGl2YXRpb25faW5pdF9hY3RpdmF0aW9uX2VudgotICAgZnVuOmJvbm9ib19hY3RpdmF0aW9uX29yYl9pbml0Ci0gICBmdW46Ym9ub2JvX2FjdGl2YXRpb25faW5pdAotfQotewotICAgPGJvbm9ibyBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jKgotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCi0gICBmdW46UG9ydGFibGVTZXJ2ZXJfUE9BX3NlcnZhbnRfdG9fcmVmZXJlbmNlCi0gICBvYmo6L3Vzci9saWIvbGliYm9ub2JvLTIuc28qCi19Ci17Ci0gICA8Ym9ub2JvIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2NfdGN2YWwKLSAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvY2J1ZgotICAgZnVuOk9SQml0X2FkYXB0b3Jfc2V0dXAKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOk9SQml0X1BPQV9zZXR1cF9yb290Ci0gICBmdW46T1JCaXRfaW5pdF9pbnRlcm5hbHMKLSAgIGZ1bjpDT1JCQV9PUkJfaW5pdAotfQotewotICAgPGJvbm9ibyBpbml0IC0gbW9yZSByZWNlbnQgdmFyaWFudCBvZiBhYm92ZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvY190Y3ZhbAotICAgZnVuOk9SQml0X2FkYXB0b3Jfc2V0dXAKLSAgIGZ1bjoqCi0gICBmdW46T1JCaXRfUE9BX3NldHVwX3Jvb3QKLSAgIGZ1bjpPUkJpdF9pbml0X2ludGVybmFscwotICAgZnVuOkNPUkJBX09SQl9pbml0Ci19Ci17Ci0gICA8Ym9ub2JvIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46T1JCaXRfc21hbGxfYWxsb2NidWYKLSAgIGZ1bjpib25vYm9fYWN0aXZhdGlvbl9pbml0X2FjdGl2YXRpb25fZW52Ci0gICBmdW46Ym9ub2JvX2FjdGl2YXRpb25fb3JiX2luaXQKLSAgIGZ1bjpib25vYm9fYWN0aXZhdGlvbl9pbml0Ci19Ci0KLSMgTW9yZSBHQ29uZiBzdHVmZiBmcm9tIHRoZSBGQzUgYnVpbGRib3QsIG1vc3RseSB2YXJpYXRpb25zIG9uIHRoZQotIyBhYm92ZSBzdGFjayB0cmFjZXMKLXsKLSAgIDxpbmNvbXBsZXRlbHkgaW5pdGlhbGlzZWQgT1JCaXQgYnVmZmVyPgotICAgTWVtY2hlY2s6UGFyYW0KLSAgIHdyaXRldih2ZWN0b3JbLi4uXSkKLSAgIGZ1bjp3cml0ZXYKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOmxpbmtfY29ubmVjdGlvbl93cml0ZXYKLSAgIGZ1bjpnaW9wX3NlbmRfYnVmZmVyX3dyaXRlCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1YgotICAgZnVuOk9SQml0X3NtYWxsX2ludm9rZV9zdHViX24KLSAgIGZ1bjpPUkJpdF9jX3N0dWJfaW52b2tlCi0gICBmdW46Q29uZmlnU2VydmVyX3BpbmcKLSAgIGZ1bjpnY29uZl9hY3RpdmF0ZV9zZXJ2ZXIKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCi0gICBmdW46Z2NvbmZfZW5naW5lX2dldF9kZWZhdWx0Ci19Ci17Ci0gICA8Z2NvbmYgaW5pdD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvYyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvYyoKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOlBvcnRhYmxlU2VydmVyX1BPQV9zZXJ2YW50X3RvX3JlZmVyZW5jZQotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46T1JCaXRfc21hbGxfYWxsb2MKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46Q09SQkFfT1JCX3N0cmluZ190b19vYmplY3QKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2dldF9jdXJyZW50X2xvY2tfaG9sZGVyCi0gICBmdW46Z2NvbmZfYWN0aXZhdGVfc2VydmVyCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPGdjb25mIGluaXQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46T1JCaXRfYWxsb2MqCi0gICBmdW46T1JCaXRfc21hbGxfYWxsb2MqCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfSU9SCi0gICBmdW46T1JCaXRfZGVtYXJzaGFsX29iamVjdAotICAgZnVuOkNPUkJBX09SQl9zdHJpbmdfdG9fb2JqZWN0Ci0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIGZ1bjpnY29uZl9nZXRfY3VycmVudF9sb2NrX2hvbGRlcgotICAgZnVuOmdjb25mX2FjdGl2YXRlX3NlcnZlcgotICAgb2JqOi91c3IvbGliL2xpYmdjb25mLTIuc28qCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxib25vYm8gaW5pdD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIGZ1bjpnX21hbGxvYzAKLSAgIGZ1bjpPUkJpdF9hbGxvYyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9hbGxvYyoKLSAgIG9iajovdXNyL2xpYi9saWJPUkJpdC0yLnNvKgotICAgZnVuOk9SQml0X2RlbWFyc2hhbF9JT1IKLSAgIGZ1bjpPUkJpdF9kZW1hcnNoYWxfb2JqZWN0Ci0gICBmdW46T1JCaXRfZGVtYXJzaGFsX3ZhbHVlCi0gICBvYmo6L3Vzci9saWIvbGliT1JCaXQtMi5zbyoKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1YgotICAgZnVuOk9SQml0X3NtYWxsX2ludm9rZV9zdHViX24KLSAgIGZ1bjpPUkJpdF9jX3N0dWJfaW52b2tlCi0gICBmdW46Q29uZmlnU2VydmVyX2dldF9kZWZhdWx0X2RhdGFiYXNlCi0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIGZ1bjpnY29uZl9lbmdpbmVfZ2V0X2RlZmF1bHQKLX0KLXsKLSAgIDxnY29uZiBpbml0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOk9SQml0X2FsbG9jKgotICAgZnVuOk9SQml0X3NtYWxsX2FsbG9jKgotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCi0gICBmdW46T1JCaXRfT0FPYmplY3Rfb2JqZWN0X3RvX29iamtleQotICAgZnVuOklPUF9nZW5lcmF0ZV9wcm9maWxlcwotICAgZnVuOk9SQml0X21hcnNoYWxfb2JqZWN0Ci0gICBmdW46T1JCaXRfbWFyc2hhbF92YWx1ZQotICAgb2JqOi91c3IvbGliL2xpYk9SQml0LTIuc28qCi0gICBmdW46T1JCaXRfc21hbGxfaW52b2tlX3N0dWIKLSAgIGZ1bjpPUkJpdF9zbWFsbF9pbnZva2Vfc3R1Yl9uCi0gICBmdW46T1JCaXRfY19zdHViX2ludm9rZQotICAgZnVuOkNvbmZpZ1NlcnZlcl9hZGRfY2xpZW50Ci0gICBvYmo6L3Vzci9saWIvbGliZ2NvbmYtMi5zbyoKLSAgIG9iajovdXNyL2xpYi9saWJnY29uZi0yLnNvKgotICAgZnVuOmdjb25mX2VuZ2luZV9nZXRfZGVmYXVsdAotfQotewotICAgPEdMaWIgY2FjaGluZyB0aGUgaG9tZSBkaXI+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBvYmo6KmxpYmMtKi5zbwotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotICAgb2JqOioKLSAgIG9iajoqCi0gICBmdW46Z2V0cHduYW1fcgotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCi0gICBmdW46Z19nZXRfaG9tZV9kaXIKLX0KLXsKLSAgIDxHTGliIGNhY2hpbmcgdGhlIHVzZXIgbmFtZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIG9iajoqbGliYy0qLnNvCi0gICBmdW46X19uc3NfZGF0YWJhc2VfbG9va3VwCi0gICBvYmo6KgotICAgb2JqOioKLSAgIGZ1bjpnZXRwd25hbV9yCi0gICBvYmo6L3Vzci9saWIqL2xpYmdsaWItMi4wLnNvLioKLSAgIGZ1bjpnX2dldF91c2VyX25hbWUKLX0KLXsKLSAgIDxHTGliIGNhY2hpbmcgdGhlIHRtcCBkaXI+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBvYmo6KmxpYmMtKi5zbwotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotICAgb2JqOioKLSAgIG9iajoqCi0gICBmdW46Z2V0cHduYW1fcgotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4qCi0gICBmdW46Z19nZXRfdG1wX2RpcgotfQotCi17Ci0gICA8R0xpYiBjYWNoaW5nIHRoZSBob3N0IG5hbWU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBvYmo6KmxpYmMtKi5zbwotICAgZnVuOl9fbnNzX2RhdGFiYXNlX2xvb2t1cAotICAgb2JqOioKLSAgIG9iajoqCi0gICBmdW46Z2V0cHduYW1fcgotICAgb2JqOi91c3IvbGliKi9saWJnbGliLTIuMC5zby4wLioKLSAgIGZ1bjpnX2dldF9ob3N0X25hbWUKLX0KLQotCi0jIyBTb21lIEZvbnRjb25maWcgZXJyb3JzLgotewotICAgPEZpcnN0IHRpbWUgbG9hZCBvZiBhIGZvbnQgLSBmZWlzdHkgeDg2XzY0PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOkZjUGF0dGVybk9iamVjdEluc2VydEVsdAotICAgZnVuOkZjUGF0dGVybk9iamVjdEFkZFdpdGhCaW5kaW5nCi0gICBmdW46RmNQYXR0ZXJuQXBwZW5kCi0gICBmdW46RmNFbmRFbGVtZW50Ci0gICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCi0gICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgotICAgZnVuOlhNTF9QYXJzZUJ1ZmZlcgotICAgZnVuOkZjQ29uZmlnUGFyc2VBbmRMb2FkCi0gICBmdW46RmNDb25maWdQYXJzZUFuZExvYWQKLSAgIGZ1bjpGY1BhcnNlSW5jbHVkZQotICAgZnVuOkZjRW5kRWxlbWVudAotICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJleHBhdC5zby4qCi0gICBvYmo6L3Vzci9saWIvbGliZXhwYXQuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmV4cGF0LnNvLioKLSAgIGZ1bjpYTUxfUGFyc2VCdWZmZXIKLSAgIGZ1bjpGY0NvbmZpZ1BhcnNlQW5kTG9hZAotfQotewotICAgPEZpcnN0IHRpbWUgbG9hZCBvZiBhIGZvbnQgLSBnZW5lcmljPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46RmNJbml0TG9hZENvbmZpZwotfQotCi0jIElzc3VlcyB3aXRoIHVidW50dSBIYXJkeSwgc2FtZSBjcmFjayBhcyBmb3IgcHJldmlvdXMgdWJ1bnR1cwotewotICAgPHRscyBsZWFrIGdlbmVyaWMgdWJ1bnR1IGhhcmR5IHg4Nj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIG9iajoqCi0gICBmdW46X2RsX2FsbG9jYXRlX3RscwotICAgZnVuOnB0aHJlYWRfY3JlYXRlQEAqCi0gICBvYmo6L3Vzci9saWIvbGliZ3RocmVhZCoKLSAgIGZ1bjpnX3RocmVhZF8qCi19Ci0KLSMgSSd2ZSBtYWRlIHRoaXMgdmVyc2lvbiBnZW5lcmljLCBzbyB0aGF0IGl0IGNvdmVycyBmdXR1cmUgbW9kaWZpY2F0aW9ucwotIyBvZiBsaWJyYXJ5IG5hbWVzCi17Ci0gICA8dGxzIGxlYWsgZ2VuZXJpYz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIG9iajoqCi0gICBmdW46X2RsX2FsbG9jYXRlX3RscwotICAgZnVuOnB0aHJlYWRfY3JlYXRlQEAqCi0gICBmdW46Z190aHJlYWRfKgotfQotCi0jIHNlcmllcyBvZiBpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IGluIGdfbW9kdWxlX29wZW4gZm9yIHVidW50dQotIyBoYXJkeSB4ODYvMzJiaXQKLXsKLSAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotICAgZnVuOmdzdF9wbHVnaW5fbG9hZF8qCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA0IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLSAgIGZ1bjpnc3RfcGx1Z2luX2xvYWRfKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkKgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgNCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgZnVuOl9kbF9zeW0KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliZGwtMi43LnNvCi0gICBmdW46ZGxzeW0KLSAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi0gICBmdW46Z3N0X3BsdWdpbl9sb2FkXyoKLX0KLQotIyBzZXJpZXMgb2YgaW52YWxpZCByZWFkIG9mIHNpemUgOCBpbiBnX21vZHVsZV9vcGVuIGZvciB1YnVudHUKLSMgaGFyZHkgeDg2LzY0Yml0Ci17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmRsLTIuNy5zbwotICAgZnVuOmRsb3BlbgotICAgZnVuOmdfbW9kdWxlX29wZW4KLX0KLQotewotICAgPGludmFsaWQgcmVhZCBvZiBzaXplIDggd2l0aGluIDxnX21vZHVsZV9vcGVuPgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxvcGVuCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi17Ci0gICA8aW52YWxpZCByZWFkIG9mIHNpemUgOCB3aXRoaW4gPGdfbW9kdWxlX29wZW4+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmRsLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIGZ1bjpkbG9wZW4KLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxpbnZhbGlkIHJlYWQgb2Ygc2l6ZSA4IHdpdGhpbiA8Z19tb2R1bGVfb3Blbj4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9saWJkbC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGliZGwtMi43LnNvCi0gICBmdW46ZGxzeW0KLSAgIGZ1bjpnX21vZHVsZV9zeW1ib2wKLSAgIGZ1bjpnX21vZHVsZV9vcGVuCi19Ci0KLXsKLSAgIDxHTGliIGNhY2hpbmc+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBmdW46X19uc3NfcGFzc3dkX2xvb2t1cAotICAgZnVuOmdldHB3bmFtX3IKLX0KLQotewotICAgPEdMaWIgY2FjaGluZz4KLSAgIE1lbWNoZWNrOkFkZHI0Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIGZ1bjpfX25zc19wYXNzd2RfbG9va3VwCi0gICBmdW46Z2V0cHduYW1fcgotfQotCi17Ci0gICA8R0xpYiBjYWNoaW5nPgotICAgTWVtY2hlY2s6QWRkcjQKLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL3Rscy9pNjg2L2Ntb3YvbGliYy0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgZnVuOl9fbGliY19kbG9wZW5fbW9kZQotICAgZnVuOl9fbnNzX2xvb2t1cF9mdW5jdGlvbgotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJuc3NfY29tcGF0LTIuNy5zbwotICAgZnVuOl9uc3NfY29tcGF0X2dldHB3bmFtX3IKLSAgIGZ1bjpnZXRwd25hbV9yCi19Ci0KLXsKLSAgIDxHTGliIGNhY2hpbmc+Ci0gICBNZW1jaGVjazpBZGRyNAotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvdGxzL2k2ODYvY21vdi9saWJjLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBmdW46X19saWJjX2Rsb3Blbl9tb2RlCi0gICBmdW46X19uc3NfbG9va3VwX2Z1bmN0aW9uCi0gICBvYmo6L2xpYi90bHMvaTY4Ni9jbW92L2xpYm5zc19jb21wYXQtMi43LnNvCi0gICBmdW46X25zc19jb21wYXRfZ2V0cHduYW1fcgotICAgZnVuOmdldHB3bmFtX3IKLX0KLQotewotICAgPEdMaWIgY2FjaGluZz4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xkLTIuNy5zbwotICAgb2JqOi9saWIvbGQtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBvYmo6L2xpYi9sZC0yLjcuc28KLSAgIGZ1bjpfX2xpYmNfZGxvcGVuX21vZGUKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIG9iajovbGliL2xpYmMtMi43LnNvCi0gICBmdW46Z2V0cHduYW1fcgotfQotCi0jIyBMZWFrcyBpbiBBTFNBICh2YXJpYXRpb25zIG9mIGxlYWsgZnJvbSBzbmRfY29uZmlnX2xvYWQxKQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X3NuZF9jb25maWdfbWFrZQotICAgZnVuOl9zbmRfY29uZmlnX21ha2VfYWRkCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOnNuZF9jb25maWdfbG9hZDEKLX0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X3NuZF9jb25maWdfbWFrZQotICAgZnVuOl9zbmRfY29uZmlnX21ha2VfYWRkCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46X3NuZF9jb25maWdfbWFrZQotICAgZnVuOl9zbmRfY29uZmlnX21ha2VfYWRkCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOl9zbmRfY29uZmlnX21ha2UKLSAgIGZ1bjpfc25kX2NvbmZpZ19tYWtlX2FkZAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnNuZDFfZGxvYmpfY2FjaGVfYWRkCi0gICBmdW46c25kX2N0bF9vcGVuX25vdXBkYXRlCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46KgotICAgZnVuOnNuZDFfZGxvYmpfY2FjaGVfYWRkCi0gICBmdW46c25kX2N0bF9vcGVuX25vdXBkYXRlCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLXsKLSAgIDxBbHNhIGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46c25kX2NvbmZpZ19sb2FkMQotfQotCi17Ci0gICA8QWxzYSBsZWFrPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpzbmRfY29uZmlnX2xvYWQxCi19Ci0KLQotIyBUaGUgZm9sbG93aW5nIGFyZSBsZWFrcyBvZiBjYXBzIHRoYXQgbmVlZCB0byBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5Ci0jIGluIHRoZSB0eXBlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgcGx1Z2luICh1c2VkIGZvciBwYWQgdGVtcGxhdGVzKS4KLQotewotICAgPExlYWsgaW4gb2dtcGFyc2Vycz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfc2ltcGxlCi0gICBmdW46KgotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLSAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgotfQotCi17Ci0gICA8TGVhayBpbiBvZ21wYXJzZXJzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z190eXBlX2NsYXNzX3JlZgotICAgZnVuOmdzdF9lbGVtZW50X3JlZ2lzdGVyCi0gICBmdW46Z3N0X29nbV9wYXJzZV9wbHVnaW5faW5pdAotICAgZnVuOnBsdWdpbl9pbml0Ci19Ci0KLXsKLSAgIDxMZWFrIGluIHZpZGVvdGVzdHNyYz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X3ZpZGVvX3Rlc3Rfc3JjX2Jhc2VfaW5pdAotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLSAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgotfQotCi17Ci0gICA8TGVhayBpbiB2aWRlb3Rlc3RzcmM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46Z19tYWxsb2MKLSAgIGZ1bjpnX3NsaWNlX2FsbG9jCi0gICBmdW46Z3N0X2NhcHNfbmV3X2VtcHR5Ci0gICBmdW46Z3N0X2NhcHNfY29weQotICAgZnVuOmdzdF92aWRlb190ZXN0X3NyY19nZXRjYXBzCi0gICBmdW46Z3N0X3ZpZGVvX3Rlc3Rfc3JjX2Jhc2VfaW5pdAotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLSAgIGZ1bjpnc3RfZWxlbWVudF9yZWdpc3RlcgotfQotCi17Ci0gICA8TGVhayBpbiBmZm1wZWdjb2xvcnNwYWNlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9mZm1wZWdjc3BfY29kZWN0eXBlX3RvX2NhcHMKLSAgIGZ1bjpnc3RfZmZtcGVnY29sb3JzcGFjZV9yZWdpc3RlcgotICAgZnVuOnBsdWdpbl9pbml0Ci19Ci0KLXsKLSAgIDxMZWFrIGluIGZmbXBlZ29jb2xvcnNwYWNlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9jYXBzX2NvcHkKLSAgIGZ1bjpnc3RfZmZtcGVnY29sb3JzcGFjZV9yZWdpc3RlcgotICAgZnVuOnBsdWdpbl9pbml0Ci19Ci0KLXsKLSAgIDxMZWFrIGluIGdzdGZmbXBlZ2RlbXV4PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9jYXBzX25ld19hbnkKLSAgIGZ1bjpnc3RfZmZtcGVnZGVtdXhfcmVnaXN0ZXIKLSAgIGZ1bjpwbHVnaW5faW5pdAotfQotCi17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zbGljZV9hbGxvYwotICAgZnVuOmdzdF9jYXBzX25ld19lbXB0eQotICAgZnVuOmdzdF9jYXBzX2NvcHkKLSAgIGZ1bjpnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzCi19Ci0KLXsKLSAgIDxMZWFrIGluIEdzdEF1ZGlvRmlsdGVyIHN1YmNsYXNzZXMsIHZhcmlhbnQ+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46cmVhbGxvYwotICAgZnVuOmdfcmVhbGxvYwotICAgZnVuOmdfcHRyX2FycmF5X21heWJlX2V4cGFuZAotICAgZnVuOmdfcHRyX2FycmF5X2FkZAotICAgZnVuOmdzdF9jYXBzX2FwcGVuZAotICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKLX0KLQotewotICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpyZWFsbG9jCi0gICBmdW46Z19yZWFsbG9jCi0gICBmdW46Z19wdHJfYXJyYXlfbWF5YmVfZXhwYW5kCi0gICBmdW46Z19wdHJfYXJyYXlfYWRkCi0gICBmdW46Z3N0X2NhcHNfYXBwZW5kCi0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotCi17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50PgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnJlYWxsb2MKLSAgIGZ1bjpnX3JlYWxsb2MKLSAgIGZ1bjpnX3B0cl9hcnJheV9tYXliZV9leHBhbmQKLSAgIGZ1bjpnX3B0cl9hcnJheV9hZGQKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotCi17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50Mj4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnX3B0cl9hcnJheV9zaXplZF9uZXcKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotewotICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudDM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46cmVhbGxvYwotICAgZnVuOmdfcmVhbGxvYwotICAgZnVuOmdfYXJyYXlfbWF5YmVfZXhwYW5kCi0gICBmdW46Z19hcnJheV9zaXplZF9uZXcKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnc3RfdmFsdWVfaW5pdF9hbmRfY29weQotICAgZnVuOmdzdF9zdHJ1Y3R1cmVfY29weQotICAgZnVuOmdzdF9jYXBzX2NvcHkKLSAgIGZ1bjpnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzCi19Ci17Ci0gICA8TGVhayBpbiBHc3RBdWRpb0ZpbHRlciBzdWJjbGFzc2VzLCB2YXJpYW50ND4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpyZWFsbG9jCi0gICBmdW46Z19yZWFsbG9jCi0gICBmdW46Z19hcnJheV9tYXliZV9leHBhbmQKLSAgIGZ1bjpnX2FycmF5X3NpemVkX25ldwotICAgZnVuOioKLSAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcwotfQotewotICAgPExlYWsgaW4gR3N0QXVkaW9GaWx0ZXIgc3ViY2xhc3NlcywgdmFyaWFudDU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46Z19tYWxsb2MKLSAgIGZ1bjpnX3NsaWNlX2FsbG9jCi0gICBmdW46Z19hcnJheV9zaXplZF9uZXcKLSAgIGZ1bjoqCi0gICBmdW46Z3N0X3N0cnVjdHVyZV9jb3B5Ci0gICBmdW46Z3N0X2NhcHNfY29weQotICAgZnVuOmdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMKLX0KLQotewotICAgPExlYWsgaW4gcmlmZi1tZWRpYT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfcmlmZl9jcmVhdGVfKl90ZW1wbGF0ZV9jYXBzCi19Ci17Ci0gICA8TGVhayBpbiByaWZmLW1lZGlhPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOnJlYWxsb2MKLSAgIGZ1bjpnX3JlYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2NhcHNfYXBwZW5kCi0gICBmdW46Z3N0X3JpZmZfY3JlYXRlXypfdGVtcGxhdGVfY2FwcwotfQotewotICAgPExlYWsgaW4gcmlmZi1tZWRpYT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnX2FycmF5X3NpemVkX25ldwotICAgZnVuOioKLSAgIGZ1bjpnc3Rfc3RydWN0dXJlX2NvcHkKLSAgIGZ1bjpnc3RfY2Fwc19jb3B5Ci0gICBmdW46Z3N0X2NhcHNfYXBwZW5kCi0gICBmdW46Z3N0X3JpZmZfY3JlYXRlXypfdGVtcGxhdGVfY2FwcwotfQotCi0jIyBMZWFrcyBpbiBwYW5nbyAoYmlsYm9lZDogZ2VudG9vIHVuc3RhYmxlIGFtZDY0KQotCi17Ci0gICA8UGFuZ28gbGVhayAtIGdlbmVyaWM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpwYW5nb19sYXlvdXRfZ2V0X3BpeGVsX2V4dGVudHMKLX0KLXsKLSAgIDxpbnNlcnQgYSBzdXBwcmVzc2lvbiBuYW1lIGhlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICBmdW46Z19tYWxsb2MwCi0gICBmdW46cGFuZ29fbGFuZ3VhZ2VfZnJvbV9zdHJpbmcKLSAgIGZ1bjpwYW5nb19sYW5ndWFnZV9nZXRfZGVmYXVsdAotICAgZnVuOnBhbmdvX2NvbnRleHRfaW5pdAotICAgZnVuOmdfdHlwZV9jcmVhdGVfaW5zdGFuY2UKLSAgIGZ1bjpnX29iamVjdF9jb25zdHJ1Y3RvcgotICAgZnVuOmdfb2JqZWN0X25ld3YKLSAgIGZ1bjpnX29iamVjdF9uZXdfdmFsaXN0Ci0gICBmdW46Z19vYmplY3RfbmV3Ci0gICBmdW46cGFuZ29fZm9udF9tYXBfY3JlYXRlX2NvbnRleHQKLX0KLQotewotICAgPFBhbmdvTGFuZ3VhZ2UgY2FuIG5ldmVyIGJlIGZyZWVkPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgZnVuOmdfbWFsbG9jMAotICAgZnVuOnBhbmdvX2xhbmd1YWdlX2Zyb21fc3RyaW5nCi19Ci0KLQotIyMgTGVhayBvZiBldmVyeXRoaW5nIGFsbG9jYXRlZCBieSBnc3QtbGliYXYgcGx1Z2luIGluaXQKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpnc3RfZmZtcGVnX2NmZ19pbml0Ci19Ci0KLSMjIExlYWsgb2YgR0lPIG1vZHVsZSB0aHJvdWdoIGdub21ldmZzCi0KLXsKLSAgIDxnaW8gbGVhaz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46Z190eXBlX2NyZWF0ZV9pbnN0YW5jZQotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnX2lvX21vZHVsZV9uZXcKLSAgIGZ1bjpnX2lvX21vZHVsZXNfbG9hZF9hbGxfaW5fZGlyZWN0b3J5Ci0gICBmdW46KgotICAgZnVuOmdldF9kZWZhdWx0X3ZmcwotfQotCi0jIyBDb25kaXRpb25hbCBqdW1wIGluIGdldGFkZHJpbmZvIChiaWxib2VkLCBnZW50b28gfmFtZDY0LCBEZWMgMTMgMjAwOCkKLXsKLSAgIDxMZWFrIG9mIGFkZHJpbmZvIGluIGVzZD4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpnYWloX2luZXQKLSAgIGZ1bjpnZXRhZGRyaW5mbwotfQotCi0jIyBEeW5hbWljIHBhZCB0ZW1wbGF0ZXMgaW4gbXhmbXV4Ci17Ci0gICA8RHluYW1pYyBwYWQgdGVtcGxhdGVzIGluIG14Zm11eD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIGZ1bjpnX21hbGxvYwotICAgZnVuOmdfc2xpY2VfYWxsb2MKLSAgIGZ1bjpnc3RfY2Fwc19uZXdfZW1wdHkKLSAgIGZ1bjpnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgZnVuOm14Zl8qX2luaXQKLSAgIGZ1bjpwbHVnaW5faW5pdAotfQotCi0jIyBXZSBkb24ndCBrbm93IGlmIGZmbXBlZyBmcmVlcyB0aGlzIG9yIG5vdCBhbmQgYmV0dGVyIHBhc3MgYSBjb3B5IGZvciBzYWZldHkKLXsKLSAgIDxpbnNlcnQgYSBzdXBwcmVzc2lvbiBuYW1lIGhlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46Z19tYWxsb2MKLSAgIGZ1bjpnX3N0cmR1cAotICAgZnVuOmdzdF9mZm1wZWdfY2ZnX2ZpbGxfY29udGV4dAotICAgZnVuOmdzdF9mZm1wZWdlbmNfc2V0Y2FwcwotICAgZnVuOmdzdF9wYWRfc2V0X2NhcHMKLX0KLQotIyMgTGVhay9vdmVycmVhZHMgd2l0aCBnbGliYy0yLjEwCi0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkb19zeW0KLSAgIGZ1bjpkbHN5bV9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxzeW0KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46ZG9fc3ltCi0gICBmdW46ZGxzeW1fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsc3ltCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW4qCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0Ci0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2NoZWNrX21hcF92ZXJzaW9ucwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW4qCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0KgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9tYXBfb2JqZWN0KgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9jaGVja19jYWxsZXIKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW4qCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX2NoZWNrX2NhbGxlcgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbioKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCi0gICBvYmo6L2xpYiovbGliYy0yLjEwLiouc28KLSAgIGZ1bjpfdmduVV9mcmVlcmVzCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCi0gICBvYmo6L2xpYiovbGliYy0yLjEwLiouc28KLSAgIGZ1bjpfdmduVV9mcmVlcmVzCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBteXN0ZXJpb3VzIGludmFsaWQgZnJlZSBvbiBleGl0PgotICAgTWVtY2hlY2s6RnJlZQotICAgZnVuOmZyZWUKLSAgIG9iajovbGliKi9saWJjLTIuMTAuKi5zbwotICAgb2JqOi9saWIqL2xpYmMtMi4xMC4qLnNvCi0gICBmdW46X3ZnblVfZnJlZXJlcwotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2ZpbmkKLSAgIGZ1bjpfX3J1bl9leGl0X2hhbmRsZXJzCi0gICBmdW46ZXhpdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9maW5pCi0gICBmdW46X19ydW5fZXhpdF9oYW5kbGVycwotICAgZnVuOmV4aXQKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfc29ydF9maW5pCi0gICBmdW46X2RsX2ZpbmkKLSAgIGZ1bjpfX3J1bl9leGl0X2hhbmRsZXJzCi0gICBmdW46ZXhpdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9zb3J0X2ZpbmkKLSAgIGZ1bjpfZGxfZmluaQotICAgZnVuOl9fcnVuX2V4aXRfaGFuZGxlcnMKLSAgIGZ1bjpleGl0Ci19Ci0KLSMgZ2xpYmMtMi4xMCBkbCBvdmVycmVhZHMKLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfZml4dXAKLSAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9maXh1cAotICAgZnVuOl9kbF9ydW50aW1lX3Jlc29sdmUKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfZml4dXAKLSAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfZml4dXAKLSAgIGZ1bjpfZGxfcnVudGltZV9yZXNvbHZlCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46Y2FsbF9pbml0Ci0gICBmdW46X2RsX2luaXQKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfaW5pdAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpkb19sb29rdXBfeAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0Ci0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi0gICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucwotICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAotICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi0gICBmdW46dmVyc2lvbl9jaGVja19kb2l0Ci0gICBmdW46X2RsX3JlY2VpdmVfZXJyb3IKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi0gICBmdW46dmVyc2lvbl9jaGVja19kb2l0Ci0gICBmdW46X2RsX3JlY2VpdmVfZXJyb3IKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucwotICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAotICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi0gICBmdW46dmVyc2lvbl9jaGVja19kb2l0Ci0gICBmdW46X2RsX3JlY2VpdmVfZXJyb3IKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi0gICBmdW46X2RsX2NoZWNrX2FsbF92ZXJzaW9ucwotICAgZnVuOnZlcnNpb25fY2hlY2tfZG9pdAotICAgZnVuOl9kbF9yZWNlaXZlX2Vycm9yCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46aW5pdF90bHMKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmluaXRfdGxzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9wcm90ZWN0X3JlbHJvCi0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpkb19sb29rdXBfeAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLSAgIGZ1bjpfZGxfcmVsb2NhdGVfb2JqZWN0Ci0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX3NldHVwX2hhc2gKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpfZGxfbmV3X29iamVjdAotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfbmV3X29iamVjdAotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2Zyb21fZmQKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46b3BlbmF1eAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOm9wZW5hdXgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpvcGVuX3BhdGgKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOm9wZW5hdXgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpvcGVuX3BhdGgKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOm9wZW5hdXgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX25ld19vYmplY3QKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9uZXdfb2JqZWN0Ci0gICBmdW46X2RsX21hcF9vYmplY3RfZnJvbV9mZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46X2RsX25ld19vYmplY3QKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjpfZGxfbmFtZV9tYXRjaF9wCi0gICBmdW46X2RsX21hcF9vYmplY3QKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX25hbWVfbWF0Y2hfcAotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLSAgIGZ1bjpfZGxfY2hlY2tfYWxsX3ZlcnNpb25zCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmRvX2xvb2t1cF94Ci0gICBmdW46X2RsX2xvb2t1cF9zeW1ib2xfeAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46ZG9fbG9va3VwX3gKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46ZG9fbG9va3VwX3gKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpkb19sb29rdXBfeAotICAgZnVuOl9kbF9sb29rdXBfc3ltYm9sX3gKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX25hbWVfbWF0Y2hfcAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46ZGxfb3Blbl93b3JrZXIKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotICAgZnVuOmRsX29wZW5fd29ya2VyCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfZGxfbG9va3VwX3N5bWJvbF94Ci0gICBmdW46X2RsX3JlbG9jYXRlX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9jaGVja19tYXBfdmVyc2lvbnMKLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2hlY2tfbWFwX3ZlcnNpb25zCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46b3BlbmF1eAotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9uYW1lX21hdGNoX3AKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIGZ1bjpfZGxfY2xvc2UKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIGZ1bjpfZGxfY2xvc2UKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX2Nsb3NlX3dvcmtlcgotICAgZnVuOl9kbF9jbG9zZQotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOmRsZXJyb3JfcnVuCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9jbG9zZV93b3JrZXIKLSAgIGZ1bjpfZGxfY2xvc2UKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOmZpbGxpbl9ycGF0aAotICAgZnVuOl9kbF9pbml0X3BhdGhzCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOmZpbGxpbl9ycGF0aAotICAgZnVuOl9kbF9pbml0X3BhdGhzCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46ZmlsbGluX3JwYXRoCi0gICBmdW46X2RsX2luaXRfcGF0aHMKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOmZpbGxpbl9ycGF0aAotICAgZnVuOl9kbF9pbml0X3BhdGhzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46bWFwX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkb19wcmVsb2FkCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46bWFwX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkb19wcmVsb2FkCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBvcGVuKGZpbGVuYW1lKQotICAgZnVuOm9wZW4KLSAgIGZ1bjpvcGVuX3ZlcmlmeQotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46bWFwX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkb19wcmVsb2FkCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6UGFyYW0KLSAgIHN0YXQoZmlsZV9uYW1lKQotICAgZnVuOl94c3RhdAotICAgZnVuOm9wZW5fcGF0aAotICAgZnVuOl9kbF9tYXBfb2JqZWN0Ci0gICBmdW46b3BlbmF1eAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9tYXBfb2JqZWN0X2RlcHMKLSAgIGZ1bjpkbF9tYWluCi19Ci0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9kZXBzCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX21haW4KLX0KLQotIyBnbGliYy0yLjEwIHRscyBpc3N1ZXMKLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOmluaXRfdGxzCi0gICBmdW46ZGxfbWFpbgotfQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjppbml0X3RscwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjppbml0X3RscwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmluaXRfdGxzCi0gICBmdW46ZGxfbWFpbgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHNfaW5pdAotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIG92ZXJyZWFkcy9jb25kaXRpb25hbHM+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzX2luaXQKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOioKLSAgIGZ1bjpfZGxfYWxsb2NhdGVfdGxzX2luaXQKLSAgIGZ1bjpkbF9tYWluCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBvdmVycmVhZHMvY29uZGl0aW9uYWxzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOl9kbF9hbGxvY2F0ZV90bHNfaW5pdAotICAgZnVuOmRsX21haW4KLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpfX3RscyoKLSAgIG9iajoqCi0gICBvYmo6KgotICAgZnVuOl92Z25VX2ZyZWVyZXMKLX0KLQotewotICAgPGdsaWJjLTIuMTAgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOlBhcmFtCi0gICBhcmNoX3ByY3RsKGFyZzIpCi0gICBmdW46aW5pdF90bHMKLX0KLSMgR0xpYiBjYWNoaW5nIHRtcC9ob21lIGRpcmVjdG9yaWVzIChnbGliYy0yLjEwIHZhcmlhbnRzKQotewotICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjoqCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotICAgZnVuOioKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIGZ1bjpfX25zc19sb29rdXAKLSAgIGZ1bjpnZXRwd25hbSoKLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpkbGVycm9yX3J1bgotICAgZnVuOioKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIGZ1bjpfX25zc19sb29rdXAKLSAgIGZ1bjpnZXRwd25hbSoKLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmRvX2Rsb3BlbgotICAgZnVuOioKLSAgIGZ1bjpkbGVycm9yX3J1bgotICAgZnVuOioKLSAgIGZ1bjpfX25zc19sb29rdXBfZnVuY3Rpb24KLSAgIGZ1bjpfX25zc19sb29rdXAKLSAgIGZ1bjpnZXRwd25hbSoKLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46ZG9fZGxvcGVuCi0gICBmdW46KgotICAgZnVuOmRsZXJyb3JfcnVuCi0gICBmdW46KgotICAgZnVuOl9fbnNzX2xvb2t1cF9mdW5jdGlvbgotICAgZnVuOl9fbnNzX2xvb2t1cAotICAgZnVuOmdldHB3bmFtKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X2RsX2FkZF90b19zbG90aW5mbwotICAgZnVuOmRsX21haW4KLX0KLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpQYXJhbQotICAgb3BlbihmaWxlbmFtZSkKLSAgIGZ1bjpvcGVuCi0gICBmdW46b3Blbl92ZXJpZnkKLSAgIGZ1bjpvcGVuX3BhdGgKLSAgIGZ1bjpfZGxfbWFwX29iamVjdAotfQotCi0KLQotIyBHTW9kdWxlIGlzc3VlcyB3aXRoIGdsaWJjLTIuMTAKLXsKLSAgIDxnbGliYy0yLjEwIEdMSUIgbGVha3M+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOmRsc3ltCi0gICBmdW46Z19tb2R1bGVfc3ltYm9sCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46Z19tb2R1bGVfKgotICAgZnVuOmdzdF9wbHVnaW4qCi19Ci17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOmdfbW9kdWxlXyoKLSAgIGZ1bjpnc3RfcGx1Z2luKgotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpkbG9wZW4qCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotewotICAgPGdsaWJjLTIuMTAgR0xJQiBsZWFrcz4KLSAgIE1lbWNoZWNrOlZhbHVlOAotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpkbHN5bQotICAgZnVuOmdfbW9kdWxlX3N5bWJvbAotfQotCi17Ci0gICA8Z2xpYmMtMi4xMCBHTElCIGxlYWtzPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjoqCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpkbG9wZW4qCi0gICBmdW46Z19tb2R1bGVfb3BlbgotfQotCi0jIExlYWsgaW4gR1NsaWNlCi17Ci0gICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46Z19wYXJzZV9kZWJ1Z19zdHJpbmcKLSAgIGZ1bjpzbGljZV9jb25maWdfaW5pdAotICAgZnVuOmdfc2xpY2VfaW5pdF9ub21lc3NhZ2UKLSAgIGZ1bjpfZ19zbGljZV90aHJlYWRfaW5pdF9ub21lc3NhZ2UKLSAgIGZ1bjpnX3RocmVhZF9pbml0X2dsaWIKLX0KLQotIyAyLjEwIHB0aHJlYWQgaXNzdWVzCi17Ci0gICA8aW5zZXJ0IGEgc3VwcHJlc3Npb24gbmFtZSBoZXJlPgotICAgTWVtY2hlY2s6VmFsdWU4Ci0gICBmdW46X19wdGhyZWFkX2luaXRpYWxpemVfbWluaW1hbAotfQotCi0jIGdsaWJjIDIuMTEgY29uZGl0aW9uYWwKLXsKLSAgIDxnbGliYy0yLjExIGNvbmRpdGlvbmFsPgotICAgTWVtY2hlY2s6Q29uZAotICAgZnVuOl9kbF9yZWxvY2F0ZV9vYmplY3QKLSAgIGZ1bjpkbF9tYWluCi0gICBmdW46X2RsX3N5c2RlcF9zdGFydAotICAgZnVuOl9kbF9zdGFydAotICAgb2JqOi9saWI2NC9sZC0yLjExLnNvCi19Ci0KLSMgZ2xpYmMgMi4xMSBMZWFrCi0KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQotfQotCi17Ci0gICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOl9kbF8qCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQotfQotCi17Ci0gICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgZnVuOl9kbF8qCi0gICBmdW46X2RsXyoKLSAgIGZ1bjpfZGxfKgotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKLX0KLQotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46X2RsXyoKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKLX0KLQotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpkbF9vcGVuX3dvcmtlcgotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbF9vcGVuCi0gICBmdW46ZGxvcGVuX2RvaXQKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxlcnJvcl9ydW4KLSAgIGZ1bjpkbG9wZW5AQEdMSUJDXzIuMi41Ci19Ci0KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46X2RsX25ld19vYmplY3QKLSAgIGZ1bjpfZGxfbWFwX29iamVjdF9mcm9tX2ZkCi0gICBmdW46X2RsX21hcF9vYmplY3QKLSAgIGZ1bjpvcGVuYXV4Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX21hcF9vYmplY3RfZGVwcwotICAgZnVuOmRsX29wZW5fd29ya2VyCi0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsX29wZW4KLSAgIGZ1bjpkbG9wZW5fZG9pdAotICAgZnVuOl9kbF9jYXRjaF9lcnJvcgotICAgZnVuOl9kbGVycm9yX3J1bgotICAgZnVuOmRsb3BlbkBAR0xJQkNfMi4yLjUKLX0KLQotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjoqCi0gICBmdW46X2RsXyoKLSAgIGZ1bjpfZGxfKgotICAgZnVuOl9kbF8qCi0gICBmdW46ZGxfb3Blbl93b3JrZXIKLSAgIGZ1bjpfZGxfY2F0Y2hfZXJyb3IKLSAgIGZ1bjpfZGxfb3BlbgotICAgZnVuOmRsb3Blbl9kb2l0Ci0gICBmdW46X2RsX2NhdGNoX2Vycm9yCi0gICBmdW46X2RsZXJyb3JfcnVuCi0gICBmdW46ZGxvcGVuQEBHTElCQ18yLjIuNQotfQotCi0jIGdsaWIgdHlwZSBsZWFrcwotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMKLX0KLQotIyBuZXcgcmVnaXN0cnkgc3lzdGVtCi0jIGFsbCBvZiB0aGlzIHdpbGwgb25seSBiZSBjcmVhdGVkIG9uY2Ugd2hlbiBsb2FkaW5nIHJlZ2lzdHJ5LgotCi17Ci0gICA8aW5zZXJ0X2Ffc3VwcHJlc3Npb25fbmFtZV9oZXJlPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgLi4uCi0gICBmdW46X3ByaXZfZ3N0X3JlZ2lzdHJ5X2NodW5rc19sb2FkX3BsdWdpbgotfQotCi0jIHN5c3RlbS13aWRlIHRhZ3MKLSMgdGhlc2UgdGFncyBhcmUgcmVnaXN0ZXJlZCBvbmNlCi0KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICBmdW46KgotICAgZnVuOioKLSAgIGZ1bjpnc3RfdGFnX3JlZ2lzdGVyCi0gICBmdW46X2dzdF90YWdfaW5pdGlhbGl6ZQotfQotCi0jIHN5c3RlbS13aWRlIHR5cGUgY2xhc3NlcyB0aGF0IHdlIGtlZXAgcmVmZXJlbmNlZAotCi17Ci0gICA8Z190eXBlX2NsYXNzX3JlZiBsZWFrcz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfdHlwZV9jbGFzc19yZWYKLX0KLQotIyBsZWFraW5nIGNhY2hlZCBxdWVyaWVzIHdoaWNoIGFyZSBvbmx5IGluaXRpYWxpemVkIG9uY2UKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpfZ3N0X3F1ZXJ5X2luaXRpYWxpemUKLSAgIGZ1bjppbml0X3Bvc3QKLX0KLQotIyBtYWNvc3ggKGxlb3BhcmQpIGxpYnJhcnkgbG9hZGVyIGxlYWsKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46X1pud20KLSAgIGZ1bjpfWk5TczRfUmVwOV9TX2NyZWF0ZUVtbVJLU2FJY0UKLSAgIGZ1bjpfWk5TczEyX1NfY29uc3RydWN0SVBLY0VFUGNUX1MzX1JLU2FJY0VTdDIwZm9yd2FyZF9pdGVyYXRvcl90YWcKLSAgIGZ1bjpfWk5Tc0MyRVBLY1JLU2FJY0UKLSAgIGZ1bjpfWjQxX19zdGF0aWNfaW5pdGlhbGl6YXRpb25fYW5kX2Rlc3RydWN0aW9uXzBpaQotICAgZnVuOl9aTjE2SW1hZ2VMb2FkZXJNYWNoTzE4ZG9Nb2RJbml0RnVuY3Rpb25zRVJLTjExSW1hZ2VMb2FkZXIxMUxpbmtDb250ZXh0RQotfQotCi0jIEdPYmplY3QgdHlwZSByZWdpc3RyYXRpb24KLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpfZ19hdG9taWNfYXJyYXlfY29weQotfQotCi17Ci0gICA8Z2V0ZGVsaW0gb25lLXRpbWUgaW5pdHMgY2FsbGVkIGZyb20gbGlic2VsaW51eD4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIGZ1bjpnZXRkZWxpbQotICAgb2JqOipsaWJzZWxpbnV4KgotfQotCi17Ci0gICA8d2VpcmQgb25lIHdoZW4gcmUtcmVhZGluZyByZWdpc3RyeT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgb2JqOiovc2VkCi19Ci0KLXsKLSAgIDx3ZWlyZCBvbmUgd2hlbiByZS1yZWFkaW5nIHJlZ2lzdHJ5PgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIC4uLgotICAgb2JqOiovc2VkCi19Ci0KLSMgR0xpYiAyLjIzIGludGVyZmFjZSB2dGFibGUKLXsKLSAgIDxpbnNlcnRfYV9zdXBwcmVzc2lvbl9uYW1lX2hlcmU+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMKLX0KLQotewotICAgPGxlYWsgaW4gZGFzaCBvbiBkZWJpYW4gc2lkPgotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOiphbGxvYwotICAgb2JqOiovZGFzaAotfQotCi0jIGxpYnRvb2wvZ2VudG9vIGZha2UgbGVhawotIyBpdCBhY3R1YWxseSBydW5zIGJhc2ggYW5kIHZhbGdyaW5kIGNvbXBsYWlucwotewotICAgPGluc2VydF9hX3N1cHByZXNzaW9uX25hbWVfaGVyZT4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjoqYWxsb2MKLSAgIG9iajovYmluL2Jhc2gKLX0KLQotewotICAgPGlnbm9yZSBwb3NzYmx5LWxvc3QgbGVha3MgaW4gdGhlIHBsdWdpbiBzY2FubmVyIHdoaWNoIGRvZXNuJ3QgY2xlYW4gdXAgcHJvcGVybHk+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46KmFsbG9jCi0gICAuLi4KLSAgIGZ1bjpfZ3N0X3BsdWdpbl9sb2FkZXJfY2xpZW50X3J1bgotICAgZnVuOm1haW4KLX0KLQotewotICAgPHdhcm5pbmcgd2l0aCBsaWJjIDIuMTMtMiBhcyBpbiBEZWJpYW4vdW5zdGFibGUgb24gYW1kNjQ+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46KnN0cmNhc2VjbXAqCi0gICAuLi4KLSAgIGZ1bjpfX2RjaWdldHRleHQKLX0KLQotewotICAgPHdhcm5pbmcgd2l0aCBsaWJjIDIuMTMtMiBhcyBpbiBEZWJpYW4vdW5zdGFibGUgb24gYW1kNjQ+Ci0gICBNZW1jaGVjazpWYWx1ZTgKLSAgIGZ1bjoqc3RyY2FzZWNtcCoKLSAgIC4uLgotICAgZnVuOl9fZGNpZ2V0dGV4dAotfQotCi17Ci0gICA8R3N0U3lzdGVtQ2xvY2sgaXMgYSBzaW5nbGV0b24gYW5kIGRvZXMgbm90IGxlYWs+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICAuLi4KLSAgIGZ1bjpnc3RfcG9sbF9uZXcKLSAgIGZ1bjpnc3RfcG9sbF9uZXdfdGltZXIKLSAgIGZ1bjpnc3Rfc3lzdGVtX2Nsb2NrX2luaXQKLX0KLQotewotICAgPGdsaWIgdHlwZXMgYXJlIHNpbmdsZXRvbnM+Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46Y2FsbG9jCi0gICAuLi4KLSAgIGZ1bjpnb2JqZWN0X2luaXRfY3RvcgotfQotCi17Ci0gICA8cXVhcmsgdGFibGUgaXMgbGVha2VkIG9uIHB1cnBvc2UgaWYgaXQgZ3Jvd3MgdG9vIGJpZz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfcXVhcmtfZnJvbSpfc3RyaW5nCi19Ci0KLXsKLSAgPHRpbWVyX2NyZWF0ZSBzdXBwcmVzc2lvbnMgZm9yIGVhcmxpZXIgdmFsZ3JpbmQgdmVyc2lvbnMgdGhhdCBjb21wbGFpbj4KLSAgTWVtY2hlY2s6UGFyYW0KLSAgdGltZXJfY3JlYXRlKGV2cCkKLSAgZnVuOnRpbWVyX2NyZWF0ZUBAR0xJQkNfMi4zLjMKLX0KLQotewotICAgY2xvc3VyZXMgYXJlbid0IHZhbGdyaW5kIGZyaWVuZGx5IChiZ28jNzM5ODUwKQotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOmNhbGxvYwotICAgLi4uCi0gICBmdW46Z19jY2xvc3VyZV9uZXcKLX0KLQotewotICAgY2xvc3VyZXMgYXJlbid0IHZhbGdyaW5kIGZyaWVuZGx5IChiZ28jNzM5ODUwKQotICAgTWVtY2hlY2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgLi4uCi0gICBmdW46Z19jbG9zdXJlX2FkZF9pbnZhbGlkYXRlX25vdGlmaWVyCi19Ci0KLXsKLSAgIGNsb3N1cmVzIGFyZW4ndCB2YWxncmluZCBmcmllbmRseSAoYmdvIzczOTg1MCkKLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjpjYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfY2xvc3VyZV9uZXdfc2ltcGxlCi19Ci0KLXsKLSAgIGdsaWIvZ2lvbW9kdWxlczIgKGZyb20gbGlic291cC5zdXBwKQotICAgTWVtY2hlY2s6TGVhawotICAgLi4uCi0gICBmdW46X2dfaW9fbW9kdWxlX2dldF9kZWZhdWx0Ci19Ci0KLXsKLSAgIDx2YWxncmluZCBidWcgd2hlbiB0cnlpbmcgdG8gcGFyc2UgImluZmluaXR5IiBmcm9tICJpbnRlcmxlYXZlZCI+Ci0gICBNZW1jaGVjazpBZGRyOAotICAgZnVuOl9fR0lfX19zdHJuY2FzZWNtcF9sCi0gICBmdW46X19fX3N0cnRvZF9sX2ludGVybmFsCi0gICBmdW46Z3N0X3ZhbHVlX2Rlc2VyaWFsaXplX2RvdWJsZQotfQotCi17Ci0gICA8Z2xpYmMgb3ZlcnJlYWRzL2NvbmRpdGlvbmFscz4KLSAgIE1lbWNoZWNrOkFkZHI4Ci0gICBmdW46ZG9fbG9va3VwX3gKLX0KLQotewotICAgPHF1YXJrIHRhYmxlcyBhcmUgbGVha2VkIG9uIHB1cnBvc2Ugd2hlbiB0aGV5IGFyZSBleHBhbmRlZCwgb2JzZXJ2ZWQgd2l0aCBnbGliIDIuNDYgYW5kIGdzdC1ydHNwLXNlcnZlciB0ZXN0cz4KLSAgIE1lbWNoZWNrOkxlYWsKLSAgIGZ1bjptYWxsb2MKLSAgIC4uLgotICAgZnVuOmdfcXVhcmtfaW5pdAotfQpkaWZmIC0tZ2l0IGEvY29tbW9uL2dzdGRvYy1zY2FuZ29iaiBiL2NvbW1vbi9nc3Rkb2Mtc2NhbmdvYmoKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkwNjg1N2MuLjAwMDAwMDAKLS0tIGEvY29tbW9uL2dzdGRvYy1zY2FuZ29iagorKysgL2Rldi9udWxsCkBAIC0xLDE3NTIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcGVybAotIyAtKi0gY3BlcmwgLSotCi0jCi0jIGd0ay1kb2MgLSBHVEsgRG9jQm9vayBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci4KLSMgQ29weXJpZ2h0IChDKSAxOTk4ICBEYW1vbiBDaGFwbGluCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0KLSMKLSMgVGhpcyBnZXRzIGluZm9ybWF0aW9uIGFib3V0IG9iamVjdCBoaWVyYXJjaGllcyBhbmQgc2lnbmFscwotIyBieSBjb21waWxpbmcgYSBzbWFsbCBDIHByb2dyYW0uIENGTEFHUyBhbmQgTERGTEFHUyBtdXN0IGJlCi0jIHNldCBhcHByb3ByaWF0ZWx5IGJlZm9yZSBydW5uaW5nIHRoaXMgc2NyaXB0LgotIwotCi11c2UgR2V0b3B0OjpMb25nOwotCi1teSAkR1RLX0RPQ19QUkVGSVg9YHBrZy1jb25maWcgLS12YXJpYWJsZSBwcmVmaXggZ3RrLWRvY2A7Ci1pZiAoJEdUS19ET0NfUFJFRklYKSB7Ci0gIGNob21wICRHVEtfRE9DX1BSRUZJWDsKLSAgI3ByaW50ICJBZGRpbmcgJEdUS19ET0NfUFJFRklYL3NoYXJlL2d0ay1kb2MvZGF0YSB0byBcQElOQ1xuIjsKLSAgdW5zaGlmdCBASU5DLCAiJEdUS19ET0NfUFJFRklYL3NoYXJlL2d0ay1kb2MvZGF0YSI7Ci19IGVsc2UgewotICB1bnNoaWZ0IEBJTkMsICcvdXNyL3NoYXJlL2d0ay1kb2MvZGF0YSc7Ci19Ci1yZXF1aXJlICJndGtkb2MtY29tbW9uLnBsIjsKLQotIyBPcHRpb25zCi0KLSMgbmFtZSBvZiBkb2N1bWVudGF0aW9uIG1vZHVsZQotbXkgJE1PRFVMRTsKLW15ICRPVVRQVVRfRElSOwotbXkgJElOU1BFQ1RfRElSOwotbXkgJFZFUkJPU0U7Ci1teSAkUFJJTlRfVkVSU0lPTjsKLW15ICRQUklOVF9IRUxQOwotbXkgJFRZUEVfSU5JVF9GVU5DPSJnX3R5cGVfaW5pdCAoKSI7Ci0KLSMgLS1ub2d0a2luaXQgaXMgZGVwcmVjYXRlZCwgYXMgaXQgaXMgdGhlIGRlZmF1bHQgbm93IGFueXdheS4KLSVvcHRjdGwgPSAobW9kdWxlID0+IFwkTU9EVUxFLAotICAgICAgICAgICBzb3VyY2UgPT4gXCRTT1VSQ0UsCi0JICAgdHlwZXMgPT4gXCRUWVBFU19GSUxFLAotCSAgIG5vZ3RraW5pdCA9PiBcJE5PX0dUS19JTklULAotCSAgICd0eXBlLWluaXQtZnVuYycgPT4gXCRUWVBFX0lOSVRfRlVOQywKLQkgICAnb3V0cHV0LWRpcicgPT4gXCRPVVRQVVRfRElSLAotCSAgICdpbnNwZWN0LWRpcicgPT4gXCRJTlNQRUNUX0RJUiwKLQkgICAndmVyYm9zZScgPT4gXCRWRVJCT1NFLAotCSAgICd2ZXJzaW9uJyA9PiBcJFBSSU5UX1ZFUlNJT04sCi0JICAgJ2hlbHAnID0+IFwkUFJJTlRfSEVMUCk7Ci0KLUdldE9wdGlvbnMoXCVvcHRjdGwsICJtb2R1bGU9cyIsICJzb3VyY2U9cyIsICJ0eXBlczpzIiwgIm91dHB1dC1kaXI6cyIsICJpbnNwZWN0LWRpcjpzIiwgIm5vZ3RraW5pdCIsICJ0eXBlLWluaXQtZnVuYzpzIiwgInZlcmJvc2UiLCAidmVyc2lvbiIsICJoZWxwIik7Ci0KLWlmICgkTk9fR1RLX0lOSVQpIHsKLSAgIyBEbyBub3RoaW5nLiBUaGlzIGp1c3QgYXZvaWRzIGEgd2FybmluZy4KLSAgIyB0aGUgb3B0aW9uIGlzIG5vdCB1c2VkIGFueW1vcmUKLX0KLQotaWYgKCRQUklOVF9WRVJTSU9OKSB7Ci0gICAgcHJpbnQgIjEuNVxuIjsKLSAgICBleGl0IDA7Ci19Ci0KLWlmICghJE1PRFVMRSkgewotICAgICRQUklOVF9IRUxQID0gMTsKLX0KLQotaWYgKCRQUklOVF9IRUxQKSB7Ci0gICAgcHJpbnQgPDxFT0Y7Ci1nc3Rkb2Mtc2NhbmdvYmogdmVyc2lvbiAxLjUgLSBpbnRyb3NwZWN0IGdzdHJlYW1lci1wbHVnaW5zCi0KLS0tbW9kdWxlPU1PRFVMRV9OQU1FICAgICAgICAgIE5hbWUgb2YgdGhlIGRvYyBtb2R1bGUgYmVpbmcgcGFyc2VkCi0tLXNvdXJjZT1TT1VSQ0VfTkFNRSAgICAgICAgICBOYW1lIG9mIHRoZSBzb3VyY2UgbW9kdWxlIGZvciBwbHVnaW5zCi0tLXR5cGVzPUZJTEUgICAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBzdG9yZSB0aGUgdHlwZXMgaW4KLS0tdHlwZS1pbml0LWZ1bmM9RlVOQyAgICAgICAgIFRoZSBpbml0IGZ1bmN0aW9uIHRvIGNhbGwgaW5zdGVhZCBvZiBnX3R5cGVfaW5pdCgpCi0tLW91dHB1dC1kaXI9RElSTkFNRSAgICAgICAgICBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSByZXN1bHRzIGFyZSBzdG9yZWQKLS0taW5zcGVjdC1kaXI9RElSTkFNRSAgICAgICAgIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBsdWdpbiBpbnNwZWN0IGRhdGEgaXMgc3RvcmVkCi0tLXZlcmJvc2UgICAgICAgICAgICAgICAgICAgICBQcmludCBleHRyYSBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZwotLS12ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgdGhpcyBwcm9ncmFtCi0tLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIGhlbHAKLUVPRgotICAgIGV4aXQgMDsKLX0KLQotJE9VVFBVVF9ESVIgPSAkT1VUUFVUX0RJUiA/ICRPVVRQVVRfRElSIDogIi4iOwotCi0kVFlQRVNfRklMRSA9ICRUWVBFU19GSUxFID8gJFRZUEVTX0ZJTEUgOiAiJE9VVFBVVF9ESVIvJE1PRFVMRS50eXBlcyI7Ci0KLW9wZW4gKFRZUEVTLCAkVFlQRVNfRklMRSkgfHwgZGllICJDYW5ub3Qgb3BlbiAkVFlQRVNfRklMRTogJCFcbiI7Ci1vcGVuIChPVVRQVVQsICI+JE1PRFVMRS1zY2FuLmMiKSB8fCBkaWUgIkNhbm5vdCBvcGVuICRNT0RVTEUtc2Nhbi5jOiAkIVxuIjsKLQotbXkgJG9sZF9zaWduYWxzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuc2lnbmFscyI7Ci1teSAkbmV3X3NpZ25hbHNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5zaWduYWxzLm5ldyI7Ci1teSAkb2xkX2hpZXJhcmNoeV9maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmhpZXJhcmNoeSI7Ci1teSAkbmV3X2hpZXJhcmNoeV9maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmhpZXJhcmNoeS5uZXciOwotbXkgJG9sZF9pbnRlcmZhY2VzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuaW50ZXJmYWNlcyI7Ci1teSAkbmV3X2ludGVyZmFjZXNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5pbnRlcmZhY2VzLm5ldyI7Ci1teSAkb2xkX3ByZXJlcXVpc2l0ZXNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS5wcmVyZXF1aXNpdGVzIjsKLW15ICRuZXdfcHJlcmVxdWlzaXRlc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLnByZXJlcXVpc2l0ZXMubmV3IjsKLW15ICRvbGRfYXJnc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLmFyZ3MiOwotbXkgJG5ld19hcmdzX2ZpbGVuYW1lID0gIiRPVVRQVVRfRElSLyRNT0RVTEUuYXJncy5uZXciOwotbXkgJG9sZF9zZWN0aW9uc19maWxlbmFtZSA9ICIkT1VUUFVUX0RJUi8kTU9EVUxFLXNlY3Rpb25zIjsKLW15ICRuZXdfc2VjdGlvbnNfZmlsZW5hbWUgPSAiJE9VVFBVVF9ESVIvJE1PRFVMRS1zZWN0aW9ucy5uZXciOwotCi1teSAkZGVidWdfbG9nPSJnX21lc3NhZ2UiOwotaWYgKCFkZWZpbmVkKCRWRVJCT1NFKSBvciAkVkVSQk9TRSBlcSAiMCIpIHsKLSAgICAkZGVidWdfbG9nPSIvLyRkZWJ1Z19sb2ciOwotfQotCi0jIHdyaXRlIGEgQyBwcm9ncmFtIHRvIHNjYW4gdGhlIHR5cGVzCi0KLSRpbmNsdWRlcyA9ICIiOwotQHR5cGVzID0gKCk7Ci1AaW1wbF90eXBlcyA9ICgpOwotCi1mb3IgKDxUWVBFUz4pIHsKLSAgICBpZiAoL14jaW5jbHVkZS8pIHsKLQkkaW5jbHVkZXMgLj0gJF87Ci0gICAgfSBlbHNpZiAoL14lLykgewotCW5leHQ7Ci0gICAgfSBlbHNpZiAoL15ccyokLykgewotCW5leHQ7Ci0gICAgfSBlbHNpZiAoL150eXBlOiguKikkLykgewotCSR0ID0gJDE7Ci0gICAgICAgIGNob21wICR0OwotCXB1c2ggQGltcGxfdHlwZXMsICR0OwotICAgIH0gZWxzZSB7Ci0JY2hvbXA7Ci0JcHVzaCBAdHlwZXMsICRfOwotICAgIH0KLX0KLQotJG50eXBlcyA9IEB0eXBlcyArIEBpbXBsX3R5cGVzICsgMTsKLQotcHJpbnQgT1VUUFVUIDw8RU9UOwotCi0vKiBmaWxlIGdlbmVyYXRlZCBieSBjb21tb24vZ3N0ZG9jLXNjYW5nb2JqICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci1FT1QKLQotaWYgKCRpbmNsdWRlcykgewotICAgIHByaW50IE9VVFBVVCAkaW5jbHVkZXM7Ci19IGVsc2UgewotICAgIGZvciAoQHR5cGVzKSB7Ci0gICAgICAgIHByaW50IE9VVFBVVCAiZXh0ZXJuIEdUeXBlICRfICh2b2lkKTtcbiI7Ci0gICAgfQotfQotCi1wcmludCBPVVRQVVQgPDxFT1Q7Ci0KLSNpZmRlZiBHVEtfSVNfV0lER0VUX0NMQVNTCi0jaW5jbHVkZSA8Z3RrL2d0a3ZlcnNpb24uaD4KLSNlbmRpZgotCi1zdGF0aWMgR1R5cGUgKm9iamVjdF90eXBlcyA9IE5VTEw7Ci0KLXN0YXRpYyBHU3RyaW5nICp4bWxzdHIgPSBOVUxMOwotCi1zdGF0aWMgY29uc3QgZ2NoYXIqCi14bWxwcmludCAoZ2ludCBpbmRlbnQsIGNvbnN0IGdjaGFyICp0YWcsIGNvbnN0IGdjaGFyICpkYXRhKQotewotICBjb25zdCBnY2hhciBpbmRlbnRfc3RyW10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotCi0gIC8qIHJlc2V0ICovCi0gIGdfc3RyaW5nX3RydW5jYXRlICh4bWxzdHIsIDApOwotICBnX3N0cmluZ19hcHBlbmRfbGVuICh4bWxzdHIsIGluZGVudF9zdHIsIE1JTiAoaW5kZW50LCBzdHJsZW4gKGluZGVudF9zdHIpKSk7Ci0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbHN0ciwgIjwlcz4iLCB0YWcpOwotCi0gIGlmIChkYXRhKSB7Ci0gICAgZ2NoYXIgKnM7Ci0KLSAgICBzID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKGRhdGEsIC0xKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHhtbHN0ciwgcyk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotCi0gIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHhtbHN0ciwgIjwvJXM+XFxuIiwgdGFnKTsKLSAgcmV0dXJuIHhtbHN0ci0+c3RyOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2ZlYXR1cmVfc29ydF9jb21wYXJlIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgY29uc3QgZ2NoYXIgKm5hbWVfYSA9IGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoKEdzdFBsdWdpbkZlYXR1cmUgKikgYSk7Ci0gIGNvbnN0IGdjaGFyICpuYW1lX2IgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKChHc3RQbHVnaW5GZWF0dXJlICopIGIpOwotICByZXR1cm4gc3RyY21wIChuYW1lX2EsIG5hbWVfYik7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zdGF0aWNfcGFkX3RlbXBsYXRlX2NvbXBhcmUgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQotewotICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc3B0X2EgPSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKikgYTsKLSAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnNwdF9iID0gKEdzdFN0YXRpY1BhZFRlbXBsYXRlICopIGI7Ci0KLSAgLyogd2Ugd2FudCBTSU5LIGJlZm9yZSBTUkMgKGVudW0gaXMgVU5LTk9XTiwgU1JDLCBTSU5LKSAqLwotICBpZiAoc3B0X2EtPmRpcmVjdGlvbiAhPSBzcHRfYi0+ZGlyZWN0aW9uKQotICAgIHJldHVybiBzcHRfYi0+ZGlyZWN0aW9uIC0gc3B0X2EtPmRpcmVjdGlvbjsKLQotICAvKiB3ZSB3YW50IEFMV0FZUyBmaXJzdCwgU09NRVRJTUVTIHNlY29uZCwgUkVRVUVTVCBsYXN0Ci0gICAqIChlbnVtIGlzIEFMV0FZUywgU09NRVRJTUVTLCBSRVFVRVNUKSAqLwotICBpZiAoc3B0X2EtPnByZXNlbmNlICE9IHNwdF9iLT5wcmVzZW5jZSkKLSAgICByZXR1cm4gc3B0X2EtPnByZXNlbmNlIC0gc3B0X2ItPnByZXNlbmNlOwotCi0gIHJldHVybiBzdHJjbXAgKHNwdF9hLT5uYW1lX3RlbXBsYXRlLCBzcHRfYi0+bmFtZV90ZW1wbGF0ZSk7Ci19Ci0KLXN0YXRpYyBHVHlwZSAqCi1nZXRfb2JqZWN0X3R5cGVzICh2b2lkKQotewotICAgIGdwb2ludGVyIGdfb2JqZWN0X2NsYXNzOwotICAgIEdMaXN0ICpwbHVnaW5zID0gTlVMTDsKLSAgICBHTGlzdCAqZmFjdG9yaWVzID0gTlVMTDsKLSAgICBHTGlzdCAqbDsKLSAgICBHc3RFbGVtZW50RmFjdG9yeSAqZmFjdG9yeSA9IE5VTEw7Ci0gICAgR1R5cGUgdHlwZTsKLSAgICBnaW50IGkgPSAwOwotICAgIGdib29sZWFuIHJlaW5zcGVjdDsKLQotICAgIC8qIGdldCBhIGxpc3Qgb2YgZmVhdHVyZXMgZnJvbSBwbHVnaW5zIGluIG91ciBzb3VyY2UgbW9kdWxlICovCi0gICAgcGx1Z2lucyA9IGdzdF9yZWdpc3RyeV9nZXRfcGx1Z2luX2xpc3QgKGdzdF9yZWdpc3RyeV9nZXQgKCkpOwotCi0gICAgeG1sc3RyID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0KLSAgICByZWluc3BlY3QgPSAhZ19maWxlX3Rlc3QgKCJzY2Fub2JqLWJ1aWxkLnN0YW1wIiwgR19GSUxFX1RFU1RfRVhJU1RTKTsKLQotICAgIHdoaWxlIChwbHVnaW5zKSB7Ci0gICAgICBHTGlzdCAqZmVhdHVyZXM7Ci0gICAgICBHc3RQbHVnaW4gKnBsdWdpbjsKLSAgICAgIGNvbnN0IGdjaGFyICpzb3VyY2U7Ci0gICAgICBGSUxFICppbnNwZWN0ID0gTlVMTDsKLSAgICAgIGdjaGFyICppbnNwZWN0X25hbWU7Ci0KLSAgICAgIHBsdWdpbiA9IChHc3RQbHVnaW4gKikgKHBsdWdpbnMtPmRhdGEpOwotICAgICAgcGx1Z2lucyA9IGdfbGlzdF9uZXh0IChwbHVnaW5zKTsKLSAgICAgIHNvdXJjZSA9IGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAocGx1Z2luKTsKLSAgICAgIGlmICghc291cmNlIHx8IHN0cmNtcCAoc291cmNlLCAiJFNPVVJDRSIpICE9IDApIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNraXAgc3RhdGljIGNvcmVlbGVtZW50cyBwbHVnaW4gd2l0aCBwaXBlbGluZSBhbmQgYmluIGVsZW1lbnQgZmFjdG9yeSAqLwotICAgICAgaWYgKGdzdF9wbHVnaW5fZ2V0X2ZpbGVuYW1lIChwbHVnaW4pID09IE5VTEwpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAkZGVidWdfbG9nICgicGx1Z2luOiAlcyBzb3VyY2U6ICVzIiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSwgc291cmNlKTsKLQotICAgICAgaWYgKHJlaW5zcGVjdCkgewotICAgICAgICBnY2hhciAqYmFzZW5hbWU7Ci0KLSAgICAgICAgaW5zcGVjdF9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJElOU1BFQ1RfRElSIiBHX0RJUl9TRVBBUkFUT1JfUyAicGx1Z2luLSVzLnhtbCIsCi0gICAgICAgICAgICBnc3RfcGx1Z2luX2dldF9uYW1lIChwbHVnaW4pKTsKLSAgICAgICAgaW5zcGVjdCA9IGZvcGVuIChpbnNwZWN0X25hbWUsICJ3Iik7Ci0gICAgICAgIGlmIChpbnNwZWN0ID09IE5VTEwpIHsKLSAgICAgICAgICBnX2Vycm9yICgiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmc6ICVzXFxuIiwgaW5zcGVjdF9uYW1lLAotICAgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgICB9Ci0gICAgICAgIGdfZnJlZSAoaW5zcGVjdF9uYW1lKTsKLQotCQkgIGJhc2VuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZSAoZ3N0X3BsdWdpbl9nZXRfZmlsZW5hbWUgKHBsdWdpbikpOwotCi0gICAgICAgIC8qIG91dHB1dCBwbHVnaW4gZGF0YSAqLwotICAgICAgICBmcHV0cyAoIjxwbHVnaW4+XFxuIixpbnNwZWN0KTsKLSAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJuYW1lIiwgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiZGVzY3JpcHRpb24iLCBnc3RfcGx1Z2luX2dldF9kZXNjcmlwdGlvbiAocGx1Z2luKSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiZmlsZW5hbWUiLCBnc3RfcGx1Z2luX2dldF9maWxlbmFtZSAocGx1Z2luKSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAiYmFzZW5hbWUiLCBiYXNlbmFtZSksaW5zcGVjdCk7Ci0gICAgICAgIGZwdXRzICh4bWxwcmludCgyLCAidmVyc2lvbiIsIGdzdF9wbHVnaW5fZ2V0X3ZlcnNpb24gKHBsdWdpbikpLGluc3BlY3QpOwotICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgImxpY2Vuc2UiLCBnc3RfcGx1Z2luX2dldF9saWNlbnNlIChwbHVnaW4pKSxpbnNwZWN0KTsKLSAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJzb3VyY2UiLCBnc3RfcGx1Z2luX2dldF9zb3VyY2UgKHBsdWdpbikpLGluc3BlY3QpOwotICAgICAgICBmcHV0cyAoeG1scHJpbnQoMiwgInBhY2thZ2UiLCBnc3RfcGx1Z2luX2dldF9wYWNrYWdlIChwbHVnaW4pKSxpbnNwZWN0KTsKLSAgICAgICAgZnB1dHMgKHhtbHByaW50KDIsICJvcmlnaW4iLCBnc3RfcGx1Z2luX2dldF9vcmlnaW4gKHBsdWdpbikpLGluc3BlY3QpOwotICAgICAgICBmcHV0cyAoIiAgPGVsZW1lbnRzPlxcbiIsIGluc3BlY3QpOwotCi0JCSAgZ19mcmVlIChiYXNlbmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGZlYXR1cmVzID0KLSAgICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0KLSAgICAgIC8qIHNvcnQgZmFjdG9yaWVzIGJ5IGZlYXR1cmUtPm5hbWUgKi8KLSAgICAgIGZlYXR1cmVzID0gZ19saXN0X3NvcnQgKGZlYXR1cmVzLCBnc3RfZmVhdHVyZV9zb3J0X2NvbXBhcmUpOwotCi0gICAgICB3aGlsZSAoZmVhdHVyZXMpIHsKLSAgICAgICAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLSAgICAgICAgZmVhdHVyZSA9IEdTVF9QTFVHSU5fRkVBVFVSRSAoZmVhdHVyZXMtPmRhdGEpOwotICAgICAgICBmZWF0dXJlID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2xvYWQgKGZlYXR1cmUpOwotICAgICAgICBpZiAoIWZlYXR1cmUpIHsKLSAgICAgICAgICBnX3dhcm5pbmcgKCJDb3VsZCBub3QgbG9hZCBwbHVnaW4gZmVhdHVyZSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKSkgewotICAgICAgICAgIGNvbnN0IGdjaGFyICpwYWRfZGlyW10gPSB7ICJ1bmtub3duIiwic291cmNlIiwic2luayIgfTsKLSAgICAgICAgICBjb25zdCBnY2hhciAqcGFkX3ByZXNbXSA9IHsgImFsd2F5cyIsInNvbWV0aW1lcyIsInJlcXVlc3QiIH07Ci0gICAgICAgICAgR0xpc3QgKnBhZHMsICpwYWQ7Ci0KLSAgICAgICAgICAkZGVidWdfbG9nICgiICBmZWF0dXJlOiAlcyIsIGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZSAoZmVhdHVyZSkpOwotCi0gICAgICAgICAgZmFjdG9yeSA9IEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpOwotICAgICAgICAgIGZhY3RvcmllcyA9IGdfbGlzdF9wcmVwZW5kIChmYWN0b3JpZXMsIGZhY3RvcnkpOwotCi0gICAgICAgICAgaWYgKHJlaW5zcGVjdCkgewotICAgICAgICAgICAgLyogb3V0cHV0IGVsZW1lbnQgZGF0YSAqLwotICAgICAgICAgICAgZnB1dHMgKCIgICAgPGVsZW1lbnQ+XFxuIiwgaW5zcGVjdCk7Ci0gICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoNiwgIm5hbWUiLCBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAibG9uZ25hbWUiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiY2xhc3MiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiZGVzY3JpcHRpb24iLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfREVTQ1JJUFRJT04pKSxpbnNwZWN0KTsKLSAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCg2LCAiYXV0aG9yIiwgZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKGZhY3RvcnksIEdTVF9FTEVNRU5UX01FVEFEQVRBX0FVVEhPUikpLGluc3BlY3QpOwotICAgICAgICAgICAgZnB1dHMgKCIgICAgICA8cGFkcz5cXG4iLCBpbnNwZWN0KTsKLQotICAgICAgICAgICAgLyogb3V0cHV0IHBhZC10ZW1wbGF0ZSBkYXRhICovCi0gICAgICAgICAgICBwYWRzID0gZ19saXN0X2NvcHkgKChHTGlzdCAqKSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9zdGF0aWNfcGFkX3RlbXBsYXRlcyAoZmFjdG9yeSkpOwotICAgICAgICAgICAgcGFkcyA9IGdfbGlzdF9zb3J0IChwYWRzLCBzdGF0aWNfcGFkX3RlbXBsYXRlX2NvbXBhcmUpOwotICAgICAgICAgICAgZm9yIChwYWQgPSBwYWRzOyBwYWQgIT0gTlVMTDsgcGFkID0gcGFkLT5uZXh0KSB7Ci0gICAgICAgICAgICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICpwdCA9IHBhZC0+ZGF0YTsKLQotICAgICAgICAgICAgICBmcHV0cyAoIiAgICAgICAgPGNhcHM+XFxuIiwgaW5zcGVjdCk7Ci0gICAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCgxMCwgIm5hbWUiLCBwdC0+bmFtZV90ZW1wbGF0ZSksaW5zcGVjdCk7Ci0gICAgICAgICAgICAgIGZwdXRzICh4bWxwcmludCgxMCwgImRpcmVjdGlvbiIsIHBhZF9kaXJbcHQtPmRpcmVjdGlvbl0pLGluc3BlY3QpOwotICAgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoMTAsICJwcmVzZW5jZSIsIHBhZF9wcmVzW3B0LT5wcmVzZW5jZV0pLGluc3BlY3QpOwotICAgICAgICAgICAgICBmcHV0cyAoeG1scHJpbnQoMTAsICJkZXRhaWxzIiwgcHQtPnN0YXRpY19jYXBzLnN0cmluZyksaW5zcGVjdCk7Ci0gICAgICAgICAgICAgIGZwdXRzICgiICAgICAgICA8L2NhcHM+XFxuIiwgaW5zcGVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnX2xpc3RfZnJlZSAocGFkcyk7Ci0gICAgICAgICAgICBmcHV0cyAoIiAgICAgIDwvcGFkcz5cXG4gICAgPC9lbGVtZW50PlxcbiIsIGluc3BlY3QpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmZWF0dXJlcyA9IGdfbGlzdF9uZXh0IChmZWF0dXJlcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZWluc3BlY3QpIHsKLSAgICAgICAgZnB1dHMgKCIgIDwvZWxlbWVudHM+XFxuPC9wbHVnaW4+IiwgaW5zcGVjdCk7Ci0gICAgICAgIGZjbG9zZSAoaW5zcGVjdCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19zdHJpbmdfZnJlZSAoeG1sc3RyLCBUUlVFKTsKLQotICAgICRkZWJ1Z19sb2cgKCJudW1iZXIgb2YgZWxlbWVudCBmYWN0b3JpZXM6ICVkIiwgZ19saXN0X2xlbmd0aCAoZmFjdG9yaWVzKSk7Ci0KLSAgICAvKiBhbGxvY2F0ZSB0aGUgb2JqZWN0X3R5cGVzIGFycmF5IHRvIGhvbGQgdGhlbSAqLwotICAgIG9iamVjdF90eXBlcyA9IGdfbmV3MCAoR1R5cGUsIGdfbGlzdF9sZW5ndGggKGZhY3RvcmllcykrJG50eXBlcysxKTsKLQotICAgIGwgPSBmYWN0b3JpZXM7Ci0gICAgaSA9IDA7Ci0KLSAgICAvKiBmaWxsIGl0ICovCi0gICAgd2hpbGUgKGwpIHsKLSAgICAgIGZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChsLT5kYXRhKTsKLSAgICAgIHR5cGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9lbGVtZW50X3R5cGUgKGZhY3RvcnkpOwotICAgICAgaWYgKHR5cGUgIT0gMCkgewotICAgICAgICAkZGVidWdfbG9nICgiYWRkaW5nIHR5cGUgZm9yIGZhY3RvcnkgJXMiLCBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKTsKLSAgICAgICAgb2JqZWN0X3R5cGVzW2krK10gPSB0eXBlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19tZXNzYWdlICgidHlwZSBpbmZvIGZvciBmYWN0b3J5ICVzIG5vdCBmb3VuZCIsCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9mYWN0b3J5X2dldF9tZXRhZGF0YSAoZmFjdG9yeSwgR1NUX0VMRU1FTlRfTUVUQURBVEFfTE9OR05BTUUpKTsKLSAgICAgIH0KLSAgICAgIGwgPSBnX2xpc3RfbmV4dCAobCk7Ci0gICAgfQotCi1FT1QKLQotIyBnZXRfdHlwZSBmdW5jdGlvbnM6Ci1mb3IgKEB0eXBlcykgewotcHJpbnQgT1VUUFVUIDw8RU9UOwotICAgIHR5cGUgPSAkXyAoKTsKLSAgICBpZiAodHlwZSA9PSAwKSB7Ci0gICAgICBnX21lc3NhZ2UgKCIkXyAoKSBkaWRuJ3QgcmV0dXJuIGEgdmFsaWQgdHlwZSIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIG9iamVjdF90eXBlc1tpKytdID0gdHlwZTsKLSAgICB9Ci1FT1QKLX0KLQotIyBJbXBsaWNpdCB0eXBlcyByZXRyaWV2ZWQgZnJvbSBHTGliOgotZm9yIChAaW1wbF90eXBlcykgewotcHJpbnQgT1VUUFVUIDw8RU9UOwotICAgIHR5cGUgPSBnX3R5cGVfZnJvbV9uYW1lICgiJF8iKTsKLSAgICBpZiAodHlwZSA9PSAwKSB7Ci0gICAgICBnX21lc3NhZ2UgKCJJbXBsaWNpdCB0eXBlICRfIG5vdCBmb3VuZCIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIG9iamVjdF90eXBlc1tpKytdID0gdHlwZTsKLSAgICB9Ci1FT1QKLX0KLQotcHJpbnQgT1VUUFVUIDw8RU9UOwotCi0gICAgb2JqZWN0X3R5cGVzW2ldID0gMDsKLQotICAgIC8qIHJlZmVyZW5jZSB0aGUgR09iamVjdENsYXNzIHRvIGluaXRpYWxpemUgdGhlIHBhcmFtIHNwZWMgcG9vbAotICAgICAqIHBvdGVudGlhbGx5IG5lZWRlZCBieSBpbnRlcmZhY2VzLiBTZWUgaHR0cDovL2J1Z3MuZ25vbWUub3JnLzU3MTgyMCAqLwotICAgIGdfb2JqZWN0X2NsYXNzID0gZ190eXBlX2NsYXNzX3JlZiAoR19UWVBFX09CSkVDVCk7Ci0KLSAgICAvKiBOZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIHR5cGVzIGFyZSBsb2FkZWQgaW4gYW5kIGluaXRpYWxpemUKLSAgICAgKiB0aGVpciBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLgotICAgICAqLwotICAgIGZvciAoaT0wOyBvYmplY3RfdHlwZXNbaV07IGkrKykKLSAgICAgIHsKLSAgICAgICAgaWYgKEdfVFlQRV9JU19DTEFTU0VEIChvYmplY3RfdHlwZXNbaV0pKQotICAgICAgICAgIGdfdHlwZV9jbGFzc19yZWYgKG9iamVjdF90eXBlc1tpXSk7Ci0gICAgICAgIGlmIChHX1RZUEVfSVNfSU5URVJGQUNFIChvYmplY3RfdHlwZXNbaV0pKQotICAgICAgICAgIGdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9yZWYgKG9iamVjdF90eXBlc1tpXSk7Ci0gICAgICB9Ci0KLSAgICBnX3R5cGVfY2xhc3NfdW5yZWYgKGdfb2JqZWN0X2NsYXNzKTsKLQotICAgIHJldHVybiBvYmplY3RfdHlwZXM7Ci19Ci0KLS8qCi0gKiBUaGlzIHVzZXMgR09iamVjdCB0eXBlIGZ1bmN0aW9ucyB0byBvdXRwdXQgc2lnbmFsIHByb3RvdHlwZXMgYW5kIHRoZSBvYmplY3QKLSAqIGhpZXJhcmNoeS4KLSAqLwotCi0vKiBUaGUgb3V0cHV0IGZpbGVzICovCi1jb25zdCBnY2hhciAqc2lnbmFsc19maWxlbmFtZSA9ICIkbmV3X3NpZ25hbHNfZmlsZW5hbWUiOwotY29uc3QgZ2NoYXIgKmhpZXJhcmNoeV9maWxlbmFtZSA9ICIkbmV3X2hpZXJhcmNoeV9maWxlbmFtZSI7Ci1jb25zdCBnY2hhciAqaW50ZXJmYWNlc19maWxlbmFtZSA9ICIkbmV3X2ludGVyZmFjZXNfZmlsZW5hbWUiOwotY29uc3QgZ2NoYXIgKnByZXJlcXVpc2l0ZXNfZmlsZW5hbWUgPSAiJG5ld19wcmVyZXF1aXNpdGVzX2ZpbGVuYW1lIjsKLWNvbnN0IGdjaGFyICphcmdzX2ZpbGVuYW1lID0gIiRuZXdfYXJnc19maWxlbmFtZSI7Ci1jb25zdCBnY2hhciAqc2VjdGlvbnNfZmlsZW5hbWUgPSAiJG5ld19zZWN0aW9uc19maWxlbmFtZSI7Ci0KLQotc3RhdGljIHZvaWQgb3V0cHV0X3NpZ25hbHMgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9zaWduYWxzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9zaWduYWwgKEZJTEUgKmZwLCBjb25zdCBnY2hhciAqb2JqZWN0X2NsYXNzX25hbWUsCi0JCQkJICBndWludCBzaWduYWxfaWQpOwotc3RhdGljIGNvbnN0IGdjaGFyICogZ2V0X3R5cGVfbmFtZSAoR1R5cGUgdHlwZSwgZ2Jvb2xlYW4gKiBpc19wb2ludGVyKTsKLXN0YXRpYyB2b2lkIG91dHB1dF9vYmplY3RfaGllcmFyY2h5ICh2b2lkKTsKLXN0YXRpYyB2b2lkIG91dHB1dF9oaWVyYXJjaHkgKEZJTEUgKmZwLCBHVHlwZSB0eXBlLCBndWludCBsZXZlbCk7Ci0KLXN0YXRpYyB2b2lkIG91dHB1dF9vYmplY3RfaW50ZXJmYWNlcyAodm9pZCk7Ci1zdGF0aWMgdm9pZCBvdXRwdXRfaW50ZXJmYWNlcyAoRklMRSAqZnAsIEdUeXBlIHR5cGUpOwotCi1zdGF0aWMgdm9pZCBvdXRwdXRfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X3ByZXJlcXVpc2l0ZXMgKEZJTEUgKmZwLCBHVHlwZSB0eXBlKTsKLQotc3RhdGljIHZvaWQgb3V0cHV0X2FyZ3MgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9hcmdzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOwotCi1zdGF0aWMgdm9pZCBvdXRwdXRfc2VjdGlvbnMgKHZvaWQpOwotc3RhdGljIHZvaWQgb3V0cHV0X29iamVjdF9zZWN0aW9uIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpOwotCi0KLWludAotbWFpbiAoR19HTlVDX1VOVVNFRCBpbnQgYXJnYywgR19HTlVDX1VOVVNFRCBjaGFyICphcmd2W10pCi17Ci0gICRUWVBFX0lOSVRfRlVOQzsKLQotICBnZXRfb2JqZWN0X3R5cGVzICgpOwotCi0gIG91dHB1dF9zaWduYWxzICgpOwotICBvdXRwdXRfb2JqZWN0X2hpZXJhcmNoeSAoKTsKLSAgb3V0cHV0X29iamVjdF9pbnRlcmZhY2VzICgpOwotICBvdXRwdXRfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKCk7Ci0gIG91dHB1dF9hcmdzICgpOwotICAKLSAgb3V0cHV0X3NlY3Rpb25zICgpOwotCi0gIHJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfc2lnbmFscyAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaTsKLQotICBmcCA9IGZvcGVuIChzaWduYWxzX2ZpbGVuYW1lLCAidyIpOwotICBpZiAoZnAgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgc2lnbmFsc19maWxlbmFtZSwgZ19zdHJlcnJvcihlcnJubykpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykKLSAgICBvdXRwdXRfb2JqZWN0X3NpZ25hbHMgKGZwLCBvYmplY3RfdHlwZXNbaV0pOwotCi0gIGZjbG9zZSAoZnApOwotfQotCi1zdGF0aWMgZ2ludAotY29tcGFyZV9zaWduYWxzIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotICBjb25zdCBndWludCAqc2lnbmFsX2EgPSBhOwotICBjb25zdCBndWludCAqc2lnbmFsX2IgPSBiOwotCi0gIHJldHVybiBzdHJjbXAgKGdfc2lnbmFsX25hbWUgKCpzaWduYWxfYSksIGdfc2lnbmFsX25hbWUgKCpzaWduYWxfYikpOwotfQotCi0vKiBUaGlzIG91dHB1dHMgYWxsIHRoZSBzaWduYWxzIG9mIG9uZSBvYmplY3QuICovCi1zdGF0aWMgdm9pZAotb3V0cHV0X29iamVjdF9zaWduYWxzIChGSUxFICpmcCwgR1R5cGUgb2JqZWN0X3R5cGUpCi17Ci0gIGNvbnN0IGdjaGFyICpvYmplY3RfY2xhc3NfbmFtZTsKLSAgZ3VpbnQgKnNpZ25hbHMsIG5fc2lnbmFsczsKLSAgZ3VpbnQgc2lnOwotCi0gIGlmIChHX1RZUEVfSVNfSU5TVEFOVElBVEFCTEUgKG9iamVjdF90eXBlKSB8fAotICAgICAgR19UWVBFX0lTX0lOVEVSRkFDRSAob2JqZWN0X3R5cGUpKQotICAgIHsKLQotICAgICAgb2JqZWN0X2NsYXNzX25hbWUgPSBnX3R5cGVfbmFtZSAob2JqZWN0X3R5cGUpOwotCi0gICAgICBzaWduYWxzID0gZ19zaWduYWxfbGlzdF9pZHMgKG9iamVjdF90eXBlLCAmbl9zaWduYWxzKTsKLSAgICAgIHFzb3J0IChzaWduYWxzLCBuX3NpZ25hbHMsIHNpemVvZiAoZ3VpbnQpLCBjb21wYXJlX3NpZ25hbHMpOwotCi0gICAgICBmb3IgKHNpZyA9IDA7IHNpZyA8IG5fc2lnbmFsczsgc2lnKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgb3V0cHV0X29iamVjdF9zaWduYWwgKGZwLCBvYmplY3RfY2xhc3NfbmFtZSwgc2lnbmFsc1tzaWddKTsKLSAgICAgICAgfQotICAgICAgZ19mcmVlIChzaWduYWxzKTsKLSAgIH0KLX0KLQotCi0vKiBUaGlzIG91dHB1dHMgb25lIHNpZ25hbC4gKi8KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb2JqZWN0X3NpZ25hbCAoRklMRSAqZnAsCi0JCSAgICAgIGNvbnN0IGdjaGFyICpvYmplY3RfbmFtZSwKLQkJICAgICAgZ3VpbnQgc2lnbmFsX2lkKQotewotICBHU2lnbmFsUXVlcnkgcXVlcnlfaW5mbzsKLSAgY29uc3QgZ2NoYXIgKnR5cGVfbmFtZSwgKnJldF90eXBlLCAqb2JqZWN0X2FyZywgKmFyZ19uYW1lOwotICBnY2hhciAqcG9zLCAqb2JqZWN0X2FyZ19sb3dlcjsKLSAgZ2Jvb2xlYW4gaXNfcG9pbnRlcjsKLSAgZ2NoYXIgYnVmZmVyWzEwMjRdOwotICBndWludCBpLCBwYXJhbTsKLSAgZ2ludCBwYXJhbV9udW0sIHdpZGdldF9udW0sIGV2ZW50X251bSwgY2FsbGJhY2tfbnVtOwotICBnaW50ICphcmdfbnVtOwotICBnY2hhciBzaWduYWxfbmFtZVsxMjhdOwotICBnY2hhciBmbGFnc1sxNl07Ci0KLSAgJGRlYnVnX2xvZyAoIk9iamVjdDogJXMgU2lnbmFsOiAldSIsIG9iamVjdF9uYW1lLCBzaWduYWxfaWQpOwotCi0gIHBhcmFtX251bSA9IDE7Ci0gIHdpZGdldF9udW0gPSBldmVudF9udW0gPSBjYWxsYmFja19udW0gPSAwOwotCi0gIGdfc2lnbmFsX3F1ZXJ5IChzaWduYWxfaWQsICZxdWVyeV9pbmZvKTsKLQotICAvKiBPdXRwdXQgdGhlIHNpZ25hbCBvYmplY3QgdHlwZSBhbmQgdGhlIGFyZ3VtZW50IG5hbWUuIFdlIGFzc3VtZSB0aGUKLSAgICAgdHlwZSBpcyBhIHBvaW50ZXIgLSBJIHRoaW5rIHRoYXQgaXMgT0suIFdlIHJlbW92ZSAiR3RrIiBvciAiR25vbWUiIGFuZAotICAgICBjb252ZXJ0IHRvIGxvd2VyIGNhc2UgZm9yIHRoZSBhcmd1bWVudCBuYW1lLiAqLwotICBwb3MgPSBidWZmZXI7Ci0gIHNwcmludGYgKHBvcywgIiVzICIsIG9iamVjdF9uYW1lKTsKLSAgcG9zICs9IHN0cmxlbiAocG9zKTsKLQotICAvKiBUcnkgdG8gY29tZSB1cCB3aXRoIGEgc2Vuc2libGUgdmFyaWFibGUgbmFtZSBmb3IgdGhlIGZpcnN0IGFyZwotICAgKiBJdCBjaG9wcyBvZmYgMiBrbm93IHByZWZpeGVzIDovIGFuZCBtYWtlcyB0aGUgbmFtZSBsb3dlcmNhc2UKLSAgICogSXQgc2hvdWxkIHJlcGxhY2UgbG93ZXJjYXNlIC0+IHVwcGVyY2FzZSB3aXRoICdfJwotICAgKiBHRmlsZU1vbml0b3IgLT4gZmlsZV9tb25pdG9yCi0gICAqIEdJT0V4dGVuc2lvblBvaW50IC0+IGV4dGVuc2lvbl9wb2ludAotICAgKiBHdGtUcmVlVmlldyAtPiB0cmVlX3ZpZXcKLSAgICogaWYgMm5kIGNoYXIgaXMgdXBwZXIgY2FzZSB0b28KLSAgICogICBzZWFyY2ggZm9yIGZpcnN0IGxvd2VyIGNhc2UgYW5kIGdvIGJhY2sgb25lIGNoYXIKLSAgICogZWxzZQotICAgKiAgIHNlYXJjaCBmb3IgbmV4dCB1cHBlciBjYXNlCi0gICAqLwotICBpZiAoIXN0cm5jbXAgKG9iamVjdF9uYW1lLCAiR3RrIiwgMykpCi0gICAgICBvYmplY3RfYXJnID0gb2JqZWN0X25hbWUgKyAzOwotICBlbHNlIGlmICghc3RybmNtcCAob2JqZWN0X25hbWUsICJHbm9tZSIsIDUpKQotICAgICAgb2JqZWN0X2FyZyA9IG9iamVjdF9uYW1lICsgNTsKLSAgZWxzZQotICAgICAgb2JqZWN0X2FyZyA9IG9iamVjdF9uYW1lOwotCi0gIG9iamVjdF9hcmdfbG93ZXIgPSBnX2FzY2lpX3N0cmRvd24gKG9iamVjdF9hcmcsIC0xKTsKLSAgc3ByaW50ZiAocG9zLCAiKiVzXFxuIiwgb2JqZWN0X2FyZ19sb3dlcik7Ci0gIHBvcyArPSBzdHJsZW4gKHBvcyk7Ci0gIGlmICghc3RybmNtcCAob2JqZWN0X2FyZ19sb3dlciwgIndpZGdldCIsIDYpKQotICAgIHdpZGdldF9udW0gPSAyOwotICBnX2ZyZWUob2JqZWN0X2FyZ19sb3dlcik7Ci0KLSAgLyogQ29udmVydCBzaWduYWwgbmFtZSB0byB1c2UgdW5kZXJzY29yZXMgcmF0aGVyIHRoYW4gZGFzaGVzICctJy4gKi8KLSAgc3RybmNweSAoc2lnbmFsX25hbWUsIHF1ZXJ5X2luZm8uc2lnbmFsX25hbWUsIDEyNyk7Ci0gIHNpZ25hbF9uYW1lWzEyN10gPSAnXFwwJzsKLSAgZm9yIChpID0gMDsgc2lnbmFsX25hbWVbaV07IGkrKykKLSAgICB7Ci0gICAgICBpZiAoc2lnbmFsX25hbWVbaV0gPT0gJy0nKQotCXNpZ25hbF9uYW1lW2ldID0gJ18nOwotICAgIH0KLQotICAvKiBPdXRwdXQgdGhlIHNpZ25hbCBwYXJhbWV0ZXJzLiAqLwotICBmb3IgKHBhcmFtID0gMDsgcGFyYW0gPCBxdWVyeV9pbmZvLm5fcGFyYW1zOyBwYXJhbSsrKQotICAgIHsKLSAgICAgIHR5cGVfbmFtZSA9IGdldF90eXBlX25hbWUgKHF1ZXJ5X2luZm8ucGFyYW1fdHlwZXNbcGFyYW1dICYgfkdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFLCAmaXNfcG9pbnRlcik7Ci0KLSAgICAgIC8qIE1vc3QgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjayBhcmUgY2FsbGVkICJhcmcxIiwgImFyZzIiLCBldGMuCi0gICAgICAgICBHdGtXaWRnZXRzIGFyZSBjYWxsZWQgIndpZGdldCIsICJ3aWRnZXQyIiwgLi4uCi0gICAgICAgICBHdGtDYWxsYmFja3MgYXJlIGNhbGxlZCAiY2FsbGJhY2siLCAiY2FsbGJhY2syIiwgLi4uICovCi0gICAgICBpZiAoIXN0cmNtcCAodHlwZV9uYW1lLCAiR3RrV2lkZ2V0IikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdfbmFtZSA9ICJ3aWRnZXQiOwotICAgICAgICAgIGFyZ19udW0gPSAmd2lkZ2V0X251bTsKLSAgICAgICAgfQotICAgICAgZWxzZSBpZiAoIXN0cmNtcCAodHlwZV9uYW1lLCAiR3RrQ2FsbGJhY2siKQotICAgICAgICAgICAgICAgfHwgIXN0cmNtcCAodHlwZV9uYW1lLCAiR3RrQ0NhbGxiYWNrIikpCi0gICAgICAgIHsKLSAgICAgICAgICBhcmdfbmFtZSA9ICJjYWxsYmFjayI7Ci0gICAgICAgICAgYXJnX251bSA9ICZjYWxsYmFja19udW07Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGFyZ19uYW1lID0gImFyZyI7Ci0gICAgICAgICAgYXJnX251bSA9ICZwYXJhbV9udW07Ci0gICAgICAgIH0KLSAgICAgIHNwcmludGYgKHBvcywgIiVzICIsIHR5cGVfbmFtZSk7Ci0gICAgICBwb3MgKz0gc3RybGVuIChwb3MpOwotCi0gICAgICBpZiAoIWFyZ19udW0gfHwgKmFyZ19udW0gPT0gMCkKLSAgICAgICAgc3ByaW50ZiAocG9zLCAiJXMlc1xcbiIsIGlzX3BvaW50ZXIgPyAiKiIgOiAiICIsIGFyZ19uYW1lKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc3ByaW50ZiAocG9zLCAiJXMlcyVpXFxuIiwgaXNfcG9pbnRlciA/ICIqIiA6ICIgIiwgYXJnX25hbWUsCi0gICAgICAgICAgICAgICAgICphcmdfbnVtKTsKLSAgICAgIHBvcyArPSBzdHJsZW4gKHBvcyk7Ci0KLSAgICAgIGlmIChhcmdfbnVtKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCphcmdfbnVtID09IDApCi0gICAgICAgICAgICAqYXJnX251bSA9IDI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgKmFyZ19udW0gKz0gMTsKLSAgICAgICAgfQotICAgIH0KLQotICBwb3MgPSBmbGFnczsKLSAgLyogV2UgdXNlIG9uZS1jaGFyYWN0ZXIgZmxhZ3MgZm9yIHNpbXBsaWNpdHkuICovCi0gIGlmIChxdWVyeV9pbmZvLnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX1JVTl9GSVJTVCkKLSAgICAqcG9zKysgPSAnZic7Ci0gIGlmIChxdWVyeV9pbmZvLnNpZ25hbF9mbGFncyAmIEdfU0lHTkFMX1JVTl9MQVNUKQotICAgICpwb3MrKyA9ICdsJzsKLSAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfUlVOX0NMRUFOVVApCi0gICAgKnBvcysrID0gJ2MnOwotICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9OT19SRUNVUlNFKQotICAgICpwb3MrKyA9ICdyJzsKLSAgaWYgKHF1ZXJ5X2luZm8uc2lnbmFsX2ZsYWdzICYgR19TSUdOQUxfREVUQUlMRUQpCi0gICAgKnBvcysrID0gJ2QnOwotICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9BQ1RJT04pCi0gICAgKnBvcysrID0gJ2EnOwotICBpZiAocXVlcnlfaW5mby5zaWduYWxfZmxhZ3MgJiBHX1NJR05BTF9OT19IT09LUykKLSAgICAqcG9zKysgPSAnaCc7Ci0gICpwb3MgPSAwOwotCi0gIC8qIE91dHB1dCB0aGUgcmV0dXJuIHR5cGUgYW5kIGZ1bmN0aW9uIG5hbWUuICovCi0gIHJldF90eXBlID0gZ2V0X3R5cGVfbmFtZSAocXVlcnlfaW5mby5yZXR1cm5fdHlwZSAmIH5HX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSwgJmlzX3BvaW50ZXIpOwotCi0gIGZwcmludGYgKGZwLAotCSAgICI8U0lHTkFMPlxcbjxOQU1FPiVzOjolczwvTkFNRT5cXG48UkVUVVJOUz4lcyVzPC9SRVRVUk5TPlxcbjxGTEFHUz4lczwvRkxBR1M+XFxuJXM8L1NJR05BTD5cXG5cXG4iLAotCSAgIG9iamVjdF9uYW1lLCBxdWVyeV9pbmZvLnNpZ25hbF9uYW1lLCByZXRfdHlwZSwgaXNfcG9pbnRlciA/ICIqIiA6ICIiLCBmbGFncywgYnVmZmVyKTsKLX0KLQotCi0vKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgdG8gdXNlIGZvciBhIHNpZ25hbCBhcmd1bWVudCBvciByZXR1cm4gdmFsdWUsIGdpdmVuCi0gICB0aGUgR3RrVHlwZSBmcm9tIHRoZSBzaWduYWwgaW5mby4gSXQgYWxzbyBzZXRzIGlzX3BvaW50ZXIgdG8gVFJVRSBpZiB0aGUKLSAgIGFyZ3VtZW50IG5lZWRzIGEgJyonIHNpbmNlIGl0IGlzIGEgcG9pbnRlci4gKi8KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nZXRfdHlwZV9uYW1lIChHVHlwZSB0eXBlLCBnYm9vbGVhbiAqIGlzX3BvaW50ZXIpCi17Ci0gIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7Ci0KLSAgKmlzX3BvaW50ZXIgPSBGQUxTRTsKLSAgdHlwZV9uYW1lID0gZ190eXBlX25hbWUgKHR5cGUpOwotCi0gIHN3aXRjaCAodHlwZSkgewotICBjYXNlIEdfVFlQRV9OT05FOgotICBjYXNlIEdfVFlQRV9DSEFSOgotICBjYXNlIEdfVFlQRV9VQ0hBUjoKLSAgY2FzZSBHX1RZUEVfQk9PTEVBTjoKLSAgY2FzZSBHX1RZUEVfSU5UOgotICBjYXNlIEdfVFlQRV9VSU5UOgotICBjYXNlIEdfVFlQRV9MT05HOgotICBjYXNlIEdfVFlQRV9VTE9ORzoKLSAgY2FzZSBHX1RZUEVfRkxPQVQ6Ci0gIGNhc2UgR19UWVBFX0RPVUJMRToKLSAgY2FzZSBHX1RZUEVfUE9JTlRFUjoKLSAgICAvKiBUaGVzZSBhbGwgaGF2ZSBub3JtYWwgQyB0eXBlIG5hbWVzIHNvIHRoZXkgYXJlIE9LLiAqLwotICAgIHJldHVybiB0eXBlX25hbWU7Ci0KLSAgY2FzZSBHX1RZUEVfU1RSSU5HOgotICAgIC8qIEEgR3RrU3RyaW5nIGlzIHJlYWxseSBhIGdjaGFyKi4gKi8KLSAgICAqaXNfcG9pbnRlciA9IFRSVUU7Ci0gICAgcmV0dXJuICJnY2hhciI7Ci0KLSAgY2FzZSBHX1RZUEVfRU5VTToKLSAgY2FzZSBHX1RZUEVfRkxBR1M6Ci0gICAgLyogV2UgdXNlIGEgZ2ludCBmb3IgYm90aCBvZiB0aGVzZS4gSG9wZWZ1bGx5IGEgc3VidHlwZSB3aXRoIGEgZGVjZW50Ci0gICAgICAgbmFtZSB3aWxsIGJlIHJlZ2lzdGVyZWQgYW5kIHVzZWQgaW5zdGVhZCwgYXMgR1RLKyBkb2VzIGl0c2VsZi4gKi8KLSAgICByZXR1cm4gImdpbnQiOwotCi0gIGNhc2UgR19UWVBFX0JPWEVEOgotICAgIC8qIFRoZSBib3hlZCB0eXBlIHNob3VsZG4ndCBiZSB1c2VkIGl0c2VsZiwgb25seSBzdWJ0eXBlcy4gVGhvdWdoIHdlCi0gICAgICAgcmV0dXJuICdncG9pbnRlcicganVzdCBpbiBjYXNlLiAqLwotICAgIHJldHVybiAiZ3BvaW50ZXIiOwotCi0gIGNhc2UgR19UWVBFX1BBUkFNOgotICAgIC8qIEEgR1BhcmFtIGlzIHJlYWxseSBhIEdQYXJhbVNwZWMqLiAqLwotICAgICppc19wb2ludGVyID0gVFJVRTsKLSAgICByZXR1cm4gIkdQYXJhbVNwZWMiOwotCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9OICgyLCAyNSwgOSkKLSAgY2FzZSBHX1RZUEVfVkFSSUFOVDoKLSAgICAqaXNfcG9pbnRlciA9IFRSVUU7Ci0gICAgcmV0dXJuICJHVmFyaWFudCI7Ci0jZW5kaWYKLQotZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotCi0gIC8qIEZvciBhbGwgR09iamVjdCBzdWJjbGFzc2VzIHdlIGNhbiB1c2UgdGhlIGNsYXNzIG5hbWUgd2l0aCBhICIqIiwKLSAgICAgZS5nLiAnR3RrV2lkZ2V0IConLiAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9PQkpFQ1QpKQotICAgICppc19wb2ludGVyID0gVFJVRTsKLQotICAvKiBBbHNvIGNhdGNoIG5vbiBHT2JqZWN0IHJvb3QgdHlwZXMgKi8KLSAgaWYgKEdfVFlQRV9JU19DTEFTU0VEICh0eXBlKSkKLSAgICAqaXNfcG9pbnRlciA9IFRSVUU7Ci0KLSAgLyogQWxsIGJveGVkIHN1YnR5cGVzIHdpbGwgYmUgcG9pbnRlcnMgYXMgd2VsbC4gKi8KLSAgLyogRXhjZXB0aW9uOiBHU3RydiAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9CT1hFRCkgJiYKLSAgICAgICFnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX1NUUlYpKQotICAgICppc19wb2ludGVyID0gVFJVRTsKLQotICAvKiBBbGwgcG9pbnRlciBzdWJ0eXBlcyB3aWxsIGJlIHBvaW50ZXJzIGFzIHdlbGwuICovCi0gIGlmIChnX3R5cGVfaXNfYSAodHlwZSwgR19UWVBFX1BPSU5URVIpKQotICAgICppc19wb2ludGVyID0gVFJVRTsKLQotICAvKiBCdXQgZW51bXMgYXJlIG5vdCAqLwotICBpZiAoZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9FTlVNKSB8fAotICAgICAgZ190eXBlX2lzX2EgKHR5cGUsIEdfVFlQRV9GTEFHUykpCi0gICAgKmlzX3BvaW50ZXIgPSBGQUxTRTsKLQotICByZXR1cm4gdHlwZV9uYW1lOwotfQotCi0KLS8qIFRoaXMgb3V0cHV0cyB0aGUgaGllcmFyY2h5IG9mIGFsbCBvYmplY3RzIHdoaWNoIGhhdmUgYmVlbiBpbml0aWFsaXplZCwKLSAgIGkuZS4gYnkgY2FsbGluZyB0aGVpciBYWFhfZ2V0X3R5cGUoKSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gKi8KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb2JqZWN0X2hpZXJhcmNoeSAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaSxqOwotICBHVHlwZSByb290LCB0eXBlOwotICBHVHlwZSByb290X3R5cGVzWyRudHlwZXNdID0geyBHX1RZUEVfSU5WQUxJRCwgfTsKLQotICBmcCA9IGZvcGVuIChoaWVyYXJjaHlfZmlsZW5hbWUsICJ3Iik7Ci0gIGlmIChmcCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGU6ICVzIDogJXMiLCBoaWVyYXJjaHlfZmlsZW5hbWUsIGdfc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIG91dHB1dF9oaWVyYXJjaHkgKGZwLCBHX1RZUEVfT0JKRUNULCAwKTsKLSAgb3V0cHV0X2hpZXJhcmNoeSAoZnAsIEdfVFlQRV9JTlRFUkZBQ0UsIDApOwotCi0gIGZvciAoaT0wOyBvYmplY3RfdHlwZXNbaV07IGkrKykgewotICAgIHJvb3QgPSBvYmplY3RfdHlwZXNbaV07Ci0gICAgd2hpbGUgKCh0eXBlID0gZ190eXBlX3BhcmVudCAocm9vdCkpKSB7Ci0gICAgICByb290ID0gdHlwZTsKLSAgICB9Ci0gICAgaWYgKChyb290ICE9IEdfVFlQRV9PQkpFQ1QpICYmIChyb290ICE9IEdfVFlQRV9JTlRFUkZBQ0UpKSB7Ci0gICAgICBmb3IgKGo9MDsgcm9vdF90eXBlc1tqXTsgaisrKSB7Ci0gICAgICAgIGlmIChyb290ID09IHJvb3RfdHlwZXNbal0pIHsKLSAgICAgICAgICByb290ID0gR19UWVBFX0lOVkFMSUQ7IGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZihyb290KSB7Ci0gICAgICAgIHJvb3RfdHlwZXNbal0gPSByb290OwotICAgICAgICBvdXRwdXRfaGllcmFyY2h5IChmcCwgcm9vdCwgMCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZmNsb3NlIChmcCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbXBhcmVfdHlwZXMgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0gIGNvbnN0IGNoYXIgKm5hID0gZ190eXBlX25hbWUgKCooKEdUeXBlICopYSkpOwotICBjb25zdCBjaGFyICpuYiA9IGdfdHlwZV9uYW1lICgqKChHVHlwZSAqKWIpKTsKLQotICByZXR1cm4gZ19zdHJjbXAwIChuYSwgbmIpOwotfQotCi0KLS8qIFRoaXMgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5IHRvIG91dHB1dCB0aGUgaGllcmFyY2h5IG9mIGEgb2JqZWN0LiAqLwotc3RhdGljIHZvaWQKLW91dHB1dF9oaWVyYXJjaHkgKEZJTEUgICpmcCwKLQkJICBHVHlwZSAgdHlwZSwKLQkJICBndWludCAgIGxldmVsKQotewotICBndWludCBpOwotICBHVHlwZSAqY2hpbGRyZW47Ci0gIGd1aW50IG5fY2hpbGRyZW47Ci0KLSAgaWYgKCF0eXBlKQotICAgIHJldHVybjsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGV2ZWw7IGkrKykKLSAgICBmcHJpbnRmIChmcCwgIiAgIik7Ci0gIGZwcmludGYgKGZwLCAiJXNcXG4iLCBnX3R5cGVfbmFtZSAodHlwZSkpOwotCi0gIGNoaWxkcmVuID0gZ190eXBlX2NoaWxkcmVuICh0eXBlLCAmbl9jaGlsZHJlbik7Ci0gIHFzb3J0IChjaGlsZHJlbiwgbl9jaGlsZHJlbiwgc2l6ZW9mIChHVHlwZSksIGNvbXBhcmVfdHlwZXMpOwotCi0KLSAgZm9yIChpPTA7IGkgPCBuX2NoaWxkcmVuOyBpKyspCi0gICAgb3V0cHV0X2hpZXJhcmNoeSAoZnAsIGNoaWxkcmVuW2ldLCBsZXZlbCArIDEpOwotCi0gIGdfZnJlZSAoY2hpbGRyZW4pOwotfQotCi1zdGF0aWMgdm9pZCBvdXRwdXRfb2JqZWN0X2ludGVyZmFjZXMgKHZvaWQpCi17Ci0gIGd1aW50IGk7Ci0gIEZJTEUgKmZwOwotCi0gIGZwID0gZm9wZW4gKGludGVyZmFjZXNfZmlsZW5hbWUsICJ3Iik7Ci0gIGlmIChmcCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGU6ICVzIDogJXMiLCBpbnRlcmZhY2VzX2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBvdXRwdXRfaW50ZXJmYWNlcyAoZnAsIEdfVFlQRV9PQkpFQ1QpOwotCi0gIGZvciAoaSA9IDA7IG9iamVjdF90eXBlc1tpXTsgaSsrKQotICAgIHsKLSAgICAgIGlmICghZ190eXBlX3BhcmVudCAob2JqZWN0X3R5cGVzW2ldKSAmJgotICAgICAgICAgIChvYmplY3RfdHlwZXNbaV0gIT0gR19UWVBFX09CSkVDVCkgJiYKLSAgICAgICAgICBHX1RZUEVfSVNfSU5TVEFOVElBVEFCTEUgKG9iamVjdF90eXBlc1tpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBvdXRwdXRfaW50ZXJmYWNlcyAoZnAsIG9iamVjdF90eXBlc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gIGZjbG9zZSAoZnApOwotfQotCi1zdGF0aWMgdm9pZAotb3V0cHV0X2ludGVyZmFjZXMgKEZJTEUgICpmcCwKLQkJICAgR1R5cGUgIHR5cGUpCi17Ci0gIGd1aW50IGk7Ci0gIEdUeXBlICpjaGlsZHJlbiwgKmludGVyZmFjZXM7Ci0gIGd1aW50IG5fY2hpbGRyZW4sIG5faW50ZXJmYWNlczsKLQotICBpZiAoIXR5cGUpCi0gICAgcmV0dXJuOwotCi0gIGludGVyZmFjZXMgPSBnX3R5cGVfaW50ZXJmYWNlcyAodHlwZSwgJm5faW50ZXJmYWNlcyk7Ci0KLSAgaWYgKG5faW50ZXJmYWNlcyA+IDApCi0gICAgewotICAgICAgZnByaW50ZiAoZnAsICIlcyIsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0gICAgICBmb3IgKGk9MDsgaSA8IG5faW50ZXJmYWNlczsgaSsrKQotICAgICAgICAgIGZwcmludGYgKGZwLCAiICVzIiwgZ190eXBlX25hbWUgKGludGVyZmFjZXNbaV0pKTsKLSAgICAgIGZwcmludGYgKGZwLCAiXFxuIik7Ci0gICAgIH0KLSAgZ19mcmVlIChpbnRlcmZhY2VzKTsKLQotICBjaGlsZHJlbiA9IGdfdHlwZV9jaGlsZHJlbiAodHlwZSwgJm5fY2hpbGRyZW4pOwotCi0gIGZvciAoaT0wOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQotICAgIG91dHB1dF9pbnRlcmZhY2VzIChmcCwgY2hpbGRyZW5baV0pOwotCi0gIGdfZnJlZSAoY2hpbGRyZW4pOwotfQotCi1zdGF0aWMgdm9pZCBvdXRwdXRfaW50ZXJmYWNlX3ByZXJlcXVpc2l0ZXMgKHZvaWQpCi17Ci0gIEZJTEUgKmZwOwotCi0gIGZwID0gZm9wZW4gKHByZXJlcXVpc2l0ZXNfZmlsZW5hbWUsICJ3Iik7Ci0gIGlmIChmcCA9PSBOVUxMKQotICAgIHsKLSAgICAgIGdfd2FybmluZyAoIkNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGU6ICVzIDogJXMiLCBwcmVyZXF1aXNpdGVzX2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICBvdXRwdXRfcHJlcmVxdWlzaXRlcyAoZnAsIEdfVFlQRV9JTlRFUkZBQ0UpOwotICBmY2xvc2UgKGZwKTsKLX0KLQotc3RhdGljIHZvaWQKLW91dHB1dF9wcmVyZXF1aXNpdGVzIChGSUxFICAqZnAsCi0JCSAgICAgIEdUeXBlICB0eXBlKQotewotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLDEsMCkKLSAgZ3VpbnQgaTsKLSAgR1R5cGUgKmNoaWxkcmVuLCAqcHJlcmVxdWlzaXRlczsKLSAgZ3VpbnQgbl9jaGlsZHJlbiwgbl9wcmVyZXF1aXNpdGVzOwotCi0gIGlmICghdHlwZSkKLSAgICByZXR1cm47Ci0KLSAgcHJlcmVxdWlzaXRlcyA9IGdfdHlwZV9pbnRlcmZhY2VfcHJlcmVxdWlzaXRlcyAodHlwZSwgJm5fcHJlcmVxdWlzaXRlcyk7Ci0KLSAgaWYgKG5fcHJlcmVxdWlzaXRlcyA+IDApCi0gICAgewotICAgICAgZnByaW50ZiAoZnAsICIlcyIsIGdfdHlwZV9uYW1lICh0eXBlKSk7Ci0gICAgICBmb3IgKGk9MDsgaSA8IG5fcHJlcmVxdWlzaXRlczsgaSsrKQotICAgICAgICAgIGZwcmludGYgKGZwLCAiICVzIiwgZ190eXBlX25hbWUgKHByZXJlcXVpc2l0ZXNbaV0pKTsKLSAgICAgIGZwcmludGYgKGZwLCAiXFxuIik7Ci0gICAgIH0KLSAgZ19mcmVlIChwcmVyZXF1aXNpdGVzKTsKLQotICBjaGlsZHJlbiA9IGdfdHlwZV9jaGlsZHJlbiAodHlwZSwgJm5fY2hpbGRyZW4pOwotCi0gIGZvciAoaT0wOyBpIDwgbl9jaGlsZHJlbjsgaSsrKQotICAgIG91dHB1dF9wcmVyZXF1aXNpdGVzIChmcCwgY2hpbGRyZW5baV0pOwotCi0gIGdfZnJlZSAoY2hpbGRyZW4pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfYXJncyAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaTsKLQotICBmcCA9IGZvcGVuIChhcmdzX2ZpbGVuYW1lLCAidyIpOwotICBpZiAoZnAgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBnX3dhcm5pbmcgKCJDb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlOiAlcyA6ICVzIiwgYXJnc19maWxlbmFtZSwgZ19zdHJlcnJvcihlcnJubykpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykgewotICAgIG91dHB1dF9vYmplY3RfYXJncyAoZnAsIG9iamVjdF90eXBlc1tpXSk7Ci0gIH0KLQotICBmY2xvc2UgKGZwKTsKLX0KLQotc3RhdGljIGdpbnQKLWNvbXBhcmVfcGFyYW1fc3BlY3MgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCi17Ci0gIEdQYXJhbVNwZWMgKnNwZWNfYSA9ICooR1BhcmFtU3BlYyAqKilhOwotICBHUGFyYW1TcGVjICpzcGVjX2IgPSAqKEdQYXJhbVNwZWMgKiopYjsKLQotICByZXR1cm4gc3RyY21wIChnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHNwZWNfYSksIGdfcGFyYW1fc3BlY19nZXRfbmFtZSAoc3BlY19iKSk7Ci19Ci0KLS8qIEl0cyBjb21tb24gdG8gaGF2ZSB1bnNpZ25lZCBwcm9wZXJ0aWVzIHJlc3RyaWN0ZWQKLSAqIHRvIHRoZSBzaWduZWQgcmFuZ2UuIFRoZXJlZm9yZSB3ZSBtYWtlIHRoaXMgbG9vawotICogYSBiaXQgbmljZXIgYnkgc3BlbGxpbmcgb3V0IHRoZSBtYXggY29uc3RhbnRzLgotICovCi0KLS8qIERvbid0IHVzZSAiPT0iIHdpdGggZmxvYXRzLCBpdCBtaWdodCB0cmlnZ2VyIGEgZ2NjIHdhcm5pbmcuICAqLwotI2RlZmluZSBHVEtET0NfQ09NUEFSRV9GTE9BVCh4LCB5KSAoeCA8PSB5ICYmIHggPj0geSkKLQotc3RhdGljIGdjaGFyKgotZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChnZG91YmxlIHZhbHVlKQotewotICBnY2hhciAqZGVzYzsKLQotICBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01BWERPVUJMRSkpCi0gICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhET1VCTEUiKTsKLSAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01JTkRPVUJMRSkpCi0gICAgZGVzYyA9IGdfc3RyZHVwICgiR19NSU5ET1VCTEUiKTsKLSAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCAtR19NQVhET1VCTEUpKQotICAgIGRlc2MgPSBnX3N0cmR1cCAoIi1HX01BWERPVUJMRSIpOwotICBlbHNlIGlmIChHVEtET0NfQ09NUEFSRV9GTE9BVCAodmFsdWUsIEdfTUFYRkxPQVQpKQotICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYRkxPQVQiKTsKLSAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHZhbHVlLCBHX01JTkZMT0FUKSkKLSAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTkZMT0FUIik7Ci0gIGVsc2UgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUICh2YWx1ZSwgLUdfTUFYRkxPQVQpKQotICAgIGRlc2MgPSBnX3N0cmR1cCAoIi1HX01BWEZMT0FUIik7Ci0gIGVsc2V7Ci0gICAgLyogbWFrZSBzdXJlIGZsb2F0cyBhcmUgb3V0cHV0IHdpdGggYSBkZWNpbWFsIGRvdCBpcnJlc3BlY3RpdmUgb2YKLSAgICAqIGN1cnJlbnQgbG9jYWxlLiBVc2UgZm9ybWF0ZCBzaW5jZSB3ZSB3YW50IGh1bWFuLXJlYWRhYmxlIG51bWJlcnMKLSAgICAqIGFuZCBkbyBub3QgbmVlZCB0aGUgZXhhY3Qgc2FtZSBiaXQgcmVwcmVzZW50YXRpb24gd2hlbiBkZXNlcmlhbGlzaW5nICovCi0gICAgZGVzYyA9IGdfbWFsbG9jMCAoR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUpOwotICAgIGdfYXNjaWlfZm9ybWF0ZCAoZGVzYywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsICIlZyIsIHZhbHVlKTsKLSAgfQotCi0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgZ2NoYXIqCi1kZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKGdzaXplIHNpemUsIGdpbnQ2NCB2YWx1ZSkKLXsKLSAgZ2NoYXIgKmRlc2MgPSBOVUxMOwotCi0gIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgODoKLSAgICAgIGlmICh2YWx1ZSA9PSBHX01BWElOVDY0KQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVDY0Iik7Ci0gICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01JTklOVDY0KQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01JTklOVDY0Iik7Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIDQ6Ci0gICAgICBpZiAoc2l6ZW9mIChpbnQpID09IDQpIHsKLSAgICAgICAgaWYgKHZhbHVlID09IEdfTUFYSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUlOSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlOSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IChnaW50NjQpR19NQVhVSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOwotICAgICAgfQotICAgICAgaWYgKHZhbHVlID09IEdfTUFYTE9ORykKLSAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhMT05HIik7Ci0gICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01JTkxPTkcpCi0gICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlOTE9ORyIpOwotICAgICAgZWxzZSBpZiAodmFsdWUgPT0gKGdpbnQ2NClHX01BWFVMT05HKQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVMT05HIik7Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIDI6Ci0gICAgICBpZiAoc2l6ZW9mIChpbnQpID09IDIpIHsKLSAgICAgICAgaWYgKHZhbHVlID09IEdfTUFYSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUlOSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUlOSU5UIik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IChnaW50NjQpR19NQVhVSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmICghZGVzYykKLSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HSU5UNjRfRk9STUFULCB2YWx1ZSk7Ci0KLSAgcmV0dXJuIGRlc2M7Ci19Ci0KLXN0YXRpYyBnY2hhcioKLWRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChnc2l6ZSBzaXplLCBndWludDY0IHZhbHVlKQotewotICBnY2hhciAqZGVzYyA9IE5VTEw7Ci0KLSAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSA4OgotICAgICAgaWYgKHZhbHVlID09IEdfTUFYSU5UNjQpCi0gICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYSU5UNjQiKTsKLSAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUFYVUlOVDY0KQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWFVJTlQ2NCIpOwotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSA0OgotICAgICAgaWYgKHNpemVvZiAoaW50KSA9PSA0KSB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSAoZ3VpbnQ2NClHX01BWElOVCkKLSAgICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWElOVCIpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBHX01BWFVJTlQpCi0gICAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhVSU5UIik7Ci0gICAgICB9Ci0gICAgICBpZiAodmFsdWUgPT0gKGd1aW50NjQpR19NQVhMT05HKQotICAgICAgICBkZXNjID0gZ19zdHJkdXAgKCJHX01BWExPTkciKTsKLSAgICAgIGVsc2UgaWYgKHZhbHVlID09IEdfTUFYVUxPTkcpCi0gICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUxPTkciKTsKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgMjoKLSAgICAgIGlmIChzaXplb2YgKGludCkgPT0gMikgewotICAgICAgICBpZiAodmFsdWUgPT0gKGd1aW50NjQpR19NQVhJTlQpCi0gICAgICAgICAgZGVzYyA9IGdfc3RyZHVwICgiR19NQVhJTlQiKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gR19NQVhVSU5UKQotICAgICAgICAgIGRlc2MgPSBnX3N0cmR1cCAoIkdfTUFYVUlOVCIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmICghZGVzYykKLSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HVUlOVDY0X0ZPUk1BVCwgdmFsdWUpOwotCi0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgZ2NoYXIqCi1kZXNjcmliZV90eXBlIChHUGFyYW1TcGVjICpzcGVjKQotewotICBnY2hhciAqZGVzYzsKLSAgZ2NoYXIgKmxvd2VyOwotICBnY2hhciAqdXBwZXI7Ci0KLSAgaWYgKEdfSVNfUEFSQU1fU1BFQ19DSEFSIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjQ2hhciAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfQ0hBUiAoc3BlYyk7Ci0KLSAgICAgIGxvd2VyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2NoYXIpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdjaGFyKSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOSU5UOCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWElOVDgpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDgpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhJTlQ4KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUNoYXIgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1Y2hhciksIHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWNoYXIpLCBwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQ4KQotCWRlc2MgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQ4KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0lOVCAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY0ludCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfSU5UIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50KSwgcHNwZWMtPm1pbmltdW0pOwotICAgICAgdXBwZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50KSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOSU5UICYmIHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UKQotCWRlc2MgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gR19NSU5JTlQpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhJTlQpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOwotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKLSAgICAgIGdfZnJlZSAobG93ZXIpOwotICAgICAgZ19mcmVlICh1cHBlcik7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVCAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY1VJbnQgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VJTlQgKHNwZWMpOwotCi0gICAgICBsb3dlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQpLCBwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVJTlQpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSAwKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKLSAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYVUlOVCkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7Ci0gICAgICBlbHNlCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOwotICAgICAgZ19mcmVlIChsb3dlcik7Ci0gICAgICBnX2ZyZWUgKHVwcGVyKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19MT05HIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjTG9uZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfTE9ORyAoc3BlYyk7Ci0KLSAgICAgIGxvd2VyID0gZGVzY3JpYmVfc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ2xvbmcpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdsb25nKSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IEdfTUlOTE9ORyAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWExPTkcpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTkxPTkcpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIjw9ICVzIiwgdXBwZXIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1heGltdW0gPT0gR19NQVhMT05HKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VMT05HIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUxvbmcgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VMT05HIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV91bnNpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGd1bG9uZyksIHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWxvbmcpLCBwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCAmJiBwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVMT05HKQotCWRlc2MgPSBnX3N0cmR1cCAoIiIpOwotICAgICAgZWxzZSBpZiAocHNwZWMtPm1pbmltdW0gPT0gMCkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWF4aW11bSA9PSBHX01BWFVMT05HKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0lOVDY0IChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjSW50NjQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0lOVDY0IChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV9zaWduZWRfY29uc3RhbnQgKHNpemVvZihnaW50NjQpLCBwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX3NpZ25lZF9jb25zdGFudCAoc2l6ZW9mKGdpbnQ2NCksIHBzcGVjLT5tYXhpbXVtKTsKLSAgICAgIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDY0ICYmIHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UNjQpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSBHX01JTklOVDY0KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKLSAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYSU5UNjQpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOwotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKLSAgICAgIGdfZnJlZSAobG93ZXIpOwotICAgICAgZ19mcmVlICh1cHBlcik7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVDY0IChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUludDY0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UNjQgKHNwZWMpOwotCi0gICAgICBsb3dlciA9IGRlc2NyaWJlX3Vuc2lnbmVkX2NvbnN0YW50IChzaXplb2YoZ3VpbnQ2NCksIHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfdW5zaWduZWRfY29uc3RhbnQgKHNpemVvZihndWludDY0KSwgcHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKHBzcGVjLT5taW5pbXVtID09IDAgJiYgcHNwZWMtPm1heGltdW0gPT0gR19NQVhVSU5UNjQpCi0JZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgICBlbHNlIGlmIChwc3BlYy0+bWluaW11bSA9PSAwKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI8PSAlcyIsIHVwcGVyKTsKLSAgICAgIGVsc2UgaWYgKHBzcGVjLT5tYXhpbXVtID09IEdfTUFYVUlOVDY0KQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCI+PSAlcyIsIGxvd2VyKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiWyVzLCVzXSIsIGxvd2VyLCB1cHBlcik7Ci0gICAgICBnX2ZyZWUgKGxvd2VyKTsKLSAgICAgIGdfZnJlZSAodXBwZXIpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0ZMT0FUIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjRmxvYXQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0ZMT0FUIChzcGVjKTsKLQotICAgICAgbG93ZXIgPSBkZXNjcmliZV9kb3VibGVfY29uc3RhbnQgKHBzcGVjLT5taW5pbXVtKTsKLSAgICAgIHVwcGVyID0gZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChwc3BlYy0+bWF4aW11bSk7Ci0gICAgICBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5taW5pbXVtLCAtR19NQVhGTE9BVCkpCi0JewotCSAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWF4aW11bSwgR19NQVhGTE9BVCkpCi0JICAgIGRlc2MgPSBnX3N0cmR1cCAoIiIpOwotCSAgZWxzZQotCSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0JfQotICAgICAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5tYXhpbXVtLCBHX01BWEZMT0FUKSkKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPj0gJXMiLCBsb3dlcik7Ci0gICAgICBlbHNlCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIlslcywlc10iLCBsb3dlciwgdXBwZXIpOwotICAgICAgZ19mcmVlIChsb3dlcik7Ci0gICAgICBnX2ZyZWUgKHVwcGVyKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19ET1VCTEUgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNEb3VibGUgKnBzcGVjID0gR19QQVJBTV9TUEVDX0RPVUJMRSAoc3BlYyk7Ci0KLSAgICAgIGxvd2VyID0gZGVzY3JpYmVfZG91YmxlX2NvbnN0YW50IChwc3BlYy0+bWluaW11bSk7Ci0gICAgICB1cHBlciA9IGRlc2NyaWJlX2RvdWJsZV9jb25zdGFudCAocHNwZWMtPm1heGltdW0pOwotICAgICAgaWYgKEdUS0RPQ19DT01QQVJFX0ZMT0FUIChwc3BlYy0+bWluaW11bSwgLUdfTUFYRE9VQkxFKSkKLQl7Ci0JICBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5tYXhpbXVtLCBHX01BWERPVUJMRSkpCi0JICAgIGRlc2MgPSBnX3N0cmR1cCAoIiIpOwotCSAgZWxzZQotCSAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiPD0gJXMiLCB1cHBlcik7Ci0JfQotICAgICAgZWxzZSBpZiAoR1RLRE9DX0NPTVBBUkVfRkxPQVQgKHBzcGVjLT5tYXhpbXVtLCBHX01BWERPVUJMRSkpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIj49ICVzIiwgbG93ZXIpOwotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJbJXMsJXNdIiwgbG93ZXIsIHVwcGVyKTsKLSAgICAgIGdfZnJlZSAobG93ZXIpOwotICAgICAgZ19mcmVlICh1cHBlcik7Ci0gICAgfQotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTiAoMiwgMTIsIDApCi0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19HVFlQRSAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY0dUeXBlICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19HVFlQRSAoc3BlYyk7Ci0gICAgICBnYm9vbGVhbiBpc19wb2ludGVyOwotCi0gICAgICBkZXNjID0gZ19zdHJkdXAgKGdldF90eXBlX25hbWUgKHBzcGVjLT5pc19hX3R5cGUsICZpc19wb2ludGVyKSk7Ci0gICAgfQotI2VuZGlmCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9OICgyLCAyNSwgOSkKLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1ZBUklBTlQgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNWYXJpYW50ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19WQVJJQU5UIChzcGVjKTsKLSAgICAgIGdjaGFyICp2YXJpYW50X3R5cGU7Ci0KLSAgICAgIHZhcmlhbnRfdHlwZSA9IGdfdmFyaWFudF90eXBlX2R1cF9zdHJpbmcgKHBzcGVjLT50eXBlKTsKLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJHVmFyaWFudDwlcz4iLCB2YXJpYW50X3R5cGUpOwotICAgICAgZ19mcmVlICh2YXJpYW50X3R5cGUpOwotICAgIH0KLSNlbmRpZgotICBlbHNlCi0gICAgewotICAgICAgZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgfQotCi0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgZ2NoYXIqCi1kZXNjcmliZV9kZWZhdWx0IChHUGFyYW1TcGVjICpzcGVjKQotewotICBnY2hhciAqZGVzYzsKLQotICBpZiAoR19JU19QQVJBTV9TUEVDX0NIQVIgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNDaGFyICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19DSEFSIChzcGVjKTsKLQotICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUNoYXIgKnBzcGVjID0gR19QQVJBTV9TUEVDX1VDSEFSIChzcGVjKTsKLQotICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1IiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0JPT0xFQU4gKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNCb29sZWFuICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19CT09MRUFOIChzcGVjKTsKLQotICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzIiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUgPyAiVFJVRSIgOiAiRkFMU0UiKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19JTlQgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNJbnQgKnBzcGVjID0gR19QQVJBTV9TUEVDX0lOVCAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19VSU5UIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUludCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfVUlOVCAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIHBzcGVjLT5kZWZhdWx0X3ZhbHVlKTsKLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19MT05HIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjTG9uZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfTE9ORyAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlbGQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfTE9ORyAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY1VMb25nICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VTE9ORyAoc3BlYyk7Ci0KLSAgICAgIGRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlbHUiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfSU5UNjQgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNJbnQ2NCAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfSU5UNjQgKHNwZWMpOwotCi0gICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HSU5UNjRfRk9STUFULCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfVUlOVDY0IChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjVUludDY0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VSU5UNjQgKHNwZWMpOwotCi0gICAgICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HVUlOVDY0X0ZPUk1BVCwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1VOSUNIQVIgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNVbmljaGFyICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19VTklDSEFSIChzcGVjKTsKLQotICAgICAgaWYgKGdfdW5pY2hhcl9pc3ByaW50IChwc3BlYy0+ZGVmYXVsdF92YWx1ZSkpCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiclYyciLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgICBlbHNlCi0JZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1IiwgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX0VOVU0gKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNFbnVtICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19FTlVNIChzcGVjKTsKLQotICAgICAgR0VudW1WYWx1ZSAqdmFsdWUgPSBnX2VudW1fZ2V0X3ZhbHVlIChwc3BlYy0+ZW51bV9jbGFzcywgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgICAgaWYgKHZhbHVlKQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCIlcyIsIHZhbHVlLT52YWx1ZV9uYW1lKTsKLSAgICAgIGVsc2UKLQlkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfRkxBR1MgKHNwZWMpKQotICAgIHsKLSAgICAgIEdQYXJhbVNwZWNGbGFncyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfRkxBR1MgKHNwZWMpOwotICAgICAgZ3VpbnQgZGVmYXVsdF92YWx1ZTsKLSAgICAgIEdTdHJpbmcgKmFjYzsKLQotICAgICAgZGVmYXVsdF92YWx1ZSA9IHBzcGVjLT5kZWZhdWx0X3ZhbHVlOwotICAgICAgYWNjID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0KLSAgICAgIHdoaWxlIChkZWZhdWx0X3ZhbHVlKQotCXsKLQkgIEdGbGFnc1ZhbHVlICp2YWx1ZSA9IGdfZmxhZ3NfZ2V0X2ZpcnN0X3ZhbHVlIChwc3BlYy0+ZmxhZ3NfY2xhc3MsIGRlZmF1bHRfdmFsdWUpOwotCi0JICBpZiAoIXZhbHVlKQotCSAgICBicmVhazsKLQotCSAgaWYgKGFjYy0+bGVuID4gMCkKLQkgICAgZ19zdHJpbmdfYXBwZW5kIChhY2MsICJ8Iik7Ci0JICBnX3N0cmluZ19hcHBlbmQgKGFjYywgdmFsdWUtPnZhbHVlX25hbWUpOwotCi0JICBkZWZhdWx0X3ZhbHVlICY9IH52YWx1ZS0+dmFsdWU7Ci0JfQotCi0gICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSAwKQotCWRlc2MgPSBnX3N0cmluZ19mcmVlIChhY2MsIEZBTFNFKTsKLSAgICAgIGVsc2UKLQl7Ci0JICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0JICBnX3N0cmluZ19mcmVlIChhY2MsIFRSVUUpOwotCX0KLSAgICB9Ci0gIGVsc2UgaWYgKEdfSVNfUEFSQU1fU1BFQ19GTE9BVCAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY0Zsb2F0ICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19GTE9BVCAoc3BlYyk7Ci0KLSAgICAgIC8qIG1ha2Ugc3VyZSBmbG9hdHMgYXJlIG91dHB1dCB3aXRoIGEgZGVjaW1hbCBkb3QgaXJyZXNwZWN0aXZlIG9mCi0gICAgICAgKiBjdXJyZW50IGxvY2FsZS4gVXNlIGZvcm1hdGQgc2luY2Ugd2Ugd2FudCBodW1hbi1yZWFkYWJsZSBudW1iZXJzCi0gICAgICAgKiBhbmQgZG8gbm90IG5lZWQgdGhlIGV4YWN0IHNhbWUgYml0IHJlcHJlc2VudGF0aW9uIHdoZW4gZGVzZXJpYWxpc2luZyAqLwotICAgICAgZGVzYyA9IGdfbWFsbG9jMCAoR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUpOwotICAgICAgZ19hc2NpaV9mb3JtYXRkIChkZXNjLCBHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSwgIiVnIiwKLSAgICAgICAgICBwc3BlYy0+ZGVmYXVsdF92YWx1ZSk7Ci0gICAgfQotICBlbHNlIGlmIChHX0lTX1BBUkFNX1NQRUNfRE9VQkxFIChzcGVjKSkKLSAgICB7Ci0gICAgICBHUGFyYW1TcGVjRG91YmxlICpwc3BlYyA9IEdfUEFSQU1fU1BFQ19ET1VCTEUgKHNwZWMpOwotCi0gICAgICAvKiBtYWtlIHN1cmUgZmxvYXRzIGFyZSBvdXRwdXQgd2l0aCBhIGRlY2ltYWwgZG90IGlycmVzcGVjdGl2ZSBvZgotICAgICAgICogY3VycmVudCBsb2NhbGUuIFVzZSBmb3JtYXRkIHNpbmNlIHdlIHdhbnQgaHVtYW4tcmVhZGFibGUgbnVtYmVycwotICAgICAgICogYW5kIGRvIG5vdCBuZWVkIHRoZSBleGFjdCBzYW1lIGJpdCByZXByZXNlbnRhdGlvbiB3aGVuIGRlc2VyaWFsaXNpbmcgKi8KLSAgICAgIGRlc2MgPSBnX21hbGxvYzAgKEdfQVNDSUlfRFRPU1RSX0JVRl9TSVpFKTsKLSAgICAgIGdfYXNjaWlfZm9ybWF0ZCAoZGVzYywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsICIlZyIsCi0gICAgICAgICAgcHNwZWMtPmRlZmF1bHRfdmFsdWUpOwotICAgIH0KLSAgZWxzZSBpZiAoR19JU19QQVJBTV9TUEVDX1NUUklORyAoc3BlYykpCi0gICAgewotICAgICAgR1BhcmFtU3BlY1N0cmluZyAqcHNwZWMgPSBHX1BBUkFNX1NQRUNfU1RSSU5HIChzcGVjKTsKLQotICAgICAgaWYgKHBzcGVjLT5kZWZhdWx0X3ZhbHVlKQotCXsKLQkgIGdjaGFyICplc2MgPSBnX3N0cmVzY2FwZSAocHNwZWMtPmRlZmF1bHRfdmFsdWUsIE5VTEwpOwotCi0JICBkZXNjID0gZ19zdHJkdXBfcHJpbnRmICgiXFwiJXNcXCIiLCBlc2MpOwotCi0JICBnX2ZyZWUgKGVzYyk7Ci0JfQotICAgICAgZWxzZQotCWRlc2MgPSBnX3N0cmR1cF9wcmludGYgKCJOVUxMIik7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgZGVzYyA9IGdfc3RyZHVwICgiIik7Ci0gICAgfQotCi0gIHJldHVybiBkZXNjOwotfQotCi0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb2JqZWN0X2FyZ3MgKEZJTEUgKmZwLCBHVHlwZSBvYmplY3RfdHlwZSkKLXsKLSAgZ3BvaW50ZXIgY2xhc3M7Ci0gIGNvbnN0IGdjaGFyICpvYmplY3RfY2xhc3NfbmFtZTsKLSAgZ3VpbnQgYXJnOwotICBnY2hhciBmbGFnc1sxNl0sICpwb3M7Ci0gIEdQYXJhbVNwZWMgKipwcm9wZXJ0aWVzOwotICBndWludCBuX3Byb3BlcnRpZXM7Ci0gIGdib29sZWFuIGNoaWxkX3Byb3A7Ci0gIGdib29sZWFuIHN0eWxlX3Byb3A7Ci0gIGdib29sZWFuIGlzX3BvaW50ZXI7Ci0gIGNvbnN0IGdjaGFyICp0eXBlX25hbWU7Ci0gIGdjaGFyICp0eXBlX2Rlc2M7Ci0gIGdjaGFyICpkZWZhdWx0X3ZhbHVlOwotCi0gIGlmIChHX1RZUEVfSVNfT0JKRUNUIChvYmplY3RfdHlwZSkpCi0gICAgewotICAgICAgY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVlayAob2JqZWN0X3R5cGUpOwotICAgICAgaWYgKCFjbGFzcykKLQlyZXR1cm47Ci0KLSAgICAgIHByb3BlcnRpZXMgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMgKGNsYXNzLCAmbl9wcm9wZXJ0aWVzKTsKLSAgICB9Ci0jaWYgR0xJQl9NQUpPUl9WRVJTSU9OID4gMiB8fCAoR0xJQl9NQUpPUl9WRVJTSU9OID09IDIgJiYgR0xJQl9NSU5PUl9WRVJTSU9OID49IDMpCi0gIGVsc2UgaWYgKEdfVFlQRV9JU19JTlRFUkZBQ0UgKG9iamVjdF90eXBlKSkKLSAgICB7Ci0gICAgICBjbGFzcyA9IGdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9yZWYgKG9iamVjdF90eXBlKTsKLQotICAgICAgaWYgKCFjbGFzcykKLQlyZXR1cm47Ci0KLSAgICAgIHByb3BlcnRpZXMgPSBnX29iamVjdF9pbnRlcmZhY2VfbGlzdF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7Ci0gICAgfQotI2VuZGlmCi0gIGVsc2UKLSAgICByZXR1cm47Ci0KLSAgb2JqZWN0X2NsYXNzX25hbWUgPSBnX3R5cGVfbmFtZSAob2JqZWN0X3R5cGUpOwotCi0gIGNoaWxkX3Byb3AgPSBGQUxTRTsKLSAgc3R5bGVfcHJvcCA9IEZBTFNFOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgcXNvcnQgKHByb3BlcnRpZXMsIG5fcHJvcGVydGllcywgc2l6ZW9mIChHUGFyYW1TcGVjICopLCBjb21wYXJlX3BhcmFtX3NwZWNzKTsKLSAgICBmb3IgKGFyZyA9IDA7IGFyZyA8IG5fcHJvcGVydGllczsgYXJnKyspCi0gICAgICB7Ci0gICAgICAgIEdQYXJhbVNwZWMgKnNwZWMgPSBwcm9wZXJ0aWVzW2FyZ107Ci0gICAgICAgIGNvbnN0IGdjaGFyICpuaWNrLCAqYmx1cmIsICpkb3Q7Ci0KLSAgICAgICAgaWYgKHNwZWMtPm93bmVyX3R5cGUgIT0gb2JqZWN0X3R5cGUpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcG9zID0gZmxhZ3M7Ci0gICAgICAgIC8qIFdlIHVzZSBvbmUtY2hhcmFjdGVyIGZsYWdzIGZvciBzaW1wbGljaXR5LiAqLwotICAgICAgICBpZiAoY2hpbGRfcHJvcCAmJiAhc3R5bGVfcHJvcCkKLSAgIAkgICpwb3MrKyA9ICdjJzsKLSAgICAgICAgaWYgKHN0eWxlX3Byb3ApCi0gICAJICAqcG9zKysgPSAncyc7Ci0gICAgICAgIGlmIChzcGVjLT5mbGFncyAmIEdfUEFSQU1fUkVBREFCTEUpCi0gCSAgKnBvcysrID0gJ3InOwotICAgICAgICBpZiAoc3BlYy0+ZmxhZ3MgJiBHX1BBUkFNX1dSSVRBQkxFKQotCSAgKnBvcysrID0gJ3cnOwotICAgICAgICBpZiAoc3BlYy0+ZmxhZ3MgJiBHX1BBUkFNX0NPTlNUUlVDVCkKLQkgICpwb3MrKyA9ICd4JzsKLSAgICAgICAgaWYgKHNwZWMtPmZsYWdzICYgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkKLQkgICpwb3MrKyA9ICdYJzsKLSAgICAgICAgKnBvcyA9IDA7Ci0KLSAgICAgICAgbmljayA9IGdfcGFyYW1fc3BlY19nZXRfbmljayAoc3BlYyk7Ci0gICAgICAgIGJsdXJiID0gZ19wYXJhbV9zcGVjX2dldF9ibHVyYiAoc3BlYyk7Ci0KLSAgICAgICAgZG90ID0gIiI7Ci0gICAgICAgIGlmIChibHVyYikgewotICAgICAgICAgIGludCBzdHJfbGVuID0gc3RybGVuIChibHVyYik7Ci0gICAgICAgICAgaWYgKHN0cl9sZW4gPiAwICAmJiBibHVyYltzdHJfbGVuIC0gMV0gIT0gJy4nKQotICAgICAgICAgICAgZG90ID0gIi4iOwotICAgICAgICB9Ci0KLQl0eXBlX2Rlc2MgPSBkZXNjcmliZV90eXBlIChzcGVjKTsKLQlkZWZhdWx0X3ZhbHVlID0gZGVzY3JpYmVfZGVmYXVsdCAoc3BlYyk7Ci0JdHlwZV9uYW1lID0gZ2V0X3R5cGVfbmFtZSAoc3BlYy0+dmFsdWVfdHlwZSwgJmlzX3BvaW50ZXIpOwotICAgICAgICBmcHJpbnRmIChmcCwgIjxBUkc+XFxuPE5BTUU+JXM6OiVzPC9OQU1FPlxcbjxUWVBFPiVzJXM8L1RZUEU+XFxuPFJBTkdFPiVzPC9SQU5HRT5cXG48RkxBR1M+JXM8L0ZMQUdTPlxcbjxOSUNLPiVzPC9OSUNLPlxcbjxCTFVSQj4lcyVzPC9CTFVSQj5cXG48REVGQVVMVD4lczwvREVGQVVMVD5cXG48L0FSRz5cXG5cXG4iLAotCSAgICAgICAgIG9iamVjdF9jbGFzc19uYW1lLCBnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHNwZWMpLCB0eXBlX25hbWUsIGlzX3BvaW50ZXIgPyAiKiIgOiAiIiwgdHlwZV9kZXNjLCBmbGFncywgbmljayA/IG5pY2sgOiAiKG51bGwpIiwgYmx1cmIgPyBibHVyYiA6ICIobnVsbCkiLCBkb3QsIGRlZmF1bHRfdmFsdWUpOwotCWdfZnJlZSAodHlwZV9kZXNjKTsKLQlnX2ZyZWUgKGRlZmF1bHRfdmFsdWUpOwotICAgICAgfQotCi0gICAgZ19mcmVlIChwcm9wZXJ0aWVzKTsKLQotI2lmZGVmIEdUS19JU19DT05UQUlORVJfQ0xBU1MKLSAgICBpZiAoIWNoaWxkX3Byb3AgJiYgR1RLX0lTX0NPTlRBSU5FUl9DTEFTUyAoY2xhc3MpKSB7Ci0gICAgICBwcm9wZXJ0aWVzID0gZ3RrX2NvbnRhaW5lcl9jbGFzc19saXN0X2NoaWxkX3Byb3BlcnRpZXMgKGNsYXNzLCAmbl9wcm9wZXJ0aWVzKTsKLSAgICAgIGNoaWxkX3Byb3AgPSBUUlVFOwotICAgICAgY29udGludWU7Ci0gICAgfQotI2VuZGlmCi0KLSNpZmRlZiBHVEtfSVNfQ0VMTF9BUkVBX0NMQVNTCi0gICAgaWYgKCFjaGlsZF9wcm9wICYmIEdUS19JU19DRUxMX0FSRUFfQ0xBU1MgKGNsYXNzKSkgewotICAgICAgcHJvcGVydGllcyA9IGd0a19jZWxsX2FyZWFfY2xhc3NfbGlzdF9jZWxsX3Byb3BlcnRpZXMgKGNsYXNzLCAmbl9wcm9wZXJ0aWVzKTsKLSAgICAgIGNoaWxkX3Byb3AgPSBUUlVFOwotICAgICAgY29udGludWU7Ci0gICAgfQotI2VuZGlmCi0KLSNpZmRlZiBHVEtfSVNfV0lER0VUX0NMQVNTCi0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwxLDApCi0gICAgaWYgKCFzdHlsZV9wcm9wICYmIEdUS19JU19XSURHRVRfQ0xBU1MgKGNsYXNzKSkgewotICAgICAgcHJvcGVydGllcyA9IGd0a193aWRnZXRfY2xhc3NfbGlzdF9zdHlsZV9wcm9wZXJ0aWVzIChHVEtfV0lER0VUX0NMQVNTIChjbGFzcyksICZuX3Byb3BlcnRpZXMpOwotICAgICAgc3R5bGVfcHJvcCA9IFRSVUU7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLW91dHB1dF9zZWN0aW9ucyAodm9pZCkKLXsKLSAgRklMRSAqZnA7Ci0gIGdpbnQgaTsKLQotICBmcCA9IGZvcGVuIChzZWN0aW9uc19maWxlbmFtZSwgInciKTsKLSAgaWYgKGZwID09IE5VTEwpCi0gICAgewotICAgICAgZ193YXJuaW5nICgiQ291bGRuJ3Qgb3BlbiBvdXRwdXQgZmlsZTogJXMgOiAlcyIsIHNlY3Rpb25zX2ZpbGVuYW1lLCBnX3N0cmVycm9yKGVycm5vKSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIGZvciAoaSA9IDA7IG9iamVjdF90eXBlc1tpXTsgaSsrKSB7IH0KLSAgcXNvcnQgKG9iamVjdF90eXBlcywgaSwgc2l6ZW9mIChHVHlwZSksIGNvbXBhcmVfdHlwZXMpOwotICAgIAotICBmb3IgKGkgPSAwOyBvYmplY3RfdHlwZXNbaV07IGkrKykgewotICAgIG91dHB1dF9vYmplY3Rfc2VjdGlvbiAoZnAsIG9iamVjdF90eXBlc1tpXSk7Ci0gIH0KLQotICBmY2xvc2UgKGZwKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1maW5kX2J5X3R5cGUgKEdzdFBsdWdpbkZlYXR1cmUgKmYsIGdwb2ludGVyIGRhdGEpIHsKLSAgcmV0dXJuIChHU1RfSVNfRUxFTUVOVF9GQUNUT1JZKGYpICYmIAotICAgICAgKChHVHlwZSlkYXRhID09IGdzdF9lbGVtZW50X2ZhY3RvcnlfZ2V0X2VsZW1lbnRfdHlwZSAoR1NUX0VMRU1FTlRfRkFDVE9SWShmKSkpKTsKLX0KLQotc3RhdGljIHZvaWQKLW91dHB1dF9vYmplY3Rfc2VjdGlvbiAoRklMRSAqZnAsIEdUeXBlIG9iamVjdF90eXBlKQotewotICAvKiBlLmcuIEdzdEZha2VTaW5rICovCi0gIGNvbnN0IGdjaGFyICp0biA9IGdfdHlwZV9uYW1lIChvYmplY3RfdHlwZSk7Ci0gIGNvbnN0IGdjaGFyICpjY3QgPSAmdG5bM107IC8qIGN1dCAnR3N0JyAqLwotICBnY2hhciAqdGl0bGUsICpsY3QsICp1Y3Q7Ci0gIGdpbnQgaSwgaiwgbCA9IHN0cmxlbihjY3QpOwotICBncG9pbnRlciBjbGFzczsKLSAgR1BhcmFtU3BlYyAqKnByb3BlcnRpZXM7Ci0gIGd1aW50IG5fcHJvcGVydGllczsKLSAgY29uc3QgZ2NoYXIgKnB0bjsKLSAgZ2NoYXIgKnB0bnM7Ci0gIEdTdHJpbmcgKnN0cmJ1ZiA9IGdfc3RyaW5nX25ldyAoTlVMTCk7Ci0gIEdMaXN0ICpmbDsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZiA9IE5VTEw7Ci0gIGdib29sZWFuIG5lZWRfdW5zZXJzY29yZSA9IFRSVUUsIGhhdmVfYWJicmV2ID0gRkFMU0U7Ci0gIAotICBmbCA9IGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldCgpLCBmaW5kX2J5X3R5cGUsIFRSVUUsIAotICAgIChncG9pbnRlcilvYmplY3RfdHlwZSk7Ci0gIGlmIChmbCkgewotICAgIGYgPSBmbC0+ZGF0YTsKLSAgICBnX2xpc3RfZnJlZShmbCk7Ci0gIH0KLSAgaWYgKGYpIHsKLSAgICB0aXRsZSA9IGdfc3RyZHVwIChnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUoZikpOwotICAgIGdfb2JqZWN0X3VucmVmIChmKTsKLSAgfSBlbHNlIHsKLSAgICB0aXRsZSA9IGdfYXNjaWlfc3RyZG93bihjY3QsIC0xKTsKLSAgfQotICAKLSAgLyogdHVybiBDYW1lbENhc2UgaW50byAnXycgc2VwYXJhdGVkIGFsbCBsb3dlciwgcmVzdWx0aW5nIHN0cmluZyBpcyBhdG1vc3QKLSAgICogdHdpY2UgYXMgbG9uZywgc3BlY2lhbCBjYXNpbmcgZm9yIGFiYmV2cyBsaWtlIEdzdFRDUENsaWVudFNpbmsgKi8KLSAgbGN0ID0gZ19tYWxsb2MoMipsKTsKLSAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICBpZiAoZ19hc2NpaV9pc3VwcGVyIChjY3RbaV0pKSB7Ci0gICAgICBpZiAobmVlZF91bnNlcnNjb3JlKSB7Ci0gICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgIGxjdFtqKytdID0gJ18nOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBoYXZlX2FiYnJldiA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBsY3RbaisrXSA9IGdfYXNjaWlfdG9sb3dlcihjY3RbaV0pOwotICAgICAgbmVlZF91bnNlcnNjb3JlID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChoYXZlX2FiYnJldikgewotICAgICAgICBsY3Rbal0gPSBsY3Rbai0xXTsKLSAgICAgICAgbGN0W2otMV0gPSAnXyc7Ci0gICAgICAgIGorKzsKLSAgICAgICAgaGF2ZV9hYmJyZXYgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGxjdFtqKytdID0gY2N0W2ldOwotICAgICAgbmVlZF91bnNlcnNjb3JlID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgbGN0W2pdID0gJ1xcMCc7Ci0gIHVjdCA9IGdfYXNjaWlfc3RydXAobGN0LCAtMSk7Ci0gIAotICAvKiBzY2FuIHByb3BlcnRpZXMgYW5kIGZpbmQgbG9jYWwgZW51bXMgKi8KLSAgY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVlayAob2JqZWN0X3R5cGUpOwotICBwcm9wZXJ0aWVzID0gZ19vYmplY3RfY2xhc3NfbGlzdF9wcm9wZXJ0aWVzIChjbGFzcywgJm5fcHJvcGVydGllcyk7Ci0gIHFzb3J0IChwcm9wZXJ0aWVzLCBuX3Byb3BlcnRpZXMsIHNpemVvZiAoR1BhcmFtU3BlYyAqKSwgY29tcGFyZV9wYXJhbV9zcGVjcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuX3Byb3BlcnRpZXM7IGkrKykgewotICAgIEdQYXJhbVNwZWMgKnNwZWMgPSBwcm9wZXJ0aWVzW2ldOwotICAgIGlmICghKEdfSVNfUEFSQU1fU1BFQ19FTlVNIChzcGVjKSB8fCBHX0lTX1BBUkFNX1NQRUNfRkxBR1MgKHNwZWMpKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIHB0biA9IGdfdHlwZV9uYW1lKHNwZWMtPnZhbHVlX3R5cGUpOwotICAgIC8vIGRvZXMgaXQgc3RhcnQgd2l0aCB0bj8KLSAgICBpZiAoc3RybmNtcCh0biwgcHRuLCBzdHJsZW4odG4pKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGdfc3RyaW5nX2FwcGVuZF9jKHN0cmJ1ZiwgJ1xcbicpOwotICAgIGdfc3RyaW5nX2FwcGVuZChzdHJidWYsIHB0bik7Ci0gIH0KLSAgcHRucyA9IGdfc3RyaW5nX2ZyZWUgKHN0cmJ1ZiwgRkFMU0UpOwotCi0gIC8qIGxhdGVyIHdlIGNhbiByZW1vdmUgdGhlIFNVQlNFQ1RJT04gU3RhbmRhcnQvUHJpdmF0ZSwgc2luY2Ugd2Ugb25seSBuZWVkIHRvCi0gICAqIGhpZ2hsaWdodCB3aGF0IGlzIHB1YmxpYyBBUEkgKi8KLSAgZnByaW50ZiAoZnAsICI8U0VDVElPTj5cXG4iCi0gICAgICAgICAgICAgICAiPEZJTEU+ZWxlbWVudC0lczwvRklMRT5cXG4iCi0gICAgICAgICAgICAgICAiPFRJVExFPiVzPC9USVRMRT5cXG4iCi0gICAgICAgICAgICAgICAiR3N0JXMlc1xcbiIKLSAgICAgICAgICAgICAgICI8U1VCU0VDVElPTiBTdGFuZGFyZD5cXG4iCi0gICAgICAgICAgICAgICAiR3N0JXNDbGFzc1xcbiIKLSAgICAgICAgICAgICAgICJHU1RfJXNcXG4iCi0gICAgICAgICAgICAgICAiR1NUXyVzX0NBU1RcXG4iCi0gICAgICAgICAgICAgICAiR1NUX0lTXyVzXFxuIgotICAgICAgICAgICAgICAgIkdTVF8lc19DTEFTU1xcbiIKLSAgICAgICAgICAgICAgICJHU1RfSVNfJXNfQ0xBU1NcXG4iCi0gICAgICAgICAgICAgICAiR1NUX1RZUEVfJXNcXG4iCi0gICAgICAgICAgICAgICAiPFNVQlNFQ1RJT04gUHJpdmF0ZT5cXG4iCi0gICAgICAgICAgICAgICAiZ3N0XyVzX2dldF90eXBlXFxuIgotICAgICAgICAgICAgICAgIjwvU0VDVElPTj5cXG5cXG4iLAotICAgICAgICAgICAgICAgdGl0bGUsIHRpdGxlLCBjY3QsIHB0bnMsIAotICAgICAgICAgICAgICAgY2N0LCB1Y3QsIHVjdCwgdWN0LCB1Y3QsIHVjdCwgdWN0LCBsY3QpOwotICBnX2ZyZWUgKHRpdGxlKTsKLSAgZ19mcmVlIChsY3QpOwotICBnX2ZyZWUgKHVjdCk7Ci0gIGdfZnJlZSAocHRucyk7Ci19Ci0KLUVPVAotCi1jbG9zZSBPVVRQVVQ7Ci0KLSMgQ29tcGlsZSBhbmQgcnVuIG91ciBmaWxlCi0KLSRDQyA9ICRFTlZ7Q0N9ID8gJEVOVntDQ30gOiAiZ2NjIjsKLSRMRCA9ICRFTlZ7TER9ID8gJEVOVntMRH0gOiAkQ0M7Ci0kQ0ZMQUdTID0gJEVOVntDRkxBR1N9ID8gIiRFTlZ7Q0ZMQUdTfSIgOiAiIjsKLSRMREZMQUdTID0gJEVOVntMREZMQUdTfSA/ICRFTlZ7TERGTEFHU30gOiAiIjsKLQotbXkgJG9fZmlsZTsKLWlmICgkQ0MgPX4gL2xpYnRvb2wvKSB7Ci0gICRvX2ZpbGUgID0gIiRNT0RVTEUtc2Nhbi5sbyIKLX0gZWxzZSB7Ci0gICRvX2ZpbGUgPSAiJE1PRFVMRS1zY2FuLm8iCi19Ci0KLW15ICRzdGRvdXQ9IiI7Ci1pZiAoIWRlZmluZWQoJFZFUkJPU0UpIG9yICRWRVJCT1NFIGVxICIwIikgewotICAgICRzdGRvdXQ9Ij4vZGV2L251bGwiOwotfQotCi0jIENvbXBpbGluZyBzY2FubmVyCi0kY29tbWFuZCA9ICIkQ0MgJHN0ZG91dCAkQ0ZMQUdTIC1jIC1vICRvX2ZpbGUgJE1PRFVMRS1zY2FuLmMiOwotc3lzdGVtKCIoJGNvbW1hbmQpIikgPT0gMCBvciBkaWUgIkNvbXBpbGF0aW9uIG9mIHNjYW5uZXIgZmFpbGVkOiAkIVxuIjsKLQotIyBMaW5raW5nIHNjYW5uZXIKLSRjb21tYW5kID0gIiRMRCAkc3Rkb3V0IC1vICRNT0RVTEUtc2NhbiAkb19maWxlICRMREZMQUdTIjsKLXN5c3RlbSgkY29tbWFuZCkgPT0gMCBvciBkaWUgIkxpbmtpbmcgb2Ygc2Nhbm5lciBmYWlsZWQ6ICQhXG4iOwotCi0jIFJ1bm5pbmcgc2Nhbm5lciAkTU9EVUxFLXNjYW4gIjsKLXN5c3RlbSgic2ggLWMgLi8kTU9EVUxFLXNjYW4iKSA9PSAwIG9yIGRpZSAiU2NhbiBmYWlsZWQ6ICQhXG4iOwotCi1pZiAoIWRlZmluZWQoJEVOVnsiR1RLX0RPQ19LRUVQX0lOVEVSTUVESUFURSJ9KSkgewotICB1bmxpbmsgIi4vJE1PRFVMRS1zY2FuLmMiLCAiLi8kTU9EVUxFLXNjYW4ubyIsICIuLyRNT0RVTEUtc2Nhbi5sbyIsICIuLyRNT0RVTEUtc2NhbiI7Ci19Ci0KLSZVcGRhdGVGaWxlSWZDaGFuZ2VkICgkb2xkX2hpZXJhcmNoeV9maWxlbmFtZSwgJG5ld19oaWVyYXJjaHlfZmlsZW5hbWUsIDApOwotIyB3ZSB3aWxsIG1lcmdlIHRoZXNlIGluIHNjYW5nb2JqLW1lcmdlLnB5Ci0jJlVwZGF0ZUZpbGVJZkNoYW5nZWQgKCRvbGRfaW50ZXJmYWNlc19maWxlbmFtZSwgJG5ld19pbnRlcmZhY2VzX2ZpbGVuYW1lLCAwKTsKLSMmVXBkYXRlRmlsZUlmQ2hhbmdlZCAoJG9sZF9wcmVyZXF1aXNpdGVzX2ZpbGVuYW1lLCAkbmV3X3ByZXJlcXVpc2l0ZXNfZmlsZW5hbWUsIDApOwotIyZVcGRhdGVGaWxlSWZDaGFuZ2VkICgkb2xkX3NpZ25hbHNfZmlsZW5hbWUsICRuZXdfc2lnbmFsc19maWxlbmFtZSwgMCk7Ci0jJlVwZGF0ZUZpbGVJZkNoYW5nZWQgKCRvbGRfYXJnc19maWxlbmFtZSwgJG5ld19hcmdzX2ZpbGVuYW1lLCAwKTsKLSMmVXBkYXRlRmlsZUlmQ2hhbmdlZCAoJG9sZF9zZWN0aW9uc19maWxlbmFtZSwgJG5ld19zZWN0aW9uc19maWxlbmFtZSwgMCk7CmRpZmYgLS1naXQgYS9jb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hayBiL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjVkZDFiLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMzc1ICswLDAgQEAKLSMgVGhpcyBpcyBhbiBpbmNsdWRlIGZpbGUgc3BlY2lmaWNhbGx5IHR1bmVkIGZvciBidWlsZGluZyBkb2N1bWVudGF0aW9uCi0jIGZvciBHU3RyZWFtZXIgcGx1Zy1pbnMKLQotaGVscDoKLQlAZWNobwotCUBlY2hvICJJZiB5b3UgYXJlIGEgZG9jIG1haW50YWluZXIsIHJ1biAnbWFrZSB1cGRhdGUnIHRvIHVwZGF0ZSIKLQlAZWNobyAidGhlIGRvY3VtZW50YXRpb24gZmlsZXMgbWFpbnRhaW5lZCBpbiBnaXQiCi0JQGVjaG8KLQlAZWNobyBPdGhlciB1c2VmdWwgbWFrZSB0YXJnZXRzOgotCUBlY2hvCi0JQGVjaG8gIGNoZWNrLWluc3BlY3RlZC12ZXJzaW9uczogbWFrZSBzdXJlIHRoZSBpbnNwZWN0ZWQgcGx1Z2luIGluZm8KLQlAZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1cCB0byBkYXRlIGJlZm9yZSBhIHJlbGVhc2UKLQlAZWNobwotCi0jIHVwZGF0ZSB0aGUgc3R1ZmYgbWFpbnRhaW5lZCBieSBkb2MgbWFpbnRhaW5lcnMKLXVwZGF0ZTogc2Nhbm9iai11cGRhdGUKLQkkKE1BS0UpIGNoZWNrLW91dGRhdGVkLWRvY3MKLQotaWYgR1RLX0RPQ19VU0VfTElCVE9PTAotR1RLRE9DX0NDID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotR1RLRE9DX0xEID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDKSAkKEdUS0RPQ19ERVBTX0xJQlMpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpCi1HVEtET0NfUlVOID0gJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQotZWxzZQotR1RLRE9DX0NDID0gJChDQykgJChJTkNMVURFUykgJChHVEtET0NfREVQU19DRkxBR1MpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUdUS0RPQ19MRCA9ICQoQ0MpICQoR1RLRE9DX0RFUFNfTElCUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykKLUdUS0RPQ19SVU4gPQotZW5kaWYKLQotIyBXZSBzZXQgR1BBVEggaGVyZTsgdGhpcyBnaXZlcyB1cyBzZW1hbnRpY3MgZm9yIEdOVSBtYWtlCi0jIHdoaWNoIGFyZSBtb3JlIGxpa2Ugb3RoZXIgbWFrZSdzIFZQQVRILCB3aGVuIGl0IGNvbWVzIHRvCi0jIHdoZXRoZXIgYSBzb3VyY2UgdGhhdCBpcyBhIHRhcmdldCBvZiBvbmUgcnVsZSBpcyB0aGVuCi0jIHNlYXJjaGVkIGZvciBpbiBWUEFUSC9HUEFUSC4KLSMKLUdQQVRIID0gJChzcmNkaXIpCi0KLSMgdGhvbWFzOiBtYWtlIGRvY3MgcGFyYWxsZWwgaW5zdGFsbGFibGUKLVRBUkdFVF9ESVI9JChIVE1MX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQAotCi1NQUlOVEFJTkVSX0RPQ19TVEFNUFMgPQkJCVwKLQlzY2Fub2JqLWJ1aWxkLnN0YW1wCi0KLUVYVFJBX0RJU1QgPSAJCQkJXAotCSQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQkJXAotCSQoc3JjZGlyKS9pbnNwZWN0LyoueG1sCQlcCi0JJChTQ0FOT0JKX0ZJTEVTKQkJXAotCSQoY29udGVudF9maWxlcykJCVwKLQkkKGV4dHJhX2ZpbGVzKQkJCVwKLQkkKEhUTUxfSU1BR0VTKQkJCVwKLQkkKERPQ19NQUlOX1NHTUxfRklMRSkJXAotCSQoRE9DX09WRVJSSURFUykJCVwKLQkkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dAotCi0jIHdlIGRvbid0IGFkZCBzY2Fub2JqLWJ1aWxkLnN0YW1wIGhlcmUgc2luY2UgdGhleSBhcmUgYnVpbHQgbWFudWFsbHkgYnkgZG9jcwotIyBtYWludGFpbmVycyBhbmQgcmVzdWx0IGlzIGNvbW1pdGVkIHRvIGdpdAotRE9DX1NUQU1QUyA9CQkJCVwKLQlzY2FuLWJ1aWxkLnN0YW1wCQlcCi0Jc2dtbC1idWlsZC5zdGFtcAkJXAotCWh0bWwtYnVpbGQuc3RhbXAJCVwKLQlzY2FuLnN0YW1wCQkJXAotCXNnbWwuc3RhbXAJCQlcCi0JaHRtbC5zdGFtcAotCi0jIGZpbGVzIGdlbmVyYXRlZC91cGRhdGVkIGJ5IGd0a2RvYy1zY2FuZ29iagotU0NBTk9CSl9GSUxFUyA9CQkJCVwKLQkkKERPQ19NT0RVTEUpLmFyZ3MgICAgICAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLmhpZXJhcmNoeSAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgICAgIFwKLQkkKERPQ19NT0RVTEUpLnNpZ25hbHMgICAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLnR5cGVzCi0KLVNDQU5PQkpfRklMRVNfTyA9CQkJXAotCS5saWJzLyQoRE9DX01PRFVMRSktc2Nhbi5vCi0KLSMgZmlsZXMgZ2VuZXJhdGVkL3VwZGF0ZWQgYnkgZ3RrZG9jLXNjYW4KLVNDQU5fRklMRVMgPQkJCQlcCi0JJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQJXAotCSQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAlcCi0JJChET0NfTU9EVUxFKS1kZWNsLnR4dAkJXAotCSQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dAotCi0KLVJFUE9SVF9GSUxFUyA9IFwKLQkkKERPQ19NT0RVTEUpLXVuZG9jdW1lbnRlZC50eHQgXAotCSQoRE9DX01PRFVMRSktdW5kZWNsYXJlZC50eHQgXAotCSQoRE9DX01PRFVMRSktdW51c2VkLnR4dAotCi1DTEVBTkZJTEVTID0gXAotCSQoU0NBTk9CSl9GSUxFU19PKSBcCi0JJChSRVBPUlRfRklMRVMpIFwKLQkkKERPQ19TVEFNUFMpIFwKLQlpbnNwZWN0LXJlZ2lzdHJ5LnhtbAotCi1JTlNQRUNUX0RJUiA9IGluc3BlY3QKLQotaWYgRU5BQkxFX0dUS19ET0MKLWFsbC1sb2NhbDogaHRtbC1idWlsZC5zdGFtcAotCi0jIyMgaW5zcGVjdCBHU3RyZWFtZXIgcGx1Zy1pbnM7IGRvbmUgYnkgZG9jdW1lbnRhdGlvbiBtYWludGFpbmVyICMjIwotCi0jIG9ubHkgbG9vayBhdCB0aGUgcGx1Z2lucyBpbiB0aGlzIG1vZHVsZSB3aGVuIGJ1aWxkaW5nIGluc3BlY3QgLnhtbCBzdHVmZgotSU5TUEVDVF9SRUdJU1RSWT0kKHRvcF9idWlsZGRpcikvZG9jcy9wbHVnaW5zL2luc3BlY3QtcmVnaXN0cnkueG1sCi1JTlNQRUNUX0VOVklST05NRU5UPVwKLQlMQ19BTEw9QyBcCi0JR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9IFwKLQlHU1RfUExVR0lOX1BBVEhfMV8wPSQodG9wX2J1aWxkZGlyKS9nc3Q6JCh0b3BfYnVpbGRkaXIpL3N5czokKHRvcF9idWlsZGRpcikvZXh0OiQodG9wX2J1aWxkZGlyKS9wbHVnaW5zOiQodG9wX2J1aWxkZGlyKS9zcmM6JCh0b3BfYnVpbGRkaXIpL2dubCBcCi0JR1NUX1JFR0lTVFJZXzFfMD0kKElOU1BFQ1RfUkVHSVNUUlkpIFwKLQlQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIFwKLQkkKElOU1BFQ1RfRVhUUkFfRU5WSVJPTk1FTlQpCi0KLSMjIyMgc2NhbiBnb2JqZWN0czsgZG9uZSBieSBkb2N1bWVudGF0aW9uIG1haW50YWluZXIgIyMjIwotc2Nhbm9iai11cGRhdGU6Ci0JLXJtIHNjYW5vYmotYnVpbGQuc3RhbXAKLQkkKE1BS0UpIHNjYW5vYmotYnVpbGQuc3RhbXAKLQotIyBnc3Rkb2Mtc2Nhbm9iaiBwcm9kdWNlcyA1IG91dHB1dCBmaWxlcyAoLm5ldykKLSMgc2NhbmdvYmotbWVyZ2UucHkgbWVyZ2VzIHRoZW0gaW50byB0aGUgZmlsZSB3aGljaCB3ZSBjb21taXQgbGF0ZXIKLSMgVE9ETzogYWxzbyBtZXJnZSB0aGUgaGllcmFyY2h5Ci1zY2Fub2JqLWJ1aWxkLnN0YW1wOiAkKFNDQU5PQkpfREVQUykgJChiYXNlZmlsZXMpCi0JQGVjaG8gIiAgRE9DICAgSW50cm9zcGVjdGluZyBnb2JqZWN0cyIKLQlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLQkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpOwkJCVwKLQkgICAgZG8JCQkJCQkJCVwKLQkgICAgICAgIGlmIHRlc3QgLWUgJChzcmNkaXIpLyQkZjsgdGhlbiBjcCAtdSAkKHNyY2RpcikvJCRmIC4gOyBmaTsJXAotCSAgICBkb25lOwkJCQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JbWtkaXIgLXAgJChJTlNQRUNUX0RJUik7IFwKLQlzY2Fub2JqX29wdGlvbnM9IiI7IFwKLQlpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLQkgICAgc2Nhbm9ial9vcHRpb25zPSItLXZlcmJvc2UiOyBcCi0JZmk7IFwKLQkkKElOU1BFQ1RfRU5WSVJPTk1FTlQpIAkJCQkJXAotCUNDPSIkKEdUS0RPQ19DQykiIExEPSIkKEdUS0RPQ19MRCkiIFJVTj0iJChHVEtET0NfUlVOKSIJXAotCUNGTEFHUz0iJChHVEtET0NfQ0ZMQUdTKSAkKENGTEFHUykgJChXQVJOSU5HX0NGTEFHUykiCVwKLQlMREZMQUdTPSIkKEdUS0RPQ19MSUJTKSAkKExERkxBR1MpIgkJCQlcCi0JJChHU1RfRE9DX1NDQU5PQkopICQkc2Nhbm9ial9vcHRpb25zIC0tdHlwZS1pbml0LWZ1bmM9ImdzdF9pbml0KE5VTEwsTlVMTCkiCVwKLQkgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLXNvdXJjZT0kKFBBQ0tBR0UpIC0taW5zcGVjdC1kaXI9JChJTlNQRUNUX0RJUikgJiYJCVwKLQkgICAgZWNobyAiICBET0MgICBNZXJnaW5nIGludHJvc3BlY3Rpb24gZGF0YSIgJiYgXAotCSAgICAkKFBZVEhPTikJCQkJCQlcCi0JICAgICQodG9wX3NyY2RpcikvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5ICQoRE9DX01PRFVMRSkgfHwgZXhpdCAxOwlcCi0JaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLQkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKTsJCQkJCVwKLQkgICAgZG8JCQkJCQkJCVwKLQkgICAgICAgIGNtcCAtcyAuLyQkZiAkKHNyY2RpcikvJCRmIHx8IGNwIC4vJCRmICQoc3JjZGlyKS8gOwkJXAotCSAgICBkb25lOwkJCQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JdG91Y2ggc2Nhbm9iai1idWlsZC5zdGFtcAotCi0kKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChTQ0FOT0JKX0ZJTEVTX08pOiBzY2FuLWJ1aWxkLnN0YW1wCi0JQHRydWUKLQotIyMjIHNjYW4gaGVhZGVyczsgZG9uZSBvbiBldmVyeSBidWlsZCAjIyMKLXNjYW4tYnVpbGQuc3RhbXA6ICQoSEZJTEVfR0xPQikgJChFWFRSQV9IRklMRVMpICQoYmFzZWZpbGVzKSBzY2Fub2JqLWJ1aWxkLnN0YW1wCi0JQGVjaG8gJyAgRE9DICAgU2Nhbm5pbmcgaGVhZGVyIGZpbGVzJwotCUBpZiB0ZXN0IHgiJChzcmNkaXIpIiAhPSB4LiA7IHRoZW4JCQkJXAotCSAgICBmb3IgZiBpbiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUyk7CQkJXAotCSAgICBkbwkJCQkJCQkJXAotCSAgICAgICAgaWYgdGVzdCAtZSAkKHNyY2RpcikvJCRmOyB0aGVuIGNwIC11ICQoc3JjZGlyKS8kJGYgLiA7IGZpOwlcCi0JICAgIGRvbmU7CQkJCQkJCVwKLQlmaQotCUBfc291cmNlX2Rpcj0nJyA7CQkJCQkJXAotCWZvciBpIGluICQoRE9DX1NPVVJDRV9ESVIpIDsgZG8JCQkJCVwKLQkgICAgX3NvdXJjZV9kaXI9IiQke19zb3VyY2VfZGlyfSAtLXNvdXJjZS1kaXI9JCRpIiA7CSAgICAgICAgXAotCWRvbmUgOwkJCQkJCQkgICAgICAgIFwKLQlndGtkb2Mtc2NhbgkJCQkJCQlcCi0JICAgICQoU0NBTl9PUFRJT05TKSAkKEVYVFJBX0hGSUxFUykJCQkJXAotCSAgICAtLW1vZHVsZT0kKERPQ19NT0RVTEUpCQkJCQlcCi0JICAgICQke19zb3VyY2VfZGlyfSAgICAgICAgICAgICAJCQkJXAotCSAgICAtLWlnbm9yZS1oZWFkZXJzPSIkKElHTk9SRV9IRklMRVMpIjsJCQlcCi0JdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAotCi0jIyMjIHhtbCAjIyMjCi0KLXNnbWwtYnVpbGQuc3RhbXA6IHNjYW4tYnVpbGQuc3RhbXAgJChDRklMRV9HTE9CKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wbHVnaW5zLnhzbCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQotCUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKLQlALW1rZGlyIC1wIHhtbAotCUBmb3IgYSBpbiAkKGluc3BlY3RfZmlsZXMpOyBkbyBcCi0JICAgIHhzbHRwcm9jIC0tc3RyaW5ncGFyYW0gbW9kdWxlICQoTU9EVUxFKSBcCi0JCSQodG9wX3NyY2RpcikvY29tbW9uL3BsdWdpbnMueHNsICQkYSA+IHhtbC9gYmFzZW5hbWUgJCRhYDsgZG9uZQotCUBmb3IgZiBpbiAkKEVYQU1QTEVfQ0ZJTEVTKTsgZG8gXAotCQkkKFBZVEhPTikgJCh0b3Bfc3JjZGlyKS9jb21tb24vYy10by14bWwucHkgJCRmID4geG1sL2VsZW1lbnQtYGJhc2VuYW1lICQkZiAuY2AueG1sOyBkb25lCi0JQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCi0JZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAotCSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCi0JZG9uZSA7CQkJCQkJCQlcCi0JZ3RrZG9jLW1rZGIgXAotCQktLW1vZHVsZT0kKERPQ19NT0RVTEUpIFwKLQkJJCR7X3NvdXJjZV9kaXJ9IFwKLQkJIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiBcCi0JCS0tbWFpbi1zZ21sLWZpbGU9JChzcmNkaXIpLyQoRE9DX01BSU5fU0dNTF9GSUxFKSBcCi0JCS0tb3V0cHV0LWZvcm1hdD14bWwgXAotCQktLWlnbm9yZS1maWxlcz0iJChJR05PUkVfSEZJTEVTKSAkKElHTk9SRV9DRklMRVMpIiBcCi0JCSQoTUtEQl9PUFRJT05TKQotCUAkKFBZVEhPTikgJCh0b3Bfc3JjZGlyKS9jb21tb24vbWFuZ2xlLWRiLnB5IHhtbAotCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAotCUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCi0KLXNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKLQlAdHJ1ZQotCi0jIyMjIGh0bWwgIyMjIwotCi1odG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCi0JQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKLQlAcm0gLXJmIGh0bWwKLQlAbWtkaXIgaHRtbAotCUBjcCAkKHNyY2RpcikvJChET0NfTUFJTl9TR01MX0ZJTEUpIGh0bWwKLQlAZm9yIGYgaW4gJChjb250ZW50X2ZpbGVzKTsgZG8gY3AgJChzcmNkaXIpLyQkZiBodG1sOyBkb25lCi0JQGNwIC1wciB4bWwgaHRtbAotCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIGh0bWwKLQlAbWtodG1sX29wdGlvbnM9IiI7IFwKLQlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCi0JaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotCSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCi0JICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKLQkgIGZpOyBcCi0JZmk7IFwKLQljZCBodG1sICYmIGd0a2RvYy1ta2h0bWwgJCRta2h0bWxfb3B0aW9ucyAkKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05AICQoRE9DX01BSU5fU0dNTF9GSUxFKQotCUBybSAtZiBodG1sLyQoRE9DX01BSU5fU0dNTF9GSUxFKQotCUBybSAtcmYgaHRtbC94bWwKLQlAcm0gLWYgaHRtbC92ZXJzaW9uLmVudGl0aWVzCi0JQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgZm9yIGkgaW4gIiIgJChIVE1MX0lNQUdFUykgOyBkbyBcCi0JICAgIGlmIHRlc3QgIiQkaSIgIT0gIiI7IHRoZW4gY3AgJChzcmNkaXIpLyQkaSBodG1sIDsgZmk7IGRvbmUKLQlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKLQlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQotCUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCi0KLWNsZWFuLWxvY2FsLWd0a2RvYzoKLQlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKLSMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCi0JQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCi0JICAgIHJtIC1yZiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUykgJChSRVBPUlRfRklMRVMpIFwKLQkgICAgICAgICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKTsgXAotCWZpCi1lbHNlCi1hbGwtbG9jYWw6Ci1jbGVhbi1sb2NhbC1ndGtkb2M6Ci1lbmRpZgotCi1jbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtZ3RrZG9jCi0JQHJtIC1mICp+ICouYmFrCi0JQHJtIC1yZiAubGlicwotCi1kaXN0Y2xlYW4tbG9jYWw6Ci0JQHJtIC1mICQoUkVQT1JUX0ZJTEVTKSBcCi0JICAgICAgICAkKERPQ19NT0RVTEUpLWRlY2wtbGlzdC50eHQgJChET0NfTU9EVUxFKS1kZWNsLnR4dAotCUBybSAtcmYgdG1wbC8qLnNnbWwuYmFrCi0JQHJtIC1mICQoRE9DX01PRFVMRSkuaGllcmFyY2h5Ci0JQHJtIC1mICouc3RhbXAgfHwgdHJ1ZQotCUBpZiB0ZXN0ICIkKGFic19zcmNkaXIpIiAhPSAiJChhYnNfYnVpbGRkaXIpIiA7IHRoZW4gXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLWRvY3Muc2dtbCA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS50eXBlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSkucHJlcmVxdWlzaXRlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgOyBcCi0JICAgIHJtIC1yZiB0bXBsLyouc2dtbCA7IFwKLQkgICAgcm0gLXJmICQoSU5TUEVDVF9ESVIpOyBcCi0JZmkKLQlAcm0gLXJmICoubwotCi1NQUlOVEFJTkVSQ0xFQU5GSUxFUyA9ICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKQotCi0jIHRob21hczogbWFrZSBkb2NzIHBhcmFsbGVsIGluc3RhbGxhYmxlOyBkZXZoZWxwIHJlcXVpcmVzIG1ham9ybWlub3IgdG9vCi1pbnN0YWxsLWRhdGEtbG9jYWw6Ci0JKGluc3RhbGxmaWxlcz1gZWNobyAkKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3NgOyBcCi0JaWYgdGVzdCAiJCRpbnN0YWxsZmlsZXMiID0gJyQoYnVpbGRkaXIpL2h0bWwvKi5zZ21sICQoYnVpbGRkaXIpL2h0bWwvKi5odG1sICQoYnVpbGRkaXIpL2h0bWwvKi5wbmcgJChidWlsZGRpcikvaHRtbC8qLmNzcyc7IFwKLQl0aGVuIGVjaG8gJy0tIE5vdGhpbmcgdG8gaW5zdGFsbCcgOyBcCi0JZWxzZSBcCi0JICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBmb3IgaSBpbiAkJGluc3RhbGxmaWxlczsgZG8gXAotCSAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChERVNURElSKSQoVEFSR0VUX0RJUik7IFwKLQkgIGRvbmU7IFwKLQkgIHBuZ2ZpbGVzPWBlY2hvIC4vaHRtbC8qLnBuZ2A7IFwKLQkgIGlmIHRlc3QgIiQkcG5nZmlsZXMiICE9ICcuL2h0bWwvKi5wbmcnOyB0aGVuIFwKLQkgICAgZm9yIGkgaW4gJCRwbmdmaWxlczsgZG8gXAotCSAgICAgIGVjaG8gJy0tIEluc3RhbGxpbmcgJyQkaSA7IFwKLQkgICAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICAgIGRvbmU7IFwKLQkgIGZpOyBcCi0JICBlY2hvICctLSBJbnN0YWxsaW5nICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMicgOyBcCi0JICBpZiB0ZXN0IC1lICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgdGhlbiBcCi0JICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMiBcCi0JICAgICAgICAgICAgJChERVNURElSKSQoVEFSR0VUX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgXAotCSAgZmk7IFwKLQkgICQoR1RLRE9DX1JFQkFTRSkgLS1yZWxhdGl2ZSAtLWRlc3QtZGlyPSQoREVTVERJUikgLS1odG1sLWRpcj0kKERFU1RESVIpJChUQVJHRVRfRElSKSB8fCB0cnVlIDsgXAotCWZpKQotdW5pbnN0YWxsLWxvY2FsOgotCWlmIHRlc3QgLWQgJChERVNURElSKSQoVEFSR0VUX0RJUik7IHRoZW4gXAotCSAgcm0gLXJmICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyo7IFwKLQkgIHJtZGlyIC1wICQoREVTVERJUikkKFRBUkdFVF9ESVIpIDI+L2Rldi9udWxsIHx8IHRydWU7IFwKLQllbHNlIFwKLQkgIGVjaG8gJy0tIE5vdGhpbmcgdG8gdW5pbnN0YWxsJyA7IFwKLQlmaTsKLQotIwotIyBDaGVja3MKLSMKLWlmIEVOQUJMRV9HVEtfRE9DCi1jaGVjay1oaWVyYXJjaHk6ICQoRE9DX01PRFVMRSkuaGllcmFyY2h5Ci0JQGlmIGdyZXAgJwknICQoRE9DX01PRFVMRSkuaGllcmFyY2h5OyB0aGVuIFwKLQkgICAgZWNobyAiJChET0NfTU9EVUxFKS5oaWVyYXJjaHkgY29udGFpbnMgdGFicywgcGxlYXNlIGZpeCI7IFwKLQkgICAgL2Jpbi9mYWxzZTsgXAotCWZpCi0KLWNoZWNrOiBjaGVjay1oaWVyYXJjaHkKLWVuZGlmCi0KLSMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAotaW5zcGVjdF9maWxlcyA9ICQoc2hlbGwgZmluZCAkKHNyY2RpcikvJChJTlNQRUNUX0RJUikgLW5hbWUgJyoueG1sJykKLQotY2hlY2staW5zcGVjdGVkLXZlcnNpb25zOgotCUBlY2hvIENoZWNraW5nIHBsdWdpbiB2ZXJzaW9ucyBvZiBpbnNwZWN0ZWQgcGx1Z2luIGRhdGEgLi4uOyBcCi0JZmFpbD0wIDsgXAotCWZvciBlYWNoIGluICQoaW5zcGVjdF9maWxlcykgOyBkbyBcCi0JICBpZiAoZ3JlcCAtSCAnPHZlcnNpb24+JyAkJGVhY2ggfCBncmVwIC12ICc8dmVyc2lvbj4kKFZFUlNJT04pJyk7IHRoZW4gXAotCSAgICBlY2hvICQkZWFjaCBzaG91bGQgYmUgZml4ZWQgdG8gc2F5IHZlcnNpb24gJChWRVJTSU9OKSBvciBiZSByZW1vdmVkIDsgXAotCSAgICBlY2hvICJzZWQgLWkgLWUgJ3MvPHZlcnNpb24uKnZlcnNpb24+Lzx2ZXJzaW9uPiQoVkVSU0lPTik8XC92ZXJzaW9uPi8nIiAkJGVhY2g7IFwKLQkgICAgZWNobyA7IFwKLQkgICAgZmFpbD0xOyBcCi0JICBmaSA7IFwKLQlkb25lIDsgXAotCWV4aXQgJCRmYWlsCi0KLWNoZWNrLW91dGRhdGVkLWRvY3M6Ci0JJChBTV9WX0dFTillY2hvIENoZWNraW5nIGZvciBvdXRkYXRlZCBwbHVnaW4gaW5zcGVjdCBkYXRhIC4uLjsgXAotCWZhaWw9MCA7IFwKLQlpZiBbIC1kICQodG9wX3NyY2RpcikvLmdpdC8gXTsgdGhlbiBcCi0JICBmaWxlcz1gZmluZCAkKHNyY2RpcikvaW5zcGVjdC8gLW5hbWUgJyp4bWwnYDsgXAotCSAgZm9yIGYgaW4gJCRmaWxlczsgZG8gXAotCSAgICB2ZXI9YGdyZXAgJzx2ZXJzaW9uPiQoUEFDS0FHRV9WRVJTSU9OKTwvdmVyc2lvbj4nICQkZmA7IFwKLQkgICAgaWYgdGVzdCAieCQkdmVyIiA9ICJ4IjsgdGhlbiBcCi0JICAgICAgcGx1Z2luPWBlY2hvICQkZiB8IHNlZCAtZSAncy9eLipwbHVnaW4tLy8nIC1lICdzLy54bWwvLydgOyBcCi0JICAgICAgIyBlY2hvICJDaGVja2luZyAkJHBsdWdpbiAkJGYiOyBcCi0JICAgICAgcHVzaGQgIiQodG9wX3NyY2RpcikiID4vZGV2L251bGw7IFwKLQkgICAgICBwaW5pdD1gZ2l0IGdyZXAgLUEzIEdTVF9QTFVHSU5fREVGSU5FIC0tIGV4dC8gZ3N0LyBzeXMvIHwgZ3JlcCAiXCIkJHBsdWdpblwiImA7IFwKLQkgICAgICBwb3BkID4vZGV2L251bGw7IFwKLQkgICAgICAjIGVjaG8gIlskJHBpbml0XSI7IFwKLQkgICAgICBpZiB0ZXN0ICJ4JCRwaW5pdCIgPSAieCI7IHRoZW4gXAotCSAgICAgICAgcHJpbnRmICIgKioqKiBvdXRkYXRlZCBkb2NzIGZvciBwbHVnaW4gJS0xNXM6ICVzXG4iICQkcGx1Z2luICQkZjsgXAotCSAgICAgICAgZmFpbD0xOyBcCi0JICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQlmaSA7IFwKLQlleGl0ICQkZmFpbAotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1pZiBFTkFCTEVfR1RLX0RPQwotZGlzdC1jaGVjay1ndGtkb2M6Ci1lbHNlCi1kaXN0LWNoZWNrLWd0a2RvYzoKLQlAZWNobyAiKioqIGd0ay1kb2MgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgaW4gb3JkZXIgdG8gbWFrZSBkaXN0IgotCUBmYWxzZQotZW5kaWYKLQotIyBGSVhNRTogZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkaXN0IGdlbmVyYXRlZCBodG1sIG9yIG5vdAotIyBhbHNvIHRoaXMgb25seSB3b3JrcywgaWYgdGhlIHByb2plY3QgaGFzIGJlZW4gYnVpbGQgYmVmb3JlCi0jIHdlIGNvdWxkIGRpc3QgaHRtbCBvbmx5IGlmIGl0cyB0aGVyZSwgYnV0IHRoYXQgbWlnaHQgbGVhZCB0byBtaXNzaW5nIGh0bWwgaW4KLSMgdGFyYmFsbHMKLWRpc3QtaG9vazogZGlzdC1jaGVjay1ndGtkb2MgZGlzdC1ob29rLWxvY2FsCi0JbWtkaXIgJChkaXN0ZGlyKS9odG1sCi0JY3AgaHRtbC8qICQoZGlzdGRpcikvaHRtbAotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS50eXBlcyAkKGRpc3RkaXIpLwotCS1jcCAkKHNyY2RpcikvJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQgJChkaXN0ZGlyKS8KLQljZCAkKGRpc3RkaXIpICYmIHJtIC1mICQoRElTVENMRUFORklMRVMpCi0JLWd0a2RvYy1yZWJhc2UgLS1vbmxpbmUgLS1yZWxhdGl2ZSAtLWh0bWwtZGlyPSQoZGlzdGRpcikvaHRtbAotCi0uUEhPTlkgOiBkaXN0LWhvb2stbG9jYWwgZG9jcyBjaGVjay1vdXRkYXRlZC1kb2NzIGluc3BlY3QKLQotIyBhdm9pZCBzcHVyaW91cyBidWlsZCBlcnJvcnMgd2hlbiBkaXN0Y2hlY2tpbmcgd2l0aCAtak4KLS5OT1RQQVJBTExFTDoKZGlmZiAtLWdpdCBhL2NvbW1vbi9ndGstZG9jLm1hayBiL2NvbW1vbi9ndGstZG9jLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4MzQ5MS4uMDAwMDAwMAotLS0gYS9jb21tb24vZ3RrLWRvYy5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBnZW5lcmljIGFuZCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHRob21hczogZXhjZXB0IG9mIGNvdXJzZSB0aGF0IHdlIGRpZAotCi1pZiBHVEtfRE9DX1VTRV9MSUJUT09MCi1HVEtET0NfQ0MgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoSU5DTFVERVMpICQoR1RLRE9DX0RFUFNfQ0ZMQUdTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1HVEtET0NfTEQgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0MpICQoR1RLRE9DX0RFUFNfTElCUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykKLUdUS0RPQ19SVU4gPSAkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCi1lbHNlCi1HVEtET0NfQ0MgPSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotR1RLRE9DX0xEID0gJChDQykgJChHVEtET0NfREVQU19MSUJTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKQotR1RLRE9DX1JVTiA9Ci1lbmRpZgotCi0jIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKLSMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KLSMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KLSMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgotIwotR1BBVEggPSAkKHNyY2RpcikKLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQotVEFSR0VUX0RJUj0kKEhUTUxfRElSKS8kKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05ACi0KLUVYVFJBX0RJU1QgPSAJCQkJXAotCSQoY29udGVudF9maWxlcykJCVwKLQkkKGV4dHJhX2ZpbGVzKQkJCVwKLQkkKEhUTUxfSU1BR0VTKQkJCVwKLQkkKERPQ19NQUlOX1NHTUxfRklMRSkJCVwKLQkkKERPQ19NT0RVTEUpLnR5cGVzCQlcCi0JJChET0NfT1ZFUlJJREVTKQkJXAotCSQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0Ci0KLURPQ19TVEFNUFMgPQkJCQlcCi0Jc2V0dXAtYnVpbGQuc3RhbXAJCVwKLQlzY2FuLWJ1aWxkLnN0YW1wCQlcCi0Jc2dtbC1idWlsZC5zdGFtcAkJXAotCWh0bWwtYnVpbGQuc3RhbXAJCVwKLQlzZ21sLnN0YW1wCQlcCi0JaHRtbC5zdGFtcAotCi1TQ0FOT0JKX0ZJTEVTID0JCQkJXAotCSQoRE9DX01PRFVMRSkuYXJncwkJXAotCSQoRE9DX01PRFVMRSkuaGllcmFyY2h5CQlcCi0JJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzCQlcCi0JJChET0NfTU9EVUxFKS5wcmVyZXF1aXNpdGVzCVwKLQkkKERPQ19NT0RVTEUpLnNpZ25hbHMJCVwKLQkubGlicy8kKERPQ19NT0RVTEUpLXNjYW4ubwotCi1SRVBPUlRfRklMRVMgPSBcCi0JJChET0NfTU9EVUxFKS11bmRvY3VtZW50ZWQudHh0IFwKLQkkKERPQ19NT0RVTEUpLXVuZGVjbGFyZWQudHh0IFwKLQkkKERPQ19NT0RVTEUpLXVudXNlZC50eHQKLQotQ0xFQU5GSUxFUyA9ICQoU0NBTk9CSl9GSUxFUykgJChSRVBPUlRfRklMRVMpICQoRE9DX1NUQU1QUykgZG9jLXJlZ2lzdHJ5LnhtbAotCi1pZiBFTkFCTEVfR1RLX0RPQwotYWxsLWxvY2FsOiBodG1sLWJ1aWxkLnN0YW1wCi0KLSMjIyMgc2V0dXAgIyMjIwotCi1zZXR1cC1idWlsZC5zdGFtcDogJChjb250ZW50X2ZpbGVzKQotCS1AaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKLQkgICAgZWNobyAnICBET0MgICBQcmVwYXJpbmcgYnVpbGQnOyBcCi0JICAgIGZpbGVzPWBlY2hvICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKERPQ19PVkVSUklERVMpICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoRE9DX01PRFVMRSkudHlwZXMgJChjb250ZW50X2ZpbGVzKWA7IFwKLQkgICAgaWYgdGVzdCAieCQkZmlsZXMiICE9ICJ4IiA7IHRoZW4gXAotCSAgICAgICAgZm9yIGZpbGUgaW4gJCRmaWxlcyA7IGRvIFwKLQkgICAgICAgICAgICB0ZXN0IC1mICQoYWJzX3NyY2RpcikvJCRmaWxlICYmIFwKLQkgICAgICAgICAgICAgICAgY3AgLXB1ICQoYWJzX3NyY2RpcikvJCRmaWxlICQoYWJzX2J1aWxkZGlyKS8gfHwgdHJ1ZTsgXAotCSAgICAgICAgZG9uZTsgXAotCSAgICBmaTsgXAotCWZpCi0JQHRvdWNoIHNldHVwLWJ1aWxkLnN0YW1wCi0KLSMjIyMgc2NhbiAjIyMjCi0KLSMgaW4gdGhlIGNhc2Ugb2Ygbm9uLXNyY2RpciBidWlsZHMsIHRoZSBidWlsdCBnc3QgZGlyZWN0b3J5IGdldHMgYWRkZWQKLSMgdG8gZ3RrLWRvYyBzY2FubmluZzsgYnV0IG9ubHkgdGhlbiwgdG8gYXZvaWQgZHVwbGljYXRlcwotc2Nhbi1idWlsZC5zdGFtcDogJChIRklMRV9HTE9CKSAkKENGSUxFX0dMT0IpCi0JQGVjaG8gJyAgRE9DICAgU2Nhbm5pbmcgaGVhZGVyIGZpbGVzJwotCUBfc291cmNlX2Rpcj0nJyA7CQkJCQkJXAotCWZvciBpIGluICQoRE9DX1NPVVJDRV9ESVIpIDsgZG8JCQkJCVwKLQkgICAgX3NvdXJjZV9kaXI9IiQke19zb3VyY2VfZGlyfSAtLXNvdXJjZS1kaXI9JCRpIiA7CSAgICAgICAgXAotCWRvbmUgOwkJCQkJCQkgICAgICAgIFwKLQlndGtkb2Mtc2NhbgkJCQkJCQlcCi0JCSQoU0NBTl9PUFRJT05TKSAkKEVYVFJBX0hGSUxFUykJCQkJXAotCQktLW1vZHVsZT0kKERPQ19NT0RVTEUpCQkJCQlcCi0JCSQke19zb3VyY2VfZGlyfSAgICAgICAgIAkJCQlcCi0JCS0taWdub3JlLWhlYWRlcnM9IiQoSUdOT1JFX0hGSUxFUykiCi0JQGlmIGdyZXAgLWwgJ14uLiokJCcgJChET0NfTU9EVUxFKS50eXBlcyA+IC9kZXYvbnVsbDsgdGhlbglcCi0JICAgIGVjaG8gIiAgRE9DICAgSW50cm9zcGVjdGluZyBnb2JqZWN0cyI7IFwKLQkgICAgc2Nhbm9ial9vcHRpb25zPSIiOyBcCi0JICAgIGd0a2RvYy1zY2FuZ29iaiAyPiYxIC0taGVscCB8IGdyZXAgID4vZGV2L251bGwgIlwtXC12ZXJib3NlIjsgXAotCSAgICBpZiB0ZXN0ICIkJD8iID0gIjAiOyB0aGVuIFwKLQkgICAgICAgIGlmIHRlc3QgIngkKFYpIiA9ICJ4MSI7IHRoZW4gXAotCSAgICAgICAgICAgIHNjYW5vYmpfb3B0aW9ucz0iLS12ZXJib3NlIjsgXAotCSAgICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgICAgR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9YGNkICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgCVwKLQkgICAgR1NUX1BMVUdJTl9QQVRIXzFfMD0JCQkJCVwKLQkgICAgR1NUX1JFR0lTVFJZXzFfMD1kb2MtcmVnaXN0cnkueG1sCQkJCVwKLQkgICAgJChHVEtET0NfRVhUUkFfRU5WSVJPTk1FTlQpCQkJCQlcCi0JICAgIENDPSIkKEdUS0RPQ19DQykiIExEPSIkKEdUS0RPQ19MRCkiIFJVTj0iJChHVEtET0NfUlVOKSIJXAotCSAgICBDRkxBR1M9IiQoR1RLRE9DX0NGTEFHUykgJChDRkxBR1MpIgkJCQlcCi0JICAgIExERkxBR1M9IiQoR1RLRE9DX0xJQlMpICQoTERGTEFHUykiCQkJCVwKLQkgICAgZ3RrZG9jLXNjYW5nb2JqIC0tdHlwZS1pbml0LWZ1bmM9ImdzdF9pbml0KE5VTEwsTlVMTCkiCVwKLQkgICAgICAgICQkc2Nhbm9ial9vcHRpb25zIC0tbW9kdWxlPSQoRE9DX01PRFVMRSkgOwkJXAotCWVsc2UJCQkJCQkJCVwKLQkgICAgZm9yIGkgaW4gJChTQ0FOT0JKX0ZJTEVTKSA7IGRvCQkJCVwKLQkgICAgICAgJChNS0RJUl9QKSAkKGRpcm5hbWUgJCRpKSA7CQkJCVwKLQkgICAgICAgdGVzdCAtZiAkJGkgfHwgdG91Y2ggJCRpIDsJCQkJXAotCSAgICBkb25lCQkJCQkJCVwKLQlmaQotCUB0b3VjaCBzY2FuLWJ1aWxkLnN0YW1wCi0KLSQoRE9DX01PRFVMRSktZGVjbC50eHQgJChTQ0FOT0JKX0ZJTEVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQ6IHNjYW4tYnVpbGQuc3RhbXAKLQlAdHJ1ZQotCi0jIyMjIHhtbCAjIyMjCi0KLXNnbWwtYnVpbGQuc3RhbXA6IHNldHVwLWJ1aWxkLnN0YW1wICQoRE9DX01PRFVMRSktZGVjbC50eHQgJChTQ0FOT0JKX0ZJTEVTKSAkKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQotCUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKLQlAX3NvdXJjZV9kaXI9JycgOwkJCQkJCVwKLQlmb3IgaSBpbiAkKERPQ19TT1VSQ0VfRElSKSA7IGRvCQkJCQlcCi0JICAgIF9zb3VyY2VfZGlyPSIkJHtfc291cmNlX2Rpcn0gLS1zb3VyY2UtZGlyPSQkaSIgOwkgICAgICAgIFwKLQlkb25lIDsJCQkJCQkJICAgICAgICBcCi0JZ3RrZG9jLW1rZGIgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAkJHtfc291cmNlX2Rpcn0gIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiAtLW1haW4tc2dtbC1maWxlPSQoRE9DX01BSU5fU0dNTF9GSUxFKSAtLW91dHB1dC1mb3JtYXQ9eG1sICQoTUtEQl9PUFRJT05TKQotCUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAotCUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCi0KLXNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKLQlAdHJ1ZQotCi0jIyMjIGh0bWwgIyMjIwotCi1odG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCi0JQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKLQlAcm0gLXJmIGh0bWwKLQlAbWtkaXIgaHRtbAotCUBjcCAtcHIgeG1sIGh0bWwKLQlAY3AgLi4vdmVyc2lvbi5lbnRpdGllcyAuLwotCUBta2h0bWxfb3B0aW9ucz0iIjsgXAotCWd0a2RvYy1ta2h0bWwgMj4mMSAtLWhlbHAgfCBncmVwICA+L2Rldi9udWxsICJcLVwtdmVyYm9zZSI7IFwKLQlpZiB0ZXN0ICIkKD8pIiA9ICIwIjsgdGhlbiBcCi0JICBpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLQkgICAgbWtodG1sX29wdGlvbnM9IiQkbWtodG1sX29wdGlvbnMgLS12ZXJib3NlIjsgXAotCSAgZmk7IFwKLQlmaTsgXAotCUBndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXBhdGgiOyBcCi0JaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotCSAgbWtodG1sX29wdGlvbnM9LS1wYXRoPSIkKGFic19zcmNkaXIpIjsgXAotCWZpOyBcCi0JY2QgaHRtbCAmJiBndGtkb2MtbWtodG1sICQkbWtodG1sX29wdGlvbnMgJChNS0hUTUxfT1BUSU9OUykgJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQCAuLi8kKERPQ19NQUlOX1NHTUxfRklMRSkKLQlAcm0gLXJmIGh0bWwveG1sCi0JQHJtIC1mIHZlcnNpb24uZW50aXRpZXMKLQlAdGVzdCAieCQoSFRNTF9JTUFHRVMpIiA9ICJ4IiB8fCAgKCBjZCAkKHNyY2RpcikgJiYgY3AgJChIVE1MX0lNQUdFUykgJChhYnNfYnVpbGRkaXIpL2h0bWwgKQotCUBlY2hvICcgIERPQyAgIEZpeGluZyBjcm9zcy1yZWZlcmVuY2VzJwotCUBndGtkb2MtZml4eHJlZiAtLW1vZHVsZT0kKERPQ19NT0RVTEUpIC0tbW9kdWxlLWRpcj1odG1sIC0taHRtbC1kaXI9JChIVE1MX0RJUikgJChGSVhYUkVGX09QVElPTlMpCi0JQHRvdWNoIGh0bWwtYnVpbGQuc3RhbXAKLQotY2xlYW4tbG9jYWwtZ3RrZG9jOgotCUBybSAtcmYgeG1sIHRtcGwgaHRtbAotIyBjbGVhbiBmaWxlcyBjb3BpZWQgZm9yIG5vbnNyY2RpciB0ZW1wbGF0ZXMgYnVpbGQKLQlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuIFwKLQkgICAgICAgIHJtIC1yZiAkKERPQ19NT0RVTEUpLnR5cGVzOyBcCi0JZmkKLWVsc2UKLWFsbC1sb2NhbDoKLWNsZWFuLWxvY2FsLWd0a2RvYzoKLWVuZGlmCi0KLWNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1ndGtkb2MKLQlAcm0gLWYgKn4gKi5iYWsKLQlAcm0gLXJmIC5saWJzCi0KLWRpc3RjbGVhbi1sb2NhbDoKLQlAcm0gLWYgJChSRVBPUlRfRklMRVMpIFwKLQkgICAgICAgICQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dCAkKERPQ19NT0RVTEUpLWRlY2wudHh0Ci0JQHJtIC1yZiB0bXBsLyouc2dtbC5iYWsKLQlAcm0gLWYgJChET0NfTU9EVUxFKS5oaWVyYXJjaHkKLQlAcm0gLWYgKi5zdGFtcCB8fCB0cnVlCi0JQGlmIHRlc3QgIiQoYWJzX3NyY2RpcikiICE9ICIkKGFic19idWlsZGRpcikiIDsgdGhlbiBcCi0JICAgIHJtIC1mICQoRE9DX01BSU5fU0dNTF9GSUxFKSA7IFwKLQkgICAgcm0gLWYgJChET0NfT1ZFUlJJREVTKSA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS50eXBlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS5pbnRlcmZhY2VzIDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0IDsgXAotCSAgICBybSAtZiAkKGNvbnRlbnRfZmlsZXMpIDsgXAotCSAgICBybSAtcmYgdG1wbC8qLnNnbWwgOyBcCi0JZmkKLQlAcm0gLXJmICoubwotCi1tYWludGFpbmVyLWNsZWFuLWxvY2FsOiBjbGVhbgotCUBjZCAkKHNyY2RpcikgJiYgcm0gLXJmIGh0bWwgXAotCQl4bWwgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZTsgZGV2aGVscCByZXF1aXJlcyBtYWpvcm1pbm9yIHRvbwotaW5zdGFsbC1kYXRhLWxvY2FsOgotCShpbnN0YWxsZmlsZXM9YGVjaG8gJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzYDsgXAotCWlmIHRlc3QgIiQkaW5zdGFsbGZpbGVzIiA9ICckKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3MnOyBcCi0JdGhlbiBlY2hvICctLSBOb3RoaW5nIHRvIGluc3RhbGwnIDsgXAotCWVsc2UgXAotCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAotCSAgZm9yIGkgaW4gJCRpbnN0YWxsZmlsZXM7IGRvIFwKLQkgICAgZWNobyAnLS0gSW5zdGFsbGluZyAnJCRpIDsgXAotCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBkb25lOyBcCi0JICBlY2hvICctLSBJbnN0YWxsaW5nICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMicgOyBcCi0JICBpZiB0ZXN0IC1lICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgdGhlbiBcCi0JICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQoYnVpbGRkaXIpL2h0bWwvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMiBcCi0JICAgICAgICAgICAgJChERVNURElSKSQoVEFSR0VUX0RJUikvJChET0NfTU9EVUxFKS1AR1NUX0FQSV9WRVJTSU9OQC5kZXZoZWxwMjsgXAotCSAgZmk7IFwKLQkgICQoR1RLRE9DX1JFQkFTRSkgLS1yZWxhdGl2ZSAtLWRlc3QtZGlyPSQoREVTVERJUikgLS1odG1sLWRpcj0kKERFU1RESVIpJChUQVJHRVRfRElSKSB8fCB0cnVlIDsgXAotCWZpKQotdW5pbnN0YWxsLWxvY2FsOgotCWlmIHRlc3QgLWQgJChERVNURElSKSQoVEFSR0VUX0RJUik7IHRoZW4gXAotCSAgcm0gLXJmICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyo7IFwKLQkgIHJtZGlyIC1wICQoREVTVERJUikkKFRBUkdFVF9ESVIpIDI+L2Rldi9udWxsIHx8IHRydWU7IFwKLQllbHNlIFwKLQkgIGVjaG8gJy0tIE5vdGhpbmcgdG8gdW5pbnN0YWxsJyA7IFwKLQlmaTsKLQotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1pZiBFTkFCTEVfR1RLX0RPQwotZGlzdC1jaGVjay1ndGtkb2M6Ci1lbHNlCi1kaXN0LWNoZWNrLWd0a2RvYzoKLQlAZWNobyAiKioqIGd0ay1kb2MgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGVuYWJsZWQgaW4gb3JkZXIgdG8gbWFrZSBkaXN0IgotCUBmYWxzZQotZW5kaWYKLQotZGlzdC1ob29rOiBkaXN0LWNoZWNrLWd0a2RvYyBkaXN0LWhvb2stbG9jYWwKLQlta2RpciAkKGRpc3RkaXIpL2h0bWwKLQljcCBodG1sLyogJChkaXN0ZGlyKS9odG1sCi0JLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLnR5cGVzICQoZGlzdGRpcikvCi0JLWNwICQoc3JjZGlyKS8kKERPQ19NT0RVTEUpLXNlY3Rpb25zLnR4dCAkKGRpc3RkaXIpLwotCWNkICQoZGlzdGRpcikgJiYgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQktZ3RrZG9jLXJlYmFzZSAtLW9ubGluZSAtLXJlbGF0aXZlIC0taHRtbC1kaXI9JChkaXN0ZGlyKS9odG1sCi0KLS5QSE9OWSA6IGRpc3QtaG9vay1sb2NhbCBkb2NzCi0KLSMgYXZvaWQgc3B1cmlvdXMgYnVpbGQgZXJyb3JzIHdoZW4gZGlzdGNoZWNraW5nIHdpdGggLWpOCi0uTk9UUEFSQUxMRUw6CmRpZmYgLS1naXQgYS9jb21tb24vbTQvTWFrZWZpbGUuYW0gYi9jb21tb24vbTQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkY2VjOGMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotRVhUUkFfRElTVCA9IFwKLQlSRUFETUUgXAotCWFzLWFjLWV4cGFuZC5tNCBcCi0JYXMtYXV0by1hbHQubTQgXAotCWFzLWNvbXBpbGVyLWZsYWcubTQgXAotCWFzLWNvbXBpbGVyLm00IFwKLQlhcy1kb2Nib29rLm00IFwKLQlhcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQlhcy1saWJ0b29sLm00IFwKLQlhcy1saWJ0b29sLXRhZ3MubTQgXAotCWFzLXB5dGhvbi5tNCBcCi0JYXMtdmVyc2lvbi5tNCBcCi0JYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQlheF9wdGhyZWFkLm00IFwKLQlnbGliLWdldHRleHQubTQgXAotCWdzdC1hcmNoLm00IFwKLQlnc3QtYXJncy5tNCBcCi0JZ3N0LWNoZWNrLm00IFwKLQlnc3QtZGVidWdpbmZvLm00IFwKLQlnc3QtZGVmYXVsdC5tNCBcCi0JZ3N0LWRvYy5tNCBcCi0JZ3N0LWRvd2hpbGUubTQgXAotCWdzdC1lcnJvci5tNCBcCi0JZ3N0LWZlYXR1cmUubTQgXAotCWdzdC1mdW5jdGlvbi5tNCBcCi0JZ3N0LWdldHRleHQubTQgXAotCWdzdC1nbGliMi5tNCBcCi0JZ3N0LWxpYnhtbDIubTQgXAotCWdzdC1wYXJzZXIubTQgXAotCWdzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCWdzdC1wbGF0Zm9ybS5tNCBcCi0JZ3N0LXBsdWdpbmRpci5tNCBcCi0JZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQlnc3QtdmFsZ3JpbmQubTQgXAotCWdzdC14MTEubTQgXAotCWdzdC5tNCBcCi0JZ3RrLWRvYy5tNCBcCi0JaW50cm9zcGVjdGlvbi5tNCBcCi0JcGtnLm00IFwKLQljaGVjay5tNCBcCi0Jb3JjLm00CmRpZmYgLS1naXQgYS9jb21tb24vbTQvTWFrZWZpbGUuaW4gYi9jb21tb24vbTQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxY2UwYmQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNzIzICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gY29tbW9uL200Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotRVhUUkFfRElTVCA9IFwKLQlSRUFETUUgXAotCWFzLWFjLWV4cGFuZC5tNCBcCi0JYXMtYXV0by1hbHQubTQgXAotCWFzLWNvbXBpbGVyLWZsYWcubTQgXAotCWFzLWNvbXBpbGVyLm00IFwKLQlhcy1kb2Nib29rLm00IFwKLQlhcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQlhcy1saWJ0b29sLm00IFwKLQlhcy1saWJ0b29sLXRhZ3MubTQgXAotCWFzLXB5dGhvbi5tNCBcCi0JYXMtdmVyc2lvbi5tNCBcCi0JYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQlheF9wdGhyZWFkLm00IFwKLQlnbGliLWdldHRleHQubTQgXAotCWdzdC1hcmNoLm00IFwKLQlnc3QtYXJncy5tNCBcCi0JZ3N0LWNoZWNrLm00IFwKLQlnc3QtZGVidWdpbmZvLm00IFwKLQlnc3QtZGVmYXVsdC5tNCBcCi0JZ3N0LWRvYy5tNCBcCi0JZ3N0LWRvd2hpbGUubTQgXAotCWdzdC1lcnJvci5tNCBcCi0JZ3N0LWZlYXR1cmUubTQgXAotCWdzdC1mdW5jdGlvbi5tNCBcCi0JZ3N0LWdldHRleHQubTQgXAotCWdzdC1nbGliMi5tNCBcCi0JZ3N0LWxpYnhtbDIubTQgXAotCWdzdC1wYXJzZXIubTQgXAotCWdzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCWdzdC1wbGF0Zm9ybS5tNCBcCi0JZ3N0LXBsdWdpbmRpci5tNCBcCi0JZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQlnc3QtdmFsZ3JpbmQubTQgXAotCWdzdC14MTEubTQgXAotCWdzdC5tNCBcCi0JZ3RrLWRvYy5tNCBcCi0JaW50cm9zcGVjdGlvbi5tNCBcCi0JcGtnLm00IFwKLQljaGVjay5tNCBcCi0Jb3JjLm00Ci0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGNvbW1vbi9tNC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBjb21tb24vbTQvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi10YWdzIFRBR1M6Ci0KLWN0YWdzIENUQUdTOgotCi1jc2NvcGUgY3Njb3BlbGlzdDoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCi0JY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9SRUFETUUgYi9jb21tb24vbTQvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjdhMzQ0Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLUFsbCBhY2xvY2FsIC5tNCBmaWxlcyB3ZSBuZWVkIGFyZSBwdXQgaGVyZSBhbmQgY2F0J2QgdG8gYWNpbmNsdWRlLm00IGluCi10aGUgc291cmNlIHJvb3QuICBPZmZpY2lhbCBvbmVzICh0YWtlbiBmcm9tIHRoZSByZWxldmFudCBkZXZlbCBwYWNrYWdlcykKLWFyZSBuYW1lZCBhcy1pcywgdW5vZmZpY2lhbCBvbmVzIChvciBjaGFuZ2VkIG9uZXMpIGdldCBhIGdzdC1wcmVmaXguCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IGIvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZjOWUzMy4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotZG5sIGFzLWFjLWV4cGFuZC5tNCAwLjIuMAotZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgZXhwYW5kaW5nIGRpcmVjdG9yaWVzIHVzaW5nIGNvbmZpZ3VyZSdzIHByZWZpeAotZG5sIHRob21hc0BhcGVzdGFhcnQub3JnCi0KLWRubCBBU19BQ19FWFBBTkQoVkFSLCBDT05GSUdVUkVfVkFSKQotZG5sIGV4YW1wbGUKLWRubCBBU19BQ19FWFBBTkQoU1lTQ09ORkRJUiwgJHN5c2NvbmZkaXIpCi1kbmwgd2lsbCBzZXQgU1lTQ09ORkRJUiB0byAvdXNyL2xvY2FsL2V0YyBpZiBwcmVmaXg9L3Vzci9sb2NhbAotCi1BQ19ERUZVTihbQVNfQUNfRVhQQU5EXSwKLVsKLSAgRVhQX1ZBUj1bJDFdCi0gIEZST01fVkFSPVskMl0KLQotICBkbmwgZmlyc3QgZXhwYW5kIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgbmVjZXNzYXJ5Ci0gIHByZWZpeF9zYXZlPSRwcmVmaXgKLSAgZXhlY19wcmVmaXhfc2F2ZT0kZXhlY19wcmVmaXgKLQotICBkbmwgaWYgbm8gcHJlZml4IGdpdmVuLCB0aGVuIHVzZSAvdXNyL2xvY2FsLCB0aGUgZGVmYXVsdCBwcmVmaXgKLSAgaWYgdGVzdCAieCRwcmVmaXgiID0gInhOT05FIjsgdGhlbgotICAgIHByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBmaQotICBkbmwgaWYgbm8gZXhlY19wcmVmaXggZ2l2ZW4sIHRoZW4gdXNlIHByZWZpeAotICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KLSAgICBleGVjX3ByZWZpeD0kcHJlZml4Ci0gIGZpCi0KLSAgZnVsbF92YXI9IiRGUk9NX1ZBUiIKLSAgZG5sIGxvb3AgdW50aWwgaXQgZG9lc24ndCBjaGFuZ2UgYW55bW9yZQotICB3aGlsZSB0cnVlOyBkbwotICAgIG5ld19mdWxsX3Zhcj0iYGV2YWwgZWNobyAkZnVsbF92YXJgIgotICAgIGlmIHRlc3QgIngkbmV3X2Z1bGxfdmFyIiA9ICJ4JGZ1bGxfdmFyIjsgdGhlbiBicmVhazsgZmkKLSAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIGRvbmUKLQotICBkbmwgY2xlYW4gdXAKLSAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBBQ19TVUJTVChbJDFdLCAiJGZ1bGxfdmFyIikKLQotICBkbmwgcmVzdG9yZSBwcmVmaXggYW5kIGV4ZWNfcHJlZml4Ci0gIHByZWZpeD0kcHJlZml4X3NhdmUKLSAgZXhlY19wcmVmaXg9JGV4ZWNfcHJlZml4X3NhdmUKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgYi9jb21tb24vbTQvYXMtYXV0by1hbHQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzkyMGQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotZG5sIGFzLWF1dG8tYWx0Lm00IDAuMC4yCi1kbmwgYXV0b3N0YXJzIG00IG1hY3JvIGZvciBzdXBwbHlpbmcgYWx0ZXJuYXRlIGF1dG90b29scyB2ZXJzaW9ucyB0byBjb25maWd1cmUKLWRubCB0aG9tYXNAYXBlc3RhYXJ0Lm9yZwotZG5sCi1kbmwgQVNfQVVUT1RPT0xTX0FMVEVSTkFURSgpCi1kbmwKLWRubCBzdXBwbGllcyAtLXdpdGggYXJndW1lbnRzIGZvciBhdXRvY29uZiwgYXV0b2hlYWRlciwgYXV0b21ha2UsIGFjbG9jYWwKLQotQUNfREVGVU4oW0FTX0FVVE9UT09MU19BTFRFUk5BVEVdLAotWwotICBkbmwgYWxsb3cgZm9yIGRpZmZlcmVudCBhdXRvY29uZiB2ZXJzaW9uCi0gIEFDX0FSR19XSVRIKGF1dG9jb25mLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtYXV0b2NvbmZdLAotICAgICAgICAgICAgICAgICAgIFt1c2UgYSBkaWZmZXJlbnQgYXV0b2NvbmYgZm9yIHJlZ2VuZXJhdGlvbiBvZiBNYWtlZmlsZXNdKSwKLSAgICBbCi0gICAgICB1bnNldCBBVVRPQ09ORgotICAgICAgQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCAke3dpdGh2YWx9KQotICAgICAgQUNfTVNHX05PVElDRShbVXNpbmcgJEFVVE9DT05GIGFzIGF1dG9jb25mXSkKLSAgICBdKQotCi0gIGRubCBhbGxvdyBmb3IgZGlmZmVyZW50IGF1dG9oZWFkZXIgdmVyc2lvbgotICBBQ19BUkdfV0lUSChhdXRvaGVhZGVyLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtYXV0b2hlYWRlcl0sCi0gICAgICAgICAgICAgICAgICAgW3VzZSBhIGRpZmZlcmVudCBhdXRvaGVhZGVyIGZvciByZWdlbmVyYXRpb24gb2YgTWFrZWZpbGVzXSksCi0gICAgWwotICAgICAgdW5zZXQgQVVUT0hFQURFUgotICAgICAgQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsICR7d2l0aHZhbH0pCi0gICAgICBBQ19NU0dfTk9USUNFKFtVc2luZyAkQVVUT0hFQURFUiBhcyBhdXRvaGVhZGVyXSkKLSAgICBdKQotCi0gIGRubCBhbGxvdyBmb3IgZGlmZmVyZW50IGF1dG9tYWtlIHZlcnNpb24KLSAgQUNfQVJHX1dJVEgoYXV0b21ha2UsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hdXRvbWFrZV0sCi0gICAgICAgICAgICAgICAgICAgW3VzZSBhIGRpZmZlcmVudCBhdXRvbWFrZSBmb3IgcmVnZW5lcmF0aW9uIG9mIE1ha2VmaWxlc10pLAotICAgIFsKLSAgICAgIHVuc2V0IEFVVE9NQUtFCi0gICAgICBBTV9NSVNTSU5HX1BST0coQVVUT01BS0UsICR7d2l0aHZhbH0pCi0gICAgICBBQ19NU0dfTk9USUNFKFtVc2luZyAkQVVUT01BS0UgYXMgYXV0b21ha2VdKQotICAgIF0pCi0KLSAgZG5sIGFsbG93IGZvciBkaWZmZXJlbnQgYWNsb2NhbCB2ZXJzaW9uCi0gIEFDX0FSR19XSVRIKGFjbG9jYWwsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hY2xvY2FsXSwKLSAgICAgICAgICAgICAgICAgICBbdXNlIGEgZGlmZmVyZW50IGFjbG9jYWwgZm9yIHJlZ2VuZXJhdGlvbiBvZiBNYWtlZmlsZXNdKSwKLSAgICBbCi0gICAgICB1bnNldCBBQ0xPQ0FMCi0gICAgICBBTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgJHt3aXRodmFsfSkKLSAgICAgIEFDX01TR19OT1RJQ0UoW1VzaW5nICRBQ0xPQ0FMIGFzIGFjbG9jYWxdKQotICAgIF0pCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgYi9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJiODUzYS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLWRubCBhcy1jb21waWxlci1mbGFnLm00IDAuMS4wCi0KLWRubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIGRldGVjdGlvbiBvZiBjb21waWxlciBmbGFncwotCi1kbmwgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci1kbmwgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLQotZG5sIEFTX0NPTVBJTEVSX0ZMQUcoQ0ZMQUdTLCBBQ1RJT04tSUYtQUNDRVBURUQsIFtBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEXSkKLWRubCBUcmllcyB0byBjb21waWxlIHdpdGggdGhlIGdpdmVuIENGTEFHUy4KLWRubCBSdW5zIEFDVElPTi1JRi1BQ0NFUFRFRCBpZiB0aGUgY29tcGlsZXIgY2FuIGNvbXBpbGUgd2l0aCB0aGUgZmxhZ3MsCi1kbmwgYW5kIEFDVElPTi1JRi1OT1QtQUNDRVBURUQgb3RoZXJ3aXNlLgotCi1BQ19ERUZVTihbQVNfQ09NUElMRVJfRkxBR10sCi1bCi0gIEFDX01TR19DSEVDS0lORyhbdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzICQxXSkKLQotICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgotCi0gIEFDX1RSWV9DT01QSUxFKFsgXSwgW10sIFtmbGFnX29rPXllc10sIFtmbGFnX29rPW5vXSkKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgJDIKLSAgICB0cnVlCi0gIGVsc2UKLSAgICAkMwotICAgIHRydWUKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVChbJGZsYWdfb2tdKQotXSkKLQotZG5sIEFTX0NYWF9DT01QSUxFUl9GTEFHKENQUEZMQUdTLCBBQ1RJT04tSUYtQUNDRVBURUQsIFtBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEXSkKLWRubCBUcmllcyB0byBjb21waWxlIHdpdGggdGhlIGdpdmVuIENQUEZMQUdTLgotZG5sIFJ1bnMgQUNUSU9OLUlGLUFDQ0VQVEVEIGlmIHRoZSBjb21waWxlciBjYW4gY29tcGlsZSB3aXRoIHRoZSBmbGFncywKLWRubCBhbmQgQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRCBvdGhlcndpc2UuCi0KLUFDX0RFRlVOKFtBU19DWFhfQ09NUElMRVJfRkxBR10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX1BST0dfQ1hYXSkKLQotICBBQ19NU0dfQ0hFQ0tJTkcoW3RvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgJDFdKQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkMSIKLQotICBBQ19MQU5HX1BVU0goQysrKQotCi0gIEFDX1RSWV9DT01QSUxFKFsgXSwgW10sIFtmbGFnX29rPXllc10sIFtmbGFnX29rPW5vXSkKLSAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgICQyCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgJDMKLSAgICB0cnVlCi0gIGZpCi0KLSAgQUNfTEFOR19QT1AoQysrKQotCi0gIEFDX01TR19SRVNVTFQoWyRmbGFnX29rXSkKLV0pCi0KLWRubCBBU19PQkpDX0NPTVBJTEVSX0ZMQUcoQ1BQRkxBR1MsIEFDVElPTi1JRi1BQ0NFUFRFRCwgW0FDVElPTi1JRi1OT1QtQUNDRVBURURdKQotZG5sIFRyaWVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZ2l2ZW4gQ1BQRkxBR1MuCi1kbmwgUnVucyBBQ1RJT04tSUYtQUNDRVBURUQgaWYgdGhlIGNvbXBpbGVyIGNhbiBjb21waWxlIHdpdGggdGhlIGZsYWdzLAotZG5sIGFuZCBBQ1RJT04tSUYtTk9ULUFDQ0VQVEVEIG90aGVyd2lzZS4KLQotQUNfREVGVU4oW0FTX09CSkNfQ09NUElMRVJfRkxBR10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX1BST0dfT0JKQ10pCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFt0byBzZWUgaWYgT2JqZWN0aXZlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgJDFdKQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkMSIKLQotICBBQ19MQU5HX1BVU0goW09iamVjdGl2ZSBDXSkKLQotICBBQ19UUllfQ09NUElMRShbIF0sIFtdLCBbZmxhZ19vaz15ZXNdLCBbZmxhZ19vaz1ub10pCi0gIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICAkMgotICAgIHRydWUKLSAgZWxzZQotICAgICQzCi0gICAgdHJ1ZQotICBmaQotCi0gIEFDX0xBTkdfUE9QKFtPYmplY3RpdmUgQ10pCi0KLSAgQUNfTVNHX1JFU1VMVChbJGZsYWdfb2tdKQotXSkKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWNvbXBpbGVyLm00IGIvY29tbW9uL200L2FzLWNvbXBpbGVyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDlhMDYwLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1jb21waWxlci5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLWRubCBhcy1jb21waWxlci5tNCAwLjEuMAotCi1kbmwgYXV0b3N0YXJzIG00IG1hY3JvIGZvciBkZXRlY3Rpb24gb2YgY29tcGlsZXIgZmxhdm9yCi0KLWRubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLWRubCAkSWQ6IGFzLWNvbXBpbGVyLm00LHYgMS40IDIwMDQvMDYvMDEgMDk6NDQ6MTkgdGhvbWFzdnMgRXhwICQKLQotZG5sIEFTX0NPTVBJTEVSKENPTVBJTEVSKQotZG5sIHdpbGwgc2V0IHZhcmlhYmxlIENPTVBJTEVSIHRvCi1kbmwgLSBnY2MKLWRubCAtIGZvcnRlCi1kbmwgLSAoZW1wdHkpIGlmIG5vIGd1ZXNzIGNvdWxkIGJlIG1hZGUKLQotQUNfREVGVU4oW0FTX0NPTVBJTEVSXSwKLVsKLSAgYXNfY29tcGlsZXI9Ci0gIEFDX01TR19DSEVDS0lORyhmb3IgY29tcGlsZXIgZmxhdm91cikKLQotICBkbmwgaXMgaXQgZ2NjID8KLSAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0gICAgYXNfY29tcGlsZXI9ImdjYyIKLSAgZmkKLQotICBkbmwgaXMgaXQgZm9ydGUgPwotICBBQ19UUllfUlVOKFsKLWludCBtYWluCi0oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSNpZmRlZiBfX3N1bgotICByZXR1cm4gMDsKLSNlbHNlCi0gIHJldHVybiAxOwotI2VuZGlmCi19Ci0gIF0sIGFzX2NvbXBpbGVyPSJmb3J0ZSIsICwpCi0KLSAgaWYgdGVzdCAieCRhc19jb21waWxlciIgPSAieCI7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKFt1bmtub3duICFdKQotICBlbHNlCi0gICAgQUNfTVNHX1JFU1VMVCgkYXNfY29tcGlsZXIpCi0gIGZpCi0gIFskMV09JGFzX2NvbXBpbGVyCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWRvY2Jvb2subTQgYi9jb21tb24vbTQvYXMtZG9jYm9vay5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyNzA1MC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtZG9jYm9vay5tNAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLWRubCBBU19ET0NCT09LKFssIEFDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCi1kbmwgY2hlY2tzIGlmIHhzbHRwcm9jIGNhbiBidWlsZCBkb2Nib29rIGRvY3VtZW50YXRpb24KLWRubCAod2hpY2ggaXMgcG9zc2libGUgaWYgdGhlIGNhdGFsb2cgaXMgc2V0IHVwIHByb3Blcmx5Ci1kbmwgSSBhbHNvIHRyaWVkIGNoZWNraW5nIGZvciBhIHNwZWNpZmljIHZlcnNpb24gYW5kIHR5cGUgb2YgZG9jYm9vawotZG5sIGJ1dCB4c2x0cHJvYyBzZWVtZWQgdG8gaGFwcGlseSBydW4gYW55d2F5LCBzbyB3ZSBjYW4ndCBjaGVjayBmb3IgdGhhdAotZG5sIGFuZCB2ZXJzaW9uCi1kbmwgdGhpcyBtYWNybyB0YWtlcyBpbnNwaXJhdGlvbiBmcm9tCi1kbmwgaHR0cDovL3d3dy5tb3ZlbWVudC51a2xpbnV4Lm5ldC9kb2NzL2RvY2Jvb2stYXV0b3Rvb2xzL2NvbmZpZ3VyZS5odG1sCi1BQ19ERUZVTihbQVNfRE9DQk9PS10sCi1bCi0gIFhTTFRQUk9DX0ZMQUdTPS0tbm9uZXQKLSAgRE9DQk9PS19ST09UPQotICBUWVBFX0xDPXhtbAotICBUWVBFX1VDPVhNTAotICBET0NCT09LX1ZFUlNJT049NC4xLjIKLQotICBpZiB0ZXN0IC1uICIkWE1MX0NBVEFMT0dfRklMRVMiOyB0aGVuCi0gICAgb2xkSUZTPSRJRlMKLSAgICBJRlM9JyAnCi0gICAgZm9yIHhtbF9jYXRhbG9nX2ZpbGUgaW4gJFhNTF9DQVRBTE9HX0ZJTEVTOyBkbwotICAgICAgaWYgdGVzdCAtZiAkeG1sX2NhdGFsb2dfZmlsZTsgdGhlbgotICAgICAgICBYTUxfQ0FUQUxPRz0keG1sX2NhdGFsb2dfZmlsZQotICAgICAgICBDQVRfRU5UUllfU1RBUlQ9JzwhLS0nCi0gICAgICAgIENBVF9FTlRSWV9FTkQ9Jy0tPicKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0kb2xkSUZTCi0gIGVsaWYgdGVzdCAhIC1mIC9ldGMveG1sL2NhdGFsb2c7IHRoZW4KLSAgICBmb3IgaSBpbiAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay9zdHlsZXNoZWV0L3hzbC9ud2Fsc2ggL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLyAvdXNyL2xvY2FsL3NoYXJlL3hzbC9kb2Nib29rIDsKLSAgICBkbwotICAgICAgaWYgdGVzdCAtZCAiJGkiOyB0aGVuCi0gICAgICAgIERPQ0JPT0tfUk9PVD0kaQotICAgICAgZmkKLSAgICBkb25lCi0gIGVsc2UKLSAgICBYTUxfQ0FUQUxPRz0vZXRjL3htbC9jYXRhbG9nCi0gICAgQ0FUX0VOVFJZX1NUQVJUPSc8IS0tJwotICAgIENBVF9FTlRSWV9FTkQ9Jy0tPicKLSAgZmkKLQotICBkbmwgV2UgbmVlZCB4c2x0cHJvYyB0byBwcm9jZXNzIHRoZSB0ZXN0Ci0gIEFDX0NIRUNLX1BST0coWFNMVFBST0MseHNsdHByb2MseHNsdHByb2MsKQotICBYU0xUUFJPQ19XT1JLUz1ubwotICBpZiB0ZXN0IC1uICIkWFNMVFBST0MiOyB0aGVuCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHhzbHRwcm9jIGRvY2Jvb2sgcHJvY2Vzc2luZyB3b3Jrc10pCi0KLSAgICBpZiB0ZXN0IC1uICIkWE1MX0NBVEFMT0ciOyB0aGVuCi0gICAgICBEQl9GSUxFPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC94aHRtbC9kb2Nib29rLnhzbCIKLSAgICBlbHNlCi0gICAgICBEQl9GSUxFPSIkRE9DQk9PS19ST09UL3hodG1sL2RvY2Jvb2sueHNsIgotICAgIGZpCi0gICAgJFhTTFRQUk9DICRYU0xUUFJPQ19GTEFHUyAkREJfRklMRSA+L2Rldi9udWxsIDI+JjEgPDwgRU5ECi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayAkVFlQRV9VQyBWJERPQ0JPT0tfVkVSU0lPTi8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svJFRZUEVfTEMvJERPQ0JPT0tfVkVSU0lPTi9kb2Nib29reC5kdGQiPgotPGJvb2sgaWQ9InRlc3QiPgotPC9ib29rPgotRU5ECi0gICAgaWYgdGVzdCAiJD8iID0gMDsgdGhlbgotICAgICAgWFNMVFBST0NfV09SS1M9eWVzCi0gICAgZmkKLSAgICBBQ19NU0dfUkVTVUxUKCRYU0xUUFJPQ19XT1JLUykKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JFhTTFRQUk9DX1dPUktTIiA9ICJ4eWVzIjsgdGhlbgotICAgIGRubCBleGVjdXRlIEFDVElPTi1JRi1GT1VORAotICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pCi0gIGVsc2UKLSAgICBkbmwgZXhlY3V0ZSBBQ1RJT04tSUYtTk9ULUZPVU5ECi0gICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKLSAgZmkKLQotICBBQ19TVUJTVChYTUxfQ0FUQUxPRykKLSAgQUNfU1VCU1QoWFNMVFBST0NfRkxBR1MpCi0gIEFDX1NVQlNUKERPQ0JPT0tfUk9PVCkKLSAgQUNfU1VCU1QoQ0FUX0VOVFJZX1NUQVJUKQotICBBQ19TVUJTVChDQVRfRU5UUllfRU5EKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IGIvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMzIxMDQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1kbmwgYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCAwLjEuMAotCi1kbmwgYXV0b3N0YXJzIG00IG1hY3JvIGZvciBkZXRlY3Rpb24gb2YgZ2NjIGlubGluZSBhc3NlbWJseQotCi1kbmwgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0KLWRubCAkSWQkCi0KLWRubCBBU19DT01QSUxFUl9GTEFHKEFDVElPTi1JRi1BQ0NFUFRFRCwgW0FDVElPTi1JRi1OT1QtQUNDRVBURURdKQotZG5sIFRyaWVzIHRvIGNvbXBpbGUgd2l0aCB0aGUgZ2l2ZW4gQ0ZMQUdTLgotZG5sIFJ1bnMgQUNUSU9OLUlGLUFDQ0VQVEVEIGlmIHRoZSBjb21waWxlciBjYW4gY29tcGlsZSB3aXRoIHRoZSBmbGFncywKLWRubCBhbmQgQUNUSU9OLUlGLU5PVC1BQ0NFUFRFRCBvdGhlcndpc2UuCi0KLUFDX0RFRlVOKFtBU19HQ0NfSU5MSU5FX0FTU0VNQkxZXSwKLVsKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiBjb21waWxlciBzdXBwb3J0cyBnY2Mtc3R5bGUgaW5saW5lIGFzc2VtYmx5XSkKLQotICBBQ19UUllfQ09NUElMRShbXSwgWwotI2lmZGVmIF9fR05VQ19NSU5PUl9fCi0jaWYgKF9fR05VQ19fICogMTAwMCArIF9fR05VQ19NSU5PUl9fKSA8IDMwMDQKLSNlcnJvciBHQ0MgYmVmb3JlIDMuNCBoYXMgY3JpdGljYWwgYnVncyBjb21waWxpbmcgaW5saW5lIGFzc2VtYmx5Ci0jZW5kaWYKLSNlbmRpZgotX19hc21fXyAoIiI6OikgXSwgW2ZsYWdfb2s9eWVzXSwgW2ZsYWdfb2s9bm9dKQotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgICQxCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgJDIKLSAgICB0cnVlCi0gIGZpCi0gIEFDX01TR19SRVNVTFQoWyRmbGFnX29rXSkKLV0pCi0KLQotQUNfREVGVU4oW0FTX0dDQ19BU01fUE9XRVJQQ19GUFVdLAotWwotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGNvbXBpbGVyIHN1cHBvcnRzIEZQVSBpbnN0cnVjdGlvbnMgb24gUG93ZXJQQ10pCi0KLSAgQUNfVFJZX0NPTVBJTEUoW10sIFtfX2FzbV9fICgiZmFkZCAwLDAsMCI6OikgXSwgW2ZsYWdfb2s9eWVzXSwgW2ZsYWdfb2s9bm9dKQotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgICQxCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgJDIKLSAgICB0cnVlCi0gIGZpCi0gIEFDX01TR19SRVNVTFQoWyRmbGFnX29rXSkKLV0pCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9hcy1saWJ0b29sLXRhZ3MubTQgYi9jb21tb24vbTQvYXMtbGlidG9vbC10YWdzLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmYwYWU0Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy1saWJ0b29sLXRhZ3MubTQKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi1kbmwgYXMtbGlidG9vbC10YWdzLm00IDAuMS40Ci0KLWRubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIHNlbGVjdGluZyBsaWJ0b29sICJ0YWdzIiAobGFuZ3VhZ2VzKQotCi1kbmwgQW5keSBXaW5nbyBkb2VzIG5vdCBjbGFpbSBjcmVkaXQgZm9yIHRoaXMgbWFjcm8KLWRubCBiYWNrcG9ydGVkIGZyb20gbGlidG9vbCAxLjYgYnkgUGFvbG8gQm9uemluaQotZG5sIHNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC8yMDAzLTEyL21zZzAwMDA3Lmh0bWwKLQotZG5sICRJZCQKLQotZG5sIEFTX0xJQlRPT0xfVEFHUyhbdGFncy4uLl0pCi0KLWRubCBleGFtcGxlCi1kbmwgQVNfTElCVE9PTF9UQUdTKFtdKSBmb3Igb25seSBDIChubyBmb3J0cmFuLCBldGMpCi0KLWRubCBXaGVuIEFDX0xJQlRPT0xfVEFHUyBpcyB1c2VkLCBJIHJlZGVmaW5lIF9MVF9BQ19UQUdDT05GSUcKLWRubCB0byBiZSBtb3JlIHNpbWlsYXIgdG8gdGhlIGxpYnRvb2wgMS42IGltcGxlbWVudGF0aW9uLCB3aGljaAotZG5sIHVzZXMgYW4gbTQgbG9vcCBhbmQgbTQgY2FzZSBpbnN0ZWFkIG9mIGEgc2hlbGwgbG9vcC4gIFRoaXMKLWRubCB3YXkgdGhlIENYWC9HQ0ovRjc3L1JDIHRlc3RzIGFyZSBub3QgYWx3YXlzIGV4cGFuZGVkLgotCi1kbmwgQVNfTElCVE9PTF9UQUdTCi1kbmwgLS0tLS0tLS0tLS0tLS0tCi1kbmwgdGFncyB0byBlbmFibGUKLUFDX0RFRlVOKFtBU19MSUJUT09MX1RBR1NdLAotW200X2RlZmluZShbX0xUX1RBR1NdLFskMV0pCi1tNF9kZWZpbmUoW19MVF9BQ19UQUdDT05GSUddLCBbCi0gICMgcmVkZWZpbmVkIExUIEFDIFRBR0NPTkZJRwotICBpZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAgIGlmIHRlc3QgISAtZiAiJHtvZmlsZX0iOyB0aGVuCi0gICAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgZXhpc3RdKQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDQz0nYCIKLSAgICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHRdKQotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCi0gICAgICBmaQotICAgIGZpCi0KLSAgICBBQ19GT1JFQUNIKFtfTFRfVEFHXSwgX0xUX1RBR1MsCi0gICAgICBlY2hvIFRIT01BUzogdGFnIF9MVF9UQUcKLSAgICAgIFttNF9jYXNlKF9MVF9UQUcsCi0gICAgICBbQ1hYXSwgWwotICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIjsgdGhlbgotICAgICAgZWNobyAiVEhPTUFTOiBZQVkgQ1hYIgotICAgICAgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgX0xUX1RBRyIKLSAgICBmaV0sCi0gICAgICBbRjc3XSwgWwotICAgIGlmIHRlc3QgLW4gIiRGNzciICYmIHRlc3QgIlgkRjc3IiAhPSAiWG5vIjsgdGhlbgotICAgICAgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgX0xUX1RBRyIKLSAgICBmaV0sCi0gICAgICBbR0NKXSwgWwotICAgIGlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgotICAgICAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgX0xUX1RBRyIKLSAgICBmaV0sCi0gICAgICBbUkNdLCBbCi0gICAgaWYgdGVzdCAtbiAiJFJDIiAmJiB0ZXN0ICJYJFJDIiAhPSAiWG5vIjsgdGhlbgotICAgICAgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotICAgICAgYXZhaWxhYmxlX3RhZ3M9IiRhdmFpbGFibGVfdGFncyBfTFRfVEFHIgotICAgIGZpXSwKLSAgICAgIFttNF9lcnJwcmludG4obTRfbG9jYXRpb25bOiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogXSJfTFRfVEFHIikKLSAgICAgIG00X2V4aXQoMSldKQotICAgIF0pCi0gICAgZWNobyBUSE9NQVM6IGF2YWlsYWJsZSB0YWdzOiAkYXZhaWxhYmxlX3RhZ3MKLSAgZmkKLSAgIyBOb3cgc3Vic3RpdHV0ZSB0aGUgdXBkYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICBpZiBldmFsICJzZWQgLWUgJ3MvXmF2YWlsYWJsZV90YWdzPS4qXCQvYXZhaWxhYmxlX3RhZ3M9XCIkYXZhaWxhYmxlX3RhZ3NcIi8nIFwiJG9maWxlXCIgPiBcIiR7b2ZpbGV9VFwiIjsgdGhlbgotICAgIG12ICIke29maWxlfVQiICIkb2ZpbGUiCi0gICAgY2htb2QgK3ggIiRvZmlsZSIKLSAgICBBQ19NU0dfTk9USUNFKFt1cGRhdGVkIGF2YWlsYWJsZSBsaWJ0b29sIHRhZ3Mgd2l0aCAkYXZhaWxhYmxlX3RhZ3MuXSkKLSAgZWxzZQotICAgIHJtIC1mICIke29maWxlfVQiCi0gICAgQUNfTVNHX0VSUk9SKFt1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy5dKQotCi0gIGZpCi0KLV0pZG5sIF9MVF9BQ19UQUdfQ09ORklHCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2FzLWxpYnRvb2wubTQgYi9jb21tb24vbTQvYXMtbGlidG9vbC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxNjA5NS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtbGlidG9vbC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLWRubCBhcy1saWJ0b29sLm00IDAuMS40Ci0KLWRubCBhdXRvc3RhcnMgbTQgbWFjcm8gZm9yIGxpYnRvb2wgdmVyc2lvbmluZwotCi1kbmwgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi1kbmwgJElkOiBhcy1saWJ0b29sLm00LHYgMS4xMCAyMDA1LzEwLzE1IDEzOjQ0OjIzIHRob21hc3ZzIEV4cCAkCi0KLWRubCBBU19MSUJUT09MKFBSRUZJWCwgQ1VSUkVOVCwgUkVWSVNJT04sIEFHRSwgW1JFTEVBU0VdKQotCi1kbmwgZXhhbXBsZQotZG5sIEFTX0xJQlRPT0woR1NULCAyLCAwLCAwKQotCi1kbmwgdGhpcyBtYWNybwotZG5sIC0gZGVmaW5lcyBbJFBSRUZJWF1fQ1VSUkVOVCwgUkVWSVNJT04gYW5kIEFHRQotZG5sIC0gZGVmaW5lcyBbJFBSRUZJWF1fTElCVkVSU0lPTgotZG5sIC0gZGVmaW5lcyBbJFBSRUZJWF1fTFRfTERGTEFHUyB0byBzZXQgdmVyc2lvbmluZwotZG5sIC0gQUNfU1VCU1QncyB0aGVtIGFsbAotCi1kbmwgaWYgUkVMRUFTRSBpcyBnaXZlbiwgdGhlbiBhZGQgYSAtcmVsZWFzZSBvcHRpb24gdG8gdGhlIExERkxBR1MKLWRubCB3aXRoIHRoZSBnaXZlbiByZWxlYXNlIHZlcnNpb24KLWRubCB0aGVuIHVzZSBbJFBSRUZJWF1fTFRfTERGTEFHUyBpbiB0aGUgcmVsZXZhbnQgTWFrZWZpbGUuYW0ncwotCi1kbmwgY2FsbCBBTV9QUk9HX0xJQlRPT0wgYWZ0ZXIgdGhpcyBjYWxsCi0KLUFDX0RFRlVOKFtBU19MSUJUT09MXSwKLVsKLSAgWyQxXV9DVVJSRU5UPVskMl0KLSAgWyQxXV9SRVZJU0lPTj1bJDNdCi0gIFskMV1fQUdFPVskNF0KLSAgWyQxXV9MSUJWRVJTSU9OPVskMl06WyQzXTpbJDRdCi0gIEFDX1NVQlNUKFskMV1fQ1VSUkVOVCkKLSAgQUNfU1VCU1QoWyQxXV9SRVZJU0lPTikKLSAgQUNfU1VCU1QoWyQxXV9BR0UpCi0gIEFDX1NVQlNUKFskMV1fTElCVkVSU0lPTikKLQotICBbJDFdX0xUX0xERkxBR1M9IiRbJDFdX0xUX0xERkxBR1MgLXZlcnNpb24taW5mbyAkWyQxXV9MSUJWRVJTSU9OIgotICBpZiB0ZXN0ICEgLXogIlskNV0iCi0gIHRoZW4KLSAgICBbJDFdX0xUX0xERkxBR1M9IiRbJDFdX0xUX0xERkxBR1MgLXJlbGVhc2UgWyQ1XSIKLSAgZmkKLSAgQUNfU1VCU1QoWyQxXV9MVF9MREZMQUdTKQotCi0gIExUX1BSRVJFUShbMi4yLjZdKQotICBMVF9JTklUKFtkbG9wZW4gd2luMzItZGxsIGRpc2FibGUtc3RhdGljXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtcHl0aG9uLm00IGIvY29tbW9uL200L2FzLXB5dGhvbi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5YjE3NS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXMtcHl0aG9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyMgUHl0aG9uIGZpbGUgaGFuZGxpbmcKLSMjIEZyb20gQW5kcmV3IERhbGtlCi0jIyBVcGRhdGVkIGJ5IEphbWVzIEhlbnN0cmlkZ2UKLSMjIFVwZGF0ZWQgYnkgQW5keSBXaW5nbyB0byBsb29wIHRocm91Z2ggcG9zc2libGUgcHl0aG9ucwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgQVNfUEFUSF9QWVRIT04oW01JTklNVU0tVkVSU0lPTl0pCi0KLSMgQWRkcyBzdXBwb3J0IGZvciBkaXN0cmlidXRpbmcgUHl0aG9uIG1vZHVsZXMgYW5kIHBhY2thZ2VzLiAgVG8KLSMgaW5zdGFsbCBtb2R1bGVzLCBjb3B5IHRoZW0gdG8gJChweXRob25kaXIpLCB1c2luZyB0aGUgcHl0aG9uX1BZVEhPTgotIyBhdXRvbWFrZSB2YXJpYWJsZS4gIFRvIGluc3RhbGwgYSBwYWNrYWdlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUKLSMgYXV0b21ha2UgcGFja2FnZSwgaW5zdGFsbCB0byAkKHBrZ3B5dGhvbmRpciksIG9yIHVzZSB0aGUKLSMgcGtncHl0aG9uX1BZVEhPTiBhdXRvbWFrZSB2YXJpYWJsZS4KLQotIyBUaGUgdmFyaWFibGVzICQocHlleGVjZGlyKSBhbmQgJChwa2dweWV4ZWNkaXIpIGFyZSBwcm92aWRlZCBhcwotIyBsb2NhdGlvbnMgdG8gaW5zdGFsbCBweXRob24gZXh0ZW5zaW9uIG1vZHVsZXMgKHNoYXJlZCBsaWJyYXJpZXMpLgotIyBBbm90aGVyIG1hY3JvIGlzIHJlcXVpcmVkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIHRvIGNvbXBpbGUKLSMgZXh0ZW5zaW9uIG1vZHVsZXMuCi0KLSMgSWYgeW91ciBwYWNrYWdlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGRpZmZlcmVudCBwcmVmaXggdG8gcHl0aG9uLAotIyB1c2VycyB3aWxsIGhhdmUgdG8gYWRkIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSB0byB0aGUgUFlUSE9OUEFUSAotIyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgY3JlYXRlIGEgLnB0aCBmaWxlIChzZWUgdGhlIHB5dGhvbgotIyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4KLQotIyBJZiB0aGUgTUlOSU1VTS1WRVJTSU9OIGFyZ3VtZW50IGlzIHBhc3NlZCwgQVNfUEFUSF9QWVRIT04gd2lsbAotIyBjYXVzZSBhbiBlcnJvciBpZiB0aGUgdmVyc2lvbiBvZiBweXRob24gaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0KLSMgZG9lc24ndCBtZWV0IHRoZSByZXF1aXJlbWVudC4gIE1JTklNVU0tVkVSU0lPTiBzaG91bGQgY29uc2lzdCBvZgotIyBudW1iZXJzIGFuZCBkb3RzIG9ubHkuCi0KLSMgVXBkYXRlZCB0byBsb29wIG92ZXIgYWxsIHBvc3NpYmxlIHB5dGhvbiBiaW5hcmllcyBieSBBbmR5IFdpbmdvCi0jIDx3aW5nb0Bwb2JveC5jb20+Ci0jIFVwZGF0ZWQgdG8gb25seSB3YXJuIGFuZCB1bnNldCBQWVRIT04gaWYgbm8gZ29vZCBvbmUgaXMgZm91bmQKLQotQUNfREVGVU4oW0FTX1BBVEhfUFlUSE9OXSwKLSBbCi0gIGRubCBGaW5kIGEgdmVyc2lvbiBvZiBQeXRob24uICBJIGNvdWxkIGNoZWNrIGZvciBweXRob24gdmVyc2lvbnMgMS40Ci0gIGRubCBvciBlYXJsaWVyLCBidXQgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucyBjaGFuZ2VkIGZyb20KLSAgZG5sICRwcmVmaXgvbGliL3NpdGUtcHl0aG9uIGluIDEuNCB0byAkcHJlZml4L2xpYi9weXRob24xLjUvc2l0ZS1wYWNrYWdlcwotICBkbmwgaW4gMS41LCBhbmQgSSBkb24ndCB3YW50IHRvIG1haW50YWluIHRoYXQgbG9naWMuCi0KLSAgZG5sIHNob3VsZCB3ZSBkbyB0aGUgdmVyc2lvbiBjaGVjaz8KLSAgUFlUSE9OX0NBTkRJREFURVM9InB5dGhvbiBweXRob24yLjIgcHl0aG9uMi4xIHB5dGhvbjIuMCBweXRob24yIFwKLSAgICAgICAgICAgICAgICAgICAgIHB5dGhvbjEuNiBweXRob24xLjUiCi0gIGlmZWxzZShbJDFdLFtdLAotICAgICAgICAgW0FDX1BBVEhfUFJPRyhQWVRIT04sICRQWVRIT05fQ0FORElEQVRFUyldLAotICAgICAgICAgWwotICAgICBBQ19NU0dfTk9USUNFKExvb2tpbmcgZm9yIFB5dGhvbiB2ZXJzaW9uID49ICQxKQotICAgIGNoYW5nZXF1b3RlKDw8LCA+PilkbmwKLSAgICBwcm9nPSIKLWltcG9ydCBzeXMsIHN0cmluZwotbWludmVyID0gJyQxJwotIyBzcGxpdCBzdHJpbmcgYnkgJy4nIGFuZCBjb252ZXJ0IHRvIG51bWVyaWMKLW1pbnZlcl9pbmZvID0gbWFwKHN0cmluZy5hdG9pLCBzdHJpbmcuc3BsaXQobWludmVyLCAnLicpKQotIyB3ZSBjYW4gbm93IGRvIGNvbXBhcmlzb25zIG9uIHRoZSB0d28gbGlzdHM6Ci1pZiBzeXMudmVyc2lvbl9pbmZvID49IHR1cGxlKG1pbnZlcl9pbmZvKToKLQlzeXMuZXhpdCgwKQotZWxzZToKLQlzeXMuZXhpdCgxKSIKLSAgICBjaGFuZ2VxdW90ZShbLCBdKWRubAotCi0gICAgcHl0aG9uX2dvb2Q9ZmFsc2UKLSAgICBmb3IgcHl0aG9uX2NhbmRpZGF0ZSBpbiAkUFlUSE9OX0NBTkRJREFURVM7IGRvCi0gICAgICB1bnNldCBQWVRIT04KLSAgICAgIEFDX1BBVEhfUFJPRyhQWVRIT04sICRweXRob25fY2FuZGlkYXRlKSAxPiAvZGV2L251bGwgMj4gL2Rldi9udWxsCi0KLSAgICAgIGlmIHRlc3QgIngkUFlUSE9OIiA9ICJ4IjsgdGhlbiBjb250aW51ZTsgZmkKLQotICAgICAgaWYgJFBZVEhPTiAtYyAiJHByb2ciIDE+JkFDX0ZEX0NDIDI+JkFDX0ZEX0NDOyB0aGVuCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhbIiRQWVRIT04iOl0pCi0JQUNfTVNHX1JFU1VMVChbb2theV0pCi0gICAgICAgIHB5dGhvbl9nb29kPXRydWUKLSAgICAgICAgYnJlYWs7Ci0gICAgICBlbHNlCi0gICAgICAgIGRubCBjbGVhciB0aGUgY2FjaGUgdmFsCi0gICAgICAgIHVuc2V0IGFjX2N2X3BhdGhfUFlUSE9OCi0gICAgICBmaQotICAgIGRvbmUKLSAgXSkKLQotICBpZiB0ZXN0ICIkcHl0aG9uX2dvb2QiICE9ICJ0cnVlIjsgdGhlbgotICAgIEFDX01TR19XQVJOKFtObyBzdWl0YWJsZSB2ZXJzaW9uIG9mIHB5dGhvbiBmb3VuZF0pCi0gICAgUFlUSE9OPQotICBlbHNlCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFtsb2NhbCBQeXRob24gY29uZmlndXJhdGlvbl0pCi0KLSAgZG5sIFF1ZXJ5IFB5dGhvbiBmb3IgaXRzIHZlcnNpb24gbnVtYmVyLiAgR2V0dGluZyBbOjNdIHNlZW1zIHRvIGJlCi0gIGRubCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpczsgaXQncyB3aGF0ICJzaXRlLnB5IiBkb2VzIGluIHRoZSBzdGFuZGFyZAotICBkbmwgbGlicmFyeS4gIE5lZWQgdG8gY2hhbmdlIHF1b3RlIGNoYXJhY3RlciBiZWNhdXNlIG9mIFs6M10KLQotICBBQ19TVUJTVChQWVRIT05fVkVSU0lPTikKLSAgY2hhbmdlcXVvdGUoPDwsID4+KWRubAotICBQWVRIT05fVkVSU0lPTj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25bOjNdImAKLSAgY2hhbmdlcXVvdGUoWywgXSlkbmwKLQotCi0gIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4IGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0gIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKLSAgZG5sIGRpc3RpbmN0IHZhcmlhYmxlcyBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGlmIG5lZWQgYmUuICBIb3dldmVyLAotICBkbmwgZ2VuZXJhbCBjb25zZW5zdXMgaXMgdGhhdCB5b3Ugc2hvdWxkbid0IG5lZWQgdGhpcyBhYmlsaXR5LgotCi0gIEFDX1NVQlNUKFBZVEhPTl9QUkVGSVgpCi0gIFBZVEhPTl9QUkVGSVg9JyR7cHJlZml4fScKLQotICBBQ19TVUJTVChQWVRIT05fRVhFQ19QUkVGSVgpCi0gIFBZVEhPTl9FWEVDX1BSRUZJWD0nJHtleGVjX3ByZWZpeH0nCi0KLSAgZG5sIEF0IHRpbWVzIChsaWtlIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykgeW91IG1heSB3YW50Ci0gIGRubCB0byBrbm93IHdoaWNoIE9TIHBsYXRmb3JtIFB5dGhvbiB0aGlua3MgdGhpcyBpcy4KLQotICBBQ19TVUJTVChQWVRIT05fUExBVEZPUk0pCi0gIFBZVEhPTl9QTEFURk9STT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnBsYXRmb3JtImAKLQotCi0gIGRubCBTZXQgdXAgNCBkaXJlY3RvcmllczoKLQotICBkbmwgcHl0aG9uZGlyIC0tIHdoZXJlIHRvIGluc3RhbGwgcHl0aG9uIHNjcmlwdHMuICBUaGlzIGlzIHRoZQotICBkbmwgICBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSwgbm90IHRoZSBweXRob24gc3RhbmRhcmQgbGlicmFyeQotICBkbmwgICBkaXJlY3RvcnkgbGlrZSBpbiBwcmV2aW91cyBhdXRvbWFrZSBiZXRhcy4gIFRoaXMgYmVoYXZpb3VyCi0gIGRubCAgIGlzIG1vcmUgY29uc2lzdGVudCB3aXRoIGxpc3BkaXIubTQgZm9yIGV4YW1wbGUuCi0gIGRubAotICBkbmwgQWxzbywgaWYgdGhlIHBhY2thZ2UgcHJlZml4IGlzbid0IHRoZSBzYW1lIGFzIHB5dGhvbidzIHByZWZpeCwKLSAgZG5sIHRoZW4gdGhlIG9sZCAkKHB5dGhvbmRpcikgd2FzIHByZXR0eSB1c2VsZXNzLgotCi0gIEFDX1NVQlNUKHB5dGhvbmRpcikKLSAgcHl0aG9uZGlyPSRQWVRIT05fUFJFRklYIi9saWIvcHl0aG9uIiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzCi0KLSAgZG5sIHBrZ3B5dGhvbmRpciAtLSAkUEFDS0FHRSBkaXJlY3RvcnkgdW5kZXIgcHl0aG9uZGlyLiAgV2FzCi0gIGRubCAgIFBZVEhPTl9TSVRFX1BBQ0tBR0UgaW4gcHJldmlvdXMgYmV0YXMsIGJ1dCB0aGlzIG5hbWluZyBpcwotICBkbmwgICBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiBhdXRvbWFrZS4KLSAgZG5sICAgTWF5YmUgdGhpcyBzaG91bGQgYmUgcHV0IGluIHB5dGhvbi5hbT8KLQotICBBQ19TVUJTVChwa2dweXRob25kaXIpCi0gIHBrZ3B5dGhvbmRpcj1cJHtweXRob25kaXJ9LyRQQUNLQUdFCi0KLSAgZG5sIHB5ZXhlY2RpciAtLSBkaXJlY3RvcnkgZm9yIGluc3RhbGxpbmcgcHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzCi0gIGRubCAgIChzaGFyZWQgbGlicmFyaWVzKSAgV2FzIFBZVEhPTl9TSVRFX0VYRUMgaW4gcHJldmlvdXMgYmV0YXMuCi0KLSAgQUNfU1VCU1QocHlleGVjZGlyKQotICBweWV4ZWNkaXI9JFBZVEhPTl9FWEVDX1BSRUZJWCIvbGliL3B5dGhvbiIkUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcwotCi0gIGRubCBwa2dweWV4ZWNkaXIgLS0gJChweWV4ZWNkaXIpLyQoUEFDS0FHRSkKLSAgZG5sICAgTWF5YmUgdGhpcyBzaG91bGQgYmUgcHV0IGluIHB5dGhvbi5hbT8KLQotICBBQ19TVUJTVChwa2dweWV4ZWNkaXIpCi0gIHBrZ3B5ZXhlY2Rpcj1cJHtweWV4ZWNkaXJ9LyRQQUNLQUdFCi0KLSAgQUNfTVNHX1JFU1VMVChbbG9va3MgZ29vZF0pCi0KLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBiL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmZmNzc0Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotZG5sIGFzLXZlcnNpb24ubTQgMC4yLjAKLQotZG5sIGF1dG9zdGFycyBtNCBtYWNybyBmb3IgdmVyc2lvbmluZwotCi1kbmwgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi1kbmwgJElkOiBhcy12ZXJzaW9uLm00LHYgMS4xNSAyMDA2LzA0LzAxIDA5OjQwOjI0IHRob21hc3ZzIEV4cCAkCi0KLWRubCBBU19WRVJTSU9OCi0KLWRubCBleGFtcGxlCi1kbmwgQVNfVkVSU0lPTgotCi1kbmwgdGhpcyBtYWNybwotZG5sIC0gQUNfU1VCU1QncyBQQUNLQUdFX1ZFUlNJT05fTUFKT1IsIF9NSU5PUiwgX01JQ1JPCi1kbmwgLSBBQ19TVUJTVCdzIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFLAotZG5sICAgIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBycG0gcmVsZWFzZSBmaWVsZHMKLWRubCAtIGRvZXNuJ3QgY2FsbCBBTV9JTklUX0FVVE9NQUtFIGFueW1vcmUgYmVjYXVzZSBpdCBwcmV2ZW50cwotZG5sICAgbWFpbnRhaW5lciBtb2RlIGZyb20gcnVubmluZyBjb3JyZWN0bHkKLWRubAotZG5sIGRvbid0IGZvcmdldCB0byBwdXQgI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFIGluIGFjY29uZmlnLmgKLWRubCBpZiB5b3UgdXNlIGFjY29uZmlnLmgKLQotQUNfREVGVU4oW0FTX1ZFUlNJT05dLAotWwotICBQQUNLQUdFX1ZFUlNJT05fTUFKT1I9JChlY2hvIEFDX1BBQ0tBR0VfVkVSU0lPTiB8IGN1dCAtZCcuJyAtZjEpCi0gIFBBQ0tBR0VfVkVSU0lPTl9NSU5PUj0kKGVjaG8gQUNfUEFDS0FHRV9WRVJTSU9OIHwgY3V0IC1kJy4nIC1mMikKLSAgUEFDS0FHRV9WRVJTSU9OX01JQ1JPPSQoZWNobyBBQ19QQUNLQUdFX1ZFUlNJT04gfCBjdXQgLWQnLicgLWYzKQotCi0gIEFDX1NVQlNUKFBBQ0tBR0VfVkVSU0lPTl9NQUpPUikKLSAgQUNfU1VCU1QoUEFDS0FHRV9WRVJTSU9OX01JTk9SKQotICBBQ19TVUJTVChQQUNLQUdFX1ZFUlNJT05fTUlDUk8pCi1dKQotCi1kbmwgQVNfTkFOTyhBQ1RJT04tSUYtTkFOTy1OT04tTlVMTCwgW0FDVElPTi1JRi1OQU5PLU5VTExdKQotCi1kbmwgcmVxdWlyZXMgQUNfSU5JVCB0byBiZSBjYWxsZWQgYmVmb3JlCi1kbmwgRm9yIHByb2plY3RzIHVzaW5nIGEgZm91cnRoIG9yIG5hbm8gbnVtYmVyIGluIHlvdXIgdmVyc2lvbmluZyB0byBpbmRpY2F0ZQotZG5sIGRldmVsb3BtZW50IG9yIHByZXJlbGVhc2Ugc25hcHNob3RzLCB0aGlzIG1hY3JvIGFsbG93cyB0aGUgYnVpbGQgdG8gYmUKLWRubCBzZXQgdXAgZGlmZmVyZW50bHkgYWNjb3JkaW5nbHkuCi0KLWRubCB0aGlzIG1hY3JvOgotZG5sIC0gcGFyc2VzIEFDX1BBQ0tBR0VfVkVSU0lPTiwgc2V0IGJ5IEFDX0lOSVQsIGFuZCBleHRyYWN0cyB0aGUgbmFubyBudW1iZXIKLWRubCAtIHNldHMgdGhlIHZhcmlhYmxlIFBBQ0tBR0VfVkVSU0lPTl9OQU5PCi1kbmwgLSBzZXRzIHRoZSB2YXJpYWJsZSBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSwgd2hpY2ggY2FuIGJlIHVzZWQKLWRubCAgIGZvciBycG0gcmVsZWFzZSBmaWVsZHMKLWRubCAtIGV4ZWN1dGVzIEFDVElPTi1JRi1OQU5PLU5PTi1OVUxMIG9yIEFDVElPTi1JRi1OQU5PLU5VTEwKLQotZG5sIGV4YW1wbGU6Ci1kbmwgQVNfTkFOTyhSRUxFQVNFPSJ5ZXMiLCBSRUxFQVNFPSJubyIpCi0KLUFDX0RFRlVOKFtBU19OQU5PXSwKLVsKLSAgQUNfTVNHX0NIRUNLSU5HKG5hbm8gdmVyc2lvbikKLQotICBOQU5PPSQoZWNobyBBQ19QQUNLQUdFX1ZFUlNJT04gfCBjdXQgLWQnLicgLWY0KQotCi0gIGlmIHRlc3QgeCIkTkFOTyIgPSB4IHx8IHRlc3QgIngkTkFOTyIgPSAieDAiIDsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoWzAgKHJlbGVhc2UpXSkKLSAgICBOQU5PPTAKLSAgICBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRT0xCi0gICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkKLSAgZWxzZQotICAgIEFDX01TR19SRVNVTFQoJE5BTk8pCi0gICAgUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0U9MC5gZGF0ZSArJVklbSVkLiVIJU0lU2AKLSAgICBpZiB0ZXN0ICJ4JE5BTk8iICE9ICJ4MSIgOyB0aGVuCi0gICAgICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkKLSAgICBlbHNlCi0gICAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKLSAgICBmaQotICBmaQotICBQQUNLQUdFX1ZFUlNJT05fTkFOTz0kTkFOTwotICBBQ19TVUJTVChQQUNLQUdFX1ZFUlNJT05fTkFOTykKLSAgQUNfU1VCU1QoUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBiL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYmY2OTkuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDczNCArMCwwIEBACi0jIyMjIyBodHRwOi8vYXV0b2NvbmYtYXJjaGl2ZS5jcnlwLnRvL2F4X2NyZWF0ZV9zdGRpbnRfaC5odG1sCi0jCi0jIFNZTk9QU0lTCi0jCi0jICAgQVhfQ1JFQVRFX1NURElOVF9IIFsoIEhFQURFUi1UTy1HRU5FUkFURSBbLCBIRURFUlMtVE8tQ0hFQ0tdKV0KLSMKLSMgREVTQ1JJUFRJT04KLSMKLSMgICB0aGUgIklTTyBDOVg6IDcuMTggSW50ZWdlciB0eXBlcyA8c3RkaW50Lmg+IiBzZWN0aW9uIHJlcXVpcmVzIHRoZQotIyAgIGV4aXN0ZW5jZSBvZiBhbiBpbmNsdWRlIGZpbGUgPHN0ZGludC5oPiB0aGF0IGRlZmluZXMgYSBzZXQgb2YKLSMgICB0eXBlZGVmcywgZXNwZWNpYWxseSB1aW50OF90LGludDMyX3QsdWludHB0cl90LiBNYW55IG9sZGVyCi0jICAgaW5zdGFsbGF0aW9ucyB3aWxsIG5vdCBwcm92aWRlIHRoaXMgZmlsZSwgYnV0IHNvbWUgd2lsbCBoYXZlIHRoZQotIyAgIHZlcnkgc2FtZSBkZWZpbml0aW9ucyBpbiA8aW50dHlwZXMuaD4uIEluIG90aGVyIGVudmlyb21lbnRzIHdlIGNhbgotIyAgIHVzZSB0aGUgaW5ldC10eXBlcyBpbiA8c3lzL3R5cGVzLmg+IHdoaWNoIHdvdWxkIGRlZmluZSB0aGUgdHlwZWRlZnMKLSMgICBpbnQ4X3QgYW5kIHVfaW50OF90IHJlc3BlY3Rpdmx5LgotIwotIyAgIFRoaXMgbWFjcm9zIHdpbGwgY3JlYXRlIGEgbG9jYWwgIl9zdGRpbnQuaCIgb3IgdGhlIGhlYWRlcmZpbGUgZ2l2ZW4KLSMgICBhcyBhbiBhcmd1bWVudC4gSW4gbWFueSBjYXNlcyB0aGF0IGZpbGUgd2lsbCBqdXN0ICIjaW5jbHVkZQotIyAgIDxzdGRpbnQuaD4iIG9yICIjaW5jbHVkZSA8aW50dHlwZXMuaD4iLCB3aGlsZSBpbiBvdGhlciBlbnZpcm9ubWVudHMKLSMgICBpdCB3aWxsIHByb3ZpZGUgdGhlIHNldCBvZiBiYXNpYyAnc3RkaW50J3MgZGVmaW5pdGlvbnMvdHlwZWRlZnM6Ci0jCi0jICAgICBpbnQ4X3QsdWludDhfdCxpbnQxNl90LHVpbnQxNl90LGludDMyX3QsdWludDMyX3QsaW50cHRyX3QsdWludHB0cl90Ci0jICAgICBpbnRfbGVhc3QzMl90Li4gaW50X2Zhc3QzMl90Li4gaW50bWF4X3QKLSMKLSMgICB3aGljaCBtYXkgb3IgbWF5IG5vdCByZWx5IG9uIHRoZSBkZWZpbml0aW9ucyBvZiBvdGhlciBmaWxlcywgb3IKLSMgICB1c2luZyB0aGUgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvIHRvIGRldGVybWluZSB0aGUgYWN0dWFsIHNpemVvZiBlYWNoCi0jICAgdHlwZS4KLSMKLSMgICBpZiB5b3VyIGhlYWRlciBmaWxlcyByZXF1aXJlIHRoZSBzdGRpbnQtdHlwZXMgeW91IHdpbGwgd2FudCB0bwotIyAgIGNyZWF0ZSBhbiBpbnN0YWxsYWJsZSBmaWxlIG15bGliLWludC5oIHRoYXQgYWxsIHlvdXIgb3RoZXIKLSMgICBpbnN0YWxsYWJsZSBoZWFkZXIgbWF5IGluY2x1ZGUuIFNvIGlmIHlvdSBoYXZlIGEgbGlicmFyeSBwYWNrYWdlCi0jICAgbmFtZWQgIm15bGliIiwganVzdCB1c2UKLSMKLSMgICAgICAgIEFYX0NSRUFURV9TVERJTlRfSChteWxpYi1pbnQuaCkKLSMKLSMgICBpbiBjb25maWd1cmUuYWMgYW5kIGdvIHRvIGluc3RhbGwgdGhhdCB2ZXJ5IGhlYWRlciBmaWxlIGluCi0jICAgTWFrZWZpbGUuYW0gYWxvbmcgd2l0aCB0aGUgb3RoZXIgaGVhZGVycyAobXlsaWIuaCkgLSBhbmQgdGhlCi0jICAgbXlsaWItc3BlY2lmaWMgaGVhZGVycyBjYW4gc2ltcGx5IHVzZSAiI2luY2x1ZGUgPG15bGliLWludC5oPiIgdG8KLSMgICBvYnRhaW4gdGhlIHN0ZGludC10eXBlcy4KLSMKLSMgICBSZW1lbWJlciwgaWYgdGhlIHN5c3RlbSBhbHJlYWR5IGhhZCBhIHZhbGlkIDxzdGRpbnQuaD4sIHRoZQotIyAgIGdlbmVyYXRlZCBmaWxlIHdpbGwgaW5jbHVkZSBpdCBkaXJlY3RseS4gTm8gbmVlZCBmb3IgZnV6enkKLSMgICBIQVZFX1NURElOVF9IIHRoaW5ncy4uLiAob29wcywgR0NDIDQuMi54IGhhcyBkZWxpYmVyYXRseSBkaXNhYmxlZAotIyAgIGl0cyBzdGRpbnQuaCBmb3Igbm9uLWM5OSBjb21waWxhdGlvbiBhbmQgdGhlIGM5OS1tb2RlIGlzIG5vdCB0aGUKLSMgICBkZWZhdWx0LiBUaGVyZWZvcmUgdGhpcyBtYWNybyB3aWxsIG5vdCB1c2UgdGhlIGNvbXBpbGVyJ3Mgc3RkaW50LmgKLSMgICAtIHBsZWFzZSBjb21wbGFpbiB0byB0aGUgR0NDIGRldmVsb3BlcnMpLgotIwotIyBMQVNUIE1PRElGSUNBVElPTgotIwotIyAgIDIwMDctMDYtMjcKLSMKLSMgQ09QWUxFRlQKLSMKLSMgICBDb3B5cmlnaHQgKGMpIDIwMDcgR3VpZG8gVS4gRHJhaGVpbSA8Z3VpZG9kQGdteC5kZT4KLSMKLSMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSMgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSMgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotIyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0jICAgMDIxMTEtMTMwNywgVVNBLgotIwotIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0Ci0jICAgb3duZXIgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZQotIyAgIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nCi0jICAgdGhlIE1hY3JvLiBZb3UgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0jICAgTGljZW5zZSB3aGVuIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoCi0jICAgcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwKLSMgICBQdWJsaWMgTGljZW5zZSAoR1BMKSBkb2VzIGdvdmVybiBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0Ci0jICAgY29uc3RpdHV0ZXMgdGhlIEF1dG9jb25mIE1hY3JvLgotIwotIyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQotIyAgIEF1dG9jb25mIE1hY3JvIHJlbGVhc2VkIGJ5IHRoZSBBdXRvY29uZiBNYWNybyBBcmNoaXZlLiBXaGVuIHlvdQotIyAgIG1ha2UgYW5kIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBBdXRvY29uZiBNYWNybywgeW91Ci0jICAgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91cgotIyAgIG1vZGlmaWVkIHZlcnNpb24gYXMgd2VsbC4KLQotQUNfREVGVU4oW0FYX0NIRUNLX0RBVEFfTU9ERUxdLFsKLSAgIEFDX0NIRUNLX1NJWkVPRihjaGFyKQotICAgQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQotICAgQUNfQ0hFQ0tfU0laRU9GKGludCkKLSAgIEFDX0NIRUNLX1NJWkVPRihsb25nKQotICAgQUNfQ0hFQ0tfU0laRU9GKHZvaWQqKQotICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIiCi0gICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2NoYXIiCi0gICBhY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX3Nob3J0IgotICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9pbnQiCi0gICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiIKLSAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfaW50IgotICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9sb25nIgotICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsJGFjX2N2X3NpemVvZl92b2lkcCIKLSAgIEFDX01TR19DSEVDS0lORyhbZGF0YSBtb2RlbF0pCi0gICBjYXNlICIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsLyRhY19jdl9sb25nX2RhdGFfbW9kZWwiIGluCi0gICAgMTIyLzI0MikgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklQMTYiICA7IG49InN0YW5kYXJkIDE2Yml0IG1hY2hpbmUiIDs7Ci0gICAgMTIyLzI0NCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxQMzIiICA7IG49InN0YW5kYXJkIDMyYml0IG1hY2hpbmUiIDs7Ci0gICAgMTIyLyopICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9ImkxNiIgICA7IG49InVudXN1YWwgaW50MTYgbW9kZWwiIDs7Ci0gICAgMTI0LzQ0NCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklMUDMyIiA7IG49InN0YW5kYXJkIDMyYml0IHVuaXhpc2giIDs7Ci0gICAgMTI0LzQ4OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxQNjQiICA7IG49InN0YW5kYXJkIDY0Yml0IHVuaXhpc2giIDs7Ci0gICAgMTI0LzQ0OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkxMUDY0IiA7IG49InVudXN1YWwgNjRiaXQgdW5peGlzaCIgOzsKLSAgICAxMjQvKikgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaTMyIiAgIDsgbj0idW51c3VhbCBpbnQzMiBtb2RlbCIgOzsKLSAgICAxMjgvODg4KSAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iSUxQNjQiIDsgbj0idW51c3VhbCA2NGJpdCBudW1lcmljIiA7OwotICAgIDEyOC8qKSAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpNjQiICAgOyBuPSJ1bnVzdWFsIGludDY0IG1vZGVsIiA7OwotICAgIDIyMi8qMikgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1AxNiIgOyBuPSJzdHJpY3QgMTZiaXQgZHNwdHlwZSIgOzsKLSAgICAzMzMvKjMpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQMjQiIDsgbj0ic3RyaWN0IDI0Yml0IGRzcHR5cGUiIDs7Ci0gICAgNDQ0Lyo0KSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDMyIiA7IG49InN0cmljdCAzMmJpdCBkc3B0eXBlIiA7OwotICAgIDY2Ni8qNikgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1A0OCIgOyBuPSJzdHJpY3QgNDhiaXQgZHNwdHlwZSIgOzsKLSAgICA4ODgvKjgpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQNjQiIDsgbj0ic3RyaWN0IDY0Yml0IGRzcHR5cGUiIDs7Ci0gICAgMjIyLyp8MzMzLyp8NDQ0Lyp8NjY2Lyp8ODg4LyopIDoKLSAgICAgICAgICAgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaURTUCIgIDsgbj0idW51c3VhbCBkc3B0eXBlIiA7OwotICAgICAqKSAgICAgICAgICBhY19jdl9kYXRhX21vZGVsPSJub25lIiAgOyBuPSJ2ZXJ5IHVudXN1YWwgbW9kZWwiIDs7Ci0gICBlc2FjCi0gICBBQ19NU0dfUkVTVUxUKFskYWNfY3ZfZGF0YV9tb2RlbCAoJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCwgJG4pXSkKLV0pCi0KLWRubCBBWF9DSEVDS19IRUFERVJfU1RESU5UX1goW0hFQURFUkxJU1RdWyxBQ1RJT04tSUZdKQotQUNfREVGVU4oW0FYX0NIRUNLX0hFQURFUl9TVERJTlRfWF0sWwotQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQgdWludHB0cl90XSwgW2FjX2N2X2hlYWRlcl9zdGRpbnRfeF0sWwotIGFjX2N2X2hlYWRlcl9zdGRpbnRfeD0iIiAjIHRoZSAxOTk3IHR5cGVkZWZzIChpbnR0eXBlcy5oKQotICBBQ19NU0dfUkVTVUxUKFsoLi4pXSkKLSAgZm9yIGkgaW4gbTRfaWZ2YWwoWyQxXSxbJDFdLFtzdGRpbnQuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oIHN5cy90eXBlcy5oXSkKLSAgZG8KLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludHB0cl90Ci0gICB1bnNldCBhY19jdl90eXBlX3VpbnQ2NF90Ci0gICBBQ19DSEVDS19UWVBFKHVpbnRwdHJfdCxbYWNfY3ZfaGVhZGVyX3N0ZGludF94PSRpXSxjb250aW51ZSxbI2luY2x1ZGUgPCRpPl0pCi0gICBBQ19DSEVDS19UWVBFKHVpbnQ2NF90LFthbmQ2ND0iL3VpbnQ2NF90Il0sW2FuZDY0PSIiXSxbI2luY2x1ZGU8JGk+XSkKLSAgIG00X2lmdmFsbihbJDJdLFskMl0pIGJyZWFrCi0gIGRvbmUKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3RkaW50IHVpbnRwdHJfdF0pCi0gXSkKLV0pCi0KLUFDX0RFRlVOKFtBWF9DSEVDS19IRUFERVJfU1RESU5UX09dLFsKLUFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50IHVpbnQzMl90XSwgW2FjX2N2X2hlYWRlcl9zdGRpbnRfb10sWwotIGFjX2N2X2hlYWRlcl9zdGRpbnRfbz0iIiAjIHRoZSAxOTk1IHR5cGVkZWZzIChzeXMvaW50dHlwZXMuaCkKLSAgQUNfTVNHX1JFU1VMVChbKC4uKV0pCi0gIGZvciBpIGluIG00X2lmdmFsKFskMV0sWyQxXSxbaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaCBzeXMvdHlwZXMuaCBzdGRpbnQuaF0pCi0gIGRvCi0gICB1bnNldCBhY19jdl90eXBlX3VpbnQzMl90Ci0gICB1bnNldCBhY19jdl90eXBlX3VpbnQ2NF90Ci0gICBBQ19DSEVDS19UWVBFKHVpbnQzMl90LFthY19jdl9oZWFkZXJfc3RkaW50X289JGldLGNvbnRpbnVlLFsjaW5jbHVkZSA8JGk+XSkKLSAgIEFDX0NIRUNLX1RZUEUodWludDY0X3QsW2FuZDY0PSIvdWludDY0X3QiXSxbYW5kNjQ9IiJdLFsjaW5jbHVkZTwkaT5dKQotICAgbTRfaWZ2YWxuKFskMl0sWyQyXSkgYnJlYWsKLSAgIGJyZWFrOwotICBkb25lCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIHN0ZGludCB1aW50MzJfdF0pCi0gXSkKLV0pCi0KLUFDX0RFRlVOKFtBWF9DSEVDS19IRUFERVJfU1RESU5UX1VdLFsKLUFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50IHVfaW50MzJfdF0sIFthY19jdl9oZWFkZXJfc3RkaW50X3VdLFsKLSBhY19jdl9oZWFkZXJfc3RkaW50X3U9IiIgIyB0aGUgQlNEIHR5cGVkZWZzIChzeXMvdHlwZXMuaCkKLSAgQUNfTVNHX1JFU1VMVChbKC4uKV0pCi0gIGZvciBpIGluIG00X2lmdmFsKFskMV0sWyQxXSxbc3lzL3R5cGVzLmggaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaF0pIDsgZG8KLSAgIHVuc2V0IGFjX2N2X3R5cGVfdV9pbnQzMl90Ci0gICB1bnNldCBhY19jdl90eXBlX3VfaW50NjRfdAotICAgQUNfQ0hFQ0tfVFlQRSh1X2ludDMyX3QsW2FjX2N2X2hlYWRlcl9zdGRpbnRfdT0kaV0sY29udGludWUsWyNpbmNsdWRlIDwkaT5dKQotICAgQUNfQ0hFQ0tfVFlQRSh1X2ludDY0X3QsW2FuZDY0PSIvdV9pbnQ2NF90Il0sW2FuZDY0PSIiXSxbI2luY2x1ZGU8JGk+XSkKLSAgIG00X2lmdmFsbihbJDJdLFskMl0pIGJyZWFrCi0gICBicmVhazsKLSAgZG9uZQotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdGRpbnQgdV9pbnQzMl90XSkKLSBdKQotXSkKLQotQUNfREVGVU4oW0FYX0NSRUFURV9TVERJTlRfSF0sCi1bIyAtLS0tLS0gQVggQ1JFQVRFIFNURElOVCBIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX01TR19DSEVDS0lORyhbZm9yIHN0ZGludCB0eXBlc10pCi1hY19zdGRpbnRfaD1gZWNobyBpZmVsc2UoJDEsICwgX3N0ZGludC5oLCAkMSlgCi0jIHRyeSB0byBzaG9ydGNpcmN1aXQgLSBpZiB0aGUgZGVmYXVsdCBpbmNsdWRlIHBhdGggb2YgdGhlIGNvbXBpbGVyCi0jIGNhbiBmaW5kIGEgInN0ZGludC5oIiBoZWFkZXIgdGhlbiB3ZSBhc3N1bWUgdGhhdCBhbGwgY29tcGlsZXJzIGNhbi4KLUFDX0NBQ0hFX1ZBTChbYWNfY3ZfaGVhZGVyX3N0ZGludF90XSxbCi1vbGRfQ1hYRkxBR1M9IiRDWFhGTEFHUyIgOyBDWFhGTEFHUz0iIgotb2xkX0NQUEZMQUdTPSIkQ1BQRkxBR1MiIDsgQ1BQRkxBR1M9IiIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiICAgICA7IENGTEFHUz0iIgotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpbnQuaD5dLFtpbnRfbGVhc3QzMl90IHYgPSAwO10sCi1bYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKGFzc3VtaW5nIEM5OSBjb21wYXRpYmxlIHN5c3RlbSkiCi0gYWNfY3ZfaGVhZGVyX3N0ZGludF90PSJzdGRpbnQuaCI7IF0sCi1bYWNfY3ZfaGVhZGVyX3N0ZGludF90PSIiXSkKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIgJiYgdGVzdCAiLiRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIi4iOyB0aGVuCi1DRkxBR1M9Ii1zdGQ9Yzk5IgotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzdGRpbnQuaD5dLFtpbnRfbGVhc3QzMl90IHYgPSAwO10sCi1bQUNfTVNHX1dBUk4oeW91ciBHQ0MgY29tcGlsZXIgaGFzIGEgZGVmdW5jdCBzdGRpbnQuaCBmb3IgaXRzIGRlZmF1bHQtbW9kZSldKQotZmkKLUNYWEZMQUdTPSIkb2xkX0NYWEZMQUdTIgotQ1BQRkxBR1M9IiRvbGRfQ1BQRkxBR1MiCi1DRkxBR1M9IiRvbGRfQ0ZMQUdTIiBdKQotCi12PSIuLi4gJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCIKLWlmIHRlc3QgIiRhY19zdGRpbnRfaCIgPSAic3RkaW50LmgiIDsgdGhlbgotIEFDX01TR19SRVNVTFQoWyhhcmUgeW91IHN1cmUgeW91IHdhbnQgdGhlbSBpbiAuL3N0ZGludC5oPyldKQotZWxpZiB0ZXN0ICIkYWNfc3RkaW50X2giID0gImludHR5cGVzLmgiIDsgdGhlbgotIEFDX01TR19SRVNVTFQoWyhhcmUgeW91IHN1cmUgeW91IHdhbnQgdGhlbSBpbiAuL2ludHR5cGVzLmg/KV0pCi1lbGlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiA9ICJfIiA7IHRoZW4KLSBBQ19NU0dfUkVTVUxUKFsocHV0dGluZyB0aGVtIGludG8gJGFjX3N0ZGludF9oKSR2XSkKLWVsc2UKLSBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF90IgotIEFDX01TR19SRVNVTFQoWyRhY19jdl9oZWFkZXJfc3RkaW50IChzaG9ydGNpcmN1aXQpXSkKLWZpCi0KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiA9ICJfIiA7IHRoZW4gIyBjYW4gbm90IHNob3J0Y2lyY3VpdC4uCi0KLWRubCAuLi4uLmludHJvIG1lc3NhZ2UgZG9uZSwgbm93IGRvIGEgZmV3IHN5c3RlbSBjaGVja3MuLi4uLgotZG5sIGJ0dywgYWxsIG9sZCBDSEVDS19UWVBFIG1hY3JvcyBkbyBhdXRvbWF0aWNhbGx5ICJERUZJTkUiIGEgdHlwZSwKLWRubCB0aGVyZWZvcmUgd2UgdXNlIHRoZSBhdXRvY29uZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgQ0hFQ0tfVFlQRV9ORVcKLWRubCBpbnN0ZWFkIHRoYXQgaXMgdHJpZ2dlcmVkIHdpdGggMyBvciBtb3JlIGFyZ3VtZW50cyAoc2VlIHR5cGVzLm00KQotCi1pbnR0eXBlX2hlYWRlcnM9YGVjaG8gJDIgfCBzZWQgLWUgJ3MvLC8gL2cnYAotCi1hY19jdl9zdGRpbnRfcmVzdWx0PSIobm8gaGVscGZ1bCBzeXN0ZW0gdHlwZWRlZnMgc2VlbikiCi1BWF9DSEVDS19IRUFERVJfU1RESU5UX1goZG5sCi0gICBzdGRpbnQuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oICRpbnR0eXBlX2hlYWRlcnMsCi0gICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1aW50cHRyX3QkYW5kNjQgaW4gJGkpIikKLQotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giID0gIl8iIDsgdGhlbgotQVhfQ0hFQ0tfSEVBREVSX1NURElOVF9PKGRubCwKLSAgIGludHR5cGVzLmggc3lzL2ludHR5cGVzLmggc3RkaW50LmggJGludHR5cGVfaGVhZGVycywKLSAgIGFjX2N2X3N0ZGludF9yZXN1bHQ9IihzZWVuIHVpbnQzMl90JGFuZDY0IGluICRpKSIpCi1maQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgPSAiXyIgOyB0aGVuCi1BWF9DSEVDS19IRUFERVJfU1RESU5UX1UoZG5sLAotICAgc3lzL3R5cGVzLmggaW50dHlwZXMuaCBzeXMvaW50dHlwZXMuaCAkaW50dHlwZV9oZWFkZXJzLAotICAgYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKHNlZW4gdV9pbnQzMl90JGFuZDY0IGluICRpKSIpCi1maSBmaQotCi1kbmwgaWYgdGhlcmUgd2FzIG5vIGdvb2QgQzk5IGhlYWRlciBmaWxlLCBkbyBzb21lIHR5cGVkZWYgY2hlY2tzLi4uCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCi0gICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdGRpbnQgZGF0YXR5cGUgbW9kZWxdKQotICAgQUNfTVNHX1JFU1VMVChbKC4uKV0pCi0gICBBWF9DSEVDS19EQVRBX01PREVMCi1maQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgIT0gIl8iIDsgdGhlbgotICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKLWVsaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiAhPSAiXyIgOyB0aGVuCi0gICBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgotZWxpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3UiICE9ICJfIiA7IHRoZW4KLSAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCi1lbHNlCi0gICBhY19jdl9oZWFkZXJfc3RkaW50PSJzdGRkZWYuaCIKLWZpCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIGV4dHJhIGludHR5cGVzIGluIGNob3NlbiBoZWFkZXJdKQotQUNfTVNHX1JFU1VMVChbKCRhY19jdl9oZWFkZXJfc3RkaW50KV0pCi1kbmwgc2VlIGlmIGludF9sZWFzdCBhbmQgaW50X2Zhc3QgdHlwZXMgYXJlIHByZXNlbnQgaW4gX3RoaXNfIGhlYWRlci4KLXVuc2V0IGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdAotdW5zZXQgYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QKLUFDX0NIRUNLX1RZUEUoaW50X2xlYXN0MzJfdCwsLFsjaW5jbHVkZSA8JGFjX2N2X2hlYWRlcl9zdGRpbnQ+XSkKLUFDX0NIRUNLX1RZUEUoaW50X2Zhc3QzMl90LCwsWyNpbmNsdWRlPCRhY19jdl9oZWFkZXJfc3RkaW50Pl0pCi1BQ19DSEVDS19UWVBFKGludG1heF90LCwsWyNpbmNsdWRlIDwkYWNfY3ZfaGVhZGVyX3N0ZGludD5dKQotCi1maSAjIHNob3J0Y2lyY3V0IHRvIHN5c3RlbSAic3RkaW50LmgiCi0jIC0tLS0tLS0tLS0tLS0tLS0tLSBQUkVQQVJFIFZBUklBQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCi1hY19jdl9zdGRpbnRfbWVzc2FnZT0idXNpbmcgZ251IGNvbXBpbGVyICJgJENDIC0tdmVyc2lvbiB8IGhlYWQgLTFgCi1lbHNlCi1hY19jdl9zdGRpbnRfbWVzc2FnZT0idXNpbmcgJENDIgotZmkKLQotQUNfTVNHX1JFU1VMVChbbWFrZSB1c2Ugb2YgJGFjX2N2X2hlYWRlcl9zdGRpbnQgaW4gJGFjX3N0ZGludF9oIGRubAotJGFjX2N2X3N0ZGludF9yZXN1bHRdKQotCi1kbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgLS0tLS0tLS0tLS0tLS0tLS0gRE9ORSBpbnR0eXBlcy5oIGNoZWNrcyBTVEFSVCBoZWFkZXIgLS0tLS0tLS0tLS0tLQotQUNfQ09ORklHX0NPTU1BTkRTKFskYWNfc3RkaW50X2hdLFsKLUFDX01TR19OT1RJQ0UoY3JlYXRpbmcgJGFjX3N0ZGludF9oIDogJF9hY19zdGRpbnRfaCkKLWFjX3N0ZGludD0kdG1wL19zdGRpbnQuaAotCi1lY2hvICIjaWZuZGVmIiAkX2FjX3N0ZGludF9oID4kYWNfc3RkaW50Ci1lY2hvICIjZGVmaW5lIiAkX2FjX3N0ZGludF9oICIxIiA+PiRhY19zdGRpbnQKLWVjaG8gIiNpZm5kZWYiIF9HRU5FUkFURURfU1RESU5UX0ggPj4kYWNfc3RkaW50Ci1lY2hvICIjZGVmaW5lIiBfR0VORVJBVEVEX1NURElOVF9IICciJyRQQUNLQUdFICRWRVJTSU9OJyInID4+JGFjX3N0ZGludAotZWNobyAiLyogZ2VuZXJhdGVkICRhY19jdl9zdGRpbnRfbWVzc2FnZSAqLyIgPj4kYWNfc3RkaW50Ci1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIgIT0gIl8iIDsgdGhlbgotZWNobyAiI2RlZmluZSBfU1RESU5UX0hBVkVfU1RESU5UX0giICIxIiA+PiRhY19zdGRpbnQKLWVjaG8gIiNpbmNsdWRlIDxzdGRpbnQuaD4iID4+JGFjX3N0ZGludAotZWNobyAiI2VuZGlmIiA+PiRhY19zdGRpbnQKLWVjaG8gIiNlbmRpZiIgPj4kYWNfc3RkaW50Ci1lbHNlCi0KLWNhdCA+PiRhY19zdGRpbnQgPDxTVERJTlRfRU9GCi0KLS8qIC4uLi4uLi4uLi4uLi4uLi4uLi4gc2hvcnRjaXJjdWl0IHBhcnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCi0KLSNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0ggfHwgZGVmaW5lZCBfU1RESU5UX0hBVkVfU1RESU5UX0gKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLS8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGNvbmZpZ3VyZWQgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCi0KLVNURElOVF9FT0YKLQotZWNobyAiLyogd2hldGhlciB3ZSBoYXZlIGEgQzk5IGNvbXBhdGlibGUgc3RkaW50IGhlYWRlciBmaWxlICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiAhPSAiXyIgOyB0aGVuCi0gIGFjX2hlYWRlcj0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKLSAgZWNobyAiI2RlZmluZSBfU1RESU5UX0hFQURFUl9JTlRQVFIiICciJyIkYWNfaGVhZGVyIiciJyA+PiRhY19zdGRpbnQKLWVsc2UKLSAgZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEVBREVSX0lOVFBUUiAqLyIgPj4kYWNfc3RkaW50Ci1maQotCi1lY2hvICIvKiB3aGV0aGVyIHdlIGhhdmUgYSBDOTYgY29tcGF0aWJsZSBpbnR0eXBlcyBoZWFkZXIgZmlsZSAqLyIgPj4kYWNfc3RkaW50Ci1pZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X28iICE9ICJfIiA7IHRoZW4KLSAgYWNfaGVhZGVyPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgotICBlY2hvICIjZGVmaW5lIF9TVERJTlRfSEVBREVSX1VJTlQzMiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAotZWxzZQotICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfVUlOVDMyICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIi8qIHdoZXRoZXIgd2UgaGF2ZSBhIEJTRCBjb21wYXRpYmxlIGluZXQgdHlwZXMgaGVhZGVyICovIiA+PiRhY19zdGRpbnQKLWlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIgIT0gIl8iIDsgdGhlbgotICBhY19oZWFkZXI9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCi0gIGVjaG8gIiNkZWZpbmUgX1NURElOVF9IRUFERVJfVV9JTlQzMiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAotZWxzZQotICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfVV9JTlQzMiAqLyIgPj4kYWNfc3RkaW50Ci1maQotCi1lY2hvICIiID4+JGFjX3N0ZGludAotCi1pZiB0ZXN0ICJfJGFjX2hlYWRlciIgIT0gIl8iIDsgdGhlbiBpZiB0ZXN0ICIkYWNfaGVhZGVyIiAhPSAic3RkZGVmLmgiIDsgdGhlbgotICBlY2hvICIjaW5jbHVkZSA8JGFjX2hlYWRlcj4iID4+JGFjX3N0ZGludAotICBlY2hvICIiID4+JGFjX3N0ZGludAotZmkgZmkKLQotZWNobyAiLyogd2hpY2ggNjRiaXQgdHlwZWRlZiBoYXMgYmVlbiBmb3VuZCAqLyIgPj4kYWNfc3RkaW50Ci1pZiB0ZXN0ICIkYWNfY3ZfdHlwZV91aW50NjRfdCIgPSAieWVzIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfVUlOVDY0X1QiICIxIiAgPj4kYWNfc3RkaW50Ci1lbHNlCi1lY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX1VJTlQ2NF9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1pZiB0ZXN0ICIkYWNfY3ZfdHlwZV91X2ludDY0X3QiID0gInllcyIgOyB0aGVuCi1lY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX1VfSU5UNjRfVCIgIjEiICA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIiID4+JGFjX3N0ZGludAotCi1lY2hvICIvKiB3aGljaCB0eXBlIG1vZGVsIGhhcyBiZWVuIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIl8kYWNfY3ZfY2hhcl9kYXRhX21vZGVsIiAhPSAiXyIgOyB0aGVuCi1lY2hvICIjZGVmaW5lICAgX1NURElOVF9DSEFSX01PREVMIiAiJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCIgPj4kYWNfc3RkaW50Ci1lY2hvICIjZGVmaW5lICAgX1NURElOVF9MT05HX01PREVMIiAiJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCIgPj4kYWNfc3RkaW50Ci1lbHNlCi1lY2hvICIvKiAjdW5kZWYgX1NURElOVF9DSEFSX01PREVMIC8vIHNraXBwZWQgKi8iID4+JGFjX3N0ZGludAotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfTE9OR19NT0RFTCAvLyBza2lwcGVkICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIiID4+JGFjX3N0ZGludAotCi1lY2hvICIvKiB3aGV0aGVyIGludF9sZWFzdCB0eXBlcyB3ZXJlIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIiRhY19jdl90eXBlX2ludF9sZWFzdDMyX3QiID0gInllcyI7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfSU5UX0xFQVNUMzJfVCIgIjEiICA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UX0xFQVNUMzJfVCAqLyIgPj4kYWNfc3RkaW50Ci1maQotZWNobyAiLyogd2hldGhlciBpbnRfZmFzdCB0eXBlcyB3ZXJlIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIiRhY19jdl90eXBlX2ludF9mYXN0MzJfdCIgPSAieWVzIjsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9JTlRfRkFTVDMyX1QiICIxIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UX0ZBU1QzMl9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIvKiB3aGV0aGVyIGludG1heF90IHR5cGUgd2FzIGRldGVjdGVkICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIiRhY19jdl90eXBlX2ludG1heF90IiA9ICJ5ZXMiOyB0aGVuCi1lY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX0lOVE1BWF9UIiAiMSIgPj4kYWNfc3RkaW50Ci1lbHNlCi1lY2hvICIvKiAjdW5kZWYgX1NURElOVF9IQVZFX0lOVE1BWF9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIiID4+JGFjX3N0ZGludAotCi0gIGNhdCA+PiRhY19zdGRpbnQgPDxTVERJTlRfRU9GCi0vKiAuLi4uLi4uLi4uLi4uLi4uLi4uLiBkZXRlY3Rpb25zIHBhcnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLwotCi0vKiB3aGV0aGVyIHdlIG5lZWQgdG8gZGVmaW5lIGJpdHNwZWNpZmljIHR5cGVzIGZyb20gY29tcGlsZXIgYmFzZSB0eXBlcyAqLwotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9JTlRQVFIKLSNpZm5kZWYgX1NURElOVF9IRUFERVJfVUlOVDMyCi0jaWZuZGVmIF9TVERJTlRfSEVBREVSX1VfSU5UMzIKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCi0jZWxzZQotI2RlZmluZSBfU1RESU5UX0hBVkVfVV9JTlRfVFlQRVMKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIF9TVERJTlRfSEFWRV9VX0lOVF9UWVBFUwotI3VuZGVmIF9TVERJTlRfTkVFRF9JTlRfTU9ERUxfVAotI2VuZGlmCi0KLSNpZmRlZiAgX1NURElOVF9DSEFSX01PREVMCi0jaWYgICAgIF9TVERJTlRfQ0hBUl9NT0RFTCswID09IDEyMiB8fCBfU1RESU5UX0NIQVJfTU9ERUwrMCA9PSAxMjQKLSNpZm5kZWYgX1NURElOVF9CWVRFX01PREVMCi0jZGVmaW5lIF9TVERJTlRfQllURV9NT0RFTCAxMgotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UCi0jZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRfTEVBU1RfVAotI2VuZGlmCi0KLSNpZm5kZWYgX1NURElOVF9IQVZFX0lOVF9GQVNUMzJfVAotI2RlZmluZSBfU1RESU5UX05FRURfSU5UX0ZBU1RfVAotI2VuZGlmCi0KLSNpZm5kZWYgX1NURElOVF9IRUFERVJfSU5UUFRSCi0jZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRQVFJfVAotI2lmbmRlZiBfU1RESU5UX0hBVkVfSU5UTUFYX1QKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVE1BWF9UCi0jZW5kaWYKLSNlbmRpZgotCi0KLS8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGRlZmluaXRpb24gcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCi0KLS8qIHNvbWUgc3lzdGVtIGhlYWRlcnMgaGF2ZSBnb29kIHVpbnQ2NF90ICovCi0jaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCi0jaWYgICAgIGRlZmluZWQgX1NURElOVF9IQVZFX1VJTlQ2NF9UICB8fCBkZWZpbmVkIEhBVkVfVUlOVDY0X1QKLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLSNlbGlmICAgZGVmaW5lZCBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UIHx8IGRlZmluZWQgSEFWRV9VX0lOVDY0X1QKLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdV9pbnQ2NF90IHVpbnQ2NF90OwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAotLyogLi4gaGVyZSBhcmUgc29tZSBjb21tb24gaGV1cmlzdGljcyB1c2luZyBjb21waWxlciBydW50aW1lIHNwZWNpZmljcyAqLwotI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAotdHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwotCi0jZWxpZiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18KLSNpZiBkZWZpbmVkIF9NU0NfVkVSIHx8IGRlZmluZWQgX19XQVRDT01DX18gfHwgZGVmaW5lZCBfX0JPUkxBTkRDX18KLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OwotCi0jZWxpZiBkZWZpbmVkIF9fR05VQ19fIHx8IGRlZmluZWQgX19NV0VSS1NfXyB8fCBkZWZpbmVkIF9fRUxGX18KLS8qIG5vdGU6IGFsbCBFTEYtc3lzdGVtcyBzZWVtIHRvIGhhdmUgbG9mZi1zdXBwb3J0IHdoaWNoIG5lZWRzIDY0LWJpdCAqLwotI2lmICFkZWZpbmVkIF9OT19MT05HTE9ORwotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAotdHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwotI2VuZGlmCi0KLSNlbGlmIGRlZmluZWQgX19hbHBoYSB8fCAoZGVmaW5lZCBfX21pcHMgJiYgZGVmaW5lZCBfQUJJTjMyKQotI2lmICFkZWZpbmVkIF9OT19MT05HTE9ORwotdHlwZWRlZiBsb25nIGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDY0X3Q7Ci0jZW5kaWYKLSAgLyogY29tcGlsZXIvY3B1IHR5cGUgdG8gZGVmaW5lIGludDY0X3QgKi8KLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgX1NURElOVF9IQVZFX1VfSU5UX1RZUEVTCi0vKiBpbnQ4X3QgaW50MTZfdCBpbnQzMl90IGRlZmluZWQgYnkgaW5ldCBjb2RlLCByZWRlY2xhcmUgdGhlIHVfaW50WFggdHlwZXMgKi8KLXR5cGVkZWYgdV9pbnQ4X3QgdWludDhfdDsKLXR5cGVkZWYgdV9pbnQxNl90IHVpbnQxNl90OwotdHlwZWRlZiB1X2ludDMyX3QgdWludDMyX3Q7Ci0KLS8qIGdsaWJjIGNvbXBhdGliaWxpdHkgKi8KLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCi0vKiB3ZSBtdXN0IGd1ZXNzIGFsbCB0aGUgYmFzaWMgdHlwZXMuIEFwYXJ0IGZyb20gYnl0ZS1hZHJlc3NhYmxlIHN5c3RlbSwgKi8KLS8qIHRoZXJlIGEgZmV3IDMyLWJpdC1vbmx5IGRzcC1zeXN0ZW1zIHRoYXQgd2UgZ3VhcmQgd2l0aCBCWVRFX01PREVMIDgtfSAqLwotLyogKGJ0dywgdGhvc2UgbmliYmxlLWFkZHJlc3NhYmxlIHN5c3RlbXMgYXJlIHdheSBvZmYsIG9yIHNvIHdlIGFzc3VtZSkgKi8KLQotZG5sICAgLyogaGF2ZSBhIGxvb2sgYXQgIjY0Yml0IGFuZCBkYXRhIHNpemUgbmV1dHJhbGl0eSIgYXQgKi8KLWRubCAgIC8qIGh0dHA6Ly91bml4Lm9yZy92ZXJzaW9uMi93aGF0c25ldy9sb2dpbl82NGJpdC5odG1sICovCi1kbmwgICAvKiAodGhlIHNob3J0aGFuZCAiSUxQIiB0eXBlcyBhbHdheXMgaGF2ZSBhICJQIiBwYXJ0KSAqLwotCi0jaWYgZGVmaW5lZCBfU1RESU5UX0JZVEVfTU9ERUwKLSNpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDIKLS8qIDI6NDoyID0gIElQMTYgPSBhIG5vcm1hbCAxNi1iaXQgc3lzdGVtICAgICAgICAgICAgICAgICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGxvbmcgICAgaW50MzJfdDsKLSNlbmRpZgotI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQ0IHx8IF9TVERJTlRfTE9OR19NT0RFTCA9PSA0NDQKLS8qIDI6NDo0ID0gIExQMzIgPSBhIDMyLWJpdCBzeXN0ZW0gZGVyaXZlZCBmcm9tIGEgMTYtYml0ICovCi0vKiA0OjQ6NCA9IElMUDMyID0gYSBub3JtYWwgMzItYml0IHN5c3RlbSAgICAgICAgICAgICAgICAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludDMyX3Q7Ci0jaWZuZGVmIF9faW50OF90X2RlZmluZWQKLSNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAotdHlwZWRlZiAgICAgICAgICBjaGFyICAgIGludDhfdDsKLXR5cGVkZWYgICAgICAgICAgc2hvcnQgICBpbnQxNl90OwotdHlwZWRlZiAgICAgICAgICBpbnQgICAgIGludDMyX3Q7Ci0jZW5kaWYKLSNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4NCB8fCBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0ODgKLS8qIDQ6ODo0ID0gIElQMzIgPSBhIDMyLWJpdCBzeXN0ZW0gcHJlcGFyZWQgZm9yIDY0LWJpdCAgICAqLwotLyogNDo4OjggPSAgTFA2NCA9IGEgbm9ybWFsIDY0LWJpdCBzeXN0ZW0gICAgICAgICAgICAgICAgICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotLyogdGhpcyBzeXN0ZW0gaGFzIGEgImxvbmciIG9mIDY0Yml0ICovCi0jaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICB1aW50NjRfdDsKLXR5cGVkZWYgICAgICAgICAgbG9uZyAgICBpbnQ2NF90OwotI2VuZGlmCi0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0NDgKLS8qICAgICAgTExQNjQgICBhIDY0LWJpdCBzeXN0ZW0gZGVyaXZlZCBmcm9tIGEgMzItYml0IHN5c3RlbSAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgdWludDMyX3Q7Ci0jaWZuZGVmIF9faW50OF90X2RlZmluZWQKLSNkZWZpbmUgX19pbnQ4X3RfZGVmaW5lZAotdHlwZWRlZiAgICAgICAgICBjaGFyICAgIGludDhfdDsKLXR5cGVkZWYgICAgICAgICAgc2hvcnQgICBpbnQxNl90OwotdHlwZWRlZiAgICAgICAgICBpbnQgICAgIGludDMyX3Q7Ci0jZW5kaWYKLS8qIGFzc3VtaW5nIHRoZSBzeXN0ZW0gaGFzIGEgImxvbmcgbG9uZyIgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLSNkZWZpbmUgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NF90OwotdHlwZWRlZiAgICAgICAgICBsb25nIGxvbmcgIGludDY0X3Q7Ci0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UMzJfVAotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBfU1RESU5UX05PX0lOVDhfVAotI2RlZmluZSBfU1RESU5UX05PX0lOVDMyX1QKLSNlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBxdW90ZSBmcm9tIFN1bk9TLTUuOCBzeXMvaW50dHlwZXMuaDoKLSAqIFVzZSBhdCB5b3VyIG93biByaXNrLiAgQXMgb2YgRmVicnVhcnkgMTk5NiwgdGhlIGNvbW1pdHRlZSBpcyBzcXVhcmVseQotICogYmVoaW5kIHRoZSBmaXhlZCBzaXplZCB0eXBlczsgdGhlICJsZWFzdCIgYW5kICJmYXN0IiB0eXBlcyBhcmUgc3RpbGwgYmVpbmcKLSAqIGRpc2N1c3NlZC4gIFRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSAiZmFzdCIgdHlwZXMgbWF5IGJlIHJlbW92ZWQgYmVmb3JlCi0gKiB0aGUgc3RhbmRhcmQgaXMgZmluYWxpemVkIGlzIGhpZ2ggZW5vdWdoIHRoYXQgdGhleSBhcmUgbm90IGN1cnJlbnRseQotICogaW1wbGVtZW50ZWQuCi0gKi8KLQotI2lmIGRlZmluZWQgX1NURElOVF9ORUVEX0lOVF9MRUFTVF9UCi10eXBlZGVmICBpbnQ4X3QgICAgaW50X2xlYXN0OF90OwotdHlwZWRlZiAgaW50MTZfdCAgIGludF9sZWFzdDE2X3Q7Ci10eXBlZGVmICBpbnQzMl90ICAgaW50X2xlYXN0MzJfdDsKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgaW50NjRfdCAgIGludF9sZWFzdDY0X3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiB1aW50OF90ICAgdWludF9sZWFzdDhfdDsKLXR5cGVkZWYgdWludDE2X3QgIHVpbnRfbGVhc3QxNl90OwotdHlwZWRlZiB1aW50MzJfdCAgdWludF9sZWFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdWludDY0X3QgIHVpbnRfbGVhc3Q2NF90OwotI2VuZGlmCi0gIC8qIGxlYXN0IHR5cGVzICovCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgX1NURElOVF9ORUVEX0lOVF9GQVNUX1QKLXR5cGVkZWYgIGludDhfdCAgICBpbnRfZmFzdDhfdDsKLXR5cGVkZWYgIGludCAgICAgICBpbnRfZmFzdDE2X3Q7Ci10eXBlZGVmICBpbnQzMl90ICAgaW50X2Zhc3QzMl90OwotI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCi10eXBlZGVmICBpbnQ2NF90ICAgaW50X2Zhc3Q2NF90OwotI2VuZGlmCi0KLXR5cGVkZWYgdWludDhfdCAgIHVpbnRfZmFzdDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgIHVpbnRfZmFzdDE2X3Q7Ci10eXBlZGVmIHVpbnQzMl90ICB1aW50X2Zhc3QzMl90OwotI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCi10eXBlZGVmIHVpbnQ2NF90ICB1aW50X2Zhc3Q2NF90OwotI2VuZGlmCi0gIC8qIGZhc3QgdHlwZXMgKi8KLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9ORUVEX0lOVE1BWF9UCi0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgIGludDY0X3QgICAgICAgaW50bWF4X3Q7Ci10eXBlZGVmIHVpbnQ2NF90ICAgICAgdWludG1heF90OwotI2Vsc2UKLXR5cGVkZWYgICAgICAgICAgbG9uZyAgaW50bWF4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludG1heF90OwotI2VuZGlmCi0jZW5kaWYKLQotI2lmZGVmIF9TVERJTlRfTkVFRF9JTlRQVFJfVAotI2lmbmRlZiBfX2ludHB0cl90X2RlZmluZWQKLSNkZWZpbmUgX19pbnRwdHJfdF9kZWZpbmVkCi0vKiB3ZSBlbmNvdXJhZ2UgdXNpbmcgImxvbmciIHRvIHN0b3JlIHBvaW50ZXIgdmFsdWVzLCBuZXZlciB1c2UgImludCIgISAqLwotI2lmICAgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQyIHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4NAotdHlwZWRlZiAgdW5zaWduZWQgaW50ICAgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgICAgaW50ICAgIGludHB0cl90OwotI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gMjQ0IHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ0NAotdHlwZWRlZiAgdW5zaWduZWQgbG9uZyAgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgICAgbG9uZyAgIGludHB0cl90OwotI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDQ4ICYmIGRlZmluZWQgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgICAgICAgIHVpbnQ2NF90IHVpbnRwdHJfdDsKLXR5cGVkZWYgICAgICAgICBpbnQ2NF90ICBpbnRwdHJfdDsKLSNlbHNlIC8qIG1hdGNoZXMgdHlwaWNhbCBzeXN0ZW0gdHlwZXMgSUxQMzIgYW5kIExQNjQgLSBidXQgbm90IElQMTYgb3IgTExQNjQgKi8KLXR5cGVkZWYgIHVuc2lnbmVkIGxvbmcgIHVpbnRwdHJfdDsKLXR5cGVkZWYgICAgICAgICAgIGxvbmcgICBpbnRwdHJfdDsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotLyogVGhlIElTTyBDOTkgc3RhbmRhcmQgc3BlY2lmaWVzIHRoYXQgaW4gQysrIGltcGxlbWVudGF0aW9ucyB0aGVzZQotICAgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZC4gICovCi0jaWYgIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TCi0jaWZuZGVmIFVJTlQzMl9DCi0KLS8qIFNpZ25lZC4gICovCi0jIGRlZmluZSBJTlQ4X0MoYykgICAgICBjCi0jIGRlZmluZSBJTlQxNl9DKGMpICAgICBjCi0jIGRlZmluZSBJTlQzMl9DKGMpICAgICBjCi0jIGlmZGVmIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi0jICBkZWZpbmUgSU5UNjRfQyhjKSAgICBjICMjIEwKLSMgZWxzZQotIyAgZGVmaW5lIElOVDY0X0MoYykgICAgYyAjIyBMTAotIyBlbmRpZgotCi0vKiBVbnNpZ25lZC4gICovCi0jIGRlZmluZSBVSU5UOF9DKGMpICAgICBjICMjIFUKLSMgZGVmaW5lIFVJTlQxNl9DKGMpICAgIGMgIyMgVQotIyBkZWZpbmUgVUlOVDMyX0MoYykgICAgYyAjIyBVCi0jIGlmZGVmIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi0jICBkZWZpbmUgVUlOVDY0X0MoYykgICBjICMjIFVMCi0jIGVsc2UKLSMgIGRlZmluZSBVSU5UNjRfQyhjKSAgIGMgIyMgVUxMCi0jIGVuZGlmCi0KLS8qIE1heGltYWwgdHlwZS4gICovCi0jIGlmZGVmIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi0jICBkZWZpbmUgSU5UTUFYX0MoYykgICBjICMjIEwKLSMgIGRlZmluZSBVSU5UTUFYX0MoYykgIGMgIyMgVUwKLSMgZWxzZQotIyAgZGVmaW5lIElOVE1BWF9DKGMpICAgYyAjIyBMTAotIyAgZGVmaW5lIFVJTlRNQVhfQyhjKSAgYyAjIyBVTEwKLSMgZW5kaWYKLQotICAvKiBsaXRlcmFsbnVtYmVycyAqLwotI2VuZGlmCi0jZW5kaWYKLQotLyogVGhlc2UgbGltaXRzIGFyZSBtZXJpbHkgdGhvc2Ugb2YgYSB0d28gY29tcGxlbWVudCBieXRlLW9yaWVudGVkIHN5c3RlbSAqLwotCi0vKiBNaW5pbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4gICovCi0jIGRlZmluZSBJTlQ4X01JTiAgICAgICAgICAgICAgICgtMTI4KQotIyBkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCi0jIGRlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotIyBkZWZpbmUgSU5UNjRfTUlOICAgICAgICAgICAgICAoLV9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKQotLyogTWF4aW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMuICAqLwotIyBkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQotIyBkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jIGRlZmluZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQotIyBkZWZpbmUgSU5UNjRfTUFYICAgICAgICAgICAgICAoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQotCi0vKiBNYXhpbXVtIG9mIHVuc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KLSMgZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NSkKLSMgZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1KQotIyBkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCi0jIGRlZmluZSBVSU5UNjRfTUFYICAgICAgICAgICAgIChfX1VJTlQ2NF9DKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSkKLQotLyogTWluaW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KLSMgZGVmaW5lIElOVF9MRUFTVDhfTUlOICAgICAgICAgSU5UOF9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDE2X01JTiAgICAgICAgSU5UMTZfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1QzMl9NSU4gICAgICAgIElOVDMyX01JTgotIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUlOICAgICAgICBJTlQ2NF9NSU4KLS8qIE1heGltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzIGhhdmluZyBhIG1pbmltdW0gc2l6ZS4gICovCi0jIGRlZmluZSBJTlRfTEVBU1Q4X01BWCAgICAgICAgIElOVDhfTUFYCi0jIGRlZmluZSBJTlRfTEVBU1QxNl9NQVggICAgICAgIElOVDE2X01BWAotIyBkZWZpbmUgSU5UX0xFQVNUMzJfTUFYICAgICAgICBJTlQzMl9NQVgKLSMgZGVmaW5lIElOVF9MRUFTVDY0X01BWCAgICAgICAgSU5UNjRfTUFYCi0KLS8qIE1heGltdW0gb2YgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KLSMgZGVmaW5lIFVJTlRfTEVBU1Q4X01BWCAgICAgICAgVUlOVDhfTUFYCi0jIGRlZmluZSBVSU5UX0xFQVNUMTZfTUFYICAgICAgIFVJTlQxNl9NQVgKLSMgZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggICAgICAgVUlOVDMyX01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDY0X01BWCAgICAgICBVSU5UNjRfTUFYCi0KLSAgLyogc2hvcnRjaXJjdWl0Ki8KLSNlbmRpZgotICAvKiBvbmNlICovCi0jZW5kaWYKLSNlbmRpZgotU1RESU5UX0VPRgotZmkKLSAgICBpZiBjbXAgLXMgJGFjX3N0ZGludF9oICRhY19zdGRpbnQgMj4vZGV2L251bGw7IHRoZW4KLSAgICAgIEFDX01TR19OT1RJQ0UoWyRhY19zdGRpbnRfaCBpcyB1bmNoYW5nZWRdKQotICAgIGVsc2UKLSAgICAgIGFjX2Rpcj1gQVNfRElSTkFNRShbIiRhY19zdGRpbnRfaCJdKWAKLSAgICAgIEFTX01LRElSX1AoWyIkYWNfZGlyIl0pCi0gICAgICBybSAtZiAkYWNfc3RkaW50X2gKLSAgICAgIG12ICRhY19zdGRpbnQgJGFjX3N0ZGludF9oCi0gICAgZmkKLV0sWyMgdmFyaWFibGVzIGZvciBjcmVhdGUgc3RkaW50LmggcmVwbGFjZW1lbnQKLVBBQ0tBR0U9IiRQQUNLQUdFIgotVkVSU0lPTj0iJFZFUlNJT04iCi1hY19zdGRpbnRfaD0iJGFjX3N0ZGludF9oIgotX2FjX3N0ZGludF9oPUFTX1RSX0NQUChfJFBBQ0tBR0UtJGFjX3N0ZGludF9oKQotYWNfY3Zfc3RkaW50X21lc3NhZ2U9IiRhY19jdl9zdGRpbnRfbWVzc2FnZSIKLWFjX2N2X2hlYWRlcl9zdGRpbnRfdD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdCIKLWFjX2N2X2hlYWRlcl9zdGRpbnRfeD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKLWFjX2N2X2hlYWRlcl9zdGRpbnRfbz0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIKLWFjX2N2X2hlYWRlcl9zdGRpbnRfdT0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKLWFjX2N2X3R5cGVfdWludDY0X3Q9IiRhY19jdl90eXBlX3VpbnQ2NF90IgotYWNfY3ZfdHlwZV91X2ludDY0X3Q9IiRhY19jdl90eXBlX3VfaW50NjRfdCIKLWFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCIKLWFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCIKLWFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdD0iJGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIKLWFjX2N2X3R5cGVfaW50X2Zhc3QzMl90PSIkYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiCi1hY19jdl90eXBlX2ludG1heF90PSIkYWNfY3ZfdHlwZV9pbnRtYXhfdCIKLV0pCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2F4X3B0aHJlYWQubTQgYi9jb21tb24vbTQvYXhfcHRocmVhZC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM0MDUxZS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvYXhfcHRocmVhZC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyAgICAgICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLWFyY2hpdmUvYXhfcHRocmVhZC5odG1sCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIwotIyBTWU5PUFNJUwotIwotIyAgIEFYX1BUSFJFQUQoW0FDVElPTi1JRi1GT1VORFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLSMKLSMgREVTQ1JJUFRJT04KLSMKLSMgICBUaGlzIG1hY3JvIGZpZ3VyZXMgb3V0IGhvdyB0byBidWlsZCBDIHByb2dyYW1zIHVzaW5nIFBPU0lYIHRocmVhZHMuIEl0Ci0jICAgc2V0cyB0aGUgUFRIUkVBRF9MSUJTIG91dHB1dCB2YXJpYWJsZSB0byB0aGUgdGhyZWFkcyBsaWJyYXJ5IGFuZCBsaW5rZXIKLSMgICBmbGFncywgYW5kIHRoZSBQVEhSRUFEX0NGTEFHUyBvdXRwdXQgdmFyaWFibGUgdG8gYW55IHNwZWNpYWwgQyBjb21waWxlcgotIyAgIGZsYWdzIHRoYXQgYXJlIG5lZWRlZC4gKFRoZSB1c2VyIGNhbiBhbHNvIGZvcmNlIGNlcnRhaW4gY29tcGlsZXIKLSMgICBmbGFncy9saWJzIHRvIGJlIHRlc3RlZCBieSBzZXR0aW5nIHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcy4pCi0jCi0jICAgQWxzbyBzZXRzIFBUSFJFQURfQ0MgdG8gYW55IHNwZWNpYWwgQyBjb21waWxlciB0aGF0IGlzIG5lZWRlZCBmb3IKLSMgICBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcyAoZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIENDIG90aGVyd2lzZSkuIChUaGlzCi0jICAgaXMgbmVjZXNzYXJ5IG9uIEFJWCB0byB1c2UgdGhlIHNwZWNpYWwgY2NfciBjb21waWxlciBhbGlhcy4pCi0jCi0jICAgTk9URTogWW91IGFyZSBhc3N1bWVkIHRvIG5vdCBvbmx5IGNvbXBpbGUgeW91ciBwcm9ncmFtIHdpdGggdGhlc2UgZmxhZ3MsCi0jICAgYnV0IGFsc28gdG8gbGluayB3aXRoIHRoZW0gYXMgd2VsbC4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBsaW5rIHdpdGgKLSMgICAkUFRIUkVBRF9DQyAkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyAkTERGTEFHUyAuLi4gJFBUSFJFQURfTElCUyAkTElCUwotIwotIyAgIElmIHlvdSBhcmUgb25seSBidWlsZGluZyB0aHJlYWRlZCBwcm9ncmFtcywgeW91IG1heSB3aXNoIHRvIHVzZSB0aGVzZQotIyAgIHZhcmlhYmxlcyBpbiB5b3VyIGRlZmF1bHQgTElCUywgQ0ZMQUdTLCBhbmQgQ0M6Ci0jCi0jICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotIyAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKLSMgICAgIENDPSIkUFRIUkVBRF9DQyIKLSMKLSMgICBJbiBhZGRpdGlvbiwgaWYgdGhlIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIHRocmVhZC1hdHRyaWJ1dGUgY29uc3RhbnQKLSMgICBoYXMgYSBub25zdGFuZGFyZCBuYW1lLCB0aGlzIG1hY3JvIGRlZmluZXMgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdG8KLSMgICB0aGF0IG5hbWUgKGUuZy4gUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRCBvbiBBSVgpLgotIwotIyAgIEFsc28gSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVCBpcyBkZWZpbmVkIGlmIHB0aHJlYWQgaXMgZm91bmQgYW5kIHRoZQotIyAgIFBUSFJFQURfUFJJT19JTkhFUklUIHN5bWJvbCBpcyBkZWZpbmVkIHdoZW4gY29tcGlsaW5nIHdpdGgKLSMgICBQVEhSRUFEX0NGTEFHUy4KLSMKLSMgICBBQ1RJT04tSUYtRk9VTkQgaXMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRvIHJ1biBpZiBhIHRocmVhZHMgbGlicmFyeQotIyAgIGlzIGZvdW5kLCBhbmQgQUNUSU9OLUlGLU5PVC1GT1VORCBpcyBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIGl0IGlmIGl0Ci0jICAgaXMgbm90IGZvdW5kLiBJZiBBQ1RJT04tSUYtRk9VTkQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgYWN0aW9uCi0jICAgd2lsbCBkZWZpbmUgSEFWRV9QVEhSRUFELgotIwotIyAgIFBsZWFzZSBsZXQgdGhlIGF1dGhvcnMga25vdyBpZiB0aGlzIG1hY3JvIGZhaWxzIG9uIGFueSBwbGF0Zm9ybSwgb3IgaWYKLSMgICB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnMgb3IgY29tbWVudHMuIFRoaXMgbWFjcm8gd2FzIGJhc2VkIG9uIHdvcmsKLSMgICBieSBTR0ogb24gYXV0b2NvbmYgc2NyaXB0cyBmb3IgRkZUVyAoaHR0cDovL3d3dy5mZnR3Lm9yZy8pICh3aXRoIGhlbHAKLSMgICBmcm9tIE0uIEZyaWdvKSwgYXMgd2VsbCBhcyBhY19wdGhyZWFkIGFuZCBoYl9wdGhyZWFkIG1hY3JvcyBwb3N0ZWQgYnkKLSMgICBBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2byB0byB0aGUgYXV0b2NvbmYgbWFjcm8gcmVwb3NpdG9yeS4gV2UgYXJlIGFsc28KLSMgICBncmF0ZWZ1bCBmb3IgdGhlIGhlbHBmdWwgZmVlZGJhY2sgb2YgbnVtZXJvdXMgdXNlcnMuCi0jCi0jICAgVXBkYXRlZCBmb3IgQXV0b2NvbmYgMi42OCBieSBEYW5pZWwgUmljaGFyZCBHLgotIwotIyBMSUNFTlNFCi0jCi0jICAgQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBKb2huc29uIDxzdGV2ZW5qQGFsdW0ubWl0LmVkdT4KLSMgICBDb3B5cmlnaHQgKGMpIDIwMTEgRGFuaWVsIFJpY2hhcmQgRy4gPHNrdW5rQGlTS1VOSy5PUkc+Ci0jCi0jICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0jICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbAotIyAgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSMgICB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotIwotIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0IG93bmVyCi0jICAgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZSBjb25maWd1cmUKLSMgICBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nIHRoZSBNYWNyby4gWW91Ci0jICAgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2hlbiB1c2luZwotIyAgIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIHRoZQotIyAgIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4KLSMgICBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0IGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KLSMKLSMgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUgQXV0b2NvbmYKLSMgICBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhCi0jICAgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQXV0b2NvbmYgTWFjcm8sIHlvdSBtYXkgZXh0ZW5kIHRoaXMgc3BlY2lhbAotIyAgIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgotCi0jc2VyaWFsIDIzCi0KLUFVX0FMSUFTKFtBQ1hfUFRIUkVBRF0sIFtBWF9QVEhSRUFEXSkKLUFDX0RFRlVOKFtBWF9QVEhSRUFEXSwgWwotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCi1BQ19SRVFVSVJFKFtBQ19QUk9HX1NFRF0pCi1BQ19MQU5HX1BVU0goW0NdKQotYXhfcHRocmVhZF9vaz1ubwotCi0jIFdlIHVzZWQgdG8gY2hlY2sgZm9yIHB0aHJlYWQuaCBmaXJzdCwgYnV0IHRoaXMgZmFpbHMgaWYgcHRocmVhZC5oCi0jIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1NjQgb3IgU2VxdWVudCkuCi0jIEl0IGdldHMgY2hlY2tlZCBmb3IgaW4gdGhlIGxpbmsgdGVzdCBhbnl3YXkuCi0KLSMgRmlyc3Qgb2YgYWxsLCBjaGVjayBpZiB0aGUgdXNlciBoYXMgc2V0IGFueSBvZiB0aGUgUFRIUkVBRF9MSUJTLAotIyBldGNldGVyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBpZiB0aHJlYWRzIGxpbmtpbmcgd29ya3MgdXNpbmcKLSMgdGhlbToKLWlmIHRlc3QgIngkUFRIUkVBRF9DRkxBR1MkUFRIUkVBRF9MSUJTIiAhPSAieCI7IHRoZW4KLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NDPSIkQ0MiCi0gICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgQVNfSUYoW3Rlc3QgIngkUFRIUkVBRF9DQyIgIT0gIngiXSwgW0NDPSIkUFRIUkVBRF9DQyJdKQotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwdGhyZWFkX2pvaW4gdXNpbmcgJENDICRQVEhSRUFEX0NGTEFHUyAkUFRIUkVBRF9MSUJTXSkKLSAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfQ0FMTChbXSwgW3B0aHJlYWRfam9pbl0pXSwgW2F4X3B0aHJlYWRfb2s9eWVzXSkKLSAgICAgICAgQUNfTVNHX1JFU1VMVChbJGF4X3B0aHJlYWRfb2tdKQotICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInhubyI7IHRoZW4KLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9IiIKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgotICAgICAgICBmaQotICAgICAgICBDQz0iJGF4X3B0aHJlYWRfc2F2ZV9DQyIKLSAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgotZmkKLQotIyBXZSBtdXN0IGNoZWNrIGZvciB0aGUgdGhyZWFkcyBsaWJyYXJ5IHVuZGVyIGEgbnVtYmVyIG9mIGRpZmZlcmVudAotIyBuYW1lczsgdGhlIG9yZGVyaW5nIGlzIHZlcnkgaW1wb3J0YW50IGJlY2F1c2Ugc29tZSBzeXN0ZW1zCi0jIChlLmcuIERFQykgaGF2ZSBib3RoIC1scHRocmVhZCBhbmQgLWxwdGhyZWFkcywgd2hlcmUgb25lIG9mIHRoZQotIyBsaWJyYXJpZXMgaXMgYnJva2VuIChub24tUE9TSVgpLgotCi0jIENyZWF0ZSBhIGxpc3Qgb2YgdGhyZWFkIGZsYWdzIHRvIHRyeS4gIEl0ZW1zIHN0YXJ0aW5nIHdpdGggYSAiLSIgYXJlCi0jIEMgY29tcGlsZXIgZmxhZ3MsIGFuZCBvdGhlciBpdGVtcyBhcmUgbGlicmFyeSBuYW1lcywgZXhjZXB0IGZvciAibm9uZSIKLSMgd2hpY2ggaW5kaWNhdGVzIHRoYXQgd2UgdHJ5IHdpdGhvdXQgYW55IGZsYWdzIGF0IGFsbCwgYW5kICJwdGhyZWFkLWNvbmZpZyIKLSMgd2hpY2ggaXMgYSBwcm9ncmFtIHJldHVybmluZyB0aGUgZmxhZ3MgZm9yIHRoZSBQdGggZW11bGF0aW9uIGxpYnJhcnkuCi0KLWF4X3B0aHJlYWRfZmxhZ3M9InB0aHJlYWRzIG5vbmUgLUt0aHJlYWQgLXB0aHJlYWQgLXB0aHJlYWRzIC1tdGhyZWFkcyBwdGhyZWFkIC0tdGhyZWFkLXNhZmUgLW10IHB0aHJlYWQtY29uZmlnIgotCi0jIFRoZSBvcmRlcmluZyAqaXMqIChzb21ldGltZXMpIGltcG9ydGFudC4gIFNvbWUgbm90ZXMgb24gdGhlCi0jIGluZGl2aWR1YWwgaXRlbXMgZm9sbG93OgotCi0jIHB0aHJlYWRzOiBBSVggKG11c3QgY2hlY2sgdGhpcyBiZWZvcmUgLWxwdGhyZWFkKQotIyBub25lOiBpbiBjYXNlIHRocmVhZHMgYXJlIGluIGxpYmM7IHNob3VsZCBiZSB0cmllZCBiZWZvcmUgLUt0aHJlYWQgYW5kCi0jICAgICAgIG90aGVyIGNvbXBpbGVyIGZsYWdzIHRvIHByZXZlbnQgY29udGludWFsIGNvbXBpbGVyIHdhcm5pbmdzCi0jIC1LdGhyZWFkOiBTZXF1ZW50ICh0aHJlYWRzIGluIGxpYmMsIGJ1dCAtS3RocmVhZCBuZWVkZWQgZm9yIHB0aHJlYWQuaCkKLSMgLXB0aHJlYWQ6IExpbnV4L2djYyAoa2VybmVsIHRocmVhZHMpLCBCU0QvZ2NjICh1c2VybGFuZCB0aHJlYWRzKSwgVHJ1NjQKLSMgICAgICAgICAgIChOb3RlOiBIUCBDIHJlamVjdHMgdGhpcyB3aXRoICJiYWQgZm9ybSBmb3IgYC10JyBvcHRpb24iKQotIyAtcHRocmVhZHM6IFNvbGFyaXMvZ2NjIChOb3RlOiBIUCBDIGFsc28gcmVqZWN0cykKLSMgLW10OiBTdW4gV29ya3Nob3AgQyAobWF5IG9ubHkgbGluayBTdW5PUyB0aHJlYWRzIFstbHRocmVhZF0sIGJ1dCBpdAotIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIGFuZAotIyAgICAgIC1EX1JFRU5UUkFOVCB0b28pLCBIUCBDIChtdXN0IGJlIGNoZWNrZWQgYmVmb3JlIC1scHRocmVhZCwgd2hpY2gKLSMgICAgICBpcyBwcmVzZW50IGJ1dCBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHk7IGFuZCBiZWZvcmUgLW10aHJlYWRzLAotIyAgICAgIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGludGVycHJldHMgdGhpcyBhcyAiLW10IiArICItaHJlYWRzIikKLSMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKLSMgcHRocmVhZDogTGludXgsIGV0Y2V0ZXJhCi0jIC0tdGhyZWFkLXNhZmU6IEtBSSBDKysKLSMgcHRocmVhZC1jb25maWc6IHVzZSBwdGhyZWFkLWNvbmZpZyBwcm9ncmFtIChmb3IgR05VIFB0aCBsaWJyYXJ5KQotCi1jYXNlICRob3N0X29zIGluCi0KLSAgICAgICAgZnJlZWJzZCopCi0KLSAgICAgICAgIyAta3RocmVhZDogRnJlZUJTRCBrZXJuZWwgdGhyZWFkcyAocHJlZmVycmVkIHRvIC1wdGhyZWFkIHNpbmNlIFNNUC1hYmxlKQotICAgICAgICAjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQotCi0gICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1rdGhyZWFkIGx0aHJlYWQgJGF4X3B0aHJlYWRfZmxhZ3MiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgaHB1eCopCi0KLSAgICAgICAgIyBGcm9tIHRoZSBjYygxKSBtYW4gcGFnZTogIlstbXRdIFNldHMgdmFyaW91cyAtRCBmbGFncyB0byBlbmFibGUKLSAgICAgICAgIyBtdWx0aS10aHJlYWRpbmcgYW5kIGFsc28gc2V0cyAtbHB0aHJlYWQuIgotCi0gICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1tdCAtcHRocmVhZCBwdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgotICAgICAgICA7OwotCi0gICAgICAgIG9wZW5lZGl0aW9uKikKLQotICAgICAgICAjIElCTSB6L09TIHJlcXVpcmVzIGEgZmVhdHVyZS10ZXN0IG1hY3JvIHRvIGJlIGRlZmluZWQgaW4gb3JkZXIgdG8KLSAgICAgICAgIyBlbmFibGUgUE9TSVggdGhyZWFkcyBhdCBhbGwsIHNvIGdpdmUgdGhlIHVzZXIgYSBoaW50IGlmIHRoaXMgaXMKLSAgICAgICAgIyBub3Qgc2V0LiAoV2UgZG9uJ3QgZGVmaW5lIHRoZXNlIG91cnNlbHZlcywgYXMgdGhleSBjYW4gYWZmZWN0Ci0gICAgICAgICMgb3RoZXIgcG9ydGlvbnMgb2YgdGhlIHN5c3RlbSBBUEkgaW4gdW5wcmVkaWN0YWJsZSB3YXlzLikKLQotICAgICAgICBBQ19FR1JFUF9DUFAoW0FYX1BUSFJFQURfWk9TX01JU1NJTkddLAotICAgICAgICAgICAgWwotIyAgICAgICAgICAgIGlmICFkZWZpbmVkKF9PUEVOX1RIUkVBRFMpICYmICFkZWZpbmVkKF9VTklYMDNfVEhSRUFEUykKLSAgICAgICAgICAgICBBWF9QVEhSRUFEX1pPU19NSVNTSU5HCi0jICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICBbQUNfTVNHX1dBUk4oW0lCTSB6L09TIHJlcXVpcmVzIC1EX09QRU5fVEhSRUFEUyBvciAtRF9VTklYMDNfVEhSRUFEUyB0byBlbmFibGUgcHRocmVhZHMgc3VwcG9ydC5dKV0pCi0gICAgICAgIDs7Ci0KLSAgICAgICAgc29sYXJpcyopCi0KLSAgICAgICAgIyBPbiBTb2xhcmlzIChhdCBsZWFzdCwgZm9yIHNvbWUgdmVyc2lvbnMpLCBsaWJjIGNvbnRhaW5zIHN0dWJiZWQKLSAgICAgICAgIyAobm9uLWZ1bmN0aW9uYWwpIHZlcnNpb25zIG9mIHRoZSBwdGhyZWFkcyByb3V0aW5lcywgc28gbGluay1iYXNlZAotICAgICAgICAjIHRlc3RzIHdpbGwgZXJyb25lb3VzbHkgc3VjY2VlZC4gKE4uQi46IFRoZSBzdHVicyBhcmUgbWlzc2luZwotICAgICAgICAjIHB0aHJlYWRfY2xlYW51cF9wdXNoLCBvciByYXRoZXIgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyBtYWNybywKLSAgICAgICAgIyBzbyB3ZSBjb3VsZCBjaGVjayBmb3IgdGhhdCwgYnV0IHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YgotICAgICAgICAjIHRoYXQgdG9vIGluIGEgZnV0dXJlIGxpYmMuKSAgU28gd2UnbGwgY2hlY2sgZmlyc3QgZm9yIHRoZQotICAgICAgICAjIHN0YW5kYXJkIFNvbGFyaXMgd2F5IG9mIGxpbmtpbmcgcHRocmVhZHMgKC1tdCAtbHB0aHJlYWQpLgotCi0gICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1tdCxwdGhyZWFkIHB0aHJlYWQgJGF4X3B0aHJlYWRfZmxhZ3MiCi0gICAgICAgIDs7Ci1lc2FjCi0KLSMgR0NDIGdlbmVyYWxseSB1c2VzIC1wdGhyZWFkLCBvciAtcHRocmVhZHMgb24gc29tZSBwbGF0Zm9ybXMgKGUuZy4gU1BBUkMpCi0KLUFTX0lGKFt0ZXN0ICJ4JEdDQyIgPSAieHllcyJdLAotICAgICAgW2F4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkIC1wdGhyZWFkcyAkYXhfcHRocmVhZF9mbGFncyJdKQotCi0jIFRoZSBwcmVzZW5jZSBvZiBhIGZlYXR1cmUgdGVzdCBtYWNybyByZXF1ZXN0aW5nIHJlLWVudHJhbnQgZnVuY3Rpb24KLSMgZGVmaW5pdGlvbnMgaXMsIG9uIHNvbWUgc3lzdGVtcywgYSBzdHJvbmcgaGludCB0aGF0IHB0aHJlYWRzIHN1cHBvcnQgaXMKLSMgY29ycmVjdGx5IGVuYWJsZWQKLQotY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICBkYXJ3aW4qIHwgaHB1eCogfCBsaW51eCogfCBvc2YqIHwgc29sYXJpcyopCi0gICAgICAgIGF4X3B0aHJlYWRfY2hlY2tfbWFjcm89Il9SRUVOVFJBTlQiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgYWl4KikKLSAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iX1RIUkVBRF9TQUZFIgotICAgICAgICA7OwotCi0gICAgICAgICopCi0gICAgICAgIGF4X3B0aHJlYWRfY2hlY2tfbWFjcm89Ii0tIgotICAgICAgICA7OwotZXNhYwotQVNfSUYoW3Rlc3QgIngkYXhfcHRocmVhZF9jaGVja19tYWNybyIgPSAieC0tIl0sCi0gICAgICBbYXhfcHRocmVhZF9jaGVja19jb25kPTBdLAotICAgICAgW2F4X3B0aHJlYWRfY2hlY2tfY29uZD0iIWRlZmluZWQoJGF4X3B0aHJlYWRfY2hlY2tfbWFjcm8pIl0pCi0KLSMgQXJlIHdlIGNvbXBpbGluZyB3aXRoIENsYW5nPwotCi1BQ19DQUNIRV9DSEVDSyhbd2hldGhlciAkQ0MgaXMgQ2xhbmddLAotICAgIFtheF9jdl9QVEhSRUFEX0NMQU5HXSwKLSAgICBbYXhfY3ZfUFRIUkVBRF9DTEFORz1ubwotICAgICAjIE5vdGUgdGhhdCBBdXRvY29uZiBzZXRzIEdDQz15ZXMgZm9yIENsYW5nIGFzIHdlbGwgYXMgR0NDCi0gICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBBQ19FR1JFUF9DUFAoW0FYX1BUSFJFQURfQ0NfSVNfQ0xBTkddLAotICAgICAgICAgICAgWy8qIE5vdGU6IENsYW5nIDIuNyBsYWNrcyBfX2NsYW5nX1thLXpdK19fICovCi0jICAgICAgICAgICAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19sbHZtX18pCi0gICAgICAgICAgICAgQVhfUFRIUkVBRF9DQ19JU19DTEFORwotIyAgICAgICAgICAgIGVuZGlmCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfQ0xBTkc9eWVzXSkKLSAgICAgZmkKLSAgICBdKQotYXhfcHRocmVhZF9jbGFuZz0iJGF4X2N2X1BUSFJFQURfQ0xBTkciCi0KLWF4X3B0aHJlYWRfY2xhbmdfd2FybmluZz1ubwotCi0jIENsYW5nIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcsIGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgaGFuZGxlIHRoZSAtcHRocmVhZAotIyBvcHRpb24gaW4gYSByYXRoZXIuLi4gaWRpb3N5bmNyYXRpYyB3YXkKLQotaWYgdGVzdCAieCRheF9wdGhyZWFkX2NsYW5nIiA9ICJ4eWVzIjsgdGhlbgotCi0gICAgICAgICMgQ2xhbmcgdGFrZXMgLXB0aHJlYWQ7IGl0IGhhcyBuZXZlciBzdXBwb3J0ZWQgYW55IG90aGVyIGZsYWcKLQotICAgICAgICAjIChOb3RlIDE6IFRoaXMgd2lsbCBuZWVkIHRvIGJlIHJldmlzaXRlZCBpZiBhIHN5c3RlbSB0aGF0IENsYW5nCi0gICAgICAgICMgc3VwcG9ydHMgaGFzIFBPU0lYIHRocmVhZHMgaW4gYSBzZXBhcmF0ZSBsaWJyYXJ5LiAgVGhpcyB0ZW5kcyBub3QKLSAgICAgICAgIyB0byBiZSB0aGUgd2F5IG9mIG1vZGVybiBzeXN0ZW1zLCBidXQgaXQncyBjb25jZWl2YWJsZS4pCi0KLSAgICAgICAgIyAoTm90ZSAyOiBPbiBzb21lIHN5c3RlbXMsIG5vdGFibHkgRGFyd2luLCAtcHRocmVhZCBpcyBub3QgbmVlZGVkCi0gICAgICAgICMgdG8gZ2V0IFBPU0lYIHRocmVhZHMgc3VwcG9ydDsgdGhlIEFQSSBpcyBhbHdheXMgcHJlc2VudCBhbmQKLSAgICAgICAgIyBhY3RpdmUuICBXZSBjb3VsZCByZWFzb25hYmx5IGxlYXZlIFBUSFJFQURfQ0ZMQUdTIGVtcHR5LiAgQnV0Ci0gICAgICAgICMgLXB0aHJlYWQgZG9lcyBkZWZpbmUgX1JFRU5UUkFOVCwgYW5kIHdoaWxlIHRoZSBEYXJ3aW4gaGVhZGVycwotICAgICAgICAjIGlnbm9yZSB0aGlzIG1hY3JvLCB0aGlyZC1wYXJ0eSBoZWFkZXJzIG1pZ2h0IG5vdC4pCi0KLSAgICAgICAgUFRIUkVBRF9DRkxBR1M9Ii1wdGhyZWFkIgotICAgICAgICBQVEhSRUFEX0xJQlM9Ci0KLSAgICAgICAgYXhfcHRocmVhZF9vaz15ZXMKLQotICAgICAgICAjIEhvd2V2ZXIsIG9sZGVyIHZlcnNpb25zIG9mIENsYW5nIG1ha2UgYSBwb2ludCBvZiB3YXJuaW5nIHRoZSB1c2VyCi0gICAgICAgICMgdGhhdCwgaW4gYW4gaW52b2NhdGlvbiB3aGVyZSBvbmx5IGxpbmtpbmcgYW5kIG5vIGNvbXBpbGF0aW9uIGlzCi0gICAgICAgICMgdGFraW5nIHBsYWNlLCB0aGUgLXB0aHJlYWQgb3B0aW9uIGhhcyBubyBlZmZlY3QgKCJhcmd1bWVudCB1bnVzZWQKLSAgICAgICAgIyBkdXJpbmcgY29tcGlsYXRpb24iKS4gIFRoZXkgZXhwZWN0IC1wdGhyZWFkIHRvIGJlIHBhc3NlZCBpbiBvbmx5Ci0gICAgICAgICMgd2hlbiBzb3VyY2UgY29kZSBpcyBiZWluZyBjb21waWxlZC4KLSAgICAgICAgIwotICAgICAgICAjIFByb2JsZW0gaXMsIHRoaXMgaXMgYXQgb2RkcyB3aXRoIHRoZSB3YXkgQXV0b21ha2UgYW5kIG1vc3Qgb3RoZXIKLSAgICAgICAgIyBDIGJ1aWxkIGZyYW1ld29ya3MgZnVuY3Rpb24sIHdoaWNoIGlzIHRoYXQgdGhlIHNhbWUgZmxhZ3MgdXNlZCBpbgotICAgICAgICAjIGNvbXBpbGF0aW9uIChDRkxBR1MpIGFyZSBhbHNvIHVzZWQgaW4gbGlua2luZy4gIE1hbnkgc3lzdGVtcwotICAgICAgICAjIHN1cHBvcnRlZCBieSBBWF9QVEhSRUFEIHJlcXVpcmUgZXhhY3RseSB0aGlzIGZvciBQT1NJWCB0aHJlYWRzCi0gICAgICAgICMgc3VwcG9ydCwgYW5kIGluIGZhY3QgaXQgaXMgb2Z0ZW4gbm90IHN0cmFpZ2h0Zm9yd2FyZCB0byBzcGVjaWZ5IGEKLSAgICAgICAgIyBmbGFnIHRoYXQgaXMgdXNlZCBvbmx5IGluIHRoZSBjb21waWxhdGlvbiBwaGFzZSBhbmQgbm90IGluCi0gICAgICAgICMgbGlua2luZy4gIFN1Y2ggYSBzY2VuYXJpbyBpcyBleHRyZW1lbHkgcmFyZSBpbiBwcmFjdGljZS4KLSAgICAgICAgIwotICAgICAgICAjIEV2ZW4gdGhvdWdoIHVzZSBvZiB0aGUgLXB0aHJlYWQgZmxhZyBpbiBsaW5raW5nIHdvdWxkIG9ubHkgcHJpbnQKLSAgICAgICAgIyBhIHdhcm5pbmcsIHRoaXMgY2FuIGJlIGEgbnVpc2FuY2UgZm9yIHdlbGwtcnVuIHNvZnR3YXJlIHByb2plY3RzCi0gICAgICAgICMgdGhhdCBidWlsZCB3aXRoIC1XZXJyb3IuICBTbyBpZiB0aGUgYWN0aXZlIHZlcnNpb24gb2YgQ2xhbmcgaGFzCi0gICAgICAgICMgdGhpcyBtaXNmZWF0dXJlLCB3ZSBzZWFyY2ggZm9yIGFuIG9wdGlvbiB0byBzcXVhc2ggaXQuCi0KLSAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgQ2xhbmcgbmVlZHMgZmxhZyB0byBwcmV2ZW50ICJhcmd1bWVudCB1bnVzZWQiIHdhcm5pbmcgd2hlbiBsaW5raW5nIHdpdGggLXB0aHJlYWRdLAotICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHXSwKLSAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRz11bmtub3duCi0gICAgICAgICAgICAgIyBDcmVhdGUgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgJGFjX2xpbmsgdGhhdCBjb21waWxlcyBhbmQKLSAgICAgICAgICAgICAjIGxpbmtzIGluIHR3byBzdGVwcyAoLmMgLT4gLm8sIC5vIC0+IGV4ZSkgaW5zdGVhZCBvZiBvbmUKLSAgICAgICAgICAgICAjICguYyAtPiBleGUpLCBiZWNhdXNlIHRoZSB3YXJuaW5nIG9jY3VycyBvbmx5IGluIHRoZSBzZWNvbmQKLSAgICAgICAgICAgICAjIHN0ZXAKLSAgICAgICAgICAgICBheF9wdGhyZWFkX3NhdmVfYWNfbGluaz0iJGFjX2xpbmsiCi0gICAgICAgICAgICAgYXhfcHRocmVhZF9zZWQ9J3MvY29uZnRlc3RcLlwkYWNfZXh0L2NvbmZ0ZXN0LiRhY19vYmpleHQvZycKLSAgICAgICAgICAgICBheF9wdGhyZWFkX2xpbmtfc3RlcD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAiJGF4X3B0aHJlYWRfc2VkImAKLSAgICAgICAgICAgICBheF9wdGhyZWFkXzJzdGVwX2FjX2xpbms9IigkYWNfY29tcGlsZSkgJiYgKGVjaG8gPT09PSA+JjUpICYmICgkYXhfcHRocmVhZF9saW5rX3N0ZXApIgotICAgICAgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICAgICAgICAgZm9yIGF4X3B0aHJlYWRfdHJ5IGluICcnIC1RdW51c2VkLWFyZ3VtZW50cyAtV25vLXVudXNlZC1jb21tYW5kLWxpbmUtYXJndW1lbnQgdW5rbm93bjsgZG8KLSAgICAgICAgICAgICAgICBBU19JRihbdGVzdCAieCRheF9wdGhyZWFkX3RyeSIgPSAieHVua25vd24iXSwgW2JyZWFrXSkKLSAgICAgICAgICAgICAgICBDRkxBR1M9Ii1XZXJyb3IgLVd1bmtub3duLXdhcm5pbmctb3B0aW9uICRheF9wdGhyZWFkX3RyeSAtcHRocmVhZCAkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgICAgICAgICBhY19saW5rPSIkYXhfcHRocmVhZF9zYXZlX2FjX2xpbmsiCi0gICAgICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbaW50IG1haW4odm9pZCl7cmV0dXJuIDA7fV1dKV0sCi0gICAgICAgICAgICAgICAgICAgIFthY19saW5rPSIkYXhfcHRocmVhZF8yc3RlcF9hY19saW5rIgotICAgICAgICAgICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbaW50IG1haW4odm9pZCl7cmV0dXJuIDA7fV1dKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgW2JyZWFrXSkKLSAgICAgICAgICAgICAgICAgICAgXSkKLSAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgYWNfbGluaz0iJGF4X3B0aHJlYWRfc2F2ZV9hY19saW5rIgotICAgICAgICAgICAgIENGTEFHUz0iJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCi0gICAgICAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfcHRocmVhZF90cnkiID0gIngiXSwgW2F4X3B0aHJlYWRfdHJ5PW5vXSkKLSAgICAgICAgICAgICBheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRz0iJGF4X3B0aHJlYWRfdHJ5IgotICAgICAgICAgICAgXSkKLQotICAgICAgICBjYXNlICIkYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUciIGluCi0gICAgICAgICAgICAgICAgbm8gfCB1bmtub3duKSA7OwotICAgICAgICAgICAgICAgICopIFBUSFJFQURfQ0ZMQUdTPSIkYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUcgJFBUSFJFQURfQ0ZMQUdTIiA7OwotICAgICAgICBlc2FjCi0KLWZpICMgJGF4X3B0aHJlYWRfY2xhbmcgPSB5ZXMKLQotaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4bm8iOyB0aGVuCi1mb3IgYXhfcHRocmVhZF90cnlfZmxhZyBpbiAkYXhfcHRocmVhZF9mbGFnczsgZG8KLQotICAgICAgICBjYXNlICRheF9wdGhyZWFkX3RyeV9mbGFnIGluCi0gICAgICAgICAgICAgICAgbm9uZSkKLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFnc10pCi0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgIC1tdCxwdGhyZWFkKQotICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggLW10IC1scHRocmVhZF0pCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9Ii1tdCIKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1scHRocmVhZCIKLSAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICAgICAgICAgLSopCi0gICAgICAgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkYXhfcHRocmVhZF90cnlfZmxhZ10pCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiRheF9wdGhyZWFkX3RyeV9mbGFnIgotICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAgICAgICBwdGhyZWFkLWNvbmZpZykKLSAgICAgICAgICAgICAgICBBQ19DSEVDS19QUk9HKFtheF9wdGhyZWFkX2NvbmZpZ10sIFtwdGhyZWFkLWNvbmZpZ10sIFt5ZXNdLCBbbm9dKQotICAgICAgICAgICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X3B0aHJlYWRfY29uZmlnIiA9ICJ4bm8iXSwgW2NvbnRpbnVlXSkKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKLSAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9ImBwdGhyZWFkLWNvbmZpZyAtLWxkZmxhZ3NgIGBwdGhyZWFkLWNvbmZpZyAtLWxpYnNgIgotICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGF4X3B0aHJlYWRfdHJ5X2ZsYWddKQotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWwkYXhfcHRocmVhZF90cnlfZmxhZyIKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotCi0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLiAgV2UgbXVzdCBpbmNsdWRlIHB0aHJlYWQuaCwKLSAgICAgICAgIyBzaW5jZSBzb21lIGZ1bmN0aW9ucyBtYXkgYmUgbWFjcm9zLiAgKE9uIHRoZSBTZXF1ZW50LCB3ZQotICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKLSAgICAgICAgIyBXZSBjaGVjayBmb3IgcHRocmVhZF9qb2luIGJlY2F1c2UgaXQgaXMgaW4gLWxwdGhyZWFkIG9uIElSSVgKLSAgICAgICAgIyB3aGlsZSBwdGhyZWFkX2NyZWF0ZSBpcyBpbiBsaWJjLiAgV2UgY2hlY2sgZm9yIHB0aHJlYWRfYXR0cl9pbml0Ci0gICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCi0gICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2ggYmVjYXVzZSBpdCBpcyBvbmUgb2YgdGhlIGZldyBwdGhyZWFkCi0gICAgICAgICMgZnVuY3Rpb25zIG9uIFNvbGFyaXMgdGhhdCBkb2Vzbid0IGhhdmUgYSBub24tZnVuY3Rpb25hbCBsaWJjIHN0dWIuCi0gICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KLQotICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8cHRocmVhZC5oPgotIyAgICAgICAgICAgICAgICAgICAgICAgaWYgJGF4X3B0aHJlYWRfY2hlY2tfY29uZAotIyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yICIkYXhfcHRocmVhZF9jaGVja19tYWNybyBtdXN0IGJlIGRlZmluZWQiCi0jICAgICAgICAgICAgICAgICAgICAgICBlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcm91dGluZSh2b2lkICphKSB7IGEgPSAwOyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCAqc3RhcnRfcm91dGluZSh2b2lkICphKSB7IHJldHVybiBhOyB9XSwKLSAgICAgICAgICAgICAgICAgICAgICAgW3B0aHJlYWRfdCB0aDsgcHRocmVhZF9hdHRyX3QgYXR0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aCwgMCwgc3RhcnRfcm91dGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2pvaW4odGgsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3B1c2gocm91dGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NsZWFudXBfcG9wKDApIC8qIDsgKi9dKV0sCi0gICAgICAgICAgICBbYXhfcHRocmVhZF9vaz15ZXNdLAotICAgICAgICAgICAgW10pCi0KLSAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgotCi0gICAgICAgIEFDX01TR19SRVNVTFQoWyRheF9wdGhyZWFkX29rXSkKLSAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieHllcyJdLCBbYnJlYWtdKQotCi0gICAgICAgIFBUSFJFQURfTElCUz0iIgotICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgotZG9uZQotZmkKLQotIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKLWlmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotCi0gICAgICAgICMgRGV0ZWN0IEFJWCBsb3NzYWdlOiBKT0lOQUJMRSBhdHRyaWJ1dGUgaXMgY2FsbGVkIFVOREVUQUNIRUQuCi0gICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igam9pbmFibGUgcHRocmVhZCBhdHRyaWJ1dGVdLAotICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUl0sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSPXVua25vd24KLSAgICAgICAgICAgICBmb3IgYXhfcHRocmVhZF9hdHRyIGluIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQ7IGRvCi0gICAgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxwdGhyZWFkLmg+XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50IGF0dHIgPSAkYXhfcHRocmVhZF9hdHRyOyByZXR1cm4gYXR0ciAvKiA7ICovXSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSPSRheF9wdGhyZWFkX2F0dHI7IGJyZWFrXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCi0gICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgXSkKLSAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSIiAhPSAieHVua25vd24iICYmIFwKLSAgICAgICAgICAgICAgIHRlc3QgIngkYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSIiAhPSAieFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIiAmJiBcCi0gICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X3B0aHJlYWRfam9pbmFibGVfYXR0cl9kZWZpbmVkIiAhPSAieHllcyJdLAotICAgICAgICAgICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKFtQVEhSRUFEX0NSRUFURV9KT0lOQUJMRV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbiB5b3VyIHN5c3RlbS5dKQotICAgICAgICAgICAgICAgYXhfcHRocmVhZF9qb2luYWJsZV9hdHRyX2RlZmluZWQ9eWVzCi0gICAgICAgICAgICAgIF0pCi0KLSAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHNdLAotICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHU10sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTPW5vCi0gICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgICAgIGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUz0iLURfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MiCi0gICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICBdKQotICAgICAgICBBU19JRihbdGVzdCAieCRheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1MiICE9ICJ4bm8iICYmIFwKLSAgICAgICAgICAgICAgIHRlc3QgIngkYXhfcHRocmVhZF9zcGVjaWFsX2ZsYWdzX2FkZGVkIiAhPSAieHllcyJdLAotICAgICAgICAgICAgICBbUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICAgICAgICAgYXhfcHRocmVhZF9zcGVjaWFsX2ZsYWdzX2FkZGVkPXllc10pCi0KLSAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBQVEhSRUFEX1BSSU9fSU5IRVJJVF0sCi0gICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVRdLAotICAgICAgICAgICAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8cHRocmVhZC5oPl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tpbnQgaSA9IFBUSFJFQURfUFJJT19JTkhFUklUO11dKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUPXllc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUPW5vXSkKLSAgICAgICAgICAgIF0pCi0gICAgICAgIEFTX0lGKFt0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgICAgICAgICB0ZXN0ICJ4JGF4X3B0aHJlYWRfcHJpb19pbmhlcml0X2RlZmluZWQiICE9ICJ4eWVzIl0sCi0gICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfUFRIUkVBRF9QUklPX0lOSEVSSVRdLCBbMV0sIFtIYXZlIFBUSFJFQURfUFJJT19JTkhFUklULl0pCi0gICAgICAgICAgICAgICBheF9wdGhyZWFkX3ByaW9faW5oZXJpdF9kZWZpbmVkPXllcwotICAgICAgICAgICAgICBdKQotCi0gICAgICAgIENGTEFHUz0iJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRheF9wdGhyZWFkX3NhdmVfTElCUyIKLQotICAgICAgICAjIE1vcmUgQUlYIGxvc3NhZ2U6IGNvbXBpbGUgd2l0aCAqX3IgdmFyaWFudAotICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgICAgYWl4KikKLSAgICAgICAgICAgICAgICBBU19DQVNFKFsieC8kQ0MiXSwKLSAgICAgICAgICAgICAgICAgICAgW3gqL2M4OXx4Ki9jODlfMTI4fHgqL2M5OXx4Ki9jOTlfMTI4fHgqL2NjfHgqL2NjMTI4fHgqL3hsY3x4Ki94bGNfdjZ8eCoveGxjMTI4fHgqL3hsYzEyOF92Nl0sCi0gICAgICAgICAgICAgICAgICAgIFsjaGFuZGxlIGFic29sdXRlIHBhdGggZGlmZmVyZW50bHkgZnJvbSBQQVRIIGJhc2VkIHByb2dyYW0gbG9va3VwCi0gICAgICAgICAgICAgICAgICAgICBBU19DQVNFKFsieCRDQyJdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt4LypdLAotICAgICAgICAgICAgICAgICAgICAgICAgIFtBU19JRihbQVNfRVhFQ1VUQUJMRV9QKFske0NDfV9yXSldLFtQVEhSRUFEX0NDPSIke0NDfV9yIl0pXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbQUNfQ0hFQ0tfUFJPR1MoW1BUSFJFQURfQ0NdLFske0NDfV9yXSxbJENDXSldKV0pCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLWZpCi0KLXRlc3QgLW4gIiRQVEhSRUFEX0NDIiB8fCBQVEhSRUFEX0NDPSIkQ0MiCi0KLUFDX1NVQlNUKFtQVEhSRUFEX0xJQlNdKQotQUNfU1VCU1QoW1BUSFJFQURfQ0ZMQUdTXSkKLUFDX1NVQlNUKFtQVEhSRUFEX0NDXSkKLQotIyBGaW5hbGx5LCBleGVjdXRlIEFDVElPTi1JRi1GT1VORC9BQ1RJT04tSUYtTk9ULUZPVU5EOgotaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBpZmVsc2UoWyQxXSwsW0FDX0RFRklORShbSEFWRV9QVEhSRUFEXSxbMV0sW0RlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLl0pXSxbJDFdKQotICAgICAgICA6Ci1lbHNlCi0gICAgICAgIGF4X3B0aHJlYWRfb2s9bm8KLSAgICAgICAgJDIKLWZpCi1BQ19MQU5HX1BPUAotXSlkbmwgQVhfUFRIUkVBRApkaWZmIC0tZ2l0IGEvY29tbW9uL200L2NoZWNrLm00IGIvY29tbW9uL200L2NoZWNrLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmQyNmViLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9jaGVjay5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi1kbmwgX0FNX1RSWV9DSEVDSyhNSU5JTVVNLVZFUlNJT04sIEVYVFJBLUNGTEFHUywgRVhUUkEtTElCUywgQ0hFQ0stTElCLU5BTUUKLWRubCAgICAgICAgICAgICAgIFssIEFDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCi1kbmwgVGVzdCBmb3IgY2hlY2ssIGFuZCBkZWZpbmUgQ0hFQ0tfQ0ZMQUdTIGFuZCBDSEVDS19MSUJTCi1kbmwgRG9uZSB0aGlzIHdheSBiZWNhdXNlIG9mIHRoZSBicm9rZW5uZXNzIHRoYXQgaXMKLWRubCBodHRwczovL2xhdW5jaHBhZC5uZXQvZGlzdHJvcy91YnVudHUvK3NvdXJjZS9jaGVjay8rYnVnLzU4NDAKLWRubAotCi1BQ19ERUZVTihbX0FNX1RSWV9DSEVDS10sCi1bCi0gIG1pbl9jaGVja192ZXJzaW9uPSQxCi0gIGV4dHJhX2NmbGFncz0kMgotICBleHRyYV9saWJzPSQzCi0gIGNoZWNrX2xpYl9uYW1lPSQ0Ci0KLSAgQ0hFQ0tfQ0ZMQUdTPSIkZXh0cmFfY2ZsYWdzIgotICBDSEVDS19MSUJTPSIkZXh0cmFfbGlicyAtbCRjaGVja19saWJfbmFtZSIKLQotICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLQotICBDRkxBR1M9IiRDRkxBR1MgJENIRUNLX0NGTEFHUyIKLSAgTElCUz0iJENIRUNLX0xJQlMgJExJQlMiCi0KLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBjaGVjayBuYW1lZCAkY2hlY2tfbGliX25hbWUgIC0gdmVyc2lvbiA+PSAkbWluX2NoZWNrX3ZlcnNpb24pCi0KLSAgcm0gLWYgY29uZi5jaGVjay10ZXN0Ci0gIGRubCB1bnNldCBub19jaGVjaywgc2luY2UgaW4gb3VyIHNlY29uZCBydW4gaXQgd291bGQgaGF2ZSBiZWVuIHNldCB0byB5ZXMKLSAgZG5sIGJlZm9yZQotICBub19jaGVjaz0KLSAgQUNfVFJZX1JVTihbCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGNoZWNrLmg+Ci0KLWludCBtYWluICgpCi17Ci0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOwotICBjaGFyICp0bXBfdmVyc2lvbjsKLQotICBzeXN0ZW0gKCJ0b3VjaCBjb25mLmNoZWNrLXRlc3QiKTsKLQotICAvKiBIUC9VWCA5ICglQCMhKSB3cml0ZXMgdG8gc3NjYW5mIHN0cmluZ3MgKi8KLSAgdG1wX3ZlcnNpb24gPSBzdHJkdXAoIiRtaW5fY2hlY2tfdmVyc2lvbiIpOwotICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7Ci0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fY2hlY2tfdmVyc2lvbiIpOwotICAgICByZXR1cm4gMTsKLSAgIH0KLQotICBpZiAoKENIRUNLX01BSk9SX1ZFUlNJT04gIT0gY2hlY2tfbWFqb3JfdmVyc2lvbikgfHwKLSAgICAgIChDSEVDS19NSU5PUl9WRVJTSU9OICE9IGNoZWNrX21pbm9yX3ZlcnNpb24pIHx8Ci0gICAgICAoQ0hFQ0tfTUlDUk9fVkVSU0lPTiAhPSBjaGVja19taWNyb192ZXJzaW9uKSkKLSAgICB7Ci0gICAgICBwcmludGYoIlxuKioqIFRoZSBjaGVjayBoZWFkZXIgZmlsZSAodmVyc2lvbiAlZC4lZC4lZCkgZG9lcyBub3QgbWF0Y2hcbiIsCi0JICAgICBDSEVDS19NQUpPUl9WRVJTSU9OLCBDSEVDS19NSU5PUl9WRVJTSU9OLCBDSEVDS19NSUNST19WRVJTSU9OKTsKLSAgICAgIHByaW50ZigiKioqIHRoZSBjaGVjayBsaWJyYXJ5ICh2ZXJzaW9uICVkLiVkLiVkKS5cbiIsCi0JICAgICBjaGVja19tYWpvcl92ZXJzaW9uLCBjaGVja19taW5vcl92ZXJzaW9uLCBjaGVja19taWNyb192ZXJzaW9uKTsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLQotICBpZiAoKGNoZWNrX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKLSAgICAgICgoY2hlY2tfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGNoZWNrX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8Ci0gICAgICAoKGNoZWNrX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChjaGVja19taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoY2hlY2tfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQotICAgIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgY2hlY2sgKCVkLiVkLiVkKSB3YXMgZm91bmQuXG4iLAotICAgICAgICAgICAgIGNoZWNrX21ham9yX3ZlcnNpb24sIGNoZWNrX21pbm9yX3ZlcnNpb24sIGNoZWNrX21pY3JvX3ZlcnNpb24pOwotICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIGNoZWNrIGJlaW5nIGF0IGxlYXN0ICVkLiVkLiVkLlxuIiwgbWFqb3IsIG1pbm9yLCBtaWNybyk7Ci0gICAgICBwcmludGYoIioqKlxuIik7Ci0gICAgICBwcmludGYoIioqKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBhIHN1ZmZpY2llbnRseSBuZXcgdmVyc2lvbiwgdGhpcyBlcnJvclxuIik7Ci0gICAgICBwcmludGYoIioqKiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB3cm9uZyBjb3B5IG9mIHRoZSBjaGVjayBsaWJyYXJ5IGFuZCBoZWFkZXJcbiIpOwotICAgICAgcHJpbnRmKCIqKiogZmlsZSBpcyBiZWluZyBmb3VuZC4gUmVydW4gY29uZmlndXJlIHdpdGggdGhlIC0td2l0aC1jaGVjaz1QQVRIIG9wdGlvblxuIik7Ci0gICAgICBwcmludGYoIioqKiB0byBzcGVjaWZ5IHRoZSBwcmVmaXggd2hlcmUgdGhlIGNvcnJlY3QgdmVyc2lvbiB3YXMgaW5zdGFsbGVkLlxuIik7Ci0gICAgfQotCi0gIHJldHVybiAxOwotfQotXSwsIG5vX2NoZWNrPXllcywgW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQotCi0gIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotCi0gIGlmIHRlc3QgIngkbm9fY2hlY2siID0geCA7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICBpZmVsc2UoWyQ1XSwgLCA6LCBbJDVdKQotICBlbHNlCi0gICAgQUNfTVNHX1JFU1VMVChubykKLSAgICBpZiB0ZXN0IC1mIGNvbmYuY2hlY2stdGVzdCA7IHRoZW4KLSAgICAgIDoKLSAgICBlbHNlCi0gICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBjaGVjayB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKLSAgICAgIENGTEFHUz0iJENGTEFHUyAkQ0hFQ0tfQ0ZMQUdTIgotICAgICAgTElCUz0iJENIRUNLX0xJQlMgJExJQlMiCi0gICAgICBBQ19UUllfTElOSyhbCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGNoZWNrLmg+Ci1dLCAsICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKLSAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBjaGVjay4gWW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCi0gICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgotICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgotICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCi0JZWNobyAiKioqIgotICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCi0gICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCJdLAotICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IiCi0gICAgICAgIGVjaG8gIioqKiB0aGUgZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiIgXSkKLQotICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICAgIGZpCi0KLSAgICBDSEVDS19DRkxBR1M9IiIKLSAgICBDSEVDS19MSUJTPSIiCi0KLSAgICBybSAtZiBjb25mLmNoZWNrLXRlc3QKLSAgICBpZmVsc2UoWyQ2XSwgLCBBQ19NU0dfRVJST1IoW2NoZWNrIG5vdCBmb3VuZF0pLCBbJDZdKQotICBmaQotXSkKLQotCi1kbmwgQU1fUEFUSF9DSEVDSyhbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCi1kbmwgVGVzdCBmb3IgY2hlY2ssIGFuZCBkZWZpbmUgQ0hFQ0tfQ0ZMQUdTIGFuZCBDSEVDS19MSUJTCi1kbmwKLQotQUNfREVGVU4oW0FNX1BBVEhfQ0hFQ0tdLAotWwotICBBQ19BUkdfV0lUSChjaGVjaywKLSAgWyAgLS13aXRoLWNoZWNrPVBBVEggICAgICAgcHJlZml4IHdoZXJlIGNoZWNrIGlzIGluc3RhbGxlZCBbZGVmYXVsdD1hdXRvXV0pCi0KLSAgQUNfQVJHX1dJVEgoY2hlY2tsaWJuYW1lLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtY2hlY2stbGliLW5hbWU9TkFNRV0sCi0gICAgICBbbmFtZSBvZiB0aGUgUElDIGNoZWNrIGxpYnJhcnkgKGRlZmF1bHQ9Y2hlY2spXSkpCi0KLSAgbWluX2NoZWNrX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjguMiwkMSkKLQotICBpZiB0ZXN0IHgkd2l0aF9jaGVjayA9IHhubzsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoZGlzYWJsZWQpCi0gICAgaWZlbHNlKFskM10sICwgQUNfTVNHX0VSUk9SKFtkaXNhYmxpbmcgY2hlY2sgaXMgbm90IHN1cHBvcnRlZF0pLCBbJDNdKQotICBlbHNlCi0gICAgaWYgdGVzdCAieCR3aXRoX2NoZWNrIiAhPSB4OyB0aGVuCi0gICAgICBDSEVDS19FWFRSQV9DRkxBR1M9Ii1JJHdpdGhfY2hlY2svaW5jbHVkZSIKLSAgICAgIENIRUNLX0VYVFJBX0xJQlM9Ii1MJHdpdGhfY2hlY2svbGliIgotICAgIGVsc2UKLSAgICAgIENIRUNLX0VYVFJBX0NGTEFHUz0iIgotICAgICAgQ0hFQ0tfRVhUUkFfTElCUz0iIgotICAgIGZpCi0KLSAgICBpZiB0ZXN0IHgkd2l0aF9jaGVja2xpYm5hbWUgPSB4OyB0aGVuCi0gICAgICBfQU1fVFJZX0NIRUNLKCRtaW5fY2hlY2tfdmVyc2lvbiwgJENIRUNLX0VYVFJBX0NGTEFHUywgJENIRUNLX0VYVFJBX0xJQlMsCi0gICAgICAgIGNoZWNrX3BpYywgW2hhdmVfY2hlY2s9dHJ1ZV0sIFtoYXZlX2NoZWNrPWZhbHNlXSkKLSAgICAgIGlmIHRlc3QgeCRoYXZlX2NoZWNrID0geHRydWU7IHRoZW4KLSAgICAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKLSAgICAgIGVsc2UKLSAgICAgICAgX0FNX1RSWV9DSEVDSygkbWluX2NoZWNrX3ZlcnNpb24sICRDSEVDS19FWFRSQV9DRkxBR1MsICRDSEVDS19FWFRSQV9MSUJTLAotICAgICAgICAgIGNoZWNrLCBbaGF2ZV9jaGVjaz10cnVlXSwgW2hhdmVfY2hlY2s9ZmFsc2VdKQotICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jaGVjayA9IHh0cnVlOyB0aGVuCi0gICAgICAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKLSAgICAgICAgZWxzZQotICAgICAgICAgIGlmZWxzZShbJDNdLCAsIEFDX01TR19FUlJPUihbY2hlY2sgbm90IGZvdW5kXSksIFskM10pCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIF9BTV9UUllfQ0hFQ0soJG1pbl9jaGVja192ZXJzaW9uLCAkQ0hFQ0tfRVhUUkFfQ0ZMQUdTLCAkQ0hFQ0tfRVhUUkFfTElCUywKLSAgICAgICAgJHdpdGhfY2hlY2tsaWJuYW1lLCBbaGF2ZV9jaGVjaz10cnVlXSwgW2hhdmVfY2hlY2s9ZmFsc2VdKQotICAgICAgaWYgdGVzdCB4JGhhdmVfY2hlY2sgPSB4dHJ1ZTsgdGhlbgotICAgICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICAgICAgZWxzZQotICAgICAgICBpZmVsc2UoWyQzXSwgLCBBQ19NU0dfRVJST1IoW2NoZWNrIG5vdCBmb3VuZF0pLCBbJDNdKQotICAgICAgZmkKLSAgICBmaQotCi0gICAgQUNfU1VCU1QoQ0hFQ0tfQ0ZMQUdTKQotICAgIEFDX1NVQlNUKENIRUNLX0xJQlMpCi0gICAgcm0gLWYgY29uZi5jaGVjay10ZXN0Ci0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dsaWItZ2V0dGV4dC5tNCBiL2NvbW1vbi9tNC9nbGliLWdldHRleHQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDQ0MmYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dsaWItZ2V0dGV4dC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywyMDA0IFJlZCBIYXQsIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAotIyBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQotIyB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotIwotIyBUaGlzIGZpbGUgY2FuIGJlIGNvcGllZCBhbmQgdXNlZCBmcmVlbHkgd2l0aG91dCByZXN0cmljdGlvbnMuICBJdCBjYW4KLSMgYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlCi0jIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0IGZ1bmN0aW9uYWxpdHkuCi0jCi0jIE1hY3JvIHRvIGFkZCBmb3IgdXNpbmcgR05VIGdldHRleHQuCi0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LCAxOTk2Ci0jCi0jIE1vZGlmaWVkIHRvIG5ldmVyIHVzZSBpbmNsdWRlZCBsaWJpbnRsLgotIyBPd2VuIFRheWxvciA8b3RheWxvckByZWRoYXQuY29tPiwgMTIvMTUvMTk5OAotIwotIyBNYWpvciByZXdvcmsgdG8gcmVtb3ZlIHVudXNlZCBjb2RlCi0jIE93ZW4gVGF5bG9yIDxvdGF5bG9yQHJlZGhhdC5jb20+LCAxMi8xMS8yMDAyCi0jCi0jIEFkZGVkIGJldHRlciBoYW5kbGluZyBvZiBBTExfTElOR1VBUyBmcm9tIEdOVSBnZXR0ZXh0IHZlcnNpb24KLSMgd3JpdHRlbiBieSBCcnVubyBIYWlibGUsIE93ZW4gVGF5bG9yIDxvdGF5bG9yLnJlZGhhdC5jb20+IDUvMzAvMzAwMgotIwotIyBNb2RpZmllZCB0byByZXF1aXJlIG5nZXR0ZXh0Ci0jIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPiAwOC8wNi8yMDA0Ci0jCi0jIFdlIG5lZWQgdGhpcyBoZXJlIGFzIHdlbGwsIHNpbmNlIHNvbWVvbmUgbWlnaHQgdXNlIGF1dG9jb25mLTIuNXgKLSMgdG8gY29uZmlndXJlIEdMaWIgdGhlbiBhbiBvbGRlciB2ZXJzaW9uIHRvIGNvbmZpZ3VyZSBhIHBhY2thZ2UKLSMgdXNpbmcgQU1fR0xJQl9HTlVfR0VUVEVYVAotQUNfUFJFUkVRKDIuNTMpCi0KLWRubAotZG5sIFdlIGdvIHRvIGdyZWF0IGxlbmd0aHMgdG8gbWFrZSBzdXJlIHRoYXQgYWNsb2NhbCB3b24ndAotZG5sIHRyeSB0byBwdWxsIGluIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGVzZSBtYWNyb3MKLWRubCB3aGVuIHJ1bm5pbmcgYWNsb2NhbCBpbiB0aGUgZ2xpYiBkaXJlY3RvcnkuCi1kbmwKLW00X2NvcHkoW0FDX0RFRlVOXSxbZ2xpYl9ERUZVTl0pCi1tNF9jb3B5KFtBQ19SRVFVSVJFXSxbZ2xpYl9SRVFVSVJFXSkKLWRubAotZG5sIEF0IHRoZSBlbmQsIGlmIHdlJ3JlIG5vdCB3aXRoaW4gZ2xpYiwgd2UnbGwgZGVmaW5lIHRoZSBwdWJsaWMKLWRubCBkZWZpbml0aW9ucyBpbiB0ZXJtcyBvZiBvdXIgcHJpdmF0ZSBkZWZpbml0aW9ucy4KLWRubAotCi0jIEdMSUJfTENfTUVTU0FHRVMKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLQotZ2xpYl9ERUZVTihbR0xJQl9MQ19NRVNTQUdFU10sCi0gIFtBQ19DSEVDS19IRUFERVJTKFtsb2NhbGUuaF0pCi0gICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oID0geWVzOyB0aGVuCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKLSAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAotICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQotICAgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgotICAgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCi0gICAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQotICAgIGZpCi0gIGZpXSkKLQotIyBHTElCX1BBVEhfUFJPR19XSVRIX1RFU1QKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1kbmwgR0xJQl9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKLWRubCAgIFRFU1QtUEVSRk9STUVELU9OLUZPVU5EX1BST0dSQU0gWywgVkFMVUUtSUYtTk9ULUZPVU5EIFssIFBBVEhdXSkKLWdsaWJfREVGVU4oW0dMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVF0sCi1bIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkMiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGFjX3dvcmRdKQotQUNfQ0FDSEVfVkFMKGFjX2N2X3BhdGhfJDEsCi1bY2FzZSAiWyRdJDEiIGluCi0gIC8qKQotICBhY19jdl9wYXRoXyQxPSJbJF0kMSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfToiCi0gIGZvciBhY19kaXIgaW4gaWZlbHNlKFskNV0sICwgJFBBVEgsIFskNV0pOyBkbwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyRhY193b3JkOyB0aGVuCi0gICAgICBpZiBbJDNdOyB0aGVuCi0JYWNfY3ZfcGF0aF8kMT0iJGFjX2Rpci8kYWNfd29yZCIKLQlicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGFjX3NhdmVfaWZzIgotZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKLWRubCBzbyBBQ19QQVRIX1BST0dTIHdpbGwga2VlcCBsb29raW5nLgotaWZlbHNlKFskNF0sICwgLCBbICB0ZXN0IC16ICJbJF1hY19jdl9wYXRoXyQxIiAmJiBhY19jdl9wYXRoXyQxPSIkNCIKLV0pZG5sCi0gIDs7Ci1lc2FjXSlkbmwKLSQxPSIkYWNfY3ZfcGF0aF8kMSIKLWlmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChbJF0kMSkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi1BQ19TVUJTVCgkMSlkbmwKLV0pCi0KLSMgR0xJQl9XSVRIX05MUwotIy0tLS0tLS0tLS0tLS0tLS0tCi1nbGliX0RFRlVOKFtHTElCX1dJVEhfTkxTXSwKLSAgZG5sIE5MUyBpcyBvYmxpZ2F0b3J5Ci0gIFtVU0VfTkxTPXllcwotICAgIEFDX1NVQlNUKFVTRV9OTFMpCi0KLSAgICBndF9jdl9oYXZlX2dldHRleHQ9bm8KLQotICAgIENBVE9CSkVYVD1OT05FCi0gICAgWEdFVFRFWFQ9OgotICAgIElOVExMSUJTPQotCi0gICAgQUNfQ0hFQ0tfSEVBREVSKGxpYmludGwuaCwKLSAgICAgW2d0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD0ibm8iCi0gICAgICBsaWJpbnRsX2V4dHJhX2xpYnM9IiIKLQotICAgICAgIwotICAgICAgIyBGaXJzdCBjaGVjayBpbiBsaWJjCi0gICAgICAjCi0gICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIG5nZXR0ZXh0IGluIGxpYmNdLCBndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMsCi0gICAgICAgIFtBQ19UUllfTElOSyhbCi0jaW5jbHVkZSA8bGliaW50bC5oPgotXSwKLSAgICAgICAgIFtyZXR1cm4gIW5nZXR0ZXh0ICgiIiwiIiwgMSldLAotCSAgZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjPXllcywKLSAgICAgICAgICBndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmM9bm8pCi0gICAgICAgIF0pCi0KLSAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiID0gInllcyIgOyB0aGVuCi0JICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBkZ2V0dGV4dCBpbiBsaWJjXSwgZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjLAotICAgICAgICAJW0FDX1RSWV9MSU5LKFsKLSNpbmNsdWRlIDxsaWJpbnRsLmg+Ci1dLAotCSAgICAgICAgICBbcmV0dXJuICFkZ2V0dGV4dCAoIiIsIiIpXSwKLQkJICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmM9eWVzLAotCSAgICAgICAgICBndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmM9bm8pCi0gICAgICAgIAldKQotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfbmdldHRleHRfbGliYyIgPSAieWVzIiA7IHRoZW4KLSAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQpCi0gICAgICBmaQotCi0gICAgICAjCi0gICAgICAjIElmIHdlIGRvbid0IGhhdmUgZXZlcnl0aGluZyB3ZSB3YW50LCBjaGVjayBpbiBsaWJpbnRsCi0gICAgICAjCi0gICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJjIiAhPSAieWVzIiBcCi0JIHx8IHRlc3QgIiRndF9jdl9mdW5jX25nZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiIFwKLSAgICAgICAgIHx8IHRlc3QgIiRhY19jdl9mdW5jX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IiAhPSAieWVzIiA7IHRoZW4KLQotICAgICAgICBBQ19DSEVDS19MSUIoaW50bCwgYmluZHRleHRkb21haW4sCi0JICAgIFtBQ19DSEVDS19MSUIoaW50bCwgbmdldHRleHQsCi0JCSAgICBbQUNfQ0hFQ0tfTElCKGludGwsIGRnZXR0ZXh0LAotCQkJICAgICAgICAgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD15ZXMpXSldKQotCi0JaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgIT0gInllcyIgOyB0aGVuCi0JICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIC1saWNvbnYgaXMgbmVlZGVkIHRvIHVzZSBnZXR0ZXh0XSkKLQkgIEFDX01TR19SRVNVTFQoW10pCi0gIAkgIEFDX0NIRUNLX0xJQihpbnRsLCBuZ2V0dGV4dCwKLSAgICAgICAgICAJW0FDX0NIRUNLX0xJQihpbnRsLCBkY2dldHRleHQsCi0JCSAgICAgICBbZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsPXllcwotCQkJbGliaW50bF9leHRyYV9saWJzPS1saWNvbnZdLAotCQkJOiwtbGljb252KV0sCi0JCTosLWxpY29udikKLSAgICAgICAgZmkKLQotICAgICAgICAjCi0gICAgICAgICMgSWYgd2UgZm91bmQgbGliaW50bCwgdGhlbiBjaGVjayBpbiBpdCBmb3IgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKTsKLSAgICAgICAgIyB3ZSdsbCBwcmVmZXIgbGliYyBpZiBuZWl0aGVyIGhhdmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKSwKLSAgICAgICAgIyBhbmQgYm90aCBoYXZlIGRnZXR0ZXh0IGFuZCBuZ2V0dGV4dAotICAgICAgICAjCi0gICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmludGwiID0gInllcyIgOyB0aGVuCi0gICAgICAgICAgZ2xpYl9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICAgIExJQlM9IiRMSUJTIC1saW50bCAkbGliaW50bF9leHRyYV9saWJzIgotICAgICAgICAgIHVuc2V0IGFjX2N2X2Z1bmNfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKLSAgICAgICAgICBBQ19DSEVDS19GVU5DUyhiaW5kX3RleHRkb21haW5fY29kZXNldCkKLSAgICAgICAgICBMSUJTPSIkZ2xpYl9zYXZlX0xJQlMiCi0KLSAgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19iaW5kX3RleHRkb21haW5fY29kZXNldCIgPSAieWVzIiA7IHRoZW4KLSAgICAgICAgICAgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYz1ubwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2RnZXR0ZXh0X2xpYmMiID0gInllcyIgXAotCQkmJiB0ZXN0ICIkZ3RfY3ZfZnVuY19uZ2V0dGV4dF9saWJjIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgICAgICAgIGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bD1ubwotICAgICAgICAgICAgZmkKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliYyIgPSAieWVzIiBcCi0JfHwgdGVzdCAiJGd0X2N2X2Z1bmNfZGdldHRleHRfbGliaW50bCIgPSAieWVzIjsgdGhlbgotICAgICAgICBndF9jdl9oYXZlX2dldHRleHQ9eWVzCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19kZ2V0dGV4dF9saWJpbnRsIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIElOVExMSUJTPSItbGludGwgJGxpYmludGxfZXh0cmFfbGlicyIKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIiRndF9jdl9oYXZlX2dldHRleHQiID0gInllcyI7IHRoZW4KLQlBQ19ERUZJTkUoSEFWRV9HRVRURVhULDEsCi0JICBbRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKLQlHTElCX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCi0JICBbdGVzdCAteiAiYCRhY19kaXIvJGFjX3dvcmQgLWggMj4mMSB8IGdyZXAgJ2R2ICdgIl0sIG5vKWRubAotCWlmIHRlc3QgIiRNU0dGTVQiICE9ICJubyI7IHRoZW4KLSAgICAgICAgICBnbGliX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICAgICAgTElCUz0iJExJQlMgJElOVExMSUJTIgotCSAgQUNfQ0hFQ0tfRlVOQ1MoZGNnZXR0ZXh0KQotCSAgTVNHRk1UX09QVFM9Ci0JICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIG1zZ2ZtdCBhY2NlcHRzIC1jXSkKLQkgIEdMSUJfUlVOX1BST0coWyRNU0dGTVQgLWMgLW8gL2Rldi9udWxsXSxbCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iUHJvamVjdC1JZC1WZXJzaW9uOiB0ZXN0IDEuMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMDItMTUgMTI6MDErMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogdGVzdCA8Zm9vQGJhci54eD5cbiIKLSJMYW5ndWFnZS1UZWFtOiBDIDxMTEBsaS5vcmc+XG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi1dLCBbTVNHRk1UX09QVFM9LWM7IEFDX01TR19SRVNVTFQoW3llc10pXSwgW0FDX01TR19SRVNVTFQoW25vXSldKQotCSAgQUNfU1VCU1QoTVNHRk1UX09QVFMpCi0JICBBQ19QQVRIX1BST0coR01TR0ZNVCwgZ21zZ2ZtdCwgJE1TR0ZNVCkKLQkgIEdMSUJfUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCi0JICAgIFt0ZXN0IC16ICJgJGFjX2Rpci8kYWNfd29yZCAtaCAyPiYxIHwgZ3JlcCAnKEhFTFApJ2AiXSwgOikKLQkgIEFDX1RSWV9MSU5LKCwgW2V4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKLQkJCSByZXR1cm4gX25sX21zZ19jYXRfY250cl0sCi0JICAgIFtDQVRPQkpFWFQ9LmdtbwotICAgICAgICAgICAgIERBVEFESVJOQU1FPXNoYXJlXSwKLQkgICAgW2Nhc2UgJGhvc3QgaW4KLQkgICAgKi0qLXNvbGFyaXMqKQotCSAgICBkbmwgT24gU29sYXJpcywgaWYgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgaXMgaW4gbGliYywKLQkgICAgZG5sIEdOVSBmb3JtYXQgbWVzc2FnZSBjYXRhbG9nIGlzIGFsd2F5cyBzdXBwb3J0ZWQsCi0gICAgICAgICAgICBkbmwgc2luY2UgYm90aCBhcmUgYWRkZWQgdG8gdGhlIGxpYmMgYWxsIHRvZ2V0aGVyLgotCSAgICBkbmwgSGVuY2UsIHdlJ2QgbGlrZSB0byBnbyB3aXRoIERBVEFESVJOQU1FPXNoYXJlIGFuZAotCSAgICBkbmwgYW5kIENBVE9CSkVYVD0uZ21vIGluIHRoaXMgY2FzZS4KLSAgICAgICAgICAgIEFDX0NIRUNLX0ZVTkMoYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQsCi0JICAgICAgW0NBVE9CSkVYVD0uZ21vCi0gICAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZV0sCi0JICAgICAgW0NBVE9CSkVYVD0ubW8KLSAgICAgICAgICAgICAgIERBVEFESVJOQU1FPWxpYl0pCi0JICAgIDs7Ci0JICAgICopCi0JICAgIENBVE9CSkVYVD0ubW8KLSAgICAgICAgICAgIERBVEFESVJOQU1FPWxpYgotCSAgICA7OwotCSAgICBlc2FjXSkKLSAgICAgICAgICBMSUJTPSIkZ2xpYl9zYXZlX0xJQlMiCi0JICBJTlNUT0JKRVhUPS5tbwotCWVsc2UKLQkgIGd0X2N2X2hhdmVfZ2V0dGV4dD1ubwotCWZpCi0gICAgICBmaQotICAgIF0pCi0KLSAgICBpZiB0ZXN0ICIkZ3RfY3ZfaGF2ZV9nZXR0ZXh0IiA9ICJ5ZXMiIDsgdGhlbgotICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCi0gICAgICAgIFthbHdheXMgZGVmaW5lZCB0byBpbmRpY2F0ZSB0aGF0IGkxOG4gaXMgZW5hYmxlZF0pCi0gICAgZmkKLQotICAgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KLSAgICBpZiB0ZXN0ICIkWEdFVFRFWFQiICE9ICI6IjsgdGhlbgotICAgICAgZG5sIElmIGl0IGlzIG5vdCBHTlUgeGdldHRleHQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKLSAgICAgIGRubCBNYWtlZmlsZXMgc3RpbGwgY2FuIHdvcmsuCi0gICAgICBpZiAkWEdFVFRFWFQgLS1vbWl0LWhlYWRlciAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIDogOwotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfUkVTVUxUKAotCSAgW2ZvdW5kIHhnZXR0ZXh0IHByb2dyYW0gaXMgbm90IEdOVSB4Z2V0dGV4dDsgaWdub3JlIGl0XSkKLSAgICAgICAgWEdFVFRFWFQ9IjoiCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgcG8vIGRpcmVjdG9yeS4KLSAgICBQT1NVQj1wbwotCi0gICAgQUNfT1VUUFVUX0NPTU1BTkRTKAotICAgICAgW2Nhc2UgIiRDT05GSUdfRklMRVMiIGluICpwby9NYWtlZmlsZS5pbiopCi0gICAgICAgIHNlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZQotICAgICAgZXNhY10pCi0KLSAgICBkbmwgVGhlc2UgcnVsZXMgYXJlIHNvbGVseSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBnb2FsLiAgV2hpbGUgZG9pbmcgdGhpcwotICAgIGRubCB3ZSBvbmx5IGhhdmUgdG8ga2VlcCBleGFjdGx5IG9uZSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgY2F0YWxvZ3MKLSAgICBkbmwgaW4gY29uZmlndXJlLmluLgotICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJGxhbmcuZ21vIgotICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJGxhbmcucG8iCi0gICAgZG9uZQotCi0gICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCi0gICAgQUNfU1VCU1QoQ0FUQUxPR1MpCi0gICAgQUNfU1VCU1QoQ0FUT0JKRVhUKQotICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQotICAgIEFDX1NVQlNUKEdNT0ZJTEVTKQotICAgIEFDX1NVQlNUKElOU1RPQkpFWFQpCi0gICAgQUNfU1VCU1QoSU5UTExJQlMpCi0gICAgQUNfU1VCU1QoUE9fSU5fREFUQURJUl9UUlVFKQotICAgIEFDX1NVQlNUKFBPX0lOX0RBVEFESVJfRkFMU0UpCi0gICAgQUNfU1VCU1QoUE9GSUxFUykKLSAgICBBQ19TVUJTVChQT1NVQikKLSAgXSkKLQotIyBBTV9HTElCX0dOVV9HRVRURVhUCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRG8gY2hlY2tzIG5lY2Vzc2FyeSBmb3IgdXNlIG9mIGdldHRleHQuIElmIGEgc3VpdGFibGUgaW1wbGVtZW50YXRpb24KLSMgb2YgZ2V0dGV4dCBpcyBmb3VuZCBpbiBlaXRoZXIgaW4gbGliaW50bCBvciBpbiB0aGUgQyBsaWJyYXJ5LAotIyBpdCB3aWxsIHNldCBJTlRMTElCUyB0byB0aGUgbGlicmFyaWVzIG5lZWRlZCBmb3IgdXNlIG9mIGdldHRleHQKLSMgYW5kIEFDX0RFRklORSgpIEhBVkVfR0VUVEVYVCBhbmQgRU5BQkxFX05MUy4gKFRoZSBzaGVsbCB2YXJpYWJsZQotIyBndF9jdl9oYXZlX2dldHRleHQgd2lsbCBiZSBzZXQgdG8gInllcyIuKSBJdCB3aWxsIGFsc28gY2FsbCBBQ19TVUJTVCgpCi0jIG9uIHZhcmlvdXMgdmFyaWFibGVzIG5lZWRlZCBieSB0aGUgTWFrZWZpbGUuaW4uaW4gaW5zdGFsbGVkIGJ5Ci0jIGdsaWItZ2V0dGV4dGl6ZS4KLWRubAotZ2xpYl9ERUZVTihbR0xJQl9HTlVfR0VUVEVYVF0sCi0gIFtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLSAgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSlkbmwKLQotICAgR0xJQl9MQ19NRVNTQUdFUwotICAgR0xJQl9XSVRIX05MUwotCi0gICBpZiB0ZXN0ICIkZ3RfY3ZfaGF2ZV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgIGlmIHRlc3QgIngkQUxMX0xJTkdVQVMiID0gIngiOyB0aGVuCi0gICAgICAgTElOR1VBUz0KLSAgICAgZWxzZQotICAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgY2F0YWxvZ3MgdG8gYmUgaW5zdGFsbGVkKQotICAgICAgIE5FV19MSU5HVUFTPQotICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICAgICB1c2VpdD1ubwotICAgICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiR7TElOR1VBUy0lVU5TRVQlfSI7IHRoZW4KLSAgICAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKLSAgICAgICAgIGZpCi0gICAgICAgICBmb3IgZGVzaXJlZGxhbmcgaW4gJGRlc2lyZWRsYW5ndWFnZXM7IGRvCi0gCSAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCi0gICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKLSAgICAgICAgICAgIyAgIGIuIGEgdmFyaWFudCBvZiBwcmVzZW50bGFuZyAoYmVjYXVzZSBpbiB0aGlzIGNhc2UsCi0gICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcwotICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KLSAgICAgICAgICAgY2FzZSAiJGRlc2lyZWRsYW5nIiBpbgotICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZG9uZQotICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgTkVXX0xJTkdVQVM9IiRORVdfTElOR1VBUyAkcHJlc2VudGxhbmciCi0gICAgICAgICBmaQotICAgICAgIGRvbmUKLSAgICAgICBMSU5HVUFTPSRORVdfTElOR1VBUwotICAgICAgIEFDX01TR19SRVNVTFQoJExJTkdVQVMpCi0gICAgIGZpCi0KLSAgICAgZG5sIENvbnN0cnVjdCBsaXN0IG9mIG5hbWVzIG9mIGNhdGFsb2cgZmlsZXMgdG8gYmUgY29uc3RydWN0ZWQuCi0gICAgIGlmIHRlc3QgLW4gIiRMSU5HVUFTIjsgdGhlbgotICAgICAgIGZvciBsYW5nIGluICRMSU5HVUFTOyBkbyBDQVRBTE9HUz0iJENBVEFMT0dTICRsYW5nJENBVE9CSkVYVCI7IGRvbmUKLSAgICAgZmkKLSAgIGZpCi0KLSAgIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKLSAgIGRubCBmaW5kIHRoZSBta2luc3RhbGxkaXJzIHNjcmlwdCBpbiBhbm90aGVyIHN1YmRpciBidXQgKCR0b3Bfc3JjZGlyKS4KLSAgIGRubCBUcnkgdG8gbG9jYXRlIGlzLgotICAgTUtJTlNUQUxMRElSUz0KLSAgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgotICAgICBNS0lOU1RBTExESVJTPSIkYWNfYXV4X2Rpci9ta2luc3RhbGxkaXJzIgotICAgZmkKLSAgIGlmIHRlc3QgLXogIiRNS0lOU1RBTExESVJTIjsgdGhlbgotICAgICBNS0lOU1RBTExESVJTPSJcJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzIgotICAgZmkKLSAgIEFDX1NVQlNUKE1LSU5TVEFMTERJUlMpCi0KLSAgIGRubCBHZW5lcmF0ZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHByb2Nlc3NlZCBieSB4Z2V0dGV4dCB3aGljaCB3aWxsCi0gICBkbmwgYmUgaW5jbHVkZWQgaW4gcG8vTWFrZWZpbGUuCi0gICB0ZXN0IC1kIHBvIHx8IG1rZGlyIHBvCi0gICBpZiB0ZXN0ICJ4JHNyY2RpciIgIT0gInguIjsgdGhlbgotICAgICBpZiB0ZXN0ICJ4YGVjaG8gJHNyY2RpciB8IHNlZCAnc0AvLipAQCdgIiA9ICJ4IjsgdGhlbgotICAgICAgIHBvc3JjcHJlZml4PSIkc3JjZGlyLyIKLSAgICAgZWxzZQotICAgICAgIHBvc3JjcHJlZml4PSIuLi8kc3JjZGlyLyIKLSAgICAgZmkKLSAgIGVsc2UKLSAgICAgcG9zcmNwcmVmaXg9Ii4uLyIKLSAgIGZpCi0gICBybSAtZiBwby9QT1RGSUxFUwotICAgc2VkIC1lICIvXiMvZCIgLWUgIi9eXCQvZCIgLWUgInMsLiosCSRwb3NyY3ByZWZpeCYgXFxcXCwiIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiBcCi0JPCAkc3JjZGlyL3BvL1BPVEZJTEVTLmluID4gcG8vUE9URklMRVMKLSAgXSkKLQotIyBBTV9HTElCX0RFRklORV9MT0NBTEVESVIoVkFSSUFCTEUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIFZBUklBQkxFIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBjYXRhbG9nIGZpbGVzIHdpbGwKLSMgYmUgaW5zdGFsbGVkIGJ5IHBvL01ha2VmaWxlLgotZ2xpYl9ERUZVTihbR0xJQl9ERUZJTkVfTE9DQUxFRElSXSwKLVtnbGliX1JFUVVJUkUoW0dMSUJfR05VX0dFVFRFWFRdKWRubAotZ2xpYl9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLWdsaWJfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotZ2xpYl9zYXZlX2RhdGFyb290ZGlyPSIkZGF0YXJvb3RkaXIiCi10ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Ci10ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PSRwcmVmaXgKLWRhdGFyb290ZGlyPWBldmFsIGVjaG8gIiR7ZGF0YXJvb3RkaXJ9ImAKLWlmIHRlc3QgIngkQ0FUT0JKRVhUIiA9ICJ4Lm1vIiA7IHRoZW4KLSAgbG9jYWxlZGlyPWBldmFsIGVjaG8gIiR7bGliZGlyfS9sb2NhbGUiYAotZWxzZQotICBsb2NhbGVkaXI9YGV2YWwgZWNobyAiJHtkYXRhZGlyfS9sb2NhbGUiYAotZmkKLXByZWZpeD0iJGdsaWJfc2F2ZV9wcmVmaXgiCi1leGVjX3ByZWZpeD0iJGdsaWJfc2F2ZV9leGVjX3ByZWZpeCIKLWRhdGFyb290ZGlyPSIkZ2xpYl9zYXZlX2RhdGFyb290ZGlyIgotQUNfREVGSU5FX1VOUVVPVEVEKCQxLCAiJGxvY2FsZWRpciIsCi0gIFtEZWZpbmUgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBjYXRhbG9ncyB3aWxsIGJlIGluc3RhbGxlZF0pCi1dKQotCi1kbmwKLWRubCBOb3cgdGhlIGRlZmluaXRpb25zIHRoYXQgYWNsb2NhbCB3aWxsIGZpbmQKLWRubAotaWZkZWYoZ2xpYl9jb25maWd1cmVfaW4sW10sWwotQUNfREVGVU4oW0FNX0dMSUJfR05VX0dFVFRFWFRdLFtHTElCX0dOVV9HRVRURVhUKCRAKV0pCi1BQ19ERUZVTihbQU1fR0xJQl9ERUZJTkVfTE9DQUxFRElSXSxbR0xJQl9ERUZJTkVfTE9DQUxFRElSKCRAKV0pCi1dKWRubAotCi0jIEdMSUJfUlVOX1BST0coUFJPR1JBTSwgVEVTVC1GSUxFLCBbQUNUSU9OLUlGLVBBU1NdLCBbQUNUSU9OLUlGLUZBSUxdKQotIwotIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIFRFU1QtRklMRSBhcyBpdHMgY29udGVudHMgYW5kIHBhc3MgdGhlCi0jIGZpbGUgbmFtZSB0byBQUk9HUkFNLiAgUGVyZm9ybSBBQ1RJT04tSUYtUEFTUyBpZiBQUk9HUkFNIGV4aXRzIHdpdGgKLSMgMCBhbmQgcGVyZm9ybSBBQ1RJT04tSUYtRkFJTCBmb3IgYW55IG90aGVyIGV4aXQgc3RhdHVzLgotQUNfREVGVU4oW0dMSUJfUlVOX1BST0ddLAotW2NhdCA+Y29uZnRlc3QuZm9vIDw8X0FDRU9GCi0kMgotX0FDRU9GCi1pZiBBQ19SVU5fTE9HKFskMSBjb25mdGVzdC5mb29dKTsgdGhlbgotICBtNF9pZnZhbChbJDNdLCBbJDNdLCBbOl0pCi1tNF9pZnZhbG4oWyQ0XSwgW2Vsc2UgJDRdKWRubAotZWNobyAiJGFzX21lOiBmYWlsZWQgaW5wdXQgd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAotc2VkICdzL14vfCAvJyBjb25mdGVzdC5mb28gPiZBU19NRVNTQUdFX0xPR19GRAotZmldKQotCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWFyY2gubTQgYi9jb21tb24vbTQvZ3N0LWFyY2gubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZDc2ODAuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1hcmNoLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLWRubCBBR19HU1RfQVJDSAotZG5sIHNldHMgdXAgZGVmaW5lcyBhbmQgYXV0b21ha2UgY29uZGl0aW9uYWxzIGZvciBob3N0IGFyY2hpdGVjdHVyZQotZG5sIGNoZWNrcyBlbmRpYW5uZXNzCi1kbmwgZGVmaW5lcyBIT1NUX0NQVQotCi1BQ19ERUZVTihbQUdfR1NUX0FSQ0hdLAotWwotICBkbmwgRGV0ZXJtaW5lIENQVQotICBjYXNlICJ4JHt0YXJnZXRfY3B1fSIgaW4KLSAgICB4aT84NiB8IHhrPyB8IHhpPzg2XzY0KQotICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgICAgICBzb2xhcmlzKikKLSAgICAgICAgICAgIEFDX0NIRUNLX0RFQ0woW19faTM4Nl0sCVtJMzg2X0FCST0ieWVzIl0sIFtJMzg2X0FCST0ibm8iXSkKLSAgICAgICAgICAgIEFDX0NIRUNLX0RFQ0woW19fYW1kNjRdLCBbQU1ENjRfQUJJPSJ5ZXMiXSwgW0FNRDY0X0FCST0ibm8iXSkKLQotICAgICAgICAgICAgaWYgdGVzdCAieCRJMzg2X0FCSSIgPSAieHllcyIgOyB0aGVuCi0gICAgICAgICAgICAgICBIQVZFX0NQVV9JMzg2PXllcwotICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0kzODYsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4geDg2XSkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBpZiB0ZXN0ICJ4JEFNRDY0X0FCSSIgPSAieHllcyIgOyB0aGVuCi0gICAgICAgICAgICAgICAgSEFWRV9DUFVfWDg2XzY0PXllcwotICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NQVV9YODZfNjQsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSB4ODZfNjRdKQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAqKQotICAgICAgICAgICAgSEFWRV9DUFVfSTM4Nj15ZXMKLSAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NQVV9JMzg2LCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIHg4Nl0pCi0KLSAgICAgICAgICAgIGRubCBGSVhNRSBjb3VsZCB1c2Ugc29tZSBiZXR0ZXIgZGV0ZWN0aW9uCi0gICAgICAgICAgICBkbmwgKGllIENQVUlEKQotICAgICAgICAgICAgY2FzZSAieCR7dGFyZ2V0X2NwdX0iIGluCi0gICAgICAgICAgICAgIHhpMzg2IHwgeGk0ODYpIDs7Ci0gICAgICAgICAgICAqKQotICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9SRFRTQywgMSwgW0RlZmluZSBpZiBSRFRTQyBpcyBhdmFpbGFibGVdKSA7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgeHBvd2VycGMpCi0gICAgICBIQVZFX0NQVV9QUEM9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfUFBDLCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgUG93ZXJQQ10pIDs7Ci0gICAgeHBvd2VycGM2NCkKLSAgICAgIEhBVkVfQ1BVX1BQQzY0PXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX1BQQzY0LCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgNjQgYml0IFBvd2VyUENdKSA7OwotICAgIHhhbHBoYSopCi0gICAgICBIQVZFX0NQVV9BTFBIQT15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9BTFBIQSwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiBBbHBoYV0pIDs7Ci0gICAgeGFyYyopCi0gICAgICBIQVZFX0NQVV9BUkM9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQVJDLCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFSQ10pIDs7Ci0gICAgeGFybSopCi0gICAgICBIQVZFX0NQVV9BUk09eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQVJNLCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFSTV0pIDs7Ci0gICAgeGFhcmNoNjQqKQotICAgICAgSEFWRV9DUFVfQUFSQ0g2ND15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9BQVJDSDY0LCAxLCBbRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIEFBUkNINjRdKSA7OwotICAgIHhzcGFyYyopCi0gICAgICBIQVZFX0NQVV9TUEFSQz15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX0NQVV9TUEFSQywgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIFNQQVJDXSkgOzsKLSAgICB4bWlwcyopCi0gICAgICBIQVZFX0NQVV9NSVBTPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX01JUFMsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBNSVBTXSkgOzsKLSAgICB4aHBwYSopCi0gICAgICBIQVZFX0NQVV9IUFBBPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0hQUEEsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBIUFBBXSkgOzsKLSAgICB4czM5MCopCi0gICAgICBIQVZFX0NQVV9TMzkwPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX1MzOTAsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBTMzkwXSkgOzsKLSAgICB4aWE2NCopCi0gICAgICBIQVZFX0NQVV9JQTY0PXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0lBNjQsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBJQTY0XSkgOzsKLSAgICB4bTY4ayopCi0gICAgICBIQVZFX0NQVV9NNjhLPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX002OEssIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBNNjhLXSkgOzsKLSAgICB4eDg2XzY0KQotICAgICAgSEFWRV9DUFVfWDg2XzY0PXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX1g4Nl82NCwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIHg4Nl82NF0pIDs7Ci0gICAgeGNyaXMpCi0gICAgICBIQVZFX0NQVV9DUklTPXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfQ1BVX0NSSVMsIDEsIFtEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBDUklTXSkgOzsKLSAgICB4Y3Jpc3YzMikKLSAgICAgIEhBVkVfQ1BVX0NSSVNWMzI9eWVzCi0gICAgICBBQ19ERUZJTkUoSEFWRV9DUFVfQ1JJU1YzMiwgMSwgW0RlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIENSSVN2MzJdKSA7OwotICBlc2FjCi0KLSAgZG5sIERldGVybWluZSBlbmRpYW5uZXNzCi0gIEFDX0NfQklHRU5ESUFOCi0KLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfSTM4NiwgICAgICAgdGVzdCAieCRIQVZFX0NQVV9JMzg2IiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfUFBDLCAgICAgICAgdGVzdCAieCRIQVZFX0NQVV9QUEMiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9QUEM2NCwgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1BQQzY0IiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfQUxQSEEsICAgICAgdGVzdCAieCRIQVZFX0NQVV9BTFBIQSIgPSAieHllcyIpCi0gIEFNX0NPTkRJVElPTkFMKEhBVkVfQ1BVX0FSQywgICAgICAgIHRlc3QgIngkSEFWRV9DUFVfQVJDIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfQVJNLCAgICAgICAgdGVzdCAieCRIQVZFX0NQVV9BUk0iID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9TUEFSQywgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX1NQQVJDIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfSFBQQSwgICAgICAgdGVzdCAieCRIQVZFX0NQVV9IUFBBIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfTUlQUywgICAgICAgdGVzdCAieCRIQVZFX0NQVV9NSVBTIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfUzM5MCwgICAgICAgdGVzdCAieCRIQVZFX0NQVV9TMzkwIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfSUE2NCwgICAgICAgdGVzdCAieCRIQVZFX0NQVV9JQTY0IiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfTTY4SywgICAgICAgdGVzdCAieCRIQVZFX0NQVV9NNjhLIiA9ICJ4eWVzIikKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9DUFVfWDg2XzY0LCAgICAgdGVzdCAieCRIQVZFX0NQVV9YODZfNjQiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9DUklTLCAgICAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0NSSVMiID0gInh5ZXMiKQotICBBTV9DT05ESVRJT05BTChIQVZFX0NQVV9DUklTVjMyLCAgICB0ZXN0ICJ4JEhBVkVfQ1BVX0NSSVNWMzIiID0gInh5ZXMiKQotCi0gIEFDX0RFRklORV9VTlFVT1RFRChIT1NUX0NQVSwgIiRob3N0X2NwdSIsIFt0aGUgaG9zdCBDUFVdKQotICBBQ19ERUZJTkVfVU5RVU9URUQoVEFSR0VUX0NQVSwgIiR0YXJnZXRfY3B1IiwgW3RoZSB0YXJnZXQgQ1BVXSkKLV0pCi0KLWRubCBjaGVjayBpZiB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyB3b3JrcyBjb3JyZWN0bHkKLUFDX0RFRlVOKFtBR19HU1RfVU5BTElHTkVEX0FDQ0VTU10sIFsKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyB3b3JrcyBjb3JyZWN0bHldKQotICBpZiB0ZXN0IHgiJGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3MiID0geCA7IHRoZW4KLSAgICBjYXNlICRob3N0IGluCi0gICAgICBhbHBoYSp8YXJjKnxhcm0qfGFhcmNoNjQqfGhwKnxtaXBzKnxzaCp8c3BhcmMqfGlhNjQqKQotICAgICAgICBfQVNfRUNIT19OKFsoYmxhY2tsaXN0ZWQpIF0pCi0gICAgICAgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9bm8KLQk7OwotICAgICAgaT84Nip8eDg2XzY0KnxhbWQ2NCp8cG93ZXJwYyp8bTY4ayp8Y3JpcyopCi0gICAgICAgIF9BU19FQ0hPX04oWyh3aGl0ZWxpc3RlZCkgXSkKLSAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz15ZXMKLQk7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIF9BU19FQ0hPX04oWyhjYWNoZWQpIF0pCi0gIGZpCi0gIGlmIHRlc3QgeCIkYXNfY3ZfdW5hbGlnbmVkX2FjY2VzcyIgPSB4IDsgdGhlbgotICAgIEFDX1RSWV9SVU4oWwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBjaGFyIGFycmF5W10gPSAiQUJDREVGR0giOwotICB1bnNpZ25lZCBpbnQgaWFycmF5WzJdOwotICBtZW1jcHkoaWFycmF5LGFycmF5LDgpOwotI2RlZmluZSBHRVQoeCkgKCoodW5zaWduZWQgaW50ICopKChjaGFyICopaWFycmF5ICsgKHgpKSkKLSAgaWYoR0VUKDApICE9IDB4NDE0MjQzNDQgJiYgR0VUKDApICE9IDB4NDQ0MzQyNDEpIHJldHVybiAxOwotICBpZihHRVQoMSkgIT0gMHg0MjQzNDQ0NSAmJiBHRVQoMSkgIT0gMHg0NTQ0NDM0MikgcmV0dXJuIDE7Ci0gIGlmKEdFVCgyKSAhPSAweDQzNDQ0NTQ2ICYmIEdFVCgyKSAhPSAweDQ2NDU0NDQzKSByZXR1cm4gMTsKLSAgaWYoR0VUKDMpICE9IDB4NDQ0NTQ2NDcgJiYgR0VUKDMpICE9IDB4NDc0NjQ1NDQpIHJldHVybiAxOwotICByZXR1cm4gMDsKLX0KLSAgICBdLCBhc19jdl91bmFsaWduZWRfYWNjZXNzPSJ5ZXMiLCBhc19jdl91bmFsaWduZWRfYWNjZXNzPSJubyIpCi0gIGZpCi0gIEFDX01TR19SRVNVTFQoJGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3MpCi0gIGlmIHRlc3QgIiRhc19jdl91bmFsaWduZWRfYWNjZXNzIiA9ICJ5ZXMiOyB0aGVuCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfVU5BTElHTkVEX0FDQ0VTUywgMSwKLSAgICAgIFtkZWZpbmVkIGlmIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIHdvcmtzIGNvcnJlY3RseV0pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1hcmdzLm00IGIvY29tbW9uL200L2dzdC1hcmdzLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjI4MTIzLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtYXJncy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDM4NiArMCwwIEBACi1kbmwgY29uZmlndXJlLXRpbWUgb3B0aW9ucyBzaGFyZWQgYW1vbmcgZ3N0cmVhbWVyIG1vZHVsZXMKLQotZG5sIEFHX0dTVF9BUkdfREVCVUcKLWRubCBBR19HU1RfQVJHX1BST0ZJTElORwotZG5sIEFHX0dTVF9BUkdfVkFMR1JJTkQKLWRubCBBR19HU1RfQVJHX0dDT1YKLQotZG5sIEFHX0dTVF9BUkdfRVhBTVBMRVMKLQotZG5sIEFHX0dTVF9BUkdfV0lUSF9QS0dfQ09ORklHX1BBVEgKLWRubCBBR19HU1RfQVJHX1dJVEhfUEFDS0FHRV9OQU1FCi1kbmwgQUdfR1NUX0FSR19XSVRIX1BBQ0tBR0VfT1JJR0lOCi0KLWRubCBBR19HU1RfQVJHX1dJVEhfUExVR0lOUwotZG5sIEFHX0dTVF9DSEVDS19QTFVHSU4KLWRubCBBR19HU1RfRElTQUJMRV9QTFVHSU4KLQotZG5sIEFHX0dTVF9BUkdfRU5BQkxFX0VYVEVSTkFMCi1kbmwgQUdfR1NUX0FSR19FTkFCTEVfRVhQRVJJTUVOVEFMCi1kbmwgQUdfR1NUX0FSR19FTkFCTEVfQlJPS0VOCi0KLWRubCBBR19HU1RfQVJHX0RJU0FCTEVfRkFUQUxfV0FSTklOR1MKLUFDX0RFRlVOKFtBR19HU1RfQVJHX0RFQlVHXSwKLVsKLSAgZG5sIGRlYnVnZ2luZyBzdHVmZgotICBBQ19BUkdfRU5BQkxFKGRlYnVnLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGVidWddLFtkaXNhYmxlIGFkZGl0aW9uIG9mIC1nIGRlYnVnZ2luZyBpbmZvXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9ERUJVRz15ZXMgOzsKLSAgICAgICAgbm8pICBVU0VfREVCVUc9bm8gOzsKLSAgICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZGVidWcpIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbVVNFX0RFQlVHPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0FSR19QUk9GSUxJTkddLAotWwotICBBQ19BUkdfRU5BQkxFKHByb2ZpbGluZywKLSAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHJvZmlsaW5nXSwKLSAgICAgIFthZGRzIC1wZyB0byBjb21waWxlciBjb21tYW5kbGluZSwgZm9yIHByb2ZpbGluZ10pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBVU0VfUFJPRklMSU5HPXllcyA7OwotICAgICAgICBubykgIFVTRV9QUk9GSUxJTkc9bm8gOzsKLSAgICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcHJvZmlsaW5nKSA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgW1VTRV9QUk9GSUxJTkc9bm9dKSBkbmwgRGVmYXVsdCB2YWx1ZQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9BUkdfVkFMR1JJTkRdLAotWwotICBkbmwgdmFsZ3JpbmQgaW5jbHVzaW9uCi0gIEFDX0FSR19FTkFCTEUodmFsZ3JpbmQsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS12YWxncmluZF0sW2Rpc2FibGUgcnVuLXRpbWUgdmFsZ3JpbmQgZGV0ZWN0aW9uXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9WQUxHUklORD0iJFVTRV9ERUJVRyIgOzsKLSAgICAgICAgbm8pICBVU0VfVkFMR1JJTkQ9bm8gOzsKLSAgICAgICAgKikgICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdmFsZ3JpbmQpIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIl0pIGRubCBEZWZhdWx0IHZhbHVlCi0gIFZBTEdSSU5EX1JFUT0iMy4wIgotICBpZiB0ZXN0ICJ4JFVTRV9WQUxHUklORCIgPSB4eWVzOyB0aGVuCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoVkFMR1JJTkQsIHZhbGdyaW5kID49ICRWQUxHUklORF9SRVEsCi0gICAgICBVU0VfVkFMR1JJTkQ9InllcyIsCi0gICAgICBVU0VfVkFMR1JJTkQ9Im5vIikKLSAgZmkKLSAgaWYgdGVzdCAieCRVU0VfVkFMR1JJTkQiID0geHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX1ZBTEdSSU5ELCAxLCBbRGVmaW5lIGlmIHZhbGdyaW5kIHNob3VsZCBiZSB1c2VkXSkKLSAgICBBQ19NU0dfTk9USUNFKFVzaW5nIGV4dHJhIGNvZGUgcGF0aHMgZm9yIHZhbGdyaW5kKQotICBmaQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9BUkdfR0NPVl0sCi1bCi0gIEFDX0FSR19FTkFCTEUoZ2NvdiwKLSAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2Nvdl0sCi0gICAgICBbY29tcGlsZSB3aXRoIGNvdmVyYWdlIHByb2ZpbGluZyBpbnN0cnVtZW50YXRpb24gKGdjYyBvbmx5KV0pLAotICAgIGVuYWJsZV9nY292PSRlbmFibGV2YWwsCi0gICAgZW5hYmxlX2djb3Y9bm8pCi0gIGlmIHRlc3QgeCRlbmFibGVfZ2NvdiA9IHh5ZXMgOyB0aGVuCi0gICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIgotICAgIHRoZW4KLSAgICAgIEFDX01TR19FUlJPUihbZ2NvdiBvbmx5IHdvcmtzIGlmIGdjYyBpcyB1c2VkXSkKLSAgICBmaQotCi0gICAgQVNfQ09NUElMRVJfRkxBRyhbIi1mcHJvZmlsZS1hcmNzIl0sCi0gICAgICBbR0NPVl9DRkxBR1M9IiRHQ09WX0NGTEFHUyAtZnByb2ZpbGUtYXJjcyJdLAotICAgICAgdHJ1ZSkKLSAgICBBU19DT01QSUxFUl9GTEFHKFsiLWZ0ZXN0LWNvdmVyYWdlIl0sCi0gICAgICBbR0NPVl9DRkxBR1M9IiRHQ09WX0NGTEFHUyAtZnRlc3QtY292ZXJhZ2UiXSwKLSAgICAgIHRydWUpCi0gICAgZG5sIHJlbW92ZSBhbnkgLU8gZmxhZ3MgLSBGSVhNRTogaXMgdGhpcyBuZWVkZWQgPwotICAgIEdDT1ZfQ0ZMQUdTPWBlY2hvICIkR0NPVl9DRkxBR1MiIHwgc2VkIC1lICdzLy1PW1swLTldXSovL2cnYAotICAgIGRubCBsaWJ0b29sIDEuNS4yMiBhbmQgbG93ZXIgc3RyaXAgLWZwcm9maWxlLWFyY3MgZnJvbSB0aGUgZmxhZ3MKLSAgICBkbmwgcGFzc2VkIHRvIHRoZSBsaW5rZXIsIHdoaWNoIGlzIGEgYnVnOyAtZnByb2ZpbGUtYXJjcyBpbXBsaWNpdGx5Ci0gICAgZG5sIGxpbmtzIGluIC1sZ2Nvdiwgc28gd2UgZG8gaXQgZXhwbGljaXRseSBoZXJlIGZvciB0aGUgc2FtZSBlZmZlY3QKLSAgICBHQ09WX0xJQlM9LWxnY292Ci0gICAgQUNfU1VCU1QoR0NPVl9DRkxBR1MpCi0gICAgQUNfU1VCU1QoR0NPVl9MSUJTKQotICAgIEdDT1Y9YGVjaG8gJENDIHwgc2VkIHMvZ2NjL2djb3YvZ2AKLSAgICBBQ19TVUJTVChHQ09WKQotCi0gICAgR1NUX0dDT1ZfRU5BQkxFRD15ZXMKLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0dDT1ZfRU5BQkxFRCwgMSwKLSAgICAgIFtEZWZpbmVkIGlmIGdjb3YgaXMgZW5hYmxlZCB0byBmb3JjZSBhIHJlYnVpbGQgZHVlIHRvIGNvbmZpZy5oIGNoYW5naW5nXSkKLSAgICBkbmwgaWYgZ2NvdiBpcyB1c2VkLCB3ZSBkbyBub3Qgd2FudCBkZWZhdWx0IC1PMiBDRkxBR1MKLSAgICBpZiB0ZXN0ICJ4JEdTVF9HQ09WX0VOQUJMRUQiID0gInh5ZXMiCi0gICAgdGhlbgotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1PMCIKLSAgICAgIEFDX1NVQlNUKENGTEFHUykKLSAgICAgIENYWEZMQUdTPSIkQ1hYRkxBR1MgLU8wIgotICAgICAgQUNfU1VCU1QoQ1hYRkxBR1MpCi0gICAgICBGRkxBR1M9IiRGRkxBR1MgLU8wIgotICAgICAgQUNfU1VCU1QoRkZMQUdTKQotICAgICAgQ0NBU0ZMQUdTPSIkQ0NBU0ZMQUdTIC1PMCIKLSAgICAgIEFDX1NVQlNUKENDQVNGTEFHUykKLSAgICAgIEFDX01TR19OT1RJQ0UoW2djb3YgZW5hYmxlZCwgc2V0dGluZyBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gJENGTEFHU10pCi0gICAgZmkKLSAgZmkKLSAgQU1fQ09ORElUSU9OQUwoR1NUX0dDT1ZfRU5BQkxFRCwgdGVzdCB4JGVuYWJsZV9nY292ID0geHllcykKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQVJHX0VYQU1QTEVTXSwKLVsKLSAgQUNfQVJHX0VOQUJMRShleGFtcGxlcywKLSAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWV4YW1wbGVzXSwgW2Rpc2FibGUgYnVpbGRpbmcgZXhhbXBsZXNdKSwKLSAgICAgIFsKLSAgICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICAgIHllcykgQlVJTERfRVhBTVBMRVM9eWVzIDs7Ci0gICAgICAgICAgbm8pICBCVUlMRF9FWEFNUExFUz1ubyA7OwotICAgICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1leGFtcGxlcykgOzsKLSAgICAgICAgZXNhYwotICAgICAgXSwKLSAgICAgIFtCVUlMRF9FWEFNUExFUz15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQotICBBTV9DT05ESVRJT05BTChCVUlMRF9FWEFNUExFUywgICAgICB0ZXN0ICJ4JEJVSUxEX0VYQU1QTEVTIiA9ICJ4eWVzIikKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQVJHX1dJVEhfUEtHX0NPTkZJR19QQVRIXSwKLVsKLSAgZG5sIHBvc3NpYmx5IG1vZGlmeSBwa2ctY29uZmlnIHBhdGgKLSAgQUNfQVJHX1dJVEgocGtnLWNvbmZpZy1wYXRoLAotICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXBrZy1jb25maWctcGF0aF0sCi0gICAgICAgICAgICAgICAgICAgIFtjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwa2ctY29uZmlnKDEpIGRpcnNdKSwKLSAgICAgWwotICAgICAgIGV4cG9ydCBQS0dfQ09ORklHX1BBVEg9JHt3aXRodmFsfQotICAgICAgIEFDX01TR19OT1RJQ0UoU2V0IFBLR19DT05GSUdfUEFUSCB0byAkUEtHX0NPTkZJR19QQVRIKQotICAgICBdKQotXSkKLQotCi1kbmwgVGhpcyBtYWNybyByZXF1aXJlcyB0aGF0IEdTVF9HSVQgb3IgR1NUX0NWUyBpcyBzZXQgdG8geWVzIG9yIG5vIChyZWxlYXNlKQotQUNfREVGVU4oW0FHX0dTVF9BUkdfV0lUSF9QQUNLQUdFX05BTUVdLAotWwotICBkbmwgcGFja2FnZSBuYW1lIGluIHBsdWdpbnMKLSAgQUNfQVJHX1dJVEgocGFja2FnZS1uYW1lLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFja2FnZS1uYW1lXSwKLSAgICAgIFtzcGVjaWZ5IHBhY2thZ2UgbmFtZSB0byB1c2UgaW4gcGx1Z2luc10pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1uYW1lKSA7OwotICAgICAgICBubykgIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2UtbmFtZSkgOzsKLSAgICAgICAgKikgICBHU1RfUEFDS0FHRV9OQU1FPSIke3dpdGh2YWx9IiA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgWwotICAgICAgUD0kMQotICAgICAgaWYgdGVzdCAieCRQIiA9ICJ4IgotICAgICAgdGhlbgotICAgICAgICBQPSRQQUNLQUdFX05BTUUKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngwIgotICAgICAgdGhlbgotICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBzb3VyY2UgcmVsZWFzZSIKLSAgICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiCi0gICAgICAgIHRoZW4KLSAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBnaXQiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBwcmVyZWxlYXNlIgotICAgICAgICBmaQotICAgICAgZmkKLSAgICBdCi0gICkKLSAgQUNfTVNHX05PVElDRShVc2luZyAkR1NUX1BBQ0tBR0VfTkFNRSBhcyBwYWNrYWdlIG5hbWUpCi0gIEFDX0RFRklORV9VTlFVT1RFRChHU1RfUEFDS0FHRV9OQU1FLCAiJEdTVF9QQUNLQUdFX05BTUUiLAotICAgICAgW3BhY2thZ2UgbmFtZSBpbiBwbHVnaW5zXSkKLSAgQUNfU1VCU1QoR1NUX1BBQ0tBR0VfTkFNRSkKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQVJHX1dJVEhfUEFDS0FHRV9PUklHSU5dLAotWwotICBkbmwgcGFja2FnZSBvcmlnaW4gVVJMCi0gIEFDX0FSR19XSVRIKHBhY2thZ2Utb3JpZ2luLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFja2FnZS1vcmlnaW5dLAotICAgICAgW3NwZWNpZnkgcGFja2FnZSBvcmlnaW4gVVJMIHRvIHVzZSBpbiBwbHVnaW5zXSksCi0gICAgWwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW9yaWdpbikgOzsKLSAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW9yaWdpbikgOzsKLSAgICAgICAgKikgICBHU1RfUEFDS0FHRV9PUklHSU49IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbR1NUX1BBQ0tBR0VfT1JJR0lOPSJbVW5rbm93biBwYWNrYWdlIG9yaWdpbl0iXSBkbmwgRGVmYXVsdCB2YWx1ZQotICApCi0gIEFDX01TR19OT1RJQ0UoVXNpbmcgJEdTVF9QQUNLQUdFX09SSUdJTiBhcyBwYWNrYWdlIG9yaWdpbikKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9QQUNLQUdFX09SSUdJTiwgIiRHU1RfUEFDS0FHRV9PUklHSU4iLAotICAgICAgW3BhY2thZ2Ugb3JpZ2luXSkKLSAgQUNfU1VCU1QoR1NUX1BBQ0tBR0VfT1JJR0lOKQotXSkKLQotZG5sIHNldHMgV0lUSF9QTFVHSU5TIHRvIHRoZSBsaXN0IG9mIHBsdWctaW5zIGdpdmVuIGFzIGFuIGFyZ3VtZW50Ci1kbmwgYWxzbyBjbGVhcnMgR1NUX1BMVUdJTlNfQUxMIGFuZCBHU1RfUExVR0lOU19TRUxFQ1RFRAotQUNfREVGVU4oW0FHX0dTVF9BUkdfV0lUSF9QTFVHSU5TXSwKLVsKLSAgQUNfQVJHX1dJVEgocGx1Z2lucywKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXBsdWdpbnNdLAotICAgICAgW2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlcGVuZGVuY3lsZXNzIHBsdWctaW5zIHRvIGNvbXBpbGVdKSwKLSAgICBbV0lUSF9QTFVHSU5TPSR3aXRodmFsXSwKLSAgICBbV0lUSF9QTFVHSU5TPV0pCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIiCi0gIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIiCi0gIEdTVF9QTFVHSU5TX05PTlBPUlRFRD0iIgotCi0gIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0FMTCkKLSAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfU0VMRUNURUQpCi0gIEFDX1NVQlNUKEdTVF9QTFVHSU5TX05PTlBPUlRFRCkKLV0pCi0KLWRubCBBR19HU1RfQ0hFQ0tfUExVR0lOKFBMVUdJTi1OQU1FKQotZG5sCi1kbmwgVGhpcyBtYWNybyBhZGRzIHRoZSBwbHVnLWluIDxQTFVHSU4tTkFNRT4gdG8gR1NUX1BMVUdJTlNfQUxMLiBUaGVuIGl0Ci1kbmwgY2hlY2tzIGlmIFdJVEhfUExVR0lOUyBpcyBlbXB0eSBvciB0aGUgcGx1Z2luIGlzIHByZXNlbnQgaW4gV0lUSF9QTFVHSU5TLAotZG5sIGFuZCBpZiBzbyBhZGRzIGl0IHRvIEdTVF9QTFVHSU5TX1NFTEVDVEVELiBUaGVuIGl0IGNoZWNrcyBpZiB0aGUgcGx1Z2luCi1kbmwgaXMgcHJlc2VudCBpbiBXSVRIT1VUX1BMVUdJTlMgKGllLiB3YXMgZGlzYWJsZWQgc3BlY2lmaWNhbGx5KSBhbmQgaWYgc28KLWRubCByZW1vdmVzIGl0IGZyb20gR1NUX1BMVUdJTlNfU0VMRUNURUQuCi1kbmwKLWRubCBUaGUgbWFjcm8gd2lsbCBjYWxsIEFNX0NPTkRJVElPTkFMKFVTRV9QTFVHSU5fPFBMVUdJTi1OQU1FPiwgLi4uKSB0byBhbGxvdwotZG5sIGNvbnRyb2wgb2Ygd2hhdCBpcyBidWlsdCBpbiBNYWtlZmlsZS5hbXMuCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX1BMVUdJTl0sCi1bCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBbJDFdIgotCi0gIGRlZmluZShbcG5hbWVfZGVmXSx0cmFuc2xpdChbJDFdLCAtYS16LCBfYS16KSkKLQotICBBQ19BUkdfRU5BQkxFKFskMV0sCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1bJDFdXSwgW2Rpc2FibGUgZGVwZW5kZW5jeS1sZXNzICQxIHBsdWdpbl0pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBbZ3N0X3VzZV9dcG5hbWVfZGVmPXllcyA7OwotICAgICAgICBubykgW2dzdF91c2VfXXBuYW1lX2RlZj1ubyA7OwotICAgICAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLSQxXSkgOzsKLSAgICAgICBlc2FjCi0gICAgXSwKLSAgICBbW2dzdF91c2VfXXBuYW1lX2RlZj15ZXNdKSBkbmwgRGVmYXVsdCB2YWx1ZQotCi0gIGlmIHRlc3QgeCRbZ3N0X3VzZV9dcG5hbWVfZGVmID0geG5vOyB0aGVuCi0gICAgQUNfTVNHX05PVElDRShkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiAkMSkKLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgWyQxXSIKLSAgZmkKLSAgdW5kZWZpbmUoW3BuYW1lX2RlZl0pCi0KLSAgZG5sIEZpcnN0IGNoZWNrIGluY2x1c2lvbgotICBpZiBbWyAteiAiJFdJVEhfUExVR0lOUyIgXV0gfHwgZWNobyAiIFskV0lUSF9QTFVHSU5TXSAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgWyQxXSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBbJDFdIgotICBmaQotICBkbmwgVGhlbiBjaGVjayBleGNsdXNpb24KLSAgaWYgZWNobyAiIFskV0lUSE9VVF9QTFVHSU5TXSAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgWyQxXSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIFskMV0gLyAvJ2AKLSAgZmkKLSAgZG5sIEZpbmFsbHkgY2hlY2sgaWYgdGhlIHBsdWdpbiBpcyBwb3J0ZWQgb3Igbm90Ci0gIGlmIGVjaG8gIiBbJEdTVF9QTFVHSU5TX05PTlBPUlRFRF0gIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFskMV0gIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBbJDFdIC8gLydgCi0gIGZpCi0gIEFNX0NPTkRJVElPTkFMKFtVU0VfUExVR0lOX110cmFuc2xpdChbJDFdLCBhLXosIEEtWiksIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBbJDFdICIgPiAvZGV2L251bGwpCi1dKQotCi1kbmwgQUdfR1NUX0RJU0FCTEVfUExVR0lOKFBMVUdJTi1OQU1FKQotZG5sCi1kbmwgVGhpcyBtYWNybyBkaXNhYmxlcyB0aGUgcGx1Zy1pbiA8UExVR0lOLU5BTUU+IGJ5IHJlbW92aW5nIGl0IGZyb20KLWRubCBHU1RfUExVR0lOU19TRUxFQ1RFRC4KLUFDX0RFRlVOKFtBR19HU1RfRElTQUJMRV9QTFVHSU5dLAotWwotICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gWyQxXSAvIC8nYAotICBBTV9DT05ESVRJT05BTChbVVNFX1BMVUdJTl9ddHJhbnNsaXQoWyQxXSwgYS16LCBBLVopLCBmYWxzZSkKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQVJHX0VOQUJMRV9FWFRFUk5BTF0sCi1bCi0gIEFHX0dTVF9DSEVDS19GRUFUVVJFKEVYVEVSTkFMLCBbYnVpbGRpbmcgb2YgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBzXSwsCi0gICAgSEFWRV9FWFRFUk5BTD15ZXMsIGVuYWJsZWQsCi0gICAgWwotICAgICAgQUNfTVNHX05PVElDRShidWlsZGluZyBleHRlcm5hbCBwbHVnLWlucykKLSAgICAgIEJVSUxEX0VYVEVSTkFMPSJ5ZXMiCi0gICAgXSxbCi0gICAgICBBQ19NU0dfV0FSTihhbGwgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgYmUgYnVpbHQpCi0gICAgICBCVUlMRF9FWFRFUk5BTD0ibm8iCi0gICAgXSkKLSAgIyBtYWtlIEJVSUxEX0VYVEVSTkFMIGF2YWlsYWJsZSB0byBNYWtlZmlsZS5hbQotICBBTV9DT05ESVRJT05BTChCVUlMRF9FWFRFUk5BTCwgdGVzdCAieCRCVUlMRF9FWFRFUk5BTCIgPSAieHllcyIpCi1dKQotCi1kbmwgZXhwZXJpbWVudGFsIHBsdWctaW5zOyBzdHVmZiB0aGF0IGhhc24ndCBoYWQgdGhlIGR1c3Qgc2V0dGxlIHlldAotZG5sIHJlYWQgJ2J1aWxkcywgYnV0IG1pZ2h0IG5vdCB3b3JrJwotQUNfREVGVU4oW0FHX0dTVF9BUkdfRU5BQkxFX0VYUEVSSU1FTlRBTF0sCi1bCi0gIEFHX0dTVF9DSEVDS19GRUFUVVJFKEVYUEVSSU1FTlRBTCwgW2J1aWxkaW5nIG9mIGV4cGVyaW1lbnRhbCBwbHVnLWluc10sLAotICAgIEhBVkVfRVhQRVJJTUVOVEFMPXllcywgZGlzYWJsZWQsCi0gICAgWwotICAgICAgQUNfTVNHX1dBUk4oYnVpbGRpbmcgZXhwZXJpbWVudGFsIHBsdWctaW5zKQotICAgICAgQlVJTERfRVhQRVJJTUVOVEFMPSJ5ZXMiCi0gICAgXSxbCi0gICAgICBBQ19NU0dfTk9USUNFKG5vdCBidWlsZGluZyBleHBlcmltZW50YWwgcGx1Zy1pbnMpCi0gICAgICBCVUlMRF9FWFBFUklNRU5UQUw9Im5vIgotICAgIF0pCi0gICMgbWFrZSBCVUlMRF9FWFBFUklNRU5UQUwgYXZhaWxhYmxlIHRvIE1ha2VmaWxlLmFtCi0gIEFNX0NPTkRJVElPTkFMKEJVSUxEX0VYUEVSSU1FTlRBTCwgdGVzdCAieCRCVUlMRF9FWFBFUklNRU5UQUwiID0gInh5ZXMiKQotXSkKLQotZG5sIGJyb2tlbiBwbHVnLWluczsgc3R1ZmYgdGhhdCBkb2Vzbid0IHNlZW0gdG8gYnVpbGQgYXQgdGhlIG1vbWVudAotQUNfREVGVU4oW0FHX0dTVF9BUkdfRU5BQkxFX0JST0tFTl0sCi1bCi0gIEFHX0dTVF9DSEVDS19GRUFUVVJFKEJST0tFTiwgW2J1aWxkaW5nIG9mIGJyb2tlbiBwbHVnLWluc10sLAotICAgIEhBVkVfQlJPS0VOPXllcywgZGlzYWJsZWQsCi0gICAgWwotICAgICAgQUNfTVNHX1dBUk4oW2J1aWxkaW5nIGJyb2tlbiBwbHVnLWlucyAtLSBubyBidWcgcmVwb3J0cyBvbiB0aGVzZSwgb25seSBwYXRjaGVzIC4uLl0pCi0gICAgXSxbCi0gICAgICBBQ19NU0dfTk9USUNFKFtub3QgYnVpbGRpbmcgYnJva2VuIHBsdWctaW5zXSkKLSAgICBdKQotXSkKLQotZG5sIGFsbG93IHBlb3BsZSAob3IgYnVpbGQgdG9vbHMpIHRvIG92ZXJyaWRlIGRlZmF1bHQgYmVoYXZpb3VyCi1kbmwgZm9yIGZhdGFsIGNvbXBpbGVyIHdhcm5pbmdzCi1kbmwgRW5hYmxlIGZhdGFsIHdhcm5pbmdzIGJ5IGRlZmF1bHQgb25seSBmb3IgZGV2ZWxvcG1lbnQgdmVyc2lvbnMKLUFDX0RFRlVOKFtBR19HU1RfQVJHX0RJU0FCTEVfRkFUQUxfV0FSTklOR1NdLAotWwotICBBQ19BUkdfRU5BQkxFKGZhdGFsLXdhcm5pbmdzLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZmF0YWwtd2FybmluZ3NdLAotICAgICAgICAgICAgICAgICAgIFtEb24ndCB0dXJuIGNvbXBpbGVyIHdhcm5pbmdzIGludG8gZmF0YWwgZXJyb3JzXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEZBVEFMX1dBUk5JTkdTPXllcyA7OwotICAgICAgICBubykgIEZBVEFMX1dBUk5JTkdTPW5vIDs7Ci0gICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1mYXRhbC13YXJuaW5ncykgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFsKLSAgICAgIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgICAgIEZBVEFMX1dBUk5JTkdTPXllcwotICAgICAgZWxzZQotICAgICAgICBGQVRBTF9XQVJOSU5HUz1ubwotICAgICAgZmkKLSAgICBdKQotXSkKLQotZG5sIEVuYWJsZSBleHRyYSBjaGVja3MgYnkgZGVmYXVsdCBvbmx5IGZvciBkZXZlbG9wbWVudCB2ZXJzaW9ucwotQUNfREVGVU4oW0FHX0dTVF9BUkdfRU5BQkxFX0VYVFJBX0NIRUNLU10sCi1bCi0gIEFDX0FSR19FTkFCTEUoZXh0cmEtY2hlY2ssCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWV4dHJhLWNoZWNrc10sCi0gICAgICAgICAgICAgICAgICAgW0VuYWJsZSBleHRyYSBydW50aW1lIGNoZWNrc10pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBFWFRSQV9DSEVDS1M9eWVzIDs7Ci0gICAgICAgIG5vKSAgRVhUUkFfQ0hFQ0tTPW5vIDs7Ci0gICAgICAgICopICAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWV4dHJhLWNoZWNrcykgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFsKLSAgICAgIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgICAgIEVYVFJBX0NIRUNLUz15ZXMKLSAgICAgIGVsc2UKLSAgICAgICAgRVhUUkFfQ0hFQ0tTPW5vCi0gICAgICBmaQotICAgIF0pCi0KLSAgICBpZiB0ZXN0ICJ4JEVYVFJBX0NIRUNLUyIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgQUNfREVGSU5FKEdTVF9FTkFCTEVfRVhUUkFfQ0hFQ0tTLCAxLCBbRGVmaW5lIGlmIGV4dHJhIHJ1bnRpbWUgY2hlY2tzIHNob3VsZCBiZSBlbmFibGVkXSkKLSAgICBmaQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgYi9jb21tb24vbTQvZ3N0LWNoZWNrLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjc3MDUzLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtY2hlY2subTQKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotZG5sIHBrZy1jb25maWctYmFzZWQgY2hlY2tzIGZvciBHU3RyZWFtZXIgbW9kdWxlcyBhbmQgZGVwZW5kZW5jeSBtb2R1bGVzCi0KLWRubCBnZW5lcmljOgotZG5sIEFHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFUyhbUFJFRklYXSwgW1dISUNIXSwgW1JFUVVJUkVEXSkKLWRubCBzZXRzIEhBVkVfWyRQUkVGSVhdLCBbJFBSRUZJWF1fKgotZG5sIEFHX0dTVF9DSEVDS19NT0RVTEVTKFtQUkVGSVhdLCBbTU9EVUxFXSwgW01JTlZFUl0sIFtOQU1FXSwgW1JFUVVJUkVEXSkKLWRubCBzZXRzIEhBVkVfWyRQUkVGSVhdLCBbJFBSRUZJWF1fKgotCi1kbmwgc3BlY2lmaWM6Ci1kbmwgQUdfR1NUX0NIRUNLX0dTVChbTUFKTUlOXSwgW01JTlZFUl0sIFtSRVFVSVJFRF0pCi1kbmwgICBhbHNvIHNldHMvQUNTVUJTVHMgR1NUX1RPT0xTX0RJUiBhbmQgR1NUX1BMVUdJTlNfRElSCi1kbmwgQUdfR1NUX0NIRUNLX0dTVF9CQVNFKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKLWRubCBBR19HU1RfQ0hFQ0tfR1NUX0NPTlRST0xMRVIoW01BSk1JTl0sIFtNSU5WRVJdLCBbUkVRVUlSRURdKQotZG5sIEFHX0dTVF9DSEVDS19HU1RfTkVUKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKLWRubCBBR19HU1RfQ0hFQ0tfR1NUX0NIRUNLKFtNQUpNSU5dLCBbTUlOVkVSXSwgW1JFUVVJUkVEXSkKLWRubCBBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfQkFTRShbTUFKTUlOXSwgW01JTlZFUl0sIFtSRVFVSVJFRF0pCi1kbmwgICBhbHNvIHNldHMvQUNTVUJTVHMgR1NUUEJfUExVR0lOU19ESVIKLQotQUNfREVGVU4oW0FHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFU10sCi1bCi0gIHdoaWNoPSJbJDJdIgotICBkbmwgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHNpbmNlIHdlIHVzZSB0aGlzIG1vc3RseSBmb3IgcGx1Z2luIGRlcHMKLSAgcmVxdWlyZWQ9aWZlbHNlKFskM10sICwgIm5vIiwgWyQzXSkKLQotICBQS0dfQ0hFQ0tfTU9EVUxFUyhbJDFdLCAkd2hpY2gsCi0gICAgWwotICAgICAgSEFWRV9bJDFdPSJ5ZXMiCi0gICAgXSwKLSAgICBbCi0gICAgICBIQVZFX1skMV09Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKCRbJDFdX1BLR19FUlJPUlMpCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19OT1RJQ0UoJFskMV1fUEtHX0VSUk9SUykKLSAgICAgIGZpCi0gICAgXSkKLQotICBkbmwgQUNfU1VCU1Qgb2YgQ0ZMQUdTIGFuZCBMSUJTIHdhcyBub3QgZG9uZSBiZWZvcmUgYXV0b21ha2UgMS43Ci0gIGRubCBJdCBnZXRzIGRvbmUgYXV0b21hdGljYWxseSBpbiBhdXRvbWFrZSA+PSAxLjcsIHdoaWNoIHdlIG5vdyByZXF1aXJlCi1dKSkKLQotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19NT0RVTEVTXSwKLVsKLSAgbW9kdWxlPVskMl0KLSAgbWludmVyPVskM10KLSAgbmFtZT0iWyQ0XSIKLSAgcmVxdWlyZWQ9aWZlbHNlKFskNV0sICwgInllcyIsIFskNV0pIGRubCByZXF1aXJlZCBieSBkZWZhdWx0Ci0KLSAgUEtHX0NIRUNLX01PRFVMRVMoWyQxXSwgJG1vZHVsZSA+PSAkbWludmVyLAotICAgIFsKLSAgICAgIEhBVkVfWyQxXT0ieWVzIgotICAgIF0sCi0gICAgWwotICAgICAgSEFWRV9bJDFdPSJubyIKLSAgICAgIEFDX01TR19OT1RJQ0UoJFskMV1fUEtHX0VSUk9SUykKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIEFDX01TR19FUlJPUihbbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmRdKQotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfTk9USUNFKFtubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZF0pCi0gICAgICBmaQotICAgIF0pCi0KLSAgZG5sIEFDX1NVQlNUIG9mIENGTEFHUyBhbmQgTElCUyB3YXMgbm90IGRvbmUgYmVmb3JlIGF1dG9tYWtlIDEuNwotICBkbmwgSXQgZ2V0cyBkb25lIGF1dG9tYXRpY2FsbHkgaW4gYXV0b21ha2UgPj0gMS43LCB3aGljaCB3ZSBub3cgcmVxdWlyZQotXSkpCi0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NULCBnc3RyZWFtZXItWyQxXSwgWyQyXSwgW0dTdHJlYW1lcl0sIFskM10pCi0gIGRubCBhbGxvdyBzZXR0aW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUKLSAgaWYgdGVzdCAteiAkR1NUX1RPT0xTX0RJUjsgdGhlbgotICAgIEdTVF9UT09MU19ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dG9vbHNkaXIgZ3N0cmVhbWVyLVskMV1gCi0gICAgaWYgdGVzdCAteiAkR1NUX1RPT0xTX0RJUjsgdGhlbgotICAgICAgQUNfTVNHX0VSUk9SKAotICAgICAgICBbbm8gdG9vbHMgZGlyIHNldCBpbiBHU3RyZWFtZXIgcGtnLWNvbmZpZyBmaWxlLCBjb3JlIHVwZ3JhZGUgbmVlZGVkLl0pCi0gICAgZmkKLSAgZmkKLSAgQUNfTVNHX05PVElDRShbdXNpbmcgR1N0cmVhbWVyIHRvb2xzIGluICRHU1RfVE9PTFNfRElSXSkKLSAgQUNfU1VCU1QoR1NUX1RPT0xTX0RJUikKLQotICBkbmwgY2hlY2sgZm9yIHdoZXJlIGNvcmUgcGx1Zy1pbnMgZ290IGluc3RhbGxlZAotICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCi0gIGRubCBhbGxvdyBzZXR0aW5nIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWFjcm8gdG8gb3ZlcnJpZGUKLSAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfRElSOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLVskMV1gCi0gICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfRElSOyB0aGVuCi0gICAgICBBQ19NU0dfRVJST1IoCi0gICAgICAgIFtubyBwbHVnaW5zZGlyIHNldCBpbiBHU3RyZWFtZXIgcGtnLWNvbmZpZyBmaWxlLCBjb3JlIHVwZ3JhZGUgbmVlZGVkLl0pCi0gICAgZmkKLSAgZmkKLSAgQUNfTVNHX05PVElDRShbdXNpbmcgR1N0cmVhbWVyIHBsdWctaW5zIGluICRHU1RfUExVR0lOU19ESVJdKQotICBBQ19TVUJTVChHU1RfUExVR0lOU19ESVIpCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9CQVNFXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX0JBU0UsIGdzdHJlYW1lci1iYXNlLVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBCYXNlIExpYnJhcmllc10sIFskM10pCi1dKQotCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9DT05UUk9MTEVSXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX0NPTlRST0xMRVIsIGdzdHJlYW1lci1jb250cm9sbGVyLVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBDb250cm9sbGVyIExpYnJhcnldLCBbJDNdKQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19HU1RfTkVUXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX05FVCwgZ3N0cmVhbWVyLW5ldC1bJDFdLCBbJDJdLAotICAgIFtHU3RyZWFtZXIgTmV0d29yayBMaWJyYXJ5XSwgWyQzXSkKLV0pCi0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX0NIRUNLXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX0NIRUNLLCBnc3RyZWFtZXItY2hlY2stWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIENoZWNrIHVuaXR0ZXN0IExpYnJhcnldLCBbJDNdKQotXSkKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEFHX0dTVF9DSEVDS19VTklOU1RBTExFRF9TRVRVUChbQUNUSU9OLUlGLVVOSU5TVEFMTEVEXSwgW0FDVElPTi1JRi1OT1RdKQotZG5sCi1kbmwgQUNUSU9OLUlGLVVOSU5TVEFMTEVEICAob3B0aW9uYWwpIGV4dHJhIGFjdGlvbnMgdG8gcGVyZm9ybSBpZiB0aGUgc2V0dXAKLWRubCAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIHVuaW5zdGFsbGVkIHNldHVwCi1kbmwgQUNUSU9OLUlGLU5PVCAgICAgICAgICAob3B0aW9uYWwpIGV4dHJhIGFjdGlvbnMgdG8gcGVyZm9ybSBpZiB0aGUgc2V0dXAKLWRubCAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhbiB1bmluc3RhbGxlZCBzZXR1cAotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19VTklOU1RBTExFRF9TRVRVUF0sCi1bCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGlzIGlzIGFuIHVuaW5zdGFsbGVkIEdTdHJlYW1lciBzZXR1cF0pCi0gIEFDX0NBQ0hFX1ZBTChnc3RfY3ZfaXNfdW5pbnN0YWxsZWRfc2V0dXAsWwotICAgIGdzdF9jdl9pc191bmluc3RhbGxlZF9zZXR1cD1ubwotICAgIGlmIChzZXQgLXU7IDogJEdTVF9QTFVHSU5fU1lTVEVNX1BBVEgpIDI+L2Rldi9udWxsIDsgdGhlbgotICAgICAgaWYgdGVzdCAteiAiJEdTVF9QTFVHSU5fU1lTVEVNX1BBVEgiIFwKLSAgICAgICAgICAgLWEgLW4gIiRHU1RfUExVR0lOX1NDQU5ORVIiICAgICBcCi0gICAgICAgICAgIC1hIC1uICIkR1NUX1BMVUdJTl9QQVRIIiAgICAgICAgXAotICAgICAgICAgICAtYSAtbiAiJEdTVF9SRUdJU1RSWSIgICAgICAgICAgIFwKLSAgICAgICAgICAgLWEgLW4gIiREWUxEX0xJQlJBUllfUEFUSCIgICAgICBcCi0gICAgICAgICAgIC1hIC1uICIkTERfTElCUkFSWV9QQVRIIjsgdGhlbgotICAgICAgICBnc3RfY3ZfaXNfdW5pbnN0YWxsZWRfc2V0dXA9eWVzOwotICAgICAgZmkKLSAgICBmaQotICBdKQotICBBQ19NU0dfUkVTVUxUKCRnc3RfY3ZfaXNfdW5pbnN0YWxsZWRfc2V0dXApCi0gIGlmIHRlc3QgIngkZ3N0X2N2X2lzX3VuaW5zdGFsbGVkX3NldHVwIiA9ICJ4eWVzIjsgdGhlbgotICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pCi0gIGVsc2UKLSAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICBmaQotXSkKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQVNFKFtHU1QtQVBJX1ZFUlNJT05dLCBbTUlOLVZFUlNJT05dLCBbUkVRVUlSRURdKQotZG5sCi1kbmwgU2V0cyBHU1RfUExVR0lOU19CQVNFX0NGTEFHUyBhbmQgR1NUX1BMVUdJTlNfQkFTRV9MSUJTLgotZG5sCi1kbmwgQWxzbyBzZXRzIEdTVFBCX1BMVUdJTlNfRElSIChhbmQgZm9yIGNvbnNpc3RlbmN5IGFsc28gR1NUX1BMVUdJTlNfQkFTRV9ESVIpCi1kbmwgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbS4gVGhpcyBpcyBvbmx5IHJlYWxseSBuZWVkZWQvdXNlZnVsIGluIHVuaW5zdGFsbGVkCi1kbmwgc2V0dXBzLCBzaW5jZSBpbiBhbiBpbnN0YWxsZWQgc2V0dXAgYWxsIHBsdWdpbnMgd2lsbCBiZSBmb3VuZCBpbgotZG5sIEdTVF9QTFVHSU5TX0RJUiBhbnl3YXkuCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0JBU0VdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfUExVR0lOU19CQVNFLCBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBCYXNlIFBsdWdpbnNdLCBbJDNdKQotCi0gIGlmIHRlc3QgIngkSEFWRV9HU1RfUExVR0lOU19CQVNFIiA9ICJ4eWVzIjsgdGhlbgotICAgIGRubCBjaGVjayBmb3Igd2hlcmUgYmFzZSBwbHVnaW5zIGdvdCBpbnN0YWxsZWQKLSAgICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCi0gICAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQotICAgIGlmIHRlc3QgLXogJEdTVFBCX1BMVUdJTlNfRElSOyB0aGVuCi0gICAgICBHU1RQQl9QTFVHSU5TX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wbHVnaW5zZGlyIGdzdHJlYW1lci1wbHVnaW5zLWJhc2UtWyQxXWAKLSAgICAgIGlmIHRlc3QgLXogJEdTVFBCX1BMVUdJTlNfRElSOyB0aGVuCi0gICAgICAgIEFDX01TR19FUlJPUigKLSAgICAgICAgICBbbm8gcGx1Z2luc2RpciBzZXQgaW4gR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBwa2ctY29uZmlnIGZpbGVdKQotICAgICAgZmkKLSAgICBmaQotICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIEdTdHJlYW1lciBCYXNlIFBsdWdpbnMgaW4gJEdTVFBCX1BMVUdJTlNfRElSXSkKLSAgICBHU1RfUExVR0lOU19CQVNFX0RJUj0iJEdTVFBCX1BMVUdJTlNfRElSL2dzdDokR1NUUEJfUExVR0lOU19ESVIvc3lzOiRHU1RQQl9QTFVHSU5TX0RJUi9leHQiCi0gICAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfQkFTRV9ESVIpCi0gICAgQUNfU1VCU1QoR1NUUEJfUExVR0lOU19ESVIpCi0gIGZpCi1dKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0dPT0QoW0dTVC1BUElfVkVSU0lPTl0sIFtNSU4tVkVSU0lPTl0pCi1kbmwKLWRubCBXaWxsIHNldCBHU1RfUExVR0lOU19HT09EX0RJUiBmb3IgdXNlIGluIE1ha2VmaWxlLmFtLiBOb3RlIHRoYXQgdGhpcyB3aWxsCi1kbmwgb25seSBiZSBzZXQgaW4gYW4gdW5pbnN0YWxsZWQgc2V0dXAsIHNpbmNlIC1nb29kIHNoaXBzIG5vIC5wYyBmaWxlIGFuZCBpbgotZG5sIGFuIGluc3RhbGxlZCBzZXR1cCBhbGwgcGx1Z2lucyB3aWxsIGJlIGZvdW5kIGluIEdTVF9QTFVHSU5TX0RJUiBhbnl3YXkuCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0dPT0RdLAotWwotICBBR19HU1RfQ0hFQ0tfTU9EVUxFUyhHU1RfUExVR0lOU19HT09ELCBnc3RyZWFtZXItcGx1Z2lucy1nb29kLVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBHb29kIFBsdWdpbnNdLCBbbm9dKQotCi0gIGlmIHRlc3QgIngkSEFWRV9HU1RfUExVR0lOU19HT09EIiA9ICJ4eWVzIjsgdGhlbgotICAgIGRubCBjaGVjayBmb3Igd2hlcmUgZ29vZCBwbHVnaW5zIGdvdCBpbnN0YWxsZWQKLSAgICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCi0gICAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQotICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0dPT0RfRElSOyB0aGVuCi0gICAgICBHU1RfUExVR0lOU19HT09EX0RJUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1wbHVnaW5zZGlyIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QtWyQxXWAKLSAgICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0dPT0RfRElSOyB0aGVuCi0gICAgICAgIEFDX01TR19FUlJPUihbbm8gcGx1Z2luc2RpciBzZXQgaW4gR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyBwa2ctY29uZmlnIGZpbGVdKQotICAgICAgZmkKLSAgICBmaQotICAgIEFDX01TR19OT1RJQ0UoW3VzaW5nIEdTdHJlYW1lciBHb29kIFBsdWdpbnMgaW4gJEdTVF9QTFVHSU5TX0dPT0RfRElSXSkKLSAgICBHU1RfUExVR0lOU19HT09EX0RJUj0iJEdTVF9QTFVHSU5TX0dPT0RfRElSL2dzdDokR1NUX1BMVUdJTlNfR09PRF9ESVIvc3lzOiRHU1RfUExVR0lOU19HT09EX0RJUi9leHQiCi0gICAgQUNfU1VCU1QoR1NUX1BMVUdJTlNfR09PRF9ESVIpCi0gIGZpCi1dKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX1VHTFkoW0dTVC1BUElfVkVSU0lPTl0sIFtNSU4tVkVSU0lPTl0pCi1kbmwKLWRubCBXaWxsIHNldCBHU1RfUExVR0lOU19VR0xZX0RJUiBmb3IgdXNlIGluIE1ha2VmaWxlLmFtLiBOb3RlIHRoYXQgdGhpcyB3aWxsCi1kbmwgb25seSBiZSBzZXQgaW4gYW4gdW5pbnN0YWxsZWQgc2V0dXAsIHNpbmNlIC1iYWQgc2hpcHMgbm8gLnBjIGZpbGUgYW5kIGluCi1kbmwgYW4gaW5zdGFsbGVkIHNldHVwIGFsbCBwbHVnaW5zIHdpbGwgYmUgZm91bmQgaW4gR1NUX1BMVUdJTlNfRElSIGFueXdheS4KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfVUdMWV0sCi1bCi0gIEFHX0dTVF9DSEVDS19NT0RVTEVTKEdTVF9QTFVHSU5TX1VHTFksIGdzdHJlYW1lci1wbHVnaW5zLXVnbHktWyQxXSwgWyQyXSwKLSAgICBbR1N0cmVhbWVyIFVnbHkgUGx1Z2luc10sIFtub10pCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dTVF9QTFVHSU5TX1VHTFkiID0gInh5ZXMiOyB0aGVuCi0gICAgZG5sIGNoZWNrIGZvciB3aGVyZSB1Z2x5IHBsdWdpbnMgZ290IGluc3RhbGxlZAotICAgIGRubCB0aGlzIGlzIHVzZWQgZm9yIHVuaXQgdGVzdHMKLSAgICBkbmwgYWxsb3cgc2V0dGluZyBiZWZvcmUgY2FsbGluZyB0aGlzIG1hY3JvIHRvIG92ZXJyaWRlCi0gICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfVUdMWV9ESVI7IHRoZW4KLSAgICAgIEdTVF9QTFVHSU5TX1VHTFlfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLXBsdWdpbnMtdWdseS1bJDFdYAotICAgICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfVUdMWV9ESVI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKFtubyBwbHVnaW5zZGlyIHNldCBpbiBHU3RyZWFtZXIgVWdseSBQbHVnaW5zIHBrZy1jb25maWcgZmlsZV0pCi0gICAgICBmaQotICAgIGZpCi0gICAgQUNfTVNHX05PVElDRShbdXNpbmcgR1N0cmVhbWVyIFVnbHkgUGx1Z2lucyBpbiAkR1NUX1BMVUdJTlNfVUdMWV9ESVJdKQotICAgIEdTVF9QTFVHSU5TX1VHTFlfRElSPSIkR1NUX1BMVUdJTlNfVUdMWV9ESVIvZ3N0OiRHU1RfUExVR0lOU19VR0xZX0RJUi9zeXM6JEdTVF9QTFVHSU5TX1VHTFlfRElSL2V4dCIKLSAgICBBQ19TVUJTVChHU1RfUExVR0lOU19VR0xZX0RJUikKLSAgZmkKLV0pCi0KLWRubCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRubCBBR19HU1RfQ0hFQ0tfR1NUX1BMVUdJTlNfQkFEKFtHU1QtQVBJX1ZFUlNJT05dLCBbTUlOLVZFUlNJT05dKQotZG5sCi1kbmwgV2lsbCBzZXQgR1NUX1BMVUdJTlNfQkFEX0RJUiBmb3IgdXNlIGluIE1ha2VmaWxlLmFtLiBOb3RlIHRoYXQgdGhpcyB3aWxsCi1kbmwgb25seSBiZSBzZXQgaW4gYW4gdW5pbnN0YWxsZWQgc2V0dXAsIHNpbmNlIC11Z2x5IHNoaXBzIG5vIC5wYyBmaWxlIGFuZCBpbgotZG5sIGFuIGluc3RhbGxlZCBzZXR1cCBhbGwgcGx1Z2lucyB3aWxsIGJlIGZvdW5kIGluIEdTVF9QTFVHSU5TX0RJUiBhbnl3YXkuCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0JBRF0sCi1bCi0gIEFHX0dTVF9DSEVDS19NT0RVTEVTKEdTVF9QTFVHSU5TX0JBRCwgZ3N0cmVhbWVyLXBsdWdpbnMtYmFkLVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBCYWQgUGx1Z2luc10sIFtub10pCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dTVF9QTFVHSU5TX0JBRCIgPSAieHllcyI7IHRoZW4KLSAgICBkbmwgY2hlY2sgZm9yIHdoZXJlIGJhZCBwbHVnaW5zIGdvdCBpbnN0YWxsZWQKLSAgICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCi0gICAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQotICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0JBRF9ESVI7IHRoZW4KLSAgICAgIEdTVF9QTFVHSU5TX0JBRF9ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cGx1Z2luc2RpciBnc3RyZWFtZXItcGx1Z2lucy1iYWQtWyQxXWAKLSAgICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0JBRF9ESVI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKFtubyBwbHVnaW5zZGlyIHNldCBpbiBHU3RyZWFtZXIgQmFkIFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlXSkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgQmFkIFBsdWdpbnMgaW4gJEdTVF9QTFVHSU5TX0JBRF9ESVJdKQotICAgIEdTVF9QTFVHSU5TX0JBRF9ESVI9IiRHU1RfUExVR0lOU19CQURfRElSL2dzdDokR1NUX1BMVUdJTlNfQkFEX0RJUi9zeXM6JEdTVF9QTFVHSU5TX0JBRF9ESVIvZXh0IgotICAgIEFDX1NVQlNUKEdTVF9QTFVHSU5TX0JBRF9ESVIpCi0gIGZpCi1dKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1kbmwgQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0xJQkFWKFtHU1QtQVBJX1ZFUlNJT05dLCBbTUlOLVZFUlNJT05dKQotZG5sCi1kbmwgV2lsbCBzZXQgR1NUX1BMVUdJTlNfTElCQVZfRElSIGZvciB1c2UgaW4gTWFrZWZpbGUuYW0uIE5vdGUgdGhhdCB0aGlzIHdpbGwKLWRubCBvbmx5IGJlIHNldCBpbiBhbiB1bmluc3RhbGxlZCBzZXR1cCwgc2luY2UgLWxpYmF2IHNoaXBzIG5vIC5wYyBmaWxlIGFuZCBpbgotZG5sIGFuIGluc3RhbGxlZCBzZXR1cCBhbGwgcGx1Z2lucyB3aWxsIGJlIGZvdW5kIGluIEdTVF9QTFVHSU5TX0RJUiBhbnl3YXkuCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9QTFVHSU5TX0xJQkFWXSwKLVsKLSAgQUdfR1NUX0NIRUNLX01PRFVMRVMoR1NUX1BMVUdJTlNfTElCQVYsIGdzdHJlYW1lci1wbHVnaW5zLWxpYmF2LVskMV0sIFskMl0sCi0gICAgW0dTdHJlYW1lciBMaWJhdiBQbHVnaW5zXSwgW25vXSkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfR1NUX1BMVUdJTlNfTElCQVYiID0gInh5ZXMiOyB0aGVuCi0gICAgZG5sIGNoZWNrIGZvciB3aGVyZSBsaWJhdiBwbHVnaW5zIGdvdCBpbnN0YWxsZWQKLSAgICBkbmwgdGhpcyBpcyB1c2VkIGZvciB1bml0IHRlc3RzCi0gICAgZG5sIGFsbG93IHNldHRpbmcgYmVmb3JlIGNhbGxpbmcgdGhpcyBtYWNybyB0byBvdmVycmlkZQotICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0xJQkFWX0RJUjsgdGhlbgotICAgICAgR1NUX1BMVUdJTlNfTElCQVZfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLXBsdWdpbnMtbGliYXYtWyQxXWAKLSAgICAgIGlmIHRlc3QgLXogJEdTVF9QTFVHSU5TX0xJQkFWX0RJUjsgdGhlbgotICAgICAgICBBQ19NU0dfRVJST1IoW25vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBMaWJhdiBQbHVnaW5zIHBrZy1jb25maWcgZmlsZV0pCi0gICAgICBmaQotICAgIGZpCi0gICAgR1NUX1BMVUdJTlNfTElCQVZfRElSPSIkR1NUX1BMVUdJTlNfTElCQVZfRElSL2V4dC9saWJhdiIKLSAgICBBQ19NU0dfTk9USUNFKFt1c2luZyBHU3RyZWFtZXIgTGliYXYgUGx1Z2lucyBpbiAkR1NUX1BMVUdJTlNfTElCQVZfRElSXSkKLSAgICBBQ19TVUJTVChHU1RfUExVR0lOU19MSUJBVl9ESVIpCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1kZWJ1Z2luZm8ubTQgYi9jb21tb24vbTQvZ3N0LWRlYnVnaW5mby5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ4ODU0ZC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWRlYnVnaW5mby5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLUFDX0RFRlVOKFtBR19HU1RfREVCVUdJTkZPXSwgWwotQUNfQVJHX0VOQUJMRShkZWJ1ZywKLUFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGVidWddLFtkaXNhYmxlIGFkZGl0aW9uIG9mIC1nIGRlYnVnZ2luZyBpbmZvXSksCi1bY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICB5ZXMpIFVTRV9ERUJVRz15ZXMgOzsKLSAgbm8pICBVU0VfREVCVUc9bm8gOzsKLSAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRlYnVnKSA7OwotZXNhY10sCi1bVVNFX0RFQlVHPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi0KLUFDX0FSR19FTkFCTEUoREVCVUcsCi1BQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLURFQlVHXSxbZGlzYWJsZXMgY29tcGlsYXRpb24gb2YgZGVidWdnaW5nIG1lc3NhZ2VzXSksCi1bY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICB5ZXMpIEVOQUJMRV9ERUJVRz15ZXMgOzsKLSAgbm8pICBFTkFCTEVfREVCVUc9bm8gOzsKLSAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLURFQlVHKSA7OwotZXNhY10sCi1bRU5BQkxFX0RFQlVHPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi1pZiB0ZXN0IHgkRU5BQkxFX0RFQlVHID0geHllczsgdGhlbgotICBBQ19ERUZJTkUoR1NUX0RFQlVHX0VOQUJMRUQsIDEsIFtEZWZpbmUgaWYgREVCVUcgc3RhdGVtZW50cyBzaG91bGQgYmUgY29tcGlsZWQgaW5dKQotZmkKLQotQUNfQVJHX0VOQUJMRShJTkZPLAotQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1JTkZPXSxbZGlzYWJsZXMgY29tcGlsYXRpb24gb2YgaW5mb3JtYXRpb25hbCBtZXNzYWdlc10pLAotW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgeWVzKSBFTkFCTEVfSU5GTz15ZXMgOzsKLSAgbm8pICBFTkFCTEVfSU5GTz1ubyA7OwotICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtSU5GTykgOzsKLWVzYWNdLAotW0VOQUJMRV9JTkZPPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi1pZiB0ZXN0IHgkRU5BQkxFX0lORk8gPSB4eWVzOyB0aGVuCi0gIEFDX0RFRklORShHU1RfSU5GT19FTkFCTEVELCAxLCBbRGVmaW5lIGlmIElORk8gc3RhdGVtZW50cyBzaG91bGQgYmUgY29tcGlsZWQgaW5dKQotZmkKLQotQUNfQVJHX0VOQUJMRShkZWJ1Zy1jb2xvciwKLUFDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZGVidWctY29sb3JdLFtkaXNhYmxlcyBjb2xvciBvdXRwdXQgb2YgREVCVUcgYW5kIElORk8gb3V0cHV0XSksCi1bY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICB5ZXMpIEVOQUJMRV9ERUJVR19DT0xPUj15ZXMgOzsKLSAgbm8pICBFTkFCTEVfREVCVUdfQ09MT1I9bm8gOzsKLSAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRlYnVnLWNvbG9yKSA7OwotZXNhY10sCi1bRU5BQkxFX0RFQlVHX0NPTE9SPXllc10pIGRubCBEZWZhdWx0IHZhbHVlCi1pZiB0ZXN0ICJ4JEVOQUJMRV9ERUJVR19DT0xPUiIgPSB4eWVzOyB0aGVuCi0gIEFDX0RFRklORShHU1RfREVCVUdfQ09MT1IsIDEsIFtEZWZpbmUgaWYgZGVidWdnaW5nIG1lc3NhZ2VzIHNob3VsZCBiZSBjb2xvcml6ZWRdKQotZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgYi9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZTk3NTYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLWRubCBkZWZhdWx0IGVsZW1lbnRzIHVzZWQgZm9yIHRlc3RzIGFuZCBzdWNoCi0KLWRubCBBR19HU1RfREVGQVVMVF9FTEVNRU5UUwotCi1BQ19ERUZVTihbQUdfR1NUX0RFRkFVTFRfRUxFTUVOVFNdLAotWwotICBkbmwgZGVjaWRlIG9uIGRlZmF1bHQgZWxlbWVudHMKLSAgZG5sIEZJWE1FOiBkZXNjcmliZSB3aGVyZSBleGFjdGx5IHRoaXMgZ2V0cyB1c2VkCi0gIGRubCBGSVhNRTogZGVjaWRlIGlmIGl0J3MgYSBwcm9ibGVtIHRoYXQgdGhpcyBjb3VsZCBwb2ludCB0byBzaW5rcyBmcm9tCi0gIGRubCAgICAgICAgZGVwZW5kaW5nIHBsdWdpbiBtb2R1bGVzCi0gIGRubCBGSVhNRTogd2hlbiBjYW4gd2UganVzdCB1c2UgYXV0b2F1ZGlvc3JjIGFuZCBhdXRvdmlkZW9zcmM/Ci0gIERFRkFVTFRfQVVESU9TSU5LPSJhdXRvYXVkaW9zaW5rIgotICBERUZBVUxUX1ZJREVPU0lOSz0iYXV0b3ZpZGVvc2luayIKLSAgREVGQVVMVF9BVURJT1NSQz0iYWxzYXNyYyIKLSAgREVGQVVMVF9WSURFT1NSQz0idjRsMnNyYyIKLSAgREVGQVVMVF9WSVNVQUxJWkVSPSJnb29tIgotICBjYXNlICIkaG9zdCIgaW4KLSAgICAqLXN1bi0qIHwgKnBjLXNvbGFyaXMqICkKLSAgICAgIERFRkFVTFRfQVVESU9TUkM9InN1bmF1ZGlvc3JjIgotICAgICAgOzsKLSAgICAqLWRhcndpbiogKQotICAgICAgREVGQVVMVF9BVURJT1NSQz0ib3N4YXVkaW9zcmMiCi0gICAgICA7OwotICBlc2FjCi0KLSAgZG5sIERlZmF1bHQgYXVkaW8gc2luawotICBBQ19BUkdfV0lUSChkZWZhdWx0LWF1ZGlvc2luaywKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtYXVkaW9zaW5rXSwgW3NwZWNpZnkgZGVmYXVsdCBhdWRpbyBzaW5rXSksCi0gICAgWwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luaykgOzsKLSAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luaykgOzsKLSAgICAgICAgKikgICBERUZBVUxUX0FVRElPU0lOSz0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFsKLSAgICAgIERFRkFVTFRfQVVESU9TSU5LPSIkREVGQVVMVF9BVURJT1NJTksiCi0gICAgXSBkbmwgRGVmYXVsdCB2YWx1ZSBhcyBkZXRlcm1pbmVkIGFib3ZlCi0gICkKLSAgQUNfTVNHX05PVElDRShVc2luZyAkREVGQVVMVF9BVURJT1NJTksgYXMgZGVmYXVsdCBhdWRpbyBzaW5rKQotICBBQ19TVUJTVChERUZBVUxUX0FVRElPU0lOSykKLSAgQUNfREVGSU5FX1VOUVVPVEVEKERFRkFVTFRfQVVESU9TSU5LLCAiJERFRkFVTFRfQVVESU9TSU5LIiwKLSAgICBbRGVmYXVsdCBhdWRpbyBzaW5rXSkKLQotICBkbmwgRGVmYXVsdCBhdWRpbyBzb3VyY2UKLSAgQUNfQVJHX1dJVEgoZGVmYXVsdC1hdWRpb3NyYywKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtYXVkaW9zcmNdLCBbc3BlY2lmeSBkZWZhdWx0IGF1ZGlvIHNvdXJjZV0pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC1hdWRpb3NyYykgOzsKLSAgICAgICAgbm8pICBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc3JjKSA7OwotICAgICAgICAqKSAgIERFRkFVTFRfQVVESU9TUkM9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbCi0gICAgICBERUZBVUxUX0FVRElPU1JDPSIkREVGQVVMVF9BVURJT1NSQyIKLSAgICBdIGRubCBEZWZhdWx0IHZhbHVlIGFzIGRldGVybWluZWQgYWJvdmUKLSAgKQotICBBQ19NU0dfTk9USUNFKFVzaW5nICRERUZBVUxUX0FVRElPU1JDIGFzIGRlZmF1bHQgYXVkaW8gc291cmNlKQotICBBQ19TVUJTVChERUZBVUxUX0FVRElPU1JDKQotICBBQ19ERUZJTkVfVU5RVU9URUQoREVGQVVMVF9BVURJT1NSQywgIiRERUZBVUxUX0FVRElPU1JDIiwKLSAgICBbRGVmYXVsdCBhdWRpbyBzb3VyY2VdKQotCi0gIGRubCBEZWZhdWx0IHZpZGVvIHNpbmsKLSAgQUNfQVJHX1dJVEgoZGVmYXVsdC12aWRlb3NpbmssCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LXZpZGVvc2lua10sIFtzcGVjaWZ5IGRlZmF1bHQgdmlkZW8gc2lua10pLAotICAgIFsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NpbmspIDs7Ci0gICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NpbmspIDs7Ci0gICAgICAgICopICAgREVGQVVMVF9WSURFT1NJTks9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0gICAgXSwKLSAgICBbCi0gICAgICBERUZBVUxUX1ZJREVPU0lOSz0iJERFRkFVTFRfVklERU9TSU5LIgotICAgIF0gZG5sIERlZmF1bHQgdmFsdWUgYXMgZGV0ZXJtaW5lZCBhYm92ZQotICApCi0gIEFDX01TR19OT1RJQ0UoVXNpbmcgJERFRkFVTFRfVklERU9TSU5LIGFzIGRlZmF1bHQgdmlkZW8gc2luaykKLSAgQUNfU1VCU1QoREVGQVVMVF9WSURFT1NJTkspCi0gIEFDX0RFRklORV9VTlFVT1RFRChERUZBVUxUX1ZJREVPU0lOSywgIiRERUZBVUxUX1ZJREVPU0lOSyIsCi0gICAgW0RlZmF1bHQgdmlkZW8gc2lua10pCi0KLSAgZG5sIERlZmF1bHQgdmlkZW8gc291cmNlCi0gIEFDX0FSR19XSVRIKGRlZmF1bHQtdmlkZW9zcmMsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWZhdWx0LXZpZGVvc3JjXSwgW3NwZWNpZnkgZGVmYXVsdCB2aWRlbyBzb3VyY2VdKSwKLSAgICBbCi0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIEFDX01TR19FUlJPUihiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtdmlkZW9zcmMpIDs7Ci0gICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NyYykgOzsKLSAgICAgICAgKikgICBERUZBVUxUX1ZJREVPU1JDPSIke3dpdGh2YWx9IiA7OwotICAgICAgZXNhYwotICAgIF0sCi0gICAgWwotICAgICAgREVGQVVMVF9WSURFT1NSQz0iJERFRkFVTFRfVklERU9TUkMiCi0gICAgXSBkbmwgRGVmYXVsdCB2YWx1ZSBhcyBkZXRlcm1pbmVkIGFib3ZlCi0gICkKLSAgQUNfTVNHX05PVElDRShVc2luZyAkREVGQVVMVF9WSURFT1NSQyBhcyBkZWZhdWx0IHZpZGVvIHNvdXJjZSkKLSAgQUNfU1VCU1QoREVGQVVMVF9WSURFT1NSQykKLSAgQUNfREVGSU5FX1VOUVVPVEVEKERFRkFVTFRfVklERU9TUkMsICIkREVGQVVMVF9WSURFT1NSQyIsCi0gICAgW0RlZmF1bHQgdmlkZW8gc291cmNlXSkKLQotICAgIGRubCBEZWZhdWx0IHZpc3VhbGl6ZXIKLSAgQUNfQVJHX1dJVEgoZGVmYXVsdC12aXN1YWxpemVyLAotICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGVmYXVsdC12aXN1YWxpemVyXSwgW3NwZWNpZnkgZGVmYXVsdCB2aXN1YWxpemVyXSksCi0gICAgWwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpc3VhbGl6ZXIpIDs7Ci0gICAgICAgIG5vKSAgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aXN1YWxpemVyKSA7OwotICAgICAgICAqKSAgIERFRkFVTFRfVklTVUFMSVpFUj0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLSAgICBdLAotICAgIFsKLSAgICAgIERFRkFVTFRfVklTVUFMSVpFUj0iJERFRkFVTFRfVklTVUFMSVpFUiIKLSAgICBdIGRubCBEZWZhdWx0IHZhbHVlIGFzIGRldGVybWluZWQgYWJvdmUKLSAgKQotICBBQ19NU0dfTk9USUNFKFVzaW5nICRERUZBVUxUX1ZJU1VBTElaRVIgYXMgZGVmYXVsdCB2aXN1YWxpemVyKQotICBBQ19TVUJTVChERUZBVUxUX1ZJU1VBTElaRVIpCi0gIEFDX0RFRklORV9VTlFVT1RFRChERUZBVUxUX1ZJU1VBTElaRVIsICIkREVGQVVMVF9WSVNVQUxJWkVSIiwKLSAgICBbRGVmYXVsdCB2aXN1YWxpemVyXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWRvYy5tNCBiL2NvbW1vbi9tNC9nc3QtZG9jLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDNmMGZkLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtZG9jLm00CisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotQUNfREVGVU4oW0FHX0dTVF9ET0NCT09LX0NIRUNLXSwKLVsKLSAgZG5sIGNob29zZSBhIGxvY2F0aW9uIHRvIGluc3RhbGwgZG9jYm9vayBkb2NzIGluCi0gIGlmIHRlc3QgIngkUEFDS0FHRV9UQVJOQU1FIiA9ICJ4IgotICB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtJbnRlcm5hbCBlcnJvciAtIFBBQ0tBR0VfVEFSTkFNRSBub3Qgc2V0XSkKLSAgZmkKLSAgZG9jZGlyPSJcJChkYXRhZGlyKS9kb2MvJFBBQ0tBR0VfVEFSTkFNRS0kR1NUX0FQSV9WRVJTSU9OIgotCi0gIGRubCBlbmFibGUvZGlzYWJsZSBkb2Nib29rIGRvY3VtZW50YXRpb24gYnVpbGRpbmcKLSAgQUNfQVJHX0VOQUJMRShkb2Nib29rLAotICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZG9jYm9va10sCi0gICAgICAgICAgICAgICAgIFt1c2UgZG9jYm9vayB0byBidWlsZCBkb2N1bWVudGF0aW9uIFtkZWZhdWx0PW5vXV0pLCwKLSAgICAgICAgICAgICAgICAgZW5hYmxlX2RvY2Jvb2s9bm8pCi0KLSAgaGF2ZV9kb2Nib29rPW5vCi0KLSAgaWYgdGVzdCB4JGVuYWJsZV9kb2Nib29rID0geHllczsgdGhlbgotICAgIGRubCBjaGVjayBpZiB3ZSBhY3R1YWxseSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZAotCi0gICAgZG5sIGNoZWNrIGZvciBkb2Nib29rIHRvb2xzCi0gICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX0RPQ0JPT0syUFMsIGRvY2Jvb2sycHMsIHllcywgbm8pCi0gICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX1hTTFRQUk9DLCB4c2x0cHJvYywgeWVzLCBubykKLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfSkFERVRFWCwgamFkZXRleCwgeWVzLCBubykKLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfUFMyUERGLCBwczJwZGYsIHllcywgbm8pCi0KLSAgICBkbmwgY2hlY2sgaWYgd2UgY2FuIHByb2Nlc3MgZG9jYm9vayBzdHVmZgotICAgIEFTX0RPQ0JPT0soaGF2ZV9kb2Nib29rPXllcywgaGF2ZV9kb2Nib29rPW5vKQotCi0gICAgZG5sIGNoZWNrIGZvciBleHRyYSB0b29scwotICAgIEFDX0NIRUNLX1BST0coSEFWRV9EVklQUywgZHZpcHMsIHllcywgbm8pCi0gICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX1hNTExJTlQsIHhtbGxpbnQsIHllcywgbm8pCi0KLSAgICBBQ19DSEVDS19QUk9HKEhBVkVfUE5HVE9QTk0sIHBuZ3RvcG5tLCB5ZXMsIG5vKQotICAgIEFDX0NIRUNLX1BST0coSEFWRV9QTk1UT1BTLCAgcG5tdG9wcywgIHllcywgbm8pCi0gICAgQUNfQ0hFQ0tfUFJPRyhIQVZFX0VQU1RPUERGLCBlcHN0b3BkZiwgeWVzLCBubykKLQotICAgIGRubCBjaGVjayBpZiB3ZSBjYW4gZ2VuZXJhdGUgSFRNTAotICAgIGlmIHRlc3QgIngkSEFWRV9YU0xUUFJPQyIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkZW5hYmxlX2RvY2Jvb2siID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfWE1MTElOVCIgPSAieHllcyI7IHRoZW4KLSAgICAgIERPQ19IVE1MPXllcwotICAgICAgQUNfTVNHX05PVElDRShXaWxsIG91dHB1dCBIVE1MIGRvY3VtZW50YXRpb24pCi0gICAgIGVsc2UKLSAgICAgIERPQ19IVE1MPW5vCi0gICAgICBBQ19NU0dfTk9USUNFKFdpbGwgbm90IG91dHB1dCBIVE1MIGRvY3VtZW50YXRpb24pCi0gICAgZmkKLQotICAgIGRubCBjaGVjayBpZiB3ZSBjYW4gZ2VuZXJhdGUgUFMKLSAgICBpZiB0ZXN0ICJ4JEhBVkVfRE9DQk9PSzJQUyIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkZW5hYmxlX2RvY2Jvb2siID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfWE1MTElOVCIgPSAieHllcyIgJiYgXAotICAgICAgIHRlc3QgIngkSEFWRV9KQURFVEVYIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX0RWSVBTIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX1BOR1RPUE5NIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX1BOTVRPUFMiID0gInh5ZXMiOyB0aGVuCi0gICAgICBET0NfUFM9eWVzCi0gICAgICBBQ19NU0dfTk9USUNFKFdpbGwgb3V0cHV0IFBTIGRvY3VtZW50YXRpb24pCi0gICAgZWxzZQotICAgICAgRE9DX1BTPW5vCi0gICAgICBBQ19NU0dfTk9USUNFKFdpbGwgbm90IG91dHB1dCBQUyBkb2N1bWVudGF0aW9uKQotICAgIGZpCi0KLSAgICBkbmwgY2hlY2sgaWYgd2UgY2FuIGdlbmVyYXRlIFBERiAtIHVzaW5nIG9ubHkgcHMycGRmCi0gICAgaWYgdGVzdCAieCRET0NfUFMiID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JGVuYWJsZV9kb2Nib29rIiA9ICJ4eWVzIiAmJiBcCi0gICAgICAgdGVzdCAieCRIQVZFX1hNTExJTlQiID0gInh5ZXMiICYmIFwKLSAgICAgICB0ZXN0ICJ4JEhBVkVfUFMyUERGIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgRE9DX1BERj15ZXMKLSAgICAgIEFDX01TR19OT1RJQ0UoV2lsbCBvdXRwdXQgUERGIGRvY3VtZW50YXRpb24pCi0gICAgZWxzZQotICAgICAgRE9DX1BERj1ubwotICAgICAgQUNfTVNHX05PVElDRShXaWxsIG5vdCBvdXRwdXQgUERGIGRvY3VtZW50YXRpb24pCi0gICAgZmkKLQotICAgIGRubCBpZiB3ZSBkb24ndCBoYXZlIGV2ZXJ5dGhpbmcsIHdlIHNob3VsZCBkaXNhYmxlCi0gICAgaWYgdGVzdCAieCRoYXZlX2RvY2Jvb2siICE9ICJ4eWVzIjsgdGhlbgotICAgICAgZW5hYmxlX2RvY2Jvb2s9bm8KLSAgICBmaQotICBmaQotCi0gIGRubCBpZiB3ZSdyZSBnb2luZyB0byBpbnN0YWxsIGRvY3VtZW50YXRpb24sIHRlbGwgdXMgd2hlcmUKLSAgaWYgdGVzdCAieCRoYXZlX2RvY2Jvb2siID0gInh5ZXMiOyB0aGVuCi0gICAgQUNfTVNHX05PVElDRShJbnN0YWxsaW5nIGRvY3VtZW50YXRpb24gaW4gJGRvY2RpcikKLSAgICBBQ19TVUJTVChkb2NkaXIpCi0gIGZpCi0KLSAgQU1fQ09ORElUSU9OQUwoRU5BQkxFX0RPQ0JPT0ssICAgICAgdGVzdCB4JGVuYWJsZV9kb2Nib29rID0geHllcykKLSAgQU1fQ09ORElUSU9OQUwoRE9DX0hUTUwsICAgICAgICAgICAgdGVzdCB4JERPQ19IVE1MID0geHllcykKLSAgQU1fQ09ORElUSU9OQUwoRE9DX1BERiwgICAgICAgICAgICAgdGVzdCB4JERPQ19QREYgPSB4eWVzKQotICBBTV9DT05ESVRJT05BTChET0NfUFMsICAgICAgICAgICAgICB0ZXN0IHgkRE9DX1BTID0geHllcykKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgYi9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTgwOGQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1kb3doaWxlLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotZG5sCi1kbmwgQ2hlY2sgZm9yIHdvcmtpbmcgZG8gd2hpbGUoMCkgbWFjcm9zLiBUaGlzIGlzIHVzZWQgYnkgR19TVE1UX1NUQVJUCi1kbmwgYW5kIEdfU1RNVF9FTkQgaW4gZ2xpYi9nbWFjcm9zLmguIFdpdGhvdXQgaGF2aW5nIHRoaXMgZGVmaW5lZCB3ZQotZG5sIGdldCAiYW1iaWdpb3VzIGlmLWVsc2UiIGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gY29tcGxpbmcgQysrIGNvZGUuCi1kbmwKLWRubCBDb3BpZWQgZnJvbSBHTGliJ3MgY29uZmlndXJlLmluCi1kbmwKLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfRE9XSElMRV9NQUNST1NdLFsKLQotZG5sICoqKiBjaGVjayBmb3Igd29ya2luZyBkbyB3aGlsZSgwKSBtYWNyb3MgKioqCi1BQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgZG8gd2hpbGUoMCkgbWFjcm9zXSwgX2N2X2dfc3VwcG9ydF9kb3doaWxlX21hY3JvcywgWwotCUFDX1RSWV9DT01QSUxFKFtdLFsKLQkjZGVmaW5lIFNUTVRfU1RBUlQgZG8KLQkjZGVmaW5lIFNUTVRfRU5EIHdoaWxlKDApCi0JI2RlZmluZSBTVE1UX1RFU1QgU1RNVF9TVEFSVCB7IGkgPSAwOyB9IFNUTVRfRU5ECi0JaW50IG1haW4odm9pZCkgeyBpbnQgaSA9IDE7IFNUTVRfVEVTVDsgcmV0dXJuIGk7IH1dLAotCVtfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zPXllc10sCi0JW19jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3M9bm9dLAotCVtfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zPXllc10pCi1dKQotaWYgdGVzdCB4JF9jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3MgPSB4eWVzOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX0RPV0hJTEVfTUFDUk9TLCAxLCBbZGVmaW5lIGZvciB3b3JraW5nIGRvIHdoaWxlKDApIG1hY3Jvc10pCi1maQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgYi9jb21tb24vbTQvZ3N0LWVycm9yLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDY3NTg4Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotZG5sIGhhbmRsZSB2YXJpb3VzIGVycm9yLXJlbGF0ZWQgdGhpbmdzCi0KLWRubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLWRubCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotCi1kbmwgTGFzdCBtb2RpZmljYXRpb246IDIwMDgtMDItMTgKLQotZG5sIEFHX0dTVF9TRVRfRVJST1JfQ0ZMQUdTKFtBREQtV0VSUk9SXSwgW01PUkVfRkxBR1NdKQotZG5sIEFHX0dTVF9TRVRfRVJST1JfQ1hYRkxBR1MoW0FERC1XRVJST1JdLCBbTU9SRV9GTEFHU10pCi1kbmwgQUdfR1NUX1NFVF9MRVZFTF9ERUZBVUxUKFtJUy1HSVQtVkVSU0lPTl0pCi0KLQotZG5sIFNldHMgV0FSTklOR19DRkxBR1MgYW5kIEVSUk9SX0NGTEFHUyB0byBzb21ldGhpbmcgdGhlIGNvbXBpbGVyIAotZG5sIHdpbGwgYWNjZXB0IGFuZCBBQ19TVUJTVCB0aGVtIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSBpbiBNYWtlZmlsZQotZG5sCi1kbmwgV0FSTklOR19DRkxBR1Mgd2lsbCBjb250YWluIGZsYWdzIHRvIG1ha2UgdGhlIGNvbXBpbGVyIGVtaXQgbW9yZQotZG5sICAgd2FybmluZ3MuCi1kbmwgRVJST1JfQ0ZMQUdTIHdpbGwgY29udGFpbiBmbGFncyB0byBtYWtlIHRob3NlIHdhcm5pbmdzIGZhdGFsLAotZG5sICAgdW5sZXNzIEFERC1XRVJST1IgaXMgc2V0IHRvICJubyIKLWRubCAKLWRubCBJZiBNT1JFX0ZMQUdTIGlzIHNldCwgdHJpZXMgdG8gYWRkIGVhY2ggb2YgdGhlIGdpdmVuIGZsYWdzCi1kbmwgdG8gV0FSTklOR19DRkxBR1MgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZW0uIEVhY2ggZmxhZyBpcyAKLWRubCB0ZXN0ZWQgc2VwYXJhdGVseS4KLWRubAotZG5sIFRoZXNlIGZsYWdzIGNhbiBiZSBvdmVycmlkZGVuIGF0IG1ha2UgdGltZToKLWRubCBtYWtlIEVSUk9SX0NGTEFHUz0KLUFDX0RFRlVOKFtBR19HU1RfU0VUX0VSUk9SX0NGTEFHU10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKQotICBBQ19SRVFVSVJFKFtBU19DT01QSUxFUl9GTEFHXSkKLQotICBXQVJOSU5HX0NGTEFHUz0iIgotICBFUlJPUl9DRkxBR1M9IiIKLQotICBkbmwgaWYgd2Ugc3VwcG9ydCAtV2FsbCwgc2V0IGl0IHVuY29uZGl0aW9uYWxseQotICBBU19DT01QSUxFUl9GTEFHKC1XYWxsLAotICAgICAgICAgICAgICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdhbGwiKQotCi0gIGRubCBXYXJuIGlmIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzIGFyZSB1c2VkIChDOTkgZXh0ZW5zaW9uKQotICBBU19DT01QSUxFUl9GTEFHKC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50LAotICAgICAgICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IikKLQotICBkbmwgV2FybiBpZiB2YXJpYWJsZSBsZW5ndGggYXJyYXlzIGFyZSB1c2VkIChDOTkgZXh0ZW5zaW9uKQotICBBU19DT01QSUxFUl9GTEFHKC1XdmxhLAotICAgICAgICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTIC1XdmxhIikKLQotICBkbmwgV2FybiBmb3IgaW52YWxpZCBwb2ludGVyIGFyaXRobWV0aWMKLSAgQVNfQ09NUElMRVJfRkxBRygtV3BvaW50ZXItYXJpdGgsCi0gICAgICAgIFdBUk5JTkdfQ0ZMQUdTPSIkV0FSTklOR19DRkxBR1MgLVdwb2ludGVyLWFyaXRoIikKLQotICBkbmwgaWYgYXNrZWQgZm9yLCBhZGQgLVdlcnJvciBpZiBzdXBwb3J0ZWQKLSAgaWYgdGVzdCAieCQxIiAhPSAieG5vIgotICB0aGVuCi0gICAgQVNfQ09NUElMRVJfRkxBRygtV2Vycm9yLCBFUlJPUl9DRkxBR1M9IiRFUlJPUl9DRkxBR1MgLVdlcnJvciIpCi0gIGZpCi0KLSAgaWYgdGVzdCAieCQyIiAhPSAieCIKLSAgdGhlbgotICAgIFVOU1VQUE9SVEVEPSIiCi0gICAgbGlzdD0iJDIiCi0gICAgZm9yIGVhY2ggaW4gJGxpc3QKLSAgICBkbwotICAgICAgQVNfQ09NUElMRVJfRkxBRygkZWFjaCwKLSAgICAgICAgICBXQVJOSU5HX0NGTEFHUz0iJFdBUk5JTkdfQ0ZMQUdTICRlYWNoIiwKLSAgICAgICAgICBVTlNVUFBPUlRFRD0iJFVOU1VQUE9SVEVEICRlYWNoIikKLSAgICBkb25lCi0gICAgaWYgdGVzdCAiWCRVTlNVUFBPUlRFRCIgIT0gWCA7IHRoZW4KLSAgICAgIEFDX01TR19OT1RJQ0UoW3Vuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURURdKQotICAgIGZpCi0gIGZpCi0KLSAgQUNfU1VCU1QoV0FSTklOR19DRkxBR1MpCi0gIEFDX1NVQlNUKEVSUk9SX0NGTEFHUykKLSAgQUNfTVNHX05PVElDRShbc2V0IFdBUk5JTkdfQ0ZMQUdTIHRvICRXQVJOSU5HX0NGTEFHU10pCi0gIEFDX01TR19OT1RJQ0UoW3NldCBFUlJPUl9DRkxBR1MgdG8gJEVSUk9SX0NGTEFHU10pCi1dKQotCi1kbmwgU2V0cyBXQVJOSU5HX0NYWEZMQUdTIGFuZCBFUlJPUl9DWFhGTEFHUyB0byBzb21ldGhpbmcgdGhlIGNvbXBpbGVyIAotZG5sIHdpbGwgYWNjZXB0IGFuZCBBQ19TVUJTVCB0aGVtIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSBpbiBNYWtlZmlsZQotZG5sCi1kbmwgV0FSTklOR19DWFhGTEFHUyB3aWxsIGNvbnRhaW4gZmxhZ3MgdG8gbWFrZSB0aGUgY29tcGlsZXIgZW1pdCBtb3JlCi1kbmwgICB3YXJuaW5ncy4KLWRubCBFUlJPUl9DWFhGTEFHUyB3aWxsIGNvbnRhaW4gZmxhZ3MgdG8gbWFrZSB0aG9zZSB3YXJuaW5ncyBmYXRhbCwKLWRubCAgIHVubGVzcyBBREQtV0VSUk9SIGlzIHNldCB0byAibm8iCi1kbmwgCi1kbmwgSWYgTU9SRV9GTEFHUyBpcyBzZXQsIHRyaWVzIHRvIGFkZCBlYWNoIG9mIHRoZSBnaXZlbiBmbGFncwotZG5sIHRvIFdBUk5JTkdfQ0ZMQUdTIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGVtLiBFYWNoIGZsYWcgaXMgCi1kbmwgdGVzdGVkIHNlcGFyYXRlbHkuCi1kbmwKLWRubCBUaGVzZSBmbGFncyBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBtYWtlIHRpbWU6Ci1kbmwgbWFrZSBFUlJPUl9DWFhGTEFHUz0KLUFDX0RFRlVOKFtBR19HU1RfU0VUX0VSUk9SX0NYWEZMQUdTXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotICBBQ19SRVFVSVJFKFtBU19DWFhfQ09NUElMRVJfRkxBR10pCi0KLSAgRVJST1JfQ1hYRkxBR1M9IiIKLSAgV0FSTklOR19DWFhGTEFHUz0iIgotCi0gIGRubCBpZiB3ZSBzdXBwb3J0IC1XYWxsLCBzZXQgaXQgdW5jb25kaXRpb25hbGx5Ci0gIEFTX0NYWF9DT01QSUxFUl9GTEFHKC1XYWxsLCBXQVJOSU5HX0NYWEZMQUdTPSIkV0FSTklOR19DWFhGTEFHUyAtV2FsbCIpCi0KLSAgZG5sIGlmIGFza2VkIGZvciwgYWRkIC1XZXJyb3IgaWYgc3VwcG9ydGVkCi0gIGlmIHRlc3QgIngkMSIgIT0gInhubyIKLSAgdGhlbgotICAgIEFTX0NYWF9DT01QSUxFUl9GTEFHKC1XZXJyb3IsIEVSUk9SX0NYWEZMQUdTPSIkRVJST1JfQ1hYRkxBR1MgLVdlcnJvciIpCi0KLSAgICBpZiB0ZXN0ICJ4JEVSUk9SX0NYWEZMQUdTIiAhPSAieCIKLSAgICB0aGVuCi0gICAgICAgIGRubCBhZGQgZXhjZXB0aW9ucwotICAgICAgICBBU19DWFhfQ09NUElMRVJfRkxBRyhbLVduby1ub24tdmlydHVhbC1kdG9yXSwgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtV25vLW5vbi12aXJ0dWFsLWR0b3IiKQotCi0JZG5sIEFkZCAtZm5vLXN0cmljdC1hbGlhc2luZyBmb3IgR0xpYiB2ZXJzaW9ucyBiZWZvcmUgMi4xOS44Ci0JZG5sIGFzIGJlZm9yZSBHX0xPQ0sgYW5kIGZyaWVuZHMgY2F1c2VkIHN0cmljdCBhbGlhc2luZyBjb21waWxlcgotCWRubCB3YXJuaW5ncy4KLQlQS0dfQ0hFQ0tfRVhJU1RTKFtnbGliLTIuMCA8IDIuMTkuOF0sIFsKLQkgIEFTX0NYWF9DT01QSUxFUl9GTEFHKFstZm5vLXN0cmljdC1hbGlhc2luZ10sCi0JICAgIEVSUk9SX0NYWEZMQUdTPSIkRVJST1JfQ1hYRkxBR1MgLWZuby1zdHJpY3QtYWxpYXNpbmciKQotCSAgXSkKLSAgICBmaQotICBmaQotCi0gIGlmIHRlc3QgIngkMiIgIT0gIngiCi0gIHRoZW4KLSAgICBVTlNVUFBPUlRFRD0iIgotICAgIGxpc3Q9IiQyIgotICAgIGZvciBlYWNoIGluICRsaXN0Ci0gICAgZG8KLSAgICAgIEFTX0NYWF9DT01QSUxFUl9GTEFHKCRlYWNoLAotICAgICAgICAgIFdBUk5JTkdfQ1hYRkxBR1M9IiRXQVJOSU5HX0NYWEZMQUdTICRlYWNoIiwKLSAgICAgICAgICBVTlNVUFBPUlRFRD0iJFVOU1VQUE9SVEVEICRlYWNoIikKLSAgICBkb25lCi0gICAgaWYgdGVzdCAiWCRVTlNVUFBPUlRFRCIgIT0gWCA7IHRoZW4KLSAgICAgIEFDX01TR19OT1RJQ0UoW3Vuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURURdKQotICAgIGZpCi0gIGZpCi0KLSAgQUNfU1VCU1QoV0FSTklOR19DWFhGTEFHUykKLSAgQUNfU1VCU1QoRVJST1JfQ1hYRkxBR1MpCi0gIEFDX01TR19OT1RJQ0UoW3NldCBXQVJOSU5HX0NYWEZMQUdTIHRvICRXQVJOSU5HX0NYWEZMQUdTXSkKLSAgQUNfTVNHX05PVElDRShbc2V0IEVSUk9SX0NYWEZMQUdTIHRvICRFUlJPUl9DWFhGTEFHU10pCi1dKQotCi1kbmwgU2V0cyBXQVJOSU5HX09CSkNGTEFHUyBhbmQgRVJST1JfT0JKQ0ZMQUdTIHRvIHNvbWV0aGluZyB0aGUgY29tcGlsZXIgCi1kbmwgd2lsbCBhY2NlcHQgYW5kIEFDX1NVQlNUIHRoZW0gc28gdGhleSBhcmUgYXZhaWxhYmxlIGluIE1ha2VmaWxlCi1kbmwKLWRubCBXQVJOSU5HX09CSkNGTEFHUyB3aWxsIGNvbnRhaW4gZmxhZ3MgdG8gbWFrZSB0aGUgY29tcGlsZXIgZW1pdCBtb3JlCi1kbmwgICB3YXJuaW5ncy4KLWRubCBFUlJPUl9PQkpDRkxBR1Mgd2lsbCBjb250YWluIGZsYWdzIHRvIG1ha2UgdGhvc2Ugd2FybmluZ3MgZmF0YWwsCi1kbmwgICB1bmxlc3MgQURELVdFUlJPUiBpcyBzZXQgdG8gIm5vIgotZG5sIAotZG5sIElmIE1PUkVfRkxBR1MgaXMgc2V0LCB0cmllcyB0byBhZGQgZWFjaCBvZiB0aGUgZ2l2ZW4gZmxhZ3MKLWRubCB0byBXQVJOSU5HX0NGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlbS4gRWFjaCBmbGFnIGlzIAotZG5sIHRlc3RlZCBzZXBhcmF0ZWx5LgotZG5sCi1kbmwgVGhlc2UgZmxhZ3MgY2FuIGJlIG92ZXJyaWRkZW4gYXQgbWFrZSB0aW1lOgotZG5sIG1ha2UgRVJST1JfT0JKQ0ZMQUdTPQotQUNfREVGVU4oW0FHX0dTVF9TRVRfRVJST1JfT0JKQ0ZMQUdTXSwKLVsKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19PQkpDXSkKLSAgQUNfUkVRVUlSRShbQVNfT0JKQ19DT01QSUxFUl9GTEFHXSkKLQotICBFUlJPUl9PQkpDRkxBR1M9IiIKLSAgV0FSTklOR19PQkpDRkxBR1M9IiIKLQotICBkbmwgaWYgd2Ugc3VwcG9ydCAtV2FsbCwgc2V0IGl0IHVuY29uZGl0aW9uYWxseQotICBBU19PQkpDX0NPTVBJTEVSX0ZMQUcoLVdhbGwsIFdBUk5JTkdfT0JKQ0ZMQUdTPSIkV0FSTklOR19PQkpDRkxBR1MgLVdhbGwiKQotCi0gIGRubCBpZiBhc2tlZCBmb3IsIGFkZCAtV2Vycm9yIGlmIHN1cHBvcnRlZAotICBpZiB0ZXN0ICJ4JDEiICE9ICJ4bm8iCi0gIHRoZW4KLSAgICBBU19PQkpDX0NPTVBJTEVSX0ZMQUcoLVdlcnJvciwgRVJST1JfT0JKQ0ZMQUdTPSIkRVJST1JfT0JKQ0ZMQUdTIC1XZXJyb3IiKQotCi0gICAgaWYgdGVzdCAieCRFUlJPUl9PQkpDRkxBR1MiICE9ICJ4IgotICAgIHRoZW4KLQlkbmwgQWRkIC1mbm8tc3RyaWN0LWFsaWFzaW5nIGZvciBHTGliIHZlcnNpb25zIGJlZm9yZSAyLjE5LjgKLQlkbmwgYXMgYmVmb3JlIEdfTE9DSyBhbmQgZnJpZW5kcyBjYXVzZWQgc3RyaWN0IGFsaWFzaW5nIGNvbXBpbGVyCi0JZG5sIHdhcm5pbmdzLgotCVBLR19DSEVDS19FWElTVFMoW2dsaWItMi4wIDwgMi4xOS44XSwgWwotCSAgQVNfT0JKQ19DT01QSUxFUl9GTEFHKFstZm5vLXN0cmljdC1hbGlhc2luZ10sCi0JICAgIEVSUk9SX09CSkNGTEFHUz0iJEVSUk9SX09CSkNGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIpCi0JICBdKQotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAieCQyIiAhPSAieCIKLSAgdGhlbgotICAgIFVOU1VQUE9SVEVEPSIiCi0gICAgbGlzdD0iJDIiCi0gICAgZm9yIGVhY2ggaW4gJGxpc3QKLSAgICBkbwotICAgICAgQVNfT0JKQ19DT01QSUxFUl9GTEFHKCRlYWNoLAotICAgICAgICAgIFdBUk5JTkdfT0JKQ0ZMQUdTPSIkV0FSTklOR19PQkpDRkxBR1MgJGVhY2giLAotICAgICAgICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giKQotICAgIGRvbmUKLSAgICBpZiB0ZXN0ICJYJFVOU1VQUE9SVEVEIiAhPSBYIDsgdGhlbgotICAgICAgQUNfTVNHX05PVElDRShbdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRF0pCi0gICAgZmkKLSAgZmkKLQotICBBQ19TVUJTVChXQVJOSU5HX09CSkNGTEFHUykKLSAgQUNfU1VCU1QoRVJST1JfT0JKQ0ZMQUdTKQotICBBQ19NU0dfTk9USUNFKFtzZXQgV0FSTklOR19PQkpDRkxBR1MgdG8gJFdBUk5JTkdfT0JKQ0ZMQUdTXSkKLSAgQUNfTVNHX05PVElDRShbc2V0IEVSUk9SX09CSkNGTEFHUyB0byAkRVJST1JfT0JKQ0ZMQUdTXSkKLV0pCi0KLWRubCBTZXRzIHRoZSBkZWZhdWx0IGVycm9yIGxldmVsIGZvciBkZWJ1Z2dpbmcgbWVzc2FnZXMKLUFDX0RFRlVOKFtBR19HU1RfU0VUX0xFVkVMX0RFRkFVTFRdLAotWwotICBkbmwgZGVmaW5lIGNvcnJlY3QgZXJyb3JsZXZlbCBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzLiBXZSB3YW50IHRvIGhhdmUKLSAgZG5sIEdTVF9FUlJPUiBtZXNzYWdlcyBwcmludGVkIHdoZW4gcnVubmluZyBjdnMgYnVpbGRzCi0gIGlmIHRlc3QgInhbJDFdIiA9ICJ4eWVzIjsgdGhlbgotICAgIEdTVF9MRVZFTF9ERUZBVUxUPUdTVF9MRVZFTF9FUlJPUgotICBlbHNlCi0gICAgR1NUX0xFVkVMX0RFRkFVTFQ9R1NUX0xFVkVMX05PTkUKLSAgZmkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9MRVZFTF9ERUZBVUxULCAkR1NUX0xFVkVMX0RFRkFVTFQsCi0gICAgW0RlZmF1bHQgZXJyb3JsZXZlbCB0byB1c2VdKQotICBkbmwgQUNfU1VCU1Qgc28gd2UgY2FuIHVzZSBpdCBmb3Igd2luMzIvY29tbW9uL2NvbmZpZy5oCi0gIEFDX1NVQlNUKEdTVF9MRVZFTF9ERUZBVUxUKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBiL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc2MjE1ZS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotZG5sIFBlcmZvcm0gYSBjaGVjayBmb3IgYSBmZWF0dXJlIGZvciBHU3RyZWFtZXIKLWRubCBSaWNoYXJkIEJvdWx0b24gPHJpY2hhcmQtYWxzYUB0YXJ0YXJ1cy5vcmc+Ci1kbmwgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+IGFkZGVkIHVzZWZ1bCBzdHVmZgotZG5sIExhc3QgbW9kaWZpY2F0aW9uOiAyNS8wNi8yMDAxCi1kbmwKLWRubCBBR19HU1RfQ0hFQ0tfRkVBVFVSRShGRUFUVVJFLU5BTUUsIEZFQVRVUkUtREVTQ1JJUFRJT04sCi1kbmwgICAgICAgICAgICAgICAgICAgREVQRU5ERU5ULVBMVUdJTlMsIFRFU1QtRk9SLUZFQVRVUkUsCi1kbmwgICAgICAgICAgICAgICAgICAgRElTQUJMRS1CWS1ERUZBVUxULCBBQ1RJT04tSUYtVVNFLCBBQ1RJT04tSUYtTk9UVVNFKQotZG5sCi1kbmwgVGhpcyBtYWNybyBhZGRzIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIGFsbG93IHRoZSB1c2VyIHRvIGVuYWJsZQotZG5sIG9yIGRpc2FibGUgYSBmZWF0dXJlLCBhbmQgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZCwgcGVyZm9ybXMgYSBzdXBwbGllZAotZG5sIHRlc3QgdG8gY2hlY2sgaWYgdGhlIGZlYXR1cmUgaXMgYXZhaWxhYmxlLgotZG5sCi1kbmwgVGhlIHRlc3Qgc2hvdWxkIGRlZmluZSBIQVZFXzxGRUFUVVJFLU5BTUU+IHRvICJ5ZXMiIG9yICJubyIgZGVwZW5kaW5nCi1kbmwgb24gd2hldGhlciB0aGUgZmVhdHVyZSBpcyBhdmFpbGFibGUuCi1kbmwKLWRubCBUaGUgbWFjcm8gd2lsbCBzZXQgVVNFXzxGRUFUVVJFLU5BTUU+IHRvICJ5ZXMiIG9yICJubyIgZGVwZW5kaW5nIG9uCi1kbmwgd2hldGhlciB0aGUgZmVhdHVyZSBpcyB0byBiZSB1c2VkLgotZG5sIFRob21hcyBjaGFuZ2VkIHRoaXMsIHNvIHRoYXQgd2hlbiBVU0VfPEZFQVRVUkUtTkFNRT4gd2FzIGFscmVhZHkgc2V0Ci1kbmwgdG8gbm8sIHRoZW4gaXQgc3RheXMgdGhhdCB3YXkuCi1kbmwKLWRubCBUaGUgbWFjcm8gd2lsbCBjYWxsIEFNX0NPTkRJVElPTkFMKFVTRV88RkVBVFVSRS1OQU1FPiwgLi4uKSB0byBhbGxvdwotZG5sIHRoZSBmZWF0dXJlIHRvIGNvbnRyb2wgd2hhdCBpcyBidWlsdCBpbiBNYWtlZmlsZS5hbXMuICBJZiB5b3Ugd2FudAotZG5sIGFkZGl0aW9uYWwgYWN0aW9ucyByZXN1bHRpbmcgZnJvbSB0aGUgdGVzdCwgeW91IGNhbiBhZGQgdGhlbSB3aXRoIHRoZQotZG5sIEFDVElPTi1JRi1VU0UgYW5kIEFDVElPTi1JRi1OT1RVU0UgcGFyYW1ldGVycy4KLWRubAotZG5sIEZFQVRVUkUtTkFNRSAgICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUsIGFuZCBzaG91bGQgYmUgaW4KLWRubCAgICAgICAgICAgICAgICAgICAgIHB1cmVseSB1cHBlciBjYXNlIGNoYXJhY3RlcnMuCi1kbmwgRkVBVFVSRS1ERVNDUklQVElPTiBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBmZWF0dXJlIGluIGhlbHAgdGV4dCBmb3IKLWRubCAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQuCi1kbmwgREVQRU5ERU5ULVBMVUdJTlMgICBsaXN0cyBhbnkgcGx1Zy1pbnMgd2hpY2ggZGVwZW5kIG9uIHRoaXMgZmVhdHVyZS4KLWRubCBURVNULUZPUi1GRUFUVVJFICAgIGlzIGEgdGVzdCB3aGljaCBzZXRzIEhBVkVfPEZFQVRVUkUtTkFNRT4gdG8gInllcyIKLWRubCAgICAgICAgICAgICAgICAgICAgIG9yICJubyIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZlYXR1cmUgaXMKLWRubCAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KLWRubCBESVNBQkxFLUJZLURFRkFVTFQgIGlmICJkaXNhYmxlZCIsIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsCi1kbmwgICAgICAgICAgICAgICAgICAgICBpZiBhbnkgb3RoZXIgdmFsdWUsIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLWRubCBBQ1RJT04tSUYtVVNFICAgICAgIGFueSBleHRyYSBhY3Rpb25zIHRvIHBlcmZvcm0gaWYgdGhlIGZlYXR1cmUgaXMgdG8gYmUKLWRubCAgICAgICAgICAgICAgICAgICAgIHVzZWQuCi1kbmwgQUNUSU9OLUlGLU5PVFVTRSAgICBhbnkgZXh0cmEgYWN0aW9ucyB0byBwZXJmb3JtIGlmIHRoZSBmZWF0dXJlIGlzIG5vdCB0bwotZG5sICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZC4KLWRubAotZG5sCi1kbmwgdGhvbWFzIDoKLWRubCB3ZSBhbHNvIGFkZGVkIGEgaGlzdG9yeS4KLWRubCBHU1RfUExVR0lOU19ZRVMgd2lsbCBjb250YWluIGFsbCBwbHVnaW5zIHRvIGJlIGJ1aWx0Ci1kbmwgICAgICAgICAgICAgICAgIHRoYXQgd2VyZSBjaGVja2VkIHRocm91Z2ggQUdfR1NUX0NIRUNLX0ZFQVRVUkUKLWRubCBHU1RfUExVR0lOU19OTyB3aWxsIGNvbnRhaW4gdGhvc2UgdGhhdCB3b24ndCBiZSBidWlsdAotCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0ZFQVRVUkVdLAotW2VjaG8KLUFDX01TR19OT1RJQ0UoKioqIGNoZWNraW5nIGZlYXR1cmU6IFskMl0gKioqKQotaWYgdGVzdCAieFskM10iICE9ICJ4IgotdGhlbgotICBBQ19NU0dfTk9USUNFKCoqKiBmb3IgcGx1Zy1pbnM6IFskM10gKioqKQotZmkKLWRubAotYnVpbHRpbihkZWZpbmUsIFtnc3RfZW5kaXNhYmxlXSwgaWZlbHNlKCQ1LCBbZGlzYWJsZWRdLCBbZW5hYmxlXSwgW2Rpc2FibGVdKSlkbmwKLWRubCBpZiBpdCBpcyBzZXQgdG8gTk8sIHRoZW4gZG9uJ3QgZXZlbiBjb25zaWRlciBpdCBmb3IgYnVpbGRpbmcKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfWyQxXSIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLUFDX0FSR19FTkFCTEUodHJhbnNsaXQoWyQxXSwgQS1aLCBhLXopLAotICBbICBdYnVpbHRpbihmb3JtYXQsIC0tJS0yNnMgZ3N0X2VuZGlzYWJsZSAlcywgZ3N0X2VuZGlzYWJsZS10cmFuc2xpdChbJDFdLCBBLVosIGEteiksIFskMl1pZmVsc2UoWyQzXSwsLDogWyQzXSkpLAotICBbIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX1skMV09eWVzOzsKLSAgICAgIG5vKSBVU0VfWyQxXT1ubzs7Ci0gICAgICAqKSBBQ19NU0dfRVJST1IoYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdHJhbnNsaXQoWyQxXSwgQS1aLCBhLXopKSA7OwotICAgIGVzYWNdLAotICBbIFVTRV8kMT1daWZlbHNlKCQ1LCBbZGlzYWJsZWRdLCBbbm9dLCBbeWVzXSkpICAgICAgICAgICBkbmwgREVGQVVMVAotCi1kbmwgKioqIHNldCBpdCBiYWNrIHRvIG5vIGlmIGl0IHdhcyBwcmVzZXQgdG8gbm8KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9bJDFdPSJubyIKLSAgQUNfTVNHX1dBUk4oKioqICQzIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCkKLWZpCi1OT1VTRT0KLQotZG5sICoqKiBDaGVjayBpZiBpdCBpcyBwb3J0ZWQgb3Igbm90Ci1pZiBlY2hvICIgWyRHU1RfUExVR0lOU19OT05QT1JURURdICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBbJDFdICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1skMV09Im5vIgotICBBQ19NU0dfV0FSTigqKiogJDMgbm90IHBvcnRlZCkKLWZpCi0KLWRubCAqKiogSWYgaXQncyBlbmFibGVkCi0KLWlmIHRlc3QgeCRVU0VfWyQxXSA9IHh5ZXM7IHRoZW4KLSAgZG5sIHNhdmUgY29tcGlsZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSB0ZXN0Ci0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX1skMV09bm8KLSAgZG5sIFRFU1RfRk9SX0ZFQVRVUkUKLSAgJDQKLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gIGRubCBJZiBpdCBpc24ndCBmb3VuZCwgdW5zZXQgVVNFX1skMV0KLSAgaWYgdGVzdCB4JEhBVkVfWyQxXSA9IHhubzsgdGhlbgotICAgIFVTRV9bJDFdPW5vCi0gIGVsc2UKLSAgICBpZmVsc2UoWyQzXSwgLCA6LCBbQUNfTVNHX05PVElDRSgqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBbJDNdKV0pCi0gIGZpCi1maQotZG5sICoqKiBXYXJuIGlmIGl0J3MgZGlzYWJsZWQgb3Igbm90IGZvdW5kCi1pZiB0ZXN0IHgkVVNFX1skMV0gPSB4eWVzOyB0aGVuCi0gIGlmZWxzZShbJDZdLCAsIDosIFskNl0pCi0gIGlmIHRlc3QgIngkMyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdFskM11cbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0gIEFDX0RFRklORShIQVZFX1skMV0sICwgW0RlZmluZSB0byBlbmFibGUgJDJdaWZlbHNlKCQzLCwsIFsgKHVzZWQgYnkgJDMpXSkuKQotZWxzZQotICBpZmVsc2UoWyQzXSwgLCA6LCBbQUNfTVNHX05PVElDRSgqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogWyQzXSldKQotICBpZiB0ZXN0ICJ4JDMiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdFskM11cbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgaWZlbHNlKFskN10sICwgOiwgWyQ3XSkKLWZpCi1kbmwgKioqIERlZmluZSB0aGUgY29uZGl0aW9uYWwgYXMgYXBwcm9wcmlhdGUKLUFNX0NPTkRJVElPTkFMKFVTRV9bJDFdLCB0ZXN0IHgkVVNFX1skMV0gPSB4eWVzKQotXSkKLQotZG5sIFVzZSBBQ19DSEVDS19MSUIgYW5kIEFDX0NIRUNLX0hFQURFUiB0byBkbyBib3RoIHRlc3RzIGF0IG9uY2UKLWRubCBzZXRzIEhBVkVfbW9kdWxlIGlmIHdlIGhhdmUgaXQKLWRubCBSaWNoYXJkIEJvdWx0b24gPHJpY2hhcmQtYWxzYUB0YXJ0YXJ1cy5vcmc+Ci1kbmwgTGFzdCBtb2RpZmljYXRpb246IDI2LzA2LzIwMDEKLWRubCBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEZFQVRVUkUtTkFNRSwgTElCIE5BTUUsIExJQiBGVU5DVElPTiwgRVhUUkEgTEQgRkxBR1MsCi1kbmwgICAgICAgICAgICAgICAgICAgICBIRUFERVIgTkFNRSwgQUNUSU9OLUlGLUZPVU5ELCBBQ1RJT04tSUYtTk9ULUZPVU5EKQotZG5sCi1kbmwgVGhpcyBjaGVjayB3YXMgd3JpdHRlbiBmb3IgR1N0cmVhbWVyOiBpdCBzaG91bGQgYmUgcmVuYW1lZCBhbmQgY2hlY2tlZAotZG5sIGZvciBwb3J0YWJpbGl0eSBpZiB5b3UgZGVjaWRlIHRvIHVzZSBpdCBlbHNld2hlcmUuCi1kbmwKLUFDX0RFRlVOKFtBR19HU1RfQ0hFQ0tfTElCSEVBREVSXSwKLVsKLSAgQUNfQ0hFQ0tfTElCKFskMl0sIFskM10sIEhBVkVfWyQxXT15ZXMsIEhBVkVfWyQxXT1ubyxbJDRdKQotICBpZiB0ZXN0ICJ4JEhBVkVfWyQxXSIgPSAieHllcyI7IHRoZW4KLSAgICBBQ19DSEVDS19IRUFERVIoWyQ1XSwgOiwgSEFWRV9bJDFdPW5vKQotICAgIGlmIHRlc3QgIngkSEFWRV9bJDFdIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgZG5sIGV4ZWN1dGUgd2hhdCBuZWVkcyB0byBiZQotICAgICAgaWZlbHNlKFskNl0sICwgOiwgWyQ2XSkKLSAgICBlbHNlCi0gICAgICBpZmVsc2UoWyQ3XSwgLCA6LCBbJDddKQotICAgIGZpCi0gIGVsc2UKLSAgICBpZmVsc2UoWyQ3XSwgLCA6LCBbJDddKQotICBmaQotICBBQ19TVUJTVChIQVZFX1skMV0pCi1dCi0pCi0KLWRubCAyMDA0LTAyLTE0IFRob21hcyAtIGNoYW5nZWQgdG8gZ2V0IHNldCBwcm9wZXJseSBhbmQgdXNlIHByb3BlciBvdXRwdXQKLWRubCAyMDAzLTA2LTI3IEJlbmphbWluIE90dGUgLSBjaGFuZ2VkIHRvIG1ha2UgdGhpcyB3b3JrIHdpdGggZ3N0Y29uZmlnLmgKLWRubAotZG5sIEFkZCBhIHN1YnN5c3RlbSAtLWRpc2FibGUgZmxhZyBhbmQgYWxsIHRoZSBuZWNlc3Nhcnkgc3ltYm9scyBhbmQgc3Vic3RpdGlvbnMKLWRubAotZG5sIEFHX0dTVF9DSEVDS19TVUJTWVNURU1fRElTQUJMRShTWVNOQU1FLCBbc3Vic3lzdGVtIG5hbWVdKQotZG5sCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX1NVQlNZU1RFTV9ESVNBQkxFXSwKLVsKLSAgZG5sIHRoaXMgZGVmaW5lIHdpbGwgcmVwbGFjZSBlYWNoIGxpdGVyYWwgc3Vic3lzX2RlZiBvY2N1cnJlbmNlIHdpdGgKLSAgZG5sIHRoZSBsb3dlcmNhc2UgaHlwaGVuLXNlcGFyYXRlZCBzdWJzeXN0ZW0KLSAgZG5sIGUuZy4gaWYgJDEgaXMgR1NUX0RFQlVHIHRoZW4gc3Vic3lzX2RlZiB3aWxsIGJlIGEgbWFjcm8gd2l0aCBnc3QtZGVidWcKLSAgZGVmaW5lKFtzdWJzeXNfZGVmXSx0cmFuc2xpdChbJDFdLCBfQS1aLCAtYS16KSkKLQotICBBQ19BUkdfRU5BQkxFKHN1YnN5c19kZWYsCi0gICAgQUNfSEVMUF9TVFJJTkcoLS1kaXNhYmxlLXN1YnN5c19kZWYsIFtkaXNhYmxlICQyXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEdTVF9ESVNBQkxFX1skMV09bm8gOzsKLSAgICAgICAgbm8pIEdTVF9ESVNBQkxFX1skMV09eWVzIDs7Ci0gICAgICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc3Vic3lzX2RlZl0pIDs7Ci0gICAgICAgZXNhYwotICAgIF0sCi0gICAgW0dTVF9ESVNBQkxFX1skMV09bm9dKSBkbmwgRGVmYXVsdCB2YWx1ZQotCi0gIGlmIHRlc3QgeCRHU1RfRElTQUJMRV9bJDFdID0geHllczsgdGhlbgotICAgIEFDX01TR19OT1RJQ0UoW2Rpc2FibGVkIHN1YnN5c3RlbSBbJDJdXSkKLSAgICBHU1RfRElTQUJMRV9bJDFdX0RFRklORT0iI2RlZmluZSBHU1RfRElTQUJMRV8kMSAxIgotICBlbHNlCi0gICAgR1NUX0RJU0FCTEVfWyQxXV9ERUZJTkU9Ii8qICN1bmRlZiBHU1RfRElTQUJMRV8kMSAqLyIKLSAgZmkKLSAgQUNfU1VCU1QoR1NUX0RJU0FCTEVfWyQxXV9ERUZJTkUpCi0gIHVuZGVmaW5lKFtzdWJzeXNfZGVmXSkKLV0pCi0KLQotZG5sIFBhcnNlIGdzdGNvbmZpZy5oIGZvciBmZWF0dXJlIGFuZCBkZWZpbmVzIGFkZCB0aGUgc3ltYm9scyBhbmQgc3Vic3RpdGlvbnMKLWRubAotZG5sIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRShHU1RfQ09ORklHUEFUSCwgRkVBVFVSRSkKLWRubAotQUNfREVGVU4oW0FHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRV0sCi1bCi0gIGdyZXAgPi9kZXYvbnVsbCAiI3VuZGVmIEdTVF9ESVNBQkxFXyQyIiAkMQotICBpZiB0ZXN0ICQ/ID0gMDsgdGhlbgotICAgIEdTVF9ESVNBQkxFX1skMl09MAotICBlbHNlCi0gICAgR1NUX0RJU0FCTEVfWyQyXT0xCi0gIGZpCi0gIEFDX1NVQlNUKEdTVF9ESVNBQkxFX1skMl0pCi1dKQotCi1kbmwgUGFyc2UgZ3N0Y29uZmlnLmggYW5kIGRlZmluZXMgYWRkIHRoZSBzeW1ib2xzIGFuZCBzdWJzdGl0aW9ucwotZG5sCi1kbmwgR1NUX0NPTkZJR1BBVEg9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9aW5jbHVkZWRpciBnc3RyZWFtZXItMS4wYCIvZ3N0L2dzdGNvbmZpZy5oIgotZG5sIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRVMoR1NUX0NPTkZJR1BBVEgpCi1kbmwKLUFDX0RFRlVOKFtBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEVTXSwKLVsKLSAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLEdTVF9ERUJVRykKLSAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLExPQURTQVZFKQotICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsUEFSU0UpCi0gIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxUUkFDRSkKLSAgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFKCQxLEFMTE9DX1RSQUNFKQotICBBR19HU1RfUEFSU0VfU1VCU1lTVEVNX0RJU0FCTEUoJDEsUkVHSVNUUlkpCi0gIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxQTFVHSU4pCi0gIEFHX0dTVF9QQVJTRV9TVUJTWVNURU1fRElTQUJMRSgkMSxYTUwpCi1dKQotCi1kbmwgQUdfR1NUX0NIRUNLX0dTVF9ERUJVR19ESVNBQkxFRChBQ1RJT04tSUYtRElTQUJMRUQsIEFDVElPTi1JRi1OT1QtRElTQUJMRUQpCi1kbmwKLWRubCBDaGVja3MgaWYgdGhlIEdTdHJlYW1lciBkZWJ1Z2dpbmcgc3lzdGVtIGlzIGRpc2FibGVkIGluIHRoZSBjb3JlIHZlcnNpb24KLWRubCB3ZSBhcmUgY29tcGlsaW5nIGFnYWluc3QgKGJ5IGNoZWNraW5nIGdzdGNvbmZpZy5oKQotZG5sCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0dTVF9ERUJVR19ESVNBQkxFRF0sCi1bCi0gIEFDX1JFUVVJUkUoW0FHX0dTVF9DSEVDS19HU1RdKQotCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgR1N0cmVhbWVyIGRlYnVnZ2luZyBzeXN0ZW0gaXMgZW5hYmxlZF0pCi0gIEFDX0xBTkdfUFVTSChbQ10pCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRHU1RfQ0ZMQUdTICRDRkxBR1MiCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFsKLSAgICBBQ19MQU5HX1NPVVJDRShbWwotICAgICAgI2luY2x1ZGUgPGdzdC9nc3Rjb25maWcuaD4KLSAgICAgICNpZmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICAgICNlcnJvciAiZGVidWdnaW5nIGRpc2FibGVkLCBtYWtlIGNvbXBpbGVyIGZhaWwiCi0gICAgICAjZW5kaWZdXSldLCBbIGRlYnVnX3N5c3RlbV9lbmFibGVkPXllc10sIFtkZWJ1Z19zeXN0ZW1fZW5hYmxlZD1ub10pCi0gIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotICBBQ19MQU5HX1BPUChbQ10pCi0KLSAgQUNfTVNHX1JFU1VMVChbJGRlYnVnX3N5c3RlbV9lbmFibGVkXSkKLQotICBpZiB0ZXN0ICJ4JGRlYnVnX3N5c3RlbV9lbmFibGVkIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAkMgotICAgIHRydWUKLSAgZWxzZQotICAgICQxCi0gICAgdHJ1ZQotICBmaQotXSkKLQotZG5sIHJlbGllcyBvbiBHU1RfUExVR0lOU19BTEwsIEdTVF9QTFVHSU5TX1NFTEVDVEVELCBHU1RfUExVR0lOU19ZRVMsCi1kbmwgR1NUX1BMVUdJTlNfTk8sIGFuZCBCVUlMRF9FWFRFUk5BTAotQUNfREVGVU4oW0FHX0dTVF9PVVRQVVRfUExVR0lOU10sIFsKLQotcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgYmUgYnVpbHQ6XG4iCi0oIGZvciBpIGluICRHU1RfUExVR0lOU19TRUxFQ1RFRDsgZG8gcHJpbnRmICdcdCckaSdcbic7IGRvbmUgKSB8IHNvcnQKLXByaW50ZiAiXG4iCi0KLXByaW50ZiAiY29uZmlndXJlOiAqKiogUGx1Zy1pbnMgd2l0aG91dCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgdGhhdCB3aWxsIE5PVCBiZSBidWlsdDpcbiIKLSggZm9yIGkgaW4gJEdTVF9QTFVHSU5TX0FMTDsgZG8KLSAgICBjYXNlICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgaW4KLSAgICAgICpcICRpXCAqKQotCTs7Ci0gICAgICAqKQotCXByaW50ZiAnXHQnJGknXG4nCi0JOzsKLSAgICBlc2FjCi0gIGRvbmUgKSB8IHNvcnQKLXByaW50ZiAiXG4iCi0KLXByaW50ZiAiY29uZmlndXJlOiAqKiogUGx1Zy1pbnMgdGhhdCBoYXZlIE5PVCBiZWVuIHBvcnRlZDpcbiIKLSggZm9yIGkgaW4gJEdTVF9QTFVHSU5TX05PTlBPUlRFRDsgZG8KLQlwcmludGYgJ1x0JyRpJ1xuJwotICBkb25lICkgfCBzb3J0Ci1wcmludGYgIlxuIgotCi1pZiB0ZXN0ICJ4JEJVSUxEX0VYVEVSTkFMIiA9ICJ4bm8iOyB0aGVuCi0gIHByaW50ZiAiY29uZmlndXJlOiAqKiogTm8gcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBidWlsdFxuIgotZWxzZQotICBwcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHdpdGggZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBiZSBidWlsdDoiCi0gIHByaW50ZiAiJEdTVF9QTFVHSU5TX1lFU1xuIiB8IHNvcnQKLSAgcHJpbnRmICJcbiIKLSAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB3aXRoIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgTk9UIGJlIGJ1aWx0OiIKLSAgcHJpbnRmICIkR1NUX1BMVUdJTlNfTk9cbiIgfCBzb3J0Ci0gIHByaW50ZiAiXG4iCi1maQotXSkKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNCBiL2NvbW1vbi9tNC9nc3QtZnVuY3Rpb24ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYWRmZDMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1mdW5jdGlvbi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLWRubAotZG5sIENoZWNrIGZvciBjb21waWxlciBtZWNoYW5pc20gdG8gc2hvdyBmdW5jdGlvbnMgaW4gZGVidWdnaW5nCi1kbmwgY29waWVkIGZyb20gYW4gQWxpIHBhdGNoIGZsb2F0aW5nIG9uIHRoZSBpbnRlcm5ldAotZG5sCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX0ZVTkNUSU9OXSxbCi0gIGRubCAjMTogX19QUkVUVFlfRlVOQ1RJT05fXwotICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX1BSRVRUWV9GVU5DVElPTl9fKQotICBBQ19DQUNIRV9WQUwoZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uLFsKLSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGlvLmg+XSwKLSAgICAgICAgICAgICAgICBbcHJpbnRmKCIlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pO10sCi0gICAgICAgICAgICAgICAgZ3N0X2N2X2hhdmVfcHJldHR5X2Z1bmN0aW9uPXllcywKLSAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9wcmV0dHlfZnVuY3Rpb249bm8pCi0gIF0pCi0gIEFDX01TR19SRVNVTFQoJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbikKLSAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9QUkVUVFlfRlVOQ1RJT04sIDEsCi0gICAgICAgICAgICAgIFtkZWZpbmVkIGlmIHRoZSBjb21waWxlciBpbXBsZW1lbnRzIF9fUFJFVFRZX0ZVTkNUSU9OX19dKQotICBmaQotCi1kbmwgIzI6IF9fRlVOQ1RJT05fXwotICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciAkQ0MgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX18pCi0gIEFDX0NBQ0hFX1ZBTChnc3RfY3ZfaGF2ZV9mdW5jdGlvbixbCi0gICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sCi0gICAgICAgICAgICAgICAgW3ByaW50ZigiJXMiLCBfX0ZVTkNUSU9OX18pO10sCi0gICAgICAgICAgICAgICAgZ3N0X2N2X2hhdmVfZnVuY3Rpb249eWVzLAotICAgICAgICAgICAgICAgIGdzdF9jdl9oYXZlX2Z1bmN0aW9uPW5vKQotICBdKQotICBBQ19NU0dfUkVTVUxUKCRnc3RfY3ZfaGF2ZV9mdW5jdGlvbikKLSAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX2Z1bmN0aW9uIiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0ZVTkNUSU9OLCAxLAotICAgICAgICAgICAgICBbZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX0ZVTkNUSU9OX19dKQotICBmaQotCi1kbmwgIzM6IF9fZnVuY19fCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBpbXBsZW1lbnRzIF9fZnVuY19fKQotICBBQ19DQUNIRV9WQUwoZ3N0X2N2X2hhdmVfZnVuYyxbCi0gICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRpby5oPl0sCi0gICAgICAgICAgICAgICAgW3ByaW50ZigiJXMiLCBfX2Z1bmNfXyk7XSwKLSAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9mdW5jPXllcywKLSAgICAgICAgICAgICAgICBnc3RfY3ZfaGF2ZV9mdW5jPW5vKQotICBdKQotICBBQ19NU0dfUkVTVUxUKCRnc3RfY3ZfaGF2ZV9mdW5jKQotICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuYyIgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9GVU5DLCAxLAotICAgICAgICAgICAgICBbZGVmaW5lZCBpZiB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBfX2Z1bmNfX10pCi0gIGZpCi0KLWRubCBub3cgZGVmaW5lIEZVTkNUSU9OIHRvIHdoYXRldmVyIHdvcmtzLCBhbmQgZmFsbGJhY2sgdG8gIiIKLSAgaWYgdGVzdCAiJGdzdF9jdl9oYXZlX3ByZXR0eV9mdW5jdGlvbiIgPSB5ZXM7IHRoZW4KLSAgICBmdW5jdGlvbj1fX1BSRVRUWV9GVU5DVElPTl9fCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuY3Rpb24iID0geWVzOyB0aGVuCi0gICAgICBmdW5jdGlvbj1fX0ZVTkNUSU9OX18KLSAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICIkZ3N0X2N2X2hhdmVfZnVuYyIgPSB5ZXM7IHRoZW4KLSAgICAgICAgZnVuY3Rpb249X19mdW5jX18KLSAgICAgIGVsc2UKLSAgICAgICAgZnVuY3Rpb249XCJcIgotICAgICAgZmkKLSAgICBmaQotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoR1NUX0ZVTkNUSU9OLCAkZnVuY3Rpb24sIFttYWNybyB0byB1c2UgdG8gc2hvdyBmdW5jdGlvbiBuYW1lXSkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgYi9jb21tb24vbTQvZ3N0LWdldHRleHQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmODE3ZWIuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotZG5sIGdldHRleHQgc2V0dXAKLQotZG5sIEFHX0dTVF9HRVRURVhUKFtnZXR0ZXh0LXBhY2thZ2VdKQotZG5sIGRlZmluZXMgR0VUVEVYVF9QQUNLQUdFIGFuZCBMT0NBTEVESVIKLQotQUNfREVGVU4oW0FHX0dTVF9HRVRURVhUXSwKLVsKLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICBHRVRURVhUX1BBQ0tBR0U9WyQxXQotICBlbHNlCi0gICAgR0VUVEVYVF9QQUNLQUdFPVtOVUxMXQotICBmaQotICBBQ19TVUJTVChHRVRURVhUX1BBQ0tBR0UpCi0gIEFDX0RFRklORV9VTlFVT1RFRChbR0VUVEVYVF9QQUNLQUdFXSwgIiRHRVRURVhUX1BBQ0tBR0UiLAotICAgICAgICAgICAgICAgICAgICAgW2dldHRleHQgcGFja2FnZSBuYW1lXSkKLQotICBkbmwgbWFrZSBzdXJlIHBvL01ha2V2YXJzIGlzIGtlcHQgaW4gc3luYyB3aXRoIEdFVFRFWFRfUEFDS0FHRQotICBpZiB0ZXN0IC1lICIke3NyY2Rpcn0vcG8vTWFrZXZhcnMiOyB0aGVuCi0gICAgaWYgISBncmVwIC1lICIkMSIgIiR7c3JjZGlyfS9wby9NYWtldmFycyI7IHRoZW4KLSAgICAgIEFDX01TR19FUlJPUihbRE9NQUlOIGluIHBvL01ha2V2YXJzIGRvZXMgbm90IG1hdGNoIEdFVFRFWFRfUEFDS0FHRSAkMV0pCi0gICAgZmkKLSAgZmkKLQotICBkbmwgZGVmaW5lIExPQ0FMRURJUiBpbiBjb25maWcuaAotICBBU19BQ19FWFBBTkQoTE9DQUxFRElSLCAkZGF0YWRpci9sb2NhbGUpCi0gIEFDX0RFRklORV9VTlFVT1RFRChbTE9DQUxFRElSXSwgIiRMT0NBTEVESVIiLAotICAgICAgICAgICAgICAgICAgICAgW2dldHRleHQgbG9jYWxlIGRpcl0pCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1nbGliMi5tNCBiL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNzI1MDcuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1nbGliMi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi1kbmwgY2hlY2sgZm9yIGEgbWluaW11bSB2ZXJzaW9uIG9mIEdMaWIKLQotZG5sIEFHX0dTVF9HTElCX0NIRUNLKFttaW5pbXVtLXZlcnNpb24tcmVxdWlyZWRdKQotCi1BQ19ERUZVTihbQUdfR1NUX0dMSUJfQ0hFQ0tdLAotWwotICBBQ19SRVFVSVJFKFtBU19OQU5PXSkKLQotICBkbmwgTWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIG9mIEdMaWIKLSAgR0xJQl9SRVE9WyQxXQotICBpZiB0ZXN0ICJ4JEdMSUJfUkVRIiA9ICJ4IgotICB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtQbGVhc2Ugc3BlY2lmeSBhIHJlcXVpcmVkIHZlcnNpb24gZm9yIEdMaWIgMi4wXSkKLSAgZmkKLSAgQUNfU1VCU1QoR0xJQl9SRVEpCi0KLSAgZG5sIENoZWNrIGZvciBnbGliIHdpdGggZXZlcnl0aGluZwotICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoR0xJQiwKLSAgICBnbGliLTIuMCA+PSAkR0xJQl9SRVEgZ29iamVjdC0yLjAgZ21vZHVsZS1uby1leHBvcnQtMi4wKQotCi0gIGlmIHRlc3QgIngkSEFWRV9HTElCIiA9ICJ4bm8iOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtUaGlzIHBhY2thZ2UgcmVxdWlyZXMgR0xpYiA+PSAkR0xJQl9SRVEgdG8gY29tcGlsZS5dKQotICBmaQotCi0gIGRubCBBZGQgZGVmaW5lIHRvIHRlbGwgR0xpYiB0aGF0IHRocmVhZGluZyBpcyBhbHdheXMgZW5hYmxlZCB3aXRoaW4gR1N0cmVhbWVyCi0gIGRubCBjb2RlIChvcHRpbWlzYXRpb24sIGJ5cGFzc2VzIGNoZWNrcyBpZiB0aGUgdGhyZWFkaW5nIHN5c3RlbSBpcyBlbmFibGVkCi0gIGRubCB3aGVuIHVzaW5nIHRocmVhZGluZyBwcmltaXRpdmVzKQotICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19USFJFQURTX01BTkRBVE9SWSIKLQotICBkbmwgRGVmaW5lIEdfRElTQUJMRV9ERVBSRUNBVEVEIGZvciBkZXZlbG9wbWVudCB2ZXJzaW9ucwotICBpZiB0ZXN0ICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUiAlIDJgIiA9ICJ4MSIgLWEgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JQ1JPICc8JyA5MGAiID0gIngxIjsgdGhlbgotICAgIEdMSUJfRVhUUkFfQ0ZMQUdTPSIkR0xJQl9FWFRSQV9DRkxBR1MgLURHX0RJU0FCTEVfREVQUkVDQVRFRCIKLSAgZmkKLQotICBBQ19BUkdfRU5BQkxFKGdvYmplY3QtY2FzdC1jaGVja3MsCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWdvYmplY3QtY2FzdC1jaGVja3NbPUA8OkBuby9hdXRvL3llc0A6PkBdXSwKLSAgICAgIFtFbmFibGUgR09iamVjdCBjYXN0IGNoZWNrc10pLFtlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz0kZW5hYmxldmFsXSwKLSAgICBbZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3M9YXV0b10pCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcyIgPSAieGF1dG8iOyB0aGVuCi0gICAgZG5sIFR1cm4gb24gY2FzdCBjaGVja3Mgb25seSBmb3IgZGV2ZWxvcG1lbnQgdmVyc2lvbnMKLSAgICBpZiB0ZXN0ICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUiAlIDJgIiA9ICJ4MSIgLWEgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JQ1JPICc8JyA5MGAiID0gIngxIjsgdGhlbgotICAgICAgZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3M9eWVzCi0gICAgZWxzZQotICAgICAgZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3M9bm8KLSAgICBmaQotICBmaQotCi0gIGlmIHRlc3QgIngkZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3MiID0gInhubyI7IHRoZW4KLSAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19ESVNBQkxFX0NBU1RfQ0hFQ0tTIgotICBmaQotCi0gIEFDX0FSR19FTkFCTEUoZ2xpYi1hc3NlcnRzLAotICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbGliLWFzc2VydHNbPUA8OkBuby95ZXNAOj5AXV0sCi0gICAgICBbRW5hYmxlIEdMaWIgYXNzZXJ0aW9uXSksW2VuYWJsZV9nbGliX2Fzc2VydGlvbnM9JGVuYWJsZXZhbF0sCi0gICAgW2VuYWJsZV9nbGliX2Fzc2VydGlvbnM9eWVzXSkKLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9nbGliX2Fzc2VydGlvbnMiID0gInhubyI7IHRoZW4KLSAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19ESVNBQkxFX0FTU0VSVCIKLSAgZmkKLQotICBkbmwgRmluZCBsb2NhdGlvbiBvZiBnbGliIHV0aWxzLiBQZW9wbGUgbWF5IHdhbnQgdG8gb3IgaGF2ZSB0byBvdmVycmlkZSB0aGVzZSwKLSAgZG5sIGUuZy4gaW4gYSBjcm9zcy1jb21waWxlIHNpdHVhdGlvbiB3aGVyZSBQQVRIIGlzIGEgYml0IG1lc3NlZCB1cC4gV2UgbmVlZAotICBkbmwgZm9yIHRoZXNlIHRvb2xzIHRvIHdvcmsgb24gdGhlIGhvc3QsIHNvIGNhbid0IGp1c3QgdXNlIHRoZSBvbmUgZnJvbSB0aGUKLSAgZG5sIEdMaWIgaW5zdGFsbGF0aW9uIHRoYXQgcGtnLWNvbmZpZyBwaWNrcyB1cCwgYXMgdGhhdCBtaWdodCBiZSBmb3IgYQotICBkbmwgZGlmZmVyZW50IHRhcmdldCBhcmNoaXRlY3R1cmUuCi0gIGRubAotICBkbmwgZ2xpYi1nZW5tYXJzaGFsOgotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdsaWItZ2VubWFyc2hhbCkKLSAgaWYgdGVzdCAieCRHTElCX0dFTk1BUlNIQUwiICE9ICJ4IjsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoWyRHTElCX0dFTk1BUlNIQUwgKGZyb20gZW52aXJvbm1lbnQpXSkKLSAgZWxzZQotICAgIEdMSUJfR0VOTUFSU0hBTD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nbGliX2dlbm1hcnNoYWwgZ2xpYi0yLjBgCi0gICAgaWYgJEdMSUJfR0VOTUFSU0hBTCAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgQUNfTVNHX1JFU1VMVChbJEdMSUJfR0VOTUFSU0hBTCAoZnJvbSBwa2ctY29uZmlnIHBhdGgpXSkKLSAgICBlbHNlCi0gICAgICBBQ19QQVRIX1BST0coR0xJQl9HRU5NQVJTSEFMLCBbZ2xpYi1nZW5tYXJzaGFsXSwgW2dsaWItZ2VubWFyc2hhbF0pCi0gICAgICBBQ19NU0dfUkVTVUxUKFskR0xJQl9HRU5NQVJTSEFMXSkKLSAgICBmaQotICBmaQotICBpZiAhICRHTElCX0dFTk1BUlNIQUwgLS12ZXJzaW9uIDI+L2Rldi9udWxsID4vZGV2L251bGw7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbJEdMSUJfR0VOTUFSU0hBTCBkb2VzIG5vdCBzZWVtIHRvIHdvcmshXSkKLSAgZmkKLSAgQUNfU1VCU1QoR0xJQl9HRU5NQVJTSEFMKQotCi0gIGRubCBnbGliLW1rZW51bXM6Ci0gIEFDX01TR19DSEVDS0lORyhmb3IgZ2xpYi1ta2VudW1zKQotICBpZiB0ZXN0ICJ4JEdMSUJfTUtFTlVNUyIgIT0gIngiOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChbJEdMSUJfTUtFTlVNUyAoZnJvbSBlbnZpcm9ubWVudCldKQotICBlbHNlCi0gICAgZG5sIGdsaWItbWtlbnVtcyBpcyB3cml0dGVuIGluIHBlcmwgc28gc2hvdWxkIGFsd2F5cyB3b3JrIHJlYWxseQotICAgIEdMSUJfTUtFTlVNUz1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1nbGliX21rZW51bXMgZ2xpYi0yLjBgCi0gICAgQUNfTVNHX1JFU1VMVChbJEdMSUJfTUtFTlVNU10pCi0gIGZpCi0gIGlmICEgJEdMSUJfTUtFTlVNUyAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbDsgdGhlbgotICAgIEFDX01TR19XQVJOKFskR0xJQl9NS0VOVU1TIGRvZXMgbm90IHNlZW0gdG8gd29yayFdKQotICBmaQotICBBQ19TVUJTVChHTElCX01LRU5VTVMpCi0KLSAgQUNfU1VCU1QoR0xJQl9FWFRSQV9DRkxBR1MpCi0KLSAgZG5sIE5vdyBjaGVjayBmb3IgR0lPCi0gIFBLR19DSEVDS19NT0RVTEVTKEdJTywgZ2lvLTIuMCA+PSAkR0xJQl9SRVEpCi0gIGlmIHRlc3QgIngkSEFWRV9HSU8iID0gInhubyI7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW1RoaXMgcGFja2FnZSByZXF1aXJlcyBHSU8gPj0gJEdMSUJfUkVRIHRvIGNvbXBpbGUuXSkKLSAgZmkKLSAgCi0gIEdJT19NT0RVTEVfRElSPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1naW9tb2R1bGVkaXIgZ2lvLTIuMGAiCi0gIEFDX0RFRklORV9VTlFVT1RFRChHSU9fTU9EVUxFX0RJUiwgIiRHSU9fTU9EVUxFX0RJUiIsCi0gICAgICBbVGhlIEdJTyBtb2R1bGVzIGRpcmVjdG9yeS5dKQotICBHSU9fTElCRElSPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1saWJkaXIgZ2lvLTIuMGAiCi0gIEFDX0RFRklORV9VTlFVT1RFRChHSU9fTElCRElSLCAiJEdJT19MSUJESVIiLAotICAgICAgW1RoZSBHSU8gbGlicmFyeSBkaXJlY3RvcnkuXSkKLSAgR0lPX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdpby0yLjBgIgotICBBQ19ERUZJTkVfVU5RVU9URUQoR0lPX1BSRUZJWCwgIiRHSU9fUFJFRklYIiwKLSAgICAgIFtUaGUgR0lPIGluc3RhbGwgcHJlZml4Ll0pCi0KLSAgQUNfU1VCU1QoR0lPX0NGTEFHUykKLSAgQUNfU1VCU1QoR0lPX0xJQlMpCi0gIEFDX1NVQlNUKEdJT19MREZMQUdTKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtbGlieG1sMi5tNCBiL2NvbW1vbi9tNC9nc3QtbGlieG1sMi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE4NDNmMC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LWxpYnhtbDIubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1kbmwgY2FsbCB0aGlzIG1hY3JvIHdpdGggdGhlIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBhcyBhbiBhcmd1bWVudAotZG5sIHRoaXMgbWFjcm8gc2V0cyBhbmQgQUNfU1VCU1RzIFhNTF9DRkxBR1MgYW5kIFhNTF9MSUJTCi1kbmwgaXQgYWxzbyBzZXRzIExJQlhNTF9QS0csIHVzZWQgZm9yIHRoZSBwa2ctY29uZmlnIGZpbGUKLQotQUNfREVGVU4oW0FHX0dTVF9MSUJYTUwyX0NIRUNLXSwKLVsKLSAgZG5sIE1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBvZiBsaWJ4bWwyCi0gIGRubCBkZWZhdWx0IHRvIDIuNC45IGlmIG5vdCBzcGVjaWZpZWQKLSAgTElCWE1MMl9SRVE9aWZlbHNlKFskMV0sLDIuNC45LFskMV0pCi0gIEFDX1NVQlNUKExJQlhNTDJfUkVRKQotCi0gIGRubCBjaGVjayBmb3IgbGlieG1sMgotICBQS0dfQ0hFQ0tfTU9EVUxFUyhYTUwsIGxpYnhtbC0yLjAgPj0gJExJQlhNTDJfUkVRLAotICAgICAgICAgICAgICAgICAgICBIQVZFX0xJQlhNTDI9eWVzLCBbCi0gICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgICAgICAgICAgICAgICAgICBIQVZFX0xJQlhNTDI9bm8KLSAgICAgICAgICAgICAgICAgICAgXSkKLSAgaWYgdGVzdCAieCRIQVZFX0xJQlhNTDIiID0gInh5ZXMiOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfTElCWE1MMiwgMSwgW0RlZmluZSBpZiBsaWJ4bWwyIGlzIGF2YWlsYWJsZV0pCi0gIGVsc2UKLSAgICBBQ19NU0dfRVJST1IoWwotICAgICAgICBOZWVkIGxpYnhtbDIgYW5kIGRldmVsb3BtZW50IGhlYWRlcnMvZmlsZXMgdG8gYnVpbGQgR1N0cmVhbWVyLgotCi0gICAgICAgIFlvdSBjYW4gZG8gd2l0aG91dCBsaWJ4bWwyIGlmIHlvdSBwYXNzIC0tZGlzYWJsZS1sb2Fkc2F2ZSB0bwotICAgICAgICBjb25maWd1cmUsIGJ1dCB0aGF0IGJyZWFrcyBBQkksIHNvIGRvbid0IGRvIHRoYXQgdW5sZXNzIHlvdQotICAgICAgICBhcmUgYnVpbGRpbmcgZm9yIGFuIGVtYmVkZGVkIHNldHVwIGFuZCBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KLSAgICBdKQotICBmaQotICBkbmwgdGhpcyBpcyBmb3IgdGhlIC5wYyBmaWxlCi0gIExJQlhNTF9QS0c9JywgbGlieG1sLTIuMCcKLSAgQUNfU1VCU1QoTElCWE1MX1BLRykKLSAgQUNfU1VCU1QoWE1MX0xJQlMpCi0gIEFDX1NVQlNUKFhNTF9DRkxBR1MpCi0KLSAgZG5sIFhNTF9MSUJTIG1pZ2h0IHB1bGwgaW4gLWx6IHdpdGhvdXQgemxpYiBhY3R1YWxseSBiZWluZyBvbiB0aGUgc3lzdGVtLCBzbwotICBkbmwgdHJ5IGxpbmtpbmcgd2l0aCB0aGVzZSBMSUJTIGFuZCBDRkxBR1MKLSAgYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBhY19zYXZlX0xJQlM9JExJQlMKLSAgQ0ZMQUdTPSIkQ0ZMQUdTICRYTUxfQ0ZMQUdTIgotICBMSUJTPSIkTElCUyAkWE1MX0xJQlMiCi0gIEFDX1RSWV9MSU5LKFsKLSNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1dLFsKLS8qIGZ1bmN0aW9uIGJvZHkgKi8KLV0sCi0gICAgQUNfTVNHX05PVElDRShbVGVzdCB4bWwyIHByb2dyYW0gbGlua2VkXSksCi0gICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgbGluayBsaWJ4bWwyIHRlc3QgcHJvZ3JhbS4gIENoZWNrIGlmIHlvdSBoYXZlIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLl0pCi0gICkKLSAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gIExJQlM9IiRhY19zYXZlX0xJQlMiCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgYi9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmNDRlNi4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLWRubCBtYWNyb3MgdG8gc2V0IEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FCi1kbmwKLWRubCBVc2FnZToKLWRubAotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKCkKLWRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbbm9dLi4uKQotZG5sIHNldHMgdGhlIHJlbGVhc2UgZGF0ZXRpbWUgdG8gdGhlIGN1cnJlbnQgZGF0ZQotZG5sIChubyA9IHRoaXMgaXMgbm90IGEgcmVsZWFzZSwgYnV0IGdpdCBvciBwcmVyZWxlYXNlKQotZG5sCi1kbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW1lZWVktTU0tRERdKQotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFt5ZXNdLCBbWVlZWS1NTS1ERF0pCi1kbmwgc2V0cyB0aGUgcmVsZWFzZSBkYXRldGltZSB0byB0aGUgc3BlY2lmaWVkIGRhdGUgKGFuZCB0aW1lLCBpZiBnaXZlbikKLWRubCAoeWVzID0gdGhpcyBpcyBhIHJlbGVhc2UsIG5vdCBnaXQgb3IgcHJlcmVsZWFzZSkKLWRubAotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFt5ZXNdLCBbRE9BUC1GSUxFXSwgW1JFTEVBU0UtVkVSU0lPTl0pCi1kbmwgc2V0cyB0aGUgcmVsZWFzZSBkYXRlIHRvIHRoZSByZWxlYXNlIGRhdGUgYXNzb2NpYXRlZCB3aXRoIHZlcnNpb24KLWRubCBSRUxFQVNFLVZFUlNJT04gaW4gdGhlIC5kb2FwIGZpbGUgRE9BUC1GSUxFCi1kbmwgKHllcyA9IHRoaXMgaXMgYSByZWxlYXNlLCBub3QgZ2l0IG9yIHByZXJlbGVhc2UpCi1kbmwKLWRubCBXZSBuZWVkIHRvIHRyZWF0IHByZS1yZWxlYXNlcyBsaWtlIGdpdCBiZWNhdXNlIHRoZXJlIHdvbid0IGJlIGFuIGVudHJ5Ci1kbmwgaW4gdGhlIC5kb2FwIGZpbGUgZm9yIHByZS1yZWxlYXNlcyB5ZXQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUKLWRubCBkYXRlIG9mIHRoZSBsYXN0IHJlbGVhc2UgZWl0aGVyLgotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQUNfREVGVU4oW0FHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FXSwKLVsKLSAgZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKCkKLSAgZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FKFtub10uLi4pCi0gIGlmIHRlc3QgIngkMSIgPSAieG5vIiAtbyAieCQxIiA9ICJ4IjsgdGhlbgotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9YGRhdGUgLXUgIislWS0lbS0lZFQlSDolTVoiYAotICBlbGlmIHRlc3QgIngkMSIgPSAieHllcyI7IHRoZW4KLSAgICBkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW3llc10sIFtZWVlZLU1NLUREXSkKLSAgICBkbmwgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW3llc10sIFtET0FQLUZJTEVdLCBbUkVMRUFTRS1WRVJTSU9OXSkKLWNoYW5nZXF1b3RlKDw8LCA+PilkbmwKLSAgICBpZiAoIGVjaG8gJDIgfCBncmVwICdeMjBbMS05XVswLTldLVswLTFdWzAtOV0tWzAtM11bMC05XScgPi9kZXYvbnVsbCApIDsgdGhlbgotY2hhbmdlcXVvdGUoWywgXSlkbmwKLSAgICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9JDIKLSAgICBlbHNlCi0gICAgICBkbmwgd2UgYXNzdW1lIHRoZSAuZG9hcCBmaWxlIGNvbnRhaW5zIHRoZSBkYXRlIGFzIFlZWVktTU0tREQKLSAgICAgIFlZWVlfTU1fREQ9YHNoICIke3NyY2Rpcn0vY29tbW9uL2V4dHJhY3QtcmVsZWFzZS1kYXRlLWZyb20tZG9hcC1maWxlIiAkMyAkMmA7Ci0gICAgICBpZiB0ZXN0ICJ4JFlZWVlfTU1fREQiICE9ICJ4IjsgdGhlbgotICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSRZWVlZX01NX0RECi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19FUlJPUihbU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogY291bGQgbm90IGV4dHJhY3QKLSAgICAgICAgICAgIHJlbGVhc2UgZGF0ZSBmb3IgcmVsZWFzZSB2ZXJzaW9uICQzIGZyb20gJDJdKQotICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSIiCi0gICAgICBmaQotICAgIGZpCi0gIGRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbWVlZWS1NTS1ERF0pCi1jaGFuZ2VxdW90ZSg8PCwgPj4pZG5sCi0gIGVsaWYgKCBlY2hvICQxIHwgZ3JlcCAnXjIwWzEtOV1bMC05XS1bMC0xXVswLTldLVswLTNdWzAtOV0nID4vZGV2L251bGwgKSA7IHRoZW4KLWNoYW5nZXF1b3RlKFssIF0pZG5sCi0gICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kMQotICBlbHNlCi0gICAgQUNfTVNHX1dBUk4oW1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU6IGludmFsaWQgZmlyc3QgYXJndW1lbnRdKQotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID0gIngiOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW0ludmFsaWQgcGFja2FnZSByZWxlYXNlIGRhdGUgdGltZTogJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUVdKQotICBlbHNlCi0gICAgQUNfTVNHX05PVElDRShbU2V0dGluZyBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHRvICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FXSkKLQotICAgIEFDX0RFRklORV9VTlFVT1RFRChbR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRV0sCi0gICAgICAgIFsiJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiXSwKLSAgICAgICAgW0dTdHJlYW1lciBwYWNrYWdlIHJlbGVhc2UgZGF0ZS90aW1lIGZvciBwbHVnaW5zIGFzIFlZWVktTU0tRERdKQotICBmaQotXSkKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FX1dJVEhfTkFOTwotZG5sCi1kbmwgVXNhZ2U6Ci1kbmwKLWRubCBBR19HU1RfU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRShbTkFOTy1WRVJTSU9OXSwgW0RPQVAtRklMRV0sIFtSRUxFQVNFLVZFUlNJT05dKQotZG5sIGlmIE5BTk8tVkVSU0lPTiBpcyAwLCBzZXRzIHRoZSByZWxlYXNlIGRhdGUgdG8gdGhlIHJlbGVhc2UgZGF0ZSBhc3NvY2lhdGVkCi1kbmwgd2l0aCB2ZXJzaW9uIFJFTEVBU0UtVkVSU0lPTiBpbiB0aGUgLmRvYXAgZmlsZSBET0FQLUZJTEUsIG90aGVyd2lzZSBzZXRzCi1kbmwgdGhlIHJlbGVhc2UgZGF0ZSBhbmQgdGltZSB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuCi1kbmwKLWRubCBXZSBuZWVkIHRvIHRyZWF0IHByZS1yZWxlYXNlcyBsaWtlIGdpdCBiZWNhdXNlIHRoZXJlIHdvbid0IGJlIGFuIGVudHJ5Ci1kbmwgaW4gdGhlIC5kb2FwIGZpbGUgZm9yIHByZS1yZWxlYXNlcyB5ZXQsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUKLWRubCBkYXRlIG9mIHRoZSBsYXN0IHJlbGVhc2UgZWl0aGVyLgotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQUNfREVGVU4oW0FHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FX1dJVEhfTkFOT10sCi1bCi0gIGlmIHRlc3QgIngkMSIgPSAieDAiOyB0aGVuCi0gICAgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW3llc10sIFsgJDIgXSwgWyAkMyBdKQotICBlbHNlCi0gICAgQUdfR1NUX1NFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUoW25vXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXBhcnNlci5tNCBiL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODJlZjcyLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtcGFyc2VyLm00CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotQUNfREVGVU4oW0FHX0dTVF9CSVNPTl9DSEVDS10sCi1bCi0gIGRubCBGSVhNRTogY2hlY2sgaWYgQUNfUFJPR19ZQUNDIGlzIHN1aXRhYmxlIGhlcmUKLSAgZG5sIEZJWE1FOiBtYWtlIHByZWNpb3VzCi0gIEFDX1BBVEhfUFJPRyhCSVNPTl9QQVRILCBiaXNvbiwgbm8pCi0gIGlmIHRlc3QgeCRCSVNPTl9QQVRIID0geG5vOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKENvdWxkIG5vdCBmaW5kIGJpc29uKQotICBmaQotCi0gIGRubCBjaGVjayBiaXNvbiB2ZXJzaW9uCi0gIGRubCB3ZSBuZWVkIHZlcnNpb24gPj0gMi40IGZvciB0aGUgJzw+JyBzdXBwb3J0Ci0gIGRubCBpbiB0aGUgcGFyc2VyLgotICBkbmwgRmlyc3QgbGluZXMgb2JzZXJ2ZWQ6ICdiaXNvbiAoR05VIEJpc29uKSAyLjMnIG9yICdHTlUgQmlzb24gdmVyc2lvbiAxLjI4JwotICBiaXNvbl9taW5fdmVyc2lvbj0yLjQKLSAgYmlzb25fdmVyc2lvbj1gJEJJU09OX1BBVEggLS12ZXJzaW9uIHwgaGVhZCAtbiAxIHwgIHNlZCAncy9eW1teMC05XV0qLy8nIHwgc2VkICdzL1tbXjAtOV1dKiQvLycgfCBjdXQgLWQnICcgLWYxYAotICBBQ19NU0dfQ0hFQ0tJTkcoW2Jpc29uIHZlcnNpb24gJGJpc29uX3ZlcnNpb24gPj0gJGJpc29uX21pbl92ZXJzaW9uXSkKLQotICBpZiBwZXJsIC13ZSAiZXhpdCAoKCd2JGJpc29uX3ZlcnNpb24nIGdlICd2JGJpc29uX21pbl92ZXJzaW9uJykgPyAwIDogMSkiOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgZWxzZQotICAgIEFDX01TR19FUlJPUihbbm9dKQotICBmaQotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9GTEVYX0NIRUNLXSwKLVsKLSAgZG5sIHdlIHJlcXVpcmUgZmxleCBmb3IgYnVpbGRpbmcgdGhlIHBhcnNlcgotICBBQ19QQVRIX1BST0coRkxFWF9QQVRILCBmbGV4LCBubykKLSAgaWYgdGVzdCB4JEZMRVhfUEFUSCA9IHhubzsgdGhlbgotICAgIEFDX01TR19FUlJPUihDb3VsZCBub3QgZmluZCBmbGV4KQotICBmaQotCi0gIGRubCBjaGVjayBmbGV4IHZlcnNpb24KLSAgZG5sIHdlIG5lZWQgdmVyc2lvbiA+PSAyLjUuMzEgZm9yIHRoZSByZWVudHJhbmN5IHN1cHBvcnQKLSAgZG5sIGluIHRoZSBwYXJzZXIuCi0gIGZsZXhfbWluX3ZlcnNpb249Mi41LjMxCi0gIGZsZXhfdmVyc2lvbj1gJEZMRVhfUEFUSCAtLXZlcnNpb24gfCBoZWFkIC1uIDEgfCBhd2sgJ3twcmludCAkMn0nYAotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZsZXggdmVyc2lvbiAkZmxleF92ZXJzaW9uID49ICRmbGV4X21pbl92ZXJzaW9uXSkKLSAgaWYgcGVybCAtdyA8PEVPRgotICAgIChcJG1pbl92ZXJzaW9uX21ham9yLCBcJG1pbl92ZXJzaW9uX21pbm9yLCBcJG1pbl92ZXJzaW9uX21pY3JvICkgPSAiJGZsZXhfbWluX3ZlcnNpb24iID1+IC8oXGQrKVwuKFxkKylcLihcZCspLzsKLSAgICAoXCRmbGV4X3ZlcnNpb25fbWFqb3IsIFwkZmxleF92ZXJzaW9uX21pbm9yLCBcJGZsZXhfdmVyc2lvbl9taWNybyApID0gIiRmbGV4X3ZlcnNpb24iID1+IC8oXGQrKVwuKFxkKylcLihcZCspLzsKLSAgICBleGl0ICgoKFwkZmxleF92ZXJzaW9uX21ham9yID4gXCRtaW5fdmVyc2lvbl9tYWpvcikgfHwKLSAgICAgKChcJGZsZXhfdmVyc2lvbl9tYWpvciA9PSBcJG1pbl92ZXJzaW9uX21ham9yKSAmJgotICAgICAgKFwkZmxleF92ZXJzaW9uX21pbm9yID4gXCRtaW5fdmVyc2lvbl9taW5vcikpIHx8Ci0gICAgICgoXCRmbGV4X3ZlcnNpb25fbWFqb3IgPT0gXCRtaW5fdmVyc2lvbl9tYWpvcikgJiYKLSAgICAgIChcJGZsZXhfdmVyc2lvbl9taW5vciA9PSBcJG1pbl92ZXJzaW9uX21pbm9yKSAmJgotICAgICAgKFwkZmxleF92ZXJzaW9uX21pY3JvID49IFwkbWluX3ZlcnNpb25fbWljcm8pKSkKLSAgICAgPyAwIDogMSk7Ci1FT0YKLSAgdGhlbgotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBlbHNlCi0gICAgQUNfTVNHX0VSUk9SKFtub10pCi0gIGZpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBiL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZDZmYWYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLWRubCBBR19HU1RfUExBVEZPUk0KLWRubCBDaGVjayBmb3IgcGxhdGZvcm0gc3BlY2lmaWMgZmVhdHVyZXMgYW5kIGRlZmluZSBzb21lIHZhcmlhYmxlcwotZG5sCi1kbmwgR1NUX0VYVFJBX01PRFVMRV9TVUZGSVg6IGNvbnRhaW5zIGEgcGxhdGZvcm0gc3BlY2lmaWMKLWRubCAgIGV4dHJhIG1vZHVsZSBzdWZmaXggYWRkaXRpb25hbCB0byBHX01PRFVMRV9TVUZGSVgKLWRubAotZG5sIEhBVkVfT1NYOiBEZWZpbmVkIGlmIGNvbXBpbGluZyBmb3IgT1MgWAotZG5sCi1kbmwgR1NUX0hBVkVfVU5TQUZFX0ZPUks6IERlZmluZWQgaWYgZm9yayBpcyB1bnNhZmUgKFdpbmRvd3MpCi1kbmwKLWRubCBIQVZFX1dJTjMyOiBEZWZpbmVkIGlmIGNvbXBpbGluZyBvbiBXaW4zMgotZG5sCi0KLUFDX0RFRlVOKFtBR19HU1RfUExBVEZPUk1dLAotWwotICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KikKLSAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHU1RfRVhUUkFfTU9EVUxFX1NVRkZJWCwgWyIuZHlsaWIiXSwgW0V4dHJhIHBsYXRmb3JtIHNwZWNpZmljIHBsdWdpbiBzdWZmaXhdKQotICAgICAgOzsKLSAgICBkYXJ3aW4qKQotICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9FWFRSQV9NT0RVTEVfU1VGRklYLCBbIi5keWxpYiJdLCBbRXh0cmEgcGxhdGZvcm0gc3BlY2lmaWMgcGx1Z2luIHN1ZmZpeF0pCi0gICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9PU1gsIDEsIFtEZWZpbmVkIGlmIGNvbXBpbGluZyBmb3IgT1NYXSkKLSAgICAgIDs7Ci0gICAgY3lnd2luKikKLSAgICAgIEFDX0RFRklORV9VTlFVT1RFRChHU1RfSEFWRV9VTlNBRkVfRk9SSywgMSwgW0RlZmluZWQgd2hlbiByZWdpc3RyeSBzY2FubmluZyB0aHJvdWdoIGZvcmsgaXMgdW5zYWZlXSkKLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgbXN2YyogfCBta3MqKQotICAgICAgZG5sIEhBVkVfV0lOMzIgY3VycmVudGx5IG1lYW5zICJkaXNhYmxlIFBPU0lYaXNtcyIuCi0gICAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9XSU4zMiwgMSwgW0RlZmluZWQgaWYgY29tcGlsaW5nIGZvciBXaW5kb3dzXSkKLQotICAgICAgZG5sIGRlZmluZSBfX01TVkNSVF9WRVJTSU9OX18gdmVyc2lvbiBpZiBub3Qgc2V0IGFscmVhZHkgYnkgdGhlCi0gICAgICBkbmwgY29tcGlsZXIgKGllLiBtb3N0bHkgZm9yIG1pbmd3KS4gVGhpcyBpcyBuZWVkZWQgZm9yIHRoaW5ncyBsaWtlCi0gICAgICBkbmwgX19zdGF0NjQgdG8gYmUgYXZhaWxhYmxlLiBJZiBzZXQgYnkgdGhlIGNvbXBpbGVyLCBlbnN1cmUgaXQncwotICAgICAgZG5sIG5ldyBlbm91Z2ggLSB3ZSBuZWVkIGF0IGxlYXN0IFdpblhQIFNQMi4KLSAgICAgIEFDX1RSWV9DT01QSUxFKFsgXSwgWyByZXR1cm4gX19NU1ZDUlRfVkVSU0lPTl9fOyBdLCBbCi0gICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyBdLCBbCi0gICAgICAgICAgICAjaWYgX19NU1ZDUlRfVkVSU0lPTl9fIDwgMHgwNjAxCi0gICAgICAgICAgICAjZXJyb3IgIk1TVkNSVCB0b28gb2xkIgotICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgXSwgWwotICAgICAgICAgICAgQUNfTVNHX05PVElDRShbTVNWQ1JUIHZlcnNpb24gbG9va3Mgb2tdKQotICAgICAgICAgIF0sIFsKLSAgICAgICAgICAgIEFDX01TR19FUlJPUihbTVNWQ1JUIHZlcnNpb24gdG9vIG9sZCwgbmVlZCBhdCBsZWFzdCBXaW5YUCBTUDJdKQotICAgICAgICAgIF0pCi0gICAgICBdLCBbCi0gICAgICAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgTVNWQ1JUIHZlcnNpb24gdG8gMHgwNjAxXSkKLSAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKF9fTVNWQ1JUX1ZFUlNJT05fXywgMHgwNjAxLCBbV2UgbmVlZCBhdCBsZWFzdCBXaW5YUCBTUDIgZm9yIF9fc3RhdDY0XSkKLSAgICAgIF0pCi0gICAgICA7OwotICAgICAqKQotICAgICAgOzsKLSAgZXNhYwotXSkKLQotQUNfREVGVU4oW0FHX0dTVF9MSUJUT09MX1BSRVBBUkVdLAotWwotICBkbmwgUGVyc3VhZGUgbGlidG9vbCB0byBhbHNvIGxpbmsgKC1sKSBhICdwdXJlJyAoRGlyZWN0WCkgc3RhdGljIGxpYiwKLSAgZG5sIGkuZS4gYXMgb3Bwb3NlZCB0byBvbmx5IGltcG9ydCBsaWIgd2l0aCBkbGwgY291bnRlcnBhcnQuCi0gIGRubCBOZWVkcyB0byBiZSB0d2Vha2VkIGJlZm9yZSBsaWJ0b29sJ3MgY2hlY2tzLgotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi1dKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgYi9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTJhYjZlLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1kbmwgQUdfR1NUX1BMVUdJTl9ET0NTKFtNSU5JTVVNLUdUSy1ET0MtVkVSU0lPTl0pCi1kbmwKLWRubCBjaGVja3MgZm9yIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBjb21tb24vbWFuZ2xlLXRtcGwucHkgc2NyaXB0Ci1kbmwgdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBwbHVnaW4gZG9jdW1lbnRhdGlvbgotCi1BQ19ERUZVTihbQUdfR1NUX1BMVUdJTl9ET0NTXSwKLVsKLSAgQUNfQkVGT1JFKFtHVEtfRE9DX0NIRUNLXSxbJDBdKWRubCBjaGVjayBmb3IgZ3RrLWRvYyBmaXJzdAotICBBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pZG5sIGZpbmQgcHl0aG9uIGZpcnN0Ci0KLSAgYnVpbGRfcGx1Z2luX2RvY3M9bm8KLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHBsdWdpbiBkb2N1bWVudGF0aW9uXSkKLSAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgotICAgIGlmIHRlc3QgeCRQWVRIT04gIT0geDsgdGhlbgotICAgICAgYnVpbGRfcGx1Z2luX2RvY3M9eWVzCi0gICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotICAgIGVsc2UKLSAgICAgIEFDX01TR19SRVNVTFQoW25vIChweXRob24gbm90IGZvdW5kKV0pCi0gICAgZmkKLSAgZWxzZQotICAgIEFDX01TR19SRVNVTFQoW25vIChndGstZG9jIGRpc2FibGVkIG9yIG5vdCBhdmFpbGFibGUpXSkKLSAgZmkKLQotICBBTV9DT05ESVRJT05BTChFTkFCTEVfUExVR0lOX0RPQ1MsIHRlc3QgeCRidWlsZF9wbHVnaW5fZG9jcyA9IHh5ZXMpCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgYi9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzllMTMwMS4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRubCBBR19HU1RfU0VUX1BMVUdJTkRJUgotCi1kbmwgQUNfREVGSU5FIFBMVUdJTkRJUiB0byB0aGUgZnVsbCBsb2NhdGlvbiB3aGVyZSBwbHVnLWlucyB3aWxsIGJlIGluc3RhbGxlZAotZG5sIEFDX1NVQlNUIHBsdWdpbmRpciwgdG8gYmUgdXNlZCBpbiBNYWtlZmlsZS5hbSdzCi0KLUFDX0RFRlVOKFtBR19HU1RfU0VUX1BMVUdJTkRJUl0sCi1bCi0gIGRubCBkZWZpbmUgbG9jYXRpb24gb2YgcGx1Z2luIGRpcmVjdG9yeQotICBBU19BQ19FWFBBTkQoUExVR0lORElSLCAke2xpYmRpcn0vZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04pCi0gIEFDX0RFRklORV9VTlFVT1RFRChQTFVHSU5ESVIsICIkUExVR0lORElSIiwKLSAgICBbZGlyZWN0b3J5IHdoZXJlIHBsdWdpbnMgYXJlIGxvY2F0ZWRdKQotICBBQ19NU0dfTk9USUNFKFtVc2luZyAkUExVR0lORElSIGFzIHRoZSBwbHVnaW4gaW5zdGFsbCBsb2NhdGlvbl0pCi0KLSAgZG5sIHBsdWdpbiBkaXJlY3RvcnkgY29uZmlndXJlLXRpbWUgdmFyaWFibGUgZm9yIHVzZSBpbiBNYWtlZmlsZS5hbQotICBwbHVnaW5kaXI9IlwkKGxpYmRpcikvZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT04iCi0gIEFDX1NVQlNUKHBsdWdpbmRpcikKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXZhbGdyaW5kLm00IGIvY29tbW9uL200L2dzdC12YWxncmluZC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwZDYwOC4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvZ3N0LXZhbGdyaW5kLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotQUNfREVGVU4oW0FHX0dTVF9WQUxHUklORF9DSEVDS10sCi1bCi0gIGRubCB2YWxncmluZCBpbmNsdXNpb24KLSAgQUNfQVJHX0VOQUJMRSh2YWxncmluZCwKLSAgICBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZhbGdyaW5kXSwgW2Rpc2FibGUgcnVuLXRpbWUgdmFsZ3JpbmQgZGV0ZWN0aW9uXSksCi0gICAgWwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9WQUxHUklORD0iJFVTRV9ERUJVRyIgOzsKLSAgICAgICAgbm8pICBVU0VfVkFMR1JJTkQ9bm8gOzsKLSAgICAgICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXZhbGdyaW5kKSA7OwotICAgICAgZXNhY10sCi0gICAgWwotICAgICAgVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIgotICAgIF0pIGRubCBEZWZhdWx0IHZhbHVlCi0KLSAgVkFMR1JJTkRfUkVRPSIzLjAiCi0gIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KLSAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhWQUxHUklORCwgdmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSwKLSAgICAgIFVTRV9WQUxHUklORD0ieWVzIiwKLSAgICAgIFsKLSAgICAgICAgVVNFX1ZBTEdSSU5EPSJubyIKLSAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgICAgXSkKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JFVTRV9WQUxHUklORCIgPSB4eWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfVkFMR1JJTkQsIDEsIFtEZWZpbmUgaWYgdmFsZ3JpbmQgc2hvdWxkIGJlIHVzZWRdKQotICAgIEFDX01TR19OT1RJQ0UoVXNpbmcgZXh0cmEgY29kZSBwYXRocyBmb3IgdmFsZ3JpbmQpCi0gIGZpCi0gIEFDX1NVQlNUKFZBTEdSSU5EX0NGTEFHUykKLSAgQUNfU1VCU1QoVkFMR1JJTkRfTElCUykKLQotICBBQ19QQVRIX1BST0coVkFMR1JJTkRfUEFUSCwgdmFsZ3JpbmQsIG5vKQotICBBTV9DT05ESVRJT05BTChIQVZFX1ZBTEdSSU5ELCB0ZXN0ICEgIngkVkFMR1JJTkRfUEFUSCIgPSAieG5vIikKLV0pCmRpZmYgLS1naXQgYS9jb21tb24vbTQvZ3N0LXgxMS5tNCBiL2NvbW1vbi9tNC9nc3QteDExLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDFkZGZmLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QteDExLm00CisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotZG5sIG1hY3JvcyBmb3IgWC1yZWxhdGVkIGRldGVjdGlvbnMKLWRubCBBQ19TVUJTVCdzIEhBVkVfWCwgWF9DRkxBR1MsIFhfTElCUwotQUNfREVGVU4oW0FHX0dTVF9DSEVDS19YXSwKLVsKLSAgQUNfUEFUSF9YVFJBCi0gIGFjX2NmbGFnc19zYXZlPSIkQ0ZMQUdTIgotICBhY19jcHBmbGFnc19zYXZlPSIkQ1BQRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAkWF9DRkxBR1MiCi0gIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFhfQ0ZMQUdTIgotCi0gIGRubCBub3cgdHJ5IHRvIGZpbmQgdGhlIEhFQURFUgotICBIQVZFX1g9Im5vIgotICBBQ19DSEVDS19IRUFERVIoW1gxMS9YbGliLmhdLCBbCi0gICAgZG5sIGFuZCB0aGVuIHRoZSBsaWJyYXJ5IHdpdGggdGhlIG1vc3QgdW5pcXVpdG91cyBmdW5jdGlvbgotICAgIEFDX0NIRUNLX0xJQihYMTEsIFtYU3luY10sIFtIQVZFX1g9InllcyJdLCBbXSwgWyRYX0xJQlMgJFhfUFJFX0xJQlMgJFhfRVhUUkFfTElCU10pCi0gIF0sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pCi0KLSAgaWYgdGVzdCAieCRIQVZFX1giID0gInhubyIKLSAgdGhlbgotICAgIEFDX01TR19OT1RJQ0UoW2Nhbm5vdCBmaW5kIFgxMSBkZXZlbG9wbWVudCBmaWxlc10pCi0gIGVsc2UKLSAgICBkbmwgdGhpcyBpcyBtdWNoIG1vcmUgdGhhbiB3ZSB3YW50Ci0gICAgWF9MSUJTPSIkWF9MSUJTICRYX1BSRV9MSUJTICRYX0VYVFJBX0xJQlMiCi0gICAgZG5sIEFDX1BBVEhfWFRSQSBvbmx5IGRlZmluZXMgdGhlIHBhdGggbmVlZGVkIHRvIGZpbmQgdGhlIFggbGlicywKLSAgICBkbmwgaXQgZG9lcyBub3QgYWRkIHRoZSBsaWJzOyB0aGVyZWZvcmUgd2UgYWRkIHRoZW0gaGVyZQotICAgIFhfTElCUz0iJFhfTElCUyAtbFgxMSIKLSAgICBBQ19TVUJTVChYX0NGTEFHUykKLSAgICBBQ19TVUJTVChYX0xJQlMpCi0gIGZpCi0gIEFDX1NVQlNUKEhBVkVfWCkKLQotICBDRkxBR1M9IiRhY19jZmxhZ3Nfc2F2ZSIKLSAgQ1BQRkxBR1M9IiRhY19jcHBmbGFnc19zYXZlIgotXSkKLQotZG5sICoqKiBYVmlkZW8gKioqCi1kbmwgTG9vayBmb3IgdGhlIFBJQyBsaWJyYXJ5IGZpcnN0LCBEZWJpYW4gcmVxdWlyZXMgaXQuCi1kbmwgQ2hlY2sgZGViaWFuLWRldmVsIGFyY2hpdmVzIGZvciBnb3J5IGRldGFpbHMuCi1kbmwgMjAwMjAxMTA6Ci1kbmwgQXQgdGhlIG1vbWVudCBYRnJlZTg2IGRvZXNuJ3QgZGlzdHJpYnV0ZSBzaGFyZWQgbGliWHYgZHVlCi1kbmwgdG8gdW5zdGFibGUgQVBJLiAgT24gbWFueSBwbGF0Zm9ybXMgeW91IENBTiBOT1QgbGluayBhIHNoYXJlZAotZG5sIGxpYiB0byBhIHN0YXRpYyBub24tUElDIGxpYi4gIFRoaXMgaXMgd2hhdCB0aGUgeHZpZGVvIEdTdHJlYW1lcgotZG5sIHBsdWctaW4gd2FudHMgdG8gZG8uICBTbyBEZWJpYW4gZGlzdHJpYnV0ZXMgYSBQSUMgY29tcGlsZWQKLWRubCB2ZXJzaW9uIG9mIHRoZSBzdGF0aWMgbGliIGZvciBwbHVnLWlucyB0byBsaW5rIHRvIHdoZW4gaXQgaXMKLWRubCBpbmFwcHJvcHJpYXRlIHRvIGxpbmsgdGhlIG1haW4gYXBwbGljYXRpb24gdG8gbGliWHYgZGlyZWN0bHkuCi1kbmwgRklYTUU6IGFkZCBjaGVjayBpZiB0aGlzIHBsYXRmb3JtIGNhbiBzdXBwb3J0IGxpbmtpbmcgdG8gYQotZG5sICAgICAgICBub24tUElDIGxpYlh2LCBpZiBub3QgdGhlbiBkb24gbm90IHVzZSBYdi4KLWRubCBGSVhNRTogcGVyaGFwcyB3YXJuIHVzZXIgaWYgdGhleSBoYXZlIGEgc2hhcmVkIGxpYlh2IHNpbmNlCi1kbmwgICAgICAgIHRoaXMgaXMgYW4gZXJyb3IgdW50aWwgWEZyZWU4NiBzdGFydHMgc2hpcHBpbmcgb25lCi1BQ19ERUZVTihbQUdfR1NUX0NIRUNLX1hWXSwKLVsKLSAgaWYgdGVzdCB4JEhBVkVfWCA9IHh5ZXM7IHRoZW4KLSAgICBBQ19DSEVDS19MSUIoWHZfcGljLCBYdlF1ZXJ5RXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICBIQVZFX1hWSURFTz0ieWVzIiwgSEFWRV9YVklERU89Im5vIiwKLSAgICAgICAgICAgICAgICAgJFhfTElCUyAtbFhleHQpCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9YVklERU8gPSB4eWVzOyB0aGVuCi0gICAgICBYVklERU9fTElCUz0iLWxYdl9waWMgLWxYZXh0IgotICAgICAgQUNfU1VCU1QoWFZJREVPX0xJQlMpCi0gICAgZWxzZQotICAgICAgZG5sIHRyeSBhZ2FpbiB1c2luZyBzb21ldGhpbmcgZWxzZSBpZiB3ZSBkaWRuJ3QgZmluZCBpdCBmaXJzdAotICAgICAgaWYgdGVzdCB4JEhBVkVfWFZJREVPID0geG5vOyB0aGVuCi0gICAgICAgIEFDX0NIRUNLX0xJQihYdiwgWHZRdWVyeUV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICBIQVZFX1hWSURFTz0ieWVzIiwgSEFWRV9YVklERU89Im5vIiwKLSAgICAgICAgICAgICAgICAgICAkWF9MSUJTIC1sWGV4dCkKLQotICAgICAgICBpZiB0ZXN0IHgkSEFWRV9YVklERU8gPSB4eWVzOyB0aGVuCi0gICAgICAgICAgWFZJREVPX0xJQlM9Ii1sWHYgLWxYZXh0IgotICAgICAgICAgIEFDX1NVQlNUKFhWSURFT19MSUJTKQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9nc3QubTQgYi9jb21tb24vbTQvZ3N0Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGM1M2NiLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9tNC9nc3QubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1kbmwgQUdfR1NUX0lOSVQKLWRubCBzZXRzIHVwIHVzZSBvZiBHU3RyZWFtZXIgY29uZmlndXJlLmFjIG1hY3JvcwotZG5sIGFsbCBHU3RyZWFtZXIgYXV0b2NvbmYgbWFjcm9zIGFyZSBwcmVmaXhlZAotZG5sIHdpdGggQUdfR1NUXyBmb3IgcHVibGljIG1hY3JvcwotZG5sIHdpdGggX0FHX0dTVF8gZm9yIHByaXZhdGUgbWFjcm9zCi1kbmwKLWRubCBXZSBjYWxsIEFDX0NBTk9OSUNBTF9UQVJHRVQgYW5kIEFDX0NBTk9OSUNBTF9IT1NUIHNvIHRoYXQKLWRubCBpdCBpcyB2YWxpZCBiZWZvcmUgQUNfQVJHX1BST0dSQU0gaXMgY2FsbGVkCi0KLUFDX0RFRlVOKFtBR19HU1RfSU5JVF0sCi1bCi0gIG00X3BhdHRlcm5fZm9yYmlkKF5fP0FHX0dTVF8pCi0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIHdlIHVzZSBob3N0XyB2YXJpYWJsZXMKLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX1RBUkdFVF0pIGRubCB3ZSB1c2UgdGFyZ2V0XyB2YXJpYWJsZXMKLV0pCi0KLWRubCBBR19HU1RfUEtHX0NPTkZJR19QQVRICi1kbmwKLWRubCBzZXRzIHVwIGEgR1NUX1BLR19DT05GSUdfUEFUSCB2YXJpYWJsZSBmb3IgdXNlIGluIE1ha2VmaWxlLmFtCi1kbmwgd2hpY2ggY29udGFpbnMgdGhlIHBhdGggb2YgdGhlIGluLXRyZWUgcGtnY29uZmlnIGRpcmVjdG9yeSBmaXJzdAotZG5sIGFuZCB0aGVuIGFueSBwYXRocyBzcGVjaWZpZWQgaW4gUEtHX0NPTkZJR19QQVRILgotZG5sCi1kbmwgV2UgZG8gdGhpcyBtb3N0bHkgc28gd2UgZG9uJ3QgaGF2ZSB0byB1c2UgdW5wb3J0YWJsZSBzaGVsbCBjb25zdHJ1Y3RzCi1kbmwgc3VjaCBhcyAke1BLR19DT05GSUdfUEFUSDorOiRQS0dfQ09ORklHX1BBVEh9IGluIE1ha2VmaWxlLmFtIHRvIGhhbmRsZQotZG5sIHRoZSBjYXNlIHdoZXJlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LCBidXQgYWxzbyBpbiBvcmRlcgotZG5sIHRvIGF2b2lkIGEgdHJhaWxpbmcgJzonIGluIHRoZSBQS0dfQ09ORklHX1BBVEggd2hpY2ggYXBwYXJlbnRseSBjYXVzZXMKLWRubCBwcm9ibGVtcyB3aXRoIHBrZy1jb25maWcgb24gd2luZG93cyB3aXRoIG1zeXMvbWluZ3cuCi1BQ19ERUZVTihbQUdfR1NUX1BLR19DT05GSUdfUEFUSF0sCi1bCi0gIEdTVF9QS0dfQ09ORklHX1BBVEg9IlwkKHRvcF9idWlsZGRpcikvcGtnY29uZmlnIgotICBpZiB0ZXN0ICJ4JFBLR19DT05GSUdfUEFUSCIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BLR19DT05GSUdfUEFUSD0iJEdTVF9QS0dfQ09ORklHX1BBVEg6JFBLR19DT05GSUdfUEFUSCIKLSAgZmkKLSAgQUNfU1VCU1QoW0dTVF9QS0dfQ09ORklHX1BBVEhdKQotICBBQ19NU0dfTk9USUNFKFtVc2luZyBHU1RfUEtHX0NPTkZJR19QQVRIID0gJEdTVF9QS0dfQ09ORklHX1BBVEhdKQotXSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9tNC9ndGstZG9jLm00IGIvY29tbW9uL200L2d0ay1kb2MubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNDNmMWMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L2d0ay1kb2MubTQKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1kbmwgLSotIG1vZGU6IGF1dG9jb25mIC0qLQotCi0jIHNlcmlhbCAxCi0KLWRubCBVc2FnZToKLWRubCAgIEdUS19ET0NfQ0hFQ0soW21pbmltdW0tZ3RrLWRvYy12ZXJzaW9uXSkKLUFDX0RFRlVOKFtHVEtfRE9DX0NIRUNLXSwKLVsKLSAgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCi0gIEFDX0JFRk9SRShbQUNfUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0Ci0gIEFDX0JFRk9SRShbQU1fUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0Ci0KLSAgZG5sIGNoZWNrIGZvciB0b29scyB3ZSBhZGRlZCBkdXJpbmcgZGV2ZWxvcG1lbnQKLSAgQUNfUEFUSF9QUk9HKFtHVEtET0NfQ0hFQ0tdLFtndGtkb2MtY2hlY2tdKQotICBBQ19QQVRIX1BST0dTKFtHVEtET0NfUkVCQVNFXSxbZ3RrZG9jLXJlYmFzZV0sW3RydWVdKQotICBBQ19QQVRIX1BST0coW0dUS0RPQ19NS1BERl0sW2d0a2RvYy1ta3BkZl0pCi0KLSAgZG5sIGZvciBvdmVycmlkaW5nIHRoZSBkb2N1bWVudGF0aW9uIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkKLSAgQUNfQVJHX1dJVEgoW2h0bWwtZGlyXSwKLSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWh0bWwtZGlyPVBBVEhdLCBbcGF0aCB0byBpbnN0YWxsZWQgZG9jc10pLCwKLSAgICBbd2l0aF9odG1sX2Rpcj0nJHtkYXRhZGlyfS9ndGstZG9jL2h0bWwnXSkKLSAgSFRNTF9ESVI9IiR3aXRoX2h0bWxfZGlyIgotICBBQ19TVUJTVChbSFRNTF9ESVJdKQotCi0gIGRubCBlbmFibGUvZGlzYWJsZSBkb2N1bWVudGF0aW9uIGJ1aWxkaW5nCi0gIEFDX0FSR19FTkFCTEUoW2d0ay1kb2NdLAotICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ndGstZG9jXSwKLSAgICAgICAgICAgICAgICAgICBbdXNlIGd0ay1kb2MgdG8gYnVpbGQgZG9jdW1lbnRhdGlvbiBbW2RlZmF1bHQ9bm9dXV0pLCwKLSAgICBbZW5hYmxlX2d0a19kb2M9bm9dKQotCi0gIGlmIHRlc3QgeCRlbmFibGVfZ3RrX2RvYyA9IHh5ZXM7IHRoZW4KLSAgICBpZmVsc2UoWyQxXSxbXSwKLSAgICAgIFtQS0dfQ0hFQ0tfRVhJU1RTKFtndGstZG9jXSwsCi0gICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW2d0ay1kb2Mgbm90IGluc3RhbGxlZCBhbmQgLS1lbmFibGUtZ3RrLWRvYyByZXF1ZXN0ZWRdKSldLAotICAgICAgW1BLR19DSEVDS19FWElTVFMoW2d0ay1kb2MgPj0gJDFdLCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbWW91IG5lZWQgdG8gaGF2ZSBndGstZG9jID49ICQxIGluc3RhbGxlZCB0byBidWlsZCAkUEFDS0FHRV9OQU1FXSkpXSkKLSAgICBkbmwgZG9uJ3QgY2hlY2sgZm9yIGdsaWIgaWYgd2UgYnVpbGQgZ2xpYgotICAgIGlmIHRlc3QgIngkUEFDS0FHRV9OQU1FIiAhPSAieGdsaWIiOyB0aGVuCi0gICAgICBkbmwgZG9uJ3QgZmFpbCBpZiBzb21lb25lIGRvZXMgbm90IGhhdmUgZ2xpYgotICAgICAgUEtHX0NIRUNLX01PRFVMRVMoR1RLRE9DX0RFUFMsIGdsaWItMi4wID49IDIuMTAuMCBnb2JqZWN0LTIuMCAgPj0gMi4xMC4wLCwpCi0gICAgZmkKLSAgICBkbmwgZG9uJ3QgcmVseSBvbiBzZWQgYmVpbmcgcHVsbGVkIGluIGltcGxpY2l0bHkuIEZpeGVzIFNvbGFyaXMgYnVpbGQuCi0gICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KLSAgICAgIEFDX1BST0dfU0VECi0gICAgZmkKLSAgZmkKLQotICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgZ3RrLWRvYyBkb2N1bWVudGF0aW9uXSkKLSAgQUNfTVNHX1JFU1VMVCgkZW5hYmxlX2d0a19kb2MpCi0KLSAgZG5sIGVuYWJsZS9kaXNhYmxlIG91dHB1dCBmb3JtYXRzCi0gIEFDX0FSR19FTkFCTEUoW2d0ay1kb2MtaHRtbF0sCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWd0ay1kb2MtaHRtbF0sCi0gICAgICAgICAgICAgICAgICAgW2J1aWxkIGRvY3VtZW50YXRpb24gaW4gaHRtbCBmb3JtYXQgW1tkZWZhdWx0PXllc11dXSksLAotICAgIFtlbmFibGVfZ3RrX2RvY19odG1sPXllc10pCi0gICAgQUNfQVJHX0VOQUJMRShbZ3RrLWRvYy1wZGZdLAotICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWd0ay1kb2MtcGRmXSwKLSAgICAgICAgICAgICAgICAgICAgIFtidWlsZCBkb2N1bWVudGF0aW9uIGluIHBkZiBmb3JtYXQgW1tkZWZhdWx0PW5vXV1dKSwsCi0gICAgICBbZW5hYmxlX2d0a19kb2NfcGRmPW5vXSkKLQotICBpZiB0ZXN0IC16ICIkR1RLRE9DX01LUERGIjsgdGhlbgotICAgIGVuYWJsZV9ndGtfZG9jX3BkZj1ubwotICBmaQotCi0KLSAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9HVEtfRE9DXSwgW3Rlc3QgeCRlbmFibGVfZ3RrX2RvYyA9IHh5ZXNdKQotICBBTV9DT05ESVRJT05BTChbR1RLX0RPQ19CVUlMRF9IVE1MXSwgW3Rlc3QgeCRlbmFibGVfZ3RrX2RvY19odG1sID0geHllc10pCi0gIEFNX0NPTkRJVElPTkFMKFtHVEtfRE9DX0JVSUxEX1BERl0sIFt0ZXN0IHgkZW5hYmxlX2d0a19kb2NfcGRmID0geHllc10pCi0gIEFNX0NPTkRJVElPTkFMKFtHVEtfRE9DX1VTRV9MSUJUT09MXSwgW3Rlc3QgLW4gIiRMSUJUT09MIl0pCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L2ludHJvc3BlY3Rpb24ubTQgYi9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyYmU1Ny4uMDAwMDAwMAotLS0gYS9jb21tb24vbTQvaW50cm9zcGVjdGlvbi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLWRubCAtKi0gbW9kZTogYXV0b2NvbmYgLSotCi1kbmwgQ29weXJpZ2h0IDIwMDkgSm9oYW4gRGFobGluCi1kbmwKLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIGF1dGhvcihzKSBnaXZlcyB1bmxpbWl0ZWQKLWRubCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotZG5sIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi0KLSMgc2VyaWFsIDEKLQotbTRfZGVmaW5lKFtfR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLX0lOVEVSTkFMXSwKLVsKLSAgICBBQ19CRUZPUkUoW0FDX1BST0dfTElCVE9PTF0sWyQwXSlkbmwgc2V0dXAgbGlidG9vbCBmaXJzdAotICAgIEFDX0JFRk9SRShbQU1fUFJPR19MSUJUT09MXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0Ci0gICAgQUNfQkVGT1JFKFtMVF9JTklUXSxbJDBdKWRubCBzZXR1cCBsaWJ0b29sIGZpcnN0Ci0KLSAgICBkbmwgZW5hYmxlL2Rpc2FibGUgaW50cm9zcGVjdGlvbgotICAgIG00X2lmKFskMl0sIFtyZXF1aXJlXSwKLSAgICBbZG5sCi0gICAgICAgIGVuYWJsZV9pbnRyb3NwZWN0aW9uPXllcwotICAgIF0sW2RubAotICAgICAgICBBQ19BUkdfRU5BQkxFKGludHJvc3BlY3Rpb24sCi0gICAgICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaW50cm9zcGVjdGlvbls9QDw6QG5vL2F1dG8veWVzQDo+QF1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBpbnRyb3NwZWN0aW9uIGZvciB0aGlzIGJ1aWxkXSksLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGVfaW50cm9zcGVjdGlvbj1hdXRvXSkKLSAgICBdKWRubAotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgZ29iamVjdC1pbnRyb3NwZWN0aW9uXSkKLQotICAgIGRubCBwcmVzZW5jZS92ZXJzaW9uIGNoZWNraW5nCi0gICAgQVNfQ0FTRShbJGVuYWJsZV9pbnRyb3NwZWN0aW9uXSwKLSAgICBbbm9dLCBbZG5sCi0gICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249Im5vIChkaXNhYmxlZCwgdXNlIC0tZW5hYmxlLWludHJvc3BlY3Rpb24gdG8gZW5hYmxlKSIKLSAgICBdLGRubAotICAgIFt5ZXNdLFtkbmwKLSAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMF0sLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCBpcyBub3QgaW5zdGFsbGVkXSkpCi0gICAgICAgIFBLR19DSEVDS19FWElTVFMoW2dvYmplY3QtaW50cm9zcGVjdGlvbi0xLjAgPj0gJDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbWW91IG5lZWQgdG8gaGF2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24gPj0gJDEgaW5zdGFsbGVkIHRvIGJ1aWxkIEFDX1BBQ0tBR0VfTkFNRV0pKQotICAgIF0sZG5sCi0gICAgW2F1dG9dLFtkbmwKLSAgICAgICAgUEtHX0NIRUNLX0VYSVNUUyhbZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCA+PSAkMV0sIGZvdW5kX2ludHJvc3BlY3Rpb249eWVzLCBmb3VuZF9pbnRyb3NwZWN0aW9uPW5vKQotICAgIF0sZG5sCi0gICAgW2RubAkKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCB0byAtLWVuYWJsZS1pbnRyb3NwZWN0aW9uLCBzaG91bGQgYmUgb25lIG9mIEA8OkBuby9hdXRvL3llc0A6PkBdKQotICAgIF0pZG5sCi0KLSAgICBBQ19NU0dfUkVTVUxUKFskZm91bmRfaW50cm9zcGVjdGlvbl0pCi0KLSAgICBJTlRST1NQRUNUSU9OX1NDQU5ORVI9Ci0gICAgSU5UUk9TUEVDVElPTl9DT01QSUxFUj0KLSAgICBJTlRST1NQRUNUSU9OX0dFTkVSQVRFPQotICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPQotICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0KLSAgICBpZiB0ZXN0ICJ4JGZvdW5kX2ludHJvc3BlY3Rpb24iID0gInh5ZXMiOyB0aGVuCi0gICAgICAgSU5UUk9TUEVDVElPTl9TQ0FOTkVSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdfaXJfc2Nhbm5lciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fQ09NUElMRVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9jb21waWxlciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fR0VORVJBVEU9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z19pcl9nZW5lcmF0ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fR0lSRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdpcmRpciBnb2JqZWN0LWludHJvc3BlY3Rpb24tMS4wYAotICAgICAgIElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUj0iJCgkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXR5cGVsaWJkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMCkiCi0gICAgICAgSU5UUk9TUEVDVElPTl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGdvYmplY3QtaW50cm9zcGVjdGlvbi0xLjBgCi0gICAgICAgSU5UUk9TUEVDVElPTl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAKLSAgICAgICBJTlRST1NQRUNUSU9OX01BS0VGSUxFPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWRhdGFkaXIgZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMGAvZ29iamVjdC1pbnRyb3NwZWN0aW9uLTEuMC9NYWtlZmlsZS5pbnRyb3NwZWN0aW9uCi0gICAgICAgSU5UUk9TUEVDVElPTl9JTklUPSJleHRlcm4gdm9pZCBnc3RfaW5pdChnaW50KixnY2hhcioqKTsgZ3N0X2luaXQoTlVMTCxOVUxMKTsiCi0gICAgZmkKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX1NDQU5ORVIpCi0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9DT01QSUxFUikKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0dFTkVSQVRFKQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fR0lSRElSKQotICAgIEFDX1NVQlNUKElOVFJPU1BFQ1RJT05fVFlQRUxJQkRJUikKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0NGTEFHUykKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0xJQlMpCi0gICAgQUNfU1VCU1QoSU5UUk9TUEVDVElPTl9NQUtFRklMRSkKLSAgICBBQ19TVUJTVChJTlRST1NQRUNUSU9OX0lOSVQpCi0KLSAgICBBTV9DT05ESVRJT05BTChIQVZFX0lOVFJPU1BFQ1RJT04sIHRlc3QgIngkZm91bmRfaW50cm9zcGVjdGlvbiIgPSAieHllcyIpCi1dKQotCi0KLWRubCBVc2FnZToKLWRubCAgIEdPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDSyhbbWluaW11bS1nLWktdmVyc2lvbl0pCi0KLUFDX0RFRlVOKFtHT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0tdLAotWwotICBfR09CSkVDVF9JTlRST1NQRUNUSU9OX0NIRUNLX0lOVEVSTkFMKFskMV0pCi1dKQotCi1kbmwgVXNhZ2U6Ci1kbmwgICBHT0JKRUNUX0lOVFJPU1BFQ1RJT05fUkVRVUlSRShbbWluaW11bS1nLWktdmVyc2lvbl0pCi0KLQotQUNfREVGVU4oW0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9SRVFVSVJFXSwKLVsKLSAgX0dPQkpFQ1RfSU5UUk9TUEVDVElPTl9DSEVDS19JTlRFUk5BTChbJDFdLCBbcmVxdWlyZV0pCi1dKQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L29yYy5tNCBiL2NvbW1vbi9tNC9vcmMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YjI0NTkuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L29yYy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLWRubCBwa2ctY29uZmlnLWJhc2VkIGNoZWNrcyBmb3IgT3JjCi0KLWRubCBzcGVjaWZpYzoKLWRubCBPUkNfQ0hFQ0soW1JFUVVJUkVEX1ZFUlNJT05dKQotCi1BQ19ERUZVTihbT1JDX0NIRUNLXSwKLVsKLSAgT1JDX1JFUT1pZmVsc2UoWyQxXSwgLCAiMC40LjYiLCBbJDFdKQotCi0gIEFDX0FSR19FTkFCTEUob3JjLAotICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtb3JjXSxbdXNlIE9yYyBpZiBpbnN0YWxsZWRdKSwKLSAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICBhdXRvKSBlbmFibGVfb3JjPWF1dG8gOzsKLSAgICB5ZXMpIGVuYWJsZV9vcmM9eWVzIDs7Ci0gICAgbm8pICBlbmFibGVfb3JjPW5vIDs7Ci0gICAgKikgQUNfTVNHX0VSUk9SKGJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW9yYykgOzsKLSAgZXNhYwotICBdLAotICBbZW5hYmxlX29yYz1hdXRvXSkgZG5sIERlZmF1bHQgdmFsdWUKLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9vcmMiICE9ICJ4bm8iIDsgdGhlbgotICAgIFBLR19DSEVDS19NT0RVTEVTKE9SQywgb3JjLTAuNCA+PSAkT1JDX1JFUSwgWwotICAgICAgQUNfREVGSU5FKEhBVkVfT1JDLCAxLCBbVXNlIE9yY10pCi0gICAgICBIQVZFX09SQz15ZXMKLSAgICAgIGlmIHRlc3QgIngkT1JDQyIgPSAieCIgOyB0aGVuCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgdXNhYmxlIG9yY2MpCi0gICAgICAgIE9SQ0M9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9b3JjYyBvcmMtMC40YAotICAgICAgICBkbmwgY2hlY2sgd2hldGhlciB0aGUgb3JjYyBmb3VuZCBieSBwa2ctY29uZmlnIGNhbiBiZSBydW4gZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQKLSAgICAgICAgZG5sIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuIHdoZW4gY3Jvc3MtY29tcGlsaW5nKSBmYWxsIGJhY2sgdG8gb3JjYyBmcm9tIFBBVEgKLSAgICAgICAgQVNfSUYoWyRPUkNDIC0tdmVyc2lvbiAxPiAvZGV2L251bGwgMj4gL2Rldi9udWxsXSwgW10sIFtPUkNDPWB3aGljaCBvcmNjYF0pCi0gICAgICAgIEFDX01TR19SRVNVTFQoJE9SQ0MpCi0gICAgICBmaQotICAgICAgQUNfU1VCU1QoT1JDQykKLSAgICAgIE9SQ0NfRkxBR1M9Ii0tY29tcGF0ICRPUkNfUkVRIgotICAgICAgQUNfU1VCU1QoT1JDQ19GTEFHUykKLSAgICAgIEFTX0lGKFt0ZXN0ICJ4JE9SQ0MiID0gIngiXSwgW0hBVkVfT1JDQz1ub10sIFtIQVZFX09SQ0M9eWVzXSkKLSAgICBdLCBbCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9vcmMiID0gInh5ZXMiIDsgdGhlbgotICAgICAgICBBQ19NU0dfRVJST1IoWy0tZW5hYmxlLW9yYyBzcGVjaWZpZWQsIGJ1dCBPcmMgPj0gJE9SQ19SRVEgbm90IGZvdW5kXSkKLSAgICAgIGZpCi0gICAgICBBQ19ERUZJTkUoRElTQUJMRV9PUkMsIDEsIFtEaXNhYmxlIE9yY10pCi0gICAgICBIQVZFX09SQz1ubwotICAgICAgSEFWRV9PUkNDPW5vCi0gICAgXSkKLSAgZWxzZQotICAgIEFDX0RFRklORShESVNBQkxFX09SQywgMSwgW0Rpc2FibGUgT3JjXSkKLSAgICBIQVZFX09SQz1ubwotICAgIEhBVkVfT1JDQz1ubwotICBmaQotICBBTV9DT05ESVRJT05BTChIQVZFX09SQywgW3Rlc3QgIngkSEFWRV9PUkMiID0gInh5ZXMiXSkKLSAgQU1fQ09ORElUSU9OQUwoSEFWRV9PUkNDLCBbdGVzdCAieCRIQVZFX09SQ0MiID0gInh5ZXMiXSkKLQotXSkpCi0KLUFDX0RFRlVOKFtPUkNfT1VUUFVUXSwKLVsKLSAgaWYgdGVzdCAiJEhBVkVfT1JDIiA9IHllcyA7IHRoZW4KLSAgICBwcmludGYgImNvbmZpZ3VyZTogKioqIE9yYyBhY2NlbGVyYXRpb24gZW5hYmxlZC5cbiIKLSAgZWxzZQotICAgIGlmIHRlc3QgIngkZW5hYmxlX29yYyIgPSAieG5vIiA7IHRoZW4KLSAgICAgIHByaW50ZiAiY29uZmlndXJlOiAqKiogT3JjIGFjY2VsZXJhdGlvbiBkaXNhYmxlZCBieSAtLWRpc2FibGUtb3JjLiAgU2xvd2VyIGNvZGUgcGF0aHNcbiIKLSAgICAgIHByaW50ZiAiICAgICAgICAgICAgICAgd2lsbCBiZSB1c2VkLlxuIgotICAgIGVsc2UKLSAgICAgIHByaW50ZiAiY29uZmlndXJlOiAqKiogT3JjIGFjY2VsZXJhdGlvbiBkaXNhYmxlZC4gIFJlcXVpcmVzIE9yYyA+PSAkT1JDX1JFUSwgd2hpY2ggd2FzXG4iCi0gICAgICBwcmludGYgIiAgICAgICAgICAgICAgIG5vdCBmb3VuZC4gIFNsb3dlciBjb2RlIHBhdGhzIHdpbGwgYmUgdXNlZC5cbiIKLSAgICBmaQotICBmaQotICBwcmludGYgIlxuIgotXSkKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL200L3BrZy5tNCBiL2NvbW1vbi9tNC9wa2cubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NmUyOTQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL200L3BrZy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0jIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0jCi0jIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKLVttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKLW00X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF9QQVRIKT8kXSkKLUFDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKWRubAotaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgotCUFDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLQlfcGtnX21pbl92ZXJzaW9uPW00X2RlZmF1bHQoWyQxXSwgWzAuOS4wXSkKLQlBQ19NU0dfQ0hFQ0tJTkcoW3BrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbl0pCi0JaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCi0JCUFDX01TR19SRVNVTFQoW3llc10pCi0JZWxzZQotCQlBQ19NU0dfUkVTVUxUKFtub10pCi0JCVBLR19DT05GSUc9IiIKLQlmaQotCi1maVtdZG5sCi1dKSMgUEtHX1BST0dfUEtHX0NPTkZJRwotCi0jIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKLSMKLSMgQ2hlY2sgdG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWlsYXIKLSMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgotIwotIwotIyBTaW1pbGFyIHRvIFBLR19DSEVDS19NT0RVTEVTLCBtYWtlIHN1cmUgdGhhdCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YKLSMgdGhpcyBvciBQS0dfQ0hFQ0tfTU9EVUxFUyBpcyBjYWxsZWQsIG9yIG1ha2Ugc3VyZSB0byBjYWxsCi0jIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtQS0dfQ0hFQ0tfRVhJU1RTXSwKLVtBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgQUNfUlVOX0xPRyhbJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiQxIl0pOyB0aGVuCi0gIG00X2lmdmFsKFskMl0sIFskMl0sIFs6XSkKLW00X2lmdmFsbihbJDNdLCBbZWxzZQotICAkM10pZG5sCi1maV0pCi0KLQotIyBfUEtHX0NPTkZJRyhbVkFSSUFCTEVdLCBbQ09NTUFORF0sIFtNT0RVTEVTXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19QS0dfQ09ORklHXSwKLVtpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9bXSQxPSIkJDEiCi0gICAgZWxzZQotICAgICAgICBQS0dfQ0hFQ0tfRVhJU1RTKFskM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGBdLAotCQkJIFtwa2dfZmFpbGVkPXllc10pCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpW11kbmwKLV0pIyBfUEtHX0NPTkZJRwotCi0jIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRF0sCi1bQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmlbXWRubAotXSkjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAotCi0KLSMgUEtHX0NIRUNLX01PRFVMRVMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwKLSMgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQotIwotIwotIyBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bwotIyBQS0dfQ0hFQ0tfTU9EVUxFUyBtaWdodCBub3QgaGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8gaW5jbHVkZSBhbgotIyBleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMKLSMKLSMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtQS0dfQ0hFQ0tfTU9EVUxFU10sCi1bQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCi1BQ19BUkdfVkFSKFskMV1bX0NGTEFHU10sIFtDIGNvbXBpbGVyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKLUFDX0FSR19WQVIoWyQxXVtfTElCU10sIFtsaW5rZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAotCi1wa2dfZmFpbGVkPW5vCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCi0KLV9QS0dfQ09ORklHKFskMV1bX0NGTEFHU10sIFtjZmxhZ3NdLCBbJDJdKQotX1BLR19DT05GSUcoWyQxXVtfTElCU10sIFtsaWJzXSwgWyQyXSkKLQotbTRfZGVmaW5lKFtfUEtHX1RFWFRdLCBbQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAkMVtdX0NGTEFHUwotYW5kICQxW11fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCi1TZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy5dKQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0gICAgICAgIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkMiJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkMiJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAotCi0JaWZlbHNlKFskNF0sICwgW0FDX01TR19FUlJPUihkbmwKLVtQYWNrYWdlIHJlcXVpcmVtZW50cyAoJDIpIHdlcmUgbm90IG1ldDoKLQotJCQxX1BLR19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgotCi1fUEtHX1RFWFQKLV0pXSwKLQkJW0FDX01TR19SRVNVTFQoW25vXSkKLSAgICAgICAgICAgICAgICAkNF0pCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JaWZlbHNlKFskNF0sICwgW0FDX01TR19GQUlMVVJFKGRubAotW1RoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAotaXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAotcGF0aCB0byBwa2ctY29uZmlnLgotCi1fUEtHX1RFWFQKLQotVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uXSldLAotCQlbJDRdKQotZWxzZQotCSQxW11fQ0ZMQUdTPSRwa2dfY3ZfW10kMVtdX0NGTEFHUwotCSQxW11fTElCUz0kcGtnX2N2X1tdJDFbXV9MSUJTCi0gICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0JaWZlbHNlKFskM10sICwgOiwgWyQzXSkKLWZpW11kbmwKLV0pIyBQS0dfQ0hFQ0tfTU9EVUxFUwpkaWZmIC0tZ2l0IGEvY29tbW9uL21hbmdsZS1kYi5weSBiL2NvbW1vbi9tYW5nbGUtZGIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2M2U1YmMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL21hbmdsZS1kYi5weQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMgLSotIE1vZGU6IFB5dGhvbiAtKi0KLSMgdmk6c2k6ZXQ6c3c9NDpzdHM9NDp0cz00Ci0KLSIiIgotSW5zZXJ0IGluY2x1ZGVzIGZvciB0aGUgZWxlbWVudC0qLWRldGFpbHMueG1sIGZpbGVzIGludG8gdGhlIHJlbGF0ZWQgZG9jYm9vawotZmlsZXMuCi0iIiIKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgdW5pY29kZV9saXRlcmFscwotCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgZ2xvYgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWltcG9ydCB4bWwuZG9tLm1pbmlkb20KLQotZGVmIHBhdGNoKHJlbGF0ZWQsIGRldGFpbHMpOgotICAgIHRyeToKLSAgICAgICAgZG9jID0geG1sLmRvbS5taW5pZG9tLnBhcnNlKHJlbGF0ZWQpCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgIHJldHVybgotCi0gICAgIyBmaW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKLSAgICBlbGVtID0gTm9uZQotICAgIGZvciBlIGluIGRvYy5jaGlsZE5vZGVzOgotICAgICAgICBpZiBlLm5vZGVUeXBlID09IGUuRUxFTUVOVF9OT0RFIGFuZCBlLmxvY2FsTmFtZSA9PSAncmVmZW50cnknOgotICAgICAgICAgICAgZWxlbSA9IGUKLSAgICAgICAgICAgIGJyZWFrCi0gICAgaWYgZWxlbSA9PSBOb25lOgotICAgICAgICByZXR1cm4KLQotICAgIGVsZW0yID0gTm9uZQotICAgIGZvciBlIGluIGVsZW0uY2hpbGROb2RlczoKLSAgICAgICAgaWYgZS5ub2RlVHlwZSA9PSBlLkVMRU1FTlRfTk9ERSBhbmQgZS5sb2NhbE5hbWUgPT0gJ3JlZnNlY3QxJzoKLSAgICAgICAgICAgIGlkID0gZS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpCi0gICAgICAgICAgICByb2xlID0gZS5nZXRBdHRyaWJ1dGVOb2RlKCdyb2xlJykKLSAgICAgICAgICAgIGlmIGlkIGFuZCBpZC5ub2RlVmFsdWUuZW5kc3dpdGgoJy5kZXNjcmlwdGlvbicpIGFuZCByb2xlIGFuZCByb2xlLm5vZGVWYWx1ZSA9PSAnZGVzYyc6Ci0gICAgICAgICAgICAgICAgZWxlbTIgPSBlCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBlbGVtMiA9PSBOb25lOgotICAgICAgICByZXR1cm4KLQotICAgICMgaW5zZXJ0IGluY2x1ZGUKLSAgICBpbmNsdWRlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2luY2x1ZGUnKQotICAgIGluY2x1ZGUuc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlJykKLSAgICBpbmNsdWRlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGRldGFpbHMpCi0gICAgZmFsbGJhY2sgPSBkb2MuY3JlYXRlRWxlbWVudCgnZmFsbGJhY2snKQotICAgIGZhbGxiYWNrLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZScpCi0gICAgaW5jbHVkZS5hcHBlbmRDaGlsZChmYWxsYmFjaykKLSAgICBlbGVtMi5hcHBlbmRDaGlsZChpbmNsdWRlKQotCi0gICAgIyBzdG9yZSBwYXRjaGVkIGZpbGUKLSAgICByZXN1bHQgPSBjb2RlY3Mub3BlbihyZWxhdGVkLCBtb2RlPSJ3IiwgZW5jb2Rpbmc9InV0Zi04IikKLSAgICAjcmVzdWx0ID0gb3BlbihyZWxhdGVkLCAid2IiKQotICAgIGRvYy53cml0ZXhtbChyZXN1bHQpCi0gICAgcmVzdWx0LmNsb3NlKCkKLQotZGVmIG1haW4oKToKLSAgICBpZiBub3QgbGVuKHN5cy5hcmd2KSA9PSAyOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdQbGVhc2Ugc3BlY2lmeSB0aGUgeG1sLyBkaXInKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgeG1sZGlyID0gc3lzLmFyZ3ZbMV0KLQotICAgICMgcGFyc2UgYWxsICotZGV0YWlscy54bWwgZmlsZXMgYW5kIHBhdGNoIGluY2x1ZGVzIGludG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAjIHhtbCBmaWxlcwotICAgIGZvciBkZXRhaWxzIGluIGdsb2IuZ2xvYigiJXMvZWxlbWVudC0qLWRldGFpbHMueG1sIiAlIHhtbGRpcik6Ci0gICAgICAgIHBhdGNoIChkZXRhaWxzLnJlcGxhY2UoIi1kZXRhaWxzIiwgIiIpLCBvcy5wYXRoLmJhc2VuYW1lKGRldGFpbHMpKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL2NvbW1vbi9vcmMubWFrIGIvY29tbW9uL29yYy5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMzJiNWQuLjAwMDAwMDAKLS0tIGEvY29tbW9uL29yYy5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0jCi0jIFRoaXMgaXMgYSBtYWtlZmlsZS5hbSBmcmFnbWVudCB0byBidWlsZCBPcmMgY29kZS4KLSMKLSMgRGVmaW5lIE9SQ19TT1VSQ0UgYW5kIHRoZW4gaW5jbHVkZSB0aGlzIGZpbGUsIHN1Y2ggYXM6Ci0jCi0jICBPUkNfU09VUkNFPWdzdGFkZGVyb3JjCi0jICBpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsKLSMKLSMgVGhpcyBmcmFnbWVudCB3aWxsIGNyZWF0ZSB0bXAtb3JjLmMgYW5kIGdzdGFkZGVyb3JjLmggZnJvbQotIyBnc3RhZGRlcm9yYy5vcmMuCi0jCi0jIFdoZW4gJ21ha2UgZGlzdCcgaXMgcnVuIGF0IHRoZSB0b3AgbGV2ZWwsIG9yICdtYWtlIG9yYy11cGRhdGUnCi0jIGluIGEgZGlyZWN0b3J5IGluY2x1ZGluZyB0aGlzIGZyYWdtZW50LCB0aGUgZ2VuZXJhdGVkIHNvdXJjZSAKLSMgZmlsZXMgd2lsbCBiZSBjb3BpZWQgdG8gJChPUkNfU09VUkNFKS1kaXN0LltjaF0uICBUaGVzZSBmaWxlcwotIyBzaG91bGQgYmUgY2hlY2tlZCBpbiB0byBnaXQsIHNpbmNlIHRoZXkgYXJlIHVzZWQgaWYgT3JjIGlzCi0jIGRpc2FibGVkLgotIyAKLSMgTm90ZSB0aGF0IHRoaXMgZmlsZSBkZWZpbmVzIEJVSUxUX1NPVVJDRVMsIHNvIGFueSBsYXRlciB1c2FnZQotIyBvZiBCVUlMVF9TT1VSQ0VTIGluIHRoZSBNYWtlZmlsZS5hbSB0aGF0IGluY2x1ZGVzIHRoaXMgZmlsZQotIyBtdXN0IHVzZSAnKz0nLgotIwotCi0KLUVYVFJBX0RJU1QgPSAkKE9SQ19TT1VSQ0UpLm9yYwotCi1PUkNfTk9ESVNUX1NPVVJDRVMgPSB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi1CVUlMVF9TT1VSQ0VTID0gdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCi0KLW9yYy11cGRhdGU6IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtaW5kZW50IHRtcC1vcmMuYwotCWNwIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMKLQljcCAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oCi0KLW9yY2Nfdl9nZW4gPSAkKG9yY2Nfdl9nZW5fJChWKSkKLW9yY2Nfdl9nZW5fID0gJChvcmNjX3ZfZ2VuXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotb3JjY192X2dlbl8wID0gQGVjaG8gIiAgT1JDQyAgICRAIjsKLQotY3Bfdl9nZW4gPSAkKGNwX3ZfZ2VuXyQoVikpCi1jcF92X2dlbl8gPSAkKGNwX3ZfZ2VuXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotY3Bfdl9nZW5fMCA9IEBlY2hvICIgIENQICAgICAkQCI7Ci0KLWlmIEhBVkVfT1JDQwotdG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLQkkKG9yY2Nfdl9nZW4pJChPUkNDKSAkKE9SQ0NfRkxBR1MpIC0taW1wbGVtZW50YXRpb24gLS1pbmNsdWRlIGdsaWIuaCAtbyB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi0KLSQoT1JDX1NPVVJDRSkuaDogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi0JJChvcmNjX3ZfZ2VuKSQoT1JDQykgJChPUkNDX0ZMQUdTKSAtLWhlYWRlciAtLWluY2x1ZGUgZ2xpYi5oIC1vICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLWVsc2UKLXRtcC1vcmMuYzogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCSQoY3Bfdl9nZW4pY3AgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHRtcC1vcmMuYwotCi0kKE9SQ19TT1VSQ0UpLmg6ICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMKLQkkKGNwX3ZfZ2VuKWNwICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCAkKE9SQ19TT1VSQ0UpLmgKLWVuZGlmCi0KLWNsZWFuLWxvY2FsOiBjbGVhbi1vcmMKLS5QSE9OWTogY2xlYW4tb3JjCi1jbGVhbi1vcmM6Ci0Jcm0gLWYgdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCi1kaXN0LWhvb2s6IGRpc3QtaG9vay1vcmMKLS5QSE9OWTogZGlzdC1ob29rLW9yYwotCi0jIHdlIHRyeSBhbmQgY29weSB1cGRhdGVkIG9yYyAtZGlzdCBmaWxlcyBiZWxvdywgYnV0IGRvbid0IGZhaWwgaWYgaXQKLSMgZG9lc24ndCB3b3JrIGFzIHRoZSBzcmNkaXIgbWlnaHQgbm90IGJlIHdyaXRhYmxlCi1kaXN0LWhvb2stb3JjOiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LWluZGVudCB0bXAtb3JjLmMKLQlybSAtZiB0bXAtb3JjLmN+Ci0JY21wIC1zIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgfHwgXAotCSAgY3AgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB8fCB0cnVlCi0JY21wIC1zICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmggfHwgXAotCSAgY3AgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCB8fCB0cnVlCi0JY3AgLXAgdG1wLW9yYy5jICQoZGlzdGRpcikvJChPUkNfU09VUkNFKS1kaXN0LmMKLQljcCAtcCAkKE9SQ19TT1VSQ0UpLmggJChkaXN0ZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaAotCmRpZmYgLS1naXQgYS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsgYi9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ODg1ZGYuLjAwMDAwMDAKLS0tIGEvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyBpbmNsdWRlIHRoaXMgYXQgdGhlIGVuZCBvZiAkTU9EVUxFL2V4dC9NYWtlZmlsZS5hbSB0byBmb3JjZSBtYWtlIHRvCi0jIGJ1aWxkIHN1YmRpcmVjdG9yaWVzIGluIHBhcmFsbGVsIHdoZW4gbWFrZSAtak4gaXMgdXNlZC4gV2Ugd2lsbCBlbmQgdXAKLSMgZGVzY2VuZGluZyBpbnRvIGFsbCBzdWJkaXJlY3RvcmllcyBhIHNlY29uZCB0aW1lLCBidXQgb25seSBhZnRlciB0aGUgZmlyc3QKLSMgKHBhcmFsbGVsKSBydW4gaGFzIGZpbmlzaGVkLCBzbyBpdCBzaG91bGQgZ28gcmlnaHQgdGhyb3VnaCB0aGUgc2Vjb25kIHRpbWUuCi0KLS5QSE9OWTogaW5kZXBlbmRlbnQtc3ViZGlycyAkKFNVQkRJUlMpCi0KLWluZGVwZW5kZW50LXN1YmRpcnM6ICQoU1VCRElSUykKLQotJChTVUJESVJTKToKLQkkKE1BS0UpIC1DICRACi0KLWFsbC1yZWN1cnNpdmU6IGluZGVwZW5kZW50LXN1YmRpcnMKZGlmZiAtLWdpdCBhL2NvbW1vbi9wbHVnaW5zLnhzbCBiL2NvbW1vbi9wbHVnaW5zLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1MTViNi4uMDAwMDAwMAotLS0gYS9jb21tb24vcGx1Z2lucy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+IDwhLS0qLSBtb2RlOiB4bWwgLSotLT4KLQotPHhzbDpzdHlsZXNoZWV0Ci0gIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICB4bWxuczpleHNsPSJodHRwOi8vZXhzbHQub3JnL2NvbW1vbiIKLSAgeG1sbnM6c3RyPSJodHRwOi8vZXhzbHQub3JnL3N0cmluZ3MiCi0gIGV4dGVuc2lvbi1lbGVtZW50LXByZWZpeGVzPSJleHNsIHN0ciIKLSAgdmVyc2lvbj0iMS4wIj4KLTx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIKLSAgICAgICAgICAgIGRvY3R5cGUtcHVibGljID0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgotICAgICAgICAgICAgZG9jdHlwZS1zeXN0ZW0gPSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiLz4KLQotPHhzbDpwYXJhbSBuYW1lPSJtb2R1bGUiIC8+Ci0KLSAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iZWxlbWVudCI+Ci0gICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaW5rIj4KLSAgICAgICAgICA8eHNsOmF0dHJpYnV0ZSBuYW1lPSJsaW5rZW5kIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG1vZHVsZSIgLz4tcGx1Z2lucy08eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPjwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz4KLSAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImRlc2NyaXB0aW9uIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICA8L3hzbDplbGVtZW50PgotICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJuYW1lIj48eHNsOmNvcHktb2Ygc2VsZWN0PSJuYW1lIi8+PC94c2w6dmFyaWFibGU+Ci0gICAgPCEtLSBoZXJlIHdlIHdyaXRlIGFuIGVsZW1lbnQtKG5hbWUpLWRldGFpbHMueG1sIGZpbGUgZm9yIHRoZSBlbGVtZW50IC0tPgotICAgIDxleHNsOmRvY3VtZW50IGhyZWY9Intjb25jYXQgKCd4bWwvZWxlbWVudC0nLCAkbmFtZSwgJy1kZXRhaWxzLnhtbCcpfSIgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIj4KLQotICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnN5bm9wc2lzZGl2Ij4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnNlY3QyIj4KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGl0bGUiPkVsZW1lbnQgSW5mb3JtYXRpb248L3hzbDplbGVtZW50PgotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiPgotCi0gICAgICAgICAgICA8IS0tIHBsdWdpbiBuYW1lIGFuZCBsaW5rIC0tPgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5wbHVnaW48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaW5rIj4KLSAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0ibGlua2VuZCI+cGx1Z2luLTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuLi8uLi9uYW1lIi8+PC94c2w6YXR0cmlidXRlPgotICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi4vLi4vbmFtZSIgLz4KLSAgICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+YXV0aG9yPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImF1dGhvciIgLz48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5jbGFzczwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjbGFzcyIgLz48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgIDwveHNsOmVsZW1lbnQ+IDwhLS0gdmFyaWFibGVsaXN0IC0tPgotICAgICAgICA8L3hzbDplbGVtZW50PiA8IS0tIHJlZnNlY3QyIC0tPgotCi0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MiI+Ci0gICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRpdGxlIj5FbGVtZW50IFBhZHM8L3hzbDplbGVtZW50PgotICAgICAgICAgIDwhLS0gcHJvY2VzcyBhbGwgY2FwcyAtLT4KLSAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0icGFkcy9jYXBzIj4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+bmFtZTwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIgLz48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPmRpcmVjdGlvbjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGlyZWN0aW9uIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+cHJlc2VuY2U8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InByZXNlbmNlIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD0nc3RyOnRva2VuaXplKGRldGFpbHMsICI7IiknPgotICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPgotICAgICAgICAgICAgICAgICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9MSI+ZGV0YWlsczwveHNsOmlmPgotICAgICAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0nLicvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPgotCi0gICAgICAgICAgICA8L3hzbDplbGVtZW50PiA8IS0tIHZhcmlhYmxlbGlzdCAtLT4KLQotICAgICAgICAgICAgPCEtLXhzbDplbGVtZW50IG5hbWU9InByb2dyYW1saXN0aW5nIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGV0YWlscyIgLz48L3hzbDplbGVtZW50LS0+Ci0KLSAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KLSAgICAgICAgPC94c2w6ZWxlbWVudD4gPCEtLSByZWZzZWN0MiAtLT4KLSAgICAgIDwveHNsOmVsZW1lbnQ+IDwhLS0gcmVmc3lub3BzaXNkaXYgLS0+Ci0KLSAgICA8L2V4c2w6ZG9jdW1lbnQ+Ci0gIDwveHNsOnRlbXBsYXRlPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InBsdWdpbiI+Ci0gICAgPHhzbDplbGVtZW50IG5hbWU9InJlZmVudHJ5Ij4KLSAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImlkIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG1vZHVsZSIgLz4tcGx1Z2lucy1wbHVnaW4tPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiLz48L3hzbDphdHRyaWJ1dGU+Ci0KLSAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZtZXRhIj4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZmVudHJ5dGl0bGUiPgotICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJuYW1lIi8+Ci0gICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJtYW52b2xudW0iPjM8L3hzbDplbGVtZW50PgotICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmbWlzY2luZm8iPkZJWE1FIExpYnJhcnk8L3hzbDplbGVtZW50PgotICAgICAgPC94c2w6ZWxlbWVudD4gPCEtLSByZWZtZXRhIC0tPgotCi0gICAgICA8eHNsOmVsZW1lbnQgbmFtZT0icmVmbmFtZWRpdiI+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZuYW1lIj4KLSAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibmFtZSIvPgotICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZwdXJwb3NlIj4KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0iYW5jaG9yIj4KLSAgICAgICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9ImlkIj5wbHVnaW4tPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5hbWUiLz48L3hzbDphdHRyaWJ1dGU+Ci0gICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iLz4KLSAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJyZWZzZWN0MSI+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0aXRsZSI+UGx1Z2luIEluZm9ybWF0aW9uPC94c2w6ZWxlbWVudD4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmlhYmxlbGlzdCI+Ci0KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5maWxlbmFtZTwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImJhc2VuYW1lIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj52ZXJzaW9uPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJsaXN0aXRlbSI+Ci0gICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJzaW1wYXJhIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0idmVyc2lvbiIgLz48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICA8L3hzbDplbGVtZW50PgotCi0gICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InZhcmxpc3RlbnRyeSI+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ibGlzdGl0ZW0iPgotICAgICAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0ic2ltcGFyYSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImxpY2Vuc2UiIC8+PC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJsaXN0ZW50cnkiPgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRlcm0iPnBhY2thZ2U8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJwYWNrYWdlIiAvPjwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICAgICAgICA8eHNsOmVsZW1lbnQgbmFtZT0idmFybGlzdGVudHJ5Ij4KLSAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ0ZXJtIj5vcmlnaW48L3hzbDplbGVtZW50PgotICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9Imxpc3RpdGVtIj4KLSAgICAgICAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InNpbXBhcmEiPgotICAgICAgICAgICAgICAgIDwhLS0gb25seSBzaG93IG9yaWdpbiBhcyBsaW5rIGlmIGl0IHN0YXJ0cyB3aXRoIGh0dHAgLS0+Ci0gICAgICAgICAgICAgICAgPHhzbDpjaG9vc2U+Ci0gICAgICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ic3Vic3RyaW5nKEBocmVmLCAxLCA0KSA9ICdodHRwJyI+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ1bGluayI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzbDphdHRyaWJ1dGUgbmFtZT0idXJsIj48eHNsOnZhbHVlLW9mIHNlbGVjdD0ib3JpZ2luIiAvPjwveHNsOmF0dHJpYnV0ZT4KLSAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ib3JpZ2luIiAvPgotICAgICAgICAgICAgICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgPC94c2w6d2hlbj4KLSAgICAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgotICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ib3JpZ2luIiAvPgotICAgICAgICAgICAgICAgICAgPC94c2w6b3RoZXJ3aXNlPgotICAgICAgICAgICAgICAgIDwveHNsOmNob29zZT4KLSAgICAgICAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgICAgICAgIDwveHNsOmVsZW1lbnQ+Ci0gICAgICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgICA8L3hzbDplbGVtZW50PgotICAgICAgPC94c2w6ZWxlbWVudD4KLQotICAgICAgPHhzbDplbGVtZW50IG5hbWU9InJlZnNlY3QxIj4KLSAgICAgICAgPHhzbDplbGVtZW50IG5hbWU9InRpdGxlIj5FbGVtZW50czwveHNsOmVsZW1lbnQ+Ci0gICAgICAgIDwhLS0gcHJvY2VzcyBhbGwgZWxlbWVudHMgLS0+Ci0gICAgICAgIDx4c2w6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZWxpc3QiPgotICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZWxlbWVudHMiLz4KLSAgICAgICAgPC94c2w6ZWxlbWVudD4KLSAgICAgIDwveHNsOmVsZW1lbnQ+Ci0KLSAgICA8L3hzbDplbGVtZW50PgotCi0gIDwveHNsOnRlbXBsYXRlPgotCi0gIDwhLS0gaWdub3JlIC0tPgotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJnc3QtcGx1Z2luLXBhdGhzIiAvPgotCi08L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvY29tbW9uL3BvLm1hayBiL2NvbW1vbi9wby5tYWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMTlmYWMuLjAwMDAwMDAKLS0tIGEvY29tbW9uL3BvLm1haworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBydWxlIHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgLnBvIGZpbGVzCi1kb3dubG9hZC1wbzogJCh0b3Bfc3JjZGlyKS9jb21tb24vZG93bmxvYWQtdHJhbnNsYXRpb25zCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vZG93bmxvYWQtdHJhbnNsYXRpb25zICQoUEFDS0FHRSkKLQpkaWZmIC0tZ2l0IGEvY29tbW9uL3JlbGVhc2UubWFrIGIvY29tbW9uL3JlbGVhc2UubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODRjMmYxLi4wMDAwMDAwCi0tLSBhL2NvbW1vbi9yZWxlYXNlLm1haworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMgaW5jbHVkZSB0aGlzIHNuaXBwZXQgdG8gYWRkIGEgY29tbW9uIHJlbGVhc2U6IHRhcmdldCBieSB1c2luZwotIyBpbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3JlbGVhc2UubWFrCi0KLXJlbGVhc2U6IGRpc3QKLQlAJChNQUtFKSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bQotCUBlY2hvCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0JQGVjaG8gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8kKFBBQ0tBR0UpLyQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHoiCi0JQGNhdCAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bQotCUBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgotCUBpZiBbIC1kIH4vcmVsZWFzZXMvIF07IHRoZW4gXAotCSAgY3AgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiB+L3JlbGVhc2VzLzsgXAotCWZpCi0JQGlmIFsgLWQgLi4vd3d3L2RhdGEvc3JjIF07IHRoZW4gXAotCSAgbXYgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54eiAuLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JICBtdiAtdiAkKFBBQ0tBR0UpLSQoVkVSU0lPTikudGFyLnh6LnNoYTI1NnN1bSAuLi93d3cvZGF0YS9zcmMvJChQQUNLQUdFKS8gOyBcCi0JZWxpZiBbIC1kIC4uLy4uL3d3dy9kYXRhL3NyYyBdOyB0aGVuIFwKLQkgIG12IC12ICQoUEFDS0FHRSktJChWRVJTSU9OKS50YXIueHogLi4vLi4vd3d3L2RhdGEvc3JjLyQoUEFDS0FHRSkvIDsgXAotCSAgbXYgLXYgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci54ei5zaGEyNTZzdW0gLi4vLi4vd3d3L2RhdGEvc3JjLyQoUEFDS0FHRSkvIDsgXAotCWZpCi0JQGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCi0KLSMgZ2VuZXJhdGUgc2hhMjU2IHN1bSBmaWxlcwotJS5zaGEyNTZzdW06ICUKLQlAc2hhMjU2c3VtICQ8ID4gJEAKLQotIyBjaGVjayB0aGF0IG5vIG1hcnNoYWwgb3IgZW51bXR5cGVzIGZpbGVzIGFyZSBpbmNsdWRlZAotIyB0aGlzIGluIHR1cm4gZW5zdXJlcyB0aGF0IGRpc3RjaGVjayBmYWlscyBmb3IgbWlzc2luZyAubGlzdCBmaWxlcyB3aGljaCBpcyBjdXJyZW50bHkKLSMgc2hhZG93ZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyAuYyBhbmQgLmggZmlsZXMgYXJlIGluY2x1ZGVkLgotZGlzdGNoZWNrLWhvb2s6Ci0JQHRlc3QgIngiID0gInhgZmluZCAkKGRpc3RkaXIpIC1uYW1lIFwqLWVudW10eXBlcy5bY2hdIHwgZ3JlcCAtdiB3aW4zMmAiICYmIFwKLQl0ZXN0ICJ4IiA9ICJ4YGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1tYXJzaGFsLltjaF1gIiB8fCBcCi0JKCBlY2hvICIqKiogTGVmdG92ZXIgZW51bXR5cGVzIG9yIG1hcnNoYWwgZmlsZXMgaW4gdGhlIHRhcmJhbGwuIiAmJiBcCi0JICBlY2hvICIqKiogTWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIG5vdCBkaXN0ZWQ6IiAmJiBcCi0JICBmaW5kICQoZGlzdGRpcikgLW5hbWUgXCotZW51bXR5cGVzLltjaF0gfCBncmVwIC12IHdpbjMyICYmIFwKLQkgIGZpbmQgJChkaXN0ZGlyKSAtbmFtZSBcKi1tYXJzaGFsLltjaF0gJiYgXAotCSAgZmFsc2UgKQpkaWZmIC0tZ2l0IGEvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5IGIvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0NjczNmI0Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi9zY2FuZ29iai1tZXJnZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIyAtKi0gTW9kZTogUHl0aG9uIC0qLQotIyB2aTpzaTpldDpzdz00OnN0cz00OnRzPTQKLQotIiIiCi1wYXJzZSwgbWVyZ2UgYW5kIHdyaXRlIGdzdGRvYy1zY2Fub2JqIGZpbGVzCi0iIiIKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiwgdW5pY29kZV9saXRlcmFscwotCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZGVmIGRlYnVnKCphcmdzKToKLSAgICBwYXNzCi0KLSMgT3JkZXJlZERpY3QgY2xhc3MgYmFzZWQgb24KLSMgaHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vQ29va2Jvb2svUHl0aG9uL1JlY2lwZS8xMDc3NDcKLSMgTGljZW5zZWQgdW5kZXIgdGhlIFB5dGhvbiBMaWNlbnNlCi1jbGFzcyBPcmRlcmVkRGljdChkaWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2tleXMgPSBbXQotICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYpCi0KLSAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgZGljdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHNlbGYuX2tleXMucmVtb3ZlKGtleSkKLQotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIGl0ZW0pOgotICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgaXRlbSkKLSAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9rZXlzOiBzZWxmLl9rZXlzLmFwcGVuZChrZXkpCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgIGRpY3QuY2xlYXIoc2VsZikKLSAgICAgICAgc2VsZi5fa2V5cyA9IFtdCi0KLSAgICBkZWYgY29weShzZWxmKToKLSAgICAgICAgZGljdCA9IGRpY3QuY29weShzZWxmKQotICAgICAgICBkaWN0Ll9rZXlzID0gc2VsZi5fa2V5c1s6XQotICAgICAgICByZXR1cm4gZGljdAotCi0gICAgZGVmIGl0ZW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gemlwKHNlbGYuX2tleXMsIHNlbGYudmFsdWVzKCkpCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2tleXMKLQotICAgIGRlZiBwb3BpdGVtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlzWy0xXQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdkaWN0aW9uYXJ5IGlzIGVtcHR5JykKLQotICAgICAgICB2YWwgPSBzZWxmW2tleV0KLSAgICAgICAgZGVsIHNlbGZba2V5XQotCi0gICAgICAgIHJldHVybiAoa2V5LCB2YWwpCi0KLSAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGZhaWxvYmogPSBOb25lKToKLSAgICAgICAgZGljdC5zZXRkZWZhdWx0KHNlbGYsIGtleSwgZmFpbG9iaikKLSAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9rZXlzOiBzZWxmLl9rZXlzLmFwcGVuZChrZXkpCi0KLSAgICBkZWYgdXBkYXRlKHNlbGYsIGRpY3QpOgotICAgICAgICBkaWN0LnVwZGF0ZShzZWxmLCBkaWN0KQotICAgICAgICBmb3Iga2V5IGluIGRpY3Qua2V5cygpOgotICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9rZXlzOiBzZWxmLl9rZXlzLmFwcGVuZChrZXkpCi0KLSAgICBkZWYgdmFsdWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gbWFwKHNlbGYuZ2V0LCBzZWxmLl9rZXlzKQotCi1jbGFzcyBPYmplY3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLl9zaWduYWxzID0gT3JkZXJlZERpY3QoKQotICAgICAgICBzZWxmLl9hcmdzID0gT3JkZXJlZERpY3QoKQotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPE9iamVjdCAlcz4iICUgc2VsZi5uYW1lCi0KLSAgICBkZWYgYWRkX3NpZ25hbChzZWxmLCBzaWduYWwsIG92ZXJ3cml0ZT1UcnVlKToKLSAgICAgICAgaWYgbm90IG92ZXJ3cml0ZSBhbmQgc2lnbmFsLm5hbWUgaW4gc2VsZi5fc2lnbmFsczoKLSAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoInNpZ25hbCAlcyBhbHJlYWR5IGluICVyIiAlIChzaWduYWwubmFtZSwgc2VsZikpCi0gICAgICAgIHNlbGYuX3NpZ25hbHNbc2lnbmFsLm5hbWVdID0gc2lnbmFsCi0KLSAgICBkZWYgYWRkX2FyZyhzZWxmLCBhcmcsIG92ZXJ3cml0ZT1UcnVlKToKLSAgICAgICAgaWYgbm90IG92ZXJ3cml0ZSBhbmQgYXJnLm5hbWUgaW4gc2VsZi5fYXJnczoKLSAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoImFyZyAlcyBhbHJlYWR5IGluICVyIiAlIChhcmcubmFtZSwgc2VsZikpCi0gICAgICAgIHNlbGYuX2FyZ3NbYXJnLm5hbWVdID0gYXJnCi0KLWNsYXNzIERvY2FibGU6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmF0dHJzOgotICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIGt3YXJnc1trZXldKQotICAgICAgICBzZWxmLmRpY3QgPSBrd2FyZ3MKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXIgJXM+IiAlIChzdHIoc2VsZi5fX2NsYXNzX18pLCBzZWxmLm5hbWUpCi0KLWNsYXNzIFNpZ25hbChEb2NhYmxlKToKLSAgICBhdHRycyA9IFsnbmFtZScsICdyZXR1cm5zJywgJ2FyZ3MnXQotCi1jbGFzcyBBcmcoRG9jYWJsZSk6Ci0gICAgYXR0cnMgPSBbJ25hbWUnLCAndHlwZScsICdyYW5nZScsICdmbGFncycsICduaWNrJywgJ2JsdXJiJywgJ2RlZmF1bHQnXQotCi1jbGFzcyBHRG9jOgotICAgIGRlZiBsb2FkX2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsaW5lcyA9IGNvZGVjcy5vcGVuKGZpbGVuYW1lLCBlbmNvZGluZz0ndXRmLTgnKS5yZWFkbGluZXMoKQotICAgICAgICAgICAgc2VsZi5sb2FkX2RhdGEoIiIuam9pbihsaW5lcykpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcHJpbnQgKCJXQVJOSU5HIC0gY291bGQgbm90IHJlYWQgZnJvbSAlcyIgJSBmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBlOgotICAgICAgICAgICAgcHJpbnQgKCJXQVJOSU5HIC0gY291bGQgbm90IHBhcnNlICVzOiAlcyIgJSAoZmlsZW5hbWUsIGUpKQotCi0gICAgZGVmIHNhdmVfZmlsZShzZWxmLCBmaWxlbmFtZSwgYmFja3VwPUZhbHNlKToKLSAgICAgICAgIiIiCi0gICAgICAgIFNhdmUgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBnaXZlbiBmaWxlIGlmIHRoZSBmaWxlIGNvbnRlbnQgY2hhbmdlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIG9sZGRhdGEgPSBOb25lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxpbmVzID0gY29kZWNzLm9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPSd1dGYtOCcpLnJlYWRsaW5lcygpCi0gICAgICAgICAgICBvbGRkYXRhID0gIiIuam9pbihsaW5lcykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBwcmludCAoIldBUk5JTkcgLSBjb3VsZCBub3QgcmVhZCBmcm9tICVzIiAlIGZpbGVuYW1lKQotICAgICAgICBuZXdkYXRhID0gc2VsZi5nZXRfZGF0YSgpCi0gICAgICAgIGlmIG9sZGRhdGEgYW5kIG9sZGRhdGEgPT0gbmV3ZGF0YToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIG9sZGRhdGE6Ci0gICAgICAgICAgICBpZiBiYWNrdXA6Ci0gICAgICAgICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICcuYmFrJykKLQotICAgICAgICBoYW5kbGUgPSBjb2RlY3Mub3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0ndXRmLTgnKQotICAgICAgICBoYW5kbGUud3JpdGUobmV3ZGF0YSkKLSAgICAgICAgaGFuZGxlLmNsb3NlKCkKLQotY2xhc3MgU2lnbmFscyhHRG9jKToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX29iamVjdHMgPSBPcmRlcmVkRGljdCgpCi0KLSAgICBkZWYgbG9hZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiIKLSAgICAgICAgTG9hZCB0aGUgLnNpZ25hbHMgbGluZXMsIGNyZWF0aW5nIG91ciBsaXN0IG9mIG9iamVjdHMgYW5kIHNpZ25hbHMuCi0gICAgICAgICIiIgotICAgICAgICBpbXBvcnQgcmUKLSAgICAgICAgc21hdGNoZXIgPSByZS5jb21waWxlKAotICAgICAgICAgICAgJyg/cyknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1ha2UgLiBtYXRjaCBcbgotICAgICAgICAgICAgJzxTSUdOQUw+XG4oLio/KTwvU0lHTkFMPlxuJwotICAgICAgICAgICAgKQotICAgICAgICBubWF0Y2hlciA9IHJlLmNvbXBpbGUoCi0gICAgICAgICAgICAnPE5BTUU+JwotICAgICAgICAgICAgJyg/UDxvYmplY3Q+XFMqKScgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIG9iamVjdAotICAgICAgICAgICAgJzo6JwotICAgICAgICAgICAgJyg/UDxzaWduYWw+XFMqKScgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIHNpZ25hbAotICAgICAgICAgICAgJzwvTkFNRT4nCi0gICAgICAgICkKLSAgICAgICAgcm1hdGNoZXIgPSByZS5jb21waWxlKAotICAgICAgICAgICAgJyg/cyknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1ha2UgLiBtYXRjaCBcbgotICAgICAgICAgICAgJzxSRVRVUk5TPig/UDxyZXR1cm5zPlxTKik8L1JFVFVSTlM+XG4nICAgICAjIHN0b3JlIHJldHVybnMKLSAgICAgICAgICAgICcoP1A8YXJncz4uKiknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBhcmdzCi0gICAgICAgICkKLSAgICAgICAgZm9yIGJsb2NrIGluIHNtYXRjaGVyLmZpbmRhbGwoZGF0YSk6Ci0gICAgICAgICAgICBubWF0Y2ggPSBubWF0Y2hlci5zZWFyY2goYmxvY2spCi0gICAgICAgICAgICBpZiBubWF0Y2g6Ci0gICAgICAgICAgICAgICAgbyA9IG5tYXRjaC5ncm91cCgnb2JqZWN0JykKLSAgICAgICAgICAgICAgICBkZWJ1ZygiRm91bmQgb2JqZWN0IiwgbykKLSAgICAgICAgICAgICAgICBkZWJ1ZygiRm91bmQgc2lnbmFsIiwgbm1hdGNoLmdyb3VwKCdzaWduYWwnKSkKLSAgICAgICAgICAgICAgICBpZiBvIG5vdCBpbiBzZWxmLl9vYmplY3RzOgotICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBPYmplY3QobykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2JqZWN0c1tvXSA9IG9iamVjdAotCi0gICAgICAgICAgICAgICAgcm1hdGNoID0gcm1hdGNoZXIuc2VhcmNoKGJsb2NrKQotICAgICAgICAgICAgICAgIGlmIHJtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgZGljdCA9IHJtYXRjaC5ncm91cGRpY3QoKS5jb3B5KCkKLSAgICAgICAgICAgICAgICAgICAgZGljdFsnbmFtZSddID0gbm1hdGNoLmdyb3VwKCdzaWduYWwnKQotICAgICAgICAgICAgICAgICAgICBzaWduYWwgPSBTaWduYWwoKipkaWN0KQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vYmplY3RzW29dLmFkZF9zaWduYWwoc2lnbmFsKQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBvIGluIHNlbGYuX29iamVjdHMudmFsdWVzKCk6Ci0gICAgICAgICAgICBmb3IgcyBpbiBvLl9zaWduYWxzLnZhbHVlcygpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gIiIiPFNJR05BTD4KLTxOQU1FPiUob2JqZWN0KXM6OiUobmFtZSlzPC9OQU1FPgotPFJFVFVSTlM+JShyZXR1cm5zKXM8L1JFVFVSTlM+Ci0lKGFyZ3MpczwvU0lHTkFMPgotIiIiCi0gICAgICAgICAgICAgICAgZCA9IHMuZGljdC5jb3B5KCkKLSAgICAgICAgICAgICAgICBkWydvYmplY3QnXSA9IG8ubmFtZQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChibG9jayAlIGQpCi0KLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykgKyAnXG4nCi0KLWNsYXNzIEFyZ3MoR0RvYyk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9vYmplY3RzID0gT3JkZXJlZERpY3QoKQotCi0gICAgZGVmIGxvYWRfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIExvYWQgdGhlIC5hcmdzIGxpbmVzLCBjcmVhdGluZyBvdXIgbGlzdCBvZiBvYmplY3RzIGFuZCBhcmdzLgotICAgICAgICAiIiIKLSAgICAgICAgaW1wb3J0IHJlCi0gICAgICAgIGFtYXRjaGVyID0gcmUuY29tcGlsZSgKLSAgICAgICAgICAgICcoP3MpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlIC4gbWF0Y2ggXG4KLSAgICAgICAgICAgICc8QVJHPlxuKC4qPyk8L0FSRz5cbicKLSAgICAgICAgICAgICkKLSAgICAgICAgbm1hdGNoZXIgPSByZS5jb21waWxlKAotICAgICAgICAgICAgJzxOQU1FPicKLSAgICAgICAgICAgICcoP1A8b2JqZWN0PlxTKiknICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBvYmplY3QKLSAgICAgICAgICAgICc6OicKLSAgICAgICAgICAgICcoP1A8YXJnPlxTKiknICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBhcmcKLSAgICAgICAgICAgICc8L05BTUU+JwotICAgICAgICApCi0gICAgICAgIHJtYXRjaGVyID0gcmUuY29tcGlsZSgKLSAgICAgICAgICAgICcoP3MpJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlIC4gbWF0Y2ggXG4KLSAgICAgICAgICAgICc8VFlQRT4oP1A8dHlwZT5cUyopPC9UWVBFPlxuJyAgICAgICAgICAgICAgIyBzdG9yZSB0eXBlCi0gICAgICAgICAgICAnPFJBTkdFPig/UDxyYW5nZT4uKj8pPC9SQU5HRT5cbicgICAgICAgICAgICMgc3RvcmUgcmFuZ2UKLSAgICAgICAgICAgICc8RkxBR1M+KD9QPGZsYWdzPlxTKik8L0ZMQUdTPlxuJyAgICAgICAgICAgIyBzdG9yZSBmbGFncwotICAgICAgICAgICAgJzxOSUNLPig/UDxuaWNrPi4qPyk8L05JQ0s+XG4nICAgICAgICAgICAgICAjIHN0b3JlIG5pY2sKLSAgICAgICAgICAgICc8QkxVUkI+KD9QPGJsdXJiPi4qPyk8L0JMVVJCPlxuJyAgICAgICAgICAgIyBzdG9yZSBibHVyYgotICAgICAgICAgICAgJzxERUZBVUxUPig/UDxkZWZhdWx0Pi4qPyk8L0RFRkFVTFQ+XG4nICAgICAjIHN0b3JlIGRlZmF1bHQKLSAgICAgICAgKQotICAgICAgICBmb3IgYmxvY2sgaW4gYW1hdGNoZXIuZmluZGFsbChkYXRhKToKLSAgICAgICAgICAgIG5tYXRjaCA9IG5tYXRjaGVyLnNlYXJjaChibG9jaykKLSAgICAgICAgICAgIGlmIG5tYXRjaDoKLSAgICAgICAgICAgICAgICBvID0gbm1hdGNoLmdyb3VwKCdvYmplY3QnKQotICAgICAgICAgICAgICAgIGRlYnVnKCJGb3VuZCBvYmplY3QiLCBvKQotICAgICAgICAgICAgICAgIGRlYnVnKCJGb3VuZCBhcmciLCBubWF0Y2guZ3JvdXAoJ2FyZycpKQotICAgICAgICAgICAgICAgIGlmIG8gbm90IGluIHNlbGYuX29iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IE9iamVjdChvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vYmplY3RzW29dID0gb2JqZWN0Ci0KLSAgICAgICAgICAgICAgICBybWF0Y2ggPSBybWF0Y2hlci5zZWFyY2goYmxvY2spCi0gICAgICAgICAgICAgICAgaWYgcm1hdGNoOgotICAgICAgICAgICAgICAgICAgICBkaWN0ID0gcm1hdGNoLmdyb3VwZGljdCgpLmNvcHkoKQotICAgICAgICAgICAgICAgICAgICBkaWN0WyduYW1lJ10gPSBubWF0Y2guZ3JvdXAoJ2FyZycpCi0gICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZygqKmRpY3QpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX29iamVjdHNbb10uYWRkX2FyZyhhcmcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJFUlJPUjogY291bGQgbm90IG1hdGNoIGFyZyBmcm9tIGJsb2NrICVzIiAlIGJsb2NrKQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBvIGluIHNlbGYuX29iamVjdHMudmFsdWVzKCk6Ci0gICAgICAgICAgICBmb3IgYSBpbiBvLl9hcmdzLnZhbHVlcygpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gIiIiPEFSRz4KLTxOQU1FPiUob2JqZWN0KXM6OiUobmFtZSlzPC9OQU1FPgotPFRZUEU+JSh0eXBlKXM8L1RZUEU+Ci08UkFOR0U+JShyYW5nZSlzPC9SQU5HRT4KLTxGTEFHUz4lKGZsYWdzKXM8L0ZMQUdTPgotPE5JQ0s+JShuaWNrKXM8L05JQ0s+Ci08QkxVUkI+JShibHVyYilzPC9CTFVSQj4KLTxERUZBVUxUPiUoZGVmYXVsdClzPC9ERUZBVUxUPgotPC9BUkc+Ci0iIiIKLSAgICAgICAgICAgICAgICBkID0gYS5kaWN0LmNvcHkoKQotICAgICAgICAgICAgICAgIGRbJ29iamVjdCddID0gby5uYW1lCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGJsb2NrICUgZCkKLQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKSArICdcbicKLQotY2xhc3MgU2luZ2xlTGluZShHRG9jKToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX29iamVjdHMgPSBbXQotCi0gICAgZGVmIGxvYWRfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIExvYWQgdGhlIC5pbnRlcmZhY2VzLy5wcmVyZXF1aXNpdGVzIGxpbmVzLCBtZXJnZSBkdXBsaWNhdGVzCi0gICAgICAgICIiIgotICAgICAgICAjIHNwbGl0IGRhdGEgb24gJ1xuJwotICAgICAgICBsaW5lcyA9IGRhdGEuc3BsaXRsaW5lcygpOwotICAgICAgICAjIG1lcmdlIHRoZW0gaW50byBzZWxmLl9vYmplY3RzCi0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgaWYgbGluZSBub3QgaW4gc2VsZi5fb2JqZWN0czoKLSAgICAgICAgICAgICAgICBzZWxmLl9vYmplY3RzLmFwcGVuZChsaW5lKQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBsaW5lcyA9IHNvcnRlZChzZWxmLl9vYmplY3RzKQotICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKSArICdcbicKLQotZGVmIG1haW4oYXJndik6Ci0gICAgbW9kdWxlbmFtZSA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIG1vZHVsZW5hbWUgPSBhcmd2WzFdCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1BsZWFzZSBwcm92aWRlIGEgZG9jdW1lbnRhdGlvbiBtb2R1bGUgbmFtZVxuJykKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIHNpZ25hbHMgPSBTaWduYWxzKCkKLSAgICBzaWduYWxzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5zaWduYWxzJykKLSAgICBzaWduYWxzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5zaWduYWxzLm5ldycpCi0gICAgc2lnbmFscy5zYXZlX2ZpbGUobW9kdWxlbmFtZSArICcuc2lnbmFscycsIGJhY2t1cD1UcnVlKQotICAgIG9zLnVubGluayhtb2R1bGVuYW1lICsgJy5zaWduYWxzLm5ldycpCi0KLSAgICBhcmdzID0gQXJncygpCi0gICAgYXJncy5sb2FkX2ZpbGUobW9kdWxlbmFtZSArICcuYXJncycpCi0gICAgYXJncy5sb2FkX2ZpbGUobW9kdWxlbmFtZSArICcuYXJncy5uZXcnKQotICAgIGFyZ3Muc2F2ZV9maWxlKG1vZHVsZW5hbWUgKyAnLmFyZ3MnLCBiYWNrdXA9VHJ1ZSkKLSAgICBvcy51bmxpbmsobW9kdWxlbmFtZSArICcuYXJncy5uZXcnKQotCi0gICAgaWZhY2VzID0gU2luZ2xlTGluZSgpCi0gICAgaWZhY2VzLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5pbnRlcmZhY2VzJykKLSAgICBpZmFjZXMubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLmludGVyZmFjZXMubmV3JykKLSAgICBpZmFjZXMuc2F2ZV9maWxlKG1vZHVsZW5hbWUgKyAnLmludGVyZmFjZXMnLCBiYWNrdXA9VHJ1ZSkKLSAgICBvcy51bmxpbmsobW9kdWxlbmFtZSArICcuaW50ZXJmYWNlcy5uZXcnKQotCi0gICAgcHJlcmVxID0gU2luZ2xlTGluZSgpCi0gICAgcHJlcmVxLmxvYWRfZmlsZShtb2R1bGVuYW1lICsgJy5wcmVyZXF1aXNpdGVzJykKLSAgICBwcmVyZXEubG9hZF9maWxlKG1vZHVsZW5hbWUgKyAnLnByZXJlcXVpc2l0ZXMubmV3JykKLSAgICBwcmVyZXEuc2F2ZV9maWxlKG1vZHVsZW5hbWUgKyAnLnByZXJlcXVpc2l0ZXMnLCBiYWNrdXA9VHJ1ZSkKLSAgICBvcy51bmxpbmsobW9kdWxlbmFtZSArICcucHJlcmVxdWlzaXRlcy5uZXcnKQotCi1tYWluKHN5cy5hcmd2KQpkaWZmIC0tZ2l0IGEvY29tbW9uL3VwbG9hZC1kb2MubWFrIGIvY29tbW9uL3VwbG9hZC1kb2MubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWM0OTQ1Li4wMDAwMDAwCi0tLSBhL2NvbW1vbi91cGxvYWQtZG9jLm1haworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSMgdGhpcyBzbmlwcGV0IGlzIHRvIGJlIGluY2x1ZGVkIGJ5IGJvdGggb3VyIGRvY2Jvb2sgbWFudWFscwotIyBhbmQgZ3RrLWRvYyBBUEkgcmVmZXJlbmNlcwotCi0jIGl0IGFkZHMgYW4gdXBsb2FkIHRhcmdldCB0byBlYWNoIG9mIHRoZXNlIGRpcidzIE1ha2VmaWxlcwotCi0jIGVhY2ggTWFrZWZpbGUuYW0gc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLSMgLSBET0M6IHRoZSBiYXNlIG5hbWUgb2YgdGhlIGRvY3VtZW50YXRpb24KLSMgICAgICAgIChmYXEsIG1hbnVhbCwgcHdnLCBnc3RyZWFtZXIsIGdzdHJlYW1lci1saWJzKQotIyAtIEZPUk1BVFM6IHRoZSBmb3JtYXRzIGluIHdoaWNoIERPQyBpcyBvdXRwdXQKLSMgICAgICAgICAgICAoaHRtbCBwcyBwZGYpCi0KLSMgaWYgeW91IHdhbnQgdG8gdXNlIGl0LCBtYWtlIHN1cmUgeW91ciAkSE9NRS8uc3NoL2NvbmZpZyBmaWxlIGNvbnRhaW5zIHRoZQotIyBjb3JyZWN0IFVzZXIgZW50cnkgZm9yIHRoZSBIb3N0IGVudHJ5IGZvciB0aGUgRE9DX1NFUlZFUgotCi0jIHRoZXNlIHZhcmlhYmxlcyBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBvbmxpbmUgZG9jcwotRE9DX1NFUlZFUiA9IGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcKLURPQ19CQVNFID0gL3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2RvYwotRE9DX1VSTCA9ICQoRE9DX1NFUlZFUik6JChET0NfQkFTRSkKLQotdXBsb2FkOiAkKEZPUk1BVFMpCi0JQGlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJQcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgaWYgdGVzdCB4JChidWlsZGRpcikgIT0geCQoc3JjZGlyKTsgdGhlbiBcCi0JICAgIGVjaG8gIm1ha2UgdXBsb2FkIGNhbiBvbmx5IGJlIHVzZWQgaWYgc3JjZGlyID09IGJ1aWxkZGlyIjsgXAotCSAgICBleGl0IDE7IFwKLQkgIGZpOyBcCi0JICAjIGd0a2RvYy1yZWJhc2Ugc29tZXRpbWVzIGdldHMgY29uZnVzZWQsIHNvIHJlc2V0IGV2ZXJ5dGhpbmcgdG8gXAotCSAgIyBsb2NhbCBsaW5rcyBiZWZvcmUgcmViYXNpbmcgdG8gb25saW5lIGxpbmtzICAgICAgICAgICAgICAgICAgIFwKLQkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDI+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgXAotCSAgcmViYXNlPWBndGtkb2MtcmViYXNlIC0tdmVyYm9zZSAtLW9ubGluZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWxgIDsgXAotCSAgZWNobyAiJCRyZWJhc2UiIHwgZ3JlcCAtZSAiT24tKmxpbmUiOyBcCi0JICBmb3IgcmVxIGluIGdsaWIgZ29iamVjdCBnc3RyZWFtZXIgZ3N0cmVhbWVyLWxpYnMgZ3N0LXBsdWdpbnMtYmFzZS1saWJzOyBkbyBcCi0JICAgIGlmICEgKCBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1pIC1lICJPbi0qbGluZS4qLyQkcmVxLyIgKTsgdGhlbiBcCi0JICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCi0JICAgICAgZWNobyAiIENvdWxkIG5vdCBkZXRlcm1pbmUgb25saW5lIGxvY2F0aW9uIGZvciAkJHJlcSBkb2NzLiBDcm9zcy1yZWZlcmVuY2luZyB3aWxsIGJlICIgOyBcCi0JICAgICAgZWNobyAiIGJyb2tlbiwgc28gbm90IHVwbG9hZGluZy4gTWFrZSBzdXJlIHRoZSBsaWJyYXJ5J3MgZ3RrLWRvYyBkb2N1bWVudGF0aW9uIGlzICAgICIgOyBcCi0JICAgICAgZWNobyAiIGluc3RhbGxlZCBzb21ld2hlcmUgaW4gL3Vzci9zaGFyZS9ndGstZG9jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgOyBcCi0JICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgOyBcCi0JICAgICAgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICBkb25lOyBcCi0JICBleHBvcnQgU1JDPSIkJFNSQyBodG1sIjsgXAotCWZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwcyA+IC9kZXYvbnVsbDsgdGhlbiBleHBvcnQgU1JDPSIkJFNSQyAkKERPQykucHMiOyBmaTsgXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgcGRmID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wZGYiOyBmaTsgXAotCVwKLQkjIHVwbG9hZCByZWxlYXNlcyB0byBib3RoIFguWS8gYW5kIGhlYWQvIHN1YmRpcmVjdG9yaWVzIFwKLQlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci8kKFBBQ0tBR0VfVkVSU0lPTl9NQUpPUikuJChQQUNLQUdFX1ZFUlNJT05fTUlOT1IpLyQoRE9DKTsgXAotCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAotCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAotCVwKLQlleHBvcnQgRElSPSQoRE9DX0JBU0UpL2dzdHJlYW1lci9oZWFkLyQoRE9DKTsgXAotCWVjaG8gVXBsb2FkaW5nICQkU1JDIHRvICQoRE9DX1NFUlZFUik6JCRESVI7IFwKLQlzc2ggJChET0NfU0VSVkVSKSBta2RpciAtcCAkJERJUjsgXAotCXJzeW5jIC1ydiAtZSBzc2ggLS1kZWxldGUgJCRTUkMgJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIGNobW9kIC1SIGcrdyAkJERJUjsgXAotCVwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIGh0bWwgPiAvZGV2L251bGw7IHRoZW4gXAotCSAgZWNobyAiVW4tcHJlcGFyaW5nIGRvY3MgZm9yIHVwbG9hZCAocmViYXNpbmcgY3Jvc3MtcmVmZXJlbmNlcykgLi4uIiA7IFwKLQkgIGd0a2RvYy1yZWJhc2UgLS1odG1sLWRpcj0kKGJ1aWxkZGlyKS9odG1sIDsgXAotCWZpOyBcCi0JZWNobyBEb25lCmRpZmYgLS1naXQgYS9jb21tb24vd2luMzIubWFrIGIvY29tbW9uL3dpbjMyLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2MDUzMi4uMDAwMDAwMAotLS0gYS9jb21tb24vd2luMzIubWFrCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIyB2YXJpb3VzIHRlc3RzIHRvIG1ha2Ugc3VyZSB3ZSBkaXN0IHRoZSB3aW4zMiBzdHVmZiAoZm9yIE1TVkMgYnVpbGRzKSByaWdodAotCi0jIHRoZSBNQU5JRkVTVCBjb250YWlucyBhbGwgd2luMzIgcmVsYXRlZCBmaWxlcyB0aGF0IHNob3VsZCBiZSBkaXN0ZWQKLXdpbjMyID0gJChzaGVsbCBjYXQgJCh0b3Bfc3JjZGlyKS93aW4zMi9NQU5JRkVTVCkKLQotIyB3aWxkY2FyZCBpcyBhcHBhcmVudGx5IG5vdCBwb3J0YWJsZSB0byBvdGhlciBtYWtlcywgaGVuY2UgdGhlIHVzZSBvZiBmaW5kCi0jIHRoZXNlIGFyZSBsaWJyYXJ5IC5kZWYgZmlsZXMgd2l0aCB0aGUgc3ltYm9scyB0byBleHBvcnQKLXdpbjMyZGVmcyA9ICQoc2hlbGwgZmluZCAkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbiAtbmFtZSAnKi5kZWYnKQotCi0jIHdpbGRjYXJkIGlzIGFwcGFyZW50bHkgbm90IHBvcnRhYmxlIHRvIG90aGVyIG1ha2VzLCBoZW5jZSB0aGUgdXNlIG9mIGZpbmQKLSMgdGhlc2UgYXJlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBkaXN0ZWQgd2l0aCBDUkxGIGxpbmUgZW5kaW5nczoKLXdpbjMyY3JsZiA9ICQoc2hlbGwgZmluZCAkKHRvcF9zcmNkaXIpL3dpbjMyIC1uYW1lICcqLmRzdycgLW8gLW5hbWUgJyouZHNwJykKLQotd2luMzItZGVidWc6Ci0JQGVjaG87IFwKLQllY2hvIHdpbjMyICAgICA9ICQod2luMzIpOyBcCi0JZWNobzsgXAotCWVjaG8gd2luMzJkZWZzID0gJCh3aW4zMmRlZnMpOyBcCi0JZWNobzsgXAotCWVjaG8gd2luMzJjcmxmID0gJCh3aW4zMmNybGYpOyBcCi0JZWNobwotCi13aW4zMi1jaGVjay1jcmxmOgotCUBlY2hvIENoZWNraW5nIHdpbjMyIGZpbGVzIGZvciBDUiBMRiBsaW5lIGVuZGluZ3MgLi4uOyBcCi0JZmFpbD0wIDsgXAotCWZvciBlYWNoIGluICQod2luMzJjcmxmKSA7IGRvIFwKLQkgIHJlc3VsdD1gcGVybCAtZSAncHJpbnQgZ3JlcCgvXHJcbi8sPD4pJyAiJCRlYWNoIiB8IHdjIC1sYDsgXAotCSAgaWYgdGVzdCAiJCRyZXN1bHQiID0gMCA7IHRoZW4gXAotCSAgICBlY2hvICQkZWFjaCBtdXN0IGJlIGZpeGVkIHRvIGhhdmUgQ1JMRiBsaW5lIGVuZGluZ3MgOyBcCi0JICAgIGZhaWw9MTsgXAotCSAgZmkgOyBcCi0JZG9uZSA7IFwKLQlleGl0ICQkZmFpbAotCi0jIG1ha2Ugc3VyZSBhbGwgc3ltYm9scyB3ZSBleHBvcnQgb24gbGludXggYXJlIGRlZmluZWQgaW4gdGhlIHdpbjMyIC5kZWYgdG9vCi0jIChkb24ndCBjYXJlIGFib3V0IG90aGVyIHVuaXhlcyBmb3Igbm93LCBpdCdzIGVub3VnaCBpZiBpdCB3b3JrcyBvbiBvbmUgb2YKLSMgdGhlIGxpbnV4IGJ1aWxkIGJvdHM7IHdlIGFzc3VtZSAuc28gKQotY2hlY2stZXhwb3J0czoKLQlAZmFpbD0wIDsgXAotCWZvciBsIGluICQod2luMzJkZWZzKTsgZG8gXAotCSAgbGliYmFzZT1gYmFzZW5hbWUgIiQkbCIgIi5kZWYiYDsgXAotCSAgbGlic289YGZpbmQgIiQodG9wX2J1aWxkZGlyKSIgLW5hbWUgIiQkbGliYmFzZS1AR1NUX0FQSV9WRVJTSU9OQC5zbyIgfCBncmVwIC12IC9fYnVpbGQvIHwgaGVhZCAtbjFgOyBcCi0JICBsaWJkZWY9IiQodG9wX3NyY2Rpcikvd2luMzIvY29tbW9uLyQkbGliYmFzZS5kZWYiOyBcCi0JICBpZiB0ZXN0ICJ4JCRsaWJzbyIgIT0gIngiOyB0aGVuIFwKLQkgICAgZWNobyBDaGVja2luZyBzeW1ib2xzIGluICQkbGlic287IFwKLQkgICAgaWYgISAoJCh0b3Bfc3JjZGlyKS9jb21tb24vY2hlY2stZXhwb3J0cyAkJGxpYmRlZiAkJGxpYnNvKSA7IHRoZW4gXAotCSAgICAgIGVjaG8gIiQkbGliZGVmIjsgXAotCSAgICAgIGlmIHRlc3QgIiQkbGliYmFzZSIgIT0gImxpYmdzdGdsIjsgdGhlbiBcCi0JICAgICAgICBmYWlsPTE7IFwKLQkgICAgICBmaTsgXAotCSAgICBmaTsgXAotCSAgZmk7IFwKLQlkb25lIDsgXAotCWlmIHRlc3QgJCRmYWlsICE9IDA7IHRoZW4gXAotCSAgZWNobyAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nOyBcCi0JICBlY2hvICdSdW4gdGhpcyB0byB1cGRhdGUgdGhlIC5kZWYgZmlsZXM6JzsgXAotCSAgZWNobyAnbWFrZSB1cGRhdGUtZXhwb3J0cyc7IFwKLQkgIGVjaG8gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJzsgXAotCWZpOyBcCi0JZXhpdCAkJGZhaWwKLQotdXBkYXRlLWV4cG9ydHM6Ci0JbWFrZSBjaGVjay1leHBvcnRzIDI+JjEgfCBwYXRjaCAtcDEKLQlpZiB0ZXN0IC1mICIkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi9saWJnc3RnbC5kZWYiOyB0aGVuIFwKLQkgIGdpdCBjaGVja291dCAiJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vbGliZ3N0Z2wuZGVmIjsgIFwKLQlmaQotCWdpdCBhZGQgJCh0b3Bfc3JjZGlyKS93aW4zMi9jb21tb24vbGliZ3N0Ki5kZWYKLQlnaXQgZGlmZiAtLWNhY2hlZCAtLSAkKHRvcF9zcmNkaXIpL3dpbjMyL2NvbW1vbi8KLQllY2hvICdeXl4tLS0gdXBkYXRlZCBhbmQgc3RhZ2VkIGNoYW5nZXMgYWJvdmUnCi0KLSMgY29tcGxhaW4gYWJvdXQgbm9ucG9ydGFibGUgcHJpbnRmIGZvcm1hdCBzdHJpbmdzICglbGxkLCAlbGx1LCAlenUgZXRjLikKLWNoZWNrLW5vbnBvcnRhYmxlLXByaW50LWZvcm1hdDoKLQlAZmFpbD0wIDsgXAotCWxvYz1gZmluZCAiJCh0b3Bfc3JjZGlyKSIgLW5hbWUgJyouYycgfCB4YXJncyBncmVwIC1uIC1lICclWzAtOV0qbGxbdWR4XScgLWUgJyVbMC05XSp6W3VkeF0nYDsgXAotCWlmIHRlc3QgIngkJGxvYyIgIT0gIngiOyB0aGVuIFwKLQkgIGVjaG8gIlBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBwcmludCBmb3JtYXQgc3RyaW5nczoiIDsgXAotCSAgZmluZCAiJCh0b3Bfc3JjZGlyKSIgLW5hbWUgJyouYycgfCB4YXJncyBncmVwIC1uIC1lICclWzAtOV0qbGxbdWR4XScgLWUgJyVbMC05XSp6W3VkeF0nOyBcCi0JICBmYWlsPTE7IFwKLQlmaTsgXAotCWV4aXQgJCRmYWlsCi0KLWRpc3QtaG9vazogY2hlY2stZXhwb3J0cyB3aW4zMi1jaGVjay1jcmxmCi0KLQpkaWZmIC0tZ2l0IGEvY29tcGlsZSBiL2NvbXBpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGE4NWI3MjMuLjAwMDAwMDAKLS0tIGEvY29tcGlsZQorKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0jISAvYmluL3NoCi0jIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgotCi1zY3JpcHR2ZXJzaW9uPTIwMTItMTAtMTQuMTE7ICMgVVRDCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLSMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKLSMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bwotIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KLQotbmw9JwotJwotCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcwotIyB0aGVyZSB0byBwcmV2ZW50IHRvb2xzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgd2hpdGVzcGFjZSB1c2FnZS4KLUlGUz0iICIiCSRubCIKLQotZmlsZV9jb252PQotCi0jIGZ1bmNfZmlsZV9jb252IGJ1aWxkX2ZpbGUgbGF6eQotIyBDb252ZXJ0IGEgJGJ1aWxkIGZpbGUgdG8gJGhvc3QgZm9ybSBhbmQgc3RvcmUgaXQgaW4gJGZpbGUKLSMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luZG93cyBob3N0cy4gSWYgdGhlIGRldGVybWluZWQgY29udmVyc2lvbgotIyB0eXBlIGlzIGxpc3RlZCBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB3aWxsCi0jIHRha2UgcGxhY2UuCi1mdW5jX2ZpbGVfY29udiAoKQotewotICBmaWxlPSQxCi0gIGNhc2UgJGZpbGUgaW4KLSAgICAvIHwgL1shL10qKSAjIGFic29sdXRlIGZpbGUsIGFuZCBub3QgYSBVTkMgZmlsZQotICAgICAgaWYgdGVzdCAteiAiJGZpbGVfY29udiI7IHRoZW4KLQkjIGxhemlseSBkZXRlcm1pbmUgaG93IHRvIGNvbnZlcnQgYWJzIGZpbGVzCi0JY2FzZSBgdW5hbWUgLXNgIGluCi0JICBNSU5HVyopCi0JICAgIGZpbGVfY29udj1taW5ndwotCSAgICA7OwotCSAgQ1lHV0lOKikKLQkgICAgZmlsZV9jb252PWN5Z3dpbgotCSAgICA7OwotCSAgKikKLQkgICAgZmlsZV9jb252PXdpbmUKLQkgICAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgY2FzZSAkZmlsZV9jb252LywkMiwgaW4KLQkqLCRmaWxlX2NvbnYsKikKLQkgIDs7Ci0JbWluZ3cvKikKLQkgIGZpbGU9YGNtZCAvL0MgZWNobyAiJGZpbGUgIiB8IHNlZCAtZSAncy8iXCguKlwpICIgKiQvXDEvJ2AKLQkgIDs7Ci0JY3lnd2luLyopCi0JICBmaWxlPWBjeWdwYXRoIC1tICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAotCSAgOzsKLQl3aW5lLyopCi0JICBmaWxlPWB3aW5lcGF0aCAtdyAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKLQkgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICBlc2FjCi19Ci0KLSMgZnVuY19jbF9kYXNoTCBsaW5rZGlyCi0jIE1ha2UgY2wgbG9vayBmb3IgbGlicmFyaWVzIGluIExJTktESVIKLWZ1bmNfY2xfZGFzaEwgKCkKLXsKLSAgZnVuY19maWxlX2NvbnYgIiQxIgotICBpZiB0ZXN0IC16ICIkbGliX3BhdGgiOyB0aGVuCi0gICAgbGliX3BhdGg9JGZpbGUKLSAgZWxzZQotICAgIGxpYl9wYXRoPSIkbGliX3BhdGg7JGZpbGUiCi0gIGZpCi0gIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgLUxJQlBBVEg6JGZpbGUiCi19Ci0KLSMgZnVuY19jbF9kYXNobCBsaWJyYXJ5Ci0jIERvIGEgbGlicmFyeSBzZWFyY2gtcGF0aCBsb29rdXAgZm9yIGNsCi1mdW5jX2NsX2Rhc2hsICgpCi17Ci0gIGxpYj0kMQotICBmb3VuZD1ubwotICBzYXZlX0lGUz0kSUZTCi0gIElGUz0nOycKLSAgZm9yIGRpciBpbiAkbGliX3BhdGggJExJQgotICBkbwotICAgIElGUz0kc2F2ZV9JRlMKLSAgICBpZiAkc2hhcmVkICYmIHRlc3QgLWYgIiRkaXIvJGxpYi5kbGwubGliIjsgdGhlbgotICAgICAgZm91bmQ9eWVzCi0gICAgICBsaWI9JGRpci8kbGliLmRsbC5saWIKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWIubGliIjsgdGhlbgotICAgICAgZm91bmQ9eWVzCi0gICAgICBsaWI9JGRpci8kbGliLmxpYgotICAgICAgYnJlYWsKLSAgICBmaQotICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJGxpYi5hIjsgdGhlbgotICAgICAgZm91bmQ9eWVzCi0gICAgICBsaWI9JGRpci9saWIkbGliLmEKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9JHNhdmVfSUZTCi0KLSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KLSAgICBsaWI9JGxpYi5saWIKLSAgZmkKLX0KLQotIyBmdW5jX2NsX3dyYXBwZXIgY2wgYXJnLi4uCi0jIEFkanVzdCBjb21waWxlIGNvbW1hbmQgdG8gc3VpdCBjbAotZnVuY19jbF93cmFwcGVyICgpCi17Ci0gICMgQXNzdW1lIGEgY2FwYWJsZSBzaGVsbAotICBsaWJfcGF0aD0KLSAgc2hhcmVkPToKLSAgbGlua2VyX29wdHM9Ci0gIGZvciBhcmcKLSAgZG8KLSAgICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgotICAgICAgZWF0PQotICAgIGVsc2UKLSAgICAgIGNhc2UgJDEgaW4KLQktbykKLQkgICMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgotCSAgZWF0PTEKLQkgIGNhc2UgJDIgaW4KLQkgICAgKi5vIHwgKi5bb09dW2JCXVtqSl0pCi0JICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgotCSAgICAgIHNldCB4ICIkQCIgLUZvIiRmaWxlIgotCSAgICAgIHNoaWZ0Ci0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCi0JICAgICAgc2V0IHggIiRAIiAtRmUiJGZpbGUiCi0JICAgICAgc2hpZnQKLQkgICAgICA7OwotCSAgZXNhYwotCSAgOzsKLQktSSkKLQkgIGVhdD0xCi0JICBmdW5jX2ZpbGVfY29udiAiJDIiIG1pbmd3Ci0JICBzZXQgeCAiJEAiIC1JIiRmaWxlIgotCSAgc2hpZnQKLQkgIDs7Ci0JLUkqKQotCSAgZnVuY19maWxlX2NvbnYgIiR7MSMtSX0iIG1pbmd3Ci0JICBzZXQgeCAiJEAiIC1JIiRmaWxlIgotCSAgc2hpZnQKLQkgIDs7Ci0JLWwpCi0JICBlYXQ9MQotCSAgZnVuY19jbF9kYXNobCAiJDIiCi0JICBzZXQgeCAiJEAiICIkbGliIgotCSAgc2hpZnQKLQkgIDs7Ci0JLWwqKQotCSAgZnVuY19jbF9kYXNobCAiJHsxIy1sfSIKLQkgIHNldCB4ICIkQCIgIiRsaWIiCi0JICBzaGlmdAotCSAgOzsKLQktTCkKLQkgIGVhdD0xCi0JICBmdW5jX2NsX2Rhc2hMICIkMiIKLQkgIDs7Ci0JLUwqKQotCSAgZnVuY19jbF9kYXNoTCAiJHsxIy1MfSIKLQkgIDs7Ci0JLXN0YXRpYykKLQkgIHNoYXJlZD1mYWxzZQotCSAgOzsKLQktV2wsKikKLQkgIGFyZz0kezEjLVdsLH0KLQkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJwotCSAgZm9yIGZsYWcgaW4gJGFyZzsgZG8KLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJGZsYWciCi0JICBkb25lCi0JICBJRlM9IiRzYXZlX2lmcyIKLQkgIDs7Ci0JLVhsaW5rZXIpCi0JICBlYXQ9MQotCSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkMiIKLQkgIDs7Ci0JLSopCi0JICBzZXQgeCAiJEAiICIkMSIKLQkgIHNoaWZ0Ci0JICA7OwotCSouY2MgfCAqLkNDIHwgKi5jeHggfCAqLkNYWCB8ICouW2NDXSsrKQotCSAgZnVuY19maWxlX2NvbnYgIiQxIgotCSAgc2V0IHggIiRAIiAtVHAiJGZpbGUiCi0JICBzaGlmdAotCSAgOzsKLQkqLmMgfCAqLmNwcCB8ICouQ1BQIHwgKi5saWIgfCAqLkxJQiB8ICouTGliIHwgKi5PQkogfCAqLm9iaiB8ICouW29PXSkKLQkgIGZ1bmNfZmlsZV9jb252ICIkMSIgbWluZ3cKLQkgIHNldCB4ICIkQCIgIiRmaWxlIgotCSAgc2hpZnQKLQkgIDs7Ci0JKikKLQkgIHNldCB4ICIkQCIgIiQxIgotCSAgc2hpZnQKLQkgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICBzaGlmdAotICBkb25lCi0gIGlmIHRlc3QgLW4gIiRsaW5rZXJfb3B0cyI7IHRoZW4KLSAgICBsaW5rZXJfb3B0cz0iLWxpbmskbGlua2VyX29wdHMiCi0gIGZpCi0gIGV4ZWMgIiRAIiAkbGlua2VyX29wdHMKLSAgZXhpdCAxCi19Ci0KLWVhdD0KLQotY2FzZSAkMSBpbgotICAnJykKLSAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCi0gICAgIGV4aXQgMTsKLSAgICAgOzsKLSAgLWggfCAtLWgqKQotICAgIGNhdCA8PFxFT0YKLVVzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCi0KLVdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgotUmVtb3ZlICctbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCi1hcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KLQotSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQotcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgJ0lOU1RBTEwnLgotCi1SZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgotRU9GCi0gICAgZXhpdCAkPwotICAgIDs7Ci0gIC12IHwgLS12KikKLSAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgotICAgIGV4aXQgJD8KLSAgICA7OwotICBjbCB8ICpbL1xcXWNsIHwgY2wuZXhlIHwgKlsvXFxdY2wuZXhlICkKLSAgICBmdW5jX2NsX3dyYXBwZXIgIiRAIiAgICAgICMgRG9lc24ndCByZXR1cm4uLi4KLSAgICA7OwotZXNhYwotCi1vZmlsZT0KLWNmaWxlPQotCi1mb3IgYXJnCi1kbwotICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgotICAgIGVhdD0KLSAgZWxzZQotICAgIGNhc2UgJDEgaW4KLSAgICAgIC1vKQotCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgotCSMgU28gd2Ugc3RyaXAgJy1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgotCWVhdD0xCi0JY2FzZSAkMiBpbgotCSAgKi5vIHwgKi5vYmopCi0JICAgIG9maWxlPSQyCi0JICAgIDs7Ci0JICAqKQotCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKLQkgICAgc2hpZnQKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgICouYykKLQljZmlsZT0kMQotCXNldCB4ICIkQCIgIiQxIgotCXNoaWZ0Ci0JOzsKLSAgICAgICopCi0Jc2V0IHggIiRAIiAiJDEiCi0Jc2hpZnQKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc2hpZnQKLWRvbmUKLQotaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCi0gICMgSWYgbm8gJy1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKLSAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQotICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCi0gICMgJy5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KLSAgIyBvay4KLSAgZXhlYyAiJEAiCi1maQotCi0jIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgotY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkICdzfF4uKltcXC9dfHw7IHN8XlthLXpBLVpdOnx8OyBzL1wuYyQvLm8vJ2AKLQotIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgotIyBOb3RlOiB1c2UgJ1svXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCi0jIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCi0jIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KLWxvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKLXdoaWxlIHRydWU7IGRvCi0gIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgYnJlYWsKLSAgZmkKLSAgc2xlZXAgMQotZG9uZQotIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCi10cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQotCi0jIFJ1biB0aGUgY29tcGlsZS4KLSIkQCIKLXJldD0kPwotCi1pZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgotICB0ZXN0ICIkY29maWxlIiA9ICIkb2ZpbGUiIHx8IG12ICIkY29maWxlIiAiJG9maWxlIgotZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KLSAgdGVzdCAiJHtjb2ZpbGV9YmoiID0gIiRvZmlsZSIgfHwgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgotZmkKLQotcm1kaXIgIiRsb2NrZGlyIgotZXhpdCAkcmV0Ci0KLSMgTG9jYWwgVmFyaWFibGVzOgotIyBtb2RlOiBzaGVsbC1zY3JpcHQKLSMgc2gtaW5kZW50YXRpb246IDIKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDJlOWFkN2YuLjAwMDAwMDAKLS0tIGEvY29uZmlnLmd1ZXNzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2MiArMCwwIEBACi0jISAvYmluL3NoCi0jIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotdGltZXN0YW1wPScyMDE2LTEwLTAyJwotCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKLSMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKLSMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgotIwotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXI7IG1haW50YWluZWQgc2luY2UgMjAwMCBieSBCZW4gRWxsaXN0b24uCi0jCi0jIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgotIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzCi0jCi0jIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LgotCi0KLW1lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAotCi11c2FnZT0iXAotVXNhZ2U6ICQwIFtPUFRJT05dCi0KLU91dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KLQotT3BlcmF0aW9uIG1vZGVzOgotICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAotICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotCi1SZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgotCi12ZXJzaW9uPSJcCi1HTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQotCi1PcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCi1Db3B5cmlnaHQgMTk5Mi0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi1UaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgotCi1oZWxwPSIKLVRyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLQotIyBQYXJzZSBjb21tYW5kIGxpbmUKLXdoaWxlIHRlc3QgJCMgLWd0IDAgOyBkbwotICBjYXNlICQxIGluCi0gICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKLSAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKLSAgICAtLXZlcnNpb24gfCAtdiApCi0gICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OwotICAgIC0taGVscCB8IC0taCogfCAtaCApCi0gICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OwotICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZwotICAgICAgIHNoaWZ0OyBicmVhayA7OwotICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KLSAgICAgICBicmVhayA7OwotICAgIC0qICkKLSAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgotICAgICAgIGV4aXQgMSA7OwotICAgICogKQotICAgICAgIGJyZWFrIDs7Ci0gIGVzYWMKLWRvbmUKLQotaWYgdGVzdCAkIyAhPSAwOyB0aGVuCi0gIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgotICBleGl0IDEKLWZpCi0KLXRyYXAgJ2V4aXQgMScgMSAyIDE1Ci0KLSMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKLSMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKLSMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQotIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgotCi0jIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCi0jIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCi0KLSMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KLQotc2V0X2NjX2Zvcl9idWlsZD0nCi10cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKLXRyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Ci06ICR7VE1QRElSPS90bXB9IDsKLSB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8Ci0geyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKLSB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKLSB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7Ci1kdW1teT0kdG1wL2R1bW15IDsKLXRtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOwotY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgotICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOwotCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KLQkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgotCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKLQkgIGZpIDsKLQlkb25lIDsKLQlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgotCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKLQlmaQotCTs7Ci0gLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKLSAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Ci1lc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKLQotIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KLSMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQotaWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KLQlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKLWZpCi0KLVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgotVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCi1VTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgotVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCi0KLWNhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KLUxpbnV4fEdOVXxHTlUvKikKLQkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCi0JIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgotCUxJQkM9Z251Ci0KLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JY2F0IDw8LUVPRiA+ICRkdW1teS5jCi0JI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0JI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKLQlMSUJDPXVjbGliYwotCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQotCUxJQkM9ZGlldGxpYmMKLQkjZWxzZQotCUxJQkM9Z251Ci0JI2VuZGlmCi0JRU9GCi0JZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJyB8IHNlZCAncywgLCxnJ2AKLQk7OwotZXNhYwotCi0jIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCi0KLWNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KLSAgICAqOk5ldEJTRDoqOiopCi0JIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKLQkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKLQkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQotCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAotCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKLQkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKLQkjIG9iamVjdCBmaWxlIGZvcm1hdC4KLQkjCi0JIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCi0JIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCi0Jc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgotCVVOQU1FX01BQ0hJTkVfQVJDSD1gKHVuYW1lIC1wIDI+L2Rldi9udWxsIHx8IFwKLQkgICAgL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCi0JICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKLQkgICAgZWNobyB1bmtub3duKWAKLQljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCi0JICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKLQkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OwotCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OwotCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7Ci0JICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKLQkgICAgZWFybXYqKQotCQlhcmNoPWBlY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfSB8IHNlZCAtZSAncyxeZVwoYXJtdlswLTldXCkuKiQsXDEsJ2AKLQkJZW5kaWFuPWBlY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfSB8IHNlZCAtbmUgJ3MsXi4qXChlYlwpJCxcMSxwJ2AKLQkJbWFjaGluZT0ke2FyY2h9JHtlbmRpYW59LXVua25vd24KLQkJOzsKLQkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OwotCWVzYWMKLQkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKLQkjIHRvIEVMRiByZWNlbnRseSAob3Igd2lsbCBpbiB0aGUgZnV0dXJlKSBhbmQgQUJJLgotCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KLQkgICAgZWFybSopCi0JCW9zPW5ldGJzZGVsZgotCQk7OwotCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKLQkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAotCQkJfCBncmVwIC1xIF9fRUxGX18KLQkJdGhlbgotCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgotCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/Ci0JCSAgICBvcz1uZXRic2QKLQkJZWxzZQotCQkgICAgb3M9bmV0YnNkZWxmCi0JCWZpCi0JCTs7Ci0JICAgICopCi0JCW9zPW5ldGJzZAotCQk7OwotCWVzYWMKLQkjIERldGVybWluZSBBQkkgdGFncy4KLQljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCi0JICAgIGVhcm0qKQotCQlleHByPSdzL15lYXJtdlswLTldLy1lYWJpLztzL2ViJC8vJwotCQlhYmk9YGVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9IHwgc2VkIC1lICIkZXhwciJgCi0JCTs7Ci0JZXNhYwotCSMgVGhlIE9TIHJlbGVhc2UKLQkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAotCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKLQkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCi0JIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCi0JY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KLQkgICAgRGViaWFuKikKLQkJcmVsZWFzZT0nLWdudScKLQkJOzsKLQkgICAgKikKLQkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1stX10uKi8vJyB8IGN1dCAtZC4gLWYxLDJgCi0JCTs7Ci0JZXNhYwotCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgotCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgotCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KLQllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSR7YWJpfSIKLQlleGl0IDs7Ci0gICAgKjpCaXRyaWc6KjoqKQotCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9CaXRyaWcuLy8nYAotCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tYml0cmlnJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOk9wZW5CU0Q6KjoqKQotCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKLQllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6TGliZXJ0eUJTRDoqOiopCi0JVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL14uKkJTRFwuLy8nYAotCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tbGliZXJ0eWJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpla2tvQlNEOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlNvbGlkQlNEOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zb2xpZGJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgbWFjcHBjOk1pckJTRDoqOiopCi0JZWNobyBwb3dlcnBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOk1pckJTRDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlNvcnRpeDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29ydGl4Ci0JZXhpdCA7OwotICAgIGFscGhhOk9TRjE6KjoqKQotCWNhc2UgJFVOQU1FX1JFTEVBU0UgaW4KLQkqNC4wKQotCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAotCQk7OwotCSo1LiopCi0JCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCi0JCTs7Ci0JZXNhYwotCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCi0JIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKLQkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCi0JIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCi0JQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAotCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KLQkgICAgIkVWNCAoMjEwNjQpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYSA7OwotCSAgICAiRVY0LjUgKDIxMDY0KSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKLQkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKLQkgICAgIkVWNSAoMjExNjQpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OwotCSAgICAiRVY1LjYgKDIxMTY0QSkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OwotCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7Ci0JICAgICJFVjUuNyAoMjExNjRQQykiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhcGNhNTcgOzsKLQkgICAgIkVWNiAoMjEyNjQpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OwotCSAgICAiRVY2LjcgKDIxMjY0QSkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OwotCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0JICAgICJFVjYuOEFMICgyMTI2NEIpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKLQkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2OSA7OwotCSAgICAiRVY3ICgyMTM2NCkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY3IDs7Ci0JICAgICJFVjcuOSAoMjEzNjRBKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjc5IDs7Ci0JZXNhYwotCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCi0JIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCi0JIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KLQkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KLQkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YAotCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KLQlleGl0Y29kZT0kPwotCXRyYXAgJycgMAotCWV4aXQgJGV4aXRjb2RlIDs7Ci0gICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKLQkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/Ci0JIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCi0JIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/Ci0JZWNobyBhbHBoYS1wYy1pbnRlcml4Ci0JZXhpdCA7OwotICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKLQllY2hvIGFscGhhLWRlYy13aW5udDMuNQotCWV4aXQgOzsKLSAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKLQllY2hvIG02OGstdW5rbm93bi1zeXN2NAotCWV4aXQgOzsKLSAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKLQlleGl0IDs7Ci0gICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCi0JZXhpdCA7OwotICAgICo6T1MvMzkwOio6KikKLQllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCi0JZXhpdCA7OwotICAgICo6ei9WTToqOiopCi0JZWNobyBzMzkwLWlibS16dm1vZQotCWV4aXQgOzsKLSAgICAqOk9TNDAwOio6KikKLQllY2hvIHBvd2VycGMtaWJtLW9zNDAwCi0JZXhpdCA7OwotICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKLQllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCi0JZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKLQlleGl0IDs7Ci0gICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKLQllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCi0JZXhpdCA7OwotICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQotCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCi0JaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgotCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MwotCWVsc2UKLQkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCi0JZmkKLQlleGl0IDs7Ci0gICAgTklMRSo6KjoqOmRjb3N4KQotCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKLQlleGl0IDs7Ci0gICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCi0JZWNobyBzcGFyYy1pY2wtbng2Ci0JZXhpdCA7OwotICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKLQljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KLQkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OwotCWVzYWMgOzsKLSAgICBzMzkweDpTdW5PUzoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgOzsKLSAgICBzdW40SDpTdW5PUzo1Lio6KikKLQllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgOzsKLSAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQotCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQotCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCVNVTl9BUkNIPWkzODYKLQkjIElmIHRoZXJlIGlzIGEgY29tcGlsZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KLQkjIE5vdGUgdGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRvZXMuCi0JIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgotCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kIF07IHRoZW4KLQkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKLQkJKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCSAgICB0aGVuCi0JCVNVTl9BUkNIPXg4Nl82NAotCSAgICBmaQotCWZpCi0JZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgOzsKLSAgICBzdW40KjpTdW5PUzo2KjoqKQotCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCi0JIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKLQkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgotCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjQqOlN1bk9TOio6KikKLQljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCi0JICAgIFNlcmllcyp8UzQqKQotCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKLQkJOzsKLQllc2FjCi0JIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgotCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCi0JZXhpdCA7OwotICAgIHN1bjMqOlN1bk9TOio6KikKLQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBzdW4qOio6NC4yQlNEOiopCi0JVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKLQl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSB4ICYmIFVOQU1FX1JFTEVBU0U9MwotCWNhc2UgImAvYmluL2FyY2hgIiBpbgotCSAgICBzdW4zKQotCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCQk7OwotCSAgICBzdW40KQotCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KLQkJOzsKLQllc2FjCi0JZXhpdCA7OwotICAgIGF1c2hwOlN1bk9TOio6KikKLQllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKLSAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKLSAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCi0gICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgotICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5Ci0gICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKLSAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKLSAgICAjIGJlIG5vIHByb2JsZW0uCi0gICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCi0JZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKLQllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCi0JZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKLQllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQotCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKLQllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBtNjhrOm1hY2h0ZW46KjoqKQotCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQotCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBSSVNDKjpNYWNoOio6KikKLQllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCi0JZXhpdCA7OwotICAgIFJJU0MqOlVMVFJJWDoqOiopCi0JZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFZBWCo6VUxUUklYKjoqOiopCi0JZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCi0JZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCi0jaWZkZWYgX19jcGx1c3BsdXMKLSNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLwotCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ci0jZWxzZQotCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7Ci0jZW5kaWYKLQkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCi0JI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKLQkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKLQkjZW5kaWYKLQkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQotCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOwotCSNlbmRpZgotCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQotCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7Ci0JI2VuZGlmCi0JI2VuZGlmCi0JICBleGl0ICgtMSk7Ci0JfQotRU9GCi0JJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKLQkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCi0JICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKLQkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0JZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCi0JZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4Ci0JZXhpdCA7OwotICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQotCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKLQlleGl0IDs7Ci0gICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKLQllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4Ci0JZXhpdCA7OwotICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCi0JZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKLQlleGl0IDs7Ci0gICAgbTg4azpDWC9VWDo3KjoqKQotCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKLQlleGl0IDs7Ci0gICAgbTg4azoqOjQqOlI0KikKLQllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKLQlleGl0IDs7Ci0gICAgbTg4azoqOjMqOlIzKikKLQllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKLQlleGl0IDs7Ci0gICAgQVZpaU9OOmRndXg6KjoqKQotCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCi0JVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKLQlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCi0JdGhlbgotCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKLQkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KLQkgICAgdGhlbgotCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KLQkgICAgZWxzZQotCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KLQkgICAgZmkKLQllbHNlCi0JICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQotCWZpCi0JZXhpdCA7OwotICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCi0JZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKLQlleGl0IDs7Ci0gICAgTTg4KjoqOlIzKjoqKQotCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKLQllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKLQlleGl0IDs7Ci0gICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCi0JZWNobyBtODhrLXRla3Ryb25peC1zeXN2MwotCWV4aXQgOzsKLSAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQotCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCi0JZXhpdCA7OwotICAgICo6SVJJWCo6KjoqKQotCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKLQlleGl0IDs7Ci0gICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgotCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCi0JZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJwotICAgIGkqODY6QUlYOio6KikKLQllY2hvIGkzODYtaWJtLWFpeAotCWV4aXQgOzsKLSAgICBpYTY0OkFJWDoqOiopCi0JaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCi0JCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCi0JZWxzZQotCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQotCWZpCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9Ci0JZXhpdCA7OwotICAgICo6QUlYOjI6MykKLQlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KLQotCQltYWluKCkKLQkJCXsKLQkJCWlmICghX19wb3dlcl9wYygpKQotCQkJCWV4aXQoMSk7Ci0JCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOwotCQkJZXhpdCgwKTsKLQkJCX0KLUVPRgotCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAotCQl0aGVuCi0JCQllY2hvICIkU1lTVEVNX05BTUUiCi0JCWVsc2UKLQkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQotCQlmaQotCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAotCWVsc2UKLQkJZWNobyByczYwMDAtaWJtLWFpeDMuMgotCWZpCi0JZXhpdCA7OwotICAgICo6QUlYOio6WzQ1NjddKQotCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAotCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQlJQk1fQVJDSD1yczYwMDAKLQllbHNlCi0JCUlCTV9BUkNIPXBvd2VycGMKLQlmaQotCWlmIFsgLXggL3Vzci9iaW4vbHNscHAgXSA7IHRoZW4KLQkJSUJNX1JFVj1gL3Vzci9iaW4vbHNscHAgLUxxYyBib3MucnRlLmxpYmMgfAotCQkJICAgYXdrIC1GOiAneyBwcmludCAkMyB9JyB8IHNlZCBzL1swLTldKiQvMC9gCi0JZWxzZQotCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQotCWZpCi0JZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQotCWV4aXQgOzsKLSAgICAqOkFJWDoqOiopCi0JZWNobyByczYwMDAtaWJtLWFpeAotCWV4aXQgOzsKLSAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKLQllY2hvIHJvbXAtaWJtLWJzZDQuNAotCWV4aXQgOzsKLSAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAotCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KLQlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMwotICAgICo6Qk9TWDoqOiopCi0JZWNobyByczYwMDAtYnVsbC1ib3N4Ci0JZXhpdCA7OwotICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCi0JZWNobyBtNjhrLWJ1bGwtc3lzdjMKLQlleGl0IDs7Ci0gICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQotCWVjaG8gbTY4ay1ocC1ic2QKLQlleGl0IDs7Ci0gICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKLQllY2hvIG02OGstaHAtYnNkNC40Ci0JZXhpdCA7OwotICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKLQlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKLQljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgotCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKLQkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OwotCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKLQkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KLQkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAotCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCi0JCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KLQkJICAgICAgNTIzKSBIUF9BUkNIPWhwcGExLjAgOzsgIyBDUFVfUEFfUklTQzFfMAotCQkgICAgICA1MjgpIEhQX0FSQ0g9aHBwYTEuMSA7OyAjIENQVV9QQV9SSVNDMV8xCi0JCSAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAotCQkJY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCi0JCQkgIDMyKSBIUF9BUkNIPWhwcGEyLjBuIDs7Ci0JCQkgIDY0KSBIUF9BUkNIPWhwcGEyLjB3IDs7Ci0JCQkgICcnKSBIUF9BUkNIPWhwcGEyLjAgOzsgICAjIEhQLVVYIDEwLjIwCi0JCQllc2FjIDs7Ci0JCSAgICBlc2FjCi0JCWZpCi0JCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgotCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCQkgICAgc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCi0KLQkJI2RlZmluZSBfSFBVWF9TT1VSQ0UKLQkJI2luY2x1ZGUgPHN0ZGxpYi5oPgotCQkjaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLQkJaW50IG1haW4gKCkKLQkJewotCQkjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCi0JCSAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7Ci0JCSNlbmRpZgotCQkgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKLQotCQkgICAgc3dpdGNoIChjcHUpCi0JCQl7Ci0JCQljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKLQkJCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOwotCQkJY2FzZSBDUFVfUEFfUklTQzJfMDoKLQkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQotCQkJICAgIHN3aXRjaCAoYml0cykKLQkJCQl7Ci0JCQkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOwotCQkJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKLQkJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKLQkJCQl9IGJyZWFrOwotCQkjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLwotCQkJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOwotCQkjZW5kaWYKLQkJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOwotCQkJfQotCQkgICAgZXhpdCAoMCk7Ci0JCX0KLUVPRgotCQkgICAgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAotCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQotCQlmaSA7OwotCWVzYWMKLQlpZiBbICR7SFBfQVJDSH0gPSBocHBhMi4wdyBdCi0JdGhlbgotCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0KLQkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKLQkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCi0JICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6Ci0JICAgICMKLQkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcwotCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMwotCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcwotCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKLQotCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKLQkJZ3JlcCAtcSBfX0xQNjRfXwotCSAgICB0aGVuCi0JCUhQX0FSQ0g9aHBwYTIuMHcKLQkgICAgZWxzZQotCQlIUF9BUkNIPWhwcGE2NAotCSAgICBmaQotCWZpCi0JZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQotCWV4aXQgOzsKLSAgICBpYTY0OkhQLVVYOio6KikKLQlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKLQllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9Ci0JZXhpdCA7OwotICAgIDMwNTAqOkhJLVVYOio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjaW5jbHVkZSA8dW5pc3RkLmg+Ci0JaW50Ci0JbWFpbiAoKQotCXsKLQkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKLQkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCi0JICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAotCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCi0JICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCi0JICAgIHsKLQkgICAgICBzd2l0Y2ggKGNwdSkKLQkJewotCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKLQkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7Ci0JCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOwotCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKLQkJfQotCSAgICB9Ci0JICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCi0JICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOwotCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKLQkgIGV4aXQgKDApOwotCX0KLUVPRgotCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCi0JCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQotCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKLQlleGl0IDs7Ci0gICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQotCWVjaG8gaHBwYTEuMS1ocC1ic2QKLQlleGl0IDs7Ci0gICAgOTAwMC84Pz86NC4zYnNkOio6KikKLQllY2hvIGhwcGExLjAtaHAtYnNkCi0JZXhpdCA7OwotICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKLQllY2hvIGhwcGExLjAtaHAtbXBlaXgKLQlleGl0IDs7Ci0gICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCi0JZWNobyBocHBhMS4xLWhwLW9zZgotCWV4aXQgOzsKLSAgICBocDg/PzpPU0YxOio6KikKLQllY2hvIGhwcGExLjAtaHAtb3NmCi0JZXhpdCA7OwotICAgIGkqODY6T1NGMToqOiopCi0JaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgotCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKLQllbHNlCi0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKLQlmaQotCWV4aXQgOzsKLSAgICBwYXJpc2MqOkxpdGVzKjoqOiopCi0JZWNobyBocHBhMS4xLWhwLWxpdGVzCi0JZXhpdCA7OwotICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCi0JZWNobyBjMS1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCi0JaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCi0JdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCi0JZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKLQlmaQotCWV4aXQgOzsKLSAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCi0JZWNobyBjMzQtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCi0JZWNobyBjMzgtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQotCWVjaG8gYzQtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBDUkFZKlktTVA6KjoqOiopCi0JZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDs7Ci0gICAgQ1JBWSpbQS1aXTkwOio6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAotCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAotCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKLQkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIENSQVkqVFM6KjoqOiopCi0JZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKLQlleGl0IDs7Ci0gICAgQ1JBWSpUM0U6KjoqOiopCi0JZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIENSQVkqU1YxOio6KjoqKQotCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgICo6VU5JQ09TL21wOio6KikKLQllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQotCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emAKLQlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy9cLy8vJ2AKLQlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAotCWVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCi0JZXhpdCA7OwotICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKLQlGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy9cLy8vJ2AKLQlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUgJ3MvIC9fLydgCi0JZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgotCWV4aXQgOzsKLSAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgc3BhcmMqOkJTRC9PUzoqOiopCi0JZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6QlNEL09TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOkZyZWVCU0Q6KjoqKQotCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCi0JY2FzZSAke1VOQU1FX1BST0NFU1NPUn0gaW4KLQkgICAgYW1kNjQpCi0JCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKLQkgICAgKikKLQkJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OwotCWVzYWMKLQlleGl0IDs7Ci0gICAgaSo6Q1lHV0lOKjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KLQlleGl0IDs7Ci0gICAgKjpNSU5HVzY0KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzY0Ci0JZXhpdCA7OwotICAgICo6TUlOR1cqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKLQlleGl0IDs7Ci0gICAgKjpNU1lTKjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc3lzCi0JZXhpdCA7OwotICAgIGkqOndpbmRvd3MzMio6KikKLQkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCi0JZXhpdCA7OwotICAgIGkqOlBXKjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCi0JZXhpdCA7OwotICAgICo6SW50ZXJpeCo6KikKLQljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KLQkgICAgeDg2KQotCQllY2hvIGk1ODYtcGMtaW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KLQkJZXhpdCA7OwotCSAgICBhdXRoZW50aWNhbWQgfCBnZW51aW5laW50ZWwgfCBFTTY0VCkKLQkJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQotCQlleGl0IDs7Ci0JICAgIElBNjQpCi0JCWVjaG8gaWE2NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9Ci0JCWV4aXQgOzsKLQllc2FjIDs7Ci0gICAgWzM0NV04NjpXaW5kb3dzXzk1OiogfCBbMzQ1XTg2OldpbmRvd3NfOTg6KiB8IFszNDVdODY6V2luZG93c19OVDoqKQotCWVjaG8gaSR7VU5BTUVfTUFDSElORX0tcGMtbWtzCi0JZXhpdCA7OwotICAgIDg2NjQ6V2luZG93c19OVDoqKQotCWVjaG8geDg2XzY0LXBjLW1rcwotCWV4aXQgOzsKLSAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKLQkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/Ci0JIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKLQkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/Ci0JZWNobyBpNTg2LXBjLWludGVyaXgKLQlleGl0IDs7Ci0gICAgaSo6VVdJTio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgotCWV4aXQgOzsKLSAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKLQllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgotCWV4aXQgOzsKLSAgICBwKjpDWUdXSU4qOiopCi0JZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KLQlleGl0IDs7Ci0gICAgcHJlcCo6U3VuT1M6NS4qOiopCi0JZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgOzsKLSAgICAqOkdOVToqOiopCi0JIyB0aGUgR05VIHN5c3RlbQotCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi0ke0xJQkN9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKLQlleGl0IDs7Ci0gICAgKjpHTlUvKjoqOiopCi0JIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAiWzp1cHBlcjpdIiAiWzpsb3dlcjpdImBgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLSR7TElCQ30KLQlleGl0IDs7Ci0gICAgaSo4NjpNaW5peDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4Ci0JZXhpdCA7OwotICAgIGFhcmNoNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCi0JVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBhbHBoYTpMaW51eDoqOiopCi0JY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KLQkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7Ci0JICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKLQkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7Ci0JICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKLQkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotCWVzYWMKLQlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPWdudWxpYmMxIDsgZmkKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGFyYzpMaW51eDoqOiogfCBhcmNlYjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBhcm0qOkxpbnV4Oio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAotCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCi0JdGhlbgotCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZWxzZQotCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAotCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAotCSAgICB0aGVuCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpCi0JICAgIGVsc2UKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmloZgotCSAgICBmaQotCWZpCi0JZXhpdCA7OwotICAgIGF2cjMyKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBjcmlzOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGNyaXN2MzI6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgZTJrOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGZydjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBoZXhhZ29uOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGkqODY6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIGlhNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgazFvbTpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBtMzJyKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBtNjgqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjdW5kZWYgQ1BVCi0JI3VuZGVmICR7VU5BTUVfTUFDSElORX0KLQkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCi0JI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT0ke1VOQU1FX01BQ0hJTkV9Ci0JI2Vsc2UKLQlDUFU9Ci0JI2VuZGlmCi0JI2VuZGlmCi1FT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCi0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9Ci0JOzsKLSAgICBtaXBzNjRlbDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBvcGVucmlzYyo6TGludXg6KjoqKQotCWVjaG8gb3Ixay11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgb3IzMjpMaW51eDoqOiogfCBvcjFrKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBwYWRyZTpMaW51eDoqOiopCi0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKLQllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQotCSMgTG9vayBmb3IgQ1BVIGxldmVsCi0JY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KLQkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKLQkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKLQkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKLQllc2FjCi0JZXhpdCA7OwotICAgIHBwYzY0OkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgcHBjOkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHBwYzY0bGU6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHBwY2xlOkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGNsZS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgcmlzY3YzMjpMaW51eDoqOiogfCByaXNjdjY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBzaDY0KjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICBzaCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICB0aWxlKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICB2YXg6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQotCWV4aXQgOzsKLSAgICB4ODZfNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9Ci0JZXhpdCA7OwotICAgIHh0ZW5zYSo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KLQlleGl0IDs7Ci0gICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKLQkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgotCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKLQkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgotCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0Ci0JZXhpdCA7OwotICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCi0JIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBvZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgotCSMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KLQkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCi0JIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgotCSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2NC4ydXcke1VOQU1FX1ZFUlNJT059Ci0JZXhpdCA7OwotICAgIGkqODY6T1MvMjoqOiopCi0JIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVuIEVNWCBVbml4IGNvbXBhdGliaWxpdHkKLQkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtb3MyLWVteAotCWV4aXQgOzsKLSAgICBpKjg2OlhUUy0zMDA6KjpTVE9QKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN0b3AKLQlleGl0IDs7Ci0gICAgaSo4NjphdGhlb3M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWF0aGVvcwotCWV4aXQgOzsKLSAgICBpKjg2OnN5bGxhYmxlOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKLQlleGl0IDs7Ci0gICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCi0JZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBpKjg2OipET1M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1tc2Rvc2RqZ3BwCi0JZXhpdCA7OwotICAgIGkqODY6Kjo0Lio6KiB8IGkqODY6U1lTVEVNX1Y6NC4qOiopCi0JVU5BTUVfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgJ3MvXC9NUCQvLydgCi0JaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bml2ZWwtc3lzdiR7VU5BTUVfUkVMfQotCWVsc2UKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Yke1VOQU1FX1JFTH0KLQlmaQotCWV4aXQgOzsKLSAgICBpKjg2Oio6NTpbNjc4XSopCi0JIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCi0JY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KLQkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7Ci0JICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OwotCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OwotCWVzYWMKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KLQlleGl0IDs7Ci0gICAgaSo4NjoqOjMuMjoqKQotCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KLQkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAotCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAotCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgotCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCi0JCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgotCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAotCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2Ci0JCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAotCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2Ci0JCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAotCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2Ci0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCi0JZWxzZQotCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCi0JZmkKLQlleGl0IDs7Ci0gICAgcGM6KjoqOiopCi0JIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6Ci0JIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKLQkjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgotCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKLQkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJlIHdpbGwgZGVjaWRlIHRoYXQKLQkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KLQllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAotCWV4aXQgOzsKLSAgICBJbnRlbDpNYWNoOjMqOiopCi0JZWNobyBpMzg2LXBjLW1hY2gzCi0JZXhpdCA7OwotICAgIHBhcmFnb246KjoqOiopCi0JZWNobyBpODYwLWludGVsLW9zZjEKLQlleGl0IDs7Ci0gICAgaTg2MDoqOjQuKjoqKSAjIGk4NjAtU1ZSNAotCWlmIGdyZXAgU3RhcmRlbnQgL3Vzci9pbmNsdWRlL3N5cy91YWRtaW4uaCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCi0JICBlY2hvIGk4NjAtc3RhcmRlbnQtc3lzdiR7VU5BTUVfUkVMRUFTRX0gIyBTdGFyZGVudCBWaXN0cmEgaTg2MC1TVlI0Ci0JZWxzZSAjIEFkZCBvdGhlciBpODYwLVNWUjQgdmVuZG9ycyBiZWxvdyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLgotCSAgZWNobyBpODYwLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0gICMgVW5rbm93biBpODYwLVNWUjQKLQlmaQotCWV4aXQgOzsKLSAgICBtaW5pKjpDVElYOlNZUyo1OiopCi0JIyAibWluaWZyYW1lIgotCWVjaG8gbTY4MDEwLWNvbnZlcmdlbnQtc3lzdgotCWV4aXQgOzsKLSAgICBtYzY4azpVTklYOlNZU1RFTTU6My41MW0pCi0JZWNobyBtNjhrLWNvbnZlcmdlbnQtc3lzdgotCWV4aXQgOzsKLSAgICBNNjgwPzA6RC1OSVg6NS4zOiopCi0JZWNobyBtNjhrLWRpYWItZG5peAotCWV4aXQgOzsKLSAgICBNNjgqOio6UjNWWzU2NzhdKjoqKQotCXRlc3QgLXIgL3N5c1Y2OCAmJiB7IGVjaG8gJ202OGstbW90b3JvbGEtc3lzdic7IGV4aXQ7IH0gOzsKLSAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKLQlPU19SRUw9JycKLQl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKLQkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAotCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KLQkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKLQkgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7Ci0gICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCi0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKLSAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKLQlPU19SRUw9Jy4zJwotCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAotCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAotCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAotCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAotCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OwotICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQotCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgbWM2ODAzMDpVTklYX1N5c3RlbV9WOjQuKjoqKQotCWVjaG8gbTY4ay1hdGFyaS1zeXN2NAotCWV4aXQgOzsKLSAgICBUU1VOQU1JOkx5bnhPUzoyLio6KikKLQllY2hvIHNwYXJjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICByczYwMDA6THlueE9TOjIuKjoqKQotCWVjaG8gcnM2MDAwLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBQb3dlclBDOkx5bnhPUzoyLio6KiB8IFBvd2VyUEM6THlueE9TOjMuWzAxXSo6KiB8IFBvd2VyUEM6THlueE9TOjQuWzAyXSo6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNNW0JFXVM6VU5JWF9TVjoqOiopCi0JZWNobyBtaXBzLWRkZS1zeXN2JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBSTSo6UmVsaWFudFVOSVgtKjoqOiopCi0JZWNobyBtaXBzLXNuaS1zeXN2NAotCWV4aXQgOzsKLSAgICBSTSo6U0lOSVgtKjoqOiopCi0JZWNobyBtaXBzLXNuaS1zeXN2NAotCWV4aXQgOzsKLSAgICAqOlNJTklYLSo6KjoqKQotCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCi0JCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zbmktc3lzdjQKLQllbHNlCi0JCWVjaG8gbnMzMmstc25pLXN5c3YKLQlmaQotCWV4aXQgOzsKLSAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQYXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAotCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgotCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKLQlleGl0IDs7Ci0gICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCi0JIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3ZXNAb3Blbm1hcmtldC5jb20+LgotCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQotCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0Ci0JZXhpdCA7OwotICAgICo6KjoqOkZUWCopCi0JIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5jb20uCi0JZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKLQlleGl0IDs7Ci0gICAgaSo4NjpWT1M6KjoqKQotCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1zdHJhdHVzLXZvcwotCWV4aXQgOzsKLSAgICAqOlZPUzoqOiopCi0JIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCi0JZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCi0JZXhpdCA7OwotICAgIG1jNjgqOkEvVVg6KjoqKQotCWVjaG8gbTY4ay1hcHBsZS1hdXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKLQllY2hvIG1pcHMtc29ueS1uZXdzb3M2Ci0JZXhpdCA7OwotICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQotCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgotCQllY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9Ci0JZWxzZQotCQllY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQotCWZpCi0JZXhpdCA7OwotICAgIEJlQm94OkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBoYXJkd2FyZSBtYWRlIGJ5IEJlLCBQUEMgb25seS4KLQllY2hvIHBvd2VycGMtYmUtYmVvcwotCWV4aXQgOzsKLSAgICBCZU1hYzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gTWFjIG9yIE1hYyBjbG9uZSwgUFBDIG9ubHkuCi0JZWNobyBwb3dlcnBjLWFwcGxlLWJlb3MKLQlleGl0IDs7Ci0gICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KLQllY2hvIGk1ODYtcGMtYmVvcwotCWV4aXQgOzsKLSAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCi0JZWNobyBpNTg2LXBjLWhhaWt1Ci0JZXhpdCA7OwotICAgIHg4Nl82NDpIYWlrdToqOiopCi0JZWNobyB4ODZfNjQtdW5rbm93bi1oYWlrdQotCWV4aXQgOzsKLSAgICBTWC00OlNVUEVSLVVYOio6KikKLQllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtNTpTVVBFUi1VWDoqOiopCi0JZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNYLTY6U1VQRVItVVg6KjoqKQotCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBTWC03OlNVUEVSLVVYOio6KikKLQllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtODpTVVBFUi1VWDoqOiopCi0JZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNYLThSOlNVUEVSLVVYOio6KikKLQllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNYLUFDRTpTVVBFUi1VWDoqOiopCi0JZWNobyBzeGFjZS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKLQllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6UmhhcHNvZHk6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpEYXJ3aW46KjoqKQotCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gdW5rbm93biA7IHRoZW4KLQkgICAgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKLQlmaQotCWlmIHRlc3QgYGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLi4qLy8nYCAtbGUgMTAgOyB0aGVuCi0JICAgIGlmIFsgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kIF07IHRoZW4KLQkJaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCi0JCSAgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCi0JCSAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCQl0aGVuCi0JCSAgICBjYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KLQkJCWkzODYpIFVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKLQkJCXBvd2VycGMpIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjNjQgOzsKLQkJICAgIGVzYWMKLQkJZmkKLQkgICAgZmkKLQllbGlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gaTM4NiA7IHRoZW4KLQkgICAgIyBBdm9pZCBleGVjdXRpbmcgY2Mgb24gT1MgWCAxMC45LCBhcyBpdCBzaGlwcyB3aXRoIGEgc3R1YgotCSAgICAjIHRoYXQgcHV0cyB1cCBhIGdyYXBoaWNhbCBhbGVydCBwcm9tcHRpbmcgdG8gaW5zdGFsbAotCSAgICAjIGRldmVsb3BlciB0b29scy4gIEFueSBzeXN0ZW0gcnVubmluZyBNYWMgT1MgWCAxMC43IG9yCi0JICAgICMgbGF0ZXIgKERhcndpbiAxMSBhbmQgbGF0ZXIpIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSA2NC1iaXQKLQkgICAgIyBwcm9jZXNzb3IuIFRoaXMgaXMgbm90IHRydWUgb2YgdGhlIEFSTSB2ZXJzaW9uIG9mIERhcndpbgotCSAgICAjIHRoYXQgQXBwbGUgdXNlcyBpbiBwb3J0YWJsZSBkZXZpY2VzLgotCSAgICBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0Ci0JZmkKLQllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQotCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCi0JaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB4ODY7IHRoZW4KLQkJVU5BTUVfUFJPQ0VTU09SPWkzODYKLQkJVU5BTUVfTUFDSElORT1wYwotCWZpCi0JZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlFOWDoqOjQqKQotCWVjaG8gaTM4Ni1wYy1xbngKLQlleGl0IDs7Ci0gICAgTkVPLT86Tk9OU1RPUF9LRVJORUw6KjoqKQotCWVjaG8gbmVvLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIE5TRS0qOk5PTlNUT1BfS0VSTkVMOio6KikKLQllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBOU1ItPzpOT05TVE9QX0tFUk5FTDoqOiopCi0JZWNobyBuc3ItdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpOb25TdG9wLVVYOio6KikKLQllY2hvIG1pcHMtY29tcGFxLW5vbnN0b3B1eAotCWV4aXQgOzsKLSAgICBCUzIwMDA6UE9TSVgqOio6KikKLQllY2hvIGJzMjAwMC1zaWVtZW5zLXN5c3YKLQlleGl0IDs7Ci0gICAgRFMvKjpVTklYX1N5c3RlbV9WOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tJHtVTkFNRV9TWVNURU19LSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpQbGFuOToqOiopCi0JIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2Ci0JIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKLQkjIG9wZXJhdGluZyBzeXN0ZW1zLgotCWlmIHRlc3QgIiRjcHV0eXBlIiA9IDM4NjsgdGhlbgotCSAgICBVTkFNRV9NQUNISU5FPWkzODYKLQllbHNlCi0JICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgotCWZpCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKLQlleGl0IDs7Ci0gICAgKjpUT1BTLTEwOio6KikKLQllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCi0JZXhpdCA7OwotICAgICo6VEVORVg6KjoqKQotCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAotCWV4aXQgOzsKLSAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQotCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAotCWV4aXQgOzsKLSAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQotCWVjaG8gcGRwMTAteGtsLXRvcHMyMAotCWV4aXQgOzsKLSAgICAqOlRPUFMtMjA6KjoqKQotCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKLQlleGl0IDs7Ci0gICAgKjpJVFM6KjoqKQotCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKLQlleGl0IDs7Ci0gICAgU0VJOio6KjpTRUlVWCkKLQllY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOkRyYWdvbkZseToqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAotCWV4aXQgOzsKLSAgICAqOipWTVM6KjoqKQotCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCi0JY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KLQkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKLQkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OwotCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKLQllc2FjIDs7Ci0gICAgKjpYRU5JWDoqOlN5c1YpCi0JZWNobyBpMzg2LXBjLXhlbml4Ci0JZXhpdCA7OwotICAgIGkqODY6c2t5b3M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC4qJC8vJ2AKLQlleGl0IDs7Ci0gICAgaSo4NjpyZG9zOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcwotCWV4aXQgOzsKLSAgICBpKjg2OkFST1M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCi0JZXhpdCA7OwotICAgIHg4Nl82NDpWTWtlcm5lbDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZXN4Ci0JZXhpdCA7OwotICAgIGFtZDY0OklzaWxvblwgT25lRlM6KjoqKQotCWVjaG8geDg2XzY0LXVua25vd24tb25lZnMKLQlleGl0IDs7Ci1lc2FjCi0KLWNhdCA+JjIgPDxFT0YKLSQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKLQotVGhpcyBzY3JpcHQgKHZlcnNpb24gJHRpbWVzdGFtcCksIGhhcyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZQotb3BlcmF0aW5nIHN5c3RlbSB5b3UgYXJlIHVzaW5nLiBJZiB5b3VyIHNjcmlwdCBpcyBvbGQsIG92ZXJ3cml0ZQotY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9ucyBmcm9tOgotCi0gIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3MKLWFuZAotICBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YgotCi1JZiAkMCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQsIHNlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkKLWluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZSBwZXJ0aW5lbnQgdG8gY29uZmlnLXBhdGNoZXNAZ251Lm9yZyB0bwotcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KLQotY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKLQotdW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi0KLS91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCi0vYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCi0KLWhvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKLS9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAotL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCi0vYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAotL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCi0vdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKLQotVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KLVVOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9Ci1VTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19Ci1VTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQotRU9GCi0KLWV4aXQgMQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKLSMgdGltZS1zdGFtcC1lbmQ6ICInIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjMxN2I2Li4wMDAwMDAwCi0tLSBhL2NvbmZpZy5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsNDUxICswLDAgQEAKLS8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLwotCi0vKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCi0jdW5kZWYgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECi0KLS8qIERlZmF1bHQgYXVkaW8gc2luayAqLwotI3VuZGVmIERFRkFVTFRfQVVESU9TSU5LCi0KLS8qIERlZmF1bHQgYXVkaW8gc291cmNlICovCi0jdW5kZWYgREVGQVVMVF9BVURJT1NSQwotCi0vKiBEZWZhdWx0IHZpZGVvIHNpbmsgKi8KLSN1bmRlZiBERUZBVUxUX1ZJREVPU0lOSwotCi0vKiBEZWZhdWx0IHZpZGVvIHNvdXJjZSAqLwotI3VuZGVmIERFRkFVTFRfVklERU9TUkMKLQotLyogRGVmYXVsdCB2aXN1YWxpemVyICovCi0jdW5kZWYgREVGQVVMVF9WSVNVQUxJWkVSCi0KLS8qIERpc2FibGUgT3JjICovCi0jdW5kZWYgRElTQUJMRV9PUkMKLQotLyogRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZQotICAgbGFuZ3VhZ2UgaXMgcmVxdWVzdGVkLiAqLwotI3VuZGVmIEVOQUJMRV9OTFMKLQotLyogZ2V0dGV4dCBwYWNrYWdlIG5hbWUgKi8KLSN1bmRlZiBHRVRURVhUX1BBQ0tBR0UKLQotLyogVGhlIEdJTyBsaWJyYXJ5IGRpcmVjdG9yeS4gKi8KLSN1bmRlZiBHSU9fTElCRElSCi0KLS8qIFRoZSBHSU8gbW9kdWxlcyBkaXJlY3RvcnkuICovCi0jdW5kZWYgR0lPX01PRFVMRV9ESVIKLQotLyogVGhlIEdJTyBpbnN0YWxsIHByZWZpeC4gKi8KLSN1bmRlZiBHSU9fUFJFRklYCi0KLS8qIEdTdHJlYW1lciBBUEkgVmVyc2lvbiAqLwotI3VuZGVmIEdTVF9BUElfVkVSU0lPTgotCi0vKiBEZWZpbmUgaWYgZXh0cmEgcnVudGltZSBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgKi8KLSN1bmRlZiBHU1RfRU5BQkxFX0VYVFJBX0NIRUNLUwotCi0vKiBEZWZpbmVkIGlmIGdjb3YgaXMgZW5hYmxlZCB0byBmb3JjZSBhIHJlYnVpbGQgZHVlIHRvIGNvbmZpZy5oIGNoYW5naW5nICovCi0jdW5kZWYgR1NUX0dDT1ZfRU5BQkxFRAotCi0vKiBEZWZhdWx0IGVycm9ybGV2ZWwgdG8gdXNlICovCi0jdW5kZWYgR1NUX0xFVkVMX0RFRkFVTFQKLQotLyogR1N0cmVhbWVyIGxpY2Vuc2UgKi8KLSN1bmRlZiBHU1RfTElDRU5TRQotCi0vKiBwYWNrYWdlIG5hbWUgaW4gcGx1Z2lucyAqLwotI3VuZGVmIEdTVF9QQUNLQUdFX05BTUUKLQotLyogcGFja2FnZSBvcmlnaW4gKi8KLSN1bmRlZiBHU1RfUEFDS0FHRV9PUklHSU4KLQotLyogR1N0cmVhbWVyIHBhY2thZ2UgcmVsZWFzZSBkYXRlL3RpbWUgZm9yIHBsdWdpbnMgYXMgWVlZWS1NTS1ERCAqLwotI3VuZGVmIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUKLQotLyogRGVmaW5lIGlmIHN0YXRpYyBwbHVnaW5zIHNob3VsZCBiZSBidWlsdCAqLwotI3VuZGVmIEdTVF9QTFVHSU5fQlVJTERfU1RBVElDCi0KLS8qIERlZmluZSBpZiBWaWRlbzRMaW51eCBwcm9iZSBzaGFsbCBiZSBydW4gYXQgcGx1Z2luIGxvYWQgKi8KLSN1bmRlZiBHU1RfVjRMMl9FTkFCTEVfUFJPQkUKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBhYWxpYiBBU0NJSSBBcnQgbGlicmFyeSAodXNlZCBieSBhYXNpbmspLiAqLwotI3VuZGVmIEhBVkVfQUFMSUIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhc2luaCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9BU0lOSAotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIGJ6MiBsaWJyYXJ5IGZvciBtYXRyb3NrYSAuICovCi0jdW5kZWYgSEFWRV9CWjIKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBDYWlybyBncmFwaGljcyByZW5kZXJpbmcgYW5kIGdvYmplY3QgYmluZGluZ3MgKHVzZWQgYnkKLSAgIGNhaXJvKS4gKi8KLSN1bmRlZiBIQVZFX0NBSVJPCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGTG9jYWxlQ29weUN1cnJlbnQgaW4gdGhlCi0gICBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCi0jdW5kZWYgSEFWRV9DRkxPQ0FMRUNPUFlDVVJSRU5UCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBNYWNPUyBYIGZ1bmN0aW9uIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgaW4KLSAgIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuICovCi0jdW5kZWYgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9DTE9DS19HRVRUSU1FCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY29zaCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9DT1NICi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBBQVJDSDY0ICovCi0jdW5kZWYgSEFWRV9DUFVfQUFSQ0g2NAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4gQWxwaGEgKi8KLSN1bmRlZiBIQVZFX0NQVV9BTFBIQQotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4gQVJDICovCi0jdW5kZWYgSEFWRV9DUFVfQVJDCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiBBUk0gKi8KLSN1bmRlZiBIQVZFX0NQVV9BUk0KLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgQ1JJUyAqLwotI3VuZGVmIEhBVkVfQ1BVX0NSSVMKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgQ1JJU3YzMiAqLwotI3VuZGVmIEhBVkVfQ1BVX0NSSVNWMzIKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgSFBQQSAqLwotI3VuZGVmIEhBVkVfQ1BVX0hQUEEKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIHg4NiAqLwotI3VuZGVmIEhBVkVfQ1BVX0kzODYKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgSUE2NCAqLwotI3VuZGVmIEhBVkVfQ1BVX0lBNjQKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgTTY4SyAqLwotI3VuZGVmIEhBVkVfQ1BVX002OEsKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgTUlQUyAqLwotI3VuZGVmIEhBVkVfQ1BVX01JUFMKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgUG93ZXJQQyAqLwotI3VuZGVmIEhBVkVfQ1BVX1BQQwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSA2NCBiaXQgUG93ZXJQQyAqLwotI3VuZGVmIEhBVkVfQ1BVX1BQQzY0Ci0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIFMzOTAgKi8KLSN1bmRlZiBIQVZFX0NQVV9TMzkwCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIFNQQVJDICovCi0jdW5kZWYgSEFWRV9DUFVfU1BBUkMKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgeDg2XzY0ICovCi0jdW5kZWYgSEFWRV9DUFVfWDg2XzY0Ci0KLS8qIERlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuCi0gICAqLwotI3VuZGVmIEhBVkVfRENHRVRURVhUCi0KLS8qIERlZmluZSB0byBlbmFibGUgRGlyZWN0U291bmQgcGx1Zy1pbiAodXNlZCBieSBkaXJlY3Rzb3VuZHNpbmspLiAqLwotI3VuZGVmIEhBVkVfRElSRUNUU09VTkQKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0RMRkNOX0gKLQotLyogZGVmaW5lIGZvciB3b3JraW5nIGRvIHdoaWxlKDApIG1hY3JvcyAqLwotI3VuZGVmIEhBVkVfRE9XSElMRV9NQUNST1MKLQotLyogRGVmaW5lIHRvIGVuYWJsZSByYXcxMzk0IGFuZCBhdmMxMzk0IGxpYnJhcnkgKHVzZWQgYnkgMTM5NCkuICovCi0jdW5kZWYgSEFWRV9EVjEzOTQKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBidWlsZGluZyBvZiBleHBlcmltZW50YWwgcGx1Zy1pbnMuICovCi0jdW5kZWYgSEFWRV9FWFBFUklNRU5UQUwKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBidWlsZGluZyBvZiBwbHVnLWlucyB3aXRoIGV4dGVybmFsIGRlcHMuICovCi0jdW5kZWYgSEFWRV9FWFRFUk5BTAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRkNOVExfSAotCi0vKiBGSU9OUkVBRCBpb2N0bCBmb3VuZCBpbiBzeXMvZmlsaW8uaCAqLwotI3VuZGVmIEhBVkVfRklPTlJFQURfSU5fU1lTX0ZJTElPCi0KLS8qIEZJT05SRUFEIGlvY3RsIGZvdW5kIGluIHN5cy9pb2NsdC5oICovCi0jdW5kZWYgSEFWRV9GSU9OUkVBRF9JTl9TWVNfSU9DVEwKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBGTEFDIGxvc3NsZXNzIGF1ZGlvICh1c2VkIGJ5IGZsYWMpLiAqLwotI3VuZGVmIEhBVkVfRkxBQwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwY2xhc3MnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfRlBDTEFTUwotCi0vKiBEZWZpbmUgaWYgY29tcGlsZXIgc3VwcG9ydHMgZ2NjIGlubGluZSBhc3NlbWJseSAqLwotI3VuZGVmIEhBVkVfR0NDX0FTTQotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIEdESyBwaXhidWYgKHVzZWQgYnkgZ2RrcGl4YnVmKS4gKi8KLSN1bmRlZiBIQVZFX0dES19QSVhCVUYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwYWdlc2l6ZScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9HRVRQQUdFU0laRQotCi0vKiBEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC4gKi8KLSN1bmRlZiBIQVZFX0dFVFRFWFQKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBWaWRlbyA0IExpbnV4IDIgKHVzZWQgYnkgdmlkZW80bGludXgyKS4gKi8KLSN1bmRlZiBIQVZFX0dTVF9WNEwyCi0KLS8qIFdoZXRoZXIgZ3VkZXYgaXMgYXZhaWxhYmxlIGZvciBkZXZpY2UgZGV0ZWN0aW9uICovCi0jdW5kZWYgSEFWRV9HVURFVgotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGljb252KCkgZnVuY3Rpb24gYW5kIGl0IHdvcmtzLiAqLwotI3VuZGVmIEhBVkVfSUNPTlYKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKLQotLyogYnVpbGRpbmcgZm9yIGlPUyBwbGF0b2ZybSAqLwotI3VuZGVmIEhBVkVfSU9TCi0KLS8qIERlZmluZSBpZiB3ZSBoYXZlIHN0cnVjdCBpcF9tcmVxbiAqLwotI3VuZGVmIEhBVkVfSVBfTVJFUU4KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpc2luZicgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9JU0lORgotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIEphY2sgKHVzZWQgYnkgamFjaykuICovCi0jdW5kZWYgSEFWRV9KQUNLCi0KLS8qIGRlZmluZWQgaWYgamFjayA+PSAwLjEyMC4xIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfSkFDS18wXzEyMF8xCi0KLS8qIGRlZmluZWQgaWYgamFjayA+PSAxLjkuNyBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX0pBQ0tfMV85XzcKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBqcGVnIGxpYnJhcnkgKHVzZWQgYnkganBlZykuICovCi0jdW5kZWYgSEFWRV9KUEVHCi0KLS8qIERlZmluZSB0byBlbmFibGUgbGliY2FjYSBjb2xvdXJlZCBBU0NJSSBhcnQgKHVzZWQgYnkgY2FjYXNpbmspLiAqLwotI3VuZGVmIEhBVkVfTElCQ0FDQQotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIGxpYmR2IERWIGRlbXV4ZXIvZGVjb2RlciAodXNlZCBieSBkdikuICovCi0jdW5kZWYgSEFWRV9MSUJEVgotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgbGlicmFyeSAodXNlZCBieSBwbmcpLiAqLwotI3VuZGVmIEhBVkVfTElCUE5HCi0KLS8qIFdoZXRoZXIgbGlidjRsMiBpcyBhdmFpbGFibGUgZm9yIHZpZGVvIGJ1ZmZlciBjb252ZXJzaW9uICovCi0jdW5kZWYgSEFWRV9MSUJWNEwyCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfTUVNT1JZX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gKi8KLSN1bmRlZiBIQVZFX01NQVAKLQotLyogVXNlIE9yYyAqLwotI3VuZGVmIEhBVkVfT1JDCi0KLS8qIERlZmluZSB0byBlbmFibGUgT1NTIGF1ZGlvICh1c2VkIGJ5IG9zc2F1ZGlvKS4gKi8KLSN1bmRlZiBIQVZFX09TUwotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIE9wZW4gU291bmQgU3lzdGVtIDQgKHVzZWQgYnkgb3NzNCkuICovCi0jdW5kZWYgSEFWRV9PU1M0Ci0KLS8qIERlZmluZSBpZiBPU1MgaW5jbHVkZXMgYXJlIGluIC9tYWNoaW5lLyAqLwotI3VuZGVmIEhBVkVfT1NTX0lOQ0xVREVfSU5fTUFDSElORQotCi0vKiBEZWZpbmUgaWYgT1NTIGluY2x1ZGVzIGFyZSBpbiAvICovCi0jdW5kZWYgSEFWRV9PU1NfSU5DTFVERV9JTl9ST09UCi0KLS8qIERlZmluZSBpZiBPU1MgaW5jbHVkZXMgYXJlIGluIC9zeXMvICovCi0jdW5kZWYgSEFWRV9PU1NfSU5DTFVERV9JTl9TWVMKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBPU1ggYXVkaW8gKHVzZWQgYnkgb3N4YXVkaW8pLiAqLwotI3VuZGVmIEhBVkVfT1NYX0FVRElPCi0KLS8qIERlZmluZSB0byBlbmFibGUgT1NYIHZpZGVvICh1c2VkIGJ5IG9zeHZpZGVvc2luaykuICovCi0jdW5kZWYgSEFWRV9PU1hfVklERU8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwcm9jZXNzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfUFJPQ0VTU19ICi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzLiAqLwotI3VuZGVmIEhBVkVfUFRIUkVBRAotCi0vKiBIYXZlIFBUSFJFQURfUFJJT19JTkhFUklULiAqLwotI3VuZGVmIEhBVkVfUFRIUkVBRF9QUklPX0lOSEVSSVQKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBwdWxzZWF1ZGlvIHBsdWctaW4gKHVzZWQgYnkgcHVsc2VhdWRpbykuICovCi0jdW5kZWYgSEFWRV9QVUxTRQotCi0vKiBEZWZpbmUgaWYgUkRUU0MgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9SRFRTQwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJpbnQnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfUklOVAotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIFNob3V0Y2FzdC9JY2VjYXN0IGNsaWVudCBsaWJyYXJ5ICh1c2VkIGJ5IHNob3V0MikuICovCi0jdW5kZWYgSEFWRV9TSE9VVDIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaW5oJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NJTkgKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBzb3VwIGh0dHAgY2xpZW50IHBsdWdpbiAoMi40KSAodXNlZCBieSBzb3VwaHR0cHNyYykuICovCi0jdW5kZWYgSEFWRV9TT1VQCi0KLS8qIERlZmluZSB0byBlbmFibGUgc3BlZXggc3BlZWNoIGNvZGVjICh1c2VkIGJ5IHNwZWV4KS4gKi8KLSN1bmRlZiBIQVZFX1NQRUVYCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RESU5UX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVERMSUJfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVFJJTkdTX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TVFJJTkdfSAotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIFN1biBBdWRpbyAodXNlZCBieSBzdW5hdWRpbykuICovCi0jdW5kZWYgSEFWRV9TVU5BVURJTwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19JT0NUTF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0gKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfU1RBVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfVElNRV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKLQotLyogRGVmaW5lIHRvIGVuYWJsZSB0YWdsaWIgdGFnZ2luZyBsaWJyYXJ5ICh1c2VkIGJ5IHRhZ2xpYikuICovCi0jdW5kZWYgSEFWRV9UQUdMSUIKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9VTklTVERfSAotCi0vKiBEZWZpbmUgaWYgdmFsZ3JpbmQgc2hvdWxkIGJlIHVzZWQgKi8KLSN1bmRlZiBIQVZFX1ZBTEdSSU5ECi0KLS8qIERlZmluZWQgaWYgdGhlIFZQOCBkZWNvZGVyIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfVlA4X0RFQ09ERVIKLQotLyogRGVmaW5lZCBpZiB0aGUgVlA4IGVuY29kZXIgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9WUDhfRU5DT0RFUgotCi0vKiBEZWZpbmVkIGlmIHRoZSBWUDkgZGVjb2RlciBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX1ZQOV9ERUNPREVSCi0KLS8qIERlZmluZWQgaWYgdGhlIFZQOSBlbmNvZGVyIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfVlA5X0VOQ09ERVIKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBWUFggZGVjb2RlciAodXNlZCBieSB2cHgpLiAqLwotI3VuZGVmIEhBVkVfVlBYCi0KLS8qIERlZmluZWQgaWYgdGhlIFZQWCBsaWJyYXJ5IHZlcnNpb24gaXMgMS40IG9yIGJpZ2dlciAqLwotI3VuZGVmIEhBVkVfVlBYXzFfNAotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIFdpbjMyIFdhdmVGb3JtICh1c2VkIGJ5IHdhdmVmb3Jtc2luaykuICovCi0jdW5kZWYgSEFWRV9XQVZFRk9STQotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIHdhdnBhY2sgcGx1Zy1pbiAodXNlZCBieSB3YXZwYWNrKS4gKi8KLSN1bmRlZiBIQVZFX1dBVlBBQ0sKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBYIGxpYnJhcmllcyBhbmQgcGx1Z2lucyAodXNlZCBieSB4aW1hZ2VzcmMpLiAqLwotI3VuZGVmIEhBVkVfWAotCi0vKiBEZWZpbmVkIGlmIFhkYW1hZ2UgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9YREFNQUdFCi0KLS8qIERlZmluZWQgaWYgWGZpeGVzIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfWEZJWEVTCi0KLS8qIERlZmluZWQgaWYgWFNobSBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX1hTSE0KLQotLyogRGVmaW5lIHRvIGVuYWJsZSB6bGliIHN1cHBvcnQgZm9yIHF0ZGVtdXgvbWF0cm9za2EuICovCi0jdW5kZWYgSEFWRV9aTElCCi0KLS8qIHRoZSBob3N0IENQVSAqLwotI3VuZGVmIEhPU1RfQ1BVCi0KLS8qIGdldHRleHQgbG9jYWxlIGRpciAqLwotI3VuZGVmIExPQ0FMRURJUgotCi0vKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLwotI3VuZGVmIExUX09CSkRJUgotCi0vKiBOYW1lIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBQQUNLQUdFCi0KLS8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwotI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCi0KLS8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX05BTUUKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKLQotLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KLSN1bmRlZiBQQUNLQUdFX1VSTAotCi0vKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgotCi0vKiBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBhcmUgbG9jYXRlZCAqLwotI3VuZGVmIFBMVUdJTkRJUgotCi0vKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgotICAgeW91ciBzeXN0ZW0uICovCi0jdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKLQotLyogVGhlIHNpemUgb2YgYGNoYXInLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jdW5kZWYgU0laRU9GX0NIQVIKLQotLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfSU5UCi0KLS8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9MT05HCi0KLS8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfU0hPUlQKLQotLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9WT0lEUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBTVERDX0hFQURFUlMKLQotLyogdGhlIHRhcmdldCBDUFUgKi8KLSN1bmRlZiBUQVJHRVRfQ1BVCi0KLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSN1bmRlZiBWRVJTSU9OCi0KLS8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAotICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCi0jaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKLSMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXwotIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCi0jIGVuZGlmCi0jZWxzZQotIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCi0jICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KLSMgZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY29uZmlnLnJwYXRoIGIvY29uZmlnLnJwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjNTQ3YzY4Li4wMDAwMDAwCi0tLSBhL2NvbmZpZy5ycGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDY2NiArMCwwIEBACi0jISAvYmluL3NoCi0jIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQotIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCi0jCi0jICAgQ29weXJpZ2h0IDE5OTYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCi0jICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyAgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotIyAgIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotIwotIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKLSMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KLSMgb3IKLSMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCi0jIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCi0jIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KLSMKLSMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgotCi0jIEtub3duIGxpbWl0YXRpb25zOgotIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKLSMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5Ci0jICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAotIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCi0KLSMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAotIyB3aGljaCBuZWVkcyAnLmxpYicpLgotbGliZXh0PWEKLXNocmV4dD0uc28KLQotaG9zdD0iJDEiCi1ob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLWhvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotaG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKLQotIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KLQotZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCi0KLSMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDLgotCi13bD0KLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHdsPSctV2wsJwotZWxzZQotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICBhaXgqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIGRhcndpbiopCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICA7OwotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgd2w9Jy1XbCwnCi0gICAgICA7OwotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgbmV3c29zNikKLSAgICAgIDs7Ci0gICAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIGljYyogfCBlY2MqKQotICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgIDs7Ci0gICAgICAgIHBnY2MgfCBwZ2Y3NyB8IHBnZjkwKQotICAgICAgICAgIHdsPSctV2wsJwotICAgICAgICAgIDs7Ci0gICAgICAgIGNjYyopCi0gICAgICAgICAgd2w9Jy1XbCwnCi0gICAgICAgICAgOzsKLSAgICAgICAgY29tbykKLSAgICAgICAgICB3bD0nLWxvcHQ9JwotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICAgICAgICAgICAqU3VuXCBDKikKLSAgICAgICAgICAgICAgd2w9Jy1XbCwnCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIHdsPSctV2wsJwotICAgICAgOzsKLSAgICByZG9zKikKLSAgICAgIDs7Ci0gICAgc29sYXJpcyopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgc3Vub3M0KikKLSAgICAgIHdsPSctUW9wdGlvbiBsZCAnCi0gICAgICA7OwotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIHdsPSctV2wsJwotICAgICAgOzsKLSAgICBzeXN2NCpNUCopCi0gICAgICA7OwotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICB3bD0nLVdsLCcKLSAgICAgIDs7Ci0gICAgdW5pY29zKikKLSAgICAgIHdsPSctV2wsJwotICAgICAgOzsKLSAgICB1dHM0KikKLSAgICAgIDs7Ci0gIGVzYWMKLWZpCi0KLSMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgotCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLWhhcmRjb2RlX2RpcmVjdD1ubwotaGFyZGNvZGVfbWludXNfTD1ubwotCi1jYXNlICIkaG9zdF9vcyIgaW4KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKLSAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgIGZpCi0gICAgOzsKLSAgaW50ZXJpeCopCi0gICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKLSAgICB3aXRoX2dudV9sZD15ZXMKLSAgICA7OwotICBvcGVuYnNkKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci1lc2FjCi0KLWxkX3NobGlicz15ZXMKLWlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKLSAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gIGNhc2UgIiRob3N0X29zIiBpbgotICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2Fubm90IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwotICAgIGJlb3MqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIDoKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIDoKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgOzsKLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICA6Ci0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbmV0YnNkKikKLSAgICAgIDs7Ci0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIDoKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCi0gICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCi0gICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgICAgICBmaQotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIHN1bm9zNCopCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICA7OwotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgOgotICAgICAgZWxzZQotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICBlc2FjCi0gIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotICBmaQotZWxzZQotICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICBhaXgzKikKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCi0gICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgotICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICBlbHNlCi0gICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0gICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKLSAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0gICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGRvbmUKLSAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCi0gICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLSAgICAgICAgICB0aGVuCi0gICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgICAgICAgICAgIDoKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKLSAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQotICAgICAgICAgIGZpCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KLSAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYwotICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0Ci0gICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Ci19J2AKLSAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQotfSdgCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKLSAgICAgIGZpCi0gICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0Ci0gICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICBmaQotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgYW1pZ2FvcyopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwotICAgIGJzZGlbNDVdKikKLSAgICAgIDs7Ci0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLSAgICAgIGxpYmV4dD1saWIKLSAgICAgIDs7Ci0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgICAgIDoKLSAgICAgIGVsc2UKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICB4bGMqKQotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgICBmaQotICAgICAgOzsKLSAgICBkZ3V4KikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIDs7Ci0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwotICAgIGZyZWVic2QyLjIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgOzsKLSAgICBmcmVlYnNkMiopCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgOzsKLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICA7OwotICAgIGhwdXg5KikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgOzsKLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLSAgICBuZXRic2QqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgOzsKLSAgICBuZXdzb3M2KQotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICA7OwotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLSAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgICBlbHNlCi0gICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAqKQotICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgb3NmMyopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIDs7Ci0gICAgb3NmNCogfCBvc2Y1KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLSAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICA7OwotICAgIHNvbGFyaXMqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgOzsKLSAgICBzdW5vczQqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIDs7Ci0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgICAgICBzbmkpCi0gICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLSAgICAgICAgICA7OwotICAgICAgICBzaWVtZW5zKQotICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgICAgIDs7Ci0gICAgICAgIG1vdG9yb2xhKQotICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgc3lzdjQuMyopCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLSAgICAgICAgbGRfc2hsaWJzPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIDs7Ci0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKLSAgICAgIDs7Ci0gICAgdXRzNCopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICA7OwotICAgICopCi0gICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIDs7Ci0gIGVzYWMKLWZpCi0KLSMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCi0jIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIuCi0jIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAotIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKLSMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCi0jIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCi1saWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotY2FzZSAiJGhvc3Rfb3MiIGluCi0gIGFpeDMqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKLSAgICA7OwotICBhaXg0KiB8IGFpeDUqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGFtaWdhb3MqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKLSAgICA7OwotICBiZW9zKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBic2RpWzQ1XSopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgIHNocmV4dD0uZGxsCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICBzaHJleHQ9LmR5bGliCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgZGd1eCopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgZnJlZWJzZDEqKQotICAgIDs7Ci0gIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICAgIGZyZWVic2RbMTIzXSopCi0gICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKLSAgICAgICopCi0gICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JyA7OwotICAgIGVzYWMKLSAgICA7OwotICBnbnUqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBpYTY0KikKLSAgICAgICAgc2hyZXh0PS5zbwotICAgICAgICA7OwotICAgICAgaHBwYSo2NCopCi0gICAgICAgIHNocmV4dD0uc2wKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIHNocmV4dD0uc2wKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgaW50ZXJpeFszLTldKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgY2FzZSAkTEQgaW4KLSAgICAgICAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7Ci0gICAgICAgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIDs7Ci0gICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7Ci0gICAgICAgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBrbmV0YnNkKi1nbnUpCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgbmV0YnNkKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKLSAgICA7OwotICBuZXdzb3M2KQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIG50by1xbngqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKLSAgICA7OwotICBvczIqKQotICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gICAgc2hyZXh0PS5kbGwKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCi0gICAgOzsKLSAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHJkb3MqKQotICAgIDs7Ci0gIHNvbGFyaXMqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHN1bm9zNCopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JwotICAgIDs7Ci0gIHN5c3Y0IHwgc3lzdjQuMyopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCi0gICAgOzsKLSAgc3lzdjQqTVAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci0gIHV0czQqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JwotICAgIDs7Ci1lc2FjCi0KLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCi1lc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi1zaGxpYmV4dD1gZWNobyAiJHNocmV4dCIgfCBzZWQgLWUgJ3MsXlwuLCwnYAotZXNjYXBlZF9saWJuYW1lX3NwZWM9YGVjaG8gIlgkbGlibmFtZV9zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi1lc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLWVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz1gZWNobyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0KLUxDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0iJGVzY2FwZWRfd2wiCi0KLSMgU3RhdGljIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCi1zaGxpYmV4dD0iJHNobGliZXh0IgotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSIkZXNjYXBlZF9saWJuYW1lX3NwZWMiCi0KLSMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSIkZXNjYXBlZF9saWJyYXJ5X25hbWVzX3NwZWMiCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGVzY2FwZWRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0iJGhhcmRjb2RlX21pbnVzX0wiCi0KLUVPRgpkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRkMmNhOTMuLjAwMDAwMDAKLS0tIGEvY29uZmlnLnN1YgorKysgL2Rldi9udWxsCkBAIC0xLDE4MjUgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotdGltZXN0YW1wPScyMDE2LTExLTA0JwotCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKLSMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKLSMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgotCi0KLSMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uCi0jCi0jIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgotIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCi0jIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgotIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgotCi0jIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgotIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YgotCi0jIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcwotIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKLSMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KLSMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBvcnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKLSMgaXQgZG9lcyBub3Qgc3VwcG9ydC4gIFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCi0jIGEgZmFpbHVyZSB0byBzdXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKLSMgY29uZmlndXJhdGlvbi4KLQotIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFyaW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KLSMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8gYSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKLSMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KLSMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXItcGFydCBmb3JtOgotIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KLSMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9uLgotCi1tZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKLQotdXNhZ2U9IlwKLVVzYWdlOiAkMCBbT1BUSU9OXSBDUFUtTUZSLU9QU1lTIG9yIEFMSUFTCi0KLUNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KLQotT3BlcmF0aW9uIG1vZGVzOgotICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAotICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotCi1SZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgotCi12ZXJzaW9uPSJcCi1HTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKLQotQ29weXJpZ2h0IDE5OTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLXdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKLQotaGVscD0iCi1UcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0KLSMgUGFyc2UgY29tbWFuZCBsaW5lCi13aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KLSAgY2FzZSAkMSBpbgotICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCi0gICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7Ci0gICAgLS12ZXJzaW9uIHwgLXYgKQotICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKLSAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQotICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKLSAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKLSAgICAgICBzaGlmdDsgYnJlYWsgOzsKLSAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCi0gICAgICAgYnJlYWsgOzsKLSAgICAtKiApCi0gICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgotICAgICAgIGV4aXQgMSA7OwotCi0gICAgKmxvY2FsKikKLSAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KLSAgICAgICBlY2hvICQxCi0gICAgICAgZXhpdCA7OwotCi0gICAgKiApCi0gICAgICAgYnJlYWsgOzsKLSAgZXNhYwotZG9uZQotCi1jYXNlICQjIGluCi0gMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgotICAgIGV4aXQgMTs7Ci0gMSkgOzsKLSAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKLSAgICBleGl0IDE7OwotZXNhYwotCi0jIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCi0jIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgotbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCi1jYXNlICRtYXliZV9vcyBpbgotICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKLSAgbGludXgtbXVzbCogfCBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCi0gIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBuZXRic2QqLWVhYmkqIHwgXAotICBrb3BlbnNvbGFyaXMqLWdudSogfCBjbG91ZGFiaSotZWFiaSogfCBcCi0gIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKLSAgICBvcz0tJG1heWJlX29zCi0gICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKLSAgICA7OwotICBhbmRyb2lkLWxpbnV4KQotICAgIG9zPS1saW51eC1hbmRyb2lkCi0gICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AtdW5rbm93bgotICAgIDs7Ci0gICopCi0gICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAotICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQotICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKLSAgICBlbHNlIG9zPTsgZmkKLSAgICA7OwotZXNhYwotCi0jIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KLSMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCi0jIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCi0jIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KLWNhc2UgJG9zIGluCi0JLXN1bipvcyopCi0JCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgotCQk7OwotCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCi0JLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCi0JLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKLQktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAotCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCi0JLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCi0JLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKikKLQkJb3M9Ci0JCWJhc2ljX21hY2hpbmU9JDEKLQkJOzsKLQktYmx1ZWdlbmUqKQotCQlvcz0tY25rCi0JCTs7Ci0JLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCi0JCW9zPQotCQliYXNpY19tYWNoaW5lPSQxCi0JCTs7Ci0JLXNjb3V0KQotCQk7OwotCS13cnMpCi0JCW9zPS12eHdvcmtzCi0JCWJhc2ljX21hY2hpbmU9JDEKLQkJOzsKLQktY2hvcnVzb3MqKQotCQlvcz0tY2hvcnVzb3MKLQkJYmFzaWNfbWFjaGluZT0kMQotCQk7OwotCS1jaG9ydXNyZGIpCi0JCW9zPS1jaG9ydXNyZGIKLQkJYmFzaWNfbWFjaGluZT0kMQotCQk7OwotCS1oaXV4KikKLQkJb3M9LWhpdXh3ZTIKLQkJOzsKLQktc2NvNikKLQkJb3M9LXNjbzV2NgotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXNjbzUpCi0JCW9zPS1zY28zLjJ2NQotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXNjbzQpCi0JCW9zPS1zY28zLjJ2NAotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXNjbzMuMi5bNC05XSopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY28zLjJ2WzQtOV0qKQotCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXNjbzV2NiopCi0JCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktc2NvKikKLQkJb3M9LXNjbzMuMnYyCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktdWRrKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1pc2MpCi0JCW9zPS1pc2MyLjIKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1jbGl4KikKLQkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKLQkJOzsKLQktaXNjKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1seW54KjE3OCkKLQkJb3M9LWx5bnhvczE3OAotCQk7OwotCS1seW54KjUpCi0JCW9zPS1seW54b3M1Ci0JCTs7Ci0JLWx5bngqKQotCQlvcz0tbHlueG9zCi0JCTs7Ci0JLXB0eCopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAotCQk7OwotCS13aW5kb3dzbnQqKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCi0JCTs7Ci0JLXBzb3MqKQotCQlvcz0tcHNvcwotCQk7OwotCS1taW50IHwgLW1pbnRbMC05XSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQotCQlvcz0tbWludAotCQk7OwotZXNhYwotCi0jIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KLWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgotCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCi0JMTc1MGEgfCA1ODAgXAotCXwgYTI5ayBcCi0JfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCi0JfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAotCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCi0JfCBhbTMzXzIuMCBcCi0JfCBhcmMgfCBhcmNlYiBcCi0JfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyLThdIHwgYXJtdlszLThdW2xiXSB8IGFybXY3W2FybV0gXAotCXwgYXZyIHwgYXZyMzIgXAotCXwgYmEgXAotCXwgYmUzMiB8IGJlNjQgXAotCXwgYmZpbiBcCi0JfCBjNHggfCBjODA1MSB8IGNsaXBwZXIgXAotCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKLQl8IGUyayB8IGVwaXBoYW55IFwKLQl8IGZpZG8gfCBmcjMwIHwgZnJ2IHwgZnQzMiBcCi0JfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAotCXwgaGV4YWdvbiBcCi0JfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKLQl8IGlwMmsgfCBpcTIwMDAgXAotCXwgazFvbSBcCi0JfCBsZTMyIHwgbGU2NCBcCi0JfCBsbTMyIFwKLQl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAotCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1pY3JvYmxhemVlbCB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAotCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCi0JfCBtaXBzMTYgXAotCXwgbWlwczY0IHwgbWlwczY0ZWwgXAotCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAotCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKLQl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCi0JfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAotCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAotCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAotCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAotCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAotCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAotCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKLQl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCi0JfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCi0JfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAotCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKLQl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKLQl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCi0JfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCi0JfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAotCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAotCXwgbW94aWUgXAotCXwgbXQgXAotCXwgbXNwNDMwIFwKLQl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAotCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAotCXwgbnMxNmsgfCBuczMyayBcCi0JfCBvcGVuOCB8IG9yMWsgfCBvcjFrbmQgfCBvcjMyIFwKLQl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCi0JfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAotCXwgcHJ1IFwKLQl8IHB5cmFtaWQgXAotCXwgcmlzY3YzMiB8IHJpc2N2NjQgXAotCXwgcmw3OCB8IHJ4IFwKLQl8IHNjb3JlIFwKLQl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzIzNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAotCXwgc2g2NCB8IHNoNjRsZSBcCi0JfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCi0JfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAotCXwgc3B1IFwKLQl8IHRhaG9lIHwgdGljNHggfCB0aWM1NHggfCB0aWM1NXggfCB0aWM2eCB8IHRpYzgwIHwgdHJvbiBcCi0JfCB1Ymljb20zMiBcCi0JfCB2ODUwIHwgdjg1MGUgfCB2ODUwZTEgfCB2ODUwZTIgfCB2ODUwZXMgfCB2ODUwZTJ2MyBcCi0JfCB2aXNpdW0gXAotCXwgd2UzMmsgXAotCXwgeDg2IHwgeGMxNnggfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAotCXwgejhrIHwgejgwKQotCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KLQkJOzsKLQljNTR4KQotCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCi0JCTs7Ci0JYzU1eCkKLQkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgotCQk7OwotCWM2eCkKLQkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCi0JCTs7Ci0JbGVvbnxsZW9uWzMtOV0pCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtJGJhc2ljX21hY2hpbmUKLQkJOzsKLQltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIgfCBtNjhoY3MxMnggfCBudnB0eCB8IHBpY29jaGlwKQotCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KLQkJb3M9LW5vbmUKLQkJOzsKLQltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKLQkJOzsKLQltczEpCi0JCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgotCQk7OwotCi0Jc3Ryb25nYXJtIHwgdGh1bWIgfCB4c2NhbGUpCi0JCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KLQkJOzsKLQl4Z2F0ZSkKLQkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCi0JCW9zPS1ub25lCi0JCTs7Ci0JeHNjYWxlZWIpCi0JCWJhc2ljX21hY2hpbmU9YXJtZWItdW5rbm93bgotCQk7OwotCi0JeHNjYWxlZWwpCi0JCWJhc2ljX21hY2hpbmU9YXJtZWwtdW5rbm93bgotCQk7OwotCi0JIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKLQkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKLQkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCi0JaSo4NiB8IHg4Nl82NCkKLQkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKLQkgIDs7Ci0JIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KLQkqLSotKikKLQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCWV4aXQgMQotCQk7OwotCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCi0JNTgwLSogXAotCXwgYTI5ay0qIFwKLQl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCi0JfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKLQl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCi0JfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIHwgYXJjZWItKiBcCi0JfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKLQl8IGF2ci0qIHwgYXZyMzItKiBcCi0JfCBiYS0qIFwKLQl8IGJlMzItKiB8IGJlNjQtKiBcCi0JfCBiZmluLSogfCBiczIwMDAtKiBcCi0JfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCi0JfCBjODA1MS0qIHwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKLQl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKLQl8IGUyay0qIHwgZWx4c2ktKiBcCi0JfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCi0JfCBoODMwMC0qIHwgaDg1MDAtKiBcCi0JfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAotCXwgaGV4YWdvbi0qIFwKLQl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCi0JfCBpcDJrLSogfCBpcTIwMDAtKiBcCi0JfCBrMW9tLSogXAotCXwgbGUzMi0qIHwgbGU2NC0qIFwKLQl8IGxtMzItKiBcCi0JfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCi0JfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAotCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiBcCi0JfCBtaWNyb2JsYXplLSogfCBtaWNyb2JsYXplZWwtKiBcCi0JfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCi0JfCBtaXBzMTYtKiBcCi0JfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAotCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKLQl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAotCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCi0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKLQl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCi0JfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAotCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKLQl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCi0JfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAotCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCi0JfCBtaXBzaXNhMzJyNi0qIHwgbWlwc2lzYTMycjZlbC0qIFwKLQl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCi0JfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKLQl8IG1pcHNpc2E2NHI2LSogfCBtaXBzaXNhNjRyNmVsLSogXAotCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKLQl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAotCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKLQl8IG1pcHN0eDM5LSogfCBtaXBzdHgzOWVsLSogXAotCXwgbW1peC0qIFwKLQl8IG10LSogXAotCXwgbXNwNDMwLSogXAotCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCi0JfCBuaW9zLSogfCBuaW9zMi0qIHwgbmlvczJlYi0qIHwgbmlvczJlbC0qIFwKLQl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAotCXwgb3BlbjgtKiBcCi0JfCBvcjFrKi0qIFwKLQl8IG9yaW9uLSogXAotCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCi0JfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiBcCi0JfCBwcnUtKiBcCi0JfCBweXJhbWlkLSogXAotCXwgcmlzY3YzMi0qIHwgcmlzY3Y2NC0qIFwKLQl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCi0JfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCi0JfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKLQl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKLQl8IHNwYXJjbGl0ZS0qIFwKLQl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3YxLSogfCBzeCotKiBcCi0JfCB0YWhvZS0qIFwKLQl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKLQl8IHRpbGUqLSogXAotCXwgdHJvbi0qIFwKLQl8IHViaWNvbTMyLSogXAotCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHY4NTBlMS0qIHwgdjg1MGVzLSogfCB2ODUwZTItKiB8IHY4NTBlMnYzLSogXAotCXwgdmF4LSogXAotCXwgdmlzaXVtLSogXAotCXwgd2UzMmstKiBcCi0JfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIFwKLQl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKLQl8IHltcC0qIFwKLQl8IHo4ay0qIHwgejgwLSopCi0JCTs7Ci0JIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgotCXh0ZW5zYSopCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgotCQk7OwotCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKLQkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgotCTM4NmJzZCkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KLQkJb3M9LWJzZAotCQk7OwotCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKLQkJOzsKLQkzYiopCi0JCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0Ci0JCTs7Ci0JYTI5a2hpZikKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tdWRpCi0JCTs7Ci0JYWJhY3VzKQotCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCi0JCTs7Ci0JYWRvYmU2OGspCi0JCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCi0JCW9zPS1zY291dAotCQk7OwotCWFsbGlhbnQgfCBmeDgwKQotCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAotCQk7OwotCWFsdG9zIHwgYWx0b3MzMDY4KQotCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKLQkJOzsKLQlhbTI5aykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKLQkJb3M9LWJzZAotCQk7OwotCWFtZDY0KQotCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYwotCQk7OwotCWFtZDY0LSopCi0JCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JYW1kYWhsKQotCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKLQkJb3M9LXN5c3YKLQkJOzsKLQlhbWlnYSB8IGFtaWdhLSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCi0JCTs7Ci0JYW1pZ2FvcyB8IGFtaWdhZG9zKQotCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQlvcz0tYW1pZ2FvcwotCQk7OwotCWFtaWdhdW5peCB8IGFtaXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCi0JCW9zPS1zeXN2NAotCQk7OwotCWFwb2xsbzY4KQotCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JYXBvbGxvNjhic2QpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KLQkJb3M9LWJzZAotCQk7OwotCWFyb3MpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQlvcz0tYXJvcwotCQk7OwotCWFzbWpzKQotCQliYXNpY19tYWNoaW5lPWFzbWpzLXVua25vd24KLQkJOzsKLQlhdXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQotCQlvcz0tYXV4Ci0JCTs7Ci0JYmFsYW5jZSkKLQkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50Ci0JCW9zPS1keW5peAotCQk7OwotCWJsYWNrZmluKQotCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgotCQlvcz0tbGludXgKLQkJOzsKLQlibGFja2Zpbi0qKQotCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JYmx1ZWdlbmUqKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCi0JCW9zPS1jbmsKLQkJOzsKLQljNTR4LSopCi0JCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JYzU1eC0qKQotCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCWM2eC0qKQotCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JYzkwKQotCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQljZWdjYykKLQkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgotCQlvcz0tY2VnY2MKLQkJOzsKLQljb252ZXgtYzEpCi0JCWJhc2ljX21hY2hpbmU9YzEtY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljb252ZXgtYzIpCi0JCWJhc2ljX21hY2hpbmU9YzItY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljb252ZXgtYzMyKQotCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKLQkJb3M9LWJzZAotCQk7OwotCWNvbnZleC1jMzQpCi0JCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAotCQlvcz0tYnNkCi0JCTs7Ci0JY29udmV4LWMzOCkKLQkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljcmF5IHwgajkwKQotCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQljcmF5bnYpCi0JCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKLQkJb3M9LXVuaWNvc21wCi0JCTs7Ci0JY3IxNiB8IGNyMTYtKikKLQkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KLQkJb3M9LWVsZgotCQk7OwotCWNyZHMgfCB1bm9zKQotCQliYXNpY19tYWNoaW5lPW02OGstY3JkcwotCQk7OwotCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKLQkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKLQkJOzsKLQljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQotCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcwotCQk7OwotCWNyeCkKLQkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgotCQlvcz0tZWxmCi0JCTs7Ci0JZGEzMCB8IGRhMzAtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKLQkJOzsKLQlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKLQkJOzsKLQlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCi0JCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCi0JCW9zPS10b3BzMTAKLQkJOzsKLQlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCi0JCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCi0JCW9zPS10b3BzMjAKLQkJOzsKLQlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAotCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQotCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKLQkJOzsKLQlkZWx0YTg4KQotCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKLQkJb3M9LXN5c3YzCi0JCTs7Ci0JZGljb3MpCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQlvcz0tZGljb3MKLQkJOzsKLQlkamdwcCkKLQkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCi0JCW9zPS1tc2Rvc2RqZ3BwCi0JCTs7Ci0JZHB4MjAgfCBkcHgyMC0qKQotCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCi0JCW9zPS1ib3N4Ci0JCTs7Ci0JZHB4MiogfCBkcHgyKi1idWxsKQotCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAotCQlvcz0tc3lzdjMKLQkJOzsKLQllNTAwdlsxMl0pCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCi0JCW9zPSRvcyJzcGUiCi0JCTs7Ci0JZTUwMHZbMTJdLSopCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQlvcz0kb3Mic3BlIgotCQk7OwotCWVibW9uMjlrKQotCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCi0JCW9zPS1lYm1vbgotCQk7OwotCWVseHNpKQotCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCi0JCW9zPS1ic2QKLQkJOzsKLQllbmNvcmUgfCB1bWF4IHwgbW1heCkKLQkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKLQkJOzsKLQllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgotCQlvcz0tb3NlCi0JCTs7Ci0JZngyODAwKQotCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAotCQk7OwotCWdlbml4KQotCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCi0JCTs7Ci0JZ21pY3JvKQotCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JZ28zMikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCW9zPS1nbzMyCi0JCTs7Ci0JaDMwNTByKiB8IGhpdXgqKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQotCQlvcz0taGl1eHdlMgotCQk7OwotCWg4MzAwaG1zKQotCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKLQkJb3M9LWhtcwotCQk7OwotCWg4MzAweHJheSkKLQkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCi0JCW9zPS14cmF5Ci0JCTs7Ci0JaDg1MDBobXMpCi0JCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQotCQlvcz0taG1zCi0JCTs7Ci0JaGFycmlzKQotCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCi0JCW9zPS1zeXN2MwotCQk7OwotCWhwMzAwLSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1ocAotCQk7OwotCWhwMzAwYnNkKQotCQliYXNpY19tYWNoaW5lPW02OGstaHAKLQkJb3M9LWJzZAotCQk7OwotCWhwMzAwaHB1eCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0JCW9zPS1ocHV4Ci0JCTs7Ci0JaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCi0JCTs7Ci0JaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCi0JCTs7Ci0JaHA5azNbMi05XVswLTldKQotCQliYXNpY19tYWNoaW5lPW02OGstaHAKLQkJOzsKLQlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKLQkJOzsKLQlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAotCQk7OwotCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQotCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJOzsKLQlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCi0JCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAotCQk7OwotCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJOzsKLQlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKLQkJOzsKLQlocHBhLW5leHQpCi0JCW9zPS1uZXh0c3RlcDMKLQkJOzsKLQlocHBhb3NmKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJb3M9LW9zZgotCQk7OwotCWhwcHJvKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJb3M9LXByb2VsZgotCQk7OwotCWkzNzAtaWJtKiB8IGlibSopCi0JCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KLQkJOzsKLQlpKjg2djMyKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKLQkJb3M9LXN5c3YzMgotCQk7OwotCWkqODZ2NCopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz0tc3lzdjQKLQkJOzsKLQlpKjg2dikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JaSo4NnNvbDIpCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz0tc29sYXJpczIKLQkJOzsKLQlpMzg2bWFjaCkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKLQkJb3M9LW1hY2gKLQkJOzsKLQlpMzg2LXZzdGEgfCB2c3RhKQotCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgotCQlvcz0tdnN0YQotCQk7OwotCWlyaXMgfCBpcmlzNGQpCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKLQkJY2FzZSAkb3MgaW4KLQkJICAgIC1pcml4KikKLQkJCTs7Ci0JCSAgICAqKQotCQkJb3M9LWlyaXg0Ci0JCQk7OwotCQllc2FjCi0JCTs7Ci0JaXNpNjggfCBpc2kpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKLQkJb3M9LXN5c3YKLQkJOzsKLQlsZW9uLSp8bGVvblszLTldLSopCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvLS4qLy8nYAotCQk7OwotCW02OGtub21tdSkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JbTY4a25vbW11LSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQlvcz0tbGludXgKLQkJOzsKLQltODhrLW9tcm9uKikKLQkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCi0JCTs7Ci0JbWFnbnVtIHwgbTMyMzApCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JbWVybGluKQotCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKLQkJb3M9LXN5c3YKLQkJOzsKLQltaWNyb2JsYXplKikKLQkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAotCQk7OwotCW1pbmd3NjQpCi0JCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCi0JCW9zPS1taW5ndzY0Ci0JCTs7Ci0JbWluZ3czMikKLQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCW9zPS1taW5ndzMyCi0JCTs7Ci0JbWluZ3czMmNlKQotCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCi0JCW9zPS1taW5ndzMyY2UKLQkJOzsKLQltaW5pZnJhbWUpCi0JCWJhc2ljX21hY2hpbmU9bTY4MDAwLWNvbnZlcmdlbnQKLQkJOzsKLQkqbWludCB8IC1taW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCi0JCW9zPS1taW50Ci0JCTs7Ci0JbWlwczMqLSopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgCi0JCTs7Ci0JbWlwczMqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCi0JCTs7Ci0JbW9uaXRvcikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4awotCQlvcz0tY29mZgotCQk7OwotCW1vcnBob3MpCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCi0JCW9zPS1tb3JwaG9zCi0JCTs7Ci0JbW94aWVib3gpCi0JCWJhc2ljX21hY2hpbmU9bW94aWUtdW5rbm93bgotCQlvcz0tbW94aWVib3gKLQkJOzsKLQltc2RvcykKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCW9zPS1tc2RvcwotCQk7OwotCW1zMS0qKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCi0JCTs7Ci0JbXN5cykKLQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCW9zPS1tc3lzCi0JCTs7Ci0JbXZzKQotCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCi0JCW9zPS1tdnMKLQkJOzsKLQluYWNsKQotCQliYXNpY19tYWNoaW5lPWxlMzItdW5rbm93bgotCQlvcz0tbmFjbAotCQk7OwotCW5jcjMwMDApCi0JCWJhc2ljX21hY2hpbmU9aTQ4Ni1uY3IKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0JbmV0YnNkMzg2KQotCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgotCQlvcz0tbmV0YnNkCi0JCTs7Ci0JbmV0d2luZGVyKQotCQliYXNpY19tYWNoaW5lPWFybXY0bC1yZWJlbAotCQlvcz0tbGludXgKLQkJOzsKLQluZXdzIHwgbmV3czcwMCB8IG5ld3M4MDAgfCBuZXdzOTAwKQotCQliYXNpY19tYWNoaW5lPW02OGstc29ueQotCQlvcz0tbmV3c29zCi0JCTs7Ci0JbmV3czEwMDApCi0JCWJhc2ljX21hY2hpbmU9bTY4MDMwLXNvbnkKLQkJb3M9LW5ld3NvcwotCQk7OwotCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKLQkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKLQkJb3M9LW5ld3NvcwotCQk7OwotCW5lY3Y3MCkKLQkJYmFzaWNfbWFjaGluZT12NzAtbmVjCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JbmV4dCB8IG0qLW5leHQgKQotCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAotCQljYXNlICRvcyBpbgotCQkgICAgLW5leHRzdGVwKiApCi0JCQk7OwotCQkgICAgLW5zMiopCi0JCSAgICAgIG9zPS1uZXh0c3RlcDIKLQkJCTs7Ci0JCSAgICAqKQotCQkgICAgICBvcz0tbmV4dHN0ZXAzCi0JCQk7OwotCQllc2FjCi0JCTs7Ci0JbmgzMDAwKQotCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCi0JCW9zPS1jeHV4Ci0JCTs7Ci0JbmhbNDVdMDAwKQotCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCi0JCW9zPS1jeHV4Ci0JCTs7Ci0JbmluZHk5NjApCi0JCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAotCQlvcz0tbmluZHkKLQkJOzsKLQltb245NjApCi0JCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAotCQlvcz0tbW9uOTYwCi0JCTs7Ci0Jbm9uc3RvcHV4KQotCQliYXNpY19tYWNoaW5lPW1pcHMtY29tcGFxCi0JCW9zPS1ub25zdG9wdXgKLQkJOzsKLQlucDEpCi0JCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCi0JCTs7Ci0JbmVvLXRhbmRlbSkKLQkJYmFzaWNfbWFjaGluZT1uZW8tdGFuZGVtCi0JCTs7Ci0JbnNlLXRhbmRlbSkKLQkJYmFzaWNfbWFjaGluZT1uc2UtdGFuZGVtCi0JCTs7Ci0JbnNyLXRhbmRlbSkKLQkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCi0JCTs7Ci0Jb3A1MG4tKiB8IG9wNjBjLSopCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKLQkJb3M9LXByb2VsZgotCQk7OwotCW9wZW5yaXNjIHwgb3BlbnJpc2MtKikKLQkJYmFzaWNfbWFjaGluZT1vcjMyLXVua25vd24KLQkJOzsKLQlvczQwMCkKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQotCQlvcz0tb3M0MDAKLQkJOzsKLQlPU0U2ODAwMCB8IG9zZTY4MDAwKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgotCQlvcz0tb3NlCi0JCTs7Ci0Jb3M2OGspCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1ub25lCi0JCW9zPS1vczY4awotCQk7OwotCXBhLWhpdGFjaGkpCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCi0JCW9zPS1oaXV4d2UyCi0JCTs7Ci0JcGFyYWdvbikKLQkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCi0JCW9zPS1vc2YKLQkJOzsKLQlwYXJpc2MpCi0JCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCi0JCW9zPS1saW51eAotCQk7OwotCXBhcmlzYy0qKQotCQliYXNpY19tYWNoaW5lPWhwcGEtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JcGJkKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQotCQk7OwotCXBiYikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXR0aQotCQk7OwotCXBjNTMyIHwgcGM1MzItKikKLQkJYmFzaWNfbWFjaGluZT1uczMyay1wYzUzMgotCQk7OwotCXBjOTgpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQk7OwotCXBjOTgtKikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcGVudGl1bSB8IHA1IHwgazUgfCBrNiB8IG5leGdlbiB8IHZpYWMzKQotCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKLQkJOzsKLQlwZW50aXVtcHJvIHwgcDYgfCA2eDg2IHwgYXRobG9uIHwgYXRobG9uXyopCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQk7OwotCXBlbnRpdW1paSB8IHBlbnRpdW0yIHwgcGVudGl1bWlpaSB8IHBlbnRpdW0zKQotCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJOzsKLQlwZW50aXVtNCkKLQkJYmFzaWNfbWFjaGluZT1pNzg2LXBjCi0JCTs7Ci0JcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQotCQliYXNpY19tYWNoaW5lPWk1ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSopCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBlbnRpdW1paS0qIHwgcGVudGl1bTItKiB8IHBlbnRpdW1paWktKiB8IHBlbnRpdW0zLSopCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBlbnRpdW00LSopCi0JCWJhc2ljX21hY2hpbmU9aTc4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBuKQotCQliYXNpY19tYWNoaW5lPXBuLWdvdWxkCi0JCTs7Ci0JcG93ZXIpCWJhc2ljX21hY2hpbmU9cG93ZXItaWJtCi0JCTs7Ci0JcHBjIHwgcHBjYmUpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCi0JCTs7Ci0JcHBjLSogfCBwcGNiZS0qKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwcGNsZSB8IHBvd2VycGNsaXR0bGUpCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KLQkJOzsKLQlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCi0JCTs7Ci0JcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KLQkJOzsKLQlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBzMikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQotCQk7OwotCXB3MzIpCi0JCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCi0JCW9zPS1wdzMyCi0JCTs7Ci0JcmRvcyB8IHJkb3M2NCkKLQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJb3M9LXJkb3MKLQkJOzsKLQlyZG9zMzIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQlvcz0tcmRvcwotCQk7OwotCXJvbTY4aykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4awotCQlvcz0tY29mZgotCQk7OwotCXJtWzQ2XTAwKQotCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucwotCQk7OwotCXJ0cGMgfCBydHBjLSopCi0JCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KLQkJOzsKLQlzMzkwIHwgczM5MC0qKQotCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCi0JCTs7Ci0JczM5MHggfCBzMzkweC0qKQotCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQotCQk7OwotCXNhMjkyMDApCi0JCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKLQkJb3M9LXVkaQotCQk7OwotCXNiMSkKLQkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgotCQk7OwotCXNiMWVsKQotCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KLQkJOzsKLQlzZGUpCi0JCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQotCQlvcz0tZWxmCi0JCTs7Ci0Jc2VpKQotCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCi0JCW9zPS1zZWl1eAotCQk7OwotCXNlcXVlbnQpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50Ci0JCTs7Ci0Jc2gpCi0JCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQotCQlvcz0taG1zCi0JCTs7Ci0Jc2g1ZWwpCi0JCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgotCQk7OwotCXNoNjQpCi0JCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCi0JCTs7Ci0Jc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKLQkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCi0JCW9zPS12eHdvcmtzCi0JCTs7Ci0Jc3BzNykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKLQkJb3M9LXN5c3YyCi0JCTs7Ci0Jc3B1cikKLQkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KLQkJOzsKLQlzdDIwMDApCi0JCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KLQkJOzsKLQlzdHJhdHVzKQotCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cwotCQlvcz0tc3lzdjQKLQkJOzsKLQlzdHJvbmdhcm0tKiB8IHRodW1iLSopCi0JCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0Jc3VuMikKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCTs7Ci0Jc3VuMm9zMykKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCW9zPS1zdW5vczMKLQkJOzsKLQlzdW4yb3M0KQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KLQkJb3M9LXN1bm9zNAotCQk7OwotCXN1bjNvczMpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KLQkJb3M9LXN1bm9zMwotCQk7OwotCXN1bjNvczQpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KLQkJb3M9LXN1bm9zNAotCQk7OwotCXN1bjRvczMpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCW9zPS1zdW5vczMKLQkJOzsKLQlzdW40b3M0KQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQlvcz0tc3Vub3M0Ci0JCTs7Ci0Jc3VuNHNvbDIpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCW9zPS1zb2xhcmlzMgotCQk7OwotCXN1bjMgfCBzdW4zLSopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KLQkJOzsKLQlzdW40KQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQk7OwotCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQotCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCi0JCTs7Ci0Jc3YxKQotCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQlzeW1tZXRyeSkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKLQkJb3M9LWR5bml4Ci0JCTs7Ci0JdDNlKQotCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwotCXQ5MCkKLQkJYmFzaWNfbWFjaGluZT10OTAtY3JheQotCQlvcz0tdW5pY29zCi0JCTs7Ci0JdGlsZSopCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgotCQlvcz0tbGludXgtZ251Ci0JCTs7Ci0JdHgzOSkKLQkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCi0JCTs7Ci0JdHgzOWVsKQotCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgotCQk7OwotCXRvYWQxKQotCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAotCQlvcz0tdG9wczIwCi0JCTs7Ci0JdG93ZXIgfCB0b3dlci0zMikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgotCQk7OwotCXRwZikKLQkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KLQkJb3M9LXRwZgotCQk7OwotCXVkaTI5aykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tdWRpCi0JCTs7Ci0JdWx0cmEzKQotCQliYXNpY19tYWNoaW5lPWEyOWstbnl1Ci0JCW9zPS1zeW0xCi0JCTs7Ci0JdjgxMCB8IG5lY3Y4MTApCi0JCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKLQkJb3M9LW5vbmUKLQkJOzsKLQl2YXh2KQotCQliYXNpY19tYWNoaW5lPXZheC1kZWMKLQkJb3M9LXN5c3YKLQkJOzsKLQl2bXMpCi0JCWJhc2ljX21hY2hpbmU9dmF4LWRlYwotCQlvcz0tdm1zCi0JCTs7Ci0JdnBwKnx2eHx2eC0qKQotCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQotCQk7OwotCXZ4d29ya3M5NjApCi0JCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKLQkJb3M9LXZ4d29ya3MKLQkJOzsKLQl2eHdvcmtzNjgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKLQkJb3M9LXZ4d29ya3MKLQkJOzsKLQl2eHdvcmtzMjlrKQotCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCi0JCW9zPS12eHdvcmtzCi0JCTs7Ci0JdzY1KikKLQkJYmFzaWNfbWFjaGluZT13NjUtd2RjCi0JCW9zPS1ub25lCi0JCTs7Ci0Jdzg5ay0qKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAotCQlvcz0tcHJvZWxmCi0JCTs7Ci0JeGJveCkKLQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCW9zPS1taW5ndzMyCi0JCTs7Ci0JeHBzIHwgeHBzMTAwKQotCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKLQkJOzsKLQl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKLQkJOzsKLQl5bXApCi0JCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwotCXo4ay0qLWNvZmYpCi0JCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KLQkJb3M9LXNpbQotCQk7OwotCXo4MC0qLWNvZmYpCi0JCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KLQkJb3M9LXNpbQotCQk7OwotCW5vbmUpCi0JCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCi0JCW9zPS1ub25lCi0JCTs7Ci0KLSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KLSMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KLQl3ODlrKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAotCQk7OwotCW9wNTBuKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCi0JCTs7Ci0Jb3A2MGMpCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKLQkJOzsKLQlyb21wKQotCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCi0JCTs7Ci0JbW1peCkKLQkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCi0JCTs7Ci0JcnM2MDAwKQotCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KLQkJOzsKLQl2YXgpCi0JCWJhc2ljX21hY2hpbmU9dmF4LWRlYwotCQk7OwotCXBkcDEwKQotCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0Ci0JCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgotCQk7OwotCXBkcDExKQotCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYwotCQk7OwotCXdlMzJrKQotCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAotCQk7OwotCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKLQkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCi0JCTs7Ci0Jc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCTs7Ci0JY3lkcmEpCi0JCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQotCQk7OwotCW9yaW9uKQotCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAotCQk7OwotCW9yaW9uMTA1KQotCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCi0JCTs7Ci0JbWFjIHwgbXB3IHwgbWFjLW1wdykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCi0JCTs7Ci0JcG1hYyB8IHBtYWMtbXB3KQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKLQkJOzsKLQkqLXVua25vd24pCi0JCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCi0JCTs7Ci0JKikKLQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCWV4aXQgMQotCQk7OwotZXNhYwotCi0jIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KLWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkqLWRpZ2l0YWwqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKLQkJOzsKLQkqLWNvbW1vZG9yZSopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCi0JCTs7Ci0JKikKLQkJOzsKLWVzYWMKLQotIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCi0KLWlmIFsgeCIkb3MiICE9IHgiIiBdCi10aGVuCi1jYXNlICRvcyBpbgotCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCi0JIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KLQkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KLQktYXVyb3JhdXgpCi0JCW9zPS1hdXJvcmF1eAotCQk7OwotCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCi0JCTs7Ci0JLXNvbGFyaXMpCi0JCW9zPS1zb2xhcmlzMgotCQk7OwotCS1zdnI0KikKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0JLXVuaXh3YXJlKikKLQkJb3M9LXN5c3Y0LjJ1dwotCQk7OwotCS1nbnUvbGludXgqKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAotCQk7OwotCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCi0JIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KLQkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgotCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KLQktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCi0JICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAotCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKLQkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKLQkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKLQkgICAgICB8IC1hb3MqIHwgLWFyb3MqIHwgLWNsb3VkYWJpKiB8IC1zb3J0aXgqIFwKLQkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAotCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAotCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKLQkgICAgICB8IC1iaXRyaWcqIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiB8IC1saWJlcnR5YnNkKiBcCi0JICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCi0JICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAotCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKLQkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKLQkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAotCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKLQkgICAgICB8IC1taWRpcGl4KiB8IC1taW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKLQkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LW11c2wqIHwgLWxpbnV4LXVjbGliYyogXAotCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIHwgLW1veGllYm94KiBcCi0JICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKLQkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKLQkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKLQkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCi0JICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCi0JICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKLQkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyogXAotCSAgICAgIHwgLW9uZWZzKiB8IC10aXJ0b3MqIHwgLXBob2VuaXgqIHwgLWZ1Y2hzaWEqKQotCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KLQkJOzsKLQktcW54KikKLQkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgotCQkgICAgeDg2LSogfCBpKjg2LSopCi0JCQk7OwotCQkgICAgKikKLQkJCW9zPS1udG8kb3MKLQkJCTs7Ci0JCWVzYWMKLQkJOzsKLQktbnRvLXFueCopCi0JCTs7Ci0JLW50byopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAotCQk7OwotCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKLQkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCi0JICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKLQkJOzsKLQktbWFjKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAotCQk7OwotCS1saW51eC1kaWV0bGliYykKLQkJb3M9LWxpbnV4LWRpZXRsaWJjCi0JCTs7Ci0JLWxpbnV4KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAotCQk7OwotCS1zdW5vczUqKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCi0JCTs7Ci0JLXN1bm9zNiopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKLQkJOzsKLQktb3BlbmVkKikKLQkJb3M9LW9wZW5lZGl0aW9uCi0JCTs7Ci0JLW9zNDAwKikKLQkJb3M9LW9zNDAwCi0JCTs7Ci0JLXdpbmNlKikKLQkJb3M9LXdpbmNlCi0JCTs7Ci0JLW9zZnJvc2UqKQotCQlvcz0tb3Nmcm9zZQotCQk7OwotCS1vc2YqKQotCQlvcz0tb3NmCi0JCTs7Ci0JLXV0ZWsqKQotCQlvcz0tYnNkCi0JCTs7Ci0JLWR5bml4KikKLQkJb3M9LWJzZAotCQk7OwotCS1hY2lzKikKLQkJb3M9LWFvcwotCQk7OwotCS1hdGhlb3MqKQotCQlvcz0tYXRoZW9zCi0JCTs7Ci0JLXN5bGxhYmxlKikKLQkJb3M9LXN5bGxhYmxlCi0JCTs7Ci0JLTM4NmJzZCkKLQkJb3M9LWJzZAotCQk7OwotCS1jdGl4KiB8IC11dHMqKQotCQlvcz0tc3lzdgotCQk7OwotCS1ub3ZhKikKLQkJb3M9LXJ0bWstbm92YQotCQk7OwotCS1uczIgKQotCQlvcz0tbmV4dHN0ZXAyCi0JCTs7Ci0JLW5zayopCi0JCW9zPS1uc2sKLQkJOzsKLQkjIFByZXNlcnZlIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBzaW5peDUuCi0JLXNpbml4NS4qKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c2luaXh8c3lzdnwnYAotCQk7OwotCS1zaW5peCopCi0JCW9zPS1zeXN2NAotCQk7OwotCS10cGYqKQotCQlvcz0tdHBmCi0JCTs7Ci0JLXRyaXRvbiopCi0JCW9zPS1zeXN2MwotCQk7OwotCS1vc3MqKQotCQlvcz0tc3lzdjMKLQkJOzsKLQktc3ZyNCkKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0JLXN2cjMpCi0JCW9zPS1zeXN2MwotCQk7OwotCS1zeXN2cjQpCi0JCW9zPS1zeXN2NAotCQk7OwotCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KLQktc3lzdiopCi0JCTs7Ci0JLW9zZSopCi0JCW9zPS1vc2UKLQkJOzsKLQktZXMxODAwKikKLQkJb3M9LW9zZQotCQk7OwotCS14ZW5peCkKLQkJb3M9LXhlbml4Ci0JCTs7Ci0JLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKLQkJb3M9LW1pbnQKLQkJOzsKLQktYXJvcyopCi0JCW9zPS1hcm9zCi0JCTs7Ci0JLXp2bW9lKQotCQlvcz0tenZtb2UKLQkJOzsKLQktZGljb3MqKQotCQlvcz0tZGljb3MKLQkJOzsKLQktbmFjbCopCi0JCTs7Ci0JLWlvcykKLQkJOzsKLQktbm9uZSkKLQkJOzsKLQkqKQotCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KLQkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKLQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCWV4aXQgMQotCQk7OwotZXNhYwotZWxzZQotCi0jIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCi0jIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgotIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgotCi0jIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCi0jICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCi0jIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKLSMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZwotIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KLQotY2FzZSAkYmFzaWNfbWFjaGluZSBpbgotCXNjb3JlLSopCi0JCW9zPS1lbGYKLQkJOzsKLQlzcHUtKikKLQkJb3M9LWVsZgotCQk7OwotCSotYWNvcm4pCi0JCW9zPS1yaXNjaXgxLjIKLQkJOzsKLQlhcm0qLXJlYmVsKQotCQlvcz0tbGludXgKLQkJOzsKLQlhcm0qLXNlbWkpCi0JCW9zPS1hb3V0Ci0JCTs7Ci0JYzR4LSogfCB0aWM0eC0qKQotCQlvcz0tY29mZgotCQk7OwotCWM4MDUxLSopCi0JCW9zPS1lbGYKLQkJOzsKLQloZXhhZ29uLSopCi0JCW9zPS1lbGYKLQkJOzsKLQl0aWM1NHgtKikKLQkJb3M9LWNvZmYKLQkJOzsKLQl0aWM1NXgtKikKLQkJb3M9LWNvZmYKLQkJOzsKLQl0aWM2eC0qKQotCQlvcz0tY29mZgotCQk7OwotCSMgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIHRoZSAqLWRlYyBlbnRyeS4KLQlwZHAxMC0qKQotCQlvcz0tdG9wczIwCi0JCTs7Ci0JcGRwMTEtKikKLQkJb3M9LW5vbmUKLQkJOzsKLQkqLWRlYyB8IHZheC0qKQotCQlvcz0tdWx0cml4NC4yCi0JCTs7Ci0JbTY4Ki1hcG9sbG8pCi0JCW9zPS1kb21haW4KLQkJOzsKLQlpMzg2LXN1bikKLQkJb3M9LXN1bm9zNC4wLjIKLQkJOzsKLQltNjgwMDAtc3VuKQotCQlvcz0tc3Vub3MzCi0JCTs7Ci0JbTY4Ki1jaXNjbykKLQkJb3M9LWFvdXQKLQkJOzsKLQltZXAtKikKLQkJb3M9LWVsZgotCQk7OwotCW1pcHMqLWNpc2NvKQotCQlvcz0tZWxmCi0JCTs7Ci0JbWlwcyotKikKLQkJb3M9LWVsZgotCQk7OwotCW9yMzItKikKLQkJb3M9LWNvZmYKLQkJOzsKLQkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgotCQlvcz0tc3lzdjMKLQkJOzsKLQlzcGFyYy0qIHwgKi1zdW4pCi0JCW9zPS1zdW5vczQuMS4xCi0JCTs7Ci0JKi1iZSkKLQkJb3M9LWJlb3MKLQkJOzsKLQkqLWhhaWt1KQotCQlvcz0taGFpa3UKLQkJOzsKLQkqLWlibSkKLQkJb3M9LWFpeAotCQk7OwotCSota251dGgpCi0JCW9zPS1tbWl4d2FyZQotCQk7OwotCSotd2VjKQotCQlvcz0tcHJvZWxmCi0JCTs7Ci0JKi13aW5ib25kKQotCQlvcz0tcHJvZWxmCi0JCTs7Ci0JKi1va2kpCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQkqLWhwKQotCQlvcz0taHB1eAotCQk7OwotCSotaGl0YWNoaSkKLQkJb3M9LWhpdXgKLQkJOzsKLQlpODYwLSogfCAqLWF0dCB8ICotbmNyIHwgKi1hbHRvcyB8ICotbW90b3JvbGEgfCAqLWNvbnZlcmdlbnQpCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JKi1jYm0pCi0JCW9zPS1hbWlnYW9zCi0JCTs7Ci0JKi1kZykKLQkJb3M9LWRndXgKLQkJOzsKLQkqLWRvbHBoaW4pCi0JCW9zPS1zeXN2MwotCQk7OwotCW02OGstY2N1cikKLQkJb3M9LXJ0dQotCQk7OwotCW04OGstb21yb24qKQotCQlvcz0tbHVuYQotCQk7OwotCSotbmV4dCApCi0JCW9zPS1uZXh0c3RlcAotCQk7OwotCSotc2VxdWVudCkKLQkJb3M9LXB0eAotCQk7OwotCSotY3JkcykKLQkJb3M9LXVub3MKLQkJOzsKLQkqLW5zKQotCQlvcz0tZ2VuaXgKLQkJOzsKLQlpMzcwLSopCi0JCW9zPS1tdnMKLQkJOzsKLQkqLW5leHQpCi0JCW9zPS1uZXh0c3RlcDMKLQkJOzsKLQkqLWdvdWxkKQotCQlvcz0tc3lzdgotCQk7OwotCSotaGlnaGxldmVsKQotCQlvcz0tYnNkCi0JCTs7Ci0JKi1lbmNvcmUpCi0JCW9zPS1ic2QKLQkJOzsKLQkqLXNnaSkKLQkJb3M9LWlyaXgKLQkJOzsKLQkqLXNpZW1lbnMpCi0JCW9zPS1zeXN2NAotCQk7OwotCSotbWFzc2NvbXApCi0JCW9zPS1ydHUKLQkJOzsKLQlmMzBbMDFdLWZ1aml0c3UgfCBmNzAwLWZ1aml0c3UpCi0JCW9zPS11eHB2Ci0JCTs7Ci0JKi1yb202OGspCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JKi0qYnVnKQotCQlvcz0tY29mZgotCQk7OwotCSotYXBwbGUpCi0JCW9zPS1tYWNvcwotCQk7OwotCSotYXRhcmkqKQotCQlvcz0tbWludAotCQk7OwotCSopCi0JCW9zPS1ub25lCi0JCTs7Ci1lc2FjCi1maQotCi0jIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9zLCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQotIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNrIHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KLXZlbmRvcj11bmtub3duCi1jYXNlICRiYXNpY19tYWNoaW5lIGluCi0JKi11bmtub3duKQotCQljYXNlICRvcyBpbgotCQkJLXJpc2NpeCopCi0JCQkJdmVuZG9yPWFjb3JuCi0JCQkJOzsKLQkJCS1zdW5vcyopCi0JCQkJdmVuZG9yPXN1bgotCQkJCTs7Ci0JCQktY25rKnwtYWl4KikKLQkJCQl2ZW5kb3I9aWJtCi0JCQkJOzsKLQkJCS1iZW9zKikKLQkJCQl2ZW5kb3I9YmUKLQkJCQk7OwotCQkJLWhwdXgqKQotCQkJCXZlbmRvcj1ocAotCQkJCTs7Ci0JCQktbXBlaXgqKQotCQkJCXZlbmRvcj1ocAotCQkJCTs7Ci0JCQktaGl1eCopCi0JCQkJdmVuZG9yPWhpdGFjaGkKLQkJCQk7OwotCQkJLXVub3MqKQotCQkJCXZlbmRvcj1jcmRzCi0JCQkJOzsKLQkJCS1kZ3V4KikKLQkJCQl2ZW5kb3I9ZGcKLQkJCQk7OwotCQkJLWx1bmEqKQotCQkJCXZlbmRvcj1vbXJvbgotCQkJCTs7Ci0JCQktZ2VuaXgqKQotCQkJCXZlbmRvcj1ucwotCQkJCTs7Ci0JCQktbXZzKiB8IC1vcGVuZWQqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJLW9zNDAwKikKLQkJCQl2ZW5kb3I9aWJtCi0JCQkJOzsKLQkJCS1wdHgqKQotCQkJCXZlbmRvcj1zZXF1ZW50Ci0JCQkJOzsKLQkJCS10cGYqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC13aW5kaXNzKikKLQkJCQl2ZW5kb3I9d3JzCi0JCQkJOzsKLQkJCS1hdXgqKQotCQkJCXZlbmRvcj1hcHBsZQotCQkJCTs7Ci0JCQktaG1zKikKLQkJCQl2ZW5kb3I9aGl0YWNoaQotCQkJCTs7Ci0JCQktbXB3KiB8IC1tYWNvcyopCi0JCQkJdmVuZG9yPWFwcGxlCi0JCQkJOzsKLQkJCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCi0JCQkJdmVuZG9yPWF0YXJpCi0JCQkJOzsKLQkJCS12b3MqKQotCQkJCXZlbmRvcj1zdHJhdHVzCi0JCQkJOzsKLQkJZXNhYwotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICJzL3Vua25vd24vJHZlbmRvci8iYAotCQk7OwotZXNhYwotCi1lY2hvICRiYXNpY19tYWNoaW5lJG9zCi1leGl0Ci0KLSMgTG9jYWwgdmFyaWFibGVzOgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgotIyB0aW1lLXN0YW1wLWVuZDogIiciCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODRmOTBjNC4uMDAwMDAwMAotLS0gYS9jb25maWd1cmUKKysrIC9kZXYvbnVsbApAQCAtMSw0MDMxOSArMCwwIEBACi0jISAvYmluL3NoCi0jIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgR1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgMS4xMC40LgotIwotIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyPi4KLSMKLSMKLSMgQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIDE5OTgtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMKLSMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCi0gICpwb3NpeCopIDoKLSAgICBzZXQgLW8gcG9zaXggOzsgIygKLSAgKikgOgotICAgICA7OwotZXNhYwotZmkKLQotCi1hc19ubD0nCi0nCi1leHBvcnQgYXNfbmwKLSMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCi1hc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCi1hc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwotIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCi0jIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgotaWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAotICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCi0gIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJwotZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19lY2hvPSdwcmludGYgJXNcbicKLSAgYXNfZWNob19uPSdwcmludGYgJXMnCi1lbHNlCi0gIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgotICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCi0gICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJwotICBlbHNlCi0gICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKLSAgICBhc19lY2hvX25fYm9keT0nZXZhbAotICAgICAgYXJnPSQxOwotICAgICAgY2FzZSAkYXJnIGluICMoCi0gICAgICAqIiRhc19ubCIqKQotCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOwotCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7Ci0gICAgICBlc2FjOwotICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgotICAgICcKLSAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKLSAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJwotICBmaQotICBleHBvcnQgYXNfZWNob19ib2R5Ci0gIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKLWZpCi0KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgUEFUSF9TRVBBUkFUT1I9OgotICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7Ci0gICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKLSAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICB9Ci1maQotCi0KLSMgSUZTCi0jIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcwotIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCi0jIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKLSMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKLUlGUz0iICIiCSRhc19ubCIKLQotIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KLWFzX215c2VsZj0KLWNhc2UgJDAgaW4gIygoCi0gICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKLSAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICAgICA7OwotZXNhYwotIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCi1pZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCi0gIGFzX215c2VsZj0kMAotZmkKLWlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KLSAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKLSAgZXhpdCAxCi1maQotCi0jIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCi0jIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCi0jIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCi0jIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgotZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAotZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKLSAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Ci1kb25lCi1QUzE9JyQgJwotUFMyPSc+ICcKLVBTND0nKyAnCi0KLSMgTkxTIG51aXNhbmNlcy4KLUxDX0FMTD1DCi1leHBvcnQgTENfQUxMCi1MQU5HVUFHRT1DCi1leHBvcnQgTEFOR1VBR0UKLQotIyBDRFBBVEguCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLSMgVXNlIGEgcHJvcGVyIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGVuc3VyZSB3ZSBkb24ndCBmYWxsCi0gICMgaW50byBhbiBpbmZpbml0ZSBsb29wLCBjb250aW51b3VzbHkgcmUtZXhlY3V0aW5nIG91cnNlbHZlcy4KLSAgaWYgdGVzdCB4IiR7X2FzX2Nhbl9yZWV4ZWN9IiAhPSB4bm8gJiYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KLSAgICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjOwotICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCi0jIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbwotIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KLSMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KLUJBU0hfRU5WPS9kZXYvbnVsbAotRU5WPS9kZXYvbnVsbAotKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCi1jYXNlICQtIGluICMgKCgoKAotICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKLSAgKnYqICkgYXNfb3B0cz0tdiA7OwotICAqeCogKSBhc19vcHRzPS14IDs7Ci0gICogKSBhc19vcHRzPSA7OwotZXNhYwotZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KLSMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAotIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgotJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgotYXNfZm5fZXhpdCAyNTUKLSAgZmkKLSAgIyBXZSBkb24ndCB3YW50IHRoaXMgdG8gcHJvcGFnYXRlIHRvIG90aGVyIHN1YnByb2Nlc3Nlcy4KLSAgICAgICAgICB7IF9hc19jYW5fcmVleGVjPTsgdW5zZXQgX2FzX2Nhbl9yZWV4ZWM7fQotaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgotICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCi0gICpwb3NpeCopIDoKLSAgICBzZXQgLW8gcG9zaXggOzsgIygKLSAgKikgOgotICAgICA7OwotZXNhYwotZmkKLSIKLSAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KLWFzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQotYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Ci1hc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Ci1hc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9Ci0KLWV4aXRjb2RlPTAKLWFzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQotYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Ci1hc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQotYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KLWlmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKLQotZWxzZQotICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KLWZpCi10ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxCi10ZXN0IC14IC8gfHwgZXhpdCAxIgotICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTwotICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCi0gIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCi0gIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKLQotICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAotICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCi0gICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KLSAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICi0gICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKLSAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEKLXRlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgotICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgotICBhc19oYXZlX3JlcXVpcmVkPXllcwotZWxzZQotICBhc19oYXZlX3JlcXVpcmVkPW5vCi1maQotICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0KLWVsc2UKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotYXNfZm91bmQ9ZmFsc2UKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgYXNfZm91bmQ9OgotICBjYXNlICRhc19kaXIgaW4gIygKLQkgLyopCi0JICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgotCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQotCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCi0JCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLQkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgYnJlYWsgMgotZmkKLWZpCi0JICAgZG9uZTs7Ci0gICAgICAgZXNhYwotICBhc19mb3VuZD1mYWxzZQotZG9uZQotJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCi0JICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgotICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCi1maTsgfQotSUZTPSRhc19zYXZlX0lGUwotCi0KLSAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKLSAgZXhwb3J0IENPTkZJR19TSEVMTAotICAgICAgICAgICAgICMgV2UgY2Fubm90IHlldCBhc3N1bWUgYSBkZWNlbnQgc2hlbGwsIHNvIHdlIGhhdmUgdG8gcHJvdmlkZSBhCi0jIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbwotIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KLSMgUHJlc2VydmUgLXYgYW5kIC14IHRvIHRoZSByZXBsYWNlbWVudCBzaGVsbC4KLUJBU0hfRU5WPS9kZXYvbnVsbAotRU5WPS9kZXYvbnVsbAotKHVuc2V0IEJBU0hfRU5WKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQkFTSF9FTlYgRU5WCi1jYXNlICQtIGluICMgKCgoKAotICAqdip4KiB8ICp4KnYqICkgYXNfb3B0cz0tdnggOzsKLSAgKnYqICkgYXNfb3B0cz0tdiA7OwotICAqeCogKSBhc19vcHRzPS14IDs7Ci0gICogKSBhc19vcHRzPSA7OwotZXNhYwotZXhlYyAkQ09ORklHX1NIRUxMICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KLSMgQWRtaXR0ZWRseSwgdGhpcyBpcyBxdWl0ZSBwYXJhbm9pZCwgc2luY2UgYWxsIHRoZSBrbm93biBzaGVsbHMgYmFpbAotIyBvdXQgYWZ0ZXIgYSBmYWlsZWQgYGV4ZWMnLgotJGFzX2VjaG8gIiQwOiBjb3VsZCBub3QgcmUtZXhlY3V0ZSB3aXRoICRDT05GSUdfU0hFTEwiID4mMgotZXhpdCAyNTUKLWZpCi0KLSAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6Ci0gICRhc19lY2hvICIkMDogVGhpcyBzY3JpcHQgcmVxdWlyZXMgYSBzaGVsbCBtb3JlIG1vZGVybiB0aGFuIGFsbCIKLSAgJGFzX2VjaG8gIiQwOiB0aGUgc2hlbGxzIHRoYXQgSSBmb3VuZCBvbiB5b3VyIHN5c3RlbS4iCi0gIGlmIHRlc3QgeCR7WlNIX1ZFUlNJT04rc2V0fSA9IHhzZXQgOyB0aGVuCi0gICAgJGFzX2VjaG8gIiQwOiBJbiBwYXJ0aWN1bGFyLCB6c2ggJFpTSF9WRVJTSU9OIGhhcyBidWdzIGFuZCBzaG91bGQiCi0gICAgJGFzX2VjaG8gIiQwOiBiZSB1cGdyYWRlZCB0byB6c2ggNC4zLjQgb3IgbGF0ZXIuIgotICBlbHNlCi0gICAgJGFzX2VjaG8gIiQwOiBQbGVhc2UgdGVsbCBidWctYXV0b2NvbmZAZ251Lm9yZyBhbmQKLSQwOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXIKLSQwOiBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQKLSQwOiBiZWZvcmUgdGhpcyBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yCi0kMDogbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbwotJDA6IGhhdmUgb25lLiIKLSAgZmkKLSAgZXhpdCAxCi1maQotZmkKLWZpCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotZXhwb3J0IFNIRUxMCi0jIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KLUNMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Ci11bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyBhc19mbl91bnNldCBWQVIKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIFBvcnRhYmx5IHVuc2V0IFZBUi4KLWFzX2ZuX3Vuc2V0ICgpCi17Ci0gIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KLX0KLWFzX3Vuc2V0PWFzX2ZuX3Vuc2V0Ci0KLSMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgotYXNfZm5fc2V0X3N0YXR1cyAoKQotewotICByZXR1cm4gJDEKLX0gIyBhc19mbl9zZXRfc3RhdHVzCi0KLSMgYXNfZm5fZXhpdCBTVEFUVVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgotYXNfZm5fZXhpdCAoKQotewotICBzZXQgK2UKLSAgYXNfZm5fc2V0X3N0YXR1cyAkMQotICBleGl0ICQxCi19ICMgYXNfZm5fZXhpdAotCi0jIGFzX2ZuX21rZGlyX3AKLSMgLS0tLS0tLS0tLS0tLQotIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCi1hc19mbl9ta2Rpcl9wICgpCi17Ci0KLSAgY2FzZSAkYXNfZGlyIGluICMoCi0gIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKLSAgZXNhYwotICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIDo7IGRvCi0gICAgICBjYXNlICRhc19kaXIgaW4gIygKLSAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAotICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKLSAgICAgIGVzYWMKLSAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhawotICAgIGRvbmUKLSAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCi0gIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCi0KLQotfSAjIGFzX2ZuX21rZGlyX3AKLQotIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCi1hc19mbl9leGVjdXRhYmxlX3AgKCkKLXsKLSAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgotfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAotIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQotIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCi0jIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCi0jIGltcGxlbWVudGF0aW9ucy4KLWlmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCi0gIHsKLSAgICBldmFsICQxKz1cJDIKLSAgfScKLWVsc2UKLSAgYXNfZm5fYXBwZW5kICgpCi0gIHsKLSAgICBldmFsICQxPVwkJDFcJDIKLSAgfQotZmkgIyBhc19mbl9hcHBlbmQKLQotIyBhc19mbl9hcml0aCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKLSMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cwotIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KLWlmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgotICBldmFsICdhc19mbl9hcml0aCAoKQotICB7Ci0gICAgYXNfdmFsPSQoKCAkKiApKQotICB9JwotZWxzZQotICBhc19mbl9hcml0aCAoKQotICB7Ci0gICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKLSAgfQotZmkgIyBhc19mbl9hcml0aAotCi0KLSMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQotIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCi0jIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgotYXNfZm5fZXJyb3IgKCkKLXsKLSAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKLSAgaWYgdGVzdCAiJDQiOyB0aGVuCi0gICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgotICBhc19mbl9leGl0ICRhc19zdGF0dXMKLX0gIyBhc19mbl9lcnJvcgotCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KLWlmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KLSAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKLWVsc2UKLSAgYXNfYmFzZW5hbWU9ZmFsc2UKLWZpCi0KLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19kaXJuYW1lPWRpcm5hbWUKLWVsc2UKLSAgYXNfZGlybmFtZT1mYWxzZQotZmkKLQotYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Ci0kYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTwotICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKLSAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgewotICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkIC1uICcKLSAgICBwCi0gICAgL1skXUxJTkVOTy89Ci0gICcgPCRhc19teXNlbGYgfAotICAgIHNlZCAnCi0gICAgICBzL1skXUxJTkVOTy4qLyYtLwotICAgICAgdCBsaW5lbm8KLSAgICAgIGIKLSAgICAgIDpsaW5lbm8KLSAgICAgIE4KLSAgICAgIDpsb29wCi0gICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KLSAgICAgIHQgbG9vcAotICAgICAgcy8tXG4uKi8vCi0gICAgJyA+JGFzX21lLmxpbmVubyAmJgotICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KLQotICAjIElmIHdlIGhhZCB0byByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCwgd2UncmUgZW5zdXJlZCB0byBoYXZlCi0gICMgYWxyZWFkeSBkb25lIHRoYXQsIHNvIGVuc3VyZSB3ZSBkb24ndCB0cnkgdG8gZG8gc28gYWdhaW4gYW5kIGZhbGwKLSAgIyBpbiBhbiBpbmZpbml0ZSBsb29wLiAgVGhpcyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBpbiBwcmFjdGljZS4KLSAgX2FzX2Nhbl9yZWV4ZWM9bm87IGV4cG9ydCBfYXNfY2FuX3JlZXhlYwotICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwotICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KLSAgLiAiLi8kYXNfbWUubGluZW5vIgotICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KLSAgZXhpdAotfQotCi1FQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQotY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKLS1uKikKLSAgY2FzZSBgZWNobyAneHlcYydgIGluCi0gICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgotICB4eSkgIEVDSE9fQz0nXGMnOzsKLSAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAotICAgICAgIEVDSE9fVD0nCSc7OwotICBlc2FjOzsKLSopCi0gIEVDSE9fTj0nLW4nOzsKLWVzYWMKLQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLWlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgotICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCi1lbHNlCi0gIHJtIC1mIGNvbmYkJC5kaXIKLSAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAotZmkKLWlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KLSAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgYXNfbG5fcz0nbG4gLXMnCi0gICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKLSAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgotICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgotICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgotICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKLSAgICAgIGFzX2xuX3M9J2NwIC1wUicKLSAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgICBhc19sbl9zPWxuCi0gIGVsc2UKLSAgICBhc19sbl9zPSdjcCAtcFInCi0gIGZpCi1lbHNlCi0gIGFzX2xuX3M9J2NwIC1wUicKLWZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCi1ybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCi0KLWlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD0nbWtkaXIgLXAgIiRhc19kaXIiJwotZWxzZQotICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAotICBhc19ta2Rpcl9wPWZhbHNlCi1maQotCi1hc190ZXN0X3g9J3Rlc3QgLXgnCi1hc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KLWFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgotYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKLQotU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KLQotCi10ZXN0IC1uICIkREpESVIiIHx8IGV4ZWMgNzwmMCA8L2Rldi9udWxsCi1leGVjIDY+JjEKLQotIyBOYW1lIG9mIHRoZSBob3N0LgotIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAotIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCi1hY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKLQotIwotIyBJbml0aWFsaXphdGlvbnMuCi0jCi1hY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCi1hY19jbGVhbl9maWxlcz0KLWFjX2NvbmZpZ19saWJvYmpfZGlyPS4KLUxJQk9CSlM9Ci1jcm9zc19jb21waWxpbmc9bm8KLXN1YmRpcnM9Ci1NRkxBR1M9Ci1NQUtFRkxBR1M9Ci0KLSMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgotUEFDS0FHRV9OQU1FPSdHU3RyZWFtZXIgR29vZCBQbHVnLWlucycKLVBBQ0tBR0VfVEFSTkFNRT0nZ3N0LXBsdWdpbnMtZ29vZCcKLVBBQ0tBR0VfVkVSU0lPTj0nMS4xMC40JwotUEFDS0FHRV9TVFJJTkc9J0dTdHJlYW1lciBHb29kIFBsdWctaW5zIDEuMTAuNCcKLVBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXInCi1QQUNLQUdFX1VSTD0nJwotCi1hY191bmlxdWVfZmlsZT0iZ3N0L2xhdy9hbGF3LmMiCi0jIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCi1hY19pbmNsdWRlc19kZWZhdWx0PSJcCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX1NZU19UWVBFU19ICi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jIGluY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBTVERDX0hFQURFUlMKLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0jIGluY2x1ZGUgPHN0ZGRlZi5oPgotI2Vsc2UKLSMgaWZkZWYgSEFWRV9TVERMSUJfSAotIyAgaW5jbHVkZSA8c3RkbGliLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NUUklOR19ICi0jIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKLSMgIGluY2x1ZGUgPG1lbW9yeS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1RSSU5HU19ICi0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAotIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TVERJTlRfSAotIyBpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYiCi0KLWd0X25lZWRzPQotYWNfaGVhZGVyX2xpc3Q9Ci1hY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCi1hbV9fRVhFRVhUX1RSVUUKLUxUTElCT0JKUwotTElCT0JKUwotR1NUX1BMVUdJTl9MREZMQUdTCi1HU1RfQUxMX0xERkxBR1MKLUdTVF9PQkpDRkxBR1MKLUdTVF9DWFhGTEFHUwotR1NUX09QVElPTl9PQkpDRkxBR1MKLUdTVF9PUFRJT05fQ1hYRkxBR1MKLUdTVF9PUFRJT05fQ0ZMQUdTCi1ERVBSRUNBVEVEX0NGTEFHUwotUFJPRklMRV9DRkxBR1MKLVVTRV9CWjJfRkFMU0UKLVVTRV9CWjJfVFJVRQotQloyX0xJQlMKLVVTRV9aTElCX0ZBTFNFCi1VU0VfWkxJQl9UUlVFCi1IQVZFX1pMSUIKLVpMSUJfTElCUwotVVNFX1dBVlBBQ0tfRkFMU0UKLVVTRV9XQVZQQUNLX1RSVUUKLVdBVlBBQ0tfTElCUwotV0FWUEFDS19DRkxBR1MKLVVTRV9WUFhfRkFMU0UKLVVTRV9WUFhfVFJVRQotVlBYXzE0MF9MSUJTCi1WUFhfMTQwX0NGTEFHUwotVlBYXzEzMF9MSUJTCi1WUFhfMTMwX0NGTEFHUwotVlBYX0xJQlMKLVZQWF9DRkxBR1MKLVVTRV9UQUdMSUJfRkFMU0UKLVVTRV9UQUdMSUJfVFJVRQotVEFHTElCX0NYWEZMQUdTCi1UQUdMSUJfTElCUwotVEFHTElCX0NGTEFHUwotVVNFX1NQRUVYX0ZBTFNFCi1VU0VfU1BFRVhfVFJVRQotU1BFRVhfTElCUwotU1BFRVhfQ0ZMQUdTCi1VU0VfU09VUF9GQUxTRQotVVNFX1NPVVBfVFJVRQotU09VUF9MSUJTCi1TT1VQX0NGTEFHUwotVVNFX1NIT1VUMl9GQUxTRQotVVNFX1NIT1VUMl9UUlVFCi1TSE9VVDJfTElCUwotU0hPVVQyX0NGTEFHUwotVVNFX0xJQklFQzYxODgzX0ZBTFNFCi1VU0VfTElCSUVDNjE4ODNfVFJVRQotVVNFX0RWMTM5NF9GQUxTRQotVVNFX0RWMTM5NF9UUlVFCi1EVjEzOTRfTElCUwotRFYxMzk0X0NGTEFHUwotSEFWRV9ST00xMzk0Ci1IQVZFX0FWQzEzOTQKLUxJQklFQzYxODgzX0xJQlMKLUxJQklFQzYxODgzX0NGTEFHUwotUkFXMTM5NF9MSUJTCi1SQVcxMzk0X0NGTEFHUwotVVNFX1BVTFNFX0ZBTFNFCi1VU0VfUFVMU0VfVFJVRQotUFVMU0VfTElCUwotUFVMU0VfQ0ZMQUdTCi1VU0VfTElCUE5HX0ZBTFNFCi1VU0VfTElCUE5HX1RSVUUKLUxJQlBOR19MSUJTCi1MSUJQTkdfQ0ZMQUdTCi1VU0VfTElCRFZfRkFMU0UKLVVTRV9MSUJEVl9UUlVFCi1MSUJEVl9MSUJTCi1MSUJEVl9DRkxBR1MKLVVTRV9MSUJDQUNBX0ZBTFNFCi1VU0VfTElCQ0FDQV9UUlVFCi1MSUJDQUNBX0xJQlMKLUxJQkNBQ0FfQ0ZMQUdTCi1VU0VfSlBFR19GQUxTRQotVVNFX0pQRUdfVFJVRQotSlBFR19MSUJTCi1VU0VfSkFDS19GQUxTRQotVVNFX0pBQ0tfVFJVRQotSkFDS18xXzlfN19MSUJTCi1KQUNLXzFfOV83X0NGTEFHUwotSkFDS18wXzEyMF8xX0xJQlMKLUpBQ0tfMF8xMjBfMV9DRkxBR1MKLUpBQ0tfTElCUwotSkFDS19DRkxBR1MKLVVTRV9HREtfUElYQlVGX0ZBTFNFCi1VU0VfR0RLX1BJWEJVRl9UUlVFCi1HREtfUElYQlVGX0xJQlMKLUdES19QSVhCVUZfQ0ZMQUdTCi1VU0VfRkxBQ19GQUxTRQotVVNFX0ZMQUNfVFJVRQotRkxBQ19MSUJTCi1GTEFDX0NGTEFHUwotVVNFX0NBSVJPX0ZBTFNFCi1VU0VfQ0FJUk9fVFJVRQotQ0FJUk9fTElCUwotQ0FJUk9fQ0ZMQUdTCi1VU0VfQUFMSUJfRkFMU0UKLVVTRV9BQUxJQl9UUlVFCi1BQUxJQl9MSUJTCi1BQUxJQl9DRkxBR1MKLUFBTElCX0NPTkZJRwotVVNFX1hfRkFMU0UKLVVTRV9YX1RSVUUKLVhTSE1fQ0ZMQUdTCi1YU0hNX0xJQlMKLVhFWFRfTElCUwotWEVYVF9DRkxBR1MKLVhEQU1BR0VfTElCUwotWERBTUFHRV9DRkxBR1MKLVhGSVhFU19MSUJTCi1YRklYRVNfQ0ZMQUdTCi1YX0xJQlMKLVhfQ0ZMQUdTCi1MSUJWNEwyX0xJQlMKLUxJQlY0TDJfQ0ZMQUdTCi1HVURFVl9MSUJTCi1HVURFVl9DRkxBR1MKLVVTRV9HU1RfVjRMMl9GQUxTRQotVVNFX0dTVF9WNEwyX1RSVUUKLVVTRV9PU1hfVklERU9fRkFMU0UKLVVTRV9PU1hfVklERU9fVFJVRQotSEFWRV9JT1NfRkFMU0UKLUhBVkVfSU9TX1RSVUUKLVVTRV9PU1hfQVVESU9fRkFMU0UKLVVTRV9PU1hfQVVESU9fVFJVRQotVVNFX1NVTkFVRElPX0ZBTFNFCi1VU0VfU1VOQVVESU9fVFJVRQotVVNFX09TUzRfRkFMU0UKLVVTRV9PU1M0X1RSVUUKLVVTRV9PU1NfRkFMU0UKLVVTRV9PU1NfVFJVRQotVVNFX1dBVkVGT1JNX0ZBTFNFCi1VU0VfV0FWRUZPUk1fVFJVRQotVVNFX0RJUkVDVFNPVU5EX0ZBTFNFCi1VU0VfRElSRUNUU09VTkRfVFJVRQotSEFWRV9ESVJFQ1RTT1VORAotRElSRUNUU09VTkRfTElCUwotRElSRUNUU09VTkRfTERGTEFHUwotRElSRUNUU09VTkRfQ0ZMQUdTCi1VU0VfUExVR0lOX1k0TV9GQUxTRQotVVNFX1BMVUdJTl9ZNE1fVFJVRQotVVNFX1BMVUdJTl9XQVZQQVJTRV9GQUxTRQotVVNFX1BMVUdJTl9XQVZQQVJTRV9UUlVFCi1VU0VfUExVR0lOX1dBVkVOQ19GQUxTRQotVVNFX1BMVUdJTl9XQVZFTkNfVFJVRQotVVNFX1BMVUdJTl9WSURFT01JWEVSX0ZBTFNFCi1VU0VfUExVR0lOX1ZJREVPTUlYRVJfVFJVRQotVVNFX1BMVUdJTl9WSURFT0ZJTFRFUl9GQUxTRQotVVNFX1BMVUdJTl9WSURFT0ZJTFRFUl9UUlVFCi1VU0VfUExVR0lOX1ZJREVPQ1JPUF9GQUxTRQotVVNFX1BMVUdJTl9WSURFT0NST1BfVFJVRQotVVNFX1BMVUdJTl9WSURFT0JPWF9GQUxTRQotVVNFX1BMVUdJTl9WSURFT0JPWF9UUlVFCi1VU0VfUExVR0lOX1VEUF9GQUxTRQotVVNFX1BMVUdJTl9VRFBfVFJVRQotVVNFX1BMVUdJTl9TUEVDVFJVTV9GQUxTRQotVVNFX1BMVUdJTl9TUEVDVFJVTV9UUlVFCi1VU0VfUExVR0lOX1NNUFRFX0ZBTFNFCi1VU0VfUExVR0lOX1NNUFRFX1RSVUUKLVVTRV9QTFVHSU5fU0hBUEVXSVBFX0ZBTFNFCi1VU0VfUExVR0lOX1NIQVBFV0lQRV9UUlVFCi1VU0VfUExVR0lOX1JUU1BfRkFMU0UKLVVTRV9QTFVHSU5fUlRTUF9UUlVFCi1VU0VfUExVR0lOX1JUUE1BTkFHRVJfRkFMU0UKLVVTRV9QTFVHSU5fUlRQTUFOQUdFUl9UUlVFCi1VU0VfUExVR0lOX1JUUF9GQUxTRQotVVNFX1BMVUdJTl9SVFBfVFJVRQotVVNFX1BMVUdJTl9SRVBMQVlHQUlOX0ZBTFNFCi1VU0VfUExVR0lOX1JFUExBWUdBSU5fVFJVRQotVVNFX1BMVUdJTl9NVUxUSVBBUlRfRkFMU0UKLVVTRV9QTFVHSU5fTVVMVElQQVJUX1RSVUUKLVVTRV9QTFVHSU5fTVVMVElGSUxFX0ZBTFNFCi1VU0VfUExVR0lOX01VTFRJRklMRV9UUlVFCi1VU0VfUExVR0lOX01PTk9TQ09QRV9GQUxTRQotVVNFX1BMVUdJTl9NT05PU0NPUEVfVFJVRQotVVNFX1BMVUdJTl9NQVRST1NLQV9GQUxTRQotVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFCi1VU0VfUExVR0lOX0xFVkVMX0ZBTFNFCi1VU0VfUExVR0lOX0xFVkVMX1RSVUUKLVVTRV9QTFVHSU5fTEFXX0ZBTFNFCi1VU0VfUExVR0lOX0xBV19UUlVFCi1VU0VfUExVR0lOX0lTT01QNF9GQUxTRQotVVNFX1BMVUdJTl9JU09NUDRfVFJVRQotVVNFX1BMVUdJTl9JTlRFUkxFQVZFX0ZBTFNFCi1VU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRQotVVNFX1BMVUdJTl9JTUFHRUZSRUVaRV9GQUxTRQotVVNFX1BMVUdJTl9JTUFHRUZSRUVaRV9UUlVFCi1VU0VfUExVR0lOX0lEM0RFTVVYX0ZBTFNFCi1VU0VfUExVR0lOX0lEM0RFTVVYX1RSVUUKLVVTRV9QTFVHSU5fSUNZREVNVVhfRkFMU0UKLVVTRV9QTFVHSU5fSUNZREVNVVhfVFJVRQotVVNFX1BMVUdJTl9HT09NMksxX0ZBTFNFCi1VU0VfUExVR0lOX0dPT00ySzFfVFJVRQotVVNFX1BMVUdJTl9HT09NX0ZBTFNFCi1VU0VfUExVR0lOX0dPT01fVFJVRQotVVNFX1BMVUdJTl9GTFhfRkFMU0UKLVVTRV9QTFVHSU5fRkxYX1RSVUUKLVVTRV9QTFVHSU5fRkxWX0ZBTFNFCi1VU0VfUExVR0lOX0ZMVl9UUlVFCi1VU0VfUExVR0lOX0VRVUFMSVpFUl9GQUxTRQotVVNFX1BMVUdJTl9FUVVBTElaRVJfVFJVRQotVVNFX1BMVUdJTl9FRkZFQ1RWX0ZBTFNFCi1VU0VfUExVR0lOX0VGRkVDVFZfVFJVRQotVVNFX1BMVUdJTl9EVE1GX0ZBTFNFCi1VU0VfUExVR0lOX0RUTUZfVFJVRQotVVNFX1BMVUdJTl9ERUlOVEVSTEFDRV9GQUxTRQotVVNFX1BMVUdJTl9ERUlOVEVSTEFDRV9UUlVFCi1VU0VfUExVR0lOX0RFQlVHVVRJTFNfRkFMU0UKLVVTRV9QTFVHSU5fREVCVUdVVElMU19UUlVFCi1VU0VfUExVR0lOX0NVVFRFUl9GQUxTRQotVVNFX1BMVUdJTl9DVVRURVJfVFJVRQotVVNFX1BMVUdJTl9BVklfRkFMU0UKLVVTRV9QTFVHSU5fQVZJX1RSVUUKLVVTRV9QTFVHSU5fQVVUT0RFVEVDVF9GQUxTRQotVVNFX1BMVUdJTl9BVVRPREVURUNUX1RSVUUKLVVTRV9QTFVHSU5fQVVQQVJTRV9GQUxTRQotVVNFX1BMVUdJTl9BVVBBUlNFX1RSVUUKLVVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX0ZBTFNFCi1VU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFCi1VU0VfUExVR0lOX0FVRElPRlhfRkFMU0UKLVVTRV9QTFVHSU5fQVVESU9GWF9UUlVFCi1VU0VfUExVR0lOX0FQRVRBR19GQUxTRQotVVNFX1BMVUdJTl9BUEVUQUdfVFJVRQotVVNFX1BMVUdJTl9BTFBIQV9GQUxTRQotVVNFX1BMVUdJTl9BTFBIQV9UUlVFCi1ERUZBVUxUX1ZJU1VBTElaRVIKLURFRkFVTFRfVklERU9TUkMKLURFRkFVTFRfVklERU9TSU5LCi1ERUZBVUxUX0FVRElPU1JDCi1ERUZBVUxUX0FVRElPU0lOSwotR1NUX0xFVkVMX0RFRkFVTFQKLUVSUk9SX09CSkNGTEFHUwotV0FSTklOR19PQkpDRkxBR1MKLUVSUk9SX0NYWEZMQUdTCi1XQVJOSU5HX0NYWEZMQUdTCi1FUlJPUl9DRkxBR1MKLVdBUk5JTkdfQ0ZMQUdTCi1HU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19GQUxTRQotR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUNfVFJVRQotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MKLXBsdWdpbmRpcgotUExVR0lORElSCi1HU1RfTElDRU5TRQotSEFWRV9HVEtfWDExX0ZBTFNFCi1IQVZFX0dUS19YMTFfVFJVRQotSEFWRV9HVEtfRkFMU0UKLUhBVkVfR1RLX1RSVUUKLUdUS19YMTFfTElCUwotR1RLX1gxMV9DRkxBR1MKLUdUS19MSUJTCi1HVEtfQ0ZMQUdTCi1HU1RQQl9QUkVGSVgKLUdTVF9QUkVGSVgKLUdMSUJfUFJFRklYCi1IQVZFX0dTVF9DSEVDS19GQUxTRQotSEFWRV9HU1RfQ0hFQ0tfVFJVRQotR1NUUEJfUExVR0lOU19ESVIKLUdTVF9QTFVHSU5TX0JBU0VfRElSCi1HU1RfUExVR0lOU19CQVNFX0xJQlMKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTCi1HU1RfQ0hFQ0tfTElCUwotR1NUX0NIRUNLX0NGTEFHUwotR1NUX05FVF9MSUJTCi1HU1RfTkVUX0NGTEFHUwotR1NUX0NPTlRST0xMRVJfTElCUwotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTCi1HU1RfQkFTRV9MSUJTCi1HU1RfQkFTRV9DRkxBR1MKLUdTVF9QTFVHSU5TX0RJUgotR1NUX1RPT0xTX0RJUgotR1NUX0xJQlMKLUdTVF9DRkxBR1MKLUhBVkVfT1JDQ19GQUxTRQotSEFWRV9PUkNDX1RSVUUKLUhBVkVfT1JDX0ZBTFNFCi1IQVZFX09SQ19UUlVFCi1PUkNDX0ZMQUdTCi1PUkNDCi1PUkNfTElCUwotT1JDX0NGTEFHUwotR0lPX0xERkxBR1MKLUdJT19MSUJTCi1HSU9fQ0ZMQUdTCi1HTElCX0VYVFJBX0NGTEFHUwotR0xJQl9NS0VOVU1TCi1HTElCX0dFTk1BUlNIQUwKLUdMSUJfTElCUwotR0xJQl9DRkxBR1MKLUdMSUJfUkVRCi1HU1RfSEFWRV9NTUFQX0ZBTFNFCi1HU1RfSEFWRV9NTUFQX1RSVUUKLUhBVkVfR0NDX0FTTV9GQUxTRQotSEFWRV9HQ0NfQVNNX1RSVUUKLVBUSFJFQURfQ0ZMQUdTCi1QVEhSRUFEX0xJQlMKLVBUSFJFQURfQ0MKLWF4X3B0aHJlYWRfY29uZmlnCi1MSUJSVAotTElCTQotRU5BQkxFX1BMVUdJTl9ET0NTX0ZBTFNFCi1FTkFCTEVfUExVR0lOX0RPQ1NfVFJVRQotcGtncHlleGVjZGlyCi1weWV4ZWNkaXIKLXBrZ3B5dGhvbmRpcgotcHl0aG9uZGlyCi1QWVRIT05fUExBVEZPUk0KLVBZVEhPTl9FWEVDX1BSRUZJWAotUFlUSE9OX1BSRUZJWAotUFlUSE9OX1ZFUlNJT04KLVBZVEhPTgotR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRQotR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFCi1HVEtfRE9DX0JVSUxEX1BERl9GQUxTRQotR1RLX0RPQ19CVUlMRF9QREZfVFJVRQotR1RLX0RPQ19CVUlMRF9IVE1MX0ZBTFNFCi1HVEtfRE9DX0JVSUxEX0hUTUxfVFJVRQotRU5BQkxFX0dUS19ET0NfRkFMU0UKLUVOQUJMRV9HVEtfRE9DX1RSVUUKLUdUS0RPQ19ERVBTX0xJQlMKLUdUS0RPQ19ERVBTX0NGTEFHUwotSFRNTF9ESVIKLUdUS0RPQ19NS1BERgotR1RLRE9DX1JFQkFTRQotR1RLRE9DX0NIRUNLCi1IQVZFX1ZBTEdSSU5EX0ZBTFNFCi1IQVZFX1ZBTEdSSU5EX1RSVUUKLVZBTEdSSU5EX1BBVEgKLWFtX19mYXN0ZGVwQ0NBU19GQUxTRQotYW1fX2Zhc3RkZXBDQ0FTX1RSVUUKLUNDQVNERVBNT0RFCi1DQ0FTCi1hbV9fZmFzdGRlcE9CSkNfRkFMU0UKLWFtX19mYXN0ZGVwT0JKQ19UUlVFCi1PQkpDREVQTU9ERQotYWNfY3RfT0JKQwotT0JKQ0ZMQUdTCi1PQkpDCi1IQVZFX0NYWAotQ1hYQ1BQCi1hbV9fZmFzdGRlcENYWF9GQUxTRQotYW1fX2Zhc3RkZXBDWFhfVFJVRQotQ1hYREVQTU9ERQotYWNfY3RfQ1hYCi1DWFgKLUhBVkVfQ1BVX0NSSVNWMzJfRkFMU0UKLUhBVkVfQ1BVX0NSSVNWMzJfVFJVRQotSEFWRV9DUFVfQ1JJU19GQUxTRQotSEFWRV9DUFVfQ1JJU19UUlVFCi1IQVZFX0NQVV9YODZfNjRfRkFMU0UKLUhBVkVfQ1BVX1g4Nl82NF9UUlVFCi1IQVZFX0NQVV9NNjhLX0ZBTFNFCi1IQVZFX0NQVV9NNjhLX1RSVUUKLUhBVkVfQ1BVX0lBNjRfRkFMU0UKLUhBVkVfQ1BVX0lBNjRfVFJVRQotSEFWRV9DUFVfUzM5MF9GQUxTRQotSEFWRV9DUFVfUzM5MF9UUlVFCi1IQVZFX0NQVV9NSVBTX0ZBTFNFCi1IQVZFX0NQVV9NSVBTX1RSVUUKLUhBVkVfQ1BVX0hQUEFfRkFMU0UKLUhBVkVfQ1BVX0hQUEFfVFJVRQotSEFWRV9DUFVfU1BBUkNfRkFMU0UKLUhBVkVfQ1BVX1NQQVJDX1RSVUUKLUhBVkVfQ1BVX0FSTV9GQUxTRQotSEFWRV9DUFVfQVJNX1RSVUUKLUhBVkVfQ1BVX0FSQ19GQUxTRQotSEFWRV9DUFVfQVJDX1RSVUUKLUhBVkVfQ1BVX0FMUEhBX0ZBTFNFCi1IQVZFX0NQVV9BTFBIQV9UUlVFCi1IQVZFX0NQVV9QUEM2NF9GQUxTRQotSEFWRV9DUFVfUFBDNjRfVFJVRQotSEFWRV9DUFVfUFBDX0ZBTFNFCi1IQVZFX0NQVV9QUENfVFJVRQotSEFWRV9DUFVfSTM4Nl9GQUxTRQotSEFWRV9DUFVfSTM4Nl9UUlVFCi1HU1RfUEtHX0NPTkZJR19QQVRICi1CVUlMRF9FWFBFUklNRU5UQUxfRkFMU0UKLUJVSUxEX0VYUEVSSU1FTlRBTF9UUlVFCi1VU0VfRVhQRVJJTUVOVEFMX0ZBTFNFCi1VU0VfRVhQRVJJTUVOVEFMX1RSVUUKLUJVSUxEX0VYVEVSTkFMX0ZBTFNFCi1CVUlMRF9FWFRFUk5BTF9UUlVFCi1VU0VfRVhURVJOQUxfRkFMU0UKLVVTRV9FWFRFUk5BTF9UUlVFCi1HU1RfUExVR0lOU19OT05QT1JURUQKLUdTVF9QTFVHSU5TX1NFTEVDVEVECi1HU1RfUExVR0lOU19BTEwKLUdTVF9QQUNLQUdFX09SSUdJTgotR1NUX1BBQ0tBR0VfTkFNRQotQlVJTERfRVhBTVBMRVNfRkFMU0UKLUJVSUxEX0VYQU1QTEVTX1RSVUUKLUdTVF9HQ09WX0VOQUJMRURfRkFMU0UKLUdTVF9HQ09WX0VOQUJMRURfVFJVRQotQ0NBU0ZMQUdTCi1GRkxBR1MKLUNYWEZMQUdTCi1HQ09WCi1HQ09WX0xJQlMKLUdDT1ZfQ0ZMQUdTCi1WQUxHUklORF9MSUJTCi1WQUxHUklORF9DRkxBR1MKLVBLR19DT05GSUcKLUxPQ0FMRURJUgotR0VUVEVYVF9QQUNLQUdFCi1QT1NVQgotTFRMSUJJTlRMCi1MSUJJTlRMCi1JTlRMTElCUwotTFRMSUJJQ09OVgotTElCSUNPTlYKLUlOVExfTUFDT1NYX0xJQlMKLVhHRVRURVhUX0VYVFJBX09QVElPTlMKLU1TR01FUkdFCi1YR0VUVEVYVF8wMTUKLVhHRVRURVhUCi1HTVNHRk1UXzAxNQotTVNHRk1UXzAxNQotR01TR0ZNVAotTVNHRk1UCi1HRVRURVhUX01BQ1JPX1ZFUlNJT04KLVVTRV9OTFMKLUFDTE9DQUxfQU1GTEFHUwotQ1BQCi1MVF9TWVNfTElCUkFSWV9QQVRICi1PVE9PTDY0Ci1PVE9PTAotTElQTwotTk1FRElUCi1EU1lNVVRJTAotTUFOSUZFU1RfVE9PTAotUkFOTElCCi1hY19jdF9BUgotQVIKLUxOX1MKLU5NCi1hY19jdF9EVU1QQklOCi1EVU1QQklOCi1MRAotRkdSRVAKLUVHUkVQCi1HUkVQCi1TRUQKLWFtX19mYXN0ZGVwQ0NfRkFMU0UKLWFtX19mYXN0ZGVwQ0NfVFJVRQotQ0NERVBNT0RFCi1hbV9fbm9kZXAKLUFNREVQQkFDS1NMQVNICi1BTURFUF9GQUxTRQotQU1ERVBfVFJVRQotYW1fX3F1b3RlCi1hbV9faW5jbHVkZQotREVQRElSCi1PQkpFWFQKLUVYRUVYVAotYWNfY3RfQ0MKLUNQUEZMQUdTCi1MREZMQUdTCi1DRkxBR1MKLUNDCi1MSUJUT09MCi1PQkpEVU1QCi1ETExUT09MCi1BUwotR1NUX0xUX0xERkxBR1MKLUdTVF9MSUJWRVJTSU9OCi1HU1RfQUdFCi1HU1RfUkVWSVNJT04KLUdTVF9DVVJSRU5UCi1HU1RfQVBJX1ZFUlNJT04KLU1BSU5UCi1NQUlOVEFJTkVSX01PREVfRkFMU0UKLU1BSU5UQUlORVJfTU9ERV9UUlVFCi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRQotUEFDS0FHRV9WRVJTSU9OX05BTk8KLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTwotUEFDS0FHRV9WRVJTSU9OX01JTk9SCi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IKLUFNX0JBQ0tTTEFTSAotQU1fREVGQVVMVF9WRVJCT1NJVFkKLUFNX0RFRkFVTFRfVgotQU1fVgotYW1fX3VudGFyCi1hbV9fdGFyCi1BTVRBUgotYW1fX2xlYWRpbmdfZG90Ci1TRVRfTUFLRQotQVdLCi1ta2Rpcl9wCi1NS0RJUl9QCi1JTlNUQUxMX1NUUklQX1BST0dSQU0KLVNUUklQCi1pbnN0YWxsX3NoCi1NQUtFSU5GTwotQVVUT0hFQURFUgotQVVUT01BS0UKLUFVVE9DT05GCi1BQ0xPQ0FMCi1WRVJTSU9OCi1QQUNLQUdFCi1DWUdQQVRIX1cKLWFtX19pc3JjCi1JTlNUQUxMX0RBVEEKLUlOU1RBTExfU0NSSVBUCi1JTlNUQUxMX1BST0dSQU0KLXRhcmdldF9vcwotdGFyZ2V0X3ZlbmRvcgotdGFyZ2V0X2NwdQotdGFyZ2V0Ci1ob3N0X29zCi1ob3N0X3ZlbmRvcgotaG9zdF9jcHUKLWhvc3QKLWJ1aWxkX29zCi1idWlsZF92ZW5kb3IKLWJ1aWxkX2NwdQotYnVpbGQKLXRhcmdldF9hbGlhcwotaG9zdF9hbGlhcwotYnVpbGRfYWxpYXMKLUxJQlMKLUVDSE9fVAotRUNIT19OCi1FQ0hPX0MKLURFRlMKLW1hbmRpcgotbG9jYWxlZGlyCi1saWJkaXIKLXBzZGlyCi1wZGZkaXIKLWR2aWRpcgotaHRtbGRpcgotaW5mb2RpcgotZG9jZGlyCi1vbGRpbmNsdWRlZGlyCi1pbmNsdWRlZGlyCi1ydW5zdGF0ZWRpcgotbG9jYWxzdGF0ZWRpcgotc2hhcmVkc3RhdGVkaXIKLXN5c2NvbmZkaXIKLWRhdGFkaXIKLWRhdGFyb290ZGlyCi1saWJleGVjZGlyCi1zYmluZGlyCi1iaW5kaXIKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUKLXByZWZpeAotZXhlY19wcmVmaXgKLVBBQ0tBR0VfVVJMCi1QQUNLQUdFX0JVR1JFUE9SVAotUEFDS0FHRV9TVFJJTkcKLVBBQ0tBR0VfVkVSU0lPTgotUEFDS0FHRV9UQVJOQU1FCi1QQUNLQUdFX05BTUUKLVBBVEhfU0VQQVJBVE9SCi1TSEVMTCcKLWFjX3N1YnN0X2ZpbGVzPScnCi1hY191c2VyX29wdHM9JwotZW5hYmxlX29wdGlvbl9jaGVja2luZwotZW5hYmxlX3NpbGVudF9ydWxlcwotZW5hYmxlX21haW50YWluZXJfbW9kZQotZW5hYmxlX3N0YXRpYwotZW5hYmxlX3NoYXJlZAotd2l0aF9waWMKLWVuYWJsZV9mYXN0X2luc3RhbGwKLXdpdGhfYWl4X3NvbmFtZQotZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmcKLXdpdGhfZ251X2xkCi13aXRoX3N5c3Jvb3QKLWVuYWJsZV9saWJ0b29sX2xvY2sKLXdpdGhfYXV0b2NvbmYKLXdpdGhfYXV0b2hlYWRlcgotd2l0aF9hdXRvbWFrZQotd2l0aF9hY2xvY2FsCi1lbmFibGVfbmxzCi1lbmFibGVfcnBhdGgKLXdpdGhfbGliaWNvbnZfcHJlZml4Ci13aXRoX2xpYmludGxfcHJlZml4Ci1lbmFibGVfZmF0YWxfd2FybmluZ3MKLWVuYWJsZV9leHRyYV9jaGVjawotZW5hYmxlX2RlYnVnCi1lbmFibGVfcHJvZmlsaW5nCi1lbmFibGVfdmFsZ3JpbmQKLWVuYWJsZV9nY292Ci1lbmFibGVfZXhhbXBsZXMKLXdpdGhfcGtnX2NvbmZpZ19wYXRoCi13aXRoX3BhY2thZ2VfbmFtZQotd2l0aF9wYWNrYWdlX29yaWdpbgotd2l0aF9wbHVnaW5zCi1lbmFibGVfZXh0ZXJuYWwKLWVuYWJsZV9leHBlcmltZW50YWwKLXdpdGhfaHRtbF9kaXIKLWVuYWJsZV9ndGtfZG9jCi1lbmFibGVfZ3RrX2RvY19odG1sCi1lbmFibGVfZ3RrX2RvY19wZGYKLWVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzCi1lbmFibGVfZ2xpYl9hc3NlcnRzCi1lbmFibGVfb3JjCi1lbmFibGVfQnN5bWJvbGljCi1lbmFibGVfc3RhdGljX3BsdWdpbnMKLXdpdGhfZGVmYXVsdF9hdWRpb3NpbmsKLXdpdGhfZGVmYXVsdF9hdWRpb3NyYwotd2l0aF9kZWZhdWx0X3ZpZGVvc2luawotd2l0aF9kZWZhdWx0X3ZpZGVvc3JjCi13aXRoX2RlZmF1bHRfdmlzdWFsaXplcgotZW5hYmxlX2FscGhhCi1lbmFibGVfYXBldGFnCi1lbmFibGVfYXVkaW9meAotZW5hYmxlX2F1ZGlvcGFyc2VycwotZW5hYmxlX2F1cGFyc2UKLWVuYWJsZV9hdXRvZGV0ZWN0Ci1lbmFibGVfYXZpCi1lbmFibGVfY3V0dGVyCi1lbmFibGVfZGVidWd1dGlscwotZW5hYmxlX2RlaW50ZXJsYWNlCi1lbmFibGVfZHRtZgotZW5hYmxlX2VmZmVjdHYKLWVuYWJsZV9lcXVhbGl6ZXIKLWVuYWJsZV9mbHYKLWVuYWJsZV9mbHgKLWVuYWJsZV9nb29tCi1lbmFibGVfZ29vbTJrMQotZW5hYmxlX2ljeWRlbXV4Ci1lbmFibGVfaWQzZGVtdXgKLWVuYWJsZV9pbWFnZWZyZWV6ZQotZW5hYmxlX2ludGVybGVhdmUKLWVuYWJsZV9pc29tcDQKLWVuYWJsZV9sYXcKLWVuYWJsZV9sZXZlbAotZW5hYmxlX21hdHJvc2thCi1lbmFibGVfbW9ub3Njb3BlCi1lbmFibGVfbXVsdGlmaWxlCi1lbmFibGVfbXVsdGlwYXJ0Ci1lbmFibGVfcmVwbGF5Z2FpbgotZW5hYmxlX3J0cAotZW5hYmxlX3J0cG1hbmFnZXIKLWVuYWJsZV9ydHNwCi1lbmFibGVfc2hhcGV3aXBlCi1lbmFibGVfc21wdGUKLWVuYWJsZV9zcGVjdHJ1bQotZW5hYmxlX3VkcAotZW5hYmxlX3ZpZGVvYm94Ci1lbmFibGVfdmlkZW9jcm9wCi1lbmFibGVfdmlkZW9maWx0ZXIKLWVuYWJsZV92aWRlb21peGVyCi1lbmFibGVfd2F2ZW5jCi1lbmFibGVfd2F2cGFyc2UKLWVuYWJsZV95NG0KLWVuYWJsZV9kaXJlY3Rzb3VuZAotZW5hYmxlX3dhdmVmb3JtCi1lbmFibGVfb3NzCi1lbmFibGVfb3NzNAotZW5hYmxlX3N1bmF1ZGlvCi1lbmFibGVfb3N4X2F1ZGlvCi1lbmFibGVfb3N4X3ZpZGVvCi1lbmFibGVfZ3N0X3Y0bDIKLXdpdGhfZ3VkZXYKLXdpdGhfbGlidjRsMgotZW5hYmxlX3Y0bDJfcHJvYmUKLWVuYWJsZV94Ci1lbmFibGVfYWFsaWIKLXdpdGhfYWFsaWJfcHJlZml4Ci13aXRoX2FhbGliX2V4ZWNfcHJlZml4Ci1lbmFibGVfYWFsaWJ0ZXN0Ci1lbmFibGVfY2Fpcm8KLWVuYWJsZV9mbGFjCi1lbmFibGVfZ2RrX3BpeGJ1ZgotZW5hYmxlX2phY2sKLWVuYWJsZV9qcGVnCi13aXRoX2pwZWdfbW14Ci1lbmFibGVfbGliY2FjYQotZW5hYmxlX2xpYmR2Ci1lbmFibGVfbGlicG5nCi1lbmFibGVfcHVsc2UKLWVuYWJsZV9kdjEzOTQKLWVuYWJsZV9zaG91dDIKLWVuYWJsZV9zb3VwCi1lbmFibGVfc3BlZXgKLWVuYWJsZV90YWdsaWIKLWVuYWJsZV92cHgKLWVuYWJsZV93YXZwYWNrCi1lbmFibGVfemxpYgotZW5hYmxlX2J6MgotJwotICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKLWhvc3RfYWxpYXMKLXRhcmdldF9hbGlhcwotQ0MKLUNGTEFHUwotTERGTEFHUwotTElCUwotQ1BQRkxBR1MKLUxUX1NZU19MSUJSQVJZX1BBVEgKLUNQUAotUEtHX0NPTkZJRwotVkFMR1JJTkRfQ0ZMQUdTCi1WQUxHUklORF9MSUJTCi1DWFgKLUNYWEZMQUdTCi1DQ0MKLUNYWENQUAotT0JKQwotT0JKQ0ZMQUdTCi1DQ0FTCi1DQ0FTRkxBR1MKLUdUS0RPQ19ERVBTX0NGTEFHUwotR1RLRE9DX0RFUFNfTElCUwotUFlUSE9OCi1HTElCX0NGTEFHUwotR0xJQl9MSUJTCi1HSU9fQ0ZMQUdTCi1HSU9fTElCUwotT1JDX0NGTEFHUwotT1JDX0xJQlMKLUdTVF9DRkxBR1MKLUdTVF9MSUJTCi1HU1RfQkFTRV9DRkxBR1MKLUdTVF9CQVNFX0xJQlMKLUdTVF9DT05UUk9MTEVSX0NGTEFHUwotR1NUX0NPTlRST0xMRVJfTElCUwotR1NUX05FVF9DRkxBR1MKLUdTVF9ORVRfTElCUwotR1NUX0NIRUNLX0NGTEFHUwotR1NUX0NIRUNLX0xJQlMKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTCi1HU1RfUExVR0lOU19CQVNFX0xJQlMKLUdUS19DRkxBR1MKLUdUS19MSUJTCi1HVEtfWDExX0NGTEFHUwotR1RLX1gxMV9MSUJTCi1HVURFVl9DRkxBR1MKLUdVREVWX0xJQlMKLUxJQlY0TDJfQ0ZMQUdTCi1MSUJWNEwyX0xJQlMKLVhfQ0ZMQUdTCi1YX0xJQlMKLVhGSVhFU19DRkxBR1MKLVhGSVhFU19MSUJTCi1YREFNQUdFX0NGTEFHUwotWERBTUFHRV9MSUJTCi1YRVhUX0NGTEFHUwotWEVYVF9MSUJTCi1DQUlST19DRkxBR1MKLUNBSVJPX0xJQlMKLUZMQUNfQ0ZMQUdTCi1GTEFDX0xJQlMKLUdES19QSVhCVUZfQ0ZMQUdTCi1HREtfUElYQlVGX0xJQlMKLUpBQ0tfQ0ZMQUdTCi1KQUNLX0xJQlMKLUpBQ0tfMF8xMjBfMV9DRkxBR1MKLUpBQ0tfMF8xMjBfMV9MSUJTCi1KQUNLXzFfOV83X0NGTEFHUwotSkFDS18xXzlfN19MSUJTCi1MSUJDQUNBX0NGTEFHUwotTElCQ0FDQV9MSUJTCi1MSUJEVl9DRkxBR1MKLUxJQkRWX0xJQlMKLUxJQlBOR19DRkxBR1MKLUxJQlBOR19MSUJTCi1QVUxTRV9DRkxBR1MKLVBVTFNFX0xJQlMKLVJBVzEzOTRfQ0ZMQUdTCi1SQVcxMzk0X0xJQlMKLUxJQklFQzYxODgzX0NGTEFHUwotTElCSUVDNjE4ODNfTElCUwotU0hPVVQyX0NGTEFHUwotU0hPVVQyX0xJQlMKLVNPVVBfQ0ZMQUdTCi1TT1VQX0xJQlMKLVNQRUVYX0NGTEFHUwotU1BFRVhfTElCUwotVEFHTElCX0NGTEFHUwotVEFHTElCX0xJQlMKLVZQWF9DRkxBR1MKLVZQWF9MSUJTCi1WUFhfMTMwX0NGTEFHUwotVlBYXzEzMF9MSUJTCi1WUFhfMTQwX0NGTEFHUwotVlBYXzE0MF9MSUJTCi1XQVZQQUNLX0NGTEFHUwotV0FWUEFDS19MSUJTJwotCi0KLSMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KLWFjX2luaXRfaGVscD0KLWFjX2luaXRfdmVyc2lvbj1mYWxzZQotYWNfdW5yZWNvZ25pemVkX29wdHM9Ci1hY191bnJlY29nbml6ZWRfc2VwPQotIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKLSMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KLWNhY2hlX2ZpbGU9L2Rldi9udWxsCi1leGVjX3ByZWZpeD1OT05FCi1ub19jcmVhdGU9Ci1ub19yZWN1cnNpb249Ci1wcmVmaXg9Tk9ORQotcHJvZ3JhbV9wcmVmaXg9Tk9ORQotcHJvZ3JhbV9zdWZmaXg9Tk9ORQotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKLXNpbGVudD0KLXNpdGU9Ci1zcmNkaXI9Ci12ZXJib3NlPQoteF9pbmNsdWRlcz1OT05FCi14X2xpYnJhcmllcz1OT05FCi0KLSMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgotIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCi0jIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAotIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgotIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KLSMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKLWJpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJwotc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKLWxpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCi1kYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJwotZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCi1zeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJwotc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCi1sb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJwotcnVuc3RhdGVkaXI9JyR7bG9jYWxzdGF0ZWRpcn0vcnVuJwotaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCi1vbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCi1kb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCi1pbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJwotaHRtbGRpcj0nJHtkb2NkaXJ9JwotZHZpZGlyPScke2RvY2Rpcn0nCi1wZGZkaXI9JyR7ZG9jZGlyfScKLXBzZGlyPScke2RvY2Rpcn0nCi1saWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKLWxvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJwotbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCi0KLWFjX3ByZXY9Ci1hY19kYXNoZGFzaD0KLWZvciBhY19vcHRpb24KLWRvCi0gICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgotICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KLSAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCi0gICAgYWNfcHJldj0KLSAgICBjb250aW51ZQotICBmaQotCi0gIGNhc2UgJGFjX29wdGlvbiBpbgotICAqPT8qKSBhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OwotICAqPSkgICBhY19vcHRhcmc9IDs7Ci0gICopICAgIGFjX29wdGFyZz15ZXMgOzsKLSAgZXNhYwotCi0gICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCi0KLSAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCi0gIC0tKQotICAgIGFjX2Rhc2hkYXNoPXllcyA7OwotCi0gIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCi0gICAgYWNfcHJldj1iaW5kaXIgOzsKLSAgLWJpbmRpcj0qIHwgLS1iaW5kaXI9KiB8IC0tYmluZGk9KiB8IC0tYmluZD0qIHwgLS1iaW49KiB8IC0tYmk9KikKLSAgICBiaW5kaXI9JGFjX29wdGFyZyA7OwotCi0gIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCi0gICAgYWNfcHJldj1idWlsZF9hbGlhcyA7OwotICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKLSAgICBidWlsZF9hbGlhcz0kYWNfb3B0YXJnIDs7Ci0KLSAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAotICB8IC0tY2FjaGUtZiB8IC0tY2FjaGUtIHwgLS1jYWNoZSB8IC0tY2FjaCB8IC0tY2FjIHwgLS1jYSB8IC0tYykKLSAgICBhY19wcmV2PWNhY2hlX2ZpbGUgOzsKLSAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCi0gIHwgLS1jYWNoZS1mPSogfCAtLWNhY2hlLT0qIHwgLS1jYWNoZT0qIHwgLS1jYWNoPSogfCAtLWNhYz0qIHwgLS1jYT0qIHwgLS1jPSopCi0gICAgY2FjaGVfZmlsZT0kYWNfb3B0YXJnIDs7Ci0KLSAgLS1jb25maWctY2FjaGUgfCAtQykKLSAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OwotCi0gIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQotICAgIGFjX3ByZXY9ZGF0YWRpciA7OwotICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQotICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAotICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKLSAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7Ci0gIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKLSAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCi0gICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKLSAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKLSAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKLSAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCi0gICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCi0gICAgICAqIgotImVuYWJsZV8kYWNfdXNlcm9wdCIKLSIqKSA7OwotICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1kaXNhYmxlLSRhY191c2Vyb3B0X29yaWciCi0JIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7Ci0gICAgZXNhYwotICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PW5vIDs7Ci0KLSAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKLSAgICBhY19wcmV2PWRvY2RpciA7OwotICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKLSAgICBkb2NkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCi0gICAgYWNfcHJldj1kdmlkaXIgOzsKLSAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKLSAgICBkdmlkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCi0gICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKLSAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKLSAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCi0gICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCi0gICAgICAqIgotImVuYWJsZV8kYWNfdXNlcm9wdCIKLSIqKSA7OwotICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKLQkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKLSAgICBlc2FjCi0gICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKLQotICAtZXhlYy1wcmVmaXggfCAtLWV4ZWNfcHJlZml4IHwgLS1leGVjLXByZWZpeCB8IC0tZXhlYy1wcmVmaSBcCi0gIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKLSAgfCAtLWV4ZWMgfCAtLWV4ZSB8IC0tZXgpCi0gICAgYWNfcHJldj1leGVjX3ByZWZpeCA7OwotICAtZXhlYy1wcmVmaXg9KiB8IC0tZXhlY19wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaT0qIFwKLSAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKLSAgfCAtLWV4ZWM9KiB8IC0tZXhlPSogfCAtLWV4PSopCi0gICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OwotCi0gIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCi0gICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCi0gICAgd2l0aF9nYXM9eWVzIDs7Ci0KLSAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtaCkKLSAgICBhY19pbml0X2hlbHA9bG9uZyA7OwotICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCi0gICAgYWNfaW5pdF9oZWxwPXJlY3Vyc2l2ZSA7OwotICAtaGVscD1zKiB8IC0taGVscD1zKiB8IC0taGVsPXMqIHwgLS1oZT1zKiB8IC1ocyopCi0gICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7Ci0KLSAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCi0gICAgYWNfcHJldj1ob3N0X2FsaWFzIDs7Ci0gIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCi0gICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7Ci0KLSAgLWh0bWxkaXIgfCAtLWh0bWxkaXIgfCAtLWh0bWxkaSB8IC0taHRtbGQgfCAtLWh0bWwgfCAtLWh0bSB8IC0taHQpCi0gICAgYWNfcHJldj1odG1sZGlyIDs7Ci0gIC1odG1sZGlyPSogfCAtLWh0bWxkaXI9KiB8IC0taHRtbGRpPSogfCAtLWh0bWxkPSogfCAtLWh0bWw9KiB8IC0taHRtPSogXAotICB8IC0taHQ9KikKLSAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKLQotICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCi0gIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCi0gICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7Ci0gIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCi0gIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKLSAgICBpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKLQotICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQotICAgIGFjX3ByZXY9aW5mb2RpciA7OwotICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQotICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OwotCi0gIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCi0gICAgYWNfcHJldj1saWJkaXIgOzsKLSAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQotICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAotICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKLSAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKLSAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKLSAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCi0gICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWxvY2FsZWRpciB8IC0tbG9jYWxlZGlyIHwgLS1sb2NhbGVkaSB8IC0tbG9jYWxlZCB8IC0tbG9jYWxlKQotICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7Ci0gIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCi0gICAgbG9jYWxlZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCi0gIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCi0gICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7Ci0gIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAotICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKLSAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQotICAgIGFjX3ByZXY9bWFuZGlyIDs7Ci0gIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKLSAgICBtYW5kaXI9JGFjX29wdGFyZyA7OwotCi0gIC1uZnAgfCAtLW5mcCB8IC0tbmYpCi0gICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KLSAgICB3aXRoX2ZwPW5vIDs7Ci0KLSAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKLSAgfCAtLW5vLWNyIHwgLS1uby1jIHwgLW4pCi0gICAgbm9fY3JlYXRlPXllcyA7OwotCi0gIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAotICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikKLSAgICBub19yZWN1cnNpb249eWVzIDs7Ci0KLSAgLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaSB8IC0tb2xkaW5jbHVkZWQgXAotICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKLSAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQotICAgIGFjX3ByZXY9b2xkaW5jbHVkZWRpciA7OwotICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKLSAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAotICB8IC0tb2xkaW49KiB8IC0tb2xkaT0qIHwgLS1vbGQ9KiB8IC0tb2w9KiB8IC0tbz0qKQotICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCi0gICAgYWNfcHJldj1wcmVmaXggOzsKLSAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQotICAgIHByZWZpeD0kYWNfb3B0YXJnIDs7Ci0KLSAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKLSAgfCAtLXByb2dyYW0tcHJlIHwgLS1wcm9ncmFtLXByIHwgLS1wcm9ncmFtLXApCi0gICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OwotICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKLSAgfCAtLXByb2dyYW0tcHJlZj0qIHwgLS1wcm9ncmFtLXByZT0qIHwgLS1wcm9ncmFtLXByPSogfCAtLXByb2dyYW0tcD0qKQotICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKLQotICAtcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpIHwgLS1wcm9ncmFtLXN1ZmYgXAotICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKLSAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7Ci0gIC1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpPSogXAotICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCi0gICAgcHJvZ3JhbV9zdWZmaXg9JGFjX29wdGFyZyA7OwotCi0gIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAotICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKLSAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQotICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OwotICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAotICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAotICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCi0gIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKLSAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKLQotICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQotICAgIGFjX3ByZXY9cGRmZGlyIDs7Ci0gIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCi0gICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKLQotICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQotICAgIGFjX3ByZXY9cHNkaXIgOzsKLSAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCi0gICAgcHNkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQotICAgIHNpbGVudD15ZXMgOzsKLQotICAtcnVuc3RhdGVkaXIgfCAtLXJ1bnN0YXRlZGlyIHwgLS1ydW5zdGF0ZWRpIHwgLS1ydW5zdGF0ZWQgXAotICB8IC0tcnVuc3RhdGUgfCAtLXJ1bnN0YXQgfCAtLXJ1bnN0YSB8IC0tcnVuc3QgfCAtLXJ1bnMgXAotICB8IC0tcnVuIHwgLS1ydSB8IC0tcikKLSAgICBhY19wcmV2PXJ1bnN0YXRlZGlyIDs7Ci0gIC1ydW5zdGF0ZWRpcj0qIHwgLS1ydW5zdGF0ZWRpcj0qIHwgLS1ydW5zdGF0ZWRpPSogfCAtLXJ1bnN0YXRlZD0qIFwKLSAgfCAtLXJ1bnN0YXRlPSogfCAtLXJ1bnN0YXQ9KiB8IC0tcnVuc3RhPSogfCAtLXJ1bnN0PSogfCAtLXJ1bnM9KiBcCi0gIHwgLS1ydW49KiB8IC0tcnU9KiB8IC0tcj0qKQotICAgIHJ1bnN0YXRlZGlyPSRhY19vcHRhcmcgOzsKLQotICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKLSAgICBhY19wcmV2PXNiaW5kaXIgOzsKLSAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKLSAgfCAtLXNiaT0qIHwgLS1zYj0qKQotICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OwotCi0gIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAotICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKLSAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKLSAgfCAtLXNoYSB8IC0tc2gpCi0gICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OwotICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKLSAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKLSAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCi0gIHwgLS1zaGE9KiB8IC0tc2g9KikKLSAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKLSAgICBhY19wcmV2PXNpdGUgOzsKLSAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKLSAgICBzaXRlPSRhY19vcHRhcmcgOzsKLQotICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQotICAgIGFjX3ByZXY9c3JjZGlyIDs7Ci0gIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCi0gICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKLQotICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCi0gIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQotICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OwotICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAotICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCi0gICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKLSAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OwotICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCi0gICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKLQotICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQotICAgIHZlcmJvc2U9eWVzIDs7Ci0KLSAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKLSAgICBhY19pbml0X3ZlcnNpb249OiA7OwotCi0gIC13aXRoLSogfCAtLXdpdGgtKikKLSAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKLSAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKLSAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCi0gICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCi0gICAgICAqIgotIndpdGhfJGFjX3VzZXJvcHQiCi0iKikgOzsKLSAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgotCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwotICAgIGVzYWMKLSAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKLQotICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCi0gICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Ci0gICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAotICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgotICAgICAgKiIKLSJ3aXRoXyRhY191c2Vyb3B0IgotIiopIDs7Ci0gICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKLQkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKLSAgICBlc2FjCi0gICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7Ci0KLSAgLS14KQotICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KLSAgICB3aXRoX3g9eWVzIDs7Ci0KLSAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAotICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQotICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OwotICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAotICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCi0gICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7Ci0KLSAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKLSAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCi0gICAgYWNfcHJldj14X2xpYnJhcmllcyA7OwotICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCi0gIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQotICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKLQotICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCi0gICAgOzsKLQotICAqPSopCi0gICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAotICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKLSAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7Ci0gICAgZXNhYwotICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZwotICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7Ci0KLSAgKikKLSAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCi0gICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCi0gICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCi0gICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCi0gICAgOzsKLQotICBlc2FjCi1kb25lCi0KLWlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgotICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCi0gIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCi0gIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KLSAgICBubykgOzsKLSAgICBmYXRhbCkgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7Ci0gICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OwotICBlc2FjCi1maQotCi0jIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KLWZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAotCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKLQkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAotCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpciBydW5zdGF0ZWRpcgotZG8KLSAgZXZhbCBhY192YWw9XCQkYWNfdmFyCi0gICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCi0gIGNhc2UgJGFjX3ZhbCBpbgotICAgICovICkKLSAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAotICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKLSAgZXNhYwotICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCi0gIGNhc2UgJGFjX3ZhbCBpbgotICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7Ci0gICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OwotICBlc2FjCi0gIGFzX2ZuX2Vycm9yICQ/ICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgotZG9uZQotCi0jIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCi0jIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KLSMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KLWJ1aWxkPSRidWlsZF9hbGlhcwotaG9zdD0kaG9zdF9hbGlhcwotdGFyZ2V0PSR0YXJnZXRfYWxpYXMKLQotIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgotaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCi0gIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgotICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQotICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPXllcwotICBmaQotZmkKLQotYWNfdG9vbF9wcmVmaXg9Ci10ZXN0IC1uICIkaG9zdF9hbGlhcyIgJiYgYWNfdG9vbF9wcmVmaXg9JGhvc3RfYWxpYXMtCi0KLXRlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKLQotCi1hY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKLWFjX2xzX2RpPWBscyAtZGkgLmAgJiYKLWFjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAotICBhc19mbl9lcnJvciAkPyAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCi10ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKLSAgYXNfZm5fZXJyb3IgJD8gInB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIKLQotCi0jIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCi1pZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgotICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcwotICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCi0gIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAotJGFzX2V4cHIgWCIkYXNfbXlzZWxmIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJGFzX215c2VsZiIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gIHNyY2Rpcj0kYWNfY29uZmRpcgotICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgotICAgIHNyY2Rpcj0uLgotICBmaQotZWxzZQotICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCi1maQotaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KLSAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCi0gIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCi1maQotYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgotYWNfYWJzX2NvbmZkaXI9YCgKLQljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IGFzX2ZuX2Vycm9yICQ/ICIkYWNfbXNnIgotCXB3ZClgCi0jIFdoZW4gYnVpbGRpbmcgaW4gcGxhY2UsIHNldCBzcmNkaXI9LgotaWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgotICBzcmNkaXI9LgotZmkKLSMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCi0jIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KLSMgbWVzcyB1cCBNLXggZ2RiIGluIEVtYWNzLgotY2FzZSAkc3JjZGlyIGluCi0qLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKLWVzYWMKLWZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCi0gIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KLSAgZXZhbCBhY19lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Ci0gIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KLSAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Ci1kb25lCi0KLSMKLSMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KLSMKLWlmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCi0gICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgotICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCi0gIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgR1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgMS4xMC40IHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KLQotVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCi0KLVRvIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGUuZy4sIENDLCBDRkxBR1MuLi4pLCBzcGVjaWZ5IHRoZW0gYXMKLVZBUj1WQUxVRS4gIFNlZSBiZWxvdyBmb3IgZGVzY3JpcHRpb25zIG9mIHNvbWUgb2YgdGhlIHVzZWZ1bCB2YXJpYWJsZXMuCi0KLURlZmF1bHRzIGZvciB0aGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGluIGJyYWNrZXRzLgotCi1Db25maWd1cmF0aW9uOgotICAtaCwgLS1oZWxwICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAotICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCi0gICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwotICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcgLi4uJyBtZXNzYWdlcwotICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCi0gIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCi0gIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCi0gICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQotCi1JbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Ci0gIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQotICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAotICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQotCi1CeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KLVxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5Ci1hbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAotZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KLQotRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCi0KLUZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6Ci0gIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KLSAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQotICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KLSAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQotICAtLXJ1bnN0YXRlZGlyPURJUiAgICAgICBtb2RpZmlhYmxlIHBlci1wcm9jZXNzIGRhdGEgW0xPQ0FMU1RBVEVESVIvcnVuXQotICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCi0gIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCi0gIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KLSAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQotICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KLSAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KLSAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFtEQVRBUk9PVERJUi9kb2MvZ3N0LXBsdWdpbnMtZ29vZF0KLSAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCi0gIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCi0gIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCi0gIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLV9BQ0VPRgotCi0gIGNhdCA8PFxfQUNFT0YKLQotUHJvZ3JhbSBuYW1lczoKLSAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcwotICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKLSAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKLQotU3lzdGVtIHR5cGVzOgotICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQotICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KLSAgLS10YXJnZXQ9VEFSR0VUICAgY29uZmlndXJlIGZvciBidWlsZGluZyBjb21waWxlcnMgZm9yIFRBUkdFVCBbSE9TVF0KLV9BQ0VPRgotZmkKLQotaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KLSAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBHU3RyZWFtZXIgR29vZCBQbHVnLWlucyAxLjEwLjQ6Ijs7Ci0gICBlc2FjCi0gIGNhdCA8PFxfQUNFT0YKLQotT3B0aW9uYWwgRmVhdHVyZXM6Ci0gIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKLSAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQotICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCi0gIC0tZW5hYmxlLXNpbGVudC1ydWxlcyAgIGxlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpCi0gIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKQotICAtLWRpc2FibGUtbWFpbnRhaW5lci1tb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwgKGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgotICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PW5vXQotICAtLWVuYWJsZS1zaGFyZWRbPVBLR1NdICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KLSAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQotICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKLSAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCi0gIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKLSAgLS1kaXNhYmxlLW5scyAgICAgICAgICAgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzCi0gIC0tZGlzYWJsZS1mYXRhbC13YXJuaW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgICBEb24ndCB0dXJuIGNvbXBpbGVyIHdhcm5pbmdzIGludG8gZmF0YWwgZXJyb3JzCi0gIC0tZW5hYmxlLWV4dHJhLWNoZWNrcyAgIEVuYWJsZSBleHRyYSBydW50aW1lIGNoZWNrcwotICAtLWRpc2FibGUtZGVidWcgICAgICAgICBkaXNhYmxlIGFkZGl0aW9uIG9mIC1nIGRlYnVnZ2luZyBpbmZvCi0gIC0tZW5hYmxlLXByb2ZpbGluZyAgICAgIGFkZHMgLXBnIHRvIGNvbXBpbGVyIGNvbW1hbmRsaW5lLCBmb3IgcHJvZmlsaW5nCi0gIC0tZGlzYWJsZS12YWxncmluZCAgICAgIGRpc2FibGUgcnVuLXRpbWUgdmFsZ3JpbmQgZGV0ZWN0aW9uCi0gIC0tZW5hYmxlLWdjb3YgICAgICAgICAgIGNvbXBpbGUgd2l0aCBjb3ZlcmFnZSBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uIChnY2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSkKLSAgLS1kaXNhYmxlLWV4YW1wbGVzICAgICAgZGlzYWJsZSBidWlsZGluZyBleGFtcGxlcwotICAtLWRpc2FibGUtZXh0ZXJuYWwgICAgICAgICAgIGRpc2FibGUgYnVpbGRpbmcgb2YgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBzCi0gIC0tZW5hYmxlLWV4cGVyaW1lbnRhbCAgICAgICAgZW5hYmxlIGJ1aWxkaW5nIG9mIGV4cGVyaW1lbnRhbCBwbHVnLWlucwotICAtLWVuYWJsZS1ndGstZG9jICAgICAgICB1c2UgZ3RrLWRvYyB0byBidWlsZCBkb2N1bWVudGF0aW9uIFtbZGVmYXVsdD1ub11dCi0gIC0tZW5hYmxlLWd0ay1kb2MtaHRtbCAgIGJ1aWxkIGRvY3VtZW50YXRpb24gaW4gaHRtbCBmb3JtYXQgW1tkZWZhdWx0PXllc11dCi0gIC0tZW5hYmxlLWd0ay1kb2MtcGRmICAgIGJ1aWxkIGRvY3VtZW50YXRpb24gaW4gcGRmIGZvcm1hdCBbW2RlZmF1bHQ9bm9dXQotICAtLWVuYWJsZS1nb2JqZWN0LWNhc3QtY2hlY2tzPVtuby9hdXRvL3llc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIEdPYmplY3QgY2FzdCBjaGVja3MKLSAgLS1lbmFibGUtZ2xpYi1hc3NlcnRzPVtuby95ZXNdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSBHTGliIGFzc2VydGlvbgotICAtLWVuYWJsZS1vcmMgICAgICAgICAgICB1c2UgT3JjIGlmIGluc3RhbGxlZAotICAtLWRpc2FibGUtQnN5bWJvbGljICAgICBhdm9pZCBsaW5raW5nIHdpdGggLUJzeW1ib2xpYwotICAtLWVuYWJsZS1zdGF0aWMtcGx1Z2lucyBidWlsZCBzdGF0aWMgcGx1Z2lucyBbZGVmYXVsdD1ub10KLSAgLS1kaXNhYmxlLWFscGhhICAgICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgYWxwaGEgcGx1Z2luCi0gIC0tZGlzYWJsZS1hcGV0YWcgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGFwZXRhZyBwbHVnaW4KLSAgLS1kaXNhYmxlLWF1ZGlvZnggICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgYXVkaW9meCBwbHVnaW4KLSAgLS1kaXNhYmxlLWF1ZGlvcGFyc2VycyAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgYXVkaW9wYXJzZXJzIHBsdWdpbgotICAtLWRpc2FibGUtYXVwYXJzZSAgICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBhdXBhcnNlIHBsdWdpbgotICAtLWRpc2FibGUtYXV0b2RldGVjdCAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBhdXRvZGV0ZWN0IHBsdWdpbgotICAtLWRpc2FibGUtYXZpICAgICAgICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBhdmkgcGx1Z2luCi0gIC0tZGlzYWJsZS1jdXR0ZXIgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGN1dHRlciBwbHVnaW4KLSAgLS1kaXNhYmxlLWRlYnVndXRpbHMgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgZGVidWd1dGlscyBwbHVnaW4KLSAgLS1kaXNhYmxlLWRlaW50ZXJsYWNlICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgZGVpbnRlcmxhY2UgcGx1Z2luCi0gIC0tZGlzYWJsZS1kdG1mICAgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGR0bWYgcGx1Z2luCi0gIC0tZGlzYWJsZS1lZmZlY3R2ICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGVmZmVjdHYgcGx1Z2luCi0gIC0tZGlzYWJsZS1lcXVhbGl6ZXIgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGVxdWFsaXplciBwbHVnaW4KLSAgLS1kaXNhYmxlLWZsdiAgICAgICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgZmx2IHBsdWdpbgotICAtLWRpc2FibGUtZmx4ICAgICAgICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBmbHggcGx1Z2luCi0gIC0tZGlzYWJsZS1nb29tICAgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGdvb20gcGx1Z2luCi0gIC0tZGlzYWJsZS1nb29tMmsxICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGdvb20yazEgcGx1Z2luCi0gIC0tZGlzYWJsZS1pY3lkZW11eCAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGljeWRlbXV4IHBsdWdpbgotICAtLWRpc2FibGUtaWQzZGVtdXggICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBpZDNkZW11eCBwbHVnaW4KLSAgLS1kaXNhYmxlLWltYWdlZnJlZXplICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgaW1hZ2VmcmVlemUgcGx1Z2luCi0gIC0tZGlzYWJsZS1pbnRlcmxlYXZlICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGludGVybGVhdmUgcGx1Z2luCi0gIC0tZGlzYWJsZS1pc29tcDQgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIGlzb21wNCBwbHVnaW4KLSAgLS1kaXNhYmxlLWxhdyAgICAgICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgbGF3IHBsdWdpbgotICAtLWRpc2FibGUtbGV2ZWwgICAgICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBsZXZlbCBwbHVnaW4KLSAgLS1kaXNhYmxlLW1hdHJvc2thICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgbWF0cm9za2EgcGx1Z2luCi0gIC0tZGlzYWJsZS1tb25vc2NvcGUgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIG1vbm9zY29wZSBwbHVnaW4KLSAgLS1kaXNhYmxlLW11bHRpZmlsZSAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgbXVsdGlmaWxlIHBsdWdpbgotICAtLWRpc2FibGUtbXVsdGlwYXJ0ICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBtdWx0aXBhcnQgcGx1Z2luCi0gIC0tZGlzYWJsZS1yZXBsYXlnYWluICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHJlcGxheWdhaW4gcGx1Z2luCi0gIC0tZGlzYWJsZS1ydHAgICAgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHJ0cCBwbHVnaW4KLSAgLS1kaXNhYmxlLXJ0cG1hbmFnZXIgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgcnRwbWFuYWdlciBwbHVnaW4KLSAgLS1kaXNhYmxlLXJ0c3AgICAgICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgcnRzcCBwbHVnaW4KLSAgLS1kaXNhYmxlLXNoYXBld2lwZSAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3Mgc2hhcGV3aXBlIHBsdWdpbgotICAtLWRpc2FibGUtc21wdGUgICAgICAgICBkaXNhYmxlIGRlcGVuZGVuY3ktbGVzcyBzbXB0ZSBwbHVnaW4KLSAgLS1kaXNhYmxlLXNwZWN0cnVtICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3Mgc3BlY3RydW0gcGx1Z2luCi0gIC0tZGlzYWJsZS11ZHAgICAgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHVkcCBwbHVnaW4KLSAgLS1kaXNhYmxlLXZpZGVvYm94ICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgdmlkZW9ib3ggcGx1Z2luCi0gIC0tZGlzYWJsZS12aWRlb2Nyb3AgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHZpZGVvY3JvcCBwbHVnaW4KLSAgLS1kaXNhYmxlLXZpZGVvZmlsdGVyICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3MgdmlkZW9maWx0ZXIgcGx1Z2luCi0gIC0tZGlzYWJsZS12aWRlb21peGVyICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHZpZGVvbWl4ZXIgcGx1Z2luCi0gIC0tZGlzYWJsZS13YXZlbmMgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHdhdmVuYyBwbHVnaW4KLSAgLS1kaXNhYmxlLXdhdnBhcnNlICAgICAgZGlzYWJsZSBkZXBlbmRlbmN5LWxlc3Mgd2F2cGFyc2UgcGx1Z2luCi0gIC0tZGlzYWJsZS15NG0gICAgICAgICAgIGRpc2FibGUgZGVwZW5kZW5jeS1sZXNzIHk0bSBwbHVnaW4KLSAgLS1kaXNhYmxlLWRpcmVjdHNvdW5kICAgICAgICBkaXNhYmxlIERpcmVjdFNvdW5kIHBsdWctaW46IGRpcmVjdHNvdW5kc2luawotICAtLWRpc2FibGUtd2F2ZWZvcm0gICAgICAgICAgIGRpc2FibGUgV2luMzIgV2F2ZUZvcm06IHdhdmVmb3Jtc2luawotICAtLWRpc2FibGUtb3NzICAgICAgICAgICAgICAgIGRpc2FibGUgT1NTIGF1ZGlvOiBvc3NhdWRpbwotICAtLWRpc2FibGUtb3NzNCAgICAgICAgICAgICAgIGRpc2FibGUgT3BlbiBTb3VuZCBTeXN0ZW0gNDogb3NzNAotICAtLWRpc2FibGUtc3VuYXVkaW8gICAgICAgICAgIGRpc2FibGUgU3VuIEF1ZGlvOiBzdW5hdWRpbwotICAtLWRpc2FibGUtb3N4X2F1ZGlvICAgICAgICAgIGRpc2FibGUgT1NYIGF1ZGlvOiBvc3hhdWRpbwotICAtLWRpc2FibGUtb3N4X3ZpZGVvICAgICAgICAgIGRpc2FibGUgT1NYIHZpZGVvOiBvc3h2aWRlb3NpbmsKLSAgLS1kaXNhYmxlLWdzdF92NGwyICAgICAgICAgICBkaXNhYmxlIFZpZGVvIDQgTGludXggMjogdmlkZW80bGludXgyCi0gIC0tZW5hYmxlLXY0bDItcHJvYmUgICAgIGVuYWJsZSBWNEwyIHBsdWdpbiB0byBwcm9iZSBkZXZpY2VzIFtkZWZhdWx0PW5vXQotICAtLWRpc2FibGUteCAgICAgICAgICAgICAgICAgIGRpc2FibGUgWCBsaWJyYXJpZXMgYW5kIHBsdWdpbnM6IHhpbWFnZXNyYwotICAtLWRpc2FibGUtYWFsaWIgICAgICAgICAgICAgIGRpc2FibGUgYWFsaWIgQVNDSUkgQXJ0IGxpYnJhcnk6IGFhc2luawotICAtLWRpc2FibGUtYWFsaWJ0ZXN0ICAgICBkbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgQUFMSUIgcHJvZ3JhbQotICAtLWRpc2FibGUtY2Fpcm8gICAgICAgICAgICAgIGRpc2FibGUgQ2Fpcm8gZ3JhcGhpY3MgcmVuZGVyaW5nIGFuZCBnb2JqZWN0IGJpbmRpbmdzOiBjYWlybwotICAtLWRpc2FibGUtZmxhYyAgICAgICAgICAgICAgIGRpc2FibGUgRkxBQyBsb3NzbGVzcyBhdWRpbzogZmxhYwotICAtLWRpc2FibGUtZ2RrX3BpeGJ1ZiAgICAgICAgIGRpc2FibGUgR0RLIHBpeGJ1ZjogZ2RrcGl4YnVmCi0gIC0tZGlzYWJsZS1qYWNrICAgICAgICAgICAgICAgZGlzYWJsZSBKYWNrOiBqYWNrCi0gIC0tZGlzYWJsZS1qcGVnICAgICAgICAgICAgICAgZGlzYWJsZSBqcGVnIGxpYnJhcnk6IGpwZWcKLSAgLS1kaXNhYmxlLWxpYmNhY2EgICAgICAgICAgICBkaXNhYmxlIGxpYmNhY2EgY29sb3VyZWQgQVNDSUkgYXJ0OiBjYWNhc2luawotICAtLWRpc2FibGUtbGliZHYgICAgICAgICAgICAgIGRpc2FibGUgbGliZHYgRFYgZGVtdXhlci9kZWNvZGVyOiBkdgotICAtLWRpc2FibGUtbGlicG5nICAgICAgICAgICAgIGRpc2FibGUgUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyBsaWJyYXJ5OiBwbmcKLSAgLS1kaXNhYmxlLXB1bHNlICAgICAgICAgICAgICBkaXNhYmxlIHB1bHNlYXVkaW8gcGx1Zy1pbjogcHVsc2VhdWRpbwotICAtLWRpc2FibGUtZHYxMzk0ICAgICAgICAgICAgIGRpc2FibGUgcmF3MTM5NCBhbmQgYXZjMTM5NCBsaWJyYXJ5OiAxMzk0Ci0gIC0tZGlzYWJsZS1zaG91dDIgICAgICAgICAgICAgZGlzYWJsZSBTaG91dGNhc3QvSWNlY2FzdCBjbGllbnQgbGlicmFyeTogc2hvdXQyCi0gIC0tZGlzYWJsZS1zb3VwICAgICAgICAgICAgICAgZGlzYWJsZSBzb3VwIGh0dHAgY2xpZW50IHBsdWdpbiAoMi40KTogc291cGh0dHBzcmMKLSAgLS1kaXNhYmxlLXNwZWV4ICAgICAgICAgICAgICBkaXNhYmxlIHNwZWV4IHNwZWVjaCBjb2RlYzogc3BlZXgKLSAgLS1kaXNhYmxlLXRhZ2xpYiAgICAgICAgICAgICBkaXNhYmxlIHRhZ2xpYiB0YWdnaW5nIGxpYnJhcnk6IHRhZ2xpYgotICAtLWRpc2FibGUtdnB4ICAgICAgICAgICAgICAgIGRpc2FibGUgVlBYIGRlY29kZXI6IHZweAotICAtLWRpc2FibGUtd2F2cGFjayAgICAgICAgICAgIGRpc2FibGUgd2F2cGFjayBwbHVnLWluOiB3YXZwYWNrCi0gIC0tZGlzYWJsZS16bGliICAgICAgICAgICAgICAgZGlzYWJsZSB6bGliIHN1cHBvcnQgZm9yIHF0ZGVtdXgvbWF0cm9za2EKLSAgLS1kaXNhYmxlLWJ6MiAgICAgICAgICAgICAgICBkaXNhYmxlIGJ6MiBsaWJyYXJ5IGZvciBtYXRyb3NrYQotCi1PcHRpb25hbCBQYWNrYWdlczoKLSAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCi0gIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKLSAgLS13aXRoLXBpY1s9UEtHU10gICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gIC0td2l0aC1haXgtc29uYW1lPWFpeHxzdnI0fGJvdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgb24gQUlYLCBbZGVmYXVsdD1haXhdLgotICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCi0gIC0td2l0aC1zeXNyb290Wz1ESVJdICAgIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgotICAtLXdpdGgtYXV0b2NvbmYgICAgICAgICB1c2UgYSBkaWZmZXJlbnQgYXV0b2NvbmYgZm9yIHJlZ2VuZXJhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZXMKLSAgLS13aXRoLWF1dG9oZWFkZXIgICAgICAgdXNlIGEgZGlmZmVyZW50IGF1dG9oZWFkZXIgZm9yIHJlZ2VuZXJhdGlvbiBvZgotICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZXMKLSAgLS13aXRoLWF1dG9tYWtlICAgICAgICAgdXNlIGEgZGlmZmVyZW50IGF1dG9tYWtlIGZvciByZWdlbmVyYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzCi0gIC0td2l0aC1hY2xvY2FsICAgICAgICAgIHVzZSBhIGRpZmZlcmVudCBhY2xvY2FsIGZvciByZWdlbmVyYXRpb24gb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGVzCi0gIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCi0gIC0td2l0aC1saWJpY29udi1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKLSAgLS13aXRob3V0LWxpYmljb252LXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpY29udiBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXIKLSAgLS13aXRoLWxpYmludGwtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmludGwgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKLSAgLS13aXRob3V0LWxpYmludGwtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYmludGwgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCi0gIC0td2l0aC1wa2ctY29uZmlnLXBhdGggIGNvbG9uLXNlcGFyYXRlZCBsaXN0IG9mIHBrZy1jb25maWcoMSkgZGlycwotICAtLXdpdGgtcGFja2FnZS1uYW1lICAgICBzcGVjaWZ5IHBhY2thZ2UgbmFtZSB0byB1c2UgaW4gcGx1Z2lucwotICAtLXdpdGgtcGFja2FnZS1vcmlnaW4gICBzcGVjaWZ5IHBhY2thZ2Ugb3JpZ2luIFVSTCB0byB1c2UgaW4gcGx1Z2lucwotICAtLXdpdGgtcGx1Z2lucyAgICAgICAgICBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBkZXBlbmRlbmN5bGVzcyBwbHVnLWlucyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlCi0gIC0td2l0aC1odG1sLWRpcj1QQVRIICAgIHBhdGggdG8gaW5zdGFsbGVkIGRvY3MKLSAgLS13aXRoLWRlZmF1bHQtYXVkaW9zaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgZGVmYXVsdCBhdWRpbyBzaW5rCi0gIC0td2l0aC1kZWZhdWx0LWF1ZGlvc3JjIHNwZWNpZnkgZGVmYXVsdCBhdWRpbyBzb3VyY2UKLSAgLS13aXRoLWRlZmF1bHQtdmlkZW9zaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgZGVmYXVsdCB2aWRlbyBzaW5rCi0gIC0td2l0aC1kZWZhdWx0LXZpZGVvc3JjIHNwZWNpZnkgZGVmYXVsdCB2aWRlbyBzb3VyY2UKLSAgLS13aXRoLWRlZmF1bHQtdmlzdWFsaXplcgotICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGRlZmF1bHQgdmlzdWFsaXplcgotICAtLXdpdGgtZ3VkZXYgICAgICAgICAgICBkZXZpY2UgZGV0ZWN0aW9uIHdpdGggZ3VkZXYKLSAgLS13aXRoLWxpYnY0bDIgICAgICAgICAgc3VwcG9ydCB2aWRlbyBidWZmZXIgY29udmVyc2lvbiB1c2luZyBsaWJ2NGwyCi0gIC0td2l0aC1hYWxpYi1wcmVmaXg9UEZYIHByZWZpeCB3aGVyZSBBQUxJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKQotICAtLXdpdGgtYWFsaWItZXhlYy1wcmVmaXg9UEZYCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMgcHJlZml4IHdoZXJlIEFBTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpCi0gIC0td2l0aC1qcGVnLW1teCwgcGF0aCB0byBNTVgnaWZpZWQgSlBFRyBsaWJyYXJ5Ci0KLVNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgotICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKLSAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncwotICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKLSAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgotICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+Ci0gIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKLSAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+Ci0gIExUX1NZU19MSUJSQVJZX1BBVEgKLSAgICAgICAgICAgICAgVXNlci1kZWZpbmVkIHJ1bi10aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGguCi0gIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCi0gIFBLR19DT05GSUcgIHBhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5Ci0gIFZBTEdSSU5EX0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBWQUxHUklORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFZBTEdSSU5EX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBWQUxHUklORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCi0gIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncwotICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCi0gIE9CSkMgICAgICAgIE9iamVjdGl2ZSBDIGNvbXBpbGVyIGNvbW1hbmQKLSAgT0JKQ0ZMQUdTICAgT2JqZWN0aXZlIEMgY29tcGlsZXIgZmxhZ3MKLSAgQ0NBUyAgICAgICAgYXNzZW1ibGVyIGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHRzIHRvIENDKQotICBDQ0FTRkxBR1MgICBhc3NlbWJsZXIgY29tcGlsZXIgZmxhZ3MgKGRlZmF1bHRzIHRvIENGTEFHUykKLSAgR1RLRE9DX0RFUFNfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdUS0RPQ19ERVBTLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1RLRE9DX0RFUFNfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdUS0RPQ19ERVBTLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgUFlUSE9OICAgICAgdGhlIFB5dGhvbiBpbnRlcnByZXRlcgotICBHTElCX0NGTEFHUyBDIGNvbXBpbGVyIGZsYWdzIGZvciBHTElCLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR0xJQl9MSUJTICAgbGlua2VyIGZsYWdzIGZvciBHTElCLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR0lPX0NGTEFHUyAgQyBjb21waWxlciBmbGFncyBmb3IgR0lPLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR0lPX0xJQlMgICAgbGlua2VyIGZsYWdzIGZvciBHSU8sIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBPUkNfQ0ZMQUdTICBDIGNvbXBpbGVyIGZsYWdzIGZvciBPUkMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBPUkNfTElCUyAgICBsaW5rZXIgZmxhZ3MgZm9yIE9SQywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdTVF9DRkxBR1MgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdTVCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdTVF9MSUJTICAgIGxpbmtlciBmbGFncyBmb3IgR1NULCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1NUX0JBU0VfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdTVF9CQVNFLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1NUX0JBU0VfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdTVF9CQVNFLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1NUX0NPTlRST0xMRVJfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdTVF9DT05UUk9MTEVSLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1NUX0NPTlRST0xMRVJfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdTVF9DT05UUk9MTEVSLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1NUX05FVF9DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgR1NUX05FVCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdTVF9ORVRfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdTVF9ORVQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHU1RfQ0hFQ0tfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdTVF9DSEVDSywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdTVF9DSEVDS19MSUJTCi0gICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgR1NUX0NIRUNLLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgR1NUX1BMVUdJTlNfQkFTRSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdTVF9QTFVHSU5TX0JBU0VfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIEdTVF9QTFVHSU5TX0JBU0UsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHVEtfQ0ZMQUdTICBDIGNvbXBpbGVyIGZsYWdzIGZvciBHVEssIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHVEtfTElCUyAgICBsaW5rZXIgZmxhZ3MgZm9yIEdUSywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdUS19YMTFfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdUS19YMTEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHVEtfWDExX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBHVEtfWDExLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1VERVZfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdVREVWLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgR1VERVZfTElCUyAgbGlua2VyIGZsYWdzIGZvciBHVURFViwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIExJQlY0TDJfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIExJQlY0TDIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBMSUJWNEwyX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBMSUJWNEwyLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgWF9DRkxBR1MgICAgQyBjb21waWxlciBmbGFncyBmb3IgWCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFhfTElCUyAgICAgIGxpbmtlciBmbGFncyBmb3IgWCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFhGSVhFU19DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgWEZJWEVTLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgWEZJWEVTX0xJQlMgbGlua2VyIGZsYWdzIGZvciBYRklYRVMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBYREFNQUdFX0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBYREFNQUdFLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgWERBTUFHRV9MSUJTCi0gICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgWERBTUFHRSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFhFWFRfQ0ZMQUdTIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFhFWFQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBYRVhUX0xJQlMgICBsaW5rZXIgZmxhZ3MgZm9yIFhFWFQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBDQUlST19DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgQ0FJUk8sIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBDQUlST19MSUJTICBsaW5rZXIgZmxhZ3MgZm9yIENBSVJPLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgRkxBQ19DRkxBR1MgQyBjb21waWxlciBmbGFncyBmb3IgRkxBQywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEZMQUNfTElCUyAgIGxpbmtlciBmbGFncyBmb3IgRkxBQywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEdES19QSVhCVUZfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIEdES19QSVhCVUYsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBHREtfUElYQlVGX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBHREtfUElYQlVGLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgSkFDS19DRkxBR1MgQyBjb21waWxlciBmbGFncyBmb3IgSkFDSywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEpBQ0tfTElCUyAgIGxpbmtlciBmbGFncyBmb3IgSkFDSywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIEpBQ0tfMF8xMjBfMV9DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgSkFDS18wXzEyMF8xLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgSkFDS18wXzEyMF8xX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBKQUNLXzBfMTIwXzEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBKQUNLXzFfOV83X0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBKQUNLXzFfOV83LCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgSkFDS18xXzlfN19MSUJTCi0gICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgSkFDS18xXzlfNywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIExJQkNBQ0FfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIExJQkNBQ0EsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBMSUJDQUNBX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBMSUJDQUNBLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgTElCRFZfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIExJQkRWLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgTElCRFZfTElCUyAgbGlua2VyIGZsYWdzIGZvciBMSUJEViwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIExJQlBOR19DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgTElCUE5HLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgTElCUE5HX0xJQlMgbGlua2VyIGZsYWdzIGZvciBMSUJQTkcsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBQVUxTRV9DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgUFVMU0UsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBQVUxTRV9MSUJTICBsaW5rZXIgZmxhZ3MgZm9yIFBVTFNFLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgUkFXMTM5NF9DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgUkFXMTM5NCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFJBVzEzOTRfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIFJBVzEzOTQsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBMSUJJRUM2MTg4M19DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgTElCSUVDNjE4ODMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBMSUJJRUM2MTg4M19MSUJTCi0gICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgTElCSUVDNjE4ODMsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBTSE9VVDJfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFNIT1VUMiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFNIT1VUMl9MSUJTIGxpbmtlciBmbGFncyBmb3IgU0hPVVQyLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgU09VUF9DRkxBR1MgQyBjb21waWxlciBmbGFncyBmb3IgU09VUCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFNPVVBfTElCUyAgIGxpbmtlciBmbGFncyBmb3IgU09VUCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFNQRUVYX0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBTUEVFWCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFNQRUVYX0xJQlMgIGxpbmtlciBmbGFncyBmb3IgU1BFRVgsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBUQUdMSUJfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFRBR0xJQiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFRBR0xJQl9MSUJTIGxpbmtlciBmbGFncyBmb3IgVEFHTElCLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgVlBYX0NGTEFHUyAgQyBjb21waWxlciBmbGFncyBmb3IgVlBYLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgVlBYX0xJQlMgICAgbGlua2VyIGZsYWdzIGZvciBWUFgsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBWUFhfMTMwX0NGTEFHUwotICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBWUFhfMTMwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgVlBYXzEzMF9MSUJTCi0gICAgICAgICAgICAgIGxpbmtlciBmbGFncyBmb3IgVlBYXzEzMCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFZQWF8xNDBfQ0ZMQUdTCi0gICAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MgZm9yIFZQWF8xNDAsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotICBWUFhfMTQwX0xJQlMKLSAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBWUFhfMTQwLCBvdmVycmlkaW5nIHBrZy1jb25maWcKLSAgV0FWUEFDS19DRkxBR1MKLSAgICAgICAgICAgICAgQyBjb21waWxlciBmbGFncyBmb3IgV0FWUEFDSywgb3ZlcnJpZGluZyBwa2ctY29uZmlnCi0gIFdBVlBBQ0tfTElCUwotICAgICAgICAgICAgICBsaW5rZXIgZmxhZ3MgZm9yIFdBVlBBQ0ssIG92ZXJyaWRpbmcgcGtnLWNvbmZpZwotCi1Vc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAotaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgotCi1SZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyPi4KLV9BQ0VPRgotYWNfc3RhdHVzPSQ/Ci1maQotCi1pZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCi0gICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCi0gIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCi0gICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKLSAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAotICAgICAgY29udGludWUKLSAgICBhY19idWlsZGRpcj0uCi0KLWNhc2UgIiRhY19kaXIiIGluCi0uKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKLSopCi0gIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCi0gICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCi0gIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KLSAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OwotICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKLSAgZXNhYyA7OwotZXNhYwotYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCi1hY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4Ci0jIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgotYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4Ci0KLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCi0gICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OwotICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCi0gICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKLSAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgbmFtZS4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKLSAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgotICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OwotZXNhYwotYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAotCi0gICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/OyBjb250aW51ZTsgfQotICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLgotICAgIGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4KLSAgICAgIGVjaG8gJiYKLSAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZlCi0gICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KLSAgICAgIGVjaG8gJiYKLSAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKLSAgICBlbHNlCi0gICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgotICAgIGZpIHx8IGFjX3N0YXR1cz0kPwotICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KLSAgZG9uZQotZmkKLQotdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCi1pZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCi0gIGNhdCA8PFxfQUNFT0YKLUdTdHJlYW1lciBHb29kIFBsdWctaW5zIGNvbmZpZ3VyZSAxLjEwLjQKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQotCi1Db3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgotX0FDRU9GCi0gIGV4aXQKLWZpCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCi1hY19mbl9jX3RyeV9jb21waWxlICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgotICBhY19yZXR2YWw9MAotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX3JldHZhbD0xCi1maQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jX3RyeV9jb21waWxlCi0KLSMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fY190cnlfbGluayAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci0gIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCi0gIGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKLQkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKLQkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKLSAgICAgICB9OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19yZXR2YWw9MQotZmkKLSAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgotICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCi0gICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCi0gICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbwotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jX3RyeV9saW5rCi0KLSMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCi0jIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLSNpbmNsdWRlIDwkMj4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkMz15ZXMiCi1lbHNlCi0gIGV2YWwgIiQzPW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKLQotIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fY190cnlfY3BwICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICAgYWNfcmV0dmFsPTEKLWZpCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKLQotfSAjIGFjX2ZuX2NfdHJ5X2NwcAotCi0jIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKLSMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCi1hY19mbl9jX3RyeV9ydW4gKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgeyBjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKLWZpCi0gIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY190cnlfcnVuCi0KLSMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQotYWNfZm5fY19jaGVja19mdW5jICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICQyCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgJDIgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCi1jaG9rZSBtZQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuICQyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQzPXllcyIKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ldmFsIGFjX3Jlcz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0KLX0gIyBhY19mbl9jX2NoZWNrX2Z1bmMKLQotIyBhY19mbl9jX2NoZWNrX2RlY2wgTElORU5PIFNZTUJPTCBWQVIgSU5DTFVERVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgU1lNQk9MIGlzIGRlY2xhcmVkIGluIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgotIyBhY2NvcmRpbmdseS4KLWFjX2ZuX2NfY2hlY2tfZGVjbCAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIGFzX2RlY2xfbmFtZT1gZWNobyAkMnxzZWQgJ3MvICooLiovLydgCi0gIGFzX2RlY2xfdXNlPWBlY2hvICQyfHNlZCAtZSAncy8oLygoLycgLWUgJ3MvKS8pIDAmLycgLWUgJ3MvLC8pIDAmICgvZydgCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkYXNfZGVjbF9uYW1lIGlzIGRlY2xhcmVkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZC4uLiAiID4mNjsgfQotaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgJGFzX2RlY2xfbmFtZQotI2lmZGVmIF9fY3BsdXNwbHVzCi0gICh2b2lkKSAkYXNfZGVjbF91c2U7Ci0jZWxzZQotICAodm9pZCkgJGFzX2RlY2xfbmFtZTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkMz15ZXMiCi1lbHNlCi0gIGV2YWwgIiQzPW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfZGVjbAotCi0jIGFjX2ZuX2N4eF90cnlfY29tcGlsZSBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCi1hY19mbl9jeHhfdHJ5X2NvbXBpbGUgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci0gIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCi0gIGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19yZXR2YWw9MQotZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY3h4X3RyeV9jb21waWxlCi0KLSMgYWNfZm5fY3h4X3RyeV9jcHAgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCi1hY19mbl9jeHhfdHJ5X2NwcCAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKLSAgZmkKLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgICBhY19yZXR2YWw9MQotZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY3h4X3RyeV9jcHAKLQotIyBhY19mbl9jeHhfdHJ5X2xpbmsgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fY3h4X3RyeV9saW5rICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKLSAgZmkKLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Ci0JIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Ci0JIHRlc3QgLXggY29uZnRlc3QkYWNfZXhlZXh0Ci0gICAgICAgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfcmV0dmFsPTEKLWZpCi0gICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KLSAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAotICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcwotICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCi0gIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY3h4X3RyeV9saW5rCi0KLSMgYWNfZm5fb2JqY190cnlfY29tcGlsZSBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fb2JqY190cnlfY29tcGlsZSAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKLSAgZmkKLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfb2JqY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19yZXR2YWw9MQotZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fb2JqY190cnlfY29tcGlsZQotCi0jIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQotIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCi1hY19mbl9jX2NoZWNrX3R5cGUgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBldmFsICIkMz1ubyIKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotaWYgKHNpemVvZiAoJDIpKQotCSByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kNAotaW50Ci1tYWluICgpCi17Ci1pZiAoc2l6ZW9mICgoJDIpKSkKLQkgICAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBldmFsICIkMz15ZXMiCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotCi19ICMgYWNfZm5fY19jaGVja190eXBlCi0KLSMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKLSMgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGNvdWxkIGJlCi0jIGNvbXB1dGVkCi1hY19mbl9jX2NvbXB1dGVfaW50ICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDA7Ci1yZXR1cm4gdGVzdF9hcnJheSBbMF07Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDA7Ci1yZXR1cm4gdGVzdF9hcnJheSBbMF07Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsCi0JCQlpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkJICBhY19sbz0gYWNfaGk9Ci0JCQkgIGJyZWFrCi0JCQlmaQotCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlkPSRhc192YWwKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kNAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwOwotcmV0dXJuIHRlc3RfYXJyYXkgWzBdOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJDQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDA7Ci1yZXR1cm4gdGVzdF9hcnJheSBbMF07Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgLSAxICYmIGFjX2hpPSRhc192YWwKLQkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICYmIGFjX21pZD0kYXNfdmFsCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYXNfZm5fYXJpdGggJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvICYmIGFjX21pZD0kYXNfdmFsCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwOwotcmV0dXJuIHRlc3RfYXJyYXkgWzBdOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYmIGFjX2xvPSRhc192YWwKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluICMoKAotPyopIGV2YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7OwotJycpIGFjX3JldHZhbD0xIDs7Ci1lc2FjCi0gIGVsc2UKLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kNAotc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIHJldHVybiAxOwotICBpZiAoKCQyKSA8IDApCi0gICAgewotICAgICAgbG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoJDIpKQotCXJldHVybiAxOwotICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgkMikpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7Ci0gICAgfQotICAvKiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBjb25mdXNpb24KLSAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLwotICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGVjaG8gPj5jb25mdGVzdC52YWw7IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTAKLWVsc2UKLSAgYWNfcmV0dmFsPTEKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1ybSAtZiBjb25mdGVzdC52YWwKLQotICBmaQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLSAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCi0KLX0gIyBhY19mbl9jX2NvbXB1dGVfaW50Ci0KLSMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKLSMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgotIyBhY2NvcmRpbmdseS4KLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWZpCi1ldmFsIGFjX3Jlcz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci0jaW5jbHVkZSA8JDI+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBhY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLSRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JDI+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLSRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCi0gIHllczpubzogKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0oICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lciAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjIgotICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCi1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci1maQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKLWNhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgotVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKLXJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCi0KLUl0IHdhcyBjcmVhdGVkIGJ5IEdTdHJlYW1lciBHb29kIFBsdWctaW5zICRhc19tZSAxLjEwLjQsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgJCAkMCAkQAotCi1fQUNFT0YKLWV4ZWMgNT4+Y29uZmlnLmxvZwotewotY2F0IDw8X0FTVU5BTUUKLSMjIC0tLS0tLS0tLSAjIwotIyMgUGxhdGZvcm0uICMjCi0jIyAtLS0tLS0tLS0gIyMKLQotaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKLXVuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotCi0vdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLS9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAotCi0vYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0vdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCi0vdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi0vdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCi0vYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCi0vYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCi0KLV9BU1VOQU1FCi0KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi19ID4mNQotCi1jYXQgPiY1IDw8X0FDRU9GCi0KLQotIyMgLS0tLS0tLS0tLS0gIyMKLSMjIENvcmUgdGVzdHMuICMjCi0jIyAtLS0tLS0tLS0tLSAjIwotCi1fQUNFT0YKLQotCi0jIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgotIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCi0jIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KLSMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KLSMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgotYWNfY29uZmlndXJlX2FyZ3M9Ci1hY19jb25maWd1cmVfYXJnczA9Ci1hY19jb25maWd1cmVfYXJnczE9Ci1hY19tdXN0X2tlZXBfbmV4dD1mYWxzZQotZm9yIGFjX3Bhc3MgaW4gMSAyCi1kbwotICBmb3IgYWNfYXJnCi0gIGRvCi0gICAgY2FzZSAkYWNfYXJnIGluCi0gICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OwotICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCi0gICAgICBjb250aW51ZSA7OwotICAgICpcJyopCi0gICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwotICAgIGVzYWMKLSAgICBjYXNlICRhY19wYXNzIGluCi0gICAgMSkgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsKLSAgICAyKQotICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKLSAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgotCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KLSAgICAgIGVsc2UKLQljYXNlICRhY19hcmcgaW4KLQkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAotCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAotCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAotCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCi0JICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgotCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotZG9uZQoteyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoteyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQotCi0jIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCi0jIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQotIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCi0jIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KLSMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KLXRyYXAgJ2V4aXRfc3RhdHVzPSQ/Ci0gICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgotICB7Ci0gICAgZWNobwotCi0gICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIENhY2hlIHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCi0gICAgZWNobwotICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCi0oCi0gIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KLSAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKLSAgICBjYXNlICRhY192YWwgaW4gIygKLSAgICAqJHthc19ubH0qKQotICAgICAgY2FzZSAkYWNfdmFyIGluICMoCi0gICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7Ci0gICAgICBlc2FjCi0gICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKLSAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCi0gICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OwotICAgICAgZXNhYyA7OwotICAgIGVzYWMKLSAgZG9uZQotICAoc2V0KSAyPiYxIHwKLSAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCi0gICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQotICAgICAgc2VkIC1uIFwKLQkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKLQkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKLSAgICAgIDs7ICMoCi0gICAgKikKLSAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCi0gICAgICA7OwotICAgIGVzYWMgfAotICAgIHNvcnQKLSkKLSAgICBlY2hvCi0KLSAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE91dHB1dCB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIKLSAgICBlY2hvCi0gICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycwotICAgIGRvCi0gICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKLSAgICAgIGNhc2UgJGFjX3ZhbCBpbgotICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OwotICAgICAgZXNhYwotICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgotICAgIGRvbmUgfCBzb3J0Ci0gICAgZWNobwotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgotICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCi0gICAgICBlY2hvCi0gICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcwotICAgICAgZG8KLQlldmFsIGFjX3ZhbD1cJCRhY192YXIKLQljYXNlICRhY192YWwgaW4KLQkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7Ci0JZXNhYwotCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKLSAgICAgIGRvbmUgfCBzb3J0Ci0gICAgICBlY2hvCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgotICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjCi0jIyBjb25mZGVmcy5oLiAjIwotIyMgLS0tLS0tLS0tLS0gIyMiCi0gICAgICBlY2hvCi0gICAgICBjYXQgY29uZmRlZnMuaAotICAgICAgZWNobwotICAgIGZpCi0gICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgotICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgotICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgotICB9ID4mNQotICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKLSAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCi0gICAgZXhpdCAkZXhpdF9zdGF0dXMKLScgMAotZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCi0gIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAotZG9uZQotYWNfc2lnbmFsPTAKLQotIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KLXJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCi0KLSRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKLQotIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgotX0FDRU9GCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgotX0FDRU9GCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgotX0FDRU9GCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKLV9BQ0VPRgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgotX0FDRU9GCi0KLQotIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCi0jIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgotYWNfc2l0ZV9maWxlMT1OT05FCi1hY19zaXRlX2ZpbGUyPU5PTkUKLWlmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KLSAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KLSAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCi0gICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKLSAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKLSAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OwotICBlc2FjCi1lbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgotICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKLSAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQotZWxzZQotICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQotICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKLWZpCi1mb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgotZG8KLSAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKLSAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQotICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQotICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKLSAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gIGZpCi1kb25lCi0KLWlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgotICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcwotICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgotICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQotICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KLSAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKLSAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKLSAgICBlc2FjCi0gIGZpCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Ci0gID4kY2FjaGVfZmlsZQotZmkKLQotZ3RfbmVlZHM9IiRndF9uZWVkcyAiCi1hc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzdGRsaWIuaCIKLWFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHVuaXN0ZC5oIgotYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3BhcmFtLmgiCi0jIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCi0jIHZhbHVlLgotYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCi1mb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbwotICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCi0gIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKLSAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgotICAgIHNldCwpCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Ci0gICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwotICAgICxzZXQpCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KLSAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Ci0gICAgLCk7OwotICAgICopCi0gICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCi0JIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCi0JYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCi0JYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCi0JaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCi0JICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQotCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKLQllbHNlCi0JICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQotCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAotCWZpCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9Ci0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9Ci0gICAgICBmaTs7Ci0gIGVzYWMKLSAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgotICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KLSAgICBjYXNlICRhY19uZXdfdmFsIGluCi0gICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKLSAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OwotICAgIGVzYWMKLSAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KLSAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgotICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OwotICAgIGVzYWMKLSAgZmkKLWRvbmUKLWlmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KLSAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1Ci1maQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotCi1hY19hdXhfZGlyPQotZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KLSAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgotICAgIGJyZWFrCi0gIGZpCi1kb25lCi1pZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgIiRMSU5FTk8iIDUKLWZpCi0KLSMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAotIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgotIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5Ci0jIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KLQotCi0jIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCi0kU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2J1aWxkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi10ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKLSAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKLXRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgotICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQotYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAotICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9Ci1jYXNlICRhY19jdl9idWlsZCBpbgotKi0qLSopIDs7Ci0qKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKLWVzYWMKLWJ1aWxkPSRhY19jdl9idWlsZAotYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwotc2V0IHggJGFjX2N2X2J1aWxkCi1zaGlmdAotYnVpbGRfY3B1PSQxCi1idWlsZF92ZW5kb3I9JDIKLXNoaWZ0OyBzaGlmdAotIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCi0jIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Ci1idWlsZF9vcz0kKgotSUZTPSRhY19zYXZlX0lGUwotY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9ob3N0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KLSAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKLWVsc2UKLSAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKLSAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQotY2FzZSAkYWNfY3ZfaG9zdCBpbgotKi0qLSopIDs7Ci0qKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OwotZXNhYwotaG9zdD0kYWNfY3ZfaG9zdAotYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwotc2V0IHggJGFjX2N2X2hvc3QKLXNoaWZ0Ci1ob3N0X2NwdT0kMQotaG9zdF92ZW5kb3I9JDIKLXNoaWZ0OyBzaGlmdAotIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCi0jIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Ci1ob3N0X29zPSQqCi1JRlM9JGFjX3NhdmVfSUZTCi1jYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQotaWYgJHthY19jdl90YXJnZXQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICJ4JHRhcmdldF9hbGlhcyIgPSB4OyB0aGVuCi0gIGFjX2N2X3RhcmdldD0kYWNfY3ZfaG9zdAotZWxzZQotICBhY19jdl90YXJnZXQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJHRhcmdldF9hbGlhc2AgfHwKLSAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJHRhcmdldF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1Ci1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQotJGFzX2VjaG8gIiRhY19jdl90YXJnZXQiID4mNjsgfQotY2FzZSAkYWNfY3ZfdGFyZ2V0IGluCi0qLSotKikgOzsKLSopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiICIkTElORU5PIiA1OzsKLWVzYWMKLXRhcmdldD0kYWNfY3ZfdGFyZ2V0Ci1hY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCi1zZXQgeCAkYWNfY3ZfdGFyZ2V0Ci1zaGlmdAotdGFyZ2V0X2NwdT0kMQotdGFyZ2V0X3ZlbmRvcj0kMgotc2hpZnQ7IHNoaWZ0Ci0jIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKLSMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKLXRhcmdldF9vcz0kKgotSUZTPSRhY19zYXZlX0lGUwotY2FzZSAkdGFyZ2V0X29zIGluICpcICopIHRhcmdldF9vcz1gZWNobyAiJHRhcmdldF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKLQotCi0jIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCi0jIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCi10ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgotICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCi0gICAgTk9ORU5PTkVzLHgseCwgJiYKLSAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LQotCi0KLQotCi1hbV9fYXBpX3ZlcnNpb249JzEuMTUnCi0KLSMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAotIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCi0jIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKLSMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCi0jIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKLSMgSVJJWCAvc2Jpbi9pbnN0YWxsCi0jIEFJWCAvYmluL2luc3RhbGwKLSMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcwotIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKLSMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncwotIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgotIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCi0jIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KLSMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KLWlmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgotY2FzZSAkYXNfZGlyLyBpbiAjKCgKLSAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAotICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKLSAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCi0gIC91c3IvdWNiLyogKSA7OwotICAqKQotICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCi0gICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290Ci0gICAgIyBieSBkZWZhdWx0LgotICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotCWlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KLQkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgotCSAgICA6Ci0JICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0JICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCi0JICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCi0JICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgotCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgotCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCi0JICAgIHRoZW4KLQkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCi0JICAgICAgYnJlYWsgMwotCSAgICBmaQotCSAgZmkKLQlmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICA7OwotZXNhYwotCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0KLWZpCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCi0gIGVsc2UKLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCi0gICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAotICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgotICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQotJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KLQotIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgotIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KLXRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9Ci0jIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQotIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgotYW1fbGY9JwotJwotY2FzZSBgcHdkYCBpbgotICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCi0gICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Ci1lc2FjCi1jYXNlICRzcmNkaXIgaW4KLSAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKLSAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogJyRzcmNkaXInIiAiJExJTkVOTyIgNTs7Ci1lc2FjCi0KLSMgRG8gJ3NldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKLSMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQotIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwotIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKLSMgZGlyZWN0b3J5KS4KLWlmICgKLSAgIGFtX2hhc19zbGVwdD1ubwotICAgZm9yIGFtX3RyeSBpbiAxIDI7IGRvCi0gICAgIGVjaG8gInRpbWVzdGFtcCwgc2xlcHQ6ICRhbV9oYXNfc2xlcHQiID4gY29uZnRlc3QuZmlsZQotICAgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICAgIGlmIHRlc3QgIiQqIiA9ICJYIjsgdGhlbgotCSMgLUwgZGlkbid0IHdvcmsuCi0Jc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKLSAgICAgZmkKLSAgICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKLQkmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KLQotCSMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLQkjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCi0JIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQotCSMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLQlhc19mbl9lcnJvciAkPyAibHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotICBhbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiAiJExJTkVOTyIgNQotICAgICBmaQotICAgICBpZiB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlIHx8IHRlc3QgJGFtX3RyeSAtZXEgMjsgdGhlbgotICAgICAgIGJyZWFrCi0gICAgIGZpCi0gICAgICMgSnVzdCBpbiBjYXNlLgotICAgICBzbGVlcCAxCi0gICAgIGFtX2hhc19zbGVwdD15ZXMKLSAgIGRvbmUKLSAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKLSAgICkKLXRoZW4KLSAgICMgT2suCi0gICA6Ci1lbHNlCi0gICBhc19mbl9lcnJvciAkPyAibmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgIiRMSU5FTk8iIDUKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotIyBJZiB3ZSBkaWRuJ3Qgc2xlZXAsIHdlIHN0aWxsIG5lZWQgdG8gZW5zdXJlIHRpbWUgc3RhbXBzIG9mIGNvbmZpZy5zdGF0dXMgYW5kCi0jIGdlbmVyYXRlZCBmaWxlcyBhcmUgc3RyaWN0bHkgbmV3ZXIuCi1hbV9zbGVlcF9waWQ9Ci1pZiBncmVwICdzbGVwdDogbm8nIGNvbmZ0ZXN0LmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICggc2xlZXAgMSApICYKLSAgYW1fc2xlZXBfcGlkPSQhCi1maQotCi1ybSAtZiBjb25mdGVzdC5maWxlCi0KLXRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgotICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgotdGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCi0gIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgRG91YmxlIGFueSBcIG9yICQuCi0jIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgotYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJwotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCi0KLSMgRXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGguCi1hbV9hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiICYmIHB3ZGAKLQotaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCi0gIGNhc2UgJGFtX2F1eF9kaXIgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OwotICAqKQotICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OwotICBlc2FjCi1maQotIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLWlzLWxpZ2h0d2VpZ2h0IjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgIgotZWxzZQotICBhbV9taXNzaW5nX3J1bj0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KLWZpCi0KLWlmIHRlc3QgeCIke2luc3RhbGxfc2grc2V0fSIgIT0geHNldDsgdGhlbgotICBjYXNlICRhbV9hdXhfZGlyIGluCi0gICpcICogfCAqXAkqKQotICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7Ci0gICopCi0gICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCi0gIGVzYWMKLWZpCi0KLSMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgotIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAotIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQotIyB3aWxsIGhvbm9yIHRoZSAnU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1Ci0kYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCi1pZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KLSAgICBTVFJJUD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBTVFJJUD0kYWNfY3RfU1RSSVAKLSAgZmkKLWVsc2UKLSAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgotZmkKLQotZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KLWlmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgotICBpZiAke2FjX2N2X3BhdGhfbWtkaXIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL29wdC9zZncvYmluCi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbwotCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLQkgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIHx8IGNvbnRpbnVlCi0JICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKAotCSAgICAgJ21rZGlyIChHTlUgY29yZXV0aWxzKSAnKiB8IFwKLQkgICAgICdta2RpciAoY29yZXV0aWxzKSAnKiB8IFwKLQkgICAgICdta2RpciAoZmlsZXV0aWxzKSAnNC4xKikKLQkgICAgICAgYWNfY3ZfcGF0aF9ta2Rpcj0kYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0Ci0JICAgICAgIGJyZWFrIDM7OwotCSAgIGVzYWMKLQkgZG9uZQotICAgICAgIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotCi0gIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KLSAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCi0gIGVsc2UKLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCi0gICAgIyB2YWx1ZSBmb3IgTUtESVJfUCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAotICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgotICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUtESVJfUCIgPiY1Ci0kYXNfZWNobyAiJE1LRElSX1AiID4mNjsgfQotCi1mb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgotICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQVdLPSRhY19jdl9wcm9nX0FXSwotaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQotJGFzX2VjaG8gIiRBV0siID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhawotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQotc2V0IHggJHtNQUtFLW1ha2V9Ci1hY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKLWlmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgotU0hFTEwgPSAvYmluL3NoCi1hbGw6Ci0JQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKLV9BQ0VPRgotIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgotY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCi0gICpAQEAlJSU9Pyo9QEBAJSUlKikKLSAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OwotICAqKQotICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKLWVzYWMKLXJtIC1mIGNvbmZ0ZXN0Lm1ha2UKLWZpCi1pZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgU0VUX01BS0U9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCi1maQotCi1ybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAotbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAudHN0OyB0aGVuCi0gIGFtX19sZWFkaW5nX2RvdD0uCi1lbHNlCi0gIGFtX19sZWFkaW5nX2RvdD1fCi1maQotcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKLWZpCi0KLWNhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gIyAoKCgKLSAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLSAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLSAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKLWVzYWMKLWFtX21ha2U9JHtNQUtFLW1ha2V9Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCi1CQVIwPWZhbHNlCi1CQVIxPXRydWUKLVY9MQotYW1fX2RvaXQ6Ci0JQCQoVFJVRSkKLS5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCi1lbHNlCi0gIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCi1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9Ci1pZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgotICAgIEFNX1Y9JyQoViknCi0gIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCi1lbHNlCi0gIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCi0gIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKLWZpCi1BTV9CQUNLU0xBU0g9J1wnCi0KLWlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KLSAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKLSAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgotICBhbV9faXNyYz0nIC1JJChzcmNkaXIpJwotICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKLSAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAic291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biBcIm1ha2UgZGlzdGNsZWFuXCIgdGhlcmUgZmlyc3QiICIkTElORU5PIiA1Ci0gIGZpCi1maQotCi0jIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKLWlmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCi0gIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKLSAgZWxzZQotICAgIENZR1BBVEhfVz1lY2hvCi0gIGZpCi1maQotCi0KLSMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KLSBQQUNLQUdFPSdnc3QtcGx1Z2lucy1nb29kJwotIFZFUlNJT049JzEuMTAuNCcKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBBQ0tBR0UgIiRQQUNLQUdFIgotX0FDRU9GCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBWRVJTSU9OICIkVkVSU0lPTiIKLV9BQ0VPRgotCi0jIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCi0KLUFDTE9DQUw9JHtBQ0xPQ0FMLSIke2FtX21pc3NpbmdfcnVufWFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259In0KLQotCi1BVVRPQ09ORj0ke0FVVE9DT05GLSIke2FtX21pc3NpbmdfcnVufWF1dG9jb25mIn0KLQotCi1BVVRPTUFLRT0ke0FVVE9NQUtFLSIke2FtX21pc3NpbmdfcnVufWF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSJ9Ci0KLQotQVVUT0hFQURFUj0ke0FVVE9IRUFERVItIiR7YW1fbWlzc2luZ19ydW59YXV0b2hlYWRlciJ9Ci0KLQotTUFLRUlORk89JHtNQUtFSU5GTy0iJHthbV9taXNzaW5nX3J1bn1tYWtlaW5mbyJ9Ci0KLSMgRm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVG8gYmUgcmVtb3ZlZCBvbmNlIEF1dG9tYWtlIDEuOS54Ci0jIGRpZXMgb3V0IGZvciBnb29kLiAgRm9yIG1vcmUgYmFja2dyb3VuZCwgc2VlOgotIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMDEuaHRtbD4KLSMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDE0Lmh0bWw+Ci1ta2Rpcl9wPSckKE1LRElSX1ApJwotCi0jIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQgKGFuZCBwb3NzaWJseSB0aGUgVEFQIGRyaXZlcikuICBUaGUKLSMgc3lzdGVtICJhd2siIGlzIGJhZCBvbiBzb21lIHBsYXRmb3Jtcy4KLSMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCi0jIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KLUFNVEFSPSckJHtUQVItdGFyfScKLQotCi0jIFdlJ2xsIGxvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCi1fYW1fdG9vbHM9J2dudXRhciBwbGFpbnRhciBwYXggY3BpbyBub25lJwotCi0jIFRoZSBQT1NJWCAxOTg4ICd1c3RhcicgZm9ybWF0IGlzIGRlZmluZWQgd2l0aCBmaXhlZC1zaXplIGZpZWxkcy4KLSAgICAgICMgVGhlcmUgaXMgbm90YWJseSBhIDIxIGJpdHMgbGltaXQgZm9yIHRoZSBVSUQgYW5kIHRoZSBHSUQuICBJbiBmYWN0LAotICAgICAgIyB0aGUgJ3BheCcgdXRpbGl0eSBjYW4gaGFuZyBvbiBiaWdnZXIgVUlEL0dJRCAoc2VlIGF1dG9tYWtlIGJ1ZyM4MzQzCi0gICAgICAjIGFuZCBidWcjMTM1ODgpLgotICAgICAgYW1fbWF4X3VpZD0yMDk3MTUxICMgMl4yMSAtIDEKLSAgICAgIGFtX21heF9naWQ9JGFtX21heF91aWQKLSAgICAgICMgVGhlICRVSUQgYW5kICRHSUQgdmFyaWFibGVzIGFyZSBub3QgcG9ydGFibGUsIHNvIHdlIG5lZWQgdG8gcmVzb3J0Ci0gICAgICAjIHRvIHRoZSBQT1NJWC1tYW5kYXRlZCBpZCgxKSB1dGlsaXR5LiAgRXJyb3JzIGluIHRoZSAnaWQnIGNhbGxzCi0gICAgICAjIGJlbG93IGFyZSBkZWZpbml0ZWx5IHVuZXhwZWN0ZWQsIHNvIGFsbG93IHRoZSB1c2VycyB0byBzZWUgdGhlbQotICAgICAgIyAodGhhdCBpcywgYXZvaWQgc3RkZXJyIHJlZGlyZWN0aW9uKS4KLSAgICAgIGFtX3VpZD1gaWQgLXUgfHwgZWNobyB1bmtub3duYAotICAgICAgYW1fZ2lkPWBpZCAtZyB8fCBlY2hvIHVua25vd25gCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgVUlEICckYW1fdWlkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgVUlEICckYW1fdWlkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0Li4uICIgPiY2OyB9Ci0gICAgICBpZiB0ZXN0ICRhbV91aWQgLWxlICRhbV9tYXhfdWlkOyB0aGVuCi0gICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotICAgICAgZWxzZQotICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICBfYW1fdG9vbHM9bm9uZQotICAgICAgZmkKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBHSUQgJyRhbV9naWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBHSUQgJyRhbV9naWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXQuLi4gIiA+JjY7IH0KLSAgICAgIGlmIHRlc3QgJGFtX2dpZCAtbGUgJGFtX21heF9naWQ7IHRoZW4KLSAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgICBfYW1fdG9vbHM9bm9uZQotICAgICAgZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjcmVhdGUgYSB1c3RhciB0YXIgYXJjaGl2ZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY3JlYXRlIGEgdXN0YXIgdGFyIGFyY2hpdmUuLi4gIiA+JjY7IH0KLQotICAjIEdvIGFoZWFkIGV2ZW4gaWYgd2UgaGF2ZSB0aGUgdmFsdWUgYWxyZWFkeSBjYWNoZWQuICBXZSBkbyBzbyBiZWNhdXNlIHdlCi0gICMgbmVlZCB0byBzZXQgdGhlIHZhbHVlcyBmb3IgdGhlICdhbV9fdGFyJyBhbmQgJ2FtX191bnRhcicgdmFyaWFibGVzLgotICBfYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl91c3Rhci0kX2FtX3Rvb2xzfQotCi0gIGZvciBfYW1fdG9vbCBpbiAkX2FtX3Rvb2xzOyBkbwotICAgIGNhc2UgJF9hbV90b29sIGluCi0gICAgZ251dGFyKQotICAgICAgZm9yIF9hbV90YXIgaW4gdGFyIGdudXRhciBndGFyOyBkbwotICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkX2FtX3RhciAtLXZlcnNpb24iID4mNQotICAgKCRfYW1fdGFyIC0tdmVyc2lvbikgPiY1IDI+JjUKLSAgIGFjX3N0YXR1cz0kPwotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgYnJlYWsKLSAgICAgIGRvbmUKLSAgICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PXVzdGFyIC1jaGYgLSAiJyIkJHRhcmRpciInCi0gICAgICBhbV9fdGFyXz0iJF9hbV90YXIgLS1mb3JtYXQ9dXN0YXIgLWNoZiAtICInIiR0YXJkaXIiJwotICAgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKLSAgICAgIDs7Ci0gICAgcGxhaW50YXIpCi0gICAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQotICAgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KLSAgICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKLSAgICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJwotICAgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCi0gICAgICBhbV9fdW50YXI9J3RhciB4ZiAtJwotICAgICAgOzsKLSAgICBwYXgpCi0gICAgICBhbV9fdGFyPSdwYXggLUwgLXggdXN0YXIgLXcgIiQkdGFyZGlyIicKLSAgICAgIGFtX190YXJfPSdwYXggLUwgLXggdXN0YXIgLXcgIiR0YXJkaXIiJwotICAgICAgYW1fX3VudGFyPSdwYXggLXInCi0gICAgICA7OwotICAgIGNwaW8pCi0gICAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCB1c3RhciAtTCcKLSAgICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IIHVzdGFyIC1MJwotICAgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IIHVzdGFyIC1kJwotICAgICAgOzsKLSAgICBub25lKQotICAgICAgYW1fX3Rhcj1mYWxzZQotICAgICAgYW1fX3Rhcl89ZmFsc2UKLSAgICAgIGFtX191bnRhcj1mYWxzZQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgotICAgICMgYW5kIGFtX191bnRhciBzZXQuCi0gICAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl91c3Rhcn0iICYmIGJyZWFrCi0KLSAgICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MuCi0gICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiB0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXIiID4mNQotICAgKHRhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcikgPiY1IDI+JjUKLSAgIGFjX3N0YXR1cz0kPwotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICBybSAtcmYgY29uZnRlc3QuZGlyCi0gICAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhciIgPiY1Ci0gICAoJGFtX191bnRhciA8Y29uZnRlc3QudGFyKSA+JjUgMj4mNQotICAgYWNfc3RhdHVzPSQ/Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2F0IGNvbmZ0ZXN0LmRpci9maWxlIiA+JjUKLSAgIChjYXQgY29uZnRlc3QuZGlyL2ZpbGUpID4mNSAyPiY1Ci0gICBhY19zdGF0dXM9JD8KLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIChleGl0ICRhY19zdGF0dXMpOyB9Ci0gICAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLQotICBpZiAke2FtX2N2X3Byb2dfdGFyX3VzdGFyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYW1fY3ZfcHJvZ190YXJfdXN0YXI9JF9hbV90b29sCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHJvZ190YXJfdXN0YXIiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9wcm9nX3Rhcl91c3RhciIgPiY2OyB9Ci0KLQotCi0KLQotCi0jIFBPU0lYIHdpbGwgc2F5IGluIGEgZnV0dXJlIHZlcnNpb24gdGhhdCBydW5uaW5nICJybSAtZiIgd2l0aCBubyBhcmd1bWVudAotIyBpcyBPSzsgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBtYWtlIHRoYXQgYXNzdW1wdGlvbiBpbiBvdXIgTWFrZWZpbGUKLSMgcmVjaXBlcy4gIFNvIHVzZSBhbiBhZ2dyZXNzaXZlIHByb2JlIHRvIGNoZWNrIHRoYXQgdGhlIHVzYWdlIHdlIHdhbnQgaXMKLSMgYWN0dWFsbHkgc3VwcG9ydGVkICJpbiB0aGUgd2lsZCIgdG8gYW4gYWNjZXB0YWJsZSBkZWdyZWUuCi0jIFNlZSBhdXRvbWFrZSBidWcjMTA4MjguCi0jIFRvIG1ha2UgYW55IGlzc3VlIG1vcmUgdmlzaWJsZSwgY2F1c2UgdGhlIHJ1bm5pbmcgY29uZmlndXJlIHRvIGJlIGFib3J0ZWQKLSMgYnkgZGVmYXVsdCBpZiB0aGUgJ3JtJyBwcm9ncmFtIGluIHVzZSBkb2Vzbid0IG1hdGNoIG91ciBleHBlY3RhdGlvbnM7IHRoZQotIyB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSB0aGlzIHRob3VnaC4KLWlmIHJtIC1mICYmIHJtIC1mciAmJiBybSAtcmY7IHRoZW4gOiBPSzsgZWxzZQotICBjYXQgPiYyIDw8J0VORCcKLU9vcHMhCi0KLVlvdXIgJ3JtJyBwcm9ncmFtIHNlZW1zIHVuYWJsZSB0byBydW4gd2l0aG91dCBmaWxlIG9wZXJhbmRzIHNwZWNpZmllZAotb24gdGhlIGNvbW1hbmQgbGluZSwgZXZlbiB3aGVuIHRoZSAnLWYnIG9wdGlvbiBpcyBwcmVzZW50LiAgVGhpcyBpcyBjb250cmFyeQotdG8gdGhlIGJlaGF2aW91ciBvZiBtb3N0IHJtIHByb2dyYW1zIG91dCB0aGVyZSwgYW5kIG5vdCBjb25mb3JtaW5nIHdpdGgKLXRoZSB1cGNvbWluZyBQT1NJWCBzdGFuZGFyZDogPGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTU0Mj4KLQotUGxlYXNlIHRlbGwgYnVnLWF1dG9tYWtlQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFsdWUKLW9mIHlvdXIgJFBBVEggYW5kIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gIFRoaXMKLWNhbiBoZWxwIHVzIGltcHJvdmUgZnV0dXJlIGF1dG9tYWtlIHZlcnNpb25zLgotCi1FTkQKLSAgaWYgdGVzdCB4IiRBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSIgPSB4InllcyI7IHRoZW4KLSAgICBlY2hvICdDb25maWd1cmF0aW9uIHdpbGwgcHJvY2VlZCBhbnl3YXksIHNpbmNlIHlvdSBoYXZlIHNldCB0aGUnID4mMgotICAgIGVjaG8gJ0FDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIHZhcmlhYmxlIHRvICJ5ZXMiJyA+JjIKLSAgICBlY2hvID4mMgotICBlbHNlCi0gICAgY2F0ID4mMiA8PCdFTkQnCi1BYm9ydGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB0byBlbnN1cmUgeW91IHRha2Ugbm90aWNlIG9mIHRoZSBpc3N1ZS4KLQotWW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBHTlUgY29yZXV0aWxzIHRvIGdldCBhbiAncm0nIGltcGxlbWVudGF0aW9uCi10aGF0IGJlaGF2ZXMgcHJvcGVybHk6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4uCi0KLUlmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgdXNpbmcgeW91ciBwcm9ibGVtYXRpYwotJ3JtJyBhbnl3YXksIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0KLXRvICJ5ZXMiLCBhbmQgcmUtcnVuIGNvbmZpZ3VyZS4KLQotRU5ECi0gICAgYXNfZm5fZXJyb3IgJD8gIllvdXIgJ3JtJyBwcm9ncmFtIGlzIGJhZCwgc29ycnkuIiAiJExJTkVOTyIgNQotICBmaQotZmkKLQotCi0KLSAgUEFDS0FHRV9WRVJTSU9OX01BSk9SPSQoZWNobyAxLjEwLjQgfCBjdXQgLWQnLicgLWYxKQotICBQQUNLQUdFX1ZFUlNJT05fTUlOT1I9JChlY2hvIDEuMTAuNCB8IGN1dCAtZCcuJyAtZjIpCi0gIFBBQ0tBR0VfVkVSU0lPTl9NSUNSTz0kKGVjaG8gMS4xMC40IHwgY3V0IC1kJy4nIC1mMykKLQotCi0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIG5hbm8gdmVyc2lvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBuYW5vIHZlcnNpb24uLi4gIiA+JjY7IH0KLQotICBOQU5PPSQoZWNobyAxLjEwLjQgfCBjdXQgLWQnLicgLWY0KQotCi0gIGlmIHRlc3QgeCIkTkFOTyIgPSB4IHx8IHRlc3QgIngkTkFOTyIgPSAieDAiIDsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAwIChyZWxlYXNlKSIgPiY1Ci0kYXNfZWNobyAiMCAocmVsZWFzZSkiID4mNjsgfQotICAgIE5BTk89MAotICAgIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFPTEKLSAgICBHU1RfR0lUPSJubyIKLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTkFOTyIgPiY1Ci0kYXNfZWNobyAiJE5BTk8iID4mNjsgfQotICAgIFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFPTAuYGRhdGUgKyVZJW0lZC4lSCVNJVNgCi0gICAgaWYgdGVzdCAieCROQU5PIiAhPSAieDEiIDsgdGhlbgotICAgICAgIEdTVF9HSVQ9Im5vIgotICAgIGVsc2UKLSAgICAgICBHU1RfR0lUPSJ5ZXMiCi0gICAgZmkKLSAgZmkKLSAgUEFDS0FHRV9WRVJTSU9OX05BTk89JE5BTk8KLQotCi0KLQotCi0KLWFjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29uZmlnLmgiCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICIgPiY2OyB9Ci0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tYWludGFpbmVyX21vZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAotZWxzZQotICBVU0VfTUFJTlRBSU5FUl9NT0RFPXllcwotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNQotJGFzX2VjaG8gIiRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjY7IH0KLSAgIGlmIHRlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXM7IHRoZW4KLSAgTUFJTlRBSU5FUl9NT0RFX1RSVUU9Ci0gIE1BSU5UQUlORVJfTU9ERV9GQUxTRT0nIycKLWVsc2UKLSAgTUFJTlRBSU5FUl9NT0RFX1RSVUU9JyMnCi0gIE1BSU5UQUlORVJfTU9ERV9GQUxTRT0KLWZpCi0KLSAgTUFJTlQ9JE1BSU5UQUlORVJfTU9ERV9UUlVFCi0KLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfcnVsZXM7Ci1maQotCi1jYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluICMgKCgoCi0gIHllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7Ci0gICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7Ci0gICAgKikgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7Ci1lc2FjCi1hbV9tYWtlPSR7TUFLRS1tYWtlfQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQotQkFSMD1mYWxzZQotQkFSMT10cnVlCi1WPTEKLWFtX19kb2l0OgotCUAkKFRSVUUpCi0uUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcwotZWxzZQotICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubwotZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNjsgfQotaWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KLSAgICBBTV9WPSckKFYpJwotICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJwotZWxzZQotICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQotICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCi1maQotQU1fQkFDS1NMQVNIPSdcJwotCi0KLUdTVF9BUElfVkVSU0lPTj0xLjAKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9BUElfVkVSU0lPTiAiJEdTVF9BUElfVkVSU0lPTiIKLV9BQ0VPRgotCi0KLQotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0KLWNhc2UgYHB3ZGAgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKLWVzYWMKLQotCi0KLW1hY3JvX3ZlcnNpb249JzIuNC42JwotbWFjcm9fcmV2aXNpb249JzIuNC42JwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1sdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCi0KLSMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KLSMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCi0jIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCi1kZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgotZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCi1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKLQotRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKLUVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQotIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCi1pZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLSAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gIEVDSE89J3ByaW50IC1yIC0tJwotZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgRUNITz0ncHJpbnRmICVzXG4nCi1lbHNlCi0gICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KLSAgZnVuY19mYWxsYmFja19lY2hvICgpCi0gIHsKLSAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotJDEKLV9MVEVDSE9fRU9GJwotICB9Ci0gIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKLWZpCi0KLSMgZnVuY19lY2hvX2FsbCBhcmcuLi4KLSMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KLWZ1bmNfZWNob19hbGwgKCkKLXsKLSAgICAkRUNITyAiIgotfQotCi1jYXNlICRFQ0hPIGluCi0gIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQotJGFzX2VjaG8gInByaW50ZiIgPiY2OyB9IDs7Ci0gIHByaW50KikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50IC1yIiA+JjUKLSRhc19lY2hvICJwcmludCAtciIgPiY2OyB9IDs7Ci0gICopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYXQiID4mNQotJGFzX2VjaG8gImNhdCIgPiY2OyB9IDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotREVQRElSPSIke2FtX19sZWFkaW5nX2RvdH1kZXBzIgotCi1hY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVwZmlsZXMiCi0KLQotYW1fbWFrZT0ke01BS0UtbWFrZX0KLWNhdCA+IGNvbmZpbmMgPDwgJ0VORCcKLWFtX19kb2l0OgotCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAotLlBIT05ZOiBhbV9fZG9pdAotRU5ECi0jIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2UiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAiID4mNjsgfQotYW1fX2luY2x1ZGU9IiMiCi1hbV9fcXVvdGU9Ci1fYW1fcmVzdWx0PW5vbmUKLSMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCi1lY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCi0jIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSAnbWFrZScuCi1jYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAotKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCi0gIGFtX19pbmNsdWRlPWluY2x1ZGUKLSAgYW1fX3F1b3RlPQotICBfYW1fcmVzdWx0PUdOVQotICA7OwotZXNhYwotIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCi1pZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCi0gICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCi0gICBjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAotICAgKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCi0gICAgIGFtX19pbmNsdWRlPS5pbmNsdWRlCi0gICAgIGFtX19xdW90ZT0iXCIiCi0gICAgIF9hbV9yZXN1bHQ9QlNECi0gICAgIDs7Ci0gICBlc2FjCi1maQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1Ci0kYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQotcm0gLWYgY29uZmluYyBjb25mbWYKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7Ci1maQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KLSAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKLSAgQU1ERVBCQUNLU0xBU0g9J1wnCi0gIGFtX19ub2RlcD0nX25vJwotZmkKLSBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KLSAgQU1ERVBfVFJVRT0KLSAgQU1ERVBfRkFMU0U9JyMnCi1lbHNlCi0gIEFNREVQX1RSVUU9JyMnCi0gIEFNREVQX0ZBTFNFPQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQotJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCi0gICAgQ0M9IiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBDQz0kYWNfY3RfQ0MKLSAgZmkKLWVsc2UKLSAgQ0M9IiRhY19jdl9wcm9nX0NDIgotZmkKLQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBmaQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotICBhY19wcm9nX3JlamVjdGVkPW5vCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KLSAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwotICAgICAgIGNvbnRpbnVlCi0gICAgIGZpCi0gICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWlmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KLSAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgotICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKLSAgc2hpZnQKLSAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCi0gICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCi0gICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgotICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgotICAgIHNoaWZ0Ci0gICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCi0gIGZpCi1maQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gIGZvciBhY19wcm9nIGluIGNsLmV4ZQotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhawotZG9uZQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1maQotCi1maQotCi0KLXRlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1zZXQgWCAkYWNfY29tcGlsZQotYWNfY29tcGlsZXI9JDIKLWZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KLSAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBzZWQgJzEwYVwKLS4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KLSAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICBmaQotICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci1kb25lCi0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKLSMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KLSMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KLSMgb2YgZXhlZXh0LgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gIiA+JjY7IH0KLWFjX2xpbmtfZGVmYXVsdD1gJGFzX2VjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCi0KLSMgVGhlIHBvc3NpYmxlIG91dHB1dCBmaWxlczoKLWFjX2ZpbGVzPSJhLm91dCBjb25mdGVzdC5leGUgY29uZnRlc3QgYS5leGUgYV9vdXQuZXhlIGIub3V0IGNvbmZ0ZXN0LioiCi0KLWFjX3JtZmlsZXM9Ci1mb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMKLWRvCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7Ci0gICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7Ci0gIGVzYWMKLWRvbmUKLXJtIC1mICRhY19ybWZpbGVzCi0KLWlmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19saW5rX2RlZmF1bHQiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6Ci0gICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgotIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKLSMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCi0jIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHNob3J0LWNpcmN1aXQgdGhpcyB0ZXN0IGZvciBjb21waWxlcnMgdW5rbm93biB0bwotIyBBdXRvY29uZi4KLWZvciBhY19maWxlIGluICRhY19maWxlcyAnJwotZG8KLSAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCi0JOzsKLSAgICBbYWJdLm91dCApCi0JIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKLQkjIGNlcnRhaW5seSByaWdodC4KLQlicmVhazs7Ci0gICAgKi4qICkKLQlpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKLQl0aGVuIDo7IGVsc2UKLQkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKLQlmaQotCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAotCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJwotCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgotCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgotCSMgYWN0dWFsbHkgd29ya2luZy4KLQlicmVhazs7Ci0gICAgKiApCi0JYnJlYWs7OwotICBlc2FjCi1kb25lCi10ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KLQotZWxzZQotICBhY19maWxlPScnCi1maQotaWYgdGVzdCAteiAiJGFjX2ZpbGUiOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0kYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoteyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciA3NyAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAiID4mNjsgfQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19maWxlIiA+JjUKLSRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9Ci1hY19leGVleHQ9JGFjX2N2X2V4ZWV4dAotCi1ybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAotYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9Ci1pZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6Ci0gICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQotIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCi0jIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAotIyBgcm0nLgotZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCi0gIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwotICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotCSAgYnJlYWs7OwotICAgICogKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWVsc2UKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWZpCi1ybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KLQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotRVhFRVhUPSRhY19jdl9leGVleHQKLWFjX2V4ZWV4dD0kRVhFRVhUCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAoKQotewotRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKLSByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBjb25mdGVzdC5vdXQiCi0jIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgotIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KLSAgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JwotICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bm8KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KLQljcm9zc19jb21waWxpbmc9eWVzCi0gICAgZWxzZQotCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLSAgICBmaQotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKLSRhc19lY2hvICIkY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KLQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdCRhY19jdl9leGVleHQgY29uZnRlc3Qub3V0Ci1hY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQotaWYgJHthY19jdl9vYmpleHQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCi1pZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6Ci0gIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCi0gIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7Ci0gICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCi0gICAgICAgYnJlYWs7OwotICBlc2FjCi1kb25lCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi17IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWZpCi1ybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9Ci1PQkpFWFQ9JGFjX2N2X29iamV4dAotYWNfb2JqZXh0PSRPQkpFWFQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQotaWYgJHthY19jdl9jX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBhY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQotJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KLSAgR0NDPXllcwotZWxzZQotICBHQ0M9Ci1maQotYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQotYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19nKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCi0gICBhY19jX3dlcnJvcl9mbGFnPXllcwotICAgYWNfY3ZfcHJvZ19jY19nPW5vCi0gICBDRkxBR1M9Ii1nIgotICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWVsc2UKLSAgQ0ZMQUdTPSIiCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLQkgQ0ZMQUdTPSItZyIKLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ci0gIGZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3Byb2dfY2NfYzg5PW5vCi1hY19zYXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1zdHJ1Y3Qgc3RhdDsKLS8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KLXN0cnVjdCBidWYgeyBpbnQgeDsgfTsKLUZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Ci1zdGF0aWMgY2hhciAqZSAocCwgaSkKLSAgICAgY2hhciAqKnA7Ci0gICAgIGludCBpOwotewotICByZXR1cm4gcFtpXTsKLX0KLXN0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKLXsKLSAgY2hhciAqczsKLSAgdmFfbGlzdCB2OwotICB2YV9zdGFydCAodixwKTsKLSAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKLSAgdmFfZW5kICh2KTsKLSAgcmV0dXJuIHM7Ci19Ci0KLS8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCi0gICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCi0gICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKLQotLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCi0gICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCi0jZGVmaW5lIEZPTyh4KSAneCcKLWludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOwotCi1pbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKLXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owotc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Ci1pbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKLWludCBhcmdjOwotY2hhciAqKmFyZ3Y7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAotCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6Ci0KLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X3Byb2dfY2NfY19vKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi0gICMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgotICAjIEZvbGxvd2luZyBBQ19QUk9HX0NDX0NfTywgd2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lCi0gICMgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLAotICAjIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KLSAgYW1fY3ZfcHJvZ19jY19jX289eWVzCi0gIGZvciBhbV9pIGluIDEgMjsgZG8KLSAgICBpZiB7IGVjaG8gIiRhc19tZTokTElORU5POiAkQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCIgPiY1Ci0gICAoJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQpID4mNSAyPiY1Ci0gICBhY19zdGF0dXM9JD8KLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIChleGl0ICRhY19zdGF0dXMpOyB9IFwKLSAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQ7IHRoZW4KLSAgICAgIDogT0sKLSAgICBlbHNlCi0gICAgICBhbV9jdl9wcm9nX2NjX2Nfbz1ubwotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIHJtIC1mIGNvcmUgY29uZnRlc3QqCi0gIHVuc2V0IGFtX2kKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3Byb2dfY2NfY19vIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfcHJvZ19jY19jX28iID4mNjsgfQotaWYgdGVzdCAiJGFtX2N2X3Byb2dfY2NfY19vIiAhPSB5ZXM7IHRoZW4KLSAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCi0gICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgotICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCi0gICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCi0gICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgotICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgotZmkKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi1kZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9Ci0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCi0gICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKLSAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAotICAjIGluIEQiLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQotICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgotICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgotICBjZCBjb25mdGVzdC5kaXIKLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCi0gICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCi0gICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCi0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKLSAgIyBkaXJlY3RvcnkuCi0gIG1rZGlyIHN1YgotCi0gIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotICBjYXNlICIgJGRlcGNjICIgaW4gIygKLSAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKLSAgICAgZXNhYwotCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KLSAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAotICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KLSAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQotICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBnY2MpCi0gICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgotICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKLSAgICAgIDs7Ci0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQotICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKLSAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAotICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KLSAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICAgIGFtX19taW51c19vYmo9Ci0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0KLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotZWxzZQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KLUNDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQotCi0gaWYKLSAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKLSAgJiYgdGVzdCAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPQotICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJwotZWxzZQotICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ0NfRkFMU0U9Ci1maQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX1NFRCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICAgICAgICAgICBhY19zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCi0gICAgIGZvciBhY19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCi0gICAgICAgYWNfc2NyaXB0PSIkYWNfc2NyaXB0JGFzX25sJGFjX3NjcmlwdCIKLSAgICAgZG9uZQotICAgICBlY2hvICIkYWNfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAotICAgICB7IGFjX3NjcmlwdD07IHVuc2V0IGFjX3NjcmlwdDt9Ci0gICAgIGlmIHRlc3QgLXogIiRTRUQiOyB0aGVuCi0gIGFjX3BhdGhfU0VEX2ZvdW5kPWZhbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGFjX3BhdGhfU0VEPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9TRUQiIHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAotY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAotICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgotICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgotICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAotICAgIGZpCi0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICBkb25lCi0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwotZXNhYwotCi0gICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMwotICAgIGRvbmUKLSAgZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0gIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX1NFRCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQotICBmaQotZWxzZQotICBhY19jdl9wYXRoX1NFRD0kU0VECi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3BhdGhfU0VEIiA+JjY7IH0KLSBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKLSAgcm0gLWYgY29uZnRlc3Quc2VkCi0KLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLQotCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCi0gIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0dSRVAiIHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCi1jYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKLSAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKLSAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMwotICAgIGRvbmUKLSAgZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0gIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KLSBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKLSAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCi0gICBlbHNlCi0gICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KLSAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKLWNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAotICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgotICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCi1maQotCi0gICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQotIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZmdyZXAuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9GR1JFUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIGVjaG8gJ2FiKmMnIHwgJEdSRVAgLUYgJ2FiKmMnID4vZGV2L251bGwgMj4mMQotICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKLSAgIGVsc2UKLSAgICAgaWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgotICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4gZmdyZXA7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9GR1JFUCIgfHwgY29udGludWUKLSMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0ZHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9GR1JFUAotY2FzZSBgIiRhY19wYXRoX0ZHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KLSpHTlUqKQotICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIgYWNfcGF0aF9GR1JFUF9mb3VuZD06OzsKLSopCi0gIGFjX2NvdW50PTAKLSAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCi0gIHdoaWxlIDoKLSAgZG8KLSAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgotICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKLSAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKLSAgICAkYXNfZWNobyAnRkdSRVAnID4+ICJjb25mdGVzdC5ubCIKLSAgICAiJGFjX3BhdGhfRkdSRVAiIEZHUkVQIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCi0gICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9GR1JFUF9tYXgtMH07IHRoZW4KLSAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQotICAgICAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiCi0gICAgICBhY19wYXRoX0ZHUkVQX21heD0kYWNfY291bnQKLSAgICBmaQotICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgZG9uZQotICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKLWVzYWMKLQotICAgICAgJGFjX3BhdGhfRkdSRVBfZm91bmQgJiYgYnJlYWsgMwotICAgIGRvbmUKLSAgZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0gIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0ZHUkVQIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGZncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKLSAgZmkKLWVsc2UKLSAgYWNfY3ZfcGF0aF9GR1JFUD0kRkdSRVAKLWZpCi0KLSAgIGZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0ZHUkVQIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcGF0aF9GR1JFUCIgPiY2OyB9Ci0gRkdSRVA9IiRhY19jdl9wYXRoX0ZHUkVQIgotCi0KLXRlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpCi0KLWFjX3Byb2c9bGQKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZwotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQotZmkKLWlmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0kYWNfZGlyLyRhY19wcm9nCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3Qgbm8gIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0IHllcyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9JGx0X3NhdmVfaWZzCi1lbHNlCi0gIGx0X2N2X3BhdGhfTEQ9JExEICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmkKLWZpCi0KLUxEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQotJGFzX2VjaG8gIiRMRCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXRlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCi0gIDs7Ci0qKQotICBsdF9jdl9wcm9nX2dudV9sZD1ubwotICA7OwotZXNhYwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Ci13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotCi0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wYXRoX05NKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgotICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLSAgbHRfY3ZfcGF0aF9OTT0kTk0KLWVsc2UKLSAgbHRfbm1fdG9fY2hlY2s9JHthY190b29sX3ByZWZpeH1ubQotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKLSAgZmkKLSAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICB0bXBfbm09JGFjX2Rpci8kbHRfdG1wX25tCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCI7IHRoZW4KLQkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KLQkjIEFkZGluZyB0aGUgJ3NlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgotCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKLQkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKLQkjIE1TWVMgY29udmVydHMgL2Rldi9udWxsIHRvIE5VTCwgTWluR1cgbm0gdHJlYXRzIE5VTCBhcyBlbXB0eQotCWNhc2UgJGJ1aWxkX29zIGluCi0JbWluZ3cqKSBsdF9iYWRfZmlsZT1jb25mdGVzdC5ubS9ub2ZpbGUgOzsKLQkqKSBsdF9iYWRfZmlsZT0vZGV2L251bGwgOzsKLQllc2FjCi0JY2FzZSBgIiR0bXBfbm0iIC1CICRsdF9iYWRfZmlsZSAyPiYxIHwgc2VkICcxcSdgIGluCi0JKiRsdF9iYWRfZmlsZSogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQotCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrIDIKLQkgIDs7Ci0JKikKLQkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSAgKi9kZXYvbnVsbCopCi0JICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCi0JICAgIGJyZWFrIDIKLQkgICAgOzsKLQkgICopCi0JICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0Ci0JICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgZG9uZQotICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KLWZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9Ci1pZiB0ZXN0IG5vICE9ICIkbHRfY3ZfcGF0aF9OTSI7IHRoZW4KLSAgTk09JGx0X2N2X3BhdGhfTk0KLWVsc2UKLSAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCi0gIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6Ci0gICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGVsc2UKLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLURVTVBCSU49JGFjX2N2X3Byb2dfRFVNUEJJTgotaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFVNUEJJTiIgPiY1Ci0kYXNfZWNobyAiJERVTVBCSU4iID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiREVU1QQklOIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJERVTVBCSU4iOyB0aGVuCi0gIGFjX2N0X0RVTVBCSU49JERVTVBCSU4KLSAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX2N0X0RVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9EVU1QQklOPSRhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4KLWlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQotJGFzX2VjaG8gIiRhY19jdF9EVU1QQklOIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iICYmIGJyZWFrCi1kb25lCi0KLSAgaWYgdGVzdCAieCRhY19jdF9EVU1QQklOIiA9IHg7IHRoZW4KLSAgICBEVU1QQklOPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERVTVBCSU49JGFjX2N0X0RVTVBCSU4KLSAgZmkKLWZpCi0KLSAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotICAgICpDT0ZGKikKLSAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIgotICAgICAgOzsKLSAgICAqKQotICAgICAgRFVNUEJJTj06Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotICBpZiB0ZXN0IDogIT0gIiREVU1QQklOIjsgdGhlbgotICAgIE5NPSREVU1QQklOCi0gIGZpCi1maQotdGVzdCAteiAiJE5NIiAmJiBOTT1ubQotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3Zfbm1faW50ZXJmYWNlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCi0gIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAotICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGFjX2NvbXBpbGVcIiIgPiY1KQotICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JjUpCi0gIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mNSkKLSAgY2F0IGNvbmZ0ZXN0Lm91dCA+JjUKLSAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCi0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0KgotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjUKLSRhc19lY2hvICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA+JjY7IH0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KLUxOX1M9JGFzX2xuX3MKLWlmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1Ci0kYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KLWZpCi0KLSMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgIGk9MAotICB0ZXN0c3RyaW5nPUFCQ0QKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgbWludCopCi0gICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBiaXRyaWcqIHwgZGFyd2luKiB8IGRyYWdvbmZseSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKLSAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKLSAgICBmaQotICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIDs7Ci0KLSAgaW50ZXJpeCopCi0gICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAotICAgIDs7Ci0KLSAgb3MyKikKLSAgICAjIFRoZSB0ZXN0IHRha2VzIGEgbG9uZyB0aW1lIG9uIE9TLzIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTIKLSAgICA7OwotCi0gIG9zZiopCi0gICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCi0gICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKLSAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgotICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAotICAgICMKLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgotICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KLSAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gIHNjbzMuMnY1KikKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQotICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iICYmIFwKLSAgICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIGVsc2UKLSAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KLSAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KLSAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KLSAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCi0gICAgICBkb25lCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKLSAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0Ci0gICAgICAjIHdlIGNhbid0IHRlbGwuCi0gICAgICB3aGlsZSB7IHRlc3QgWGBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKLQkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgdGVzdCAxNyAhPSAiJGkiICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KLSAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCi0gICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLWZpCi0KLWlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKLSRhc19lY2hvICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQotJGFzX2VjaG8gIm5vbmUiID4mNjsgfQotZmkKLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotCi0KLQotCi0KLTogJHtDUD0iY3AgLWYifQotOiAke01WPSJtdiAtZiJ9Ci06ICR7Uk09InJtIC1mIn0KLQotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGx0X3Vuc2V0PXVuc2V0Ci1lbHNlCi0gIGx0X3Vuc2V0PWZhbHNlCi1maQotCi0KLQotCi0KLSMgdGVzdCBFQkNESUMgb3IgQVNDSUkKLWNhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KLSBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQotICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKLSAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKLSAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJwotICA7OwotICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQotICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKLSAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCi0gIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KiApCi0gICAgY2FzZSAkYnVpbGQgaW4KLSAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICAgICAgICA7OwotICAgICAgKi0qLWN5Z3dpbiogKQotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLSAgICAgICAgOzsKLSAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gICotKi1jeWd3aW4qICkKLSAgICBjYXNlICRidWlsZCBpbgotICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCi0gICAgICAgIDs7Ci0gICAgICAqLSotY3lnd2luKiApCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotICAgICAgICA7OwotICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKLSAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSAgICA7OwotZXNhYwotCi1maQotCi10b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQotJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl90b190b29sX2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgotbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi1jYXNlICRob3N0IGluCi0gICotKi1taW5ndyogKQotICAgIGNhc2UgJGJ1aWxkIGluCi0gICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0gICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLWVzYWMKLQotZmkKLQotdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9Ci0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KLXJlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZwotY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSIiIHwgIiAiKikgOzsKLSopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OwotZXNhYwotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz1mYWxzZQotICAgIGZpCi0gICAgOzsKLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHdsLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBlbHNlCi0gICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZmkKLSAgICA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCi1pZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKLSRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCi1pZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgotICAgIE9CSkRVTVA9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKLSAgZmkKLWVsc2UKLSAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKLWZpCi0KLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJwotbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Ci1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAotIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgotIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jICd1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KLSMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KLSMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgdGhhdCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgJ2ZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyICdwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4WzQtOV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVs0NV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJwotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbwotICA7OwotCi1jeWd3aW4qKQotICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgOzsKLQotbWluZ3cqIHwgcHczMiopCi0gICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCi0gICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCi0gIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgZWxzZQotICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICBmaQotICA7OwotCi1jZWdjYyopCi0gICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCi0gICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIGZpCi0gIDs7Ci0KLWhhaWt1KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaHB1eDEwLjIwKiB8IGhwdXgxMSopCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KLSAgICA7OwotICBocHBhKjY0KikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCi0gICAgOzsKLSAgKikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV1cLlswLTldKSBzaGFyZWQgbGlicmFyeScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW5ld29zNiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KLSAgOzsKLQotKm50byogfCAqcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotb3BlbmJzZCogfCBiaXRyaWcqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXJkb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zb2xhcmlzKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXRwZiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci1vczIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KLQotZmlsZV9tYWdpY19nbG9iPQotd2FudF9ub2Nhc2VnbG9iPW5vCi1pZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG1pbmd3KiB8IHB3MzIqKQotICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKLSAgICBlbHNlCi0gICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotZmkKLQotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1ETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotICBhY19jdF9ETExUT09MPSRETExUT09MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQotJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCi0gICAgRExMVE9PTD0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAotICBmaQotZWxzZQotICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgotZmkKLQotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJwotCi1jYXNlICRob3N0X29zIGluCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2g7Ci0gICMgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCi0gIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgotICAqLS1pZGVudGlmeS1zdHJpY3QqKQotICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgotICAgIDs7Ci0gICopCi0gICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCi0gICAgOzsKLSAgZXNhYwotICA7OwotKikKLSAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0gIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCi0gIDs7Ci1lc2FjCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKLSRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi10ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCi0KLQotCi0KLQotCi0KLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBhcgotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUFSPSRhY19jdl9wcm9nX0FSCi1pZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQotJGFzX2VjaG8gIiRBUiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJEFSIjsgdGhlbgotICBhY19jdF9BUj0kQVIKLSAgZm9yIGFjX3Byb2cgaW4gYXIKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9BUis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCi1pZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQotJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KLSAgICBBUj0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQVI9JGFjX2N0X0FSCi0gIGZpCi1maQotCi06ICR7QVI9YXJ9Ci06ICR7QVJfRkxBR1M9Y3J1fQotCi0KLQotCi0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfYXJfYXRfZmlsZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X2FyX2F0X2ZpbGU9bm8KLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKLSAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JwotICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKLSAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSAgICAgIGlmIHRlc3QgMCAtZXEgIiRhY19zdGF0dXMiOyB0aGVuCi0JIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KLQlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKLQl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQotICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotCWlmIHRlc3QgMCAtbmUgIiRhY19zdGF0dXMiOyB0aGVuCi0gICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACi0gICAgICAgIGZpCi0gICAgICBmaQotICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQotCi1pZiB0ZXN0IG5vID0gIiRsdF9jdl9hcl9hdF9maWxlIjsgdGhlbgotICBhcmNoaXZlcl9saXN0X3NwZWM9Ci1lbHNlCi0gIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQotZmkKLQotCi0KLQotCi0KLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1TVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAotaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKLSRhc19lY2hvICIkU1RSSVAiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgotICBhY19jdF9TVFJJUD0kU1RSSVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgotICAgIFNUUklQPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIFNUUklQPSRhY19jdF9TVFJJUAotICBmaQotZWxzZQotICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCi1maQotCi10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1SQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1Ci0kYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgotICBhY19jdF9SQU5MSUI9JFJBTkxJQgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KLSAgICBSQU5MSUI9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgUkFOTElCPSRhY19jdF9SQU5MSUIKLSAgZmkKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCi1maQotCi10ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgotCi0KLQotCi0KLQotIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9Ci0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYml0cmlnKiB8IG9wZW5ic2QqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKLSAgICA7OwotICAqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKLSAgICA7OwotICBlc2FjCi0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCi1maQotCi1jYXNlICRob3N0X29zIGluCi0gIGRhcndpbiopCi0gICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OwotICAqKQotICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCi0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQotCi0jIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCi1zeW1jb2RlPSdbQkNERUdSU1RdJwotCi0jIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KLXN5bXBhdD0nXChbX0EtWmEtel1bX0EtWmEtejAtOV0qXCknCi0KLSMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCi1jYXNlICRob3N0X29zIGluCi1haXgqKQotICBzeW1jb2RlPSdbQkNEVF0nCi0gIDs7Ci1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gIHN5bWNvZGU9J1tBQkNER0lTVFddJwotICA7OwotaHB1eCopCi0gIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0gICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCi0gIGZpCi0gIDs7Ci1pcml4KiB8IG5vbnN0b3B1eCopCi0gIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbQkNERUdRUlNUXScKLSAgOzsKLXNvbGFyaXMqKQotICBzeW1jb2RlPSdbQkRSVF0nCi0gIDs7Ci1zY28zLjJ2NSopCi0gIHN5bWNvZGU9J1tEVF0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW0RUXScKLSAgOzsKLXN5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gIHN5bWNvZGU9J1tBQkRUXScKLSAgOzsKLXN5c3Y0KQotICBzeW1jb2RlPSdbREZOU1RVXScKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7Ci1lc2FjCi0KLWlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCi0gICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgotICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgotICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCi0gIGx0X2NfbmFtZV9saWJfaG9vaz0iXAotICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAotICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgotZWxzZQotICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQotICBsdF9jZGVjbF9ob29rPQotICBsdF9jX25hbWVfaG9vaz0KLSAgbHRfY19uYW1lX2xpYl9ob29rPQotZmkKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KLSMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAotIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCi0kbHRfY2RlY2xfaG9va1wKLSIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAotJGx0X2NfbmFtZV9ob29rXAotIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKLSMgc3ltYm9sIGFkZHJlc3MuCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAotJGx0X2NfbmFtZV9saWJfaG9va1wKLSIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCi0iIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAotICA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKLSAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KLSAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKLSAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgJyJcCi0iICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKLSIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAotIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCi0iICAgICAvXiAqU3ltYm9sIG5hbWUgKjogL3tzcGxpdChcJCAwLHNuLFwiOlwiKTsgc2k9c3Vic3RyKHNuWzJdLDIpfTsiXAotIiAgICAgL14gKlR5cGUgKjogY29kZS97cHJpbnQgXCJUXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCi0iICAgICAvXiAqVHlwZSAqOiBkYXRhL3twcmludCBcIklcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKLSIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCi0iICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCi0iICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKLSIgICAgIHtmPVwiRFwifTsgXCQgMH4vXChcKS4qXHwve2Y9XCJUXCJ9OyJcCi0iICAgICB7c3BsaXQoXCQgMCxhLC9cfHxcci8pOyBzcGxpdChhWzJdLHMpfTsiXAotIiAgICAgc1sxXX4vXltAP10ve3ByaW50IGYsc1sxXSxzWzFdOyBuZXh0fTsiXAotIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCBmLHRbMV0sc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAotIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKLSAgZWxzZQotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0gIGZpCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKLQotICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgcGlwZV93b3Jrcz1ubwotCi0gIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotY2hhciBubV90ZXN0X3ZhcjsKLXZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwotdm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLWludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9Ci1fTFRfRU9GCi0KLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgotICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCi0gICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3RcIiI7IH0gPiY1Ci0gIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCi0gICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgotICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KLQltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKLSAgICAgIGVsc2UKLQlybSAtZiAiJG5saXN0IlQKLSAgICAgIGZpCi0KLSAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KLSAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAotLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0jaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQotLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCi0gICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCi0jIGRlZmluZSBMVF9ETFNZTV9DT05TVAotI2VsaWYgZGVmaW5lZCBfX29zZl9fCi0vKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxzZQotIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLV9MVF9FT0YKLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi1MVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICB2b2lkICAgICAgICphZGRyZXNzOwotfQotbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXsKLSAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAotX0xUX0VPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKLQkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSAgezAsICh2b2lkICopIDB9Ci19OwotCi0vKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KLSNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKLXN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7Ci0gIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1fTFRfRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwotCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0JICBMSUJTPWNvbmZ0c3RtLiRhY19vYmpleHQKLQkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKLQkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUwotCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1Ci0JZmkKLSAgICAgIGVsc2UKLQllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLSAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgotCi0gICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KLSAgaWYgdGVzdCB5ZXMgPSAiJHBpcGVfd29ya3MiOyB0aGVuCi0gICAgYnJlYWsKLSAgZWxzZQotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9Ci0gIGZpCi1kb25lCi0KLWZpCi0KLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KLWZpCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1Ci0kYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKLSRhc19lY2hvICJvayIgPiY2OyB9Ci1maQotCi0jIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KLWlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgotICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNyb290IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9zeXNyb290OwotZWxzZQotICB3aXRoX3N5c3Jvb3Q9bm8KLWZpCi0KLQotbHRfc3lzcm9vdD0KLWNhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAotIHllcykKLSAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCi0gICBmaQotICAgOzsgIygKLSAvKikKLSAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgIDs7ICMoCi0gbm98JycpCi0gICA7OyAjKAotICopCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfc3lzcm9vdCIgPiY1Ci0kYXNfZWNobyAiJHdpdGhfc3lzcm9vdCIgPiY2OyB9Ci0gICBhc19mbl9lcnJvciAkPyAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKLSAgIDs7Ci1lc2FjCi0KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQotJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHdvcmtpbmcgZGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgd29ya2luZyBkZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX2x0X0REKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCi1jYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQotOiAke2x0X0REOj0kRER9Ci1pZiB0ZXN0IC16ICIkbHRfREQiOyB0aGVuCi0gIGFjX3BhdGhfbHRfRERfZm91bmQ9ZmFsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGRkOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9sdF9ERD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfbHRfREQiIHx8IGNvbnRpbnVlCi1pZiAiJGFjX3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KLSAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKLSAgJiYgYWNfY3ZfcGF0aF9sdF9ERD0iJGFjX3BhdGhfbHRfREQiIGFjX3BhdGhfbHRfRERfZm91bmQ9OgotZmkKLSAgICAgICRhY19wYXRoX2x0X0REX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9sdF9ERCI7IHRoZW4KLSAgICA6Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfbHRfREQ9JGx0X0RECi1maQotCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9sdF9ERCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3BhdGhfbHRfREQiID4mNjsgfQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHRydW5jYXRlIGJpbmFyeSBwaXBlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gdHJ1bmNhdGUgYmluYXJ5IHBpcGVzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3RydW5jYXRlX2Jpbis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIHByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQotY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKLWx0X2N2X3RydW5jYXRlX2Jpbj0KLWlmICIkYWNfY3ZfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgotICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAotICAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRhY19jdl9wYXRoX2x0X0REIGJzPTQwOTYgY291bnQ9MSIKLWZpCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dAotdGVzdCAteiAiJGx0X2N2X3RydW5jYXRlX2JpbiIgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkU0VEIC1lIDRxIgotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdHJ1bmNhdGVfYmluIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiA+JjY7IH0KLQotCi0KLQotCi0KLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1mdW5jX2NjX2Jhc2VuYW1lICgpCi17Ci0gICAgZm9yIGNjX3RlbXAgaW4gJCoiIjsgZG8KLSAgICAgIGNhc2UgJGNjX3RlbXAgaW4KLSAgICAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgICAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgICAgICBcLSopIDs7Ci0gICAgICAgICopIGJyZWFrOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0gICAgZnVuY19jY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCi19Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOwotZmkKLQotdGVzdCBubyA9ICIkZW5hYmxlX2xpYnRvb2xfbG9jayIgfHwgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IG1vZGUKLSAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKkVMRi0zMiopCi0JSFBVWF9JQTY0X01PREU9MzIKLQk7OwotICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9NjQKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCi0gIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLQkgIDs7Ci0JKjY0LWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0JOzsKLSAgICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLTMyIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbjMyIgotCSAgOzsKLQkqNjQtYml0KikKLQkgIExEPSIke0xELWxkfSAtNjQiCi0JICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotbWlwczY0Ki0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgIGVtdWw9ZWxmCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKjMyLWJpdCopCi0JZW11bD0iJHtlbXVsfTMyIgotCTs7Ci0gICAgICAqNjQtYml0KikKLQllbXVsPSIke2VtdWx9NjQiCi0JOzsKLSAgICBlc2FjCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKk1TQiopCi0JZW11bD0iJHtlbXVsfWJ0c21pcCIKLQk7OwotICAgICAgKkxTQiopCi0JZW11bD0iJHtlbXVsfWx0c21pcCIKLQk7OwotICAgIGVzYWMKLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgICAqTjMyKikKLQllbXVsPSIke2VtdWx9bjMyIgotCTs7Ci0gICAgZXNhYwotICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQotICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KLSAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCi0gICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbwotICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgICAqMzItYml0KikKLQljYXNlICRob3N0IGluCi0JICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotCSAgICA7OwotCSAgeDg2XzY0LSpsaW51eCopCi0JICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLQkgICAgICAqeDg2LTY0KikKLQkJTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKLQkJOzsKLQkgICAgICAqKQotCQlMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0JCTs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgIHBvd2VycGM2NGxlLSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGYzMmxwcGNsaW51eCIKLQkgICAgOzsKLQkgIHBvd2VycGM2NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKLQkgICAgOzsKLQkgIHMzOTB4LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKLQkgICAgOzsKLQkgIHNwYXJjNjQtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKjY0LWJpdCopCi0JY2FzZSAkaG9zdCBpbgotCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotCSAgICA7OwotCSAgeDg2XzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotCSAgICA7OwotCSAgcG93ZXJwY2xlLSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NGxwcGMiCi0JICAgIDs7Ci0JICBwb3dlcnBjLSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLQkgICAgOzsKLQkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotCSAgICA7OwotCSAgc3BhcmMqLSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0kQ0ZMQUdTCi0gIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfY2NfbmVlZHNfYmVsZis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKLWVsc2UKLSAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQotICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2NjX25lZWRzX2JlbGYiOyB0aGVuCi0gICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCi0gICAgQ0ZMQUdTPSRTQVZFX0NGTEFHUwotICBmaQotICA7OwotKi0qc29sYXJpcyopCi0gICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKLSAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICo2NC1iaXQqKQotICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KLSAgICAgIHllcyopCi0gICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgaT84Ni0qLXNvbGFyaXMqfHg4Nl82NC0qLXNvbGFyaXMqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgICMgR05VIGxkIDIuMjEgaW50cm9kdWNlZCBfc29sMiBlbXVsYXRpb25zLiAgVXNlIHRoZW0gaWYgYXZhaWxhYmxlLgotICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgICAgTEQ9JHtMRC1sZH1fc29sMgotICAgICAgICBmaQotICAgICAgICA7OwotICAgICAgKikKLQlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgIExEPSIke0xELWxkfSAtNjQiCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLWVzYWMKLQotbmVlZF9sb2Nrcz0kZW5hYmxlX2xpYnRvb2xfbG9jawotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKLWlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQotJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgotICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG10OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQotJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCi0gICAgTUFOSUZFU1RfVE9PTD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCi0gIGZpCi1lbHNlCi0gIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCi1maQotCi10ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1Ci0gICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QqCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQotaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiOyB0aGVuCi0gIE1BTklGRVNUX1RPT0w9OgotZmkKLQotCi0KLQotCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgotICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1EU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAotaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKLSRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgotICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKLWlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgotICAgIERTWU1VVElMPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAotICBmaQotZWxzZQotICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLU5NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKLWlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKLSRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCi0gIGFjX2N0X05NRURJVD0kTk1FRElUCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAotaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQotJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgotICAgIE5NRURJVD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBOTUVESVQ9JGFjX2N0X05NRURJVAotICBmaQotZWxzZQotICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKLWZpCi0KLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0xJUE8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1MSVBPPSRhY19jdl9wcm9nX0xJUE8KLWlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQotJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgotICBhY19jdF9MSVBPPSRMSVBPCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfTElQTys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KLWlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQotJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCi0gICAgTElQTz0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBMSVBPPSRhY19jdF9MSVBPCi0gIGZpCi1lbHNlCi0gIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX09UT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1PVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAotaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKLSRhc19lY2hvICIkT1RPT0wiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgotICBhY19jdF9PVE9PTD0kT1RPT0wKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgotICAgIE9UT09MPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIE9UT09MPSRhY19jdF9PVE9PTAotICBmaQotZWxzZQotICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0Ci1pZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKLSRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KLSAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Ci1pZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKLSRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgotICAgIE9UT09MNjQ9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAotICBmaQotZWxzZQotICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiRMVF9NVUxUSV9NT0RVTEUiOyB0aGVuCi0JIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCi0JIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCi0JIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQotCSMgbGluayBmbGFncy4KLQlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0JZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKLQllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAotLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mNQotCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCi0JICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgotICAgICAgICBfbHRfcmVzdWx0PSQ/Ci0JIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKLQkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZwotICAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBzaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmVycjsgdGhlbgotCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLQkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQotCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCi0JZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCI7IHRoZW4KLQkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0JZWxzZQotCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLQlmaQotCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLQlybSAtZiBjb25mdGVzdC4qCi0gICAgICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KLSAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCi0gICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllcwotZWxzZQotICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCUxERkxBR1M9JHNhdmVfTERGTEFHUwotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2xkX2ZvcmNlX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JjUKLSAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQotICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQotICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQotICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKLSAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1Ci0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBtYWluKCkgeyByZXR1cm4gMDt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JjUKLSAgICAgICRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEgMj5jb25mdGVzdC5lcnIKLSAgICAgIF9sdF9yZXN1bHQ9JD8KLSAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCi0JY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMTsgdGhlbgotCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCi0gICAgICBlbHNlCi0JY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgICAgIGZpCi0gICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKLSAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNjsgfQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgICBkYXJ3aW4xLiopCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KLSAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKLSAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50Ci0gICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KLSAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KLQkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLQkxMC5bMDEyXVssLl0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0JMTAuKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgotICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKLSAgICBmaQotICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiOyB0aGVuCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHdsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bScKLSAgICBlbHNlCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bSAkbGliJwotICAgIGZpCi0gICAgaWYgdGVzdCA6ICE9ICIkRFNZTVVUSUwiICYmIHRlc3Qgbm8gPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCi0gICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JwotICAgIGVsc2UKLSAgICAgIF9sdF9kc3ltdXRpbD0KLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLQotIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFZBUklBQkxFIGlzIG5hbWUgb2YgdmFyaWFibGUgY29udGFpbmluZyBfc3BhY2VfIHNlcGFyYXRlZCBsaXN0IG9mCi0jIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCi0jIGhhdmluZyBhIGZvcm1hdDoKLSMgIkRJUls6RElSXToiCi0jICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQotIyAiOkRJUls6RElSXSIKLSMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKLSMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKLSMgICAgICAgc3RyaW5nICJESVJQWyBESVJQXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUgYW5kIHN0cmluZwotIyAgICAgICAiRElSQVsgRElSQV0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKLSMgIkRJUls6RElSXSIKLSMgICAgICAgVkFSSUFCTEUgd2lsbCBiZSByZXBsYWNlZCBieSAiRElSWyBESVJdIgotZnVuY19tdW5nZV9wYXRoX2xpc3QgKCkKLXsKLSAgICBjYXNlIHgkMiBpbgotICAgIHgpCi0gICAgICAgIDs7Ci0gICAgKjopCi0gICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2AgXCQkMVwiCi0gICAgICAgIDs7Ci0gICAgeDoqKQotICAgICAgICBldmFsICQxPVwiXCQkMSBgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgotICAgICAgICA7OwotICAgICo6OiopCi0gICAgICAgIGV2YWwgJDE9XCJcJCQxXCBgJEVDSE8gJDIgfCAkU0VEIC1lICdzLy4qOjovLycgLWUgJ3MvOi8gL2cnYFwiCi0gICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXCQkMVwiCi0gICAgICAgIDs7Ci0gICAgKikKLSAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCi0gICAgICAgIDs7Ci0gICAgZXNhYwotfQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9Ci0jIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgotaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KLSAgQ1BQPQotZmkKLWlmIHRlc3QgLXogIiRDUFAiOyB0aGVuCi0gIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCi0gICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKLSAgICBkbwotICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0gIGJyZWFrCi1maQotCi0gICAgZG9uZQotICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKLQotZmkKLSAgQ1BQPSRhY19jdl9wcm9nX0NQUAotZWxzZQotICBhY19jdl9wcm9nX0NQUD0kQ1BQCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQotJGFzX2VjaG8gIiRDUFAiID4mNjsgfQotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0KLWVsc2UKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotZmkKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLQotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLQotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgOgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKLSMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKLSNlbHNlCi0jIGRlZmluZSBJU0xPV0VSKGMpIFwKLQkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKLQkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCi0JCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQotI2VuZGlmCi0KLSNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCi1pbnQKLW1haW4gKCkKLXsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCi0JfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCi0gICAgICByZXR1cm4gMjsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQotZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi0jIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgotZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCi0JCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAotZG8gOgotICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RMRkNOX0ggMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0gIEdTVF9DVVJSRU5UPTEwMDQKLSAgR1NUX1JFVklTSU9OPTAKLSAgR1NUX0FHRT0xMDA0Ci0gIEdTVF9MSUJWRVJTSU9OPTEwMDQ6MDoxMDA0Ci0KLQotCi0KLQotICBHU1RfTFRfTERGTEFHUz0iJEdTVF9MVF9MREZMQUdTIC12ZXJzaW9uLWluZm8gJEdTVF9MSUJWRVJTSU9OIgotICBpZiB0ZXN0ICEgLXogIiIKLSAgdGhlbgotICAgIEdTVF9MVF9MREZMQUdTPSIkR1NUX0xUX0xERkxBR1MgLXJlbGVhc2UgIgotICBmaQotCi0KLQotCi0KLQotCi0jIFNldCBvcHRpb25zCi1lbmFibGVfZGxvcGVuPXllcwotZW5hYmxlX3dpbjMyX2RsbD15ZXMKLQotY2FzZSAkaG9zdCBpbgotKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXM7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0FTKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgotICBhY19jdl9wcm9nX0FTPSIkQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19BUz0iJHthY190b29sX3ByZWZpeH1hcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1BUz0kYWNfY3ZfcHJvZ19BUwotaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFTIiA+JjUKLSRhc19lY2hvICIkQVMiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgotICBhY19jdF9BUz0kQVMKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0FTKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0FTPSIkYWNfY3RfQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iYXMiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKLWlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0FTIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQVMiID0geDsgdGhlbgotICAgIEFTPSJmYWxzZSIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBBUz0kYWNfY3RfQVMKLSAgZmkKLWVsc2UKLSAgQVM9IiRhY19jdl9wcm9nX0FTIgotZmkKLQotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1ETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotICBhY19jdF9ETExUT09MPSRETExUT09MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQotJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCi0gICAgRExMVE9PTD0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAotICBmaQotZWxzZQotICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgotZmkKLQotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1PQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKLWlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQotJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgotICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKLWlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCi0gICAgT0JKRFVNUD0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAotICBmaQotZWxzZQotICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgotZmkKLQotICA7OwotZXNhYwotCi10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi0KLQotCi0KLQotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotCi0KLQotCi0KLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSRsdF9zYXZlX2lmcwotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgZW5hYmxlX3N0YXRpYz1ubwotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKLSAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9JGx0X3NhdmVfaWZzCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfc2hhcmVkPXllcwotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9waWM7IGx0X3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkd2l0aHZhbCBpbgotICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKLSAgICAqKQotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbwotCUlGUz0kbHRfc2F2ZV9pZnMKLQlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgotCSAgcGljX21vZGU9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBwaWNfbW9kZT1kZWZhdWx0Ci1maQotCi0KLQotCi0KLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9mYXN0X2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0kbHRfc2F2ZV9pZnMKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSRsdF9zYXZlX2lmcwotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi1maQotCi0KLQotCi0KLQotCi0KLSAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9Ci1jYXNlICRob3N0LCRlbmFibGVfc2hhcmVkIGluCi1wb3dlciotKi1haXhbNS05XSoseWVzKQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIHZhcmlhbnQgb2Ygc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB0byBwcm92aWRlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIHZhcmlhbnQgb2Ygc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB0byBwcm92aWRlLi4uICIgPiY2OyB9Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWl4LXNvbmFtZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYWl4X3NvbmFtZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfYWl4X3NvbmFtZTsgY2FzZSAkd2l0aHZhbCBpbgotICAgIGFpeHxzdnI0fGJvdGgpCi0gICAgICA7OwotICAgICopCi0gICAgICBhc19mbl9lcnJvciAkPyAiVW5rbm93biBhcmd1bWVudCB0byAtLXdpdGgtYWl4LXNvbmFtZSIgIiRMSU5FTk8iIDUKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGx0X2N2X3dpdGhfYWl4X3NvbmFtZT0kd2l0aF9haXhfc29uYW1lCi1lbHNlCi0gIGlmICR7bHRfY3Zfd2l0aF9haXhfc29uYW1lKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3Zfd2l0aF9haXhfc29uYW1lPWFpeAotZmkKLQotICAgIHdpdGhfYWl4X3NvbmFtZT0kbHRfY3Zfd2l0aF9haXhfc29uYW1lCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9haXhfc29uYW1lIiA+JjUKLSRhc19lY2hvICIkd2l0aF9haXhfc29uYW1lIiA+JjY7IH0KLSAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0gICAgIyBGb3IgdGhlIEFJWCB3YXkgb2YgbXVsdGlsaWIsIHdlIG5hbWUgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlcgotICAgICMgYmFzZWQgb24gdGhlIGJpdHdpZHRoIHVzZWQsIHRyYWRpdGlvbmFsbHkgJ3Noci5vJyBvciAnc2hyXzY0Lm8nLAotICAgICMgYW5kICdzaHIuaW1wJyBvciAnc2hyXzY0LmltcCcsIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBJbXBvcnQgRmlsZS4KLSAgICAjIEV2ZW4gd2hlbiBHTlUgY29tcGlsZXJzIGlnbm9yZSBPQkpFQ1RfTU9ERSBidXQgbmVlZCAnLW1haXg2NCcgZmxhZywKLSAgICAjIHRoZSBBSVggdG9vbGNoYWluIHdvcmtzIGJldHRlciB3aXRoIE9CSkVDVF9NT0RFIHNldCAoZGVmYXVsdCAzMikuCi0gICAgaWYgdGVzdCA2NCA9ICIke09CSkVDVF9NT0RFLTMyfSI7IHRoZW4KLSAgICAgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPXNocl82NAotICAgIGVsc2UKLSAgICAgIHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPXNocgotICAgIGZpCi0gIGZpCi0gIDs7Ci0qKQotICB3aXRoX2FpeF9zb25hbWU9YWl4Ci0gIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLSMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0kbHRtYWluCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLXRlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCi0gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3Zfb2JqZGlyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKLW1rZGlyIC5saWJzIDI+L2Rldi9udWxsCi1pZiB0ZXN0IC1kIC5saWJzOyB0aGVuCi0gIGx0X2N2X29iamRpcj0ubGlicwotZWxzZQotICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgotICBsdF9jdl9vYmpkaXI9X2xpYnMKLWZpCi1ybWRpciAubGlicyAyPi9kZXYvbnVsbAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKLSRhc19lY2hvICIkbHRfY3Zfb2JqZGlyIiA+JjY7IH0KLW9iamRpcj0kbHRfY3Zfb2JqZGlyCi0KLQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBMVF9PQkpESVIgIiRsdF9jdl9vYmpkaXIvIgotX0FDRU9GCi0KLQotCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0gICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotCi13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotb2xkX0NDPSRDQwotb2xkX0NGTEFHUz0kQ0ZMQUdTCi0KLSMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KLQotZnVuY19jY19iYXNlbmFtZSAkY29tcGlsZXIKLWNjX2Jhc2VuYW1lPSRmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdAotCi0KLSMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi1maWxlX21hZ2ljKikKLSAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkTUFHSUNfQ01EIGluCi1bXFwvKl0gfCAgPzpbXFwvXSopCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iJHthY190b29sX3ByZWZpeH1maWxlIgotICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JImZpbGVfbWFnaWMgIiopCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKLQkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKLQkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKLSoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KLSoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcwotKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0Ci0qKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKLSoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKLSoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KLSoqKiBidWctbGlidG9vbEBnbnUub3JnCi0KLV9MVF9FT0YKLQkgIGZpIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9JGx0X3NhdmVfaWZzCi0gIE1BR0lDX0NNRD0kbHRfc2F2ZV9NQUdJQ19DTUQKLSAgOzsKLWVzYWMKLWZpCi0KLU1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKLWlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKLSRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLQotCi0KLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRNQUdJQ19DTUQgaW4KLVtcXC8qXSB8ICA/OltcXC9dKikKLSAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKLSAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSRsdF9zYXZlX2lmcwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci9maWxlIjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iZmlsZSIKLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSJmaWxlX21hZ2ljICIqKQotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECi0JICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8Ci0JICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCi0qKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCi0qKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKLSoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAotKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCi0qKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91Ci0qKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCi0qKiogYnVnLWxpYnRvb2xAZ251Lm9yZwotCi1fTFRfRU9GCi0JICBmaSA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSRsdF9zYXZlX2lmcwotICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECi0gIDs7Ci1lc2FjCi1maQotCi1NQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECi1pZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1Ci0kYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIGVsc2UKLSAgICBNQUdJQ19DTUQ9OgotICBmaQotZmkKLQotICBmaQotICA7OwotZXNhYwotCi0jIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotCi1sdF9zYXZlX0NDPSRDQwotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHQ9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JwotCi0KLQotCi0KLQotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLSMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgotIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCi1jb21waWxlcl9ERUZBVUxUPSRDQwotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRSTSAtciBjb25mdGVzdCoKLQotCi0jIyBDQVZFQVQgRU1QVE9SOgotIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKLSMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0jIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLWlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLQotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9Ci0KLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gIG52Y2MqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtZm5vLWJ1aWx0aW4nIDs7Ci0gIGVzYWMKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcwotICAgICBmaQotICAgZmkKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9Ci0KLWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyI7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi1lbHNlCi0gICAgOgotZmkKLQotZmkKLQotCi0KLQotCi0KLSAgbHRfcHJvZ19jb21waWxlcl93bD0KLWx0X3Byb2dfY29tcGlsZXJfcGljPQotbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Ci0KLQotICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLSAgICAgICAgOzsKLSAgICAgIG02OGspCi0gICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCi0gICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSckd2wtc3RhdGljJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KLSAgICAgIDs7Ci0KLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAotICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCi0gICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1YbGlua2VyICcKLSAgICAgIGlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyI7IHRoZW4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Ii1YY29tcGlsZXIgJGx0X3Byb2dfY29tcGlsZXJfcGljIgotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICBlbHNlCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBuYWdmb3IqKQotICAgICAgICAjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSckd2wtc3RhdGljJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nJHdsLWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotICAgICAgZWNjKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgotICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCi0gICAgICBpY2MqIHwgaWZvcnQqKQotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KLSAgICAgIGxmOTUqKQotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKLQk7OwotICAgICAgbmFnZm9yKikKLQkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLQk7OwotICAgICAgdGNjKikKLQkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwotCTs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQotCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbMS03XS4qIHwgKlN1bipGb3J0cmFuKlwgOC5bMC0zXSopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsPScnCi0JICA7OwotCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKLQkgIDs7Ci0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQkgIDs7Ci0gICAgICAgICpJbnRlbCpcIFtDRl0qQ29tcGlsZXIqKQotCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwotCSAgOzsKLQkqUG9ydGxhbmRcIEdyb3VwKikKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKm50byogfCAqcW54KikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgotICAgIDs7Ci1lc2FjCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQotbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz1ubwotICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50Ci0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQotCi1pZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQotICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KLWZpCi0KLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCi0gICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9Ci0KLWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyI7IHRoZW4KLSAgICA6Ci1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Ci1maQotCi0KLQotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KLSAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRSTSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgICRSTSAtciBjb25mdGVzdAotICAgJFJNIGNvbmZ0ZXN0KgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubwotICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJFJNIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgJFJNIC1yIGNvbmZ0ZXN0Ci0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQotCi0KLQotCi1oYXJkX2xpbmtzPW5vdHRlc3RlZAotaWYgdGVzdCBubyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9Ci0gIGhhcmRfbGlua3M9eWVzCi0gICRSTSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci0kYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQotICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotCi0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwotICBhcmNoaXZlX2NtZHM9Ci0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9Ci0gIGNvbXBpbGVyX25lZWRzX29iamVjdD1ubwotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCi0gIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KLSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KLSAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT1ubwotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQotICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQotICBoYXJkY29kZV9taW51c19MPW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKLSAgaW5oZXJpdF9ycGF0aD1ubwotICBsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KLSAgbW9kdWxlX2NtZHM9Ci0gIG1vZHVsZV9leHBzeW1fY21kcz0KLSAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KLSAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9Ci0gIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0gICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKLSAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKLSAgaW5jbHVkZV9leHBzeW1zPQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSAnICgnIGFuZCAnKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiAnYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzICdhJyBhbmQgJ2JjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyAnZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltcz0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJwotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgotICBleHRyYWN0X2V4cHN5bXNfY21kcz0KLQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICBmaQotICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCogfCBiaXRyaWcqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSB8IGdudSopCi0gICAgbGlua19hbGxfZGVwbGlicz1ubwotICAgIDs7Ci0gIGVzYWMKLQotICBsZF9zaGxpYnM9eWVzCi0KLSAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCi0gICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgotICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLQkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKLQkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCi0JIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKLQkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgotCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgotCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7Ci0JICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bMi05XSopIDs7Ci0JICAqXCBcKEdOVVwgQmludXRpbHNcKVwgWzMtOV0qKSA7OwotCSAgKikKLQkgICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAqKQotCWx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcwotCTs7Ci0gICAgZXNhYwotICBmaQotCi0gIGlmIHRlc3QgeWVzID0gIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSI7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPSckd2wnCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IHwgJFNFRCAtZSAncy8oXilcKylcc1wrLy8nIDI+JjFgIGluCi0gICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeFszLTldKikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotCWxkX3NobGlicz1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKLSoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgotKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91Ci0qKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCi0qKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCi0qKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KLQotX0xUX0VPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLQkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWFsbC1zeW1ib2xzJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCi0JIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCi0gICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgZml+Ci0gICAgICAgICRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaGFpa3UqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIHNocmV4dF9jbWRzPS5kbGwKLSAgICAgIGFyY2hpdmVfY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQllbXhleHAgJGxpYm9ianMgfCAkU0VEIC8iX0RMTF9Jbml0VGVybSIvZCA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCXByZWZpeF9jbWRzPSIkU0VEIn4KLQlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCWZpfgotCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKLSAgICAgIHRtcF9kaWV0PW5vCi0gICAgICBpZiB0ZXN0IGxpbnV4LWRpZXRsaWJjID0gIiRob3N0X29zIjsgdGhlbgotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAotCSAmJiB0ZXN0IG5vID0gIiR0bXBfZGlldCIKLSAgICAgIHRoZW4KLQl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKLQljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLSAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKLQkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0JICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7Ci0gICAgICAgIG5hZ2ZvciopICAgICAgICAgICAgICAgICAgICAgICAgIyBOQUdGT1IgNS4zCi0gICAgICAgICAgdG1wX3NoYXJlZGZsYWc9Jy1XbCwtc2hhcmVkJyA7OwotCXhsW2NDXSogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCi0JICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKLQkgIHRtcF9hZGRmbGFnPSA7OwotCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCi0JICA7OwotCWVzYWMKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0gICAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCi0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLSAgICAgICAgZmkKLQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JdGNjKikKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nLXJkeW5hbWljJwotCSAgOzsKLQl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCi0JICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotCSAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCSAgZmkKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotICAgICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlicz1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCi0gICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCi0JbGRfc2hsaWJzPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW5ub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLQkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCi0JICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0JICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBsZF9zaGxpYnM9bm8KLQkgIGZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0IG5vID0gIiRsZF9zaGxpYnMiOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Ci0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ci0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyIgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCWhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhaXhbNC05XSopCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPQotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gR05VIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgdG8gQUlYIG5tLgotCSMgV2l0aG91dCB0aGUgIi1sIiBvcHRpb24sIG9yIHdpdGggdGhlICItQiIgb3B0aW9uLCBBSVggbm0gdHJlYXRzCi0JIyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMKLQkjIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KLQkjIFdoaWxlIHRoZSAnd2Vhaycga2V5d29yZCBpcyBpZ25vcmVkIGluIHRoZSBFeHBvcnQgRmlsZSwgd2UgbmVlZAotCSMgaXQgaW4gdGhlIEltcG9ydCBGaWxlIGZvciB0aGUgJ2FpeC1zb25hbWUnIGZlYXR1cmUsIHNvIHdlIGhhdmUKLQkjIHRvIHJlcGxhY2UgdGhlICItQiIgb3B0aW9uIHdpdGggIi1QIiBmb3IgQUlYIG5tLgotCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nYGZ1bmNfZWNob19hbGwgJE5NIHwgJFNFRCAtZSAnXCcncy9CXChbXkJdKlwpJC9QXDEvJ1wnJ2AgLVBDcGdsICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSAmJiAoc3Vic3RyKFwkIDEsMSwxKSAhPSAiLiIpKSB7IGlmICgoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgeyBwcmludCBcJCAxICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMSB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWZpCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0JIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0JIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0JIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KLQkjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKLQkjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCi0JIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6Ci0JIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcwotCSMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLQkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCi0JIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKLQkjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCi0JIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KLQkjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0JIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKLQkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgaWYgKHRlc3QgeC1icnRsID0gIngkbGRfZmxhZyIgfHwgdGVzdCB4LVdsLC1icnRsID0gIngkbGRfZmxhZyIpOyB0aGVuCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIGJyZWFrCi0JICBmaQotCSAgZG9uZQotCSAgaWYgdGVzdCBzdnI0LG5vID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCi0JICAgICMgc28gd2UgZG9uJ3QgaGF2ZSBsaWIuYSBzaGFyZWQgbGlicyB0byBsaW5rIG91ciBleGVjdXRhYmxlcy4KLQkgICAgIyBXZSBoYXZlIHRvIGZvcmNlIHJ1bnRpbWUgbGlua2luZyBpbiB0aGlzIGNhc2UuCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtYnJ0bCIKLQkgIGZpCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBhcmNoaXZlX2NtZHM9JycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgICAgZmlsZV9saXN0X3NwZWM9JyR3bC1mLCcKLSAgICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgotICAgICAgYWl4LCopIDs7ICMgdHJhZGl0aW9uYWwsIG5vIGltcG9ydCBmaWxlCi0gICAgICBzdnI0LCogfCAqLHllcykgIyB1c2UgaW1wb3J0IGZpbGUKLQkjIFRoZSBJbXBvcnQgRmlsZSBkZWZpbmVzIHdoYXQgdG8gaGFyZGNvZGUuCi0JaGFyZGNvZGVfZGlyZWN0PW5vCi0JaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCi0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLQkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgOgotCSAgZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0JICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICBoYXJkY29kZV9taW51c19MPXllcwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIickd2wtRycKLQlmaQotCSMgTmVlZCB0byBlbnN1cmUgcnVudGltZSBsaW5raW5nIGlzIGRpc2FibGVkIGZvciB0aGUgdHJhZGl0aW9uYWwKLQkjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcwotCSMgL3dpdGgvIEltcG9ydCBGaWxlIC0gd2UgZG8gbm90IHdhbnQgdG8gbWl4IHRoZW0uCi0Jc2hhcmVkX2ZsYWdfYWl4PSctc2hhcmVkJwotCXNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPSckd2wtRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCi0JICBmaQotCSAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJwotCSAgc2hhcmVkX2ZsYWdfc3ZyND0nJHdsLUcnCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLWJleHBhbGwnCi0gICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0gICAgICBpZiB0ZXN0IGFpeCx5ZXMgPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKLSAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLWVsc2UKLSAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLQotICBsdF9haXhfbGlicGF0aF9zZWQ9JwotICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCSAgL14wLyB7Ci0JICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLQkgICAgICBwCi0JICB9Ci0gICAgICB9JwotICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gIGZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF89L3Vzci9saWI6L2xpYgotICBmaQotCi1maQotCi0gIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLWZpCi0KLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKLSAgICAgIGVsc2UKLQlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0JICMgZW1wdHkgZXhlY3V0YWJsZS4KLQkgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLWVsc2UKLSAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLQotICBsdF9haXhfbGlicGF0aF9zZWQ9JwotICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCSAgL14wLyB7Ci0JICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLQkgICAgICBwCi0JICB9Ci0gICAgICB9JwotICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gIGZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF89L3Vzci9saWI6L2xpYgotICBmaQotCi1maQotCi0gIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLWZpCi0KLQkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAkd2wtYmVybm90b2snCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1iZXJvaycKLQkgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBlbHNlCi0JICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJwotCSAgZmkKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcwotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQkgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgotCSAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbLCBdXFwpJS1iZXJva1xcMSVnImAnCi0JICBpZiB0ZXN0IHN2cjQgIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0JICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JENDICckc2hhcmVkX2ZsYWdfYWl4JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZScKLQkgIGZpCi0JICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCi0JICBlbHNlCi0JICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRNViAgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkb3V0cHV0X29iamRpcicKLQkgIGZpCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQlmaQotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBic2RpWzQ1XSopCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGNsKikKLQkjIE5hdGl2ZSBNU1ZDCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLQlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLQlmaWxlX2xpc3Rfc3BlYz0nQCcKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCWxpYmV4dD1saWIKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0uZGxsCi0JIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KLSAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7Ci0gICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotICAgICAgICAgIGZpfgotICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLSAgICAgICAgICBsaW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLQkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKLQllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotCWV4Y2x1ZGVfZXhwc3ltcz0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJwotCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQkjIERvbid0IHVzZSByYW5saWIKLQlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi0JcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0gICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7Ci0gICAgICAgICAgICAqKQotICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQotICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjfgotICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotICAgICAgICAgIGZpJwotCTs7Ci0gICAgICAqKQotCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCWxpYmV4dD1saWIKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0uZGxsCi0JIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0JIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLQlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJwotCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0Jb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotCi0KLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLSAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKLSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAotICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJwotCi0gIGVsc2UKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJwotICBmaQotICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICBhbGxvd191bmRlZmluZWRfZmxhZz0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKLSAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKLSAgZXNhYwotICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgotICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0KLSAgZWxzZQotICBsZF9zaGxpYnM9bm8KLSAgZmkKLQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyLiopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLQotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotCWhhcmRjb2RlX2RpcmVjdD15ZXMKLQloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKLQkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCWhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQotCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0Ci0JICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKLQkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYi4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX19iKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubwotICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICBMREZMQUdTPSIkTERGTEFHUyAtYiIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNjsgfQotCi1pZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiI7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLWVsc2UKLSAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi1maQotCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2RpcmVjdD1ubwotCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCSAgOzsKLQkqKQotCSAgaGFyZGNvZGVfZGlyZWN0PXllcwotCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKLQkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0JIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KLQkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0JICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgotCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLWludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKLWVsc2UKLSAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQotCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAkd2wtZXhwb3J0c19maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCWZpCi0JbGlua19hbGxfZGVwbGlicz1ubwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgaW5oZXJpdF9ycGF0aD15ZXMKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICA7OwotCi0gICAgbGludXgqKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIHRjYyopCi0JIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKLQlsZF9zaGxpYnM9eWVzCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCogfCBiaXRyaWcqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQloYXJkY29kZV9kaXJlY3Q9eWVzCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKLQllbHNlCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJwotCWZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIHNocmV4dF9jbWRzPS5kbGwKLSAgICAgIGFyY2hpdmVfY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQllbXhleHAgJGxpYm9ianMgfCAkU0VEIC8iX0RMTF9Jbml0VGVybSIvZCA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCXByZWZpeF9jbWRzPSIkU0VEIn4KLQlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCWZpfgotCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0gICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQl3bGFyYz0nJHdsJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotICAgICAgZWxzZQotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiQ29tcGlsZXJzIDUuMCIqKQotCSAgd2xhcmM9JycKLQkgIGFyY2hpdmVfY21kcz0nJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAgICAgICAgICAgJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQkgIDs7Ci0JKikKLQkgIHdsYXJjPSckd2wnCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCAnJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLQkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JZWxzZQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCBzZXF1ZW50ID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCkKLSAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0Jc25pKQotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3Q9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgcmVsb2FkX2NtZHM9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JbGRfc2hsaWJzPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR3bC16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBub191bmRlZmluZWRfZmxhZz0nJHdsLXosdGV4dCcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSckd2wteixub2RlZnMnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLVIsJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGxkX3NobGlicz1ubwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0IHNuaSA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtQmxhcmdlZHluc3ltJwotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQotJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQotdGVzdCBubyA9ICIkbGRfc2hsaWJzIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXdpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLQotICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAkUk0gY29uZnRlc3QqCi0JZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLQlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0JICBzb25hbWU9Y29uZnRlc3QKLQkgIGxpYj1jb25mdGVzdAotCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0JICBkZXBsaWJzPQotCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKLQkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYwotCSAgY29tcGlsZXJfZmxhZ3M9LXYKLQkgIGxpbmtlcl9mbGFncz0tdgotCSAgdmVyc3RyaW5nPQotCSAgb3V0cHV0X29iamRpcj0uCi0JICBsaWJuYW1lPWNvbmZ0ZXN0Ci0JICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0JICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotCSAgdGhlbgotCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotCSAgZWxzZQotCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLQkgIGZpCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotCWVsc2UKLQkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotCWZpCi0JJFJNIGNvbmZ0ZXN0KgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKLSAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OwotICBlc2FjCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbQS1aYS16XTpcKXxcMXxnJyA7OwotICAgICopIGx0X3NlZF9zdHJpcF9lcT0nc3w9L3wvfGcnIDs7Ci0gIGVzYWMKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKLSAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgotICAqXDsqKQotICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKLSAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKLSAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKLSAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCi0gICAgOzsKLSAgKikKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICA7OwotICBlc2FjCi0gICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0Ci0gICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5Li4uCi0gIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQotICBsdF9tdWx0aV9vc19kaXI9L2AkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKLSAgIyAuLi5idXQgaWYgc29tZSBwYXRoIGNvbXBvbmVudCBhbHJlYWR5IGVuZHMgd2l0aCB0aGUgbXVsdGlsaWIgZGlyIHdlIGFzc3VtZQotICAjIHRoYXQgYWxsIGlzIGZpbmUgYW5kIHRydXN0IC1wcmludC1zZWFyY2gtZGlycyBhcyBpcyAoR0NDIDQuMj8gb3IgbmV3ZXIpLgotICBjYXNlICIkbHRfbXVsdGlfb3NfZGlyOyAkbHRfc2VhcmNoX3BhdGhfc3BlYyAiIGluCi0gICIvOyAiKiB8ICIvLjsgIiogfCAiLy4vOyAiKiB8ICoiJGx0X211bHRpX29zX2RpciAiKiB8ICoiJGx0X211bHRpX29zX2Rpci8gIiopCi0gICAgbHRfbXVsdGlfb3NfZGlyPQotICAgIDs7Ci0gIGVzYWMKLSAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbwotICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxpZiB0ZXN0IC1uICIkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgotICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCi0JbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCi0gICAgZmkKLSAgZG9uZQotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCi1CRUdJTiB7UlMgPSAiICI7IEZTID0gIi98XG4iO30gewotICBsdF9mb28gPSAiIjsKLSAgbHRfY291bnQgPSAwOwotICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgewotICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKLSAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7Ci0gICAgICAgIGx0X2NvdW50Kys7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgewotICAgICAgICAgIGx0X2ZvbyA9ICIvIiAkbHRfaSBsdF9mb287Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbHRfY291bnQtLTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9Ci0gIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KLX0nYAotICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKLSAgIyBmb3IgdGhlc2UgaG9zdHMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKLSAgICAgICRTRUQgJ3N8L1woW0EtWmEtel06XCl8XDF8ZydgIDs7Ci0gIGVzYWMKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAotZWxzZQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi1maQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9LnNvCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIDs7Ci0KLWFpeFs0LTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0Ci0gICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKLSAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAotICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAotICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAotICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KLSAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbwotICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCi0gICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCi0gICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KLSAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCi0gICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgotICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQotICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCi0gICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKLSAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKLSAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAotICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCi0gICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCi0gICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAotICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCi0KLSAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKLSAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQotICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYShsaWIuc28uViknCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICAgIDs7Ci0gICAgc3ZyNCwqKSAjIGZ1bGwgc3ZyNCBvbmx5Ci0gICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgICA7OwotICAgICoseWVzKSAjIGJvdGgsIHByZWZlciBzdnI0Ci0gICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSwgbGliLmEobGliLnNvLlYpIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuYSBuZWVkcyBleHRyYSBoYW5kbGluZwotICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0iJHJlYWxuYW1lIn5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJGxpbmtuYW1lIn4kaW5zdGFsbF9zaGFyZWRfcHJvZyAiJGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQifnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCi0gICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2ZvciBuIGluICRsaWJyYXJ5X25hbWVzICRvbGRfbGlicmFyeTsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJG4ifnRlc3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiID0gIiRuIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKLSAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICAgIDs7Ci0gICAgKixubykgIyBib3RoLCBwcmVmZXIgYWl4Ci0gICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5hKGxpYi5zby5WKSwgbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIHBvd2VycGMpCi0gICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgotICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgOzsKLSAgbTY4aykKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPS5kbGwKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KLSAgeWVzLCopCi0gICAgIyBnY2MKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCi0gICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OwotICAgICAgZmknCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjZWdjYyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgIDs7Ci0KLSAgKixjbCopCi0gICAgIyBOYXRpdmUgTVNWQwotICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCi0KLSAgICBjYXNlICRidWlsZF9vcyBpbgotICAgIG1pbmd3KikKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSAgICAgIGx0X3NhdmVfaWZzPSRJRlMKLSAgICAgIElGUz0nOycKLSAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSAgICAgIGRvCi0gICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCi0gICAgICA7OwotICAgIGN5Z3dpbiopCi0gICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCi0gICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKLSAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCi0gICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQotICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkUk0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICA7OwotCi0gICopCi0gICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgOzsKLSAgZXNhYwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIuKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1oYWlrdSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDMyCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDY0Ci0gICAgZmkKLSAgICA7OwotICBocHBhKjY0KikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgotICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1Ci0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotbGludXgqYW5kcm9pZCopCi0gIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKLSAgZmluaXNoX2NtZHM9Ci0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCi0gICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCi0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0KLSAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICi0gIGlmICR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgc2F2ZV9saWJkaXI9JGxpYmRpcgotICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsXCI7IFwKLQkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgotICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKLSAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotZmkKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIExERkxBR1M9JHNhdmVfTERGTEFHUwotICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKLQotZmkKLQotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotCi0gICMgSWRlYWxseSwgd2UgY291bGQgdXNlIGxkY29uZmlnIHRvIHJlcG9ydCAqYWxsKiBkaXJlY3RvcmVzIHdoaWNoIGFyZQotICAjIHNlYXJjaGVkIGZvciBsaWJyYXJpZXMsIGhvd2V2ZXIgdGhpcyBpcyBzdGlsbCBub3QgcG9zc2libGUuICBBc2lkZSBmcm9tIG5vdAotICAjIGJlaW5nIGNlcnRhaW4gL3NiaW4vbGRjb25maWcgaXMgYXZhaWxhYmxlLCBjb21tYW5kCi0gICMgJ2xkY29uZmlnIC1OIC1YIC12IHwgZ3JlcCBeLycgb24gNjRiaXQgRmVkb3JhIGRvZXMgbm90IHJlcG9ydCAvdXNyL2xpYjY0LAotICAjIGV2ZW4gdGhvdWdoIGl0IGlzIHNlYXJjaGVkIGF0IHJ1bi10aW1lLiAgVHJ5IHRvIGRvIHRoZSBiZXN0IGd1ZXNzIGJ5Ci0gICMgYXBwZW5kaW5nIGxkLnNvLmNvbmYgY29udGVudHMgKGFuZCBpbmNsdWRlcykgdG8gdGhlIHNlYXJjaCBwYXRoLgotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZGVsZiotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLSpudG8qIHwgKnFueCopCi0gIHZlcnNpb25fdHlwZT1xbngKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKLSAgOzsKLQotb3BlbmJzZCogfCBiaXRyaWcqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgotICAgIG5lZWRfdmVyc2lvbj1ubwotICBlbHNlCi0gICAgbmVlZF92ZXJzaW9uPXllcwotICBmaQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9LmRsbAotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgT1MvMiBjYW4gb25seSBsb2FkIGEgRExMIHdpdGggYSBiYXNlIG5hbWUgb2YgOCBjaGFyYWN0ZXJzIG9yIGxlc3MuCi0gIHNvbmFtZV9zcGVjPSdgdGVzdCAtbiAiJG9zMmRsbG5hbWUiICYmIGxpYm5hbWU9IiRvczJkbGxuYW1lIjsKLSAgICB2PSQoJEVDSE8gJHJlbGVhc2UkdmVyc3VmZml4IHwgdHIgLWQgLi0pOwotICAgIG49JCgkRUNITyAkbGlibmFtZSB8IGN1dCAtYiAtJCgoOCAtICR7I3Z9KSkgfCB0ciAuIF8pOwotICAgICRFQ0hPICRuJHZgJHNoYXJlZF9leHQnCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfV9kbGwuJGxpYmV4dCcKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUJFR0lOTElCUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgotICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KLSAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KLSAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OwotICAgIGZpJwotICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KLSAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICRSTSBcJGRscGF0aCcKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9c2NvCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi10cGYqKQotICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLWlmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi1maQotCi1pZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotZmkKLQotIyByZW1lbWJlciB1bmF1Z21lbnRlZCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggY29udGVudCBmb3IgbGlidG9vbCBzY3JpcHQgZGVjbHMuLi4KLWNvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9JHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgLi4uIGJ1dCBpdCBuZWVkcyBMVF9TWVNfTElCUkFSWV9QQVRIIG11bmdpbmcgZm9yIG90aGVyIGNvbmZpZ3VyZS10aW1lIGNvZGUKLWZ1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKLQotIyB0byBiZSB1c2VkIGFzIGRlZmF1bHQgTFRfU1lTX0xJQlJBUllfUEFUSCB2YWx1ZSBpbiBnZW5lcmF0ZWQgbGlidG9vbAotY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kTFRfU1lTX0xJQlJBUllfUEFUSAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9Ci1oYXJkY29kZV9hY3Rpb249Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKLSAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAmJgotICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1Ci0kYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9Ci0KLWlmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb24iIHx8Ci0gICB0ZXN0IHllcyA9ICIkaW5oZXJpdF9ycGF0aCI7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKLSAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi0KLQotCi0KLQotCi0gIGlmIHRlc3QgeWVzICE9ICIkZW5hYmxlX2Rsb3BlbiI7IHRoZW4KLSAgZW5hYmxlX2Rsb3Blbj11bmtub3duCi0gIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCi0gIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgotZWxzZQotICBsdF9jdl9kbG9wZW49bm8KLSAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBiZW9zKikKLSAgICBsdF9jdl9kbG9wZW49bG9hZF9hZGRfb24KLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICA7OwotCi0gIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIGx0X2N2X2Rsb3Blbj1Mb2FkTGlicmFyeQotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIDs7Ci0KLSAgY3lnd2luKikKLSAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgOzsKLQotICBkYXJ3aW4qKQotICAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRsICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBkbG9wZW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBkbG9wZW4gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbAotZWxzZQotCi0gICAgbHRfY3ZfZGxvcGVuPWR5bGQKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLQotZmkKLQotICAgIDs7Ci0KLSAgdHBmKikKLSAgICAjIERvbid0IHRyeSB0byBydW4gYW55IGxpbmsgdGVzdHMgZm9yIFRQRi4gIFdlIGtub3cgaXQncyBpbXBvc3NpYmxlCi0gICAgIyBiZWNhdXNlIFRQRiBpcyBhIGNyb3NzLWNvbXBpbGVyLCBhbmQgd2Uga25vdyBob3cgd2Ugb3BlbiBEU09zLgotICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubwotICAgIDs7Ci0KLSAgKikKLSAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj1zaGxfbG9hZAotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGxkICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBzaGxfbG9hZCAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIHNobF9sb2FkICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKLWVsc2UKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ZGxvcGVuCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxvcGVuICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZGxvcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHN2bGQgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGRsb3BlbiAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGRsb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxzdmxkCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfZGxkX2RsZF9saW5rKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbGQgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGRsZF9saW5rICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZGxkX2xpbmsgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZAotZmkKLQotCi1maQotCi0KLWZpCi0KLQotZmkKLQotCi1maQotCi0KLWZpCi0KLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49bm8KLSAgZWxzZQotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGZpCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCi0gIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKLQotICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLQotICAgIHNhdmVfTElCUz0kTElCUwotICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAJICBpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCi1lbHNlCi0gIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotCi0jaWYgSEFWRV9ETEZDTl9ICi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmZGVmIFJUTERfR0xPQkFMCi0jICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCi0jZWxzZQotIyAgaWZkZWYgRExfR0xPQkFMCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCi0jICBlbHNlCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCi0gICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCi0jaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKLSMgIGlmZGVmIFJUTERfTEFaWQotIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCi0jICBlbHNlCi0jICAgIGlmZGVmIERMX0xBWlkKLSMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQotIyAgICBlbHNlCi0jICAgICAgaWZkZWYgUlRMRF9OT1cKLSMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCi0jICAgICAgZWxzZQotIyAgICAgICAgaWZkZWYgRExfTk9XCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCi0gICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0jaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQotaW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotI2VuZGlmCi0KLWludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQotaW50IG1haW4gKCkKLXsKLSAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci0gIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOwotCi0gIGlmIChzZWxmKQotICAgIHsKLSAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOwotICAgICAgZWxzZQotICAgICAgICB7Ci0JICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKLQl9Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICByZXR1cm4gc3RhdHVzOwotfQotX0xUX0VPRgotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKLSAgICBsdF9zdGF0dXM9JD8KLSAgICBjYXNlIHgkbHRfc3RhdHVzIGluCi0gICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7Ci0gICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKLSAgICBlc2FjCi0gIGVsc2UgOgotICAgICMgY29tcGlsYXRpb24gZmFpbGVkCi0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KLSAgZmkKLWZpCi1ybSAtZnIgY29uZnRlc3QqCi0KLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9Ci0KLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCi0gICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgotICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKLWVsc2UKLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0KLSNpZiBIQVZFX0RMRkNOX0gKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWZkZWYgUlRMRF9HTE9CQUwKLSMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKLSNlbHNlCi0jICBpZmRlZiBETF9HTE9CQUwKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKLSMgIGVsc2UKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKLSAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KLSNpZm5kZWYgTFRfRExMQVpZX09SX05PVwotIyAgaWZkZWYgUlRMRF9MQVpZCi0jICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKLSMgIGVsc2UKLSMgICAgaWZkZWYgRExfTEFaWQotIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCi0jICAgIGVsc2UKLSMgICAgICBpZmRlZiBSVExEX05PVwotIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKLSMgICAgICBlbHNlCi0jICAgICAgICBpZmRlZiBETF9OT1cKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi1pbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0jZW5kaWYKLQotaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci1pbnQgbWFpbiAoKQotewotICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLSAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247Ci0KLSAgaWYgKHNlbGYpCi0gICAgewotICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLQkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKLSAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOwotCX0KLSAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwotICAgIH0KLSAgZWxzZQotICAgIHB1dHMgKGRsZXJyb3IgKCkpOwotCi0gIHJldHVybiBzdGF0dXM7Ci19Ci1fTFRfRU9GCi0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgotICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAotICAgIGx0X3N0YXR1cz0kPwotICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KLSAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OwotICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KLSAgZmkKLWZpCi1ybSAtZnIgY29uZnRlc3QqCi0KLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KLSAgICBmaQotCi0gICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKLSAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgICBMSUJTPSRzYXZlX0xJQlMKLSAgICA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7Ci0gIGVzYWMKLQotICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKLSAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7Ci0gIGVzYWMKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotc3RyaXBsaWI9Ci1vbGRfc3RyaXBsaWI9Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCi0gIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCi0gIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotZWxzZQotIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgotICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotICAgIGVsc2UKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICA7OwotICBlc2FjCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKLSRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9Ci0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotICBjYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCi0gICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgICBmaQotICAgIDs7Ci0KLSAgYWl4WzQtOV0qKQotICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQotICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKLSAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9Ci0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9Ci0KLQotCi0KLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSRsdF9zYXZlX0NDCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgotCi0KLQotCi0jIE9ubHkgZXhwYW5kIG9uY2U6Ci0KLQotCi0KLUdTVF9SRVE9MS4xMC4wCi1HU1RQQl9SRVE9MS4xMC4wCi0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXV0b2NvbmYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2F1dG9jb25mK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9hdXRvY29uZjsKLSAgICAgIHVuc2V0IEFVVE9DT05GCi0KLUFVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59JHt3aXRodmFsfSJ9Ci0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJEFVVE9DT05GIGFzIGF1dG9jb25mIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRBVVRPQ09ORiBhcyBhdXRvY29uZiIgPiY2O30KLQotZmkKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXV0b2hlYWRlciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYXV0b2hlYWRlcitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfYXV0b2hlYWRlcjsKLSAgICAgIHVuc2V0IEFVVE9IRUFERVIKLQotQVVUT0hFQURFUj0ke0FVVE9IRUFERVItIiR7YW1fbWlzc2luZ19ydW59JHt3aXRodmFsfSJ9Ci0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJEFVVE9IRUFERVIgYXMgYXV0b2hlYWRlciIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkQVVUT0hFQURFUiBhcyBhdXRvaGVhZGVyIiA+JjY7fQotCi1maQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hdXRvbWFrZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfYXV0b21ha2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2F1dG9tYWtlOwotICAgICAgdW5zZXQgQVVUT01BS0UKLQotQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn0ke3dpdGh2YWx9In0KLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkQVVUT01BS0UgYXMgYXV0b21ha2UiID4mNQotJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgJEFVVE9NQUtFIGFzIGF1dG9tYWtlIiA+JjY7fQotCi1maQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hY2xvY2FsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hY2xvY2FsK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9hY2xvY2FsOwotICAgICAgdW5zZXQgQUNMT0NBTAotCi1BQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn0ke3dpdGh2YWx9In0KLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkQUNMT0NBTCBhcyBhY2xvY2FsIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRBQ0xPQ0FMIGFzIGFjbG9jYWwiID4mNjt9Ci0KLWZpCi0KLQotCi1BQ0xPQ0FMX0FNRkxBR1M9Ii1JIG00IC1JIGNvbW1vbi9tNCIKLQotCi0KLQotbWtkaXJfcD0iJE1LRElSX1AiCi1jYXNlICRta2Rpcl9wIGluCi0gIFtcXC8kXSogfCA/OltcXC9dKikgOzsKLSAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OwotZXNhYwotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBOTFMgaXMgcmVxdWVzdGVkLi4uICIgPiY2OyB9Ci0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5scyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ubHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9ubHM7IFVTRV9OTFM9JGVuYWJsZXZhbAotZWxzZQotICBVU0VfTkxTPXllcwotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9OTFMiID4mNQotJGFzX2VjaG8gIiRVU0VfTkxTIiA+JjY7IH0KLQotCi0KLQotICAgICAgR0VUVEVYVF9NQUNST19WRVJTSU9OPTAuMTcKLQotCi0KLQotIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLQotIyBGaW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsCi0jIGFzIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9kZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5LgotY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgotIyEgL2Jpbi9zaAotZXhpdCAwCi1fQVNFT0YKLWNobW9kICt4IGNvbmYkJC5maWxlCi1pZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCi1lbHNlCi0gIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKLWZpCi1ybSAtZiBjb25mJCQuZmlsZQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9NU0dGTVQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICIkTVNHRk1UIiBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgICBhY19jdl9wYXRoX01TR0ZNVD0iJE1TR0ZNVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gICAgOzsKLSAgKikKLSAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgICAgICAgZWNobyAiJGFzX21lOiB0cnlpbmcgJGFjX2Rpci8kYWNfd29yZC4uLiIgPiY1Ci0gICAgICAgICAgaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4mNSAyPiYxICYmCi0gICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKTsgdGhlbgotICAgICAgICAgICAgYWNfY3ZfcGF0aF9NU0dGTVQ9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgICAgICAgICBicmVhayAyCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICBkb25lCi0gICAgSUZTPSIkYWNfc2F2ZV9JRlMiCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX01TR0ZNVCIgJiYgYWNfY3ZfcGF0aF9NU0dGTVQ9IjoiCi0gICAgOzsKLWVzYWMKLWZpCi1NU0dGTVQ9IiRhY19jdl9wYXRoX01TR0ZNVCIKLWlmIHRlc3QgIiRNU0dGTVQiICE9ICI6IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR0ZNVCIgPiY1Ci0kYXNfZWNobyAiJE1TR0ZNVCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdtc2dmbXQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX0dNU0dGTVQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRHTVNHRk1UIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0dNU0dGTVQ9IiRHTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX0dNU0dGTVQiICYmIGFjX2N2X3BhdGhfR01TR0ZNVD0iJE1TR0ZNVCIKLSAgOzsKLWVzYWMKLWZpCi1HTVNHRk1UPSRhY19jdl9wYXRoX0dNU0dGTVQKLWlmIHRlc3QgLW4gIiRHTVNHRk1UIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdNU0dGTVQiID4mNQotJGFzX2VjaG8gIiRHTVNHRk1UIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLQotICAgIGNhc2UgYCRNU0dGTVQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgotICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgTVNHRk1UXzAxNT06IDs7Ci0gICAgKikgTVNHRk1UXzAxNT0kTVNHRk1UIDs7Ci0gIGVzYWMKLQotICBjYXNlIGAkR01TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCi0gICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBHTVNHRk1UXzAxNT06IDs7Ci0gICAgKikgR01TR0ZNVF8wMTU9JEdNU0dGTVQgOzsKLSAgZXNhYwotCi0KLQotIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLQotIyBGaW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVyby1ieXRlIGZpbGUsCi0jIGFzIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9kZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5LgotY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgotIyEgL2Jpbi9zaAotZXhpdCAwCi1fQVNFT0YKLWNobW9kICt4IGNvbmYkJC5maWxlCi1pZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCi1lbHNlCi0gIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKLWZpCi1ybSAtZiBjb25mJCQuZmlsZQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInhnZXR0ZXh0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSB4Z2V0dGV4dDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfWEdFVFRFWFQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICIkWEdFVFRFWFQiIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICAgIGFjX2N2X3BhdGhfWEdFVFRFWFQ9IiRYR0VUVEVYVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gICAgOzsKLSAgKikKLSAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICAgIGlmICRhY19leGVjdXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgICAgICAgZWNobyAiJGFzX21lOiB0cnlpbmcgJGFjX2Rpci8kYWNfd29yZC4uLiIgPiY1Ci0gICAgICAgICAgaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCA+JjUgMj4mMSAmJgotICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLW9taXQtaGVhZGVyIC0tY29weXJpZ2h0LWhvbGRlcj0gLS1tc2dpZC1idWdzLWFkZHJlc3M9IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuCi0gICAgICAgICAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICAgICAgICAgYnJlYWsgMgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgZG9uZQotICAgIElGUz0iJGFjX3NhdmVfSUZTIgotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIgJiYgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iOiIKLSAgICA7OwotZXNhYwotZmkKLVhHRVRURVhUPSIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIKLWlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkWEdFVFRFWFQiID4mNQotJGFzX2VjaG8gIiRYR0VUVEVYVCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICAgIHJtIC1mIG1lc3NhZ2VzLnBvCi0KLSAgICBjYXNlIGAkWEdFVFRFWFQgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbgotICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTRdIHwgMC4xWzAtNF0uKikgWEdFVFRFWFRfMDE1PTogOzsKLSAgICAqKSBYR0VUVEVYVF8wMTU9JFhHRVRURVhUIDs7Ci0gIGVzYWMKLQotCi0KLSMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi0KLSMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAotIyBhcyBzeXN0ZW1zIG1heSB1c2UgbWV0aG9kcyBvdGhlciB0aGFuIG1vZGUgYml0cyB0byBkZXRlcm1pbmUgZXhlY3V0YWJpbGl0eS4KLWNhdCA+Y29uZiQkLmZpbGUgPDxfQVNFT0YKLSMhIC9iaW4vc2gKLWV4aXQgMAotX0FTRU9GCi1jaG1vZCAreCBjb25mJCQuZmlsZQotaWYgdGVzdCAteCBjb25mJCQuZmlsZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC14IgotZWxzZQotICBhY19leGVjdXRhYmxlX3A9InRlc3QgLWYiCi1maQotcm0gLWYgY29uZiQkLmZpbGUKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dtZXJnZSIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbXNnbWVyZ2U7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX01TR01FUkdFKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAiJE1TR01FUkdFIiBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgICBhY19jdl9wYXRoX01TR01FUkdFPSIkTVNHTUVSR0UiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICAgIDs7Ci0gICopCi0gICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICAgIElGUz0iJGFjX3NhdmVfSUZTIgotICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgICBpZiAkYWNfZXhlY3V0YWJsZV9wICIkYWNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgICAgICAgIGVjaG8gIiRhc19tZTogdHJ5aW5nICRhY19kaXIvJGFjX3dvcmQuLi4iID4mNQotICAgICAgICAgIGlmICRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+JjUgMj4mMTsgdGhlbgotICAgICAgICAgICAgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAgICAgICAgIGJyZWFrIDIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICBJRlM9IiRhY19zYXZlX0lGUyIKLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTVNHTUVSR0UiICYmIGFjX2N2X3BhdGhfTVNHTUVSR0U9IjoiCi0gICAgOzsKLWVzYWMKLWZpCi1NU0dNRVJHRT0iJGFjX2N2X3BhdGhfTVNHTUVSR0UiCi1pZiB0ZXN0ICIkTVNHTUVSR0UiICE9ICI6IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1TR01FUkdFIiA+JjUKLSRhc19lY2hvICIkTVNHTUVSR0UiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgICAgICB0ZXN0IC1uICIkbG9jYWxlZGlyIiB8fCBsb2NhbGVkaXI9JyR7ZGF0YWRpcn0vbG9jYWxlJwotCi0KLSAgICB0ZXN0IC1uICIke1hHRVRURVhUX0VYVFJBX09QVElPTlMrc2V0fSIgfHwgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0KLQotCi0gIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBwby1kaXJlY3RvcmllcyIKLQotCi0KLSAgICAgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KLSAgICBhY2xfZmluYWxfcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGVsc2UKLSAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgotICBmaQotICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KLSAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKLSAgZWxzZQotICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBmaQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcwotZWxzZQotICB3aXRoX2dudV9sZD1ubwotZmkKLQotIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgotIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCi1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5IEdDQyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MuLi4gIiA+JjY7IH0KLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQotZmkKLWlmICR7YWNsX2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIElGUz0iJHtJRlM9IAl9IjsgYWNfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSR7UEFUSF9TRVBBUkFUT1ItOn0iCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhayA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkYWNfc2F2ZV9pZnMiCi1lbHNlCi0gIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmkKLWZpCi0KLUxEPSIkYWNsX2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQotJGFzX2VjaG8gIiRMRCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXRlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQotaWYgJHthY2xfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7Ci0qKQotICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKLWVzYWMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjbF9jdl9wcm9nX2dudV9sZCIgPiY1Ci0kYXNfZWNobyAiJGFjbF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Ci13aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCi0KLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luLi4uICIgPiY2OyB9Ci1pZiAke2FjbF9jdl9ycGF0aCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0KLSAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0iJExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcCi0gICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCi0gICAgLiAuL2NvbmZ0ZXN0LnNoCi0gICAgcm0gLWYgLi9jb25mdGVzdC5zaAotICAgIGFjbF9jdl9ycGF0aD1kb25lCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjbF9jdl9ycGF0aCIgPiY1Ci0kYXNfZWNobyAiJGFjbF9jdl9ycGF0aCIgPiY2OyB9Ci0gIHdsPSIkYWNsX2N2X3dsIgotICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKLSAgYWNsX3NobGliZXh0PSIkYWNsX2N2X3NobGliZXh0IgotICBhY2xfbGlibmFtZV9zcGVjPSIkYWNsX2N2X2xpYm5hbWVfc3BlYyIKLSAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCi0gIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCi0gIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCi0gIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgotICBhY2xfaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgotICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ycGF0aCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ycGF0aCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyA6Ci1lbHNlCi0gIGVuYWJsZV9ycGF0aD15ZXMKLWZpCi0KLQotCi0gICAgICAgICAgICAgICAgICBhY2xfbGliZGlyc3RlbT1saWIKLSAgc2VhcmNocGF0aD1gKExDX0FMTD1DICRDQyAtcHJpbnQtc2VhcmNoLWRpcnMpIDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICdzLF5saWJyYXJpZXM6ICwscCcgfCBzZWQgLWUgJ3MsXj0sLCdgCi0gIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgotICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9IAl9IjsgSUZTPSI6IgotICAgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaHBhdGg7IGRvCi0gICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgotICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgotICAgICAgICAgICovbGliNjQvIHwgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7Ci0gICAgICAgICAgKikgc2VhcmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYAotICAgICAgICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCi0gICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKLSAgICAgICAgICAgICBlc2FjIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0iJGFjbF9zYXZlX0lGUyIKLSAgZmkKLQotCi0KLQotCi0KLQotCi0KLSAgICB1c2VfYWRkaXRpb25hbD15ZXMKLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotCi0gICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYmljb252LXByZWZpeCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGliaWNvbnZfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9saWJpY29udl9wcmVmaXg7Ci0gICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCi0gICAgICB1c2VfYWRkaXRpb25hbD1ubwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgZWxzZQotICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCi0gICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCi0gICAgICBmaQotICAgIGZpCi0KLWZpCi0KLSAgICAgIExJQklDT05WPQotICBMVExJQklDT05WPQotICBJTkNJQ09OVj0KLSAgTElCSUNPTlZfUFJFRklYPQotICBycGF0aGRpcnM9Ci0gIGx0cnBhdGhkaXJzPQotICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9Ci0gIG5hbWVzX25leHRfcm91bmQ9J2ljb252ICcKLSAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbwotICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIgotICAgIG5hbWVzX25leHRfcm91bmQ9Ci0gICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCi0gICAgICBhbHJlYWR5X2hhbmRsZWQ9Ci0gICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbwotICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCi0gICAgICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcwotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgotICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCi0gICAgICAgICAgICAgICAgICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAotICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIgotICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCi0gICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgotICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiCi0gICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JHZhbHVlIgotICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKLSAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0kdmFsdWUiCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgotICAgICAgICAgIGZpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0KLSAgICAgICAgICBmb3VuZF9sYT0KLSAgICAgICAgICBmb3VuZF9zbz0KLSAgICAgICAgICBmb3VuZF9hPQotICAgICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5hbWUKLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4dD0uc28KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaHJleHQ9Ci0gICAgICAgICAgZmkKLSAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgotICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCi0gICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCi0gICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZmkKLSAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklDT05WOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgotICAgICAgICAgICAgICAgIC1MKikKLSAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQklDT05WOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1sJG5hbWUiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX2EiCi0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQotICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4KLSAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pCi0gICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AKLSAgICAgICAgICAgICAgICBMSUJJQ09OVl9QUkVGSVg9IiRiYXNlZGlyIgotICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KLSAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OwotICAgICAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DSUNPTlY7IGRvCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgZXZhbCB4PVwiJHhcIgotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DSUNPTlY9IiR7SU5DSUNPTlZ9JHtJTkNJQ09OVjorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgotICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKLSAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0gICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KLSAgICAgICAgICAgICAgICAgIC1MKikKLSAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQklDT05WOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklDT05WOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgLVIqKQotICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAtbCopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICoubGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGRlcCIKLSAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0kZGVwIgotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgZmkKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1sJG5hbWUiCi0gICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1sJG5hbWUiCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZG9uZQotICBkb25lCi0gIGlmIHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxkaXJzPQotICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKLSAgICAgIGRvbmUKLSAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCi0gICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgotICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZmxhZyIKLSAgICBlbHNlCi0gICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgotICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCi0gICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZsYWciCi0gICAgICBkb25lCi0gICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KLSAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9LVIkZm91bmRfZGlyIgotICAgIGRvbmUKLSAgZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUuLi4gIiA+JjY7IH0KLWlmICR7Z3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgotICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZQcmVmZXJlbmNlcy5oPgotaW50Ci1tYWluICgpCi17Ci1DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPXllcwotZWxzZQotICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIgotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjUKLSRhc19lY2hvICIkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIiA+JjY7IH0KLSAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRSAxIiA+PmNvbmZkZWZzLmgKLQotICBmaQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1cnJlbnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1cnJlbnQuLi4gIiA+JjY7IH0KLWlmICR7Z3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgotICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZMb2NhbGUuaD4KLWludAotbWFpbiAoKQotewotQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD15ZXMKLWVsc2UKLSAgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY1Ci0kYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY2OyB9Ci0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLSAgSU5UTF9NQUNPU1hfTElCUz0KLSAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbgotICAgIElOVExfTUFDT1NYX0xJQlM9Ii1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKLSAgZmkKLQotCi0KLQotCi0KLSAgTElCSU5UTD0KLSAgTFRMSUJJTlRMPQotICBQT1NVQj0KLQotICAgIGNhc2UgIiAkZ3RfbmVlZHMgIiBpbgotICAgICoiIG5lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcyAiKikgZ3RfYXBpX3ZlcnNpb249MyA7OwotICAgICoiIG5lZWQtbmdldHRleHQgIiopIGd0X2FwaV92ZXJzaW9uPTIgOzsKLSAgICAqKSBndF9hcGlfdmVyc2lvbj0xIDs7Ci0gIGVzYWMKLSAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmMiCi0gIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJpbnRsIgotCi0gICAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KLQotCi0gICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAzOyB0aGVuCi0gICAgICAgICAgZ3RfcmV2aXNpb25fdGVzdF9jb2RlPScKLSNpZm5kZWYgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04KLSNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpICgobWFqb3IpID09IDAgPyAwIDogLTEpCi0jZW5kaWYKLXR5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07Ci0nCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBndF9yZXZpc2lvbl90ZXN0X2NvZGU9Ci0gICAgICAgIGZpCi0gICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAyOyB0aGVuCi0gICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9JyArICogbmdldHRleHQgKCIiLCAiIiwgMCknCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0KLSAgICAgICAgZmkKLQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJjLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyRndF9mdW5jX2dudWdldHRleHRfbGliYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0kZ3RfcmV2aXNpb25fdGVzdF9jb2RlCi1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7Ci1leHRlcm4gaW50ICpfbmxfZG9tYWluX2JpbmRpbmdzOwotaW50Ci1tYWluICgpCi17Ci1iaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKLXJldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2RvbWFpbl9iaW5kaW5ncwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz15ZXMiCi1lbHNlCi0gIGV2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz1ubyIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWV2YWwgYWNfcmVzPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLQotICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiICE9ICJ5ZXMiOyB9OyB0aGVuCi0KLQotCi0KLQotICAgICAgICAgIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLQotICBmb3IgZWxlbWVudCBpbiAkSU5DSUNPTlY7IGRvCi0gICAgaGF2ZWl0PQotICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCi0gICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfSRlbGVtZW50IgotICAgIGZpCi0gIGRvbmUKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGljb252IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBpY29udi4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9mdW5jX2ljb252Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotICAgIGFtX2N2X2Z1bmNfaWNvbnY9Im5vLCBjb25zaWRlciBpbnN0YWxsaW5nIEdOVSBsaWJpY29udiIKLSAgICBhbV9jdl9saWJfaWNvbnY9bm8KLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aWNvbnYuaD4KLWludAotbWFpbiAoKQotewotaWNvbnZfdCBjZCA9IGljb252X29wZW4oIiIsIiIpOwotICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgIGljb252X2Nsb3NlKGNkKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhbV9jdl9mdW5jX2ljb252PXllcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgotICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKLSAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxpY29udi5oPgotaW50Ci1tYWluICgpCi17Ci1pY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7Ci0gICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICAgIGljb252X2Nsb3NlKGNkKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhbV9jdl9saWJfaWNvbnY9eWVzCi0gICAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiCi0gICAgZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfZnVuY19pY29udiIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X2Z1bmNfaWNvbnYiID4mNjsgfQotICBpZiB0ZXN0ICIkYW1fY3ZfZnVuY19pY29udiIgPSB5ZXM7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGljb252IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGljb252Li4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X2Z1bmNfaWNvbnZfd29ya3MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gICAgICAgICAgICBhbV9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgaWYgdGVzdCAkYW1fY3ZfbGliX2ljb252ID0geWVzOyB0aGVuCi0gICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGNhc2UgIiRob3N0X29zIiBpbgotICAgICAgICAgICBhaXgqIHwgaHB1eCopIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OwotICAgICAgICAgICAqKSAgICAgICAgICAgIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKLSAgICAgICAgIGVzYWMKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8aWNvbnYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLWludCBtYWluICgpCi17Ci0gIC8qIFRlc3QgYWdhaW5zdCBBSVggNS4xIGJ1ZzogRmFpbHVyZXMgYXJlIG5vdCBkaXN0aW5ndWlzaGFibGUgZnJvbSBzdWNjZXNzZnVsCi0gICAgIHJldHVybnMuICAqLwotICB7Ci0gICAgaWNvbnZfdCBjZF91dGY4X3RvXzg4NTkxID0gaWNvbnZfb3BlbiAoIklTTzg4NTktMSIsICJVVEYtOCIpOwotICAgIGlmIChjZF91dGY4X3RvXzg4NTkxICE9IChpY29udl90KSgtMSkpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDM0MlwyMDJcMjU0IjsgLyogRVVSTyBTSUdOICovCi0gICAgICAgIGNoYXIgYnVmWzEwXTsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKLSAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7Ci0gICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKLSAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKLSAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF91dGY4X3RvXzg4NTkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKLSAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgIHJldHVybiAxOwotICAgICAgfQotICB9Ci0jaWYgMCAvKiBUaGlzIGJ1ZyBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBjYWxsZXIuICAqLwotICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiAwLiAgKi8KLSAgewotICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJ1dGY4IiwgImlzbzg4NTkxIik7Ci0gICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0xKSkKLSAgICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0cmdlciBtaXQgYlwzNjZzZW4gQlwzNzRiY2hlbiBvaG5lIEF1Z2VubWFcMzM3IjsKLSAgICAgICAgY2hhciBidWZbNTBdOwotICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0OwotICAgICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsKLSAgICAgICAgY2hhciAqb3V0cHRyID0gYnVmOwotICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOwotICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkXzg4NTkxX3RvX3V0ZjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOwotICAgICAgICBpZiAoKGludClyZXMgPiAwKQotICAgICAgICAgIHJldHVybiAxOwotICAgICAgfQotICB9Ci0jZW5kaWYKLSAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCi0gICAgIHByb3ZpZGVkLiAgKi8KLSAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLwotICAgICAgaWNvbnZfb3BlbiAoIlVURi04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkKLSAgICAgIC8qIFRyeSBJUklYLCBPU0YvMSBuYW1lcy4gICovCi0gICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCi0gICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8KLSAgICAgICYmIGljb252X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCi0gICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLwotICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpKQotICAgIHJldHVybiAxOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzCi1lbHNlCi0gIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi0gICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIgPiY2OyB9Ci0gICAgY2FzZSAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiIGluCi0gICAgICAqbm8pIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vIDs7Ci0gICAgICAqKSAgIGFtX2Z1bmNfaWNvbnY9eWVzIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8KLSAgZmkKLSAgaWYgdGVzdCAiJGFtX2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSUNPTlYgMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLSAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaWNvbnYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udi4uLiAiID4mNjsgfQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElCSUNPTlYiID4mNQotJGFzX2VjaG8gIiRMSUJJQ09OViIgPiY2OyB9Ci0gIGVsc2UKLSAgICAgICAgICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKLSAgICBMSUJJQ09OVj0KLSAgICBMVExJQklDT05WPQotICBmaQotCi0KLQotCi0KLQotCi0KLSAgICB1c2VfYWRkaXRpb25hbD15ZXMKLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotCi0gICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYmludGwtcHJlZml4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9saWJpbnRsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfbGliaW50bF9wcmVmaXg7Ci0gICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCi0gICAgICB1c2VfYWRkaXRpb25hbD1ubwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgZWxzZQotICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCi0gICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iCi0gICAgICBmaQotICAgIGZpCi0KLWZpCi0KLSAgICAgIExJQklOVEw9Ci0gIExUTElCSU5UTD0KLSAgSU5DSU5UTD0KLSAgTElCSU5UTF9QUkVGSVg9Ci0gIHJwYXRoZGlycz0KLSAgbHRycGF0aGRpcnM9Ci0gIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KLSAgbmFtZXNfbmV4dF9yb3VuZD0naW50bCAnCi0gIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KLSAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKLSAgICBuYW1lc19uZXh0X3JvdW5kPQotICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbwotICAgICAgYWxyZWFkeV9oYW5kbGVkPQotICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KLSAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgotICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KLSAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKLSAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKLSAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgotICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSR2YWx1ZSIKLSAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCi0gICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9JHZhbHVlIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICBmaQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9Ci0gICAgICAgICAgZm91bmRfbGE9Ci0gICAgICAgICAgZm91bmRfc289Ci0gICAgICAgICAgZm91bmRfYT0KLSAgICAgICAgICBldmFsIGxpYm5hbWU9XCIkYWNsX2xpYm5hbWVfc3BlY1wiICAgICMgdHlwaWNhbGx5OiBsaWJuYW1lPWxpYiRuYW1lCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2hyZXh0PQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgotICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgotICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCi0gICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJTlRMOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgotICAgICAgICAgICAgICAgIC1MKikKLSAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCIKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQklOVEw7IGRvCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgZXZhbCB4PVwiJHhcIgotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1MJGZvdW5kX2RpciIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LWwkbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfYSIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9Ci0gICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgotICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbSB8ICovJGFjbF9saWJkaXJzdGVtLykKLSAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbS8iJyokLCwnYAotICAgICAgICAgICAgICAgIExJQklOVExfUFJFRklYPSIkYmFzZWRpciIKLSAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCi0gICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsKLSAgICAgICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ0lOVEw7IGRvCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgZXZhbCB4PVwiJHhcIgotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5DSU5UTD0iJHtJTkNJTlRMfSR7SU5DSU5UTDorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgotICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKLSAgICAgICAgICAgICAgICAqKSAuICIuLyRmb3VuZF9sYSIgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0gICAgICAgICAgICAgICAgY2FzZSAiJGRlcCIgaW4KLSAgICAgICAgICAgICAgICAgIC1MKikKLSAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQklOVEw7IGRvCi0KLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgotICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKLSAgZXZhbCB4PVwiJHhcIgotICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCSU5UTDsgZG8KLQotICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCi0gIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4IgotICBldmFsIHg9XCIkeFwiCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgIC1SKikKLSAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgLWwqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAqLmxhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRkZXAiCi0gICAgICAgICAgICAgICAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9JGRlcCIKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tbCRuYW1lIgotICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDorIH0tbCRuYW1lIgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgYWxsZGlycz0KLSAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCi0gICAgICBkb25lCi0gICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICBsaWJkaXI9IiRhbGxkaXJzIgotICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKLSAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGZsYWciCi0gICAgZWxzZQotICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKLSAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgotICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmbGFnIgotICAgICAgZG9uZQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkbHRycGF0aGRpcnM7IGRvCi0gICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1SJGZvdW5kX2RpciIKLSAgICBkb25lCi0gIGZpCi0KLSAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGd0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJElOQ0lOVEwiCi0gICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGliaW50bC5oPgotJGd0X3JldmlzaW9uX3Rlc3RfY29kZQotZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwotZXh0ZXJuCi0jaWZkZWYgX19jcGx1c3BsdXMKLSJDIgotI2VuZGlmCi1jb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOwotaW50Ci1tYWluICgpCi17Ci1iaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKLXJldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoIiIpCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyIKLWVsc2UKLSAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCi0gICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViIKLSAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGxpYmludGwuaD4KLSRndF9yZXZpc2lvbl90ZXN0X2NvZGUKLWV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKLWV4dGVybgotI2lmZGVmIF9fY3BsdXNwbHVzCi0iQyIKLSNlbmRpZgotY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTsKLWludAotbWFpbiAoKQotewotYmluZHRleHRkb21haW4gKCIiLCAiIik7Ci1yZXR1cm4gKiBnZXR0ZXh0ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9leHBhbmRfYWxpYXMgKCIiKQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIExJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKLSAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCi0gICAgICAgICAgICAgICAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyIKLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgICBmaQotICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgotICAgICAgICAgICAgTElCUz0iJGd0X3NhdmVfTElCUyIKLWZpCi1ldmFsIGFjX3Jlcz1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bAotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gICAgICAgIGZpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAotICAgICAgICAgICB8fCB7IHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCi0gICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcCi0gICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4KLSAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0KLSAgICAgICAgICBMVExJQklOVEw9Ci0gICAgICAgICAgSU5DSU5UTD0KLSAgICAgICAgZmkKLQotCi0KLSAgICBpZiB0ZXN0IC1uICIkSU5UTF9NQUNPU1hfTElCUyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAotICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgICAgICAgICAgICBMSUJJTlRMPSIkTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKLSAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgotICAgICAgZmkKLSAgICBmaQotCi0gICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCi0gICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX05MUyAxIiA+PmNvbmZkZWZzLmgKLQotICAgIGVsc2UKLSAgICAgIFVTRV9OTFM9bm8KLSAgICBmaQotICBmaQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byB1c2UgTkxTIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE5MUy4uLiAiID4mNjsgfQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVTRV9OTFMiID4mNQotJGFzX2VjaG8gIiRVU0VfTkxTIiA+JjY7IH0KLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNvbWVzIGZyb20iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbS4uLiAiID4mNjsgfQotICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfTsgdGhlbgotICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiCi0gICAgICBlbHNlCi0gICAgICAgIGd0X3NvdXJjZT0ibGliYyIKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgZ3Rfc291cmNlPSJpbmNsdWRlZCBpbnRsIGRpcmVjdG9yeSIKLSAgICBmaQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3Rfc291cmNlIiA+JjUKLSRhc19lY2hvICIkZ3Rfc291cmNlIiA+JjY7IH0KLSAgZmkKLQotICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotCi0gICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBsaW5rIHdpdGggbGliaW50bC4uLiAiID4mNjsgfQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJQklOVEwiID4mNQotJGFzX2VjaG8gIiRMSUJJTlRMIiA+JjY7IH0KLQotICBmb3IgZWxlbWVudCBpbiAkSU5DSU5UTDsgZG8KLSAgICBoYXZlaXQ9Ci0gICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbwotCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gIGV2YWwgeD1cIiR4XCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKLSAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgotCi0gICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4KLSAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBkb25lCi0gICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVsZW1lbnQiCi0gICAgZmkKLSAgZG9uZQotCi0gICAgICBmaQotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUVEVYVCAxIiA+PmNvbmZkZWZzLmgKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxIiA+PmNvbmZkZWZzLmgKLQotICAgIGZpCi0KLSAgICAgICAgUE9TVUI9cG8KLSAgZmkKLQotCi0KLSAgICBJTlRMTElCUz0iJExJQklOVEwiCi0KLQotCi0KLQotCi0KLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICBHRVRURVhUX1BBQ0tBR0U9Z3N0LXBsdWdpbnMtZ29vZC0kR1NUX0FQSV9WRVJTSU9OCi0gIGVsc2UKLSAgICBHRVRURVhUX1BBQ0tBR0U9TlVMTAotICBmaQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFICIkR0VUVEVYVF9QQUNLQUdFIgotX0FDRU9GCi0KLQotICAgIGlmIHRlc3QgLWUgIiR7c3JjZGlyfS9wby9NYWtldmFycyI7IHRoZW4KLSAgICBpZiAhIGdyZXAgLWUgImdzdC1wbHVnaW5zLWdvb2QtJEdTVF9BUElfVkVSU0lPTiIgIiR7c3JjZGlyfS9wby9NYWtldmFycyI7IHRoZW4KLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJET01BSU4gaW4gcG8vTWFrZXZhcnMgZG9lcyBub3QgbWF0Y2ggR0VUVEVYVF9QQUNLQUdFIGdzdC1wbHVnaW5zLWdvb2QtJEdTVF9BUElfVkVSU0lPTiIgIiRMSU5FTk8iIDUKLSAgICBmaQotICBmaQotCi0KLSAgRVhQX1ZBUj1MT0NBTEVESVIKLSAgRlJPTV9WQVI9JGRhdGFkaXIvbG9jYWxlCi0KLSAgICBwcmVmaXhfc2F2ZT0kcHJlZml4Ci0gIGV4ZWNfcHJlZml4X3NhdmU9JGV4ZWNfcHJlZml4Ci0KLSAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGZpCi0gICAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgZXhlY19wcmVmaXg9JHByZWZpeAotICBmaQotCi0gIGZ1bGxfdmFyPSIkRlJPTV9WQVIiCi0gICAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBuZXdfZnVsbF92YXI9ImBldmFsIGVjaG8gJGZ1bGxfdmFyYCIKLSAgICBpZiB0ZXN0ICJ4JG5ld19mdWxsX3ZhciIgPSAieCRmdWxsX3ZhciI7IHRoZW4gYnJlYWs7IGZpCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBkb25lCi0KLSAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIExPQ0FMRURJUj0iJGZ1bGxfdmFyIgotCi0KLSAgICBwcmVmaXg9JHByZWZpeF9zYXZlCi0gIGV4ZWNfcHJlZml4PSRleGVjX3ByZWZpeF9zYXZlCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBMT0NBTEVESVIgIiRMT0NBTEVESVIiCi1fQUNFT0YKLQotCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXRhbC13YXJuaW5ncyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9mYXRhbF93YXJuaW5ncytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2ZhdGFsX3dhcm5pbmdzOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEZBVEFMX1dBUk5JTkdTPXllcyA7OwotICAgICAgICBubykgIEZBVEFMX1dBUk5JTkdTPW5vIDs7Ci0gICAgICAgICopICAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZGlzYWJsZS1mYXRhbC13YXJuaW5ncyIgIiRMSU5FTk8iIDUgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotCi0gICAgICBpZiB0ZXN0ICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSU5PUiAlIDJgIiA9ICJ4MSIgLWEgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JQ1JPICc8JyA5MGAiID0gIngxIjsgdGhlbgotICAgICAgICBGQVRBTF9XQVJOSU5HUz15ZXMKLSAgICAgIGVsc2UKLSAgICAgICAgRkFUQUxfV0FSTklOR1M9bm8KLSAgICAgIGZpCi0KLWZpCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRyYS1jaGVjayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9leHRyYV9jaGVjaytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2V4dHJhX2NoZWNrOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIEVYVFJBX0NIRUNLUz15ZXMgOzsKLSAgICAgICAgbm8pICBFWFRSQV9DSEVDS1M9bm8gOzsKLSAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZXh0cmEtY2hlY2tzIiAiJExJTkVOTyIgNSA7OwotICAgICAgZXNhYwotCi1lbHNlCi0KLSAgICAgIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgICAgIEVYVFJBX0NIRUNLUz15ZXMKLSAgICAgIGVsc2UKLSAgICAgICAgRVhUUkFfQ0hFQ0tTPW5vCi0gICAgICBmaQotCi1maQotCi0KLSAgICBpZiB0ZXN0ICJ4JEVYVFJBX0NIRUNLUyIgPSAieHllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgR1NUX0VOQUJMRV9FWFRSQV9DSEVDS1MgMSIgPj5jb25mZGVmcy5oCi0KLSAgICBmaQotCi0KLQotICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWJ1ZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9ERUJVRz15ZXMgOzsKLSAgICAgICAgbm8pICBVU0VfREVCVUc9bm8gOzsKLSAgICAgICAgKikgICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZGVidWciICIkTElORU5PIiA1IDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLSAgVVNFX0RFQlVHPXllcwotZmkKLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wcm9maWxpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcHJvZmlsaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfcHJvZmlsaW5nOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIFVTRV9QUk9GSUxJTkc9eWVzIDs7Ci0gICAgICAgIG5vKSAgVVNFX1BST0ZJTElORz1ubyA7OwotICAgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1wcm9maWxpbmciICIkTElORU5PIiA1IDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLSAgVVNFX1BST0ZJTElORz1ubwotZmkKLQotCi0KLWlmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KLQlpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWc7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRQS0dfQ09ORklHIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRQS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIDs7Ci1lc2FjCi1maQotUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9QS0dfQ09ORklHCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQS0dfQ09ORklHIiA+JjUKLSRhc19lY2hvICIkUEtHX0NPTkZJRyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KLSAgYWNfcHRfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRhY19wdF9QS0dfQ09ORklHIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhY19wdF9QS0dfQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIDs7Ci1lc2FjCi1maQotYWNfcHRfUEtHX0NPTkZJRz0kYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHCi1pZiB0ZXN0IC1uICIkYWNfcHRfUEtHX0NPTkZJRyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19wdF9QS0dfQ09ORklHIiA+JjUKLSRhc19lY2hvICIkYWNfcHRfUEtHX0NPTkZJRyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05GSUciID0geDsgdGhlbgotICAgIFBLR19DT05GSUc9IiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09ORklHCi0gIGZpCi1lbHNlCi0gIFBLR19DT05GSUc9IiRhY19jdl9wYXRoX1BLR19DT05GSUciCi1maQotCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0JX3BrZ19taW5fdmVyc2lvbj0wLjkuMAotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQgbGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQotCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCWVsc2UKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0JCVBLR19DT05GSUc9IiIKLQlmaQotCi1maQotCi0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXZhbGdyaW5kIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3ZhbGdyaW5kK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfdmFsZ3JpbmQ7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgVVNFX1ZBTEdSSU5EPSIkVVNFX0RFQlVHIiA7OwotICAgICAgICBubykgIFVTRV9WQUxHUklORD1ubyA7OwotICAgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS12YWxncmluZCIgIiRMSU5FTk8iIDUgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotICBVU0VfVkFMR1JJTkQ9IiRVU0VfREVCVUciCi1maQotICAgVkFMR1JJTkRfUkVRPSIzLjAiCi0gIGlmIHRlc3QgIngkVVNFX1ZBTEdSSU5EIiA9IHh5ZXM7IHRoZW4KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgVkFMR1JJTkQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFZBTEdSSU5ELi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRWQUxHUklORF9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9WQUxHUklORF9DRkxBR1M9IiRWQUxHUklORF9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJ2YWxncmluZCA+PSBcJFZBTEdSSU5EX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJ2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1ZBTEdSSU5EX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgInZhbGdyaW5kID49ICRWQUxHUklORF9SRVEiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRWQUxHUklORF9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfVkFMR1JJTkRfTElCUz0iJFZBTEdSSU5EX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJ2YWxncmluZCA+PSBcJFZBTEdSSU5EX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJ2YWxncmluZCA+PSAkVkFMR1JJTkRfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1ZBTEdSSU5EX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAidmFsZ3JpbmQgPj0gJFZBTEdSSU5EX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBWQUxHUklORF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgInZhbGdyaW5kID49ICRWQUxHUklORF9SRVEiYAotICAgICAgICBlbHNlCi0JICAgICAgICBWQUxHUklORF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgInZhbGdyaW5kID49ICRWQUxHUklORF9SRVEiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRWQUxHUklORF9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgICAgICAgICAgIFVTRV9WQUxHUklORD0ibm8iCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JVVNFX1ZBTEdSSU5EPSJubyIKLWVsc2UKLQlWQUxHUklORF9DRkxBR1M9JHBrZ19jdl9WQUxHUklORF9DRkxBR1MKLQlWQUxHUklORF9MSUJTPSRwa2dfY3ZfVkFMR1JJTkRfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCVVTRV9WQUxHUklORD0ieWVzIgotZmkKLSAgZmkKLSAgaWYgdGVzdCAieCRVU0VfVkFMR1JJTkQiID0geHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1ZBTEdSSU5EIDEiID4+Y29uZmRlZnMuaAotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyBleHRyYSBjb2RlIHBhdGhzIGZvciB2YWxncmluZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyBleHRyYSBjb2RlIHBhdGhzIGZvciB2YWxncmluZCIgPiY2O30KLSAgZmkKLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nY292IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2djb3Yrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9nY292OyBlbmFibGVfZ2Nvdj0kZW5hYmxldmFsCi1lbHNlCi0gIGVuYWJsZV9nY292PW5vCi1maQotCi0gIGlmIHRlc3QgeCRlbmFibGVfZ2NvdiA9IHh5ZXMgOyB0aGVuCi0gICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIgotICAgIHRoZW4KLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJnY292IG9ubHkgd29ya3MgaWYgZ2NjIGlzIHVzZWQiICIkTElORU5PIiA1Ci0gICAgZmkKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIFwiLWZwcm9maWxlLWFyY3NcIiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgXCItZnByb2ZpbGUtYXJjc1wiLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAiLWZwcm9maWxlLWFyY3MiIgotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBmbGFnX29rPXllcwotZWxzZQotICBmbGFnX29rPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIEdDT1ZfQ0ZMQUdTPSIkR0NPVl9DRkxBR1MgLWZwcm9maWxlLWFyY3MiCi0gICAgdHJ1ZQotICBlbHNlCi0gICAgdHJ1ZQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyBcIi1mdGVzdC1jb3ZlcmFnZVwiIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyBcIi1mdGVzdC1jb3ZlcmFnZVwiLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAiLWZ0ZXN0LWNvdmVyYWdlIiIKLQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICBHQ09WX0NGTEFHUz0iJEdDT1ZfQ0ZMQUdTIC1mdGVzdC1jb3ZlcmFnZSIKLSAgICB0cnVlCi0gIGVsc2UKLSAgICB0cnVlCi0gICAgdHJ1ZQotICBmaQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQotJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KLQotICAgICAgICBHQ09WX0NGTEFHUz1gZWNobyAiJEdDT1ZfQ0ZMQUdTIiB8IHNlZCAtZSAncy8tT1swLTldKi8vZydgCi0gICAgICAgICAgICAgICAgR0NPVl9MSUJTPS1sZ2NvdgotCi0KLSAgICBHQ09WPWBlY2hvICRDQyB8IHNlZCBzL2djYy9nY292L2dgCi0KLQotICAgIEdTVF9HQ09WX0VOQUJMRUQ9eWVzCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX0dDT1ZfRU5BQkxFRCAxCi1fQUNFT0YKLQotICAgICAgICBpZiB0ZXN0ICJ4JEdTVF9HQ09WX0VOQUJMRUQiID0gInh5ZXMiCi0gICAgdGhlbgotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1PMCIKLQotICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtTzAiCi0KLSAgICAgIEZGTEFHUz0iJEZGTEFHUyAtTzAiCi0KLSAgICAgIENDQVNGTEFHUz0iJENDQVNGTEFHUyAtTzAiCi0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZ2NvdiBlbmFibGVkLCBzZXR0aW5nIENGTEFHUyBhbmQgZnJpZW5kcyB0byAkQ0ZMQUdTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGdjb3YgZW5hYmxlZCwgc2V0dGluZyBDRkxBR1MgYW5kIGZyaWVuZHMgdG8gJENGTEFHUyIgPiY2O30KLSAgICBmaQotICBmaQotICAgaWYgdGVzdCB4JGVuYWJsZV9nY292ID0geHllczsgdGhlbgotICBHU1RfR0NPVl9FTkFCTEVEX1RSVUU9Ci0gIEdTVF9HQ09WX0VOQUJMRURfRkFMU0U9JyMnCi1lbHNlCi0gIEdTVF9HQ09WX0VOQUJMRURfVFJVRT0nIycKLSAgR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRT0KLWZpCi0KLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4YW1wbGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2V4YW1wbGVzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZXhhbXBsZXM7Ci0gICAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgICB5ZXMpIEJVSUxEX0VYQU1QTEVTPXllcyA7OwotICAgICAgICAgIG5vKSAgQlVJTERfRVhBTVBMRVM9bm8gOzsKLSAgICAgICAgICAqKSAgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWRpc2FibGUtZXhhbXBsZXMiICIkTElORU5PIiA1IDs7Ci0gICAgICAgIGVzYWMKLQotZWxzZQotICBCVUlMRF9FWEFNUExFUz15ZXMKLWZpCi0gICAgaWYgdGVzdCAieCRCVUlMRF9FWEFNUExFUyIgPSAieHllcyI7IHRoZW4KLSAgQlVJTERfRVhBTVBMRVNfVFJVRT0KLSAgQlVJTERfRVhBTVBMRVNfRkFMU0U9JyMnCi1lbHNlCi0gIEJVSUxEX0VYQU1QTEVTX1RSVUU9JyMnCi0gIEJVSUxEX0VYQU1QTEVTX0ZBTFNFPQotZmkKLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBrZy1jb25maWctcGF0aCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGtnX2NvbmZpZ19wYXRoK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9wa2dfY29uZmlnX3BhdGg7Ci0gICAgICAgZXhwb3J0IFBLR19DT05GSUdfUEFUSD0ke3dpdGh2YWx9Ci0gICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBTZXQgUEtHX0NPTkZJR19QQVRIIHRvICRQS0dfQ09ORklHX1BBVEgiID4mNQotJGFzX2VjaG8gIiRhc19tZTogU2V0IFBLR19DT05GSUdfUEFUSCB0byAkUEtHX0NPTkZJR19QQVRIIiA+JjY7fQotCi1maQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBhY2thZ2UtbmFtZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGFja2FnZV9uYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9wYWNrYWdlX25hbWU7Ci0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLXBhY2thZ2UtbmFtZSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICAgbm8pICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1wYWNrYWdlLW5hbWUiICIkTElORU5PIiA1IDs7Ci0gICAgICAgICopICAgR1NUX1BBQ0tBR0VfTkFNRT0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotCi0gICAgICBQPQotICAgICAgaWYgdGVzdCAieCRQIiA9ICJ4IgotICAgICAgdGhlbgotICAgICAgICBQPSRQQUNLQUdFX05BTUUKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngwIgotICAgICAgdGhlbgotICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBzb3VyY2UgcmVsZWFzZSIKLSAgICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiCi0gICAgICAgIHRoZW4KLSAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBnaXQiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBHU1RfUEFDS0FHRV9OQU1FPSIkUCBwcmVyZWxlYXNlIgotICAgICAgICBmaQotICAgICAgZmkKLQotCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJEdTVF9QQUNLQUdFX05BTUUgYXMgcGFja2FnZSBuYW1lIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRHU1RfUEFDS0FHRV9OQU1FIGFzIHBhY2thZ2UgbmFtZSIgPiY2O30KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHU1RfUEFDS0FHRV9OQU1FICIkR1NUX1BBQ0tBR0VfTkFNRSIKLV9BQ0VPRgotCi0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGFja2FnZS1vcmlnaW4gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BhY2thZ2Vfb3JpZ2luK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9wYWNrYWdlX29yaWdpbjsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1vcmlnaW4iICIkTElORU5PIiA1IDs7Ci0gICAgICAgIG5vKSAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtcGFja2FnZS1vcmlnaW4iICIkTElORU5PIiA1IDs7Ci0gICAgICAgICopICAgR1NUX1BBQ0tBR0VfT1JJR0lOPSIke3dpdGh2YWx9IiA7OwotICAgICAgZXNhYwotCi1lbHNlCi0gIEdTVF9QQUNLQUdFX09SSUdJTj0iVW5rbm93biBwYWNrYWdlIG9yaWdpbiIKLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkR1NUX1BBQ0tBR0VfT1JJR0lOIGFzIHBhY2thZ2Ugb3JpZ2luIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRHU1RfUEFDS0FHRV9PUklHSU4gYXMgcGFja2FnZSBvcmlnaW4iID4mNjt9Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX1BBQ0tBR0VfT1JJR0lOICIkR1NUX1BBQ0tBR0VfT1JJR0lOIgotX0FDRU9GCi0KLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBsdWdpbnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BsdWdpbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX3BsdWdpbnM7IFdJVEhfUExVR0lOUz0kd2l0aHZhbAotZWxzZQotICBXSVRIX1BMVUdJTlM9Ci1maQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIiCi0gIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIiCi0gIEdTVF9QTFVHSU5TX05PTlBPUlRFRD0iIgotCi0KLQotCi0KLQotCi0gIGVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IGJ1aWxkaW5nIG9mIHBsdWctaW5zIHdpdGggZXh0ZXJuYWwgZGVwcyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IGJ1aWxkaW5nIG9mIHBsdWctaW5zIHdpdGggZXh0ZXJuYWwgZGVwcyAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4IiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiAgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6ICAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9FWFRFUk5BTCIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1leHRlcm5hbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9leHRlcm5hbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2V4dGVybmFsOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfRVhURVJOQUw9eWVzOzsKLSAgICAgIG5vKSBVU0VfRVhURVJOQUw9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWV4dGVybmFsIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9FWFRFUk5BTD15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9FWFRFUk5BTD0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqICBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqICBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBFWFRFUk5BTCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9FWFRFUk5BTD0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqICBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiAgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9FWFRFUk5BTCA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfRVhURVJOQUw9bm8KLSAgICBIQVZFX0VYVEVSTkFMPXllcwotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9FWFRFUk5BTCA9IHhubzsgdGhlbgotICAgIFVTRV9FWFRFUk5BTD1ubwotICBlbHNlCi0gICAgOgotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfRVhURVJOQUwgPSB4eWVzOyB0aGVuCi0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogYnVpbGRpbmcgZXh0ZXJuYWwgcGx1Zy1pbnMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogYnVpbGRpbmcgZXh0ZXJuYWwgcGx1Zy1pbnMiID4mNjt9Ci0gICAgICBCVUlMRF9FWFRFUk5BTD0ieWVzIgotCi0gIGlmIHRlc3QgIngiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHRcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfRVhURVJOQUwgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgOgotICBpZiB0ZXN0ICJ4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBhbGwgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogYWxsIHBsdWctaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHdpbGwgbm90IGJlIGJ1aWx0IiA+JjI7fQotICAgICAgQlVJTERfRVhURVJOQUw9Im5vIgotCi1maQotIGlmIHRlc3QgeCRVU0VfRVhURVJOQUwgPSB4eWVzOyB0aGVuCi0gIFVTRV9FWFRFUk5BTF9UUlVFPQotICBVU0VfRVhURVJOQUxfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9FWFRFUk5BTF9UUlVFPScjJwotICBVU0VfRVhURVJOQUxfRkFMU0U9Ci1maQotCi0KLSAgIyBtYWtlIEJVSUxEX0VYVEVSTkFMIGF2YWlsYWJsZSB0byBNYWtlZmlsZS5hbQotICAgaWYgdGVzdCAieCRCVUlMRF9FWFRFUk5BTCIgPSAieHllcyI7IHRoZW4KLSAgQlVJTERfRVhURVJOQUxfVFJVRT0KLSAgQlVJTERfRVhURVJOQUxfRkFMU0U9JyMnCi1lbHNlCi0gIEJVSUxEX0VYVEVSTkFMX1RSVUU9JyMnCi0gIEJVSUxEX0VYVEVSTkFMX0ZBTFNFPQotZmkKLQotCi0KLQotICBlY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBidWlsZGluZyBvZiBleHBlcmltZW50YWwgcGx1Zy1pbnMgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBjaGVja2luZyBmZWF0dXJlOiBidWlsZGluZyBvZiBleHBlcmltZW50YWwgcGx1Zy1pbnMgKioqIiA+JjY7fQotaWYgdGVzdCAieCIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiAgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfRVhQRVJJTUVOVEFMIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4cGVyaW1lbnRhbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9leHBlcmltZW50YWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9leHBlcmltZW50YWw7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9FWFBFUklNRU5UQUw9eWVzOzsKLSAgICAgIG5vKSBVU0VfRVhQRVJJTUVOVEFMPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1leHBlcmltZW50YWwiICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX0VYUEVSSU1FTlRBTD1ubwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0VYUEVSSU1FTlRBTD0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqICBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqICBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBFWFBFUklNRU5UQUwgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfRVhQRVJJTUVOVEFMPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqICBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX0VYUEVSSU1FTlRBTCA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfRVhQRVJJTUVOVEFMPW5vCi0gICAgSEFWRV9FWFBFUklNRU5UQUw9eWVzCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX0VYUEVSSU1FTlRBTCA9IHhubzsgdGhlbgotICAgIFVTRV9FWFBFUklNRU5UQUw9bm8KLSAgZWxzZQotICAgIDoKLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX0VYUEVSSU1FTlRBTCA9IHh5ZXM7IHRoZW4KLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBidWlsZGluZyBleHBlcmltZW50YWwgcGx1Zy1pbnMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogYnVpbGRpbmcgZXhwZXJpbWVudGFsIHBsdWctaW5zIiA+JjI7fQotICAgICAgQlVJTERfRVhQRVJJTUVOVEFMPSJ5ZXMiCi0KLSAgaWYgdGVzdCAieCIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdFxuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FWFBFUklNRU5UQUwgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgOgotICBpZiB0ZXN0ICJ4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgYnVpbGRpbmcgZXhwZXJpbWVudGFsIHBsdWctaW5zIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IG5vdCBidWlsZGluZyBleHBlcmltZW50YWwgcGx1Zy1pbnMiID4mNjt9Ci0gICAgICBCVUlMRF9FWFBFUklNRU5UQUw9Im5vIgotCi1maQotIGlmIHRlc3QgeCRVU0VfRVhQRVJJTUVOVEFMID0geHllczsgdGhlbgotICBVU0VfRVhQRVJJTUVOVEFMX1RSVUU9Ci0gIFVTRV9FWFBFUklNRU5UQUxfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9FWFBFUklNRU5UQUxfVFJVRT0nIycKLSAgVVNFX0VYUEVSSU1FTlRBTF9GQUxTRT0KLWZpCi0KLQotICAjIG1ha2UgQlVJTERfRVhQRVJJTUVOVEFMIGF2YWlsYWJsZSB0byBNYWtlZmlsZS5hbQotICAgaWYgdGVzdCAieCRCVUlMRF9FWFBFUklNRU5UQUwiID0gInh5ZXMiOyB0aGVuCi0gIEJVSUxEX0VYUEVSSU1FTlRBTF9UUlVFPQotICBCVUlMRF9FWFBFUklNRU5UQUxfRkFMU0U9JyMnCi1lbHNlCi0gIEJVSUxEX0VYUEVSSU1FTlRBTF9UUlVFPScjJwotICBCVUlMRF9FWFBFUklNRU5UQUxfRkFMU0U9Ci1maQotCi0KLQotCi0gIEdTVF9QS0dfQ09ORklHX1BBVEg9IlwkKHRvcF9idWlsZGRpcikvcGtnY29uZmlnIgotICBpZiB0ZXN0ICJ4JFBLR19DT05GSUdfUEFUSCIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BLR19DT05GSUdfUEFUSD0iJEdTVF9QS0dfQ09ORklHX1BBVEg6JFBLR19DT05GSUdfUEFUSCIKLSAgZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nIEdTVF9QS0dfQ09ORklHX1BBVEggPSAkR1NUX1BLR19DT05GSUdfUEFUSCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyBHU1RfUEtHX0NPTkZJR19QQVRIID0gJEdTVF9QS0dfQ09ORklHX1BBVEgiID4mNjt9Ci0KLQotCi0KLQotICAgIGNhc2UgIngke3RhcmdldF9jcHV9IiBpbgotICAgIHhpPzg2IHwgeGs/IHwgeGk/ODZfNjQpCi0gICAgICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiX19pMzg2IiAiYWNfY3ZfaGF2ZV9kZWNsX19faTM4NiIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfX19pMzg2IiA9IHh5ZXM7IHRoZW4gOgotICBJMzg2X0FCST0ieWVzIgotZWxzZQotICBJMzg2X0FCST0ibm8iCi1maQotCi0gICAgICAgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJfX2FtZDY0IiAiYWNfY3ZfaGF2ZV9kZWNsX19fYW1kNjQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX19fYW1kNjQiID0geHllczsgdGhlbiA6Ci0gIEFNRDY0X0FCST0ieWVzIgotZWxzZQotICBBTUQ2NF9BQkk9Im5vIgotZmkKLQotCi0gICAgICAgICAgICBpZiB0ZXN0ICJ4JEkzODZfQUJJIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICAgICAgICAgIEhBVkVfQ1BVX0kzODY9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0kzODYgMSIgPj5jb25mZGVmcy5oCi0KLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBpZiB0ZXN0ICJ4JEFNRDY0X0FCSSIgPSAieHllcyIgOyB0aGVuCi0gICAgICAgICAgICAgICAgSEFWRV9DUFVfWDg2XzY0PXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9YODZfNjQgMSIgPj5jb25mZGVmcy5oCi0KLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgICAgICAgKikKLSAgICAgICAgICAgIEhBVkVfQ1BVX0kzODY9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0kzODYgMSIgPj5jb25mZGVmcy5oCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAieCR7dGFyZ2V0X2NwdX0iIGluCi0gICAgICAgICAgICAgIHhpMzg2IHwgeGk0ODYpIDs7Ci0gICAgICAgICAgICAqKQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1JEVFNDIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICB4cG93ZXJwYykKLSAgICAgIEhBVkVfQ1BVX1BQQz15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfUFBDIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeHBvd2VycGM2NCkKLSAgICAgIEhBVkVfQ1BVX1BQQzY0PXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9QUEM2NCAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhhbHBoYSopCi0gICAgICBIQVZFX0NQVV9BTFBIQT15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQUxQSEEgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4YXJjKikKLSAgICAgIEhBVkVfQ1BVX0FSQz15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfQVJDIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeGFybSopCi0gICAgICBIQVZFX0NQVV9BUk09eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0FSTSAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhhYXJjaDY0KikKLSAgICAgIEhBVkVfQ1BVX0FBUkNINjQ9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0FBUkNINjQgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4c3BhcmMqKQotICAgICAgSEFWRV9DUFVfU1BBUkM9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX1NQQVJDIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeG1pcHMqKQotICAgICAgSEFWRV9DUFVfTUlQUz15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfTUlQUyAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhocHBhKikKLSAgICAgIEhBVkVfQ1BVX0hQUEE9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0hQUEEgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4czM5MCopCi0gICAgICBIQVZFX0NQVV9TMzkwPXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9TMzkwIDEiID4+Y29uZmRlZnMuaAotIDs7Ci0gICAgeGlhNjQqKQotICAgICAgSEFWRV9DUFVfSUE2ND15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DUFVfSUE2NCAxIiA+PmNvbmZkZWZzLmgKLSA7OwotICAgIHhtNjhrKikKLSAgICAgIEhBVkVfQ1BVX002OEs9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX002OEsgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4eDg2XzY0KQotICAgICAgSEFWRV9DUFVfWDg2XzY0PXllcwotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NQVV9YODZfNjQgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4Y3JpcykKLSAgICAgIEhBVkVfQ1BVX0NSSVM9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0NSSVMgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICB4Y3Jpc3YzMikKLSAgICAgIEhBVkVfQ1BVX0NSSVNWMzI9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1BVX0NSSVNWMzIgMSIgPj5jb25mZGVmcy5oCi0gOzsKLSAgZXNhYwotCi0gICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZuZGVmIF9fQVBQTEVfQ0NfXwotCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgotCSAgICAgI2VuZGlmCi0JICAgICB0eXBlZGVmIGludCBkdW1teTsKLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcwotCSMgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAtYXJjaCBmbGFncyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCi0JYWNfYXJjaD0KLQlhY19wcmV2PQotCWZvciBhY193b3JkIGluICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUzsgZG8KLQkgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCi0JICAgY2FzZSAkYWNfd29yZCBpbgotCSAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQotCSAgICAgICBpZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwgdGVzdCAiJGFjX2FyY2giID0gIiRhY193b3JkIjsgdGhlbgotCQkgYWNfYXJjaD0kYWNfd29yZAotCSAgICAgICBlbHNlCi0JCSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWwKLQkJIGJyZWFrCi0JICAgICAgIGZpCi0JICAgICAgIDs7Ci0JICAgZXNhYwotCSAgIGFjX3ByZXY9Ci0JIGVsaWYgdGVzdCAieCRhY193b3JkIiA9ICJ4LWFyY2giOyB0aGVuCi0JICAgYWNfcHJldj1hcmNoCi0JIGZpCi0gICAgICAgZG9uZQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgotICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KLSAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLQotaW50Ci1tYWluICgpCi17Ci0jaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcCi0JCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCi0JCSAgICAgJiYgTElUVExFX0VORElBTikKLQkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCi0JICAgICAjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotCi1pbnQKLW1haW4gKCkKLXsKLSNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4KLQkJIG5vdCBiaWcgZW5kaWFuCi0JCSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCi1lbHNlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgZmkKLSAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KLSAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLWludAotbWFpbiAoKQotewotI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKLQkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCi0JICAgICAjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfQklHX0VORElBTgotCQkgbm90IGJpZyBlbmRpYW4KLQkJI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWVsc2UKLSAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBmaQotICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgotICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgotICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICAjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4KLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotc2hvcnQgaW50IGFzY2lpX21tW10gPQotCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OwotCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9Ci0JCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Ci0JCWludCB1c2VfYXNjaWkgKGludCBpKSB7Ci0JCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07Ci0JCX0KLQkJc2hvcnQgaW50IGViY2RpY19paVtdID0KLQkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsKLQkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KLQkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKLQkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7Ci0JCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKLQkJfQotCQlleHRlcm4gaW50IGZvbzsKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCi0JICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCi0JICAgIGZpCi0JICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KLQkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgotCQlhY19jdl9jX2JpZ2VuZGlhbj1ubwotCSAgICAgIGVsc2UKLQkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/Ci0JCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLQkgICAgICBmaQotCSAgICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0KLQkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KLQkgICAgIHVuaW9uCi0JICAgICB7Ci0JICAgICAgIGxvbmcgaW50IGw7Ci0JICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07Ci0JICAgICB9IHU7Ci0JICAgICB1LmwgPSAxOwotCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2NfYmlnZW5kaWFuPW5vCi1lbHNlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXllcwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLSAgICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQotJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9Ci0gY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKLSAgIHllcykKLSAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAotOzsgIygKLSAgIG5vKQotICAgICAgOzsgIygKLSAgIHVuaXZlcnNhbCkKLQotJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaAotCi0gICAgIDs7ICMoCi0gICAqKQotICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBlbmRpYW5uZXNzCi0gcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElORU5PIiA1IDs7Ci0gZXNhYwotCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfSTM4NiIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfSTM4Nl9UUlVFPQotICBIQVZFX0NQVV9JMzg2X0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9JMzg2X1RSVUU9JyMnCi0gIEhBVkVfQ1BVX0kzODZfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX1BQQyIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfUFBDX1RSVUU9Ci0gIEhBVkVfQ1BVX1BQQ19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfUFBDX1RSVUU9JyMnCi0gIEhBVkVfQ1BVX1BQQ19GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfUFBDNjQiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX1BQQzY0X1RSVUU9Ci0gIEhBVkVfQ1BVX1BQQzY0X0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9QUEM2NF9UUlVFPScjJwotICBIQVZFX0NQVV9QUEM2NF9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfQUxQSEEiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX0FMUEhBX1RSVUU9Ci0gIEhBVkVfQ1BVX0FMUEhBX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9BTFBIQV9UUlVFPScjJwotICBIQVZFX0NQVV9BTFBIQV9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfQVJDIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9BUkNfVFJVRT0KLSAgSEFWRV9DUFVfQVJDX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9BUkNfVFJVRT0nIycKLSAgSEFWRV9DUFVfQVJDX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9BUk0iID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX0FSTV9UUlVFPQotICBIQVZFX0NQVV9BUk1fRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX0FSTV9UUlVFPScjJwotICBIQVZFX0NQVV9BUk1fRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX1NQQVJDIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9TUEFSQ19UUlVFPQotICBIQVZFX0NQVV9TUEFSQ19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfU1BBUkNfVFJVRT0nIycKLSAgSEFWRV9DUFVfU1BBUkNfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX0hQUEEiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX0hQUEFfVFJVRT0KLSAgSEFWRV9DUFVfSFBQQV9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfSFBQQV9UUlVFPScjJwotICBIQVZFX0NQVV9IUFBBX0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9NSVBTIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9NSVBTX1RSVUU9Ci0gIEhBVkVfQ1BVX01JUFNfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX01JUFNfVFJVRT0nIycKLSAgSEFWRV9DUFVfTUlQU19GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfUzM5MCIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfUzM5MF9UUlVFPQotICBIQVZFX0NQVV9TMzkwX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9TMzkwX1RSVUU9JyMnCi0gIEhBVkVfQ1BVX1MzOTBfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0ICJ4JEhBVkVfQ1BVX0lBNjQiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfQ1BVX0lBNjRfVFJVRT0KLSAgSEFWRV9DUFVfSUE2NF9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9DUFVfSUE2NF9UUlVFPScjJwotICBIQVZFX0NQVV9JQTY0X0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9NNjhLIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9NNjhLX1RSVUU9Ci0gIEhBVkVfQ1BVX002OEtfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX002OEtfVFJVRT0nIycKLSAgSEFWRV9DUFVfTTY4S19GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfWDg2XzY0IiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9YODZfNjRfVFJVRT0KLSAgSEFWRV9DUFVfWDg2XzY0X0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9YODZfNjRfVFJVRT0nIycKLSAgSEFWRV9DUFVfWDg2XzY0X0ZBTFNFPQotZmkKLQotICAgaWYgdGVzdCAieCRIQVZFX0NQVV9DUklTIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0NQVV9DUklTX1RSVUU9Ci0gIEhBVkVfQ1BVX0NSSVNfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfQ1BVX0NSSVNfVFJVRT0nIycKLSAgSEFWRV9DUFVfQ1JJU19GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9DUFVfQ1JJU1YzMiIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9DUFVfQ1JJU1YzMl9UUlVFPQotICBIQVZFX0NQVV9DUklTVjMyX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0NQVV9DUklTVjMyX1RSVUU9JyMnCi0gIEhBVkVfQ1BVX0NSSVNWMzJfRkFMU0U9Ci1maQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIT1NUX0NQVSAiJGhvc3RfY3B1IgotX0FDRU9GCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBUQVJHRVRfQ1BVICIkdGFyZ2V0X2NwdSIKLV9BQ0VPRgotCi0KLQotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZuZGVmIF9fQVBQTEVfQ0NfXwotCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgotCSAgICAgI2VuZGlmCi0JICAgICB0eXBlZGVmIGludCBkdW1teTsKLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcwotCSMgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAtYXJjaCBmbGFncyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCi0JYWNfYXJjaD0KLQlhY19wcmV2PQotCWZvciBhY193b3JkIGluICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUzsgZG8KLQkgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCi0JICAgY2FzZSAkYWNfd29yZCBpbgotCSAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQotCSAgICAgICBpZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwgdGVzdCAiJGFjX2FyY2giID0gIiRhY193b3JkIjsgdGhlbgotCQkgYWNfYXJjaD0kYWNfd29yZAotCSAgICAgICBlbHNlCi0JCSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWwKLQkJIGJyZWFrCi0JICAgICAgIGZpCi0JICAgICAgIDs7Ci0JICAgZXNhYwotCSAgIGFjX3ByZXY9Ci0JIGVsaWYgdGVzdCAieCRhY193b3JkIiA9ICJ4LWFyY2giOyB0aGVuCi0JICAgYWNfcHJldj1hcmNoCi0JIGZpCi0gICAgICAgZG9uZQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgotICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KLSAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLQotaW50Ci1tYWluICgpCi17Ci0jaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcCi0JCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCi0JCSAgICAgJiYgTElUVExFX0VORElBTikKLQkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCi0JICAgICAjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotCi1pbnQKLW1haW4gKCkKLXsKLSNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4KLQkJIG5vdCBiaWcgZW5kaWFuCi0JCSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCi1lbHNlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgZmkKLSAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KLSAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLWludAotbWFpbiAoKQotewotI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikKLQkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCi0JICAgICAjZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfQklHX0VORElBTgotCQkgbm90IGJpZyBlbmRpYW4KLQkJI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWVsc2UKLSAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBmaQotICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbgotICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLgotICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICAjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4KLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotc2hvcnQgaW50IGFzY2lpX21tW10gPQotCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9OwotCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9Ci0JCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Ci0JCWludCB1c2VfYXNjaWkgKGludCBpKSB7Ci0JCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07Ci0JCX0KLQkJc2hvcnQgaW50IGViY2RpY19paVtdID0KLQkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsKLQkJc2hvcnQgaW50IGViY2RpY19tbVtdID0KLQkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKLQkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7Ci0JCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsKLQkJfQotCQlleHRlcm4gaW50IGZvbzsKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuCi0JICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCi0JICAgIGZpCi0JICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KLQkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbgotCQlhY19jdl9jX2JpZ2VuZGlhbj1ubwotCSAgICAgIGVsc2UKLQkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/Ci0JCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLQkgICAgICBmaQotCSAgICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci0KLQkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KLQkgICAgIHVuaW9uCi0JICAgICB7Ci0JICAgICAgIGxvbmcgaW50IGw7Ci0JICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07Ci0JICAgICB9IHU7Ci0JICAgICB1LmwgPSAxOwotCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2NfYmlnZW5kaWFuPW5vCi1lbHNlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXllcwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLSAgICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQotJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9Ci0gY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKLSAgIHllcykKLSAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAotOzsgIygKLSAgIG5vKQotICAgICAgOzsgIygKLSAgIHVuaXZlcnNhbCkKLQotJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaAotCi0gICAgIDs7ICMoCi0gICAqKQotICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBlbmRpYW5uZXNzCi0gcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElORU5PIiA1IDs7Ci0gZXNhYwotCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgZmkKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCi0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKLSAgICAgICBjb250aW51ZQotICAgICBmaQotICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1pZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KLSAgICBDQz0iIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIENDPSRhY19jdF9DQwotICBmaQotZmkKLQotZmkKLQotCi10ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQotaWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCi0gIEdDQz15ZXMKLWVsc2UKLSAgR0NDPQotZmkKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZwotICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfY2NfZz1ubwotICAgQ0ZMQUdTPSItZyIKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1lbHNlCi0gIENGTEFHUz0iIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCi0JIENGTEFHUz0iLWciCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Ci1pZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCi0gIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKLWVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIENGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ0ZMQUdTPQotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M4OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotc3RydWN0IHN0YXQ7Ci0vKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCi1zdHJ1Y3QgYnVmIHsgaW50IHg7IH07Ci1GSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwotc3RhdGljIGNoYXIgKmUgKHAsIGkpCi0gICAgIGNoYXIgKipwOwotICAgICBpbnQgaTsKLXsKLSAgcmV0dXJuIHBbaV07Ci19Ci1zdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCi17Ci0gIGNoYXIgKnM7Ci0gIHZhX2xpc3QgdjsKLSAgdmFfc3RhcnQgKHYscCk7Ci0gIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7Ci0gIHZhX2VuZCAodik7Ci0gIHJldHVybiBzOwotfQotCi0vKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwotICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgotICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Ci0gICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCi0gICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KLWludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07Ci0KLS8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycwotICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLwotI2RlZmluZSBGT08oeCkgJ3gnCi1pbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKLQotaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Ci1zdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKLXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwotaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7Ci1pbnQgYXJnYzsKLWNoYXIgKiphcmd2OwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKLQktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgotZG8KLSAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCi0gIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKLUNDPSRhY19zYXZlX0NDCi0KLWZpCi0jIEFDX0NBQ0hFX1ZBTAotY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KLSAgeCkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKLSAgeG5vKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OwotICAqKQotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgotCi1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgdW5kZXJzdGFuZHMgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9wcm9nX2NjX2Nfbys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotICAjIE1ha2Ugc3VyZSBpdCB3b3JrcyBib3RoIHdpdGggJENDIGFuZCB3aXRoIHNpbXBsZSBjYy4KLSAgIyBGb2xsb3dpbmcgQUNfUFJPR19DQ19DX08sIHdlIGRvIHRoZSB0ZXN0IHR3aWNlIGJlY2F1c2Ugc29tZQotICAjIGNvbXBpbGVycyByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIC5vIGZpbGUgd2l0aCAtbywKLSAgIyB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuCi0gIGFtX2N2X3Byb2dfY2NfY19vPXllcwotICBmb3IgYW1faSBpbiAxIDI7IGRvCi0gICAgaWYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQiID4mNQotICAgKCRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0KSA+JjUgMj4mNQotICAgYWNfc3RhdHVzPSQ/Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICAoZXhpdCAkYWNfc3RhdHVzKTsgfSBcCi0gICAgICAgICAmJiB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0OyB0aGVuCi0gICAgICA6IE9LCi0gICAgZWxzZQotICAgICAgYW1fY3ZfcHJvZ19jY19jX289bm8KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBybSAtZiBjb3JlIGNvbmZ0ZXN0KgotICB1bnNldCBhbV9pCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9wcm9nX2NjX2NfbyIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3Byb2dfY2NfY19vIiA+JjY7IH0KLWlmIHRlc3QgIiRhbV9jdl9wcm9nX2NjX2NfbyIgIT0geWVzOyB0aGVuCi0gICAjIExvc2luZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0LgotICAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4KLSAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLgotICAgIyBBIGxvbmdlci10ZXJtIGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLAotICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxlIFwkKENDKSIKLSAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyIKLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGFtX191bml2ZXJzYWw9ZmFsc2UKLSAgY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWMKLQotICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KLSAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKLSAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCi0gICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgotICAgICMKLSAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQotICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCi0gICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCi0gICAgOiA+IHN1Yi9jb25mdGVzdC5jCi0gICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCi0gICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCi0gICAgICAjIFVzaW5nICI6ID4gc3ViL2NvbmZ0c3QkaS5oIiBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAotICAgICAgIyBTb2xhcmlzIDEwIC9iaW4vc2guCi0gICAgICBlY2hvICcvKiBkdW1teSAqLycgPiBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgIyBXZSBjaGVjayB3aXRoICctYycgYW5kICctbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSAnLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKLSAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMuCi0gICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgZ2NjKQotICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KLSAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCi0gICAgICA7OwotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgQWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBlbHNlCi0JYnJlYWsKLSAgICAgIGZpCi0gICAgICA7OwotICAgIG1zdmM3IHwgbXN2Yzdtc3lzIHwgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKLSAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rICctYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCi0gICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKLSAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCi0gICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgICBhbV9fbWludXNfb2JqPQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDX0ZBTFNFPQotZmkKLQotCi0gICBjYXNlICRhY19jdl9wcm9nX2NjX3N0ZGMgaW4gIygKLSAgbm8pIDoKLSAgICBhY19jdl9wcm9nX2NjX2M5OT1ubzsgYWNfY3ZfcHJvZ19jY19jODk9bm8gOzsgIygKLSAgKikgOgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDOTkuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19jOTkrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M5OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d2NoYXIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vLyBDaGVjayB2YXJhcmdzIG1hY3Jvcy4gIFRoZXNlIGV4YW1wbGVzIGFyZSB0YWtlbiBmcm9tIEM5OSA2LjEwLjMuNS4KLSNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmIChzdGRlcnIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBzaG93bGlzdCguLi4pIHB1dHMgKCNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgcmVwb3J0KHRlc3QsLi4uKSAoKHRlc3QpID8gcHV0cyAoI3Rlc3QpIDogcHJpbnRmIChfX1ZBX0FSR1NfXykpCi1zdGF0aWMgdm9pZAotdGVzdF92YXJhcmdzX21hY3JvcyAodm9pZCkKLXsKLSAgaW50IHggPSAxMjM0OwotICBpbnQgeSA9IDU2Nzg7Ci0gIGRlYnVnICgiRmxhZyIpOwotICBkZWJ1ZyAoIlggPSAlZFxuIiwgeCk7Ci0gIHNob3dsaXN0IChUaGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGl0ZW1zLik7Ci0gIHJlcG9ydCAoeD55LCAieCBpcyAlZCBidXQgeSBpcyAlZCIsIHgsIHkpOwotfQotCi0vLyBDaGVjayBsb25nIGxvbmcgdHlwZXMuCi0jZGVmaW5lIEJJRzY0IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsCi0jZGVmaW5lIEJJRzMyIDQyOTQ5NjcyOTV1bAotI2RlZmluZSBCSUdfT0sgKEJJRzY0IC8gQklHMzIgPT0gNDI5NDk2NzI5N3VsbCAmJiBCSUc2NCAlIEJJRzMyID09IDApCi0jaWYgIUJJR19PSwotICB5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW47Ci0jZW5kaWYKLSNpZiBCSUdfT0sKLSNlbHNlCi0gIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKLSNlbmRpZgotc3RhdGljIGxvbmcgbG9uZyBpbnQgYmlnbnVtID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHViaWdudW0gPSBCSUc2NDsKLQotc3RydWN0IGluY29tcGxldGVfYXJyYXkKLXsKLSAgaW50IGRhdGFzaXplOwotICBkb3VibGUgZGF0YVtdOwotfTsKLQotc3RydWN0IG5hbWVkX2luaXQgewotICBpbnQgbnVtYmVyOwotICBjb25zdCB3Y2hhcl90ICpuYW1lOwotICBkb3VibGUgYXZlcmFnZTsKLX07Ci0KLXR5cGVkZWYgY29uc3QgY2hhciAqY2NwOwotCi1zdGF0aWMgaW5saW5lIGludAotdGVzdF9yZXN0cmljdCAoY2NwIHJlc3RyaWN0IHRleHQpCi17Ci0gIC8vIFNlZSBpZiBDKystc3R5bGUgY29tbWVudHMgd29yay4KLSAgLy8gSXRlcmF0ZSB0aHJvdWdoIGl0ZW1zIHZpYSB0aGUgcmVzdHJpY3RlZCBwb2ludGVyLgotICAvLyBBbHNvIGNoZWNrIGZvciBkZWNsYXJhdGlvbnMgaW4gZm9yIGxvb3BzLgotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgKih0ZXh0K2kpICE9ICdcMCc7ICsraSkKLSAgICBjb250aW51ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIENoZWNrIHZhcmFyZ3MgYW5kIHZhX2NvcHkuCi1zdGF0aWMgdm9pZAotdGVzdF92YXJhcmdzIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKLSAgdmFfbGlzdCBhcmdzX2NvcHk7Ci0gIHZhX2NvcHkgKGFyZ3NfY29weSwgYXJncyk7Ci0KLSAgY29uc3QgY2hhciAqc3RyOwotICBpbnQgbnVtYmVyOwotICBmbG9hdCBmbnVtYmVyOwotCi0gIHdoaWxlICgqZm9ybWF0KQotICAgIHsKLSAgICAgIHN3aXRjaCAoKmZvcm1hdCsrKQotCXsKLQljYXNlICdzJzogLy8gc3RyaW5nCi0JICBzdHIgPSB2YV9hcmcgKGFyZ3NfY29weSwgY29uc3QgY2hhciAqKTsKLQkgIGJyZWFrOwotCWNhc2UgJ2QnOiAvLyBpbnQKLQkgIG51bWJlciA9IHZhX2FyZyAoYXJnc19jb3B5LCBpbnQpOwotCSAgYnJlYWs7Ci0JY2FzZSAnZic6IC8vIGZsb2F0Ci0JICBmbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGRvdWJsZSk7Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCSAgYnJlYWs7Ci0JfQotICAgIH0KLSAgdmFfZW5kIChhcmdzX2NvcHkpOwotICB2YV9lbmQgKGFyZ3MpOwotfQotCi1pbnQKLW1haW4gKCkKLXsKLQotICAvLyBDaGVjayBib29sLgotICBfQm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgLy8gQ2hlY2sgcmVzdHJpY3QuCi0gIGlmICh0ZXN0X3Jlc3RyaWN0ICgiU3RyaW5nIGxpdGVyYWwiKSA9PSAwKQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotICBjaGFyICpyZXN0cmljdCBuZXd2YXIgPSAiQW5vdGhlciBzdHJpbmciOwotCi0gIC8vIENoZWNrIHZhcmFyZ3MuCi0gIHRlc3RfdmFyYXJncyAoInMsIGQnIGYgLiIsICJzdHJpbmciLCA2NSwgMzQuMjM0KTsKLSAgdGVzdF92YXJhcmdzX21hY3JvcyAoKTsKLQotICAvLyBDaGVjayBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgotICBzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSAqaWEgPQotICAgIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheSkgKyAoc2l6ZW9mIChkb3VibGUpICogMTApKTsKLSAgaWEtPmRhdGFzaXplID0gMTA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaWEtPmRhdGFzaXplOyArK2kpCi0gICAgaWEtPmRhdGFbaV0gPSBpICogMS4yMzQ7Ci0KLSAgLy8gQ2hlY2sgbmFtZWQgaW5pdGlhbGl6ZXJzLgotICBzdHJ1Y3QgbmFtZWRfaW5pdCBuaSA9IHsKLSAgICAubnVtYmVyID0gMzQsCi0gICAgLm5hbWUgPSBMIlRlc3Qgd2lkZSBzdHJpbmciLAotICAgIC5hdmVyYWdlID0gNTQzLjM0MzQzLAotICB9OwotCi0gIG5pLm51bWJlciA9IDU4OwotCi0gIGludCBkeW5hbWljX2FycmF5W25pLm51bWJlcl07Ci0gIGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyIC0gMV0gPSA1NDM7Ci0KLSAgLy8gd29yayBhcm91bmQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmdzCi0gIHJldHVybiAoIXN1Y2Nlc3MgfHwgYmlnbnVtID09IDBMTCB8fCB1YmlnbnVtID09IDB1TEwgfHwgbmV3dmFyWzBdID09ICd4JwotCSAgfHwgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSAhPSA1NDMpOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycgLXN0ZD1nbnU5OSAtc3RkPWM5OSAtYzk5IC1BQzk5IC1EX1NURENfQzk5PSAtcWxhbmdsdmw9ZXh0Yzk5Ci1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M5OT0kYWNfYXJnCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzk5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jOTkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M5OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9IHhubzsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jOTkKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3Byb2dfY2NfYzg5PW5vCi1hY19zYXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1zdHJ1Y3Qgc3RhdDsKLS8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KLXN0cnVjdCBidWYgeyBpbnQgeDsgfTsKLUZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Ci1zdGF0aWMgY2hhciAqZSAocCwgaSkKLSAgICAgY2hhciAqKnA7Ci0gICAgIGludCBpOwotewotICByZXR1cm4gcFtpXTsKLX0KLXN0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKLXsKLSAgY2hhciAqczsKLSAgdmFfbGlzdCB2OwotICB2YV9zdGFydCAodixwKTsKLSAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKLSAgdmFfZW5kICh2KTsKLSAgcmV0dXJuIHM7Ci19Ci0KLS8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCi0gICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCi0gICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKLQotLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCi0gICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCi0jZGVmaW5lIEZPTyh4KSAneCcKLWludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOwotCi1pbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKLXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owotc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Ci1pbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKLWludCBhcmdjOwotY2hhciAqKmFyZ3Y7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAotCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2Nfc3RkYz0kYWNfY3ZfcHJvZ19jY19jODkKLWVsc2UKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCi1maQotCi1maQotIDs7Ci1lc2FjCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gU3RhbmRhcmQgQy4uLiAiID4mNjsgfQotICBpZiAke2FjX2N2X3Byb2dfY2Nfc3RkYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1maQotCi0gIGNhc2UgJGFjX2N2X3Byb2dfY2Nfc3RkYyBpbiAjKAotICBubykgOgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OyAjKAotICAnJykgOgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OyAjKAotICAqKSA6Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNjsgfSA7OwotZXNhYwotCi0KLWFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgotICAgIENYWD0kQ0NDCi0gIGVsc2UKLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DWFg9JGFjX2N2X3Byb2dfQ1hYCi1pZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWCIgPiY1Ci0kYXNfZWNobyAiJENYWCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCi0gIGFjX2N0X0NYWD0kQ1hYCi0gIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKLWlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCi0gICAgQ1hYPSJnKysiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ1hYPSRhY19jdF9DWFgKLSAgZmkKLWZpCi0KLSAgZmkKLWZpCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi0kYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBhY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KLSAgR1hYPXllcwotZWxzZQotICBHWFg9Ci1maQotYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KLWFjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCi0gICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCi0gICBhY19jdl9wcm9nX2N4eF9nPW5vCi0gICBDWFhGTEFHUz0iLWciCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2N4eF9nPXllcwotZWxzZQotICBDWFhGTEFHUz0iIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCi0JIENYWEZMQUdTPSItZyIKLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgotICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgQ1hYRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENYWEZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ci0gIGZpCi1maQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1kZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9Ci0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgotICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAotICBmaQotICBhbV9fdW5pdmVyc2FsPWZhbHNlCi0gIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAotICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OwotICAgICBlc2FjCi0KLSAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCi0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCi0gICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAotICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KLSAgICAjCi0gICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKLSAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgotICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgotICAgIDogPiBzdWIvY29uZnRlc3QuYwotICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwotICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgotICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCi0gICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgotICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCi0gICAgY2FzZSAkZGVwbW9kZSBpbgotICAgIGdjYykKLSAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCi0gICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQotICAgICAgOzsKLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCi0gICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcwotICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCi0gICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgotICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQotICAgICAgYW1fX21pbnVzX29iaj0KLSAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCi0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCi0gICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQotICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAotICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCi0gICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKLSAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0KLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotZWxzZQotICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KLUNYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCi0KLSBpZgotICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAotICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCi1lbHNlCi0gIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQotZmkKLQotCi0KLQotZnVuY19zdHJpcG5hbWVfY25mICgpCi17Ci0gIGNhc2UgJDIgaW4KLSAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgInMlXiQxJSU7IHMlXFxcXCQyXCQlJSJgOzsKLSAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgInMlXiQxJSU7IHMlJDJcJCUlImA7OwotICBlc2FjCi19ICMgZnVuY19zdHJpcG5hbWVfY25mCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKLSAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KLSAgYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgotICBpZiAke2FjX2N2X3Byb2dfQ1hYQ1BQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAotICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKLSAgICBkbwotICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0gIGJyZWFrCi1maQotCi0gICAgZG9uZQotICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLQotZmkKLSAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAotZWxzZQotICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFhDUFAiID4mNQotJGFzX2VjaG8gIiRDWFhDUFAiID4mNjsgfQotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0KLWVsc2UKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWVsc2UKLSAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCi1maQotCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KLWFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPQotY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD1ubwotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KLWhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9bm8KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9Ci1oYXJkY29kZV9taW51c19MX0NYWD1ubwotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLWhhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KLWluaGVyaXRfcnBhdGhfQ1hYPW5vCi1tb2R1bGVfY21kc19DWFg9Ci1tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQotbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgotb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKLXJlbG9hZF9mbGFnX0NYWD0kcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzX0NYWD0kcmVsb2FkX2NtZHMKLW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfQ1hYPSRvYmpleHQKLQotIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAotIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQotIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAotIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIjsgdGhlbgotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLSAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKLQotICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLQotCi0KLQotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLQotICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRSTSBjb25mdGVzdCoKLQotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gLXIgY29uZnRlc3QqCi0KLQotICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSRDQwotICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGx0X3NhdmVfTEQ9JExECi0gIGx0X3NhdmVfR0NDPSRHQ0MKLSAgR0NDPSRHWFgKLSAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLSAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECi0gIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KLSAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLSAgZWxzZQotICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAotICBmaQotICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KLSAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCi0gIGVsc2UKLSAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAotICBmaQotICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotICBDQz0ke0NYWC0iYysrIn0KLSAgQ0ZMQUdTPSRDWFhGTEFHUwotICBjb21waWxlcj0kQ0MKLSAgY29tcGlsZXJfQ1hYPSRDQwotICBmdW5jX2NjX2Jhc2VuYW1lICRjb21waWxlcgotY2NfYmFzZW5hbWU9JGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0Ci0KLQotICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCi0gICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCi0gICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9JyAtZm5vLWJ1aWx0aW4nCi0gICAgZWxzZQotICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCi1lbHNlCi0gIHdpdGhfZ251X2xkPW5vCi1maQotCi1hY19wcm9nPWxkCi1pZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9Ci0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtcXC9dKiB8ID86W1xcL10qKQotICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KLWZpCi1pZiAke2x0X2N2X3BhdGhfTEQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZwotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCi0JOzsKLSAgICAgICopCi0JdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSRsdF9zYXZlX2lmcwotZWxzZQotICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEIiA+JjUKLSRhc19lY2hvICIkTEQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi10ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19nbnVfbGQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGx0X2N2X3Byb2dfZ251X2xkPXllcwotICA7OwotKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KLSAgOzsKLWVzYWMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi0KLQotCi0KLQotCi0KLSAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQotICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKLQotICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCi0gICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgICAgIHdsYXJjPSckd2wnCi0KLSAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8Ci0JICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgICAgZWxzZQotICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICAgICAgd2xhcmM9Ci0KLSAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKLSAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICAgIGZpCi0KLSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0KLSAgICBlbHNlCi0gICAgICBHWFg9bm8KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgICB3bGFyYz0KLSAgICBmaQotCi0gICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQotICAgIGxkX3NobGlic19DWFg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4MyopCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgIDs7Ci0gICAgICBhaXhbNC05XSopCi0gICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0gICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLSAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLSAgICAgICAgICAjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgotICAgICAgICAgICMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZwotICAgICAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KLSAgICAgICAgICAjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKLSAgICAgICAgICAjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKLSAgICAgICAgICAjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcwotICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKLSAgICAgICAgICAjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubwotICAgICAgICAgICMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLSAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCi0gICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQotCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgICAgICBjYXNlICRsZF9mbGFnIGluCi0JICAgICAgKi1icnRsKikKLQkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgICAgICBicmVhawotCSAgICAgICAgOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgICAgaWYgdGVzdCBzdnI0LG5vID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKLQkgICAgICAjIHNvIHdlIGRvbid0IGhhdmUgbGliLmEgc2hhcmVkIGxpYnMgdG8gbGluayBvdXIgZXhlY3V0YWJsZXMuCi0JICAgICAgIyBXZSBoYXZlIHRvIGZvcmNlIHJ1bnRpbWUgbGlua2luZyBpbiB0aGlzIGNhc2UuCi0JICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWJydGwiCi0JICAgIGZpCi0JICAgIDs7Ci0gICAgICAgICAgZXNhYwotCi0gICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLSAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICAgIGZpCi0KLSAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJwotICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcwotICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKLSAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0gICAgICAgIGZpbGVfbGlzdF9zcGVjX0NYWD0nJHdsLWYsJwotICAgICAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLSAgICAgICAgYWl4LCopIDs7CSMgbm8gaW1wb3J0IGZpbGUKLSAgICAgICAgc3ZyNCwqIHwgKix5ZXMpICMgdXNlIGltcG9ydCBmaWxlCi0gICAgICAgICAgIyBUaGUgSW1wb3J0IEZpbGUgZGVmaW5lcyB3aGF0IHRvIGhhcmRjb2RlLgotICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotCi0gICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLSAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLSAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgotCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXVuc3VwcG9ydGVkCi0JICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLQkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcwotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KLQkgIGZpCi0gICAgICAgICAgZXNhYwotICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJwotCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPSRzaGFyZWRfZmxhZycgJHdsLUcnCi0JICBmaQotCSAgIyBOZWVkIHRvIGVuc3VyZSBydW50aW1lIGxpbmtpbmcgaXMgZGlzYWJsZWQgZm9yIHRoZSB0cmFkaXRpb25hbAotCSAgIyBzaGFyZWQgbGlicmFyeSwgb3IgdGhlIGxpbmtlciBtYXkgZXZlbnR1YWxseSBmaW5kIHNoYXJlZCBsaWJyYXJpZXMKLQkgICMgL3dpdGgvIEltcG9ydCBGaWxlIC0gd2UgZG8gbm90IHdhbnQgdG8gbWl4IHRoZW0uCi0JICBzaGFyZWRfZmxhZ19haXg9Jy1zaGFyZWQnCi0JICBzaGFyZWRfZmxhZ19zdnI0PSctc2hhcmVkICR3bC1HJwotICAgICAgICBlbHNlCi0gICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotICAgICAgICAgIGVsc2UKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJwotCSAgICBlbHNlCi0JICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCi0JICAgIGZpCi0JICAgIHNoYXJlZF9mbGFnX2FpeD0nJHdsLWJNOlNSRScKLQkgICAgc2hhcmVkX2ZsYWdfc3ZyND0nJHdsLUcnCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLQotICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtYmV4cGFsbCcKLSAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bwotCSMgZXhwb3J0LgotICAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcwotCWlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgICAgICAjIFRoZSAiLUciIGxpbmtlciBmbGFnIGFsbG93cyB1bmRlZmluZWQgc3ltYm9scy4KLSAgICAgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJub3RvaycKLSAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKLSAgICAgICAgICAjIGV4ZWN1dGFibGUuCi0gICAgICAgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgotICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKLWVsc2UKLSAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLQotICBsdF9haXhfbGlicGF0aF9zZWQ9JwotICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCSAgL14wLyB7Ci0JICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KLQkgICAgICBwCi0JICB9Ci0gICAgICB9JwotICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgotICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0gIGZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0vdXNyL2xpYjovbGliCi0gIGZpCi0KLWZpCi0KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKLWZpCi0KLSAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0KLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZwotICAgICAgICBlbHNlCi0gICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLSAgICAgICAgICBlbHNlCi0JICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0JICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfScKLSAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgotICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9L3Vzci9saWI6L2xpYgotICBmaQotCi1maQotCi0gIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCi1maQotCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtYmVybm90b2snCi0JICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1iZXJvaycKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCi0JICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgICBlbHNlCi0JICAgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckY29udmVuaWVuY2UnCi0JICAgIGZpCi0JICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZH4kTUtESVIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCi0JICAgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgotCSAgICBjb21waWxlcl9mbGFnc19maWx0ZXJlZD0nYGZ1bmNfZWNob19hbGwgIiRjb21waWxlcl9mbGFncyAiIHwgJFNFRCAtZSAicyUtYnJ0bFxcKFssIF1cXCklLWJlcm9rXFwxJWciYCcKLQkgICAgaWYgdGVzdCBzdnI0ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgotCSAgICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAotCSAgICAgICMgbGlicmFyaWVzLiBOZWVkIC1ibm9ydGwgbGF0ZSwgd2UgbWF5IGhhdmUgLWJydGwgaW4gTERGTEFHUy4KLQkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIid+JENDICckc2hhcmVkX2ZsYWdfYWl4JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZScKLQkgICAgZmkKLQkgICAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0JICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IiRhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCInfiRDQyAnJHNoYXJlZF9mbGFnX3N2cjQnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JFNUUklQIC1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vfiggZnVuY19lY2hvX2FsbCAiIyEgJHNvbmFtZSgkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiOyBpZiB0ZXN0IHNocl82NCA9ICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiMgNjQiOyBlbHNlIGZ1bmNfZWNob19hbGwgIiMgMzIiOyBmaTsgY2F0ICRleHBvcnRfc3ltYm9scyApID4gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcH4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcCcKLQkgICAgZWxzZQotCSAgICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scwotCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiJ34kTVYgICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJG91dHB1dF9vYmpkaXInCi0JICAgIGZpCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLQotICAgICAgYmVvcyopCi0JaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0JICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWVsc2UKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0KLSAgICAgIGNob3J1cyopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgKikKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgbGRfc2hsaWJzX0NYWD1ubwotCSAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0JY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgotCSxjbCogfCBubyxjbCopCi0JICAjIE5hdGl2ZSBNU1ZDCi0JICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0JICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLQkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCi0JICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCi0JICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCSAgbGliZXh0PWxpYgotCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0JICBzaHJleHRfY21kcz0uZGxsCi0JICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgotICAgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOwotICAgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSAgICAgICAgICAgIGZpfgotICAgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotICAgICAgICAgICAgbGlua25hbWVzPScKLQkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLQkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJwotCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCi0JICAjIERvbid0IHVzZSByYW5saWIKLQkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCi0JICBwb3N0bGlua19jbWRzX0NYWD0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLSAgICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSAgICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7Ci0gICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKLSAgICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgZXNhY34KLSAgICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+Ci0gICAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSAgICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLSAgICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0gICAgICAgICAgICBmaScKLQkgIDs7Ci0JKikKLQkgICMgZysrCi0JICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLQkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKLQkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLQkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcwotCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCi0JICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCi0gICAgICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgICAgICBmaX4KLSAgICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JICBlbHNlCi0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgIGZpCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLQotCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCi0gIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJwotCi0gIGVsc2UKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JycKLSAgZmkKLSAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0gIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKLSAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKLSAgZXNhYwotICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKLSAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgICAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KLSAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgIGZpCi0KLSAgZWxzZQotICBsZF9zaGxpYnNfQ1hYPW5vCi0gIGZpCi0KLQk7OwotCi0gICAgICBvczIqKQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0JaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0Jc2hyZXh0X2NtZHM9LmRsbAotCWFyY2hpdmVfY21kc19DWFg9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBlbXhleHAgJGxpYm9ianMgfCAkU0VEIC8iX0RMTF9Jbml0VGVybSIvZCA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgcHJlZml4X2NtZHM9IiRTRUQifgotCSAgaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCi0JICAgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCSAgZml+Ci0JICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgIGVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLQlvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0NYWD0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX1fZGxsLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcwotCTs7Ci0KLSAgICAgIGRndXgqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIGVjKysqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICAgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZDIuKikKLSAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZQotCSMgc3dpdGNoIHRvIEVMRgotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgIDs7Ci0KLSAgICAgIGZyZWVic2QtZWxmKikKLSAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgICAgIDs7Ci0KLSAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKLSAgICAgICAgIyBjb252ZW50aW9ucwotICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcwotICAgICAgICA7OwotCi0gICAgICBoYWlrdSopCi0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGhwdXg5KikKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bCtiICR3bCRsaWJkaXInCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLSAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCi0gICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0KLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0gICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgYUNDKikKLSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLSAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLSAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgKikKLSAgICAgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICAgaHB1eDEwKnxocHV4MTEqKQotICAgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wrYiAkd2wkbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0gICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKikKLQkgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgIGZpCi0gICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICAgICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gICAgICAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCi0gICAgICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgQ0MqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICAgIGFDQyopCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgICAgaHBwYSo2NCopCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgICAgaWE2NCopCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICA7OwotCSAgICAgICopCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICA7OwotCSAgICBlc2FjCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAjCi0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0JICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICAgICAgICBocHBhKjY0KikKLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgICAgICA7OwotCSAgICAgICAgICBpYTY0KikKLQkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICAgICopCi0JICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgICAgICA7OwotCSAgICAgICAgZXNhYwotCSAgICAgIGZpCi0JICAgIGVsc2UKLQkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIGZpCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICAgaW50ZXJpeFszLTldKikKLQloYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCi0JIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLQkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0JIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLQkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0JOzsKLSAgICAgIGlyaXg1KiB8IGlyaXg2KikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgICMgU0dJIEMrKwotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgICAgIGVsc2UKLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAtbyAkbGliJwotCSAgICAgIGZpCi0JICAgIGZpCi0JICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotICAgICAgICBpbmhlcml0X3JwYXRoX0NYWD15ZXMKLSAgICAgICAgOzsKLQotICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBLQ0MqKQotCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgIwotCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKLQotCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqICkKLQkgICAgIyBJbnRlbCBDKysKLQkgICAgd2l0aF9nbnVfbGQ9eWVzCi0JICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCi0JICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCi0JICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSAgICAgICoiVmVyc2lvbiA3LiIqKQotCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkJOzsKLQkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgotCSAgICAgICAgdG1wX2lkeW49Ci0JICAgICAgICBjYXNlICRob3N0X2NwdSBpbgotCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKLQkJZXNhYwotCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCQk7OwotCSAgICBlc2FjCi0JICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCi0JICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgICAgOzsKLSAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKLSAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JICAgIGNhc2UgYCRDQyAtVmAgaW4KLQkgICAgKnBnQ0NcIFsxLTVdLiogfCAqcGdjcHBcIFsxLTVdLiopCi0JICAgICAgcHJlbGlua19jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKLQkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KLSAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgotICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgotICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKLQkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+Ci0gICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0gICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgICAgOzsKLQkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLQkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgICA7OwotCSAgICBlc2FjCi0KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKLQkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICAgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKLQotCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgIwotCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJwotCSAgICA7OwotCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCi0JICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgotCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQkgICAgZmkKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0JICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgICAgY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD15ZXMKLQotCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgICAjIGluIHRoZSBhcmNoaXZlLgotCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLQotICAgICAgbHlueG9zKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0KLSAgICAgIG04OGsqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0KLSAgICAgIG12cyopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgY3h4KikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLQkgICopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0KLSAgICAgIG5ldGJzZCopCi0gICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLQkgIHdsYXJjPQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotCWZpCi0JIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLQk7OwotCi0gICAgICAqbnRvKiB8ICpxbngqKQotICAgICAgICBsZF9zaGxpYnNfQ1hYPXllcwotCTs7Ci0KLSAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKLQlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLQkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0JICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcwotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJwotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGZpCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCi0JZWxzZQotCSAgbGRfc2hsaWJzX0NYWD1ubwotCWZpCi0JOzsKLQotICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIEtDQyopCi0JICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgIyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQkgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgIG9zZjMqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7Ci0JICAgICAgKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0gICAgICAgICAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLSAgICAgICAgICBjeHgqKQotCSAgICBjYXNlICRob3N0IGluCi0JICAgICAgb3NmMyopCi0JICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0JCTs7Ci0JICAgICAgKikKLQkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+Ci0gICAgICAgICAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAkd2wtaW5wdXQgJHdsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifgotICAgICAgICAgICAgICAgICAgJFJNICRsaWIuZXhwJwotCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJwotCQk7OwotCSAgICBlc2FjCi0KLQkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAjCi0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotCSAgICA7OwotCSAgKikKLQkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJwotCSAgICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICAgIG9zZjMqKQotCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkJICA7OwotCSAgICAgICAgKikKLQkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCQkgIDs7Ci0JICAgICAgZXNhYwotCi0JICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0KLQkgICAgZWxzZQotCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgZmkKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBwc29zKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgICAgOzsKLQotICAgICAgc3Vub3M0KikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLSAgICAgICAgICBsY2MqKQotCSAgICAjIEx1Y2lkCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBzb2xhcmlzKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyogfCBzdW5DQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLSAgICAgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQkgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLU0gJHdsJGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJwotCSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotCSAgICBjYXNlICRob3N0X29zIGluCi0JICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCSAgICAgICopCi0JCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuCi0JICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JICAgICAgICA7OwotCSAgICBlc2FjCi0JICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAgICMgaW4gdGhlIGFyY2hpdmUuCi0JICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCi0JICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wteiAke3dsfWRlZnMnCi0JICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCi0JICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJwotCSAgICAgIGVsc2UKLQkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgJy1HJyBOT1QgJy1zaGFyZWQnIG9uIHRoaXMKLQkgICAgICAgICMgcGxhdGZvcm0uCi0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAgICAgICAgICAgICAgICAgJENDIC1HIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQotCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0JICAgICAgZmkKLQotCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiAkd2wkbGliZGlyJwotCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLQkJc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCQkqKQotCQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JCSAgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIENDKikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLQkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0JIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLQkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLQkjIGFzIC16IGRlZnMuCi0Jbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteix0ZXh0JwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosbm9kZWZzJwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SLCRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCi0JbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUJleHBvcnQnCi0JcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgotICAgICAgICAgICAgICAnIiRvbGRfYXJjaGl2ZV9jbWRzX0NYWCIKLQkgICAgcmVsb2FkX2NtZHNfQ1hYPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgotICAgICAgICAgICAgICAnIiRyZWxvYWRfY21kc19DWFgiCi0JICAgIDs7Ci0JICAqKQotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIDs7Ci0JZXNhYwotICAgICAgOzsKLQotICAgICAgdGFuZGVtKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBOQ0MqKQotCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIGxkX3NobGlic19DWFg9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgbGRfc2hsaWJzX0NYWD1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHZ4d29ya3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgICA7OwotCi0gICAgICAqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQotICAgIHRlc3Qgbm8gPSAiJGxkX3NobGlic19DWFgiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotICAgIEdDQ19DWFg9JEdYWAotICAgIExEX0NYWD0kTEQKLQotICAgICMjIENBVkVBVCBFTVBUT1I6Ci0gICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKLSAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQotICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgotICAgICMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci1wcmVkZXBfb2JqZWN0c19DWFg9Ci1wb3N0ZGVwX29iamVjdHNfQ1hYPQotcHJlZGVwc19DWFg9Ci1wb3N0ZGVwc19DWFg9Ci1jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQotCi1jYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotX0xUX0VPRgotCi0KLV9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLWNhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKLSpcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OwotKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OwotKlwgLWZ1c2UtbGlua2VyLXBsdWdpbipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXVzZS1saW5rZXItcGx1Z2luIiA7OwotZXNhYwotCi1pZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0gICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotCi0gICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKLSAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCi0gIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KLQotICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCi0gICAgY2FzZSAkcHJldiRwIGluCi0KLSAgICAtTCogfCAtUiogfCAtbCopCi0gICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KLSAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCi0gICAgICAgaWYgdGVzdCB4LUwgPSAiJHAiIHx8Ci0gICAgICAgICAgdGVzdCB4LVIgPSAiJHAiOyB0aGVuCi0JIHByZXY9JHAKLQkgY29udGludWUKLSAgICAgICBmaQotCi0gICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KLSAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KLSAgICAgICAgIGNhc2UgJHAgaW4KLSAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotICAgICAgICAgLWwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1sJyAnJyAiJHAiOyBwcmV2PS1sOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICAgIGVzYWMKLSAgICAgICBmaQotICAgICAgIGNhc2UgJHAgaW4KLSAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotICAgICAgIGVzYWMKLSAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgotCSBjYXNlICRwcmV2IGluCi0JIC1MIHwgLVIpCi0JICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCi0JICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCi0JICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCi0JICAgaWYgdGVzdCAteiAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiOyB0aGVuCi0JICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSRwcmV2JHAKLQkgICBlbHNlCi0JICAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSIke2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFh9ICRwcmV2JHAiCi0JICAgZmkKLQkgICA7OwotCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwotCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KLQkgZXNhYwotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwc19DWFg9JHByZXYkcAotCSBlbHNlCi0JICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHByZXYkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIHByZXY9Ci0gICAgICAgOzsKLQotICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cwotICAgICouJG9iamV4dCkKLSAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKLSAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KLSAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KLQkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKLQkgY29udGludWUKLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KLQkgaWYgdGVzdCAteiAiJHByZWRlcF9vYmplY3RzX0NYWCI7IHRoZW4KLQkgICBwcmVkZXBfb2JqZWN0c19DWFg9JHAKLQkgZWxzZQotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHByZWRlcF9vYmplY3RzX0NYWCAkcCIKLQkgZmkKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRwb3N0ZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9JHAKLQkgZWxzZQotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgotCi0gICAgZXNhYwotICBkb25lCi0KLSAgIyBDbGVhbiB1cC4KLSAgcm0gLWYgYS5vdXQgYS5leGUKLWVsc2UKLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCi1maQotCi0kUk0gLWYgY29uZmVzdC4kb2JqZXh0Ci1DRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCi0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1jYXNlICRob3N0X29zIGluCi1pbnRlcml4WzMtOV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIHByZWRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcHNfQ1hYPQotICA7OwotZXNhYwotCi0KLWNhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KLSoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Ci1lc2FjCi0gY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0KLWlmIHRlc3QgLW4gIiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iOyB0aGVuCi0gY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD1gZWNobyAiICR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iIHwgJFNFRCAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLQotCi0gICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgotICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3MyKikKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR3bC1zdGF0aWMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZuby1jb21tb24nCi0gICAgICA7OwotICAgICpkamdwcCopCi0gICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgIDs7Ci0gICAgaGFpa3UqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgotICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQotICAgICAgOzsKLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0Ci0gICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKLSAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCopCi0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqcW54KiB8ICpudG8qKQotICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKLSAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeFs0LTldKikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgQ1hYKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCi0JIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotCSMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCi0JOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLWEgJHt3bH1hcmNoaXZlJwotCSAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJwotCSAgICBmaQotCSAgICA7OwotCSAgYUNDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHdsLWEgJHt3bH1hcmNoaXZlJwotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KnxpYTY0KikKLQkgICAgICAjICtaIHRoZSBkZWZhdWx0Ci0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBpbnRlcml4KikKLQkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKLQkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/Ci0JOzsKLSAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgIyBLQUkgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKLQkgICAgOzsKLQkgIGVjcGMqICkKLQkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKLQkgICAgOzsKLQkgIGljcGMqICkKLQkgICAgIyBJbnRlbCBDKyssIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgotCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKLQkgICAgOzsKLQkgIHBnQ0MqIHwgcGdjcHAqKQotCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgeGxjKiB8IHhsQyogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKQotCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1xc3RhdGljbGluaycKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbHlueG9zKikKLQk7OwotICAgICAgbTg4ayopCi0JOzsKLSAgICAgIG12cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGN4eCopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVcgYyxleHBvcnRhbGwnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQotCTs7Ci0gICAgICAqcW54KiB8ICpudG8qKQotICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyogfCBzdW5DQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKLSAgICA7OwotZXNhYwotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQotbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9bm8KLSAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2OyB9Ci0KLWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubwotZmkKLQotZmkKLQotCi0KLQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCi0gICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgICRSTSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9JHNhdmVfTERGTEFHUwotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNjsgfQotCi1pZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIjsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Ci1maQotCi0KLQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCi0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJFJNIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgJFJNIC1yIGNvbmZ0ZXN0Ci0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9Ci0KLQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCi0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJFJNIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgJFJNIC1yIGNvbmZ0ZXN0Ci0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9Ci0KLQotCi0KLWhhcmRfbGlua3M9bm90dGVzdGVkCi1pZiB0ZXN0IG5vID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9Ci0gIGhhcmRfbGlua3M9eWVzCi0gICRSTSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci0kYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQotICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotCi0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQotCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXhbNC05XSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCi0gICAgIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKLSAgICAjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcwotICAgICMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgotICAgICMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCi0gICAgIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQotICAgICMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCi0gICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZWxzZQotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW15CXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKHN1YnN0cihcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSRsdGRsbF9jbWRzCi0gICAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIGNsKikKLSAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKLSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD1ubwotICAgIDs7Ci0gICopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgICA7OwotICBlc2FjCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1Ci0kYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQotdGVzdCBubyA9ICIkbGRfc2hsaWJzX0NYWCIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi13aXRoX2dudV9sZF9DWFg9JHdpdGhfZ251X2xkCi0KLQotCi0KLQotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0KLSAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0NYWCBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAkUk0gY29uZnRlc3QqCi0JZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLQlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0JICBzb25hbWU9Y29uZnRlc3QKLQkgIGxpYj1jb25mdGVzdAotCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0JICBkZXBsaWJzPQotCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCi0JICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi0JICBjb21waWxlcl9mbGFncz0tdgotCSAgbGlua2VyX2ZsYWdzPS12Ci0JICB2ZXJzdHJpbmc9Ci0JICBvdXRwdXRfb2JqZGlyPS4KLQkgIGxpYm5hbWU9Y29uZnRlc3QKLQkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotCSAgdGhlbgotCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLQkgIGVsc2UKLQkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCSAgZmkKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotCWVsc2UKLQkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotCWZpCi0JJFJNIGNvbmZ0ZXN0KgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KLQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9LnNvCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIDs7Ci0KLWFpeFs0LTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0Ci0gICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKLSAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAotICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAotICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAotICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KLSAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbwotICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCi0gICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCi0gICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KLSAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCi0gICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgotICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQotICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCi0gICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKLSAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKLSAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAotICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCi0gICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCi0gICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAotICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCi0KLSAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKLSAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQotICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYShsaWIuc28uViknCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICAgIDs7Ci0gICAgc3ZyNCwqKSAjIGZ1bGwgc3ZyNCBvbmx5Ci0gICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSIKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgICA7OwotICAgICoseWVzKSAjIGJvdGgsIHByZWZlciBzdnI0Ci0gICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSwgbGliLmEobGliLnNvLlYpIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuYSBuZWVkcyBleHRyYSBoYW5kbGluZwotICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0iJHJlYWxuYW1lIn5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJGxpbmtuYW1lIn4kaW5zdGFsbF9zaGFyZWRfcHJvZyAiJGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQifnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCi0gICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2ZvciBuIGluICRsaWJyYXJ5X25hbWVzICRvbGRfbGlicmFyeTsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLnNvIiAiJG4ifnRlc3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiID0gIiRuIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKLSAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICAgIDs7Ci0gICAgKixubykgIyBib3RoLCBwcmVmZXIgYWl4Ci0gICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5hKGxpYi5zby5WKSwgbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIHBvd2VycGMpCi0gICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgotICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgOzsKLSAgbTY4aykKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPS5kbGwKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KLSAgeWVzLCopCi0gICAgIyBnY2MKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCi0gICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OwotICAgICAgZmknCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGNlZ2NjKikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgOzsKLQotICAqLGNsKikKLSAgICAjIE5hdGl2ZSBNU1ZDCi0gICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKLQotICAgIGNhc2UgJGJ1aWxkX29zIGluCi0gICAgbWluZ3cqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQotICAgICAgbHRfc2F2ZV9pZnM9JElGUwotICAgICAgSUZTPSc7JwotICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgotICAgICAgZG8KLSAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgotICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotICAgICAgZG9uZQotICAgICAgSUZTPSRsdF9zYXZlX2lmcwotICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKLSAgICAgIDs7Ci0gICAgY3lnd2luKikKLSAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KLSAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcwotICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgOzsKLSAgICAqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKLSAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0gICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRSTSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJwotICAgIDs7Ci0KLSAgKikKLSAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCi0gICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICA7OwotICBlc2FjCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIuKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1oYWlrdSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDMyCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDY0Ci0gICAgZmkKLSAgICA7OwotICBocHBhKjY0KikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgotICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1Ci0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotbGludXgqYW5kcm9pZCopCi0gIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKLSAgZmluaXNoX2NtZHM9Ci0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCi0gICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCi0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCi0gICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAotICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKLSAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bF9DWFhcIjsgXAotCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWFwiIgotICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgotICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi1maQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgbGliZGlyPSRzYXZlX2xpYmRpcgotCi1maQotCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBJZGVhbGx5LCB3ZSBjb3VsZCB1c2UgbGRjb25maWcgdG8gcmVwb3J0ICphbGwqIGRpcmVjdG9yZXMgd2hpY2ggYXJlCi0gICMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcywgaG93ZXZlciB0aGlzIGlzIHN0aWxsIG5vdCBwb3NzaWJsZS4gIEFzaWRlIGZyb20gbm90Ci0gICMgYmVpbmcgY2VydGFpbiAvc2Jpbi9sZGNvbmZpZyBpcyBhdmFpbGFibGUsIGNvbW1hbmQKLSAgIyAnbGRjb25maWcgLU4gLVggLXYgfCBncmVwIF4vJyBvbiA2NGJpdCBGZWRvcmEgZG9lcyBub3QgcmVwb3J0IC91c3IvbGliNjQsCi0gICMgZXZlbiB0aG91Z2ggaXQgaXMgc2VhcmNoZWQgYXQgcnVuLXRpbWUuICBUcnkgdG8gZG8gdGhlIGJlc3QgZ3Vlc3MgYnkKLSAgIyBhcHBlbmRpbmcgbGQuc28uY29uZiBjb250ZW50cyAoYW5kIGluY2x1ZGVzKSB0byB0aGUgc2VhcmNoIHBhdGguCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkZWxmKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotKm50byogfCAqcW54KikKLSAgdmVyc2lvbl90eXBlPXFueAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwotICA7OwotCi1vcGVuYnNkKiB8IGJpdHJpZyopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCi0gICAgbmVlZF92ZXJzaW9uPW5vCi0gIGVsc2UKLSAgICBuZWVkX3ZlcnNpb249eWVzCi0gIGZpCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0uZGxsCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBPUy8yIGNhbiBvbmx5IGxvYWQgYSBETEwgd2l0aCBhIGJhc2UgbmFtZSBvZiA4IGNoYXJhY3RlcnMgb3IgbGVzcy4KLSAgc29uYW1lX3NwZWM9J2B0ZXN0IC1uICIkb3MyZGxsbmFtZSIgJiYgbGlibmFtZT0iJG9zMmRsbG5hbWUiOwotICAgIHY9JCgkRUNITyAkcmVsZWFzZSR2ZXJzdWZmaXggfCB0ciAtZCAuLSk7Ci0gICAgbj0kKCRFQ0hPICRsaWJuYW1lIHwgY3V0IC1iIC0kKCg4IC0gJHsjdn0pKSB8IHRyIC4gXyk7Ci0gICAgJEVDSE8gJG4kdmAkc2hhcmVkX2V4dCcKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9X2RsbC4kbGliZXh0JwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9QkVHSU5MSUJQQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+Ci0gICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyAkRUNITyBcJGRsbmFtZSdcJydgfgotICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KLSAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgotICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87Ci0gICAgZmknCi0gIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyAkRUNITyBcJGRsbmFtZSdcJydgfgotICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgJFJNIFwkZGxwYXRoJwotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1zY28KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXRwZiopCi0gICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci0kYXNfZWNobyAiJGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KLXRlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQotaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLWZpCi0KLWlmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi1maQotCi0jIHJlbWVtYmVyIHVuYXVnbWVudGVkIHN5c19saWJfZGxzZWFyY2hfcGF0aCBjb250ZW50IGZvciBsaWJ0b29sIHNjcmlwdCBkZWNscy4uLgotY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aD0kc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyAuLi4gYnV0IGl0IG5lZWRzIExUX1NZU19MSUJSQVJZX1BBVEggbXVuZ2luZyBmb3Igb3RoZXIgY29uZmlndXJlLXRpbWUgY29kZQotZnVuY19tdW5nZV9wYXRoX2xpc3Qgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgIiRMVF9TWVNfTElCUkFSWV9QQVRIIgotCi0jIHRvIGJlIHVzZWQgYXMgZGVmYXVsdCBMVF9TWVNfTElCUkFSWV9QQVRIIHZhbHVlIGluIGdlbmVyYXRlZCBsaWJ0b29sCi1jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRMVF9TWVNfTElCUkFSWV9QQVRICi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uX0NYWD0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9DWFgiIHx8Ci0gICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCI7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAmJgotICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjUKLSRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9Ci0KLWlmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8fAotICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGhfQ1hYIjsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8fAotICAgICB0ZXN0IG5vID0gIiRlbmFibGVfc2hhcmVkIjsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0KLQotCi0KLQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBDQz0kbHRfc2F2ZV9DQwotICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi0gIExEQ1hYPSRMRAotICBMRD0kbHRfc2F2ZV9MRAotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi0gIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLSAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECi0gIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIgotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkQ1hYIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkQ1hYOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19IQVZFX0NYWCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRIQVZFX0NYWCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19IQVZFX0NYWD0iJEhBVkVfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfSEFWRV9DWFg9InllcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19IQVZFX0NYWCIgJiYgYWNfY3ZfcHJvZ19IQVZFX0NYWD0ibm8iCi1maQotZmkKLUhBVkVfQ1hYPSRhY19jdl9wcm9nX0hBVkVfQ1hYCi1pZiB0ZXN0IC1uICIkSEFWRV9DWFgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSEFWRV9DWFgiID4mNQotJGFzX2VjaG8gIiRIQVZFX0NYWCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0KLWFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQotaWYgdGVzdCAteiAiJENYWENQUCI7IHRoZW4KLSAgaWYgJHthY19jdl9wcm9nX0NYWENQUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgotICBicmVhawotZmkKLQotICAgIGRvbmUKLSAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi0KLWZpCi0gIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKLWVsc2UKLSAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKLSRhc19lY2hvICIkQ1hYQ1BQIiA+JjY7IH0KLWFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgotCi1lbHNlCi0gIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIkMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotZmkKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLWFjX2V4dD1tCi1hY19jcHA9JyRPQkpDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJE9CSkMgLWMgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckT0JKQyAtbyBjb25mdGVzdCRhY19leGVleHQgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X29iamNfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGdjYyBvYmpjYyBvYmpjIGNjIENDCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX09CSkMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkT0JKQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PQkpDPSIkT0JKQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX09CSkM9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLU9CSkM9JGFjX2N2X3Byb2dfT0JKQwotaWYgdGVzdCAtbiAiJE9CSkMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0JKQyIgPiY1Ci0kYXNfZWNobyAiJE9CSkMiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiRPQkpDIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJE9CSkMiOyB0aGVuCi0gIGFjX2N0X09CSkM9JE9CSkMKLSAgZm9yIGFjX3Byb2cgaW4gZ2NjIG9iamNjIG9iamMgY2MgQ0MKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9PQkpDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkMiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0JKQz0iJGFjX2N0X09CSkMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PQkpDPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9PQkpDPSRhY19jdl9wcm9nX2FjX2N0X09CSkMKLWlmIHRlc3QgLW4gIiRhY19jdF9PQkpDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkMiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQkpDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X09CSkMiICYmIGJyZWFrCi1kb25lCi0KLSAgaWYgdGVzdCAieCRhY19jdF9PQkpDIiA9IHg7IHRoZW4KLSAgICBPQkpDPSJnY2MiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT0JKQz0kYWNfY3RfT0JKQwotICBmaQotZmkKLQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE9iamVjdGl2ZSBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgT2JqZWN0aXZlIEMgY29tcGlsZXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBPYmplY3RpdmUgQyBjb21waWxlci4uLiAiID4mNjsgfQotaWYgJHthY19jdl9vYmpjX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX29iamNfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBhY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X29iamNfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqY19jb21waWxlcl9nbnUiID4mNQotJGFzX2VjaG8gIiRhY19jdl9vYmpjX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KLSAgR09CSkM9eWVzCi1lbHNlCi0gIEdPQkpDPQotZmkKLWFjX3Rlc3RfT0JKQ0ZMQUdTPSR7T0JKQ0ZMQUdTK3NldH0KLWFjX3NhdmVfT0JKQ0ZMQUdTPSRPQkpDRkxBR1MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkT0JKQyBhY2NlcHRzIC1nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJE9CSkMgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX29iamNfZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfb2JqY193ZXJyb3JfZmxhZz0kYWNfb2JqY193ZXJyb3JfZmxhZwotICAgYWNfb2JqY193ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfb2JqY19nPW5vCi0gICBPQkpDRkxBR1M9Ii1nIgotICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9vYmpjX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfb2JqY19nPXllcwotZWxzZQotICBPQkpDRkxBR1M9IiIKLSAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fb2JqY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gIGFjX29iamNfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfb2JqY193ZXJyb3JfZmxhZwotCSBPQkpDRkxBR1M9Ii1nIgotCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX29iamNfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19vYmpjX2c9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBhY19vYmpjX3dlcnJvcl9mbGFnPSRhY19zYXZlX29iamNfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfb2JqY19nIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19vYmpjX2ciID4mNjsgfQotaWYgdGVzdCAiJGFjX3Rlc3RfT0JKQ0ZMQUdTIiA9IHNldDsgdGhlbgotICBPQkpDRkxBR1M9JGFjX3NhdmVfT0JKQ0ZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfb2JqY19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHT0JKQyIgPSB5ZXM7IHRoZW4KLSAgICBPQkpDRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIE9CSkNGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHT0JKQyIgPSB5ZXM7IHRoZW4KLSAgICBPQkpDRkxBR1M9Ii1PMiIKLSAgZWxzZQotICAgIE9CSkNGTEFHUz0KLSAgZmkKLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWRlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfT0JKQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KLSAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAotICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgotICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAotICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0Ci0gICMgaW4gRCIuCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCi0gICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCi0gIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCi0gIGNkIGNvbmZ0ZXN0LmRpcgotICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKLSAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKLSAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKLSAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCi0gICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAotICAjIGRpcmVjdG9yeS4KLSAgbWtkaXIgc3ViCi0KLSAgYW1fY3ZfT0JKQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCi0gIGZpCi0gIGFtX191bml2ZXJzYWw9ZmFsc2UKLQotCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KLSAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAotICAgIGRvbmUKLSAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCi0KLSAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAotICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KLSAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQotICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBnY2MpCi0gICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgotICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKLSAgICAgIDs7Ci0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQotICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKLSAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAotICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KLSAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICAgIGFtX19taW51c19vYmo9Ci0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl9PQkpDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X09CSkNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfT0JKQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X09CSkNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQotT0JKQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfT0JKQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQotCi0gaWYKLSAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKLSAgJiYgdGVzdCAiJGFtX2N2X09CSkNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgotICBhbV9fZmFzdGRlcE9CSkNfVFJVRT0KLSAgYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFPScjJwotZWxzZQotICBhbV9fZmFzdGRlcE9CSkNfVFJVRT0nIycKLSAgYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFPQotZmkKLQotCi0KLQotCi0jIEJ5IGRlZmF1bHQgd2Ugc2ltcGx5IHVzZSB0aGUgQyBjb21waWxlciB0byBidWlsZCBhc3NlbWJseSBjb2RlLgotCi10ZXN0ICIke0NDQVMrc2V0fSIgPSBzZXQgfHwgQ0NBUz0kQ0MKLXRlc3QgIiR7Q0NBU0ZMQUdTK3NldH0iID0gc2V0IHx8IENDQVNGTEFHUz0kQ0ZMQUdTCi0KLQotCi1kZXBjYz0iJENDQVMiICAgYW1fY29tcGlsZXJfbGlzdD0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEIi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotCi0KLSAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCi0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCi0gICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAotICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KLSAgICAjCi0gICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKLSAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgotICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgotICAgIDogPiBzdWIvY29uZnRlc3QuYwotICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwotICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgotICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCi0gICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgotICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCi0gICAgY2FzZSAkZGVwbW9kZSBpbgotICAgIGdjYykKLSAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCi0gICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQotICAgICAgOzsKLSAgICBub3NpZGVlZmZlY3QpCi0gICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKLSAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCi0gICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcwotICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCi0gICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgotICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQotICAgICAgYW1fX21pbnVzX29iaj0KLSAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCi0gICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCi0gICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQotICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAotICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCi0gICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKLSAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCi0gICAgICAgIGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DQ0FTREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCi0KLSBpZgotICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAotICAmJiB0ZXN0ICIkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NBU19UUlVFPQotICBhbV9fZmFzdGRlcENDQVNfRkFMU0U9JyMnCi1lbHNlCi0gIGFtX19mYXN0ZGVwQ0NBU19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDQVNfRkFMU0U9Ci1maQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgZG8gd2hpbGUoMCkgbWFjcm9zIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGRvIHdoaWxlKDApIG1hY3Jvcy4uLiAiID4mNjsgfQotaWYgJHtfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLQkjZGVmaW5lIFNUTVRfU1RBUlQgZG8KLQkjZGVmaW5lIFNUTVRfRU5EIHdoaWxlKDApCi0JI2RlZmluZSBTVE1UX1RFU1QgU1RNVF9TVEFSVCB7IGkgPSAwOyB9IFNUTVRfRU5ECi0JaW50IG1haW4odm9pZCkgeyBpbnQgaSA9IDE7IFNUTVRfVEVTVDsgcmV0dXJuIGk7IH0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zPXllcwotZWxzZQotICBfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9jdl9nX3N1cHBvcnRfZG93aGlsZV9tYWNyb3MiID4mNQotJGFzX2VjaG8gIiRfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zIiA+JjY7IH0KLWlmIHRlc3QgeCRfY3ZfZ19zdXBwb3J0X2Rvd2hpbGVfbWFjcm9zID0geHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0RPV0hJTEVfTUFDUk9TIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAidmFsZ3JpbmQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHZhbGdyaW5kOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9WQUxHUklORF9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkVkFMR1JJTkRfUEFUSCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9WQUxHUklORF9QQVRIPSIkVkFMR1JJTkRfUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfVkFMR1JJTkRfUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9WQUxHUklORF9QQVRIIiAmJiBhY19jdl9wYXRoX1ZBTEdSSU5EX1BBVEg9Im5vIgotICA7OwotZXNhYwotZmkKLVZBTEdSSU5EX1BBVEg9JGFjX2N2X3BhdGhfVkFMR1JJTkRfUEFUSAotaWYgdGVzdCAtbiAiJFZBTEdSSU5EX1BBVEgiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVkFMR1JJTkRfUEFUSCIgPiY1Ci0kYXNfZWNobyAiJFZBTEdSSU5EX1BBVEgiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotIGlmIHRlc3QgISAieCRWQUxHUklORF9QQVRIIiA9ICJ4bm8iOyB0aGVuCi0gIEhBVkVfVkFMR1JJTkRfVFJVRT0KLSAgSEFWRV9WQUxHUklORF9GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9WQUxHUklORF9UUlVFPScjJwotICBIQVZFX1ZBTEdSSU5EX0ZBTFNFPQotZmkKLQotCi0KLQotCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJndGtkb2MtY2hlY2siLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGd0a2RvYy1jaGVjazsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR1RLRE9DX0NIRUNLKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkR1RLRE9DX0NIRUNLIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0dUS0RPQ19DSEVDSz0iJEdUS0RPQ19DSEVDSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfR1RLRE9DX0NIRUNLPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIDs7Ci1lc2FjCi1maQotR1RLRE9DX0NIRUNLPSRhY19jdl9wYXRoX0dUS0RPQ19DSEVDSwotaWYgdGVzdCAtbiAiJEdUS0RPQ19DSEVDSyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHVEtET0NfQ0hFQ0siID4mNQotJGFzX2VjaG8gIiRHVEtET0NfQ0hFQ0siID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBmb3IgYWNfcHJvZyBpbiBndGtkb2MtcmViYXNlCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR1RLRE9DX1JFQkFTRSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJEdUS0RPQ19SRUJBU0UgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfR1RLRE9DX1JFQkFTRT0iJEdUS0RPQ19SRUJBU0UiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0dUS0RPQ19SRUJBU0U9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgOzsKLWVzYWMKLWZpCi1HVEtET0NfUkVCQVNFPSRhY19jdl9wYXRoX0dUS0RPQ19SRUJBU0UKLWlmIHRlc3QgLW4gIiRHVEtET0NfUkVCQVNFIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdUS0RPQ19SRUJBU0UiID4mNQotJGFzX2VjaG8gIiRHVEtET0NfUkVCQVNFIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJEdUS0RPQ19SRUJBU0UiICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkR1RLRE9DX1JFQkFTRSIgfHwgR1RLRE9DX1JFQkFTRT0idHJ1ZSIKLQotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImd0a2RvYy1ta3BkZiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZ3RrZG9jLW1rcGRmOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9HVEtET0NfTUtQREYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRHVEtET0NfTUtQREYgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfR1RLRE9DX01LUERGPSIkR1RLRE9DX01LUERGIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9HVEtET0NfTUtQREY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgOzsKLWVzYWMKLWZpCi1HVEtET0NfTUtQREY9JGFjX2N2X3BhdGhfR1RLRE9DX01LUERGCi1pZiB0ZXN0IC1uICIkR1RLRE9DX01LUERGIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdUS0RPQ19NS1BERiIgPiY1Ci0kYXNfZWNobyAiJEdUS0RPQ19NS1BERiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1odG1sLWRpciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfaHRtbF9kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2h0bWxfZGlyOwotZWxzZQotICB3aXRoX2h0bWxfZGlyPScke2RhdGFkaXJ9L2d0ay1kb2MvaHRtbCcKLWZpCi0KLSAgSFRNTF9ESVI9IiR3aXRoX2h0bWxfZGlyIgotCi0KLSAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ3RrLWRvYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ndGtfZG9jK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ3RrX2RvYzsKLWVsc2UKLSAgZW5hYmxlX2d0a19kb2M9bm8KLWZpCi0KLQotICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ3RrLWRvYyA+PSAxLjEyXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImd0ay1kb2MgPj0gMS4xMiIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgYXNfZm5fZXJyb3IgJD8gIllvdSBuZWVkIHRvIGhhdmUgZ3RrLWRvYyA+PSAxLjEyIGluc3RhbGxlZCB0byBidWlsZCAkUEFDS0FHRV9OQU1FIiAiJExJTkVOTyIgNQotZmkKLSAgICAgICAgaWYgdGVzdCAieCRQQUNLQUdFX05BTUUiICE9ICJ4Z2xpYiI7IHRoZW4KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1RLRE9DX0RFUFMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdUS0RPQ19ERVBTLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHVEtET0NfREVQU19DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVEtET0NfREVQU19DRkxBR1M9IiRHVEtET0NfREVQU19DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HVEtET0NfREVQU19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdUS0RPQ19ERVBTX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVEtET0NfREVQU19MSUJTPSIkR1RLRE9DX0RFUFNfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdsaWItMi4wID49IDIuMTAuMCBnb2JqZWN0LTIuMCAgPj0gMi4xMC4wXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdsaWItMi4wID49IDIuMTAuMCBnb2JqZWN0LTIuMCAgPj0gMi4xMC4wIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dUS0RPQ19ERVBTX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgR1RLRE9DX0RFUFNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJnbGliLTIuMCA+PSAyLjEwLjAgZ29iamVjdC0yLjAgID49IDIuMTAuMCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdUS0RPQ19ERVBTX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjAiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRHVEtET0NfREVQU19QS0dfRVJST1JTIiA+JjUKLQotCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoZ2xpYi0yLjAgPj0gMi4xMC4wIGdvYmplY3QtMi4wICA+PSAyLjEwLjApIHdlcmUgbm90IG1ldDoKLQotJEdUS0RPQ19ERVBTX1BLR19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdUS0RPQ19ERVBTX0NGTEFHUwotYW5kIEdUS0RPQ19ERVBTX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgotU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCi0iICIkTElORU5PIiA1Ci1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiVGhlIHBrZy1jb25maWcgc2NyaXB0IGNvdWxkIG5vdCBiZSBmb3VuZCBvciBpcyB0b28gb2xkLiAgTWFrZSBzdXJlIGl0Ci1pcyBpbiB5b3VyIFBBVEggb3Igc2V0IHRoZSBQS0dfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBmdWxsCi1wYXRoIHRvIHBrZy1jb25maWcuCi0KLUFsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgR1RLRE9DX0RFUFNfQ0ZMQUdTCi1hbmQgR1RLRE9DX0RFUFNfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCi1TZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KLQotVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotZWxzZQotCUdUS0RPQ19ERVBTX0NGTEFHUz0kcGtnX2N2X0dUS0RPQ19ERVBTX0NGTEFHUwotCUdUS0RPQ19ERVBTX0xJQlM9JHBrZ19jdl9HVEtET0NfREVQU19MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JOgotZmkKLSAgICBmaQotICAgICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KLSAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KLSAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgotICAgICBkb25lCi0gICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCi0gICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KLSAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KLSAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX1NFRCIgfHwgY29udGludWUKLSMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECi1jYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KLSpHTlUqKQotICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKLSopCi0gIGFjX2NvdW50PTAKLSAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCi0gIHdoaWxlIDoKLSAgZG8KLSAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgotICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKLSAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKLSAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCi0gICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCi0gICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfU0VEPSRTRUQKLWZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQotIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgotICBybSAtZiBjb25mdGVzdC5zZWQKLQotICAgIGZpCi0gIGZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGd0ay1kb2MgZG9jdW1lbnRhdGlvbi4uLiAiID4mNjsgfQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9ndGtfZG9jIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX2d0a19kb2MiID4mNjsgfQotCi0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd0ay1kb2MtaHRtbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ndGtfZG9jX2h0bWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9ndGtfZG9jX2h0bWw7Ci1lbHNlCi0gIGVuYWJsZV9ndGtfZG9jX2h0bWw9eWVzCi1maQotCi0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWd0ay1kb2MtcGRmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2d0a19kb2NfcGRmK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ3RrX2RvY19wZGY7Ci1lbHNlCi0gIGVuYWJsZV9ndGtfZG9jX3BkZj1ubwotZmkKLQotCi0gIGlmIHRlc3QgLXogIiRHVEtET0NfTUtQREYiOyB0aGVuCi0gICAgZW5hYmxlX2d0a19kb2NfcGRmPW5vCi0gIGZpCi0KLQotICAgaWYgdGVzdCB4JGVuYWJsZV9ndGtfZG9jID0geHllczsgdGhlbgotICBFTkFCTEVfR1RLX0RPQ19UUlVFPQotICBFTkFCTEVfR1RLX0RPQ19GQUxTRT0nIycKLWVsc2UKLSAgRU5BQkxFX0dUS19ET0NfVFJVRT0nIycKLSAgRU5BQkxFX0dUS19ET0NfRkFMU0U9Ci1maQotCi0gICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2NfaHRtbCA9IHh5ZXM7IHRoZW4KLSAgR1RLX0RPQ19CVUlMRF9IVE1MX1RSVUU9Ci0gIEdUS19ET0NfQlVJTERfSFRNTF9GQUxTRT0nIycKLWVsc2UKLSAgR1RLX0RPQ19CVUlMRF9IVE1MX1RSVUU9JyMnCi0gIEdUS19ET0NfQlVJTERfSFRNTF9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgeCRlbmFibGVfZ3RrX2RvY19wZGYgPSB4eWVzOyB0aGVuCi0gIEdUS19ET0NfQlVJTERfUERGX1RSVUU9Ci0gIEdUS19ET0NfQlVJTERfUERGX0ZBTFNFPScjJwotZWxzZQotICBHVEtfRE9DX0JVSUxEX1BERl9UUlVFPScjJwotICBHVEtfRE9DX0JVSUxEX1BERl9GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgLW4gIiRMSUJUT09MIjsgdGhlbgotICBHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUU9Ci0gIEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0U9JyMnCi1lbHNlCi0gIEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRT0nIycKLSAgR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRT0KLWZpCi0KLQotCi0KLQotCi0KLQotICAgICAgICAjIEZpbmQgYW55IFB5dGhvbiBpbnRlcnByZXRlci4KLSAgICBpZiB0ZXN0IC16ICIkUFlUSE9OIjsgdGhlbgotICAgICAgZm9yIGFjX3Byb2cgaW4gcHl0aG9uIHB5dGhvbjIgcHl0aG9uMyBweXRob24zLjMgcHl0aG9uMy4yIHB5dGhvbjMuMSBweXRob24zLjAgcHl0aG9uMi43ICBweXRob24yLjYgcHl0aG9uMi41IHB5dGhvbjIuNCBweXRob24yLjMgcHl0aG9uMi4yIHB5dGhvbjIuMSBweXRob24yLjAKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9QWVRIT04rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXNlICRQWVRIT04gaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfUFlUSE9OPSIkUFlUSE9OIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QWVRIT049IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgOzsKLWVzYWMKLWZpCi1QWVRIT049JGFjX2N2X3BhdGhfUFlUSE9OCi1pZiB0ZXN0IC1uICIkUFlUSE9OIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBZVEhPTiIgPiY1Ci0kYXNfZWNobyAiJFBZVEhPTiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRQWVRIT04iICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkUFlUSE9OIiB8fCBQWVRIT049IjoiCi0KLSAgICBmaQotICAgIGFtX2Rpc3BsYXlfUFlUSE9OPXB5dGhvbgotCi0KLSAgaWYgdGVzdCAiJFBZVEhPTiIgPSA6OyB0aGVuCi0gICAgICBhc19mbl9lcnJvciAkPyAibm8gc3VpdGFibGUgUHl0aG9uIGludGVycHJldGVyIGZvdW5kIiAiJExJTkVOTyIgNQotICBlbHNlCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gdmVyc2lvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHZlcnNpb24uLi4gIiA+JjY7IH0KLWlmICR7YW1fY3ZfcHl0aG9uX3ZlcnNpb24rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhbV9jdl9weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMudmVyc2lvbls6M10pImAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl92ZXJzaW9uIiA+JjUKLSRhc19lY2hvICIkYW1fY3ZfcHl0aG9uX3ZlcnNpb24iID4mNjsgfQotICBQWVRIT05fVkVSU0lPTj0kYW1fY3ZfcHl0aG9uX3ZlcnNpb24KLQotCi0KLSAgUFlUSE9OX1BSRUZJWD0nJHtwcmVmaXh9JwotCi0gIFBZVEhPTl9FWEVDX1BSRUZJWD0nJHtleGVjX3ByZWZpeH0nCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBwbGF0Zm9ybSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIHBsYXRmb3JtLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X3B5dGhvbl9wbGF0Zm9ybSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFtX2N2X3B5dGhvbl9wbGF0Zm9ybT1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMucGxhdGZvcm0pImAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X3B5dGhvbl9wbGF0Zm9ybSIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9wbGF0Zm9ybSIgPiY2OyB9Ci0gIFBZVEhPTl9QTEFURk9STT0kYW1fY3ZfcHl0aG9uX3BsYXRmb3JtCi0KLQotICAjIEp1c3QgZmFjdG9yIG91dCBzb21lIGNvZGUgZHVwbGljYXRpb24uCi0gIGFtX3B5dGhvbl9zZXR1cF9zeXNjb25maWc9IlwKLWltcG9ydCBzeXMKLSMgUHJlZmVyIHN5c2NvbmZpZyBvdmVyIGRpc3R1dGlscy5zeXNjb25maWcsIGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eQotIyB3aXRoIHB5dGhvbiAzLnguICBTZWUgYXV0b21ha2UgYnVnIzEwMjI3LgotdHJ5OgotICAgIGltcG9ydCBzeXNjb25maWcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBjYW5fdXNlX3N5c2NvbmZpZyA9IDAKLWVsc2U6Ci0gICAgY2FuX3VzZV9zeXNjb25maWcgPSAxCi0jIENhbid0IHVzZSBzeXNjb25maWcgaW4gQ1B5dGhvbiAyLjcsIHNpbmNlIGl0J3MgYnJva2VuIGluIHZpcnR1YWxlbnZzOgotIyA8aHR0cHM6Ly9naXRodWIuY29tL3B5cGEvdmlydHVhbGVudi9pc3N1ZXMvMTE4PgotdHJ5OgotICAgIGZyb20gcGxhdGZvcm0gaW1wb3J0IHB5dGhvbl9pbXBsZW1lbnRhdGlvbgotICAgIGlmIHB5dGhvbl9pbXBsZW1lbnRhdGlvbigpID09ICdDUHl0aG9uJyBhbmQgc3lzLnZlcnNpb25bOjNdID09ICcyLjcnOgotICAgICAgICBjYW5fdXNlX3N5c2NvbmZpZyA9IDAKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzIgotCi0KLSAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBzY3JpcHQgZGlyZWN0b3J5IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYW1fZGlzcGxheV9QWVRIT04gc2NyaXB0IGRpcmVjdG9yeS4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9weXRob25fcHl0aG9uZGlyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAieCRwcmVmaXgiID0geE5PTkUKLSAgICAgdGhlbgotICAgICAgIGFtX3B5X3ByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKLSAgICAgZWxzZQotICAgICAgIGFtX3B5X3ByZWZpeD0kcHJlZml4Ci0gICAgIGZpCi0gICAgIGFtX2N2X3B5dGhvbl9weXRob25kaXI9YCRQWVRIT04gLWMgIgotJGFtX3B5dGhvbl9zZXR1cF9zeXNjb25maWcKLWlmIGNhbl91c2Vfc3lzY29uZmlnOgotICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3BhdGgoJ3B1cmVsaWInLCB2YXJzPXsnYmFzZSc6JyRhbV9weV9wcmVmaXgnfSkKLWVsc2U6Ci0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMCwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAotICAgICBjYXNlICRhbV9jdl9weXRob25fcHl0aG9uZGlyIGluCi0gICAgICRhbV9weV9wcmVmaXgqKQotICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9wcmVmaXgiIHwgc2VkICdzfC58LnxnJ2AKLSAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPWBlY2hvICIkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgfCBzZWQgInMsXiRhbV9fc3RyaXBfcHJlZml4LCRQWVRIT05fUFJFRklYLCJgCi0gICAgICAgOzsKLSAgICAgKikKLSAgICAgICBjYXNlICRhbV9weV9wcmVmaXggaW4KLSAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7Ci0gICAgICAgICAqKQotCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKLQkgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0gICAgIGVzYWMKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHl0aG9uX3B5dGhvbmRpciIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9weXRob25kaXIiID4mNjsgfQotICBweXRob25kaXI9JGFtX2N2X3B5dGhvbl9weXRob25kaXIKLQotCi0KLSAgcGtncHl0aG9uZGlyPVwke3B5dGhvbmRpcn0vJFBBQ0tBR0UKLQotCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhbV9kaXNwbGF5X1BZVEhPTiBleHRlbnNpb24gbW9kdWxlIGRpcmVjdG9yeSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFtX2Rpc3BsYXlfUFlUSE9OIGV4dGVuc2lvbiBtb2R1bGUgZGlyZWN0b3J5Li4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X3B5dGhvbl9weWV4ZWNkaXIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FCi0gICAgIHRoZW4KLSAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kYW1fcHlfcHJlZml4Ci0gICAgIGVsc2UKLSAgICAgICBhbV9weV9leGVjX3ByZWZpeD0kZXhlY19wcmVmaXgKLSAgICAgZmkKLSAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gJFBZVEhPTiAtYyAiCi0kYW1fcHl0aG9uX3NldHVwX3N5c2NvbmZpZwotaWYgY2FuX3VzZV9zeXNjb25maWc6Ci0gICAgc2l0ZWRpciA9IHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGxpYicsIHZhcnM9eydwbGF0YmFzZSc6JyRhbV9weV9wcmVmaXgnfSkKLWVsc2U6Ci0gICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMSwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKLXN5cy5zdGRvdXQud3JpdGUoc2l0ZWRpcikiYAotICAgICBjYXNlICRhbV9jdl9weXRob25fcHlleGVjZGlyIGluCi0gICAgICRhbV9weV9leGVjX3ByZWZpeCopCi0gICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X2V4ZWNfcHJlZml4IiB8IHNlZCAnc3wufC58ZydgCi0gICAgICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj1gZWNobyAiJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIiIHwgc2VkICJzLF4kYW1fX3N0cmlwX3ByZWZpeCwkUFlUSE9OX0VYRUNfUFJFRklYLCJgCi0gICAgICAgOzsKLSAgICAgKikKLSAgICAgICBjYXNlICRhbV9weV9leGVjX3ByZWZpeCBpbgotICAgICAgICAgL3VzcnwvU3lzdGVtKikgOzsKLSAgICAgICAgICopCi0JICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0VYRUNfUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcwotCSAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0gICAgIGVzYWMKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHl0aG9uX3B5ZXhlY2RpciIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIiID4mNjsgfQotICBweWV4ZWNkaXI9JGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIKLQotCi0KLSAgcGtncHlleGVjZGlyPVwke3B5ZXhlY2Rpcn0vJFBBQ0tBR0UKLQotCi0KLSAgZmkKLQotCi0KLQotICBidWlsZF9wbHVnaW5fZG9jcz1ubwotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgcGx1Z2luIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBwbHVnaW4gZG9jdW1lbnRhdGlvbi4uLiAiID4mNjsgfQotICBpZiB0ZXN0IHgkZW5hYmxlX2d0a19kb2MgPSB4eWVzOyB0aGVuCi0gICAgaWYgdGVzdCB4JFBZVEhPTiAhPSB4OyB0aGVuCi0gICAgICBidWlsZF9wbHVnaW5fZG9jcz15ZXMKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gICAgZWxzZQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIChweXRob24gbm90IGZvdW5kKSIgPiY1Ci0kYXNfZWNobyAibm8gKHB5dGhvbiBub3QgZm91bmQpIiA+JjY7IH0KLSAgICBmaQotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIChndGstZG9jIGRpc2FibGVkIG9yIG5vdCBhdmFpbGFibGUpIiA+JjUKLSRhc19lY2hvICJubyAoZ3RrLWRvYyBkaXNhYmxlZCBvciBub3QgYXZhaWxhYmxlKSIgPiY2OyB9Ci0gIGZpCi0KLSAgIGlmIHRlc3QgeCRidWlsZF9wbHVnaW5fZG9jcyA9IHh5ZXM7IHRoZW4KLSAgRU5BQkxFX1BMVUdJTl9ET0NTX1RSVUU9Ci0gIEVOQUJMRV9QTFVHSU5fRE9DU19GQUxTRT0nIycKLWVsc2UKLSAgRU5BQkxFX1BMVUdJTl9ET0NTX1RSVUU9JyMnCi0gIEVOQUJMRV9QTFVHSU5fRE9DU19GQUxTRT0KLWZpCi0KLQotCi0KLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCi0gICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAotICA7OwotKi1uY3Itc3lzdjQuMyopCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9td3ZhbGlkY2hlY2tsIGluIC1sbXciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9td3ZhbGlkY2hlY2tsIGluIC1sbXcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX213X19td3ZhbGlkY2hlY2tsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxtdyAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgX213dmFsaWRjaGVja2wgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBfbXd2YWxpZGNoZWNrbCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2w9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9td19fbXd2YWxpZGNoZWNrbD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbXdfX213dmFsaWRjaGVja2wiID0geHllczsgdGhlbiA6Ci0gIExJQk09LWxtdwotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjb3MgaW4gLWxtIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBjb3MgaW4gLWxtLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9tX2Nvcys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbSAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgY29zICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gY29zICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9tX2Nvcz15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX21fY29zPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9tX2NvcyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9tX2NvcyIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tX2NvcyIgPSB4eWVzOyB0aGVuIDoKLSAgTElCTT0iJExJQk0gLWxtIgotZmkKLQotICA7OwotKikKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29zIGluIC1sbSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgY29zIGluIC1sbS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfbV9jb3MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG0gICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGNvcyAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGNvcyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbV9jb3M9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9tX2Nvcz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbV9jb3MiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbV9jb3MiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbV9jb3MiID0geHllczsgdGhlbiA6Ci0gIExJQk09LWxtCi1maQotCi0gIDs7Ci1lc2FjCi0KLQotCi0KLWZvciBhY19mdW5jIGluIGNsb2NrX2dldHRpbWUKLWRvIDoKLSAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiY2xvY2tfZ2V0dGltZSIgImFjX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19jbG9ja19nZXR0aW1lIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxCi1fQUNFT0YKLQotZWxzZQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNsb2NrX2dldHRpbWUgaW4gLWxydCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgY2xvY2tfZ2V0dGltZSBpbiAtbHJ0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxydCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgY2xvY2tfZ2V0dGltZSAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWU9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX3J0X2Nsb2NrX2dldHRpbWUiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPSB4eWVzOyB0aGVuIDoKLQotICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxIiA+PmNvbmZkZWZzLmgKLQotICAgIExJQlJUPSItbHJ0IgotCi0KLWZpCi0KLQotZmkKLWRvbmUKLQotCi0KLQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotYXhfcHRocmVhZF9vaz1ubwotCi0jIFdlIHVzZWQgdG8gY2hlY2sgZm9yIHB0aHJlYWQuaCBmaXJzdCwgYnV0IHRoaXMgZmFpbHMgaWYgcHRocmVhZC5oCi0jIHJlcXVpcmVzIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgKGUuZy4gb24gVHJ1NjQgb3IgU2VxdWVudCkuCi0jIEl0IGdldHMgY2hlY2tlZCBmb3IgaW4gdGhlIGxpbmsgdGVzdCBhbnl3YXkuCi0KLSMgRmlyc3Qgb2YgYWxsLCBjaGVjayBpZiB0aGUgdXNlciBoYXMgc2V0IGFueSBvZiB0aGUgUFRIUkVBRF9MSUJTLAotIyBldGNldGVyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBpZiB0aHJlYWRzIGxpbmtpbmcgd29ya3MgdXNpbmcKLSMgdGhlbToKLWlmIHRlc3QgIngkUFRIUkVBRF9DRkxBR1MkUFRIUkVBRF9MSUJTIiAhPSAieCI7IHRoZW4KLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NDPSIkQ0MiCi0gICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgaWYgdGVzdCAieCRQVEhSRUFEX0NDIiAhPSAieCI7IHRoZW4gOgotICBDQz0iJFBUSFJFQURfQ0MiCi1maQotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2pvaW4gdXNpbmcgJENDICRQVEhSRUFEX0NGTEFHUyAkUFRIUkVBRF9MSUJTIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2pvaW4gdXNpbmcgJENDICRQVEhSRUFEX0NGTEFHUyAkUFRIUkVBRF9MSUJTLi4uICIgPiY2OyB9Ci0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBwdGhyZWFkX2pvaW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBwdGhyZWFkX2pvaW4gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYXhfcHRocmVhZF9vaz15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X3B0aHJlYWRfb2siID4mNQotJGFzX2VjaG8gIiRheF9wdGhyZWFkX29rIiA+JjY7IH0KLSAgICAgICAgaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4bm8iOyB0aGVuCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKLSAgICAgICAgZmkKLSAgICAgICAgQ0M9IiRheF9wdGhyZWFkX3NhdmVfQ0MiCi0gICAgICAgIENGTEFHUz0iJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRheF9wdGhyZWFkX3NhdmVfTElCUyIKLWZpCi0KLSMgV2UgbXVzdCBjaGVjayBmb3IgdGhlIHRocmVhZHMgbGlicmFyeSB1bmRlciBhIG51bWJlciBvZiBkaWZmZXJlbnQKLSMgbmFtZXM7IHRoZSBvcmRlcmluZyBpcyB2ZXJ5IGltcG9ydGFudCBiZWNhdXNlIHNvbWUgc3lzdGVtcwotIyAoZS5nLiBERUMpIGhhdmUgYm90aCAtbHB0aHJlYWQgYW5kIC1scHRocmVhZHMsIHdoZXJlIG9uZSBvZiB0aGUKLSMgbGlicmFyaWVzIGlzIGJyb2tlbiAobm9uLVBPU0lYKS4KLQotIyBDcmVhdGUgYSBsaXN0IG9mIHRocmVhZCBmbGFncyB0byB0cnkuICBJdGVtcyBzdGFydGluZyB3aXRoIGEgIi0iIGFyZQotIyBDIGNvbXBpbGVyIGZsYWdzLCBhbmQgb3RoZXIgaXRlbXMgYXJlIGxpYnJhcnkgbmFtZXMsIGV4Y2VwdCBmb3IgIm5vbmUiCi0jIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIHRyeSB3aXRob3V0IGFueSBmbGFncyBhdCBhbGwsIGFuZCAicHRocmVhZC1jb25maWciCi0jIHdoaWNoIGlzIGEgcHJvZ3JhbSByZXR1cm5pbmcgdGhlIGZsYWdzIGZvciB0aGUgUHRoIGVtdWxhdGlvbiBsaWJyYXJ5LgotCi1heF9wdGhyZWFkX2ZsYWdzPSJwdGhyZWFkcyBub25lIC1LdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKLQotIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQotIyBpbmRpdmlkdWFsIGl0ZW1zIGZvbGxvdzoKLQotIyBwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKLSMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAotIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncwotIyAtS3RocmVhZDogU2VxdWVudCAodGhyZWFkcyBpbiBsaWJjLCBidXQgLUt0aHJlYWQgbmVlZGVkIGZvciBwdGhyZWFkLmgpCi0jIC1wdGhyZWFkOiBMaW51eC9nY2MgKGtlcm5lbCB0aHJlYWRzKSwgQlNEL2djYyAodXNlcmxhbmQgdGhyZWFkcyksIFRydTY0Ci0jICAgICAgICAgICAoTm90ZTogSFAgQyByZWplY3RzIHRoaXMgd2l0aCAiYmFkIGZvcm0gZm9yIGAtdCcgb3B0aW9uIikKLSMgLXB0aHJlYWRzOiBTb2xhcmlzL2djYyAoTm90ZTogSFAgQyBhbHNvIHJlamVjdHMpCi0jIC1tdDogU3VuIFdvcmtzaG9wIEMgKG1heSBvbmx5IGxpbmsgU3VuT1MgdGhyZWFkcyBbLWx0aHJlYWRdLCBidXQgaXQKLSMgICAgICBkb2Vzbid0IGh1cnQgdG8gY2hlY2sgc2luY2UgdGhpcyBzb21ldGltZXMgZGVmaW5lcyBwdGhyZWFkcyBhbmQKLSMgICAgICAtRF9SRUVOVFJBTlQgdG9vKSwgSFAgQyAobXVzdCBiZSBjaGVja2VkIGJlZm9yZSAtbHB0aHJlYWQsIHdoaWNoCi0jICAgICAgaXMgcHJlc2VudCBidXQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5OyBhbmQgYmVmb3JlIC1tdGhyZWFkcywKLSMgICAgICBiZWNhdXNlIHRoZSBjb21waWxlciBpbnRlcnByZXRzIHRoaXMgYXMgIi1tdCIgKyAiLWhyZWFkcyIpCi0jIC1tdGhyZWFkczogTWluZ3czMi9nY2MsIEx5bngvZ2NjCi0jIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQotIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCi0jIHB0aHJlYWQtY29uZmlnOiB1c2UgcHRocmVhZC1jb25maWcgcHJvZ3JhbSAoZm9yIEdOVSBQdGggbGlicmFyeSkKLQotY2FzZSAkaG9zdF9vcyBpbgotCi0gICAgICAgIGZyZWVic2QqKQotCi0gICAgICAgICMgLWt0aHJlYWQ6IEZyZWVCU0Qga2VybmVsIHRocmVhZHMgKHByZWZlcnJlZCB0byAtcHRocmVhZCBzaW5jZSBTTVAtYWJsZSkKLSAgICAgICAgIyBsdGhyZWFkOiBMaW51eFRocmVhZHMgcG9ydCBvbiBGcmVlQlNEIChhbHNvIHByZWZlcnJlZCB0byAtcHRocmVhZCkKLQotICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSIta3RocmVhZCBsdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgotICAgICAgICA7OwotCi0gICAgICAgIGhwdXgqKQotCi0gICAgICAgICMgRnJvbSB0aGUgY2MoMSkgbWFuIHBhZ2U6ICJbLW10XSBTZXRzIHZhcmlvdXMgLUQgZmxhZ3MgdG8gZW5hYmxlCi0gICAgICAgICMgbXVsdGktdGhyZWFkaW5nIGFuZCBhbHNvIHNldHMgLWxwdGhyZWFkLiIKLQotICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSItbXQgLXB0aHJlYWQgcHRocmVhZCAkYXhfcHRocmVhZF9mbGFncyIKLSAgICAgICAgOzsKLQotICAgICAgICBvcGVuZWRpdGlvbiopCi0KLSAgICAgICAgIyBJQk0gei9PUyByZXF1aXJlcyBhIGZlYXR1cmUtdGVzdCBtYWNybyB0byBiZSBkZWZpbmVkIGluIG9yZGVyIHRvCi0gICAgICAgICMgZW5hYmxlIFBPU0lYIHRocmVhZHMgYXQgYWxsLCBzbyBnaXZlIHRoZSB1c2VyIGEgaGludCBpZiB0aGlzIGlzCi0gICAgICAgICMgbm90IHNldC4gKFdlIGRvbid0IGRlZmluZSB0aGVzZSBvdXJzZWx2ZXMsIGFzIHRoZXkgY2FuIGFmZmVjdAotICAgICAgICAjIG90aGVyIHBvcnRpb25zIG9mIHRoZSBzeXN0ZW0gQVBJIGluIHVucHJlZGljdGFibGUgd2F5cy4pCi0KLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jICAgICAgICAgICAgaWYgIWRlZmluZWQoX09QRU5fVEhSRUFEUykgJiYgIWRlZmluZWQoX1VOSVgwM19USFJFQURTKQotICAgICAgICAgICAgIEFYX1BUSFJFQURfWk9TX01JU1NJTkcKLSMgICAgICAgICAgICBlbmRpZgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJBWF9QVEhSRUFEX1pPU19NSVNTSU5HIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IElCTSB6L09TIHJlcXVpcmVzIC1EX09QRU5fVEhSRUFEUyBvciAtRF9VTklYMDNfVEhSRUFEUyB0byBlbmFibGUgcHRocmVhZHMgc3VwcG9ydC4iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogSUJNIHovT1MgcmVxdWlyZXMgLURfT1BFTl9USFJFQURTIG9yIC1EX1VOSVgwM19USFJFQURTIHRvIGVuYWJsZSBwdGhyZWFkcyBzdXBwb3J0LiIgPiYyO30KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotICAgICAgICA7OwotCi0gICAgICAgIHNvbGFyaXMqKQotCi0gICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCi0gICAgICAgICMgKG5vbi1mdW5jdGlvbmFsKSB2ZXJzaW9ucyBvZiB0aGUgcHRocmVhZHMgcm91dGluZXMsIHNvIGxpbmstYmFzZWQKLSAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuIChOLkIuOiBUaGUgc3R1YnMgYXJlIG1pc3NpbmcKLSAgICAgICAgIyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyIGEgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoaXMgbWFjcm8sCi0gICAgICAgICMgc28gd2UgY291bGQgY2hlY2sgZm9yIHRoYXQsIGJ1dCB3aG8ga25vd3Mgd2hldGhlciB0aGV5J2xsIHN0dWIKLSAgICAgICAgIyB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvIHdlJ2xsIGNoZWNrIGZpcnN0IGZvciB0aGUKLSAgICAgICAgIyBzdGFuZGFyZCBTb2xhcmlzIHdheSBvZiBsaW5raW5nIHB0aHJlYWRzICgtbXQgLWxwdGhyZWFkKS4KLQotICAgICAgICBheF9wdGhyZWFkX2ZsYWdzPSItbXQscHRocmVhZCBwdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgotICAgICAgICA7OwotZXNhYwotCi0jIEdDQyBnZW5lcmFsbHkgdXNlcyAtcHRocmVhZCwgb3IgLXB0aHJlYWRzIG9uIHNvbWUgcGxhdGZvcm1zIChlLmcuIFNQQVJDKQotCi1pZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4gOgotICBheF9wdGhyZWFkX2ZsYWdzPSItcHRocmVhZCAtcHRocmVhZHMgJGF4X3B0aHJlYWRfZmxhZ3MiCi1maQotCi0jIFRoZSBwcmVzZW5jZSBvZiBhIGZlYXR1cmUgdGVzdCBtYWNybyByZXF1ZXN0aW5nIHJlLWVudHJhbnQgZnVuY3Rpb24KLSMgZGVmaW5pdGlvbnMgaXMsIG9uIHNvbWUgc3lzdGVtcywgYSBzdHJvbmcgaGludCB0aGF0IHB0aHJlYWRzIHN1cHBvcnQgaXMKLSMgY29ycmVjdGx5IGVuYWJsZWQKLQotY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICBkYXJ3aW4qIHwgaHB1eCogfCBsaW51eCogfCBvc2YqIHwgc29sYXJpcyopCi0gICAgICAgIGF4X3B0aHJlYWRfY2hlY2tfbWFjcm89Il9SRUVOVFJBTlQiCi0gICAgICAgIDs7Ci0KLSAgICAgICAgYWl4KikKLSAgICAgICAgYXhfcHRocmVhZF9jaGVja19tYWNybz0iX1RIUkVBRF9TQUZFIgotICAgICAgICA7OwotCi0gICAgICAgICopCi0gICAgICAgIGF4X3B0aHJlYWRfY2hlY2tfbWFjcm89Ii0tIgotICAgICAgICA7OwotZXNhYwotaWYgdGVzdCAieCRheF9wdGhyZWFkX2NoZWNrX21hY3JvIiA9ICJ4LS0iOyB0aGVuIDoKLSAgYXhfcHRocmVhZF9jaGVja19jb25kPTAKLWVsc2UKLSAgYXhfcHRocmVhZF9jaGVja19jb25kPSIhZGVmaW5lZCgkYXhfcHRocmVhZF9jaGVja19tYWNybykiCi1maQotCi0jIEFyZSB3ZSBjb21waWxpbmcgd2l0aCBDbGFuZz8KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBpcyBDbGFuZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBpcyBDbGFuZy4uLiAiID4mNjsgfQotaWYgJHtheF9jdl9QVEhSRUFEX0NMQU5HKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXhfY3ZfUFRIUkVBRF9DTEFORz1ubwotICAgICAjIE5vdGUgdGhhdCBBdXRvY29uZiBzZXRzIEdDQz15ZXMgZm9yIENsYW5nIGFzIHdlbGwgYXMgR0NDCi0gICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBOb3RlOiBDbGFuZyAyLjcgbGFja3MgX19jbGFuZ19bYS16XStfXyAqLwotIyAgICAgICAgICAgIGlmIGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZpbmVkKF9fbGx2bV9fKQotICAgICAgICAgICAgIEFYX1BUSFJFQURfQ0NfSVNfQ0xBTkcKLSMgICAgICAgICAgICBlbmRpZgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJBWF9QVEhSRUFEX0NDX0lTX0NMQU5HIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBheF9jdl9QVEhSRUFEX0NMQU5HPXllcwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi0gICAgIGZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X1BUSFJFQURfQ0xBTkciID4mNQotJGFzX2VjaG8gIiRheF9jdl9QVEhSRUFEX0NMQU5HIiA+JjY7IH0KLWF4X3B0aHJlYWRfY2xhbmc9IiRheF9jdl9QVEhSRUFEX0NMQU5HIgotCi1heF9wdGhyZWFkX2NsYW5nX3dhcm5pbmc9bm8KLQotIyBDbGFuZyBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLCBiZWNhdXNlIG9sZGVyIHZlcnNpb25zIGhhbmRsZSB0aGUgLXB0aHJlYWQKLSMgb3B0aW9uIGluIGEgcmF0aGVyLi4uIGlkaW9zeW5jcmF0aWMgd2F5Ci0KLWlmIHRlc3QgIngkYXhfcHRocmVhZF9jbGFuZyIgPSAieHllcyI7IHRoZW4KLQotICAgICAgICAjIENsYW5nIHRha2VzIC1wdGhyZWFkOyBpdCBoYXMgbmV2ZXIgc3VwcG9ydGVkIGFueSBvdGhlciBmbGFnCi0KLSAgICAgICAgIyAoTm90ZSAxOiBUaGlzIHdpbGwgbmVlZCB0byBiZSByZXZpc2l0ZWQgaWYgYSBzeXN0ZW0gdGhhdCBDbGFuZwotICAgICAgICAjIHN1cHBvcnRzIGhhcyBQT1NJWCB0aHJlYWRzIGluIGEgc2VwYXJhdGUgbGlicmFyeS4gIFRoaXMgdGVuZHMgbm90Ci0gICAgICAgICMgdG8gYmUgdGhlIHdheSBvZiBtb2Rlcm4gc3lzdGVtcywgYnV0IGl0J3MgY29uY2VpdmFibGUuKQotCi0gICAgICAgICMgKE5vdGUgMjogT24gc29tZSBzeXN0ZW1zLCBub3RhYmx5IERhcndpbiwgLXB0aHJlYWQgaXMgbm90IG5lZWRlZAotICAgICAgICAjIHRvIGdldCBQT1NJWCB0aHJlYWRzIHN1cHBvcnQ7IHRoZSBBUEkgaXMgYWx3YXlzIHByZXNlbnQgYW5kCi0gICAgICAgICMgYWN0aXZlLiAgV2UgY291bGQgcmVhc29uYWJseSBsZWF2ZSBQVEhSRUFEX0NGTEFHUyBlbXB0eS4gIEJ1dAotICAgICAgICAjIC1wdGhyZWFkIGRvZXMgZGVmaW5lIF9SRUVOVFJBTlQsIGFuZCB3aGlsZSB0aGUgRGFyd2luIGhlYWRlcnMKLSAgICAgICAgIyBpZ25vcmUgdGhpcyBtYWNybywgdGhpcmQtcGFydHkgaGVhZGVycyBtaWdodCBub3QuKQotCi0gICAgICAgIFBUSFJFQURfQ0ZMQUdTPSItcHRocmVhZCIKLSAgICAgICAgUFRIUkVBRF9MSUJTPQotCi0gICAgICAgIGF4X3B0aHJlYWRfb2s9eWVzCi0KLSAgICAgICAgIyBIb3dldmVyLCBvbGRlciB2ZXJzaW9ucyBvZiBDbGFuZyBtYWtlIGEgcG9pbnQgb2Ygd2FybmluZyB0aGUgdXNlcgotICAgICAgICAjIHRoYXQsIGluIGFuIGludm9jYXRpb24gd2hlcmUgb25seSBsaW5raW5nIGFuZCBubyBjb21waWxhdGlvbiBpcwotICAgICAgICAjIHRha2luZyBwbGFjZSwgdGhlIC1wdGhyZWFkIG9wdGlvbiBoYXMgbm8gZWZmZWN0ICgiYXJndW1lbnQgdW51c2VkCi0gICAgICAgICMgZHVyaW5nIGNvbXBpbGF0aW9uIikuICBUaGV5IGV4cGVjdCAtcHRocmVhZCB0byBiZSBwYXNzZWQgaW4gb25seQotICAgICAgICAjIHdoZW4gc291cmNlIGNvZGUgaXMgYmVpbmcgY29tcGlsZWQuCi0gICAgICAgICMKLSAgICAgICAgIyBQcm9ibGVtIGlzLCB0aGlzIGlzIGF0IG9kZHMgd2l0aCB0aGUgd2F5IEF1dG9tYWtlIGFuZCBtb3N0IG90aGVyCi0gICAgICAgICMgQyBidWlsZCBmcmFtZXdvcmtzIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGF0IHRoZSBzYW1lIGZsYWdzIHVzZWQgaW4KLSAgICAgICAgIyBjb21waWxhdGlvbiAoQ0ZMQUdTKSBhcmUgYWxzbyB1c2VkIGluIGxpbmtpbmcuICBNYW55IHN5c3RlbXMKLSAgICAgICAgIyBzdXBwb3J0ZWQgYnkgQVhfUFRIUkVBRCByZXF1aXJlIGV4YWN0bHkgdGhpcyBmb3IgUE9TSVggdGhyZWFkcwotICAgICAgICAjIHN1cHBvcnQsIGFuZCBpbiBmYWN0IGl0IGlzIG9mdGVuIG5vdCBzdHJhaWdodGZvcndhcmQgdG8gc3BlY2lmeSBhCi0gICAgICAgICMgZmxhZyB0aGF0IGlzIHVzZWQgb25seSBpbiB0aGUgY29tcGlsYXRpb24gcGhhc2UgYW5kIG5vdCBpbgotICAgICAgICAjIGxpbmtpbmcuICBTdWNoIGEgc2NlbmFyaW8gaXMgZXh0cmVtZWx5IHJhcmUgaW4gcHJhY3RpY2UuCi0gICAgICAgICMKLSAgICAgICAgIyBFdmVuIHRob3VnaCB1c2Ugb2YgdGhlIC1wdGhyZWFkIGZsYWcgaW4gbGlua2luZyB3b3VsZCBvbmx5IHByaW50Ci0gICAgICAgICMgYSB3YXJuaW5nLCB0aGlzIGNhbiBiZSBhIG51aXNhbmNlIGZvciB3ZWxsLXJ1biBzb2Z0d2FyZSBwcm9qZWN0cwotICAgICAgICAjIHRoYXQgYnVpbGQgd2l0aCAtV2Vycm9yLiAgU28gaWYgdGhlIGFjdGl2ZSB2ZXJzaW9uIG9mIENsYW5nIGhhcwotICAgICAgICAjIHRoaXMgbWlzZmVhdHVyZSwgd2Ugc2VhcmNoIGZvciBhbiBvcHRpb24gdG8gc3F1YXNoIGl0LgotCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDbGFuZyBuZWVkcyBmbGFnIHRvIHByZXZlbnQgXCJhcmd1bWVudCB1bnVzZWRcIiB3YXJuaW5nIHdoZW4gbGlua2luZyB3aXRoIC1wdGhyZWFkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQ2xhbmcgbmVlZHMgZmxhZyB0byBwcmV2ZW50IFwiYXJndW1lbnQgdW51c2VkXCIgd2FybmluZyB3aGVuIGxpbmtpbmcgd2l0aCAtcHRocmVhZC4uLiAiID4mNjsgfQotaWYgJHtheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHPXVua25vd24KLSAgICAgICAgICAgICAjIENyZWF0ZSBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiAkYWNfbGluayB0aGF0IGNvbXBpbGVzIGFuZAotICAgICAgICAgICAgICMgbGlua3MgaW4gdHdvIHN0ZXBzICguYyAtPiAubywgLm8gLT4gZXhlKSBpbnN0ZWFkIG9mIG9uZQotICAgICAgICAgICAgICMgKC5jIC0+IGV4ZSksIGJlY2F1c2UgdGhlIHdhcm5pbmcgb2NjdXJzIG9ubHkgaW4gdGhlIHNlY29uZAotICAgICAgICAgICAgICMgc3RlcAotICAgICAgICAgICAgIGF4X3B0aHJlYWRfc2F2ZV9hY19saW5rPSIkYWNfbGluayIKLSAgICAgICAgICAgICBheF9wdGhyZWFkX3NlZD0ncy9jb25mdGVzdFwuXCRhY19leHQvY29uZnRlc3QuJGFjX29iamV4dC9nJwotICAgICAgICAgICAgIGF4X3B0aHJlYWRfbGlua19zdGVwPWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICIkYXhfcHRocmVhZF9zZWQiYAotICAgICAgICAgICAgIGF4X3B0aHJlYWRfMnN0ZXBfYWNfbGluaz0iKCRhY19jb21waWxlKSAmJiAoZWNobyA9PT09ID4mNSkgJiYgKCRheF9wdGhyZWFkX2xpbmtfc3RlcCkiCi0gICAgICAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgICAgICBmb3IgYXhfcHRocmVhZF90cnkgaW4gJycgLVF1bnVzZWQtYXJndW1lbnRzIC1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCB1bmtub3duOyBkbwotICAgICAgICAgICAgICAgIGlmIHRlc3QgIngkYXhfcHRocmVhZF90cnkiID0gInh1bmtub3duIjsgdGhlbiA6Ci0gIGJyZWFrCi1maQotICAgICAgICAgICAgICAgIENGTEFHUz0iLVdlcnJvciAtV3Vua25vd24td2FybmluZy1vcHRpb24gJGF4X3B0aHJlYWRfdHJ5IC1wdGhyZWFkICRheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTIgotICAgICAgICAgICAgICAgIGFjX2xpbms9IiRheF9wdGhyZWFkX3NhdmVfYWNfbGluayIKLSAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi1pbnQgbWFpbih2b2lkKXtyZXR1cm4gMDt9Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfbGluaz0iJGF4X3B0aHJlYWRfMnN0ZXBfYWNfbGluayIKLSAgICAgICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLWludCBtYWluKHZvaWQpe3JldHVybiAwO30KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBicmVhawotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICBhY19saW5rPSIkYXhfcHRocmVhZF9zYXZlX2FjX2xpbmsiCi0gICAgICAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfdHJ5IiA9ICJ4IjsgdGhlbiA6Ci0gIGF4X3B0aHJlYWRfdHJ5PW5vCi1maQotICAgICAgICAgICAgIGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHPSIkYXhfcHRocmVhZF90cnkiCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4X2N2X1BUSFJFQURfQ0xBTkdfTk9fV0FSTl9GTEFHIiA+JjUKLSRhc19lY2hvICIkYXhfY3ZfUFRIUkVBRF9DTEFOR19OT19XQVJOX0ZMQUciID4mNjsgfQotCi0gICAgICAgIGNhc2UgIiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyIgaW4KLSAgICAgICAgICAgICAgICBubyB8IHVua25vd24pIDs7Ci0gICAgICAgICAgICAgICAgKikgUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9QVEhSRUFEX0NMQU5HX05PX1dBUk5fRkxBRyAkUFRIUkVBRF9DRkxBR1MiIDs7Ci0gICAgICAgIGVzYWMKLQotZmkgIyAkYXhfcHRocmVhZF9jbGFuZyA9IHllcwotCi1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInhubyI7IHRoZW4KLWZvciBheF9wdGhyZWFkX3RyeV9mbGFnIGluICRheF9wdGhyZWFkX2ZsYWdzOyBkbwotCi0gICAgICAgIGNhc2UgJGF4X3B0aHJlYWRfdHJ5X2ZsYWcgaW4KLSAgICAgICAgICAgICAgICBub25lKQotICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGhvdXQgYW55IGZsYWdzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFncy4uLiAiID4mNjsgfQotICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAgICAgICAtbXQscHRocmVhZCkKLSAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgd29yayB3aXRoIC1tdCAtbHB0aHJlYWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggLW10IC1scHRocmVhZC4uLiAiID4mNjsgfQotICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSItbXQiCi0gICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSItbHB0aHJlYWQiCi0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgIC0qKQotICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGF4X3B0aHJlYWRfdHJ5X2ZsYWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGF4X3B0aHJlYWRfdHJ5X2ZsYWcuLi4gIiA+JjY7IH0KLSAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGF4X3B0aHJlYWRfdHJ5X2ZsYWciCi0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgIHB0aHJlYWQtY29uZmlnKQotICAgICAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicHRocmVhZC1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHB0aHJlYWQtY29uZmlnOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRheF9wdGhyZWFkX2NvbmZpZyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZz0iJGF4X3B0aHJlYWRfY29uZmlnIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYXhfcHRocmVhZF9jb25maWc9InllcyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZyIgJiYgYWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZz0ibm8iCi1maQotZmkKLWF4X3B0aHJlYWRfY29uZmlnPSRhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnCi1pZiB0ZXN0IC1uICIkYXhfcHRocmVhZF9jb25maWciOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfcHRocmVhZF9jb25maWciID4mNQotJGFzX2VjaG8gIiRheF9wdGhyZWFkX2NvbmZpZyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAieCRheF9wdGhyZWFkX2NvbmZpZyIgPSAieG5vIjsgdGhlbiA6Ci0gIGNvbnRpbnVlCi1maQotICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSJgcHRocmVhZC1jb25maWcgLS1jZmxhZ3NgIgotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iYHB0aHJlYWQtY29uZmlnIC0tbGRmbGFnc2AgYHB0aHJlYWQtY29uZmlnIC0tbGlic2AiCi0gICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkYXhfcHRocmVhZF90cnlfZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIHB0aHJlYWRzIGxpYnJhcnkgLWwkYXhfcHRocmVhZF90cnlfZmxhZy4uLiAiID4mNjsgfQotICAgICAgICAgICAgICAgIFBUSFJFQURfTElCUz0iLWwkYXhfcHRocmVhZF90cnlfZmxhZyIKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgICAgYXhfcHRocmVhZF9zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgotICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgotCi0gICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLiAgV2UgbXVzdCBpbmNsdWRlIHB0aHJlYWQuaCwKLSAgICAgICAgIyBzaW5jZSBzb21lIGZ1bmN0aW9ucyBtYXkgYmUgbWFjcm9zLiAgKE9uIHRoZSBTZXF1ZW50LCB3ZQotICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKLSAgICAgICAgIyBXZSBjaGVjayBmb3IgcHRocmVhZF9qb2luIGJlY2F1c2UgaXQgaXMgaW4gLWxwdGhyZWFkIG9uIElSSVgKLSAgICAgICAgIyB3aGlsZSBwdGhyZWFkX2NyZWF0ZSBpcyBpbiBsaWJjLiAgV2UgY2hlY2sgZm9yIHB0aHJlYWRfYXR0cl9pbml0Ci0gICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCi0gICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2ggYmVjYXVzZSBpdCBpcyBvbmUgb2YgdGhlIGZldyBwdGhyZWFkCi0gICAgICAgICMgZnVuY3Rpb25zIG9uIFNvbGFyaXMgdGhhdCBkb2Vzbid0IGhhdmUgYSBub24tZnVuY3Rpb25hbCBsaWJjIHN0dWIuCi0gICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KLQotICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotIyAgICAgICAgICAgICAgICAgICAgICAgaWYgJGF4X3B0aHJlYWRfY2hlY2tfY29uZAotIyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yICIkYXhfcHRocmVhZF9jaGVja19tYWNybyBtdXN0IGJlIGRlZmluZWQiCi0jICAgICAgICAgICAgICAgICAgICAgICBlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcm91dGluZSh2b2lkICphKSB7IGEgPSAwOyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCAqc3RhcnRfcm91dGluZSh2b2lkICphKSB7IHJldHVybiBhOyB9Ci1pbnQKLW1haW4gKCkKLXsKLXB0aHJlYWRfdCB0aDsgcHRocmVhZF9hdHRyX3QgYXR0cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0aCwgMCwgc3RhcnRfcm91dGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2pvaW4odGgsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3B1c2gocm91dGluZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NsZWFudXBfcG9wKDApIC8qIDsgKi8KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBheF9wdGhyZWFkX29rPXllcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgICAgQ0ZMQUdTPSIkYXhfcHRocmVhZF9zYXZlX0NGTEFHUyIKLSAgICAgICAgTElCUz0iJGF4X3B0aHJlYWRfc2F2ZV9MSUJTIgotCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfcHRocmVhZF9vayIgPiY1Ci0kYXNfZWNobyAiJGF4X3B0aHJlYWRfb2siID4mNjsgfQotICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuIDoKLSAgYnJlYWsKLWZpCi0KLSAgICAgICAgUFRIUkVBRF9MSUJTPSIiCi0gICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIiCi1kb25lCi1maQotCi0jIFZhcmlvdXMgb3RoZXIgY2hlY2tzOgotaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgICBheF9wdGhyZWFkX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCi0KLSAgICAgICAgIyBEZXRlY3QgQUlYIGxvc3NhZ2U6IEpPSU5BQkxFIGF0dHJpYnV0ZSBpcyBjYWxsZWQgVU5ERVRBQ0hFRC4KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igam9pbmFibGUgcHRocmVhZCBhdHRyaWJ1dGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlLi4uICIgPiY2OyB9Ci1pZiAke2F4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUj11bmtub3duCi0gICAgICAgICAgICAgZm9yIGF4X3B0aHJlYWRfYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEOyBkbwotICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotaW50Ci1tYWluICgpCi17Ci1pbnQgYXR0ciA9ICRheF9wdGhyZWFkX2F0dHI7IHJldHVybiBhdHRyIC8qIDsgKi8KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFI9JGF4X3B0aHJlYWRfYXR0cjsgYnJlYWsKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICAgICAgIGRvbmUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSIiA+JjUKLSRhc19lY2hvICIkYXhfY3ZfUFRIUkVBRF9KT0lOQUJMRV9BVFRSIiA+JjY7IH0KLSAgICAgICAgaWYgdGVzdCAieCRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiICE9ICJ4dW5rbm93biIgJiYgXAotICAgICAgICAgICAgICAgdGVzdCAieCRheF9jdl9QVEhSRUFEX0pPSU5BQkxFX0FUVFIiICE9ICJ4UFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUiICYmIFwKLSAgICAgICAgICAgICAgIHRlc3QgIngkYXhfcHRocmVhZF9qb2luYWJsZV9hdHRyX2RlZmluZWQiICE9ICJ4eWVzIjsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgJGF4X2N2X1BUSFJFQURfSk9JTkFCTEVfQVRUUgotX0FDRU9GCi0KLSAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfam9pbmFibGVfYXR0cl9kZWZpbmVkPXllcwotCi1maQotCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtb3JlIHNwZWNpYWwgZmxhZ3MgYXJlIHJlcXVpcmVkIGZvciBwdGhyZWFkcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1vcmUgc3BlY2lhbCBmbGFncyBhcmUgcmVxdWlyZWQgZm9yIHB0aHJlYWRzLi4uICIgPiY2OyB9Ci1pZiAke2F4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUz1ubwotICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICBzb2xhcmlzKikKLSAgICAgICAgICAgICBheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1M9Ii1EX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIgotICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgZXNhYwotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1MiID4mNQotJGFzX2VjaG8gIiRheF9jdl9QVEhSRUFEX1NQRUNJQUxfRkxBR1MiID4mNjsgfQotICAgICAgICBpZiB0ZXN0ICJ4JGF4X2N2X1BUSFJFQURfU1BFQ0lBTF9GTEFHUyIgIT0gInhubyIgJiYgXAotICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX3NwZWNpYWxfZmxhZ3NfYWRkZWQiICE9ICJ4eWVzIjsgdGhlbiA6Ci0gIFBUSFJFQURfQ0ZMQUdTPSIkYXhfY3ZfUFRIUkVBRF9TUEVDSUFMX0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKLSAgICAgICAgICAgICAgIGF4X3B0aHJlYWRfc3BlY2lhbF9mbGFnc19hZGRlZD15ZXMKLWZpCi0KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUFRIUkVBRF9QUklPX0lOSEVSSVQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBUSFJFQURfUFJJT19JTkhFUklULi4uICIgPiY2OyB9Ci1pZiAke2F4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLWludAotbWFpbiAoKQotewotaW50IGkgPSBQVEhSRUFEX1BSSU9fSU5IRVJJVDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD15ZXMKLWVsc2UKLSAgYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCIgPiY1Ci0kYXNfZWNobyAiJGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUIiA+JjY7IH0KLSAgICAgICAgaWYgdGVzdCAieCRheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCIgPSAieHllcyIgJiYgXAotICAgICAgICAgICAgICAgdGVzdCAieCRheF9wdGhyZWFkX3ByaW9faW5oZXJpdF9kZWZpbmVkIiAhPSAieHllcyI7IHRoZW4gOgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICAgICAgICAgICBheF9wdGhyZWFkX3ByaW9faW5oZXJpdF9kZWZpbmVkPXllcwotCi1maQotCi0gICAgICAgIENGTEFHUz0iJGF4X3B0aHJlYWRfc2F2ZV9DRkxBR1MiCi0gICAgICAgIExJQlM9IiRheF9wdGhyZWFkX3NhdmVfTElCUyIKLQotICAgICAgICAjIE1vcmUgQUlYIGxvc3NhZ2U6IGNvbXBpbGUgd2l0aCAqX3IgdmFyaWFudAotICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgICAgYWl4KikKLSAgICAgICAgICAgICAgICBjYXNlICJ4LyRDQyIgaW4gIygKLSAgeCovYzg5fHgqL2M4OV8xMjh8eCovYzk5fHgqL2M5OV8xMjh8eCovY2N8eCovY2MxMjh8eCoveGxjfHgqL3hsY192Nnx4Ki94bGMxMjh8eCoveGxjMTI4X3Y2KSA6Ci0gICAgI2hhbmRsZSBhYnNvbHV0ZSBwYXRoIGRpZmZlcmVudGx5IGZyb20gUEFUSCBiYXNlZCBwcm9ncmFtIGxvb2t1cAotICAgICAgICAgICAgICAgICAgICAgY2FzZSAieCRDQyIgaW4gIygKLSAgeC8qKSA6Ci0gICAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICR7Q0N9X3I7IHRoZW4gOgotICBQVEhSRUFEX0NDPSIke0NDfV9yIgotZmkgOzsgIygKLSAgKikgOgotICAgIGZvciBhY19wcm9nIGluICR7Q0N9X3IKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19QVEhSRUFEX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfUFRIUkVBRF9DQz0iJFBUSFJFQURfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19QVEhSRUFEX0NDPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1QVEhSRUFEX0NDPSRhY19jdl9wcm9nX1BUSFJFQURfQ0MKLWlmIHRlc3QgLW4gIiRQVEhSRUFEX0NDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBUSFJFQURfQ0MiID4mNQotJGFzX2VjaG8gIiRQVEhSRUFEX0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJFBUSFJFQURfQ0MiICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJENDIgotIDs7Ci1lc2FjIDs7ICMoCi0gICopIDoKLSAgICAgOzsKLWVzYWMKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICBmaQotZmkKLQotdGVzdCAtbiAiJFBUSFJFQURfQ0MiIHx8IFBUSFJFQURfQ0M9IiRDQyIKLQotCi0KLQotCi0jIEZpbmFsbHksIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EL0FDVElPTi1JRi1OT1QtRk9VTkQ6Ci1pZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0gInh5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIUkVBRCAxIiA+PmNvbmZkZWZzLmgKLQotICAgICAgICA6Ci1lbHNlCi0gICAgICAgIGF4X3B0aHJlYWRfb2s9bm8KLQotZmkKLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQotaWYgJHthY19jdl9oZWFkZXJfc3RkYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2hlYWRlcl9zdGRjPXllcwotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQotIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQotI2Vsc2UKLSMgZGVmaW5lIElTTE9XRVIoYykgXAotCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAotCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKLQkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCi0jZW5kaWYKLQotI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKLWludAotbWFpbiAoKQotewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKLSAgICAgIHJldHVybiAyOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi0KLQotIyAtLS0tLS0gQVggQ1JFQVRFIFNURElOVCBIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGludCB0eXBlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IHR5cGVzLi4uICIgPiY2OyB9Ci1hY19zdGRpbnRfaD1gZWNobyBfc3RkaW50LmhgCi0jIHRyeSB0byBzaG9ydGNpcmN1aXQgLSBpZiB0aGUgZGVmYXVsdCBpbmNsdWRlIHBhdGggb2YgdGhlIGNvbXBpbGVyCi0jIGNhbiBmaW5kIGEgInN0ZGludC5oIiBoZWFkZXIgdGhlbiB3ZSBhc3N1bWUgdGhhdCBhbGwgY29tcGlsZXJzIGNhbi4KLWlmICR7YWNfY3ZfaGVhZGVyX3N0ZGludF90Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotb2xkX0NYWEZMQUdTPSIkQ1hYRkxBR1MiIDsgQ1hYRkxBR1M9IiIKLW9sZF9DUFBGTEFHUz0iJENQUEZMQUdTIiA7IENQUEZMQUdTPSIiCi1vbGRfQ0ZMQUdTPSIkQ0ZMQUdTIiAgICAgOyBDRkxBR1M9IiIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLWludAotbWFpbiAoKQotewotaW50X2xlYXN0MzJfdCB2ID0gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoYXNzdW1pbmcgQzk5IGNvbXBhdGlibGUgc3lzdGVtKSIKLSBhY19jdl9oZWFkZXJfc3RkaW50X3Q9InN0ZGludC5oIjsKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGludF90PSIiCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiICYmIHRlc3QgIi4kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiA9ICIuIjsgdGhlbgotQ0ZMQUdTPSItc3RkPWM5OSIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLWludAotbWFpbiAoKQotewotaW50X2xlYXN0MzJfdCB2ID0gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHlvdXIgR0NDIGNvbXBpbGVyIGhhcyBhIGRlZnVuY3Qgc3RkaW50LmggZm9yIGl0cyBkZWZhdWx0LW1vZGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91ciBHQ0MgY29tcGlsZXIgaGFzIGEgZGVmdW5jdCBzdGRpbnQuaCBmb3IgaXRzIGRlZmF1bHQtbW9kZSIgPiYyO30KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1DWFhGTEFHUz0iJG9sZF9DWFhGTEFHUyIKLUNQUEZMQUdTPSIkb2xkX0NQUEZMQUdTIgotQ0ZMQUdTPSIkb2xkX0NGTEFHUyIKLWZpCi0KLQotdj0iLi4uICRhY19jdl9oZWFkZXJfc3RkaW50X2giCi1pZiB0ZXN0ICIkYWNfc3RkaW50X2giID0gInN0ZGludC5oIiA7IHRoZW4KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vc3RkaW50Lmg/KSIgPiY1Ci0kYXNfZWNobyAiKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vc3RkaW50Lmg/KSIgPiY2OyB9Ci1lbGlmIHRlc3QgIiRhY19zdGRpbnRfaCIgPSAiaW50dHlwZXMuaCIgOyB0aGVuCi0geyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IChhcmUgeW91IHN1cmUgeW91IHdhbnQgdGhlbSBpbiAuL2ludHR5cGVzLmg/KSIgPiY1Ci0kYXNfZWNobyAiKGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0aGVtIGluIC4vaW50dHlwZXMuaD8pIiA+JjY7IH0KLWVsaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIl8iIDsgdGhlbgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAocHV0dGluZyB0aGVtIGludG8gJGFjX3N0ZGludF9oKSR2IiA+JjUKLSRhc19lY2hvICIocHV0dGluZyB0aGVtIGludG8gJGFjX3N0ZGludF9oKSR2IiA+JjY7IH0KLWVsc2UKLSBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF90IgotIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGludCAoc2hvcnRjaXJjdWl0KSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRpbnQgKHNob3J0Y2lyY3VpdCkiID4mNjsgfQotZmkKLQotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3QiID0gIl8iIDsgdGhlbiAjIGNhbiBub3Qgc2hvcnRjaXJjdWl0Li4KLQotCi1pbnR0eXBlX2hlYWRlcnM9YGVjaG8gIHwgc2VkIC1lICdzLywvIC9nJ2AKLQotYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKG5vIGhlbHBmdWwgc3lzdGVtIHR5cGVkZWZzIHNlZW4pIgotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdWludHB0cl90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdWludHB0cl90Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2hlYWRlcl9zdGRpbnRfeCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0KLSBhY19jdl9oZWFkZXJfc3RkaW50X3g9IiIgIyB0aGUgMTk5NyB0eXBlZGVmcyAoaW50dHlwZXMuaCkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICguLikiID4mNQotJGFzX2VjaG8gIiguLikiID4mNjsgfQotICBmb3IgaSBpbiAgICBzdGRpbnQuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oICRpbnR0eXBlX2hlYWRlcnMKLSAgZG8KLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludHB0cl90Ci0gICB1bnNldCBhY19jdl90eXBlX3VpbnQ2NF90Ci0gICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50cHRyX3QiICJhY19jdl90eXBlX3VpbnRwdHJfdCIgIiNpbmNsdWRlIDwkaT4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50cHRyX3QiID0geHllczsgdGhlbiA6Ci0gIGFjX2N2X2hlYWRlcl9zdGRpbnRfeD0kaQotZWxzZQotICBjb250aW51ZQotZmkKLQotICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidWludDY0X3QiICJhY19jdl90eXBlX3VpbnQ2NF90IiAiI2luY2x1ZGU8JGk+Ci0iCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfdWludDY0X3QiID0geHllczsgdGhlbiA6Ci0gIGFuZDY0PSIvdWludDY0X3QiCi1lbHNlCi0gIGFuZDY0PSIiCi1maQotCi0gICBhY19jdl9zdGRpbnRfcmVzdWx0PSIoc2VlbiB1aW50cHRyX3QkYW5kNjQgaW4gJGkpIgotIGJyZWFrCi0gIGRvbmUKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVpbnRwdHJfdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IHVpbnRwdHJfdC4uLiAiID4mNjsgfQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkaW50X3giID4mNQotJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkaW50X3giID4mNjsgfQotCi0KLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF94IiA9ICJfIiA7IHRoZW4KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVpbnQzMl90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdWludDMyX3QuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfaGVhZGVyX3N0ZGludF9vKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQotIGFjX2N2X2hlYWRlcl9zdGRpbnRfbz0iIiAjIHRoZSAxOTk1IHR5cGVkZWZzIChzeXMvaW50dHlwZXMuaCkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICguLikiID4mNQotJGFzX2VjaG8gIiguLikiID4mNjsgfQotICBmb3IgaSBpbiAgICBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oIHN0ZGludC5oICRpbnR0eXBlX2hlYWRlcnMKLSAgZG8KLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDMyX3QKLSAgIHVuc2V0IGFjX2N2X3R5cGVfdWludDY0X3QKLSAgIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInVpbnQzMl90IiAiYWNfY3ZfdHlwZV91aW50MzJfdCIgIiNpbmNsdWRlIDwkaT4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50MzJfdCIgPSB4eWVzOyB0aGVuIDoKLSAgYWNfY3ZfaGVhZGVyX3N0ZGludF9vPSRpCi1lbHNlCi0gIGNvbnRpbnVlCi1maQotCi0gICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50NjRfdCIgImFjX2N2X3R5cGVfdWludDY0X3QiICIjaW5jbHVkZTwkaT4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV91aW50NjRfdCIgPSB4eWVzOyB0aGVuIDoKLSAgYW5kNjQ9Ii91aW50NjRfdCIKLWVsc2UKLSAgYW5kNjQ9IiIKLWZpCi0KLSAgIGFjX2N2X3N0ZGludF9yZXN1bHQ9IihzZWVuIHVpbnQzMl90JGFuZDY0IGluICRpKSIKLSBicmVhawotICAgYnJlYWs7Ci0gIGRvbmUKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVpbnQzMl90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdWludDMyX3QuLi4gIiA+JjY7IH0KLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiA+JjY7IH0KLQotZmkKLQotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giID0gIl8iIDsgdGhlbgotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X28iID0gIl8iIDsgdGhlbgotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgdV9pbnQzMl90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRpbnQgdV9pbnQzMl90Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2hlYWRlcl9zdGRpbnRfdSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0KLSBhY19jdl9oZWFkZXJfc3RkaW50X3U9IiIgIyB0aGUgQlNEIHR5cGVkZWZzIChzeXMvdHlwZXMuaCkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICguLikiID4mNQotJGFzX2VjaG8gIiguLikiID4mNjsgfQotICBmb3IgaSBpbiAgICBzeXMvdHlwZXMuaCBpbnR0eXBlcy5oIHN5cy9pbnR0eXBlcy5oICRpbnR0eXBlX2hlYWRlcnMgOyBkbwotICAgdW5zZXQgYWNfY3ZfdHlwZV91X2ludDMyX3QKLSAgIHVuc2V0IGFjX2N2X3R5cGVfdV9pbnQ2NF90Ci0gICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1X2ludDMyX3QiICJhY19jdl90eXBlX3VfaW50MzJfdCIgIiNpbmNsdWRlIDwkaT4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV91X2ludDMyX3QiID0geHllczsgdGhlbiA6Ci0gIGFjX2N2X2hlYWRlcl9zdGRpbnRfdT0kaQotZWxzZQotICBjb250aW51ZQotZmkKLQotICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidV9pbnQ2NF90IiAiYWNfY3ZfdHlwZV91X2ludDY0X3QiICIjaW5jbHVkZTwkaT4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV91X2ludDY0X3QiID0geHllczsgdGhlbiA6Ci0gIGFuZDY0PSIvdV9pbnQ2NF90IgotZWxzZQotICBhbmQ2ND0iIgotZmkKLQotICAgYWNfY3Zfc3RkaW50X3Jlc3VsdD0iKHNlZW4gdV9pbnQzMl90JGFuZDY0IGluICRpKSIKLSBicmVhawotICAgYnJlYWs7Ci0gIGRvbmUKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50IHVfaW50MzJfdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RkaW50IHVfaW50MzJfdC4uLiAiID4mNjsgfQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkaW50X3UiID4mNQotJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkaW50X3UiID4mNjsgfQotCi1maSBmaQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgPSAiXyIgOyB0aGVuCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdGRpbnQgZGF0YXR5cGUgbW9kZWwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludCBkYXRhdHlwZSBtb2RlbC4uLiAiID4mNjsgfQotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICguLikiID4mNQotJGFzX2VjaG8gIiguLikiID4mNjsgfQotCi0gICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0jIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGNoYXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBjaGFyLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3NpemVvZl9jaGFyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoY2hhcikpIiAiYWNfY3Zfc2l6ZW9mX2NoYXIiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKLQotZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9jaGFyIiA9IHllczsgdGhlbgotICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGNoYXIpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotICAgZWxzZQotICAgICBhY19jdl9zaXplb2ZfY2hhcj0wCi0gICBmaQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2NoYXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfY2hhciIgPiY2OyB9Ci0KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFNJWkVPRl9DSEFSICRhY19jdl9zaXplb2ZfY2hhcgotX0FDRU9GCi0KLQotICAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHNob3J0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3NpemVvZl9zaG9ydCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHNob3J0KSkiICJhY19jdl9zaXplb2Zfc2hvcnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKLQotZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl9zaG9ydD0wCi0gICBmaQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjY7IH0KLQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU0laRU9GX1NIT1JUICRhY19jdl9zaXplb2Zfc2hvcnQKLV9BQ0VPRgotCi0KLSAgICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0jIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0jIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KLSMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3NpemVvZl9pbnQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChpbnQpKSIgImFjX2N2X3NpemVvZl9pbnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKLQotZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCi0gICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLSAgIGVsc2UKLSAgICAgYWNfY3Zfc2l6ZW9mX2ludD0wCi0gICBmaQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3NpemVvZl9pbnQiID4mNjsgfQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBTSVpFT0ZfSU5UICRhY19jdl9zaXplb2ZfaW50Ci1fQUNFT0YKLQotCi0gICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwotIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0jIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3NpemVvZl9sb25nKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKLQotZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgotICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotICAgZWxzZQotICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCi0gICBmaQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNQotJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZyIgPiY2OyB9Ci0KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFNJWkVPRl9MT05HICRhY19jdl9zaXplb2ZfbG9uZwotX0FDRU9GCi0KLQotICAgIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKLSMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB2b2lkKiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHZvaWQqLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3NpemVvZl92b2lkcCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHZvaWQqKSkiICJhY19jdl9zaXplb2Zfdm9pZHAiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKLQotZWxzZQotICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV92b2lkcCIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkKikKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl92b2lkcD0wCi0gICBmaQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3ZvaWRwIiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3ZvaWRwIiA+JjY7IH0KLQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgU0laRU9GX1ZPSURQICRhY19jdl9zaXplb2Zfdm9pZHAKLV9BQ0VPRgotCi0KLSAgIGFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iIgotICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9jaGFyIgotICAgYWNfY3ZfY2hhcl9kYXRhX21vZGVsPSIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsJGFjX2N2X3NpemVvZl9zaG9ydCIKLSAgIGFjX2N2X2NoYXJfZGF0YV9tb2RlbD0iJGFjX2N2X2NoYXJfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfaW50IgotICAgYWNfY3ZfbG9uZ19kYXRhX21vZGVsPSIiCi0gICBhY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwkYWNfY3Zfc2l6ZW9mX2ludCIKLSAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCRhY19jdl9zaXplb2ZfbG9uZyIKLSAgIGFjX2N2X2xvbmdfZGF0YV9tb2RlbD0iJGFjX2N2X2xvbmdfZGF0YV9tb2RlbCRhY19jdl9zaXplb2Zfdm9pZHAiCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRhdGEgbW9kZWwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGF0YSBtb2RlbC4uLiAiID4mNjsgfQotICAgY2FzZSAiJGFjX2N2X2NoYXJfZGF0YV9tb2RlbC8kYWNfY3ZfbG9uZ19kYXRhX21vZGVsIiBpbgotICAgIDEyMi8yNDIpICAgICBhY19jdl9kYXRhX21vZGVsPSJJUDE2IiAgOyBuPSJzdGFuZGFyZCAxNmJpdCBtYWNoaW5lIiA7OwotICAgIDEyMi8yNDQpICAgICBhY19jdl9kYXRhX21vZGVsPSJMUDMyIiAgOyBuPSJzdGFuZGFyZCAzMmJpdCBtYWNoaW5lIiA7OwotICAgIDEyMi8qKSAgICAgICBhY19jdl9kYXRhX21vZGVsPSJpMTYiICAgOyBuPSJ1bnVzdWFsIGludDE2IG1vZGVsIiA7OwotICAgIDEyNC80NDQpICAgICBhY19jdl9kYXRhX21vZGVsPSJJTFAzMiIgOyBuPSJzdGFuZGFyZCAzMmJpdCB1bml4aXNoIiA7OwotICAgIDEyNC80ODgpICAgICBhY19jdl9kYXRhX21vZGVsPSJMUDY0IiAgOyBuPSJzdGFuZGFyZCA2NGJpdCB1bml4aXNoIiA7OwotICAgIDEyNC80NDgpICAgICBhY19jdl9kYXRhX21vZGVsPSJMTFA2NCIgOyBuPSJ1bnVzdWFsIDY0Yml0IHVuaXhpc2giIDs7Ci0gICAgMTI0LyopICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9ImkzMiIgICA7IG49InVudXN1YWwgaW50MzIgbW9kZWwiIDs7Ci0gICAgMTI4Lzg4OCkgICAgIGFjX2N2X2RhdGFfbW9kZWw9IklMUDY0IiA7IG49InVudXN1YWwgNjRiaXQgbnVtZXJpYyIgOzsKLSAgICAxMjgvKikgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iaTY0IiAgIDsgbj0idW51c3VhbCBpbnQ2NCBtb2RlbCIgOzsKLSAgICAyMjIvKjIpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQMTYiIDsgbj0ic3RyaWN0IDE2Yml0IGRzcHR5cGUiIDs7Ci0gICAgMzMzLyozKSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDI0IiA7IG49InN0cmljdCAyNGJpdCBkc3B0eXBlIiA7OwotICAgIDQ0NC8qNCkgICAgICBhY19jdl9kYXRhX21vZGVsPSJEU1AzMiIgOyBuPSJzdHJpY3QgMzJiaXQgZHNwdHlwZSIgOzsKLSAgICA2NjYvKjYpICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0iRFNQNDgiIDsgbj0ic3RyaWN0IDQ4Yml0IGRzcHR5cGUiIDs7Ci0gICAgODg4Lyo4KSAgICAgIGFjX2N2X2RhdGFfbW9kZWw9IkRTUDY0IiA7IG49InN0cmljdCA2NGJpdCBkc3B0eXBlIiA7OwotICAgIDIyMi8qfDMzMy8qfDQ0NC8qfDY2Ni8qfDg4OC8qKSA6Ci0gICAgICAgICAgICAgICAgIGFjX2N2X2RhdGFfbW9kZWw9ImlEU1AiICA7IG49InVudXN1YWwgZHNwdHlwZSIgOzsKLSAgICAgKikgICAgICAgICAgYWNfY3ZfZGF0YV9tb2RlbD0ibm9uZSIgIDsgbj0idmVyeSB1bnVzdWFsIG1vZGVsIiA7OwotICAgZXNhYwotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kYXRhX21vZGVsICgkYWNfY3ZfbG9uZ19kYXRhX21vZGVsLCAkbikiID4mNQotJGFzX2VjaG8gIiRhY19jdl9kYXRhX21vZGVsICgkYWNfY3ZfbG9uZ19kYXRhX21vZGVsLCAkbikiID4mNjsgfQotCi1maQotCi1pZiB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIgIT0gIl8iIDsgdGhlbgotICAgYWNfY3ZfaGVhZGVyX3N0ZGludD0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfeCIKLWVsaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF9vIiAhPSAiXyIgOyB0aGVuCi0gICBhY19jdl9oZWFkZXJfc3RkaW50PSIkYWNfY3ZfaGVhZGVyX3N0ZGludF9vIgotZWxpZiAgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3UiICE9ICJfIiA7IHRoZW4KLSAgIGFjX2N2X2hlYWRlcl9zdGRpbnQ9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCi1lbHNlCi0gICBhY19jdl9oZWFkZXJfc3RkaW50PSJzdGRkZWYuaCIKLWZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGV4dHJhIGludHR5cGVzIGluIGNob3NlbiBoZWFkZXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGV4dHJhIGludHR5cGVzIGluIGNob3NlbiBoZWFkZXIuLi4gIiA+JjY7IH0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAoJGFjX2N2X2hlYWRlcl9zdGRpbnQpIiA+JjUKLSRhc19lY2hvICIoJGFjX2N2X2hlYWRlcl9zdGRpbnQpIiA+JjY7IH0KLXVuc2V0IGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdAotdW5zZXQgYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QKLWFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImludF9sZWFzdDMyX3QiICJhY19jdl90eXBlX2ludF9sZWFzdDMyX3QiICIjaW5jbHVkZSA8JGFjX2N2X2hlYWRlcl9zdGRpbnQ+Ci0iCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIgPSB4eWVzOyB0aGVuIDoKLQotZmkKLQotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAiaW50X2Zhc3QzMl90IiAiYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiICIjaW5jbHVkZTwkYWNfY3ZfaGVhZGVyX3N0ZGludD4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnRfZmFzdDMyX3QiID0geHllczsgdGhlbiA6Ci0KLWZpCi0KLWFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImludG1heF90IiAiYWNfY3ZfdHlwZV9pbnRtYXhfdCIgIiNpbmNsdWRlIDwkYWNfY3ZfaGVhZGVyX3N0ZGludD4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPSB4eWVzOyB0aGVuIDoKLQotZmkKLQotCi1maSAjIHNob3J0Y2lyY3V0IHRvIHN5c3RlbSAic3RkaW50LmgiCi0jIC0tLS0tLS0tLS0tLS0tLS0tLSBQUkVQQVJFIFZBUklBQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCi1hY19jdl9zdGRpbnRfbWVzc2FnZT0idXNpbmcgZ251IGNvbXBpbGVyICJgJENDIC0tdmVyc2lvbiB8IGhlYWQgLTFgCi1lbHNlCi1hY19jdl9zdGRpbnRfbWVzc2FnZT0idXNpbmcgJENDIgotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG1ha2UgdXNlIG9mICRhY19jdl9oZWFkZXJfc3RkaW50IGluICRhY19zdGRpbnRfaCAkYWNfY3Zfc3RkaW50X3Jlc3VsdCIgPiY1Ci0kYXNfZWNobyAibWFrZSB1c2Ugb2YgJGFjX2N2X2hlYWRlcl9zdGRpbnQgaW4gJGFjX3N0ZGludF9oICRhY19jdl9zdGRpbnRfcmVzdWx0IiA+JjY7IH0KLQotIyAtLS0tLS0tLS0tLS0tLS0tLSBET05FIGludHR5cGVzLmggY2hlY2tzIFNUQVJUIGhlYWRlciAtLS0tLS0tLS0tLS0tCi1hY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgJGFjX3N0ZGludF9oIgotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZS5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvdGltZS5oIiAiYWNfY3ZfaGVhZGVyX3N5c190aW1lX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c190aW1lX2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc29ja2V0LmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9zb2NrZXQuaCIgImFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRklPTlJFQUQgaW4gc3lzL2lvY3RsLmgiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEZJT05SRUFEIGluIHN5cy9pb2N0bC5oLi4uICIgPiY2OyB9Ci0gIGlmICR7X2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfaW9jdGwrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0KLWludAotbWFpbiAoKQotewotCi1pbnQgeCA9IEZJT05SRUFEOwotaWYgKCB4ICkKLSAgcmV0dXJuIDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19pb2N0bD0ieWVzIgotZWxzZQotICBfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19pb2N0bD0ibm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJF9jdl9nc3RfZmlvbnJlYWRfaW5fc3lzX2lvY3RsIiA+JjUKLSRhc19lY2hvICIkX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfaW9jdGwiID4mNjsgfQotCi0gIGlmIHRlc3QgIiRfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19pb2N0bCIgPSAieWVzIjsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZJT05SRUFEX0lOX1NZU19JT0NUTCAxIiA+PmNvbmZkZWZzLmgKLQotCi0gIGVsc2UKLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEZJT05SRUFEIGluIHN5cy9maWxpby5oIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBGSU9OUkVBRCBpbiBzeXMvZmlsaW8uaC4uLiAiID4mNjsgfQotICAgIGlmICR7X2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICAjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gIGludCB4ID0gRklPTlJFQUQ7Ci0gIGlmICggeCApCi0gICAgcmV0dXJuIDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19maWxpbz0ieWVzIgotZWxzZQotICBfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19maWxpbz0ibm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW8iID4mNQotJGFzX2VjaG8gIiRfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19maWxpbyIgPiY2OyB9Ci0KLSAgICBpZiB0ZXN0ICIkX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW8iID0gInllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GSU9OUkVBRF9JTl9TWVNfRklMSU8gMSIgPj5jb25mZGVmcy5oCi0KLSAgICBmaQotCi0gIGZpCi0KLQotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgY29tcGlsZXIgc3VwcG9ydHMgZ2NjLXN0eWxlIGlubGluZSBhc3NlbWJseSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiBjb21waWxlciBzdXBwb3J0cyBnY2Mtc3R5bGUgaW5saW5lIGFzc2VtYmx5Li4uICIgPiY2OyB9Ci0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotI2lmZGVmIF9fR05VQ19NSU5PUl9fCi0jaWYgKF9fR05VQ19fICogMTAwMCArIF9fR05VQ19NSU5PUl9fKSA8IDMwMDQKLSNlcnJvciBHQ0MgYmVmb3JlIDMuNCBoYXMgY3JpdGljYWwgYnVncyBjb21waWxpbmcgaW5saW5lIGFzc2VtYmx5Ci0jZW5kaWYKLSNlbmRpZgotX19hc21fXyAoIiI6OikKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBmbGFnX29rPXllcwotZWxzZQotICBmbGFnX29rPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgSEFWRV9HQ0NfQVNNPXllcwotICAgIHRydWUKLSAgZWxzZQotICAgIEhBVkVfR0NDX0FTTT1ubwotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLWlmIHRlc3QgeCRIQVZFX0dDQ19BU00gPSB4eWVzIDsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dDQ19BU00gMSIgPj5jb25mZGVmcy5oCi0KLWZpCi0gaWYgdGVzdCAieCRIQVZFX0dDQ19BU00iID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfR0NDX0FTTV9UUlVFPQotICBIQVZFX0dDQ19BU01fRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfR0NDX0FTTV9UUlVFPScjJwotICBIQVZFX0dDQ19BU01fRkFMU0U9Ci1maQotCi0KLQotTElCU19TQVZFPSRMSUJTCi1MSUJTPSIkTElCUyAkTElCTSIKLWZvciBhY19mdW5jIGluIHJpbnQgc2luaCBjb3NoIGFzaW5oIGZwY2xhc3MKLWRvIDoKLSAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi1MSUJTPSRMSUJTX1NBVkUKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaXNpbmYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlzaW5mLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2hhdmVfaXNpbmYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bWF0aC5oPgotaW50Ci1tYWluICgpCi17Ci1mbG9hdCBmID0gMC4wOyBpbnQgaT1pc2luZihmKQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2hhdmVfaXNpbmY9InllcyIKLWVsc2UKLSAgYWNfY3ZfaGF2ZV9pc2luZj0ibm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfaXNpbmYiID4mNQotJGFzX2VjaG8gIiRhY19jdl9oYXZlX2lzaW5mIiA+JjY7IH0KLWlmIHRlc3QgIiRhY19jdl9oYXZlX2lzaW5mIiA9ICJ5ZXMiCi10aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSVNJTkYgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi0KLQotCi0KLSAgZm9yIGFjX2hlYWRlciBpbiAkYWNfaGVhZGVyX2xpc3QKLWRvIDoKLSAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIGdldHBhZ2VzaXplCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHBhZ2VzaXplIiAiYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZSIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1tYXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbW1hcC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0vKiBtYWxsb2MgbWlnaHQgaGF2ZSBiZWVuIHJlbmFtZWQgYXMgcnBsX21hbGxvYy4gKi8KLSN1bmRlZiBtYWxsb2MKLQotLyogVGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCi0gICBIZXJlIGlzIGEgbWF0cml4IG9mIG1tYXAgcG9zc2liaWxpdGllczoKLQltbWFwIHByaXZhdGUgbm90IGZpeGVkCi0JbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBwZWQKLQltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCi0JbW1hcCBzaGFyZWQgbm90IGZpeGVkCi0JbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAotCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1hcHBlZAotICAgRm9yIHByaXZhdGUgbWFwcGluZ3MsIHdlIHNob3VsZCB2ZXJpZnkgdGhhdCBjaGFuZ2VzIGNhbm5vdCBiZSByZWFkKCkKLSAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBiYWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKLSAgIGFkZHJlc3MuICAoVGhlcmUgaGF2ZSBiZWVuIHN5c3RlbXMgd2hlcmUgcHJpdmF0ZSB3YXMgbm90IGNvcnJlY3RseQotICAgaW1wbGVtZW50ZWQgbGlrZSB0aGUgaW5mYW1vdXMgaTM4NiBzdnI0LjAsIGFuZCBzeXN0ZW1zIHdoZXJlIHRoZQotICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlciBjYWNoZQotICAgbGlrZSBlYXJseSB2ZXJzaW9ucyBvZiBGcmVlQlNEIGFuZCBwb3NzaWJseSBjb250ZW1wb3JhcnkgTmV0QlNELikKLSAgIEZvciBzaGFyZWQgbWFwcGluZ3MsIHdlIHNob3VsZCBjb252ZXJzZWx5IHZlcmlmeSB0aGF0IGNoYW5nZXMgZ2V0Ci0gICBwcm9wYWdhdGVkIGJhY2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KLQotICAgR3JlcCB3YW50cyBwcml2YXRlIGZpeGVkIGFscmVhZHkgbWFwcGVkLgotICAgVGhlIG1haW4gdGhpbmdzIGdyZXAgbmVlZHMgdG8ga25vdyBhYm91dCBtbWFwIGFyZToKLSAgICogZG9lcyBpdCBleGlzdCBhbmQgaXMgaXQgc2FmZSB0byB3cml0ZSBpbnRvIHRoZSBtbWFwJ2QgYXJlYQotICAgKiBob3cgdG8gdXNlIGl0IChCU0QgdmFyaWFudHMpICAqLwotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIEhBVkVfU1RETElCX0gKLWNoYXIgKm1hbGxvYyAoKTsKLSNlbmRpZgotCi0vKiBUaGlzIG1lc3Mgd2FzIGNvcGllZCBmcm9tIHRoZSBHTlUgZ2V0cGFnZXNpemUuaC4gICovCi0jaWZuZGVmIEhBVkVfR0VUUEFHRVNJWkUKLSMgaWZkZWYgX1NDX1BBR0VTSVpFCi0jICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKLSMgZWxzZSAvKiBubyBfU0NfUEFHRVNJWkUgKi8KLSMgIGlmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSMgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSMgICBpZmRlZiBFWEVDX1BBR0VTSVpFCi0jICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKLSMgICBlbHNlIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KLSMgICAgaWZkZWYgTkJQRwotIyAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQRyAqIENMU0laRQotIyAgICAgaWZuZGVmIENMU0laRQotIyAgICAgIGRlZmluZSBDTFNJWkUgMQotIyAgICAgZW5kaWYgLyogbm8gQ0xTSVpFICovCi0jICAgIGVsc2UgLyogbm8gTkJQRyAqLwotIyAgICAgaWZkZWYgTkJQQwotIyAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIE5CUEMKLSMgICAgIGVsc2UgLyogbm8gTkJQQyAqLwotIyAgICAgIGlmZGVmIFBBR0VTSVpFCi0jICAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIFBBR0VTSVpFCi0jICAgICAgZW5kaWYgLyogUEFHRVNJWkUgKi8KLSMgICAgIGVuZGlmIC8qIG5vIE5CUEMgKi8KLSMgICAgZW5kaWYgLyogbm8gTkJQRyAqLwotIyAgIGVuZGlmIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KLSMgIGVsc2UgLyogbm8gSEFWRV9TWVNfUEFSQU1fSCAqLwotIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIDgxOTIJLyogcHVudCB0b3RhbGx5ICovCi0jICBlbmRpZiAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCi0jIGVuZGlmIC8qIG5vIF9TQ19QQUdFU0laRSAqLwotCi0jZW5kaWYgLyogbm8gSEFWRV9HRVRQQUdFU0laRSAqLwotCi1pbnQKLW1haW4gKCkKLXsKLSAgY2hhciAqZGF0YSwgKmRhdGEyLCAqZGF0YTM7Ci0gIGNvbnN0IGNoYXIgKmNkYXRhMjsKLSAgaW50IGksIHBhZ2VzaXplOwotICBpbnQgZmQsIGZkMjsKLQotICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOwotCi0gIC8qIEZpcnN0LCBtYWtlIGEgZmlsZSB3aXRoIHNvbWUga25vd24gZ2FyYmFnZSBpbiBpdC4gKi8KLSAgZGF0YSA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOwotICBpZiAoIWRhdGEpCi0gICAgcmV0dXJuIDE7Ci0gIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQotICAgICooZGF0YSArIGkpID0gcmFuZCAoKTsKLSAgdW1hc2sgKDApOwotICBmZCA9IGNyZWF0ICgiY29uZnRlc3QubW1hcCIsIDA2MDApOwotICBpZiAoZmQgPCAwKQotICAgIHJldHVybiAyOwotICBpZiAod3JpdGUgKGZkLCBkYXRhLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCi0gICAgcmV0dXJuIDM7Ci0gIGNsb3NlIChmZCk7Ci0KLSAgLyogTmV4dCwgY2hlY2sgdGhhdCB0aGUgdGFpbCBvZiBhIHBhZ2UgaXMgemVyby1maWxsZWQuICBGaWxlIG11c3QgaGF2ZQotICAgICBub24temVybyBsZW5ndGgsIG90aGVyd2lzZSB3ZSByaXNrIFNJR0JVUyBmb3IgZW50aXJlIHBhZ2UuICAqLwotICBmZDIgPSBvcGVuICgiY29uZnRlc3QudHh0IiwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2MDApOwotICBpZiAoZmQyIDwgMCkKLSAgICByZXR1cm4gNDsKLSAgY2RhdGEyID0gIiI7Ci0gIGlmICh3cml0ZSAoZmQyLCBjZGF0YTIsIDEpICE9IDEpCi0gICAgcmV0dXJuIDU7Ci0gIGRhdGEyID0gKGNoYXIgKikgbW1hcCAoMCwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkMiwgMEwpOwotICBpZiAoZGF0YTIgPT0gTUFQX0ZBSUxFRCkKLSAgICByZXR1cm4gNjsKLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgaWYgKCooZGF0YTIgKyBpKSkKLSAgICAgIHJldHVybiA3OwotICBjbG9zZSAoZmQyKTsKLSAgaWYgKG11bm1hcCAoZGF0YTIsIHBhZ2VzaXplKSkKLSAgICByZXR1cm4gODsKLQotICAvKiBOZXh0LCB0cnkgdG8gbW1hcCB0aGUgZmlsZSBhdCBhIGZpeGVkIGFkZHJlc3Mgd2hpY2ggYWxyZWFkeSBoYXMKLSAgICAgc29tZXRoaW5nIGVsc2UgYWxsb2NhdGVkIGF0IGl0LiAgSWYgd2UgY2FuLCBhbHNvIG1ha2Ugc3VyZSB0aGF0Ci0gICAgIHdlIHNlZSB0aGUgc2FtZSBnYXJiYWdlLiAgKi8KLSAgZmQgPSBvcGVuICgiY29uZnRlc3QubW1hcCIsIE9fUkRXUik7Ci0gIGlmIChmZCA8IDApCi0gICAgcmV0dXJuIDk7Ci0gIGlmIChkYXRhMiAhPSBtbWFwIChkYXRhMiwgcGFnZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCSAgICAgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIGZkLCAwTCkpCi0gICAgcmV0dXJuIDEwOwotICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKLSAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMiArIGkpKQotICAgICAgcmV0dXJuIDExOwotCi0gIC8qIEZpbmFsbHksIG1ha2Ugc3VyZSB0aGF0IGNoYW5nZXMgdG8gdGhlIG1hcHBlZCBhcmVhIGRvIG5vdAotICAgICBwZXJjb2xhdGUgYmFjayB0byB0aGUgZmlsZSBhcyBzZWVuIGJ5IHJlYWQoKS4gIChUaGlzIGlzIGEgYnVnIG9uCi0gICAgIHNvbWUgdmFyaWFudHMgb2YgaTM4NiBzdnI0LjAuKSAgKi8KLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgKihkYXRhMiArIGkpID0gKihkYXRhMiArIGkpICsgMTsKLSAgZGF0YTMgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKLSAgaWYgKCFkYXRhMykKLSAgICByZXR1cm4gMTI7Ci0gIGlmIChyZWFkIChmZCwgZGF0YTMsIHBhZ2VzaXplKSAhPSBwYWdlc2l6ZSkKLSAgICByZXR1cm4gMTM7Ci0gIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQotICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEzICsgaSkpCi0gICAgICByZXR1cm4gMTQ7Ci0gIGNsb3NlIChmZCk7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD15ZXMKLWVsc2UKLSAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQgPSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQIDEiID4+Y29uZmRlZnMuaAotCi1maQotcm0gLWYgY29uZnRlc3QubW1hcCBjb25mdGVzdC50eHQKLQotIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCIgPSAieHllcyI7IHRoZW4KLSAgR1NUX0hBVkVfTU1BUF9UUlVFPQotICBHU1RfSEFWRV9NTUFQX0ZBTFNFPScjJwotZWxzZQotICBHU1RfSEFWRV9NTUFQX1RSVUU9JyMnCi0gIEdTVF9IQVZFX01NQVBfRkFMU0U9Ci1maQotCi0KLQotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic3RydWN0IGlwX21yZXFuIiAiYWNfY3ZfdHlwZV9zdHJ1Y3RfaXBfbXJlcW4iICIjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3N0cnVjdF9pcF9tcmVxbiIgPSB4eWVzOyB0aGVuIDoKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0lQX01SRVFOIC8qKi8iID4+Y29uZmRlZnMuaAotCi1maQotCi0KLQotCi1HTElCX1JFUT0yLjQwLjAKLQotCi0KLSAgICBHTElCX1JFUT0kR0xJQl9SRVEKLSAgaWYgdGVzdCAieCRHTElCX1JFUSIgPSAieCIKLSAgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2Ugc3BlY2lmeSBhIHJlcXVpcmVkIHZlcnNpb24gZm9yIEdMaWIgMi4wIiAiJExJTkVOTyIgNQotICBmaQotCi0KLQotICB3aGljaD0iZ2xpYi0yLjAgPj0gJEdMSUJfUkVRIGdvYmplY3QtMi4wIGdtb2R1bGUtbm8tZXhwb3J0LTIuMCIKLSAgICByZXF1aXJlZD0ibm8iCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR0xJQiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR0xJQi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR0xJQl9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HTElCX0NGTEFHUz0iJEdMSUJfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR0xJQl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHTElCX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HTElCX0xJQlM9IiRHTElCX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HTElCX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdMSUJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBHTElCX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR0xJQl9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0dMSUI9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRHTElCX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdMSUJfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR0xJQl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0dMSUI9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRHTElCX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdMSUJfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR0xJQl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxzZQotCUdMSUJfQ0ZMQUdTPSRwa2dfY3ZfR0xJQl9DRkxBR1MKLQlHTElCX0xJQlM9JHBrZ19jdl9HTElCX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9HTElCPSJ5ZXMiCi0KLWZpCi0KLQotCi0gIGlmIHRlc3QgIngkSEFWRV9HTElCIiA9ICJ4bm8iOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlRoaXMgcGFja2FnZSByZXF1aXJlcyBHTGliID49ICRHTElCX1JFUSB0byBjb21waWxlLiIgIiRMSU5FTk8iIDUKLSAgZmkKLQotICAgICAgICBHTElCX0VYVFJBX0NGTEFHUz0iJEdMSUJfRVhUUkFfQ0ZMQUdTIC1ER19USFJFQURTX01BTkRBVE9SWSIKLQotICAgIGlmIHRlc3QgInhgZXhwciAkUEFDS0FHRV9WRVJTSU9OX01JTk9SICUgMmAiID0gIngxIiAtYSAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlDUk8gJzwnIDkwYCIgPSAieDEiOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9ERVBSRUNBVEVEIgotICBmaQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nb2JqZWN0LWNhc3QtY2hlY2tzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2dvYmplY3RfY2FzdF9jaGVja3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzOyBlbmFibGVfZ29iamVjdF9jYXN0X2NoZWNrcz0kZW5hYmxldmFsCi1lbHNlCi0gIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPWF1dG8KLWZpCi0KLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzIiA9ICJ4YXV0byI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieGBleHByICRQQUNLQUdFX1ZFUlNJT05fTUlOT1IgJSAyYCIgPSAieDEiIC1hICJ4YGV4cHIgJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAnPCcgOTBgIiA9ICJ4MSI7IHRoZW4KLSAgICAgIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPXllcwotICAgIGVsc2UKLSAgICAgIGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzPW5vCi0gICAgZmkKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9nb2JqZWN0X2Nhc3RfY2hlY2tzIiA9ICJ4bm8iOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9DQVNUX0NIRUNLUyIKLSAgZmkKLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2xpYi1hc3NlcnRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2dsaWJfYXNzZXJ0cytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2dsaWJfYXNzZXJ0czsgZW5hYmxlX2dsaWJfYXNzZXJ0aW9ucz0kZW5hYmxldmFsCi1lbHNlCi0gIGVuYWJsZV9nbGliX2Fzc2VydGlvbnM9eWVzCi1maQotCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfZ2xpYl9hc3NlcnRpb25zIiA9ICJ4bm8iOyB0aGVuCi0gICAgR0xJQl9FWFRSQV9DRkxBR1M9IiRHTElCX0VYVFJBX0NGTEFHUyAtREdfRElTQUJMRV9BU1NFUlQiCi0gIGZpCi0KLSAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnbGliLWdlbm1hcnNoYWwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdsaWItZ2VubWFyc2hhbC4uLiAiID4mNjsgfQotICBpZiB0ZXN0ICJ4JEdMSUJfR0VOTUFSU0hBTCIgIT0gIngiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTElCX0dFTk1BUlNIQUwgKGZyb20gZW52aXJvbm1lbnQpIiA+JjUKLSRhc19lY2hvICIkR0xJQl9HRU5NQVJTSEFMIChmcm9tIGVudmlyb25tZW50KSIgPiY2OyB9Ci0gIGVsc2UKLSAgICBHTElCX0dFTk1BUlNIQUw9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9Z2xpYl9nZW5tYXJzaGFsIGdsaWItMi4wYAotICAgIGlmICRHTElCX0dFTk1BUlNIQUwgLS12ZXJzaW9uIDI+L2Rldi9udWxsID4vZGV2L251bGw7IHRoZW4KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkR0xJQl9HRU5NQVJTSEFMIChmcm9tIHBrZy1jb25maWcgcGF0aCkiID4mNQotJGFzX2VjaG8gIiRHTElCX0dFTk1BUlNIQUwgKGZyb20gcGtnLWNvbmZpZyBwYXRoKSIgPiY2OyB9Ci0gICAgZWxzZQotICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnbGliLWdlbm1hcnNoYWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdsaWItZ2VubWFyc2hhbDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfR0xJQl9HRU5NQVJTSEFMKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkR0xJQl9HRU5NQVJTSEFMIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0dMSUJfR0VOTUFSU0hBTD0iJEdMSUJfR0VOTUFSU0hBTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfR0xJQl9HRU5NQVJTSEFMPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX0dMSUJfR0VOTUFSU0hBTCIgJiYgYWNfY3ZfcGF0aF9HTElCX0dFTk1BUlNIQUw9ImdsaWItZ2VubWFyc2hhbCIKLSAgOzsKLWVzYWMKLWZpCi1HTElCX0dFTk1BUlNIQUw9JGFjX2N2X3BhdGhfR0xJQl9HRU5NQVJTSEFMCi1pZiB0ZXN0IC1uICIkR0xJQl9HRU5NQVJTSEFMIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdMSUJfR0VOTUFSU0hBTCIgPiY1Ci0kYXNfZWNobyAiJEdMSUJfR0VOTUFSU0hBTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdMSUJfR0VOTUFSU0hBTCIgPiY1Ci0kYXNfZWNobyAiJEdMSUJfR0VOTUFSU0hBTCIgPiY2OyB9Ci0gICAgZmkKLSAgZmkKLSAgaWYgISAkR0xJQl9HRU5NQVJTSEFMIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCA+L2Rldi9udWxsOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkR0xJQl9HRU5NQVJTSEFMIGRvZXMgbm90IHNlZW0gdG8gd29yayEiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJEdMSUJfR0VOTUFSU0hBTCBkb2VzIG5vdCBzZWVtIHRvIHdvcmshIiA+JjI7fQotICBmaQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnbGliLW1rZW51bXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdsaWItbWtlbnVtcy4uLiAiID4mNjsgfQotICBpZiB0ZXN0ICJ4JEdMSUJfTUtFTlVNUyIgIT0gIngiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTElCX01LRU5VTVMgKGZyb20gZW52aXJvbm1lbnQpIiA+JjUKLSRhc19lY2hvICIkR0xJQl9NS0VOVU1TIChmcm9tIGVudmlyb25tZW50KSIgPiY2OyB9Ci0gIGVsc2UKLSAgICAgICAgR0xJQl9NS0VOVU1TPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWdsaWJfbWtlbnVtcyBnbGliLTIuMGAKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdMSUJfTUtFTlVNUyIgPiY1Ci0kYXNfZWNobyAiJEdMSUJfTUtFTlVNUyIgPiY2OyB9Ci0gIGZpCi0gIGlmICEgJEdMSUJfTUtFTlVNUyAtLXZlcnNpb24gMj4vZGV2L251bGwgPi9kZXYvbnVsbDsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJEdMSUJfTUtFTlVNUyBkb2VzIG5vdCBzZWVtIHRvIHdvcmshIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRHTElCX01LRU5VTVMgZG9lcyBub3Qgc2VlbSB0byB3b3JrISIgPiYyO30KLSAgZmkKLQotCi0KLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHSU8iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdJTy4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR0lPX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dJT19DRkxBR1M9IiRHSU9fQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2lvLTIuMCA+PSBcJEdMSUJfUkVRXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdpby0yLjAgPj0gJEdMSUJfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dJT19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJnaW8tMi4wID49ICRHTElCX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdJT19MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfR0lPX0xJQlM9IiRHSU9fTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdpby0yLjAgPj0gXCRHTElCX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJnaW8tMi4wID49ICRHTElCX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HSU9fTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJnaW8tMi4wID49ICRHTElCX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHSU9fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJnaW8tMi4wID49ICRHTElCX1JFUSJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdJT19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImdpby0yLjAgPj0gJEdMSUJfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR0lPX1BLR19FUlJPUlMiID4mNQotCi0JYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzIChnaW8tMi4wID49ICRHTElCX1JFUSkgd2VyZSBub3QgbWV0OgotCi0kR0lPX1BLR19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdJT19DRkxBR1MKLWFuZCBHSU9fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCi1TZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KLSIgIiRMSU5FTk8iIDUKLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKLWlzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKLXBhdGggdG8gcGtnLWNvbmZpZy4KLQotQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBHSU9fQ0ZMQUdTCi1hbmQgR0lPX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgotU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCi0KLVRvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWVsc2UKLQlHSU9fQ0ZMQUdTPSRwa2dfY3ZfR0lPX0NGTEFHUwotCUdJT19MSUJTPSRwa2dfY3ZfR0lPX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQk6Ci1maQotICBpZiB0ZXN0ICJ4JEhBVkVfR0lPIiA9ICJ4bm8iOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlRoaXMgcGFja2FnZSByZXF1aXJlcyBHSU8gPj0gJEdMSUJfUkVRIHRvIGNvbXBpbGUuIiAiJExJTkVOTyIgNQotICBmaQotCi0gIEdJT19NT0RVTEVfRElSPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1naW9tb2R1bGVkaXIgZ2lvLTIuMGAiCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR0lPX01PRFVMRV9ESVIgIiRHSU9fTU9EVUxFX0RJUiIKLV9BQ0VPRgotCi0gIEdJT19MSUJESVI9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWxpYmRpciBnaW8tMi4wYCIKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHSU9fTElCRElSICIkR0lPX0xJQkRJUiIKLV9BQ0VPRgotCi0gIEdJT19QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnaW8tMi4wYCIKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHSU9fUFJFRklYICIkR0lPX1BSRUZJWCIKLV9BQ0VPRgotCi0KLQotCi0KLQotCi0KLSAgT1JDX1JFUT0wLjQuMTcKLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3JjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29yYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX29yYzsgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgIGF1dG8pIGVuYWJsZV9vcmM9YXV0byA7OwotICAgIHllcykgZW5hYmxlX29yYz15ZXMgOzsKLSAgICBubykgIGVuYWJsZV9vcmM9bm8gOzsKLSAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtb3JjIiAiJExJTkVOTyIgNSA7OwotICBlc2FjCi0KLWVsc2UKLSAgZW5hYmxlX29yYz1hdXRvCi1maQotCi0gIGlmIHRlc3QgIngkZW5hYmxlX29yYyIgIT0gInhubyIgOyB0aGVuCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE9SQyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgT1JDLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRPUkNfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfT1JDX0NGTEFHUz0iJE9SQ19DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJvcmMtMC40ID49IFwkT1JDX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJvcmMtMC40ID49ICRPUkNfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X09SQ19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJvcmMtMC40ID49ICRPUkNfUkVRIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkT1JDX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9PUkNfTElCUz0iJE9SQ19MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwib3JjLTAuNCA+PSBcJE9SQ19SRVFcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAib3JjLTAuNCA+PSAkT1JDX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9PUkNfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJvcmMtMC40ID49ICRPUkNfUkVRIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIE9SQ19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIm9yYy0wLjQgPj0gJE9SQ19SRVEiYAotICAgICAgICBlbHNlCi0JICAgICAgICBPUkNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJvcmMtMC40ID49ICRPUkNfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkT1JDX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLSAgICAgIGlmIHRlc3QgIngkZW5hYmxlX29yYyIgPSAieHllcyIgOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICItLWVuYWJsZS1vcmMgc3BlY2lmaWVkLCBidXQgT3JjID49ICRPUkNfUkVRIG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKLSAgICAgIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIERJU0FCTEVfT1JDIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICBIQVZFX09SQz1ubwotICAgICAgSEFWRV9PUkNDPW5vCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgaWYgdGVzdCAieCRlbmFibGVfb3JjIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIi0tZW5hYmxlLW9yYyBzcGVjaWZpZWQsIGJ1dCBPcmMgPj0gJE9SQ19SRVEgbm90IGZvdW5kIiAiJExJTkVOTyIgNQotICAgICAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgRElTQUJMRV9PUkMgMSIgPj5jb25mZGVmcy5oCi0KLSAgICAgIEhBVkVfT1JDPW5vCi0gICAgICBIQVZFX09SQ0M9bm8KLQotZWxzZQotCU9SQ19DRkxBR1M9JHBrZ19jdl9PUkNfQ0ZMQUdTCi0JT1JDX0xJQlM9JHBrZ19jdl9PUkNfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfT1JDIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICBIQVZFX09SQz15ZXMKLSAgICAgIGlmIHRlc3QgIngkT1JDQyIgPSAieCIgOyB0aGVuCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVzYWJsZSBvcmNjIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB1c2FibGUgb3JjYy4uLiAiID4mNjsgfQotICAgICAgICBPUkNDPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPW9yY2Mgb3JjLTAuNGAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICRPUkNDIC0tdmVyc2lvbiAxPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIDoKLQotZWxzZQotICBPUkNDPWB3aGljaCBvcmNjYAotZmkKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPUkNDIiA+JjUKLSRhc19lY2hvICIkT1JDQyIgPiY2OyB9Ci0gICAgICBmaQotCi0gICAgICBPUkNDX0ZMQUdTPSItLWNvbXBhdCAkT1JDX1JFUSIKLQotICAgICAgaWYgdGVzdCAieCRPUkNDIiA9ICJ4IjsgdGhlbiA6Ci0gIEhBVkVfT1JDQz1ubwotZWxzZQotICBIQVZFX09SQ0M9eWVzCi1maQotCi1maQotICBlbHNlCi0KLSRhc19lY2hvICIjZGVmaW5lIERJU0FCTEVfT1JDIDEiID4+Y29uZmRlZnMuaAotCi0gICAgSEFWRV9PUkM9bm8KLSAgICBIQVZFX09SQ0M9bm8KLSAgZmkKLSAgIGlmIHRlc3QgIngkSEFWRV9PUkMiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfT1JDX1RSVUU9Ci0gIEhBVkVfT1JDX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX09SQ19UUlVFPScjJwotICBIQVZFX09SQ19GQUxTRT0KLWZpCi0KLSAgIGlmIHRlc3QgIngkSEFWRV9PUkNDIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX09SQ0NfVFJVRT0KLSAgSEFWRV9PUkNDX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX09SQ0NfVFJVRT0nIycKLSAgSEFWRV9PUkNDX0ZBTFNFPQotZmkKLQotCi0KLQotCi0KLSAgbW9kdWxlPWdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OCi0gIG1pbnZlcj0kR1NUX1JFUQotICBuYW1lPSJHU3RyZWFtZXIiCi0gIHJlcXVpcmVkPXllcwotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHU1QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdTVC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1NUX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dTVF9DRkxBR1M9IiRHU1RfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCRtb2R1bGUgPj0gXCRtaW52ZXJcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dTVF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkbW9kdWxlID49ICRtaW52ZXIiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHU1RfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dTVF9MSUJTPSIkR1NUX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJG1vZHVsZSA+PSBcJG1pbnZlclwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR1NUX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJG1vZHVsZSA+PSAkbWludmVyIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdTVF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdTVF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJEdTVF9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0dTVD0ibm8iCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRHU1RfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR1NUX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAibm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNjt9Ci0gICAgICBmaQotCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0KLSAgICAgIEhBVkVfR1NUPSJubyIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdTVF9QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRHU1RfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlHU1RfQ0ZMQUdTPSRwa2dfY3ZfR1NUX0NGTEFHUwotCUdTVF9MSUJTPSRwa2dfY3ZfR1NUX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9HU1Q9InllcyIKLQotZmkKLQotCi0gICAgaWYgdGVzdCAteiAkR1NUX1RPT0xTX0RJUjsgdGhlbgotICAgIEdTVF9UT09MU19ESVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9dG9vbHNkaXIgZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT05gCi0gICAgaWYgdGVzdCAteiAkR1NUX1RPT0xTX0RJUjsgdGhlbgotICAgICAgYXNfZm5fZXJyb3IgJD8gIm5vIHRvb2xzIGRpciBzZXQgaW4gR1N0cmVhbWVyIHBrZy1jb25maWcgZmlsZSwgY29yZSB1cGdyYWRlIG5lZWRlZC4iICIkTElORU5PIiA1Ci0gICAgZmkKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1c2luZyBHU3RyZWFtZXIgdG9vbHMgaW4gJEdTVF9UT09MU19ESVIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgR1N0cmVhbWVyIHRvb2xzIGluICRHU1RfVE9PTFNfRElSIiA+JjY7fQotCi0KLSAgICAgICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfRElSOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLSRHU1RfQVBJX1ZFUlNJT05gCi0gICAgaWYgdGVzdCAteiAkR1NUX1BMVUdJTlNfRElSOyB0aGVuCi0gICAgICBhc19mbl9lcnJvciAkPyAibm8gcGx1Z2luc2RpciBzZXQgaW4gR1N0cmVhbWVyIHBrZy1jb25maWcgZmlsZSwgY29yZSB1cGdyYWRlIG5lZWRlZC4iICIkTElORU5PIiA1Ci0gICAgZmkKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1c2luZyBHU3RyZWFtZXIgcGx1Zy1pbnMgaW4gJEdTVF9QTFVHSU5TX0RJUiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiB1c2luZyBHU3RyZWFtZXIgcGx1Zy1pbnMgaW4gJEdTVF9QTFVHSU5TX0RJUiIgPiY2O30KLQotCi0KLQotICBtb2R1bGU9Z3N0cmVhbWVyLWJhc2UtJEdTVF9BUElfVkVSU0lPTgotICBtaW52ZXI9JEdTVF9SRVEKLSAgbmFtZT0iR1N0cmVhbWVyIEJhc2UgTGlicmFyaWVzIgotICByZXF1aXJlZD15ZXMKLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1NUX0JBU0UiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdTVF9CQVNFLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHU1RfQkFTRV9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HU1RfQkFTRV9DRkxBR1M9IiRHU1RfQkFTRV9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJG1vZHVsZSA+PSBcJG1pbnZlclwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR1NUX0JBU0VfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJG1vZHVsZSA+PSAkbWludmVyIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1NUX0JBU0VfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dTVF9CQVNFX0xJQlM9IiRHU1RfQkFTRV9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCRtb2R1bGUgPj0gXCRtaW52ZXJcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dTVF9CQVNFX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJG1vZHVsZSA+PSAkbWludmVyIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdTVF9CQVNFX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgR1NUX0JBU0VfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRHU1RfQkFTRV9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0dTVF9CQVNFPSJubyIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdTVF9CQVNFX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEdTVF9CQVNFX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAibm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNjt9Ci0gICAgICBmaQotCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0KLSAgICAgIEhBVkVfR1NUX0JBU0U9Im5vIgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkR1NUX0JBU0VfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR1NUX0JBU0VfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlHU1RfQkFTRV9DRkxBR1M9JHBrZ19jdl9HU1RfQkFTRV9DRkxBR1MKLQlHU1RfQkFTRV9MSUJTPSRwa2dfY3ZfR1NUX0JBU0VfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0gICAgICBIQVZFX0dTVF9CQVNFPSJ5ZXMiCi0KLWZpCi0KLQotCi0KLQotICBtb2R1bGU9Z3N0cmVhbWVyLWNvbnRyb2xsZXItJEdTVF9BUElfVkVSU0lPTgotICBtaW52ZXI9JEdTVF9SRVEKLSAgbmFtZT0iR1N0cmVhbWVyIENvbnRyb2xsZXIgTGlicmFyeSIKLSAgcmVxdWlyZWQ9eWVzCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdTVF9DT05UUk9MTEVSIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHU1RfQ09OVFJPTExFUi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1NUX0NPTlRST0xMRVJfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfR1NUX0NPTlRST0xMRVJfQ0ZMQUdTPSIkR1NUX0NPTlRST0xMRVJfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCRtb2R1bGUgPj0gXCRtaW52ZXJcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dTVF9DT05UUk9MTEVSX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiRtb2R1bGUgPj0gJG1pbnZlciIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdTVF9DT05UUk9MTEVSX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HU1RfQ09OVFJPTExFUl9MSUJTPSIkR1NUX0NPTlRST0xMRVJfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbW9kdWxlID49IFwkbWludmVyXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HU1RfQ09OVFJPTExFUl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiRtb2R1bGUgPj0gJG1pbnZlciIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHU1RfQ09OVFJPTExFUl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdTVF9DT05UUk9MTEVSX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR1NUX0NPTlRST0xMRVJfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9HU1RfQ09OVFJPTExFUj0ibm8iCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRHU1RfQ09OVFJPTExFUl9QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRHU1RfQ09OVFJPTExFUl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIm5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IG5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0dTVF9DT05UUk9MTEVSPSJubyIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdTVF9DT05UUk9MTEVSX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEdTVF9DT05UUk9MTEVSX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAibm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JR1NUX0NPTlRST0xMRVJfQ0ZMQUdTPSRwa2dfY3ZfR1NUX0NPTlRST0xMRVJfQ0ZMQUdTCi0JR1NUX0NPTlRST0xMRVJfTElCUz0kcGtnX2N2X0dTVF9DT05UUk9MTEVSX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9HU1RfQ09OVFJPTExFUj0ieWVzIgotCi1maQotCi0KLQotCi0KLSAgbW9kdWxlPWdzdHJlYW1lci1uZXQtJEdTVF9BUElfVkVSU0lPTgotICBtaW52ZXI9JEdTVF9SRVEKLSAgbmFtZT0iR1N0cmVhbWVyIE5ldHdvcmsgTGlicmFyeSIKLSAgcmVxdWlyZWQ9eWVzCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdTVF9ORVQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdTVF9ORVQuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdTVF9ORVRfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfR1NUX05FVF9DRkxBR1M9IiRHU1RfTkVUX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbW9kdWxlID49IFwkbWludmVyXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HU1RfTkVUX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiRtb2R1bGUgPj0gJG1pbnZlciIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdTVF9ORVRfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dTVF9ORVRfTElCUz0iJEdTVF9ORVRfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbW9kdWxlID49IFwkbWludmVyXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HU1RfTkVUX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJG1vZHVsZSA+PSAkbWludmVyIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdTVF9ORVRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiYAotICAgICAgICBlbHNlCi0JICAgICAgICBHU1RfTkVUX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR1NUX05FVF9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0dTVF9ORVQ9Im5vIgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkR1NUX05FVF9QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRHU1RfTkVUX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAibm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNjt9Ci0gICAgICBmaQotCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0KLSAgICAgIEhBVkVfR1NUX05FVD0ibm8iCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRHU1RfTkVUX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEdTVF9ORVRfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBubyAkbW9kdWxlID49ICRtaW52ZXIgKCRuYW1lKSBmb3VuZCIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlHU1RfTkVUX0NGTEFHUz0kcGtnX2N2X0dTVF9ORVRfQ0ZMQUdTCi0JR1NUX05FVF9MSUJTPSRwa2dfY3ZfR1NUX05FVF9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfR1NUX05FVD0ieWVzIgotCi1maQotCi0KLQotCi0KLSAgbW9kdWxlPWdzdHJlYW1lci1jaGVjay0kR1NUX0FQSV9WRVJTSU9OCi0gIG1pbnZlcj0kR1NUX1JFUQotICBuYW1lPSJHU3RyZWFtZXIgQ2hlY2sgdW5pdHRlc3QgTGlicmFyeSIKLSAgcmVxdWlyZWQ9bm8KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1NUX0NIRUNLIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHU1RfQ0hFQ0suLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdTVF9DSEVDS19DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HU1RfQ0hFQ0tfQ0ZMQUdTPSIkR1NUX0NIRUNLX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkbW9kdWxlID49IFwkbWludmVyXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HU1RfQ0hFQ0tfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJG1vZHVsZSA+PSAkbWludmVyIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1NUX0NIRUNLX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HU1RfQ0hFQ0tfTElCUz0iJEdTVF9DSEVDS19MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCRtb2R1bGUgPj0gXCRtaW52ZXJcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dTVF9DSEVDS19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiRtb2R1bGUgPj0gJG1pbnZlciIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHU1RfQ0hFQ0tfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiYAotICAgICAgICBlbHNlCi0JICAgICAgICBHU1RfQ0hFQ0tfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRHU1RfQ0hFQ0tfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9HU1RfQ0hFQ0s9Im5vIgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkR1NUX0NIRUNLX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEdTVF9DSEVDS19QS0dfRVJST1JTIiA+JjY7fQotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIm5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IG5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0dTVF9DSEVDSz0ibm8iCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRHU1RfQ0hFQ0tfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR1NUX0NIRUNLX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAibm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JR1NUX0NIRUNLX0NGTEFHUz0kcGtnX2N2X0dTVF9DSEVDS19DRkxBR1MKLQlHU1RfQ0hFQ0tfTElCUz0kcGtnX2N2X0dTVF9DSEVDS19MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfR1NUX0NIRUNLPSJ5ZXMiCi0KLWZpCi0KLQotCi0KLQotICBtb2R1bGU9Z3N0cmVhbWVyLXBsdWdpbnMtYmFzZS0kR1NUX0FQSV9WRVJTSU9OCi0gIG1pbnZlcj0kR1NUUEJfUkVRCi0gIG5hbWU9IkdTdHJlYW1lciBCYXNlIFBsdWdpbnMiCi0gIHJlcXVpcmVkPXllcwotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHU1RfUExVR0lOU19CQVNFIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHU1RfUExVR0lOU19CQVNFLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHU1RfUExVR0lOU19CQVNFX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTPSIkR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJG1vZHVsZSA+PSBcJG1pbnZlclwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkbW9kdWxlID49ICRtaW52ZXIiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHU1RfUExVR0lOU19CQVNFX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HU1RfUExVR0lOU19CQVNFX0xJQlM9IiRHU1RfUExVR0lOU19CQVNFX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJG1vZHVsZSA+PSBcJG1pbnZlclwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkbW9kdWxlID49ICRtaW52ZXIiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR1NUX1BMVUdJTlNfQkFTRV9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiRtb2R1bGUgPj0gJG1pbnZlciIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHU1RfUExVR0lOU19CQVNFX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJG1vZHVsZSA+PSAkbWludmVyImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgR1NUX1BMVUdJTlNfQkFTRV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiRtb2R1bGUgPj0gJG1pbnZlciJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJEdTVF9QTFVHSU5TX0JBU0VfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9HU1RfUExVR0lOU19CQVNFPSJubyIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdTVF9QTFVHSU5TX0JBU0VfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR1NUX1BMVUdJTlNfQkFTRV9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIm5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IG5vICRtb2R1bGUgPj0gJG1pbnZlciAoJG5hbWUpIGZvdW5kIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0dTVF9QTFVHSU5TX0JBU0U9Im5vIgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkR1NUX1BMVUdJTlNfQkFTRV9QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRHU1RfUExVR0lOU19CQVNFX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAibm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogbm8gJG1vZHVsZSA+PSAkbWludmVyICgkbmFtZSkgZm91bmQiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1M9JHBrZ19jdl9HU1RfUExVR0lOU19CQVNFX0NGTEFHUwotCUdTVF9QTFVHSU5TX0JBU0VfTElCUz0kcGtnX2N2X0dTVF9QTFVHSU5TX0JBU0VfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0gICAgICBIQVZFX0dTVF9QTFVHSU5TX0JBU0U9InllcyIKLQotZmkKLQotCi0KLSAgaWYgdGVzdCAieCRIQVZFX0dTVF9QTFVHSU5TX0JBU0UiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAteiAkR1NUUEJfUExVR0lOU19ESVI7IHRoZW4KLSAgICAgIEdTVFBCX1BMVUdJTlNfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXBsdWdpbnNkaXIgZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZS0kR1NUX0FQSV9WRVJTSU9OYAotICAgICAgaWYgdGVzdCAteiAkR1NUUEJfUExVR0lOU19ESVI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIm5vIHBsdWdpbnNkaXIgc2V0IGluIEdTdHJlYW1lciBCYXNlIFBsdWdpbnMgcGtnLWNvbmZpZyBmaWxlIiAiJExJTkVOTyIgNQotICAgICAgZmkKLSAgICBmaQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXNpbmcgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBpbiAkR1NUUEJfUExVR0lOU19ESVIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogdXNpbmcgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBpbiAkR1NUUEJfUExVR0lOU19ESVIiID4mNjt9Ci0gICAgR1NUX1BMVUdJTlNfQkFTRV9ESVI9IiRHU1RQQl9QTFVHSU5TX0RJUi9nc3Q6JEdTVFBCX1BMVUdJTlNfRElSL3N5czokR1NUUEJfUExVR0lOU19ESVIvZXh0IgotCi0KLSAgZmkKLQotCi1HU1RfVE9PTFNfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXRvb2xzZGlyIGdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OYAotaWYgdGVzdCAteiAkR1NUX1RPT0xTX0RJUjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAibm8gdG9vbHMgZGlyIGRlZmluZWQgaW4gR1N0cmVhbWVyIHBrZy1jb25maWcgZmlsZTsgY29yZSB1cGdyYWRlIG5lZWRlZC4iICIkTElORU5PIiA1Ci1maQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgR1N0cmVhbWVyIENvcmUgUGx1Z2lucyBpbiAkR1NUX1BMVUdJTlNfRElSIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nIEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgaW4gJEdTVF9QTFVHSU5TX0RJUiIgPiY2O30KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBpbiAkR1NUUEJfUExVR0lOU19ESVIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBpbiAkR1NUUEJfUExVR0lOU19ESVIiID4mNjt9Ci0KLSBpZiB0ZXN0ICJ4JEhBVkVfR1NUX0NIRUNLIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0dTVF9DSEVDS19UUlVFPQotICBIQVZFX0dTVF9DSEVDS19GQUxTRT0nIycKLWVsc2UKLSAgSEFWRV9HU1RfQ0hFQ0tfVFJVRT0nIycKLSAgSEFWRV9HU1RfQ0hFQ0tfRkFMU0U9Ci1maQotCi0KLUdMSUJfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjBgIgotR1NUX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OYCIKLUdTVFBCX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdzdHJlYW1lci1wbHVnaW5zLWJhc2UtJEdTVF9BUElfVkVSU0lPTmAiCi0KLQotCi0KLUhBVkVfR1RLPW5vCi1HVEtfUkVRPTMuMC4wCi1pZiB0ZXN0ICJ4JEJVSUxEX0VYQU1QTEVTIiA9ICJ4eWVzIjsgdGhlbgotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHVEsiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdUSy4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1RLX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0dUS19DRkxBR1M9IiRHVEtfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ3RrKy0zLjAgPj0gXCRHVEtfUkVRXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImd0aystMy4wID49ICRHVEtfUkVRIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dUS19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJndGsrLTMuMCA+PSAkR1RLX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdUS19MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfR1RLX0xJQlM9IiRHVEtfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImd0aystMy4wID49IFwkR1RLX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJndGsrLTMuMCA+PSAkR1RLX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HVEtfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJndGsrLTMuMCA+PSAkR1RLX1JFUSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBHVEtfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJndGsrLTMuMCA+PSAkR1RLX1JFUSJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEdUS19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImd0aystMy4wID49ICRHVEtfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR1RLX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgSEFWRV9HVEs9bm8KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQlIQVZFX0dUSz1ubwotZWxzZQotCUdUS19DRkxBR1M9JHBrZ19jdl9HVEtfQ0ZMQUdTCi0JR1RLX0xJQlM9JHBrZ19jdl9HVEtfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCUhBVkVfR1RLPXllcwotZmkKLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1RLX1gxMSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR1RLX1gxMS4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR1RLX1gxMV9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVEtfWDExX0NGTEFHUz0iJEdUS19YMTFfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ3RrKy14MTEtMy4wID49IFwkR1RLX1JFUVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJndGsrLXgxMS0zLjAgPj0gJEdUS19SRVEiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR1RLX1gxMV9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJndGsrLXgxMS0zLjAgPj0gJEdUS19SRVEiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHVEtfWDExX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVEtfWDExX0xJQlM9IiRHVEtfWDExX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJndGsrLXgxMS0zLjAgPj0gXCRHVEtfUkVRXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImd0aysteDExLTMuMCA+PSAkR1RLX1JFUSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HVEtfWDExX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiZ3RrKy14MTEtMy4wID49ICRHVEtfUkVRIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdUS19YMTFfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJndGsrLXgxMS0zLjAgPj0gJEdUS19SRVEiYAotICAgICAgICBlbHNlCi0JICAgICAgICBHVEtfWDExX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiZ3RrKy14MTEtMy4wID49ICRHVEtfUkVRImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR1RLX1gxMV9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgICAgICAgICAgIEhBVkVfR1RLX1gxMT1ubwotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCUhBVkVfR1RLX1gxMT1ubwotZWxzZQotCUdUS19YMTFfQ0ZMQUdTPSRwa2dfY3ZfR1RLX1gxMV9DRkxBR1MKLQlHVEtfWDExX0xJQlM9JHBrZ19jdl9HVEtfWDExX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQlIQVZFX0dUS19YMTE9eWVzCi1maQotCi0KLWZpCi0gaWYgdGVzdCAieCRIQVZFX0dUSyIgPSAieHllcyI7IHRoZW4KLSAgSEFWRV9HVEtfVFJVRT0KLSAgSEFWRV9HVEtfRkFMU0U9JyMnCi1lbHNlCi0gIEhBVkVfR1RLX1RSVUU9JyMnCi0gIEhBVkVfR1RLX0ZBTFNFPQotZmkKLQotIGlmIHRlc3QgIngkSEFWRV9HVEtfWDExIiA9ICJ4eWVzIjsgdGhlbgotICBIQVZFX0dUS19YMTFfVFJVRT0KLSAgSEFWRV9HVEtfWDExX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0dUS19YMTFfVFJVRT0nIycKLSAgSEFWRV9HVEtfWDExX0ZBTFNFPQotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtQnN5bWJvbGljIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX0JzeW1ib2xpYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX0JzeW1ib2xpYzsKLWVsc2UKLSAgU0FWRURfTERGTEFHUz0iJHtMREZMQUdTfSIgU0FWRURfTElCUz0iJHtMSUJTfSIKLSAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1Cc3ltYm9saWMtZnVuY3Rpb25zIGxpbmtlciBmbGFnIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAtQnN5bWJvbGljLWZ1bmN0aW9ucyBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQotICAgICAgICAgICAgICAgTERGTEFHUz0tV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMKLSAgICAgICAgICAgICAgIExJQlM9Ci0gICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIDAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX0JzeW1ib2xpYz15ZXMKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfQnN5bWJvbGljPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgICAgICAgICAgIExERkxBR1M9IiR7U0FWRURfTERGTEFHU30iIExJQlM9IiR7U0FWRURfTElCU30iCi1maQotCi0KLQotR1NUX0xJQ0VOU0U9IkxHUEwiCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgR1NUX0xJQ0VOU0UgIiRHU1RfTElDRU5TRSIKLV9BQ0VPRgotCi0KLQotCi0KLSAgRVhQX1ZBUj1QTFVHSU5ESVIKLSAgRlJPTV9WQVI9JHtsaWJkaXJ9L2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OCi0KLSAgICBwcmVmaXhfc2F2ZT0kcHJlZml4Ci0gIGV4ZWNfcHJlZml4X3NhdmU9JGV4ZWNfcHJlZml4Ci0KLSAgICBpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgcHJlZml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiCi0gIGZpCi0gICAgaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gICAgZXhlY19wcmVmaXg9JHByZWZpeAotICBmaQotCi0gIGZ1bGxfdmFyPSIkRlJPTV9WQVIiCi0gICAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBuZXdfZnVsbF92YXI9ImBldmFsIGVjaG8gJGZ1bGxfdmFyYCIKLSAgICBpZiB0ZXN0ICJ4JG5ld19mdWxsX3ZhciIgPSAieCRmdWxsX3ZhciI7IHRoZW4gYnJlYWs7IGZpCi0gICAgZnVsbF92YXI9JG5ld19mdWxsX3ZhcgotICBkb25lCi0KLSAgICBmdWxsX3Zhcj0kbmV3X2Z1bGxfdmFyCi0gIFBMVUdJTkRJUj0iJGZ1bGxfdmFyIgotCi0KLSAgICBwcmVmaXg9JHByZWZpeF9zYXZlCi0gIGV4ZWNfcHJlZml4PSRleGVjX3ByZWZpeF9zYXZlCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQTFVHSU5ESVIgIiRQTFVHSU5ESVIiCi1fQUNFT0YKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRQTFVHSU5ESVIgYXMgdGhlIHBsdWdpbiBpbnN0YWxsIGxvY2F0aW9uIiA+JjY7fQotCi0gICAgcGx1Z2luZGlyPSJcJChsaWJkaXIpL2dzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OIgotCi0KLQotCi0gIGlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngwIjsgdGhlbgotCi0gICAgICBpZiB0ZXN0ICJ4eWVzIiA9ICJ4bm8iIC1vICJ4eWVzIiA9ICJ4IjsgdGhlbgotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9YGRhdGUgLXUgIislWS0lbS0lZFQlSDolTVoiYAotICBlbGlmIHRlc3QgInh5ZXMiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBpZiAoIGVjaG8gICIke3NyY2Rpcn0vZ3N0LXBsdWdpbnMtZ29vZC5kb2FwIiAgfCBncmVwICdeMjBbMS05XVswLTldLVswLTFdWzAtOV0tWzAtM11bMC05XScgPi9kZXYvbnVsbCApIDsgdGhlbgotICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0gIiR7c3JjZGlyfS9nc3QtcGx1Z2lucy1nb29kLmRvYXAiCi0gICAgZWxzZQotICAgICAgICAgICAgWVlZWV9NTV9ERD1gc2ggIiR7c3JjZGlyfS9jb21tb24vZXh0cmFjdC1yZWxlYXNlLWRhdGUtZnJvbS1kb2FwLWZpbGUiICAkUEFDS0FHRV9WRVJTSU9OX01BSk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlOT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAgICIke3NyY2Rpcn0vZ3N0LXBsdWdpbnMtZ29vZC5kb2FwIiBgOwotICAgICAgaWYgdGVzdCAieCRZWVlZX01NX0REIiAhPSAieCI7IHRoZW4KLSAgICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0kWVlZWV9NTV9ERAotICAgICAgZWxzZQotICAgICAgICBhc19mbl9lcnJvciAkPyAiU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogY291bGQgbm90IGV4dHJhY3QKLSAgICAgICAgICAgIHJlbGVhc2UgZGF0ZSBmb3IgcmVsZWFzZSB2ZXJzaW9uICAkUEFDS0FHRV9WRVJTSU9OX01BSk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlOT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSUNSTyAgZnJvbSAgXCIke3NyY2Rpcn0vZ3N0LXBsdWdpbnMtZ29vZC5kb2FwXCIgIiAiJExJTkVOTyIgNQotICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSIiCi0gICAgICBmaQotICAgIGZpCi0gICAgZWxpZiAoIGVjaG8geWVzIHwgZ3JlcCAnXjIwWzEtOV1bMC05XS1bMC0xXVswLTldLVswLTNdWzAtOV0nID4vZGV2L251bGwgKSA7IHRoZW4KLSAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPXllcwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFNFVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU6IGludmFsaWQgZmlyc3QgYXJndW1lbnQiID4mMjt9Ci0gICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0iIgotICBmaQotCi0gIGlmIHRlc3QgIngkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPSAieCI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEludmFsaWQgcGFja2FnZSByZWxlYXNlIGRhdGUgdGltZTogJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogSW52YWxpZCBwYWNrYWdlIHJlbGVhc2UgZGF0ZSB0aW1lOiAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiYyO30KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogU2V0dGluZyBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIHRvICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFNldHRpbmcgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSB0byAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiY2O30KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgIiRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIgotX0FDRU9GCi0KLSAgZmkKLQotICBlbHNlCi0KLSAgICAgIGlmIHRlc3QgInhubyIgPSAieG5vIiAtbyAieG5vIiA9ICJ4IjsgdGhlbgotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9YGRhdGUgLXUgIislWS0lbS0lZFQlSDolTVoiYAotICBlbGlmIHRlc3QgInhubyIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIGlmICggZWNobyAgfCBncmVwICdeMjBbMS05XVswLTldLVswLTFdWzAtOV0tWzAtM11bMC05XScgPi9kZXYvbnVsbCApIDsgdGhlbgotICAgICAgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRT0KLSAgICBlbHNlCi0gICAgICAgICAgICBZWVlZX01NX0REPWBzaCAiJHtzcmNkaXJ9L2NvbW1vbi9leHRyYWN0LXJlbGVhc2UtZGF0ZS1mcm9tLWRvYXAtZmlsZSIgIGA7Ci0gICAgICBpZiB0ZXN0ICJ4JFlZWVlfTU1fREQiICE9ICJ4IjsgdGhlbgotICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSRZWVlZX01NX0RECi0gICAgICBlbHNlCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBjb3VsZCBub3QgZXh0cmFjdAotICAgICAgICAgICAgcmVsZWFzZSBkYXRlIGZvciByZWxlYXNlIHZlcnNpb24gIGZyb20gIiAiJExJTkVOTyIgNQotICAgICAgICBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FPSIiCi0gICAgICBmaQotICAgIGZpCi0gICAgZWxpZiAoIGVjaG8gbm8gfCBncmVwICdeMjBbMS05XVswLTldLVswLTFdWzAtOV0tWzAtM11bMC05XScgPi9kZXYvbnVsbCApIDsgdGhlbgotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogU0VUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRTogaW52YWxpZCBmaXJzdCBhcmd1bWVudCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBTRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FOiBpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IiA+JjI7fQotICAgIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUU9IiIKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID0gIngiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBJbnZhbGlkIHBhY2thZ2UgcmVsZWFzZSBkYXRlIHRpbWU6ICRHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEludmFsaWQgcGFja2FnZSByZWxlYXNlIGRhdGUgdGltZTogJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mMjt9Ci0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFNldHRpbmcgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSB0byAkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBTZXR0aW5nIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgdG8gJEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUiID4mNjt9Ci0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FICIkR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSIKLV9BQ0VPRgotCi0gIGZpCi0KLSAgZmkKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIHBsdWdpbnMgb3Igbm90IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIHBsdWdpbnMgb3Igbm90Li4uICIgPiY2OyB9Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljLXBsdWdpbnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3RhdGljX3BsdWdpbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWNfcGx1Z2luczsgY2FzZSAkZW5hYmxldmFsIGluICMoCi0gIG5vKSA6Ci0gICAgIDs7ICMoCi0gIHllcykgOgotICAgICA7OyAjKAotICAqKSA6Ci0gICAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSBcIiRlbmFibGV2YWxcIiBmb3IgLS1lbmFibGUtc3RhdGljLXBsdWdpbnMiICIkTElORU5PIiA1IDs7Ci1lc2FjCi1lbHNlCi0gIGVuYWJsZV9zdGF0aWNfcGx1Z2lucz1ubwotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljX3BsdWdpbnMiID4mNQotJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljX3BsdWdpbnMiID4mNjsgfQotaWYgdGVzdCAieCRlbmFibGVfc3RhdGljX3BsdWdpbnMiID0geHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQyAxIiA+PmNvbmZkZWZzLmgKLQotICBHU1RfUExVR0lOX0xJQlRPT0xGTEFHUz0iIgotZWxzZQotICBHU1RfUExVR0lOX0xJQlRPT0xGTEFHUz0iLS10YWc9ZGlzYWJsZS1zdGF0aWMiCi1maQotCi0gaWYgdGVzdCAieCRlbmFibGVfc3RhdGljX3BsdWdpbnMiID0gInh5ZXMiOyB0aGVuCi0gIEdTVF9QTFVHSU5fQlVJTERfU1RBVElDX1RSVUU9Ci0gIEdTVF9QTFVHSU5fQlVJTERfU1RBVElDX0ZBTFNFPScjJwotZWxzZQotICBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19UUlVFPScjJwotICBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19GQUxTRT0KLWZpCi0KLQotIyBzZXQgYnkgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFUyBhYm92ZQotTk9fV0FSTklOR1M9IiIKLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBHU3RyZWFtZXIgZGVidWdnaW5nIHN5c3RlbSBpcyBlbmFibGVkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEdTdHJlYW1lciBkZWJ1Z2dpbmcgc3lzdGVtIGlzIGVuYWJsZWQuLi4gIiA+JjY7IH0KLSAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRHU1RfQ0ZMQUdTICRDRkxBR1MiCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0gICAgICAjaW5jbHVkZSA8Z3N0L2dzdGNvbmZpZy5oPgotICAgICAgI2lmZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAgICAgI2Vycm9yICJkZWJ1Z2dpbmcgZGlzYWJsZWQsIG1ha2UgY29tcGlsZXIgZmFpbCIKLSAgICAgICNlbmRpZgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gICBkZWJ1Z19zeXN0ZW1fZW5hYmxlZD15ZXMKLWVsc2UKLSAgZGVidWdfc3lzdGVtX2VuYWJsZWQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0gIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZGVidWdfc3lzdGVtX2VuYWJsZWQiID4mNQotJGFzX2VjaG8gIiRkZWJ1Z19zeXN0ZW1fZW5hYmxlZCIgPiY2OyB9Ci0KLSAgaWYgdGVzdCAieCRkZWJ1Z19zeXN0ZW1fZW5hYmxlZCIgPSAieHllcyIgOyB0aGVuCi0gICAgTk9fV0FSTklOR1M9IiIKLSAgICB0cnVlCi0gIGVsc2UKLSAgICBOT19XQVJOSU5HUz0iLVduby11bnVzZWQiCi0gICAgdHJ1ZQotICBmaQotCi0KLQotCi0KLQotICBXQVJOSU5HX0NGTEFHUz0iIgotICBFUlJPUl9DRkxBR1M9IiIKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XYWxsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV2FsbC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVdhbGwiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2FsbCIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XdmxhIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAtV3ZsYS4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVd2bGEiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3ZsYSIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XcG9pbnRlci1hcml0aCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdwb2ludGVyLWFyaXRoLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAtV3BvaW50ZXItYXJpdGgiCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAtV3BvaW50ZXItYXJpdGgiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0KLSAgICBpZiB0ZXN0ICJ4JEZBVEFMX1dBUk5JTkdTIiAhPSAieG5vIgotICB0aGVuCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvci4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKLQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICBFUlJPUl9DRkxBR1M9IiRFUlJPUl9DRkxBR1MgLVdlcnJvciIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLSAgZmkKLQotICBpZiB0ZXN0ICJ4Ci0gICAgICAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzCi0gICAgICAtV3dyaXRlLXN0cmluZ3MgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV2FnZ3JlZ2F0ZS1yZXR1cm4KLSAgICAgIC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVdhZGRyZXNzIC1Xbm8tbXVsdGljaGFyCi0gICAgICAtV25lc3RlZC1leHRlcm5zICROT19XQVJOSU5HUyIgIT0gIngiCi0gIHRoZW4KLSAgICBVTlNVUFBPUlRFRD0iIgotICAgIGxpc3Q9IgotICAgICAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscwotICAgICAgLVd3cml0ZS1zdHJpbmdzIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdhZ2dyZWdhdGUtcmV0dXJuCi0gICAgICAtV2luaXQtc2VsZiAtV21pc3NpbmctaW5jbHVkZS1kaXJzIC1XYWRkcmVzcyAtV25vLW11bHRpY2hhcgotICAgICAgLVduZXN0ZWQtZXh0ZXJucyAkTk9fV0FSTklOR1MiCi0gICAgZm9yIGVhY2ggaW4gJGxpc3QKLSAgICBkbwotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNvbXBpbGVyIHVuZGVyc3RhbmRzICRlYWNoIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjb21waWxlciB1bmRlcnN0YW5kcyAkZWFjaC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgJGVhY2giCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DRkxBR1M9IiRXQVJOSU5HX0NGTEFHUyAkZWFjaCIKLSAgICB0cnVlCi0gIGVsc2UKLSAgICBVTlNVUFBPUlRFRD0iJFVOU1VQUE9SVEVEICRlYWNoIgotICAgIHRydWUKLSAgZmkKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLSAgICBkb25lCi0gICAgaWYgdGVzdCAiWCRVTlNVUFBPUlRFRCIgIT0gWCA7IHRoZW4KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiB1bnN1cHBvcnRlZCBjb21waWxlciBmbGFnczogJFVOU1VQUE9SVEVEIiA+JjY7fQotICAgIGZpCi0gIGZpCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogc2V0IFdBUk5JTkdfQ0ZMQUdTIHRvICRXQVJOSU5HX0NGTEFHUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBzZXQgV0FSTklOR19DRkxBR1MgdG8gJFdBUk5JTkdfQ0ZMQUdTIiA+JjY7fQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHNldCBFUlJPUl9DRkxBR1MgdG8gJEVSUk9SX0NGTEFHUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBzZXQgRVJST1JfQ0ZMQUdTIHRvICRFUlJPUl9DRkxBR1MiID4mNjt9Ci0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICBDUFBGTEFHUz0iJENQUEZMQUdTICIKLQotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0KLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQotJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KLQotCi0KLQotCi0gIEVSUk9SX0NYWEZMQUdTPSIiCi0gIFdBUk5JTkdfQ1hYRkxBR1M9IiIKLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdhbGwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGMrKyBjb21waWxlciB1bmRlcnN0YW5kcyAtV2FsbC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtV2FsbCIKLQotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgV0FSTklOR19DWFhGTEFHUz0iJFdBUk5JTkdfQ1hYRkxBR1MgLVdhbGwiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0KLSAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotICAgIGlmIHRlc3QgIngkRkFUQUxfV0FSTklOR1MiICE9ICJ4bm8iCi0gIHRoZW4KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgYysrIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XZXJyb3IiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGMrKyBjb21waWxlciB1bmRlcnN0YW5kcyAtV2Vycm9yLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICBDUFBGTEFHUz0iJENQUEZMQUdTIC1XZXJyb3IiCi0KLSAgYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIEVSUk9SX0NYWEZMQUdTPSIkRVJST1JfQ1hYRkxBR1MgLVdlcnJvciIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQotJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KLQotCi0gICAgaWYgdGVzdCAieCRFUlJPUl9DWFhGTEFHUyIgIT0gIngiCi0gICAgdGhlbgotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVduby1ub24tdmlydHVhbC1kdG9yIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVduby1ub24tdmlydHVhbC1kdG9yLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICBDUFBGTEFHUz0iJENQUEZMQUdTIC1Xbm8tbm9uLXZpcnR1YWwtZHRvciIKLQotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtV25vLW5vbi12aXJ0dWFsLWR0b3IiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0KLSAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotCQkJCWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImdsaWItMi4wIDwgMi4xOS44XCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdsaWItMi4wIDwgMi4xOS44IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLWZuby1zdHJpY3QtYWxpYXNpbmciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGMrKyBjb21waWxlciB1bmRlcnN0YW5kcyAtZm5vLXN0cmljdC1hbGlhc2luZy4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKLQotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgRVJST1JfQ1hYRkxBR1M9IiRFUlJPUl9DWFhGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQotJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KLQotCi1maQotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAieAotICAgICAgICAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XcmVkdW5kYW50LWRlY2xzCi0gICAgICAgIC1Xd3JpdGUtc3RyaW5ncwotICAgICAgICAtV2luaXQtc2VsZiAtV21pc3NpbmctaW5jbHVkZS1kaXJzIC1XYWRkcmVzcyAtV25vLW11bHRpY2hhcgotICAgICAgICAkTk9fV0FSTklOR1MiICE9ICJ4IgotICB0aGVuCi0gICAgVU5TVVBQT1JURUQ9IiIKLSAgICBsaXN0PSIKLSAgICAgICAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV3JlZHVuZGFudC1kZWNscwotICAgICAgICAtV3dyaXRlLXN0cmluZ3MKLSAgICAgICAgLVdpbml0LXNlbGYgLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAtV2FkZHJlc3MgLVduby1tdWx0aWNoYXIKLSAgICAgICAgJE5PX1dBUk5JTkdTIgotICAgIGZvciBlYWNoIGluICRsaXN0Ci0gICAgZG8KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgYysrIGNvbXBpbGVyIHVuZGVyc3RhbmRzICRlYWNoIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgJGVhY2guLi4gIiA+JjY7IH0KLQotICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gIENQUEZMQUdTPSIkQ1BQRkxBR1MgJGVhY2giCi0KLSAgYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIFdBUk5JTkdfQ1hYRkxBR1M9IiRXQVJOSU5HX0NYWEZMQUdTICRlYWNoIgotICAgIHRydWUKLSAgZWxzZQotICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giCi0gICAgdHJ1ZQotICBmaQotCi0gIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0gICAgZG9uZQotICAgIGlmIHRlc3QgIlgkVU5TVVBQT1JURUQiICE9IFggOyB0aGVuCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURUQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRCIgPiY2O30KLSAgICBmaQotICBmaQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHNldCBXQVJOSU5HX0NYWEZMQUdTIHRvICRXQVJOSU5HX0NYWEZMQUdTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IHNldCBXQVJOSU5HX0NYWEZMQUdTIHRvICRXQVJOSU5HX0NYWEZMQUdTIiA+JjY7fQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHNldCBFUlJPUl9DWFhGTEFHUyB0byAkRVJST1JfQ1hYRkxBR1MiID4mNQotJGFzX2VjaG8gIiRhc19tZTogc2V0IEVSUk9SX0NYWEZMQUdTIHRvICRFUlJPUl9DWFhGTEFHUyIgPiY2O30KLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgT2JqZWN0aXZlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBPYmplY3RpdmUgQyBjb21waWxlciB1bmRlcnN0YW5kcyAuLi4gIiA+JjY7IH0KLQotICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gIENQUEZMQUdTPSIkQ1BQRkxBR1MgIgotCi0gIGFjX2V4dD1tCi1hY19jcHA9JyRPQkpDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJE9CSkMgLWMgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckT0JKQyAtbyBjb25mdGVzdCRhY19leGVleHQgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X29iamNfY29tcGlsZXJfZ251Ci0KLQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX29iamNfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0KLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQotJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KLQotCi0KLQotCi0gIEVSUk9SX09CSkNGTEFHUz0iIgotICBXQVJOSU5HX09CSkNGTEFHUz0iIgotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIE9iamVjdGl2ZSBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1XYWxsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBPYmplY3RpdmUgQyBjb21waWxlciB1bmRlcnN0YW5kcyAtV2FsbC4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtV2FsbCIKLQotICBhY19leHQ9bQotYWNfY3BwPSckT0JKQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRPQkpDIC1jICRPQkpDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJE9CSkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRPQkpDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9vYmpjX2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9vYmpjX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIFdBUk5JTkdfT0JKQ0ZMQUdTPSIkV0FSTklOR19PQkpDRkxBR1MgLVdhbGwiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0KLSAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotICAgIGlmIHRlc3QgIngkRkFUQUxfV0FSTklOR1MiICE9ICJ4bm8iCi0gIHRoZW4KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgT2JqZWN0aXZlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgT2JqZWN0aXZlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVdlcnJvci4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtV2Vycm9yIgotCi0gIGFjX2V4dD1tCi1hY19jcHA9JyRPQkpDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJE9CSkMgLWMgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckT0JKQyAtbyBjb25mdGVzdCRhY19leGVleHQgJE9CSkNGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X29iamNfY29tcGlsZXJfZ251Ci0KLQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX29iamNfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0gICAgRVJST1JfT0JKQ0ZMQUdTPSIkRVJST1JfT0JKQ0ZMQUdTIC1XZXJyb3IiCi0gICAgdHJ1ZQotICBlbHNlCi0KLSAgICB0cnVlCi0gIGZpCi0KLSAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmbGFnX29rIiA+JjUKLSRhc19lY2hvICIkZmxhZ19vayIgPiY2OyB9Ci0KLQotICAgIGlmIHRlc3QgIngkRVJST1JfT0JKQ0ZMQUdTIiAhPSAieCIKLSAgICB0aGVuCi0JCQkJaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2xpYi0yLjAgPCAyLjE5LjhcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAgPCAyLjE5LjgiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIE9iamVjdGl2ZSBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBPYmplY3RpdmUgQyBjb21waWxlciB1bmRlcnN0YW5kcyAtZm5vLXN0cmljdC1hbGlhc2luZy4uLiAiID4mNjsgfQotCi0gIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKLQotICBhY19leHQ9bQotYWNfY3BwPSckT0JKQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRPQkpDIC1jICRPQkpDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJE9CSkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRPQkpDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9vYmpjX2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9vYmpjX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGZsYWdfb2s9eWVzCi1lbHNlCi0gIGZsYWdfb2s9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotCi0gIGlmIHRlc3QgIlgkZmxhZ19vayIgPSBYeWVzIDsgdGhlbgotICAgIEVSUk9SX09CSkNGTEFHUz0iJEVSUk9SX09CSkNGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKLSAgICB0cnVlCi0gIGVsc2UKLQotICAgIHRydWUKLSAgZmkKLQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZsYWdfb2siID4mNQotJGFzX2VjaG8gIiRmbGFnX29rIiA+JjY7IH0KLQotCi1maQotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAieAotICAgICAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscwotICAgICAgLVd3cml0ZS1zdHJpbmdzIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24KLSAgICAgIC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVduby1tdWx0aWNoYXIKLSAgICAgIC1XbmVzdGVkLWV4dGVybnMgJE5PX1dBUk5JTkdTIiAhPSAieCIKLSAgdGhlbgotICAgIFVOU1VQUE9SVEVEPSIiCi0gICAgbGlzdD0iCi0gICAgICAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzCi0gICAgICAtV3dyaXRlLXN0cmluZ3MgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgotICAgICAgLVdpbml0LXNlbGYgLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAtV25vLW11bHRpY2hhcgotICAgICAgLVduZXN0ZWQtZXh0ZXJucyAkTk9fV0FSTklOR1MiCi0gICAgZm9yIGVhY2ggaW4gJGxpc3QKLSAgICBkbwotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBPYmplY3RpdmUgQyBjb21waWxlciB1bmRlcnN0YW5kcyAkZWFjaCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0byBzZWUgaWYgT2JqZWN0aXZlIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgJGVhY2guLi4gIiA+JjY7IH0KLQotICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gIENQUEZMQUdTPSIkQ1BQRkxBR1MgJGVhY2giCi0KLSAgYWNfZXh0PW0KLWFjX2NwcD0nJE9CSkNQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckT0JKQyAtYyAkT0JKQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRPQkpDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkT0JKQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3Zfb2JqY19jb21waWxlcl9nbnUKLQotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fb2JqY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBmbGFnX29rPXllcwotZWxzZQotICBmbGFnX29rPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLQotICBpZiB0ZXN0ICJYJGZsYWdfb2siID0gWHllcyA7IHRoZW4KLSAgICBXQVJOSU5HX09CSkNGTEFHUz0iJFdBUk5JTkdfT0JKQ0ZMQUdTICRlYWNoIgotICAgIHRydWUKLSAgZWxzZQotICAgIFVOU1VQUE9SVEVEPSIkVU5TVVBQT1JURUQgJGVhY2giCi0gICAgdHJ1ZQotICBmaQotCi0gIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0gICAgZG9uZQotICAgIGlmIHRlc3QgIlgkVU5TVVBQT1JURUQiICE9IFggOyB0aGVuCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVuc3VwcG9ydGVkIGNvbXBpbGVyIGZsYWdzOiAkVU5TVVBQT1JURUQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogdW5zdXBwb3J0ZWQgY29tcGlsZXIgZmxhZ3M6ICRVTlNVUFBPUlRFRCIgPiY2O30KLSAgICBmaQotICBmaQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHNldCBXQVJOSU5HX09CSkNGTEFHUyB0byAkV0FSTklOR19PQkpDRkxBR1MiID4mNQotJGFzX2VjaG8gIiRhc19tZTogc2V0IFdBUk5JTkdfT0JKQ0ZMQUdTIHRvICRXQVJOSU5HX09CSkNGTEFHUyIgPiY2O30KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBzZXQgRVJST1JfT0JKQ0ZMQUdTIHRvICRFUlJPUl9PQkpDRkxBR1MiID4mNQotJGFzX2VjaG8gIiRhc19tZTogc2V0IEVSUk9SX09CSkNGTEFHUyB0byAkRVJST1JfT0JKQ0ZMQUdTIiA+JjY7fQotCi0KLQotICAgICAgaWYgdGVzdCAieCRHU1RfR0lUIiA9ICJ4eWVzIjsgdGhlbgotICAgIEdTVF9MRVZFTF9ERUZBVUxUPUdTVF9MRVZFTF9FUlJPUgotICBlbHNlCi0gICAgR1NUX0xFVkVMX0RFRkFVTFQ9R1NUX0xFVkVMX05PTkUKLSAgZmkKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBHU1RfTEVWRUxfREVGQVVMVCAkR1NUX0xFVkVMX0RFRkFVTFQKLV9BQ0VPRgotCi0KLQotCi0KLSAgICAgICAgICAgIERFRkFVTFRfQVVESU9TSU5LPSJhdXRvYXVkaW9zaW5rIgotICBERUZBVUxUX1ZJREVPU0lOSz0iYXV0b3ZpZGVvc2luayIKLSAgREVGQVVMVF9BVURJT1NSQz0iYWxzYXNyYyIKLSAgREVGQVVMVF9WSURFT1NSQz0idjRsMnNyYyIKLSAgREVGQVVMVF9WSVNVQUxJWkVSPSJnb29tIgotICBjYXNlICIkaG9zdCIgaW4KLSAgICAqLXN1bi0qIHwgKnBjLXNvbGFyaXMqICkKLSAgICAgIERFRkFVTFRfQVVESU9TUkM9InN1bmF1ZGlvc3JjIgotICAgICAgOzsKLSAgICAqLWRhcndpbiogKQotICAgICAgREVGQVVMVF9BVURJT1NSQz0ib3N4YXVkaW9zcmMiCi0gICAgICA7OwotICBlc2FjCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF9hdWRpb3Npbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX2RlZmF1bHRfYXVkaW9zaW5rOwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luayIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICAgbm8pICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc2luayIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICAgKikgICBERUZBVUxUX0FVRElPU0lOSz0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotCi0gICAgICBERUZBVUxUX0FVRElPU0lOSz0iJERFRkFVTFRfQVVESU9TSU5LIgotCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogVXNpbmcgJERFRkFVTFRfQVVESU9TSU5LIGFzIGRlZmF1bHQgYXVkaW8gc2luayIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkREVGQVVMVF9BVURJT1NJTksgYXMgZGVmYXVsdCBhdWRpbyBzaW5rIiA+JjY7fQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgREVGQVVMVF9BVURJT1NJTksgIiRERUZBVUxUX0FVRElPU0lOSyIKLV9BQ0VPRgotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LWF1ZGlvc3JjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kZWZhdWx0X2F1ZGlvc3JjK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9kZWZhdWx0X2F1ZGlvc3JjOwotICAgICAgY2FzZSAiJHt3aXRodmFsfSIgaW4KLSAgICAgICAgeWVzKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LWF1ZGlvc3JjIiAiJExJTkVOTyIgNSA7OwotICAgICAgICBubykgIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtYXVkaW9zcmMiICIkTElORU5PIiA1IDs7Ci0gICAgICAgICopICAgREVGQVVMVF9BVURJT1NSQz0iJHt3aXRodmFsfSIgOzsKLSAgICAgIGVzYWMKLQotZWxzZQotCi0gICAgICBERUZBVUxUX0FVRElPU1JDPSIkREVGQVVMVF9BVURJT1NSQyIKLQotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRERUZBVUxUX0FVRElPU1JDIGFzIGRlZmF1bHQgYXVkaW8gc291cmNlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRERUZBVUxUX0FVRElPU1JDIGFzIGRlZmF1bHQgYXVkaW8gc291cmNlIiA+JjY7fQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgREVGQVVMVF9BVURJT1NSQyAiJERFRkFVTFRfQVVESU9TUkMiCi1fQUNFT0YKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC12aWRlb3Npbmsgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RlZmF1bHRfdmlkZW9zaW5rK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9kZWZhdWx0X3ZpZGVvc2luazsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NpbmsiICIkTElORU5PIiA1IDs7Ci0gICAgICAgIG5vKSAgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NpbmsiICIkTElORU5PIiA1IDs7Ci0gICAgICAgICopICAgREVGQVVMVF9WSURFT1NJTks9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLQotICAgICAgREVGQVVMVF9WSURFT1NJTks9IiRERUZBVUxUX1ZJREVPU0lOSyIKLQotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRERUZBVUxUX1ZJREVPU0lOSyBhcyBkZWZhdWx0IHZpZGVvIHNpbmsiID4mNQotJGFzX2VjaG8gIiRhc19tZTogVXNpbmcgJERFRkFVTFRfVklERU9TSU5LIGFzIGRlZmF1bHQgdmlkZW8gc2luayIgPiY2O30KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIERFRkFVTFRfVklERU9TSU5LICIkREVGQVVMVF9WSURFT1NJTksiCi1fQUNFT0YKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGVmYXVsdC12aWRlb3NyYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF92aWRlb3NyYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfZGVmYXVsdF92aWRlb3NyYzsKLSAgICAgIGNhc2UgIiR7d2l0aHZhbH0iIGluCi0gICAgICAgIHllcykgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke3dpdGh2YWx9IGZvciAtLXdpdGgtZGVmYXVsdC12aWRlb3NyYyIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICAgbm8pICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpZGVvc3JjIiAiJExJTkVOTyIgNSA7OwotICAgICAgICAqKSAgIERFRkFVTFRfVklERU9TUkM9IiR7d2l0aHZhbH0iIDs7Ci0gICAgICBlc2FjCi0KLWVsc2UKLQotICAgICAgREVGQVVMVF9WSURFT1NSQz0iJERFRkFVTFRfVklERU9TUkMiCi0KLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBVc2luZyAkREVGQVVMVF9WSURFT1NSQyBhcyBkZWZhdWx0IHZpZGVvIHNvdXJjZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBVc2luZyAkREVGQVVMVF9WSURFT1NSQyBhcyBkZWZhdWx0IHZpZGVvIHNvdXJjZSIgPiY2O30KLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIERFRkFVTFRfVklERU9TUkMgIiRERUZBVUxUX1ZJREVPU1JDIgotX0FDRU9GCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHQtdmlzdWFsaXplciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF92aXN1YWxpemVyK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9kZWZhdWx0X3Zpc3VhbGl6ZXI7Ci0gICAgICBjYXNlICIke3dpdGh2YWx9IiBpbgotICAgICAgICB5ZXMpIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHt3aXRodmFsfSBmb3IgLS13aXRoLWRlZmF1bHQtdmlzdWFsaXplciIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICAgbm8pICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7d2l0aHZhbH0gZm9yIC0td2l0aC1kZWZhdWx0LXZpc3VhbGl6ZXIiICIkTElORU5PIiA1IDs7Ci0gICAgICAgICopICAgREVGQVVMVF9WSVNVQUxJWkVSPSIke3dpdGh2YWx9IiA7OwotICAgICAgZXNhYwotCi1lbHNlCi0KLSAgICAgIERFRkFVTFRfVklTVUFMSVpFUj0iJERFRkFVTFRfVklTVUFMSVpFUiIKLQotZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFVzaW5nICRERUZBVUxUX1ZJU1VBTElaRVIgYXMgZGVmYXVsdCB2aXN1YWxpemVyIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFVzaW5nICRERUZBVUxUX1ZJU1VBTElaRVIgYXMgZGVmYXVsdCB2aXN1YWxpemVyIiA+JjY7fQotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgREVGQVVMVF9WSVNVQUxJWkVSICIkREVGQVVMVF9WSVNVQUxJWkVSIgotX0FDRU9GCi0KLQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgYWxwaGEiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hbHBoYSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hbHBoYStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2FscGhhOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfYWxwaGE9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2FscGhhPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hbHBoYSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9hbHBoYT15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfYWxwaGEgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGFscGhhIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGFscGhhIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBhbHBoYSIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYWxwaGEgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgYWxwaGEiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGFscGhhICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gYWxwaGEgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYWxwaGEgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBhbHBoYSAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGFscGhhICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9BTFBIQV9UUlVFPQotICBVU0VfUExVR0lOX0FMUEhBX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0FMUEhBX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fQUxQSEFfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgYXBldGFnIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXBldGFnIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FwZXRhZytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2FwZXRhZzsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2FwZXRhZz15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfYXBldGFnPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hcGV0YWciICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfYXBldGFnPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9hcGV0YWcgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGFwZXRhZyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBhcGV0YWciID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIGFwZXRhZyIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYXBldGFnICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGFwZXRhZyIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYXBldGFnICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gYXBldGFnIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGFwZXRhZyAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGFwZXRhZyAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGFwZXRhZyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fQVBFVEFHX1RSVUU9Ci0gIFVTRV9QTFVHSU5fQVBFVEFHX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0FQRVRBR19UUlVFPScjJwotICBVU0VfUExVR0lOX0FQRVRBR19GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBhdWRpb2Z4IgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXVkaW9meCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hdWRpb2Z4K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfYXVkaW9meDsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2F1ZGlvZng9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2F1ZGlvZng9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWF1ZGlvZngiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfYXVkaW9meD15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfYXVkaW9meCA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gYXVkaW9meCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBhdWRpb2Z4IiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBhdWRpb2Z4IgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBhdWRpb2Z4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGF1ZGlvZngiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF1ZGlvZnggIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBhdWRpb2Z4IC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF1ZGlvZnggIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBhdWRpb2Z4IC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgYXVkaW9meCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFPQotICBVU0VfUExVR0lOX0FVRElPRlhfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFPScjJwotICBVU0VfUExVR0lOX0FVRElPRlhfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgYXVkaW9wYXJzZXJzIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXVkaW9wYXJzZXJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2F1ZGlvcGFyc2VycytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2F1ZGlvcGFyc2VyczsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2F1ZGlvcGFyc2Vycz15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfYXVkaW9wYXJzZXJzPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hdWRpb3BhcnNlcnMiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfYXVkaW9wYXJzZXJzPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9hdWRpb3BhcnNlcnMgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGF1ZGlvcGFyc2VycyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBhdWRpb3BhcnNlcnMiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIGF1ZGlvcGFyc2VycyIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYXVkaW9wYXJzZXJzICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGF1ZGlvcGFyc2VycyIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYXVkaW9wYXJzZXJzICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gYXVkaW9wYXJzZXJzIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF1ZGlvcGFyc2VycyAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGF1ZGlvcGFyc2VycyAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGF1ZGlvcGFyc2VycyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX1RSVUU9Ci0gIFVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFPScjJwotICBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBhdXBhcnNlIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYXVwYXJzZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hdXBhcnNlK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfYXVwYXJzZTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2F1cGFyc2U9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2F1cGFyc2U9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWF1cGFyc2UiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfYXVwYXJzZT15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfYXVwYXJzZSA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gYXVwYXJzZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBhdXBhcnNlIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBhdXBhcnNlIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBhdXBhcnNlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGF1cGFyc2UiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF1cGFyc2UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBhdXBhcnNlIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF1cGFyc2UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBhdXBhcnNlIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgYXVwYXJzZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fQVVQQVJTRV9UUlVFPQotICBVU0VfUExVR0lOX0FVUEFSU0VfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fQVVQQVJTRV9UUlVFPScjJwotICBVU0VfUExVR0lOX0FVUEFSU0VfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgYXV0b2RldGVjdCIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWF1dG9kZXRlY3Qgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYXV0b2RldGVjdCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2F1dG9kZXRlY3Q7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9hdXRvZGV0ZWN0PXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9hdXRvZGV0ZWN0PW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hdXRvZGV0ZWN0IiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX2F1dG9kZXRlY3Q9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2F1dG9kZXRlY3QgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGF1dG9kZXRlY3QiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gYXV0b2RldGVjdCIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgYXV0b2RldGVjdCIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgYXV0b2RldGVjdCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBhdXRvZGV0ZWN0IgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBhdXRvZGV0ZWN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gYXV0b2RldGVjdCAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBhdXRvZGV0ZWN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gYXV0b2RldGVjdCAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGF1dG9kZXRlY3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX0FVVE9ERVRFQ1RfVFJVRT0KLSAgVVNFX1BMVUdJTl9BVVRPREVURUNUX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0FVVE9ERVRFQ1RfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9BVVRPREVURUNUX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGF2aSIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWF2aSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hdmkrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9hdmk7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9hdmk9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2F2aT1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtYXZpIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX2F2aT15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfYXZpID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBhdmkiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gYXZpIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBhdmkiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF2aSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBhdmkiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGF2aSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGF2aSAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBhdmkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBhdmkgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBhdmkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX0FWSV9UUlVFPQotICBVU0VfUExVR0lOX0FWSV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9BVklfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9BVklfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgY3V0dGVyIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY3V0dGVyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2N1dHRlcitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2N1dHRlcjsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2N1dHRlcj15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfY3V0dGVyPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1jdXR0ZXIiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfY3V0dGVyPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9jdXR0ZXIgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGN1dHRlciIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBjdXR0ZXIiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIGN1dHRlciIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgY3V0dGVyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGN1dHRlciIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgY3V0dGVyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gY3V0dGVyIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGN1dHRlciAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGN1dHRlciAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGN1dHRlciAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fQ1VUVEVSX1RSVUU9Ci0gIFVTRV9QTFVHSU5fQ1VUVEVSX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0NVVFRFUl9UUlVFPScjJwotICBVU0VfUExVR0lOX0NVVFRFUl9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBkZWJ1Z3V0aWxzIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWd1dGlscyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWJ1Z3V0aWxzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZGVidWd1dGlsczsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2RlYnVndXRpbHM9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2RlYnVndXRpbHM9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWRlYnVndXRpbHMiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfZGVidWd1dGlscz15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfZGVidWd1dGlscyA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gZGVidWd1dGlscyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBkZWJ1Z3V0aWxzIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBkZWJ1Z3V0aWxzIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBkZWJ1Z3V0aWxzICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGRlYnVndXRpbHMiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGRlYnVndXRpbHMgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBkZWJ1Z3V0aWxzIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGRlYnVndXRpbHMgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBkZWJ1Z3V0aWxzIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgZGVidWd1dGlscyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fREVCVUdVVElMU19UUlVFPQotICBVU0VfUExVR0lOX0RFQlVHVVRJTFNfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fREVCVUdVVElMU19UUlVFPScjJwotICBVU0VfUExVR0lOX0RFQlVHVVRJTFNfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgZGVpbnRlcmxhY2UiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWludGVybGFjZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWludGVybGFjZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2RlaW50ZXJsYWNlOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfZGVpbnRlcmxhY2U9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2RlaW50ZXJsYWNlPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kZWludGVybGFjZSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9kZWludGVybGFjZT15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfZGVpbnRlcmxhY2UgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGRlaW50ZXJsYWNlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGRlaW50ZXJsYWNlIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBkZWludGVybGFjZSIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZGVpbnRlcmxhY2UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgZGVpbnRlcmxhY2UiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGRlaW50ZXJsYWNlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZGVpbnRlcmxhY2UgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZGVpbnRlcmxhY2UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBkZWludGVybGFjZSAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGRlaW50ZXJsYWNlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9ERUlOVEVSTEFDRV9UUlVFPQotICBVU0VfUExVR0lOX0RFSU5URVJMQUNFX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0RFSU5URVJMQUNFX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fREVJTlRFUkxBQ0VfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgZHRtZiIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWR0bWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZHRtZitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2R0bWY7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9kdG1mPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9kdG1mPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kdG1mIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX2R0bWY9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2R0bWYgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGR0bWYiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gZHRtZiIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgZHRtZiIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZHRtZiAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBkdG1mIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBkdG1mICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZHRtZiAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBkdG1mICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZHRtZiAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGR0bWYgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX0RUTUZfVFJVRT0KLSAgVVNFX1BMVUdJTl9EVE1GX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0RUTUZfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9EVE1GX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGVmZmVjdHYiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lZmZlY3R2IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VmZmVjdHYrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9lZmZlY3R2OwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfZWZmZWN0dj15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfZWZmZWN0dj1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZWZmZWN0diIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9lZmZlY3R2PXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9lZmZlY3R2ID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBlZmZlY3R2IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGVmZmVjdHYiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIGVmZmVjdHYiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGVmZmVjdHYgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgZWZmZWN0diIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZWZmZWN0diAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGVmZmVjdHYgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZWZmZWN0diAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGVmZmVjdHYgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBlZmZlY3R2ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9FRkZFQ1RWX1RSVUU9Ci0gIFVTRV9QTFVHSU5fRUZGRUNUVl9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9FRkZFQ1RWX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fRUZGRUNUVl9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBlcXVhbGl6ZXIiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lcXVhbGl6ZXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZXF1YWxpemVyK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZXF1YWxpemVyOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfZXF1YWxpemVyPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9lcXVhbGl6ZXI9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWVxdWFsaXplciIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9lcXVhbGl6ZXI9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2VxdWFsaXplciA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gZXF1YWxpemVyIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGVxdWFsaXplciIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgZXF1YWxpemVyIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBlcXVhbGl6ZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgZXF1YWxpemVyIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBlcXVhbGl6ZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBlcXVhbGl6ZXIgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZXF1YWxpemVyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZXF1YWxpemVyIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgZXF1YWxpemVyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9FUVVBTElaRVJfVFJVRT0KLSAgVVNFX1BMVUdJTl9FUVVBTElaRVJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fRVFVQUxJWkVSX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fRVFVQUxJWkVSX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGZsdiIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWZsdiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9mbHYrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9mbHY7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9mbHY9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2Zsdj1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtZmx2IiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX2Zsdj15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfZmx2ID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBmbHYiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gZmx2IiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBmbHYiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGZsdiAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBmbHYiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGZsdiAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGZsdiAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBmbHYgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBmbHYgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBmbHYgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX0ZMVl9UUlVFPQotICBVU0VfUExVR0lOX0ZMVl9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9GTFZfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9GTFZfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgZmx4IgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmx4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2ZseCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2ZseDsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2ZseD15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfZmx4PW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1mbHgiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfZmx4PXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9mbHggPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGZseCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBmbHgiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIGZseCIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZmx4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGZseCIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZmx4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZmx4IC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGZseCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGZseCAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGZseCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fRkxYX1RSVUU9Ci0gIFVTRV9QTFVHSU5fRkxYX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0ZMWF9UUlVFPScjJwotICBVU0VfUExVR0lOX0ZMWF9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBnb29tIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ29vbSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9nb29tK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZ29vbTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2dvb209eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2dvb209bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWdvb20iICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfZ29vbT15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfZ29vbSA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gZ29vbSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBnb29tIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBnb29tIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBnb29tICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGdvb20iCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGdvb20gIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBnb29tIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGdvb20gIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBnb29tIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgZ29vbSAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fR09PTV9UUlVFPQotICBVU0VfUExVR0lOX0dPT01fRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fR09PTV9UUlVFPScjJwotICBVU0VfUExVR0lOX0dPT01fRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgZ29vbTJrMSIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdvb20yazEgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZ29vbTJrMStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2dvb20yazE7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9nb29tMmsxPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9nb29tMmsxPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1nb29tMmsxIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX2dvb20yazE9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2dvb20yazEgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGdvb20yazEiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gZ29vbTJrMSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgZ29vbTJrMSIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgZ29vbTJrMSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBnb29tMmsxIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBnb29tMmsxICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZ29vbTJrMSAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBnb29tMmsxICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gZ29vbTJrMSAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGdvb20yazEgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX0dPT00ySzFfVFJVRT0KLSAgVVNFX1BMVUdJTl9HT09NMksxX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0dPT00ySzFfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9HT09NMksxX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGljeWRlbXV4IgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaWN5ZGVtdXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfaWN5ZGVtdXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9pY3lkZW11eDsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2ljeWRlbXV4PXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9pY3lkZW11eD1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtaWN5ZGVtdXgiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfaWN5ZGVtdXg9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2ljeWRlbXV4ID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpY3lkZW11eCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpY3lkZW11eCIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgaWN5ZGVtdXgiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGljeWRlbXV4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGljeWRlbXV4IgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBpY3lkZW11eCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGljeWRlbXV4IC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGljeWRlbXV4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gaWN5ZGVtdXggLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBpY3lkZW11eCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fSUNZREVNVVhfVFJVRT0KLSAgVVNFX1BMVUdJTl9JQ1lERU1VWF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9JQ1lERU1VWF9UUlVFPScjJwotICBVU0VfUExVR0lOX0lDWURFTVVYX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGlkM2RlbXV4IgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaWQzZGVtdXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfaWQzZGVtdXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9pZDNkZW11eDsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2lkM2RlbXV4PXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9pZDNkZW11eD1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtaWQzZGVtdXgiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfaWQzZGVtdXg9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2lkM2RlbXV4ID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpZDNkZW11eCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpZDNkZW11eCIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgaWQzZGVtdXgiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGlkM2RlbXV4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGlkM2RlbXV4IgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBpZDNkZW11eCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGlkM2RlbXV4IC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGlkM2RlbXV4ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gaWQzZGVtdXggLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBpZDNkZW11eCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fSUQzREVNVVhfVFJVRT0KLSAgVVNFX1BMVUdJTl9JRDNERU1VWF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9JRDNERU1VWF9UUlVFPScjJwotICBVU0VfUExVR0lOX0lEM0RFTVVYX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGltYWdlZnJlZXplIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaW1hZ2VmcmVlemUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfaW1hZ2VmcmVlemUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9pbWFnZWZyZWV6ZTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX2ltYWdlZnJlZXplPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9pbWFnZWZyZWV6ZT1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtaW1hZ2VmcmVlemUiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfaW1hZ2VmcmVlemU9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2ltYWdlZnJlZXplID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpbWFnZWZyZWV6ZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpbWFnZWZyZWV6ZSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgaW1hZ2VmcmVlemUiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGltYWdlZnJlZXplICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIGltYWdlZnJlZXplIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBpbWFnZWZyZWV6ZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGltYWdlZnJlZXplIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGltYWdlZnJlZXplICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gaW1hZ2VmcmVlemUgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBpbWFnZWZyZWV6ZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fSU1BR0VGUkVFWkVfVFJVRT0KLSAgVVNFX1BMVUdJTl9JTUFHRUZSRUVaRV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9JTUFHRUZSRUVaRV9UUlVFPScjJwotICBVU0VfUExVR0lOX0lNQUdFRlJFRVpFX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGludGVybGVhdmUiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pbnRlcmxlYXZlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2ludGVybGVhdmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9pbnRlcmxlYXZlOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfaW50ZXJsZWF2ZT15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfaW50ZXJsZWF2ZT1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtaW50ZXJsZWF2ZSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9pbnRlcmxlYXZlPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9pbnRlcmxlYXZlID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBpbnRlcmxlYXZlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGludGVybGVhdmUiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIGludGVybGVhdmUiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGludGVybGVhdmUgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgaW50ZXJsZWF2ZSIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgaW50ZXJsZWF2ZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGludGVybGVhdmUgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgaW50ZXJsZWF2ZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGludGVybGVhdmUgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBpbnRlcmxlYXZlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9JTlRFUkxFQVZFX1RSVUU9Ci0gIFVTRV9QTFVHSU5fSU5URVJMRUFWRV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9JTlRFUkxFQVZFX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fSU5URVJMRUFWRV9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBpc29tcDQiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pc29tcDQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfaXNvbXA0K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfaXNvbXA0OwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfaXNvbXA0PXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9pc29tcDQ9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWlzb21wNCIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9pc29tcDQ9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX2lzb21wNCA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gaXNvbXA0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGlzb21wNCIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgaXNvbXA0IgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBpc29tcDQgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgaXNvbXA0IgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBpc29tcDQgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBpc29tcDQgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgaXNvbXA0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gaXNvbXA0IC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgaXNvbXA0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9JU09NUDRfVFJVRT0KLSAgVVNFX1BMVUdJTl9JU09NUDRfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fSVNPTVA0X1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fSVNPTVA0X0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIGxhdyIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhdyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9sYXcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9sYXc7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9sYXc9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2xhdz1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGF3IiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX2xhdz15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfbGF3ID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBsYXciID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gbGF3IiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBsYXciCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGxhdyAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBsYXciCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGxhdyAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIGxhdyAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBsYXcgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBsYXcgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBsYXcgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX0xBV19UUlVFPQotICBVU0VfUExVR0lOX0xBV19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9MQVdfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9MQVdfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgbGV2ZWwiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sZXZlbCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9sZXZlbCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2xldmVsOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfbGV2ZWw9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX2xldmVsPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1sZXZlbCIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9sZXZlbD15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfbGV2ZWwgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGxldmVsIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIGxldmVsIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBsZXZlbCIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbGV2ZWwgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgbGV2ZWwiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIGxldmVsICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gbGV2ZWwgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbGV2ZWwgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBsZXZlbCAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIGxldmVsICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9MRVZFTF9UUlVFPQotICBVU0VfUExVR0lOX0xFVkVMX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX0xFVkVMX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fTEVWRUxfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgbWF0cm9za2EiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYXRyb3NrYSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tYXRyb3NrYStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX21hdHJvc2thOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfbWF0cm9za2E9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX21hdHJvc2thPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tYXRyb3NrYSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9tYXRyb3NrYT15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfbWF0cm9za2EgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIG1hdHJvc2thIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIG1hdHJvc2thIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBtYXRyb3NrYSIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbWF0cm9za2EgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgbWF0cm9za2EiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIG1hdHJvc2thICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gbWF0cm9za2EgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbWF0cm9za2EgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBtYXRyb3NrYSAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIG1hdHJvc2thICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFPQotICBVU0VfUExVR0lOX01BVFJPU0tBX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX01BVFJPU0tBX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fTUFUUk9TS0FfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgbW9ub3Njb3BlIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbW9ub3Njb3BlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21vbm9zY29wZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX21vbm9zY29wZTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX21vbm9zY29wZT15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfbW9ub3Njb3BlPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1tb25vc2NvcGUiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfbW9ub3Njb3BlPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9tb25vc2NvcGUgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIG1vbm9zY29wZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBtb25vc2NvcGUiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIG1vbm9zY29wZSIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbW9ub3Njb3BlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIG1vbm9zY29wZSIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbW9ub3Njb3BlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gbW9ub3Njb3BlIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIG1vbm9zY29wZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIG1vbm9zY29wZSAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIG1vbm9zY29wZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fTU9OT1NDT1BFX1RSVUU9Ci0gIFVTRV9QTFVHSU5fTU9OT1NDT1BFX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX01PTk9TQ09QRV9UUlVFPScjJwotICBVU0VfUExVR0lOX01PTk9TQ09QRV9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBtdWx0aWZpbGUiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tdWx0aWZpbGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbXVsdGlmaWxlK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfbXVsdGlmaWxlOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfbXVsdGlmaWxlPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9tdWx0aWZpbGU9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW11bHRpZmlsZSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9tdWx0aWZpbGU9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX211bHRpZmlsZSA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gbXVsdGlmaWxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIG11bHRpZmlsZSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgbXVsdGlmaWxlIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBtdWx0aWZpbGUgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgbXVsdGlmaWxlIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBtdWx0aWZpbGUgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBtdWx0aWZpbGUgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgbXVsdGlmaWxlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gbXVsdGlmaWxlIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgbXVsdGlmaWxlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9NVUxUSUZJTEVfVFJVRT0KLSAgVVNFX1BMVUdJTl9NVUxUSUZJTEVfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fTVVMVElGSUxFX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fTVVMVElGSUxFX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIG11bHRpcGFydCIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW11bHRpcGFydCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tdWx0aXBhcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9tdWx0aXBhcnQ7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9tdWx0aXBhcnQ9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX211bHRpcGFydD1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbXVsdGlwYXJ0IiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX211bHRpcGFydD15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfbXVsdGlwYXJ0ID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBtdWx0aXBhcnQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gbXVsdGlwYXJ0IiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBtdWx0aXBhcnQiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIG11bHRpcGFydCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBtdWx0aXBhcnQiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIG11bHRpcGFydCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIG11bHRpcGFydCAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBtdWx0aXBhcnQgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBtdWx0aXBhcnQgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBtdWx0aXBhcnQgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX01VTFRJUEFSVF9UUlVFPQotICBVU0VfUExVR0lOX01VTFRJUEFSVF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9NVUxUSVBBUlRfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9NVUxUSVBBUlRfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgcmVwbGF5Z2FpbiIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlcGxheWdhaW4gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcmVwbGF5Z2FpbitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3JlcGxheWdhaW47Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9yZXBsYXlnYWluPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9yZXBsYXlnYWluPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1yZXBsYXlnYWluIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX3JlcGxheWdhaW49eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX3JlcGxheWdhaW4gPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHJlcGxheWdhaW4iID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gcmVwbGF5Z2FpbiIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgcmVwbGF5Z2FpbiIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgcmVwbGF5Z2FpbiAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCByZXBsYXlnYWluIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiByZXBsYXlnYWluICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gcmVwbGF5Z2FpbiAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiByZXBsYXlnYWluICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gcmVwbGF5Z2FpbiAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIHJlcGxheWdhaW4gIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX1JFUExBWUdBSU5fVFJVRT0KLSAgVVNFX1BMVUdJTl9SRVBMQVlHQUlOX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX1JFUExBWUdBSU5fVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9SRVBMQVlHQUlOX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIHJ0cCIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJ0cCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9ydHArc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9ydHA7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9ydHA9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX3J0cD1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcnRwIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX3J0cD15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfcnRwID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBydHAiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gcnRwIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyBydHAiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHJ0cCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBydHAiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHJ0cCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHJ0cCAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBydHAgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBydHAgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBydHAgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX1JUUF9UUlVFPQotICBVU0VfUExVR0lOX1JUUF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9SVFBfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9SVFBfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgcnRwbWFuYWdlciIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJ0cG1hbmFnZXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcnRwbWFuYWdlcitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3J0cG1hbmFnZXI7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV9ydHBtYW5hZ2VyPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9ydHBtYW5hZ2VyPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1ydHBtYW5hZ2VyIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX3J0cG1hbmFnZXI9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX3J0cG1hbmFnZXIgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHJ0cG1hbmFnZXIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gcnRwbWFuYWdlciIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgcnRwbWFuYWdlciIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgcnRwbWFuYWdlciAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCBydHBtYW5hZ2VyIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBydHBtYW5hZ2VyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gcnRwbWFuYWdlciAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBydHBtYW5hZ2VyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gcnRwbWFuYWdlciAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIHJ0cG1hbmFnZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRT0KLSAgVVNFX1BMVUdJTl9SVFBNQU5BR0VSX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9SVFBNQU5BR0VSX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIHJ0c3AiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ydHNwIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3J0c3Arc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9ydHNwOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfcnRzcD15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfcnRzcD1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcnRzcCIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9ydHNwPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV9ydHNwID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBydHNwIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHJ0c3AiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIHJ0c3AiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHJ0c3AgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgcnRzcCIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgcnRzcCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHJ0c3AgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgcnRzcCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHJ0c3AgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBydHNwICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9SVFNQX1RSVUU9Ci0gIFVTRV9QTFVHSU5fUlRTUF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9SVFNQX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fUlRTUF9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCBzaGFwZXdpcGUiCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFwZXdpcGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2hhcGV3aXBlK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfc2hhcGV3aXBlOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2Vfc2hhcGV3aXBlPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9zaGFwZXdpcGU9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNoYXBld2lwZSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV9zaGFwZXdpcGU9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX3NoYXBld2lwZSA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gc2hhcGV3aXBlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHNoYXBld2lwZSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgc2hhcGV3aXBlIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBzaGFwZXdpcGUgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgc2hhcGV3aXBlIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBzaGFwZXdpcGUgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyBzaGFwZXdpcGUgLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgc2hhcGV3aXBlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gc2hhcGV3aXBlIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgc2hhcGV3aXBlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9TSEFQRVdJUEVfVFJVRT0KLSAgVVNFX1BMVUdJTl9TSEFQRVdJUEVfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fU0hBUEVXSVBFX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fU0hBUEVXSVBFX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIHNtcHRlIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc21wdGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc21wdGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zbXB0ZTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX3NtcHRlPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9zbXB0ZT1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc21wdGUiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2Vfc21wdGU9eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX3NtcHRlID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBzbXB0ZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBzbXB0ZSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgc21wdGUiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHNtcHRlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIHNtcHRlIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBzbXB0ZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHNtcHRlIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHNtcHRlICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gc21wdGUgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBzbXB0ZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fU01QVEVfVFJVRT0KLSAgVVNFX1BMVUdJTl9TTVBURV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9TTVBURV9UUlVFPScjJwotICBVU0VfUExVR0lOX1NNUFRFX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIHNwZWN0cnVtIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3BlY3RydW0gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3BlY3RydW0rc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zcGVjdHJ1bTsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX3NwZWN0cnVtPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV9zcGVjdHJ1bT1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtc3BlY3RydW0iICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2Vfc3BlY3RydW09eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX3NwZWN0cnVtID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBzcGVjdHJ1bSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiBzcGVjdHJ1bSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgc3BlY3RydW0iCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHNwZWN0cnVtICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIHNwZWN0cnVtIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBzcGVjdHJ1bSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHNwZWN0cnVtIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHNwZWN0cnVtICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gc3BlY3RydW0gLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiBzcGVjdHJ1bSAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fU1BFQ1RSVU1fVFJVRT0KLSAgVVNFX1BMVUdJTl9TUEVDVFJVTV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9TUEVDVFJVTV9UUlVFPScjJwotICBVU0VfUExVR0lOX1NQRUNUUlVNX0ZBTFNFPQotZmkKLQotCi0KLSAgR1NUX1BMVUdJTlNfQUxMPSIkR1NUX1BMVUdJTlNfQUxMIHVkcCIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXVkcCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV91ZHArc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV91ZHA7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV91ZHA9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX3VkcD1ubyA7OwotICAgICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdWRwIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX3VkcD15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfdWRwID0geG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiB1ZHAiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gdWRwIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyB1ZHAiCi0gIGZpCi0KLQotICAgIGlmIFsgLXogIiRXSVRIX1BMVUdJTlMiIF0gfHwgZWNobyAiICRXSVRIX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHVkcCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCB1ZHAiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHVkcCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHVkcCAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB1ZHAgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB1ZHAgLyAvJ2AKLSAgZmkKLSAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8IGdyZXAgLWkgIiB1ZHAgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX1VEUF9UUlVFPQotICBVU0VfUExVR0lOX1VEUF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9VRFBfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9VRFBfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgdmlkZW9ib3giCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS12aWRlb2JveCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV92aWRlb2JveCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3ZpZGVvYm94OwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfdmlkZW9ib3g9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX3ZpZGVvYm94PW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS12aWRlb2JveCIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV92aWRlb2JveD15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfdmlkZW9ib3ggPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHZpZGVvYm94IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHZpZGVvYm94IiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyB2aWRlb2JveCIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgdmlkZW9ib3ggIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgdmlkZW9ib3giCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHZpZGVvYm94ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gdmlkZW9ib3ggLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgdmlkZW9ib3ggIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB2aWRlb2JveCAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIHZpZGVvYm94ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9WSURFT0JPWF9UUlVFPQotICBVU0VfUExVR0lOX1ZJREVPQk9YX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX1ZJREVPQk9YX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fVklERU9CT1hfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgdmlkZW9jcm9wIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdmlkZW9jcm9wIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3ZpZGVvY3JvcCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3ZpZGVvY3JvcDsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX3ZpZGVvY3JvcD15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfdmlkZW9jcm9wPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS12aWRlb2Nyb3AiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfdmlkZW9jcm9wPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV92aWRlb2Nyb3AgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHZpZGVvY3JvcCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiB2aWRlb2Nyb3AiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIHZpZGVvY3JvcCIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgdmlkZW9jcm9wICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIHZpZGVvY3JvcCIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgdmlkZW9jcm9wICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gdmlkZW9jcm9wIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHZpZGVvY3JvcCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHZpZGVvY3JvcCAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIHZpZGVvY3JvcCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fVklERU9DUk9QX1RSVUU9Ci0gIFVTRV9QTFVHSU5fVklERU9DUk9QX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX1ZJREVPQ1JPUF9UUlVFPScjJwotICBVU0VfUExVR0lOX1ZJREVPQ1JPUF9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCB2aWRlb2ZpbHRlciIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXZpZGVvZmlsdGVyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3ZpZGVvZmlsdGVyK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfdmlkZW9maWx0ZXI7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV92aWRlb2ZpbHRlcj15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2VfdmlkZW9maWx0ZXI9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXZpZGVvZmlsdGVyIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX3ZpZGVvZmlsdGVyPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV92aWRlb2ZpbHRlciA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gdmlkZW9maWx0ZXIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gdmlkZW9maWx0ZXIiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIHZpZGVvZmlsdGVyIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB2aWRlb2ZpbHRlciAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCB2aWRlb2ZpbHRlciIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgdmlkZW9maWx0ZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB2aWRlb2ZpbHRlciAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB2aWRlb2ZpbHRlciAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHZpZGVvZmlsdGVyIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgdmlkZW9maWx0ZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX1ZJREVPRklMVEVSX1RSVUU9Ci0gIFVTRV9QTFVHSU5fVklERU9GSUxURVJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fVklERU9GSUxURVJfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9WSURFT0ZJTFRFUl9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCB2aWRlb21peGVyIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdmlkZW9taXhlciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV92aWRlb21peGVyK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfdmlkZW9taXhlcjsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX3ZpZGVvbWl4ZXI9eWVzIDs7Ci0gICAgICAgIG5vKSBnc3RfdXNlX3ZpZGVvbWl4ZXI9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXZpZGVvbWl4ZXIiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2VfdmlkZW9taXhlcj15ZXMKLWZpCi0KLSAgaWYgdGVzdCB4JGdzdF91c2VfdmlkZW9taXhlciA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gdmlkZW9taXhlciIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiB2aWRlb21peGVyIiA+JjY7fQotICAgIFdJVEhPVVRfUExVR0lOUz0iJFdJVEhPVVRfUExVR0lOUyB2aWRlb21peGVyIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB2aWRlb21peGVyICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIHZpZGVvbWl4ZXIiCi0gIGZpCi0gICAgaWYgZWNobyAiICRXSVRIT1VUX1BMVUdJTlMgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHZpZGVvbWl4ZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB2aWRlb21peGVyIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHZpZGVvbWl4ZXIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB2aWRlb21peGVyIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgdmlkZW9taXhlciAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fVklERU9NSVhFUl9UUlVFPQotICBVU0VfUExVR0lOX1ZJREVPTUlYRVJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fVklERU9NSVhFUl9UUlVFPScjJwotICBVU0VfUExVR0lOX1ZJREVPTUlYRVJfRkFMU0U9Ci1maQotCi0KLQotICBHU1RfUExVR0lOU19BTEw9IiRHU1RfUExVR0lOU19BTEwgd2F2ZW5jIgotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2F2ZW5jIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3dhdmVuYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3dhdmVuYzsKLSAgICAgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgICAgeWVzKSBnc3RfdXNlX3dhdmVuYz15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2Vfd2F2ZW5jPW5vIDs7Ci0gICAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS13YXZlbmMiICIkTElORU5PIiA1IDs7Ci0gICAgICAgZXNhYwotCi1lbHNlCi0gIGdzdF91c2Vfd2F2ZW5jPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV93YXZlbmMgPSB4bm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHdhdmVuYyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBkaXNhYmxpbmcgZGVwZW5kZW5jeS1sZXNzIHBsdWdpbiB3YXZlbmMiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIHdhdmVuYyIKLSAgZmkKLQotCi0gICAgaWYgWyAteiAiJFdJVEhfUExVR0lOUyIgXSB8fCBlY2hvICIgJFdJVEhfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgd2F2ZW5jICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD0iJEdTVF9QTFVHSU5TX1NFTEVDVEVEIHdhdmVuYyIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgd2F2ZW5jICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gd2F2ZW5jIC8gLydgCi0gIGZpCi0gICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIHdhdmVuYyAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHdhdmVuYyAvIC8nYAotICBmaQotICAgaWYgZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgZ3JlcCAtaSAiIHdhdmVuYyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9QTFVHSU5fV0FWRU5DX1RSVUU9Ci0gIFVTRV9QTFVHSU5fV0FWRU5DX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUExVR0lOX1dBVkVOQ19UUlVFPScjJwotICBVU0VfUExVR0lOX1dBVkVOQ19GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCB3YXZwYXJzZSIKLQotCi0KLSAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdhdnBhcnNlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3dhdnBhcnNlK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfd2F2cGFyc2U7Ci0gICAgICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICAgIHllcykgZ3N0X3VzZV93YXZwYXJzZT15ZXMgOzsKLSAgICAgICAgbm8pIGdzdF91c2Vfd2F2cGFyc2U9bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXdhdnBhcnNlIiAiJExJTkVOTyIgNSA7OwotICAgICAgIGVzYWMKLQotZWxzZQotICBnc3RfdXNlX3dhdnBhcnNlPXllcwotZmkKLQotICBpZiB0ZXN0IHgkZ3N0X3VzZV93YXZwYXJzZSA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gd2F2cGFyc2UiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4gd2F2cGFyc2UiID4mNjt9Ci0gICAgV0lUSE9VVF9QTFVHSU5TPSIkV0lUSE9VVF9QTFVHSU5TIHdhdnBhcnNlIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB3YXZwYXJzZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9IiRHU1RfUExVR0lOU19TRUxFQ1RFRCB3YXZwYXJzZSIKLSAgZmkKLSAgICBpZiBlY2hvICIgJFdJVEhPVVRfUExVR0lOUyAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgd2F2cGFyc2UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB3YXZwYXJzZSAvIC8nYAotICBmaQotICAgIGlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB3YXZwYXJzZSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfU0VMRUNURUQ9YGVjaG8gIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiB8ICRTRUQgLWUgJ3MvIHdhdnBhcnNlIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgd2F2cGFyc2UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUExVR0lOX1dBVlBBUlNFX1RSVUU9Ci0gIFVTRV9QTFVHSU5fV0FWUEFSU0VfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fV0FWUEFSU0VfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9XQVZQQVJTRV9GQUxTRT0KLWZpCi0KLQotCi0gIEdTVF9QTFVHSU5TX0FMTD0iJEdTVF9QTFVHSU5TX0FMTCB5NG0iCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS15NG0gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfeTRtK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfeTRtOwotICAgICAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgICB5ZXMpIGdzdF91c2VfeTRtPXllcyA7OwotICAgICAgICBubykgZ3N0X3VzZV95NG09bm8gOzsKLSAgICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXk0bSIgIiRMSU5FTk8iIDUgOzsKLSAgICAgICBlc2FjCi0KLWVsc2UKLSAgZ3N0X3VzZV95NG09eWVzCi1maQotCi0gIGlmIHRlc3QgeCRnc3RfdXNlX3k0bSA9IHhubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZGlzYWJsaW5nIGRlcGVuZGVuY3ktbGVzcyBwbHVnaW4geTRtIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGRpc2FibGluZyBkZXBlbmRlbmN5LWxlc3MgcGx1Z2luIHk0bSIgPiY2O30KLSAgICBXSVRIT1VUX1BMVUdJTlM9IiRXSVRIT1VUX1BMVUdJTlMgeTRtIgotICBmaQotCi0KLSAgICBpZiBbIC16ICIkV0lUSF9QTFVHSU5TIiBdIHx8IGVjaG8gIiAkV0lUSF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB5NG0gIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPSIkR1NUX1BMVUdJTlNfU0VMRUNURUQgeTRtIgotICBmaQotICAgIGlmIGVjaG8gIiAkV0lUSE9VVF9QTFVHSU5TICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiB5NG0gIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1NFTEVDVEVEPWBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCAkU0VEIC1lICdzLyB5NG0gLyAvJ2AKLSAgZmkKLSAgICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgeTRtICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8geTRtIC8gLydgCi0gIGZpCi0gICBpZiBlY2hvICIgJEdTVF9QTFVHSU5TX1NFTEVDVEVEICIgfCBncmVwIC1pICIgeTRtICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1BMVUdJTl9ZNE1fVFJVRT0KLSAgVVNFX1BMVUdJTl9ZNE1fRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QTFVHSU5fWTRNX1RSVUU9JyMnCi0gIFVTRV9QTFVHSU5fWTRNX0ZBTFNFPQotZmkKLQotCi0KLWlmIHRlc3QgIngkQlVJTERfRVhQRVJJTUVOVEFMIiAhPSAieHllcyI7IHRoZW4KLQotICBHU1RfUExVR0lOU19TRUxFQ1RFRD1gZWNobyAiICRHU1RfUExVR0lOU19TRUxFQ1RFRCAiIHwgJFNFRCAtZSAncy8gbW9ub3Njb3BlIC8gLydgCi0gICBpZiBmYWxzZTsgdGhlbgotICBVU0VfUExVR0lOX01PTk9TQ09QRV9UUlVFPQotICBVU0VfUExVR0lOX01PTk9TQ09QRV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1BMVUdJTl9NT05PU0NPUEVfVFJVRT0nIycKLSAgVVNFX1BMVUdJTl9NT05PU0NPUEVfRkFMU0U9Ci1maQotCi0KLWZpCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBDaGVja2luZyBsaWJyYXJpZXMgZm9yIHBsdWdpbnMgaW4gc3lzLyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBDaGVja2luZyBsaWJyYXJpZXMgZm9yIHBsdWdpbnMgaW4gc3lzLyIgPiY2O30KLWVjaG8KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogRGlyZWN0U291bmQgcGx1Zy1pbiAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IERpcmVjdFNvdW5kIHBsdWctaW4gKioqIiA+JjY7fQotaWYgdGVzdCAieGRpcmVjdHNvdW5kc2luayIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogZGlyZWN0c291bmRzaW5rICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBkaXJlY3Rzb3VuZHNpbmsgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfRElSRUNUU09VTkQiID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGlyZWN0c291bmQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGlyZWN0c291bmQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9kaXJlY3Rzb3VuZDsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX0RJUkVDVFNPVU5EPXllczs7Ci0gICAgICBubykgVVNFX0RJUkVDVFNPVU5EPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1kaXJlY3Rzb3VuZCIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfRElSRUNUU09VTkQ9eWVzCi1maQotCi1pZiB0ZXN0ICJ4JE5PVVNFIiA9ICJ4eWVzIjsgdGhlbgotICBVU0VfRElSRUNUU09VTkQ9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBkaXJlY3Rzb3VuZHNpbmsgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBkaXJlY3Rzb3VuZHNpbmsgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgRElSRUNUU09VTkQgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfRElSRUNUU09VTkQ9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBkaXJlY3Rzb3VuZHNpbmsgbm90IHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogZGlyZWN0c291bmRzaW5rIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfRElSRUNUU09VTkQgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0RJUkVDVFNPVU5EPW5vCi0KLSAgSEFWRV9ESVJFQ1RTT1VORD0ibm8iCi0gIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICBzYXZlX0xJQlM9IiRMSUJTIgotICBDRkxBR1M9IiRDRkxBR1MgJERJUkVDVFNPVU5EX0NGTEFHUyIKLSAgTERGTEFHUz0iJExERkxBR1MgJERJUkVDVFNPVU5EX0xERkxBR1MiCi0gIExJQlM9IiRMSUJTIC1sZHNvdW5kIC1sZHhlcnI5IC1sdXNlcjMyIC1sb2xlMzIiCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIERpcmVjdFNvdW5kIExERkxBR1MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIERpcmVjdFNvdW5kIExERkxBR1MuLi4gIiA+JjY7IH0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPGR4ZXJyOS5oPgotI2luY2x1ZGUgPGRzb3VuZC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICBEWEdldEVycm9yU3RyaW5nOSAoMCk7Ci0gIERpcmVjdFNvdW5kQ3JlYXRlKE5VTEwsIE5VTEwsIE5VTEwpOwotICBDTFNJREZyb21TdHJpbmcoTlVMTCwgTlVMTCk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIEhBVkVfRElSRUNUU09VTkQ9InllcyIKLWVsc2UKLSAgSEFWRV9ESVJFQ1RTT1VORD0ibm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRIQVZFX0RJUkVDVFNPVU5EIiA+JjUKLSRhc19lY2hvICIkSEFWRV9ESVJFQ1RTT1VORCIgPiY2OyB9Ci0gIENGTEFHUz0kc2F2ZV9DRkxBR1MKLSAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gIExJQlM9JHNhdmVfTElCUwotCi0gIGlmIHRlc3QgIngkSEFWRV9ESVJFQ1RTT1VORCIgPSAieHllcyI7ICB0aGVuCi0gICAgICAgIERJUkVDVFNPVU5EX0xJQlM9Ii1sZHNvdW5kIC1sZHhlcnI5IC1sdXNlcjMyIC1sb2xlMzIiCi0KLQotCi0gIGZpCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9ESVJFQ1RTT1VORCA9IHhubzsgdGhlbgotICAgIFVTRV9ESVJFQ1RTT1VORD1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBkaXJlY3Rzb3VuZHNpbmsiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogZGlyZWN0c291bmRzaW5rIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfRElSRUNUU09VTkQgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieGRpcmVjdHNvdW5kc2luayIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdGRpcmVjdHNvdW5kc2lua1xuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ESVJFQ1RTT1VORCAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBkaXJlY3Rzb3VuZHNpbmsiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IGRpcmVjdHNvdW5kc2luayIgPiY2O30KLSAgaWYgdGVzdCAieGRpcmVjdHNvdW5kc2luayIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0ZGlyZWN0c291bmRzaW5rXG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9ESVJFQ1RTT1VORCA9IHh5ZXM7IHRoZW4KLSAgVVNFX0RJUkVDVFNPVU5EX1RSVUU9Ci0gIFVTRV9ESVJFQ1RTT1VORF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0RJUkVDVFNPVU5EX1RSVUU9JyMnCi0gIFVTRV9ESVJFQ1RTT1VORF9GQUxTRT0KLWZpCi0KLQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBXaW4zMiBXYXZlRm9ybSAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IFdpbjMyIFdhdmVGb3JtICoqKiIgPiY2O30KLWlmIHRlc3QgInh3YXZlZm9ybXNpbmsiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IHdhdmVmb3Jtc2luayAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogd2F2ZWZvcm1zaW5rICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX1dBVkVGT1JNIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXdhdmVmb3JtIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3dhdmVmb3JtK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfd2F2ZWZvcm07ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9XQVZFRk9STT15ZXM7OwotICAgICAgbm8pIFVTRV9XQVZFRk9STT1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtd2F2ZWZvcm0iICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX1dBVkVGT1JNPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX1dBVkVGT1JNPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogd2F2ZWZvcm1zaW5rIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogd2F2ZWZvcm1zaW5rIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFdBVkVGT1JNICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1dBVkVGT1JNPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogd2F2ZWZvcm1zaW5rIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHdhdmVmb3Jtc2luayBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX1dBVkVGT1JNID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9XQVZFRk9STT1ubwotCi0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJtbXN5c3RlbS5oIiAiYWNfY3ZfaGVhZGVyX21tc3lzdGVtX2giICIjaW5jbHVkZSA8d2luZG93cy5oPgotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbW1zeXN0ZW1faCIgPSB4eWVzOyB0aGVuIDoKLSAgSEFWRV9XQVZFRk9STT0ieWVzIgotZWxzZQotICBIQVZFX1dBVkVGT1JNPSJubyIKLWZpCi0KLQotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX1dBVkVGT1JNID0geG5vOyB0aGVuCi0gICAgVVNFX1dBVkVGT1JNPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHdhdmVmb3Jtc2luayIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiB3YXZlZm9ybXNpbmsiID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9XQVZFRk9STSA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4d2F2ZWZvcm1zaW5rIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0d2F2ZWZvcm1zaW5rXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1dBVkVGT1JNIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHdhdmVmb3Jtc2luayIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogd2F2ZWZvcm1zaW5rIiA+JjY7fQotICBpZiB0ZXN0ICJ4d2F2ZWZvcm1zaW5rIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHR3YXZlZm9ybXNpbmtcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1dBVkVGT1JNID0geHllczsgdGhlbgotICBVU0VfV0FWRUZPUk1fVFJVRT0KLSAgVVNFX1dBVkVGT1JNX0ZBTFNFPScjJwotZWxzZQotICBVU0VfV0FWRUZPUk1fVFJVRT0nIycKLSAgVVNFX1dBVkVGT1JNX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IE9TUyBhdWRpbyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IE9TUyBhdWRpbyAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4b3NzYXVkaW8iICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IG9zc2F1ZGlvICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBvc3NhdWRpbyAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9PU1MiID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3NzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29zcytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX29zczsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX09TUz15ZXM7OwotICAgICAgbm8pIFVTRV9PU1M9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW9zcyIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfT1NTPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX09TUz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIG9zc2F1ZGlvIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogb3NzYXVkaW8gcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgT1NTICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX09TUz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIG9zc2F1ZGlvIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIG9zc2F1ZGlvIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfT1NTID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9PU1M9bm8KLQotIEhBVkVfT1NTPSJ5ZXMiCi0gYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9zb3VuZGNhcmQuaCIgImFjX2N2X2hlYWRlcl9zeXNfc291bmRjYXJkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zb3VuZGNhcmRfaCIgPSB4eWVzOyB0aGVuIDoKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX09TU19JTkNMVURFX0lOX1NZUyAvKiovIiA+PmNvbmZkZWZzLmgKLQotCi1lbHNlCi0KLSAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzb3VuZGNhcmQuaCIgImFjX2N2X2hlYWRlcl9zb3VuZGNhcmRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc291bmRjYXJkX2giID0geHllczsgdGhlbiA6Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PU1NfSU5DTFVERV9JTl9ST09UIC8qKi8iID4+Y29uZmRlZnMuaAotCi0KLWVsc2UKLQotICAgICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJtYWNoaW5lL3NvdW5kY2FyZC5oIiAiYWNfY3ZfaGVhZGVyX21hY2hpbmVfc291bmRjYXJkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21hY2hpbmVfc291bmRjYXJkX2giID0geHllczsgdGhlbiA6Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PU1NfSU5DTFVERV9JTl9NQUNISU5FIC8qKi8iID4+Y29uZmRlZnMuaAotCi0KLWVsc2UKLQotICAgICAgIEhBVkVfT1NTPSJubyIKLQotZmkKLQotCi0KLWZpCi0KLQotCi1maQotCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9PU1MgPSB4bm87IHRoZW4KLSAgICBVU0VfT1NTPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IG9zc2F1ZGlvIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IG9zc2F1ZGlvIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfT1NTID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhvc3NhdWRpbyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdG9zc2F1ZGlvXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX09TUyAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBvc3NhdWRpbyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogb3NzYXVkaW8iID4mNjt9Ci0gIGlmIHRlc3QgInhvc3NhdWRpbyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0b3NzYXVkaW9cbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX09TUyA9IHh5ZXM7IHRoZW4KLSAgVVNFX09TU19UUlVFPQotICBVU0VfT1NTX0ZBTFNFPScjJwotZWxzZQotICBVU0VfT1NTX1RSVUU9JyMnCi0gIFVTRV9PU1NfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogT3BlbiBTb3VuZCBTeXN0ZW0gNCAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IE9wZW4gU291bmQgU3lzdGVtIDQgKioqIiA+JjY7fQotaWYgdGVzdCAieG9zczQiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IG9zczQgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6IG9zczQgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfT1NTNCIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vc3M0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29zczQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9vc3M0OyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfT1NTND15ZXM7OwotICAgICAgbm8pIFVTRV9PU1M0PW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1vc3M0IiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9PU1M0PXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX09TUzQ9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBvc3M0IHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogb3NzNCBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBPU1M0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX09TUzQ9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBvc3M0IG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIG9zczQgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9PU1M0ID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9PU1M0PW5vCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBDaGVja2luZyBpZiB3ZSBjYW4gYnVpbGQgdGhlIE9TUzQgZWxlbWVudHMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgQ2hlY2tpbmcgaWYgd2UgY2FuIGJ1aWxkIHRoZSBPU1M0IGVsZW1lbnRzLi4uICIgPiY2OyB9Ci0gIGZvciBhY19oZWFkZXIgaW4gZmNudGwuaCBzeXMvaW9jdGwuaCBzeXMvc3RhdC5oIHN5cy90eXBlcy5oCi1kbyA6Ci0gIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotIHRlc3QgLXogIiRPU1M0X01JU1NJTkdfSEVBREVSIiAmJiBIQVZFX09TUzQ9InllcyIKLWVsc2UKLSAgT1NTNF9NSVNTSU5HX0hFQURFUj0ieWVzIjtIQVZFX09TUzQ9Im5vIgotZmkKLQotZG9uZQotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfT1NTNCA9IHhubzsgdGhlbgotICAgIFVTRV9PU1M0PW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IG9zczQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogb3NzNCIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX09TUzQgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieG9zczQiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHRvc3M0XG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX09TUzQgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogb3NzNCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogb3NzNCIgPiY2O30KLSAgaWYgdGVzdCAieG9zczQiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdG9zczRcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX09TUzQgPSB4eWVzOyB0aGVuCi0gIFVTRV9PU1M0X1RSVUU9Ci0gIFVTRV9PU1M0X0ZBTFNFPScjJwotZWxzZQotICBVU0VfT1NTNF9UUlVFPScjJwotICBVU0VfT1NTNF9GQUxTRT0KLWZpCi0KLQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBTdW4gQXVkaW8gKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBjaGVja2luZyBmZWF0dXJlOiBTdW4gQXVkaW8gKioqIiA+JjY7fQotaWYgdGVzdCAieHN1bmF1ZGlvIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiBzdW5hdWRpbyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogc3VuYXVkaW8gKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfU1VOQVVESU8iID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3VuYXVkaW8gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3VuYXVkaW8rc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zdW5hdWRpbzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX1NVTkFVRElPPXllczs7Ci0gICAgICBubykgVVNFX1NVTkFVRElPPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zdW5hdWRpbyIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfU1VOQVVESU89eWVzCi1maQotCi1pZiB0ZXN0ICJ4JE5PVVNFIiA9ICJ4eWVzIjsgdGhlbgotICBVU0VfU1VOQVVESU89Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBzdW5hdWRpbyBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHN1bmF1ZGlvIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFNVTkFVRElPICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1NVTkFVRElPPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogc3VuYXVkaW8gbm90IHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogc3VuYXVkaW8gbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9TVU5BVURJTyA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfU1VOQVVESU89bm8KLQotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL2F1ZGlvaW8uaCIgImFjX2N2X2hlYWRlcl9zeXNfYXVkaW9pb19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfYXVkaW9pb19oIiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX1NVTkFVRElPPSJ5ZXMiCi1lbHNlCi0gIEhBVkVfU1VOQVVESU89Im5vIgotZmkKLQotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfU1VOQVVESU8gPSB4bm87IHRoZW4KLSAgICBVU0VfU1VOQVVESU89bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogc3VuYXVkaW8iID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogc3VuYXVkaW8iID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9TVU5BVURJTyA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4c3VuYXVkaW8iICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHRzdW5hdWRpb1xuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVU5BVURJTyAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBzdW5hdWRpbyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogc3VuYXVkaW8iID4mNjt9Ci0gIGlmIHRlc3QgInhzdW5hdWRpbyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0c3VuYXVkaW9cbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1NVTkFVRElPID0geHllczsgdGhlbgotICBVU0VfU1VOQVVESU9fVFJVRT0KLSAgVVNFX1NVTkFVRElPX0ZBTFNFPScjJwotZWxzZQotICBVU0VfU1VOQVVESU9fVFJVRT0nIycKLSAgVVNFX1NVTkFVRElPX0ZBTFNFPQotZmkKLQotCi0KLUhBVkVfSU9TPSJubyIKLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IE9TWCBhdWRpbyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IE9TWCBhdWRpbyAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4b3N4YXVkaW8iICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IG9zeGF1ZGlvICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBvc3hhdWRpbyAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9PU1hfQVVESU8iID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb3N4X2F1ZGlvIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29zeF9hdWRpbytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX29zeF9hdWRpbzsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX09TWF9BVURJTz15ZXM7OwotICAgICAgbm8pIFVTRV9PU1hfQVVESU89bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLW9zeF9hdWRpbyIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfT1NYX0FVRElPPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX09TWF9BVURJTz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIG9zeGF1ZGlvIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogb3N4YXVkaW8gcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgT1NYX0FVRElPICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX09TWF9BVURJTz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIG9zeGF1ZGlvIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIG9zeGF1ZGlvIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfT1NYX0FVRElPID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9PU1hfQVVESU89bm8KLQotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiQ29yZUF1ZGlvL0NvcmVBdWRpby5oIiAiYWNfY3ZfaGVhZGVyX0NvcmVBdWRpb19Db3JlQXVkaW9faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfQ29yZUF1ZGlvX0NvcmVBdWRpb19oIiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX09TWF9BVURJTz0ieWVzIgotZWxzZQotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiQ29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmgiICJhY19jdl9oZWFkZXJfQ29yZUF1ZGlvX0NvcmVBdWRpb1R5cGVzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX0NvcmVBdWRpb19Db3JlQXVkaW9UeXBlc19oIiA9IHh5ZXM7IHRoZW4gOgotCi0gICAgICBIQVZFX09TWF9BVURJTz0ieWVzIgotICAgICAgSEFWRV9JT1M9InllcyIKLQotZWxzZQotCi0gICAgICBIQVZFX09TWF9BVURJTz0ibm8iCi0gICAgICBIQVZFX0lPUz0ibm8iCi0KLWZpCi0KLQotCi1maQotCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9PU1hfQVVESU8gPSB4bm87IHRoZW4KLSAgICBVU0VfT1NYX0FVRElPPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IG9zeGF1ZGlvIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IG9zeGF1ZGlvIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfT1NYX0FVRElPID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhvc3hhdWRpbyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdG9zeGF1ZGlvXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX09TWF9BVURJTyAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBvc3hhdWRpbyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogb3N4YXVkaW8iID4mNjt9Ci0gIGlmIHRlc3QgInhvc3hhdWRpbyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0b3N4YXVkaW9cbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX09TWF9BVURJTyA9IHh5ZXM7IHRoZW4KLSAgVVNFX09TWF9BVURJT19UUlVFPQotICBVU0VfT1NYX0FVRElPX0ZBTFNFPScjJwotZWxzZQotICBVU0VfT1NYX0FVRElPX1RSVUU9JyMnCi0gIFVTRV9PU1hfQVVESU9fRkFMU0U9Ci1maQotCi0KLWlmIHRlc3QgIngkSEFWRV9JT1MiID0gInh5ZXMiOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU9TIDEiID4+Y29uZmRlZnMuaAotCi1maQotIGlmIHRlc3QgIngkSEFWRV9JT1MiID0gInh5ZXMiOyB0aGVuCi0gIEhBVkVfSU9TX1RSVUU9Ci0gIEhBVkVfSU9TX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0lPU19UUlVFPScjJwotICBIQVZFX0lPU19GQUxTRT0KLWZpCi0KLQotSEFWRV9PU1hfVklERU89Im5vIgotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogT1NYIHZpZGVvICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogT1NYIHZpZGVvICoqKiIgPiY2O30KLWlmIHRlc3QgInhvc3h2aWRlb3NpbmsiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IG9zeHZpZGVvc2luayAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogb3N4dmlkZW9zaW5rICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX09TWF9WSURFTyIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vc3hfdmlkZW8gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfb3N4X3ZpZGVvK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfb3N4X3ZpZGVvOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfT1NYX1ZJREVPPXllczs7Ci0gICAgICBubykgVVNFX09TWF9WSURFTz1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtb3N4X3ZpZGVvIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9PU1hfVklERU89eWVzCi1maQotCi1pZiB0ZXN0ICJ4JE5PVVNFIiA9ICJ4eWVzIjsgdGhlbgotICBVU0VfT1NYX1ZJREVPPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogb3N4dmlkZW9zaW5rIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogb3N4dmlkZW9zaW5rIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIE9TWF9WSURFTyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9PU1hfVklERU89Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBvc3h2aWRlb3Npbmsgbm90IHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogb3N4dmlkZW9zaW5rIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfT1NYX1ZJREVPID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9PU1hfVklERU89bm8KLQotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiT3BlbkdML2dsLmgiICJhY19jdl9oZWFkZXJfT3BlbkdMX2dsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX09wZW5HTF9nbF9oIiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX09TWF9WSURFTz0ieWVzIgotZWxzZQotICBIQVZFX09TWF9WSURFTz0ibm8iCi1maQotCi0KLQotCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAgICAgICAjaW5jbHVkZSA8QXZhaWxhYmlsaXR5TWFjcm9zLmg+Ci0gICAgICAgICNpZiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwNjAKLSAgICAgICAgI2Vycm9yIFRvbyBvbGQgT1NYIHZlcnNpb24KLSAgICAgICAgI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgSEFWRV9PU1hfVklERU89InllcyIKLWVsc2UKLSAgSEFWRV9PU1hfVklERU89Im5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX09TWF9WSURFTyA9IHhubzsgdGhlbgotICAgIFVTRV9PU1hfVklERU89bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogb3N4dmlkZW9zaW5rIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IG9zeHZpZGVvc2luayIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX09TWF9WSURFTyA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4b3N4dmlkZW9zaW5rIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0b3N4dmlkZW9zaW5rXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX09TWF9WSURFTyAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBvc3h2aWRlb3NpbmsiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IG9zeHZpZGVvc2luayIgPiY2O30KLSAgaWYgdGVzdCAieG9zeHZpZGVvc2luayIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0b3N4dmlkZW9zaW5rXG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9PU1hfVklERU8gPSB4eWVzOyB0aGVuCi0gIFVTRV9PU1hfVklERU9fVFJVRT0KLSAgVVNFX09TWF9WSURFT19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX09TWF9WSURFT19UUlVFPScjJwotICBVU0VfT1NYX1ZJREVPX0ZBTFNFPQotZmkKLQotCi0KLUhBVkVfR1NUX1Y0TDI9bm8KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IFZpZGVvIDQgTGludXggMiAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IFZpZGVvIDQgTGludXggMiAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4dmlkZW80bGludXgyIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiB2aWRlbzRsaW51eDIgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6IHZpZGVvNGxpbnV4MiAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9HU1RfVjRMMiIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nc3RfdjRsMiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9nc3RfdjRsMitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2dzdF92NGwyOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfR1NUX1Y0TDI9eWVzOzsKLSAgICAgIG5vKSBVU0VfR1NUX1Y0TDI9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWdzdF92NGwyIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9HU1RfVjRMMj15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9HU1RfVjRMMj0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHZpZGVvNGxpbnV4MiBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHZpZGVvNGxpbnV4MiBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBHU1RfVjRMMiAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9HU1RfVjRMMj0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHZpZGVvNGxpbnV4MiBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiB2aWRlbzRsaW51eDIgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9HU1RfVjRMMiA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfR1NUX1Y0TDI9bm8KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIENoZWNraW5nIGZvciB2aWRlbzRsaW51eDIgaGVhZGVyIC4uLiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBDaGVja2luZyBmb3IgdmlkZW80bGludXgyIGhlYWRlciAuLi4uLi4gIiA+JjY7IH0KLSAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImxpbnV4L3ZpZGVvZGV2Mi5oIiAiYWNfY3ZfaGVhZGVyX2xpbnV4X3ZpZGVvZGV2Ml9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saW51eF92aWRlb2RldjJfaCIgPSB4eWVzOyB0aGVuIDoKLSAgIEhBVkVfR1NUX1Y0TDI9eWVzCi1lbHNlCi0KLSAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3ZpZGVvZGV2Mi5oIiAiYWNfY3ZfaGVhZGVyX3N5c192aWRlb2RldjJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3ZpZGVvZGV2Ml9oIiA9IHh5ZXM7IHRoZW4gOgotICAgSEFWRV9HU1RfVjRMMj15ZXMKLWVsc2UKLQotICAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy92aWRlb2lvLmgiICJhY19jdl9oZWFkZXJfc3lzX3ZpZGVvaW9faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3ZpZGVvaW9faCIgPSB4eWVzOyB0aGVuIDoKLSAgIEhBVkVfR1NUX1Y0TDI9eWVzCi1maQotCi0KLQotZmkKLQotCi0KLWZpCi0KLQotICBpZiB0ZXN0ICJ4JEhBVkVfVklERU9ERVYiID0gInhubyI7IHRoZW4KLSAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB2aWRlbzRsaW51eDIgd2FzIG5vdCBmb3VuZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB2aWRlbzRsaW51eDIgd2FzIG5vdCBmb3VuZCIgPiYyO30KLSAgZmkKLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9HU1RfVjRMMiA9IHhubzsgdGhlbgotICAgIFVTRV9HU1RfVjRMMj1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiB2aWRlbzRsaW51eDIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogdmlkZW80bGludXgyIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfR1NUX1Y0TDIgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieHZpZGVvNGxpbnV4MiIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdHZpZGVvNGxpbnV4MlxuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HU1RfVjRMMiAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiB2aWRlbzRsaW51eDIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHZpZGVvNGxpbnV4MiIgPiY2O30KLSAgaWYgdGVzdCAieHZpZGVvNGxpbnV4MiIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0dmlkZW80bGludXgyXG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9HU1RfVjRMMiA9IHh5ZXM7IHRoZW4KLSAgVVNFX0dTVF9WNEwyX1RSVUU9Ci0gIFVTRV9HU1RfVjRMMl9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0dTVF9WNEwyX1RSVUU9JyMnCi0gIFVTRV9HU1RfVjRMMl9GQUxTRT0KLWZpCi0KLQotCi0jIE9wdGlvbmFsIGd1ZGV2IGZvciBkZXZpY2UgcHJvYmluZwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWd1ZGV2IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9ndWRlditzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfZ3VkZXY7Ci1lbHNlCi0gIHdpdGhfZ3VkZXY9Y2hlY2sKLWZpCi0KLWlmIHRlc3QgeCRIQVZFX0dTVF9WNEwyID0geHllczsgdGhlbgotICBpZiB0ZXN0IHgkd2l0aF9ndWRldiAhPSB4bm87IHRoZW4KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR1VERVYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdVREVWLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHVURFVl9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVURFVl9DRkxBR1M9IiRHVURFVl9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgZ3VkZXYtMS4wID49IDE0NyBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIGd1ZGV2LTEuMCA+PSAxNDcgIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0dVREVWX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiBndWRldi0xLjAgPj0gMTQ3ICIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEdVREVWX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HVURFVl9MSUJTPSIkR1VERVZfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiBndWRldi0xLjAgPj0gMTQ3IFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIgZ3VkZXYtMS4wID49IDE0NyAiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR1VERVZfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIgZ3VkZXYtMS4wID49IDE0NyAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgR1VERVZfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIgZ3VkZXYtMS4wID49IDE0NyAiYAotICAgICAgICBlbHNlCi0JICAgICAgICBHVURFVl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiBndWRldi0xLjAgPj0gMTQ3ICJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJEdVREVWX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgdHJ1ZQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCXRydWUKLWVsc2UKLQlHVURFVl9DRkxBR1M9JHBrZ19jdl9HVURFVl9DRkxBR1MKLQlHVURFVl9MSUJTPSRwa2dfY3ZfR1VERVZfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dVREVWIDEiID4+Y29uZmRlZnMuaAotCi0KLWZpCi0gIGZpCi1maQotCi0KLQotCi0jIE1ha2UgbGlidjRsMiBub24tYXV0b21hZ2ljCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidjRsMiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGlidjRsMitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfbGlidjRsMjsKLWVsc2UKLSAgd2l0aF9saWJ2NGwyPWNoZWNrCi1maQotCi1pZiB0ZXN0IHgkSEFWRV9HU1RfVjRMMiA9IHh5ZXM7IHRoZW4KLSAgaWYgdGVzdCB4JHdpdGhfbGlidjRsMiAhPSB4bm87IHRoZW4KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTElCVjRMMiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgTElCVjRMMi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCVjRMMl9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9MSUJWNEwyX0NGTEFHUz0iJExJQlY0TDJfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwibGlidjRsMlwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJsaWJ2NGwyIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0xJQlY0TDJfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAibGlidjRsMiIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJExJQlY0TDJfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0xJQlY0TDJfTElCUz0iJExJQlY0TDJfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImxpYnY0bDJcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAibGlidjRsMiIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9MSUJWNEwyX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAibGlidjRsMiIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBMSUJWNEwyX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAibGlidjRsMiJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIExJQlY0TDJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJsaWJ2NGwyImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkTElCVjRMMl9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICAgICAgaGF2ZV9saWJ2NGwyPW5vCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgICAgIGhhdmVfbGlidjRsMj1ubwotCi1lbHNlCi0JTElCVjRMMl9DRkxBR1M9JHBrZ19jdl9MSUJWNEwyX0NGTEFHUwotCUxJQlY0TDJfTElCUz0kcGtnX2N2X0xJQlY0TDJfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCSBoYXZlX2xpYnY0bDI9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCVjRMMiAxIiA+PmNvbmZkZWZzLmgKLQotCi1maQotICBlbHNlCi0gICAgaGF2ZV9saWJ2NGwyPW5vCi0gIGZpCi1maQotCi1jYXNlICRob3N0IGluICMoCi0gICotKmxpbnV4KikgOgotICAgIGNhc2UgJGhvc3RfY3B1IGluICMoCi0gIGFybSopIDoKLQotICAgICAgICAgIGVuYWJsZV92NGwyX3Byb2JlPSJ5ZXMiIDs7ICMoCi0gIGFhcmNoNjQqKSA6Ci0KLSAgICAgICAgICBlbmFibGVfdjRsMl9wcm9iZT0ieWVzIiA7OyAjKAotICAqKSA6Ci0gICAgIDs7Ci1lc2FjIDs7ICMoCi0gICopIDoKLSAgICAgOzsKLWVzYWMKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS12NGwyLXByb2JlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Y0bDJfcHJvYmUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV92NGwyX3Byb2JlOwotZmkKLQotaWYgdGVzdCAieCRlbmFibGVfdjRsMl9wcm9iZSIgPSAieHllcyI7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgR1NUX1Y0TDJfRU5BQkxFX1BST0JFIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBYIGxpYnJhcmllcyBhbmQgcGx1Z2lucyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IFggbGlicmFyaWVzIGFuZCBwbHVnaW5zICoqKiIgPiY2O30KLWlmIHRlc3QgInh4aW1hZ2VzcmMiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IHhpbWFnZXNyYyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogeGltYWdlc3JjICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX1giID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUteCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV94K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfeDsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX1g9eWVzOzsKLSAgICAgIG5vKSBVU0VfWD1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUteCIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfWD15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9YPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogeGltYWdlc3JjIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogeGltYWdlc3JjIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFggIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfWD0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHhpbWFnZXNyYyBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiB4aW1hZ2VzcmMgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9YID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9YPW5vCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgWCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgWC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkWF9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9YX0NGTEFHUz0iJFhfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwieDExXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIngxMSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9YX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIngxMSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFhfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1hfTElCUz0iJFhfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIngxMVwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJ4MTEiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfWF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIngxMSIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBYX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAieDExImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgWF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIngxMSJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJFhfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgICAgICAgICAgSEFWRV9YPSJubyIKLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQkgSEFWRV9YPSJubyIKLWVsc2UKLQlYX0NGTEFHUz0kcGtnX2N2X1hfQ0ZMQUdTCi0JWF9MSUJTPSRwa2dfY3ZfWF9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICBIQVZFX1g9InllcyIKLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgWEZJWEVTIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBYRklYRVMuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFhGSVhFU19DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9YRklYRVNfQ0ZMQUdTPSIkWEZJWEVTX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiB4Zml4ZXMgXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiB4Zml4ZXMgIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1hGSVhFU19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIgeGZpeGVzICIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFhGSVhFU19MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfWEZJWEVTX0xJQlM9IiRYRklYRVNfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIiB4Zml4ZXMgXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiB4Zml4ZXMgIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1hGSVhFU19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiB4Zml4ZXMgIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFhGSVhFU19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiB4Zml4ZXMgImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgWEZJWEVTX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiIHhmaXhlcyAiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRYRklYRVNfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgICAgICAgICAgSEFWRV9YRklYRVM9Im5vIgotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCSBIQVZFX1hGSVhFUz0ibm8iCi1lbHNlCi0JWEZJWEVTX0NGTEFHUz0kcGtnX2N2X1hGSVhFU19DRkxBR1MKLQlYRklYRVNfTElCUz0kcGtnX2N2X1hGSVhFU19MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9YRklYRVMgMSIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBYREFNQUdFIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBYREFNQUdFLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRYREFNQUdFX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1hEQU1BR0VfQ0ZMQUdTPSIkWERBTUFHRV9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgeGRhbWFnZSBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIHhkYW1hZ2UgIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1hEQU1BR0VfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiIHhkYW1hZ2UgIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkWERBTUFHRV9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfWERBTUFHRV9MSUJTPSIkWERBTUFHRV9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIHhkYW1hZ2UgXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiB4ZGFtYWdlICIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9YREFNQUdFX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIHhkYW1hZ2UgIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFhEQU1BR0VfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIgeGRhbWFnZSAiYAotICAgICAgICBlbHNlCi0JICAgICAgICBYREFNQUdFX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiIHhkYW1hZ2UgImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkWERBTUFHRV9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgICAgICAgICAgICBIQVZFX1hEQU1BR0U9Im5vIgotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCSBIQVZFX1hEQU1BR0U9Im5vIgotZWxzZQotCVhEQU1BR0VfQ0ZMQUdTPSRwa2dfY3ZfWERBTUFHRV9DRkxBR1MKLQlYREFNQUdFX0xJQlM9JHBrZ19jdl9YREFNQUdFX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1hEQU1BR0UgMSIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBYRVhUIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBYRVhULi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRYRVhUX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1hFWFRfQ0ZMQUdTPSIkWEVYVF9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCIgeGV4dCBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiIHhleHQgIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1hFWFRfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiIHhleHQgIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkWEVYVF9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfWEVYVF9MSUJTPSIkWEVYVF9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiIHhleHQgXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiB4ZXh0ICIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9YRVhUX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiIHhleHQgIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFhFWFRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIgeGV4dCAiYAotICAgICAgICBlbHNlCi0JICAgICAgICBYRVhUX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiIHhleHQgImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkWEVYVF9QS0dfRVJST1JTIiA+JjUKLQotCWFzX2ZuX2Vycm9yICQ/ICJQYWNrYWdlIHJlcXVpcmVtZW50cyAoIHhleHQgKSB3ZXJlIG5vdCBtZXQ6Ci0KLSRYRVhUX1BLR19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRhcmQgcHJlZml4LgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFhFWFRfQ0ZMQUdTCi1hbmQgWEVYVF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KLVNlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgotIiAiJExJTkVOTyIgNQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAotaXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAotcGF0aCB0byBwa2ctY29uZmlnLgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFhFWFRfQ0ZMQUdTCi1hbmQgWEVYVF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KLVNlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1UbyBnZXQgcGtnLWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1lbHNlCi0JWEVYVF9DRkxBR1M9JHBrZ19jdl9YRVhUX0NGTEFHUwotCVhFWFRfTElCUz0kcGtnX2N2X1hFWFRfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAgWFNobUF0dGFjaCAgaW4gLWxYZXh0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAgWFNobUF0dGFjaCAgaW4gLWxYZXh0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9YZXh0X19YU2htQXR0YWNoXys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sWGV4dCAgJFhfTElCUyAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgIFhTaG1BdHRhY2ggICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gIFhTaG1BdHRhY2ggICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9YZXh0X19YU2htQXR0YWNoXz15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX1hleHRfX1hTaG1BdHRhY2hfPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9YZXh0X19YU2htQXR0YWNoXyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9YZXh0X19YU2htQXR0YWNoXyIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9YZXh0X19YU2htQXR0YWNoXyIgPSB4eWVzOyB0aGVuIDoKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1hTSE0gMSIgPj5jb25mZGVmcy5oCi0KLSAgICAgICAgWFNITV9MSUJTPSIkWEVYVF9MSUJTIgotICAgICAgICBYU0hNX0NGTEFHUz0iJFhFWFRfQ0ZMQUdTIgotCi1lbHNlCi0gICBIQVZFX1hFWFQ9Im5vIgotZmkKLQotCi1maQotCi0KLQotZmkKLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9YID0geG5vOyB0aGVuCi0gICAgVVNFX1g9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogeGltYWdlc3JjIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHhpbWFnZXNyYyIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX1ggPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieHhpbWFnZXNyYyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdHhpbWFnZXNyY1xuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9YIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHhpbWFnZXNyYyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogeGltYWdlc3JjIiA+JjY7fQotICBpZiB0ZXN0ICJ4eGltYWdlc3JjIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHR4aW1hZ2VzcmNcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1ggPSB4eWVzOyB0aGVuCi0gIFVTRV9YX1RSVUU9Ci0gIFVTRV9YX0ZBTFNFPScjJwotZWxzZQotICBVU0VfWF9UUlVFPScjJwotICBVU0VfWF9GQUxTRT0KLWZpCi0KLQotCi0KLWlmIHRlc3QgIngkQlVJTERfRVhURVJOQUwiID0gInh5ZXMiOyB0aGVuCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogQ2hlY2tpbmcgbGlicmFyaWVzIGZvciBwbHVnaW5zIGluIGV4dC8iID4mNQotJGFzX2VjaG8gIiRhc19tZTogQ2hlY2tpbmcgbGlicmFyaWVzIGZvciBwbHVnaW5zIGluIGV4dC8iID4mNjt9Ci1lY2hvCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IGFhbGliIEFTQ0lJIEFydCBsaWJyYXJ5ICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogYWFsaWIgQVNDSUkgQXJ0IGxpYnJhcnkgKioqIiA+JjY7fQotaWYgdGVzdCAieGFhc2luayIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogYWFzaW5rICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBhYXNpbmsgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfQUFMSUIiID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWFsaWIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYWFsaWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9hYWxpYjsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX0FBTElCPXllczs7Ci0gICAgICBubykgVVNFX0FBTElCPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1hYWxpYiIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfQUFMSUI9eWVzCi1maQotCi1pZiB0ZXN0ICJ4JE5PVVNFIiA9ICJ4eWVzIjsgdGhlbgotICBVU0VfQUFMSUI9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBhYXNpbmsgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBhYXNpbmsgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgQUFMSUIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfQUFMSUI9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBhYXNpbmsgbm90IHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogYWFzaW5rIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfQUFMSUIgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0FBTElCPW5vCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hYWxpYi1wcmVmaXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FhbGliX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfYWFsaWJfcHJlZml4OyBhYWxpYl9wcmVmaXg9IiR3aXRodmFsIgotZWxzZQotICBhYWxpYl9wcmVmaXg9IiIKLWZpCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFhbGliLWV4ZWMtcHJlZml4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hYWxpYl9leGVjX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfYWFsaWJfZXhlY19wcmVmaXg7IGFhbGliX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIKLWVsc2UKLSAgYWFsaWJfZXhlY19wcmVmaXg9IiIKLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFhbGlidGVzdCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9hYWxpYnRlc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9hYWxpYnRlc3Q7Ci1lbHNlCi0gIGVuYWJsZV9hYWxpYnRlc3Q9eWVzCi1maQotCi0KLSAgaWYgdGVzdCB4JGFhbGliX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCi0gICAgIGFhbGliX2FyZ3M9IiRhYWxpYl9hcmdzIC0tZXhlYy1wcmVmaXg9JGFhbGliX2V4ZWNfcHJlZml4IgotICAgICBpZiB0ZXN0IHgke0FBTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCi0gICAgICAgIEFBTElCX0NPTkZJRz0kYWFsaWJfZXhlY19wcmVmaXgvYmluL2FhbGliLWNvbmZpZwotICAgICBmaQotICBmaQotICBpZiB0ZXN0IHgkYWFsaWJfcHJlZml4ICE9IHggOyB0aGVuCi0gICAgIGFhbGliX2FyZ3M9IiRhYWxpYl9hcmdzIC0tcHJlZml4PSRhYWxpYl9wcmVmaXgiCi0gICAgIGlmIHRlc3QgeCR7QUFMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLSAgICAgICAgQUFMSUJfQ09ORklHPSRhYWxpYl9wcmVmaXgvYmluL2FhbGliLWNvbmZpZwotICAgICBmaQotICBmaQotCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYWFsaWItY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBhYWxpYi1jb25maWc7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX0FBTElCX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJEFBTElCX0NPTkZJRyBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9BQUxJQl9DT05GSUc9IiRBQUxJQl9DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0FBTElCX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9BQUxJQl9DT05GSUciICYmIGFjX2N2X3BhdGhfQUFMSUJfQ09ORklHPSJubyIKLSAgOzsKLWVzYWMKLWZpCi1BQUxJQl9DT05GSUc9JGFjX2N2X3BhdGhfQUFMSUJfQ09ORklHCi1pZiB0ZXN0IC1uICIkQUFMSUJfQ09ORklHIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFBTElCX0NPTkZJRyIgPiY1Ci0kYXNfZWNobyAiJEFBTElCX0NPTkZJRyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIG1pbl9hYWxpYl92ZXJzaW9uPTAuMTEuMAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBQUxJQiAtIHZlcnNpb24gPj0gJG1pbl9hYWxpYl92ZXJzaW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBBQUxJQiAtIHZlcnNpb24gPj0gJG1pbl9hYWxpYl92ZXJzaW9uLi4uICIgPiY2OyB9Ci0gIG5vX2FhbGliPSIiCi0gIGlmIHRlc3QgIiRBQUxJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KLSAgICBub19hYWxpYj15ZXMKLSAgZWxzZQotICAgIEFBTElCX0NGTEFHUz1gJEFBTElCX0NPTkZJRyAkYWFsaWJjb25mX2FyZ3MgLS1jZmxhZ3NgCi0gICAgQUFMSUJfTElCUz1gJEFBTElCX0NPTkZJRyAkYWFsaWJjb25mX2FyZ3MgLS1saWJzYAotCi0gICAgYWFsaWJfbWFqb3JfdmVyc2lvbj1gJEFBTElCX0NPTkZJRyAkYWFsaWJfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFswLTldKlwpLlwoWzAtOV0qXCkuXChbMC05XSpcKS9cMS8nYAotICAgIGFhbGliX21pbm9yX3ZlcnNpb249YCRBQUxJQl9DT05GSUcgJGFhbGliX2FyZ3MgLS12ZXJzaW9uIHwgXAotICAgICAgICAgICBzZWQgJ3MvXChbMC05XSpcKS5cKFswLTldKlwpLlwoWzAtOV0qXCkvXDIvJ2AKLSAgICBhYWxpYl9taWNyb192ZXJzaW9uPWAkQUFMSUJfQ09ORklHICRhYWxpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFswLTldKlwpLlwoWzAtOV0qXCkuXChbMC05XSpcKS9cMy8nYAotICAgIGlmIHRlc3QgIngkZW5hYmxlX2FhbGlidGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgJEFBTElCX0NGTEFHUyIKLSAgICAgIExJQlM9IiRMSUJTICRBQUxJQl9MSUJTIgotICAgICAgcm0gLWYgY29uZi5hYWxpYnRlc3QKLSAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImFhbGliLmgiCi0KLWNoYXIqCi1teV9zdHJkdXAgKGNoYXIgKnN0cikKLXsKLSAgY2hhciAqbmV3X3N0cjsKLQotICBpZiAoc3RyKQotICAgIHsKLSAgICAgIG5ld19zdHIgPSAoY2hhciAqKW1hbGxvYyAoKHN0cmxlbiAoc3RyKSArIDEpICogc2l6ZW9mKGNoYXIpKTsKLSAgICAgIHN0cmNweSAobmV3X3N0ciwgc3RyKTsKLSAgICB9Ci0gIGVsc2UKLSAgICBuZXdfc3RyID0gTlVMTDsKLQotICByZXR1cm4gbmV3X3N0cjsKLX0KLQotaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOwotICBjaGFyICp0bXBfdmVyc2lvbjsKLQotICAvKiBUaGlzIGhhbmdzIG9uIHNvbWUgc3lzdGVtcyAoPykKLSAgc3lzdGVtICgidG91Y2ggY29uZi5hYWxpYnRlc3QiKTsKLSAgKi8KLSAgeyBGSUxFICpmcCA9IGZvcGVuKCJjb25mLmFhbGlidGVzdCIsICJhIik7IGlmICggZnAgKSBmY2xvc2UoZnApOyB9Ci0KLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCi0gIHRtcF92ZXJzaW9uID0gbXlfc3RyZHVwKCIkbWluX2FhbGliX3ZlcnNpb24iKTsKLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgewotICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2FhbGliX3ZlcnNpb24iKTsKLSAgICAgZXhpdCgxKTsKLSAgIH0KLQotICAgaWYgKCgkYWFsaWJfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAotICAgICAgKCgkYWFsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRhYWxpYl9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAotICAgICAgKCgkYWFsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRhYWxpYl9taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoJGFhbGliX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKLSAgICB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBwcmludGYoIlxuKioqICdhYWxpYi1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IHRoZSBtaW5pbXVtIHZlcnNpb25cbiIsICRhYWxpYl9tYWpvcl92ZXJzaW9uLCAkYWFsaWJfbWlub3JfdmVyc2lvbiwgJGFhbGliX21pY3JvX3ZlcnNpb24pOwotICAgICAgcHJpbnRmKCIqKiogb2YgQUFMSUIgcmVxdWlyZWQgaXMgJWQuJWQuJWQuIElmIGFhbGliLWNvbmZpZyBpcyBjb3JyZWN0LCB0aGVuIGl0IGlzXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgICAgIHByaW50ZigiKioqIGJlc3QgdG8gdXBncmFkZSB0byB0aGUgcmVxdWlyZWQgdmVyc2lvbi5cbiIpOwotICAgICAgcHJpbnRmKCIqKiogSWYgYWFsaWItY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBQUxJQl9DT05GSUdcbiIpOwotICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBhYWxpYi1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGVcbiIpOwotICAgICAgcHJpbnRmKCIqKiogY29uZmlnLmNhY2hlIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBub19hYWxpYj15ZXMKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAieCRub19hYWxpYiIgPSB4IDsgdGhlbgotICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotICAgICBIQVZFX0FBTElCPXllcwotICBlbHNlCi0gICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICBpZiB0ZXN0ICIkQUFMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgICAgZWNobyAiKioqIFRoZSBhYWxpYi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBBQUxJQiBjb3VsZCBub3QgYmUgZm91bmQiCi0gICAgICAgZWNobyAiKioqIElmIEFBTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIEFBTElCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCi0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBhYWxpYi1jb25maWcuIgotICAgICBlbHNlCi0gICAgICAgaWYgdGVzdCAtZiBjb25mLmFhbGlidGVzdCA7IHRoZW4KLSAgICAgICAgOgotICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBBQUxJQiB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKLSAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJEFBTElCX0NGTEFHUyIKLSAgICAgICAgICBMSUJTPSIkTElCUyAkQUFMSUJfTElCUyIKLSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgIkFBTElCLmgiCi0KLWludAotbWFpbiAoKQotewotIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gICBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCi0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBBQUxJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKLSAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBBQUxJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgQUFMSUIsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgotICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgotICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCi0gICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgotCSAgZWNobyAiKioqIgotICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiCi1lbHNlCi0gICBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgotICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBBQUxJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgotICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIEFBTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgotICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBhYWxpYi1jb25maWcgc2NyaXB0OiAkQUFMSUJfQ09ORklHIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgICAgICBmaQotICAgICBmaQotICAgICBBQUxJQl9DRkxBR1M9IiIKLSAgICAgQUFMSUJfTElCUz0iIgotICAgICBIQVZFX0FBTElCPW5vCi0gIGZpCi0KLQotICBybSAtZiBjb25mLmFhbGlidGVzdAotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfQUFMSUIgPSB4bm87IHRoZW4KLSAgICBVU0VfQUFMSUI9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogYWFzaW5rIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IGFhc2luayIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX0FBTElCID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhhYXNpbmsiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHRhYXNpbmtcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUFMSUIgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogYWFzaW5rIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBhYXNpbmsiID4mNjt9Ci0gIGlmIHRlc3QgInhhYXNpbmsiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdGFhc2lua1xuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfQUFMSUIgPSB4eWVzOyB0aGVuCi0gIFVTRV9BQUxJQl9UUlVFPQotICBVU0VfQUFMSUJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9BQUxJQl9UUlVFPScjJwotICBVU0VfQUFMSUJfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogQ2Fpcm8gZ3JhcGhpY3MgcmVuZGVyaW5nIGFuZCBnb2JqZWN0IGJpbmRpbmdzICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogQ2Fpcm8gZ3JhcGhpY3MgcmVuZGVyaW5nIGFuZCBnb2JqZWN0IGJpbmRpbmdzICoqKiIgPiY2O30KLWlmIHRlc3QgInhjYWlybyIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogY2Fpcm8gKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6IGNhaXJvICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX0NBSVJPIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNhaXJvIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2NhaXJvK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfY2Fpcm87ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9DQUlSTz15ZXM7OwotICAgICAgbm8pIFVTRV9DQUlSTz1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtY2Fpcm8iICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX0NBSVJPPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0NBSVJPPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogY2Fpcm8gcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBjYWlybyBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBDQUlSTyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9DQUlSTz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIGNhaXJvIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGNhaXJvIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfQ0FJUk8gPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0NBSVJPPW5vCi0KLQotICB3aGljaD0iY2Fpcm8gPj0gMS4xMC4wIGNhaXJvLWdvYmplY3QgPj0gMS4xMC4wIgotICAgIHJlcXVpcmVkPSJubyIKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDQUlSTyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQ0FJUk8uLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJENBSVJPX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0NBSVJPX0NGTEFHUz0iJENBSVJPX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0NBSVJPX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJENBSVJPX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9DQUlST19MSUJTPSIkQ0FJUk9fTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0NBSVJPX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIENBSVJPX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgQ0FJUk9fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRDQUlST19QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0NBSVJPPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkQ0FJUk9fUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkQ0FJUk9fUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkQ0FJUk9fUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgSEFWRV9DQUlSTz0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJENBSVJPX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJENBSVJPX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJENBSVJPX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JQ0FJUk9fQ0ZMQUdTPSRwa2dfY3ZfQ0FJUk9fQ0ZMQUdTCi0JQ0FJUk9fTElCUz0kcGtnX2N2X0NBSVJPX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9DQUlSTz0ieWVzIgotCi1maQotCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9DQUlSTyA9IHhubzsgdGhlbgotICAgIFVTRV9DQUlSTz1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBjYWlybyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBjYWlybyIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX0NBSVJPID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhjYWlybyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdGNhaXJvXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0NBSVJPIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IGNhaXJvIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBjYWlybyIgPiY2O30KLSAgaWYgdGVzdCAieGNhaXJvIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRjYWlyb1xuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfQ0FJUk8gPSB4eWVzOyB0aGVuCi0gIFVTRV9DQUlST19UUlVFPQotICBVU0VfQ0FJUk9fRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9DQUlST19UUlVFPScjJwotICBVU0VfQ0FJUk9fRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogRkxBQyBsb3NzbGVzcyBhdWRpbyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IEZMQUMgbG9zc2xlc3MgYXVkaW8gKioqIiA+JjY7fQotaWYgdGVzdCAieGZsYWMiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IGZsYWMgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6IGZsYWMgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfRkxBQyIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mbGFjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2ZsYWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9mbGFjOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfRkxBQz15ZXM7OwotICAgICAgbm8pIFVTRV9GTEFDPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1mbGFjIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9GTEFDPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0ZMQUM9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBmbGFjIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogZmxhYyBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBGTEFDICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX0ZMQUM9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBmbGFjIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGZsYWMgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9GTEFDID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9GTEFDPW5vCi0KLQotICB3aGljaD0iZmxhYyA+PSAxLjEuNCIKLSAgICByZXF1aXJlZD0ibm8iCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRkxBQyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgRkxBQy4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkRkxBQ19DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9GTEFDX0NGTEFHUz0iJEZMQUNfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfRkxBQ19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRGTEFDX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9GTEFDX0xJQlM9IiRGTEFDX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9GTEFDX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEZMQUNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBGTEFDX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkRkxBQ19QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0ZMQUM9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRGTEFDX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEZMQUNfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkRkxBQ19QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0ZMQUM9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRGTEFDX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEZMQUNfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkRkxBQ19QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxzZQotCUZMQUNfQ0ZMQUdTPSRwa2dfY3ZfRkxBQ19DRkxBR1MKLQlGTEFDX0xJQlM9JHBrZ19jdl9GTEFDX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9GTEFDPSJ5ZXMiCi0KLWZpCi0KLQotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX0ZMQUMgPSB4bm87IHRoZW4KLSAgICBVU0VfRkxBQz1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBmbGFjIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IGZsYWMiID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9GTEFDID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhmbGFjIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0ZmxhY1xuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GTEFDIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IGZsYWMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IGZsYWMiID4mNjt9Ci0gIGlmIHRlc3QgInhmbGFjIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRmbGFjXG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9GTEFDID0geHllczsgdGhlbgotICBVU0VfRkxBQ19UUlVFPQotICBVU0VfRkxBQ19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0ZMQUNfVFJVRT0nIycKLSAgVVNFX0ZMQUNfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogR0RLIHBpeGJ1ZiAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IEdESyBwaXhidWYgKioqIiA+JjY7fQotaWYgdGVzdCAieGdka3BpeGJ1ZiIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogZ2RrcGl4YnVmICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBnZGtwaXhidWYgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfR0RLX1BJWEJVRiIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1nZGtfcGl4YnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2dka19waXhidWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9nZGtfcGl4YnVmOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfR0RLX1BJWEJVRj15ZXM7OwotICAgICAgbm8pIFVTRV9HREtfUElYQlVGPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1nZGtfcGl4YnVmIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9HREtfUElYQlVGPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0dES19QSVhCVUY9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBnZGtwaXhidWYgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBnZGtwaXhidWYgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgR0RLX1BJWEJVRiAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9HREtfUElYQlVGPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogZ2RrcGl4YnVmIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGdka3BpeGJ1ZiBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX0dES19QSVhCVUYgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0dES19QSVhCVUY9bm8KLQotCi0gIHdoaWNoPSJnZGstcGl4YnVmLTIuMCA+PSAyLjguMCIKLSAgICByZXF1aXJlZD0ibm8iCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR0RLX1BJWEJVRiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgR0RLX1BJWEJVRi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkR0RLX1BJWEJVRl9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HREtfUElYQlVGX0NGTEFHUz0iJEdES19QSVhCVUZfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfR0RLX1BJWEJVRl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRHREtfUElYQlVGX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9HREtfUElYQlVGX0xJQlM9IiRHREtfUElYQlVGX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9HREtfUElYQlVGX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIEdES19QSVhCVUZfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBHREtfUElYQlVGX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkR0RLX1BJWEJVRl9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0dES19QSVhCVUY9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRHREtfUElYQlVGX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdES19QSVhCVUZfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR0RLX1BJWEJVRl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0dES19QSVhCVUY9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRHREtfUElYQlVGX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJEdES19QSVhCVUZfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkR0RLX1BJWEJVRl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxzZQotCUdES19QSVhCVUZfQ0ZMQUdTPSRwa2dfY3ZfR0RLX1BJWEJVRl9DRkxBR1MKLQlHREtfUElYQlVGX0xJQlM9JHBrZ19jdl9HREtfUElYQlVGX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9HREtfUElYQlVGPSJ5ZXMiCi0KLWZpCi0KLQotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX0dES19QSVhCVUYgPSB4bm87IHRoZW4KLSAgICBVU0VfR0RLX1BJWEJVRj1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBnZGtwaXhidWYiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogZ2RrcGl4YnVmIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfR0RLX1BJWEJVRiA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4Z2RrcGl4YnVmIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0Z2RrcGl4YnVmXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dES19QSVhCVUYgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogZ2RrcGl4YnVmIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBnZGtwaXhidWYiID4mNjt9Ci0gIGlmIHRlc3QgInhnZGtwaXhidWYiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdGdka3BpeGJ1ZlxuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfR0RLX1BJWEJVRiA9IHh5ZXM7IHRoZW4KLSAgVVNFX0dES19QSVhCVUZfVFJVRT0KLSAgVVNFX0dES19QSVhCVUZfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9HREtfUElYQlVGX1RSVUU9JyMnCi0gIFVTRV9HREtfUElYQlVGX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IEphY2sgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBjaGVja2luZyBmZWF0dXJlOiBKYWNrICoqKiIgPiY2O30KLWlmIHRlc3QgInhqYWNrIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiBqYWNrICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBqYWNrICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX0pBQ0siID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtamFjayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9qYWNrK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfamFjazsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX0pBQ0s9eWVzOzsKLSAgICAgIG5vKSBVU0VfSkFDSz1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtamFjayIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfSkFDSz15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9KQUNLPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogamFjayBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGphY2sgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgSkFDSyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9KQUNLPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogamFjayBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBqYWNrIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfSkFDSyA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfSkFDSz1ubwotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEpBQ0siID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEpBQ0suLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEpBQ0tfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfSkFDS19DRkxBR1M9IiRKQUNLX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImphY2sgPj0gMC45OS4xMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJqYWNrID49IDAuOTkuMTAiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfSkFDS19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJqYWNrID49IDAuOTkuMTAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRKQUNLX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9KQUNLX0xJQlM9IiRKQUNLX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJqYWNrID49IDAuOTkuMTBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiamFjayA+PSAwLjk5LjEwIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0pBQ0tfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJqYWNrID49IDAuOTkuMTAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgSkFDS19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImphY2sgPj0gMC45OS4xMCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIEpBQ0tfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJqYWNrID49IDAuOTkuMTAiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRKQUNLX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgSEFWRV9KQUNLPSJubyIKLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQlIQVZFX0pBQ0s9Im5vIgotZWxzZQotCUpBQ0tfQ0ZMQUdTPSRwa2dfY3ZfSkFDS19DRkxBR1MKLQlKQUNLX0xJQlM9JHBrZ19jdl9KQUNLX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQlIQVZFX0pBQ0s9InllcyIKLWZpCi0KLQotCi0KLSAgd2hpY2g9ImphY2sgPj0gMC4xMjAuMSBqYWNrIDwgMS4wIgotICAgIHJlcXVpcmVkPSJubyIKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBKQUNLXzBfMTIwXzEiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEpBQ0tfMF8xMjBfMS4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkSkFDS18wXzEyMF8xX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0pBQ0tfMF8xMjBfMV9DRkxBR1M9IiRKQUNLXzBfMTIwXzFfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfSkFDS18wXzEyMF8xX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEpBQ0tfMF8xMjBfMV9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfSkFDS18wXzEyMF8xX0xJQlM9IiRKQUNLXzBfMTIwXzFfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0pBQ0tfMF8xMjBfMV9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBKQUNLXzBfMTIwXzFfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBKQUNLXzBfMTIwXzFfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRKQUNLXzBfMTIwXzFfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9KQUNLXzBfMTIwXzE9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRKQUNLXzBfMTIwXzFfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkSkFDS18wXzEyMF8xX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEpBQ0tfMF8xMjBfMV9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0pBQ0tfMF8xMjBfMT0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJEpBQ0tfMF8xMjBfMV9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRKQUNLXzBfMTIwXzFfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkSkFDS18wXzEyMF8xX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JSkFDS18wXzEyMF8xX0NGTEFHUz0kcGtnX2N2X0pBQ0tfMF8xMjBfMV9DRkxBR1MKLQlKQUNLXzBfMTIwXzFfTElCUz0kcGtnX2N2X0pBQ0tfMF8xMjBfMV9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfSkFDS18wXzEyMF8xPSJ5ZXMiCi0KLWZpCi0KLQotICBpZiB0ZXN0IHgkSEFWRV9KQUNLXzBfMTIwXzEgPSB4eWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSkFDS18wXzEyMF8xIDEiID4+Y29uZmRlZnMuaAotCi0gIGZpCi0KLSAgd2hpY2g9ImphY2sgPj0gMS45LjciCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEpBQ0tfMV85XzciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEpBQ0tfMV85XzcuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJEpBQ0tfMV85XzdfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfSkFDS18xXzlfN19DRkxBR1M9IiRKQUNLXzFfOV83X0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0pBQ0tfMV85XzdfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkSkFDS18xXzlfN19MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfSkFDS18xXzlfN19MSUJTPSIkSkFDS18xXzlfN19MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfSkFDS18xXzlfN19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBKQUNLXzFfOV83X1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgSkFDS18xXzlfN19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJEpBQ0tfMV85XzdfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9KQUNLXzFfOV83PSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkSkFDS18xXzlfN19QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRKQUNLXzFfOV83X1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEpBQ0tfMV85XzdfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgSEFWRV9KQUNLXzFfOV83PSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkSkFDS18xXzlfN19QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRKQUNLXzFfOV83X1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJEpBQ0tfMV85XzdfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlKQUNLXzFfOV83X0NGTEFHUz0kcGtnX2N2X0pBQ0tfMV85XzdfQ0ZMQUdTCi0JSkFDS18xXzlfN19MSUJTPSRwa2dfY3ZfSkFDS18xXzlfN19MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfSkFDS18xXzlfNz0ieWVzIgotCi1maQotCi0KLSAgaWYgdGVzdCB4JEhBVkVfSkFDS18xXzlfNyA9IHh5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9KQUNLXzFfOV83IDEiID4+Y29uZmRlZnMuaAotCi0gIGZpCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9KQUNLID0geG5vOyB0aGVuCi0gICAgVVNFX0pBQ0s9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogamFjayIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBqYWNrIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfSkFDSyA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4amFjayIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdGphY2tcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSkFDSyAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBqYWNrIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBqYWNrIiA+JjY7fQotICBpZiB0ZXN0ICJ4amFjayIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0amFja1xuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfSkFDSyA9IHh5ZXM7IHRoZW4KLSAgVVNFX0pBQ0tfVFJVRT0KLSAgVVNFX0pBQ0tfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9KQUNLX1RSVUU9JyMnCi0gIFVTRV9KQUNLX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IGpwZWcgbGlicmFyeSAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IGpwZWcgbGlicmFyeSAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4anBlZyIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczoganBlZyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczoganBlZyAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9KUEVHIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWpwZWcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfanBlZytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2pwZWc7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9KUEVHPXllczs7Ci0gICAgICBubykgVVNFX0pQRUc9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWpwZWciICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX0pQRUc9eWVzCi1maQotCi1pZiB0ZXN0ICJ4JE5PVVNFIiA9ICJ4eWVzIjsgdGhlbgotICBVU0VfSlBFRz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIGpwZWcgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBqcGVnIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIEpQRUcgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfSlBFRz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIGpwZWcgbm90IHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKioganBlZyBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX0pQRUcgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0pQRUc9bm8KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWpwZWctbW14IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9qcGVnX21teCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfanBlZ19tbXg7Ci1maQotCi0gIE9MRF9MSUJTPSIkTElCUyIKLSAgaWYgdGVzdCB4JHdpdGhfanBlZ19tbXggIT0geDsgdGhlbgotICAgIExJQlM9IiRMSUJTIC1MJHdpdGhfanBlZ19tbXgiCi0gIGZpCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGpwZWdfc2V0X2RlZmF1bHRzIGluIC1sanBlZy1tbXgiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGpwZWdfc2V0X2RlZmF1bHRzIGluIC1sanBlZy1tbXguLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2pwZWdfbW14X2pwZWdfc2V0X2RlZmF1bHRzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxqcGVnLW1teCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIganBlZ19zZXRfZGVmYXVsdHMgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBqcGVnX3NldF9kZWZhdWx0cyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfanBlZ19tbXhfanBlZ19zZXRfZGVmYXVsdHM9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9qcGVnX21teF9qcGVnX3NldF9kZWZhdWx0cz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfanBlZ19tbXhfanBlZ19zZXRfZGVmYXVsdHMiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfanBlZ19tbXhfanBlZ19zZXRfZGVmYXVsdHMiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfanBlZ19tbXhfanBlZ19zZXRfZGVmYXVsdHMiID0geHllczsgdGhlbiA6Ci0gIEhBVkVfSlBFRz0ieWVzIgotZWxzZQotICBIQVZFX0pQRUc9Im5vIgotZmkKLQotICBKUEVHX0xJQlM9IiRMSUJTIC1sanBlZy1tbXgiCi0gIExJQlM9IiRPTERfTElCUyIKLSAgaWYgdGVzdCB4JEhBVkVfSlBFRyAhPSB4eWVzOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IganBlZ19zZXRfZGVmYXVsdHMgaW4gLWxqcGVnIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBqcGVnX3NldF9kZWZhdWx0cyBpbiAtbGpwZWcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2pwZWdfanBlZ19zZXRfZGVmYXVsdHMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGpwZWcgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGpwZWdfc2V0X2RlZmF1bHRzICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4ganBlZ19zZXRfZGVmYXVsdHMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2pwZWdfanBlZ19zZXRfZGVmYXVsdHM9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9qcGVnX2pwZWdfc2V0X2RlZmF1bHRzPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9qcGVnX2pwZWdfc2V0X2RlZmF1bHRzIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2pwZWdfanBlZ19zZXRfZGVmYXVsdHMiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfanBlZ19qcGVnX3NldF9kZWZhdWx0cyIgPSB4eWVzOyB0aGVuIDoKLSAgSEFWRV9KUEVHPSJ5ZXMiCi1lbHNlCi0gIEhBVkVfSlBFRz0ibm8iCi1maQotCi0gICAgSlBFR19MSUJTPSItbGpwZWciCi0gIGZpCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9KUEVHID0geG5vOyB0aGVuCi0gICAgVVNFX0pQRUc9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDoganBlZyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBqcGVnIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfSlBFRyA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4anBlZyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdGpwZWdcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfSlBFRyAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBqcGVnIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBqcGVnIiA+JjY7fQotICBpZiB0ZXN0ICJ4anBlZyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0anBlZ1xuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfSlBFRyA9IHh5ZXM7IHRoZW4KLSAgVVNFX0pQRUdfVFJVRT0KLSAgVVNFX0pQRUdfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9KUEVHX1RSVUU9JyMnCi0gIFVTRV9KUEVHX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IGxpYmNhY2EgY29sb3VyZWQgQVNDSUkgYXJ0ICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogbGliY2FjYSBjb2xvdXJlZCBBU0NJSSBhcnQgKioqIiA+JjY7fQotaWYgdGVzdCAieGNhY2FzaW5rIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiBjYWNhc2luayAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogY2FjYXNpbmsgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfTElCQ0FDQSIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJjYWNhIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYmNhY2Erc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9saWJjYWNhOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfTElCQ0FDQT15ZXM7OwotICAgICAgbm8pIFVTRV9MSUJDQUNBPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1saWJjYWNhIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9MSUJDQUNBPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0xJQkNBQ0E9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBjYWNhc2luayBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGNhY2FzaW5rIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIExJQkNBQ0EgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfTElCQ0FDQT0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIGNhY2FzaW5rIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGNhY2FzaW5rIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfTElCQ0FDQSA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfTElCQ0FDQT1ubwotCi0KLSAgd2hpY2g9ImNhY2EiCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExJQkNBQ0EiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIExJQkNBQ0EuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJExJQkNBQ0FfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfTElCQ0FDQV9DRkxBR1M9IiRMSUJDQUNBX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X0xJQkNBQ0FfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCQ0FDQV9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfTElCQ0FDQV9MSUJTPSIkTElCQ0FDQV9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfTElCQ0FDQV9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBMSUJDQUNBX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgTElCQ0FDQV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJExJQkNBQ0FfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9MSUJDQUNBPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkTElCQ0FDQV9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRMSUJDQUNBX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJExJQkNBQ0FfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgSEFWRV9MSUJDQUNBPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkTElCQ0FDQV9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRMSUJDQUNBX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJExJQkNBQ0FfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlMSUJDQUNBX0NGTEFHUz0kcGtnX2N2X0xJQkNBQ0FfQ0ZMQUdTCi0JTElCQ0FDQV9MSUJTPSRwa2dfY3ZfTElCQ0FDQV9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfTElCQ0FDQT0ieWVzIgotCi1maQotCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9MSUJDQUNBID0geG5vOyB0aGVuCi0gICAgVVNFX0xJQkNBQ0E9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogY2FjYXNpbmsiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogY2FjYXNpbmsiID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9MSUJDQUNBID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhjYWNhc2luayIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdGNhY2FzaW5rXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQkNBQ0EgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogY2FjYXNpbmsiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IGNhY2FzaW5rIiA+JjY7fQotICBpZiB0ZXN0ICJ4Y2FjYXNpbmsiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdGNhY2FzaW5rXG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9MSUJDQUNBID0geHllczsgdGhlbgotICBVU0VfTElCQ0FDQV9UUlVFPQotICBVU0VfTElCQ0FDQV9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0xJQkNBQ0FfVFJVRT0nIycKLSAgVVNFX0xJQkNBQ0FfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogbGliZHYgRFYgZGVtdXhlci9kZWNvZGVyICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogbGliZHYgRFYgZGVtdXhlci9kZWNvZGVyICoqKiIgPiY2O30KLWlmIHRlc3QgInhkdiIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogZHYgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6IGR2ICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX0xJQkRWIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmR2IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYmR2K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfbGliZHY7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9MSUJEVj15ZXM7OwotICAgICAgbm8pIFVTRV9MSUJEVj1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGliZHYiICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX0xJQkRWPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0xJQkRWPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogZHYgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBkdiBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBMSUJEViAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9MSUJEVj0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIGR2IG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIGR2IG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfTElCRFYgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0xJQkRWPW5vCi0KLQotICB3aGljaD0ibGliZHYgPj0gMC4xMDAiCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExJQkRWIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBMSUJEVi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCRFZfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfTElCRFZfQ0ZMQUdTPSIkTElCRFZfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfTElCRFZfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCRFZfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0xJQkRWX0xJQlM9IiRMSUJEVl9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfTElCRFZfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgTElCRFZfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBMSUJEVl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJExJQkRWX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfTElCRFY9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRMSUJEVl9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRMSUJEVl9QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRMSUJEVl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0xJQkRWPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkTElCRFZfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkTElCRFZfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkTElCRFZfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlMSUJEVl9DRkxBR1M9JHBrZ19jdl9MSUJEVl9DRkxBR1MKLQlMSUJEVl9MSUJTPSRwa2dfY3ZfTElCRFZfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0gICAgICBIQVZFX0xJQkRWPSJ5ZXMiCi0KLWZpCi0KLQotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX0xJQkRWID0geG5vOyB0aGVuCi0gICAgVVNFX0xJQkRWPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IGR2IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IGR2IiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfTElCRFYgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieGR2IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0ZHZcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCRFYgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogZHYiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IGR2IiA+JjY7fQotICBpZiB0ZXN0ICJ4ZHYiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdGR2XG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9MSUJEViA9IHh5ZXM7IHRoZW4KLSAgVVNFX0xJQkRWX1RSVUU9Ci0gIFVTRV9MSUJEVl9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0xJQkRWX1RSVUU9JyMnCi0gIFVTRV9MSUJEVl9GQUxTRT0KLWZpCi0KLQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIGxpYnJhcnkgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBjaGVja2luZyBmZWF0dXJlOiBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIGxpYnJhcnkgKioqIiA+JjY7fQotaWYgdGVzdCAieHBuZyIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogcG5nICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBwbmcgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfTElCUE5HIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnBuZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJwbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9saWJwbmc7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9MSUJQTkc9eWVzOzsKLSAgICAgIG5vKSBVU0VfTElCUE5HPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1saWJwbmciICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX0xJQlBORz15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9MSUJQTkc9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBwbmcgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBwbmcgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgTElCUE5HICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX0xJQlBORz0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHBuZyBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBwbmcgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9MSUJQTkcgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0xJQlBORz1ubwotCi0KLSAgd2hpY2g9ImxpYnBuZyA+PSAxLjIiCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExJQlBORyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgTElCUE5HLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRMSUJQTkdfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfTElCUE5HX0NGTEFHUz0iJExJQlBOR19DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9MSUJQTkdfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCUE5HX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9MSUJQTkdfTElCUz0iJExJQlBOR19MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfTElCUE5HX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIExJQlBOR19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIExJQlBOR19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJExJQlBOR19QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX0xJQlBORz0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJExJQlBOR19QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRMSUJQTkdfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkTElCUE5HX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0KLSAgICAgIEhBVkVfTElCUE5HPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkTElCUE5HX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJExJQlBOR19QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRMSUJQTkdfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlMSUJQTkdfQ0ZMQUdTPSRwa2dfY3ZfTElCUE5HX0NGTEFHUwotCUxJQlBOR19MSUJTPSRwa2dfY3ZfTElCUE5HX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9MSUJQTkc9InllcyIKLQotZmkKLQotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfTElCUE5HID0geG5vOyB0aGVuCi0gICAgVVNFX0xJQlBORz1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBwbmciID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogcG5nIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfTElCUE5HID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhwbmciICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHRwbmdcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCUE5HIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHBuZyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogcG5nIiA+JjY7fQotICBpZiB0ZXN0ICJ4cG5nIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRwbmdcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX0xJQlBORyA9IHh5ZXM7IHRoZW4KLSAgVVNFX0xJQlBOR19UUlVFPQotICBVU0VfTElCUE5HX0ZBTFNFPScjJwotZWxzZQotICBVU0VfTElCUE5HX1RSVUU9JyMnCi0gIFVTRV9MSUJQTkdfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogcHVsc2VhdWRpbyBwbHVnLWluICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogcHVsc2VhdWRpbyBwbHVnLWluICoqKiIgPiY2O30KLWlmIHRlc3QgInhwdWxzZWF1ZGlvIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiBwdWxzZWF1ZGlvICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBwdWxzZWF1ZGlvICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX1BVTFNFIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB1bHNlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3B1bHNlK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfcHVsc2U7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9QVUxTRT15ZXM7OwotICAgICAgbm8pIFVTRV9QVUxTRT1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtcHVsc2UiICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX1BVTFNFPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX1BVTFNFPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogcHVsc2VhdWRpbyBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHB1bHNlYXVkaW8gcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgUFVMU0UgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfUFVMU0U9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBwdWxzZWF1ZGlvIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHB1bHNlYXVkaW8gbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9QVUxTRSA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfUFVMU0U9bm8KLQotCi0gICAgZm9yIGFjX2hlYWRlciBpbiBwcm9jZXNzLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInByb2Nlc3MuaCIgImFjX2N2X2hlYWRlcl9wcm9jZXNzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3Byb2Nlc3NfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotICB3aGljaD0ibGlicHVsc2UgPj0gMi4wIgotICAgIHJlcXVpcmVkPSJubyIKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQVUxTRSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgUFVMU0UuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFBVTFNFX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1BVTFNFX0NGTEFHUz0iJFBVTFNFX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1BVTFNFX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFBVTFNFX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9QVUxTRV9MSUJTPSIkUFVMU0VfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1BVTFNFX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFBVTFNFX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgUFVMU0VfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRQVUxTRV9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX1BVTFNFPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkUFVMU0VfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkUFVMU0VfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkUFVMU0VfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgSEFWRV9QVUxTRT0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJFBVTFNFX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJFBVTFNFX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJFBVTFNFX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JUFVMU0VfQ0ZMQUdTPSRwa2dfY3ZfUFVMU0VfQ0ZMQUdTCi0JUFVMU0VfTElCUz0kcGtnX2N2X1BVTFNFX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9QVUxTRT0ieWVzIgotCi1maQotCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9QVUxTRSA9IHhubzsgdGhlbgotICAgIFVTRV9QVUxTRT1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBwdWxzZWF1ZGlvIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHB1bHNlYXVkaW8iID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9QVUxTRSA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4cHVsc2VhdWRpbyIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdHB1bHNlYXVkaW9cbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFVMU0UgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogcHVsc2VhdWRpbyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogcHVsc2VhdWRpbyIgPiY2O30KLSAgaWYgdGVzdCAieHB1bHNlYXVkaW8iICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdHB1bHNlYXVkaW9cbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1BVTFNFID0geHllczsgdGhlbgotICBVU0VfUFVMU0VfVFJVRT0KLSAgVVNFX1BVTFNFX0ZBTFNFPScjJwotZWxzZQotICBVU0VfUFVMU0VfVFJVRT0nIycKLSAgVVNFX1BVTFNFX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IHJhdzEzOTQgYW5kIGF2YzEzOTQgbGlicmFyeSAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IHJhdzEzOTQgYW5kIGF2YzEzOTQgbGlicmFyeSAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4MTM5NCIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogMTM5NCAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogMTM5NCAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9EVjEzOTQiID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZHYxMzk0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2R2MTM5NCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2R2MTM5NDsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX0RWMTM5ND15ZXM7OwotICAgICAgbm8pIFVTRV9EVjEzOTQ9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWR2MTM5NCIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfRFYxMzk0PXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0RWMTM5ND0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIDEzOTQgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiAxMzk0IHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIERWMTM5NCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9EVjEzOTQ9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiAxMzk0IG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIDEzOTQgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9EVjEzOTQgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX0RWMTM5ND1ubwotCi0KLSAgd2hpY2g9ImxpYnJhdzEzOTQgPj0gMi4wLjAiCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFJBVzEzOTQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJBVzEzOTQuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFJBVzEzOTRfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfUkFXMTM5NF9DRkxBR1M9IiRSQVcxMzk0X0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1JBVzEzOTRfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkUkFXMTM5NF9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfUkFXMTM5NF9MSUJTPSIkUkFXMTM5NF9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfUkFXMTM5NF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBSQVcxMzk0X1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgUkFXMTM5NF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJFJBVzEzOTRfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9SQVcxMzk0PSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkUkFXMTM5NF9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRSQVcxMzk0X1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJFJBVzEzOTRfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgSEFWRV9SQVcxMzk0PSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkUkFXMTM5NF9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRSQVcxMzk0X1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJFJBVzEzOTRfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlSQVcxMzk0X0NGTEFHUz0kcGtnX2N2X1JBVzEzOTRfQ0ZMQUdTCi0JUkFXMTM5NF9MSUJTPSRwa2dfY3ZfUkFXMTM5NF9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfUkFXMTM5ND0ieWVzIgotCi1maQotCi0KLQotICB3aGljaD0ibGliaWVjNjE4ODMgPj0gMS4wLjAiCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExJQklFQzYxODgzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBMSUJJRUM2MTg4My4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCSUVDNjE4ODNfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfTElCSUVDNjE4ODNfQ0ZMQUdTPSIkTElCSUVDNjE4ODNfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfTElCSUVDNjE4ODNfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkTElCSUVDNjE4ODNfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X0xJQklFQzYxODgzX0xJQlM9IiRMSUJJRUM2MTg4M19MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfTElCSUVDNjE4ODNfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgTElCSUVDNjE4ODNfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBMSUJJRUM2MTg4M19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJExJQklFQzYxODgzX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfTElCSUVDNjE4ODM9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRMSUJJRUM2MTg4M19QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRMSUJJRUM2MTg4M19QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRMSUJJRUM2MTg4M19QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX0xJQklFQzYxODgzPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkTElCSUVDNjE4ODNfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkTElCSUVDNjE4ODNfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkTElCSUVDNjE4ODNfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlMSUJJRUM2MTg4M19DRkxBR1M9JHBrZ19jdl9MSUJJRUM2MTg4M19DRkxBR1MKLQlMSUJJRUM2MTg4M19MSUJTPSRwa2dfY3ZfTElCSUVDNjE4ODNfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0gICAgICBIQVZFX0xJQklFQzYxODgzPSJ5ZXMiCi0KLWZpCi0KLQotICAgIGlmIHRlc3QgeCRIQVZFX1JBVzEzOTQgPSB4eWVzICYmIFwKLSAgICAgdGVzdCB4JEhBVkVfTElCSUVDNjE4ODMgPSB4eWVzOyB0aGVuCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXZjMTM5NF9zZW5kX2NvbW1hbmQgaW4gLWxhdmMxMzk0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhdmMxMzk0X3NlbmRfY29tbWFuZCBpbiAtbGF2YzEzOTQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2F2YzEzOTRfYXZjMTM5NF9zZW5kX2NvbW1hbmQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGF2YzEzOTQgJFJBVzEzOTRfTElCUyAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBhdmMxMzk0X3NlbmRfY29tbWFuZCAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGF2YzEzOTRfc2VuZF9jb21tYW5kICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9hdmMxMzk0X2F2YzEzOTRfc2VuZF9jb21tYW5kPXllcwotZWxzZQotICBhY19jdl9saWJfYXZjMTM5NF9hdmMxMzk0X3NlbmRfY29tbWFuZD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYXZjMTM5NF9hdmMxMzk0X3NlbmRfY29tbWFuZCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9hdmMxMzk0X2F2YzEzOTRfc2VuZF9jb21tYW5kIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2F2YzEzOTRfYXZjMTM5NF9zZW5kX2NvbW1hbmQiID0geHllczsgdGhlbiA6Ci0gIEhBVkVfQVZDMTM5ND15ZXMKLWVsc2UKLSAgSEFWRV9BVkMxMzk0PW5vCi1maQotCi0gIGlmIHRlc3QgIngkSEFWRV9BVkMxMzk0IiA9ICJ4eWVzIjsgdGhlbgotICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaWJhdmMxMzk0L2F2YzEzOTQuaCIgImFjX2N2X2hlYWRlcl9saWJhdmMxMzk0X2F2YzEzOTRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGliYXZjMTM5NF9hdmMxMzk0X2giID0geHllczsgdGhlbiA6Ci0gIDoKLWVsc2UKLSAgSEFWRV9BVkMxMzk0PW5vCi1maQotCi0KLSAgICBpZiB0ZXN0ICJ4JEhBVkVfQVZDMTM5NCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIEFWQzEzOTRfTElCUz0iLWxhdmMxMzk0IgotICAgIGVsc2UKLSAgICAgIDoKLSAgICBmaQotICBlbHNlCi0gICAgOgotICBmaQotCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJvbTEzOTRfZnJlZV9kaXJlY3RvcnkgaW4gLWxyb20xMzk0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciByb20xMzk0X2ZyZWVfZGlyZWN0b3J5IGluIC1scm9tMTM5NC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfcm9tMTM5NF9yb20xMzk0X2ZyZWVfZGlyZWN0b3J5Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxyb20xMzk0ICRSQVcxMzk0X0xJQlMgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIHJvbTEzOTRfZnJlZV9kaXJlY3RvcnkgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX3JvbTEzOTRfcm9tMTM5NF9mcmVlX2RpcmVjdG9yeT15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX3JvbTEzOTRfcm9tMTM5NF9mcmVlX2RpcmVjdG9yeT1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcm9tMTM5NF9yb20xMzk0X2ZyZWVfZGlyZWN0b3J5IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX3JvbTEzOTRfcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yb20xMzk0X3JvbTEzOTRfZnJlZV9kaXJlY3RvcnkiID0geHllczsgdGhlbiA6Ci0gIEhBVkVfUk9NMTM5ND15ZXMKLWVsc2UKLSAgSEFWRV9ST00xMzk0PW5vCi1maQotCi0gIGlmIHRlc3QgIngkSEFWRV9ST00xMzk0IiA9ICJ4eWVzIjsgdGhlbgotICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaWJhdmMxMzk0L3JvbTEzOTQuaCIgImFjX2N2X2hlYWRlcl9saWJhdmMxMzk0X3JvbTEzOTRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGliYXZjMTM5NF9yb20xMzk0X2giID0geHllczsgdGhlbiA6Ci0gIDoKLWVsc2UKLSAgSEFWRV9ST00xMzk0PW5vCi1maQotCi0KLSAgICBpZiB0ZXN0ICJ4JEhBVkVfUk9NMTM5NCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgICAgIFJPTTEzOTRfTElCUz0iLWxyb20xMzk0IgotICAgIGVsc2UKLSAgICAgIDoKLSAgICBmaQotICBlbHNlCi0gICAgOgotICBmaQotCi0KLQotICAgICAgIGlmIHRlc3QgeCRIQVZFX0FWQzEzOTQgPSB4eWVzICYmIFwKLSAgICAgICAgICB0ZXN0IHgkSEFWRV9BVkMxMzk0ID0geHllcyAmJiBcCi0JICB0ZXN0IHgkSEFWRV9ST00xMzk0ID0geHllczsgdGhlbgotCSAgSEFWRV9EVjEzOTQ9eWVzCi0gICAgICAgICAgRFYxMzk0X0xJQlM9IiRSQVcxMzk0X0xJQlMgJEFWQzEzOTRfTElCUyAkUk9NMTM5NF9MSUJTICRMSUJJRUM2MTg4M19MSUJTIgotICAgICAgICAgIERWMTM5NF9DRkxBR1M9IiRSQVcxMzk0X0NGTEFHUyAkTElCSUVDNjE4ODNfQ0ZMQUdTIC1ESEFWRV9MSUJJRUM2MTg4MyIKLQotCi0JZmkKLSAgZWxzZQotICAgICAgIGlmIHRlc3QgeCRIQVZFX1JBVzEzOTQgPSB4bm87IHRoZW4KLQotICB3aGljaD0ibGlicmF3MTM5NCA+PSAxLjEuMCIKLSAgICByZXF1aXJlZD0ibm8iCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUkFXMTM5NCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgUkFXMTM5NC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkUkFXMTM5NF9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9SQVcxMzk0X0NGTEFHUz0iJFJBVzEzOTRfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfUkFXMTM5NF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRSQVcxMzk0X0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9SQVcxMzk0X0xJQlM9IiRSQVcxMzk0X0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9SQVcxMzk0X0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFJBVzEzOTRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBSQVcxMzk0X1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkUkFXMTM5NF9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX1JBVzEzOTQ9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRSQVcxMzk0X1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJFJBVzEzOTRfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkUkFXMTM5NF9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX1JBVzEzOTQ9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRSQVcxMzk0X1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJFJBVzEzOTRfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkUkFXMTM5NF9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxzZQotCVJBVzEzOTRfQ0ZMQUdTPSRwa2dfY3ZfUkFXMTM5NF9DRkxBR1MKLQlSQVcxMzk0X0xJQlM9JHBrZ19jdl9SQVcxMzk0X0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9SQVcxMzk0PSJ5ZXMiCi0KLWZpCi0KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGF2YzEzOTRfc2VuZF9jb21tYW5kIGluIC1sYXZjMTM5NCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYXZjMTM5NF9zZW5kX2NvbW1hbmQgaW4gLWxhdmMxMzk0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9hdmMxMzk0X2F2YzEzOTRfc2VuZF9jb21tYW5kKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxhdmMxMzk0ICRSQVcxMzk0X0xJQlMgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgYXZjMTM5NF9zZW5kX2NvbW1hbmQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBhdmMxMzk0X3NlbmRfY29tbWFuZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfYXZjMTM5NF9hdmMxMzk0X3NlbmRfY29tbWFuZD15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2F2YzEzOTRfYXZjMTM5NF9zZW5kX2NvbW1hbmQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2F2YzEzOTRfYXZjMTM5NF9zZW5kX2NvbW1hbmQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfYXZjMTM5NF9hdmMxMzk0X3NlbmRfY29tbWFuZCIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9hdmMxMzk0X2F2YzEzOTRfc2VuZF9jb21tYW5kIiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX0FWQzEzOTQ9eWVzCi1lbHNlCi0gIEhBVkVfQVZDMTM5ND1ubwotZmkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfQVZDMTM5NCIgPSAieHllcyI7IHRoZW4KLSAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibGliYXZjMTM5NC9hdmMxMzk0LmgiICJhY19jdl9oZWFkZXJfbGliYXZjMTM5NF9hdmMxMzk0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYmF2YzEzOTRfYXZjMTM5NF9oIiA9IHh5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIEhBVkVfQVZDMTM5ND1ubwotZmkKLQotCi0gICAgaWYgdGVzdCAieCRIQVZFX0FWQzEzOTQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBBVkMxMzk0X0xJQlM9Ii1sYXZjMTM5NCIKLSAgICBlbHNlCi0gICAgICA6Ci0gICAgZmkKLSAgZWxzZQotICAgIDoKLSAgZmkKLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciByb20xMzk0X2ZyZWVfZGlyZWN0b3J5IGluIC1scm9tMTM5NCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSBpbiAtbHJvbTEzOTQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX3JvbTEzOTRfcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scm9tMTM5NCAkUkFXMTM5NF9MSUJTICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIHJvbTEzOTRfZnJlZV9kaXJlY3RvcnkgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiByb20xMzk0X2ZyZWVfZGlyZWN0b3J5ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9yb20xMzk0X3JvbTEzOTRfZnJlZV9kaXJlY3Rvcnk9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9yb20xMzk0X3JvbTEzOTRfZnJlZV9kaXJlY3Rvcnk9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JvbTEzOTRfcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9yb20xMzk0X3JvbTEzOTRfZnJlZV9kaXJlY3RvcnkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcm9tMTM5NF9yb20xMzk0X2ZyZWVfZGlyZWN0b3J5IiA9IHh5ZXM7IHRoZW4gOgotICBIQVZFX1JPTTEzOTQ9eWVzCi1lbHNlCi0gIEhBVkVfUk9NMTM5ND1ubwotZmkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfUk9NMTM5NCIgPSAieHllcyI7IHRoZW4KLSAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibGliYXZjMTM5NC9yb20xMzk0LmgiICJhY19jdl9oZWFkZXJfbGliYXZjMTM5NF9yb20xMzk0X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYmF2YzEzOTRfcm9tMTM5NF9oIiA9IHh5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIEhBVkVfUk9NMTM5ND1ubwotZmkKLQotCi0gICAgaWYgdGVzdCAieCRIQVZFX1JPTTEzOTQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICBST00xMzk0X0xJQlM9Ii1scm9tMTM5NCIKLSAgICBlbHNlCi0gICAgICA6Ci0gICAgZmkKLSAgZWxzZQotICAgIDoKLSAgZmkKLQotCi0KLSAgICAgICAgICBpZiB0ZXN0IHgkSEFWRV9SQVcxMzk0ID0geHllcyAmJiBcCi0JICAgICB0ZXN0IHgkSEFWRV9BVkMxMzk0ID0geHllcyAmJiBcCi0JICAgICB0ZXN0IHgkSEFWRV9ST00xMzk0ID0geHllczsgdGhlbgotCSAgICAgSEFWRV9EVjEzOTQ9eWVzCi0JICAgICBEVjEzOTRfTElCUz0iJFJBVzEzOTRfTElCUyAkQVZDMTM5NF9MSUJTICRST00xMzk0X0xJQlMiCi0JICAgICBEVjEzOTRfQ0ZMQUdTPSIkUkFXMTM5NF9DRkxBR1MiCi0JICAgICBpZiB0ZXN0IHgkSEFWRV9MSUJJRUM2MTg4MyA9IHh5ZXM7IHRoZW4KLQkgICAgICAgRFYxMzk0X0NGTEFHUz0iJFJBVzEzOTRfQ0ZMQUdTICRMSUJJRUM2MTg4M19DRkxBR1MgLURIQVZFX0xJQklFQzYxODgzIgotCSAgICAgICBEVjEzOTRfTElCUz0iJERWMTM5NF9MSUJTICRMSUJJRUM2MTg4M19MSUJTIgotCSAgICAgZmkKLQotCi0gICAgICAgICAgIGZpCi0JIGZpCi0gIGZpCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfRFYxMzk0ID0geG5vOyB0aGVuCi0gICAgVVNFX0RWMTM5ND1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiAxMzk0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IDEzOTQiID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9EVjEzOTQgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieDEzOTQiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHQxMzk0XG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0RWMTM5NCAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiAxMzk0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiAxMzk0IiA+JjY7fQotICBpZiB0ZXN0ICJ4MTM5NCIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0MTM5NFxuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfRFYxMzk0ID0geHllczsgdGhlbgotICBVU0VfRFYxMzk0X1RSVUU9Ci0gIFVTRV9EVjEzOTRfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9EVjEzOTRfVFJVRT0nIycKLSAgVVNFX0RWMTM5NF9GQUxTRT0KLWZpCi0KLQotIGlmICB0ZXN0ICJ4JHtIQVZFX0xJQklFQzYxODgzfSIgPSB4eWVzICA7IHRoZW4KLSAgVVNFX0xJQklFQzYxODgzX1RSVUU9Ci0gIFVTRV9MSUJJRUM2MTg4M19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0xJQklFQzYxODgzX1RSVUU9JyMnCi0gIFVTRV9MSUJJRUM2MTg4M19GQUxTRT0KLWZpCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogU2hvdXRjYXN0L0ljZWNhc3QgY2xpZW50IGxpYnJhcnkgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBjaGVja2luZyBmZWF0dXJlOiBTaG91dGNhc3QvSWNlY2FzdCBjbGllbnQgbGlicmFyeSAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4c2hvdXQyIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiBzaG91dDIgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6IHNob3V0MiAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9TSE9VVDIiID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hvdXQyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Nob3V0MitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3Nob3V0MjsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX1NIT1VUMj15ZXM7OwotICAgICAgbm8pIFVTRV9TSE9VVDI9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNob3V0MiIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfU0hPVVQyPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX1NIT1VUMj0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHNob3V0MiBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHNob3V0MiBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBTSE9VVDIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfU0hPVVQyPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogc2hvdXQyIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHNob3V0MiBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX1NIT1VUMiA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfU0hPVVQyPW5vCi0KLQotICB3aGljaD0ic2hvdXQgPj0gMi4wIgotICAgIHJlcXVpcmVkPSJubyIKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTSE9VVDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNIT1VUMi4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkU0hPVVQyX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1NIT1VUMl9DRkxBR1M9IiRTSE9VVDJfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfU0hPVVQyX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFNIT1VUMl9MSUJTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfU0hPVVQyX0xJQlM9IiRTSE9VVDJfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1NIT1VUMl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBTSE9VVDJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBlbHNlCi0JICAgICAgICBTSE9VVDJfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRTSE9VVDJfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotICAgICAgSEFWRV9TSE9VVDI9Im5vIgotICAgICAgaWYgdGVzdCAieCRyZXF1aXJlZCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgYXNfZm5fZXJyb3IgJD8gIiRTSE9VVDJfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkU0hPVVQyX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJFNIT1VUMl9QS0dfRVJST1JTIiA+JjY7fQotICAgICAgZmkKLQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCi0gICAgICBIQVZFX1NIT1VUMj0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJFNIT1VUMl9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRTSE9VVDJfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkU0hPVVQyX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JU0hPVVQyX0NGTEFHUz0kcGtnX2N2X1NIT1VUMl9DRkxBR1MKLQlTSE9VVDJfTElCUz0kcGtnX2N2X1NIT1VUMl9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfU0hPVVQyPSJ5ZXMiCi0KLWZpCi0KLQotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX1NIT1VUMiA9IHhubzsgdGhlbgotICAgIFVTRV9TSE9VVDI9bm8KLSAgZWxzZQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogc2hvdXQyIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHNob3V0MiIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX1NIT1VUMiA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4c2hvdXQyIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0c2hvdXQyXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NIT1VUMiAvKiovIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBzaG91dDIiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHNob3V0MiIgPiY2O30KLSAgaWYgdGVzdCAieHNob3V0MiIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfTk89Ilx0c2hvdXQyXG4kR1NUX1BMVUdJTlNfTk8iCi0gIGZpCi0gIDoKLWZpCi0gaWYgdGVzdCB4JFVTRV9TSE9VVDIgPSB4eWVzOyB0aGVuCi0gIFVTRV9TSE9VVDJfVFJVRT0KLSAgVVNFX1NIT1VUMl9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1NIT1VUMl9UUlVFPScjJwotICBVU0VfU0hPVVQyX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IHNvdXAgaHR0cCBjbGllbnQgcGx1Z2luICgyLjQpICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogc291cCBodHRwIGNsaWVudCBwbHVnaW4gKDIuNCkgKioqIiA+JjY7fQotaWYgdGVzdCAieHNvdXBodHRwc3JjIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiBzb3VwaHR0cHNyYyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogc291cGh0dHBzcmMgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfU09VUCIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zb3VwIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NvdXArc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9zb3VwOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfU09VUD15ZXM7OwotICAgICAgbm8pIFVTRV9TT1VQPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS1zb3VwIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9TT1VQPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX1NPVVA9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBzb3VwaHR0cHNyYyBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHNvdXBodHRwc3JjIHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFNPVVAgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfU09VUD0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHNvdXBodHRwc3JjIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHNvdXBodHRwc3JjIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfU09VUCA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfU09VUD1ubwotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFNPVVAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNPVVAuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFNPVVBfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfU09VUF9DRkxBR1M9IiRTT1VQX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcImxpYnNvdXAtMi40ID49IDIuNDhcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAibGlic291cC0yLjQgPj0gMi40OCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9TT1VQX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgImxpYnNvdXAtMi40ID49IDIuNDgiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRTT1VQX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9TT1VQX0xJQlM9IiRTT1VQX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJsaWJzb3VwLTIuNCA+PSAyLjQ4XCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgImxpYnNvdXAtMi40ID49IDIuNDgiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfU09VUF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgImxpYnNvdXAtMi40ID49IDIuNDgiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgU09VUF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgImxpYnNvdXAtMi40ID49IDIuNDgiYAotICAgICAgICBlbHNlCi0JICAgICAgICBTT1VQX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAibGlic291cC0yLjQgPj0gMi40OCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJFNPVVBfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgICAgICAgICBIQVZFX1NPVVA9Im5vIgotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCUhBVkVfU09VUD0ibm8iCi1lbHNlCi0JU09VUF9DRkxBR1M9JHBrZ19jdl9TT1VQX0NGTEFHUwotCVNPVVBfTElCUz0kcGtnX2N2X1NPVVBfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCUhBVkVfU09VUD0ieWVzIgotZmkKLQotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfU09VUCA9IHhubzsgdGhlbgotICAgIFVTRV9TT1VQPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHNvdXBodHRwc3JjIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHNvdXBodHRwc3JjIiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfU09VUCA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4c291cGh0dHBzcmMiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHRzb3VwaHR0cHNyY1xuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TT1VQIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHNvdXBodHRwc3JjIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBzb3VwaHR0cHNyYyIgPiY2O30KLSAgaWYgdGVzdCAieHNvdXBodHRwc3JjIiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRzb3VwaHR0cHNyY1xuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfU09VUCA9IHh5ZXM7IHRoZW4KLSAgVVNFX1NPVVBfVFJVRT0KLSAgVVNFX1NPVVBfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9TT1VQX1RSVUU9JyMnCi0gIFVTRV9TT1VQX0ZBTFNFPQotZmkKLQotCi0KLWVjaG8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGNoZWNraW5nIGZlYXR1cmU6IHNwZWV4IHNwZWVjaCBjb2RlYyAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IHNwZWV4IHNwZWVjaCBjb2RlYyAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4c3BlZXgiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IHNwZWV4ICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiBzcGVleCAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9TUEVFWCIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zcGVleCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zcGVleCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3NwZWV4OyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfU1BFRVg9eWVzOzsKLSAgICAgIG5vKSBVU0VfU1BFRVg9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXNwZWV4IiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9TUEVFWD15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9TUEVFWD0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHNwZWV4IHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogc3BlZXggcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgU1BFRVggIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfU1BFRVg9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiBzcGVleCBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiBzcGVleCBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX1NQRUVYID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9TUEVFWD1ubwotCi0KLSAgd2hpY2g9InNwZWV4ID49IDEuMS42IgotICAgIHJlcXVpcmVkPSJubyIKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTUEVFWCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgU1BFRVguLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFNQRUVYX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1NQRUVYX0NGTEFHUz0iJFNQRUVYX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1NQRUVYX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFNQRUVYX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9TUEVFWF9MSUJTPSIkU1BFRVhfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1NQRUVYX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFNQRUVYX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAiJHdoaWNoImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgU1BFRVhfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRTUEVFWF9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX1NQRUVYPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkU1BFRVhfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkU1BFRVhfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkU1BFRVhfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KLQotICAgICAgSEFWRV9TUEVFWD0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJFNQRUVYX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJFNQRUVYX1BLR19FUlJPUlMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJFNQRUVYX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JU1BFRVhfQ0ZMQUdTPSRwa2dfY3ZfU1BFRVhfQ0ZMQUdTCi0JU1BFRVhfTElCUz0kcGtnX2N2X1NQRUVYX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9TUEVFWD0ieWVzIgotCi1maQotCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9TUEVFWCA9IHhubzsgdGhlbgotICAgIFVTRV9TUEVFWD1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBzcGVleCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiBzcGVleCIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX1NQRUVYID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInhzcGVleCIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdHNwZWV4XG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NQRUVYIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHNwZWV4IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiBzcGVleCIgPiY2O30KLSAgaWYgdGVzdCAieHNwZWV4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRzcGVleFxuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfU1BFRVggPSB4eWVzOyB0aGVuCi0gIFVTRV9TUEVFWF9UUlVFPQotICBVU0VfU1BFRVhfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9TUEVFWF9UUlVFPScjJwotICBVU0VfU1BFRVhfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogdGFnbGliIHRhZ2dpbmcgbGlicmFyeSAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IHRhZ2xpYiB0YWdnaW5nIGxpYnJhcnkgKioqIiA+JjY7fQotaWYgdGVzdCAieHRhZ2xpYiIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogdGFnbGliICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiB0YWdsaWIgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfVEFHTElCIiA9ICJ4bm8iOyB0aGVuCi0gIE5PVVNFPSJ5ZXMiCi1maQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXRhZ2xpYiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV90YWdsaWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV90YWdsaWI7ICBjYXNlICIke2VuYWJsZXZhbH0iIGluCi0gICAgICB5ZXMpIFVTRV9UQUdMSUI9eWVzOzsKLSAgICAgIG5vKSBVU0VfVEFHTElCPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS10YWdsaWIiICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotZWxzZQotICAgVVNFX1RBR0xJQj15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9UQUdMSUI9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiB0YWdsaWIgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiB0YWdsaWIgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgVEFHTElCICIgPiAvZGV2L251bGw7IHRoZW4KLSAgVVNFX1RBR0xJQj0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqIHRhZ2xpYiBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiB0YWdsaWIgbm90IHBvcnRlZCIgPiYyO30KLWZpCi0KLQotaWYgdGVzdCB4JFVTRV9UQUdMSUIgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX1RBR0xJQj1ubwotCi0KLSAgd2hpY2g9InRhZ2xpYiA+PSAxLjUiCi0gICAgcmVxdWlyZWQ9Im5vIgotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFRBR0xJQiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgVEFHTElCLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRUQUdMSUJfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfVEFHTElCX0NGTEFHUz0iJFRBR0xJQl9DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9UQUdMSUJfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVEFHTElCX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9UQUdMSUJfTElCUz0iJFRBR0xJQl9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiXCR3aGljaFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkd2hpY2giKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfVEFHTElCX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAiJHdoaWNoIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi0KLQotCi1pZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCi0KLWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKLWVsc2UKLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCi1maQotICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KLQkgICAgICAgIFRBR0xJQl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIFRBR0xJQl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJFRBR0xJQl9QS0dfRVJST1JTIiA+JjUKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0gICAgICBIQVZFX1RBR0xJQj0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJFRBR0xJQl9QS0dfRVJST1JTIiAiJExJTkVOTyIgNQotICAgICAgZWxzZQotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRUQUdMSUJfUEtHX0VSUk9SUyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkVEFHTElCX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0KLSAgICAgIEhBVkVfVEFHTElCPSJubyIKLSAgICAgIGlmIHRlc3QgIngkcmVxdWlyZWQiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGFzX2ZuX2Vycm9yICQ/ICIkVEFHTElCX1BLR19FUlJPUlMiICIkTElORU5PIiA1Ci0gICAgICBlbHNlCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJFRBR0xJQl9QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRUQUdMSUJfUEtHX0VSUk9SUyIgPiY2O30KLSAgICAgIGZpCi0KLWVsc2UKLQlUQUdMSUJfQ0ZMQUdTPSRwa2dfY3ZfVEFHTElCX0NGTEFHUwotCVRBR0xJQl9MSUJTPSRwa2dfY3ZfVEFHTElCX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgSEFWRV9UQUdMSUI9InllcyIKLQotZmkKLQotCi0gIGlmIHRlc3QgIngkSEFWRV9DWFgiICE9ICJ4eWVzIjsgdGhlbgotICAgIFVTRV9UQUdMSUI9ZmFsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IE5vdCBidWlsZGluZyB0YWdsaWIgcGx1Z2luOiBubyBDKysgY29tcGlsZXIgZm91bmQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogTm90IGJ1aWxkaW5nIHRhZ2xpYiBwbHVnaW46IG5vIEMrKyBjb21waWxlciBmb3VuZCIgPiY2O30KLSAgZWxzZQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVduby1hdHRyaWJ1dGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjKysgY29tcGlsZXIgdW5kZXJzdGFuZHMgLVduby1hdHRyaWJ1dGVzLi4uICIgPiY2OyB9Ci0KLSAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgotICBDUFBGTEFHUz0iJENQUEZMQUdTIC1Xbm8tYXR0cmlidXRlcyIKLQotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi0KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZmxhZ19vaz15ZXMKLWVsc2UKLSAgZmxhZ19vaz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0KLSAgaWYgdGVzdCAiWCRmbGFnX29rIiA9IFh5ZXMgOyB0aGVuCi0KLSAgICAgICAgVEFHTElCX0NYWEZMQUdTPSIkVEFHTElCX0NGTEFHUyAtV25vLWF0dHJpYnV0ZXMiCi0KLSAgICB0cnVlCi0gIGVsc2UKLQotICAgICAgICBUQUdMSUJfQ1hYRkxBR1M9IiRUQUdMSUJfQ0ZMQUdTIgotCi0gICAgdHJ1ZQotICBmaQotCi0gIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZmxhZ19vayIgPiY1Ci0kYXNfZWNobyAiJGZsYWdfb2siID4mNjsgfQotCi0KLSAgZmkKLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9UQUdMSUIgPSB4bm87IHRoZW4KLSAgICBVU0VfVEFHTElCPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHRhZ2xpYiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiB0YWdsaWIiID4mNjt9Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9UQUdMSUIgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieHRhZ2xpYiIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdHRhZ2xpYlxuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9UQUdMSUIgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogdGFnbGliIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgbm90IGJlIGJ1aWx0OiB0YWdsaWIiID4mNjt9Ci0gIGlmIHRlc3QgInh0YWdsaWIiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdHRhZ2xpYlxuJEdTVF9QTFVHSU5TX05PIgotICBmaQotICA6Ci1maQotIGlmIHRlc3QgeCRVU0VfVEFHTElCID0geHllczsgdGhlbgotICBVU0VfVEFHTElCX1RSVUU9Ci0gIFVTRV9UQUdMSUJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9UQUdMSUJfVFJVRT0nIycKLSAgVVNFX1RBR0xJQl9GQUxTRT0KLWZpCi0KLQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBWUFggZGVjb2RlciAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGNoZWNraW5nIGZlYXR1cmU6IFZQWCBkZWNvZGVyICoqKiIgPiY2O30KLWlmIHRlc3QgInh2cHgiICE9ICJ4IgotdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBmb3IgcGx1Zy1pbnM6IHZweCAqKioiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIGZvciBwbHVnLWluczogdnB4ICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX1ZQWCIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS12cHggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdnB4K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfdnB4OyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfVlBYPXllczs7Ci0gICAgICBubykgVVNFX1ZQWD1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtdnB4IiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9WUFg9eWVzCi1maQotCi1pZiB0ZXN0ICJ4JE5PVVNFIiA9ICJ4eWVzIjsgdGhlbgotICBVU0VfVlBYPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogdnB4IHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogdnB4IHByZS1jb25maWd1cmVkIG5vdCB0byBiZSBidWlsdCIgPiYyO30KLWZpCi1OT1VTRT0KLQotaWYgZWNobyAiICRHU1RfUExVR0lOU19OT05QT1JURUQgIiB8IHRyICwgJyAnIHwgZ3JlcCAtaSAiIFZQWCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9WUFg9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiB2cHggbm90IHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAqKiogdnB4IG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfVlBYID0geHllczsgdGhlbgotCi0gIGdzdF9jaGVja19zYXZlX0xJQlM9JExJQlMKLSAgZ3N0X2NoZWNrX3NhdmVfTERGTEFHUz0kTERGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCi0KLSAgSEFWRV9WUFg9bm8KLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBWUFgiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFZQWC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVlBYX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1ZQWF9DRkxBR1M9IiRWUFhfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwidnB4ID49IDEuMS4wXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInZweCA+PSAxLjEuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9WUFhfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAidnB4ID49IDEuMS4wIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gICAgZmkKLWVsc2UKLQlwa2dfZmFpbGVkPXVudHJpZWQKLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVlBYX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9WUFhfTElCUz0iJFZQWF9MSUJTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwidnB4ID49IDEuMS4wXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInZweCA+PSAxLjEuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9WUFhfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJ2cHggPj0gMS4xLjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgVlBYX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAidnB4ID49IDEuMS4wImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgVlBYX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAidnB4ID49IDEuMS4wImAKLSAgICAgICAgZmkKLQkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKLQllY2hvICIkVlBYX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgSEFWRV9WUFg9Im5vIgotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCUhBVkVfVlBYPSJubyIKLWVsc2UKLQlWUFhfQ0ZMQUdTPSRwa2dfY3ZfVlBYX0NGTEFHUwotCVZQWF9MSUJTPSRwa2dfY3ZfVlBYX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQlIQVZFX1ZQWD0ieWVzIgotZmkKLSAgSEFWRV9WUDg9bm8KLSAgSEFWRV9WUDk9bm8KLQotICBpZiB0ZXN0ICRIQVZFX1ZQWCA9ICJ5ZXMiOyB0aGVuCi0gICAgT0xEX0xJQlM9IiRMSUJTIgotICAgIE9MRF9DRkxBR1M9IiRDRkxBR1MiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTICRWUFhfQ0ZMQUdTIgotICAgIExJQlM9IiRMSUJTICRWUFhfTElCUyIKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB2cHhfY29kZWNfdnA4X2N4X2FsZ28gaW4gLWx2cHgiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHZweF9jb2RlY192cDhfY3hfYWxnbyBpbiAtbHZweC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDhfY3hfYWxnbys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sdnB4ICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciB2cHhfY29kZWNfdnA4X2N4X2FsZ28gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiB2cHhfY29kZWNfdnA4X2N4X2FsZ28gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA4X2N4X2FsZ289eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOF9jeF9hbGdvPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOF9jeF9hbGdvIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA4X2N4X2FsZ28iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDhfY3hfYWxnbyIgPSB4eWVzOyB0aGVuIDoKLQotICAgICAgSEFWRV9WUDg9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfVlA4X0VOQ09ERVIgMSIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHZweF9jb2RlY192cDhfZHhfYWxnbyBpbiAtbHZweCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgdnB4X2NvZGVjX3ZwOF9keF9hbGdvIGluIC1sdnB4Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOF9keF9hbGdvKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWx2cHggICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIHZweF9jb2RlY192cDhfZHhfYWxnbyAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIHZweF9jb2RlY192cDhfZHhfYWxnbyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDhfZHhfYWxnbz15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA4X2R4X2FsZ289bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA4X2R4X2FsZ28iID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDhfZHhfYWxnbyIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOF9keF9hbGdvIiA9IHh5ZXM7IHRoZW4gOgotCi0gICAgICBIQVZFX1ZQOD15ZXMKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9WUDhfREVDT0RFUiAxIiA+PmNvbmZkZWZzLmgKLQotCi1maQotCi0KLQotcGtnX2ZhaWxlZD1ubwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgVlBYXzEzMCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgVlBYXzEzMC4uLiAiID4mNjsgfQotCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLSAgICBpZiB0ZXN0IC1uICIkVlBYXzEzMF9DRkxBR1MiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9WUFhfMTMwX0NGTEFHUz0iJFZQWF8xMzBfQ0ZMQUdTIgotICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwidnB4ID49IDEuMy4wXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInZweCA+PSAxLjMuMCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9WUFhfMTMwX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgInZweCA+PSAxLjMuMCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFZQWF8xMzBfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1ZQWF8xMzBfTElCUz0iJFZQWF8xMzBfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcInZweCA+PSAxLjMuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJ2cHggPj0gMS4zLjAiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfVlBYXzEzMF9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgInZweCA+PSAxLjMuMCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotCi0KLQotaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgotCi1pZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCi1lbHNlCi0gICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwotZmkKLSAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBWUFhfMTMwX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tZXJyb3JzLXRvLXN0ZG91dCAtLXByaW50LWVycm9ycyAidnB4ID49IDEuMy4wImAKLSAgICAgICAgZWxzZQotCSAgICAgICAgVlBYXzEzMF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgInZweCA+PSAxLjMuMCJgCi0gICAgICAgIGZpCi0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCi0JZWNobyAiJFZQWF8xMzBfUEtHX0VSUk9SUyIgPiY1Ci0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICAgICAgICAgICB0cnVlCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0JdHJ1ZQotZWxzZQotCVZQWF8xMzBfQ0ZMQUdTPSRwa2dfY3ZfVlBYXzEzMF9DRkxBR1MKLQlWUFhfMTMwX0xJQlM9JHBrZ19jdl9WUFhfMTMwX0xJQlMKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdnB4X2NvZGVjX3ZwOV9jeF9hbGdvIGluIC1sdnB4IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB2cHhfY29kZWNfdnA5X2N4X2FsZ28gaW4gLWx2cHguLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA5X2N4X2FsZ28rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHZweCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgdnB4X2NvZGVjX3ZwOV9jeF9hbGdvICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gdnB4X2NvZGVjX3ZwOV9jeF9hbGdvICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOV9jeF9hbGdvPXllcwotZWxzZQotICBhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDlfY3hfYWxnbz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDlfY3hfYWxnbyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOV9jeF9hbGdvIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA5X2N4X2FsZ28iID0geHllczsgdGhlbiA6Ci0KLSAgICAgICAgSEFWRV9WUDk9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfVlA5X0VOQ09ERVIgMSIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdnB4X2NvZGVjX3ZwOV9keF9hbGdvIGluIC1sdnB4IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB2cHhfY29kZWNfdnA5X2R4X2FsZ28gaW4gLWx2cHguLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA5X2R4X2FsZ28rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHZweCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgdnB4X2NvZGVjX3ZwOV9keF9hbGdvICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gdnB4X2NvZGVjX3ZwOV9keF9hbGdvICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOV9keF9hbGdvPXllcwotZWxzZQotICBhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDlfZHhfYWxnbz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdnB4X3ZweF9jb2RlY192cDlfZHhfYWxnbyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl92cHhfdnB4X2NvZGVjX3ZwOV9keF9hbGdvIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3ZweF92cHhfY29kZWNfdnA5X2R4X2FsZ28iID0geHllczsgdGhlbiA6Ci0KLSAgICAgICAgSEFWRV9WUDk9eWVzCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfVlA5X0RFQ09ERVIgMSIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQotCi1maQotCi0KLXBrZ19mYWlsZWQ9bm8KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFZQWF8xNDAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFZQWF8xNDAuLi4gIiA+JjY7IH0KLQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFZQWF8xNDBfQ0ZMQUdTIjsgdGhlbgotICAgICAgICBwa2dfY3ZfVlBYXzE0MF9DRkxBR1M9IiRWUFhfMTQwX0NGTEFHUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcInZweCA+PSAxLjQuMFwiIjsgfSA+JjUKLSAgKCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICJ2cHggPj0gMS40LjAiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICBwa2dfY3ZfVlBYXzE0MF9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJ2cHggPj0gMS40LjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRWUFhfMTQwX0xJQlMiOyB0aGVuCi0gICAgICAgIHBrZ19jdl9WUFhfMTQwX0xJQlM9IiRWUFhfMTQwX0xJQlMiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJ2cHggPj0gMS40LjBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAidnB4ID49IDEuNC4wIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1ZQWF8xNDBfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICJ2cHggPj0gMS40LjAiIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgVlBYXzE0MF9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgInZweCA+PSAxLjQuMCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIFZQWF8xNDBfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICJ2cHggPj0gMS40LjAiYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRWUFhfMTQwX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgICAgICAgICAgICAgdHJ1ZQotZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgotCXRydWUKLWVsc2UKLQlWUFhfMTQwX0NGTEFHUz0kcGtnX2N2X1ZQWF8xNDBfQ0ZMQUdTCi0JVlBYXzE0MF9MSUJTPSRwa2dfY3ZfVlBYXzE0MF9MSUJTCi0gICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9WUFhfMV80IDEiID4+Y29uZmRlZnMuaAotCi0KLWZpCi0KLSAgICBMSUJTPSIkT0xEX0xJQlMiCi0gICAgQ0ZMQUdTPSIkT0xEX0NGTEFHUyIKLSAgZmkKLQotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfVlBYID0geG5vOyB0aGVuCi0gICAgVVNFX1ZQWD1ubwotICBlbHNlCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIGJlIGJ1aWx0OiB2cHgiID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogdnB4IiA+JjY7fQotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfVlBYID0geHllczsgdGhlbgotICA6Ci0gIGlmIHRlc3QgInh2cHgiICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHR2cHhcbiRHU1RfUExVR0lOU19ZRVMiCi0gIGZpCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfVlBYIC8qKi8iID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBub3QgYmUgYnVpbHQ6IHZweCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogdnB4IiA+JjY7fQotICBpZiB0ZXN0ICJ4dnB4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHR2cHhcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1ZQWCA9IHh5ZXM7IHRoZW4KLSAgVVNFX1ZQWF9UUlVFPQotICBVU0VfVlBYX0ZBTFNFPScjJwotZWxzZQotICBVU0VfVlBYX1RSVUU9JyMnCi0gIFVTRV9WUFhfRkFMU0U9Ci1maQotCi0KLQotZWNobwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogY2hlY2tpbmcgZmVhdHVyZTogd2F2cGFjayBwbHVnLWluICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogd2F2cGFjayBwbHVnLWluICoqKiIgPiY2O30KLWlmIHRlc3QgInh3YXZwYWNrIiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiB3YXZwYWNrICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiB3YXZwYWNrICoqKiIgPiY2O30KLWZpCi1OT1VTRT0KLWlmIHRlc3QgIngkVVNFX1dBVlBBQ0siID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd2F2cGFjayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV93YXZwYWNrK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfd2F2cGFjazsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX1dBVlBBQ0s9eWVzOzsKLSAgICAgIG5vKSBVU0VfV0FWUEFDSz1ubzs7Ci0gICAgICAqKSBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtd2F2cGFjayIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfV0FWUEFDSz15ZXMKLWZpCi0KLWlmIHRlc3QgIngkTk9VU0UiID0gInh5ZXMiOyB0aGVuCi0gIFVTRV9XQVZQQUNLPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogd2F2cGFjayBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqIHdhdnBhY2sgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgV0FWUEFDSyAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9XQVZQQUNLPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogd2F2cGFjayBub3QgcG9ydGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiB3YXZwYWNrIG5vdCBwb3J0ZWQiID4mMjt9Ci1maQotCi0KLWlmIHRlc3QgeCRVU0VfV0FWUEFDSyA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfV0FWUEFDSz1ubwotCi0KLSAgd2hpY2g9IndhdnBhY2sgPj0gNC42MC4wIgotICAgIHJlcXVpcmVkPSJubyIKLQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBXQVZQQUNLIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBXQVZQQUNLLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRXQVZQQUNLX0NGTEFHUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1dBVlBBQ0tfQ0ZMQUdTPSIkV0FWUEFDS19DRkxBR1MiCi0gICAgZWxzZQotICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAotICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgXCJcJHdoaWNoXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiR3aGljaCIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gIHBrZ19jdl9XQVZQQUNLX0NGTEFHUz1gJFBLR19DT05GSUcgLS1jZmxhZ3MgIiR3aGljaCIgMj4vZGV2L251bGxgCi1lbHNlCi0gIHBrZ19mYWlsZWQ9eWVzCi1maQotICAgIGZpCi1lbHNlCi0JcGtnX2ZhaWxlZD11bnRyaWVkCi1maQotaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAtbiAiJFdBVlBBQ0tfTElCUyI7IHRoZW4KLSAgICAgICAgcGtnX2N2X1dBVlBBQ0tfTElCUz0iJFdBVlBBQ0tfTElCUyIKLSAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcIlwkd2hpY2hcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJHdoaWNoIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X1dBVlBBQ0tfTElCUz1gJFBLR19DT05GSUcgLS1saWJzICIkd2hpY2giIDI+L2Rldi9udWxsYAotZWxzZQotICBwa2dfZmFpbGVkPXllcwotZmkKLSAgICBmaQotZWxzZQotCXBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KLQotaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KLWZpCi0gICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgotCSAgICAgICAgV0FWUEFDS19QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLWVycm9ycy10by1zdGRvdXQgLS1wcmludC1lcnJvcnMgIiR3aGljaCJgCi0gICAgICAgIGVsc2UKLQkgICAgICAgIFdBVlBBQ0tfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1lcnJvcnMtdG8tc3Rkb3V0IC0tcHJpbnQtZXJyb3JzICIkd2hpY2giYAotICAgICAgICBmaQotCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cgd2hlcmUgaXQgYmVsb25ncwotCWVjaG8gIiRXQVZQQUNLX1BLR19FUlJPUlMiID4mNQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLSAgICAgIEhBVkVfV0FWUEFDSz0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJFdBVlBBQ0tfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkV0FWUEFDS19QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRXQVZQQUNLX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVuCi0KLSAgICAgIEhBVkVfV0FWUEFDSz0ibm8iCi0gICAgICBpZiB0ZXN0ICJ4JHJlcXVpcmVkIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICBhc19mbl9lcnJvciAkPyAiJFdBVlBBQ0tfUEtHX0VSUk9SUyIgIiRMSU5FTk8iIDUKLSAgICAgIGVsc2UKLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkV0FWUEFDS19QS0dfRVJST1JTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRXQVZQQUNLX1BLR19FUlJPUlMiID4mNjt9Ci0gICAgICBmaQotCi1lbHNlCi0JV0FWUEFDS19DRkxBR1M9JHBrZ19jdl9XQVZQQUNLX0NGTEFHUwotCVdBVlBBQ0tfTElCUz0kcGtnX2N2X1dBVlBBQ0tfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0gICAgICBIQVZFX1dBVlBBQ0s9InllcyIKLQotZmkKLQotCi0KLQotICBMSUJTPSRnc3RfY2hlY2tfc2F2ZV9MSUJTCi0gIExERkxBR1M9JGdzdF9jaGVja19zYXZlX0xERkxBR1MKLSAgQ0ZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DRkxBR1MKLSAgQ1BQRkxBR1M9JGdzdF9jaGVja19zYXZlX0NQUEZMQUdTCi0gIENYWEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUwotCi0gICAgaWYgdGVzdCB4JEhBVkVfV0FWUEFDSyA9IHhubzsgdGhlbgotICAgIFVTRV9XQVZQQUNLPW5vCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBUaGVzZSBwbHVnaW5zIHdpbGwgYmUgYnVpbHQ6IHdhdnBhY2siID4mNQotJGFzX2VjaG8gIiRhc19tZTogKioqIFRoZXNlIHBsdWdpbnMgd2lsbCBiZSBidWlsdDogd2F2cGFjayIgPiY2O30KLSAgZmkKLWZpCi1pZiB0ZXN0IHgkVVNFX1dBVlBBQ0sgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieHdhdnBhY2siICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX1lFUz0iXHR3YXZwYWNrXG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1dBVlBBQ0sgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogd2F2cGFjayIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogVGhlc2UgcGx1Z2lucyB3aWxsIG5vdCBiZSBidWlsdDogd2F2cGFjayIgPiY2O30KLSAgaWYgdGVzdCAieHdhdnBhY2siICE9ICJ4IjsgdGhlbgotICAgIEdTVF9QTFVHSU5TX05PPSJcdHdhdnBhY2tcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1dBVlBBQ0sgPSB4eWVzOyB0aGVuCi0gIFVTRV9XQVZQQUNLX1RSVUU9Ci0gIFVTRV9XQVZQQUNLX0ZBTFNFPScjJwotZWxzZQotICBVU0VfV0FWUEFDS19UUlVFPScjJwotICBVU0VfV0FWUEFDS19GQUxTRT0KLWZpCi0KLQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiB6bGliIHN1cHBvcnQgZm9yIHF0ZGVtdXgvbWF0cm9za2EgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBjaGVja2luZyBmZWF0dXJlOiB6bGliIHN1cHBvcnQgZm9yIHF0ZGVtdXgvbWF0cm9za2EgKioqIiA+JjY7fQotaWYgdGVzdCAieCIgIT0gIngiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogKioqIGZvciBwbHVnLWluczogICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogZm9yIHBsdWctaW5zOiAgKioqIiA+JjY7fQotZmkKLU5PVVNFPQotaWYgdGVzdCAieCRVU0VfWkxJQiIgPSAieG5vIjsgdGhlbgotICBOT1VTRT0ieWVzIgotZmkKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS16bGliIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3psaWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV96bGliOyAgY2FzZSAiJHtlbmFibGV2YWx9IiBpbgotICAgICAgeWVzKSBVU0VfWkxJQj15ZXM7OwotICAgICAgbm8pIFVTRV9aTElCPW5vOzsKLSAgICAgICopIGFzX2ZuX2Vycm9yICQ/ICJiYWQgdmFsdWUgJHtlbmFibGV2YWx9IGZvciAtLWVuYWJsZS16bGliIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLWVsc2UKLSAgIFVTRV9aTElCPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX1pMSUI9Im5vIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICoqKiAgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICoqKiAgcHJlLWNvbmZpZ3VyZWQgbm90IHRvIGJlIGJ1aWx0IiA+JjI7fQotZmkKLU5PVVNFPQotCi1pZiBlY2hvICIgJEdTVF9QTFVHSU5TX05PTlBPUlRFRCAiIHwgdHIgLCAnICcgfCBncmVwIC1pICIgWkxJQiAiID4gL2Rldi9udWxsOyB0aGVuCi0gIFVTRV9aTElCPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqICBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX1pMSUIgPSB4eWVzOyB0aGVuCi0KLSAgZ3N0X2NoZWNrX3NhdmVfTElCUz0kTElCUwotICBnc3RfY2hlY2tfc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUwotICBnc3RfY2hlY2tfc2F2ZV9DWFhGTEFHUz0kQ1hYRkxBR1MKLQotICBIQVZFX1pMSUI9bm8KLQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVuY29tcHJlc3MgaW4gLWx6IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB1bmNvbXByZXNzIGluIC1sei4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfel91bmNvbXByZXNzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWx6ICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciB1bmNvbXByZXNzICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gdW5jb21wcmVzcyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfel91bmNvbXByZXNzPXllcwotZWxzZQotICBhY19jdl9saWJfel91bmNvbXByZXNzPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl96X3VuY29tcHJlc3MiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfel91bmNvbXByZXNzIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3pfdW5jb21wcmVzcyIgPSB4eWVzOyB0aGVuIDoKLSAgSEFWRV9aTElCPXllcwotZWxzZQotICBIQVZFX1pMSUI9bm8KLWZpCi0KLSAgaWYgdGVzdCAieCRIQVZFX1pMSUIiID0gInh5ZXMiOyB0aGVuCi0gICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInpsaWIuaCIgImFjX2N2X2hlYWRlcl96bGliX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3psaWJfaCIgPSB4eWVzOyB0aGVuIDoKLSAgOgotZWxzZQotICBIQVZFX1pMSUI9bm8KLWZpCi0KLQotICAgIGlmIHRlc3QgIngkSEFWRV9aTElCIiA9ICJ4eWVzIjsgdGhlbgotCi0gICAgSEFWRV9aTElCPSJ5ZXMiCi0gICAgWkxJQl9MSUJTPSItbHoiCi0KLQotICAgIGVsc2UKLSAgICAgIDoKLSAgICBmaQotICBlbHNlCi0gICAgOgotICBmaQotCi0KLQotCi0KLSAgTElCUz0kZ3N0X2NoZWNrX3NhdmVfTElCUwotICBMREZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9MREZMQUdTCi0gIENGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTCi0gIENQUEZMQUdTPSRnc3RfY2hlY2tfc2F2ZV9DUFBGTEFHUwotICBDWFhGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1hYRkxBR1MKLQotICAgIGlmIHRlc3QgeCRIQVZFX1pMSUIgPSB4bm87IHRoZW4KLSAgICBVU0VfWkxJQj1ubwotICBlbHNlCi0gICAgOgotICBmaQotZmkKLWlmIHRlc3QgeCRVU0VfWkxJQiA9IHh5ZXM7IHRoZW4KLSAgOgotICBpZiB0ZXN0ICJ4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19ZRVM9Ilx0XG4kR1NUX1BMVUdJTlNfWUVTIgotICBmaQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1pMSUIgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgOgotICBpZiB0ZXN0ICJ4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX1pMSUIgPSB4eWVzOyB0aGVuCi0gIFVTRV9aTElCX1RSVUU9Ci0gIFVTRV9aTElCX0ZBTFNFPScjJwotZWxzZQotICBVU0VfWkxJQl9UUlVFPScjJwotICBVU0VfWkxJQl9GQUxTRT0KLWZpCi0KLQotCi1lY2hvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICoqKiBjaGVja2luZyBmZWF0dXJlOiBiejIgbGlicmFyeSBmb3IgbWF0cm9za2EgICoqKiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAqKiogY2hlY2tpbmcgZmVhdHVyZTogYnoyIGxpYnJhcnkgZm9yIG1hdHJvc2thICAqKioiID4mNjt9Ci1pZiB0ZXN0ICJ4IiAhPSAieCIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAqKiogZm9yIHBsdWctaW5zOiAgKioqIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICoqKiBmb3IgcGx1Zy1pbnM6ICAqKioiID4mNjt9Ci1maQotTk9VU0U9Ci1pZiB0ZXN0ICJ4JFVTRV9CWjIiID0gInhubyI7IHRoZW4KLSAgTk9VU0U9InllcyIKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYnoyIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2J6MitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2J6MjsgIGNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KLSAgICAgIHllcykgVVNFX0JaMj15ZXM7OwotICAgICAgbm8pIFVTRV9CWjI9bm87OwotICAgICAgKikgYXNfZm5fZXJyb3IgJD8gImJhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWJ6MiIgIiRMSU5FTk8iIDUgOzsKLSAgICBlc2FjCi1lbHNlCi0gICBVU0VfQloyPXllcwotZmkKLQotaWYgdGVzdCAieCROT1VTRSIgPSAieHllcyI7IHRoZW4KLSAgVVNFX0JaMj0ibm8iCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogKioqICBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqICBwcmUtY29uZmlndXJlZCBub3QgdG8gYmUgYnVpbHQiID4mMjt9Ci1maQotTk9VU0U9Ci0KLWlmIGVjaG8gIiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEICIgfCB0ciAsICcgJyB8IGdyZXAgLWkgIiBCWjIgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBVU0VfQloyPSJubyIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAqKiogIG5vdCBwb3J0ZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogKioqICBub3QgcG9ydGVkIiA+JjI7fQotZmkKLQotCi1pZiB0ZXN0IHgkVVNFX0JaMiA9IHh5ZXM7IHRoZW4KLQotICBnc3RfY2hlY2tfc2F2ZV9MSUJTPSRMSUJTCi0gIGdzdF9jaGVja19zYXZlX0xERkxBR1M9JExERkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gIGdzdF9jaGVja19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotCi0gIEhBVkVfQloyPW5vCi0KLSAgc2F2ZV9MSUJTPSRMSUJTCi0gIExJQlM9IiRMSUJTIC1sYnoyIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBCWjJfYnpsaWJWZXJzaW9uIGluIC1sYnoyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBCWjJfYnpsaWJWZXJzaW9uIGluIC1sYnoyLi4uICIgPiY2OyB9Ci0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxiemxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1jb25zdCBjaGFyICp2ZXJzaW9uID0gQloyX2J6bGliVmVyc2lvbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBIQVZFX0JaMj15ZXMKLWVsc2UKLSAgSEFWRV9CWjI9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEhBVkVfQloyIiA+JjUKLSRhc19lY2hvICIkSEFWRV9CWjIiID4mNjsgfQotICBMSUJTPSRzYXZlX0xJQlMKLSAgaWYgdGVzdCAieCRIQVZFX0JaMiIgPSAieHllcyI7IHRoZW4KLSAgICBCWjJfTElCUz0iLWxiejIiCi0gIGZpCi0KLQotCi0gIExJQlM9JGdzdF9jaGVja19zYXZlX0xJQlMKLSAgTERGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfTERGTEFHUwotICBDRkxBR1M9JGdzdF9jaGVja19zYXZlX0NGTEFHUwotICBDUFBGTEFHUz0kZ3N0X2NoZWNrX3NhdmVfQ1BQRkxBR1MKLSAgQ1hYRkxBR1M9JGdzdF9jaGVja19zYXZlX0NYWEZMQUdTCi0KLSAgICBpZiB0ZXN0IHgkSEFWRV9CWjIgPSB4bm87IHRoZW4KLSAgICBVU0VfQloyPW5vCi0gIGVsc2UKLSAgICA6Ci0gIGZpCi1maQotaWYgdGVzdCB4JFVTRV9CWjIgPSB4eWVzOyB0aGVuCi0gIDoKLSAgaWYgdGVzdCAieCIgIT0gIngiOyB0aGVuCi0gICAgR1NUX1BMVUdJTlNfWUVTPSJcdFxuJEdTVF9QTFVHSU5TX1lFUyIKLSAgZmkKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9CWjIgLyoqLyIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgOgotICBpZiB0ZXN0ICJ4IiAhPSAieCI7IHRoZW4KLSAgICBHU1RfUExVR0lOU19OTz0iXHRcbiRHU1RfUExVR0lOU19OTyIKLSAgZmkKLSAgOgotZmkKLSBpZiB0ZXN0IHgkVVNFX0JaMiA9IHh5ZXM7IHRoZW4KLSAgVVNFX0JaMl9UUlVFPQotICBVU0VfQloyX0ZBTFNFPScjJwotZWxzZQotICBVU0VfQloyX1RSVUU9JyMnCi0gIFVTRV9CWjJfRkFMU0U9Ci1maQotCi0KLQotZWxzZQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX0FBTElCX1RSVUU9Ci0gIFVTRV9BQUxJQl9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0FBTElCX1RSVUU9JyMnCi0gIFVTRV9BQUxJQl9GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfQloyX1RSVUU9Ci0gIFVTRV9CWjJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9CWjJfVFJVRT0nIycKLSAgVVNFX0JaMl9GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfQ0FJUk9fVFJVRT0KLSAgVVNFX0NBSVJPX0ZBTFNFPScjJwotZWxzZQotICBVU0VfQ0FJUk9fVFJVRT0nIycKLSAgVVNFX0NBSVJPX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9ESVJFQ1RTT1VORF9UUlVFPQotICBVU0VfRElSRUNUU09VTkRfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9ESVJFQ1RTT1VORF9UUlVFPScjJwotICBVU0VfRElSRUNUU09VTkRfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX0RWMTM5NF9UUlVFPQotICBVU0VfRFYxMzk0X0ZBTFNFPScjJwotZWxzZQotICBVU0VfRFYxMzk0X1RSVUU9JyMnCi0gIFVTRV9EVjEzOTRfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX0ZMQUNfVFJVRT0KLSAgVVNFX0ZMQUNfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9GTEFDX1RSVUU9JyMnCi0gIFVTRV9GTEFDX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9HREtfUElYQlVGX1RSVUU9Ci0gIFVTRV9HREtfUElYQlVGX0ZBTFNFPScjJwotZWxzZQotICBVU0VfR0RLX1BJWEJVRl9UUlVFPScjJwotICBVU0VfR0RLX1BJWEJVRl9GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfSkFDS19UUlVFPQotICBVU0VfSkFDS19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX0pBQ0tfVFJVRT0nIycKLSAgVVNFX0pBQ0tfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX0pQRUdfVFJVRT0KLSAgVVNFX0pQRUdfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9KUEVHX1RSVUU9JyMnCi0gIFVTRV9KUEVHX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9MSUJDQUNBX1RSVUU9Ci0gIFVTRV9MSUJDQUNBX0ZBTFNFPScjJwotZWxzZQotICBVU0VfTElCQ0FDQV9UUlVFPScjJwotICBVU0VfTElCQ0FDQV9GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfTElCRFZfVFJVRT0KLSAgVVNFX0xJQkRWX0ZBTFNFPScjJwotZWxzZQotICBVU0VfTElCRFZfVFJVRT0nIycKLSAgVVNFX0xJQkRWX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9MSUJJRUM2MTg4M19UUlVFPQotICBVU0VfTElCSUVDNjE4ODNfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9MSUJJRUM2MTg4M19UUlVFPScjJwotICBVU0VfTElCSUVDNjE4ODNfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX0xJQlBOR19UUlVFPQotICBVU0VfTElCUE5HX0ZBTFNFPScjJwotZWxzZQotICBVU0VfTElCUE5HX1RSVUU9JyMnCi0gIFVTRV9MSUJQTkdfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX09TU19UUlVFPQotICBVU0VfT1NTX0ZBTFNFPScjJwotZWxzZQotICBVU0VfT1NTX1RSVUU9JyMnCi0gIFVTRV9PU1NfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX09TUzRfVFJVRT0KLSAgVVNFX09TUzRfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9PU1M0X1RSVUU9JyMnCi0gIFVTRV9PU1M0X0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9PU1hfQVVESU9fVFJVRT0KLSAgVVNFX09TWF9BVURJT19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX09TWF9BVURJT19UUlVFPScjJwotICBVU0VfT1NYX0FVRElPX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9PU1hfVklERU9fVFJVRT0KLSAgVVNFX09TWF9WSURFT19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX09TWF9WSURFT19UUlVFPScjJwotICBVU0VfT1NYX1ZJREVPX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9QVUxTRV9UUlVFPQotICBVU0VfUFVMU0VfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9QVUxTRV9UUlVFPScjJwotICBVU0VfUFVMU0VfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX1NIT1VUMl9UUlVFPQotICBVU0VfU0hPVVQyX0ZBTFNFPScjJwotZWxzZQotICBVU0VfU0hPVVQyX1RSVUU9JyMnCi0gIFVTRV9TSE9VVDJfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX1NPVVBfVFJVRT0KLSAgVVNFX1NPVVBfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9TT1VQX1RSVUU9JyMnCi0gIFVTRV9TT1VQX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9TUEVFWF9UUlVFPQotICBVU0VfU1BFRVhfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9TUEVFWF9UUlVFPScjJwotICBVU0VfU1BFRVhfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX1NVTkFVRElPX1RSVUU9Ci0gIFVTRV9TVU5BVURJT19GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1NVTkFVRElPX1RSVUU9JyMnCi0gIFVTRV9TVU5BVURJT19GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfVEFHTElCX1RSVUU9Ci0gIFVTRV9UQUdMSUJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9UQUdMSUJfVFJVRT0nIycKLSAgVVNFX1RBR0xJQl9GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfVlBYX1RSVUU9Ci0gIFVTRV9WUFhfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9WUFhfVFJVRT0nIycKLSAgVVNFX1ZQWF9GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfV0FWRUZPUk1fVFJVRT0KLSAgVVNFX1dBVkVGT1JNX0ZBTFNFPScjJwotZWxzZQotICBVU0VfV0FWRUZPUk1fVFJVRT0nIycKLSAgVVNFX1dBVkVGT1JNX0ZBTFNFPQotZmkKLQotIGlmIGZhbHNlOyB0aGVuCi0gIFVTRV9XQVZQQUNLX1RSVUU9Ci0gIFVTRV9XQVZQQUNLX0ZBTFNFPScjJwotZWxzZQotICBVU0VfV0FWUEFDS19UUlVFPScjJwotICBVU0VfV0FWUEFDS19GQUxTRT0KLWZpCi0KLSBpZiBmYWxzZTsgdGhlbgotICBVU0VfWF9UUlVFPQotICBVU0VfWF9GQUxTRT0nIycKLWVsc2UKLSAgVVNFX1hfVFJVRT0nIycKLSAgVVNFX1hfRkFMU0U9Ci1maQotCi0gaWYgZmFsc2U7IHRoZW4KLSAgVVNFX1pMSUJfVFJVRT0KLSAgVVNFX1pMSUJfRkFMU0U9JyMnCi1lbHNlCi0gIFVTRV9aTElCX1RSVUU9JyMnCi0gIFVTRV9aTElCX0ZBTFNFPQotZmkKLQotCi1maQotCi0KLWlmIHRlc3QgIngkVVNFX0RFQlVHIiA9IHh5ZXM7IHRoZW4KLSAgIFBST0ZJTEVfQ0ZMQUdTPSItZyIKLWZpCi0KLQotaWYgdGVzdCAieCRQQUNLQUdFX1ZFUlNJT05fTkFOTyIgPSAieDEiOyB0aGVuCi0gICAgREVQUkVDQVRFRF9DRkxBR1M9Ii1ER1NUX0RJU0FCTEVfREVQUkVDQVRFRCIKLWVsc2UKLSAgREVQUkVDQVRFRF9DRkxBR1M9IiIKLWZpCi0KLQotR1NUX09QVElPTl9DRkxBR1M9IlwkKFdBUk5JTkdfQ0ZMQUdTKSBcJChFUlJPUl9DRkxBR1MpIFwkKERFQlVHX0NGTEFHUykgXCQoUFJPRklMRV9DRkxBR1MpIFwkKEdDT1ZfQ0ZMQUdTKSBcJChPUFRfQ0ZMQUdTKSBcJChERVBSRUNBVEVEX0NGTEFHUykiCi1HU1RfT1BUSU9OX0NYWEZMQUdTPSJcJChXQVJOSU5HX0NYWEZMQUdTKSBcJChFUlJPUl9DWFhGTEFHUykgXCQoREVCVUdfQ0ZMQUdTKSBcJChQUk9GSUxFX0NGTEFHUykgXCQoR0NPVl9DRkxBR1MpIFwkKE9QVF9DRkxBR1MpIFwkKERFUFJFQ0FURURfQ0ZMQUdTKSIKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTPSJcJChXQVJOSU5HX09CSkNGTEFHUykgXCQoRVJST1JfT0JKQ0ZMQUdTKSBcJChERUJVR19DRkxBR1MpIFwkKFBST0ZJTEVfQ0ZMQUdTKSBcJChHQ09WX0NGTEFHUykgXCQoT1BUX0NGTEFHUykgXCQoREVQUkVDQVRFRF9DRkxBR1MpIgotCi0KLQotCi0KLQotR1NUX0NGTEFHUz0iJEdTVF9DRkxBR1MgLURHU1RfVVNFX1VOU1RBQkxFX0FQSSIKLUdTVF9DWFhGTEFHUz0iLUlcJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyAkR1NUX0NGTEFHUyAkR0xJQl9FWFRSQV9DRkxBR1MgXCQoR1NUX09QVElPTl9DWFhGTEFHUykiCi1HU1RfT0JKQ0ZMQUdTPSItSVwkKHRvcF9zcmNkaXIpL2dzdC1saWJzICRHU1RfQ0ZMQUdTICRHTElCX0VYVFJBX0NGTEFHUyBcJChHU1RfT1BUSU9OX09CSkNGTEFHUykiCi1HU1RfQ0ZMQUdTPSItSVwkKHRvcF9zcmNkaXIpL2dzdC1saWJzICRHU1RfQ0ZMQUdTICRHTElCX0VYVFJBX0NGTEFHUyBcJChHU1RfT1BUSU9OX0NGTEFHUykiCi0KLQotCi0KLQotR1NUX0FMTF9MREZMQUdTPSItbm8tdW5kZWZpbmVkIgotaWYgdGVzdCAieCR7ZW5hYmxlX0JzeW1ib2xpY30iID0gInh5ZXMiOyB0aGVuCi0gIEdTVF9BTExfTERGTEFHUz0iJEdTVF9BTExfTERGTEFHUyAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMiCi1maQotCi0KLUdTVF9QTFVHSU5fTERGTEFHUz0iLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAtZXhwb3J0LXN5bWJvbHMtcmVnZXggJ15fKmdzdF9wbHVnaW5fLionICRHU1RfQUxMX0xERkxBR1MiCi0KLQotCi0kTUtESVJfUCB0ZXN0cy9jaGVjay9vcmMKLQotYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIGdzdC9NYWtlZmlsZSBnc3QvYWxwaGEvTWFrZWZpbGUgZ3N0L2FwZXRhZy9NYWtlZmlsZSBnc3QvYXVkaW9meC9NYWtlZmlsZSBnc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlIGdzdC9hdXBhcnNlL01ha2VmaWxlIGdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlIGdzdC9hdmkvTWFrZWZpbGUgZ3N0L2N1dHRlci9NYWtlZmlsZSBnc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUgZ3N0L2R0bWYvTWFrZWZpbGUgZ3N0L2RlYnVndXRpbHMvTWFrZWZpbGUgZ3N0L2VmZmVjdHYvTWFrZWZpbGUgZ3N0L2VxdWFsaXplci9NYWtlZmlsZSBnc3QvZmx2L01ha2VmaWxlIGdzdC9nb29tL01ha2VmaWxlIGdzdC9nb29tMmsxL01ha2VmaWxlIGdzdC9pZDNkZW11eC9NYWtlZmlsZSBnc3QvaWN5ZGVtdXgvTWFrZWZpbGUgZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlIGdzdC9pbnRlcmxlYXZlL01ha2VmaWxlIGdzdC9pc29tcDQvTWFrZWZpbGUgZ3N0L2xhdy9NYWtlZmlsZSBnc3QvbGV2ZWwvTWFrZWZpbGUgZ3N0L21hdHJvc2thL01ha2VmaWxlIGdzdC9tb25vc2NvcGUvTWFrZWZpbGUgZ3N0L211bHRpZmlsZS9NYWtlZmlsZSBnc3QvbXVsdGlwYXJ0L01ha2VmaWxlIGdzdC9yZXBsYXlnYWluL01ha2VmaWxlIGdzdC9ydHAvTWFrZWZpbGUgZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUgZ3N0L3J0c3AvTWFrZWZpbGUgZ3N0L3NoYXBld2lwZS9NYWtlZmlsZSBnc3Qvc21wdGUvTWFrZWZpbGUgZ3N0L3NwZWN0cnVtL01ha2VmaWxlIGdzdC91ZHAvTWFrZWZpbGUgZ3N0L3ZpZGVvYm94L01ha2VmaWxlIGdzdC92aWRlb2Nyb3AvTWFrZWZpbGUgZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlIGdzdC92aWRlb21peGVyL01ha2VmaWxlIGdzdC93YXZlbmMvTWFrZWZpbGUgZ3N0L3dhdnBhcnNlL01ha2VmaWxlIGdzdC9mbHgvTWFrZWZpbGUgZ3N0L3k0bS9NYWtlZmlsZSBleHQvTWFrZWZpbGUgZXh0L2FhbGliL01ha2VmaWxlIGV4dC9jYWlyby9NYWtlZmlsZSBleHQvZHYvTWFrZWZpbGUgZXh0L2ZsYWMvTWFrZWZpbGUgZXh0L2dka19waXhidWYvTWFrZWZpbGUgZXh0L2phY2svTWFrZWZpbGUgZXh0L2pwZWcvTWFrZWZpbGUgZXh0L2xpYmNhY2EvTWFrZWZpbGUgZXh0L2xpYnBuZy9NYWtlZmlsZSBleHQvcHVsc2UvTWFrZWZpbGUgZXh0L3JhdzEzOTQvTWFrZWZpbGUgZXh0L3Nob3V0Mi9NYWtlZmlsZSBleHQvc291cC9NYWtlZmlsZSBleHQvc3BlZXgvTWFrZWZpbGUgZXh0L3RhZ2xpYi9NYWtlZmlsZSBleHQvdnB4L01ha2VmaWxlIGV4dC93YXZwYWNrL01ha2VmaWxlIHN5cy9NYWtlZmlsZSBzeXMvZGlyZWN0c291bmQvTWFrZWZpbGUgc3lzL29zcy9NYWtlZmlsZSBzeXMvb3NzNC9NYWtlZmlsZSBzeXMvb3N4YXVkaW8vTWFrZWZpbGUgc3lzL29zeHZpZGVvL01ha2VmaWxlIHN5cy9zdW5hdWRpby9NYWtlZmlsZSBzeXMvdjRsMi9NYWtlZmlsZSBzeXMvd2F2ZWZvcm0vTWFrZWZpbGUgc3lzL3hpbWFnZS9NYWtlZmlsZSBwby9NYWtlZmlsZS5pbiB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9jaGVjay9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL2xldmVsL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlIHRlc3RzL2V4YW1wbGVzL3J0cC9NYWtlZmlsZSB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvc3BlY3RydW0vTWFrZWZpbGUgdGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZSB0ZXN0cy9maWxlcy9NYWtlZmlsZSB0ZXN0cy9pY2xlcy9NYWtlZmlsZSBjb21tb24vTWFrZWZpbGUgY29tbW9uL200L01ha2VmaWxlIG00L01ha2VmaWxlIGRvY3MvTWFrZWZpbGUgZG9jcy9wbHVnaW5zL01ha2VmaWxlIGRvY3MvdmVyc2lvbi5lbnRpdGllcyBwa2djb25maWcvTWFrZWZpbGUgcGtnY29uZmlnL2dzdHJlYW1lci1wbHVnaW5zLWdvb2QtdW5pbnN0YWxsZWQucGMgZ3N0LXBsdWdpbnMtZ29vZC5zcGVjIgotCi0KLXNlZCBcCi0gICAgLWUgJ3MvLipjb25maWcuaC5pbi4qYXV0b2hlYWRlci4qL1wvKiBBdXRvZ2VuZXJhdGVkIGNvbmZpZy5oIGNyZWF0ZWQgZm9yIHdpbjMyIFZpc3VhbCBTdHVkaW8gYnVpbGRzICpcL1xuXG5cLyogUFJFRklYIC0tIHNwZWNpZmljYWxseSBhZGRlZCBmb3IgV2luZG93cyBmb3IgZWFzaWVyIG1vdmluZyAqXC9cbiNkZWZpbmUgUFJFRklYICJDOlxcXFxnc3RyZWFtZXIiXG5cbiNkZWZpbmUgR1NUX0lOU1RBTExfUExVR0lOU19IRUxQRVIgUFJFRklYICJcXFxcbGliZXhlY1xcXFxnc3QtaW5zdGFsbC1wbHVnaW5zLWhlbHBlci5leGUiLycgXAotICAgIC1lICdzLy4qIEdFVFRFWFRfUEFDS0FHRSQvI2RlZmluZSBHRVRURVhUX1BBQ0tBR0UgIickR0VUVEVYVF9QQUNLQUdFJyIvJyBcCi0gICAgLWUgJ3MvLiogR1NUX0RBVEFESVIkLyNkZWZpbmUgR1NUX0RBVEFESVIgUFJFRklYICJcXFxcc2hhcmUiLycgXAotICAgIC1lICdzLy4qIEdTVF9MRVZFTF9ERUZBVUxUJC8jZGVmaW5lIEdTVF9MRVZFTF9ERUZBVUxUIEdTVF9MRVZFTF9FUlJPUi8nIFwKLSAgICAtZSAncy8uKiBHU1RfTElDRU5TRSQvI2RlZmluZSBHU1RfTElDRU5TRSAiJyRHU1RfTElDRU5TRSciLycgXAotICAgIC1lICdzLy4qIEdTVF9BUElfVkVSU0lPTiQvI2RlZmluZSBHU1RfQVBJX1ZFUlNJT04gIickR1NUX0FQSV9WRVJTSU9OJyIvJyBcCi0gICAgLWUgInMsLiogR1NUX1BBQ0tBR0VfTkFNRSQsI2RlZmluZSBHU1RfUEFDS0FHRV9OQU1FIFwiJHtHU1RfUEFDS0FHRV9OQU1FfVwiLCIgXAotICAgIC1lICdzLy4qIEdTVF9QQUNLQUdFX09SSUdJTiQvI2RlZmluZSBHU1RfUEFDS0FHRV9PUklHSU4gIlVua25vd24gcGFja2FnZSBvcmlnaW4iLycgXAotICAgIC1lICJzLC4qIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUkLCNkZWZpbmUgR1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRSBcIiR7R1NUX1BBQ0tBR0VfUkVMRUFTRV9EQVRFVElNRX1cIiwiIFwKLSAgICAtZSAncy8uKiBIQVZFX0NQVV9JMzg2JC8jZGVmaW5lIEhBVkVfQ1BVX0kzODYgMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX0ZHRVRQT1MkLyNkZWZpbmUgSEFWRV9GR0VUUE9TIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9GU0VUUE9TJC8jZGVmaW5lIEhBVkVfRlNFVFBPUyAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfTElCWE1MMiQvI2RlZmluZSBIQVZFX0xJQlhNTDIgMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1BST0NFU1NfSCQvI2RlZmluZSBIQVZFX1BST0NFU1NfSCAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfU1RETElCX0gkLyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfU1RSSU5HX0gkLyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfU1lTX1NUQVRfSCQvI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NZU19UWVBFU19IJC8jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1dJTjMyJC8jZGVmaW5lIEhBVkVfV0lOMzIgMS8nIFwKLSAgICAtZSAncy8uKiBIT1NUX0NQVSQvI2RlZmluZSBIT1NUX0NQVSAiaTY4NiIvJyBcCi0gICAgLWUgJ3MvLiogTElCRElSJC8jaWZkZWYgX0RFQlVHXG4jICBkZWZpbmUgTElCRElSIFBSRUZJWCAiXFxcXGRlYnVnXFxcXGxpYiJcbiNlbHNlXG4jICBkZWZpbmUgTElCRElSIFBSRUZJWCAiXFxcXGxpYiJcbiNlbmRpZi8nIFwKLSAgICAtZSAncy8uKiBMT0NBTEVESVIkLyNkZWZpbmUgTE9DQUxFRElSIFBSRUZJWCAiXFxcXHNoYXJlXFxcXGxvY2FsZSIvJyBcCi0gICAgLWUgInMvLiogUEFDS0FHRSQvI2RlZmluZSBQQUNLQUdFIFwiJFBBQ0tBR0VcIi8iIFwKLSAgICAtZSAncy8uKiBQQUNLQUdFX0JVR1JFUE9SVCQvI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiaHR0cDpcL1wvYnVnemlsbGEuZ25vbWUub3JnXC9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9R1N0cmVhbWVyIi8nIFwKLSAgICAtZSAicy8uKiBQQUNLQUdFX05BTUUkLyNkZWZpbmUgUEFDS0FHRV9OQU1FIFwiJFBBQ0tBR0VfTkFNRVwiLyIgXAotICAgIC1lICJzLy4qIFBBQ0tBR0VfU1RSSU5HJC8jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HIFwiJFBBQ0tBR0VfU1RSSU5HXCIvIiBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRV9UQVJOQU1FJC8jZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJyRQQUNLQUdFX1RBUk5BTUUnIi8nIFwKLSAgICAtZSAncy8uKiBQQUNLQUdFX1ZFUlNJT04kLyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICInJFBBQ0tBR0VfVkVSU0lPTiciLycgXAotICAgIC1lICdzLy4qIFBMVUdJTkRJUiQvI2lmZGVmIF9ERUJVR1xuIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcXFxkZWJ1Z1xcXFxsaWJcXFxcZ3N0cmVhbWVyLTAuMTEiXG4jZWxzZVxuIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcXFxsaWJcXFxcZ3N0cmVhbWVyLTAuMTEiXG4jZW5kaWYvJyBcCi0gICAgLWUgJ3MvLiogVVNFX0JJTkFSWV9SRUdJU1RSWSQvI2RlZmluZSBVU0VfQklOQVJZX1JFR0lTVFJZLycgXAotICAgIC1lICdzLy4qIFZFUlNJT04kLyNkZWZpbmUgVkVSU0lPTiAiJyRWRVJTSU9OJyIvJyBcCi0gICAgLWUgInMvLiogREVGQVVMVF9BVURJT1NJTkskLyNkZWZpbmUgREVGQVVMVF9BVURJT1NJTksgXCJkaXJlY3Rzb3VuZHNpbmtcIi8iIFwKLSAgICAtZSAicy8uKiBERUZBVUxUX0FVRElPU1JDJC8jZGVmaW5lIERFRkFVTFRfQVVESU9TUkMgXCJhdWRpb3Rlc3RzcmNcIi8iIFwKLSAgICAtZSAicy8uKiBERUZBVUxUX1ZJREVPU1JDJC8jZGVmaW5lIERFRkFVTFRfVklERU9TUkMgXCJ2aWRlb3Rlc3RzcmNcIi8iIFwKLSAgICAtZSAicy8uKiBERUZBVUxUX1ZJU1VBTElaRVIkLyNkZWZpbmUgREVGQVVMVF9WSVNVQUxJWkVSIFwiZ29vbVwiLyIgXAotICAgIGNvbmZpZy5oLmluID53aW4zMi9jb21tb24vY29uZmlnLmgtbmV3Ci0KLWNhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgotIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCi0jIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKLSMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCi0jIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0Ci0jIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KLSMKLSMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0Ci0jIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KLSMKLSMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgotIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQotIyBmb2xsb3dpbmcgdmFsdWVzLgotCi1fQUNFT0YKLQotIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLSMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCi0jIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgotIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCi0jIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgotKAotICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCi0gICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCi0gICAgY2FzZSAkYWNfdmFsIGluICMoCi0gICAgKiR7YXNfbmx9KikKLSAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OwotICAgICAgZXNhYwotICAgICAgY2FzZSAkYWNfdmFyIGluICMoCi0gICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCi0gICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAotICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKLSAgICAgIGVzYWMgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICAoc2V0KSAyPiYxIHwKLSAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCi0gICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQotICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQotICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KLSAgICAgIHNlZCAtbiBcCi0JInMvJy8nXFxcXCcnL2c7Ci0JICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCi0gICAgICA7OyAjKAotICAgICopCi0gICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgotICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKLSAgICAgIDs7Ci0gICAgZXNhYyB8Ci0gICAgc29ydAotKSB8Ci0gIHNlZCAnCi0gICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAotICAgICB0IGNsZWFyCi0gICAgIDpjbGVhcgotICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCi0gICAgIHQgZW5kCi0gICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LwotICAgICA6ZW5kJyA+PmNvbmZjYWNoZQotaWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KLSAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgotCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKLSAgICAgIGVsc2UKLSAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAotICAgICAgICAqLyogfCA/OiopCi0JICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCi0JICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAotICAgICAgICAqKQotCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGZpCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQotICBmaQotZmkKLXJtIC1mIGNvbmZjYWNoZQotCi10ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Ci0jIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KLXRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKLQotREVGUz0tREhBVkVfQ09ORklHX0gKLQotYWNfbGlib2Jqcz0KLWFjX2x0bGlib2Jqcz0KLVU9Ci1mb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKLSAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgotICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKLSAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCi0gICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKLSAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCi0gIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCi0gIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJwotZG9uZQotTElCT0JKUz0kYWNfbGlib2JqcwotCi1MVExJQk9CSlM9JGFjX2x0bGlib2JqcwotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhhdCBnZW5lcmF0ZWQgZmlsZXMgYXJlIG5ld2VyIHRoYW4gY29uZmlndXJlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZS4uLiAiID4mNjsgfQotICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KLSAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgotICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKLSAgIGZpCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZG9uZSIgPiY1Ci0kYXNfZWNobyAiZG9uZSIgPiY2OyB9Ci0gaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KLSAgYW1fX0VYRUVYVF9UUlVFPQotICBhbV9fRVhFRVhUX0ZBTFNFPScjJwotZWxzZQotICBhbV9fRVhFRVhUX1RSVUU9JyMnCi0gIGFtX19FWEVFWFRfRkFMU0U9Ci1maQotCi1pZiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9UUlVFfSIgJiYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0dTVF9HQ09WX0VOQUJMRURfVFJVRX0iICYmIHRlc3QgLXogIiR7R1NUX0dDT1ZfRU5BQkxFRF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9HQ09WX0VOQUJMRURcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0JVSUxEX0VYQU1QTEVTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0JVSUxEX0VYQU1QTEVTX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQlVJTERfRVhBTVBMRVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke1VTRV9FWFRFUk5BTF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfRVhURVJOQUxfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfRVhURVJOQUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0JVSUxEX0VYVEVSTkFMX1RSVUV9IiAmJiB0ZXN0IC16ICIke0JVSUxEX0VYVEVSTkFMX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQlVJTERfRVhURVJOQUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke1VTRV9FWFBFUklNRU5UQUxfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0VYUEVSSU1FTlRBTF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9FWFBFUklNRU5UQUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi1pZiB0ZXN0IC16ICIke0JVSUxEX0VYUEVSSU1FTlRBTF9UUlVFfSIgJiYgdGVzdCAteiAiJHtCVUlMRF9FWFBFUklNRU5UQUxfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJCVUlMRF9FWFBFUklNRU5UQUxcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKLWZpCi0KLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfSTM4Nl9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9JMzg2X0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfSTM4NlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfUFBDX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX1BQQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX1BQQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfUFBDNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfUFBDNjRfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9QUEM2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfQUxQSEFfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfQUxQSEFfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9BTFBIQVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfQVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FSQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0FSQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfQVJNX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX0FSTV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX0FSTVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfU1BBUkNfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9DUFVfU1BBUkNfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0NQVV9TUEFSQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfSFBQQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9IUFBBX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfSFBQQVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfTUlQU19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9NSVBTX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfTUlQU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfUzM5MF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9TMzkwX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfUzM5MFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfSUE2NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9JQTY0X0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfSUE2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfTTY4S19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9NNjhLX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfTTY4S1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfWDg2XzY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfQ1BVX1g4Nl82NF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfQ1BVX1g4Nl82NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfQ1JJU19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9DUklTX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfQ1JJU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLWlmIHRlc3QgLXogIiR7SEFWRV9DUFVfQ1JJU1YzMl9UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0NQVV9DUklTVjMyX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9DUFVfQ1JJU1YzMlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQotZmkKLQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENYWF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcE9CSkNfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBPQkpDX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBPQkpDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ0FTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX1ZBTEdSSU5EX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfVkFMR1JJTkRfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX1ZBTEdSSU5EXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtFTkFCTEVfR1RLX0RPQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtFTkFCTEVfR1RLX0RPQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkVOQUJMRV9HVEtfRE9DXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHVEtfRE9DX0JVSUxEX0hUTUxfVFJVRX0iICYmIHRlc3QgLXogIiR7R1RLX0RPQ19CVUlMRF9IVE1MX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR1RLX0RPQ19CVUlMRF9IVE1MXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHVEtfRE9DX0JVSUxEX1BERl9UUlVFfSIgJiYgdGVzdCAteiAiJHtHVEtfRE9DX0JVSUxEX1BERl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdUS19ET0NfQlVJTERfUERGXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHVEtfRE9DX1VTRV9MSUJUT09MX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHVEtfRE9DX1VTRV9MSUJUT09MXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtFTkFCTEVfUExVR0lOX0RPQ1NfVFJVRX0iICYmIHRlc3QgLXogIiR7RU5BQkxFX1BMVUdJTl9ET0NTX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiRU5BQkxFX1BMVUdJTl9ET0NTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX0dDQ19BU01fVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HQ0NfQVNNX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HQ0NfQVNNXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfSEFWRV9NTUFQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dTVF9IQVZFX01NQVBfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHU1RfSEFWRV9NTUFQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX09SQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX09SQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfT1JDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX09SQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9PUkNDX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9PUkNDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX0dTVF9DSEVDS19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0dTVF9DSEVDS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR1NUX0NIRUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX0dUS19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0dUS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfR1RLXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX0dUS19YMTFfVFJVRX0iICYmIHRlc3QgLXogIiR7SEFWRV9HVEtfWDExX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiSEFWRV9HVEtfWDExXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtHU1RfUExVR0lOX0JVSUxEX1NUQVRJQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdTVF9QTFVHSU5fQlVJTERfU1RBVElDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fQUxQSEFfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX0FMUEhBXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FQRVRBR19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FQRVRBR19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fQVBFVEFHXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FVRElPRlhfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9BVURJT0ZYX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9BVURJT0ZYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FVRElPUEFSU0VSU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fQVVESU9QQVJTRVJTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FVUEFSU0VfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9BVVBBUlNFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9BVVBBUlNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FVVE9ERVRFQ1RfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9BVVRPREVURUNUX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9BVVRPREVURUNUXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FWSV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0FWSV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fQVZJXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0NVVFRFUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0NVVFRFUl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fQ1VUVEVSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0RFQlVHVVRJTFNfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9ERUJVR1VUSUxTX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9ERUJVR1VUSUxTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0RFSU5URVJMQUNFX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fREVJTlRFUkxBQ0VfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX0RFSU5URVJMQUNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0RUTUZfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9EVE1GX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9EVE1GXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0VGRkVDVFZfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9FRkZFQ1RWX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9FRkZFQ1RWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0VRVUFMSVpFUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0VRVUFMSVpFUl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fRVFVQUxJWkVSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0ZMVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0ZMVl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fRkxWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0ZMWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0ZMWF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fRkxYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0dPT01fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9HT09NX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9HT09NXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0dPT00ySzFfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9HT09NMksxX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9HT09NMksxXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0lDWURFTVVYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fSUNZREVNVVhfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX0lDWURFTVVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0lEM0RFTVVYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fSUQzREVNVVhfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX0lEM0RFTVVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0lNQUdFRlJFRVpFX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fSU1BR0VGUkVFWkVfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX0lNQUdFRlJFRVpFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9JTlRFUkxFQVZFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9JTlRFUkxFQVZFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0lTT01QNF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0lTT01QNF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fSVNPTVA0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0xBV19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0xBV19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fTEFXXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX0xFVkVMX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fTEVWRUxfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX0xFVkVMXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01BVFJPU0tBX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fTUFUUk9TS0FfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX01BVFJPU0tBXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01PTk9TQ09QRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01PTk9TQ09QRV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fTU9OT1NDT1BFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01VTFRJRklMRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01VTFRJRklMRV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fTVVMVElGSUxFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01VTFRJUEFSVF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01VTFRJUEFSVF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fTVVMVElQQVJUXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1JFUExBWUdBSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9SRVBMQVlHQUlOX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9SRVBMQVlHQUlOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1JUUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1JUUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fUlRQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9SVFBNQU5BR0VSX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9SVFBNQU5BR0VSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1JUU1BfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9SVFNQX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9SVFNQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1NIQVBFV0lQRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1NIQVBFV0lQRV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fU0hBUEVXSVBFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1NNUFRFX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fU01QVEVfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX1NNUFRFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1NQRUNUUlVNX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fU1BFQ1RSVU1fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX1NQRUNUUlVNXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1VEUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1VEUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fVURQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1ZJREVPQk9YX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fVklERU9CT1hfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX1ZJREVPQk9YXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1ZJREVPQ1JPUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1ZJREVPQ1JPUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fVklERU9DUk9QXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1ZJREVPRklMVEVSX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fVklERU9GSUxURVJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX1ZJREVPRklMVEVSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1ZJREVPTUlYRVJfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BMVUdJTl9WSURFT01JWEVSX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BMVUdJTl9WSURFT01JWEVSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1dBVkVOQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1dBVkVOQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fV0FWRU5DXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1dBVlBBUlNFX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9QTFVHSU5fV0FWUEFSU0VfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfUExVR0lOX1dBVlBBUlNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1k0TV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX1k0TV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fWTRNXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01PTk9TQ09QRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfUExVR0lOX01PTk9TQ09QRV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9QTFVHSU5fTU9OT1NDT1BFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfRElSRUNUU09VTkRfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0RJUkVDVFNPVU5EX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0RJUkVDVFNPVU5EXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfV0FWRUZPUk1fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1dBVkVGT1JNX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1dBVkVGT1JNXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NTX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9PU1NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfT1NTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NTNF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfT1NTNF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9PU1M0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU1VOQVVESU9fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1NVTkFVRElPX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1NVTkFVRElPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NYX0FVRElPX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9PU1hfQVVESU9fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfT1NYX0FVRElPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX0lPU19UUlVFfSIgJiYgdGVzdCAteiAiJHtIQVZFX0lPU19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkhBVkVfSU9TXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NYX1ZJREVPX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9PU1hfVklERU9fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfT1NYX1ZJREVPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfR1NUX1Y0TDJfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0dTVF9WNEwyX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0dTVF9WNEwyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfWF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9YXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfQUFMSUJfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0FBTElCX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0FBTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfQ0FJUk9fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0NBSVJPX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0NBSVJPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfRkxBQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfRkxBQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9GTEFDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfR0RLX1BJWEJVRl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfR0RLX1BJWEJVRl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9HREtfUElYQlVGXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfSkFDS19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfSkFDS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9KQUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfSlBFR19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfSlBFR19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9KUEVHXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCQ0FDQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfTElCQ0FDQV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9MSUJDQUNBXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCRFZfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0xJQkRWX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0xJQkRWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCUE5HX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9MSUJQTkdfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfTElCUE5HXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUFVMU0VfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BVTFNFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BVTFNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfRFYxMzk0X1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9EVjEzOTRfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfRFYxMzk0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCSUVDNjE4ODNfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0xJQklFQzYxODgzX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0xJQklFQzYxODgzXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU0hPVVQyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9TSE9VVDJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfU0hPVVQyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU09VUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfU09VUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9TT1VQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU1BFRVhfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1NQRUVYX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1NQRUVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfVEFHTElCX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9UQUdMSUJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfVEFHTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfVlBYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9WUFhfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfVlBYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfV0FWUEFDS19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfV0FWUEFDS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9XQVZQQUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfWkxJQl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfWkxJQl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9aTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfQloyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9CWjJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfQloyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfQUFMSUJfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0FBTElCX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0FBTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfQloyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9CWjJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfQloyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfQ0FJUk9fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0NBSVJPX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0NBSVJPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfRElSRUNUU09VTkRfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0RJUkVDVFNPVU5EX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0RJUkVDVFNPVU5EXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfRFYxMzk0X1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9EVjEzOTRfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfRFYxMzk0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfRkxBQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfRkxBQ19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9GTEFDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfR0RLX1BJWEJVRl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfR0RLX1BJWEJVRl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9HREtfUElYQlVGXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfSkFDS19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfSkFDS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9KQUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfSlBFR19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfSlBFR19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9KUEVHXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCQ0FDQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfTElCQ0FDQV9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9MSUJDQUNBXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCRFZfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0xJQkRWX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0xJQkRWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCSUVDNjE4ODNfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX0xJQklFQzYxODgzX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX0xJQklFQzYxODgzXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfTElCUE5HX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9MSUJQTkdfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfTElCUE5HXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NTX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9PU1NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfT1NTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NTNF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfT1NTNF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9PU1M0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NYX0FVRElPX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9PU1hfQVVESU9fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfT1NYX0FVRElPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfT1NYX1ZJREVPX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9PU1hfVklERU9fRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfT1NYX1ZJREVPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfUFVMU0VfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1BVTFNFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1BVTFNFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU0hPVVQyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9TSE9VVDJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfU0hPVVQyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU09VUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfU09VUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9TT1VQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU1BFRVhfVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1NQRUVYX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1NQRUVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfU1VOQVVESU9fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1NVTkFVRElPX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1NVTkFVRElPXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfVEFHTElCX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9UQUdMSUJfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfVEFHTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfVlBYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1VTRV9WUFhfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJVU0VfVlBYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfV0FWRUZPUk1fVFJVRX0iICYmIHRlc3QgLXogIiR7VVNFX1dBVkVGT1JNX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVVNFX1dBVkVGT1JNXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfV0FWUEFDS19UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfV0FWUEFDS19GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9XQVZQQUNLXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfWF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9YXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtVU0VfWkxJQl9UUlVFfSIgJiYgdGVzdCAteiAiJHtVU0VfWkxJQl9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlVTRV9aTElCXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotCi06ICIke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfSIKLWFjX3dyaXRlX2ZhaWw9MAotYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQotYXNfd3JpdGVfZmFpbD0wCi1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQotIyEgJFNIRUxMCi0jIEdlbmVyYXRlZCBieSAkYXNfbWUuCi0jIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KLSMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLSMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KLQotZGVidWc9ZmFsc2UKLWFjX2NzX3JlY2hlY2s9ZmFsc2UKLWFjX2NzX3NpbGVudD1mYWxzZQotCi1TSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQotZXhwb3J0IFNIRUxMCi1fQVNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAotICAqcG9zaXgqKSA6Ci0gICAgc2V0IC1vIHBvc2l4IDs7ICMoCi0gICopIDoKLSAgICAgOzsKLWVzYWMKLWZpCi0KLQotYXNfbmw9JwotJwotZXhwb3J0IGFzX25sCi0jIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgotYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKLWFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwotYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KLSMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAotIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KLWlmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKLSAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2VjaG89J3ByaW50IC1yIC0tJwotICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKLWVsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfZWNobz0ncHJpbnRmICVzXG4nCi0gIGFzX2VjaG9fbj0ncHJpbnRmICVzJwotZWxzZQotICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KLSAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJwotICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKLSAgZWxzZQotICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCi0gICAgYXNfZWNob19uX2JvZHk9J2V2YWwKLSAgICAgIGFyZz0kMTsKLSAgICAgIGNhc2UgJGFyZyBpbiAjKAotICAgICAgKiIkYXNfbmwiKikKLQlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKLQlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OwotICAgICAgZXNhYzsKLSAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKLSAgICAnCi0gICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5Ci0gICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKLSAgZmkKLSAgZXhwb3J0IGFzX2VjaG9fYm9keQotICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCi1maQotCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIFBBVEhfU0VQQVJBVE9SPToKLSAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgewotICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gICAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgfQotZmkKLQotCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKLSMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgotIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCi0jIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCi1JRlM9IiAiIgkkYXNfbmwiCi0KLSMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi1hc19teXNlbGY9Ci1jYXNlICQwIGluICMoKAotICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7Ci0gICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgICAgOzsKLWVzYWMKLSMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgotaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICBhc19teXNlbGY9JDAKLWZpCi1pZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCi0gIGV4aXQgMQotZmkKLQotIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgotIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgotIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAotIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KLWZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKLWRvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCi0gICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgotZG9uZQotUFMxPSckICcKLVBTMj0nPiAnCi1QUzQ9JysgJwotCi0jIE5MUyBudWlzYW5jZXMuCi1MQ19BTEw9QwotZXhwb3J0IExDX0FMTAotTEFOR1VBR0U9QwotZXhwb3J0IExBTkdVQUdFCi0KLSMgQ0RQQVRILgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi0KLSMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQotIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCi0jIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgotYXNfZm5fZXJyb3IgKCkKLXsKLSAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKLSAgaWYgdGVzdCAiJDQiOyB0aGVuCi0gICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgotICBhc19mbl9leGl0ICRhc19zdGF0dXMKLX0gIyBhc19mbl9lcnJvcgotCi0KLSMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgotYXNfZm5fc2V0X3N0YXR1cyAoKQotewotICByZXR1cm4gJDEKLX0gIyBhc19mbl9zZXRfc3RhdHVzCi0KLSMgYXNfZm5fZXhpdCBTVEFUVVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgotYXNfZm5fZXhpdCAoKQotewotICBzZXQgK2UKLSAgYXNfZm5fc2V0X3N0YXR1cyAkMQotICBleGl0ICQxCi19ICMgYXNfZm5fZXhpdAotCi0jIGFzX2ZuX3Vuc2V0IFZBUgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgUG9ydGFibHkgdW5zZXQgVkFSLgotYXNfZm5fdW5zZXQgKCkKLXsKLSAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQotfQotYXNfdW5zZXQ9YXNfZm5fdW5zZXQKLSMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKLSMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgotIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQotIyBpbXBsZW1lbnRhdGlvbnMuCi1pZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQotICB7Ci0gICAgZXZhbCAkMSs9XCQyCi0gIH0nCi1lbHNlCi0gIGFzX2ZuX2FwcGVuZCAoKQotICB7Ci0gICAgZXZhbCAkMT1cJCQxXCQyCi0gIH0KLWZpICMgYXNfZm5fYXBwZW5kCi0KLSMgYXNfZm5fYXJpdGggQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCi0jIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKLSMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCi1pZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgZXZhbCAnYXNfZm5fYXJpdGggKCkKLSAgewotICAgIGFzX3ZhbD0kKCggJCogKSkKLSAgfScKLWVsc2UKLSAgYXNfZm5fYXJpdGggKCkKLSAgewotICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCi0gIH0KLWZpICMgYXNfZm5fYXJpdGgKLQotCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KLWlmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KLSAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKLWVsc2UKLSAgYXNfYmFzZW5hbWU9ZmFsc2UKLWZpCi0KLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19kaXJuYW1lPWRpcm5hbWUKLWVsc2UKLSAgYXNfZGlybmFtZT1mYWxzZQotZmkKLQotYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Ci0kYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKLQotRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KLWNhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCi0tbiopCi0gIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgotICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KLSAgeHkpICBFQ0hPX0M9J1xjJzs7Ci0gICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKLSAgICAgICBFQ0hPX1Q9JwknOzsKLSAgZXNhYzs7Ci0qKQotICBFQ0hPX049Jy1uJzs7Ci1lc2FjCi0KLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1pZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KLSAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQotZWxzZQotICBybSAtZiBjb25mJCQuZGlyCi0gIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKLWZpCi1pZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCi0gIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIGFzX2xuX3M9J2xuIC1zJwotICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6Ci0gICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KLSAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KLSAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXBSJy4KLSAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8Ci0gICAgICBhc19sbl9zPSdjcCAtcFInCi0gIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgYXNfbG5fcz1sbgotICBlbHNlCi0gICAgYXNfbG5fcz0nY3AgLXBSJwotICBmaQotZWxzZQotICBhc19sbl9zPSdjcCAtcFInCi1maQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQotcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAotCi0KLSMgYXNfZm5fbWtkaXJfcAotIyAtLS0tLS0tLS0tLS0tCi0jIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KLWFzX2ZuX21rZGlyX3AgKCkKLXsKLQotICBjYXNlICRhc19kaXIgaW4gIygKLSAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OwotICBlc2FjCi0gIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgewotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgOjsgZG8KLSAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAotICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCi0gICAgICAqKSBhc19xZGlyPSRhc19kaXI7OwotICAgICAgZXNhYwotICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKLQotCi19ICMgYXNfZm5fbWtkaXJfcAotaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCi1lbHNlCi0gIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCi0gIGFzX21rZGlyX3A9ZmFsc2UKLWZpCi0KLQotIyBhc19mbl9leGVjdXRhYmxlX3AgRklMRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0IGlmIEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCi1hc19mbl9leGVjdXRhYmxlX3AgKCkKLXsKLSAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgotfSAjIGFzX2ZuX2V4ZWN1dGFibGVfcAotYXNfdGVzdF94PSd0ZXN0IC14JwotYXNfZXhlY3V0YWJsZV9wPWFzX2ZuX2V4ZWN1dGFibGVfcAotCi0jIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCi1hc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgotCi0jIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KLWFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLQotZXhlYyA2PiYxCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNFT0YKLXRlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0jIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KLSMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgotIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KLWFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IEdTdHJlYW1lciBHb29kIFBsdWctaW5zICRhc19tZSAxLjEwLjQsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwotICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKLSAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUwotICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCi0gICQgJDAgJEAKLQotb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCi0iCi0KLV9BQ0VPRgotCi1jYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKLSIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKLWVzYWMKLQotY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKLSIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Ci1lc2FjCi0KLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0jIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCi1jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgotY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgotCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotYWNfY3NfdXNhZ2U9IlwKLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucwotZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCi1hbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCi0KLVVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgotCi0gIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0Ci0gICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0Ci0gIC1xLCAtLXF1aWV0LCAtLXNpbGVudAotICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwotICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQotICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCi0gICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKLQotQ29uZmlndXJhdGlvbiBmaWxlczoKLSRjb25maWdfZmlsZXMKLQotQ29uZmlndXJhdGlvbiBoZWFkZXJzOgotJGNvbmZpZ19oZWFkZXJzCi0KLUNvbmZpZ3VyYXRpb24gY29tbWFuZHM6Ci0kY29uZmlnX2NvbW1hbmRzCi0KLVJlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXI+LiIKLQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCi1hY19jc192ZXJzaW9uPSJcXAotR1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgY29uZmlnLnN0YXR1cyAxLjEwLjQKLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKLSAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCi0KLUNvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLVRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLQotYWNfcHdkPSckYWNfcHdkJwotc3JjZGlyPSckc3JjZGlyJwotSU5TVEFMTD0nJElOU1RBTEwnCi1NS0RJUl9QPSckTUtESVJfUCcKLUFXSz0nJEFXSycKLXRlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgotYWNfbmVlZF9kZWZhdWx0cz06Ci13aGlsZSB0ZXN0ICQjICE9IDAKLWRvCi0gIGNhc2UgJDEgaW4KLSAgLS0qPT8qKQotICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCi0gICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAotICAgIGFjX3NoaWZ0PToKLSAgICA7OwotICAtLSo9KQotICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCi0gICAgYWNfb3B0YXJnPQotICAgIGFjX3NoaWZ0PToKLSAgICA7OwotICAqKQotICAgIGFjX29wdGlvbj0kMQotICAgIGFjX29wdGFyZz0kMgotICAgIGFjX3NoaWZ0PXNoaWZ0Ci0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGFjX29wdGlvbiBpbgotICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgotICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKLSAgICBhY19jc19yZWNoZWNrPTogOzsKLSAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQotICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKLSAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKLSAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKLSAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKLSAgICBkZWJ1Zz06IDs7Ci0gIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCi0gICAgJGFjX3NoaWZ0Ci0gICAgY2FzZSAkYWNfb3B0YXJnIGluCi0gICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKLSAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKLSAgICBlc2FjCi0gICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKLSAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKLSAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQotICAgICRhY19zaGlmdAotICAgIGNhc2UgJGFjX29wdGFyZyBpbgotICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Ci0gICAgZXNhYwotICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKLSAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKLSAgLS1oZSB8IC0taCkKLSAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgotICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJwotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKLSAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCi0gICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKLSAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKLSAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQotICAgIGFjX2NzX3NpbGVudD06IDs7Ci0KLSAgIyBUaGlzIGlzIGFuIGVycm9yLgotICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKLQotICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKLSAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OwotCi0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9Ci0KLWlmICRhY19jc19zaWxlbnQ7IHRoZW4KLSAgZXhlYyA2Pi9kZXYvbnVsbAotICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgotZmkKLQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWlmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgotICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgotICBzaGlmdAotICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgotICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKLSAgZXhwb3J0IENPTkZJR19TSEVMTAotICBleGVjICJcJEAiCi1maQotCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWV4ZWMgNT4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCi0jIyBSdW5uaW5nICRhc19tZS4gIyMKLV9BU0JPWAotICAkYXNfZWNobyAiJGFjX2xvZyIKLX0gPiY1Ci0KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0jCi0jIElOSVQtQ09NTUFORFMKLSMKLUFNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKLQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1zZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCi1kb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCi1kZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JwotbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLURMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9zaGFyZWQ9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9J2AkRUNITyAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLVNIRUxMPSdgJEVDSE8gIiRTSEVMTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1FQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLVBBVEhfU0VQQVJBVE9SPSdgJEVDSE8gIiRQQVRIX1NFUEFSQVRPUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1ob3N0X2FsaWFzPSdgJEVDSE8gIiRob3N0X2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhvc3Q9J2AkRUNITyAiJGhvc3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaG9zdF9vcz0nYCRFQ0hPICIkaG9zdF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1idWlsZF9hbGlhcz0nYCRFQ0hPICIkYnVpbGRfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYnVpbGQ9J2AkRUNITyAiJGJ1aWxkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWJ1aWxkX29zPSdgJEVDSE8gIiRidWlsZF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1TRUQ9J2AkRUNITyAiJFNFRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1Yc2VkPSdgJEVDSE8gIiRYc2VkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUdSRVA9J2AkRUNITyAiJEdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotRUdSRVA9J2AkRUNITyAiJEVHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUZHUkVQPSdgJEVDSE8gIiRGR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1MRD0nYCRFQ0hPICIkTEQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotTk09J2AkRUNITyAiJE5NIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUxOX1M9J2AkRUNITyAiJExOX1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbWF4X2NtZF9sZW49J2AkRUNITyAiJG1heF9jbWRfbGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFjX29iamV4dD0nYCRFQ0hPICIkYWNfb2JqZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1yZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1maWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1BUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLVJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9hcmNoaXZlX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSdgJEVDSE8gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQ0M9J2AkRUNITyAiJENDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUNGTEFHUz0nYCRFQ0hPICIkQ0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyPSdgJEVDSE8gIiRjb21waWxlciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1HQ0M9J2AkRUNITyAiJEdDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9ubV9pbnRlcmZhY2U9J2AkRUNITyAiJGx0X2N2X25tX2ludGVyZmFjZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1ubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl90cnVuY2F0ZV9iaW49J2AkRUNITyAiJGx0X2N2X3RydW5jYXRlX2JpbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1NQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1uZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU1BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUxJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotT1RPT0w9J2AkRUNITyAiJE9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU9UT09MNjQ9J2AkRUNITyAiJE9UT09MNjQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbGliZXh0PSdgJEVDSE8gIiRsaWJleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc2hyZXh0X2NtZHM9J2AkRUNITyAiJHNocmV4dF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWV4dHJhY3RfZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hcmNoaXZlX2NtZHNfbmVlZF9sYz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYCRFQ0hPICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotY29tcGlsZXJfbmVlZHNfb2JqZWN0PSdgJEVDSE8gIiRjb21waWxlcl9uZWVkc19vYmplY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYXJjaGl2ZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tb2R1bGVfY21kcz0nYCRFQ0hPICIkbW9kdWxlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbW9kdWxlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotd2l0aF9nbnVfbGQ9J2AkRUNITyAiJHdpdGhfZ251X2xkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFsbG93X3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRhbGxvd191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1ub191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkbm9fdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotdmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWluc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXBvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSdgJEVDSE8gIiRjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9J2AkRUNITyAiJGNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXN0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wcmVkZXBfb2JqZWN0cz0nYCRFQ0hPICIkcHJlZGVwX29iamVjdHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdGRlcF9vYmplY3RzPSdgJEVDSE8gIiRwb3N0ZGVwX29iamVjdHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcHJlZGVwcz0nYCRFQ0hPICIkcHJlZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wb3N0ZGVwcz0nYCRFQ0hPICIkcG9zdGRlcHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotTERfQ1hYPSdgJEVDSE8gIiRMRF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcmVsb2FkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRyZWxvYWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcmVsb2FkX2NtZHNfQ1hYPSdgJEVDSE8gIiRyZWxvYWRfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUdDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1vZHVsZV9jbWRzX0NYWD0nYCRFQ0hPICIkbW9kdWxlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1vZHVsZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotd2l0aF9nbnVfbGRfQ1hYPSdgJEVDSE8gIiR3aXRoX2dudV9sZF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9kaXJlY3RfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfbWludXNfTF9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9hdXRvbWF0aWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWluaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1saW5rX2FsbF9kZXBsaWJzX0NYWD0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlic19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbmNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXByZWxpbmtfY21kc19DWFg9J2AkRUNITyAiJHByZWxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbGVfbGlzdF9zcGVjX0NYWD0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2FjdGlvbl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wcmVkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHByZWRlcF9vYmplY3RzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wb3N0ZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIiRwb3N0ZGVwX29iamVjdHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXByZWRlcHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wb3N0ZGVwc19DWFg9J2AkRUNITyAiJHBvc3RkZXBzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLQotTFRDQz0nJExUQ0MnCi1MVENGTEFHUz0nJExUQ0ZMQUdTJwotY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJwotCi0jIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCi1mdW5jX2ZhbGxiYWNrX2VjaG8gKCkKLXsKLSAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLVwkMQotX0xURUNIT19FT0YnCi19Ci0KLSMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCi1mb3IgdmFyIGluIEFTIFwKLURMTFRPT0wgXAotT0JKRFVNUCBcCi1TSEVMTCBcCi1FQ0hPIFwKLVBBVEhfU0VQQVJBVE9SIFwKLVNFRCBcCi1HUkVQIFwKLUVHUkVQIFwKLUZHUkVQIFwKLUxEIFwKLU5NIFwKLUxOX1MgXAotbHRfU1AyTkwgXAotbHRfTkwyU1AgXAotcmVsb2FkX2ZsYWcgXAotZGVwbGlic19jaGVja19tZXRob2QgXAotZmlsZV9tYWdpY19jbWQgXAotZmlsZV9tYWdpY19nbG9iIFwKLXdhbnRfbm9jYXNlZ2xvYiBcCi1zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCi1BUiBcCi1BUl9GTEFHUyBcCi1hcmNoaXZlcl9saXN0X3NwZWMgXAotU1RSSVAgXAotUkFOTElCIFwKLUNDIFwKLUNGTEFHUyBcCi1jb21waWxlciBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKLWx0X2N2X25tX2ludGVyZmFjZSBcCi1ubV9maWxlX2xpc3Rfc3BlYyBcCi1sdF9jdl90cnVuY2F0ZV9iaW4gXAotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAotbHRfcHJvZ19jb21waWxlcl9waWMgXAotbHRfcHJvZ19jb21waWxlcl93bCBcCi1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi1uZWVkX2xvY2tzIFwKLU1BTklGRVNUX1RPT0wgXAotRFNZTVVUSUwgXAotTk1FRElUIFwKLUxJUE8gXAotT1RPT0wgXAotT1RPT0w2NCBcCi1zaHJleHRfY21kcyBcCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWMgXAotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgXAotY29tcGlsZXJfbmVlZHNfb2JqZWN0IFwKLXdpdGhfZ251X2xkIFwKLWFsbG93X3VuZGVmaW5lZF9mbGFnIFwKLW5vX3VuZGVmaW5lZF9mbGFnIFwKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi1leGNsdWRlX2V4cHN5bXMgXAotaW5jbHVkZV9leHBzeW1zIFwKLWZpbGVfbGlzdF9zcGVjIFwKLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKLWxpYm5hbWVfc3BlYyBcCi1saWJyYXJ5X25hbWVzX3NwZWMgXAotc29uYW1lX3NwZWMgXAotaW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKLWZpbmlzaF9ldmFsIFwKLW9sZF9zdHJpcGxpYiBcCi1zdHJpcGxpYiBcCi1jb21waWxlcl9saWJfc2VhcmNoX2RpcnMgXAotcHJlZGVwX29iamVjdHMgXAotcG9zdGRlcF9vYmplY3RzIFwKLXByZWRlcHMgXAotcG9zdGRlcHMgXAotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKLUxEX0NYWCBcCi1yZWxvYWRfZmxhZ19DWFggXAotY29tcGlsZXJfQ1hYIFwKLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCBcCi1sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAotbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAotbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKLWx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCi1jb21waWxlcl9uZWVkc19vYmplY3RfQ1hYIFwKLXdpdGhfZ251X2xkX0NYWCBcCi1hbGxvd191bmRlZmluZWRfZmxhZ19DWFggXAotbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIFwKLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKLWV4Y2x1ZGVfZXhwc3ltc19DWFggXAotaW5jbHVkZV9leHBzeW1zX0NYWCBcCi1maWxlX2xpc3Rfc3BlY19DWFggXAotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCBcCi1wcmVkZXBfb2JqZWN0c19DWFggXAotcG9zdGRlcF9vYmplY3RzX0NYWCBcCi1wcmVkZXBzX0NYWCBcCi1wb3N0ZGVwc19DWFggXAotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWDsgZG8KLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KLSAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi1kb25lCi0KLSMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLWZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAotb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAotb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi1vbGRfYXJjaGl2ZV9jbWRzIFwKLWV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAotYXJjaGl2ZV9jbWRzIFwKLWFyY2hpdmVfZXhwc3ltX2NtZHMgXAotbW9kdWxlX2NtZHMgXAotbW9kdWxlX2V4cHN5bV9jbWRzIFwKLWV4cG9ydF9zeW1ib2xzX2NtZHMgXAotcHJlbGlua19jbWRzIFwKLXBvc3RsaW5rX2NtZHMgXAotcG9zdGluc3RhbGxfY21kcyBcCi1wb3N0dW5pbnN0YWxsX2NtZHMgXAotZmluaXNoX2NtZHMgXAotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIFwKLWNvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGggXAotY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCBcCi1yZWxvYWRfY21kc19DWFggXAotb2xkX2FyY2hpdmVfY21kc19DWFggXAotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFggXAotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIFwKLWFyY2hpdmVfY21kc19DWFggXAotYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAotbW9kdWxlX2NtZHNfQ1hYIFwKLW1vZHVsZV9leHBzeW1fY21kc19DWFggXAotZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAotcHJlbGlua19jbWRzX0NYWCBcCi1wb3N0bGlua19jbWRzX0NYWDsgZG8KLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KLSAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi1kb25lCi0KLWFjX2F1eF9kaXI9JyRhY19hdXhfZGlyJwotCi0jIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKLSMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCi1pZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi0KLQotICAgIFBBQ0tBR0U9JyRQQUNLQUdFJwotICAgIFZFUlNJT049JyRWRVJTSU9OJwotICAgIFJNPSckUk0nCi0gICAgb2ZpbGU9JyRvZmlsZScKLQotCi0KLQotCi0jIENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlCi0gICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKLSAgICAjIGZyb20gYXV0b21ha2UgPCAxLjUuCi0gICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicKLSAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCi0gICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9IgotCi0jIHZhcmlhYmxlcyBmb3IgY3JlYXRlIHN0ZGludC5oIHJlcGxhY2VtZW50Ci1QQUNLQUdFPSIkUEFDS0FHRSIKLVZFUlNJT049IiRWRVJTSU9OIgotYWNfc3RkaW50X2g9IiRhY19zdGRpbnRfaCIKLV9hY19zdGRpbnRfaD1gJGFzX2VjaG8gIl8kUEFDS0FHRS0kYWNfc3RkaW50X2giIHwgJGFzX3RyX2NwcGAKLWFjX2N2X3N0ZGludF9tZXNzYWdlPSIkYWNfY3Zfc3RkaW50X21lc3NhZ2UiCi1hY19jdl9oZWFkZXJfc3RkaW50X3Q9IiRhY19jdl9oZWFkZXJfc3RkaW50X3QiCi1hY19jdl9oZWFkZXJfc3RkaW50X3g9IiRhY19jdl9oZWFkZXJfc3RkaW50X3giCi1hY19jdl9oZWFkZXJfc3RkaW50X289IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCi1hY19jdl9oZWFkZXJfc3RkaW50X3U9IiRhY19jdl9oZWFkZXJfc3RkaW50X3UiCi1hY19jdl90eXBlX3VpbnQ2NF90PSIkYWNfY3ZfdHlwZV91aW50NjRfdCIKLWFjX2N2X3R5cGVfdV9pbnQ2NF90PSIkYWNfY3ZfdHlwZV91X2ludDY0X3QiCi1hY19jdl9jaGFyX2RhdGFfbW9kZWw9IiRhY19jdl9jaGFyX2RhdGFfbW9kZWwiCi1hY19jdl9sb25nX2RhdGFfbW9kZWw9IiRhY19jdl9sb25nX2RhdGFfbW9kZWwiCi1hY19jdl90eXBlX2ludF9sZWFzdDMyX3Q9IiRhY19jdl90eXBlX2ludF9sZWFzdDMyX3QiCi1hY19jdl90eXBlX2ludF9mYXN0MzJfdD0iJGFjX2N2X3R5cGVfaW50X2Zhc3QzMl90IgotYWNfY3ZfdHlwZV9pbnRtYXhfdD0iJGFjX2N2X3R5cGVfaW50bWF4X3QiCi0KLQotX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLQotIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCi1mb3IgYWNfY29uZmlnX3RhcmdldCBpbiAkYWNfY29uZmlnX3RhcmdldHMKLWRvCi0gIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KLSAgICAiY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OwotICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKLSAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OwotICAgICJwby1kaXJlY3RvcmllcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBwby1kaXJlY3RvcmllcyIgOzsKLSAgICAiJGFjX3N0ZGludF9oIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTICRhY19zdGRpbnRfaCIgOzsKLSAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9hbHBoYS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvYWxwaGEvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9hcGV0YWcvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2FwZXRhZy9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2F1ZGlvZngvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2F1ZGlvZngvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2F1cGFyc2UvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2F1cGFyc2UvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9hdXRvZGV0ZWN0L01ha2VmaWxlIiA7OwotICAgICJnc3QvYXZpL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9hdmkvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9jdXR0ZXIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2N1dHRlci9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9kZWludGVybGFjZS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2R0bWYvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2R0bWYvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlIiA7OwotICAgICJnc3QvZWZmZWN0di9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvZWZmZWN0di9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2VxdWFsaXplci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvZXF1YWxpemVyL01ha2VmaWxlIiA7OwotICAgICJnc3QvZmx2L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9mbHYvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9nb29tL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9nb29tL01ha2VmaWxlIiA7OwotICAgICJnc3QvZ29vbTJrMS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvZ29vbTJrMS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2lkM2RlbXV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9pZDNkZW11eC9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2ljeWRlbXV4L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9pY3lkZW11eC9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9pbWFnZWZyZWV6ZS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2ludGVybGVhdmUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2ludGVybGVhdmUvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9pc29tcDQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2lzb21wNC9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L2xhdy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvbGF3L01ha2VmaWxlIiA7OwotICAgICJnc3QvbGV2ZWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2xldmVsL01ha2VmaWxlIiA7OwotICAgICJnc3QvbWF0cm9za2EvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L21hdHJvc2thL01ha2VmaWxlIiA7OwotICAgICJnc3QvbW9ub3Njb3BlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9tb25vc2NvcGUvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9tdWx0aWZpbGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L211bHRpZmlsZS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L211bHRpcGFydC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvbXVsdGlwYXJ0L01ha2VmaWxlIiA7OwotICAgICJnc3QvcmVwbGF5Z2Fpbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvcmVwbGF5Z2Fpbi9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3J0cC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvcnRwL01ha2VmaWxlIiA7OwotICAgICJnc3QvcnRwbWFuYWdlci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvcnRwbWFuYWdlci9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3J0c3AvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L3J0c3AvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9zaGFwZXdpcGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L3NoYXBld2lwZS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3NtcHRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9zbXB0ZS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3NwZWN0cnVtL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3VkcC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvdWRwL01ha2VmaWxlIiA7OwotICAgICJnc3QvdmlkZW9ib3gvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L3ZpZGVvYm94L01ha2VmaWxlIiA7OwotICAgICJnc3QvdmlkZW9jcm9wL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC92aWRlb2Nyb3AvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC92aWRlb21peGVyL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC92aWRlb21peGVyL01ha2VmaWxlIiA7OwotICAgICJnc3Qvd2F2ZW5jL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGdzdC93YXZlbmMvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC93YXZwYXJzZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUiIDs7Ci0gICAgImdzdC9mbHgvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0L2ZseC9NYWtlZmlsZSIgOzsKLSAgICAiZ3N0L3k0bS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBnc3QveTRtL01ha2VmaWxlIiA7OwotICAgICJleHQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L01ha2VmaWxlIiA7OwotICAgICJleHQvYWFsaWIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L2FhbGliL01ha2VmaWxlIiA7OwotICAgICJleHQvY2Fpcm8vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L2NhaXJvL01ha2VmaWxlIiA7OwotICAgICJleHQvZHYvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L2R2L01ha2VmaWxlIiA7OwotICAgICJleHQvZmxhYy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHQvZmxhYy9NYWtlZmlsZSIgOzsKLSAgICAiZXh0L2dka19waXhidWYvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L2dka19waXhidWYvTWFrZWZpbGUiIDs7Ci0gICAgImV4dC9qYWNrL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dC9qYWNrL01ha2VmaWxlIiA7OwotICAgICJleHQvanBlZy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHQvanBlZy9NYWtlZmlsZSIgOzsKLSAgICAiZXh0L2xpYmNhY2EvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L2xpYmNhY2EvTWFrZWZpbGUiIDs7Ci0gICAgImV4dC9saWJwbmcvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L2xpYnBuZy9NYWtlZmlsZSIgOzsKLSAgICAiZXh0L3B1bHNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGV4dC9wdWxzZS9NYWtlZmlsZSIgOzsKLSAgICAiZXh0L3JhdzEzOTQvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L3JhdzEzOTQvTWFrZWZpbGUiIDs7Ci0gICAgImV4dC9zaG91dDIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L3Nob3V0Mi9NYWtlZmlsZSIgOzsKLSAgICAiZXh0L3NvdXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L3NvdXAvTWFrZWZpbGUiIDs7Ci0gICAgImV4dC9zcGVleC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHQvc3BlZXgvTWFrZWZpbGUiIDs7Ci0gICAgImV4dC90YWdsaWIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXh0L3RhZ2xpYi9NYWtlZmlsZSIgOzsKLSAgICAiZXh0L3ZweC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHQvdnB4L01ha2VmaWxlIiA7OwotICAgICJleHQvd2F2cGFjay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBleHQvd2F2cGFjay9NYWtlZmlsZSIgOzsKLSAgICAic3lzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHN5cy9NYWtlZmlsZSIgOzsKLSAgICAic3lzL2RpcmVjdHNvdW5kL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHN5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZSIgOzsKLSAgICAic3lzL29zcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzeXMvb3NzL01ha2VmaWxlIiA7OwotICAgICJzeXMvb3NzNC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzeXMvb3NzNC9NYWtlZmlsZSIgOzsKLSAgICAic3lzL29zeGF1ZGlvL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHN5cy9vc3hhdWRpby9NYWtlZmlsZSIgOzsKLSAgICAic3lzL29zeHZpZGVvL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHN5cy9vc3h2aWRlby9NYWtlZmlsZSIgOzsKLSAgICAic3lzL3N1bmF1ZGlvL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHN5cy9zdW5hdWRpby9NYWtlZmlsZSIgOzsKLSAgICAic3lzL3Y0bDIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc3lzL3Y0bDIvTWFrZWZpbGUiIDs7Ci0gICAgInN5cy93YXZlZm9ybS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzeXMvd2F2ZWZvcm0vTWFrZWZpbGUiIDs7Ci0gICAgInN5cy94aW1hZ2UvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc3lzL3hpbWFnZS9NYWtlZmlsZSIgOzsKLSAgICAicG8vTWFrZWZpbGUuaW4iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vTWFrZWZpbGUuaW4iIDs7Ci0gICAgInRlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9jaGVjay9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9jaGVjay9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL2phY2svTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvamFjay9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUiIDs7Ci0gICAgInRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvcnRwL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9leGFtcGxlcy92NGwyL01ha2VmaWxlIiA7OwotICAgICJ0ZXN0cy9maWxlcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9maWxlcy9NYWtlZmlsZSIgOzsKLSAgICAidGVzdHMvaWNsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHMvaWNsZXMvTWFrZWZpbGUiIDs7Ci0gICAgImNvbW1vbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb21tb24vTWFrZWZpbGUiIDs7Ci0gICAgImNvbW1vbi9tNC9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBjb21tb24vbTQvTWFrZWZpbGUiIDs7Ci0gICAgIm00L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG00L01ha2VmaWxlIiA7OwotICAgICJkb2NzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGRvY3MvTWFrZWZpbGUiIDs7Ci0gICAgImRvY3MvcGx1Z2lucy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL3BsdWdpbnMvTWFrZWZpbGUiIDs7Ci0gICAgImRvY3MvdmVyc2lvbi5lbnRpdGllcyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBkb2NzL3ZlcnNpb24uZW50aXRpZXMiIDs7Ci0gICAgInBrZ2NvbmZpZy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwa2djb25maWcvTWFrZWZpbGUiIDs7Ci0gICAgInBrZ2NvbmZpZy9nc3RyZWFtZXItcGx1Z2lucy1nb29kLXVuaW5zdGFsbGVkLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBrZ2NvbmZpZy9nc3RyZWFtZXItcGx1Z2lucy1nb29kLXVuaW5zdGFsbGVkLnBjIiA7OwotICAgICJnc3QtcGx1Z2lucy1nb29kLnNwZWMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZ3N0LXBsdWdpbnMtZ29vZC5zcGVjIiA7OwotCi0gICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwotICBlc2FjCi1kb25lCi0KLQotIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAotIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCi0jIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5Ci0jIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgotaWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KLSAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKLSAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKLSAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRTPSRjb25maWdfY29tbWFuZHMKLWZpCi0KLSMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQotIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAotIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgotIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgotIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVjdG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOgotIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9yZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuCi0kZGVidWcgfHwKLXsKLSAgdG1wPSBhY190bXA9Ci0gIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/Ci0gIDogIiR7YWNfdG1wOj0kdG1wfSIKLSAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKLScgMAotICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQotfQotIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCi0KLXsKLSAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLWQgIiR0bXAiCi19ICB8fAotewotICB0bXA9Li9jb25mJCQtJFJBTkRPTQotICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKLX0gfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1Ci1hY190bXA9JHRtcAotCi0jIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCi0jIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgotIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcuaCcuCi1pZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbgotCi0KLWFjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKLSMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KLSMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcwotIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KLWlmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgotICBldmFsIGFjX2NyPVwkXCdcXHJcJwotZmkKLWFjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKLWlmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCi0gIGFjX2NzX2F3a19jcj0nXFxyJwotZWxzZQotICBhY19jc19hd2tfY3I9JGFjX2NyCi1maQotCi1lY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgotX0FDRU9GCi0KLQotewotICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdrIDw8X0FDRU9GIiAmJgotICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRhY19kZWxpbS8nICYmCi0gIGVjaG8gIl9BQ0VPRiIKLX0gPmNvbmYkJHN1YnMuc2ggfHwKLSAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQotYWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2AKLWFjX2RlbGltPSclIV8hIyAnCi1mb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2UgOjsgZG8KLSAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKLSAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1Ci0KLSAgYWNfZGVsaW1fbj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMgWGAKLSAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4KLSAgICBicmVhawotICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKLSAgZWxzZQotICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCi0gIGZpCi1kb25lCi1ybSAtZiBjb25mJCRzdWJzLnNoCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgotX0FDRU9GCi1zZWQgLW4gJwotaAotcy9eL1NbIi87IHMvIS4qLyJdPS8KLXAKLWcKLXMvXlteIV0qIS8vCi06cmVwbAotdCByZXBsCi1zLyciJGFjX2RlbGltIickLy8KLXQgZGVsaW0KLTpubAotaAotcy9cKC5cezE0OFx9XCkuLiovXDEvCi10IG1vcmUxCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4iXFwvCi1wCi1uCi1iIHJlcGwKLTptb3JlMQotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLwotcAotZwotcy8uXHsxNDhcfS8vCi10IG5sCi06ZGVsaW0KLWgKLXMvXCguXHsxNDhcfVwpLi4qL1wxLwotdCBtb3JlMgotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8KLXAKLWIKLTptb3JlMgotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLwotcAotZwotcy8uXHsxNDhcfS8vCi10IGRlbGltCi0nIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnCi0vXlteIiJdL3sKLSAgTgotICBzL1xuLy8KLX0KLScgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKLXJtIC1mIGNvbmYkJHN1YnMuYXdrCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLV9BQ0FXSwotY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKLSAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKLSAgRlMgPSAiByIKLQotfQotewotICBsaW5lID0gJCAwCi0gIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQotICBzdWJzdGVkID0gMAotICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pCi0gIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBpKyspIHsKLSAgICBrZXkgPSBmaWVsZFtpXQotICAgIGtleWxlbiA9IGxlbmd0aChrZXkpCi0gICAgaWYgKFNfaXNfc2V0W2tleV0pIHsKLSAgICAgIHZhbHVlID0gU1trZXldCi0gICAgICBsaW5lID0gc3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxlbiArIDMpCi0gICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQotICAgICAgc3Vic3RlZCA9IDEKLSAgICB9IGVsc2UKLSAgICAgIGxlbiArPSAxICsga2V5bGVuCi0gIH0KLQotICBwcmludCBsaW5lCi19Ci0KLV9BQ0FXSwotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1pZiBzZWQgInMvJGFjX2NyLy8iIDwgL2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2VkICJzLyRhY19jclwkLy87IHMvJGFjX2NyLyRhY19jc19hd2tfY3IvZyIKLWVsc2UKLSAgY2F0Ci1maSA8ICIkYWNfdG1wL3N1YnMxLmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXAotICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1Ci1fQUNFT0YKLQotIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBzb2xlICQoc3JjZGlyKSwKLSMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKLSMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5Ci0jIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCi1pZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgotICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9WwkgXSovewotaAotcy8vLwotcy9eLzovCi1zL1sJIF0qJC86Lwotcy86XCQoc3JjZGlyKTovOi9nCi1zLzpcJHtzcmNkaXJ9Oi86L2cKLXMvOkBzcmNkaXJAOi86L2cKLXMvXjoqLy8KLXMvOiokLy8KLXgKLXMvXCg9WwkgXSpcKS4qL1wxLwotRwotcy9cbi8vCi1zL15bXj1dKj1bCSBdKiQvLwotfScKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKLQotIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCi0jIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KLWlmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KLWNhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAotQkVHSU4gewotX0FDRU9GCi0KLSMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCi0jIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCi0jIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCi0KLSMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKLSMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KLWFjX2RlbGltPSclIV8hIyAnCi1mb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KLSAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAotICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCi0gICAgYnJlYWsKLSAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQotICBlbHNlCi0gICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKLSAgZmkKLWRvbmUKLQotIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCi0jIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKLSMgbmV3bGluZSBzZXF1ZW5jZXMuCi0KLWFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCi1zZWQgLW4gJwotcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCi10IHJzZXQKLTpyc2V0Ci1zL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwotdCBkZWYKLWQKLTpkZWYKLXMvXFwkLy8KLXQgYnNubAotcy9bIlxcXS9cXCYvZwotcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCi1EWyJcMSJdPSIgXDMiL3AKLXMvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCi1kCi06YnNubAotcy9bIlxcXS9cXCYvZwotcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCi1EWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKLXQgY29udAotcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKLXQgY29udAotZAotOmNvbnQKLW4KLXMvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwotdCBjbGVhcgotOmNsZWFyCi1zL1xcJC8vCi10IGJzbmxjCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKLWQKLTpic25sYwotcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCi1iIGNvbnQKLScgPGNvbmZkZWZzLmggfCBzZWQgJwotcy8nIiRhY19kZWxpbSInLyJcXFwKLSIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0gIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCi0gIEZTID0gIgciCi19Ci0vXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKLSAgbGluZSA9IFwkIDAKLSAgc3BsaXQobGluZSwgYXJnLCAiICIpCi0gIGlmIChhcmdbMV0gPT0gIiMiKSB7Ci0gICAgZGVmdW5kZWYgPSBhcmdbMl0KLSAgICBtYWMxID0gYXJnWzNdCi0gIH0gZWxzZSB7Ci0gICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQotICAgIG1hYzEgPSBhcmdbMl0KLSAgfQotICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCi0gIG1hY3JvID0gbWFjMlsxXQotICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKLSAgaWYgKERfaXNfc2V0W21hY3JvXSkgewotICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCi0gICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQotICAgIG5leHQKLSAgfSBlbHNlIHsKLSAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCi0gICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAotICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7Ci0gICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCi0gICAgICBuZXh0Ci0gICAgfQotICB9Ci19Ci17IHByaW50IH0KLV9BQ0FXSwotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQotZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCi0KLQotZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKLXNoaWZ0Ci1mb3IgYWNfdGFnCi1kbwotICBjYXNlICRhY190YWcgaW4KLSAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KLSAgOltGSExdKjoqKTs7Ci0gIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OwotICA6W0ZIXS0pIGFjX3RhZz0tOi07OwotICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OwotICBlc2FjCi0gIGFjX3NhdmVfSUZTPSRJRlMKLSAgSUZTPToKLSAgc2V0IHggJGFjX3RhZwotICBJRlM9JGFjX3NhdmVfSUZTCi0gIHNoaWZ0Ci0gIGFjX2ZpbGU9JDEKLSAgc2hpZnQKLQotICBjYXNlICRhY19tb2RlIGluCi0gIDpMKSBhY19zb3VyY2U9JDE7OwotICA6W0ZIXSkKLSAgICBhY19maWxlX2lucHV0cz0KLSAgICBmb3IgYWNfZgotICAgIGRvCi0gICAgICBjYXNlICRhY19mIGluCi0gICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7Ci0gICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQotCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKLQkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KLQkgdGVzdCAtZiAiJGFjX2YiIHx8Ci0JICAgY2FzZSAkYWNfZiBpbgotCSAgIFtcXC8kXSopIGZhbHNlOzsKLQkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7Ci0JICAgZXNhYyB8fAotCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7Ci0gICAgICBlc2FjCi0gICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCi0gICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgotICAgIGRvbmUKLQotICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgotICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCi0gICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAotCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCi0JYCcgYnkgY29uZmlndXJlLicKLSAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9Ci0gICAgZmkKLSAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgotICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAotICAgICpcJiogfCAqXHwqIHwgKlxcKiApCi0gICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8Ci0gICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCi0gICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkYWNfdGFnIGluCi0gICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKLSAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0KLSAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX2ZpbGUiIHx8Ci0kYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJGFjX2ZpbGUiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICBhc19kaXI9IiRhY19kaXIiOyBhc19mbl9ta2Rpcl9wCi0gIGFjX2J1aWxkZGlyPS4KLQotY2FzZSAiJGFjX2RpciIgaW4KLS4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OwotKikKLSAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKLSAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKLSAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgotICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Ci0gICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwotICBlc2FjIDs7Ci1lc2FjCi1hY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKLWFjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKLSMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6Ci1hY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKLQotY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KLSAgICBhY19zcmNkaXI9LgotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKLSAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KLSAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OwotICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgotICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBuYW1lLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCi0gICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Ci1lc2FjCi1hY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4Ci0KLQotICBjYXNlICRhY19tb2RlIGluCi0gIDpGKQotICAjCi0gICMgQ09ORklHX0ZJTEUKLSAgIwotCi0gIGNhc2UgJElOU1RBTEwgaW4KLSAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OwotICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKLSAgZXNhYwotICBhY19NS0RJUl9QPSRNS0RJUl9QCi0gIGNhc2UgJE1LRElSX1AgaW4KLSAgW1xcLyRdKiB8ID86W1xcL10qICkgOzsKLSAgKi8qKSBhY19NS0RJUl9QPSRhY190b3BfYnVpbGRfcHJlZml4JE1LRElSX1AgOzsKLSAgZXNhYwotX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KLSMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgotYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49Ci1hY19zZWRfZGF0YXJvb3Q9JwotL2RhdGFyb290ZGlyLyB7Ci0gIHAKLSAgcQotfQotL0BkYXRhZGlyQC9wCi0vQGRvY2RpckAvcAotL0BpbmZvZGlyQC9wCi0vQGxvY2FsZWRpckAvcAotL0BtYW5kaXJAL3AnCi1jYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCi0qZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7Ci0qQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCi0gIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKLSAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKLSAgcyZAaW5mb2RpckAmJGluZm9kaXImZwotICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZwotICBzJkBtYW5kaXJAJiRtYW5kaXImZwotICBzJlxcXCR7ZGF0YXJvb3RkaXJ9JiRkYXRhcm9vdGRpciZnJyA7OwotZXNhYwotX0FDRU9GCi0KLSMgTmV1dHJhbGl6ZSBWUEFUSCB3aGVuIGAkc3JjZGlyJyA9IGAuJy4KLSMgU2hlbGwgY29kZSBpbiBjb25maWd1cmUuYWMgbWlnaHQgc2V0IGV4dHJhc3ViLgotIyBGSVhNRTogZG8gd2UgcmVhbGx5IHdhbnQgdG8gbWFpbnRhaW4gdGhpcyBmZWF0dXJlPwotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1hY19zZWRfZXh0cmE9IiRhY192cHN1YgotJGV4dHJhc3ViCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLTp0Ci0vQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCi1zfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0Ci1zJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKLXMmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKLXMmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0Ci1zJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0Ci1zJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0Ci1zJkBhYnNfdG9wX3NyY2RpckAmJGFjX2Fic190b3Bfc3JjZGlyJjt0IHQKLXMmQGJ1aWxkZGlyQCYkYWNfYnVpbGRkaXImO3QgdAotcyZAYWJzX2J1aWxkZGlyQCYkYWNfYWJzX2J1aWxkZGlyJjt0IHQKLXMmQGFic190b3BfYnVpbGRkaXJAJiRhY19hYnNfdG9wX2J1aWxkZGlyJjt0IHQKLXMmQElOU1RBTExAJiRhY19JTlNUQUxMJjt0IHQKLXMmQE1LRElSX1BAJiRhY19NS0RJUl9QJjt0IHQKLSRhY19kYXRhcm9vdGRpcl9oYWNrCi0iCi1ldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkYWNfdG1wL3N1YnMuYXdrIiBcCi0gID4kYWNfdG1wL291dCB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLQotdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKLSAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJGFjX3RtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKLSAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgXAotICAgICAgIiRhY190bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCi13aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCi13aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQiID4mMjt9Ci0KLSAgcm0gLWYgIiRhY190bXAvc3RkaW4iCi0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7Ci0gICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKLSAgZXNhYyBcCi0gIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQotIDs7Ci0gIDpIKQotICAjCi0gICMgQ09ORklHX0hFQURFUgotICAjCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICB7Ci0gICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKLSAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgotICAgIH0gPiIkYWNfdG1wL2NvbmZpZy5oIiBcCi0gICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLSAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiRhY190bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQotICAgIGVsc2UKLSAgICAgIHJtIC1mICIkYWNfZmlsZSIKLSAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKLQl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLSAgICBmaQotICBlbHNlCi0gICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCi0gICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAotICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKLSAgZmkKLSMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgotX2FtX2FyZz0iJGFjX2ZpbGUiCi1fYW1fc3RhbXBfY291bnQ9MQotZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCi0gIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkX2FtX2FyZyB8ICRfYW1fYXJnOiogKQotICAgICAgYnJlYWsgOzsKLSAgICAqICkKLSAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKLSAgZXNhYwotZG9uZQotZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmAkYXNfZGlybmFtZSAtLSAiJF9hbV9hcmciIHx8Ci0kYXNfZXhwciBYIiRfYW1fYXJnIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRfYW1fYXJnIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRfYW1fYXJnIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJF9hbV9hcmciIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAotIDs7Ci0KLSAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9Ci0gOzsKLSAgZXNhYwotCi0KLSAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCi0gICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCB7Ci0gICMgT2xkZXIgQXV0b2NvbmYgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcwotICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCi0gICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgotICBjYXNlICRDT05GSUdfRklMRVMgaW4KLSAgKlwnKikgZXZhbCBzZXQgeCAiJENPTkZJR19GSUxFUyIgOzsKLSAgKikgICBzZXQgeCAkQ09ORklHX0ZJTEVTIDs7Ci0gIGVzYWMKLSAgc2hpZnQKLSAgZm9yIG1mCi0gIGRvCi0gICAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAotICAgICMgQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIEF1dG9tYWtlIGdlbmVyYXRlZCBNYWtlZmlsZSBvciBub3QuCi0gICAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkICdNYWtlZmlsZS5pbicsIGJ1dAotICAgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgotICAgICMgR3JlcCdpbmcgdGhlIGZpcnN0IGxpbmUgaXMgbm90IGVub3VnaDogc29tZSBwZW9wbGUgcG9zdC1wcm9jZXNzCi0gICAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgICAjIEdyZXAnaW5nIHRoZSB3aG9sZSBmaWxlIGlzIG5vdCBnb29kIGVpdGhlcjogQUlYIGdyZXAgaGFzIGEgbGluZQotICAgICMgbGltaXQgb2YgMjA0OCwgYnV0IGFsbCBzZWQncyB3ZSBrbm93IGhhdmUgdW5kZXJzdGFuZCBhdCBsZWFzdCA0MDAwLgotICAgIGlmIHNlZCAtbiAncyxeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlLiosWCxwJyAiJG1mIiB8IGdyZXAgWCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIGRpcnBhcnQ9YCRhc19kaXJuYW1lIC0tICIkbWYiIHx8Ci0kYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRtZiIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gICAgZWxzZQotICAgICAgY29udGludWUKLSAgICBmaQotICAgICMgRXh0cmFjdCB0aGUgZGVmaW5pdGlvbiBvZiBERVBESVIsIGFtX19pbmNsdWRlLCBhbmQgYW1fX3F1b3RlCi0gICAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgJ21ha2UnLgotICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKLSAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgICAjIGV4cGFuc2lvbi4KLSAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJ2A7IGRvCi0gICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAotJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRmaWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5fbWtkaXJfcAotICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgotICAgIGRvbmUKLSAgZG9uZQotfQotIDs7Ci0gICAgImxpYnRvb2wiOkMpCi0KLSAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKLSAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCi0gICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICAgIGZpCi0KLSAgICBjZmdmaWxlPSR7b2ZpbGV9VAotICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICAgJFJNICIkY2ZnZmlsZSIKLQotICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyEgJFNIRUxMCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UpICRWRVJTSU9OCi0jIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLQotIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgotCi0jIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLSMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLSMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdAotIyB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgIHNhbWUKLSMgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotIwotIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0KLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9J0NYWCAnCi0KLSMgQ29uZmlndXJlZCBkZWZhdWx0cyBmb3Igc3lzX2xpYl9kbHNlYXJjaF9wYXRoIG11bmdpbmcuCi06IFwke0xUX1NZU19MSUJSQVJZX1BBVEg9IiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIn0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKLQotIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/Ci1tYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCi1tYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KLQotIyBBc3NlbWJsZXIgcHJvZ3JhbS4KLUFTPSRsdF9BUwotCi0jIERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0kbHRfRExMVE9PTAotCi0jIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KLU9CSkRVTVA9JGx0X09CSkRVTVAKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBTaGFyZWQgYXJjaGl2ZSBtZW1iZXIgYmFzZW5hbWUsZm9yIGZpbGVuYW1lIGJhc2VkIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgb24gQUlYLgotc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9JHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjCi0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgotRUNITz0kbHRfRUNITwotCi0jIFRoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KLVBBVEhfU0VQQVJBVE9SPSRsdF9QQVRIX1NFUEFSQVRPUgotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCi1TRUQ9JGx0X1NFRAotCi0jIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgotWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKLQotIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KLUdSRVA9JGx0X0dSRVAKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KLUZHUkVQPSRsdF9GR1JFUAotCi0jIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgotTk09JGx0X05NCi0KLSMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9JGFjX29iamV4dAotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0kZXhlZXh0Ci0KLSMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KLWx0X3Vuc2V0PSRsdF91bnNldAotCi0jIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCi1TUDJOTD0kbHRfbHRfU1AyTkwKLQotIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgotTkwyU1A9JGx0X2x0X05MMlNQCi0KLSMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KLXRvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKLQotIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KLXRvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLWZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCi0KLSMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKLQotIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi0KLSMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCi1hcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYwotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgotU1RSSVA9JGx0X1NUUklQCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIFdoZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbi4KLWxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0kbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0NGTEFHUwotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5IHJlbG9jYXRlLgotZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKLQotIyBUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlLgotbm1faW50ZXJmYWNlPSRsdF9sdF9jdl9ubV9pbnRlcmZhY2UKLQotIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi1ubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKLQotIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLWx0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKLQotIyBDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGUuCi1sdF90cnVuY2F0ZV9iaW49JGx0X2x0X2N2X3RydW5jYXRlX2JpbgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgTWFuaWZlc3QgdG9vbC4KLU1BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKLQotIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgotRFNZTVVUSUw9JGx0X0RTWU1VVElMCi0KLSMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCi1OTUVESVQ9JGx0X05NRURJVAotCi0jIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCi1MSVBPPSRsdF9MSVBPCi0KLSMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCi1PVE9PTD0kbHRfT1RPT0wKLQotIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KLU9UT09MNjQ9JGx0X09UT09MNjQKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9JGxpYmV4dAotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKLQotIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgotaW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKLQotIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKLSMgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBEZXRlY3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoCi0KLSMgRXhwbGljaXQgTFRfU1lTX0xJQlJBUllfUEFUSCBzZXQgZHVyaW5nIC4vY29uZmlndXJlIHRpbWUuCi1jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRsdF9jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRAotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCi0KLSMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcgotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYwotCi0jIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgotY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZwotIyBhIHNoYXJlZCBhcmNoaXZlLgotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcwotCi0jIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KLXdpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCi0KLSMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKLSMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCi1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQotCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCi0jIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCi0KLSMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKLQotIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKLSMgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCi0KLSMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKLSMgdG8gcnVudGltZSBwYXRoIGxpc3QuCi1pbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicwotCi0jIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcwotCi0jIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgotcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKLQotIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgotcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcwotCi0jIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KLWZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYwotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwotIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cwotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKLXByZWRlcHM9JGx0X3ByZWRlcHMKLXBvc3RkZXBzPSRsdF9wb3N0ZGVwcwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAotCi0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKLQotX0xUX0VPRgotCi0gICAgY2F0IDw8J19MVF9FT0YnID4+ICIkY2ZnZmlsZSIKLQotIyAjIyMgQkVHSU4gRlVOQ1RJT05TIFNIQVJFRCBXSVRIIENPTkZJR1VSRQotCi0jIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKLSMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKLSMgaGF2aW5nIGEgZm9ybWF0OgotIyAiRElSWzpESVJdOiIKLSMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCi0jICI6RElSWzpESVJdIgotIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgotIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCi0jICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSWzpESVJdIgotIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCi1mdW5jX211bmdlX3BhdGhfbGlzdCAoKQotewotICAgIGNhc2UgeCQyIGluCi0gICAgeCkKLSAgICAgICAgOzsKLSAgICAqOikKLSAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYCBcJCQxXCIKLSAgICAgICAgOzsKLSAgICB4OiopCi0gICAgICAgIGV2YWwgJDE9XCJcJCQxIGAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCi0gICAgICAgIDs7Ci0gICAgKjo6KikKLSAgICAgICAgZXZhbCAkMT1cIlwkJDFcIGAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKLSAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcJCQxXCIKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKLSAgICAgICAgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1mdW5jX2NjX2Jhc2VuYW1lICgpCi17Ci0gICAgZm9yIGNjX3RlbXAgaW4gJCoiIjsgZG8KLSAgICAgIGNhc2UgJGNjX3RlbXAgaW4KLSAgICAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgICAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgICAgICBcLSopIDs7Ci0gICAgICAgICopIGJyZWFrOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0gICAgZnVuY19jY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCi19Ci0KLQotIyAjIyMgRU5EIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKLQotX0xUX0VPRgotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi1fTFRfRU9GCi0gICAgOzsKLSAgZXNhYwotCi0KLWx0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKLQotCi0gICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgotICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCi0gICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCi0gICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/Ci0gIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKLSAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLQotICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi0KLQotICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKLQotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0NYWAotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWdfQ1hYCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfQ1hYCi0KLSMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9DWFgKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCi0KLSMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCi1jb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFgKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfQ1hYCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWAotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKLSMgYSBzaGFyZWQgYXJjaGl2ZS4KLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAotCi0jIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KLXdpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZF9DWFgKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWAotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAotCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKLSMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKLSMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCi1oYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgotIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgotIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgKLQotIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKLSMgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCi0jIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgotaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aF9DWFgKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAotCi0jIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWAotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0NYWAotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKLQotIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KLXByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAotCi0jIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi1wb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzX0NYWAotCi0jIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KLWZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bwotIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0NYWAotcHJlZGVwcz0kbHRfcHJlZGVwc19DWFgKLXBvc3RkZXBzPSRsdF9wb3N0ZGVwc19DWFgKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IENYWAotX0xUX0VPRgotCi0gOzsKLSAgICAicG8tZGlyZWN0b3JpZXMiOkMpCi0gICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKLSAgICAgIGNhc2UgIiRhY19maWxlIiBpbgotICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OwotICAgICAgZXNhYwotICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCi0gICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKLSAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCi0gICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKLSAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCi0gICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKLSAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgotICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCi0gICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKLSAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7Ci0gICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7Ci0gICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKLSAgICAgICAgZXNhYwotICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCi0gICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTwotICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgotICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCi0gICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKLSAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAotICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJwotICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCi0gICAgICAgICAgZmkKLSAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQotICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCi0gICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCi0gICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQotICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKLSAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgotICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OwotICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICBQT0ZJTEVTPQotICAgICAgICAgIFVQREFURVBPRklMRVM9Ci0gICAgICAgICAgRFVNTVlQT0ZJTEVTPQotICAgICAgICAgIEdNT0ZJTEVTPQotICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKLSAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKLSAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCi0gICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCi0gICAgICAgICAgZG9uZQotICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUwotICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gICAgICAgICAgSU5TVF9MSU5HVUFTPQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICAgIHVzZWl0PW5vCi0gICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbwotICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCi0gICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgotICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAotICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcwotICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgotICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KLSAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgQ0FUQUxPR1M9Ci0gICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCi0gICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCi0gICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KLSAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KLSAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OwotICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OwotICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGRvbmUKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lIDs7Ci0gICAgIiRhY19zdGRpbnRfaCI6QykKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX3N0ZGludF9oIDogJF9hY19zdGRpbnRfaCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfc3RkaW50X2ggOiAkX2FjX3N0ZGludF9oIiA+JjY7fQotYWNfc3RkaW50PSR0bXAvX3N0ZGludC5oCi0KLWVjaG8gIiNpZm5kZWYiICRfYWNfc3RkaW50X2ggPiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUiICRfYWNfc3RkaW50X2ggIjEiID4+JGFjX3N0ZGludAotZWNobyAiI2lmbmRlZiIgX0dFTkVSQVRFRF9TVERJTlRfSCA+PiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUiIF9HRU5FUkFURURfU1RESU5UX0ggJyInJFBBQ0tBR0UgJFZFUlNJT04nIicgPj4kYWNfc3RkaW50Ci1lY2hvICIvKiBnZW5lcmF0ZWQgJGFjX2N2X3N0ZGludF9tZXNzYWdlICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF90IiAhPSAiXyIgOyB0aGVuCi1lY2hvICIjZGVmaW5lIF9TVERJTlRfSEFWRV9TVERJTlRfSCIgIjEiID4+JGFjX3N0ZGludAotZWNobyAiI2luY2x1ZGUgPHN0ZGludC5oPiIgPj4kYWNfc3RkaW50Ci1lY2hvICIjZW5kaWYiID4+JGFjX3N0ZGludAotZWNobyAiI2VuZGlmIiA+PiRhY19zdGRpbnQKLWVsc2UKLQotY2F0ID4+JGFjX3N0ZGludCA8PFNURElOVF9FT0YKLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLiBzaG9ydGNpcmN1aXQgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9TVERJTlRfSEFWRV9TVERJTlRfSAotI2luY2x1ZGUgPHN0ZGludC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gY29uZmlndXJlZCBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotU1RESU5UX0VPRgotCi1lY2hvICIvKiB3aGV0aGVyIHdlIGhhdmUgYSBDOTkgY29tcGF0aWJsZSBzdGRpbnQgaGVhZGVyIGZpbGUgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiXyRhY19jdl9oZWFkZXJfc3RkaW50X3giICE9ICJfIiA7IHRoZW4KLSAgYWNfaGVhZGVyPSIkYWNfY3ZfaGVhZGVyX3N0ZGludF94IgotICBlY2hvICIjZGVmaW5lIF9TVERJTlRfSEVBREVSX0lOVFBUUiIgJyInIiRhY19oZWFkZXIiJyInID4+JGFjX3N0ZGludAotZWxzZQotICBlY2hvICIvKiAjdW5kZWYgX1NURElOVF9IRUFERVJfSU5UUFRSICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIi8qIHdoZXRoZXIgd2UgaGF2ZSBhIEM5NiBjb21wYXRpYmxlIGludHR5cGVzIGhlYWRlciBmaWxlICovIiA+PiRhY19zdGRpbnQKLWlmICB0ZXN0ICJfJGFjX2N2X2hlYWRlcl9zdGRpbnRfbyIgIT0gIl8iIDsgdGhlbgotICBhY19oZWFkZXI9IiRhY19jdl9oZWFkZXJfc3RkaW50X28iCi0gIGVjaG8gIiNkZWZpbmUgX1NURElOVF9IRUFERVJfVUlOVDMyIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50Ci1lbHNlCi0gIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9VSU5UMzIgKi8iID4+JGFjX3N0ZGludAotZmkKLQotZWNobyAiLyogd2hldGhlciB3ZSBoYXZlIGEgQlNEIGNvbXBhdGlibGUgaW5ldCB0eXBlcyBoZWFkZXIgKi8iID4+JGFjX3N0ZGludAotaWYgIHRlc3QgIl8kYWNfY3ZfaGVhZGVyX3N0ZGludF91IiAhPSAiXyIgOyB0aGVuCi0gIGFjX2hlYWRlcj0iJGFjX2N2X2hlYWRlcl9zdGRpbnRfdSIKLSAgZWNobyAiI2RlZmluZSBfU1RESU5UX0hFQURFUl9VX0lOVDMyIiAnIiciJGFjX2hlYWRlciInIicgPj4kYWNfc3RkaW50Ci1lbHNlCi0gIGVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hFQURFUl9VX0lOVDMyICovIiA+PiRhY19zdGRpbnQKLWZpCi0KLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWlmIHRlc3QgIl8kYWNfaGVhZGVyIiAhPSAiXyIgOyB0aGVuIGlmIHRlc3QgIiRhY19oZWFkZXIiICE9ICJzdGRkZWYuaCIgOyB0aGVuCi0gIGVjaG8gIiNpbmNsdWRlIDwkYWNfaGVhZGVyPiIgPj4kYWNfc3RkaW50Ci0gIGVjaG8gIiIgPj4kYWNfc3RkaW50Ci1maSBmaQotCi1lY2hvICIvKiB3aGljaCA2NGJpdCB0eXBlZGVmIGhhcyBiZWVuIGZvdW5kICovIiA+PiRhY19zdGRpbnQKLWlmIHRlc3QgIiRhY19jdl90eXBlX3VpbnQ2NF90IiA9ICJ5ZXMiIDsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9VSU5UNjRfVCIgIjEiICA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfVUlOVDY0X1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWlmIHRlc3QgIiRhY19jdl90eXBlX3VfaW50NjRfdCIgPSAieWVzIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfVV9JTlQ2NF9UIiAiMSIgID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWVjaG8gIi8qIHdoaWNoIHR5cGUgbW9kZWwgaGFzIGJlZW4gZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiXyRhY19jdl9jaGFyX2RhdGFfbW9kZWwiICE9ICJfIiA7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0NIQVJfTU9ERUwiICIkYWNfY3ZfY2hhcl9kYXRhX21vZGVsIiA+PiRhY19zdGRpbnQKLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0xPTkdfTU9ERUwiICIkYWNfY3ZfbG9uZ19kYXRhX21vZGVsIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0NIQVJfTU9ERUwgLy8gc2tpcHBlZCAqLyIgPj4kYWNfc3RkaW50Ci1lY2hvICIvKiAjdW5kZWYgX1NURElOVF9MT05HX01PREVMIC8vIHNraXBwZWQgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLWVjaG8gIi8qIHdoZXRoZXIgaW50X2xlYXN0IHR5cGVzIHdlcmUgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50X2xlYXN0MzJfdCIgPSAieWVzIjsgdGhlbgotZWNobyAiI2RlZmluZSAgIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UIiAiMSIgID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRfTEVBU1QzMl9UICovIiA+PiRhY19zdGRpbnQKLWZpCi1lY2hvICIvKiB3aGV0aGVyIGludF9mYXN0IHR5cGVzIHdlcmUgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50X2Zhc3QzMl90IiA9ICJ5ZXMiOyB0aGVuCi1lY2hvICIjZGVmaW5lICAgX1NURElOVF9IQVZFX0lOVF9GQVNUMzJfVCIgIjEiID4+JGFjX3N0ZGludAotZWxzZQotZWNobyAiLyogI3VuZGVmIF9TVERJTlRfSEFWRV9JTlRfRkFTVDMyX1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIi8qIHdoZXRoZXIgaW50bWF4X3QgdHlwZSB3YXMgZGV0ZWN0ZWQgKi8iID4+JGFjX3N0ZGludAotaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50bWF4X3QiID0gInllcyI7IHRoZW4KLWVjaG8gIiNkZWZpbmUgICBfU1RESU5UX0hBVkVfSU5UTUFYX1QiICIxIiA+PiRhY19zdGRpbnQKLWVsc2UKLWVjaG8gIi8qICN1bmRlZiBfU1RESU5UX0hBVkVfSU5UTUFYX1QgKi8iID4+JGFjX3N0ZGludAotZmkKLWVjaG8gIiIgPj4kYWNfc3RkaW50Ci0KLSAgY2F0ID4+JGFjX3N0ZGludCA8PFNURElOVF9FT0YKLS8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uIGRldGVjdGlvbnMgcGFydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCi0KLS8qIHdoZXRoZXIgd2UgbmVlZCB0byBkZWZpbmUgYml0c3BlY2lmaWMgdHlwZXMgZnJvbSBjb21waWxlciBiYXNlIHR5cGVzICovCi0jaWZuZGVmIF9TVERJTlRfSEVBREVSX0lOVFBUUgotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9VSU5UMzIKLSNpZm5kZWYgX1NURElOVF9IRUFERVJfVV9JTlQzMgotI2RlZmluZSBfU1RESU5UX05FRURfSU5UX01PREVMX1QKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfSEFWRV9VX0lOVF9UWVBFUwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9IQVZFX1VfSU5UX1RZUEVTCi0jdW5kZWYgX1NURElOVF9ORUVEX0lOVF9NT0RFTF9UCi0jZW5kaWYKLQotI2lmZGVmICBfU1RESU5UX0NIQVJfTU9ERUwKLSNpZiAgICAgX1NURElOVF9DSEFSX01PREVMKzAgPT0gMTIyIHx8IF9TVERJTlRfQ0hBUl9NT0RFTCswID09IDEyNAotI2lmbmRlZiBfU1RESU5UX0JZVEVfTU9ERUwKLSNkZWZpbmUgX1NURElOVF9CWVRFX01PREVMIDEyCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX1NURElOVF9IQVZFX0lOVF9MRUFTVDMyX1QKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVF9MRUFTVF9UCi0jZW5kaWYKLQotI2lmbmRlZiBfU1RESU5UX0hBVkVfSU5UX0ZBU1QzMl9UCi0jZGVmaW5lIF9TVERJTlRfTkVFRF9JTlRfRkFTVF9UCi0jZW5kaWYKLQotI2lmbmRlZiBfU1RESU5UX0hFQURFUl9JTlRQVFIKLSNkZWZpbmUgX1NURElOVF9ORUVEX0lOVFBUUl9UCi0jaWZuZGVmIF9TVERJTlRfSEFWRV9JTlRNQVhfVAotI2RlZmluZSBfU1RESU5UX05FRURfSU5UTUFYX1QKLSNlbmRpZgotI2VuZGlmCi0KLQotLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4gZGVmaW5pdGlvbiBwYXJ0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KLQotLyogc29tZSBzeXN0ZW0gaGVhZGVycyBoYXZlIGdvb2QgdWludDY0X3QgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNpZiAgICAgZGVmaW5lZCBfU1RESU5UX0hBVkVfVUlOVDY0X1QgIHx8IGRlZmluZWQgSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2VsaWYgICBkZWZpbmVkIF9TVERJTlRfSEFWRV9VX0lOVDY0X1QgfHwgZGVmaW5lZCBIQVZFX1VfSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiB1X2ludDY0X3QgdWludDY0X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIF9IQVZFX1VJTlQ2NF9UCi0vKiAuLiBoZXJlIGFyZSBzb21lIGNvbW1vbiBoZXVyaXN0aWNzIHVzaW5nIGNvbXBpbGVyIHJ1bnRpbWUgc3BlY2lmaWNzICovCi0jaWYgZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0KLSNlbGlmICFkZWZpbmVkIF9fU1RSSUNUX0FOU0lfXwotI2lmIGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX1dBVENPTUNfXyB8fCBkZWZpbmVkIF9fQk9STEFORENfXwotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiBfX2ludDY0IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0KLSNlbGlmIGRlZmluZWQgX19HTlVDX18gfHwgZGVmaW5lZCBfX01XRVJLU19fIHx8IGRlZmluZWQgX19FTEZfXwotLyogbm90ZTogYWxsIEVMRi1zeXN0ZW1zIHNlZW0gdG8gaGF2ZSBsb2ZmLXN1cHBvcnQgd2hpY2ggbmVlZHMgNjQtYml0ICovCi0jaWYgIWRlZmluZWQgX05PX0xPTkdMT05HCi0jZGVmaW5lIF9IQVZFX1VJTlQ2NF9UCi0jZGVmaW5lIF9IQVZFX0xPTkdMT05HX1VJTlQ2NF9UCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0jZW5kaWYKLQotI2VsaWYgZGVmaW5lZCBfX2FscGhhIHx8IChkZWZpbmVkIF9fbWlwcyAmJiBkZWZpbmVkIF9BQklOMzIpCi0jaWYgIWRlZmluZWQgX05PX0xPTkdMT05HCi10eXBlZGVmIGxvbmcgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50NjRfdDsKLSNlbmRpZgotICAvKiBjb21waWxlci9jcHUgdHlwZSB0byBkZWZpbmUgaW50NjRfdCAqLwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfU1RESU5UX0hBVkVfVV9JTlRfVFlQRVMKLS8qIGludDhfdCBpbnQxNl90IGludDMyX3QgZGVmaW5lZCBieSBpbmV0IGNvZGUsIHJlZGVjbGFyZSB0aGUgdV9pbnRYWCB0eXBlcyAqLwotdHlwZWRlZiB1X2ludDhfdCB1aW50OF90OwotdHlwZWRlZiB1X2ludDE2X3QgdWludDE2X3Q7Ci10eXBlZGVmIHVfaW50MzJfdCB1aW50MzJfdDsKLQotLyogZ2xpYmMgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBfU1RESU5UX05FRURfSU5UX01PREVMX1QKLS8qIHdlIG11c3QgZ3Vlc3MgYWxsIHRoZSBiYXNpYyB0eXBlcy4gQXBhcnQgZnJvbSBieXRlLWFkcmVzc2FibGUgc3lzdGVtLCAqLwotLyogdGhlcmUgYSBmZXcgMzItYml0LW9ubHkgZHNwLXN5c3RlbXMgdGhhdCB3ZSBndWFyZCB3aXRoIEJZVEVfTU9ERUwgOC19ICovCi0vKiAoYnR3LCB0aG9zZSBuaWJibGUtYWRkcmVzc2FibGUgc3lzdGVtcyBhcmUgd2F5IG9mZiwgb3Igc28gd2UgYXNzdW1lKSAqLwotCi0KLSNpZiBkZWZpbmVkIF9TVERJTlRfQllURV9NT0RFTAotI2lmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDI0MgotLyogMjo0OjIgPSAgSVAxNiA9IGEgbm9ybWFsIDE2LWJpdCBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVpbnQzMl90OwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLXR5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Ci10eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKLXR5cGVkZWYgICAgICAgICAgbG9uZyAgICBpbnQzMl90OwotI2VuZGlmCi0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDQgfHwgX1NURElOVF9MT05HX01PREVMID09IDQ0NAotLyogMjo0OjQgPSAgTFAzMiA9IGEgMzItYml0IHN5c3RlbSBkZXJpdmVkIGZyb20gYSAxNi1iaXQgKi8KLS8qIDQ6NDo0ID0gSUxQMzIgPSBhIG5vcm1hbCAzMi1iaXQgc3lzdGVtICAgICAgICAgICAgICAgICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotI2VsaWYgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg0IHx8IF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ4OAotLyogNDo4OjQgPSAgSVAzMiA9IGEgMzItYml0IHN5c3RlbSBwcmVwYXJlZCBmb3IgNjQtYml0ICAgICovCi0vKiA0Ojg6OCA9ICBMUDY0ID0gYSBub3JtYWwgNjQtYml0IHN5c3RlbSAgICAgICAgICAgICAgICAgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICB1aW50MTZfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgIHVpbnQzMl90OwotI2lmbmRlZiBfX2ludDhfdF9kZWZpbmVkCi0jZGVmaW5lIF9faW50OF90X2RlZmluZWQKLXR5cGVkZWYgICAgICAgICAgY2hhciAgICBpbnQ4X3Q7Ci10eXBlZGVmICAgICAgICAgIHNob3J0ICAgaW50MTZfdDsKLXR5cGVkZWYgICAgICAgICAgaW50ICAgICBpbnQzMl90OwotI2VuZGlmCi0vKiB0aGlzIHN5c3RlbSBoYXMgYSAibG9uZyIgb2YgNjRiaXQgKi8KLSNpZm5kZWYgX0hBVkVfVUlOVDY0X1QKLSNkZWZpbmUgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIHVpbnQ2NF90OwotdHlwZWRlZiAgICAgICAgICBsb25nICAgIGludDY0X3Q7Ci0jZW5kaWYKLSNlbGlmIF9TVERJTlRfTE9OR19NT0RFTCswID09IDQ0OAotLyogICAgICBMTFA2NCAgIGEgNjQtYml0IHN5c3RlbSBkZXJpdmVkIGZyb20gYSAzMi1iaXQgc3lzdGVtICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAgICB1aW50MzJfdDsKLSNpZm5kZWYgX19pbnQ4X3RfZGVmaW5lZAotI2RlZmluZSBfX2ludDhfdF9kZWZpbmVkCi10eXBlZGVmICAgICAgICAgIGNoYXIgICAgaW50OF90OwotdHlwZWRlZiAgICAgICAgICBzaG9ydCAgIGludDE2X3Q7Ci10eXBlZGVmICAgICAgICAgIGludCAgICAgaW50MzJfdDsKLSNlbmRpZgotLyogYXNzdW1pbmcgdGhlIHN5c3RlbSBoYXMgYSAibG9uZyBsb25nIiAqLwotI2lmbmRlZiBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9VSU5UNjRfVAotI2RlZmluZSBfSEFWRV9MT05HTE9OR19VSU5UNjRfVAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci10eXBlZGVmICAgICAgICAgIGxvbmcgbG9uZyAgaW50NjRfdDsKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgX1NURElOVF9OT19JTlQzMl9UCi0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UOF9UCi0jZGVmaW5lIF9TVERJTlRfTk9fSU5UMzJfVAotI2VuZGlmCi0jZW5kaWYKLQotLyoKLSAqIHF1b3RlIGZyb20gU3VuT1MtNS44IHN5cy9pbnR0eXBlcy5oOgotICogVXNlIGF0IHlvdXIgb3duIHJpc2suICBBcyBvZiBGZWJydWFyeSAxOTk2LCB0aGUgY29tbWl0dGVlIGlzIHNxdWFyZWx5Ci0gKiBiZWhpbmQgdGhlIGZpeGVkIHNpemVkIHR5cGVzOyB0aGUgImxlYXN0IiBhbmQgImZhc3QiIHR5cGVzIGFyZSBzdGlsbCBiZWluZwotICogZGlzY3Vzc2VkLiAgVGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlICJmYXN0IiB0eXBlcyBtYXkgYmUgcmVtb3ZlZCBiZWZvcmUKLSAqIHRoZSBzdGFuZGFyZCBpcyBmaW5hbGl6ZWQgaXMgaGlnaCBlbm91Z2ggdGhhdCB0aGV5IGFyZSBub3QgY3VycmVudGx5Ci0gKiBpbXBsZW1lbnRlZC4KLSAqLwotCi0jaWYgZGVmaW5lZCBfU1RESU5UX05FRURfSU5UX0xFQVNUX1QKLXR5cGVkZWYgIGludDhfdCAgICBpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmICBpbnQxNl90ICAgaW50X2xlYXN0MTZfdDsKLXR5cGVkZWYgIGludDMyX3QgICBpbnRfbGVhc3QzMl90OwotI2lmZGVmIF9IQVZFX1VJTlQ2NF9UCi10eXBlZGVmICBpbnQ2NF90ICAgaW50X2xlYXN0NjRfdDsKLSNlbmRpZgotCi10eXBlZGVmIHVpbnQ4X3QgICB1aW50X2xlYXN0OF90OwotdHlwZWRlZiB1aW50MTZfdCAgdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIHVpbnQzMl90ICB1aW50X2xlYXN0MzJfdDsKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiB1aW50NjRfdCAgdWludF9sZWFzdDY0X3Q7Ci0jZW5kaWYKLSAgLyogbGVhc3QgdHlwZXMgKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfU1RESU5UX05FRURfSU5UX0ZBU1RfVAotdHlwZWRlZiAgaW50OF90ICAgIGludF9mYXN0OF90OwotdHlwZWRlZiAgaW50ICAgICAgIGludF9mYXN0MTZfdDsKLXR5cGVkZWYgIGludDMyX3QgICBpbnRfZmFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgIGludDY0X3QgICBpbnRfZmFzdDY0X3Q7Ci0jZW5kaWYKLQotdHlwZWRlZiB1aW50OF90ICAgdWludF9mYXN0OF90OwotdHlwZWRlZiB1bnNpZ25lZCAgdWludF9mYXN0MTZfdDsKLXR5cGVkZWYgdWludDMyX3QgIHVpbnRfZmFzdDMyX3Q7Ci0jaWZkZWYgX0hBVkVfVUlOVDY0X1QKLXR5cGVkZWYgdWludDY0X3QgIHVpbnRfZmFzdDY0X3Q7Ci0jZW5kaWYKLSAgLyogZmFzdCB0eXBlcyAqLwotI2VuZGlmCi0KLSNpZmRlZiBfU1RESU5UX05FRURfSU5UTUFYX1QKLSNpZmRlZiBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgaW50NjRfdCAgICAgICBpbnRtYXhfdDsKLXR5cGVkZWYgdWludDY0X3QgICAgICB1aW50bWF4X3Q7Ci0jZWxzZQotdHlwZWRlZiAgICAgICAgICBsb25nICBpbnRtYXhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50bWF4X3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX1NURElOVF9ORUVEX0lOVFBUUl9UCi0jaWZuZGVmIF9faW50cHRyX3RfZGVmaW5lZAotI2RlZmluZSBfX2ludHB0cl90X2RlZmluZWQKLS8qIHdlIGVuY291cmFnZSB1c2luZyAibG9uZyIgdG8gc3RvcmUgcG9pbnRlciB2YWx1ZXMsIG5ldmVyIHVzZSAiaW50IiAhICovCi0jaWYgICBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDIgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDg0Ci10eXBlZGVmICB1bnNpZ25lZCBpbnQgICB1aW50cHRyX3Q7Ci10eXBlZGVmICAgICAgICAgICBpbnQgICAgaW50cHRyX3Q7Ci0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSAyNDQgfHwgX1NURElOVF9MT05HX01PREVMKzAgPT0gNDQ0Ci10eXBlZGVmICB1bnNpZ25lZCBsb25nICB1aW50cHRyX3Q7Ci10eXBlZGVmICAgICAgICAgICBsb25nICAgaW50cHRyX3Q7Ci0jZWxpZiBfU1RESU5UX0xPTkdfTU9ERUwrMCA9PSA0NDggJiYgZGVmaW5lZCBfSEFWRV9VSU5UNjRfVAotdHlwZWRlZiAgICAgICAgdWludDY0X3QgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgIGludDY0X3QgIGludHB0cl90OwotI2Vsc2UgLyogbWF0Y2hlcyB0eXBpY2FsIHN5c3RlbSB0eXBlcyBJTFAzMiBhbmQgTFA2NCAtIGJ1dCBub3QgSVAxNiBvciBMTFA2NCAqLwotdHlwZWRlZiAgdW5zaWduZWQgbG9uZyAgdWludHB0cl90OwotdHlwZWRlZiAgICAgICAgICAgbG9uZyAgIGludHB0cl90OwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGUgSVNPIEM5OSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbiBDKysgaW1wbGVtZW50YXRpb25zIHRoZXNlCi0gICBzaG91bGQgb25seSBiZSBkZWZpbmVkIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLiAgKi8KLSNpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fU1REQ19DT05TVEFOVF9NQUNST1MKLSNpZm5kZWYgVUlOVDMyX0MKLQotLyogU2lnbmVkLiAgKi8KLSMgZGVmaW5lIElOVDhfQyhjKSAgICAgIGMKLSMgZGVmaW5lIElOVDE2X0MoYykgICAgIGMKLSMgZGVmaW5lIElOVDMyX0MoYykgICAgIGMKLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBJTlQ2NF9DKGMpICAgIGMgIyMgTAotIyBlbHNlCi0jICBkZWZpbmUgSU5UNjRfQyhjKSAgICBjICMjIExMCi0jIGVuZGlmCi0KLS8qIFVuc2lnbmVkLiAgKi8KLSMgZGVmaW5lIFVJTlQ4X0MoYykgICAgIGMgIyMgVQotIyBkZWZpbmUgVUlOVDE2X0MoYykgICAgYyAjIyBVCi0jIGRlZmluZSBVSU5UMzJfQyhjKSAgICBjICMjIFUKLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBVSU5UNjRfQyhjKSAgIGMgIyMgVUwKLSMgZWxzZQotIyAgZGVmaW5lIFVJTlQ2NF9DKGMpICAgYyAjIyBVTEwKLSMgZW5kaWYKLQotLyogTWF4aW1hbCB0eXBlLiAgKi8KLSMgaWZkZWYgX0hBVkVfTE9OR0xPTkdfVUlOVDY0X1QKLSMgIGRlZmluZSBJTlRNQVhfQyhjKSAgIGMgIyMgTAotIyAgZGVmaW5lIFVJTlRNQVhfQyhjKSAgYyAjIyBVTAotIyBlbHNlCi0jICBkZWZpbmUgSU5UTUFYX0MoYykgICBjICMjIExMCi0jICBkZWZpbmUgVUlOVE1BWF9DKGMpICBjICMjIFVMTAotIyBlbmRpZgotCi0gIC8qIGxpdGVyYWxudW1iZXJzICovCi0jZW5kaWYKLSNlbmRpZgotCi0vKiBUaGVzZSBsaW1pdHMgYXJlIG1lcmlseSB0aG9zZSBvZiBhIHR3byBjb21wbGVtZW50IGJ5dGUtb3JpZW50ZWQgc3lzdGVtICovCi0KLS8qIE1pbmltdW0gb2Ygc2lnbmVkIGludGVncmFsIHR5cGVzLiAgKi8KLSMgZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCi0jIGRlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkKLSMgZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCi0jIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgICAgICAgICgtX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCi0vKiBNYXhpbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcy4gICovCi0jIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpCi0jIGRlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKLSMgZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpCi0jIGRlZmluZSBJTlQ2NF9NQVggICAgICAgICAgICAgIChfX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykpCi0KLS8qIE1heGltdW0gb2YgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMuICAqLwotIyBkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1KQotIyBkZWZpbmUgVUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzUpCi0jIGRlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSMgZGVmaW5lIFVJTlQ2NF9NQVggICAgICAgICAgICAgKF9fVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpKQotCi0vKiBNaW5pbXVtIG9mIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLwotIyBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICAgICAgICBJTlQ4X01JTgotIyBkZWZpbmUgSU5UX0xFQVNUMTZfTUlOICAgICAgICBJTlQxNl9NSU4KLSMgZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgICAgICAgSU5UMzJfTUlOCi0jIGRlZmluZSBJTlRfTEVBU1Q2NF9NSU4gICAgICAgIElOVDY0X01JTgotLyogTWF4aW11bSBvZiBzaWduZWQgaW50ZWdyYWwgdHlwZXMgaGF2aW5nIGEgbWluaW11bSBzaXplLiAgKi8KLSMgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgICAgICAgSU5UOF9NQVgKLSMgZGVmaW5lIElOVF9MRUFTVDE2X01BWCAgICAgICAgSU5UMTZfTUFYCi0jIGRlZmluZSBJTlRfTEVBU1QzMl9NQVggICAgICAgIElOVDMyX01BWAotIyBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICAgICAgICBJTlQ2NF9NQVgKLQotLyogTWF4aW11bSBvZiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyBoYXZpbmcgYSBtaW5pbXVtIHNpemUuICAqLwotIyBkZWZpbmUgVUlOVF9MRUFTVDhfTUFYICAgICAgICBVSU5UOF9NQVgKLSMgZGVmaW5lIFVJTlRfTEVBU1QxNl9NQVggICAgICAgVUlOVDE2X01BWAotIyBkZWZpbmUgVUlOVF9MRUFTVDMyX01BWCAgICAgICBVSU5UMzJfTUFYCi0jIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYICAgICAgIFVJTlQ2NF9NQVgKLQotICAvKiBzaG9ydGNpcmN1aXQqLwotI2VuZGlmCi0gIC8qIG9uY2UgKi8KLSNlbmRpZgotI2VuZGlmCi1TVERJTlRfRU9GCi1maQotICAgIGlmIGNtcCAtcyAkYWNfc3RkaW50X2ggJGFjX3N0ZGludCAyPi9kZXYvbnVsbDsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfc3RkaW50X2ggaXMgdW5jaGFuZ2VkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICRhY19zdGRpbnRfaCBpcyB1bmNoYW5nZWQiID4mNjt9Ci0gICAgZWxzZQotICAgICAgYWNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFjX3N0ZGludF9oIiB8fAotJGFzX2V4cHIgWCIkYWNfc3RkaW50X2giIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX3N0ZGludF9oIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhY19zdGRpbnRfaCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfc3RkaW50X2giIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYWNfc3RkaW50X2giIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgICAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAotICAgICAgcm0gLWYgJGFjX3N0ZGludF9oCi0gICAgICBtdiAkYWNfc3RkaW50ICRhY19zdGRpbnRfaAotICAgIGZpCi0gOzsKLQotICBlc2FjCi1kb25lICMgZm9yIGFjX3RhZwotCi0KLWFzX2ZuX2V4aXQgMAotX0FDRU9GCi1hY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQotCi10ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAotICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKLQotCi0jIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCi0jIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KLSMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCi0jIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKLSMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCi0jIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCi0jIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKLSMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCi1pZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KLSAgYWNfY3Nfc3VjY2Vzcz06Ci0gIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KLSAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKLSAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKLSAgZXhlYyA1Pi9kZXYvbnVsbAotICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCi0gIGV4ZWMgNT4+Y29uZmlnLmxvZwotICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAotICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAxCi1maQotaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIiAmJiB0ZXN0ICIkZW5hYmxlX29wdGlvbl9jaGVja2luZyIgIT0gbm87IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMjt9Ci1maQotCi0KLQotCi1wcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHdpdGhvdXQgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBiZSBidWlsdDpcbiIKLSggZm9yIGkgaW4gJEdTVF9QTFVHSU5TX1NFTEVDVEVEOyBkbyBwcmludGYgJ1x0JyRpJ1xuJzsgZG9uZSApIHwgc29ydAotcHJpbnRmICJcbiIKLQotcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcyB0aGF0IHdpbGwgTk9UIGJlIGJ1aWx0OlxuIgotKCBmb3IgaSBpbiAkR1NUX1BMVUdJTlNfQUxMOyBkbwotICAgIGNhc2UgIiAkR1NUX1BMVUdJTlNfU0VMRUNURUQgIiBpbgotICAgICAgKlwgJGlcICopCi0JOzsKLSAgICAgICopCi0JcHJpbnRmICdcdCckaSdcbicKLQk7OwotICAgIGVzYWMKLSAgZG9uZSApIHwgc29ydAotcHJpbnRmICJcbiIKLQotcHJpbnRmICJjb25maWd1cmU6ICoqKiBQbHVnLWlucyB0aGF0IGhhdmUgTk9UIGJlZW4gcG9ydGVkOlxuIgotKCBmb3IgaSBpbiAkR1NUX1BMVUdJTlNfTk9OUE9SVEVEOyBkbwotCXByaW50ZiAnXHQnJGknXG4nCi0gIGRvbmUgKSB8IHNvcnQKLXByaW50ZiAiXG4iCi0KLWlmIHRlc3QgIngkQlVJTERfRVhURVJOQUwiID0gInhubyI7IHRoZW4KLSAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBObyBwbHVnLWlucyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aWxsIGJlIGJ1aWx0XG4iCi1lbHNlCi0gIHByaW50ZiAiY29uZmlndXJlOiAqKiogUGx1Zy1pbnMgd2l0aCBkZXBlbmRlbmNpZXMgdGhhdCB3aWxsIGJlIGJ1aWx0OiIKLSAgcHJpbnRmICIkR1NUX1BMVUdJTlNfWUVTXG4iIHwgc29ydAotICBwcmludGYgIlxuIgotICBwcmludGYgImNvbmZpZ3VyZTogKioqIFBsdWctaW5zIHdpdGggZGVwZW5kZW5jaWVzIHRoYXQgd2lsbCBOT1QgYmUgYnVpbHQ6IgotICBwcmludGYgIiRHU1RfUExVR0lOU19OT1xuIiB8IHNvcnQKLSAgcHJpbnRmICJcbiIKLWZpCi0KLQotICBpZiB0ZXN0ICIkSEFWRV9PUkMiID0geWVzIDsgdGhlbgotICAgIHByaW50ZiAiY29uZmlndXJlOiAqKiogT3JjIGFjY2VsZXJhdGlvbiBlbmFibGVkLlxuIgotICBlbHNlCi0gICAgaWYgdGVzdCAieCRlbmFibGVfb3JjIiA9ICJ4bm8iIDsgdGhlbgotICAgICAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBPcmMgYWNjZWxlcmF0aW9uIGRpc2FibGVkIGJ5IC0tZGlzYWJsZS1vcmMuICBTbG93ZXIgY29kZSBwYXRoc1xuIgotICAgICAgcHJpbnRmICIgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQuXG4iCi0gICAgZWxzZQotICAgICAgcHJpbnRmICJjb25maWd1cmU6ICoqKiBPcmMgYWNjZWxlcmF0aW9uIGRpc2FibGVkLiAgUmVxdWlyZXMgT3JjID49ICRPUkNfUkVRLCB3aGljaCB3YXNcbiIKLSAgICAgIHByaW50ZiAiICAgICAgICAgICAgICAgbm90IGZvdW5kLiAgU2xvd2VyIGNvZGUgcGF0aHMgd2lsbCBiZSB1c2VkLlxuIgotICAgIGZpCi0gIGZpCi0gIHByaW50ZiAiXG4iCi0KLQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWE5MGYzLi4wMDAwMDAwCi0tLSBhL2NvbmZpZ3VyZS5hYworKysgL2Rldi9udWxsCkBAIC0xLDExMzUgKzAsMCBAQAotQUNfUFJFUkVRKFsyLjY5XSkKLQotZG5sIHBsZWFzZSByZWFkIGdzdHJlYW1lci9kb2NzL3JhbmRvbS9hdXRvdG9vbHMgYmVmb3JlIGNoYW5naW5nIHRoaXMgZmlsZQotCi1kbmwgaW5pdGlhbGl6ZSBhdXRvY29uZgotZG5sIHJlbGVhc2VzIG9ubHkgZG8gLVdhbGwsIGdpdCBhbmQgcHJlcmVsZWFzZSBkb2VzIC1XZXJyb3IgdG9vCi1kbmwgdXNlIGEgdGhyZWUgZGlnaXQgdmVyc2lvbiBudW1iZXIgZm9yIHJlbGVhc2VzLCBhbmQgZm91ciBmb3IgZ2l0L3ByZQotQUNfSU5JVChbR1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnNdLFsxLjEwLjRdLFtodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXJdLFtnc3QtcGx1Z2lucy1nb29kXSkKLQotQUdfR1NUX0lOSVQKLQotZG5sIGluaXRpYWxpemUgYXV0b21ha2UKLUFNX0lOSVRfQVVUT01BS0UoWy1Xbm8tcG9ydGFiaWxpdHkgMS4xNCBuby1kaXN0LWd6aXAgZGlzdC14eiB0YXItdXN0YXIgc3ViZGlyLW9iamVjdHNdKQotCi1kbmwgZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTl8qIHZhcmlhYmxlcwotQVNfVkVSU0lPTgotCi1kbmwgY2hlY2sgaWYgdGhpcyBpcyBhIHJlbGVhc2UgdmVyc2lvbgotQVNfTkFOTyhHU1RfR0lUPSJubyIsIEdTVF9HSVQ9InllcyIpCi0KLWRubCBjYW4gYXV0b2NvbmYgZmluZCB0aGUgc291cmNlID8KLUFDX0NPTkZJR19TUkNESVIoW2dzdC9sYXcvYWxhdy5jXSkKLQotZG5sIGRlZmluZSB0aGUgb3V0cHV0IGhlYWRlciBmb3IgY29uZmlnCi1BQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQotCi1kbmwgQU1fTUFJTlRBSU5FUl9NT0RFIG9ubHkgcHJvdmlkZXMgdGhlIG9wdGlvbiB0byBjb25maWd1cmUgdG8gZW5hYmxlIGl0Ci1BTV9NQUlOVEFJTkVSX01PREUoW2VuYWJsZV0pCi0KLWRubCBzZXRzIGhvc3RfKiB2YXJpYWJsZXMKLUFDX0NBTk9OSUNBTF9IT1NUCi0KLWRubCB1c2UgcHJldHR5IGJ1aWxkIG91dHB1dCB3aXRoIGF1dG9tYWtlID49IDEuMTEKLW00X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLFtBTV9TSUxFTlRfUlVMRVMoW3llc10pXSwKLSAgW0FNX0RFRkFVTFRfVkVSQk9TSVRZPTEKLSAgIEFDX1NVQlNUKEFNX0RFRkFVTFRfVkVSQk9TSVRZKV0pCi0KLWRubCBvdXIgbGlicmFyaWVzIGFuZCBpbnN0YWxsIGRpcnMgdXNlIEdTVF9BUElfVkVSU0lPTiBpbiB0aGUgZmlsZW5hbWUKLWRubCB0byBhbGxvdyBzaWRlLWJ5LXNpZGUgaW5zdGFsbGF0aW9uIG9mIGRpZmZlcmVudCBBUEkgdmVyc2lvbnMKLUdTVF9BUElfVkVSU0lPTj0xLjAKLUFDX1NVQlNUKEdTVF9BUElfVkVSU0lPTikKLUFDX0RFRklORV9VTlFVT1RFRChHU1RfQVBJX1ZFUlNJT04sICIkR1NUX0FQSV9WRVJTSU9OIiwKLSAgW0dTdHJlYW1lciBBUEkgVmVyc2lvbl0pCi0KLUFHX0dTVF9MSUJUT09MX1BSRVBBUkUKLUFTX0xJQlRPT0woR1NULCAxMDA0LCAwLCAxMDA0KQotCi1kbmwgKioqIHJlcXVpcmVkIHZlcnNpb25zIG9mIEdTdHJlYW1lciBzdHVmZiAqKioKLUdTVF9SRVE9MS4xMC4wCi1HU1RQQl9SRVE9MS4xMC4wCi0KLWRubCAqKiogYXV0b3Rvb2xzIHN0dWZmICoqKioKLQotZG5sIGFsbG93IGZvciBkaWZmZXJlbnQgYXV0b3Rvb2xzCi1BU19BVVRPVE9PTFNfQUxURVJOQVRFCi0KLWRubCBBZGQgcGFyYW1ldGVycyBmb3IgYWNsb2NhbAotQUNfU1VCU1QoQUNMT0NBTF9BTUZMQUdTLCAiLUkgbTQgLUkgY29tbW9uL200IikKLQotZG5sIHNldCB1cCBnZXR0ZXh0Ci1kbmwgdGhlIHZlcnNpb24gY2hlY2sgbmVlZHMgdG8gc3RheSBoZXJlIGJlY2F1c2UgYXV0b3BvaW50IGdyZXBzIGZvciBpdAotQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xN10pCi1BTV9HTlVfR0VUVEVYVChbZXh0ZXJuYWxdKQotQUdfR1NUX0dFVFRFWFQoW2dzdC1wbHVnaW5zLWdvb2QtJEdTVF9BUElfVkVSU0lPTl0pCi0KLWRubCAqKiogY2hlY2sgZm9yIGFyZ3VtZW50cyB0byBjb25maWd1cmUgKioqCi0KLUFHX0dTVF9BUkdfRElTQUJMRV9GQVRBTF9XQVJOSU5HUwotQUdfR1NUX0FSR19FTkFCTEVfRVhUUkFfQ0hFQ0tTCi0KLUFHX0dTVF9BUkdfREVCVUcKLUFHX0dTVF9BUkdfUFJPRklMSU5HCi1BR19HU1RfQVJHX1ZBTEdSSU5ECi1BR19HU1RfQVJHX0dDT1YKLQotQUdfR1NUX0FSR19FWEFNUExFUwotCi1BR19HU1RfQVJHX1dJVEhfUEtHX0NPTkZJR19QQVRICi1BR19HU1RfQVJHX1dJVEhfUEFDS0FHRV9OQU1FCi1BR19HU1RfQVJHX1dJVEhfUEFDS0FHRV9PUklHSU4KLQotQUdfR1NUX0FSR19XSVRIX1BMVUdJTlMKLQotQUdfR1NUX0FSR19FTkFCTEVfRVhURVJOQUwKLQotQUdfR1NUX0FSR19FTkFCTEVfRVhQRVJJTUVOVEFMCi0KLUFHX0dTVF9QS0dfQ09ORklHX1BBVEgKLQotZG5sICoqKiBjaGVja3MgZm9yIHBsYXRmb3JtICoqKgotCi1kbmwgKiBoYXJkd2FyZS9hcmNoaXRlY3R1cmUgKgotCi1kbmwgY29tbW9uL200L2dzdC1hcmNoLm00Ci1kbmwgY2hlY2sgQ1BVIHR5cGUKLUFHX0dTVF9BUkNICi0KLWRubCBEZXRlcm1pbmUgZW5kaWFubmVzcwotQUNfQ19CSUdFTkRJQU4KLQotZG5sICoqKiBjaGVja3MgZm9yIHByb2dyYW1zICoqKgotCi1kbmwgZmluZCBhIGNvbXBpbGVyCi1BQ19QUk9HX0NDCi1BQ19QUk9HX0NDX1NUREMKLQotZG5sIGRldGVybWluZSBjKysgY29tcGlsZXIKLUFDX1BST0dfQ1hYCi1kbmwgZGV0ZXJtaW5lIGlmIGMrKyBpcyBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0KLUFDX0NIRUNLX1BST0coSEFWRV9DWFgsICRDWFgsIHllcywgbm8pCi0KLWRubCBkZXRlcm1pbmUgYysrIHByZXByb2Nlc3NvcgotZG5sIEZJWE1FOiBkbyB3ZSBuZWVkIHRoaXMgPwotQUNfUFJPR19DWFhDUFAKLQotQUNfUFJPR19PQkpDCi0KLWRubCBjaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgJy1jJyBhbmQgJy1vJyBvcHRpb25zCi1BTV9QUk9HX0NDX0NfTwotCi1kbmwgZmluZCBhbiBhc3NlbWJsZXIKLUFNX1BST0dfQVMKLQotZG5sIGNoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBkbyB3aGlsZSgwKSBtYWNyb3MKLUFHX0dTVF9DSEVDS19ET1dISUxFX01BQ1JPUwotCi1BQ19QQVRIX1BST0coVkFMR1JJTkRfUEFUSCwgdmFsZ3JpbmQsIG5vKQotQU1fQ09ORElUSU9OQUwoSEFWRV9WQUxHUklORCwgdGVzdCAhICJ4JFZBTEdSSU5EX1BBVEgiID0gInhubyIpCi0KLWRubCBjaGVjayBmb3IgZG9jdW1lbnRhdGlvbiB0b29scwotR1RLX0RPQ19DSEVDSyhbMS4xMl0pCi1BR19HU1RfUExVR0lOX0RPQ1MoWzEuMTJdKQotCi1kbmwgKioqIGNoZWNrcyBmb3IgbGlicmFyaWVzICoqKgotCi1kbmwgY2hlY2sgZm9yIGxpYm0sIGZvciBzaW4oKQotTFRfTElCX00KLUFDX1NVQlNUKExJQk0pCi0KLUFDX0NIRUNLX0ZVTkNTKGNsb2NrX2dldHRpbWUsIFtdLCBbCi0gIEFDX0NIRUNLX0xJQihydCwgY2xvY2tfZ2V0dGltZSwgWwotICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUsIDEpCi0gICAgTElCUlQ9Ii1scnQiCi0gICAgQUNfU1VCU1QoW0xJQlJUXSkKLSAgXSkKLV0pCi0KLWRubCBjaGVjayBmb3IgcHRocmVhZHMKLUFYX1BUSFJFQUQKLQotZG5sICoqKiBjaGVja3MgZm9yIGhlYWRlciBmaWxlcyAqKioKLQotZG5sIGNoZWNrIGlmIHdlIGhhdmUgQU5TSSBDIGhlYWRlciBmaWxlcwotQUNfSEVBREVSX1NUREMKLQotZG5sIHVzZWQgYnkgZXh0L3dhdnBhY2sKLUFYX0NSRUFURV9TVERJTlRfSAotCi1kbmwgdXNlZCBpbiBnc3QvdWRwCi1BQ19DSEVDS19IRUFERVJTKFtzeXMvdGltZS5oXSkKLQotZG5sIHVzZWQgaW4gZ3N0L3VkcAotQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NvY2tldC5oXSkKLQotZG5sICoqKiBjaGVja3MgZm9yIHR5cGVzL2RlZmluZXMgKioqCi0KLWRubCBDaGVjayBmb3IgRklPTlJFQUQgaW9jdGwgZGVjbGFyYXRpb24uICBUaGlzIGNoZWNrIGlzIG5lZWRlZAotZG5sIGZvciB0aGUgVURQIHBsdWdpbiB0byBidWlsZCBvbiBTb2xhcmlzCi1HU1RfQ0hFQ0tfRklPTlJFQUQKLQotZG5sICoqKiBjaGVja3MgZm9yIHN0cnVjdHVyZXMgKioqCi0KLWRubCAqKiogY2hlY2tzIGZvciBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MgKioqCi0KLWRubCBjaGVjayBpZiB3ZSBoYXZlIEdDQyBpbmxpbmUtYXNtCi1BU19HQ0NfSU5MSU5FX0FTU0VNQkxZKFtIQVZFX0dDQ19BU009eWVzXSwgW0hBVkVfR0NDX0FTTT1ub10pCi1pZiB0ZXN0IHgkSEFWRV9HQ0NfQVNNID0geHllcyA7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfR0NDX0FTTSwgMSwKLSAgICBbRGVmaW5lIGlmIGNvbXBpbGVyIHN1cHBvcnRzIGdjYyBpbmxpbmUgYXNzZW1ibHldKQotZmkKLUFNX0NPTkRJVElPTkFMKEhBVkVfR0NDX0FTTSwgdGVzdCAieCRIQVZFX0dDQ19BU00iID0gInh5ZXMiKQotCi1kbmwgKioqIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMgKioqCi0KLUxJQlNfU0FWRT0kTElCUwotTElCUz0iJExJQlMgJExJQk0iCi1BQ19DSEVDS19GVU5DUyhyaW50IHNpbmggY29zaCBhc2luaCBmcGNsYXNzKQotTElCUz0kTElCU19TQVZFCi0KLWRubCBDaGVjayB3aGV0aGVyIGlzaW5mKCkgaXMgZGVmaW5lZCBieSBtYXRoLmgKLUFDX0NBQ0hFX0NIRUNLKFtmb3IgaXNpbmZdLCBhY19jdl9oYXZlX2lzaW5mLAotICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bWF0aC5oPl1dLCBbW2Zsb2F0IGYgPSAwLjA7IGludCBpPWlzaW5mKGYpXV0pXSxbYWNfY3ZfaGF2ZV9pc2luZj0ieWVzIl0sW2FjX2N2X2hhdmVfaXNpbmY9Im5vIl0pKQotaWYgdGVzdCAiJGFjX2N2X2hhdmVfaXNpbmYiID0gInllcyIKLXRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9JU0lORiwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNpbmYnIGZ1bmN0aW9uLl0pCi1maQotCi1kbmwgQ2hlY2sgZm9yIG1tYXAgKG5lZWRlZCBieSBlbGVjdHJpY2ZlbmNlIHBsdWdpbikKLUFDX0ZVTkNfTU1BUAotQU1fQ09ORElUSU9OQUwoR1NUX0hBVkVfTU1BUCwgdGVzdCAieCRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA9ICJ4eWVzIikKLQotZG5sIENoZWNrIGZvciBtbWFwIChuZWVkZWQgYnkgZWxlY3RyaWNmZW5jZSBwbHVnaW4pCi0KLUFDX0NIRUNLX1RZUEUoW3N0cnVjdCBpcF9tcmVxbl0sIFsKLSAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfSVBfTVJFUU4sLCBbRGVmaW5lIGlmIHdlIGhhdmUgc3RydWN0IGlwX21yZXFuXSldLCwKLSAgICAgICAgICAgICAgWyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSkKLQotZG5sICoqKiBjaGVja3MgZm9yIGRlcGVuZGVuY3kgbGlicmFyaWVzICoqKgotCi0KLWRubCBHTGliCi1HTElCX1JFUT0yLjQwLjAKLUFHX0dTVF9HTElCX0NIRUNLKFskR0xJQl9SRVFdKQotCi1kbmwgT3JjCi1PUkNfQ0hFQ0soWzAuNC4xN10pCi0KLWRubCBjaGVja3MgZm9yIGdzdHJlYW1lcgotZG5sIHVuaW5zdGFsbGVkIGlzIHNlbGVjdGVkIHByZWZlcmVudGlhbGx5IC0tIHNlZSBwa2ctY29uZmlnKDEpCi1BR19HU1RfQ0hFQ0tfR1NUKCRHU1RfQVBJX1ZFUlNJT04sIFskR1NUX1JFUV0sIHllcykKLUFHX0dTVF9DSEVDS19HU1RfQkFTRSgkR1NUX0FQSV9WRVJTSU9OLCBbJEdTVF9SRVFdLCB5ZXMpCi1BR19HU1RfQ0hFQ0tfR1NUX0NPTlRST0xMRVIoJEdTVF9BUElfVkVSU0lPTiwgWyRHU1RfUkVRXSwgeWVzKQotQUdfR1NUX0NIRUNLX0dTVF9ORVQoJEdTVF9BUElfVkVSU0lPTiwgWyRHU1RfUkVRXSwgeWVzKQotQUdfR1NUX0NIRUNLX0dTVF9DSEVDSygkR1NUX0FQSV9WRVJTSU9OLCBbJEdTVF9SRVFdLCBubykKLUFHX0dTVF9DSEVDS19HU1RfUExVR0lOU19CQVNFKCRHU1RfQVBJX1ZFUlNJT04sIFskR1NUUEJfUkVRXSwgeWVzKQotCi1HU1RfVE9PTFNfRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXRvb2xzZGlyIGdzdHJlYW1lci0kR1NUX0FQSV9WRVJTSU9OYAotaWYgdGVzdCAteiAkR1NUX1RPT0xTX0RJUjsgdGhlbgotICBBQ19NU0dfRVJST1IoW25vIHRvb2xzIGRpciBkZWZpbmVkIGluIEdTdHJlYW1lciBwa2ctY29uZmlnIGZpbGU7IGNvcmUgdXBncmFkZSBuZWVkZWQuXSkKLWZpCi1BQ19TVUJTVChHU1RfVE9PTFNfRElSKQotCi1BQ19NU0dfTk9USUNFKFVzaW5nIEdTdHJlYW1lciBDb3JlIFBsdWdpbnMgaW4gJEdTVF9QTFVHSU5TX0RJUikKLUFDX01TR19OT1RJQ0UoVXNpbmcgR1N0cmVhbWVyIEJhc2UgUGx1Z2lucyBpbiAkR1NUUEJfUExVR0lOU19ESVIpCi0KLUFNX0NPTkRJVElPTkFMKEhBVkVfR1NUX0NIRUNLLCB0ZXN0ICJ4JEhBVkVfR1NUX0NIRUNLIiA9ICJ4eWVzIikKLQotZG5sIENoZWNrIGZvciBkb2N1bWVudGF0aW9uIHhyZWZzCi1HTElCX1BSRUZJWD0iYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9cHJlZml4IGdsaWItMi4wYCIKLUdTVF9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnc3RyZWFtZXItJEdTVF9BUElfVkVSU0lPTmAiCi1HU1RQQl9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLSRHU1RfQVBJX1ZFUlNJT05gIgotQUNfU1VCU1QoR0xJQl9QUkVGSVgpCi1BQ19TVUJTVChHU1RfUFJFRklYKQotQUNfU1VCU1QoR1NUUEJfUFJFRklYKQotCi1kbmwgR1RLIGlzIG9wdGlvbmFsIGFuZCB1c2VkIGluIGV4YW1wbGVzCi1IQVZFX0dUSz1ubwotR1RLX1JFUT0zLjAuMAotaWYgdGVzdCAieCRCVUlMRF9FWEFNUExFUyIgPSAieHllcyI7IHRoZW4KLSAgUEtHX0NIRUNLX01PRFVMRVMoR1RLLCBndGsrLTMuMCA+PSAkR1RLX1JFUSwgSEFWRV9HVEs9eWVzLCBIQVZFX0dUSz1ubykKLSAgZG5sIHNvbWUgZXhhbXBsZXMgbmVlZCBndGsrLXgxMQotICBQS0dfQ0hFQ0tfTU9EVUxFUyhHVEtfWDExLCBndGsrLXgxMS0zLjAgPj0gJEdUS19SRVEsIEhBVkVfR1RLX1gxMT15ZXMsIEhBVkVfR1RLX1gxMT1ubykKLSAgQUNfU1VCU1QoR1RLX0xJQlMpCi0gIEFDX1NVQlNUKEdUS19DRkxBR1MpCi1maQotQU1fQ09ORElUSU9OQUwoSEFWRV9HVEssIHRlc3QgIngkSEFWRV9HVEsiID0gInh5ZXMiKQotQU1fQ09ORElUSU9OQUwoSEFWRV9HVEtfWDExLCB0ZXN0ICJ4JEhBVkVfR1RLX1gxMSIgPSAieHllcyIpCi0KLWRubCBDaGVjayBmb3IgLUJzeW1ib2xpYy1mdW5jdGlvbnMgbGlua2VyIGZsYWcgdXNlZCB0byBhdm9pZAotZG5sIGludHJhLWxpYnJhcnkgUExUIGp1bXBzLCBpZiBhdmFpbGFibGUuCi1BQ19BUkdfRU5BQkxFKEJzeW1ib2xpYywKLSAgICAgICAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtQnN5bWJvbGljXSxbYXZvaWQgbGlua2luZyB3aXRoIC1Cc3ltYm9saWNdKV0sLAotICAgICAgICAgICAgICBbU0FWRURfTERGTEFHUz0iJHtMREZMQUdTfSIgU0FWRURfTElCUz0iJHtMSUJTfSIKLSAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIC1Cc3ltYm9saWMtZnVuY3Rpb25zIGxpbmtlciBmbGFnXSkKLSAgICAgICAgICAgICAgIExERkxBR1M9LVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCi0gICAgICAgICAgICAgICBMSUJTPQotICAgICAgICAgICAgICAgQUNfVFJZX0xJTksoW10sIFtyZXR1cm4gMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9eWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9Cc3ltYm9saWM9bm8pCi0gICAgICAgICAgICAgICBMREZMQUdTPSIke1NBVkVEX0xERkxBR1N9IiBMSUJTPSIke1NBVkVEX0xJQlN9Il0pCi0KLWRubCAqKiogc2V0IHZhcmlhYmxlcyBiYXNlZCBvbiBjb25maWd1cmUgYXJndW1lbnRzICoqKgotCi1kbmwgc2V0IGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UKLUdTVF9MSUNFTlNFPSJMR1BMIgotQUNfREVGSU5FX1VOUVVPVEVEKEdTVF9MSUNFTlNFLCAiJEdTVF9MSUNFTlNFIiwgW0dTdHJlYW1lciBsaWNlbnNlXSkKLUFDX1NVQlNUKEdTVF9MSUNFTlNFKQotCi1kbmwgc2V0IGxvY2F0aW9uIG9mIHBsdWdpbiBkaXJlY3RvcnkKLUFHX0dTVF9TRVRfUExVR0lORElSCi0KLWRubCBzZXQgcmVsZWFzZSBkYXRlL3RpbWUKLUFHX0dTVF9TRVRfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FX1dJVEhfTkFOTyhbJFBBQ0tBR0VfVkVSU0lPTl9OQU5PXSwKLSAgWyIke3NyY2Rpcn0vZ3N0LXBsdWdpbnMtZ29vZC5kb2FwIl0sCi0gIFskUEFDS0FHRV9WRVJTSU9OX01BSk9SLiRQQUNLQUdFX1ZFUlNJT05fTUlOT1IuJFBBQ0tBR0VfVkVSU0lPTl9NSUNST10pCi0KLWRubCBidWlsZCBzdGF0aWMgcGx1Z2lucyBvciBub3QKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgcGx1Z2lucyBvciBub3RdKQotQUNfQVJHX0VOQUJMRSgKLSAgc3RhdGljLXBsdWdpbnMsCi0gIEFDX0hFTFBfU1RSSU5HKAotICAgIFstLWVuYWJsZS1zdGF0aWMtcGx1Z2luc10sCi0gICAgW2J1aWxkIHN0YXRpYyBwbHVnaW5zIEA8OkBkZWZhdWx0PW5vQDo+QF0pLAotICBbQVNfQ0FTRSgKLSAgICBbJGVuYWJsZXZhbF0sIFtub10sIFtdLCBbeWVzXSwgW10sCi0gICAgW0FDX01TR19FUlJPUihbYmFkIHZhbHVlICIkZW5hYmxldmFsIiBmb3IgLS1lbmFibGUtc3RhdGljLXBsdWdpbnNdKV0pXSwKLSAgW2VuYWJsZV9zdGF0aWNfcGx1Z2lucz1ub10pCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY19wbHVnaW5zXSkKLWlmIHRlc3QgIngkZW5hYmxlX3N0YXRpY19wbHVnaW5zIiA9IHh5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEdTVF9QTFVHSU5fQlVJTERfU1RBVElDLCAxLAotICAgIFtEZWZpbmUgaWYgc3RhdGljIHBsdWdpbnMgc2hvdWxkIGJlIGJ1aWx0XSkKLSAgR1NUX1BMVUdJTl9MSUJUT09MRkxBR1M9IiIKLWVsc2UKLSAgR1NUX1BMVUdJTl9MSUJUT09MRkxBR1M9Ii0tdGFnPWRpc2FibGUtc3RhdGljIgotZmkKLUFDX1NVQlNUKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotQU1fQ09ORElUSU9OQUwoR1NUX1BMVUdJTl9CVUlMRF9TVEFUSUMsIHRlc3QgIngkZW5hYmxlX3N0YXRpY19wbHVnaW5zIiA9ICJ4eWVzIikKLQotIyBzZXQgYnkgQUdfR1NUX1BBUlNFX1NVQlNZU1RFTV9ESVNBQkxFUyBhYm92ZQotZG5sIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IHVudXNlZCB2YXJpYWJsZXMgaWYgZGVidWdnaW5nIGlzIGRpc2FibGVkCi1OT19XQVJOSU5HUz0iIgotQUdfR1NUX0NIRUNLX0dTVF9ERUJVR19ESVNBQkxFRChbTk9fV0FSTklOR1M9Ii1Xbm8tdW51c2VkIl0sIFtOT19XQVJOSU5HUz0iIl0pCi0KLWRubCBkZWZpbmUgYW4gRVJST1JfQ0ZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlCi1kbmwgLVd1bmRlZjogdG9vIG1hbnkgYnJva2VuIGhlYWRlcnMKLUFHX0dTVF9TRVRfRVJST1JfQ0ZMQUdTKCRGQVRBTF9XQVJOSU5HUywgWwotICAgICAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3NpbmctcHJvdG90eXBlcyAtV3JlZHVuZGFudC1kZWNscwotICAgICAgLVd3cml0ZS1zdHJpbmdzIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdhZ2dyZWdhdGUtcmV0dXJuCi0gICAgICAtV2luaXQtc2VsZiAtV21pc3NpbmctaW5jbHVkZS1kaXJzIC1XYWRkcmVzcyAtV25vLW11bHRpY2hhcgotICAgICAgLVduZXN0ZWQtZXh0ZXJucyAkTk9fV0FSTklOR1NdKQotCi1kbmwgZGVmaW5lIGFuIEVSUk9SX0NYWEZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlCi1BR19HU1RfU0VUX0VSUk9SX0NYWEZMQUdTKCRGQVRBTF9XQVJOSU5HUywgWwotICAgICAgICAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XcmVkdW5kYW50LWRlY2xzCi0gICAgICAgIC1Xd3JpdGUtc3RyaW5ncwotICAgICAgICAtV2luaXQtc2VsZiAtV21pc3NpbmctaW5jbHVkZS1kaXJzIC1XYWRkcmVzcyAtV25vLW11bHRpY2hhcgotICAgICAgICAkTk9fV0FSTklOR1NdKQotCi1kbmwgZGVmaW5lIGFuIEVSUk9SX09CSkNGTEFHUyBNYWtlZmlsZSB2YXJpYWJsZQotQUdfR1NUX1NFVF9FUlJPUl9PQkpDRkxBR1MoJEZBVEFMX1dBUk5JTkdTLCBbCi0gICAgICAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XcmVkdW5kYW50LWRlY2xzCi0gICAgICAtV3dyaXRlLXN0cmluZ3MgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbgotICAgICAgLVdpbml0LXNlbGYgLVdtaXNzaW5nLWluY2x1ZGUtZGlycyAtV25vLW11bHRpY2hhcgotICAgICAgLVduZXN0ZWQtZXh0ZXJucyAkTk9fV0FSTklOR1NdKQotCi1kbmwgZGVmaW5lIGNvcnJlY3QgbGV2ZWwgZm9yIGRlYnVnZ2luZyBtZXNzYWdlcwotQUdfR1NUX1NFVF9MRVZFTF9ERUZBVUxUKCRHU1RfR0lUKQotCi1kbmwgdXNlZCBpbiBleGFtcGxlcwotQUdfR1NUX0RFRkFVTFRfRUxFTUVOVFMKLQotZG5sICoqKiBwbHVnLWlucyB0byBpbmNsdWRlICoqKgotCi1kbmwgdGhlc2UgYXJlIGFsbCB0aGUgZ3N0IHBsdWctaW5zLCBjb21waWxhYmxlIHdpdGhvdXQgYWRkaXRpb25hbCBsaWJzCi1kbmwgdmlkZW9maWx0ZXIgaXMgYXQgdGhlIHRvcCBiZWNhdXNlIG90aGVycyBkZXBlbmQgb24gaXQKLUFHX0dTVF9DSEVDS19QTFVHSU4oYWxwaGEpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGFwZXRhZykKLUFHX0dTVF9DSEVDS19QTFVHSU4oYXVkaW9meCkKLUFHX0dTVF9DSEVDS19QTFVHSU4oYXVkaW9wYXJzZXJzKQotQUdfR1NUX0NIRUNLX1BMVUdJTihhdXBhcnNlKQotQUdfR1NUX0NIRUNLX1BMVUdJTihhdXRvZGV0ZWN0KQotQUdfR1NUX0NIRUNLX1BMVUdJTihhdmkpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGN1dHRlcikKLUFHX0dTVF9DSEVDS19QTFVHSU4oZGVidWd1dGlscykKLUFHX0dTVF9DSEVDS19QTFVHSU4oZGVpbnRlcmxhY2UpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGR0bWYpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGVmZmVjdHYpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGVxdWFsaXplcikKLUFHX0dTVF9DSEVDS19QTFVHSU4oZmx2KQotQUdfR1NUX0NIRUNLX1BMVUdJTihmbHgpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGdvb20pCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGdvb20yazEpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGljeWRlbXV4KQotQUdfR1NUX0NIRUNLX1BMVUdJTihpZDNkZW11eCkKLUFHX0dTVF9DSEVDS19QTFVHSU4oaW1hZ2VmcmVlemUpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGludGVybGVhdmUpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKGlzb21wNCkKLUFHX0dTVF9DSEVDS19QTFVHSU4obGF3KQotQUdfR1NUX0NIRUNLX1BMVUdJTihsZXZlbCkKLUFHX0dTVF9DSEVDS19QTFVHSU4obWF0cm9za2EpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKG1vbm9zY29wZSkKLUFHX0dTVF9DSEVDS19QTFVHSU4obXVsdGlmaWxlKQotQUdfR1NUX0NIRUNLX1BMVUdJTihtdWx0aXBhcnQpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHJlcGxheWdhaW4pCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHJ0cCkKLUFHX0dTVF9DSEVDS19QTFVHSU4ocnRwbWFuYWdlcikKLUFHX0dTVF9DSEVDS19QTFVHSU4ocnRzcCkKLUFHX0dTVF9DSEVDS19QTFVHSU4oc2hhcGV3aXBlKQotQUdfR1NUX0NIRUNLX1BMVUdJTihzbXB0ZSkKLUFHX0dTVF9DSEVDS19QTFVHSU4oc3BlY3RydW0pCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHVkcCkKLUFHX0dTVF9DSEVDS19QTFVHSU4odmlkZW9ib3gpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHZpZGVvY3JvcCkKLUFHX0dTVF9DSEVDS19QTFVHSU4odmlkZW9maWx0ZXIpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHZpZGVvbWl4ZXIpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHdhdmVuYykKLUFHX0dTVF9DSEVDS19QTFVHSU4od2F2cGFyc2UpCi1BR19HU1RfQ0hFQ0tfUExVR0lOKHk0bSkKLQotZG5sIGRpc2FibGUgZXhwZXJpbWVudGFsIHBsdWctaW5zCi1pZiB0ZXN0ICJ4JEJVSUxEX0VYUEVSSU1FTlRBTCIgIT0gInh5ZXMiOyB0aGVuCi0gIEFHX0dTVF9ESVNBQkxFX1BMVUdJTihtb25vc2NvcGUpCi1maQotCi1kbmwgKioqIHN5cyBwbHVnLWlucyAqKioKLQotZWNobwotQUNfTVNHX05PVElDRShbQ2hlY2tpbmcgbGlicmFyaWVzIGZvciBwbHVnaW5zIGluIHN5cy9dKQotZWNobwotCi1kbmwgRGlyZWN0U291bmQKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0RJUkVDVFNPVU5ELCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoRElSRUNUU09VTkQsIFtEaXJlY3RTb3VuZCBwbHVnLWluXSwgZGlyZWN0c291bmRzaW5rLCBbCi0gIEhBVkVfRElSRUNUU09VTkQ9Im5vIgotICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgc2F2ZV9MSUJTPSIkTElCUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTICRESVJFQ1RTT1VORF9DRkxBR1MiCi0gIExERkxBR1M9IiRMREZMQUdTICRESVJFQ1RTT1VORF9MREZMQUdTIgotICBMSUJTPSIkTElCUyAtbGRzb3VuZCAtbGR4ZXJyOSAtbHVzZXIzMiAtbG9sZTMyIgotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIERpcmVjdFNvdW5kIExERkxBR1MpCi0gIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8ZHhlcnI5Lmg+Ci0jaW5jbHVkZSA8ZHNvdW5kLmg+Ci1dXSwgW1sKLSAgRFhHZXRFcnJvclN0cmluZzkgKDApOwotICBEaXJlY3RTb3VuZENyZWF0ZShOVUxMLCBOVUxMLCBOVUxMKTsKLSAgQ0xTSURGcm9tU3RyaW5nKE5VTEwsIE5VTEwpOwotXV0pCi1dLAotICAgIFtIQVZFX0RJUkVDVFNPVU5EPSJ5ZXMiXSwKLSAgICBbSEFWRV9ESVJFQ1RTT1VORD0ibm8iXSkKLSAgQUNfTVNHX1JFU1VMVCgkSEFWRV9ESVJFQ1RTT1VORCkKLSAgQ0ZMQUdTPSRzYXZlX0NGTEFHUwotICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgTElCUz0kc2F2ZV9MSUJTCi0KLSAgaWYgdGVzdCAieCRIQVZFX0RJUkVDVFNPVU5EIiA9ICJ4eWVzIjsgIHRoZW4KLSAgICBkbmwgdGhpcyBpcyBtdWNoIG1vcmUgdGhhbiB3ZSB3YW50Ci0gICAgRElSRUNUU09VTkRfTElCUz0iLWxkc291bmQgLWxkeGVycjkgLWx1c2VyMzIgLWxvbGUzMiIKLSAgICBBQ19TVUJTVChESVJFQ1RTT1VORF9DRkxBR1MpCi0gICAgQUNfU1VCU1QoRElSRUNUU09VTkRfTERGTEFHUykKLSAgICBBQ19TVUJTVChESVJFQ1RTT1VORF9MSUJTKQotICBmaQotICBBQ19TVUJTVChIQVZFX0RJUkVDVFNPVU5EKQotXSkKLQotZG5sICoqKiBXaW4zMiBXYXZlT3V0ICoqKgotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfV0FWRUZPUk0sIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShXQVZFRk9STSwgW1dpbjMyIFdhdmVGb3JtXSwgd2F2ZWZvcm1zaW5rLCBbCi0gIEFDX0NIRUNLX0hFQURFUihtbXN5c3RlbS5oLCBIQVZFX1dBVkVGT1JNPSJ5ZXMiLCBIQVZFX1dBVkVGT1JNPSJubyIsIFsjaW5jbHVkZSA8d2luZG93cy5oPl0pCi1dKQotCi1kbmwgKioqIE9TUyBhdWRpbyAqKiogKExpbnV4LCAqQlNEKQotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfT1NTLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoT1NTLCBbT1NTIGF1ZGlvXSwgb3NzYXVkaW8sIFsKLSBIQVZFX09TUz0ieWVzIgotZG5sIExpbnV4IGFuZCBuZXdlciBCU0QgdmVyc2lvbnMgOgotIEFDX0NIRUNLX0hFQURFUihzeXMvc291bmRjYXJkLmgsIFsKLSAgIEFDX0RFRklORShIQVZFX09TU19JTkNMVURFX0lOX1NZUywsIFtEZWZpbmUgaWYgT1NTIGluY2x1ZGVzIGFyZSBpbiAvc3lzL10pCi0gICBdICwgWwotZG5sIFNvbWUgb2xkIEJTRCB2ZXJzaW9ucyBhbmQgYWxzbyBuZXdlciBPcGVuQlNEIHZlcnNpb25zIDoKLSAgIEFDX0NIRUNLX0hFQURFUihzb3VuZGNhcmQuaCwgWwotICAgICBBQ19ERUZJTkUoSEFWRV9PU1NfSU5DTFVERV9JTl9ST09ULCwgW0RlZmluZSBpZiBPU1MgaW5jbHVkZXMgYXJlIGluIC9dKQotICAgICBdLCBbCi0gIGRubCBTb21lIG9sZCBCU0QgdmVyc2lvbnMgOgotICAgICBBQ19DSEVDS19IRUFERVIobWFjaGluZS9zb3VuZGNhcmQuaCwgWwotICAgICAgIEFDX0RFRklORShIQVZFX09TU19JTkNMVURFX0lOX01BQ0hJTkUsLAotICAgICAgICAgW0RlZmluZSBpZiBPU1MgaW5jbHVkZXMgYXJlIGluIC9tYWNoaW5lL10pCi0gICAgICAgXSwgWwotICAgICAgIEhBVkVfT1NTPSJubyIKLSAgICAgXSkKLSAgIF0pCi0gXSkKLV0pCi0KLWRubCAqKiogb3NzNCAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX09TUzQsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShPU1M0LCBbT3BlbiBTb3VuZCBTeXN0ZW0gNF0sIG9zczQsIFsKLSAgQUNfTVNHX0NIRUNLSU5HKFtDaGVja2luZyBpZiB3ZSBjYW4gYnVpbGQgdGhlIE9TUzQgZWxlbWVudHNdKQotICBBQ19DSEVDS19IRUFERVJTKFtmY250bC5oIHN5cy9pb2N0bC5oIHN5cy9zdGF0Lmggc3lzL3R5cGVzLmhdLAotICAgICAgW3Rlc3QgLXogIiRPU1M0X01JU1NJTkdfSEVBREVSIiAmJiBIQVZFX09TUzQ9InllcyJdLAotICAgICAgW09TUzRfTUlTU0lOR19IRUFERVI9InllcyI7SEFWRV9PU1M0PSJubyJdKQotXSkKLQotZG5sICoqKiBTdW4gQXVkaW8gKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9TVU5BVURJTywgdHJ1ZSkKLUFHX0dTVF9DSEVDS19GRUFUVVJFKFNVTkFVRElPLCBbU3VuIEF1ZGlvXSwgc3VuYXVkaW8sIFsKLSAgQUNfQ0hFQ0tfSEVBREVSKHN5cy9hdWRpb2lvLmgsIEhBVkVfU1VOQVVESU89InllcyIsIEhBVkVfU1VOQVVESU89Im5vIikKLV0pCi0KLWRubCAqKiogT1NYIEF1ZGlvICoqKgotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfT1NYX0FVRElPLCB0cnVlKQotSEFWRV9JT1M9Im5vIgotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoT1NYX0FVRElPLCBbT1NYIGF1ZGlvXSwgb3N4YXVkaW8sIFsKLSAgQUNfQ0hFQ0tfSEVBREVSKENvcmVBdWRpby9Db3JlQXVkaW8uaCwKLSAgICBbSEFWRV9PU1hfQVVESU89InllcyJdLAotICAgIFtBQ19DSEVDS19IRUFERVIoQ29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmgsCi0gICAgWwotICAgICAgSEFWRV9PU1hfQVVESU89InllcyIKLSAgICAgIEhBVkVfSU9TPSJ5ZXMiCi0gICAgXSwgWwotICAgICAgSEFWRV9PU1hfQVVESU89Im5vIgotICAgICAgSEFWRV9JT1M9Im5vIgotICAgIF0pXQotICApCi1dKQotaWYgdGVzdCAieCRIQVZFX0lPUyIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfSU9TLCAxLCBbYnVpbGRpbmcgZm9yIGlPUyBwbGF0b2ZybV0pCi1maQotQU1fQ09ORElUSU9OQUwoSEFWRV9JT1MsIHRlc3QgIngkSEFWRV9JT1MiID0gInh5ZXMiKQotCi1kbmwgKioqIE9TIFggdmlkZW8gKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9PU1hfVklERU8sIHRydWUpCi1IQVZFX09TWF9WSURFTz0ibm8iCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShPU1hfVklERU8sIFtPU1ggdmlkZW9dLCBvc3h2aWRlb3NpbmssIFsKLSAgQUNfQ0hFQ0tfSEVBREVSKE9wZW5HTC9nbC5oLCBIQVZFX09TWF9WSURFTz0ieWVzIiwgSEFWRV9PU1hfVklERU89Im5vIikKLQotICBkbmwgaW4gY2FzZSBoZWFkZXIgT3BlbkdML2dsLmggaXMgZm91bmQgb24gb3RoZXIgcGxhdGZvcm1zIChvciBvbGRlciwgdW5zdXBwb3J0ZWQgT1MgWCkKLSAgZG5sIGFsc28gcmVxdWlyZSBTbm93IExlb3BhcmQgb3IgbmV3ZXIKLQotICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCi0gICAgICAgICNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KLSAgICAgICAgI2lmIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA2MAotICAgICAgICAjZXJyb3IgVG9vIG9sZCBPU1ggdmVyc2lvbgotICAgICAgICAjZW5kaWYKLSAgICAgIF1dLCBbW3JldHVybiAwO11dKV0sW0hBVkVfT1NYX1ZJREVPPSJ5ZXMiXSxbSEFWRV9PU1hfVklERU89Im5vIl0pCi1dKQotCi1kbmwgKioqIFZpZGVvIDQgTGludXggMiAqKioKLWRubCByZW5hbWVkIHRvIEdTVF9WNEwyIGJlY2F1c2Ugb2Ygc29tZSBjb25mbGljdCB3aXRoIGtlcm5lbCBoZWFkZXJzCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9HU1RfVjRMMiwgdHJ1ZSkKLUhBVkVfR1NUX1Y0TDI9bm8KLUFHX0dTVF9DSEVDS19GRUFUVVJFKEdTVF9WNEwyLCBbVmlkZW8gNCBMaW51eCAyXSwgdmlkZW80bGludXgyLCBbCi0gIEFDX01TR19DSEVDS0lORyhbQ2hlY2tpbmcgZm9yIHZpZGVvNGxpbnV4MiBoZWFkZXIgLi4uXSkKLSAgQUNfQ0hFQ0tfSEVBREVSKGxpbnV4L3ZpZGVvZGV2Mi5oLCBbIEhBVkVfR1NUX1Y0TDI9eWVzIF0sCi0gIFsKLSAgICBBQ19DSEVDS19IRUFERVIoc3lzL3ZpZGVvZGV2Mi5oLCBbIEhBVkVfR1NUX1Y0TDI9eWVzIF0sCi0gICAgWwotICAgICAgQUNfQ0hFQ0tfSEVBREVSKHN5cy92aWRlb2lvLmgsIFsgSEFWRV9HU1RfVjRMMj15ZXMgXSkKLSAgICBdKQotICBdKQotICBpZiB0ZXN0ICJ4JEhBVkVfVklERU9ERVYiID0gInhubyI7IHRoZW4KLSAgICAgQUNfTVNHX1dBUk4oW3ZpZGVvNGxpbnV4MiB3YXMgbm90IGZvdW5kXSkKLSAgZmkKLV0pCi0KLSMgT3B0aW9uYWwgZ3VkZXYgZm9yIGRldmljZSBwcm9iaW5nCi1BQ19BUkdfV0lUSChbZ3VkZXZdLAotICBBU19IRUxQX1NUUklORyhbLS13aXRoLWd1ZGV2XSxbZGV2aWNlIGRldGVjdGlvbiB3aXRoIGd1ZGV2XSksCi0gIFtdLAotICBbd2l0aF9ndWRldj1jaGVja10pCi1pZiB0ZXN0IHgkSEFWRV9HU1RfVjRMMiA9IHh5ZXM7IHRoZW4KLSAgaWYgdGVzdCB4JHdpdGhfZ3VkZXYgIT0geG5vOyB0aGVuCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoR1VERVYsIFsgZ3VkZXYtMS4wID49IDE0NyBdLAotICAgICAgWyBBQ19ERUZJTkUoSEFWRV9HVURFViwgMSwKLSAgICAgICAgICBbV2hldGhlciBndWRldiBpcyBhdmFpbGFibGUgZm9yIGRldmljZSBkZXRlY3Rpb25dKQotICAgICAgXSwKLSAgICAgIFt0cnVlXSkKLSAgZmkKLWZpCi0KLUFDX1NVQlNUKEdVREVWX0NGTEFHUykKLUFDX1NVQlNUKEdVREVWX0xJQlMpCi0KLSMgTWFrZSBsaWJ2NGwyIG5vbi1hdXRvbWFnaWMKLUFDX0FSR19XSVRIKFtsaWJ2NGwyXSwKLSAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJ2NGwyXSxbc3VwcG9ydCB2aWRlbyBidWZmZXIgY29udmVyc2lvbiB1c2luZyBsaWJ2NGwyXSksCi0gIFtdLAotICBbd2l0aF9saWJ2NGwyPWNoZWNrXSkKLWlmIHRlc3QgeCRIQVZFX0dTVF9WNEwyID0geHllczsgdGhlbgotICBpZiB0ZXN0IHgkd2l0aF9saWJ2NGwyICE9IHhubzsgdGhlbgotICAgICAgUEtHX0NIRUNLX01PRFVMRVMoTElCVjRMMiwgbGlidjRsMiwKLSAgICAgICAgICBbIGhhdmVfbGlidjRsMj15ZXMKLSAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlY0TDIsIDEsCi0JICAgICAgICBbV2hldGhlciBsaWJ2NGwyIGlzIGF2YWlsYWJsZSBmb3IgdmlkZW8gYnVmZmVyIGNvbnZlcnNpb25dKQotICAgICAgICAgIF0sIFsKLSAgICAgICAgICBoYXZlX2xpYnY0bDI9bm8KLSAgICAgICAgICBdKQotICBlbHNlCi0gICAgaGF2ZV9saWJ2NGwyPW5vCi0gIGZpCi1maQotCi1kbmwgQWxsb3cgZW5hYmxpbmcgdjRsMiBkZXZpY2UgcHJvYmluZwotQVNfQ0FTRShbJGhvc3RdLAotICAgIFsqLSpsaW51eCpdLAotICAgICAgW0FTX0NBU0UoWyRob3N0X2NwdV0sCi0gICAgICAgIFthcm0qXSwgWwotICAgICAgICAgIGVuYWJsZV92NGwyX3Byb2JlPSJ5ZXMiXSwKLSAgICAgICAgW2FhcmNoNjQqXSwgWwotICAgICAgICAgIGVuYWJsZV92NGwyX3Byb2JlPSJ5ZXMiXSldKQotQUNfQVJHX0VOQUJMRSgKLSAgdjRsMi1wcm9iZSwKLSAgQUNfSEVMUF9TVFJJTkcoCi0gICAgWy0tZW5hYmxlLXY0bDItcHJvYmVdLAotICAgIFtlbmFibGUgVjRMMiBwbHVnaW4gdG8gcHJvYmUgZGV2aWNlcyBAPDpAZGVmYXVsdD1ub0A6PkBdKSkKLWlmIHRlc3QgIngkZW5hYmxlX3Y0bDJfcHJvYmUiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShHU1RfVjRMMl9FTkFCTEVfUFJPQkUsIDEsCi0gICAgW0RlZmluZSBpZiBWaWRlbzRMaW51eCBwcm9iZSBzaGFsbCBiZSBydW4gYXQgcGx1Z2luIGxvYWRdKQotZmkKLQotZG5sIENoZWNrIGZvciBYMTEKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX1gsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShYLCBbWCBsaWJyYXJpZXMgYW5kIHBsdWdpbnNdLAotICAgICAgICAgICAgICAgICAgW3hpbWFnZXNyY10sIFsKLSAgUEtHX0NIRUNLX01PRFVMRVMoW1hdLCBbeDExXSwgWwotICAgIEhBVkVfWD0ieWVzIgotICAgIGRubCBjaGVjayBmb3IgWGZpeGVzCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoW1hGSVhFU10sIFsgeGZpeGVzIF0sIFsKLSAgICAgIEFDX0RFRklORShIQVZFX1hGSVhFUywgMSwgW0RlZmluZWQgaWYgWGZpeGVzIGlzIGF2YWlsYWJsZV0pCi0gICAgXSwgWyBIQVZFX1hGSVhFUz0ibm8iIF0pCi0KLSAgICBkbmwgY2hlY2sgZm9yIFhkYW1hZ2UKLSAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbWERBTUFHRV0sIFsgeGRhbWFnZSBdLCBbCi0gICAgICBBQ19ERUZJTkUoSEFWRV9YREFNQUdFLCAxLCBbRGVmaW5lZCBpZiBYZGFtYWdlIGlzIGF2YWlsYWJsZV0pCi0gICAgXSwgWyBIQVZFX1hEQU1BR0U9Im5vIiBdKQotCi0gICAgZG5sIGNoZWNrIGZvciBYIFNobQotICAgIFBLR19DSEVDS19NT0RVTEVTKFtYRVhUXSwgWyB4ZXh0IF0sIFsKLSAgICAgIEFDX0NIRUNLX0xJQihbWGV4dF0sIFsgWFNobUF0dGFjaCBdLCBbCi0gICAgICAgIEFDX0RFRklORShIQVZFX1hTSE0sIDEsIFtEZWZpbmVkIGlmIFhTaG0gaXMgYXZhaWxhYmxlXSkKLSAgICAgICAgWFNITV9MSUJTPSIkWEVYVF9MSUJTIgotICAgICAgICBYU0hNX0NGTEFHUz0iJFhFWFRfQ0ZMQUdTIgotICAgICAgXSwgWyBIQVZFX1hFWFQ9Im5vIiBdICwgWyAkWF9MSUJTIF0pCi0gICAgXSkKLSAgICBBQ19TVUJTVChYU0hNX0xJQlMpCi0gICAgQUNfU1VCU1QoWFNITV9DRkxBR1MpCi0gIF0sIFsgSEFWRV9YPSJubyIgXSkKLV0pCi0KLWRubCAqKiogZXh0IHBsdWctaW5zICoqKgotZG5sIGtlZXAgdGhpcyBsaXN0IHNvcnRlZCBhbHBoYWJldGljYWxseSAhCi0KLWlmIHRlc3QgIngkQlVJTERfRVhURVJOQUwiID0gInh5ZXMiOyB0aGVuCi0KLWVjaG8KLUFDX01TR19OT1RJQ0UoW0NoZWNraW5nIGxpYnJhcmllcyBmb3IgcGx1Z2lucyBpbiBleHQvXSkKLWVjaG8KLQotZG5sICoqKiBhYWxpYiAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0FBTElCLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQUFMSUIsIFthYWxpYiBBU0NJSSBBcnQgbGlicmFyeV0sIGFhc2luaywgWwotICBBTV9QQVRIX0FBTElCKCwgSEFWRV9BQUxJQj15ZXMsIEhBVkVfQUFMSUI9bm8pCi1dKQotCi1kbmwgKioqIGNhaXJvICoqKgotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfQ0FJUk8sIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShDQUlSTywgW0NhaXJvIGdyYXBoaWNzIHJlbmRlcmluZyBhbmQgZ29iamVjdCBiaW5kaW5nc10sIGNhaXJvLCBbCi0gIEFHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFUyhDQUlSTywgY2Fpcm8gPj0gMS4xMC4wIGNhaXJvLWdvYmplY3QgPj0gMS4xMC4wKQotXSkKLQotZG5sICoqKiBGTEFDICoqKgotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfRkxBQywgdHJ1ZSkKLUFHX0dTVF9DSEVDS19GRUFUVVJFKEZMQUMsIFtGTEFDIGxvc3NsZXNzIGF1ZGlvXSwgZmxhYywgWwotICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoRkxBQywgZmxhYyA+PSAxLjEuNCkKLV0pCi0KLWRubCAqKiogR0RLIHBpeGJ1ZiAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0dES19QSVhCVUYsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShHREtfUElYQlVGLCBbR0RLIHBpeGJ1Zl0sIGdka3BpeGJ1ZiwgWwotICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoR0RLX1BJWEJVRiwgZ2RrLXBpeGJ1Zi0yLjAgPj0gMi44LjApCi1dKQotCi1kbmwgKioqIEphY2sgKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9KQUNLLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoSkFDSywgSmFjaywgamFjaywgWwotICBQS0dfQ0hFQ0tfTU9EVUxFUyhKQUNLLCBqYWNrID49IDAuOTkuMTAsIEhBVkVfSkFDSz0ieWVzIiwgSEFWRV9KQUNLPSJubyIpCi0gIEFDX1NVQlNUKEpBQ0tfQ0ZMQUdTKQotICBBQ19TVUJTVChKQUNLX0xJQlMpCi0KLSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKEpBQ0tfMF8xMjBfMSwgamFjayA+PSAwLjEyMC4xIGphY2sgPCAxLjApCi0gIGlmIHRlc3QgeCRIQVZFX0pBQ0tfMF8xMjBfMSA9IHh5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9KQUNLXzBfMTIwXzEsIDEsIFtkZWZpbmVkIGlmIGphY2sgPj0gMC4xMjAuMSBpcyBhdmFpbGFibGVdKQotICBmaQotICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoSkFDS18xXzlfNywgamFjayA+PSAxLjkuNykKLSAgaWYgdGVzdCB4JEhBVkVfSkFDS18xXzlfNyA9IHh5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9KQUNLXzFfOV83LCAxLCBbZGVmaW5lZCBpZiBqYWNrID49IDEuOS43IGlzIGF2YWlsYWJsZV0pCi0gIGZpCi0KLV0pCi0KLWRubCAqKioganBlZyAqKioKLWRubCBGSVhNRTogd2UgY291bGQgdXNlIGhlYWRlciBjaGVja3MgaGVyZSBhcyB3ZWxsIElNTwotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfSlBFRywgdHJ1ZSkKLUFHX0dTVF9DSEVDS19GRUFUVVJFKEpQRUcsIFtqcGVnIGxpYnJhcnldLCBqcGVnLCBbCi0gIEFDX0FSR19XSVRIKGpwZWctbW14LAotICAgIFsgIC0td2l0aC1qcGVnLW1teCwgcGF0aCB0byBNTVgnaWZpZWQgSlBFRyBsaWJyYXJ5XSkKLSAgT0xEX0xJQlM9IiRMSUJTIgotICBpZiB0ZXN0IHgkd2l0aF9qcGVnX21teCAhPSB4OyB0aGVuCi0gICAgTElCUz0iJExJQlMgLUwkd2l0aF9qcGVnX21teCIKLSAgZmkKLSAgQUNfQ0hFQ0tfTElCKGpwZWctbW14LCBqcGVnX3NldF9kZWZhdWx0cywgSEFWRV9KUEVHPSJ5ZXMiLCBIQVZFX0pQRUc9Im5vIikKLSAgSlBFR19MSUJTPSIkTElCUyAtbGpwZWctbW14IgotICBMSUJTPSIkT0xEX0xJQlMiCi0gIGlmIHRlc3QgeCRIQVZFX0pQRUcgIT0geHllczsgdGhlbgotICAgIEFDX0NIRUNLX0xJQihqcGVnLCBqcGVnX3NldF9kZWZhdWx0cywgSEFWRV9KUEVHPSJ5ZXMiLCBIQVZFX0pQRUc9Im5vIikKLSAgICBKUEVHX0xJQlM9Ii1sanBlZyIKLSAgZmkKLSAgQUNfU1VCU1QoSlBFR19MSUJTKQotXSkKLQotZG5sICoqKiBsaWJjYWNhICoqKgotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfTElCQ0FDQSwgdHJ1ZSkKLUFHX0dTVF9DSEVDS19GRUFUVVJFKExJQkNBQ0EsIFtsaWJjYWNhIGNvbG91cmVkIEFTQ0lJIGFydF0sIGNhY2FzaW5rLCBbCi0gIEFHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFUyhMSUJDQUNBLCBjYWNhKQotXSkKLQotZG5sICoqKiBsaWJkdiAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0xJQkRWLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoTElCRFYsIFtsaWJkdiBEViBkZW11eGVyL2RlY29kZXJdLCBkdiwgWwotICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoTElCRFYsIGxpYmR2ID49IDAuMTAwKQotXSkKLQotZG5sICoqKiBsaWJwbmcgKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9MSUJQTkcsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShMSUJQTkcsIFtQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIGxpYnJhcnldLCBwbmcsIFsKLSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKExJQlBORywgbGlicG5nID49IDEuMikKLV0pCi0KLWRubCAqKiogcHVsc2VhdWRpbyAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX1BVTFNFLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoUFVMU0UsIFtwdWxzZWF1ZGlvIHBsdWctaW5dLCBwdWxzZWF1ZGlvLCBbCi0KLSAgZG5sIHVzZWQgaW4gZXh0L3B1bHNlL3B1bHNldXRpbC5jCi0gIEFDX0NIRUNLX0hFQURFUlMoW3Byb2Nlc3MuaF0pCi0KLSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFBVTFNFLCBsaWJwdWxzZSA+PSAyLjApCi1dKQotCi1kbmwgKioqIGR2MTM5NCAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0RWMTM5NCwgdHJ1ZSkKLUFHX0dTVF9DSEVDS19GRUFUVVJFKERWMTM5NCwgW3JhdzEzOTQgYW5kIGF2YzEzOTQgbGlicmFyeV0sIDEzOTQsIFsKLSAgZG5sIGZpcnN0IHRlc3QgZm9yIGxpYnJhdzEzOTQgPj0gMi4wLjAKLSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFJBVzEzOTQsIGxpYnJhdzEzOTQgPj0gMi4wLjApCi0gIEFHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFUyhMSUJJRUM2MTg4MywgbGliaWVjNjE4ODMgPj0gMS4wLjApCi0gIGRubCBub3cgc2VlIGhvdyBmYXIgd2UgZ290Ci0gIGlmIHRlc3QgeCRIQVZFX1JBVzEzOTQgPSB4eWVzICYmIFwKLSAgICAgdGVzdCB4JEhBVkVfTElCSUVDNjE4ODMgPSB4eWVzOyB0aGVuCi0gICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihBVkMxMzk0LAotICAgICAgICBhdmMxMzk0LCBhdmMxMzk0X3NlbmRfY29tbWFuZCwgJFJBVzEzOTRfTElCUywKLQlsaWJhdmMxMzk0L2F2YzEzOTQuaCwgQVZDMTM5NF9MSUJTPSItbGF2YzEzOTQiKQotICAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoUk9NMTM5NCwKLSAgICAgICAgcm9tMTM5NCwgcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSwgJFJBVzEzOTRfTElCUywKLSAgICAgICAgbGliYXZjMTM5NC9yb20xMzk0LmgsIFJPTTEzOTRfTElCUz0iLWxyb20xMzk0IikKLSAgICAgICBpZiB0ZXN0IHgkSEFWRV9BVkMxMzk0ID0geHllcyAmJiBcCi0gICAgICAgICAgdGVzdCB4JEhBVkVfQVZDMTM5NCA9IHh5ZXMgJiYgXAotCSAgdGVzdCB4JEhBVkVfUk9NMTM5NCA9IHh5ZXM7IHRoZW4KLQkgIEhBVkVfRFYxMzk0PXllcwotICAgICAgICAgIERWMTM5NF9MSUJTPSIkUkFXMTM5NF9MSUJTICRBVkMxMzk0X0xJQlMgJFJPTTEzOTRfTElCUyAkTElCSUVDNjE4ODNfTElCUyIKLSAgICAgICAgICBEVjEzOTRfQ0ZMQUdTPSIkUkFXMTM5NF9DRkxBR1MgJExJQklFQzYxODgzX0NGTEFHUyAtREhBVkVfTElCSUVDNjE4ODMiCi0gICAgICAgICAgQUNfU1VCU1QoRFYxMzk0X0NGTEFHUykKLSAgICAgICAgICBBQ19TVUJTVChEVjEzOTRfTElCUykKLQlmaQotICBlbHNlCi0gICAgICAgaWYgdGVzdCB4JEhBVkVfUkFXMTM5NCA9IHhubzsgdGhlbgotCSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFJBVzEzOTQsIGxpYnJhdzEzOTQgPj0gMS4xLjApCi0JICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEFWQzEzOTQsCi0JICAgYXZjMTM5NCwgYXZjMTM5NF9zZW5kX2NvbW1hbmQsICRSQVcxMzk0X0xJQlMsCi0JICAgbGliYXZjMTM5NC9hdmMxMzk0LmgsIEFWQzEzOTRfTElCUz0iLWxhdmMxMzk0IikKLQkgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoUk9NMTM5NCwKLQkgICByb20xMzk0LCByb20xMzk0X2ZyZWVfZGlyZWN0b3J5LCAkUkFXMTM5NF9MSUJTLAotCSAgIGxpYmF2YzEzOTQvcm9tMTM5NC5oLCBST00xMzk0X0xJQlM9Ii1scm9tMTM5NCIpCi0gICAgICAgICAgaWYgdGVzdCB4JEhBVkVfUkFXMTM5NCA9IHh5ZXMgJiYgXAotCSAgICAgdGVzdCB4JEhBVkVfQVZDMTM5NCA9IHh5ZXMgJiYgXAotCSAgICAgdGVzdCB4JEhBVkVfUk9NMTM5NCA9IHh5ZXM7IHRoZW4KLQkgICAgIEhBVkVfRFYxMzk0PXllcwotCSAgICAgRFYxMzk0X0xJQlM9IiRSQVcxMzk0X0xJQlMgJEFWQzEzOTRfTElCUyAkUk9NMTM5NF9MSUJTIgotCSAgICAgRFYxMzk0X0NGTEFHUz0iJFJBVzEzOTRfQ0ZMQUdTIgotCSAgICAgaWYgdGVzdCB4JEhBVkVfTElCSUVDNjE4ODMgPSB4eWVzOyB0aGVuCi0JICAgICAgIERWMTM5NF9DRkxBR1M9IiRSQVcxMzk0X0NGTEFHUyAkTElCSUVDNjE4ODNfQ0ZMQUdTIC1ESEFWRV9MSUJJRUM2MTg4MyIKLQkgICAgICAgRFYxMzk0X0xJQlM9IiREVjEzOTRfTElCUyAkTElCSUVDNjE4ODNfTElCUyIKLQkgICAgIGZpCi0gICAgICAgICAgICAgQUNfU1VCU1QoRFYxMzk0X0NGTEFHUykKLSAgICAgICAgICAgICBBQ19TVUJTVChEVjEzOTRfTElCUykKLSAgICAgICAgICAgZmkKLQkgZmkKLSAgZmkKLV0pCi1BTV9DT05ESVRJT05BTChVU0VfTElCSUVDNjE4ODMsIFsgdGVzdCAieCR7SEFWRV9MSUJJRUM2MTg4M30iID0geHllcyBdICkKLQotZG5sICoqKiBzaG91dDIgKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9TSE9VVDIsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShTSE9VVDIsIFtTaG91dGNhc3QvSWNlY2FzdCBjbGllbnQgbGlicmFyeV0sIHNob3V0MiwgWwotICBBR19HU1RfUEtHX0NIRUNLX01PRFVMRVMoU0hPVVQyLCBzaG91dCA+PSAyLjApCi1dKQotCi1kbmwgKioqIHNvdXAgKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9TT1VQLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoU09VUCwgW3NvdXAgaHR0cCBjbGllbnQgcGx1Z2luICgyLjQpXSwgc291cGh0dHBzcmMsIFsKLSAgUEtHX0NIRUNLX01PRFVMRVMoU09VUCwgbGlic291cC0yLjQgPj0gMi40OCwgW0hBVkVfU09VUD0ieWVzIl0sIFtIQVZFX1NPVVA9Im5vIl0pCi0gIEFDX1NVQlNUKFNPVVBfQ0ZMQUdTKQotICBBQ19TVUJTVChTT1VQX0xJQlMpCi1dKQotCi1kbmwgKioqIHNwZWV4ICoqKgotdHJhbnNsaXQoZG5tLCBtLCBsKSBBTV9DT05ESVRJT05BTChVU0VfU1BFRVgsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShTUEVFWCwgW3NwZWV4IHNwZWVjaCBjb2RlY10sIHNwZWV4LCBbCi0gIEFHX0dTVF9QS0dfQ0hFQ0tfTU9EVUxFUyhTUEVFWCwgc3BlZXggPj0gMS4xLjYpCi1dKQotCi1kbmwgKioqIHRhZ2xpYiAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX1RBR0xJQiwgdHJ1ZSkKLUFHX0dTVF9DSEVDS19GRUFUVVJFKFRBR0xJQiwgW3RhZ2xpYiB0YWdnaW5nIGxpYnJhcnldLCB0YWdsaWIsIFsKLSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFRBR0xJQiwgdGFnbGliID49IDEuNSkKLSAgaWYgdGVzdCAieCRIQVZFX0NYWCIgIT0gInh5ZXMiOyB0aGVuCi0gICAgVVNFX1RBR0xJQj1mYWxzZQotICAgIEFDX01TR19OT1RJQ0UoW05vdCBidWlsZGluZyB0YWdsaWIgcGx1Z2luOiBubyBDKysgY29tcGlsZXIgZm91bmRdKQotICBlbHNlCi0gICAgZG5sIHdvcmsgYXJvdW5kIGJ1ZyBpbiB0YWdsaWIgMS41IGhlYWRlcnMsIHJlbW92ZSBvbmNlIHRoZXJlIGlzIGEgMS42Ci0gICAgQVNfQ1hYX0NPTVBJTEVSX0ZMQUcoWy1Xbm8tYXR0cmlidXRlc10sIFsKLSAgICAgICAgVEFHTElCX0NYWEZMQUdTPSIkVEFHTElCX0NGTEFHUyAtV25vLWF0dHJpYnV0ZXMiCi0gICAgICBdLCBbCi0gICAgICAgIFRBR0xJQl9DWFhGTEFHUz0iJFRBR0xJQl9DRkxBR1MiCi0gICAgXSkKLSAgICBBQ19TVUJTVChUQUdMSUJfQ1hYRkxBR1MpCi0gIGZpCi1dKQotCi1kbmwgKioqIHZweCAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX1ZQWCwgdnB4KQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoVlBYLCBbVlBYIGRlY29kZXJdLCB2cHgsIFsKLSAgUEtHX0NIRUNLX01PRFVMRVMoVlBYLCB2cHggPj0gMS4xLjAsIFtIQVZFX1ZQWD0ieWVzIl0sIFtIQVZFX1ZQWD0ibm8iXSkKLSAgSEFWRV9WUDg9bm8KLSAgSEFWRV9WUDk9bm8KLQotICBpZiB0ZXN0ICRIQVZFX1ZQWCA9ICJ5ZXMiOyB0aGVuCi0gICAgT0xEX0xJQlM9IiRMSUJTIgotICAgIE9MRF9DRkxBR1M9IiRDRkxBR1MiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTICRWUFhfQ0ZMQUdTIgotICAgIExJQlM9IiRMSUJTICRWUFhfTElCUyIKLSAgICBBQ19DSEVDS19MSUIodnB4LCB2cHhfY29kZWNfdnA4X2N4X2FsZ28sIFsKLSAgICAgIEhBVkVfVlA4PXllcwotICAgICAgQUNfREVGSU5FKEhBVkVfVlA4X0VOQ09ERVIsIDEsIFtEZWZpbmVkIGlmIHRoZSBWUDggZW5jb2RlciBpcyBhdmFpbGFibGVdKQotICAgIF0pCi0gICAgQUNfQ0hFQ0tfTElCKHZweCwgdnB4X2NvZGVjX3ZwOF9keF9hbGdvLCBbCi0gICAgICBIQVZFX1ZQOD15ZXMKLSAgICAgIEFDX0RFRklORShIQVZFX1ZQOF9ERUNPREVSLCAxLCBbRGVmaW5lZCBpZiB0aGUgVlA4IGRlY29kZXIgaXMgYXZhaWxhYmxlXSkKLSAgICBdKQotCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoVlBYXzEzMCwgdnB4ID49IDEuMy4wLCBbCi0gICAgICBBQ19DSEVDS19MSUIodnB4LCB2cHhfY29kZWNfdnA5X2N4X2FsZ28sIFsKLSAgICAgICAgSEFWRV9WUDk9eWVzCi0gICAgICAgIEFDX0RFRklORShIQVZFX1ZQOV9FTkNPREVSLCAxLCBbRGVmaW5lZCBpZiB0aGUgVlA5IGVuY29kZXIgaXMgYXZhaWxhYmxlXSkKLSAgICAgIF0pCi0gICAgICBBQ19DSEVDS19MSUIodnB4LCB2cHhfY29kZWNfdnA5X2R4X2FsZ28sIFsKLSAgICAgICAgSEFWRV9WUDk9eWVzCi0gICAgICAgIEFDX0RFRklORShIQVZFX1ZQOV9ERUNPREVSLCAxLCBbRGVmaW5lZCBpZiB0aGUgVlA5IGRlY29kZXIgaXMgYXZhaWxhYmxlXSkKLSAgICAgIF0pCi0gICAgXSwgW3RydWVdKQotCi0gICAgUEtHX0NIRUNLX01PRFVMRVMoVlBYXzE0MCwgdnB4ID49IDEuNC4wLCBbCi0gICAgICBBQ19ERUZJTkUoSEFWRV9WUFhfMV80LCAxLCBbRGVmaW5lZCBpZiB0aGUgVlBYIGxpYnJhcnkgdmVyc2lvbiBpcyAxLjQgb3IgYmlnZ2VyXSkKLSAgICBdLCBbdHJ1ZV0pCi0KLSAgICBMSUJTPSIkT0xEX0xJQlMiCi0gICAgQ0ZMQUdTPSIkT0xEX0NGTEFHUyIKLSAgZmkKLSAgQUNfU1VCU1QoVlBYX0xJQlMpCi0gIEFDX1NVQlNUKFZQWF9DRkxBR1MpCi1dKQotCi1kbmwgKioqIHdhdnBhY2sgKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9XQVZQQUNLLCB0cnVlKQotQUdfR1NUX0NIRUNLX0ZFQVRVUkUoV0FWUEFDSywgW3dhdnBhY2sgcGx1Zy1pbl0sIHdhdnBhY2ssIFsKLSAgQUdfR1NUX1BLR19DSEVDS19NT0RVTEVTKFdBVlBBQ0ssIHdhdnBhY2sgPj0gNC42MC4wKQotXSkKLQotZG5sICoqKiBxdGRlbXV4ICYgbWF0cm9za2EgcHJlZmVyIHRvIGhhdmUgemxpYiAqKioKLXRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX1pMSUIsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShaTElCLCBbemxpYiBzdXBwb3J0IGZvciBxdGRlbXV4L21hdHJvc2thXSwsIFsKLSAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihaTElCLAotICAgIHosIHVuY29tcHJlc3MsLCB6bGliLmgsIFsKLSAgICBIQVZFX1pMSUI9InllcyIKLSAgICBaTElCX0xJQlM9Ii1seiIKLSAgICBBQ19TVUJTVChaTElCX0xJQlMpCi0gIF0pCi1dKQotCi1kbmwgKioqIG1hdHJvc2thIHByZWZlcnMgdG8gaGF2ZSBiejIgKioqCi10cmFuc2xpdChkbm0sIG0sIGwpIEFNX0NPTkRJVElPTkFMKFVTRV9CWjIsIHRydWUpCi1BR19HU1RfQ0hFQ0tfRkVBVFVSRShCWjIsIFtiejIgbGlicmFyeSBmb3IgbWF0cm9za2EgXSwsIFsKLSAgc2F2ZV9MSUJTPSRMSUJTCi0gIExJQlM9IiRMSUJTIC1sYnoyIgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBCWjJfYnpsaWJWZXJzaW9uIGluIC1sYnoyXSkKLSAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxiemxpYi5oPl1dLCBbW2NvbnN0IGNoYXIgKnZlcnNpb24gPSBCWjJfYnpsaWJWZXJzaW9uICgpO11dKV0sW0hBVkVfQloyPXllc10sW0hBVkVfQloyPW5vXSkKLSAgQUNfTVNHX1JFU1VMVCgkSEFWRV9CWjIpCi0gIExJQlM9JHNhdmVfTElCUwotICBpZiB0ZXN0ICJ4JEhBVkVfQloyIiA9ICJ4eWVzIjsgdGhlbgotICAgIEJaMl9MSUJTPSItbGJ6MiIKLSAgZmkKLSAgQUNfU1VCU1QoQloyX0xJQlMpCi1dKQotCi1lbHNlCi0KLWRubCBub3QgYnVpbGRpbmcgcGx1Z2lucyB3aXRoIGV4dGVybmFsIGRlcGVuZGVuY2llcywKLWRubCBidXQgd2Ugc3RpbGwgbmVlZCB0byBzZXQgdGhlIGNvbmRpdGlvbmFscwotQU1fQ09ORElUSU9OQUwoVVNFX0FBTElCLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9CWjIsIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX0NBSVJPLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9ESVJFQ1RTT1VORCwgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfRFYxMzk0LCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9GTEFDLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9HREtfUElYQlVGLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9KQUNLLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9KUEVHLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9MSUJDQUNBLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9MSUJEViwgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfTElCSUVDNjE4ODMsIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX0xJQlBORywgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfT1NTLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9PU1M0LCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9PU1hfQVVESU8sIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX09TWF9WSURFTywgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfUFVMU0UsIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX1NIT1VUMiwgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfU09VUCwgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfU1BFRVgsIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX1NVTkFVRElPLCBmYWxzZSkKLUFNX0NPTkRJVElPTkFMKFVTRV9UQUdMSUIsIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX1ZQWCwgZmFsc2UpCi1BTV9DT05ESVRJT05BTChVU0VfV0FWRUZPUk0sIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX1dBVlBBQ0ssIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX1gsIGZhbHNlKQotQU1fQ09ORElUSU9OQUwoVVNFX1pMSUIsIGZhbHNlKQotCi1maSBkbmwgb2YgRVhUIHBsdWdpbnMKLQotZG5sICoqKiBmaW5hbGl6ZSBDRkxBR1MsIExERkxBR1MsIExJQlMKLQotZG5sIE92ZXJ2aWV3OgotZG5sIEdTVF9PUFRJT05fQ0ZMQUdTOiAgY29tbW9uIGZsYWdzIGZvciBwcm9maWxpbmcsIGRlYnVnZ2luZywgZXJyb3JzLCAuLi4KLWRubCBHU1RfKjogICAgICAgICAgICAgIGZsYWdzIHNoYXJlZCBieSBhbGwgYnVpbHQgb2JqZWN0cwotZG5sIEdTVF9BTExfTERGTEFHUzogICAgbGlua2VyIGZsYWdzIHNoYXJlZCBieSBhbGwKLWRubCBHU1RfTElCX0xERkxBR1M6ICAgIG5vdCBuZWVkZWQsIHdlIGRvbid0IGluc3RhbGwgbGlicmFyaWVzCi1kbmwgR1NUX0xUX0xERkxBR1M6ICAgICBsaWJyYXJ5IHZlcnNpb25pbmcgb2Ygb3VyIGxpYnJhcmllcwotZG5sIEdTVF9QTFVHSU5fTERGTEFHUzogZmxhZ3MgdG8gYmUgdXNlZCBmb3IgYWxsIHBsdWdpbnMKLQotZG5sIEdTVF9PUFRJT05fQ0ZMQUdTCi1pZiB0ZXN0ICJ4JFVTRV9ERUJVRyIgPSB4eWVzOyB0aGVuCi0gICBQUk9GSUxFX0NGTEFHUz0iLWciCi1maQotQUNfU1VCU1QoUFJPRklMRV9DRkxBR1MpCi0KLWlmIHRlc3QgIngkUEFDS0FHRV9WRVJTSU9OX05BTk8iID0gIngxIjsgdGhlbgotICBkbmwgRGVmaW5lIF9vbmx5XyBmb3IgZ2l0IChub3QgcHJlLXJlbGVhc2VzIG9yIHJlbGVhc2VzKQotICBERVBSRUNBVEVEX0NGTEFHUz0iLURHU1RfRElTQUJMRV9ERVBSRUNBVEVEIgotZWxzZQotICBERVBSRUNBVEVEX0NGTEFHUz0iIgotZmkKLUFDX1NVQlNUKERFUFJFQ0FURURfQ0ZMQUdTKQotCi1kbmwgZXZlcnkgZmxhZyBpbiBHU1RfT1BUSU9OX0NGTEFHUywgR1NUX09QVElPTl9DWFhGTEFHUyBhbmQgR1NUX09QVElPTl9PQkpDRkxBR1MgY2FuIGJlIG92ZXJyaWRkZW4KLWRubCBhdCBtYWtlIHRpbWUgd2l0aCBlLmcuIG1ha2UgRVJST1JfQ0ZMQUdTPSIiCi1HU1RfT1BUSU9OX0NGTEFHUz0iXCQoV0FSTklOR19DRkxBR1MpIFwkKEVSUk9SX0NGTEFHUykgXCQoREVCVUdfQ0ZMQUdTKSBcJChQUk9GSUxFX0NGTEFHUykgXCQoR0NPVl9DRkxBR1MpIFwkKE9QVF9DRkxBR1MpIFwkKERFUFJFQ0FURURfQ0ZMQUdTKSIKLUdTVF9PUFRJT05fQ1hYRkxBR1M9IlwkKFdBUk5JTkdfQ1hYRkxBR1MpIFwkKEVSUk9SX0NYWEZMQUdTKSBcJChERUJVR19DRkxBR1MpIFwkKFBST0ZJTEVfQ0ZMQUdTKSBcJChHQ09WX0NGTEFHUykgXCQoT1BUX0NGTEFHUykgXCQoREVQUkVDQVRFRF9DRkxBR1MpIgotR1NUX09QVElPTl9PQkpDRkxBR1M9IlwkKFdBUk5JTkdfT0JKQ0ZMQUdTKSBcJChFUlJPUl9PQkpDRkxBR1MpIFwkKERFQlVHX0NGTEFHUykgXCQoUFJPRklMRV9DRkxBR1MpIFwkKEdDT1ZfQ0ZMQUdTKSBcJChPUFRfQ0ZMQUdTKSBcJChERVBSRUNBVEVEX0NGTEFHUykiCi1BQ19TVUJTVChHU1RfT1BUSU9OX0NGTEFHUykKLUFDX1NVQlNUKEdTVF9PUFRJT05fQ1hYRkxBR1MpCi1BQ19TVUJTVChHU1RfT1BUSU9OX09CSkNGTEFHUykKLQotZG5sIG91ciBsaWJyYXJpZXMgbmVlZCB0byBiZSB2ZXJzaW9uZWQgY29ycmVjdGx5Ci1BQ19TVUJTVChHU1RfTFRfTERGTEFHUykKLQotZG5sIEZJWE1FOiBkbyB3ZSB3YW50IHRvIHJlbmFtZSB0byBHU1RfQUxMXyogPwotZG5sIHByZWZlciBpbnRlcm5hbCBoZWFkZXJzIHRvIGFscmVhZHkgaW5zdGFsbGVkIG9uZXMKLWRubCBhbHNvIGFkZCBidWlsZGRpciBpbmNsdWRlIGZvciBlbnVtdHlwZXMgYW5kIG1hcnNoYWwKLWRubCBhZGQgRVJST1JfQ0ZMQUdTLCBidXQgb3ZlcnJpZGFibGUKLUdTVF9DRkxBR1M9IiRHU1RfQ0ZMQUdTIC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkiCi1HU1RfQ1hYRkxBR1M9Ii1JXCQodG9wX3NyY2RpcikvZ3N0LWxpYnMgJEdTVF9DRkxBR1MgJEdMSUJfRVhUUkFfQ0ZMQUdTIFwkKEdTVF9PUFRJT05fQ1hYRkxBR1MpIgotR1NUX09CSkNGTEFHUz0iLUlcJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyAkR1NUX0NGTEFHUyAkR0xJQl9FWFRSQV9DRkxBR1MgXCQoR1NUX09QVElPTl9PQkpDRkxBR1MpIgotR1NUX0NGTEFHUz0iLUlcJCh0b3Bfc3JjZGlyKS9nc3QtbGlicyAkR1NUX0NGTEFHUyAkR0xJQl9FWFRSQV9DRkxBR1MgXCQoR1NUX09QVElPTl9DRkxBR1MpIgotQUNfU1VCU1QoR1NUX0NGTEFHUykKLUFDX1NVQlNUKEdTVF9DWFhGTEFHUykKLUFDX1NVQlNUKEdTVF9PQkpDRkxBR1MpCi1BQ19TVUJTVChHU1RfTElCUykKLQotZG5sIExERkxBR1MgcmVhbGx5IHNob3VsZCBvbmx5IGNvbnRhaW4gZmxhZ3MsIG5vdCBsaWJzIC0gdGhleSBnZXQgYWRkZWQgYmVmb3JlCi1kbmwgd2hhdGV2ZXJ0YXJnZXRfTElCUyBhbmQgLUwgZmxhZ3MgaGVyZSBhZmZlY3QgdGhlIHJlc3Qgb2YgdGhlIGxpbmtpbmcKLUdTVF9BTExfTERGTEFHUz0iLW5vLXVuZGVmaW5lZCIKLWlmIHRlc3QgIngke2VuYWJsZV9Cc3ltYm9saWN9IiA9ICJ4eWVzIjsgdGhlbgotICBHU1RfQUxMX0xERkxBR1M9IiRHU1RfQUxMX0xERkxBR1MgLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zIgotZmkKLUFDX1NVQlNUKEdTVF9BTExfTERGTEFHUykKLQotZG5sIHRoaXMgcmVhbGx5IHNob3VsZCBvbmx5IGNvbnRhaW4gZmxhZ3MsIG5vdCBsaWJzIC0gdGhleSBnZXQgYWRkZWQgYmVmb3JlCi1kbmwgd2hhdGV2ZXJ0YXJnZXRfTElCUyBhbmQgLUwgZmxhZ3MgaGVyZSBhZmZlY3QgdGhlIHJlc3Qgb2YgdGhlIGxpbmtpbmcKLUdTVF9QTFVHSU5fTERGTEFHUz0iLW1vZHVsZSAtYXZvaWQtdmVyc2lvbiAtZXhwb3J0LXN5bWJvbHMtcmVnZXggJ15bX10qZ3N0X3BsdWdpbl8uKicgJEdTVF9BTExfTERGTEFHUyIKLUFDX1NVQlNUKEdTVF9QTFVHSU5fTERGTEFHUykKLQotZG5sICoqKiBvdXRwdXQgZmlsZXMgKioqCi0KLSRNS0RJUl9QIHRlc3RzL2NoZWNrL29yYwotCi1kbmwga2VlcCB0aGlzIGFscGhhYmV0aWMgcGVyIGRpcmVjdG9yeSwgcGxlYXNlCi1BQ19DT05GSUdfRklMRVMoCi1NYWtlZmlsZQotZ3N0L01ha2VmaWxlCi1nc3QvYWxwaGEvTWFrZWZpbGUKLWdzdC9hcGV0YWcvTWFrZWZpbGUKLWdzdC9hdWRpb2Z4L01ha2VmaWxlCi1nc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlCi1nc3QvYXVwYXJzZS9NYWtlZmlsZQotZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUKLWdzdC9hdmkvTWFrZWZpbGUKLWdzdC9jdXR0ZXIvTWFrZWZpbGUKLWdzdC9kZWludGVybGFjZS9NYWtlZmlsZQotZ3N0L2R0bWYvTWFrZWZpbGUKLWdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlCi1nc3QvZWZmZWN0di9NYWtlZmlsZQotZ3N0L2VxdWFsaXplci9NYWtlZmlsZQotZ3N0L2Zsdi9NYWtlZmlsZQotZ3N0L2dvb20vTWFrZWZpbGUKLWdzdC9nb29tMmsxL01ha2VmaWxlCi1nc3QvaWQzZGVtdXgvTWFrZWZpbGUKLWdzdC9pY3lkZW11eC9NYWtlZmlsZQotZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlCi1nc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZQotZ3N0L2lzb21wNC9NYWtlZmlsZQotZ3N0L2xhdy9NYWtlZmlsZQotZ3N0L2xldmVsL01ha2VmaWxlCi1nc3QvbWF0cm9za2EvTWFrZWZpbGUKLWdzdC9tb25vc2NvcGUvTWFrZWZpbGUKLWdzdC9tdWx0aWZpbGUvTWFrZWZpbGUKLWdzdC9tdWx0aXBhcnQvTWFrZWZpbGUKLWdzdC9yZXBsYXlnYWluL01ha2VmaWxlCi1nc3QvcnRwL01ha2VmaWxlCi1nc3QvcnRwbWFuYWdlci9NYWtlZmlsZQotZ3N0L3J0c3AvTWFrZWZpbGUKLWdzdC9zaGFwZXdpcGUvTWFrZWZpbGUKLWdzdC9zbXB0ZS9NYWtlZmlsZQotZ3N0L3NwZWN0cnVtL01ha2VmaWxlCi1nc3QvdWRwL01ha2VmaWxlCi1nc3QvdmlkZW9ib3gvTWFrZWZpbGUKLWdzdC92aWRlb2Nyb3AvTWFrZWZpbGUKLWdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZQotZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUKLWdzdC93YXZlbmMvTWFrZWZpbGUKLWdzdC93YXZwYXJzZS9NYWtlZmlsZQotZ3N0L2ZseC9NYWtlZmlsZQotZ3N0L3k0bS9NYWtlZmlsZQotZXh0L01ha2VmaWxlCi1leHQvYWFsaWIvTWFrZWZpbGUKLWV4dC9jYWlyby9NYWtlZmlsZQotZXh0L2R2L01ha2VmaWxlCi1leHQvZmxhYy9NYWtlZmlsZQotZXh0L2dka19waXhidWYvTWFrZWZpbGUKLWV4dC9qYWNrL01ha2VmaWxlCi1leHQvanBlZy9NYWtlZmlsZQotZXh0L2xpYmNhY2EvTWFrZWZpbGUKLWV4dC9saWJwbmcvTWFrZWZpbGUKLWV4dC9wdWxzZS9NYWtlZmlsZQotZXh0L3JhdzEzOTQvTWFrZWZpbGUKLWV4dC9zaG91dDIvTWFrZWZpbGUKLWV4dC9zb3VwL01ha2VmaWxlCi1leHQvc3BlZXgvTWFrZWZpbGUKLWV4dC90YWdsaWIvTWFrZWZpbGUKLWV4dC92cHgvTWFrZWZpbGUKLWV4dC93YXZwYWNrL01ha2VmaWxlCi1zeXMvTWFrZWZpbGUKLXN5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZQotc3lzL29zcy9NYWtlZmlsZQotc3lzL29zczQvTWFrZWZpbGUKLXN5cy9vc3hhdWRpby9NYWtlZmlsZQotc3lzL29zeHZpZGVvL01ha2VmaWxlCi1zeXMvc3VuYXVkaW8vTWFrZWZpbGUKLXN5cy92NGwyL01ha2VmaWxlCi1zeXMvd2F2ZWZvcm0vTWFrZWZpbGUKLXN5cy94aW1hZ2UvTWFrZWZpbGUKLXBvL01ha2VmaWxlLmluCi10ZXN0cy9NYWtlZmlsZQotdGVzdHMvY2hlY2svTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9jYWlyby9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9sZXZlbC9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvcHVsc2UvTWFrZWZpbGUKLXRlc3RzL2V4YW1wbGVzL3J0cC9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL01ha2VmaWxlCi10ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9NYWtlZmlsZQotdGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZQotdGVzdHMvZmlsZXMvTWFrZWZpbGUKLXRlc3RzL2ljbGVzL01ha2VmaWxlCi1jb21tb24vTWFrZWZpbGUKLWNvbW1vbi9tNC9NYWtlZmlsZQotbTQvTWFrZWZpbGUKLWRvY3MvTWFrZWZpbGUKLWRvY3MvcGx1Z2lucy9NYWtlZmlsZQotZG9jcy92ZXJzaW9uLmVudGl0aWVzCi1wa2djb25maWcvTWFrZWZpbGUKLXBrZ2NvbmZpZy9nc3RyZWFtZXItcGx1Z2lucy1nb29kLXVuaW5zdGFsbGVkLnBjCi1nc3QtcGx1Z2lucy1nb29kLnNwZWMKLSkKLQotZG5sIENyZWF0ZSB0aGUgY29uZmlnLmggZmlsZSBmb3IgVmlzdWFsIFN0dWRpbyBidWlsZHMKLWRubCBCZXdhcmUgb2Ygc3BhY2VzIGFuZCAvJ3MgaW4gc29tZSBvZiB0aGUgc2hlbGwgdmFyaWFibGUgY29udGVudHMuCi1zZWQgXAotICAgIC1lICdzLy4qY29uZmlnLmguaW4uKmF1dG9oZWFkZXIuKi9cLyogQXV0b2dlbmVyYXRlZCBjb25maWcuaCBjcmVhdGVkIGZvciB3aW4zMiBWaXN1YWwgU3R1ZGlvIGJ1aWxkcyAqXC9cblxuXC8qIFBSRUZJWCAtLSBzcGVjaWZpY2FsbHkgYWRkZWQgZm9yIFdpbmRvd3MgZm9yIGVhc2llciBtb3ZpbmcgKlwvXG4jZGVmaW5lIFBSRUZJWCAiQzpcXFxcZ3N0cmVhbWVyIlxuXG4jZGVmaW5lIEdTVF9JTlNUQUxMX1BMVUdJTlNfSEVMUEVSIFBSRUZJWCAiXFxcXGxpYmV4ZWNcXFxcZ3N0LWluc3RhbGwtcGx1Z2lucy1oZWxwZXIuZXhlIi8nIFwKLSAgICAtZSAncy8uKiBHRVRURVhUX1BBQ0tBR0UkLyNkZWZpbmUgR0VUVEVYVF9QQUNLQUdFICInJEdFVFRFWFRfUEFDS0FHRSciLycgXAotICAgIC1lICdzLy4qIEdTVF9EQVRBRElSJC8jZGVmaW5lIEdTVF9EQVRBRElSIFBSRUZJWCAiXFxcXHNoYXJlIi8nIFwKLSAgICAtZSAncy8uKiBHU1RfTEVWRUxfREVGQVVMVCQvI2RlZmluZSBHU1RfTEVWRUxfREVGQVVMVCBHU1RfTEVWRUxfRVJST1IvJyBcCi0gICAgLWUgJ3MvLiogR1NUX0xJQ0VOU0UkLyNkZWZpbmUgR1NUX0xJQ0VOU0UgIickR1NUX0xJQ0VOU0UnIi8nIFwKLSAgICAtZSAncy8uKiBHU1RfQVBJX1ZFUlNJT04kLyNkZWZpbmUgR1NUX0FQSV9WRVJTSU9OICInJEdTVF9BUElfVkVSU0lPTiciLycgXAotICAgIC1lICJzLC4qIEdTVF9QQUNLQUdFX05BTUUkLCNkZWZpbmUgR1NUX1BBQ0tBR0VfTkFNRSBcIiR7R1NUX1BBQ0tBR0VfTkFNRX1cIiwiIFwKLSAgICAtZSAncy8uKiBHU1RfUEFDS0FHRV9PUklHSU4kLyNkZWZpbmUgR1NUX1BBQ0tBR0VfT1JJR0lOICJVbmtub3duIHBhY2thZ2Ugb3JpZ2luIi8nIFwKLSAgICAtZSAicywuKiBHU1RfUEFDS0FHRV9SRUxFQVNFX0RBVEVUSU1FJCwjZGVmaW5lIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgXCIke0dTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUV9XCIsIiBcCi0gICAgLWUgJ3MvLiogSEFWRV9DUFVfSTM4NiQvI2RlZmluZSBIQVZFX0NQVV9JMzg2IDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9GR0VUUE9TJC8jZGVmaW5lIEhBVkVfRkdFVFBPUyAxLycgXAotICAgIC1lICdzLy4qIEhBVkVfRlNFVFBPUyQvI2RlZmluZSBIQVZFX0ZTRVRQT1MgMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX0xJQlhNTDIkLyNkZWZpbmUgSEFWRV9MSUJYTUwyIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9QUk9DRVNTX0gkLyNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NURExJQl9IJC8jZGVmaW5lIEhBVkVfU1RETElCX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NUUklOR19IJC8jZGVmaW5lIEhBVkVfU1RSSU5HX0ggMS8nIFwKLSAgICAtZSAncy8uKiBIQVZFX1NZU19TVEFUX0gkLyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9TWVNfVFlQRVNfSCQvI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEvJyBcCi0gICAgLWUgJ3MvLiogSEFWRV9XSU4zMiQvI2RlZmluZSBIQVZFX1dJTjMyIDEvJyBcCi0gICAgLWUgJ3MvLiogSE9TVF9DUFUkLyNkZWZpbmUgSE9TVF9DUFUgImk2ODYiLycgXAotICAgIC1lICdzLy4qIExJQkRJUiQvI2lmZGVmIF9ERUJVR1xuIyAgZGVmaW5lIExJQkRJUiBQUkVGSVggIlxcXFxkZWJ1Z1xcXFxsaWIiXG4jZWxzZVxuIyAgZGVmaW5lIExJQkRJUiBQUkVGSVggIlxcXFxsaWIiXG4jZW5kaWYvJyBcCi0gICAgLWUgJ3MvLiogTE9DQUxFRElSJC8jZGVmaW5lIExPQ0FMRURJUiBQUkVGSVggIlxcXFxzaGFyZVxcXFxsb2NhbGUiLycgXAotICAgIC1lICJzLy4qIFBBQ0tBR0UkLyNkZWZpbmUgUEFDS0FHRSBcIiRQQUNLQUdFXCIvIiBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRV9CVUdSRVBPUlQkLyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImh0dHA6XC9cL2J1Z3ppbGxhLmdub21lLm9yZ1wvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lciIvJyBcCi0gICAgLWUgInMvLiogUEFDS0FHRV9OQU1FJC8jZGVmaW5lIFBBQ0tBR0VfTkFNRSBcIiRQQUNLQUdFX05BTUVcIi8iIFwKLSAgICAtZSAicy8uKiBQQUNLQUdFX1NUUklORyQvI2RlZmluZSBQQUNLQUdFX1NUUklORyBcIiRQQUNLQUdFX1NUUklOR1wiLyIgXAotICAgIC1lICdzLy4qIFBBQ0tBR0VfVEFSTkFNRSQvI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIickUEFDS0FHRV9UQVJOQU1FJyIvJyBcCi0gICAgLWUgJ3MvLiogUEFDS0FHRV9WRVJTSU9OJC8jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJyRQQUNLQUdFX1ZFUlNJT04nIi8nIFwKLSAgICAtZSAncy8uKiBQTFVHSU5ESVIkLyNpZmRlZiBfREVCVUdcbiMgIGRlZmluZSBQTFVHSU5ESVIgUFJFRklYICJcXFxcZGVidWdcXFxcbGliXFxcXGdzdHJlYW1lci0wLjExIlxuI2Vsc2VcbiMgIGRlZmluZSBQTFVHSU5ESVIgUFJFRklYICJcXFxcbGliXFxcXGdzdHJlYW1lci0wLjExIlxuI2VuZGlmLycgXAotICAgIC1lICdzLy4qIFVTRV9CSU5BUllfUkVHSVNUUlkkLyNkZWZpbmUgVVNFX0JJTkFSWV9SRUdJU1RSWS8nIFwKLSAgICAtZSAncy8uKiBWRVJTSU9OJC8jZGVmaW5lIFZFUlNJT04gIickVkVSU0lPTiciLycgXAotICAgIC1lICJzLy4qIERFRkFVTFRfQVVESU9TSU5LJC8jZGVmaW5lIERFRkFVTFRfQVVESU9TSU5LIFwiZGlyZWN0c291bmRzaW5rXCIvIiBcCi0gICAgLWUgInMvLiogREVGQVVMVF9BVURJT1NSQyQvI2RlZmluZSBERUZBVUxUX0FVRElPU1JDIFwiYXVkaW90ZXN0c3JjXCIvIiBcCi0gICAgLWUgInMvLiogREVGQVVMVF9WSURFT1NSQyQvI2RlZmluZSBERUZBVUxUX1ZJREVPU1JDIFwidmlkZW90ZXN0c3JjXCIvIiBcCi0gICAgLWUgInMvLiogREVGQVVMVF9WSVNVQUxJWkVSJC8jZGVmaW5lIERFRkFVTFRfVklTVUFMSVpFUiBcImdvb21cIi8iIFwKLSAgICBjb25maWcuaC5pbiA+d2luMzIvY29tbW9uL2NvbmZpZy5oLW5ldwotCi1BQ19PVVRQVVQKLQotQUdfR1NUX09VVFBVVF9QTFVHSU5TCi1PUkNfT1VUUFVUCi0KZGlmZiAtLWdpdCBhL2RlcGNvbXAgYi9kZXBjb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmYzk4NzEwLi4wMDAwMDAwCi0tLSBhL2RlcGNvbXAKKysrIC9kZXYvbnVsbApAQCAtMSw3OTEgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCi0KLXNjcmlwdHZlcnNpb249MjAxMy0wNS0zMC4wNzsgIyBVVEMKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0KLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KLQotY2FzZSAkMSBpbgotICAnJykKLSAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgICBleGl0IDE7Ci0gICAgOzsKLSAgLWggfCAtLWgqKQotICAgIGNhdCA8PFxFT0YKLVVzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCi0KLVJ1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcwotYXMgc2lkZS1lZmZlY3RzLgotCi1FbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0gIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KLSAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSAnUFJPR1JBTVMgQVJHUycuCi0gIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSAnUFJPR1JBTVMgQVJHUycuCi0gIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCi0gIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCi0gIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgZGVwZW5kZW5jaWVzLgotICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KLQotUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KLUVPRgotICAgIGV4aXQgJD8KLSAgICA7OwotICAtdiB8IC0tdiopCi0gICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKLSAgICBleGl0ICQ/Ci0gICAgOzsKLWVzYWMKLQotIyBHZXQgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IGluIHRoZQotIyBnbG9iYWwgdmFyaWFibGVzICckZGlyJy4gIE5vdGUgdGhhdCB0aGlzIGRpcmVjdG9yeSBjb21wb25lbnQgd2lsbAotIyBiZSBlaXRoZXIgZW1wdHkgb3IgZW5kaW5nIHdpdGggYSAnLycgY2hhcmFjdGVyLiAgVGhpcyBpcyBkZWxpYmVyYXRlLgotc2V0X2Rpcl9mcm9tICgpCi17Ci0gIGNhc2UgJDEgaW4KLSAgICAqLyopIGRpcj1gZWNobyAiJDEiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYDs7Ci0gICAgICAqKSBkaXI9OzsKLSAgZXNhYwotfQotCi0jIEdldCB0aGUgc3VmZml4LXN0cmlwcGVkIGJhc2VuYW1lIG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCB0aGUKLSMgZ2xvYmFsIHZhcmlhYmxlICckYmFzZScuCi1zZXRfYmFzZV9mcm9tICgpCi17Ci0gIGJhc2U9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuW14uXSokLy8nYAotfQotCi0jIElmIG5vIGRlcGVuZGVuY3kgZmlsZSB3YXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaW52b2NhdGlvbiwKLSMgd2Ugc3RpbGwgaGF2ZSB0byBjcmVhdGUgYSBkdW1teSBkZXBmaWxlLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUKLSMgTWFrZWZpbGUgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCi1tYWtlX2R1bW15X2RlcGZpbGUgKCkKLXsKLSAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKLX0KLQotIyBGYWN0b3Igb3V0IHNvbWUgY29tbW9uIHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZ2VuZXJhdGVkIGRlcGZpbGUuCi0jIFJlcXVpcmVzIHRoZSBhdXhpbGlhcnkgZ2xvYmFsIHZhcmlhYmxlICckdG1wZGVwZmlsZScgdG8gYmUgc2V0LgotYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlICgpCi17Ci0gICMgSWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IG1hbmFnZWQgdG8gcHJvZHVjZSBhIGRlcGVuZGVuY3kgZmlsZSwKLSAgIyBwb3N0LXByb2Nlc3MgaXQuCi0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubzogZGVwZW5kZW5jeS5oJy4KLSAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bwotICAgICMgICAkb2JqZWN0OiBkZXBlbmRlbmN5LmgKLSAgICAjIGFuZCBvbmUgdG8gc2ltcGx5IG91dHB1dAotICAgICMgICBkZXBlbmRlbmN5Lmg6Ci0gICAgIyB3aGljaCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCi0gICAgeyBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiCi0gICAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6WyR0YWIgXSosLCIgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiCi0gICAgfSA+ICIkZGVwZmlsZSIKLSAgICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIGVsc2UKLSAgICBtYWtlX2R1bW15X2RlcGZpbGUKLSAgZmkKLX0KLQotIyBBIHRhYnVsYXRpb24gY2hhcmFjdGVyLgotdGFiPScJJwotIyBBIG5ld2xpbmUgY2hhcmFjdGVyLgotbmw9JwotJwotIyBDaGFyYWN0ZXIgcmFuZ2VzIG1pZ2h0IGJlIHByb2JsZW1hdGljIG91dHNpZGUgdGhlIEMgbG9jYWxlLgotIyBUaGVzZSBkZWZpbml0aW9ucyBoZWxwLgotdXBwZXI9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKLWxvd2VyPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci1kaWdpdHM9MDEyMzQ1Njc4OQotYWxwaGE9JHt1cHBlcn0ke2xvd2VyfQotCi1pZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KLSAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCi0gIGV4aXQgMQotZmkKLQotIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCi1kZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAotICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KLXRtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9Ci0KLXJtIC1mICIkdG1wZGVwZmlsZSIKLQotIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgotZ2NjZmxhZz0gZGFzaG1mbGFnPQotCi0jIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKLSMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCi0jIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCi0jIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgotaWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KLSAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCi0gIGdjY2ZsYWc9LU0KLSAgZGVwbW9kZT1nY2MKLWZpCi0KLWlmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgotICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCi0gIGRhc2htZmxhZz0teE0KLSAgZGVwbW9kZT1kYXNobXN0ZG91dAotZmkKLQotY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCi1pZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgotICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KLSAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCi0gICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAotICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJwotICBkZXBtb2RlPW1zdmlzdWFsY3BwCi1maQotCi1pZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KLSAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3ZjNyBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCi0gICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAotICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKLSAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKLSAgZGVwbW9kZT1tc3ZjNwotZmkKLQotaWYgdGVzdCAiJGRlcG1vZGUiID0geGxjOyB0aGVuCi0gICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KLSAgZ2NjZmxhZz0tcW1ha2VkZXA9Z2NjLC1NRgotICBkZXBtb2RlPWdjYwotZmkKLQotY2FzZSAiJGRlcG1vZGUiIGluCi1nY2MzKQotIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKLSMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCi0jIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCi0jIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgotIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5Ci0jIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQotIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICRhcmcgaW4KLSAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OwotICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKLSAgICBlc2FjCi0gICAgc2hpZnQgIyBmbm9yZAotICAgIHNoaWZ0ICMgJGFyZwotICBkb25lCi0gICIkQCIKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCi0gIDs7Ci0KLWdjYykKLSMjIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QganVzdCBjYXRlciB0byBvYnNvc2V0ZSBwcmUtMy54IEdDQyBjb21waWxlcnMuCi0jIyBidXQgYWxzbyB0byBpbi11c2UgY29tcGlsZXJzIGxpa2UgSU1CIHhsYy94bEMgYW5kIHRoZSBIUCBDIGNvbXBpbGVyLgotIyMgKHNlZSB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCB0byAkZ2NjZmxhZyBhYm92ZSkuCi0jIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncwotIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6Ci0jIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAotIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgotIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKLSMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCi0jIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4gIEFsc28sIGl0IG1pZ2h0IG5vdCBiZQotIyMgICBzdXBwb3J0ZWQgYnkgdGhlIG90aGVyIGNvbXBpbGVycyB3aGljaCB1c2UgdGhlICdnY2MnIGRlcG1vZGUuCi0jIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCi0jIyAgIHRoYW4gcmVuYW1pbmcpLgotICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KLSAgICBnY2NmbGFnPS1NRCwKLSAgZmkKLSAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgotICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlCi0gICMgbGV0dGVycy4KLSAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCi0gICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0jIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSAiZGVsZXRlZCBoZWFkZXIgZmlsZSIgcHJvYmxlbS4KLSMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCi0jIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKLSMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCi0jIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCi0jIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KLSMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLiAgT24gdGhlIHRoZW9yeQotIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCi0jIyB3ZWxsLiAgaHAgZGVwbW9kZSBhbHNvIGFkZHMgdGhhdCBzcGFjZSwgYnV0IGFsc28gcHJlZml4ZXMgdGhlIFZQQVRICi0jIyB0byB0aGUgb2JqZWN0LiAgVGFrZSBjYXJlIHRvIG5vdCByZXBlYXQgaXQgaW4gdGhlIG91dHB1dC4KLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKLSAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgInN8Liokb2JqZWN0JHx8IiAtZSAnLzokL2QnIFwKLSAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWhwKQotICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKLSAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAotICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgotICBleGl0IDEKLSAgOzsKLQotc2dpKQotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgotICBlbHNlCi0gICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgotICBmaQotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KLSAgICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICAgZXhpdCAkc3RhdAotICBmaQotICBybSAtZiAiJGRlcGZpbGUiCi0KLSAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCi0gICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCi0gICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKLSAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KLSAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOwotICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlICcjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKLSAgICAjIGRlcGVuZGVuY3kgbGluZS4KLSAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKLSAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCi0gICAgICB8IHRyICIkbmwiICcgJyA+PiAiJGRlcGZpbGUiCi0gICAgZWNobyA+PiAiJGRlcGZpbGUiCi0gICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCi0gICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCi0gICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAotICAgICAgPj4gIiRkZXBmaWxlIgotICBlbHNlCi0gICAgbWFrZV9kdW1teV9kZXBmaWxlCi0gIGZpCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQoteGxjKQotICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKLSAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAotICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgotICBleGl0IDEKLSAgOzsKLQotYWl4KQotICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCi0gICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCi0gICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgJyRvYmplY3Q6JyBhdCB0aGUKLSAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KLSAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCi0gIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKLSAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKLSAgICB0bXBkZXBmaWxlMj0kYmFzZS51Ci0gICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKLSAgICAiJEAiIC1XYywtTQotICBlbHNlCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKLSAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQotICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51Ci0gICAgIiRAIiAtTQotICBmaQotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KLSAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLQotICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgotICBkbwotICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhawotICBkb25lCi0gIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQotICA7OwotCi10Y2MpCi0gICMgdGNjIChUaW55IEMgQ29tcGlsZXIpIHVuZGVyc3RhbmQgJy1NRCAtTUYgZmlsZScgc2luY2UgdmVyc2lvbiAwLjkuMjYKLSAgIyBGSVhNRTogVGhhdCB2ZXJzaW9uIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZy4KLSAgIyAgICAgICAgTWFrZSB0aGF0IHRoaXMgc3RhdGVtZW50IHJlbWFpbnMgdHJ1ZSBhbHNvIGZvciBzdGFibGUsIHJlbGVhc2VkCi0gICMgICAgICAgIHZlcnNpb25zLgotICAjIEl0IHdpbGwgd3JhcCBsaW5lcyAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciBsb25nIG9yIHNob3J0KSB3aXRoIGEKLSAgIyB0cmFpbGluZyAnXCcsIGFzIGluOgotICAjCi0gICMgICBmb28ubyA6IFwKLSAgIyAgICBmb28uYyBcCi0gICMgICAgZm9vLmggXAotICAjCi0gICMgSXQgd2lsbCBwdXQgYSB0cmFpbGluZyAnXCcgZXZlbiBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgd2lsbCB1c2UgbGVhZGluZwotICAjIHNwYWNlcyByYXRoZXIgdGhhbiBsZWFkaW5nIHRhYnMgKGF0IGxlYXN0IHNpbmNlIGl0cyBjb21taXQgMDM5NGNhZjcKLSAgIyAiRW1pdCBzcGFjZXMgZm9yIC1NRCIpLgotICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KLSAgICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICAgZXhpdCAkc3RhdAotICBmaQotICBybSAtZiAiJGRlcGZpbGUiCi0gICMgRWFjaCBub24tZW1wdHkgbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm8gOiBcJyBvciAnIGRlcC5oIFwnLgotICAjIFdlIGhhdmUgdG8gY2hhbmdlIGxpbmVzIG9mIHRoZSBmaXJzdCBraW5kIHRvICckb2JqZWN0OiBcJy4KLSAgc2VkIC1lICJzfC4qOnwkb2JqZWN0IDp8IiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICMgQW5kIGZvciBlYWNoIGxpbmUgb2YgdGhlIHNlY29uZCBraW5kLCB3ZSBoYXZlIHRvIGVtaXQgYSAnZGVwLmg6JwotICAjIGR1bW15IGRlcGVuZGVuY3ksIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgotICBzZWQgLW4gLWUgJ3N8XiAgKlwoLipcKSAqXFwkfFwxOnxwJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLSMjIFRoZSBvcmRlciBvZiB0aGlzIG9wdGlvbiBpbiB0aGUgY2FzZSBzdGF0ZW1lbnQgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUKLSMjIHNoZWxsIGNvZGUgaW4gY29uZmlndXJlIHdpbGwgdHJ5IGVhY2ggb2YgdGhlc2UgZm9ybWF0cyBpbiB0aGUgb3JkZXIKLSMjIGxpc3RlZCBpbiB0aGlzIGZpbGUuICBBIHBsYWluICctTUQnIG9wdGlvbiB3b3VsZCBiZSB1bmRlcnN0b29kIGJ5IG1hbnkKLSMjIGNvbXBpbGVycywgc28gd2UgbXVzdCBlbnN1cmUgdGhpcyBjb21lcyBhZnRlciB0aGUgZ2NjIGFuZCBpY2Mgb3B0aW9ucy4KLXBnY2MpCi0gICMgUG9ydGxhbmQncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzICctTUQnLgotICAjIFdpbGwgYWx3YXlzIG91dHB1dCBkZXBzIHRvICdmaWxlLmQnIHdoZXJlIGZpbGUgaXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUKLSAgIyBzb3VyY2UgZmlsZSB1bmRlciBjb21waWxhdGlvbiwgZXZlbiBpZiBmaWxlIHJlc2lkZXMgaW4gYSBzdWJkaXJlY3RvcnkuCi0gICMgVGhlIG9iamVjdCBmaWxlIG5hbWUgZG9lcyBub3QgYWZmZWN0IHRoZSBuYW1lIG9mIHRoZSAnLmQnIGZpbGUuCi0gICMgcGdjYyAxMC4yIHdpbGwgb3V0cHV0Ci0gICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKLSAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKLSAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCi0gICMgICAgIHN1Yi9mb28uaCAuLi4gXAotICAjICAgICAuLi4KLSAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgotICAjIFVzZSB0aGUgc291cmNlLCBub3QgdGhlIG9iamVjdCwgdG8gZGV0ZXJtaW5lIHRoZSBiYXNlIG5hbWUsIHNpbmNlCi0gICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KLSAgc2V0X2Jhc2VfZnJvbSAiJHNvdXJjZSIKLSAgdG1wZGVwZmlsZT0kYmFzZS5kCi0KLSAgIyBGb3IgcHJvamVjdHMgdGhhdCBidWlsZCB0aGUgc2FtZSBzb3VyY2UgZmlsZSB0d2ljZSBpbnRvIGRpZmZlcmVudCBvYmplY3QKLSAgIyBmaWxlcywgdGhlIHBnY2MgYXBwcm9hY2ggb2YgdXNpbmcgdGhlICpzb3VyY2UqIGZpbGUgcm9vdCBuYW1lIGNhbiBjYXVzZQotICAjIHByb2JsZW1zIGluIHBhcmFsbGVsIGJ1aWxkcy4gIFVzZSBhIGxvY2tpbmcgc3RyYXRlZ3kgdG8gYXZvaWQgc3RvbXBpbmcgb24KLSAgIyB0aGUgc2FtZSAkdG1wZGVwZmlsZS4KLSAgbG9ja2Rpcj0kYmFzZS5kLWxvY2sKLSAgdHJhcCAiCi0gICAgZWNobyAnJDA6IGNhdWdodCBzaWduYWwsIGNsZWFuaW5nIHVwLi4uJyA+JjIKLSAgICBybWRpciAnJGxvY2tkaXInCi0gICAgZXhpdCAxCi0gICIgMSAyIDEzIDE1Ci0gIG51bXRyaWVzPTEwMAotICBpPSRudW10cmllcwotICB3aGlsZSB0ZXN0ICRpIC1ndCAwOyBkbwotICAgICMgbWtkaXIgaXMgYSBwb3J0YWJsZSB0ZXN0LWFuZC1zZXQuCi0gICAgaWYgbWtkaXIgIiRsb2NrZGlyIiAyPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIyBUaGlzIHByb2Nlc3MgYWNxdWlyZWQgdGhlIGxvY2suCi0gICAgICAiJEAiIC1NRAotICAgICAgc3RhdD0kPwotICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrLgotICAgICAgcm1kaXIgIiRsb2NrZGlyIgotICAgICAgYnJlYWsKLSAgICBlbHNlCi0gICAgICAjIElmIHRoZSBsb2NrIGlzIGJlaW5nIGhlbGQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcywgd2FpdAotICAgICAgIyB1bnRpbCB0aGUgd2lubmluZyBwcm9jZXNzIGlzIGRvbmUgb3Igd2UgdGltZW91dC4KLSAgICAgIHdoaWxlIHRlc3QgLWQgIiRsb2NrZGlyIiAmJiB0ZXN0ICRpIC1ndCAwOyBkbwotICAgICAgICBzbGVlcCAxCi0gICAgICAgIGk9YGV4cHIgJGkgLSAxYAotICAgICAgZG9uZQotICAgIGZpCi0gICAgaT1gZXhwciAkaSAtIDFgCi0gIGRvbmUKLSAgdHJhcCAtIDEgMiAxMyAxNQotICBpZiB0ZXN0ICRpIC1sZSAwOyB0aGVuCi0gICAgZWNobyAiJDA6IGZhaWxlZCB0byBhY3F1aXJlIGxvY2sgYWZ0ZXIgJG51bXRyaWVzIGF0dGVtcHRzIiA+JjIKLSAgICBlY2hvICIkMDogY2hlY2sgbG9ja2RpciAnJGxvY2tkaXInIiA+JjIKLSAgICBleGl0IDEKLSAgZmkKLQotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKLSAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KLSAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KLSAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgotICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIFwKLSAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWhwMikKLSAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0Ci0gICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgotICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKLSAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAotICAjIGhhcHBlbnMgdG8gYmUuCi0gICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KLSAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKLSAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKLSAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAotICAgICIkQCIgLVdjLCtNYWtlZAotICBlbHNlCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKLSAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAotICAgICIkQCIgK01ha2VkCi0gIGZpCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgotICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgotICAgICBleGl0ICRzdGF0Ci0gIGZpCi0KLSAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKLSAgZG8KLSAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKLSAgZG9uZQotICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KLSAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAjIEFkZCAnZGVwZW5kZW50Lmg6JyBsaW5lcy4KLSAgICBzZWQgLW5lICcyLCR7Ci0gICAgICAgICAgICAgICBzL14gKi8vCi0gICAgICAgICAgICAgICBzLyBcXCokLy8KLSAgICAgICAgICAgICAgIHMvJC86LwotICAgICAgICAgICAgICAgcAotICAgICAgICAgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICBlbHNlCi0gICAgbWFrZV9kdW1teV9kZXBmaWxlCi0gIGZpCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKLSAgOzsKLQotdHJ1NjQpCi0gICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKLSAgIyBlZmZlY3QuICAnY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gJ2Zvby5vLmQnLgotICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0Ci0gICMgZGVwZW5kZW5jaWVzIGluICdmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgotICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCi0gIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCi0gIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCi0KLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgIyBMaWJ0b29sIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlCi0gICAgIyB0d28gY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKLSAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCi0gICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgotICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCi0gICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKLSAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KLSAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKLSAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgTGlrZXdpc2UuCi0gICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKLSAgICAiJEAiIC1XYywtTUQKLSAgZWxzZQotICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCi0gICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKLSAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAotICAgICIkQCIgLU1ECi0gIGZpCi0KLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKLSAgICBleGl0ICRzdGF0Ci0gIGZpCi0KLSAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKLSAgZG8KLSAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKLSAgZG9uZQotICAjIFNhbWUgcG9zdC1wcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEFJWCBtb2RlLgotICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKLSAgOzsKLQotbXN2YzcpCi0gIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgIHNob3dJbmNsdWRlcz0tV2MsLXNob3dJbmNsdWRlcwotICBlbHNlCi0gICAgc2hvd0luY2x1ZGVzPS1zaG93SW5jbHVkZXMKLSAgZmkKLSAgIiRAIiAkc2hvd0luY2x1ZGVzID4gIiR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGdyZXAgLXYgJ15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogJyAiJHRtcGRlcGZpbGUiCi0gIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KLSAgICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICAgZXhpdCAkc3RhdAotICBmaQotICBybSAtZiAiJGRlcGZpbGUiCi0gIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gICMgVGhlIGZpcnN0IHNlZCBwcm9ncmFtIGJlbG93IGV4dHJhY3RzIHRoZSBmaWxlIG5hbWVzIGFuZCBlc2NhcGVzCi0gICMgYmFja3NsYXNoZXMgZm9yIGN5Z3BhdGguICBUaGUgc2Vjb25kIHNlZCBwcm9ncmFtIG91dHB1dHMgdGhlIGZpbGUKLSAgIyBuYW1lIHdoZW4gcmVhZGluZywgYnV0IGFsc28gYWNjdW11bGF0ZXMgYWxsIGluY2x1ZGUgZmlsZXMgaW4gdGhlCi0gICMgaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gb3V0cHV0IHRoZW0gYWdhaW4gYXQgdGhlIGVuZC4gIFRoaXMgb25seQotICAjIHdvcmtzIHdpdGggc2VkIGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgYnVmZmVycy4KLSAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAnCi0vXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAgKlwoLipcKS8gewotICBzLy9cMS8KLSAgcy9cXC9cXFxcL2cKLSAgcAotfScgfCAkY3lncGF0aF91IHwgc29ydCAtdSB8IHNlZCAtbiAnCi1zLyAvXFwgL2cKLXMvXCguKlwpLyciJHRhYiInXDEgXFwvcAotcy8uXCguKlwpIFxcL1wxOi8KLUgKLSQgewotICBzLy4qLyciJHRhYiInLwotICBHCi0gIHAKLX0nID4+ICIkZGVwZmlsZSIKLSAgZWNobyA+PiAiJGRlcGZpbGUiICMgbWFrZSBzdXJlIHRoZSBmcmFnbWVudCBkb2Vzbid0IGVuZCB3aXRoIGEgYmFja3NsYXNoCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotbXN2Yzdtc3lzKQotICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKLSAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAotICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgotICBleGl0IDEKLSAgOzsKLQotI25vc2lkZWVmZmVjdCkKLSAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0Ci0gICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCi0KLWRhc2htc3Rkb3V0KQotICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKLSAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KLSAgIiRAIiB8fCBleGl0ICQ/Ci0KLSAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotICAgIHNoaWZ0Ci0gIGZpCi0KLSAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgotICBJRlM9IiAiCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICRhcmcgaW4KLSAgICAtbykKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICRvYmplY3QpCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCi0gICAgICBzaGlmdCAjIGZub3JkCi0gICAgICBzaGlmdCAjICRhcmcKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCi0gICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciAnOicKLSAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgotICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzICdjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCAnYycgb3RoZXJ3aXNlLgotICAiJEAiICRkYXNobWZsYWcgfAotICAgIHNlZCAic3xeWyR0YWIgXSpbXjokdGFiIF1bXjpdW146XSo6WyR0YWIgXSp8JG9iamVjdDogfCIgPiAiJHRtcGRlcGZpbGUiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgc2VkIGludm9jYXRpb24KLSAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKLSAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCi0gICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1kYXNoWG1zdGRvdXQpCi0gICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKLSAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCi0gIGV4aXQgMQotICA7OwotCi1tYWtlZGVwZW5kKQotICAiJEAiIHx8IGV4aXQgJD8KLSAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLSAgIyBYIG1ha2VkZXBlbmQKLSAgc2hpZnQKLSAgY2xlYXJlZD1ubyBlYXQ9bm8KLSAgZm9yIGFyZwotICBkbwotICAgIGNhc2UgJGNsZWFyZWQgaW4KLSAgICBubykKLSAgICAgIHNldCAiIjsgc2hpZnQKLSAgICAgIGNsZWFyZWQ9eWVzIDs7Ci0gICAgZXNhYwotICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgotICAgICAgZWF0PW5vCi0gICAgICBjb250aW51ZQotICAgIGZpCi0gICAgY2FzZSAiJGFyZyIgaW4KLSAgICAtRCp8LUkqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OwotICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCi0gICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgotICAgIC1hcmNoKQotICAgICAgZWF0PXllcyA7OwotICAgIC0qfCRvYmplY3QpCi0gICAgICA7OwotICAgICopCi0gICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7Ci0gICAgZXNhYwotICBkb25lCi0gIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKLSAgdG91Y2ggIiR0bXBkZXBmaWxlIgotICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgIyBtYWtlZGVwZW5kIG1heSBwcmVwZW5kIHRoZSBWUEFUSCBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuYW1lIHRvIHRoZSBvYmplY3QuCi0gICMgTm8gbmVlZCB0byByZWdleC1lc2NhcGUgJG9iamVjdCwgZXhjZXNzIG1hdGNoaW5nIG9mICcuJyBpcyBoYXJtbGVzcy4KLSAgc2VkICJzfF4uKlwoJG9iamVjdCAqOlwpfFwxfCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoZSBsYXN0IGludm9jYXRpb24KLSAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgXAotICAgIHwgdHIgJyAnICIkbmwiIFwKLSAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCi0gICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhawotICA7OwotCi1jcHApCi0gICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgotICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgotICAiJEAiIHx8IGV4aXQgJD8KLQotICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLQotICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCi0gIElGUz0iICIKLSAgZm9yIGFyZwotICBkbwotICAgIGNhc2UgJGFyZyBpbgotICAgIC1vKQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgJG9iamVjdCkKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICopCi0gICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLSAgICAgIHNoaWZ0ICMgZm5vcmQKLSAgICAgIHNoaWZ0ICMgJGFyZwotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICAiJEAiIC1FIFwKLSAgICB8IHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCi0gICAgICAgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKLSAgICB8IHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotbXN2aXN1YWxjcHApCi0gICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgotICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgotICAiJEAiIHx8IGV4aXQgJD8KLQotICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLQotICBJRlM9IiAiCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICIkYXJnIiBpbgotICAgIC1vKQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgJG9iamVjdCkKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQotICAgICAgICBzZXQgZm5vcmQgIiRAIgotICAgICAgICBzaGlmdAotICAgICAgICBzaGlmdAotICAgICAgICA7OwotICAgICopCi0gICAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgotICAgICAgICBzaGlmdAotICAgICAgICBzaGlmdAotICAgICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKLSAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgotICBybSAtZiAiJGRlcGZpbGUiCi0gIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6JyIkdGFiIidcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCi0gIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKLSAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1tc3ZjbXN5cykKLSAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5Ci0gICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKLSAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KLSAgZXhpdCAxCi0gIDs7Ci0KLW5vbmUpCi0gIGV4ZWMgIiRAIgotICA7OwotCi0qKQotICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKLSAgZXhpdCAxCi0gIDs7Ci1lc2FjCi0KLWV4aXQgMAotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgbW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvZG9jcy9NYWtlZmlsZS5hbSBiL2RvY3MvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZjQxZmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLWlmIEVOQUJMRV9HVEtfRE9DCi1pZiBFTkFCTEVfUExVR0lOX0RPQ1MKLVBMVUdJTl9ET0NTX0RJUlMgPSBwbHVnaW5zCi1lbHNlCi1QTFVHSU5fRE9DU19ESVJTID0KLWVuZGlmCi1lbHNlCi1QTFVHSU5fRE9DU19ESVJTID0gcGx1Z2lucwotZW5kaWYKLQotU1VCRElSUyA9ICQoUExVR0lOX0RPQ1NfRElSUykKLURJU1RfU1VCRElSUyA9IHBsdWdpbnMKLQotRVhUUkFfRElTVCA9IFwKLSAgICAgICAgcmFuZG9tL0NoYW5nZUxvZy0wLjggXAotICAgICAgICB2ZXJzaW9uLmVudGl0aWVzLmluCi0KLXVwbG9hZDoKLQlAaWYgdGVzdCAieCQoU1VCRElSUykiICE9IHg7IHRoZW4gZm9yIGEgaW4gJChTVUJESVJTKTsgZG8gY2QgJCRhOyBtYWtlIHVwbG9hZDsgY2QgLi47IGRvbmU7IGZpCmRpZmYgLS1naXQgYS9kb2NzL01ha2VmaWxlLmluIGIvZG9jcy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM2YTY3Yi4uMDAwMDAwMAotLS0gYS9kb2NzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODc0ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9IHZlcnNpb24uZW50aXRpZXMKLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvdmVyc2lvbi5lbnRpdGllcy5pbgotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ARU5BQkxFX0dUS19ET0NfRkFMU0VAUExVR0lOX0RPQ1NfRElSUyA9IHBsdWdpbnMKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQEBFTkFCTEVfUExVR0lOX0RPQ1NfRkFMU0VAUExVR0lOX0RPQ1NfRElSUyA9IAotQEVOQUJMRV9HVEtfRE9DX1RSVUVAQEVOQUJMRV9QTFVHSU5fRE9DU19UUlVFQFBMVUdJTl9ET0NTX0RJUlMgPSBwbHVnaW5zCi1TVUJESVJTID0gJChQTFVHSU5fRE9DU19ESVJTKQotRElTVF9TVUJESVJTID0gcGx1Z2lucwotRVhUUkFfRElTVCA9IFwKLSAgICAgICAgcmFuZG9tL0NoYW5nZUxvZy0wLjggXAotICAgICAgICB2ZXJzaW9uLmVudGl0aWVzLmluCi0KLWFsbDogYWxsLXJlY3Vyc2l2ZQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGRvY3MvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci12ZXJzaW9uLmVudGl0aWVzOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvdmVyc2lvbi5lbnRpdGllcy5pbgotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgXAotCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotdXBsb2FkOgotCUBpZiB0ZXN0ICJ4JChTVUJESVJTKSIgIT0geDsgdGhlbiBmb3IgYSBpbiAkKFNVQkRJUlMpOyBkbyBjZCAkJGE7IG1ha2UgdXBsb2FkOyBjZCAuLjsgZG9uZTsgZmkKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtIGIvZG9jcy9wbHVnaW5zL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDA2OWM3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi1HU1RfRE9DX1NDQU5PQkogPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3Rkb2Mtc2NhbmdvYmoKLQotIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCi0KLSMgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwgZS5nLiAnZ2xpYicuCi0jRE9DX01PRFVMRT1nc3QtcGx1Z2lucy1saWJzLUBHU1RfQVBJX1ZFUlNJT05ACi1NT0RVTEU9Z3N0LXBsdWdpbnMtZ29vZAotRE9DX01PRFVMRT0kKE1PRFVMRSktcGx1Z2lucwotCi0jIGZvciB1cGxvYWQtZG9jLm1hawotRE9DPSQoTU9EVUxFKS1wbHVnaW5zCi1GT1JNQVRTPWh0bWwKLWh0bWw6IGh0bWwtYnVpbGQuc3RhbXAKLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsKLQotIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgotRE9DX01BSU5fU0dNTF9GSUxFPSQoRE9DX01PRFVMRSktZG9jcy5zZ21sCi0KLSMgVGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZS4KLSMgZ3RrLWRvYyB3aWxsIHNlYXJjaCBhbGwgLmMgJiAuaCBmaWxlcyBiZW5lYXRoIGhlcmUgZm9yIGlubGluZSBjb21tZW50cwotIyBkb2N1bWVudGluZyBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4KLURPQ19TT1VSQ0VfRElSID0gJCh0b3Bfc3JjZGlyKS9nc3QgJCh0b3Bfc3JjZGlyKS9leHQgJCh0b3Bfc3JjZGlyKS9zeXMKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2Mtc2Nhbi4KLVNDQU5fT1BUSU9OUz0KLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtbWtkYi4KLU1LREJfT1BUSU9OUz0tLXNnbWwtbW9kZSAtLXNvdXJjZS1zdWZmaXhlcz1jLGgsY2MKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtZml4cmVmLgotRklYWFJFRl9PUFRJT05TPS0tZXh0cmEtZGlyPSQoR0xJQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCi0JLS1leHRyYS1kaXI9JChHU1RfUFJFRklYKS9zaGFyZS9ndGstZG9jL2h0bWwgXAotCS0tZXh0cmEtZGlyPSQoR1NUUEJfUFJFRklYKS9zaGFyZS9ndGstZG9jL2h0bWwKLQotIyBVc2VkIGZvciBkZXBlbmRlbmNpZXMuCi1IRklMRV9HTE9CPSBcCi0gICQodG9wX3NyY2RpcikvZ3N0LyovKi5oICQodG9wX3NyY2RpcikvZXh0LyovKi5oICQodG9wX3NyY2Rpcikvc3lzLyovKi5oCi1DRklMRV9HTE9CPSBcCi0gICQodG9wX3NyY2RpcikvZ3N0LyovKi5jICQodG9wX3NyY2RpcikvZXh0LyovKi5jICQodG9wX3NyY2Rpcikvc3lzLyovKi5jIFwKLSAgJCh0b3Bfc3JjZGlyKS9leHQvKi8qLmNjICQodG9wX3NyY2Rpcikvc3lzLyovKi5tCi0KLSMgSGVhZGVyIGZpbGVzIHRvIGlnbm9yZSB3aGVuIHNjYW5uaW5nLgotSUdOT1JFX0hGSUxFUyA9IAotSUdOT1JFX0NGSUxFUyA9Ci0KLSMgd2UgYWRkIGFsbCAuaCBmaWxlcyBvZiBlbGVtZW50cyB0aGF0IGhhdmUgc2lnbmFscy9hcmdzIHdlIHdhbnQKLSMgc2FkbHkgdGhpcyBhbHNvIHB1bGxzIGluIHRoZSBwcml2YXRlIG1ldGhvZHMgLSBtYXliZSB3ZSBzaG91bGQKLSMgbW92ZSB0aG9zZSBhcm91bmQgaW4gdGhlIHNvdXJjZSA/Ci0jIGFsc28sIHdlIHNob3VsZCBhZGQgc29tZSBzdHVmZiBoZXJlIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gd2hldGhlcgotIyBvciBub3QgdGhlIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGJ1aWxkCi0jIGJ1dCBJJ20gbm90IHN1cmUgYWJvdXQgdGhhdCAtIGl0IG1pZ2h0IGJlIHRoaXMgSnVzdCBXb3JrcyBnaXZlbiB0aGF0Ci0jIHRoZSByZWdpc3RyeSB3b24ndCBoYXZlIHRoZSBlbGVtZW50Ci0KLUVYVFJBX0hGSUxFUyA9IFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9hYWxpYi9nc3RhYXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmggXAotCSQodG9wX3NyY2RpcikvZXh0L2R2L2dzdGR2ZGVjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2R2L2dzdGR2ZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvZmxhYy9nc3RmbGFjZGVjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9mbGFjL2dzdGZsYWN0YWcuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9qcGVnL2dzdGpwZWdkZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvanBlZy9nc3RqcGVnZW5jLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvbGlicG5nL2dzdHBuZ2RlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9saWJwbmcvZ3N0cG5nZW5jLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9zaG91dDIvZ3N0c2hvdXQyLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvdGFnbGliL2dzdGFwZXYybXV4LmggXAotCSQodG9wX3NyY2RpcikvZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9wdWxzZS9wdWxzZXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvcHVsc2UvcHVsc2VzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvc3BlZXgvZ3N0c3BlZXhlbmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvc3BlZXgvZ3N0c3BlZXhkZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvdnB4L2dzdHZwOGRlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC92cHgvZ3N0dnA4ZW5jLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYWxwaGEvZ3N0YWxwaGEuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2VjaG8uaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2ludmVydC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdXBhcnNlL2dzdGF1cGFyc2UuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdmkvZ3N0YXZpZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXZpL2dzdGF2aW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdmkvZ3N0YXZpc3VidGl0bGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvY3V0dGVyL2dzdGN1dHRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9kdG1mL2dzdGR0bWZzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZHRtZi9nc3RydHBkdG1mc3JjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZWZmZWN0di9nc3RkaWNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lZmZlY3R2L2dzdHF1YXJrLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0cmV2LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lZmZlY3R2L2dzdHZlcnRpZ28uaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZWZmZWN0di9nc3R3YXJwLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0b3AuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZWZmZWN0di9nc3RyYWRpb2FjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2Zsdi9nc3RmbHZkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9mbHYvZ3N0Zmx2bXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2ZseC9nc3RmbHhkZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZ29vbS9nc3Rnb29tLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2dvb20yazEvZ3N0Z29vbS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9sYXcvYWxhdy1kZWNvZGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbGF3L2FsYXctZW5jb2RlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbGF3L211bGF3LWVuY29kZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbGV2ZWwvZ3N0bGV2ZWwuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L21hdHJvc2thL3dlYm0tbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2lzb21wNC9xdGRlbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2lzb21wNC9nc3RxdG11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3J0cC9nc3RydHBqMmtwYXkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwL2dzdHJ0cGpwZWdwYXkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHNwL2dzdHJ0cGRlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHNwL2dzdHJ0c3BzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9zbXB0ZS9nc3RzbXB0ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvdWRwL2dzdHVkcHNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC91ZHAvZ3N0dWRwc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjJwYWQuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC95NG0vZ3N0eTRtZW5jb2RlLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy9vc3M0L29zczQtc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy9vc3M0L29zczQtc291cmNlLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL29zcy9nc3Rvc3NzaW5rLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL29zcy9nc3Rvc3NzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy92NGwyL2dzdHY0bDJzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvdjRsMi9nc3R2NGwyc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvdjRsMi9nc3R2NGwycmFkaW8uaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaAotCi0jIGV4YW1wbGUgY29kZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byB4bWwgYW5kIHBsYWNlZCBpbiB4bWwvCi1FWEFNUExFX0NGSUxFUyA9IFwKLQkkKHRvcF9zcmNkaXIpL3Rlc3RzL2V4YW1wbGVzL2xldmVsL2xldmVsLWV4YW1wbGUuYyBcCi0JJCh0b3Bfc3JjZGlyKS90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9zcGVjdHJ1bS1leGFtcGxlLmMgXAotCSQodG9wX3NyY2RpcikvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9maXJmaWx0ZXItZXhhbXBsZS5jIFwKLQkkKHRvcF9zcmNkaXIpL3Rlc3RzL2V4YW1wbGVzL2F1ZGlvZngvaWlyZmlsdGVyLWV4YW1wbGUuYwotCi0jIEltYWdlcyB0byBjb3B5IGludG8gSFRNTCBkaXJlY3RvcnkuCi1IVE1MX0lNQUdFUyA9Ci0KLSMgRXh0cmEgU0dNTCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSAkKERPQ19NQUlOX1NHTUxfRklMRSkuCi1jb250ZW50X2ZpbGVzID0KLQotIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgotZXh0cmFfZmlsZXMgPQotCi0jIENGTEFHUyBhbmQgTERGTEFHUyBmb3IgY29tcGlsaW5nIHNjYW4gcHJvZ3JhbS4gT25seSBuZWVkZWQgaWYgeW91ciBhcHAvbGliCi0jIGNvbnRhaW5zIEd0a09iamVjdHMvR09iamVjdHMgYW5kIHlvdSB3YW50IHRvIGRvY3VtZW50IHNpZ25hbHMgYW5kIHByb3BlcnRpZXMuCi1HVEtET0NfQ0ZMQUdTID0gJChHU1RfQkFTRV9DRkxBR1MpIC1JJCh0b3BfYnVpbGRkaXIpCi1HVEtET0NfTElCUyA9ICQoR1NUX0JBU0VfTElCUykKLQotIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMsIHBsYWNlIHRoZW0gaW4gdGhpcyBmaWxlCi0jIGFuZCB1bmNvbW1lbnQgdGhpcyBsaW5lLgotI0RPQ19PVkVSUklERVMgPSAkKERPQ19NT0RVTEUpLW92ZXJyaWRlcy50eHQKLURPQ19PVkVSUklERVMgPQotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5pbiBiL2RvY3MvcGx1Z2lucy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM0ZjlkZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMzYwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIHRoaXMgc25pcHBldCBpcyB0byBiZSBpbmNsdWRlZCBieSBib3RoIG91ciBkb2Nib29rIG1hbnVhbHMKLSMgYW5kIGd0ay1kb2MgQVBJIHJlZmVyZW5jZXMKLQotIyBpdCBhZGRzIGFuIHVwbG9hZCB0YXJnZXQgdG8gZWFjaCBvZiB0aGVzZSBkaXIncyBNYWtlZmlsZXMKLQotIyBlYWNoIE1ha2VmaWxlLmFtIHNob3VsZCBkZWZpbmUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0jIC0gRE9DOiB0aGUgYmFzZSBuYW1lIG9mIHRoZSBkb2N1bWVudGF0aW9uCi0jICAgICAgICAoZmFxLCBtYW51YWwsIHB3ZywgZ3N0cmVhbWVyLCBnc3RyZWFtZXItbGlicykKLSMgLSBGT1JNQVRTOiB0aGUgZm9ybWF0cyBpbiB3aGljaCBET0MgaXMgb3V0cHV0Ci0jICAgICAgICAgICAgKGh0bWwgcHMgcGRmKQotCi0jIGlmIHlvdSB3YW50IHRvIHVzZSBpdCwgbWFrZSBzdXJlIHlvdXIgJEhPTUUvLnNzaC9jb25maWcgZmlsZSBjb250YWlucyB0aGUKLSMgY29ycmVjdCBVc2VyIGVudHJ5IGZvciB0aGUgSG9zdCBlbnRyeSBmb3IgdGhlIERPQ19TRVJWRVIKLQotIyBUaGlzIGlzIGFuIGluY2x1ZGUgZmlsZSBzcGVjaWZpY2FsbHkgdHVuZWQgZm9yIGJ1aWxkaW5nIGRvY3VtZW50YXRpb24KLSMgZm9yIEdTdHJlYW1lciBwbHVnLWlucwotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZG9jcy9wbHVnaW5zCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9ndGstZG9jLXBsdWdpbnMubWFrIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi91cGxvYWQtZG9jLm1hawotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotR1NUX0RPQ19TQ0FOT0JKID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0ZG9jLXNjYW5nb2JqCi0KLSMgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwgZS5nLiAnZ2xpYicuCi0jRE9DX01PRFVMRT1nc3QtcGx1Z2lucy1saWJzLUBHU1RfQVBJX1ZFUlNJT05ACi1NT0RVTEUgPSBnc3QtcGx1Z2lucy1nb29kCi1ET0NfTU9EVUxFID0gJChNT0RVTEUpLXBsdWdpbnMKLQotIyBmb3IgdXBsb2FkLWRvYy5tYWsKLURPQyA9ICQoTU9EVUxFKS1wbHVnaW5zCi1GT1JNQVRTID0gaHRtbAotCi0jIHRoZXNlIHZhcmlhYmxlcyBkZWZpbmUgdGhlIGxvY2F0aW9uIG9mIHRoZSBvbmxpbmUgZG9jcwotRE9DX1NFUlZFUiA9IGdzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcKLURPQ19CQVNFID0gL3Nydi9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3d3dy9kYXRhL2RvYwotRE9DX1VSTCA9ICQoRE9DX1NFUlZFUik6JChET0NfQkFTRSkKLQotIyBUaGUgdG9wLWxldmVsIFNHTUwgZmlsZS4gQ2hhbmdlIGl0IGlmIHlvdSB3YW50LgotRE9DX01BSU5fU0dNTF9GSUxFID0gJChET0NfTU9EVUxFKS1kb2NzLnNnbWwKLQotIyBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBjb2RlLgotIyBndGstZG9jIHdpbGwgc2VhcmNoIGFsbCAuYyAmIC5oIGZpbGVzIGJlbmVhdGggaGVyZSBmb3IgaW5saW5lIGNvbW1lbnRzCi0jIGRvY3VtZW50aW5nIGZ1bmN0aW9ucyBhbmQgbWFjcm9zLgotRE9DX1NPVVJDRV9ESVIgPSAkKHRvcF9zcmNkaXIpL2dzdCAkKHRvcF9zcmNkaXIpL2V4dCAkKHRvcF9zcmNkaXIpL3N5cwotCi0jIEV4dHJhIG9wdGlvbnMgdG8gc3VwcGx5IHRvIGd0a2RvYy1zY2FuLgotU0NBTl9PUFRJT05TID0gCi0KLSMgRXh0cmEgb3B0aW9ucyB0byBzdXBwbHkgdG8gZ3RrZG9jLW1rZGIuCi1NS0RCX09QVElPTlMgPSAtLXNnbWwtbW9kZSAtLXNvdXJjZS1zdWZmaXhlcz1jLGgsY2MKLQotIyBFeHRyYSBvcHRpb25zIHRvIHN1cHBseSB0byBndGtkb2MtZml4cmVmLgotRklYWFJFRl9PUFRJT05TID0gLS1leHRyYS1kaXI9JChHTElCX1BSRUZJWCkvc2hhcmUvZ3RrLWRvYy9odG1sIFwKLQktLWV4dHJhLWRpcj0kKEdTVF9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbCBcCi0JLS1leHRyYS1kaXI9JChHU1RQQl9QUkVGSVgpL3NoYXJlL2d0ay1kb2MvaHRtbAotCi0KLSMgVXNlZCBmb3IgZGVwZW5kZW5jaWVzLgotSEZJTEVfR0xPQiA9IFwKLSAgJCh0b3Bfc3JjZGlyKS9nc3QvKi8qLmggJCh0b3Bfc3JjZGlyKS9leHQvKi8qLmggJCh0b3Bfc3JjZGlyKS9zeXMvKi8qLmgKLQotQ0ZJTEVfR0xPQiA9IFwKLSAgJCh0b3Bfc3JjZGlyKS9nc3QvKi8qLmMgJCh0b3Bfc3JjZGlyKS9leHQvKi8qLmMgJCh0b3Bfc3JjZGlyKS9zeXMvKi8qLmMgXAotICAkKHRvcF9zcmNkaXIpL2V4dC8qLyouY2MgJCh0b3Bfc3JjZGlyKS9zeXMvKi8qLm0KLQotCi0jIEhlYWRlciBmaWxlcyB0byBpZ25vcmUgd2hlbiBzY2FubmluZy4KLUlHTk9SRV9IRklMRVMgPSAKLUlHTk9SRV9DRklMRVMgPSAKLQotIyB3ZSBhZGQgYWxsIC5oIGZpbGVzIG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSBzaWduYWxzL2FyZ3Mgd2Ugd2FudAotIyBzYWRseSB0aGlzIGFsc28gcHVsbHMgaW4gdGhlIHByaXZhdGUgbWV0aG9kcyAtIG1heWJlIHdlIHNob3VsZAotIyBtb3ZlIHRob3NlIGFyb3VuZCBpbiB0aGUgc291cmNlID8KLSMgYWxzbywgd2Ugc2hvdWxkIGFkZCBzb21lIHN0dWZmIGhlcmUgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB3aGV0aGVyCi0jIG9yIG5vdCB0aGUgcGx1Z2luIHdpbGwgYWN0dWFsbHkgYnVpbGQKLSMgYnV0IEknbSBub3Qgc3VyZSBhYm91dCB0aGF0IC0gaXQgbWlnaHQgYmUgdGhpcyBKdXN0IFdvcmtzIGdpdmVuIHRoYXQKLSMgdGhlIHJlZ2lzdHJ5IHdvbid0IGhhdmUgdGhlIGVsZW1lbnQKLUVYVFJBX0hGSUxFUyA9IFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9hYWxpYi9nc3RhYXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmggXAotCSQodG9wX3NyY2RpcikvZXh0L2R2L2dzdGR2ZGVjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2R2L2dzdGR2ZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvZmxhYy9nc3RmbGFjZGVjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9mbGFjL2dzdGZsYWN0YWcuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9qcGVnL2dzdGpwZWdkZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvanBlZy9nc3RqcGVnZW5jLmggXAotCSQodG9wX3NyY2RpcikvZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvbGlicG5nL2dzdHBuZ2RlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9saWJwbmcvZ3N0cG5nZW5jLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9zaG91dDIvZ3N0c2hvdXQyLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvdGFnbGliL2dzdGFwZXYybXV4LmggXAotCSQodG9wX3NyY2RpcikvZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC9wdWxzZS9wdWxzZXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvcHVsc2UvcHVsc2VzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvc3BlZXgvZ3N0c3BlZXhlbmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvc3BlZXgvZ3N0c3BlZXhkZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9leHQvdnB4L2dzdHZwOGRlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC92cHgvZ3N0dnA4ZW5jLmggXAotCSQodG9wX3NyY2RpcikvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYWxwaGEvZ3N0YWxwaGEuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2VjaG8uaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2R5bmFtaWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2ludmVydC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNiYW5kLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdXBhcnNlL2dzdGF1cGFyc2UuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdmkvZ3N0YXZpZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvYXZpL2dzdGF2aW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9hdmkvZ3N0YXZpc3VidGl0bGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvY3V0dGVyL2dzdGN1dHRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9kdG1mL2dzdGR0bWZzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZHRtZi9nc3RydHBkdG1mc3JjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2R0bWYvZ3N0cnRwZHRtZmRlcGF5LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZWZmZWN0di9nc3RkaWNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lZmZlY3R2L2dzdHF1YXJrLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0cmV2LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lZmZlY3R2L2dzdHZlcnRpZ28uaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZWZmZWN0di9nc3R3YXJwLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0c3RyZWFrLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VmZmVjdHYvZ3N0b3AuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZWZmZWN0di9nc3RyYWRpb2FjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2Zsdi9nc3RmbHZkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9mbHYvZ3N0Zmx2bXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2ZseC9nc3RmbHhkZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvZ29vbS9nc3Rnb29tLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2dvb20yazEvZ3N0Z29vbS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9sYXcvYWxhdy1kZWNvZGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbGF3L2FsYXctZW5jb2RlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbGF3L211bGF3LWVuY29kZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pY3lkZW11eC9nc3RpY3lkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pZDNkZW11eC9nc3RpZDNkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pbWFnZWZyZWV6ZS9nc3RpbWFnZWZyZWV6ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbGV2ZWwvZ3N0bGV2ZWwuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L21hdHJvc2thL3dlYm0tbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2lzb21wNC9xdGRlbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L2lzb21wNC9nc3RxdG11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3J0cC9nc3RydHBqMmtwYXkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwL2dzdHJ0cGpwZWdwYXkuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHNwL2dzdHJ0cGRlYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9ydHNwL2dzdHJ0c3BzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9zbXB0ZS9nc3RzbXB0ZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC9zbXB0ZS9nc3RzbXB0ZWFscGhhLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvdWRwL2dzdHVkcHNyYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC91ZHAvZ3N0dWRwc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmggXAotCSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjJwYWQuaCBcCi0JJCh0b3Bfc3JjZGlyKS9nc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oIFwKLQkkKHRvcF9zcmNkaXIpL2dzdC95NG0vZ3N0eTRtZW5jb2RlLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy9vc3M0L29zczQtc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy9vc3M0L29zczQtc291cmNlLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL29zcy9nc3Rvc3NzaW5rLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL29zcy9nc3Rvc3NzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy92NGwyL2dzdHY0bDJzcmMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvdjRsMi9nc3R2NGwyc2luay5oIFwKLQkkKHRvcF9zcmNkaXIpL3N5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvdjRsMi9nc3R2NGwycmFkaW8uaCBcCi0JJCh0b3Bfc3JjZGlyKS9zeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmggXAotCSQodG9wX3NyY2Rpcikvc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaAotCi0KLSMgZXhhbXBsZSBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHhtbCBhbmQgcGxhY2VkIGluIHhtbC8KLUVYQU1QTEVfQ0ZJTEVTID0gXAotCSQodG9wX3NyY2RpcikvdGVzdHMvZXhhbXBsZXMvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jIFwKLQkkKHRvcF9zcmNkaXIpL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL3NwZWN0cnVtLWV4YW1wbGUuYyBcCi0JJCh0b3Bfc3JjZGlyKS90ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L2ZpcmZpbHRlci1leGFtcGxlLmMgXAotCSQodG9wX3NyY2RpcikvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9paXJmaWx0ZXItZXhhbXBsZS5jCi0KLQotIyBJbWFnZXMgdG8gY29weSBpbnRvIEhUTUwgZGlyZWN0b3J5LgotSFRNTF9JTUFHRVMgPSAKLQotIyBFeHRyYSBTR01MIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5ICQoRE9DX01BSU5fU0dNTF9GSUxFKS4KLWNvbnRlbnRfZmlsZXMgPSAKLQotIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlLgotZXh0cmFfZmlsZXMgPSAKLQotIyBDRkxBR1MgYW5kIExERkxBR1MgZm9yIGNvbXBpbGluZyBzY2FuIHByb2dyYW0uIE9ubHkgbmVlZGVkIGlmIHlvdXIgYXBwL2xpYgotIyBjb250YWlucyBHdGtPYmplY3RzL0dPYmplY3RzIGFuZCB5b3Ugd2FudCB0byBkb2N1bWVudCBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzLgotR1RLRE9DX0NGTEFHUyA9ICQoR1NUX0JBU0VfQ0ZMQUdTKSAtSSQodG9wX2J1aWxkZGlyKQotR1RLRE9DX0xJQlMgPSAkKEdTVF9CQVNFX0xJQlMpCi0KLSMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zLCBwbGFjZSB0aGVtIGluIHRoaXMgZmlsZQotIyBhbmQgdW5jb21tZW50IHRoaXMgbGluZS4KLSNET0NfT1ZFUlJJREVTID0gJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0Ci1ET0NfT1ZFUlJJREVTID0gCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRUBHVEtET0NfQ0MgPSAkKENDKSAkKElOQ0xVREVTKSAkKEdUS0RPQ19ERVBTX0NGTEFHUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRUBHVEtET0NfQ0MgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoSU5DTFVERVMpICQoR1RLRE9DX0RFUFNfQ0ZMQUdTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9GQUxTRUBHVEtET0NfTEQgPSAkKENDKSAkKEdUS0RPQ19ERVBTX0xJQlMpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpCi1AR1RLX0RPQ19VU0VfTElCVE9PTF9UUlVFQEdUS0RPQ19MRCA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykgJChHVEtET0NfREVQU19MSUJTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKQotQEdUS19ET0NfVVNFX0xJQlRPT0xfRkFMU0VAR1RLRE9DX1JVTiA9IAotQEdUS19ET0NfVVNFX0xJQlRPT0xfVFJVRUBHVEtET0NfUlVOID0gJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQotCi0jIFdlIHNldCBHUEFUSCBoZXJlOyB0aGlzIGdpdmVzIHVzIHNlbWFudGljcyBmb3IgR05VIG1ha2UKLSMgd2hpY2ggYXJlIG1vcmUgbGlrZSBvdGhlciBtYWtlJ3MgVlBBVEgsIHdoZW4gaXQgY29tZXMgdG8KLSMgd2hldGhlciBhIHNvdXJjZSB0aGF0IGlzIGEgdGFyZ2V0IG9mIG9uZSBydWxlIGlzIHRoZW4KLSMgc2VhcmNoZWQgZm9yIGluIFZQQVRIL0dQQVRILgotIwotR1BBVEggPSAkKHNyY2RpcikKLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZQotVEFSR0VUX0RJUiA9ICQoSFRNTF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAKLU1BSU5UQUlORVJfRE9DX1NUQU1QUyA9IFwKLQlzY2Fub2JqLWJ1aWxkLnN0YW1wCi0KLUVYVFJBX0RJU1QgPSBcCi0JJChNQUlOVEFJTkVSX0RPQ19TVEFNUFMpCQlcCi0JJChzcmNkaXIpL2luc3BlY3QvKi54bWwJCVwKLQkkKFNDQU5PQkpfRklMRVMpCQlcCi0JJChjb250ZW50X2ZpbGVzKQkJXAotCSQoZXh0cmFfZmlsZXMpCQkJXAotCSQoSFRNTF9JTUFHRVMpCQkJXAotCSQoRE9DX01BSU5fU0dNTF9GSUxFKQlcCi0JJChET0NfT1ZFUlJJREVTKQkJXAotCSQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0Ci0KLQotIyB3ZSBkb24ndCBhZGQgc2Nhbm9iai1idWlsZC5zdGFtcCBoZXJlIHNpbmNlIHRoZXkgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGRvY3MKLSMgbWFpbnRhaW5lcnMgYW5kIHJlc3VsdCBpcyBjb21taXRlZCB0byBnaXQKLURPQ19TVEFNUFMgPSBcCi0Jc2Nhbi1idWlsZC5zdGFtcAkJXAotCXNnbWwtYnVpbGQuc3RhbXAJCVwKLQlodG1sLWJ1aWxkLnN0YW1wCQlcCi0Jc2Nhbi5zdGFtcAkJCVwKLQlzZ21sLnN0YW1wCQkJXAotCWh0bWwuc3RhbXAKLQotCi0jIGZpbGVzIGdlbmVyYXRlZC91cGRhdGVkIGJ5IGd0a2RvYy1zY2FuZ29iagotU0NBTk9CSl9GSUxFUyA9IFwKLQkkKERPQ19NT0RVTEUpLmFyZ3MgICAgICAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLmhpZXJhcmNoeSAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLmludGVyZmFjZXMgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgICAgIFwKLQkkKERPQ19NT0RVTEUpLnNpZ25hbHMgICAgICAgICAgIFwKLQkkKERPQ19NT0RVTEUpLnR5cGVzCi0KLVNDQU5PQkpfRklMRVNfTyA9IFwKLQkubGlicy8kKERPQ19NT0RVTEUpLXNjYW4ubwotCi0KLSMgZmlsZXMgZ2VuZXJhdGVkL3VwZGF0ZWQgYnkgZ3RrZG9jLXNjYW4KLVNDQU5fRklMRVMgPSBcCi0JJChET0NfTU9EVUxFKS1zZWN0aW9ucy50eHQJXAotCSQoRE9DX01PRFVMRSktb3ZlcnJpZGVzLnR4dAlcCi0JJChET0NfTU9EVUxFKS1kZWNsLnR4dAkJXAotCSQoRE9DX01PRFVMRSktZGVjbC1saXN0LnR4dAotCi1SRVBPUlRfRklMRVMgPSBcCi0JJChET0NfTU9EVUxFKS11bmRvY3VtZW50ZWQudHh0IFwKLQkkKERPQ19NT0RVTEUpLXVuZGVjbGFyZWQudHh0IFwKLQkkKERPQ19NT0RVTEUpLXVudXNlZC50eHQKLQotQ0xFQU5GSUxFUyA9IFwKLQkkKFNDQU5PQkpfRklMRVNfTykgXAotCSQoUkVQT1JUX0ZJTEVTKSBcCi0JJChET0NfU1RBTVBTKSBcCi0JaW5zcGVjdC1yZWdpc3RyeS54bWwKLQotSU5TUEVDVF9ESVIgPSBpbnNwZWN0Ci0KLSMjIyBpbnNwZWN0IEdTdHJlYW1lciBwbHVnLWluczsgZG9uZSBieSBkb2N1bWVudGF0aW9uIG1haW50YWluZXIgIyMjCi0KLSMgb25seSBsb29rIGF0IHRoZSBwbHVnaW5zIGluIHRoaXMgbW9kdWxlIHdoZW4gYnVpbGRpbmcgaW5zcGVjdCAueG1sIHN0dWZmCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBJTlNQRUNUX1JFR0lTVFJZID0gJCh0b3BfYnVpbGRkaXIpL2RvY3MvcGx1Z2lucy9pbnNwZWN0LXJlZ2lzdHJ5LnhtbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVASU5TUEVDVF9FTlZJUk9OTUVOVCA9IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlMQ19BTEw9QyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlHU1RfUExVR0lOX1BBVEhfMV8wPSQodG9wX2J1aWxkZGlyKS9nc3Q6JCh0b3BfYnVpbGRkaXIpL3N5czokKHRvcF9idWlsZGRpcikvZXh0OiQodG9wX2J1aWxkZGlyKS9wbHVnaW5zOiQodG9wX2J1aWxkZGlyKS9zcmM6JCh0b3BfYnVpbGRkaXIpL2dubCBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJR1NUX1JFR0lTVFJZXzFfMD0kKElOU1BFQ1RfUkVHSVNUUlkpIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlQS0dfQ09ORklHX1BBVEg9IiQoR1NUX1BLR19DT05GSUdfUEFUSCkiIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkkKElOU1BFQ1RfRVhUUkFfRU5WSVJPTk1FTlQpCi0KLU1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChNQUlOVEFJTkVSX0RPQ19TVEFNUFMpCi0KLSMgd2lsZGNhcmQgaXMgYXBwYXJlbnRseSBub3QgcG9ydGFibGUgdG8gb3RoZXIgbWFrZXMsIGhlbmNlIHRoZSB1c2Ugb2YgZmluZAotaW5zcGVjdF9maWxlcyA9ICQoc2hlbGwgZmluZCAkKHNyY2RpcikvJChJTlNQRUNUX0RJUikgLW5hbWUgJyoueG1sJykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vdXBsb2FkLWRvYy5tYWsgJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3RrLWRvYy1wbHVnaW5zLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBkb2NzL3BsdWdpbnMvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZG9jcy9wbHVnaW5zL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL3VwbG9hZC1kb2MubWFrICQodG9wX3NyY2RpcikvY29tbW9uL2d0ay1kb2MtcGx1Z2lucy5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi10YWdzIFRBR1M6Ci0KLWN0YWdzIENUQUdTOgotCi1jc2NvcGUgY3Njb3BlbGlzdDoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKLQkgIGRpc3QtaG9vawotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlIGFsbC1sb2NhbAotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi0JLXRlc3QgLXogIiQoTUFJTlRBSU5FUkNMRUFORklMRVMpIiB8fCBybSAtZiAkKE1BSU5UQUlORVJDTEVBTkZJTEVTKQotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxvY2FsCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtZGF0YS1sb2NhbAotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1sb2NhbAotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogYWxsIGFsbC1hbSBhbGwtbG9jYWwgY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3QtaG9vayBcCi0JZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi1sb2NhbCBcCi0JZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBcCi0JaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBcCi0JaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKLQlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCi0JaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWxvY2FsCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotaHRtbDogaHRtbC1idWlsZC5zdGFtcAotCi11cGxvYWQ6ICQoRk9STUFUUykKLQlAaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBodG1sID4gL2Rldi9udWxsOyB0aGVuIFwKLQkgIGVjaG8gIlByZXBhcmluZyBkb2NzIGZvciB1cGxvYWQgKHJlYmFzaW5nIGNyb3NzLXJlZmVyZW5jZXMpIC4uLiIgOyBcCi0JICBpZiB0ZXN0IHgkKGJ1aWxkZGlyKSAhPSB4JChzcmNkaXIpOyB0aGVuIFwKLQkgICAgZWNobyAibWFrZSB1cGxvYWQgY2FuIG9ubHkgYmUgdXNlZCBpZiBzcmNkaXIgPT0gYnVpbGRkaXIiOyBcCi0JICAgIGV4aXQgMTsgXAotCSAgZmk7IFwKLQkgICMgZ3RrZG9jLXJlYmFzZSBzb21ldGltZXMgZ2V0cyBjb25mdXNlZCwgc28gcmVzZXQgZXZlcnl0aGluZyB0byBcCi0JICAjIGxvY2FsIGxpbmtzIGJlZm9yZSByZWJhc2luZyB0byBvbmxpbmUgbGlua3MgICAgICAgICAgICAgICAgICAgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgMj4vZGV2L251bGwgMj4vZGV2L251bGwgOyBcCi0JICByZWJhc2U9YGd0a2RvYy1yZWJhc2UgLS12ZXJib3NlIC0tb25saW5lIC0taHRtbC1kaXI9JChidWlsZGRpcikvaHRtbGAgOyBcCi0JICBlY2hvICIkJHJlYmFzZSIgfCBncmVwIC1lICJPbi0qbGluZSI7IFwKLQkgIGZvciByZXEgaW4gZ2xpYiBnb2JqZWN0IGdzdHJlYW1lciBnc3RyZWFtZXItbGlicyBnc3QtcGx1Z2lucy1iYXNlLWxpYnM7IGRvIFwKLQkgICAgaWYgISAoIGVjaG8gIiQkcmViYXNlIiB8IGdyZXAgLWkgLWUgIk9uLSpsaW5lLiovJCRyZXEvIiApOyB0aGVuIFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBlY2hvICIgQ291bGQgbm90IGRldGVybWluZSBvbmxpbmUgbG9jYXRpb24gZm9yICQkcmVxIGRvY3MuIENyb3NzLXJlZmVyZW5jaW5nIHdpbGwgYmUgIiA7IFwKLQkgICAgICBlY2hvICIgYnJva2VuLCBzbyBub3QgdXBsb2FkaW5nLiBNYWtlIHN1cmUgdGhlIGxpYnJhcnkncyBndGstZG9jIGRvY3VtZW50YXRpb24gaXMgICAgIiA7IFwKLQkgICAgICBlY2hvICIgaW5zdGFsbGVkIHNvbWV3aGVyZSBpbiAvdXNyL3NoYXJlL2d0ay1kb2MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA7IFwKLQkgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiA7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQkgIGV4cG9ydCBTUkM9IiQkU1JDIGh0bWwiOyBcCi0JZmk7IFwKLQlpZiBlY2hvICQoRk9STUFUUykgfCBncmVwIHBzID4gL2Rldi9udWxsOyB0aGVuIGV4cG9ydCBTUkM9IiQkU1JDICQoRE9DKS5wcyI7IGZpOyBcCi0JaWYgZWNobyAkKEZPUk1BVFMpIHwgZ3JlcCBwZGYgPiAvZGV2L251bGw7IHRoZW4gZXhwb3J0IFNSQz0iJCRTUkMgJChET0MpLnBkZiI7IGZpOyBcCi0JXAotCSMgdXBsb2FkIHJlbGVhc2VzIHRvIGJvdGggWC5ZLyBhbmQgaGVhZC8gc3ViZGlyZWN0b3JpZXMgXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyLyQoUEFDS0FHRV9WRVJTSU9OX01BSk9SKS4kKFBBQ0tBR0VfVkVSU0lPTl9NSU5PUikvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWV4cG9ydCBESVI9JChET0NfQkFTRSkvZ3N0cmVhbWVyL2hlYWQvJChET0MpOyBcCi0JZWNobyBVcGxvYWRpbmcgJCRTUkMgdG8gJChET0NfU0VSVkVSKTokJERJUjsgXAotCXNzaCAkKERPQ19TRVJWRVIpIG1rZGlyIC1wICQkRElSOyBcCi0JcnN5bmMgLXJ2IC1lIHNzaCAtLWRlbGV0ZSAkJFNSQyAkKERPQ19TRVJWRVIpOiQkRElSOyBcCi0Jc3NoICQoRE9DX1NFUlZFUikgY2htb2QgLVIgZyt3ICQkRElSOyBcCi0JXAotCWlmIGVjaG8gJChGT1JNQVRTKSB8IGdyZXAgaHRtbCA+IC9kZXYvbnVsbDsgdGhlbiBcCi0JICBlY2hvICJVbi1wcmVwYXJpbmcgZG9jcyBmb3IgdXBsb2FkIChyZWJhc2luZyBjcm9zcy1yZWZlcmVuY2VzKSAuLi4iIDsgXAotCSAgZ3RrZG9jLXJlYmFzZSAtLWh0bWwtZGlyPSQoYnVpbGRkaXIpL2h0bWwgOyBcCi0JZmk7IFwKLQllY2hvIERvbmUKLQotaGVscDoKLQlAZWNobwotCUBlY2hvICJJZiB5b3UgYXJlIGEgZG9jIG1haW50YWluZXIsIHJ1biAnbWFrZSB1cGRhdGUnIHRvIHVwZGF0ZSIKLQlAZWNobyAidGhlIGRvY3VtZW50YXRpb24gZmlsZXMgbWFpbnRhaW5lZCBpbiBnaXQiCi0JQGVjaG8KLQlAZWNobyBPdGhlciB1c2VmdWwgbWFrZSB0YXJnZXRzOgotCUBlY2hvCi0JQGVjaG8gIGNoZWNrLWluc3BlY3RlZC12ZXJzaW9uczogbWFrZSBzdXJlIHRoZSBpbnNwZWN0ZWQgcGx1Z2luIGluZm8KLQlAZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1cCB0byBkYXRlIGJlZm9yZSBhIHJlbGVhc2UKLQlAZWNobwotCi0jIHVwZGF0ZSB0aGUgc3R1ZmYgbWFpbnRhaW5lZCBieSBkb2MgbWFpbnRhaW5lcnMKLXVwZGF0ZTogc2Nhbm9iai11cGRhdGUKLQkkKE1BS0UpIGNoZWNrLW91dGRhdGVkLWRvY3MKLQotQEVOQUJMRV9HVEtfRE9DX1RSVUVAYWxsLWxvY2FsOiBodG1sLWJ1aWxkLnN0YW1wCi0KLSMjIyMgc2NhbiBnb2JqZWN0czsgZG9uZSBieSBkb2N1bWVudGF0aW9uIG1haW50YWluZXIgIyMjIwotQEVOQUJMRV9HVEtfRE9DX1RSVUVAc2Nhbm9iai11cGRhdGU6Ci1ARU5BQkxFX0dUS19ET0NfVFJVRUAJLXJtIHNjYW5vYmotYnVpbGQuc3RhbXAKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkkKE1BS0UpIHNjYW5vYmotYnVpbGQuc3RhbXAKLQotIyBnc3Rkb2Mtc2Nhbm9iaiBwcm9kdWNlcyA1IG91dHB1dCBmaWxlcyAoLm5ldykKLSMgc2NhbmdvYmotbWVyZ2UucHkgbWVyZ2VzIHRoZW0gaW50byB0aGUgZmlsZSB3aGljaCB3ZSBjb21taXQgbGF0ZXIKLSMgVE9ETzogYWxzbyBtZXJnZSB0aGUgaGllcmFyY2h5Ci1ARU5BQkxFX0dUS19ET0NfVFJVRUBzY2Fub2JqLWJ1aWxkLnN0YW1wOiAkKFNDQU5PQkpfREVQUykgJChiYXNlZmlsZXMpCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGVjaG8gIiAgRE9DICAgSW50cm9zcGVjdGluZyBnb2JqZWN0cyIKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKSAkKFNDQU5fRklMRVMpOwkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG8JCQkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGlmIHRlc3QgLWUgJChzcmNkaXIpLyQkZjsgdGhlbiBjcCAtdSAkKHNyY2RpcikvJCRmIC4gOyBmaTsJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkb25lOwkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7CQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJbWtkaXIgLXAgJChJTlNQRUNUX0RJUik7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlzY2Fub2JqX29wdGlvbnM9IiI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlpZiB0ZXN0ICJ4JChWKSIgPSAieDEiOyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgc2Nhbm9ial9vcHRpb25zPSItLXZlcmJvc2UiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkkKElOU1BFQ1RfRU5WSVJPTk1FTlQpIAkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUNDPSIkKEdUS0RPQ19DQykiIExEPSIkKEdUS0RPQ19MRCkiIFJVTj0iJChHVEtET0NfUlVOKSIJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUNGTEFHUz0iJChHVEtET0NfQ0ZMQUdTKSAkKENGTEFHUykgJChXQVJOSU5HX0NGTEFHUykiCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlMREZMQUdTPSIkKEdUS0RPQ19MSUJTKSAkKExERkxBR1MpIgkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJJChHU1RfRE9DX1NDQU5PQkopICQkc2Nhbm9ial9vcHRpb25zIC0tdHlwZS1pbml0LWZ1bmM9ImdzdF9pbml0KE5VTEwsTlVMTCkiCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLXNvdXJjZT0kKFBBQ0tBR0UpIC0taW5zcGVjdC1kaXI9JChJTlNQRUNUX0RJUikgJiYJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZWNobyAiICBET0MgICBNZXJnaW5nIGludHJvc3BlY3Rpb24gZGF0YSIgJiYgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAkKFBZVEhPTikJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQodG9wX3NyY2RpcikvY29tbW9uL3NjYW5nb2JqLW1lcmdlLnB5ICQoRE9DX01PRFVMRSkgfHwgZXhpdCAxOwlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCB4IiQoc3JjZGlyKSIgIT0geC4gOyB0aGVuCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZm9yIGYgaW4gJChTQ0FOT0JKX0ZJTEVTKTsJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZG8JCQkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgIGNtcCAtcyAuLyQkZiAkKHNyY2RpcikvJCRmIHx8IGNwIC4vJCRmICQoc3JjZGlyKS8gOwkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkb25lOwkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7CQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJdG91Y2ggc2Nhbm9iai1idWlsZC5zdGFtcAotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAkKERPQ19NT0RVTEUpLWRlY2wudHh0ICQoU0NBTk9CSl9GSUxFUykgJChTQ0FOT0JKX0ZJTEVTX08pOiBzY2FuLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRydWUKLQotIyMjIHNjYW4gaGVhZGVyczsgZG9uZSBvbiBldmVyeSBidWlsZCAjIyMKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQHNjYW4tYnVpbGQuc3RhbXA6ICQoSEZJTEVfR0xPQikgJChFWFRSQV9IRklMRVMpICQoYmFzZWZpbGVzKSBzY2Fub2JqLWJ1aWxkLnN0YW1wCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGVjaG8gJyAgRE9DICAgU2Nhbm5pbmcgaGVhZGVyIGZpbGVzJwotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBpZiB0ZXN0IHgiJChzcmNkaXIpIiAhPSB4LiA7IHRoZW4JCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBmb3IgZiBpbiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUyk7CQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBkbwkJCQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAgICAgaWYgdGVzdCAtZSAkKHNyY2RpcikvJCRmOyB0aGVuIGNwIC11ICQoc3JjZGlyKS8kJGYgLiA7IGZpOwlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGRvbmU7CQkJCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlmaQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBfc291cmNlX2Rpcj0nJyA7CQkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZvciBpIGluICQoRE9DX1NPVVJDRV9ESVIpIDsgZG8JCQkJCVwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgX3NvdXJjZV9kaXI9IiQke19zb3VyY2VfZGlyfSAtLXNvdXJjZS1kaXI9JCRpIiA7CSAgICAgICAgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWRvbmUgOwkJCQkJCQkgICAgICAgIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlndGtkb2Mtc2NhbgkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQoU0NBTl9PUFRJT05TKSAkKEVYVFJBX0hGSUxFUykJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAtLW1vZHVsZT0kKERPQ19NT0RVTEUpCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgICQke19zb3VyY2VfZGlyfSAgICAgICAgICAgICAJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICAtLWlnbm9yZS1oZWFkZXJzPSIkKElHTk9SRV9IRklMRVMpIjsJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJdG91Y2ggc2Nhbi1idWlsZC5zdGFtcAotCi0jIyMjIHhtbCAjIyMjCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQHNnbWwtYnVpbGQuc3RhbXA6IHNjYW4tYnVpbGQuc3RhbXAgJChDRklMRV9HTE9CKSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wbHVnaW5zLnhzbCAkKGV4cGFuZF9jb250ZW50X2ZpbGVzKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBlY2hvICcgIERPQyAgIEJ1aWxkaW5nIFhNTCcKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlALW1rZGlyIC1wIHhtbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBmb3IgYSBpbiAkKGluc3BlY3RfZmlsZXMpOyBkbyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHhzbHRwcm9jIC0tc3RyaW5ncGFyYW0gbW9kdWxlICQoTU9EVUxFKSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJCSQodG9wX3NyY2RpcikvY29tbW9uL3BsdWdpbnMueHNsICQkYSA+IHhtbC9gYmFzZW5hbWUgJCRhYDsgZG9uZQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBmb3IgZiBpbiAkKEVYQU1QTEVfQ0ZJTEVTKTsgZG8gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQkkKFBZVEhPTikgJCh0b3Bfc3JjZGlyKS9jb21tb24vYy10by14bWwucHkgJCRmID4geG1sL2VsZW1lbnQtYGJhc2VuYW1lICQkZiAuY2AueG1sOyBkb25lCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQF9zb3VyY2VfZGlyPScnIDsJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZm9yIGkgaW4gJChET0NfU09VUkNFX0RJUikgOyBkbwkJCQkJXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgICBfc291cmNlX2Rpcj0iJCR7X3NvdXJjZV9kaXJ9IC0tc291cmNlLWRpcj0kJGkiIDsJICAgICAgICBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZG9uZSA7CQkJCQkJCQlcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZ3RrZG9jLW1rZGIgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLW1vZHVsZT0kKERPQ19NT0RVTEUpIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJJCR7X3NvdXJjZV9kaXJ9IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkJIC0tZXhwYW5kLWNvbnRlbnQtZmlsZXM9IiQoZXhwYW5kX2NvbnRlbnRfZmlsZXMpIiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJCS0tbWFpbi1zZ21sLWZpbGU9JChzcmNkaXIpLyQoRE9DX01BSU5fU0dNTF9GSUxFKSBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJCS0tb3V0cHV0LWZvcm1hdD14bWwgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACQktLWlnbm9yZS1maWxlcz0iJChJR05PUkVfSEZJTEVTKSAkKElHTk9SRV9DRklMRVMpIiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJCSQoTUtEQl9PUFRJT05TKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUAkKFBZVEhPTikgJCh0b3Bfc3JjZGlyKS9jb21tb24vbWFuZ2xlLWRiLnB5IHhtbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIHhtbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBzZ21sLWJ1aWxkLnN0YW1wCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQHNnbWwuc3RhbXA6IHNnbWwtYnVpbGQuc3RhbXAKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAdHJ1ZQotCi0jIyMjIGh0bWwgIyMjIwotCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBodG1sLWJ1aWxkLnN0YW1wOiBzZ21sLnN0YW1wICQoRE9DX01BSU5fU0dNTF9GSUxFKSAkKGNvbnRlbnRfZmlsZXMpCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGVjaG8gJyAgRE9DICAgQnVpbGRpbmcgSFRNTCcKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtkaXIgaHRtbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAkKHNyY2RpcikvJChET0NfTUFJTl9TR01MX0ZJTEUpIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZm9yIGYgaW4gJChjb250ZW50X2ZpbGVzKTsgZG8gY3AgJChzcmNkaXIpLyQkZiBodG1sOyBkb25lCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGNwIC1wciB4bWwgaHRtbAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBjcCAuLi92ZXJzaW9uLmVudGl0aWVzIGh0bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAbWtodG1sX29wdGlvbnM9IiI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlndGtkb2MtbWtodG1sIDI+JjEgLS1oZWxwIHwgZ3JlcCAgPi9kZXYvbnVsbCAiXC1cLXZlcmJvc2UiOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJaWYgdGVzdCAiJCg/KSIgPSAiMCI7IHRoZW4gXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACSAgaWYgdGVzdCAieCQoVikiID0gIngxIjsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIG1raHRtbF9vcHRpb25zPSIkJG1raHRtbF9vcHRpb25zIC0tdmVyYm9zZSI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgIGZpOyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJZmk7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAljZCBodG1sICYmIGd0a2RvYy1ta2h0bWwgJCRta2h0bWxfb3B0aW9ucyAkKERPQ19NT0RVTEUpLUBHU1RfQVBJX1ZFUlNJT05AICQoRE9DX01BSU5fU0dNTF9GSUxFKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtZiBodG1sLyQoRE9DX01BSU5fU0dNTF9GSUxFKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUBybSAtcmYgaHRtbC94bWwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLWYgaHRtbC92ZXJzaW9uLmVudGl0aWVzCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQHRlc3QgIngkKEhUTUxfSU1BR0VTKSIgPSAieCIgfHwgZm9yIGkgaW4gIiIgJChIVE1MX0lNQUdFUykgOyBkbyBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIGlmIHRlc3QgIiQkaSIgIT0gIiI7IHRoZW4gY3AgJChzcmNkaXIpLyQkaSBodG1sIDsgZmk7IGRvbmUKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZWNobyAnICBET0MgICBGaXhpbmcgY3Jvc3MtcmVmZXJlbmNlcycKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAZ3RrZG9jLWZpeHhyZWYgLS1tb2R1bGU9JChET0NfTU9EVUxFKSAtLW1vZHVsZS1kaXI9aHRtbCAtLWh0bWwtZGlyPSQoSFRNTF9ESVIpICQoRklYWFJFRl9PUFRJT05TKQotQEVOQUJMRV9HVEtfRE9DX1RSVUVACUB0b3VjaCBodG1sLWJ1aWxkLnN0YW1wCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGNsZWFuLWxvY2FsLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAlAcm0gLXJmIHhtbCB0bXBsIGh0bWwKLSMgY2xlYW4gZmlsZXMgY29waWVkIGZvciBub25zcmNkaXIgdGVtcGxhdGVzIGJ1aWxkCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIHRlc3QgeCIkKHNyY2RpcikiICE9IHguIDsgdGhlbiBcCi1ARU5BQkxFX0dUS19ET0NfVFJVRUAJICAgIHJtIC1yZiAkKFNDQU5PQkpfRklMRVMpICQoU0NBTl9GSUxFUykgJChSRVBPUlRfRklMRVMpIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgICAgICQoTUFJTlRBSU5FUl9ET0NfU1RBTVBTKTsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpCi1ARU5BQkxFX0dUS19ET0NfRkFMU0VAYWxsLWxvY2FsOgotQEVOQUJMRV9HVEtfRE9DX0ZBTFNFQGNsZWFuLWxvY2FsLWd0a2RvYzoKLQotY2xlYW4tbG9jYWw6IGNsZWFuLWxvY2FsLWd0a2RvYwotCUBybSAtZiAqfiAqLmJhawotCUBybSAtcmYgLmxpYnMKLQotZGlzdGNsZWFuLWxvY2FsOgotCUBybSAtZiAkKFJFUE9SVF9GSUxFUykgXAotCSAgICAgICAgJChET0NfTU9EVUxFKS1kZWNsLWxpc3QudHh0ICQoRE9DX01PRFVMRSktZGVjbC50eHQKLQlAcm0gLXJmIHRtcGwvKi5zZ21sLmJhawotCUBybSAtZiAkKERPQ19NT0RVTEUpLmhpZXJhcmNoeQotCUBybSAtZiAqLnN0YW1wIHx8IHRydWUKLQlAaWYgdGVzdCAiJChhYnNfc3JjZGlyKSIgIT0gIiQoYWJzX2J1aWxkZGlyKSIgOyB0aGVuIFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1kb2NzLnNnbWwgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSkudHlwZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSkuaW50ZXJmYWNlcyA7IFwKLQkgICAgcm0gLWYgJChET0NfTU9EVUxFKS1vdmVycmlkZXMudHh0IDsgXAotCSAgICBybSAtZiAkKERPQ19NT0RVTEUpLnByZXJlcXVpc2l0ZXMgOyBcCi0JICAgIHJtIC1mICQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0IDsgXAotCSAgICBybSAtcmYgdG1wbC8qLnNnbWwgOyBcCi0JICAgIHJtIC1yZiAkKElOU1BFQ1RfRElSKTsgXAotCWZpCi0JQHJtIC1yZiAqLm8KLQotIyB0aG9tYXM6IG1ha2UgZG9jcyBwYXJhbGxlbCBpbnN0YWxsYWJsZTsgZGV2aGVscCByZXF1aXJlcyBtYWpvcm1pbm9yIHRvbwotaW5zdGFsbC1kYXRhLWxvY2FsOgotCShpbnN0YWxsZmlsZXM9YGVjaG8gJChidWlsZGRpcikvaHRtbC8qLnNnbWwgJChidWlsZGRpcikvaHRtbC8qLmh0bWwgJChidWlsZGRpcikvaHRtbC8qLnBuZyAkKGJ1aWxkZGlyKS9odG1sLyouY3NzYDsgXAotCWlmIHRlc3QgIiQkaW5zdGFsbGZpbGVzIiA9ICckKGJ1aWxkZGlyKS9odG1sLyouc2dtbCAkKGJ1aWxkZGlyKS9odG1sLyouaHRtbCAkKGJ1aWxkZGlyKS9odG1sLyoucG5nICQoYnVpbGRkaXIpL2h0bWwvKi5jc3MnOyBcCi0JdGhlbiBlY2hvICctLSBOb3RoaW5nIHRvIGluc3RhbGwnIDsgXAotCWVsc2UgXAotCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAotCSAgZm9yIGkgaW4gJCRpbnN0YWxsZmlsZXM7IGRvIFwKLQkgICAgZWNobyAnLS0gSW5zdGFsbGluZyAnJCRpIDsgXAotCSAgICAkKElOU1RBTExfREFUQSkgJCRpICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyBcCi0JICBkb25lOyBcCi0JICBwbmdmaWxlcz1gZWNobyAuL2h0bWwvKi5wbmdgOyBcCi0JICBpZiB0ZXN0ICIkJHBuZ2ZpbGVzIiAhPSAnLi9odG1sLyoucG5nJzsgdGhlbiBcCi0JICAgIGZvciBpIGluICQkcG5nZmlsZXM7IGRvIFwKLQkgICAgICBlY2hvICctLSBJbnN0YWxsaW5nICckJGkgOyBcCi0JICAgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKERFU1RESVIpJChUQVJHRVRfRElSKTsgXAotCSAgICBkb25lOyBcCi0JICBmaTsgXAotCSAgZWNobyAnLS0gSW5zdGFsbGluZyAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAuZGV2aGVscDInIDsgXAotCSAgaWYgdGVzdCAtZSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAuZGV2aGVscDI7IHRoZW4gXAotCSAgICAgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKGJ1aWxkZGlyKS9odG1sLyQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAuZGV2aGVscDIgXAotCSAgICAgICAgICAgICQoREVTVERJUikkKFRBUkdFVF9ESVIpLyQoRE9DX01PRFVMRSktQEdTVF9BUElfVkVSU0lPTkAuZGV2aGVscDI7IFwKLQkgIGZpOyBcCi0JICAkKEdUS0RPQ19SRUJBU0UpIC0tcmVsYXRpdmUgLS1kZXN0LWRpcj0kKERFU1RESVIpIC0taHRtbC1kaXI9JChERVNURElSKSQoVEFSR0VUX0RJUikgfHwgdHJ1ZSA7IFwKLQlmaSkKLXVuaW5zdGFsbC1sb2NhbDoKLQlpZiB0ZXN0IC1kICQoREVTVERJUikkKFRBUkdFVF9ESVIpOyB0aGVuIFwKLQkgIHJtIC1yZiAkKERFU1RESVIpJChUQVJHRVRfRElSKS8qOyBcCi0JICBybWRpciAtcCAkKERFU1RESVIpJChUQVJHRVRfRElSKSAyPi9kZXYvbnVsbCB8fCB0cnVlOyBcCi0JZWxzZSBcCi0JICBlY2hvICctLSBOb3RoaW5nIHRvIHVuaW5zdGFsbCcgOyBcCi0JZmk7Ci0KLSMKLSMgQ2hlY2tzCi0jCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBjaGVjay1oaWVyYXJjaHk6ICQoRE9DX01PRFVMRSkuaGllcmFyY2h5Ci1ARU5BQkxFX0dUS19ET0NfVFJVRUAJQGlmIGdyZXAgJwknICQoRE9DX01PRFVMRSkuaGllcmFyY2h5OyB0aGVuIFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgZWNobyAiJChET0NfTU9EVUxFKS5oaWVyYXJjaHkgY29udGFpbnMgdGFicywgcGxlYXNlIGZpeCI7IFwKLUBFTkFCTEVfR1RLX0RPQ19UUlVFQAkgICAgL2Jpbi9mYWxzZTsgXAotQEVOQUJMRV9HVEtfRE9DX1RSVUVACWZpCi0KLUBFTkFCTEVfR1RLX0RPQ19UUlVFQGNoZWNrOiBjaGVjay1oaWVyYXJjaHkKLQotY2hlY2staW5zcGVjdGVkLXZlcnNpb25zOgotCUBlY2hvIENoZWNraW5nIHBsdWdpbiB2ZXJzaW9ucyBvZiBpbnNwZWN0ZWQgcGx1Z2luIGRhdGEgLi4uOyBcCi0JZmFpbD0wIDsgXAotCWZvciBlYWNoIGluICQoaW5zcGVjdF9maWxlcykgOyBkbyBcCi0JICBpZiAoZ3JlcCAtSCAnPHZlcnNpb24+JyAkJGVhY2ggfCBncmVwIC12ICc8dmVyc2lvbj4kKFZFUlNJT04pJyk7IHRoZW4gXAotCSAgICBlY2hvICQkZWFjaCBzaG91bGQgYmUgZml4ZWQgdG8gc2F5IHZlcnNpb24gJChWRVJTSU9OKSBvciBiZSByZW1vdmVkIDsgXAotCSAgICBlY2hvICJzZWQgLWkgLWUgJ3MvPHZlcnNpb24uKnZlcnNpb24+Lzx2ZXJzaW9uPiQoVkVSU0lPTik8XC92ZXJzaW9uPi8nIiAkJGVhY2g7IFwKLQkgICAgZWNobyA7IFwKLQkgICAgZmFpbD0xOyBcCi0JICBmaSA7IFwKLQlkb25lIDsgXAotCWV4aXQgJCRmYWlsCi0KLWNoZWNrLW91dGRhdGVkLWRvY3M6Ci0JJChBTV9WX0dFTillY2hvIENoZWNraW5nIGZvciBvdXRkYXRlZCBwbHVnaW4gaW5zcGVjdCBkYXRhIC4uLjsgXAotCWZhaWw9MCA7IFwKLQlpZiBbIC1kICQodG9wX3NyY2RpcikvLmdpdC8gXTsgdGhlbiBcCi0JICBmaWxlcz1gZmluZCAkKHNyY2RpcikvaW5zcGVjdC8gLW5hbWUgJyp4bWwnYDsgXAotCSAgZm9yIGYgaW4gJCRmaWxlczsgZG8gXAotCSAgICB2ZXI9YGdyZXAgJzx2ZXJzaW9uPiQoUEFDS0FHRV9WRVJTSU9OKTwvdmVyc2lvbj4nICQkZmA7IFwKLQkgICAgaWYgdGVzdCAieCQkdmVyIiA9ICJ4IjsgdGhlbiBcCi0JICAgICAgcGx1Z2luPWBlY2hvICQkZiB8IHNlZCAtZSAncy9eLipwbHVnaW4tLy8nIC1lICdzLy54bWwvLydgOyBcCi0JICAgICAgIyBlY2hvICJDaGVja2luZyAkJHBsdWdpbiAkJGYiOyBcCi0JICAgICAgcHVzaGQgIiQodG9wX3NyY2RpcikiID4vZGV2L251bGw7IFwKLQkgICAgICBwaW5pdD1gZ2l0IGdyZXAgLUEzIEdTVF9QTFVHSU5fREVGSU5FIC0tIGV4dC8gZ3N0LyBzeXMvIHwgZ3JlcCAiXCIkJHBsdWdpblwiImA7IFwKLQkgICAgICBwb3BkID4vZGV2L251bGw7IFwKLQkgICAgICAjIGVjaG8gIlskJHBpbml0XSI7IFwKLQkgICAgICBpZiB0ZXN0ICJ4JCRwaW5pdCIgPSAieCI7IHRoZW4gXAotCSAgICAgICAgcHJpbnRmICIgKioqKiBvdXRkYXRlZCBkb2NzIGZvciBwbHVnaW4gJS0xNXM6ICVzXG4iICQkcGx1Z2luICQkZjsgXAotCSAgICAgICAgZmFpbD0xOyBcCi0JICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQlmaSA7IFwKLQlleGl0ICQkZmFpbAotCi0jCi0jIFJlcXVpcmUgZ3RrLWRvYyB3aGVuIG1ha2luZyBkaXN0Ci0jCi1ARU5BQkxFX0dUS19ET0NfVFJVRUBkaXN0LWNoZWNrLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUBkaXN0LWNoZWNrLWd0a2RvYzoKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGVjaG8gIioqKiBndGstZG9jIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBlbmFibGVkIGluIG9yZGVyIHRvIG1ha2UgZGlzdCIKLUBFTkFCTEVfR1RLX0RPQ19GQUxTRUAJQGZhbHNlCi0KLSMgRklYTUU6IGRlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gZGlzdCBnZW5lcmF0ZWQgaHRtbCBvciBub3QKLSMgYWxzbyB0aGlzIG9ubHkgd29ya3MsIGlmIHRoZSBwcm9qZWN0IGhhcyBiZWVuIGJ1aWxkIGJlZm9yZQotIyB3ZSBjb3VsZCBkaXN0IGh0bWwgb25seSBpZiBpdHMgdGhlcmUsIGJ1dCB0aGF0IG1pZ2h0IGxlYWQgdG8gbWlzc2luZyBodG1sIGluCi0jIHRhcmJhbGxzCi1kaXN0LWhvb2s6IGRpc3QtY2hlY2stZ3RrZG9jIGRpc3QtaG9vay1sb2NhbAotCW1rZGlyICQoZGlzdGRpcikvaHRtbAotCWNwIGh0bWwvKiAkKGRpc3RkaXIpL2h0bWwKLQktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSkudHlwZXMgJChkaXN0ZGlyKS8KLQktY3AgJChzcmNkaXIpLyQoRE9DX01PRFVMRSktc2VjdGlvbnMudHh0ICQoZGlzdGRpcikvCi0JY2QgJChkaXN0ZGlyKSAmJiBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQotCS1ndGtkb2MtcmViYXNlIC0tb25saW5lIC0tcmVsYXRpdmUgLS1odG1sLWRpcj0kKGRpc3RkaXIpL2h0bWwKLQotLlBIT05ZIDogZGlzdC1ob29rLWxvY2FsIGRvY3MgY2hlY2stb3V0ZGF0ZWQtZG9jcyBpbnNwZWN0Ci0KLSMgYXZvaWQgc3B1cmlvdXMgYnVpbGQgZXJyb3JzIHdoZW4gZGlzdGNoZWNraW5nIHdpdGggLWpOCi0uTk9UUEFSQUxMRUw6Ci0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZG9jcy5zZ21sIGIvZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMGJlNjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kb2NzLnNnbWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgCi0gICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiIFsKLTwhRU5USVRZICUgbG9jYWwuY29tbW9uLmF0dHJpYiAieG1sbnM6eGkgIENEQVRBICAjRklYRUQgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUnIj4KLTwhRU5USVRZICUgdmVyc2lvbi1lbnRpdGllcyBTWVNURU0gInZlcnNpb24uZW50aXRpZXMiPgotJXZlcnNpb24tZW50aXRpZXM7Ci1dPgotCi08Ym9vayBpZD0iaW5kZXgiIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAzL1hJbmNsdWRlIj4KLSAgPGJvb2tpbmZvPgotICAgIDx0aXRsZT5HU3RyZWFtZXIgR29vZCBQbHVnaW5zICZHU1RfQVBJX1ZFUlNJT047IFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci0gICAgPHJlbGVhc2VpbmZvPgotICAgICAgZm9yIEdTdHJlYW1lciBHb29kIFBsdWdpbnMgJkdTVF9BUElfVkVSU0lPTjsgKCZHU1RfVkVSU0lPTjspCi0gICAgICBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBvbi1saW5lIGF0Ci0gICAgICA8dWxpbmsgcm9sZT0ib25saW5lLWxvY2F0aW9uIiB1cmw9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWdvb2QvaHRtbC8iPmh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWdvb2QvaHRtbC88L3VsaW5rPi4KLSAgICA8L3JlbGVhc2VpbmZvPgotICA8L2Jvb2tpbmZvPgotCi0gIDxjaGFwdGVyPgotICAgIDx0aXRsZT5nc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzPC90aXRsZT4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC0zZ3BwbXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hYWNwYXJzZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYWFzaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hYzNwYXJzZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYWdpbmd0di54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYWxhd2RlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYWxhd2VuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYWxwaGFjb2xvci54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYWxwaGEueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWFtcnBhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hcGVkZW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXBldjJtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWFzcGVjdHJhdGlvY3JvcC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXN0ZXJpc2toMjYzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdWRpb2FtcGxpZnkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF1ZGlvY2hlYmJhbmQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF1ZGlvY2hlYmxpbWl0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdWRpb2R5bmFtaWMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF1ZGlvZWNoby54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXVkaW9maXJmaWx0ZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF1ZGlvaWlyZmlsdGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdWRpb2ludmVydC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXVkaW9rYXJhb2tlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdWRpb3Bhbm9yYW1hLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdWRpb3dzaW5jYmFuZC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXVkaW93c2luY2xpbWl0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdXBhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdXRvYXVkaW9zaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1hdXRvYXVkaW9zcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF1dG92aWRlb3NpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF1dG92aWRlb3NyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXZpZGVtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWF2aW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtYXZpc3VidGl0bGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWJyZWFrbXlkYXRhLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1jYWNhc2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtY2Fpcm9vdmVybGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1jYXBzc2V0dGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1jcHVyZXBvcnQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWN1dHRlci54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZGNhcGFyc2UueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWRlaW50ZXJsYWNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1kZWludGVybGVhdmUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWRpY2V0di54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZGlyZWN0c291bmRzaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1kdG1mc3JjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1kdjEzOTRzcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWR2ZGVjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1kdmRlbXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1keW51ZHBzaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1lZGdldHYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWVxdWFsaXplci0xMGJhbmRzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1lcXVhbGl6ZXItM2JhbmRzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1lcXVhbGl6ZXItbmJhbmRzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1maXJmaWx0ZXItZXhhbXBsZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmxhY2RlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmxhY2VuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmxhY3BhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mbGFjdGFnLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mbHZkZW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtZmx2bXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1mbHhkZWMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWdhbW1hLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1nZGtwaXhidWZkZWMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWdka3BpeGJ1Zm92ZXJsYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWdka3BpeGJ1ZnNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWdvb20yazEueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWdvb20ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWhkdjEzOTRzcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWljeWRlbXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1pZDNkZW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtaWQzdjJtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWlpcmVxdWFsaXplci54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtaWlyZmlsdGVyLWV4YW1wbGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWltYWdlZnJlZXplLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1pbnRlcmxlYXZlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1pc21sbXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1qYWNrYXVkaW9zaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1qYWNrYXVkaW9zcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWpwZWdkZWMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWpwZWdlbmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWxldmVsLWV4YW1wbGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LWxldmVsLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tYXRyb3NrYWRlbXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tYXRyb3NrYW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtbWF0cm9za2FwYXJzZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtbWoybXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tb25vc2NvcGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LW1wNG11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtbXBlZ2F1ZGlvcGFyc2UueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LW11bGF3ZGVjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tdWxhd2VuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtbXVsdGlmaWxlc2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtbXVsdGlmaWxlc3JjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tdWx0aXBhcnRkZW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtbXVsdGlwYXJ0bXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1tdWx0aXVkcHNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LW5hdmlnYXRpb250ZXN0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1uYXZzZWVrLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1vcHR2LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1vc3M0c2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtb3NzNHNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtb3Nzc2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtb3Nzc3JjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1vc3hhdWRpb3NpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LW9zeGF1ZGlvc3JjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1vc3h2aWRlb3NpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXBuZ2RlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcG5nZW5jLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1wcm9ncmVzc3JlcG9ydC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcHVsc2VzaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1wdWxzZXNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcHVzaGZpbGVzcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXF0ZGVtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXF0bW9vdnJlY292ZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXF0bXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1xdWFya3R2LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1yYWRpb2FjdHYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJldnR2LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1yZ2FuYWx5c2lzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1yZ2xpbWl0ZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJndm9sdW1lLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1yaXBwbGV0di54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcm5kYnVmZmVyc2l6ZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwYWMzZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGFjM3BheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwYW1yZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGFtcnBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwYmluLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBidmRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBidnBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwY2VsdGRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBjZWx0cGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBkZWMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGR0bWZkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZHRtZm11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZHRtZnNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZHZkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZHZwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGc3MjJkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZzcyMnBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZzcyM2RlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBnNzIzcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBnNzI2ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGc3MjZwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGc3MjlkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZzcyOXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZ3NtZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGdzbXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwZ3N0ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGdzdHBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwaDI2MWRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBoMjYxcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBoMjYzZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGgyNjNwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGgyNjNwZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGgyNjNwcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBoMjY0ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGgyNjRwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGgyNjVkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwaDI2NXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwaWxiY2RlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBpbGJjcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBqMmtkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwajJrcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBqaXR0ZXJidWZmZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGpwZWdkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwanBlZ3BheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwa2x2ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cGtsdnBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwTDE2ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cEwxNnBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwTDI0ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cEwyNHBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwbXAxc2RlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBtcDJ0ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cG1wMnRwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cG1wNGFkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwbXA0YXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwbXA0Z2RlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBtcDRncGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBtcDR2ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cG1wNHZwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cG1wYWRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBtcGFwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cG1wYXJvYnVzdGRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBtcHZkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwbXB2cGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cG9wdXNkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwb3B1c3BheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwcGNtYWRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBwY21hcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBwY211ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHBjbXVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHB0ZGVtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHFjZWxwZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHFkbTJkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwcnR4cXVldWUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHJ0eHJlY2VpdmUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHJ0eHNlbmQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHNiY2RlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBzYmNwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHNlc3Npb24ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHNpcmVuZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHNpcmVucGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBzcGVleGRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBzcGVleHBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwc3NyY2RlbXV4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBzdHJlYW1kZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwc3RyZWFtcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHBzdjN2ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHRoZW9yYWRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHB0aGVvcmFwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHZvcmJpc2RlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHB2b3JiaXNwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHZwOGRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHB2cDhwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHZwOWRlcGF5LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1ydHB2cDlwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0cHZyYXdkZXBheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRwdnJhd3BheS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtcnRweHF0ZGVwYXkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXJ0c3BzcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXNiY3BhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1zY2FsZXRlbXBvLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1zaGFnYWRlbGljdHYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXNoYXBld2lwZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc2hvdXQyc2VuZC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc21wdGVhbHBoYS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc21wdGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXNvdXBodHRwY2xpZW50c2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc291cGh0dHBzcmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXNwZWN0cnVtLWV4YW1wbGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXNwZWN0cnVtLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1zcGVleGRlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc3BlZXhlbmMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXNwbGl0ZmlsZXNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc3BsaXRtdXhzaW5rLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC1zcGxpdG11eHNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtc3RyZWFrdHYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXRhZ2luamVjdC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdGVzdHNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXVkcHNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXVkcHNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdjRsMnJhZGlvLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC12NGwyc2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdjRsMnNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdmVydGlnb3R2LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC12aWRlb2JhbGFuY2UueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZpZGVvYm94LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC12aWRlb2Nyb3AueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZpZGVvZmxpcC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdmlkZW9tZWRpYW4ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZpZGVvbWl4ZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZwOGRlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtdnA4ZW5jLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC12cDlkZWMueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXZwOWVuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtd2FycHR2LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC13YXZlZm9ybXNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9lbGVtZW50LXdhdmVuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtd2F2cGFja2RlYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtd2F2cGFja2VuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtd2F2cGFja3BhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC13YXZwYXJzZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQtd2VibW11eC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2VsZW1lbnQteGltYWdlc3JjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvZWxlbWVudC15NG1lbmMueG1sIiAvPgotICA8L2NoYXB0ZXI+Ci0KLSAgPGNoYXB0ZXI+Ci0gICAgPHRpdGxlPmdzdC1wbHVnaW5zLWdvb2QgUGx1Z2luczwvdGl0bGU+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi0xMzk0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWFhc2luay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1hbGF3LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWFscGhhY29sb3IueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tYWxwaGEueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tYXBldGFnLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWF1ZGlvZngueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tYXVkaW9wYXJzZXJzLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWF1cGFyc2UueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tYXV0b2RldGVjdC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1hdmkueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tY2FjYXNpbmsueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tY2Fpcm8ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tY3V0dGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWRlYnVnLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWRpcmVjdHNvdW5kLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWR0bWYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tZHYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tZWZmZWN0di54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1lcXVhbGl6ZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tZmxhYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1mbHYueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tZmx4ZGVjLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWdka3BpeGJ1Zi54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1nb29tMmsxLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWdvb20ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4taWN5ZGVtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4taWQzZGVtdXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4taW1hZ2VmcmVlemUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4taW50ZXJsZWF2ZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1pc29tcDQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tamFjay54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1qcGVnLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLWxldmVsLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLW1hdHJvc2thLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLW1vbm9zY29wZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1tdWxhdy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1tdWx0aWZpbGUueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tbXVsdGlwYXJ0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLW9zczQueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tb3NzYXVkaW8ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tb3N4YXVkaW8ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tb3N4dmlkZW8ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tcG5nLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXB1bHNlYXVkaW8ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1ydHBtYW5hZ2VyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXJ0cC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1ydHNwLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXNoYXBld2lwZS54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi1zaG91dDJzZW5kLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXNtcHRlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXNvdXAueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tc3BlY3RydW0ueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tc3BlZXgueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tdGFnbGliLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXVkcC54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi12aWRlbzRsaW51eDIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tdmlkZW9ib3gueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tdmlkZW9jcm9wLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXZpZGVvZmlsdGVyLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXZpZGVvbWl4ZXIueG1sIiAvPgotICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9wbHVnaW4tdnB4LnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXdhdmVmb3JtLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXdhdmVuYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi13YXZwYWNrLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXdhdnBhcnNlLnhtbCIgLz4KLSAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvcGx1Z2luLXhpbWFnZXNyYy54bWwiIC8+Ci0gICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL3BsdWdpbi15NG1lbmMueG1sIiAvPgotICA8L2NoYXB0ZXI+Ci08L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNlY3Rpb25zLnR4dCBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWMxYTE0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2VjdGlvbnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDI3NSArMCwwIEBACi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtM2dwcG11eDwvRklMRT4KLTxUSVRMRT4zZ3BwbXV4PC9USVRMRT4KLUdzdDNHUFBNdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0M0dQUE11eENsYXNzCi1HU1RfM19HUFBfTVVYCi1HU1RfM19HUFBfTVVYX0NBU1QKLUdTVF9JU18zX0dQUF9NVVgKLUdTVF8zX0dQUF9NVVhfQ0xBU1MKLUdTVF9JU18zX0dQUF9NVVhfQ0xBU1MKLUdTVF9UWVBFXzNfR1BQX01VWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF8zX2dwcF9tdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWFhc2luazwvRklMRT4KLTxUSVRMRT5hYXNpbms8L1RJVExFPgotR3N0QUFTaW5rCi1Hc3RBQVNpbmtEaXRoZXJlcnMKLUdzdEFBU2lua0RyaXZlcnMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QUFTaW5rQ2xhc3MKLUdTVF9BQV9TSU5LCi1HU1RfQUFfU0lOS19DQVNUCi1HU1RfSVNfQUFfU0lOSwotR1NUX0FBX1NJTktfQ0xBU1MKLUdTVF9JU19BQV9TSU5LX0NMQVNTCi1HU1RfVFlQRV9BQV9TSU5LCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2FhX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWFsYXdkZWM8L0ZJTEU+Ci08VElUTEU+YWxhd2RlYzwvVElUTEU+Ci1Hc3RBTGF3RGVjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEFMYXdEZWNDbGFzcwotR1NUX0FfTEFXX0RFQwotR1NUX0FfTEFXX0RFQ19DQVNUCi1HU1RfSVNfQV9MQVdfREVDCi1HU1RfQV9MQVdfREVDX0NMQVNTCi1HU1RfSVNfQV9MQVdfREVDX0NMQVNTCi1HU1RfVFlQRV9BX0xBV19ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYV9sYXdfZGVjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hbGF3ZW5jPC9GSUxFPgotPFRJVExFPmFsYXdlbmM8L1RJVExFPgotR3N0QUxhd0VuYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBTGF3RW5jQ2xhc3MKLUdTVF9BX0xBV19FTkMKLUdTVF9BX0xBV19FTkNfQ0FTVAotR1NUX0lTX0FfTEFXX0VOQwotR1NUX0FfTEFXX0VOQ19DTEFTUwotR1NUX0lTX0FfTEFXX0VOQ19DTEFTUwotR1NUX1RZUEVfQV9MQVdfRU5DCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2FfbGF3X2VuY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYWFjcGFyc2U8L0ZJTEU+Ci08VElUTEU+YWFjcGFyc2U8L1RJVExFPgotR3N0QWFjUGFyc2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QWFjUGFyc2VDbGFzcwotR1NUX0FBQ19QQVJTRQotR1NUX0FBQ19QQVJTRV9DQVNUCi1HU1RfSVNfQUFDX1BBUlNFCi1HU1RfQUFDX1BBUlNFX0NMQVNTCi1HU1RfSVNfQUFDX1BBUlNFX0NMQVNTCi1HU1RfVFlQRV9BQUNfUEFSU0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYWFjX3BhcnNlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hYzNwYXJzZTwvRklMRT4KLTxUSVRMRT5hYzNwYXJzZTwvVElUTEU+Ci1Hc3RBYzNQYXJzZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBYzNQYXJzZUNsYXNzCi1HU1RfQUMzX1BBUlNFCi1HU1RfQUMzX1BBUlNFX0NBU1QKLUdTVF9JU19BQzNfUEFSU0UKLUdTVF9BQzNfUEFSU0VfQ0xBU1MKLUdTVF9JU19BQzNfUEFSU0VfQ0xBU1MKLUdTVF9UWVBFX0FDM19QQVJTRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hYzNfcGFyc2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWFnaW5ndHY8L0ZJTEU+Ci08VElUTEU+YWdpbmd0djwvVElUTEU+Ci1Hc3RBZ2luZ1RWCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEFnaW5nVFZDbGFzcwotR1NUX0FHSU5HX1RWCi1HU1RfQUdJTkdfVFZfQ0FTVAotR1NUX0lTX0FHSU5HX1RWCi1HU1RfQUdJTkdfVFZfQ0xBU1MKLUdTVF9JU19BR0lOR19UVl9DTEFTUwotR1NUX1RZUEVfQUdJTkdfVFYKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYWdpbmdfdHZfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWFscGhhPC9GSUxFPgotPFRJVExFPmFscGhhPC9USVRMRT4KLUdzdEFscGhhCi1Hc3RBbHBoYU1ldGhvZAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBbHBoYUNsYXNzCi1HU1RfQUxQSEEKLUdTVF9BTFBIQV9DQVNUCi1HU1RfSVNfQUxQSEEKLUdTVF9BTFBIQV9DTEFTUwotR1NUX0lTX0FMUEhBX0NMQVNTCi1HU1RfVFlQRV9BTFBIQQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hbHBoYV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYWxwaGFjb2xvcjwvRklMRT4KLTxUSVRMRT5hbHBoYWNvbG9yPC9USVRMRT4KLUdzdEFscGhhQ29sb3IKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QWxwaGFDb2xvckNsYXNzCi1HU1RfQUxQSEFfQ09MT1IKLUdTVF9BTFBIQV9DT0xPUl9DQVNUCi1HU1RfSVNfQUxQSEFfQ09MT1IKLUdTVF9BTFBIQV9DT0xPUl9DTEFTUwotR1NUX0lTX0FMUEhBX0NPTE9SX0NMQVNTCi1HU1RfVFlQRV9BTFBIQV9DT0xPUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hbHBoYV9jb2xvcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYW1ycGFyc2U8L0ZJTEU+Ci08VElUTEU+YW1ycGFyc2U8L1RJVExFPgotR3N0QW1yUGFyc2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QW1yUGFyc2VDbGFzcwotR1NUX0FNUl9QQVJTRQotR1NUX0FNUl9QQVJTRV9DQVNUCi1HU1RfSVNfQU1SX1BBUlNFCi1HU1RfQU1SX1BBUlNFX0NMQVNTCi1HU1RfSVNfQU1SX1BBUlNFX0NMQVNTCi1HU1RfVFlQRV9BTVJfUEFSU0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYW1yX3BhcnNlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hcGVkZW11eDwvRklMRT4KLTxUSVRMRT5hcGVkZW11eDwvVElUTEU+Ci1Hc3RBcGVEZW11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBcGVEZW11eENsYXNzCi1HU1RfQVBFX0RFTVVYCi1HU1RfQVBFX0RFTVVYX0NBU1QKLUdTVF9JU19BUEVfREVNVVgKLUdTVF9BUEVfREVNVVhfQ0xBU1MKLUdTVF9JU19BUEVfREVNVVhfQ0xBU1MKLUdTVF9UWVBFX0FQRV9ERU1VWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hcGVfZGVtdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWFwZXYybXV4PC9GSUxFPgotPFRJVExFPmFwZXYybXV4PC9USVRMRT4KLUdzdEFwZXYyTXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEFwZXYyTXV4Q2xhc3MKLUdTVF9BUEVWMl9NVVgKLUdTVF9BUEVWMl9NVVhfQ0FTVAotR1NUX0lTX0FQRVYyX01VWAotR1NUX0FQRVYyX01VWF9DTEFTUwotR1NUX0lTX0FQRVYyX01VWF9DTEFTUwotR1NUX1RZUEVfQVBFVjJfTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2FwZXYyX211eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXNwZWN0cmF0aW9jcm9wPC9GSUxFPgotPFRJVExFPmFzcGVjdHJhdGlvY3JvcDwvVElUTEU+Ci1Hc3RBc3BlY3RSYXRpb0Nyb3AKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXNwZWN0UmF0aW9Dcm9wQ2xhc3MKLUdTVF9BU1BFQ1RfUkFUSU9fQ1JPUAotR1NUX0FTUEVDVF9SQVRJT19DUk9QX0NBU1QKLUdTVF9JU19BU1BFQ1RfUkFUSU9fQ1JPUAotR1NUX0FTUEVDVF9SQVRJT19DUk9QX0NMQVNTCi1HU1RfSVNfQVNQRUNUX1JBVElPX0NST1BfQ0xBU1MKLUdTVF9UWVBFX0FTUEVDVF9SQVRJT19DUk9QCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hc3Rlcmlza2gyNjM8L0ZJTEU+Ci08VElUTEU+YXN0ZXJpc2toMjYzPC9USVRMRT4KLUdzdEFzdGVyaXNraDI2MwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBc3Rlcmlza2gyNjNDbGFzcwotR1NUX0FTVEVSSVNLSDI2MwotR1NUX0FTVEVSSVNLSDI2M19DQVNUCi1HU1RfSVNfQVNURVJJU0tIMjYzCi1HU1RfQVNURVJJU0tIMjYzX0NMQVNTCi1HU1RfSVNfQVNURVJJU0tIMjYzX0NMQVNTCi1HU1RfVFlQRV9BU1RFUklTS0gyNjMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXN0ZXJpc2toMjYzX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hdXBhcnNlPC9GSUxFPgotPFRJVExFPmF1cGFyc2U8L1RJVExFPgotR3N0QXVQYXJzZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBdVBhcnNlQ2xhc3MKLUdTVF9BVV9QQVJTRQotR1NUX0FVX1BBUlNFX0NBU1QKLUdTVF9JU19BVV9QQVJTRQotR1NUX0FVX1BBUlNFX0NMQVNTCi1HU1RfSVNfQVVfUEFSU0VfQ0xBU1MKLUdTVF9UWVBFX0FVX1BBUlNFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2F1X3BhcnNlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hdWRpb2FtcGxpZnk8L0ZJTEU+Ci08VElUTEU+YXVkaW9hbXBsaWZ5PC9USVRMRT4KLUdzdEF1ZGlvQW1wbGlmeQotR3N0QXVkaW9BbXBsaWZ5Q2xpcHBpbmdNZXRob2QKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9BbXBsaWZ5Q2xhc3MKLUdTVF9BVURJT19BTVBMSUZZCi1HU1RfQVVESU9fQU1QTElGWV9DQVNUCi1HU1RfSVNfQVVESU9fQU1QTElGWQotR1NUX0FVRElPX0FNUExJRllfQ0xBU1MKLUdTVF9JU19BVURJT19BTVBMSUZZX0NMQVNTCi1HU1RfVFlQRV9BVURJT19BTVBMSUZZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2F1ZGlvX2FtcGxpZnlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWF1ZGlvY2hlYmJhbmQ8L0ZJTEU+Ci08VElUTEU+YXVkaW9jaGViYmFuZDwvVElUTEU+Ci1Hc3RBdWRpb0NoZWJCYW5kCi1Hc3RBdWRpb0NoZWJCYW5kTW9kZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBdWRpb0NoZWJCYW5kQ2xhc3MKLUdTVF9BVURJT19DSEVCX0JBTkQKLUdTVF9BVURJT19DSEVCX0JBTkRfQ0FTVAotR1NUX0lTX0FVRElPX0NIRUJfQkFORAotR1NUX0FVRElPX0NIRUJfQkFORF9DTEFTUwotR1NUX0lTX0FVRElPX0NIRUJfQkFORF9DTEFTUwotR1NUX1RZUEVfQVVESU9fQ0hFQl9CQU5ECi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2F1ZGlvX2NoZWJfYmFuZF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXVkaW9jaGVibGltaXQ8L0ZJTEU+Ci08VElUTEU+YXVkaW9jaGVibGltaXQ8L1RJVExFPgotR3N0QXVkaW9DaGViTGltaXQKLUdzdEF1ZGlvQ2hlYkxpbWl0TW9kZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBdWRpb0NoZWJMaW1pdENsYXNzCi1HU1RfQVVESU9fQ0hFQl9MSU1JVAotR1NUX0FVRElPX0NIRUJfTElNSVRfQ0FTVAotR1NUX0lTX0FVRElPX0NIRUJfTElNSVQKLUdTVF9BVURJT19DSEVCX0xJTUlUX0NMQVNTCi1HU1RfSVNfQVVESU9fQ0hFQl9MSU1JVF9DTEFTUwotR1NUX1RZUEVfQVVESU9fQ0hFQl9MSU1JVAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdWRpb19jaGViX2xpbWl0X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hdWRpb2R5bmFtaWM8L0ZJTEU+Ci08VElUTEU+YXVkaW9keW5hbWljPC9USVRMRT4KLUdzdEF1ZGlvRHluYW1pYwotR3N0QXVkaW9EeW5hbWljQ2hhcmFjdGVyaXN0aWNzCi1Hc3RBdWRpb0R5bmFtaWNNb2RlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEF1ZGlvRHluYW1pY0NsYXNzCi1HU1RfQVVESU9fRFlOQU1JQwotR1NUX0FVRElPX0RZTkFNSUNfQ0FTVAotR1NUX0lTX0FVRElPX0RZTkFNSUMKLUdTVF9BVURJT19EWU5BTUlDX0NMQVNTCi1HU1RfSVNfQVVESU9fRFlOQU1JQ19DTEFTUwotR1NUX1RZUEVfQVVESU9fRFlOQU1JQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdWRpb19keW5hbWljX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hdWRpb2VjaG88L0ZJTEU+Ci08VElUTEU+YXVkaW9lY2hvPC9USVRMRT4KLUdzdEF1ZGlvRWNobwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBdWRpb0VjaG9DbGFzcwotR1NUX0FVRElPX0VDSE8KLUdTVF9BVURJT19FQ0hPX0NBU1QKLUdTVF9JU19BVURJT19FQ0hPCi1HU1RfQVVESU9fRUNIT19DTEFTUwotR1NUX0lTX0FVRElPX0VDSE9fQ0xBU1MKLUdTVF9UWVBFX0FVRElPX0VDSE8KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXVkaW9fZWNob19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXVkaW9maXJmaWx0ZXI8L0ZJTEU+Ci08VElUTEU+YXVkaW9maXJmaWx0ZXI8L1RJVExFPgotR3N0QXVkaW9GSVJGaWx0ZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9GSVJGaWx0ZXJDbGFzcwotR1NUX0FVRElPX0ZJUl9GSUxURVIKLUdTVF9BVURJT19GSVJfRklMVEVSX0NBU1QKLUdTVF9JU19BVURJT19GSVJfRklMVEVSCi1HU1RfQVVESU9fRklSX0ZJTFRFUl9DTEFTUwotR1NUX0lTX0FVRElPX0ZJUl9GSUxURVJfQ0xBU1MKLUdTVF9UWVBFX0FVRElPX0ZJUl9GSUxURVIKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXVkaW9fZmlyX2ZpbHRlcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXVkaW9paXJmaWx0ZXI8L0ZJTEU+Ci08VElUTEU+YXVkaW9paXJmaWx0ZXI8L1RJVExFPgotR3N0QXVkaW9JSVJGaWx0ZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9JSVJGaWx0ZXJDbGFzcwotR1NUX0FVRElPX0lJUl9GSUxURVIKLUdTVF9BVURJT19JSVJfRklMVEVSX0NBU1QKLUdTVF9JU19BVURJT19JSVJfRklMVEVSCi1HU1RfQVVESU9fSUlSX0ZJTFRFUl9DTEFTUwotR1NUX0lTX0FVRElPX0lJUl9GSUxURVJfQ0xBU1MKLUdTVF9UWVBFX0FVRElPX0lJUl9GSUxURVIKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXVkaW9faWlyX2ZpbHRlcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXVkaW9pbnZlcnQ8L0ZJTEU+Ci08VElUTEU+YXVkaW9pbnZlcnQ8L1RJVExFPgotR3N0QXVkaW9JbnZlcnQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9JbnZlcnRDbGFzcwotR1NUX0FVRElPX0lOVkVSVAotR1NUX0FVRElPX0lOVkVSVF9DQVNUCi1HU1RfSVNfQVVESU9fSU5WRVJUCi1HU1RfQVVESU9fSU5WRVJUX0NMQVNTCi1HU1RfSVNfQVVESU9fSU5WRVJUX0NMQVNTCi1HU1RfVFlQRV9BVURJT19JTlZFUlQKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXVkaW9faW52ZXJ0X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hdWRpb2thcmFva2U8L0ZJTEU+Ci08VElUTEU+YXVkaW9rYXJhb2tlPC9USVRMRT4KLUdzdEF1ZGlvS2FyYW9rZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBdWRpb0thcmFva2VDbGFzcwotR1NUX0FVRElPX0tBUkFPS0UKLUdTVF9BVURJT19LQVJBT0tFX0NBU1QKLUdTVF9JU19BVURJT19LQVJBT0tFCi1HU1RfQVVESU9fS0FSQU9LRV9DTEFTUwotR1NUX0lTX0FVRElPX0tBUkFPS0VfQ0xBU1MKLUdTVF9UWVBFX0FVRElPX0tBUkFPS0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXVkaW9fa2FyYW9rZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXVkaW9wYW5vcmFtYTwvRklMRT4KLTxUSVRMRT5hdWRpb3Bhbm9yYW1hPC9USVRMRT4KLUdzdEF1ZGlvUGFub3JhbWEKLUdzdEF1ZGlvUGFub3JhbWFNZXRob2QKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9QYW5vcmFtYUNsYXNzCi1HU1RfQVVESU9fUEFOT1JBTUEKLUdTVF9BVURJT19QQU5PUkFNQV9DQVNUCi1HU1RfSVNfQVVESU9fUEFOT1JBTUEKLUdTVF9BVURJT19QQU5PUkFNQV9DTEFTUwotR1NUX0lTX0FVRElPX1BBTk9SQU1BX0NMQVNTCi1HU1RfVFlQRV9BVURJT19QQU5PUkFNQQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdWRpb19wYW5vcmFtYV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXVkaW93c2luY2JhbmQ8L0ZJTEU+Ci08VElUTEU+YXVkaW93c2luY2JhbmQ8L1RJVExFPgotR3N0QXVkaW9XU2luY0JhbmQKLUdzdEF1ZGlvV1NpbmNCYW5kTW9kZQotR3N0QXVkaW9XU2luY0JhbmRXaW5kb3cKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9XU2luY0JhbmRDbGFzcwotR1NUX0FVRElPX1dfU0lOQ19CQU5ECi1HU1RfQVVESU9fV19TSU5DX0JBTkRfQ0FTVAotR1NUX0lTX0FVRElPX1dfU0lOQ19CQU5ECi1HU1RfQVVESU9fV19TSU5DX0JBTkRfQ0xBU1MKLUdTVF9JU19BVURJT19XX1NJTkNfQkFORF9DTEFTUwotR1NUX1RZUEVfQVVESU9fV19TSU5DX0JBTkQKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXVkaW9fd19zaW5jX2JhbmRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWF1ZGlvd3NpbmNsaW1pdDwvRklMRT4KLTxUSVRMRT5hdWRpb3dzaW5jbGltaXQ8L1RJVExFPgotR3N0QXVkaW9XU2luY0xpbWl0Ci1Hc3RBdWRpb1dTaW5jTGltaXRNb2RlCi1Hc3RBdWRpb1dTaW5jTGltaXRXaW5kb3cKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXVkaW9XU2luY0xpbWl0Q2xhc3MKLUdTVF9BVURJT19XX1NJTkNfTElNSVQKLUdTVF9BVURJT19XX1NJTkNfTElNSVRfQ0FTVAotR1NUX0lTX0FVRElPX1dfU0lOQ19MSU1JVAotR1NUX0FVRElPX1dfU0lOQ19MSU1JVF9DTEFTUwotR1NUX0lTX0FVRElPX1dfU0lOQ19MSU1JVF9DTEFTUwotR1NUX1RZUEVfQVVESU9fV19TSU5DX0xJTUlUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2F1ZGlvX3dfc2luY19saW1pdF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXV0b2F1ZGlvc2luazwvRklMRT4KLTxUSVRMRT5hdXRvYXVkaW9zaW5rPC9USVRMRT4KLUdzdEF1dG9BdWRpb1NpbmsKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXV0b0F1ZGlvU2lua0NsYXNzCi1HU1RfQVVUT19BVURJT19TSU5LCi1HU1RfQVVUT19BVURJT19TSU5LX0NBU1QKLUdTVF9JU19BVVRPX0FVRElPX1NJTksKLUdTVF9BVVRPX0FVRElPX1NJTktfQ0xBU1MKLUdTVF9JU19BVVRPX0FVRElPX1NJTktfQ0xBU1MKLUdTVF9UWVBFX0FVVE9fQVVESU9fU0lOSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdXRvX2F1ZGlvX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWF1dG9hdWRpb3NyYzwvRklMRT4KLTxUSVRMRT5hdXRvYXVkaW9zcmM8L1RJVExFPgotR3N0QXV0b0F1ZGlvU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEF1dG9BdWRpb1NyY0NsYXNzCi1HU1RfQVVUT19BVURJT19TUkMKLUdTVF9BVVRPX0FVRElPX1NSQ19DQVNUCi1HU1RfSVNfQVVUT19BVURJT19TUkMKLUdTVF9BVVRPX0FVRElPX1NSQ19DTEFTUwotR1NUX0lTX0FVVE9fQVVESU9fU1JDX0NMQVNTCi1HU1RfVFlQRV9BVVRPX0FVRElPX1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdXRvX2F1ZGlvX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXV0b3ZpZGVvc2luazwvRklMRT4KLTxUSVRMRT5hdXRvdmlkZW9zaW5rPC9USVRMRT4KLUdzdEF1dG9WaWRlb1NpbmsKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXV0b1ZpZGVvU2lua0NsYXNzCi1HU1RfQVVUT19WSURFT19TSU5LCi1HU1RfQVVUT19WSURFT19TSU5LX0NBU1QKLUdTVF9JU19BVVRPX1ZJREVPX1NJTksKLUdTVF9BVVRPX1ZJREVPX1NJTktfQ0xBU1MKLUdTVF9JU19BVVRPX1ZJREVPX1NJTktfQ0xBU1MKLUdTVF9UWVBFX0FVVE9fVklERU9fU0lOSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdXRvX3ZpZGVvX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWF1dG92aWRlb3NyYzwvRklMRT4KLTxUSVRMRT5hdXRvdmlkZW9zcmM8L1RJVExFPgotR3N0QXV0b1ZpZGVvU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEF1dG9WaWRlb1NyY0NsYXNzCi1HU1RfQVVUT19WSURFT19TUkMKLUdTVF9BVVRPX1ZJREVPX1NSQ19DQVNUCi1HU1RfSVNfQVVUT19WSURFT19TUkMKLUdTVF9BVVRPX1ZJREVPX1NSQ19DTEFTUwotR1NUX0lTX0FVVE9fVklERU9fU1JDX0NMQVNTCi1HU1RfVFlQRV9BVVRPX1ZJREVPX1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9hdXRvX3ZpZGVvX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXZpZGVtdXg8L0ZJTEU+Ci08VElUTEU+YXZpZGVtdXg8L1RJVExFPgotR3N0QXZpRGVtdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXZpRGVtdXhDbGFzcwotR1NUX0FWSV9ERU1VWAotR1NUX0FWSV9ERU1VWF9DQVNUCi1HU1RfSVNfQVZJX0RFTVVYCi1HU1RfQVZJX0RFTVVYX0NMQVNTCi1HU1RfSVNfQVZJX0RFTVVYX0NMQVNTCi1HU1RfVFlQRV9BVklfREVNVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXZpX2RlbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1hdmltdXg8L0ZJTEU+Ci08VElUTEU+YXZpbXV4PC9USVRMRT4KLUdzdEF2aU11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RBdmlNdXhDbGFzcwotR1NUX0FWSV9NVVgKLUdTVF9BVklfTVVYX0NBU1QKLUdTVF9JU19BVklfTVVYCi1HU1RfQVZJX01VWF9DTEFTUwotR1NUX0lTX0FWSV9NVVhfQ0xBU1MKLUdTVF9UWVBFX0FWSV9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXZpX211eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtYXZpc3VidGl0bGU8L0ZJTEU+Ci08VElUTEU+YXZpc3VidGl0bGU8L1RJVExFPgotR3N0QXZpU3VidGl0bGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0QXZpU3VidGl0bGVDbGFzcwotR1NUX0FWSV9TVUJUSVRMRQotR1NUX0FWSV9TVUJUSVRMRV9DQVNUCi1HU1RfSVNfQVZJX1NVQlRJVExFCi1HU1RfQVZJX1NVQlRJVExFX0NMQVNTCi1HU1RfSVNfQVZJX1NVQlRJVExFX0NMQVNTCi1HU1RfVFlQRV9BVklfU1VCVElUTEUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfYXZpX3N1YnRpdGxlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1icmVha215ZGF0YTwvRklMRT4KLTxUSVRMRT5icmVha215ZGF0YTwvVElUTEU+Ci1Hc3RCcmVha015RGF0YQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RCcmVha015RGF0YUNsYXNzCi1HU1RfQlJFQUtfTVlfREFUQQotR1NUX0JSRUFLX01ZX0RBVEFfQ0FTVAotR1NUX0lTX0JSRUFLX01ZX0RBVEEKLUdTVF9CUkVBS19NWV9EQVRBX0NMQVNTCi1HU1RfSVNfQlJFQUtfTVlfREFUQV9DTEFTUwotR1NUX1RZUEVfQlJFQUtfTVlfREFUQQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9icmVha19teV9kYXRhX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1jYWNhc2luazwvRklMRT4KLTxUSVRMRT5jYWNhc2luazwvVElUTEU+Ci1Hc3RDQUNBU2luawotR3N0Q0FDQVNpbmtEaXRoZXJpbmcKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Q0FDQVNpbmtDbGFzcwotR1NUX0NBQ0FfU0lOSwotR1NUX0NBQ0FfU0lOS19DQVNUCi1HU1RfSVNfQ0FDQV9TSU5LCi1HU1RfQ0FDQV9TSU5LX0NMQVNTCi1HU1RfSVNfQ0FDQV9TSU5LX0NMQVNTCi1HU1RfVFlQRV9DQUNBX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfY2FjYV9zaW5rX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1jYWlyb292ZXJsYXk8L0ZJTEU+Ci08VElUTEU+Y2Fpcm9vdmVybGF5PC9USVRMRT4KLUdzdENhaXJvT3ZlcmxheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RDYWlyb092ZXJsYXlDbGFzcwotR1NUX0NBSVJPX09WRVJMQVkKLUdTVF9DQUlST19PVkVSTEFZX0NBU1QKLUdTVF9JU19DQUlST19PVkVSTEFZCi1HU1RfQ0FJUk9fT1ZFUkxBWV9DTEFTUwotR1NUX0lTX0NBSVJPX09WRVJMQVlfQ0xBU1MKLUdTVF9UWVBFX0NBSVJPX09WRVJMQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfY2Fpcm9fb3ZlcmxheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtY2Fwc3NldHRlcjwvRklMRT4KLTxUSVRMRT5jYXBzc2V0dGVyPC9USVRMRT4KLUdzdENhcHNTZXR0ZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Q2Fwc1NldHRlckNsYXNzCi1HU1RfQ0FQU19TRVRURVIKLUdTVF9DQVBTX1NFVFRFUl9DQVNUCi1HU1RfSVNfQ0FQU19TRVRURVIKLUdTVF9DQVBTX1NFVFRFUl9DTEFTUwotR1NUX0lTX0NBUFNfU0VUVEVSX0NMQVNTCi1HU1RfVFlQRV9DQVBTX1NFVFRFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9jYXBzX3NldHRlcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtY3B1cmVwb3J0PC9GSUxFPgotPFRJVExFPmNwdXJlcG9ydDwvVElUTEU+Ci1Hc3RDcHVSZXBvcnQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Q3B1UmVwb3J0Q2xhc3MKLUdTVF9DUFVfUkVQT1JUCi1HU1RfQ1BVX1JFUE9SVF9DQVNUCi1HU1RfSVNfQ1BVX1JFUE9SVAotR1NUX0NQVV9SRVBPUlRfQ0xBU1MKLUdTVF9JU19DUFVfUkVQT1JUX0NMQVNTCi1HU1RfVFlQRV9DUFVfUkVQT1JUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2NwdV9yZXBvcnRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWN1dHRlcjwvRklMRT4KLTxUSVRMRT5jdXR0ZXI8L1RJVExFPgotR3N0Q3V0dGVyCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEN1dHRlckNsYXNzCi1HU1RfQ1VUVEVSCi1HU1RfQ1VUVEVSX0NBU1QKLUdTVF9JU19DVVRURVIKLUdTVF9DVVRURVJfQ0xBU1MKLUdTVF9JU19DVVRURVJfQ0xBU1MKLUdTVF9UWVBFX0NVVFRFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9jdXR0ZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWRpcmVjdHNvdW5kc2luazwvRklMRT4KLTxUSVRMRT5kaXJlY3Rzb3VuZHNpbms8L1RJVExFPgotR3N0RGlyZWN0U291bmRTaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdERpcmVjdFNvdW5kU2lua0NsYXNzCi1HU1RfRElSRUNUU09VTkRfU0lOSwotR1NUX0RJUkVDVFNPVU5EX1NJTktfQ0xBU1MKLUdTVF9JU19ESVJFQ1RTT1VORF9TSU5LCi1HU1RfSVNfRElSRUNUU09VTkRfU0lOS19DTEFTUwotR1NUX1RZUEVfRElSRUNUU09VTkRfU0lOSwotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZ2V0X3R5cGUKLUdTVF9EU09VTkRfTE9DSwotR1NUX0RTT1VORF9VTkxPQ0sKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWR0bWZzcmM8L0ZJTEU+Ci08VElUTEU+ZHRtZnNyYzwvVElUTEU+Ci1Hc3REVE1GU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdERUTUZTcmNDbGFzcwotR1NUX0RUTUZfU1JDCi1HU1RfRFRNRl9TUkNfQ0FTVAotR1NUX0lTX0RUTUZfU1JDCi1HU1RfRFRNRl9TUkNfQ0xBU1MKLUdTVF9JU19EVE1GX1NSQ19DTEFTUwotR1NUX1RZUEVfRFRNRl9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZHRtZl9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWR2MTM5NHNyYzwvRklMRT4KLTxUSVRMRT5kdjEzOTRzcmM8L1RJVExFPgotR3N0RFYxMzk0U3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdERWMTM5NFNyY0NsYXNzCi1HU1RfRF9WMTM5NF9TUkMKLUdTVF9EX1YxMzk0X1NSQ19DQVNUCi1HU1RfSVNfRF9WMTM5NF9TUkMKLUdTVF9EX1YxMzk0X1NSQ19DTEFTUwotR1NUX0lTX0RfVjEzOTRfU1JDX0NMQVNTCi1HU1RfVFlQRV9EX1YxMzk0X1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9kX3YxMzk0X3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZHZkZWM8L0ZJTEU+Ci08VElUTEU+ZHZkZWM8L1RJVExFPgotR3N0RFZEZWMKLUdzdERWRGVjUXVhbGl0eUVudW0KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RFZEZWNDbGFzcwotR1NUX0RWX0RFQwotR1NUX0RWX0RFQ19DQVNUCi1HU1RfSVNfRFZfREVDCi1HU1RfRFZfREVDX0NMQVNTCi1HU1RfSVNfRFZfREVDX0NMQVNTCi1HU1RfVFlQRV9EVl9ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZHZfZGVjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1kdmRlbXV4PC9GSUxFPgotPFRJVExFPmR2ZGVtdXg8L1RJVExFPgotR3N0RFZEZW11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3REVkRlbXV4Q2xhc3MKLUdTVF9EVl9ERU1VWAotR1NUX0RWX0RFTVVYX0NBU1QKLUdTVF9JU19EVl9ERU1VWAotR1NUX0RWX0RFTVVYX0NMQVNTCi1HU1RfSVNfRFZfREVNVVhfQ0xBU1MKLUdTVF9UWVBFX0RWX0RFTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2R2X2RlbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1kY2FwYXJzZTwvRklMRT4KLTxUSVRMRT5kY2FwYXJzZTwvVElUTEU+Ci1Hc3REY2FQYXJzZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3REY2FQYXJzZUNsYXNzCi1HU1RfRENBX1BBUlNFCi1HU1RfRENBX1BBUlNFX0NBU1QKLUdTVF9JU19EQ0FfUEFSU0UKLUdTVF9EQ0FfUEFSU0VfQ0xBU1MKLUdTVF9JU19EQ0FfUEFSU0VfQ0xBU1MKLUdTVF9UWVBFX0RDQV9QQVJTRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9kY2FfcGFyc2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWRlaW50ZXJsYWNlPC9GSUxFPgotPFRJVExFPmRlaW50ZXJsYWNlPC9USVRMRT4KLUdzdERlaW50ZXJsYWNlCi1Hc3REZWludGVybGFjZUZpZWxkcwotR3N0RGVpbnRlcmxhY2VMb2NraW5nCi1Hc3REZWludGVybGFjZU1ldGhvZHMKLUdzdERlaW50ZXJsYWNlTW9kZXMKLUdzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RGVpbnRlcmxhY2VDbGFzcwotR1NUX0RFSU5URVJMQUNFCi1HU1RfREVJTlRFUkxBQ0VfQ0FTVAotR1NUX0lTX0RFSU5URVJMQUNFCi1HU1RfREVJTlRFUkxBQ0VfQ0xBU1MKLUdTVF9JU19ERUlOVEVSTEFDRV9DTEFTUwotR1NUX1RZUEVfREVJTlRFUkxBQ0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZGVpbnRlcmxhY2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWRlaW50ZXJsZWF2ZTwvRklMRT4KLTxUSVRMRT5kZWludGVybGVhdmU8L1RJVExFPgotR3N0RGVpbnRlcmxlYXZlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdERlaW50ZXJsZWF2ZUNsYXNzCi1HU1RfREVJTlRFUkxFQVZFCi1HU1RfREVJTlRFUkxFQVZFX0NBU1QKLUdTVF9JU19ERUlOVEVSTEVBVkUKLUdTVF9ERUlOVEVSTEVBVkVfQ0xBU1MKLUdTVF9JU19ERUlOVEVSTEVBVkVfQ0xBU1MKLUdTVF9UWVBFX0RFSU5URVJMRUFWRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9kZWludGVybGVhdmVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWRpY2V0djwvRklMRT4KLTxUSVRMRT5kaWNldHY8L1RJVExFPgotR3N0RGljZVRWCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdERpY2VUVkNsYXNzCi1HU1RfRElDRV9UVgotR1NUX0RJQ0VfVFZfQ0FTVAotR1NUX0lTX0RJQ0VfVFYKLUdTVF9ESUNFX1RWX0NMQVNTCi1HU1RfSVNfRElDRV9UVl9DTEFTUwotR1NUX1RZUEVfRElDRV9UVgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9kaWNlX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1keW51ZHBzaW5rPC9GSUxFPgotPFRJVExFPmR5bnVkcHNpbms8L1RJVExFPgotR3N0RHluVURQU2luawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3REeW5VRFBTaW5rQ2xhc3MKLUdTVF9EWU5fVURQX1NJTksKLUdTVF9EWU5fVURQX1NJTktfQ0FTVAotR1NUX0lTX0RZTl9VRFBfU0lOSwotR1NUX0RZTl9VRFBfU0lOS19DTEFTUwotR1NUX0lTX0RZTl9VRFBfU0lOS19DTEFTUwotR1NUX1RZUEVfRFlOX1VEUF9TSU5LCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2R5bl91ZHBfc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZWRnZXR2PC9GSUxFPgotPFRJVExFPmVkZ2V0djwvVElUTEU+Ci1Hc3RFZGdlVFYKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RWRnZVRWQ2xhc3MKLUdTVF9FREdFX1RWCi1HU1RfRURHRV9UVl9DQVNUCi1HU1RfSVNfRURHRV9UVgotR1NUX0VER0VfVFZfQ0xBU1MKLUdTVF9JU19FREdFX1RWX0NMQVNTCi1HU1RfVFlQRV9FREdFX1RWCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2VkZ2VfdHZfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWZsYWNkZWM8L0ZJTEU+Ci08VElUTEU+ZmxhY2RlYzwvVElUTEU+Ci1Hc3RGbGFjRGVjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEZsYWNEZWNDbGFzcwotR1NUX0ZMQUNfREVDCi1HU1RfRkxBQ19ERUNfQ0FTVAotR1NUX0lTX0ZMQUNfREVDCi1HU1RfRkxBQ19ERUNfQ0xBU1MKLUdTVF9JU19GTEFDX0RFQ19DTEFTUwotR1NUX1RZUEVfRkxBQ19ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZmxhY19kZWNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWZsYWNlbmM8L0ZJTEU+Ci08VElUTEU+ZmxhY2VuYzwvVElUTEU+Ci1Hc3RGbGFjRW5jCi1Hc3RGbGFjRW5jUXVhbGl0eQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RGbGFjRW5jQ2xhc3MKLUdTVF9GTEFDX0VOQwotR1NUX0ZMQUNfRU5DX0NBU1QKLUdTVF9JU19GTEFDX0VOQwotR1NUX0ZMQUNfRU5DX0NMQVNTCi1HU1RfSVNfRkxBQ19FTkNfQ0xBU1MKLUdTVF9UWVBFX0ZMQUNfRU5DCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2ZsYWNfZW5jX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1mbGFjcGFyc2U8L0ZJTEU+Ci08VElUTEU+ZmxhY3BhcnNlPC9USVRMRT4KLUdzdEZsYWNQYXJzZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RGbGFjUGFyc2VDbGFzcwotR1NUX0ZMQUNfUEFSU0UKLUdTVF9GTEFDX1BBUlNFX0NBU1QKLUdTVF9JU19GTEFDX1BBUlNFCi1HU1RfRkxBQ19QQVJTRV9DTEFTUwotR1NUX0lTX0ZMQUNfUEFSU0VfQ0xBU1MKLUdTVF9UWVBFX0ZMQUNfUEFSU0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZmxhY19wYXJzZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZmxhY3RhZzwvRklMRT4KLTxUSVRMRT5mbGFjdGFnPC9USVRMRT4KLUdzdEZsYWNUYWcKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0RmxhY1RhZ0NsYXNzCi1HU1RfRkxBQ19UQUcKLUdTVF9GTEFDX1RBR19DQVNUCi1HU1RfSVNfRkxBQ19UQUcKLUdTVF9GTEFDX1RBR19DTEFTUwotR1NUX0lTX0ZMQUNfVEFHX0NMQVNTCi1HU1RfVFlQRV9GTEFDX1RBRwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9mbGFjX3RhZ19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZmx2ZGVtdXg8L0ZJTEU+Ci08VElUTEU+Zmx2ZGVtdXg8L1RJVExFPgotR3N0Rmx2RGVtdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Rmx2RGVtdXhDbGFzcwotR1NUX0ZMVl9ERU1VWAotR1NUX0ZMVl9ERU1VWF9DQVNUCi1HU1RfSVNfRkxWX0RFTVVYCi1HU1RfRkxWX0RFTVVYX0NMQVNTCi1HU1RfSVNfRkxWX0RFTVVYX0NMQVNTCi1HU1RfVFlQRV9GTFZfREVNVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZmx2X2RlbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1mbHZtdXg8L0ZJTEU+Ci08VElUTEU+Zmx2bXV4PC9USVRMRT4KLUdzdEZsdk11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RGbHZNdXhDbGFzcwotR1NUX0ZMVl9NVVgKLUdTVF9GTFZfTVVYX0NBU1QKLUdTVF9JU19GTFZfTVVYCi1HU1RfRkxWX01VWF9DTEFTUwotR1NUX0lTX0ZMVl9NVVhfQ0xBU1MKLUdTVF9UWVBFX0ZMVl9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZmx2X211eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZmx4ZGVjPC9GSUxFPgotPFRJVExFPmZseGRlYzwvVElUTEU+Ci1Hc3RGbHhEZWMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0Rmx4RGVjQ2xhc3MKLUdTVF9GTFhfREVDCi1HU1RfRkxYX0RFQ19DQVNUCi1HU1RfSVNfRkxYX0RFQwotR1NUX0ZMWF9ERUNfQ0xBU1MKLUdTVF9JU19GTFhfREVDX0NMQVNTCi1HU1RfVFlQRV9GTFhfREVDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2ZseF9kZWNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWdhbW1hPC9GSUxFPgotPFRJVExFPmdhbW1hPC9USVRMRT4KLUdzdEdhbW1hCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEdhbW1hQ2xhc3MKLUdTVF9HQU1NQQotR1NUX0dBTU1BX0NBU1QKLUdTVF9JU19HQU1NQQotR1NUX0dBTU1BX0NMQVNTCi1HU1RfSVNfR0FNTUFfQ0xBU1MKLUdTVF9UWVBFX0dBTU1BCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2dhbW1hX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1nZGtwaXhidWZkZWM8L0ZJTEU+Ci08VElUTEU+Z2RrcGl4YnVmZGVjPC9USVRMRT4KLUdzdEdka1BpeGJ1ZkRlYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RHZGtQaXhidWZEZWNDbGFzcwotR1NUX0dES19QSVhCVUZfREVDCi1HU1RfR0RLX1BJWEJVRl9ERUNfQ0FTVAotR1NUX0lTX0dES19QSVhCVUZfREVDCi1HU1RfR0RLX1BJWEJVRl9ERUNfQ0xBU1MKLUdTVF9JU19HREtfUElYQlVGX0RFQ19DTEFTUwotR1NUX1RZUEVfR0RLX1BJWEJVRl9ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZ2RrX3BpeGJ1Zl9kZWNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWdka3BpeGJ1Zm92ZXJsYXk8L0ZJTEU+Ci08VElUTEU+Z2RrcGl4YnVmb3ZlcmxheTwvVElUTEU+Ci1Hc3RHZGtQaXhidWZPdmVybGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEdka1BpeGJ1Zk92ZXJsYXlDbGFzcwotR1NUX0dES19QSVhCVUZfT1ZFUkxBWQotR1NUX0dES19QSVhCVUZfT1ZFUkxBWV9DQVNUCi1HU1RfSVNfR0RLX1BJWEJVRl9PVkVSTEFZCi1HU1RfR0RLX1BJWEJVRl9PVkVSTEFZX0NMQVNTCi1HU1RfSVNfR0RLX1BJWEJVRl9PVkVSTEFZX0NMQVNTCi1HU1RfVFlQRV9HREtfUElYQlVGX09WRVJMQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1nZGtwaXhidWZzaW5rPC9GSUxFPgotPFRJVExFPmdka3BpeGJ1ZnNpbms8L1RJVExFPgotR3N0R2RrUGl4YnVmU2luawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RHZGtQaXhidWZTaW5rQ2xhc3MKLUdTVF9HREtfUElYQlVGX1NJTksKLUdTVF9HREtfUElYQlVGX1NJTktfQ0FTVAotR1NUX0lTX0dES19QSVhCVUZfU0lOSwotR1NUX0dES19QSVhCVUZfU0lOS19DTEFTUwotR1NUX0lTX0dES19QSVhCVUZfU0lOS19DTEFTUwotR1NUX1RZUEVfR0RLX1BJWEJVRl9TSU5LCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2dka19waXhidWZfc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtZ29vbTwvRklMRT4KLTxUSVRMRT5nb29tPC9USVRMRT4KLUdzdEdvb20KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0R29vbUNsYXNzCi1HU1RfR09PTQotR1NUX0dPT01fQ0FTVAotR1NUX0lTX0dPT00KLUdTVF9HT09NX0NMQVNTCi1HU1RfSVNfR09PTV9DTEFTUwotR1NUX1RZUEVfR09PTQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9nb29tX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1nb29tMmsxPC9GSUxFPgotPFRJVExFPmdvb20yazE8L1RJVExFPgotR3N0R29vbTJrMQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RHb29tMmsxQ2xhc3MKLUdTVF9HT09NMksxCi1HU1RfR09PTTJLMV9DQVNUCi1HU1RfSVNfR09PTTJLMQotR1NUX0dPT00ySzFfQ0xBU1MKLUdTVF9JU19HT09NMksxX0NMQVNTCi1HU1RfVFlQRV9HT09NMksxCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2dvb20yazFfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWhkdjEzOTRzcmM8L0ZJTEU+Ci08VElUTEU+aGR2MTM5NHNyYzwvVElUTEU+Ci1Hc3RIRFYxMzk0U3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEhEVjEzOTRTcmNDbGFzcwotR1NUX0hEX1YxMzk0X1NSQwotR1NUX0hEX1YxMzk0X1NSQ19DQVNUCi1HU1RfSVNfSERfVjEzOTRfU1JDCi1HU1RfSERfVjEzOTRfU1JDX0NMQVNTCi1HU1RfSVNfSERfVjEzOTRfU1JDX0NMQVNTCi1HU1RfVFlQRV9IRF9WMTM5NF9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfaGRfdjEzOTRfc3JjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1pY3lkZW11eDwvRklMRT4KLTxUSVRMRT5pY3lkZW11eDwvVElUTEU+Ci1Hc3RJQ1lEZW11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RJQ1lEZW11eENsYXNzCi1HU1RfSUNZX0RFTVVYCi1HU1RfSUNZX0RFTVVYX0NBU1QKLUdTVF9JU19JQ1lfREVNVVgKLUdTVF9JQ1lfREVNVVhfQ0xBU1MKLUdTVF9JU19JQ1lfREVNVVhfQ0xBU1MKLUdTVF9UWVBFX0lDWV9ERU1VWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9pY3lfZGVtdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWlkM2RlbXV4PC9GSUxFPgotPFRJVExFPmlkM2RlbXV4PC9USVRMRT4KLUdzdElEM0RlbXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdElEM0RlbXV4Q2xhc3MKLUdTVF9JX0QzX0RFTVVYCi1HU1RfSV9EM19ERU1VWF9DQVNUCi1HU1RfSVNfSV9EM19ERU1VWAotR1NUX0lfRDNfREVNVVhfQ0xBU1MKLUdTVF9JU19JX0QzX0RFTVVYX0NMQVNTCi1HU1RfVFlQRV9JX0QzX0RFTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2lfZDNfZGVtdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWlzbWxtdXg8L0ZJTEU+Ci08VElUTEU+aXNtbG11eDwvVElUTEU+Ci1Hc3RJU01MTXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdElTTUxNdXhDbGFzcwotR1NUX0lTTUxfTVVYCi1HU1RfSVNNTF9NVVhfQ0FTVAotR1NUX0lTX0lTTUxfTVVYCi1HU1RfSVNNTF9NVVhfQ0xBU1MKLUdTVF9JU19JU01MX01VWF9DTEFTUwotR1NUX1RZUEVfSVNNTF9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfaXNtbF9tdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWlkM3YybXV4PC9GSUxFPgotPFRJVExFPmlkM3YybXV4PC9USVRMRT4KLUdzdElkM3YyTXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdElkM3YyTXV4Q2xhc3MKLUdTVF9JRDNWMl9NVVgKLUdTVF9JRDNWMl9NVVhfQ0FTVAotR1NUX0lTX0lEM1YyX01VWAotR1NUX0lEM1YyX01VWF9DTEFTUwotR1NUX0lTX0lEM1YyX01VWF9DTEFTUwotR1NUX1RZUEVfSUQzVjJfTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2lkM3YyX211eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtaWlyZXF1YWxpemVyPC9GSUxFPgotPFRJVExFPmlpcmVxdWFsaXplcjwvVElUTEU+Ci1Hc3RJaXJFcXVhbGl6ZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0SWlyRXF1YWxpemVyQ2xhc3MKLUdTVF9JSVJfRVFVQUxJWkVSCi1HU1RfSUlSX0VRVUFMSVpFUl9DQVNUCi1HU1RfSVNfSUlSX0VRVUFMSVpFUgotR1NUX0lJUl9FUVVBTElaRVJfQ0xBU1MKLUdTVF9JU19JSVJfRVFVQUxJWkVSX0NMQVNTCi1HU1RfVFlQRV9JSVJfRVFVQUxJWkVSCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2lpcl9lcXVhbGl6ZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWVxdWFsaXplci0xMGJhbmRzPC9GSUxFPgotPFRJVExFPmVxdWFsaXplci0xMGJhbmRzPC9USVRMRT4KLUdzdElpckVxdWFsaXplcjEwQmFuZHMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0SWlyRXF1YWxpemVyMTBCYW5kc0NsYXNzCi1HU1RfSUlSX0VRVUFMSVpFUjEwX0JBTkRTCi1HU1RfSUlSX0VRVUFMSVpFUjEwX0JBTkRTX0NBU1QKLUdTVF9JU19JSVJfRVFVQUxJWkVSMTBfQkFORFMKLUdTVF9JSVJfRVFVQUxJWkVSMTBfQkFORFNfQ0xBU1MKLUdTVF9JU19JSVJfRVFVQUxJWkVSMTBfQkFORFNfQ0xBU1MKLUdTVF9UWVBFX0lJUl9FUVVBTElaRVIxMF9CQU5EUwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9paXJfZXF1YWxpemVyMTBfYmFuZHNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWVxdWFsaXplci0zYmFuZHM8L0ZJTEU+Ci08VElUTEU+ZXF1YWxpemVyLTNiYW5kczwvVElUTEU+Ci1Hc3RJaXJFcXVhbGl6ZXIzQmFuZHMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0SWlyRXF1YWxpemVyM0JhbmRzQ2xhc3MKLUdTVF9JSVJfRVFVQUxJWkVSM19CQU5EUwotR1NUX0lJUl9FUVVBTElaRVIzX0JBTkRTX0NBU1QKLUdTVF9JU19JSVJfRVFVQUxJWkVSM19CQU5EUwotR1NUX0lJUl9FUVVBTElaRVIzX0JBTkRTX0NMQVNTCi1HU1RfSVNfSUlSX0VRVUFMSVpFUjNfQkFORFNfQ0xBU1MKLUdTVF9UWVBFX0lJUl9FUVVBTElaRVIzX0JBTkRTCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2lpcl9lcXVhbGl6ZXIzX2JhbmRzX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1lcXVhbGl6ZXItbmJhbmRzPC9GSUxFPgotPFRJVExFPmVxdWFsaXplci1uYmFuZHM8L1RJVExFPgotR3N0SWlyRXF1YWxpemVyTkJhbmRzCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdElpckVxdWFsaXplck5CYW5kc0NsYXNzCi1HU1RfSUlSX0VRVUFMSVpFUl9OX0JBTkRTCi1HU1RfSUlSX0VRVUFMSVpFUl9OX0JBTkRTX0NBU1QKLUdTVF9JU19JSVJfRVFVQUxJWkVSX05fQkFORFMKLUdTVF9JSVJfRVFVQUxJWkVSX05fQkFORFNfQ0xBU1MKLUdTVF9JU19JSVJfRVFVQUxJWkVSX05fQkFORFNfQ0xBU1MKLUdTVF9UWVBFX0lJUl9FUVVBTElaRVJfTl9CQU5EUwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9paXJfZXF1YWxpemVyX25fYmFuZHNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LWltYWdlZnJlZXplPC9GSUxFPgotPFRJVExFPmltYWdlZnJlZXplPC9USVRMRT4KLUdzdEltYWdlRnJlZXplCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdEltYWdlRnJlZXplQ2xhc3MKLUdTVF9JTUFHRV9GUkVFWkUKLUdTVF9JTUFHRV9GUkVFWkVfQ0FTVAotR1NUX0lTX0lNQUdFX0ZSRUVaRQotR1NUX0lNQUdFX0ZSRUVaRV9DTEFTUwotR1NUX0lTX0lNQUdFX0ZSRUVaRV9DTEFTUwotR1NUX1RZUEVfSU1BR0VfRlJFRVpFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2ltYWdlX2ZyZWV6ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtaW50ZXJsZWF2ZTwvRklMRT4KLTxUSVRMRT5pbnRlcmxlYXZlPC9USVRMRT4KLUdzdEludGVybGVhdmUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0SW50ZXJsZWF2ZUNsYXNzCi1HU1RfSU5URVJMRUFWRQotR1NUX0lOVEVSTEVBVkVfQ0FTVAotR1NUX0lTX0lOVEVSTEVBVkUKLUdTVF9JTlRFUkxFQVZFX0NMQVNTCi1HU1RfSVNfSU5URVJMRUFWRV9DTEFTUwotR1NUX1RZUEVfSU5URVJMRUFWRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9pbnRlcmxlYXZlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1qYWNrYXVkaW9zaW5rPC9GSUxFPgotPFRJVExFPmphY2thdWRpb3Npbms8L1RJVExFPgotR3N0SmFja0F1ZGlvU2luawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RKYWNrQXVkaW9TaW5rQ2xhc3MKLUdTVF9KQUNLX0FVRElPX1NJTksKLUdTVF9KQUNLX0FVRElPX1NJTktfQ0FTVAotR1NUX0lTX0pBQ0tfQVVESU9fU0lOSwotR1NUX0pBQ0tfQVVESU9fU0lOS19DTEFTUwotR1NUX0lTX0pBQ0tfQVVESU9fU0lOS19DTEFTUwotR1NUX1RZUEVfSkFDS19BVURJT19TSU5LCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2phY2tfYXVkaW9fc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtamFja2F1ZGlvc3JjPC9GSUxFPgotPFRJVExFPmphY2thdWRpb3NyYzwvVElUTEU+Ci1Hc3RKYWNrQXVkaW9TcmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0SmFja0F1ZGlvU3JjQ2xhc3MKLUdTVF9KQUNLX0FVRElPX1NSQwotR1NUX0pBQ0tfQVVESU9fU1JDX0NBU1QKLUdTVF9JU19KQUNLX0FVRElPX1NSQwotR1NUX0pBQ0tfQVVESU9fU1JDX0NMQVNTCi1HU1RfSVNfSkFDS19BVURJT19TUkNfQ0xBU1MKLUdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2phY2tfYXVkaW9fc3JjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1qcGVnZGVjPC9GSUxFPgotPFRJVExFPmpwZWdkZWM8L1RJVExFPgotR3N0SnBlZ0RlYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RKcGVnRGVjQ2xhc3MKLUdTVF9KUEVHX0RFQwotR1NUX0pQRUdfREVDX0NBU1QKLUdTVF9JU19KUEVHX0RFQwotR1NUX0pQRUdfREVDX0NMQVNTCi1HU1RfSVNfSlBFR19ERUNfQ0xBU1MKLUdTVF9UWVBFX0pQRUdfREVDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2pwZWdfZGVjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1qcGVnZW5jPC9GSUxFPgotPFRJVExFPmpwZWdlbmM8L1RJVExFPgotR3N0SnBlZ0VuYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RKcGVnRW5jQ2xhc3MKLUdTVF9KUEVHX0VOQwotR1NUX0pQRUdfRU5DX0NBU1QKLUdTVF9JU19KUEVHX0VOQwotR1NUX0pQRUdfRU5DX0NMQVNTCi1HU1RfSVNfSlBFR19FTkNfQ0xBU1MKLUdTVF9UWVBFX0pQRUdfRU5DCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X2pwZWdfZW5jX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1sZXZlbDwvRklMRT4KLTxUSVRMRT5sZXZlbDwvVElUTEU+Ci1Hc3RMZXZlbAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RMZXZlbENsYXNzCi1HU1RfTEVWRUwKLUdTVF9MRVZFTF9DQVNUCi1HU1RfSVNfTEVWRUwKLUdTVF9MRVZFTF9DTEFTUwotR1NUX0lTX0xFVkVMX0NMQVNTCi1HU1RfVFlQRV9MRVZFTAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9sZXZlbF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbWoybXV4PC9GSUxFPgotPFRJVExFPm1qMm11eDwvVElUTEU+Ci1Hc3RNSjJNdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TUoyTXV4Q2xhc3MKLUdTVF9NX0oyX01VWAotR1NUX01fSjJfTVVYX0NBU1QKLUdTVF9JU19NX0oyX01VWAotR1NUX01fSjJfTVVYX0NMQVNTCi1HU1RfSVNfTV9KMl9NVVhfQ0xBU1MKLUdTVF9UWVBFX01fSjJfTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X21fajJfbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1tcDRtdXg8L0ZJTEU+Ci08VElUTEU+bXA0bXV4PC9USVRMRT4KLUdzdE1QNE11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RNUDRNdXhDbGFzcwotR1NUX01fUDRfTVVYCi1HU1RfTV9QNF9NVVhfQ0FTVAotR1NUX0lTX01fUDRfTVVYCi1HU1RfTV9QNF9NVVhfQ0xBU1MKLUdTVF9JU19NX1A0X01VWF9DTEFTUwotR1NUX1RZUEVfTV9QNF9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbV9wNF9tdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW1hdHJvc2thZGVtdXg8L0ZJTEU+Ci08VElUTEU+bWF0cm9za2FkZW11eDwvVElUTEU+Ci1Hc3RNYXRyb3NrYURlbXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE1hdHJvc2thRGVtdXhDbGFzcwotR1NUX01BVFJPU0tBX0RFTVVYCi1HU1RfTUFUUk9TS0FfREVNVVhfQ0FTVAotR1NUX0lTX01BVFJPU0tBX0RFTVVYCi1HU1RfTUFUUk9TS0FfREVNVVhfQ0xBU1MKLUdTVF9JU19NQVRST1NLQV9ERU1VWF9DTEFTUwotR1NUX1RZUEVfTUFUUk9TS0FfREVNVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbWF0cm9za2FfZGVtdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW1hdHJvc2thbXV4PC9GSUxFPgotPFRJVExFPm1hdHJvc2thbXV4PC9USVRMRT4KLUdzdE1hdHJvc2thTXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE1hdHJvc2thTXV4Q2xhc3MKLUdTVF9NQVRST1NLQV9NVVgKLUdTVF9NQVRST1NLQV9NVVhfQ0FTVAotR1NUX0lTX01BVFJPU0tBX01VWAotR1NUX01BVFJPU0tBX01VWF9DTEFTUwotR1NUX0lTX01BVFJPU0tBX01VWF9DTEFTUwotR1NUX1RZUEVfTUFUUk9TS0FfTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X21hdHJvc2thX211eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbW9ub3Njb3BlPC9GSUxFPgotPFRJVExFPm1vbm9zY29wZTwvVElUTEU+Ci1Hc3RNb25vc2NvcGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TW9ub3Njb3BlQ2xhc3MKLUdTVF9NT05PU0NPUEUKLUdTVF9JU19NT05PU0NPUEUKLUdTVF9UWVBFX01PTk9TQ09QRQotR1NUX01PTk9TQ09QRV9DTEFTUwotR1NUX0lTX01PTk9TQ09QRV9DTEFTUwotZ3N0X21vbm9zY29wZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbWF0cm9za2FwYXJzZTwvRklMRT4KLTxUSVRMRT5tYXRyb3NrYXBhcnNlPC9USVRMRT4KLUdzdE1hdHJvc2thUGFyc2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TWF0cm9za2FQYXJzZUNsYXNzCi1HU1RfTUFUUk9TS0FfUEFSU0UKLUdTVF9NQVRST1NLQV9QQVJTRV9DQVNUCi1HU1RfSVNfTUFUUk9TS0FfUEFSU0UKLUdTVF9NQVRST1NLQV9QQVJTRV9DTEFTUwotR1NUX0lTX01BVFJPU0tBX1BBUlNFX0NMQVNTCi1HU1RfVFlQRV9NQVRST1NLQV9QQVJTRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9tYXRyb3NrYV9wYXJzZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbXBlZ2F1ZGlvcGFyc2U8L0ZJTEU+Ci08VElUTEU+bXBlZ2F1ZGlvcGFyc2U8L1RJVExFPgotR3N0TXBlZ0F1ZGlvUGFyc2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TXBlZ0F1ZGlvUGFyc2VDbGFzcwotR1NUX01QRUdfQVVESU9fUEFSU0UKLUdTVF9NUEVHX0FVRElPX1BBUlNFX0NBU1QKLUdTVF9JU19NUEVHX0FVRElPX1BBUlNFCi1HU1RfTVBFR19BVURJT19QQVJTRV9DTEFTUwotR1NUX0lTX01QRUdfQVVESU9fUEFSU0VfQ0xBU1MKLUdTVF9UWVBFX01QRUdfQVVESU9fUEFSU0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXBlZ19hdWRpb19wYXJzZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbXVsYXdkZWM8L0ZJTEU+Ci08VElUTEU+bXVsYXdkZWM8L1RJVExFPgotR3N0TXVMYXdEZWMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TXVMYXdEZWNDbGFzcwotR1NUX01VX0xBV19ERUMKLUdTVF9NVV9MQVdfREVDX0NBU1QKLUdTVF9JU19NVV9MQVdfREVDCi1HU1RfTVVfTEFXX0RFQ19DTEFTUwotR1NUX0lTX01VX0xBV19ERUNfQ0xBU1MKLUdTVF9UWVBFX01VX0xBV19ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXVfbGF3X2RlY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbXVsYXdlbmM8L0ZJTEU+Ci08VElUTEU+bXVsYXdlbmM8L1RJVExFPgotR3N0TXVMYXdFbmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TXVMYXdFbmNDbGFzcwotR1NUX01VX0xBV19FTkMKLUdTVF9NVV9MQVdfRU5DX0NBU1QKLUdTVF9JU19NVV9MQVdfRU5DCi1HU1RfTVVfTEFXX0VOQ19DTEFTUwotR1NUX0lTX01VX0xBV19FTkNfQ0xBU1MKLUdTVF9UWVBFX01VX0xBV19FTkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXVfbGF3X2VuY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbXVsdGlmaWxlc2luazwvRklMRT4KLTxUSVRMRT5tdWx0aWZpbGVzaW5rPC9USVRMRT4KLUdzdE11bHRpRmlsZVNpbmsKLUdzdE11bHRpRmlsZVNpbmtOZXh0Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE11bHRpRmlsZVNpbmtDbGFzcwotR1NUX01VTFRJX0ZJTEVfU0lOSwotR1NUX01VTFRJX0ZJTEVfU0lOS19DQVNUCi1HU1RfSVNfTVVMVElfRklMRV9TSU5LCi1HU1RfTVVMVElfRklMRV9TSU5LX0NMQVNTCi1HU1RfSVNfTVVMVElfRklMRV9TSU5LX0NMQVNTCi1HU1RfVFlQRV9NVUxUSV9GSUxFX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXVsdGlfZmlsZV9zaW5rX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1tdWx0aWZpbGVzcmM8L0ZJTEU+Ci08VElUTEU+bXVsdGlmaWxlc3JjPC9USVRMRT4KLUdzdE11bHRpRmlsZVNyYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RNdWx0aUZpbGVTcmNDbGFzcwotR1NUX01VTFRJX0ZJTEVfU1JDCi1HU1RfTVVMVElfRklMRV9TUkNfQ0FTVAotR1NUX0lTX01VTFRJX0ZJTEVfU1JDCi1HU1RfTVVMVElfRklMRV9TUkNfQ0xBU1MKLUdTVF9JU19NVUxUSV9GSUxFX1NSQ19DTEFTUwotR1NUX1RZUEVfTVVMVElfRklMRV9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXVsdGlfZmlsZV9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW11bHRpdWRwc2luazwvRklMRT4KLTxUSVRMRT5tdWx0aXVkcHNpbms8L1RJVExFPgotR3N0TXVsdGlVRFBTaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE11bHRpVURQU2lua0NsYXNzCi1HU1RfTVVMVElfVURQX1NJTksKLUdTVF9NVUxUSV9VRFBfU0lOS19DQVNUCi1HU1RfSVNfTVVMVElfVURQX1NJTksKLUdTVF9NVUxUSV9VRFBfU0lOS19DTEFTUwotR1NUX0lTX01VTFRJX1VEUF9TSU5LX0NMQVNTCi1HU1RfVFlQRV9NVUxUSV9VRFBfU0lOSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9tdWx0aV91ZHBfc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbXVsdGlwYXJ0ZGVtdXg8L0ZJTEU+Ci08VElUTEU+bXVsdGlwYXJ0ZGVtdXg8L1RJVExFPgotR3N0TXVsdGlwYXJ0RGVtdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TXVsdGlwYXJ0RGVtdXhDbGFzcwotR1NUX01VTFRJUEFSVF9ERU1VWAotR1NUX01VTFRJUEFSVF9ERU1VWF9DQVNUCi1HU1RfSVNfTVVMVElQQVJUX0RFTVVYCi1HU1RfTVVMVElQQVJUX0RFTVVYX0NMQVNTCi1HU1RfSVNfTVVMVElQQVJUX0RFTVVYX0NMQVNTCi1HU1RfVFlQRV9NVUxUSVBBUlRfREVNVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXVsdGlwYXJ0X2RlbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1tdWx0aXBhcnRtdXg8L0ZJTEU+Ci08VElUTEU+bXVsdGlwYXJ0bXV4PC9USVRMRT4KLUdzdE11bHRpcGFydE11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RNdWx0aXBhcnRNdXhDbGFzcwotR1NUX01VTFRJUEFSVF9NVVgKLUdTVF9NVUxUSVBBUlRfTVVYX0NBU1QKLUdTVF9JU19NVUxUSVBBUlRfTVVYCi1HU1RfTVVMVElQQVJUX01VWF9DTEFTUwotR1NUX0lTX01VTFRJUEFSVF9NVVhfQ0xBU1MKLUdTVF9UWVBFX01VTFRJUEFSVF9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbXVsdGlwYXJ0X211eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbmF2c2VlazwvRklMRT4KLTxUSVRMRT5uYXZzZWVrPC9USVRMRT4KLUdzdE5hdlNlZWsKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TmF2U2Vla0NsYXNzCi1HU1RfTkFWX1NFRUsKLUdTVF9OQVZfU0VFS19DQVNUCi1HU1RfSVNfTkFWX1NFRUsKLUdTVF9OQVZfU0VFS19DTEFTUwotR1NUX0lTX05BVl9TRUVLX0NMQVNTCi1HU1RfVFlQRV9OQVZfU0VFSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9uYXZfc2Vla19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtbmF2aWdhdGlvbnRlc3Q8L0ZJTEU+Ci08VElUTEU+bmF2aWdhdGlvbnRlc3Q8L1RJVExFPgotR3N0TmF2aWdhdGlvbnRlc3QKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0TmF2aWdhdGlvbnRlc3RDbGFzcwotR1NUX05BVklHQVRJT05URVNUCi1HU1RfTkFWSUdBVElPTlRFU1RfQ0FTVAotR1NUX0lTX05BVklHQVRJT05URVNUCi1HU1RfTkFWSUdBVElPTlRFU1RfQ0xBU1MKLUdTVF9JU19OQVZJR0FUSU9OVEVTVF9DTEFTUwotR1NUX1RZUEVfTkFWSUdBVElPTlRFU1QKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfbmF2aWdhdGlvbnRlc3RfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW9wdHY8L0ZJTEU+Ci08VElUTEU+b3B0djwvVElUTEU+Ci1Hc3RPcFRWCi1Hc3RPcFRWTW9kZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RPcFRWQ2xhc3MKLUdTVF9PUF9UVgotR1NUX09QX1RWX0NBU1QKLUdTVF9JU19PUF9UVgotR1NUX09QX1RWX0NMQVNTCi1HU1RfSVNfT1BfVFZfQ0xBU1MKLUdTVF9UWVBFX09QX1RWCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X29wX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1vc3M0c2luazwvRklMRT4KLTxUSVRMRT5vc3M0c2luazwvVElUTEU+Ci1Hc3RPc3M0U2luawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RPc3M0U2lua0NsYXNzCi1HU1RfT1NTNF9TSU5LCi1HU1RfT1NTNF9TSU5LX0NBU1QKLUdTVF9JU19PU1M0X1NJTksKLUdTVF9PU1M0X1NJTktfQ0xBU1MKLUdTVF9JU19PU1M0X1NJTktfQ0xBU1MKLUdTVF9UWVBFX09TUzRfU0lOSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9vc3M0X3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW9zczRzcmM8L0ZJTEU+Ci08VElUTEU+b3NzNHNyYzwvVElUTEU+Ci1Hc3RPc3M0U291cmNlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE9zczRTb3VyY2VDbGFzcwotR1NUX09TUzRfU09VUkNFCi1HU1RfT1NTNF9TT1VSQ0VfQ0FTVAotR1NUX0lTX09TUzRfU09VUkNFCi1HU1RfT1NTNF9TT1VSQ0VfQ0xBU1MKLUdTVF9JU19PU1M0X1NPVVJDRV9DTEFTUwotR1NUX1RZUEVfT1NTNF9TT1VSQ0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfb3NzNF9zb3VyY2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW9zc3Npbms8L0ZJTEU+Ci08VElUTEU+b3Nzc2luazwvVElUTEU+Ci1Hc3RPc3NTaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE9zc1NpbmtDbGFzcwotR1NUX09TU19TSU5LCi1HU1RfT1NTX1NJTktfQ0FTVAotR1NUX0lTX09TU19TSU5LCi1HU1RfT1NTX1NJTktfQ0xBU1MKLUdTVF9JU19PU1NfU0lOS19DTEFTUwotR1NUX1RZUEVfT1NTX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfb3NzX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW9zc3NyYzwvRklMRT4KLTxUSVRMRT5vc3NzcmM8L1RJVExFPgotR3N0T3NzU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE9zc1NyY0NsYXNzCi1HU1RfT1NTX1NSQwotR1NUX09TU19TUkNfQ0FTVAotR1NUX0lTX09TU19TUkMKLUdTVF9PU1NfU1JDX0NMQVNTCi1HU1RfSVNfT1NTX1NSQ19DTEFTUwotR1NUX1RZUEVfT1NTX1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9vc3Nfc3JjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1vc3hhdWRpb3Npbms8L0ZJTEU+Ci08VElUTEU+b3N4YXVkaW9zaW5rPC9USVRMRT4KLUdzdE9zeEF1ZGlvU2luawotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RPc3hBdWRpb1NpbmtDbGFzcwotR1NUX1RZUEVfT1NYX0FVRElPX1NJTksKLUdTVF9PU1hfQVVESU9fU0lOSwotR1NUX09TWF9BVURJT19TSU5LX0NMQVNTCi1nc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW9zeGF1ZGlvc3JjPC9GSUxFPgotPFRJVExFPm9zeGF1ZGlvc3JjPC9USVRMRT4KLUdzdE9zeEF1ZGlvU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE9zeEF1ZGlvU3JjQ2xhc3MKLUdTVF9UWVBFX09TWF9BVURJT19TUkMKLUdTVF9PU1hfQVVESU9fU1JDCi1HU1RfT1NYX0FVRElPX1NSQ19DTEFTUwotZ3N0X29zeF9hdWRpb19zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LW9zeHZpZGVvc2luazwvRklMRT4KLTxUSVRMRT5vc3h2aWRlb3Npbms8L1RJVExFPgotR3N0T1NYVmlkZW9TaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdE9TWFZpZGVvU2lua0NsYXNzCi1Hc3RPU1hXaW5kb3cKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1HU1RfSVNfT1NYX1ZJREVPX1NJTksKLUdTVF9JU19PU1hfVklERU9fU0lOS19DTEFTUwotR1NUX09TWF9WSURFT19TSU5LCi1HU1RfT1NYX1ZJREVPX1NJTktfQ0xBU1MKLUdTVF9UWVBFX09TWF9WSURFT19TSU5LCi1HU1RfVFlQRV9PU1hWSURFT0JVRkZFUgotZ3N0X29zeF92aWRlb19zaW5rX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1wbmdkZWM8L0ZJTEU+Ci08VElUTEU+cG5nZGVjPC9USVRMRT4KLUdzdFBuZ0RlYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RQbmdEZWNDbGFzcwotR1NUX1BOR19ERUMKLUdTVF9QTkdfREVDX0NBU1QKLUdTVF9JU19QTkdfREVDCi1HU1RfUE5HX0RFQ19DTEFTUwotR1NUX0lTX1BOR19ERUNfQ0xBU1MKLUdTVF9UWVBFX1BOR19ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcG5nX2RlY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcG5nZW5jPC9GSUxFPgotPFRJVExFPnBuZ2VuYzwvVElUTEU+Ci1Hc3RQbmdFbmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UG5nRW5jQ2xhc3MKLUdTVF9QTkdfRU5DCi1HU1RfUE5HX0VOQ19DQVNUCi1HU1RfSVNfUE5HX0VOQwotR1NUX1BOR19FTkNfQ0xBU1MKLUdTVF9JU19QTkdfRU5DX0NMQVNTCi1HU1RfVFlQRV9QTkdfRU5DCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3BuZ19lbmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXByb2dyZXNzcmVwb3J0PC9GSUxFPgotPFRJVExFPnByb2dyZXNzcmVwb3J0PC9USVRMRT4KLUdzdFByb2dyZXNzUmVwb3J0Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFByb2dyZXNzUmVwb3J0Q2xhc3MKLUdTVF9QUk9HUkVTU19SRVBPUlQKLUdTVF9QUk9HUkVTU19SRVBPUlRfQ0FTVAotR1NUX0lTX1BST0dSRVNTX1JFUE9SVAotR1NUX1BST0dSRVNTX1JFUE9SVF9DTEFTUwotR1NUX0lTX1BST0dSRVNTX1JFUE9SVF9DTEFTUwotR1NUX1RZUEVfUFJPR1JFU1NfUkVQT1JUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3Byb2dyZXNzX3JlcG9ydF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcHVsc2VzaW5rPC9GSUxFPgotPFRJVExFPnB1bHNlc2luazwvVElUTEU+Ci1Hc3RQdWxzZVNpbmsKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UHVsc2VTaW5rQ2xhc3MKLUdTVF9QVUxTRV9TSU5LCi1HU1RfUFVMU0VfU0lOS19DQVNUCi1HU1RfSVNfUFVMU0VfU0lOSwotR1NUX1BVTFNFX1NJTktfQ0xBU1MKLUdTVF9JU19QVUxTRV9TSU5LX0NMQVNTCi1HU1RfVFlQRV9QVUxTRV9TSU5LCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3B1bHNlX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXB1bHNlc3JjPC9GSUxFPgotPFRJVExFPnB1bHNlc3JjPC9USVRMRT4KLUdzdFB1bHNlU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFB1bHNlU3JjQ2xhc3MKLUdTVF9QVUxTRV9TUkMKLUdTVF9QVUxTRV9TUkNfQ0FTVAotR1NUX0lTX1BVTFNFX1NSQwotR1NUX1BVTFNFX1NSQ19DTEFTUwotR1NUX0lTX1BVTFNFX1NSQ19DTEFTUwotR1NUX1RZUEVfUFVMU0VfU1JDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3B1bHNlX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcHVzaGZpbGVzcmM8L0ZJTEU+Ci08VElUTEU+cHVzaGZpbGVzcmM8L1RJVExFPgotR3N0UHVzaEZpbGVTcmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UHVzaEZpbGVTcmNDbGFzcwotR1NUX1BVU0hfRklMRV9TUkMKLUdTVF9QVVNIX0ZJTEVfU1JDX0NBU1QKLUdTVF9JU19QVVNIX0ZJTEVfU1JDCi1HU1RfUFVTSF9GSUxFX1NSQ19DTEFTUwotR1NUX0lTX1BVU0hfRklMRV9TUkNfQ0xBU1MKLUdTVF9UWVBFX1BVU0hfRklMRV9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcHVzaF9maWxlX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcXRkZW11eDwvRklMRT4KLTxUSVRMRT5xdGRlbXV4PC9USVRMRT4KLUdzdFFURGVtdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UVREZW11eENsYXNzCi1HU1RfUVRfREVNVVgKLUdTVF9RVF9ERU1VWF9DQVNUCi1HU1RfSVNfUVRfREVNVVgKLUdTVF9RVF9ERU1VWF9DTEFTUwotR1NUX0lTX1FUX0RFTVVYX0NMQVNTCi1HU1RfVFlQRV9RVF9ERU1VWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9xdF9kZW11eF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcXRtb292cmVjb3ZlcjwvRklMRT4KLTxUSVRMRT5xdG1vb3ZyZWNvdmVyPC9USVRMRT4KLUdzdFFUTW9vdlJlY292ZXIKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UVRNb292UmVjb3ZlckNsYXNzCi1HU1RfUVRfTU9PVl9SRUNPVkVSCi1HU1RfUVRfTU9PVl9SRUNPVkVSX0NBU1QKLUdTVF9JU19RVF9NT09WX1JFQ09WRVIKLUdTVF9RVF9NT09WX1JFQ09WRVJfQ0xBU1MKLUdTVF9JU19RVF9NT09WX1JFQ09WRVJfQ0xBU1MKLUdTVF9UWVBFX1FUX01PT1ZfUkVDT1ZFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9xdF9tb292X3JlY292ZXJfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXF0bXV4PC9GSUxFPgotPFRJVExFPnF0bXV4PC9USVRMRT4KLUdzdFFUTXV4Ci1Hc3RRVE11eER0c01ldGhvZHMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UVRNdXhDbGFzcwotR1NUX1FUX01VWAotR1NUX1FUX01VWF9DQVNUCi1HU1RfSVNfUVRfTVVYCi1HU1RfUVRfTVVYX0NMQVNTCi1HU1RfSVNfUVRfTVVYX0NMQVNTCi1HU1RfVFlQRV9RVF9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcXRfbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1xdWFya3R2PC9GSUxFPgotPFRJVExFPnF1YXJrdHY8L1RJVExFPgotR3N0UXVhcmtUVgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RRdWFya1RWQ2xhc3MKLUdTVF9RVUFSS19UVgotR1NUX1FVQVJLX1RWX0NBU1QKLUdTVF9JU19RVUFSS19UVgotR1NUX1FVQVJLX1RWX0NMQVNTCi1HU1RfSVNfUVVBUktfVFZfQ0xBU1MKLUdTVF9UWVBFX1FVQVJLX1RWCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3F1YXJrX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBidmRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGJ2ZGVwYXk8L1RJVExFPgotR3N0UlRQQlZEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSVFBCVkRlcGF5Q2xhc3MKLUdTVF9SVFBCVl9ERVBBWQotR1NUX1JUUEJWX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBCVl9ERVBBWQotR1NUX1JUUEJWX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQQlZfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUEJWX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cGJ2X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBidnBheTwvRklMRT4KLTxUSVRMRT5ydHBidnBheTwvVElUTEU+Ci1Hc3RSVFBCVlBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSVFBCVlBheUNsYXNzCi1HU1RfUlRQQlZfUEFZCi1HU1RfUlRQQlZfUEFZX0NBU1QKLUdTVF9JU19SVFBCVl9QQVkKLUdTVF9SVFBCVl9QQVlfQ0xBU1MKLUdTVF9JU19SVFBCVl9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUEJWX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBidl9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGR0bWZtdXg8L0ZJTEU+Ci08VElUTEU+cnRwZHRtZm11eDwvVElUTEU+Ci1Hc3RSVFBEVE1GTXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUERUTUZNdXhDbGFzcwotR1NUX1JUUERUTUZfTVVYCi1HU1RfUlRQRFRNRl9NVVhfQ0FTVAotR1NUX0lTX1JUUERUTUZfTVVYCi1HU1RfUlRQRFRNRl9NVVhfQ0xBU1MKLUdTVF9JU19SVFBEVE1GX01VWF9DTEFTUwotR1NUX1RZUEVfUlRQRFRNRl9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwZHRtZl9tdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGR0bWZzcmM8L0ZJTEU+Ci08VElUTEU+cnRwZHRtZnNyYzwvVElUTEU+Ci1Hc3RSVFBEVE1GU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUERUTUZTcmNDbGFzcwotR1NUX1JUUERUTUZfU1JDCi1HU1RfUlRQRFRNRl9TUkNfQ0FTVAotR1NUX0lTX1JUUERUTUZfU1JDCi1HU1RfUlRQRFRNRl9TUkNfQ0xBU1MKLUdTVF9JU19SVFBEVE1GX1NSQ19DTEFTUwotR1NUX1RZUEVfUlRQRFRNRl9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwZHRtZl9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGR2ZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwZHZkZXBheTwvVElUTEU+Ci1Hc3RSVFBEVkRlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUERWRGVwYXlDbGFzcwotR1NUX1JUUERWX0RFUEFZCi1HU1RfUlRQRFZfREVQQVlfQ0FTVAotR1NUX0lTX1JUUERWX0RFUEFZCi1HU1RfUlRQRFZfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBEVl9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQRFZfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwZHZfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGR2cGF5PC9GSUxFPgotPFRJVExFPnJ0cGR2cGF5PC9USVRMRT4KLUdzdFJUUERWUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUERWUGF5Q2xhc3MKLUdTVF9SVFBEVl9QQVkKLUdTVF9SVFBEVl9QQVlfQ0FTVAotR1NUX0lTX1JUUERWX1BBWQotR1NUX1JUUERWX1BBWV9DTEFTUwotR1NUX0lTX1JUUERWX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQRFZfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cGR2X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwZGVjPC9GSUxFPgotPFRJVExFPnJ0cGRlYzwvVElUTEU+Ci1Hc3RSVFBEZWMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQRGVjQ2xhc3MKLUdTVF9SVFBfREVDCi1HU1RfUlRQX0RFQ19DQVNUCi1HU1RfSVNfUlRQX0RFQwotR1NUX1JUUF9ERUNfQ0xBU1MKLUdTVF9JU19SVFBfREVDX0NMQVNTCi1HU1RfVFlQRV9SVFBfREVDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9kZWNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGc3MjNwYXk8L0ZJTEU+Ci08VElUTEU+cnRwZzcyM3BheTwvVElUTEU+Ci1Hc3RSVFBHNzIzUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUEc3MjNQYXlDbGFzcwotR1NUX1JUUF9HNzIzX1BBWQotR1NUX1JUUF9HNzIzX1BBWV9DQVNUCi1HU1RfSVNfUlRQX0c3MjNfUEFZCi1HU1RfUlRQX0c3MjNfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0c3MjNfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfRzcyM19QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2c3MjNfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBnNzI5cGF5PC9GSUxFPgotPFRJVExFPnJ0cGc3MjlwYXk8L1RJVExFPgotR3N0UlRQRzcyOVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSVFBHNzI5UGF5Q2xhc3MKLUdTVF9SVFBfRzcyOV9QQVkKLUdTVF9SVFBfRzcyOV9QQVlfQ0FTVAotR1NUX0lTX1JUUF9HNzI5X1BBWQotR1NUX1JUUF9HNzI5X1BBWV9DTEFTUwotR1NUX0lTX1JUUF9HNzI5X1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0c3MjlfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9nNzI5X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwZ3NtZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwZ3NtZGVwYXk8L1RJVExFPgotR3N0UlRQR1NNRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQR1NNRGVwYXlDbGFzcwotR1NUX1JUUEdTTV9ERVBBWQotR1NUX1JUUEdTTV9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQR1NNX0RFUEFZCi1HU1RfUlRQR1NNX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQR1NNX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBHU01fREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwZ3NtX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBnc21wYXk8L0ZJTEU+Ci08VElUTEU+cnRwZ3NtcGF5PC9USVRMRT4KLUdzdFJUUEdTTVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSVFBHU01QYXlDbGFzcwotR1NUX1JUUEdTTV9QQVkKLUdTVF9SVFBHU01fUEFZX0NBU1QKLUdTVF9JU19SVFBHU01fUEFZCi1HU1RfUlRQR1NNX1BBWV9DTEFTUwotR1NUX0lTX1JUUEdTTV9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUEdTTV9QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwZ3NtX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwaWxiY3BheTwvRklMRT4KLTxUSVRMRT5ydHBpbGJjcGF5PC9USVRMRT4KLUdzdFJUUElMQkNQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQSUxCQ1BheUNsYXNzCi1HU1RfUlRQSUxCQ19QQVkKLUdTVF9SVFBJTEJDX1BBWV9DQVNUCi1HU1RfSVNfUlRQSUxCQ19QQVkKLUdTVF9SVFBJTEJDX1BBWV9DTEFTUwotR1NUX0lTX1JUUElMQkNfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBJTEJDX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBpbGJjX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwbXAydHBheTwvRklMRT4KLTxUSVRMRT5ydHBtcDJ0cGF5PC9USVRMRT4KLUdzdFJUUE1QMlRQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQTVAyVFBheUNsYXNzCi1HU1RfUlRQTV9QMl9UX1BBWQotR1NUX1JUUE1fUDJfVF9QQVlfQ0FTVAotR1NUX0lTX1JUUE1fUDJfVF9QQVkKLUdTVF9SVFBNX1AyX1RfUEFZX0NMQVNTCi1HU1RfSVNfUlRQTV9QMl9UX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQTV9QMl9UX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBtX3AyX3RfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBtcHZwYXk8L0ZJTEU+Ci08VElUTEU+cnRwbXB2cGF5PC9USVRMRT4KLUdzdFJUUE1QVlBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSVFBNUFZQYXlDbGFzcwotR1NUX1JUUE1QVl9QQVkKLUdTVF9SVFBNUFZfUEFZX0NBU1QKLUdTVF9JU19SVFBNUFZfUEFZCi1HU1RfUlRQTVBWX1BBWV9DTEFTUwotR1NUX0lTX1JUUE1QVl9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUE1QVl9QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwbXB2X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwbXV4PC9GSUxFPgotPFRJVExFPnJ0cG11eDwvVElUTEU+Ci1Hc3RSVFBNdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQTXV4Q2xhc3MKLUdTVF9SVFBfTVVYCi1HU1RfUlRQX01VWF9DQVNUCi1HU1RfSVNfUlRQX01VWAotR1NUX1JUUF9NVVhfQ0xBU1MKLUdTVF9JU19SVFBfTVVYX0NMQVNTCi1HU1RfVFlQRV9SVFBfTVVYCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9tdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cG9wdXNkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBvcHVzZGVwYXk8L1RJVExFPgotR3N0UlRQT3B1c0RlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUE9wdXNEZXBheUNsYXNzCi1HU1RfUlRQX09QVVNfREVQQVkKLUdTVF9SVFBfT1BVU19ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX09QVVNfREVQQVkKLUdTVF9SVFBfT1BVU19ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9PUFVTX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfT1BVU19ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfb3B1c19kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwcnR4cXVldWU8L0ZJTEU+Ci08VElUTEU+cnRwcnR4cXVldWU8L1RJVExFPgotR3N0UlRQUnR4UXVldWUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQUnR4UXVldWVDbGFzcwotR1NUX1JUUF9SVFhfUVVFVUUKLUdTVF9SVFBfUlRYX1FVRVVFX0NBU1QKLUdTVF9JU19SVFBfUlRYX1FVRVVFCi1HU1RfUlRQX1JUWF9RVUVVRV9DTEFTUwotR1NUX0lTX1JUUF9SVFhfUVVFVUVfQ0xBU1MKLUdTVF9UWVBFX1JUUF9SVFhfUVVFVUUKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3J0eF9xdWV1ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwc2lyZW5kZXBheTwvRklMRT4KLTxUSVRMRT5ydHBzaXJlbmRlcGF5PC9USVRMRT4KLUdzdFJUUFNpcmVuRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRQU2lyZW5EZXBheUNsYXNzCi1HU1RfUlRQX1NJUkVOX0RFUEFZCi1HU1RfUlRQX1NJUkVOX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfU0lSRU5fREVQQVkKLUdTVF9SVFBfU0lSRU5fREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfU0lSRU5fREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9TSVJFTl9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfc2lyZW5fZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHNpcmVucGF5PC9GSUxFPgotPFRJVExFPnJ0cHNpcmVucGF5PC9USVRMRT4KLUdzdFJUUFNpcmVuUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUFNpcmVuUGF5Q2xhc3MKLUdTVF9SVFBfU0lSRU5fUEFZCi1HU1RfUlRQX1NJUkVOX1BBWV9DQVNUCi1HU1RfSVNfUlRQX1NJUkVOX1BBWQotR1NUX1JUUF9TSVJFTl9QQVlfQ0xBU1MKLUdTVF9JU19SVFBfU0lSRU5fUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfU0lSRU5fUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9zaXJlbl9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGlsYmNkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBpbGJjZGVwYXk8L1RJVExFPgotR3N0UlRQaUxCQ0RlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJUUGlMQkNEZXBheUNsYXNzCi1HU1RfUlRfUElfTEJDX0RFUEFZCi1HU1RfUlRfUElfTEJDX0RFUEFZX0NBU1QKLUdTVF9JU19SVF9QSV9MQkNfREVQQVkKLUdTVF9SVF9QSV9MQkNfREVQQVlfQ0xBU1MKLUdTVF9JU19SVF9QSV9MQkNfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUX1BJX0xCQ19ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydF9waV9sYmNfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0c3BzcmM8L0ZJTEU+Ci08VElUTEU+cnRzcHNyYzwvVElUTEU+Ci1Hc3RSVFNQU3JjCi1Hc3RSVFNQU3JjQnVmZmVyTW9kZQotR3N0UlRTUFNyY050cFRpbWVTb3VyY2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UlRTUFNyY0NsYXNzCi1HU1RfUlRTUF9TUkMKLUdTVF9SVFNQX1NSQ19DQVNUCi1HU1RfSVNfUlRTUF9TUkMKLUdTVF9SVFNQX1NSQ19DTEFTUwotR1NUX0lTX1JUU1BfU1JDX0NMQVNTCi1HU1RfVFlQRV9SVFNQX1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHNwX3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcmFkaW9hY3R2PC9GSUxFPgotPFRJVExFPnJhZGlvYWN0djwvVElUTEU+Ci1Hc3RSYWRpb2FjVFYKLUdzdFJhZGlvYWNUVkNvbG9yCi1Hc3RSYWRpb2FjVFZNb2RlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJhZGlvYWNUVkNsYXNzCi1HU1RfUkFESU9BQ19UVgotR1NUX1JBRElPQUNfVFZfQ0FTVAotR1NUX0lTX1JBRElPQUNfVFYKLUdTVF9SQURJT0FDX1RWX0NMQVNTCi1HU1RfSVNfUkFESU9BQ19UVl9DTEFTUwotR1NUX1RZUEVfUkFESU9BQ19UVgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9yYWRpb2FjX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1yZXZ0djwvRklMRT4KLTxUSVRMRT5yZXZ0djwvVElUTEU+Ci1Hc3RSZXZUVgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSZXZUVkNsYXNzCi1HU1RfUkVWX1RWCi1HU1RfUkVWX1RWX0NBU1QKLUdTVF9JU19SRVZfVFYKLUdTVF9SRVZfVFZfQ0xBU1MKLUdTVF9JU19SRVZfVFZfQ0xBU1MKLUdTVF9UWVBFX1JFVl9UVgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9yZXZfdHZfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJnYW5hbHlzaXM8L0ZJTEU+Ci08VElUTEU+cmdhbmFseXNpczwvVElUTEU+Ci1Hc3RSZ0FuYWx5c2lzCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJnQW5hbHlzaXNDbGFzcwotR1NUX1JHX0FOQUxZU0lTCi1HU1RfUkdfQU5BTFlTSVNfQ0FTVAotR1NUX0lTX1JHX0FOQUxZU0lTCi1HU1RfUkdfQU5BTFlTSVNfQ0xBU1MKLUdTVF9JU19SR19BTkFMWVNJU19DTEFTUwotR1NUX1RZUEVfUkdfQU5BTFlTSVMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcmdfYW5hbHlzaXNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJnbGltaXRlcjwvRklMRT4KLTxUSVRMRT5yZ2xpbWl0ZXI8L1RJVExFPgotR3N0UmdMaW1pdGVyCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJnTGltaXRlckNsYXNzCi1HU1RfUkdfTElNSVRFUgotR1NUX1JHX0xJTUlURVJfQ0FTVAotR1NUX0lTX1JHX0xJTUlURVIKLUdTVF9SR19MSU1JVEVSX0NMQVNTCi1HU1RfSVNfUkdfTElNSVRFUl9DTEFTUwotR1NUX1RZUEVfUkdfTElNSVRFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9yZ19saW1pdGVyX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1yZ3ZvbHVtZTwvRklMRT4KLTxUSVRMRT5yZ3ZvbHVtZTwvVElUTEU+Ci1Hc3RSZ1ZvbHVtZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSZ1ZvbHVtZUNsYXNzCi1HU1RfUkdfVk9MVU1FCi1HU1RfUkdfVk9MVU1FX0NBU1QKLUdTVF9JU19SR19WT0xVTUUKLUdTVF9SR19WT0xVTUVfQ0xBU1MKLUdTVF9JU19SR19WT0xVTUVfQ0xBU1MKLUdTVF9UWVBFX1JHX1ZPTFVNRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9yZ192b2x1bWVfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJpcHBsZXR2PC9GSUxFPgotPFRJVExFPnJpcHBsZXR2PC9USVRMRT4KLUdzdFJpcHBsZVRWCi1Hc3RSaXBwbGVUVk1vZGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UmlwcGxlVFZDbGFzcwotR1NUX1JJUFBMRV9UVgotR1NUX1JJUFBMRV9UVl9DQVNUCi1HU1RfSVNfUklQUExFX1RWCi1HU1RfUklQUExFX1RWX0NMQVNTCi1HU1RfSVNfUklQUExFX1RWX0NMQVNTCi1HU1RfVFlQRV9SSVBQTEVfVFYKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcmlwcGxlX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ybmRidWZmZXJzaXplPC9GSUxFPgotPFRJVExFPnJuZGJ1ZmZlcnNpemU8L1RJVExFPgotR3N0Um5kQnVmZmVyU2l6ZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSbmRCdWZmZXJTaXplQ2xhc3MKLUdTVF9STkRfQlVGRkVSX1NJWkUKLUdTVF9STkRfQlVGRkVSX1NJWkVfQ0FTVAotR1NUX0lTX1JORF9CVUZGRVJfU0laRQotR1NUX1JORF9CVUZGRVJfU0laRV9DTEFTUwotR1NUX0lTX1JORF9CVUZGRVJfU0laRV9DTEFTUwotR1NUX1RZUEVfUk5EX0JVRkZFUl9TSVpFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3JuZF9idWZmZXJfc2l6ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwYWMzZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwYWMzZGVwYXk8L1RJVExFPgotR3N0UnRwQUMzRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwQUMzRGVwYXlDbGFzcwotR1NUX1JUUF9BX0MzX0RFUEFZCi1HU1RfUlRQX0FfQzNfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9BX0MzX0RFUEFZCi1HU1RfUlRQX0FfQzNfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfQV9DM19ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0FfQzNfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2FfYzNfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGFjM3BheTwvRklMRT4KLTxUSVRMRT5ydHBhYzNwYXk8L1RJVExFPgotR3N0UnRwQUMzUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEFDM1BheUNsYXNzCi1HU1RfUlRQX0FfQzNfUEFZCi1HU1RfUlRQX0FfQzNfUEFZX0NBU1QKLUdTVF9JU19SVFBfQV9DM19QQVkKLUdTVF9SVFBfQV9DM19QQVlfQ0xBU1MKLUdTVF9JU19SVFBfQV9DM19QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9BX0MzX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfYV9jM19wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGFtcmRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGFtcmRlcGF5PC9USVRMRT4KLUdzdFJ0cEFNUkRlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEFNUkRlcGF5Q2xhc3MKLUdTVF9SVFBfQU1SX0RFUEFZCi1HU1RfUlRQX0FNUl9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0FNUl9ERVBBWQotR1NUX1JUUF9BTVJfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfQU1SX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfQU1SX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9hbXJfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGFtcnBheTwvRklMRT4KLTxUSVRMRT5ydHBhbXJwYXk8L1RJVExFPgotR3N0UnRwQU1SUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEFNUlBheUNsYXNzCi1HU1RfUlRQX0FNUl9QQVkKLUdTVF9SVFBfQU1SX1BBWV9DQVNUCi1HU1RfSVNfUlRQX0FNUl9QQVkKLUdTVF9SVFBfQU1SX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9BTVJfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfQU1SX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfYW1yX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwYmluPC9GSUxFPgotPFRJVExFPnJ0cGJpbjwvVElUTEU+Ci1Hc3RSdHBCaW4KLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwQmluQ2xhc3MKLUdTVF9SVFBfQklOCi1HU1RfUlRQX0JJTl9DQVNUCi1HU1RfSVNfUlRQX0JJTgotR1NUX1JUUF9CSU5fQ0xBU1MKLUdTVF9JU19SVFBfQklOX0NMQVNTCi1HU1RfVFlQRV9SVFBfQklOCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9iaW5fZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGNlbHRkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBjZWx0ZGVwYXk8L1RJVExFPgotR3N0UnRwQ0VMVERlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cENFTFREZXBheUNsYXNzCi1HU1RfUlRQX0NFTFRfREVQQVkKLUdTVF9SVFBfQ0VMVF9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0NFTFRfREVQQVkKLUdTVF9SVFBfQ0VMVF9ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9DRUxUX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfQ0VMVF9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfY2VsdF9kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwY2VsdHBheTwvRklMRT4KLTxUSVRMRT5ydHBjZWx0cGF5PC9USVRMRT4KLUdzdFJ0cENFTFRQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwQ0VMVFBheUNsYXNzCi1HU1RfUlRQX0NFTFRfUEFZCi1HU1RfUlRQX0NFTFRfUEFZX0NBU1QKLUdTVF9JU19SVFBfQ0VMVF9QQVkKLUdTVF9SVFBfQ0VMVF9QQVlfQ0xBU1MKLUdTVF9JU19SVFBfQ0VMVF9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9DRUxUX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfY2VsdF9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGR0bWZkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBkdG1mZGVwYXk8L1RJVExFPgotR3N0UnRwRFRNRkRlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cERUTUZEZXBheUNsYXNzCi1HU1RfUlRQX0RUTUZfREVQQVkKLUdTVF9SVFBfRFRNRl9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0RUTUZfREVQQVkKLUdTVF9SVFBfRFRNRl9ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9EVE1GX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfRFRNRl9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfZHRtZl9kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwZzcyMmRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGc3MjJkZXBheTwvVElUTEU+Ci1Hc3RSdHBHNzIyRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwRzcyMkRlcGF5Q2xhc3MKLUdTVF9SVFBfRzcyMl9ERVBBWQotR1NUX1JUUF9HNzIyX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfRzcyMl9ERVBBWQotR1NUX1JUUF9HNzIyX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0c3MjJfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9HNzIyX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9nNzIyX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBnNzIycGF5PC9GSUxFPgotPFRJVExFPnJ0cGc3MjJwYXk8L1RJVExFPgotR3N0UnRwRzcyMlBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBHNzIyUGF5Q2xhc3MKLUdTVF9SVFBfRzcyMl9QQVkKLUdTVF9SVFBfRzcyMl9QQVlfQ0FTVAotR1NUX0lTX1JUUF9HNzIyX1BBWQotR1NUX1JUUF9HNzIyX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9HNzIyX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0c3MjJfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9nNzIyX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwZzcyM2RlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGc3MjNkZXBheTwvVElUTEU+Ci1Hc3RSdHBHNzIzRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwRzcyM0RlcGF5Q2xhc3MKLUdTVF9SVFBfRzcyM19ERVBBWQotR1NUX1JUUF9HNzIzX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfRzcyM19ERVBBWQotR1NUX1JUUF9HNzIzX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0c3MjNfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9HNzIzX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9nNzIzX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBnNzI2ZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwZzcyNmRlcGF5PC9USVRMRT4KLUdzdFJ0cEc3MjZEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBHNzI2RGVwYXlDbGFzcwotR1NUX1JUUF9HNzI2X0RFUEFZCi1HU1RfUlRQX0c3MjZfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9HNzI2X0RFUEFZCi1HU1RfUlRQX0c3MjZfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfRzcyNl9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0c3MjZfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2c3MjZfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGc3MjZwYXk8L0ZJTEU+Ci08VElUTEU+cnRwZzcyNnBheTwvVElUTEU+Ci1Hc3RSdHBHNzI2UGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEc3MjZQYXlDbGFzcwotR1NUX1JUUF9HNzI2X1BBWQotR1NUX1JUUF9HNzI2X1BBWV9DQVNUCi1HU1RfSVNfUlRQX0c3MjZfUEFZCi1HU1RfUlRQX0c3MjZfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0c3MjZfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfRzcyNl9QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2c3MjZfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBnNzI5ZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwZzcyOWRlcGF5PC9USVRMRT4KLUdzdFJ0cEc3MjlEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBHNzI5RGVwYXlDbGFzcwotR1NUX1JUUF9HNzI5X0RFUEFZCi1HU1RfUlRQX0c3MjlfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9HNzI5X0RFUEFZCi1HU1RfUlRQX0c3MjlfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfRzcyOV9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0c3MjlfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2c3MjlfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGdzdGRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGdzdGRlcGF5PC9USVRMRT4KLUdzdFJ0cEdTVERlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEdTVERlcGF5Q2xhc3MKLUdTVF9SVFBfR1NUX0RFUEFZCi1HU1RfUlRQX0dTVF9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0dTVF9ERVBBWQotR1NUX1JUUF9HU1RfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfR1NUX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfR1NUX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9nc3RfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGdzdHBheTwvRklMRT4KLTxUSVRMRT5ydHBnc3RwYXk8L1RJVExFPgotR3N0UnRwR1NUUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEdTVFBheUNsYXNzCi1HU1RfUlRQX0dTVF9QQVkKLUdTVF9SVFBfR1NUX1BBWV9DQVNUCi1HU1RfSVNfUlRQX0dTVF9QQVkKLUdTVF9SVFBfR1NUX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9HU1RfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfR1NUX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfZ3N0X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwaDI2MWRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjFkZXBheTwvVElUTEU+Ci1Hc3RSdHBIMjYxRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwSDI2MURlcGF5Q2xhc3MKLUdTVF9SVFBfSDI2MV9ERVBBWQotR1NUX1JUUF9IMjYxX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfSDI2MV9ERVBBWQotR1NUX1JUUF9IMjYxX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0gyNjFfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9IMjYxX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjYxX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBoMjYxcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjFwYXk8L1RJVExFPgotR3N0UnRwSDI2MVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBIMjYxUGF5Q2xhc3MKLUdTVF9SVFBfSDI2MV9QQVkKLUdTVF9SVFBfSDI2MV9QQVlfQ0FTVAotR1NUX0lTX1JUUF9IMjYxX1BBWQotR1NUX1JUUF9IMjYxX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9IMjYxX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0gyNjFfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjYxX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwaDI2M2RlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjNkZXBheTwvVElUTEU+Ci1Hc3RSdHBIMjYzRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwSDI2M0RlcGF5Q2xhc3MKLUdTVF9SVFBfSDI2M19ERVBBWQotR1NUX1JUUF9IMjYzX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfSDI2M19ERVBBWQotR1NUX1JUUF9IMjYzX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0gyNjNfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9IMjYzX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjYzX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBoMjYzcGRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjNwZGVwYXk8L1RJVExFPgotR3N0UnRwSDI2M1BEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBIMjYzUERlcGF5Q2xhc3MKLUdTVF9SVFBfSDI2M19QX0RFUEFZCi1HU1RfUlRQX0gyNjNfUF9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0gyNjNfUF9ERVBBWQotR1NUX1JUUF9IMjYzX1BfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfSDI2M19QX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfSDI2M19QX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjYzX3BfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGgyNjNwcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjNwcGF5PC9USVRMRT4KLUdzdFJ0cEgyNjNQUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEgyNjNQUGF5Q2xhc3MKLUdTVF9SVFBfSDI2M19QX1BBWQotR1NUX1JUUF9IMjYzX1BfUEFZX0NBU1QKLUdTVF9JU19SVFBfSDI2M19QX1BBWQotR1NUX1JUUF9IMjYzX1BfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0gyNjNfUF9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9IMjYzX1BfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjYzX3BfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBoMjYzcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjNwYXk8L1RJVExFPgotR3N0UnRwSDI2M1BheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBIMjYzUGF5Q2xhc3MKLUdTVF9SVFBfSDI2M19QQVkKLUdTVF9SVFBfSDI2M19QQVlfQ0FTVAotR1NUX0lTX1JUUF9IMjYzX1BBWQotR1NUX1JUUF9IMjYzX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9IMjYzX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0gyNjNfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjYzX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwaDI2NGRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjRkZXBheTwvVElUTEU+Ci1Hc3RSdHBIMjY0RGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwSDI2NERlcGF5Q2xhc3MKLUdTVF9SVFBfSDI2NF9ERVBBWQotR1NUX1JUUF9IMjY0X0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfSDI2NF9ERVBBWQotR1NUX1JUUF9IMjY0X0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0gyNjRfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9IMjY0X0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjY0X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBoMjY0cGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjRwYXk8L1RJVExFPgotR3N0UnRwSDI2NFBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBIMjY0UGF5Q2xhc3MKLUdTVF9SVFBfSDI2NF9QQVkKLUdTVF9SVFBfSDI2NF9QQVlfQ0FTVAotR1NUX0lTX1JUUF9IMjY0X1BBWQotR1NUX1JUUF9IMjY0X1BBWV9DTEFTUwotR1NUX0lTX1JUUF9IMjY0X1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0gyNjRfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjY0X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwaDI2NWRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjVkZXBheTwvVElUTEU+Ci1Hc3RSdHBIMjY1RGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwSDI2NURlcGF5Q2xhc3MKLUdTVF9SVFBfSDI2NV9ERVBBWQotR1NUX1JUUF9IMjY1X0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfSDI2NV9ERVBBWQotR1NUX1JUUF9IMjY1X0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0gyNjVfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9IMjY1X0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjY1X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBoMjY1cGF5PC9GSUxFPgotPFRJVExFPnJ0cGgyNjVwYXk8L1RJVExFPgotR3N0UnRwSDI2NVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBIMjY1UGF5Q2xhc3MKLUdTVF9SVFBfSDI2NV9QQVkKLUdTVF9SVFBfSDI2NV9QQVlfQ0FTVAotR1NUX0lTX1JUUF9IMjY1X1BBWQotR1NUX1JUUF9IMjY1X1BBWV9DTEFTUwotR1NUX0lTX1JUUF9IMjY1X1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0gyNjVfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9oMjY1X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwajJrZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwajJrZGVwYXk8L1RJVExFPgotR3N0UnRwSjJLRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwSjJLRGVwYXlDbGFzcwotR1NUX1JUUF9KMl9LX0RFUEFZCi1HU1RfUlRQX0oyX0tfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9KMl9LX0RFUEFZCi1HU1RfUlRQX0oyX0tfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfSjJfS19ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0oyX0tfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2oyX2tfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGoya3BheTwvRklMRT4KLTxUSVRMRT5ydHBqMmtwYXk8L1RJVExFPgotR3N0UnRwSjJLUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEoyS1BheUNsYXNzCi1HU1RfUlRQX0oyX0tfUEFZCi1HU1RfUlRQX0oyX0tfUEFZX0NBU1QKLUdTVF9JU19SVFBfSjJfS19QQVkKLUdTVF9SVFBfSjJfS19QQVlfQ0xBU1MKLUdTVF9JU19SVFBfSjJfS19QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9KMl9LX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfajJfa19wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGpwZWdkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBqcGVnZGVwYXk8L1RJVExFPgotR3N0UnRwSlBFR0RlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEpQRUdEZXBheUNsYXNzCi1HU1RfUlRQX0pQRUdfREVQQVkKLUdTVF9SVFBfSlBFR19ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0pQRUdfREVQQVkKLUdTVF9SVFBfSlBFR19ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9KUEVHX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfSlBFR19ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfanBlZ19kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwanBlZ3BheTwvRklMRT4KLTxUSVRMRT5ydHBqcGVncGF5PC9USVRMRT4KLUdzdFJ0cEpQRUdQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwSlBFR1BheUNsYXNzCi1HU1RfUlRQX0pQRUdfUEFZCi1HU1RfUlRQX0pQRUdfUEFZX0NBU1QKLUdTVF9JU19SVFBfSlBFR19QQVkKLUdTVF9SVFBfSlBFR19QQVlfQ0xBU1MKLUdTVF9JU19SVFBfSlBFR19QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9KUEVHX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfanBlZ19wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cGppdHRlcmJ1ZmZlcjwvRklMRT4KLTxUSVRMRT5ydHBqaXR0ZXJidWZmZXI8L1RJVExFPgotR3N0UnRwSml0dGVyQnVmZmVyCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEppdHRlckJ1ZmZlckNsYXNzCi1HU1RfUlRQX0pJVFRFUl9CVUZGRVIKLUdTVF9SVFBfSklUVEVSX0JVRkZFUl9DQVNUCi1HU1RfSVNfUlRQX0pJVFRFUl9CVUZGRVIKLUdTVF9SVFBfSklUVEVSX0JVRkZFUl9DTEFTUwotR1NUX0lTX1JUUF9KSVRURVJfQlVGRkVSX0NMQVNTCi1HU1RfVFlQRV9SVFBfSklUVEVSX0JVRkZFUgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwa2x2ZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwa2x2ZGVwYXk8L1RJVExFPgotR3N0UnRwS2x2RGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwS2x2RGVwYXlDbGFzcwotR1NUX1JUUF9LTFZfREVQQVkKLUdTVF9SVFBfS0xWX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfS0xWX0RFUEFZCi1HU1RfUlRQX0tMVl9ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9LTFZfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9LTFZfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2tsdl9kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwa2x2cGF5PC9GSUxFPgotPFRJVExFPnJ0cGtsdnBheTwvVElUTEU+Ci1Hc3RSdHBLbHZQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwS2x2UGF5Q2xhc3MKLUdTVF9SVFBfS0xWX1BBWQotR1NUX1JUUF9LTFZfUEFZX0NBU1QKLUdTVF9JU19SVFBfS0xWX1BBWQotR1NUX1JUUF9LTFZfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0tMVl9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9LTFZfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9rbHZfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBMMTZkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBMMTZkZXBheTwvVElUTEU+Ci1Hc3RSdHBMMTZEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBMMTZEZXBheUNsYXNzCi1HU1RfUlRQX0wxNl9ERVBBWQotR1NUX1JUUF9MMTZfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9MMTZfREVQQVkKLUdTVF9SVFBfTDE2X0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX0wxNl9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0wxNl9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbDE2X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBMMTZwYXk8L0ZJTEU+Ci08VElUTEU+cnRwTDE2cGF5PC9USVRMRT4KLUdzdFJ0cEwxNlBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBMMTZQYXlDbGFzcwotR1NUX1JUUF9MMTZfUEFZCi1HU1RfUlRQX0wxNl9QQVlfQ0FTVAotR1NUX0lTX1JUUF9MMTZfUEFZCi1HU1RfUlRQX0wxNl9QQVlfQ0xBU1MKLUdTVF9JU19SVFBfTDE2X1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX0wxNl9QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX2wxNl9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cEwyNGRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cEwyNGRlcGF5PC9USVRMRT4KLUdzdFJ0cEwyNERlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEwyNERlcGF5Q2xhc3MKLUdTVF9SVFBfTDI0X0RFUEFZCi1HU1RfUlRQX0wyNF9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX0wyNF9ERVBBWQotR1NUX1JUUF9MMjRfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfTDI0X0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfTDI0X0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9sMjRfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cEwyNHBheTwvRklMRT4KLTxUSVRMRT5ydHBMMjRwYXk8L1RJVExFPgotR3N0UnRwTDI0UGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cEwyNFBheUNsYXNzCi1HU1RfUlRQX0wyNF9QQVkKLUdTVF9SVFBfTDI0X1BBWV9DQVNUCi1HU1RfSVNfUlRQX0wyNF9QQVkKLUdTVF9SVFBfTDI0X1BBWV9DTEFTUwotR1NUX0lTX1JUUF9MMjRfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfTDI0X1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbDI0X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwbXAxc2RlcGF5PC9GSUxFPgotPFRJVExFPnJ0cG1wMXNkZXBheTwvVElUTEU+Ci1Hc3RSdHBNUDFTRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwTVAxU0RlcGF5Q2xhc3MKLUdTVF9SVFBfTV9QMV9TX0RFUEFZCi1HU1RfUlRQX01fUDFfU19ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX01fUDFfU19ERVBBWQotR1NUX1JUUF9NX1AxX1NfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfTV9QMV9TX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfTV9QMV9TX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9tX3AxX3NfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cG1wMnRkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBtcDJ0ZGVwYXk8L1RJVExFPgotR3N0UnRwTVAyVERlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cE1QMlREZXBheUNsYXNzCi1HU1RfUlRQX01fUDJfVF9ERVBBWQotR1NUX1JUUF9NX1AyX1RfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9NX1AyX1RfREVQQVkKLUdTVF9SVFBfTV9QMl9UX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX01fUDJfVF9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX01fUDJfVF9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbV9wMl90X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBtcDRhZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwbXA0YWRlcGF5PC9USVRMRT4KLUdzdFJ0cE1QNEFEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBNUDRBRGVwYXlDbGFzcwotR1NUX1JUUF9NX1A0X0FfREVQQVkKLUdTVF9SVFBfTV9QNF9BX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfTV9QNF9BX0RFUEFZCi1HU1RfUlRQX01fUDRfQV9ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9NX1A0X0FfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9NX1A0X0FfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX21fcDRfYV9kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwbXA0YXBheTwvRklMRT4KLTxUSVRMRT5ydHBtcDRhcGF5PC9USVRMRT4KLUdzdFJ0cE1QNEFQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwTVA0QVBheUNsYXNzCi1HU1RfUlRQX01fUDRfQV9QQVkKLUdTVF9SVFBfTV9QNF9BX1BBWV9DQVNUCi1HU1RfSVNfUlRQX01fUDRfQV9QQVkKLUdTVF9SVFBfTV9QNF9BX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9NX1A0X0FfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfTV9QNF9BX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbV9wNF9hX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwbXA0Z2RlcGF5PC9GSUxFPgotPFRJVExFPnJ0cG1wNGdkZXBheTwvVElUTEU+Ci1Hc3RSdHBNUDRHRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwTVA0R0RlcGF5Q2xhc3MKLUdTVF9SVFBfTV9QNF9HX0RFUEFZCi1HU1RfUlRQX01fUDRfR19ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX01fUDRfR19ERVBBWQotR1NUX1JUUF9NX1A0X0dfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfTV9QNF9HX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfTV9QNF9HX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9tX3A0X2dfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cG1wNGdwYXk8L0ZJTEU+Ci08VElUTEU+cnRwbXA0Z3BheTwvVElUTEU+Ci1Hc3RSdHBNUDRHUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cE1QNEdQYXlDbGFzcwotR1NUX1JUUF9NX1A0X0dfUEFZCi1HU1RfUlRQX01fUDRfR19QQVlfQ0FTVAotR1NUX0lTX1JUUF9NX1A0X0dfUEFZCi1HU1RfUlRQX01fUDRfR19QQVlfQ0xBU1MKLUdTVF9JU19SVFBfTV9QNF9HX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX01fUDRfR19QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX21fcDRfZ19wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cG1wNHZkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBtcDR2ZGVwYXk8L1RJVExFPgotR3N0UnRwTVA0VkRlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cE1QNFZEZXBheUNsYXNzCi1HU1RfUlRQX01fUDRfVl9ERVBBWQotR1NUX1JUUF9NX1A0X1ZfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9NX1A0X1ZfREVQQVkKLUdTVF9SVFBfTV9QNF9WX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX01fUDRfVl9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX01fUDRfVl9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbV9wNF92X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBtcDR2cGF5PC9GSUxFPgotPFRJVExFPnJ0cG1wNHZwYXk8L1RJVExFPgotR3N0UnRwTVA0VlBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBNUDRWUGF5Q2xhc3MKLUdTVF9SVFBfTV9QNF9WX1BBWQotR1NUX1JUUF9NX1A0X1ZfUEFZX0NBU1QKLUdTVF9JU19SVFBfTV9QNF9WX1BBWQotR1NUX1JUUF9NX1A0X1ZfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX01fUDRfVl9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9NX1A0X1ZfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9tX3A0X3ZfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBtcGFkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBtcGFkZXBheTwvVElUTEU+Ci1Hc3RSdHBNUEFEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBNUEFEZXBheUNsYXNzCi1HU1RfUlRQX01QQV9ERVBBWQotR1NUX1JUUF9NUEFfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9NUEFfREVQQVkKLUdTVF9SVFBfTVBBX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX01QQV9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX01QQV9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbXBhX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBtcGFwYXk8L0ZJTEU+Ci08VElUTEU+cnRwbXBhcGF5PC9USVRMRT4KLUdzdFJ0cE1QQVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBNUEFQYXlDbGFzcwotR1NUX1JUUF9NUEFfUEFZCi1HU1RfUlRQX01QQV9QQVlfQ0FTVAotR1NUX0lTX1JUUF9NUEFfUEFZCi1HU1RfUlRQX01QQV9QQVlfQ0xBU1MKLUdTVF9JU19SVFBfTVBBX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX01QQV9QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX21wYV9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cG1wYXJvYnVzdGRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cG1wYXJvYnVzdGRlcGF5PC9USVRMRT4KLUdzdFJ0cE1QQVJvYnVzdERlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cE1QQVJvYnVzdERlcGF5Q2xhc3MKLUdTVF9SVFBfTVBBX1JPQlVTVF9ERVBBWQotR1NUX1JUUF9NUEFfUk9CVVNUX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfTVBBX1JPQlVTVF9ERVBBWQotR1NUX1JUUF9NUEFfUk9CVVNUX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX01QQV9ST0JVU1RfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9NUEFfUk9CVVNUX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBtcHZkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBtcHZkZXBheTwvVElUTEU+Ci1Hc3RSdHBNUFZEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBNUFZEZXBheUNsYXNzCi1HU1RfUlRQX01QVl9ERVBBWQotR1NUX1JUUF9NUFZfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9NUFZfREVQQVkKLUdTVF9SVFBfTVBWX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX01QVl9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX01QVl9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfbXB2X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBvcHVzcGF5PC9GSUxFPgotPFRJVExFPnJ0cG9wdXNwYXk8L1RJVExFPgotR3N0UnRwT1BVU1BheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBPUFVTUGF5Q2xhc3MKLUdTVF9SVFBfT1BVU19QQVkKLUdTVF9SVFBfT1BVU19QQVlfQ0FTVAotR1NUX0lTX1JUUF9PUFVTX1BBWQotR1NUX1JUUF9PUFVTX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9PUFVTX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX09QVVNfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9vcHVzX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwcGNtYWRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cHBjbWFkZXBheTwvVElUTEU+Ci1Hc3RSdHBQY21hRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwUGNtYURlcGF5Q2xhc3MKLUdTVF9SVFBfUENNQV9ERVBBWQotR1NUX1JUUF9QQ01BX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfUENNQV9ERVBBWQotR1NUX1JUUF9QQ01BX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1BDTUFfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9QQ01BX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9wY21hX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBwY21hcGF5PC9GSUxFPgotPFRJVExFPnJ0cHBjbWFwYXk8L1RJVExFPgotR3N0UnRwUGNtYVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBQY21hUGF5Q2xhc3MKLUdTVF9SVFBfUENNQV9QQVkKLUdTVF9SVFBfUENNQV9QQVlfQ0FTVAotR1NUX0lTX1JUUF9QQ01BX1BBWQotR1NUX1JUUF9QQ01BX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9QQ01BX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1BDTUFfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9wY21hX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwcGNtdWRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cHBjbXVkZXBheTwvVElUTEU+Ci1Hc3RSdHBQY211RGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwUGNtdURlcGF5Q2xhc3MKLUdTVF9SVFBfUENNVV9ERVBBWQotR1NUX1JUUF9QQ01VX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfUENNVV9ERVBBWQotR1NUX1JUUF9QQ01VX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1BDTVVfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9QQ01VX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9wY211X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBwY211cGF5PC9GSUxFPgotPFRJVExFPnJ0cHBjbXVwYXk8L1RJVExFPgotR3N0UnRwUGNtdVBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBQY211UGF5Q2xhc3MKLUdTVF9SVFBfUENNVV9QQVkKLUdTVF9SVFBfUENNVV9QQVlfQ0FTVAotR1NUX0lTX1JUUF9QQ01VX1BBWQotR1NUX1JUUF9QQ01VX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9QQ01VX1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1BDTVVfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9wY211X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwcHRkZW11eDwvRklMRT4KLTxUSVRMRT5ydHBwdGRlbXV4PC9USVRMRT4KLUdzdFJ0cFB0RGVtdXgKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwUHREZW11eENsYXNzCi1HU1RfUlRQX1BUX0RFTVVYCi1HU1RfUlRQX1BUX0RFTVVYX0NBU1QKLUdTVF9JU19SVFBfUFRfREVNVVgKLUdTVF9SVFBfUFRfREVNVVhfQ0xBU1MKLUdTVF9JU19SVFBfUFRfREVNVVhfQ0xBU1MKLUdTVF9UWVBFX1JUUF9QVF9ERU1VWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfcHRfZGVtdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHFjZWxwZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwcWNlbHBkZXBheTwvVElUTEU+Ci1Hc3RSdHBRQ0VMUERlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFFDRUxQRGVwYXlDbGFzcwotR1NUX1JUUF9RQ0VMUF9ERVBBWQotR1NUX1JUUF9RQ0VMUF9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX1FDRUxQX0RFUEFZCi1HU1RfUlRQX1FDRUxQX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1FDRUxQX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfUUNFTFBfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3FjZWxwX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBxZG0yZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwcWRtMmRlcGF5PC9USVRMRT4KLUdzdFJ0cFFETTJEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBRRE0yRGVwYXlDbGFzcwotR1NUX1JUUF9RRF9NMl9ERVBBWQotR1NUX1JUUF9RRF9NMl9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX1FEX00yX0RFUEFZCi1HU1RfUlRQX1FEX00yX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1FEX00yX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfUURfTTJfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3FkX20yX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBydHhyZWNlaXZlPC9GSUxFPgotPFRJVExFPnJ0cHJ0eHJlY2VpdmU8L1RJVExFPgotR3N0UnRwUnR4UmVjZWl2ZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBSdHhSZWNlaXZlQ2xhc3MKLUdTVF9SVFBfUlRYX1JFQ0VJVkUKLUdTVF9SVFBfUlRYX1JFQ0VJVkVfQ0FTVAotR1NUX0lTX1JUUF9SVFhfUkVDRUlWRQotR1NUX1JUUF9SVFhfUkVDRUlWRV9DTEFTUwotR1NUX0lTX1JUUF9SVFhfUkVDRUlWRV9DTEFTUwotR1NUX1RZUEVfUlRQX1JUWF9SRUNFSVZFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9ydHhfcmVjZWl2ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwcnR4c2VuZDwvRklMRT4KLTxUSVRMRT5ydHBydHhzZW5kPC9USVRMRT4KLUdzdFJ0cFJ0eFNlbmQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwUnR4U2VuZENsYXNzCi1HU1RfUlRQX1JUWF9TRU5ECi1HU1RfUlRQX1JUWF9TRU5EX0NBU1QKLUdTVF9JU19SVFBfUlRYX1NFTkQKLUdTVF9SVFBfUlRYX1NFTkRfQ0xBU1MKLUdTVF9JU19SVFBfUlRYX1NFTkRfQ0xBU1MKLUdTVF9UWVBFX1JUUF9SVFhfU0VORAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfcnR4X3NlbmRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHNiY3BheTwvRklMRT4KLTxUSVRMRT5ydHBzYmNwYXk8L1RJVExFPgotR3N0UnRwU0JDUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFNCQ1BheUNsYXNzCi1HU1RfUlRQX1NCQ19QQVkKLUdTVF9SVFBfU0JDX1BBWV9DQVNUCi1HU1RfSVNfUlRQX1NCQ19QQVkKLUdTVF9SVFBfU0JDX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9TQkNfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfU0JDX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfc2JjX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwc3BlZXhkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBzcGVleGRlcGF5PC9USVRMRT4KLUdzdFJ0cFNQRUVYRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwU1BFRVhEZXBheUNsYXNzCi1HU1RfUlRQX1NQRUVYX0RFUEFZCi1HU1RfUlRQX1NQRUVYX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfU1BFRVhfREVQQVkKLUdTVF9SVFBfU1BFRVhfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfU1BFRVhfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9TUEVFWF9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfc3BlZXhfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHNwZWV4cGF5PC9GSUxFPgotPFRJVExFPnJ0cHNwZWV4cGF5PC9USVRMRT4KLUdzdFJ0cFNQRUVYUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFNQRUVYUGF5Q2xhc3MKLUdTVF9SVFBfU1BFRVhfUEFZCi1HU1RfUlRQX1NQRUVYX1BBWV9DQVNUCi1HU1RfSVNfUlRQX1NQRUVYX1BBWQotR1NUX1JUUF9TUEVFWF9QQVlfQ0xBU1MKLUdTVF9JU19SVFBfU1BFRVhfUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfU1BFRVhfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9zcGVleF9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHN2M3ZkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBzdjN2ZGVwYXk8L1RJVExFPgotR3N0UnRwU1YzVkRlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFNWM1ZEZXBheUNsYXNzCi1HU1RfUlRQX1NfVjNfVl9ERVBBWQotR1NUX1JUUF9TX1YzX1ZfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9TX1YzX1ZfREVQQVkKLUdTVF9SVFBfU19WM19WX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1NfVjNfVl9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1NfVjNfVl9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfc192M192X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBzYmNkZXBheTwvRklMRT4KLTxUSVRMRT5ydHBzYmNkZXBheTwvVElUTEU+Ci1Hc3RSdHBTYmNEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBTYmNEZXBheUNsYXNzCi1HU1RfUlRQX1NCQ19ERVBBWQotR1NUX1JUUF9TQkNfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9TQkNfREVQQVkKLUdTVF9SVFBfU0JDX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1NCQ19ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1NCQ19ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfc2JjX2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBzZXNzaW9uPC9GSUxFPgotPFRJVExFPnJ0cHNlc3Npb248L1RJVExFPgotR3N0UnRwU2Vzc2lvbgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBTZXNzaW9uQ2xhc3MKLUdTVF9SVFBfU0VTU0lPTgotR1NUX1JUUF9TRVNTSU9OX0NBU1QKLUdTVF9JU19SVFBfU0VTU0lPTgotR1NUX1JUUF9TRVNTSU9OX0NMQVNTCi1HU1RfSVNfUlRQX1NFU1NJT05fQ0xBU1MKLUdTVF9UWVBFX1JUUF9TRVNTSU9OCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9zZXNzaW9uX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHBzc3JjZGVtdXg8L0ZJTEU+Ci08VElUTEU+cnRwc3NyY2RlbXV4PC9USVRMRT4KLUdzdFJ0cFNzcmNEZW11eAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBTc3JjRGVtdXhDbGFzcwotR1NUX1JUUF9TU1JDX0RFTVVYCi1HU1RfUlRQX1NTUkNfREVNVVhfQ0FTVAotR1NUX0lTX1JUUF9TU1JDX0RFTVVYCi1HU1RfUlRQX1NTUkNfREVNVVhfQ0xBU1MKLUdTVF9JU19SVFBfU1NSQ19ERU1VWF9DTEFTUwotR1NUX1RZUEVfUlRQX1NTUkNfREVNVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3NzcmNfZGVtdXhfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHN0cmVhbWRlcGF5PC9GSUxFPgotPFRJVExFPnJ0cHN0cmVhbWRlcGF5PC9USVRMRT4KLUdzdFJ0cFN0cmVhbURlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFN0cmVhbURlcGF5Q2xhc3MKLUdTVF9SVFBfU1RSRUFNX0RFUEFZCi1HU1RfUlRQX1NUUkVBTV9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX1NUUkVBTV9ERVBBWQotR1NUX1JUUF9TVFJFQU1fREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfU1RSRUFNX0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfU1RSRUFNX0RFUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF9zdHJlYW1fZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHN0cmVhbXBheTwvRklMRT4KLTxUSVRMRT5ydHBzdHJlYW1wYXk8L1RJVExFPgotR3N0UnRwU3RyZWFtUGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFN0cmVhbVBheUNsYXNzCi1HU1RfUlRQX1NUUkVBTV9QQVkKLUdTVF9SVFBfU1RSRUFNX1BBWV9DQVNUCi1HU1RfSVNfUlRQX1NUUkVBTV9QQVkKLUdTVF9SVFBfU1RSRUFNX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9TVFJFQU1fUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfU1RSRUFNX1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfc3RyZWFtX3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwdGhlb3JhZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwdGhlb3JhZGVwYXk8L1RJVExFPgotR3N0UnRwVGhlb3JhRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwVGhlb3JhRGVwYXlDbGFzcwotR1NUX1JUUF9USEVPUkFfREVQQVkKLUdTVF9SVFBfVEhFT1JBX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfVEhFT1JBX0RFUEFZCi1HU1RfUlRQX1RIRU9SQV9ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9USEVPUkFfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9USEVPUkFfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3RoZW9yYV9kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwdGhlb3JhcGF5PC9GSUxFPgotPFRJVExFPnJ0cHRoZW9yYXBheTwvVElUTEU+Ci1Hc3RSdHBUaGVvcmFQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwVGhlb3JhUGF5Q2xhc3MKLUdTVF9SVFBfVEhFT1JBX1BBWQotR1NUX1JUUF9USEVPUkFfUEFZX0NBU1QKLUdTVF9JU19SVFBfVEhFT1JBX1BBWQotR1NUX1JUUF9USEVPUkFfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1RIRU9SQV9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9USEVPUkFfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF90aGVvcmFfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHB2cDhkZXBheTwvRklMRT4KLTxUSVRMRT5ydHB2cDhkZXBheTwvVElUTEU+Ci1Hc3RSdHBWUDhEZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBWUDhEZXBheUNsYXNzCi1HU1RfUlRQX1ZfUDhfREVQQVkKLUdTVF9SVFBfVl9QOF9ERVBBWV9DQVNUCi1HU1RfSVNfUlRQX1ZfUDhfREVQQVkKLUdTVF9SVFBfVl9QOF9ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9WX1A4X0RFUEFZX0NMQVNTCi1HU1RfVFlQRV9SVFBfVl9QOF9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfdl9wOF9kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwdnA4cGF5PC9GSUxFPgotPFRJVExFPnJ0cHZwOHBheTwvVElUTEU+Ci1Hc3RSdHBWUDhQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwVlA4UGF5Q2xhc3MKLUdTVF9SVFBfVl9QOF9QQVkKLUdTVF9SVFBfVl9QOF9QQVlfQ0FTVAotR1NUX0lTX1JUUF9WX1A4X1BBWQotR1NUX1JUUF9WX1A4X1BBWV9DTEFTUwotR1NUX0lTX1JUUF9WX1A4X1BBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1ZfUDhfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF92X3A4X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwdnA5ZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwdnA5ZGVwYXk8L1RJVExFPgotR3N0UnRwVlA5RGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwVlA5RGVwYXlDbGFzcwotR1NUX1JUUF9WX1A5X0RFUEFZCi1HU1RfUlRQX1ZfUDlfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9WX1A5X0RFUEFZCi1HU1RfUlRQX1ZfUDlfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfVl9QOV9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1ZfUDlfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3ZfcDlfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHZwOXBheTwvRklMRT4KLTxUSVRMRT5ydHB2cDlwYXk8L1RJVExFPgotR3N0UnRwVlA5UGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFZQOVBheUNsYXNzCi1HU1RfUlRQX1ZfUDlfUEFZCi1HU1RfUlRQX1ZfUDlfUEFZX0NBU1QKLUdTVF9JU19SVFBfVl9QOV9QQVkKLUdTVF9SVFBfVl9QOV9QQVlfQ0xBU1MKLUdTVF9JU19SVFBfVl9QOV9QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9WX1A5X1BBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfdl9wOV9wYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHZyYXdkZXBheTwvRklMRT4KLTxUSVRMRT5ydHB2cmF3ZGVwYXk8L1RJVExFPgotR3N0UnRwVlJhd0RlcGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFZSYXdEZXBheUNsYXNzCi1HU1RfUlRQX1ZfUkFXX0RFUEFZCi1HU1RfUlRQX1ZfUkFXX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfVl9SQVdfREVQQVkKLUdTVF9SVFBfVl9SQVdfREVQQVlfQ0xBU1MKLUdTVF9JU19SVFBfVl9SQVdfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9WX1JBV19ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfdl9yYXdfZGVwYXlfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXJ0cHZyYXdwYXk8L0ZJTEU+Ci08VElUTEU+cnRwdnJhd3BheTwvVElUTEU+Ci1Hc3RSdHBWUmF3UGF5Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFJ0cFZSYXdQYXlDbGFzcwotR1NUX1JUUF9WX1JBV19QQVkKLUdTVF9SVFBfVl9SQVdfUEFZX0NBU1QKLUdTVF9JU19SVFBfVl9SQVdfUEFZCi1HU1RfUlRQX1ZfUkFXX1BBWV9DTEFTUwotR1NUX0lTX1JUUF9WX1JBV19QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9WX1JBV19QQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3ZfcmF3X3BheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwdm9yYmlzZGVwYXk8L0ZJTEU+Ci08VElUTEU+cnRwdm9yYmlzZGVwYXk8L1RJVExFPgotR3N0UnRwVm9yYmlzRGVwYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwVm9yYmlzRGVwYXlDbGFzcwotR1NUX1JUUF9WT1JCSVNfREVQQVkKLUdTVF9SVFBfVk9SQklTX0RFUEFZX0NBU1QKLUdTVF9JU19SVFBfVk9SQklTX0RFUEFZCi1HU1RfUlRQX1ZPUkJJU19ERVBBWV9DTEFTUwotR1NUX0lTX1JUUF9WT1JCSVNfREVQQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9WT1JCSVNfREVQQVkKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfcnRwX3ZvcmJpc19kZXBheV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtcnRwdm9yYmlzcGF5PC9GSUxFPgotPFRJVExFPnJ0cHZvcmJpc3BheTwvVElUTEU+Ci1Hc3RSdHBWb3JiaXNQYXkKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0UnRwVm9yYmlzUGF5Q2xhc3MKLUdTVF9SVFBfVk9SQklTX1BBWQotR1NUX1JUUF9WT1JCSVNfUEFZX0NBU1QKLUdTVF9JU19SVFBfVk9SQklTX1BBWQotR1NUX1JUUF9WT1JCSVNfUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1ZPUkJJU19QQVlfQ0xBU1MKLUdTVF9UWVBFX1JUUF9WT1JCSVNfUEFZCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3J0cF92b3JiaXNfcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1ydHB4cXRkZXBheTwvRklMRT4KLTxUSVRMRT5ydHB4cXRkZXBheTwvVElUTEU+Ci1Hc3RSdHBYUVREZXBheQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RSdHBYUVREZXBheUNsYXNzCi1HU1RfUlRQX1hRVF9ERVBBWQotR1NUX1JUUF9YUVRfREVQQVlfQ0FTVAotR1NUX0lTX1JUUF9YUVRfREVQQVkKLUdTVF9SVFBfWFFUX0RFUEFZX0NMQVNTCi1HU1RfSVNfUlRQX1hRVF9ERVBBWV9DTEFTUwotR1NUX1RZUEVfUlRQX1hRVF9ERVBBWQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9ydHBfeHF0X2RlcGF5X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1zbXB0ZTwvRklMRT4KLTxUSVRMRT5zbXB0ZTwvVElUTEU+Ci1Hc3RTTVBURQotR3N0U01QVEVUcmFuc2l0aW9uVHlwZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RTTVBURUNsYXNzCi1HU1RfU01QVEUKLUdTVF9TTVBURV9DQVNUCi1HU1RfSVNfU01QVEUKLUdTVF9TTVBURV9DTEFTUwotR1NUX0lTX1NNUFRFX0NMQVNTCi1HU1RfVFlQRV9TTVBURQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zbXB0ZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtc21wdGVhbHBoYTwvRklMRT4KLTxUSVRMRT5zbXB0ZWFscGhhPC9USVRMRT4KLUdzdFNNUFRFQWxwaGEKLUdzdFNNUFRFQWxwaGFUcmFuc2l0aW9uVHlwZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RTTVBURUFscGhhQ2xhc3MKLUdTVF9TTVBURV9BTFBIQQotR1NUX1NNUFRFX0FMUEhBX0NBU1QKLUdTVF9JU19TTVBURV9BTFBIQQotR1NUX1NNUFRFX0FMUEhBX0NMQVNTCi1HU1RfSVNfU01QVEVfQUxQSEFfQ0xBU1MKLUdTVF9UWVBFX1NNUFRFX0FMUEhBCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3NtcHRlX2FscGhhX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1zYmNwYXJzZTwvRklMRT4KLTxUSVRMRT5zYmNwYXJzZTwvVElUTEU+Ci1Hc3RTYmNQYXJzZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RTYmNQYXJzZUNsYXNzCi1HU1RfU0JDX1BBUlNFCi1HU1RfU0JDX1BBUlNFX0NBU1QKLUdTVF9JU19TQkNfUEFSU0UKLUdTVF9TQkNfUEFSU0VfQ0xBU1MKLUdTVF9JU19TQkNfUEFSU0VfQ0xBU1MKLUdTVF9UWVBFX1NCQ19QQVJTRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zYmNfcGFyc2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNjYWxldGVtcG88L0ZJTEU+Ci08VElUTEU+c2NhbGV0ZW1wbzwvVElUTEU+Ci1Hc3RTY2FsZXRlbXBvCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFNjYWxldGVtcG9DbGFzcwotR1NUX1NDQUxFVEVNUE8KLUdTVF9TQ0FMRVRFTVBPX0NBU1QKLUdTVF9JU19TQ0FMRVRFTVBPCi1HU1RfU0NBTEVURU1QT19DTEFTUwotR1NUX0lTX1NDQUxFVEVNUE9fQ0xBU1MKLUdTVF9UWVBFX1NDQUxFVEVNUE8KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfc2NhbGV0ZW1wb19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtc2hhZ2FkZWxpY3R2PC9GSUxFPgotPFRJVExFPnNoYWdhZGVsaWN0djwvVElUTEU+Ci1Hc3RTaGFnYWRlbGljVFYKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0U2hhZ2FkZWxpY1RWQ2xhc3MKLUdTVF9TSEFHQURFTElDX1RWCi1HU1RfU0hBR0FERUxJQ19UVl9DQVNUCi1HU1RfSVNfU0hBR0FERUxJQ19UVgotR1NUX1NIQUdBREVMSUNfVFZfQ0xBU1MKLUdTVF9JU19TSEFHQURFTElDX1RWX0NMQVNTCi1HU1RfVFlQRV9TSEFHQURFTElDX1RWCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3NoYWdhZGVsaWNfdHZfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNoYXBld2lwZTwvRklMRT4KLTxUSVRMRT5zaGFwZXdpcGU8L1RJVExFPgotR3N0U2hhcGVXaXBlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFNoYXBlV2lwZUNsYXNzCi1HU1RfU0hBUEVfV0lQRQotR1NUX1NIQVBFX1dJUEVfQ0FTVAotR1NUX0lTX1NIQVBFX1dJUEUKLUdTVF9TSEFQRV9XSVBFX0NMQVNTCi1HU1RfSVNfU0hBUEVfV0lQRV9DTEFTUwotR1NUX1RZUEVfU0hBUEVfV0lQRQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zaGFwZV93aXBlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1zaG91dDJzZW5kPC9GSUxFPgotPFRJVExFPnNob3V0MnNlbmQ8L1RJVExFPgotR3N0U2hvdXQyc2VuZAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RTaG91dDJzZW5kQ2xhc3MKLUdTVF9TSE9VVDJTRU5ECi1HU1RfU0hPVVQyU0VORF9DQVNUCi1HU1RfSVNfU0hPVVQyU0VORAotR1NUX1NIT1VUMlNFTkRfQ0xBU1MKLUdTVF9JU19TSE9VVDJTRU5EX0NMQVNTCi1HU1RfVFlQRV9TSE9VVDJTRU5ECi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3Nob3V0MnNlbmRfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNvdXBodHRwc3JjPC9GSUxFPgotPFRJVExFPnNvdXBodHRwc3JjPC9USVRMRT4KLUdzdFNvdXBIVFRQU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFNvdXBIVFRQU3JjQ2xhc3MKLUdTVF9TT1VQX0hUVFBfU1JDCi1HU1RfU09VUF9IVFRQX1NSQ19DQVNUCi1HU1RfSVNfU09VUF9IVFRQX1NSQwotR1NUX1NPVVBfSFRUUF9TUkNfQ0xBU1MKLUdTVF9JU19TT1VQX0hUVFBfU1JDX0NMQVNTCi1HU1RfVFlQRV9TT1VQX0hUVFBfU1JDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNvdXBodHRwY2xpZW50c2luazwvRklMRT4KLTxUSVRMRT5zb3VwaHR0cGNsaWVudHNpbms8L1RJVExFPgotR3N0U291cEh0dHBDbGllbnRTaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFNvdXBIdHRwQ2xpZW50U2lua0NsYXNzCi1HU1RfU09VUF9IVFRQX0NMSUVOVF9TSU5LCi1HU1RfU09VUF9IVFRQX0NMSUVOVF9TSU5LX0NBU1QKLUdTVF9JU19TT1VQX0hUVFBfQ0xJRU5UX1NJTksKLUdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTktfQ0xBU1MKLUdTVF9JU19TT1VQX0hUVFBfQ0xJRU5UX1NJTktfQ0xBU1MKLUdTVF9UWVBFX1NPVVBfSFRUUF9DTElFTlRfU0lOSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNwZWN0cnVtPC9GSUxFPgotPFRJVExFPnNwZWN0cnVtPC9USVRMRT4KLUdzdFNwZWN0cnVtCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFNwZWN0cnVtQ2xhc3MKLUdTVF9TUEVDVFJVTQotR1NUX1NQRUNUUlVNX0NBU1QKLUdTVF9JU19TUEVDVFJVTQotR1NUX1NQRUNUUlVNX0NMQVNTCi1HU1RfSVNfU1BFQ1RSVU1fQ0xBU1MKLUdTVF9UWVBFX1NQRUNUUlVNCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3NwZWN0cnVtX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1zcGVleGRlYzwvRklMRT4KLTxUSVRMRT5zcGVleGRlYzwvVElUTEU+Ci1Hc3RTcGVleERlYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RTcGVleERlY0NsYXNzCi1HU1RfU1BFRVhfREVDCi1HU1RfU1BFRVhfREVDX0NBU1QKLUdTVF9JU19TUEVFWF9ERUMKLUdTVF9TUEVFWF9ERUNfQ0xBU1MKLUdTVF9JU19TUEVFWF9ERUNfQ0xBU1MKLUdTVF9UWVBFX1NQRUVYX0RFQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zcGVleF9kZWNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNwZWV4ZW5jPC9GSUxFPgotPFRJVExFPnNwZWV4ZW5jPC9USVRMRT4KLUdzdFNwZWV4RW5jCi1Hc3RTcGVleEVuY01vZGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0U3BlZXhFbmNDbGFzcwotR1NUX1NQRUVYX0VOQwotR1NUX1NQRUVYX0VOQ19DQVNUCi1HU1RfSVNfU1BFRVhfRU5DCi1HU1RfU1BFRVhfRU5DX0NMQVNTCi1HU1RfSVNfU1BFRVhfRU5DX0NMQVNTCi1HU1RfVFlQRV9TUEVFWF9FTkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfc3BlZXhfZW5jX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC1zcGxpdGZpbGVzcmM8L0ZJTEU+Ci08VElUTEU+c3BsaXRmaWxlc3JjPC9USVRMRT4KLUdzdFNwbGl0RmlsZVNyYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RTcGxpdEZpbGVTcmNDbGFzcwotR1NUX1NQTElUX0ZJTEVfU1JDCi1HU1RfU1BMSVRfRklMRV9TUkNfQ0FTVAotR1NUX0lTX1NQTElUX0ZJTEVfU1JDCi1HU1RfU1BMSVRfRklMRV9TUkNfQ0xBU1MKLUdTVF9JU19TUExJVF9GSUxFX1NSQ19DTEFTUwotR1NUX1RZUEVfU1BMSVRfRklMRV9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfc3BsaXRfZmlsZV9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXNwbGl0bXV4c2luazwvRklMRT4KLTxUSVRMRT5zcGxpdG11eHNpbms8L1RJVExFPgotR3N0U3BsaXRNdXhTaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFNwbGl0TXV4U2lua0NsYXNzCi1HU1RfU1BMSVRfTVVYX1NJTksKLUdTVF9TUExJVF9NVVhfU0lOS19DQVNUCi1HU1RfSVNfU1BMSVRfTVVYX1NJTksKLUdTVF9TUExJVF9NVVhfU0lOS19DTEFTUwotR1NUX0lTX1NQTElUX01VWF9TSU5LX0NMQVNTCi1HU1RfVFlQRV9TUExJVF9NVVhfU0lOSwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF9zcGxpdF9tdXhfc2lua19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtc3BsaXRtdXhzcmM8L0ZJTEU+Ci08VElUTEU+c3BsaXRtdXhzcmM8L1RJVExFPgotR3N0U3BsaXRNdXhTcmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0U3BsaXRNdXhTcmNDbGFzcwotR1NUX1NQTElUX01VWF9TUkMKLUdTVF9TUExJVF9NVVhfU1JDX0NBU1QKLUdTVF9JU19TUExJVF9NVVhfU1JDCi1HU1RfU1BMSVRfTVVYX1NSQ19DTEFTUwotR1NUX0lTX1NQTElUX01VWF9TUkNfQ0xBU1MKLUdTVF9UWVBFX1NQTElUX01VWF9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfc3BsaXRfbXV4X3NyY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtc3RyZWFrdHY8L0ZJTEU+Ci08VElUTEU+c3RyZWFrdHY8L1RJVExFPgotR3N0U3RyZWFrVFYKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0U3RyZWFrVFZDbGFzcwotR1NUX1NUUkVBS19UVgotR1NUX1NUUkVBS19UVl9DQVNUCi1HU1RfSVNfU1RSRUFLX1RWCi1HU1RfU1RSRUFLX1RWX0NMQVNTCi1HU1RfSVNfU1RSRUFLX1RWX0NMQVNTCi1HU1RfVFlQRV9TVFJFQUtfVFYKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfc3RyZWFrX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC10YWdpbmplY3Q8L0ZJTEU+Ci08VElUTEU+dGFnaW5qZWN0PC9USVRMRT4KLUdzdFRhZ0luamVjdAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RUYWdJbmplY3RDbGFzcwotR1NUX1RBR19JTkpFQ1QKLUdTVF9UQUdfSU5KRUNUX0NBU1QKLUdTVF9JU19UQUdfSU5KRUNUCi1HU1RfVEFHX0lOSkVDVF9DTEFTUwotR1NUX0lTX1RBR19JTkpFQ1RfQ0xBU1MKLUdTVF9UWVBFX1RBR19JTkpFQ1QKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdGFnX2luamVjdF9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdGVzdHNpbms8L0ZJTEU+Ci08VElUTEU+dGVzdHNpbms8L1RJVExFPgotR3N0VGVzdAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RUZXN0Q2xhc3MKLUdTVF9URVNUCi1HU1RfVEVTVF9DQVNUCi1HU1RfSVNfVEVTVAotR1NUX1RFU1RfQ0xBU1MKLUdTVF9JU19URVNUX0NMQVNTCi1HU1RfVFlQRV9URVNUCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3Rlc3RfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXVkcHNpbms8L0ZJTEU+Ci08VElUTEU+dWRwc2luazwvVElUTEU+Ci1Hc3RVRFBTaW5rCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFVEUFNpbmtDbGFzcwotR1NUX1VEUF9TSU5LCi1HU1RfVURQX1NJTktfQ0FTVAotR1NUX0lTX1VEUF9TSU5LCi1HU1RfVURQX1NJTktfQ0xBU1MKLUdTVF9JU19VRFBfU0lOS19DTEFTUwotR1NUX1RZUEVfVURQX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdWRwX3NpbmtfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXVkcHNyYzwvRklMRT4KLTxUSVRMRT51ZHBzcmM8L1RJVExFPgotR3N0VURQU3JjCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFVEUFNyY0NsYXNzCi1HU1RfVURQX1NSQwotR1NUX1VEUF9TUkNfQ0FTVAotR1NUX0lTX1VEUF9TUkMKLUdTVF9VRFBfU1JDX0NMQVNTCi1HU1RfSVNfVURQX1NSQ19DTEFTUwotR1NUX1RZUEVfVURQX1NSQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF91ZHBfc3JjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12NGwycmFkaW88L0ZJTEU+Ci08VElUTEU+djRsMnJhZGlvPC9USVRMRT4KLUdzdFY0bDJSYWRpbwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RWNGwyUmFkaW9DbGFzcwotR1NUX1Y0TDJfUkFESU8KLUdTVF9WNEwyX1JBRElPX0NBU1QKLUdTVF9JU19WNEwyX1JBRElPCi1HU1RfVjRMMl9SQURJT19DTEFTUwotR1NUX0lTX1Y0TDJfUkFESU9fQ0xBU1MKLUdTVF9UWVBFX1Y0TDJfUkFESU8KLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdjRsMl9yYWRpb19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdjRsMnNpbms8L0ZJTEU+Ci08VElUTEU+djRsMnNpbms8L1RJVExFPgotR3N0VjRsMlNpbmsKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0VjRsMlNpbmtDbGFzcwotR1NUX1Y0TDJfU0lOSwotR1NUX1Y0TDJfU0lOS19DQVNUCi1HU1RfSVNfVjRMMl9TSU5LCi1HU1RfVjRMMl9TSU5LX0NMQVNTCi1HU1RfSVNfVjRMMl9TSU5LX0NMQVNTCi1HU1RfVFlQRV9WNEwyX1NJTksKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdjRsMl9zaW5rX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12NGwyc3JjPC9GSUxFPgotPFRJVExFPnY0bDJzcmM8L1RJVExFPgotR3N0VjRsMlNyYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RWNGwyU3JjQ2xhc3MKLUdTVF9WNEwyX1NSQwotR1NUX1Y0TDJfU1JDX0NBU1QKLUdTVF9JU19WNEwyX1NSQwotR1NUX1Y0TDJfU1JDX0NMQVNTCi1HU1RfSVNfVjRMMl9TUkNfQ0xBU1MKLUdTVF9UWVBFX1Y0TDJfU1JDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3Y0bDJfc3JjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12cDhkZWM8L0ZJTEU+Ci08VElUTEU+dnA4ZGVjPC9USVRMRT4KLUdzdFZQOERlYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RWUDhEZWNDbGFzcwotR1NUX1ZfUDhfREVDCi1HU1RfVl9QOF9ERUNfQ0FTVAotR1NUX0lTX1ZfUDhfREVDCi1HU1RfVl9QOF9ERUNfQ0xBU1MKLUdTVF9JU19WX1A4X0RFQ19DTEFTUwotR1NUX1RZUEVfVl9QOF9ERUMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfdl9wOF9kZWNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXZwOGVuYzwvRklMRT4KLTxUSVRMRT52cDhlbmM8L1RJVExFPgotR3N0VlA4RW5jCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFZQOEVuY0NsYXNzCi1HU1RfVl9QOF9FTkMKLUdTVF9WX1A4X0VOQ19DQVNUCi1HU1RfSVNfVl9QOF9FTkMKLUdTVF9WX1A4X0VOQ19DTEFTUwotR1NUX0lTX1ZfUDhfRU5DX0NMQVNTCi1HU1RfVFlQRV9WX1A4X0VOQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF92X3A4X2VuY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdnA5ZGVjPC9GSUxFPgotPFRJVExFPnZwOWRlYzwvVElUTEU+Ci1Hc3RWUDlEZWMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0VlA5RGVjQ2xhc3MKLUdTVF9WX1A5X0RFQwotR1NUX1ZfUDlfREVDX0NBU1QKLUdTVF9JU19WX1A5X0RFQwotR1NUX1ZfUDlfREVDX0NMQVNTCi1HU1RfSVNfVl9QOV9ERUNfQ0xBU1MKLUdTVF9UWVBFX1ZfUDlfREVDCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3ZfcDlfZGVjX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12cDllbmM8L0ZJTEU+Ci08VElUTEU+dnA5ZW5jPC9USVRMRT4KLUdzdFZQOUVuYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RWUDlFbmNDbGFzcwotR1NUX1ZfUDlfRU5DCi1HU1RfVl9QOV9FTkNfQ0FTVAotR1NUX0lTX1ZfUDlfRU5DCi1HU1RfVl9QOV9FTkNfQ0xBU1MKLUdTVF9JU19WX1A5X0VOQ19DTEFTUwotR1NUX1RZUEVfVl9QOV9FTkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfdl9wOV9lbmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXZlcnRpZ290djwvRklMRT4KLTxUSVRMRT52ZXJ0aWdvdHY8L1RJVExFPgotR3N0VmVydGlnb1RWCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFZlcnRpZ29UVkNsYXNzCi1HU1RfVkVSVElHT19UVgotR1NUX1ZFUlRJR09fVFZfQ0FTVAotR1NUX0lTX1ZFUlRJR09fVFYKLUdTVF9WRVJUSUdPX1RWX0NMQVNTCi1HU1RfSVNfVkVSVElHT19UVl9DTEFTUwotR1NUX1RZUEVfVkVSVElHT19UVgotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF92ZXJ0aWdvX3R2X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12aWRlb2JhbGFuY2U8L0ZJTEU+Ci08VElUTEU+dmlkZW9iYWxhbmNlPC9USVRMRT4KLUdzdFZpZGVvQmFsYW5jZQotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RWaWRlb0JhbGFuY2VDbGFzcwotR1NUX1ZJREVPX0JBTEFOQ0UKLUdTVF9WSURFT19CQUxBTkNFX0NBU1QKLUdTVF9JU19WSURFT19CQUxBTkNFCi1HU1RfVklERU9fQkFMQU5DRV9DTEFTUwotR1NUX0lTX1ZJREVPX0JBTEFOQ0VfQ0xBU1MKLUdTVF9UWVBFX1ZJREVPX0JBTEFOQ0UKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdmlkZW9fYmFsYW5jZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdmlkZW9ib3g8L0ZJTEU+Ci08VElUTEU+dmlkZW9ib3g8L1RJVExFPgotR3N0VmlkZW9Cb3gKLUdzdFZpZGVvQm94RmlsbAotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RWaWRlb0JveENsYXNzCi1HU1RfVklERU9fQk9YCi1HU1RfVklERU9fQk9YX0NBU1QKLUdTVF9JU19WSURFT19CT1gKLUdTVF9WSURFT19CT1hfQ0xBU1MKLUdTVF9JU19WSURFT19CT1hfQ0xBU1MKLUdTVF9UWVBFX1ZJREVPX0JPWAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF92aWRlb19ib3hfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXZpZGVvY3JvcDwvRklMRT4KLTxUSVRMRT52aWRlb2Nyb3A8L1RJVExFPgotR3N0VmlkZW9Dcm9wCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFZpZGVvQ3JvcENsYXNzCi1HU1RfVklERU9fQ1JPUAotR1NUX1ZJREVPX0NST1BfQ0FTVAotR1NUX0lTX1ZJREVPX0NST1AKLUdTVF9WSURFT19DUk9QX0NMQVNTCi1HU1RfSVNfVklERU9fQ1JPUF9DTEFTUwotR1NUX1RZUEVfVklERU9fQ1JPUAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF92aWRlb19jcm9wX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12aWRlb2ZsaXA8L0ZJTEU+Ci08VElUTEU+dmlkZW9mbGlwPC9USVRMRT4KLUdzdFZpZGVvRmxpcAotR3N0VmlkZW9GbGlwTWV0aG9kCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFZpZGVvRmxpcENsYXNzCi1HU1RfVklERU9fRkxJUAotR1NUX1ZJREVPX0ZMSVBfQ0FTVAotR1NUX0lTX1ZJREVPX0ZMSVAKLUdTVF9WSURFT19GTElQX0NMQVNTCi1HU1RfSVNfVklERU9fRkxJUF9DTEFTUwotR1NUX1RZUEVfVklERU9fRkxJUAotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF92aWRlb19mbGlwX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC12aWRlb21lZGlhbjwvRklMRT4KLTxUSVRMRT52aWRlb21lZGlhbjwvVElUTEU+Ci1Hc3RWaWRlb01lZGlhbgotR3N0VmlkZW9NZWRpYW5TaXplCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFZpZGVvTWVkaWFuQ2xhc3MKLUdTVF9WSURFT19NRURJQU4KLUdTVF9WSURFT19NRURJQU5fQ0FTVAotR1NUX0lTX1ZJREVPX01FRElBTgotR1NUX1ZJREVPX01FRElBTl9DTEFTUwotR1NUX0lTX1ZJREVPX01FRElBTl9DTEFTUwotR1NUX1RZUEVfVklERU9fTUVESUFOCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3ZpZGVvX21lZGlhbl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtdmlkZW9taXhlcjwvRklMRT4KLTxUSVRMRT52aWRlb21peGVyPC9USVRMRT4KLUdzdFZpZGVvTWl4ZXIyCi1Hc3RWaWRlb01peGVyMkJhY2tncm91bmQKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0VmlkZW9NaXhlcjJDbGFzcwotR1NUX1ZJREVPX01JWEVSMgotR1NUX1ZJREVPX01JWEVSMl9DQVNUCi1HU1RfSVNfVklERU9fTUlYRVIyCi1HU1RfVklERU9fTUlYRVIyX0NMQVNTCi1HU1RfSVNfVklERU9fTUlYRVIyX0NMQVNTCi1HU1RfVFlQRV9WSURFT19NSVhFUjIKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfdmlkZW9fbWl4ZXIyX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC13YXJwdHY8L0ZJTEU+Ci08VElUTEU+d2FycHR2PC9USVRMRT4KLUdzdFdhcnBUVgotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RXYXJwVFZDbGFzcwotR1NUX1dBUlBfVFYKLUdTVF9XQVJQX1RWX0NBU1QKLUdTVF9JU19XQVJQX1RWCi1HU1RfV0FSUF9UVl9DTEFTUwotR1NUX0lTX1dBUlBfVFZfQ0xBU1MKLUdTVF9UWVBFX1dBUlBfVFYKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfd2FycF90dl9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtd2F2ZWZvcm1zaW5rPC9GSUxFPgotPFRJVExFPndhdmVmb3Jtc2luazwvVElUTEU+Ci1Hc3RXYXZlRm9ybVNpbmsKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0V2F2ZUZvcm1TaW5rQ2xhc3MKLUdTVF9JU19XQVZFRk9STV9TSU5LCi1HU1RfSVNfV0FWRUZPUk1fU0lOS19DTEFTUwotR1NUX1dBVkVGT1JNX1NJTksKLUdTVF9XQVZFRk9STV9TSU5LX0NMQVNTCi1HU1RfVFlQRV9XQVZFRk9STV9TSU5LCi1nc3Rfd2F2ZWZvcm1fc2lua19nZXRfdHlwZQotV0FWRV9GT1JNQVRfOTZNMDgKLVdBVkVfRk9STUFUXzk2TTE2Ci1XQVZFX0ZPUk1BVF85NlMwOAotV0FWRV9GT1JNQVRfOTZTMTYKLUJVRkZFUl9DT1VOVAotQlVGRkVSX1NJWkUKLUVSUk9SX0xFTkdUSAotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtd2F2ZW5jPC9GSUxFPgotPFRJVExFPndhdmVuYzwvVElUTEU+Ci1Hc3RXYXZFbmMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0V2F2RW5jQ2xhc3MKLUdTVF9XQVZfRU5DCi1HU1RfV0FWX0VOQ19DQVNUCi1HU1RfSVNfV0FWX0VOQwotR1NUX1dBVl9FTkNfQ0xBU1MKLUdTVF9JU19XQVZfRU5DX0NMQVNTCi1HU1RfVFlQRV9XQVZfRU5DCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3dhdl9lbmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXdhdnBhcnNlPC9GSUxFPgotPFRJVExFPndhdnBhcnNlPC9USVRMRT4KLUdzdFdhdlBhcnNlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFdhdlBhcnNlQ2xhc3MKLUdTVF9XQVZfUEFSU0UKLUdTVF9XQVZfUEFSU0VfQ0FTVAotR1NUX0lTX1dBVl9QQVJTRQotR1NUX1dBVl9QQVJTRV9DTEFTUwotR1NUX0lTX1dBVl9QQVJTRV9DTEFTUwotR1NUX1RZUEVfV0FWX1BBUlNFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3dhdl9wYXJzZV9nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtd2F2cGFja2RlYzwvRklMRT4KLTxUSVRMRT53YXZwYWNrZGVjPC9USVRMRT4KLUdzdFdhdnBhY2tEZWMKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0V2F2cGFja0RlY0NsYXNzCi1HU1RfV0FWUEFDS19ERUMKLUdTVF9XQVZQQUNLX0RFQ19DQVNUCi1HU1RfSVNfV0FWUEFDS19ERUMKLUdTVF9XQVZQQUNLX0RFQ19DTEFTUwotR1NUX0lTX1dBVlBBQ0tfREVDX0NMQVNTCi1HU1RfVFlQRV9XQVZQQUNLX0RFQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF93YXZwYWNrX2RlY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtd2F2cGFja2VuYzwvRklMRT4KLTxUSVRMRT53YXZwYWNrZW5jPC9USVRMRT4KLUdzdFdhdnBhY2tFbmMKLUdzdFdhdnBhY2tFbmNDb3JyZWN0aW9uTW9kZQotR3N0V2F2cGFja0VuY0pTTW9kZQotR3N0V2F2cGFja0VuY01vZGUKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0V2F2cGFja0VuY0NsYXNzCi1HU1RfV0FWUEFDS19FTkMKLUdTVF9XQVZQQUNLX0VOQ19DQVNUCi1HU1RfSVNfV0FWUEFDS19FTkMKLUdTVF9XQVZQQUNLX0VOQ19DTEFTUwotR1NUX0lTX1dBVlBBQ0tfRU5DX0NMQVNTCi1HU1RfVFlQRV9XQVZQQUNLX0VOQwotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF93YXZwYWNrX2VuY19nZXRfdHlwZQotPC9TRUNUSU9OPgotCi08U0VDVElPTj4KLTxGSUxFPmVsZW1lbnQtd2F2cGFja3BhcnNlPC9GSUxFPgotPFRJVExFPndhdnBhY2twYXJzZTwvVElUTEU+Ci1Hc3RXYXZwYWNrUGFyc2UKLTxTVUJTRUNUSU9OIFN0YW5kYXJkPgotR3N0V2F2cGFja1BhcnNlQ2xhc3MKLUdTVF9XQVZQQUNLX1BBUlNFCi1HU1RfV0FWUEFDS19QQVJTRV9DQVNUCi1HU1RfSVNfV0FWUEFDS19QQVJTRQotR1NUX1dBVlBBQ0tfUEFSU0VfQ0xBU1MKLUdTVF9JU19XQVZQQUNLX1BBUlNFX0NMQVNTCi1HU1RfVFlQRV9XQVZQQUNLX1BBUlNFCi08U1VCU0VDVElPTiBQcml2YXRlPgotZ3N0X3dhdnBhY2tfcGFyc2VfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXdlYm1tdXg8L0ZJTEU+Ci08VElUTEU+d2VibW11eDwvVElUTEU+Ci1Hc3RXZWJNTXV4Ci08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFdlYk1NdXhDbGFzcwotR1NUX1dFQl9NX01VWAotR1NUX1dFQl9NX01VWF9DQVNUCi1HU1RfSVNfV0VCX01fTVVYCi1HU1RfV0VCX01fTVVYX0NMQVNTCi1HU1RfSVNfV0VCX01fTVVYX0NMQVNTCi1HU1RfVFlQRV9XRUJfTV9NVVgKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3Rfd2ViX21fbXV4X2dldF90eXBlCi08L1NFQ1RJT04+Ci0KLTxTRUNUSU9OPgotPEZJTEU+ZWxlbWVudC14aW1hZ2VzcmM8L0ZJTEU+Ci08VElUTEU+eGltYWdlc3JjPC9USVRMRT4KLUdzdFhJbWFnZVNyYwotPFNVQlNFQ1RJT04gU3RhbmRhcmQ+Ci1Hc3RYSW1hZ2VTcmNDbGFzcwotR1NUX1hfSU1BR0VfU1JDCi1HU1RfWF9JTUFHRV9TUkNfQ0FTVAotR1NUX0lTX1hfSU1BR0VfU1JDCi1HU1RfWF9JTUFHRV9TUkNfQ0xBU1MKLUdTVF9JU19YX0lNQUdFX1NSQ19DTEFTUwotR1NUX1RZUEVfWF9JTUFHRV9TUkMKLTxTVUJTRUNUSU9OIFByaXZhdGU+Ci1nc3RfeF9pbWFnZV9zcmNfZ2V0X3R5cGUKLTwvU0VDVElPTj4KLQotPFNFQ1RJT04+Ci08RklMRT5lbGVtZW50LXk0bWVuYzwvRklMRT4KLTxUSVRMRT55NG1lbmM8L1RJVExFPgotR3N0WTRtRW5jb2RlCi08U1VCU0VDVElPTiBTdGFuZGFyZD4KLUdzdFk0bUVuY29kZUNsYXNzCi1HU1RfWTRNX0VOQ09ERQotR1NUX1k0TV9FTkNPREVfQ0FTVAotR1NUX0lTX1k0TV9FTkNPREUKLUdTVF9ZNE1fRU5DT0RFX0NMQVNTCi1HU1RfSVNfWTRNX0VOQ09ERV9DTEFTUwotR1NUX1RZUEVfWTRNX0VOQ09ERQotPFNVQlNFQ1RJT04gUHJpdmF0ZT4KLWdzdF95NG1fZW5jb2RlX2dldF90eXBlCi08L1NFQ1RJT04+Ci0KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJncyBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuYXJncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI5Y2ZmMy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmFyZ3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMzk2MCArMCwwIEBACi08QVJHPgotPE5BTUU+R3N0SWlyRXF1YWxpemVyMTBCYW5kczo6YmFuZDA8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlstMjQsMTJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz4yOSBIejwvTklDSz4KLTxCTFVSQj5nYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgMjkgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOjpiYW5kMTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Wy0yNCwxMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPjU5IEh6PC9OSUNLPgotPEJMVVJCPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCA1OSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElpckVxdWFsaXplcjEwQmFuZHM6OmJhbmQyPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTI0LDEyXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+MTE5IEh6PC9OSUNLPgotPEJMVVJCPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAxMTkgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOjpiYW5kMzwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Wy0yNCwxMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPjIzNyBIejwvTklDSz4KLTxCTFVSQj5nYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgMjM3IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWlyRXF1YWxpemVyMTBCYW5kczo6YmFuZDQ8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlstMjQsMTJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz40NzQgSHo8L05JQ0s+Ci08QkxVUkI+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDQ3NCBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElpckVxdWFsaXplcjEwQmFuZHM6OmJhbmQ1PC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTI0LDEyXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+OTQ3IEh6PC9OSUNLPgotPEJMVVJCPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCA5NDcgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOjpiYW5kNjwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Wy0yNCwxMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPjE4ODkgSHo8L05JQ0s+Ci08QkxVUkI+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDE4ODkgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOjpiYW5kNzwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Wy0yNCwxMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPjM3NzAgSHo8L05JQ0s+Ci08QkxVUkI+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDM3NzAgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOjpiYW5kODwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Wy0yNCwxMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPjc1MjMgSHo8L05JQ0s+Ci08QkxVUkI+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDc1MjMgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOjpiYW5kOTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Wy0yNCwxMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPjE1MDExIEh6PC9OSUNLPgotPEJMVVJCPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAxNTAxMSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElpckVxdWFsaXplcjNCYW5kczo6YmFuZDA8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlstMjQsMTJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz4xMTAgSHo8L05JQ0s+Ci08QkxVUkI+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDEwMCBIeiwgcmFuZ2luZyBmcm9tIC0yNC4wIHRvICsxMi4wLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIzQmFuZHM6OmJhbmQxPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTI0LDEyXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+MTEwMCBIejwvTklDSz4KLTxCTFVSQj5nYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgMTEwMCBIeiwgcmFuZ2luZyBmcm9tIC0yNC4wIHRvICsxMi4wLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJaXJFcXVhbGl6ZXIzQmFuZHM6OmJhbmQyPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTI0LDEyXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+MTEga0h6PC9OSUNLPgotPEJMVVJCPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAxMSBrSHosIHJhbmdpbmcgZnJvbSAtMjQuMCB0byArMTIuMC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SWlyRXF1YWxpemVyTkJhbmRzOjpudW0tYmFuZHM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT5bMSw2NF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5udW0tYmFuZHM8L05JQ0s+Ci08QkxVUkI+bnVtYmVyIG9mIGRpZmZlcmVudCBiYW5kcyB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPjEwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aUZpbGVTaW5rOjpsb2NhdGlvbjwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbGUgTG9jYXRpb248L05JQ0s+Ci08QkxVUkI+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpRmlsZVNpbms6OmluZGV4PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JbmRleDwvTklDSz4KLTxCTFVSQj5JbmRleCB0byB1c2Ugd2l0aCBsb2NhdGlvbiBwcm9wZXJ0eSB0byBjcmVhdGUgZmlsZSBuYW1lcy4gIFRoZSBpbmRleCBpcyBpbmNyZW1lbnRlZCBieSBvbmUgZm9yIGVhY2ggYnVmZmVyIHdyaXR0ZW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpRmlsZVNpbms6Om5leHQtZmlsZTwvTkFNRT4KLTxUWVBFPkdzdE11bHRpRmlsZVNpbmtOZXh0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TmV4dCBGaWxlPC9OSUNLPgotPEJMVVJCPldoZW4gdG8gc3RhcnQgYSBuZXcgZmlsZS48L0JMVVJCPgotPERFRkFVTFQ+TmV3IGZpbGUgZm9yIGVhY2ggYnVmZmVyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aUZpbGVTaW5rOjpwb3N0LW1lc3NhZ2VzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3N0IE1lc3NhZ2VzPC9OSUNLPgotPEJMVVJCPlBvc3QgYSBtZXNzYWdlIGZvciBlYWNoIGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBvZiB0aGUgYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlGaWxlU2luazo6bWF4LWZpbGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXggZmlsZXM8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdG8ga2VlcCBvbiBkaXNrLiBPbmNlIHRoZSBtYXhpbXVtIGlzIHJlYWNoZWQsb2xkIGZpbGVzIHN0YXJ0IHRvIGJlIGRlbGV0ZWQgdG8gbWFrZSByb29tIGZvciBuZXcgb25lcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlGaWxlU2luazo6bWF4LWZpbGUtc2l6ZTwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXhpbXVtIEZpbGUgU2l6ZTwvTklDSz4KLTxCTFVSQj5NYXhpbXVtIGZpbGUgc2l6ZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgZmlsZSBpbiBtYXgtc2l6ZSBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD4yMTQ3NDgzNjQ4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aUZpbGVTaW5rOjphZ2dyZWdhdGUtZ29wczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWdncmVnYXRlIEdPUHM8L05JQ0s+Ci08QkxVUkI+V2hldGhlciB0byBhZ2dyZWdhdGUgR09QcyBhbmQgcHJvY2VzcyB0aGVtIGFzIGEgd2hvbGUgd2l0aG91dCBzcGxpdHRpbmcuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aUZpbGVTaW5rOjptYXgtZmlsZS1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXhpbXVtIEZpbGUgRHVyYXRpb248L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBmaWxlIGR1cmF0aW9uIGJlZm9yZSBzdGFydGluZyBhIG5ldyBmaWxlIGluIG1heC1zaXplIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPjE4NDQ2NzQ0MDczNzA5NTUxNjE1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aUZpbGVTcmM6OmNhcHM8L05BTUU+Ci08VFlQRT5Hc3RDYXBzKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNhcHM8L05JQ0s+Ci08QkxVUkI+Q2FwcyBkZXNjcmliaW5nIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlGaWxlU3JjOjppbmRleDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RmlsZSBJbmRleDwvTklDSz4KLTxCTFVSQj5JbmRleCB0byB1c2Ugd2l0aCBsb2NhdGlvbiBwcm9wZXJ0eSB0byBjcmVhdGUgZmlsZSBuYW1lcy4gIFRoZSBpbmRleCBpcyBpbmNyZW1lbnRlZCBieSBvbmUgZm9yIGVhY2ggYnVmZmVyIHJlYWQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpRmlsZVNyYzo6bG9jYXRpb248L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5GaWxlIExvY2F0aW9uPC9OSUNLPgotPEJMVVJCPlBhdHRlcm4gdG8gY3JlYXRlIGZpbGUgbmFtZXMgb2YgaW5wdXQgZmlsZXMuICBGaWxlIG5hbWVzIGFyZSBjcmVhdGVkIGJ5IGNhbGxpbmcgc3ByaW50ZigpIHdpdGggdGhlIHBhdHRlcm4gYW5kIHRoZSBjdXJyZW50IGluZGV4LjwvQkxVUkI+Ci08REVGQVVMVD4iJTA1ZCI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpRmlsZVNyYzo6bG9vcDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TG9vcDwvTklDSz4KLTxCTFVSQj5XaGV0aGVyIHRvIHJlcGVhdCBmcm9tIHRoZSBiZWdpbm5pbmcgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIHJlYWQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aUZpbGVTcmM6OnN0YXJ0LWluZGV4PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TdGFydCBJbmRleDwvTklDSz4KLTxCTFVSQj5TdGFydCB2YWx1ZSBvZiBpbmRleC4gIFRoZSBpbml0aWFsIHZhbHVlIG9mIGluZGV4IGNhbiBiZSBzZXQgZWl0aGVyIGJ5IHNldHRpbmcgaW5kZXggb3Igc3RhcnQtaW5kZXguICBXaGVuIHRoZSBlbmQgb2YgdGhlIGxvb3AgaXMgcmVhY2hlZCwgdGhlIGluZGV4IHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBzdGFydC1pbmRleC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlGaWxlU3JjOjpzdG9wLWluZGV4PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TdG9wIEluZGV4PC9OSUNLPgotPEJMVVJCPlN0b3AgdmFsdWUgb2YgaW5kZXguICBUaGUgc3BlY2lhbCB2YWx1ZSAtMSBtZWFucyBubyBzdG9wLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPc3NTcmM6OmRldmljZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRldmljZTwvTklDSz4KLTxCTFVSQj5PU1MgZGV2aWNlICh1c3VhbGx5IC9kZXYvZHNwTikuPC9CTFVSQj4KLTxERUZBVUxUPiIvZGV2L2RzcCI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE9zc1NyYzo6ZGV2aWNlLW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkRldmljZSBuYW1lPC9OSUNLPgotPEJMVVJCPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWN0cnVtOjpiYW5kczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPlsyLDEwNzM3NDE4MjRdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CYW5kczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgZnJlcXVlbmN5IGJhbmRzLjwvQkxVUkI+Ci08REVGQVVMVD4xMjg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWN0cnVtOjppbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SW50ZXJ2YWw8L05JQ0s+Ci08QkxVUkI+SW50ZXJ2YWwgb2YgdGltZSBiZXR3ZWVuIG1lc3NhZ2UgcG9zdHMgKGluIG5hbm9zZWNvbmRzKS48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDAwMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVjdHJ1bTo6dGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+ZEIgdGhyZXNob2xkIGZvciByZXN1bHQuIEFsbCBsb3dlciB2YWx1ZXMgd2lsbCBiZSBzZXQgdG8gdGhpcy48L0JMVVJCPgotPERFRkFVTFQ+LTYwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVjdHJ1bTo6bWVzc2FnZS1tYWduaXR1ZGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1hZ25pdHVkZTwvTklDSz4KLTxCTFVSQj5XaGV0aGVyIHRvIGFkZCBhICdtYWduaXR1ZGUnIGZpZWxkIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgYW55ICdzcGVjdHJ1bScgZWxlbWVudCBtZXNzYWdlcyBwb3N0ZWQgb24gdGhlIGJ1cy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BlY3RydW06Om1lc3NhZ2UtcGhhc2U8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBoYXNlPC9OSUNLPgotPEJMVVJCPldoZXRoZXIgdG8gYWRkIGEgJ3BoYXNlJyBmaWVsZCB0byB0aGUgc3RydWN0dXJlIG9mIGFueSAnc3BlY3RydW0nIGVsZW1lbnQgbWVzc2FnZXMgcG9zdGVkIG9uIHRoZSBidXMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVjdHJ1bTo6cG9zdC1tZXNzYWdlczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UG9zdCBNZXNzYWdlczwvTklDSz4KLTxCTFVSQj5XaGV0aGVyIHRvIHBvc3QgYSAnc3BlY3RydW0nIGVsZW1lbnQgbWVzc2FnZSBvbiB0aGUgYnVzIGZvciBlYWNoIHBhc3NlZCBpbnRlcnZhbC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BlY3RydW06Om11bHRpLWNoYW5uZWw8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk11bHRpY2hhbm5lbCByZXN1bHRzPC9OSUNLPgotPEJMVVJCPlNlbmQgc2VwYXJhdGUgcmVzdWx0cyBmb3IgZWFjaCBjaGFubmVsLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9Cb3g6OmFscGhhPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWxwaGE8L05JQ0s+Ci08QkxVUkI+QWxwaGEgdmFsdWUgcGljdHVyZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9Cb3g6OmJvcmRlci1hbHBoYTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJvcmRlciBBbHBoYTwvTklDSz4KLTxCTFVSQj5BbHBoYSB2YWx1ZSBvZiB0aGUgYm9yZGVyLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0JveDo6Ym90dG9tPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJvdHRvbTwvTklDSz4KLTxCTFVSQj5QaXhlbHMgdG8gYm94IGF0IGJvdHRvbSAoPDAgPSBhZGQgYSBib3JkZXIpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0JveDo6ZmlsbDwvTkFNRT4KLTxUWVBFPkdzdFZpZGVvQm94RmlsbDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbGw8L05JQ0s+Ci08QkxVUkI+SG93IHRvIGZpbGwgdGhlIGJvcmRlcnMuPC9CTFVSQj4KLTxERUZBVUxUPkJsYWNrPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0JveDo6bGVmdDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5MZWZ0PC9OSUNLPgotPEJMVVJCPlBpeGVscyB0byBib3ggYXQgbGVmdCAoPDAgID0gYWRkIGEgYm9yZGVyKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9Cb3g6OnJpZ2h0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJpZ2h0PC9OSUNLPgotPEJMVVJCPlBpeGVscyB0byBib3ggYXQgcmlnaHQgKDwwID0gYWRkIGEgYm9yZGVyKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9Cb3g6OnRvcDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ub3A8L05JQ0s+Ci08QkxVUkI+UGl4ZWxzIHRvIGJveCBhdCB0b3AgKDwwID0gYWRkIGEgYm9yZGVyKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9Cb3g6OmF1dG9jcm9wPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BdXRvIGNyb3A8L05JQ0s+Ci08QkxVUkI+QXV0byBjcm9wLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU2luazo6aG9zdDwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmhvc3Q8L05JQ0s+Ci08QkxVUkI+VGhlIGhvc3QvSVAvTXVsdGljYXN0IGdyb3VwIHRvIHNlbmQgdGhlIHBhY2tldHMgdG8uPC9CTFVSQj4KLTxERUZBVUxUPiJsb2NhbGhvc3QiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTaW5rOjpwb3J0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2NTUzNV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnBvcnQ8L05JQ0s+Ci08QkxVUkI+VGhlIHBvcnQgdG8gc2VuZCB0aGUgcGFja2V0cyB0by48L0JMVVJCPgotPERFRkFVTFQ+NTAwNDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU3JjOjpjYXBzPC9OQU1FPgotPFRZUEU+R3N0Q2Fwcyo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DYXBzPC9OSUNLPgotPEJMVVJCPlRoZSBjYXBzIG9mIHRoZSBzb3VyY2UgcGFkLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFVEUFNyYzo6bXVsdGljYXN0LWdyb3VwPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TXVsdGljYXN0IEdyb3VwPC9OSUNLPgotPEJMVVJCPlRoZSBBZGRyZXNzIG9mIG11bHRpY2FzdCBncm91cCB0byBqb2luLiAoREVQUkVDQVRFRDogVXNlIGFkZHJlc3MgcHJvcGVydHkgaW5zdGVhZCkuPC9CTFVSQj4KLTxERUZBVUxUPiIwLjAuMC4wIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU3JjOjpwb3J0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2NTUzNV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBvcnQ8L05JQ0s+Ci08QkxVUkI+VGhlIHBvcnQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cyBmcm9tLCAwPWFsbG9jYXRlLjwvQkxVUkI+Ci08REVGQVVMVD41MDA0PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6OnVyaTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVSSTwvTklDSz4KLTxCTFVSQj5VUkkgaW4gdGhlIGZvcm0gb2YgdWRwOi8vbXVsdGljYXN0X2dyb3VwOnBvcnQuPC9CTFVSQj4KLTxERUZBVUxUPiJ1ZHA6Ly8wLjAuMC4wOjUwMDQiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6OmJ1ZmZlci1zaXplPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgU2l6ZTwvTklDSz4KLTxCTFVSQj5TaXplIG9mIHRoZSBrZXJuZWwgcmVjZWl2ZSBidWZmZXIgaW4gYnl0ZXMsIDA9ZGVmYXVsdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU3JjOjp0aW1lb3V0PC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRpbWVvdXQ8L05JQ0s+Ci08QkxVUkI+UG9zdCBhIG1lc3NhZ2UgYWZ0ZXIgdGltZW91dCBuYW5vc2Vjb25kcyAoMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU3JjOjpza2lwLWZpcnN0LWJ5dGVzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ta2lwIGZpcnN0IGJ5dGVzPC9OSUNLPgotPEJMVVJCPm51bWJlciBvZiBieXRlcyB0byBza2lwIGZvciBlYWNoIHVkcCBwYWNrZXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFVEUFNyYzo6YXV0by1tdWx0aWNhc3Q8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkF1dG8gTXVsdGljYXN0PC9OSUNLPgotPEJMVVJCPkF1dG9tYXRpY2FsbHkgam9pbi9sZWF2ZSBtdWx0aWNhc3QgZ3JvdXBzLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6Om11bHRpY2FzdC1pZmFjZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk11bHRpY2FzdCBJbnRlcmZhY2U8L05JQ0s+Ci08QkxVUkI+VGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cC48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU3JjOjpyZXVzZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmV1c2U8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIHJldXNlIG9mIHRoZSBwb3J0LjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6OmNsb3NlLXNvY2tldDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2xvc2Ugc29ja2V0PC9OSUNLPgotPEJMVVJCPkNsb3NlIHNvY2tldCBpZiBwYXNzZWQgYXMgcHJvcGVydHkgb24gc3RhdGUgY2hhbmdlLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6OnNvY2tldDwvTkFNRT4KLTxUWVBFPkdTb2NrZXQqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U29ja2V0PC9OSUNLPgotPEJMVVJCPlNvY2tldCB0byB1c2UgZm9yIFVEUCByZWNlcHRpb24uIChOVUxMID09IGFsbG9jYXRlKS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6OnVzZWQtc29ja2V0PC9OQU1FPgotPFRZUEU+R1NvY2tldCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlNvY2tldCBIYW5kbGU8L05JQ0s+Ci08QkxVUkI+U29ja2V0IGN1cnJlbnRseSBpbiB1c2UgZm9yIFVEUCByZWNlcHRpb24uIChOVUxMID0gbm8gc29ja2V0KS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6OmFkZHJlc3M8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BZGRyZXNzPC9OSUNLPgotPEJMVVJCPkFkZHJlc3MgdG8gcmVjZWl2ZSBwYWNrZXRzIGZvci4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBtdWx0aWNhc3QtZ3JvdXAgcHJvcGVydHkgZm9yIG5vdy48L0JMVVJCPgotPERFRkFVTFQ+IjAuMC4wLjAiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RVRFBTcmM6Omxvb3A8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk11bHRpY2FzdCBMb29wYmFjazwvTklDSz4KLTxCTFVSQj5Vc2VkIGZvciBzZXR0aW5nIHRoZSBtdWx0aWNhc3QgbG9vcCBwYXJhbWV0ZXIuIFRSVUUgPSBlbmFibGUsIEZBTFNFID0gZGlzYWJsZS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VURQU3JjOjpyZXRyaWV2ZS1zZW5kZXItYWRkcmVzczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmV0cmlldmUgU2VuZGVyIEFkZHJlc3M8L05JQ0s+Ci08QkxVUkI+V2hldGhlciB0byByZXRyaWV2ZSB0aGUgc2VuZGVyIGFkZHJlc3MgYW5kIGFkZCBpdCB0byBidWZmZXJzIGFzIG1ldGEuIERpc2FibGluZyB0aGlzIG1pZ2h0IHJlc3VsdCBpbiBtaW5vciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgaW4gY2VydGFpbiBzY2VuYXJpb3MuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNNUFRFOjpib3JkZXI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJvcmRlcjwvTklDSz4KLTxCTFVSQj5UaGUgYm9yZGVyIHdpZHRoIG9mIHRoZSB0cmFuc2l0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTTVBURTo6ZGVwdGg8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDI0XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGVwdGg8L05JQ0s+Ci08QkxVUkI+RGVwdGggb2YgdGhlIG1hc2sgaW4gYml0cy48L0JMVVJCPgotPERFRkFVTFQ+MTY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNNUFRFOjp0eXBlPC9OQU1FPgotPFRZUEU+R3N0U01QVEVUcmFuc2l0aW9uVHlwZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlR5cGU8L05JQ0s+Ci08QkxVUkI+VGhlIHR5cGUgb2YgdHJhbnNpdGlvbiB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPkEgYmFyIG1vdmVzIGZyb20gbGVmdCB0byByaWdodDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U01QVEU6OmR1cmF0aW9uPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkR1cmF0aW9uPC9OSUNLPgotPEJMVVJCPkR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGVmZmVjdCBpbiBuYW5vc2Vjb25kcy48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U01QVEU6OmludmVydDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SW52ZXJ0PC9OSUNLPgotPEJMVVJCPkludmVydCB0cmFuc2l0aW9uIG1hc2suPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpkZWJ1ZzwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGVidWc8L05JQ0s+Ci08QkxVUkI+RHVtcCByZXF1ZXN0IGFuZCByZXNwb25zZSBtZXNzYWdlcyB0byBzdGRvdXQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpsb2NhdGlvbjwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJUU1AgTG9jYXRpb248L05JQ0s+Ci08QkxVUkI+TG9jYXRpb24gb2YgdGhlIFJUU1AgdXJsIHRvIHJlYWQuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OnByb3RvY29sczwvTkFNRT4KLTxUWVBFPkdzdFJUU1BMb3dlclRyYW5zPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UHJvdG9jb2xzPC9OSUNLPgotPEJMVVJCPkFsbG93ZWQgbG93ZXIgdHJhbnNwb3J0IHByb3RvY29scy48L0JMVVJCPgotPERFRkFVTFQ+R1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQfEdTVF9SVFNQX0xPV0VSX1RSQU5TX1VEUF9NQ0FTVHxHU1RfUlRTUF9MT1dFUl9UUkFOU19UQ1A8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OnJldHJ5PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gNjU1MzU8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJldHJ5PC9OSUNLPgotPEJMVVJCPk1heCBudW1iZXIgb2YgcmV0cmllcyB3aGVuIGFsbG9jYXRpbmcgUlRQIHBvcnRzLjwvQkxVUkI+Ci08REVGQVVMVD4yMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6dGltZW91dDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaW1lb3V0PC9OSUNLPgotPEJMVVJCPlJldHJ5IFRDUCB0cmFuc3BvcnQgYWZ0ZXIgVURQIHRpbWVvdXQgbWljcm9zZWNvbmRzICgwID0gZGlzYWJsZWQpLjwvQkxVUkI+Ci08REVGQVVMVD41MDAwMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgbGF0ZW5jeSBpbiBtczwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgbXMgdG8gYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD4yMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjp0Y3AtdGltZW91dDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UQ1AgVGltZW91dDwvTklDSz4KLTxCTFVSQj5GYWlsIGFmdGVyIHRpbWVvdXQgbWljcm9zZWNvbmRzIG9uIFRDUCBjb25uZWN0aW9ucyAoMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MjAwMDAwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OmNvbm5lY3Rpb24tc3BlZWQ8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjw9IDE4NDQ2NzQ0MDczNzA5NTUxPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db25uZWN0aW9uIFNwZWVkPC9OSUNLPgotPEJMVVJCPk5ldHdvcmsgY29ubmVjdGlvbiBzcGVlZCBpbiBrYnBzICgwID0gdW5rbm93bikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6Om5hdC1tZXRob2Q8L05BTUU+Ci08VFlQRT5Hc3RSVFNQTmF0TWV0aG9kPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TkFUIE1ldGhvZDwvTklDSz4KLTxCTFVSQj5NZXRob2QgdG8gdXNlIGZvciB0cmF2ZXJzaW5nIGZpcmV3YWxscyBhbmQgTkFULjwvQkxVUkI+Ci08REVGQVVMVD5TZW5kIER1bW15IHBhY2tldHM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OmRvLXJ0Y3A8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRvIFJUQ1A8L05JQ0s+Ci08QkxVUkI+U2VuZCBSVENQIHBhY2tldHMsIGRpc2FibGUgZm9yIG9sZCBpbmNvbXBhdGlibGUgc2VydmVyLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpwcm94eTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlByb3h5PC9OSUNLPgotPEJMVVJCPlByb3h5IHNldHRpbmdzIGZvciBIVFRQIHR1bm5lbGluZy4gRm9ybWF0OiBbaHR0cDovL11bdXNlcjpwYXNzd2RAXWhvc3RbOnBvcnRdLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpydHAtYmxvY2tzaXplPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gNjU1MzY8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJUUCBCbG9ja3NpemU8L05JQ0s+Ci08QkxVUkI+UlRQIHBhY2thZ2Ugc2l6ZSB0byBzdWdnZXN0IHRvIHNlcnZlciAoMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6dXNlci1pZDwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnVzZXItaWQ8L05JQ0s+Ci08QkxVUkI+UlRTUCBsb2NhdGlvbiBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OnVzZXItcHc8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz51c2VyLXB3PC9OSUNLPgotPEJMVVJCPlJUU1AgbG9jYXRpb24gVVJJIHVzZXIgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpidWZmZXItbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFJUU1BTcmNCdWZmZXJNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnVmZmVyIE1vZGU8L05JQ0s+Ci08QkxVUkI+Q29udHJvbCB0aGUgYnVmZmVyaW5nIGFsZ29yaXRobSBpbiB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPkNob29zZSBtb2RlIGRlcGVuZGluZyBvbiBzdHJlYW0gbGl2ZTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6cG9ydC1yYW5nZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBvcnQgcmFuZ2U8L05JQ0s+Ci08QkxVUkI+Q2xpZW50IHBvcnQgcmFuZ2UgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNlaXZlIFJUUCBhbmQgUlRDUCBkYXRhLCBlZy4gMzAwMC0zMDA1IChOVUxMID0gbm8gcmVzdHJpY3Rpb25zKS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6dWRwLWJ1ZmZlci1zaXplPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5VRFAgQnVmZmVyIFNpemU8L05JQ0s+Ci08QkxVUkI+U2l6ZSBvZiB0aGUga2VybmVsIFVEUCByZWNlaXZlIGJ1ZmZlciBpbiBieXRlcywgMD1kZWZhdWx0LjwvQkxVUkI+Ci08REVGQVVMVD41MjQyODg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OnNob3J0LWhlYWRlcjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2hvcnQgSGVhZGVyPC9OSUNLPgotPEJMVVJCPk9ubHkgc2VuZCB0aGUgYmFzaWMgUlRTUCBoZWFkZXJzIGZvciBicm9rZW4gZW5jb2RlcnMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjpkby1ydHNwLWtlZXAtYWxpdmU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRvIFJUU1AgS2VlcCBBbGl2ZTwvTklDSz4KLTxCTFVSQj5TZW5kIFJUU1Aga2VlcCBhbGl2ZSBwYWNrZXRzLCBkaXNhYmxlIGZvciBvbGQgaW5jb21wYXRpYmxlIHNlcnZlci48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6ZHJvcC1vbi1sYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ecm9wIGJ1ZmZlcnMgd2hlbiBtYXhpbXVtIGxhdGVuY3kgaXMgcmVhY2hlZDwvTklDSz4KLTxCTFVSQj5UZWxscyB0aGUgaml0dGVyYnVmZmVyIHRvIG5ldmVyIGV4Y2VlZCB0aGUgZ2l2ZW4gbGF0ZW5jeSBpbiBzaXplLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6cHJvYmF0aW9uPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5OdW1iZXIgb2YgcHJvYmF0aW9uczwvTklDSz4KLTxCTFVSQj5Db25zZWN1dGl2ZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVycyB0byBhY2NlcHQgdGhlIHNvdXJjZS48L0JMVVJCPgotPERFRkFVTFQ+MjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6dWRwLXJlY29ubmVjdDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXI8L05JQ0s+Ci08QkxVUkI+UmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgaWYgUlRTUCBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aGVuIGRvaW5nIFVEUC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6cHJveHktaWQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wcm94eS1pZDwvTklDSz4KLTxCTFVSQj5IVFRQIHByb3h5IFVSSSB1c2VyIGlkIGZvciBhdXRoZW50aWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OnByb3h5LXB3PC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+cHJveHktcHc8L05JQ0s+Ci08QkxVUkI+SFRUUCBwcm94eSBVUkkgdXNlciBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjptdWx0aWNhc3QtaWZhY2U8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NdWx0aWNhc3QgSW50ZXJmYWNlPC9OSUNLPgotPEJMVVJCPlRoZSBuZXR3b3JrIGludGVyZmFjZSBvbiB3aGljaCB0byBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6Om50cC1zeW5jPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TeW5jIG9uIE5UUCBjbG9jazwvTklDSz4KLTxCTFVSQj5TeW5jaHJvbml6ZSByZWNlaXZlZCBzdHJlYW1zIHRvIHRoZSBOVFAgY2xvY2suPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjp1c2UtcGlwZWxpbmUtY2xvY2s8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZSBwaXBlbGluZSBjbG9jazwvTklDSz4KLTxCTFVSQj5Vc2UgdGhlIHBpcGVsaW5lIHJ1bm5pbmctdGltZSB0byBzZXQgdGhlIE5UUCB0aW1lIGluIHRoZSBSVENQIFNSIG1lc3NhZ2VzKERFUFJFQ0FURUQ6IFVzZSBudHAtdGltZS1zb3VyY2UgcHJvcGVydHkpLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6c2RlczwvTkFNRT4KLTxUWVBFPkdzdFN0cnVjdHVyZSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TREVTPC9OSUNLPgotPEJMVVJCPlRoZSBTREVTIGl0ZW1zIG9mIHRoaXMgc2Vzc2lvbi48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjp0bHMtZGF0YWJhc2U8L05BTUU+Ci08VFlQRT5HVGxzRGF0YWJhc2UqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VExTIGRhdGFiYXNlPC9OSUNLPgotPEJMVVJCPlRMUyBkYXRhYmFzZSB3aXRoIGFuY2hvciBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6dGxzLXZhbGlkYXRpb24tZmxhZ3M8L05BTUU+Ci08VFlQRT5HVGxzQ2VydGlmaWNhdGVGbGFnczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRMUyB2YWxpZGF0aW9uIGZsYWdzPC9OSUNLPgotPEJMVVJCPlRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGZsYWdzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS48L0JMVVJCPgotPERFRkFVTFQ+R19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQXxHX1RMU19DRVJUSUZJQ0FURV9CQURfSURFTlRJVFl8R19UTFNfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRHxHX1RMU19DRVJUSUZJQ0FURV9FWFBJUkVEfEdfVExTX0NFUlRJRklDQVRFX1JFVk9LRUR8R19UTFNfQ0VSVElGSUNBVEVfSU5TRUNVUkV8R19UTFNfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6ZG8tcmV0cmFuc21pc3Npb248L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJldHJhbnNtaXNzaW9uPC9OSUNLPgotPEJMVVJCPkFzayB0aGUgc2VydmVyIHRvIHJldHJhbnNtaXQgbG9zdCBwYWNrZXRzLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjp0bHMtaW50ZXJhY3Rpb248L05BTUU+Ci08VFlQRT5HVGxzSW50ZXJhY3Rpb24qPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VExTIGludGVyYWN0aW9uPC9OSUNLPgotPEJMVVJCPkEgR1Rsc0ludGVyYWN0aW9uIG9iamVjdCB0byBwcm9tdCB0aGUgdXNlciBmb3IgcGFzc3dvcmQgb3IgY2VydGlmaWNhdGUuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRTUFNyYzo6bnRwLXRpbWUtc291cmNlPC9OQU1FPgotPFRZUEU+R3N0UlRTUFNyY050cFRpbWVTb3VyY2U8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5OVFAgVGltZSBTb3VyY2U8L05JQ0s+Ci08QkxVUkI+TlRQIHRpbWUgc291cmNlIGZvciBSVENQIHBhY2tldHMuPC9CTFVSQj4KLTxERUZBVUxUPk5UUCB0aW1lIGJhc2VkIG9uIHJlYWx0aW1lIGNsb2NrPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFNQU3JjOjp1c2VyLWFnZW50PC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VXNlciBBZ2VudDwvTklDSz4KLTxCTFVSQj5UaGUgVXNlci1BZ2VudCBzdHJpbmcgdG8gc2VuZCB0byB0aGUgc2VydmVyLjwvQkxVUkI+Ci08REVGQVVMVD4iR1N0cmVhbWVyLzEuMTAuNCI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6Om1heC1ydGNwLXJ0cC10aW1lLWRpZmY8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBSVENQIFJUUCBUaW1lIERpZmY8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBSVFAgdGltZSBpbiBSVENQIFNScyBpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUU1BTcmM6OnJmYzcyNzMtc3luYzwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3luYyBvbiBSRkM3MjczIGNsb2NrPC9OSUNLPgotPEJMVVJCPlN5bmNocm9uaXplIHJlY2VpdmVkIHN0cmVhbXMgdG8gdGhlIFJGQzcyNzMgY2xvY2sgKHJlcXVpcmVzIGNsb2NrIGFuZCBvZmZzZXQgdG8gYmUgcHJvdmlkZWQpLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQRGVjOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgbGF0ZW5jeSBpbiBtczwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgbXMgdG8gYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD4yMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdExldmVsOjppbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SW50ZXJ2YWw8L05JQ0s+Ci08QkxVUkI+SW50ZXJ2YWwgb2YgdGltZSBiZXR3ZWVuIG1lc3NhZ2UgcG9zdHMgKGluIG5hbm9zZWNvbmRzKS48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDAwMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RMZXZlbDo6bWVzc2FnZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+bWVzc2FnZTwvTklDSz4KLTxCTFVSQj5Qb3N0IGEgJ2xldmVsJyBtZXNzYWdlIGZvciBlYWNoIHBhc3NlZCBpbnRlcnZhbCAoZGVwcmVjYXRlZCwgdXNlIHRoZSBwb3N0LW1lc3NhZ2VzIHByb3BlcnR5IGluc3RlYWQpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RMZXZlbDo6cGVhay1mYWxsb2ZmPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QZWFrIEZhbGxvZmY8L05JQ0s+Ci08QkxVUkI+RGVjYXkgcmF0ZSBvZiBkZWNheSBwZWFrIGFmdGVyIFRUTCAoaW4gZEIvc2VjKS48L0JMVVJCPgotPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdExldmVsOjpwZWFrLXR0bDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QZWFrIFRUTDwvTklDSz4KLTxCTFVSQj5UaW1lIFRvIExpdmUgb2YgZGVjYXkgcGVhayBiZWZvcmUgaXQgZmFsbHMgYmFjayAoaW4gbmFub3NlY29uZHMpLjwvQkxVUkI+Ci08REVGQVVMVD4zMDAwMDAwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdExldmVsOjpwb3N0LW1lc3NhZ2VzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3N0IE1lc3NhZ2VzPC9OSUNLPgotPEJMVVJCPldoZXRoZXIgdG8gcG9zdCBhICdsZXZlbCcgZWxlbWVudCBtZXNzYWdlIG9uIHRoZSBidXMgZm9yIGVhY2ggcGFzc2VkIGludGVydmFsLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REaWNlVFY6OnNxdWFyZS1iaXRzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3F1YXJlIEJpdHM8L05JQ0s+Ci08QkxVUkI+VGhlIHNpemUgb2YgdGhlIFNxdWFyZXMuPC9CTFVSQj4KLTxERUZBVUxUPjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZlcnRpZ29UVjo6c3BlZWQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAuMDEsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3BlZWQ8L05JQ0s+Ci08QkxVUkI+Q29udHJvbCB0aGUgc3BlZWQgb2YgbW92ZW1lbnQuPC9CTFVSQj4KLTxERUZBVUxUPjAuMDI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZlcnRpZ29UVjo6em9vbS1zcGVlZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMS4wMSwxLjFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5ab29tIFNwZWVkPC9OSUNLPgotPEJMVVJCPkNvbnRyb2wgdGhlIHJhdGUgb2Ygem9vbWluZy48L0JMVVJCPgotPERFRkFVTFQ+MS4wMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmV2VFY6OmRlbGF5PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EZWxheTwvTklDSz4KLTxCTFVSQj5EZWxheSBpbiBmcmFtZXMgYmV0d2VlbiB1cGRhdGVzLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSZXZUVjo6Z2FpbjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsMjAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+R2FpbjwvTklDSz4KLTxCTFVSQj5Db250cm9sIGdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSZXZUVjo6bGluZXNwYWNlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5MaW5lc3BhY2U8L05JQ0s+Ci08QkxVUkI+Q29udHJvbCBsaW5lIHNwYWNpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFF1YXJrVFY6OnBsYW5lczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsNjRdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QbGFuZXM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIHBsYW5lcy48L0JMVVJCPgotPERFRkFVTFQ+MTY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFscGhhOjphbHBoYTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFscGhhPC9OSUNLPgotPEJMVVJCPlRoZSB2YWx1ZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFscGhhOjphbmdsZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw5MF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFuZ2xlPC9OSUNLPgotPEJMVVJCPlNpemUgb2YgdGhlIGNvbG9yY3ViZSB0byBjaGFuZ2UuPC9CTFVSQj4KLTxERUZBVUxUPjIwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBbHBoYTo6bWV0aG9kPC9OQU1FPgotPFRZUEU+R3N0QWxwaGFNZXRob2Q8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NZXRob2Q8L05JQ0s+Ci08QkxVUkI+SG93IHRoZSBhbHBoYSBjaGFubmVscyBzaG91bGQgYmUgY3JlYXRlZC48L0JMVVJCPgotPERFRkFVTFQ+U2V0L2FkanVzdCBhbHBoYSBjaGFubmVsPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBbHBoYTo6bm9pc2UtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNjRdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ob2lzZSBMZXZlbDwvTklDSz4KLTxCTFVSQj5TaXplIG9mIG5vaXNlIHJhZGl1cy48L0JMVVJCPgotPERFRkFVTFQ+MjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QWxwaGE6OnRhcmdldC1iPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMjU1PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UYXJnZXQgQmx1ZTwvTklDSz4KLTxCTFVSQj5UaGUgYmx1ZSBjb2xvciB2YWx1ZSBmb3IgY3VzdG9tIFJHQiBjaHJvbWEga2V5aW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBbHBoYTo6dGFyZ2V0LWc8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAyNTU8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRhcmdldCBHcmVlbjwvTklDSz4KLTxCTFVSQj5UaGUgZ3JlZW4gY29sb3IgdmFsdWUgZm9yIGN1c3RvbSBSR0IgY2hyb21hIGtleWluZy48L0JMVVJCPgotPERFRkFVTFQ+MjU1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBbHBoYTo6dGFyZ2V0LXI8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAyNTU8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRhcmdldCBSZWQ8L05JQ0s+Ci08QkxVUkI+VGhlIHJlZCBjb2xvciB2YWx1ZSBmb3IgY3VzdG9tIFJHQiBjaHJvbWEga2V5aW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBbHBoYTo6YmxhY2stc2Vuc2l0aXZpdHk8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAxMjg8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJsYWNrIFNlbnNpdGl2aXR5PC9OSUNLPgotPEJMVVJCPlNlbnNpdGl2aXR5IHRvIGRhcmsgY29sb3JzLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFscGhhOjp3aGl0ZS1zZW5zaXRpdml0eTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDEyODwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+V2hpdGUgU2Vuc2l0aXZpdHk8L05JQ0s+Ci08QkxVUkI+U2Vuc2l0aXZpdHkgdG8gYnJpZ2h0IGNvbG9ycy48L0JMVVJCPgotPERFRkFVTFQ+MTAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBbHBoYTo6cHJlZmVyLXBhc3N0aHJvdWdoPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QcmVmZXIgUGFzc3Rocm91Z2g8L05JQ0s+Ci08QkxVUkI+RG9uJ3QgZG8gYW55IHByb2Nlc3NpbmcgZm9yIGFscGhhPTEuMCBpZiBwb3NzaWJsZS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNob3V0MnNlbmQ6OmRlc2NyaXB0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+ZGVzY3JpcHRpb248L05JQ0s+Ci08QkxVUkI+ZGVzY3JpcHRpb24uPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTaG91dDJzZW5kOjpnZW5yZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmdlbnJlPC9OSUNLPgotPEJMVVJCPmdlbnJlLjwvQkxVUkI+Ci08REVGQVVMVD4iIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U2hvdXQyc2VuZDo6aXA8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5pcDwvTklDSz4KLTxCTFVSQj5JUCBhZGRyZXNzIG9yIGhvc3RuYW1lLjwvQkxVUkI+Ci08REVGQVVMVD4iMTI3LjAuMC4xIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U2hvdXQyc2VuZDo6bW91bnQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5tb3VudDwvTklDSz4KLTxCTFVSQj5tb3VudC48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNob3V0MnNlbmQ6OnBhc3N3b3JkPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+cGFzc3dvcmQ8L05JQ0s+Ci08QkxVUkI+cGFzc3dvcmQuPC9CTFVSQj4KLTxERUZBVUxUPiJoYWNrbWUiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTaG91dDJzZW5kOjpwb3J0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSw2NTUzNV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnBvcnQ8L05JQ0s+Ci08QkxVUkI+cG9ydC48L0JMVVJCPgotPERFRkFVTFQ+ODAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U2hvdXQyc2VuZDo6cHJvdG9jb2w8L05BTUU+Ci08VFlQRT5Hc3RTaG91dDJTZW5kUHJvdG9jb2w8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wcm90b2NvbDwvTklDSz4KLTxCTFVSQj5Db25uZWN0aW9uIFByb3RvY29sIHRvIHVzZS48L0JMVVJCPgotPERFRkFVTFQ+SHR0cCBQcm90b2NvbCAoaWNlY2FzdCAyLngpPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTaG91dDJzZW5kOjpzdHJlYW1uYW1lPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+c3RyZWFtbmFtZTwvTklDSz4KLTxCTFVSQj5uYW1lIG9mIHRoZSBzdHJlYW0uPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTaG91dDJzZW5kOjp1cmw8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz51cmw8L05JQ0s+Ci08QkxVUkI+dGhlIHN0cmVhbSdzIGhvbWVwYWdlIFVSTC48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNob3V0MnNlbmQ6OnVzZXJuYW1lPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+dXNlcm5hbWU8L05JQ0s+Ci08QkxVUkI+dXNlcm5hbWUuPC9CTFVSQj4KLTxERUZBVUxUPiJzb3VyY2UiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTaG91dDJzZW5kOjpwdWJsaWM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnB1YmxpYzwvTklDSz4KLTxCTFVSQj5JZiB0aGUgc3RyZWFtIHNob3VsZCBiZSBsaXN0ZWQgb24gdGhlIHNlcnZlcidzIHN0cmVhbSBkaXJlY3RvcnkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVleERlYzo6ZW5oPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Fbmg8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIHBlcmNlcHR1YWwgZW5oYW5jZW1lbnQuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFBuZ0VuYzo6Y29tcHJlc3Npb24tbGV2ZWw8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSA5PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5jb21wcmVzc2lvbi1sZXZlbDwvTklDSz4KLTxCTFVSQj5QTkcgY29tcHJlc3Npb24gbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFBuZ0VuYzo6c25hcHNob3Q8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNuYXBzaG90PC9OSUNLPgotPEJMVVJCPlNlbmQgRU9TIGFmdGVyIGVuY29kaW5nIGEgZnJhbWUsIHVzZWZ1bCBmb3Igc25hcHNob3RzLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0Q0FDQVNpbms6OmFudGktYWxpYXNpbmc8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFudGkgQWxpYXNpbmc8L05JQ0s+Ci08QkxVUkI+RW5hYmxlcyBBbnRpLUFsaWFzaW5nLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDQUNBU2luazo6ZGl0aGVyPC9OQU1FPgotPFRZUEU+R3N0Q0FDQVNpbmtEaXRoZXJpbmc8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EaXRoZXIgVHlwZTwvTklDSz4KLTxCTFVSQj5TZXQgdHlwZSBvZiBEaXRoZXIuPC9CTFVSQj4KLTxERUZBVUxUPk5vIGRpdGhlcmluZzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0Q0FDQVNpbms6OnNjcmVlbi1oZWlnaHQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+U2NyZWVuIEhlaWdodDwvTklDSz4KLTxCTFVSQj5UaGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uPC9CTFVSQj4KLTxERUZBVUxUPjI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDQUNBU2luazo6c2NyZWVuLXdpZHRoPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlNjcmVlbiBXaWR0aDwvTklDSz4KLTxCTFVSQj5UaGUgd2lkdGggb2YgdGhlIHNjcmVlbi48L0JMVVJCPgotPERFRkFVTFQ+ODA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEpwZWdFbmM6OnF1YWxpdHk8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlF1YWxpdHk8L05JQ0s+Ci08QkxVUkI+UXVhbGl0eSBvZiBlbmNvZGluZy48L0JMVVJCPgotPERFRkFVTFQ+ODU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEpwZWdFbmM6OmlkY3QtbWV0aG9kPC9OQU1FPgotPFRZUEU+R3N0SURDVE1ldGhvZDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPklEQ1QgTWV0aG9kPC9OSUNLPgotPEJMVVJCPlRoZSBJRENUIGFsZ29yaXRobSB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPkZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RFZEZWM6OmNsYW1wLWNocm9tYTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2xhbXAgY2hyb21hPC9OSUNLPgotPEJMVVJCPkNsYW1wIGNocm9tYS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERWRGVjOjpjbGFtcC1sdW1hPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DbGFtcCBsdW1hPC9OSUNLPgotPEJMVVJCPkNsYW1wIGx1bWEuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REVkRlYzo6ZHJvcC1mYWN0b3I8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDE8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRyb3AgRmFjdG9yPC9OSUNLPgotPEJMVVJCPk9ubHkgZGVjb2RlIE50aCBmcmFtZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RFZEZWM6OnF1YWxpdHk8L05BTUU+Ci08VFlQRT5Hc3REVkRlY1F1YWxpdHlFbnVtPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UXVhbGl0eTwvTklDSz4KLTxCTFVSQj5EZWNvZGluZyBxdWFsaXR5LjwvQkxVUkI+Ci08REVGQVVMVD5IaWdoZXN0IHF1YWxpdHkgY29sb3VyIGRlY29kaW5nPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBQVNpbms6OmJyaWdodG5lc3M8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+YnJpZ2h0bmVzczwvTklDSz4KLTxCTFVSQj5icmlnaHRuZXNzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBQVNpbms6OmNvbnRyYXN0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmNvbnRyYXN0PC9OSUNLPgotPEJMVVJCPmNvbnRyYXN0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBQVNpbms6OmRpdGhlcjwvTkFNRT4KLTxUWVBFPkdzdEFBU2lua0RpdGhlcmVyczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmRpdGhlcjwvTklDSz4KLTxCTFVSQj5kaXRoZXIuPC9CTFVSQj4KLTxERUZBVUxUPm5vIGRpdGhlcmluZzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QUFTaW5rOjpkcml2ZXI8L05BTUU+Ci08VFlQRT5Hc3RBQVNpbmtEcml2ZXJzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+ZHJpdmVyPC9OSUNLPgotPEJMVVJCPmRyaXZlci48L0JMVVJCPgotPERFRkFVTFQ+WDExIGRyaXZlciAxLjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFBU2luazo6ZnJhbWUtdGltZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmZyYW1lIHRpbWU8L05JQ0s+Ci08QkxVUkI+ZnJhbWUgdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QUFTaW5rOjpmcmFtZXMtZGlzcGxheWVkPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+ZnJhbWVzIGRpc3BsYXllZDwvTklDSz4KLTxCTFVSQj5mcmFtZXMgZGlzcGxheWVkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBQVNpbms6OmdhbW1hPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5nYW1tYTwvTklDSz4KLTxCTFVSQj5nYW1tYS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QUFTaW5rOjpoZWlnaHQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+aGVpZ2h0PC9OSUNLPgotPEJMVVJCPmhlaWdodC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QUFTaW5rOjppbnZlcnNpb248L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmludmVyc2lvbjwvTklDSz4KLTxCTFVSQj5pbnZlcnNpb24uPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFBU2luazo6cmFuZG9tdmFsPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnJhbmRvbXZhbDwvTklDSz4KLTxCTFVSQj5yYW5kb212YWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFBU2luazo6d2lkdGg8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+d2lkdGg8L05JQ0s+Ci08QkxVUkI+d2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWV4RW5jOjphYnI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BQlI8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIGF2ZXJhZ2UgYml0LXJhdGUgKDAgPSBkaXNhYmxlZCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWV4RW5jOjpiaXRyYXRlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RW5jb2RpbmcgQml0LXJhdGU8L05JQ0s+Ci08QkxVUkI+U3BlY2lmeSBhbiBlbmNvZGluZyBiaXQtcmF0ZSAoaW4gYnBzKS4gKDAgPSBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVleEVuYzo6Y29tcGxleGl0eTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNvbXBsZXhpdHk8L05JQ0s+Ci08QkxVUkI+U2V0IGVuY29kaW5nIGNvbXBsZXhpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWV4RW5jOjpkdHg8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EVFg8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIGRpc2NvbnRpbnVvdXMgdHJhbnNtaXNzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BlZXhFbmM6Omxhc3QtbWVzc2FnZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGFzdC1tZXNzYWdlPC9OSUNLPgotPEJMVVJCPlRoZSBsYXN0IHN0YXR1cyBtZXNzYWdlLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVleEVuYzo6bmZyYW1lczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk5GcmFtZXM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIGZyYW1lcyBwZXIgYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGVleEVuYzo6cXVhbGl0eTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5RdWFsaXR5PC9OSUNLPgotPEJMVVJCPkVuY29kaW5nIHF1YWxpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWV4RW5jOjp2YWQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WQUQ8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIHZvaWNlIGFjdGl2aXR5IGRldGVjdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwZWV4RW5jOjp2YnI8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WQlI8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIHZhcmlhYmxlIGJpdC1yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BlZXhFbmM6Om1vZGU8L05BTUU+Ci08VFlQRT5Hc3RTcGVleEVuY01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5UaGUgZW5jb2RpbmcgbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+QXV0bzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RFYxMzk0U3JjOjpjaGFubmVsPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2NF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNoYW5uZWw8L05JQ0s+Ci08QkxVUkI+Q2hhbm5lbCBudW1iZXIgZm9yIGxpc3RlbmluZy48L0JMVVJCPgotPERFRkFVTFQ+NjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERWMTM5NFNyYzo6Y29uc2VjdXRpdmU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDE8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmNvbnNlY3V0aXZlIGZyYW1lczwvTklDSz4KLTxCTFVSQj5zZW5kIG4gY29uc2VjdXRpdmUgZnJhbWVzIGFmdGVyIHNraXBwaW5nLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REVjEzOTRTcmM6OmRyb3AtaW5jb21wbGV0ZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+ZHJvcCBpbmNvbXBsZXRlPC9OSUNLPgotPEJMVVJCPmRyb3AgaW5jb21wbGV0ZSBmcmFtZXMuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERWMTM5NFNyYzo6Z3VpZDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5HVUlEPC9OSUNLPgotPEJMVVJCPnNlbGVjdCBvbmUgb2YgbXVsdGlwbGUgRFYgZGV2aWNlcyBieSBpdHMgR1VJRC4gdXNlIGEgaGV4YWRlY2ltYWwgbGlrZSAweGhoaGhoaGhoaGhoaGhoaGguICgwID0gbm8gZ3VpZCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERWMTM5NFNyYzo6cG9ydDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+W0dfTUFYVUxPTkcsMTZdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3J0PC9OSUNLPgotPEJMVVJCPlBvcnQgbnVtYmVyICgtMSBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RFYxMzk0U3JjOjpza2lwPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5za2lwIGZyYW1lczwvTklDSz4KLTxCTFVSQj5za2lwIG4gZnJhbWVzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REVjEzOTRTcmM6OnVzZS1hdmM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZSBBVi9DPC9OSUNLPgotPEJMVVJCPlVzZSBBVi9DIFZUUiBjb250cm9sLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REVjEzOTRTcmM6OmRldmljZS1uYW1lPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5kZXZpY2UgbmFtZTwvTklDSz4KLTxCTFVSQj51c2VyLWZyaWVuZGx5IG5hbWUgb2YgdGhlIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+IkRlZmF1bHQiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjpibG9ja3NpemU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT5bMTYsNjU1MzVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmxvY2tzaXplPC9OSUNLPgotPEJMVVJCPkJsb2Nrc2l6ZSBpbiBzYW1wbGVzLjwvQkxVUkI+Ci08REVGQVVMVD40NjA4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjplc2NhcGUtY29kaW5nPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RG8gRXNjYXBlIGNvZGluZzwvTklDSz4KLTxCTFVSQj5zZWFyY2ggZm9yIGVzY2FwZSBjb2RlcyBpbiB0aGUgZW50cm9weSBjb2Rpbmcgc3RhZ2UgZm9yIHNsaWdodGx5IGJldHRlciBjb21wcmVzc2lvbi48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZsYWNFbmM6OmV4aGF1c3RpdmUtbW9kZWwtc2VhcmNoPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RG8gZXhoYXVzdGl2ZSBtb2RlbCBzZWFyY2g8L05JQ0s+Ci08QkxVUkI+ZG8gZXhoYXVzdGl2ZSBzZWFyY2ggb2YgTFAgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIChleHBlbnNpdmUhKS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZsYWNFbmM6Omxvb3NlLW1pZC1zaWRlLXN0ZXJlbzwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvb3NlIG1pZCBzaWRlIHN0ZXJlbzwvTklDSz4KLTxCTFVSQj5Mb29zZSBtaWQgc2lkZSBzdGVyZW8uPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjptYXgtbHBjLW9yZGVyPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMzI8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXggTFBDIG9yZGVyPC9OSUNLPgotPEJMVVJCPk1heCBMUEMgb3JkZXI7IDAgPT4gdXNlIG9ubHkgZml4ZWQgcHJlZGljdG9ycy48L0JMVVJCPgotPERFRkFVTFQ+ODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmxhY0VuYzo6bWF4LXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlcjwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDE2PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWF4IHJlc2lkdWFsIHBhcnRpdGlvbiBvcmRlcjwvTklDSz4KLTxCTFVSQj5NYXggcmVzaWR1YWwgcGFydGl0aW9uIG9yZGVyIChhYm92ZSA0IGRvZXNuJ3QgdXN1YWxseSBoZWxwIG11Y2gpLjwvQkxVUkI+Ci08REVGQVVMVD4zPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjptaWQtc2lkZS1zdGVyZW88L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EbyBtaWQgc2lkZSBzdGVyZW88L05JQ0s+Ci08QkxVUkI+RG8gbWlkIHNpZGUgc3RlcmVvIChvbmx5IGZvciBzdGVyZW8gaW5wdXQpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjptaW4tcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVyPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMTY8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NaW4gcmVzaWR1YWwgcGFydGl0aW9uIG9yZGVyPC9OSUNLPgotPEJMVVJCPk1pbiByZXNpZHVhbCBwYXJ0aXRpb24gb3JkZXIgKGFib3ZlIDQgZG9lc24ndCB1c3VhbGx5IGhlbHAgbXVjaCkuPC9CTFVSQj4KLTxERUZBVUxUPjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZsYWNFbmM6OnFscC1jb2VmZi1wcmVjLXNlYXJjaDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRvIFFMUCBjb2VmZmljaWVudHMgcHJlY2lzaW9uIHNlYXJjaDwvTklDSz4KLTxCTFVSQj5mYWxzZSA9IHVzZSBxbHBfY29lZmZfcHJlY2lzaW9uLCB0cnVlID0gc2VhcmNoIGFyb3VuZCBxbHBfY29lZmZfcHJlY2lzaW9uLCB0YWtlIGJlc3QuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjpxbHAtY29lZmYtcHJlY2lzaW9uPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMzI8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5RTFAgY29lZmZpY2llbnRzIHByZWNpc2lvbjwvTklDSz4KLTxCTFVSQj5QcmVjaXNpb24gaW4gYml0cyBvZiBxdWFudGl6ZWQgbGluZWFyLXByZWRpY3RvciBjb2VmZmljaWVudHM7IDAgPSBhdXRvbWF0aWMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZsYWNFbmM6OnF1YWxpdHk8L05BTUU+Ci08VFlQRT5Hc3RGbGFjRW5jUXVhbGl0eTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5RdWFsaXR5PC9OSUNLPgotPEJMVVJCPlNwZWVkIHZlcnN1cyBjb21wcmVzc2lvbiB0cmFkZW9mZi48L0JMVVJCPgotPERFRkFVTFQ+NSAtIERlZmF1bHQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZsYWNFbmM6OnJpY2UtcGFyYW1ldGVyLXNlYXJjaC1kaXN0PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMTU8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5yaWNlX3BhcmFtZXRlcl9zZWFyY2hfZGlzdDwvTklDSz4KLTxCTFVSQj4wID0gdHJ5IG9ubHkgY2FsYydkIHBhcmFtZXRlciBrOyBlbHNlIHRyeSBhbGwgW2stZGlzdC4uaytkaXN0XSBwYXJhbWV0ZXJzLCB1c2UgYmVzdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RmxhY0VuYzo6c3RyZWFtYWJsZS1zdWJzZXQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdHJlYW1hYmxlIHN1YnNldDwvTklDSz4KLTxCTFVSQj50cnVlIHRvIGxpbWl0IGVuY29kZXIgdG8gZ2VuZXJhdGluZyBhIFN1YnNldCBzdHJlYW0sIGVsc2UgZmFsc2UuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEZsYWNFbmM6OnBhZGRpbmc8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5QYWRkaW5nPC9OSUNLPgotPEJMVVJCPldyaXRlIGEgUEFERElORyBibG9jayB3aXRoIHRoaXMgbGVuZ3RoIGluIGJ5dGVzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjRW5jOjpzZWVrcG9pbnRzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAtMjE0NzQ4MzY0NzwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNlZWtwb2ludHM8L05JQ0s+Ci08QkxVUkI+QWRkIFNFRUtUQUJMRSBtZXRhZGF0YSAoaWYgPiAwLCBudW1iZXIgb2YgZW50cmllcywgaWYgPCAwLCBpbnRlcnZhbCBpbiBzZWMpLjwvQkxVUkI+Ci08REVGQVVMVD4tMTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE9zc1Npbms6OmRldmljZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRldmljZTwvTklDSz4KLTxCTFVSQj5PU1MgZGV2aWNlICh1c3VhbGx5IC9kZXYvZHNwTikuPC9CTFVSQj4KLTxERUZBVUxUPiIvZGV2L2RzcCI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1hdHJvc2thTXV4Ojp3cml0aW5nLWFwcDwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPldyaXRpbmcgYXBwbGljYXRpb24uPC9OSUNLPgotPEJMVVJCPlRoZSBuYW1lIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIG1hdHJvc2thIGZpbGUuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1hdHJvc2thTXV4Ojp2ZXJzaW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwyXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RG9jVHlwZSB2ZXJzaW9uPC9OSUNLPgotPEJMVVJCPlRoaXMgcGFyYW1ldGVyIGRldGVybWluZXMgd2hhdCBNYXRyb3NrYSBmZWF0dXJlcyBjYW4gYmUgdXNlZC48L0JMVVJCPgotPERFRkFVTFQ+MjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TWF0cm9za2FNdXg6Om1pbi1pbmRleC1pbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmdpbnQ2NDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NaW5pbXVtIHRpbWUgYmV0d2VlbiBpbmRleCBlbnRyaWVzPC9OSUNLPgotPEJMVVJCPkFuIGluZGV4IGVudHJ5IGlzIGNyZWF0ZWQgZXZlcnkgc28gbWFueSBuYW5vc2Vjb25kcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TWF0cm9za2FNdXg6OnN0cmVhbWFibGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRldGVybWluZXMgd2hldGhlciBvdXRwdXQgc2hvdWxkIGJlIHN0cmVhbWFibGU8L05JQ0s+Ci08QkxVUkI+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1hdHJvc2thTXV4Ojp0aW1lY29kZXNjYWxlPC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPlsxLDEwMDAwMDAwMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaW1lY29kZSBTY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lY29kZVNjYWxlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBSYXcgVGltZWNvZGUgb2YgYSBCbG9jay48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VGVzdDo6YWxsb3dlZC10aW1lc3RhbXAtZGV2aWF0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5hbGxvd2VkIHRpbWVzdGFtcCBkZXZpYXRpb248L05JQ0s+Ci08QkxVUkI+YWxsb3dlZCBhdmVyYWdlIGRpZmZlcmVuY2UgaW4gdXNlYyBiZXR3ZWVuIHRpbWVzdGFtcCBvZiBuZXh0IGJ1ZmZlciBhbmQgZXhwZWN0ZWQgdGltZXN0YW1wIGZyb20gYW5hbHl6aW5nIGxhc3QgYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VGVzdDo6YnVmZmVyLWNvdW50PC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+YnVmZmVyIGNvdW50PC9OSUNLPgotPEJMVVJCPm51bWJlciBvZiBidWZmZXJzIGluIHN0cmVhbS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFRlc3Q6OmV4cGVjdGVkLWJ1ZmZlci1jb3VudDwvTkFNRT4KLTxUWVBFPmdpbnQ2NDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZXhwZWN0ZWQgYnVmZmVyIGNvdW50PC9OSUNLPgotPEJMVVJCPmV4cGVjdGVkIG51bWJlciBvZiBidWZmZXJzIGluIHN0cmVhbS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFRlc3Q6OmV4cGVjdGVkLWxlbmd0aDwvTkFNRT4KLTxUWVBFPmdpbnQ2NDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZXhwZWN0ZWQgbGVuZ3RoPC9OSUNLPgotPEJMVVJCPmV4cGVjdGVkIGxlbmd0aCBvZiBzdHJlYW0uPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RUZXN0OjpleHBlY3RlZC1tZDU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZXhwZWN0ZWQgbWQ1PC9OSUNLPgotPEJMVVJCPmV4cGVjdGVkIG1kNSBvZiBwcm9jZXNzaW5nIHRoZSB3aG9sZSBkYXRhLjwvQkxVUkI+Ci08REVGQVVMVD4iLS0tIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VGVzdDo6bGVuZ3RoPC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGVuZ3RoPC9OSUNLPgotPEJMVVJCPmxlbmd0aCBvZiBzdHJlYW0uPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RUZXN0OjptZDU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPm1kNTwvTklDSz4KLTxCTFVSQj5tZDUgb2YgcHJvY2Vzc2luZyB0aGUgd2hvbGUgZGF0YS48L0JMVVJCPgotPERFRkFVTFQ+Ii0tLSI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFRlc3Q6OnRpbWVzdGFtcC1kZXZpYXRpb248L05BTUU+Ci08VFlQRT5naW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz50aW1lc3RhbXAgZGV2aWF0aW9uPC9OSUNLPgotPEJMVVJCPmF2ZXJhZ2UgZGlmZmVyZW5jZSBpbiB1c2VjIGJldHdlZW4gdGltZXN0YW1wIG9mIG5leHQgYnVmZmVyIGFuZCBleHBlY3RlZCB0aW1lc3RhbXAgZnJvbSBhbmFseXppbmcgbGFzdCBidWZmZXIuPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQcm9ncmVzc1JlcG9ydDo6c2lsZW50PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EbyBub3QgcHJpbnQgb3V0cHV0IHRvIHN0ZG91dDwvTklDSz4KLTxCTFVSQj5EbyBub3QgcHJpbnQgb3V0cHV0IHRvIHN0ZG91dC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFByb2dyZXNzUmVwb3J0Ojp1cGRhdGUtZnJlcTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VXBkYXRlIEZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2Ygc2Vjb25kcyBiZXR3ZWVuIHJlcG9ydHMgd2hlbiBkYXRhIGlzIGZsb3dpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFByb2dyZXNzUmVwb3J0Ojpmb3JtYXQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5mb3JtYXQ8L05JQ0s+Ci08QkxVUkI+Rm9ybWF0IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5aW5nLjwvQkxVUkI+Ci08REVGQVVMVD4iYXV0byI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFByb2dyZXNzUmVwb3J0Ojpkby1xdWVyeTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VXNlIGEgcXVlcnkgaW5zdGVhZCBvZiBidWZmZXIgbWV0YWRhdGEgdG8gZGV0ZXJtaW5lIHN0cmVhbSBwb3NpdGlvbjwvTklDSz4KLTxCTFVSQj5Vc2UgYSBxdWVyeSBpbnN0ZWFkIG9mIGJ1ZmZlciBtZXRhZGF0YSB0byBkZXRlcm1pbmUgc3RyZWFtIHBvc2l0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3ROYXZTZWVrOjpzZWVrLW9mZnNldDwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2VlayBPZmZzZXQ8L05JQ0s+Ci08QkxVUkI+VGltZSBpbiBzZWNvbmRzIHRvIHNlZWsgYnkuPC9CTFVSQj4KLTxERUZBVUxUPjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEJyZWFrTXlEYXRhOjpwcm9iYWJpbGl0eTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wcm9iYWJpbGl0eTwvTklDSz4KLTxCTFVSQj5wcm9iYWJpbGl0eSBmb3IgZWFjaCBieXRlIGluIHRoZSBidWZmZXIgdG8gYmUgY2hhbmdlZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QnJlYWtNeURhdGE6OnNlZWQ8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5zZWVkPC9OSUNLPgotPEJMVVJCPnNlZWQgZm9yIHJhbmRvbW5lc3MgKGluaXRpYWxpemVkIHdoZW4gZ29pbmcgZnJvbSBSRUFEWSB0byBQQVVTRUQpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RCcmVha015RGF0YTo6c2V0LXRvPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bR19NQVhVTE9ORywyNTVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+c2V0LXRvPC9OSUNLPgotPEJMVVJCPnNldCBjaGFuZ2VkIGJ5dGVzIHRvIHRoaXMgdmFsdWUgKC0xIG1lYW5zIHJhbmRvbSB2YWx1ZS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEJyZWFrTXlEYXRhOjpza2lwPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+c2tpcDwvTklDSz4KLTxCTFVSQj5hbW91bnQgb2YgYnl0ZXMgc2tpcHBlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN0cmVhbS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0Q3V0dGVyOjpsZWFreTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TGVha3k8L05JQ0s+Ci08QkxVUkI+ZG8gd2UgbGVhayBidWZmZXJzIHdoZW4gYmVsb3cgdGhyZXNob2xkID8uPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDdXR0ZXI6OnByZS1sZW5ndGg8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UHJlLXJlY29yZGluZyBidWZmZXIgbGVuZ3RoPC9OSUNLPgotPEJMVVJCPkxlbmd0aCBvZiBwcmUtcmVjb3JkaW5nIGJ1ZmZlciAoaW4gbmFub3NlY29uZHMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDdXR0ZXI6OnJ1bi1sZW5ndGg8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UnVuIGxlbmd0aDwvTklDSz4KLTxCTFVSQj5MZW5ndGggb2YgZHJvcCBiZWxvdyB0aHJlc2hvbGQgYmVmb3JlIGN1dF9zdG9wIChpbiBuYW5vc2Vjb25kcykuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEN1dHRlcjo6dGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5Wb2x1bWUgdGhyZXNob2xkIGJlZm9yZSB0cmlnZ2VyLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDdXR0ZXI6OnRocmVzaG9sZC1kQjwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaHJlc2hvbGQgKGRCKTwvTklDSz4KLTxCTFVSQj5Wb2x1bWUgdGhyZXNob2xkIGJlZm9yZSB0cmlnZ2VyIChpbiBkQikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZpZGVvRmxpcDo6bWV0aG9kPC9OQU1FPgotPFRZUEU+R3N0VmlkZW9GbGlwTWV0aG9kPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPm1ldGhvZDwvTklDSz4KLTxCTFVSQj5tZXRob2QgKGRlcHJlY2F0ZWQsIHVzZSB2aWRlby1kaXJlY3Rpb24gaW5zdGVhZCkuPC9CTFVSQj4KLTxERUZBVUxUPklkZW50aXR5IChubyByb3RhdGlvbik8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cE1QNFZQYXk6OmNvbmZpZy1pbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDM2MDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvbmZpZyBTZW5kIEludGVydmFsPC9OSUNLPgotPEJMVVJCPlNlbmQgQ29uZmlnIEluc2VydGlvbiBJbnRlcnZhbCBpbiBzZWNvbmRzIChjb25maWd1cmF0aW9uIGhlYWRlcnMgd2lsbCBiZSBtdWx0aXBsZXhlZCBpbiB0aGUgZGF0YSBzdHJlYW0gd2hlbiBkZXRlY3RlZC4pICgwID0gZGlzYWJsZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aXBhcnRNdXg6OmJvdW5kYXJ5PC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Qm91bmRhcnk8L05JQ0s+Ci08QkxVUkI+Qm91bmRhcnkgc3RyaW5nLjwvQkxVUkI+Ci08REVGQVVMVD4iVGhpc1JhbmRvbVN0cmluZyI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElEM0RlbXV4OjpwcmVmZXItdjE8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5QcmVmZXIgdmVyc2lvbiAxIHRhZzwvTklDSz4KLTxCTFVSQj5QcmVmZXIgdGFncyBmcm9tIElEM3YxIHRhZyBhdCBlbmQgb2YgZmlsZSB3aGVuIGJvdGggSUQzdjEgYW5kIElEM3YyIHRhZ3MgYXJlIHByZXNlbnQuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REeW5VRFBTaW5rOjpjbG9zZS1zb2NrZXQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNsb3NlIHNvY2tldDwvTklDSz4KLTxCTFVSQj5DbG9zZSBzb2NrZXQgaWYgcGFzc2VkIGFzIHByb3BlcnR5IG9uIHN0YXRlIGNoYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RHluVURQU2luazo6c29ja2V0PC9OQU1FPgotPFRZUEU+R1NvY2tldCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Tb2NrZXQ8L05JQ0s+Ci08QkxVUkI+U29ja2V0IHRvIHVzZSBmb3IgVURQIHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REeW5VRFBTaW5rOjpiaW5kLWFkZHJlc3M8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CaW5kIEFkZHJlc3M8L05JQ0s+Ci08QkxVUkI+QWRkcmVzcyB0byBiaW5kIHRoZSBzb2NrZXQgdG8uPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdER5blVEUFNpbms6OmJpbmQtcG9ydDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNjU1MzVdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CaW5kIFBvcnQ8L05JQ0s+Ci08QkxVUkI+UG9ydCB0byBiaW5kIHRoZSBzb2NrZXQgdG8uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdER5blVEUFNpbms6OnNvY2tldC12NjwvTkFNRT4KLTxUWVBFPkdTb2NrZXQqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U29ja2V0IElQdjY8L05JQ0s+Ci08QkxVUkI+U29ja2V0IHRvIHVzZSBmb3IgVURQdjYgc2VuZGluZy4gKE5VTEwgPT0gYWxsb2NhdGUpLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6Ynl0ZXMtc2VydmVkPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+Qnl0ZXMgc2VydmVkPC9OSUNLPgotPEJMVVJCPlRvdGFsIG51bWJlciBvZiBieXRlcyBzZW50IHRvIGFsbCBjbGllbnRzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVVEUFNpbms6OmJ5dGVzLXRvLXNlcnZlPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+Qnl0ZXMgdG8gc2VydmU8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIHRvIHNlcnZlIHRvIGNsaWVudHMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6Y2xpZW50czwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNsaWVudHM8L05JQ0s+Ci08QkxVUkI+QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBob3N0OnBvcnQgcGFpcnMgd2l0aCBkZXN0aW5hdGlvbnMuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6YXV0by1tdWx0aWNhc3Q8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkF1dG9tYXRpY2FsbHkgam9pbi9sZWF2ZSBtdWx0aWNhc3QgZ3JvdXBzPC9OSUNLPgotPEJMVVJCPkF1dG9tYXRpY2FsbHkgam9pbi9sZWF2ZSB0aGUgbXVsdGljYXN0IGdyb3VwcywgRkFMU0UgbWVhbnMgdXNlciBoYXMgdG8gZG8gaXQgaGltc2VsZi48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpsb29wPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NdWx0aWNhc3QgTG9vcGJhY2s8L05JQ0s+Ci08QkxVUkI+VXNlZCBmb3Igc2V0dGluZyB0aGUgbXVsdGljYXN0IGxvb3AgcGFyYW1ldGVyLiBUUlVFID0gZW5hYmxlLCBGQUxTRSA9IGRpc2FibGUuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6cW9zLWRzY3A8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPltHX01BWFVMT05HLDYzXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UW9TIGRpZmYgc3J2IGNvZGUgcG9pbnQ8L05JQ0s+Ci08QkxVUkI+UXVhbGl0eSBvZiBTZXJ2aWNlLCBkaWZmZXJlbnRpYXRlZCBzZXJ2aWNlcyBjb2RlIHBvaW50ICgtMSBkZWZhdWx0KS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6dHRsPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwyNTVdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5VbmljYXN0IFRUTDwvTklDSz4KLTxCTFVSQj5Vc2VkIGZvciBzZXR0aW5nIHRoZSB1bmljYXN0IFRUTCBwYXJhbWV0ZXIuPC9CTFVSQj4KLTxERUZBVUxUPjY0PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVVEUFNpbms6OnR0bC1tYzwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMjU1XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TXVsdGljYXN0IFRUTDwvTklDSz4KLTxCTFVSQj5Vc2VkIGZvciBzZXR0aW5nIHRoZSBtdWx0aWNhc3QgVFRMIHBhcmFtZXRlci48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpzZW5kLWR1cGxpY2F0ZXM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNlbmQgRHVwbGljYXRlczwvTklDSz4KLTxCTFVSQj5XaGVuIGEgZGlzdGluYXRpb24vcG9ydCBwYWlyIGlzIGFkZGVkIG11bHRpcGxlIHRpbWVzLCBzZW5kIHBhY2tldHMgbXVsdGlwbGUgdGltZXMgYXMgd2VsbC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpidWZmZXItc2l6ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnVmZmVyIFNpemU8L05JQ0s+Ci08QkxVUkI+U2l6ZSBvZiB0aGUga2VybmVsIHNlbmQgYnVmZmVyIGluIGJ5dGVzLCAwPWRlZmF1bHQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6Y2xvc2Utc29ja2V0PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DbG9zZSBzb2NrZXQ8L05JQ0s+Ci08QkxVUkI+Q2xvc2Ugc29ja2V0IGlmIHBhc3NlZCBhcyBwcm9wZXJ0eSBvbiBzdGF0ZSBjaGFuZ2UuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6c29ja2V0PC9OQU1FPgotPFRZUEU+R1NvY2tldCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Tb2NrZXQgSGFuZGxlPC9OSUNLPgotPEJMVVJCPlNvY2tldCB0byB1c2UgZm9yIFVEUCBzZW5kaW5nLiAoTlVMTCA9PSBhbGxvY2F0ZSkuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjp1c2VkLXNvY2tldDwvTkFNRT4KLTxUWVBFPkdTb2NrZXQqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5Vc2VkIFNvY2tldCBIYW5kbGU8L05JQ0s+Ci08QkxVUkI+U29ja2V0IGN1cnJlbnRseSBpbiB1c2UgZm9yIFVEUCBzZW5kaW5nLiAoTlVMTCA9PSBubyBzb2NrZXQpLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6Zm9yY2UtaXB2NDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Rm9yY2UgSVB2NDwvTklDSz4KLTxCTFVSQj5Gb3JjaW5nIHRoZSB1c2Ugb2YgYW4gSVB2NCBzb2NrZXQgKERFUFJFQ0FURUQsIGhhcyBubyBlZmZlY3QgYW55bW9yZSkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNdWx0aVVEUFNpbms6Om11bHRpY2FzdC1pZmFjZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk11bHRpY2FzdCBJbnRlcmZhY2U8L05JQ0s+Ci08QkxVUkI+VGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cC48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpiaW5kLWFkZHJlc3M8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CaW5kIEFkZHJlc3M8L05JQ0s+Ci08QkxVUkI+QWRkcmVzcyB0byBiaW5kIHRoZSBzb2NrZXQgdG8uPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6YmluZC1wb3J0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2NTUzNV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJpbmQgUG9ydDwvTklDSz4KLTxCTFVSQj5Qb3J0IHRvIGJpbmQgdGhlIHNvY2tldCB0by48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpzb2NrZXQtdjY8L05BTUU+Ci08VFlQRT5HU29ja2V0KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNvY2tldCBIYW5kbGUgSVB2NjwvTklDSz4KLTxCTFVSQj5Tb2NrZXQgdG8gdXNlIGZvciBVRFB2NiBzZW5kaW5nLiAoTlVMTCA9PSBhbGxvY2F0ZSkuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjp1c2VkLXNvY2tldC12NjwvTkFNRT4KLTxUWVBFPkdTb2NrZXQqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5Vc2VkIFNvY2tldCBIYW5kbGUgSVB2NjwvTklDSz4KLTxCTFVSQj5Tb2NrZXQgY3VycmVudGx5IGluIHVzZSBmb3IgVURQdjYgc2VuZGluZy4gKE5VTEwgPT0gbm8gc29ja2V0KS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RYSW1hZ2VTcmM6OmRpc3BsYXktbmFtZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRpc3BsYXk8L05JQ0s+Ci08QkxVUkI+WCBEaXNwbGF5IE5hbWUuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFhJbWFnZVNyYzo6c2hvdy1wb2ludGVyPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TaG93IE1vdXNlIFBvaW50ZXI8L05JQ0s+Ci08QkxVUkI+U2hvdyBtb3VzZSBwb2ludGVyIChpZiBYRml4ZXMgZXh0ZW5zaW9uIGVuYWJsZWQpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RYSW1hZ2VTcmM6OmVuZHg8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSBHX01BWElOVDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RW5kIFg8L05JQ0s+Ci08QkxVUkI+WCBjb29yZGluYXRlIG9mIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgYXJlYSB0byBiZSByZWNvcmRlZCAoMCBmb3IgYm90dG9tIHJpZ2h0IG9mIHNjcmVlbikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFhJbWFnZVNyYzo6ZW5keTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IEdfTUFYSU5UPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5FbmQgWTwvTklDSz4KLTxCTFVSQj5ZIGNvb3JkaW5hdGUgb2YgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkICgwIGZvciBib3R0b20gcmlnaHQgb2Ygc2NyZWVuKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0WEltYWdlU3JjOjpzdGFydHg8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSBHX01BWElOVDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3RhcnQgWCBjby1vcmRpbmF0ZTwvTklDSz4KLTxCTFVSQj5YIGNvb3JkaW5hdGUgb2YgdG9wIGxlZnQgY29ybmVyIG9mIGFyZWEgdG8gYmUgcmVjb3JkZWQgKDAgZm9yIHRvcCBsZWZ0IG9mIHNjcmVlbikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFhJbWFnZVNyYzo6c3RhcnR5PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gR19NQVhJTlQ8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlN0YXJ0IFkgY28tb3JkaW5hdGU8L05JQ0s+Ci08QkxVUkI+WSBjb29yZGluYXRlIG9mIHRvcCBsZWZ0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkICgwIGZvciB0b3AgbGVmdCBvZiBzY3JlZW4pLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RYSW1hZ2VTcmM6OnVzZS1kYW1hZ2U8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZSBYRGFtYWdlPC9OSUNLPgotPEJMVVJCPlVzZSBYRGFtYWdlIChpZiBYRGFtYWdlIGV4dGVuc2lvbiBlbmFibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0WEltYWdlU3JjOjpyZW1vdGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJlbW90ZSBkaXNwYXk8L05JQ0s+Ci08QkxVUkI+V2hldGhlciB0aGUgZGlzcGxheSBpcyByZW1vdGUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RYSW1hZ2VTcmM6OnhpZDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5XaW5kb3cgWElEPC9OSUNLPgotPEJMVVJCPldpbmRvdyBYSUQgdG8gY2FwdHVyZSBmcm9tLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RYSW1hZ2VTcmM6OnhuYW1lPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+V2luZG93IG5hbWU8L05JQ0s+Ci08QkxVUkI+V2luZG93IG5hbWUgdG8gY2FwdHVyZSBmcm9tLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0JhbGFuY2U6OmJyaWdodG5lc3M8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnJpZ2h0bmVzczwvTklDSz4KLTxCTFVSQj5icmlnaHRuZXNzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0JhbGFuY2U6OmNvbnRyYXN0PC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q29udHJhc3Q8L05JQ0s+Ci08QkxVUkI+Y29udHJhc3QuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZpZGVvQmFsYW5jZTo6aHVlPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkh1ZTwvTklDSz4KLTxCTFVSQj5odWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZpZGVvQmFsYW5jZTo6c2F0dXJhdGlvbjwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNhdHVyYXRpb248L05JQ0s+Ci08QkxVUkI+c2F0dXJhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlwYXJ0RGVtdXg6OmJvdW5kYXJ5PC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJvdW5kYXJ5PC9OSUNLPgotPEJMVVJCPlRoZSBib3VuZGFyeSBzdHJpbmcgc2VwYXJhdGluZyBkYXRhLCBhdXRvbWF0aWMgaWYgTlVMTC48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TXVsdGlwYXJ0RGVtdXg6OnNpbmdsZS1zdHJlYW08L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNpbmdsZSBTdHJlYW08L05JQ0s+Ci08QkxVUkI+QXNzdW1lIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgc3RyZWFtIHdob3NlIGNvbnRlbnQtdHlwZSB3aWxsIG5vdCBjaGFuZ2UgYW5kIGVtaXQgbm8tbW9yZS1wYWRzIGFzIHNvb24gYXMgdGhlIGZpcnN0IGJvdW5kYXJ5IGNvbnRlbnQgaXMgcGFyc2VkLCBkZWNvZGVkLCBhbmQgcGFkcyBhcmUgbGlua2VkLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXZpTXV4OjpiaWdmaWxlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CaWdmaWxlIFN1cHBvcnQgKD4yR0IpPC9OSUNLPgotPEJMVVJCPlN1cHBvcnQgZm9yIG9wZW5ETUwtMi4wIChiaWcpIEFWSSBmaWxlcy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SnBlZ0RlYzo6aWRjdC1tZXRob2Q8L05BTUU+Ci08VFlQRT5Hc3RJRENUTWV0aG9kPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SURDVCBNZXRob2Q8L05JQ0s+Ci08QkxVUkI+VGhlIElEQ1QgYWxnb3JpdGhtIHRvIHVzZS48L0JMVVJCPgotPERFRkFVTFQ+RmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RKcGVnRGVjOjptYXgtZXJyb3JzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXhpbXVtIENvbnNlY3V0aXZlIERlY29kaW5nIEVycm9yczwvTklDSz4KLTxCTFVSQj4oRGVwcmVjYXRlZCkgRXJyb3Igb3V0IGFmdGVyIHJlY2VpdmluZyBOIGNvbnNlY3V0aXZlIGRlY29kaW5nIGVycm9ycyAoLTEgPSBuZXZlciBmYWlsLCAwID0gYXV0b21hdGljLCAxID0gZmFpbCBvbiBmaXJzdCBlcnJvcikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUUGlMQkNEZXBheTo6bW9kZTwvTkFNRT4KLTxUWVBFPmlMQkNNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5pTEJDIGZyYW1lIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPjMwbXMgZnJhbWVzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb1Bhbm9yYW1hOjpwYW5vcmFtYTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBhbm9yYW1hPC9OSUNLPgotPEJMVVJCPlBvc2l0aW9uIGluIHN0ZXJlbyBwYW5vcmFtYSAoLTEuMCBsZWZ0IC0+IDEuMCByaWdodCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvUGFub3JhbWE6Om1ldGhvZDwvTkFNRT4KLTxUWVBFPkdzdEF1ZGlvUGFub3JhbWFNZXRob2Q8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QYW5uaW5nIG1ldGhvZDwvTklDSz4KLTxCTFVSQj5Qc3ljaG9hY291c3RpYyBtb2RlIGtlZXBzIHNhbWUgcGVyY2VpdmVkIGxvdWRuZXNzLCBzaW1wbGUgbW9kZSBqdXN0IGNvbnRyb2xzIHZvbHVtZSBvZiBvbmUgY2hhbm5lbC48L0JMVVJCPgotPERFRkFVTFQ+UHN5Y2hvYWNvdXN0aWMgUGFubmluZyAoZGVmYXVsdCk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvSW52ZXJ0OjpkZWdyZWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRlZ3JlZTwvTklDSz4KLTxCTFVSQj5EZWdyZWUgb2YgaW52ZXJzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0FtcGxpZnk6OmFtcGxpZmljYXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BbXBsaWZpY2F0aW9uPC9OSUNLPgotPEJMVVJCPkZhY3RvciBvZiBhbXBsaWZpY2F0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0FtcGxpZnk6OmNsaXBwaW5nLW1ldGhvZDwvTkFNRT4KLTxUWVBFPkdzdEF1ZGlvQW1wbGlmeUNsaXBwaW5nTWV0aG9kPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2xpcHBpbmcgbWV0aG9kPC9OSUNLPgotPEJMVVJCPlNlbGVjdHMgaG93IHRvIGhhbmRsZSB2YWx1ZXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0uPC9CTFVSQj4KLTxERUZBVUxUPk5vcm1hbCBjbGlwcGluZyAoZGVmYXVsdCk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRHluYW1pYzo6Y2hhcmFjdGVyaXN0aWNzPC9OQU1FPgotPFRZUEU+R3N0QXVkaW9EeW5hbWljQ2hhcmFjdGVyaXN0aWNzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2hhcmFjdGVyaXN0aWNzPC9OSUNLPgotPEJMVVJCPlNlbGVjdHMgd2hldGhlciB0aGUgcmF0aW8gc2hvdWxkIGJlIGFwcGxpZWQgc21vb3RoIChzb2Z0LWtuZWUpIG9yIGhhcmQgKGhhcmQta25lZSkuPC9CTFVSQj4KLTxERUZBVUxUPkhhcmQgS25lZSAoZGVmYXVsdCk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRHluYW1pYzo6bW9kZTwvTkFNRT4KLTxUWVBFPkdzdEF1ZGlvRHluYW1pY01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Nb2RlPC9OSUNLPgotPEJMVVJCPlNlbGVjdHMgd2hldGhlciB0aGUgZmlsdGVyIHNob3VsZCB3b3JrIG9uIGxvdWQgc2FtcGxlcyAoY29tcHJlc3Nvcikgb3JxdWlldCBzYW1wbGVzIChleHBhbmRlcikuPC9CTFVSQj4KLTxERUZBVUxUPkNvbXByZXNzb3IgKGRlZmF1bHQpPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0R5bmFtaWM6OnJhdGlvPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJhdGlvPC9OSUNLPgotPEJMVVJCPlJhdGlvIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRHluYW1pYzo6dGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+VGhyZXNob2xkIHVudGlsIHRoZSBmaWx0ZXIgaXMgYWN0aXZhdGVkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RXYXZwYWNrRW5jOjpiaXRyYXRlPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gOTYwMDAwMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Qml0cmF0ZTwvTklDSz4KLTxCTFVSQj5UcnkgdG8gZW5jb2RlIHdpdGggdGhpcyBhdmVyYWdlIGJpdHJhdGUgKGJpdHMvc2VjKS4gVGhpcyBlbmFibGVzIGxvc3N5IGVuY29kaW5nLCB2YWx1ZXMgc21hbGxlciB0aGFuIDI0MDAwIGRpc2FibGUgaXQgYWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFdhdnBhY2tFbmM6OmJpdHMtcGVyLXNhbXBsZTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMjRdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CaXRzIHBlciBzYW1wbGU8L05JQ0s+Ci08QkxVUkI+VHJ5IHRvIGVuY29kZSB3aXRoIHRoaXMgYW1vdW50IG9mIGJpdHMgcGVyIHNhbXBsZS4gVGhpcyBlbmFibGVzIGxvc3N5IGVuY29kaW5nLCB2YWx1ZXMgc21hbGxlciB0aGFuIDIuMCBkaXNhYmxlIGl0IGFnYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RXYXZwYWNrRW5jOjpjb3JyZWN0aW9uLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RXYXZwYWNrRW5jQ29ycmVjdGlvbk1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db3JyZWN0aW9uIHN0cmVhbSBtb2RlPC9OSUNLPgotPEJMVVJCPlVzZSB0aGlzIG1vZGUgZm9yIHRoZSBjb3JyZWN0aW9uIHN0cmVhbS4gT25seSB3b3JrcyBpbiBsb3NzeSBtb2RlIS48L0JMVVJCPgotPERFRkFVTFQ+Q3JlYXRlIG5vIGNvcnJlY3Rpb24gZmlsZTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0V2F2cGFja0VuYzo6ZXh0cmEtcHJvY2Vzc2luZzwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDY8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkV4dHJhIHByb2Nlc3Npbmc8L05JQ0s+Ci08QkxVUkI+VXNlIGJldHRlciBidXQgc2xvd2VyIGZpbHRlcnMgZm9yIGJldHRlciBjb21wcmVzc2lvbi9xdWFsaXR5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RXYXZwYWNrRW5jOjpqb2ludC1zdGVyZW8tbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFdhdnBhY2tFbmNKU01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Kb2ludC1TdGVyZW8gbW9kZTwvTklDSz4KLTxCTFVSQj5Vc2UgdGhpcyBqb2ludC1zdGVyZW8gbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+YXV0bzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0V2F2cGFja0VuYzo6bWQ1PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NRDU8L05JQ0s+Ci08QkxVUkI+U3RvcmUgTUQ1IGhhc2ggb2YgcmF3IHNhbXBsZXMgd2l0aGluIHRoZSBmaWxlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0V2F2cGFja0VuYzo6bW9kZTwvTkFNRT4KLTxUWVBFPkdzdFdhdnBhY2tFbmNNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RW5jb2RpbmcgbW9kZTwvTklDSz4KLTxCTFVSQj5TcGVlZCB2ZXJzdXMgY29tcHJlc3Npb24gdHJhZGVvZmYuPC9CTFVSQj4KLTxERUZBVUxUPk5vcm1hbCBDb21wcmVzc2lvbjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwTVAyVERlcGF5Ojpza2lwLWZpcnN0LWJ5dGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ta2lwIGZpcnN0IGJ5dGVzPC9OSUNLPgotPEJMVVJCPlRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIHNraXBwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF5bG9hZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSDI2M1BQYXk6OmZyYWdtZW50YXRpb24tbW9kZTwvTkFNRT4KLTxUWVBFPkdzdEZyYWdtZW50YXRpb25Nb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RnJhZ21lbnRhdGlvbiBNb2RlPC9OSUNLPgotPEJMVVJCPlBhY2tldCBGcmFnbWVudGF0aW9uIE1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPk5vcm1hbDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0R2FtbWE6OmdhbW1hPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMC4wMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkdhbW1hPC9OSUNLPgotPEJMVVJCPmdhbW1hLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0Nyb3A6OmJvdHRvbTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Qm90dG9tPC9OSUNLPgotPEJMVVJCPlBpeGVscyB0byBjcm9wIGF0IGJvdHRvbSAoLTEgdG8gYXV0by1jcm9wKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9Dcm9wOjpsZWZ0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5MZWZ0PC9OSUNLPgotPEJMVVJCPlBpeGVscyB0byBjcm9wIGF0IGxlZnQgKC0xIHRvIGF1dG8tY3JvcCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZpZGVvQ3JvcDo6cmlnaHQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJpZ2h0PC9OSUNLPgotPEJMVVJCPlBpeGVscyB0byBjcm9wIGF0IHJpZ2h0ICgtMSB0byBhdXRvLWNyb3ApLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWaWRlb0Nyb3A6OnRvcDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VG9wPC9OSUNLPgotPEJMVVJCPlBpeGVscyB0byBjcm9wIGF0IHRvcCAoLTEgdG8gYXV0by1jcm9wKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6ZGV2aWNlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGV2aWNlPC9OSUNLPgotPEJMVVJCPkRldmljZSBsb2NhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+Ii9kZXYvdmlkZW8wIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6ZGV2aWNlLW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkRldmljZSBuYW1lPC9OSUNLPgotPEJMVVJCPk5hbWUgb2YgdGhlIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6ZmxhZ3M8L05BTUU+Ci08VFlQRT5Hc3RWNGwyRGV2aWNlVHlwZUZsYWdzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5GbGFnczwvTklDSz4KLTxCTFVSQj5EZXZpY2UgdHlwZSBmbGFncy48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU3JjOjpkZXZpY2UtZmQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+RmlsZSBkZXNjcmlwdG9yPC9OSUNLPgotPEJMVVJCPkZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6YnJpZ2h0bmVzczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CcmlnaHRuZXNzPC9OSUNLPgotPEJMVVJCPlBpY3R1cmUgYnJpZ2h0bmVzcywgb3IgbW9yZSBwcmVjaXNlbHksIHRoZSBibGFjayBsZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6Y29udHJhc3Q8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q29udHJhc3Q8L05JQ0s+Ci08QkxVUkI+UGljdHVyZSBjb250cmFzdCBvciBsdW1hIGdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTcmM6Omh1ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IdWU8L05JQ0s+Ci08QkxVUkI+SHVlIG9yIGNvbG9yIGJhbGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTcmM6OnNhdHVyYXRpb248L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2F0dXJhdGlvbjwvTklDSz4KLTxCTFVSQj5QaWN0dXJlIGNvbG9yIHNhdHVyYXRpb24gb3IgY2hyb21hIGdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTcmM6Om5vcm08L05BTUU+Ci08VFlQRT5WNEwyX1RWX25vcm1zPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VFYgbm9ybTwvTklDSz4KLTxCTFVSQj52aWRlbyBzdGFuZGFyZC48L0JMVVJCPgotPERFRkFVTFQ+bm9uZTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6aW8tbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFY0bDJJT01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JTyBtb2RlPC9OSUNLPgotPEJMVVJCPkkvTyBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5HU1RfVjRMMl9JT19BVVRPPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU3JjOjpleHRyYS1jb250cm9sczwvTkFNRT4KLTxUWVBFPkdzdFN0cnVjdHVyZSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5FeHRyYSBDb250cm9sczwvTklDSz4KLTxCTFVSQj5FeHRyYSB2NGwyIGNvbnRyb2xzIChDSURzKSBmb3IgdGhlIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU3JjOjpmb3JjZS1hc3BlY3QtcmF0aW88L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZvcmNlIGFzcGVjdCByYXRpbzwvTklDSz4KLTxCTFVSQj5XaGVuIGVuYWJsZWQsIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gd2lsbCBiZSBlbmZvcmNlZC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNyYzo6cGl4ZWwtYXNwZWN0LXJhdGlvPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UGl4ZWwgQXNwZWN0IFJhdGlvPC9OSUNLPgotPEJMVVJCPk92ZXJ3cml0ZSB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIG9mIHRoZSBkZXZpY2UuPC9CTFVSQj4KLTxERUZBVUxUPiIxLzEiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0NoZWJCYW5kOjpsb3dlci1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TG93ZXIgZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPlN0YXJ0IGZyZXF1ZW5jeSBvZiB0aGUgYmFuZCAoSHopLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0NoZWJCYW5kOjptb2RlPC9OQU1FPgotPFRZUEU+R3N0QXVkaW9DaGViQmFuZE1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Nb2RlPC9OSUNLPgotPEJMVVJCPkxvdyBwYXNzIG9yIGhpZ2ggcGFzcyBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5CYW5kIHBhc3MgKGRlZmF1bHQpPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0NoZWJCYW5kOjpwb2xlczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzQsMzJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb2xlczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgcG9sZXMgdG8gdXNlLCB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbHkgb2YgZm91ci48L0JMVVJCPgotPERFRkFVTFQ+NDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9DaGViQmFuZDo6cmlwcGxlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDIwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJpcHBsZTwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgcmlwcGxlIChkQikuPC9CTFVSQj4KLTxERUZBVUxUPjAuMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvQ2hlYkJhbmQ6OnR5cGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UeXBlPC9OSUNLPgotPEJMVVJCPlR5cGUgb2YgdGhlIGNoZWJ5Y2hldiBmaWx0ZXIuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvQ2hlYkJhbmQ6OnVwcGVyLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMDAwMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5VcHBlciBmcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+U3RvcCBmcmVxdWVuY3kgb2YgdGhlIGJhbmQgKEh6KS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9DaGViTGltaXQ6OmN1dG9mZjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMDAwMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DdXRvZmY8L05JQ0s+Ci08QkxVUkI+Q3V0IG9mZiBmcmVxdWVuY3kgKEh6KS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9DaGViTGltaXQ6Om1vZGU8L05BTUU+Ci08VFlQRT5Hc3RBdWRpb0NoZWJMaW1pdE1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Nb2RlPC9OSUNLPgotPEJMVVJCPkxvdyBwYXNzIG9yIGhpZ2ggcGFzcyBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5Mb3cgcGFzcyAoZGVmYXVsdCk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvQ2hlYkxpbWl0Ojpwb2xlczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzIsMzJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb2xlczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgcG9sZXMgdG8gdXNlLCB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgZXZlbiBudW1iZXIuPC9CTFVSQj4KLTxERUZBVUxUPjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvQ2hlYkxpbWl0OjpyaXBwbGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmlwcGxlPC9OSUNLPgotPEJMVVJCPkFtb3VudCBvZiByaXBwbGUgKGRCKS48L0JMVVJCPgotPERFRkFVTFQ+MC4yNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9DaGViTGltaXQ6OnR5cGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDJdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UeXBlPC9OSUNLPgotPEJMVVJCPlR5cGUgb2YgdGhlIGNoZWJ5Y2hldiBmaWx0ZXIuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvV1NpbmNCYW5kOjpsb3dlci1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TG93ZXIgRnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkN1dC1vZmYgbG93ZXIgZnJlcXVlbmN5IChIeikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvV1NpbmNCYW5kOjp1cHBlci1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VXBwZXIgRnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkN1dC1vZmYgdXBwZXIgZnJlcXVlbmN5IChIeikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvV1NpbmNCYW5kOjptb2RlPC9OQU1FPgotPFRZUEU+R3N0QXVkaW9XU2luY0JhbmRNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5CYW5kIHBhc3Mgb3IgYmFuZCByZWplY3QgbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+QmFuZCBwYXNzIChkZWZhdWx0KTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9XU2luY0JhbmQ6OndpbmRvdzwvTkFNRT4KLTxUWVBFPkdzdEF1ZGlvV1NpbmNCYW5kV2luZG93PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+V2luZG93PC9OSUNLPgotPEJMVVJCPldpbmRvdyBmdW5jdGlvbiB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPkhhbW1pbmcgd2luZG93IChkZWZhdWx0KTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9XU2luY0JhbmQ6Omxlbmd0aDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzMsMjU2MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TGVuZ3RoPC9OSUNLPgotPEJMVVJCPkZpbHRlciBrZXJuZWwgbGVuZ3RoLCB3aWxsIGJlIHJvdW5kZWQgdG8gdGhlIG5leHQgb2RkIG51bWJlci48L0JMVVJCPgotPERFRkFVTFQ+MTAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb1dTaW5jTGltaXQ6Omxlbmd0aDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzMsMjU2MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TGVuZ3RoPC9OSUNLPgotPEJMVVJCPkZpbHRlciBrZXJuZWwgbGVuZ3RoLCB3aWxsIGJlIHJvdW5kZWQgdG8gdGhlIG5leHQgb2RkIG51bWJlci48L0JMVVJCPgotPERFRkFVTFQ+MTAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb1dTaW5jTGltaXQ6Om1vZGU8L05BTUU+Ci08VFlQRT5Hc3RBdWRpb1dTaW5jTGltaXRNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5Mb3cgcGFzcyBvciBoaWdoIHBhc3MgbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+TG93IHBhc3MgKGRlZmF1bHQpPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb1dTaW5jTGltaXQ6OndpbmRvdzwvTkFNRT4KLTxUWVBFPkdzdEF1ZGlvV1NpbmNMaW1pdFdpbmRvdzwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPldpbmRvdzwvTklDSz4KLTxCTFVSQj5XaW5kb3cgZnVuY3Rpb24gdG8gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD5IYW1taW5nIHdpbmRvdyAoZGVmYXVsdCk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvV1NpbmNMaW1pdDo6Y3V0b2ZmPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkN1dG9mZjwvTklDSz4KLTxCTFVSQj5DdXQtb2ZmIEZyZXF1ZW5jeSAoSHopLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSbmRCdWZmZXJTaXplOjptYXg8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDE8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5tYXhpbXVtPC9OSUNLPgotPEJMVVJCPm1heGltdW0gYnVmZmVyIHNpemUuPC9CTFVSQj4KLTxERUZBVUxUPjgxOTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJuZEJ1ZmZlclNpemU6Om1pbjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPm1pbmludW08L05JQ0s+Ci08QkxVUkI+bWluaW51bSBidWZmZXIgc2l6ZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0Um5kQnVmZmVyU2l6ZTo6c2VlZDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnJhbmRvbSBudW1iZXIgc2VlZDwvTklDSz4KLTxCTFVSQj5zZWVkIGZvciByYW5kb21uZXNzIChpbml0aWFsaXplZCB3aGVuIGdvaW5nIGZyb20gUkVBRFkgdG8gUEFVU0VEKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXV0b0F1ZGlvU2luazo6dHMtb2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VFMgT2Zmc2V0PC9OSUNLPgotPEJMVVJCPlRpbWVzdGFtcCBvZmZzZXQgaW4gbmFub3NlY29uZHMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1dG9BdWRpb1Npbms6OnN5bmM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlN5bmM8L05JQ0s+Ci08QkxVUkI+U3luYyBvbiB0aGUgY2xvY2suPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1dG9WaWRlb1Npbms6OnRzLW9mZnNldDwvTkFNRT4KLTxUWVBFPmdpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRTIE9mZnNldDwvTklDSz4KLTxCTFVSQj5UaW1lc3RhbXAgb2Zmc2V0IGluIG5hbm9zZWNvbmRzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdXRvVmlkZW9TaW5rOjpzeW5jPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TeW5jPC9OSUNLPgotPEJMVVJCPlN5bmMgb24gdGhlIGNsb2NrLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPc3hBdWRpb1Npbms6OmRldmljZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGV2aWNlIElEPC9OSUNLPgotPEJMVVJCPkRldmljZSBJRCBvZiBvdXRwdXQgZGV2aWNlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPc3hBdWRpb1NyYzo6ZGV2aWNlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EZXZpY2UgSUQ8L05JQ0s+Ci08QkxVUkI+RGV2aWNlIElEIG9mIGlucHV0IGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T1NYVmlkZW9TaW5rOjplbWJlZDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+ZW1iZWQ8L05JQ0s+Ci08QkxVUkI+V2hlbiBlbmFibGVkLCBpdCAgY2FuIGJlIGVtYmVkZGVkLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T1NYVmlkZW9TaW5rOjpmdWxsc2NyZWVuPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5mdWxsc2NyZWVuPC9OSUNLPgotPEJMVVJCPldoZW4gZW5hYmxlZCwgdGhlIHZpZXcgIGlzIGZ1bGxzY3JlZW4uPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RHZGtQaXhidWZTaW5rOjpsYXN0LXBpeGJ1ZjwvTkFNRT4KLTxUWVBFPkdka1BpeGJ1Zio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkxhc3QgUGl4YnVmPC9OSUNLPgotPEJMVVJCPkxhc3QgR2RrUGl4YnVmIG9iamVjdCByZW5kZXJlZC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RHZGtQaXhidWZTaW5rOjpwb3N0LW1lc3NhZ2VzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3N0IE1lc3NhZ2VzPC9OSUNLPgotPEJMVVJCPldoZXRoZXIgdG8gcG9zdCBtZXNzYWdlcyBjb250YWluaW5nIHBpeGJ1ZnMgb24gdGhlIGJ1cy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEhUVFBTcmM6OmF1dG9tYXRpYy1yZWRpcmVjdDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+YXV0b21hdGljLXJlZGlyZWN0PC9OSUNLPgotPEJMVVJCPkF1dG9tYXRpY2FsbHkgZm9sbG93IEhUVFAgcmVkaXJlY3RzIChIVFRQIFN0YXR1cyBDb2RlIDN4eCkuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjpjb29raWVzPC9OQU1FPgotPFRZUEU+R1N0cnY8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db29raWVzPC9OSUNLPgotPEJMVVJCPkhUVFAgcmVxdWVzdCBjb29raWVzLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjppcmFkaW8tbW9kZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+aXJhZGlvLW1vZGU8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIGludGVybmV0IHJhZGlvIG1vZGUgKGFzayBzZXJ2ZXIgdG8gc2VuZCBzaG91dGNhc3QvaWNlY2FzdCBtZXRhZGF0YSBpbnRlcmxlYXZlZCB3aXRoIHRoZSBhY3R1YWwgc3RyZWFtIGRhdGEpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6bG9jYXRpb248L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Mb2NhdGlvbjwvTklDSz4KLTxCTFVSQj5Mb2NhdGlvbiB0byByZWFkIGZyb20uPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6cHJveHk8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qcm94eTwvTklDSz4KLTxCTFVSQj5IVFRQIHByb3h5IHNlcnZlciBVUkkuPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6dXNlci1hZ2VudDwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlVzZXItQWdlbnQ8L05JQ0s+Ci08QkxVUkI+VmFsdWUgb2YgdGhlIFVzZXItQWdlbnQgSFRUUCByZXF1ZXN0IGhlYWRlciBmaWVsZC48L0JMVVJCPgotPERFRkFVTFQ+IkdTdHJlYW1lciBzb3VwaHR0cHNyYyAiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6aXMtbGl2ZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+aXMtbGl2ZTwvTklDSz4KLTxCTFVSQj5BY3QgbGlrZSBhIGxpdmUgc291cmNlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEhUVFBTcmM6OnByb3h5LWlkPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+cHJveHktaWQ8L05JQ0s+Ci08QkxVUkI+SFRUUCBwcm94eSBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6cHJveHktcHc8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wcm94eS1wdzwvTklDSz4KLTxCTFVSQj5IVFRQIHByb3h5IFVSSSB1c2VyIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjp1c2VyLWlkPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+dXNlci1pZDwvTklDSz4KLTxCTFVSQj5IVFRQIGxvY2F0aW9uIFVSSSB1c2VyIGlkIGZvciBhdXRoZW50aWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjp1c2VyLXB3PC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+dXNlci1wdzwvTklDSz4KLTxCTFVSQj5IVFRQIGxvY2F0aW9uIFVSSSB1c2VyIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjpleHRyYS1oZWFkZXJzPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkV4dHJhIEhlYWRlcnM8L05JQ0s+Ci08QkxVUkI+RXh0cmEgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIEhUVFAgcmVxdWVzdC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6dGltZW91dDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDM2MDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnRpbWVvdXQ8L05JQ0s+Ci08QkxVUkI+VmFsdWUgaW4gc2Vjb25kcyB0byB0aW1lb3V0IGEgYmxvY2tpbmcgSS9PICgwID0gTm8gdGltZW91dCkuPC9CTFVSQj4KLTxERUZBVUxUPjE1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6Y29tcHJlc3M8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvbXByZXNzPC9OSUNLPgotPEJMVVJCPkFsbG93IGNvbXByZXNzZWQgY29udGVudCBlbmNvZGluZ3MuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6aHR0cC1sb2ctbGV2ZWw8L05BTUU+Ci08VFlQRT5Tb3VwTG9nZ2VyTG9nTGV2ZWw8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IVFRQIGxvZyBsZXZlbDwvTklDSz4KLTxCTFVSQj5TZXQgbG9nIGxldmVsIGZvciBzb3VwJ3MgSFRUUCBzZXNzaW9uIGxvZy48L0JMVVJCPgotPERFRkFVTFQ+U09VUF9MT0dHRVJfTE9HX0hFQURFUlM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjprZWVwLWFsaXZlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5rZWVwLWFsaXZlPC9OSUNLPgotPEJMVVJCPlVzZSBIVFRQIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6cmV0cmllczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmV0cmllczwvTklDSz4KLTxCTFVSQj5NYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIHVudGlsIGdpdmluZyB1cCAoLTE9aW5maW5pdGUpLjwvQkxVUkI+Ci08REVGQVVMVD4zPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6c3NsLWNhLWZpbGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TU0wgQ0EgRmlsZTwvTklDSz4KLTxCTFVSQj5Mb2NhdGlvbiBvZiBhIFNTTCBhbmNob3IgQ0EgZmlsZSB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjpzc2wtc3RyaWN0PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TU0wgU3RyaWN0PC9OSUNLPgotPEJMVVJCPlN0cmljdCBTU0wgY2VydGlmaWNhdGUgY2hlY2tpbmcuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjpzc2wtdXNlLXN5c3RlbS1jYS1maWxlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Vc2UgU3lzdGVtIENBIEZpbGU8L05JQ0s+Ci08QkxVUkI+VXNlIHN5c3RlbSBDQSBmaWxlLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSFRUUFNyYzo6dGxzLWRhdGFiYXNlPC9OQU1FPgotPFRZUEU+R1Rsc0RhdGFiYXNlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRMUyBkYXRhYmFzZTwvTklDSz4KLTxCTFVSQj5UTFMgZGF0YWJhc2Ugd2l0aCBhbmNob3IgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgdXNlZCB0byB2YWxpZGF0ZSB0aGUgc2VydmVyIGNlcnRpZmljYXRlLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjptZXRob2Q8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IVFRQIG1ldGhvZDwvTklDSz4KLTxCTFVSQj5UaGUgSFRUUCBtZXRob2QgdG8gdXNlIChHRVQsIEhFQUQsIE9QVElPTlMsIGV0YykuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIVFRQU3JjOjp0bHMtaW50ZXJhY3Rpb248L05BTUU+Ci08VFlQRT5HVGxzSW50ZXJhY3Rpb24qPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VExTIGludGVyYWN0aW9uPC9OSUNLPgotPEJMVVJCPkEgR1Rsc0ludGVyYWN0aW9uIG9iamVjdCB0byBiZSB1c2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24gb3IgY2VydGlmaWNhdGUgZGF0YWJhc2UgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSB1c2VyLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUUERWUGF5Ojptb2RlPC9OQU1FPgotPFRZUEU+R3N0RFZQYXlNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5UaGUgcGF5bG9hZCBtb2RlIG9mIHBheWxvYWRpbmcuPC9CTFVSQj4KLTxERUZBVUxUPlZpZGVvIG9ubHk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEgyNjRQYXk6OnNwcm9wLXBhcmFtZXRlci1zZXRzPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+c3Byb3AtcGFyYW1ldGVyLXNldHM8L05JQ0s+Ci08QkxVUkI+VGhlIGJhc2U2NCBzcHJvcC1wYXJhbWV0ZXItc2V0cyB0byBzZXQgaW4gb3V0IGNhcHMgKHNldCB0byBOVUxMIHRvIGV4dHJhY3QgZnJvbSBzdHJlYW0pLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBIMjY0UGF5Ojpjb25maWctaW50ZXJ2YWw8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPltHX01BWFVMT05HLDM2MDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TUFMgUFBTIFNlbmQgSW50ZXJ2YWw8L05JQ0s+Ci08QkxVUkI+U2VuZCBTUFMgYW5kIFBQUyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoc3Byb3AgcGFyYW1ldGVyIHNldHMgd2lsbCBiZSBtdWx0aXBsZXhlZCBpbiB0aGUgZGF0YSBzdHJlYW0gd2hlbiBkZXRlY3RlZC4pICgwID0gZGlzYWJsZWQsIC0xID0gc2VuZCB3aXRoIGV2ZXJ5IElEUiBmcmFtZSkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJkTGltaXRlcjo6UmVzaWR1ZS1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc2lkdWUtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+UmVzaWR1ZS1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhhcmRMaW1pdGVyOjpXZXQtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XZXQtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+V2V0LWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGFyZExpbWl0ZXI6OmRCLWxpbWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kQi1saW1pdDwvTklDSz4KLTxCTFVSQj5kQi1saW1pdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRqLWVxLW1vbm86OkhpLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCw2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhpLWdhaW48L05JQ0s+Ci08QkxVUkI+SGktZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRqLWVxLW1vbm86OkxvLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCw2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvLWdhaW48L05JQ0s+Ci08QkxVUkI+TG8tZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRqLWVxLW1vbm86Ok1pZC1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NaWQtZ2FpbjwvTklDSz4KLTxCTFVSQj5NaWQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRqLWVxLW1vbm86OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGotZXE6OkhpLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCw2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhpLWdhaW48L05JQ0s+Ci08QkxVUkI+SGktZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRqLWVxOjpMby1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Mby1nYWluPC9OSUNLPgotPEJMVVJCPkxvLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kai1lcTo6TWlkLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCw2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1pZC1nYWluPC9OSUNLPgotPEJMVVJCPk1pZC1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGotZXE6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYnJhbmNoLWljLW9jb2M6OkZpcnN0LU91dHB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+Rmlyc3QtT3V0cHV0PC9OSUNLPgotPEJMVVJCPkZpcnN0LU91dHB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYnJhbmNoLWljLW9jb2M6OklucHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0PC9OSUNLPgotPEJMVVJCPklucHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1icmFuY2gtaWMtb2NvYzo6U2Vjb25kLU91dHB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+U2Vjb25kLU91dHB1dDwvTklDSz4KLTxCTFVSQj5TZWNvbmQtT3V0cHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FeGFnZ2VyYXRlOjphbW91bnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmFtb3VudDwvTklDSz4KLTxCTFVSQj5hbW91bnQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1UcmFuc3Bvc2U6OnRyYW5zcG9zZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTI0LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnRyYW5zcG9zZTwvTklDSz4KLTxCTFVSQj50cmFuc3Bvc2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BY2N1bXVsYXRlOjpkZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRlY2F5PC9OSUNLPgotPEJMVVJCPmRlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQWNjdW11bGF0ZTo6Z2xpc3NhbmRvPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmdsaXNzYW5kbzwvTklDSz4KLTxCTFVSQj5nbGlzc2FuZG8uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zaW51c1dhdmV3cmFwcGVyOjpXcmFwLWRlZ3JlZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XcmFwLWRlZ3JlZTwvTklDSz4KLTxCTFVSQj5XcmFwLWRlZ3JlZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdmVyZHJpdmU6OkRyaXZlLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDNdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJpdmUtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RHJpdmUtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tYmVxOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW1iZXE6OnBhcmFtLTEwMDAwSHotZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTEwMDAwSHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS0xMDAwMEh6LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tYmVxOjpwYXJhbS0xMDBIei1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMTAwSHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS0xMDBIei1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbWJlcTo6cGFyYW0tMTI1MEh6LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0xMjUwSHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS0xMjUwSHotZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW1iZXE6OnBhcmFtLTE1Nkh6LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0xNTZIei1nYWluPC9OSUNLPgotPEJMVVJCPnBhcmFtLTE1Nkh6LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tYmVxOjpwYXJhbS0xNzUwSHotZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTE3NTBIei1nYWluPC9OSUNLPgotPEJMVVJCPnBhcmFtLTE3NTBIei1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbWJlcTo6cGFyYW0tMjAwMDBIei1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMjAwMDBIei1nYWluPC9OSUNLPgotPEJMVVJCPnBhcmFtLTIwMDAwSHotZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW1iZXE6OnBhcmFtLTIyMEh6LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0yMjBIei1nYWluPC9OSUNLPgotPEJMVVJCPnBhcmFtLTIyMEh6LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tYmVxOjpwYXJhbS0yNTAwSHotZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTI1MDBIei1nYWluPC9OSUNLPgotPEJMVVJCPnBhcmFtLTI1MDBIei1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbWJlcTo6cGFyYW0tMzExSHotZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTMxMUh6LWdhaW48L05JQ0s+Ci08QkxVUkI+cGFyYW0tMzExSHotZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW1iZXE6OnBhcmFtLTM1MDBIei1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMzUwMEh6LWdhaW48L05JQ0s+Ci08QkxVUkI+cGFyYW0tMzUwMEh6LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tYmVxOjpwYXJhbS00NDBIei1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tNDQwSHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS00NDBIei1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbWJlcTo6cGFyYW0tNTAwMEh6LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS01MDAwSHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS01MDAwSHotZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW1iZXE6OnBhcmFtLTUwSHotZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTUwSHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS01MEh6LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tYmVxOjpwYXJhbS02MjJIei1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tNjIySHotZ2FpbjwvTklDSz4KLTxCTFVSQj5wYXJhbS02MjJIei1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbWJlcTo6cGFyYW0tODgwSHotZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTg4MEh6LWdhaW48L05JQ0s+Ci08QkxVUkI+cGFyYW0tODgwSHotZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6OkFtcGxpdHVkZS1jaGFuZ2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMiw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkFtcGxpdHVkZS1jaGFuZ2U8L05JQ0s+Ci08QkxVUkI+QW1wbGl0dWRlLWNoYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6OkFtcGxpdHVkZS1yYW5kb208L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkFtcGxpdHVkZS1yYW5kb208L05JQ0s+Ci08QkxVUkI+QW1wbGl0dWRlLXJhbmRvbS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6OkRlbGF5LWNoYW5nZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXktY2hhbmdlPC9OSUNLPgotPEJMVVJCPkRlbGF5LWNoYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6OkRlbGF5LXJhbmRvbTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXktcmFuZG9tPC9OSUNLPgotPEJMVVJCPkRlbGF5LXJhbmRvbS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6OkRlbGF5LXJhbmdlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMDEsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheS1yYW5nZTwvTklDSz4KLTxCTFVSQj5EZWxheS1yYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+NjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6OkRyeS13ZXQtbWl4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LXdldC1taXg8L05JQ0s+Ci08QkxVUkI+RHJ5LXdldC1taXguPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWxheW9yYW1hOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWxheW9yYW1hOjpGaXJzdC1kZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpcnN0LWRlbGF5PC9OSUNLPgotPEJMVVJCPkZpcnN0LWRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVsYXlvcmFtYTo6SW5wdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTk2LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0LWdhaW48L05JQ0s+Ci08QkxVUkI+SW5wdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5b3JhbWE6Ok51bWJlci1vZi10YXBzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMiwxMjhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TnVtYmVyLW9mLXRhcHM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyLW9mLXRhcHMuPC9CTFVSQj4KLTxERUZBVUxUPjI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWxheW9yYW1hOjpSYW5kb20tc2VlZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SYW5kb20tc2VlZDwvTklDSz4KLTxCTFVSQj5SYW5kb20tc2VlZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtMS1CYW5kd2lkdGgtLW9jdGF2ZXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtQmFuZHdpZHRoLS1vY3RhdmVzLTwvTklDSz4KLTxCTFVSQj5CYW5kLTEtQmFuZHdpZHRoLS1vY3RhdmVzLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtMS1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQwLDI4MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtRnJlcS0tSHotPC9OSUNLPgotPEJMVVJCPkJhbmQtMS1GcmVxLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtMS1HYWluLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy01MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtR2Fpbi0tZEItPC9OSUNLPgotPEJMVVJCPkJhbmQtMS1HYWluLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyLWJ3OjpCYW5kLTItQmFuZHdpZHRoLS1vY3RhdmVzLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0yLUJhbmR3aWR0aC0tb2N0YXZlcy08L05JQ0s+Ci08QkxVUkI+QmFuZC0yLUJhbmR3aWR0aC0tb2N0YXZlcy0uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyLWJ3OjpCYW5kLTItRnJlcS0tSHotPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxMDAsNTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMi1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC0yLUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MjAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplci1idzo6QmFuZC0yLUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMi1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC0yLUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtMy1CYW5kd2lkdGgtLW9jdGF2ZXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTMtQmFuZHdpZHRoLS1vY3RhdmVzLTwvTklDSz4KLTxCTFVSQj5CYW5kLTMtQmFuZHdpZHRoLS1vY3RhdmVzLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtMy1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwMCwxMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMy1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC0zLUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+NDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplci1idzo6QmFuZC0zLUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMy1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC0zLUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtNC1CYW5kd2lkdGgtLW9jdGF2ZXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTQtQmFuZHdpZHRoLS1vY3RhdmVzLTwvTklDSz4KLTxCTFVSQj5CYW5kLTQtQmFuZHdpZHRoLS1vY3RhdmVzLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtNC1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQwMCwyODAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNC1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC00LUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtNC1HYWluLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy01MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTQtR2Fpbi0tZEItPC9OSUNLPgotPEJMVVJCPkJhbmQtNC1HYWluLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyLWJ3OjpCYW5kLTUtQmFuZHdpZHRoLS1vY3RhdmVzLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC01LUJhbmR3aWR0aC0tb2N0YXZlcy08L05JQ0s+Ci08QkxVUkI+QmFuZC01LUJhbmR3aWR0aC0tb2N0YXZlcy0uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyLWJ3OjpCYW5kLTUtRnJlcS0tSHotPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxMDAwLDUwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC01LUZyZXEtLUh6LTwvTklDSz4KLTxCTFVSQj5CYW5kLTUtRnJlcS0tSHotLjwvQkxVUkI+Ci08REVGQVVMVD4zMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplci1idzo6QmFuZC01LUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNS1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC01LUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtNi1CYW5kd2lkdGgtLW9jdGF2ZXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTYtQmFuZHdpZHRoLS1vY3RhdmVzLTwvTklDSz4KLTxCTFVSQj5CYW5kLTYtQmFuZHdpZHRoLS1vY3RhdmVzLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtNi1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzMwMDAsOTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTYtRnJlcS0tSHotPC9OSUNLPgotPEJMVVJCPkJhbmQtNi1GcmVxLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjYwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyLWJ3OjpCYW5kLTYtR2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC02LUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5CYW5kLTYtR2Fpbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplci1idzo6QmFuZC03LUJhbmR3aWR0aC0tb2N0YXZlcy08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMSw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNy1CYW5kd2lkdGgtLW9jdGF2ZXMtPC9OSUNLPgotPEJMVVJCPkJhbmQtNy1CYW5kd2lkdGgtLW9jdGF2ZXMtLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplci1idzo6QmFuZC03LUZyZXEtLUh6LTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNjAwMCwxODAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTctRnJlcS0tSHotPC9OSUNLPgotPEJMVVJCPkJhbmQtNy1GcmVxLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjEyMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplci1idzo6QmFuZC03LUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNy1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC03LUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtOC1CYW5kd2lkdGgtLW9jdGF2ZXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTgtQmFuZHdpZHRoLS1vY3RhdmVzLTwvTklDSz4KLTxCTFVSQj5CYW5kLTgtQmFuZHdpZHRoLS1vY3RhdmVzLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXItYnc6OkJhbmQtOC1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEwMDAwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtOC1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC04LUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MTUwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyLWJ3OjpCYW5kLTgtR2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC04LUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5CYW5kLTgtR2Fpbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY3Jvc3NvdmVyRGlzdDo6Q3Jvc3NvdmVyLWFtcGxpdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3Jvc3NvdmVyLWFtcGxpdHVkZTwvTklDSz4KLTxCTFVSQj5Dcm9zc292ZXItYW1wbGl0dWRlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY3Jvc3NvdmVyRGlzdDo6U21vb3RoaW5nPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U21vb3RoaW5nPC9OSUNLPgotPEJMVVJCPlNtb290aGluZy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZhZERlbGF5OjpEZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmFkRGVsYXk6OkZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW11bHRpdm9pY2VDaG9ydXM6OkRlbGF5LWJhc2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEwLDQwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LWJhc2U8L05JQ0s+Ci08QkxVUkI+RGVsYXktYmFzZS48L0JMVVJCPgotPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tdWx0aXZvaWNlQ2hvcnVzOjpEZXR1bmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZXR1bmU8L05JQ0s+Ci08QkxVUkI+RGV0dW5lLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbXVsdGl2b2ljZUNob3J1czo6TEZPLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkxGTy1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1tdWx0aXZvaWNlQ2hvcnVzOjpOdW1iZXItb2Ytdm9pY2VzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk51bWJlci1vZi12b2ljZXM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyLW9mLXZvaWNlcy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW11bHRpdm9pY2VDaG9ydXM6Ok91dHB1dC1hdHRlbnVhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LWF0dGVudWF0aW9uPC9OSUNLPgotPEJMVVJCPk91dHB1dC1hdHRlbnVhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW11bHRpdm9pY2VDaG9ydXM6OlZvaWNlLXNlcGFyYXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Wb2ljZS1zZXBhcmF0aW9uPC9OSUNLPgotPEJMVVJCPlZvaWNlLXNlcGFyYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXN5bmNzcXVhcmUtZmNnYS1vYTo6RnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDY0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjE2PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc21vb3RoRGVjaW1hdGU6OlJlc2FtcGxlLXJhdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNDQxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzYW1wbGUtcmF0ZTwvTklDSz4KLTxCTFVSQj5SZXNhbXBsZS1yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD40NDEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNtb290aERlY2ltYXRlOjpTbW9vdGhpbmc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TbW9vdGhpbmc8L05JQ0s+Ci08QkxVUkI+U21vb3RoaW5nLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxscGFzcy1uOjpEZWNheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1UaW1lPC9OSUNLPgotPEJMVVJCPkRlY2F5LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbGxwYXNzLW46OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFsbHBhc3Mtbjo6TWF4LURlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXgtRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWF4LURlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxscGFzcy1sOjpEZWNheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1UaW1lPC9OSUNLPgotPEJMVVJCPkRlY2F5LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbGxwYXNzLWw6OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFsbHBhc3MtbDo6TWF4LURlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXgtRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWF4LURlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxscGFzcy1jOjpEZWNheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1UaW1lPC9OSUNLPgotPEJMVVJCPkRlY2F5LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbGxwYXNzLWM6OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFsbHBhc3MtYzo6TWF4LURlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXgtRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWF4LURlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZm1Pc2M6OldhdmVmb3JtPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldhdmVmb3JtPC9OSUNLPgotPEJMVVJCPldhdmVmb3JtLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZm9sZG92ZXI6OkRyaXZlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJpdmU8L05JQ0s+Ci08QkxVUkI+RHJpdmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mb2xkb3Zlcjo6U2tldzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNrZXc8L05JQ0s+Ci08QkxVUkI+U2tldy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZhbHZlOjpEaXN0b3J0aW9uLWNoYXJhY3RlcjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRpc3RvcnRpb24tY2hhcmFjdGVyPC9OSUNLPgotPEJMVVJCPkRpc3RvcnRpb24tY2hhcmFjdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmFsdmU6OkRpc3RvcnRpb24tbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EaXN0b3J0aW9uLWxldmVsPC9OSUNLPgotPEJMVVJCPkRpc3RvcnRpb24tbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kaWZmZXJlbmNlLWlhbWMtb2E6OklucHV0LXRvLVN1YnRyYWN0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0LXRvLVN1YnRyYWN0PC9OSUNLPgotPEJMVVJCPklucHV0LXRvLVN1YnRyYWN0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kaWZmZXJlbmNlLWljbWEtb2E6OklucHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0PC9OSUNLPgotPEJMVVJCPklucHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kaWZmZXJlbmNlLWljbWMtb2M6OkRpZmZlcmVuY2UtT3V0cHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5EaWZmZXJlbmNlLU91dHB1dDwvTklDSz4KLTxCTFVSQj5EaWZmZXJlbmNlLU91dHB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGlmZmVyZW5jZS1pY21jLW9jOjpJbnB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dDwvTklDSz4KLTxCTFVSQj5JbnB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGlmZmVyZW5jZS1pY21jLW9jOjpJbnB1dC10by1TdWJ0cmFjdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC10by1TdWJ0cmFjdDwvTklDSz4KLTxCTFVSQj5JbnB1dC10by1TdWJ0cmFjdC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTE6OkV4cC1GTS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cC1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkV4cC1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTE6OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTE6OklucHV0LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy02MCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC1nYWluPC9OSUNLPgotPEJMVVJCPklucHV0LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtMTo6T3V0cHV0LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xNSwxNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PdXRwdXQtZ2FpbjwvTklDSz4KLTxCTFVSQj5PdXRwdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi0xOjpSZXNvbmFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2U8L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTE6OlJlc29uYW5jZS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlLWdhaW48L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtMjo6RXhwLUZNLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RXhwLUZNLWdhaW48L05JQ0s+Ci08QkxVUkI+RXhwLUZNLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtMjo6RnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNiw2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtMjo6SW5wdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYwLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0LWdhaW48L05JQ0s+Ci08QkxVUkI+SW5wdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi0yOjpPdXRwdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTE1LDE1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1nYWluPC9OSUNLPgotPEJMVVJCPk91dHB1dC1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTI6OlJlc29uYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc29uYW5jZTwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtMjo6UmVzb25hbmNlLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2UtZ2FpbjwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi0zOjpFeHAtRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5FeHAtRk0tZ2FpbjwvTklDSz4KLTxCTFVSQj5FeHAtRk0tZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi0zOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy02LDZdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi0zOjpJbnB1dC1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNjAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5wdXQtZ2FpbjwvTklDSz4KLTxCTFVSQj5JbnB1dC1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTM6Ok91dHB1dC1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMTUsMTVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LWdhaW48L05JQ0s+Ci08QkxVUkI+T3V0cHV0LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtMzo6UmVzb25hbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi0zOjpSZXNvbmFuY2UtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc29uYW5jZS1nYWluPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTQ6OkV4cC1GTS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cC1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkV4cC1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTQ6OkZpbHRlci1wb2xlczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0ZXItcG9sZXM8L05JQ0s+Ci08QkxVUkI+RmlsdGVyLXBvbGVzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTQ6OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTQ6OklucHV0LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy02MCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC1nYWluPC9OSUNLPgotPEJMVVJCPklucHV0LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNscGYtNDo6T3V0cHV0LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xNSwxNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PdXRwdXQtZ2FpbjwvTklDSz4KLTxCTFVSQj5PdXRwdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2xwZi00OjpSZXNvbmFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2U8L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTXZjbHBmLTQ6OlJlc29uYW5jZS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlLWdhaW48L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbGllbndhaC1tb25vOjpEZWxheTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzUsNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbGllbndhaC1tb25vOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxpZW53YWgtbW9ubzo6RnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLGluZl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxpZW53YWgtbW9ubzo6SW5pdGlhbC1waGFzZS1mb3Itc3RlcmVvPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkluaXRpYWwtcGhhc2UtZm9yLXN0ZXJlbzwvTklDSz4KLTxCTFVSQj5Jbml0aWFsLXBoYXNlLWZvci1zdGVyZW8uPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFsaWVud2FoLXN0ZXJlbzo6RGVsYXk8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPls1LDUwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD41PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxpZW53YWgtc3RlcmVvOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxpZW53YWgtc3RlcmVvOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsaW5mXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbGllbndhaC1zdGVyZW86OkluaXRpYWwtcGhhc2UtZm9yLXN0ZXJlbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw2LDI4MzE5XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkluaXRpYWwtcGhhc2UtZm9yLXN0ZXJlbzwvTklDSz4KLTxCTFVSQj5Jbml0aWFsLXBoYXNlLWZvci1zdGVyZW8uPC9CTFVSQj4KLTxERUZBVUxUPjYsMjgzMTk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nQmVhdGVyOjpJbXB1bHNlLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkltcHVsc2UtZ2FpbjwvTklDSz4KLTxCTFVSQj5JbXB1bHNlLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPi03MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdvbmdCZWF0ZXI6OlN0cmlrZS1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0cmlrZS1kdXJhdGlvbjwvTklDSz4KLTxCTFVSQj5TdHJpa2UtZHVyYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjAsMTAwNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdvbmdCZWF0ZXI6OlN0cmlrZS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdHJpa2UtZ2FpbjwvTklDSz4KLTxCTFVSQj5TdHJpa2UtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1czE6OkRlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzMTo6TW9kLUFtcGxpdHVkZS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZC1BbXBsaXR1ZGUtMTwvTklDSz4KLTxCTFVSQj5Nb2QtQW1wbGl0dWRlLTEuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXMxOjpNb2QtQW1wbGl0dWRlLTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsM108L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb2QtQW1wbGl0dWRlLTI8L05JQ0s+Ci08QkxVUkI+TW9kLUFtcGxpdHVkZS0yLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzMTo6TW9kLUZyZXF1ZW5jeS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMywxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb2QtRnJlcXVlbmN5LTE8L05JQ0s+Ci08QkxVUkI+TW9kLUZyZXF1ZW5jeS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1czE6Ok1vZC1GcmVxdWVuY3ktMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb2QtRnJlcXVlbmN5LTI8L05JQ0s+Ci08QkxVUkI+TW9kLUZyZXF1ZW5jeS0yLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzMjo6RGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXMyOjpNb2QtQW1wbGl0dWRlLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kLUFtcGxpdHVkZS0xPC9OSUNLPgotPEJMVVJCPk1vZC1BbXBsaXR1ZGUtMS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1czI6Ok1vZC1BbXBsaXR1ZGUtMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZC1BbXBsaXR1ZGUtMjwvTklDSz4KLTxCTFVSQj5Nb2QtQW1wbGl0dWRlLTIuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXMyOjpNb2QtRnJlcXVlbmN5LTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAzLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZC1GcmVxdWVuY3ktMTwvTklDSz4KLTxCTFVSQj5Nb2QtRnJlcXVlbmN5LTEuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDAzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzMjo6TW9kLUZyZXF1ZW5jeS0yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZC1GcmVxdWVuY3ktMjwvTklDSz4KLTxCTFVSQj5Nb2QtRnJlcXVlbmN5LTIuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oaWxiZXJ0OjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcGVEZWxheTo6RHJ5LWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EcnktbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RHJ5LWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4tOTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXBlRGVsYXk6OlRhcC0xLWRpc3RhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGFwLTEtZGlzdGFuY2U8L05JQ0s+Ci08QkxVUkI+VGFwLTEtZGlzdGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXBlRGVsYXk6OlRhcC0xLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UYXAtMS1sZXZlbDwvTklDSz4KLTxCTFVSQj5UYXAtMS1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcGVEZWxheTo6VGFwLTItZGlzdGFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UYXAtMi1kaXN0YW5jZTwvTklDSz4KLTxCTFVSQj5UYXAtMi1kaXN0YW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcGVEZWxheTo6VGFwLTItbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRhcC0yLWxldmVsPC9OSUNLPgotPEJMVVJCPlRhcC0yLWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4tOTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXBlRGVsYXk6OlRhcC0zLWRpc3RhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGFwLTMtZGlzdGFuY2U8L05JQ0s+Ci08QkxVUkI+VGFwLTMtZGlzdGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXBlRGVsYXk6OlRhcC0zLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UYXAtMy1sZXZlbDwvTklDSz4KLTxCTFVSQj5UYXAtMy1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+LTkwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwZURlbGF5OjpUYXAtNC1kaXN0YW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRhcC00LWRpc3RhbmNlPC9OSUNLPgotPEJMVVJCPlRhcC00LWRpc3RhbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4zPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwZURlbGF5OjpUYXAtNC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGFwLTQtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+VGFwLTQtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPi05MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcGVEZWxheTo6VGFwZS1zcGVlZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UYXBlLXNwZWVkPC9OSUNLPgotPEJMVVJCPlRhcGUtc3BlZWQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zdW0taWFpYy1vYTo6U2Vjb25kLUlucHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNlY29uZC1JbnB1dDwvTklDSz4KLTxCTFVSQj5TZWNvbmQtSW5wdXQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXN1bS1pY2ljLW9jOjpGaXJzdC1JbnB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaXJzdC1JbnB1dDwvTklDSz4KLTxCTFVSQj5GaXJzdC1JbnB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3VtLWljaWMtb2M6OlNlY29uZC1JbnB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TZWNvbmQtSW5wdXQ8L05JQ0s+Ci08QkxVUkI+U2Vjb25kLUlucHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zdW0taWNpYy1vYzo6U3VtbWVkLU91dHB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+U3VtbWVkLU91dHB1dDwvTklDSz4KLTxCTFVSQj5TdW1tZWQtT3V0cHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzE6OkF0dGFjay10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyLDQwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BdHRhY2stdGltZTwvTklDSz4KLTxCTFVSQj5BdHRhY2stdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MTAxLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzE6OktuZWUtcmFkaXVzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPktuZWUtcmFkaXVzPC9OSUNLPgotPEJMVVJCPktuZWUtcmFkaXVzLjwvQkxVUkI+Ci08REVGQVVMVD4zLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2MxOjpNYWtldXAtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYWtldXAtZ2FpbjwvTklDSz4KLTxCTFVSQj5NYWtldXAtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjMTo6UmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmF0aW88L05JQ0s+Ci08QkxVUkI+UmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzE6OlJlbGVhc2UtdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiw4MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS10aW1lPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtdGltZS48L0JMVVJCPgotPERFRkFVTFQ+NDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2MxOjpUaHJlc2hvbGQtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0zMCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZC1sZXZlbDwvTklDSz4KLTxCTFVSQj5UaHJlc2hvbGQtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21iU3BsaXR0ZXI6OkJhbmQtc2VwYXJhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMTYsNjQwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtc2VwYXJhdGlvbjwvTklDSz4KLTxCTFVSQj5CYW5kLXNlcGFyYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjE3MjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjNG06OkFtcGxpdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQwLDEyXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5BbXBsaXR1ZGU8L05JQ0s+Ci08QkxVUkI+QW1wbGl0dWRlLjwvQkxVUkI+Ci08REVGQVVMVD4tNDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzRtOjpBdHRhY2stdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSw1LDQwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BdHRhY2stdGltZTwvTklDSz4KLTxCTFVSQj5BdHRhY2stdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MTAxLDEyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjNG06OkdhaW4tcmVkdWN0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjQsMF08L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+R2Fpbi1yZWR1Y3Rpb248L05JQ0s+Ci08QkxVUkI+R2Fpbi1yZWR1Y3Rpb24uPC9CTFVSQj4KLTxERUZBVUxUPi0yNDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjNG06OktuZWUtcmFkaXVzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPktuZWUtcmFkaXVzPC9OSUNLPgotPEJMVVJCPktuZWUtcmFkaXVzLjwvQkxVUkI+Ci08REVGQVVMVD4zLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2M0bTo6TWFrZXVwLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWFrZXVwLWdhaW48L05JQ0s+Ci08QkxVUkI+TWFrZXVwLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzRtOjpSTVMtcGVhazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJNUy1wZWFrPC9OSUNLPgotPEJMVVJCPlJNUy1wZWFrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2M0bTo6UmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmF0aW88L05JQ0s+Ci08QkxVUkI+UmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzRtOjpSZWxlYXNlLXRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIsODAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlbGVhc2UtdGltZTwvTklDSz4KLTxCTFVSQj5SZWxlYXNlLXRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjQwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjNG06OlRocmVzaG9sZC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTMwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGhyZXNob2xkLWxldmVsPC9OSUNLPgotPEJMVVJCPlRocmVzaG9sZC1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXByZWFtcDo6ZmM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwLDQwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZmM8L05JQ0s+Ci08QkxVUkI+ZmMuPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXByZWFtcDo6Z2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5nYWluPC9OSUNLPgotPEJMVVJCPmdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sc0ZpbHRlcjo6Q3V0b2ZmLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bODgsMiwyMjA1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DdXRvZmYtZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkN1dG9mZi1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjEzOTQsNTY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sc0ZpbHRlcjo6RmlsdGVyLXR5cGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdGVyLXR5cGU8L05JQ0s+Ci08QkxVUkI+RmlsdGVyLXR5cGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sc0ZpbHRlcjo6UmVzb25hbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW1hdHJpeE1TU3Q6OldpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2lkdGg8L05JQ0s+Ci08QkxVUkI+V2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1scGY6OkN1dG9mZi1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3V0b2ZmLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DdXRvZmYtRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ocGY6OkN1dG9mZi1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3V0b2ZmLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DdXRvZmYtRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6TWF0Y2gtUmFuZ2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1hdGNoLVJhbmdlPC9OSUNLPgotPEJMVVJCPk1hdGNoLVJhbmdlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6Ok1vZGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5Nb2RlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlF1YW50aXNlLVJhbmdlLU1heGltdW08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UXVhbnRpc2UtUmFuZ2UtTWF4aW11bTwvTklDSz4KLTxCTFVSQj5RdWFudGlzZS1SYW5nZS1NYXhpbXVtLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6UXVhbnRpc2UtUmFuZ2UtTWluaW11bTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5RdWFudGlzZS1SYW5nZS1NaW5pbXVtPC9OSUNLPgotPEJMVVJCPlF1YW50aXNlLVJhbmdlLU1pbmltdW0uPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpTdGVwczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3RlcHM8L05JQ0s+Ci08QkxVUkI+U3RlcHMuPC9CTFVSQj4KLTxERUZBVUxUPjUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS0wLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xPC9OSUNLPgotPEJMVVJCPlZhbHVlLTEuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0xMDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xMC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTExPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTExPC9OSUNLPgotPEJMVVJCPlZhbHVlLTExLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTIuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0xMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xMy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTE0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMTU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTUuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0xNjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xNjwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xNi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTE3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMTg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTguPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0xOTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xOS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMjwvTklDSz4KLTxCTFVSQj5WYWx1ZS0yLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMjA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMjA8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMjAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0yMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0yMTwvTklDSz4KLTxCTFVSQj5WYWx1ZS0yMS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTIyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTIyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTIyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMjM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMjM8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMjMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0yNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0yNDwvTklDSz4KLTxCTFVSQj5WYWx1ZS0yNC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTI1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMjY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMjY8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMjYuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0yNzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0yNzwvTklDSz4KLTxCTFVSQj5WYWx1ZS0yNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTI4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMjk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMjk8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMjkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0zPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTMwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTMwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTMwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMzE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMzE8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMzEuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0zMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0zMjwvTklDSz4KLTxCTFVSQj5WYWx1ZS0zMi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTMzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTMzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTMzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMzQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMzQ8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMzQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0zNTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0zNTwvTklDSz4KLTxCTFVSQj5WYWx1ZS0zNS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTM2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtMzc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMzc8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMzcuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS0zODwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0zODwvTklDSz4KLTxCTFVSQj5WYWx1ZS0zOC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTM5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS00PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS00MDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS00MDwvTklDSz4KLTxCTFVSQj5WYWx1ZS00MC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTQxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTQxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtNDI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNDI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtNDIuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS00MzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS00MzwvTklDSz4KLTxCTFVSQj5WYWx1ZS00My48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTQ0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtNDU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNDU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtNDUuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS00NjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS00NjwvTklDSz4KLTxCTFVSQj5WYWx1ZS00Ni48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTQ3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtNDg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNDg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtNDguPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS00OTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS00OTwvTklDSz4KLTxCTFVSQj5WYWx1ZS00OS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNTwvTklDSz4KLTxCTFVSQj5WYWx1ZS01LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtNjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS02PC9OSUNLPgotPEJMVVJCPlZhbHVlLTYuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjUwOjpWYWx1ZS03PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc8L05JQ0s+Ci08QkxVUkI+VmFsdWUtNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyNTA6OlZhbHVlLTg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtODwvTklDSz4KLTxCTFVSQj5WYWx1ZS04LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXI1MDo6VmFsdWUtOTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS05PC9OSUNLPgotPEJMVVJCPlZhbHVlLTkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBsYXRlOjpEYW1waW5nPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGFtcGluZzwvTklDSz4KLTxCTFVSQj5EYW1waW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGxhdGU6OkRyeS13ZXQtbWl4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LXdldC1taXg8L05JQ0s+Ci08QkxVUkI+RHJ5LXdldC1taXguPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wbGF0ZTo6UmV2ZXJiLXRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJldmVyYi10aW1lPC9OSUNLPgotPEJMVVJCPlJldmVyYi10aW1lLjwvQkxVUkI+Ci08REVGQVVMVD40LDI1NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRpb2RlOjpNb2RlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDNdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5Nb2RlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMTAwOjpNYXRjaC1SYW5nZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWF0Y2gtUmFuZ2U8L05JQ0s+Ci08QkxVUkI+TWF0Y2gtUmFuZ2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6Ok1vZGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5Nb2RlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMTAwOjpRdWFudGlzZS1SYW5nZS1NYXhpbXVtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlF1YW50aXNlLVJhbmdlLU1heGltdW08L05JQ0s+Ci08QkxVUkI+UXVhbnRpc2UtUmFuZ2UtTWF4aW11bS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMTAwOjpRdWFudGlzZS1SYW5nZS1NaW5pbXVtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlF1YW50aXNlLVJhbmdlLU1pbmltdW08L05JQ0s+Ci08QkxVUkI+UXVhbnRpc2UtUmFuZ2UtTWluaW11bS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMTAwOjpTdGVwczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0ZXBzPC9OSUNLPgotPEJMVVJCPlN0ZXBzLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS0wLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTEwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTEwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTEwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTExPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTExPC9OSUNLPgotPEJMVVJCPlZhbHVlLTExLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTEyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTEyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTEyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTEzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTEzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTEzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTE5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMjwvTklDSz4KLTxCTFVSQj5WYWx1ZS0yLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTIwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTIwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTIwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTIxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTIxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTIxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTIyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTIyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTIyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTIzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTIzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTIzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTI5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTI5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS0zLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTMwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTMwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTMwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTMxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTMxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTMxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTMyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTMyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTMyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTMzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTMzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTMzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTM5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTM5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTM5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNDwvTklDSz4KLTxCTFVSQj5WYWx1ZS00LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTQwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTQxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTQyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTQzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTQ5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTQ5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQ5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNTwvTklDSz4KLTxCTFVSQj5WYWx1ZS01LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTUwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTUwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTUwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTUxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTUxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTUxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTUyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTUyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTUyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTUzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTUzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTUzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTU0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTU1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTU2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTU3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTU4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTU5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTU5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNjwvTklDSz4KLTxCTFVSQj5WYWx1ZS02LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTYwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTYwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTYwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTYxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTYxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTYxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTYyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTYyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTYyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTYzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTYzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTYzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTY0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTY0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTY1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTY1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTY2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTY2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTY3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTY3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTY4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTY4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTY5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTY5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTY5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNzwvTklDSz4KLTxCTFVSQj5WYWx1ZS03LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTcwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTcwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTcwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTcxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTcxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTcxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTcyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTcyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTcyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTczPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTczPC9OSUNLPgotPEJMVVJCPlZhbHVlLTczLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTc0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTc1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTc2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTc3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTc4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTc5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTc5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTc5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtODwvTklDSz4KLTxCTFVSQj5WYWx1ZS04LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTgwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTgwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTgwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTgxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTgxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTgxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTgyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTgyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTgyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTgzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTgzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTgzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTg0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTg1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTg2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTg3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTg4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTg5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTg5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS05LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTkwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTkwPC9OSUNLPgotPEJMVVJCPlZhbHVlLTkwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTkxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTkxPC9OSUNLPgotPEJMVVJCPlZhbHVlLTkxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTkyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTkyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTkyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTkzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTkzPC9OSUNLPgotPEJMVVJCPlZhbHVlLTkzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTk0PC9OSUNLPgotPEJMVVJCPlZhbHVlLTk0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTk1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTk1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTk2PC9OSUNLPgotPEJMVVJCPlZhbHVlLTk2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTk3PC9OSUNLPgotPEJMVVJCPlZhbHVlLTk3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTk4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTk4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIxMDA6OlZhbHVlLTk5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTk5PC9OSUNLPgotPEJMVVJCPlZhbHVlLTk5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtdHViZXdhcm10aDo6RHJpdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Ecml2ZTwvTklDSz4KLTxCTFVSQj5Ecml2ZS48L0JMVVJCPgotPERFRkFVTFQ+Miw1NzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtdHViZXdhcm10aDo6VGFwZS0tVHViZS1CbGVuZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEwLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRhcGUtLVR1YmUtQmxlbmQ8L05JQ0s+Ci08QkxVUkI+VGFwZS0tVHViZS1CbGVuZC48L0JMVVJCPgotPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtcmVzbHA6OkZyZXF1ZW5jeS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1PZmZzZXQ8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LU9mZnNldC48L0JMVVJCPgotPERFRkFVTFQ+MjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtcmVzbHA6OkZyZXF1ZW5jeS1QaXRjaDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktUGl0Y2g8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LVBpdGNoLjwvQkxVUkI+Ci08REVGQVVMVD4tMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1yZXNscDo6R2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW48L05JQ0s+Ci08QkxVUkI+R2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1yZXNscDo6UmVzb25hbmNlLU9mZnNldDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2UtT2Zmc2V0PC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWxwOjpGcmVxdWVuY3ktT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyMCwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktT2Zmc2V0PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjIwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWxwOjpGcmVxdWVuY3ktUGl0Y2g8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LVBpdGNoPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1QaXRjaC48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtbHA6OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYWluPC9OSUNLPgotPEJMVVJCPkdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtbHA6OlJlc29uYW5jZS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlLU9mZnNldDwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UtT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1ocDo6RnJlcXVlbmN5LU9mZnNldDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LU9mZnNldDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4yMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1ocDo6RnJlcXVlbmN5LVBpdGNoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMiwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1QaXRjaDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktUGl0Y2guPC9CTFVSQj4KLTxERUZBVUxUPi0yPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWhwOjpHYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2FpbjwvTklDSz4KLTxCTFVSQj5HYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWhwOjpSZXNvbmFuY2UtT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc29uYW5jZS1PZmZzZXQ8L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLU9mZnNldC48L0JMVVJCPgotPERFRkFVTFQ+MCwwMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtYnAxOjpGcmVxdWVuY3ktT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyMCwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktT2Zmc2V0PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjIwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWJwMTo6RnJlcXVlbmN5LVBpdGNoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMiwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1QaXRjaDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktUGl0Y2guPC9CTFVSQj4KLTxERUZBVUxUPi0yPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWJwMTo6R2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW48L05JQ0s+Ci08QkxVUkI+R2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1icDE6OlJlc29uYW5jZS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlLU9mZnNldDwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UtT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1icDI6OkZyZXF1ZW5jeS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1PZmZzZXQ8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LU9mZnNldC48L0JMVVJCPgotPERFRkFVTFQ+MjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtYnAyOjpGcmVxdWVuY3ktUGl0Y2g8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LVBpdGNoPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1QaXRjaC48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtYnAyOjpHYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2FpbjwvTklDSz4KLTxCTFVSQj5HYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWJwMjo6UmVzb25hbmNlLU9mZnNldDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2UtT2Zmc2V0PC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLW5vdGNoOjpGcmVxdWVuY3ktT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyMCwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktT2Zmc2V0PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjIwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLW5vdGNoOjpGcmVxdWVuY3ktUGl0Y2g8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LVBpdGNoPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1QaXRjaC48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2Ytbm90Y2g6OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYWluPC9OSUNLPgotPEJMVVJCPkdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2Ytbm90Y2g6OlJlc29uYW5jZS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlLU9mZnNldDwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UtT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1wZWFrZXE6OkZyZXF1ZW5jeS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1PZmZzZXQ8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LU9mZnNldC48L0JMVVJCPgotPERFRkFVTFQ+MjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtcGVha2VxOjpGcmVxdWVuY3ktUGl0Y2g8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LVBpdGNoPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1QaXRjaC48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtcGVha2VxOjpHYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2FpbjwvTklDSz4KLTxCTFVSQj5HYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLXBlYWtlcTo6UmVzb25hbmNlLU9mZnNldDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2UtT2Zmc2V0PC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLXBlYWtlcTo6ZEJnYWluLU9mZnNldDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNiwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kQmdhaW4tT2Zmc2V0PC9OSUNLPgotPEJMVVJCPmRCZ2Fpbi1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtbHNoZWxmOjpGcmVxdWVuY3ktT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyMCwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktT2Zmc2V0PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjIwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWxzaGVsZjo6RnJlcXVlbmN5LVBpdGNoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMiwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1QaXRjaDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktUGl0Y2guPC9CTFVSQj4KLTxERUZBVUxUPi0yPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWxzaGVsZjo6R2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW48L05JQ0s+Ci08QkxVUkI+R2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1sc2hlbGY6OlJlc29uYW5jZS1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlLU9mZnNldDwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UtT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1sc2hlbGY6OmRCZ2Fpbi1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzYsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZEJnYWluLU9mZnNldDwvTklDSz4KLTxCTFVSQj5kQmdhaW4tT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD42PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmNmLWhzaGVsZjo6RnJlcXVlbmN5LU9mZnNldDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LU9mZnNldDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktT2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4yMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1oc2hlbGY6OkZyZXF1ZW5jeS1QaXRjaDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktUGl0Y2g8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LVBpdGNoLjwvQkxVUkI+Ci08REVGQVVMVD4tMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZi1oc2hlbGY6OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYWluPC9OSUNLPgotPEJMVVJCPkdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtaHNoZWxmOjpSZXNvbmFuY2UtT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc29uYW5jZS1PZmZzZXQ8L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLU9mZnNldC48L0JMVVJCPgotPERFRkFVTFQ+MCwwMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12Y2YtaHNoZWxmOjpkQmdhaW4tT2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls2LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRCZ2Fpbi1PZmZzZXQ8L05JQ0s+Ci08QkxVUkI+ZEJnYWluLU9mZnNldC48L0JMVVJCPgotPERFRkFVTFQ+NjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNhdGFuTWF4aW1pc2VyOjpEZWNheS10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlY2F5LXRpbWU8L05JQ0s+Ci08QkxVUkI+RGVjYXktdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MzA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYXRhbk1heGltaXNlcjo6S25lZS1wb2ludDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+S25lZS1wb2ludDwvTklDSz4KLTxCTFVSQj5LbmVlLXBvaW50LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3luY3B1bHNlLWZjcGNnYS1vYTo6RnJlcXVlbno8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbno8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbnouPC9CTFVSQj4KLTxERUZBVUxUPjE2PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3luY3B1bHNlLWZjcGNnYS1vYTo6UHVsc2UtV2lkdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5QdWxzZS1XaWR0aDwvTklDSz4KLTxCTFVSQj5QdWxzZS1XaWR0aC48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJhbnNpZW50OjpBdHRhY2stc3BlZWQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXR0YWNrLXNwZWVkPC9OSUNLPgotPEJMVVJCPkF0dGFjay1zcGVlZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyYW5zaWVudDo6U3VzdGFpbi10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN1c3RhaW4tdGltZTwvTklDSz4KLTxCTFVSQj5TdXN0YWluLXRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzM6OkF0dGFjay10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyLDQwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BdHRhY2stdGltZTwvTklDSz4KLTxCTFVSQj5BdHRhY2stdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MTAxLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzM6OkNoYWluLWJhbGFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DaGFpbi1iYWxhbmNlPC9OSUNLPgotPEJMVVJCPkNoYWluLWJhbGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzM6OktuZWUtcmFkaXVzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPktuZWUtcmFkaXVzPC9OSUNLPgotPEJMVVJCPktuZWUtcmFkaXVzLjwvQkxVUkI+Ci08REVGQVVMVD4zLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2MzOjpNYWtldXAtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYWtldXAtZ2FpbjwvTklDSz4KLTxCTFVSQj5NYWtldXAtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjMzo6UmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmF0aW88L05JQ0s+Ci08QkxVUkI+UmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzM6OlJlbGVhc2UtdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiw4MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS10aW1lPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtdGltZS48L0JMVVJCPgotPERFRkFVTFQ+NDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2MzOjpUaHJlc2hvbGQtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0zMCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZC1sZXZlbDwvTklDSz4KLTxCTFVSQj5UaHJlc2hvbGQtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtc2lnbW9pZDo6UG9zdC1HYWluLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Qb3N0LUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5Qb3N0LUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1zaWdtb2lkOjpQcmUtR2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UHJlLUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5QcmUtR2Fpbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWVPc2M6OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwNDQxLDIyMDA1LDldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWVPc2M6Okluc3RhYmlsaXR5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5zdGFiaWxpdHk8L05JQ0s+Ci08QkxVUkI+SW5zdGFiaWxpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZU9zYzo6V2FybXRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2FybXRoPC9OSUNLPgotPEJMVVJCPldhcm10aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlT3NjOjpXYXZlZm9ybTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XYXZlZm9ybTwvTklDSz4KLTxCTFVSQj5XYXZlZm9ybS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFkc3I6OkFia2xpbmd6ZWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BYmtsaW5nemVpdDwvTklDSz4KLTxCTFVSQj5BYmtsaW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFkc3I6OkF1c2tsaW5nemVpdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXVza2xpbmd6ZWl0PC9OSUNLPgotPEJMVVJCPkF1c2tsaW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFkc3I6OkVpbnNjaHdpbmd6ZWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5FaW5zY2h3aW5nemVpdDwvTklDSz4KLTxCTFVSQj5FaW5zY2h3aW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFkc3I6OkhhbHRld2VydDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhhbHRld2VydDwvTklDSz4KLTxCTFVSQj5IYWx0ZXdlcnQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hZHNyOjpUcmlnZ2VyLVRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UcmlnZ2VyLVRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5UcmlnZ2VyLVRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2lmdGVyOjpTaWZ0LXNpemU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TaWZ0LXNpemU8L05JQ0s+Ci08QkxVUkI+U2lmdC1zaXplLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWRzci1nK3Q6OkFia2xpbmd6ZWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BYmtsaW5nemVpdDwvTklDSz4KLTxCTFVSQj5BYmtsaW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFkc3ItZyt0OjpBdXNrbGluZ3plaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkF1c2tsaW5nemVpdDwvTklDSz4KLTxCTFVSQj5BdXNrbGluZ3plaXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hZHNyLWcrdDo6RWluc2Nod2luZ3plaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVpbnNjaHdpbmd6ZWl0PC9OSUNLPgotPEJMVVJCPkVpbnNjaHdpbmd6ZWl0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWRzci1nK3Q6OkhhbHRld2VydDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhhbHRld2VydDwvTklDSz4KLTxCTFVSQj5IYWx0ZXdlcnQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1yYXRpby1uYWRjLW9hOjpEZW5vbWluYXRvcjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZW5vbWluYXRvcjwvTklDSz4KLTxCTFVSQj5EZW5vbWluYXRvci48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcmF0aW8tbmNkYS1vYTo6TnVtZXJhdG9yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk51bWVyYXRvcjwvTklDSz4KLTxCTFVSQj5OdW1lcmF0b3IuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJhdGlvLW5jZGMtb2M6OkRlbm9taW5hdG9yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbm9taW5hdG9yPC9OSUNLPgotPEJMVVJCPkRlbm9taW5hdG9yLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1yYXRpby1uY2RjLW9jOjpOdW1lcmF0b3I8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TnVtZXJhdG9yPC9OSUNLPgotPEJMVVJCPk51bWVyYXRvci48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcmF0aW8tbmNkYy1vYzo6UmF0aW8tT3V0cHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5SYXRpby1PdXRwdXQ8L05JQ0s+Ci08QkxVUkI+UmF0aW8tT3V0cHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1naWFudEZsYW5nZTo6RGVsYXktMS1yYW5nZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LTEtcmFuZ2U8L05JQ0s+Ci08QkxVUkI+RGVsYXktMS1yYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+Miw2MjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1naWFudEZsYW5nZTo6RGVsYXktMi1yYW5nZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LTItcmFuZ2U8L05JQ0s+Ci08QkxVUkI+RGVsYXktMi1yYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdpYW50RmxhbmdlOjpEb3VibGUtZGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RG91YmxlLWRlbGF5PC9OSUNLPgotPEJMVVJCPkRvdWJsZS1kZWxheS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ2lhbnRGbGFuZ2U6OkRyeS1XZXQtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EcnktV2V0LWxldmVsPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1naWFudEZsYW5nZTo6RmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xMDAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ2lhbnRGbGFuZ2U6OkxGTy1mcmVxdWVuY3ktMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tZnJlcXVlbmN5LTE8L05JQ0s+Ci08QkxVUkI+TEZPLWZyZXF1ZW5jeS0xLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ2lhbnRGbGFuZ2U6OkxGTy1mcmVxdWVuY3ktMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tZnJlcXVlbmN5LTI8L05JQ0s+Ci08QkxVUkI+TEZPLWZyZXF1ZW5jeS0yLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3ZmOjpGaWx0ZXItUTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHRlci1RPC9OSUNLPgotPEJMVVJCPkZpbHRlci1RLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3ZmOjpGaWx0ZXItZnJlcTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw2MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHRlci1mcmVxPC9OSUNLPgotPEJMVVJCPkZpbHRlci1mcmVxLjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zdmY6OkZpbHRlci1yZXNvbmFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0ZXItcmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPkZpbHRlci1yZXNvbmFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zdmY6OkZpbHRlci10eXBlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHRlci10eXBlPC9OSUNLPgotPEJMVVJCPkZpbHRlci10eXBlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbHA0cG9sZS1mY3JjaWEtb2E6OkN1dG9mZi1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3V0b2ZmLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DdXRvZmYtRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4yMjA1MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxwNHBvbGUtZmNyY2lhLW9hOjpSZXNvbmFuejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc29uYW56PC9OSUNLPgotPEJMVVJCPlJlc29uYW56LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpdGNoOjpEcnktTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZXZlbC0tZEItPC9OSUNLPgotPEJMVVJCPkRyeS1MZXZlbC0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4tOTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcGl0Y2g6OlJhdGUtU2hpZnQtLS0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJhdGUtU2hpZnQtLS0tPC9OSUNLPgotPEJMVVJCPlJhdGUtU2hpZnQtLS0tLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpdGNoOjpTZW1pdG9uZS1TaGlmdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEyLDEyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNlbWl0b25lLVNoaWZ0PC9OSUNLPgotPEJMVVJCPlNlbWl0b25lLVNoaWZ0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpdGNoOjpXZXQtTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldldC1MZXZlbC0tZEItPC9OSUNLPgotPEJMVVJCPldldC1MZXZlbC0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpdGNoOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDE2MDI3XTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjE2MDI3PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3F1YXJlLWZjLW9hOjpGcmVxdWVuejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw5MTg3NSwyMjA1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuejwvTklDSz4KLTxCTFVSQj5GcmVxdWVuei48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYmFuZHBhc3MtYS1paXI6OkJhbmR3aWR0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw0MSwxOTg0NV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kd2lkdGg8L05JQ0s+Ci08QkxVUkI+QmFuZHdpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4yOTUsODMyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYmFuZHBhc3MtYS1paXI6OkNlbnRlci1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMTk4NDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q2VudGVyLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DZW50ZXItRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4zNiwxMTk1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW1wLW1vbm86OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW48L05JQ0s+Ci08QkxVUkI+R2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFtcC1zdGVyZW86OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW48L05JQ0s+Ci08QkxVUkI+R2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJpbmdtb2QtMmkxbzo6TW9kdWxhdGlvbi1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRpb24tZGVwdGg8L05JQ0s+Ci08QkxVUkI+TW9kdWxhdGlvbi1kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJpbmdtb2QtMWkxbzFsOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1yaW5nbW9kLTFpMW8xbDo6TW9kdWxhdGlvbi1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRpb24tZGVwdGg8L05JQ0s+Ci08QkxVUkI+TW9kdWxhdGlvbi1kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJpbmdtb2QtMWkxbzFsOjpTYXd0b290aC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TYXd0b290aC1sZXZlbDwvTklDSz4KLTxCTFVSQj5TYXd0b290aC1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJpbmdtb2QtMWkxbzFsOjpTaW5lLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNpbmUtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+U2luZS1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJpbmdtb2QtMWkxbzFsOjpTcXVhcmUtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3F1YXJlLWxldmVsPC9OSUNLPgotPEJMVVJCPlNxdWFyZS1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJpbmdtb2QtMWkxbzFsOjpUcmlhbmdsZS1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UcmlhbmdsZS1sZXZlbDwvTklDSz4KLTxCTFVSQj5UcmlhbmdsZS1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LW46OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LW46Ok1heC1EZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWF4LURlbGF5PC9OSUNLPgotPEJMVVJCPk1heC1EZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LWw6OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LWw6Ok1heC1EZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWF4LURlbGF5PC9OSUNLPgotPEJMVVJCPk1heC1EZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LWM6OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LWM6Ok1heC1EZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWF4LURlbGF5PC9OSUNLPgotPEJMVVJCPk1heC1EZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZtb2QtZmFtYy1vYTo6TW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPk1vZHVsYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZtb2QtZmNtYS1vYTo6RnJlcXVlbno8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbno8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbnouPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZtb2QtZmNtYy1vYzo6RnJlcXVlbno8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbno8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbnouPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZtb2QtZmNtYy1vYzo6TW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPk1vZHVsYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZtb2QtZmNtYy1vYzo6TW9kdWxpZXJ0ZS1GcmVxdWVuejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+TW9kdWxpZXJ0ZS1GcmVxdWVuejwvTklDSz4KLTxCTFVSQj5Nb2R1bGllcnRlLUZyZXF1ZW56LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ndmVyYjo6RGFtcGluZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRhbXBpbmc8L05JQ0s+Ci08QkxVUkI+RGFtcGluZy48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3ZlcmI6OkRyeS1zaWduYWwtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1zaWduYWwtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RHJ5LXNpZ25hbC1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+LTcwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3ZlcmI6OkVhcmx5LXJlZmxlY3Rpb24tbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVhcmx5LXJlZmxlY3Rpb24tbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RWFybHktcmVmbGVjdGlvbi1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWd2ZXJiOjpJbnB1dC1iYW5kd2lkdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC1iYW5kd2lkdGg8L05JQ0s+Ci08QkxVUkI+SW5wdXQtYmFuZHdpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4wLDc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3ZlcmI6OlJldmVyYi10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmV2ZXJiLXRpbWU8L05JQ0s+Ci08QkxVUkI+UmV2ZXJiLXRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjcsNTc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3ZlcmI6OlJvb21zaXplPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDMwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Sb29tc2l6ZTwvTklDSz4KLTxCTFVSQj5Sb29tc2l6ZS48L0JMVVJCPgotPERFRkFVTFQ+NzUsNzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ndmVyYjo6VGFpbC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGFpbC1sZXZlbDwvTklDSz4KLTxCTFVSQj5UYWlsLWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4tMTcsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlNDo6QW1wbGl0dWRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDAsMTJdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkFtcGxpdHVkZTwvTklDSz4KLTxCTFVSQj5BbXBsaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPi00MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlNDo6QXR0YWNrLXRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsNSw0MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXR0YWNrLXRpbWU8L05JQ0s+Ci08QkxVUkI+QXR0YWNrLXRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjEwMSwxMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZTQ6OkF0dGVudWF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjQsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BdHRlbnVhdGlvbjwvTklDSz4KLTxCTFVSQj5BdHRlbnVhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlNDo6R2Fpbi1leHBhbnNpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjRdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkdhaW4tZXhwYW5zaW9uPC9OSUNLPgotPEJMVVJCPkdhaW4tZXhwYW5zaW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2U0OjpLbmVlLXJhZGl1czwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5LbmVlLXJhZGl1czwvTklDSz4KLTxCTFVSQj5LbmVlLXJhZGl1cy48L0JMVVJCPgotPERFRkFVTFQ+MywyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlNDo6Uk1TLXBlYWs8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5STVMtcGVhazwvTklDSz4KLTxCTFVSQj5STVMtcGVhay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlNDo6UmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmF0aW88L05JQ0s+Ci08QkxVUkI+UmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZTQ6OlJlbGVhc2UtdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiw4MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS10aW1lPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtdGltZS48L0JMVVJCPgotPERFRkFVTFQ+NDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2U0OjpUaHJlc2hvbGQtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0zMCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZC1sZXZlbDwvTklDSz4KLTxCTFVSQj5UaHJlc2hvbGQtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1kYW1waW5nPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5uZXItZGFtcGluZzwvTklDSz4KLTxCTFVSQj5Jbm5lci1kYW1waW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zaXplLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zaXplLTE8L05JQ0s+Ci08QkxVUkI+SW5uZXItc2l6ZS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zaXplLTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zaXplLTI8L05JQ0s+Ci08QkxVUkI+SW5uZXItc2l6ZS0yLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zaXplLTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zaXplLTM8L05JQ0s+Ci08QkxVUkI+SW5uZXItc2l6ZS0zLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zaXplLTQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zaXplLTQ8L05JQ0s+Ci08QkxVUkI+SW5uZXItc2l6ZS00LjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtMS0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5uZXItc3RpZmZuZXNzLTEtLTwvTklDSz4KLTxCTFVSQj5Jbm5lci1zdGlmZm5lc3MtMS0tLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtMS0tLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zdGlmZm5lc3MtMS0tLTE8L05JQ0s+Ci08QkxVUkI+SW5uZXItc3RpZmZuZXNzLTEtLS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtMi0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5uZXItc3RpZmZuZXNzLTItLTwvTklDSz4KLTxCTFVSQj5Jbm5lci1zdGlmZm5lc3MtMi0tLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtMi0tLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zdGlmZm5lc3MtMi0tLTE8L05JQ0s+Ci08QkxVUkI+SW5uZXItc3RpZmZuZXNzLTItLS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtMy0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5uZXItc3RpZmZuZXNzLTMtLTwvTklDSz4KLTxCTFVSQj5Jbm5lci1zdGlmZm5lc3MtMy0tLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtMy0tLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zdGlmZm5lc3MtMy0tLTE8L05JQ0s+Ci08QkxVUkI+SW5uZXItc3RpZmZuZXNzLTMtLS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtNC0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5uZXItc3RpZmZuZXNzLTQtLTwvTklDSz4KLTxCTFVSQj5Jbm5lci1zdGlmZm5lc3MtNC0tLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpJbm5lci1zdGlmZm5lc3MtNC0tLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Jbm5lci1zdGlmZm5lc3MtNC0tLTE8L05JQ0s+Ci08QkxVUkI+SW5uZXItc3RpZmZuZXNzLTQtLS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nb25nOjpNaWMtcG9zaXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NaWMtcG9zaXRpb248L05JQ0s+Ci08QkxVUkI+TWljLXBvc2l0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItZGFtcGluZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dGVyLWRhbXBpbmc8L05JQ0s+Ci08QkxVUkI+T3V0ZXItZGFtcGluZy48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc2l6ZS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc2l6ZS0xPC9OSUNLPgotPEJMVVJCPk91dGVyLXNpemUtMS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc2l6ZS0yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc2l6ZS0yPC9OSUNLPgotPEJMVVJCPk91dGVyLXNpemUtMi48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc2l6ZS0zPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc2l6ZS0zPC9OSUNLPgotPEJMVVJCPk91dGVyLXNpemUtMy48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc2l6ZS00PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc2l6ZS00PC9OSUNLPgotPEJMVVJCPk91dGVyLXNpemUtNC48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTEtLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dGVyLXN0aWZmbmVzcy0xLS08L05JQ0s+Ci08QkxVUkI+T3V0ZXItc3RpZmZuZXNzLTEtLS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTEtLS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc3RpZmZuZXNzLTEtLS0xPC9OSUNLPgotPEJMVVJCPk91dGVyLXN0aWZmbmVzcy0xLS0tMS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTItLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dGVyLXN0aWZmbmVzcy0yLS08L05JQ0s+Ci08QkxVUkI+T3V0ZXItc3RpZmZuZXNzLTItLS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTItLS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc3RpZmZuZXNzLTItLS0xPC9OSUNLPgotPEJMVVJCPk91dGVyLXN0aWZmbmVzcy0yLS0tMS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTMtLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dGVyLXN0aWZmbmVzcy0zLS08L05JQ0s+Ci08QkxVUkI+T3V0ZXItc3RpZmZuZXNzLTMtLS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTMtLS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc3RpZmZuZXNzLTMtLS0xPC9OSUNLPgotPEJMVVJCPk91dGVyLXN0aWZmbmVzcy0zLS0tMS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTQtLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dGVyLXN0aWZmbmVzcy00LS08L05JQ0s+Ci08QkxVUkI+T3V0ZXItc3RpZmZuZXNzLTQtLS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ29uZzo6T3V0ZXItc3RpZmZuZXNzLTQtLS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0ZXItc3RpZmZuZXNzLTQtLS0xPC9OSUNLPgotPEJMVVJCPk91dGVyLXN0aWZmbmVzcy00LS0tMS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZW5jb2RlLWJmb3JtYXQ6OlNvdW5kLVNvdXJjZS1YLUNvb3JkaW5hdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U291bmQtU291cmNlLVgtQ29vcmRpbmF0ZTwvTklDSz4KLTxCTFVSQj5Tb3VuZC1Tb3VyY2UtWC1Db29yZGluYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZW5jb2RlLWJmb3JtYXQ6OlNvdW5kLVNvdXJjZS1ZLUNvb3JkaW5hdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U291bmQtU291cmNlLVktQ29vcmRpbmF0ZTwvTklDSz4KLTxCTFVSQj5Tb3VuZC1Tb3VyY2UtWS1Db29yZGluYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZW5jb2RlLWJmb3JtYXQ6OlNvdW5kLVNvdXJjZS1aLUNvb3JkaW5hdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U291bmQtU291cmNlLVotQ29vcmRpbmF0ZTwvTklDSz4KLTxCTFVSQj5Tb3VuZC1Tb3VyY2UtWi1Db29yZGluYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZW5jb2RlLWZtaDo6U291bmQtU291cmNlLVgtQ29vcmRpbmF0ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Tb3VuZC1Tb3VyY2UtWC1Db29yZGluYXRlPC9OSUNLPgotPEJMVVJCPlNvdW5kLVNvdXJjZS1YLUNvb3JkaW5hdGUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1lbmNvZGUtZm1oOjpTb3VuZC1Tb3VyY2UtWS1Db29yZGluYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNvdW5kLVNvdXJjZS1ZLUNvb3JkaW5hdGU8L05JQ0s+Ci08QkxVUkI+U291bmQtU291cmNlLVktQ29vcmRpbmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWVuY29kZS1mbWg6OlNvdW5kLVNvdXJjZS1aLUNvb3JkaW5hdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U291bmQtU291cmNlLVotQ29vcmRpbmF0ZTwvTklDSz4KLTxCTFVSQj5Tb3VuZC1Tb3VyY2UtWi1Db29yZGluYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYmYtcm90YXRlLXo6OkFuZ2xlLW9mLVJvdGF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMTgwLDE4MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbmdsZS1vZi1Sb3RhdGlvbjwvTklDSz4KLTxCTFVSQj5BbmdsZS1vZi1Sb3RhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+OTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mbWgtcm90YXRlLXo6OkFuZ2xlLW9mLVJvdGF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMTgwLDE4MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbmdsZS1vZi1Sb3RhdGlvbjwvTklDSz4KLTxCTFVSQj5BbmdsZS1vZi1Sb3RhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+OTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RENPMS1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08xLUF0dGFjazwvTklDSz4KLTxCTFVSQj5EQ08xLUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpEQ08xLURlY2F5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMS1EZWNheTwvTklDSz4KLTxCTFVSQj5EQ08xLURlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkRDTzEtTEZPLUZyZXF1ZW5jeS1Nb2R1bGF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMiwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzEtTEZPLUZyZXF1ZW5jeS1Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPkRDTzEtTEZPLUZyZXF1ZW5jeS1Nb2R1bGF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4tMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpEQ08xLUxGTy1QdWxzZS1XaWR0aC1Nb2R1bGF0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzEtTEZPLVB1bHNlLVdpZHRoLU1vZHVsYXRpb248L05JQ0s+Ci08QkxVUkI+RENPMS1MRk8tUHVsc2UtV2lkdGgtTW9kdWxhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpEQ08xLU9jdGF2ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08xLU9jdGF2ZTwvTklDSz4KLTxCTFVSQj5EQ08xLU9jdGF2ZS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RENPMS1SZWxlYXNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMS1SZWxlYXNlPC9OSUNLPgotPEJMVVJCPkRDTzEtUmVsZWFzZS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpEQ08xLVN1c3RhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08xLVN1c3RhaW48L05JQ0s+Ci08QkxVUkI+RENPMS1TdXN0YWluLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkRDTzEtV2F2ZWZvcm08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMS1XYXZlZm9ybTwvTklDSz4KLTxCTFVSQj5EQ08xLVdhdmVmb3JtLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkRDTzItQXR0YWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMi1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+RENPMi1BdHRhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RENPMi1EZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzItRGVjYXk8L05JQ0s+Ci08QkxVUkI+RENPMi1EZWNheS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpEQ08yLUxGTy1GcmVxdWVuY3ktTW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08yLUxGTy1GcmVxdWVuY3ktTW9kdWxhdGlvbjwvTklDSz4KLTxCTFVSQj5EQ08yLUxGTy1GcmVxdWVuY3ktTW9kdWxhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RENPMi1MRk8tUHVsc2UtV2lkdGgtTW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08yLUxGTy1QdWxzZS1XaWR0aC1Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPkRDTzItTEZPLVB1bHNlLVdpZHRoLU1vZHVsYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RENPMi1PY3RhdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08yLU9jdGF2ZTwvTklDSz4KLTxCTFVSQj5EQ08yLU9jdGF2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpEQ08yLVJlbGVhc2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08yLVJlbGVhc2U8L05JQ0s+Ci08QkxVUkI+RENPMi1SZWxlYXNlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkRDTzItU3VzdGFpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzItU3VzdGFpbjwvTklDSz4KLTxCTFVSQj5EQ08yLVN1c3RhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RENPMi1XYXZlZm9ybTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzItV2F2ZWZvcm08L05JQ0s+Ci08QkxVUkI+RENPMi1XYXZlZm9ybS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpGaWx0ZXItQXR0YWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdGVyLUF0dGFjazwvTklDSz4KLTxCTFVSQj5GaWx0ZXItQXR0YWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkZpbHRlci1EZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHRlci1EZWNheTwvTklDSz4KLTxCTFVSQj5GaWx0ZXItRGVjYXkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RmlsdGVyLUVudmVsb3BlLU1vZHVsYXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdGVyLUVudmVsb3BlLU1vZHVsYXRpb248L05JQ0s+Ci08QkxVUkI+RmlsdGVyLUVudmVsb3BlLU1vZHVsYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RmlsdGVyLUxGTy1Nb2R1bGF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdGVyLUxGTy1Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPkZpbHRlci1MRk8tTW9kdWxhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpGaWx0ZXItUmVsZWFzZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHRlci1SZWxlYXNlPC9OSUNLPgotPEJMVVJCPkZpbHRlci1SZWxlYXNlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkZpbHRlci1SZXNvbmFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0ZXItUmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPkZpbHRlci1SZXNvbmFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6RmlsdGVyLVN1c3RhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0ZXItU3VzdGFpbjwvTklDSz4KLTxCTFVSQj5GaWx0ZXItU3VzdGFpbi48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpHYXRlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2F0ZTwvTklDSz4KLTxCTFVSQj5HYXRlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFuYWxvZ3VlOjpMRk8tRmFkZWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEZPLUZhZGVpbjwvTklDSz4KLTxCTFVSQj5MRk8tRmFkZWluLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW5hbG9ndWU6OkxGTy1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tRnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkxGTy1GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbmFsb2d1ZTo6VmVsb2NpdHk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WZWxvY2l0eTwvTklDSz4KLTxCTFVSQj5WZWxvY2l0eS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNhbnlvbi1kZWxheTo6TGVmdC10by1SaWdodC1GZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MZWZ0LXRvLVJpZ2h0LUZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkxlZnQtdG8tUmlnaHQtRmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY2FueW9uLWRlbGF5OjpMZWZ0LXRvLVJpZ2h0LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsMCw5OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MZWZ0LXRvLVJpZ2h0LVRpbWU8L05JQ0s+Ci08QkxVUkI+TGVmdC10by1SaWdodC1UaW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY2FueW9uLWRlbGF5OjpMb3ctUGFzcy1DdXRvZmY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsNTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Mb3ctUGFzcy1DdXRvZmY8L05JQ0s+Ci08QkxVUkI+TG93LVBhc3MtQ3V0b2ZmLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY2FueW9uLWRlbGF5OjpSaWdodC10by1MZWZ0LUZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJpZ2h0LXRvLUxlZnQtRmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+UmlnaHQtdG8tTGVmdC1GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jYW55b24tZGVsYXk6OlJpZ2h0LXRvLUxlZnQtVGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSwwLDk5XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJpZ2h0LXRvLUxlZnQtVGltZTwvTklDSz4KLTxCTFVSQj5SaWdodC10by1MZWZ0LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kaXNpbnRlZ3JhdG9yOjpNdWx0aXBsaWVyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk11bHRpcGxpZXI8L05JQ0s+Ci08QkxVUkI+TXVsdGlwbGllci48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRpc2ludGVncmF0b3I6OlByb2JhYmlsaXR5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UHJvYmFiaWxpdHk8L05JQ0s+Ci08QkxVUkI+UHJvYmFiaWxpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zbGVkZ2VoYW1tZXI6OkNhcnJpZXItaW5mbHVlbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNhcnJpZXItaW5mbHVlbmNlPC9OSUNLPgotPEJMVVJCPkNhcnJpZXItaW5mbHVlbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2xlZGdlaGFtbWVyOjpNb2R1bGF0b3ItaW5mbHVlbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRvci1pbmZsdWVuY2U8L05JQ0s+Ci08QkxVUkI+TW9kdWxhdG9yLWluZmx1ZW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNsZWRnZWhhbW1lcjo6UmF0ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMWUtMDUsMCwwMDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmF0ZTwvTklDSz4KLTxCTFVSQj5SYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMDUwNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LTAtMDFzOjpEZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwLDAxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVsYXktMC0wMXM6OkRyeS1XZXQtQmFsYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1XZXQtQmFsYW5jZTwvTklDSz4KLTxCTFVSQj5EcnktV2V0LUJhbGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LTAtMXM6OkRlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheTwvTklDSz4KLTxCTFVSQj5EZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MCwxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVsYXktMC0xczo6RHJ5LVdldC1CYWxhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVdldC1CYWxhbmNlPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtQmFsYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVsYXktMXM6OkRlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWxheS0xczo6RHJ5LVdldC1CYWxhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVdldC1CYWxhbmNlPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtQmFsYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVsYXktNXM6OkRlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWxheS01czo6RHJ5LVdldC1CYWxhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVdldC1CYWxhbmNlPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtQmFsYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVsYXktNjBzOjpEZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw2MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheTwvTklDSz4KLTxCTFVSQj5EZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRlbGF5LTYwczo6RHJ5LVdldC1CYWxhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVdldC1CYWxhbmNlPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtQmFsYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJhY2stbWF4LXBlYWs6OkVudmVsb3BlLUZvcmdldHRpbmctRmFjdG9yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5FbnZlbG9wZS1Gb3JnZXR0aW5nLUZhY3RvcjwvTklDSz4KLTxCTFVSQj5FbnZlbG9wZS1Gb3JnZXR0aW5nLUZhY3Rvci48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmFjay1tYXgtcGVhazo6T3V0cHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0PC9OSUNLPgotPEJMVVJCPk91dHB1dC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyYWNrLW1heC1ybXM6OkVudmVsb3BlLUZvcmdldHRpbmctRmFjdG9yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5FbnZlbG9wZS1Gb3JnZXR0aW5nLUZhY3RvcjwvTklDSz4KLTxCTFVSQj5FbnZlbG9wZS1Gb3JnZXR0aW5nLUZhY3Rvci48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmFjay1tYXgtcm1zOjpPdXRwdXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5PdXRwdXQ8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJhY2stcGVhazo6T3V0cHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0PC9OSUNLPgotPEJMVVJCPk91dHB1dC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyYWNrLXBlYWs6OlNtb290aGluZy1GYWN0b3I8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TbW9vdGhpbmctRmFjdG9yPC9OSUNLPgotPEJMVVJCPlNtb290aGluZy1GYWN0b3IuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmFjay1ybXM6Ok91dHB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPk91dHB1dDwvTklDSz4KLTxCTFVSQj5PdXRwdXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmFjay1ybXM6OlNtb290aGluZy1GYWN0b3I8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TbW9vdGhpbmctRmFjdG9yPC9OSUNLPgotPEJMVVJCPlNtb290aGluZy1GYWN0b3IuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYmRlbGF5LTAtMDFzOjpEZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwLDAxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmJkZWxheS0wLTAxczo6RHJ5LVdldC1CYWxhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVdldC1CYWxhbmNlPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtQmFsYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmJkZWxheS0wLTAxczo6RmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZiZGVsYXktMC0xczo6RGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wLDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYmRlbGF5LTAtMXM6OkRyeS1XZXQtQmFsYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1XZXQtQmFsYW5jZTwvTklDSz4KLTxCTFVSQj5EcnktV2V0LUJhbGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZiZGVsYXktMC0xczo6RmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZiZGVsYXktMXM6OkRlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYmRlbGF5LTFzOjpEcnktV2V0LUJhbGFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EcnktV2V0LUJhbGFuY2U8L05JQ0s+Ci08QkxVUkI+RHJ5LVdldC1CYWxhbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYmRlbGF5LTFzOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmJkZWxheS01czo6RGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheTwvTklDSz4KLTxCTFVSQj5EZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZiZGVsYXktNXM6OkRyeS1XZXQtQmFsYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1XZXQtQmFsYW5jZTwvTklDSz4KLTxCTFVSQj5EcnktV2V0LUJhbGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZiZGVsYXktNXM6OkZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYmRlbGF5LTYwczo6RGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYmRlbGF5LTYwczo6RHJ5LVdldC1CYWxhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVdldC1CYWxhbmNlPC9OSUNLPgotPEJMVVJCPkRyeS1XZXQtQmFsYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmJkZWxheS02MHM6OkZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mcmVldmVyYjM6OkRhbXBpbmc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EYW1waW5nPC9OSUNLPgotPEJMVVJCPkRhbXBpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mcmVldmVyYjM6OkRyeS1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZXZlbDwvTklDSz4KLTxCTFVSQj5EcnktTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mcmVldmVyYjM6OkZyZWV6ZS1Nb2RlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlZXplLU1vZGU8L05JQ0s+Ci08QkxVUkI+RnJlZXplLU1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZnJlZXZlcmIzOjpSb29tLVNpemU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Sb29tLVNpemU8L05JQ0s+Ci08QkxVUkI+Um9vbS1TaXplLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mcmVldmVyYjM6OldldC1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldldC1MZXZlbDwvTklDSz4KLTxCTFVSQj5XZXQtTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mcmVldmVyYjM6OldpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2lkdGg8L05JQ0s+Ci08QkxVUkI+V2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdyYWluLXNjYXR0ZXI6OkRlbnNpdHk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbnNpdHk8L05JQ0s+Ci08QkxVUkI+RGVuc2l0eS48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ncmFpbi1zY2F0dGVyOjpHcmFpbi1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdyYWluLUF0dGFjazwvTklDSz4KLTxCTFVSQj5HcmFpbi1BdHRhY2suPC9CTFVSQj4KLTxERUZBVUxUPjMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3JhaW4tc2NhdHRlcjo6R3JhaW4tTGVuZ3RoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HcmFpbi1MZW5ndGg8L05JQ0s+Ci08QkxVUkI+R3JhaW4tTGVuZ3RoLjwvQkxVUkI+Ci08REVGQVVMVD4zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdyYWluLXNjYXR0ZXI6OlNjYXR0ZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TY2F0dGVyPC9OSUNLPgotPEJMVVJCPlNjYXR0ZXIuPC9CTFVSQj4KLTxERUZBVUxUPjIsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhhcmQtZ2F0ZTo6VGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGhyZXNob2xkPC9OSUNLPgotPEJMVVJCPlRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWlkZW50aXR5LWNvbnRyb2w6OklucHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0PC9OSUNLPgotPEJMVVJCPklucHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1pZGVudGl0eS1jb250cm9sOjpPdXRwdXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPk91dHB1dDwvTklDSz4KLTxCTFVSQj5PdXRwdXQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxvZmk6OkNyYWNrbGluZzwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNyYWNrbGluZzwvTklDSz4KLTxCTFVSQj5DcmFja2xpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sb2ZpOjpPcGFtcC1CYW5kd2lkdGgtTGltaXRpbmc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMTAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3BhbXAtQmFuZHdpZHRoLUxpbWl0aW5nPC9OSUNLPgotPEJMVVJCPk9wYW1wLUJhbmR3aWR0aC1MaW1pdGluZy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxvZmk6OlBvd2Vyc3VwcGx5LU92ZXJsb2FkaW5nPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Qb3dlcnN1cHBseS1PdmVybG9hZGluZzwvTklDSz4KLTxCTFVSQj5Qb3dlcnN1cHBseS1PdmVybG9hZGluZy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxvZ2lzdGljOjpTdGVwLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0NCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0ZXAtZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPlN0ZXAtZnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4yMiwwNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxvZ2lzdGljOjpwYXJhbS0tci0tcGFyYW1ldGVyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyLDksMyw5OTk5XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLS1yLS1wYXJhbWV0ZXI8L05JQ0s+Ci08QkxVUkI+cGFyYW0tLXItLXBhcmFtZXRlci48L0JMVVJCPgotPERFRkFVTFQ+Myw5OTk5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbm9pc2Utc291cmNlLXdoaXRlOjpBbXBsaXR1ZGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkFtcGxpdHVkZTwvTklDSz4KLTxCTFVSQj5BbXBsaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1udWxsLWNpOjpJbnB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dDwvTklDSz4KLTxCTFVSQj5JbnB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbnVsbC1jbzo6T3V0cHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5PdXRwdXQ8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1vcmdhbjo6QXR0YWNrLUhpPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXR0YWNrLUhpPC9OSUNLPgotPEJMVVJCPkF0dGFjay1IaS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpBdHRhY2stTG88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BdHRhY2stTG88L05JQ0s+Ci08QkxVUkI+QXR0YWNrLUxvLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtb3JnYW46OkJyYXNzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QnJhc3M8L05JQ0s+Ci08QkxVUkI+QnJhc3MuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtb3JnYW46OkRlY2F5LUhpPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVjYXktSGk8L05JQ0s+Ci08QkxVUkI+RGVjYXktSGkuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1vcmdhbjo6RGVjYXktTG88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1MbzwvTklDSz4KLTxCTFVSQj5EZWNheS1Mby48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpGbHV0ZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZsdXRlPC9OSUNLPgotPEJMVVJCPkZsdXRlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpHYXRlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2F0ZTwvTklDSz4KLTxCTFVSQj5HYXRlLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpSZWVkPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVlZDwvTklDSz4KLTxCTFVSQj5SZWVkLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpSZWxlYXNlLUhpPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS1IaTwvTklDSz4KLTxCTFVSQj5SZWxlYXNlLUhpLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtb3JnYW46OlJlbGVhc2UtTG88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZWxlYXNlLUxvPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtTG8uPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1vcmdhbjo6U3VzdGFpbi1IaTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN1c3RhaW4tSGk8L05JQ0s+Ci08QkxVUkI+U3VzdGFpbi1IaS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpTdXN0YWluLUxvPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3VzdGFpbi1MbzwvTklDSz4KLTxCTFVSQj5TdXN0YWluLUxvLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtb3JnYW46OlZlbG9jaXR5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmVsb2NpdHk8L05JQ0s+Ci08QkxVUkI+VmVsb2NpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1vcmdhbjo6cGFyYW0tMTZ0aC1IYXJtb25pYzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTE2dGgtSGFybW9uaWM8L05JQ0s+Ci08QkxVUkI+cGFyYW0tMTZ0aC1IYXJtb25pYy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpwYXJhbS0yLTItM3JkLUhhcm1vbmljPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMi0yLTNyZC1IYXJtb25pYzwvTklDSz4KLTxCTFVSQj5wYXJhbS0yLTItM3JkLUhhcm1vbmljLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtb3JnYW46OnBhcmFtLTJuZC1IYXJtb25pYzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTJuZC1IYXJtb25pYzwvTklDSz4KLTxCTFVSQj5wYXJhbS0ybmQtSGFybW9uaWMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1vcmdhbjo6cGFyYW0tNHRoLUhhcm1vbmljPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tNHRoLUhhcm1vbmljPC9OSUNLPgotPEJMVVJCPnBhcmFtLTR0aC1IYXJtb25pYy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW9yZ2FuOjpwYXJhbS01LTEtM3JkLUhhcm1vbmljPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tNS0xLTNyZC1IYXJtb25pYzwvTklDSz4KLTxCTFVSQj5wYXJhbS01LTEtM3JkLUhhcm1vbmljLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtb3JnYW46OnBhcmFtLTh0aC1IYXJtb25pYzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTh0aC1IYXJtb25pYzwvTklDSz4KLTxCTFVSQj5wYXJhbS04dGgtSGFybW9uaWMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wZWFrOjpQZWFrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+UGVhazwvTklDSz4KLTxCTFVSQj5QZWFrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzEtQXR0YWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMS1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+RENPMS1BdHRhY2suPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMS1EZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzEtRGVjYXk8L05JQ0s+Ci08QkxVUkI+RENPMS1EZWNheS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08xLU1vZHVsYXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08xLU1vZHVsYXRpb248L05JQ0s+Ci08QkxVUkI+RENPMS1Nb2R1bGF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzEtT2N0YXZlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMiwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzEtT2N0YXZlPC9OSUNLPgotPEJMVVJCPkRDTzEtT2N0YXZlLjwvQkxVUkI+Ci08REVGQVVMVD4tMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08xLVJlbGVhc2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08xLVJlbGVhc2U8L05JQ0s+Ci08QkxVUkI+RENPMS1SZWxlYXNlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzEtU3VzdGFpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzEtU3VzdGFpbjwvTklDSz4KLTxCTFVSQj5EQ08xLVN1c3RhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMS1XYXZlZm9ybTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08xLVdhdmVmb3JtPC9OSUNLPgotPEJMVVJCPkRDTzEtV2F2ZWZvcm0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMi1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08yLUF0dGFjazwvTklDSz4KLTxCTFVSQj5EQ08yLUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08yLURlY2F5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMi1EZWNheTwvTklDSz4KLTxCTFVSQj5EQ08yLURlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzItTW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzItTW9kdWxhdGlvbjwvTklDSz4KLTxCTFVSQj5EQ08yLU1vZHVsYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMi1PY3RhdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMi1PY3RhdmU8L05JQ0s+Ci08QkxVUkI+RENPMi1PY3RhdmUuPC9CTFVSQj4KLTxERUZBVUxUPi0yPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzItUmVsZWFzZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzItUmVsZWFzZTwvTklDSz4KLTxCTFVSQj5EQ08yLVJlbGVhc2UuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMi1TdXN0YWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMi1TdXN0YWluPC9OSUNLPgotPEJMVVJCPkRDTzItU3VzdGFpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08yLVdhdmVmb3JtPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzItV2F2ZWZvcm08L05JQ0s+Ci08QkxVUkI+RENPMi1XYXZlZm9ybS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08zLUF0dGFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzMtQXR0YWNrPC9OSUNLPgotPEJMVVJCPkRDTzMtQXR0YWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzMtRGVjYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08zLURlY2F5PC9OSUNLPgotPEJMVVJCPkRDTzMtRGVjYXkuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMy1Nb2R1bGF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMy1Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPkRDTzMtTW9kdWxhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08zLU9jdGF2ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08zLU9jdGF2ZTwvTklDSz4KLTxCTFVSQj5EQ08zLU9jdGF2ZS48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPMy1SZWxlYXNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMy1SZWxlYXNlPC9OSUNLPgotPEJMVVJCPkRDTzMtUmVsZWFzZS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ08zLVN1c3RhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ08zLVN1c3RhaW48L05JQ0s+Ci08QkxVUkI+RENPMy1TdXN0YWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzMtV2F2ZWZvcm08L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPMy1XYXZlZm9ybTwvTklDSz4KLTxCTFVSQj5EQ08zLVdhdmVmb3JtLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzQtQXR0YWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNC1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+RENPNC1BdHRhY2suPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNC1EZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzQtRGVjYXk8L05JQ0s+Ci08QkxVUkI+RENPNC1EZWNheS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ080LU1vZHVsYXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ080LU1vZHVsYXRpb248L05JQ0s+Ci08QkxVUkI+RENPNC1Nb2R1bGF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzQtT2N0YXZlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMiwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzQtT2N0YXZlPC9OSUNLPgotPEJMVVJCPkRDTzQtT2N0YXZlLjwvQkxVUkI+Ci08REVGQVVMVD4tMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ080LVJlbGVhc2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ080LVJlbGVhc2U8L05JQ0s+Ci08QkxVUkI+RENPNC1SZWxlYXNlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzQtU3VzdGFpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzQtU3VzdGFpbjwvTklDSz4KLTxCTFVSQj5EQ080LVN1c3RhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNC1XYXZlZm9ybTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ080LVdhdmVmb3JtPC9OSUNLPgotPEJMVVJCPkRDTzQtV2F2ZWZvcm0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNS1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ081LUF0dGFjazwvTklDSz4KLTxCTFVSQj5EQ081LUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ081LURlY2F5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNS1EZWNheTwvTklDSz4KLTxCTFVSQj5EQ081LURlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzUtTW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzUtTW9kdWxhdGlvbjwvTklDSz4KLTxCTFVSQj5EQ081LU1vZHVsYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNS1PY3RhdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNS1PY3RhdmU8L05JQ0s+Ci08QkxVUkI+RENPNS1PY3RhdmUuPC9CTFVSQj4KLTxERUZBVUxUPi0yPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzUtUmVsZWFzZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzUtUmVsZWFzZTwvTklDSz4KLTxCTFVSQj5EQ081LVJlbGVhc2UuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNS1TdXN0YWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNS1TdXN0YWluPC9OSUNLPgotPEJMVVJCPkRDTzUtU3VzdGFpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ081LVdhdmVmb3JtPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzUtV2F2ZWZvcm08L05JQ0s+Ci08QkxVUkI+RENPNS1XYXZlZm9ybS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ082LUF0dGFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSw4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRDTzYtQXR0YWNrPC9OSUNLPgotPEJMVVJCPkRDTzYtQXR0YWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzYtRGVjYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ082LURlY2F5PC9OSUNLPgotPEJMVVJCPkRDTzYtRGVjYXkuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNi1Nb2R1bGF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNi1Nb2R1bGF0aW9uPC9OSUNLPgotPEJMVVJCPkRDTzYtTW9kdWxhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ082LU9jdGF2ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ082LU9jdGF2ZTwvTklDSz4KLTxCTFVSQj5EQ082LU9jdGF2ZS48L0JMVVJCPgotPERFRkFVTFQ+LTI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZW1vZDo6RENPNi1SZWxlYXNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNi1SZWxlYXNlPC9OSUNLPgotPEJMVVJCPkRDTzYtUmVsZWFzZS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlbW9kOjpEQ082LVN1c3RhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EQ082LVN1c3RhaW48L05JQ0s+Ci08QkxVUkI+RENPNi1TdXN0YWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkRDTzYtV2F2ZWZvcm08L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RENPNi1XYXZlZm9ybTwvTklDSz4KLTxCTFVSQj5EQ082LVdhdmVmb3JtLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OkdhdGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYXRlPC9OSUNLPgotPEJMVVJCPkdhdGUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2Vtb2Q6OlZlbG9jaXR5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmVsb2NpdHk8L05JQ0s+Ci08QkxVUkI+VmVsb2NpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waW5rLWludGVycG9sYXRlZC1hdWRpbzo6SGlnaGVzdC1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNDQxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SGlnaGVzdC1mcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+SGlnaGVzdC1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waW5rLXNoOjpTYW1wbGUtYW5kLWhvbGQtZnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDg4Ml08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TYW1wbGUtYW5kLWhvbGQtZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPlNhbXBsZS1hbmQtaG9sZC1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21wcmVzcy1wZWFrOjpDb21wcmVzc2lvbi1SYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48PSAxPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q29tcHJlc3Npb24tUmF0aW88L05JQ0s+Ci08QkxVUkI+Q29tcHJlc3Npb24tUmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPi0xLDcwMTQxZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbXByZXNzLXBlYWs6Ok91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LUVudmVsb3BlLUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21wcmVzcy1wZWFrOjpPdXRwdXQtRW52ZWxvcGUtRGVjYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1FbnZlbG9wZS1EZWNheTwvTklDSz4KLTxCTFVSQj5PdXRwdXQtRW52ZWxvcGUtRGVjYXkuPC9CTFVSQj4KLTxERUZBVUxUPjMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY29tcHJlc3MtcGVhazo6VGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+VGhyZXNob2xkLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY29tcHJlc3Mtcm1zOjpDb21wcmVzc2lvbi1SYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48PSAxPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q29tcHJlc3Npb24tUmF0aW88L05JQ0s+Ci08QkxVUkI+Q29tcHJlc3Npb24tUmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPi0xLDcwMTQxZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbXByZXNzLXJtczo6T3V0cHV0LUVudmVsb3BlLUF0dGFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LUVudmVsb3BlLUF0dGFjazwvTklDSz4KLTxCTFVSQj5PdXRwdXQtRW52ZWxvcGUtQXR0YWNrLjwvQkxVUkI+Ci08REVGQVVMVD4zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbXByZXNzLXJtczo6T3V0cHV0LUVudmVsb3BlLURlY2F5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PdXRwdXQtRW52ZWxvcGUtRGVjYXk8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LUVudmVsb3BlLURlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbXByZXNzLXJtczo6VGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+VGhyZXNob2xkLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZXhwYW5kLXBlYWs6OkV4cGFuc2lvbi1SYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48PSAxPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RXhwYW5zaW9uLVJhdGlvPC9OSUNLPgotPEJMVVJCPkV4cGFuc2lvbi1SYXRpby48L0JMVVJCPgotPERFRkFVTFQ+LTEsNzAxNDFlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZXhwYW5kLXBlYWs6Ok91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LUVudmVsb3BlLUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1leHBhbmQtcGVhazo6T3V0cHV0LUVudmVsb3BlLURlY2F5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PdXRwdXQtRW52ZWxvcGUtRGVjYXk8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LUVudmVsb3BlLURlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWV4cGFuZC1wZWFrOjpUaHJlc2hvbGQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5UaHJlc2hvbGQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1leHBhbmQtcm1zOjpFeHBhbnNpb24tUmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PD0gMTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cGFuc2lvbi1SYXRpbzwvTklDSz4KLTxCTFVSQj5FeHBhbnNpb24tUmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPi0xLDcwMTQxZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWV4cGFuZC1ybXM6Ok91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LUVudmVsb3BlLUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1leHBhbmQtcm1zOjpPdXRwdXQtRW52ZWxvcGUtRGVjYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1FbnZlbG9wZS1EZWNheTwvTklDSz4KLTxCTFVSQj5PdXRwdXQtRW52ZWxvcGUtRGVjYXkuPC9CTFVSQj4KLTxERUZBVUxUPjMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZXhwYW5kLXJtczo6VGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+VGhyZXNob2xkLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbGltaXQtcGVhazo6T3V0cHV0LUVudmVsb3BlLUF0dGFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LUVudmVsb3BlLUF0dGFjazwvTklDSz4KLTxCTFVSQj5PdXRwdXQtRW52ZWxvcGUtQXR0YWNrLjwvQkxVUkI+Ci08REVGQVVMVD4zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxpbWl0LXBlYWs6Ok91dHB1dC1FbnZlbG9wZS1EZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LUVudmVsb3BlLURlY2F5PC9OSUNLPgotPEJMVVJCPk91dHB1dC1FbnZlbG9wZS1EZWNheS48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1saW1pdC1wZWFrOjpUaHJlc2hvbGQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5UaHJlc2hvbGQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1saW1pdC1ybXM6Ok91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1FbnZlbG9wZS1BdHRhY2s8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LUVudmVsb3BlLUF0dGFjay48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1saW1pdC1ybXM6Ok91dHB1dC1FbnZlbG9wZS1EZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LUVudmVsb3BlLURlY2F5PC9OSUNLPgotPEJMVVJCPk91dHB1dC1FbnZlbG9wZS1EZWNheS48L0JMVVJCPgotPERFRkFVTFQ+Myw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1saW1pdC1ybXM6OlRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGhyZXNob2xkPC9OSUNLPgotPEJMVVJCPlRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNpbmUtZmFhYzo6QW1wbGl0dWRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbXBsaXR1ZGU8L05JQ0s+Ci08QkxVUkI+QW1wbGl0dWRlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2luZS1mY2FhOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2luZS1mY2FjOjpBbXBsaXR1ZGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkFtcGxpdHVkZTwvTklDSz4KLTxCTFVSQj5BbXBsaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zaW5lLWZjYWM6OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyMjA1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zeW5kcnVtOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXN5bmRydW06OkZyZXF1ZW5jeS1SYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktUmF0aW88L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LVJhdGlvLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3luZHJ1bTo6UmVzb25hbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc29uYW5jZTwvTklDSz4KLTxCTFVSQj5SZXNvbmFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc3luZHJ1bTo6VHJpZ2dlcjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRyaWdnZXI8L05JQ0s+Ci08QkxVUkI+VHJpZ2dlci48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zeW5kcnVtOjpWZWxvY2l0eTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WZWxvY2l0eTwvTklDSz4KLTxCTFVSQj5WZWxvY2l0eS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZjMwMzo6Q3V0b2ZmPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3V0b2ZmPC9OSUNLPgotPEJMVVJCPkN1dG9mZi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZjMwMzo6RGVjYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheTwvTklDSz4KLTxCTFVSQj5EZWNheS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZjMwMzo6RW52ZWxvcGUtTW9kdWxhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVudmVsb3BlLU1vZHVsYXRpb248L05JQ0s+Ci08QkxVUkI+RW52ZWxvcGUtTW9kdWxhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZjMwMzo6UmVzb25hbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZjZjMwMzo6VHJpZ2dlcjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRyaWdnZXI8L05JQ0s+Ci08QkxVUkI+VHJpZ2dlci48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS13c2hhcGUtc2luZTo6TGltaXRpbmctQW1wbGl0dWRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MaW1pdGluZy1BbXBsaXR1ZGU8L05JQ0s+Ci08QkxVUkI+TGltaXRpbmctQW1wbGl0dWRlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY2hlYnN0b3J0aW9uOjpEaXN0b3J0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDNdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGlzdG9ydGlvbjwvTklDSz4KLTxCTFVSQj5EaXN0b3J0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbGNyRGVsYXk6OkMtZGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjcwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DLWRlbGF5PC9OSUNLPgotPEJMVVJCPkMtZGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjY3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxjckRlbGF5OjpDLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDUwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkMtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+Qy1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sY3JEZWxheTo6RHJ5LVdldC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1XZXQtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RHJ5LVdldC1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxjckRlbGF5OjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEwMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sY3JEZWxheTo6SGlnaC1kYW1wPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5IaWdoLWRhbXA8L05JQ0s+Ci08QkxVUkI+SGlnaC1kYW1wLjwvQkxVUkI+Ci08REVGQVVMVD41MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxjckRlbGF5OjpMLWRlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDI3MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TC1kZWxheTwvTklDSz4KLTxCTFVSQj5MLWRlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD42NzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sY3JEZWxheTo6TC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MLWxldmVsPC9OSUNLPgotPEJMVVJCPkwtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbGNyRGVsYXk6Okxvdy1kYW1wPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Mb3ctZGFtcDwvTklDSz4KLTxCTFVSQj5Mb3ctZGFtcC48L0JMVVJCPgotPERFRkFVTFQ+NTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1sY3JEZWxheTo6Ui1kZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyNzAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlItZGVsYXk8L05JQ0s+Ci08QkxVUkI+Ui1kZWxheS48L0JMVVJCPgotPERFRkFVTFQ+Njc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbGNyRGVsYXk6OlItbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Ui1sZXZlbDwvTklDSz4KLTxCTFVSQj5SLWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4yNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxjckRlbGF5OjpTcHJlYWQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3ByZWFkPC9OSUNLPgotPEJMVVJCPlNwcmVhZC48L0JMVVJCPgotPERFRkFVTFQ+MjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kaXZpZGVyOjpEZW5vbWluYXRvcjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZW5vbWluYXRvcjwvTklDSz4KLTxCTFVSQj5EZW5vbWluYXRvci48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJhbmRvbS1mYXNjLW9hOjpXYXZlLVNtb290aG5lc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XYXZlLVNtb290aG5lc3M8L05JQ0s+Ci08QkxVUkI+V2F2ZS1TbW9vdGhuZXNzLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcmFuZG9tLWZjc2Etb2E6OkZyZXF1ZW56PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDkxODc1LDIyMDUwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW56PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW56LjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1yYW5kb20tZmNzYy1vYTo6RnJlcXVlbno8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbno8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbnouPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJhbmRvbS1mY3NjLW9hOjpXYXZlLVNtb290aG5lc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XYXZlLVNtb290aG5lc3M8L05JQ0s+Ci08QkxVUkI+V2F2ZS1TbW9vdGhuZXNzLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbGZvUGhhc2VyOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxmb1BoYXNlcjo6TEZPLWRlcHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEZPLWRlcHRoPC9OSUNLPgotPEJMVVJCPkxGTy1kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxmb1BoYXNlcjo6TEZPLXJhdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxGTy1yYXRlPC9OSUNLPgotPEJMVVJCPkxGTy1yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4yNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxmb1BoYXNlcjo6U3ByZWFkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3ByZWFkPC9OSUNLPgotPEJMVVJCPlNwcmVhZC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGZWVkYmFjay0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrLTE8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2stMS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGZWVkYmFjay0yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrLTI8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2stMi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGZWVkYmFjay0zPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrLTM8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2stMy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGZWVkYmFjay00PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrLTQ8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2stNC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGcmVxdWVuY3ktMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktMTwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktMS48L0JMVVJCPgotPERFRkFVTFQ+NTAwMCw3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGcmVxdWVuY3ktMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktMjwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktMi48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGcmVxdWVuY3ktMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktMzwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktMy48L0JMVVJCPgotPERFRkFVTFQ+MTUwMDAsMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZvdXJCeUZvdXJQb2xlOjpGcmVxdWVuY3ktNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktNDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktNC48L0JMVVJCPgotPERFRkFVTFQ+MjAwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hdXRvUGhhc2VyOjpBdHRhY2stdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkF0dGFjay10aW1lPC9OSUNLPgotPEJMVVJCPkF0dGFjay10aW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYXV0b1BoYXNlcjo6RGVjYXktdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlY2F5LXRpbWU8L05JQ0s+Ci08QkxVUkI+RGVjYXktdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWF1dG9QaGFzZXI6OkZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYXV0b1BoYXNlcjo6TW9kdWxhdGlvbi1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRpb24tZGVwdGg8L05JQ0s+Ci08QkxVUkI+TW9kdWxhdGlvbi1kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWF1dG9QaGFzZXI6OlNwcmVhZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNwcmVhZDwvTklDSz4KLTxCTFVSQj5TcHJlYWQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcmVmbGVjdG9yOjpEcnktTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZXZlbC0tZEItPC9OSUNLPgotPEJMVVJCPkRyeS1MZXZlbC0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4tOTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcmVmbGVjdG9yOjpGcmFnbWVudC1MZW5ndGgtLW1zLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjAsMTYwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmFnbWVudC1MZW5ndGgtLW1zLTwvTklDSz4KLTxCTFVSQj5GcmFnbWVudC1MZW5ndGgtLW1zLS48L0JMVVJCPgotPERFRkFVTFQ+NDE1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJlZmxlY3Rvcjo6V2V0LUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XZXQtTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5XZXQtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZhc3RMb29rYWhlYWRMaW1pdGVyOjpBdHRlbnVhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw3MF08L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+QXR0ZW51YXRpb248L05JQ0s+Ci08QkxVUkI+QXR0ZW51YXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYXN0TG9va2FoZWFkTGltaXRlcjo6SW5wdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0LWdhaW48L05JQ0s+Ci08QkxVUkI+SW5wdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZhc3RMb29rYWhlYWRMaW1pdGVyOjpMaW1pdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TGltaXQ8L05JQ0s+Ci08QkxVUkI+TGltaXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mYXN0TG9va2FoZWFkTGltaXRlcjo6UmVsZWFzZS10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS10aW1lPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1MDc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmFzdExvb2thaGVhZExpbWl0ZXI6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6Ok1hdGNoLVJhbmdlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXRjaC1SYW5nZTwvTklDSz4KLTxCTFVSQj5NYXRjaC1SYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpNb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZGU8L05JQ0s+Ci08QkxVUkI+TW9kZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpRdWFudGlzZS1SYW5nZS1NYXhpbXVtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlF1YW50aXNlLVJhbmdlLU1heGltdW08L05JQ0s+Ci08QkxVUkI+UXVhbnRpc2UtUmFuZ2UtTWF4aW11bS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlF1YW50aXNlLVJhbmdlLU1pbmltdW08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UXVhbnRpc2UtUmFuZ2UtTWluaW11bTwvTklDSz4KLTxCTFVSQj5RdWFudGlzZS1SYW5nZS1NaW5pbXVtLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6U3RlcHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0ZXBzPC9OSUNLPgotPEJMVVJCPlN0ZXBzLjwvQkxVUkI+Ci08REVGQVVMVD4yMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS0wPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTA8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6VmFsdWUtMTA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTA8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS0xMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xMTwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xMS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTEyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTEyPC9OSUNLPgotPEJMVVJCPlZhbHVlLTEyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6VmFsdWUtMTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTM8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS0xNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xNDwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xNC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTE1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE1PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6VmFsdWUtMTY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTY8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTYuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS0xNzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS0xNzwvTklDSz4KLTxCTFVSQj5WYWx1ZS0xNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTE4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTE4PC9OSUNLPgotPEJMVVJCPlZhbHVlLTE4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6VmFsdWUtMTk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMTk8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMTkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS0yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtMi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS0zLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6VmFsdWUtNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS00PC9OSUNLPgotPEJMVVJCPlZhbHVlLTQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS01PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtNS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtNjwvTklDSz4KLTxCTFVSQj5WYWx1ZS02LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1xdWFudGlzZXIyMDo6VmFsdWUtNzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS03PC9OSUNLPgotPEJMVVJCPlZhbHVlLTcuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXF1YW50aXNlcjIwOjpWYWx1ZS04PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLTg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtOC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcXVhbnRpc2VyMjA6OlZhbHVlLTk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS05LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12eW5pbDo6Q3JhY2tsZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNyYWNrbGU8L05JQ0s+Ci08QkxVUkI+Q3JhY2tsZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZ5bmlsOjpSUE08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzMzLDc4XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJQTTwvTklDSz4KLTxCTFVSQj5SUE0uPC9CTFVSQj4KLTxERUZBVUxUPjMzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdnluaWw6OlN1cmZhY2Utd2FycGluZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN1cmZhY2Utd2FycGluZzwvTklDSz4KLTxCTFVSQj5TdXJmYWNlLXdhcnBpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12eW5pbDo6V2VhcjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldlYXI8L05JQ0s+Ci08QkxVUkI+V2Vhci48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZ5bmlsOjpZZWFyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxOTAwLDE5OTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+WWVhcjwvTklDSz4KLTxCTFVSQj5ZZWFyLjwvQkxVUkI+Ci08REVGQVVMVD4xOTkwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY29uc3Q6OlNpZ25hbC1hbXBsaXR1ZGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TaWduYWwtYW1wbGl0dWRlPC9OSUNLPgotPEJMVVJCPlNpZ25hbC1hbXBsaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wcm9kdWN0LWlhaWMtb2E6OlNlY29uZC1JbnB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TZWNvbmQtSW5wdXQ8L05JQ0s+Ci08QkxVUkI+U2Vjb25kLUlucHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wcm9kdWN0LWljaWMtb2M6OkZpcnN0LUlucHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpcnN0LUlucHV0PC9OSUNLPgotPEJMVVJCPkZpcnN0LUlucHV0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wcm9kdWN0LWljaWMtb2M6OlByb2R1Y3QtT3V0cHV0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5Qcm9kdWN0LU91dHB1dDwvTklDSz4KLTxCTFVSQj5Qcm9kdWN0LU91dHB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcHJvZHVjdC1pY2ljLW9jOjpTZWNvbmQtSW5wdXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U2Vjb25kLUlucHV0PC9OSUNLPgotPEJMVVJCPlNlY29uZC1JbnB1dC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJldmVyYjo6QWxscGFzcy1GaWx0ZXJzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QWxscGFzcy1GaWx0ZXJzPC9OSUNLPgotPEJMVVJCPkFsbHBhc3MtRmlsdGVycy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcmV2ZXJiOjpCYW5kcGFzcy1GaWx0ZXI8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kcGFzcy1GaWx0ZXI8L05JQ0s+Ci08QkxVUkI+QmFuZHBhc3MtRmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1yZXZlcmI6OkNvbWItRmlsdGVyczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNvbWItRmlsdGVyczwvTklDSz4KLTxCTFVSQj5Db21iLUZpbHRlcnMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJldmVyYjo6RGVjYXktLW1zLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS0tbXMtPC9OSUNLPgotPEJMVVJCPkRlY2F5LS1tcy0uPC9CTFVSQj4KLTxERUZBVUxUPjI1MDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcmV2ZXJiOjpEcnktTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZXZlbC0tZEItPC9OSUNLPgotPEJMVVJCPkRyeS1MZXZlbC0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJldmVyYjo6RW5oYW5jZWQtU3RlcmVvPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RW5oYW5jZWQtU3RlcmVvPC9OSUNLPgotPEJMVVJCPkVuaGFuY2VkLVN0ZXJlby48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcmV2ZXJiOjpSZXZlcmItVHlwZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmV2ZXJiLVR5cGU8L05JQ0s+Ci08QkxVUkI+UmV2ZXJiLVR5cGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcmV2ZXJiOjpXZXQtTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldldC1MZXZlbC0tZEItPC9OSUNLPgotPEJMVVJCPldldC1MZXZlbC0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHVsc2UtVkNPOjpFeHAtRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cC1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkV4cC1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHVsc2UtVkNPOjpMUC1maWx0ZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MUC1maWx0ZXI8L05JQ0s+Ci08QkxVUkI+TFAtZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHVsc2UtVkNPOjpMaW4tRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxpbi1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkxpbi1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHVsc2UtVkNPOjpPY3RhdmU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlstNCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk9jdGF2ZTwvTklDSz4KLTxCTFVSQj5PY3RhdmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QdWxzZS1WQ086OlR1bmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UdW5lPC9OSUNLPgotPEJMVVJCPlR1bmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TYXctVkNPOjpFeHAtRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cC1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkV4cC1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU2F3LVZDTzo6TFAtZmlsdGVyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TFAtZmlsdGVyPC9OSUNLPgotPEJMVVJCPkxQLWZpbHRlci48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNhdy1WQ086Okxpbi1GTS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TGluLUZNLWdhaW48L05JQ0s+Ci08QkxVUkI+TGluLUZNLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TYXctVkNPOjpPY3RhdmU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlstNCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk9jdGF2ZTwvTklDSz4KLTxCTFVSQj5PY3RhdmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TYXctVkNPOjpUdW5lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VHVuZTwvTklDSz4KLTxCTFVSQj5UdW5lLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUmVjLVZDTzo6RXhwLUZNLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5FeHAtRk0tZ2FpbjwvTklDSz4KLTxCTFVSQj5FeHAtRk0tZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJlYy1WQ086OkZvcm0tbW9kPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Rm9ybS1tb2Q8L05JQ0s+Ci08QkxVUkI+Rm9ybS1tb2QuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1SZWMtVkNPOjpMUC1maWx0ZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MUC1maWx0ZXI8L05JQ0s+Ci08QkxVUkI+TFAtZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUmVjLVZDTzo6TGluLUZNLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MaW4tRk0tZ2FpbjwvTklDSz4KLTxCTFVSQj5MaW4tRk0tZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJlYy1WQ086Ok9jdGF2ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Wy00LDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T2N0YXZlPC9OSUNLPgotPEJMVVJCPk9jdGF2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJlYy1WQ086OlR1bmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UdW5lPC9OSUNLPgotPEJMVVJCPlR1bmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1SZWMtVkNPOjpXYXZlZm9ybTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XYXZlZm9ybTwvTklDSz4KLTxCTFVSQj5XYXZlZm9ybS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNpbmdsZVBhcmE6OkJhbmR3aWR0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zaW5nbGVQYXJhOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTc2NDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2luZ2xlUGFyYTo6R2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW48L05JQ0s+Ci08QkxVUkI+R2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdhdGU6OkF0dGFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSwxMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkF0dGFjazwvTklDSz4KLTxCTFVSQj5BdHRhY2suPC9CTFVSQj4KLTxERUZBVUxUPjI1MCwwMDg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1nYXRlOjpEZWNheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiw0MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlY2F5PC9OSUNLPgotPEJMVVJCPkRlY2F5LjwvQkxVUkI+Ci08REVGQVVMVD4yMDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ2F0ZTo6SEYta2V5LWZpbHRlcjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjIwLDUsMjE2MDldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SEYta2V5LWZpbHRlcjwvTklDSz4KLTxCTFVSQj5IRi1rZXktZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4yMTYwOTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdhdGU6OkhvbGQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIsMjAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Ib2xkPC9OSUNLPgotPEJMVVJCPkhvbGQuPC9CTFVSQj4KLTxERUZBVUxUPjE1MDAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdhdGU6OkxGLWtleS1maWx0ZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzMwLDg3LDQ0MTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEYta2V5LWZpbHRlcjwvTklDSz4KLTxCTFVSQj5MRi1rZXktZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4zMCw4NzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdhdGU6Ok91dHB1dC1zZWxlY3Q8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1zZWxlY3Q8L05JQ0s+Ci08QkxVUkI+T3V0cHV0LXNlbGVjdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdhdGU6OlJhbmdlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SYW5nZTwvTklDSz4KLTxCTFVSQj5SYW5nZS48L0JMVVJCPgotPERFRkFVTFQ+LTkwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ2F0ZTo6VGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGhyZXNob2xkPC9OSUNLPgotPEJMVVJCPlRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+LTcwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLXN0OjpBdHRhY2stLW1zLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw1MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXR0YWNrLS1tcy08L05JQ0s+Ci08QkxVUkI+QXR0YWNrLS1tcy0uPC9CTFVSQj4KLTxERUZBVUxUPjEyODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1keW5hbWljcy1zdDo6RW52ZWxvcGUtVm9sdW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkVudmVsb3BlLVZvbHVtZTwvTklDSz4KLTxCTFVSQj5FbnZlbG9wZS1Wb2x1bWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZHluYW1pY3Mtc3Q6OkVudmVsb3BlLVZvbHVtZS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkVudmVsb3BlLVZvbHVtZS0xPC9OSUNLPgotPEJMVVJCPkVudmVsb3BlLVZvbHVtZS0xLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLXN0OjpGdW5jdGlvbjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnVuY3Rpb248L05JQ0s+Ci08QkxVUkI+RnVuY3Rpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZHluYW1pY3Mtc3Q6OkdhaW4tQWRqdXN0bWVudDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5HYWluLUFkanVzdG1lbnQ8L05JQ0s+Ci08QkxVUkI+R2Fpbi1BZGp1c3RtZW50LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLXN0OjpHYWluLUFkanVzdG1lbnQtMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5HYWluLUFkanVzdG1lbnQtMTwvTklDSz4KLTxCTFVSQj5HYWluLUFkanVzdG1lbnQtMS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1keW5hbWljcy1zdDo6TWFrZXVwLUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1ha2V1cC1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+TWFrZXVwLUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1keW5hbWljcy1zdDo6T2Zmc2V0LUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk9mZnNldC1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+T2Zmc2V0LUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1keW5hbWljcy1zdDo6UmVsZWFzZS0tbXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDEwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS0tbXMtPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtLW1zLS48L0JMVVJCPgotPERFRkFVTFQ+NTAyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLXN0OjpTdGVyZW8tTW9kZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdGVyZW8tTW9kZTwvTklDSz4KLTxCTFVSQj5TdGVyZW8tTW9kZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpCYW5kd2lkdGgtMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMjUsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kd2lkdGgtMTwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGgtMS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpCYW5kd2lkdGgtMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMjUsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kd2lkdGgtMjwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGgtMi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpCYW5kd2lkdGgtMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMjUsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kd2lkdGgtMzwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGgtMy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpCYW5kd2lkdGgtNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMjUsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kd2lkdGgtNDwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGgtNC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpGaWx0ZXI8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0ZXI8L05JQ0s+Ci08QkxVUkI+RmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpGcmVxdWVuY3ktMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjAsMjAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktMTwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktMS48L0JMVVJCPgotPERFRkFVTFQ+MjAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGFyYW1ldHJpYzE6OkZyZXF1ZW5jeS0yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0MCw0MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS0yPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS0yLjwvQkxVUkI+Ci08REVGQVVMVD40MDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QYXJhbWV0cmljMTo6RnJlcXVlbmN5LTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEwMCwxMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3ktMzwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktMy48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpGcmVxdWVuY3ktNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjAwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS00PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS00LjwvQkxVUkI+Ci08REVGQVVMVD4yMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGFyYW1ldHJpYzE6OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yMCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYWluPC9OSUNLPgotPEJMVVJCPkdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QYXJhbWV0cmljMTo6R2Fpbi0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2Fpbi0xPC9OSUNLPgotPEJMVVJCPkdhaW4tMS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpHYWluLTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yMCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYWluLTI8L05JQ0s+Ci08QkxVUkI+R2Fpbi0yLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGFyYW1ldHJpYzE6OkdhaW4tMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW4tMzwvTklDSz4KLTxCTFVSQj5HYWluLTMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QYXJhbWV0cmljMTo6R2Fpbi00PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2Fpbi00PC9OSUNLPgotPEJMVVJCPkdhaW4tNC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpTZWN0aW9uLTE8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TZWN0aW9uLTE8L05JQ0s+Ci08QkxVUkI+U2VjdGlvbi0xLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpTZWN0aW9uLTI8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TZWN0aW9uLTI8L05JQ0s+Ci08QkxVUkI+U2VjdGlvbi0yLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpTZWN0aW9uLTM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TZWN0aW9uLTM8L05JQ0s+Ci08QkxVUkI+U2VjdGlvbi0zLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhcmFtZXRyaWMxOjpTZWN0aW9uLTQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TZWN0aW9uLTQ8L05JQ0s+Ci08QkxVUkI+U2VjdGlvbi00LjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNpbkNvczo6QmFzZS1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDQ0MSwyMjA1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYXNlLWZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5CYXNlLWZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2luQ29zOjpQaXRjaC1vZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5QaXRjaC1vZmZzZXQ8L05JQ0s+Ci08QkxVUkI+UGl0Y2gtb2Zmc2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbWF0cml4U3BhdGlhbGlzZXI6OldpZHRoPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bLTUxMiw1MTJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2lkdGg8L05JQ0s+Ci08QkxVUkI+V2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtbGltaXRlcjo6TGltaXQtTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTMwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxpbWl0LUxldmVsLS1kQi08L05JQ0s+Ci08QkxVUkI+TGltaXQtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1saW1pdGVyOjpPdXRwdXQtVm9sdW1lLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0zMCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PdXRwdXQtVm9sdW1lLS1kQi08L05JQ0s+Ci08QkxVUkI+T3V0cHV0LVZvbHVtZS0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWxpbWl0ZXI6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjUwMCwxXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjI1MDAsMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWJvZGVTaGlmdGVyQ1Y6OkJhc2Utc2hpZnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYXNlLXNoaWZ0PC9OSUNLPgotPEJMVVJCPkJhc2Utc2hpZnQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ib2RlU2hpZnRlckNWOjpDVi1BdHRlbnVhdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNWLUF0dGVudWF0aW9uPC9OSUNLPgotPEJMVVJCPkNWLUF0dGVudWF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYm9kZVNoaWZ0ZXJDVjo6TWl4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1peDwvTklDSz4KLTxCTFVSQj5NaXguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ib2RlU2hpZnRlckNWOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlcjE6OkV4cC1GTS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cC1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkV4cC1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VyMTo6RmVlZGJhY2stZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GZWVkYmFjay1nYWluPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxOjpGcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy02LDZdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlcjE6OklucHV0LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00MCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC1nYWluPC9OSUNLPgotPEJMVVJCPklucHV0LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxOjpMaW4tRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MaW4tRk0tZ2FpbjwvTklDSz4KLTxCTFVSQj5MaW4tRk0tZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlcjE6Ok91dHB1dC1taXg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3V0cHV0LW1peDwvTklDSz4KLTxCTFVSQj5PdXRwdXQtbWl4LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VyMTo6U2VjdGlvbnM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNlY3Rpb25zPC9OSUNLPgotPEJMVVJCPlNlY3Rpb25zLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VyMStMRk86OkZlZWRiYWNrLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2stZ2FpbjwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VyMStMRk86OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VyMStMRk86OklucHV0LWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00MCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC1nYWluPC9OSUNLPgotPEJMVVJCPklucHV0LWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxK0xGTzo6TEZPLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMSwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkxGTy1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxK0xGTzo6TEZPLXdhdmVmb3JtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxGTy13YXZlZm9ybTwvTklDSz4KLTxCTFVSQj5MRk8td2F2ZWZvcm0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxK0xGTzo6TW9kdWxhdGlvbi1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRpb24tZ2FpbjwvTklDSz4KLTxCTFVSQj5Nb2R1bGF0aW9uLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxK0xGTzo6T3V0cHV0LW1peDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PdXRwdXQtbWl4PC9OSUNLPgotPEJMVVJCPk91dHB1dC1taXguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXIxK0xGTzo6U2VjdGlvbnM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNlY3Rpb25zPC9OSUNLPgotPEJMVVJCPlNlY3Rpb25zLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGVjaW1hdG9yOjpCaXQtZGVwdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Qml0LWRlcHRoPC9OSUNLPgotPEJMVVJCPkJpdC1kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWNpbWF0b3I6OlNhbXBsZS1yYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0NCwxLDQ0MTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNhbXBsZS1yYXRlPC9OSUNLPgotPEJMVVJCPlNhbXBsZS1yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD40NDEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNoYXBlcjo6V2F2ZXNoYXBlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMTAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2F2ZXNoYXBlPC9OSUNLPgotPEJMVVJCPldhdmVzaGFwZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaWFuZ2xlLWZhc2Mtb2E6OlNsb3BlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U2xvcGU8L05JQ0s+Ci08QkxVUkI+U2xvcGUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaWFuZ2xlLWZjc2Etb2E6OkZyZXF1ZW56PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDkxODc1LDIyMDUwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW56PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW56LjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmlhbmdsZS1mY3NjLW9hOjpGcmVxdWVuejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw5MTg3NSwyMjA1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuejwvTklDSz4KLTxCTFVSQj5GcmVxdWVuei48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpYW5nbGUtZmNzYy1vYTo6U2xvcGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TbG9wZTwvTklDSz4KLTxCTFVSQj5TbG9wZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGpGbGFuZ2VyOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEwMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kakZsYW5nZXI6OkxGTy1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxGTy1kZXB0aDwvTklDSz4KLTxCTFVSQj5MRk8tZGVwdGguPC9CTFVSQj4KLTxERUZBVUxUPjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kakZsYW5nZXI6OkxGTy1wZXJpb2Q8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMSwzMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tcGVyaW9kPC9OSUNLPgotPEJMVVJCPkxGTy1wZXJpb2QuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kakZsYW5nZXI6OkxGTy1zeW5jPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxGTy1zeW5jPC9OSUNLPgotPEJMVVJCPkxGTy1zeW5jLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1pbXA6OkdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5HYWluPC9OSUNLPgotPEJMVVJCPkdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1pbXA6OkhpZ2gtbGF0ZW5jeS1tb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhpZ2gtbGF0ZW5jeS1tb2RlPC9OSUNLPgotPEJMVVJCPkhpZ2gtbGF0ZW5jeS1tb2RlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaW1wOjpJbXB1bHNlLUlEPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwyMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbXB1bHNlLUlEPC9OSUNLPgotPEJMVVJCPkltcHVsc2UtSUQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1pbXA6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLW06OkF0dGFjay0tbXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDUwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BdHRhY2stLW1zLTwvTklDSz4KLTxCTFVSQj5BdHRhY2stLW1zLS48L0JMVVJCPgotPERFRkFVTFQ+MTI4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLW06OkVudmVsb3BlLVZvbHVtZS0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkVudmVsb3BlLVZvbHVtZS0tZEItPC9OSUNLPgotPEJMVVJCPkVudmVsb3BlLVZvbHVtZS0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLW06OkZ1bmN0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GdW5jdGlvbjwvTklDSz4KLTxCTFVSQj5GdW5jdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1keW5hbWljcy1tOjpHYWluLUFkanVzdG1lbnQtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5HYWluLUFkanVzdG1lbnQtLWRCLTwvTklDSz4KLTxCTFVSQj5HYWluLUFkanVzdG1lbnQtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1keW5hbWljcy1tOjpNYWtldXAtR2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWFrZXVwLUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5NYWtldXAtR2Fpbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWR5bmFtaWNzLW06Ok9mZnNldC1HYWluLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yMCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PZmZzZXQtR2Fpbi0tZEItPC9OSUNLPgotPEJMVVJCPk9mZnNldC1HYWluLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZHluYW1pY3MtbTo6UmVsZWFzZS0tbXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDEwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS0tbXMtPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtLW1zLS48L0JMVVJCPgotPERFRkFVTFQ+NTAyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEteGZhZGU6OkNyb3NzZmFkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Dcm9zc2ZhZGU8L05JQ0s+Ci08QkxVUkI+Q3Jvc3NmYWRlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEteGZhZGU0OjpDcm9zc2ZhZGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3Jvc3NmYWRlPC9OSUNLPgotPEJMVVJCPkNyb3NzZmFkZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC10cmVtb2xvOjpEZXB0aC0tLS08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlcHRoLS0tLTwvTklDSz4KLTxCTFVSQj5EZXB0aC0tLS0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtdHJlbW9sbzo6RnJlcXVlbmN5LS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LS1Iei08L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtdHJlbW9sbzo6R2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2Fpbi0tZEItPC9OSUNLPgotPEJMVVJCPkdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBpdGNoU2NhbGU6OlBpdGNoLWNvLWVmZmljaWVudDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1LDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UGl0Y2gtY28tZWZmaWNpZW50PC9OSUNLPgotPEJMVVJCPlBpdGNoLWNvLWVmZmljaWVudC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBpdGNoU2NhbGU6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGl0Y2hTY2FsZUhROjpQaXRjaC1jby1lZmZpY2llbnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNSwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlBpdGNoLWNvLWVmZmljaWVudDwvTklDSz4KLTxCTFVSQj5QaXRjaC1jby1lZmZpY2llbnQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waXRjaFNjYWxlSFE6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmFsdmVSZWN0OjpEaXN0b3J0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGlzdG9ydGlvbjwvTklDSz4KLTxCTFVSQj5EaXN0b3J0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmFsdmVSZWN0OjpTYWctbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TYWctbGV2ZWw8L05JQ0s+Ci08QkxVUkI+U2FnLWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpbmtub2lzZTo6RnJhY3RhbC1EaW1lbnNpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmFjdGFsLURpbWVuc2lvbjwvTklDSz4KLTxCTFVSQj5GcmFjdGFsLURpbWVuc2lvbi48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpbmtub2lzZTo6Tm9pc2UtTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk5vaXNlLUxldmVsLS1kQi08L05JQ0s+Ci08QkxVUkI+Tm9pc2UtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+LTkwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXBpbmtub2lzZTo6U2lnbmFsLUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TaWduYWwtTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5TaWduYWwtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWludGVycG9sYXRvcjo6Q29udHJvbC1JbnB1dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Db250cm9sLUlucHV0PC9OSUNLPgotPEJMVVJCPkNvbnRyb2wtSW5wdXQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6QmFuZC0xLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtZ2FpbjwvTklDSz4KLTxCTFVSQj5CYW5kLTEtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6QmFuZC0yLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTItZ2FpbjwvTklDSz4KLTxCTFVSQj5CYW5kLTItZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6QmFuZC0zLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTMtZ2FpbjwvTklDSz4KLTxCTFVSQj5CYW5kLTMtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkxLWZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXkxLWZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkRlbGF5MS1mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkxLWxlbmd0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5MS1sZW5ndGg8L05JQ0s+Ci08QkxVUkI+RGVsYXkxLWxlbmd0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkxLXdldG5lc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheTEtd2V0bmVzczwvTklDSz4KLTxCTFVSQj5EZWxheTEtd2V0bmVzcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkyLWZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXkyLWZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkRlbGF5Mi1mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkyLWxlbmd0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5Mi1sZW5ndGg8L05JQ0s+Ci08QkxVUkI+RGVsYXkyLWxlbmd0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkyLXdldG5lc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheTItd2V0bmVzczwvTklDSz4KLTxCTFVSQj5EZWxheTItd2V0bmVzcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkzLWZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXkzLWZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkRlbGF5My1mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkzLWxlbmd0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5My1sZW5ndGg8L05JQ0s+Ci08QkxVUkI+RGVsYXkzLWxlbmd0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGVsYXkzLXdldG5lc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheTMtd2V0bmVzczwvTklDSz4KLTxCTFVSQj5EZWxheTMtd2V0bmVzcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGlzdDEtZHJpdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsM108L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EaXN0MS1kcml2ZTwvTklDSz4KLTxCTFVSQj5EaXN0MS1kcml2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGlzdDItZHJpdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsM108L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EaXN0Mi1kcml2ZTwvTklDSz4KLTxCTFVSQj5EaXN0Mi1kcml2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RGlzdDMtZHJpdmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsM108L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EaXN0My1kcml2ZTwvTklDSz4KLTxCTFVSQj5EaXN0My1kcml2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RmlsdDEtTEZPMS1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwMCw1MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdDEtTEZPMS1sZXZlbDwvTklDSz4KLTxCTFVSQj5GaWx0MS1MRk8xLWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpGaWx0MS1MRk8yLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAwLDUwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0MS1MRk8yLWxldmVsPC9OSUNLPgotPEJMVVJCPkZpbHQxLUxGTzItbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OkZpbHQxLWZyZXE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsODAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0MS1mcmVxPC9OSUNLPgotPEJMVVJCPkZpbHQxLWZyZXEuPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RmlsdDEtcTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHQxLXE8L05JQ0s+Ci08QkxVUkI+RmlsdDEtcS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RmlsdDEtcmVzb25hbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdDEtcmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPkZpbHQxLXJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RmlsdDEtdHlwZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0MS10eXBlPC9OSUNLPgotPEJMVVJCPkZpbHQxLXR5cGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OkZpbHQyLUxGTzEtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy01MDAsNTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHQyLUxGTzEtbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RmlsdDItTEZPMS1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RmlsdDItTEZPMi1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwMCw1MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdDItTEZPMi1sZXZlbDwvTklDSz4KLTxCTFVSQj5GaWx0Mi1MRk8yLWxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpGaWx0Mi1mcmVxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDgwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdDItZnJlcTwvTklDSz4KLTxCTFVSQj5GaWx0Mi1mcmVxLjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OkZpbHQyLXE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0Mi1xPC9OSUNLPgotPEJMVVJCPkZpbHQyLXEuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OkZpbHQyLXJlc29uYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHQyLXJlc29uYW5jZTwvTklDSz4KLTxCTFVSQj5GaWx0Mi1yZXNvbmFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OkZpbHQyLXR5cGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdDItdHlwZTwvTklDSz4KLTxCTFVSQj5GaWx0Mi10eXBlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpGaWx0My1MRk8xLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAwLDUwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0My1MRk8xLWxldmVsPC9OSUNLPgotPEJMVVJCPkZpbHQzLUxGTzEtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OkZpbHQzLUxGTzItbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy01MDAsNTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHQzLUxGTzItbGV2ZWw8L05JQ0s+Ci08QkxVUkI+RmlsdDMtTEZPMi1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6RmlsdDMtZnJlcTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw4MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHQzLWZyZXE8L05JQ0s+Ci08QkxVUkI+RmlsdDMtZnJlcS48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpGaWx0My1xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsdDMtcTwvTklDSz4KLTxCTFVSQj5GaWx0My1xLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpGaWx0My1yZXNvbmFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWx0My1yZXNvbmFuY2U8L05JQ0s+Ci08QkxVUkI+RmlsdDMtcmVzb25hbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpGaWx0My10eXBlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbHQzLXR5cGU8L05JQ0s+Ci08QkxVUkI+RmlsdDMtdHlwZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6SW5wdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0LWdhaW48L05JQ0s+Ci08QkxVUkI+SW5wdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6TEZPMS1mcmVxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEZPMS1mcmVxPC9OSUNLPgotPEJMVVJCPkxGTzEtZnJlcS48L0JMVVJCPgotPERFRkFVTFQ+MjUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpMRk8xLXdhdmU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEZPMS13YXZlPC9OSUNLPgotPEJMVVJCPkxGTzEtd2F2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6TEZPMi1mcmVxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEZPMi1mcmVxPC9OSUNLPgotPEJMVVJCPkxGTzItZnJlcS48L0JMVVJCPgotPERFRkFVTFQ+MjUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpMRk8yLXdhdmU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TEZPMi13YXZlPC9OSUNLPgotPEJMVVJCPkxGTzItd2F2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6T3NjMS1mcmVxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDQwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T3NjMS1mcmVxPC9OSUNLPgotPEJMVVJCPk9zYzEtZnJlcS48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpPc2MxLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Pc2MxLWdhaW48L05JQ0s+Ci08QkxVUkI+T3NjMS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4tNzA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6Ok9zYzEtd2F2ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Pc2MxLXdhdmU8L05JQ0s+Ci08QkxVUkI+T3NjMS13YXZlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpPc2MyLWZyZXE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Pc2MyLWZyZXE8L05JQ0s+Ci08QkxVUkI+T3NjMi1mcmVxLjwvQkxVUkI+Ci08REVGQVVMVD40NDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6Ok9zYzItZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk9zYzItZ2FpbjwvTklDSz4KLTxCTFVSQj5Pc2MyLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPi03MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6T3NjMi13YXZlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk9zYzItd2F2ZTwvTklDSz4KLTxCTFVSQj5Pc2MyLXdhdmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OlJNMS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Uk0xLWdhaW48L05JQ0s+Ci08QkxVUkI+Uk0xLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPi03MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhlcm1lc0ZpbHRlcjo6Uk0yLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5STTItZ2FpbjwvTklDSz4KLTxCTFVSQj5STTItZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+LTcwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaGVybWVzRmlsdGVyOjpSTTMtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJNMy1nYWluPC9OSUNLPgotPEJMVVJCPlJNMy1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4tNzA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OlJpbmdtb2QtMS1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJpbmdtb2QtMS1kZXB0aDwvTklDSz4KLTxCTFVSQj5SaW5nbW9kLTEtZGVwdGguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OlJpbmdtb2QtMi1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJpbmdtb2QtMi1kZXB0aDwvTklDSz4KLTxCTFVSQj5SaW5nbW9kLTItZGVwdGguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OlJpbmdtb2QtMy1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJpbmdtb2QtMy1kZXB0aDwvTklDSz4KLTxCTFVSQj5SaW5nbW9kLTMtZGVwdGguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OlhvdmVyLWxvd2VyLWZyZXE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzUwLDYwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+WG92ZXItbG93ZXItZnJlcTwvTklDSz4KLTxCTFVSQj5Yb3Zlci1sb3dlci1mcmVxLjwvQkxVUkI+Ci08REVGQVVMVD4xNTM3LDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oZXJtZXNGaWx0ZXI6OlhvdmVyLXVwcGVyLWZyZXE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEwMDAsMTAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+WG92ZXItdXBwZXItZnJlcTwvTklDSz4KLTxCTFVSQj5Yb3Zlci11cHBlci1mcmVxLjwvQkxVUkI+Ci08REVGQVVMVD43NzUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtaW1wdWxzZS1mYzo6RnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYm9kZVNoaWZ0ZXI6OkZyZXF1ZW5jeS1zaGlmdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS1zaGlmdDwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3ktc2hpZnQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ib2RlU2hpZnRlcjo6bGF0ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGF0ZW5jeTwvTklDSz4KLTxCTFVSQj5sYXRlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6RnVuZGFtZW50YWwtbWFnbml0dWRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZ1bmRhbWVudGFsLW1hZ25pdHVkZTwvTklDSz4KLTxCTFVSQj5GdW5kYW1lbnRhbC1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tMTB0aC1oYXJtb25pYy1tYWduaXR1ZGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMTB0aC1oYXJtb25pYy1tYWduaXR1ZGU8L05JQ0s+Ci08QkxVUkI+cGFyYW0tMTB0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tMm5kLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0ybmQtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTJuZC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tM3JkLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0zcmQtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTNyZC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tNHRoLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS00dGgtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTR0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tNXRoLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS01dGgtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTV0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tNnRoLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS02dGgtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTZ0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tN3RoLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS03dGgtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTd0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tOHRoLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS04dGgtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTh0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oYXJtb25pY0dlbjo6cGFyYW0tOXRoLWhhcm1vbmljLW1hZ25pdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS05dGgtaGFybW9uaWMtbWFnbml0dWRlPC9OSUNLPgotPEJMVVJCPnBhcmFtLTl0aC1oYXJtb25pYy1tYWduaXR1ZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wdWxzZS1mYXBjLW9hOjpQdWxzZS1XaWR0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlB1bHNlLVdpZHRoPC9OSUNLPgotPEJMVVJCPlB1bHNlLVdpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1wdWxzZS1mY3BhLW9hOjpGcmVxdWVuejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw5MTg3NSwyMjA1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmVxdWVuejwvTklDSz4KLTxCTFVSQj5GcmVxdWVuei48L0JMVVJCPgotPERFRkFVTFQ+NDQwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcHVsc2UtZmNwYy1vYTo6RnJlcXVlbno8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbno8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbnouPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXB1bHNlLWZjcGMtb2E6OlB1bHNlLVdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UHVsc2UtV2lkdGg8L05JQ0s+Ci08QkxVUkI+UHVsc2UtV2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxvd3Bhc3MtaWlyOjpDdXRvZmYtRnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDQxLDE5ODQ1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkN1dG9mZi1GcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+Q3V0b2ZmLUZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MjQyMiw5NzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWxvd3Bhc3MtaWlyOjpTdGFnZXMtMi1wb2xlcy1wZXItc3RhZ2UtPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdGFnZXMtMi1wb2xlcy1wZXItc3RhZ2UtPC9OSUNLPgotPEJMVVJCPlN0YWdlcy0yLXBvbGVzLXBlci1zdGFnZS0uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtcm90c3BlYWs6Okhvcm4tRnJlcXVlbmN5LS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SG9ybi1GcmVxdWVuY3ktLUh6LTwvTklDSz4KLTxCTFVSQj5Ib3JuLUZyZXF1ZW5jeS0tSHotLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJvdHNwZWFrOjpNaWMtRGlzdGFuY2UtLS0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NaWMtRGlzdGFuY2UtLS0tPC9OSUNLPgotPEJMVVJCPk1pYy1EaXN0YW5jZS0tLS0uPC9CTFVSQj4KLTxERUZBVUxUPjI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJvdHNwZWFrOjpSb3Rvci1GcmVxdWVuY3ktLUh6LTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Sb3Rvci1GcmVxdWVuY3ktLUh6LTwvTklDSz4KLTxCTFVSQj5Sb3Rvci1GcmVxdWVuY3ktLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1yb3RzcGVhazo6Um90b3ItSG9ybi1NaXg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Sb3Rvci1Ib3JuLU1peDwvTklDSz4KLTxCTFVSQj5Sb3Rvci1Ib3JuLU1peC48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXJvdHNwZWFrOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDkyMDBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+OTIwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC12aWJyYXRvOjpEZXB0aC0tLS08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVwdGgtLS0tPC9OSUNLPgotPEJMVVJCPkRlcHRoLS0tLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC12aWJyYXRvOjpEcnktTGV2ZWwtLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZXZlbC0tZEItPC9OSUNLPgotPEJMVVJCPkRyeS1MZXZlbC0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4tOTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtdmlicmF0bzo6RnJlcXVlbmN5LS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5LS1Iei08L05JQ0s+Ci08QkxVUkI+RnJlcXVlbmN5LS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtdmlicmF0bzo6V2V0LUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XZXQtTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5XZXQtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC12aWJyYXRvOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDYzMDBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+NjMwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXN0ZXBNdXhlcjo6Q3Jvc3NmYWRlLXRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNyb3NzZmFkZS10aW1lPC9OSUNLPgotPEJMVVJCPkNyb3NzZmFkZS10aW1lLjwvQkxVUkI+Ci08REVGQVVMVD41MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWZsYW5nZXI6OkRlbGF5LWJhc2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMSwyNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheS1iYXNlPC9OSUNLPgotPEJMVVJCPkRlbGF5LWJhc2UuPC9CTFVSQj4KLTxERUZBVUxUPjYsMzI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZmxhbmdlcjo6RmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mbGFuZ2VyOjpMRk8tZnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDA1LDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MRk8tZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkxGTy1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjAsMzM0Mzc8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mbGFuZ2VyOjpNYXgtc2xvd2Rvd248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWF4LXNsb3dkb3duPC9OSUNLPgotPEJMVVJCPk1heC1zbG93ZG93bi48L0JMVVJCPgotPERFRkFVTFQ+Miw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW1wOjpBbXBzLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCw3MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbXBzLWdhaW48L05JQ0s+Ci08QkxVUkI+QW1wcy1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWcrdC1jb250cm9sOjpBYmtsaW5nemVpdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QWJrbGluZ3plaXQ8L05JQ0s+Ci08QkxVUkI+QWJrbGluZ3plaXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kYWhkc3ItZyt0LWNvbnRyb2w6OkF1c2tsaW5nemVpdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXVza2xpbmd6ZWl0PC9OSUNLPgotPEJMVVJCPkF1c2tsaW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRhaGRzci1nK3QtY29udHJvbDo6RWluc2Nod2luZ3plaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVpbnNjaHdpbmd6ZWl0PC9OSUNLPgotPEJMVVJCPkVpbnNjaHdpbmd6ZWl0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWcrdC1jb250cm9sOjpIYWx0ZXdlcnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5IYWx0ZXdlcnQ8L05JQ0s+Ci08QkxVUkI+SGFsdGV3ZXJ0LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWcrdC1jb250cm9sOjpIYWx0ZXplaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhhbHRlemVpdDwvTklDSz4KLTxCTFVSQj5IYWx0ZXplaXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kYWhkc3ItZyt0LWNvbnRyb2w6OlZlcnotLWdlcnVuZ3N6ZWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WZXJ6LS1nZXJ1bmdzemVpdDwvTklDSz4KLTxCTFVSQj5WZXJ6LS1nZXJ1bmdzemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRhaGRzci1jZyt0LWNvbnRyb2w6OkFia2xpbmd6ZWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BYmtsaW5nemVpdDwvTklDSz4KLTxCTFVSQj5BYmtsaW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRhaGRzci1jZyt0LWNvbnRyb2w6OkF1c2tsaW5nemVpdDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXVza2xpbmd6ZWl0PC9OSUNLPgotPEJMVVJCPkF1c2tsaW5nemVpdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWRhaGRzci1jZyt0LWNvbnRyb2w6OkF1c2wtLXNlcjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkF1c2wtLXNlcjwvTklDSz4KLTxCTFVSQj5BdXNsLS1zZXIuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWNnK3QtY29udHJvbDo6RWluc2Nod2luZ3plaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVpbnNjaHdpbmd6ZWl0PC9OSUNLPgotPEJMVVJCPkVpbnNjaHdpbmd6ZWl0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWNnK3QtY29udHJvbDo6R2F0dGVyPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+R2F0dGVyPC9OSUNLPgotPEJMVVJCPkdhdHRlci48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kYWhkc3ItY2crdC1jb250cm9sOjpIYWx0ZXdlcnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5IYWx0ZXdlcnQ8L05JQ0s+Ci08QkxVUkI+SGFsdGV3ZXJ0LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWNnK3QtY29udHJvbDo6SGFsdGV6ZWl0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5IYWx0ZXplaXQ8L05JQ0s+Ci08QkxVUkI+SGFsdGV6ZWl0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZGFoZHNyLWNnK3QtY29udHJvbDo6VmVyei0tZ2VydW5nc3plaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZlcnotLWdlcnVuZ3N6ZWl0PC9OSUNLPgotPEJMVVJCPlZlcnotLWdlcnVuZ3N6ZWl0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3luYy1TYXctVkNPOjpFeHAtRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkV4cC1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkV4cC1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3luYy1TYXctVkNPOjpMUC1maWx0ZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MUC1maWx0ZXI8L05JQ0s+Ci08QkxVUkI+TFAtZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVNhdy1WQ086Okxpbi1GTS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TGluLUZNLWdhaW48L05JQ0s+Ci08QkxVUkI+TGluLUZNLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVNhdy1WQ086Ok9jdGF2ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Wy00LDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+T2N0YXZlPC9OSUNLPgotPEJMVVJCPk9jdGF2ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN5bmMtU2F3LVZDTzo6VHVuZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlR1bmU8L05JQ0s+Ci08QkxVUkI+VHVuZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN5bmMtUmVjdC1WQ086OkV4cC1GTS1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RXhwLUZNLWdhaW48L05JQ0s+Ci08QkxVUkI+RXhwLUZNLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVJlY3QtVkNPOjpMUC1maWx0ZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MUC1maWx0ZXI8L05JQ0s+Ci08QkxVUkI+TFAtZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVJlY3QtVkNPOjpMaW4tRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxpbi1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkxpbi1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3luYy1SZWN0LVZDTzo6T2N0YXZlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bLTQsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5PY3RhdmU8L05JQ0s+Ci08QkxVUkI+T2N0YXZlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3luYy1SZWN0LVZDTzo6VHVuZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlR1bmU8L05JQ0s+Ci08QkxVUkI+VHVuZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN5bmMtUmVjdC1WQ086OldNb2QtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldNb2QtZ2FpbjwvTklDSz4KLTxCTFVSQj5XTW9kLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVJlY3QtVkNPOjpXYXZlZm9ybTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XYXZlZm9ybTwvTklDSz4KLTxCTFVSQj5XYXZlZm9ybS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN5bmMtVHJpLVZDTzo6RXhwLUZNLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5FeHAtRk0tZ2FpbjwvTklDSz4KLTxCTFVSQj5FeHAtRk0tZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN5bmMtVHJpLVZDTzo6TFAtZmlsdGVyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TFAtZmlsdGVyPC9OSUNLPgotPEJMVVJCPkxQLWZpbHRlci48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3luYy1UcmktVkNPOjpMaW4tRk0tZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxpbi1GTS1nYWluPC9OSUNLPgotPEJMVVJCPkxpbi1GTS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3luYy1UcmktVkNPOjpPY3RhdmU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlstNCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk9jdGF2ZTwvTklDSz4KLTxCTFVSQj5PY3RhdmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVRyaS1WQ086OlR1bmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UdW5lPC9OSUNLPgotPEJMVVJCPlR1bmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVRyaS1WQ086OldNb2QtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldNb2QtZ2FpbjwvTklDSz4KLTxCTFVSQj5XTW9kLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TeW5jLVRyaS1WQ086OldhdmVmb3JtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldhdmVmb3JtPC9OSUNLPgotPEJMVVJCPldhdmVmb3JtLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYnd4b3Zlci1paXI6OkN1dG9mZi1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMTk4NDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q3V0b2ZmLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DdXRvZmYtRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4zNiwxMTk1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYnd4b3Zlci1paXI6OlJlc29uYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDEsNDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw3NTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1idXR0bG93LWlpcjo6Q3V0b2ZmLUZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw0MSwxOTg0NV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DdXRvZmYtRnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkN1dG9mZi1GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjM2LDExOTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1idXR0bG93LWlpcjo6UmVzb25hbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEsMSw0MV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNvbmFuY2U8L05JQ0s+Ci08QkxVUkI+UmVzb25hbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDc1NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWJ1dHRoaWdoLWlpcjo6Q3V0b2ZmLUZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw0MSwxOTg0NV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DdXRvZmYtRnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkN1dG9mZi1GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjM2LDExOTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1idXR0aGlnaC1paXI6OlJlc29uYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDEsNDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw3NTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNocGYtMTo6RXhwLUZNLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RXhwLUZNLWdhaW48L05JQ0s+Ci08QkxVUkI+RXhwLUZNLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNocGYtMTo6RnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNiw2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1NdmNocGYtMTo6SW5wdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTYwLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPklucHV0LWdhaW48L05JQ0s+Ci08QkxVUkI+SW5wdXQtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLU12Y2hwZi0xOjpPdXRwdXQtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTE1LDE1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk91dHB1dC1nYWluPC9OSUNLPgotPEJMVVJCPk91dHB1dC1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJhY2tlci1nYWFjZGNpYS1vYTo6QXR0YWNrLVJhdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXR0YWNrLVJhdGU8L05JQ0s+Ci08QkxVUkI+QXR0YWNrLVJhdGUuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyYWNrZXItZ2FhY2RjaWEtb2E6OkF0dGFjay1SYXRlLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXR0YWNrLVJhdGUtMTwvTklDSz4KLTxCTFVSQj5BdHRhY2stUmF0ZS0xLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmFja2VyLWdhYWNkY2lhLW9hOjpEZWNheS1SYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDkxODc1LDIyMDUwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlY2F5LVJhdGU8L05JQ0s+Ci08QkxVUkI+RGVjYXktUmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MTAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJhY2tlci1nYWFjZGNpYS1vYTo6RGVjYXktUmF0ZS0xPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDkxODc1LDIyMDUwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlY2F5LVJhdGUtMTwvTklDSz4KLTxCTFVSQj5EZWNheS1SYXRlLTEuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1kb3VibGVyOjpEcnktTGVmdC1Qb3NpdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZWZ0LVBvc2l0aW9uPC9OSUNLPgotPEJMVVJCPkRyeS1MZWZ0LVBvc2l0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWRvdWJsZXI6OkRyeS1MZXZlbC0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LUxldmVsLS1kQi08L05JQ0s+Ci08QkxVUkI+RHJ5LUxldmVsLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZG91Ymxlcjo6RHJ5LVJpZ2h0LVBvc2l0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LVJpZ2h0LVBvc2l0aW9uPC9OSUNLPgotPEJMVVJCPkRyeS1SaWdodC1Qb3NpdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1kb3VibGVyOjpQaXRjaC1UcmFja2luZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlBpdGNoLVRyYWNraW5nPC9OSUNLPgotPEJMVVJCPlBpdGNoLVRyYWNraW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZG91Ymxlcjo6VGltZS1UcmFja2luZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRpbWUtVHJhY2tpbmc8L05JQ0s+Ci08QkxVUkI+VGltZS1UcmFja2luZy48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWRvdWJsZXI6OldldC1MZWZ0LVBvc2l0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2V0LUxlZnQtUG9zaXRpb248L05JQ0s+Ci08QkxVUkI+V2V0LUxlZnQtUG9zaXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZG91Ymxlcjo6V2V0LUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XZXQtTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5XZXQtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1kb3VibGVyOjpXZXQtUmlnaHQtUG9zaXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XZXQtUmlnaHQtUG9zaXRpb248L05JQ0s+Ci08QkxVUkI+V2V0LVJpZ2h0LVBvc2l0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYW1wLWdjaWEtb2E6OlZlcnN0LS1ya3VuZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTk2LDk2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZlcnN0LS1ya3VuZzwvTklDSz4KLTxCTFVSQj5WZXJzdC0tcmt1bmcuPC9CTFVSQj4KLTxERUZBVUxUPi05NjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjE2OjpDbG9zZWQtR2F0ZS1WYWx1ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DbG9zZWQtR2F0ZS1WYWx1ZTwvTklDSz4KLTxCTFVSQj5DbG9zZWQtR2F0ZS1WYWx1ZS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMTY6Okxvb3AtU3RlcHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDE2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvb3AtU3RlcHM8L05JQ0s+Ci08QkxVUkI+TG9vcC1TdGVwcy48L0JMVVJCPgotPERFRkFVTFQ+MTY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6UmVzZXQtdG8tVmFsdWUtb24tR2F0ZS1DbG9zZS08L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzZXQtdG8tVmFsdWUtb24tR2F0ZS1DbG9zZS08L05JQ0s+Ci08QkxVUkI+UmVzZXQtdG8tVmFsdWUtb24tR2F0ZS1DbG9zZS0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6VmFsdWUtU3RlcC0wPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjE2OjpWYWx1ZS1TdGVwLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMTY6OlZhbHVlLVN0ZXAtMTA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTEwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6VmFsdWUtU3RlcC0xMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTExPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTEuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjE2OjpWYWx1ZS1TdGVwLTEyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xMi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMTY6OlZhbHVlLVN0ZXAtMTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTEzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6VmFsdWUtU3RlcC0xNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTE0PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjE2OjpWYWx1ZS1TdGVwLTE1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xNS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMTY6OlZhbHVlLVN0ZXAtMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6VmFsdWUtU3RlcC0zPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjE2OjpWYWx1ZS1TdGVwLTQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC00PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMTY6OlZhbHVlLVN0ZXAtNTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC01LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6VmFsdWUtU3RlcC02PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTYuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjE2OjpWYWx1ZS1TdGVwLTc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC03PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMTY6OlZhbHVlLVN0ZXAtODwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC04LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIxNjo6VmFsdWUtU3RlcC05PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjMjo6QXR0YWNrLXRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIsNDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkF0dGFjay10aW1lPC9OSUNLPgotPEJMVVJCPkF0dGFjay10aW1lLjwvQkxVUkI+Ci08REVGQVVMVD4xMDEsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjMjo6S25lZS1yYWRpdXM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+S25lZS1yYWRpdXM8L05JQ0s+Ci08QkxVUkI+S25lZS1yYWRpdXMuPC9CTFVSQj4KLTxERUZBVUxUPjMsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzI6Ok1ha2V1cC1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1ha2V1cC1nYWluPC9OSUNLPgotPEJMVVJCPk1ha2V1cC1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2MyOjpSYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SYXRpbzwvTklDSz4KLTxCTFVSQj5SYXRpby48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjMjo6UmVsZWFzZS10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyLDgwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZWxlYXNlLXRpbWU8L05JQ0s+Ci08QkxVUkI+UmVsZWFzZS10aW1lLjwvQkxVUkI+Ci08REVGQVVMVD40MDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzI6OlRocmVzaG9sZC1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTMwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGhyZXNob2xkLWxldmVsPC9OSUNLPgotPEJMVVJCPlRocmVzaG9sZC1sZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWR5c29uQ29tcHJlc3M6OkNvbXByZXNzaW9uLXJhdGlvPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q29tcHJlc3Npb24tcmF0aW88L05JQ0s+Ci08QkxVUkI+Q29tcHJlc3Npb24tcmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWR5c29uQ29tcHJlc3M6OkZhc3QtY29tcHJlc3Npb24tcmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GYXN0LWNvbXByZXNzaW9uLXJhdGlvPC9OSUNLPgotPEJMVVJCPkZhc3QtY29tcHJlc3Npb24tcmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWR5c29uQ29tcHJlc3M6OlBlYWstbGltaXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0zMCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlBlYWstbGltaXQ8L05JQ0s+Ci08QkxVUkI+UGVhay1saW1pdC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWR5c29uQ29tcHJlc3M6OlJlbGVhc2UtdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlbGVhc2UtdGltZTwvTklDSz4KLTxCTFVSQj5SZWxlYXNlLXRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1kZWNheTo6RGVjYXktVGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVjYXktVGltZTwvTklDSz4KLTxCTFVSQj5EZWNheS1UaW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYWxpYXM6OkFsaWFzaW5nLWxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QWxpYXNpbmctbGV2ZWw8L05JQ0s+Ci08QkxVUkI+QWxpYXNpbmctbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6OkN5Y2xlLUxlbmd0aC1PdXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5DeWNsZS1MZW5ndGgtT3V0PC9OSUNLPgotPEJMVVJCPkN5Y2xlLUxlbmd0aC1PdXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6OkRyeS1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS1MZXZlbDwvTklDSz4KLTxCTFVSQj5EcnktTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6OkZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6OkZyZWUtU2FtcGxlLU1lbTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkZyZWUtU2FtcGxlLU1lbTwvTklDSz4KLTxCTFVSQj5GcmVlLVNhbXBsZS1NZW0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6Okxvb3AtTGVuZ3RoLU91dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkxvb3AtTGVuZ3RoLU91dDwvTklDSz4KLTxCTFVSQj5Mb29wLUxlbmd0aC1PdXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6Okxvb3AtUG9zaXRpb24tT3V0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+TG9vcC1Qb3NpdGlvbi1PdXQ8L05JQ0s+Ci08QkxVUkI+TG9vcC1Qb3NpdGlvbi1PdXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6Ok11bHRpLUNvbnRyb2w8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEyN108L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NdWx0aS1Db250cm9sPC9OSUNLPgotPEJMVVJCPk11bHRpLUNvbnRyb2wuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6Ok11bHRpQ3RybC0xMHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk11bHRpQ3RybC0xMHM8L05JQ0s+Ci08QkxVUkI+TXVsdGlDdHJsLTEwcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNvb3Blckxvb3Blcjo6UXVhbnRpemVNb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48PSBHX01JTklOVDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlF1YW50aXplTW9kZTwvTklDSz4KLTxCTFVSQj5RdWFudGl6ZU1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPi0yMTQ3NDgzNjQ4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU29vcGVyTG9vcGVyOjpSYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJhdGU8L05JQ0s+Ci08QkxVUkI+UmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+LTQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Tb29wZXJMb29wZXI6OlJlZG9UYXBNb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48PSBHX01JTklOVDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlZG9UYXBNb2RlPC9OSUNLPgotPEJMVVJCPlJlZG9UYXBNb2RlLjwvQkxVUkI+Ci08REVGQVVMVD4tMjE0NzQ4MzY0ODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNvb3Blckxvb3Blcjo6Um91bmRNb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48PSBHX01JTklOVDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJvdW5kTW9kZTwvTklDSz4KLTxCTFVSQj5Sb3VuZE1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPi0yMTQ3NDgzNjQ4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU29vcGVyTG9vcGVyOjpTY3JhdGNoLURlc3RpbmF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U2NyYXRjaC1EZXN0aW5hdGlvbjwvTklDSz4KLTxCTFVSQj5TY3JhdGNoLURlc3RpbmF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU29vcGVyTG9vcGVyOjpTdGF0ZS1PdXRwdXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlN0YXRlLU91dHB1dDwvTklDSz4KLTxCTFVSQj5TdGF0ZS1PdXRwdXQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNvb3Blckxvb3Blcjo6VGFwLURlbGF5LVRyaWdnZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UYXAtRGVsYXktVHJpZ2dlcjwvTklDSz4KLTxCTFVSQj5UYXAtRGVsYXktVHJpZ2dlci48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNvb3Blckxvb3Blcjo6VG90YWwtU2FtcGxlLU1lbTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlRvdGFsLVNhbXBsZS1NZW08L05JQ0s+Ci08QkxVUkI+VG90YWwtU2FtcGxlLU1lbS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNvb3Blckxvb3Blcjo6VHJpZ2dlci1UaHJlc2hvbGQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UcmlnZ2VyLVRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5UcmlnZ2VyLVRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNvb3Blckxvb3Blcjo6V2V0LUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2V0LUxldmVsPC9OSUNLPgotPEJMVVJCPldldC1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZsZXZlbC1tb25vOjpDdXJyZW50LU11bHRpcGxpZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkN1cnJlbnQtTXVsdGlwbGllcjwvTklDSz4KLTxCTFVSQj5DdXJyZW50LU11bHRpcGxpZXIuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12bGV2ZWwtbW9ubzo6TG9vay1haGVhZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvb2stYWhlYWQ8L05JQ0s+Ci08QkxVUkI+TG9vay1haGVhZC48L0JMVVJCPgotPERFRkFVTFQ+Miw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLW1vbm86Ok1heGltdW0tTXVsdGlwbGllcjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXhpbXVtLU11bHRpcGxpZXI8L05JQ0s+Ci08QkxVUkI+TWF4aW11bS1NdWx0aXBsaWVyLjwvQkxVUkI+Ci08REVGQVVMVD4xMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZsZXZlbC1tb25vOjpTdHJlbmd0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0cmVuZ3RoPC9OSUNLPgotPEJMVVJCPlN0cmVuZ3RoLjwvQkxVUkI+Ci08REVGQVVMVD4wLDc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLW1vbm86OlVuZG88L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5VbmRvPC9OSUNLPgotPEJMVVJCPlVuZG8uPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLW1vbm86OlVzZS1NYXhpbXVtLU11bHRpcGxpZXI8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Vc2UtTWF4aW11bS1NdWx0aXBsaWVyPC9OSUNLPgotPEJMVVJCPlVzZS1NYXhpbXVtLU11bHRpcGxpZXIuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLXN0ZXJlbzo6Q3VycmVudC1NdWx0aXBsaWVyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDIwXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5DdXJyZW50LU11bHRpcGxpZXI8L05JQ0s+Ci08QkxVUkI+Q3VycmVudC1NdWx0aXBsaWVyLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLXN0ZXJlbzo6TG9vay1haGVhZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvb2stYWhlYWQ8L05JQ0s+Ci08QkxVUkI+TG9vay1haGVhZC48L0JMVVJCPgotPERFRkFVTFQ+Miw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLXN0ZXJlbzo6TWF4aW11bS1NdWx0aXBsaWVyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1heGltdW0tTXVsdGlwbGllcjwvTklDSz4KLTxCTFVSQj5NYXhpbXVtLU11bHRpcGxpZXIuPC9CTFVSQj4KLTxERUZBVUxUPjEwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLXN0ZXJlbzo6U3RyZW5ndGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdHJlbmd0aDwvTklDSz4KLTxCTFVSQj5TdHJlbmd0aC48L0JMVVJCPgotPERFRkFVTFQ+MCw3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZsZXZlbC1zdGVyZW86OlVuZG88L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5VbmRvPC9OSUNLPgotPEJMVVJCPlVuZG8uPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdmxldmVsLXN0ZXJlbzo6VXNlLU1heGltdW0tTXVsdGlwbGllcjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlVzZS1NYXhpbXVtLU11bHRpcGxpZXI8L05JQ0s+Ci08QkxVUkI+VXNlLU1heGltdW0tTXVsdGlwbGllci48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hcnRpZmljaWFsTGF0ZW5jeTo6RGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjI1MDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hcnRpZmljaWFsTGF0ZW5jeTo6bGF0ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGF0ZW5jeTwvTklDSz4KLTxCTFVSQj5sYXRlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmlwbGVQYXJhOjpCYW5kLTEtYmFuZHdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0xLWJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5CYW5kLTEtYmFuZHdpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpcGxlUGFyYTo6QmFuZC0xLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw0MSwyMTYwOV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkJhbmQtMS1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjM2LDg5Njc8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmlwbGVQYXJhOjpCYW5kLTEtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMS1nYWluPC9OSUNLPgotPEJMVVJCPkJhbmQtMS1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpcGxlUGFyYTo6QmFuZC0yLWJhbmR3aWR0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMi1iYW5kd2lkdGg8L05JQ0s+Ci08QkxVUkI+QmFuZC0yLWJhbmR3aWR0aC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaXBsZVBhcmE6OkJhbmQtMi1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMjE2MDldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0yLWZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5CYW5kLTItZnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4zMDgsNzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaXBsZVBhcmE6OkJhbmQtMi1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0yLWdhaW48L05JQ0s+Ci08QkxVUkI+QmFuZC0yLWdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmlwbGVQYXJhOjpCYW5kLTMtYmFuZHdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0zLWJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5CYW5kLTMtYmFuZHdpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpcGxlUGFyYTo6QmFuZC0zLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw0MSwyMTYwOV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTMtZnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkJhbmQtMy1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjI1ODIsNzc8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10cmlwbGVQYXJhOjpCYW5kLTMtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMy1nYWluPC9OSUNLPgotPEJMVVJCPkJhbmQtMy1nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpcGxlUGFyYTo6SGlnaC1zaGVsdmluZy1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMjE2MDldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SGlnaC1zaGVsdmluZy1mcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+SGlnaC1zaGVsdmluZy1mcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjIxNjA5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpcGxlUGFyYTo6SGlnaC1zaGVsdmluZy1nYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SGlnaC1zaGVsdmluZy1nYWluPC9OSUNLPgotPEJMVVJCPkhpZ2gtc2hlbHZpbmctZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaXBsZVBhcmE6OkhpZ2gtc2hlbHZpbmctc2xvcGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5IaWdoLXNoZWx2aW5nLXNsb3BlPC9OSUNLPgotPEJMVVJCPkhpZ2gtc2hlbHZpbmctc2xvcGUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaXBsZVBhcmE6Okxvdy1zaGVsdmluZy1mcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMjE2MDldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TG93LXNoZWx2aW5nLWZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5Mb3ctc2hlbHZpbmctZnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD40LDQxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdHJpcGxlUGFyYTo6TG93LXNoZWx2aW5nLWdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwzMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Mb3ctc2hlbHZpbmctZ2FpbjwvTklDSz4KLTxCTFVSQj5Mb3ctc2hlbHZpbmctZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRyaXBsZVBhcmE6Okxvdy1zaGVsdmluZy1zbG9wZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvdy1zaGVsdmluZy1zbG9wZTwvTklDSz4KLTxCTFVSQj5Mb3ctc2hlbHZpbmctc2xvcGUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJldmRlbGF5OjpDcm9zc2ZhZGUtc2FtcGxlczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Dcm9zc2ZhZGUtc2FtcGxlczwvTklDSz4KLTxCTFVSQj5Dcm9zc2ZhZGUtc2FtcGxlcy48L0JMVVJCPgotPERFRkFVTFQ+MTI1MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJldmRlbGF5OjpEZWxheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVsYXktVGltZTwvTklDSz4KLTxCTFVSQj5EZWxheS1UaW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcmV2ZGVsYXk6OkRyeS1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LUxldmVsPC9OSUNLPgotPEJMVVJCPkRyeS1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXJldmRlbGF5OjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPkZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcmV2ZGVsYXk6OldldC1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+V2V0LUxldmVsPC9OSUNLPgotPEJMVVJCPldldC1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtMS1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQwLDI4MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtRnJlcS0tSHotPC9OSUNLPgotPEJMVVJCPkJhbmQtMS1GcmVxLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtMS1HYWluLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy01MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEtR2Fpbi0tZEItPC9OSUNLPgotPEJMVVJCPkJhbmQtMS1HYWluLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyOjpCYW5kLTItRnJlcS0tSHotPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxMDAsNTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMi1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC0yLUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MjAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplcjo6QmFuZC0yLUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMi1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC0yLUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtMy1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwMCwxMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMy1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC0zLUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+NDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplcjo6QmFuZC0zLUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMy1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC0zLUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtNC1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQwMCwyODAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNC1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC00LUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MTAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtNC1HYWluLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy01MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTQtR2Fpbi0tZEItPC9OSUNLPgotPEJMVVJCPkJhbmQtNC1HYWluLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyOjpCYW5kLTUtRnJlcS0tSHotPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxMDAwLDUwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC01LUZyZXEtLUh6LTwvTklDSz4KLTxCTFVSQj5CYW5kLTUtRnJlcS0tSHotLjwvQkxVUkI+Ci08REVGQVVMVD4zMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplcjo6QmFuZC01LUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNS1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC01LUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtNi1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzMwMDAsOTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTYtRnJlcS0tSHotPC9OSUNLPgotPEJMVVJCPkJhbmQtNi1GcmVxLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjYwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyOjpCYW5kLTYtR2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC02LUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5CYW5kLTYtR2Fpbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplcjo6QmFuZC03LUZyZXEtLUh6LTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNjAwMCwxODAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTctRnJlcS0tSHotPC9OSUNLPgotPEJMVVJCPkJhbmQtNy1GcmVxLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjEyMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWVxdWFsaXplcjo6QmFuZC03LUdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTUwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNy1HYWluLS1kQi08L05JQ0s+Ci08QkxVUkI+QmFuZC03LUdhaW4tLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1lcXVhbGl6ZXI6OkJhbmQtOC1GcmVxLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEwMDAwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtOC1GcmVxLS1Iei08L05JQ0s+Ci08QkxVUkI+QmFuZC04LUZyZXEtLUh6LS48L0JMVVJCPgotPERFRkFVTFQ+MTUwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZXF1YWxpemVyOjpCYW5kLTgtR2Fpbi0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC04LUdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5CYW5kLTgtR2Fpbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcmV0cm9GbGFuZ2U6OkF2ZXJhZ2Utc3RhbGw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXZlcmFnZS1zdGFsbDwvTklDSz4KLTxCTFVSQj5BdmVyYWdlLXN0YWxsLjwvQkxVUkI+Ci08REVGQVVMVD4yLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1yZXRyb0ZsYW5nZTo6RmxhbmdlLWZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1LDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmxhbmdlLWZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5GbGFuZ2UtZnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1iaXNvbmljcy1tb25vLXBhbm5lcjo6QXppbXV0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTE4MCwxODBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QXppbXV0aDwvTklDSz4KLTxCTFVSQj5BemltdXRoLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1iaXNvbmljcy1tb25vLXBhbm5lcjo6RWxldmF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsOTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RWxldmF0aW9uPC9OSUNLPgotPEJMVVJCPkVsZXZhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtYmlzb25pY3Mtc3Rlcm8tcGFubmVyOjpBemltdXRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMTgwLDE4MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BemltdXRoPC9OSUNLPgotPEJMVVJCPkF6aW11dGguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbWJpc29uaWNzLXN0ZXJvLXBhbm5lcjo6RWxldmF0aW9uPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstOTAsOTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RWxldmF0aW9uPC9OSUNLPgotPEJMVVJCPkVsZXZhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtYmlzb25pY3Mtc3Rlcm8tcGFubmVyOjpXaWR0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTkwLDkwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPldpZHRoPC9OSUNLPgotPEJMVVJCPldpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD45MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtYmlzb25pY3Mtcm90YXRvcjo6QW5nbGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xODAsMTgwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkFuZ2xlPC9OSUNLPgotPEJMVVJCPkFuZ2xlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1iaXNvbmljcy1zcXVhcmUtZGVjb2Rlcjo6RGlzdGFuY2U8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMzBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGlzdGFuY2U8L05JQ0s+Ci08QkxVUkI+RGlzdGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjMwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1iaXNvbmljcy1zcXVhcmUtZGVjb2Rlcjo6RnJvbnQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Gcm9udDwvTklDSz4KLTxCTFVSQj5Gcm9udC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbWJpc29uaWNzLXNxdWFyZS1kZWNvZGVyOjpMRi1yYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxGLXJhdGlvPC9OSUNLPgotPEJMVVJCPkxGLXJhdGlvLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1iaXNvbmljcy1oZXhhZ29uLWRlY29kZXI6OkRpc3RhbmNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRpc3RhbmNlPC9OSUNLPgotPEJMVVJCPkRpc3RhbmNlLjwvQkxVUkI+Ci08REVGQVVMVD4zMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtYmlzb25pY3MtaGV4YWdvbi1kZWNvZGVyOjpGcm9udDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyb250PC9OSUNLPgotPEJMVVJCPkZyb250LjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtYmlzb25pY3MtaGV4YWdvbi1kZWNvZGVyOjpMRi1yYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxGLXJhdGlvPC9OSUNLPgotPEJMVVJCPkxGLXJhdGlvLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRzJyZXZlcmI6OkRhbXBpbmc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EYW1waW5nPC9OSUNLPgotPEJMVVJCPkRhbXBpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1HMnJldmVyYjo6RHJ5LXNvdW5kPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstODAsMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Ecnktc291bmQ8L05JQ0s+Ci08QkxVUkI+RHJ5LXNvdW5kLjwvQkxVUkI+Ci08REVGQVVMVD4tODA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1HMnJldmVyYjo6SW5wdXQtQlc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbnB1dC1CVzwvTklDSz4KLTxCTFVSQj5JbnB1dC1CVy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUcycmV2ZXJiOjpSZWZsZWN0aW9uczwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTgwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVmbGVjdGlvbnM8L05JQ0s+Ci08QkxVUkI+UmVmbGVjdGlvbnMuPC9CTFVSQj4KLTxERUZBVUxUPi04MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUcycmV2ZXJiOjpSZXZlcmItdGFpbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTgwLDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmV2ZXJiLXRhaWw8L05JQ0s+Ci08QkxVUkI+UmV2ZXJiLXRhaWwuPC9CTFVSQj4KLTxERUZBVUxUPi04MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUcycmV2ZXJiOjpSZXZlcmItdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXZlcmItdGltZTwvTklDSz4KLTxCTFVSQj5SZXZlcmItdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUcycmV2ZXJiOjpSb29tLXNpemU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEwLDE1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Sb29tLXNpemU8L05JQ0s+Ci08QkxVUkI+Um9vbS1zaXplLjwvQkxVUkI+Ci08REVGQVVMVD4xMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWFtUGl0Y2hzaGlmdDo6QnVmZmVyLXNpemU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDddPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QnVmZmVyLXNpemU8L05JQ0s+Ci08QkxVUkI+QnVmZmVyLXNpemUuPC9CTFVSQj4KLTxERUZBVUxUPjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbVBpdGNoc2hpZnQ6OlBpdGNoLXNoaWZ0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDI1LDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UGl0Y2gtc2hpZnQ8L05JQ0s+Ci08QkxVUkI+UGl0Y2gtc2hpZnQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1hbVBpdGNoc2hpZnQ6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbW9kRGVsYXk6OkJhc2UtZGVsYXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYXNlLWRlbGF5PC9OSUNLPgotPEJMVVJCPkJhc2UtZGVsYXkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtYXV0b3Bhbjo6RGVwdGgtLS0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZXB0aC0tLS08L05JQ0s+Ci08QkxVUkI+RGVwdGgtLS0tLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWF1dG9wYW46OkZyZXF1ZW5jeS0tSHotPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS0tSHotPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS0tSHotLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWF1dG9wYW46OkdhaW4tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTcwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkdhaW4tLWRCLTwvTklDSz4KLTxCTFVSQj5HYWluLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1yYXRlU2hpZnRlcjo6UmF0ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SYXRlPC9OSUNLPgotPEJMVVJCPlJhdGUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1GaWx0ZXI6OkZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMTAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1GaWx0ZXI6OkluZXJ0aWE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzUsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkluZXJ0aWE8L05JQ0s+Ci08QkxVUkI+SW5lcnRpYS48L0JMVVJCPgotPERFRkFVTFQ+NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUZpbHRlcjo6TW9kZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb2RlPC9OSUNLPgotPEJMVVJCPk1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1GaWx0ZXI6OlJlc29uYW5jZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw3MDcsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzb25hbmNlPC9OSUNLPgotPEJMVVJCPlJlc29uYW5jZS48L0JMVVJCPgotPERFRkFVTFQ+MCw3MDc8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1GbGFuZ2VyOjpBbW91bnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbW91bnQ8L05JQ0s+Ci08QkxVUkI+QW1vdW50LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRmxhbmdlcjo6RmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0wLDk5LDAsOTldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPi0wLDk5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRmxhbmdlcjo6TWluaW11bS1kZWxheTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1pbmltdW0tZGVsYXk8L05JQ0s+Ci08QkxVUkI+TWluaW11bS1kZWxheS48L0JMVVJCPgotPERFRkFVTFQ+MCwxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRmxhbmdlcjo6TW9kdWxhdGlvbi1kZXB0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRpb24tZGVwdGg8L05JQ0s+Ci08QkxVUkI+TW9kdWxhdGlvbi1kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MCwxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRmxhbmdlcjo6TW9kdWxhdGlvbi1yYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAxLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vZHVsYXRpb24tcmF0ZTwvTklDSz4KLTxCTFVSQj5Nb2R1bGF0aW9uLXJhdGUuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1GbGFuZ2VyOjpSZXNldDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc2V0PC9OSUNLPgotPEJMVVJCPlJlc2V0LjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUZsYW5nZXI6OlN0ZXJlby1waGFzZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzNjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3RlcmVvLXBoYXNlPC9OSUNLPgotPEJMVVJCPlN0ZXJlby1waGFzZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJldmVyYjo6QW1vdW50PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QW1vdW50PC9OSUNLPgotPEJMVVJCPkFtb3VudC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJldmVyYjo6RGVjYXktdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1LDE1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlY2F5LXRpbWU8L05JQ0s+Ci08QkxVUkI+RGVjYXktdGltZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUmV2ZXJiOjpEaWZmdXNpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EaWZmdXNpb248L05JQ0s+Ci08QkxVUkI+RGlmZnVzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUmV2ZXJiOjpIaWdoLUZycS1EYW1wPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyMDAwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkhpZ2gtRnJxLURhbXA8L05JQ0s+Ci08QkxVUkI+SGlnaC1GcnEtRGFtcC48L0JMVVJCPgotPERFRkFVTFQ+MjAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJldmVyYjo6Um9vbS1zaXplPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwzXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJvb20tc2l6ZTwvTklDSz4KLTxCTFVSQj5Sb29tLXNpemUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1WaW50YWdlRGVsYXk6OkFtb3VudDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkFtb3VudDwvTklDSz4KLTxCTFVSQj5BbW91bnQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1WaW50YWdlRGVsYXk6OkZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmVlZGJhY2s8L05JQ0s+Ci08QkxVUkI+RmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1WaW50YWdlRGVsYXk6Ok1lZGl1bTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NZWRpdW08L05JQ0s+Ci08QkxVUkI+TWVkaXVtLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVmludGFnZURlbGF5OjpNaXgtbW9kZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NaXgtbW9kZTwvTklDSz4KLTxCTFVSQj5NaXgtbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZpbnRhZ2VEZWxheTo6U3ViZGl2aWRlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdWJkaXZpZGU8L05JQ0s+Ci08QkxVUkI+U3ViZGl2aWRlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVmludGFnZURlbGF5OjpUZW1wbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMzAsMzAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRlbXBvPC9OSUNLPgotPEJMVVJCPlRlbXBvLjwvQkxVUkI+Ci08REVGQVVMVD4zMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZpbnRhZ2VEZWxheTo6VGltZS1MPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UaW1lLUw8L05JQ0s+Ci08QkxVUkI+VGltZS1MLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVmludGFnZURlbGF5OjpUaW1lLVI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDE2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRpbWUtUjwvTklDSz4KLTxCTFVSQj5UaW1lLVIuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Sb3RhcnlTcGVha2VyOjpTcGVlZC1Nb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlNwZWVkLU1vZGU8L05JQ0s+Ci08QkxVUkI+U3BlZWQtTW9kZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJvdGFyeVNwZWFrZXI6OlRhcC1PZmZzZXQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UYXAtT2Zmc2V0PC9OSUNLPgotPEJMVVJCPlRhcC1PZmZzZXQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Sb3RhcnlTcGVha2VyOjpUYXAtU3BhY2luZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRhcC1TcGFjaW5nPC9OSUNLPgotPEJMVVJCPlRhcC1TcGFjaW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2VyOjpBbW91bnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbW91bnQ8L05JQ0s+Ci08QkxVUkI+QW1vdW50LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2VyOjpDZW50ZXItRnJlcTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMjAsMjAwMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q2VudGVyLUZyZXE8L05JQ0s+Ci08QkxVUkI+Q2VudGVyLUZyZXEuPC9CTFVSQj4KLTxERUZBVUxUPjIwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2VyOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTAsOTksMCw5OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+LTAsOTk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZXI6Ok1vZHVsYXRpb24tZGVwdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTA4MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kdWxhdGlvbi1kZXB0aDwvTklDSz4KLTxCTFVSQj5Nb2R1bGF0aW9uLWRlcHRoLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtcGhhc2VyOjpNb2R1bGF0aW9uLXJhdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDEsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9kdWxhdGlvbi1yYXRlPC9OSUNLPgotPEJMVVJCPk1vZHVsYXRpb24tcmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MCwwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlcjo6UmVzZXQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNldDwvTklDSz4KLTxCTFVSQj5SZXNldC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1waGFzZXI6OlN0ZXJlby1waGFzZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzNjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3RlcmVvLXBoYXNlPC9OSUNLPgotPEJMVVJCPlN0ZXJlby1waGFzZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBoYXNlcjo6cGFyYW0tLS1TdGFnZXM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDEyXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLS0tU3RhZ2VzPC9OSUNLPgotPEJMVVJCPnBhcmFtLS0tU3RhZ2VzLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRXE6OnBhcmFtLTEta0h6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDgsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMS1rSHo8L05JQ0s+Ci08QkxVUkI+cGFyYW0tMS1rSHouPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTo6cGFyYW0tMTI1LUh6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDgsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMTI1LUh6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTEyNS1Iei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxOjpwYXJhbS0xNi1rSHo8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00OCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0xNi1rSHo8L05JQ0s+Ci08QkxVUkI+cGFyYW0tMTYta0h6LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRXE6OnBhcmFtLTIta0h6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDgsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMi1rSHo8L05JQ0s+Ci08QkxVUkI+cGFyYW0tMi1rSHouPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTo6cGFyYW0tMjUwLUh6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDgsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMjUwLUh6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTI1MC1Iei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxOjpwYXJhbS0zMS1IejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTMxLUh6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTMxLUh6LjwvQkxVUkI+Ci08REVGQVVMVD4tMzA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTo6cGFyYW0tNC1rSHo8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00OCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS00LWtIejwvTklDSz4KLTxCTFVSQj5wYXJhbS00LWtIei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxOjpwYXJhbS01MDAtSHo8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00OCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS01MDAtSHo8L05JQ0s+Ci08QkxVUkI+cGFyYW0tNTAwLUh6LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRXE6OnBhcmFtLTYzLUh6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDgsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tNjMtSHo8L05JQ0s+Ci08QkxVUkI+cGFyYW0tNjMtSHouPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTo6cGFyYW0tOC1rSHo8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00OCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS04LWtIejwvTklDSz4KLTxCTFVSQj5wYXJhbS04LWtIei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxMngyOjpwYXJhbS0xLWtIejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTEta0h6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTEta0h6LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRXEyeDI6OnBhcmFtLTEyNS1IejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTEyNS1IejwvTklDSz4KLTxCTFVSQj5wYXJhbS0xMjUtSHouPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTJ4Mjo6cGFyYW0tMTYta0h6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNDgsMjRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMTYta0h6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTE2LWtIei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxMngyOjpwYXJhbS0yLWtIejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTIta0h6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTIta0h6LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRXEyeDI6OnBhcmFtLTI1MC1IejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTI1MC1IejwvTklDSz4KLTxCTFVSQj5wYXJhbS0yNTAtSHouPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTJ4Mjo6cGFyYW0tMzEtSHo8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00OCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0zMS1IejwvTklDSz4KLTxCTFVSQj5wYXJhbS0zMS1Iei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxMngyOjpwYXJhbS00LWtIejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTQta0h6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTQta0h6LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRXEyeDI6OnBhcmFtLTUwMC1IejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTUwMC1IejwvTklDSz4KLTxCTFVSQj5wYXJhbS01MDAtSHouPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1FcTJ4Mjo6cGFyYW0tNjMtSHo8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy00OCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS02My1IejwvTklDSz4KLTxCTFVSQj5wYXJhbS02My1Iei48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUVxMngyOjpwYXJhbS04LWtIejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQ4LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhcmFtLTgta0h6PC9OSUNLPgotPEJMVVJCPnBhcmFtLTgta0h6LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ29tcHJlc3M6OmF0dGFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5hdHRhY2s8L05JQ0s+Ci08QkxVUkI+YXR0YWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wLDAwMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNvbXByZXNzOjpnYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmdhaW48L05JQ0s+Ci08QkxVUkI+Z2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+NjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNvbXByZXNzOjprbmVlLXJhZGl1czwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5rbmVlLXJhZGl1czwvTklDSz4KLTxCTFVSQj5rbmVlLXJhZGl1cy48L0JMVVJCPgotPERFRkFVTFQ+MywyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNvbXByZXNzOjpyYXRpbzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5yYXRpbzwvTklDSz4KLTxCTFVSQj5yYXRpby48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNvbXByZXNzOjpyZWxlYXNlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnJlbGVhc2U8L05JQ0s+Ci08QkxVUkI+cmVsZWFzZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1MDA1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ29tcHJlc3M6OnRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTMwLDQwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50aHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+dGhyZXNob2xkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGFuOjptb25vPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bW9ubzwvTklDSz4KLTxCTFVSQj5tb25vLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhbjo6cGFuPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBhbjwvTklDSz4KLTxCTFVSQj5wYW4uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QYW46OnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMSw0MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50PC9OSUNLPgotPEJMVVJCPnQuPC9CTFVSQj4KLTxERUZBVUxUPjEwLDA3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBhbjo6d2lkdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz53aWR0aDwvTklDSz4KLTxCTFVSQj53aWR0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVByZWFtcElJSTo6Z2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5nYWluPC9OSUNLPgotPEJMVVJCPmdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QcmVhbXBJSUk6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHJlYW1wSUlJOjp0ZW1wZXJhdHVyZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDUsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50ZW1wZXJhdHVyZTwvTklDSz4KLTxCTFVSQj50ZW1wZXJhdHVyZS48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTM3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVByZWFtcElWOjpiYXNzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+YmFzczwvTklDSz4KLTxCTFVSQj5iYXNzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHJlYW1wSVY6OmdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Z2FpbjwvTklDSz4KLTxCTFVSQj5nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHJlYW1wSVY6OmhpPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+aGk8L05JQ0s+Ci08QkxVUkI+aGkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QcmVhbXBJVjo6bGF0ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGF0ZW5jeTwvTklDSz4KLTxCTFVSQj5sYXRlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QcmVhbXBJVjo6bWlkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bWlkPC9OSUNLPgotPEJMVVJCPm1pZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVByZWFtcElWOjp0ZW1wZXJhdHVyZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDUsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50ZW1wZXJhdHVyZTwvTklDSz4KLTxCTFVSQj50ZW1wZXJhdHVyZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1MDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUHJlYW1wSVY6OnRyZWJsZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnRyZWJsZTwvTklDSz4KLTxCTFVSQj50cmVibGUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Ub25lU3RhY2s6OmJhc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5iYXNzPC9OSUNLPgotPEJMVVJCPmJhc3MuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVRvbmVTdGFjazo6bWlkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bWlkPC9OSUNLPgotPEJMVVJCPm1pZC48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVG9uZVN0YWNrOjptb2RlbDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5tb2RlbDwvTklDSz4KLTxCTFVSQj5tb2RlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVRvbmVTdGFjazo6dHJlYmxlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dHJlYmxlPC9OSUNLPgotPEJMVVJCPnRyZWJsZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVG9uZVN0YWNrTFQ6OmJhc3M8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5iYXNzPC9OSUNLPgotPEJMVVJCPmJhc3MuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVRvbmVTdGFja0xUOjptaWQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5taWQ8L05JQ0s+Ci08QkxVUkI+bWlkLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Ub25lU3RhY2tMVDo6dHJlYmxlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dHJlYmxlPC9OSUNLPgotPEJMVVJCPnRyZWJsZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wSUlJOjpkcml2ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZHJpdmU8L05JQ0s+Ci08QkxVUkI+ZHJpdmUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbXBJSUk6OmdhaW48L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Z2FpbjwvTklDSz4KLTxCTFVSQj5nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wSUlJOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcElJSTo6dGVtcGVyYXR1cmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDA1LDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dGVtcGVyYXR1cmU8L05JQ0s+Ci08QkxVUkI+dGVtcGVyYXR1cmUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTAyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcElWOjpiYXNzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMjAsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+YmFzczwvTklDSz4KLTxCTFVSQj5iYXNzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wSVY6OmRyaXZlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kcml2ZTwvTklDSz4KLTxCTFVSQj5kcml2ZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcElWOjpnYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmdhaW48L05JQ0s+Ci08QkxVUkI+Z2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcElWOjpoaTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmhpPC9OSUNLPgotPEJMVVJCPmhpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wSVY6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wSVY6Om1pZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTIwLDIwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPm1pZDwvTklDSz4KLTxCTFVSQj5taWQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbXBJVjo6dGVtcGVyYXR1cmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDA1LDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dGVtcGVyYXR1cmU8L05JQ0s+Ci08QkxVUkI+dGVtcGVyYXR1cmUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTAyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcElWOjp0cmVibGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0yMCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50cmVibGU8L05JQ0s+Ci08QkxVUkI+dHJlYmxlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wVjo6YmFzczwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTksOV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5iYXNzPC9OSUNLPgotPEJMVVJCPmJhc3MuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbXBWOjpkcml2ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZHJpdmU8L05JQ0s+Ci08QkxVUkI+ZHJpdmUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNzUwMDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wVjo6Z2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwzXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmdhaW48L05JQ0s+Ci08QkxVUkI+Z2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcFY6OmxhdGVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPmxhdGVuY3k8L05JQ0s+Ci08QkxVUkI+bGF0ZW5jeS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wVjo6dG9uZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnRvbmU8L05JQ0s+Ci08QkxVUkI+dG9uZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcFY6OndhdHRzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls1LDE1MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz53YXR0czwvTklDSz4KLTxCTFVSQj53YXR0cy48L0JMVVJCPgotPERFRkFVTFQ+NzcsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcFZUUzo6YmFzczwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJhc3M8L05JQ0s+Ci08QkxVUkI+YmFzcy48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wVlRTOjpkcml2ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDAxLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZHJpdmU8L05JQ0s+Ci08QkxVUkI+ZHJpdmUuPC9CTFVSQj4KLTxERUZBVUxUPjAsMjUwMDc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wVlRTOjpnYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDNdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Z2FpbjwvTklDSz4KLTxCTFVSQj5nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4yLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQW1wVlRTOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcFZUUzo6bWlkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bWlkPC9OSUNLPgotPEJMVVJCPm1pZC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUFtcFZUUzo6bW9kZWw8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bW9kZWw8L05JQ0s+Ci08QkxVUkI+bW9kZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbXBWVFM6OnRyZWJsZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnRyZWJsZTwvTklDSz4KLTxCTFVSQj50cmVibGUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1BbXBWVFM6OndhdHRzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz53YXR0czwvTklDSz4KLTxCTFVSQj53YXR0cy48L0JMVVJCPgotPERFRkFVTFQ+MCw3NTAwMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DYWJpbmV0STo6Z2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTI0LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmdhaW48L05JQ0s+Ci08QkxVUkI+Z2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNhYmluZXRJOjptb2RlbDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5tb2RlbDwvTklDSz4KLTxCTFVSQj5tb2RlbC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNhYmluZXRJSTo6Z2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTI0LDI0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmdhaW48L05JQ0s+Ci08QkxVUkI+Z2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNhYmluZXRJSTo6bW9kZWw8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bW9kZWw8L05JQ0s+Ci08QkxVUkI+bW9kZWwuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DbGlwOjpnYWluPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzIsNzJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Z2FpbjwvTklDSz4KLTxCTFVSQj5nYWluLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2xpcDo6bGF0ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+bGF0ZW5jeTwvTklDSz4KLTxCTFVSQj5sYXRlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXNJOjpibGVuZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJsZW5kPC9OSUNLPgotPEJMVVJCPmJsZW5kLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzSTo6ZmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mZWVkYmFjazwvTklDSz4KLTxCTFVSQj5mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1c0k6OmZlZWRmb3J3YXJkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZmVlZGZvcndhcmQ8L05JQ0s+Ci08QkxVUkI+ZmVlZGZvcndhcmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXNJOjpyYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cmF0ZTwvTklDSz4KLTxCTFVSQj5yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4xLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzSTo6dDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiw1LDQwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnQ8L05JQ0s+Ci08QkxVUkI+dC48L0JMVVJCPgotPERFRkFVTFQ+NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1c0k6OndpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDUsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+d2lkdGg8L05JQ0s+Ci08QkxVUkI+d2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TdGVyZW9DaG9ydXNJOjpibGVuZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJsZW5kPC9OSUNLPgotPEJMVVJCPmJsZW5kLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3RlcmVvQ2hvcnVzSTo6ZmVlZGJhY2s8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mZWVkYmFjazwvTklDSz4KLTxCTFVSQj5mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN0ZXJlb0Nob3J1c0k6OmZlZWRmb3J3YXJkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZmVlZGZvcndhcmQ8L05JQ0s+Ci08QkxVUkI+ZmVlZGZvcndhcmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TdGVyZW9DaG9ydXNJOjpwaGFzZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBoYXNlPC9OSUNLPgotPEJMVVJCPnBoYXNlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3RlcmVvQ2hvcnVzSTo6cmF0ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnJhdGU8L05JQ0s+Ci08QkxVUkI+cmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MSwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN0ZXJlb0Nob3J1c0k6OnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIsNSw0MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50PC9OSUNLPgotPEJMVVJCPnQuPC9CTFVSQj4KLTxERUZBVUxUPjIsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN0ZXJlb0Nob3J1c0k6OndpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDUsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+d2lkdGg8L05JQ0s+Ci08QkxVUkI+d2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXNJSTo6YmxlbmQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5ibGVuZDwvTklDSz4KLTxCTFVSQj5ibGVuZC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1c0lJOjpmZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPmZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzSUk6OmZlZWRmb3J3YXJkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZmVlZGZvcndhcmQ8L05JQ0s+Ci08QkxVUkI+ZmVlZGZvcndhcmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DaG9ydXNJSTo6cmF0ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnJhdGU8L05JQ0s+Ci08QkxVUkI+cmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNob3J1c0lJOjp0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyLDUsNDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dDwvTklDSz4KLTxCTFVSQj50LjwvQkxVUkI+Ci08REVGQVVMVD41PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2hvcnVzSUk6OndpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDUsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+d2lkdGg8L05JQ0s+Ci08QkxVUkI+d2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TdGVyZW9DaG9ydXNJSTo6YmxlbmQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5ibGVuZDwvTklDSz4KLTxCTFVSQj5ibGVuZC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN0ZXJlb0Nob3J1c0lJOjpmZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPmZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3RlcmVvQ2hvcnVzSUk6OmZlZWRmb3J3YXJkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZmVlZGZvcndhcmQ8L05JQ0s+Ci08QkxVUkI+ZmVlZGZvcndhcmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN0ZXJlb0Nob3J1c0lJOjpyYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cmF0ZTwvTklDSz4KLTxCTFVSQj5yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3RlcmVvQ2hvcnVzSUk6OnQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIsNSw0MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50PC9OSUNLPgotPEJMVVJCPnQuPC9CTFVSQj4KLTxERUZBVUxUPjExLDg3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN0ZXJlb0Nob3J1c0lJOjp3aWR0aDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1LDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPndpZHRoPC9OSUNLPgotPEJMVVJCPndpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4yLDg3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlckk6OmRlcHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZGVwdGg8L05JQ0s+Ci08QkxVUkI+ZGVwdGguPC9CTFVSQj4KLTxERUZBVUxUPjAsNzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXJJOjpmZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwLDk5OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mZWVkYmFjazwvTklDSz4KLTxCTFVSQj5mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MCw3NDkyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlckk6OnJhdGU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cmF0ZTwvTklDSz4KLTxCTFVSQj5yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VySTo6c3ByZWFkPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDMsMTQxNTldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+c3ByZWFkPC9OSUNLPgotPEJMVVJCPnNwcmVhZC48L0JMVVJCPgotPERFRkFVTFQ+MCw3ODUzOTg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QaGFzZXJJSTo6ZGVwdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kZXB0aDwvTklDSz4KLTxCTFVSQj5kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MCw3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlcklJOjpmZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwLDk5OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mZWVkYmFjazwvTklDSz4KLTxCTFVSQj5mZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MCw3NDkyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBoYXNlcklJOjpyYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cmF0ZTwvTklDSz4KLTxCTFVSQj5yYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGhhc2VySUk6OnNwcmVhZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxLDU3MDhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+c3ByZWFkPC9OSUNLPgotPEJMVVJCPnNwcmVhZC48L0JMVVJCPgotPERFRkFVTFQ+MCwzOTI2OTk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSTo6UTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMCw5OTldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UTwvTklDSz4KLTxCTFVSQj5RLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSTo6ZGVwdGgteDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRlcHRoLXg8L05JQ0s+Ci08QkxVUkI+ZGVwdGgteC48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJOjpkZXB0aC15PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZGVwdGgteTwvTklDSz4KLTxCTFVSQj5kZXB0aC15LjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSTo6ZGVwdGgtejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRlcHRoLXo8L05JQ0s+Ci08QkxVUkI+ZGVwdGgtei48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJOjpmPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls4MywzMzgzXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmY8L05JQ0s+Ci08QkxVUkI+Zi48L0JMVVJCPgotPERFRkFVTFQ+MjA5LDcxNzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJOjpoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmg8L05JQ0s+Ci08QkxVUkI+aC48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTA3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJOjptb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPm1vZGU8L05JQ0s+Ci08QkxVUkI+bW9kZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJSTo6UTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMCw5OTldPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UTwvTklDSz4KLTxCTFVSQj5RLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSUk6OlEtZGVwdGgteDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlEtZGVwdGgteDwvTklDSz4KLTxCTFVSQj5RLWRlcHRoLXguPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSUk6OlEtZGVwdGgteTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlEtZGVwdGgteTwvTklDSz4KLTxCTFVSQj5RLWRlcHRoLXkuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJSTo6US1kZXB0aC16PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+US1kZXB0aC16PC9OSUNLPgotPEJMVVJCPlEtZGVwdGgtei48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVN3ZWVwVkZJSTo6US1oPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwMSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlEtaDwvTklDSz4KLTxCTFVSQj5RLWguPC9CTFVSQj4KLTxERUZBVUxUPjAsMjUwNzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSUk6OmY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzgzLDMzODNdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZjwvTklDSz4KLTxCTFVSQj5mLjwvQkxVUkI+Ci08REVGQVVMVD4yMDksNzE3PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3dlZXBWRklJOjpmLWRlcHRoLXg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mLWRlcHRoLXg8L05JQ0s+Ci08QkxVUkI+Zi1kZXB0aC14LjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3dlZXBWRklJOjpmLWRlcHRoLXk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mLWRlcHRoLXk8L05JQ0s+Ci08QkxVUkI+Zi1kZXB0aC15LjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSUk6OmYtZGVwdGgtejwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmYtZGVwdGgtejwvTklDSz4KLTxCTFVSQj5mLWRlcHRoLXouPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Td2VlcFZGSUk6OmYtaDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDEsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mLWg8L05JQ0s+Ci08QkxVUkI+Zi1oLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1MDc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU3dlZXBWRklJOjptb2RlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPm1vZGU8L05JQ0s+Ci08QkxVUkI+bW9kZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUF1dG9XYWg6OlE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAxLDAsOTk5XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlE8L05JQ0s+Ci08QkxVUkI+US48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTA1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQXV0b1dhaDo6ZGVwdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kZXB0aDwvTklDSz4KLTxCTFVSQj5kZXB0aC48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQXV0b1dhaDo6ZjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNDMsOTMzXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmY8L05JQ0s+Ci08QkxVUkI+Zi48L0JMVVJCPgotPERFRkFVTFQ+OTIsODA1MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNjYXBlOjpibGVuZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJsZW5kPC9OSUNLPgotPEJMVVJCPmJsZW5kLjwvQkxVUkI+Ci08REVGQVVMVD4wLDc1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtU2NhcGU6OmJwbTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMzAsMjQwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJwbTwvTklDSz4KLTxCTFVSQj5icG0uPC9CTFVSQj4KLTxERUZBVUxUPjgyLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TY2FwZTo6ZGl2aWRlcjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzIsNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kaXZpZGVyPC9OSUNLPgotPEJMVVJCPmRpdmlkZXIuPC9CTFVSQj4KLTxERUZBVUxUPjI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TY2FwZTo6ZHJ5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZHJ5PC9OSUNLPgotPEJMVVJCPmRyeS48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNjYXBlOjpmZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmZlZWRiYWNrPC9OSUNLPgotPEJMVVJCPmZlZWRiYWNrLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVkNPczo6ZjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMSw1NzUxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmY8L05JQ0s+Ci08QkxVUkI+Zi48L0JMVVJCPgotPERFRkFVTFQ+MTAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVkNPczo6cGFyYW0tLS0tLS1zcXVhcmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0tLS0tLXNxdWFyZTwvTklDSz4KLTxCTFVSQj5wYXJhbS0tLS0tLXNxdWFyZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZDT3M6OnRyaS0tLS1zYXc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50cmktLS0tc2F3PC9OSUNLPgotPEJMVVJCPnRyaS0tLS1zYXcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1WQ09zOjp2b2x1bWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzFlLTA2LDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dm9sdW1lPC9OSUNLPgotPEJMVVJCPnZvbHVtZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVkNPZDo6YmxlbmQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0xLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+YmxlbmQ8L05JQ0s+Ci08QkxVUkI+YmxlbmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZDT2Q6OmY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsNTc1MV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mPC9OSUNLPgotPEJMVVJCPmYuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZDT2Q6OnBhcmFtLTEtLS0tLS0tc3F1YXJlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMS0tLS0tLS1zcXVhcmU8L05JQ0s+Ci08QkxVUkI+cGFyYW0tMS0tLS0tLS1zcXVhcmUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1WQ09kOjpwYXJhbS0xLS10cmktLS0tc2F3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMS0tdHJpLS0tLXNhdzwvTklDSz4KLTxCTFVSQj5wYXJhbS0xLS10cmktLS0tc2F3LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVkNPZDo6cGFyYW0tMi0tLS0tLS1zcXVhcmU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0yLS0tLS0tLXNxdWFyZTwvTklDSz4KLTxCTFVSQj5wYXJhbS0yLS0tLS0tLXNxdWFyZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZDT2Q6OnBhcmFtLTItLXRyaS0tLS1zYXc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5wYXJhbS0yLS10cmktLS0tc2F3PC9OSUNLPgotPEJMVVJCPnBhcmFtLTItLXRyaS0tLS1zYXcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1WQ09kOjpwYXJhbS0yLS10dW5lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstMTIsMTJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFyYW0tMi0tdHVuZTwvTklDSz4KLTxCTFVSQj5wYXJhbS0yLS10dW5lLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtVkNPZDo6c3luYzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnN5bmM8L05JQ0s+Ci08QkxVUkI+c3luYy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVZDT2Q6OnZvbHVtZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMWUtMDYsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz52b2x1bWU8L05JQ0s+Ci08QkxVUkI+dm9sdW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DRU86OmRhbXBpbmc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kYW1waW5nPC9OSUNLPgotPEJMVVJCPmRhbXBpbmcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DRU86Om1wbTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCwyNDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+bXBtPC9OSUNLPgotPEJMVVJCPm1wbS48L0JMVVJCPgotPERFRkFVTFQ+MTg0PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ0VPOjp2b2x1bWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz52b2x1bWU8L05JQ0s+Ci08QkxVUkI+dm9sdW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1TaW46OmY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAwMSwyMDAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5mPC9OSUNLPgotPEJMVVJCPmYuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVNpbjo6dm9sdW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxZS0wNiwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnZvbHVtZTwvTklDSz4KLTxCTFVSQj52b2x1bWUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVdoaXRlOjp2b2x1bWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzFlLTA2LDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dm9sdW1lPC9OSUNLPgotPEJMVVJCPnZvbHVtZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTG9yZW56OjpoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+aDwvTklDSz4KLTxCTFVSQj5oLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTG9yZW56Ojp2b2x1bWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzFlLTA2LDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+dm9sdW1lPC9OSUNLPgotPEJMVVJCPnZvbHVtZS48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTG9yZW56Ojp4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+eDwvTklDSz4KLTxCTFVSQj54LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTG9yZW56Ojp5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+eTwvTklDSz4KLTxCTFVSQj55LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtTG9yZW56Ojp6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ejwvTklDSz4KLTxCTFVSQj56LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUm9lc3NsZXI6Omg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5oPC9OSUNLPgotPEJMVVJCPmguPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1Sb2Vzc2xlcjo6dm9sdW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxZS0wNiwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnZvbHVtZTwvTklDSz4KLTxCTFVSQj52b2x1bWUuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJvZXNzbGVyOjp4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+eDwvTklDSz4KLTxCTFVSQj54LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUm9lc3NsZXI6Onk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz55PC9OSUNLPgotPEJMVVJCPnkuPC9CTFVSQj4KLTxERUZBVUxUPjAsNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVJvZXNzbGVyOjp6PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ejwvTklDSz4KLTxCTFVSQj56LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtSlZSZXY6OmJsZW5kPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAsMjhdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+YmxlbmQ8L05JQ0s+Ci08QkxVUkI+YmxlbmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMDc8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1KVlJldjo6dDYwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDQsNl08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50NjA8L05JQ0s+Ci08QkxVUkI+dDYwLjwvQkxVUkI+Ci08REVGQVVMVD4yLDM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QbGF0ZTo6YmFuZHdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAwNSwwLDk5OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5iYW5kd2lkdGg8L05JQ0s+Ci08QkxVUkI+YmFuZHdpZHRoLjwvQkxVUkI+Ci08REVGQVVMVD4wLDUwMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBsYXRlOjpibGVuZDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJsZW5kPC9OSUNLPgotPEJMVVJCPmJsZW5kLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGxhdGU6OmRhbXBpbmc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDAwNSwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRhbXBpbmc8L05JQ0s+Ci08QkxVUkI+ZGFtcGluZy48L0JMVVJCPgotPERFRkFVTFQ+MCwyNTAzNzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QbGF0ZTo6dGFpbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwLDc0OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz50YWlsPC9OSUNLPgotPEJMVVJCPnRhaWwuPC9CTFVSQj4KLTxERUZBVUxUPjAsMzc0NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBsYXRlMngyOjpiYW5kd2lkdGg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMDA1LDAsOTk5XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5iYW5kd2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjAsNTAyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtUGxhdGUyeDI6OmJsZW5kPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+YmxlbmQ8L05JQ0s+Ci08QkxVUkI+YmxlbmQuPC9CTFVSQj4KLTxERUZBVUxUPjAsMjU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1QbGF0ZTJ4Mjo6ZGFtcGluZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwwMDA1LDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZGFtcGluZzwvTklDSz4KLTxCTFVSQj5kYW1waW5nLjwvQkxVUkI+Ci08REVGQVVMVD4wLDI1MDM3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLVBsYXRlMngyOjp0YWlsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDAsNzQ5XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnRhaWw8L05JQ0s+Ci08QkxVUkI+dGFpbC48L0JMVVJCPgotPERFRkFVTFQ+MCwzNzQ1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtQ2xpY2s6OmJwbTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCwyNDRdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+YnBtPC9OSUNLPgotPEJMVVJCPmJwbS48L0JMVVJCPgotPERFRkFVTFQ+NjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1DbGljazo6ZGFtcGluZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRhbXBpbmc8L05JQ0s+Ci08QkxVUkI+ZGFtcGluZy48L0JMVVJCPgotPERFRkFVTFQ+MCw3NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLUNsaWNrOjp2b2x1bWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz52b2x1bWU8L05JQ0s+Ci08QkxVUkI+dm9sdW1lLjwvQkxVUkI+Ci08REVGQVVMVD4wLDU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1EaXJhYzo6ZGFtcGluZzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmRhbXBpbmc8L05JQ0s+Ci08QkxVUkI+ZGFtcGluZy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLURpcmFjOjpwcG08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzMwLDYwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnBwbTwvTklDSz4KLTxCTFVSQj5wcG0uPC9CTFVSQj4KLTxERUZBVUxUPjMwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtRGlyYWM6OnZvbHVtZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPnZvbHVtZTwvTklDSz4KLTxCTFVSQj52b2x1bWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1IUlRGOjpwYW48L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlstMzYsMzZdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+cGFuPC9OSUNLPgotPEJMVVJCPnBhbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpDbG9zZWQtR2F0ZS1WYWx1ZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DbG9zZWQtR2F0ZS1WYWx1ZTwvTklDSz4KLTxCTFVSQj5DbG9zZWQtR2F0ZS1WYWx1ZS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6Okxvb3AtU3RlcHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDY0XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkxvb3AtU3RlcHM8L05JQ0s+Ci08QkxVUkI+TG9vcC1TdGVwcy48L0JMVVJCPgotPERFRkFVTFQ+NjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6UmVzZXQtdG8tVmFsdWUtb24tR2F0ZS1DbG9zZS08L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzZXQtdG8tVmFsdWUtb24tR2F0ZS1DbG9zZS08L05JQ0s+Ci08QkxVUkI+UmVzZXQtdG8tVmFsdWUtb24tR2F0ZS1DbG9zZS0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0wPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMTA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTEwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0xMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTExPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTEuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTEyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xMi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMTM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTEzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0xNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTE0PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTE1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xNS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMTY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xNjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTE2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0xNzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTE3PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTcuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTE4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xOC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMTk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTE5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0yPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTIuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTIwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjA8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yMC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMjE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yMTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTIxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0yMjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTIyPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMjIuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTIzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjM8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yMy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMjQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yNDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTI0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0yNTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTI1PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMjUuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTI2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjY8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yNi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMjc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yNzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTI3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0yODwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTI4PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMjguPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTI5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjk8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yOS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTM8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0zLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0zMDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTMwPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMzAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTMxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMzE8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0zMS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMzI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0zMjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTMyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0zMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTMzPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMzMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTM0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMzQ8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0zNC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMzU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0zNTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTM1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0zNjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTM2PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMzYuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTM3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMzc8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0zNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtMzg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0zODwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTM4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC0zOTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTM5PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMzkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC00PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNDA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC00MDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTQwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC00MTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTQxPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNDEuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTQyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNDI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC00Mi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNDM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC00MzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTQzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC00NDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTQ0PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNDQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTQ1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNDU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC00NS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNDY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC00NjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTQ2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC00NzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTQ3PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNDcuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTQ4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNDg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC00OC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNDk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC00OTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTQ5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC01PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTUuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTUwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNTA8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC01MC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNTE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC01MTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTUxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC01MjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTUyPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNTIuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTUzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNTM8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC01My48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNTQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC01NDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTU0LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC01NTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTU1PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNTUuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTU2PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNTY8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC01Ni48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNTc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC01NzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTU3LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC01ODwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTU4PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNTguPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTU5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNTk8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC01OS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTY8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC02LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC02MDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTYwPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNjAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTYxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNjE8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC02MS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtNjI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC02MjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTYyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC02MzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTYzPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNjMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjY0OjpWYWx1ZS1TdGVwLTc8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC03PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyNjQ6OlZhbHVlLVN0ZXAtODwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC04LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXI2NDo6VmFsdWUtU3RlcC05PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBvaW50ZXJDYXN0RGlzdG9ydGlvbjo6RHJ5LXdldC1taXg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Ecnktd2V0LW1peDwvTklDSz4KLTxCTFVSQj5Ecnktd2V0LW1peC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXBvaW50ZXJDYXN0RGlzdG9ydGlvbjo6RWZmZWN0LWN1dG9mZi1mcmVxPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDQxLDEzMjMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVmZmVjdC1jdXRvZmYtZnJlcTwvTklDSz4KLTxCTFVSQj5FZmZlY3QtY3V0b2ZmLWZyZXEuPC9CTFVSQj4KLTxERUZBVUxUPjMyLDYzNzY8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21iOjpCYW5kLXNlcGFyYXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzE2LDY0MF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLXNlcGFyYXRpb248L05JQ0s+Ci08QkxVUkI+QmFuZC1zZXBhcmF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4xNzI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21iOjpGZWVkYmFjazwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTAsOTksMCw5OV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1zdGVyZW8tZWNobzo6Q3Jvc3MtTW9kZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNyb3NzLU1vZGU8L05JQ0s+Ci08QkxVUkI+Q3Jvc3MtTW9kZS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtc3RlcmVvLWVjaG86OkRyeS1MZXZlbC0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RHJ5LUxldmVsLS1kQi08L05JQ0s+Ci08QkxVUkI+RHJ5LUxldmVsLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtc3RlcmVvLWVjaG86OkhhYXMtRWZmZWN0PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SGFhcy1FZmZlY3Q8L05JQ0s+Ci08QkxVUkI+SGFhcy1FZmZlY3QuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXN0ZXJlby1lY2hvOjpMLURlbGF5LS1tcy08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MLURlbGF5LS1tcy08L05JQ0s+Ci08QkxVUkI+TC1EZWxheS0tbXMtLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtc3RlcmVvLWVjaG86OkwtRWNoby1MZXZlbC0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TC1FY2hvLUxldmVsLS1kQi08L05JQ0s+Ci08QkxVUkI+TC1FY2hvLUxldmVsLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtc3RlcmVvLWVjaG86OkwtRmVlZGJhY2stLS0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5MLUZlZWRiYWNrLS0tLTwvTklDSz4KLTxCTFVSQj5MLUZlZWRiYWNrLS0tLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1zdGVyZW8tZWNobzo6Ui1FY2hvLUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SLUVjaG8tTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5SLUVjaG8tTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1zdGVyZW8tZWNobzo6Ui1IYWFzLURlbGF5LS1tcy08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMjAwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SLUhhYXMtRGVsYXktLW1zLTwvTklDSz4KLTxCTFVSQj5SLUhhYXMtRGVsYXktLW1zLS48L0JMVVJCPgotPERFRkFVTFQ+MTAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLXN0ZXJlby1lY2hvOjpSLUhhYXMtRmVlZGJhY2stLS0tPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SLUhhYXMtRmVlZGJhY2stLS0tPC9OSUNLPgotPEJMVVJCPlItSGFhcy1GZWVkYmFjay0tLS0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtc3RlcmVvLWVjaG86OlN3YXAtT3V0cHV0czwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN3YXAtT3V0cHV0czwvTklDSz4KLTxCTFVSQj5Td2FwLU91dHB1dHMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3NtOjpEcnktd2V0LW1peDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRyeS13ZXQtbWl4PC9OSUNLPgotPEJMVVJCPkRyeS13ZXQtbWl4LjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3NtOjpFcnJvci1yYXRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDMwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkVycm9yLXJhdGU8L05JQ0s+Ci08QkxVUkI+RXJyb3ItcmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWdzbTo6TnVtYmVyLW9mLXBhc3NlczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TnVtYmVyLW9mLXBhc3NlczwvTklDSz4KLTxCTFVSQj5OdW1iZXItb2YtcGFzc2VzLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtZ3NtOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5sYXRlbmN5PC9OSUNLPgotPEJMVVJCPmxhdGVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWhpZ2hwYXNzLWlpcjo6Q3V0b2ZmLUZyZXF1ZW5jeTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bNCw0MSwxOTg0NV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5DdXRvZmYtRnJlcXVlbmN5PC9OSUNLPgotPEJMVVJCPkN1dG9mZi1GcmVxdWVuY3kuPC9CTFVSQj4KLTxERUZBVUxUPjM2LDExOTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1oaWdocGFzcy1paXI6OlN0YWdlcy0yLXBvbGVzLXBlci1zdGFnZS08L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0YWdlcy0yLXBvbGVzLXBlci1zdGFnZS08L05JQ0s+Ci08QkxVUkI+U3RhZ2VzLTItcG9sZXMtcGVyLXN0YWdlLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZvY29kZXI6OkJhbmQtMS1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMS1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTEtTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12b2NvZGVyOjpCYW5kLTEwLUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0xMC1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTEwLUxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdm9jb2Rlcjo6QmFuZC0xMS1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMTEtTGV2ZWw8L05JQ0s+Ci08QkxVUkI+QmFuZC0xMS1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZvY29kZXI6OkJhbmQtMTItTGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTEyLUxldmVsPC9OSUNLPgotPEJMVVJCPkJhbmQtMTItTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12b2NvZGVyOjpCYW5kLTEzLUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0xMy1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTEzLUxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdm9jb2Rlcjo6QmFuZC0xNC1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMTQtTGV2ZWw8L05JQ0s+Ci08QkxVUkI+QmFuZC0xNC1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZvY29kZXI6OkJhbmQtMTUtTGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTE1LUxldmVsPC9OSUNLPgotPEJMVVJCPkJhbmQtMTUtTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12b2NvZGVyOjpCYW5kLTE2LUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0xNi1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTE2LUxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdm9jb2Rlcjo6QmFuZC0yLUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC0yLUxldmVsPC9OSUNLPgotPEJMVVJCPkJhbmQtMi1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZvY29kZXI6OkJhbmQtMy1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtMy1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTMtTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12b2NvZGVyOjpCYW5kLTQtTGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTQtTGV2ZWw8L05JQ0s+Ci08QkxVUkI+QmFuZC00LUxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdm9jb2Rlcjo6QmFuZC01LUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC01LUxldmVsPC9OSUNLPgotPEJMVVJCPkJhbmQtNS1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZvY29kZXI6OkJhbmQtNi1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtNi1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTYtTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12b2NvZGVyOjpCYW5kLTctTGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5CYW5kLTctTGV2ZWw8L05JQ0s+Ci08QkxVUkI+QmFuZC03LUxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdm9jb2Rlcjo6QmFuZC04LUxldmVsPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+QmFuZC04LUxldmVsPC9OSUNLPgotPEJMVVJCPkJhbmQtOC1MZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXZvY29kZXI6OkJhbmQtOS1MZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmQtOS1MZXZlbDwvTklDSz4KLTxCTFVSQj5CYW5kLTktTGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS12b2NvZGVyOjpOdW1iZXItb2YtYmFuZHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDE2XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk51bWJlci1vZi1iYW5kczwvTklDSz4KLTxCTFVSQj5OdW1iZXItb2YtYmFuZHMuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1rYXJhb2tlOjpWb2NhbC12b2x1bWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy03MCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZvY2FsLXZvbHVtZTwvTklDSz4KLTxCTFVSQj5Wb2NhbC12b2x1bWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1qYW1pbkNvbnRyb2xsZXI6OlNjZW5lLW5vLTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U2NlbmUtbm8tPC9OSUNLPgotPEJMVVJCPlNjZW5lLW5vLS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1jaG9ydXNmbGFuZ2VyOjpDb250b3VyLS1Iei08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzIwLDIwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNvbnRvdXItLUh6LTwvTklDSz4KLTxCTFVSQj5Db250b3VyLS1Iei0uPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1jaG9ydXNmbGFuZ2VyOjpEZWxheS0tbXMtPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWxheS0tbXMtPC9OSUNLPgotPEJMVVJCPkRlbGF5LS1tcy0uPC9CTFVSQj4KLTxERUZBVUxUPjI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWNob3J1c2ZsYW5nZXI6OkRlcHRoLS0tLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RGVwdGgtLS0tPC9OSUNLPgotPEJMVVJCPkRlcHRoLS0tLS48L0JMVVJCPgotPERFRkFVTFQ+NzU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtY2hvcnVzZmxhbmdlcjo6RHJ5LUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EcnktTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5EcnktTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXRhcC1jaG9ydXNmbGFuZ2VyOjpGcmVxdWVuY3ktLUh6LTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCw1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS0tSHotPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS0tSHotLjwvQkxVUkI+Ci08REVGQVVMVD4xLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWNob3J1c2ZsYW5nZXI6OkwtUi1QaGFzZS1TaGlmdC0tZGVnLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxODBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TC1SLVBoYXNlLVNoaWZ0LS1kZWctPC9OSUNLPgotPEJMVVJCPkwtUi1QaGFzZS1TaGlmdC0tZGVnLS48L0JMVVJCPgotPERFRkFVTFQ+OTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtY2hvcnVzZmxhbmdlcjo6V2V0LUxldmVsLS1kQi08L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy05MCwyMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5XZXQtTGV2ZWwtLWRCLTwvTklDSz4KLTxCTFVSQj5XZXQtTGV2ZWwtLWRCLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWJhbmRwYXNzLWlpcjo6QmFuZHdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDQxLDE5ODQ1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjI5NSw4MzI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1iYW5kcGFzcy1paXI6OkNlbnRlci1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMTk4NDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q2VudGVyLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DZW50ZXItRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4yOTUsODMyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtYmFuZHBhc3MtaWlyOjpTdGFnZXMtMi1wb2xlcy1wZXItc3RhZ2UtPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdGFnZXMtMi1wb2xlcy1wZXItc3RhZ2UtPC9OSUNLPgotPEJMVVJCPlN0YWdlcy0yLXBvbGVzLXBlci1zdGFnZS0uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzQ6OkFtcGxpdHVkZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTQwLDEyXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5BbXBsaXR1ZGU8L05JQ0s+Ci08QkxVUkI+QW1wbGl0dWRlLjwvQkxVUkI+Ci08REVGQVVMVD4tNDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzQ6OkF0dGFjay10aW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDUsNDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkF0dGFjay10aW1lPC9OSUNLPgotPEJMVVJCPkF0dGFjay10aW1lLjwvQkxVUkI+Ci08REVGQVVMVD4xMDEsMTI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2M0OjpHYWluLXJlZHVjdGlvbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bLTI0LDBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkdhaW4tcmVkdWN0aW9uPC9OSUNLPgotPEJMVVJCPkdhaW4tcmVkdWN0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4tMjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzQ6OktuZWUtcmFkaXVzPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsxLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPktuZWUtcmFkaXVzPC9OSUNLPgotPEJMVVJCPktuZWUtcmFkaXVzLjwvQkxVUkI+Ci08REVGQVVMVD4zLDI1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2M0OjpNYWtldXAtZ2FpbjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwyNF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYWtldXAtZ2FpbjwvTklDSz4KLTxCTFVSQj5NYWtldXAtZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjNDo6Uk1TLXBlYWs8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5STVMtcGVhazwvTklDSz4KLTxCTFVSQj5STVMtcGVhay48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNjNDo6UmF0aW88L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzEsMjBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmF0aW88L05JQ0s+Ci08QkxVUkI+UmF0aW8uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYzQ6OlJlbGVhc2UtdGltZTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMiw4MDBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVsZWFzZS10aW1lPC9OSUNLPgotPEJMVVJCPlJlbGVhc2UtdGltZS48L0JMVVJCPgotPERFRkFVTFQ+NDAxPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2M0OjpUaHJlc2hvbGQtbGV2ZWw8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Wy0zMCwwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZC1sZXZlbDwvTklDSz4KLTxCTFVSQj5UaHJlc2hvbGQtbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zYXd0b290aC1mYy1vYTo6RnJlcXVlbno8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsOTE4NzUsMjIwNTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJlcXVlbno8L05JQ0s+Ci08QkxVUkI+RnJlcXVlbnouPC9CTFVSQj4KLTxERUZBVUxUPjQ0MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLW5vdGNoLWlpcjo6QmFuZHdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPls0LDQxLDE5ODQ1XTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5CYW5kd2lkdGguPC9CTFVSQj4KLTxERUZBVUxUPjI5NSw4MzI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ub3RjaC1paXI6OkNlbnRlci1GcmVxdWVuY3k8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzQsNDEsMTk4NDVdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+Q2VudGVyLUZyZXF1ZW5jeTwvTklDSz4KLTxCTFVSQj5DZW50ZXItRnJlcXVlbmN5LjwvQkxVUkI+Ci08REVGQVVMVD4yOTUsODMyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtbm90Y2gtaWlyOjpTdGFnZXMtMi1wb2xlcy1wZXItc3RhZ2UtPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwxMF08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdGFnZXMtMi1wb2xlcy1wZXItc3RhZ2UtPC9OSUNLPgotPEJMVVJCPlN0YWdlcy0yLXBvbGVzLXBlci1zdGFnZS0uPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1mcmVxVHJhY2tlcjo6VHJhY2tpbmctc3BlZWQ8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UcmFja2luZy1zcGVlZDwvTklDSz4KLTxCTFVSQj5UcmFja2luZy1zcGVlZC48L0JMVVJCPgotPERFRkFVTFQ+MCw1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY29tYi1uOjpEZWNheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1UaW1lPC9OSUNLPgotPEJMVVJCPkRlY2F5LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21iLW46OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbWItbjo6TWF4LURlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXgtRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWF4LURlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY29tYi1sOjpEZWNheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1UaW1lPC9OSUNLPgotPEJMVVJCPkRlY2F5LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21iLWw6OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbWItbDo6TWF4LURlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXgtRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWF4LURlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtY29tYi1jOjpEZWNheS1UaW1lPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5EZWNheS1UaW1lPC9OSUNLPgotPEJMVVJCPkRlY2F5LVRpbWUuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1jb21iLWM6OkRlbGF5LVRpbWU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkRlbGF5LVRpbWU8L05JQ0s+Ci08QkxVUkI+RGVsYXktVGltZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLWNvbWItYzo6TWF4LURlbGF5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5NYXgtRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWF4LURlbGF5LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OkNsb3NlZC1HYXRlLVZhbHVlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkNsb3NlZC1HYXRlLVZhbHVlPC9OSUNLPgotPEJMVVJCPkNsb3NlZC1HYXRlLVZhbHVlLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6TG9vcC1TdGVwczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsMzJdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TG9vcC1TdGVwczwvTklDSz4KLTxCTFVSQj5Mb29wLVN0ZXBzLjwvQkxVUkI+Ci08REVGQVVMVD4zMjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpSZXNldC10by1WYWx1ZS1vbi1HYXRlLUNsb3NlLTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNldC10by1WYWx1ZS1vbi1HYXRlLUNsb3NlLTwvTklDSz4KLTxCTFVSQj5SZXNldC10by1WYWx1ZS1vbi1HYXRlLUNsb3NlLS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0wPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTE8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0xMDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTEwPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTAuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTExPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTE8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xMS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xMjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTEyLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0xMzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTEzPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTE0PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTQ8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xNC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMTU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xNTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTE1LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0xNjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTE2PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTYuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTE3PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMTc8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0xNy48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMTg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0xODwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTE4LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0xOTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTE5PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMTkuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMjA8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yMDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTIwLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0yMTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTIxPC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMjEuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTIyPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjI8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yMi48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMjM8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTIzLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0yNDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTI0PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMjQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTI1PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjU8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yNS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMjY8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yNjwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTI2LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0yNzwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTI3PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtMjcuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTI4PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMjg8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0yOC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMjk8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0yOTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTI5LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC0zPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTMuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTMwPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtMzA8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC0zMC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtMzE8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC0zMTwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTMxLjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC00PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNDwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTQuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTU8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC01PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtNS48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtNjwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTY8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC02LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1zZXF1ZW5jZXIzMjo6VmFsdWUtU3RlcC03PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlZhbHVlLVN0ZXAtNzwvTklDSz4KLTxCTFVSQj5WYWx1ZS1TdGVwLTcuPC9CTFVSQj4KLTxERUZBVUxUPi0zLDQwMjgyZSszODwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+bGFkc3BhLXNlcXVlbmNlcjMyOjpWYWx1ZS1TdGVwLTg8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VmFsdWUtU3RlcC04PC9OSUNLPgotPEJMVVJCPlZhbHVlLVN0ZXAtOC48L0JMVVJCPgotPERFRkFVTFQ+LTMsNDAyODJlKzM4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtc2VxdWVuY2VyMzI6OlZhbHVlLVN0ZXAtOTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5WYWx1ZS1TdGVwLTk8L05JQ0s+Ci08QkxVUkI+VmFsdWUtU3RlcC05LjwvQkxVUkI+Ci08REVGQVVMVD4tMyw0MDI4MmUrMzg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS10YXAtZGVlc3Nlcjo6QXR0ZW51YXRpb24tLWRCLTwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxMF08L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+QXR0ZW51YXRpb24tLWRCLTwvTklDSz4KLTxCTFVSQj5BdHRlbnVhdGlvbi0tZEItLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWRlZXNzZXI6OkZyZXF1ZW5jeS0tSHotPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlsyMDAwLDE2MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyZXF1ZW5jeS0tSHotPC9OSUNLPgotPEJMVVJCPkZyZXF1ZW5jeS0tSHotLjwvQkxVUkI+Ci08REVGQVVMVD41NTAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWRlZXNzZXI6Ok1vbml0b3I8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW9uaXRvcjwvTklDSz4KLTxCTFVSQj5Nb25pdG9yLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWRlZXNzZXI6OlNpZGVjaGFpbi1GaWx0ZXI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U2lkZWNoYWluLUZpbHRlcjwvTklDSz4KLTxCTFVSQj5TaWRlY2hhaW4tRmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5sYWRzcGEtdGFwLWRlZXNzZXI6OlRocmVzaG9sZC1MZXZlbC0tZEItPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlstNTAsMTBdPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+VGhyZXNob2xkLUxldmVsLS1kQi08L05JQ0s+Ci08QkxVUkI+VGhyZXNob2xkLUxldmVsLS1kQi0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPmxhZHNwYS1ub2lzZS13aGl0ZTo6QW1wbGl0dWRlPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5BbXBsaXR1ZGU8L05JQ0s+Ci08QkxVUkI+QW1wbGl0dWRlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTTVBURUFscGhhOjpib3JkZXI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJvcmRlcjwvTklDSz4KLTxCTFVSQj5UaGUgYm9yZGVyIHdpZHRoIG9mIHRoZSB0cmFuc2l0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTTVBURUFscGhhOjpkZXB0aDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzEsMjRdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EZXB0aDwvTklDSz4KLTxCTFVSQj5EZXB0aCBvZiB0aGUgbWFzayBpbiBiaXRzLjwvQkxVUkI+Ci08REVGQVVMVD4xNjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U01QVEVBbHBoYTo6cG9zaXRpb248L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3NpdGlvbjwvTklDSz4KLTxCTFVSQj5Qb3NpdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiBlZmZlY3QuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNNUFRFQWxwaGE6OnR5cGU8L05BTUU+Ci08VFlQRT5Hc3RTTVBURUFscGhhVHJhbnNpdGlvblR5cGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UeXBlPC9OSUNLPgotPEJMVVJCPlRoZSB0eXBlIG9mIHRyYW5zaXRpb24gdG8gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD5BIGJhciBtb3ZlcyBmcm9tIGxlZnQgdG8gcmlnaHQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNNUFRFQWxwaGE6OmludmVydDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SW52ZXJ0PC9OSUNLPgotPEJMVVJCPkludmVydCB0cmFuc2l0aW9uIG1hc2suPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0thcmFva2U6OmZpbHRlci1iYW5kPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDQ0MV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbHRlciBCYW5kPC9OSUNLPgotPEJMVVJCPlRoZSBGcmVxdWVuY3kgYmFuZCBvZiB0aGUgZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD4yMjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvS2FyYW9rZTo6ZmlsdGVyLXdpZHRoPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZpbHRlciBXaWR0aDwvTklDSz4KLTxCTFVSQj5UaGUgRnJlcXVlbmN5IHdpZHRoIG9mIHRoZSBmaWx0ZXIuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXVkaW9LYXJhb2tlOjpsZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TGV2ZWw8L05JQ0s+Ci08QkxVUkI+TGV2ZWwgb2YgdGhlIGVmZmVjdCAoMS4wID0gZnVsbCkuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvS2FyYW9rZTo6bW9uby1sZXZlbDwvTkFNRT4KLTxUWVBFPmdmbG9hdDwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9ubyBMZXZlbDwvTklDSz4KLTxCTFVSQj5MZXZlbCBvZiB0aGUgbW9ubyBjaGFubmVsICgxLjAgPSBmdWxsKS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTaW5rOjpkZXZpY2U8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EZXZpY2U8L05JQ0s+Ci08QkxVUkI+VGhlIFB1bHNlQXVkaW8gc2luayBkZXZpY2UgdG8gY29ubmVjdCB0by48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTaW5rOjpzZXJ2ZXI8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TZXJ2ZXI8L05JQ0s+Ci08QkxVUkI+VGhlIFB1bHNlQXVkaW8gc2VydmVyIHRvIGNvbm5lY3QgdG8uPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFB1bHNlU2luazo6ZGV2aWNlLW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkRldmljZSBuYW1lPC9OSUNLPgotPEJMVVJCPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTaW5rOjp2b2x1bWU8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlswLDEwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Vm9sdW1lPC9OSUNLPgotPEJMVVJCPkxpbmVhciB2b2x1bWUgb2YgdGhpcyBzdHJlYW0sIDEuMD0xMDAlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdWxzZVNpbms6Om11dGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk11dGU8L05JQ0s+Ci08QkxVUkI+TXV0ZSBzdGF0ZSBvZiB0aGlzIHN0cmVhbS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFB1bHNlU2luazo6c3RyZWFtLXByb3BlcnRpZXM8L05BTUU+Ci08VFlQRT5Hc3RTdHJ1Y3R1cmUqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+c3RyZWFtIHByb3BlcnRpZXM8L05JQ0s+Ci08QkxVUkI+bGlzdCBvZiBwdWxzZWF1ZGlvIHN0cmVhbSBwcm9wZXJ0aWVzLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFB1bHNlU2luazo6Y2xpZW50LW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DbGllbnQgTmFtZTwvTklDSz4KLTxCTFVSQj5UaGUgUHVsc2VBdWRpbyBjbGllbnQgbmFtZSB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPiJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFB1bHNlU2luazo6Y3VycmVudC1kZXZpY2U8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkN1cnJlbnQgRGV2aWNlPC9OSUNLPgotPEJMVVJCPlRoZSBjdXJyZW50IFB1bHNlQXVkaW8gc2luayBkZXZpY2UuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFB1bHNlU3JjOjpkZXZpY2U8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EZXZpY2U8L05JQ0s+Ci08QkxVUkI+VGhlIFB1bHNlQXVkaW8gc291cmNlIGRldmljZSB0byBjb25uZWN0IHRvLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdWxzZVNyYzo6c2VydmVyPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2VydmVyPC9OSUNLPgotPEJMVVJCPlRoZSBQdWxzZUF1ZGlvIHNlcnZlciB0byBjb25uZWN0IHRvLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdWxzZVNyYzo6ZGV2aWNlLW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkRldmljZSBuYW1lPC9OSUNLPgotPEJMVVJCPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTcmM6OnN0cmVhbS1wcm9wZXJ0aWVzPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnN0cmVhbSBwcm9wZXJ0aWVzPC9OSUNLPgotPEJMVVJCPmxpc3Qgb2YgcHVsc2VhdWRpbyBzdHJlYW0gcHJvcGVydGllcy48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdWxzZVNyYzo6bXV0ZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TXV0ZTwvTklDSz4KLTxCTFVSQj5NdXRlIHN0YXRlIG9mIHRoaXMgc3RyZWFtLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTcmM6OnNvdXJjZS1vdXRwdXQtaW5kZXg8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+c291cmNlIG91dHB1dCBpbmRleDwvTklDSz4KLTxCTFVSQj5UaGUgaW5kZXggb2YgdGhlIFB1bHNlQXVkaW8gc291cmNlIG91dHB1dCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcmVjb3JkIHN0cmVhbS48L0JMVVJCPgotPERFRkFVTFQ+NDI5NDk2NzI5NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTcmM6OnZvbHVtZTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Wb2x1bWU8L05JQ0s+Ci08QkxVUkI+TGluZWFyIHZvbHVtZSBvZiB0aGlzIHN0cmVhbSwgMS4wPTEwMCUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFB1bHNlU3JjOjpjbGllbnQtbmFtZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNsaWVudCBOYW1lPC9OSUNLPgotPEJMVVJCPlRoZSBQdWxzZUF1ZGlvIGNsaWVudF9uYW1lX3RvX3VzZS48L0JMVVJCPgotPERFRkFVTFQ+ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FuIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVsc2VTcmM6OmN1cnJlbnQtZGV2aWNlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5DdXJyZW50IERldmljZTwvTklDSz4KLTxCTFVSQj5UaGUgY3VycmVudCBQdWxzZUF1ZGlvIHNvdXJjZSBkZXZpY2UuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFRhZ0luamVjdDo6dGFnczwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnc8L0ZMQUdTPgotPE5JQ0s+dGFnbGlzdDwvTklDSz4KLTxCTFVSQj5MaXN0IG9mIHRhZ3MgdG8gaW5qZWN0IGludG8gdGhlIHRhcmdldCBmaWxlLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REZWludGVybGVhdmU6OmtlZXAtcG9zaXRpb25zPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5LZWVwIHBvc2l0aW9uczwvTklDSz4KLTxCTFVSQj5LZWVwIHRoZSBvcmlnaW5hbCBjaGFubmVsIHBvc2l0aW9ucyBvbiB0aGUgb3V0cHV0IGJ1ZmZlcnMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJbnRlcmxlYXZlOjpjaGFubmVsLXBvc2l0aW9uczwvTkFNRT4KLTxUWVBFPkdWYWx1ZUFycmF5KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNoYW5uZWwgcG9zaXRpb25zPC9OSUNLPgotPEJMVVJCPkNoYW5uZWwgcG9zaXRpb25zIHVzZWQgb24gdGhlIG91dHB1dC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJbnRlcmxlYXZlOjpjaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV0PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DaGFubmVsIHBvc2l0aW9ucyBmcm9tIGlucHV0PC9OSUNLPgotPEJMVVJCPlRha2UgY2hhbm5lbCBwb3NpdGlvbnMgZnJvbSB0aGUgaW5wdXQuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJnVm9sdW1lOjphbGJ1bS1tb2RlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BbGJ1bSBtb2RlPC9OSUNLPgotPEJMVVJCPlByZWZlciBhbGJ1bSBvdmVyIHRyYWNrIGdhaW4uPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJnVm9sdW1lOjpmYWxsYmFjay1nYWluPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTYwLDYwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RmFsbGJhY2sgZ2FpbjwvTklDSz4KLTxCTFVSQj5HYWluIGZvciBzdHJlYW1zIG1pc3NpbmcgdGFncyBbZEJdLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSZ1ZvbHVtZTo6aGVhZHJvb208L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlswLDYwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SGVhZHJvb208L05JQ0s+Ci08QkxVUkI+RXh0cmEgaGVhZHJvb20gW2RCXS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmdWb2x1bWU6OnByZS1hbXA8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlstNjAsNjBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QcmUtYW1wPC9OSUNLPgotPEJMVVJCPkV4dHJhIGdhaW4gW2RCXS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmdWb2x1bWU6OnJlc3VsdC1nYWluPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTEyMCwxMjBdPC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlJlc3VsdC1nYWluPC9OSUNLPgotPEJMVVJCPkFwcGxpZWQgZ2FpbiBbZEJdLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSZ1ZvbHVtZTo6dGFyZ2V0LWdhaW48L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPlstMTIwLDEyMF08L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+VGFyZ2V0LWdhaW48L05JQ0s+Ci08QkxVUkI+QXBwbGljYWJsZSBnYWluIFtkQl0uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJnTGltaXRlcjo6ZW5hYmxlZDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RW5hYmxlZDwvTklDSz4KLTxCTFVSQj5FbmFibGUgcHJvY2Vzc2luZy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmdBbmFseXNpczo6Zm9yY2VkPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Gb3JjZWQ8L05JQ0s+Ci08QkxVUkI+QW5hbHl6ZSBldmVuIGlmIFJlcGxheUdhaW4gdGFncyBleGlzdC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmdBbmFseXNpczo6bnVtLXRyYWNrczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TnVtYmVyIG9mIGFsYnVtIHRyYWNrczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgcmVtYWluaW5nIGFsYnVtIHRyYWNrcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmdBbmFseXNpczo6cmVmZXJlbmNlLWxldmVsPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxNTBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZWZlcmVuY2UgbGV2ZWw8L05JQ0s+Ci08QkxVUkI+UmVmZXJlbmNlIGxldmVsIFtkQl0uPC9CTFVSQj4KLTxERUZBVUxUPjg5PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSZ0FuYWx5c2lzOjptZXNzYWdlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TWVzc2FnZTwvTklDSz4KLTxCTFVSQj5Qb3N0IHN0YXRpY3MgbWVzc2FnZXMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RIRFYxMzk0U3JjOjpjaGFubmVsPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2NF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNoYW5uZWw8L05JQ0s+Ci08QkxVUkI+Q2hhbm5lbCBudW1iZXIgZm9yIGxpc3RlbmluZy48L0JMVVJCPgotPERFRkFVTFQ+NjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEhEVjEzOTRTcmM6OmRldmljZS1uYW1lPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5kZXZpY2UgbmFtZTwvTklDSz4KLTxCTFVSQj51c2VyLWZyaWVuZGx5IG5hbWUgb2YgdGhlIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+IkRlZmF1bHQiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RIRFYxMzk0U3JjOjpndWlkPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkdVSUQ8L05JQ0s+Ci08QkxVUkI+c2VsZWN0IG9uZSBvZiBtdWx0aXBsZSBEViBkZXZpY2VzIGJ5IGl0cyBHVUlELiB1c2UgYSBoZXhhZGVjaW1hbCBsaWtlIDB4aGhoaGhoaGhoaGhoaGhoaC4gKDAgPSBubyBndWlkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SERWMTM5NFNyYzo6cG9ydDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+W0dfTUFYVUxPTkcsMTZdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3J0PC9OSUNLPgotPEJMVVJCPlBvcnQgbnVtYmVyICgtMSBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SERWMTM5NFNyYzo6dXNlLWF2YzwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VXNlIEFWL0M8L05JQ0s+Ci08QkxVUkI+VXNlIEFWL0MgVlRSIGNvbnRyb2wuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEpQRUdQYXk6OnF1YWxpdHk8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDI1NV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlF1YWxpdHk8L05JQ0s+Ci08QkxVUkI+UXVhbGl0eSBmYWN0b3Igb24gSlBFRyBkYXRhICh1bnVzZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4yNTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEpQRUdQYXk6OnR5cGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDI1NV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlR5cGU8L05JQ0s+Ci08QkxVUkI+RGVmYXVsdCBKUEVHIFR5cGUsIG92ZXJ3cml0dGVuIGJ5IFNPRiB3aGVuIHByZXNlbnQuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRklSRmlsdGVyOjprZXJuZWw8L05BTUU+Ci08VFlQRT5HVmFsdWVBcnJheSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5GaWx0ZXIgS2VybmVsPC9OSUNLPgotPEJMVVJCPkZpbHRlciBrZXJuZWwgZm9yIHRoZSBGSVIgZmlsdGVyLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRklSRmlsdGVyOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkxhdGVjeTwvTklDSz4KLTxCTFVSQj5GaWx0ZXIgbGF0ZW5jeSBpbiBzYW1wbGVzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0lJUkZpbHRlcjo6YTwvTkFNRT4KLTxUWVBFPkdWYWx1ZUFycmF5KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkE8L05JQ0s+Ci08QkxVUkI+RmlsdGVyIGNvZWZmaWNpZW50cyAoZGVub21pbmF0b3Igb2YgdHJhbnNmZXIgZnVuY3Rpb24pLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvSUlSRmlsdGVyOjpiPC9OQU1FPgotPFRZUEU+R1ZhbHVlQXJyYXkqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QjwvTklDSz4KLTxCTFVSQj5GaWx0ZXIgY29lZmZpY2llbnRzIChudW1lcmF0b3Igb2YgdHJhbnNmZXIgZnVuY3Rpb24pLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRWNobzo6ZGVsYXk8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPj49IDE8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRlbGF5PC9OSUNLPgotPEJMVVJCPkRlbGF5IG9mIHRoZSBlY2hvIGluIG5hbm9zZWNvbmRzLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0VjaG86OmZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgZmVlZGJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEF1ZGlvRWNobzo6aW50ZW5zaXR5PC9OQU1FPgotPFRZUEU+Z2Zsb2F0PC9UWVBFPgotPFJBTkdFPlswLDFdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JbnRlbnNpdHk8L05JQ0s+Ci08QkxVUkI+SW50ZW5zaXR5IG9mIHRoZSBlY2hvLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBdWRpb0VjaG86Om1heC1kZWxheTwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4aW11bSBEZWxheTwvTklDSz4KLTxCTFVSQj5NYXhpbXVtIGRlbGF5IG9mIHRoZSBlY2hvIGluIG5hbm9zZWNvbmRzIChjYW4ndCBiZSBjaGFuZ2VkIGluIFBMQVlJTkcgb3IgUEFVU0VEIHN0YXRlKS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QXNwZWN0UmF0aW9Dcm9wOjphc3BlY3QtcmF0aW88L05BTUU+Ci08VFlQRT5Hc3RGcmFjdGlvbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmFzcGVjdC1yYXRpbzwvTklDSz4KLTxCTFVSQj5UYXJnZXQgYXNwZWN0LXJhdGlvIG9mIHZpZGVvLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEc3MjZEZXBheTo6Zm9yY2UtYWFsMjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Rm9yY2UgQUFMMjwvTklDSz4KLTxCTFVSQj5Gb3JjZSBBQUwyIGRlY29kaW5nIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYmFkIHBheWxvYWRlcnMuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEc3MjZQYXk6OmZvcmNlLWFhbDI8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZvcmNlIEFBTDI8L05JQ0s+Ci08QkxVUkI+Rm9yY2UgQUFMMiBlbmNvZGluZyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJhZCBkZXBheWxvYWRlcnMuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEgyNjNQYXk6Om1vZGVhLW9ubHk8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZyYWdtZW50IHBhY2tldHMgaW4gbW9kZSBBIE9ubHk8L05JQ0s+Ci08QkxVUkI+RGlzYWJsZSBwYWNrZXRpemF0aW9uIG1vZGVzIEIgYW5kIEMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REZWludGVybGFjZTo6ZmllbGRzPC9OQU1FPgotPFRZUEU+R3N0RGVpbnRlcmxhY2VGaWVsZHM8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5maWVsZHM8L05JQ0s+Ci08QkxVUkI+RmllbGRzIHRvIHVzZSBmb3IgZGVpbnRlcmxhY2luZy48L0JMVVJCPgotPERFRkFVTFQ+QWxsIGZpZWxkczwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RGVpbnRlcmxhY2U6Om1ldGhvZDwvTkFNRT4KLTxUWVBFPkdzdERlaW50ZXJsYWNlTWV0aG9kczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1ldGhvZDwvTklDSz4KLTxCTFVSQj5EZWludGVybGFjZSBNZXRob2QuPC9CTFVSQj4KLTxERUZBVUxUPkxpbmVhcjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RGVpbnRlcmxhY2U6Om1vZGU8L05BTUU+Ci08VFlQRT5Hc3REZWludGVybGFjZU1vZGVzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5EZWludGVybGFjZSBNb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5BdXRvIGRldGVjdGlvbiAoYmVzdCBlZmZvcnQpPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REZWludGVybGFjZTo6dGZmPC9OQU1FPgotPFRZUEU+R3N0RGVpbnRlcmxhY2VGaWVsZExheW91dDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnRmZjwvTklDSz4KLTxCTFVSQj5EZWludGVybGFjZSB0b3AgZmllbGQgZmlyc3QuPC9CTFVSQj4KLTxERUZBVUxUPkF1dG8gZGV0ZWN0aW9uPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REZWludGVybGFjZTo6ZHJvcC1vcnBoYW5zPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5kcm9wLW9ycGhhbnM8L05JQ0s+Ci08QkxVUkI+RHJvcCBvcnBoYW4gZmllbGRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGVsZWNpbmUgcGF0dGVybnMgaW4gYWN0aXZlIGxvY2tpbmcgbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0RGVpbnRlcmxhY2U6Omlnbm9yZS1vYnNjdXJlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5pZ25vcmUtb2JzY3VyZTwvTklDSz4KLTxCTFVSQj5JZ25vcmUgb2JzY3VyZSB0ZWxlY2luZSBwYXR0ZXJucyAob25seSBjb25zaWRlciBQLCBJIGFuZCAyOjMgdmFyaWFudHMpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3REZWludGVybGFjZTo6bG9ja2luZzwvTkFNRT4KLTxUWVBFPkdzdERlaW50ZXJsYWNlTG9ja2luZzwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmxvY2tpbmc8L05JQ0s+Ci08QkxVUkI+UGF0dGVybiBsb2NraW5nIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPk5vIHBhdHRlcm4gbG9ja2luZzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QWdpbmdUVjo6Y29sb3ItYWdpbmc8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvbG9yIEFnaW5nPC9OSUNLPgotPEJMVVJCPkNvbG9yIEFnaW5nLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RBZ2luZ1RWOjpkdXN0czwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RHVzdHM8L05JQ0s+Ci08QkxVUkI+RHVzdHMuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEFnaW5nVFY6OnBpdHM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBpdHM8L05JQ0s+Ci08QkxVUkI+UGl0cy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0QWdpbmdUVjo6c2NyYXRjaC1saW5lczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDIwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TY3JhdGNoIExpbmVzPC9OSUNLPgotPEJMVVJCPk51bWJlciBvZiBzY3JhdGNoIGxpbmVzLjwvQkxVUkI+Ci08REVGQVVMVD43PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPcFRWOjptb2RlPC9OQU1FPgotPFRZUEU+R3N0T3BUVk1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Nb2RlPC9OSUNLPgotPEJMVVJCPk1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPk1hZWxzdHJvbTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T3BUVjo6c3BlZWQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3BlZWQ8L05JQ0s+Ci08QkxVUkI+RWZmZWN0IHNwZWVkLjwvQkxVUkI+Ci08REVGQVVMVD4xNjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T3BUVjo6dGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gR19NQVhJTlQ8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5MdW1hIHRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+NjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJhZGlvYWNUVjo6Y29sb3I8L05BTUU+Ci08VFlQRT5Hc3RSYWRpb2FjVFZDb2xvcjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvbG9yPC9OSUNLPgotPEJMVVJCPkNvbG9yLjwvQkxVUkI+Ci08REVGQVVMVD5XaGl0ZTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UmFkaW9hY1RWOjppbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IEdfTUFYSU5UPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JbnRlcnZhbDwvTklDSz4KLTxCTFVSQj5TbmFwc2hvdCBpbnRlcnZhbCAoaW4gc3Ryb2JlIG1vZGUpLjwvQkxVUkI+Ci08REVGQVVMVD4zPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSYWRpb2FjVFY6Om1vZGU8L05BTUU+Ci08VFlQRT5Hc3RSYWRpb2FjVFZNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5Nb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5Ob3JtYWw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJhZGlvYWNUVjo6dHJpZ2dlcjwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VHJpZ2dlcjwvTklDSz4KLTxCTFVSQj5UcmlnZ2VyIChpbiB0cmlnZ2VyIG1vZGUpLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3RyZWFrVFY6OmZlZWRiYWNrPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5GZWVkYmFjazwvTklDSz4KLTxCTFVSQj5GZWVkYmFjay48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJpcHBsZVRWOjptb2RlPC9OQU1FPgotPFRZUEU+R3N0UmlwcGxlVFZNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TW9kZTwvTklDSz4KLTxCTFVSQj5Nb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5Nb3Rpb24gRGV0ZWN0aW9uPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSaXBwbGVUVjo6cmVzZXQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnc8L0ZMQUdTPgotPE5JQ0s+UmVzZXQ8L05JQ0s+Ci08QkxVUkI+UmVzZXQgYWxsIGN1cnJlbnQgcmlwcGxlcy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6ZG8tbG9zdDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RG8gTG9zdDwvTklDSz4KLTxCTFVSQj5TZW5kIGFuIGV2ZW50IGRvd25zdHJlYW0gd2hlbiBhIHBhY2tldCBpcyBsb3N0LjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwQmluOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgbGF0ZW5jeSBpbiBtczwvTklDSz4KLTxCTFVSQj5EZWZhdWx0IGFtb3VudCBvZiBtcyB0byBidWZmZXIgaW4gdGhlIGppdHRlcmJ1ZmZlcnMuPC9CTFVSQj4KLTxERUZBVUxUPjIwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwQmluOjpzZGVzPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNERVM8L05JQ0s+Ci08QkxVUkI+VGhlIFNERVMgaXRlbXMgb2YgdGhpcyBzZXNzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6aWdub3JlLXB0PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JZ25vcmUgUFQ8L05JQ0s+Ci08QkxVUkI+RG8gbm90IGRlbXVsdGlwbGV4IGJhc2VkIG9uIFBUIHZhbHVlcy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6YXV0b3JlbW92ZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QXV0byBSZW1vdmU8L05JQ0s+Ci08QkxVUkI+QXV0b21hdGljYWxseSByZW1vdmUgdGltZWQgb3V0IHNvdXJjZXMuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46OmJ1ZmZlci1tb2RlPC9OQU1FPgotPFRZUEU+UlRQSml0dGVyQnVmZmVyTW9kZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJ1ZmZlciBNb2RlPC9OSUNLPgotPEJMVVJCPkNvbnRyb2wgdGhlIGJ1ZmZlcmluZyBhbGdvcml0aG0gaW4gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD5TbGF2ZSByZWNlaXZlciB0byBzZW5kZXIgY2xvY2s8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6bnRwLXN5bmM8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlN5bmMgb24gTlRQIGNsb2NrPC9OSUNLPgotPEJMVVJCPlN5bmNocm9uaXplIHJlY2VpdmVkIHN0cmVhbXMgdG8gdGhlIE5UUCBjbG9jay48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6dXNlLXBpcGVsaW5lLWNsb2NrPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Vc2UgcGlwZWxpbmUgY2xvY2s8L05JQ0s+Ci08QkxVUkI+VXNlIHRoZSBwaXBlbGluZSBydW5uaW5nLXRpbWUgdG8gc2V0IHRoZSBOVFAgdGltZSBpbiB0aGUgUlRDUCBTUiBtZXNzYWdlcyAoREVQUkVDQVRFRDogVXNlIG50cC10aW1lLXNvdXJjZSBwcm9wZXJ0eSkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46OnJ0Y3Atc3luYzwvTkFNRT4KLTxUWVBFPkdzdFJUQ1BTeW5jPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRDUCBTeW5jPC9OSUNLPgotPEJMVVJCPlVzZSBvZiBSVENQIFNSIGluIHN5bmNocm9uaXphdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+YWx3YXlzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46OnJ0Y3Atc3luYy1pbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRDUCBTeW5jIEludGVydmFsPC9OSUNLPgotPEJMVVJCPlJUQ1AgU1IgaW50ZXJ2YWwgc3luY2hyb25pemF0aW9uIChtcykgKDAgPSBhbHdheXMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46OmRyb3Atb24tbGF0ZW5jeTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RHJvcCBidWZmZXJzIHdoZW4gbWF4aW11bSBsYXRlbmN5IGlzIHJlYWNoZWQ8L05JQ0s+Ci08QkxVUkI+VGVsbHMgdGhlIGppdHRlcmJ1ZmZlciB0byBuZXZlciBleGNlZWQgdGhlIGdpdmVuIGxhdGVuY3kgaW4gc2l6ZS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6ZG8tc3luYy1ldmVudDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RG8gU3luYyBFdmVudDwvTklDSz4KLTxCTFVSQj5TZW5kIGV2ZW50IGRvd25zdHJlYW0gd2hlbiBhIHN0cmVhbSBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHNlbmRlci48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6ZG8tcmV0cmFuc21pc3Npb248L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRvIHJldHJhbnNtaXNzaW9uPC9OSUNLPgotPEJMVVJCPkVuYWJsZSByZXRyYW5zbWlzc2lvbiBvbiBhbGwgc3RyZWFtcy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6cnRwLXByb2ZpbGU8L05BTUU+Ci08VFlQRT5Hc3RSVFBQcm9maWxlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRQIFByb2ZpbGU8L05JQ0s+Ci08QkxVUkI+RGVmYXVsdCBSVFAgcHJvZmlsZSBvZiBuZXdseSBjcmVhdGVkIHNlc3Npb25zLjwvQkxVUkI+Ci08REVGQVVMVD5HU1RfUlRQX1BST0ZJTEVfQVZQPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46Om50cC10aW1lLXNvdXJjZTwvTkFNRT4KLTxUWVBFPkdzdFJ0cE50cFRpbWVTb3VyY2U8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5OVFAgVGltZSBTb3VyY2U8L05JQ0s+Ci08QkxVUkI+TlRQIHRpbWUgc291cmNlIGZvciBSVENQIHBhY2tldHMuPC9CTFVSQj4KLTxERUZBVUxUPk5UUCB0aW1lIGJhc2VkIG9uIHJlYWx0aW1lIGNsb2NrPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46Om1heC1kcm9wb3V0LXRpbWU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBkcm9wb3V0IHRpbWU8L05JQ0s+Ci08QkxVUkI+VGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNzaW5nIHBhY2tldHMgdG9sZXJhdGVkLjwvQkxVUkI+Ci08REVGQVVMVD42MDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwQmluOjptYXgtbWlzb3JkZXItdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IG1pc29yZGVyIHRpbWU8L05JQ0s+Ci08QkxVUkI+VGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNvcmRlcmVkIHBhY2tldHMgdG9sZXJhdGVkLjwvQkxVUkI+Ci08REVGQVVMVD4yMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46Om1heC1ydGNwLXJ0cC10aW1lLWRpZmY8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBSVENQIFJUUCBUaW1lIERpZmY8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBSVFAgdGltZSBpbiBSVENQIFNScyBpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6cnRjcC1zeW5jLXNlbmQtdGltZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRDUCBTeW5jIFNlbmQgVGltZTwvTklDSz4KLTxCTFVSQj5Vc2Ugc2VuZCB0aW1lIG9yIGNhcHR1cmUgdGltZSBmb3IgUlRDUCBzeW5jIChUUlVFID0gc2VuZCB0aW1lLCBGQUxTRSA9IGNhcHR1cmUgdGltZSkuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEJpbjo6cmZjNzI3My1zeW5jPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TeW5jIG9uIFJGQzcyNzMgY2xvY2s8L05JQ0s+Ci08QkxVUkI+U3luY2hyb25pemUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgUkZDNzI3MyBjbG9jayAocmVxdWlyZXMgY2xvY2sgYW5kIG9mZnNldCB0byBiZSBwcm92aWRlZCkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBCaW46Om1heC1zdHJlYW1zPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXggU3RyZWFtczwvTklDSz4KLTxCTFVSQj5UaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtcyB0byBjcmVhdGUgZm9yIG9uZSBzZXNzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD40Mjk0OTY3Mjk1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6OmRvLWxvc3Q8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRvIExvc3Q8L05JQ0s+Ci08QkxVUkI+U2VuZCBhbiBldmVudCBkb3duc3RyZWFtIHdoZW4gYSBwYWNrZXQgaXMgbG9zdC48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6ZHJvcC1vbi1sYXRlbmN5PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ecm9wIGJ1ZmZlcnMgd2hlbiBtYXhpbXVtIGxhdGVuY3kgaXMgcmVhY2hlZDwvTklDSz4KLTxCTFVSQj5UZWxscyB0aGUgaml0dGVyYnVmZmVyIHRvIG5ldmVyIGV4Y2VlZCB0aGUgZ2l2ZW4gbGF0ZW5jeSBpbiBzaXplLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjpsYXRlbmN5PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgbGF0ZW5jeSBpbiBtczwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgbXMgdG8gYnVmZmVyLjwvQkxVUkI+Ci08REVGQVVMVD4yMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6dHMtb2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VGltZXN0YW1wIE9mZnNldDwvTklDSz4KLTxCTFVSQj5BZGp1c3QgYnVmZmVyIHRpbWVzdGFtcHMgd2l0aCBvZmZzZXQgaW4gbmFub3NlY29uZHMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6bW9kZTwvTkFNRT4KLTxUWVBFPlJUUEppdHRlckJ1ZmZlck1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Nb2RlPC9OSUNLPgotPEJMVVJCPkNvbnRyb2wgdGhlIGJ1ZmZlcmluZyBhbGdvcml0aG0gaW4gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD5TbGF2ZSByZWNlaXZlciB0byBzZW5kZXIgY2xvY2s8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cGVyY2VudDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5wZXJjZW50PC9OSUNLPgotPEJMVVJCPlRoZSBidWZmZXIgZmlsbGVkIHBlcmNlbnQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6ZG8tcmV0cmFuc21pc3Npb248L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRvIFJldHJhbnNtaXNzaW9uPC9OSUNLPgotPEJMVVJCPlNlbmQgcmV0cmFuc21pc3Npb24gZXZlbnRzIHVwc3RyZWFtIHdoZW4gYSBwYWNrZXQgaXMgbGF0ZS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LWRlbGF5PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVFggRGVsYXk8L05JQ0s+Ci08QkxVUkI+RXh0cmEgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBzZW5kaW5nIHJldHJhbnNtaXNzaW9uIGV2ZW50ICgtMSBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjpydHgtZGVsYXktcmVvcmRlcjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRYIERlbGF5IFJlb3JkZXI8L05JQ0s+Ci08QkxVUkI+U2VuZGluZyByZXRyYW5zbWlzc2lvbiBldmVudCB3aGVuIHRoaXMgbXVjaCByZW9yZGVyaW5nICgwIGRpc2FibGUsIC0xIGF1dG9tYXRpYykuPC9CTFVSQj4KLTxERUZBVUxUPjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LXJldHJ5LXBlcmlvZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRYIFJldHJ5IFBlcmlvZDwvTklDSz4KLTxCTFVSQj5UcnkgdG8gZ2V0IGEgcmV0cmFuc21pc3Npb24gZm9yIHRoaXMgbWFueSBtcyAoLTEgYXV0b21hdGljKS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LXJldHJ5LXRpbWVvdXQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJUWCBSZXRyeSBUaW1lb3V0PC9OSUNLPgotPEJMVVJCPlJldHJ5IHNlbmRpbmcgYSB0cmFuc21pc3Npb24gZXZlbnQgYWZ0ZXIgdGhpcyB0aW1lb3V0IGluIG1zICgtMSBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjpzdGF0czwvTkFNRT4KLTxUWVBFPkdzdFN0cnVjdHVyZSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlN0YXRpc3RpY3M8L05JQ0s+Ci08QkxVUkI+VmFyaW91cyBzdGF0aXN0aWNzLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LW1pbi1kZWxheTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWluaW11bSBSVFggRGVsYXk8L05JQ0s+Ci08QkxVUkI+TWluaW11bSB0aW1lIGluIG1zIHRvIHdhaXQgYmVmb3JlIHNlbmRpbmcgcmV0cmFuc21pc3Npb24gZXZlbnQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LW1pbi1yZXRyeS10aW1lb3V0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVFggTWluIFJldHJ5IFRpbWVvdXQ8L05JQ0s+Ci08QkxVUkI+TWluaW11bSB0aW1lb3V0IGJldHdlZW4gc2VuZGluZyBhIHRyYW5zbWlzc2lvbiBldmVudCBpbiBtcyAoLTEgYXV0b21hdGljKS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LW1heC1yZXRyaWVzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVFggTWF4IFJldHJpZXM8L05JQ0s+Ci08QkxVUkI+VGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgdG8gcmVxdWVzdCBhIHJldHJhbnNtaXNzaW9uLiAoLTEgbm90IGxpbWl0ZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjpydHgtbmV4dC1zZXFudW08L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJUWCBuZXh0IHNlcW51bTwvTklDSz4KLTxCTFVSQj5Fc3RpbWF0ZSB3aGVuIHRoZSBuZXh0IHBhY2tldCBzaG91bGQgYXJyaXZlIGFuZCBzY2hlZHVsZSBhIHJldHJhbnNtaXNzaW9uIHJlcXVlc3QgZm9yIGl0LjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6Om1heC1kcm9wb3V0LXRpbWU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBkcm9wb3V0IHRpbWU8L05JQ0s+Ci08QkxVUkI+VGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNzaW5nIHBhY2tldHMgdG9sZXJhdGVkLjwvQkxVUkI+Ci08REVGQVVMVD42MDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjptYXgtbWlzb3JkZXItdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IG1pc29yZGVyIHRpbWU8L05JQ0s+Ci08QkxVUkI+VGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNvcmRlcmVkIHBhY2tldHMgdG9sZXJhdGVkLjwvQkxVUkI+Ci08REVGQVVMVD4yMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6Om1heC1ydGNwLXJ0cC10aW1lLWRpZmY8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBSVENQIFJUUCBUaW1lIERpZmY8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBSVFAgdGltZSBpbiBSVENQIFNScyBpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6cmZjNzI3My1zeW5jPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TeW5jIG9uIFJGQzcyNzMgY2xvY2s8L05JQ0s+Ci08QkxVUkI+U3luY2hyb25pemUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgUkZDNzI3MyBjbG9jayAocmVxdWlyZXMgY2xvY2sgYW5kIG9mZnNldCB0byBiZSBwcm92aWRlZCkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6OnJ0eC1kZWFkbGluZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRYIERlYWRsaW5lIChtcyk8L05JQ0s+Ci08QkxVUkI+VGhlIGRlYWRsaW5lIGZvciBhIHZhbGlkIFJUWCByZXF1ZXN0IGluIG1pbGxpc2Vjb25kcy4gKC0xIGF1dG9tYXRpYykuPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6OnJ0eC1zdGF0cy10aW1lb3V0PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVFggU3RhdGlzdGljcyBUaW1lb3V0PC9OSUNLPgotPEJMVVJCPlRoZSB0aW1lIHRvIHdhaXQgZm9yIGEgcmV0cmFuc21pdHRlZCBwYWNrZXQgYWZ0ZXIgaXQgaGFzIGJlZW4gY29uc2lkZXJlZCBsb3N0IGluIG9yZGVyIHRvIGNvbGxlY3Qgc3RhdGlzdGljcyAobXMpLjwvQkxVUkI+Ci08REVGQVVMVD4xMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpiYW5kd2lkdGg8L05BTUU+Ci08VFlQRT5nZG91YmxlPC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5UaGUgYmFuZHdpZHRoIG9mIHRoZSBzZXNzaW9uIGluIGJ5dGVzIHBlciBzZWNvbmQgKDAgZm9yIGF1dG8tZGlzY292ZXIpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjppbnRlcm5hbC1zZXNzaW9uPC9OQU1FPgotPFRZUEU+UlRQU2Vzc2lvbio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkludGVybmFsIFNlc3Npb248L05JQ0s+Ci08QkxVUkI+VGhlIGludGVybmFsIFJUUFNlc3Npb24gb2JqZWN0LjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFNlc3Npb246Om51bS1hY3RpdmUtc291cmNlczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5OdW0gQWN0aXZlIFNvdXJjZXM8L05JQ0s+Ci08QkxVUkI+VGhlIG51bWJlciBvZiBhY3RpdmUgc291cmNlcyBpbiB0aGUgc2Vzc2lvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6bnVtLXNvdXJjZXM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+TnVtIFNvdXJjZXM8L05JQ0s+Ci08QkxVUkI+VGhlIG51bWJlciBvZiBzb3VyY2VzIGluIHRoZSBzZXNzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpydGNwLWZyYWN0aW9uPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVENQIEZyYWN0aW9uPC9OSUNLPgotPEJMVVJCPlRoZSBSVENQIGJhbmR3aWR0aCBvZiB0aGUgc2Vzc2lvbiBpbiBieXRlcyBwZXIgc2Vjb25kIChvciBhcyBhIHJlYWwgZnJhY3Rpb24gb2YgdGhlIFJUUCBiYW5kd2lkdGggaWYgPCAxLjApLjwvQkxVUkI+Ci08REVGQVVMVD4wLjA1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpzZGVzPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNERVM8L05JQ0s+Ci08QkxVUkI+VGhlIFNERVMgaXRlbXMgb2YgdGhpcyBzZXNzaW9uLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFNlc3Npb246OnJ0Y3AtcnItYmFuZHdpZHRoPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVENQIFJSIGJhbmR3aWR0aDwvTklDSz4KLTxCTFVSQj5UaGUgUlRDUCBiYW5kd2lkdGggdXNlZCBmb3IgcmVjZWl2ZXJzIGluIGJ5dGVzIHBlciBzZWNvbmQgKC0xID0gZGVmYXVsdCkuPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpydGNwLXJzLWJhbmR3aWR0aDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRDUCBSUyBiYW5kd2lkdGg8L05JQ0s+Ci08QkxVUkI+VGhlIFJUQ1AgYmFuZHdpZHRoIHVzZWQgZm9yIHNlbmRlcnMgaW4gYnl0ZXMgcGVyIHNlY29uZCAoLTEgPSBkZWZhdWx0KS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFNlc3Npb246OnVzZS1waXBlbGluZS1jbG9jazwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VXNlIHBpcGVsaW5lIGNsb2NrPC9OSUNLPgotPEJMVVJCPlVzZSB0aGUgcGlwZWxpbmUgcnVubmluZy10aW1lIHRvIHNldCB0aGUgTlRQIHRpbWUgaW4gdGhlIFJUQ1AgU1IgbWVzc2FnZXMgKERFUFJFQ0FURUQ6IFVzZSBudHAtdGltZS1zb3VyY2UgcHJvcGVydHkpLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6cnRjcC1taW4taW50ZXJ2YWw8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWluaW11bSBSVENQIGludGVydmFsPC9OSUNLPgotPEJMVVJCPk1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBSZWd1bGFyIFJUQ1AgcGFja2V0IChpbiBucykuPC9CTFVSQj4KLTxERUZBVUxUPjUwMDAwMDAwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFNlc3Npb246OnByb2JhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TnVtYmVyIG9mIHByb2JhdGlvbnM8L05JQ0s+Ci08QkxVUkI+Q29uc2VjdXRpdmUgcGFja2V0IHNlcXVlbmNlIG51bWJlcnMgdG8gYWNjZXB0IHRoZSBzb3VyY2UuPC9CTFVSQj4KLTxERUZBVUxUPjI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFNlc3Npb246OnN0YXRzPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+U3RhdGlzdGljczwvTklDSz4KLTxCTFVSQj5WYXJpb3VzIHN0YXRpc3RpY3MuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6cnRwLXByb2ZpbGU8L05BTUU+Ci08VFlQRT5Hc3RSVFBQcm9maWxlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UlRQIFByb2ZpbGU8L05JQ0s+Ci08QkxVUkI+UlRQIHByb2ZpbGUgdG8gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD5HU1RfUlRQX1BST0ZJTEVfQVZQPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpudHAtdGltZS1zb3VyY2U8L05BTUU+Ci08VFlQRT5Hc3RSdHBOdHBUaW1lU291cmNlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TlRQIFRpbWUgU291cmNlPC9OSUNLPgotPEJMVVJCPk5UUCB0aW1lIHNvdXJjZSBmb3IgUlRDUCBwYWNrZXRzLjwvQkxVUkI+Ci08REVGQVVMVD5OVFAgdGltZSBiYXNlZCBvbiByZWFsdGltZSBjbG9jazwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6bWF4LWRyb3BvdXQtdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IGRyb3BvdXQgdGltZTwvTklDSz4KLTxCTFVSQj5UaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc3NpbmcgcGFja2V0cyB0b2xlcmF0ZWQuPC9CTFVSQj4KLTxERUZBVUxUPjYwMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjptYXgtbWlzb3JkZXItdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IG1pc29yZGVyIHRpbWU8L05JQ0s+Ci08QkxVUkI+VGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNvcmRlcmVkIHBhY2tldHMgdG9sZXJhdGVkLjwvQkxVUkI+Ci08REVGQVVMVD4yMDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpydGNwLXN5bmMtc2VuZC10aW1lPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SVENQIFN5bmMgU2VuZCBUaW1lPC9OSUNLPgotPEJMVVJCPlVzZSBzZW5kIHRpbWUgb3IgY2FwdHVyZSB0aW1lIGZvciBSVENQIHN5bmMgKFRSVUUgPSBzZW5kIHRpbWUsIEZBTFNFID0gY2FwdHVyZSB0aW1lKS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwUnR4U2VuZDo6bWF4LXNpemUtdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IFNpemUgVGltZTwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgbXMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBSdHhTZW5kOjptYXgtc2l6ZS1wYWNrZXRzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMzI3Njc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBTaXplIFBhY2tldHM8L05JQ0s+Ci08QkxVUkI+QW1vdW50IG9mIHBhY2tldHMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFJ0eFNlbmQ6Om51bS1ydHgtcmVxdWVzdHM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+TnVtIFJUWCBSZXF1ZXN0czwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gZXZlbnRzIHJlY2VpdmVkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBSdHhTZW5kOjpudW0tcnR4LXBhY2tldHM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+TnVtIFJUWCBQYWNrZXRzPC9OSUNLPgotPEJMVVJCPiBOdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gcGFja2V0cyBzZW50LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBSdHhTZW5kOjpwYXlsb2FkLXR5cGUtbWFwPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBheWxvYWQgVHlwZSBNYXA8L05JQ0s+Ci08QkxVUkI+TWFwIG9mIG9yaWdpbmFsIHBheWxvYWQgdHlwZXMgdG8gdGhlaXIgcmV0cmFuc21pc3Npb24gcGF5bG9hZCB0eXBlcy48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBSdHhTZW5kOjpzc3JjLW1hcDwvTkFNRT4KLTxUWVBFPkdzdFN0cnVjdHVyZSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz53PC9GTEFHUz4KLTxOSUNLPlNTUkMgTWFwPC9OSUNLPgotPEJMVVJCPk1hcCBvZiBTU1JDcyB0byB0aGVpciByZXRyYW5zbWlzc2lvbiBTU1JDcyBmb3IgU1NSQy1tdWx0aXBsZXhlZCBtb2RlIChkZWZhdWx0ID0gcmFuZG9tKS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBSdHhSZWNlaXZlOjpudW0tcnR4LXJlcXVlc3RzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPk51bSBSVFggUmVxdWVzdHM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIGV2ZW50cyByZWNlaXZlZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwUnR4UmVjZWl2ZTo6bnVtLXJ0eC1wYWNrZXRzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPk51bSBSVFggUGFja2V0czwvTklDSz4KLTxCTFVSQj4gTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHBhY2tldHMgcmVjZWl2ZWQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFJ0eFJlY2VpdmU6Om51bS1ydHgtYXNzb2MtcGFja2V0czwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5OdW0gUlRYIEFzc29jaWF0ZWQgUGFja2V0czwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gcGFja2V0cyBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHJldHJhbnNtaXNzaW9uIHJlcXVlc3RzLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBSdHhSZWNlaXZlOjpwYXlsb2FkLXR5cGUtbWFwPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBheWxvYWQgVHlwZSBNYXA8L05JQ0s+Ci08QkxVUkI+TWFwIG9mIG9yaWdpbmFsIHBheWxvYWQgdHlwZXMgdG8gdGhlaXIgcmV0cmFuc21pc3Npb24gcGF5bG9hZCB0eXBlcy48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6ZGV2aWNlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGV2aWNlPC9OSUNLPgotPEJMVVJCPkRldmljZSBsb2NhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+Ii9kZXYvdmlkZW8xIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OmRldmljZS1mZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5GaWxlIGRlc2NyaXB0b3I8L05JQ0s+Ci08QkxVUkI+RmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UuPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6ZGV2aWNlLW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkRldmljZSBuYW1lPC9OSUNLPgotPEJMVVJCPk5hbWUgb2YgdGhlIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OmZsYWdzPC9OQU1FPgotPFRZUEU+R3N0VjRsMkRldmljZVR5cGVGbGFnczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+RmxhZ3M8L05JQ0s+Ci08QkxVUkI+RGV2aWNlIHR5cGUgZmxhZ3MuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6Om92ZXJsYXktaGVpZ2h0PC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5PdmVybGF5IGhlaWdodDwvTklDSz4KLTxCTFVSQj5UaGUgaGVpZ2h0IG9mIHRoZSB2aWRlbyBvdmVybGF5OyBkZWZhdWx0IGlzIGVxdWFsIHRvIG5lZ290aWF0ZWQgaW1hZ2UgaGVpZ2h0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6b3ZlcmxheS1sZWZ0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk92ZXJsYXkgbGVmdDwvTklDSz4KLTxCTFVSQj5UaGUgbGVmdG1vc3QgKHgpIGNvb3JkaW5hdGUgb2YgdGhlIHZpZGVvIG92ZXJsYXk7IHRvcCBsZWZ0IGNvcm5lciBvZiBzY3JlZW4gaXMgMCwwLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6b3ZlcmxheS10b3A8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+T3ZlcmxheSB0b3A8L05JQ0s+Ci08QkxVUkI+VGhlIHRvcG1vc3QgKHkpIGNvb3JkaW5hdGUgb2YgdGhlIHZpZGVvIG92ZXJsYXk7IHRvcCBsZWZ0IGNvcm5lciBvZiBzY3JlZW4gaXMgMCwwLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6b3ZlcmxheS13aWR0aDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+T3ZlcmxheSB3aWR0aDwvTklDSz4KLTxCTFVSQj5UaGUgd2lkdGggb2YgdGhlIHZpZGVvIG92ZXJsYXk7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSB3aWR0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OmJyaWdodG5lc3M8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnJpZ2h0bmVzczwvTklDSz4KLTxCTFVSQj5QaWN0dXJlIGJyaWdodG5lc3MsIG9yIG1vcmUgcHJlY2lzZWx5LCB0aGUgYmxhY2sgbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTaW5rOjpjb250cmFzdDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db250cmFzdDwvTklDSz4KLTxCTFVSQj5QaWN0dXJlIGNvbnRyYXN0IG9yIGx1bWEgZ2Fpbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6Omh1ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5IdWU8L05JQ0s+Ci08QkxVUkI+SHVlIG9yIGNvbG9yIGJhbGFuY2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTaW5rOjpzYXR1cmF0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNhdHVyYXRpb248L05JQ0s+Ci08QkxVUkI+UGljdHVyZSBjb2xvciBzYXR1cmF0aW9uIG9yIGNocm9tYSBnYWluLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6Y3JvcC1oZWlnaHQ8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNyb3AgaGVpZ2h0PC9OSUNLPgotPEJMVVJCPlRoZSBoZWlnaHQgb2YgdGhlIHZpZGVvIGNyb3A7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSBoZWlnaHQuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTaW5rOjpjcm9wLWxlZnQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q3JvcCBsZWZ0PC9OSUNLPgotPEJMVVJCPlRoZSBsZWZ0bW9zdCAoeCkgY29vcmRpbmF0ZSBvZiB0aGUgdmlkZW8gY3JvcDsgdG9wIGxlZnQgY29ybmVyIG9mIGltYWdlIGlzIDAsMC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OmNyb3AtdG9wPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNyb3AgdG9wPC9OSUNLPgotPEJMVVJCPlRoZSB0b3Btb3N0ICh5KSBjb29yZGluYXRlIG9mIHRoZSB2aWRlbyBjcm9wOyB0b3AgbGVmdCBjb3JuZXIgb2YgaW1hZ2UgaXMgMCwwLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWNGwyU2luazo6Y3JvcC13aWR0aDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q3JvcCB3aWR0aDwvTklDSz4KLTxCTFVSQj5UaGUgd2lkdGggb2YgdGhlIHZpZGVvIGNyb3A7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSB3aWR0aC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OmlvLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RWNGwySU9Nb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SU8gbW9kZTwvTklDSz4KLTxCTFVSQj5JL08gbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+R1NUX1Y0TDJfSU9fQVVUTzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6Om5vcm08L05BTUU+Ci08VFlQRT5WNEwyX1RWX25vcm1zPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VFYgbm9ybTwvTklDSz4KLTxCTFVSQj52aWRlbyBzdGFuZGFyZC48L0JMVVJCPgotPERFRkFVTFQ+bm9uZTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OmV4dHJhLWNvbnRyb2xzPC9OQU1FPgotPFRZUEU+R3N0U3RydWN0dXJlKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkV4dHJhIENvbnRyb2xzPC9OSUNLPgotPEJMVVJCPkV4dHJhIHY0bDIgY29udHJvbHMgKENJRHMpIGZvciB0aGUgZGV2aWNlLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJTaW5rOjpmb3JjZS1hc3BlY3QtcmF0aW88L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZvcmNlIGFzcGVjdCByYXRpbzwvTklDSz4KLTxCTFVSQj5XaGVuIGVuYWJsZWQsIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gd2lsbCBiZSBlbmZvcmNlZC48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VjRsMlNpbms6OnBpeGVsLWFzcGVjdC1yYXRpbzwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBpeGVsIEFzcGVjdCBSYXRpbzwvTklDSz4KLTxCTFVSQj5PdmVyd3JpdGUgdGhlIHBpeGVsIGFzcGVjdCByYXRpbyBvZiB0aGUgZGV2aWNlLjwvQkxVUkI+Ci08REVGQVVMVD4iMS8xIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U2hhcGVXaXBlOjpib3JkZXI8L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJvcmRlcjwvTklDSz4KLTxCTFVSQj5Cb3JkZXIgb2YgdGhlIG1hc2suPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNoYXBlV2lwZTo6cG9zaXRpb248L05BTUU+Ci08VFlQRT5nZmxvYXQ8L1RZUEU+Ci08UkFOR0U+WzAsMV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBvc2l0aW9uPC9OSUNLPgotPEJMVVJCPlBvc2l0aW9uIG9mIHRoZSBtYXNrLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbHZNdXg6OnN0cmVhbWFibGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnN0cmVhbWFibGU8L05JQ0s+Ci08QkxVUkI+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdENhcHNTZXR0ZXI6OmNhcHM8L05BTUU+Ci08VFlQRT5Hc3RDYXBzKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1lcmdlIGNhcHM8L05JQ0s+Ci08QkxVUkI+TWVyZ2UgdGhlc2UgY2FwcyAodGhlcmVieSBvdmVyd3JpdGluZykgaW4gdGhlIHN0cmVhbS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RDYXBzU2V0dGVyOjpqb2luPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Kb2luPC9OSUNLPgotPEJMVVJCPk1hdGNoIGluY29taW5nIGNhcHMnIG1pbWUtdHlwZSB0byBtaW1lLXR5cGUgb2YgcHJvdmlkZWQgY2Fwcy48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0Q2Fwc1NldHRlcjo6cmVwbGFjZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVwbGFjZTwvTklDSz4KLTxCTFVSQj5Ecm9wIGZpZWxkcyBvZiBpbmNvbWluZyBjYXBzLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T3NzNFNvdXJjZTo6ZGV2aWNlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGV2aWNlPC9OSUNLPgotPEJMVVJCPk9TUzQgZGV2aWNlIChlLmcuIC9kZXYvb3NzL2hkYXVkaW8wL3BjbTAgb3IgL2Rldi9kc3BOKSAoTlVMTCA9IHVzZSBmaXJzdCBhdmFpbGFibGUgZGV2aWNlKS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T3NzNFNvdXJjZTo6ZGV2aWNlLW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPkRldmljZSBuYW1lPC9OSUNLPgotPEJMVVJCPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T3NzNFNpbms6OmRldmljZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRldmljZTwvTklDSz4KLTxCTFVSQj5PU1M0IGRldmljZSAoZS5nLiAvZGV2L29zcy9oZGF1ZGlvMC9wY20wIG9yIC9kZXYvZHNwTikgKE5VTEwgPSB1c2UgZmlyc3QgYXZhaWxhYmxlIHBsYXliYWNrIGRldmljZSkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE9zczRTaW5rOjpkZXZpY2UtbmFtZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+RGV2aWNlIG5hbWU8L05JQ0s+Ci08QkxVUkI+SHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGUgc291bmQgZGV2aWNlLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RPc3M0U2luazo6bXV0ZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TXV0ZTwvTklDSz4KLTxCTFVSQj5NdXRlIHN0YXRlIG9mIHRoaXMgc3RyZWFtLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0T3NzNFNpbms6OnZvbHVtZTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+WzAsMTBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Wb2x1bWU8L05JQ0s+Ci08QkxVUkI+TGluZWFyIHZvbHVtZSBvZiB0aGlzIHN0cmVhbSwgMS4wPTEwMCUuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFRoZW9yYVBheTo6Y29uZmlnLWludGVydmFsPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMzYwMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q29uZmlnIFNlbmQgSW50ZXJ2YWw8L05JQ0s+Ci08QkxVUkI+U2VuZCBDb25maWcgSW5zZXJ0aW9uIEludGVydmFsIGluIHNlY29uZHMgKGNvbmZpZ3VyYXRpb24gaGVhZGVycyB3aWxsIGJlIG11bHRpcGxleGVkIGluIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRldGVjdGVkLikgKDAgPSBkaXNhYmxlZCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZpZGVvTWl4ZXIyOjpiYWNrZ3JvdW5kPC9OQU1FPgotPFRZUEU+R3N0VmlkZW9NaXhlcjJCYWNrZ3JvdW5kPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QmFja2dyb3VuZDwvTklDSz4KLTxCTFVSQj5CYWNrZ3JvdW5kIHR5cGUuPC9CTFVSQj4KLTxERUZBVUxUPkNoZWNrZXIgcGF0dGVybjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SmFja0F1ZGlvU3JjOjpjbGllbnQ8L05BTUU+Ci08VFlQRT5KYWNrQ2xpZW50KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkphY2tDbGllbnQ8L05JQ0s+Ci08QkxVUkI+SGFuZGxlIGZvciBqYWNrIGNsaWVudC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RKYWNrQXVkaW9TcmM6OmNvbm5lY3Q8L05BTUU+Ci08VFlQRT5Hc3RKYWNrQ29ubmVjdDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvbm5lY3Q8L05JQ0s+Ci08QkxVUkI+U3BlY2lmeSBob3cgdGhlIGlucHV0IHBvcnRzIHdpbGwgYmUgY29ubmVjdGVkLjwvQkxVUkI+Ci08REVGQVVMVD5BdXRvbWF0aWNhbGx5IGNvbm5lY3QgcG9ydHMgdG8gcGh5c2ljYWwgcG9ydHM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEphY2tBdWRpb1NyYzo6c2VydmVyPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2VydmVyPC9OSUNLPgotPEJMVVJCPlRoZSBKYWNrIHNlcnZlciB0byBjb25uZWN0IHRvIChOVUxMID0gZGVmYXVsdCkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEphY2tBdWRpb1NyYzo6Y2xpZW50LW5hbWU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DbGllbnQgbmFtZTwvTklDSz4KLTxCTFVSQj5UaGUgY2xpZW50IG5hbWUgb2YgdGhlIEphY2sgaW5zdGFuY2UgKE5VTEwgPSBkZWZhdWx0KS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SmFja0F1ZGlvU3JjOjp0cmFuc3BvcnQ8L05BTUU+Ci08VFlQRT5Hc3RKYWNrVHJhbnNwb3J0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VHJhbnNwb3J0IG1vZGU8L05JQ0s+Ci08QkxVUkI+SmFjayB0cmFuc3BvcnQgYmVoYXZpb3VyIG9mIHRoZSBjbGllbnQuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SmFja0F1ZGlvU3JjOjpwb3J0LXBhdHRlcm48L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wb3J0IHBhdHRlcm48L05JQ0s+Ci08QkxVUkI+QSBwYXR0ZXJuIHRvIHNlbGVjdCB3aGljaCBwb3J0cyB0byBjb25uZWN0IHRvIChOVUxMID0gZmlyc3QgcGh5c2ljYWwgcG9ydHMpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RKYWNrQXVkaW9TaW5rOjpjbGllbnQ8L05BTUU+Ci08VFlQRT5KYWNrQ2xpZW50KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkphY2tDbGllbnQ8L05JQ0s+Ci08QkxVUkI+SGFuZGxlIGZvciBqYWNrIGNsaWVudC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RKYWNrQXVkaW9TaW5rOjpjb25uZWN0PC9OQU1FPgotPFRZUEU+R3N0SmFja0Nvbm5lY3Q8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db25uZWN0PC9OSUNLPgotPEJMVVJCPlNwZWNpZnkgaG93IHRoZSBvdXRwdXQgcG9ydHMgd2lsbCBiZSBjb25uZWN0ZWQuPC9CTFVSQj4KLTxERUZBVUxUPkF1dG9tYXRpY2FsbHkgY29ubmVjdCBwb3J0cyB0byBwaHlzaWNhbCBwb3J0czwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SmFja0F1ZGlvU2luazo6c2VydmVyPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2VydmVyPC9OSUNLPgotPEJMVVJCPlRoZSBKYWNrIHNlcnZlciB0byBjb25uZWN0IHRvIChOVUxMID0gZGVmYXVsdCkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEphY2tBdWRpb1Npbms6OmNsaWVudC1uYW1lPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2xpZW50IG5hbWU8L05JQ0s+Ci08QkxVUkI+VGhlIGNsaWVudCBuYW1lIG9mIHRoZSBKYWNrIGluc3RhbmNlIChOVUxMID0gZGVmYXVsdCkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEphY2tBdWRpb1Npbms6OnRyYW5zcG9ydDwvTkFNRT4KLTxUWVBFPkdzdEphY2tUcmFuc3BvcnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UcmFuc3BvcnQgbW9kZTwvTklDSz4KLTxCTFVSQj5KYWNrIHRyYW5zcG9ydCBiZWhhdmlvdXIgb2YgdGhlIGNsaWVudC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RKYWNrQXVkaW9TaW5rOjpwb3J0LXBhdHRlcm48L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wb3J0IHBhdHRlcm48L05JQ0s+Ci08QkxVUkI+QSBwYXR0ZXJuIHRvIHNlbGVjdCB3aGljaCBwb3J0cyB0byBjb25uZWN0IHRvIChOVUxMID0gZmlyc3QgcGh5c2ljYWwgcG9ydHMpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RGbGFjUGFyc2U6OmNoZWNrLWZyYW1lLWNoZWNrc3VtczwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2hlY2sgRnJhbWUgQ2hlY2tzdW1zPC9OSUNLPgotPEJMVVJCPkNoZWNrIHRoZSBvdmVyYWxsIGNoZWNrc3VtcyBvZiBldmVyeSBmcmFtZS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJSYWRpbzo6ZGV2aWNlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmFkaW8gZGV2aWNlIGxvY2F0aW9uPC9OSUNLPgotPEJMVVJCPlZpZGVvNExpbnV4MiByYWRpbyBkZXZpY2UgbG9jYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPiIvZGV2L3JhZGlvMCI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFY0bDJSYWRpbzo6ZnJlcXVlbmN5PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bODc1MDAwMDAsMTA4MDAwMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3RhdGlvbiBmcmVxdWVuY3k8L05JQ0s+Ci08QkxVUkI+U3RhdGlvbiBmcmVxdWVuY3kgaW4gSHouPC9CTFVSQj4KLTxERUZBVUxUPjEwMDAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNdXg6OmR0cy1tZXRob2Q8L05BTUU+Ci08VFlQRT5Hc3RRVE11eER0c01ldGhvZHM8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+ZHRzLW1ldGhvZDwvTklDSz4KLTxCTFVSQj5NZXRob2QgdG8gZGV0ZXJtaW5lIERUUyB0aW1lIChERVBSRUNBVEVEKS48L0JMVVJCPgotPERFRkFVTFQ+cmVvcmRlcjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNdXg6OmZhc3RzdGFydDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Rm9ybWF0IGZpbGUgdG8gZmFzdHN0YXJ0PC9OSUNLPgotPEJMVVJCPklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRVE11eDo6ZmFzdHN0YXJ0LWZpbGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsZSB0byB1c2UgZm9yIHN0b3JpbmcgYnVmZmVyczwvTklDSz4KLTxCTFVSQj5GaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRlbXBvcmFyaWx5IHRvIHN0b3JlIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHdoZW4gY3JlYXRpbmcgYSBmYXN0c3RhcnQgZmlsZS4gSWYgbnVsbCBhIGZpbGVwYXRoIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRVE11eDo6ZnJhZ21lbnQtZHVyYXRpb248L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GcmFnbWVudCBkdXJhdGlvbjwvTklDSz4KLTxCTFVSQj5GcmFnbWVudCBkdXJhdGlvbnMgaW4gbXMgKHByb2R1Y2UgYSBmcmFnbWVudGVkIGZpbGUgaWYgPiAwKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNdXg6Om1vb3YtcmVjb3ZlcnktZmlsZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWxlIHRvIHN0b3JlIGRhdGEgZm9yIHBvc3RlcmlvciBtb292IGF0b20gcmVjb3Zlcnk8L05JQ0s+Ci08QkxVUkI+RmlsZSB0byBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgZm9yIG1vb3YgYXRvbSBtYWtpbmcgbW92aWUgZmlsZSByZWNvdmVyeSBwb3NzaWJsZSBpbiBjYXNlIG9mIGEgY3Jhc2ggZHVyaW5nIG11eGluZy4gTnVsbCBmb3IgZGlzYWJsZWQuIChFeHBlcmltZW50YWwpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRVE11eDo6bW92aWUtdGltZXNjYWxlPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vdmllIHRpbWVzY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lc2NhbGUgdG8gdXNlIGluIHRoZSBtb3ZpZSAodW5pdHMgcGVyIHNlY29uZCkuPC9CTFVSQj4KLTxERUZBVUxUPjE4MDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFFUTXV4OjpwcmVzZW50YXRpb24tdGltZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkluY2x1ZGUgcHJlc2VudGF0aW9uLXRpbWUgaW5mbzwvTklDSz4KLTxCTFVSQj5DYWxjdWxhdGUgYW5kIGluY2x1ZGUgcHJlc2VudGF0aW9uL2NvbXBvc2l0aW9uIHRpbWUgKGluIGFkZGl0aW9uIHRvIGRlY29kaW5nIHRpbWUpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRVE11eDo6c3RyZWFtYWJsZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0cmVhbWFibGU8L05JQ0s+Ci08QkxVUkI+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi4gKERFUFJFQ0FURUQsIG9ubHkgdmFsaWQgZm9yIGZyYWdtZW50ZWQgTVA0KS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFFUTXV4Ojp0cmFrLXRpbWVzY2FsZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRyYWNrIHRpbWVzY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lc2NhbGUgdG8gdXNlIGZvciB0aGUgdHJhY2tzICh1bml0cyBwZXIgc2Vjb25kLCAwIGlzIGF1dG9tYXRpYykuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFFUTXV4OjpyZXNlcnZlZC1ieXRlcy1wZXItc2VjPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMTAwMDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNlcnZlZCBNT09WIGJ5dGVzIHBlciBzZWNvbmQsIHBlciB0cmFjazwvTklDSz4KLTxCTFVSQj5NdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbiBpbnRvIGJ5dGVzIG9mIGhlYWRlciB0byByZXNlcnZlLCBwZXIgc2Vjb25kLCBwZXIgdHJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjU1MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNdXg6OnJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZzwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlJlcG9ydCB0aGUgYXBwcm94aW1hdGUgYW1vdW50IG9mIHJlbWFpbmluZyByZWNvcmRpbmcgc3BhY2UgKG5zKTwvTklDSz4KLTxCTFVSQj5SZXBvcnRzIHRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgcmVtYWluaW5nIG1vb3YgaGVhZGVyIHNwYWNlIHJlc2VydmVkIHVzaW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNdXg6OnJlc2VydmVkLW1heC1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZXNlcnZlZCBtYXhpbXVtIGZpbGUgZHVyYXRpb24gKG5zKTwvTklDSz4KLTxCTFVSQj5XaGVuIHNldCB0byBhIHZhbHVlID4gMCwgcmVzZXJ2ZXMgc3BhY2UgZm9yIGluZGV4IHRhYmxlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvQkxVUkI+Ci08REVGQVVMVD4xODQ0Njc0NDA3MzcwOTU1MTYxNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNdXg6OnJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JbnRlcnZhbCBhdCB3aGljaCB0byB1cGRhdGUgaW5kZXggdGFibGVzIChucyk8L05JQ0s+Ci08QkxVUkI+V2hlbiB1c2VkIHdpdGggcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLCBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgaW5kZXggdGFibGVzIHdpdGggaW5mb3JtYXRpb24gbXV4ZWQgc28gZmFyLjwvQkxVUkI+Ci08REVGQVVMVD4xODQ0Njc0NDA3MzcwOTU1MTYxNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNb292UmVjb3Zlcjo6YnJva2VuLWlucHV0PC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UGF0aCB0byBicm9rZW4gaW5wdXQgZmlsZTwvTklDSz4KLTxCTFVSQj5QYXRoIHRvIGJyb2tlbiBpbnB1dCBmaWxlLiAoSWYgcXRtdXggd2FzIG9uIGZhc3RzdGFydCBtb2RlLCB0aGlzIGZpbGUgaXMgdGhlIGZhc3RzdGFydCBmaWxlKS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNb292UmVjb3Zlcjo6ZmFzdHN0YXJ0LW1vZGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPklmIHRoZSBicm9rZW4gaW5wdXQgaXMgZnJvbSBmYXN0c3RhcnQgbW9kZTwvTklDSz4KLTxCTFVSQj5JZiB0aGUgYnJva2VuIGlucHV0IGlzIGZyb20gZmFzdHN0YXJ0IG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RRVE1vb3ZSZWNvdmVyOjpmaXhlZC1vdXRwdXQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QYXRoIHRvIHdyaXRlIHRoZSBmaXhlZCBmaWxlPC9OSUNLPgotPEJMVVJCPlBhdGggdG8gd3JpdGUgdGhlIGZpeGVkIGZpbGUgdG8gKHVzZWQgYXMgb3V0cHV0KS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UVRNb292UmVjb3Zlcjo6cmVjb3ZlcnktaW5wdXQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QYXRoIHRvIHJlY292ZXJ5IGZpbGU8L05JQ0s+Ci08QkxVUkI+UGF0aCB0byByZWNvdmVyeSBmaWxlICh1c2VkIGFzIGlucHV0KS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TVA0TXV4OjpkdHMtbWV0aG9kPC9OQU1FPgotPFRZUEU+R3N0UVRNdXhEdHNNZXRob2RzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmR0cy1tZXRob2Q8L05JQ0s+Ci08QkxVUkI+TWV0aG9kIHRvIGRldGVybWluZSBEVFMgdGltZSAoREVQUkVDQVRFRCkuPC9CTFVSQj4KLTxERUZBVUxUPnJlb3JkZXI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6ZmFzdHN0YXJ0PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Gb3JtYXQgZmlsZSB0byBmYXN0c3RhcnQ8L05JQ0s+Ci08QkxVUkI+SWYgdGhlIGZpbGUgc2hvdWxkIGJlIGZvcm1hdHRlZCBmb3IgZmFzdHN0YXJ0IChoZWFkZXJzIGZpcnN0KS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6ZmFzdHN0YXJ0LWZpbGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsZSB0byB1c2UgZm9yIHN0b3JpbmcgYnVmZmVyczwvTklDSz4KLTxCTFVSQj5GaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRlbXBvcmFyaWx5IHRvIHN0b3JlIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHdoZW4gY3JlYXRpbmcgYSBmYXN0c3RhcnQgZmlsZS4gSWYgbnVsbCBhIGZpbGVwYXRoIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNUDRNdXg6OmZyYWdtZW50LWR1cmF0aW9uPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJhZ21lbnQgZHVyYXRpb248L05JQ0s+Ci08QkxVUkI+RnJhZ21lbnQgZHVyYXRpb25zIGluIG1zIChwcm9kdWNlIGEgZnJhZ21lbnRlZCBmaWxlIGlmID4gMCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6bW9vdi1yZWNvdmVyeS1maWxlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbGUgdG8gc3RvcmUgZGF0YSBmb3IgcG9zdGVyaW9yIG1vb3YgYXRvbSByZWNvdmVyeTwvTklDSz4KLTxCTFVSQj5GaWxlIHRvIGJlIHVzZWQgdG8gc3RvcmUgZGF0YSBmb3IgbW9vdiBhdG9tIG1ha2luZyBtb3ZpZSBmaWxlIHJlY292ZXJ5IHBvc3NpYmxlIGluIGNhc2Ugb2YgYSBjcmFzaCBkdXJpbmcgbXV4aW5nLiBOdWxsIGZvciBkaXNhYmxlZC4gKEV4cGVyaW1lbnRhbCkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6bW92aWUtdGltZXNjYWxlPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vdmllIHRpbWVzY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lc2NhbGUgdG8gdXNlIGluIHRoZSBtb3ZpZSAodW5pdHMgcGVyIHNlY29uZCkuPC9CTFVSQj4KLTxERUZBVUxUPjE4MDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6cHJlc2VudGF0aW9uLXRpbWU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbmNsdWRlIHByZXNlbnRhdGlvbi10aW1lIGluZm88L05JQ0s+Ci08QkxVUkI+Q2FsY3VsYXRlIGFuZCBpbmNsdWRlIHByZXNlbnRhdGlvbi9jb21wb3NpdGlvbiB0aW1lIChpbiBhZGRpdGlvbiB0byBkZWNvZGluZyB0aW1lKS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TVA0TXV4OjpzdHJlYW1hYmxlPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+U3RyZWFtYWJsZTwvTklDSz4KLTxCTFVSQj5JZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgdG8gYmUgc3RyZWFtZWQgYW5kIGhlbmNlIG5vIGluZGV4ZXMgd3JpdHRlbiBvciBkdXJhdGlvbiB3cml0dGVuLiAoREVQUkVDQVRFRCwgb25seSB2YWxpZCBmb3IgZnJhZ21lbnRlZCBNUDQpLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TVA0TXV4Ojp0cmFrLXRpbWVzY2FsZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRyYWNrIHRpbWVzY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lc2NhbGUgdG8gdXNlIGZvciB0aGUgdHJhY2tzICh1bml0cyBwZXIgc2Vjb25kLCAwIGlzIGF1dG9tYXRpYykuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6cmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYzwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDEwMDAwPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+UmVzZXJ2ZWQgTU9PViBieXRlcyBwZXIgc2Vjb25kLCBwZXIgdHJhY2s8L05JQ0s+Ci08QkxVUkI+TXVsdGlwbGllciBmb3IgY29udmVydGluZyByZXNlcnZlZC1tYXgtZHVyYXRpb24gaW50byBieXRlcyBvZiBoZWFkZXIgdG8gcmVzZXJ2ZSwgcGVyIHNlY29uZCwgcGVyIHRyYWNrLjwvQkxVUkI+Ci08REVGQVVMVD41NTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1QNE11eDo6cmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+UmVwb3J0IHRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgcmVtYWluaW5nIHJlY29yZGluZyBzcGFjZSAobnMpPC9OSUNLPgotPEJMVVJCPlJlcG9ydHMgdGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiByZW1haW5pbmcgbW9vdiBoZWFkZXIgc3BhY2UgcmVzZXJ2ZWQgdXNpbmcgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNUDRNdXg6OnJlc2VydmVkLW1heC1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZXNlcnZlZCBtYXhpbXVtIGZpbGUgZHVyYXRpb24gKG5zKTwvTklDSz4KLTxCTFVSQj5XaGVuIHNldCB0byBhIHZhbHVlID4gMCwgcmVzZXJ2ZXMgc3BhY2UgZm9yIGluZGV4IHRhYmxlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvQkxVUkI+Ci08REVGQVVMVD4xODQ0Njc0NDA3MzcwOTU1MTYxNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TVA0TXV4OjpyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2Q8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SW50ZXJ2YWwgYXQgd2hpY2ggdG8gdXBkYXRlIGluZGV4IHRhYmxlcyAobnMpPC9OSUNLPgotPEJMVVJCPldoZW4gdXNlZCB3aXRoIHJlc2VydmVkLW1heC1kdXJhdGlvbiwgcGVyaW9kaWNhbGx5IHVwZGF0ZXMgdGhlIGluZGV4IHRhYmxlcyB3aXRoIGluZm9ybWF0aW9uIG11eGVkIHNvIGZhci48L0JMVVJCPgotPERFRkFVTFQ+MTg0NDY3NDQwNzM3MDk1NTE2MTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1KMk11eDo6ZHRzLW1ldGhvZDwvTkFNRT4KLTxUWVBFPkdzdFFUTXV4RHRzTWV0aG9kczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kdHMtbWV0aG9kPC9OSUNLPgotPEJMVVJCPk1ldGhvZCB0byBkZXRlcm1pbmUgRFRTIHRpbWUgKERFUFJFQ0FURUQpLjwvQkxVUkI+Ci08REVGQVVMVD5yZW9yZGVyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6OmZhc3RzdGFydDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Rm9ybWF0IGZpbGUgdG8gZmFzdHN0YXJ0PC9OSUNLPgotPEJMVVJCPklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6OmZhc3RzdGFydC1maWxlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZpbGUgdG8gdXNlIGZvciBzdG9yaW5nIGJ1ZmZlcnM8L05JQ0s+Ci08QkxVUkI+RmlsZSB0aGF0IHdpbGwgYmUgdXNlZCB0ZW1wb3JhcmlseSB0byBzdG9yZSBkYXRhIGZyb20gdGhlIHN0cmVhbSB3aGVuIGNyZWF0aW5nIGEgZmFzdHN0YXJ0IGZpbGUuIElmIG51bGwgYSBmaWxlcGF0aCB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TUoyTXV4OjpmcmFnbWVudC1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyYWdtZW50IGR1cmF0aW9uPC9OSUNLPgotPEJMVVJCPkZyYWdtZW50IGR1cmF0aW9ucyBpbiBtcyAocHJvZHVjZSBhIGZyYWdtZW50ZWQgZmlsZSBpZiA+IDApLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6Om1vb3YtcmVjb3ZlcnktZmlsZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWxlIHRvIHN0b3JlIGRhdGEgZm9yIHBvc3RlcmlvciBtb292IGF0b20gcmVjb3Zlcnk8L05JQ0s+Ci08QkxVUkI+RmlsZSB0byBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgZm9yIG1vb3YgYXRvbSBtYWtpbmcgbW92aWUgZmlsZSByZWNvdmVyeSBwb3NzaWJsZSBpbiBjYXNlIG9mIGEgY3Jhc2ggZHVyaW5nIG11eGluZy4gTnVsbCBmb3IgZGlzYWJsZWQuIChFeHBlcmltZW50YWwpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6Om1vdmllLXRpbWVzY2FsZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPj49IDE8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5Nb3ZpZSB0aW1lc2NhbGU8L05JQ0s+Ci08QkxVUkI+VGltZXNjYWxlIHRvIHVzZSBpbiB0aGUgbW92aWUgKHVuaXRzIHBlciBzZWNvbmQpLjwvQkxVUkI+Ci08REVGQVVMVD4xODAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6OnByZXNlbnRhdGlvbi10aW1lPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5jbHVkZSBwcmVzZW50YXRpb24tdGltZSBpbmZvPC9OSUNLPgotPEJMVVJCPkNhbGN1bGF0ZSBhbmQgaW5jbHVkZSBwcmVzZW50YXRpb24vY29tcG9zaXRpb24gdGltZSAoaW4gYWRkaXRpb24gdG8gZGVjb2RpbmcgdGltZSkuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1KMk11eDo6c3RyZWFtYWJsZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0cmVhbWFibGU8L05JQ0s+Ci08QkxVUkI+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi4gKERFUFJFQ0FURUQsIG9ubHkgdmFsaWQgZm9yIGZyYWdtZW50ZWQgTVA0KS48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1KMk11eDo6dHJhay10aW1lc2NhbGU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UcmFjayB0aW1lc2NhbGU8L05JQ0s+Ci08QkxVUkI+VGltZXNjYWxlIHRvIHVzZSBmb3IgdGhlIHRyYWNrcyAodW5pdHMgcGVyIHNlY29uZCwgMCBpcyBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6OnJlc2VydmVkLWJ5dGVzLXBlci1zZWM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAxMDAwMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc2VydmVkIE1PT1YgYnl0ZXMgcGVyIHNlY29uZCwgcGVyIHRyYWNrPC9OSUNLPgotPEJMVVJCPk11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uIGludG8gYnl0ZXMgb2YgaGVhZGVyIHRvIHJlc2VydmUsIHBlciBzZWNvbmQsIHBlciB0cmFjay48L0JMVVJCPgotPERFRkFVTFQ+NTUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNSjJNdXg6OnJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZzwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlJlcG9ydCB0aGUgYXBwcm94aW1hdGUgYW1vdW50IG9mIHJlbWFpbmluZyByZWNvcmRpbmcgc3BhY2UgKG5zKTwvTklDSz4KLTxCTFVSQj5SZXBvcnRzIHRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgcmVtYWluaW5nIG1vb3YgaGVhZGVyIHNwYWNlIHJlc2VydmVkIHVzaW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0TUoyTXV4OjpyZXNlcnZlZC1tYXgtZHVyYXRpb248L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVzZXJ2ZWQgbWF4aW11bSBmaWxlIGR1cmF0aW9uIChucyk8L05JQ0s+Ci08QkxVUkI+V2hlbiBzZXQgdG8gYSB2YWx1ZSA+IDAsIHJlc2VydmVzIHNwYWNlIGZvciBpbmRleCB0YWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0JMVVJCPgotPERFRkFVTFQ+MTg0NDY3NDQwNzM3MDk1NTE2MTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdE1KMk11eDo6cmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkludGVydmFsIGF0IHdoaWNoIHRvIHVwZGF0ZSBpbmRleCB0YWJsZXMgKG5zKTwvTklDSz4KLTxCTFVSQj5XaGVuIHVzZWQgd2l0aCByZXNlcnZlZC1tYXgtZHVyYXRpb24sIHBlcmlvZGljYWxseSB1cGRhdGVzIHRoZSBpbmRleCB0YWJsZXMgd2l0aCBpbmZvcm1hdGlvbiBtdXhlZCBzbyBmYXIuPC9CTFVSQj4KLTxERUZBVUxUPjE4NDQ2NzQ0MDczNzA5NTUxNjE1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJU01MTXV4OjpkdHMtbWV0aG9kPC9OQU1FPgotPFRZUEU+R3N0UVRNdXhEdHNNZXRob2RzPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPmR0cy1tZXRob2Q8L05JQ0s+Ci08QkxVUkI+TWV0aG9kIHRvIGRldGVybWluZSBEVFMgdGltZSAoREVQUkVDQVRFRCkuPC9CTFVSQj4KLTxERUZBVUxUPnJlb3JkZXI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElTTUxNdXg6OmZhc3RzdGFydDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Rm9ybWF0IGZpbGUgdG8gZmFzdHN0YXJ0PC9OSUNLPgotPEJMVVJCPklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJU01MTXV4OjpmYXN0c3RhcnQtZmlsZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWxlIHRvIHVzZSBmb3Igc3RvcmluZyBidWZmZXJzPC9OSUNLPgotPEJMVVJCPkZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdGVtcG9yYXJpbHkgdG8gc3RvcmUgZGF0YSBmcm9tIHRoZSBzdHJlYW0gd2hlbiBjcmVhdGluZyBhIGZhc3RzdGFydCBmaWxlLiBJZiBudWxsIGEgZmlsZXBhdGggd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElTTUxNdXg6OmZyYWdtZW50LWR1cmF0aW9uPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RnJhZ21lbnQgZHVyYXRpb248L05JQ0s+Ci08QkxVUkI+RnJhZ21lbnQgZHVyYXRpb25zIGluIG1zIChwcm9kdWNlIGEgZnJhZ21lbnRlZCBmaWxlIGlmID4gMCkuPC9CTFVSQj4KLTxERUZBVUxUPjIwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElTTUxNdXg6Om1vb3YtcmVjb3ZlcnktZmlsZTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5GaWxlIHRvIHN0b3JlIGRhdGEgZm9yIHBvc3RlcmlvciBtb292IGF0b20gcmVjb3Zlcnk8L05JQ0s+Ci08QkxVUkI+RmlsZSB0byBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgZm9yIG1vb3YgYXRvbSBtYWtpbmcgbW92aWUgZmlsZSByZWNvdmVyeSBwb3NzaWJsZSBpbiBjYXNlIG9mIGEgY3Jhc2ggZHVyaW5nIG11eGluZy4gTnVsbCBmb3IgZGlzYWJsZWQuIChFeHBlcmltZW50YWwpLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJU01MTXV4Ojptb3ZpZS10aW1lc2NhbGU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT4+PSAxPC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+TW92aWUgdGltZXNjYWxlPC9OSUNLPgotPEJMVVJCPlRpbWVzY2FsZSB0byB1c2UgaW4gdGhlIG1vdmllICh1bml0cyBwZXIgc2Vjb25kKS48L0JMVVJCPgotPERFRkFVTFQ+MTgwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SVNNTE11eDo6cHJlc2VudGF0aW9uLXRpbWU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5JbmNsdWRlIHByZXNlbnRhdGlvbi10aW1lIGluZm88L05JQ0s+Ci08QkxVUkI+Q2FsY3VsYXRlIGFuZCBpbmNsdWRlIHByZXNlbnRhdGlvbi9jb21wb3NpdGlvbiB0aW1lIChpbiBhZGRpdGlvbiB0byBkZWNvZGluZyB0aW1lKS48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SVNNTE11eDo6c3RyZWFtYWJsZTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlN0cmVhbWFibGU8L05JQ0s+Ci08QkxVUkI+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi48L0JMVVJCPgotPERFRkFVTFQ+VFJVRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SVNNTE11eDo6dHJhay10aW1lc2NhbGU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5UcmFjayB0aW1lc2NhbGU8L05JQ0s+Ci08QkxVUkI+VGltZXNjYWxlIHRvIHVzZSBmb3IgdGhlIHRyYWNrcyAodW5pdHMgcGVyIHNlY29uZCwgMCBpcyBhdXRvbWF0aWMpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJU01MTXV4OjpyZXNlcnZlZC1ieXRlcy1wZXItc2VjPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMTAwMDA8L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5SZXNlcnZlZCBNT09WIGJ5dGVzIHBlciBzZWNvbmQsIHBlciB0cmFjazwvTklDSz4KLTxCTFVSQj5NdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbiBpbnRvIGJ5dGVzIG9mIGhlYWRlciB0byByZXNlcnZlLCBwZXIgc2Vjb25kLCBwZXIgdHJhY2suPC9CTFVSQj4KLTxERUZBVUxUPjU1MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0SVNNTE11eDo6cmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnI8L0ZMQUdTPgotPE5JQ0s+UmVwb3J0IHRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgcmVtYWluaW5nIHJlY29yZGluZyBzcGFjZSAobnMpPC9OSUNLPgotPEJMVVJCPlJlcG9ydHMgdGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiByZW1haW5pbmcgbW9vdiBoZWFkZXIgc3BhY2UgcmVzZXJ2ZWQgdXNpbmcgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RJU01MTXV4OjpyZXNlcnZlZC1tYXgtZHVyYXRpb248L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVzZXJ2ZWQgbWF4aW11bSBmaWxlIGR1cmF0aW9uIChucyk8L05JQ0s+Ci08QkxVUkI+V2hlbiBzZXQgdG8gYSB2YWx1ZSA+IDAsIHJlc2VydmVzIHNwYWNlIGZvciBpbmRleCB0YWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0JMVVJCPgotPERFRkFVTFQ+MTg0NDY3NDQwNzM3MDk1NTE2MTU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdElTTUxNdXg6OnJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZDwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5JbnRlcnZhbCBhdCB3aGljaCB0byB1cGRhdGUgaW5kZXggdGFibGVzIChucyk8L05JQ0s+Ci08QkxVUkI+V2hlbiB1c2VkIHdpdGggcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLCBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgaW5kZXggdGFibGVzIHdpdGggaW5mb3JtYXRpb24gbXV4ZWQgc28gZmFyLjwvQkxVUkI+Ci08REVGQVVMVD4xODQ0Njc0NDA3MzcwOTU1MTYxNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0M0dQUE11eDo6ZHRzLW1ldGhvZDwvTkFNRT4KLTxUWVBFPkdzdFFUTXV4RHRzTWV0aG9kczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5kdHMtbWV0aG9kPC9OSUNLPgotPEJMVVJCPk1ldGhvZCB0byBkZXRlcm1pbmUgRFRTIHRpbWUgKERFUFJFQ0FURUQpLjwvQkxVUkI+Ci08REVGQVVMVD5yZW9yZGVyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3QzR1BQTXV4OjpmYXN0c3RhcnQ8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkZvcm1hdCBmaWxlIHRvIGZhc3RzdGFydDwvTklDSz4KLTxCTFVSQj5JZiB0aGUgZmlsZSBzaG91bGQgYmUgZm9ybWF0dGVkIGZvciBmYXN0c3RhcnQgKGhlYWRlcnMgZmlyc3QpLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0M0dQUE11eDo6ZmFzdHN0YXJ0LWZpbGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsZSB0byB1c2UgZm9yIHN0b3JpbmcgYnVmZmVyczwvTklDSz4KLTxCTFVSQj5GaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRlbXBvcmFyaWx5IHRvIHN0b3JlIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHdoZW4gY3JlYXRpbmcgYSBmYXN0c3RhcnQgZmlsZS4gSWYgbnVsbCBhIGZpbGVwYXRoIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3QzR1BQTXV4OjpmcmFnbWVudC1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPkZyYWdtZW50IGR1cmF0aW9uPC9OSUNLPgotPEJMVVJCPkZyYWdtZW50IGR1cmF0aW9ucyBpbiBtcyAocHJvZHVjZSBhIGZyYWdtZW50ZWQgZmlsZSBpZiA+IDApLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3QzR1BQTXV4Ojptb292LXJlY292ZXJ5LWZpbGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+RmlsZSB0byBzdG9yZSBkYXRhIGZvciBwb3N0ZXJpb3IgbW9vdiBhdG9tIHJlY292ZXJ5PC9OSUNLPgotPEJMVVJCPkZpbGUgdG8gYmUgdXNlZCB0byBzdG9yZSBkYXRhIGZvciBtb292IGF0b20gbWFraW5nIG1vdmllIGZpbGUgcmVjb3ZlcnkgcG9zc2libGUgaW4gY2FzZSBvZiBhIGNyYXNoIGR1cmluZyBtdXhpbmcuIE51bGwgZm9yIGRpc2FibGVkLiAoRXhwZXJpbWVudGFsKS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0M0dQUE11eDo6bW92aWUtdGltZXNjYWxlPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPk1vdmllIHRpbWVzY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lc2NhbGUgdG8gdXNlIGluIHRoZSBtb3ZpZSAodW5pdHMgcGVyIHNlY29uZCkuPC9CTFVSQj4KLTxERUZBVUxUPjE4MDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdDNHUFBNdXg6OnByZXNlbnRhdGlvbi10aW1lPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yd3g8L0ZMQUdTPgotPE5JQ0s+SW5jbHVkZSBwcmVzZW50YXRpb24tdGltZSBpbmZvPC9OSUNLPgotPEJMVVJCPkNhbGN1bGF0ZSBhbmQgaW5jbHVkZSBwcmVzZW50YXRpb24vY29tcG9zaXRpb24gdGltZSAoaW4gYWRkaXRpb24gdG8gZGVjb2RpbmcgdGltZSkuPC9CTFVSQj4KLTxERUZBVUxUPlRSVUU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdDNHUFBNdXg6OnN0cmVhbWFibGU8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3eDwvRkxBR1M+Ci08TklDSz5TdHJlYW1hYmxlPC9OSUNLPgotPEJMVVJCPklmIHNldCB0byB0cnVlLCB0aGUgb3V0cHV0IHNob3VsZCBiZSBhcyBpZiBpdCBpcyB0byBiZSBzdHJlYW1lZCBhbmQgaGVuY2Ugbm8gaW5kZXhlcyB3cml0dGVuIG9yIGR1cmF0aW9uIHdyaXR0ZW4uIChERVBSRUNBVEVELCBvbmx5IHZhbGlkIGZvciBmcmFnbWVudGVkIE1QNCkuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3QzR1BQTXV4Ojp0cmFrLXRpbWVzY2FsZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlRyYWNrIHRpbWVzY2FsZTwvTklDSz4KLTxCTFVSQj5UaW1lc2NhbGUgdG8gdXNlIGZvciB0aGUgdHJhY2tzICh1bml0cyBwZXIgc2Vjb25kLCAwIGlzIGF1dG9tYXRpYykuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdDNHUFBNdXg6OnJlc2VydmVkLWJ5dGVzLXBlci1zZWM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAxMDAwMDwvUkFOR0U+Ci08RkxBR1M+cnd4PC9GTEFHUz4KLTxOSUNLPlJlc2VydmVkIE1PT1YgYnl0ZXMgcGVyIHNlY29uZCwgcGVyIHRyYWNrPC9OSUNLPgotPEJMVVJCPk11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uIGludG8gYnl0ZXMgb2YgaGVhZGVyIHRvIHJlc2VydmUsIHBlciBzZWNvbmQsIHBlciB0cmFjay48L0JMVVJCPgotPERFRkFVTFQ+NTUwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3QzR1BQTXV4OjpyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmc8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5SZXBvcnQgdGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiByZW1haW5pbmcgcmVjb3JkaW5nIHNwYWNlIChucyk8L05JQ0s+Ci08QkxVUkI+UmVwb3J0cyB0aGUgYXBwcm94aW1hdGUgYW1vdW50IG9mIHJlbWFpbmluZyBtb292IGhlYWRlciBzcGFjZSByZXNlcnZlZCB1c2luZyByZXNlcnZlZC1tYXgtZHVyYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdDNHUFBNdXg6OnJlc2VydmVkLW1heC1kdXJhdGlvbjwvTkFNRT4KLTxUWVBFPmd1aW50NjQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZXNlcnZlZCBtYXhpbXVtIGZpbGUgZHVyYXRpb24gKG5zKTwvTklDSz4KLTxCTFVSQj5XaGVuIHNldCB0byBhIHZhbHVlID4gMCwgcmVzZXJ2ZXMgc3BhY2UgZm9yIGluZGV4IHRhYmxlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvQkxVUkI+Ci08REVGQVVMVD4xODQ0Njc0NDA3MzcwOTU1MTYxNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0M0dQUE11eDo6cmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkludGVydmFsIGF0IHdoaWNoIHRvIHVwZGF0ZSBpbmRleCB0YWJsZXMgKG5zKTwvTklDSz4KLTxCTFVSQj5XaGVuIHVzZWQgd2l0aCByZXNlcnZlZC1tYXgtZHVyYXRpb24sIHBlcmlvZGljYWxseSB1cGRhdGVzIHRoZSBpbmRleCB0YWJsZXMgd2l0aCBpbmZvcm1hdGlvbiBtdXhlZCBzbyBmYXIuPC9CTFVSQj4KLTxERUZBVUxUPjE4NDQ2NzQ0MDczNzA5NTUxNjE1PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGxpdEZpbGVTcmM6OmxvY2F0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RmlsZSBMb2NhdGlvbjwvTklDSz4KLTxCTFVSQj5XaWxkY2FyZCBwYXR0ZXJuIHRvIG1hdGNoIGZpbGUgbmFtZXMgb2YgdGhlIGlucHV0IGZpbGVzLiBJZiB0aGUgbG9jYXRpb24gaXMgYW4gYWJzb2x1dGUgcGF0aCBvciBjb250YWlucyBkaXJlY3RvcnkgY29tcG9uZW50cywgb25seSB0aGUgYmFzZSBmaWxlIG5hbWUgcGFydCB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHBhdHRlcm4gbWF0Y2hpbmcuIFRoZSByZXN1bHRzIHdpbGwgYmUgc29ydGVkLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RNYXRyb3NrYURlbXV4OjptYXgtZ2FwLXRpbWU8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4aW11bSBnYXAgdGltZTwvTklDSz4KLTxCTFVSQj5UaGUgZGVtdXhlciBzZW5kcyBvdXQgc2VnbWVudCBldmVudHMgZm9yIHNraXBwaW5nIGdhcHMgbG9uZ2VyIHRoYW4gdGhpcyAoMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MjAwMDAwMDAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEh0dHBDbGllbnRTaW5rOjphdXRvbWF0aWMtcmVkaXJlY3Q8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPmF1dG9tYXRpYy1yZWRpcmVjdDwvTklDSz4KLTxCTFVSQj5BdXRvbWF0aWNhbGx5IGZvbGxvdyBIVFRQIHJlZGlyZWN0cyAoSFRUUCBTdGF0dXMgQ29kZSAzeHgpLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSHR0cENsaWVudFNpbms6OmNvb2tpZXM8L05BTUU+Ci08VFlQRT5HU3RydjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvb2tpZXM8L05JQ0s+Ci08QkxVUkI+SFRUUCByZXF1ZXN0IGNvb2tpZXMuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEh0dHBDbGllbnRTaW5rOjpsb2NhdGlvbjwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkxvY2F0aW9uPC9OSUNLPgotPEJMVVJCPlVSSSB0byBzZW5kIHRvLjwvQkxVUkI+Ci08REVGQVVMVD4iIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEh0dHBDbGllbnRTaW5rOjpwcm94eTwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlByb3h5PC9OSUNLPgotPEJMVVJCPkhUVFAgcHJveHkgc2VydmVyIFVSSS48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIdHRwQ2xpZW50U2luazo6cHJveHktaWQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wcm94eS1pZDwvTklDSz4KLTxCTFVSQj51c2VyIGlkIGZvciBwcm94eSBhdXRoZW50aWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIdHRwQ2xpZW50U2luazo6cHJveHktcHc8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5wcm94eS1wdzwvTklDSz4KLTxCTFVSQj51c2VyIHBhc3N3b3JkIGZvciBwcm94eSBhdXRoZW50aWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+IiI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIdHRwQ2xpZW50U2luazo6c2Vzc2lvbjwvTkFNRT4KLTxUWVBFPlNvdXBTZXNzaW9uKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnNlc3Npb248L05JQ0s+Ci08QkxVUkI+U291cFNlc3Npb24gb2JqZWN0IHRvIHVzZSBmb3IgY29tbXVuaWNhdGlvbi48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSHR0cENsaWVudFNpbms6OnVzZXItYWdlbnQ8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Vc2VyLUFnZW50PC9OSUNLPgotPEJMVVJCPlZhbHVlIG9mIHRoZSBVc2VyLUFnZW50IEhUVFAgcmVxdWVzdCBoZWFkZXIgZmllbGQuPC9CTFVSQj4KLTxERUZBVUxUPiJHU3RyZWFtZXIgc291cGh0dHBjbGllbnRzaW5rICI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNvdXBIdHRwQ2xpZW50U2luazo6dXNlci1pZDwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnVzZXItaWQ8L05JQ0s+Ci08QkxVUkI+dXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPiIiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTb3VwSHR0cENsaWVudFNpbms6OnVzZXItcHc8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz51c2VyLXB3PC9OSUNLPgotPEJMVVJCPnVzZXIgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uLjwvQkxVUkI+Ci08REVGQVVMVD4iIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEh0dHBDbGllbnRTaW5rOjpodHRwLWxvZy1sZXZlbDwvTkFNRT4KLTxUWVBFPlNvdXBMb2dnZXJMb2dMZXZlbDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkhUVFAgbG9nIGxldmVsPC9OSUNLPgotPEJMVVJCPlNldCBsb2cgbGV2ZWwgZm9yIHNvdXAncyBIVFRQIHNlc3Npb24gbG9nLjwvQkxVUkI+Ci08REVGQVVMVD5TT1VQX0xPR0dFUl9MT0dfTk9ORTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEh0dHBDbGllbnRTaW5rOjpyZXRyaWVzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZXRyaWVzPC9OSUNLPgotPEJMVVJCPk1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMsIHplcm8gdG8gZGlzYWJsZSwgLTEgdG8gcmV0cnkgZm9yZXZlci48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U291cEh0dHBDbGllbnRTaW5rOjpyZXRyeS1kZWxheTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmV0cnkgRGVsYXk8L05JQ0s+Ci08QkxVUkI+RGVsYXkgaW4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMgYWZ0ZXIgYSBmYWlsdXJlLjwvQkxVUkI+Ci08REVGQVVMVD41PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RXYXZQYXJzZTo6aWdub3JlLWxlbmd0aDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SWdub3JlIGxlbmd0aDwvTklDSz4KLTxCTFVSQj5JZ25vcmUgbGVuZ3RoIGZyb20gdGhlIFdhdmUgaGVhZGVyLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0R2RrUGl4YnVmT3ZlcmxheTo6bG9jYXRpb248L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5sb2NhdGlvbjwvTklDSz4KLTxCTFVSQj5Mb2NhdGlvbiBvZiBpbWFnZSBmaWxlIHRvIG92ZXJsYXkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEdka1BpeGJ1Zk92ZXJsYXk6Om9mZnNldC14PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlggT2Zmc2V0PC9OSUNLPgotPEJMVVJCPkZvciBwb3NpdGl2ZSB2YWx1ZSwgaG9yaXpvbnRhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBwaXhlbHMgZnJvbSBsZWZ0IG9mIHZpZGVvIGltYWdlLiBGb3IgbmVnYXRpdmUgdmFsdWUsIGhvcml6b250YWwgb2Zmc2V0IG9mIG92ZXJsYXkgaW1hZ2UgaW4gcGl4ZWxzIGZyb20gcmlnaHQgb2YgdmlkZW8gaW1hZ2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEdka1BpeGJ1Zk92ZXJsYXk6Om9mZnNldC15PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlkgT2Zmc2V0PC9OSUNLPgotPEJMVVJCPkZvciBwb3NpdGl2ZSB2YWx1ZSwgdmVydGljYWwgb2Zmc2V0IG9mIG92ZXJsYXkgaW1hZ2UgaW4gcGl4ZWxzIGZyb20gdG9wIG9mIHZpZGVvIGltYWdlLiBGb3IgbmVnYXRpdmUgdmFsdWUsIHZlcnRpY2FsIG9mZnNldCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyBmcm9tIGJvdHRvbSBvZiB2aWRlbyBpbWFnZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0R2RrUGl4YnVmT3ZlcmxheTo6b3ZlcmxheS1oZWlnaHQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk92ZXJsYXkgSGVpZ2h0PC9OSUNLPgotPEJMVVJCPkhlaWdodCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyAoMCA9IHNhbWUgYXMgb3ZlcmxheSBpbWFnZSkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEdka1BpeGJ1Zk92ZXJsYXk6Om92ZXJsYXktd2lkdGg8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk92ZXJsYXkgV2lkdGg8L05JQ0s+Ci08QkxVUkI+V2lkdGggb2Ygb3ZlcmxheSBpbWFnZSBpbiBwaXhlbHMgKDAgPSBzYW1lIGFzIG92ZXJsYXkgaW1hZ2UpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RHZGtQaXhidWZPdmVybGF5OjpyZWxhdGl2ZS14PC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVsYXRpdmUgWCBPZmZzZXQ8L05JQ0s+Ci08QkxVUkI+SG9yaXpvbnRhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBmcmFjdGlvbnMgb2YgdmlkZW8gaW1hZ2Ugd2lkdGgsIGZyb20gdG9wLWxlZnQgY29ybmVyIG9mIHZpZGVvIGltYWdlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RHZGtQaXhidWZPdmVybGF5OjpyZWxhdGl2ZS15PC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVsYXRpdmUgWSBPZmZzZXQ8L05JQ0s+Ci08QkxVUkI+VmVydGljYWwgb2Zmc2V0IG9mIG92ZXJsYXkgaW1hZ2UgaW4gZnJhY3Rpb25zIG9mIHZpZGVvIGltYWdlIGhlaWdodCwgZnJvbSB0b3AtbGVmdCBjb3JuZXIgb2YgdmlkZW8gaW1hZ2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEdka1BpeGJ1Zk92ZXJsYXk6OmFscGhhPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWxwaGE8L05JQ0s+Ci08QkxVUkI+R2xvYmFsIGFscGhhIG9mIG92ZXJsYXkgaW1hZ2UuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdEdka1BpeGJ1Zk92ZXJsYXk6OnBpeGJ1ZjwvTkFNRT4KLTxUWVBFPkdka1BpeGJ1Zio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QaXhidWY8L05JQ0s+Ci08QkxVUkI+R2RrUGl4YnVmIG9iamVjdCB0byByZW5kZXIuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0R2RrUGl4YnVmT3ZlcmxheTo6cG9zaXRpb25pbmctbW9kZTwvTkFNRT4KLTxUWVBFPkdzdEdka1BpeGJ1ZlBvc2l0aW9uaW5nTW9kZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBvc2l0aW9uaW5nIG1vZGU8L05JQ0s+Ci08QkxVUkI+UG9zaXRpb25pbmcgbW9kZSBvZiBvZmZzZXQteCBhbmQgb2Zmc2V0LXkgcHJvcGVydGllcy48L0JMVVJCPgotPERFRkFVTFQ+cGl4ZWxzLXJlbGF0aXZlLXRvLWVkZ2VzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OmFybnItbWF4ZnJhbWVzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxNV08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFsdFJlZiBtYXggZnJhbWVzPC9OSUNLPgotPEJMVVJCPkFsdFJlZiBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6YXJuci1zdHJlbmd0aDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFsdFJlZiBzdHJlbmd0aDwvTklDSz4KLTxCTFVSQj5BbHRSZWYgc3RyZW5ndGguPC9CTFVSQj4KLTxERUZBVUxUPjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6YXJuci10eXBlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSwzXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWx0UmVmIHR5cGU8L05JQ0s+Ci08QkxVUkI+QWx0UmVmIHR5cGUuPC9CTFVSQj4KLTxERUZBVUxUPjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6YXV0by1hbHQtcmVmPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BdXRvIGFsdCByZWZlcmVuY2UgZnJhbWVzPC9OSUNLPgotPEJMVVJCPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgQWx0UmVmIGZyYW1lcy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6YnVmZmVyLWluaXRpYWwtc2l6ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnVmZmVyIGluaXRpYWwgc2l6ZTwvTklDSz4KLTxCTFVSQj5Jbml0aWFsIGNsaWVudCBidWZmZXIgc2l6ZSAobXMpLjwvQkxVUkI+Ci08REVGQVVMVD40MDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OmJ1ZmZlci1vcHRpbWFsLXNpemU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkJ1ZmZlciBvcHRpbWFsIHNpemU8L05JQ0s+Ci08QkxVUkI+T3B0aW1hbCBjbGllbnQgYnVmZmVyIHNpemUgKG1zKS48L0JMVVJCPgotPERFRkFVTFQ+NTAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjpidWZmZXItc2l6ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnVmZmVyIHNpemU8L05JQ0s+Ci08QkxVUkI+Q2xpZW50IGJ1ZmZlciBzaXplIChtcykuPC9CTFVSQj4KLTxERUZBVUxUPjYwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6Y3B1LXVzZWQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlstMTYsMTZdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5DUFUgdXNlZDwvTklDSz4KLTxCTFVSQj5DUFUgdXNlZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjpjcS1sZXZlbDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNjNdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db25zdHJhaW5lZCBxdWFsaXR5IGxldmVsPC9OSUNLPgotPEJMVVJCPkNvbnN0cmFpbmVkIHF1YWxpdHkgbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjEwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OmRlYWRsaW5lPC9OQU1FPgotPFRZUEU+Z2ludDY0PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkRlYWRsaW5lPC9OSUNLPgotPEJMVVJCPkRlYWRsaW5lIHBlciBmcmFtZSAodXNlYywgMD1kaXNhYmxlZCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6ZHJvcGZyYW1lLXRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RHJvcCBGcmFtZSBUaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+VGVtcG9yYWwgcmVzYW1wbGluZyB0aHJlc2hvbGQgKGJ1ZiAlKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjplbmQtdXNhZ2U8L05BTUU+Ci08VFlQRT5Hc3RWUDhFbmNFbmRVc2FnZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJhdGUgY29udHJvbCBtb2RlPC9OSUNLPgotPEJMVVJCPlJhdGUgY29udHJvbCBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5WYXJpYWJsZSBCaXQgUmF0ZSAoVkJSKSBtb2RlPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OmVycm9yLXJlc2lsaWVudDwvTkFNRT4KLTxUWVBFPkdzdFZQOEVuY0VyRmxhZ3M8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5FcnJvciByZXNpbGllbnQ8L05JQ0s+Ci08QkxVUkI+RXJyb3IgcmVzaWxpZW5jZSBmbGFncy48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OmxhZy1pbi1mcmFtZXM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDI1XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TGFnIGluIGZyYW1lczwvTklDSz4KLTxCTFVSQj5NYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8gbGFnLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6Om1heC1xdWFudGl6ZXI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDYzXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4aW11bSBRdWFudGl6ZXI8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBRdWFudGl6ZXIgKHdvcnN0KS48L0JMVVJCPgotPERFRkFVTFQ+NjM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6bWluLXF1YW50aXplcjwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNjNdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NaW5pbXVtIFF1YW50aXplcjwvTklDSz4KLTxCTFVSQj5NaW5pbXVtIFF1YW50aXplciAoYmVzdCkuPC9CTFVSQj4KLTxERUZBVUxUPjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6bXVsdGlwYXNzLWNhY2hlLWZpbGU8L05BTUU+Ci08VFlQRT5nY2hhcio8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NdWx0aXBhc3MgQ2FjaGUgRmlsZTwvTklDSz4KLTxCTFVSQj5NdWx0aXBhc3MgY2FjaGUgZmlsZS4gSWYgc3RyZWFtIGNhcHMgcmVpbml0ZWQsIG11bHRpcGxlIGZpbGVzIHdpbGwgYmUgY3JlYXRlZDogZmlsZSwgZmlsZS4xLCBmaWxlLjIsIC4uLiBhbmQgc28gb24uPC9CTFVSQj4KLTxERUZBVUxUPiJtdWx0aXBhc3MuY2FjaGUiPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6Om11bHRpcGFzcy1tb2RlPC9OQU1FPgotPFRZUEU+R3N0VlA4RW5jTXVsdGlwYXNzTW9kZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk11bHRpcGFzcyBNb2RlPC9OSUNLPgotPEJMVVJCPk11bHRpcGFzcyBlbmNvZGUgbW9kZS48L0JMVVJCPgotPERFRkFVTFQ+T25lIHBhc3MgZW5jb2RpbmcgKGRlZmF1bHQpPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6Om5vaXNlLXNlbnNpdGl2aXR5PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Tm9pc2Ugc2Vuc2l0aXZpdHk8L05JQ0s+Ci08QkxVUkI+Tm9pc2Ugc2Vuc2lzaXZpdHkgKGZyYW1lcyB0byBibHVyKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjpyZXNpemUtYWxsb3dlZDwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVzaXplIEFsbG93ZWQ8L05JQ0s+Ci08QkxVUkI+QWxsb3cgc3BhdGlhbCByZXNhbXBsaW5nLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjpyZXNpemUtZG93bi10aHJlc2hvbGQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJlc2l6ZSBEb3duIFRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5Eb3duc2NhbGUgdGhyZXNob2xkIChidWYgJSkuPC9CTFVSQj4KLTxERUZBVUxUPjYwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OnJlc2l6ZS11cC10aHJlc2hvbGQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDEwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJlc2l6ZSBVcCBUaHJlc2hvbGQ8L05JQ0s+Ci08QkxVUkI+VXBzY2FsZSB0aHJlc2hvbGQgKGJ1ZiAlKS48L0JMVVJCPgotPERFRkFVTFQ+MzA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6c2hhcnBuZXNzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw3XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U2hhcnBuZXNzPC9OSUNLPgotPEJMVVJCPkZpbHRlciBzaGFycG5lc3MuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6c3RhdGljLXRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3RhdGljIFRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5Nb3Rpb24gZGV0ZWN0aW9uIHRocmVzaG9sZC48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjp0YXJnZXQtYml0cmF0ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VGFyZ2V0IGJpdHJhdGU8L05JQ0s+Ci08QkxVUkI+VGFyZ2V0IGJpdHJhdGUgKGluIGJpdHMvc2VjKS48L0JMVVJCPgotPERFRkFVTFQ+MjU2MDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OnRocmVhZHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDY0XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VGhyZWFkczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgdGhyZWFkcyB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6dG9rZW4tcGFydGl0aW9uczwvTkFNRT4KLTxUWVBFPkdzdFZQOEVuY1Rva2VuUGFydGl0aW9uczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlRva2VuIHBhcnRpdGlvbnM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIHRva2VuIHBhcnRpdGlvbnMuPC9CTFVSQj4KLTxERUZBVUxUPk9uZSB0b2tlbiBwYXJ0aXRpb248L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6dHVuaW5nPC9OQU1FPgotPFRZUEU+R3N0VlA4RW5jVHVuaW5nPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VHVuaW5nPC9OSUNLPgotPEJMVVJCPlR1bmluZy48L0JMVVJCPgotPERFRkFVTFQ+VHVuZSBmb3IgUFNOUjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjpob3Jpem9udGFsLXNjYWxpbmctbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFZQOEVuY1NjYWxpbmdNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SG9yaXpvbnRhbCBzY2FsaW5nIG1vZGU8L05JQ0s+Ci08QkxVUkI+SG9yaXpvbnRhbCBzY2FsaW5nIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPk5vcm1hbDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjprZXlmcmFtZS1tYXgtZGlzdDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+S2V5ZnJhbWUgbWF4IGRpc3RhbmNlPC9OSUNLPgotPEJMVVJCPk1heGltdW0gZGlzdGFuY2UgYmV0d2VlbiBrZXlmcmFtZXMgKG51bWJlciBvZiBmcmFtZXMpLjwvQkxVUkI+Ci08REVGQVVMVD4xMjg8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6a2V5ZnJhbWUtbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFZQOEVuY0tmTW9kZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPktleWZyYW1lIE1vZGU8L05JQ0s+Ci08QkxVUkI+S2V5ZnJhbWUgcGxhY2VtZW50LjwvQkxVUkI+Ci08REVGQVVMVD5EZXRlcm1pbmUgb3B0aW1hbCBwbGFjZW1lbnQgYXV0b21hdGljYWxseTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjptYXgtaW50cmEtYml0cmF0ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IEludHJhIGJpdHJhdGU8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBJbnRyYSBmcmFtZSBiaXRyYXRlLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6Om92ZXJzaG9vdDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwMF08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk92ZXJzaG9vdCBQQ1Q8L05JQ0s+Ci08QkxVUkI+RGF0YXJhdGUgb3ZlcnNob290IChtYXgpIHRhcmdldCAoJSkuPC9CTFVSQj4KLTxERUZBVUxUPjEwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjp0ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZDwvTkFNRT4KLTxUWVBFPkdWYWx1ZUFycmF5KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvZGluZyBsYXllciBpZGVudGlmaWNhdGlvbjwvTklDSz4KLTxCTFVSQj5TZXF1ZW5jZSBkZWZpbmluZyBjb2RpbmcgbGF5ZXIgbWVtYmVyc2hpcC48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OnRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDVdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5OdW1iZXIgb2YgY29kaW5nIGxheWVyczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgY29kaW5nIGxheWVycyB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPjE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6dGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHk8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDE2XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q29kaW5nIGxheWVyIHBlcmlvZGljaXR5PC9OSUNLPgotPEJMVVJCPkxlbmd0aCBvZiBzZXF1ZW5jZSB0aGF0IGRlZmluZXMgbGF5ZXIgbWVtYmVyc2hpcCBwZXJpb2RpY2l0eS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjp0ZW1wb3JhbC1zY2FsYWJpbGl0eS1yYXRlLWRlY2ltYXRvcjwvTkFNRT4KLTxUWVBFPkdWYWx1ZUFycmF5KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvZGluZyBsYXllciByYXRlIGRlY2ltYXRvcjwvTklDSz4KLTxCTFVSQj5SYXRlIGRlY2ltYXRpb24gZmFjdG9ycyBmb3IgZWFjaCBsYXllci48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhFbmM6OnRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRlPC9OQU1FPgotPFRZUEU+R1ZhbHVlQXJyYXkqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q29kaW5nIGxheWVyIHRhcmdldCBiaXRyYXRlczwvTklDSz4KLTxCTFVSQj5UYXJnZXQgYml0cmF0ZXMgZm9yIGNvZGluZyBsYXllcnMgKG9uZSBwZXIgbGF5ZXIsIGRlY3JlYXNpbmcpLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6dHdvcGFzcy12YnItYmlhczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Mi1wYXNzIFZCUiBiaWFzPC9OSUNLPgotPEJMVVJCPkNCUi9WQlIgYmlhcyAoMD1DQlIsIDEwMD1WQlIpLjwvQkxVUkI+Ci08REVGQVVMVD41MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjp0d29wYXNzLXZici1tYXhzZWN0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz4yLXBhc3MgR09QIG1heCBiaXRyYXRlPC9OSUNLPgotPEJMVVJCPkdPUCBtYXhpbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjp0d29wYXNzLXZici1taW5zZWN0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz4yLXBhc3MgR09QIG1pbiBiaXRyYXRlPC9OSUNLPgotPEJMVVJCPkdPUCBtaW5pbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA4RW5jOjp1bmRlcnNob290PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VW5kZXJzaG9vdCBQQ1Q8L05JQ0s+Ci08QkxVUkI+RGF0YXJhdGUgdW5kZXJzaG9vdCAobWluKSB0YXJnZXQgKCUpLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6dmVydGljYWwtc2NhbGluZy1tb2RlPC9OQU1FPgotPFRZUEU+R3N0VlA4RW5jU2NhbGluZ01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5WZXJ0aWNhbCBzY2FsaW5nIG1vZGU8L05JQ0s+Ci08QkxVUkI+VmVydGljYWwgc2NhbGluZyBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5Ob3JtYWw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOEVuYzo6dGltZWJhc2U8L05BTUU+Ci08VFlQRT5Hc3RGcmFjdGlvbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNob3J0ZXN0IGludGVyZnJhbWUgdGltZTwvTklDSz4KLTxCTFVSQj5GcmFjdGlvbiBvZiBvbmUgc2Vjb25kIHRoYXQgaXMgdGhlIHNob3J0ZXN0IGludGVyZnJhbWUgdGltZSAtIG5vcm1hbGx5IGxlZnQgYXMgemVybyB3aGljaCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZyYW1lcmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhEZWM6OmRlYmxvY2tpbmctbGV2ZWw8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAxNjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGVibG9ja2luZyBMZXZlbDwvTklDSz4KLTxCTFVSQj5EZWJsb2NraW5nIGxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD40PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhEZWM6Om5vaXNlLWxldmVsPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gMTY8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk5vaXNlIExldmVsPC9OSUNLPgotPEJMVVJCPk5vaXNlIGxldmVsLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhEZWM6OnBvc3QtcHJvY2Vzc2luZzwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UG9zdCBQcm9jZXNzaW5nPC9OSUNLPgotPEJMVVJCPkVuYWJsZSBwb3N0IHByb2Nlc3NpbmcuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDhEZWM6OnBvc3QtcHJvY2Vzc2luZy1mbGFnczwvTkFNRT4KLTxUWVBFPkdzdFZQOERlY1Bvc3RQcm9jZXNzaW5nRmxhZ3M8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3N0IFByb2Nlc3NpbmcgRmxhZ3M8L05JQ0s+Ci08QkxVUkI+RmxhZ3MgdG8gY29udHJvbCBwb3N0IHByb2Nlc3NpbmcuPC9CTFVSQj4KLTxERUZBVUxUPkRlYmxvY2t8RGVtYWNyb2Jsb2NrfE11bHRpLWZyYW1lIHF1YWxpdHkgZW5oYW5jZW1lbnQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOERlYzo6dGhyZWFkczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPlsxLDE2XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IFRocmVhZHM8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBudW1iZXIgb2YgZGVjb2RpbmcgdGhyZWFkcy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VmlkZW9NZWRpYW46OmZpbHRlcnNpemU8L05BTUU+Ci08VFlQRT5Hc3RWaWRlb01lZGlhblNpemU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5GaWx0ZXJzaXplPC9OSUNLPgotPEJMVVJCPlRoZSBzaXplIG9mIHRoZSBmaWx0ZXIuPC9CTFVSQj4KLTxERUZBVUxUPk1lZGlhbiBvZiA1IG5laWdoYm91ciBwaXhlbHM8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZpZGVvTWVkaWFuOjpsdW0tb25seTwvTkFNRT4KLTxUWVBFPmdib29sZWFuPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+THVtIE9ubHk8L05JQ0s+Ci08QkxVUkI+T25seSBhcHBseSBmaWx0ZXIgb24gbHVtaW5hbmNlLjwvQkxVUkI+Ci08REVGQVVMVD5UUlVFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTY2FsZXRlbXBvOjpvdmVybGFwPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+T3ZlcmxhcCBMZW5ndGg8L05JQ0s+Ci08QkxVUkI+UGVyY2VudGFnZSBvZiBzdHJpZGUgdG8gb3ZlcmxhcC48L0JMVVJCPgotPERFRkFVTFQ+MC4yPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTY2FsZXRlbXBvOjpyYXRlPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bLTIuMTQ3NDhlKzA5LDIuMTQ3NDhlKzA5XTwvUkFOR0U+Ci08RkxBR1M+cjwvRkxBR1M+Ci08TklDSz5QbGF5YmFjayBSYXRlPC9OSUNLPgotPEJMVVJCPkN1cnJlbnQgcGxheWJhY2sgcmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U2NhbGV0ZW1wbzo6c2VhcmNoPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PD0gNTAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TZWFyY2ggTGVuZ3RoPC9OSUNLPgotPEJMVVJCPkxlbmd0aCBpbiBtaWxsaXNlY29uZHMgdG8gc2VhcmNoIGZvciBiZXN0IG92ZXJsYXAgcG9zaXRpb24uPC9CTFVSQj4KLTxERUZBVUxUPjE0PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTY2FsZXRlbXBvOjpzdHJpZGU8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT5bMSw1MDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3RyaWRlIExlbmd0aDwvTklDSz4KLTxCTFVSQj5MZW5ndGggaW4gbWlsbGlzZWNvbmRzIHRvIG91dHB1dCBlYWNoIHN0cmlkZS48L0JMVVJCPgotPERFRkFVTFQ+MzA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUUE11eDo6c2VxbnVtPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlNlcXVlbmNlIG51bWJlcjwvTklDSz4KLTxCTFVSQj5UaGUgUlRQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFBNdXg6OnNlcW51bS1vZmZzZXQ8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IEdfTUFYVUxPTkc8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNlcXVlbmNlIG51bWJlciBPZmZzZXQ8L05JQ0s+Ci08QkxVUkI+T2Zmc2V0IHRvIGFkZCB0byBhbGwgb3V0Z29pbmcgc2VxbnVtICgtMSA9IHJhbmRvbSkuPC9CTFVSQj4KLTxERUZBVUxUPi0xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFBNdXg6OnNzcmM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNTUkM8L05JQ0s+Ci08QkxVUkI+VGhlIFNTUkMgb2YgdGhlIHBhY2tldHMgKGRlZmF1bHQgPT0gcmFuZG9tKS48L0JMVVJCPgotPERFRkFVTFQ+NDI5NDk2NzI5NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQTXV4Ojp0aW1lc3RhbXAtb2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaW1lc3RhbXAgT2Zmc2V0PC9OSUNLPgotPEJMVVJCPk9mZnNldCB0byBhZGQgdG8gYWxsIG91dGdvaW5nIHRpbWVzdGFtcHMgKC0xID0gcmFuZG9tKS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cFNCQ1BheTo6bWluLWZyYW1lczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gR19NQVhVTE9ORzwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+bWluaW11bSBmcmFtZSBudW1iZXI8L05JQ0s+Ci08QkxVUkI+TWluaW11bSBxdWFudGl0eSBvZiBmcmFtZXMgdG8gc2VuZCBpbiBvbmUgcGFja2V0ICgtMSBmb3IgbWF4aW11bSBhbGxvd2VkIGJ5IHRoZSBtdHUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFBEVE1GU3JjOjpjbG9jay1yYXRlPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5jbG9ja3JhdGU8L05JQ0s+Ci08QkxVUkI+VGhlIGNsb2NrLXJhdGUgYXQgd2hpY2ggdG8gZ2VuZXJhdGUgdGhlIGR0bWYgcGFja2V0cy48L0JMVVJCPgotPERFRkFVTFQ+ODAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQRFRNRlNyYzo6cGFja2V0LXJlZHVuZGFuY3k8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT5bMSw1XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UGFja2V0IFJlZHVuZGFuY3k8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIHBhY2tldHMgdG8gc2VuZCB0byBpbmRpY2F0ZSBzdGFydCBhbmQgc3RvcCBkdG1mIGV2ZW50cy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQRFRNRlNyYzo6cHQ8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAxMjg8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnBheWxvYWQgdHlwZTwvTklDSz4KLTxCTFVSQj5UaGUgcGF5bG9hZCB0eXBlIG9mIHRoZSBwYWNrZXRzLjwvQkxVUkI+Ci08REVGQVVMVD45NjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQRFRNRlNyYzo6c2VxbnVtPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlNlcXVlbmNlIG51bWJlcjwvTklDSz4KLTxCTFVSQj5UaGUgUlRQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFBEVE1GU3JjOjpzZXFudW0tb2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TZXF1ZW5jZSBudW1iZXIgT2Zmc2V0PC9OSUNLPgotPEJMVVJCPk9mZnNldCB0byBhZGQgdG8gYWxsIG91dGdvaW5nIHNlcW51bSAoLTEgPSByYW5kb20pLjwvQkxVUkI+Ci08REVGQVVMVD4tMTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQRFRNRlNyYzo6c3NyYzwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U1NSQzwvTklDSz4KLTxCTFVSQj5UaGUgU1NSQyBvZiB0aGUgcGFja2V0cyAoLTEgPT0gcmFuZG9tKS48L0JMVVJCPgotPERFRkFVTFQ+NDI5NDk2NzI5NTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQRFRNRlNyYzo6dGltZXN0YW1wPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5yPC9GTEFHUz4KLTxOSUNLPlRpbWVzdGFtcDwvTklDSz4KLTxCTFVSQj5UaGUgUlRQIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0LjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSVFBEVE1GU3JjOjp0aW1lc3RhbXAtb2Zmc2V0PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSBHX01BWFVMT05HPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaW1lc3RhbXAgT2Zmc2V0PC9OSUNLPgotPEJMVVJCPk9mZnNldCB0byBhZGQgdG8gYWxsIG91dGdvaW5nIHRpbWVzdGFtcHMgKC0xID0gcmFuZG9tKS48L0JMVVJCPgotPERFRkFVTFQ+LTE8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJ0cERUTUZEZXBheTo6bWF4LWR1cmF0aW9uPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXhpbXVtIGR1cmF0aW9uPC9OSUNLPgotPEJMVVJCPlRoZSBtYXh1bWltdW0gZHVyYXRpb24gKG1zKSBvZiB0aGUgb3V0Z29pbmcgc291bmRwYWNrZXQuICgwID0gbm8gbGltaXQpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBEVE1GRGVwYXk6OnVuaXQtdGltZTwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDEwMDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkR1cmF0aW9uIHVuaXR0aW1lPC9OSUNLPgotPEJMVVJCPlRoZSBzbWFsbGVzdCB1bml0IChtcykgdGhlIGR1cmF0aW9uIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAoMCBkaXNhYmxlcyBpdCkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdERUTUZTcmM6OmludGVydmFsPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+WzEwLDUwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+SW50ZXJ2YWwgYmV0d2VlbiB0b25lIHBhY2tldHM8L05JQ0s+Ci08QkxVUkI+SW50ZXJ2YWwgaW4gbXMgYmV0d2VlbiB0d28gdG9uZSBwYWNrZXRzLjwvQkxVUkI+Ci08REVGQVVMVD41MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwVm9yYmlzUGF5Ojpjb25maWctaW50ZXJ2YWw8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAzNjAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db25maWcgU2VuZCBJbnRlcnZhbDwvTklDSz4KLTxCTFVSQj5TZW5kIENvbmZpZyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoY29uZmlndXJhdGlvbiBoZWFkZXJzIHdpbGwgYmUgbXVsdGlwbGV4ZWQgaW4gdGhlIGRhdGEgc3RyZWFtIHdoZW4gZGV0ZWN0ZWQuKSAoMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UlRQUnR4UXVldWU6Om1heC1zaXplLXBhY2tldHM8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBTaXplIFBhY2tldHM8L05JQ0s+Ci08QkxVUkI+QW1vdW50IG9mIHBhY2tldHMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFJUUFJ0eFF1ZXVlOjptYXgtc2l6ZS10aW1lPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXggU2l6ZSBUaW1lczwvTklDSz4KLTxCTFVSQj5BbW91bnQgb2YgbXMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBHU1RQYXk6OmNvbmZpZy1pbnRlcnZhbDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDM2MDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNhcHMvVGFncyBTZW5kIEludGVydmFsPC9OSUNLPgotPEJMVVJCPkludGVydmFsIGZvciBzZW5kaW5nIGNhcHMgYW5kIFRBRyBldmVudHMgaW4gc2Vjb25kcyAoMCA9IGRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwVlA4UGF5OjpwaWN0dXJlLWlkLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RWUDhSVFBQYXlNb2RlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UGljdHVyZSBJRCBNb2RlPC9OSUNLPgotPEJMVVJCPlRoZSBwaWN0dXJlIElEIG1vZGUgZm9yIHBheWxvYWRpbmcuPC9CTFVSQj4KLTxERUZBVUxUPk5vIFBpY3R1cmUgSUQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6YXJuci1tYXhmcmFtZXM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDE1XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWx0UmVmIG1heCBmcmFtZXM8L05JQ0s+Ci08QkxVUkI+QWx0UmVmIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjphcm5yLXN0cmVuZ3RoPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QWx0UmVmIHN0cmVuZ3RoPC9OSUNLPgotPEJMVVJCPkFsdFJlZiBzdHJlbmd0aC48L0JMVVJCPgotPERFRkFVTFQ+MzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjphcm5yLXR5cGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlsxLDNdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5BbHRSZWYgdHlwZTwvTklDSz4KLTxCTFVSQj5BbHRSZWYgdHlwZS48L0JMVVJCPgotPERFRkFVTFQ+MzwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjphdXRvLWFsdC1yZWY8L05BTUU+Ci08VFlQRT5nYm9vbGVhbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkF1dG8gYWx0IHJlZmVyZW5jZSBmcmFtZXM8L05JQ0s+Ci08QkxVUkI+QXV0b21hdGljYWxseSBnZW5lcmF0ZSBBbHRSZWYgZnJhbWVzLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjpidWZmZXItaW5pdGlhbC1zaXplPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgaW5pdGlhbCBzaXplPC9OSUNLPgotPEJMVVJCPkluaXRpYWwgY2xpZW50IGJ1ZmZlciBzaXplIChtcykuPC9CTFVSQj4KLTxERUZBVUxUPjQwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6YnVmZmVyLW9wdGltYWwtc2l6ZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+QnVmZmVyIG9wdGltYWwgc2l6ZTwvTklDSz4KLTxCTFVSQj5PcHRpbWFsIGNsaWVudCBidWZmZXIgc2l6ZSAobXMpLjwvQkxVUkI+Ci08REVGQVVMVD41MDAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OmJ1ZmZlci1zaXplPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5CdWZmZXIgc2l6ZTwvTklDSz4KLTxCTFVSQj5DbGllbnQgYnVmZmVyIHNpemUgKG1zKS48L0JMVVJCPgotPERFRkFVTFQ+NjAwMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjpjcHUtdXNlZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Wy0xNiwxNl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNQVSB1c2VkPC9OSUNLPgotPEJMVVJCPkNQVSB1c2VkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OmNxLWxldmVsPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2M108L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvbnN0cmFpbmVkIHF1YWxpdHkgbGV2ZWw8L05JQ0s+Ci08QkxVUkI+Q29uc3RyYWluZWQgcXVhbGl0eSBsZXZlbC48L0JMVVJCPgotPERFRkFVTFQ+MTA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6ZGVhZGxpbmU8L05BTUU+Ci08VFlQRT5naW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RGVhZGxpbmU8L05JQ0s+Ci08QkxVUkI+RGVhZGxpbmUgcGVyIGZyYW1lICh1c2VjLCAwPWRpc2FibGVkKS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjpkcm9wZnJhbWUtdGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxMDBdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ecm9wIEZyYW1lIFRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5UZW1wb3JhbCByZXNhbXBsaW5nIHRocmVzaG9sZCAoYnVmICUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OmVuZC11c2FnZTwvTkFNRT4KLTxUWVBFPkdzdFZQOUVuY0VuZFVzYWdlPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmF0ZSBjb250cm9sIG1vZGU8L05JQ0s+Ci08QkxVUkI+UmF0ZSBjb250cm9sIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPlZhcmlhYmxlIEJpdCBSYXRlIChWQlIpIG1vZGU8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6ZXJyb3ItcmVzaWxpZW50PC9OQU1FPgotPFRZUEU+R3N0VlA5RW5jRXJGbGFnczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkVycm9yIHJlc2lsaWVudDwvTklDSz4KLTxCTFVSQj5FcnJvciByZXNpbGllbmNlIGZsYWdzLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6aG9yaXpvbnRhbC1zY2FsaW5nLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RWUDlFbmNTY2FsaW5nTW9kZTwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkhvcml6b250YWwgc2NhbGluZyBtb2RlPC9OSUNLPgotPEJMVVJCPkhvcml6b250YWwgc2NhbGluZyBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5Ob3JtYWw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6a2V5ZnJhbWUtbWF4LWRpc3Q8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPktleWZyYW1lIG1heCBkaXN0YW5jZTwvTklDSz4KLTxCTFVSQj5NYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4ga2V5ZnJhbWVzIChudW1iZXIgb2YgZnJhbWVzKS48L0JMVVJCPgotPERFRkFVTFQ+MTI4PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OmtleWZyYW1lLW1vZGU8L05BTUU+Ci08VFlQRT5Hc3RWUDlFbmNLZk1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5LZXlmcmFtZSBNb2RlPC9OSUNLPgotPEJMVVJCPktleWZyYW1lIHBsYWNlbWVudC48L0JMVVJCPgotPERFRkFVTFQ+RGV0ZXJtaW5lIG9wdGltYWwgcGxhY2VtZW50IGF1dG9tYXRpY2FsbHk8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6bGFnLWluLWZyYW1lczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMjVdPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5MYWcgaW4gZnJhbWVzPC9OSUNLPgotPEJMVVJCPk1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBsYWcuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6bWF4LWludHJhLWJpdHJhdGU8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPj49IDA8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heCBJbnRyYSBiaXRyYXRlPC9OSUNLPgotPEJMVVJCPk1heGltdW0gSW50cmEgZnJhbWUgYml0cmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjptYXgtcXVhbnRpemVyPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCw2M108L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk1heGltdW0gUXVhbnRpemVyPC9OSUNLPgotPEJMVVJCPk1heGltdW0gUXVhbnRpemVyICh3b3JzdCkuPC9CTFVSQj4KLTxERUZBVUxUPjYzPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6Om1pbi1xdWFudGl6ZXI8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDYzXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWluaW11bSBRdWFudGl6ZXI8L05JQ0s+Ci08QkxVUkI+TWluaW11bSBRdWFudGl6ZXIgKGJlc3QpLjwvQkxVUkI+Ci08REVGQVVMVD40PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6Om11bHRpcGFzcy1jYWNoZS1maWxlPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TXVsdGlwYXNzIENhY2hlIEZpbGU8L05JQ0s+Ci08QkxVUkI+TXVsdGlwYXNzIGNhY2hlIGZpbGUuIElmIHN0cmVhbSBjYXBzIHJlaW5pdGVkLCBtdWx0aXBsZSBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQ6IGZpbGUsIGZpbGUuMSwgZmlsZS4yLCAuLi4gYW5kIHNvIG9uLjwvQkxVUkI+Ci08REVGQVVMVD4ibXVsdGlwYXNzLmNhY2hlIjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjptdWx0aXBhc3MtbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFZQOUVuY011bHRpcGFzc01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NdWx0aXBhc3MgTW9kZTwvTklDSz4KLTxCTFVSQj5NdWx0aXBhc3MgZW5jb2RlIG1vZGUuPC9CTFVSQj4KLTxERUZBVUxUPk9uZSBwYXNzIGVuY29kaW5nIChkZWZhdWx0KTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjpub2lzZS1zZW5zaXRpdml0eTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsNl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPk5vaXNlIHNlbnNpdGl2aXR5PC9OSUNLPgotPEJMVVJCPk5vaXNlIHNlbnNpc2l2aXR5IChmcmFtZXMgdG8gYmx1cikuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6b3ZlcnNob290PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+T3ZlcnNob290IFBDVDwvTklDSz4KLTxCTFVSQj5EYXRhcmF0ZSBvdmVyc2hvb3QgKG1heCkgdGFyZ2V0ICglKS48L0JMVVJCPgotPERFRkFVTFQ+MTAwPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnJlc2l6ZS1hbGxvd2VkPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZXNpemUgQWxsb3dlZDwvTklDSz4KLTxCTFVSQj5BbGxvdyBzcGF0aWFsIHJlc2FtcGxpbmcuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnJlc2l6ZS1kb3duLXRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVzaXplIERvd24gVGhyZXNob2xkPC9OSUNLPgotPEJMVVJCPkRvd25zY2FsZSB0aHJlc2hvbGQgKGJ1ZiAlKS48L0JMVVJCPgotPERFRkFVTFQ+NjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6cmVzaXplLXVwLXRocmVzaG9sZDwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+UmVzaXplIFVwIFRocmVzaG9sZDwvTklDSz4KLTxCTFVSQj5VcHNjYWxlIHRocmVzaG9sZCAoYnVmICUpLjwvQkxVUkI+Ci08REVGQVVMVD4zMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjpzaGFycG5lc3M8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDddPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TaGFycG5lc3M8L05JQ0s+Ci08QkxVUkI+RmlsdGVyIHNoYXJwbmVzcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjpzdGF0aWMtdGhyZXNob2xkPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TdGF0aWMgVGhyZXNob2xkPC9OSUNLPgotPEJMVVJCPk1vdGlvbiBkZXRlY3Rpb24gdGhyZXNob2xkLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnRhcmdldC1iaXRyYXRlPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UYXJnZXQgYml0cmF0ZTwvTklDSz4KLTxCTFVSQj5UYXJnZXQgYml0cmF0ZSAoaW4gYml0cy9zZWMpLjwvQkxVUkI+Ci08REVGQVVMVD4yNTYwMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6dGVtcG9yYWwtc2NhbGFiaWxpdHktbGF5ZXItaWQ8L05BTUU+Ci08VFlQRT5HVmFsdWVBcnJheSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db2RpbmcgbGF5ZXIgaWRlbnRpZmljYXRpb248L05JQ0s+Ci08QkxVUkI+U2VxdWVuY2UgZGVmaW5pbmcgY29kaW5nIGxheWVyIG1lbWJlcnNoaXAuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjp0ZW1wb3JhbC1zY2FsYWJpbGl0eS1udW1iZXItbGF5ZXJzPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMSw1XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TnVtYmVyIG9mIGNvZGluZyBsYXllcnM8L05JQ0s+Ci08QkxVUkI+TnVtYmVyIG9mIGNvZGluZyBsYXllcnMgdG8gdXNlLjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnRlbXBvcmFsLXNjYWxhYmlsaXR5LXBlcmlvZGljaXR5PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxNl08L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvZGluZyBsYXllciBwZXJpb2RpY2l0eTwvTklDSz4KLTxCTFVSQj5MZW5ndGggb2Ygc2VxdWVuY2UgdGhhdCBkZWZpbmVzIGxheWVyIG1lbWJlcnNoaXAgcGVyaW9kaWNpdHkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6dGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3I8L05BTUU+Ci08VFlQRT5HVmFsdWVBcnJheSo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Db2RpbmcgbGF5ZXIgcmF0ZSBkZWNpbWF0b3I8L05JQ0s+Ci08QkxVUkI+UmF0ZSBkZWNpbWF0aW9uIGZhY3RvcnMgZm9yIGVhY2ggbGF5ZXIuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjp0ZW1wb3JhbC1zY2FsYWJpbGl0eS10YXJnZXQtYml0cmF0ZTwvTkFNRT4KLTxUWVBFPkdWYWx1ZUFycmF5KjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkNvZGluZyBsYXllciB0YXJnZXQgYml0cmF0ZXM8L05JQ0s+Ci08QkxVUkI+VGFyZ2V0IGJpdHJhdGVzIGZvciBjb2RpbmcgbGF5ZXJzIChvbmUgcGVyIGxheWVyLCBkZWNyZWFzaW5nKS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnRocmVhZHM8L05BTUU+Ci08VFlQRT5naW50PC9UWVBFPgotPFJBTkdFPlswLDY0XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VGhyZWFkczwvTklDSz4KLTxCTFVSQj5OdW1iZXIgb2YgdGhyZWFkcyB0byB1c2UuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6dGltZWJhc2U8L05BTUU+Ci08VFlQRT5Hc3RGcmFjdGlvbjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlNob3J0ZXN0IGludGVyZnJhbWUgdGltZTwvTklDSz4KLTxCTFVSQj5GcmFjdGlvbiBvZiBvbmUgc2Vjb25kIHRoYXQgaXMgdGhlIHNob3J0ZXN0IGludGVyZnJhbWUgdGltZSAtIG5vcm1hbGx5IGxlZnQgYXMgemVybyB3aGljaCB3aWxsIGRlZmF1bHQgdG8gdGhlIGZyYW1lcmF0ZS48L0JMVVJCPgotPERFRkFVTFQ+PC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnRva2VuLXBhcnRpdGlvbnM8L05BTUU+Ci08VFlQRT5Hc3RWUDlFbmNUb2tlblBhcnRpdGlvbnM8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Ub2tlbiBwYXJ0aXRpb25zPC9OSUNLPgotPEJMVVJCPk51bWJlciBvZiB0b2tlbiBwYXJ0aXRpb25zLjwvQkxVUkI+Ci08REVGQVVMVD5PbmUgdG9rZW4gcGFydGl0aW9uPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RWUDlFbmM6OnR1bmluZzwvTkFNRT4KLTxUWVBFPkdzdFZQOUVuY1R1bmluZzwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlR1bmluZzwvTklDSz4KLTxCTFVSQj5UdW5pbmcuPC9CTFVSQj4KLTxERUZBVUxUPlR1bmUgZm9yIFBTTlI8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6dHdvcGFzcy12YnItYmlhczwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+WzAsMTAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Mi1wYXNzIFZCUiBiaWFzPC9OSUNLPgotPEJMVVJCPkNCUi9WQlIgYmlhcyAoMD1DQlIsIDEwMD1WQlIpLjwvQkxVUkI+Ci08REVGQVVMVD41MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjp0d29wYXNzLXZici1tYXhzZWN0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz4yLXBhc3MgR09QIG1heCBiaXRyYXRlPC9OSUNLPgotPEJMVVJCPkdPUCBtYXhpbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjp0d29wYXNzLXZici1taW5zZWN0aW9uPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz4yLXBhc3MgR09QIG1pbiBiaXRyYXRlPC9OSUNLPgotPEJMVVJCPkdPUCBtaW5pbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KS48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0VlA5RW5jOjp1bmRlcnNob290PC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bMCwxMDAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VW5kZXJzaG9vdCBQQ1Q8L05JQ0s+Ci08QkxVUkI+RGF0YXJhdGUgdW5kZXJzaG9vdCAobWluKSB0YXJnZXQgKCUpLjwvQkxVUkI+Ci08REVGQVVMVD4xMDA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOUVuYzo6dmVydGljYWwtc2NhbGluZy1tb2RlPC9OQU1FPgotPFRZUEU+R3N0VlA5RW5jU2NhbGluZ01vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5WZXJ0aWNhbCBzY2FsaW5nIG1vZGU8L05JQ0s+Ci08QkxVUkI+VmVydGljYWwgc2NhbGluZyBtb2RlLjwvQkxVUkI+Ci08REVGQVVMVD5Ob3JtYWw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOURlYzo6ZGVibG9ja2luZy1sZXZlbDwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPjw9IDE2PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5EZWJsb2NraW5nIExldmVsPC9OSUNLPgotPEJMVVJCPkRlYmxvY2tpbmcgbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjQ8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOURlYzo6bm9pc2UtbGV2ZWw8L05BTUU+Ci08VFlQRT5ndWludDwvVFlQRT4KLTxSQU5HRT48PSAxNjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Tm9pc2UgTGV2ZWw8L05JQ0s+Ci08QkxVUkI+Tm9pc2UgbGV2ZWwuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOURlYzo6cG9zdC1wcm9jZXNzaW5nPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5Qb3N0IFByb2Nlc3Npbmc8L05JQ0s+Ci08QkxVUkI+RW5hYmxlIHBvc3QgcHJvY2Vzc2luZy48L0JMVVJCPgotPERFRkFVTFQ+RkFMU0U8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOURlYzo6cG9zdC1wcm9jZXNzaW5nLWZsYWdzPC9OQU1FPgotPFRZUEU+R3N0VlA5RGVjUG9zdFByb2Nlc3NpbmdGbGFnczwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlBvc3QgUHJvY2Vzc2luZyBGbGFnczwvTklDSz4KLTxCTFVSQj5GbGFncyB0byBjb250cm9sIHBvc3QgcHJvY2Vzc2luZy48L0JMVVJCPgotPERFRkFVTFQ+RGVibG9ja3xEZW1hY3JvYmxvY2s8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFZQOURlYzo6dGhyZWFkczwvTkFNRT4KLTxUWVBFPmd1aW50PC9UWVBFPgotPFJBTkdFPlsxLDE2XTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4IFRocmVhZHM8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBudW1iZXIgb2YgZGVjb2RpbmcgdGhyZWFkcy48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwVlJhd1BheTo6Y2h1bmtzLXBlci1mcmFtZTwvTkFNRT4KLTxUWVBFPmdpbnQ8L1RZUEU+Ci08UkFOR0U+Pj0gMTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+Q2h1bmtzIHBlciBGcmFtZTwvTklDSz4KLTxCTFVSQj5TcGxpdCBhbmQgc2VuZCBvdXQgZWFjaCBmcmFtZSBpbiBtdWx0aXBsZSBjaHVua3MgdG8gcmVkdWNlIG92ZXJoZWFkLjwvQkxVUkI+Ci08REVGQVVMVD4xMDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVzaEZpbGVTcmM6OmFwcGxpZWQtcmF0ZTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Pj0gR19NSU5ET1VCTEU8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkFwcGxpZWQgUmF0ZTwvTklDSz4KLTxCTFVSQj5BcHBsaWVkIHJhdGUgdG8gdXNlIGluIFRJTUUgU0VHTUVOVC48L0JMVVJCPgotPERFRkFVTFQ+MTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVzaEZpbGVTcmM6OmluaXRpYWwtdGltZXN0YW1wPC9OQU1FPgotPFRZUEU+Z3VpbnQ2NDwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPkluaXRpYWwgVGltZXN0YW1wPC9OSUNLPgotPEJMVVJCPkluaXRpYWwgQnVmZmVyIFRpbWVzdGFtcCAoaWYgdGltZS1zZWdtZW50IFRSVUUpLjwvQkxVUkI+Ci08REVGQVVMVD4xODQ0Njc0NDA3MzcwOTU1MTYxNTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UHVzaEZpbGVTcmM6OmxvY2F0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RmlsZSBMb2NhdGlvbjwvTklDSz4KLTxCTFVSQj5Mb2NhdGlvbiBvZiB0aGUgZmlsZSB0byByZWFkLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdXNoRmlsZVNyYzo6cmF0ZTwvTkFNRT4KLTxUWVBFPmdkb3VibGU8L1RZUEU+Ci08UkFOR0U+Pj0gR19NSU5ET1VCTEU8L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPlJhdGU8L05JQ0s+Ci08QkxVUkI+UmF0ZSB0byB1c2UgaW4gVElNRSBTRUdNRU5ULjwvQkxVUkI+Ci08REVGQVVMVD4xPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdXNoRmlsZVNyYzo6c3RhcnQtdGltZTwvTkFNRT4KLTxUWVBFPmdpbnQ2NDwvVFlQRT4KLTxSQU5HRT4+PSAwPC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TdGFydCBUaW1lPC9OSUNLPgotPEJMVVJCPkluaXRpYWwgU3RhcnQgVGltZSAoaWYgdGltZS1zZWdtZW50IFRSVUUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdXNoRmlsZVNyYzo6c3RyZWFtLXRpbWU8L05BTUU+Ci08VFlQRT5naW50NjQ8L1RZUEU+Ci08UkFOR0U+Pj0gMDwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+U3RyZWFtIFRpbWU8L05JQ0s+Ci08QkxVUkI+SW5pdGlhbCBTdHJlYW0gVGltZSAoaWYgdGltZS1zZWdtZW50IFRSVUUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RQdXNoRmlsZVNyYzo6dGltZS1zZWdtZW50PC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5UaW1lIFNlZ21lbnQ8L05JQ0s+Ci08QkxVUkI+RW1pdCBUSU1FIFNFR01FTlRTLjwvQkxVUkI+Ci08REVGQVVMVD5GQUxTRTwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BsaXRNdXhTcmM6OmxvY2F0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RmlsZSBJbnB1dCBQYXR0ZXJuPC9OSUNLPgotPEJMVVJCPkdsb2IgcGF0dGVybiBmb3IgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlcyB0byByZWFkLjwvQkxVUkI+Ci08REVGQVVMVD5OVUxMPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGxpdE11eFNpbms6OmxvY2F0aW9uPC9OQU1FPgotPFRZUEU+Z2NoYXIqPC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+RmlsZSBPdXRwdXQgUGF0dGVybjwvTklDSz4KLTxCTFVSQj5Gb3JtYXQgc3RyaW5nIHBhdHRlcm4gZm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZXMgdG8gd3JpdGUgKGUuZy4gdmlkZW8lMDVkLm1wNCkuPC9CTFVSQj4KLTxERUZBVUxUPk5VTEw8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwbGl0TXV4U2luazo6bWF4LXNpemUtYnl0ZXM8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4LiBzaXplIGJ5dGVzPC9OSUNLPgotPEJMVVJCPk1heC4gYW1vdW50IG9mIGRhdGEgcGVyIGZpbGUgKGluIGJ5dGVzLCAwPWRpc2FibGUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGxpdE11eFNpbms6Om1heC1zaXplLXRpbWU8L05BTUU+Ci08VFlQRT5ndWludDY0PC9UWVBFPgotPFJBTkdFPjwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TWF4LiBzaXplIChucyk8L05JQ0s+Ci08QkxVUkI+TWF4LiBhbW91bnQgb2YgdGltZSBwZXIgZmlsZSAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9CTFVSQj4KLTxERUZBVUxUPjA8L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwbGl0TXV4U2luazo6bXV4LW92ZXJoZWFkPC9OQU1FPgotPFRZUEU+Z2RvdWJsZTwvVFlQRT4KLTxSQU5HRT5bMCwxXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+TXV4aW5nIE92ZXJoZWFkPC9OSUNLPgotPEJMVVJCPkV4dHJhIHNpemUgb3ZlcmhlYWQgb2YgbXV4aW5nICgwLjAyID0gMiUpLjwvQkxVUkI+Ci08REVGQVVMVD4wLjAyPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RTcGxpdE11eFNpbms6Om11eGVyPC9OQU1FPgotPFRZUEU+R3N0RWxlbWVudCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NdXhlcjwvTklDSz4KLTxCTFVSQj5UaGUgbXV4ZXIgZWxlbWVudCB0byB1c2UgKE5VTEwgPSBkZWZhdWx0IG1wNG11eCkuPC9CTFVSQj4KLTxERUZBVUxUPjwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BsaXRNdXhTaW5rOjpzaW5rPC9OQU1FPgotPFRZUEU+R3N0RWxlbWVudCo8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5TaW5rPC9OSUNLPgotPEJMVVJCPlRoZSBzaW5rIGVsZW1lbnQgKG9yIGVsZW1lbnQgY2hhaW4pIHRvIHVzZSAoTlVMTCA9IGRlZmF1bHQgZmlsZXNpbmspLjwvQkxVUkI+Ci08REVGQVVMVD48L0RFRkFVTFQ+Ci08L0FSRz4KLQotPEFSRz4KLTxOQU1FPkdzdFNwbGl0TXV4U2luazo6bWF4LWZpbGVzPC9OQU1FPgotPFRZUEU+Z3VpbnQ8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5NYXggZmlsZXM8L05JQ0s+Ci08QkxVUkI+TWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdG8ga2VlcCBvbiBkaXNrLiBPbmNlIHRoZSBtYXhpbXVtIGlzIHJlYWNoZWQsb2xkIGZpbGVzIHN0YXJ0IHRvIGJlIGRlbGV0ZWQgdG8gbWFrZSByb29tIGZvciBuZXcgb25lcy48L0JMVVJCPgotPERFRkFVTFQ+MDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0U3BsaXRNdXhTaW5rOjpzZW5kLWtleWZyYW1lLXJlcXVlc3RzPC9OQU1FPgotPFRZUEU+Z2Jvb2xlYW48L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5SZXF1ZXN0IGtleWZyYW1lcyBhdCBtYXgtc2l6ZS10aW1lPC9OSUNLPgotPEJMVVJCPlJlcXVlc3QgYSBrZXlmcmFtZSBldmVyeSBtYXgtc2l6ZS10aW1lIG5zIHRvIHRyeSBzcGxpdHRpbmcgYXQgdGhhdCBwb2ludC4gTmVlZHMgbWF4LXNpemUtYnl0ZXMgdG8gYmUgMCBpbiBvcmRlciB0byBiZSBlZmZlY3RpdmUuPC9CTFVSQj4KLTxERUZBVUxUPkZBTFNFPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBWUDlQYXk6OnBpY3R1cmUtaWQtbW9kZTwvTkFNRT4KLTxUWVBFPkdzdFZQOVJUUFBheU1vZGU8L1RZUEU+Ci08UkFOR0U+PC9SQU5HRT4KLTxGTEFHUz5ydzwvRkxBR1M+Ci08TklDSz5QaWN0dXJlIElEIE1vZGU8L05JQ0s+Ci08QkxVUkI+VGhlIHBpY3R1cmUgSUQgbW9kZSBmb3IgcGF5bG9hZGluZy48L0JMVVJCPgotPERFRkFVTFQ+Tm8gUGljdHVyZSBJRDwvREVGQVVMVD4KLTwvQVJHPgotCi08QVJHPgotPE5BTUU+R3N0UnRwSDI2NVBheTo6Y29uZmlnLWludGVydmFsPC9OQU1FPgotPFRZUEU+Z2ludDwvVFlQRT4KLTxSQU5HRT5bR19NQVhVTE9ORywzNjAwXTwvUkFOR0U+Ci08RkxBR1M+cnc8L0ZMQUdTPgotPE5JQ0s+VlBTIFNQUyBQUFMgU2VuZCBJbnRlcnZhbDwvTklDSz4KLTxCTFVSQj5TZW5kIFZQUywgU1BTIGFuZCBQUFMgSW5zZXJ0aW9uIEludGVydmFsIGluIHNlY29uZHMgKHNwcm9wIHBhcmFtZXRlciBzZXRzIHdpbGwgYmUgbXVsdGlwbGV4ZWQgaW4gdGhlIGRhdGEgc3RyZWFtIHdoZW4gZGV0ZWN0ZWQuKSAoMCA9IGRpc2FibGVkLCAtMSA9IHNlbmQgd2l0aCBldmVyeSBJRFIgZnJhbWUpLjwvQkxVUkI+Ci08REVGQVVMVD4wPC9ERUZBVUxUPgotPC9BUkc+Ci0KLTxBUkc+Ci08TkFNRT5Hc3RSdHBIMjY1UGF5OjpzcHJvcC1wYXJhbWV0ZXItc2V0czwvTkFNRT4KLTxUWVBFPmdjaGFyKjwvVFlQRT4KLTxSQU5HRT48L1JBTkdFPgotPEZMQUdTPnJ3PC9GTEFHUz4KLTxOSUNLPnNwcm9wLXBhcmFtZXRlci1zZXRzPC9OSUNLPgotPEJMVVJCPlRoZSBiYXNlNjQgc3Byb3AtcGFyYW1ldGVyLXNldHMgdG8gc2V0IGluIG91dCBjYXBzIChzZXQgdG8gTlVMTCB0byBleHRyYWN0IGZyb20gc3RyZWFtKS48L0JMVVJCPgotPERFRkFVTFQ+TlVMTDwvREVGQVVMVD4KLTwvQVJHPgotCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmhpZXJhcmNoeSBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjdkMTFkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaGllcmFyY2h5CisrKyAvZGV2L251bGwKQEAgLTEsMzYyICswLDAgQEAKLUdPYmplY3QKLSAgR0lPU3RyZWFtCi0gICAgR1Rsc0Nvbm5lY3Rpb24KLSAgR0luaXRpYWxseVVub3duZWQKLSAgICBHc3RPYmplY3QKLSAgICAgIEdzdEFsbG9jYXRvcgotICAgICAgICBHc3RBbGxvY2F0b3JTeXNtZW0KLSAgICAgIEdzdEF1ZGlvUmluZ0J1ZmZlcgotICAgICAgICBHc3RBdWRpb1NpbmtSaW5nQnVmZmVyCi0gICAgICAgIEdzdEF1ZGlvU3JjUmluZ0J1ZmZlcgotICAgICAgICBHc3RKYWNrQXVkaW9TaW5rUmluZ0J1ZmZlcgotICAgICAgICBHc3RKYWNrQXVkaW9TcmNSaW5nQnVmZmVyCi0gICAgICBHc3RCdXMKLSAgICAgIEdzdENsb2NrCi0gICAgICAgIEdzdFN5c3RlbUNsb2NrCi0gICAgICAgICAgR3N0QXVkaW9DbG9jawotICAgICAgR3N0Q29udHJvbEJpbmRpbmcKLSAgICAgIEdzdENvbnRyb2xTb3VyY2UKLSAgICAgIEdzdERldmljZVByb3ZpZGVyCi0gICAgICAgIEdzdFB1bHNlRGV2aWNlUHJvdmlkZXIKLSAgICAgICAgR3N0VjRsMkRldmljZVByb3ZpZGVyCi0gICAgICBHc3RFbGVtZW50Ci0gICAgICAgIEdzdDNHUFBNdXgKLSAgICAgICAgR3N0QXN0ZXJpc2toMjYzCi0gICAgICAgIEdzdEF1UGFyc2UKLSAgICAgICAgR3N0QXVkaW9EZWNvZGVyCi0gICAgICAgICAgR3N0QUxhd0RlYwotICAgICAgICAgIEdzdEZsYWNEZWMKLSAgICAgICAgICBHc3RNdUxhd0RlYwotICAgICAgICAgIEdzdFNwZWV4RGVjCi0gICAgICAgICAgR3N0V2F2cGFja0RlYwotICAgICAgICBHc3RBdWRpb0VuY29kZXIKLSAgICAgICAgICBHc3RBTGF3RW5jCi0gICAgICAgICAgR3N0RmxhY0VuYwotICAgICAgICAgIEdzdE11TGF3RW5jCi0gICAgICAgICAgR3N0U3BlZXhFbmMKLSAgICAgICAgICBHc3RXYXZwYWNrRW5jCi0gICAgICAgIEdzdEF1ZGlvVmlzdWFsaXplcgotICAgICAgICAgIEdzdEdvb20KLSAgICAgICAgICBHc3RHb29tMmsxCi0gICAgICAgIEdzdEF2aURlbXV4Ci0gICAgICAgIEdzdEF2aU11eAotICAgICAgICBHc3RBdmlTdWJ0aXRsZQotICAgICAgICBHc3RCYXNlUGFyc2UKLSAgICAgICAgICBHc3RBYWNQYXJzZQotICAgICAgICAgIEdzdEFjM1BhcnNlCi0gICAgICAgICAgR3N0QW1yUGFyc2UKLSAgICAgICAgICBHc3REY2FQYXJzZQotICAgICAgICAgIEdzdEZsYWNQYXJzZQotICAgICAgICAgIEdzdE1wZWdBdWRpb1BhcnNlCi0gICAgICAgICAgR3N0UnRwU3RyZWFtRGVwYXkKLSAgICAgICAgICBHc3RTYmNQYXJzZQotICAgICAgICAgIEdzdFdhdnBhY2tQYXJzZQotICAgICAgICBHc3RCYXNlU2luawotICAgICAgICAgIEdzdEF1ZGlvQmFzZVNpbmsKLSAgICAgICAgICAgIEdzdEF1ZGlvU2luawotICAgICAgICAgICAgICBHc3RPc3M0U2luawotICAgICAgICAgICAgICBHc3RPc3NTaW5rCi0gICAgICAgICAgICBHc3RKYWNrQXVkaW9TaW5rCi0gICAgICAgICAgICBHc3RQdWxzZVNpbmsKLSAgICAgICAgICBHc3RDQUNBU2luawotICAgICAgICAgIEdzdER5blVEUFNpbmsKLSAgICAgICAgICBHc3RNdWx0aUZpbGVTaW5rCi0gICAgICAgICAgR3N0TXVsdGlVRFBTaW5rCi0gICAgICAgICAgICBHc3RVRFBTaW5rCi0gICAgICAgICAgR3N0U2hvdXQyc2VuZAotICAgICAgICAgIEdzdFNvdXBIdHRwQ2xpZW50U2luawotICAgICAgICAgIEdzdFRlc3QKLSAgICAgICAgICBHc3RWaWRlb1NpbmsKLSAgICAgICAgICAgIEdzdEFBU2luawotICAgICAgICAgICAgR3N0R2RrUGl4YnVmU2luawotICAgICAgICAgICAgR3N0VjRsMlNpbmsKLSAgICAgICAgR3N0QmFzZVNyYwotICAgICAgICAgIEdzdERUTUZTcmMKLSAgICAgICAgICBHc3RQdXNoU3JjCi0gICAgICAgICAgICBHc3RBdWRpb0Jhc2VTcmMKLSAgICAgICAgICAgICAgR3N0QXVkaW9TcmMKLSAgICAgICAgICAgICAgICBHc3RPc3M0U291cmNlCi0gICAgICAgICAgICAgICAgR3N0T3NzU3JjCi0gICAgICAgICAgICAgICAgR3N0UHVsc2VTcmMKLSAgICAgICAgICAgICAgR3N0SmFja0F1ZGlvU3JjCi0gICAgICAgICAgICBHc3REVjEzOTRTcmMKLSAgICAgICAgICAgIEdzdEhEVjEzOTRTcmMKLSAgICAgICAgICAgIEdzdE11bHRpRmlsZVNyYwotICAgICAgICAgICAgR3N0U291cEhUVFBTcmMKLSAgICAgICAgICAgIEdzdFVEUFNyYwotICAgICAgICAgICAgR3N0VjRsMlNyYwotICAgICAgICAgICAgR3N0WEltYWdlU3JjCi0gICAgICAgICAgR3N0UlRQRFRNRlNyYwotICAgICAgICAgIEdzdFNwbGl0RmlsZVNyYwotICAgICAgICBHc3RCYXNlVHJhbnNmb3JtCi0gICAgICAgICAgR3N0QXVkaW9GaWx0ZXIKLSAgICAgICAgICAgIEdzdEF1ZGlvQW1wbGlmeQotICAgICAgICAgICAgR3N0QXVkaW9EeW5hbWljCi0gICAgICAgICAgICBHc3RBdWRpb0VjaG8KLSAgICAgICAgICAgIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyCi0gICAgICAgICAgICAgIEdzdEF1ZGlvRklSRmlsdGVyCi0gICAgICAgICAgICAgIEdzdEF1ZGlvV1NpbmNCYW5kCi0gICAgICAgICAgICAgIEdzdEF1ZGlvV1NpbmNMaW1pdAotICAgICAgICAgICAgR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIKLSAgICAgICAgICAgICAgR3N0QXVkaW9DaGViQmFuZAotICAgICAgICAgICAgICBHc3RBdWRpb0NoZWJMaW1pdAotICAgICAgICAgICAgICBHc3RBdWRpb0lJUkZpbHRlcgotICAgICAgICAgICAgR3N0QXVkaW9JbnZlcnQKLSAgICAgICAgICAgIEdzdEF1ZGlvS2FyYW9rZQotICAgICAgICAgICAgR3N0SWlyRXF1YWxpemVyCi0gICAgICAgICAgICAgIEdzdElpckVxdWFsaXplcjEwQmFuZHMKLSAgICAgICAgICAgICAgR3N0SWlyRXF1YWxpemVyM0JhbmRzCi0gICAgICAgICAgICAgIEdzdElpckVxdWFsaXplck5CYW5kcwotICAgICAgICAgICAgR3N0U3BlY3RydW0KLSAgICAgICAgICBHc3RBdWRpb1Bhbm9yYW1hCi0gICAgICAgICAgR3N0QnJlYWtNeURhdGEKLSAgICAgICAgICBHc3RDYXBzU2V0dGVyCi0gICAgICAgICAgR3N0Q3B1UmVwb3J0Ci0gICAgICAgICAgR3N0TGV2ZWwKLSAgICAgICAgICBHc3ROYXZTZWVrCi0gICAgICAgICAgR3N0UHJvZ3Jlc3NSZXBvcnQKLSAgICAgICAgICBHc3RSZ0FuYWx5c2lzCi0gICAgICAgICAgR3N0UmdMaW1pdGVyCi0gICAgICAgICAgR3N0U2NhbGV0ZW1wbwotICAgICAgICAgIEdzdFRhZ0luamVjdAotICAgICAgICAgIEdzdFZpZGVvRmlsdGVyCi0gICAgICAgICAgICBHc3RBZ2luZ1RWCi0gICAgICAgICAgICBHc3RBbHBoYQotICAgICAgICAgICAgR3N0QWxwaGFDb2xvcgotICAgICAgICAgICAgR3N0Q2Fpcm9PdmVybGF5Ci0gICAgICAgICAgICBHc3REaWNlVFYKLSAgICAgICAgICAgIEdzdEVkZ2VUVgotICAgICAgICAgICAgR3N0R2FtbWEKLSAgICAgICAgICAgIEdzdEdka1BpeGJ1Zk92ZXJsYXkKLSAgICAgICAgICAgIEdzdE5hdmlnYXRpb250ZXN0Ci0gICAgICAgICAgICBHc3RPcFRWCi0gICAgICAgICAgICBHc3RRdWFya1RWCi0gICAgICAgICAgICBHc3RSYWRpb2FjVFYKLSAgICAgICAgICAgIEdzdFJldlRWCi0gICAgICAgICAgICBHc3RSaXBwbGVUVgotICAgICAgICAgICAgR3N0U01QVEVBbHBoYQotICAgICAgICAgICAgR3N0U2hhZ2FkZWxpY1RWCi0gICAgICAgICAgICBHc3RTdHJlYWtUVgotICAgICAgICAgICAgR3N0VmVydGlnb1RWCi0gICAgICAgICAgICBHc3RWaWRlb0JhbGFuY2UKLSAgICAgICAgICAgIEdzdFZpZGVvQm94Ci0gICAgICAgICAgICBHc3RWaWRlb0Nyb3AKLSAgICAgICAgICAgIEdzdFZpZGVvRmxpcAotICAgICAgICAgICAgR3N0VmlkZW9NZWRpYW4KLSAgICAgICAgICAgIEdzdFdhcnBUVgotICAgICAgICBHc3RCaW4KLSAgICAgICAgICBHc3RBc3BlY3RSYXRpb0Nyb3AKLSAgICAgICAgICBHc3RBdXRvRGV0ZWN0Ci0gICAgICAgICAgICBHc3RBdXRvQXVkaW9TaW5rCi0gICAgICAgICAgICBHc3RBdXRvQXVkaW9TcmMKLSAgICAgICAgICAgIEdzdEF1dG9WaWRlb1NpbmsKLSAgICAgICAgICAgIEdzdEF1dG9WaWRlb1NyYwotICAgICAgICAgIEdzdFBpcGVsaW5lCi0gICAgICAgICAgICBHc3RRVE1vb3ZSZWNvdmVyCi0gICAgICAgICAgR3N0UHVzaEZpbGVTcmMKLSAgICAgICAgICBHc3RSVFNQU3JjCi0gICAgICAgICAgR3N0UmdWb2x1bWUKLSAgICAgICAgICBHc3RSdHBCaW4KLSAgICAgICAgICBHc3RTcGxpdE11eFNpbmsKLSAgICAgICAgICBHc3RTcGxpdE11eFNyYwotICAgICAgICBHc3RDdXR0ZXIKLSAgICAgICAgR3N0RFZEZWMKLSAgICAgICAgR3N0RFZEZW11eAotICAgICAgICBHc3REZWludGVybGFjZQotICAgICAgICBHc3REZWludGVybGVhdmUKLSAgICAgICAgR3N0RmxhY1RhZwotICAgICAgICBHc3RGbHZEZW11eAotICAgICAgICBHc3RGbHZNdXgKLSAgICAgICAgR3N0Rmx4RGVjCi0gICAgICAgIEdzdEdka1BpeGJ1ZkRlYwotICAgICAgICBHc3RJQ1lEZW11eAotICAgICAgICBHc3RJU01MTXV4Ci0gICAgICAgIEdzdEltYWdlRnJlZXplCi0gICAgICAgIEdzdEludGVybGVhdmUKLSAgICAgICAgR3N0TUoyTXV4Ci0gICAgICAgIEdzdE1QNE11eAotICAgICAgICBHc3RNYXRyb3NrYURlbXV4Ci0gICAgICAgIEdzdE1hdHJvc2thTXV4Ci0gICAgICAgICAgR3N0V2ViTU11eAotICAgICAgICBHc3RNYXRyb3NrYVBhcnNlCi0gICAgICAgIEdzdE11bHRpcGFydERlbXV4Ci0gICAgICAgIEdzdE11bHRpcGFydE11eAotICAgICAgICBHc3RRVERlbXV4Ci0gICAgICAgIEdzdFFUTXV4Ci0gICAgICAgIEdzdFJUUEJhc2VEZXBheWxvYWQKLSAgICAgICAgICBHc3RSVFBCVkRlcGF5Ci0gICAgICAgICAgR3N0UlRQRFZEZXBheQotICAgICAgICAgIEdzdFJUUEdTTURlcGF5Ci0gICAgICAgICAgR3N0UlRQT3B1c0RlcGF5Ci0gICAgICAgICAgR3N0UlRQU2lyZW5EZXBheQotICAgICAgICAgIEdzdFJUUGlMQkNEZXBheQotICAgICAgICAgIEdzdFJ0cEFDM0RlcGF5Ci0gICAgICAgICAgR3N0UnRwQU1SRGVwYXkKLSAgICAgICAgICBHc3RSdHBDRUxURGVwYXkKLSAgICAgICAgICBHc3RSdHBEVE1GRGVwYXkKLSAgICAgICAgICBHc3RSdHBHNzIyRGVwYXkKLSAgICAgICAgICBHc3RSdHBHNzIzRGVwYXkKLSAgICAgICAgICBHc3RSdHBHNzI2RGVwYXkKLSAgICAgICAgICBHc3RSdHBHNzI5RGVwYXkKLSAgICAgICAgICBHc3RSdHBHU1REZXBheQotICAgICAgICAgIEdzdFJ0cEgyNjFEZXBheQotICAgICAgICAgIEdzdFJ0cEgyNjNEZXBheQotICAgICAgICAgIEdzdFJ0cEgyNjNQRGVwYXkKLSAgICAgICAgICBHc3RSdHBIMjY0RGVwYXkKLSAgICAgICAgICBHc3RSdHBIMjY1RGVwYXkKLSAgICAgICAgICBHc3RSdHBKMktEZXBheQotICAgICAgICAgIEdzdFJ0cEpQRUdEZXBheQotICAgICAgICAgIEdzdFJ0cEtsdkRlcGF5Ci0gICAgICAgICAgR3N0UnRwTDE2RGVwYXkKLSAgICAgICAgICBHc3RSdHBMMjREZXBheQotICAgICAgICAgIEdzdFJ0cE1QMVNEZXBheQotICAgICAgICAgIEdzdFJ0cE1QMlREZXBheQotICAgICAgICAgIEdzdFJ0cE1QNEFEZXBheQotICAgICAgICAgIEdzdFJ0cE1QNEdEZXBheQotICAgICAgICAgIEdzdFJ0cE1QNFZEZXBheQotICAgICAgICAgIEdzdFJ0cE1QQURlcGF5Ci0gICAgICAgICAgR3N0UnRwTVBBUm9idXN0RGVwYXkKLSAgICAgICAgICBHc3RSdHBNUFZEZXBheQotICAgICAgICAgIEdzdFJ0cFBjbWFEZXBheQotICAgICAgICAgIEdzdFJ0cFBjbXVEZXBheQotICAgICAgICAgIEdzdFJ0cFFDRUxQRGVwYXkKLSAgICAgICAgICBHc3RSdHBRRE0yRGVwYXkKLSAgICAgICAgICBHc3RSdHBTUEVFWERlcGF5Ci0gICAgICAgICAgR3N0UnRwU1YzVkRlcGF5Ci0gICAgICAgICAgR3N0UnRwU2JjRGVwYXkKLSAgICAgICAgICBHc3RSdHBUaGVvcmFEZXBheQotICAgICAgICAgIEdzdFJ0cFZQOERlcGF5Ci0gICAgICAgICAgR3N0UnRwVlA5RGVwYXkKLSAgICAgICAgICBHc3RSdHBWUmF3RGVwYXkKLSAgICAgICAgICBHc3RSdHBWb3JiaXNEZXBheQotICAgICAgICAgIEdzdFJ0cFhRVERlcGF5Ci0gICAgICAgIEdzdFJUUEJhc2VQYXlsb2FkCi0gICAgICAgICAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZAotICAgICAgICAgICAgR3N0UlRQQlZQYXkKLSAgICAgICAgICAgIEdzdFJUUElMQkNQYXkKLSAgICAgICAgICAgIEdzdFJUUFNpcmVuUGF5Ci0gICAgICAgICAgICBHc3RSdHBHNzIyUGF5Ci0gICAgICAgICAgICBHc3RSdHBHNzI2UGF5Ci0gICAgICAgICAgICBHc3RSdHBMMTZQYXkKLSAgICAgICAgICAgIEdzdFJ0cEwyNFBheQotICAgICAgICAgICAgR3N0UnRwUGNtYVBheQotICAgICAgICAgICAgR3N0UnRwUGNtdVBheQotICAgICAgICAgIEdzdFJUUERWUGF5Ci0gICAgICAgICAgR3N0UlRQRzcyM1BheQotICAgICAgICAgIEdzdFJUUEc3MjlQYXkKLSAgICAgICAgICBHc3RSVFBHU01QYXkKLSAgICAgICAgICBHc3RSVFBNUDJUUGF5Ci0gICAgICAgICAgR3N0UlRQTVBWUGF5Ci0gICAgICAgICAgR3N0UnRwQUMzUGF5Ci0gICAgICAgICAgR3N0UnRwQU1SUGF5Ci0gICAgICAgICAgR3N0UnRwQ0VMVFBheQotICAgICAgICAgIEdzdFJ0cEdTVFBheQotICAgICAgICAgIEdzdFJ0cEgyNjFQYXkKLSAgICAgICAgICBHc3RSdHBIMjYzUFBheQotICAgICAgICAgIEdzdFJ0cEgyNjNQYXkKLSAgICAgICAgICBHc3RSdHBIMjY0UGF5Ci0gICAgICAgICAgR3N0UnRwSDI2NVBheQotICAgICAgICAgIEdzdFJ0cEoyS1BheQotICAgICAgICAgIEdzdFJ0cEpQRUdQYXkKLSAgICAgICAgICBHc3RSdHBLbHZQYXkKLSAgICAgICAgICBHc3RSdHBNUDRBUGF5Ci0gICAgICAgICAgR3N0UnRwTVA0R1BheQotICAgICAgICAgIEdzdFJ0cE1QNFZQYXkKLSAgICAgICAgICBHc3RSdHBNUEFQYXkKLSAgICAgICAgICBHc3RSdHBPUFVTUGF5Ci0gICAgICAgICAgR3N0UnRwU0JDUGF5Ci0gICAgICAgICAgR3N0UnRwU1BFRVhQYXkKLSAgICAgICAgICBHc3RSdHBUaGVvcmFQYXkKLSAgICAgICAgICBHc3RSdHBWUDhQYXkKLSAgICAgICAgICBHc3RSdHBWUDlQYXkKLSAgICAgICAgICBHc3RSdHBWUmF3UGF5Ci0gICAgICAgICAgR3N0UnRwVm9yYmlzUGF5Ci0gICAgICAgIEdzdFJUUERlYwotICAgICAgICBHc3RSVFBNdXgKLSAgICAgICAgICBHc3RSVFBEVE1GTXV4Ci0gICAgICAgIEdzdFJUUFJ0eFF1ZXVlCi0gICAgICAgIEdzdFJuZEJ1ZmZlclNpemUKLSAgICAgICAgR3N0UnRwSml0dGVyQnVmZmVyCi0gICAgICAgIEdzdFJ0cFB0RGVtdXgKLSAgICAgICAgR3N0UnRwUnR4UmVjZWl2ZQotICAgICAgICBHc3RSdHBSdHhTZW5kCi0gICAgICAgIEdzdFJ0cFNlc3Npb24KLSAgICAgICAgR3N0UnRwU3NyY0RlbXV4Ci0gICAgICAgIEdzdFJ0cFN0cmVhbVBheQotICAgICAgICBHc3RTTVBURQotICAgICAgICBHc3RTaGFwZVdpcGUKLSAgICAgICAgR3N0VGFnRGVtdXgKLSAgICAgICAgICBHc3RBcGVEZW11eAotICAgICAgICAgIEdzdElEM0RlbXV4Ci0gICAgICAgIEdzdFRhZ011eAotICAgICAgICAgIEdzdEFwZXYyTXV4Ci0gICAgICAgICAgR3N0SWQzdjJNdXgKLSAgICAgICAgR3N0VjRsMlJhZGlvCi0gICAgICAgIEdzdFZpZGVvRGVjb2RlcgotICAgICAgICAgIEdzdEpwZWdEZWMKLSAgICAgICAgICBHc3RQbmdEZWMKLSAgICAgICAgICBHc3RWUFhEZWMKLSAgICAgICAgICAgIEdzdFZQOERlYwotICAgICAgICAgICAgR3N0VlA5RGVjCi0gICAgICAgIEdzdFZpZGVvRW5jb2RlcgotICAgICAgICAgIEdzdEpwZWdFbmMKLSAgICAgICAgICBHc3RQbmdFbmMKLSAgICAgICAgICBHc3RWUFhFbmMKLSAgICAgICAgICAgIEdzdFZQOEVuYwotICAgICAgICAgICAgR3N0VlA5RW5jCi0gICAgICAgICAgR3N0WTRtRW5jb2RlCi0gICAgICAgIEdzdFZpZGVvTWl4ZXIyCi0gICAgICAgIEdzdFdhdkVuYwotICAgICAgICBHc3RXYXZQYXJzZQotICAgICAgR3N0UGFkCi0gICAgICAgIEdzdEludGVybGVhdmVQYWQKLSAgICAgICAgR3N0VmlkZW9NaXhlcjJQYWQKLSAgICAgIEdzdFBhZFRlbXBsYXRlCi0gICAgICBHc3RQbHVnaW4KLSAgICAgIEdzdFBsdWdpbkZlYXR1cmUKLSAgICAgICAgR3N0RGV2aWNlUHJvdmlkZXJGYWN0b3J5Ci0gICAgICAgIEdzdEVsZW1lbnRGYWN0b3J5Ci0gICAgICAgIEdzdFRyYWNlckZhY3RvcnkKLSAgICAgICAgR3N0VHlwZUZpbmRGYWN0b3J5Ci0gICAgICBHc3RSZWdpc3RyeQotICAgICAgR3N0VGFzawotICAgICAgR3N0VGFza1Bvb2wKLSAgR1Jlc29sdmVyCi0gIEdTb2NrZXQKLSAgR1NvY2tldEFkZHJlc3MKLSAgICBHSW5ldFNvY2tldEFkZHJlc3MKLSAgICAgIEdQcm94eUFkZHJlc3MKLSAgR1NvY2tldENsaWVudAotICBHU29ja2V0Q29udHJvbE1lc3NhZ2UKLSAgICBHc3RJUFBrdGluZm9NZXNzYWdlCi0gICAgR3N0SVBWNlBrdGluZm9NZXNzYWdlCi0gIEdTb2NrZXRMaXN0ZW5lcgotICAgIEdTb2NrZXRTZXJ2aWNlCi0gIEdUbHNDZXJ0aWZpY2F0ZQotICBHVGxzRGF0YWJhc2UKLSAgR1Rsc0ludGVyYWN0aW9uCi0gIEdka1BpeGJ1ZgotICBHc3RDb2xvckJhbGFuY2VDaGFubmVsCi0gIEdzdFR1bmVyQ2hhbm5lbAotICBHc3RUdW5lck5vcm0KLSAgUlRQU2Vzc2lvbgotICBTb3VwU2Vzc2lvbgotR0ludGVyZmFjZQotICBHRGF0YWdyYW1CYXNlZAotICBHSWNvbgotICBHSW5pdGFibGUKLSAgR0xvYWRhYmxlSWNvbgotICBHUHJveHlSZXNvbHZlcgotICBHU29ja2V0Q29ubmVjdGFibGUKLSAgR1R5cGVQbHVnaW4KLSAgR3N0Q2hpbGRQcm94eQotICBHc3RDb2xvckJhbGFuY2UKLSAgR3N0UHJlc2V0Ci0gIEdzdFN0cmVhbVZvbHVtZQotICBHc3RUYWdTZXR0ZXIKLSAgR3N0VGFnWG1wV3JpdGVyCi0gIEdzdFRvY1NldHRlcgotICBHc3RUdW5lcgotICBHc3RVUklIYW5kbGVyCi0gIEdzdFZpZGVvRGlyZWN0aW9uCi0gIEdzdFZpZGVvT3JpZW50YXRpb24KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlcyBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuaW50ZXJmYWNlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRmZTZjZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLmludGVyZmFjZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotR0luZXRTb2NrZXRBZGRyZXNzIEdTb2NrZXRDb25uZWN0YWJsZQotR1Byb3h5QWRkcmVzcyBHU29ja2V0Q29ubmVjdGFibGUKLUdTb2NrZXQgR0luaXRhYmxlCi1HU29ja2V0IEdJbml0YWJsZSBHRGF0YWdyYW1CYXNlZAotR1NvY2tldEFkZHJlc3MgR1NvY2tldENvbm5lY3RhYmxlCi1HZGtQaXhidWYgR0ljb24KLUdka1BpeGJ1ZiBHSWNvbiBHTG9hZGFibGVJY29uCi1Hc3QzR1BQTXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIKLUdzdDNHUFBNdXggR3N0VGFnU2V0dGVyIEdzdFRhZ1htcFdyaXRlciBHc3RQcmVzZXQKLUdzdEFMYXdFbmMgR3N0UHJlc2V0Ci1Hc3RBcGV2Mk11eCBHc3RUYWdTZXR0ZXIKLUdzdEFzcGVjdFJhdGlvQ3JvcCBHc3RDaGlsZFByb3h5Ci1Hc3RBdWRpb0VuY29kZXIgR3N0UHJlc2V0Ci1Hc3RBdXRvQXVkaW9TaW5rIEdzdENoaWxkUHJveHkKLUdzdEF1dG9BdWRpb1NyYyBHc3RDaGlsZFByb3h5Ci1Hc3RBdXRvRGV0ZWN0IEdzdENoaWxkUHJveHkKLUdzdEF1dG9WaWRlb1NpbmsgR3N0Q2hpbGRQcm94eQotR3N0QXV0b1ZpZGVvU3JjIEdzdENoaWxkUHJveHkKLUdzdEF2aU11eCBHc3RUYWdTZXR0ZXIKLUdzdEJpbiBHc3RDaGlsZFByb3h5Ci1Hc3REVjEzOTRTcmMgR3N0VVJJSGFuZGxlcgotR3N0RFYxMzk0U3JjIEdzdFVSSUhhbmRsZXIgR3N0UHJvcGVydHlQcm9iZQotR3N0RGVpbnRlcmxhY2UgR3N0Q2hpbGRQcm94eQotR3N0RmxhY0VuYyBHc3RQcmVzZXQgR3N0VGFnU2V0dGVyCi1Hc3RGbGFjRW5jIEdzdFByZXNldCBHc3RUYWdTZXR0ZXIgR3N0VG9jU2V0dGVyCi1Hc3RGbGFjRW5jIEdzdFRhZ1NldHRlciBHc3RQcmVzZXQKLUdzdEZsYWNUYWcgR3N0VGFnU2V0dGVyCi1Hc3RGbHZNdXggR3N0VGFnU2V0dGVyCi1Hc3RHQ29uZkF1ZGlvU2luayBHc3RDaGlsZFByb3h5Ci1Hc3RHQ29uZkF1ZGlvU3JjIEdzdENoaWxkUHJveHkKLUdzdEdDb25mVmlkZW9TaW5rIEdzdENoaWxkUHJveHkKLUdzdEdDb25mVmlkZW9TcmMgR3N0Q2hpbGRQcm94eQotR3N0R1BQTXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIKLUdzdEhEVjEzOTRTcmMgR3N0VVJJSGFuZGxlcgotR3N0SERWMTM5NFNyYyBHc3RVUklIYW5kbGVyIEdzdFByb3BlcnR5UHJvYmUKLUdzdEhhbEF1ZGlvU2luayBHc3RDaGlsZFByb3h5Ci1Hc3RIYWxBdWRpb1NyYyBHc3RDaGlsZFByb3h5Ci1Hc3RJU01MTXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIKLUdzdElTTUxNdXggR3N0VGFnU2V0dGVyIEdzdFRhZ1htcFdyaXRlciBHc3RQcmVzZXQKLUdzdElkM3YyTXV4IEdzdFRhZ1NldHRlcgotR3N0SWlyRXF1YWxpemVyIEdzdENoaWxkUHJveHkKLUdzdElpckVxdWFsaXplciBHc3RDaGlsZFByb3h5IEdzdFByZXNldAotR3N0SWlyRXF1YWxpemVyMTBCYW5kcyBHc3RDaGlsZFByb3h5IEdzdFByZXNldAotR3N0SWlyRXF1YWxpemVyM0JhbmRzIEdzdENoaWxkUHJveHkgR3N0UHJlc2V0Ci1Hc3RJaXJFcXVhbGl6ZXJOQmFuZHMgR3N0Q2hpbGRQcm94eQotR3N0SWlyRXF1YWxpemVyTkJhbmRzIEdzdENoaWxkUHJveHkgR3N0UHJlc2V0Ci1Hc3RKcGVnRW5jIEdzdFByZXNldAotR3N0TUoyTXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIKLUdzdE1KMk11eCBHc3RUYWdTZXR0ZXIgR3N0VGFnWG1wV3JpdGVyIEdzdFByZXNldAotR3N0TVA0TXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIKLUdzdE1QNE11eCBHc3RUYWdTZXR0ZXIgR3N0VGFnWG1wV3JpdGVyIEdzdFByZXNldAotR3N0TWF0cm9za2FNdXggR3N0VGFnU2V0dGVyCi1Hc3RNYXRyb3NrYU11eCBHc3RUYWdTZXR0ZXIgR3N0VG9jU2V0dGVyCi1Hc3RNdUxhd0VuYyBHc3RQcmVzZXQKLUdzdE9zczRNaXhlciBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlIEdzdE1peGVyIEdzdFByb3BlcnR5UHJvYmUKLUdzdE9zczRTaW5rIEdzdFN0cmVhbVZvbHVtZQotR3N0T3NzNFNpbmsgR3N0U3RyZWFtVm9sdW1lIEdzdFByb3BlcnR5UHJvYmUKLUdzdE9zczRTb3VyY2UgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RNaXhlciBHc3RQcm9wZXJ0eVByb2JlCi1Hc3RPc3NNaXhlckVsZW1lbnQgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RNaXhlcgotR3N0T3NzU3JjIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgR3N0TWl4ZXIKLUdzdFBpcGVsaW5lIEdzdENoaWxkUHJveHkKLUdzdFBuZ0VuYyBHc3RQcmVzZXQKLUdzdFB1bHNlQXVkaW9TaW5rIEdzdENoaWxkUHJveHkKLUdzdFB1bHNlTWl4ZXIgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RNaXhlciBHc3RQcm9wZXJ0eVByb2JlCi1Hc3RQdWxzZU1peGVyIEdzdE1peGVyCi1Hc3RQdWxzZVNpbmsgR3N0U3RyZWFtVm9sdW1lCi1Hc3RQdWxzZVNpbmsgR3N0U3RyZWFtVm9sdW1lIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgR3N0UHJvcGVydHlQcm9iZQotR3N0UHVsc2VTcmMgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RNaXhlciBHc3RQcm9wZXJ0eVByb2JlCi1Hc3RQdWxzZVNyYyBHc3RNaXhlciBHc3RTdHJlYW1Wb2x1bWUKLUdzdFB1bHNlU3JjIEdzdFN0cmVhbVZvbHVtZQotR3N0UHVsc2VTcmMgR3N0U3RyZWFtVm9sdW1lIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgR3N0TWl4ZXIgR3N0UHJvcGVydHlQcm9iZQotR3N0UHVzaEZpbGVTcmMgR3N0Q2hpbGRQcm94eSBHc3RVUklIYW5kbGVyCi1Hc3RRVE1vb3ZSZWNvdmVyIEdzdENoaWxkUHJveHkKLUdzdFFUTXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIKLUdzdFFUTXV4IEdzdFRhZ1NldHRlciBHc3RUYWdYbXBXcml0ZXIgR3N0UHJlc2V0Ci1Hc3RSVFNQU3JjIEdzdENoaWxkUHJveHkgR3N0VVJJSGFuZGxlcgotR3N0UmdWb2x1bWUgR3N0Q2hpbGRQcm94eQotR3N0UnRwQmluIEdzdENoaWxkUHJveHkKLUdzdFNob3V0MnNlbmQgR3N0VGFnU2V0dGVyCi1Hc3RTb3VwSFRUUFNyYyBHc3RVUklIYW5kbGVyCi1Hc3RTcGVleEVuYyBHc3RQcmVzZXQgR3N0VGFnU2V0dGVyCi1Hc3RTcGVleEVuYyBHc3RUYWdTZXR0ZXIgR3N0UHJlc2V0Ci1Hc3RTcGxpdEZpbGVTcmMgR3N0VVJJSGFuZGxlcgotR3N0U3BsaXRNdXhTaW5rIEdzdENoaWxkUHJveHkKLUdzdFNwbGl0TXV4U3JjIEdzdENoaWxkUHJveHkgR3N0VVJJSGFuZGxlcgotR3N0U3dpdGNoU2luayBHc3RDaGlsZFByb3h5Ci1Hc3RTd2l0Y2hTcmMgR3N0Q2hpbGRQcm94eQotR3N0VGFnTGliTXV4IEdzdFRhZ1NldHRlcgotR3N0VGFnTXV4IEdzdFRhZ1NldHRlcgotR3N0VURQU2luayBHc3RVUklIYW5kbGVyCi1Hc3RVRFBTcmMgR3N0VVJJSGFuZGxlcgotR3N0VjRsMlJhZGlvIEdzdFVSSUhhbmRsZXIgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RUdW5lciBHc3RQcm9wZXJ0eVByb2JlCi1Hc3RWNGwyUmFkaW8gR3N0VVJJSGFuZGxlciBHc3RUdW5lcgotR3N0VjRsMlNpbmsgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RYT3ZlcmxheSBHc3ROYXZpZ2F0aW9uIEdzdENvbG9yQmFsYW5jZSBHc3RWaWRlb09yaWVudGF0aW9uIEdzdFByb3BlcnR5UHJvYmUKLUdzdFY0bDJTaW5rIEdzdFR1bmVyIEdzdENvbG9yQmFsYW5jZSBHc3RWaWRlb09yaWVudGF0aW9uCi1Hc3RWNGwyU2luayBHc3RUdW5lciBHc3RWaWRlb092ZXJsYXkgR3N0TmF2aWdhdGlvbiBHc3RDb2xvckJhbGFuY2UgR3N0VmlkZW9PcmllbnRhdGlvbgotR3N0VjRsMlNyYyBHc3RVUklIYW5kbGVyIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgR3N0VHVuZXIgR3N0Q29sb3JCYWxhbmNlIEdzdFZpZGVvT3JpZW50YXRpb24gR3N0UHJvcGVydHlQcm9iZQotR3N0VjRsMlNyYyBHc3RVUklIYW5kbGVyIEdzdFR1bmVyIEdzdENvbG9yQmFsYW5jZSBHc3RWaWRlb09yaWVudGF0aW9uCi1Hc3RWUDhFbmMgR3N0UHJlc2V0IEdzdFRhZ1NldHRlcgotR3N0VlA5RW5jIEdzdFByZXNldCBHc3RUYWdTZXR0ZXIKLUdzdFZQWEVuYyBHc3RQcmVzZXQgR3N0VGFnU2V0dGVyCi1Hc3RWaWRlb0JhbGFuY2UgR3N0Q29sb3JCYWxhbmNlCi1Hc3RWaWRlb0JhbGFuY2UgR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RDb2xvckJhbGFuY2UKLUdzdFZpZGVvRW5jb2RlciBHc3RQcmVzZXQKLUdzdFZpZGVvRmxpcCBHc3RWaWRlb0RpcmVjdGlvbgotR3N0VmlkZW9NaXhlciBHc3RDaGlsZFByb3h5Ci1Hc3RWaWRlb01peGVyMiBHc3RDaGlsZFByb3h5Ci1Hc3RXYXZFbmMgR3N0VGFnU2V0dGVyIEdzdFRvY1NldHRlcgotR3N0V2F2cGFja0VuYyBHc3RQcmVzZXQKLUdzdFdlYk1NdXggR3N0VGFnU2V0dGVyCi1Hc3RXZWJNTXV4IEdzdFRhZ1NldHRlciBHc3RUb2NTZXR0ZXIKLUdzdFk0bUVuY29kZSBHc3RQcmVzZXQKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlcyBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMucHJlcmVxdWlzaXRlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhZmExNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnByZXJlcXVpc2l0ZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1HRGF0YWdyYW1CYXNlZCBHT2JqZWN0Ci1HSWNvbiBHT2JqZWN0Ci1HSW5pdGFibGUgR09iamVjdAotR0xvYWRhYmxlSWNvbiBHSWNvbiBHT2JqZWN0Ci1HUHJveHlSZXNvbHZlciBHT2JqZWN0Ci1HU29ja2V0Q29ubmVjdGFibGUgR09iamVjdAotR3N0Q2hpbGRQcm94eSBHT2JqZWN0Ci1Hc3RDaGlsZFByb3h5IEdzdE9iamVjdAotR3N0Q29sb3JCYWxhbmNlIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgR3N0RWxlbWVudAotR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RFbGVtZW50Ci1Hc3RNaXhlciBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlIEdzdEVsZW1lbnQKLUdzdFN0cmVhbVZvbHVtZSBHT2JqZWN0Ci1Hc3RUYWdTZXR0ZXIgR3N0RWxlbWVudAotR3N0VGFnWG1wV3JpdGVyIEdzdEVsZW1lbnQKLUdzdFRvY1NldHRlciBHc3RFbGVtZW50Ci1Hc3RUdW5lciBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlIEdzdEVsZW1lbnQKLUdzdFZpZGVvT3JpZW50YXRpb24gR3N0SW1wbGVtZW50c0ludGVyZmFjZSBHc3RFbGVtZW50Ci1Hc3RYT3ZlcmxheSBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlIEdzdEVsZW1lbnQKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFscyBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMuc2lnbmFscwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiMTdlOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLnNpZ25hbHMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotPFNJR05BTD4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6YWRkPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RNdWx0aVVEUFNpbmsgKmdzdG11bHRpdWRwc2luawotZ2NoYXIgKmFyZzEKLWdpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpjbGVhcjwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bGE8L0ZMQUdTPgotR3N0TXVsdGlVRFBTaW5rICpnc3RtdWx0aXVkcHNpbmsKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpjbGllbnQtYWRkZWQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0TXVsdGlVRFBTaW5rICpnc3RtdWx0aXVkcHNpbmsKLWdjaGFyICphcmcxCi1naW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6Y2xpZW50LXJlbW92ZWQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0TXVsdGlVRFBTaW5rICpnc3RtdWx0aXVkcHNpbmsKLWdjaGFyICphcmcxCi1naW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdE11bHRpVURQU2luazo6Z2V0LXN0YXRzPC9OQU1FPgotPFJFVFVSTlM+R3N0U3RydWN0dXJlKjwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RNdWx0aVVEUFNpbmsgKmdzdG11bHRpdWRwc2luawotZ2NoYXIgKmFyZzEKLWdpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0TXVsdGlVRFBTaW5rOjpyZW1vdmU8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmxhPC9GTEFHUz4KLUdzdE11bHRpVURQU2luayAqZ3N0bXVsdGl1ZHBzaW5rCi1nY2hhciAqYXJnMQotZ2ludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3REeW5VRFBTaW5rOjpnZXQtc3RhdHM8L05BTUU+Ci08UkVUVVJOUz5Hc3RTdHJ1Y3R1cmUqPC9SRVRVUk5TPgotPEZMQUdTPmxhPC9GTEFHUz4KLUdzdER5blVEUFNpbmsgKmdzdGR5bnVkcHNpbmsKLWdjaGFyICphcmcxCi1naW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFNob3V0MnNlbmQ6OmNvbm5lY3Rpb24tcHJvYmxlbTwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+YzwvRkxBR1M+Ci1Hc3RTaG91dDJzZW5kICpnc3RzaG91dDJzZW5kCi1naW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdERWMTM5NFNyYzo6ZnJhbWUtZHJvcHBlZDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3REVjEzOTRTcmMgKmdzdGR2MTM5NHNyYwotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSVFBEZWM6OmNsZWFyLXB0LW1hcDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSVFBEZWMgKmdzdHJ0cGRlYwotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSVFBEZWM6OnJlcXVlc3QtcHQtbWFwPC9OQU1FPgotPFJFVFVSTlM+R3N0Q2Fwcyo8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSVFBEZWMgKmdzdHJ0cGRlYwotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJUUERlYzo6b24tYnllLXNzcmM8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UlRQRGVjICpnc3RydHBkZWMKLWd1aW50ICBhcmcxCi1ndWludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSVFBEZWM6Om9uLWJ5ZS10aW1lb3V0PC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJUUERlYyAqZ3N0cnRwZGVjCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UlRQRGVjOjpvbi1uZXctc3NyYzwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSVFBEZWMgKmdzdHJ0cGRlYwotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJUUERlYzo6b24tc3NyYy1jb2xsaXNpb248L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UlRQRGVjICpnc3RydHBkZWMKLWd1aW50ICBhcmcxCi1ndWludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSVFBEZWM6Om9uLXNzcmMtdmFsaWRhdGVkPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJUUERlYyAqZ3N0cnRwZGVjCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UlRQRGVjOjpvbi10aW1lb3V0PC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJUUERlYyAqZ3N0cnRwZGVjCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0QXVkaW9GSVJGaWx0ZXI6OnJhdGUtY2hhbmdlZDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RBdWRpb0ZJUkZpbHRlciAqZ3N0YXVkaW9maXJmaWx0ZXIKLWdpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0QXVkaW9JSVJGaWx0ZXI6OnJhdGUtY2hhbmdlZDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RBdWRpb0lJUkZpbHRlciAqZ3N0YXVkaW9paXJmaWx0ZXIKLWdpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpjbGVhci1wdC1tYXA8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmxhPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6Z2V0LWludGVybmFsLXNlc3Npb248L05BTUU+Ci08UkVUVVJOUz5SVFBTZXNzaW9uKjwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpvbi1ieWUtc3NyYzwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6b24tYnllLXRpbWVvdXQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi1ndWludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46Om9uLW5ldy1zc3JjPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpvbi1ucHQtc3RvcDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6b24tc2VuZGVyLXRpbWVvdXQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi1ndWludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46Om9uLXNzcmMtYWN0aXZlPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpvbi1zc3JjLWNvbGxpc2lvbjwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6b24tc3NyYy1zZGVzPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpvbi1zc3JjLXZhbGlkYXRlZDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6b24tdGltZW91dDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLWd1aW50ICBhcmcyCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6cmVxdWVzdC1wdC1tYXA8L05BTUU+Ci08UkVUVVJOUz5Hc3RDYXBzKjwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpyZXNldC1zeW5jPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46OnBheWxvYWQtdHlwZS1jaGFuZ2U8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi1ndWludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46Om5ldy1qaXR0ZXJidWZmZXI8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLUdzdEVsZW1lbnQgKmFyZzEKLWd1aW50ICBhcmcyCi1ndWludCAgYXJnMwotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46OnJlcXVlc3QtYXV4LXJlY2VpdmVyPC9OQU1FPgotPFJFVFVSTlM+R3N0RWxlbWVudCo8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpyZXF1ZXN0LWF1eC1zZW5kZXI8L05BTUU+Ci08UkVUVVJOUz5Hc3RFbGVtZW50KjwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46OnJlcXVlc3QtcnRjcC1kZWNvZGVyPC9OQU1FPgotPFJFVFVSTlM+R3N0RWxlbWVudCo8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBCaW4gKmdzdHJ0cGJpbgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpyZXF1ZXN0LXJ0Y3AtZW5jb2RlcjwvTkFNRT4KLTxSRVRVUk5TPkdzdEVsZW1lbnQqPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6cmVxdWVzdC1ydHAtZGVjb2RlcjwvTkFNRT4KLTxSRVRVUk5TPkdzdEVsZW1lbnQqPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6cmVxdWVzdC1ydHAtZW5jb2RlcjwvTkFNRT4KLTxSRVRVUk5TPkdzdEVsZW1lbnQqPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEJpbjo6b24tbmV3LXNlbmRlci1zc3JjPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEJpbiAqZ3N0cnRwYmluCi1ndWludCAgYXJnMQotZ3VpbnQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwQmluOjpvbi1zZW5kZXItc3NyYy1hY3RpdmU8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi1ndWludCAgYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBCaW46OmdldC1zZXNzaW9uPC9OQU1FPgotPFJFVFVSTlM+R3N0RWxlbWVudCo8L1JFVFVSTlM+Ci08RkxBR1M+bGE8L0ZMQUdTPgotR3N0UnRwQmluICpnc3RydHBiaW4KLWd1aW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cEppdHRlckJ1ZmZlcjo6Y2xlYXItcHQtbWFwPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RSdHBKaXR0ZXJCdWZmZXIgKmdzdHJ0cGppdHRlcmJ1ZmZlcgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6OmhhbmRsZS1zeW5jPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cEppdHRlckJ1ZmZlciAqZ3N0cnRwaml0dGVyYnVmZmVyCi1Hc3RTdHJ1Y3R1cmUgKmFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjpvbi1ucHQtc3RvcDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBKaXR0ZXJCdWZmZXIgKmdzdHJ0cGppdHRlcmJ1ZmZlcgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBKaXR0ZXJCdWZmZXI6OnJlcXVlc3QtcHQtbWFwPC9OQU1FPgotPFJFVFVSTlM+R3N0Q2Fwcyo8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBKaXR0ZXJCdWZmZXIgKmdzdHJ0cGppdHRlcmJ1ZmZlcgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwSml0dGVyQnVmZmVyOjpzZXQtYWN0aXZlPC9OQU1FPgotPFJFVFVSTlM+Z3VpbnQ2NDwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RSdHBKaXR0ZXJCdWZmZXIgKmdzdHJ0cGppdHRlcmJ1ZmZlcgotZ2Jvb2xlYW4gIGFyZzEKLWd1aW50NjQgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwUHREZW11eDo6Y2xlYXItcHQtbWFwPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sYTwvRkxBR1M+Ci1Hc3RSdHBQdERlbXV4ICpnc3RydHBwdGRlbXV4Ci08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cFB0RGVtdXg6Om5ldy1wYXlsb2FkLXR5cGU8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwUHREZW11eCAqZ3N0cnRwcHRkZW11eAotZ3VpbnQgIGFyZzEKLUdzdFBhZCAqYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBQdERlbXV4OjpwYXlsb2FkLXR5cGUtY2hhbmdlPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cFB0RGVtdXggKmdzdHJ0cHB0ZGVtdXgKLWd1aW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cFB0RGVtdXg6OnJlcXVlc3QtcHQtbWFwPC9OQU1FPgotPFJFVFVSTlM+R3N0Q2Fwcyo8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBQdERlbXV4ICpnc3RydHBwdGRlbXV4Ci1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpjbGVhci1wdC1tYXA8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmE8L0ZMQUdTPgotR3N0UnRwU2Vzc2lvbiAqZ3N0cnRwc2Vzc2lvbgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1ieWUtc3NyYzwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1ieWUtdGltZW91dDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1uZXctc3NyYzwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1zZW5kZXItdGltZW91dDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1zc3JjLWFjdGl2ZTwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1zc3JjLWNvbGxpc2lvbjwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpvbi1zc3JjLXNkZXM8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwU2Vzc2lvbiAqZ3N0cnRwc2Vzc2lvbgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6b24tc3NyYy12YWxpZGF0ZWQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwU2Vzc2lvbiAqZ3N0cnRwc2Vzc2lvbgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6b24tdGltZW91dDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTZXNzaW9uOjpyZXF1ZXN0LXB0LW1hcDwvTkFNRT4KLTxSRVRVUk5TPkdzdENhcHMqPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwU2Vzc2lvbiAqZ3N0cnRwc2Vzc2lvbgotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UnRwU2Vzc2lvbjo6b24tbmV3LXNlbmRlci1zc3JjPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFJ0cFNlc3Npb24gKmdzdHJ0cHNlc3Npb24KLWd1aW50ICBhcmcxCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFJ0cFNlc3Npb246Om9uLXNlbmRlci1zc3JjLWFjdGl2ZTwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTZXNzaW9uICpnc3RydHBzZXNzaW9uCi1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTc3JjRGVtdXg6OmNsZWFyLXNzcmM8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmxhPC9GTEFHUz4KLUdzdFJ0cFNzcmNEZW11eCAqZ3N0cnRwc3NyY2RlbXV4Ci1ndWludCAgYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTc3JjRGVtdXg6Om5ldy1zc3JjLXBhZDwvTkFNRT4KLTxSRVRVUk5TPnZvaWQ8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RSdHBTc3JjRGVtdXggKmdzdHJ0cHNzcmNkZW11eAotZ3VpbnQgIGFyZzEKLUdzdFBhZCAqYXJnMgotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSdHBTc3JjRGVtdXg6OnJlbW92ZWQtc3NyYy1wYWQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UnRwU3NyY0RlbXV4ICpnc3RydHBzc3JjZGVtdXgKLWd1aW50ICBhcmcxCi1Hc3RQYWQgKmFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0Q2Fpcm9PdmVybGF5OjpjYXBzLWNoYW5nZWQ8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPjwvRkxBR1M+Ci1Hc3RDYWlyb092ZXJsYXkgKmdzdGNhaXJvb3ZlcmxheQotR3N0Q2FwcyAqYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RDYWlyb092ZXJsYXk6OmRyYXc8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPjwvRkxBR1M+Ci1Hc3RDYWlyb092ZXJsYXkgKmdzdGNhaXJvb3ZlcmxheQotQ2Fpcm9Db250ZXh0ICphcmcxCi1ndWludDY0ICBhcmcyCi1ndWludDY0ICBhcmczCi08L1NJR05BTD4KLQotPFNJR05BTD4KLTxOQU1FPkdzdFY0bDJTcmM6OnByZXBhcmUtZm9ybWF0PC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz5sPC9GTEFHUz4KLUdzdFY0bDJTcmMgKmdzdHY0bDJzcmMKLWdpbnQgIGFyZzEKLUdzdENhcHMgKmFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UlRTUFNyYzo6aGFuZGxlLXJlcXVlc3Q8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPjwvRkxBR1M+Ci1Hc3RSVFNQU3JjICpnc3RydHNwc3JjCi1ncG9pbnRlciAgYXJnMQotZ3BvaW50ZXIgIGFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UlRTUFNyYzo6b24tc2RwPC9OQU1FPgotPFJFVFVSTlM+dm9pZDwvUkVUVVJOUz4KLTxGTEFHUz48L0ZMQUdTPgotR3N0UlRTUFNyYyAqZ3N0cnRzcHNyYwotR3N0U0RQTWVzc2FnZSAqYXJnMQotPC9TSUdOQUw+Ci0KLTxTSUdOQUw+Ci08TkFNRT5Hc3RSVFNQU3JjOjpzZWxlY3Qtc3RyZWFtPC9OQU1FPgotPFJFVFVSTlM+Z2Jvb2xlYW48L1JFVFVSTlM+Ci08RkxBR1M+ZmM8L0ZMQUdTPgotR3N0UlRTUFNyYyAqZ3N0cnRzcHNyYwotZ3VpbnQgIGFyZzEKLUdzdENhcHMgKmFyZzIKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UlRTUFNyYzo6bmV3LW1hbmFnZXI8L05BTUU+Ci08UkVUVVJOUz52b2lkPC9SRVRVUk5TPgotPEZMQUdTPmZjPC9GTEFHUz4KLUdzdFJUU1BTcmMgKmdzdHJ0c3BzcmMKLUdzdEVsZW1lbnQgKmFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0UlRTUFNyYzo6cmVxdWVzdC1ydGNwLWtleTwvTkFNRT4KLTxSRVRVUk5TPkdzdENhcHMqPC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0UlRTUFNyYyAqZ3N0cnRzcHNyYwotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0U3BsaXRNdXhTaW5rOjpmb3JtYXQtbG9jYXRpb248L05BTUU+Ci08UkVUVVJOUz5nY2hhcio8L1JFVFVSTlM+Ci08RkxBR1M+bDwvRkxBR1M+Ci1Hc3RTcGxpdE11eFNpbmsgKmdzdHNwbGl0bXV4c2luawotZ3VpbnQgIGFyZzEKLTwvU0lHTkFMPgotCi08U0lHTkFMPgotPE5BTUU+R3N0U3BsaXRNdXhTcmM6OmZvcm1hdC1sb2NhdGlvbjwvTkFNRT4KLTxSRVRVUk5TPkdTdHJ2PC9SRVRVUk5TPgotPEZMQUdTPmw8L0ZMQUdTPgotR3N0U3BsaXRNdXhTcmMgKmdzdHNwbGl0bXV4c3JjCi08L1NJR05BTD4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy50eXBlcyBiL2RvY3MvcGx1Z2lucy9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMudHlwZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNWI0YjQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy50eXBlcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotdHlwZTpHc3RJaXJFcXVhbGl6ZXIKLXR5cGU6R3N0VmlkZW9NaXhlclBhZApkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjUxMzVjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2NoMDEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0MDkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCIgdGl0bGU9IjNncHBtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48aW1nIHNyYz0idXAtaW5zZW5zaXRpdmUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9ImNoYXB0ZXIiPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgxIGNsYXNzPSJ0aXRsZSI+Ci08YSBuYW1lPSJpZC0xLjIiPjwvYT5nc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwiPjNncHBtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE11eGVyIGZvciAzR1BQICguM2dwKSBmaWxlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLmh0bWwiPmFhY3BhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBQUMgcGFyc2VyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwiPmFhc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmh0bWwiPmFjM3BhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBQzMgcGFyc2VyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sIj5hZ2luZ3R2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5odG1sIj5hbGF3ZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5odG1sIj5hbGF3ZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5odG1sIj5hbHBoYWNvbG9yPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCI+YWxwaGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sIj5hbXJwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQU1SIHBhcnNlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZWRlbXV4Lmh0bWwiPmFwZWRlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguaHRtbCI+YXBldjJtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaHRtbCI+YXNwZWN0cmF0aW9jcm9wPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXN0ZXJpc2toMjYzLmh0bWwiPmFzdGVyaXNraDI2MzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sIj5hdWRpb2FtcGxpZnk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwiPmF1ZGlvY2hlYmJhbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5odG1sIj5hdWRpb2NoZWJsaW1pdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5odG1sIj5hdWRpb2R5bmFtaWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbCI+YXVkaW9lY2hvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIuaHRtbCI+YXVkaW9maXJmaWx0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sIj5hdWRpb2lpcmZpbHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0Lmh0bWwiPmF1ZGlvaW52ZXJ0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwiPmF1ZGlva2FyYW9rZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCI+YXVkaW9wYW5vcmFtYTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwiPmF1ZGlvd3NpbmNiYW5kPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Lmh0bWwiPmF1ZGlvd3NpbmNsaW1pdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCI+YXVwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCI+YXV0b2F1ZGlvc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NyYy5odG1sIj5hdXRvYXVkaW9zcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLmh0bWwiPmF1dG92aWRlb3Npbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaHRtbCI+YXV0b3ZpZGVvc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguaHRtbCI+YXZpZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXguaHRtbCI+YXZpbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuaHRtbCI+YXZpc3VidGl0bGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1icmVha215ZGF0YS5odG1sIj5icmVha215ZGF0YTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmh0bWwiPmNhY2FzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwiPmNhaXJvb3ZlcmxheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCI+Y2Fwc3NldHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5odG1sIj5jcHVyZXBvcnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCI+Y3V0dGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbCI+ZGNhcGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERDQSAoRFRTIENvaGVyZW50IEFjb3VzdGljcykgcGFyc2VyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCI+ZGVpbnRlcmxhY2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUuaHRtbCI+ZGVpbnRlcmxlYXZlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2Lmh0bWwiPmRpY2V0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5odG1sIj5kaXJlY3Rzb3VuZHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdG1mc3JjLmh0bWwiPmR0bWZzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCI+ZHYxMzk0c3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCI+ZHZkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Lmh0bWwiPmR2ZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwiPmR5bnVkcHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYuaHRtbCI+ZWRnZXR2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCI+ZXF1YWxpemVyLTEwYmFuZHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwiPmVxdWFsaXplci0zYmFuZHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwiPmVxdWFsaXplci1uYmFuZHM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLmh0bWwiPmZsYWNkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwiPmZsYWNlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2UuaHRtbCI+ZmxhY3BhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5odG1sIj5mbGFjdGFnPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguaHRtbCI+Zmx2ZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguaHRtbCI+Zmx2bXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmh0bWwiPmZseGRlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmh0bWwiPmdhbW1hPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwiPmdka3BpeGJ1ZmRlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCI+Z2RrcGl4YnVmb3ZlcmxheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuaHRtbCI+Z2RrcGl4YnVmc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEuaHRtbCI+Z29vbTJrMTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20uaHRtbCI+Z29vbTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCI+aGR2MTM5NHNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lmh0bWwiPmljeWRlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguaHRtbCI+aWQzZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5odG1sIj5pZDN2Mm11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5odG1sIj5paXJlcXVhbGl6ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5odG1sIj5pbWFnZWZyZWV6ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCI+aW50ZXJsZWF2ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCI+aXNtbG11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTXV4ZXIgZm9yIElTTUwgc21vb3RoIHN0cmVhbWluZyAoLmlzbWwpIGZpbGVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sIj5qYWNrYXVkaW9zaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwiPmphY2thdWRpb3NyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMuaHRtbCI+anBlZ2RlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdlbmMuaHRtbCI+anBlZ2VuYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwiPmxldmVsPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5odG1sIj5tYXRyb3NrYWRlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCI+bWF0cm9za2FtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLmh0bWwiPm1hdHJvc2thcGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCI+bWoybXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNdXhlciBmb3IgTW90aW9uIEpQRUctMjAwMCAoLm1qMikgZmlsZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUuaHRtbCI+bW9ub3Njb3BlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwiPm1wNG11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTXV4ZXIgZm9yIElTTyBNUEVHLTQgKC5tcDQpIGZpbGVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UuaHRtbCI+bXBlZ2F1ZGlvcGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE1QRUcgYXVkaW8gcGFyc2VyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMuaHRtbCI+bXVsYXdkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5odG1sIj5tdWxhd2VuYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCI+bXVsdGlmaWxlc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sIj5tdWx0aWZpbGVzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIj5tdWx0aXBhcnRkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sIj5tdWx0aXBhcnRtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCI+bXVsdGl1ZHBzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCI+bmF2aWdhdGlvbnRlc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLmh0bWwiPm5hdnNlZWs8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwiPm9wdHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sIj5vc3M0c2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCI+b3NzNHNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbCI+b3Nzc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5odG1sIj5vc3NzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuaHRtbCI+b3N4YXVkaW9zaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMuaHRtbCI+b3N4YXVkaW9zcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuaHRtbCI+b3N4dmlkZW9zaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjLmh0bWwiPnBuZ2RlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5odG1sIj5wbmdlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sIj5wcm9ncmVzc3JlcG9ydDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIj5wdWxzZXNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sIj5wdWxzZXNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwiPnB1c2hmaWxlc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5odG1sIj5xdGRlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sIj5xdG1vb3ZyZWNvdmVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBVdGlsaXR5IGVsZW1lbnQgZm9yIHJlY292ZXJpbmcgdW5maW5pc2hlZCBxdWlja3RpbWUgZmlsZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sIj5xdG11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTXV4ZXIgZm9yIHF1aWNrdGltZSgubW92KSBmaWxlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuaHRtbCI+cXVhcmt0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sIj5yYWRpb2FjdHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5odG1sIj5yZXZ0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCI+cmdhbmFseXNpczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5odG1sIj5yZ2xpbWl0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sIj5yZ3ZvbHVtZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lmh0bWwiPnJpcHBsZXR2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcm5kYnVmZmVyc2l6ZS5odG1sIj5ybmRidWZmZXJzaXplPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkuaHRtbCI+cnRwYWMzZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNwYXkuaHRtbCI+cnRwYWMzcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkuaHRtbCI+cnRwYW1yZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuaHRtbCI+cnRwYW1ycGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwiPnJ0cGJpbjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2ZGVwYXkuaHRtbCI+cnRwYnZkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5Lmh0bWwiPnJ0cGJ2cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5Lmh0bWwiPnJ0cGNlbHRkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRwYXkuaHRtbCI+cnRwY2VsdHBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sIj5ydHBkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCI+cnRwZHRtZmRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5odG1sIj5ydHBkdG1mbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sIj5ydHBkdG1mc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS5odG1sIj5ydHBkdmRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkuaHRtbCI+cnRwZHZwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuaHRtbCI+cnRwZzcyMmRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5odG1sIj5ydHBnNzIycGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5Lmh0bWwiPnJ0cGc3MjNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkuaHRtbCI+cnRwZzcyM3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5odG1sIj5ydHBnNzI2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2cGF5Lmh0bWwiPnJ0cGc3MjZwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5ZGVwYXkuaHRtbCI+cnRwZzcyOWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5odG1sIj5ydHBnNzI5cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkuaHRtbCI+cnRwZ3NtZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuaHRtbCI+cnRwZ3NtcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkuaHRtbCI+cnRwZ3N0ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkuaHRtbCI+cnRwZ3N0cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5Lmh0bWwiPnJ0cGgyNjFkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuaHRtbCI+cnRwaDI2MXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5odG1sIj5ydHBoMjYzZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5Lmh0bWwiPnJ0cGgyNjNwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGRlcGF5Lmh0bWwiPnJ0cGgyNjNwZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcHBheS5odG1sIj5ydHBoMjYzcHBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheS5odG1sIj5ydHBoMjY0ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lmh0bWwiPnJ0cGgyNjRwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkuaHRtbCI+cnRwaDI2NWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5odG1sIj5ydHBoMjY1cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5Lmh0bWwiPnJ0cGlsYmNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkuaHRtbCI+cnRwaWxiY3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Lmh0bWwiPnJ0cGoya2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5Lmh0bWwiPnJ0cGoya3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sIj5ydHBqaXR0ZXJidWZmZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkuaHRtbCI+cnRwanBlZ2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sIj5ydHBqcGVncGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbCI+cnRwa2x2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuaHRtbCI+cnRwa2x2cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkuaHRtbCI+cnRwTDE2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkuaHRtbCI+cnRwTDE2cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkuaHRtbCI+cnRwTDI0ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkuaHRtbCI+cnRwTDI0cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lmh0bWwiPnJ0cG1wMXNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRkZXBheS5odG1sIj5ydHBtcDJ0ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0cGF5Lmh0bWwiPnJ0cG1wMnRwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkuaHRtbCI+cnRwbXA0YWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5odG1sIj5ydHBtcDRhcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5Lmh0bWwiPnJ0cG1wNGdkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkuaHRtbCI+cnRwbXA0Z3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZkZXBheS5odG1sIj5ydHBtcDR2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5Lmh0bWwiPnJ0cG1wNHZwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFkZXBheS5odG1sIj5ydHBtcGFkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXBheS5odG1sIj5ydHBtcGFwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5odG1sIj5ydHBtcGFyb2J1c3RkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdmRlcGF5Lmh0bWwiPnJ0cG1wdmRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2cGF5Lmh0bWwiPnJ0cG1wdnBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sIj5ydHBtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbCI+cnRwb3B1c2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS5odG1sIj5ydHBvcHVzcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5Lmh0bWwiPnJ0cHBjbWFkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkuaHRtbCI+cnRwcGNtYXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5odG1sIj5ydHBwY211ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5Lmh0bWwiPnJ0cHBjbXVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwiPnJ0cHB0ZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lmh0bWwiPnJ0cHFjZWxwZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkuaHRtbCI+cnRwcWRtMmRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbCI+cnRwcnR4cXVldWU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwiPnJ0cHJ0eHJlY2VpdmU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwiPnJ0cHJ0eHNlbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNkZXBheS5odG1sIj5ydHBzYmNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY3BheS5odG1sIj5ydHBzYmNwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwiPnJ0cHNlc3Npb248L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lmh0bWwiPnJ0cHNpcmVuZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbnBheS5odG1sIj5ydHBzaXJlbnBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuaHRtbCI+cnRwc3BlZXhkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4cGF5Lmh0bWwiPnJ0cHNwZWV4cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwiPnJ0cHNzcmNkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5Lmh0bWwiPnJ0cHN0cmVhbWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtcGF5Lmh0bWwiPnJ0cHN0cmVhbXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5odG1sIj5ydHBzdjN2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5odG1sIj5ydHB0aGVvcmFkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sIj5ydHB0aGVvcmFwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5odG1sIj5ydHB2b3JiaXNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sIj5ydHB2b3JiaXNwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5odG1sIj5ydHB2cDhkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sIj5ydHB2cDhwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5odG1sIj5ydHB2cDlkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sIj5ydHB2cDlwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuaHRtbCI+cnRwdnJhd2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5odG1sIj5ydHB2cmF3cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkuaHRtbCI+cnRweHF0ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwiPnJ0c3BzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sIj5zYmNwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbCI+c2NhbGV0ZW1wbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYWdhZGVsaWN0di5odG1sIj5zaGFnYWRlbGljdHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUuaHRtbCI+c2hhcGV3aXBlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sIj5zaG91dDJzZW5kPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sIj5zbXB0ZWFscGhhPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCI+c21wdGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCI+c291cGh0dHBjbGllbnRzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCI+c291cGh0dHBzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sIj5zcGVjdHJ1bTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLmh0bWwiPnNwZWV4ZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCI+c3BlZXhlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuaHRtbCI+c3BsaXRmaWxlc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwiPnNwbGl0bXV4c2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTXV4ZXIgd3JhcHBlciBmb3Igc3BsaXR0aW5nIG91dHB1dCBzdHJlYW0gYnkgc2l6ZSBvciB0aW1lPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCI+c3BsaXRtdXhzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNwbGl0IERlbXV4ZXIgYmluIHRoYXQgcmVjb21iaW5lcyBmaWxlcyBjcmVhdGVkIGJ5Ci10aGUgc3BsaXRtdXhzaW5rIGVsZW1lbnQuPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCI+c3RyZWFrdHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbCI+dGFnaW5qZWN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGVzdHNpbmsuaHRtbCI+dGVzdHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzaW5rLmh0bWwiPnVkcHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCI+dWRwc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmh0bWwiPnY0bDJyYWRpbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwiPnY0bDJzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sIj52NGwyc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwiPnZlcnRpZ290djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sIj52aWRlb2JhbGFuY2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sIj52aWRlb2JveDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sIj52aWRlb2Nyb3A8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaHRtbCI+dmlkZW9mbGlwPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4uaHRtbCI+dmlkZW9tZWRpYW48L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwiPnZpZGVvbWl4ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbCI+dnA4ZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwiPnZwOGVuYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5odG1sIj52cDlkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCI+dnA5ZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwiPndhcnB0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay5odG1sIj53YXZlZm9ybXNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuaHRtbCI+d2F2ZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2RlYy5odG1sIj53YXZwYWNrZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sIj53YXZwYWNrZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLmh0bWwiPndhdnBhY2twYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgV2F2cGFjayBwYXJzZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5odG1sIj53YXZwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCI+d2VibW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sIj54aW1hZ2VzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaHRtbCI+eTRtZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTwvZGw+PC9kaXY+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHJvZWdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDsKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBUaGlzIHNtYWxsIHNhbXBsZSBhcHBsaWNhdGlvbiBjcmVhdGVzIGEgYmFuZHBhc3MgRklSIGZpbHRlcgotICogYnkgdHJhbnNmb3JtaW5nIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2UgdG8gdGhlIGZpbHRlciBrZXJuZWwuCi0gKi8KLQotLyogRklYTUUgMC4xMTogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoJmd0Oz0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwotI2luY2x1ZGUgJmx0O21hdGguaCZndDsKLQotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLSNpbmNsdWRlICZsdDtnc3QvZmZ0L2dzdGZmdGY2NC5oJmd0OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLW9uX21lc3NhZ2UgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSB1c2VyX2RhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICBnX2Vycm9yICgiR290IEVSUk9SIik7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzoKLSAgICAgIGdfd2FybmluZyAoIkdvdCBXQVJOSU5HIik7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3JhdGVfY2hhbmdlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdpbnQgcmF0ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHVmFsdWVBcnJheSAqdmE7Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotICBHc3RGRlRGNjQgKmZmdDsKLSAgR3N0RkZURjY0Q29tcGxleCBmcmVxdWVuY3lfcmVzcG9uc2VbMTddOwotICBnZG91YmxlIHRtcFszMl07Ci0gIGdkb3VibGUgZmlsdGVyX2tlcm5lbFszMl07Ci0gIGd1aW50IGk7Ci0KLSAgLyogQ3JlYXRlIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2U6IHplcm8gb3V0c2lkZQotICAgKiBhIHNtYWxsIGZyZXF1ZW5jeSBiYW5kICovCi0gIGZvciAoaSA9IDA7IGkgJmx0OyAxNzsgaSsrKSB7Ci0gICAgaWYgKGkgJmx0OyA1IHx8IGkgJmd0OyAxMSkKLSAgICAgIGZyZXF1ZW5jeV9yZXNwb25zZVtpXS5yID0gMC4wOwotICAgIGVsc2UKLSAgICAgIGZyZXF1ZW5jeV9yZXNwb25zZVtpXS5yID0gMS4wOwotCi0gICAgZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLmkgPSAwLjA7Ci0gIH0KLQotICAvKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgRlQgb2YgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSAqLwotICBmZnQgPSBnc3RfZmZ0X2Y2NF9uZXcgKDMyLCBUUlVFKTsKLSAgZ3N0X2ZmdF9mNjRfaW52ZXJzZV9mZnQgKGZmdCwgZnJlcXVlbmN5X3Jlc3BvbnNlLCB0bXApOwotICBnc3RfZmZ0X2Y2NF9mcmVlIChmZnQpOwotCi0gIC8qIFNoaWZ0IHRoZSBpbnZlcnNlIEZUIG9mIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2UgYnkgMTYsCi0gICAqIGkuZS4gdGhlIGhhbGYgb2YgdGhlIGtlcm5lbCBsZW5ndGggdG8gZ2V0IHRoZQotICAgKiBpbXB1bHNlIHJlc3BvbnNlLiBTZWUgaHR0cDovL3d3dy5kc3BndWlkZS5jb20vY2gxNy8xLmh0bQotICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICovCi0gIGZvciAoaSA9IDA7IGkgJmx0OyAzMjsgaSsrKQotICAgIGZpbHRlcl9rZXJuZWxbaV0gPSB0bXBbKGkgKyAxNikgJSAzMl07Ci0KLSAgLyogQXBwbHkgdGhlIGhhbW1pbmcgd2luZG93IHRvIHRoZSBpbXB1bHNlIHJlc3BvbnNlIHRvIGdldAotICAgKiBhIGJldHRlciByZXN1bHQgdGhhbiBnaXZlbiBmcm9tIHRoZSByZWN0YW5ndWxhciB3aW5kb3cKLSAgICovCi0gIGZvciAoaSA9IDA7IGkgJmx0OyAzMjsgaSsrKQotICAgIGZpbHRlcl9rZXJuZWxbaV0gKj0gKDAuNTQgLSAwLjQ2ICogY29zICgyICogR19QSSAqIGkgLyAzMikpOwotCi0gIHZhID0gZ192YWx1ZV9hcnJheV9uZXcgKDEpOwotCi0gIGdfdmFsdWVfaW5pdCAoJmFtcDt2LCBHX1RZUEVfRE9VQkxFKTsKLSAgZm9yIChpID0gMDsgaSAmbHQ7IDMyOyBpKyspIHsKLSAgICBnX3ZhbHVlX3NldF9kb3VibGUgKCZhbXA7diwgZmlsdGVyX2tlcm5lbFtpXSk7Ci0gICAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKHZhLCAmYW1wO3YpOwotICAgIGdfdmFsdWVfcmVzZXQgKCZhbXA7dik7Ci0gIH0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJrZXJuZWwiLCB2YSwgTlVMTCk7Ci0gIC8qIExhdGVuY3kgaXMgMS8yIG9mIHRoZSBrZXJuZWwgbGVuZ3RoIGZvciB0aGlzIG1ldGhvZCBvZgotICAgKiBjYWxjdWxhdGluZyBhIGZpbHRlciBrZXJuZWwgZnJvbSB0aGUgZnJlcXVlbmN5IHJlc3BvbnNlCi0gICAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgImxhdGVuY3kiLCAoZ2ludDY0KSAoMzIgLyAyKSwgTlVMTCk7Ci0gIGdfdmFsdWVfYXJyYXlfZnJlZSAodmEpOwotfQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICogYXJndltdKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKmZpbHRlciwgKmNvbnYsICpzaW5rOwotICBHc3RCdXMgKmJ1czsKLSAgR01haW5Mb29wICpsb29wOwotCi0gIGdzdF9pbml0IChOVUxMLCBOVUxMKTsKLQotICBwaXBlbGluZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInBpcGVsaW5lIiwgTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJ3YXZlIiwgNSwgTlVMTCk7Ci0KLSAgZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9maXJmaWx0ZXIiLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGZpbHRlciksICJyYXRlLWNoYW5nZWQiLAotICAgICAgR19DQUxMQkFDSyAob25fcmF0ZV9jaGFuZ2VkKSwgTlVMTCk7Ci0KLSAgY29udiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvY29udmVydCIsIE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvYXVkaW9zaW5rIiwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaW5rICE9IE5VTEwsIC0xKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgZmlsdGVyLCBjb252LCBzaW5rLCBOVUxMKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkgKHNyYywgZmlsdGVyLCBjb252LCBzaW5rLCBOVUxMKSkgewotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBlbGVtZW50cyIpOwotICAgIHJldHVybiAtMjsKLSAgfQotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0sgKG9uX21lc3NhZ2UpLCBsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVzKSk7Ci0KLSAgaWYgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gZ28gaW50byBQTEFZSU5HIHN0YXRlIik7Ci0gICAgcmV0dXJuIC0zOwotICB9Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLTwvcHJlPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ViYXN0aWFuIERyb2VnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVGhpcyBzbWFsbCBzYW1wbGUgYXBwbGljYXRpb24gY3JlYXRlcyBhIGxvd3Bhc3MgSUlSIGZpbHRlcgotICogYW5kIGFwcGxpZXMgaXQgdG8gd2hpdGUgbm9pc2UuCi0gKiBTZWUgaHR0cDovL3d3dy5kc3BndWlkZS5jb20vY2gxOS8yLmh0bSBmb3IgYSBkZXNjcmlwdGlvbgotICogb2YgdGhlIElJUiBmaWx0ZXIgdGhhdCBpcyB1c2VkLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKCZndDs9IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKLSNpbmNsdWRlICZsdDttYXRoLmgmZ3Q7Ci0KLSNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0KLS8qIEN1dG9mZiBvZiA0MDAwIEh6ICovCi0jZGVmaW5lIENVVE9GRiAoNDAwMC4wKQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW9uX21lc3NhZ2UgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSB1c2VyX2RhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICBnX2Vycm9yICgiR290IEVSUk9SIik7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzoKLSAgICAgIGdfd2FybmluZyAoIkdvdCBXQVJOSU5HIik7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3JhdGVfY2hhbmdlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdpbnQgcmF0ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHVmFsdWVBcnJheSAqdmE7Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotICBnZG91YmxlIHg7Ci0KLSAgaWYgKHJhdGUgLyAyLjAgJmd0OyBDVVRPRkYpCi0gICAgeCA9IGV4cCAoLTIuMCAqIEdfUEkgKiAoQ1VUT0ZGIC8gcmF0ZSkpOwotICBlbHNlCi0gICAgeCA9IDAuMDsKLQotICB2YSA9IGdfdmFsdWVfYXJyYXlfbmV3ICgxKTsKLQotICBnX3ZhbHVlX2luaXQgKCZhbXA7diwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJmFtcDt2LCAxLjAgLSB4KTsKLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKHZhLCAmYW1wO3YpOwotICBnX3ZhbHVlX3Jlc2V0ICgmYW1wO3YpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgImEiLCB2YSwgTlVMTCk7Ci0gIGdfdmFsdWVfYXJyYXlfZnJlZSAodmEpOwotCi0gIHZhID0gZ192YWx1ZV9hcnJheV9uZXcgKDEpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZhbXA7diwgeCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJmFtcDt2KTsKLSAgZ192YWx1ZV9yZXNldCAoJmFtcDt2KTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJiIiwgdmEsIE5VTEwpOwotICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHZhKTsKLX0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpmaWx0ZXIsICpjb252LCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLQotICBnc3RfaW5pdCAoTlVMTCwgTlVMTCk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAid2F2ZSIsIDUsIE5VTEwpOwotCi0gIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvaWlyZmlsdGVyIiwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChmaWx0ZXIpLCAicmF0ZS1jaGFuZ2VkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKG9uX3JhdGVfY2hhbmdlZCksIE5VTEwpOwotCi0gIGNvbnYgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXV0b2F1ZGlvc2luayIsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2luayAhPSBOVUxMLCAtMSk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGZpbHRlciwgY29udiwgc2luaywgTlVMTCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIGZpbHRlciwgY29udiwgc2luaywgTlVMTCkpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudHMiKTsKLSAgICByZXR1cm4gLTI7Ci0gIH0KLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChvbl9tZXNzYWdlKSwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1cykpOwotCi0gIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGdvIGludG8gUExBWUlORyBzdGF0ZSIpOwotICAgIHJldHVybiAtMzsKLSAgfQotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIHJldHVybiAwOwotfQotCi08L3ByZT4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUKLSAqICAgICAgICAgICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICZsdDt0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmcmZ3Q7Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwotI2luY2x1ZGUgJmx0O21hdGguaCZndDsKLQotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDsKLQotc3RhdGljIGdib29sZWFuCi1tZXNzYWdlX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0KLSAgaWYgKG1lc3NhZ2UtJmd0O3R5cGUgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyk7Ci0KLSAgICBpZiAoc3RyY21wIChuYW1lLCAibGV2ZWwiKSA9PSAwKSB7Ci0gICAgICBnaW50IGNoYW5uZWxzOwotICAgICAgR3N0Q2xvY2tUaW1lIGVuZHRpbWU7Ci0gICAgICBnZG91YmxlIHJtc19kQiwgcGVha19kQiwgZGVjYXlfZEI7Ci0gICAgICBnZG91YmxlIHJtczsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqYXJyYXlfdmFsOwotICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLSAgICAgIEdWYWx1ZUFycmF5ICpybXNfYXJyLCAqcGVha19hcnIsICpkZWNheV9hcnI7Ci0gICAgICBnaW50IGk7Ci0KLSAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgImVuZHRpbWUiLCAmYW1wO2VuZHRpbWUpKQotICAgICAgICBnX3dhcm5pbmcgKCJDb3VsZCBub3QgcGFyc2UgZW5kdGltZSIpOwotCi0gICAgICAvKiB0aGUgdmFsdWVzIGFyZSBwYWNrZWQgaW50byBHVmFsdWVBcnJheXMgd2l0aCB0aGUgdmFsdWUgcGVyIGNoYW5uZWwgKi8KLSAgICAgIGFycmF5X3ZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicm1zIik7Ci0gICAgICBybXNfYXJyID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkIChhcnJheV92YWwpOwotCi0gICAgICBhcnJheV92YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInBlYWsiKTsKLSAgICAgIHBlYWtfYXJyID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkIChhcnJheV92YWwpOwotCi0gICAgICBhcnJheV92YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImRlY2F5Iik7Ci0gICAgICBkZWNheV9hcnIgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKGFycmF5X3ZhbCk7Ci0KLSAgICAgIC8qIHdlIGNhbiBnZXQgdGhlIG51bWJlciBvZiBjaGFubmVscyBhcyB0aGUgbGVuZ3RoIG9mIGFueSBvZiB0aGUgdmFsdWUKLSAgICAgICAqIGFycmF5cyAqLwotICAgICAgY2hhbm5lbHMgPSBybXNfYXJyLSZndDtuX3ZhbHVlczsKLSAgICAgIGdfcHJpbnQgKCJlbmR0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2hhbm5lbHM6ICVkXG4iLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGVuZHRpbWUpLCBjaGFubmVscyk7Ci0gICAgICBmb3IgKGkgPSAwOyBpICZsdDsgY2hhbm5lbHM7ICsraSkgewotCi0gICAgICAgIGdfcHJpbnQgKCJjaGFubmVsICVkXG4iLCBpKTsKLSAgICAgICAgdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKHJtc19hcnIsIGkpOwotICAgICAgICBybXNfZEIgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLQotICAgICAgICB2YWx1ZSA9IGdfdmFsdWVfYXJyYXlfZ2V0X250aCAocGVha19hcnIsIGkpOwotICAgICAgICBwZWFrX2RCID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0KLSAgICAgICAgdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGRlY2F5X2FyciwgaSk7Ci0gICAgICAgIGRlY2F5X2RCID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICAgIGdfcHJpbnQgKCIgICAgUk1TOiAlZiBkQiwgcGVhazogJWYgZEIsIGRlY2F5OiAlZiBkQlxuIiwKLSAgICAgICAgICAgIHJtc19kQiwgcGVha19kQiwgZGVjYXlfZEIpOwotCi0gICAgICAgIC8qIGNvbnZlcnRpbmcgZnJvbSBkQiB0byBub3JtYWwgZ2l2ZXMgdXMgYSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wICovCi0gICAgICAgIHJtcyA9IHBvdyAoMTAsIHJtc19kQiAvIDIwKTsKLSAgICAgICAgZ19wcmludCAoIiAgICBub3JtYWxpemVkIHJtcyB2YWx1ZTogJWZcbiIsIHJtcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIC8qIHdlIGhhbmRsZWQgdGhlIG1lc3NhZ2Ugd2Ugd2FudCwgYW5kIGlnbm9yZWQgdGhlIG9uZXMgd2UgZGlkbid0IHdhbnQuCi0gICAqIHNvIHRoZSBjb3JlIGNhbiB1bnJlZiB0aGUgbWVzc2FnZSBmb3IgdXMgKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW90ZXN0c3JjLCAqYXVkaW9jb252ZXJ0LCAqbGV2ZWwsICpmYWtlc2luazsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdEJ1cyAqYnVzOwotICBndWludCB3YXRjaF9pZDsKLSAgR01haW5Mb29wICpsb29wOwotCi0gIGdzdF9pbml0ICgmYW1wO2FyZ2MsICZhbXA7YXJndik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9MiIpOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSk7Ci0gIGF1ZGlvdGVzdHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsIE5VTEwpOwotICBnX2Fzc2VydCAoYXVkaW90ZXN0c3JjKTsKLSAgYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChhdWRpb2NvbnZlcnQpOwotICBsZXZlbCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImxldmVsIiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChsZXZlbCk7Ci0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZ19hc3NlcnQgKGZha2VzaW5rKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGF1ZGlvdGVzdHNyYywgYXVkaW9jb252ZXJ0LCBsZXZlbCwKLSAgICAgIGZha2VzaW5rLCBOVUxMKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChhdWRpb3Rlc3RzcmMsIGF1ZGlvY29udmVydCkpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIGF1ZGlvdGVzdHNyYyBhbmQgYXVkaW9jb252ZXJ0Iik7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAoYXVkaW9jb252ZXJ0LCBsZXZlbCwgY2FwcykpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIGF1ZGlvY29udmVydCBhbmQgbGV2ZWwiKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChsZXZlbCwgZmFrZXNpbmspKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBsZXZlbCBhbmQgZmFrZXNpbmsiKTsKLQotICAvKiBtYWtlIHN1cmUgd2UnbGwgZ2V0IG1lc3NhZ2VzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGxldmVsKSwgInBvc3QtbWVzc2FnZXMiLCBUUlVFLCBOVUxMKTsKLSAgLyogcnVuIHN5bmNlZCBhbmQgbm90IGFzIGZhc3QgYXMgd2UgY2FuICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZha2VzaW5rKSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIHdhdGNoX2lkID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbWVzc2FnZV9oYW5kbGVyLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogd2UgbmVlZCB0byBydW4gYSBHTGliIG1haW4gbG9vcCB0byBnZXQgdGhlIG1lc3NhZ2VzICovCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnX3NvdXJjZV9yZW1vdmUgKHdhdGNoX2lkKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotICByZXR1cm4gMDsKLX0KLQotPC9wcmU+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIFNjaG1pZHQgJmx0O2phbi5zY2htaWR0QHN1bi5jb20mZ3Q7Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0OwotCi1zdGF0aWMgZ3VpbnQgc3BlY3RfYmFuZHMgPSAyMDsKLQotI2RlZmluZSBBVURJT0ZSRVEgMzIwMDAKLQotLyogcmVjZWl2ZSBzcGVjdHJhbCBkYXRhIGZyb20gZWxlbWVudCBtZXNzYWdlICovCi1zdGF0aWMgZ2Jvb2xlYW4KLW1lc3NhZ2VfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgaWYgKG1lc3NhZ2UtJmd0O3R5cGUgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyk7Ci0gICAgR3N0Q2xvY2tUaW1lIGVuZHRpbWU7Ci0KLSAgICBpZiAoc3RyY21wIChuYW1lLCAic3BlY3RydW0iKSA9PSAwKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKm1hZ25pdHVkZXM7Ci0gICAgICBjb25zdCBHVmFsdWUgKnBoYXNlczsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqbWFnLCAqcGhhc2U7Ci0gICAgICBnZG91YmxlIGZyZXE7Ci0gICAgICBndWludCBpOwotCi0gICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKHMsICJlbmR0aW1lIiwgJmFtcDtlbmR0aW1lKSkKLSAgICAgICAgZW5kdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgICAgIGdfcHJpbnQgKCJOZXcgc3BlY3RydW0gbWVzc2FnZSwgZW5kdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChlbmR0aW1lKSk7Ci0KLSAgICAgIG1hZ25pdHVkZXMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgIm1hZ25pdHVkZSIpOwotICAgICAgcGhhc2VzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJwaGFzZSIpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpICZsdDsgc3BlY3RfYmFuZHM7ICsraSkgewotICAgICAgICBmcmVxID0gKGdkb3VibGUpICgoQVVESU9GUkVRIC8gMikgKiBpICsgQVVESU9GUkVRIC8gNCkgLyBzcGVjdF9iYW5kczsKLSAgICAgICAgbWFnID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChtYWduaXR1ZGVzLCBpKTsKLSAgICAgICAgcGhhc2UgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHBoYXNlcywgaSk7Ci0KLSAgICAgICAgaWYgKG1hZyAhPSBOVUxMICZhbXA7JmFtcDsgcGhhc2UgIT0gTlVMTCkgewotICAgICAgICAgIGdfcHJpbnQgKCJiYW5kICVkIChmcmVxICVnKTogbWFnbml0dWRlICVmIGRCIHBoYXNlICVmXG4iLCBpLCBmcmVxLAotICAgICAgICAgICAgICBnX3ZhbHVlX2dldF9mbG9hdCAobWFnKSwgZ192YWx1ZV9nZXRfZmxvYXQgKHBoYXNlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdfcHJpbnQgKCJcbiIpOwotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdEVsZW1lbnQgKnNyYywgKmF1ZGlvY29udmVydCwgKnNwZWN0cnVtLCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLQotICBnc3RfaW5pdCAoJmFtcDthcmdjLCAmYW1wO2FyZ3YpOwotCi0gIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJiaW4iKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJ3YXZlIiwgMCwgImZyZXEiLCA2MDAwLjAsIE5VTEwpOwotICBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCBOVUxMKTsKLSAgZ19hc3NlcnQgKGF1ZGlvY29udmVydCk7Ci0KLSAgc3BlY3RydW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzcGVjdHJ1bSIsICJzcGVjdHJ1bSIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcGVjdHJ1bSksICJiYW5kcyIsIHNwZWN0X2JhbmRzLCAidGhyZXNob2xkIiwgLTgwLAotICAgICAgInBvc3QtbWVzc2FnZXMiLCBUUlVFLCAibWVzc2FnZS1waGFzZSIsIFRSVUUsIE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNpbmspLCAic3luYyIsIFRSVUUsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgYXVkaW9jb252ZXJ0LCBzcGVjdHJ1bSwgc2luaywgTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIEFVRElPRlJFUSwgTlVMTCk7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChzcmMsIGF1ZGlvY29udmVydCkgfHwKLSAgICAgICFnc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkIChhdWRpb2NvbnZlcnQsIHNwZWN0cnVtLCBjYXBzKSB8fAotICAgICAgIWdzdF9lbGVtZW50X2xpbmsgKHNwZWN0cnVtLCBzaW5rKSkgewotICAgIGZwcmludGYgKHN0ZGVyciwgImNhbid0IGxpbmsgZWxlbWVudHNcbiIpOwotICAgIGV4aXQgKDEpOwotICB9Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChiaW4pOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBtZXNzYWdlX2hhbmRsZXIsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogd2UgbmVlZCB0byBydW4gYSBHTGliIG1haW4gbG9vcCB0byBnZXQgdGhlIG1lc3NhZ2VzICovCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMi5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvY2gwMi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTI5MzU5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2NoMDIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Z3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXk0bWVuYy5odG1sIiB0aXRsZT0ieTRtZW5jIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi0xMzk0Lmh0bWwiIHRpdGxlPSIxMzk0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGltZyBzcmM9InVwLWluc2Vuc2l0aXZlLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLTEzOTQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJjaGFwdGVyIj4KLTxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMSBjbGFzcz0idGl0bGUiPgotPGEgbmFtZT0iaWQtMS4zIj48L2E+Z3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zPC9oMT48L2Rpdj48L2Rpdj48L2Rpdj4KLTxkaXYgY2xhc3M9InRvYyI+PGRsIGNsYXNzPSJ0b2MiPgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tMTM5NC5odG1sIj4xMzk0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTb3VyY2UgZm9yIHZpZGVvIGRhdGEgdmlhIElFRUUxMzk0IGludGVyZmFjZTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hYXNpbmsuaHRtbCI+YWFzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBU0NJSSBBcnQgdmlkZW8gc2luazwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbGF3Lmh0bWwiPmFsYXc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFMYXcgYXVkaW8gY29udmVyc2lvbiByb3V0aW5lczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYWNvbG9yLmh0bWwiPmFscGhhY29sb3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJHQkEgZnJvbS90byBBWVVWIGNvbG9yc3BhY2UgY29udmVyc2lvbiBwcmVzZXJ2aW5nIHRoZSBhbHBoYSBjaGFubmVsPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFscGhhLmh0bWwiPmFscGhhPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBhZGRzIGFuIGFscGhhIGNoYW5uZWwgdG8gdmlkZW8gLSBjb25zdGFudCBvciB2aWEgY2hyb21hLWtleWluZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hcGV0YWcuaHRtbCI+YXBldGFnPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBUEV2MS8yIHRhZyByZWFkZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sIj5hdWRpb2Z4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBdWRpbyBlZmZlY3RzIHBsdWdpbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb3BhcnNlcnMuaHRtbCI+YXVkaW9wYXJzZXJzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBQYXJzZXJzIGZvciB2YXJpb3VzIGF1ZGlvIGZvcm1hdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVwYXJzZS5odG1sIj5hdXBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBwYXJzZXMgYXUgc3RyZWFtczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwiPmF1dG9kZXRlY3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFBsdWdpbiBjb250YWlucyBhdXRvLWRldGVjdGlvbiBwbHVnaW5zIGZvciB2aWRlby9hdWRpbyBpbi0gYW5kIG91dHB1dHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXZpLmh0bWwiPmF2aTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQVZJIHN0cmVhbSBoYW5kbGluZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWNhc2luay5odG1sIj5jYWNhc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ29sb3JlZCBBU0NJSSBBcnQgdmlkZW8gc2luazwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWlyby5odG1sIj5jYWlybzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ2Fpcm8tYmFzZWQgZWxlbWVudHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyLmh0bWwiPmN1dHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQXVkaW8gQ3V0dGVyIHRvIHNwbGl0IGF1ZGlvIGludG8gbm9uLXNpbGVudCBiaXRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlYnVnLmh0bWwiPmRlYnVnPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBlbGVtZW50cyBmb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlaW50ZXJsYWNlLmh0bWwiPmRlaW50ZXJsYWNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEZWludGVybGFjZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGlyZWN0c291bmQuaHRtbCI+ZGlyZWN0c291bmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERpcmVjdFNvdW5kIHBsdWdpbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdG1mLmh0bWwiPmR0bWY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERUTUYgcGx1Z2luczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sIj5kdjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRFYgZGVtdXhlciBhbmQgZGVjb2RlciBiYXNlZCBvbiBsaWJkdiAobGliZHYuc2YubmV0KTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwiPmVmZmVjdHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGVmZmVjdCBwbHVnaW5zIGZyb20gdGhlIGVmZmVjdHYgcHJvamVjdDwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lcXVhbGl6ZXIuaHRtbCI+ZXF1YWxpemVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHU3RyZWFtZXIgYXVkaW8gZXF1YWxpemVyczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbGFjLmh0bWwiPmZsYWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRoZSBGTEFDIExvc3NsZXNzIGNvbXByZXNzb3IgQ29kZWM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx2Lmh0bWwiPmZsdjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRkxWIG11eGluZyBhbmQgZGVtdXhpbmcgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZseGRlYy5odG1sIj5mbHhkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEZMQy9GTEkvRkxYIHZpZGVvIGRlY29kZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ2RrcGl4YnVmLmh0bWwiPmdka3BpeGJ1ZjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR2RrUGl4YnVmLWJhc2VkIGltYWdlIGRlY29kZXIsIG92ZXJsYXkgYW5kIHNpbms8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbTJrMS5odG1sIj5nb29tMmsxPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHT09NIDJrMSB2aXN1YWxpemF0aW9uIGZpbHRlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tLmh0bWwiPmdvb208L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdPT00gdmlzdWFsaXphdGlvbiBmaWx0ZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWN5ZGVtdXguaHRtbCI+aWN5ZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlbXV4IElDWSB0YWdzIGZyb20gYSBzdHJlYW08L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXguaHRtbCI+aWQzZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlbXV4IElEM3YxIGFuZCBJRDN2MiB0YWdzIGZyb20gYSBmaWxlPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWltYWdlZnJlZXplLmh0bWwiPmltYWdlZnJlZXplPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTdGlsbCBmcmFtZSBzdHJlYW0gZ2VuZXJhdG9yPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWludGVybGVhdmUuaHRtbCI+aW50ZXJsZWF2ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQXVkaW8gaW50ZXJsZWF2ZXIvZGVpbnRlcmxlYXZlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pc29tcDQuaHRtbCI+aXNvbXA0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBJU08gYmFzZSBtZWRpYSBmaWxlIGZvcm1hdCBzdXBwb3J0IChtcDQsIDNncHAsIHF0LCBtajIpPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2suaHRtbCI+amFjazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSkFDSyBhdWRpbyBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qcGVnLmh0bWwiPmpwZWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEpQZWcgcGx1Z2luIGxpYnJhcnk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbGV2ZWwuaHRtbCI+bGV2ZWw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEF1ZGlvIGxldmVsIHBsdWdpbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tYXRyb3NrYS5odG1sIj5tYXRyb3NrYTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTWF0cm9za2EgYW5kIFdlYk0gc3RyZWFtIGhhbmRsaW5nPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1vbm9zY29wZS5odG1sIj5tb25vc2NvcGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE1vbm9zY29wZSB2aXN1YWxpemF0aW9uPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwiPm11bGF3PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNdUxhdyBhdWRpbyBjb252ZXJzaW9uIHJvdXRpbmVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpZmlsZS5odG1sIj5tdWx0aWZpbGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWRzL1dyaXRlcyBidWZmZXJzIGZyb20vdG8gc2VxdWVudGlhbGx5IG5hbWVkIGZpbGVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpcGFydC5odG1sIj5tdWx0aXBhcnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIG11bHRpcGFydCBzdHJlYW0gbWFuaXB1bGF0aW9uPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW5hdmlnYXRpb250ZXN0Lmh0bWwiPm5hdmlnYXRpb250ZXN0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUZW1wbGF0ZSBmb3IgYSB2aWRlbyBmaWx0ZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzNC5odG1sIj5vc3M0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKSB2ZXJzaW9uIDQgc3VwcG9ydCBmb3IgR1N0cmVhbWVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zc2F1ZGlvLmh0bWwiPm9zc2F1ZGlvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPU1MgKE9wZW4gU291bmQgU3lzdGVtKSBzdXBwb3J0IGZvciBHU3RyZWFtZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4YXVkaW8uaHRtbCI+b3N4YXVkaW88L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE9TWCAoTWFjIE9TIFgpIGF1ZGlvIHN1cHBvcnQgZm9yIEdTdHJlYW1lcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3h2aWRlby5odG1sIj5vc3h2aWRlbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT1NYIG5hdGl2ZSB2aWRlbyBvdXRwdXQgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXBuZy5odG1sIj5wbmc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFBORyBwbHVnaW4gbGlicmFyeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvLmh0bWwiPnB1bHNlYXVkaW88L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFB1bHNlQXVkaW8gcGx1Z2luIGxpYnJhcnk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sIj5yZXBsYXlnYWluPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZXBsYXlHYWluIHZvbHVtZSBub3JtYWxpemF0aW9uPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCI+cnRwbWFuYWdlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUlRQIHNlc3Npb24gbWFuYWdlbWVudCBwbHVnaW4gbGlicmFyeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCI+cnRwPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSZWFsLXRpbWUgcHJvdG9jb2wgcGx1Z2luczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHNwLmh0bWwiPnJ0c3A8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIHRyYW5zZmVyIGRhdGEgdmlhIFJUU1A8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hhcGV3aXBlLmh0bWwiPnNoYXBld2lwZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2hhcGUgV2lwZSB0cmFuc2l0aW9uIGZpbHRlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zaG91dDJzZW5kLmh0bWwiPnNob3V0MnNlbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNlbmRzIGRhdGEgdG8gYW4gaWNlY2FzdCBzZXJ2ZXIgdXNpbmcgbGlic2hvdXQyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNtcHRlLmh0bWwiPnNtcHRlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBcHBseSB0aGUgc3RhbmRhcmQgU01QVEUgdHJhbnNpdGlvbnMgb24gdmlkZW8gaW1hZ2VzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNvdXAuaHRtbCI+c291cDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgbGlic291cCBIVFRQIGNsaWVudCBzcmMvc2luazwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sIj5zcGVjdHJ1bTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUnVuIGFuIEZGVCBvbiB0aGUgYXVkaW8gc2lnbmFsLCBvdXRwdXQgc3BlY3RydW0gZGF0YTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVleC5odG1sIj5zcGVleDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BlZXggcGx1Z2luIGxpYnJhcnk8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdGFnbGliLmh0bWwiPnRhZ2xpYjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVGFnIHdyaXRpbmcgcGx1Zy1pbiBiYXNlZCBvbiB0YWdsaWI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdWRwLmh0bWwiPnVkcDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgdHJhbnNmZXIgZGF0YSB2aWEgVURQPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvNGxpbnV4Mi5odG1sIj52aWRlbzRsaW51eDI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGVsZW1lbnRzIGZvciBWaWRlbyA0IExpbnV4PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvYm94Lmh0bWwiPnZpZGVvYm94PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCByZXNpemVzIGEgdmlkZW8gYnkgYWRkaW5nIGJvcmRlcnMgb3IgY3JvcHBpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9jcm9wLmh0bWwiPnZpZGVvY3JvcDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQ3JvcHMgdmlkZW8gaW50byBhIHVzZXItZGVmaW5lZCByZWdpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9maWx0ZXIuaHRtbCI+dmlkZW9maWx0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFZpZGVvIGZpbHRlcnMgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbCI+dmlkZW9taXhlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVmlkZW8gbWl4ZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwiPnZweDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVlA4IHBsdWdpbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlZm9ybS5odG1sIj53YXZlZm9ybTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgV2F2ZUZvcm0gQVBJIGJhc2VkIHBsdWdpbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlbmMuaHRtbCI+d2F2ZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBFbmNvZGUgcmF3IGF1ZGlvIGludG8gV0FWPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdnBhY2suaHRtbCI+d2F2cGFjazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgV2F2cGFjayBsb3NzbGVzcy9sb3NzeSBhdWRpbyBmb3JtYXQgaGFuZGxpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFyc2UuaHRtbCI+d2F2cGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFBhcnNlIGEgLndhdiBmaWxlIGludG8gcmF3IGF1ZGlvPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXhpbWFnZXNyYy5odG1sIj54aW1hZ2VzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFgxMSB2aWRlbyBpbnB1dCBwbHVnaW4gdXNpbmcgc3RhbmRhcmQgWGxpYiBjYWxsczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi15NG1lbmMuaHRtbCI+eTRtZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBFbmNvZGVzIGEgWVVWIGZyYW1lIGludG8gdGhlIHl1djRtcGVnIGZvcm1hdCAobWpwZWd0b29scyk8L3NwYW4+Ci08L2R0PgotPC9kbD48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0xLjAuZGV2aGVscDIgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtMS4wLmRldmhlbHAyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjFlOTJhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0xLjAuZGV2aGVscDIKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQ2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PgotPGJvb2sgeG1sbnM9Imh0dHA6Ly93d3cuZGV2aGVscC5uZXQvYm9vayIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCIgbGluaz0iaW5kZXguaHRtbCIgYXV0aG9yPSIiIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0xLjAiIHZlcnNpb249IjIiIGxhbmd1YWdlPSJjIiBvbmxpbmU9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL2RhdGEvZG9jL2dzdHJlYW1lci9oZWFkL2dzdC1wbHVnaW5zLWdvb2QvaHRtbC8iPgotICA8Y2hhcHRlcnM+Ci0gICAgPHN1YiBuYW1lPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIiBsaW5rPSJjaDAxLmh0bWwiPgotICAgICAgPHN1YiBuYW1lPSIzZ3BwbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImFhY3BhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhYXNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhYzNwYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYWdpbmd0diIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhbGF3ZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImFsYXdlbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYWxwaGFjb2xvciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhbHBoYSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYW1ycGFyc2UiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImFwZWRlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhcGV2Mm11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXNwZWN0cmF0aW9jcm9wIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXNwZWN0cmF0aW9jcm9wLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXN0ZXJpc2toMjYzIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXN0ZXJpc2toMjYzLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9hbXBsaWZ5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9jaGViYmFuZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhdWRpb2NoZWJsaW1pdCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9keW5hbWljIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9lY2hvIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9maXJmaWx0ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImF1ZGlvaWlyZmlsdGVyIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhdWRpb2ludmVydCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9rYXJhb2tlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW9wYW5vcmFtYSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhdWRpb3dzaW5jYmFuZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVkaW93c2luY2xpbWl0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVwYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhdXRvYXVkaW9zaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImF1dG9hdWRpb3NyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NyYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImF1dG92aWRlb3NpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXV0b3ZpZGVvc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXZpZGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImF2aW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImF2aXN1YnRpdGxlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJicmVha215ZGF0YSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iY2FjYXNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImNhaXJvb3ZlcmxheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImNhcHNzZXR0ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iY3B1cmVwb3J0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iY3V0dGVyIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZGNhcGFyc2UiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImRlaW50ZXJsYWNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkZWludGVybGVhdmUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkaWNldHYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkaXJlY3Rzb3VuZHNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaXJlY3Rzb3VuZHNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkdG1mc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImR2MTM5NHNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImR2ZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkdmRlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImR5bnVkcHNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZWRnZXR2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZXF1YWxpemVyLTEwYmFuZHMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImVxdWFsaXplci0zYmFuZHMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZXF1YWxpemVyLW5iYW5kcyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci1uYmFuZHMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmbGFjZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImZsYWNlbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmxhY3BhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmxhY3RhZyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJmbHZkZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmx2bXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmx4ZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZ2FtbWEiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Imdka3BpeGJ1ZmRlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Imdka3BpeGJ1Zm92ZXJsYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZ2RrcGl4YnVmc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJnb29tMmsxIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Imdvb20iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iaGR2MTM5NHNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpY3lkZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iaWQzZGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImlkM3YybXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzdjJtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpaXJlcXVhbGl6ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpbWFnZWZyZWV6ZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iaW50ZXJsZWF2ZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpc21sbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImphY2thdWRpb3NpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iamFja2F1ZGlvc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ianBlZ2RlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJqcGVnZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImxldmVsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJtYXRyb3NrYWRlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im1hdHJvc2thbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJtYXRyb3NrYXBhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FwYXJzZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im1qMm11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im1vbm9zY29wZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im1wNG11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im1wZWdhdWRpb3BhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJtdWxhd2RlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ibXVsYXdlbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im11bHRpZmlsZXNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ibXVsdGlmaWxlc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ibXVsdGlwYXJ0ZGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im11bHRpcGFydG11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im11bHRpdWRwc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im5hdmlnYXRpb250ZXN0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJuYXZzZWVrIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2c2Vlay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im9wdHYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ib3NzNHNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im9zczRzcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ib3Nzc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJvc3NzcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJvc3hhdWRpb3NpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJvc3hhdWRpb3NyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ib3N4dmlkZW9zaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icG5nZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icG5nZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icHJvZ3Jlc3NyZXBvcnQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InB1bHNlc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InB1bHNlc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJwdXNoZmlsZXNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icXRkZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJxdG1vb3ZyZWNvdmVyIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InF0bXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJxdWFya3R2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXVhcmt0di5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJhZGlvYWN0diIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJldnR2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJyZ2FuYWx5c2lzIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJnbGltaXRlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJndm9sdW1lIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJyaXBwbGV0diIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icm5kYnVmZmVyc2l6ZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBhYzNkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwYWMzcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwYW1yZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGFtcnBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGJpbiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGJ2ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwYnZwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGNlbHRkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGNlbHRwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZHRtZmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZmRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZHRtZm11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBkdG1mc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGR2ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdmRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZHZwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGc3MjJkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGc3MjJwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZzcyM2RlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZzcyM3BheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBnNzI2ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBnNzI2cGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNnBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGc3MjlkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGc3MjlwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5cGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwZ3NtZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGdzbXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGdzdGRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBnc3RwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBoMjYxZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBoMjYxcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGgyNjNkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGgyNjNwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwaDI2M3BkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBoMjYzcHBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwaDI2NGRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwaDI2NHBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBoMjY1ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBoMjY1cGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGlsYmNkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGlsYmNwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwajJrZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGoya3BheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya3BheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGppdHRlcmJ1ZmZlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGpwZWdkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGpwZWdwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwa2x2ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cGtsdnBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdnBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cEwxNmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBMMTZwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBMMjRkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwTDI0cGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXAxc2RlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXAydGRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXAydHBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBtcDRhZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBtcDRhcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cG1wNGdkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cG1wNGdwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRncGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXA0dmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXA0dnBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBtcGFkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXBhcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwbXBhcm9idXN0ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cG1wdmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBtcHZwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBvcHVzZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBvcHVzcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHBjbWFkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHBjbWFwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwcGNtdWRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwcGNtdXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBwdGRlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHFjZWxwZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwcWRtMmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWRtMmRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwcnR4cXVldWUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHJ0eHJlY2VpdmUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwcnR4c2VuZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBzYmNkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwc2JjcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwc2Vzc2lvbiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBzaXJlbmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5kZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHNpcmVucGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBzcGVleGRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHNwZWV4cGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBzc3JjZGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHBzdHJlYW1kZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwc3RyZWFtcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwc3YzdmRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwdGhlb3JhZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHRoZW9yYXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHZvcmJpc2RlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzZGVwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHB2b3JiaXNwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNwYXkuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHB2cDhkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOGRlcGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwdnA4cGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRwdnA5ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHZwOXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHZyYXdkZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cHZyYXdwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icnRweHF0ZGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB4cXRkZXBheS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0c3BzcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic2JjcGFyc2UiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InNjYWxldGVtcG8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic2hhZ2FkZWxpY3R2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic2hhcGV3aXBlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhcGV3aXBlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic2hvdXQyc2VuZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzbXB0ZWFscGhhIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InNtcHRlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzb3VwaHR0cGNsaWVudHNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzb3VwaHR0cHNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic3BlY3RydW0iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InNwZWV4ZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzcGVleGVuYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic3BsaXRmaWxlc3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic3BsaXRtdXhzaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic3BsaXRtdXhzcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InN0cmVha3R2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ0YWdpbmplY3QiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ0ZXN0c2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idWRwc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ1ZHBzcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2NGwycmFkaW8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2NGwyc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idjRsMnNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2ZXJ0aWdvdHYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2aWRlb2JhbGFuY2UiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2aWRlb2JveCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idmlkZW9jcm9wIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idmlkZW9mbGlwIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idmlkZW9tZWRpYW4iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InZpZGVvbWl4ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idnA4ZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idnA4ZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idnA5ZGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idnA5ZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2FycHR2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2F2ZWZvcm1zaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZWZvcm1zaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2F2ZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2F2cGFja2RlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tkZWMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ3YXZwYWNrZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IndhdnBhY2twYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9IndhdnBhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ3ZWJtbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2VibW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InhpbWFnZXNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Ink0bWVuYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXk0bWVuYy5odG1sIi8+Ci0gICAgPC9zdWI+Ci0gICAgPHN1YiBuYW1lPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiIGxpbms9ImNoMDIuaHRtbCI+Ci0gICAgICA8c3ViIG5hbWU9IjEzOTQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tMTM5NC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImFhc2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hYXNpbmsuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhbGF3IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFsYXcuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhbHBoYWNvbG9yIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFscGhhY29sb3IuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhbHBoYSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImFwZXRhZyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hcGV0YWcuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhdWRpb2Z4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJhdWRpb3BhcnNlcnMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9wYXJzZXJzLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXVwYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXV0b2RldGVjdCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iYXZpIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF2aS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImNhY2FzaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iY2Fpcm8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY2Fpcm8uaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJjdXR0ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZGVidWciIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWcuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJkZWludGVybGFjZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWludGVybGFjZS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImRpcmVjdHNvdW5kIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRpcmVjdHNvdW5kLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZHRtZiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdG1mLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZHYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJlZmZlY3R2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJlcXVhbGl6ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZXF1YWxpemVyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmxhYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbGFjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZmx2IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImZseGRlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHhkZWMuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJnZGtwaXhidWYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ2RrcGl4YnVmLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZ29vbTJrMSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tMmsxLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iZ29vbSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iaWN5ZGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWN5ZGVtdXguaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJpZDNkZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pZDNkZW11eC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImltYWdlZnJlZXplIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWltYWdlZnJlZXplLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iaW50ZXJsZWF2ZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0iaXNvbXA0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImphY2siIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tamFjay5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImpwZWciIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tanBlZy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9ImxldmVsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWxldmVsLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ibWF0cm9za2EiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJtb25vc2NvcGUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbW9ub3Njb3BlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ibXVsYXciIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsYXcuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJtdWx0aWZpbGUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ibXVsdGlwYXJ0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpcGFydC5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im5hdmlnYXRpb250ZXN0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW5hdmlnYXRpb250ZXN0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ib3NzNCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3M0Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ib3NzYXVkaW8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzYXVkaW8uaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJvc3hhdWRpbyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3hhdWRpby5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9Im9zeHZpZGVvIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeHZpZGVvLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0icG5nIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXBuZy5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InB1bHNlYXVkaW8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcHVsc2VhdWRpby5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJlcGxheWdhaW4iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cG1hbmFnZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InJ0cCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJydHNwIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0c3AuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzaGFwZXdpcGUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hhcGV3aXBlLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic2hvdXQyc2VuZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zaG91dDJzZW5kLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ic21wdGUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzb3VwIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNvdXAuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJzcGVjdHJ1bSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InNwZWV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idGFnbGliIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXRhZ2xpYi5odG1sIi8+Ci0gICAgICA8c3ViIG5hbWU9InVkcCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2aWRlbzRsaW51eDIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW80bGludXgyLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idmlkZW9ib3giIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9ib3guaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2aWRlb2Nyb3AiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9jcm9wLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0idmlkZW9maWx0ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9maWx0ZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2aWRlb21peGVyIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ2cHgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2F2ZWZvcm0iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZWZvcm0uaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ3YXZlbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZW5jLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2F2cGFjayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYWNrLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0id2F2cGFyc2UiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFyc2UuaHRtbCIvPgotICAgICAgPHN1YiBuYW1lPSJ4aW1hZ2VzcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4teGltYWdlc3JjLmh0bWwiLz4KLSAgICAgIDxzdWIgbmFtZT0ieTRtZW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXk0bWVuYy5odG1sIi8+Ci0gICAgPC9zdWI+Ci0gIDwvY2hhcHRlcnM+Ci0gIDxmdW5jdGlvbnM+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3QzR1BQTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkdHMtbWV0aG9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLWR0cy1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZhc3RzdGFydOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1mYXN0c3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZhc3RzdGFydC1maWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLWZhc3RzdGFydC1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmcmFnbWVudC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1mcmFnbWVudC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLW1vdmllLXRpbWVzY2FsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJlc2VudGF0aW9uLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tcHJlc2VudGF0aW9uLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0cmVhbWFibGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tc3RyZWFtYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHJhay10aW1lc2NhbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tdHJhay10aW1lc2NhbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLXJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLXJlc2VydmVkLW1heC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFhY1BhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UuaHRtbCNHc3RBYWNQYXJzZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBQVNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxicmlnaHRuZXNz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rLS1icmlnaHRuZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjb250cmFzdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tY29udHJhc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRpdGhlcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tZGl0aGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkcml2ZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstLWRyaXZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZnJhbWUtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tZnJhbWUtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZnJhbWVzLWRpc3BsYXllZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tZnJhbWVzLWRpc3BsYXllZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZ2FtbWHigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstLWdhbW1hIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxoZWlnaHTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstLWhlaWdodCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW52ZXJzaW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rLS1pbnZlcnNpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJhbmRvbXZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tcmFuZG9tdmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx3aWR0aOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0td2lkdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBYzNQYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmh0bWwjR3N0QWMzUGFyc2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QWdpbmdUViIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbCNHc3RBZ2luZ1RWLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29sb3ItYWdpbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwjR3N0QWdpbmdUVi0tY29sb3ItYWdpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGR1c3Rz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sI0dzdEFnaW5nVFYtLWR1c3RzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwaXRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sI0dzdEFnaW5nVFYtLXBpdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNjcmF0Y2gtbGluZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwjR3N0QWdpbmdUVi0tc2NyYXRjaC1saW5lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFMYXdEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZGVjLmh0bWwjR3N0QUxhd0RlYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBTGF3RW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5odG1sI0dzdEFMYXdFbmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QWxwaGFDb2xvciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuaHRtbCNHc3RBbHBoYUNvbG9yLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFscGhhIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdEFscGhhTWV0aG9kIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYU1ldGhvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWxwaGHigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS1hbHBoYSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYW5nbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS1hbmdsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWV0aG9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYS0tbWV0aG9kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxub2lzZS1sZXZlbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLW5vaXNlLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0YXJnZXQtYuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLXRhcmdldC1iIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0YXJnZXQtZ+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLXRhcmdldC1nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0YXJnZXQtcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLXRhcmdldC1yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxibGFjay1zZW5zaXRpdml0eeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLWJsYWNrLXNlbnNpdGl2aXR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx3aGl0ZS1zZW5zaXRpdml0eeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLXdoaXRlLXNlbnNpdGl2aXR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcmVmZXItcGFzc3Rocm91Z2jigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS1wcmVmZXItcGFzc3Rocm91Z2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBbXJQYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwjR3N0QW1yUGFyc2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXBlRGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5odG1sI0dzdEFwZURlbXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFwZXYyTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguaHRtbCNHc3RBcGV2Mk11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBc3BlY3RSYXRpb0Nyb3AiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaHRtbCNHc3RBc3BlY3RSYXRpb0Nyb3Atc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhc3BlY3QtcmF0aW/igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaHRtbCNHc3RBc3BlY3RSYXRpb0Nyb3AtLWFzcGVjdC1yYXRpbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEFzdGVyaXNraDI2MyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sI0dzdEFzdGVyaXNraDI2My1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBdWRpb0FtcGxpZnkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2FtcGxpZnkuaHRtbCNHc3RBdWRpb0FtcGxpZnktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhbXBsaWZpY2F0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lmh0bWwjR3N0QXVkaW9BbXBsaWZ5LS1hbXBsaWZpY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjbGlwcGluZy1tZXRob2TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2FtcGxpZnkuaHRtbCNHc3RBdWRpb0FtcGxpZnktLWNsaXBwaW5nLW1ldGhvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEF1ZGlvQ2hlYkJhbmQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwjR3N0QXVkaW9DaGViQmFuZC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvd2VyLWZyZXF1ZW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCNHc3RBdWRpb0NoZWJCYW5kLS1sb3dlci1mcmVxdWVuY3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwjR3N0QXVkaW9DaGViQmFuZC0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccG9sZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwjR3N0QXVkaW9DaGViQmFuZC0tcG9sZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJpcHBsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCNHc3RBdWRpb0NoZWJCYW5kLS1yaXBwbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR5cGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwjR3N0QXVkaW9DaGViQmFuZC0tdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXBwZXItZnJlcXVlbmN54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5odG1sI0dzdEF1ZGlvQ2hlYkJhbmQtLXVwcGVyLWZyZXF1ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEF1ZGlvQ2hlYkxpbWl0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCNHc3RBdWRpb0NoZWJMaW1pdC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGN1dG9mZuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwjR3N0QXVkaW9DaGViTGltaXQtLWN1dG9mZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwjR3N0QXVkaW9DaGViTGltaXQtLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvbGVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCNHc3RBdWRpb0NoZWJMaW1pdC0tcG9sZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJpcHBsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwjR3N0QXVkaW9DaGViTGltaXQtLXJpcHBsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHlwZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwjR3N0QXVkaW9DaGViTGltaXQtLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBdWRpb0R5bmFtaWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCNHc3RBdWRpb0R5bmFtaWMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjaGFyYWN0ZXJpc3RpY3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCNHc3RBdWRpb0R5bmFtaWMtLWNoYXJhY3RlcmlzdGljcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5odG1sI0dzdEF1ZGlvRHluYW1pYy0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmF0aW/igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCNHc3RBdWRpb0R5bmFtaWMtLXJhdGlvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCNHc3RBdWRpb0R5bmFtaWMtLXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEF1ZGlvRWNobyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sI0dzdEF1ZGlvRWNoby1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRlbGF54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmh0bWwjR3N0QXVkaW9FY2hvLS1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmVlZGJhY2vigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbCNHc3RBdWRpb0VjaG8tLWZlZWRiYWNrIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpbnRlbnNpdHnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbCNHc3RBdWRpb0VjaG8tLWludGVuc2l0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LWRlbGF54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmh0bWwjR3N0QXVkaW9FY2hvLS1tYXgtZGVsYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBdWRpb0ZJUkZpbHRlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwjR3N0QXVkaW9GSVJGaWx0ZXItc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxrZXJuZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sI0dzdEF1ZGlvRklSRmlsdGVyLS1rZXJuZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sI0dzdEF1ZGlvRklSRmlsdGVyLS1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmF0ZS1jaGFuZ2Vk4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwjR3N0QXVkaW9GSVJGaWx0ZXItcmF0ZS1jaGFuZ2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXVkaW9JSVJGaWx0ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sI0dzdEF1ZGlvSUlSRmlsdGVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwjR3N0QXVkaW9JSVJGaWx0ZXItLWEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sI0dzdEF1ZGlvSUlSRmlsdGVyLS1iIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmF0ZS1jaGFuZ2Vk4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwjR3N0QXVkaW9JSVJGaWx0ZXItcmF0ZS1jaGFuZ2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXVkaW9JbnZlcnQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5odG1sI0dzdEF1ZGlvSW52ZXJ0LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGVncmVl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuaHRtbCNHc3RBdWRpb0ludmVydC0tZGVncmVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXVkaW9LYXJhb2tlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwjR3N0QXVkaW9LYXJhb2tlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmlsdGVyLWJhbmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCNHc3RBdWRpb0thcmFva2UtLWZpbHRlci1iYW5kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmaWx0ZXItd2lkdGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCNHc3RBdWRpb0thcmFva2UtLWZpbHRlci13aWR0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGV2ZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCNHc3RBdWRpb0thcmFva2UtLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb25vLWxldmVs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwjR3N0QXVkaW9LYXJhb2tlLS1tb25vLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXVkaW9QYW5vcmFtYSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCNHc3RBdWRpb1Bhbm9yYW1hLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCNHc3RBdWRpb1Bhbm9yYW1hTWV0aG9kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwYW5vcmFtYeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCNHc3RBdWRpb1Bhbm9yYW1hLS1wYW5vcmFtYSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWV0aG9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS5odG1sI0dzdEF1ZGlvUGFub3JhbWEtLW1ldGhvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEF1ZGlvV1NpbmNCYW5kIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvd2VyLWZyZXF1ZW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwjR3N0QXVkaW9XU2luY0JhbmQtLWxvd2VyLWZyZXF1ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXBwZXItZnJlcXVlbmN54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC0tdXBwZXItZnJlcXVlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcd2luZG934oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC0td2luZG93Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsZW5ndGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jYmFuZC5odG1sI0dzdEF1ZGlvV1NpbmNCYW5kLS1sZW5ndGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBdWRpb1dTaW5jTGltaXQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCNHc3RBdWRpb1dTaW5jTGltaXQtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsZW5ndGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCNHc3RBdWRpb1dTaW5jTGltaXQtLWxlbmd0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sI0dzdEF1ZGlvV1NpbmNMaW1pdC0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcd2luZG934oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Lmh0bWwjR3N0QXVkaW9XU2luY0xpbWl0LS13aW5kb3ciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGN1dG9mZuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sI0dzdEF1ZGlvV1NpbmNMaW1pdC0tY3V0b2ZmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXVQYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCNHc3RBdVBhcnNlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0QXV0b0F1ZGlvU2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCNHc3RBdXRvQXVkaW9TaW5rLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHMtb2Zmc2V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sI0dzdEF1dG9BdWRpb1NpbmstLXRzLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3luY+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCNHc3RBdXRvQXVkaW9TaW5rLS1zeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RBdXRvQXVkaW9TcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMuaHRtbCNHc3RBdXRvQXVkaW9TcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RBdXRvVmlkZW9TaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sI0dzdEF1dG9WaWRlb1Npbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0cy1vZmZzZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLmh0bWwjR3N0QXV0b1ZpZGVvU2luay0tdHMtb2Zmc2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzeW5j4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sI0dzdEF1dG9WaWRlb1NpbmstLXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEF1dG9WaWRlb1NyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5odG1sI0dzdEF1dG9WaWRlb1NyYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9IkdzdEF2aURlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguaHRtbCNHc3RBdmlEZW11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RBdmlNdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXguaHRtbCNHc3RBdmlNdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiaWdmaWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lmh0bWwjR3N0QXZpTXV4LS1iaWdmaWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0QXZpU3VidGl0bGUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5odG1sI0dzdEF2aVN1YnRpdGxlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENBQ0FTaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsuaHRtbCNHc3RDQUNBU2luay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFudGktYWxpYXNpbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLS1hbnRpLWFsaWFzaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkaXRoZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLS1kaXRoZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNjcmVlbi1oZWlnaHTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLS1zY3JlZW4taGVpZ2h0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzY3JlZW4td2lkdGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLS1zY3JlZW4td2lkdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDYWlyb092ZXJsYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbCNHc3RDYWlyb092ZXJsYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcY2Fwcy1jaGFuZ2Vk4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheS5odG1sI0dzdENhaXJvT3ZlcmxheS1jYXBzLWNoYW5nZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxkcmF34oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheS5odG1sI0dzdENhaXJvT3ZlcmxheS1kcmF3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Q2Fwc1NldHRlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCNHc3RDYXBzU2V0dGVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2Fwc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCNHc3RDYXBzU2V0dGVyLS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxqb2lu4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sI0dzdENhcHNTZXR0ZXItLWpvaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlcGxhY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLmh0bWwjR3N0Q2Fwc1NldHRlci0tcmVwbGFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdENwdVJlcG9ydCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5odG1sI0dzdENwdVJlcG9ydC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RDdXR0ZXIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCNHc3RDdXR0ZXItc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsZWFreeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sI0dzdEN1dHRlci0tbGVha3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByZS1sZW5ndGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCNHc3RDdXR0ZXItLXByZS1sZW5ndGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ1bi1sZW5ndGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCNHc3RDdXR0ZXItLXJ1bi1sZW5ndGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRocmVzaG9sZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sI0dzdEN1dHRlci0tdGhyZXNob2xkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aHJlc2hvbGQtZELigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCNHc3RDdXR0ZXItLXRocmVzaG9sZC1kQiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERjYVBhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbCNHc3REY2FQYXJzZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REZWludGVybGFjZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3REZWludGVybGFjZUZpZWxkcyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2VGaWVsZHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdERlaW50ZXJsYWNlTG9ja2luZyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2VMb2NraW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3REZWludGVybGFjZU1ldGhvZHMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlTWV0aG9kcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImVudW0iIG5hbWU9ImVudW0gR3N0RGVpbnRlcmxhY2VGaWVsZExheW91dCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2VGaWVsZExheW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmllbGRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZS0tZmllbGRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtZXRob2TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlLS1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlLS1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0ZmbigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlLS10ZmYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRyb3Atb3JwaGFuc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2UtLWRyb3Atb3JwaGFucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaWdub3JlLW9ic2N1cmXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlLS1pZ25vcmUtb2JzY3VyZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9ja2luZ+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2UtLWxvY2tpbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REZWludGVybGVhdmUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUuaHRtbCNHc3REZWludGVybGVhdmUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxrZWVwLXBvc2l0aW9uc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5odG1sI0dzdERlaW50ZXJsZWF2ZS0ta2VlcC1wb3NpdGlvbnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REaWNlVFYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuaHRtbCNHc3REaWNlVFYtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzcXVhcmUtYml0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5odG1sI0dzdERpY2VUVi0tc3F1YXJlLWJpdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REaXJlY3RTb3VuZFNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaXJlY3Rzb3VuZHNpbmsuaHRtbCNHc3REaXJlY3RTb3VuZFNpbmsiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REVE1GU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sI0dzdERUTUZTcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuaHRtbCNHc3REVE1GU3JjLS1pbnRlcnZhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERWMTM5NFNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sI0dzdERWMTM5NFNyYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNoYW5uZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLWNoYW5uZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbnNlY3V0aXZl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS1jb25zZWN1dGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZHJvcC1pbmNvbXBsZXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS1kcm9wLWluY29tcGxldGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGd1aWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLWd1aWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLXBvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNraXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLXNraXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZS1hdmPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLXVzZS1hdmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS1kZXZpY2UtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGZyYW1lLWRyb3BwZWTigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLWZyYW1lLWRyb3BwZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REVkRlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwjR3N0RFZEZWMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjbGFtcC1jaHJvbWHigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5odG1sI0dzdERWRGVjLS1jbGFtcC1jaHJvbWEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNsYW1wLWx1bWHigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5odG1sI0dzdERWRGVjLS1jbGFtcC1sdW1hIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkcm9wLWZhY3RvcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwjR3N0RFZEZWMtLWRyb3AtZmFjdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxxdWFsaXR54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCNHc3REVkRlYy0tcXVhbGl0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdERWRGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Lmh0bWwjR3N0RFZEZW11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3REeW5VRFBTaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sI0dzdER5blVEUFNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjbG9zZS1zb2NrZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luay0tY2xvc2Utc29ja2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzb2NrZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luay0tc29ja2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiaW5kLWFkZHJlc3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luay0tYmluZC1hZGRyZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiaW5kLXBvcnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luay0tYmluZC1wb3J0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzb2NrZXQtdjbigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luay0tc29ja2V0LXY2Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcZ2V0LXN0YXRz4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCNHc3REeW5VRFBTaW5rLWdldC1zdGF0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEVkZ2VUViIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVkZ2V0di5odG1sI0dzdEVkZ2VUVi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYmFuZDDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiYW5kMeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmQy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYmFuZDPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiYW5kNOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmQ14oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kNSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYmFuZDbigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQ2Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiYW5kN+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmQ44oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kOCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYmFuZDnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SWlyRXF1YWxpemVyM0JhbmRzIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjNCYW5kcy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmQw4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjNCYW5kcy0tYmFuZDAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmQx4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjNCYW5kcy0tYmFuZDEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmQy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjNCYW5kcy0tYmFuZDIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJaXJFcXVhbGl6ZXJOQmFuZHMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyTkJhbmRzLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnVtLWJhbmRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5odG1sI0dzdElpckVxdWFsaXplck5CYW5kcy0tbnVtLWJhbmRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmxhY0RlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMuaHRtbCNHc3RGbGFjRGVjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZsYWNFbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJsb2Nrc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1ibG9ja3NpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGVzY2FwZS1jb2RpbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tZXNjYXBlLWNvZGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZXhoYXVzdGl2ZS1tb2RlbC1zZWFyY2jigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tZXhoYXVzdGl2ZS1tb2RlbC1zZWFyY2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvb3NlLW1pZC1zaWRlLXN0ZXJlb+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1sb29zZS1taWQtc2lkZS1zdGVyZW8iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1scGMtb3JkZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tbWF4LWxwYy1vcmRlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1tYXgtcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtaWQtc2lkZS1zdGVyZW/igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tbWlkLXNpZGUtc3RlcmVvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtaW4tcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLW1pbi1yZXNpZHVhbC1wYXJ0aXRpb24tb3JkZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHFscC1jb2VmZi1wcmVjLXNlYXJjaOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1xbHAtY29lZmYtcHJlYy1zZWFyY2giLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHFscC1jb2VmZi1wcmVjaXNpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tcWxwLWNvZWZmLXByZWNpc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccXVhbGl0eeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1xdWFsaXR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyaWNlLXBhcmFtZXRlci1zZWFyY2gtZGlzdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1yaWNlLXBhcmFtZXRlci1zZWFyY2gtZGlzdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3RyZWFtYWJsZS1zdWJzZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tc3RyZWFtYWJsZS1zdWJzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBhZGRpbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tcGFkZGluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2Vla3BvaW50c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1zZWVrcG9pbnRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0RmxhY1BhcnNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmh0bWwjR3N0RmxhY1BhcnNlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2hlY2stZnJhbWUtY2hlY2tzdW1z4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmh0bWwjR3N0RmxhY1BhcnNlLS1jaGVjay1mcmFtZS1jaGVja3N1bXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RGbGFjVGFnIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5odG1sI0dzdEZsYWNUYWctc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0Rmx2RGVtdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5odG1sI0dzdEZsdkRlbXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0Rmx2TXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4Lmh0bWwjR3N0Rmx2TXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3RyZWFtYWJsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5odG1sI0dzdEZsdk11eC0tc3RyZWFtYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEZseERlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZseGRlYy5odG1sI0dzdEZseERlYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RHYW1tYSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmh0bWwjR3N0R2FtbWEtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxnYW1tYeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmh0bWwjR3N0R2FtbWEtLWdhbW1hIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0R2RrUGl4YnVmRGVjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwjR3N0R2RrUGl4YnVmRGVjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEdka1BpeGJ1Zk92ZXJsYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwjR3N0R2RrUGl4YnVmT3ZlcmxheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLWxvY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxvZmZzZXQteOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCNHc3RHZGtQaXhidWZPdmVybGF5LS1vZmZzZXQteCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcb2Zmc2V0LXnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwjR3N0R2RrUGl4YnVmT3ZlcmxheS0tb2Zmc2V0LXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG92ZXJsYXktaGVpZ2h04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLW92ZXJsYXktaGVpZ2h0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxvdmVybGF5LXdpZHRo4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLW92ZXJsYXktd2lkdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlbGF0aXZlLXjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwjR3N0R2RrUGl4YnVmT3ZlcmxheS0tcmVsYXRpdmUteCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVsYXRpdmUteeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCNHc3RHZGtQaXhidWZPdmVybGF5LS1yZWxhdGl2ZS15Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhbHBoYeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCNHc3RHZGtQaXhidWZPdmVybGF5LS1hbHBoYSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGl4YnVm4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLXBpeGJ1ZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccG9zaXRpb25pbmctbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCNHc3RHZGtQaXhidWZPdmVybGF5LS1wb3NpdGlvbmluZy1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0R2RrUGl4YnVmU2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuaHRtbCNHc3RHZGtQaXhidWZTaW5rLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGFzdC1waXhidWbigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmh0bWwjR3N0R2RrUGl4YnVmU2luay0tbGFzdC1waXhidWYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvc3QtbWVzc2FnZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmh0bWwjR3N0R2RrUGl4YnVmU2luay0tcG9zdC1tZXNzYWdlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEdvb20yazEiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLmh0bWwjR3N0R29vbTJrMS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RHb29tIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5odG1sI0dzdEdvb20tc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SERWMTM5NFNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCNHc3RIRFYxMzk0U3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2hhbm5lbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCNHc3RIRFYxMzk0U3JjLS1jaGFubmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2UtbmFtZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCNHc3RIRFYxMzk0U3JjLS1kZXZpY2UtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZ3VpZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCNHc3RIRFYxMzk0U3JjLS1ndWlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3J04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sI0dzdEhEVjEzOTRTcmMtLXBvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZS1hdmPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLmh0bWwjR3N0SERWMTM5NFNyYy0tdXNlLWF2YyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdElDWURlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguaHRtbCNHc3RJQ1lEZW11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJRDNEZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4Lmh0bWwjR3N0SUQzRGVtdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcmVmZXItdjHigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sI0dzdElEM0RlbXV4LS1wcmVmZXItdjEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJZDN2Mk11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lmh0bWwjR3N0SWQzdjJNdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SWlyRXF1YWxpemVyIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmh0bWwjR3N0SWlyRXF1YWxpemVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEltYWdlRnJlZXplIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUuaHRtbCNHc3RJbWFnZUZyZWV6ZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RJbnRlcmxlYXZlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5odG1sI0dzdEludGVybGVhdmUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjaGFubmVsLXBvc2l0aW9uc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCNHc3RJbnRlcmxlYXZlLS1jaGFubmVsLXBvc2l0aW9ucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCNHc3RJbnRlcmxlYXZlLS1jaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RJU01MTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkdHMtbWV0aG9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLWR0cy1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZhc3RzdGFydOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS1mYXN0c3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZhc3RzdGFydC1maWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLWZhc3RzdGFydC1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmcmFnbWVudC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS1mcmFnbWVudC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLW1vdmllLXRpbWVzY2FsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJlc2VudGF0aW9uLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tcHJlc2VudGF0aW9uLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0cmVhbWFibGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tc3RyZWFtYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHJhay10aW1lc2NhbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tdHJhay10aW1lc2NhbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLXJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLXJlc2VydmVkLW1heC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEphY2tBdWRpb1NpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwjR3N0SmFja0F1ZGlvU2luay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNsaWVudOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCNHc3RKYWNrQXVkaW9TaW5rLS1jbGllbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbm5lY3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwjR3N0SmFja0F1ZGlvU2luay0tY29ubmVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2VydmVy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sI0dzdEphY2tBdWRpb1NpbmstLXNlcnZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xpZW50LW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwjR3N0SmFja0F1ZGlvU2luay0tY2xpZW50LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRyYW5zcG9ydOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCNHc3RKYWNrQXVkaW9TaW5rLS10cmFuc3BvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvcnQtcGF0dGVybuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCNHc3RKYWNrQXVkaW9TaW5rLS1wb3J0LXBhdHRlcm4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RKYWNrQXVkaW9TcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMuaHRtbCNHc3RKYWNrQXVkaW9TcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjbGllbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMuaHRtbCNHc3RKYWNrQXVkaW9TcmMtLWNsaWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29ubmVjdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sI0dzdEphY2tBdWRpb1NyYy0tY29ubmVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2VydmVy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS1zZXJ2ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNsaWVudC1uYW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS1jbGllbnQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHJhbnNwb3J04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS10cmFuc3BvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvcnQtcGF0dGVybuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sI0dzdEphY2tBdWRpb1NyYy0tcG9ydC1wYXR0ZXJuIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0SnBlZ0RlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMuaHRtbCNHc3RKcGVnRGVjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaWRjdC1tZXRob2TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwjR3N0SnBlZ0RlYy0taWRjdC1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1lcnJvcnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwjR3N0SnBlZ0RlYy0tbWF4LWVycm9ycyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdEpwZWdFbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmh0bWwjR3N0SnBlZ0VuYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHF1YWxpdHnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmh0bWwjR3N0SnBlZ0VuYy0tcXVhbGl0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaWRjdC1tZXRob2TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmh0bWwjR3N0SnBlZ0VuYy0taWRjdC1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RMZXZlbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLWludGVydmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtZXNzYWdl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCNHc3RMZXZlbC0tbWVzc2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGVhay1mYWxsb2Zm4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCNHc3RMZXZlbC0tcGVhay1mYWxsb2ZmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwZWFrLXR0bOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLXBlYWstdHRsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3N0LW1lc3NhZ2Vz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCNHc3RMZXZlbC0tcG9zdC1tZXNzYWdlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0TWF0cm9za2FEZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thZGVtdXguaHRtbCNHc3RNYXRyb3NrYURlbXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LWdhcC10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5odG1sI0dzdE1hdHJvc2thRGVtdXgtLW1heC1nYXAtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE1hdHJvc2thTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCNHc3RNYXRyb3NrYU11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHdyaXRpbmctYXBw4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCNHc3RNYXRyb3NrYU11eC0td3JpdGluZy1hcHAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHZlcnNpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sI0dzdE1hdHJvc2thTXV4LS12ZXJzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtaW4taW5kZXgtaW50ZXJ2YWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sI0dzdE1hdHJvc2thTXV4LS1taW4taW5kZXgtaW50ZXJ2YWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0cmVhbWFibGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sI0dzdE1hdHJvc2thTXV4LS1zdHJlYW1hYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lY29kZXNjYWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCNHc3RNYXRyb3NrYU11eC0tdGltZWNvZGVzY2FsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0TWF0cm9za2FQYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbCNHc3RNYXRyb3NrYVBhcnNlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0iR3N0TUoyTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZHRzLW1ldGhvZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tZHRzLW1ldGhvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmFzdHN0YXJ04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1mYXN0c3RhcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZhc3RzdGFydC1maWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1mYXN0c3RhcnQtZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCNHc3RNSjJNdXgtLWZyYWdtZW50LWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb292LXJlY292ZXJ5LWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCNHc3RNSjJNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1tb3ZpZS10aW1lc2NhbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByZXNlbnRhdGlvbi10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1wcmVzZW50YXRpb24tdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3RyZWFtYWJsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tc3RyZWFtYWJsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHJhay10aW1lc2NhbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCNHc3RNSjJNdXgtLXRyYWstdGltZXNjYWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXNlcnZlZC1ieXRlcy1wZXItc2Vj4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1yZXNlcnZlZC1ieXRlcy1wZXItc2VjIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCNHc3RNSjJNdXgtLXJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tcmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TW9ub3Njb3BlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbW9ub3Njb3BlLmh0bWwjR3N0TW9ub3Njb3BlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJHc3RNUDRNdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkdHMtbWV0aG9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwjR3N0TVA0TXV4LS1kdHMtbWV0aG9kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmYXN0c3RhcnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLWZhc3RzdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLWZhc3RzdGFydC1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmcmFnbWVudC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tZnJhZ21lbnQtZHVyYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tbW9vdi1yZWNvdmVyeS1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb3ZpZS10aW1lc2NhbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLW1vdmllLXRpbWVzY2FsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJlc2VudGF0aW9uLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLXByZXNlbnRhdGlvbi10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwjR3N0TVA0TXV4LS1zdHJlYW1hYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tdHJhay10aW1lc2NhbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLXJlc2VydmVkLWJ5dGVzLXBlci1zZWMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZ+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tcmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXNlcnZlZC1tYXgtZHVyYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLXJlc2VydmVkLW1heC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwjR3N0TVA0TXV4LS1yZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RNcGVnQXVkaW9QYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wZWdhdWRpb3BhcnNlLmh0bWwjR3N0TXBlZ0F1ZGlvUGFyc2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TXVMYXdEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5odG1sI0dzdE11TGF3RGVjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE11TGF3RW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMuaHRtbCNHc3RNdUxhd0VuYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RNdWx0aUZpbGVTaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RNdWx0aUZpbGVTaW5rTmV4dCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCNHc3RNdWx0aUZpbGVTaW5rTmV4dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGluZGV44oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstLWluZGV4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxuZXh0LWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tbmV4dC1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3N0LW1lc3NhZ2Vz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstLXBvc3QtbWVzc2FnZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1maWxlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCNHc3RNdWx0aUZpbGVTaW5rLS1tYXgtZmlsZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1maWxlLXNpemXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tbWF4LWZpbGUtc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWdncmVnYXRlLWdvcHPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tYWdncmVnYXRlLWdvcHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1maWxlLWR1cmF0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstLW1heC1maWxlLWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TXVsdGlGaWxlU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwjR3N0TXVsdGlGaWxlU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2Fwc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sI0dzdE11bHRpRmlsZVNyYy0tY2FwcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW5kZXjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMuaHRtbCNHc3RNdWx0aUZpbGVTcmMtLWluZGV4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsb2NhdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sI0dzdE11bHRpRmlsZVNyYy0tbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvb3DigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMuaHRtbCNHc3RNdWx0aUZpbGVTcmMtLWxvb3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0YXJ0LWluZGV44oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwjR3N0TXVsdGlGaWxlU3JjLS1zdGFydC1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3RvcC1pbmRleOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sI0dzdE11bHRpRmlsZVNyYy0tc3RvcC1pbmRleCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE11bHRpcGFydERlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0ZGVtdXguaHRtbCNHc3RNdWx0aXBhcnREZW11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJvdW5kYXJ54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0ZGVtdXguaHRtbCNHc3RNdWx0aXBhcnREZW11eC0tYm91bmRhcnkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNpbmdsZS1zdHJlYW3igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sI0dzdE11bHRpcGFydERlbXV4LS1zaW5nbGUtc3RyZWFtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TXVsdGlwYXJ0TXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4Lmh0bWwjR3N0TXVsdGlwYXJ0TXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYm91bmRhcnnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXguaHRtbCNHc3RNdWx0aXBhcnRNdXgtLWJvdW5kYXJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0TXVsdGlVRFBTaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYnl0ZXMtc2VydmVk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1ieXRlcy1zZXJ2ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJ5dGVzLXRvLXNlcnZl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1ieXRlcy10by1zZXJ2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xpZW50c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tY2xpZW50cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXV0by1tdWx0aWNhc3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWF1dG8tbXVsdGljYXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsb29w4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1sb29wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxxb3MtZHNjcOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tcW9zLWRzY3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR0bOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tdHRsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0dGwtbWPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLXR0bC1tYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2VuZC1kdXBsaWNhdGVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1zZW5kLWR1cGxpY2F0ZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJ1ZmZlci1zaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1idWZmZXItc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xvc2Utc29ja2V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1jbG9zZS1zb2NrZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNvY2tldOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tc29ja2V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2VkLXNvY2tldOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tdXNlZC1zb2NrZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZvcmNlLWlwdjTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWZvcmNlLWlwdjQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG11bHRpY2FzdC1pZmFjZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tbXVsdGljYXN0LWlmYWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiaW5kLWFkZHJlc3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWJpbmQtYWRkcmVzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYmluZC1wb3J04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1iaW5kLXBvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNvY2tldC12NuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tc29ja2V0LXY2Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2VkLXNvY2tldC12NuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tdXNlZC1zb2NrZXQtdjYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxhZGTigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLWFkZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGNsZWFy4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay1jbGVhciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGNsaWVudC1hZGRlZOKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstY2xpZW50LWFkZGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcY2xpZW50LXJlbW92ZWTigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLWNsaWVudC1yZW1vdmVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcZ2V0LXN0YXRz4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay1nZXQtc3RhdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxyZW1vdmXigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLXJlbW92ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE5hdmlnYXRpb250ZXN0IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCNHc3ROYXZpZ2F0aW9udGVzdC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3ROYXZTZWVrIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2c2Vlay5odG1sI0dzdE5hdlNlZWstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzZWVrLW9mZnNldOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbCNHc3ROYXZTZWVrLS1zZWVrLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE9wVFYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwjR3N0T3BUVi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwjR3N0T3BUVi0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3BlZWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwjR3N0T3BUVi0tc3BlZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRocmVzaG9sZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYuaHRtbCNHc3RPcFRWLS10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RPc3M0U2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmh0bWwjR3N0T3NzNFNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sI0dzdE9zczRTaW5rLS1kZXZpY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCNHc3RPc3M0U2luay0tZGV2aWNlLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG11dGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sI0dzdE9zczRTaW5rLS1tdXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx2b2x1bWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sI0dzdE9zczRTaW5rLS12b2x1bWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RPc3M0U291cmNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5odG1sI0dzdE9zczRTb3VyY2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmh0bWwjR3N0T3NzNFNvdXJjZS0tZGV2aWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2UtbmFtZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCNHc3RPc3M0U291cmNlLS1kZXZpY2UtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE9zc1NpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLmh0bWwjR3N0T3NzU2luay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbCNHc3RPc3NTaW5rLS1kZXZpY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RPc3NTcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbCNHc3RPc3NTcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbCNHc3RPc3NTcmMtLWRldmljZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNlLW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbCNHc3RPc3NTcmMtLWRldmljZS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0T3N4QXVkaW9TaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLmh0bWwjR3N0T3N4QXVkaW9TaW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuaHRtbCNHc3RPc3hBdWRpb1NpbmstLWRldmljZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdE9zeEF1ZGlvU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMuaHRtbCNHc3RPc3hBdWRpb1NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMuaHRtbCNHc3RPc3hBdWRpb1NyYy0tZGV2aWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0T1NYVmlkZW9TaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwjR3N0T1NYVmlkZW9TaW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxlbWJlZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5odG1sI0dzdE9TWFZpZGVvU2luay0tZW1iZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZ1bGxzY3JlZW7igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuaHRtbCNHc3RPU1hWaWRlb1NpbmstLWZ1bGxzY3JlZW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQbmdEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMuaHRtbCNHc3RQbmdEZWMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UG5nRW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwjR3N0UG5nRW5jLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29tcHJlc3Npb24tbGV2ZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMuaHRtbCNHc3RQbmdFbmMtLWNvbXByZXNzaW9uLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzbmFwc2hvdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5odG1sI0dzdFBuZ0VuYy0tc25hcHNob3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RQcm9ncmVzc1JlcG9ydCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0Lmh0bWwjR3N0UHJvZ3Jlc3NSZXBvcnQtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaWxlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sI0dzdFByb2dyZXNzUmVwb3J0LS1zaWxlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVwZGF0ZS1mcmVx4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCNHc3RQcm9ncmVzc1JlcG9ydC0tdXBkYXRlLWZyZXEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZvcm1hdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0Lmh0bWwjR3N0UHJvZ3Jlc3NSZXBvcnQtLWZvcm1hdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZG8tcXVlcnnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sI0dzdFByb2dyZXNzUmVwb3J0LS1kby1xdWVyeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFB1bHNlU2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tZGV2aWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzZXJ2ZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstLXNlcnZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNlLW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstLWRldmljZS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx2b2x1bWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstLXZvbHVtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbXV0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tbXV0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3RyZWFtLXByb3BlcnRpZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstLXN0cmVhbS1wcm9wZXJ0aWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjbGllbnQtbmFtZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tY2xpZW50LW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGN1cnJlbnQtZGV2aWNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmh0bWwjR3N0UHVsc2VTaW5rLS1jdXJyZW50LWRldmljZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFB1bHNlU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLWRldmljZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2VydmVy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy0tc2VydmVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2UtbmFtZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLWRldmljZS1uYW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdHJlYW0tcHJvcGVydGllc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLXN0cmVhbS1wcm9wZXJ0aWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtdXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy0tbXV0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc291cmNlLW91dHB1dC1pbmRleOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLXNvdXJjZS1vdXRwdXQtaW5kZXgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHZvbHVtZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLXZvbHVtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xpZW50LW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sI0dzdFB1bHNlU3JjLS1jbGllbnQtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY3VycmVudC1kZXZpY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sI0dzdFB1bHNlU3JjLS1jdXJyZW50LWRldmljZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFB1c2hGaWxlU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCNHc3RQdXNoRmlsZVNyYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFwcGxpZWQtcmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtLWFwcGxpZWQtcmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW5pdGlhbC10aW1lc3RhbXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5odG1sI0dzdFB1c2hGaWxlU3JjLS1pbml0aWFsLXRpbWVzdGFtcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5odG1sI0dzdFB1c2hGaWxlU3JjLS1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtLXJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0YXJ0LXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5odG1sI0dzdFB1c2hGaWxlU3JjLS1zdGFydC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdHJlYW0tdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtLXN0cmVhbS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lLXNlZ21lbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5odG1sI0dzdFB1c2hGaWxlU3JjLS10aW1lLXNlZ21lbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RRVERlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5odG1sI0dzdFFURGVtdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UVRNb292UmVjb3ZlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaHRtbCNHc3RRVE1vb3ZSZWNvdmVyLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYnJva2VuLWlucHV04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sI0dzdFFUTW9vdlJlY292ZXItLWJyb2tlbi1pbnB1dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmFzdHN0YXJ0LW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwjR3N0UVRNb292UmVjb3Zlci0tZmFzdHN0YXJ0LW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZpeGVkLW91dHB1dOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaHRtbCNHc3RRVE1vb3ZSZWNvdmVyLS1maXhlZC1vdXRwdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlY292ZXJ5LWlucHV04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sI0dzdFFUTW9vdlJlY292ZXItLXJlY292ZXJ5LWlucHV0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UVRNdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZHRzLW1ldGhvZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLWR0cy1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZhc3RzdGFydOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLWZhc3RzdGFydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1mYXN0c3RhcnQtZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1mcmFnbWVudC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tbW9vdi1yZWNvdmVyeS1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb3ZpZS10aW1lc2NhbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1tb3ZpZS10aW1lc2NhbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByZXNlbnRhdGlvbi10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tcHJlc2VudGF0aW9uLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0cmVhbWFibGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1zdHJlYW1hYmxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLXRyYWstdGltZXNjYWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXNlcnZlZC1ieXRlcy1wZXItc2Vj4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tcmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXNlcnZlZC1tYXgtZHVyYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFF1YXJrVFYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lmh0bWwjR3N0UXVhcmtUVi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBsYW5lc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuaHRtbCNHc3RRdWFya1RWLS1wbGFuZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSYWRpb2FjVFYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYuaHRtbCNHc3RSYWRpb2FjVFYtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjb2xvcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sI0dzdFJhZGlvYWNUVi0tY29sb3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGludGVydmFs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwjR3N0UmFkaW9hY1RWLS1pbnRlcnZhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sI0dzdFJhZGlvYWNUVi0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHJpZ2dlcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sI0dzdFJhZGlvYWNUVi0tdHJpZ2dlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJldlRWIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCNHc3RSZXZUVi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRlbGF54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCNHc3RSZXZUVi0tZGVsYXkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGdhaW7igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5odG1sI0dzdFJldlRWLS1nYWluIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsaW5lc3BhY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5odG1sI0dzdFJldlRWLS1saW5lc3BhY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSZ0FuYWx5c2lzIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sI0dzdFJnQW5hbHlzaXMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxmb3JjZWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwjR3N0UmdBbmFseXNpcy0tZm9yY2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxudW0tdHJhY2tz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sI0dzdFJnQW5hbHlzaXMtLW51bS10cmFja3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlZmVyZW5jZS1sZXZlbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCNHc3RSZ0FuYWx5c2lzLS1yZWZlcmVuY2UtbGV2ZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1lc3NhZ2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwjR3N0UmdBbmFseXNpcy0tbWVzc2FnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJnTGltaXRlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5odG1sI0dzdFJnTGltaXRlci1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGVuYWJsZWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuaHRtbCNHc3RSZ0xpbWl0ZXItLWVuYWJsZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSZ1ZvbHVtZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhbGJ1bS1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCNHc3RSZ1ZvbHVtZS0tYWxidW0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmFsbGJhY2stZ2FpbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLWZhbGxiYWNrLWdhaW4iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGhlYWRyb29t4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCNHc3RSZ1ZvbHVtZS0taGVhZHJvb20iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByZS1hbXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sI0dzdFJnVm9sdW1lLS1wcmUtYW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXN1bHQtZ2FpbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLXJlc3VsdC1nYWluIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0YXJnZXQtZ2FpbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLXRhcmdldC1nYWluIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UmlwcGxlVFYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yaXBwbGV0di5odG1sI0dzdFJpcHBsZVRWLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lmh0bWwjR3N0UmlwcGxlVFYtLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCNHc3RSaXBwbGVUVi0tcmVzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBBQzNEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lmh0bWwjR3N0UnRwQUMzRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwQUMzUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwjR3N0UnRwQUMzUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEFNUkRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkuaHRtbCNHc3RSdHBBTVJEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBBTVJQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuaHRtbCNHc3RSdHBBTVJQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwQmluIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZG8tbG9zdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tZG8tbG9zdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGF0ZW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2Rlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tc2RlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaWdub3JlLXB04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1pZ25vcmUtcHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGF1dG9yZW1vdmXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLWF1dG9yZW1vdmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJ1ZmZlci1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1idWZmZXItbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnRwLXN5bmPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLW50cC1zeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2UtcGlwZWxpbmUtY2xvY2vigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLXVzZS1waXBlbGluZS1jbG9jayIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnRjcC1zeW5j4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1ydGNwLXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0Y3Atc3luYy1pbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcnRjcC1zeW5jLWludGVydmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkcm9wLW9uLWxhdGVuY3nigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLWRyb3Atb24tbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZG8tc3luYy1ldmVudOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tZG8tc3luYy1ldmVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZG8tcmV0cmFuc21pc3Npb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLWRvLXJldHJhbnNtaXNzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydHAtcHJvZmlsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcnRwLXByb2ZpbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG50cC10aW1lLXNvdXJjZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tbnRwLXRpbWUtc291cmNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtZHJvcG91dC10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1tYXgtZHJvcG91dC10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtbWlzb3JkZXItdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tbWF4LW1pc29yZGVyLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1ydGNwLXJ0cC10aW1lLWRpZmbigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLW1heC1ydGNwLXJ0cC10aW1lLWRpZmYiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0Y3Atc3luYy1zZW5kLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLXJ0Y3Atc3luYy1zZW5kLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJmYzcyNzMtc3luY+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcmZjNzI3My1zeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtc3RyZWFtc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tbWF4LXN0cmVhbXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxjbGVhci1wdC1tYXDigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLWNsZWFyLXB0LW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGdldC1pbnRlcm5hbC1zZXNzaW9u4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1nZXQtaW50ZXJuYWwtc2Vzc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLWJ5ZS1zc3Jj4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1ieWUtc3NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLWJ5ZS10aW1lb3V04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1ieWUtdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLW5ldy1zc3Jj4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1uZXctc3NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLW5wdC1zdG9w4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1ucHQtc3RvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNlbmRlci10aW1lb3V04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1zZW5kZXItdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNzcmMtYWN0aXZl4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1zc3JjLWFjdGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNzcmMtY29sbGlzaW9u4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1vbi1zc3JjLWNvbGxpc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNzcmMtc2Rlc+KAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc3NyYy1zZGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tc3NyYy12YWxpZGF0ZWTigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLW9uLXNzcmMtdmFsaWRhdGVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tdGltZW91dOKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LXB0LW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlc2V0LXN5bmPigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlc2V0LXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxwYXlsb2FkLXR5cGUtY2hhbmdl4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1wYXlsb2FkLXR5cGUtY2hhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcbmV3LWppdHRlcmJ1ZmZlcuKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tbmV3LWppdHRlcmJ1ZmZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlcXVlc3QtYXV4LXJlY2VpdmVy4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LWF1eC1yZWNlaXZlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlcXVlc3QtYXV4LXNlbmRlcuKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1hdXgtc2VuZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmVxdWVzdC1ydGNwLWRlY29kZXLigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtcnRjcC1kZWNvZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmVxdWVzdC1ydGNwLWVuY29kZXLigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtcnRjcC1lbmNvZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmVxdWVzdC1ydHAtZGVjb2RlcuKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1ydHAtZGVjb2RlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlcXVlc3QtcnRwLWVuY29kZXLigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtcnRwLWVuY29kZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxvbi1uZXctc2VuZGVyLXNzcmPigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLW9uLW5ldy1zZW5kZXItc3NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNlbmRlci1zc3JjLWFjdGl2ZeKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc2VuZGVyLXNzcmMtYWN0aXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcZ2V0LXNlc3Npb27igJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLWdldC1zZXNzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQQlZEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2ZGVwYXkuaHRtbCNHc3RSVFBCVkRlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJUUEJWUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkuaHRtbCNHc3RSVFBCVlBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBDRUxURGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuaHRtbCNHc3RSdHBDRUxURGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwQ0VMVFBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRwYXkuaHRtbCNHc3RSdHBDRUxUUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJUUERlYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCNHc3RSVFBEZWMtLWxhdGVuY3kiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxjbGVhci1wdC1tYXDigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLWNsZWFyLXB0LW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1yZXF1ZXN0LXB0LW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLWJ5ZS1zc3Jj4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1vbi1ieWUtc3NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLWJ5ZS10aW1lb3V04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1vbi1ieWUtdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLW5ldy1zc3Jj4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1vbi1uZXctc3NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNzcmMtY29sbGlzaW9u4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1vbi1zc3JjLWNvbGxpc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNzcmMtdmFsaWRhdGVk4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy1vbi1zc3JjLXZhbGlkYXRlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXRpbWVvdXTigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBEVE1GRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCNHc3RSdHBEVE1GRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtZHVyYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCNHc3RSdHBEVE1GRGVwYXktLW1heC1kdXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdW5pdC10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZmRlcGF5Lmh0bWwjR3N0UnRwRFRNRkRlcGF5LS11bml0LXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBEVE1GTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5odG1sI0dzdFJUUERUTUZNdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQRFRNRlNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY2xvY2stcmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLS1jbG9jay1yYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwYWNrZXQtcmVkdW5kYW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLS1wYWNrZXQtcmVkdW5kYW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tcHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNlcW51beKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLS1zZXFudW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNlcW51bS1vZmZzZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tc2VxbnVtLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3NyY+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLS1zc3JjIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lc3RhbXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tdGltZXN0YW1wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lc3RhbXAtb2Zmc2V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sI0dzdFJUUERUTUZTcmMtLXRpbWVzdGFtcC1vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBEVkRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS5odG1sI0dzdFJUUERWRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQRFZQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5odG1sI0dzdFJUUERWUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5Lmh0bWwjR3N0UlRQRFZQYXktLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBHNzIyRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuaHRtbCNHc3RSdHBHNzIyRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwRzcyMlBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJwYXkuaHRtbCNHc3RSdHBHNzIyUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEc3MjNEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5odG1sI0dzdFJ0cEc3MjNEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBHNzIzUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5odG1sI0dzdFJUUEc3MjNQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwRzcyNkRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lmh0bWwjR3N0UnRwRzcyNkRlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZm9yY2UtYWFsMuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5odG1sI0dzdFJ0cEc3MjZEZXBheS0tZm9yY2UtYWFsMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEc3MjZQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2cGF5Lmh0bWwjR3N0UnRwRzcyNlBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZvcmNlLWFhbDLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2cGF5Lmh0bWwjR3N0UnRwRzcyNlBheS0tZm9yY2UtYWFsMiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEc3MjlEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sI0dzdFJ0cEc3MjlEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBHNzI5UGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5odG1sI0dzdFJUUEc3MjlQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQR1NNRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5odG1sI0dzdFJUUEdTTURlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJUUEdTTVBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5odG1sI0dzdFJUUEdTTVBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBHU1REZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdGRlcGF5Lmh0bWwjR3N0UnRwR1NURGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwR1NUUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lmh0bWwjR3N0UnRwR1NUUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29uZmlnLWludGVydmFs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lmh0bWwjR3N0UnRwR1NUUGF5LS1jb25maWctaW50ZXJ2YWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBIMjYxRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuaHRtbCNHc3RSdHBIMjYxRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwSDI2MVBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuaHRtbCNHc3RSdHBIMjYxUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEgyNjNEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5odG1sI0dzdFJ0cEgyNjNEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBIMjYzUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sI0dzdFJ0cEgyNjNQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb2RlYS1vbmx54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sI0dzdFJ0cEgyNjNQYXktLW1vZGVhLW9ubHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBIMjYzUERlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5odG1sI0dzdFJ0cEgyNjNQRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwSDI2M1BQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcHBheS5odG1sI0dzdFJ0cEgyNjNQUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZnJhZ21lbnRhdGlvbi1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbCNHc3RSdHBIMjYzUFBheS0tZnJhZ21lbnRhdGlvbi1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwSDI2NERlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5Lmh0bWwjR3N0UnRwSDI2NERlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEgyNjRQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lmh0bWwjR3N0UnRwSDI2NFBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNwcm9wLXBhcmFtZXRlci1zZXRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5odG1sI0dzdFJ0cEgyNjRQYXktLXNwcm9wLXBhcmFtZXRlci1zZXRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjb25maWctaW50ZXJ2YWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lmh0bWwjR3N0UnRwSDI2NFBheS0tY29uZmlnLWludGVydmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwSDI2NURlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5Lmh0bWwjR3N0UnRwSDI2NURlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEgyNjVQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5Lmh0bWwjR3N0UnRwSDI2NVBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkuaHRtbCNHc3RSdHBIMjY1UGF5LS1jb25maWctaW50ZXJ2YWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNwcm9wLXBhcmFtZXRlci1zZXRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5odG1sI0dzdFJ0cEgyNjVQYXktLXNwcm9wLXBhcmFtZXRlci1zZXRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQaUxCQ0RlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5Lmh0bWwjR3N0UlRQaUxCQ0RlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5odG1sI0dzdFJUUGlMQkNEZXBheS0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJUUElMQkNQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5Lmh0bWwjR3N0UlRQSUxCQ1BheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBKMktEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Lmh0bWwjR3N0UnRwSjJLRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwSjJLUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5Lmh0bWwjR3N0UnRwSjJLUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEppdHRlckJ1ZmZlciIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRvLWxvc3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLWRvLWxvc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRyb3Atb24tbGF0ZW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tZHJvcC1vbi1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxsYXRlbmN54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0cy1vZmZzZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXRzLW9mZnNldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGVyY2VudOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcGVyY2VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZG8tcmV0cmFuc21pc3Npb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLWRvLXJldHJhbnNtaXNzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydHgtZGVsYXnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnR4LWRlbGF5LXJlb3JkZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1kZWxheS1yZW9yZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydHgtcmV0cnktcGVyaW9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtcmV0cnktcGVyaW9kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydHgtcmV0cnktdGltZW91dOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LXJldHJ5LXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0YXRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1zdGF0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnR4LW1pbi1kZWxheeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LW1pbi1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnR4LW1pbi1yZXRyeS10aW1lb3V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtbWluLXJldHJ5LXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0eC1tYXgtcmV0cmllc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LW1heC1yZXRyaWVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydHgtbmV4dC1zZXFudW3igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1uZXh0LXNlcW51bSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LWRyb3BvdXQtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tbWF4LWRyb3BvdXQtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LW1pc29yZGVyLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLW1heC1taXNvcmRlci10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtcnRjcC1ydHAtdGltZS1kaWZm4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1tYXgtcnRjcC1ydHAtdGltZS1kaWZmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZmM3MjczLXN5bmPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJmYzcyNzMtc3luYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnR4LWRlYWRsaW5l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVhZGxpbmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0eC1zdGF0cy10aW1lb3V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtc3RhdHMtdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGNsZWFyLXB0LW1hcOKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItY2xlYXItcHQtbWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcaGFuZGxlLXN5bmPigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLWhhbmRsZS1zeW5jIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tbnB0LXN0b3DigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLW9uLW5wdC1zdG9wIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmVxdWVzdC1wdC1tYXDigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLXJlcXVlc3QtcHQtbWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcc2V0LWFjdGl2ZeKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItc2V0LWFjdGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEpQRUdEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5odG1sI0dzdFJ0cEpQRUdEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBKUEVHUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sI0dzdFJ0cEpQRUdQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxxdWFsaXR54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sI0dzdFJ0cEpQRUdQYXktLXF1YWxpdHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR5cGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwjR3N0UnRwSlBFR1BheS0tdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEtsdkRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbCNHc3RSdHBLbHZEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBLbHZQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuaHRtbCNHc3RSdHBLbHZQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwTDE2RGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5odG1sI0dzdFJ0cEwxNkRlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cEwxNlBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5odG1sI0dzdFJ0cEwxNlBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBMMjREZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lmh0bWwjR3N0UnRwTDI0RGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwTDI0UGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lmh0bWwjR3N0UnRwTDI0UGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cE1QMVNEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMXNkZXBheS5odG1sI0dzdFJ0cE1QMVNEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBNUDJURGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkuaHRtbCNHc3RSdHBNUDJURGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxza2lwLWZpcnN0LWJ5dGVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwjR3N0UnRwTVAyVERlcGF5LS1za2lwLWZpcnN0LWJ5dGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQTVAyVFBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkuaHRtbCNHc3RSVFBNUDJUUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cE1QNEFEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5odG1sI0dzdFJ0cE1QNEFEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBNUDRBUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5odG1sI0dzdFJ0cE1QNEFQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwTVA0R0RlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5Lmh0bWwjR3N0UnRwTVA0R0RlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cE1QNEdQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRncGF5Lmh0bWwjR3N0UnRwTVA0R1BheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBNUDRWRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkuaHRtbCNHc3RSdHBNUDRWRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwTVA0VlBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkuaHRtbCNHc3RSdHBNUDRWUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29uZmlnLWludGVydmFs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5odG1sI0dzdFJ0cE1QNFZQYXktLWNvbmZpZy1pbnRlcnZhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cE1QQURlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkuaHRtbCNHc3RSdHBNUEFEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBNUEFQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkuaHRtbCNHc3RSdHBNUEFQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwTVBBUm9idXN0RGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5odG1sI0dzdFJ0cE1QQVJvYnVzdERlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cE1QVkRlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuaHRtbCNHc3RSdHBNUFZEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBNUFZQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCNHc3RSVFBNUFZQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQTXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwjR3N0UlRQTXV4LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2VxbnVt4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwjR3N0UlRQTXV4LS1zZXFudW0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNlcW51bS1vZmZzZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCNHc3RSVFBNdXgtLXNlcW51bS1vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNzcmPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCNHc3RSVFBNdXgtLXNzcmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRpbWVzdGFtcC1vZmZzZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCNHc3RSVFBNdXgtLXRpbWVzdGFtcC1vZmZzZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBPcHVzRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbCNHc3RSVFBPcHVzRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwT1BVU1BheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkuaHRtbCNHc3RSdHBPUFVTUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFBjbWFEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5odG1sI0dzdFJ0cFBjbWFEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBQY21hUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5odG1sI0dzdFJ0cFBjbWFQYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwUGNtdURlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5Lmh0bWwjR3N0UnRwUGNtdURlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFBjbXVQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5Lmh0bWwjR3N0UnRwUGNtdVBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBQdERlbXV4IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcY2xlYXItcHQtbWFw4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LWNsZWFyLXB0LW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG5ldy1wYXlsb2FkLXR5cGXigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgtbmV3LXBheWxvYWQtdHlwZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHBheWxvYWQtdHlwZS1jaGFuZ2XigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgtcGF5bG9hZC10eXBlLWNoYW5nZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LXJlcXVlc3QtcHQtbWFwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwUUNFTFBEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFjZWxwZGVwYXkuaHRtbCNHc3RSdHBRQ0VMUERlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFFETTJEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5odG1sI0dzdFJ0cFFETTJEZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFBSdHhRdWV1ZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwjR3N0UlRQUnR4UXVldWUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtc2l6ZS1wYWNrZXRz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbCNHc3RSVFBSdHhRdWV1ZS0tbWF4LXNpemUtcGFja2V0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXNpemUtdGltZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwjR3N0UlRQUnR4UXVldWUtLW1heC1zaXplLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBSdHhSZWNlaXZlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5odG1sI0dzdFJ0cFJ0eFJlY2VpdmUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxudW0tcnR4LXJlcXVlc3Rz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5odG1sI0dzdFJ0cFJ0eFJlY2VpdmUtLW51bS1ydHgtcmVxdWVzdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG51bS1ydHgtcGFja2V0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCNHc3RSdHBSdHhSZWNlaXZlLS1udW0tcnR4LXBhY2tldHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG51bS1ydHgtYXNzb2MtcGFja2V0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCNHc3RSdHBSdHhSZWNlaXZlLS1udW0tcnR4LWFzc29jLXBhY2tldHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBheWxvYWQtdHlwZS1tYXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwjR3N0UnRwUnR4UmVjZWl2ZS0tcGF5bG9hZC10eXBlLW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFJ0eFNlbmQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1zaXplLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZC0tbWF4LXNpemUtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXNpemUtcGFja2V0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCNHc3RSdHBSdHhTZW5kLS1tYXgtc2l6ZS1wYWNrZXRzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxudW0tcnR4LXJlcXVlc3Rz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sI0dzdFJ0cFJ0eFNlbmQtLW51bS1ydHgtcmVxdWVzdHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG51bS1ydHgtcGFja2V0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCNHc3RSdHBSdHhTZW5kLS1udW0tcnR4LXBhY2tldHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBheWxvYWQtdHlwZS1tYXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZC0tcGF5bG9hZC10eXBlLW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3NyYy1tYXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZC0tc3NyYy1tYXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBTYmNEZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lmh0bWwjR3N0UnRwU2JjRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwU0JDUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lmh0bWwjR3N0UnRwU0JDUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWluLWZyYW1lc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY3BheS5odG1sI0dzdFJ0cFNCQ1BheS0tbWluLWZyYW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFNlc3Npb24iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhbmR3aWR0aOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1iYW5kd2lkdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGludGVybmFsLXNlc3Npb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0taW50ZXJuYWwtc2Vzc2lvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnVtLWFjdGl2ZS1zb3VyY2Vz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLW51bS1hY3RpdmUtc291cmNlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnVtLXNvdXJjZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tbnVtLXNvdXJjZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0Y3AtZnJhY3Rpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tcnRjcC1mcmFjdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2Rlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1zZGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydGNwLXJyLWJhbmR3aWR0aOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1ydGNwLXJyLWJhbmR3aWR0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnRjcC1ycy1iYW5kd2lkdGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tcnRjcC1ycy1iYW5kd2lkdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZS1waXBlbGluZS1jbG9ja+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS11c2UtcGlwZWxpbmUtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0Y3AtbWluLWludGVydmFs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLXJ0Y3AtbWluLWludGVydmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcm9iYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tcHJvYmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdGF0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1zdGF0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccnRwLXByb2ZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tcnRwLXByb2ZpbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG50cC10aW1lLXNvdXJjZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1udHAtdGltZS1zb3VyY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1kcm9wb3V0LXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tbWF4LWRyb3BvdXQtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LW1pc29yZGVyLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tbWF4LW1pc29yZGVyLXRpbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJ0Y3Atc3luYy1zZW5kLXRpbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tcnRjcC1zeW5jLXNlbmQtdGltZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGNsZWFyLXB0LW1hcOKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1jbGVhci1wdC1tYXAiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxvbi1ieWUtc3NyY+KAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1vbi1ieWUtc3NyYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLWJ5ZS10aW1lb3V04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLWJ5ZS10aW1lb3V0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tbmV3LXNzcmPigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tbmV3LXNzcmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxvbi1zZW5kZXItdGltZW91dOKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1vbi1zZW5kZXItdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLXNzcmMtYWN0aXZl4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLXNzcmMtYWN0aXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tc3NyYy1jb2xsaXNpb27igJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc3NyYy1jb2xsaXNpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxvbi1zc3JjLXNkZXPigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc3NyYy1zZGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tc3NyYy12YWxpZGF0ZWTigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc3NyYy12YWxpZGF0ZWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxvbi10aW1lb3V04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxyZXF1ZXN0LXB0LW1hcOKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1yZXF1ZXN0LXB0LW1hcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG9uLW5ldy1zZW5kZXItc3NyY+KAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1vbi1uZXctc2VuZGVyLXNzcmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxvbi1zZW5kZXItc3NyYy1hY3RpdmXigJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc2VuZGVyLXNzcmMtYWN0aXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UlRQU2lyZW5EZXBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkuaHRtbCNHc3RSVFBTaXJlbkRlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJUUFNpcmVuUGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkuaHRtbCNHc3RSVFBTaXJlblBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBTUEVFWERlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5odG1sI0dzdFJ0cFNQRUVYRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwU1BFRVhQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sI0dzdFJ0cFNQRUVYUGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFNzcmNEZW11eCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxjbGVhci1zc3Jj4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eC1jbGVhci1zc3JjIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcbmV3LXNzcmMtcGFk4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eC1uZXctc3NyYy1wYWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxyZW1vdmVkLXNzcmMtcGFk4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eC1yZW1vdmVkLXNzcmMtcGFkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwU3RyZWFtRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5odG1sI0dzdFJ0cFN0cmVhbURlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFN0cmVhbVBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5odG1sI0dzdFJ0cFN0cmVhbVBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSdHBTVjNWRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdjN2ZGVwYXkuaHRtbCNHc3RSdHBTVjNWRGVwYXktc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwVGhlb3JhRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5odG1sI0dzdFJ0cFRoZW9yYURlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFRoZW9yYVBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sI0dzdFJ0cFRoZW9yYVBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sI0dzdFJ0cFRoZW9yYVBheS0tY29uZmlnLWludGVydmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwVm9yYmlzRGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5odG1sI0dzdFJ0cFZvcmJpc0RlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFZvcmJpc1BheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sI0dzdFJ0cFZvcmJpc1BheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sI0dzdFJ0cFZvcmJpc1BheS0tY29uZmlnLWludGVydmFsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwVlA4RGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5odG1sI0dzdFJ0cFZQOERlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFZQOFBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sI0dzdFJ0cFZQOFBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBpY3R1cmUtaWQtbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sI0dzdFJ0cFZQOFBheS0tcGljdHVyZS1pZC1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwVlA5RGVwYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5odG1sI0dzdFJ0cFZQOURlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFZQOVBheSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sI0dzdFJ0cFZQOVBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBpY3R1cmUtaWQtbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sI0dzdFJ0cFZQOVBheS0tcGljdHVyZS1pZC1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0UnRwVlJhd0RlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5Lmh0bWwjR3N0UnRwVlJhd0RlcGF5LXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFZSYXdQYXkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5Lmh0bWwjR3N0UnRwVlJhd1BheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNodW5rcy1wZXItZnJhbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5Lmh0bWwjR3N0UnRwVlJhd1BheS0tY2h1bmtzLXBlci1mcmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFJ0cFhRVERlcGF5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkuaHRtbCNHc3RSdHBYUVREZXBheS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RSVFNQU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZWJ1Z+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1kZWJ1ZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByb3RvY29sc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1wcm90b2NvbHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJldHJ54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXJldHJ5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lb3V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbGF0ZW5jeSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGNwLXRpbWVvdXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdGNwLXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbm5lY3Rpb24tc3BlZWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tY29ubmVjdGlvbi1zcGVlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbmF0LW1ldGhvZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1uYXQtbWV0aG9kIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkby1ydGNw4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLWRvLXJ0Y3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByb3h54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXByb3h5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxydHAtYmxvY2tzaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXJ0cC1ibG9ja3NpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZXItaWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdXNlci1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXNlci1wd+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS11c2VyLXB3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1idWZmZXItbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccG9ydC1yYW5nZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1wb3J0LXJhbmdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1ZHAtYnVmZmVyLXNpemXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdWRwLWJ1ZmZlci1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaG9ydC1oZWFkZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tc2hvcnQtaGVhZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkby1ydHNwLWtlZXAtYWxpdmXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tZG8tcnRzcC1rZWVwLWFsaXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkcm9wLW9uLWxhdGVuY3nigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tZHJvcC1vbi1sYXRlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcm9iYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tcHJvYmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1ZHAtcmVjb25uZWN04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXVkcC1yZWNvbm5lY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByb3h5LWlk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXByb3h5LWlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcm94eS1wd+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1wcm94eS1wdyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbXVsdGljYXN0LWlmYWNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLW11bHRpY2FzdC1pZmFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbnRwLXN5bmPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbnRwLXN5bmMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZS1waXBlbGluZS1jbG9ja+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS11c2UtcGlwZWxpbmUtY2xvY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNkZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tc2RlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGxzLWRhdGFiYXNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXRscy1kYXRhYmFzZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGxzLXZhbGlkYXRpb24tZmxhZ3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdGxzLXZhbGlkYXRpb24tZmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRvLXJldHJhbnNtaXNzaW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLWRvLXJldHJhbnNtaXNzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0bHMtaW50ZXJhY3Rpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdGxzLWludGVyYWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxudHAtdGltZS1zb3VyY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbnRwLXRpbWUtc291cmNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2VyLWFnZW504oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXVzZXItYWdlbnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1ydGNwLXJ0cC10aW1lLWRpZmbigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmZjNzI3My1zeW5j4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXJmYzcyNzMtc3luYyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGhhbmRsZS1yZXF1ZXN04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLWhhbmRsZS1yZXF1ZXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCcb24tc2Rw4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLW9uLXNkcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHNlbGVjdC1zdHJlYW3igJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtc2VsZWN0LXN0cmVhbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnG5ldy1tYW5hZ2Vy4oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLW5ldy1tYW5hZ2VyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic2lnbmFsIiBuYW1lPSJUaGUg4oCccmVxdWVzdC1ydGNwLWtleeKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy1yZXF1ZXN0LXJ0Y3Ata2V5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U2JjUGFyc2UiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sI0dzdFNiY1BhcnNlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFNjYWxldGVtcG8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwjR3N0U2NhbGV0ZW1wby1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG92ZXJsYXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwjR3N0U2NhbGV0ZW1wby0tb3ZlcmxhcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbCNHc3RTY2FsZXRlbXBvLS1yYXRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzZWFyY2jigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwjR3N0U2NhbGV0ZW1wby0tc2VhcmNoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdHJpZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwjR3N0U2NhbGV0ZW1wby0tc3RyaWRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U2hhZ2FkZWxpY1RWIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2Lmh0bWwjR3N0U2hhZ2FkZWxpY1RWLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFNoYXBlV2lwZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sI0dzdFNoYXBlV2lwZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJvcmRlcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sI0dzdFNoYXBlV2lwZS0tYm9yZGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3NpdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sI0dzdFNoYXBlV2lwZS0tcG9zaXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTaG91dDJzZW5kIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXNjcmlwdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS1kZXNjcmlwdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZ2VucmXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tZ2VucmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGlw4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtLWlwIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb3VudOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS1tb3VudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGFzc3dvcmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tcGFzc3dvcmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tcG9ydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJvdG9jb2zigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tcHJvdG9jb2wiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0cmVhbW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tc3RyZWFtbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXJs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtLXVybCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXNlcm5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tdXNlcm5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHB1YmxpY+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS1wdWJsaWMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzaWduYWwiIG5hbWU9IlRoZSDigJxjb25uZWN0aW9uLXByb2JsZW3igJ0gc2lnbmFsIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtY29ubmVjdGlvbi1wcm9ibGVtIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U01QVEVBbHBoYSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuaHRtbCNHc3RTTVBURUFscGhhLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYm9yZGVy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sI0dzdFNNUFRFQWxwaGEtLWJvcmRlciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGVwdGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwjR3N0U01QVEVBbHBoYS0tZGVwdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvc2l0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sI0dzdFNNUFRFQWxwaGEtLXBvc2l0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0eXBl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sI0dzdFNNUFRFQWxwaGEtLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGludmVydOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuaHRtbCNHc3RTTVBURUFscGhhLS1pbnZlcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTTVBURSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlLmh0bWwjR3N0U01QVEUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxib3JkZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sI0dzdFNNUFRFLS1ib3JkZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRlcHRo4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCNHc3RTTVBURS0tZGVwdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR5cGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sI0dzdFNNUFRFLS10eXBlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkdXJhdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlLmh0bWwjR3N0U01QVEUtLWR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpbnZlcnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sI0dzdFNNUFRFLS1pbnZlcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RTb3VwSHR0cENsaWVudFNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhdXRvbWF0aWMtcmVkaXJlY3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLWF1dG9tYXRpYy1yZWRpcmVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29va2llc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sI0dzdFNvdXBIdHRwQ2xpZW50U2luay0tY29va2llcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLWxvY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwcm94eeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sI0dzdFNvdXBIdHRwQ2xpZW50U2luay0tcHJveHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByb3h5LWlk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1wcm94eS1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJveHktcHfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLXByb3h5LXB3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzZXNzaW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1zZXNzaW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2VyLWFnZW504oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS11c2VyLWFnZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2VyLWlk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS11c2VyLWlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx1c2VyLXB34oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS11c2VyLXB3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxodHRwLWxvZy1sZXZlbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sI0dzdFNvdXBIdHRwQ2xpZW50U2luay0taHR0cC1sb2ctbGV2ZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJldHJpZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLXJldHJpZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJldHJ5LWRlbGF54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1yZXRyeS1kZWxheSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFNvdXBIVFRQU3JjIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGF1dG9tYXRpYy1yZWRpcmVjdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLWF1dG9tYXRpYy1yZWRpcmVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29va2llc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLWNvb2tpZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGlyYWRpby1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0taXJhZGlvLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tbG9jYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHByb3h54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tcHJveHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZXItYWdlbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS11c2VyLWFnZW50Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpcy1saXZl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0taXMtbGl2ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJveHktaWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1wcm94eS1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccHJveHktcHfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1wcm94eS1wdyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXNlci1pZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXVzZXItaWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZXItcHfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS11c2VyLXB3Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxleHRyYS1oZWFkZXJz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tZXh0cmEtaGVhZGVycyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGltZW91dOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXRpbWVvdXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbXByZXNz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tY29tcHJlc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGh0dHAtbG9nLWxldmVs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0taHR0cC1sb2ctbGV2ZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGtlZXAtYWxpdmXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1rZWVwLWFsaXZlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXRyaWVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tcmV0cmllcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3NsLWNhLWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1zc2wtY2EtZmlsZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3NsLXN0cmljdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXNzbC1zdHJpY3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNzbC11c2Utc3lzdGVtLWNhLWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1zc2wtdXNlLXN5c3RlbS1jYS1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0bHMtZGF0YWJhc2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS10bHMtZGF0YWJhc2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1ldGhvZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLW1ldGhvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGxzLWludGVyYWN0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tdGxzLWludGVyYWN0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3BlY3RydW0iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYmFuZHPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1iYW5kcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW50ZXJ2YWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1pbnRlcnZhbCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGhyZXNob2xk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCNHc3RTcGVjdHJ1bS0tdGhyZXNob2xkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtZXNzYWdlLW1hZ25pdHVkZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tLW1lc3NhZ2UtbWFnbml0dWRlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtZXNzYWdlLXBoYXNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCNHc3RTcGVjdHJ1bS0tbWVzc2FnZS1waGFzZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccG9zdC1tZXNzYWdlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tLXBvc3QtbWVzc2FnZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG11bHRpLWNoYW5uZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1tdWx0aS1jaGFubmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3BlZXhEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5odG1sI0dzdFNwZWV4RGVjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZW5o4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuaHRtbCNHc3RTcGVleERlYy0tZW5oIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3BlZXhFbmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWJy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tYWJyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiaXRyYXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tYml0cmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29tcGxleGl0eeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwjR3N0U3BlZXhFbmMtLWNvbXBsZXhpdHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGR0eOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwjR3N0U3BlZXhFbmMtLWR0eCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGFzdC1tZXNzYWdl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tbGFzdC1tZXNzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxuZnJhbWVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tbmZyYW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccXVhbGl0eeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwjR3N0U3BlZXhFbmMtLXF1YWxpdHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHZhZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwjR3N0U3BlZXhFbmMtLXZhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdmJy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tdmJyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFNwbGl0RmlsZVNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0ZmlsZXNyYy5odG1sI0dzdFNwbGl0RmlsZVNyYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwjR3N0U3BsaXRGaWxlU3JjLS1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFNwbGl0TXV4U2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sI0dzdFNwbGl0TXV4U2luay1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXNpemUtYnl0ZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstLW1heC1zaXplLWJ5dGVzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1tYXgtc2l6ZS10aW1lIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtdXgtb3ZlcmhlYWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstLW11eC1vdmVyaGVhZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbXV4ZXLigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstLW11eGVyIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzaW5r4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1zaW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtZmlsZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstLW1heC1maWxlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2VuZC1rZXlmcmFtZS1yZXF1ZXN0c+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sI0dzdFNwbGl0TXV4U2luay0tc2VuZC1rZXlmcmFtZS1yZXF1ZXN0cyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGZvcm1hdC1sb2NhdGlvbuKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstZm9ybWF0LWxvY2F0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0U3BsaXRNdXhTcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sI0dzdFNwbGl0TXV4U3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sI0dzdFNwbGl0TXV4U3JjLS1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnGZvcm1hdC1sb2NhdGlvbuKAnSBzaWduYWwiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sI0dzdFNwbGl0TXV4U3JjLWZvcm1hdC1sb2NhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFN0cmVha1RWIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCNHc3RTdHJlYWtUVi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZlZWRiYWNr4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCNHc3RTdHJlYWtUVi0tZmVlZGJhY2siLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RUYWdJbmplY3QiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbCNHc3RUYWdJbmplY3Qtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0YWdz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGFnaW5qZWN0Lmh0bWwjR3N0VGFnSW5qZWN0LS10YWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VURQU2luayIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCNHc3RVRFBTaW5rLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaG9zdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCNHc3RVRFBTaW5rLS1ob3N0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3J04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sI0dzdFVEUFNpbmstLXBvcnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RVRFBTcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjYXBz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1jYXBzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtdWx0aWNhc3QtZ3JvdXDigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLW11bHRpY2FzdC1ncm91cCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccG9ydOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tcG9ydCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXJp4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS11cmkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJ1ZmZlci1zaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1idWZmZXItc2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGltZW91dOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tdGltZW91dCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2tpcC1maXJzdC1ieXRlc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tc2tpcC1maXJzdC1ieXRlcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXV0by1tdWx0aWNhc3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLWF1dG8tbXVsdGljYXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtdWx0aWNhc3QtaWZhY2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLW11bHRpY2FzdC1pZmFjZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmV1c2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLXJldXNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjbG9zZS1zb2NrZXTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLWNsb3NlLXNvY2tldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc29ja2V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1zb2NrZXQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVzZWQtc29ja2V04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS11c2VkLXNvY2tldCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYWRkcmVzc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tYWRkcmVzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbG9vcOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tbG9vcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmV0cmlldmUtc2VuZGVyLWFkZHJlc3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLXJldHJpZXZlLXNlbmRlci1hZGRyZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VjRsMlJhZGlvIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmh0bWwjR3N0VjRsMlJhZGlvLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmh0bWwjR3N0VjRsMlJhZGlvLS1kZXZpY2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZyZXF1ZW5jeeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5odG1sI0dzdFY0bDJSYWRpby0tZnJlcXVlbmN5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VjRsMlNpbmsiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tZGV2aWNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2UtZmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1kZXZpY2UtZmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tZGV2aWNlLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZsYWdz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tZmxhZ3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG92ZXJsYXktaGVpZ2h04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tb3ZlcmxheS1oZWlnaHQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG92ZXJsYXktbGVmdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLW92ZXJsYXktbGVmdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcb3ZlcmxheS10b3DigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1vdmVybGF5LXRvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcb3ZlcmxheS13aWR0aOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLW92ZXJsYXktd2lkdGgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJyaWdodG5lc3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1icmlnaHRuZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjb250cmFzdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWNvbnRyYXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxodWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1odWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNhdHVyYXRpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1zYXR1cmF0aW9uIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjcm9wLWhlaWdodOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWNyb3AtaGVpZ2h0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxjcm9wLWxlZnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1jcm9wLWxlZnQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNyb3AtdG9w4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tY3JvcC10b3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNyb3Atd2lkdGjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1jcm9wLXdpZHRoIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpby1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0taW8tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbm9ybeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLW5vcm0iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGV4dHJhLWNvbnRyb2xz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tZXh0cmEtY29udHJvbHMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZvcmNlLWFzcGVjdC1yYXRpb+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWZvcmNlLWFzcGVjdC1yYXRpbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGl4ZWwtYXNwZWN0LXJhdGlv4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tcGl4ZWwtYXNwZWN0LXJhdGlvIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VjRsMlNyYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWRldmljZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZGV2aWNlLW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0tZGV2aWNlLW5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGZsYWdz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWZsYWdzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZXZpY2UtZmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0tZGV2aWNlLWZkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxicmlnaHRuZXNz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWJyaWdodG5lc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvbnRyYXN04oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWNvbnRyYXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxodWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0taHVlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzYXR1cmF0aW9u4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLXNhdHVyYXRpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG5vcm3igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0tbm9ybSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaW8tbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjLS1pby1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxleHRyYS1jb250cm9sc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjLS1leHRyYS1jb250cm9scyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZm9yY2UtYXNwZWN0LXJhdGlv4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWZvcmNlLWFzcGVjdC1yYXRpbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccGl4ZWwtYXNwZWN0LXJhdGlv4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLXBpeGVsLWFzcGVjdC1yYXRpbyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InNpZ25hbCIgbmFtZT0iVGhlIOKAnHByZXBhcmUtZm9ybWF04oCdIHNpZ25hbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjLXByZXBhcmUtZm9ybWF0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VmVydGlnb1RWIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwjR3N0VmVydGlnb1RWLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc3BlZWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuaHRtbCNHc3RWZXJ0aWdvVFYtLXNwZWVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx6b29tLXNwZWVk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwjR3N0VmVydGlnb1RWLS16b29tLXNwZWVkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0VmlkZW9CYWxhbmNlIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwjR3N0VmlkZW9CYWxhbmNlLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYnJpZ2h0bmVzc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sI0dzdFZpZGVvQmFsYW5jZS0tYnJpZ2h0bmVzcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY29udHJhc3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuaHRtbCNHc3RWaWRlb0JhbGFuY2UtLWNvbnRyYXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxodWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuaHRtbCNHc3RWaWRlb0JhbGFuY2UtLWh1ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2F0dXJhdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sI0dzdFZpZGVvQmFsYW5jZS0tc2F0dXJhdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFZpZGVvQm94IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNHc3RWaWRlb0JveC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFZpZGVvQm94RmlsbCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3hGaWxsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxhbHBoYeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLWFscGhhIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxib3JkZXItYWxwaGHigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI0dzdFZpZGVvQm94LS1ib3JkZXItYWxwaGEiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJvdHRvbeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLWJvdHRvbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmlsbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLWZpbGwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxlZnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI0dzdFZpZGVvQm94LS1sZWZ0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyaWdodOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLXJpZ2h0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0b3DigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI0dzdFZpZGVvQm94LS10b3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGF1dG9jcm9w4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNHc3RWaWRlb0JveC0tYXV0b2Nyb3AiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWaWRlb0Nyb3AiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3Atc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxib3R0b23igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3AtLWJvdHRvbSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGVmdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sI0dzdFZpZGVvQ3JvcC0tbGVmdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmlnaHTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3AtLXJpZ2h0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0b3DigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3AtLXRvcCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFZpZGVvRmxpcCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dzdFZpZGVvRmxpcC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFZpZGVvRmxpcE1ldGhvZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dzdFZpZGVvRmxpcE1ldGhvZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWV0aG9k4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwjR3N0VmlkZW9GbGlwLS1tZXRob2QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWaWRlb01lZGlhbiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwjR3N0VmlkZW9NZWRpYW4tc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iZW51bSIgbmFtZT0iZW51bSBHc3RWaWRlb01lZGlhblNpemUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sI0dzdFZpZGVvTWVkaWFuU2l6ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcZmlsdGVyc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwjR3N0VmlkZW9NZWRpYW4tLWZpbHRlcnNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGx1bS1vbmx54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4uaHRtbCNHc3RWaWRlb01lZGlhbi0tbHVtLW9ubHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWaWRlb01peGVyMiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCNHc3RWaWRlb01peGVyMi1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJlbnVtIiBuYW1lPSJlbnVtIEdzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCNHc3RWaWRlb01peGVyMkJhY2tncm91bmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJhY2tncm91bmTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwjR3N0VmlkZW9NaXhlcjItLWJhY2tncm91bmQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWUDhEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbCNHc3RWUDhEZWMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZWJsb2NraW5nLWxldmVs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLmh0bWwjR3N0VlA4RGVjLS1kZWJsb2NraW5nLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxub2lzZS1sZXZlbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sI0dzdFZQOERlYy0tbm9pc2UtbGV2ZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvc3QtcHJvY2Vzc2luZ+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sI0dzdFZQOERlYy0tcG9zdC1wcm9jZXNzaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3N0LXByb2Nlc3NpbmctZmxhZ3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbCNHc3RWUDhEZWMtLXBvc3QtcHJvY2Vzc2luZy1mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGhyZWFkc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sI0dzdFZQOERlYy0tdGhyZWFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFZQOEVuYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFybnItbWF4ZnJhbWVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1hcm5yLW1heGZyYW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXJuci1zdHJlbmd0aOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tYXJuci1zdHJlbmd0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXJuci10eXBl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1hcm5yLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGF1dG8tYWx0LXJlZuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tYXV0by1hbHQtcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItaW5pdGlhbC1zaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1idWZmZXItaW5pdGlhbC1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItb3B0aW1hbC1zaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1idWZmZXItb3B0aW1hbC1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tYnVmZmVyLXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNwdS11c2Vk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1jcHUtdXNlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY3EtbGV2ZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWNxLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZWFkbGluZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tZGVhZGxpbmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWRyb3BmcmFtZS10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGVuZC11c2FnZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tZW5kLXVzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxlcnJvci1yZXNpbGllbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWVycm9yLXJlc2lsaWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbGFnLWluLWZyYW1lc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbGFnLWluLWZyYW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXF1YW50aXplcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbWF4LXF1YW50aXplciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWluLXF1YW50aXplcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbWluLXF1YW50aXplciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbXVsdGlwYXNzLWNhY2hlLWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLW11bHRpcGFzcy1jYWNoZS1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtdWx0aXBhc3MtbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbXVsdGlwYXNzLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG5vaXNlLXNlbnNpdGl2aXR54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1ub2lzZS1zZW5zaXRpdml0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzaXplLWFsbG93ZWTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXJlc2l6ZS1hbGxvd2VkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxyZXNpemUtZG93bi10aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXJlc2l6ZS1kb3duLXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzaXplLXVwLXRocmVzaG9sZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tcmVzaXplLXVwLXRocmVzaG9sZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2hhcnBuZXNz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1zaGFycG5lc3MiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0YXRpYy10aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXN0YXRpYy10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRhcmdldC1iaXRyYXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10YXJnZXQtYml0cmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGhyZWFkc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGhyZWFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdG9rZW4tcGFydGl0aW9uc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdG9rZW4tcGFydGl0aW9ucyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHVuaW5n4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10dW5pbmciLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGhvcml6b250YWwtc2NhbGluZy1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1ob3Jpem9udGFsLXNjYWxpbmctbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCca2V5ZnJhbWUtbWF4LWRpc3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWtleWZyYW1lLW1heC1kaXN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxrZXlmcmFtZS1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1rZXlmcmFtZS1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtYXgtaW50cmEtYml0cmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbWF4LWludHJhLWJpdHJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG92ZXJzaG9vdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tb3ZlcnNob290Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktbGF5ZXItaWQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LXBlcmlvZGljaXR54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1wZXJpb2RpY2l0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3LigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LXJhdGUtZGVjaW1hdG9yIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS10YXJnZXQtYml0cmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR3b3Bhc3MtdmJyLWJpYXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXR3b3Bhc3MtdmJyLWJpYXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR3b3Bhc3MtdmJyLW1heHNlY3Rpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXR3b3Bhc3MtdmJyLW1heHNlY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHR3b3Bhc3MtdmJyLW1pbnNlY3Rpb27igJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXR3b3Bhc3MtdmJyLW1pbnNlY3Rpb24iLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHVuZGVyc2hvb3TigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXVuZGVyc2hvb3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHZlcnRpY2FsLXNjYWxpbmctbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdmVydGljYWwtc2NhbGluZy1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0aW1lYmFzZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGltZWJhc2UiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RWUDlEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCNHc3RWUDlEZWMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZWJsb2NraW5nLWxldmVs4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwjR3N0VlA5RGVjLS1kZWJsb2NraW5nLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxub2lzZS1sZXZlbOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5odG1sI0dzdFZQOURlYy0tbm9pc2UtbGV2ZWwiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHBvc3QtcHJvY2Vzc2luZ+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5odG1sI0dzdFZQOURlYy0tcG9zdC1wcm9jZXNzaW5nIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxwb3N0LXByb2Nlc3NpbmctZmxhZ3PigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCNHc3RWUDlEZWMtLXBvc3QtcHJvY2Vzc2luZy1mbGFncyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGhyZWFkc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5odG1sI0dzdFZQOURlYy0tdGhyZWFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFZQOUVuYyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGFybnItbWF4ZnJhbWVz4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1hcm5yLW1heGZyYW1lcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXJuci1zdHJlbmd0aOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tYXJuci1zdHJlbmd0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcYXJuci10eXBl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1hcm5yLXR5cGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGF1dG8tYWx0LXJlZuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tYXV0by1hbHQtcmVmIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItaW5pdGlhbC1zaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1idWZmZXItaW5pdGlhbC1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItb3B0aW1hbC1zaXpl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1idWZmZXItb3B0aW1hbC1zaXplIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxidWZmZXItc2l6ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tYnVmZmVyLXNpemUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNwdS11c2Vk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1jcHUtdXNlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcY3EtbGV2ZWzigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWNxLWxldmVsIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkZWFkbGluZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tZGVhZGxpbmUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWRyb3BmcmFtZS10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGVuZC11c2FnZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tZW5kLXVzYWdlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxlcnJvci1yZXNpbGllbnTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWVycm9yLXJlc2lsaWVudCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcaG9yaXpvbnRhbC1zY2FsaW5nLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWhvcml6b250YWwtc2NhbGluZy1tb2RlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxrZXlmcmFtZS1tYXgtZGlzdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0ta2V5ZnJhbWUtbWF4LWRpc3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGtleWZyYW1lLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWtleWZyYW1lLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGxhZy1pbi1mcmFtZXPigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWxhZy1pbi1mcmFtZXMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1heC1pbnRyYS1iaXRyYXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1tYXgtaW50cmEtYml0cmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWF4LXF1YW50aXplcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tbWF4LXF1YW50aXplciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbWluLXF1YW50aXplcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tbWluLXF1YW50aXplciIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcbXVsdGlwYXNzLWNhY2hlLWZpbGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLW11bHRpcGFzcy1jYWNoZS1maWxlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxtdWx0aXBhc3MtbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tbXVsdGlwYXNzLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG5vaXNlLXNlbnNpdGl2aXR54oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1ub2lzZS1zZW5zaXRpdml0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcb3ZlcnNob2904oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1vdmVyc2hvb3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2l6ZS1hbGxvd2Vk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1yZXNpemUtYWxsb3dlZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVzaXplLWRvd24tdGhyZXNob2xk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1yZXNpemUtZG93bi10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHJlc2l6ZS11cC10aHJlc2hvbGTigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXJlc2l6ZS11cC10aHJlc2hvbGQiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHNoYXJwbmVzc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tc2hhcnBuZXNzIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdGF0aWMtdGhyZXNob2xk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1zdGF0aWMtdGhyZXNob2xkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0YXJnZXQtYml0cmF0ZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGFyZ2V0LWJpdHJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlk4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktbnVtYmVyLWxheWVyc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktbnVtYmVyLWxheWVycyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LXBlcmlvZGljaXR5Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS1yYXRlLWRlY2ltYXRvcuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3IiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS10YXJnZXQtYml0cmF0ZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGhyZWFkc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGhyZWFkcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdGltZWJhc2XigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXRpbWViYXNlIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0b2tlbi1wYXJ0aXRpb25z4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS10b2tlbi1wYXJ0aXRpb25zIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx0dW5pbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXR1bmluZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHdvcGFzcy12YnItYmlhc+KAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdHdvcGFzcy12YnItYmlhcyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHdvcGFzcy12YnItbWF4c2VjdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdHdvcGFzcy12YnItbWF4c2VjdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdHdvcGFzcy12YnItbWluc2VjdGlvbuKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdHdvcGFzcy12YnItbWluc2VjdGlvbiIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdW5kZXJzaG9vdOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdW5kZXJzaG9vdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdmVydGljYWwtc2NhbGluZy1tb2Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS12ZXJ0aWNhbC1zY2FsaW5nLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RXYXJwVFYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXJwdHYuaHRtbCNHc3RXYXJwVFYtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0V2F2ZUZvcm1TaW5rIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZWZvcm1zaW5rLmh0bWwjR3N0V2F2ZUZvcm1TaW5rIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0ic3RydWN0IiBuYW1lPSJzdHJ1Y3QgR3N0V2F2RW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmh0bWwjR3N0V2F2RW5jLXN0cnVjdCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFdhdnBhY2tEZWMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwjR3N0V2F2cGFja0RlYy1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RXYXZwYWNrRW5jIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sI0dzdFdhdnBhY2tFbmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxiaXRyYXRl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sI0dzdFdhdnBhY2tFbmMtLWJpdHJhdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGJpdHMtcGVyLXNhbXBsZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCNHc3RXYXZwYWNrRW5jLS1iaXRzLXBlci1zYW1wbGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGNvcnJlY3Rpb24tbW9kZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCNHc3RXYXZwYWNrRW5jLS1jb3JyZWN0aW9uLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGV4dHJhLXByb2Nlc3NpbmfigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwjR3N0V2F2cGFja0VuYy0tZXh0cmEtcHJvY2Vzc2luZyIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcam9pbnQtc3RlcmVvLW1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwjR3N0V2F2cGFja0VuYy0tam9pbnQtc3RlcmVvLW1vZGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1kNeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCNHc3RXYXZwYWNrRW5jLS1tZDUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwjR3N0V2F2cGFja0VuYy0tbW9kZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFdhdnBhY2tQYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5odG1sI0dzdFdhdnBhY2tQYXJzZS1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RXYXZQYXJzZSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmh0bWwjR3N0V2F2UGFyc2Utc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxpZ25vcmUtbGVuZ3Ro4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UuaHRtbCNHc3RXYXZQYXJzZS0taWdub3JlLWxlbmd0aCIvPgotICAgIDxrZXl3b3JkIHR5cGU9InN0cnVjdCIgbmFtZT0ic3RydWN0IEdzdFdlYk1NdXgiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lmh0bWwjR3N0V2ViTU11eC1zdHJ1Y3QiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RYSW1hZ2VTcmMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxkaXNwbGF5LW5hbWXigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLWRpc3BsYXktbmFtZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcc2hvdy1wb2ludGVy4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwjR3N0WEltYWdlU3JjLS1zaG93LXBvaW50ZXIiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGVuZHjigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLWVuZHgiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnGVuZHnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLWVuZHkiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHN0YXJ0eOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sI0dzdFhJbWFnZVNyYy0tc3RhcnR4Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJxzdGFydHnigJ0gcHJvcGVydHkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXN0YXJ0eSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCcdXNlLWRhbWFnZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sI0dzdFhJbWFnZVNyYy0tdXNlLWRhbWFnZSIvPgotICAgIDxrZXl3b3JkIHR5cGU9InByb3BlcnR5IiBuYW1lPSJUaGUg4oCccmVtb3Rl4oCdIHByb3BlcnR5IiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwjR3N0WEltYWdlU3JjLS1yZW1vdGUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJwcm9wZXJ0eSIgbmFtZT0iVGhlIOKAnHhpZOKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sI0dzdFhJbWFnZVNyYy0teGlkIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0icHJvcGVydHkiIG5hbWU9IlRoZSDigJx4bmFtZeKAnSBwcm9wZXJ0eSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sI0dzdFhJbWFnZVNyYy0teG5hbWUiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJzdHJ1Y3QiIG5hbWU9InN0cnVjdCBHc3RZNG1FbmNvZGUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaHRtbCNHc3RZNG1FbmNvZGUtc3RydWN0Ii8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkFMUEhBX01FVEhPRF9TRVQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0FMUEhBLU1FVEhPRC1TRVQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJBTFBIQV9NRVRIT0RfR1JFRU4iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0FMUEhBLU1FVEhPRC1HUkVFTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkFMUEhBX01FVEhPRF9CTFVFIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNBTFBIQS1NRVRIT0QtQkxVRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkFMUEhBX01FVEhPRF9DVVNUT00iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0FMUEhBLU1FVEhPRC1DVVNUT006Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJNRVRIT0RfUFNZQ0hPQUNPVVNUSUMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLmh0bWwjTUVUSE9ELVBTWUNIT0FDT1VTVElDOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iTUVUSE9EX1NJTVBMRSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCNNRVRIT0QtU0lNUExFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX0FMTCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR1NULURFSU5URVJMQUNFLUFMTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUlOVEVSTEFDRV9URiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR1NULURFSU5URVJMQUNFLVRGOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX0JGIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtQkY6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVJTlRFUkxBQ0VfRklFTERTX0FVVE8iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1GSUVMRFMtQVVUTzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX05PTkUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1MT0NLSU5HLU5PTkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19BVVRPIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtTE9DS0lORy1BVVRPOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX0xPQ0tJTkdfQUNUSVZFIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtTE9DS0lORy1BQ1RJVkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19QQVNTSVZFIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtTE9DS0lORy1QQVNTSVZFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX1RPTVNNT0NPTVAiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1UT01TTU9DT01QOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX0dSRUVEWV9IIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtR1JFRURZLUg6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVJTlRFUkxBQ0VfR1JFRURZX0wiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1HUkVFRFktTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUlOVEVSTEFDRV9WRklSIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtVkZJUjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUlOVEVSTEFDRV9MSU5FQVIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1MSU5FQVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVJTlRFUkxBQ0VfTElORUFSX0JMRU5EIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtTElORUFSLUJMRU5EOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX1NDQUxFUl9CT0IiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1TQ0FMRVItQk9COkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX1dFQVZFIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtV0VBVkU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfREVJTlRFUkxBQ0VfV0VBVkVfVEZGIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHU1QtREVJTlRFUkxBQ0UtV0VBVkUtVEZGOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX1dFQVZFX0JGRiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR1NULURFSU5URVJMQUNFLVdFQVZFLUJGRjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQVVUTyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR1NULURFSU5URVJMQUNFLUxBWU9VVC1BVVRPOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX0xBWU9VVF9URkYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1MQVlPVVQtVEZGOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX0RFSU5URVJMQUNFX0xBWU9VVF9CRkYiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dTVC1ERUlOVEVSTEFDRS1MQVlPVVQtQkZGOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX0JVRkZFUiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCNHU1QtTVVMVEktRklMRS1TSU5LLU5FWFQtQlVGRkVSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX0RJU0NPTlQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR1NULU1VTFRJLUZJTEUtU0lOSy1ORVhULURJU0NPTlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfS0VZX0ZSQU1FIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dTVC1NVUxUSS1GSUxFLVNJTkstTkVYVC1LRVktRlJBTUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfS0VZX1VOSVRfRVZFTlQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR1NULU1VTFRJLUZJTEUtU0lOSy1ORVhULUtFWS1VTklULUVWRU5UOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX01BWF9TSVpFIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dTVC1NVUxUSS1GSUxFLVNJTkstTkVYVC1NQVgtU0laRTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9NQVhfRFVSQVRJT04iIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR1NULU1VTFRJLUZJTEUtU0lOSy1ORVhULU1BWC1EVVJBVElPTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IlZJREVPX0JPWF9GSUxMX0JMQUNLIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNWSURFTy1CT1gtRklMTC1CTEFDSzpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IlZJREVPX0JPWF9GSUxMX0dSRUVOIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNWSURFTy1CT1gtRklMTC1HUkVFTjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IlZJREVPX0JPWF9GSUxMX0JMVUUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI1ZJREVPLUJPWC1GSUxMLUJMVUU6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJWSURFT19CT1hfRklMTF9SRUQiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI1ZJREVPLUJPWC1GSUxMLVJFRDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IlZJREVPX0JPWF9GSUxMX1lFTExPVyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjVklERU8tQk9YLUZJTEwtWUVMTE9XOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iVklERU9fQk9YX0ZJTExfV0hJVEUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI1ZJREVPLUJPWC1GSUxMLVdISVRFOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iVklERU9fQk9YX0ZJTExfTEFTVCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjVklERU8tQk9YLUZJTEwtTEFTVDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9WSURFT19GTElQX01FVEhPRF9JREVOVElUWSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dTVC1WSURFTy1GTElQLU1FVEhPRC1JREVOVElUWTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9WSURFT19GTElQX01FVEhPRF85MFIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaHRtbCNHU1QtVklERU8tRkxJUC1NRVRIT0QtOTBSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1ZJREVPX0ZMSVBfTUVUSE9EXzE4MCIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dTVC1WSURFTy1GTElQLU1FVEhPRC0xODA6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVklERU9fRkxJUF9NRVRIT0RfOTBMIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwjR1NULVZJREVPLUZMSVAtTUVUSE9ELTkwTDpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9WSURFT19GTElQX01FVEhPRF9IT1JJWiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dTVC1WSURFTy1GTElQLU1FVEhPRC1IT1JJWjpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IkdTVF9WSURFT19GTElQX01FVEhPRF9WRVJUIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwjR1NULVZJREVPLUZMSVAtTUVUSE9ELVZFUlQ6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVklERU9fRkxJUF9NRVRIT0RfVFJBTlMiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaHRtbCNHU1QtVklERU8tRkxJUC1NRVRIT0QtVFJBTlM6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVklERU9fRkxJUF9NRVRIT0RfT1RIRVIiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaHRtbCNHU1QtVklERU8tRkxJUC1NRVRIT0QtT1RIRVI6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJHU1RfVklERU9fRkxJUF9NRVRIT0RfQVVUTyIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dTVC1WSURFTy1GTElQLU1FVEhPRC1BVVRPOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1ZJREVPX01FRElBTl9TSVpFXzUiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sI0dTVC1WSURFTy1NRURJQU4tU0laRS01OkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iR1NUX1ZJREVPX01FRElBTl9TSVpFXzkiIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sI0dTVC1WSURFTy1NRURJQU4tU0laRS05OkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQ0hFQ0tFUiIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCNWSURFTy1NSVhFUjItQkFDS0dST1VORC1DSEVDS0VSOkNBUFMiLz4KLSAgICA8a2V5d29yZCB0eXBlPSJjb25zdGFudCIgbmFtZT0iVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQkxBQ0siIGxpbms9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwjVklERU8tTUlYRVIyLUJBQ0tHUk9VTkQtQkxBQ0s6Q0FQUyIvPgotICAgIDxrZXl3b3JkIHR5cGU9ImNvbnN0YW50IiBuYW1lPSJWSURFT19NSVhFUjJfQkFDS0dST1VORF9XSElURSIgbGluaz0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCNWSURFTy1NSVhFUjItQkFDS0dST1VORC1XSElURTpDQVBTIi8+Ci0gICAgPGtleXdvcmQgdHlwZT0iY29uc3RhbnQiIG5hbWU9IlZJREVPX01JWEVSMl9CQUNLR1JPVU5EX1RSQU5TUEFSRU5UIiBsaW5rPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5odG1sI1ZJREVPLU1JWEVSMi1CQUNLR1JPVU5ELVRSQU5TUEFSRU5UOkNBUFMiLz4KLSAgPC9mdW5jdGlvbnM+Ci08L2Jvb2s+CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxMmY3ZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT4zZ3BwbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYWNwYXJzZS5odG1sIiB0aXRsZT0iYWFjcGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC50b3Bfb2ZfcGFnZSI+PC9hPjNncHBtdXg8L3NwYW4+PC9oMj4KLTxwPjNncHBtdXgg4oCUIE11eGVyIGZvciAzR1BQICguM2dwKSBmaWxlczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRVE11eER0c01ldGhvZHM8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tZHRzLW1ldGhvZCIgdGl0bGU9IlRoZSDigJxkdHMtbWV0aG9k4oCdIHByb3BlcnR5Ij5kdHMtbWV0aG9kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1mYXN0c3RhcnQiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ04oCdIHByb3BlcnR5Ij5mYXN0c3RhcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tZmFzdHN0YXJ0LWZpbGUiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gcHJvcGVydHkiPmZhc3RzdGFydC1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1mcmFnbWVudC1kdXJhdGlvbiIgdGl0bGU9IlRoZSDigJxmcmFnbWVudC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSI+ZnJhZ21lbnQtZHVyYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tbW9vdi1yZWNvdmVyeS1maWxlIiB0aXRsZT0iVGhlIOKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnSBwcm9wZXJ0eSI+bW9vdi1yZWNvdmVyeS1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1tb3ZpZS10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5Ij5tb3ZpZS10aW1lc2NhbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLXByZXNlbnRhdGlvbi10aW1lIiB0aXRsZT0iVGhlIOKAnHByZXNlbnRhdGlvbi10aW1l4oCdIHByb3BlcnR5Ij5wcmVzZW50YXRpb24tdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tc3RyZWFtYWJsZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5Ij5zdHJlYW1hYmxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS10cmFrLXRpbWVzY2FsZSIgdGl0bGU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+dHJhay10aW1lc2NhbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLXJlc2VydmVkLWJ5dGVzLXBlci1zZWMiIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlY+KAnSBwcm9wZXJ0eSI+cmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLXJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyIgdGl0bGU9IlRoZSDigJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ0gcHJvcGVydHkiPnJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1tYXgtZHVyYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1yZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QiIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9k4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdDNHUFBNdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC1zdHJ1Y3QiIHRpdGxlPSJHc3QzR1BQTXV4Ij5Hc3QzR1BQTXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0M0dQUE11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdDNHUFBNdXggaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ij5Hc3RUYWdTZXR0ZXI8L2E+LCAgR3N0VGFnWG1wV3JpdGVyIGFuZCAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFByZXNldC5odG1sI0dzdFByZXNldC1zdHJ1Y3QiPkdzdFByZXNldDwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbWVyZ2VzIHN0cmVhbXMgKGF1ZGlvIGFuZCB2aWRlbykgaW50byAzR1BQICguM2dwKSBmaWxlcy48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGJhY2tncm91bmQgaW50ZW5kcyB0byBleHBsYWluIHdoeSB2YXJpb3VzIHNpbWlsYXIgbXV4ZXJzCi1hcmUgcHJlc2VudCBpbiB0aGlzIHBsdWdpbi48L3A+Ci08cD5UaGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvcmVzb3VyY2VzL3F0ZmlsZWZvcm1hdC5wZGYiIHRhcmdldD0iX3RvcCI+Ci1RdWlja1RpbWUgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbjwvYT4gc2VydmVkIGFzIGJhc2lzIGZvciB0aGUgTVA0IGZpbGUKLWZvcm1hdCBzcGVjaWZpY2F0aW9uIChtcDRtdXgpLCBhbmQgYXMgc3VjaCB0aGUgUXVpY2tUaW1lIGZpbGUgc3RydWN0dXJlIGlzCi1uZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBzby1jYWxsZWQgSVNPIEJhc2UgTWVkaWEgZmlsZSBmb3JtYXQgZGVmaW5lZCBpbgotSVNPIDE0NDk2LTEyIChleGNlcHQgZm9yIHNvbWUgbWVkaWEgc3BlY2lmaWMgcGFydHMpLgotSW4gdHVybiwgdGhlIGxhdHRlciBJU08gQmFzZSBNZWRpYSBmb3JtYXQgd2FzIGZ1cnRoZXIgc3BlY2lhbGl6ZWQgYXMgYQotTW90aW9uIEpQRUctMjAwMCBmaWxlIGZvcm1hdCBpbiBJU08gMTU0NDQtMyAobWoybXV4KQotYW5kIGluIHZhcmlvdXMgM0dQUCgyKSBzcGVjcyAoM2dwcG11eCkuCi1UaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci1JU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuPC9wPgotPHA+QSBmZXcgcHJvcGVydGllcyAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tbW92aWUtdGltZXNjYWxlIiB0aXRsZT0iVGhlIOKAnG1vdmllLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG1vdmllLXRpbWVzY2FsZeKAnTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS10cmFrLXRpbWVzY2FsZSIgdGl0bGU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHRyYWstdGltZXNjYWxl4oCdPC9zcGFuPjwvYT4pCi1hbGxvdyBhZGp1c3Rpbmcgc29tZSB0ZWNobmljYWwgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGluIChyYXJlKQotY2FzZXMgdG8gcmVzb2x2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBzb21lIHNpdHVhdGlvbnMuPC9wPgotPHA+U29tZSBvdGhlciBwcm9wZXJ0aWVzIGluZmx1ZW5jZSB0aGUgcmVzdWx0IG1vcmUgZnVuZGFtZW50YWxseS4KLUEgdHlwaWNhbCBtb3YvbXA0IGZpbGUncyBtZXRhZGF0YSAoYWthIG1vb3YpIGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKLXNvbWV3aGF0IGNvbnRyYXJ5IHRvIHRoaXMgdXN1YWxseSBiZWluZyBjYWxsZWQgInRoZSBoZWFkZXIiLiBIb3dldmVyLCBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCNHc3QzR1BQTXV4LS1mYXN0c3RhcnQiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZmFzdHN0YXJ04oCdPC9zcGFuPjwvYT4gZmlsZSB3aWxsICh3aXRoIHNvbWUgZWZmb3J0KSBhcnJhbmdlIHRoaXMgdG8gYmUgbG9jYXRlZAotbmVhciBzdGFydCBvZiB0aGUgZmlsZSwgd2hpY2ggdGhlbiBhbGxvd3MgaXQgZS5nLiB0byBiZSBwbGF5ZWQgd2hpbGUKLWRvd25sb2FkaW5nLiBBbHRlcm5hdGl2ZWx5LCByYXRoZXIgdGhhbiBoYXZpbmcgb25lIGNodW5rIG9mIG1ldGFkYXRhIGF0IHN0YXJ0Ci0ob3IgZW5kKSwgdGhlcmUgY2FuIGJlIHNvbWUgbWV0YWRhdGEgYXQgc3RhcnQgYW5kIG1vc3Qgb2YgdGhlIG90aGVyIGRhdGEgY2FuCi1iZSBzcHJlYWQgb3V0IGludG8gZnJhZ21lbnRzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sI0dzdDNHUFBNdXgtLWZyYWdtZW50LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnGZyYWdtZW50LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZnJhZ21lbnQtZHVyYXRpb27igJ08L3NwYW4+PC9hPi4gSWYgc3VjaAotZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwjR3N0M0dQUE11eC0tc3RyZWFtYWJsZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcc3RyZWFtYWJsZeKAnTwvc3Bhbj48L2E+IGFsbG93cyBmb3JlZ29pbmcgdG8gYWRkIGluZGV4IG1ldGFkYXRhIChhdCB0aGUgZW5kIG9mCi1maWxlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMi44LjciPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHY0bDJzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZmZW5jX2gyNjMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjM8L3NwYW4+Z3BwbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnZpZGVvPHNwYW4gY2xhc3M9Im51bWJlciI+LjM8L3NwYW4+Z3A8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLVJlY29yZHMgYSB2aWRlbyBzdHJlYW0gY2FwdHVyZWQgZnJvbSBhIHY0bDIgZGV2aWNlLCBlbmNvZGVzIGl0IGludG8gSC4yNjMKLWFuZCBtdXhlcyBpdCBpbnRvIGFuIDNncCBmaWxlLgotPC9kaXY+Ci08cD5Eb2N1bWVudGF0aW9uIGxhc3QgcmV2aWV3ZWQgb24gMjAxMS0wNC0yMTwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMi44LjkuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taXNvbXA0Lmh0bWwjcGx1Z2luLWlzb21wNCI+aXNvbXA0PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGhpYWdvIFNvdXNhIFNhbnRvcyAmbHQ7dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnImZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL011eGVyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIuOC45LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vQU1SLCByYXRlPShpbnQpODAwMCwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL0FNUi1XQiwgcmF0ZT0oaW50KTE2MDAwLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTMsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdywgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hYzMsIGNoYW5uZWxzPShpbnQpWyAxLCA2IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3VidGl0bGVfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnRleHQveC1yYXcsIGZvcm1hdD0oc3RyaW5nKXV0Zjg8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWgyNjMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZGl2eCwgZGl2eHZlcnNpb249KGludCk1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYXZjLCBhbGlnbm1lbnQ9KHN0cmluZylhdSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dwcDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0M0dQUE11eC1zdHJ1Y3QiPjwvYT48aDM+R3N0M0dQUE11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+dHlwZWRlZiBzdHJ1Y3QgX0dzdDNHUFBNdXggR3N0M0dQUE11eDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0M0dQUE11eC0tZHRzLW1ldGhvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGR0cy1tZXRob2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGR0cy1tZXRob2TigJ0gICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UVRNdXhEdHNNZXRob2RzPC9zcGFuPjwvcHJlPgotPHA+TWV0aG9kIHRvIGRldGVybWluZSBEVFMgdGltZSAoREVQUkVDQVRFRCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IHJlb3JkZXI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdDNHUFBNdXgtLWZhc3RzdGFydCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZhc3RzdGFydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmFzdHN0YXJ04oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiB0aGUgZmlsZSBzaG91bGQgYmUgZm9ybWF0dGVkIGZvciBmYXN0c3RhcnQgKGhlYWRlcnMgZmlyc3QpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0M0dQUE11eC0tZmFzdHN0YXJ0LWZpbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmYXN0c3RhcnQtZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRlbXBvcmFyaWx5IHRvIHN0b3JlIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHdoZW4gY3JlYXRpbmcgYSBmYXN0c3RhcnQgZmlsZS4gSWYgbnVsbCBhIGZpbGVwYXRoIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3QzR1BQTXV4LS1mcmFnbWVudC1kdXJhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZyYWdtZW50LWR1cmF0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmcmFnbWVudC1kdXJhdGlvbuKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkZyYWdtZW50IGR1cmF0aW9ucyBpbiBtcyAocHJvZHVjZSBhIGZyYWdtZW50ZWQgZmlsZSBpZiAmZ3Q7IDApLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3QzR1BQTXV4LS1tb292LXJlY292ZXJ5LWZpbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb292LXJlY292ZXJ5LWZpbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+RmlsZSB0byBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgZm9yIG1vb3YgYXRvbSBtYWtpbmcgbW92aWUgZmlsZSByZWNvdmVyeSBwb3NzaWJsZSBpbiBjYXNlIG9mIGEgY3Jhc2ggZHVyaW5nIG11eGluZy4gTnVsbCBmb3IgZGlzYWJsZWQuIChFeHBlcmltZW50YWwpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3QzR1BQTXV4LS1tb3ZpZS10aW1lc2NhbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb3ZpZS10aW1lc2NhbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vdmllLXRpbWVzY2FsZeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZXNjYWxlIHRvIHVzZSBpbiB0aGUgbW92aWUgKHVuaXRzIHBlciBzZWNvbmQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE4MDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdDNHUFBNdXgtLXByZXNlbnRhdGlvbi10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJlc2VudGF0aW9uLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHByZXNlbnRhdGlvbi10aW1l4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2FsY3VsYXRlIGFuZCBpbmNsdWRlIHByZXNlbnRhdGlvbi9jb21wb3NpdGlvbiB0aW1lIChpbiBhZGRpdGlvbiB0byBkZWNvZGluZyB0aW1lKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0M0dQUE11eC0tc3RyZWFtYWJsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0cmVhbWFibGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0cmVhbWFibGXigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi4gKERFUFJFQ0FURUQsIG9ubHkgdmFsaWQgZm9yIGZyYWdtZW50ZWQgTVA0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdDNHUFBNdXgtLXRyYWstdGltZXNjYWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdHJhay10aW1lc2NhbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRyYWstdGltZXNjYWxl4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZXNjYWxlIHRvIHVzZSBmb3IgdGhlIHRyYWNrcyAodW5pdHMgcGVyIHNlY29uZCwgMCBpcyBhdXRvbWF0aWMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3QzR1BQTXV4LS1yZXNlcnZlZC1ieXRlcy1wZXItc2VjIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlY+KAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbiBpbnRvIGJ5dGVzIG9mIGhlYWRlciB0byByZXNlcnZlLCBwZXIgc2Vjb25kLCBwZXIgdHJhY2suPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxMDAwMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDU1MDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0M0dQUE11eC0tcmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5SZXBvcnRzIHRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgcmVtYWluaW5nIG1vb3YgaGVhZGVyIHNwYWNlIHJlc2VydmVkIHVzaW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdDNHUFBNdXgtLXJlc2VydmVkLW1heC1kdXJhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLW1heC1kdXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hlbiBzZXQgdG8gYSB2YWx1ZSAmZ3Q7IDAsIHJlc2VydmVzIHNwYWNlIGZvciBpbmRleCB0YWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTg0NDY3NDQwNzM3MDk1NTE2MTU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdDNHUFBNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9k4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hlbiB1c2VkIHdpdGggcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLCBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgaW5kZXggdGFibGVzIHdpdGggaW5mb3JtYXRpb24gbXV4ZWQgc28gZmFyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxODQ0Njc0NDA3MzcwOTU1MTYxNTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYWNwYXJzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGQ3Mjg1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYWNwYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hYWNwYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy0zZ3BwbXV4Lmh0bWwiIHRpdGxlPSIzZ3BwbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sIiB0aXRsZT0iYWFzaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYWNwYXJzZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UudG9wX29mX3BhZ2UiPjwvYT5hYWNwYXJzZTwvc3Bhbj48L2gyPgotPHA+YWFjcGFyc2Ug4oCUIEFBQyBwYXJzZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0QWFjUGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLmh0bWwjR3N0QWFjUGFyc2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEFhY1BhcnNlIj5Hc3RBYWNQYXJzZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0Ij5Hc3RCYXNlUGFyc2U8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFhY1BhcnNlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgaXMgYW4gQUFDIHBhcnNlciB3aGljaCBoYW5kbGVzIGJvdGggQURJRiBhbmQgQURUUyBzdHJlYW0gZm9ybWF0cy48L3A+Ci08cD5BcyBBRElGIGZvcm1hdCBpcyBub3QgZnJhbWVkLCBpdCBpcyBub3Qgc2Vla2FibGUgYW5kIHN0cmVhbSBkdXJhdGlvbiBjYW5ub3QKLWJlIGRldGVybWluZWQgZWl0aGVyLiBIb3dldmVyLCBBRFRTIGZvcm1hdCBBQUMgY2xpcHMgY2FuIGJlIHNlZWtlZCwgYW5kIHBhcnNlcgotY2FuIGFsc28gZXN0aW1hdGUgcGxheWJhY2sgcG9zaXRpb24gYW5kIGNsaXAgZHVyYXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMuNi40Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5hYmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5hYWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFhY3BhcnNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmYWFkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMy42LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9wYXJzZXJzLmh0bWwjcGx1Z2luLWF1ZGlvcGFyc2VycyI+YXVkaW9wYXJzZXJzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3RlZmFuIEtvc3QgJmx0O3N0ZWZhbi5rb3N0QG5va2lhLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGFyc2VyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMuNi41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpeyAyLCA0IH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL21wZWcsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBtcGVndmVyc2lvbj0oaW50KXsgMiwgNCB9LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpeyByYXcsIGFkdHMsIGFkaWYsIGxvYXMgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBYWNQYXJzZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEFhY1BhcnNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QWFjUGFyc2U7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIEdzdEFhY1BhcnNlIGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2Uuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sI0dzdEFtclBhcnNlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QW1yUGFyc2U8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjhlYTBhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YWFzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLmh0bWwiIHRpdGxlPSJhYWNwYXJzZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5odG1sIiB0aXRsZT0iYWMzcGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhY3BhcnNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay50b3Bfb2ZfcGFnZSI+PC9hPmFhc2luazwvc3Bhbj48L2gyPgotPHA+YWFzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tYnJpZ2h0bmVzcyIgdGl0bGU9IlRoZSDigJxicmlnaHRuZXNz4oCdIHByb3BlcnR5Ij5icmlnaHRuZXNzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstLWNvbnRyYXN0IiB0aXRsZT0iVGhlIOKAnGNvbnRyYXN04oCdIHByb3BlcnR5Ij5jb250cmFzdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBQVNpbmtEaXRoZXJlcnM8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstLWRpdGhlciIgdGl0bGU9IlRoZSDigJxkaXRoZXLigJ0gcHJvcGVydHkiPmRpdGhlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBQVNpbmtEcml2ZXJzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rLS1kcml2ZXIiIHRpdGxlPSJUaGUg4oCcZHJpdmVy4oCdIHByb3BlcnR5Ij5kcml2ZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0tZnJhbWUtdGltZSIgdGl0bGU9IlRoZSDigJxmcmFtZS10aW1l4oCdIHByb3BlcnR5Ij5mcmFtZS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rLS1mcmFtZXMtZGlzcGxheWVkIiB0aXRsZT0iVGhlIOKAnGZyYW1lcy1kaXNwbGF5ZWTigJ0gcHJvcGVydHkiPmZyYW1lcy1kaXNwbGF5ZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rLS1nYW1tYSIgdGl0bGU9IlRoZSDigJxnYW1tYeKAnSBwcm9wZXJ0eSI+Z2FtbWE8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0taGVpZ2h0IiB0aXRsZT0iVGhlIOKAnGhlaWdodOKAnSBwcm9wZXJ0eSI+aGVpZ2h0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay0taW52ZXJzaW9uIiB0aXRsZT0iVGhlIOKAnGludmVyc2lvbuKAnSBwcm9wZXJ0eSI+aW52ZXJzaW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCNHc3RBQVNpbmstLXJhbmRvbXZhbCIgdGl0bGU9IlRoZSDigJxyYW5kb212YWzigJ0gcHJvcGVydHkiPnJhbmRvbXZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rLS13aWR0aCIgdGl0bGU9IlRoZSDigJx3aWR0aOKAnSBwcm9wZXJ0eSI+d2lkdGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEFBU2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sI0dzdEFBU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QUFTaW5rIj5Hc3RBQVNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb3NpbmsuaHRtbCNHc3RWaWRlb1Npbmstc3RydWN0Ij5Hc3RWaWRlb1Npbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBQVNpbmsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkRpc3BsYXlzIHZpZGVvIGFzIGIvdyBhc2NpaSBhcnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+YXZpIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWFzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgcmVuZGVycyBhIHZpZGVvIHRvIGFzY2lpIGFydCBpbnRvIGEgc2VwYXJhdGUgd2luZG93LgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+YXZpIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWFzaW5rIGRyaXZlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmN1cnNlczwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHJlbmRlcnMgYSB2aWRlbyB0byBhc2NpaSBhcnQgaW50byB0aGUgY3VycmVudCB0ZXJtaW5hbC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40LjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hYXNpbmsuaHRtbCNwbHVnaW4tYWFzaW5rIj5hYXNpbms8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY2hlbGxvLmJlJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBQVNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBQVNpbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBQVNpbms7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QUFTaW5rLS1icmlnaHRuZXNzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnJpZ2h0bmVzc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnJpZ2h0bmVzc+KAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+YnJpZ2h0bmVzcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QUFTaW5rLS1jb250cmFzdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbnRyYXN04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb250cmFzdOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5jb250cmFzdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QUFTaW5rLS1kaXRoZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkaXRoZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRpdGhlcuKAnSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QUFTaW5rRGl0aGVyZXJzPC9zcGFuPjwvcHJlPgotPHA+ZGl0aGVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBubyBkaXRoZXJpbmc8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFBU2luay0tZHJpdmVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHJpdmVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkcml2ZXLigJ0gICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEFBU2lua0RyaXZlcnM8L3NwYW4+PC9wcmU+Ci08cD5kcml2ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFgxMSBkcml2ZXIgMS4xPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBQVNpbmstLWZyYW1lLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmcmFtZS10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmcmFtZS10aW1l4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5mcmFtZSB0aW1lLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QUFTaW5rLS1mcmFtZXMtZGlzcGxheWVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZnJhbWVzLWRpc3BsYXllZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZnJhbWVzLWRpc3BsYXllZOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+ZnJhbWVzIGRpc3BsYXllZC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFBU2luay0tZ2FtbWEiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxnYW1tYeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZ2FtbWHigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPmdhbW1hLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBQVNpbmstLWhlaWdodCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhlaWdodOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaGVpZ2h04oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+aGVpZ2h0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBQVNpbmstLWludmVyc2lvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGludmVyc2lvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaW52ZXJzaW9u4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5pbnZlcnNpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFBU2luay0tcmFuZG9tdmFsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmFuZG9tdmFs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyYW5kb212YWzigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5yYW5kb212YWwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFBU2luay0td2lkdGgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx3aWR0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcd2lkdGjigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+d2lkdGguPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmh0bWwjR3N0Q0FDQVNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDQUNBU2luazwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmNjYTlkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hYzNwYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCIgdGl0bGU9ImFhc2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwiIHRpdGxlPSJhZ2luZ3R2Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFhc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2UudG9wX29mX3BhZ2UiPjwvYT5hYzNwYXJzZTwvc3Bhbj48L2gyPgotPHA+YWMzcGFyc2Ug4oCUIEFDMyBwYXJzZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0QWMzUGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmh0bWwjR3N0QWMzUGFyc2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEFjM1BhcnNlIj5Hc3RBYzNQYXJzZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0Ij5Hc3RCYXNlUGFyc2U8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFjM1BhcnNlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgaXMgYW4gQUMzIHBhcnNlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNS42LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmFiYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmFjMyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWMzcGFyc2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGE1MmRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNS42LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9wYXJzZXJzLmh0bWwjcGx1Z2luLWF1ZGlvcGFyc2VycyI+YXVkaW9wYXJzZXJzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltIGNlbnRyaWN1bGFyIG5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGFyc2VyL0NvbnZlcnRlci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41LjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWFjMzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtZWFjMzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL2FjMzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcHJpdmF0ZTEtYWMzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWFjMywgZnJhbWVkPShib29sZWFuKXRydWUsIGNoYW5uZWxzPShpbnQpWyAxLCA2IF0sIHJhdGU9KGludClbIDgwMDAsIDQ4MDAwIF0sIGFsaWdubWVudD0oc3RyaW5nKXsgaWVjNjE5MzcsIGZyYW1lIH08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWVhYzMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBjaGFubmVscz0oaW50KVsgMSwgNiBdLCByYXRlPShpbnQpWyA4MDAwLCA0ODAwMCBdLCBhbGlnbm1lbnQ9KHN0cmluZyl7IGllYzYxOTM3LCBmcmFtZSB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFjM1BhcnNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QWMzUGFyc2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBYzNQYXJzZTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgR3N0QWMzUGFyc2Ugb2JqZWN0PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwjR3N0QW1yUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbXJQYXJzZTwvc3Bhbj48L2E+LCA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QUFDUGFyc2U8L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM1YmRmZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hZ2luZ3R2OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmh0bWwiIHRpdGxlPSJhYzNwYXJzZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZGVjLmh0bWwiIHRpdGxlPSJhbGF3ZGVjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYzNwYXJzZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0diI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2LnRvcF9vZl9wYWdlIj48L2E+YWdpbmd0djwvc3Bhbj48L2gyPgotPHA+YWdpbmd0djwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwjR3N0QWdpbmdUVi0tY29sb3ItYWdpbmciIHRpdGxlPSJUaGUg4oCcY29sb3ItYWdpbmfigJ0gcHJvcGVydHkiPmNvbG9yLWFnaW5nPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbCNHc3RBZ2luZ1RWLS1kdXN0cyIgdGl0bGU9IlRoZSDigJxkdXN0c+KAnSBwcm9wZXJ0eSI+ZHVzdHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sI0dzdEFnaW5nVFYtLXBpdHMiIHRpdGxlPSJUaGUg4oCccGl0c+KAnSBwcm9wZXJ0eSI+cGl0czwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwjR3N0QWdpbmdUVi0tc2NyYXRjaC1saW5lcyIgdGl0bGU9IlRoZSDigJxzY3JhdGNoLWxpbmVz4oCdIHByb3BlcnR5Ij5zY3JhdGNoLWxpbmVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBZ2luZ1RWIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbCNHc3RBZ2luZ1RWLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBZ2luZ1RWIj5Hc3RBZ2luZ1RWPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFnaW5nVFYKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BZ2luZ1RWIGFnZXMgYSB2aWRlbyBzdHJlYW0gaW4gcmVhbHRpbWUsIGNoYW5nZXMgdGhlIGNvbG9ycyBhbmQgYWRkcwotc2NyYXRjaGVzIGFuZCBkdXN0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42LjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWdpbmd0diA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiBhZ2luZ3R2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNi43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZWZmZWN0di5odG1sI3BsdWdpbi1lZmZlY3R2Ij5lZmZlY3R2PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2FtIExhbnRpbmdhICZsdDtzbG91a2VuQGRldm9sdXRpb24uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWdpbmdUVi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEFnaW5nVFY8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBZ2luZ1RWOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBZ2luZ1RWLS1jb2xvci1hZ2luZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbG9yLWFnaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb2xvci1hZ2luZ+KAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkNvbG9yIEFnaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBZ2luZ1RWLS1kdXN0cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGR1c3Rz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkdXN0c+KAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkR1c3RzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBZ2luZ1RWLS1waXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGl0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccGl0c+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QaXRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBZ2luZ1RWLS1zY3JhdGNoLWxpbmVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2NyYXRjaC1saW5lc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2NyYXRjaC1saW5lc+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2Ygc2NyYXRjaCBsaW5lcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDIwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNzwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE4NjUwNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hbGF3ZGVjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFnaW5ndHYuaHRtbCIgdGl0bGU9ImFnaW5ndHYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5odG1sIiB0aXRsZT0iYWxhd2VuYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWdpbmd0di5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdlbmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZGVjLnRvcF9vZl9wYWdlIj48L2E+YWxhd2RlYzwvc3Bhbj48L2gyPgotPHA+YWxhd2RlYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RBTGF3RGVjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMuaHRtbCNHc3RBTGF3RGVjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBTGF3RGVjIj5Hc3RBTGF3RGVjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2RlY29kZXIuaHRtbCNHc3RBdWRpb0RlY29kZXItc3RydWN0Ij5Hc3RBdWRpb0RlY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFMYXdEZWMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgZGVjb2RlcyBhbGF3IGF1ZGlvLiBBbGF3IGNvZGluZyBpcyBhbHNvIGtub3duIGFzIEcuNzExLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNy42LjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxhdy5odG1sI3BsdWdpbi1hbGF3Ij5hbGF3PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+WmFoZWVyIEFiYmFzIE1lcmFsaSAmbHQ7emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlY29kZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNy42LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1hbGF3LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFMYXdEZWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBTGF3RGVjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QUxhd0RlYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdlbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5MzVjMi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hbGF3ZW5jOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMuaHRtbCIgdGl0bGU9ImFsYXdkZWMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5odG1sIiB0aXRsZT0iYWxwaGFjb2xvciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdlbmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdlbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2RlYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLnRvcF9vZl9wYWdlIj48L2E+YWxhd2VuYzwvc3Bhbj48L2gyPgotPHA+YWxhd2VuYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RBTGF3RW5jIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdlbmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdlbmMuaHRtbCNHc3RBTGF3RW5jLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBTGF3RW5jIj5Hc3RBTGF3RW5jPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2VuY29kZXIuaHRtbCNHc3RBdWRpb0VuY29kZXItc3RydWN0Ij5Hc3RBdWRpb0VuY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFMYXdFbmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RBTGF3RW5jIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBlbmNvZGUgYWxhdyBhdWRpby4gQWxhdyBjb2RpbmcgaXMgYWxzbyBrbm93biBhcyBHLjcxMS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjguNy4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFsYXcuaHRtbCNwbHVnaW4tYWxhdyI+YWxhdzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9FbmNvZGVyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjguNy4zLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWFsYXcsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBTGF3RW5jLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QUxhd0VuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEFMYXdFbmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY0ZjhjOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YWxwaGE6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5odG1sIiB0aXRsZT0iYWxwaGFjb2xvciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sIiB0aXRsZT0iYW1ycGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS50b3Bfb2ZfcGFnZSI+PC9hPmFscGhhPC9zcGFuPjwvaDI+Ci08cD5hbHBoYTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLWFscGhhIiB0aXRsZT0iVGhlIOKAnGFscGhh4oCdIHByb3BlcnR5Ij5hbHBoYTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLWFuZ2xlIiB0aXRsZT0iVGhlIOKAnGFuZ2xl4oCdIHByb3BlcnR5Ij5hbmdsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYU1ldGhvZCIgdGl0bGU9ImVudW0gR3N0QWxwaGFNZXRob2QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbHBoYU1ldGhvZDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS1tZXRob2QiIHRpdGxlPSJUaGUg4oCcbWV0aG9k4oCdIHByb3BlcnR5Ij5tZXRob2Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS1ub2lzZS1sZXZlbCIgdGl0bGU9IlRoZSDigJxub2lzZS1sZXZlbOKAnSBwcm9wZXJ0eSI+bm9pc2UtbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYS0tdGFyZ2V0LWIiIHRpdGxlPSJUaGUg4oCcdGFyZ2V0LWLigJ0gcHJvcGVydHkiPnRhcmdldC1iPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLXRhcmdldC1nIiB0aXRsZT0iVGhlIOKAnHRhcmdldC1n4oCdIHByb3BlcnR5Ij50YXJnZXQtZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS10YXJnZXQtciIgdGl0bGU9IlRoZSDigJx0YXJnZXQtcuKAnSBwcm9wZXJ0eSI+dGFyZ2V0LXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYS0tYmxhY2stc2Vuc2l0aXZpdHkiIHRpdGxlPSJUaGUg4oCcYmxhY2stc2Vuc2l0aXZpdHnigJ0gcHJvcGVydHkiPmJsYWNrLXNlbnNpdGl2aXR5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtLXdoaXRlLXNlbnNpdGl2aXR5IiB0aXRsZT0iVGhlIOKAnHdoaXRlLXNlbnNpdGl2aXR54oCdIHByb3BlcnR5Ij53aGl0ZS1zZW5zaXRpdml0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhLS1wcmVmZXItcGFzc3Rocm91Z2giIHRpdGxlPSJUaGUg4oCccHJlZmVyLXBhc3N0aHJvdWdo4oCdIHByb3BlcnR5Ij5wcmVmZXItcGFzc3Rocm91Z2g8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEFscGhhIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwjR3N0QWxwaGEtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEFscGhhIj5Hc3RBbHBoYTwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCNHc3RBbHBoYU1ldGhvZCIgdGl0bGU9ImVudW0gR3N0QWxwaGFNZXRob2QiPkdzdEFscGhhTWV0aG9kPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFscGhhCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBhbHBoYSBlbGVtZW50IGFkZHMgYW4gYWxwaGEgY2hhbm5lbCB0byBhIHZpZGVvIHN0cmVhbS4gVGhlIHZhbHVlcwotb2YgdGhlIGFscGhhIGNoYW5uZWwgY2FuIGJlIGVpdGhlciBiZSBzZXQgdG8gYSBjb25zdGFudCBvciBjYW4gYmUKLWR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgdmlhIGNocm9tYSBrZXlpbmcsIGUuZy4gYmx1ZSBjYW4gYmUgc2V0IGFzCi10aGUgdHJhbnNwYXJlbnQgY29sb3IuPC9wPgotPHA+U2FtcGxlIHBpcGVsaW5lOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNDwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgcGF0dGVybjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNub3cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG1peGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2lua18wIFwKLSAgdmlkZW90ZXN0c3JjIHBhdHRlcm48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zbXB0ZTc1IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHBoYSBtZXRob2Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5ncmVlbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbWl4ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zaW5rXzEgXAotICB2aWRlb21peGVyIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5taXhlciBzaW5rXzA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojo8L3NwYW4+em9yZGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj4gc2lua18xPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo6PC9zcGFuPnpvcmRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+IFRoaXMgcGlwZWxpbmUgYWRkcyBhIGFscGhhIGNoYW5uZWwgdG8gdGhlIFNNUFRFIGNvbG9yIGJhcnMKLXdpdGggZ3JlZW4gYXMgdGhlIHRyYW5zcGFyZW50IGNvbG9yIGFuZCBvdmVybGF5cyB0aGUgb3V0cHV0IG9uCi10b3Agb2YgYSBzbm93IHZpZGVvIHN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwLjcuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYS5odG1sI3BsdWdpbi1hbHBoYSI+YWxwaGE8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OwotRWR3YXJkIEhlcnZleSAmbHQ7ZWR3YXJkLmhlcnZleUBjb2xsYWJvcmEuY28udWsmZ3Q7Ci1KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBub3JhaXNpbi5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTAuNy42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsIHhSR0IsIEJHUngsIHhCR1IsIFJHQngsIFJHQiwgQkdSLCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBZNDFCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCeCwgUkdCLCBCR1IsIFk0MkIsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFk0MUIgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFscGhhLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QWxwaGE8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBbHBoYTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxwaGFNZXRob2QiPjwvYT48aDM+ZW51bSBHc3RBbHBoYU1ldGhvZDwvaDM+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RBbHBoYU1ldGhvZC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkFMUEhBLU1FVEhPRC1TRVQ6Q0FQUyI+PC9hPkFMUEhBX01FVEhPRF9TRVQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2V0L2FkanVzdCBhbHBoYSBjaGFubmVsPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkFMUEhBLU1FVEhPRC1HUkVFTjpDQVBTIj48L2E+QUxQSEFfTUVUSE9EX0dSRUVOPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkNocm9tYSBLZXkgZ3JlZW48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iQUxQSEEtTUVUSE9ELUJMVUU6Q0FQUyI+PC9hPkFMUEhBX01FVEhPRF9CTFVFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkNocm9tYSBLZXkgYmx1ZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJBTFBIQS1NRVRIT0QtQ1VTVE9NOkNBUFMiPjwvYT5BTFBIQV9NRVRIT0RfQ1VTVE9NPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkNocm9tYSBLZXkgb24gdGFyZ2V0X3IvZy9iPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxwaGEtLWFscGhhIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYWxwaGHigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFscGhh4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSB2YWx1ZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFscGhhLS1hbmdsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFuZ2xl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhbmdsZeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2l6ZSBvZiB0aGUgY29sb3JjdWJlIHRvIGNoYW5nZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDkwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBbHBoYS0tbWV0aG9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtZXRob2TigJ0gICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sI0dzdEFscGhhTWV0aG9kIiB0aXRsZT0iZW51bSBHc3RBbHBoYU1ldGhvZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFscGhhTWV0aG9kPC9zcGFuPjwvYT48L3ByZT4KLTxwPkhvdyB0aGUgYWxwaGEgY2hhbm5lbHMgc2hvdWxkIGJlIGNyZWF0ZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFNldC9hZGp1c3QgYWxwaGEgY2hhbm5lbDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxwaGEtLW5vaXNlLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbm9pc2UtbGV2ZWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5vaXNlLWxldmVs4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TaXplIG9mIG5vaXNlIHJhZGl1cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDY0XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFscGhhLS10YXJnZXQtYiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRhcmdldC1i4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0YXJnZXQtYuKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBibHVlIGNvbG9yIHZhbHVlIGZvciBjdXN0b20gUkdCIGNocm9tYSBrZXlpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAyNTU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBbHBoYS0tdGFyZ2V0LWciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0YXJnZXQtZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGFyZ2V0LWfigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgZ3JlZW4gY29sb3IgdmFsdWUgZm9yIGN1c3RvbSBSR0IgY2hyb21hIGtleWluZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDI1NTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDI1NTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxwaGEtLXRhcmdldC1yIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGFyZ2V0LXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRhcmdldC1y4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIHJlZCBjb2xvciB2YWx1ZSBmb3IgY3VzdG9tIFJHQiBjaHJvbWEga2V5aW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMjU1PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxwaGEtLWJsYWNrLXNlbnNpdGl2aXR5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmxhY2stc2Vuc2l0aXZpdHnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJsYWNrLXNlbnNpdGl2aXR54oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2Vuc2l0aXZpdHkgdG8gZGFyayBjb2xvcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxMjg8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFscGhhLS13aGl0ZS1zZW5zaXRpdml0eSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHdoaXRlLXNlbnNpdGl2aXR54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx3aGl0ZS1zZW5zaXRpdml0eeKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlNlbnNpdGl2aXR5IHRvIGJyaWdodCBjb2xvcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxMjg8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFscGhhLS1wcmVmZXItcGFzc3Rocm91Z2giPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcmVmZXItcGFzc3Rocm91Z2jigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHByZWZlci1wYXNzdGhyb3VnaOKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RG9uJ3QgZG8gYW55IHByb2Nlc3NpbmcgZm9yIGFscGhhPTEuMCBpZiBwb3NzaWJsZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYWNvbG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ZmRhYjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YWxwaGFjb2xvcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLmh0bWwiIHRpdGxlPSJhbGF3ZW5jIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwiIHRpdGxlPSJhbHBoYSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3Iub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxhd2VuYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci50b3Bfb2ZfcGFnZSI+PC9hPmFscGhhY29sb3I8L3NwYW4+PC9oMj4KLTxwPmFscGhhY29sb3I8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0QWxwaGFDb2xvciI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYWNvbG9yLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYWNvbG9yLmh0bWwjR3N0QWxwaGFDb2xvci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QWxwaGFDb2xvciI+R3N0QWxwaGFDb2xvcjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3Iub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBbHBoYUNvbG9yCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhY29sb3IuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIGFscGhhY29sb3IgZWxlbWVudCBkb2VzIG1lbW9yeS1lZmZpY2llbnQgKGluLXBsYWNlKSBjb2xvdXJzcGFjZQotY29udmVyc2lvbiBmcm9tIFJHQkEgdG8gQVlVViBvciBBWVVWIHRvIFJHQkEgd2hpbGUgcHJlc2VydmluZyB0aGUKLWFscGhhIGNoYW5uZWwuPC9wPgotPHA+U2FtcGxlIHBpcGVsaW5lOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3ZpZGVvL3gtcmF3LGZvcm1hdD0oZm91cmNjKUFZVVYmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIGFscGhhY29sb3IgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45LjYuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYWNvbG9yLmh0bWwjcGx1Z2luLWFscGhhY29sb3IiPmFscGhhY29sb3I8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvQ29udmVydGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjkuNi42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEFZVVYgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0JBLCBCR1JBLCBBUkdCLCBBQkdSLCBBWVVWIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QWxwaGFDb2xvci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEFscGhhQ29sb3I8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBbHBoYUNvbG9yOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYTVmOGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmFtcnBhcnNlOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFscGhhLmh0bWwiIHRpdGxlPSJhbHBoYSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5odG1sIiB0aXRsZT0iYXBlZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGEuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS50b3Bfb2ZfcGFnZSI+PC9hPmFtcnBhcnNlPC9zcGFuPjwvaDI+Ci08cD5hbXJwYXJzZSDigJQgQU1SIHBhcnNlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RBbXJQYXJzZSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2UuaHRtbCNHc3RBbXJQYXJzZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QW1yUGFyc2UiPkdzdEFtclBhcnNlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS1zdHJ1Y3QiPkdzdEJhc2VQYXJzZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QW1yUGFyc2UKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBpcyBhbiBBTVIgcGFyc2VyIGNhcGFibGUgb2YgaGFuZGxpbmcgYm90aCBuYXJyb3ctYmFuZCBhbmQgd2lkZWJhbmQKLWZvcm1hdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExLjYuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+YWJjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+YW1yIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbXJwYXJzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYW1yZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTEuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sI3BsdWdpbi1hdWRpb3BhcnNlcnMiPmF1ZGlvcGFyc2VyczwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlJvbmFsZCBCdWx0amUgJmx0O3JidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGFyc2VyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExLjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWFtci1uYi1zaDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYW1yLXdiLXNoPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9BTVIsIHJhdGU9KGludCk4MDAwLCBjaGFubmVscz0oaW50KTE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9BTVItV0IsIHJhdGU9KGludCkxNjAwMCwgY2hhbm5lbHM9KGludCkxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFtclBhcnNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QW1yUGFyc2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBbXJQYXJzZTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgR3N0QWFjUGFyc2UgZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QW1yUGFyc2UubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLXVnbHktcGx1Z2lucy0xLjBnc3QtcGx1Z2lucy11Z2x5LXBsdWdpbnMtYW1ybmJkZWMuaHRtbCNHc3RBbXJuYkRlYy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbXJuYkRlYzwvc3Bhbj48L2E+LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy11Z2x5LXBsdWdpbnMtMS4wZ3N0LXBsdWdpbnMtdWdseS1wbHVnaW5zLWFtcm5iZW5jLmh0bWwjR3N0QW1ybmJFbmMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QW1ybmJFbmM8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZWRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhkMzkwNy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXBlZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2UuaHRtbCIgdGl0bGU9ImFtcnBhcnNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4Lmh0bWwiIHRpdGxlPSJhcGV2Mm11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbXJwYXJzZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZWRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZWRlbXV4LnRvcF9vZl9wYWdlIj48L2E+YXBlZGVtdXg8L3NwYW4+PC9oMj4KLTxwPmFwZWRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEFwZURlbXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZWRlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5odG1sI0dzdEFwZURlbXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBcGVEZW11eCI+R3N0QXBlRGVtdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R0YWdkZW11eC5odG1sI0dzdFRhZ0RlbXV4Ij5Hc3RUYWdEZW11eDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXBlRGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+YXBlZGVtdXggYWNjZXB0cyBkYXRhIHN0cmVhbXMgd2l0aCBBUEUgdGFncyBhdCB0aGUgc3RhcnQgb3IgYXQgdGhlIGVuZAotKG9yIGJvdGgpLiBUaGUgbWltZSB0eXBlIG9mIHRoZSBkYXRhIGJldHdlZW4gdGhlIHRhZyBibG9ja3MgaXMgZGV0ZWN0ZWQKLXVzaW5nIHR5cGVmaW5kIGZ1bmN0aW9ucywgYW5kIHRoZSBhcHByb3ByaWF0ZSBvdXRwdXQgbWltZSB0eXBlIHNldCBvbgotb3V0Z29pbmcgYnVmZmVycy48L3A+Ci08cD5UaGUgZWxlbWVudCBpcyBvbmx5IGFibGUgdG8gcmVhZCBBUEUgdGFncyBhdCB0aGUgZW5kIG9mIGEgc3RyZWFtIGZyb20KLWEgc2Vla2FibGUgc3RyZWFtLCBpZS4gd2hlbiBnZXRfcmFuZ2UgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVwc3RyZWFtCi1lbGVtZW50cy4gSWYgZ2V0X3JhbmdlIG9wZXJhdGlvbiBpcyBhdmFpbGFibGUsIGFwZWRlbXV4IG1ha2VzIGl0IGF2YWlsYWJsZQotZG93bnN0cmVhbS4gVGhpcyBtZWFucyB0aGF0IGVsZW1lbnRzIHdoaWNoIHJlcXVpcmUgZ2V0X3JhbmdlIG1vZGUsIHN1Y2ggYXMKLXdhdnBhcnNlIG9yIG11c2VwYWNrZGVjLCBjYW4gb3BlcmF0ZSBvbiBmaWxlcyBjb250YWluaW5nIEFQRSB0YWcKLWluZm9ybWF0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMi42LjQiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dCBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZmlsZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm1wYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXBlZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZha2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvdWxkIHJlYWQgYW55IGF2YWlsYWJsZSBBUEUgdGFnIGluZm9ybWF0aW9uIGFuZCBvdXRwdXQgaXQuCi1UaGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zaWRlIHRoZSBBUEUgdGFnIHJlZ2lvbnMgc2hvdWxkIGJlIGRldGVjdGVkLCBhbmQKLXRoZSBhcHByb3ByaWF0ZSBtaW1lIHR5cGUgc2V0IG9uIGJ1ZmZlcnMgcHJvZHVjZWQgZnJvbSBhcGVkZW11eC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMi42LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXBldGFnLmh0bWwjcGx1Z2luLWFwZXRhZyI+YXBldGFnPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltIGNlbnRyaWN1bGFyIG5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVtdXhlci9NZXRhZGF0YTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMi42LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1hcGV0YWc8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZWRlbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBcGVEZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEFwZURlbXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXBlRGVtdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRiOTk4YS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXBldjJtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguaHRtbCIgdGl0bGU9ImFwZWRlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sIiB0aXRsZT0iYXNwZWN0cmF0aW9jcm9wIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGVkZW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC50b3Bfb2ZfcGFnZSI+PC9hPmFwZXYybXV4PC9zcGFuPjwvaDI+Ci08cD5hcGV2Mm11eDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RBcGV2Mk11eCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguaHRtbCNHc3RBcGV2Mk11eC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QXBldjJNdXgiPkdzdEFwZXYyTXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dGFnbXV4Lmh0bWwjR3N0VGFnTXV4Ij5Hc3RUYWdNdXg8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFwZXYyTXV4Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEFwZXYyTXV4IGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgYWRkcyBBUEV2MiB0YWdzIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJlYW0gdXNpbmcgdGhlIHRhZ2xpYgotbGlicmFyeS48L3A+Ci08cD5BcHBsaWNhdGlvbnMgY2FuIHNldCB0aGUgdGFncyB0byB3cml0ZSB1c2luZyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiBpbnRlcmZhY2UuCi1UYWdzIHNlbnQgYnkgdXBzdHJlYW0gZWxlbWVudHMgd2lsbCBiZSBwaWNrZWQgdXAgYXV0b21hdGljYWxseSAoYW5kIG1lcmdlZAotYWNjb3JkaW5nIHRvIHRoZSBtZXJnZSBtb2RlIHNldCB2aWEgdGhlIHRhZyBzZXR0ZXIgaW50ZXJmYWNlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTMuNy40Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5mb288c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBsYW1lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhcGV2Mm11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5mb288c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tcDM8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gQSBwaXBlbGluZSB0aGF0IHRyYW5zY29kZXMgYSBmaWxlIGZyb20gT2dnL1ZvcmJpcyB0byBtcDMgZm9ybWF0IHdpdGggYW4KLUFQRXYyIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgYXMgdGhlIHRoZSBPZ2cvVm9yYmlzIGZpbGUuIE1ha2Ugc3VyZSB0aGUKLU9nZy9Wb3JiaXMgZmlsZSBhY3R1YWxseSBoYXMgY29tbWVudHMgdG8gcHJlc2VydmUuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bSBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+Zm9vPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bXAzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhcGVkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmFrZXNpbmsgc2lsZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+VFJVRSA8c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4mZ3Q7IC88L3NwYW4+ZGV2PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+bnVsbCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fDwvc3Bhbj4gZ3JlcCB0YWdsaXN0PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFZlcmlmeSB0aGF0IHRhZ3MgaGF2ZSBiZWVuIHdyaXR0ZW4uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTMuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXRhZ2xpYi5odG1sI3BsdWdpbi10YWdsaWIiPnRhZ2xpYjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3Nsb21vQGNpcmN1bGFyLWNoYW9zLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Rm9ybWF0dGVyL01ldGFkYXRhPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEzLjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtYXBldGFnPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXgub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFwZXYyTXV4LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QXBldjJNdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBcGV2Mk11eDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmY3M2ZiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXNwZWN0cmF0aW9jcm9wOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFwZXYybXV4Lmh0bWwiIHRpdGxlPSJhcGV2Mm11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMuaHRtbCIgdGl0bGU9ImFzdGVyaXNraDI2MyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXNwZWN0cmF0aW9jcm9wLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXNwZWN0cmF0aW9jcm9wLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXNwZWN0cmF0aW9jcm9wLnRvcF9vZl9wYWdlIj48L2E+YXNwZWN0cmF0aW9jcm9wPC9zcGFuPjwvaDI+Ci08cD5hc3BlY3RyYXRpb2Nyb3A8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RnJhY3Rpb248L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaHRtbCNHc3RBc3BlY3RSYXRpb0Nyb3AtLWFzcGVjdC1yYXRpbyIgdGl0bGU9IlRoZSDigJxhc3BlY3QtcmF0aW/igJ0gcHJvcGVydHkiPmFzcGVjdC1yYXRpbzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEFzcGVjdFJhdGlvQ3JvcCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3Aub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sI0dzdEFzcGVjdFJhdGlvQ3JvcC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QXNwZWN0UmF0aW9Dcm9wIj5Hc3RBc3BlY3RSYXRpb0Nyb3A8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3Aub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij5Hc3RCaW48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEFzcGVjdFJhdGlvQ3JvcAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0QXNwZWN0UmF0aW9Dcm9wIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0Ij5Hc3RDaGlsZFByb3h5PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGNyb3BzIHZpZGVvIGZyYW1lcyB0byBhIHNwZWNpZmllZCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sI0dzdEFzcGVjdFJhdGlvQ3JvcC0tYXNwZWN0LXJhdGlvIiB0aXRsZT0iVGhlIOKAnGFzcGVjdC1yYXRpb+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGFzcGVjdC1yYXRpb+KAnTwvc3Bhbj48L2E+LjwvcD4KLTxwPklmIHRoZSBhc3BlY3QtcmF0aW8gaXMgYWxyZWFkeSBjb3JyZWN0LCB0aGUgZWxlbWVudCB3aWxsIG9wZXJhdGUKLWluIHBhc3MtdGhyb3VnaCBtb2RlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNC44LjQiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmhlaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjY0MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj53aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjQ4MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFzcGVjdHJhdGlvY3JvcCBhc3BlY3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXRpbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE2PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjk8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgZ2VuZXJhdGVzIGEgdmlkZW9zdHJlYW0gaW4gNC8zIGFuZCBjcm9wcyBpdCB0byAxNi85LgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0LjguNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbCNwbHVnaW4tdmlkZW9jcm9wIj52aWRlb2Nyb3A8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaGlqcyBWZXJtZWlyICZsdDt0aGlqc3Zlcm1laXJAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0LjguNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSLCBSR0JBLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0IsIEJHUiwgQVlVViwgWVVZMiwgWVZZVSwgVVlWWSwgSTQyMCwgWVYxMiwgUkdCMTYsIFJHQjE1LCBHUkFZOCwgTlYxMiwgTlYyMSwgR1JBWTE2X0xFLCBHUkFZMTZfQkUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSLCBSR0JBLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0IsIEJHUiwgQVlVViwgWVVZMiwgWVZZVSwgVVlWWSwgSTQyMCwgWVYxMiwgUkdCMTYsIFJHQjE1LCBHUkFZOCwgTlYxMiwgTlYyMSwgR1JBWTE2X0xFLCBHUkFZMTZfQkUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXNwZWN0UmF0aW9Dcm9wLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QXNwZWN0UmF0aW9Dcm9wPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXNwZWN0UmF0aW9Dcm9wOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEFzcGVjdFJhdGlvQ3JvcC0tYXNwZWN0LXJhdGlvIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXNwZWN0LXJhdGlv4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhc3BlY3QtcmF0aW/igJ0gICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEZyYWN0aW9uPC9zcGFuPjwvcHJlPgotPHA+VGFyZ2V0IGFzcGVjdC1yYXRpbyBvZiB2aWRlby48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3Auc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3AiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0Nyb3A8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzljMmZhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXN0ZXJpc2toMjYzOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sIiB0aXRsZT0iYXNwZWN0cmF0aW9jcm9wIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sIiB0aXRsZT0iYXVkaW9hbXBsaWZ5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXNwZWN0cmF0aW9jcm9wLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2MyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMudG9wX29mX3BhZ2UiPjwvYT5hc3Rlcmlza2gyNjM8L3NwYW4+PC9oMj4KLTxwPmFzdGVyaXNraDI2MzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RBc3Rlcmlza2gyNjMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXN0ZXJpc2toMjYzLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMuaHRtbCNHc3RBc3Rlcmlza2gyNjMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEFzdGVyaXNraDI2MyI+R3N0QXN0ZXJpc2toMjYzPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXN0ZXJpc2toMjYzLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBc3Rlcmlza2gyNjMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXN0ZXJpc2toMjYzLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTUuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPk5laWwgU3RyYXRmb3JkICZsdDtuZWlsc0B2aXBhZGlhLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTUuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjMtMTk5ODwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1hc3Rlcmlza2gyNjM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXN0ZXJpc2toMjYzLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBc3Rlcmlza2gyNjMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBc3Rlcmlza2gyNjM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBc3Rlcmlza2gyNjM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmQyODEyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2FtcGxpZnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXVkaW9hbXBsaWZ5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sIiB0aXRsZT0iYXN0ZXJpc2toMjYzIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCIgdGl0bGU9ImF1ZGlvY2hlYmJhbmQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS50b3Bfb2ZfcGFnZSI+PC9hPmF1ZGlvYW1wbGlmeTwvc3Bhbj48L2gyPgotPHA+YXVkaW9hbXBsaWZ5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2FtcGxpZnkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2FtcGxpZnkuaHRtbCNHc3RBdWRpb0FtcGxpZnktLWFtcGxpZmljYXRpb24iIHRpdGxlPSJUaGUg4oCcYW1wbGlmaWNhdGlvbuKAnSBwcm9wZXJ0eSI+YW1wbGlmaWNhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0FtcGxpZnlDbGlwcGluZ01ldGhvZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sI0dzdEF1ZGlvQW1wbGlmeS0tY2xpcHBpbmctbWV0aG9kIiB0aXRsZT0iVGhlIOKAnGNsaXBwaW5nLW1ldGhvZOKAnSBwcm9wZXJ0eSI+Y2xpcHBpbmctbWV0aG9kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBdWRpb0FtcGxpZnkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2FtcGxpZnkuaHRtbCNHc3RBdWRpb0FtcGxpZnktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEF1ZGlvQW1wbGlmeSI+R3N0QXVkaW9BbXBsaWZ5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9maWx0ZXIuaHRtbCNHc3RBdWRpb0ZpbHRlci1zdHJ1Y3QiPkdzdEF1ZGlvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9BbXBsaWZ5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BbXBsaWZpZXMgYW4gYXVkaW8gc3RyZWFtIGJ5IGEgZ2l2ZW4gZmFjdG9yIGFuZCBhbGxvd3MgdGhlIHNlbGVjdGlvbiBvZiBkaWZmZXJlbnQgY2xpcHBpbmcgbW9kZXMuCi1UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjbGlwcGluZyBtb2RlcyBpcyBiZXN0IGV2YWx1YXRlZCBieSB0ZXN0aW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNi43LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTM8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIHdhdmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zYXcgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvYW1wbGlmeSBhbXBsaWZpY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS41PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O21lbG8xLm9nZyZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9hbXBsaWZ5IGFtcGxpZmljYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjU8L3NwYW4+IGNsaXBwaW5nPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bWV0aG9kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+d3JhcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm5lZ2F0aXZlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgd2F2ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNhdyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2FtcGxpZnkgYW1wbGlmaWNhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuNTwvc3Bhbj4gY2xpcHBpbmc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5tZXRob2Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj53cmFwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cG9zaXRpdmUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNi43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sI3BsdWdpbi1hdWRpb2Z4Ij5hdWRpb2Z4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE2LjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMzMkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMzJMRSwgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0FtcGxpZnktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBdWRpb0FtcGxpZnk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb0FtcGxpZnk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9BbXBsaWZ5LS1hbXBsaWZpY2F0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYW1wbGlmaWNhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYW1wbGlmaWNhdGlvbuKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkZhY3RvciBvZiBhbXBsaWZpY2F0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0FtcGxpZnktLWNsaXBwaW5nLW1ldGhvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsaXBwaW5nLW1ldGhvZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2xpcHBpbmctbWV0aG9k4oCdICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0FtcGxpZnlDbGlwcGluZ01ldGhvZDwvc3Bhbj48L3ByZT4KLTxwPkNsaXBwaW5nIG1ldGhvZDogY2xpcCBtb2RlIHNldCB2YWx1ZXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0gdG8gdGhlCi1tYXhpbXVtLiBUaGUgd3JhcC1uZWdhdGl2ZSBtb2RlIHB1c2hlcyB0aG9zZSB2YWx1ZXMgYmFjayBmcm9tIHRoZQotb3Bwb3NpdGUgc2lkZSwgd3JhcC1wb3NpdGl2ZSBwdXNoZXMgdGhlbSBiYWNrIGZyb20gdGhlIHNhbWUgc2lkZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTm9ybWFsIGNsaXBwaW5nIChkZWZhdWx0KTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0OWE5NS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdWRpb2NoZWJiYW5kOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sIiB0aXRsZT0iYXVkaW9hbXBsaWZ5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwiIHRpdGxlPSJhdWRpb2NoZWJsaW1pdCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLnRvcF9vZl9wYWdlIj48L2E+YXVkaW9jaGViYmFuZDwvc3Bhbj48L2gyPgotPHA+YXVkaW9jaGViYmFuZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCNHc3RBdWRpb0NoZWJCYW5kLS1sb3dlci1mcmVxdWVuY3kiIHRpdGxlPSJUaGUg4oCcbG93ZXItZnJlcXVlbmN54oCdIHByb3BlcnR5Ij5sb3dlci1mcmVxdWVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9DaGViQmFuZE1vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwjR3N0QXVkaW9DaGViQmFuZC0tbW9kZSIgdGl0bGU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5Ij5tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwjR3N0QXVkaW9DaGViQmFuZC0tcG9sZXMiIHRpdGxlPSJUaGUg4oCccG9sZXPigJ0gcHJvcGVydHkiPnBvbGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5odG1sI0dzdEF1ZGlvQ2hlYkJhbmQtLXJpcHBsZSIgdGl0bGU9IlRoZSDigJxyaXBwbGXigJ0gcHJvcGVydHkiPnJpcHBsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5odG1sI0dzdEF1ZGlvQ2hlYkJhbmQtLXR5cGUiIHRpdGxlPSJUaGUg4oCcdHlwZeKAnSBwcm9wZXJ0eSI+dHlwZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCNHc3RBdWRpb0NoZWJCYW5kLS11cHBlci1mcmVxdWVuY3kiIHRpdGxlPSJUaGUg4oCcdXBwZXItZnJlcXVlbmN54oCdIHByb3BlcnR5Ij51cHBlci1mcmVxdWVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEF1ZGlvQ2hlYkJhbmQiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5odG1sI0dzdEF1ZGlvQ2hlYkJhbmQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEF1ZGlvQ2hlYkJhbmQiPkdzdEF1ZGlvQ2hlYkJhbmQ8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9maWx0ZXIuaHRtbCNHc3RBdWRpb0ZpbHRlci1zdHJ1Y3QiPkdzdEF1ZGlvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb0NoZWJCYW5kCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QXR0ZW51YXRlcyBhbGwgZnJlcXVlbmNpZXMgb3V0c2lkZSAoYmFuZHBhc3MpIG9yIGluc2lkZSAoYmFuZHJlamVjdCkgb2YgYSBmcmVxdWVuY3kKLWJhbmQuIFRoZSBudW1iZXIgb2YgcG9sZXMgYW5kIHRoZSByaXBwbGUgcGFyYW1ldGVyIGNvbnRyb2wgdGhlIHJvbGxvZmYuPC9wPgotPHA+VGhpcyBlbGVtZW50IGhhcyB0aGUgYWR2YW50YWdlIG92ZXIgdGhlIHdpbmRvd2VkIHNpbmMgYmFuZHBhc3MgYW5kIGJhbmRyZWplY3QgZmlsdGVyIHRoYXQgaXQgaXMKLW11Y2ggZmFzdGVyIGFuZCBwcm9kdWNlcyBhbG1vc3QgYXMgZ29vZCByZXN1bHRzLiBJdCdzIG9ubHkgZGlzYWR2YW50YWdlcyBhcmUgdGhlIGhpZ2hseQotbm9uLWxpbmVhciBwaGFzZSBhbmQgdGhlIHNsb3dlciByb2xsb2ZmIGNvbXBhcmVkIHRvIGEgd2luZG93ZWQgc2luYyBmaWx0ZXIgd2l0aCBhIGxhcmdlIGtlcm5lbC48L3A+Ci08cD5Gb3IgdHlwZSAxIHRoZSByaXBwbGUgcGFyYW1ldGVyIHNwZWNpZmllcyBob3cgbXVjaCByaXBwbGUgaW4gZEIgaXMgYWxsb3dlZCBpbiB0aGUgcGFzc2JhbmQsIGkuZS4KLXNvbWUgZnJlcXVlbmNpZXMgaW4gdGhlIHBhc3NiYW5kIHdpbGwgYmUgYW1wbGlmaWVkIGJ5IHRoYXQgdmFsdWUuIEEgaGlnaGVyIHJpcHBsZSB2YWx1ZSB3aWxsIGFsbG93Ci1hIGZhc3RlciByb2xsb2ZmLjwvcD4KLTxwPkZvciB0eXBlIDIgdGhlIHJpcHBsZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBzdG9wYmFuZCBhdHRlbnVhdGlvbi4gSW4gdGhlIHN0b3BiYW5kIHRoZSBnYWluIHdpbGwKLWJlIGF0IG1vc3QgdGhpcyB2YWx1ZS4gQSBsb3dlciByaXBwbGUgdmFsdWUgd2lsbCBhbGxvdyBhIGZhc3RlciByb2xsb2ZmLjwvcD4KLTxwPkFzIGEgc3BlY2lhbCBjYXNlLCBhIENoZWJ5c2hldiB0eXBlIDEgZmlsdGVyIHdpdGggbm8gcmlwcGxlIGlzIGEgQnV0dGVyd29ydGggZmlsdGVyLjwvcD4KLTxkaXYgY2xhc3M9Im5vdGUiPgotQmUgd2FybmVkIHRoYXQgYSB0b28gbGFyZ2UgbnVtYmVyIG9mIHBvbGVzIGNhbiBwcm9kdWNlIG5vaXNlLiBUaGUgbW9zdCBwb2xlcyBhcmUgcG9zc2libGUgd2l0aAotYSBjdXRvZmYgZnJlcXVlbmN5IGF0IGEgcXVhcnRlciBvZiB0aGUgc2FtcGxpbmcgcmF0ZS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3LjcuOCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgZnJlcTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE1MDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY2hlYmJhbmQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJhbmQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wYXNzIGxvd2VyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+ZnJlcXVlbmN5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDwvc3Bhbj4gdXBwZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5mcmVxdWVuY3k8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj42MDAwPC9zcGFuPiBwb2xlczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rCi1nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDttZWxvMS5vZ2cmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY2hlYmJhbmQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJhbmQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yZWplY3QgbG93ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5mcmVxdWVuY3k8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDAwPC9zcGFuPiB1cHBlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmZyZXF1ZW5jeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjQwMDA8L3NwYW4+IHJpcHBsZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuMjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIHdhdmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj53aGl0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm5vaXNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY2hlYmJhbmQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJhbmQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wYXNzIGxvd2VyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+ZnJlcXVlbmN5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDwvc3Bhbj4gdXBwZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5mcmVxdWVuY3k8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj40MDAwPC9zcGFuPiB0eXBlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNy43LjkuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sI3BsdWdpbi1hdWRpb2Z4Ij5hdWRpb2Z4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTcuNy45LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGViYmFuZC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9DaGViQmFuZC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEF1ZGlvQ2hlYkJhbmQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb0NoZWJCYW5kOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0NoZWJCYW5kLS1sb3dlci1mcmVxdWVuY3kiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb3dlci1mcmVxdWVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxvd2VyLWZyZXF1ZW5jeeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TdGFydCBmcmVxdWVuY3kgb2YgdGhlIGJhbmQgKEh6KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMDAwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0NoZWJCYW5kLS1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9kZeKAnSAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0NoZWJCYW5kTW9kZTwvc3Bhbj48L3ByZT4KLTxwPkxvdyBwYXNzIG9yIGhpZ2ggcGFzcyBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBCYW5kIHBhc3MgKGRlZmF1bHQpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0NoZWJCYW5kLS1wb2xlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvbGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb2xlc+KAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgcG9sZXMgdG8gdXNlLCB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbHkgb2YgZm91ci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFs0LDMyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvQ2hlYkJhbmQtLXJpcHBsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJpcHBsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmlwcGxl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFtb3VudCBvZiByaXBwbGUgKGRCKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDIwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwLjI1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0NoZWJCYW5kLS10eXBlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdHlwZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdHlwZeKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VHlwZSBvZiB0aGUgY2hlYnljaGV2IGZpbHRlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9DaGViQmFuZC0tdXBwZXItZnJlcXVlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXBwZXItZnJlcXVlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1cHBlci1mcmVxdWVuY3nigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U3RvcCBmcmVxdWVuY3kgb2YgdGhlIGJhbmQgKEh6KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMDAwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYjIwMWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmF1ZGlvY2hlYmxpbWl0OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCIgdGl0bGU9ImF1ZGlvY2hlYmJhbmQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwiIHRpdGxlPSJhdWRpb2R5bmFtaWMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQudG9wX29mX3BhZ2UiPjwvYT5hdWRpb2NoZWJsaW1pdDwvc3Bhbj48L2gyPgotPHA+YXVkaW9jaGVibGltaXQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCNHc3RBdWRpb0NoZWJMaW1pdC0tY3V0b2ZmIiB0aXRsZT0iVGhlIOKAnGN1dG9mZuKAnSBwcm9wZXJ0eSI+Y3V0b2ZmPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF1ZGlvQ2hlYkxpbWl0TW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwjR3N0QXVkaW9DaGViTGltaXQtLW1vZGUiIHRpdGxlPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSI+bW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCNHc3RBdWRpb0NoZWJMaW1pdC0tcG9sZXMiIHRpdGxlPSJUaGUg4oCccG9sZXPigJ0gcHJvcGVydHkiPnBvbGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCNHc3RBdWRpb0NoZWJMaW1pdC0tcmlwcGxlIiB0aXRsZT0iVGhlIOKAnHJpcHBsZeKAnSBwcm9wZXJ0eSI+cmlwcGxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5odG1sI0dzdEF1ZGlvQ2hlYkxpbWl0LS10eXBlIiB0aXRsZT0iVGhlIOKAnHR5cGXigJ0gcHJvcGVydHkiPnR5cGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEF1ZGlvQ2hlYkxpbWl0Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5odG1sI0dzdEF1ZGlvQ2hlYkxpbWl0LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdWRpb0NoZWJMaW1pdCI+R3N0QXVkaW9DaGViTGltaXQ8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZmlsdGVyLmh0bWwjR3N0QXVkaW9GaWx0ZXItc3RydWN0Ij5Hc3RBdWRpb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9DaGViTGltaXQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+QXR0ZW51YXRlcyBhbGwgZnJlcXVlbmNpZXMgYWJvdmUgdGhlIGN1dG9mZiBmcmVxdWVuY3kgKGxvdy1wYXNzKSBvciBhbGwgZnJlcXVlbmNpZXMgYmVsb3cgdGhlCi1jdXRvZmYgZnJlcXVlbmN5IChoaWdoLXBhc3MpLiBUaGUgbnVtYmVyIG9mIHBvbGVzIGFuZCB0aGUgcmlwcGxlIHBhcmFtZXRlciBjb250cm9sIHRoZSByb2xsb2ZmLjwvcD4KLTxwPlRoaXMgZWxlbWVudCBoYXMgdGhlIGFkdmFudGFnZSBvdmVyIHRoZSB3aW5kb3dlZCBzaW5jIGxvd3Bhc3MgYW5kIGhpZ2hwYXNzIGZpbHRlciB0aGF0IGl0IGlzCi1tdWNoIGZhc3RlciBhbmQgcHJvZHVjZXMgYWxtb3N0IGFzIGdvb2QgcmVzdWx0cy4gSXQncyBvbmx5IGRpc2FkdmFudGFnZXMgYXJlIHRoZSBoaWdobHkKLW5vbi1saW5lYXIgcGhhc2UgYW5kIHRoZSBzbG93ZXIgcm9sbG9mZiBjb21wYXJlZCB0byBhIHdpbmRvd2VkIHNpbmMgZmlsdGVyIHdpdGggYSBsYXJnZSBrZXJuZWwuPC9wPgotPHA+Rm9yIHR5cGUgMSB0aGUgcmlwcGxlIHBhcmFtZXRlciBzcGVjaWZpZXMgaG93IG11Y2ggcmlwcGxlIGluIGRCIGlzIGFsbG93ZWQgaW4gdGhlIHBhc3NiYW5kLCBpLmUuCi1zb21lIGZyZXF1ZW5jaWVzIGluIHRoZSBwYXNzYmFuZCB3aWxsIGJlIGFtcGxpZmllZCBieSB0aGF0IHZhbHVlLiBBIGhpZ2hlciByaXBwbGUgdmFsdWUgd2lsbCBhbGxvdwotYSBmYXN0ZXIgcm9sbG9mZi48L3A+Ci08cD5Gb3IgdHlwZSAyIHRoZSByaXBwbGUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgc3RvcGJhbmQgYXR0ZW51YXRpb24uIEluIHRoZSBzdG9wYmFuZCB0aGUgZ2FpbiB3aWxsCi1iZSBhdCBtb3N0IHRoaXMgdmFsdWUuIEEgbG93ZXIgcmlwcGxlIHZhbHVlIHdpbGwgYWxsb3cgYSBmYXN0ZXIgcm9sbG9mZi48L3A+Ci08cD5BcyBhIHNwZWNpYWwgY2FzZSwgYSBDaGVieXNoZXYgdHlwZSAxIGZpbHRlciB3aXRoIG5vIHJpcHBsZSBpcyBhIEJ1dHRlcndvcnRoIGZpbHRlci48L3A+Ci08ZGl2IGNsYXNzPSJub3RlIj48cD4KLUJlIHdhcm5lZCB0aGF0IGEgdG9vIGxhcmdlIG51bWJlciBvZiBwb2xlcyBjYW4gcHJvZHVjZSBub2lzZS4gVGhlIG1vc3QgcG9sZXMgYXJlIHBvc3NpYmxlIHdpdGgKLWEgY3V0b2ZmIGZyZXF1ZW5jeSBhdCBhIHF1YXJ0ZXIgb2YgdGhlIHNhbXBsaW5nIHJhdGUuCi08L3A+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTguNy44Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyBmcmVxPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTUwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jaGVibGltaXQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmxvdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnBhc3MgY3V0b2ZmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDwvc3Bhbj4gcG9sZXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj40PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bWVsbzEub2dnJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NoZWJsaW1pdCBtb2RlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+aGlnaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnBhc3MgY3V0b2ZmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NDAwPC9zcGFuPiByaXBwbGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rCi1nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyB3YXZlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+d2hpdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5ub2lzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NoZWJsaW1pdCBtb2RlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bG93PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cGFzcyBjdXRvZmY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj44MDA8L3NwYW4+IHR5cGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE4LjcuOS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb2Z4Lmh0bWwjcGx1Z2luLWF1ZGlvZngiPmF1ZGlvZng8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOC43LjkuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvQ2hlYkxpbWl0LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QXVkaW9DaGViTGltaXQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb0NoZWJMaW1pdDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvQ2hlYkxpbWl0LS1jdXRvZmYiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjdXRvZmbigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGN1dG9mZuKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DdXQgb2ZmIGZyZXF1ZW5jeSAoSHopLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwMDAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvQ2hlYkxpbWl0LS1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9kZeKAnSAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0NoZWJMaW1pdE1vZGU8L3NwYW4+PC9wcmU+Ci08cD5Mb3cgcGFzcyBvciBoaWdoIHBhc3MgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTG93IHBhc3MgKGRlZmF1bHQpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0NoZWJMaW1pdC0tcG9sZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwb2xlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9sZXPigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIHBvbGVzIHRvIHVzZSwgd2lsbCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IGV2ZW4gbnVtYmVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzIsMzJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9DaGViTGltaXQtLXJpcHBsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJpcHBsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmlwcGxl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFtb3VudCBvZiByaXBwbGUgKGRCKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDIwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwLjI1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0NoZWJMaW1pdC0tdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR5cGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR5cGXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlR5cGUgb2YgdGhlIGNoZWJ5Y2hldiBmaWx0ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSwyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDIzMzA4Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXVkaW9keW5hbWljOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwiIHRpdGxlPSJhdWRpb2NoZWJsaW1pdCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbCIgdGl0bGU9ImF1ZGlvZWNobyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9jaGVibGltaXQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy50b3Bfb2ZfcGFnZSI+PC9hPmF1ZGlvZHluYW1pYzwvc3Bhbj48L2gyPgotPHA+YXVkaW9keW5hbWljPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9EeW5hbWljQ2hhcmFjdGVyaXN0aWNzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwjR3N0QXVkaW9EeW5hbWljLS1jaGFyYWN0ZXJpc3RpY3MiIHRpdGxlPSJUaGUg4oCcY2hhcmFjdGVyaXN0aWNz4oCdIHByb3BlcnR5Ij5jaGFyYWN0ZXJpc3RpY3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9EeW5hbWljTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5odG1sI0dzdEF1ZGlvRHluYW1pYy0tbW9kZSIgdGl0bGU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5Ij5tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwjR3N0QXVkaW9EeW5hbWljLS1yYXRpbyIgdGl0bGU9IlRoZSDigJxyYXRpb+KAnSBwcm9wZXJ0eSI+cmF0aW88L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCNHc3RBdWRpb0R5bmFtaWMtLXRocmVzaG9sZCIgdGl0bGU9IlRoZSDigJx0aHJlc2hvbGTigJ0gcHJvcGVydHkiPnRocmVzaG9sZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0QXVkaW9EeW5hbWljIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwjR3N0QXVkaW9EeW5hbWljLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdWRpb0R5bmFtaWMiPkdzdEF1ZGlvRHluYW1pYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZmlsdGVyLmh0bWwjR3N0QXVkaW9GaWx0ZXItc3RydWN0Ij5Hc3RBdWRpb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1ZGlvRHluYW1pYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGNhbiBhY3QgYXMgYSBjb21wcmVzc29yIG9yIGV4cGFuZGVyLiBBIGNvbXByZXNzb3IgY2hhbmdlcyB0aGUKLWFtcGxpdHVkZSBvZiBhbGwgc2FtcGxlcyBhYm92ZSBhIHNwZWNpZmljIHRocmVzaG9sZCB3aXRoIGEgc3BlY2lmaWMgcmF0aW8sCi1hIGV4cGFuZGVyIGRvZXMgdGhlIHNhbWUgZm9yIGFsbCBzYW1wbGVzIGJlbG93IGEgc3BlY2lmaWMgdGhyZXNob2xkLiBJZgotc29mdC1rbmVlIG1vZGUgaXMgc2VsZWN0ZWQgdGhlIHJhdGlvIGlzIGFwcGxpZWQgc21vb3RobHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5LjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgd2F2ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNhdyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9keW5hbWljIGNoYXJhY3RlcmlzdGljczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNvZnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5rbmVlIG1vZGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5jb21wcmVzc29yIHRocmVzaG9sZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuNTwvc3Bhbj4gcmF0aW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bWVsbzEub2dnJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2R5bmFtaWMgY2hhcmFjdGVyaXN0aWNzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+aGFyZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmtuZWUgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmV4cGFuZGVyIHRocmVzaG9sZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuMjwvc3Bhbj4gcmF0aW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj40LjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgd2F2ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNhdyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2R5bmFtaWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOS43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sI3BsdWdpbi1hdWRpb2Z4Ij5hdWRpb2Z4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5LjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIEYzMkxFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0R5bmFtaWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBdWRpb0R5bmFtaWM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb0R5bmFtaWM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9EeW5hbWljLS1jaGFyYWN0ZXJpc3RpY3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjaGFyYWN0ZXJpc3RpY3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNoYXJhY3RlcmlzdGljc+KAnSAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9EeW5hbWljQ2hhcmFjdGVyaXN0aWNzPC9zcGFuPjwvcHJlPgotPHA+U2VsZWN0cyB3aGV0aGVyIHRoZSByYXRpbyBzaG91bGQgYmUgYXBwbGllZCBzbW9vdGggKHNvZnQta25lZSkgb3IgaGFyZCAoaGFyZC1rbmVlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogSGFyZCBLbmVlIChkZWZhdWx0KTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9EeW5hbWljLS1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9kZeKAnSAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0R5bmFtaWNNb2RlPC9zcGFuPjwvcHJlPgotPHA+U2VsZWN0cyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2hvdWxkIHdvcmsgb24gbG91ZCBzYW1wbGVzIChjb21wcmVzc29yKSBvcnF1aWV0IHNhbXBsZXMgKGV4cGFuZGVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogQ29tcHJlc3NvciAoZGVmYXVsdCk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvRHluYW1pYy0tcmF0aW8iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyYXRpb+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmF0aW/igJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlJhdGlvIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9EeW5hbWljLS10aHJlc2hvbGQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aHJlc2hvbGTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRocmVzaG9sZOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaHJlc2hvbGQgdW50aWwgdGhlIGZpbHRlciBpcyBhY3RpdmF0ZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQ3MjJiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXVkaW9lY2hvOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZHluYW1pYy5odG1sIiB0aXRsZT0iYXVkaW9keW5hbWljIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwiIHRpdGxlPSJhdWRpb2ZpcmZpbHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8ucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby50b3Bfb2ZfcGFnZSI+PC9hPmF1ZGlvZWNobzwvc3Bhbj48L2gyPgotPHA+YXVkaW9lY2hvPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8ucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sI0dzdEF1ZGlvRWNoby0tZGVsYXkiIHRpdGxlPSJUaGUg4oCcZGVsYXnigJ0gcHJvcGVydHkiPmRlbGF5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmh0bWwjR3N0QXVkaW9FY2hvLS1mZWVkYmFjayIgdGl0bGU9IlRoZSDigJxmZWVkYmFja+KAnSBwcm9wZXJ0eSI+ZmVlZGJhY2s8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8uaHRtbCNHc3RBdWRpb0VjaG8tLWludGVuc2l0eSIgdGl0bGU9IlRoZSDigJxpbnRlbnNpdHnigJ0gcHJvcGVydHkiPmludGVuc2l0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmh0bWwjR3N0QXVkaW9FY2hvLS1tYXgtZGVsYXkiIHRpdGxlPSJUaGUg4oCcbWF4LWRlbGF54oCdIHByb3BlcnR5Ij5tYXgtZGVsYXk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEF1ZGlvRWNobyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sI0dzdEF1ZGlvRWNoby1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QXVkaW9FY2hvIj5Hc3RBdWRpb0VjaG88L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8ub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2ZpbHRlci5odG1sI0dzdEF1ZGlvRmlsdGVyLXN0cnVjdCI+R3N0QXVkaW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb0VjaG8KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPmF1ZGlvZWNobyBhZGRzIGFuIGVjaG8gb3IgKHNpbXBsZSkgcmV2ZXJiIGVmZmVjdCB0byBhbiBhdWRpbyBzdHJlYW0uIFRoZSBlY2hvCi1kZWxheSwgaW50ZW5zaXR5IGFuZCB0aGUgcGVyY2VudGFnZSBvZiBmZWVkYmFjayBjYW4gYmUgY29uZmlndXJlZC48L3A+Ci08cD5Gb3IgZ2V0dGluZyBhbiBlY2hvIGVmZmVjdCB5b3UgaGF2ZSB0byBzZXQgdGhlIGRlbGF5IHRvIGEgbGFyZ2VyIHZhbHVlLAotZm9yIGV4YW1wbGUgMjAwbXMgYW5kIG1vcmUuIEV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCByZXN1bHQgaW4gYSBzaW1wbGUKLXJldmVyYiBlZmZlY3QsIHdoaWNoIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBtZXRhbGxpYyBzb3VuZC48L3A+Ci08cD5Vc2UgdGhlIG1heC1kZWxheSBwcm9wZXJ0eSB0byBzZXQgdGhlIG1heGltdW0gYW1vdW50IG9mIGRlbGF5IHRoYXQKLXdpbGwgYmUgdXNlZC4gVGhpcyBjYW4gb25seSBiZSBzZXQgYmVmb3JlIGdvaW5nIHRvIHRoZSBQQVVTRUQgb3IgUExBWUlORwotc3RhdGUgYW5kIHdpbGwgYmUgc2V0IHRvIHRoZSBjdXJyZW50IGRlbGF5IGJ5IGRlZmF1bHQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwLjcuNSI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdXRvYXVkaW9zcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9lY2hvIGRlbGF5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMDAwMDAwPC9zcGFuPiBpbnRlbnNpdHk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjY8L3NwYW4+IGZlZWRiYWNrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC40PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rCi1nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDttZWxvMS5vZ2cmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9lY2hvIGRlbGF5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMDAwMDA8L3NwYW4+IGludGVuc2l0eTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuNjwvc3Bhbj4gZmVlZGJhY2s8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMC43LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sI3BsdWdpbi1hdWRpb2Z4Ij5hdWRpb2Z4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjAuNy42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2VjaG8ub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvRWNoby1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEF1ZGlvRWNobzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEF1ZGlvRWNobzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9lY2hvLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0VjaG8tLWRlbGF5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVsYXnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRlbGF54oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkRlbGF5IG9mIHRoZSBlY2hvIGluIG5hbm9zZWNvbmRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvRWNoby0tZmVlZGJhY2siPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmZWVkYmFja+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmVlZGJhY2vigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFtb3VudCBvZiBmZWVkYmFjay48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9FY2hvLS1pbnRlbnNpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpbnRlbnNpdHnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGludGVuc2l0eeKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JbnRlbnNpdHkgb2YgdGhlIGVjaG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvRWNoby0tbWF4LWRlbGF5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LWRlbGF54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtZGVsYXnigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXhpbXVtIGRlbGF5IG9mIHRoZSBlY2hvIGluIG5hbm9zZWNvbmRzIChjYW4ndCBiZSBjaGFuZ2VkIGluIFBMQVlJTkcgb3IgUEFVU0VEIHN0YXRlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDE8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOTU0NzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MTEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmF1ZGlvZmlyZmlsdGVyOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sIiB0aXRsZT0iYXVkaW9lY2hvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwiIHRpdGxlPSJhdWRpb2lpcmZpbHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLnRvcF9vZl9wYWdlIj48L2E+YXVkaW9maXJmaWx0ZXI8L3NwYW4+PC9oMj4KLTxwPmF1ZGlvZmlyZmlsdGVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sI0dzdEF1ZGlvRklSRmlsdGVyLS1rZXJuZWwiIHRpdGxlPSJUaGUg4oCca2VybmVs4oCdIHByb3BlcnR5Ij5rZXJuZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwjR3N0QXVkaW9GSVJGaWx0ZXItLWxhdGVuY3kiIHRpdGxlPSJUaGUg4oCcbGF0ZW5jeeKAnSBwcm9wZXJ0eSI+bGF0ZW5jeTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sI0dzdEF1ZGlvRklSRmlsdGVyLXJhdGUtY2hhbmdlZCIgdGl0bGU9IlRoZSDigJxyYXRlLWNoYW5nZWTigJ0gc2lnbmFsIj5yYXRlLWNoYW5nZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEF1ZGlvRklSRmlsdGVyIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sI0dzdEF1ZGlvRklSRmlsdGVyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdWRpb0ZJUkZpbHRlciI+R3N0QXVkaW9GSVJGaWx0ZXI8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZmlsdGVyLmh0bWwjR3N0QXVkaW9GaWx0ZXItc3RydWN0Ij5Hc3RBdWRpb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9GSVJGaWx0ZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+YXVkaW9maXJmaWx0ZXIgaW1wbGVtZW50cyBhIGdlbmVyaWMgYXVkaW8gPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpbml0ZV9pbXB1bHNlX3Jlc3BvbnNlIiB0YXJnZXQ9Il90b3AiPkZJUiBmaWx0ZXI8L2E+LiBCZWZvcmUgdXNhZ2UgdGhlCi0ia2VybmVsIiBwcm9wZXJ0eSBoYXMgdG8gYmUgc2V0IHRvIHRoZSBmaWx0ZXIga2VybmVsIHRoYXQgc2hvdWxkIGJlCi11c2VkIGFuZCB0aGUgImxhdGVuY3kiIHByb3BlcnR5IGhhcyB0byBiZSBzZXQgdG8gdGhlIGxhdGVuY3kgKGluIHNhbXBsZXMpCi10aGF0IGlzIGludHJvZHVjZWQgYnkgdGhlIGZpbHRlciBrZXJuZWwuIFNldHRpbmcgYSBsYXRlbmN5IG9mIG4gc2FtcGxlcwotd2lsbCBsZWFkIHRvIHRoZSBmaXJzdCBuIHNhbXBsZXMgYmVpbmcgZHJvcHBlZCBmcm9tIHRoZSBvdXRwdXQgYW5kCi1uIHNhbXBsZXMgYWRkZWQgdG8gdGhlIGVuZC48L3A+Ci08cD5UaGUgZmlsdGVyIGtlcm5lbCBkZXNjcmliZXMgdGhlIGltcHVsc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlci4gVG8KLWNhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5IHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgeW91IGhhdmUgdG8gY2FsY3VsYXRlCi10aGUgRm91cmllciBUcmFuc2Zvcm0gb2YgdGhlIGltcHVsc2UgcmVzcG9uc2UuPC9wPgotPHA+VG8gY2hhbmdlIHRoZSBmaWx0ZXIga2VybmVsIHdoZW5ldmVyIHRoZSBzYW1wbGluZyByYXRlIGNoYW5nZXMgdGhlCi0icmF0ZS1jaGFuZ2VkIiBzaWduYWwgY2FuIGJlIHVzZWQuIFRoaXMgc2hvdWxkIGJlIGRvbmUgZm9yIG1vc3QKLUZJUiBmaWx0ZXJzIGFzIHRoZXkncmUgZGVwZW5kaW5nIG9uIHRoZSBzYW1wbGluZyByYXRlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMS44LjUiPjwvYT48aDM+RXhhbXBsZSBhcHBsaWNhdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLTkKLTEwCi0xMQotMTIKLTEzCi0xNAotMTUKLTE2Ci0xNwotMTgKLTE5Ci0yMAotMjEKLTIyCi0yMwotMjQKLTI1Ci0yNgotMjcKLTI4Ci0yOQotMzAKLTMxCi0zMgotMzMKLTM0Ci0zNQotMzYKLTM3Ci0zOAotMzkKLTQwCi00MQotNDIKLTQzCi00NAotNDUKLTQ2Ci00NwotNDgKLTQ5Ci01MAotNTEKLTUyCi01MwotNTQKLTU1Ci01NgotNTcKLTU4Ci01OQotNjAKLTYxCi02MgotNjMKLTY0Ci02NQotNjYKLTY3Ci02OAotNjkKLTcwCi03MQotNzIKLTczCi03NAotNzUKLTc2Ci03NwotNzgKLTc5Ci04MAotODEKLTgyCi04MwotODQKLTg1Ci04NgotODcKLTg4Ci04OQotOTAKLTkxCi05MgotOTMKLTk0Ci05NQotOTYKLTk3Ci05OAotOTkKLTEwMAotMTAxCi0xMDIKLTEwMwotMTA0Ci0xMDUKLTEwNgotMTA3Ci0xMDgKLTEwOQotMTEwCi0xMTEKLTExMgotMTEzCi0xMTQKLTExNQotMTE2Ci0xMTcKLTExOAotMTE5Ci0xMjAKLTEyMQotMTIyCi0xMjMKLTEyNAotMTI1Ci0xMjYKLTEyNwotMTI4Ci0xMjkKLTEzMAotMTMxCi0xMzIKLTEzMwotMTM0Ci0xMzUKLTEzNgotMTM3Ci0xMzgKLTEzOQotMTQwCi0xNDEKLTE0MgotMTQzCi0xNDQKLTE0NQotMTQ2Ci0xNDcKLTE0OAotMTQ5Ci0xNTAKLTE1MQotMTUyCi0xNTMKLTE1NAotMTU1Ci0xNTYKLTE1NwotMTU4Ci0xNTkKLTE2MAotMTYxCi0xNjIKLTE2MwotMTY0Ci0xNjU8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJjb21tZW50Ij4vKiBHU3RyZWFtZXI8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogQ29weXJpZ2h0IChDKSAyMDA5IFNlYmFzdGlhbiBEcm9lZ2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2UmIzY0O2NvbGxhYm9yYS5jby51ayZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICo8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXI8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCw8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Y8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS48L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICovPC9zcGFuPgotCi08c3BhbiBjbGFzcz0iY29tbWVudCI+LyogVGhpcyBzbWFsbCBzYW1wbGUgYXBwbGljYXRpb24gY3JlYXRlcyBhIGJhbmRwYXNzIEZJUiBmaWx0ZXI8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogYnkgdHJhbnNmb3JtaW5nIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2UgdG8gdGhlIGZpbHRlciBrZXJuZWwuPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqLzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5PC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoJmd0Oz0gMi4zMS4wKSAqLzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jZGVmaW5lIEdMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIHBwYyI+I2luY2x1ZGUgJmx0O21hdGguaCZndDs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L2ZmdC9nc3RmZnRmNjQuaCZndDs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWM8L3NwYW4+IGdib29sZWFuCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm9uX21lc3NhZ2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPkdzdEJ1cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gYnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdzdE1lc3NhZ2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IG1lc3NhZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ3BvaW50ZXIgdXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgR01haW5Mb29wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmxvb3AgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gKDwvc3Bhbj5HTWFpbkxvb3AgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiopPC9zcGFuPiB1c2VyX2RhdGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3dpdGNoPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtVFlQRTpDQVBTIj5HU1RfTUVTU0FHRV9UWVBFPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKSB7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jYXNlPC9zcGFuPiBHU1RfTUVTU0FHRV9FUlJPUjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZXNzYWdlLUxvZ2dpbmcuaHRtbCNnLWVycm9yIj5nX2Vycm9yPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7R290IEVSUk9SJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1sb29wLXF1aXQiPmdfbWFpbl9sb29wX3F1aXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5sb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jYXNlPC9zcGFuPiBHU1RfTUVTU0FHRV9XQVJOSU5HPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lc3NhZ2UtTG9nZ2luZy5odG1sI2ctd2FybmluZyI+Z193YXJuaW5nPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7R290IFdBUk5JTkcmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1tYWluLWxvb3AtcXVpdCI+Z19tYWluX2xvb3BfcXVpdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmxvb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+YnJlYWs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNhc2U8L3NwYW4+IEdTVF9NRVNTQUdFX0VPUzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1tYWluLWxvb3AtcXVpdCI+Z19tYWluX2xvb3BfcXVpdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmxvb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+YnJlYWs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmRlZmF1bHQ8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+YnJlYWs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljIHZvaWQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm9uX3JhdGVfY2hhbmdlZDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+R3N0RWxlbWVudCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gZWxlbWVudDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBnaW50IHJhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ3BvaW50ZXIgdXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgR1ZhbHVlQXJyYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+dmE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgR1ZhbHVlIHYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gezwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCB9Ozwvc3Bhbj4KLSAgR3N0RkZURjY0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmZmdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBHc3RGRlRGNjRDb21wbGV4IGZyZXF1ZW5jeV9yZXNwb25zZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE3PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dOzwvc3Bhbj4KLSAgZ2RvdWJsZSB0bXA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4zMjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+XTs8L3NwYW4+Ci0gIGdkb3VibGUgZmlsdGVyX2tlcm5lbDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMyPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dOzwvc3Bhbj4KLSAgZ3VpbnQgaTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vKiBDcmVhdGUgdGhlIGZyZXF1ZW5jeSByZXNwb25zZTogemVybyBvdXRzaWRlPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAgICogYSBzbWFsbCBmcmVxdWVuY3kgYmFuZCAqLzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmZvcjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+aSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4gaSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTc8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KyspIHs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5pIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fHw8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjExPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotICAgICAgZnJlcXVlbmN5X3Jlc3BvbnNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPls8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dLjwvc3Bhbj5yIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVsc2U8L3NwYW4+Ci0gICAgICBmcmVxdWVuY3lfcmVzcG9uc2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Wzwvc3Bhbj5pPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPl0uPC9zcGFuPnIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICAgIGZyZXF1ZW5jeV9yZXNwb25zZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bPC9zcGFuPmk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+XS48L3NwYW4+aSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MC4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iY29tbWVudCI+LyogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIEZUIG9mIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2UgKi88L3NwYW4+Ci0gIGZmdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGZmdGY2NC5odG1sI2dzdC1mZnQtZjY0LW5ldyI+Z3N0X2ZmdF9mNjRfbmV3PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzI8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RmZnRmNjQuaHRtbCNnc3QtZmZ0LWY2NC1pbnZlcnNlLWZmdCI+Z3N0X2ZmdF9mNjRfaW52ZXJzZV9mZnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5mZnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZnJlcXVlbmN5X3Jlc3BvbnNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHRtcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGZmdGY2NC5odG1sI2dzdC1mZnQtZjY0LWZyZWUiPmdzdF9mZnRfZjY0X2ZyZWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5mZnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIFNoaWZ0IHRoZSBpbnZlcnNlIEZUIG9mIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2UgYnkgMTYsPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAgICogaS5lLiB0aGUgaGFsZiBvZiB0aGUga2VybmVsIGxlbmd0aCB0byBnZXQgdGhlPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAgICogaW1wdWxzZSByZXNwb25zZS4gU2VlIGh0dHA6Ly93d3cuZHNwZ3VpZGUuY29tL2NoMTcvMS5odG08L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICAgKi88L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mb3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjMyPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPisrKTwvc3Bhbj4KLSAgICBmaWx0ZXJfa2VybmVsPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPls8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dID08L3NwYW4+IHRtcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bKDwvc3Bhbj5pIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4rPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xNjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSAlPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4zMjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+XTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIEFwcGx5IHRoZSBoYW1taW5nIHdpbmRvdyB0byB0aGUgaW1wdWxzZSByZXNwb25zZSB0byBnZXQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICAgKiBhIGJldHRlciByZXN1bHQgdGhhbiBnaXZlbiBmcm9tIHRoZSByZWN0YW5ndWxhciB3aW5kb3c8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICAgKi88L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mb3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjMyPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPisrKTwvc3Bhbj4KLSAgICBmaWx0ZXJfa2VybmVsPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPls8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dICo9ICg8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC41NDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjAuNDY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmNvczwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Mjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IEdfUEkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjMyPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+Ci0KLSAgdmEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjZy12YWx1ZS1hcnJheS1uZXciPmdfdmFsdWVfYXJyYXlfbmV3PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI2ctdmFsdWUtaW5pdCI+Z192YWx1ZV9pbml0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj52PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdfVFlQRV9ET1VCTEU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mb3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjMyPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPisrKSB7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU3RhbmRhcmQtUGFyYW1ldGVyLWFuZC1WYWx1ZS1UeXBlcy5odG1sI2ctdmFsdWUtc2V0LWRvdWJsZSI+Z192YWx1ZV9zZXRfZG91YmxlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj52PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZpbHRlcl9rZXJuZWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Wzwvc3Bhbj5pPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPl0pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI2ctdmFsdWUtYXJyYXktYXBwZW5kIj5nX3ZhbHVlX2FycmF5X2FwcGVuZDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnZhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+djxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUdlbmVyaWMtdmFsdWVzLmh0bWwjZy12YWx1ZS1yZXNldCI+Z192YWx1ZV9yZXNldDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oJmFtcDs8L3NwYW4+djxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNnLW9iamVjdC1zZXQiPmdfb2JqZWN0X3NldDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHLU9CSkVDVDpDQVBTIj5HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2tlcm5lbCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gdmE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIExhdGVuY3kgaXMgMS8yIG9mIHRoZSBrZXJuZWwgbGVuZ3RoIGZvciB0aGlzIG1ldGhvZCBvZjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gICAqIGNhbGN1bGF0aW5nIGEgZmlsdGVyIGtlcm5lbCBmcm9tIHRoZSBmcmVxdWVuY3kgcmVzcG9uc2U8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICAgKi88L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNnLW9iamVjdC1zZXQiPmdfb2JqZWN0X3NldDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHLU9CSkVDVDpDQVBTIj5HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2xhdGVuY3kmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKDwvc3Bhbj5naW50NjQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSAoPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMyPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+Mjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjZy12YWx1ZS1hcnJheS1mcmVlIj5nX3ZhbHVlX2FycmF5X2ZyZWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj52YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotCi1naW50Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm1haW48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmdpbnQgYXJnYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBnY2hhciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gYXJndjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bXSk8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgR3N0RWxlbWVudCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5waXBlbGluZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICo8L3NwYW4+c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5maWx0ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPmNvbnY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPnNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgR3N0QnVzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmJ1czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBHTWFpbkxvb3AgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+bG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMGdzdHJlYW1lci1Hc3QuaHRtbCNnc3QtaW5pdCI+Z3N0X2luaXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5OVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgcGlwZWxpbmUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtwaXBlbGluZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICBzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthdWRpb3Rlc3RzcmMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNnLW9iamVjdC1zZXQiPmdfb2JqZWN0X3NldDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHLU9CSkVDVDpDQVBTIj5HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7d2F2ZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICBmaWx0ZXIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthdWRpb2ZpcmZpbHRlciZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjZy1zaWduYWwtY29ubmVjdCI+Z19zaWduYWxfY29ubmVjdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHLU9CSkVDVDpDQVBTIj5HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmZpbHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7cmF0ZS1jaGFuZ2VkJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1DbG9zdXJlcy5odG1sI0ctQ0FMTEJBQ0s6Q0FQUyI+R19DQUxMQkFDSzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm9uX3JhdGVfY2hhbmdlZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICBjb252IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW9jb252ZXJ0JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIHNpbmsgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthdXRvYXVkaW9zaW5rJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1yZXR1cm4tdmFsLWlmLWZhaWwiPmdfcmV0dXJuX3ZhbF9pZl9mYWlsPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+c2luayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+IT08L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAtPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEJpbi5odG1sI2dzdC1iaW4tYWRkLW1hbnkiPmdzdF9iaW5fYWRkX21hbnk8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPkdTVF9CSU48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBpcGVsaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiBzcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZmlsdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGNvbnY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gc2luazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oITwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtbGluay1tYW55Ij5nc3RfZWxlbWVudF9saW5rX21hbnk8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZmlsdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGNvbnY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gc2luazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpIHs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZXNzYWdlLUxvZ2dpbmcuaHRtbCNnLWVycm9yIj5nX2Vycm9yPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7RmFpbGVkIHRvIGxpbmsgZWxlbWVudHMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotCi0gIGxvb3AgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1sb29wLW5ldyI+Z19tYWluX2xvb3BfbmV3PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+TlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBGQUxTRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICBidXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFBpcGVsaW5lLmh0bWwjZ3N0LXBpcGVsaW5lLWdldC1idXMiPmdzdF9waXBlbGluZV9nZXRfYnVzPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfUElQRUxJTkU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBpcGVsaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtc2lnbmFsLXdhdGNoIj5nc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2g8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI2ctc2lnbmFsLWNvbm5lY3QiPmdfc2lnbmFsX2Nvbm5lY3Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O21lc3NhZ2UmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtQ2xvc3VyZXMuaHRtbCNHLUNBTExCQUNLOkNBUFMiPkdfQ0FMTEJBQ0s8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5vbl9tZXNzYWdlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiBsb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIj5nc3Rfb2JqZWN0X3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfT0JKRUNUPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSk7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pID09PC9zcGFuPiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSB7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVzc2FnZS1Mb2dnaW5nLmh0bWwjZy1lcnJvciI+Z19lcnJvcjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0ZhaWxlZCB0byBnbyBpbnRvIFBMQVlJTkcgc3RhdGUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjM8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1sb29wLXJ1biI+Z19tYWluX2xvb3BfcnVuPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIj5nc3RfZWxlbWVudF9zZXRfc3RhdGU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5waXBlbGluZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHU1RfU1RBVEVfTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tbG9vcC11bnJlZiI+Z19tYWluX2xvb3BfdW5yZWY8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5sb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIj5nc3Rfb2JqZWN0X3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxLjguNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb2Z4Lmh0bWwjcGx1Z2luLWF1ZGlvZngiPmF1ZGlvZng8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMS44LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvRklSRmlsdGVyLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QXVkaW9GSVJGaWx0ZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb0ZJUkZpbHRlcjs8L3ByZT4KLTxwPk9wYXF1ZSBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0ZJUkZpbHRlci0ta2VybmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCca2VybmVs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxrZXJuZWzigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWx0ZXIga2VybmVsIGZvciB0aGUgRklSIGZpbHRlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0ZJUkZpbHRlci0tbGF0ZW5jeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxhdGVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhdGVuY3nigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkZpbHRlciBsYXRlbmN5IGluIHNhbXBsZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvRklSRmlsdGVyLXJhdGUtY2hhbmdlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJhdGUtY2hhbmdlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwjR3N0QXVkaW9GSVJGaWx0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0ZJUkZpbHRlcjwvc3Bhbj48L2E+ICpmaWx0ZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICByYXRlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPldpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBzYW1wbGluZyByYXRlIGNoYW5nZXMuIFRoZSBjYWxsYmFja3MKLXdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgYW5kIHByb2Nlc3Npbmcgd2lsbAotc3RvcCB1bnRpbCB0aGUgZXZlbnQgaXMgaGFuZGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RBdWRpb0ZJUkZpbHRlci1yYXRlLWNoYW5nZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZpbHRlciBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgc2FtcGxpbmcgcmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjczMTc0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTU5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdWRpb2lpcmZpbHRlcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sIiB0aXRsZT0iYXVkaW9maXJmaWx0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuaHRtbCIgdGl0bGU9ImF1ZGlvaW52ZXJ0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9maXJmaWx0ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci50b3Bfb2ZfcGFnZSI+PC9hPmF1ZGlvaWlyZmlsdGVyPC9zcGFuPjwvaDI+Ci08cD5hdWRpb2lpcmZpbHRlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI0dWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlQXJyYXk8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuaHRtbCNHc3RBdWRpb0lJUkZpbHRlci0tYSIgdGl0bGU9IlRoZSDigJxh4oCdIHByb3BlcnR5Ij5hPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwjR3N0QXVkaW9JSVJGaWx0ZXItLWIiIHRpdGxlPSJUaGUg4oCcYuKAnSBwcm9wZXJ0eSI+YjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sI0dzdEF1ZGlvSUlSRmlsdGVyLXJhdGUtY2hhbmdlZCIgdGl0bGU9IlRoZSDigJxyYXRlLWNoYW5nZWTigJ0gc2lnbmFsIj5yYXRlLWNoYW5nZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEF1ZGlvSUlSRmlsdGVyIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sI0dzdEF1ZGlvSUlSRmlsdGVyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdWRpb0lJUkZpbHRlciI+R3N0QXVkaW9JSVJGaWx0ZXI8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZmlsdGVyLmh0bWwjR3N0QXVkaW9GaWx0ZXItc3RydWN0Ij5Hc3RBdWRpb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9JSVJGaWx0ZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+YXVkaW9paXJmaWx0ZXIgaW1wbGVtZW50cyBhIGdlbmVyaWMgYXVkaW8gPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0luZmluaXRlX2ltcHVsc2VfcmVzcG9uc2UiIHRhcmdldD0iX3RvcCI+SUlSIGZpbHRlcjwvYT4uIEJlZm9yZSB1c2FnZSB0aGUKLSJhIiBhbmQgImIiIHByb3BlcnRpZXMgaGF2ZSB0byBiZSBzZXQgdG8gdGhlIGZpbHRlciBjb2VmZmljaWVudHMgdGhhdAotc2hvdWxkIGJlIHVzZWQuPC9wPgotPHA+VGhlIGZpbHRlciBjb2VmZmljaWVudHMgZGVzY3JpYmUgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igb2YgdGhlCi10cmFuc2ZlciBmdW5jdGlvbi48L3A+Ci08cD5UbyBjaGFuZ2UgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgd2hlbmV2ZXIgdGhlIHNhbXBsaW5nIHJhdGUgY2hhbmdlcyB0aGUKLSJyYXRlLWNoYW5nZWQiIHNpZ25hbCBjYW4gYmUgdXNlZC4gVGhpcyBzaG91bGQgYmUgZG9uZSBmb3IgbW9zdAotSUlSIGZpbHRlcnMgYXMgdGhleSdyZSBkZXBlbmRpbmcgb24gdGhlIHNhbXBsaW5nIHJhdGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyLjguNSI+PC9hPjxoMz5FeGFtcGxlIGFwcGxpY2F0aW9uPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNAotMjUKLTI2Ci0yNwotMjgKLTI5Ci0zMAotMzEKLTMyCi0zMwotMzQKLTM1Ci0zNgotMzcKLTM4Ci0zOQotNDAKLTQxCi00MgotNDMKLTQ0Ci00NQotNDYKLTQ3Ci00OAotNDkKLTUwCi01MQotNTIKLTUzCi01NAotNTUKLTU2Ci01NwotNTgKLTU5Ci02MAotNjEKLTYyCi02MwotNjQKLTY1Ci02NgotNjcKLTY4Ci02OQotNzAKLTcxCi03MgotNzMKLTc0Ci03NQotNzYKLTc3Ci03OAotNzkKLTgwCi04MQotODIKLTgzCi04NAotODUKLTg2Ci04NwotODgKLTg5Ci05MAotOTEKLTkyCi05MwotOTQKLTk1Ci05NgotOTcKLTk4Ci05OQotMTAwCi0xMDEKLTEwMgotMTAzCi0xMDQKLTEwNQotMTA2Ci0xMDcKLTEwOAotMTA5Ci0xMTAKLTExMQotMTEyCi0xMTMKLTExNAotMTE1Ci0xMTYKLTExNwotMTE4Ci0xMTkKLTEyMAotMTIxCi0xMjIKLTEyMwotMTI0Ci0xMjUKLTEyNgotMTI3Ci0xMjgKLTEyOQotMTMwCi0xMzEKLTEzMgotMTMzCi0xMzQKLTEzNQotMTM2Ci0xMzcKLTEzOAotMTM5Ci0xNDAKLTE0MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIEdTdHJlYW1lcjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ViYXN0aWFuIERyb2VnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZSYjNjQ7Y29sbGFib3JhLmNvLnVrJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICo8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWM8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKi88L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4vKiBUaGlzIHNtYWxsIHNhbXBsZSBhcHBsaWNhdGlvbiBjcmVhdGVzIGEgbG93cGFzcyBJSVIgZmlsdGVyPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIGFuZCBhcHBsaWVzIGl0IHRvIHdoaXRlIG5vaXNlLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBTZWUgaHR0cDovL3d3dy5kc3BndWlkZS5jb20vY2gxOS8yLmh0bSBmb3IgYSBkZXNjcmlwdGlvbjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBvZiB0aGUgSUlSIGZpbHRlciB0aGF0IGlzIHVzZWQuPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqLzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5PC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoJmd0Oz0gMi4zMS4wKSAqLzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jZGVmaW5lIEdMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIHBwYyI+I2luY2x1ZGUgJmx0O21hdGguaCZndDs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0Ozwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIEN1dG9mZiBvZiA0MDAwIEh6ICovPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNkZWZpbmUgQ1VUT0ZGICg0MDAwLjApPC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljPC9zcGFuPiBnYm9vbGVhbgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5vbl9tZXNzYWdlPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5Hc3RCdXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IGJ1czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHc3RNZXNzYWdlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBtZXNzYWdlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGdwb2ludGVyIHVzZXJfZGF0YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdNYWluTG9vcCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5sb29wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49ICg8L3NwYW4+R01haW5Mb29wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qKTwvc3Bhbj4gdXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnN3aXRjaDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0TWVzc2FnZS5odG1sI0dTVC1NRVNTQUdFLVRZUEU6Q0FQUyI+R1NUX01FU1NBR0VfVFlQRTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1lc3NhZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSkgezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2FzZTwvc3Bhbj4gR1NUX01FU1NBR0VfRVJST1I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVzc2FnZS1Mb2dnaW5nLmh0bWwjZy1lcnJvciI+Z19lcnJvcjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0dvdCBFUlJPUiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tbG9vcC1xdWl0Ij5nX21haW5fbG9vcF9xdWl0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5icmVhazwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2FzZTwvc3Bhbj4gR1NUX01FU1NBR0VfV0FSTklORzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZXNzYWdlLUxvZ2dpbmcuaHRtbCNnLXdhcm5pbmciPmdfd2FybmluZzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0dvdCBXQVJOSU5HJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1sb29wLXF1aXQiPmdfbWFpbl9sb29wX3F1aXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5sb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jYXNlPC9zcGFuPiBHU1RfTUVTU0FHRV9FT1M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1sb29wLXF1aXQiPmdfbWFpbl9sb29wX3F1aXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5sb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kZWZhdWx0PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmJyZWFrPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiBUUlVFPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0YXRpYyB2b2lkPC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5vbl9yYXRlX2NoYW5nZWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPkdzdEVsZW1lbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IGVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ2ludCByYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGdwb2ludGVyIHVzZXJfZGF0YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdWYWx1ZUFycmF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnZhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdWYWx1ZSB2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49IHs8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgfTs8L3NwYW4+Ci0gIGdkb3VibGUgeDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cmF0ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+Mi4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Jmd0Ozwvc3Bhbj4gQ1VUT0ZGPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci0gICAgeCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5leHA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oLTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBHX1BJIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qICg8L3NwYW4+Q1VUT0ZGIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPiByYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmVsc2U8L3NwYW4+Ci0gICAgeCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MC4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gIHZhIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI2ctdmFsdWUtYXJyYXktbmV3Ij5nX3ZhbHVlX2FycmF5X25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNnLXZhbHVlLWluaXQiPmdfdmFsdWVfaW5pdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oJmFtcDs8L3NwYW4+djxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHX1RZUEVfRE9VQkxFPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLXNldC1kb3VibGUiPmdfdmFsdWVfc2V0X2RvdWJsZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oJmFtcDs8L3NwYW4+djxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPiB4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI2ctdmFsdWUtYXJyYXktYXBwZW5kIj5nX3ZhbHVlX2FycmF5X2FwcGVuZDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnZhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+djxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1HZW5lcmljLXZhbHVlcy5odG1sI2ctdmFsdWUtcmVzZXQiPmdfdmFsdWVfcmVzZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCZhbXA7PC9zcGFuPnY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNnLW9iamVjdC1zZXQiPmdfb2JqZWN0X3NldDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHLU9CSkVDVDpDQVBTIj5HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVsZW1lbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2EmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHZhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjZy12YWx1ZS1hcnJheS1mcmVlIj5nX3ZhbHVlX2FycmF5X2ZyZWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj52YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICB2YSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNnLXZhbHVlLWFycmF5LW5ldyI+Z192YWx1ZV9hcnJheV9uZXc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TdGFuZGFyZC1QYXJhbWV0ZXItYW5kLVZhbHVlLVR5cGVzLmh0bWwjZy12YWx1ZS1zZXQtZG91YmxlIj5nX3ZhbHVlX3NldF9kb3VibGU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCZhbXA7PC9zcGFuPnY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4geDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNnLXZhbHVlLWFycmF5LWFwcGVuZCI+Z192YWx1ZV9hcnJheV9hcHBlbmQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj52YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPnY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtR2VuZXJpYy12YWx1ZXMuaHRtbCNnLXZhbHVlLXJlc2V0Ij5nX3ZhbHVlX3Jlc2V0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPigmYW1wOzwvc3Bhbj52PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij5nX29iamVjdF9zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lbGVtZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtiJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiB2YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI2ctdmFsdWUtYXJyYXktZnJlZSI+Z192YWx1ZV9hcnJheV9mcmVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dmE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLQotZ2ludAotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5tYWluPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5naW50IGFyZ2M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ2NoYXIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IGFyZ3Y8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+W10pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdzdEVsZW1lbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPnNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICo8L3NwYW4+ZmlsdGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5jb252PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5zaW5rPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdzdEJ1cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgR01haW5Mb29wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmxvb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBnc3RyZWFtZXItR3N0Lmh0bWwjZ3N0LWluaXQiPmdzdF9pbml0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+TlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIHBpcGVsaW5lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7cGlwZWxpbmUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW90ZXN0c3JjJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij5nX29iamVjdF9zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3dhdmUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjU8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgZmlsdGVyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW9paXJmaWx0ZXImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI2ctc2lnbmFsLWNvbm5lY3QiPmdfc2lnbmFsX2Nvbm5lY3Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5maWx0ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3JhdGUtY2hhbmdlZCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtQ2xvc3VyZXMuaHRtbCNHLUNBTExCQUNLOkNBUFMiPkdfQ0FMTEJBQ0s8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5vbl9yYXRlX2NoYW5nZWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgY29udiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvY29udmVydCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICBzaW5rIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXV0b2F1ZGlvc2luayZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1XYXJuaW5ncy1hbmQtQXNzZXJ0aW9ucy5odG1sI2ctcmV0dXJuLXZhbC1pZi1mYWlsIj5nX3JldHVybl92YWxfaWZfZmFpbDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnNpbmsgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE9PC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgLTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNnc3QtYmluLWFkZC1tYW55Ij5nc3RfYmluX2FkZF9tYW55PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQklOPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5waXBlbGluZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gc3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZpbHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBjb252PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstbWFueSI+Z3N0X2VsZW1lbnRfbGlua19tYW55PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZpbHRlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBjb252PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKSB7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItTWVzc2FnZS1Mb2dnaW5nLmh0bWwjZy1lcnJvciI+Z19lcnJvcjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O0ZhaWxlZCB0byBsaW5rIGVsZW1lbnRzJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLQotICBsb29wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tbG9vcC1uZXciPmdfbWFpbl9sb29wX25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPk5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gRkFMU0U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgYnVzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1nZXQtYnVzIj5nc3RfcGlwZWxpbmVfZ2V0X2J1czwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX1BJUEVMSU5FPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5waXBlbGluZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEJ1cy5odG1sI2dzdC1idXMtYWRkLXNpZ25hbC13YXRjaCI+Z3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNnLXNpZ25hbC1jb25uZWN0Ij5nX3NpZ25hbF9jb25uZWN0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0ctT0JKRUNUOkNBUFMiPkdfT0JKRUNUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDttZXNzYWdlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUNsb3N1cmVzLmh0bWwjRy1DQUxMQkFDSzpDQVBTIj5HX0NBTExCQUNLPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+b25fbWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gbG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiI+Z3N0X29iamVjdF91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX09CSkVDVDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiPmdzdF9lbGVtZW50X3NldF9zdGF0ZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBpcGVsaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSA9PTwvc3Bhbj4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikgezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lc3NhZ2UtTG9nZ2luZy5odG1sI2ctZXJyb3IiPmdfZXJyb3I8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtGYWlsZWQgdG8gZ28gaW50byBQTEFZSU5HIHN0YXRlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4zPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tbG9vcC1ydW4iPmdfbWFpbl9sb29wX3J1bjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmxvb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR1NUX1NUQVRFX05VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1tYWluLWxvb3AtdW5yZWYiPmdfbWFpbl9sb29wX3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiI+Z3N0X29iamVjdF91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBpcGVsaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMi44LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sI3BsdWdpbi1hdWRpb2Z4Ij5hdWRpb2Z4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjIuOC42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0lJUkZpbHRlci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEF1ZGlvSUlSRmlsdGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXVkaW9JSVJGaWx0ZXI7PC9wcmU+Ci08cD5PcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9JSVJGaWx0ZXItLWEiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxh4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxh4oCdICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWx0ZXIgY29lZmZpY2llbnRzIChkZW5vbWluYXRvciBvZiB0cmFuc2ZlciBmdW5jdGlvbikuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9JSVJGaWx0ZXItLWIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxi4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxi4oCdICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWx0ZXIgY29lZmZpY2llbnRzIChudW1lcmF0b3Igb2YgdHJhbnNmZXIgZnVuY3Rpb24pLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvSUlSRmlsdGVyLXJhdGUtY2hhbmdlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJhdGUtY2hhbmdlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwjR3N0QXVkaW9JSVJGaWx0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0lJUkZpbHRlcjwvc3Bhbj48L2E+ICpmaWx0ZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICByYXRlLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPldpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBzYW1wbGluZyByYXRlIGNoYW5nZXMuIFRoZSBjYWxsYmFja3MKLXdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgYW5kIHByb2Nlc3Npbmcgd2lsbAotc3RvcCB1bnRpbCB0aGUgZXZlbnQgaXMgaGFuZGxlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RBdWRpb0lJUkZpbHRlci1yYXRlLWNoYW5nZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmlsdGVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGZpbHRlciBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgc2FtcGxpbmcgcmF0ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTMzYzRkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdWRpb2ludmVydDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2lpcmZpbHRlci5odG1sIiB0aXRsZT0iYXVkaW9paXJmaWx0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwiIHRpdGxlPSJhdWRpb2thcmFva2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0LnRvcF9vZl9wYWdlIj48L2E+YXVkaW9pbnZlcnQ8L3NwYW4+PC9oMj4KLTxwPmF1ZGlvaW52ZXJ0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5odG1sI0dzdEF1ZGlvSW52ZXJ0LS1kZWdyZWUiIHRpdGxlPSJUaGUg4oCcZGVncmVl4oCdIHByb3BlcnR5Ij5kZWdyZWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBdWRpb0ludmVydCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuaHRtbCNHc3RBdWRpb0ludmVydC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QXVkaW9JbnZlcnQiPkdzdEF1ZGlvSW52ZXJ0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2ZpbHRlci5odG1sI0dzdEF1ZGlvRmlsdGVyLXN0cnVjdCI+R3N0QXVkaW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb0ludmVydAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5Td2FwcyB1cHBlciBhbmQgbG93ZXIgaGFsZiBvZiBhdWRpbyBzYW1wbGVzLiBNaXhpbmcgYW4gaW52ZXJ0ZWQgc2FtcGxlIG9uIHRvcCBvZgotdGhlIG9yaWdpbmFsIHdpdGggYSBzbGlnaHQgZGVsYXkgY2FuIHByb2R1Y2UgZWZmZWN0cyB0aGF0IHNvdW5kIGxpa2UgcmVzb25hbmNlLgotQ3JlYXRpbmcgYSBzdGVyZW8gc2FtcGxlIGZyb20gYSBtb25vIHNvdXJjZSwgd2l0aCBvbmUgY2hhbm5lbCBpbnZlcnRlZCBwcm9kdWNlcyB3aWRlLXN0ZXJlbyBzb3VuZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzLjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgd2F2ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNhdyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9pbnZlcnQgZGVncmVlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC40PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O21lbG8xLm9nZyZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9pbnZlcnQgZGVncmVlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC40PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIHdhdmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zYXcgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9pbnZlcnQgZGVncmVlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC40PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb2Z4Lmh0bWwjcGx1Z2luLWF1ZGlvZngiPmF1ZGlvZng8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjMuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKXsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZCB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0ludmVydC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEF1ZGlvSW52ZXJ0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXVkaW9JbnZlcnQ7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0ludmVydC0tZGVncmVlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVncmVl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZWdyZWXigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RGVncmVlIG9mIGludmVyc2lvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmM2FkZWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdWRpb2thcmFva2U6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuaHRtbCIgdGl0bGU9ImF1ZGlvaW52ZXJ0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCIgdGl0bGU9ImF1ZGlvcGFub3JhbWEiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaW52ZXJ0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLnRvcF9vZl9wYWdlIj48L2E+YXVkaW9rYXJhb2tlPC9zcGFuPjwvaDI+Ci08cD5hdWRpb2thcmFva2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5odG1sI0dzdEF1ZGlvS2FyYW9rZS0tZmlsdGVyLWJhbmQiIHRpdGxlPSJUaGUg4oCcZmlsdGVyLWJhbmTigJ0gcHJvcGVydHkiPmZpbHRlci1iYW5kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwjR3N0QXVkaW9LYXJhb2tlLS1maWx0ZXItd2lkdGgiIHRpdGxlPSJUaGUg4oCcZmlsdGVyLXdpZHRo4oCdIHByb3BlcnR5Ij5maWx0ZXItd2lkdGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCNHc3RBdWRpb0thcmFva2UtLWxldmVsIiB0aXRsZT0iVGhlIOKAnGxldmVs4oCdIHByb3BlcnR5Ij5sZXZlbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5odG1sI0dzdEF1ZGlvS2FyYW9rZS0tbW9uby1sZXZlbCIgdGl0bGU9IlRoZSDigJxtb25vLWxldmVs4oCdIHByb3BlcnR5Ij5tb25vLWxldmVsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBdWRpb0thcmFva2UiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCNHc3RBdWRpb0thcmFva2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEF1ZGlvS2FyYW9rZSI+R3N0QXVkaW9LYXJhb2tlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9maWx0ZXIuaHRtbCNHc3RBdWRpb0ZpbHRlci1zdHJ1Y3QiPkdzdEF1ZGlvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9LYXJhb2tlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5SZW1vdmUgdGhlIHZvaWNlIGZyb20gYXVkaW8gYnkgZmlsdGVyaW5nIHRoZSBjZW50ZXIgY2hhbm5lbC4KLVRoaXMgcGx1Z2luIGlzIHVzZWZ1bCBmb3Iga2FyYW9rZSBhcHBsaWNhdGlvbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0LjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c29uZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9rYXJhb2tlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCNwbHVnaW4tYXVkaW9meCI+YXVkaW9meDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMywgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMywgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0thcmFva2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBdWRpb0thcmFva2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb0thcmFva2U7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9LYXJhb2tlLS1maWx0ZXItYmFuZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZpbHRlci1iYW5k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmaWx0ZXItYmFuZOKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIEZyZXF1ZW5jeSBiYW5kIG9mIHRoZSBmaWx0ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw0NDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjIwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0thcmFva2UtLWZpbHRlci13aWR0aCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZpbHRlci13aWR0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmlsdGVyLXdpZHRo4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBGcmVxdWVuY3kgd2lkdGggb2YgdGhlIGZpbHRlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvS2FyYW9rZS0tbGV2ZWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsZXZlbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGV2ZWzigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkxldmVsIG9mIHRoZSBlZmZlY3QgKDEuMCA9IGZ1bGwpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb0thcmFva2UtLW1vbm8tbGV2ZWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb25vLWxldmVs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb25vLWxldmVs4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TGV2ZWwgb2YgdGhlIG1vbm8gY2hhbm5lbCAoMS4wID0gZnVsbCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTM0NjEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXVkaW9wYW5vcmFtYTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCIgdGl0bGU9ImF1ZGlva2FyYW9rZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jYmFuZC5odG1sIiB0aXRsZT0iYXVkaW93c2luY2JhbmQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlva2FyYW9rZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS50b3Bfb2ZfcGFnZSI+PC9hPmF1ZGlvcGFub3JhbWE8L3NwYW4+PC9oMj4KLTxwPmF1ZGlvcGFub3JhbWE8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLmh0bWwjR3N0QXVkaW9QYW5vcmFtYS0tcGFub3JhbWEiIHRpdGxlPSJUaGUg4oCccGFub3JhbWHigJ0gcHJvcGVydHkiPnBhbm9yYW1hPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLmh0bWwjR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCIgdGl0bGU9ImVudW0gR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF1ZGlvUGFub3JhbWFNZXRob2Q8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS5odG1sI0dzdEF1ZGlvUGFub3JhbWEtLW1ldGhvZCIgdGl0bGU9IlRoZSDigJxtZXRob2TigJ0gcHJvcGVydHkiPm1ldGhvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0QXVkaW9QYW5vcmFtYSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCNHc3RBdWRpb1Bhbm9yYW1hLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdWRpb1Bhbm9yYW1hIj5Hc3RBdWRpb1Bhbm9yYW1hPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLmh0bWwjR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCIgdGl0bGU9ImVudW0gR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCI+R3N0QXVkaW9QYW5vcmFtYU1ldGhvZDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb1Bhbm9yYW1hCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+U3RlcmVvIHBhbm9yYW1hIGVmZmVjdCB3aXRoIGNvbnRyb2xsYWJsZSBwYW4gcG9zaXRpb24uIE9uZSBjYW4gY2hvb3NlIGJldHdlZW4gdGhlIGRlZmF1bHQgcHN5Y2hvYWNvdXN0aWMgcGFubmluZyBtZXRob2QsCi13aGljaCBrZWVwcyB0aGUgc2FtZSBwZXJjZWl2ZWQgbG91ZG5lc3MsIGFuZCBhIHNpbXBsZSBwYW5uaW5nIG1ldGhvZCB0aGF0IGp1c3QgY29udHJvbHMgdGhlIHZvbHVtZSBvbiBvbmUgY2hhbm5lbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjUuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyB3YXZlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2F3IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Bhbm9yYW1hIHBhbm9yYW1hPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bWVsbzEub2dnJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Bhbm9yYW1hIHBhbm9yYW1hPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgd2F2ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNhdyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Bhbm9yYW1hIHBhbm9yYW1hPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rCi1nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyB3YXZlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2F3IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcGFub3JhbWEgbWV0aG9kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2ltcGxlIHBhbm9yYW1hPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuNTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjUuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCNwbHVnaW4tYXVkaW9meCI+YXVkaW9meDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlN0ZWZhbiBLb3N0ICZsdDtlbnNvbmljQHVzZXJzLnNmLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNS43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIFMxNkxFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMiwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvUGFub3JhbWEtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBdWRpb1Bhbm9yYW1hPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXVkaW9QYW5vcmFtYTs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCI+PC9hPjxoMz5lbnVtIEdzdEF1ZGlvUGFub3JhbWFNZXRob2Q8L2gzPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0QXVkaW9QYW5vcmFtYU1ldGhvZC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9Ik1FVEhPRC1QU1lDSE9BQ09VU1RJQzpDQVBTIj48L2E+TUVUSE9EX1BTWUNIT0FDT1VTVElDPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9Ik1FVEhPRC1TSU1QTEU6Q0FQUyI+PC9hPk1FVEhPRF9TSU1QTEU8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvUGFub3JhbWEtLXBhbm9yYW1hIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFub3JhbWHigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBhbm9yYW1h4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Qb3NpdGlvbiBpbiBzdGVyZW8gcGFub3JhbWEgKC0xLjAgbGVmdCAtJmd0OyAxLjAgcmlnaHQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0xLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9QYW5vcmFtYS0tbWV0aG9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtZXRob2TigJ0gICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3Bhbm9yYW1hLmh0bWwjR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCIgdGl0bGU9ImVudW0gR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF1ZGlvUGFub3JhbWFNZXRob2Q8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGFubmluZyBtZXRob2Q6IHBzeWNob2Fjb3VzdGljIG1vZGUga2VlcHMgdGhlIHNhbWUgcGVyY2VpdmVkIGxvdWRuZXNzLAotd2hpbGUgc2ltcGxlIG1vZGUganVzdCBjb250cm9scyB0aGUgdm9sdW1lIG9mIG9uZSBjaGFubmVsLiBJdCdzIG1lcmVseQotYSBtYXR0ZXIgb2YgdGFzdGUgd2hpY2ggbWV0aG9kIHNob3VsZCBiZSBjaG9zZW4uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFBzeWNob2Fjb3VzdGljIFBhbm5pbmcgKGRlZmF1bHQpPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jYmFuZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNTBkMWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmF1ZGlvd3NpbmNiYW5kOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCIgdGl0bGU9ImF1ZGlvcGFub3JhbWEiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Lmh0bWwiIHRpdGxlPSJhdWRpb3dzaW5jbGltaXQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvcGFub3JhbWEuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQudG9wX29mX3BhZ2UiPjwvYT5hdWRpb3dzaW5jYmFuZDwvc3Bhbj48L2gyPgotPHA+YXVkaW93c2luY2JhbmQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC0tbG93ZXItZnJlcXVlbmN5IiB0aXRsZT0iVGhlIOKAnGxvd2VyLWZyZXF1ZW5jeeKAnSBwcm9wZXJ0eSI+bG93ZXItZnJlcXVlbmN5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC0tdXBwZXItZnJlcXVlbmN5IiB0aXRsZT0iVGhlIOKAnHVwcGVyLWZyZXF1ZW5jeeKAnSBwcm9wZXJ0eSI+dXBwZXItZnJlcXVlbmN5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF1ZGlvV1NpbmNCYW5kTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwjR3N0QXVkaW9XU2luY0JhbmQtLW1vZGUiIHRpdGxlPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSI+bW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb1dTaW5jQmFuZFdpbmRvdzwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwjR3N0QXVkaW9XU2luY0JhbmQtLXdpbmRvdyIgdGl0bGU9IlRoZSDigJx3aW5kb3figJ0gcHJvcGVydHkiPndpbmRvdzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC0tbGVuZ3RoIiB0aXRsZT0iVGhlIOKAnGxlbmd0aOKAnSBwcm9wZXJ0eSI+bGVuZ3RoPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jQmFuZCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jYmFuZC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCNHc3RBdWRpb1dTaW5jQmFuZC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0QXVkaW9XU2luY0JhbmQiPkdzdEF1ZGlvV1NpbmNCYW5kPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2ZpbHRlci5odG1sI0dzdEF1ZGlvRmlsdGVyLXN0cnVjdCI+R3N0QXVkaW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1ZGlvV1NpbmNCYW5kCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkF0dGVudWF0ZXMgYWxsIGZyZXF1ZW5jaWVzIG91dHNpZGUgKGJhbmRwYXNzKSBvciBpbnNpZGUgKGJhbmRyZWplY3QpIG9mIGEgZnJlcXVlbmN5Ci1iYW5kLiBUaGUgbGVuZ3RoIHBhcmFtZXRlciBjb250cm9scyB0aGUgcm9sbG9mZiwgdGhlIHdpbmRvdyBwYXJhbWV0ZXIKLWNvbnRyb2xzIHJvbGxvZmYgYW5kIHN0b3BiYW5kIGF0dGVudWF0aW9uLiBUaGUgSGFtbWluZyB3aW5kb3cgcHJvdmlkZXMgYSBmYXN0ZXIgcm9sbG9mZiBidXQgYSBiaXQKLXdvcnNlIHN0b3BiYW5kIGF0dGVudWF0aW9uLCB0aGUgb3RoZXIgd2F5IGFyb3VuZCBmb3IgdGhlIEJsYWNrbWFuIHdpbmRvdy48L3A+Ci08cD5UaGlzIGVsZW1lbnQgaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciB0aGUgQ2hlYnlzaGV2IGJhbmRwYXNzIGFuZCBiYW5kcmVqZWN0IGZpbHRlciB0aGF0IGl0IGhhcwotYSBtdWNoIGJldHRlciByb2xsb2ZmIHdoZW4gdXNpbmcgYSBsYXJnZXIga2VybmVsIHNpemUgYW5kIGFsbW9zdCBsaW5lYXIgcGhhc2UuIFRoZSBvbmx5Ci1kaXNhZHZhbnRhZ2UgaXMgdGhlIG11Y2ggc2xvd2VyIGV4ZWN1dGlvbiB0aW1lIHdpdGggbGFyZ2VyIGtlcm5lbHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI2LjcuNCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgZnJlcTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE1MDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvd3NpbmNiYW5kIG1vZGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5iYW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cGFzcyBsb3dlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmZyZXF1ZW5jeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMwMDA8L3NwYW4+IHVwcGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+ZnJlcXVlbmN5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDA8L3NwYW4+IGxlbmd0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMTwvc3Bhbj4gd2luZG93PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+YmxhY2ttYW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O21lbG8xLm9nZyZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW93c2luY2JhbmQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJhbmQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yZWplY3QgbG93ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5mcmVxdWVuY3k8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41OTwvc3Bhbj4gdXBwZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5mcmVxdWVuY3k8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj42MTwvc3Bhbj4gbGVuZ3RoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDE8L3NwYW4+IHdpbmRvdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmhhbW1pbmcgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIHdhdmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj53aGl0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm5vaXNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvd3NpbmNiYW5kIG1vZGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5iYW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cGFzcyBsb3dlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmZyZXF1ZW5jeTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDA8L3NwYW4+IHVwcGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+ZnJlcXVlbmN5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjAwMDwvc3Bhbj4gbGVuZ3RoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjYuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCNwbHVnaW4tYXVkaW9meCI+YXVkaW9meDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDssIFN0ZXZlbiBXLiBTbWl0aCwgRHJlYW1sYWIgVGVjaG5vbG9naWVzIEx0ZC4gJmx0O21hdGhpcy5ob2ZlckBkcmVhbWxhYi5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNi43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jYmFuZC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvV1NpbmNCYW5kLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QXVkaW9XU2luY0JhbmQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdWRpb1dTaW5jQmFuZDs8L3ByZT4KLTxwPk9wYXF1ZSBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jQmFuZC0tbG93ZXItZnJlcXVlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG93ZXItZnJlcXVlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb3dlci1mcmVxdWVuY3nigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q3V0LW9mZiBsb3dlciBmcmVxdWVuY3kgKEh6KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMDAwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jQmFuZC0tdXBwZXItZnJlcXVlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXBwZXItZnJlcXVlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1cHBlci1mcmVxdWVuY3nigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q3V0LW9mZiB1cHBlciBmcmVxdWVuY3kgKEh6KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMDAwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jQmFuZC0tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vZGXigJ0gICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9XU2luY0JhbmRNb2RlPC9zcGFuPjwvcHJlPgotPHA+QmFuZCBwYXNzIG9yIGJhbmQgcmVqZWN0IG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEJhbmQgcGFzcyAoZGVmYXVsdCk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvV1NpbmNCYW5kLS13aW5kb3ciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx3aW5kb3figJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHdpbmRvd+KAnSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9XU2luY0JhbmRXaW5kb3c8L3NwYW4+PC9wcmU+Ci08cD5XaW5kb3cgZnVuY3Rpb24gdG8gdXNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBIYW1taW5nIHdpbmRvdyAoZGVmYXVsdCk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1ZGlvV1NpbmNCYW5kLS1sZW5ndGgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsZW5ndGjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxlbmd0aOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkZpbHRlciBrZXJuZWwgbGVuZ3RoLCB3aWxsIGJlIHJvdW5kZWQgdG8gdGhlIG5leHQgb2RkIG51bWJlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFszLDI1NjAwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTY5NWExLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXVkaW93c2luY2xpbWl0OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwiIHRpdGxlPSJhdWRpb3dzaW5jYmFuZCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXBhcnNlLmh0bWwiIHRpdGxlPSJhdXBhcnNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jYmFuZC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC50b3Bfb2ZfcGFnZSI+PC9hPmF1ZGlvd3NpbmNsaW1pdDwvc3Bhbj48L2gyPgotPHA+YXVkaW93c2luY2xpbWl0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sI0dzdEF1ZGlvV1NpbmNMaW1pdC0tbGVuZ3RoIiB0aXRsZT0iVGhlIOKAnGxlbmd0aOKAnSBwcm9wZXJ0eSI+bGVuZ3RoPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEF1ZGlvV1NpbmNMaW1pdE1vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCNHc3RBdWRpb1dTaW5jTGltaXQtLW1vZGUiIHRpdGxlPSJUaGUg4oCcbW9kZeKAnSBwcm9wZXJ0eSI+bW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb1dTaW5jTGltaXRXaW5kb3c8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCNHc3RBdWRpb1dTaW5jTGltaXQtLXdpbmRvdyIgdGl0bGU9IlRoZSDigJx3aW5kb3figJ0gcHJvcGVydHkiPndpbmRvdzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sI0dzdEF1ZGlvV1NpbmNMaW1pdC0tY3V0b2ZmIiB0aXRsZT0iVGhlIOKAnGN1dG9mZuKAnSBwcm9wZXJ0eSI+Y3V0b2ZmPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jTGltaXQiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCNHc3RBdWRpb1dTaW5jTGltaXQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEF1ZGlvV1NpbmNMaW1pdCI+R3N0QXVkaW9XU2luY0xpbWl0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9maWx0ZXIuaHRtbCNHc3RBdWRpb0ZpbHRlci1zdHJ1Y3QiPkdzdEF1ZGlvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb1dTaW5jTGltaXQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkF0dGVudWF0ZXMgYWxsIGZyZXF1ZW5jaWVzIGFib3ZlIHRoZSBjdXRvZmYgZnJlcXVlbmN5IChsb3ctcGFzcykgb3IgYWxsIGZyZXF1ZW5jaWVzIGJlbG93IHRoZQotY3V0b2ZmIGZyZXF1ZW5jeSAoaGlnaC1wYXNzKS4gVGhlIGxlbmd0aCBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIHJvbGxvZmYsIHRoZSB3aW5kb3cgcGFyYW1ldGVyCi1jb250cm9scyByb2xsb2ZmIGFuZCBzdG9wYmFuZCBhdHRlbnVhdGlvbi4gVGhlIEhhbW1pbmcgd2luZG93IHByb3ZpZGVzIGEgZmFzdGVyIHJvbGxvZmYgYnV0IGEgYml0Ci13b3JzZSBzdG9wYmFuZCBhdHRlbnVhdGlvbiwgdGhlIG90aGVyIHdheSBhcm91bmQgZm9yIHRoZSBCbGFja21hbiB3aW5kb3cuPC9wPgotPHA+VGhpcyBlbGVtZW50IGhhcyB0aGUgYWR2YW50YWdlIG92ZXIgdGhlIENoZWJ5c2hldiBsb3dwYXNzIGFuZCBoaWdocGFzcyBmaWx0ZXIgdGhhdCBpdCBoYXMKLWEgbXVjaCBiZXR0ZXIgcm9sbG9mZiB3aGVuIHVzaW5nIGEgbGFyZ2VyIGtlcm5lbCBzaXplIGFuZCBhbG1vc3QgbGluZWFyIHBoYXNlLiBUaGUgb25seQotZGlzYWR2YW50YWdlIGlzIHRoZSBtdWNoIHNsb3dlciBleGVjdXRpb24gdGltZSB3aXRoIGxhcmdlciBrZXJuZWxzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNy43LjQiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTM8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIGZyZXE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xNTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3dzaW5jbGltaXQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmxvdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnBhc3MgY3V0b2ZmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDwvc3Bhbj4gbGVuZ3RoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAxPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luawotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bWVsbzEub2dnJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3dzaW5jbGltaXQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmhpZ2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wYXNzIGN1dG9mZjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE1MDAwPC9zcGFuPiBsZW5ndGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rCi1nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyB3YXZlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+d2hpdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5ub2lzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3dzaW5jbGltaXQgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmxvdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnBhc3MgY3V0b2ZmPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDwvc3Bhbj4gbGVuZ3RoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDE8L3NwYW4+IHdpbmRvdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJsYWNrbWFuIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjcuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCNwbHVnaW4tYXVkaW9meCI+YXVkaW9meDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDssIFN0ZXZlbiBXLiBTbWl0aCwgRHJlYW1sYWIgVGVjaG5vbG9naWVzIEx0ZC4gJmx0O21hdGhpcy5ob2ZlckBkcmVhbWxhYi5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNy43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9XU2luY0xpbWl0LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0QXVkaW9XU2luY0xpbWl0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXVkaW9XU2luY0xpbWl0OzwvcHJlPgotPHA+T3BhcXVlIGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2xpbWl0LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jTGltaXQtLWxlbmd0aCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxlbmd0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGVuZ3Ro4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RmlsdGVyIGtlcm5lbCBsZW5ndGgsIHdpbGwgYmUgcm91bmRlZCB0byB0aGUgbmV4dCBvZGQgbnVtYmVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzMsMjU2MDAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9XU2luY0xpbWl0LS1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9kZeKAnSAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb1dTaW5jTGltaXRNb2RlPC9zcGFuPjwvcHJlPgotPHA+TG93IHBhc3Mgb3IgaGlnaCBwYXNzIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IExvdyBwYXNzIChkZWZhdWx0KTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXVkaW9XU2luY0xpbWl0LS13aW5kb3ciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx3aW5kb3figJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHdpbmRvd+KAnSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9XU2luY0xpbWl0V2luZG93PC9zcGFuPjwvcHJlPgotPHA+V2luZG93IGZ1bmN0aW9uIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogSGFtbWluZyB3aW5kb3cgKGRlZmF1bHQpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdWRpb1dTaW5jTGltaXQtLWN1dG9mZiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGN1dG9mZuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3V0b2Zm4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkN1dC1vZmYgRnJlcXVlbmN5IChIeikuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDAwMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVwYXJzZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ0MWQ5OC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVwYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdXBhcnNlOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sIiB0aXRsZT0iYXVkaW93c2luY2xpbWl0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCIgdGl0bGU9ImF1dG9hdWRpb3NpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXBhcnNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNsaW1pdC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVwYXJzZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXBhcnNlLnRvcF9vZl9wYWdlIj48L2E+YXVwYXJzZTwvc3Bhbj48L2gyPgotPHA+YXVwYXJzZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RBdVBhcnNlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCNHc3RBdVBhcnNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdVBhcnNlIj5Hc3RBdVBhcnNlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVwYXJzZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXVQYXJzZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXBhcnNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBhcnNlcyAuYXUgZmlsZXMgbW9zdGx5IG9yaWdpbmF0aW5nIGZyb20gc3VuIG9zIGJhc2VkIGNvbXB1dGVycy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI4LjYuMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlLmh0bWwjcGx1Z2luLWF1cGFyc2UiPmF1cGFyc2U8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZW11eGVyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI4LjYuMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWF1PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMxNkJFLCBTMjRMRSwgUzI0QkUsIFMzMkxFLCBTMzJCRSwgRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpMSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMxNkJFLCBTMjRMRSwgUzI0QkUsIFMzMkxFLCBTMzJCRSwgRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMywgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFsYXcsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyl7IGc3MjEsIGc3MjIsIGc3MjNfMywgZzcyM181IH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1UGFyc2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBdVBhcnNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXVQYXJzZTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyNDEzNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdXRvYXVkaW9zaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCIgdGl0bGU9ImF1cGFyc2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmh0bWwiIHRpdGxlPSJhdXRvYXVkaW9zcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1cGFyc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLnRvcF9vZl9wYWdlIj48L2E+YXV0b2F1ZGlvc2luazwvc3Bhbj48L2gyPgotPHA+YXV0b2F1ZGlvc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCNHc3RBdXRvQXVkaW9TaW5rLS10cy1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcdHMtb2Zmc2V04oCdIHByb3BlcnR5Ij50cy1vZmZzZXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sI0dzdEF1dG9BdWRpb1NpbmstLXN5bmMiIHRpdGxlPSJUaGUg4oCcc3luY+KAnSBwcm9wZXJ0eSI+c3luYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0QXV0b0F1ZGlvU2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCNHc3RBdXRvQXVkaW9TaW5rLXN0cnVjdCIgdGl0bGU9IkdzdEF1dG9BdWRpb1NpbmsiPkdzdEF1dG9BdWRpb1Npbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdXRvRGV0ZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdXRvQXVkaW9TaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0QXV0b0F1ZGlvU2luayBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5hdXRvYXVkaW9zaW5rIGlzIGFuIGF1ZGlvIHNpbmsgdGhhdCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW4gYXBwcm9wcmlhdGUKLWF1ZGlvIHNpbmsgdG8gdXNlLiAgSXQgZG9lcyBzbyBieSBzY2FubmluZyB0aGUgcmVnaXN0cnkgZm9yIGFsbCBlbGVtZW50cwotdGhhdCBoYXZlIDxzcGFuIGNsYXNzPSJxdW90ZSI+4oCcPHNwYW4gY2xhc3M9InF1b3RlIj5TaW5rPC9zcGFuPuKAnTwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJxdW90ZSI+4oCcPHNwYW4gY2xhc3M9InF1b3RlIj5BdWRpbzwvc3Bhbj7igJ08L3NwYW4+IGluIHRoZSBjbGFzcyBmaWVsZAotb2YgdGhlaXIgZWxlbWVudCBpbmZvcm1hdGlvbiwgYW5kIGFsc28gaGF2ZSBhIG5vbi16ZXJvIGF1dG9wbHVnZ2luZyByYW5rLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yOS44LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5tIGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjkuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1dG9kZXRlY3QuaHRtbCNwbHVnaW4tYXV0b2RldGVjdCI+YXV0b2RldGVjdDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG5vcmFpc2luLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yOS44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdXRvQXVkaW9TaW5rLXN0cnVjdCI+PC9hPjxoMz5Hc3RBdXRvQXVkaW9TaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QXV0b0F1ZGlvU2luayBHc3RBdXRvQXVkaW9TaW5rOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdXRvQXVkaW9TaW5rLS10cy1vZmZzZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0cy1vZmZzZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRzLW9mZnNldOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaW1lc3RhbXAgb2Zmc2V0IGluIG5hbm9zZWNvbmRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdXRvQXVkaW9TaW5rLS1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3luY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3luY+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TeW5jIG9uIHRoZSBjbG9jay48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5hdXRvdmlkZW9zaW5rLCBhbHNhc2luaywgb3Nzc2luazwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTVkOTJkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXV0b2F1ZGlvc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCIgdGl0bGU9ImF1dG9hdWRpb3NpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sIiB0aXRsZT0iYXV0b3ZpZGVvc2luayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NyYy50b3Bfb2ZfcGFnZSI+PC9hPmF1dG9hdWRpb3NyYzwvc3Bhbj48L2gyPgotPHA+YXV0b2F1ZGlvc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEF1dG9BdWRpb1NyYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmh0bWwjR3N0QXV0b0F1ZGlvU3JjLXN0cnVjdCIgdGl0bGU9IkdzdEF1dG9BdWRpb1NyYyI+R3N0QXV0b0F1ZGlvU3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdXRvRGV0ZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdXRvQXVkaW9TcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEF1dG9BdWRpb1NyYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPmF1dG9hdWRpb3NyYyBpcyBhbiBhdWRpbyBzb3VyY2UgdGhhdCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW4gYXBwcm9wcmlhdGUKLWF1ZGlvIHNvdXJjZSB0byB1c2UuICBJdCBkb2VzIHNvIGJ5IHNjYW5uaW5nIHRoZSByZWdpc3RyeSBmb3IgYWxsIGVsZW1lbnRzCi10aGF0IGhhdmUgPHNwYW4gY2xhc3M9InF1b3RlIj7igJw8c3BhbiBjbGFzcz0icXVvdGUiPlNvdXJjZTwvc3Bhbj7igJ08L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0icXVvdGUiPuKAnDxzcGFuIGNsYXNzPSJxdW90ZSI+QXVkaW88L3NwYW4+4oCdPC9zcGFuPiBpbiB0aGUgY2xhc3MgZmllbGQKLW9mIHRoZWlyIGVsZW1lbnQgaW5mb3JtYXRpb24sIGFuZCBhbHNvIGhhdmUgYSBub24temVybyBhdXRvcGx1Z2dpbmcgcmFuay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzAuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bSBhdXRvYXVkaW9zcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b2F1ZGlvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMwLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwjcGx1Z2luLWF1dG9kZXRlY3QiPmF1dG9kZXRlY3Q8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBub3JhaXNpbi5uZXQmZ3Q7LCBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zMC43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1dG9BdWRpb1NyYy1zdHJ1Y3QiPjwvYT48aDM+R3N0QXV0b0F1ZGlvU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QXV0b0F1ZGlvU3JjIEdzdEF1dG9BdWRpb1NyYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPmF1dG92aWRlb3NyYywgYWxzYXNyYywgb3Nzc3JjPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzZDk2ZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdXRvdmlkZW9zaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NyYy5odG1sIiB0aXRsZT0iYXV0b2F1ZGlvc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5odG1sIiB0aXRsZT0iYXV0b3ZpZGVvc3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvYXVkaW9zcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLnRvcF9vZl9wYWdlIj48L2E+YXV0b3ZpZGVvc2luazwvc3Bhbj48L2gyPgotPHA+YXV0b3ZpZGVvc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaHRtbCNHc3RBdXRvVmlkZW9TaW5rLS10cy1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcdHMtb2Zmc2V04oCdIHByb3BlcnR5Ij50cy1vZmZzZXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sI0dzdEF1dG9WaWRlb1NpbmstLXN5bmMiIHRpdGxlPSJUaGUg4oCcc3luY+KAnSBwcm9wZXJ0eSI+c3luYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0QXV0b1ZpZGVvU2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaHRtbCNHc3RBdXRvVmlkZW9TaW5rLXN0cnVjdCIgdGl0bGU9IkdzdEF1dG9WaWRlb1NpbmsiPkdzdEF1dG9WaWRlb1Npbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdXRvRGV0ZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdXRvVmlkZW9TaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0QXV0b1ZpZGVvU2luayBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5hdXRvdmlkZW9zaW5rIGlzIGEgdmlkZW8gc2luayB0aGF0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhbiBhcHByb3ByaWF0ZQotdmlkZW8gc2luayB0byB1c2UuICBJdCBkb2VzIHNvIGJ5IHNjYW5uaW5nIHRoZSByZWdpc3RyeSBmb3IgYWxsIGVsZW1lbnRzCi10aGF0IGhhdmUgPHNwYW4gY2xhc3M9InF1b3RlIj7igJw8c3BhbiBjbGFzcz0icXVvdGUiPlNpbms8L3NwYW4+4oCdPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9InF1b3RlIj7igJw8c3BhbiBjbGFzcz0icXVvdGUiPlZpZGVvPC9zcGFuPuKAnTwvc3Bhbj4gaW4gdGhlIGNsYXNzIGZpZWxkCi1vZiB0aGVpciBlbGVtZW50IGluZm9ybWF0aW9uLCBhbmQgYWxzbyBoYXZlIGEgbm9uLXplcm8gYXV0b3BsdWdnaW5nIHJhbmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMxLjguMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm0gdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzEuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1dG9kZXRlY3QuaHRtbCNwbHVnaW4tYXV0b2RldGVjdCI+YXV0b2RldGVjdDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG5vcmFpc2luLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zMS44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdXRvVmlkZW9TaW5rLXN0cnVjdCI+PC9hPjxoMz5Hc3RBdXRvVmlkZW9TaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QXV0b1ZpZGVvU2luayBHc3RBdXRvVmlkZW9TaW5rOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdXRvVmlkZW9TaW5rLS10cy1vZmZzZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0cy1vZmZzZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRzLW9mZnNldOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaW1lc3RhbXAgb2Zmc2V0IGluIG5hbm9zZWNvbmRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdXRvVmlkZW9TaW5rLS1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3luY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3luY+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TeW5jIG9uIHRoZSBjbG9jay48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5hdXRvYXVkaW9zaW5rLCB4aW1hZ2VzaW5rLCB4dmltYWdlc2luaywgc2RsdmlkZW9zaW5rPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMGMxM2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdXRvdmlkZW9zcmM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sIiB0aXRsZT0iYXV0b3ZpZGVvc2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5odG1sIiB0aXRsZT0iYXZpZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLnRvcF9vZl9wYWdlIj48L2E+YXV0b3ZpZGVvc3JjPC9zcGFuPjwvaDI+Ci08cD5hdXRvdmlkZW9zcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0QXV0b1ZpZGVvU3JjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaHRtbCNHc3RBdXRvVmlkZW9TcmMtc3RydWN0IiB0aXRsZT0iR3N0QXV0b1ZpZGVvU3JjIj5Hc3RBdXRvVmlkZW9TcmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij5Hc3RCaW48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1dG9EZXRlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1dG9WaWRlb1NyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0QXV0b1ZpZGVvU3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0Ij5Hc3RDaGlsZFByb3h5PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+YXV0b3ZpZGVvc3JjIGlzIGEgdmlkZW8gc3JjIHRoYXQgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuIGFwcHJvcHJpYXRlCi12aWRlbyBzb3VyY2UgdG8gdXNlLiAgSXQgZG9lcyBzbyBieSBzY2FubmluZyB0aGUgcmVnaXN0cnkgZm9yIGFsbCBlbGVtZW50cwotdGhhdCBoYXZlIDxzcGFuIGNsYXNzPSJxdW90ZSI+4oCcPHNwYW4gY2xhc3M9InF1b3RlIj5Tb3VyY2U8L3NwYW4+4oCdPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9InF1b3RlIj7igJw8c3BhbiBjbGFzcz0icXVvdGUiPlZpZGVvPC9zcGFuPuKAnTwvc3Bhbj4gaW4gdGhlIGNsYXNzIGZpZWxkCi1vZiB0aGVpciBlbGVtZW50IGluZm9ybWF0aW9uLCBhbmQgYWxzbyBoYXZlIGEgbm9uLXplcm8gYXV0b3BsdWdnaW5nIHJhbmsuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMyLjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm0gYXV0b3ZpZGVvc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4dmltYWdlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMyLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwjcGx1Z2luLWF1dG9kZXRlY3QiPmF1dG9kZXRlY3Q8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBub3JhaXNpbi5uZXQmZ3Q7LCBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zMi43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEF1dG9WaWRlb1NyYy1zdHJ1Y3QiPjwvYT48aDM+R3N0QXV0b1ZpZGVvU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QXV0b1ZpZGVvU3JjIEdzdEF1dG9WaWRlb1NyYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPmF1dG9hdWRpb3NyYywgdjRsMnNyYywgdjRsc3JjPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDNhZmM3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjgzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdmlkZW11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaHRtbCIgdGl0bGU9ImF1dG92aWRlb3NyYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXguaHRtbCIgdGl0bGU9ImF2aW11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5hdmlkZW11eDwvc3Bhbj48L2gyPgotPHA+YXZpZGVtdXg8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0QXZpRGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguaHRtbCNHc3RBdmlEZW11eC1zdHJ1Y3QiIHRpdGxlPSJHc3RBdmlEZW11eCI+R3N0QXZpRGVtdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXZpRGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RGVtdXhlcyBhbiAuYXZpIGZpbGUgaW50byByYXcgb3IgY29tcHJlc3NlZCBhdWRpbyBhbmQvb3IgdmlkZW8gc3RyZWFtcy48L3A+Ci08cD5UaGlzIGVsZW1lbnQgc3VwcG9ydHMgYm90aCBwdXNoIGFuZCBwdWxsLWJhc2VkIHNjaGVkdWxpbmcsIGRlcGVuZGluZyBvbiB0aGUKLWNhcGFiaWxpdGllcyBvZiB0aGUgdXBzdHJlYW0gZWxlbWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMzLjYuNCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dGVzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmF2aSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXZpZGVtdXggbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmRlbXV4ICBkZW11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmF1ZGlvXzAwIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b2F1ZGlvc2luayAgIGRlbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+dmlkZW9fMDAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9zY2FsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBQbGF5IChwYXJzZSBhbmQgZGVjb2RlKSBhbiAuYXZpIGZpbGUgYW5kIHRyeSB0byBvdXRwdXQgaXQgdG8KLWFuIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgc291bmRjYXJkIGFuZCB2aWRlb3NpbmsuIElmIHRoZSBBVkkgZmlsZSBjb250YWlucwotY29tcHJlc3NlZCBhdWRpbyBvciB2aWRlbyBkYXRhLCB0aGlzIHdpbGwgb25seSB3b3JrIGlmIHlvdSBoYXZlIHRoZQotcmlnaHQgZGVjb2RlciBlbGVtZW50cy9wbHVnaW5zIGluc3RhbGxlZC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zMy42LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXZpLmh0bWwjcGx1Z2luLWF2aSI+YXZpPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7LCBUaGlqcyBWZXJtZWlyICZsdDt0aGlqc3Zlcm1laXJAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZW11eGVyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjMzLjYuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LW1zdmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXMtZ3NtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFUxNkxFLCBTMjRMRSwgVTI0TEUsIFMzMkxFLCBVMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtdm9yYmlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hYzM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWR0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtbXVsYXc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXdtcywgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpbWljcm9zb2Z0LCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZHZpLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC10cnVlc3BlZWNoPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC13bWEsIHdtYXZlcnNpb249KGludCkxLCBiaXRyYXRlPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF0sIGJsb2NrX2FsaWduPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXdtYSwgd21hdmVyc2lvbj0oaW50KTIsIGJpdHJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgYmxvY2tfYWxpZ249KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtd21hLCB3bWF2ZXJzaW9uPShpbnQpMywgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC12bmQuc29ueS5hdHJhYzM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXZveHdhcmUsIHZveHdhcmV0eXBlPShpbnQpMTE3PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGs0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGszPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZHZpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vQU1SPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vQU1SLVdCPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1zaXJlbjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtb2dnLWF2aTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYXZpLXVua25vd248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnN1YnBpY3R1cmVfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zdWJwaWN0dXJlL3gteHN1YjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3VidGl0bGVfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXN1YnRpdGxlLWF2aTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW9fJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1hc3VzLCBhc3VzdmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtYXN1cywgYXN1c3ZlcnNpb249KGludCkyLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWNpcnJ1cy1sb2dpYy1hY2N1cGFrLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWNhbXN0dWRpbywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1jb21wcmVzc2VkLXl1diwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCOFAsIEJHUiwgQkdSeCB9LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWRpdngsIGRpdnh2ZXJzaW9uPShpbnQpMywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kaXZ4LCBkaXZ4dmVyc2lvbj0oaW50KTQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdHJ1ZW1vdGlvbiwgdHJ1ZXZlcnNpb249KGludCkxLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGR2dmVyc2lvbj0oaW50KTI1LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGR2dmVyc2lvbj0oaW50KTUwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWRpdngsIGRpdnh2ZXJzaW9uPShpbnQpNSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZmxhc2gtdmlkZW8sIGZsdnZlcnNpb249KGludCkxLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXZwNi1mbGFzaCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZylsdWNlbnQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NCwgdmFyaWFudD0oc3RyaW5nKWl0dSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1odWZmeXV2LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWludGVsLWgyNjMsIHZhcmlhbnQ9KHN0cmluZylpbnRlbCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaW5kZW8sIGluZGVvdmVyc2lvbj0oaW50KTMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaW5kZW8sIGluZGVvdmVyc2lvbj0oaW50KTQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaW5kZW8sIGluZGVvdmVyc2lvbj0oaW50KTUsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2MywgdmFyaWFudD0oc3RyaW5nKWxlYWQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NCwgdmFyaWFudD0oc3RyaW5nKWxlYWQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2MywgdmFyaWFudD0oc3RyaW5nKW1pY3Jvc29mdCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL2pwZWcsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbXNtcGVnLCBtc21wZWd2ZXJzaW9uPShpbnQpNDIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbXNtcGVnLCBtc21wZWd2ZXJzaW9uPShpbnQpNDMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL21wZWcsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgbXBlZ3ZlcnNpb249KGludCkxLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9tcGVnLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIG1wZWd2ZXJzaW9uPShpbnQpMiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1tc21wZWcsIG1zbXBlZ3ZlcnNpb249KGludCk0MSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1tc3poLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS9wbmcsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmxlLCBsYXlvdXQ9KHN0cmluZyltaWNyb3NvZnQsIGRlcHRoPShpbnQpWyAxLCA2NCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWluZGVvLCBpbmRlb3ZlcnNpb249KGludCkyLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9zcDV4LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXRydWVtb3Rpb24sIHRydWV2ZXJzaW9uPShpbnQpMiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1jYW10YXNpYSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC11bHRpbW90aW9uLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpVVlWWSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1hdGktdmNyLCB2Y3J2ZXJzaW9uPShpbnQpMSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1hdGktdmNyLCB2Y3J2ZXJzaW9uPShpbnQpMiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpdmRvbGl2ZSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpdml2bywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC12bW5jLCB2ZXJzaW9uPShpbnQpMSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC12cDMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NCwgdmFyaWFudD0oc3RyaW5nKXZpZGVvc29mdCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC13bXYsIHdtdnZlcnNpb249KGludCkxLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXdtdiwgd212dmVyc2lvbj0oaW50KTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtd212LCB3bXZ2ZXJzaW9uPShpbnQpMywgZm9ybWF0PShzdHJpbmcpV01WMywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gteGFuLCB3Y3ZlcnNpb249KGludCk0LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVVZMiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlWVTksIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtemxpYiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1jaW5lcGFrLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjQsIHZhcmlhbnQ9KHN0cmluZylpdHUsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbXN2aWRlb2NvZGVjLCBtc3ZpZGVvdmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2MywgdmFyaWFudD0oc3RyaW5nKXhpcmxpbmssIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZGlyYWMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZmZ2LCBmZnZ2ZXJzaW9uPShpbnQpMSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1rbXZjLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXZwNSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC12cDYsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA2LWZsYXNoLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXZwNywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC12cDgsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbWltaWMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtYXBwbGUtdmlkZW8sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdGhlb3JhLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWZyYXBzLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWFhc2MsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVjEyLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWxvY28sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtem1idiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXYyMTAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylyMjEwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtYXZpLXVua25vd248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aWRlbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXZpRGVtdXgtc3RydWN0Ij48L2E+PGgzPkdzdEF2aURlbXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0QXZpRGVtdXggR3N0QXZpRGVtdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQzNmVlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXZpbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aWRlbXV4Lmh0bWwiIHRpdGxlPSJhdmlkZW11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5odG1sIiB0aXRsZT0iYXZpc3VidGl0bGUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXgucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4LnRvcF9vZl9wYWdlIj48L2E+YXZpbXV4PC9zcGFuPjwvaDI+Ci08cD5hdmltdXg8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lmh0bWwjR3N0QXZpTXV4LS1iaWdmaWxlIiB0aXRsZT0iVGhlIOKAnGJpZ2ZpbGXigJ0gcHJvcGVydHkiPmJpZ2ZpbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RBdmlNdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmltdXguaHRtbCNHc3RBdmlNdXgtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEF2aU11eCI+R3N0QXZpTXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdmlNdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEF2aU11eCBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPkdzdFRhZ1NldHRlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPk11eGVzIHJhdyBvciBjb21wcmVzc2VkIGF1ZGlvIGFuZC9vciB2aWRlbyBzdHJlYW1zIGludG8gYW4gQVZJIGZpbGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjM0LjguMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lczwvaDM+Ci08cD4od3JpdGUgZXZlcnl0aGluZyBpbiBvbmUgbGluZSwgd2l0aG91dCB0aGUgYmFja3NsYXNoIGNoYXJhY3RlcnMpPC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHZpZGVvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjUwPC9zcGFuPiBcCi08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+J3ZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MzIwLGhlaWdodD0yNDAsZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xJzwvc3Bhbj4gXAotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj4gXAotYXVkaW90ZXN0c3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj40NDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgXAotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPidhdWRpby94LXJhdyxyYXRlPTQ0MTAwLGNoYW5uZWxzPTInPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPiBcCi1hdmltdXggbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+YXZpPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgd2lsbCBjcmVhdGUgYW4gLkFWSSBmaWxlIGNvbnRhaW5pbmcgYW4gdW5jb21wcmVzc2VkIHZpZGVvIHN0cmVhbQotd2l0aCBhIHRlc3QgcGljdHVyZSBhbmQgYW4gdW5jb21wcmVzc2VkIGF1ZGlvIHN0cmVhbSBjb250YWluaW5nIGEKLXRlc3Qgc291bmQuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTY8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdmlkZW90ZXN0c3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yNTA8L3NwYW4+IFwKLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4ndmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0zMjAsaGVpZ2h0PTI0MCxmcmFtZXJhdGU9KGZyYWN0aW9uKTI1LzEnPC9zcGFuPiBcCi08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpZGVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPiBcCi1hdWRpb3Rlc3RzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjQ0MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+J2F1ZGlvL3gtcmF3LHJhdGU9NDQxMDAsY2hhbm5lbHM9Mic8L3NwYW4+IFwKLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBsYW1lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+IFwKLWF2aW11eCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5hdmk8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyB3aWxsIGNyZWF0ZSBhbiAuQVZJIGZpbGUgY29udGFpbmluZyB0aGUgc2FtZSB0ZXN0IHZpZGVvIGFuZCBzb3VuZAotYXMgYWJvdmUsIG9ubHkgdGhhdCBib3RoIHN0cmVhbXMgd2lsbCBiZSBjb21wcmVzc2VkIHRoaXMgdGltZS4gVGhpcyB3aWxsCi1vbmx5IHdvcmsgaWYgeW91IGhhdmUgdGhlIG5lY2Vzc2FyeSBlbmNvZGVyIGVsZW1lbnRzIGluc3RhbGxlZCBvZiBjb3Vyc2UuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzQuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF2aS5odG1sI3BsdWdpbi1hdmkiPmF2aTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBtYWludGFpbmVycyAmbHQ7Z3N0cmVhbWVyLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzQuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgVTgsIFMxNkxFIH0sIHJhdGU9KGludClbIDEwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpWyAxLCAzIF0sIHJhdGU9KGludClbIDEwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXcsIHJhdGU9KGludClbIDEwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFjMywgcmF0ZT0oaW50KVsgMTAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDYgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdywgcmF0ZT0oaW50KVsgMTAwMCwgNDgwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtbXVsYXcsIHJhdGU9KGludClbIDEwMDAsIDQ4MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXdtYSwgcmF0ZT0oaW50KVsgMTAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgd21hdmVyc2lvbj0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgWVVZMiwgSTQyMCwgQkdSLCBCR1J4LCBCR1JBLCBHUkFZOCwgVVlWWSB9LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL2pwZWcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kaXZ4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgZGl2eHZlcnNpb249KGludClbIDMsIDUgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbXNtcGVnLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgbXNtcGVndmVyc2lvbj0oaW50KVsgNDEsIDQzIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9tcGVnLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgbXBlZ3ZlcnNpb249KGludCl7IDEsIDIsIDQgfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWJ5dGUtc3RyZWFtLCBhbGlnbm1lbnQ9KHN0cmluZylhdSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWR2LCB3aWR0aD0oaW50KTcyMCwgaGVpZ2h0PShpbnQpeyA1NzYsIDQ4MCB9LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1odWZmeXV2LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtd212LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd212dmVyc2lvbj0oaW50KVsgMSwgMyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UveC1qcGMsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA4LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS9wbmcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LW1zdmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdmlNdXgtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RBdmlNdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RBdmlNdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0QXZpTXV4LS1iaWdmaWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmlnZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmlnZmlsZeKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TdXBwb3J0IGZvciBvcGVuRE1MLTIuMCAoYmlnKSBBVkkgZmlsZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5YmEzOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXZpc3VidGl0bGU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lmh0bWwiIHRpdGxlPSJhdmltdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYnJlYWtteWRhdGEuaHRtbCIgdGl0bGU9ImJyZWFrbXlkYXRhIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlLnRvcF9vZl9wYWdlIj48L2E+YXZpc3VidGl0bGU8L3NwYW4+PC9oMj4KLTxwPmF2aXN1YnRpdGxlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEF2aVN1YnRpdGxlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5odG1sI0dzdEF2aVN1YnRpdGxlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RBdmlTdWJ0aXRsZSI+R3N0QXZpU3VidGl0bGU8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0QXZpU3VidGl0bGUKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjM1LjYuMiI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxwPgotUGFyc2VzIHRoZSBzdWJ0aXRsZSBzdHJlYW0gZnJvbSBhbiBhdmkgZmlsZS4KLTwvcD4KLTxwPgotPC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1zdWJ0aXRsZS5hdmkgISBhdmlkZW11eCBuYW1lPWRlbXV4ICEgcXVldWUgISBhdmlzdWJ0aXRsZSAhIHN1YnBhcnNlICEgdGV4dG92ZXJsYXkgbmFtZT1vdmVybGF5ICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luayBkZW11eC4gISBxdWV1ZSAhIGRlY29kZWJpbiAhIG92ZXJsYXkuCi08L3ByZT4KLTxwPgotVGhpcyBwbGF5cyBhbiBhdmkgZmlsZSB3aXRoIGEgdmlkZW8gYW5kIHN1YnRpdGxlIHN0cmVhbS4KLTwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zNS42LjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXZpLmh0bWwjcGx1Z2luLWF2aSI+YXZpPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGhpanMgVmVybWVpciAmbHQ7dGhpanN2ZXJtZWlyQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGFyc2VyL1N1YnRpdGxlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjM1LjYuMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXN1YnRpdGxlLWF2aTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1zdWJ0aXRsZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RBdmlTdWJ0aXRsZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEF2aVN1YnRpdGxlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0QXZpU3VidGl0bGU7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYnJlYWtteWRhdGEuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyMWFhNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYnJlYWtteWRhdGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YnJlYWtteWRhdGE6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpc3VidGl0bGUuaHRtbCIgdGl0bGU9ImF2aXN1YnRpdGxlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmh0bWwiIHRpdGxlPSJjYWNhc2luayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYnJlYWtteWRhdGEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLnRvcF9vZl9wYWdlIj48L2E+YnJlYWtteWRhdGE8L3NwYW4+PC9oMj4KLTxwPmJyZWFrbXlkYXRhPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1icmVha215ZGF0YS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbW9kaWZpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgaXQgaXMgcGFzc2VkIHJhbmRvbWx5Ci1hY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgc2V0LgotSXQgb3RoZXJ3aXNlIGFjdHMgYXMgYW4gaWRlbnRpdHkuPC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zNi4zLjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWcuaHRtbCNwbHVnaW4tZGVidWciPmRlYnVnPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QmVuamFtaW4gT3R0ZSAmbHQ7b3R0ZUBnbm9tZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGVzdGluZzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zNi4zLjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1icmVha215ZGF0YS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWZiYTQ1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5jYWNhc2luazogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1icmVha215ZGF0YS5odG1sIiB0aXRsZT0iYnJlYWtteWRhdGEiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwiIHRpdGxlPSJjYWlyb292ZXJsYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLnRvcF9vZl9wYWdlIj48L2E+Y2FjYXNpbms8L3NwYW4+PC9oMj4KLTxwPmNhY2FzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLS1hbnRpLWFsaWFzaW5nIiB0aXRsZT0iVGhlIOKAnGFudGktYWxpYXNpbmfigJ0gcHJvcGVydHkiPmFudGktYWxpYXNpbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q0FDQVNpbmtEaXRoZXJpbmc8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLS1kaXRoZXIiIHRpdGxlPSJUaGUg4oCcZGl0aGVy4oCdIHByb3BlcnR5Ij5kaXRoZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmh0bWwjR3N0Q0FDQVNpbmstLXNjcmVlbi1oZWlnaHQiIHRpdGxlPSJUaGUg4oCcc2NyZWVuLWhlaWdodOKAnSBwcm9wZXJ0eSI+c2NyZWVuLWhlaWdodDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLmh0bWwjR3N0Q0FDQVNpbmstLXNjcmVlbi13aWR0aCIgdGl0bGU9IlRoZSDigJxzY3JlZW4td2lkdGjigJ0gcHJvcGVydHkiPnNjcmVlbi13aWR0aDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdENBQ0FTaW5rIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sI0dzdENBQ0FTaW5rLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDQUNBU2luayI+R3N0Q0FDQVNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay1zdHJ1Y3QiPkdzdEJhc2VTaW5rPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RDQUNBU2luawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5EaXNwbGF5cyB2aWRlbyBhcyBjb2xvciBhc2NpaSBhcnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjM3LjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Q0FDQV9HRU9NRVRSWTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE2MDwvc3Bhbj54NjAgQ0FDQV9GT05UPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj54NyBnc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+YXZpIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gY2FjYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSByZW5kZXJzIGEgdmlkZW8gdG8gYXNjaWkgYXJ0IGludG8gYSBzZXBhcmF0ZSB3aW5kb3cgdXNpbmcgYQotc21hbGwgZm9udCBhbmQgc3BlY2lmeWluZyB0aGUgYXNjaWkgcmVzb2x1dGlvbi4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Q0FDQV9EUklWRVI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5uY3Vyc2VzIGdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5hdmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBjYWNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHJlbmRlcnMgYSB2aWRlbyB0byBhc2NpaSBhcnQgaW50byB0aGUgY3VycmVudCB0ZXJtaW5hbC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zNy43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY2FjYXNpbmsuaHRtbCNwbHVnaW4tY2FjYXNpbmsiPmNhY2FzaW5rPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+WmVlc2hhbiBBbGkgJmx0O3phazE0N0B5YWhvby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNpbmsvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzcuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQiwgQkdSLCBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSLCBSR0IxNiwgUkdCMTUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENBQ0FTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0Q0FDQVNpbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDQUNBU2luazs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENBQ0FTaW5rLS1hbnRpLWFsaWFzaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYW50aS1hbGlhc2luZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYW50aS1hbGlhc2luZ+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmFibGVzIEFudGktQWxpYXNpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENBQ0FTaW5rLS1kaXRoZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkaXRoZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRpdGhlcuKAnSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0Q0FDQVNpbmtEaXRoZXJpbmc8L3NwYW4+PC9wcmU+Ci08cD5TZXQgdHlwZSBvZiBEaXRoZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5vIGRpdGhlcmluZzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q0FDQVNpbmstLXNjcmVlbi1oZWlnaHQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzY3JlZW4taGVpZ2h04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzY3JlZW4taGVpZ2h04oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDI1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDQUNBU2luay0tc2NyZWVuLXdpZHRoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2NyZWVuLXdpZHRo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzY3JlZW4td2lkdGjigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgd2lkdGggb2YgdGhlIHNjcmVlbi48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogODA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhY2FzaW5rLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwjR3N0QUFTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0QUFTaW5rPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRiYjQ1OS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzODggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmNhaXJvb3ZlcmxheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sIiB0aXRsZT0iY2FjYXNpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sIiB0aXRsZT0iY2Fwc3NldHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkudG9wX29mX3BhZ2UiPjwvYT5jYWlyb292ZXJsYXk8L3NwYW4+PC9oMj4KLTxwPmNhaXJvb3ZlcmxheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5LnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheS5odG1sI0dzdENhaXJvT3ZlcmxheS1jYXBzLWNoYW5nZWQiIHRpdGxlPSJUaGUg4oCcY2Fwcy1jaGFuZ2Vk4oCdIHNpZ25hbCI+Y2Fwcy1jaGFuZ2VkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbCNHc3RDYWlyb092ZXJsYXktZHJhdyIgdGl0bGU9IlRoZSDigJxkcmF34oCdIHNpZ25hbCI+ZHJhdzwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0Q2Fpcm9PdmVybGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwjR3N0Q2Fpcm9PdmVybGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDYWlyb092ZXJsYXkiPkdzdENhaXJvT3ZlcmxheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhaXJvb3ZlcmxheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdENhaXJvT3ZlcmxheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+Y2Fpcm9vdmVybGF5IHJlbmRlcnMgYW4gb3ZlcmxheSB1c2luZyBhIGFwcGxpY2F0aW9uIHByb3ZpZGVkIHJlbmRlciBmdW5jdGlvbi48L3A+Ci08cD5UaGUgZnVsbCBleGFtcGxlIGNhbiBiZSBmb3VuZCBpbiB0ZXN0cy9leGFtcGxlcy9jYWlyby9jYWlyb19vdmVybGF5LmM8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzguNy40Ij48L2E+PGgzPkV4YW1wbGUgY29kZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLTkKLTEwCi0xMQotMTIKLTEzCi0xNAotMTUKLTE2Ci0xNwotMTgKLTE5Ci0yMAotMjEKLTIyCi0yMwotMjQKLTI1Ci0yNgotMjcKLTI4Ci0yOQotMzAKLTMxCi0zMgotMzMKLTM0Ci0zNQotMzYKLTM3Ci0zOAotMzkKLTQwCi00MQotNDIKLTQzCi00NAotNDUKLTQ2Ci00NwotNDgKLTQ5Ci01MAotNTEKLTUyCi01MwotNTQ8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L2dzdC5oJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7Z3N0L3ZpZGVvL3ZpZGVvLmgmZ3Q7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YyI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPnN0cnVjdDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIGdib29sZWFuIHZhbGlkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+IHdpZHRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+IGhlaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+IENhaXJvT3ZlcmxheVN0YXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWMgdm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+cHJlcGFyZV9vdmVybGF5PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5Hc3RFbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBvdmVybGF5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEdzdENhcHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IGNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZ3BvaW50ZXIgdXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgQ2Fpcm9PdmVybGF5U3RhdGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+c3RhdGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gKDwvc3Bhbj5DYWlyb092ZXJsYXlTdGF0ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kik8L3NwYW4+dXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5nc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHM8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPnN0YXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPndpZHRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgJmFtcDs8L3NwYW4+c3RhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LSZndDs8L3NwYW4+aGVpZ2h0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICBzdGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj52YWxpZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWMgdm9pZDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+ZHJhd19vdmVybGF5PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5Hc3RFbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBvdmVybGF5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGNhaXJvX3QgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+IGNyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGd1aW50NjQgdGltZXN0YW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IAotICBndWludDY0IGR1cmF0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGdwb2ludGVyIHVzZXJfZGF0YTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIENhaXJvT3ZlcmxheVN0YXRlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gKDwvc3Bhbj5DYWlyb092ZXJsYXlTdGF0ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kik8L3NwYW4+dXNlcl9kYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5kb3VibGU8L3NwYW4+IHNjYWxlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj52YWxpZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5yZXR1cm48L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgc2NhbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjI8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiooKCg8L3NwYW4+dGltZXN0YW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi8oPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj5lNzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pICU8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjcwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4zMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KS88L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvY2Fpcm9jYWlyby1UcmFuc2Zvcm1hdGlvbnMuaHRtbCNjYWlyby10cmFuc2xhdGUiPmNhaXJvX3RyYW5zbGF0ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y3I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tJmd0Ozwvc3Bhbj53aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKDwvc3Bhbj5zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPmhlaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiktPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9jYWlyb2NhaXJvLVRyYW5zZm9ybWF0aW9ucy5odG1sI2NhaXJvLXNjYWxlIj5jYWlyb19zY2FsZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHNjYWxlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHNjYWxlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvY2Fpcm9jYWlyby1QYXRocy5odG1sI2NhaXJvLW1vdmUtdG8iPmNhaXJvX21vdmVfdG88L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5jcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9jYWlyb2NhaXJvLVBhdGhzLmh0bWwjY2Fpcm8tY3VydmUtdG8iPmNhaXJvX2N1cnZlX3RvPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y3I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LC08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgLTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LC08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgLTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9jYWlyb2NhaXJvLVBhdGhzLmh0bWwjY2Fpcm8tY3VydmUtdG8iPmNhaXJvX2N1cnZlX3RvPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y3I8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAtPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjM1PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjYwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvY2Fpcm9jYWlyby1QYXRocy5odG1sI2NhaXJvLWN1cnZlLXRvIj5jYWlyb19jdXJ2ZV90bzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzU8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjUwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj41MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTsgKjwvc3Bhbj4gIAotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2NhaXJvY2Fpcm8tUGF0aHMuaHRtbCNjYWlyby1jdXJ2ZS10byI+Y2Fpcm9fY3VydmVfdG88L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5jcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj41MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LC08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwtPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9jYWlyb2NhaXJvLWNhaXJvLXQuaHRtbCNjYWlyby1zZXQtc291cmNlLXJnYmEiPmNhaXJvX3NldF9zb3VyY2VfcmdiYTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjAuOTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MC4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjAuNzwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvY2Fpcm9jYWlyby1jYWlyby10Lmh0bWwjY2Fpcm8tZmlsbCI+Y2Fpcm9fZmlsbDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+Ci0KLWNhaXJvX292ZXJsYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtjYWlyb292ZXJsYXkmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O292ZXJsYXkmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNnLXNpZ25hbC1jb25uZWN0Ij5nX3NpZ25hbF9jb25uZWN0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+Y2Fpcm9fb3ZlcmxheTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtkcmF3JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LUNsb3N1cmVzLmh0bWwjRy1DQUxMQkFDSzpDQVBTIj5HX0NBTExCQUNLPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZHJhd19vdmVybGF5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPgotICBvdmVybGF5X3N0YXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjZy1zaWduYWwtY29ubmVjdCI+Z19zaWduYWxfY29ubmVjdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNhaXJvX292ZXJsYXk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7Y2Fwcy1jaGFuZ2VkJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiAKLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1DbG9zdXJlcy5odG1sI0ctQ0FMTEJBQ0s6Q0FQUyI+R19DQUxMQkFDSzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnByZXBhcmVfb3ZlcmxheTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gb3ZlcmxheV9zdGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMzguNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhaXJvLmh0bWwjcGx1Z2luLWNhaXJvIj5jYWlybzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkpvbiBOb3JkYnkgJmx0O2pvbm9ub3JAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWRpdG9yL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjM4LjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBCR1JBLCBSR0IxNiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIEJHUkEsIFJHQjE2IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhaXJvT3ZlcmxheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENhaXJvT3ZlcmxheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdENhaXJvT3ZlcmxheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5LnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdENhaXJvT3ZlcmxheS1jYXBzLWNoYW5nZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjYXBzLWNoYW5nZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbCNHc3RDYWlyb092ZXJsYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYWlyb092ZXJsYXk8L3NwYW4+PC9hPiAqb3ZlcmxheSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gICAgICAgICAqY2FwcywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+VGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSBjYXBzIG9mIHRoZSBlbGVtZW50IGhhcyBjaGFuZ2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENhaXJvT3ZlcmxheS1jYXBzLWNoYW5nZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+b3ZlcmxheTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPk92ZXJsYXkgZWxlbWVudCBlbWl0dGluZyB0aGUgc2lnbmFsLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+VGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gb2YgdGhlIGVsZW1lbnQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2Fpcm9PdmVybGF5LWRyYXciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkcmF34oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwjR3N0Q2Fpcm9PdmVybGF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fpcm9PdmVybGF5PC9zcGFuPjwvYT4gKm92ZXJsYXksCi0gICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+Q2Fpcm9Db250ZXh0PC9zcGFuPiAgICAqY3IsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+ICAgICAgICAgIGR1cmF0aW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5UaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIG92ZXJsYXkgc2hvdWxkIGJlIGRyYXduLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdENhaXJvT3ZlcmxheS1kcmF3LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPm92ZXJsYXk8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5PdmVybGF5IGVsZW1lbnQgZW1pdHRpbmcgdGhlIHNpZ25hbC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y3I8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5DYWlybyBjb250ZXh0IHRvIGRyYXcgdG8uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnRpbWVzdGFtcDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPlRpbWVzdGFtcCAoc2VlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+KSBvZiB0aGUgY3VycmVudCBidWZmZXIuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmR1cmF0aW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+RHVyYXRpb24gKHNlZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPikgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNDczNGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Y2Fwc3NldHRlcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbCIgdGl0bGU9ImNhaXJvb3ZlcmxheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jcHVyZXBvcnQuaHRtbCIgdGl0bGU9ImNwdXJlcG9ydCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci50b3Bfb2ZfcGFnZSI+PC9hPmNhcHNzZXR0ZXI8L3NwYW4+PC9oMj4KLTxwPmNhcHNzZXR0ZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCNHc3RDYXBzU2V0dGVyLS1jYXBzIiB0aXRsZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiPmNhcHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sI0dzdENhcHNTZXR0ZXItLWpvaW4iIHRpdGxlPSJUaGUg4oCcam9pbuKAnSBwcm9wZXJ0eSI+am9pbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLmh0bWwjR3N0Q2Fwc1NldHRlci0tcmVwbGFjZSIgdGl0bGU9IlRoZSDigJxyZXBsYWNl4oCdIHByb3BlcnR5Ij5yZXBsYWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RDYXBzU2V0dGVyIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCNHc3RDYXBzU2V0dGVyLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RDYXBzU2V0dGVyIj5Hc3RDYXBzU2V0dGVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RDYXBzU2V0dGVyCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+U2V0cyBvciBtZXJnZXMgY2FwcyBvbiBhIHN0cmVhbSdzIGJ1ZmZlcnMuIFRoYXQgaXMsIGEgYnVmZmVyJ3MgY2FwcyBhcmUKLXVwZGF0ZWQgdXNpbmcgKGZpZWxkcyBvZikgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLmh0bWwjR3N0Q2Fwc1NldHRlci0tY2FwcyIgdGl0bGU9IlRoZSDigJxjYXBz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcY2Fwc+KAnTwvc3Bhbj48L2E+LiBOb3RlIHRoYXQgdGhpcyBtYXkgY29udGFpbgotbXVsdGlwbGUgc3RydWN0dXJlcyAodGhvdWdoIG5vdCBsaWtlbHkgcmVjb21tZW5kZWQpLCBidXQgZWFjaCBvZiB0aGVzZSBtdXN0Ci1iZSBmaXhlZCAob3Igd2lsbCBvdGhlcndpc2UgYmUgcmVqZWN0ZWQpLjwvcD4KLTxwPklmIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sI0dzdENhcHNTZXR0ZXItLWpvaW4iIHRpdGxlPSJUaGUg4oCcam9pbuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGpvaW7igJ08L3NwYW4+PC9hPiBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIHRoZW4gdGhlIGluY29taW5nIGNhcHMnIG1pbWUtdHlwZSBpcwotY29tcGFyZWQgdG8gdGhlIG1pbWUtdHlwZShzKSBvZiBwcm92aWRlZCBjYXBzIGFuZCBvbmx5IG1hdGNoaW5nIHN0cnVjdHVyZShzKQotYXJlIGNvbnNpZGVyZWQgZm9yIHVwZGF0aW5nLjwvcD4KLTxwPklmIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sI0dzdENhcHNTZXR0ZXItLXJlcGxhY2UiIHRpdGxlPSJUaGUg4oCccmVwbGFjZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlcGxhY2XigJ08L3NwYW4+PC9hPiBpcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4sIHRoZW4gYW55IGNhcHMgdXBkYXRlIGlzIHByZWNlZGVkIGJ5Ci1jbGVhcmluZyBleGlzdGluZyBmaWVsZHMsIG1ha2luZyBwcm92aWRlZCBmaWVsZHMgKGFzIGEgd2hvbGUpIHJlcGxhY2UKLWluY29taW5nIG9uZXMuIE90aGVyd2lzZSwgbm8gY2xlYXJpbmcgaXMgcGVyZm9ybWVkLCBpbiB3aGljaCBjYXNlIHByb3ZpZGVkCi1maWVsZHMgYXJlIGFkZGVkL21lcmdlZCBvbnRvIGluY29taW5nIGNhcHM8L3A+Ci08cD5BbHRob3VnaCB0aGlzIGVsZW1lbnQgbWlnaHQgbWFpbmx5IHNlcnZlIGFzIGRlYnVnIGhlbHBlciwKLWl0IGNhbiBhbHNvIHByYWN0aWNhbGx5IGJlIHVzZWQgdG8gY29ycmVjdCBhIGZhdWx0eSBwaXhlbC1hc3BlY3QtcmF0aW8sCi1vciB0byBtb2RpZnkgYSB5dXYgZm91cmNjIHZhbHVlIHRvIGVmZmVjdGl2ZWx5IHN3YXAgY2hyb21hIGNvbXBvbmVudHMgb3Igc3VjaAotYWxpa2UuPC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4zOS43LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWcuaHRtbCNwbHVnaW4tZGVidWciPmRlYnVnPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TWFyayBOYXV3ZWxhZXJ0cyAmbHQ7bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HZW5lcmljPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjM5LjcuNi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2Fwc1NldHRlci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdENhcHNTZXR0ZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDYXBzU2V0dGVyOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYXBzc2V0dGVyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzU2V0dGVyLS1jYXBzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2Fwc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2Fwc+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPk1lcmdlIHRoZXNlIGNhcHMgKHRoZXJlYnkgb3ZlcndyaXRpbmcpIGluIHRoZSBzdHJlYW0uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q2Fwc1NldHRlci0tam9pbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGpvaW7igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGpvaW7igJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF0Y2ggaW5jb21pbmcgY2FwcycgbWltZS10eXBlIHRvIG1pbWUtdHlwZSBvZiBwcm92aWRlZCBjYXBzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDYXBzU2V0dGVyLS1yZXBsYWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVwbGFjZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVwbGFjZeKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Ecm9wIGZpZWxkcyBvZiBpbmNvbWluZyBjYXBzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNWYwODkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5jcHVyZXBvcnQ6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sIiB0aXRsZT0iY2Fwc3NldHRlciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCIgdGl0bGU9ImN1dHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC50b3Bfb2ZfcGFnZSI+PC9hPmNwdXJlcG9ydDwvc3Bhbj48L2gyPgotPHA+Y3B1cmVwb3J0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdENwdVJlcG9ydCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jcHVyZXBvcnQub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5odG1sI0dzdENwdVJlcG9ydC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0Q3B1UmVwb3J0Ij5Hc3RDcHVSZXBvcnQ8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jcHVyZXBvcnQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0Q3B1UmVwb3J0Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQwLjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sI3BsdWdpbi1kZWJ1ZyI+ZGVidWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5aYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGVzdGluZzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40MC42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDcHVSZXBvcnQtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RDcHVSZXBvcnQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDcHVSZXBvcnQ7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGU5YjZjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Y3V0dGVyOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5odG1sIiB0aXRsZT0iY3B1cmVwb3J0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRjYXBhcnNlLmh0bWwiIHRpdGxlPSJkY2FwYXJzZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci50b3Bfb2ZfcGFnZSI+PC9hPmN1dHRlcjwvc3Bhbj48L2gyPgotPHA+Y3V0dGVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLmh0bWwjR3N0Q3V0dGVyLS1sZWFreSIgdGl0bGU9IlRoZSDigJxsZWFreeKAnSBwcm9wZXJ0eSI+bGVha3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sI0dzdEN1dHRlci0tcHJlLWxlbmd0aCIgdGl0bGU9IlRoZSDigJxwcmUtbGVuZ3Ro4oCdIHByb3BlcnR5Ij5wcmUtbGVuZ3RoPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCNHc3RDdXR0ZXItLXJ1bi1sZW5ndGgiIHRpdGxlPSJUaGUg4oCccnVuLWxlbmd0aOKAnSBwcm9wZXJ0eSI+cnVuLWxlbmd0aDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLmh0bWwjR3N0Q3V0dGVyLS10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCcdGhyZXNob2xk4oCdIHByb3BlcnR5Ij50aHJlc2hvbGQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sI0dzdEN1dHRlci0tdGhyZXNob2xkLWRCIiB0aXRsZT0iVGhlIOKAnHRocmVzaG9sZC1kQuKAnSBwcm9wZXJ0eSI+dGhyZXNob2xkLWRCPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RDdXR0ZXIiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCNHc3RDdXR0ZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEN1dHRlciI+R3N0Q3V0dGVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RDdXR0ZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkFuYWx5c2VzIHRoZSBhdWRpbyBzaWduYWwgZm9yIHBlcmlvZHMgb2Ygc2lsZW5jZS4gVGhlIHN0YXJ0IGFuZCBlbmQgb2YKLXNpbGVuY2UgaXMgc2lnbmFsbGVkIGJ5IGJ1cyBtZXNzYWdlcyBuYW1lZDwvcD4KLTxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJjdXR0ZXIiPC9jb2RlPi4KLTxwPlRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIHR3byBmaWVsZHM6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4idGltZXN0YW1wIjwvY29kZT46Ci0gIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgZ2Jvb2xlYW4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ImFib3ZlIjwvY29kZT46Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiBmb3IgYmVnaW4gb2Ygc2lsZW5jZSBhbmQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gZm9yIGVuZCBvZiBzaWxlbmNlLgotICA8L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDEuNy42Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm0gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZvbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGN1dHRlciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b2F1ZGlvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBTaG93IGN1dCBtZXNzYWdlcy4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40MS43LjcuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyLmh0bWwjcGx1Z2luLWN1dHRlciI+Y3V0dGVyPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGhvbWFzIFZhbmRlciBTdGljaGVsZSAmbHQ7dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWRpdG9yL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQxLjcuNy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RDdXR0ZXItc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RDdXR0ZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RDdXR0ZXI7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q3V0dGVyLS1sZWFreSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxlYWt54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsZWFreeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPmRvIHdlIGxlYWsgYnVmZmVycyB3aGVuIGJlbG93IHRocmVzaG9sZCA/LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q3V0dGVyLS1wcmUtbGVuZ3RoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJlLWxlbmd0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJlLWxlbmd0aOKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TGVuZ3RoIG9mIHByZS1yZWNvcmRpbmcgYnVmZmVyIChpbiBuYW5vc2Vjb25kcykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEN1dHRlci0tcnVuLWxlbmd0aCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJ1bi1sZW5ndGjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ1bi1sZW5ndGjigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkxlbmd0aCBvZiBkcm9wIGJlbG93IHRocmVzaG9sZCBiZWZvcmUgY3V0X3N0b3AgKGluIG5hbm9zZWNvbmRzKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Q3V0dGVyLS10aHJlc2hvbGQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aHJlc2hvbGTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRocmVzaG9sZOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlZvbHVtZSB0aHJlc2hvbGQgYmVmb3JlIHRyaWdnZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEN1dHRlci0tdGhyZXNob2xkLWRCIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGhyZXNob2xkLWRC4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aHJlc2hvbGQtZELigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Wb2x1bWUgdGhyZXNob2xkIGJlZm9yZSB0cmlnZ2VyIChpbiBkQikuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRjYXBhcnNlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYzYTI2YS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZGNhcGFyc2U6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3V0dGVyLmh0bWwiIHRpdGxlPSJjdXR0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCIgdGl0bGU9ImRlaW50ZXJsYWNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRjYXBhcnNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRjYXBhcnNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRjYXBhcnNlLnRvcF9vZl9wYWdlIj48L2E+ZGNhcGFyc2U8L3NwYW4+PC9oMj4KLTxwPmRjYXBhcnNlIOKAlCBEQ0EgKERUUyBDb2hlcmVudCBBY291c3RpY3MpIHBhcnNlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3REY2FQYXJzZSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbCNHc3REY2FQYXJzZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RGNhUGFyc2UiPkdzdERjYVBhcnNlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS1zdHJ1Y3QiPkdzdEJhc2VQYXJzZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RGNhUGFyc2UKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBpcyBhIERDQSAoRFRTIENvaGVyZW50IEFjb3VzdGljcykgcGFyc2VyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40Mi42LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmFiYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmR0cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGNhcGFyc2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGR0c2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDIuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sI3BsdWdpbi1hdWRpb3BhcnNlcnMiPmF1ZGlvcGFyc2VyczwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbSBjZW50cmljdWxhciBuZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BhcnNlci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40Mi42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1kdHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXByaXZhdGUxLWR0czwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1kdHMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgZGVwdGg9KGludCl7IDE0LCAxNiB9LCBlbmRpYW5uZXNzPShpbnQpeyAxMjM0LCA0MzIxIH0sIGJsb2NrLXNpemU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWUtc2l6ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERjYVBhcnNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RGNhUGFyc2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REY2FQYXJzZTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgR3N0RGNhUGFyc2Ugb2JqZWN0PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwjR3N0QW1yUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbXJQYXJzZTwvc3Bhbj48L2E+LCA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QUFDUGFyc2U8L3NwYW4+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFjM3BhcnNlLmh0bWwjR3N0QWMzUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBYzNQYXJzZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGMxYjBjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5kZWludGVybGFjZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5odG1sIiB0aXRsZT0iZGNhcGFyc2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmh0bWwiIHRpdGxlPSJkZWludGVybGVhdmUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS50b3Bfb2ZfcGFnZSI+PC9hPmRlaW50ZXJsYWNlPC9zcGFuPjwvaDI+Ci08cD5kZWludGVybGFjZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2VGaWVsZHMiIHRpdGxlPSJlbnVtIEdzdERlaW50ZXJsYWNlRmllbGRzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVpbnRlcmxhY2VGaWVsZHM8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZS0tZmllbGRzIiB0aXRsZT0iVGhlIOKAnGZpZWxkc+KAnSBwcm9wZXJ0eSI+ZmllbGRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlTWV0aG9kcyIgdGl0bGU9ImVudW0gR3N0RGVpbnRlcmxhY2VNZXRob2RzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVpbnRlcmxhY2VNZXRob2RzPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2UtLW1ldGhvZCIgdGl0bGU9IlRoZSDigJxtZXRob2TigJ0gcHJvcGVydHkiPm1ldGhvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWludGVybGFjZU1vZGVzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZS0tbW9kZSIgdGl0bGU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5Ij5tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQiIHRpdGxlPSJlbnVtIEdzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REZWludGVybGFjZUZpZWxkTGF5b3V0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2UtLXRmZiIgdGl0bGU9IlRoZSDigJx0ZmbigJ0gcHJvcGVydHkiPnRmZjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlLS1kcm9wLW9ycGhhbnMiIHRpdGxlPSJUaGUg4oCcZHJvcC1vcnBoYW5z4oCdIHByb3BlcnR5Ij5kcm9wLW9ycGhhbnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZS0taWdub3JlLW9ic2N1cmUiIHRpdGxlPSJUaGUg4oCcaWdub3JlLW9ic2N1cmXigJ0gcHJvcGVydHkiPmlnbm9yZS1vYnNjdXJlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlTG9ja2luZyIgdGl0bGU9ImVudW0gR3N0RGVpbnRlcmxhY2VMb2NraW5nIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVpbnRlcmxhY2VMb2NraW5nPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2UtLWxvY2tpbmciIHRpdGxlPSJUaGUg4oCcbG9ja2luZ+KAnSBwcm9wZXJ0eSI+bG9ja2luZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2UiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RGVpbnRlcmxhY2UiPkdzdERlaW50ZXJsYWNlPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlRmllbGRzIiB0aXRsZT0iZW51bSBHc3REZWludGVybGFjZUZpZWxkcyI+R3N0RGVpbnRlcmxhY2VGaWVsZHM8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwjR3N0RGVpbnRlcmxhY2VMb2NraW5nIiB0aXRsZT0iZW51bSBHc3REZWludGVybGFjZUxvY2tpbmciPkdzdERlaW50ZXJsYWNlTG9ja2luZzwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZU1ldGhvZHMiIHRpdGxlPSJlbnVtIEdzdERlaW50ZXJsYWNlTWV0aG9kcyI+R3N0RGVpbnRlcmxhY2VNZXRob2RzPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQiIHRpdGxlPSJlbnVtIEdzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQiPkdzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REZWludGVybGFjZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3REZWludGVybGFjZSBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+ZGVpbnRlcmxhY2UgZGVpbnRlcmxhY2VzIGludGVybGFjZWQgdmlkZW8gZnJhbWVzIHRvIHByb2dyZXNzaXZlIHZpZGVvIGZyYW1lcy4KLUZvciB0aGlzIGRpZmZlcmVudCBhbGdvcml0aG1zIGNhbiBiZSBzZWxlY3RlZCB3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDMuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49Lzwvc3Bhbj5wYXRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+dG88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj5maWxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVpbnRlcmxhY2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGRlaW50ZXJsYWNlcyBhIHZpZGVvIGZpbGUgd2l0aCB0aGUgZGVmYXVsdCBkZWludGVybGFjaW5nIG9wdGlvbnMuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDMuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlaW50ZXJsYWNlLmh0bWwjcGx1Z2luLWRlaW50ZXJsYWNlIj5kZWludGVybGFjZTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPk1hcnRpbiBFaWtlcm1hbm4gJmx0O21laWtlckB1cGIuZGUmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlby9EZWludGVybGFjZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40My44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQUJHUiwgUkdCQSwgQkdSQSwgWTQ0NCwgeFJHQiwgeEJHUiwgUkdCeCwgQkdSeCwgUkdCLCBCR1IsIFlVWTIsIFlWWVUsIFVZVlksIFk0MkIsIEk0MjAsIFlWMTIsIFk0MUIsIE5WMTIsIE5WMjEgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcoQU5ZKSwgZm9ybWF0PShzdHJpbmcpeyBJNDIwLCBZVjEyLCBZVVkyLCBVWVZZLCBBWVVWLCBSR0J4LCBCR1J4LCB4UkdCLCB4QkdSLCBSR0JBLCBCR1JBLCBBUkdCLCBBQkdSLCBSR0IsIEJHUiwgWTQxQiwgWTQyQiwgWVZZVSwgWTQ0NCwgdjIxMCwgdjIxNiwgTlYxMiwgTlYyMSwgTlYxNiwgTlY2MSwgTlYyNCwgR1JBWTgsIEdSQVkxNl9CRSwgR1JBWTE2X0xFLCB2MzA4LCBJWVUyLCBSR0IxNiwgQkdSMTYsIFJHQjE1LCBCR1IxNSwgVVlWUCwgQTQyMCwgUkdCOFAsIFlVVjksIFlWVTksIElZVTEsIEFSR0I2NCwgQVlVVjY0LCByMjEwLCBJNDIwXzEwTEUsIEk0MjBfMTBCRSwgSTQyMl8xMExFLCBJNDIyXzEwQkUsIFk0NDRfMTBMRSwgWTQ0NF8xMEJFLCBHQlIsIEdCUl8xMExFLCBHQlJfMTBCRSwgTlYxMl82NFozMiwgQTQyMF8xMExFLCBBNDIwXzEwQkUsIEE0MjJfMTBMRSwgQTQyMl8xMEJFLCBBNDQ0XzEwTEUsIEE0NDRfMTBCRSwgUDAxMF8xMExFLCBQMDEwXzEwQkUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBBQkdSLCBSR0JBLCBCR1JBLCBZNDQ0LCB4UkdCLCB4QkdSLCBSR0J4LCBCR1J4LCBSR0IsIEJHUiwgWVVZMiwgWVZZVSwgVVlWWSwgWTQyQiwgSTQyMCwgWVYxMiwgWTQxQiwgTlYxMiwgTlYyMSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdyhBTlkpLCBmb3JtYXQ9KHN0cmluZyl7IEk0MjAsIFlWMTIsIFlVWTIsIFVZVlksIEFZVVYsIFJHQngsIEJHUngsIHhSR0IsIHhCR1IsIFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIFJHQiwgQkdSLCBZNDFCLCBZNDJCLCBZVllVLCBZNDQ0LCB2MjEwLCB2MjE2LCBOVjEyLCBOVjIxLCBOVjE2LCBOVjYxLCBOVjI0LCBHUkFZOCwgR1JBWTE2X0JFLCBHUkFZMTZfTEUsIHYzMDgsIElZVTIsIFJHQjE2LCBCR1IxNiwgUkdCMTUsIEJHUjE1LCBVWVZQLCBBNDIwLCBSR0I4UCwgWVVWOSwgWVZVOSwgSVlVMSwgQVJHQjY0LCBBWVVWNjQsIHIyMTAsIEk0MjBfMTBMRSwgSTQyMF8xMEJFLCBJNDIyXzEwTEUsIEk0MjJfMTBCRSwgWTQ0NF8xMExFLCBZNDQ0XzEwQkUsIEdCUiwgR0JSXzEwTEUsIEdCUl8xMEJFLCBOVjEyXzY0WjMyLCBBNDIwXzEwTEUsIEE0MjBfMTBCRSwgQTQyMl8xMExFLCBBNDIyXzEwQkUsIEE0NDRfMTBMRSwgQTQ0NF8xMEJFLCBQMDEwXzEwTEUsIFAwMTBfMTBCRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2Utc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3REZWludGVybGFjZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdERlaW50ZXJsYWNlOzwvcHJlPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGFjZUZpZWxkcyI+PC9hPjxoMz5lbnVtIEdzdERlaW50ZXJsYWNlRmllbGRzPC9oMz4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERlaW50ZXJsYWNlRmllbGRzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFSU5URVJMQUNFLUFMTDpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX0FMTDwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtVEY6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9URjwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtQkY6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9CRjwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtRklFTERTLUFVVE86Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9GSUVMRFNfQVVUTzwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2VMb2NraW5nIj48L2E+PGgzPmVudW0gR3N0RGVpbnRlcmxhY2VMb2NraW5nPC9oMz4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdERlaW50ZXJsYWNlTG9ja2luZy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1MT0NLSU5HLU5PTkU6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX05PTkU8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFSU5URVJMQUNFLUxPQ0tJTkctQVVUTzpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX0xPQ0tJTkdfQVVUTzwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtTE9DS0lORy1BQ1RJVkU6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX0FDVElWRTwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtTE9DS0lORy1QQVNTSVZFOkNBUFMiPjwvYT5HU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19QQVNTSVZFPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGFjZU1ldGhvZHMiPjwvYT48aDM+ZW51bSBHc3REZWludGVybGFjZU1ldGhvZHM8L2gzPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2VNZXRob2RzLm1lbWJlcnMiPjwvYT48aDQ+TWVtYmVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJlbnVtX21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJlbnVtX21lbWJlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFSU5URVJMQUNFLVRPTVNNT0NPTVA6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9UT01TTU9DT01QPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1HUkVFRFktSDpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX0dSRUVEWV9IPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1HUkVFRFktTDpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX0dSRUVEWV9MPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1WRklSOkNBUFMiPjwvYT5HU1RfREVJTlRFUkxBQ0VfVkZJUjwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtTElORUFSOkNBUFMiPjwvYT5HU1RfREVJTlRFUkxBQ0VfTElORUFSPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1MSU5FQVItQkxFTkQ6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9MSU5FQVJfQkxFTkQ8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFSU5URVJMQUNFLVNDQUxFUi1CT0I6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9TQ0FMRVJfQk9CPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1XRUFWRTpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX1dFQVZFPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1XRUFWRS1URkY6Q0FQUyI+PC9hPkdTVF9ERUlOVEVSTEFDRV9XRUFWRV9URkY8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULURFSU5URVJMQUNFLVdFQVZFLUJGRjpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX1dFQVZFX0JGRjwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2VGaWVsZExheW91dCI+PC9hPjxoMz5lbnVtIEdzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQ8L2gzPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2VGaWVsZExheW91dC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1MQVlPVVQtQVVUTzpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX0xBWU9VVF9BVVRPPC9wPjwvdGQ+Ci08dGQ+wqA8L3RkPgotPHRkPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1ERUlOVEVSTEFDRS1MQVlPVVQtVEZGOkNBUFMiPjwvYT5HU1RfREVJTlRFUkxBQ0VfTEFZT1VUX1RGRjwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtREVJTlRFUkxBQ0UtTEFZT1VULUJGRjpDQVBTIj48L2E+R1NUX0RFSU5URVJMQUNFX0xBWU9VVF9CRkY8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGFjZS0tZmllbGRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmllbGRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmaWVsZHPigJ0gICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlRmllbGRzIiB0aXRsZT0iZW51bSBHc3REZWludGVybGFjZUZpZWxkcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlaW50ZXJsYWNlRmllbGRzPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoaXMgc2VsZWN0cyB3aGljaCBmaWVsZHMgc2hvdWxkIGJlIG91dHB1dC4gSWYgImFsbCIgaXMgc2VsZWN0ZWQKLXRoZSBvdXRwdXQgZnJhbWVyYXRlIHdpbGwgYmUgZG91YmxlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBBbGwgZmllbGRzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGFjZS0tbWV0aG9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtZXRob2TigJ0gICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sI0dzdERlaW50ZXJsYWNlTWV0aG9kcyIgdGl0bGU9ImVudW0gR3N0RGVpbnRlcmxhY2VNZXRob2RzIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVpbnRlcmxhY2VNZXRob2RzPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNlbGVjdHMgdGhlIGRpZmZlcmVudCBkZWludGVybGFjaW5nIGFsZ29yaXRobXMgdGhhdCBjYW4gYmUgdXNlZC4KLVRoZXNlIHByb3ZpZGUgZGlmZmVyZW50IHF1YWxpdHkgYW5kIENQVSB1c2FnZS48L3A+Ci08cD5Tb21lIG1ldGhvZHMgcHJvdmlkZSBwYXJhbWV0ZXJzIHdoaWNoIGNhbiBiZSBzZXQgYnkgZ2V0dGluZwotdGhlICJtZXRob2QiIGNoaWxkIHZpYSB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENoaWxkUHJveHk8L3NwYW4+PC9hPiBpbnRlcmZhY2UgYW5kCi1zZXR0aW5nIHRoZSBhcHByb3BpYXRlIHByb3BlcnRpZXMgb24gaXQuPC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotdG9tc21vY29tcAotTW90aW9uIEFkYXB0aXZlOiBNb3Rpb24gU2VhcmNoCi08L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotZ3JlZWR5aAotTW90aW9uIEFkYXB0aXZlOiBBZHZhbmNlZCBEZXRlY3Rpb24KLTwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci1ncmVlZHlsCi1Nb3Rpb24gQWRhcHRpdmU6IFNpbXBsZSBEZXRlY3Rpb24KLTwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci12ZmlyCi1CbHVyIHZlcnRpY2FsCi08L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotbGluZWFyCi1MaW5lYXIgaW50ZXJwb2xhdGlvbgotPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLWxpbmVhcmJsZW5kCi1MaW5lYXIgaW50ZXJwb2xhdGlvbiBpbiB0aW1lIGRvbWFpbi4gIEFueSBtb3Rpb24gY2F1c2VzIHNpZ25pZmljYW50Ci1naG9zdGluZywgc28gdGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLgotPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLXNjYWxlcmJvYgotRG91YmxlIGxpbmVzCi08L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotd2VhdmUKLVdlYXZlLiAgQmFkIHF1YWxpdHksIGRvIG5vdCB1c2UuCi08L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotd2VhdmV0ZmYKLVByb2dyZXNzaXZlOiBUb3AgRmllbGQgRmlyc3QuICBCYWQgcXVhbGl0eSwgZG8gbm90IHVzZS4KLTwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci13ZWF2ZWJmZgotUHJvZ3Jlc3NpdmU6IEJvdHRvbSBGaWVsZCBGaXJzdC4gIEJhZCBxdWFsaXR5LCBkbyBub3QgdXNlLgotPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IExpbmVhcjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2UtLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb2Rl4oCdICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdERlaW50ZXJsYWNlTW9kZXM8L3NwYW4+PC9wcmU+Ci08cD5UaGlzIHNlbGVjdHMgd2hldGhlciB0aGUgZGVpbnRlcmxhY2luZyBtZXRob2RzIHNob3VsZAotYWx3YXlzIGJlIGFwcGxpZWQgb3IgaWYgdGhleSBzaG91bGQgb25seSBiZSBhcHBsaWVkCi1vbiBjb250ZW50IHRoYXQgaGFzIHRoZSAiaW50ZXJsYWNlZCIgZmxhZyBvbiB0aGUgY2Fwcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogQXV0byBkZXRlY3Rpb24gKGJlc3QgZWZmb3J0KTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxhY2UtLXRmZiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRmZuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGZm4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZUZpZWxkTGF5b3V0IiB0aXRsZT0iZW51bSBHc3REZWludGVybGFjZUZpZWxkTGF5b3V0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RGVpbnRlcmxhY2VGaWVsZExheW91dDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWludGVybGFjZSB0b3AgZmllbGQgZmlyc3QuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEF1dG8gZGV0ZWN0aW9uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGFjZS0tZHJvcC1vcnBoYW5zIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHJvcC1vcnBoYW5z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkcm9wLW9ycGhhbnPigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoaXMgc2VsZWN0cyB3aGV0aGVyIHRvIGRyb3Agb3JwaGFuIGZpZWxkcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRlbGVjaW5lCi1wYXR0ZXJucyBpbiBhY3RpdmUgbG9ja2luZyBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGFjZS0taWdub3JlLW9ic2N1cmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpZ25vcmUtb2JzY3VyZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaWdub3JlLW9ic2N1cmXigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGlzIHNlbGVjdHMgd2hldGhlciB0byBpZ25vcmUgb2JzY3VyZS9yYXJlIHRlbGVjaW5lIHBhdHRlcm5zLgotTlRTQyAyOjMgcHVsbGRvd24gdmFyaWFudHMgYXJlIHRoZSBvbmx5IHJlYWxseSBjb21tb24gcGF0dGVybnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERlaW50ZXJsYWNlLS1sb2NraW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG9ja2luZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9ja2luZ+KAnSAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCNHc3REZWludGVybGFjZUxvY2tpbmciIHRpdGxlPSJlbnVtIEdzdERlaW50ZXJsYWNlTG9ja2luZyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERlaW50ZXJsYWNlTG9ja2luZzwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGlzIHNlbGVjdHMgd2hpY2ggYXBwcm9hY2ggdG8gcGF0dGVybiBsb2NraW5nIGlzIHVzZWQgd2hpY2ggYWZmZWN0cwotcHJvY2Vzc2luZyBsYXRlbmN5IGFuZCBhY2N1cmFjeSBvZiB0aW1lc3RhbXAgYWRqdXN0bWVudCBmb3IgdGVsZWNpbmUKLXN0cmVhbXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5vIHBhdHRlcm4gbG9ja2luZzwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYmM2M2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5kZWludGVybGVhdmU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxhY2UuaHRtbCIgdGl0bGU9ImRlaW50ZXJsYWNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5odG1sIiB0aXRsZT0iZGljZXR2Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLnRvcF9vZl9wYWdlIj48L2E+ZGVpbnRlcmxlYXZlPC9zcGFuPjwvaDI+Ci08cD5kZWludGVybGVhdmU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmh0bWwjR3N0RGVpbnRlcmxlYXZlLS1rZWVwLXBvc2l0aW9ucyIgdGl0bGU9IlRoZSDigJxrZWVwLXBvc2l0aW9uc+KAnSBwcm9wZXJ0eSI+a2VlcC1wb3NpdGlvbnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3REZWludGVybGVhdmUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUuaHRtbCNHc3REZWludGVybGVhdmUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdERlaW50ZXJsZWF2ZSI+R3N0RGVpbnRlcmxlYXZlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REZWludGVybGVhdmUKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlNwbGl0cyBvbmUgaW50ZXJsZWF2ZWQgbXVsdGljaGFubmVsIGF1ZGlvIHN0cmVhbSBpbnRvIG1hbnkgbW9ubyBhdWRpbyBzdHJlYW1zLjwvcD4KLTxwPlRoaXMgZWxlbWVudCBoYW5kbGVzIGFsbCByYXcgYXVkaW8gZm9ybWF0cyBhbmQgc3VwcG9ydHMgY2hhbmdpbmcgdGhlIGlucHV0IGNhcHMgYXMgbG9uZyBhcwotYWxsIGRvd25zdHJlYW0gZWxlbWVudHMgY2FuIGhhbmRsZSB0aGUgbmV3IGNhcHMgYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgYW5kIHRoZSBjaGFubmVsCi1wb3NpdGlvbnMgc3RheSB0aGUgc2FtZS4gVGhpcyByZXN0cmljdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgdmVyc2lvbnMgYnkgYWRkaW5nIG9yCi1yZW1vdmluZyBzb21lIHNvdXJjZSBwYWRzIGFzIHJlcXVpcmVkLjwvcD4KLTxwPkluIG1vc3QgY2FzZXMgYSBxdWV1ZSBhbmQgYW4gYXVkaW9jb252ZXJ0IGVsZW1lbnQgc2hvdWxkIGJlIGFkZGVkIGFmdGVyIGVhY2ggc291cmNlIHBhZAotYmVmb3JlIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiB0aGUgYXVkaW8gZGF0YS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDQuNy41Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PS88L3NwYW4+cGF0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPnRvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+ZmlsZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm1wMyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvL3gtcmF3LGNoYW5uZWxzPTIgISBkZWludGVybGVhdmUgbmFtZT1kICBkLnNyY18wICEgcXVldWUgISBhdWRpb2NvbnZlcnQgISB2b3JiaXNlbmMgISBvZ2dtdXggISBmaWxlc2luayBsb2NhdGlvbj1jaGFubmVsMS5vZ2cgIGQuc3JjXzEgISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIHZvcmJpc2VuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWNoYW5uZWwyLm9nZzwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gRGVjb2RlcyBhbiBNUDMgZmlsZSBhbmQgZW5jb2RlcyB0aGUgbGVmdCBhbmQgcmlnaHQgY2hhbm5lbCBpbnRvIHNlcGFyYXRlCi1PZ2cgVm9yYmlzIGZpbGVzLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5maWxlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bXAzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW8veC1yYXcsY2hhbm5lbHM9MiZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlaW50ZXJsZWF2ZSBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZCAgaW50ZXJsZWF2ZSBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+aSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3YXZlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dGVzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPndhdiAgICBkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c3JjXzAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zaW5rXzEgICAgZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNyY18xIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2lua18wPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIERlY29kZXMgYW5kIGRlaW50ZXJsZWF2ZXMgYSBTdGVyZW8gTVAzIGZpbGUgaW50byBzZXBhcmF0ZSBjaGFubmVscyBhbmQKLXRoZW4gaW50ZXJsZWF2ZXMgdGhlIGNoYW5uZWxzIGFnYWluIHRvIGEgV0FWIGZpbGUgd2l0aCB0aGUgY2hhbm5lbCB3aXRoIHRoZQotY2hhbm5lbHMgZXhjaGFuZ2VkLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ0LjcuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlLmh0bWwjcGx1Z2luLWludGVybGVhdmUiPmludGVybGVhdmU8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BbmR5IFdpbmdvICZsdDt3aW5nbyBhdCBwb2JveC5jb20mZ3Q7LCBJYWluICZsdDtpYWluQHByZXR0eXBlb3BsZS5vcmcmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9Db252ZXJ0ZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDQuNy42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFMxNkJFLCBVMTZMRSwgVTE2QkUsIFMyNF8zMkxFLCBTMjRfMzJCRSwgVTI0XzMyTEUsIFUyNF8zMkJFLCBTMzJMRSwgUzMyQkUsIFUzMkxFLCBVMzJCRSwgUzI0TEUsIFMyNEJFLCBVMjRMRSwgVTI0QkUsIFMyMExFLCBTMjBCRSwgVTIwTEUsIFUyMEJFLCBTMThMRSwgUzE4QkUsIFUxOExFLCBVMThCRSwgRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFU4LCBTMTZMRSwgUzE2QkUsIFUxNkxFLCBVMTZCRSwgUzI0XzMyTEUsIFMyNF8zMkJFLCBVMjRfMzJMRSwgVTI0XzMyQkUsIFMzMkxFLCBTMzJCRSwgVTMyTEUsIFUzMkJFLCBTMjRMRSwgUzI0QkUsIFUyNExFLCBVMjRCRSwgUzIwTEUsIFMyMEJFLCBVMjBMRSwgVTIwQkUsIFMxOExFLCBTMThCRSwgVTE4TEUsIFUxOEJFLCBGMzJMRSwgRjMyQkUsIEY2NExFLCBGNjRCRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMSwgbGF5b3V0PShzdHJpbmcpeyBub24taW50ZXJsZWF2ZWQsIGludGVybGVhdmVkIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REZWludGVybGVhdmUtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3REZWludGVybGVhdmU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REZWludGVybGVhdmU7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGVpbnRlcmxlYXZlLS1rZWVwLXBvc2l0aW9ucyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGtlZXAtcG9zaXRpb25z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxrZWVwLXBvc2l0aW9uc+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPktlZXAgcG9zaXRpb25zOiBXaGVuIGVuYWJsZSB0aGUgY2FwcyBvbiB0aGUgb3V0cHV0IGJ1ZmZlcnMgd2lsbAotY29udGFpbiB0aGUgb3JpZ2luYWwgY2hhbm5lbCBwb3NpdGlvbnMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29ycmVjdGx5Ci1pbnRlcmxlYXZlIHRoZSBvdXRwdXQgYWdhaW4gbGF0ZXIgYnV0IGNhbiBhbHNvIGxlYWQgdG8gdW53YW50ZWQgZWZmZWN0cwotaWYgdGhlIG91dHB1dCBzaG91bGQgYmUgaGFuZGxlZCBhcyBNb25vLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPmludGVybGVhdmU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwYjQxYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmRpY2V0djogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGVhdmUuaHRtbCIgdGl0bGU9ImRlaW50ZXJsZWF2ZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaXJlY3Rzb3VuZHNpbmsuaHRtbCIgdGl0bGU9ImRpcmVjdHNvdW5kc2luayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGlyZWN0c291bmRzaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0diI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYudG9wX29mX3BhZ2UiPjwvYT5kaWNldHY8L3NwYW4+PC9oMj4KLTxwPmRpY2V0djwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2Lmh0bWwjR3N0RGljZVRWLS1zcXVhcmUtYml0cyIgdGl0bGU9IlRoZSDigJxzcXVhcmUtYml0c+KAnSBwcm9wZXJ0eSI+c3F1YXJlLWJpdHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3REaWNlVFYiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuaHRtbCNHc3REaWNlVFYtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdERpY2VUViI+R3N0RGljZVRWPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGljZXR2Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9maWx0ZXIuaHRtbCNHc3RWaWRlb0ZpbHRlci1zdHJ1Y3QiPkdzdFZpZGVvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RGljZVRWCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5EaWNlVFYgJ2RpY2VzJyB0aGUgc2NyZWVuIHVwIGludG8gbWFueSBzbWFsbCBzcXVhcmVzLCBlYWNoIGRlZmF1bHRpbmcKLXRvIGEgc2l6ZSBvZiAxNiBwaXhlbHMgYnkgMTYgcGl4ZWxzLi4gRWFjaCBzcXVhcmUgaXMgcm90YXRlZCByYW5kb21seQotaW4gb25lIG9mIGZvdXIgZGlyZWN0aW9uczogdXAgKG5vIGNoYW5nZSksIGRvd24gKDE4MCBkZWdyZWVzLCBvcgotdXBzaWRlIGRvd24pLCByaWdodCAoOTAgZGVncmVlcyBjbG9ja3dpc2UpLCBvciBsZWZ0ICg5MCBkZWdyZWVzCi1jb3VudGVyY2xvY2t3aXNlKS4gVGhlIGRpcmVjdGlvbiBvZiBlYWNoIHNxdWFyZSBub3JtYWxseSByZW1haW5zCi1jb25zaXN0ZW50IGJldHdlZW4gZWFjaCBmcmFtZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDUuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkaWNldHYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgZGljZXR2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDUuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbCNwbHVnaW4tZWZmZWN0diI+ZWZmZWN0djwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5iZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40NS43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIHhSR0IsIEJHUngsIHhCR1IgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RGljZVRWLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RGljZVRWPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RGljZVRWOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERpY2VUVi0tc3F1YXJlLWJpdHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzcXVhcmUtYml0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3F1YXJlLWJpdHPigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIHNpemUgb2YgdGhlIFNxdWFyZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzFkNDMyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaXJlY3Rzb3VuZHNpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZGlyZWN0c291bmRzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5odG1sIiB0aXRsZT0iZGljZXR2Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuaHRtbCIgdGl0bGU9ImR0bWZzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGlyZWN0c291bmRzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay50b3Bfb2ZfcGFnZSI+PC9hPmRpcmVjdHNvdW5kc2luazwvc3Bhbj48L2gyPgotPHA+ZGlyZWN0c291bmRzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaXJlY3Rzb3VuZHNpbmsub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5odG1sI0dzdERpcmVjdFNvdW5kU2luayIgdGl0bGU9InN0cnVjdCBHc3REaXJlY3RTb3VuZFNpbmsiPkdzdERpcmVjdFNvdW5kU2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbGV0cyB5b3Ugb3V0cHV0IHNvdW5kIHVzaW5nIHRoZSBEaXJlY3RTb3VuZCBBUEkuPC9wPgotPHA+Tm90ZSB0aGF0IHlvdSBzaG91bGQgYWxtb3N0IGFsd2F5cyB1c2UgZ2VuZXJpYyBhdWRpbyBjb252ZXJzaW9uIGVsZW1lbnRzCi1saWtlIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBpbiBmcm9udCBvZiBhbiBhdWRpb3NpbmsgdG8gbWFrZSBzdXJlCi15b3VyIHBpcGVsaW5lIHdvcmtzIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzICh0aG9zZSBjb252ZXJzaW9uIGVsZW1lbnRzIHdpbGwKLWFjdCBpbiBwYXNzdGhyb3VnaC1tb2RlIGlmIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDYuNC40Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b2x1bWUgdm9sdW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGlyZWN0c291bmRzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIHdpbGwgb3V0cHV0IGEgc2luZSB3YXZlIChjb250aW51b3VzIGJlZXAgc291bmQpIHRvIHlvdXIgc291bmQgY2FyZCAod2l0aAotYSB2ZXJ5IGxvdyB2b2x1bWUgYXMgcHJlY2F1dGlvbikuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXVzaWM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkaXJlY3Rzb3VuZHNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2lsbCBwbGF5IGFuIE9nZy9Wb3JiaXMgYXVkaW8gZmlsZSBhbmQgb3V0cHV0IGl0LgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ2LjQuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kaXJlY3Rzb3VuZC5odG1sI3BsdWdpbi1kaXJlY3Rzb3VuZCI+ZGlyZWN0c291bmQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpZW4gTW91dHRlICZsdDtzZWJhc3RpZW5AbW91dHRlLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi40Ni40LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGlyZWN0c291bmRzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REaXJlY3RTb3VuZFNpbmsiPjwvYT48aDM+c3RydWN0IEdzdERpcmVjdFNvdW5kU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdERpcmVjdFNvdW5kU2luayB7Ci0gIEdzdEF1ZGlvU2luayBzaW5rOwotCi0KLSAgLyogZGlyZWN0c291bmQgb2JqZWN0IGludGVyZmFjZSBwb2ludGVyICovCi0gIExQRElSRUNUU09VTkQgcERTOwotCi0gIC8qIGRpcmVjdHNvdW5kIHNvdW5kIG9iamVjdCBpbnRlcmZhY2UgcG9pbnRlciAqLwotICBMUERJUkVDVFNPVU5EQlVGRkVSIHBEU0JTZWNvbmRhcnk7Ci0KLSAgLyogZGlyZWN0U291bmQgYnVmZmVyIHNpemUgKi8KLSAgZ3VpbnQgYnVmZmVyX3NpemU7Ci0KLSAgLyogb2Zmc2V0IG9mIHRoZSBjaXJjdWxhciBidWZmZXIgd2hlcmUgd2UgbXVzdCB3cml0ZSBuZXh0ICovCi0gIGd1aW50IGN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0OwotCi0gIGd1aW50IGJ5dGVzX3Blcl9zYW1wbGU7Ci0KLSAgLyogY3VycmVudCB2b2x1bWUgc2V0dXAgYnkgbWl4ZXIgaW50ZXJmYWNlICovCi0gIGdsb25nIHZvbHVtZTsKLSAgZ2Jvb2xlYW4gbXV0ZTsKLSAgCi0gIC8qIGN1cnJlbnQgZGlyZWN0c291bmQgZGV2aWNlIElEICovCi0gIGdjaGFyICogZGV2aWNlX2lkOwotCi0gIEdzdENhcHMgKmNhY2hlZF9jYXBzOwotICAvKiBsb2NrIHVzZWQgdG8gcHJvdGVjdCB3cml0ZXMgYW5kIHJlc2V0cyAqLwotICBHTXV0ZXggZHNvdW5kX2xvY2s7Ci0KLSAgZ2Jvb2xlYW4gZmlyc3RfYnVmZmVyX2FmdGVyX3Jlc2V0OwotCi0gIEdzdEF1ZGlvUmluZ0J1ZmZlckZvcm1hdFR5cGUgdHlwZTsKLX07Ci08L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIyODczMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5kdG1mc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpcmVjdHNvdW5kc2luay5odG1sIiB0aXRsZT0iZGlyZWN0c291bmRzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sIiB0aXRsZT0iZHYxMzk0c3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdG1mc3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaXJlY3Rzb3VuZHNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdG1mc3JjLnRvcF9vZl9wYWdlIj48L2E+ZHRtZnNyYzwvc3Bhbj48L2gyPgotPHA+ZHRtZnNyYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sI0dzdERUTUZTcmMtLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnGludGVydmFs4oCdIHByb3BlcnR5Ij5pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdERUTUZTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sI0dzdERUTUZTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdERUTUZTcmMiPkdzdERUTUZTcmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdG1mc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdERUTUZTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgRFRNRlNyYyBlbGVtZW50IGdlbmVyYXRlcyBEVE1GIChJVFUtVCBRLjIzIFNwZWNpZmljYXRpb24pIHRvbmUgcGFja2V0cyBvbiByZXF1ZXN0Ci1mcm9tIGFwcGxpY2F0aW9uLiBUaGUgYXBwbGljYXRpb24gY29tbXVuaWNhdGVzIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhCi1EVE1GIGV2ZW50IHVzaW5nIGN1c3RvbSB1cHN0cmVhbSBnc3RyZWFtZXIgZXZlbnRzLiBUbyByZXBvcnQgYSBEVE1GIGV2ZW50LCBhbgotYXBwbGljYXRpb24gbXVzdCBzZW5kIGFuIGV2ZW50IG9mIHR5cGUgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgaGF2aW5nIGEKLXN0cnVjdHVyZSBvZiBuYW1lICJkdG1mLWV2ZW50IiB3aXRoIGZpZWxkcyBzZXQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcKLXRhYmxlOjwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIxIj4KLTxjb2xncm91cD4KLTxjb2wgY2xhc3M9Ik5hbWUiPgotPGNvbCBjbGFzcz0iVHlwZSI+Ci08Y29sIGNsYXNzPSJQb3NzaWJsZSB2YWx1ZXMiPgotPGNvbCBjbGFzcz0iUHVycG9zZSI+Ci08L2NvbGdyb3VwPgotPHRoZWFkPjx0cj4KLTx0aD5OYW1lPC90aD4KLTx0aD5HVHlwZTwvdGg+Ci08dGg+UG9zc2libGUgdmFsdWVzPC90aD4KLTx0aD5QdXJwb3NlPC90aD4KLTwvdHI+PC90aGVhZD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD50eXBlPC90ZD4KLTx0ZD5HX1RZUEVfSU5UPC90ZD4KLTx0ZD4wLTE8L3RkPgotPHRkPlRoZSBhcHBsaWNhdGlvbiB1c2VzIHRoaXMgZmllbGQgdG8gc3BlY2lmeSB3aGljaCBvZiB0aGUgdHdvIG1ldGhvZHMKLXNwZWNpZmllZCBpbiBSRkMgMjgzMyB0byB1c2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUgMCBmb3IgdG9uZXMgYW5kIDEgZm9yCi1uYW1lZCBldmVudHMuIFRvbmVzIGFyZSBzcGVjaWZpZWQgYnkgdGhlaXIgZnJlcXVlbmNpZXMgYW5kIGV2ZW50cyBhcmUgc3BlY2llZAotYnkgdGhlaXIgbnVtYmVyLiBUaGlzIGVsZW1lbnQgY2FuIG9ubHkgdGFrZSBldmVudHMgYXMgaW5wdXQuIERvIG5vdCBjb25mdXNlCi13aXRoICJtZXRob2QiIHdoaWNoIHNwZWNpZmllZCB0aGUgb3V0cHV0LgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+bnVtYmVyPC90ZD4KLTx0ZD5HX1RZUEVfSU5UPC90ZD4KLTx0ZD4wLTE1PC90ZD4KLTx0ZD5UaGUgZXZlbnQgbnVtYmVyLjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPnZvbHVtZTwvdGQ+Ci08dGQ+R19UWVBFX0lOVDwvdGQ+Ci08dGQ+MC0zNjwvdGQ+Ci08dGQ+VGhpcyBmaWVsZCBkZXNjcmliZXMgdGhlIHBvd2VyIGxldmVsIG9mIHRoZSB0b25lLCBleHByZXNzZWQgaW4gZEJtMAotYWZ0ZXIgZHJvcHBpbmcgdGhlIHNpZ24uIFBvd2VyIGxldmVscyByYW5nZSBmcm9tIDAgdG8gLTYzIGRCbTAuIFRoZSByYW5nZSBvZgotdmFsaWQgRFRNRiBpcyBmcm9tIDAgdG8gLTM2IGRCbTAuIENhbiBiZSBvbWl0dGVkIGlmIHN0YXJ0IGlzIHNldCB0byBGQUxTRS4KLTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPnN0YXJ0PC90ZD4KLTx0ZD5HX1RZUEVfQk9PTEVBTjwvdGQ+Ci08dGQ+VHJ1ZSBvciBGYWxzZTwvdGQ+Ci08dGQ+V2hldGhlciB0aGUgZXZlbnQgaXMgc3RhcnRpbmcgb3IgZW5kaW5nLjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPm1ldGhvZDwvdGQ+Ci08dGQ+R19UWVBFX0lOVDwvdGQ+Ci08dGQ+MjwvdGQ+Ci08dGQ+VGhlIG1ldGhvZCB1c2VkIGZvciBzZW5kaW5nIGV2ZW50LCB0aGlzIGVsZW1lbnQgd2lsbCByZWFjdCBpZiB0aGlzCi1maWVsZCBpcyBhYnNlbnQgb3IgMi4KLTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08cD5Gb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIGluZm9ybXMgdGhlIHBpcGVsaW5lIChhbmQgaW4gdHVybiwgdGhlCi1EVE1GU3JjIGVsZW1lbnQgaW5zaWRlIHRoZSBwaXBlbGluZSkgYWJvdXQgdGhlIHN0YXJ0IG9mIGEgRFRNRiBuYW1lZAotZXZlbnQgJzEnIG9mIHZvbHVtZSAtMjUgZEJtMDo8L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci1zdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICAgICAgICAgICAgICAibnVtYmVyIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICAgICAgICAgICAgICAidm9sdW1lIiwgR19UWVBFX0lOVCwgMjUsCi0gICAgICAgICAgICAgICAgICAgInN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotCi1ldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCBzdHJ1Y3R1cmUpOwotZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAocGlwZWxpbmUsIGV2ZW50KTsKLTwvcHJlPgotPHA+V2hlbiBhIERUTUYgdG9uZSBhY3R1YWxseSBzdGFydHMgb3Igc3RvcCwgYSAiZHRtZi1ldmVudC1wcm9jZXNzZWQiCi1lbGVtZW50IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RNZXNzYWdlLmh0bWwjR3N0TWVzc2FnZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNZXNzYWdlPC9zcGFuPjwvYT4gd2l0aCB0aGUgc2FtZSBmaWVsZHMgYXMgdGhlICJkdG1mLWV2ZW50IgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEV2ZW50Lmh0bWwjR3N0RXZlbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RXZlbnQ8L3NwYW4+PC9hPiB0aGF0IHdhcyB1c2VkIHRvIHJlcXVlc3QgdGhlIGV2ZW50LiBBbHNvLCBpZiBhbnkgZXZlbnQKLWhhcyBub3QgYmVlbiBwcm9jZXNzZWQgd2hlbiB0aGUgZWxlbWVudCBnb2VzIGZyb20gdGhlIFBBVVNFRCB0byB0aGUKLVJFQURZIHN0YXRlLCB0aGVuIGEgImR0bWYtZXZlbnQtZHJvcHBlZCIgbWVzc2FnZSBpcyBwb3N0ZWQgb24gdGhlCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QnVzLmh0bWwjR3N0QnVzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEJ1czwvc3Bhbj48L2E+IGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZWNlaXZlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ3LjcuNy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdG1mLmh0bWwjcGx1Z2luLWR0bWYiPmR0bWY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Zb3VuZXNzIEFsYW91aSAmbHQ7eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Tb3VyY2UvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDcuNy43LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdG1mc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdG1mc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REVE1GU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RFRNRlNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdERUTUZTcmM7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sI0dzdERUTUZTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REVE1GU3JjPC9zcGFuPjwvYT4gZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0RFRNRlNyYy5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic3RydWN0X21lbWJlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFRNRlNyYy0taW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaW50ZXJ2YWzigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JbnRlcnZhbCBpbiBtcyBiZXR3ZWVuIHR3byB0b25lIHBhY2tldHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMTAsNTBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwZHRtc3JjLCBydHBkdG1mbXV4eDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDgyN2M3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZHYxMzk0c3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuaHRtbCIgdGl0bGU9ImR0bWZzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCIgdGl0bGU9ImR2ZGVjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMudG9wX29mX3BhZ2UiPjwvYT5kdjEzOTRzcmM8L3NwYW4+PC9oMj4KLTxwPmR2MTM5NHNyYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLWNoYW5uZWwiIHRpdGxlPSJUaGUg4oCcY2hhbm5lbOKAnSBwcm9wZXJ0eSI+Y2hhbm5lbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS1jb25zZWN1dGl2ZSIgdGl0bGU9IlRoZSDigJxjb25zZWN1dGl2ZeKAnSBwcm9wZXJ0eSI+Y29uc2VjdXRpdmU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS1kcm9wLWluY29tcGxldGUiIHRpdGxlPSJUaGUg4oCcZHJvcC1pbmNvbXBsZXRl4oCdIHByb3BlcnR5Ij5kcm9wLWluY29tcGxldGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sI0dzdERWMTM5NFNyYy0tZ3VpZCIgdGl0bGU9IlRoZSDigJxndWlk4oCdIHByb3BlcnR5Ij5ndWlkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLXBvcnQiIHRpdGxlPSJUaGUg4oCccG9ydOKAnSBwcm9wZXJ0eSI+cG9ydDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS1za2lwIiB0aXRsZT0iVGhlIOKAnHNraXDigJ0gcHJvcGVydHkiPnNraXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwjR3N0RFYxMzk0U3JjLS11c2UtYXZjIiB0aXRsZT0iVGhlIOKAnHVzZS1hdmPigJ0gcHJvcGVydHkiPnVzZS1hdmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtLWRldmljZS1uYW1lIiB0aXRsZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5Ij5kZXZpY2UtbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sI0dzdERWMTM5NFNyYy1mcmFtZS1kcm9wcGVkIiB0aXRsZT0iVGhlIOKAnGZyYW1lLWRyb3BwZWTigJ0gc2lnbmFsIj5mcmFtZS1kcm9wcGVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3REVjEzOTRTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaHRtbCNHc3REVjEzOTRTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdERWMTM5NFNyYyI+R3N0RFYxMzk0U3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdERWMTM5NFNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdjEzOTRzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0RFYxMzk0U3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4gYW5kICBHc3RQcm9wZXJ0eVByb2JlLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5SZWFkIERWIChkaWdpdGFsIHZpZGVvKSBkYXRhIGZyb20gZmlyZXdpcmUgcG9ydC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDguOS4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGR2MTM5NHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGR2ZGVtdXggbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkdmRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbmsgZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uICE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGNhcHR1cmVzIGZyb20gdGhlIGZpcmV3aXJlIHBvcnQgYW5kIGRpc3BsYXlzIGl0IChtaWdodCBuZWVkCi1mb3JtYXQgY29udmVydGVycyBmb3IgYXVkaW8vdmlkZW8pLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ4LjkuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi0xMzk0Lmh0bWwjcGx1Z2luLTEzOTQiPjEzOTQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQHRlbXBsZS1iYXB0aXN0LmNvbSZndDssIERhbmllbCBGaXNjaGVyICZsdDtkYW5AZjNjLmNvbSZndDssIFdpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7LCBaYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ4LjkuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1kdiwgZm9ybWF0PShzdHJpbmcpeyBOVFNDLCBQQUwgfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REVjEzOTRTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3REVjEzOTRTcmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REVjEzOTRTcmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFYxMzk0U3JjLS1jaGFubmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2hhbm5lbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2hhbm5lbOKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2hhbm5lbCBudW1iZXIgZm9yIGxpc3RlbmluZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDY0XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDYzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REVjEzOTRTcmMtLWNvbnNlY3V0aXZlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29uc2VjdXRpdmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbnNlY3V0aXZl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPnNlbmQgbiBjb25zZWN1dGl2ZSBmcmFtZXMgYWZ0ZXIgc2tpcHBpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAxPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFYxMzk0U3JjLS1kcm9wLWluY29tcGxldGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkcm9wLWluY29tcGxldGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRyb3AtaW5jb21wbGV0ZeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+ZHJvcCBpbmNvbXBsZXRlIGZyYW1lcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFYxMzk0U3JjLS1ndWlkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ3VpZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZ3VpZOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+c2VsZWN0IG9uZSBvZiBtdWx0aXBsZSBEViBkZXZpY2VzIGJ5IGl0cyBHVUlELiB1c2UgYSBoZXhhZGVjaW1hbCBsaWtlIDB4aGhoaGhoaGhoaGhoaGhoaC4gKDAgPSBubyBndWlkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFYxMzk0U3JjLS1wb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9ydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9ydOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UG9ydCBudW1iZXIgKC0xIGF1dG9tYXRpYykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbR19NQVhVTE9ORywxNl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFYxMzk0U3JjLS1za2lwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2tpcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2tpcOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+c2tpcCBuIGZyYW1lcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REVjEzOTRTcmMtLXVzZS1hdmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1c2UtYXZj4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1c2UtYXZj4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSBBVi9DIFZUUiBjb250cm9sLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REVjEzOTRTcmMtLWRldmljZS1uYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNlLW5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRldmljZS1uYW1l4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+RGVzY3JpcHRpdmUgbmFtZSBvZiB0aGUgY3VycmVudGx5IG9wZW5lZCBkZXZpY2U8L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICJEZWZhdWx0IjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERWMTM5NFNyYy1mcmFtZS1kcm9wcGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZnJhbWUtZHJvcHBlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sI0dzdERWMTM5NFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdERWMTM5NFNyYzwvc3Bhbj48L2E+ICpnc3RkdjEzOTRzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NDAzMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmR2ZGVjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sIiB0aXRsZT0iZHYxMzk0c3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVtdXguaHRtbCIgdGl0bGU9ImR2ZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMudG9wX29mX3BhZ2UiPjwvYT5kdmRlYzwvc3Bhbj48L2gyPgotPHA+ZHZkZWM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwjR3N0RFZEZWMtLWNsYW1wLWNocm9tYSIgdGl0bGU9IlRoZSDigJxjbGFtcC1jaHJvbWHigJ0gcHJvcGVydHkiPmNsYW1wLWNocm9tYTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5odG1sI0dzdERWRGVjLS1jbGFtcC1sdW1hIiB0aXRsZT0iVGhlIOKAnGNsYW1wLWx1bWHigJ0gcHJvcGVydHkiPmNsYW1wLWx1bWE8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwjR3N0RFZEZWMtLWRyb3AtZmFjdG9yIiB0aXRsZT0iVGhlIOKAnGRyb3AtZmFjdG9y4oCdIHByb3BlcnR5Ij5kcm9wLWZhY3RvcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REVkRlY1F1YWxpdHlFbnVtPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCNHc3REVkRlYy0tcXVhbGl0eSIgdGl0bGU9IlRoZSDigJxxdWFsaXR54oCdIHByb3BlcnR5Ij5xdWFsaXR5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3REVkRlYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCNHc3REVkRlYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RFZEZWMiPkdzdERWRGVjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdERWRGVjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPmR2ZGVjIGRlY29kZXMgRFYgdmlkZW8gaW50byByYXcgdmlkZW8uIFRoZSBlbGVtZW50IGV4cGVjdHMgYSBmdWxsIERWIGZyYW1lCi1hcyBpbnB1dCwgd2hpY2ggaXMgMTIwMDAwIGJ5dGVzIGZvciBOVFNDIGFuZCAxNDQwMDAgZm9yIFBBTCB2aWRlby48L3A+Ci08cD5UaGlzIGVsZW1lbnQgY2FuIHBlcmZvcm0gc2ltcGxlIGZyYW1lIGRyb3BwaW5nIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCNHc3REVkRlYy0tZHJvcC1mYWN0b3IiIHRpdGxlPSJUaGUg4oCcZHJvcC1mYWN0b3LigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxkcm9wLWZhY3RvcuKAnTwvc3Bhbj48L2E+Ci1wcm9wZXJ0eS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIGEgdmFsdWUgTiAmZ3Q7IDEgd2lsbCBvbmx5IGRlY29kZSBldmVyeSAKLU50aCBmcmFtZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNDkuNy40Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+ZHYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGR2ZGVtdXggbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmRlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkdmRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBkZWNvZGVzIGFuZCByZW5kZXJzIHRoZSByYXcgRFYgc3RyZWFtIHRvIGEgdmlkZW9zaW5rLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ5LjcuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sI3BsdWdpbi1kdiI+ZHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OyxXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZWNvZGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjQ5LjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFlVWTIsIEJHUngsIFJHQiB9LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMS8xLCA2MC8xIF0sIHdpZHRoPShpbnQpNzIwLCBoZWlnaHQ9KGludCl7IDU3NiwgNDgwIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFZEZWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3REVkRlYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdERWRGVjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFZEZWMtLWNsYW1wLWNocm9tYSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsYW1wLWNocm9tYeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2xhbXAtY2hyb21h4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DbGFtcCBjaHJvbWEuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REVkRlYy0tY2xhbXAtbHVtYSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsYW1wLWx1bWHigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsYW1wLWx1bWHigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2xhbXAgbHVtYS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdERWRGVjLS1kcm9wLWZhY3RvciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRyb3AtZmFjdG9y4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkcm9wLWZhY3RvcuKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Pbmx5IGRlY29kZSBOdGggZnJhbWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAxPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFZEZWMtLXF1YWxpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxxdWFsaXR54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxxdWFsaXR54oCdICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdERWRGVjUXVhbGl0eUVudW08L3NwYW4+PC9wcmU+Ci08cD5EZWNvZGluZyBxdWFsaXR5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBIaWdoZXN0IHF1YWxpdHkgY29sb3VyIGRlY29kaW5nPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGNkYzhmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmR2ZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZWMuaHRtbCIgdGl0bGU9ImR2ZGVjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCIgdGl0bGU9ImR5bnVkcHNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5kdmRlbXV4PC9zcGFuPjwvaDI+Ci08cD5kdmRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdERWRGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5odG1sI0dzdERWRGVtdXgtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdERWRGVtdXgiPkdzdERWRGVtdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlbXV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3REVkRlbXV4Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+ZHZkZW11eCBzcGxpdHMgcmF3IERWIGludG8gaXRzIGF1ZGlvIGFuZCB2aWRlbyBjb21wb25lbnRzLiBUaGUgYXVkaW8gd2lsbCBiZQotZGVjb2RlZCByYXcgc2FtcGxlcyBhbmQgdGhlIHZpZGVvIHdpbGwgYmUgZW5jb2RlZCBEViB2aWRlby48L3A+Ci08cD5UaGlzIGVsZW1lbnQgY2FuIG9wZXJhdGUgaW4gYm90aCBwdXNoIGFuZCBwdWxsIG1vZGUgZGVwZW5kaW5nIG9uIHRoZQotY2FwYWJpbGl0aWVzIG9mIHRoZSB1cHN0cmVhbSBwZWVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41MC42LjQiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5kdiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZHZkZW11eCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rIGRlbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4gITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGR2ZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4dmltYWdlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGRlY29kZXMgYW5kIHJlbmRlcnMgdGhlIHJhdyBEViBzdHJlYW0gdG8gYW4gYXVkaW8gYW5kIGEgdmlkZW9zaW5rLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjUwLjYuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sI3BsdWdpbi1kdiI+ZHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVtdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41MC42LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KXsgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9LCBjaGFubmVscz0oaW50KXsgMiwgNCB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RFZEZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdERWRGVtdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REVkRlbXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGUwZDk2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmR5bnVkcHNpbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5odG1sIiB0aXRsZT0iZHZkZW11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYuaHRtbCIgdGl0bGU9ImVkZ2V0diI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVkZ2V0di5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsudG9wX29mX3BhZ2UiPjwvYT5keW51ZHBzaW5rPC9zcGFuPjwvaDI+Ci08cD5keW51ZHBzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCNHc3REeW5VRFBTaW5rLS1jbG9zZS1zb2NrZXQiIHRpdGxlPSJUaGUg4oCcY2xvc2Utc29ja2V04oCdIHByb3BlcnR5Ij5jbG9zZS1zb2NrZXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sI0dzdER5blVEUFNpbmstLXNvY2tldCIgdGl0bGU9IlRoZSDigJxzb2NrZXTigJ0gcHJvcGVydHkiPnNvY2tldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCNHc3REeW5VRFBTaW5rLS1iaW5kLWFkZHJlc3MiIHRpdGxlPSJUaGUg4oCcYmluZC1hZGRyZXNz4oCdIHByb3BlcnR5Ij5iaW5kLWFkZHJlc3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCNHc3REeW5VRFBTaW5rLS1iaW5kLXBvcnQiIHRpdGxlPSJUaGUg4oCcYmluZC1wb3J04oCdIHByb3BlcnR5Ij5iaW5kLXBvcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sI0dzdER5blVEUFNpbmstLXNvY2tldC12NiIgdGl0bGU9IlRoZSDigJxzb2NrZXQtdjbigJ0gcHJvcGVydHkiPnNvY2tldC12NjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPio8L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luay1nZXQtc3RhdHMiIHRpdGxlPSJUaGUg4oCcZ2V0LXN0YXRz4oCdIHNpZ25hbCI+Z2V0LXN0YXRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdER5blVEUFNpbmsiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sI0dzdER5blVEUFNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdER5blVEUFNpbmsiPkdzdER5blVEUFNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+R3N0QmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdER5blVEUFNpbmsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjUxLjguMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbCNwbHVnaW4tdWRwIj51ZHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QaGlsaXBwZSBLaGFsYWYgJmx0O2J1cmdlckBzcGVlZHkub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL05ldHdvcms8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTEuOC4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RHluVURQU2luay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdER5blVEUFNpbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3REeW5VRFBTaW5rOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REeW5VRFBTaW5rLS1jbG9zZS1zb2NrZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbG9zZS1zb2NrZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsb3NlLXNvY2tldOKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2xvc2Ugc29ja2V0IGlmIHBhc3NlZCBhcyBwcm9wZXJ0eSBvbiBzdGF0ZSBjaGFuZ2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdER5blVEUFNpbmstLXNvY2tldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNvY2tldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc29ja2V04oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U29ja2V0IHRvIHVzZSBmb3IgVURQIHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REeW5VRFBTaW5rLS1iaW5kLWFkZHJlc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiaW5kLWFkZHJlc3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJpbmQtYWRkcmVzc+KAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+QWRkcmVzcyB0byBiaW5kIHRoZSBzb2NrZXQgdG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdER5blVEUFNpbmstLWJpbmQtcG9ydCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJpbmQtcG9ydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmluZC1wb3J04oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UG9ydCB0byBiaW5kIHRoZSBzb2NrZXQgdG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw2NTUzNV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3REeW5VRFBTaW5rLS1zb2NrZXQtdjYiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzb2NrZXQtdjbigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNvY2tldC12NuKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlNvY2tldCB0byB1c2UgZm9yIFVEUHY2IHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdER5blVEUFNpbmstZ2V0LXN0YXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ2V0LXN0YXRz4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+KgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwjR3N0RHluVURQU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdER5blVEUFNpbms8L3NwYW4+PC9hPiAqZ3N0ZHludWRwc2luaywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICAgICAgICAgKmFyZzEsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgIGFyZzIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhZGRjYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmVkZ2V0djogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1keW51ZHBzaW5rLmh0bWwiIHRpdGxlPSJkeW51ZHBzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwiIHRpdGxlPSJlcXVhbGl6ZXItMTBiYW5kcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2LnRvcF9vZl9wYWdlIj48L2E+ZWRnZXR2PC9zcGFuPjwvaDI+Ci08cD5lZGdldHY8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0RWRnZVRWIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVkZ2V0di5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2Lmh0bWwjR3N0RWRnZVRWLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RFZGdlVFYiPkdzdEVkZ2VUVjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVkZ2V0di5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEVkZ2VUVgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RWRnZVRWIGRldGVjdHMgZWRnZXMgYW5kIGRpc3BsYXkgaXQgaW4gZ29vZCBvbGQgbG93IHJlc29sdXRpb24KLWNvbXB1dGVyIHdheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTIuNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBlZGdldHYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgZWRnZXR2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTIuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbCNwbHVnaW4tZWZmZWN0diI+ZWZmZWN0djwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTIuNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEVkZ2VUVi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEVkZ2VUVjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEVkZ2VUVjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGI0ZDJjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5lcXVhbGl6ZXItMTBiYW5kczogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lZGdldHYuaHRtbCIgdGl0bGU9ImVkZ2V0diI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwiIHRpdGxlPSJlcXVhbGl6ZXItM2JhbmRzIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZWRnZXR2Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy50b3Bfb2ZfcGFnZSI+PC9hPmVxdWFsaXplci0xMGJhbmRzPC9zcGFuPjwvaDI+Ci08cD5lcXVhbGl6ZXItMTBiYW5kczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDAiIHRpdGxlPSJUaGUg4oCcYmFuZDDigJ0gcHJvcGVydHkiPmJhbmQwPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQxIiB0aXRsZT0iVGhlIOKAnGJhbmQx4oCdIHByb3BlcnR5Ij5iYW5kMTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kMiIgdGl0bGU9IlRoZSDigJxiYW5kMuKAnSBwcm9wZXJ0eSI+YmFuZDI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDMiIHRpdGxlPSJUaGUg4oCcYmFuZDPigJ0gcHJvcGVydHkiPmJhbmQzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQ0IiB0aXRsZT0iVGhlIOKAnGJhbmQ04oCdIHByb3BlcnR5Ij5iYW5kNDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kNSIgdGl0bGU9IlRoZSDigJxiYW5kNeKAnSBwcm9wZXJ0eSI+YmFuZDU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDYiIHRpdGxlPSJUaGUg4oCcYmFuZDbigJ0gcHJvcGVydHkiPmJhbmQ2PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQ3IiB0aXRsZT0iVGhlIOKAnGJhbmQ34oCdIHByb3BlcnR5Ij5iYW5kNzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kOCIgdGl0bGU9IlRoZSDigJxiYW5kOOKAnSBwcm9wZXJ0eSI+YmFuZDg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDkiIHRpdGxlPSJUaGUg4oCcYmFuZDnigJ0gcHJvcGVydHkiPmJhbmQ5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjEwQmFuZHMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdElpckVxdWFsaXplcjEwQmFuZHMiPkdzdElpckVxdWFsaXplcjEwQmFuZHM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZmlsdGVyLmh0bWwjR3N0QXVkaW9GaWx0ZXItc3RydWN0Ij5Hc3RBdWRpb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmh0bWwjR3N0SWlyRXF1YWxpemVyIj5Hc3RJaXJFcXVhbGl6ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SWlyRXF1YWxpemVyMTBCYW5kcwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0Ij5Hc3RDaGlsZFByb3h5PC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSAxMCBiYW5kIGVxdWFsaXplciBlbGVtZW50IGFsbG93cyB0byBjaGFuZ2UgdGhlIGdhaW4gb2YgMTAgZXF1YWxseSBkaXN0cmlidXRlZAotZnJlcXVlbmN5IGJhbmRzIGJldHdlZW4gMzAgSHogYW5kIDE1IGtIei48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTMuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zb25nPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGVxdWFsaXplcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwPC9zcGFuPmJhbmRzIGJhbmQyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+My4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyByYWlzZXMgdGhlIHZvbHVtZSBvZiB0aGUgM3JkIGJhbmQgd2hpY2ggaXMgYXQgMTE5IEh6IGJ5IDMgZGIuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTMuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVxdWFsaXplci5odG1sI3BsdWdpbi1lcXVhbGl6ZXIiPmVxdWFsaXplcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlN0ZWZhbiBLb3N0ICZsdDtlbnNvbmljQHVzZXJzLnNmLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41My44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxMDAwLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEwMDAsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyMTBCYW5kcy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdElpckVxdWFsaXplcjEwQmFuZHM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kMOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDDigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDI5IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFstMjQsMTJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDEiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kMeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDHigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDU5IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFstMjQsMTJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kMuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDLigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDExOSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTI0LDEyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmFuZDPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJhbmQz4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAyMzcgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0yNCwxMl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kNCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJhbmQ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxiYW5kNOKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5nYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgNDc0IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFstMjQsMTJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kNeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDXigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDk0NyBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTI0LDEyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQ2Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmFuZDbigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJhbmQ24oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAxODg5IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFstMjQsMTJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyMTBCYW5kcy0tYmFuZDciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kN+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDfigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDM3NzAgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0yNCwxMl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzLS1iYW5kOCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJhbmQ44oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxiYW5kOOKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5nYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgNzUyMyBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTI0LDEyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplcjEwQmFuZHMtLWJhbmQ5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmFuZDnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJhbmQ54oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAxNTAxMSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTI0LDEyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNTMzYzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZXF1YWxpemVyLTNiYW5kczogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sIiB0aXRsZT0iZXF1YWxpemVyLTEwYmFuZHMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5odG1sIiB0aXRsZT0iZXF1YWxpemVyLW5iYW5kcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTEwYmFuZHMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy50b3Bfb2ZfcGFnZSI+PC9hPmVxdWFsaXplci0zYmFuZHM8L3NwYW4+PC9oMj4KLTxwPmVxdWFsaXplci0zYmFuZHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIzQmFuZHMtLWJhbmQwIiB0aXRsZT0iVGhlIOKAnGJhbmQw4oCdIHByb3BlcnR5Ij5iYW5kMDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sI0dzdElpckVxdWFsaXplcjNCYW5kcy0tYmFuZDEiIHRpdGxlPSJUaGUg4oCcYmFuZDHigJ0gcHJvcGVydHkiPmJhbmQxPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyM0JhbmRzLS1iYW5kMiIgdGl0bGU9IlRoZSDigJxiYW5kMuKAnSBwcm9wZXJ0eSI+YmFuZDI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplcjNCYW5kcyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyM0JhbmRzLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJaXJFcXVhbGl6ZXIzQmFuZHMiPkdzdElpckVxdWFsaXplcjNCYW5kczwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2ZpbHRlci5odG1sI0dzdEF1ZGlvRmlsdGVyLXN0cnVjdCI+R3N0QXVkaW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5odG1sI0dzdElpckVxdWFsaXplciI+R3N0SWlyRXF1YWxpemVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdElpckVxdWFsaXplcjNCYW5kcwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdElpckVxdWFsaXplcjNCYW5kcyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSAzLWJhbmQgZXF1YWxpemVyIGVsZW1lbnQgYWxsb3dzIHRvIGNoYW5nZSB0aGUgZ2FpbiBvZiBhIGxvdyBmcmVxdWVuY3ksCi1tZWRpdW0gZnJlcXVlbmN5IGFuZCBoaWdoIGZyZXF1ZW5jeSBiYW5kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41NC44LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNvbmc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZXF1YWxpemVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Mzwvc3Bhbj5iYW5kcyBiYW5kMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjYuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcmFpc2VzIHRoZSB2b2x1bWUgb2YgdGhlIDJuZCBiYW5kLCB3aGljaCBpcyBhdCAxMTEwIEh6LCBieSA2IGRiLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjU0LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lcXVhbGl6ZXIuaHRtbCNwbHVnaW4tZXF1YWxpemVyIj5lcXVhbGl6ZXI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTQuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMTAwMCwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxMDAwLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXIzQmFuZHMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RJaXJFcXVhbGl6ZXIzQmFuZHM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJaXJFcXVhbGl6ZXIzQmFuZHM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplcjNCYW5kcy0tYmFuZDAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kMOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDDigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDEwMCBIeiwgcmFuZ2luZyBmcm9tIC0yNC4wIHRvICsxMi4wLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0yNCwxMl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXIzQmFuZHMtLWJhbmQxIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYmFuZDHigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJhbmQx4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPmdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAxMTAwIEh6LCByYW5naW5nIGZyb20gLTI0LjAgdG8gKzEyLjAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTI0LDEyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplcjNCYW5kcy0tYmFuZDIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kMuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZDLigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+Z2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDExIGtIeiwgcmFuZ2luZyBmcm9tIC0yNC4wIHRvICsxMi4wLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0yNCwxMl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmJiODhhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmVxdWFsaXplci1uYmFuZHM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLTNiYW5kcy5odG1sIiB0aXRsZT0iZXF1YWxpemVyLTNiYW5kcyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLmh0bWwiIHRpdGxlPSJmbGFjZGVjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci1uYmFuZHMudG9wX29mX3BhZ2UiPjwvYT5lcXVhbGl6ZXItbmJhbmRzPC9zcGFuPjwvaDI+Ci08cD5lcXVhbGl6ZXItbmJhbmRzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyTkJhbmRzLS1udW0tYmFuZHMiIHRpdGxlPSJUaGUg4oCcbnVtLWJhbmRz4oCdIHByb3BlcnR5Ij5udW0tYmFuZHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXJOQmFuZHMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5odG1sI0dzdElpckVxdWFsaXplck5CYW5kcy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SWlyRXF1YWxpemVyTkJhbmRzIj5Hc3RJaXJFcXVhbGl6ZXJOQmFuZHM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9maWx0ZXIuaHRtbCNHc3RBdWRpb0ZpbHRlci1zdHJ1Y3QiPkdzdEF1ZGlvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIuaHRtbCNHc3RJaXJFcXVhbGl6ZXIiPkdzdElpckVxdWFsaXplcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RJaXJFcXVhbGl6ZXJOQmFuZHMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RJaXJFcXVhbGl6ZXJOQmFuZHMgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1zdHJ1Y3QiPkdzdENoaWxkUHJveHk8L2E+IGFuZCAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFByZXNldC5odG1sI0dzdFByZXNldC1zdHJ1Y3QiPkdzdFByZXNldDwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgbi1iYW5kIGVxdWFsaXplciBlbGVtZW50IGlzIGEgZnVsbHkgcGFyYW1ldHJpYyBlcXVhbGl6ZXIuIEl0IGFsbG93cyB0bwotc2VsZWN0IGJldHdlZW4gMSBhbmQgNjQgYmFuZHMgYW5kIGhhcyBwcm9wZXJ0aWVzIG9uIGVhY2ggYmFuZCB0byBjaGFuZ2UKLXRoZSBjZW50ZXIgZnJlcXVlbmN5LCBiYW5kIHdpZHRoIGFuZCBnYWluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41NS44LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNvbmc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZXF1YWxpemVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bmJhbmRzIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJhbmRzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTU8L3NwYW4+IGJhbmQ1PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo6PC9zcGFuPmdhaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj42LjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIG1ha2UgdGhlIGVxdWFsaXplciB1c2UgMTUgYmFuZHMgYW5kIHJhaXNlcyB0aGUgdm9sdW1lIG9mIHRoZSA1dGggYmFuZCBieSA2IGRiLgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTUuOC40Ij48L2E+PGgzPkV4YW1wbGUgY29kZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLTkKLTEwCi0xMQotMTIKLTEzCi0xNAotMTUKLTE2Ci0xNwotMTgKLTE5Ci0yMAotMjEKLTIyCi0yMwotMjQKLTI1Ci0yNgotMjcKLTI4Ci0yOQotMzAKLTMxCi0zMgotMzMKLTM0Ci0zNQotMzYKLTM3Ci0zODwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Li4uPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2MiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdHJ1Y3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij57PC9zcGFuPgotICBnZmxvYXQgZnJlcTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBnZmxvYXQgd2lkdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgZ2Zsb2F0IGdhaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPiBHc3RFcXVhbGl6ZXJCYW5kU3RhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLQotICBHc3RFbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmVxdWFsaXplcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBHT2JqZWN0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmJhbmQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgZ2ludCBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdzdEVxdWFsaXplckJhbmRTdGF0ZSBzdGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bXSA9IHs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMC4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiAgIDxzcGFuIGNsYXNzPSJudW1iZXIiPjUwLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgLTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+My4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59LDwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NTAwLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ICAgPHNwYW4gY2xhc3M9Im51bWJlciI+MjAuMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gIDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn0sPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij57PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE1MDMuMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gICAgPHNwYW4gY2xhc3M9Im51bWJlciI+Mi4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sIC08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjAuMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fSw8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NjAwMC4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDAwLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ICAgPHNwYW4gY2xhc3M9Im51bWJlciI+Ni4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59LDwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4zMDAwLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ICA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjAuMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gICA8c3BhbiBjbGFzcz0ibnVtYmVyIj4yLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59Ozwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLQotICBlcXVhbGl6ZXIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtlcXVhbGl6ZXItbmJhbmRzJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtlcXVhbGl6ZXImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij5nX29iamVjdF9zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lcXVhbGl6ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O251bS1iYW5kcyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4uLjwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Zm9yPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5pIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPiBpIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPisrKSB7PC9zcGFuPgotICAgIGJhbmQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNnc3QtY2hpbGQtcHJveHktZ2V0LWNoaWxkLWJ5LWluZGV4Ij5nc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQ0hJTERfUFJPWFk8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmVxdWFsaXplcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pLDwvc3Bhbj4gaTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij5nX29iamVjdF9zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5iYW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtmcmVxJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBzdGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5bPC9zcGFuPmk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+XS48L3NwYW4+ZnJlcTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtiYW5kd2lkdGgmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHN0YXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPls8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dLjwvc3Bhbj53aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotCTxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2dhaW4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHN0YXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPls8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij5dLjwvc3Bhbj5nYWluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNnLW9iamVjdC11bnJlZiI+Z19vYmplY3RfdW5yZWY8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjRy1PQkpFQ1Q6Q0FQUyI+R19PQkpFQ1Q8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5iYW5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uLi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTUuOC41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVxdWFsaXplci5odG1sI3BsdWdpbi1lcXVhbGl6ZXIiPmVxdWFsaXplcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkJlbmphbWluIE90dGUgJmx0O290dGVAZ25vbWUub3JnJmd0OywgU3RlZmFuIEtvc3QgJmx0O2Vuc29uaWNAdXNlcnMuc2YubmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjU1LjguNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEwMDAsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMTAwMCwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SWlyRXF1YWxpemVyTkJhbmRzLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SWlyRXF1YWxpemVyTkJhbmRzPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SWlyRXF1YWxpemVyTkJhbmRzOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJaXJFcXVhbGl6ZXJOQmFuZHMtLW51bS1iYW5kcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG51bS1iYW5kc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnVtLWJhbmRz4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5udW1iZXIgb2YgZGlmZmVyZW50IGJhbmRzIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDY0XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDk0MjBiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZsYWNkZWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZXF1YWxpemVyLW5iYW5kcy5odG1sIiB0aXRsZT0iZXF1YWxpemVyLW5iYW5kcyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwiIHRpdGxlPSJmbGFjZW5jIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItbmJhbmRzLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMudG9wX29mX3BhZ2UiPjwvYT5mbGFjZGVjPC9zcGFuPjwvaDI+Ci08cD5mbGFjZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEZsYWNEZWMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5odG1sI0dzdEZsYWNEZWMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEZsYWNEZWMiPkdzdEZsYWNEZWM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZGVjb2Rlci5odG1sI0dzdEF1ZGlvRGVjb2Rlci1zdHJ1Y3QiPkdzdEF1ZGlvRGVjb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RmxhY0RlYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZGVjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPmZsYWNkZWMgZGVjb2RlcyBGTEFDIHN0cmVhbXMuPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZmxhYy5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il90b3AiPkZMQUM8L2E+PHA+aXMgYSBGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41Ny42LjUiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm1lZGlhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+c21hbGw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj5kYXJrPHNwYW4gY2xhc3M9Im51bWJlciI+LjQ0MTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xNjwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+ZmxhYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmxhY3BhcnNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmbGFjZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBzb3VwaHR0cHNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmh0dHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL21lZGlhL3NtYWxsL2RhcmsuNDQxLTE2LXMuZmxhYyAhIGZsYWNwYXJzZSAhIGZsYWNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgcXVldWUgbWluLXRocmVzaG9sZC1idWZmZXJzPTEwICEgYXV0b2F1ZGlvc2luazwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41Ny42LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmxhYy5odG1sI3BsdWdpbi1mbGFjIj5mbGFjPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltQGNlbnRyaWN1bGFyLm5ldCZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlY29kZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNTcuNi42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtZmxhYywgZnJhbWVkPShib29sZWFuKXRydWUsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KVsgMSwgOCBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNF8zMkxFLCBTMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA4IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNEZWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RGbGFjRGVjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RmxhY0RlYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmxhY0VuYzwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyODViMC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDUxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5mbGFjZW5jOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMuaHRtbCIgdGl0bGU9ImZsYWNkZWMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmh0bWwiIHRpdGxlPSJmbGFjcGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLnRvcF9vZl9wYWdlIj48L2E+ZmxhY2VuYzwvc3Bhbj48L2gyPgotPHA+ZmxhY2VuYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tYmxvY2tzaXplIiB0aXRsZT0iVGhlIOKAnGJsb2Nrc2l6ZeKAnSBwcm9wZXJ0eSI+YmxvY2tzaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1lc2NhcGUtY29kaW5nIiB0aXRsZT0iVGhlIOKAnGVzY2FwZS1jb2RpbmfigJ0gcHJvcGVydHkiPmVzY2FwZS1jb2Rpbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLWV4aGF1c3RpdmUtbW9kZWwtc2VhcmNoIiB0aXRsZT0iVGhlIOKAnGV4aGF1c3RpdmUtbW9kZWwtc2VhcmNo4oCdIHByb3BlcnR5Ij5leGhhdXN0aXZlLW1vZGVsLXNlYXJjaDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tbG9vc2UtbWlkLXNpZGUtc3RlcmVvIiB0aXRsZT0iVGhlIOKAnGxvb3NlLW1pZC1zaWRlLXN0ZXJlb+KAnSBwcm9wZXJ0eSI+bG9vc2UtbWlkLXNpZGUtc3RlcmVvPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1tYXgtbHBjLW9yZGVyIiB0aXRsZT0iVGhlIOKAnG1heC1scGMtb3JkZXLigJ0gcHJvcGVydHkiPm1heC1scGMtb3JkZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLW1heC1yZXNpZHVhbC1wYXJ0aXRpb24tb3JkZXIiIHRpdGxlPSJUaGUg4oCcbWF4LXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlcuKAnSBwcm9wZXJ0eSI+bWF4LXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tbWlkLXNpZGUtc3RlcmVvIiB0aXRsZT0iVGhlIOKAnG1pZC1zaWRlLXN0ZXJlb+KAnSBwcm9wZXJ0eSI+bWlkLXNpZGUtc3RlcmVvPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1taW4tcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVyIiB0aXRsZT0iVGhlIOKAnG1pbi1yZXNpZHVhbC1wYXJ0aXRpb24tb3JkZXLigJ0gcHJvcGVydHkiPm1pbi1yZXNpZHVhbC1wYXJ0aXRpb24tb3JkZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLXFscC1jb2VmZi1wcmVjLXNlYXJjaCIgdGl0bGU9IlRoZSDigJxxbHAtY29lZmYtcHJlYy1zZWFyY2jigJ0gcHJvcGVydHkiPnFscC1jb2VmZi1wcmVjLXNlYXJjaDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tcWxwLWNvZWZmLXByZWNpc2lvbiIgdGl0bGU9IlRoZSDigJxxbHAtY29lZmYtcHJlY2lzaW9u4oCdIHByb3BlcnR5Ij5xbHAtY29lZmYtcHJlY2lzaW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZsYWNFbmNRdWFsaXR5PC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLXF1YWxpdHkiIHRpdGxlPSJUaGUg4oCccXVhbGl0eeKAnSBwcm9wZXJ0eSI+cXVhbGl0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy0tcmljZS1wYXJhbWV0ZXItc2VhcmNoLWRpc3QiIHRpdGxlPSJUaGUg4oCccmljZS1wYXJhbWV0ZXItc2VhcmNoLWRpc3TigJ0gcHJvcGVydHkiPnJpY2UtcGFyYW1ldGVyLXNlYXJjaC1kaXN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCNHc3RGbGFjRW5jLS1zdHJlYW1hYmxlLXN1YnNldCIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxlLXN1YnNldOKAnSBwcm9wZXJ0eSI+c3RyZWFtYWJsZS1zdWJzZXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLXBhZGRpbmciIHRpdGxlPSJUaGUg4oCccGFkZGluZ+KAnSBwcm9wZXJ0eSI+cGFkZGluZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sI0dzdEZsYWNFbmMtLXNlZWtwb2ludHMiIHRpdGxlPSJUaGUg4oCcc2Vla3BvaW50c+KAnSBwcm9wZXJ0eSI+c2Vla3BvaW50czwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0RmxhY0VuYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwjR3N0RmxhY0VuYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmxhY0VuYyI+R3N0RmxhY0VuYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9lbmNvZGVyLmh0bWwjR3N0QXVkaW9FbmNvZGVyLXN0cnVjdCI+R3N0QXVkaW9FbmNvZGVyPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RGbGFjRW5jCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0RmxhY0VuYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPkdzdFRhZ1NldHRlcjwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPmZsYWNlbmMgZW5jb2RlcyBGTEFDIHN0cmVhbXMuPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vZmxhYy5zb3VyY2Vmb3JnZS5uZXQvIiB0YXJnZXQ9Il90b3AiPkZMQUM8L2E+PHA+aXMgYSBGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjLiBGTEFDIGF1ZGlvIGNhbiBkaXJlY3RseSBiZSB3cml0dGVuIGludG8KLWEgZmlsZSwgb3IgZW1iZWRkZWQgaW50byBjb250YWluZXJzIHN1Y2ggYXMgb2dnbXV4IG9yIG1hdHJvc2thbXV4LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41OC44LjUiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmbGFjZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJlZXA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5mbGFjPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEVuY29kZSBhIHNob3J0IHNpbmUgd2F2ZSBpbnRvIEZMQUMKLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBjZHBhcmFub2lhc3JjIG1vZGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5jb250aW51b3VzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmbGFjZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmNkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+ZmxhYzwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSaXAgYSB3aG9sZSBhdWRpbyBDRCBpbnRvIGEgc2luZ2xlIEZMQUMgZmlsZSwgd2l0aCB0aGUgdHJhY2sgdGFibGUgc2F2ZWQgYXMgYSBDVUUgc2hlZXQgaW5zaWRlIHRoZSBGTEFDIGZpbGUKLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBjZHBhcmFub2lhc3JjIHRyYWNrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZsYWNlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dHJhY2s1PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+ZmxhYzwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSaXAgdHJhY2sgNSBvZiBhbiBhdWRpbyBDRCBhbmQgZW5jb2RlIGl0IGxvc3NsZXNzbHkgdG8gYSBGTEFDIGZpbGUKLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41OC44LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmxhYy5odG1sI3BsdWdpbi1mbGFjIj5mbGFjPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGNoZWxsby5iZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRW5jb2Rlci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41OC44LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMjRMRSwgUzI0XzMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KTE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNExFLCBTMjRfMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzI0TEUsIFMyNF8zMkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCA2NTUzNTAgXSwgY2hhbm5lbHM9KGludCkzLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDA3PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMjRMRSwgUzI0XzMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KTQsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMzM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNExFLCBTMjRfMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpNSwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAzNzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzI0TEUsIFMyNF8zMkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCA2NTUzNTAgXSwgY2hhbm5lbHM9KGludCk2LCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDNmPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMjRMRSwgUzI0XzMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KTcsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAxM2Y8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNExFLCBTMjRfMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpOCwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMGMzZjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1mbGFjPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0RmxhY0VuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZsYWNFbmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNFbmMtLWJsb2Nrc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJsb2Nrc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmxvY2tzaXpl4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5CbG9ja3NpemUgaW4gc2FtcGxlcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxNiw2NTUzNV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA0NjA4PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLS1lc2NhcGUtY29kaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZXNjYXBlLWNvZGluZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZXNjYXBlLWNvZGluZ+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5zZWFyY2ggZm9yIGVzY2FwZSBjb2RlcyBpbiB0aGUgZW50cm9weSBjb2Rpbmcgc3RhZ2UgZm9yIHNsaWdodGx5IGJldHRlciBjb21wcmVzc2lvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNFbmMtLWV4aGF1c3RpdmUtbW9kZWwtc2VhcmNoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZXhoYXVzdGl2ZS1tb2RlbC1zZWFyY2jigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4aGF1c3RpdmUtbW9kZWwtc2VhcmNo4oCdICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+ZG8gZXhoYXVzdGl2ZSBzZWFyY2ggb2YgTFAgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIChleHBlbnNpdmUhKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNFbmMtLWxvb3NlLW1pZC1zaWRlLXN0ZXJlbyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvb3NlLW1pZC1zaWRlLXN0ZXJlb+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9vc2UtbWlkLXNpZGUtc3RlcmVv4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Mb29zZSBtaWQgc2lkZSBzdGVyZW8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLS1tYXgtbHBjLW9yZGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LWxwYy1vcmRlcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWxwYy1vcmRlcuKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXggTFBDIG9yZGVyOyAwID0mZ3Q7IHVzZSBvbmx5IGZpeGVkIHByZWRpY3RvcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAzMjwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDg8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNFbmMtLW1heC1yZXNpZHVhbC1wYXJ0aXRpb24tb3JkZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVy4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXggcmVzaWR1YWwgcGFydGl0aW9uIG9yZGVyIChhYm92ZSA0IGRvZXNuJ3QgdXN1YWxseSBoZWxwIG11Y2gpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTY8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLS1taWQtc2lkZS1zdGVyZW8iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtaWQtc2lkZS1zdGVyZW/igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1pZC1zaWRlLXN0ZXJlb+KAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RG8gbWlkIHNpZGUgc3RlcmVvIChvbmx5IGZvciBzdGVyZW8gaW5wdXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLS1taW4tcmVzaWR1YWwtcGFydGl0aW9uLW9yZGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWluLXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWluLXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlcuKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWluIHJlc2lkdWFsIHBhcnRpdGlvbiBvcmRlciAoYWJvdmUgNCBkb2Vzbid0IHVzdWFsbHkgaGVscCBtdWNoKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDE2PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmxhY0VuYy0tcWxwLWNvZWZmLXByZWMtc2VhcmNoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccWxwLWNvZWZmLXByZWMtc2VhcmNo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxxbHAtY29lZmYtcHJlYy1zZWFyY2jigJ0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPmZhbHNlID0gdXNlIHFscF9jb2VmZl9wcmVjaXNpb24sIHRydWUgPSBzZWFyY2ggYXJvdW5kIHFscF9jb2VmZl9wcmVjaXNpb24sIHRha2UgYmVzdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNFbmMtLXFscC1jb2VmZi1wcmVjaXNpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxxbHAtY29lZmYtcHJlY2lzaW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxxbHAtY29lZmYtcHJlY2lzaW9u4oCdICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlByZWNpc2lvbiBpbiBiaXRzIG9mIHF1YW50aXplZCBsaW5lYXItcHJlZGljdG9yIGNvZWZmaWNpZW50czsgMCA9IGF1dG9tYXRpYy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDMyPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmxhY0VuYy0tcXVhbGl0eSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHF1YWxpdHnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHF1YWxpdHnigJ0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0RmxhY0VuY1F1YWxpdHk8L3NwYW4+PC9wcmU+Ci08cD5TcGVlZCB2ZXJzdXMgY29tcHJlc3Npb24gdHJhZGVvZmYuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDUgLSBEZWZhdWx0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLS1yaWNlLXBhcmFtZXRlci1zZWFyY2gtZGlzdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJpY2UtcGFyYW1ldGVyLXNlYXJjaC1kaXN04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyaWNlLXBhcmFtZXRlci1zZWFyY2gtZGlzdOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+MCA9IHRyeSBvbmx5IGNhbGMnZCBwYXJhbWV0ZXIgazsgZWxzZSB0cnkgYWxsIFtrLWRpc3QuLmsrZGlzdF0gcGFyYW1ldGVycywgdXNlIGJlc3QuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxNTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNFbmMtLXN0cmVhbWFibGUtc3Vic2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RyZWFtYWJsZS1zdWJzZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0cmVhbWFibGUtc3Vic2V04oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+dHJ1ZSB0byBsaW1pdCBlbmNvZGVyIHRvIGdlbmVyYXRpbmcgYSBTdWJzZXQgc3RyZWFtLCBlbHNlIGZhbHNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjRW5jLS1wYWRkaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFkZGluZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccGFkZGluZ+KAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Xcml0ZSBhIFBBRERJTkcgYmxvY2sgd2l0aCB0aGlzIGxlbmd0aCBpbiBieXRlcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0RmxhY0VuYy0tc2Vla3BvaW50cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlZWtwb2ludHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNlZWtwb2ludHPigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFkZCBTRUVLVEFCTEUgbWV0YWRhdGEgKGlmICZndDsgMCwgbnVtYmVyIG9mIGVudHJpZXMsIGlmICZsdDsgMCwgaW50ZXJ2YWwgaW4gc2VjKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IC0yMTQ3NDgzNjQ3PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogLTEwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2RlYy5odG1sI0dzdEZsYWNEZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGbGFjRGVjPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIxMzA0Zi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZsYWNwYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjZW5jLmh0bWwiIHRpdGxlPSJmbGFjZW5jIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuaHRtbCIgdGl0bGU9ImZsYWN0YWciPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjdGFnLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2UudG9wX29mX3BhZ2UiPjwvYT5mbGFjcGFyc2U8L3NwYW4+PC9oMj4KLTxwPmZsYWNwYXJzZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2UuaHRtbCNHc3RGbGFjUGFyc2UtLWNoZWNrLWZyYW1lLWNoZWNrc3VtcyIgdGl0bGU9IlRoZSDigJxjaGVjay1mcmFtZS1jaGVja3N1bXPigJ0gcHJvcGVydHkiPmNoZWNrLWZyYW1lLWNoZWNrc3VtczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEZsYWNQYXJzZSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5odG1sI0dzdEZsYWNQYXJzZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0RmxhY1BhcnNlIj5Hc3RGbGFjUGFyc2U8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS1zdHJ1Y3QiPkdzdEJhc2VQYXJzZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RmxhY1BhcnNlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgZmxhY3BhcnNlIGVsZW1lbnQgd2lsbCBwYXJzZSB0aGUgaGVhZGVyIHBhY2tldHMgb2YgdGhlIEZMQUMKLXN0cmVhbSBhbmQgcHV0IHRoZW0gYXMgdGhlIHN0cmVhbWhlYWRlciBpbiB0aGUgY2Fwcy4gVGhpcyBpcyB1c2VkIGluIHRoZQotbXVsdGlmZHNpbmsgY2FzZSB3aGVyZSB5b3Ugd2FudCB0byBzdHJlYW0gbGl2ZSBGTEFDIHN0cmVhbXMgdG8gbXVsdGlwbGUKLWNsaWVudHMsIGVhY2ggY2xpZW50IGhhcyB0byByZWNlaXZlIHRoZSBzdHJlYW1oZWFkZXJzIGZpcnN0IGJlZm9yZSB0aGV5IGNhbgotY29uc3VtZSB0aGUgRkxBQyBwYWNrZXRzLjwvcD4KLTxwPlRoaXMgZWxlbWVudCBhbHNvIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVmZmVycyB0aGF0IGl0IHB1c2hlcyBvdXQgYXJlIHByb3Blcmx5Ci10aW1lc3RhbXBlZCBhbmQgdGhhdCB0aGVpciBvZmZzZXQgYW5kIG9mZnNldF9lbmQgYXJlIHNldC4gVGhlIGJ1ZmZlcnMgdGhhdAotZmxhY3BhcnNlIG91dHB1dHMgaGF2ZSBhbGwgb2YgdGhlIG1ldGFkYXRhIHRoYXQgb2dnbXV4IGV4cGVjdHMgdG8gcmVjZWl2ZSwKLXdoaWNoIGFsbG93cyB5b3UgdG8gKGZvciBleGFtcGxlKSByZW11eCBhbiBvZ2cvZmxhYyBvciBjb252ZXJ0IGEgbmF0aXZlIEZMQUMKLWZvcm1hdCBmaWxlIHRvIGFuIG9nZyBiaXRzdHJlYW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjU5LjcuNCI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTI8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2luZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmZsYWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZsYWNwYXJzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gaWRlbnRpdHkgXAotICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yZW11eGVkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgY29udmVydHMgYSBuYXRpdmUgRkxBQyBmb3JtYXQgZmlsZSB0byBhbiBvZ2cgYml0c3RyZWFtLgotSXQgYWxzbyBpbGx1c3RyYXRlcyB0aGF0IHRoZSBzdHJlYW1oZWFkZXIgaXMgc2V0IGluIHRoZSBjYXBzLCBhbmQgdGhhdCBlYWNoCi1idWZmZXIgaGFzIHRoZSB0aW1lc3RhbXAsIGR1cmF0aW9uLCBvZmZzZXQsIGFuZCBvZmZzZXRfZW5kIHNldC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41OS43LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9wYXJzZXJzLmh0bWwjcGx1Z2luLWF1ZGlvcGFyc2VycyI+YXVkaW9wYXJzZXJzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BhcnNlci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi41OS43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1mbGFjPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWZsYWMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyAxLCA2NTUzNTAgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNQYXJzZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZsYWNQYXJzZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZsYWNQYXJzZTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbGFjUGFyc2UtLWNoZWNrLWZyYW1lLWNoZWNrc3VtcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNoZWNrLWZyYW1lLWNoZWNrc3Vtc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2hlY2stZnJhbWUtY2hlY2tzdW1z4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DaGVjayB0aGUgb3ZlcmFsbCBjaGVja3N1bXMgb2YgZXZlcnkgZnJhbWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjcGFyc2Uuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+ZmxhY2RlYywgb2dnZGVtdXgsIHZvcmJpc3BhcnNlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjZmQwMi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5mbGFjdGFnOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5odG1sIiB0aXRsZT0iZmxhY3BhcnNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4Lmh0bWwiIHRpdGxlPSJmbHZkZW11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3BhcnNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjdGFnLnRvcF9vZl9wYWdlIj48L2E+ZmxhY3RhZzwvc3Bhbj48L2gyPgotPHA+ZmxhY3RhZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RGbGFjVGFnIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuaHRtbCNHc3RGbGFjVGFnLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGbGFjVGFnIj5Hc3RGbGFjVGFnPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0RmxhY1RhZwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjdGFnLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdEZsYWNUYWcgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ij5Hc3RUYWdTZXR0ZXI8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIGZsYWN0YWcgZWxlbWVudCBjYW4gY2hhbmdlIHRoZSB0YWcgY29udGFpbmVkIHdpdGhpbiBhIHJhdwotRkxBQyBzdHJlYW0uIFNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgdGhlIGNvbW1lbnRzIGhlYWRlciBwYWNrZXQKLW9mIHRoZSBGTEFDIHN0cmVhbS48L3A+Ci08cD5BcHBsaWNhdGlvbnMgY2FuIHNldCB0aGUgdGFncyB0byB3cml0ZSB1c2luZyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiBpbnRlcmZhY2UuCi1UYWdzIGNvbnRhaW5lZCB3aXRoaW5nIHRoZSBGTEFDIGJpdHN0cmVhbSB3aWxsIGJlIHBpY2tlZCB1cAotYXV0b21hdGljYWxseSAoYW5kIG1lcmdlZCBhY2NvcmRpbmcgdG8gdGhlIG1lcmdlIG1vZGUgc2V0IHZpYSB0aGUgdGFnCi1zZXR0ZXIgaW50ZXJmYWNlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjAuNy40Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5mb288c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5mbGFjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmbGFjdGFnIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmJhcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmZsYWM8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBlbGVtZW50IGlzIG5vdCB1c2VmdWwgd2l0aCBnc3QtbGF1bmNoLCBiZWNhdXNlIGl0IGRvZXMgbm90IHN1cHBvcnQKLXNldHRpbmcgdGhlIHRhZ3Mgb24gYSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ1NldHRlcjwvc3Bhbj48L2E+IGludGVyZmFjZS4gQ29uY2VwdHVhbGx5LCB0aGUgZWxlbWVudAotd2lsbCB1c3VhbGx5IGJlIHVzZWQgaW4gdGhpcyBvcmRlciB0aG91Z2guCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjAuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsYWMuaHRtbCNwbHVnaW4tZmxhYyI+ZmxhYzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkNocmlzdG9waGUgRmVyZ2VhdSAmbHQ7dGV1ZkBnbm9tZS5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZvcm1hdHRlci9NZXRhZGF0YTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42MC43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1mbGFjPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWZsYWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWN0YWcub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsYWNUYWctc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RGbGFjVGFnPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0RmxhY1RhZzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48c3BhbiBjbGFzcz0idHlwZSI+ZmxhY2VuYzwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJ0eXBlIj5mbGFjZGVjPC9zcGFuPiwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjN2IwNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Zmx2ZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY3RhZy5odG1sIiB0aXRsZT0iZmxhY3RhZyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguaHRtbCIgdGl0bGU9ImZsdm11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjdGFnLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4LnRvcF9vZl9wYWdlIj48L2E+Zmx2ZGVtdXg8L3NwYW4+PC9oMj4KLTxwPmZsdmRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEZsdkRlbXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5odG1sI0dzdEZsdkRlbXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RGbHZEZW11eCI+R3N0Rmx2RGVtdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0Rmx2RGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+Zmx2ZGVtdXggZGVtdXhlcyBhbiBGTFYgZmlsZSBpbnRvIHRoZSBkaWZmZXJlbnQgY29udGFpbmVkIHN0cmVhbXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYxLjYuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PS88L3NwYW4+cGF0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPnRvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+Zmx2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmbHZkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgZGVtdXhlcyBhbiBGTFYgZmlsZSBhbmQgb3V0cHV0cyB0aGUgY29udGFpbmVkIHJhdyBhdWRpbyBzdHJlYW1zLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYxLjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHYuaHRtbCNwbHVnaW4tZmx2Ij5mbHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KdWxpZW4gTW91dHRlICZsdDtqdWxpZW5AbW91dHRlLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVtdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42MS42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1mbHY8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpc3dmLCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgODAwMCwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9LCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdywgZnJhbWVkPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LW5lbGx5bW9zZXIsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDQ0MTAwIH08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBVOCwgUzE2TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1zcGVleCwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpMTYwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1mbGFzaC12aWRlbywgZmx2dmVyc2lvbj0oaW50KTE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWZsYXNoLXNjcmVlbjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA2LWZsYXNoPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC12cDYtYWxwaGE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdmRlbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0Rmx2RGVtdXgtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RGbHZEZW11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZsdkRlbXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0NTM1Zi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZsdm11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5odG1sIiB0aXRsZT0iZmx2ZGVtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmh0bWwiIHRpdGxlPSJmbHhkZWMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXgucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC50b3Bfb2ZfcGFnZSI+PC9hPmZsdm11eDwvc3Bhbj48L2gyPgotPHA+Zmx2bXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXgucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5odG1sI0dzdEZsdk11eC0tc3RyZWFtYWJsZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5Ij5zdHJlYW1hYmxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0Rmx2TXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguaHRtbCNHc3RGbHZNdXgtc3RydWN0IiB0aXRsZT0iR3N0Rmx2TXV4Ij5Hc3RGbHZNdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEZsdk11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0Rmx2TXV4IGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+Zmx2bXV4IG11eGVzIGRpZmZlcmVudCBzdHJlYW1zIGludG8gYW4gRkxWIGZpbGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYyLjguMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZsdm11eCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5mbHYgIGF1ZGlvdGVzdHNyYyBzYW1wbGVzcGVyYnVmZmVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NDQxMDA8L3NwYW4+IG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZhYWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPiAgdmlkZW90ZXN0c3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yNTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5mcmFtZXJhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yNTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geDI2NGVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgZW5jb2RlcyBhIHRlc3QgYXVkaW8gYW5kIHZpZGVvIHN0cmVhbSBhbmQgbXV4ZXMgYm90aCBpbnRvIGFuIEZMViBmaWxlLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYyLjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHYuaHRtbCNwbHVnaW4tZmx2Ij5mbHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjIuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpc3dmLCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgODAwMCwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9LCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpeyA0LCAyIH0sIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LW5lbGx5bW9zZXIsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDQ0MTAwIH08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBVOCwgUzE2TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1zcGVleCwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpMTYwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWZsYXNoLXZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1mbGFzaC1zY3JlZW48L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXZwNi1mbGFzaDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA2LWFscGhhPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYXZjPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWZsdjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZtdXgub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZsdk11eC1zdHJ1Y3QiPjwvYT48aDM+R3N0Rmx2TXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0Rmx2TXV4IEdzdEZsdk11eDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RGbHZNdXgtLXN0cmVhbWFibGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdHJlYW1hYmxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzdHJlYW1hYmxl4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIFRydWUsIHRoZSBvdXRwdXQgd2lsbCBiZSBzdHJlYW1pbmcgZnJpZW5kbHkuIChpZSB3aXRob3V0IGluZGV4ZXMgYW5kCi1kdXJhdGlvbik8L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZseGRlYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZseGRlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTE3ODQ1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Zmx4ZGVjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5odG1sIiB0aXRsZT0iZmx2bXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmh0bWwiIHRpdGxlPSJnYW1tYSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZseGRlYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMudG9wX29mX3BhZ2UiPjwvYT5mbHhkZWM8L3NwYW4+PC9oMj4KLTxwPmZseGRlYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RGbHhEZWMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMuaHRtbCNHc3RGbHhEZWMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEZseERlYyI+R3N0Rmx4RGVjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RGbHhEZWMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBkZWNvZGVzIGZsaS9mbGMvZmx4LXZpZGVvIGludG8gcmF3IHZpZGVvPC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42My42LjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx4ZGVjLmh0bWwjcGx1Z2luLWZseGRlYyI+Zmx4ZGVjPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2VwcCBXaWpuYW5kcyAmbHQ7bXJyYXp6QGdhcmJhZ2UtY29kZXJ6Lm5ldCZndDssIFplZXNoYW4gQWxpICZsdDt6ZWVuaXhAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZWNvZGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjYzLjYuMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWZsaTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUJHUngsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEZseERlYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEZseERlYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEZseERlYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjczMDE1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5nYW1tYTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMuaHRtbCIgdGl0bGU9ImZseGRlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZkZWMuaHRtbCIgdGl0bGU9Imdka3BpeGJ1ZmRlYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx4ZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLnRvcF9vZl9wYWdlIj48L2E+Z2FtbWE8L3NwYW4+PC9oMj4KLTxwPmdhbW1hPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmh0bWwjR3N0R2FtbWEtLWdhbW1hIiB0aXRsZT0iVGhlIOKAnGdhbW1h4oCdIHByb3BlcnR5Ij5nYW1tYTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEdhbW1hIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5odG1sI0dzdEdhbW1hLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RHYW1tYSI+R3N0R2FtbWE8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEdhbW1hCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBlcmZvcm1zIGdhbW1hIGNvcnJlY3Rpb24gb24gYSB2aWRlbyBzdHJlYW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY0LjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGdhbW1hIGdhbW1hPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Mi4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgd2lsbCBtYWtlIHRoZSBpbWFnZSAiYnJpZ2h0ZXIiLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZ2FtbWEgZ2FtbWE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHhpbWFnZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSB3aWxsIG1ha2UgdGhlIGltYWdlICJkYXJrZXIiLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY0LjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sI3BsdWdpbi12aWRlb2ZpbHRlciI+dmlkZW9maWx0ZXI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BcndlZCB2LiBNZXJrYXR6ICZsdDt2Lm1lcmthdHpAZ214Lm5ldDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY0LjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBSR0J4LCB4QkdSLCBCR1J4LCBSR0IsIEJHUiwgWTQyQiwgTlYxMiwgTlYyMSwgWVVZMiwgVVlWWSwgWVZZVSwgSTQyMCwgWVYxMiwgSVlVViwgWTQxQiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsIHhSR0IsIFJHQngsIHhCR1IsIEJHUngsIFJHQiwgQkdSLCBZNDJCLCBOVjEyLCBOVjIxLCBZVVkyLCBVWVZZLCBZVllVLCBJNDIwLCBZVjEyLCBJWVVWLCBZNDFCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdhbW1hLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RHYW1tYS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEdhbW1hPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0R2FtbWE7PC9wcmU+Ci08cD5PcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2FtbWEtLWdhbW1hIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ2FtbWHigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGdhbW1h4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPmdhbW1hLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAuMDEsMTBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YTVkMTAuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5nZGtwaXhidWZkZWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEuaHRtbCIgdGl0bGU9ImdhbW1hIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCIgdGl0bGU9Imdka3BpeGJ1Zm92ZXJsYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nYW1tYS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy50b3Bfb2ZfcGFnZSI+PC9hPmdka3BpeGJ1ZmRlYzwvc3Bhbj48L2gyPgotPHA+Z2RrcGl4YnVmZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEdka1BpeGJ1ZkRlYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy5odG1sI0dzdEdka1BpeGJ1ZkRlYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0R2RrUGl4YnVmRGVjIj5Hc3RHZGtQaXhidWZEZWM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZkZWMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEdka1BpeGJ1ZkRlYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZkZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42NS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ2RrcGl4YnVmLmh0bWwjcGx1Z2luLWdka3BpeGJ1ZiI+Z2RrcGl4YnVmPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGF2aWQgQS4gU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7LCBSZW5hdG8gRmlsaG8gJmx0O3JlbmF0by5maWxob0BpbmR0Lm9yZy5iciZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVjb2Rlci9JbWFnZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42NS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+aW1hZ2UvcG5nPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UvZ2lmPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UveC1pY29uPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1uYXZpLWFuaW1hdGlvbjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL3gtY211LXJhc3RlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL3gtc3VuLXJhc3RlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL3gtcGl4bWFwPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UvdGlmZjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL3gtcG9ydGFibGUtYW55bWFwPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS94LXBvcnRhYmxlLWdyYXltYXA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS94LXBvcnRhYmxlLXBpeG1hcDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL2JtcDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL3gtYm1wPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UveC1NUy1ibXA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS92bmQud2FwLndibXA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS94LWJpdG1hcDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGltYWdlL3gtdGdhPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UveC1wY3g8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS9zdmc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBpbWFnZS9zdmcreG1sPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCQSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZkZWMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZmRlYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmRGVjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0R2RrUGl4YnVmRGVjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0R2RrUGl4YnVmRGVjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGY5YTRlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmdka3BpeGJ1Zm92ZXJsYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwiIHRpdGxlPSJnZGtwaXhidWZkZWMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sIiB0aXRsZT0iZ2RrcGl4YnVmc2luayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkudG9wX29mX3BhZ2UiPjwvYT5nZGtwaXhidWZvdmVybGF5PC9zcGFuPjwvaDI+Ci08cD5nZGtwaXhidWZvdmVybGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5Ij5sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLW9mZnNldC14IiB0aXRsZT0iVGhlIOKAnG9mZnNldC144oCdIHByb3BlcnR5Ij5vZmZzZXQteDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLW9mZnNldC15IiB0aXRsZT0iVGhlIOKAnG9mZnNldC154oCdIHByb3BlcnR5Ij5vZmZzZXQteTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLW92ZXJsYXktaGVpZ2h0IiB0aXRsZT0iVGhlIOKAnG92ZXJsYXktaGVpZ2h04oCdIHByb3BlcnR5Ij5vdmVybGF5LWhlaWdodDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLW92ZXJsYXktd2lkdGgiIHRpdGxlPSJUaGUg4oCcb3ZlcmxheS13aWR0aOKAnSBwcm9wZXJ0eSI+b3ZlcmxheS13aWR0aDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLXJlbGF0aXZlLXgiIHRpdGxlPSJUaGUg4oCccmVsYXRpdmUteOKAnSBwcm9wZXJ0eSI+cmVsYXRpdmUteDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLXJlbGF0aXZlLXkiIHRpdGxlPSJUaGUg4oCccmVsYXRpdmUteeKAnSBwcm9wZXJ0eSI+cmVsYXRpdmUteTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLWFscGhhIiB0aXRsZT0iVGhlIOKAnGFscGhh4oCdIHByb3BlcnR5Ij5hbHBoYTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2RrLXBpeGJ1Zmdkay1waXhidWYtVGhlLUdka1BpeGJ1Zi1TdHJ1Y3R1cmUuaHRtbCNHZGtQaXhidWYtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R2RrUGl4YnVmPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuaHRtbCNHc3RHZGtQaXhidWZPdmVybGF5LS1waXhidWYiIHRpdGxlPSJUaGUg4oCccGl4YnVm4oCdIHByb3BlcnR5Ij5waXhidWY8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0R2RrUGl4YnVmUG9zaXRpb25pbmdNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sI0dzdEdka1BpeGJ1Zk92ZXJsYXktLXBvc2l0aW9uaW5nLW1vZGUiIHRpdGxlPSJUaGUg4oCccG9zaXRpb25pbmctbW9kZeKAnSBwcm9wZXJ0eSI+cG9zaXRpb25pbmctbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmT3ZlcmxheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwjR3N0R2RrUGl4YnVmT3ZlcmxheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0R2RrUGl4YnVmT3ZlcmxheSI+R3N0R2RrUGl4YnVmT3ZlcmxheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RHZGtQaXhidWZPdmVybGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIGdka3BpeGJ1Zm92ZXJsYXkgZWxlbWVudCBvdmVybGF5cyBhbiBpbWFnZSBsb2FkZWQgZnJvbSBmaWxlIG9udG8KLWEgdmlkZW8gc3RyZWFtLjwvcD4KLTxwPkNoYW5naW5nIHRoZSBwb3NpdGlvbmluZyBvciBvdmVybGF5IHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcyBhdCBydW50aW1lCi1pcyBzdXBwb3J0ZWQsIGJ1dCBpdCBtaWdodCBiZSBwcnVkZW50IHRvIHRvIHByb3RlY3QgdGhlIHByb3BlcnR5IHNldHRpbmcKLWNvZGUgd2l0aCBHU1RfQkFTRV9UUkFOU0ZPUk1fTE9DSyBhbmQgR1NUX0JBU0VfVFJBTlNGT1JNX1VOTE9DSywgYXMKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdfb2JqZWN0X3NldCgpPC9jb2RlPjwvYT4gaXMgbm90IGF0b21pYyBmb3IgbXVsdGlwbGUgcHJvcGVydGllcyBwYXNzZWQgaW4gb25lIGdvLjwvcD4KLTxwPkNoYW5naW5nIHRoZSBpbWFnZSBhdCBydW50aW1lIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLjwvcD4KLTxwPk5lZ2F0aXZlIG9mZnNldHMgYXJlIGFsc28gbm90IHlldCBzdXBwb3J0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY2LjcuNiI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZ2RrcGl4YnVmb3ZlcmxheSBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmltYWdlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cG5nIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi1PdmVybGF5cyB0aGUgaW1hZ2UgaW4gaW1hZ2UucG5nIG9udG8gdGhlIHRlc3QgdmlkZW8gcGljdHVyZSBwcm9kdWNlZCBieQotdmlkZW90ZXN0c3JjLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY2LjcuNy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCNwbHVnaW4tZ2RrcGl4YnVmIj5nZGtwaXhidWY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY2LjcuNy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCBSR0IsIEJHUiwgQkdSeCwgeFJHQiwgeEJHUiwgUkdCQSwgQkdSQSwgQVJHQiwgQUJHUiwgSTQyMCwgWVYxMiwgQVlVViwgWVVZMiwgVVlWWSwgdjMwOCwgdjIxMCwgdjIxNiwgWTQxQiwgWTQyQiwgWTQ0NCwgWVZZVSwgTlYxMiwgTlYyMSwgVVlWUCwgUkdCMTYsIEJHUjE2LCBSR0IxNSwgQkdSMTUsIFVZVlAsIEE0MjAsIFlVVjksIFlWVTksIElZVTEsIEFSR0I2NCwgQVlVVjY0LCByMjEwLCBJNDIwXzEwTEUsIEk0MjBfMTBCRSwgR1JBWTgsIEdSQVkxNl9CRSwgR1JBWTE2X0xFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgUkdCLCBCR1IsIEJHUngsIHhSR0IsIHhCR1IsIFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEk0MjAsIFlWMTIsIEFZVVYsIFlVWTIsIFVZVlksIHYzMDgsIHYyMTAsIHYyMTYsIFk0MUIsIFk0MkIsIFk0NDQsIFlWWVUsIE5WMTIsIE5WMjEsIFVZVlAsIFJHQjE2LCBCR1IxNiwgUkdCMTUsIEJHUjE1LCBVWVZQLCBBNDIwLCBZVVY5LCBZVlU5LCBJWVUxLCBBUkdCNjQsIEFZVVY2NCwgcjIxMCwgSTQyMF8xMExFLCBJNDIwXzEwQkUsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1Zm92ZXJsYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEdka1BpeGJ1Zk92ZXJsYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RHZGtQaXhidWZPdmVybGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0R2RrUGl4YnVmT3ZlcmxheTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgZWxlbWVudCBpbnN0YW5jZSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RHZGtQaXhidWZPdmVybGF5LS1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvY2F0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb2NhdGlvbuKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkxvY2F0aW9uIG9mIGltYWdlIGZpbGUgdG8gb3ZlcmxheS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmT3ZlcmxheS0tb2Zmc2V0LXgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvZmZzZXQteOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcb2Zmc2V0LXjigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Rm9yIHBvc2l0aXZlIHZhbHVlLCBob3Jpem9udGFsIG9mZnNldCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyBmcm9tIGxlZnQgb2YgdmlkZW8gaW1hZ2UuIEZvciBuZWdhdGl2ZSB2YWx1ZSwgaG9yaXpvbnRhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBwaXhlbHMgZnJvbSByaWdodCBvZiB2aWRlbyBpbWFnZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmT3ZlcmxheS0tb2Zmc2V0LXkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvZmZzZXQteeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcb2Zmc2V0LXnigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Rm9yIHBvc2l0aXZlIHZhbHVlLCB2ZXJ0aWNhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBwaXhlbHMgZnJvbSB0b3Agb2YgdmlkZW8gaW1hZ2UuIEZvciBuZWdhdGl2ZSB2YWx1ZSwgdmVydGljYWwgb2Zmc2V0IG9mIG92ZXJsYXkgaW1hZ2UgaW4gcGl4ZWxzIGZyb20gYm90dG9tIG9mIHZpZGVvIGltYWdlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RHZGtQaXhidWZPdmVybGF5LS1vdmVybGF5LWhlaWdodCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG92ZXJsYXktaGVpZ2h04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvdmVybGF5LWhlaWdodOKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5IZWlnaHQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBwaXhlbHMgKDAgPSBzYW1lIGFzIG92ZXJsYXkgaW1hZ2UpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEdka1BpeGJ1Zk92ZXJsYXktLW92ZXJsYXktd2lkdGgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvdmVybGF5LXdpZHRo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvdmVybGF5LXdpZHRo4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaWR0aCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyAoMCA9IHNhbWUgYXMgb3ZlcmxheSBpbWFnZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmT3ZlcmxheS0tcmVsYXRpdmUteCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlbGF0aXZlLXjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlbGF0aXZlLXjigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPkhvcml6b250YWwgb2Zmc2V0IG9mIG92ZXJsYXkgaW1hZ2UgaW4gZnJhY3Rpb25zIG9mIHZpZGVvIGltYWdlIHdpZHRoLCBmcm9tIHRvcC1sZWZ0IGNvcm5lciBvZiB2aWRlbyBpbWFnZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmT3ZlcmxheS0tcmVsYXRpdmUteSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlbGF0aXZlLXnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlbGF0aXZlLXnigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlZlcnRpY2FsIG9mZnNldCBvZiBvdmVybGF5IGltYWdlIGluIGZyYWN0aW9ucyBvZiB2aWRlbyBpbWFnZSBoZWlnaHQsIGZyb20gdG9wLWxlZnQgY29ybmVyIG9mIHZpZGVvIGltYWdlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RHZGtQaXhidWZPdmVybGF5LS1hbHBoYSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFscGhh4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhbHBoYeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5HbG9iYWwgYWxwaGEgb2Ygb3ZlcmxheSBpbWFnZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmT3ZlcmxheS0tcGl4YnVmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGl4YnVm4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwaXhidWbigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2RrLXBpeGJ1Zmdkay1waXhidWYtVGhlLUdka1BpeGJ1Zi1TdHJ1Y3R1cmUuaHRtbCNHZGtQaXhidWYtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R2RrUGl4YnVmPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkdka1BpeGJ1ZiBvYmplY3QgdG8gcmVuZGVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjY8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEdka1BpeGJ1Zk92ZXJsYXktLXBvc2l0aW9uaW5nLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwb3NpdGlvbmluZy1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb3NpdGlvbmluZy1tb2Rl4oCdICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEdka1BpeGJ1ZlBvc2l0aW9uaW5nTW9kZTwvc3Bhbj48L3ByZT4KLTxwPlBvc2l0aW9uaW5nIG1vZGUgb2Ygb2Zmc2V0LXggYW5kIG9mZnNldC15IHByb3BlcnRpZXMuIERldGVybWluZXMgaG93Ci1uZWdhdGl2ZSB4L3kgb2Zmc2V0cyB3aWxsIGJlIGludGVycHJldGVkLiBCeSBkZWZhdWx0IG5lZ2F0aXZlIHZhbHVlcwotYXJlIGZvciBwb3NpdGlvbmluZyByZWxhdGl2ZSB0byB0aGUgcmlnaHQvYm90dG9tIGVkZ2Ugb2YgdGhlIHZpZGVvCi1pbWFnZSwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgcHJvcGVydHkgdG8gc2VsZWN0IGFic29sdXRlIHBvc2l0aW9uaW5nCi1yZWxhdGl2ZSB0byBhICgwLCAwKSBvcmlnaW4gaW4gdGhlIHRvcC1sZWZ0IGNvcm5lci4gVGhhdCB3YXkgbmVnYXRpdmUKLW9mZnNldHMgd2lsbCBiZSB0byB0aGUgbGVmdC9hYm92ZSB0aGUgdmlkZW8gaW1hZ2UsIHdoaWNoIGFsbG93cyB5b3UgdG8KLXNtb290aGx5IHNsaWRlIGxvZ29zIGludG8gYW5kIG91dCBvZiB0aGUgZnJhbWUgaWYgZGVzaXJlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogcGl4ZWxzLXJlbGF0aXZlLXRvLWVkZ2VzPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS42PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzczNmZiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmdka3BpeGJ1ZnNpbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sIiB0aXRsZT0iZ2RrcGl4YnVmb3ZlcmxheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLmh0bWwiIHRpdGxlPSJnb29tMmsxIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZvdmVybGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsudG9wX29mX3BhZ2UiPjwvYT5nZGtwaXhidWZzaW5rPC9zcGFuPjwvaDI+Ci08cD5nZGtwaXhidWZzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nZGstcGl4YnVmZ2RrLXBpeGJ1Zi1UaGUtR2RrUGl4YnVmLVN0cnVjdHVyZS5odG1sI0dka1BpeGJ1Zi1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HZGtQaXhidWY8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sI0dzdEdka1BpeGJ1ZlNpbmstLWxhc3QtcGl4YnVmIiB0aXRsZT0iVGhlIOKAnGxhc3QtcGl4YnVm4oCdIHByb3BlcnR5Ij5sYXN0LXBpeGJ1ZjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sI0dzdEdka1BpeGJ1ZlNpbmstLXBvc3QtbWVzc2FnZXMiIHRpdGxlPSJUaGUg4oCccG9zdC1tZXNzYWdlc+KAnSBwcm9wZXJ0eSI+cG9zdC1tZXNzYWdlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmU2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmh0bWwjR3N0R2RrUGl4YnVmU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0R2RrUGl4YnVmU2luayI+R3N0R2RrUGl4YnVmU2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb3NpbmsuaHRtbCNHc3RWaWRlb1Npbmstc3RydWN0Ij5Hc3RWaWRlb1Npbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RHZGtQaXhidWZTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBzaW5rIGVsZW1lbnQgdGFrZXMgUkdCIG9yIFJHQkEgaW1hZ2VzIGFzIGlucHV0IGFuZCB3cmFwcyB0aGVtIGludG8KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dkay1waXhidWZnZGstcGl4YnVmLVRoZS1HZGtQaXhidWYtU3RydWN0dXJlLmh0bWwjR2RrUGl4YnVmLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdka1BpeGJ1Zjwvc3Bhbj48L2E+IG9iamVjdHMsIGZvciBlYXN5IHNhdmluZyB0byBmaWxlIHZpYSB0aGUKLUdka1BpeGJ1ZiBsaWJyYXJ5IEFQSSBvciBkaXNwbGF5aW5nIGluIEd0aysgYXBwbGljYXRpb25zIChlLmcuIHVzaW5nCi10aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3RrM0d0a0ltYWdlLmh0bWwjR3RrSW1hZ2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3RrSW1hZ2U8L3NwYW4+PC9hPiB3aWRnZXQpLjwvcD4KLTxwPlRoZXJlIGFyZSB0d28gd2F5cyB0byB1c2UgdGhpcyBlbGVtZW50IGFuZCBvYnRhaW4gdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dkay1waXhidWZnZGstcGl4YnVmLVRoZS1HZGtQaXhidWYtU3RydWN0dXJlLmh0bWwjR2RrUGl4YnVmLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdka1BpeGJ1Zjwvc3Bhbj48L2E+IG9iamVjdHMKLWNyZWF0ZWQ6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotV2F0Y2hpbmcgZm9yIGVsZW1lbnQgbWVzc2FnZXMgbmFtZWQgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InByZXJvbGwtcGl4YnVmIgotPC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4icGl4YnVmIjwvY29kZT4gb24gdGhlIGJ1cywgd2hpY2gKLXdpbGwgYmUgcG9zdGVkIHdoZW5ldmVyIGFuIGltYWdlIHdvdWxkIHVzdWFsbHkgYmUgcmVuZGVyZWQuIFNlZSBiZWxvdyBmb3IKLW1vcmUgZGV0YWlscyBvbiB0aGVzZSBtZXNzYWdlcyBhbmQgaG93IHRvIGV4dHJhY3QgdGhlIHBpeGJ1ZiBvYmplY3QKLWNvbnRhaW5lZCBpbiB0aGVtLgotPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotUmV0cmlldmluZyB0aGUgY3VycmVudCBwaXhidWYgdmlhIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuaHRtbCNHc3RHZGtQaXhidWZTaW5rLS1sYXN0LXBpeGJ1ZiIgdGl0bGU9IlRoZSDigJxsYXN0LXBpeGJ1ZuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGxhc3QtcGl4YnVm4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkKLXdoZW4gbmVlZGVkLiBUaGlzIGlzIHRoZSBlYXNpZXN0IHdheSB0byBnZXQgYXQgcGl4YnVmcyBmb3Igc25hcHNob3R0aW5nCi1wdXJwb3NlcyAtIGp1c3Qgd2FpdCB1bnRpbCB0aGUgcGlwZWxpbmUgaXMgcHJlcm9sbGVkIChBU1lOQ19ET05FIG1lc3NhZ2UKLW9uIHRoZSBidXMpLCB0aGVuIHJlYWQgdGhlIHByb3BlcnR5LiBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kLCB5b3UgbWF5IHdhbnQKLXRvIGRpc2FibGUgbWVzc2FnZSBwb3N0aW5nIGJ5IHNldHRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sI0dzdEdka1BpeGJ1ZlNpbmstLXBvc3QtbWVzc2FnZXMiIHRpdGxlPSJUaGUg4oCccG9zdC1tZXNzYWdlc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHBvc3QtbWVzc2FnZXPigJ08L3NwYW4+PC9hPgotcHJvcGVydHkgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkZBTFNFPC9zcGFuPjwvYT4uIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IG1lbW9yeSBvdmVyaGVhZC4KLTwvbGk+Ci08L3VsPjwvZGl2PgotPHA+VGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIGVsZW1lbnQgaXMgdG8gYWJzdHJhY3QgYXdheSB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEJ1ZmZlci5odG1sI0dzdEJ1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdWZmZXI8L3NwYW4+PC9hPiB0bwotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2RrLXBpeGJ1Zmdkay1waXhidWYtVGhlLUdka1BpeGJ1Zi1TdHJ1Y3R1cmUuaHRtbCNHZGtQaXhidWYtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R2RrUGl4YnVmPC9zcGFuPjwvYT4gY29udmVyc2lvbi4gT3RoZXIgdGhhbiB0aGF0IGl0J3MgdmVyeSBzaW1pbGFyIHRvIHRoZSBmYWtlc2luawotZWxlbWVudC48L3A+Ci08cD5UaGlzIGVsZW1lbnQgaXMgbWVhbnQgZm9yIGVhc3kgbm8taGFzc2xlIHZpZGVvIHNuYXBzaG90dGluZy4gSXQgaXMgbm90Ci1zdWl0YWJsZSBmb3IgdmlkZW8gcGxheWJhY2sgb3IgdmlkZW8gZGlzcGxheSBhdCBoaWdoIGZyYW1lcmF0ZXMuIFVzZQoteGltYWdlc2luaywgeHZpbWFnZXNpbmsgb3Igc29tZSBvdGhlciBzdWl0YWJsZSB2aWRlbyBzaW5rIGluIGNvbm5lY3Rpb24KLXdpdGggdGhlIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RYT3ZlcmxheTwvc3Bhbj4gaW50ZXJmYWNlIGluc3RlYWQgaWYgeW91IHdhbnQgdG8gZG8gdmlkZW8gcGxheWJhY2suPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY3LjcuNyI+PC9hPjxoMz5NZXNzYWdlIGRldGFpbHM8L2gzPgotQXMgbWVudGlvbmVkIGFib3ZlLCB0aGlzIGVsZW1lbnQgd2lsbCBieSBkZWZhdWx0IHBvc3QgZWxlbWVudCBtZXNzYWdlcwotY29udGFpbmluZyBzdHJ1Y3R1cmVzIG5hbWVkIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJwcmVyb2xsLXBpeGJ1ZiIKLTwvY29kZT4gb3IgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InBpeGJ1ZiI8L2NvZGU+IG9uIHRoZSBidXMgKHRoaXMKLWNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuaHRtbCNHc3RHZGtQaXhidWZTaW5rLS1wb3N0LW1lc3NhZ2VzIiB0aXRsZT0iVGhlIOKAnHBvc3QtbWVzc2FnZXPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwb3N0LW1lc3NhZ2Vz4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkKLXRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI0ZBTFNFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5GQUxTRTwvc3Bhbj48L2E+IHRob3VnaCkuIFRoZSBlbGVtZW50IG1lc3NhZ2Ugc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkczoKLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLTxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJwaXhidWYiPC9jb2RlPjogdGhlIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dkay1waXhidWZnZGstcGl4YnVmLVRoZS1HZGtQaXhidWYtU3RydWN0dXJlLmh0bWwjR2RrUGl4YnVmLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdka1BpeGJ1Zjwvc3Bhbj48L2E+IG9iamVjdAotPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InBpeGVsLWFzcGVjdC1yYXRpbyI8L2NvZGU+OiB0aGUgcGl4ZWwgYXNwZWN0Ci0gIHJhdGlvIChQQVIpIG9mIHRoZSBpbnB1dCBpbWFnZSAodGhpcyBmaWVsZCBjb250YWlucyBhIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGcmFjdGlvbjwvc3Bhbj4pOyB0aGUKLSAgUEFSIGlzIHVzdWFsbHkgMToxIGZvciBpbWFnZXMsIGJ1dCBpcyBvZnRlbiBzb21ldGhpbmcgbm9uLTE6MSBpbiB0aGUgY2FzZQotICBvZiB2aWRlbyBpbnB1dC4gSW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXkgYmUgZGlzdG9ydGVkIGFuZCB5b3UgbWF5IG5lZWQKLSAgdG8gcmVzY2FsZSBpdCBhY2NvcmRpbmdseSBiZWZvcmUgc2F2aW5nIGl0IHRvIGZpbGUgb3IgZGlzcGxheWluZyBpdC4gVGhpcwotICBjYW4gZWFzaWx5IGJlIGRvbmUgdXNpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2RrLXBpeGJ1Zmdkay1waXhidWYtU2NhbGluZy5odG1sI2dkay1waXhidWYtc2NhbGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z2RrX3BpeGJ1Zl9zY2FsZSgpPC9jb2RlPjwvYT4gKHRoZSByZWFzb24gdGhpcyBpcyBub3QgZG9uZQotICBhdXRvbWF0aWNhbGx5IGlzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgb2Z0ZW4gc2NhbGUgdGhlIGltYWdlIGFueXdheQotICBhY2NvcmRpbmcgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCB3aW5kb3csIGluIHdoaWNoIGNhc2UgaXQgaXMgbXVjaCBtb3JlCi0gIGVmZmljaWVudCB0byBvbmx5IHNjYWxlIG9uY2UgcmF0aGVyIHRoYW4gdHdpY2UpLiBZb3UgY2FuIHB1dCBhIHZpZGVvc2NhbGUKLSAgZWxlbWVudCBhbmQgYSBjYXBzZmlsdGVyIGVsZW1lbnQgd2l0aAotICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dmlkZW8veC1yYXctcmdiLHBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pMS8xPC9jb2RlPiBjYXBzCi0gIGluIGZyb250IG9mIHRoaXMgZWxlbWVudCB0byBtYWtlIHN1cmUgdGhlIHBpeGJ1ZnMgYWx3YXlzIGhhdmUgYSAxOjEgUEFSLgotPC9saT4KLTwvdWw+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi42Ny43LjgiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHZpZGVvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGdka3BpeGJ1ZnNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUHJvY2VzcyBvbmUgc2luZ2xlIHRlc3QgaW1hZ2UgYXMgcGl4YnVmIChub3RlIHRoYXQgdGhlIG91dHB1dCB5b3Ugc2VlIHdpbGwKLWJlIHNsaWdodGx5IG1pc2xlYWRpbmcuIFRoZSBtZXNzYWdlIHN0cnVjdHVyZSBkb2VzIGNvbnRhaW4gYSB2YWxpZCBwaXhidWYKLW9iamVjdCBldmVuIGlmIHRoZSBzdHJ1Y3R1cmUgc3RyaW5nIHNheXMgJyhOVUxMKScpLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY3LjcuOS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCNwbHVnaW4tZ2RrcGl4YnVmIj5nZGtwaXhidWY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjY3LjcuOS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCQSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RHZGtQaXhidWZTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0R2RrUGl4YnVmU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEdka1BpeGJ1ZlNpbms7PC9wcmU+Ci08cD5PcGFxdWUgZWxlbWVudCBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RHZGtQaXhidWZTaW5rLS1sYXN0LXBpeGJ1ZiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxhc3QtcGl4YnVm4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsYXN0LXBpeGJ1ZuKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2RrLXBpeGJ1Zmdkay1waXhidWYtVGhlLUdka1BpeGJ1Zi1TdHJ1Y3R1cmUuaHRtbCNHZGtQaXhidWYtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R2RrUGl4YnVmPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkxhc3QgR2RrUGl4YnVmIG9iamVjdCByZW5kZXJlZC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R2RrUGl4YnVmU2luay0tcG9zdC1tZXNzYWdlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvc3QtbWVzc2FnZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBvc3QtbWVzc2FnZXPigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hldGhlciB0byBwb3N0IG1lc3NhZ2VzIGNvbnRhaW5pbmcgcGl4YnVmcyBvbiB0aGUgYnVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdjZTYzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmdvb206IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS5odG1sIiB0aXRsZT0iZ29vbTJrMSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLmh0bWwiIHRpdGxlPSJoZHYxMzk0c3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20udG9wX29mX3BhZ2UiPjwvYT5nb29tPC9zcGFuPjwvaDI+Ci08cD5nb29tPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdEdvb20iPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5odG1sI0dzdEdvb20tc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEdvb20iPkdzdEdvb208L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RBdWRpb1Zpc3VhbGl6ZXIKLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0R29vbQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkdvb20gaXMgYW4gYXVkaW8gdmlzdWFsaXNhdGlvbiBlbGVtZW50LiBJdCBjcmVhdGVzIHdhcnBpbmcgc3RydWN0dXJlcwotYmFzZWQgb24gdGhlIGluY29taW5nIGF1ZGlvIHNpZ25hbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjkuNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBnb29tIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHh2aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjkuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20uaHRtbCNwbHVnaW4tZ29vbSI+Z29vbTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlZpc3VhbGl6YXRpb248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjkuNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludCkxLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUJHUngsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R29vbS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEdvb208L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RHb29tOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnN5bmFlc3RoZXNpYTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTc5ODcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Z29vbTJrMTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZzaW5rLmh0bWwiIHRpdGxlPSJnZGtwaXhidWZzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20uaHRtbCIgdGl0bGU9Imdvb20iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdka3BpeGJ1ZnNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS50b3Bfb2ZfcGFnZSI+PC9hPmdvb20yazE8L3NwYW4+PC9oMj4KLTxwPmdvb20yazE8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0R29vbTJrMSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLmh0bWwjR3N0R29vbTJrMS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0R29vbTJrMSI+R3N0R29vbTJrMTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEF1ZGlvVmlzdWFsaXplcgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RHb29tMmsxCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWdvb20yazEuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+R29vbTJrMSBpcyBhbiBhdWRpbyB2aXN1YWxpc2F0aW9uIGVsZW1lbnQuIEl0IGNyZWF0ZXMgd2FycGluZyBzdHJ1Y3R1cmVzCi1iYXNlZCBvbiB0aGUgaW5jb21taW5nIGF1ZGlvIHNpZ25hbC4gR29vbTJrMSBpcyB0aGUgb2xkZXIgdmVyc2lvbiBvZiB0aGUKLXZpc3VhbGlzYXRpb24uIEFsc28gYXZhaWxhYmxlIGlzIGdvb20yazQsIHdpdGggYSBkaWZmZXJlbnQgbG9vay48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjguNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBnb29tMmsxIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHh2aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjguNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20yazEuaHRtbCNwbHVnaW4tZ29vbTJrMSI+Z29vbTJrMTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlZpc3VhbGl6YXRpb248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNjguNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludCkxLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUJHUngsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0R29vbTJrMS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEdvb20yazE8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RHb29tMmsxOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPmdvb20sIHN5bmFlc3RoZXNpYTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDU2ZDIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aGR2MTM5NHNyYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmh0bWwiIHRpdGxlPSJnb29tIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lmh0bWwiIHRpdGxlPSJpY3lkZW11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy50b3Bfb2ZfcGFnZSI+PC9hPmhkdjEzOTRzcmM8L3NwYW4+PC9oMj4KLTxwPmhkdjEzOTRzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCNHc3RIRFYxMzk0U3JjLS1jaGFubmVsIiB0aXRsZT0iVGhlIOKAnGNoYW5uZWzigJ0gcHJvcGVydHkiPmNoYW5uZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLmh0bWwjR3N0SERWMTM5NFNyYy0tZGV2aWNlLW5hbWUiIHRpdGxlPSJUaGUg4oCcZGV2aWNlLW5hbWXigJ0gcHJvcGVydHkiPmRldmljZS1uYW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sI0dzdEhEVjEzOTRTcmMtLWd1aWQiIHRpdGxlPSJUaGUg4oCcZ3VpZOKAnSBwcm9wZXJ0eSI+Z3VpZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sI0dzdEhEVjEzOTRTcmMtLXBvcnQiIHRpdGxlPSJUaGUg4oCccG9ydOKAnSBwcm9wZXJ0eSI+cG9ydDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLmh0bWwjR3N0SERWMTM5NFNyYy0tdXNlLWF2YyIgdGl0bGU9IlRoZSDigJx1c2UtYXZj4oCdIHByb3BlcnR5Ij51c2UtYXZjPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RIRFYxMzk0U3JjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCNHc3RIRFYxMzk0U3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RIRFYxMzk0U3JjIj5Hc3RIRFYxMzk0U3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ij5Hc3RCYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiPkdzdFB1c2hTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RIRFYxMzk0U3JjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0SERWMTM5NFNyYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMGdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiPkdzdFVSSUhhbmRsZXI8L2E+IGFuZCAgR3N0UHJvcGVydHlQcm9iZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJlYWQgTVBFRy1UUyBkYXRhIGZyb20gZmlyZXdpcmUgcG9ydC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzAuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGhkdjEzOTRzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4dmltYWdlc2luayBkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4gITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIGNhcHR1cmVzIGZyb20gdGhlIGZpcmV3aXJlIHBvcnQgYW5kIHBsYXlzIHRoZSBzdHJlYW1zLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGhkdjEzOTRzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm15ZHVtcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnRzPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIGNhcHR1cmUgdG8gYSBkaXNrIGZpbGUKLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43MC44LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tMTM5NC5odG1sI3BsdWdpbi0xMzk0Ij4xMzk0PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RWR3YXJkIEhlcnZleSAmbHQ7YmlsYm9lZEBiaWxib2VkLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjcwLjguNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZ3RzLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZSwgcGFja2V0c2l6ZT0oaW50KTE4ODwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SERWMTM5NFNyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEhEVjEzOTRTcmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RIRFYxMzk0U3JjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1oZHYxMzk0c3JjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RIRFYxMzk0U3JjLS1jaGFubmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2hhbm5lbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2hhbm5lbOKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2hhbm5lbCBudW1iZXIgZm9yIGxpc3RlbmluZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDY0XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDYzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RIRFYxMzk0U3JjLS1kZXZpY2UtbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZS1uYW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2UtbmFtZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkRlc2NyaXB0aXZlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGV2aWNlPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiRGVmYXVsdCI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEhEVjEzOTRTcmMtLWd1aWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxndWlk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxndWlk4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5zZWxlY3Qgb25lIG9mIG11bHRpcGxlIERWIGRldmljZXMgYnkgaXRzIEdVSUQuIHVzZSBhIGhleGFkZWNpbWFsIGxpa2UgMHhoaGhoaGhoaGhoaGhoaGhoLiAoMCA9IG5vIGd1aWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RIRFYxMzk0U3JjLS1wb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9ydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9ydOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UG9ydCBudW1iZXIgKC0xIGF1dG9tYXRpYykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbR19NQVhVTE9ORywxNl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SERWMTM5NFNyYy0tdXNlLWF2YyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZS1hdmPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZS1hdmPigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VXNlIEFWL0MgVlRSIGNvbnRyb2wuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBjNjk5Yi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aWN5ZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sIiB0aXRsZT0iaGR2MTM5NHNyYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sIiB0aXRsZT0iaWQzZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4LnRvcF9vZl9wYWdlIj48L2E+aWN5ZGVtdXg8L3NwYW4+PC9oMj4KLTxwPmljeWRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdElDWURlbXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pY3lkZW11eC5odG1sI0dzdElDWURlbXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJQ1lEZW11eCI+R3N0SUNZRGVtdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pY3lkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SUNZRGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+aWN5ZGVtdXggYWNjZXB0cyBkYXRhIHN0cmVhbXMgd2l0aCBJQ1kgbWV0YWRhdGEgYXQga25vd24gaW50ZXJ2YWxzLCBhcwotdHJhbnNtaXR0ZWQgZnJvbSBhbiB1cHN0cmVhbSBlbGVtZW50ICh1c3VhbGx5IHJlYWQgYXMgcmVzcG9uc2UgaGVhZGVycyBmcm9tCi1hbiBIVFRQIHN0cmVhbSkuIFRoZSBtaW1lIHR5cGUgb2YgdGhlIGRhdGEgYmV0d2VlbiB0aGUgdGFnIGJsb2NrcyBpcwotZGV0ZWN0ZWQgdXNpbmcgdHlwZWZpbmQgZnVuY3Rpb25zLCBhbmQgdGhlIGFwcHJvcHJpYXRlIG91dHB1dCBtaW1lIHR5cGUgc2V0Ci1vbiBvdXRnb2luZyBidWZmZXJzLiA8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzEuNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHNvdXBodHRwc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+aHR0cDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vL3NvbWUuc2VydmVyLyBpcmFkaW8tbW9kZT10cnVlICEgaWN5ZGVtdXggISBmYWtlc2luayAtdDwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBzaG91bGQgcmVhZCBhbnkgYXZhaWxhYmxlIElDWSB0YWcgaW5mb3JtYXRpb24gYW5kIG91dHB1dCBpdC4KLVRoZSBjb250ZW50cyBvZiB0aGUgc3RyZWFtIHNob3VsZCBiZSBkZXRlY3RlZCwgYW5kIHRoZSBhcHByb3ByaWF0ZSBtaW1lCi10eXBlIHNldCBvbiBidWZmZXJzIHByb2R1Y2VkIGZyb20gaWN5ZGVtdXguIChVc2luZyBnbm9tZXZmc3NyYywgbmVvbmh0dHBzcmMKLW9yIGdpb3NyYyBpbnN0ZWFkIG9mIHNvdXBodHRwc3JjIHNob3VsZCBhbHNvIHdvcmsuKQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjcxLjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pY3lkZW11eC5odG1sI3BsdWdpbi1pY3lkZW11eCI+aWN5ZGVtdXg8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbSZndDssIE1pY2hhZWwgU21pdGggJmx0O21zbWl0aEBmbHVlbmRvLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVtdXhlci9NZXRhZGF0YTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43MS42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1pY3ksIG1ldGFkYXRhLWludGVydmFsPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWljeWRlbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJQ1lEZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdElDWURlbXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SUNZRGVtdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkNTQxNC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aWQzZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguaHRtbCIgdGl0bGU9ImljeWRlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lmh0bWwiIHRpdGxlPSJpZDN2Mm11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXgucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC50b3Bfb2ZfcGFnZSI+PC9hPmlkM2RlbXV4PC9zcGFuPjwvaDI+Ci08cD5pZDNkZW11eDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXgucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4Lmh0bWwjR3N0SUQzRGVtdXgtLXByZWZlci12MSIgdGl0bGU9IlRoZSDigJxwcmVmZXItdjHigJ0gcHJvcGVydHkiPnByZWZlci12MTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdElEM0RlbXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sI0dzdElEM0RlbXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJRDNEZW11eCI+R3N0SUQzRGVtdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R0YWdkZW11eC5odG1sI0dzdFRhZ0RlbXV4Ij5Hc3RUYWdEZW11eDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SUQzRGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+aWQzZGVtdXggYWNjZXB0cyBkYXRhIHN0cmVhbXMgd2l0aCBlaXRoZXIgKG9yIGJvdGgpIElEM3YyIHJlZ2lvbnMgYXQgdGhlCi1zdGFydCwgb3IgSUQzdjEgYXQgdGhlIGVuZC4gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZGF0YSBiZXR3ZWVuIHRoZSB0YWcgYmxvY2tzCi1pcyBkZXRlY3RlZCB1c2luZyB0eXBlZmluZCBmdW5jdGlvbnMsIGFuZCB0aGUgYXBwcm9wcmlhdGUgb3V0cHV0IG1pbWUgdHlwZQotc2V0IG9uIG91dGdvaW5nIGJ1ZmZlcnMuIDwvcD4KLTxwPlRoZSBlbGVtZW50IGlzIG9ubHkgYWJsZSB0byByZWFkIElEM3YxIHRhZ3MgZnJvbSBhIHNlZWthYmxlIHN0cmVhbSwgYmVjYXVzZQotdGhleSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBUaGF0IGlzLCB3aGVuIGdldF9yYW5nZSBtb2RlIGlzIHN1cHBvcnRlZAotYnkgdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiBJZiBnZXRfcmFuZ2Ugb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSwgaWQzZGVtdXggbWFrZXMKLWl0IGF2YWlsYWJsZSBkb3duc3RyZWFtLiBUaGlzIG1lYW5zIHRoYXQgZWxlbWVudHMgd2hpY2ggcmVxdWlyZSBnZXRfcmFuZ2UKLW1vZGUsIHN1Y2ggYXMgd2F2cGFyc2UsIGNhbiBvcGVyYXRlIG9uIGZpbGVzIGNvbnRhaW5pbmcgSUQzIHRhZyBpbmZvcm1hdGlvbi48L3A+Ci08cD5UaGlzIGlkM2RlbXV4IGVsZW1lbnQgcmVwbGFjZWQgYW4gb2xkZXIgZWxlbWVudCB3aXRoIHRoZSBzYW1lIG5hbWUgd2hpY2gKLXJlbGllZCBvbiBsaWJpZDN0YWcgZnJvbSB0aGUgTUFEIHByb2plY3QuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjcyLjcuNSI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZmlsZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm1wMyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gaWQzZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZha2VzaW5rIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnQ8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBzaG91bGQgcmVhZCBhbnkgYXZhaWxhYmxlIElEMyB0YWcgaW5mb3JtYXRpb24gYW5kIG91dHB1dCBpdC4KLVRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnNpZGUgdGhlIElEMyB0YWcgcmVnaW9ucyBzaG91bGQgYmUgZGV0ZWN0ZWQsIGFuZAotdGhlIGFwcHJvcHJpYXRlIG1pbWUgdHlwZSBzZXQgb24gYnVmZmVycyBwcm9kdWNlZCBmcm9tIGlkM2RlbXV4LgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjcyLjcuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pZDNkZW11eC5odG1sI3BsdWdpbi1pZDNkZW11eCI+aWQzZGVtdXg8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVtdXhlci9NZXRhZGF0YTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43Mi43LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1pZDM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJRDNEZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdElEM0RlbXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SUQzRGVtdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM2RlbXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJRDNEZW11eC0tcHJlZmVyLXYxIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJlZmVyLXYx4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcmVmZXItdjHigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlByZWZlciB0YWdzIGZyb20gSUQzdjEgdGFnIGF0IGVuZCBvZiBmaWxlIHdoZW4gYm90aCBJRDN2MSBhbmQgSUQzdjIgdGFncyBhcmUgcHJlc2VudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzdjJtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU0Zjk4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzdjJtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aWQzdjJtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguaHRtbCIgdGl0bGU9ImlkM2RlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5odG1sIiB0aXRsZT0iaWlyZXF1YWxpemVyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC50b3Bfb2ZfcGFnZSI+PC9hPmlkM3YybXV4PC9zcGFuPjwvaDI+Ci08cD5pZDN2Mm11eDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RJZDN2Mk11eCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzdjJtdXguaHRtbCNHc3RJZDN2Mk11eC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SWQzdjJNdXgiPkdzdElkM3YyTXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzdjJtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dGFnbXV4Lmh0bWwjR3N0VGFnTXV4Ij5Hc3RUYWdNdXg8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdElkM3YyTXV4Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdElkM3YyTXV4IGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgYWRkcyBJRDN2MiB0YWdzIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJlYW0gdXNpbmcgdGhlIHRhZ2xpYgotbGlicmFyeS4gTW9yZSBwcmVjaXNlbHksIHRoZSB0YWdzIHdyaXR0ZW4gYXJlIElEMyB2ZXJzaW9uIDIuNC4wIHRhZ3MgKHdoaWNoCi1tZWFucyBpbiBwcmFjdGljZSB0aGF0IHNvbWUgaGFyZHdhcmUgcGxheWVycyBvciBvdXRkYXRlZCBwcm9ncmFtcyBtaWdodCBub3QKLWJlIGFibGUgdG8gcmVhZCB0aGVtIHByb3Blcmx5KS48L3A+Ci08cD5BcHBsaWNhdGlvbnMgY2FuIHNldCB0aGUgdGFncyB0byB3cml0ZSB1c2luZyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RUYWdTZXR0ZXI8L3NwYW4+PC9hPiBpbnRlcmZhY2UuCi1UYWdzIHNlbnQgYnkgdXBzdHJlYW0gZWxlbWVudHMgd2lsbCBiZSBwaWNrZWQgdXAgYXV0b21hdGljYWxseSAoYW5kIG1lcmdlZAotYWNjb3JkaW5nIHRvIHRoZSBtZXJnZSBtb2RlIHNldCB2aWEgdGhlIHRhZyBzZXR0ZXIgaW50ZXJmYWNlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzMuNy40Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5mb288c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBsYW1lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBpZDN2Mm11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5mb288c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tcDM8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gQSBwaXBlbGluZSB0aGF0IHRyYW5zY29kZXMgYSBmaWxlIGZyb20gT2dnL1ZvcmJpcyB0byBtcDMgZm9ybWF0IHdpdGggYW4KLUlEM3YyIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgYXMgdGhlIHRoZSBPZ2cvVm9yYmlzIGZpbGUuIE1ha2Ugc3VyZSB0aGUKLU9nZy9Wb3JiaXMgZmlsZSBhY3R1YWxseSBoYXMgY29tbWVudHMgdG8gcHJlc2VydmUuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bSBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+Zm9vPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bXAzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBpZDNkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmFrZXNpbmsgc2lsZW50PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+VFJVRSA8c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4mZ3Q7IC88L3NwYW4+ZGV2PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+bnVsbCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fDwvc3Bhbj4gZ3JlcCB0YWdsaXN0PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFZlcmlmeSB0aGF0IHRhZ3MgaGF2ZSBiZWVuIHdyaXR0ZW4uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzMuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXRhZ2xpYi5odG1sI3BsdWdpbi10YWdsaWIiPnRhZ2xpYjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkNocmlzdG9waGUgRmVyZ2VhdSAmbHQ7dGV1ZkBnbm9tZS5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZvcm1hdHRlci9NZXRhZGF0YTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43My43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LWlkMzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzdjJtdXguZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJZDN2Mk11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdElkM3YyTXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SWQzdjJNdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWQzZGVtdXguaHRtbCNHc3RJRDNEZW11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdElEM0RlbXV4PC9zcGFuPjwvYT4sIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VGFnU2V0dGVyPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY3NmEwNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aWlyZXF1YWxpemVyOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lmh0bWwiIHRpdGxlPSJpZDN2Mm11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5odG1sIiB0aXRsZT0iaW1hZ2VmcmVlemUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci50b3Bfb2ZfcGFnZSI+PC9hPmlpcmVxdWFsaXplcjwvc3Bhbj48L2gyPgotPHA+aWlyZXF1YWxpemVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplciI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5odG1sI0dzdElpckVxdWFsaXplci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SWlyRXF1YWxpemVyIj5Hc3RJaXJFcXVhbGl6ZXI8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2ZpbHRlci5odG1sI0dzdEF1ZGlvRmlsdGVyLXN0cnVjdCI+R3N0QXVkaW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RJaXJFcXVhbGl6ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0xMGJhbmRzLmh0bWwjR3N0SWlyRXF1YWxpemVyMTBCYW5kcyI+R3N0SWlyRXF1YWxpemVyMTBCYW5kczwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pSc4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXIzQmFuZHMiPkdzdElpckVxdWFsaXplcjNCYW5kczwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci1uYmFuZHMuaHRtbCNHc3RJaXJFcXVhbGl6ZXJOQmFuZHMiPkdzdElpckVxdWFsaXplck5CYW5kczwvYT4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdElpckVxdWFsaXplciBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElpckVxdWFsaXplci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdElpckVxdWFsaXplcjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdElpckVxdWFsaXplcjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzI0NDVhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5pbWFnZWZyZWV6ZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1paXJlcXVhbGl6ZXIuaHRtbCIgdGl0bGU9ImlpcmVxdWFsaXplciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLmh0bWwiIHRpdGxlPSJpbnRlcmxlYXZlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlpcmVxdWFsaXplci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUudG9wX29mX3BhZ2UiPjwvYT5pbWFnZWZyZWV6ZTwvc3Bhbj48L2gyPgotPHA+aW1hZ2VmcmVlemU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0SW1hZ2VGcmVlemUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLmh0bWwjR3N0SW1hZ2VGcmVlemUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEltYWdlRnJlZXplIj5Hc3RJbWFnZUZyZWV6ZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RJbWFnZUZyZWV6ZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgaW1hZ2VmcmVlemUgZWxlbWVudCBnZW5lcmF0ZXMgYSBzdGlsbCBmcmFtZSB2aWRlbyBzdHJlYW0gZnJvbQotdGhlIGlucHV0LiBJdCBkdXBsaWNhdGVzIHRoZSBmaXJzdCBmcmFtZSB3aXRoIHRoZSBmcmFtZXJhdGUgcmVxdWVzdGVkCi1ieSBkb3duc3RyZWFtLCBhbGxvd3Mgc2Vla2luZyBhbmQgYW5zd2VycyBxdWVyaWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43Ni42LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c29tZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnBuZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBpbWFnZWZyZWV6ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHNob3dzIGEgc3RpbGwgZnJhbWUgc3RyZWFtIG9mIGEgUE5HIGZpbGUuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzYuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWltYWdlZnJlZXplLmh0bWwjcGx1Z2luLWltYWdlZnJlZXplIj5pbWFnZWZyZWV6ZTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzYuNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbWFnZUZyZWV6ZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEltYWdlRnJlZXplPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0SW1hZ2VGcmVlemU7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkODBkZTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aW50ZXJsZWF2ZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbWFnZWZyZWV6ZS5odG1sIiB0aXRsZT0iaW1hZ2VmcmVlemUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sIiB0aXRsZT0iaXNtbG11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW1hZ2VmcmVlemUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS50b3Bfb2ZfcGFnZSI+PC9hPmludGVybGVhdmU8L3NwYW4+PC9oMj4KLTxwPmludGVybGVhdmU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI0dWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlQXJyYXk8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5odG1sI0dzdEludGVybGVhdmUtLWNoYW5uZWwtcG9zaXRpb25zIiB0aXRsZT0iVGhlIOKAnGNoYW5uZWwtcG9zaXRpb25z4oCdIHByb3BlcnR5Ij5jaGFubmVsLXBvc2l0aW9uczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLmh0bWwjR3N0SW50ZXJsZWF2ZS0tY2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dCIgdGl0bGU9IlRoZSDigJxjaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV04oCdIHByb3BlcnR5Ij5jaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RJbnRlcmxlYXZlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWludGVybGVhdmUuaHRtbCNHc3RJbnRlcmxlYXZlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RJbnRlcmxlYXZlIj5Hc3RJbnRlcmxlYXZlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SW50ZXJsZWF2ZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPk1lcmdlcyBzZXBhcmF0ZSBtb25vIGlucHV0cyBpbnRvIG9uZSBpbnRlcmxlYXZlZCBzdHJlYW0uPC9wPgotPHA+VGhpcyBlbGVtZW50IGhhbmRsZXMgYWxsIHJhdyBmbG9hdGluZyBwb2ludCBzYW1wbGUgZm9ybWF0cyBhbmQgYWxsIHNpZ25lZCBpbnRlZ2VyIHNhbXBsZSBmb3JtYXRzLiBUaGUgZmlyc3QKLWNhcHMgb24gb25lIG9mIHRoZSBzaW5rcGFkcyB3aWxsIHNldCB0aGUgY2FwcyBvZiB0aGUgb3V0cHV0IHNvIHVzdWFsbHkgYW4gYXVkaW9jb252ZXJ0IGVsZW1lbnQgc2hvdWxkIGJlCi1wbGFjZWQgYmVmb3JlIGV2ZXJ5IHNpbmtwYWQgb2YgaW50ZXJsZWF2ZS48L3A+Ci08cD5JdCdzIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nIGJ5IGFkZGluZyBvciByZW1vdmluZwotc29tZSBvZiB0aGUgcmVxdWVzdCBwYWRzIGJ1dCB0aGlzIHdpbGwgY2hhbmdlIHRoZSBjYXBzIG9mIHRoZSBvdXRwdXQgYnVmZmVycy4gQ2hhbmdpbmcgdGhlIGlucHV0Ci1jYXBzIGlzIF9ub3RfIHN1cHBvcnRlZCB5ZXQuPC9wPgotPHA+VGhlIGNoYW5uZWwgbnVtYmVyIG9mIGV2ZXJ5IHNpbmtwYWQgaW4gdGhlIG91dCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlICJjaGFubmVsIiBwcm9wZXJ0eSBvZiB0aGUgcGFkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43Ny43LjYiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZpbGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tcDMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthdWRpby94LXJhdyxjaGFubmVscz0yJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVpbnRlcmxlYXZlIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5kICBpbnRlcmxlYXZlIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5pIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHdhdmVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2F2ICAgIGQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zcmNfMCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gaTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNpbmtfMSAgICBkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c3JjXzEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zaW5rXzA8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gRGVjb2RlcyBhbmQgZGVpbnRlcmxlYXZlcyBhIFN0ZXJlbyBNUDMgZmlsZSBpbnRvIHNlcGFyYXRlIGNoYW5uZWxzIGFuZAotdGhlbiBpbnRlcmxlYXZlcyB0aGUgY2hhbm5lbHMgYWdhaW4gdG8gYSBXQVYgZmlsZSB3aXRoIHRoZSBjaGFubmVscwotZXhjaGFuZ2VkLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGludGVybGVhdmUgbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gd2F2ZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZpbGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj53YXYgIGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5maWxlMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPndhdiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvL3gtcmF3LGNoYW5uZWxzPTEsY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MSZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2lua18wICAgZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZpbGUyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2F2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW8veC1yYXcsY2hhbm5lbHM9MSxjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgyJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zaW5rXzE8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gSW50ZXJsZWF2ZXMgdHdvIE1vbm8gV0FWIGZpbGVzIHRvIGEgc2luZ2xlIFN0ZXJlbyBXQVYgZmlsZS4gSGF2aW5nCi1jaGFubmVsLW1hc2tzIGRlZmluZWQgaW4gdGhlIHNpbmsgcGFkcyBlbnN1cmVzIGEgc2FuZSBtYXBwaW5nIG9mIHRoZSBtb25vCi1zdHJlYW1zIGludG8gdGhlIHN0ZXJlbyBzdHJlYW0uIE5PVEU6IHRoZSBwcm9wZXIgd2F5IHRvIG1hcCBjaGFubmVscyBpbgotY29kZSBpcyBieSB1c2luZyB0aGUgY2hhbm5lbC1wb3NpdGlvbnMgcHJvcGVydHkgb2YgdGhlIGludGVybGVhdmUgZWxlbWVudC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43Ny43LjcuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW50ZXJsZWF2ZS5odG1sI3BsdWdpbi1pbnRlcmxlYXZlIj5pbnRlcmxlYXZlPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QW5keSBXaW5nbyAmbHQ7d2luZ28gYXQgcG9ib3guY29tJmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvQ29udmVydGVyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjc3LjcuNy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2lua18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxLCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFMxNkJFLCBVMTZMRSwgVTE2QkUsIFMyNF8zMkxFLCBTMjRfMzJCRSwgVTI0XzMyTEUsIFUyNF8zMkJFLCBTMzJMRSwgUzMyQkUsIFUzMkxFLCBVMzJCRSwgUzI0TEUsIFMyNEJFLCBVMjRMRSwgVTI0QkUsIFMyMExFLCBTMjBCRSwgVTIwTEUsIFUyMEJFLCBTMThMRSwgUzE4QkUsIFUxOExFLCBVMThCRSwgRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSwgbGF5b3V0PShzdHJpbmcpeyBub24taW50ZXJsZWF2ZWQsIGludGVybGVhdmVkIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFU4LCBTMTZMRSwgUzE2QkUsIFUxNkxFLCBVMTZCRSwgUzI0XzMyTEUsIFMyNF8zMkJFLCBVMjRfMzJMRSwgVTI0XzMyQkUsIFMzMkxFLCBTMzJCRSwgVTMyTEUsIFUzMkJFLCBTMjRMRSwgUzI0QkUsIFUyNExFLCBVMjRCRSwgUzIwTEUsIFMyMEJFLCBVMjBMRSwgVTIwQkUsIFMxOExFLCBTMThCRSwgVTE4TEUsIFUxOEJFLCBGMzJMRSwgRjMyQkUsIEY2NExFLCBGNjRCRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SW50ZXJsZWF2ZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdEludGVybGVhdmU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RJbnRlcmxlYXZlOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnRlcmxlYXZlLS1jaGFubmVsLXBvc2l0aW9ucyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNoYW5uZWwtcG9zaXRpb25z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjaGFubmVsLXBvc2l0aW9uc+KAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5DaGFubmVsIHBvc2l0aW9uczogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgY2hhbm5lbCBwb3NpdGlvbnMKLXRoYXQgYXJlIHVzZWQgb24gdGhlIHNyYyBjYXBzLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHNob3VsZCBiZQotdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBzaW5rIHBhZHMgYW5kIHRoZSBhcnJheSBzaG91bGQgY29udGFpbgotYSB2YWxpZCBsaXN0IG9mIGNoYW5uZWwgcG9zaXRpb25zLiBUaGUgbi10aCBlbGVtZW50IG9mIHRoZSBhcnJheQotaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBuLXRoIHNpbmsgcGFkLjwvcD4KLTxwPlRoZXNlIGNoYW5uZWwgcG9zaXRpb25zIHdpbGwgb25seSBiZSB1c2VkIGlmIHRoZXkncmUgdmFsaWQgYW5kIHRoZQotbnVtYmVyIG9mIGVsZW1lbnRzIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuIElmIHRoaXMKLWlzIG5vdCBnaXZlbiBhIE5PTkUgbGF5b3V0IHdpbGwgYmUgdXNlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJbnRlcmxlYXZlLS1jaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2hhbm5lbCBwb3NpdGlvbnMgZnJvbSBpbnB1dDogSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+IHRoZSBjaGFubmVsCi1wb3NpdGlvbnMgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBpbnB1dCBjYXBzIGlmIHZhbGlkIGNoYW5uZWwgcG9zaXRpb25zIGZvcgotdGhlIG91dHB1dCBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGVtLiBJZiB0aGlzIGlzIHNldCB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gc2V0dGluZyB0aGUKLWNoYW5uZWwtcG9zaXRpb25zIHByb3BlcnR5IG92ZXJ3cml0ZXMgdGhpcyBwcm9wZXJ0eSBhZ2Fpbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5kZWludGVybGVhdmU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWQzNThmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmlzbWxtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5odG1sIiB0aXRsZT0iaW50ZXJsZWF2ZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwiIHRpdGxlPSJqYWNrYXVkaW9zaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXgudG9wX29mX3BhZ2UiPjwvYT5pc21sbXV4PC9zcGFuPjwvaDI+Ci08cD5pc21sbXV4IOKAlCBNdXhlciBmb3IgSVNNTCBzbW9vdGggc3RyZWFtaW5nICguaXNtbCkgZmlsZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXgucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UVRNdXhEdHNNZXRob2RzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLWR0cy1tZXRob2QiIHRpdGxlPSJUaGUg4oCcZHRzLW1ldGhvZOKAnSBwcm9wZXJ0eSI+ZHRzLW1ldGhvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tZmFzdHN0YXJ0IiB0aXRsZT0iVGhlIOKAnGZhc3RzdGFydOKAnSBwcm9wZXJ0eSI+ZmFzdHN0YXJ0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLWZhc3RzdGFydC1maWxlIiB0aXRsZT0iVGhlIOKAnGZhc3RzdGFydC1maWxl4oCdIHByb3BlcnR5Ij5mYXN0c3RhcnQtZmlsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tZnJhZ21lbnQtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gcHJvcGVydHkiPmZyYWdtZW50LWR1cmF0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSIgdGl0bGU9IlRoZSDigJxtb292LXJlY292ZXJ5LWZpbGXigJ0gcHJvcGVydHkiPm1vb3YtcmVjb3ZlcnktZmlsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tbW92aWUtdGltZXNjYWxlIiB0aXRsZT0iVGhlIOKAnG1vdmllLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+bW92aWUtdGltZXNjYWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS1wcmVzZW50YXRpb24tdGltZSIgdGl0bGU9IlRoZSDigJxwcmVzZW50YXRpb24tdGltZeKAnSBwcm9wZXJ0eSI+cHJlc2VudGF0aW9uLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLXN0cmVhbWFibGUiIHRpdGxlPSJUaGUg4oCcc3RyZWFtYWJsZeKAnSBwcm9wZXJ0eSI+c3RyZWFtYWJsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tdHJhay10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcdHJhay10aW1lc2NhbGXigJ0gcHJvcGVydHkiPnRyYWstdGltZXNjYWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS1yZXNlcnZlZC1ieXRlcy1wZXItc2VjIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gcHJvcGVydHkiPnJlc2VydmVkLWJ5dGVzLXBlci1zZWM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS1yZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmciIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLW1heC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSI+cmVzZXJ2ZWQtbWF4LWR1cmF0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tcmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSBwcm9wZXJ0eSI+cmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RJU01MTXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj7CoDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtc3RydWN0IiB0aXRsZT0iR3N0SVNNTE11eCI+R3N0SVNNTE11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdElTTUxNdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RJU01MTXV4IGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPiwgIEdzdFRhZ1htcFdyaXRlciBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IG1lcmdlcyBzdHJlYW1zIChhdWRpbyBhbmQgdmlkZW8pIGludG8gTUoyICgubWoyKSBmaWxlcy48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGJhY2tncm91bmQgaW50ZW5kcyB0byBleHBsYWluIHdoeSB2YXJpb3VzIHNpbWlsYXIgbXV4ZXJzCi1hcmUgcHJlc2VudCBpbiB0aGlzIHBsdWdpbi48L3A+Ci08cD5UaGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvcmVzb3VyY2VzL3F0ZmlsZWZvcm1hdC5wZGYiIHRhcmdldD0iX3RvcCI+Ci1RdWlja1RpbWUgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbjwvYT4gc2VydmVkIGFzIGJhc2lzIGZvciB0aGUgTVA0IGZpbGUKLWZvcm1hdCBzcGVjaWZpY2F0aW9uIChtcDRtdXgpLCBhbmQgYXMgc3VjaCB0aGUgUXVpY2tUaW1lIGZpbGUgc3RydWN0dXJlIGlzCi1uZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBzby1jYWxsZWQgSVNPIEJhc2UgTWVkaWEgZmlsZSBmb3JtYXQgZGVmaW5lZCBpbgotSVNPIDE0NDk2LTEyIChleGNlcHQgZm9yIHNvbWUgbWVkaWEgc3BlY2lmaWMgcGFydHMpLgotSW4gdHVybiwgdGhlIGxhdHRlciBJU08gQmFzZSBNZWRpYSBmb3JtYXQgd2FzIGZ1cnRoZXIgc3BlY2lhbGl6ZWQgYXMgYQotTW90aW9uIEpQRUctMjAwMCBmaWxlIGZvcm1hdCBpbiBJU08gMTU0NDQtMyAobWoybXV4KQotYW5kIGluIHZhcmlvdXMgM0dQUCgyKSBzcGVjcyAoM2dwcG11eCkuCi1UaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci1JU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuPC9wPgotPHA+QSBmZXcgcHJvcGVydGllcyAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tbW92aWUtdGltZXNjYWxlIiB0aXRsZT0iVGhlIOKAnG1vdmllLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG1vdmllLXRpbWVzY2FsZeKAnTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS10cmFrLXRpbWVzY2FsZSIgdGl0bGU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHRyYWstdGltZXNjYWxl4oCdPC9zcGFuPjwvYT4pCi1hbGxvdyBhZGp1c3Rpbmcgc29tZSB0ZWNobmljYWwgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGluIChyYXJlKQotY2FzZXMgdG8gcmVzb2x2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBzb21lIHNpdHVhdGlvbnMuPC9wPgotPHA+U29tZSBvdGhlciBwcm9wZXJ0aWVzIGluZmx1ZW5jZSB0aGUgcmVzdWx0IG1vcmUgZnVuZGFtZW50YWxseS4KLUEgdHlwaWNhbCBtb3YvbXA0IGZpbGUncyBtZXRhZGF0YSAoYWthIG1vb3YpIGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKLXNvbWV3aGF0IGNvbnRyYXJ5IHRvIHRoaXMgdXN1YWxseSBiZWluZyBjYWxsZWQgInRoZSBoZWFkZXIiLiBIb3dldmVyLCBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlzbWxtdXguaHRtbCNHc3RJU01MTXV4LS1mYXN0c3RhcnQiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZmFzdHN0YXJ04oCdPC9zcGFuPjwvYT4gZmlsZSB3aWxsICh3aXRoIHNvbWUgZWZmb3J0KSBhcnJhbmdlIHRoaXMgdG8gYmUgbG9jYXRlZAotbmVhciBzdGFydCBvZiB0aGUgZmlsZSwgd2hpY2ggdGhlbiBhbGxvd3MgaXQgZS5nLiB0byBiZSBwbGF5ZWQgd2hpbGUKLWRvd25sb2FkaW5nLiBBbHRlcm5hdGl2ZWx5LCByYXRoZXIgdGhhbiBoYXZpbmcgb25lIGNodW5rIG9mIG1ldGFkYXRhIGF0IHN0YXJ0Ci0ob3IgZW5kKSwgdGhlcmUgY2FuIGJlIHNvbWUgbWV0YWRhdGEgYXQgc3RhcnQgYW5kIG1vc3Qgb2YgdGhlIG90aGVyIGRhdGEgY2FuCi1iZSBzcHJlYWQgb3V0IGludG8gZnJhZ21lbnRzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sI0dzdElTTUxNdXgtLWZyYWdtZW50LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnGZyYWdtZW50LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZnJhZ21lbnQtZHVyYXRpb27igJ08L3NwYW4+PC9hPi4gSWYgc3VjaAotZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwjR3N0SVNNTE11eC0tc3RyZWFtYWJsZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcc3RyZWFtYWJsZeKAnTwvc3Bhbj48L2E+IGFsbG93cyBmb3JlZ29pbmcgdG8gYWRkIGluZGV4IG1ldGFkYXRhIChhdCB0aGUgZW5kIG9mCi1maWxlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzguOC43Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2NGwyc3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBqcDJrZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtajJtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tajI8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLVJlY29yZHMgYSB2aWRlbyBzdHJlYW0gY2FwdHVyZWQgZnJvbSBhIHY0bDIgZGV2aWNlLCBlbmNvZGVzIGl0IGludG8gSlBFRy0yMDAwCi1hbmQgbXV4ZXMgaXQgaW50byBhbiBtajIgZmlsZS4KLTwvZGl2PgotPHA+RG9jdW1lbnRhdGlvbiBsYXN0IHJldmlld2VkIG9uIDIwMTEtMDQtMjE8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjc4LjguOS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pc29tcDQuaHRtbCNwbHVnaW4taXNvbXA0Ij5pc29tcDQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaGlhZ28gU291c2EgU2FudG9zICZsdDt0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5iciZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuNzguOC45LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTMsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdywgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWRpdngsIGRpdnh2ZXJzaW9uPShpbnQpNSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3F1aWNrdGltZSwgdmFyaWFudD0oc3RyaW5nKWlzby1mcmFnbWVudGVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LXN0cnVjdCI+PC9hPjxoMz5Hc3RJU01MTXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0SVNNTE11eCBHc3RJU01MTXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LS1kdHMtbWV0aG9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHRzLW1ldGhvZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZHRzLW1ldGhvZOKAnSAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRVE11eER0c01ldGhvZHM8L3NwYW4+PC9wcmU+Ci08cD5NZXRob2QgdG8gZGV0ZXJtaW5lIERUUyB0aW1lIChERVBSRUNBVEVEKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogcmVvcmRlcjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SVNNTE11eC0tZmFzdHN0YXJ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmFzdHN0YXJ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmYXN0c3RhcnTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LS1mYXN0c3RhcnQtZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZhc3RzdGFydC1maWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmYXN0c3RhcnQtZmlsZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdGVtcG9yYXJpbHkgdG8gc3RvcmUgZGF0YSBmcm9tIHRoZSBzdHJlYW0gd2hlbiBjcmVhdGluZyBhIGZhc3RzdGFydCBmaWxlLiBJZiBudWxsIGEgZmlsZXBhdGggd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElTTUxNdXgtLWZyYWdtZW50LWR1cmF0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZnJhZ21lbnQtZHVyYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZyYWdtZW50LWR1cmF0aW9u4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RnJhZ21lbnQgZHVyYXRpb25zIGluIG1zIChwcm9kdWNlIGEgZnJhZ21lbnRlZCBmaWxlIGlmICZndDsgMCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElTTUxNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWxlIHRvIGJlIHVzZWQgdG8gc3RvcmUgZGF0YSBmb3IgbW9vdiBhdG9tIG1ha2luZyBtb3ZpZSBmaWxlIHJlY292ZXJ5IHBvc3NpYmxlIGluIGNhc2Ugb2YgYSBjcmFzaCBkdXJpbmcgbXV4aW5nLiBOdWxsIGZvciBkaXNhYmxlZC4gKEV4cGVyaW1lbnRhbCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElTTUxNdXgtLW1vdmllLXRpbWVzY2FsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vdmllLXRpbWVzY2FsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW92aWUtdGltZXNjYWxl4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaW1lc2NhbGUgdG8gdXNlIGluIHRoZSBtb3ZpZSAodW5pdHMgcGVyIHNlY29uZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAxPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTgwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SVNNTE11eC0tcHJlc2VudGF0aW9uLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcmVzZW50YXRpb24tdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJlc2VudGF0aW9uLXRpbWXigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DYWxjdWxhdGUgYW5kIGluY2x1ZGUgcHJlc2VudGF0aW9uL2NvbXBvc2l0aW9uIHRpbWUgKGluIGFkZGl0aW9uIHRvIGRlY29kaW5nIHRpbWUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LS1zdHJlYW1hYmxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RyZWFtYWJsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RyZWFtYWJsZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgdG8gYmUgc3RyZWFtZWQgYW5kIGhlbmNlIG5vIGluZGV4ZXMgd3JpdHRlbiBvciBkdXJhdGlvbiB3cml0dGVuLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LS10cmFrLXRpbWVzY2FsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRyYWstdGltZXNjYWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0cmFrLXRpbWVzY2FsZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRpbWVzY2FsZSB0byB1c2UgZm9yIHRoZSB0cmFja3MgKHVuaXRzIHBlciBzZWNvbmQsIDAgaXMgYXV0b21hdGljKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SVNNTE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TXVsdGlwbGllciBmb3IgY29udmVydGluZyByZXNlcnZlZC1tYXgtZHVyYXRpb24gaW50byBieXRlcyBvZiBoZWFkZXIgdG8gcmVzZXJ2ZSwgcGVyIHNlY29uZCwgcGVyIHRyYWNrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTAwMDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1NTA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdElTTUxNdXgtLXJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UmVwb3J0cyB0aGUgYXBwcm94aW1hdGUgYW1vdW50IG9mIHJlbWFpbmluZyBtb292IGhlYWRlciBzcGFjZSByZXNlcnZlZCB1c2luZyByZXNlcnZlZC1tYXgtZHVyYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1tYXgtZHVyYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLW1heC1kdXJhdGlvbuKAnSAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gc2V0IHRvIGEgdmFsdWUgJmd0OyAwLCByZXNlcnZlcyBzcGFjZSBmb3IgaW5kZXggdGFibGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RJU01MTXV4LS1yZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gdXNlZCB3aXRoIHJlc2VydmVkLW1heC1kdXJhdGlvbiwgcGVyaW9kaWNhbGx5IHVwZGF0ZXMgdGhlIGluZGV4IHRhYmxlcyB3aXRoIGluZm9ybWF0aW9uIG11eGVkIHNvIGZhci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTg0NDY3NDQwNzM3MDk1NTE2MTU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZTQ2NjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+amFja2F1ZGlvc2luazogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwiIHRpdGxlPSJpc21sbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sIiB0aXRsZT0iamFja2F1ZGlvc3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pc21sbXV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay50b3Bfb2ZfcGFnZSI+PC9hPmphY2thdWRpb3Npbms8L3NwYW4+PC9oMj4KLTxwPmphY2thdWRpb3Npbms8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxzcGFuIGNsYXNzPSJ0eXBlIj5KYWNrQ2xpZW50PC9zcGFuPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sI0dzdEphY2tBdWRpb1NpbmstLWNsaWVudCIgdGl0bGU9IlRoZSDigJxjbGllbnTigJ0gcHJvcGVydHkiPmNsaWVudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RKYWNrQ29ubmVjdDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCNHc3RKYWNrQXVkaW9TaW5rLS1jb25uZWN0IiB0aXRsZT0iVGhlIOKAnGNvbm5lY3TigJ0gcHJvcGVydHkiPmNvbm5lY3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwjR3N0SmFja0F1ZGlvU2luay0tc2VydmVyIiB0aXRsZT0iVGhlIOKAnHNlcnZlcuKAnSBwcm9wZXJ0eSI+c2VydmVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sI0dzdEphY2tBdWRpb1NpbmstLWNsaWVudC1uYW1lIiB0aXRsZT0iVGhlIOKAnGNsaWVudC1uYW1l4oCdIHByb3BlcnR5Ij5jbGllbnQtbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RKYWNrVHJhbnNwb3J0PC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sI0dzdEphY2tBdWRpb1NpbmstLXRyYW5zcG9ydCIgdGl0bGU9IlRoZSDigJx0cmFuc3BvcnTigJ0gcHJvcGVydHkiPnRyYW5zcG9ydDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCNHc3RKYWNrQXVkaW9TaW5rLS1wb3J0LXBhdHRlcm4iIHRpdGxlPSJUaGUg4oCccG9ydC1wYXR0ZXJu4oCdIHByb3BlcnR5Ij5wb3J0LXBhdHRlcm48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEphY2tBdWRpb1NpbmsiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sI0dzdEphY2tBdWRpb1Npbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdEphY2tBdWRpb1NpbmsiPkdzdEphY2tBdWRpb1Npbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+R3N0QmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9iYXNlc2luay5odG1sI0dzdEF1ZGlvQmFzZVNpbmstc3RydWN0Ij5Hc3RBdWRpb0Jhc2VTaW5rPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SmFja0F1ZGlvU2luawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkEgU2luayB0aGF0IG91dHB1dHMgZGF0YSB0byBKYWNrIHBvcnRzLjwvcD4KLTxwPkl0IHdpbGwgY3JlYXRlIE4gSmFjayBwb3J0cyBuYW1lZCBvdXRfJmx0O25hbWUmZ3Q7XyZsdDtudW0mZ3Q7IHdoZXJlIAotJmx0O25hbWUmZ3Q7IGlzIHRoZSBlbGVtZW50IG5hbWUgYW5kICZsdDtudW0mZ3Q7IGlzIHN0YXJ0aW5nIGZyb20gMS4KLUVhY2ggcG9ydCBjb3JyZXNwb25kcyB0byBhIGdzdHJlYW1lciBjaGFubmVsLjwvcD4KLTxwPlRoZSBzYW1wbGVyYXRlIGFzIGV4cG9zZWQgb24gdGhlIGNhcHMgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBzYW1wbGVyYXRlIG9mCi10aGUgamFjayBzZXJ2ZXIuPC9wPgotPHA+V2hlbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwjR3N0SmFja0F1ZGlvU2luay0tY29ubmVjdCIgdGl0bGU9IlRoZSDigJxjb25uZWN04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcY29ubmVjdOKAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIHNldCB0byBhdXRvLCB0aGlzIGVsZW1lbnQKLXdpbGwgdHJ5IHRvIGNvbm5lY3QgZWFjaCBvdXRwdXQgcG9ydCB0byBhIHJhbmRvbSBwaHlzaWNhbCBqYWNrIGlucHV0IHBpbi4gSW4KLXRoaXMgbW9kZSwgdGhlIHNpbmsgd2lsbCBleHBvc2UgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBjaGFubmVscyBvbiBpdHMgcGFkCi1jYXBzLjwvcD4KLTxwPldoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sI0dzdEphY2tBdWRpb1NpbmstLWNvbm5lY3QiIHRpdGxlPSJUaGUg4oCcY29ubmVjdOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGNvbm5lY3TigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBpcyBzZXQgdG8gbm9uZSwgdGhlIGVsZW1lbnQgd2lsbAotYWNjZXB0IGFueSBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMgYW5kIHdpbGwgY3JlYXRlIChidXQgbm90IGNvbm5lY3QpIGFuCi1vdXRwdXQgcG9ydCBmb3IgZWFjaCBjaGFubmVsLjwvcD4KLTxwPlRoZSBlbGVtZW50IHdpbGwgZ2VuZXJhdGUgYW4gZXJyb3Igd2hlbiB0aGUgSmFjayBzZXJ2ZXIgaXMgc2h1dCBkb3duIHdoZW4gaXQKLXdhcyBQQVVTRUQgb3IgUExBWUlORy4gVGhpcyBlbGVtZW50IGRvZXMgbm90IHN1cHBvcnQgZHluYW1pYyByYXRlIGFuZCBidWZmZXIKLXNpemUgY2hhbmdlcyBhdCBydW50aW1lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43OS43LjgiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBqYWNrYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFBsYXkgYSBzaW5lIHdhdmUgdG8gdXNpbmcgamFjay4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43OS43LjkuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tamFjay5odG1sI3BsdWdpbi1qYWNrIj5qYWNrPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi43OS43LjkuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUYzMkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKYWNrQXVkaW9TaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SmFja0F1ZGlvU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEphY2tBdWRpb1Npbms7PC9wcmU+Ci08cD5PcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwjR3N0SmFja0F1ZGlvU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEphY2tBdWRpb1Npbms8L3NwYW4+PC9hPi48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEphY2tBdWRpb1NpbmstLWNsaWVudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsaWVudOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2xpZW504oCdICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5KYWNrQ2xpZW50PC9zcGFuPsKgKjwvcHJlPgotPHA+SGFuZGxlIGZvciBqYWNrIGNsaWVudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKYWNrQXVkaW9TaW5rLS1jb25uZWN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29ubmVjdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29ubmVjdOKAnSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RKYWNrQ29ubmVjdDwvc3Bhbj48L3ByZT4KLTxwPlNwZWNpZnkgaG93IHRoZSBvdXRwdXQgcG9ydHMgd2lsbCBiZSBjb25uZWN0ZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEF1dG9tYXRpY2FsbHkgY29ubmVjdCBwb3J0cyB0byBwaHlzaWNhbCBwb3J0czwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SmFja0F1ZGlvU2luay0tc2VydmVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2VydmVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzZXJ2ZXLigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBKYWNrIHNlcnZlciB0byBjb25uZWN0IHRvIChOVUxMID0gZGVmYXVsdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEphY2tBdWRpb1NpbmstLWNsaWVudC1uYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xpZW50LW5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsaWVudC1uYW1l4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGNsaWVudCBuYW1lIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SmFja0F1ZGlvU2luay0tdHJhbnNwb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdHJhbnNwb3J04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0cmFuc3BvcnTigJ0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEphY2tUcmFuc3BvcnQ8L3NwYW4+PC9wcmU+Ci08cD5UaGUgamFjayB0cmFuc3BvcnQgYmVoYXZpb3VyIGZvciB0aGUgY2xpZW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEphY2tBdWRpb1NpbmstLXBvcnQtcGF0dGVybiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvcnQtcGF0dGVybuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9ydC1wYXR0ZXJu4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5hdXRvY29ubmVjdCB0byBwb3J0cyBtYXRjaGluZyBwYXR0ZXJuLCB3aGVuIE5VTEwgY29ubmVjdCB0byBwaHlzaWNhbCBwb3J0czwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS42PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9iYXNlc2luay5odG1sI0dzdEF1ZGlvQmFzZVNpbmstc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9CYXNlU2luazwvc3Bhbj48L2E+LCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvcmluZ2J1ZmZlci5odG1sI0dzdEF1ZGlvUmluZ0J1ZmZlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb1JpbmdCdWZmZXI8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjU1Zjc5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+amFja2F1ZGlvc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NpbmsuaHRtbCIgdGl0bGU9ImphY2thdWRpb3NpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2RlYy5odG1sIiB0aXRsZT0ianBlZ2RlYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy50b3Bfb2ZfcGFnZSI+PC9hPmphY2thdWRpb3NyYzwvc3Bhbj48L2gyPgotPHA+amFja2F1ZGlvc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxzcGFuIGNsYXNzPSJ0eXBlIj5KYWNrQ2xpZW50PC9zcGFuPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS1jbGllbnQiIHRpdGxlPSJUaGUg4oCcY2xpZW504oCdIHByb3BlcnR5Ij5jbGllbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SmFja0Nvbm5lY3Q8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMuaHRtbCNHc3RKYWNrQXVkaW9TcmMtLWNvbm5lY3QiIHRpdGxlPSJUaGUg4oCcY29ubmVjdOKAnSBwcm9wZXJ0eSI+Y29ubmVjdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sI0dzdEphY2tBdWRpb1NyYy0tc2VydmVyIiB0aXRsZT0iVGhlIOKAnHNlcnZlcuKAnSBwcm9wZXJ0eSI+c2VydmVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS1jbGllbnQtbmFtZSIgdGl0bGU9IlRoZSDigJxjbGllbnQtbmFtZeKAnSBwcm9wZXJ0eSI+Y2xpZW50LW5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0SmFja1RyYW5zcG9ydDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sI0dzdEphY2tBdWRpb1NyYy0tdHJhbnNwb3J0IiB0aXRsZT0iVGhlIOKAnHRyYW5zcG9ydOKAnSBwcm9wZXJ0eSI+dHJhbnNwb3J0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS1wb3J0LXBhdHRlcm4iIHRpdGxlPSJUaGUg4oCccG9ydC1wYXR0ZXJu4oCdIHByb3BlcnR5Ij5wb3J0LXBhdHRlcm48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdEphY2tBdWRpb1NyYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sI0dzdEphY2tBdWRpb1NyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SmFja0F1ZGlvU3JjIj5Hc3RKYWNrQXVkaW9TcmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VTcmMuaHRtbCNHc3RCYXNlU3JjLXN0cnVjdCI+R3N0QmFzZVNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0UHVzaFNyYy5odG1sI0dzdFB1c2hTcmMtc3RydWN0Ij5Hc3RQdXNoU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2Jhc2VzcmMuaHRtbCNHc3RBdWRpb0Jhc2VTcmMtc3RydWN0Ij5Hc3RBdWRpb0Jhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SmFja0F1ZGlvU3JjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BIFNyYyB0aGF0IGlucHV0cyBkYXRhIGZyb20gSmFjayBwb3J0cy48L3A+Ci08cD5JdCB3aWxsIGNyZWF0ZSBOIEphY2sgcG9ydHMgbmFtZWQgaW5fJmx0O25hbWUmZ3Q7XyZsdDtudW0mZ3Q7IHdoZXJlIAotJmx0O25hbWUmZ3Q7IGlzIHRoZSBlbGVtZW50IG5hbWUgYW5kICZsdDtudW0mZ3Q7IGlzIHN0YXJ0aW5nIGZyb20gMS4KLUVhY2ggcG9ydCBjb3JyZXNwb25kcyB0byBhIGdzdHJlYW1lciBjaGFubmVsLjwvcD4KLTxwPlRoZSBzYW1wbGVyYXRlIGFzIGV4cG9zZWQgb24gdGhlIGNhcHMgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBzYW1wbGVyYXRlIG9mCi10aGUgamFjayBzZXJ2ZXIuPC9wPgotPHA+V2hlbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMuaHRtbCNHc3RKYWNrQXVkaW9TcmMtLWNvbm5lY3QiIHRpdGxlPSJUaGUg4oCcY29ubmVjdOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGNvbm5lY3TigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBpcyBzZXQgdG8gYXV0bywgdGhpcyBlbGVtZW50Ci13aWxsIHRyeSB0byBjb25uZWN0IGVhY2ggaW5wdXQgcG9ydCB0byBhIHJhbmRvbSBwaHlzaWNhbCBqYWNrIG91dHB1dCBwaW4uIDwvcD4KLTxwPldoZW4gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwjR3N0SmFja0F1ZGlvU3JjLS1jb25uZWN0IiB0aXRsZT0iVGhlIOKAnGNvbm5lY3TigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxjb25uZWN04oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgc2V0IHRvIG5vbmUsIHRoZSBlbGVtZW50IHdpbGwKLWFjY2VwdCBhbnkgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyBhbmQgd2lsbCBjcmVhdGUgKGJ1dCBub3QgY29ubmVjdCkgYW4KLWlucHV0IHBvcnQgZm9yIGVhY2ggY2hhbm5lbC48L3A+Ci08cD5UaGUgZWxlbWVudCB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gdGhlIEphY2sgc2VydmVyIGlzIHNodXQgZG93biB3aGVuIGl0Ci13YXMgUEFVU0VEIG9yIFBMQVlJTkcuIFRoaXMgZWxlbWVudCBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgcmF0ZSBhbmQgYnVmZmVyCi1zaXplIGNoYW5nZXMgYXQgcnVudGltZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODAuNy44Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGphY2thdWRpb3NyYyBjb25uZWN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGphY2thdWRpb3NpbmsgY29ubmVjdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEdldCBhdWRpbyBpbnB1dCBpbnRvIGdzdHJlYW1lciBmcm9tIGphY2suCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODAuNy45LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2suaHRtbCNwbHVnaW4tamFjayI+amFjazwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRyaXN0YW4gTWF0dGhld3MgJmx0O3RyaXN0YW5Ac2F0LnFjLmNhJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Tb3VyY2UvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODAuNy45LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpRjMyTEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKYWNrQXVkaW9TcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RKYWNrQXVkaW9TcmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RKYWNrQXVkaW9TcmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SmFja0F1ZGlvU3JjLS1jbGllbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbGllbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsaWVudOKAnSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+SmFja0NsaWVudDwvc3Bhbj7CoCo8L3ByZT4KLTxwPkhhbmRsZSBmb3IgamFjayBjbGllbnQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SmFja0F1ZGlvU3JjLS1jb25uZWN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29ubmVjdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29ubmVjdOKAnSAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RKYWNrQ29ubmVjdDwvc3Bhbj48L3ByZT4KLTxwPlNwZWNpZnkgaG93IHRoZSBpbnB1dCBwb3J0cyB3aWxsIGJlIGNvbm5lY3RlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogQXV0b21hdGljYWxseSBjb25uZWN0IHBvcnRzIHRvIHBoeXNpY2FsIHBvcnRzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKYWNrQXVkaW9TcmMtLXNlcnZlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlcnZlcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2VydmVy4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgSmFjayBzZXJ2ZXIgdG8gY29ubmVjdCB0byAoTlVMTCA9IGRlZmF1bHQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKYWNrQXVkaW9TcmMtLWNsaWVudC1uYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xpZW50LW5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNsaWVudC1uYW1l4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGNsaWVudCBuYW1lIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SmFja0F1ZGlvU3JjLS10cmFuc3BvcnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0cmFuc3BvcnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRyYW5zcG9ydOKAnSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0SmFja1RyYW5zcG9ydDwvc3Bhbj48L3ByZT4KLTxwPkphY2sgdHJhbnNwb3J0IGJlaGF2aW91ciBvZiB0aGUgY2xpZW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEphY2tBdWRpb1NyYy0tcG9ydC1wYXR0ZXJuIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9ydC1wYXR0ZXJu4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb3J0LXBhdHRlcm7igJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPmF1dG9jb25uZWN0IHRvIHBvcnRzIG1hdGNoaW5nIHBhdHRlcm4sIHdoZW4gTlVMTCBjb25uZWN0IHRvIHBoeXNpY2FsIHBvcnRzPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjY8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvYmFzZXNyYy5odG1sI0dzdEF1ZGlvQmFzZVNyYy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBdWRpb0Jhc2VTcmM8L3NwYW4+PC9hPiwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb3JpbmdidWZmZXIuaHRtbCNHc3RBdWRpb1JpbmdCdWZmZXItc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0QXVkaW9SaW5nQnVmZmVyPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2RlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTkwNjA2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmpwZWdkZWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwiIHRpdGxlPSJqYWNrYXVkaW9zcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIiB0aXRsZT0ianBlZ2VuYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2RlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtamFja2F1ZGlvc3JjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMudG9wX29mX3BhZ2UiPjwvYT5qcGVnZGVjPC9zcGFuPjwvaDI+Ci08cD5qcGVnZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdElEQ1RNZXRob2Q8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwjR3N0SnBlZ0RlYy0taWRjdC1tZXRob2QiIHRpdGxlPSJUaGUg4oCcaWRjdC1tZXRob2TigJ0gcHJvcGVydHkiPmlkY3QtbWV0aG9kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwjR3N0SnBlZ0RlYy0tbWF4LWVycm9ycyIgdGl0bGU9IlRoZSDigJxtYXgtZXJyb3Jz4oCdIHByb3BlcnR5Ij5tYXgtZXJyb3JzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RKcGVnRGVjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMuaHRtbCNHc3RKcGVnRGVjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RKcGVnRGVjIj5Hc3RKcGVnRGVjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2RlYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1Hc3RWaWRlb0RlY29kZXIuaHRtbCNHc3RWaWRlb0RlY29kZXIiPkdzdFZpZGVvRGVjb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0SnBlZ0RlYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkRlY29kZXMganBlZyBpbWFnZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjgxLjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5tanBlZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmF2aSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXZpZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+ICBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4ganBlZ2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb3NjYWxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoZSBhYm92ZSBwaXBlbGluZSBkZWNvZGUgdGhlIG1qcGVnIHN0cmVhbSBhbmQgcmVuZGVycyBpdCB0byB0aGUgc2NyZWVuLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjgxLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qcGVnLmh0bWwjcGx1Z2luLWpwZWciPmpwZWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZWNvZGVyL0ltYWdlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjgxLjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5pbWFnZS9qcGVnPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJNDIwLCBSR0IsIEJHUiwgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgR1JBWTggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKcGVnRGVjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SnBlZ0RlYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEpwZWdEZWM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEpwZWdEZWMtLWlkY3QtbWV0aG9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaWRjdC1tZXRob2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGlkY3QtbWV0aG9k4oCdICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0SURDVE1ldGhvZDwvc3Bhbj48L3ByZT4KLTxwPlRoZSBJRENUIGFsZ29yaXRobSB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0SnBlZ0RlYy0tbWF4LWVycm9ycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1lcnJvcnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1lcnJvcnPigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkVycm9yIG91dCBhZnRlciByZWNlaXZpbmcgTiBjb25zZWN1dGl2ZSBkZWNvZGluZyBlcnJvcnMKLSgtMSA9IG5ldmVyIGVycm9yIG91dCwgMCA9IGF1dG9tYXRpYywgMSA9IGZhaWwgb24gZmlyc3QgZXJyb3IsIGV0Yy4pPC9wPgotPGRpdiBjbGFzcz0id2FybmluZyI+Ci08cD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R3N0SnBlZ0RlYzptYXgtZXJyb3JzPC9jb2RlPiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4zLjEgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXdseS13cml0dGVuIGNvZGUuPC9wPgotPHA+UHJvcGVydHkgd2Fzbid0IHVzZWQgaW50ZXJuYWxseTwvcD4KLTwvZGl2PgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdlbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjYWE3NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5qcGVnZW5jOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdkZWMuaHRtbCIgdGl0bGU9ImpwZWdkZWMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCIgdGl0bGU9ImxldmVsIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLnRvcF9vZl9wYWdlIj48L2E+anBlZ2VuYzwvc3Bhbj48L2gyPgotPHA+anBlZ2VuYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sI0dzdEpwZWdFbmMtLXF1YWxpdHkiIHRpdGxlPSJUaGUg4oCccXVhbGl0eeKAnSBwcm9wZXJ0eSI+cXVhbGl0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RJRENUTWV0aG9kPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sI0dzdEpwZWdFbmMtLWlkY3QtbWV0aG9kIiB0aXRsZT0iVGhlIOKAnGlkY3QtbWV0aG9k4oCdIHByb3BlcnR5Ij5pZGN0LW1ldGhvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0SnBlZ0VuYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmh0bWwjR3N0SnBlZ0VuYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0SnBlZ0VuYyI+R3N0SnBlZ0VuYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdlbmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtR3N0VmlkZW9FbmNvZGVyLmh0bWwjR3N0VmlkZW9FbmNvZGVyIj5Hc3RWaWRlb0VuY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdEpwZWdFbmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RKcGVnRW5jIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkVuY29kZXMganBlZyBpbWFnZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjgyLjguMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj54PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cmF3PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZyYW1lcmF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPicoZnJhY3Rpb24pJzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBqcGVnZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdmltdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bWpwZWc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5hdmk8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gYSBwaXBlbGluZSB0byBtdXggNSBKUEVHIGZyYW1lcyBwZXIgc2Vjb25kIGludG8gYSAxMCBzZWMuIGxvbmcgbW90aW9uIGpwZWcKLWF2aS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44Mi44LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tanBlZy5odG1sI3BsdWdpbi1qcGVnIj5qcGVnPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQHR2ZC5iZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRW5jb2Rlci9JbWFnZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44Mi44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiwgWVVZMiwgVVlWWSwgWTQxQiwgWTQyQiwgWVZZVSwgWTQ0NCwgTlYyMSwgTlYxMiwgUkdCLCBCR1IsIFJHQngsIHhSR0IsIEJHUngsIHhCR1IsIEdSQVk4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+aW1hZ2UvanBlZywgd2lkdGg9KGludClbIDE2LCA2NTUzNSBdLCBoZWlnaHQ9KGludClbIDE2LCA2NTUzNSBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgc29mLW1hcmtlcj0oaW50KXsgMCwgMSwgMiwgOSB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKcGVnRW5jLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0SnBlZ0VuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdEpwZWdFbmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWpwZWdlbmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdEpwZWdFbmMtLXF1YWxpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxxdWFsaXR54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxxdWFsaXR54oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5RdWFsaXR5IG9mIGVuY29kaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDg1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RKcGVnRW5jLS1pZGN0LW1ldGhvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGlkY3QtbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpZGN0LW1ldGhvZOKAnSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdElEQ1RNZXRob2Q8L3NwYW4+PC9wcmU+Ci08cD5UaGUgSURDVCBhbGdvcml0aG0gdG8gdXNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2Q8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMyZDYzNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU4OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bGV2ZWw6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIiB0aXRsZT0ianBlZ2VuYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lmh0bWwiIHRpdGxlPSJtYXRyb3NrYWRlbXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qcGVnZW5jLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbC50b3Bfb2ZfcGFnZSI+PC9hPmxldmVsPC9zcGFuPjwvaDI+Ci08cD5sZXZlbDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnGludGVydmFs4oCdIHByb3BlcnR5Ij5pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbC5odG1sI0dzdExldmVsLS1tZXNzYWdlIiB0aXRsZT0iVGhlIOKAnG1lc3NhZ2XigJ0gcHJvcGVydHkiPm1lc3NhZ2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLXBlYWstZmFsbG9mZiIgdGl0bGU9IlRoZSDigJxwZWFrLWZhbGxvZmbigJ0gcHJvcGVydHkiPnBlYWstZmFsbG9mZjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCNHc3RMZXZlbC0tcGVhay10dGwiIHRpdGxlPSJUaGUg4oCccGVhay10dGzigJ0gcHJvcGVydHkiPnBlYWstdHRsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLXBvc3QtbWVzc2FnZXMiIHRpdGxlPSJUaGUg4oCccG9zdC1tZXNzYWdlc+KAnSBwcm9wZXJ0eSI+cG9zdC1tZXNzYWdlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TGV2ZWwiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdExldmVsIj5Hc3RMZXZlbDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdExldmVsCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkxldmVsIGFuYWx5c2VzIGluY29taW5nIGF1ZGlvIGJ1ZmZlcnMgYW5kLCBpZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbC5odG1sI0dzdExldmVsLS1tZXNzYWdlIiB0aXRsZT0iVGhlIOKAnG1lc3NhZ2XigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtZXNzYWdl4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkKLWlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiwgZ2VuZXJhdGVzIGFuIGVsZW1lbnQgbWVzc2FnZSBuYW1lZDwvcD4KLTxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJsZXZlbCI8L2NvZGU+OgotPHA+YWZ0ZXIgZWFjaCBpbnRlcnZhbCBvZiB0aW1lIGdpdmVuIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnGludGVydmFs4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcaW50ZXJ2YWzigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eS4KLVRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIHRoZXNlIGZpZWxkczo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJ0aW1lc3RhbXAiPC9jb2RlPjoKLSAgdGhlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBtZXNzYWdlLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4ic3RyZWFtLXRpbWUiPC9jb2RlPjoKLSAgdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXIuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJydW5uaW5nLXRpbWUiPC9jb2RlPjoKLSAgdGhlIHJ1bm5pbmdfdGltZSBvZiB0aGUgYnVmZmVyLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4iZHVyYXRpb24iPC9jb2RlPjoKLSAgdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDbG9jay5odG1sI0dzdENsb2NrVGltZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrVGltZTwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJlbmR0aW1lIjwvY29kZT46Ci0gIHRoZSBlbmQgdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBtZXNzYWdlIGFzIHN0cmVhbSB0aW1lICh0aGlzCi0gIGlzIGRlcHJlY2F0ZWQsIGFzIGl0IGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gc3RyZWFtLXRpbWUgKyBkdXJhdGlvbikKLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+IG9mIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4icGVhayI8L2NvZGU+OgotICB0aGUgcGVhayBwb3dlciBsZXZlbCBpbiBkQiBmb3IgZWFjaCBjaGFubmVsCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI0dWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlQXJyYXk8L3NwYW4+PC9hPiBvZiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ImRlY2F5IjwvY29kZT46Ci0gIHRoZSBkZWNheWluZyBwZWFrIHBvd2VyIGxldmVsIGluIGRCIGZvciBlYWNoIGNoYW5uZWwKLSAgVGhlIGRlY2F5aW5nIHBlYWsgbGV2ZWwgZm9sbG93cyB0aGUgcGVhayBsZXZlbCwgYnV0IHN0YXJ0cyBkcm9wcGluZyBpZiBubwotICBuZXcgcGVhayBpcyByZWFjaGVkIGFmdGVyIHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLmh0bWwjR3N0TGV2ZWwtLXBlYWstdHRsIiB0aXRsZT0iVGhlIOKAnHBlYWstdHRs4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccGVhay10dGzigJ08L3NwYW4+PC9hPi4KLSAgV2hlbiB0aGUgZGVjYXlpbmcgcGVhayBsZXZlbCBkcm9wcywgaXQgZG9lcyBzbyBhdCB0aGUgZGVjYXkgcmF0ZSBhcwotICBzcGVjaWZpZWQgYnkgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCNHc3RMZXZlbC0tcGVhay1mYWxsb2ZmIiB0aXRsZT0iVGhlIOKAnHBlYWstZmFsbG9mZuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHBlYWstZmFsbG9mZuKAnTwvc3Bhbj48L2E+LgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT4gb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJybXMiPC9jb2RlPjoKLSAgdGhlIFJvb3QgTWVhbiBTcXVhcmUgKG9yIGF2ZXJhZ2UgcG93ZXIpIGxldmVsIGluIGRCIGZvciBlYWNoIGNoYW5uZWwKLSAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg0LjcuNiI+PC9hPjxoMz5FeGFtcGxlIGFwcGxpY2F0aW9uPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNAotMjUKLTI2Ci0yNwotMjgKLTI5Ci0zMAotMzEKLTMyCi0zMwotMzQKLTM1Ci0zNgotMzcKLTM4Ci0zOQotNDAKLTQxCi00MgotNDMKLTQ0Ci00NQotNDYKLTQ3Ci00OAotNDkKLTUwCi01MQotNTIKLTUzCi01NAotNTUKLTU2Ci01NwotNTgKLTU5Ci02MAotNjEKLTYyCi02MwotNjQKLTY1Ci02NgotNjcKLTY4Ci02OQotNzAKLTcxCi03MgotNzMKLTc0Ci03NQotNzYKLTc3Ci03OAotNzkKLTgwCi04MQotODIKLTgzCi04NAotODUKLTg2Ci04NwotODgKLTg5Ci05MAotOTEKLTkyCi05MwotOTQKLTk1Ci05NgotOTcKLTk4Ci05OQotMTAwCi0xMDEKLTEwMgotMTAzCi0xMDQKLTEwNQotMTA2Ci0xMDcKLTEwOAotMTA5Ci0xMTAKLTExMQotMTEyCi0xMTMKLTExNAotMTE1Ci0xMTYKLTExNwotMTE4Ci0xMTkKLTEyMAotMTIxCi0xMjIKLTEyMwotMTI0Ci0xMjUKLTEyNgotMTI3Ci0xMjgKLTEyOQotMTMwCi0xMzEKLTEzMgotMTMzCi0xMzQKLTEzNQotMTM2Ci0xMzcKLTEzOAotMTM5Ci0xNDA8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJjb21tZW50Ij4vKiBHU3RyZWFtZXI8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogICAgICAgICAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICo8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXI8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCw8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Y8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS48L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICovPC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIHBwYyI+I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7bWF0aC5oJmd0Ozwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTPC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIHBwYyI+I2luY2x1ZGUgJmx0O2dzdC9nc3QuaCZndDs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWM8L3NwYW4+IGdib29sZWFuCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm1lc3NhZ2VfaGFuZGxlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+R3N0QnVzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBidXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR3N0TWVzc2FnZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gbWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBncG9pbnRlciBkYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1lc3NhZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LSZndDs8L3NwYW4+dHlwZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PT08L3NwYW4+IEdTVF9NRVNTQUdFX0VMRU1FTlQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSB7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5jb25zdDwvc3Bhbj4gR3N0U3RydWN0dXJlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE1lc3NhZ2UuaHRtbCNnc3QtbWVzc2FnZS1nZXQtc3RydWN0dXJlIj5nc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y29uc3Q8L3NwYW4+IGdjaGFyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPm5hbWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LW5hbWUiPmdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPnN0cmNtcDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtsZXZlbCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSA9PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSB7PC9zcGFuPgotICAgICAgZ2ludCBjaGFubmVsczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgICAgR3N0Q2xvY2tUaW1lIGVuZHRpbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICAgIGdkb3VibGUgcm1zX2RCPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHBlYWtfZEI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZGVjYXlfZEI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICAgIGdkb3VibGUgcm1zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y29uc3Q8L3NwYW4+IEdWYWx1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5hcnJheV92YWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5jb25zdDwvc3Bhbj4gR1ZhbHVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnZhbHVlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgICBHVmFsdWVBcnJheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5ybXNfYXJyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5wZWFrX2FycjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICo8L3NwYW4+ZGVjYXlfYXJyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgICBnaW50IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtY2xvY2stdGltZSI+Z3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7ZW5kdGltZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5lbmR0aW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpPC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lc3NhZ2UtTG9nZ2luZy5odG1sI2ctd2FybmluZyI+Z193YXJuaW5nPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7Q291bGQgbm90IHBhcnNlIGVuZHRpbWUmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gICAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+LyogdGhlIHZhbHVlcyBhcmUgcGFja2VkIGludG8gR1ZhbHVlQXJyYXlzIHdpdGggdGhlIHZhbHVlIHBlciBjaGFubmVsICovPC9zcGFuPgotICAgICAgYXJyYXlfdmFsIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC12YWx1ZSI+Z3N0X3N0cnVjdHVyZV9nZXRfdmFsdWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3JtcyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICBybXNfYXJyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49ICg8L3NwYW4+R1ZhbHVlQXJyYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiopPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLWdldC1ib3hlZCI+Z192YWx1ZV9nZXRfYm94ZWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hcnJheV92YWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgICAgIGFycmF5X3ZhbCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtwZWFrJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIHBlYWtfYXJyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49ICg8L3NwYW4+R1ZhbHVlQXJyYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiopPC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLWdldC1ib3hlZCI+Z192YWx1ZV9nZXRfYm94ZWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hcnJheV92YWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgICAgIGFycmF5X3ZhbCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtkZWNheSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICBkZWNheV9hcnIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gKDwvc3Bhbj5HVmFsdWVBcnJheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kik8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU3RhbmRhcmQtUGFyYW1ldGVyLWFuZC1WYWx1ZS1UeXBlcy5odG1sI2ctdmFsdWUtZ2V0LWJveGVkIj5nX3ZhbHVlX2dldF9ib3hlZDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmFycmF5X3ZhbDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICAgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIHdlIGNhbiBnZXQgdGhlIG51bWJlciBvZiBjaGFubmVscyBhcyB0aGUgbGVuZ3RoIG9mIGFueSBvZiB0aGUgdmFsdWU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICAgICAgICogYXJyYXlzICovPC9zcGFuPgotICAgICAgY2hhbm5lbHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IHJtc19hcnI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LSZndDs8L3NwYW4+bl92YWx1ZXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7ZW5kdGltZTogJSZxdW90Ozwvc3Bhbj4gR1NUX1RJTUVfRk9STUFUIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90OywgY2hhbm5lbHM6ICVkPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdEluZm8uaHRtbCNHU1QtVElNRS1BUkdTOkNBUFMiPkdTVF9USU1FX0FSR1M8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5lbmR0aW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiBjaGFubmVsczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mb3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZsdDs8L3NwYW4+IGNoYW5uZWxzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjsgKys8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0KLSAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1XYXJuaW5ncy1hbmQtQXNzZXJ0aW9ucy5odG1sI2ctcHJpbnQiPmdfcHJpbnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtjaGFubmVsICVkPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICAgIHZhbHVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI2ctdmFsdWUtYXJyYXktZ2V0LW50aCI+Z192YWx1ZV9hcnJheV9nZXRfbnRoPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cm1zX2FycjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgICBybXNfZEIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU3RhbmRhcmQtUGFyYW1ldGVyLWFuZC1WYWx1ZS1UeXBlcy5odG1sI2ctdmFsdWUtZ2V0LWRvdWJsZSI+Z192YWx1ZV9nZXRfZG91YmxlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+dmFsdWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgICAgICAgdmFsdWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjZy12YWx1ZS1hcnJheS1nZXQtbnRoIj5nX3ZhbHVlX2FycmF5X2dldF9udGg8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wZWFrX2FycjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgICBwZWFrX2RCIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLWdldC1kb3VibGUiPmdfdmFsdWVfZ2V0X2RvdWJsZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnZhbHVlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gICAgICAgIHZhbHVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI2ctdmFsdWUtYXJyYXktZ2V0LW50aCI+Z192YWx1ZV9hcnJheV9nZXRfbnRoPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZGVjYXlfYXJyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgICAgIGRlY2F5X2RCIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLWdldC1kb3VibGUiPmdfdmFsdWVfZ2V0X2RvdWJsZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnZhbHVlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVdhcm5pbmdzLWFuZC1Bc3NlcnRpb25zLmh0bWwjZy1wcmludCI+Z19wcmludDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90OyAgICBSTVM6ICVmIGRCLCBwZWFrOiAlZiBkQiwgZGVjYXk6ICVmIGRCPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICAgICAgICBybXNfZEI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gcGVha19kQjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBkZWNheV9kQjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICAgICAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+LyogY29udmVydGluZyBmcm9tIGRCIHRvIG5vcm1hbCBnaXZlcyB1cyBhIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgKi88L3NwYW4+Ci0gICAgICAgIHJtcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5wb3c8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBybXNfZEIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjIwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1XYXJuaW5ncy1hbmQtQXNzZXJ0aW9ucy5odG1sI2ctcHJpbnQiPmdfcHJpbnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDsgICAgbm9ybWFsaXplZCBybXMgdmFsdWU6ICVmPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHJtczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIHdlIGhhbmRsZWQgdGhlIG1lc3NhZ2Ugd2Ugd2FudCwgYW5kIGlnbm9yZWQgdGhlIG9uZXMgd2UgZGlkbid0IHdhbnQuPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAgICogc28gdGhlIGNvcmUgY2FuIHVucmVmIHRoZSBtZXNzYWdlIGZvciB1cyAqLzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm1haW48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+IGFyZ2M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNoYXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmFyZ3Y8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+W10pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdzdEVsZW1lbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+YXVkaW90ZXN0c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5hdWRpb2NvbnZlcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPmxldmVsPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5mYWtlc2luazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBHc3RFbGVtZW50IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPnBpcGVsaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdzdENhcHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+Y2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICBHc3RCdXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIGd1aW50IHdhdGNoX2lkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdNYWluTG9vcCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5sb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0Ij5nc3RfaW5pdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oJmFtcDs8L3NwYW4+YXJnYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPmFyZ3Y8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgY2FwcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLWZyb20tc3RyaW5nIj5nc3RfY2Fwc19mcm9tX3N0cmluZzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvL3gtcmF3LGNoYW5uZWxzPTImcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIHBpcGVsaW5lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1uZXciPmdzdF9waXBlbGluZV9uZXc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5OVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydCI+Z19hc3NlcnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5waXBlbGluZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW90ZXN0c3JjJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydCI+Z19hc3NlcnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hdWRpb3Rlc3RzcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvY29udmVydCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UZXN0aW5nLmh0bWwjZy1hc3NlcnQiPmdfYXNzZXJ0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YXVkaW9jb252ZXJ0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICBsZXZlbCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2xldmVsJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRlc3RpbmcuaHRtbCNnLWFzc2VydCI+Z19hc3NlcnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5sZXZlbDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgZmFrZXNpbmsgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtmYWtlc2luayZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UZXN0aW5nLmh0bWwjZy1hc3NlcnQiPmdfYXNzZXJ0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZmFrZXNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjZ3N0LWJpbi1hZGQtbWFueSI+Z3N0X2Jpbl9hZGRfbWFueTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+R1NUX0JJTjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IGF1ZGlvdGVzdHNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBhdWRpb2NvbnZlcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gbGV2ZWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgIGZha2VzaW5rPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPighPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIj5nc3RfZWxlbWVudF9saW5rPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YXVkaW90ZXN0c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGF1ZGlvY29udmVydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLU1lc3NhZ2UtTG9nZ2luZy5odG1sI2ctZXJyb3IiPmdfZXJyb3I8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtGYWlsZWQgdG8gbGluayBhdWRpb3Rlc3RzcmMgYW5kIGF1ZGlvY29udmVydCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPighPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rLWZpbHRlcmVkIj5nc3RfZWxlbWVudF9saW5rX2ZpbHRlcmVkPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YXVkaW9jb252ZXJ0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGxldmVsPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSk8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZXNzYWdlLUxvZ2dpbmcuaHRtbCNnLWVycm9yIj5nX2Vycm9yPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7RmFpbGVkIHRvIGxpbmsgYXVkaW9jb252ZXJ0IGFuZCBsZXZlbCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPighPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIj5nc3RfZWxlbWVudF9saW5rPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bGV2ZWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZmFrZXNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSk8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1NZXNzYWdlLUxvZ2dpbmcuaHRtbCNnLWVycm9yIj5nX2Vycm9yPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7RmFpbGVkIHRvIGxpbmsgbGV2ZWwgYW5kIGZha2VzaW5rJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iY29tbWVudCI+LyogbWFrZSBzdXJlIHdlJ2xsIGdldCBtZXNzYWdlcyAqLzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXNldCI+Z19vYmplY3Rfc2V0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0ctT0JKRUNUOkNBUFMiPkdfT0JKRUNUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bGV2ZWw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3Bvc3QtbWVzc2FnZXMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIHJ1biBzeW5jZWQgYW5kIG5vdCBhcyBmYXN0IGFzIHdlIGNhbiAqLzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXNldCI+Z19vYmplY3Rfc2V0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0ctT0JKRUNUOkNBUFMiPkdfT0JKRUNUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZmFrZXNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3N5bmMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICBidXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1nZXQtYnVzIj5nc3RfZWxlbWVudF9nZXRfYnVzPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIHdhdGNoX2lkIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCdXMuaHRtbCNnc3QtYnVzLWFkZC13YXRjaCI+Z3N0X2J1c19hZGRfd2F0Y2g8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gbWVzc2FnZV9oYW5kbGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1zdGF0ZSI+Z3N0X2VsZW1lbnRfc2V0X3N0YXRlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cGlwZWxpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR1NUX1NUQVRFX1BMQVlJTkc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIHdlIG5lZWQgdG8gcnVuIGEgR0xpYiBtYWluIGxvb3AgdG8gZ2V0IHRoZSBtZXNzYWdlcyAqLzwvc3Bhbj4KLSAgbG9vcCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1tYWluLWxvb3AtbmV3Ij5nX21haW5fbG9vcF9uZXc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5OVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEZBTFNFPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tbG9vcC1ydW4iPmdfbWFpbl9sb29wX3J1bjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmxvb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1zb3VyY2UtcmVtb3ZlIj5nX3NvdXJjZV9yZW1vdmU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj53YXRjaF9pZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UaGUtTWFpbi1FdmVudC1Mb29wLmh0bWwjZy1tYWluLWxvb3AtdW5yZWYiPmdfbWFpbl9sb29wX3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg0LjcuNy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1sZXZlbC5odG1sI3BsdWdpbi1sZXZlbCI+bGV2ZWw8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaG9tYXMgVmFuZGVyIFN0aWNoZWxlICZsdDt0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9BbmFseXplci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44NC43LjcuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMzJMRSwgRjMyTEUsIEY2NExFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1sZXZlbC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdExldmVsLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TGV2ZWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RMZXZlbDs8L3ByZT4KLTxwPk9wYXF1ZSBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWxldmVsLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMZXZlbC0taW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaW50ZXJ2YWzigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+SW50ZXJ2YWwgb2YgdGltZSBiZXR3ZWVuIG1lc3NhZ2UgcG9zdHMgKGluIG5hbm9zZWNvbmRzKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDE8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDAwMDAwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdExldmVsLS1tZXNzYWdlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWVzc2FnZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWVzc2FnZeKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Qb3N0IGEgJ2xldmVsJyBtZXNzYWdlIGZvciBlYWNoIHBhc3NlZCBpbnRlcnZhbCAoZGVwcmVjYXRlZCwgdXNlIHRoZSBwb3N0LW1lc3NhZ2VzIHByb3BlcnR5IGluc3RlYWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMZXZlbC0tcGVhay1mYWxsb2ZmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGVhay1mYWxsb2Zm4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwZWFrLWZhbGxvZmbigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWNheSByYXRlIG9mIGRlY2F5IHBlYWsgYWZ0ZXIgVFRMIChpbiBkQi9zZWMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMZXZlbC0tcGVhay10dGwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwZWFrLXR0bOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccGVhay10dGzigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZSBUbyBMaXZlIG9mIGRlY2F5IHBlYWsgYmVmb3JlIGl0IGZhbGxzIGJhY2sgKGluIG5hbm9zZWNvbmRzKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMzAwMDAwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RMZXZlbC0tcG9zdC1tZXNzYWdlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvc3QtbWVzc2FnZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBvc3QtbWVzc2FnZXPigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+UG9zdCBtZXNzYWdlcyBvbiB0aGUgYnVzIHdpdGggbGV2ZWwgaW5mb3JtYXRpb24uPC9wPgotPGRpdiBjbGFzcz0id2FybmluZyI+Ci08cD48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+R3N0TGV2ZWw6cG9zdC1tZXNzYWdlczwvY29kZT4gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ld2x5LXdyaXR0ZW4gY29kZS48L3A+Ci08cD51c2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCNHc3RMZXZlbC0tcG9zdC1tZXNzYWdlcyIgdGl0bGU9IlRoZSDigJxwb3N0LW1lc3NhZ2Vz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccG9zdC1tZXNzYWdlc+KAnTwvc3Bhbj48L2E+IHByb3BlcnR5PC9wPgotPC9kaXY+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMS4wPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzQ5ZTJlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm1hdHJvc2thZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCIgdGl0bGU9ImxldmVsIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwiIHRpdGxlPSJtYXRyb3NrYW11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thZGVtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thZGVtdXgucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5tYXRyb3NrYWRlbXV4PC9zcGFuPjwvaDI+Ci08cD5tYXRyb3NrYWRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5odG1sI0dzdE1hdHJvc2thRGVtdXgtLW1heC1nYXAtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtZ2FwLXRpbWXigJ0gcHJvcGVydHkiPm1heC1nYXAtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdE1hdHJvc2thRGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lmh0bWwjR3N0TWF0cm9za2FEZW11eC1zdHJ1Y3QiIHRpdGxlPSJHc3RNYXRyb3NrYURlbXV4Ij5Hc3RNYXRyb3NrYURlbXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TWF0cm9za2FEZW11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPm1hdHJvc2thZGVtdXggZGVtdXhlcyBhIE1hdHJvc2thIGZpbGUgaW50byB0aGUgZGlmZmVyZW50IGNvbnRhaW5lZCBzdHJlYW1zLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44NS43LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0vPC9zcGFuPnBhdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj50bzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPm1rdiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbWF0cm9za2FkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBkZW11eGVzIGEgTWF0cm9za2EgZmlsZSBhbmQgb3V0cHV0cyB0aGUgY29udGFpbmVkIFZvcmJpcyBhdWRpby4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44NS43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EuaHRtbCNwbHVnaW4tbWF0cm9za2EiPm1hdHJvc2thPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIG1haW50YWluZXJzICZsdDtnc3RyZWFtZXItZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZW11eGVyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg1LjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LW1hdHJvc2thPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1tYXRyb3NrYTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbWF0cm9za2EtM2Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby93ZWJtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vd2VibTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW9fJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnN1YnRpdGxlXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dGV4dC94LXJhdywgZm9ybWF0PShzdHJpbmcpcGFuZ28tbWFya3VwPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1zc2E8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LWFzczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtdXNmPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gc3VicGljdHVyZS94LWR2ZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHN1YnBpY3R1cmUveC1wZ3M8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBzdWJ0aXRsZS94LWthdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXN1YnRpdGxlLXVua25vd248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNYXRyb3NrYURlbXV4LXN0cnVjdCI+PC9hPjxoMz5Hc3RNYXRyb3NrYURlbXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0TWF0cm9za2FEZW11eCBHc3RNYXRyb3NrYURlbXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNYXRyb3NrYURlbXV4LS1tYXgtZ2FwLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtZ2FwLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1nYXAtdGltZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBkZW11eGVyIHNlbmRzIG91dCBzZWdtZW50IGV2ZW50cyBmb3Igc2tpcHBpbmcgZ2FwcyBsb25nZXIgdGhhbiB0aGlzICgwID0gZGlzYWJsZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAyMDAwMDAwMDAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2N2YyNjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ODEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm1hdHJvc2thbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thZGVtdXguaHRtbCIgdGl0bGU9Im1hdHJvc2thZGVtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FwYXJzZS5odG1sIiB0aXRsZT0ibWF0cm9za2FwYXJzZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4LnRvcF9vZl9wYWdlIj48L2E+bWF0cm9za2FtdXg8L3NwYW4+PC9oMj4KLTxwPm1hdHJvc2thbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwjR3N0TWF0cm9za2FNdXgtLXdyaXRpbmctYXBwIiB0aXRsZT0iVGhlIOKAnHdyaXRpbmctYXBw4oCdIHByb3BlcnR5Ij53cml0aW5nLWFwcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCNHc3RNYXRyb3NrYU11eC0tdmVyc2lvbiIgdGl0bGU9IlRoZSDigJx2ZXJzaW9u4oCdIHByb3BlcnR5Ij52ZXJzaW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCNHc3RNYXRyb3NrYU11eC0tbWluLWluZGV4LWludGVydmFsIiB0aXRsZT0iVGhlIOKAnG1pbi1pbmRleC1pbnRlcnZhbOKAnSBwcm9wZXJ0eSI+bWluLWluZGV4LWludGVydmFsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwjR3N0TWF0cm9za2FNdXgtLXN0cmVhbWFibGUiIHRpdGxlPSJUaGUg4oCcc3RyZWFtYWJsZeKAnSBwcm9wZXJ0eSI+c3RyZWFtYWJsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwjR3N0TWF0cm9za2FNdXgtLXRpbWVjb2Rlc2NhbGUiIHRpdGxlPSJUaGUg4oCcdGltZWNvZGVzY2FsZeKAnSBwcm9wZXJ0eSI+dGltZWNvZGVzY2FsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TWF0cm9za2FNdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwjR3N0TWF0cm9za2FNdXgtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE1hdHJvc2thTXV4Ij5Hc3RNYXRyb3NrYU11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNYXRyb3NrYU11eAotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCNHc3RXZWJNTXV4Ij5Hc3RXZWJNTXV4PC9hPgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RNYXRyb3NrYU11eCBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPkdzdFRhZ1NldHRlcjwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciI+R3N0VG9jU2V0dGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5tYXRyb3NrYW11eCBtdXhlcyBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtcyBpbnRvIGEgTWF0cm9za2EgZmlsZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODYuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49Lzwvc3Bhbj5wYXRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+dG88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj5tcDMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG1wZWdhdWRpb3BhcnNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtYXRyb3NrYW11eCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5ta3YgIGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PS88L3NwYW4+cGF0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPnRvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+dGhlb3JhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGhlb3JhcGFyc2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIG11eGVzIGFuIE1QMyBmaWxlIGFuZCBhIE9nZyBUaGVvcmEgdmlkZW8gaW50byBhIE1hdHJvc2thIGZpbGUuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBhdWRpb3Rlc3RzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtYXRyb3NrYW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bWthPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgbXV4ZXMgYSA0NDBIeiBzaW5lIHdhdmUgZW5jb2RlZCB3aXRoIHRoZSBWb3JiaXMgY29kZWMgaW50byBhIE1hdHJvc2thIGZpbGUuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODYuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1hdHJvc2thLmh0bWwjcGx1Z2luLW1hdHJvc2thIj5tYXRyb3NrYTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBtYWludGFpbmVycyAmbHQ7Z3N0cmVhbWVyLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODYuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsgMSwgMyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsgMiwgNCB9LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3LCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFjMywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1lYWMzLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWR0cywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC12b3JiaXMsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtZmxhYywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1vcHVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1zcGVleCwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgVTgsIFMxNkJFLCBTMTZMRSwgUzI0QkUsIFMyNExFLCBTMzJCRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC10dGEsIHdpZHRoPShpbnQpeyA4LCAxNiwgMjQgfSwgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcG4tcmVhbGF1ZGlvLCByYXZlcnNpb249KGludCl7IDEsIDIsIDggfSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC13bWEsIHdtYXZlcnNpb249KGludClbIDEsIDMgXSwgYmxvY2tfYWxpZ249KGludClbIDAsIDY1NTM1IF0sIGJpdHJhdGU9KGludClbIDAsIDUyNDI4OCBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFsYXcsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylkdmksIGJsb2NrX2FsaWduPShpbnQpWyA2NCwgODE5MiBdLCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpWyA4MDAwLCA5NjAwMCBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZzcyNiwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3VidGl0bGVfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnN1YnRpdGxlL3gta2F0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHRleHQveC1yYXcsIGZvcm1hdD0oc3RyaW5nKXV0Zjg8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXNzYTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtYXNzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC11c2Y8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBzdWJwaWN0dXJlL3gtZHZkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1zdWJ0aXRsZS11bmtub3duPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7IDEsIDIsIDQgfSwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYXZjLCBhbGlnbm1lbnQ9KHN0cmluZylhdSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWh2YzEsIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kaXZ4LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1odWZmeXV2LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kdiwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2Mywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbXNtcGVnLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UvanBlZywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdGhlb3JhPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kaXJhYywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcG4tcmVhbHZpZGVvLCBybXZlcnNpb249KGludClbIDEsIDQgXSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA4LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC12cDksIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBZVVkyLCBJNDIwLCBZVjEyLCBVWVZZLCBBWVVWLCBHUkFZOCwgQkdSLCBSR0IgfSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcHJvcmVzLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC13bXYsIHdtdnZlcnNpb249KGludClbIDEsIDMgXSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1tYXRyb3NrYTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbWF0cm9za2EtM2Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LW1hdHJvc2thPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXgub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1hdHJvc2thTXV4LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TWF0cm9za2FNdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RNYXRyb3NrYU11eDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXgucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1hdHJvc2thTXV4LS13cml0aW5nLWFwcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHdyaXRpbmctYXBw4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx3cml0aW5nLWFwcOKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBuYW1lIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIG1hdHJvc2thIGZpbGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1hdHJvc2thTXV4LS12ZXJzaW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdmVyc2lvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdmVyc2lvbuKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhpcyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGF0IE1hdHJvc2thIGZlYXR1cmVzIGNhbiBiZSB1c2VkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzEsMl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAyPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNYXRyb3NrYU11eC0tbWluLWluZGV4LWludGVydmFsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWluLWluZGV4LWludGVydmFs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtaW4taW5kZXgtaW50ZXJ2YWzigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QW4gaW5kZXggZW50cnkgaXMgY3JlYXRlZCBldmVyeSBzbyBtYW55IG5hbm9zZWNvbmRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1hdHJvc2thTXV4LS1zdHJlYW1hYmxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RyZWFtYWJsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RyZWFtYWJsZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgdG8gYmUgc3RyZWFtZWQgYW5kIGhlbmNlIG5vIGluZGV4ZXMgd3JpdHRlbiBvciBkdXJhdGlvbiB3cml0dGVuLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TWF0cm9za2FNdXgtLXRpbWVjb2Rlc2NhbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aW1lY29kZXNjYWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aW1lY29kZXNjYWxl4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZWNvZGVTY2FsZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgUmF3IFRpbWVjb2RlIG9mIGEgQmxvY2suPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSwxMDAwMDAwMDAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDAwMDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OTM1NmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bWF0cm9za2FwYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sIiB0aXRsZT0ibWF0cm9za2FtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwiIHRpdGxlPSJtajJtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FwYXJzZS50b3Bfb2ZfcGFnZSI+PC9hPm1hdHJvc2thcGFyc2U8L3NwYW4+PC9oMj4KLTxwPm1hdHJvc2thcGFyc2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0TWF0cm9za2FQYXJzZSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbCNHc3RNYXRyb3NrYVBhcnNlLXN0cnVjdCIgdGl0bGU9IkdzdE1hdHJvc2thUGFyc2UiPkdzdE1hdHJvc2thUGFyc2U8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNYXRyb3NrYVBhcnNlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+bWF0cm9za2FwYXJzZSBwYXJzZWVzIGEgTWF0cm9za2EgZmlsZSBpbnRvIHRoZSBkaWZmZXJlbnQgY29udGFpbmVkIHN0cmVhbXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg3LjYuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PS88L3NwYW4+cGF0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPnRvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+bWt2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtYXRyb3NrYXBhcnNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b2F1ZGlvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHBhcnNlZXMgYSBNYXRyb3NrYSBmaWxlIGFuZCBvdXRwdXRzIHRoZSBjb250YWluZWQgVm9yYmlzIGF1ZGlvLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg3LjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tYXRyb3NrYS5odG1sI3BsdWdpbi1tYXRyb3NrYSI+bWF0cm9za2E8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgbWFpbnRhaW5lcnMgJmx0O2dzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BhcnNlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi44Ny42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1tYXRyb3NrYTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtbWF0cm9za2E8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LW1hdHJvc2thLTNkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vd2VibTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3dlYm08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtbWF0cm9za2E8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LW1hdHJvc2thPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1tYXRyb3NrYS0zZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3dlYm08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby93ZWJtPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNYXRyb3NrYVBhcnNlLXN0cnVjdCI+PC9hPjxoMz5Hc3RNYXRyb3NrYVBhcnNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0TWF0cm9za2FQYXJzZSBHc3RNYXRyb3NrYVBhcnNlOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyMzg1Zi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MjIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm1qMm11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYXBhcnNlLmh0bWwiIHRpdGxlPSJtYXRyb3NrYXBhcnNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sIiB0aXRsZT0ibW9ub3Njb3BlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC50b3Bfb2ZfcGFnZSI+PC9hPm1qMm11eDwvc3Bhbj48L2gyPgotPHA+bWoybXV4IOKAlCBNdXhlciBmb3IgTW90aW9uIEpQRUctMjAwMCAoLm1qMikgZmlsZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRVE11eER0c01ldGhvZHM8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCNHc3RNSjJNdXgtLWR0cy1tZXRob2QiIHRpdGxlPSJUaGUg4oCcZHRzLW1ldGhvZOKAnSBwcm9wZXJ0eSI+ZHRzLW1ldGhvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCNHc3RNSjJNdXgtLWZhc3RzdGFydCIgdGl0bGU9IlRoZSDigJxmYXN0c3RhcnTigJ0gcHJvcGVydHkiPmZhc3RzdGFydDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tZmFzdHN0YXJ0LWZpbGUiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gcHJvcGVydHkiPmZhc3RzdGFydC1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tZnJhZ21lbnQtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gcHJvcGVydHkiPmZyYWdtZW50LWR1cmF0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1tb292LXJlY292ZXJ5LWZpbGUiIHRpdGxlPSJUaGUg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdIHByb3BlcnR5Ij5tb292LXJlY292ZXJ5LWZpbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1tb3ZpZS10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5Ij5tb3ZpZS10aW1lc2NhbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1wcmVzZW50YXRpb24tdGltZSIgdGl0bGU9IlRoZSDigJxwcmVzZW50YXRpb24tdGltZeKAnSBwcm9wZXJ0eSI+cHJlc2VudGF0aW9uLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1zdHJlYW1hYmxlIiB0aXRsZT0iVGhlIOKAnHN0cmVhbWFibGXigJ0gcHJvcGVydHkiPnN0cmVhbWFibGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS10cmFrLXRpbWVzY2FsZSIgdGl0bGU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+dHJhay10aW1lc2NhbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1yZXNlcnZlZC1ieXRlcy1wZXItc2VjIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gcHJvcGVydHkiPnJlc2VydmVkLWJ5dGVzLXBlci1zZWM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tcmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZ+KAnSBwcm9wZXJ0eSI+cmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1tYXgtZHVyYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tcmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSBwcm9wZXJ0eSI+cmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RNSjJNdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+wqA8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC1zdHJ1Y3QiIHRpdGxlPSJHc3RNSjJNdXgiPkdzdE1KMk11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TUoyTXV4Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RNSjJNdXggaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ij5Hc3RUYWdTZXR0ZXI8L2E+LCAgR3N0VGFnWG1wV3JpdGVyIGFuZCAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFByZXNldC5odG1sI0dzdFByZXNldC1zdHJ1Y3QiPkdzdFByZXNldDwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBtZXJnZXMgc3RyZWFtcyAoYXVkaW8gYW5kIHZpZGVvKSBpbnRvIE1KMiAoLm1qMikgZmlsZXMuPC9wPgotPHA+VGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIGludGVuZHMgdG8gZXhwbGFpbiB3aHkgdmFyaW91cyBzaW1pbGFyIG11eGVycwotYXJlIHByZXNlbnQgaW4gdGhpcyBwbHVnaW4uPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL3Jlc291cmNlcy9xdGZpbGVmb3JtYXQucGRmIiB0YXJnZXQ9Il90b3AiPgotUXVpY2tUaW1lIGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb248L2E+IHNlcnZlZCBhcyBiYXNpcyBmb3IgdGhlIE1QNCBmaWxlCi1mb3JtYXQgc3BlY2lmaWNhdGlvbiAobXA0bXV4KSwgYW5kIGFzIHN1Y2ggdGhlIFF1aWNrVGltZSBmaWxlIHN0cnVjdHVyZSBpcwotbmVhcmx5IGlkZW50aWNhbCB0byB0aGUgc28tY2FsbGVkIElTTyBCYXNlIE1lZGlhIGZpbGUgZm9ybWF0IGRlZmluZWQgaW4KLUlTTyAxNDQ5Ni0xMiAoZXhjZXB0IGZvciBzb21lIG1lZGlhIHNwZWNpZmljIHBhcnRzKS4KLUluIHR1cm4sIHRoZSBsYXR0ZXIgSVNPIEJhc2UgTWVkaWEgZm9ybWF0IHdhcyBmdXJ0aGVyIHNwZWNpYWxpemVkIGFzIGEKLU1vdGlvbiBKUEVHLTIwMDAgZmlsZSBmb3JtYXQgaW4gSVNPIDE1NDQ0LTMgKG1qMm11eCkKLWFuZCBpbiB2YXJpb3VzIDNHUFAoMikgc3BlY3MgKDNncHBtdXgpLgotVGhlIGZyYWdtZW50ZWQgZmlsZSBmZWF0dXJlcyBkZWZpbmVkIChvbmx5KSBpbiBJU08gQmFzZSBNZWRpYSBhcmUgdXNlZCBieQotSVNNViBmaWxlcyBtYWtpbmcgdXAgKGEuby4pIFNtb290aCBTdHJlYW1pbmcgKGlzbWxtdXgpLjwvcD4KLTxwPkEgZmV3IHByb3BlcnRpZXMgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS1tb3ZpZS10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbW92aWUtdGltZXNjYWxl4oCdPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwjR3N0TUoyTXV4LS10cmFrLXRpbWVzY2FsZSIgdGl0bGU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHRyYWstdGltZXNjYWxl4oCdPC9zcGFuPjwvYT4pCi1hbGxvdyBhZGp1c3Rpbmcgc29tZSB0ZWNobmljYWwgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGluIChyYXJlKQotY2FzZXMgdG8gcmVzb2x2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBzb21lIHNpdHVhdGlvbnMuPC9wPgotPHA+U29tZSBvdGhlciBwcm9wZXJ0aWVzIGluZmx1ZW5jZSB0aGUgcmVzdWx0IG1vcmUgZnVuZGFtZW50YWxseS4KLUEgdHlwaWNhbCBtb3YvbXA0IGZpbGUncyBtZXRhZGF0YSAoYWthIG1vb3YpIGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKLXNvbWV3aGF0IGNvbnRyYXJ5IHRvIHRoaXMgdXN1YWxseSBiZWluZyBjYWxsZWQgInRoZSBoZWFkZXIiLiBIb3dldmVyLCBhCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tZmFzdHN0YXJ0IiB0aXRsZT0iVGhlIOKAnGZhc3RzdGFydOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGZhc3RzdGFydOKAnTwvc3Bhbj48L2E+IGZpbGUgd2lsbCAod2l0aCBzb21lIGVmZm9ydCkgYXJyYW5nZSB0aGlzIHRvIGJlIGxvY2F0ZWQKLW5lYXIgc3RhcnQgb2YgdGhlIGZpbGUsIHdoaWNoIHRoZW4gYWxsb3dzIGl0IGUuZy4gdG8gYmUgcGxheWVkIHdoaWxlCi1kb3dubG9hZGluZy4gQWx0ZXJuYXRpdmVseSwgcmF0aGVyIHRoYW4gaGF2aW5nIG9uZSBjaHVuayBvZiBtZXRhZGF0YSBhdCBzdGFydAotKG9yIGVuZCksIHRoZXJlIGNhbiBiZSBzb21lIG1ldGFkYXRhIGF0IHN0YXJ0IGFuZCBtb3N0IG9mIHRoZSBvdGhlciBkYXRhIGNhbgotYmUgc3ByZWFkIG91dCBpbnRvIGZyYWdtZW50cyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tZnJhZ21lbnQtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxmcmFnbWVudC1kdXJhdGlvbuKAnTwvc3Bhbj48L2E+LiBJZiBzdWNoCi1mcmFnbWVudGVkIGxheW91dCBpcyBpbnRlbmRlZCBmb3Igc3RyZWFtaW5nIHB1cnBvc2VzLCB0aGVuCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sI0dzdE1KMk11eC0tc3RyZWFtYWJsZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcc3RyZWFtYWJsZeKAnTwvc3Bhbj48L2E+IGFsbG93cyBmb3JlZ29pbmcgdG8gYWRkIGluZGV4IG1ldGFkYXRhIChhdCB0aGUgZW5kIG9mCi1maWxlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODguOC43Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2NGwyc3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBqcDJrZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtajJtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tajI8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLVJlY29yZHMgYSB2aWRlbyBzdHJlYW0gY2FwdHVyZWQgZnJvbSBhIHY0bDIgZGV2aWNlLCBlbmNvZGVzIGl0IGludG8gSlBFRy0yMDAwCi1hbmQgbXV4ZXMgaXQgaW50byBhbiBtajIgZmlsZS4KLTwvZGl2PgotPHA+RG9jdW1lbnRhdGlvbiBsYXN0IHJldmlld2VkIG9uIDIwMTEtMDQtMjE8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg4LjguOS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pc29tcDQuaHRtbCNwbHVnaW4taXNvbXA0Ij5pc29tcDQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaGlhZ28gU291c2EgU2FudG9zICZsdDt0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5iciZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuODguOC45LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIFMxNkJFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW9fJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmltYWdlL3gtajJjLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UveC1qcGMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL21qMjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXgub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC1zdHJ1Y3QiPjwvYT48aDM+R3N0TUoyTXV4PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj50eXBlZGVmIHN0cnVjdCBfR3N0TUoyTXV4IEdzdE1KMk11eDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNSjJNdXgtLWR0cy1tZXRob2QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkdHMtbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkdHMtbWV0aG9k4oCdICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFFUTXV4RHRzTWV0aG9kczwvc3Bhbj48L3ByZT4KLTxwPk1ldGhvZCB0byBkZXRlcm1pbmUgRFRTIHRpbWUgKERFUFJFQ0FURUQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiByZW9yZGVyPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNSjJNdXgtLWZhc3RzdGFydCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZhc3RzdGFydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmFzdHN0YXJ04oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiB0aGUgZmlsZSBzaG91bGQgYmUgZm9ybWF0dGVkIGZvciBmYXN0c3RhcnQgKGhlYWRlcnMgZmlyc3QpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TUoyTXV4LS1mYXN0c3RhcnQtZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZhc3RzdGFydC1maWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmYXN0c3RhcnQtZmlsZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdGVtcG9yYXJpbHkgdG8gc3RvcmUgZGF0YSBmcm9tIHRoZSBzdHJlYW0gd2hlbiBjcmVhdGluZyBhIGZhc3RzdGFydCBmaWxlLiBJZiBudWxsIGEgZmlsZXBhdGggd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC0tZnJhZ21lbnQtZHVyYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmcmFnbWVudC1kdXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5GcmFnbWVudCBkdXJhdGlvbnMgaW4gbXMgKHByb2R1Y2UgYSBmcmFnbWVudGVkIGZpbGUgaWYgJmd0OyAwKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TUoyTXV4LS1tb292LXJlY292ZXJ5LWZpbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb292LXJlY292ZXJ5LWZpbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+RmlsZSB0byBiZSB1c2VkIHRvIHN0b3JlIGRhdGEgZm9yIG1vb3YgYXRvbSBtYWtpbmcgbW92aWUgZmlsZSByZWNvdmVyeSBwb3NzaWJsZSBpbiBjYXNlIG9mIGEgY3Jhc2ggZHVyaW5nIG11eGluZy4gTnVsbCBmb3IgZGlzYWJsZWQuIChFeHBlcmltZW50YWwpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNSjJNdXgtLW1vdmllLXRpbWVzY2FsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vdmllLXRpbWVzY2FsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW92aWUtdGltZXNjYWxl4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaW1lc2NhbGUgdG8gdXNlIGluIHRoZSBtb3ZpZSAodW5pdHMgcGVyIHNlY29uZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAxPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTgwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TUoyTXV4LS1wcmVzZW50YXRpb24tdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByZXNlbnRhdGlvbi10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcmVzZW50YXRpb24tdGltZeKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkNhbGN1bGF0ZSBhbmQgaW5jbHVkZSBwcmVzZW50YXRpb24vY29tcG9zaXRpb24gdGltZSAoaW4gYWRkaXRpb24gdG8gZGVjb2RpbmcgdGltZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC0tc3RyZWFtYWJsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0cmVhbWFibGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0cmVhbWFibGXigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi4gKERFUFJFQ0FURUQsIG9ubHkgdmFsaWQgZm9yIGZyYWdtZW50ZWQgTVA0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC0tdHJhay10aW1lc2NhbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0cmFrLXRpbWVzY2FsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdHJhay10aW1lc2NhbGXigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaW1lc2NhbGUgdG8gdXNlIGZvciB0aGUgdHJhY2tzICh1bml0cyBwZXIgc2Vjb25kLCAwIGlzIGF1dG9tYXRpYykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TXVsdGlwbGllciBmb3IgY29udmVydGluZyByZXNlcnZlZC1tYXgtZHVyYXRpb24gaW50byBieXRlcyBvZiBoZWFkZXIgdG8gcmVzZXJ2ZSwgcGVyIHNlY29uZCwgcGVyIHRyYWNrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTAwMDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1NTA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC0tcmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5SZXBvcnRzIHRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgcmVtYWluaW5nIG1vb3YgaGVhZGVyIHNwYWNlIHJlc2VydmVkIHVzaW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1KMk11eC0tcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXNlcnZlZC1tYXgtZHVyYXRpb27igJ0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGVuIHNldCB0byBhIHZhbHVlICZndDsgMCwgcmVzZXJ2ZXMgc3BhY2UgZm9yIGluZGV4IHRhYmxlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxODQ0Njc0NDA3MzcwOTU1MTYxNTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TUoyTXV4LS1yZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gdXNlZCB3aXRoIHJlc2VydmVkLW1heC1kdXJhdGlvbiwgcGVyaW9kaWNhbGx5IHVwZGF0ZXMgdGhlIGluZGV4IHRhYmxlcyB3aXRoIGluZm9ybWF0aW9uIG11eGVkIHNvIGZhci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTg0NDY3NDQwNzM3MDk1NTE2MTU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjc0NGYzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bW9ub3Njb3BlOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sIiB0aXRsZT0ibWoybXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sIiB0aXRsZT0ibXA0bXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tajJtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbW9ub3Njb3BlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS50b3Bfb2ZfcGFnZSI+PC9hPm1vbm9zY29wZTwvc3Bhbj48L2gyPgotPHA+bW9ub3Njb3BlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sI0dzdE1vbm9zY29wZSIgdGl0bGU9InN0cnVjdCBHc3RNb25vc2NvcGUiPkdzdE1vbm9zY29wZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5Nb25vc2NvcGUgaXMgYW4gYXVkaW8gdmlzdWFsaXNhdGlvbiBlbGVtZW50LiBJdCBjcmVhdGVzIGEgY29sb3VyZWQKLWN1cnZlIG9mIHRoZSBhdWRpbyBzaWduYWwgbGlrZSBvbiBhbiBvc2NpbGxvc2NvcGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg5LjQuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtb25vc2NvcGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geGltYWdlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg5LjQuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tb25vc2NvcGUuaHRtbCNwbHVnaW4tbW9ub3Njb3BlIj5tb25vc2NvcGU8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SaWNoYXJkIEJvdWx0b24gJmx0O3JpY2hhcmRAdGFydGFydXMub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5WaXN1YWxpemF0aW9uPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjg5LjQuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDgwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpMSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylCR1J4LCB3aWR0aD0oaW50KTI1NiwgaGVpZ2h0PShpbnQpMTI4LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbW9ub3Njb3BlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1vbm9zY29wZSI+PC9hPjxoMz5zdHJ1Y3QgR3N0TW9ub3Njb3BlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TW9ub3Njb3BlIHsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qIHBhZHMgKi8KLSAgR3N0UGFkICAgICAgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAgICAgICpzcmNwYWQ7Ci0KLSAgR3N0QWRhcHRlciAgKmFkYXB0ZXI7Ci0KLSAgZ3VpbnQ2NCAgICAgIG5leHRfdHM7ICAgICAgICAgICAgIC8qIGV4cGVjdGVkIHRpbWVzdGFtcCBvZiB0aGUgbmV4dCBmcmFtZSAqLwotICBndWludDY0ICAgICAgZnJhbWVfZHVyYXRpb247ICAgICAgLyogdmlkZW8gZnJhbWUgZHVyYXRpb24gICAgKi8KLSAgZ2ludCAgICAgICAgIHJhdGU7ICAgICAgICAgICAgICAgIC8qIHNhbXBsZSByYXRlICAgICAgICAgICAgICovCi0gIGd1aW50ICAgICAgICBicHM7ICAgICAgICAgICAgICAgICAvKiBieXRlcyBwZXIgc2FtcGxlICAgICAgICAqLwotICBndWludCAgICAgICAgc3BmOyAgICAgICAgICAgICAgICAgLyogc2FtcGxlcyBwZXIgdmlkZW8gZnJhbWUgKi8KLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLQotICBHc3RTZWdtZW50ICAgc2VnbWVudDsKLQotICAvKiBRb1Mgc3R1ZmYgKi8vKiB3aXRoIExPQ0sgKi8KLSAgZ2RvdWJsZSAgICAgIHByb3BvcnRpb247Ci0gIEdzdENsb2NrVGltZSBlYXJsaWVzdF90aW1lOwotCi0gIC8qIHZpZGVvIHN0YXRlICovCi0gIGdpbnQgICAgICAgICBmcHNfbnVtOwotICBnaW50ICAgICAgICAgZnBzX2Rlbm9tOwotICBnaW50ICAgICAgICAgd2lkdGg7Ci0gIGdpbnQgICAgICAgICBoZWlnaHQ7Ci0gIGd1aW50ICAgICAgICBvdXRzaXplOwotCi0gIC8qIHZpc3VhbGlzYXRpb24gc3RhdGUgKi8KLSAgc3RydWN0IG1vbm9zY29wZV9zdGF0ZSAqdmlzc3RhdGU7Ci19OwotPC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5nb29tPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MTFlYWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDY5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5tcDRtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbW9ub3Njb3BlLmh0bWwiIHRpdGxlPSJtb25vc2NvcGUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UuaHRtbCIgdGl0bGU9Im1wZWdhdWRpb3BhcnNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wZWdhdWRpb3BhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXgudG9wX29mX3BhZ2UiPjwvYT5tcDRtdXg8L3NwYW4+PC9oMj4KLTxwPm1wNG11eCDigJQgTXV4ZXIgZm9yIElTTyBNUEVHLTQgKC5tcDQpIGZpbGVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXgucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UVRNdXhEdHNNZXRob2RzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwjR3N0TVA0TXV4LS1kdHMtbWV0aG9kIiB0aXRsZT0iVGhlIOKAnGR0cy1tZXRob2TigJ0gcHJvcGVydHkiPmR0cy1tZXRob2Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwjR3N0TVA0TXV4LS1mYXN0c3RhcnQiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ04oCdIHByb3BlcnR5Ij5mYXN0c3RhcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLWZhc3RzdGFydC1maWxlIiB0aXRsZT0iVGhlIOKAnGZhc3RzdGFydC1maWxl4oCdIHByb3BlcnR5Ij5mYXN0c3RhcnQtZmlsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLWZyYWdtZW50LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnGZyYWdtZW50LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij5mcmFnbWVudC1kdXJhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tbW9vdi1yZWNvdmVyeS1maWxlIiB0aXRsZT0iVGhlIOKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnSBwcm9wZXJ0eSI+bW9vdi1yZWNvdmVyeS1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tbW92aWUtdGltZXNjYWxlIiB0aXRsZT0iVGhlIOKAnG1vdmllLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+bW92aWUtdGltZXNjYWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tcHJlc2VudGF0aW9uLXRpbWUiIHRpdGxlPSJUaGUg4oCccHJlc2VudGF0aW9uLXRpbWXigJ0gcHJvcGVydHkiPnByZXNlbnRhdGlvbi10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tc3RyZWFtYWJsZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1hYmxl4oCdIHByb3BlcnR5Ij5zdHJlYW1hYmxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tdHJhay10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcdHJhay10aW1lc2NhbGXigJ0gcHJvcGVydHkiPnRyYWstdGltZXNjYWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyIgdGl0bGU9IlRoZSDigJxyZXNlcnZlZC1ieXRlcy1wZXItc2Vj4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1ieXRlcy1wZXItc2VjPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLXJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyIgdGl0bGU9IlRoZSDigJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ0gcHJvcGVydHkiPnJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5odG1sI0dzdE1QNE11eC0tcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnHJlc2VydmVkLW1heC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSI+cmVzZXJ2ZWQtbWF4LWR1cmF0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCIgdGl0bGU9IlRoZSDigJxyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2TigJ0gcHJvcGVydHkiPnJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TVA0TXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPsKgPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCNHc3RNUDRNdXgtc3RydWN0IiB0aXRsZT0iR3N0TVA0TXV4Ij5Hc3RNUDRNdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdE1QNE11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0TVA0TXV4IGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPiwgIEdzdFRhZ1htcFdyaXRlciBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbWVyZ2VzIHN0cmVhbXMgKGF1ZGlvIGFuZCB2aWRlbykgaW50byBJU08gTVBFRy00ICgubXA0KSBmaWxlcy48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGJhY2tncm91bmQgaW50ZW5kcyB0byBleHBsYWluIHdoeSB2YXJpb3VzIHNpbWlsYXIgbXV4ZXJzCi1hcmUgcHJlc2VudCBpbiB0aGlzIHBsdWdpbi48L3A+Ci08cD5UaGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvcmVzb3VyY2VzL3F0ZmlsZWZvcm1hdC5wZGYiIHRhcmdldD0iX3RvcCI+Ci1RdWlja1RpbWUgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbjwvYT4gc2VydmVkIGFzIGJhc2lzIGZvciB0aGUgTVA0IGZpbGUKLWZvcm1hdCBzcGVjaWZpY2F0aW9uIChtcDRtdXgpLCBhbmQgYXMgc3VjaCB0aGUgUXVpY2tUaW1lIGZpbGUgc3RydWN0dXJlIGlzCi1uZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBzby1jYWxsZWQgSVNPIEJhc2UgTWVkaWEgZmlsZSBmb3JtYXQgZGVmaW5lZCBpbgotSVNPIDE0NDk2LTEyIChleGNlcHQgZm9yIHNvbWUgbWVkaWEgc3BlY2lmaWMgcGFydHMpLgotSW4gdHVybiwgdGhlIGxhdHRlciBJU08gQmFzZSBNZWRpYSBmb3JtYXQgd2FzIGZ1cnRoZXIgc3BlY2lhbGl6ZWQgYXMgYQotTW90aW9uIEpQRUctMjAwMCBmaWxlIGZvcm1hdCBpbiBJU08gMTU0NDQtMyAobWoybXV4KQotYW5kIGluIHZhcmlvdXMgM0dQUCgyKSBzcGVjcyAoM2dwcG11eCkuCi1UaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci1JU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuPC9wPgotPHA+QSBmZXcgcHJvcGVydGllcyAoPHNwYW4gY2xhc3M9InR5cGUiPuKAnG1vdmllLXRpbWVzY2FsZeKAnTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJ0eXBlIj7igJx0cmFrLXRpbWVzY2FsZeKAnTwvc3Bhbj4pCi1hbGxvdyBhZGp1c3Rpbmcgc29tZSB0ZWNobmljYWwgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGluIChyYXJlKQotY2FzZXMgdG8gcmVzb2x2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBzb21lIHNpdHVhdGlvbnMuPC9wPgotPHA+U29tZSBvdGhlciBwcm9wZXJ0aWVzIGluZmx1ZW5jZSB0aGUgcmVzdWx0IG1vcmUgZnVuZGFtZW50YWxseS4KLUEgdHlwaWNhbCBtb3YvbXA0IGZpbGUncyBtZXRhZGF0YSAoYWthIG1vb3YpIGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUKLWZpbGUsIHNvbWV3aGF0IGNvbnRyYXJ5IHRvIHRoaXMgdXN1YWxseSBiZWluZyBjYWxsZWQgInRoZSBoZWFkZXIiLgotSG93ZXZlciwgYSA8c3BhbiBjbGFzcz0idHlwZSI+4oCcZmFzdHN0YXJ04oCdPC9zcGFuPiBmaWxlIHdpbGwgKHdpdGggc29tZSBlZmZvcnQpIGFycmFuZ2UgdGhpcyB0bwotYmUgbG9jYXRlZCBuZWFyIHN0YXJ0IG9mIHRoZSBmaWxlLCB3aGljaCB0aGVuIGFsbG93cyBpdCBlLmcuIHRvIGJlIHBsYXllZAotd2hpbGUgZG93bmxvYWRpbmcuIEFsdGVybmF0aXZlbHksIHJhdGhlciB0aGFuIGhhdmluZyBvbmUgY2h1bmsgb2YgbWV0YWRhdGEgYXQKLXN0YXJ0IChvciBlbmQpLCB0aGVyZSBjYW4gYmUgc29tZSBtZXRhZGF0YSBhdCBzdGFydCBhbmQgbW9zdCBvZiB0aGUgb3RoZXIKLWRhdGEgY2FuIGJlIHNwcmVhZCBvdXQgaW50byBmcmFnbWVudHMgb2YgPHNwYW4gY2xhc3M9InR5cGUiPuKAnGZyYWdtZW50LWR1cmF0aW9u4oCdPC9zcGFuPi4KLUlmIHN1Y2ggZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotPHNwYW4gY2xhc3M9InR5cGUiPuKAnHN0cmVhbWFibGXigJ08L3NwYW4+IGFsbG93cyBmb3JlZ29pbmcgdG8gYWRkIGluZGV4IG1ldGFkYXRhIChhdCB0aGUgZW5kIG9mCi1maWxlKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTAuOC43Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBnc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHY0bDJzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHgyNjRlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG1wNG11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj52aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm1wNDwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotUmVjb3JkcyBhIHZpZGVvIHN0cmVhbSBjYXB0dXJlZCBmcm9tIGEgdjRsMiBkZXZpY2UsIGVuY29kZXMgaXQgaW50byBILjI2NAotYW5kIG11eGVzIGl0IGludG8gYW4gbXA0IGZpbGUuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTAuOC44LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNC5odG1sI3BsdWdpbi1pc29tcDQiPmlzb21wNDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRoaWFnbyBTb3VzYSBTYW50b3MgJmx0O3RoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9NdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45MC44LjguMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpWyAxLCAzIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdywgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hYzMsIGNoYW5uZWxzPShpbnQpWyAxLCA2IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhYywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1vcHVzLCBjaGFubmVsLW1hcHBpbmctZmFtaWx5PShpbnQpWyAwLCAyNTUgXSwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zdWJ0aXRsZV8ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dGV4dC94LXJhdywgZm9ybWF0PShzdHJpbmcpdXRmODwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW9fJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kaXZ4LCBkaXZ4dmVyc2lvbj0oaW50KTUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmMsIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1tcDQtcGFydCwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpaXNvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wNG11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LXN0cnVjdCI+PC9hPjxoMz5Hc3RNUDRNdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnR5cGVkZWYgc3RydWN0IF9Hc3RNUDRNdXggR3N0TVA0TXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXgucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1QNE11eC0tZHRzLW1ldGhvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGR0cy1tZXRob2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGR0cy1tZXRob2TigJ0gICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UVRNdXhEdHNNZXRob2RzPC9zcGFuPjwvcHJlPgotPHA+TWV0aG9kIHRvIGRldGVybWluZSBEVFMgdGltZSAoREVQUkVDQVRFRCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IHJlb3JkZXI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1QNE11eC0tZmFzdHN0YXJ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmFzdHN0YXJ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmYXN0c3RhcnTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNUDRNdXgtLWZhc3RzdGFydC1maWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmFzdHN0YXJ0LWZpbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZhc3RzdGFydC1maWxl4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+RmlsZSB0aGF0IHdpbGwgYmUgdXNlZCB0ZW1wb3JhcmlseSB0byBzdG9yZSBkYXRhIGZyb20gdGhlIHN0cmVhbSB3aGVuIGNyZWF0aW5nIGEgZmFzdHN0YXJ0IGZpbGUuIElmIG51bGwgYSBmaWxlcGF0aCB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LS1mcmFnbWVudC1kdXJhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZyYWdtZW50LWR1cmF0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmcmFnbWVudC1kdXJhdGlvbuKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkZyYWdtZW50IGR1cmF0aW9ucyBpbiBtcyAocHJvZHVjZSBhIGZyYWdtZW50ZWQgZmlsZSBpZiAmZ3Q7IDApLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNUDRNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWxlIHRvIGJlIHVzZWQgdG8gc3RvcmUgZGF0YSBmb3IgbW9vdiBhdG9tIG1ha2luZyBtb3ZpZSBmaWxlIHJlY292ZXJ5IHBvc3NpYmxlIGluIGNhc2Ugb2YgYSBjcmFzaCBkdXJpbmcgbXV4aW5nLiBOdWxsIGZvciBkaXNhYmxlZC4gKEV4cGVyaW1lbnRhbCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1QNE11eC0tbW92aWUtdGltZXNjYWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW92aWUtdGltZXNjYWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb3ZpZS10aW1lc2NhbGXigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRpbWVzY2FsZSB0byB1c2UgaW4gdGhlIG1vdmllICh1bml0cyBwZXIgc2Vjb25kKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDE8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxODAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNUDRNdXgtLXByZXNlbnRhdGlvbi10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJlc2VudGF0aW9uLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHByZXNlbnRhdGlvbi10aW1l4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Q2FsY3VsYXRlIGFuZCBpbmNsdWRlIHByZXNlbnRhdGlvbi9jb21wb3NpdGlvbiB0aW1lIChpbiBhZGRpdGlvbiB0byBkZWNvZGluZyB0aW1lKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LS1zdHJlYW1hYmxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RyZWFtYWJsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RyZWFtYWJsZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgdG8gYmUgc3RyZWFtZWQgYW5kIGhlbmNlIG5vIGluZGV4ZXMgd3JpdHRlbiBvciBkdXJhdGlvbiB3cml0dGVuLiAoREVQUkVDQVRFRCwgb25seSB2YWxpZCBmb3IgZnJhZ21lbnRlZCBNUDQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LS10cmFrLXRpbWVzY2FsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRyYWstdGltZXNjYWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0cmFrLXRpbWVzY2FsZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRpbWVzY2FsZSB0byB1c2UgZm9yIHRoZSB0cmFja3MgKHVuaXRzIHBlciBzZWNvbmQsIDAgaXMgYXV0b21hdGljKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LS1yZXNlcnZlZC1ieXRlcy1wZXItc2VjIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlY+KAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIHJlc2VydmVkLW1heC1kdXJhdGlvbiBpbnRvIGJ5dGVzIG9mIGhlYWRlciB0byByZXNlcnZlLCBwZXIgc2Vjb25kLCBwZXIgdHJhY2suPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxMDAwMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDU1MDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LS1yZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZ+KAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlJlcG9ydHMgdGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiByZW1haW5pbmcgbW9vdiBoZWFkZXIgc3BhY2UgcmVzZXJ2ZWQgdXNpbmcgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TVA0TXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1tYXgtZHVyYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLW1heC1kdXJhdGlvbuKAnSAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gc2V0IHRvIGEgdmFsdWUgJmd0OyAwLCByZXNlcnZlcyBzcGFjZSBmb3IgaW5kZXggdGFibGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE4NDQ2NzQ0MDczNzA5NTUxNjE1PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNUDRNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9k4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hlbiB1c2VkIHdpdGggcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLCBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgaW5kZXggdGFibGVzIHdpdGggaW5mb3JtYXRpb24gbXV4ZWQgc28gZmFyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxODQ0Njc0NDA3MzcwOTU1MTYxNTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODQ2OWFiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5tcGVnYXVkaW9wYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCIgdGl0bGU9Im1wNG11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5odG1sIiB0aXRsZT0ibXVsYXdkZWMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wZWdhdWRpb3BhcnNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXA0bXV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UudG9wX29mX3BhZ2UiPjwvYT5tcGVnYXVkaW9wYXJzZTwvc3Bhbj48L2gyPgotPHA+bXBlZ2F1ZGlvcGFyc2Ug4oCUIE1QRUcgYXVkaW8gcGFyc2VyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdE1wZWdBdWRpb1BhcnNlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wZWdhdWRpb3BhcnNlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5odG1sI0dzdE1wZWdBdWRpb1BhcnNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RNcGVnQXVkaW9QYXJzZSI+R3N0TXBlZ0F1ZGlvUGFyc2U8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVBhcnNlLmh0bWwjR3N0QmFzZVBhcnNlLXN0cnVjdCI+R3N0QmFzZVBhcnNlPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNcGVnQXVkaW9QYXJzZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5QYXJzZXMgYW5kIGZyYW1lcyBtcGVnMSBhdWRpbyBzdHJlYW1zLiBQcm92aWRlcyBzZWVraW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45MS42LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tcDMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG1wZWdhdWRpb3BhcnNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtYWQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45MS42LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9wYXJzZXJzLmh0bWwjcGx1Z2luLWF1ZGlvcGFyc2VycyI+YXVkaW9wYXJzZXJzPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SmFuIFNjaG1pZHQgJmx0O3RoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20mZ3Q7LE1hcmsgTmF1d2VsYWVydHMgJmx0O21hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXJzZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTEuNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsgMSwgMyBdLCBtcGVnYXVkaW92ZXJzaW9uPShpbnQpWyAxLCAzIF0sIHJhdGU9KGludClbIDgwMDAsIDQ4MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHBhcnNlZD0oYm9vbGVhbil0cnVlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE1wZWdBdWRpb1BhcnNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TXBlZ0F1ZGlvUGFyc2U8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RNcGVnQXVkaW9QYXJzZTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgR3N0TXBlZ0F1ZGlvUGFyc2Ugb2JqZWN0PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwjR3N0QW1yUGFyc2UiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBbXJQYXJzZTwvc3Bhbj48L2E+LCA8c3BhbiBjbGFzcz0idHlwZSI+R3N0QUFDUGFyc2U8L3NwYW4+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2U4ZWNlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5tdWxhd2RlYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5odG1sIiB0aXRsZT0ibXBlZ2F1ZGlvcGFyc2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMuaHRtbCIgdGl0bGU9Im11bGF3ZW5jIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZGVjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1wZWdhdWRpb3BhcnNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMudG9wX29mX3BhZ2UiPjwvYT5tdWxhd2RlYzwvc3Bhbj48L2gyPgotPHA+bXVsYXdkZWM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0TXVMYXdEZWMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZGVjLmh0bWwjR3N0TXVMYXdEZWMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE11TGF3RGVjIj5Hc3RNdUxhd0RlYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZGVjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZGVjb2Rlci5odG1sI0dzdEF1ZGlvRGVjb2Rlci1zdHJ1Y3QiPkdzdEF1ZGlvRGVjb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TXVMYXdEZWMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGRlY29kZXMgbXVsYXcgYXVkaW8uIE11bGF3IGNvZGluZyBpcyBhbHNvIGtub3duIGFzIEcuNzExLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTIuNi4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwjcGx1Z2luLW11bGF3Ij5tdWxhdzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZWNvZGVyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjkyLjYuMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LW11bGF3LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZGVjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVMYXdEZWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RNdUxhd0RlYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE11TGF3RGVjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlODlmZTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm11bGF3ZW5jOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZGVjLmh0bWwiIHRpdGxlPSJtdWxhd2RlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwiIHRpdGxlPSJtdWx0aWZpbGVzaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMudG9wX29mX3BhZ2UiPjwvYT5tdWxhd2VuYzwvc3Bhbj48L2gyPgotPHA+bXVsYXdlbmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0TXVMYXdFbmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLmh0bWwjR3N0TXVMYXdFbmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE11TGF3RW5jIj5Hc3RNdUxhd0VuYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZW5jb2Rlci5odG1sI0dzdEF1ZGlvRW5jb2Rlci1zdHJ1Y3QiPkdzdEF1ZGlvRW5jb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TXVMYXdFbmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0TXVMYXdFbmMgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBlbmNvZGUgbXVsYXcgYXVkaW8uIE11bGF3IGNvZGluZyBpcyBhbHNvIGtub3duIGFzIEcuNzExLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTMuNy4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwjcGx1Z2luLW11bGF3Ij5tdWxhdzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9FbmNvZGVyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjkzLjcuMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1tdWxhdywgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVMYXdFbmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RNdUxhd0VuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE11TGF3RW5jOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2Y5MmFkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm11bHRpZmlsZXNpbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdlbmMuaHRtbCIgdGl0bGU9Im11bGF3ZW5jIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sIiB0aXRsZT0ibXVsdGlmaWxlc3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsudG9wX29mX3BhZ2UiPjwvYT5tdWx0aWZpbGVzaW5rPC9zcGFuPjwvaDI+Ci08cD5tdWx0aWZpbGVzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstLWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5Ij5sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstLWluZGV4IiB0aXRsZT0iVGhlIOKAnGluZGV44oCdIHByb3BlcnR5Ij5pbmRleDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmtOZXh0IiB0aXRsZT0iZW51bSBHc3RNdWx0aUZpbGVTaW5rTmV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpRmlsZVNpbmtOZXh0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCNHc3RNdWx0aUZpbGVTaW5rLS1uZXh0LWZpbGUiIHRpdGxlPSJUaGUg4oCcbmV4dC1maWxl4oCdIHByb3BlcnR5Ij5uZXh0LWZpbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmstLXBvc3QtbWVzc2FnZXMiIHRpdGxlPSJUaGUg4oCccG9zdC1tZXNzYWdlc+KAnSBwcm9wZXJ0eSI+cG9zdC1tZXNzYWdlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tbWF4LWZpbGVzIiB0aXRsZT0iVGhlIOKAnG1heC1maWxlc+KAnSBwcm9wZXJ0eSI+bWF4LWZpbGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tbWF4LWZpbGUtc2l6ZSIgdGl0bGU9IlRoZSDigJxtYXgtZmlsZS1zaXpl4oCdIHByb3BlcnR5Ij5tYXgtZmlsZS1zaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCNHc3RNdWx0aUZpbGVTaW5rLS1hZ2dyZWdhdGUtZ29wcyIgdGl0bGU9IlRoZSDigJxhZ2dyZWdhdGUtZ29wc+KAnSBwcm9wZXJ0eSI+YWdncmVnYXRlLWdvcHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCNHc3RNdWx0aUZpbGVTaW5rLS1tYXgtZmlsZS1kdXJhdGlvbiIgdGl0bGU9IlRoZSDigJxtYXgtZmlsZS1kdXJhdGlvbuKAnSBwcm9wZXJ0eSI+bWF4LWZpbGUtZHVyYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdE11bHRpRmlsZVNpbmsiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TXVsdGlGaWxlU2luayI+R3N0TXVsdGlGaWxlU2luazwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmtOZXh0IiB0aXRsZT0iZW51bSBHc3RNdWx0aUZpbGVTaW5rTmV4dCI+R3N0TXVsdGlGaWxlU2lua05leHQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TXVsdGlGaWxlU2luawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPldyaXRlIGluY29taW5nIGRhdGEgdG8gYSBzZXJpZXMgb2Ygc2VxdWVudGlhbGx5LW5hbWVkIGZpbGVzLjwvcD4KLTxwPlRoaXMgZWxlbWVudCBpcyB1c3VhbGx5IHVzZWQgd2l0aCBkYXRhIHdoZXJlIGVhY2ggYnVmZmVyIGlzIGFuCi1pbmRlcGVuZGVudCB1bml0IG9mIGRhdGEgaW4gaXRzIG93biByaWdodCAoZS5nLiByYXcgdmlkZW8gYnVmZmVycyBvcgotZW5jb2RlZCBKUEVHIG9yIFBORyBpbWFnZXMpIG9yIHdpdGggc3RyZWFtYWJsZSBjb250YWluZXIgZm9ybWF0cyBzdWNoCi1hcyBNUEVHLVRTIG9yIE1QRUctUFMuPC9wPgotPHA+SXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0aGlzIGVsZW1lbnQgdG8gY3JlYXRlIGluZGVwZW5kZW50bHkgcGxheWFibGUKLW1wNCBmaWxlcywgdXNlIHRoZSBzcGxpdG11eHNpbmsgZWxlbWVudCBmb3IgdGhhdCBpbnN0ZWFkLjwvcD4KLTxwPlRoZSBmaWxlbmFtZSBwcm9wZXJ0eSBzaG91bGQgY29udGFpbiBhIHN0cmluZyB3aXRoIGEgJWQgcGxhY2Vob2xkZXIgdGhhdCB3aWxsCi1iZSBzdWJzdGl0dXRlZCB3aXRoIHRoZSBpbmRleCBmb3IgZWFjaCBmaWxlbmFtZS48L3A+Ci08cD5JZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmh0bWwjR3N0TXVsdGlGaWxlU2luay0tcG9zdC1tZXNzYWdlcyIgdGl0bGU9IlRoZSDigJxwb3N0LW1lc3NhZ2Vz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccG9zdC1tZXNzYWdlc+KAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPlRSVUU8L3NwYW4+PC9hPiwgaXQgc2VuZHMgYW4gYXBwbGljYXRpb24KLW1lc3NhZ2UgbmFtZWQ8L3A+Ci08Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4iR3N0TXVsdGlGaWxlU2luayI8L2NvZGU+IGFmdGVyIHdyaXRpbmcgZWFjaAotPHA+YnVmZmVyLjwvcD4KLTxwPlRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIHRoZXNlIGZpZWxkczo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICoKLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ImZpbGVuYW1lIjwvY29kZT46Ci0gIHRoZSBmaWxlbmFtZSB3aGVyZSB0aGUgYnVmZmVyIHdhcyB3cml0dGVuLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ImluZGV4IjwvY29kZT46Ci0gIHRoZSBpbmRleCBvZiB0aGUgYnVmZmVyLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4idGltZXN0YW1wIjwvY29kZT46Ci0gIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlci4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InN0cmVhbS10aW1lIjwvY29kZT46Ci0gIHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVyLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4icnVubmluZy10aW1lIjwvY29kZT46Ci0gIHRoZSBydW5uaW5nX3RpbWUgb2YgdGhlIGJ1ZmZlci4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ImR1cmF0aW9uIjwvY29kZT46Ci0gIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+Im9mZnNldCI8L2NvZGU+OgotICB0aGUgb2Zmc2V0IG9mIHRoZSBidWZmZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIG1lc3NhZ2UuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4ib2Zmc2V0LWVuZCI8L2NvZGU+OgotICB0aGUgb2Zmc2V0LWVuZCBvZiB0aGUgYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBtZXNzYWdlLgotICA8L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTQuNy4xMSI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11bHRpZmlsZXNpbmsKLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdWx0aWZpbGVzaW5rIHBvc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5tZXNzYWdlczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50cnVlPC9zcGFuPiBmaWxlbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2ZyYW1lJWQmcXVvdDs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTQuNy4xMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aWZpbGUuaHRtbCNwbHVnaW4tbXVsdGlmaWxlIj5tdWx0aWZpbGU8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EYXZpZCBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9GaWxlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjk0LjcuMTIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TXVsdGlGaWxlU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE11bHRpRmlsZVNpbms7PC9wcmU+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpRmlsZVNpbmtOZXh0Ij48L2E+PGgzPmVudW0gR3N0TXVsdGlGaWxlU2lua05leHQ8L2gzPgotPHA+RmlsZSBzcGxpdHRpbmcgbW9kZXMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU2lua05leHQubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19uYW1lIj4KLTxjb2wgY2xhc3M9ImVudW1fbWVtYmVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9ImVudW1fbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTVVMVEktRklMRS1TSU5LLU5FWFQtQlVGRkVSOkNBUFMiPjwvYT5HU1RfTVVMVElfRklMRV9TSU5LX05FWFRfQlVGRkVSPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk5ldyBmaWxlIGZvciBlYWNoIGJ1ZmZlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTVVMVEktRklMRS1TSU5LLU5FWFQtRElTQ09OVDpDQVBTIj48L2E+R1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX0RJU0NPTlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TmV3IGZpbGUgYWZ0ZXIgZWFjaCBkaXNjb250aW51aXR5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NVUxUSS1GSUxFLVNJTkstTkVYVC1LRVktRlJBTUU6Q0FQUyI+PC9hPkdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9LRVlfRlJBTUU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+TmV3IGZpbGUgYXQgZWFjaCBrZXkgZnJhbWUKLSAoVXNlZnVsIGZvciBNUEVHLVRTIHNlZ21lbnRpbmcpPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1NVUxUSS1GSUxFLVNJTkstTkVYVC1LRVktVU5JVC1FVkVOVDpDQVBTIj48L2E+R1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX0tFWV9VTklUX0VWRU5UPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPk5ldyBmaWxlIGFmdGVyIGEgZm9yY2Uga2V5IHVuaXQKLSBldmVudDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtTVVMVEktRklMRS1TSU5LLU5FWFQtTUFYLVNJWkU6Q0FQUyI+PC9hPkdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9NQVhfU0laRTwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5OZXcgZmlsZSB3aGVuIHRoZSBjb25maWd1cmVkIG1heGltdW0gZmlsZQotIHNpemUgd291bGQgYmUgZXhjZWVkZWQgd2l0aCB0aGUgbmV4dCBidWZmZXIgb3IgYnVmZmVyIGxpc3Q8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULU1VTFRJLUZJTEUtU0lOSy1ORVhULU1BWC1EVVJBVElPTjpDQVBTIj48L2E+R1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX01BWF9EVVJBVElPTjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5OZXcgZmlsZSB3aGVuIHRoZSBjb25maWd1cmVkIG1heGltdW0gZHVyYXRpb24KLSB3b3VsZCBiZSBleGNlZWRlZCB3aXRoIHRoZSBuZXh0IGJ1ZmZlciBvciBidWZmZXIgbGlzdDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU2luay0tbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb2NhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9jYXRpb27igJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5Mb2NhdGlvbiBvZiB0aGUgZmlsZSB0byB3cml0ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU2luay0taW5kZXgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpbmRleOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaW5kZXjigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+SW5kZXggdG8gdXNlIHdpdGggbG9jYXRpb24gcHJvcGVydHkgdG8gY3JlYXRlIGZpbGUgbmFtZXMuICBUaGUgaW5kZXggaXMgaW5jcmVtZW50ZWQgYnkgb25lIGZvciBlYWNoIGJ1ZmZlciB3cml0dGVuLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpRmlsZVNpbmstLW5leHQtZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5leHQtZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbmV4dC1maWxl4oCdICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sI0dzdE11bHRpRmlsZVNpbmtOZXh0IiB0aXRsZT0iZW51bSBHc3RNdWx0aUZpbGVTaW5rTmV4dCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpRmlsZVNpbmtOZXh0PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gdG8gc3RhcnQgYSBuZXcgZmlsZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTmV3IGZpbGUgZm9yIGVhY2ggYnVmZmVyPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTaW5rLS1wb3N0LW1lc3NhZ2VzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9zdC1tZXNzYWdlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9zdC1tZXNzYWdlc+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Qb3N0IGEgbWVzc2FnZSBvbiB0aGUgR3N0QnVzIGZvciBlYWNoIGZpbGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTaW5rLS1tYXgtZmlsZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtZmlsZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1maWxlc+KAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdG8ga2VlcCBvbiBkaXNrLiBPbmNlIHRoZSBtYXhpbXVtIGlzIHJlYWNoZWQsIG9sZAotZmlsZXMgc3RhcnQgdG8gYmUgZGVsZXRlZCB0byBtYWtlIHJvb20gZm9yIG5ldyBvbmVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTaW5rLS1tYXgtZmlsZS1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LWZpbGUtc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWZpbGUtc2l6ZeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBmaWxlIHNpemUgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IGZpbGUgaW4gbWF4LXNpemUgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjE0NzQ4MzY0ODwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU2luay0tYWdncmVnYXRlLWdvcHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxhZ2dyZWdhdGUtZ29wc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYWdncmVnYXRlLWdvcHPigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGV0aGVyIHRvIGFnZ3JlZ2F0ZSBjb21wbGV0ZSBHT1BzIGJlZm9yZSBkb2luZyBhbnkgcHJvY2Vzc2luZy4gU2V0IHRoaXMKLXRvIFRSVUUgdG8gbWFrZSBzdXJlIGVhY2ggbmV3IGZpbGUgc3RhcnRzIHdpdGggYSBrZXlmcmFtZS4gVGhpcyByZXF1aXJlcwotdGhlIHVwc3RyZWFtIGVsZW1lbnQgdG8gZmxhZyBidWZmZXJzIGNvbnRhaW5pbmcga2V5IHVuaXRzIGFuZCBkZWx0YQotdW5pdHMgY29ycmVjdGx5LiBBdCBsZWFzdCB0aGUgTVBFRy1QUyBhbmQgTVBFRy1UUyBtdXhlcnMgc2hvdWxkIGJlIGRvaW5nCi10aGlzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU2luay0tbWF4LWZpbGUtZHVyYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtZmlsZS1kdXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWZpbGUtZHVyYXRpb27igJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBmaWxlIHNpemUgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IGZpbGUgaW4gbWF4LXNpemUgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTg0NDY3NDQwNzM3MDk1NTE2MTU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtMS4wZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmlsZVNyYzwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYjkxNDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5tdWx0aWZpbGVzcmM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sIiB0aXRsZT0ibXVsdGlmaWxlc2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIiB0aXRsZT0ibXVsdGlwYXJ0ZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLnRvcF9vZl9wYWdlIj48L2E+bXVsdGlmaWxlc3JjPC9zcGFuPjwvaDI+Ci08cD5tdWx0aWZpbGVzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwjR3N0TXVsdGlGaWxlU3JjLS1jYXBzIiB0aXRsZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiPmNhcHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sI0dzdE11bHRpRmlsZVNyYy0taW5kZXgiIHRpdGxlPSJUaGUg4oCcaW5kZXjigJ0gcHJvcGVydHkiPmluZGV4PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwjR3N0TXVsdGlGaWxlU3JjLS1sb2NhdGlvbiIgdGl0bGU9IlRoZSDigJxsb2NhdGlvbuKAnSBwcm9wZXJ0eSI+bG9jYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwjR3N0TXVsdGlGaWxlU3JjLS1sb29wIiB0aXRsZT0iVGhlIOKAnGxvb3DigJ0gcHJvcGVydHkiPmxvb3A8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sI0dzdE11bHRpRmlsZVNyYy0tc3RhcnQtaW5kZXgiIHRpdGxlPSJUaGUg4oCcc3RhcnQtaW5kZXjigJ0gcHJvcGVydHkiPnN0YXJ0LWluZGV4PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMuaHRtbCNHc3RNdWx0aUZpbGVTcmMtLXN0b3AtaW5kZXgiIHRpdGxlPSJUaGUg4oCcc3RvcC1pbmRleOKAnSBwcm9wZXJ0eSI+c3RvcC1pbmRleDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU3JjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwjR3N0TXVsdGlGaWxlU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RNdWx0aUZpbGVTcmMiPkdzdE11bHRpRmlsZVNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ij5Hc3RCYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiPkdzdFB1c2hTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNdWx0aUZpbGVTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJlYWRzIGJ1ZmZlcnMgZnJvbSBzZXF1ZW50aWFsbHkgbmFtZWQgZmlsZXMuIElmIHVzZWQgdG9nZXRoZXIgd2l0aCBhbiBpbWFnZQotZGVjb2Rlciwgb25lIG5lZWRzIHRvIHVzZSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMuaHRtbCNHc3RNdWx0aUZpbGVTcmMtLWNhcHMiIHRpdGxlPSJUaGUg4oCcY2Fwc+KAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGNhcHPigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBvciBhIGNhcHNmaWx0ZXIKLXRvIGZvcmNlIHRvIGNhcHMgY29udGFpbmluZyBhIGZyYW1lcmF0ZS4gT3RoZXJ3aXNlIGltYWdlIGRlY29kZXJzIHNlbmQgRU9TCi1hZnRlciB0aGUgZmlyc3QgcGljdHVyZS4gV2UgYWxzbyBuZWVkIGEgdmlkZW9yYXRlIGVsZW1lbnQgdG8gc2V0IHRpbWVzdGFtcHMKLW9uIGFsbCBidWZmZXJzIGFmdGVyIHRoZSBmaXJzdCBvbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBmcmFtZXJhdGUuPC9wPgotPHA+RmlsZSBuYW1lcyBhcmUgY3JlYXRlZCBieSByZXBsYWNpbmcgIiVkIiB3aXRoIHRoZSBpbmRleCB1c2luZyA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPnByaW50ZigpPC9jb2RlPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTUuNy40Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IG11bHRpZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2ltZy4lMDRkLnBuZyZxdW90Ozwvc3Bhbj4gaW5kZXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPiBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7aW1hZ2UvcG5nLGZyYW1lcmF0ZT1cKGZyYWN0aW9uXCkxMi8xJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICAgIHBuZ2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb3JhdGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHRoZW9yYWVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gICAgZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtpbWFnZXMub2dnJnF1b3Q7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGNyZWF0ZXMgYSB2aWRlbyBmaWxlICJpbWFnZXMub2dnIiBieSBqb2luaW5nIG11bHRpcGxlIFBORwotZmlsZXMgbmFtZWQgaW1nLjAwMDAucG5nLCBpbWcuMDAwMS5wbmcsIGV0Yy4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45NS43LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwjcGx1Z2luLW11bHRpZmlsZSI+bXVsdGlmaWxlPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9GaWxlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjk1LjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TXVsdGlGaWxlU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TXVsdGlGaWxlU3JjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpRmlsZVNyYy0tY2FwcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNhcHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhcHPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5DYXBzIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTcmMtLWluZGV4Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaW5kZXjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGluZGV44oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkluZGV4IHRvIHVzZSB3aXRoIGxvY2F0aW9uIHByb3BlcnR5IHRvIGNyZWF0ZSBmaWxlIG5hbWVzLiAgVGhlIGluZGV4IGlzIGluY3JlbWVudGVkIGJ5IG9uZSBmb3IgZWFjaCBidWZmZXIgcmVhZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTcmMtLWxvY2F0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG9jYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxvY2F0aW9u4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+UGF0dGVybiB0byBjcmVhdGUgZmlsZSBuYW1lcyBvZiBpbnB1dCBmaWxlcy4gIEZpbGUgbmFtZXMgYXJlIGNyZWF0ZWQgYnkgY2FsbGluZyBzcHJpbnRmKCkgd2l0aCB0aGUgcGF0dGVybiBhbmQgdGhlIGN1cnJlbnQgaW5kZXguPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIlMDVkIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlGaWxlU3JjLS1sb29wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG9vcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9vcOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGV0aGVyIHRvIHJlcGVhdCBmcm9tIHRoZSBiZWdpbm5pbmcgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIHJlYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aUZpbGVTcmMtLXN0YXJ0LWluZGV4Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RhcnQtaW5kZXjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0YXJ0LWluZGV44oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlN0YXJ0IHZhbHVlIG9mIGluZGV4LiAgVGhlIGluaXRpYWwgdmFsdWUgb2YgaW5kZXggY2FuIGJlIHNldCBlaXRoZXIgYnkgc2V0dGluZyBpbmRleCBvciBzdGFydC1pbmRleC4gIFdoZW4gdGhlIGVuZCBvZiB0aGUgbG9vcCBpcyByZWFjaGVkLCB0aGUgaW5kZXggd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIHN0YXJ0LWluZGV4LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpRmlsZVNyYy0tc3RvcC1pbmRleCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0b3AtaW5kZXjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0b3AtaW5kZXjigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlN0b3AgdmFsdWUgb2YgaW5kZXguICBUaGUgc3BlY2lhbCB2YWx1ZSAtMSBtZWFucyBubyBzdG9wLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItcGx1Z2lucy0xLjBnc3RyZWFtZXItcGx1Z2lucy1maWxlc3JjLmh0bWwjR3N0RmlsZVNyYy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGaWxlU3JjPC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYjFiYjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm11bHRpcGFydGRlbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sIiB0aXRsZT0ibXVsdGlmaWxlc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sIiB0aXRsZT0ibXVsdGlwYXJ0bXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aWZpbGVzcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0ZGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0ZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5tdWx0aXBhcnRkZW11eDwvc3Bhbj48L2gyPgotPHA+bXVsdGlwYXJ0ZGVtdXg8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0ZGVtdXguaHRtbCNHc3RNdWx0aXBhcnREZW11eC0tYm91bmRhcnkiIHRpdGxlPSJUaGUg4oCcYm91bmRhcnnigJ0gcHJvcGVydHkiPmJvdW5kYXJ5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwjR3N0TXVsdGlwYXJ0RGVtdXgtLXNpbmdsZS1zdHJlYW0iIHRpdGxlPSJUaGUg4oCcc2luZ2xlLXN0cmVhbeKAnSBwcm9wZXJ0eSI+c2luZ2xlLXN0cmVhbTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TXVsdGlwYXJ0RGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0ZGVtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwjR3N0TXVsdGlwYXJ0RGVtdXgtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE11bHRpcGFydERlbXV4Ij5Hc3RNdWx0aXBhcnREZW11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNdWx0aXBhcnREZW11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5NdWx0aXBhcnREZW11eCB1c2VzIHRoZSBDb250ZW50LXR5cGUgZmllbGQgb2YgaW5jb21pbmcgYnVmZmVycyB0byBkZW11eCBhbmQgCi1wdXNoIGRhdGEgdG8gZHluYW1pYyBzb3VyY2UgcGFkcy4gTW9zdCBvZiB0aGUgdGltZSBtdWx0aXBhcnQgc3RyZWFtcyBhcmUgCi1zZXF1ZW50aWFsIEpQRUcgZnJhbWVzIGdlbmVyYXRlZCBmcm9tIGEgbGl2ZSBzb3VyY2Ugc3VjaCBhcyBhIG5ldHdvcmsgc291cmNlCi1vciBhIGNhbWVyYS48L3A+Ci08cD5UaGUgb3V0cHV0IGJ1ZmZlcnMgb2YgdGhlIG11bHRpcGFydGRlbXV4IHR5cGljYWxseSBoYXZlIG5vIHRpbWVzdGFtcHMgYW5kIGFyZQotdXN1YWxseSBwbGF5ZWQgYXMgZmFzdCBhcyBwb3NzaWJsZSAoYXQgdGhlIHJhdGUgdGhhdCB0aGUgc291cmNlIHByb3ZpZGVzIHRoZQotZGF0YSkuPC9wPgotPHA+dGhlIGNvbnRlbnQgaW4gbXVsdGlwYXJ0IGZpbGVzIGlzIHNlcGFyYXRlZCB3aXRoIGEgYm91bmRhcnkgc3RyaW5nIHRoYXQgY2FuCi1iZSBjb25maWd1cmVkIHNwZWNpZmljYWxseSB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwjR3N0TXVsdGlwYXJ0RGVtdXgtLWJvdW5kYXJ5IiB0aXRsZT0iVGhlIOKAnGJvdW5kYXJ54oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcYm91bmRhcnnigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eQotb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYXV0b2RldGVjdGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45Ni43LjUiPjwvYT48aDM+U2FtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49Lzwvc3Bhbj50bXA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bXVsdGlwYXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdWx0aXBhcnRkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gaW1hZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj5qcGVnPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ZnJhbWVyYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+XDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmZyYWN0aW9uXDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjU8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGpwZWdwYXJzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4ganBlZ2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIGEgc2ltcGxlIHBpcGVsaW5lIHRvIGRlbXV4IGEgbXVsdGlwYXJ0IGZpbGUgbXV4ZWQgd2l0aCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sI0dzdE11bHRpcGFydE11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpcGFydE11eDwvc3Bhbj48L2E+Ci1jb250YWluaW5nIEpQRUcgZnJhbWVzLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjk2LjcuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aXBhcnQuaHRtbCNwbHVnaW4tbXVsdGlwYXJ0Ij5tdWx0aXBhcnQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OywgU2pvZXJkIFNpbW9ucyAmbHQ7c2pvZXJkQGx1b24ubmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZW11eGVyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjk2LjcuNi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5tdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmNfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlwYXJ0RGVtdXgtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RNdWx0aXBhcnREZW11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE11bHRpcGFydERlbXV4OzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwjR3N0TXVsdGlwYXJ0RGVtdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNdWx0aXBhcnREZW11eDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aXBhcnREZW11eC0tYm91bmRhcnkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxib3VuZGFyeeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYm91bmRhcnnigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgYm91bmRhcnkgc3RyaW5nIHNlcGFyYXRpbmcgZGF0YSwgYXV0b21hdGljIGlmIE5VTEwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpcGFydERlbXV4LS1zaW5nbGUtc3RyZWFtIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2luZ2xlLXN0cmVhbeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2luZ2xlLXN0cmVhbeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Bc3N1bWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBzdHJlYW0gd2hvc2UgY29udGVudC10eXBlIHdpbGwKLW5vdCBjaGFuZ2UgYW5kIGVtaXQgbm8tbW9yZS1wYWRzIGFzIHNvb24gYXMgdGhlIGZpcnN0IGJvdW5kYXJ5Ci1jb250ZW50IGlzIHBhcnNlZCwgZGVjb2RlZCwgYW5kIHBhZHMgYXJlIGxpbmtlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4Lmh0bWwjR3N0TXVsdGlwYXJ0TXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TXVsdGlwYXJ0TXV4PC9zcGFuPjwvYT48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IyMmU3Ny4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm11bHRpcGFydG11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIiB0aXRsZT0ibXVsdGlwYXJ0ZGVtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwiIHRpdGxlPSJtdWx0aXVkcHNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXgudG9wX29mX3BhZ2UiPjwvYT5tdWx0aXBhcnRtdXg8L3NwYW4+PC9oMj4KLTxwPm11bHRpcGFydG11eDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sI0dzdE11bHRpcGFydE11eC0tYm91bmRhcnkiIHRpdGxlPSJUaGUg4oCcYm91bmRhcnnigJ0gcHJvcGVydHkiPmJvdW5kYXJ5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TXVsdGlwYXJ0TXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4Lmh0bWwjR3N0TXVsdGlwYXJ0TXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RNdWx0aXBhcnRNdXgiPkdzdE11bHRpcGFydE11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TXVsdGlwYXJ0TXV4Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5NdWx0aXBhcnRNdXggdXNlcyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBvZiB0aGUgc2luayBwYWQgYXMgdGhlIENvbnRlbnQtdHlwZSBmaWVsZCBmb3IKLWluY29taW5nIGJ1ZmZlcnMgd2hlbiBtdXhpbmcgdGhlbSB0byBhIG11bHRpcGFydCBzdHJlYW0uIE1vc3Qgb2YgdGhlIHRpbWUgCi1tdWx0aXBhcnQgc3RyZWFtcyBhcmUgc2VxdWVudGlhbCBKUEVHIGZyYW1lcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTcuNy4zIj48L2E+PGgzPlNhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj54PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cmF3PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZyYW1lcmF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPicoZnJhY3Rpb24pJzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBqcGVnZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdWx0aXBhcnRtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0vPC9zcGFuPnRtcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tdWx0aXBhcnQ8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gYSBwaXBlbGluZSB0byBtdXggNSBKUEVHIGZyYW1lcyBwZXIgc2Vjb25kIGludG8gYSBtdWx0aXBhcnQgc3RyZWFtCi1zdG9yZWQgdG8gYSBmaWxlLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjk3LjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aXBhcnQuaHRtbCNwbHVnaW4tbXVsdGlwYXJ0Ij5tdWx0aXBhcnQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9NdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45Ny43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbmtfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXgub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpcGFydE11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE11bHRpcGFydE11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE11bHRpcGFydE11eDs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXguaHRtbCNHc3RNdWx0aXBhcnRNdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNdWx0aXBhcnRNdXg8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRtdXgucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpcGFydE11eC0tYm91bmRhcnkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxib3VuZGFyeeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYm91bmRhcnnigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5Cb3VuZGFyeSBzdHJpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICJUaGlzUmFuZG9tU3RyaW5nIjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjIxOTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzIyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5tdWx0aXVkcHNpbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4Lmh0bWwiIHRpdGxlPSJtdWx0aXBhcnRtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCIgdGl0bGU9Im5hdmlnYXRpb250ZXN0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdmlnYXRpb250ZXN0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsudG9wX29mX3BhZ2UiPjwvYT5tdWx0aXVkcHNpbms8L3NwYW4+PC9oMj4KLTxwPm11bHRpdWRwc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWJ5dGVzLXNlcnZlZCIgdGl0bGU9IlRoZSDigJxieXRlcy1zZXJ2ZWTigJ0gcHJvcGVydHkiPmJ5dGVzLXNlcnZlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tYnl0ZXMtdG8tc2VydmUiIHRpdGxlPSJUaGUg4oCcYnl0ZXMtdG8tc2VydmXigJ0gcHJvcGVydHkiPmJ5dGVzLXRvLXNlcnZlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tY2xpZW50cyIgdGl0bGU9IlRoZSDigJxjbGllbnRz4oCdIHByb3BlcnR5Ij5jbGllbnRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tYXV0by1tdWx0aWNhc3QiIHRpdGxlPSJUaGUg4oCcYXV0by1tdWx0aWNhc3TigJ0gcHJvcGVydHkiPmF1dG8tbXVsdGljYXN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tbG9vcCIgdGl0bGU9IlRoZSDigJxsb29w4oCdIHByb3BlcnR5Ij5sb29wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLXFvcy1kc2NwIiB0aXRsZT0iVGhlIOKAnHFvcy1kc2Nw4oCdIHByb3BlcnR5Ij5xb3MtZHNjcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS10dGwiIHRpdGxlPSJUaGUg4oCcdHRs4oCdIHByb3BlcnR5Ij50dGw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tdHRsLW1jIiB0aXRsZT0iVGhlIOKAnHR0bC1tY+KAnSBwcm9wZXJ0eSI+dHRsLW1jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tc2VuZC1kdXBsaWNhdGVzIiB0aXRsZT0iVGhlIOKAnHNlbmQtZHVwbGljYXRlc+KAnSBwcm9wZXJ0eSI+c2VuZC1kdXBsaWNhdGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWJ1ZmZlci1zaXplIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1zaXpl4oCdIHByb3BlcnR5Ij5idWZmZXItc2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWNsb3NlLXNvY2tldCIgdGl0bGU9IlRoZSDigJxjbG9zZS1zb2NrZXTigJ0gcHJvcGVydHkiPmNsb3NlLXNvY2tldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldC5odG1sI0dTb2NrZXQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NvY2tldDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLXNvY2tldCIgdGl0bGU9IlRoZSDigJxzb2NrZXTigJ0gcHJvcGVydHkiPnNvY2tldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldC5odG1sI0dTb2NrZXQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NvY2tldDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLXVzZWQtc29ja2V0IiB0aXRsZT0iVGhlIOKAnHVzZWQtc29ja2V04oCdIHByb3BlcnR5Ij51c2VkLXNvY2tldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLS1mb3JjZS1pcHY0IiB0aXRsZT0iVGhlIOKAnGZvcmNlLWlwdjTigJ0gcHJvcGVydHkiPmZvcmNlLWlwdjQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLW11bHRpY2FzdC1pZmFjZSIgdGl0bGU9IlRoZSDigJxtdWx0aWNhc3QtaWZhY2XigJ0gcHJvcGVydHkiPm11bHRpY2FzdC1pZmFjZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay0tYmluZC1hZGRyZXNzIiB0aXRsZT0iVGhlIOKAnGJpbmQtYWRkcmVzc+KAnSBwcm9wZXJ0eSI+YmluZC1hZGRyZXNzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLWJpbmQtcG9ydCIgdGl0bGU9IlRoZSDigJxiaW5kLXBvcnTigJ0gcHJvcGVydHkiPmJpbmQtcG9ydDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldC5odG1sI0dTb2NrZXQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NvY2tldDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLXNvY2tldC12NiIgdGl0bGU9IlRoZSDigJxzb2NrZXQtdjbigJ0gcHJvcGVydHkiPnNvY2tldC12NjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1NvY2tldC5odG1sI0dTb2NrZXQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1NvY2tldDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstLXVzZWQtc29ja2V0LXY2IiB0aXRsZT0iVGhlIOKAnHVzZWQtc29ja2V0LXY24oCdIHByb3BlcnR5Ij51c2VkLXNvY2tldC12NjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLWFkZCIgdGl0bGU9IlRoZSDigJxhZGTigJ0gc2lnbmFsIj5hZGQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstY2xlYXIiIHRpdGxlPSJUaGUg4oCcY2xlYXLigJ0gc2lnbmFsIj5jbGVhcjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1BQ1RJT046Q0FQUyI+QWN0aW9uPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay1jbGllbnQtYWRkZWQiIHRpdGxlPSJUaGUg4oCcY2xpZW50LWFkZGVk4oCdIHNpZ25hbCI+Y2xpZW50LWFkZGVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay1jbGllbnQtcmVtb3ZlZCIgdGl0bGU9IlRoZSDigJxjbGllbnQtcmVtb3ZlZOKAnSBzaWduYWwiPmNsaWVudC1yZW1vdmVkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPio8L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmstZ2V0LXN0YXRzIiB0aXRsZT0iVGhlIOKAnGdldC1zdGF0c+KAnSBzaWduYWwiPmdldC1zdGF0czwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1BQ1RJT046Q0FQUyI+QWN0aW9uPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luay1yZW1vdmUiIHRpdGxlPSJUaGUg4oCccmVtb3Zl4oCdIHNpZ25hbCI+cmVtb3ZlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RNdWx0aVVEUFNpbmsiPkdzdE11bHRpVURQU2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay1zdHJ1Y3QiPkdzdEJhc2VTaW5rPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RNdWx0aVVEUFNpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sI0dzdFVEUFNpbmsiPkdzdFVEUFNpbms8L2E+Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5tdWx0aXVkcHNpbmsgaXMgYSBuZXR3b3JrIHNpbmsgdGhhdCBzZW5kcyBVRFAgcGFja2V0cyB0byBtdWx0aXBsZQotY2xpZW50cy4KLUl0IGNhbiBiZSBjb21iaW5lZCB3aXRoIHJ0cCBwYXlsb2FkIGVuY29kZXJzIHRvIGltcGxlbWVudCBSVFAgc3RyZWFtaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuOTguOC4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXVkcC5odG1sI3BsdWdpbi11ZHAiPnVkcDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNpbmsvTmV0d29yazwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45OC44LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0TXVsdGlVRFBTaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TXVsdGlVRFBTaW5rOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpVURQU2luay0tYnl0ZXMtc2VydmVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnl0ZXMtc2VydmVk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxieXRlcy1zZXJ2ZWTigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Ub3RhbCBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byBhbGwgY2xpZW50cy48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpVURQU2luay0tYnl0ZXMtdG8tc2VydmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxieXRlcy10by1zZXJ2ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnl0ZXMtdG8tc2VydmXigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIHRvIHNlcnZlIHRvIGNsaWVudHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLWNsaWVudHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbGllbnRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjbGllbnRz4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgaG9zdDpwb3J0IHBhaXJzIHdpdGggZGVzdGluYXRpb25zLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLWF1dG8tbXVsdGljYXN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXV0by1tdWx0aWNhc3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGF1dG8tbXVsdGljYXN04oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+QXV0b21hdGljYWxseSBqb2luL2xlYXZlIHRoZSBtdWx0aWNhc3QgZ3JvdXBzLCBGQUxTRSBtZWFucyB1c2VyIGhhcyB0byBkbyBpdCBoaW1zZWxmLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLWxvb3AiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb29w4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb29w4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZWQgZm9yIHNldHRpbmcgdGhlIG11bHRpY2FzdCBsb29wIHBhcmFtZXRlci4gVFJVRSA9IGVuYWJsZSwgRkFMU0UgPSBkaXNhYmxlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLXFvcy1kc2NwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccW9zLWRzY3DigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHFvcy1kc2Nw4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlF1YWxpdHkgb2YgU2VydmljZSwgZGlmZmVyZW50aWF0ZWQgc2VydmljZXMgY29kZSBwb2ludCAoLTEgZGVmYXVsdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbR19NQVhVTE9ORyw2M108L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLS10dGwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0dGzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR0bOKAnSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZWQgZm9yIHNldHRpbmcgdGhlIHVuaWNhc3QgVFRMIHBhcmFtZXRlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDI1NV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA2NDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLS10dGwtbWMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0dGwtbWPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR0bC1tY+KAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZWQgZm9yIHNldHRpbmcgdGhlIG11bHRpY2FzdCBUVEwgcGFyYW1ldGVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMjU1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpVURQU2luay0tc2VuZC1kdXBsaWNhdGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2VuZC1kdXBsaWNhdGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzZW5kLWR1cGxpY2F0ZXPigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gYSBkaXN0aW5hdGlvbi9wb3J0IHBhaXIgaXMgYWRkZWQgbXVsdGlwbGUgdGltZXMsIHNlbmQgcGFja2V0cyBtdWx0aXBsZSB0aW1lcyBhcyB3ZWxsLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLWJ1ZmZlci1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnVmZmVyLXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1ZmZlci1zaXpl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlNpemUgb2YgdGhlIGtlcm5lbCBzZW5kIGJ1ZmZlciBpbiBieXRlcywgMD1kZWZhdWx0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE11bHRpVURQU2luay0tY2xvc2Utc29ja2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xvc2Utc29ja2V04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjbG9zZS1zb2NrZXTigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkNsb3NlIHNvY2tldCBpZiBwYXNzZWQgYXMgcHJvcGVydHkgb24gc3RhdGUgY2hhbmdlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLXNvY2tldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNvY2tldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc29ja2V04oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U29ja2V0IHRvIHVzZSBmb3IgVURQIHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLXVzZWQtc29ja2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlZC1zb2NrZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZWQtc29ja2V04oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlNvY2tldCBjdXJyZW50bHkgaW4gdXNlIGZvciBVRFAgc2VuZGluZy4gKE5VTEwgPT0gbm8gc29ja2V0KS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLS1mb3JjZS1pcHY0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZm9yY2UtaXB2NOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZm9yY2UtaXB2NOKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Gb3JjaW5nIHRoZSB1c2Ugb2YgYW4gSVB2NCBzb2NrZXQgKERFUFJFQ0FURUQsIGhhcyBubyBlZmZlY3QgYW55bW9yZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLW11bHRpY2FzdC1pZmFjZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11bHRpY2FzdC1pZmFjZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbXVsdGljYXN0LWlmYWNl4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgbmV0d29yayBpbnRlcmZhY2Ugb24gd2hpY2ggdG8gam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLWJpbmQtYWRkcmVzcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJpbmQtYWRkcmVzc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmluZC1hZGRyZXNz4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5BZGRyZXNzIHRvIGJpbmQgdGhlIHNvY2tldCB0by48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLS1iaW5kLXBvcnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiaW5kLXBvcnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJpbmQtcG9ydOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlBvcnQgdG8gYmluZCB0aGUgc29ja2V0IHRvLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNjU1MzVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLS1zb2NrZXQtdjYiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzb2NrZXQtdjbigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNvY2tldC12NuKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlNvY2tldCB0byB1c2UgZm9yIFVEUHY2IHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstLXVzZWQtc29ja2V0LXY2Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlZC1zb2NrZXQtdjbigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZWQtc29ja2V0LXY24oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlNvY2tldCBjdXJyZW50bHkgaW4gdXNlIGZvciBVRFB2NiBzZW5kaW5nLiAoTlVMTCA9PSBubyBzb2NrZXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLWFkZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFkZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpVURQU2luazwvc3Bhbj48L2E+ICpnc3RtdWx0aXVkcHNpbmssCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAgICAgICAgICAgKmhvc3QsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+QWRkIGEgY2xpZW50IHdpdGggZGVzdGluYXRpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhvc3Q8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvcnQ8L2NvZGU+PC9lbT4KLSB0byB0aGUgbGlzdCBvZgotY2xpZW50cy4gV2hlbiB0aGUgc2FtZSBob3N0L3BvcnQgcGFpciBpcyBhZGRlZCBtdWx0aXBsZSB0aW1lcywgdGhlCi1zZW5kLWR1cGxpY2F0ZXMgcHJvcGVydHkgZGVmaW5lcyBpZiB0aGUgcGFja2V0cyBhcmUgc2VudCBtdWx0aXBsZSB0aW1lcyB0bwotdGhlIHNhbWUgaG9zdC9wb3J0IHBhaXIgb3Igbm90LjwvcD4KLTxwPldoZW4gYSBob3N0L3BvcnQgcGFpciBpcyBhZGRlZCBtdWx0aXBsZSB0aW1lcywgYW4gZXF1YWwgYW1vdW50IG9mIHJlbW92ZQotY2FsbHMgbXVzdCBiZSBwZXJmb3JtZWQgdG8gYWN0dWFsbHkgcmVtb3ZlIHRoZSBob3N0L3BvcnQgcGFpciBmcm9tIHRoZSBsaXN0Ci1vZiBkZXN0aW5hdGlvbnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLWFkZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5nc3RtdWx0aXVkcHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luayBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aG9zdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBob3N0bmFtZS9JUCBhZGRyZXNzIG9mIHRoZSBjbGllbnQgdG8gYWRkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcG9ydCBvZiB0aGUgY2xpZW50IHRvIGFkZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstY2xlYXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbGVhcuKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpVURQU2luazwvc3Bhbj48L2E+ICpnc3RtdWx0aXVkcHNpbmssCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkNsZWFyIHRoZSBsaXN0IG9mIGNsaWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLWNsZWFyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdzdG11bHRpdWRwc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstY2xpZW50LWFkZGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xpZW50LWFkZGVk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0TXVsdGlVRFBTaW5rPC9zcGFuPjwvYT4gKmdzdG11bHRpdWRwc2luaywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+ICAgICAgICAgICAqaG9zdCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgICBwb3J0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5TaWduYWwgZW1pdGVkIHdoZW4gYSBuZXcgY2xpZW50IGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9mCi1jbGllbnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE11bHRpVURQU2luay1jbGllbnQtYWRkZWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Z3N0bXVsdGl1ZHBzaW5rPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNpbmsgZW1pdHRpbmcgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ob3N0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGhvc3RuYW1lL0lQIGFkZHJlc3Mgb2YgdGhlIGFkZGVkIGNsaWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3J0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBvcnQgb2YgdGhlIGFkZGVkIGNsaWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLWNsaWVudC1yZW1vdmVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xpZW50LXJlbW92ZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNdWx0aVVEUFNpbms8L3NwYW4+PC9hPiAqZ3N0bXVsdGl1ZHBzaW5rLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gICAgICAgICAgICpob3N0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlNpZ25hbCBlbWl0ZWQgd2hlbiBhIGNsaWVudCBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3Qgb2YKLWNsaWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLWNsaWVudC1yZW1vdmVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdzdG11bHRpdWRwc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rIGVtaXR0aW5nIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aG9zdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBob3N0bmFtZS9JUCBhZGRyZXNzIG9mIHRoZSByZW1vdmVkIGNsaWVudDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wb3J0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBvcnQgb2YgdGhlIHJlbW92ZWQgY2xpZW50PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstZ2V0LXN0YXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ2V0LXN0YXRz4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+KgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCNHc3RNdWx0aVVEUFNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RNdWx0aVVEUFNpbms8L3NwYW4+PC9hPiAqZ3N0bXVsdGl1ZHBzaW5rLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT4gICAgICAgICAgICpob3N0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICAgIHBvcnQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkdldCB0aGUgc3RhdGlzdGljcyBvZiB0aGUgY2xpZW50IHdpdGggZGVzdGluYXRpb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhvc3Q8L2NvZGU+PC9lbT4KLSBhbmQgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnBvcnQ8L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RNdWx0aVVEUFNpbmstZ2V0LXN0YXRzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPmdzdG11bHRpdWRwc2luazwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzaW5rIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ob3N0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGhvc3RuYW1lL0lQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0byBnZXQgc3RhdHMgb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cG9ydDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwb3J0IG9mIHRoZSBjbGllbnQgdG8gZ2V0IHN0YXRzIG9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdE11bHRpVURQU2luay1nZXQtc3RhdHMucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiBhIEdzdFN0cnVjdHVyZTogYnl0ZXNfc2VudCwgcGFja2V0c19zZW50LAotY29ubmVjdF90aW1lIChpbiBlcG9jaCBzZWNvbmRzKSwgZGlzY29ubmVjdF90aW1lIChpbiBlcG9jaCBzZWNvbmRzKTwvcD4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1BQ1RJT046Q0FQUyI+QWN0aW9uPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLXJlbW92ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlbW92ZeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sI0dzdE11bHRpVURQU2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpVURQU2luazwvc3Bhbj48L2E+ICpnc3RtdWx0aXVkcHNpbmssCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPiAgICAgICAgICAgKmhvc3QsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgcG9ydCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVtb3ZlIHRoZSBjbGllbnQgd2l0aCBkZXN0aW5hdGlvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aG9zdDwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cG9ydDwvY29kZT48L2VtPgotIGZyb20gdGhlIGxpc3Qgb2YKLWNsaWVudHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0TXVsdGlVRFBTaW5rLXJlbW92ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5nc3RtdWx0aXVkcHNpbms8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2luayBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aG9zdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBob3N0bmFtZS9JUCBhZGRyZXNzIG9mIHRoZSBjbGllbnQgdG8gcmVtb3ZlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnBvcnQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcG9ydCBvZiB0aGUgY2xpZW50IHRvIHJlbW92ZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+dWRwc2luaywgbXVsdGlmZHNpbms8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdmlnYXRpb250ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNTNiNGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdmlnYXRpb250ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm5hdmlnYXRpb250ZXN0OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sIiB0aXRsZT0ibXVsdGl1ZHBzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbCIgdGl0bGU9Im5hdnNlZWsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdmlnYXRpb250ZXN0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3Qub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2c2Vlay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdC50b3Bfb2ZfcGFnZSI+PC9hPm5hdmlnYXRpb250ZXN0PC9zcGFuPjwvaDI+Ci08cD5uYXZpZ2F0aW9udGVzdDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3ROYXZpZ2F0aW9udGVzdCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCNHc3ROYXZpZ2F0aW9udGVzdC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TmF2aWdhdGlvbnRlc3QiPkdzdE5hdmlnYXRpb250ZXN0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3Qub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3ROYXZpZ2F0aW9udGVzdAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjk5LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1uYXZpZ2F0aW9udGVzdC5odG1sI3BsdWdpbi1uYXZpZ2F0aW9udGVzdCI+bmF2aWdhdGlvbnRlc3Q8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EYXZpZCBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi45OS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdmlnYXRpb250ZXN0Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3ROYXZpZ2F0aW9udGVzdC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE5hdmlnYXRpb250ZXN0PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TmF2aWdhdGlvbnRlc3Q7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4OTNiNmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bmF2c2VlazogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdC5odG1sIiB0aXRsZT0ibmF2aWdhdGlvbnRlc3QiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5odG1sIiB0aXRsZT0ib3B0diI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2c2Vlay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2c2Vlay50b3Bfb2ZfcGFnZSI+PC9hPm5hdnNlZWs8L3NwYW4+PC9oMj4KLTxwPm5hdnNlZWs8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLmh0bWwjR3N0TmF2U2Vlay0tc2Vlay1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcc2Vlay1vZmZzZXTigJ0gcHJvcGVydHkiPnNlZWstb2Zmc2V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0TmF2U2VlayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLmh0bWwjR3N0TmF2U2Vlay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0TmF2U2VlayI+R3N0TmF2U2VlazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0TmF2U2VlawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTAwLjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sI3BsdWdpbi1kZWJ1ZyI+ZGVidWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwMC43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE5hdlNlZWstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3ROYXZTZWVrPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0TmF2U2Vlazs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2c2Vlay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0TmF2U2Vlay0tc2Vlay1vZmZzZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzZWVrLW9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2Vlay1vZmZzZXTigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZSBpbiBzZWNvbmRzIHRvIHNlZWsgYnkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc5N2ZmNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vcHR2OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbCIgdGl0bGU9Im5hdnNlZWsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCIgdGl0bGU9Im9zczRzaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZzZWVrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0diI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2LnRvcF9vZl9wYWdlIj48L2E+b3B0djwvc3Bhbj48L2gyPgotPHA+b3B0djwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPcFRWTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYuaHRtbCNHc3RPcFRWLS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPm1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYuaHRtbCNHc3RPcFRWLS1zcGVlZCIgdGl0bGU9IlRoZSDigJxzcGVlZOKAnSBwcm9wZXJ0eSI+c3BlZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5odG1sI0dzdE9wVFYtLXRocmVzaG9sZCIgdGl0bGU9IlRoZSDigJx0aHJlc2hvbGTigJ0gcHJvcGVydHkiPnRocmVzaG9sZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0T3BUViI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwjR3N0T3BUVi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0T3BUViI+R3N0T3BUVjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RPcFRWCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VHJhZGl0aW9uYWwgYmxhY2std2hpdGUgb3B0aWNhbCBhbmltYXRpb24gaXMgbm93IHJlc3VycmVjdGVkIGFzIGEKLXJlYWwtdGltZSB2aWRlbyBlZmZlY3QuIElucHV0IGltYWdlcyBhcmUgYmluYXJpemVkIGFuZCBjb21iaW5lZCB3aXRoCi12YXJpb3VzIG9wdGljYWwgcGF0dGVybi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTAxLjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb3B0diA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiBvcHR2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTAxLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwjcGx1Z2luLWVmZmVjdHYiPmVmZmVjdHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDEuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3BUVi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE9wVFY8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RPcFRWOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPcFRWLS1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9kZeKAnSAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RPcFRWTW9kZTwvc3Bhbj48L3ByZT4KLTxwPk1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE1hZWxzdHJvbTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3BUVi0tc3BlZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzcGVlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3BlZWTigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RWZmZWN0IHNwZWVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxNjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3BUVi0tdGhyZXNob2xkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGhyZXNob2xk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aHJlc2hvbGTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkx1bWEgdGhyZXNob2xkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gR19NQVhJTlQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA2MDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2IxN2U3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vc3M0c2luazogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwiIHRpdGxlPSJvcHR2Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCIgdGl0bGU9Im9zczRzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vcHR2Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay50b3Bfb2ZfcGFnZSI+PC9hPm9zczRzaW5rPC9zcGFuPjwvaDI+Ci08cD5vc3M0c2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sI0dzdE9zczRTaW5rLS1kZXZpY2UiIHRpdGxlPSJUaGUg4oCcZGV2aWNl4oCdIHByb3BlcnR5Ij5kZXZpY2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5odG1sI0dzdE9zczRTaW5rLS1kZXZpY2UtbmFtZSIgdGl0bGU9IlRoZSDigJxkZXZpY2UtbmFtZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlLW5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmh0bWwjR3N0T3NzNFNpbmstLW11dGUiIHRpdGxlPSJUaGUg4oCcbXV0ZeKAnSBwcm9wZXJ0eSI+bXV0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCNHc3RPc3M0U2luay0tdm9sdW1lIiB0aXRsZT0iVGhlIOKAnHZvbHVtZeKAnSBwcm9wZXJ0eSI+dm9sdW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RPc3M0U2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCNHc3RPc3M0U2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0T3NzNFNpbmsiPkdzdE9zczRTaW5rPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2Jhc2VzaW5rLmh0bWwjR3N0QXVkaW9CYXNlU2luay1zdHJ1Y3QiPkdzdEF1ZGlvQmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvc2luay5odG1sI0dzdEF1ZGlvU2luay1zdHJ1Y3QiPkdzdEF1ZGlvU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RPc3M0U2luawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RPc3M0U2luayBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RzdHJlYW12b2x1bWUuaHRtbCNHc3RTdHJlYW1Wb2x1bWUtc3RydWN0Ij5Hc3RTdHJlYW1Wb2x1bWU8L2E+IGFuZCAgR3N0UHJvcGVydHlQcm9iZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbGV0cyB5b3Ugb3V0cHV0IHNvdW5kIHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKQotdmVyc2lvbiA0LjwvcD4KLTxwPk5vdGUgdGhhdCB5b3Ugc2hvdWxkIGFsbW9zdCBhbHdheXMgdXNlIGdlbmVyaWMgYXVkaW8gY29udmVyc2lvbiBlbGVtZW50cwotbGlrZSBhdWRpb2NvbnZlcnQgYW5kIGF1ZGlvcmVzYW1wbGUgaW4gZnJvbnQgb2YgYW4gYXVkaW9zaW5rIHRvIG1ha2Ugc3VyZQoteW91ciBwaXBlbGluZSB3b3JrcyB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcyAodGhvc2UgY29udmVyc2lvbiBlbGVtZW50cyB3aWxsCi1hY3QgaW4gcGFzc3Rocm91Z2gtbW9kZSBpZiBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeSkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwMi44LjQiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvbHVtZSB2b2x1bWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvc3M0c2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSB3aWxsIG91dHB1dCBhIHNpbmUgd2F2ZSAoY29udGludW91cyBiZWVwIHNvdW5kKSB0byB5b3VyIHNvdW5kIGNhcmQgKHdpdGgKLWEgdmVyeSBsb3cgdm9sdW1lIGFzIHByZWNhdXRpb24pLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm11c2ljPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb3NzNHNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2lsbCBwbGF5IGFuIE9nZy9Wb3JiaXMgYXVkaW8gZmlsZSBhbmQgb3V0cHV0IGl0IHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbQotdmVyc2lvbiA0LgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwMi44LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzNC5odG1sI3BsdWdpbi1vc3M0Ij5vc3M0PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltIGNlbnRyaWN1bGFyIG5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDIuOC41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtYWxhdywgcmF0ZT0oaW50KVsgMSwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA0MDk2IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LW11bGF3LCByYXRlPShpbnQpWyAxLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDQwOTYgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMzMkxFLCBTMzJCRSwgUzI0XzMyTEUsIFMyNF8zMkJFLCBTMjRMRSwgUzE2TEUsIFMxNkJFLCBVMTZMRSwgVTE2QkUsIFM4LCBVOCB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA0MDk2IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3NzNFNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RPc3M0U2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9zczRTaW5rOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3NzNFNpbmstLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5PU1M0IGRldmljZSAoZS5nLiAvZGV2L29zcy9oZGF1ZGlvMC9wY20wIG9yIC9kZXYvZHNwTikgKE5VTEwgPSB1c2UgZmlyc3QgYXZhaWxhYmxlIHBsYXliYWNrIGRldmljZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zczRTaW5rLS1kZXZpY2UtbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZS1uYW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2UtbmFtZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zczRTaW5rLS1tdXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbXV0ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbXV0ZeKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NdXRlIHN0YXRlIG9mIHRoaXMgc3RyZWFtLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3NzNFNpbmstLXZvbHVtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHZvbHVtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdm9sdW1l4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+TGluZWFyIHZvbHVtZSBvZiB0aGlzIHN0cmVhbSwgMS4wPTEwMCUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWFlYTQxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm9zczRzcmM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNpbmsuaHRtbCIgdGl0bGU9Im9zczRzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbCIgdGl0bGU9Im9zc3NpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMudG9wX29mX3BhZ2UiPjwvYT5vc3M0c3JjPC9zcGFuPjwvaDI+Ci08cD5vc3M0c3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5odG1sI0dzdE9zczRTb3VyY2UtLWRldmljZSIgdGl0bGU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiPmRldmljZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCNHc3RPc3M0U291cmNlLS1kZXZpY2UtbmFtZSIgdGl0bGU9IlRoZSDigJxkZXZpY2UtbmFtZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlLW5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RPc3M0U291cmNlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCNHc3RPc3M0U291cmNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RPc3M0U291cmNlIj5Hc3RPc3M0U291cmNlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ij5Hc3RCYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiPkdzdFB1c2hTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvYmFzZXNyYy5odG1sI0dzdEF1ZGlvQmFzZVNyYy1zdHJ1Y3QiPkdzdEF1ZGlvQmFzZVNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvc3JjLmh0bWwjR3N0QXVkaW9TcmMtc3RydWN0Ij5Hc3RBdWRpb1NyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0T3NzNFNvdXJjZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdE9zczRTb3VyY2UgaW1wbGVtZW50cwotIEdzdEltcGxlbWVudHNJbnRlcmZhY2UsICBHc3RNaXhlciBhbmQgIEdzdFByb3BlcnR5UHJvYmUuPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbGV0cyB5b3UgcmVjb3JkIHNvdW5kIHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKQotdmVyc2lvbiA0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDMuOC4zIj48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IG9zczRzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2VuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gb2dnbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm15bXVzaWM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2c8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2lsbCByZWNvcmQgc291bmQgZnJvbSB5b3VyIHNvdW5kIGNhcmQgdXNpbmcgT1NTNCBhbmQgZW5jb2RlIGl0IHRvIGFuCi1PZ2cvVm9yYmlzIGZpbGUgKHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91ciBtaXhlciBzZXR0aW5ncyBhcmUgcmlnaHQKLWFuZCB0aGUgcmlnaHQgaW5wdXRzIGFyZWVuYWJsZWQgZXRjLikKLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDMuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zczQuaHRtbCNwbHVnaW4tb3NzNCI+b3NzNDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbSBjZW50cmljdWxhciBuZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDMuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWFsYXcsIHJhdGU9KGludClbIDEsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgNDA5NiBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgcmF0ZT0oaW50KVsgMSwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA0MDk2IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMzJMRSwgUzMyQkUsIFMyNF8zMkxFLCBTMjRfMzJCRSwgUzI0TEUsIFMxNkxFLCBTMTZCRSwgVTE2TEUsIFUxNkJFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgNDA5NiBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPc3M0U291cmNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0T3NzNFNvdXJjZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9zczRTb3VyY2U7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zczRTb3VyY2UtLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5PU1M0IGRldmljZSAoZS5nLiAvZGV2L29zcy9oZGF1ZGlvMC9wY20wIG9yIC9kZXYvZHNwTikgKE5VTEwgPSB1c2UgZmlyc3QgYXZhaWxhYmxlIGRldmljZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zczRTb3VyY2UtLWRldmljZS1uYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNlLW5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRldmljZS1uYW1l4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+SHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGUgc291bmQgZGV2aWNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4ZTk5MS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vc3NzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCIgdGl0bGU9Im9zczRzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmh0bWwiIHRpdGxlPSJvc3NzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLnRvcF9vZl9wYWdlIj48L2E+b3Nzc2luazwvc3Bhbj48L2gyPgotPHA+b3Nzc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLmh0bWwjR3N0T3NzU2luay0tZGV2aWNlIiB0aXRsZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0T3NzU2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLmh0bWwjR3N0T3NzU2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0T3NzU2luayI+R3N0T3NzU2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3Npbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VTaW5rLmh0bWwjR3N0QmFzZVNpbmstc3RydWN0Ij5Hc3RCYXNlU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2Jhc2VzaW5rLmh0bWwjR3N0QXVkaW9CYXNlU2luay1zdHJ1Y3QiPkdzdEF1ZGlvQmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvc2luay5odG1sI0dzdEF1ZGlvU2luay1zdHJ1Y3QiPkdzdEF1ZGlvU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RPc3NTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGxldHMgeW91IG91dHB1dCBzb3VuZCB1c2luZyB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gKE9TUykuPC9wPgotPHA+Tm90ZSB0aGF0IHlvdSBzaG91bGQgYWxtb3N0IGFsd2F5cyB1c2UgZ2VuZXJpYyBhdWRpbyBjb252ZXJzaW9uIGVsZW1lbnRzCi1saWtlIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBpbiBmcm9udCBvZiBhbiBhdWRpb3NpbmsgdG8gbWFrZSBzdXJlCi15b3VyIHBpcGVsaW5lIHdvcmtzIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzICh0aG9zZSBjb252ZXJzaW9uIGVsZW1lbnRzIHdpbGwKLWFjdCBpbiBwYXNzdGhyb3VnaC1tb2RlIGlmIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5KS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTA0LjcuNCI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBhdWRpb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9sdW1lIHZvbHVtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuMTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9zc3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2lsbCBvdXRwdXQgYSBzaW5lIHdhdmUgKGNvbnRpbnVvdXMgYmVlcCBzb3VuZCkgdG8geW91ciBzb3VuZCBjYXJkICh3aXRoCi1hIHZlcnkgbG93IHZvbHVtZSBhcyBwcmVjYXV0aW9uKS4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5tdXNpYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9zc3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2lsbCBwbGF5IGFuIE9nZy9Wb3JiaXMgYXVkaW8gZmlsZSBhbmQgb3V0cHV0IGl0IHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDQuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zc2F1ZGlvLmh0bWwjcGx1Z2luLW9zc2F1ZGlvIj5vc3NhdWRpbzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY2hlbGxvLmJlJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwNC43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIFUxNkxFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIFUxNkxFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPc3NTaW5rLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0T3NzU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9zc1Npbms7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zc1NpbmstLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5PU1MgZGV2aWNlICh1c3VhbGx5IC9kZXYvZHNwTikuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIvZGV2L2RzcCI8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDdiYTQxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+b3Nzc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbCIgdGl0bGU9Im9zc3NpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLmh0bWwiIHRpdGxlPSJvc3hhdWRpb3NpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLnRvcF9vZl9wYWdlIj48L2E+b3Nzc3JjPC9zcGFuPjwvaDI+Ci08cD5vc3NzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5odG1sI0dzdE9zc1NyYy0tZGV2aWNlIiB0aXRsZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmh0bWwjR3N0T3NzU3JjLS1kZXZpY2UtbmFtZSIgdGl0bGU9IlRoZSDigJxkZXZpY2UtbmFtZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlLW5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RPc3NTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMuaHRtbCNHc3RPc3NTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdE9zc1NyYyI+R3N0T3NzU3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9iYXNlc3JjLmh0bWwjR3N0QXVkaW9CYXNlU3JjLXN0cnVjdCI+R3N0QXVkaW9CYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9zcmMuaHRtbCNHc3RBdWRpb1NyYy1zdHJ1Y3QiPkdzdEF1ZGlvU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RPc3NTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdE9zc1NyYyBpbXBsZW1lbnRzCi0gR3N0SW1wbGVtZW50c0ludGVyZmFjZSBhbmQgIEdzdE1peGVyLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbGV0cyB5b3UgcmVjb3JkIHNvdW5kIHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTA1LjguMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBvc3NzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXltdXNpYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZzwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSB3aWxsIHJlY29yZCBzb3VuZCBmcm9tIHlvdXIgc291bmQgY2FyZCB1c2luZyBPU1MgYW5kIGVuY29kZSBpdCB0byBhbgotT2dnL1ZvcmJpcyBmaWxlICh0aGlzIHdpbGwgb25seSB3b3JrIGlmIHlvdXIgbWl4ZXIgc2V0dGluZ3MgYXJlIHJpZ2h0Ci1hbmQgdGhlIHJpZ2h0IGlucHV0cyBlbmFibGVkIGV0Yy4pCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTA1LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3NhdWRpby5odG1sI3BsdWdpbi1vc3NhdWRpbyI+b3NzYXVkaW88L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwNS44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBVMTZMRSwgUzgsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBVMTZMRSwgUzgsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3NzcmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zc1NyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdE9zc1NyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9zc1NyYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPc3NTcmMtLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5PU1MgZGV2aWNlICh1c3VhbGx5IC9kZXYvZHNwTikuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIvZGV2L2RzcCI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zc1NyYy0tZGV2aWNlLW5hbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkZXZpY2UtbmFtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNlLW5hbWXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5IdW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoZSBzb3VuZCBkZXZpY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiIjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NmM5MzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vc3hhdWRpb3Npbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmh0bWwiIHRpdGxlPSJvc3NzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMuaHRtbCIgdGl0bGU9Im9zeGF1ZGlvc3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsudG9wX29mX3BhZ2UiPjwvYT5vc3hhdWRpb3Npbms8L3NwYW4+PC9oMj4KLTxwPm9zeGF1ZGlvc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLmh0bWwjR3N0T3N4QXVkaW9TaW5rLS1kZXZpY2UiIHRpdGxlPSJUaGUg4oCcZGV2aWNl4oCdIHByb3BlcnR5Ij5kZXZpY2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuaHRtbCNHc3RPc3hBdWRpb1NpbmsiIHRpdGxlPSJzdHJ1Y3QgR3N0T3N4QXVkaW9TaW5rIj5Hc3RPc3hBdWRpb1Npbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IHJlbmRlcnMgcmF3IGF1ZGlvIHNhbXBsZXMgdXNpbmcgdGhlIENvcmVBdWRpbyBhcGkuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwNi41LjMiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9zeGF1ZGlvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBQbGF5IGFuIE9nZy9Wb3JiaXMgZmlsZS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDYuNS40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeGF1ZGlvLmh0bWwjcGx1Z2luLW9zeGF1ZGlvIj5vc3hhdWRpbzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwNi41LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPc3hBdWRpb1NpbmsiPjwvYT48aDM+c3RydWN0IEdzdE9zeEF1ZGlvU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdE9zeEF1ZGlvU2luayB7Ci0gIEdzdEF1ZGlvQmFzZVNpbmsgc2luazsKLQotICBBdWRpb0RldmljZUlEIGRldmljZV9pZDsKLQotICBBdWRpb1VuaXQgYXVkaW91bml0OwotICBkb3VibGUgdm9sdW1lOwotCi0gIGd1aW50IGNoYW5uZWxzOwotfTsKLTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9zeEF1ZGlvU2luay0tZGV2aWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2XigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZXZpY2UgSUQgb2Ygb3V0cHV0IGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZDhkNmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm9zeGF1ZGlvc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luay5odG1sIiB0aXRsZT0ib3N4YXVkaW9zaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5odG1sIiB0aXRsZT0ib3N4dmlkZW9zaW5rIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMudG9wX29mX3BhZ2UiPjwvYT5vc3hhdWRpb3NyYzwvc3Bhbj48L2gyPgotPHA+b3N4YXVkaW9zcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMuaHRtbCNHc3RPc3hBdWRpb1NyYy0tZGV2aWNlIiB0aXRsZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5odG1sI0dzdE9zeEF1ZGlvU3JjIiB0aXRsZT0ic3RydWN0IEdzdE9zeEF1ZGlvU3JjIj5Hc3RPc3hBdWRpb1NyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBjYXB0dXJlcyByYXcgYXVkaW8gc2FtcGxlcyB1c2luZyB0aGUgQ29yZUF1ZGlvIGFwaS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTA3LjUuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBvc3hhdWRpb3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gd2F2ZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmF1ZGlvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2F2PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTA3LjUuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3hhdWRpby5odG1sI3BsdWdpbi1vc3hhdWRpbyI+b3N4YXVkaW88L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5aYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwNy41LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3N4QXVkaW9TcmMiPjwvYT48aDM+c3RydWN0IEdzdE9zeEF1ZGlvU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0T3N4QXVkaW9TcmMgewotICBHc3RBdWRpb0Jhc2VTcmMgc3JjOwotCi0gIEF1ZGlvRGV2aWNlSUQgZGV2aWNlX2lkOwotfTsKLTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T3N4QXVkaW9TcmMtLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RGV2aWNlIElEIG9mIGlucHV0IGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlYTJmOC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm9zeHZpZGVvc2luazogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5odG1sIiB0aXRsZT0ib3N4YXVkaW9zcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjLmh0bWwiIHRpdGxlPSJwbmdkZWMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4YXVkaW9zcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay50b3Bfb2ZfcGFnZSI+PC9hPm9zeHZpZGVvc2luazwvc3Bhbj48L2gyPgotPHA+b3N4dmlkZW9zaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwjR3N0T1NYVmlkZW9TaW5rLS1lbWJlZCIgdGl0bGU9IlRoZSDigJxlbWJlZOKAnSBwcm9wZXJ0eSI+ZW1iZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwjR3N0T1NYVmlkZW9TaW5rLS1mdWxsc2NyZWVuIiB0aXRsZT0iVGhlIOKAnGZ1bGxzY3JlZW7igJ0gcHJvcGVydHkiPmZ1bGxzY3JlZW48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3Npbmsub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5odG1sI0dzdE9TWFZpZGVvU2luayIgdGl0bGU9InN0cnVjdCBHc3RPU1hWaWRlb1NpbmsiPkdzdE9TWFZpZGVvU2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwOC41LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4dmlkZW8uaHRtbCNwbHVnaW4tb3N4dmlkZW8iPm9zeHZpZGVvPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+WmFoZWVyIEFiYmFzIE1lcmFsaSAmbHQ7emFoZWVyYWJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDguNS4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0T1NYVmlkZW9TaW5rIj48L2E+PGgzPnN0cnVjdCBHc3RPU1hWaWRlb1Npbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RPU1hWaWRlb1NpbmsgewotICAvKiBPdXIgZWxlbWVudCBzdHVmZiAqLwotICBHc3RWaWRlb1NpbmsgdmlkZW9zaW5rOwotICBHc3RPU1hXaW5kb3cgKm9zeHdpbmRvdzsKLSAgdm9pZCAqb3N4dmlkZW9zaW5rb2JqZWN0OwotICBOU1ZpZXcgKnN1cGVydmlldzsKLSAgZ2Jvb2xlYW4ga2VlcF9wYXI7Ci0gIEdzdFZpZGVvSW5mbyBpbmZvOwotfTsKLTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdE9TWFZpZGVvU2luay0tZW1iZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlbWJlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZW1iZWTigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGVuIGVuYWJsZWQsIGl0ICBjYW4gYmUgZW1iZWRkZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RPU1hWaWRlb1NpbmstLWZ1bGxzY3JlZW4iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmdWxsc2NyZWVu4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmdWxsc2NyZWVu4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gZW5hYmxlZCwgdGhlIHZpZXcgIGlzIGZ1bGxzY3JlZW4uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tMTM5NC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi0xMzk0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTc1YTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi0xMzk0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+MTM5NDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hYXNpbmsuaHRtbCIgdGl0bGU9ImFhc2luayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFhc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tMTM5NCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjEzOTQ8L3NwYW4+PC9oMj4KLTxwPjEzOTQg4oCUIDxhIG5hbWU9InBsdWdpbi0xMzk0Ij48L2E+U291cmNlIGZvciB2aWRlbyBkYXRhIHZpYSBJRUVFMTM5NCBpbnRlcmZhY2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjIuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3QxMzk0LnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjIuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHYxMzk0c3JjLmh0bWwiIHRpdGxlPSJkdjEzOTRzcmMiPmR2MTM5NHNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlIGZvciBEViB2aWRlbyBkYXRhIGZyb20gZmlyZXdpcmUgcG9ydDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWhkdjEzOTRzcmMuaHRtbCIgdGl0bGU9ImhkdjEzOTRzcmMiPmhkdjEzOTRzcmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZSBmb3IgTVBFRy1UUyB2aWRlbyBkYXRhIGZyb20gZmlyZXdpcmUgcG9ydDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWFzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFhc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2FjZGU0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWFzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YWFzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLTEzOTQuaHRtbCIgdGl0bGU9IjEzOTQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFsYXcuaHRtbCIgdGl0bGU9ImFsYXciPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi0xMzk0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFsYXcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFhc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmFhc2luazwvc3Bhbj48L2gyPgotPHA+YWFzaW5rIOKAlCA8YSBuYW1lPSJwbHVnaW4tYWFzaW5rIj48L2E+QVNDSUkgQXJ0IHZpZGVvIHNpbms8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjMuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RhYXNpbmsuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMy40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFzaW5rLmh0bWwiIHRpdGxlPSJhYXNpbmsiPmFhc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QW4gQVNDSUkgYXJ0IHZpZGVvc2luazwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFsYXcuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxhdy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzZjOTU3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxhdy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmFsYXc6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWFzaW5rLmh0bWwiIHRpdGxlPSJhYXNpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFscGhhY29sb3IuaHRtbCIgdGl0bGU9ImFscGhhY29sb3IiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hYXNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxwaGFjb2xvci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxhdyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmFsYXc8L3NwYW4+PC9oMj4KLTxwPmFsYXcg4oCUIDxhIG5hbWU9InBsdWdpbi1hbGF3Ij48L2E+QUxhdyBhdWRpbyBjb252ZXJzaW9uIHJvdXRpbmVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0YWxhdy5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFsYXdkZWMuaHRtbCIgdGl0bGU9ImFsYXdkZWMiPmFsYXdkZWM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNvbnZlcnQgOGJpdCBBIGxhdyB0byAxNmJpdCBQQ008L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLmh0bWwiIHRpdGxlPSJhbGF3ZW5jIj5hbGF3ZW5jPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db252ZXJ0IDE2Yml0IFBDTSB0byA4Yml0IEEgbGF3PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ3NmEyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxwaGEuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hbHBoYTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYWNvbG9yLmh0bWwiIHRpdGxlPSJhbHBoYWNvbG9yIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hcGV0YWcuaHRtbCIgdGl0bGU9ImFwZXRhZyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFscGhhY29sb3IuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXBldGFnLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmFscGhhPC9zcGFuPjwvaDI+Ci08cD5hbHBoYSDigJQgPGEgbmFtZT0icGx1Z2luLWFscGhhIj48L2E+YWRkcyBhbiBhbHBoYSBjaGFubmVsIHRvIHZpZGVvIC0gY29uc3RhbnQgb3IgdmlhIGNocm9tYS1rZXlpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjYuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RhbHBoYS5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sIiB0aXRsZT0iYWxwaGEiPmFscGhhPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BZGRzIGFuIGFscGhhIGNoYW5uZWwgdG8gdmlkZW8gLSB1bmlmb3JtIG9yIHZpYSBjaHJvbWEta2V5aW5nPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxwaGFjb2xvci5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYWNvbG9yLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyOTRmNTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYWNvbG9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YWxwaGFjb2xvcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbGF3Lmh0bWwiIHRpdGxlPSJhbGF3Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYS5odG1sIiB0aXRsZT0iYWxwaGEiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbGF3Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFscGhhLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hbHBoYWNvbG9yIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+YWxwaGFjb2xvcjwvc3Bhbj48L2gyPgotPHA+YWxwaGFjb2xvciDigJQgPGEgbmFtZT0icGx1Z2luLWFscGhhY29sb3IiPjwvYT5SR0JBIGZyb20vdG8gQVlVViBjb2xvcnNwYWNlIGNvbnZlcnNpb24gcHJlc2VydmluZyB0aGUgYWxwaGEgY2hhbm5lbDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNS4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGFscGhhY29sb3Iuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNS40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWxwaGFjb2xvci5odG1sIiB0aXRsZT0iYWxwaGFjb2xvciI+YWxwaGFjb2xvcjwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QVJHQiBmcm9tL3RvIEFZVVYgY29sb3JzcGFjZSBjb252ZXJzaW9uIHByZXNlcnZpbmcgdGhlIGFscGhhIGNoYW5uZWw8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hcGV0YWcuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXBldGFnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MTkxODMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hcGV0YWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hcGV0YWc6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxwaGEuaHRtbCIgdGl0bGU9ImFscGhhIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb2Z4Lmh0bWwiIHRpdGxlPSJhdWRpb2Z4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxwaGEuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXBldGFnIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+YXBldGFnPC9zcGFuPjwvaDI+Ci08cD5hcGV0YWcg4oCUIDxhIG5hbWU9InBsdWdpbi1hcGV0YWciPjwvYT5BUEV2MS8yIHRhZyByZWFkZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjcuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RhcGV0YWcuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNy40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguaHRtbCIgdGl0bGU9ImFwZWRlbXV4Ij5hcGVkZW11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVhZCBhbmQgb3V0cHV0IEFQRSB0YWdzIHdoaWxlIGRlbXV4aW5nIHRoZSBjb250ZW50czwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDE5NzI2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdWRpb2Z4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFwZXRhZy5odG1sIiB0aXRsZT0iYXBldGFnIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb3BhcnNlcnMuaHRtbCIgdGl0bGU9ImF1ZGlvcGFyc2VycyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFwZXRhZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb3BhcnNlcnMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZngiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5hdWRpb2Z4PC9zcGFuPjwvaDI+Ci08cD5hdWRpb2Z4IOKAlCA8YSBuYW1lPSJwbHVnaW4tYXVkaW9meCI+PC9hPkF1ZGlvIGVmZmVjdHMgcGx1Z2luPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy44LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0YXVkaW9meC5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy44LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvYW1wbGlmeS5odG1sIiB0aXRsZT0iYXVkaW9hbXBsaWZ5Ij5hdWRpb2FtcGxpZnk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFtcGxpZmllcyBhbiBhdWRpbyBzdHJlYW0gYnkgYSBnaXZlbiBmYWN0b3I8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJiYW5kLmh0bWwiIHRpdGxlPSJhdWRpb2NoZWJiYW5kIj5hdWRpb2NoZWJiYW5kPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5DaGVieXNoZXYgYmFuZCBwYXNzIGFuZCBiYW5kIHJlamVjdCBmaWx0ZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2NoZWJsaW1pdC5odG1sIiB0aXRsZT0iYXVkaW9jaGVibGltaXQiPmF1ZGlvY2hlYmxpbWl0PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5DaGVieXNoZXYgbG93IHBhc3MgYW5kIGhpZ2ggcGFzcyBmaWx0ZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2R5bmFtaWMuaHRtbCIgdGl0bGU9ImF1ZGlvZHluYW1pYyI+YXVkaW9keW5hbWljPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db21wcmVzc29yIGFuZCBFeHBhbmRlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sIiB0aXRsZT0iYXVkaW9lY2hvIj5hdWRpb2VjaG88L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFkZHMgYW4gZWNobyBvciByZXZlcmIgZWZmZWN0IHRvIGFuIGF1ZGlvIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZmlyZmlsdGVyLmh0bWwiIHRpdGxlPSJhdWRpb2ZpcmZpbHRlciI+YXVkaW9maXJmaWx0ZXI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWMgYXVkaW8gRklSIGZpbHRlciB3aXRoIGN1c3RvbSBmaWx0ZXIga2VybmVsPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9paXJmaWx0ZXIuaHRtbCIgdGl0bGU9ImF1ZGlvaWlyZmlsdGVyIj5hdWRpb2lpcmZpbHRlcjwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYyBhdWRpbyBJSVIgZmlsdGVyIHdpdGggY3VzdG9tIGZpbHRlciBrZXJuZWw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ludmVydC5odG1sIiB0aXRsZT0iYXVkaW9pbnZlcnQiPmF1ZGlvaW52ZXJ0PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Td2FwcyB1cHBlciBhbmQgbG93ZXIgaGFsZiBvZiBhdWRpbyBzYW1wbGVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9rYXJhb2tlLmh0bWwiIHRpdGxlPSJhdWRpb2thcmFva2UiPmF1ZGlva2FyYW9rZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVtb3ZlcyB2b2ljZSBmcm9tIHNvdW5kPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS5odG1sIiB0aXRsZT0iYXVkaW9wYW5vcmFtYSI+YXVkaW9wYW5vcmFtYTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UG9zaXRpb25zIGF1ZGlvIHN0cmVhbXMgaW4gdGhlIHN0ZXJlbyBwYW5vcmFtYTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvd3NpbmNiYW5kLmh0bWwiIHRpdGxlPSJhdWRpb3dzaW5jYmFuZCI+YXVkaW93c2luY2JhbmQ8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkJhbmQgcGFzcyBhbmQgYmFuZCByZWplY3Qgd2luZG93ZWQgc2luYyBmaWx0ZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCIgdGl0bGU9ImF1ZGlvd3NpbmNsaW1pdCI+YXVkaW93c2luY2xpbWl0PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Mb3cgcGFzcyBhbmQgaGlnaCBwYXNzIHdpbmRvd2VkIHNpbmMgZmlsdGVyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sIiB0aXRsZT0ic2NhbGV0ZW1wbyI+c2NhbGV0ZW1wbzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3luYyBhdWRpbyB0ZW1wbyB3aXRoIHBsYXliYWNrIHJhdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb3BhcnNlcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVkYjdiZi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5hdWRpb3BhcnNlcnM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9meC5odG1sIiB0aXRsZT0iYXVkaW9meCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVwYXJzZS5odG1sIiB0aXRsZT0iYXVwYXJzZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVwYXJzZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVkaW9wYXJzZXJzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+YXVkaW9wYXJzZXJzPC9zcGFuPjwvaDI+Ci08cD5hdWRpb3BhcnNlcnMg4oCUIDxhIG5hbWU9InBsdWdpbi1hdWRpb3BhcnNlcnMiPjwvYT5QYXJzZXJzIGZvciB2YXJpb3VzIGF1ZGlvIGZvcm1hdHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjkuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RhdWRpb3BhcnNlcnMuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuOS40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYWNwYXJzZS5odG1sIiB0aXRsZT0iYWFjcGFyc2UiPmFhY3BhcnNlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BZHZhbmNlZCBBdWRpbyBDb2RpbmcgcGFyc2VyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2UuaHRtbCIgdGl0bGU9ImFjM3BhcnNlIj5hYzNwYXJzZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QUMzIHBhcnNlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwiIHRpdGxlPSJhbXJwYXJzZSI+YW1ycGFyc2U8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFkYXB0aXZlIE11bHRpLVJhdGUgYXVkaW8gcGFyc2VyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGNhcGFyc2UuaHRtbCIgdGl0bGU9ImRjYXBhcnNlIj5kY2FwYXJzZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RENBIHBhcnNlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5odG1sIiB0aXRsZT0iZmxhY3BhcnNlIj5mbGFjcGFyc2U8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBhcnNlcyBhdWRpbyB3aXRoIHRoZSBGTEFDIGxvc3NsZXNzIGF1ZGlvIGNvZGVjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXBlZ2F1ZGlvcGFyc2UuaHRtbCIgdGl0bGU9Im1wZWdhdWRpb3BhcnNlIj5tcGVnYXVkaW9wYXJzZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGFyc2VzIGFuZCBmcmFtZXMgbXBlZzEgYXVkaW8gc3RyZWFtcyAobGV2ZWxzIDEtMyksIHByb3ZpZGVzIHNlZWs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sIiB0aXRsZT0ic2JjcGFyc2UiPnNiY3BhcnNlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXJzZXMgYW4gU0JDIGJsdWV0b290aCBhdWRpbyBzdHJlYW08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrcGFyc2UuaHRtbCIgdGl0bGU9IndhdnBhY2twYXJzZSI+d2F2cGFja3BhcnNlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XYXZwYWNrIHBhcnNlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVwYXJzZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MzllOGQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+YXVwYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb3BhcnNlcnMuaHRtbCIgdGl0bGU9ImF1ZGlvcGFyc2VycyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXV0b2RldGVjdC5odG1sIiB0aXRsZT0iYXV0b2RldGVjdCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+YXVwYXJzZTwvc3Bhbj48L2gyPgotPHA+YXVwYXJzZSDigJQgPGEgbmFtZT0icGx1Z2luLWF1cGFyc2UiPjwvYT5wYXJzZXMgYXUgc3RyZWFtczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMTAuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RhdXBhcnNlLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjEwLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXBhcnNlLmh0bWwiIHRpdGxlPSJhdXBhcnNlIj5hdXBhcnNlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXJzZSBhbiAuYXUgZmlsZSBpbnRvIHJhdyBhdWRpbzwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1dG9kZXRlY3QuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXV0b2RldGVjdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzJhMzczLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXV0b2RldGVjdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmF1dG9kZXRlY3Q6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXVwYXJzZS5odG1sIiB0aXRsZT0iYXVwYXJzZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXZpLmh0bWwiIHRpdGxlPSJhdmkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF2aS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYXV0b2RldGVjdCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmF1dG9kZXRlY3Q8L3NwYW4+PC9oMj4KLTxwPmF1dG9kZXRlY3Qg4oCUIDxhIG5hbWU9InBsdWdpbi1hdXRvZGV0ZWN0Ij48L2E+UGx1Z2luIGNvbnRhaW5zIGF1dG8tZGV0ZWN0aW9uIHBsdWdpbnMgZm9yIHZpZGVvL2F1ZGlvIGluLSBhbmQgb3V0cHV0czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMTEuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RhdXRvZGV0ZWN0LnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjExLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG9hdWRpb3NpbmsuaHRtbCIgdGl0bGU9ImF1dG9hdWRpb3NpbmsiPmF1dG9hdWRpb3Npbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPldyYXBwZXIgYXVkaW8gc2luayBmb3IgYXV0b21hdGljYWxseSBkZXRlY3RlZCBhdWRpbyBzaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmh0bWwiIHRpdGxlPSJhdXRvYXVkaW9zcmMiPmF1dG9hdWRpb3NyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V3JhcHBlciBhdWRpbyBzb3VyY2UgZm9yIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYXVkaW8gc291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b3ZpZGVvc2luay5odG1sIiB0aXRsZT0iYXV0b3ZpZGVvc2luayI+YXV0b3ZpZGVvc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V3JhcHBlciB2aWRlbyBzaW5rIGZvciBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHZpZGVvIHNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdXRvdmlkZW9zcmMuaHRtbCIgdGl0bGU9ImF1dG92aWRlb3NyYyI+YXV0b3ZpZGVvc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XcmFwcGVyIHZpZGVvIHNvdXJjZSBmb3IgYXV0b21hdGljYWxseSBkZXRlY3RlZCB2aWRlbyBzb3VyY2U8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF2aS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdmkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1MjFhOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF2aS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmF2aTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwiIHRpdGxlPSJhdXRvZGV0ZWN0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWNhc2luay5odG1sIiB0aXRsZT0iY2FjYXNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXRvZGV0ZWN0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdmkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5hdmk8L3NwYW4+PC9oMj4KLTxwPmF2aSDigJQgPGEgbmFtZT0icGx1Z2luLWF2aSI+PC9hPkFWSSBzdHJlYW0gaGFuZGxpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjEyLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0YXZpLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjEyLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aWRlbXV4Lmh0bWwiIHRpdGxlPSJhdmlkZW11eCI+YXZpZGVtdXg8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRlbXVsdGlwbGV4IGFuIGF2aSBmaWxlIGludG8gYXVkaW8gYW5kIHZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXZpbXV4Lmh0bWwiIHRpdGxlPSJhdmltdXgiPmF2aW11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TXV4ZXMgYXVkaW8gYW5kIHZpZGVvIGludG8gYW4gYXZpIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aXN1YnRpdGxlLmh0bWwiIHRpdGxlPSJhdmlzdWJ0aXRsZSI+YXZpc3VidGl0bGU8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBhcnNlIGF2aSBzdWJ0aXRsZSBzdHJlYW08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNzBkMWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWNhc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmNhY2FzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF2aS5odG1sIiB0aXRsZT0iYXZpIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWlyby5odG1sIiB0aXRsZT0iY2Fpcm8iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdmkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY2Fpcm8uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Y2FjYXNpbms8L3NwYW4+PC9oMj4KLTxwPmNhY2FzaW5rIOKAlCA8YSBuYW1lPSJwbHVnaW4tY2FjYXNpbmsiPjwvYT5Db2xvcmVkIEFTQ0lJIEFydCB2aWRlbyBzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4xMy4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGNhY2FzaW5rLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjEzLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWNhc2luay5odG1sIiB0aXRsZT0iY2FjYXNpbmsiPmNhY2FzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BIGNvbG9yZWQgQVNDSUkgYXJ0IHZpZGVvc2luazwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhaXJvLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhaXJvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWUwNDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWlyby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmNhaXJvOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rLmh0bWwiIHRpdGxlPSJjYWNhc2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyLmh0bWwiIHRpdGxlPSJjdXR0ZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWNhc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jdXR0ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhaXJvIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Y2Fpcm88L3NwYW4+PC9oMj4KLTxwPmNhaXJvIOKAlCA8YSBuYW1lPSJwbHVnaW4tY2Fpcm8iPjwvYT5DYWlyby1iYXNlZCBlbGVtZW50czwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMTQuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RjYWlyby5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4xNC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fpcm9vdmVybGF5Lmh0bWwiIHRpdGxlPSJjYWlyb292ZXJsYXkiPmNhaXJvb3ZlcmxheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVuZGVyIG92ZXJsYXkgb24gYSB2aWRlbyBzdHJlYW0gdXNpbmcgQ2Fpcm88L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jdXR0ZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNjEzMWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jdXR0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5jdXR0ZXI6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY2Fpcm8uaHRtbCIgdGl0bGU9ImNhaXJvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sIiB0aXRsZT0iZGVidWciPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jYWlyby5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Y3V0dGVyPC9zcGFuPjwvaDI+Ci08cD5jdXR0ZXIg4oCUIDxhIG5hbWU9InBsdWdpbi1jdXR0ZXIiPjwvYT5BdWRpbyBDdXR0ZXIgdG8gc3BsaXQgYXVkaW8gaW50byBub24tc2lsZW50IGJpdHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjE1LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0Y3V0dGVyLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjE1LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jdXR0ZXIuaHRtbCIgdGl0bGU9ImN1dHRlciI+Y3V0dGVyPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BdWRpbyBDdXR0ZXIgdG8gc3BsaXQgYXVkaW8gaW50byBub24tc2lsZW50IGJpdHM8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWNjYjgwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZGVidWc6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tY3V0dGVyLmh0bWwiIHRpdGxlPSJjdXR0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlaW50ZXJsYWNlLmh0bWwiIHRpdGxlPSJkZWludGVybGFjZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWN1dHRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWludGVybGFjZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWciPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5kZWJ1Zzwvc3Bhbj48L2gyPgotPHA+ZGVidWcg4oCUIDxhIG5hbWU9InBsdWdpbi1kZWJ1ZyI+PC9hPmVsZW1lbnRzIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjE2LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0ZGVidWcuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMTYuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYnJlYWtteWRhdGEuaHRtbCIgdGl0bGU9ImJyZWFrbXlkYXRhIj5icmVha215ZGF0YTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmFuZG9tbHkgY2hhbmdlIGRhdGEgaW4gdGhlIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNhcHNzZXR0ZXIuaHRtbCIgdGl0bGU9ImNhcHNzZXR0ZXIiPmNhcHNzZXR0ZXI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlNldC9tZXJnZSBjYXBzIG9uIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWNwdXJlcG9ydC5odG1sIiB0aXRsZT0iY3B1cmVwb3J0Ij5jcHVyZXBvcnQ8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBvc3QgY3B1IHVzYWdlIGluZm9ybWF0aW9uIGV2ZXJ5IGJ1ZmZlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbCIgdGl0bGU9Im5hdnNlZWsiPm5hdnNlZWs8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlNlZWsgYmFzZWQgb24gbmF2aWdhdGlvbiBrZXlzIGxlZnQtcmlnaHQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sIiB0aXRsZT0icHJvZ3Jlc3NyZXBvcnQiPnByb2dyZXNzcmVwb3J0PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QZXJpb2RpY2FsbHkgcXVlcnkgYW5kIHJlcG9ydCBvbiBwcm9jZXNzaW5nIHByb2dyZXNzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCIgdGl0bGU9InB1c2hmaWxlc3JjIj5wdXNoZmlsZXNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SW1wbGVtZW50cyBwdXNoZmlsZTovLyBVUkktaGFuZGxlciBmb3IgcHVzaC1iYXNlZCBmaWxlIGFjY2VzczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuaHRtbCIgdGl0bGU9InJuZGJ1ZmZlcnNpemUiPnJuZGJ1ZmZlcnNpemU8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPnB1bGwgcmFuZG9tIHNpemVkIGJ1ZmZlcnM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbCIgdGl0bGU9InRhZ2luamVjdCI+dGFnaW5qZWN0PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5pbmplY3QgbWV0YWRhdGEgdGFnczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmh0bWwiIHRpdGxlPSJ0ZXN0c2luayI+dGVzdHNpbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPnBlcmZvcm0gYSBudW1iZXIgb2YgdGVzdHM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlaW50ZXJsYWNlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlaW50ZXJsYWNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzBmMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWludGVybGFjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmRlaW50ZXJsYWNlOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlYnVnLmh0bWwiIHRpdGxlPSJkZWJ1ZyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGlyZWN0c291bmQuaHRtbCIgdGl0bGU9ImRpcmVjdHNvdW5kIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWcuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGlyZWN0c291bmQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlaW50ZXJsYWNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+ZGVpbnRlcmxhY2U8L3NwYW4+PC9oMj4KLTxwPmRlaW50ZXJsYWNlIOKAlCA8YSBuYW1lPSJwbHVnaW4tZGVpbnRlcmxhY2UiPjwvYT5EZWludGVybGFjZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjE3LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0ZGVpbnRlcmxhY2Uuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMTcuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsYWNlLmh0bWwiIHRpdGxlPSJkZWludGVybGFjZSI+ZGVpbnRlcmxhY2U8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRlaW50ZXJsYWNlIE1ldGhvZHMgcG9ydGVkIGZyb20gRFNjYWxlci9UdlRpbWU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kaXJlY3Rzb3VuZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kaXJlY3Rzb3VuZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDg4N2Y0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGlyZWN0c291bmQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5kaXJlY3Rzb3VuZDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWludGVybGFjZS5odG1sIiB0aXRsZT0iZGVpbnRlcmxhY2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWR0bWYuaHRtbCIgdGl0bGU9ImR0bWYiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWludGVybGFjZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdG1mLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kaXJlY3Rzb3VuZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmRpcmVjdHNvdW5kPC9zcGFuPjwvaDI+Ci08cD5kaXJlY3Rzb3VuZCDigJQgPGEgbmFtZT0icGx1Z2luLWRpcmVjdHNvdW5kIj48L2E+RGlyZWN0U291bmQgcGx1Z2luPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4xOC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGRpcmVjdHNvdW5kLmRsbDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjAuMTAuNC4xPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIENWUzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4xOC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGlyZWN0c291bmRzaW5rLmh0bWwiIHRpdGxlPSJkaXJlY3Rzb3VuZHNpbmsiPmRpcmVjdHNvdW5kc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGlyZWN0U291bmQgYXVkaW8gc2luazwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWR0bWYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHRtZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmI0MTVhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHRtZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmR0bWY6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGlyZWN0c291bmQuaHRtbCIgdGl0bGU9ImRpcmVjdHNvdW5kIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sIiB0aXRsZT0iZHYiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kaXJlY3Rzb3VuZC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHRtZiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmR0bWY8L3NwYW4+PC9oMj4KLTxwPmR0bWYg4oCUIDxhIG5hbWU9InBsdWdpbi1kdG1mIj48L2E+RFRNRiBwbHVnaW5zPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4xOS4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGR0bWYuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMTkuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHRtZnNyYy5odG1sIiB0aXRsZT0iZHRtZnNyYyI+ZHRtZnNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJhdGVzIERUTUYgdG9uZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGR0bWZkZXBheSI+cnRwZHRtZmRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HZW5lcmF0ZXMgRFRNRiBTb3VuZCBmcm9tIHRlbGVwaG9uZS1ldmVudCBSVFAgcGFja2V0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCIgdGl0bGU9InJ0cGR0bWZzcmMiPnJ0cGR0bWZzcmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyYXRlcyBSVFAgRFRNRiBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzIzOGE2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5kdjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdG1mLmh0bWwiIHRpdGxlPSJkdG1mIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwiIHRpdGxlPSJlZmZlY3R2Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHRtZi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmR2PC9zcGFuPjwvaDI+Ci08cD5kdiDigJQgPGEgbmFtZT0icGx1Z2luLWR2Ij48L2E+RFYgZGVtdXhlciBhbmQgZGVjb2RlciBiYXNlZCBvbiBsaWJkdiAobGliZHYuc2YubmV0KTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjAuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rkdi5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4yMC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5odG1sIiB0aXRsZT0iZHZkZWMiPmR2ZGVjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vc2VzIGxpYmR2IHRvIGRlY29kZSBEViB2aWRlbyAoc21wdGUzMTQpIChsaWJkdi5zb3VyY2Vmb3JnZS5uZXQpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHZkZW11eC5odG1sIiB0aXRsZT0iZHZkZW11eCI+ZHZkZW11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VXNlcyBsaWJkdiB0byBzZXBhcmF0ZSBEViBhdWRpbyBmcm9tIERWIHZpZGVvIChsaWJkdi5zb3VyY2Vmb3JnZS5uZXQpPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4ZjYyYS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+ZWZmZWN0djogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdi5odG1sIiB0aXRsZT0iZHYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVxdWFsaXplci5odG1sIiB0aXRsZT0iZXF1YWxpemVyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZHYuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZXF1YWxpemVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+ZWZmZWN0djwvc3Bhbj48L2gyPgotPHA+ZWZmZWN0diDigJQgPGEgbmFtZT0icGx1Z2luLWVmZmVjdHYiPjwvYT5lZmZlY3QgcGx1Z2lucyBmcm9tIHRoZSBlZmZlY3R2IHByb2plY3Q8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjIxLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0ZWZmZWN0di5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4yMS40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwiIHRpdGxlPSJhZ2luZ3R2Ij5hZ2luZ3R2PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BZ2luZ1RWIGFkZHMgYWdlIHRvIHZpZGVvIGlucHV0IHVzaW5nIHNjcmF0Y2hlcyBhbmQgZHVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRpY2V0di5odG1sIiB0aXRsZT0iZGljZXR2Ij5kaWNldHY8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPidEaWNlcycgdGhlIHNjcmVlbiB1cCBpbnRvIG1hbnkgc21hbGwgc3F1YXJlczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVkZ2V0di5odG1sIiB0aXRsZT0iZWRnZXR2Ij5lZGdldHY8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFwcGx5IGVkZ2UgZGV0ZWN0IG9uIHZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3B0di5odG1sIiB0aXRsZT0ib3B0diI+b3B0djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T3B0aWNhbCBhcnQgbWVldHMgcmVhbC10aW1lIHZpZGVvIGVmZmVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuaHRtbCIgdGl0bGU9InF1YXJrdHYiPnF1YXJrdHY8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPk1vdGlvbiBkaXNzb2x2ZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYuaHRtbCIgdGl0bGU9InJhZGlvYWN0diI+cmFkaW9hY3R2PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5tb3Rpb24tZW5saWdodG1lbnQgZWZmZWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCIgdGl0bGU9InJldnR2Ij5yZXZ0djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QSB2aWRlbyB3YXZlZm9ybSBtb25pdG9yIGZvciBlYWNoIGxpbmUgb2YgdmlkZW8gcHJvY2Vzc2VkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCIgdGl0bGU9InJpcHBsZXR2Ij5yaXBwbGV0djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmlwcGxlVFYgZG9lcyByaXBwbGUgbWFyayBlZmZlY3Qgb24gdGhlIHZpZGVvIGlucHV0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2Lmh0bWwiIHRpdGxlPSJzaGFnYWRlbGljdHYiPnNoYWdhZGVsaWN0djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T2ggYmVoYXZlLCBTaGFnZWRlbGljVFYgbWFrZXMgaW1hZ2VzIHNoYWdhZGVsaWMhPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCIgdGl0bGU9InN0cmVha3R2Ij5zdHJlYWt0djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3RyZWFrVFYgbWFrZXMgYWZ0ZXIgaW1hZ2VzIG9mIG1vdmluZyBvYmplY3RzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwiIHRpdGxlPSJ2ZXJ0aWdvdHYiPnZlcnRpZ290djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QSBsb29wYmFjayBhbHBoYSBibGVuZGluZyBlZmZlY3RvciB3aXRoIHJvdGF0aW5nIGFuZCBzY2FsaW5nPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwiIHRpdGxlPSJ3YXJwdHYiPndhcnB0djwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2FycFRWIGRvZXMgcmVhbHRpbWUgZ29vJ2luZyBvZiB0aGUgdmlkZW8gaW5wdXQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVxdWFsaXplci5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lcXVhbGl6ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc5Nzk3NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVxdWFsaXplci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmVxdWFsaXplcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwiIHRpdGxlPSJlZmZlY3R2Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbGFjLmh0bWwiIHRpdGxlPSJmbGFjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZWZmZWN0di5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbGFjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lcXVhbGl6ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5lcXVhbGl6ZXI8L3NwYW4+PC9oMj4KLTxwPmVxdWFsaXplciDigJQgPGEgbmFtZT0icGx1Z2luLWVxdWFsaXplciI+PC9hPkdTdHJlYW1lciBhdWRpbyBlcXVhbGl6ZXJzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4yMi4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGVxdWFsaXplci5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4yMi40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sIiB0aXRsZT0iZXF1YWxpemVyLTEwYmFuZHMiPmVxdWFsaXplci0xMGJhbmRzPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EaXJlY3QgRm9ybSAxMCBiYW5kIElJUiBlcXVhbGl6ZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItM2JhbmRzLmh0bWwiIHRpdGxlPSJlcXVhbGl6ZXItM2JhbmRzIj5lcXVhbGl6ZXItM2JhbmRzPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EaXJlY3QgRm9ybSAzIGJhbmQgSUlSIGVxdWFsaXplcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci1uYmFuZHMuaHRtbCIgdGl0bGU9ImVxdWFsaXplci1uYmFuZHMiPmVxdWFsaXplci1uYmFuZHM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRpcmVjdCBGb3JtIElJUiBlcXVhbGl6ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsYWMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmxhYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjQ5NGVhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmxhYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZsYWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZXF1YWxpemVyLmh0bWwiIHRpdGxlPSJlcXVhbGl6ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sIiB0aXRsZT0iZmx2Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZXF1YWxpemVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmxhYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmZsYWM8L3NwYW4+PC9oMj4KLTxwPmZsYWMg4oCUIDxhIG5hbWU9InBsdWdpbi1mbGFjIj48L2E+VGhlIEZMQUMgTG9zc2xlc3MgY29tcHJlc3NvciBDb2RlYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjMuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RmbGFjLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjIzLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMuaHRtbCIgdGl0bGU9ImZsYWNkZWMiPmZsYWNkZWM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRlY29kZXMgRkxBQyBsb3NzbGVzcyBhdWRpbyBzdHJlYW1zPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmxhY2VuYy5odG1sIiB0aXRsZT0iZmxhY2VuYyI+ZmxhY2VuYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RW5jb2RlcyBhdWRpbyB3aXRoIHRoZSBGTEFDIGxvc3NsZXNzIGF1ZGlvIGVuY29kZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjdGFnLmh0bWwiIHRpdGxlPSJmbGFjdGFnIj5mbGFjdGFnPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZXdyaXRlIHRhZ3MgaW4gYSBGTEFDIGZpbGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2MTcwYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmZsdjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbGFjLmh0bWwiIHRpdGxlPSJmbGFjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHhkZWMuaHRtbCIgdGl0bGU9ImZseGRlYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsYWMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx4ZGVjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHYiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5mbHY8L3NwYW4+PC9oMj4KLTxwPmZsdiDigJQgPGEgbmFtZT0icGx1Z2luLWZsdiI+PC9hPkZMViBtdXhpbmcgYW5kIGRlbXV4aW5nIHBsdWdpbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjQuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RmbHYuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjQuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2ZGVtdXguaHRtbCIgdGl0bGU9ImZsdmRlbXV4Ij5mbHZkZW11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGVtdXggRkxWIGZlZWRzIGludG8gZGlnaXRhbCBzdHJlYW1zPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZmx2bXV4Lmh0bWwiIHRpdGxlPSJmbHZtdXgiPmZsdm11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TXV4ZXMgdmlkZW8vYXVkaW8gc3RyZWFtcyBpbnRvIGEgRkxWIHN0cmVhbTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx4ZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZseGRlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTIxNTNiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx4ZGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Zmx4ZGVjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sIiB0aXRsZT0iZmx2Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCIgdGl0bGU9Imdka3BpeGJ1ZiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsdi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZseGRlYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmZseGRlYzwvc3Bhbj48L2gyPgotPHA+Zmx4ZGVjIOKAlCA8YSBuYW1lPSJwbHVnaW4tZmx4ZGVjIj48L2E+RkxDL0ZMSS9GTFggdmlkZW8gZGVjb2RlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjUuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RmbHhkZWMuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjUuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZseGRlYy5odG1sIiB0aXRsZT0iZmx4ZGVjIj5mbHhkZWM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkZMQy9GTEkvRkxYIHZpZGVvIGRlY29kZXI8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ2RrcGl4YnVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NDkwMWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5nZGtwaXhidWY6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx4ZGVjLmh0bWwiIHRpdGxlPSJmbHhkZWMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20yazEuaHRtbCIgdGl0bGU9Imdvb20yazEiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHhkZWMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbTJrMS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ2RrcGl4YnVmIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Z2RrcGl4YnVmPC9zcGFuPjwvaDI+Ci08cD5nZGtwaXhidWYg4oCUIDxhIG5hbWU9InBsdWdpbi1nZGtwaXhidWYiPjwvYT5HZGtQaXhidWYtYmFzZWQgaW1hZ2UgZGVjb2Rlciwgb3ZlcmxheSBhbmQgc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjYuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RnZGtwaXhidWYuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjYuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmZGVjLmh0bWwiIHRpdGxlPSJnZGtwaXhidWZkZWMiPmdka3BpeGJ1ZmRlYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGVjb2RlcyBpbWFnZXMgaW4gYSB2aWRlbyBzdHJlYW0gdXNpbmcgR2RrUGl4YnVmPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sIiB0aXRsZT0iZ2RrcGl4YnVmb3ZlcmxheSI+Z2RrcGl4YnVmb3ZlcmxheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T3ZlcmxheSBhbiBpbWFnZSBvbnRvIGEgdmlkZW8gc3RyZWFtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sIiB0aXRsZT0iZ2RrcGl4YnVmc2luayI+Z2RrcGl4YnVmc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T3V0cHV0IGltYWdlcyBhcyBHZGtQaXhidWYgb2JqZWN0cyBpbiBidXMgbWVzc2FnZXM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20uaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmJkNTBhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmdvb206IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbTJrMS5odG1sIiB0aXRsZT0iZ29vbTJrMSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWN5ZGVtdXguaHRtbCIgdGl0bGU9ImljeWRlbXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbTJrMS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pY3lkZW11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmdvb208L3NwYW4+PC9oMj4KLTxwPmdvb20g4oCUIDxhIG5hbWU9InBsdWdpbi1nb29tIj48L2E+R09PTSB2aXN1YWxpemF0aW9uIGZpbHRlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjguMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rnb29tLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjI4LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tLmh0bWwiIHRpdGxlPSJnb29tIj5nb29tPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UYWtlcyBmcmFtZXMgb2YgZGF0YSBhbmQgb3V0cHV0cyB2aWRlbyBmcmFtZXMgdXNpbmcgdGhlIEdPT00gZmlsdGVyPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbTJrMS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tMmsxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MWQzMTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tMmsxLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+Z29vbTJrMTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCIgdGl0bGU9Imdka3BpeGJ1ZiI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZ29vbS5odG1sIiB0aXRsZT0iZ29vbSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdka3BpeGJ1Zi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tMmsxIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Z29vbTJrMTwvc3Bhbj48L2gyPgotPHA+Z29vbTJrMSDigJQgPGEgbmFtZT0icGx1Z2luLWdvb20yazEiPjwvYT5HT09NIDJrMSB2aXN1YWxpemF0aW9uIGZpbHRlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMjcuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rnb29tMmsxLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjI3LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nb29tMmsxLmh0bWwiIHRpdGxlPSJnb29tMmsxIj5nb29tMmsxPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UYWtlcyBmcmFtZXMgb2YgZGF0YSBhbmQgb3V0cHV0cyB2aWRlbyBmcmFtZXMgdXNpbmcgdGhlIEdPT00gMmsxIGZpbHRlcjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWljeWRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWljeWRlbXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MDgzZWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pY3lkZW11eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPmljeWRlbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20uaHRtbCIgdGl0bGU9Imdvb20iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlkM2RlbXV4Lmh0bWwiIHRpdGxlPSJpZDNkZW11eCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWljeWRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+aWN5ZGVtdXg8L3NwYW4+PC9oMj4KLTxwPmljeWRlbXV4IOKAlCA8YSBuYW1lPSJwbHVnaW4taWN5ZGVtdXgiPjwvYT5EZW11eCBJQ1kgdGFncyBmcm9tIGEgc3RyZWFtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4yOS4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGljeWRlbXV4LnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjI5LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pY3lkZW11eC5odG1sIiB0aXRsZT0iaWN5ZGVtdXgiPmljeWRlbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWFkIGFuZCBvdXRwdXQgSUNZIHRhZ3Mgd2hpbGUgZGVtdXhpbmcgdGhlIGNvbnRlbnRzPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThiZmZlMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlkM2RlbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aWQzZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWN5ZGVtdXguaHRtbCIgdGl0bGU9ImljeWRlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbWFnZWZyZWV6ZS5odG1sIiB0aXRsZT0iaW1hZ2VmcmVlemUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pY3lkZW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbWFnZWZyZWV6ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5pZDNkZW11eDwvc3Bhbj48L2gyPgotPHA+aWQzZGVtdXgg4oCUIDxhIG5hbWU9InBsdWdpbi1pZDNkZW11eCI+PC9hPkRlbXV4IElEM3YxIGFuZCBJRDN2MiB0YWdzIGZyb20gYSBmaWxlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zMC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGlkM2RlbXV4LnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjMwLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sIiB0aXRsZT0iaWQzZGVtdXgiPmlkM2RlbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWFkIGFuZCBvdXRwdXQgSUQzdjEgYW5kIElEM3YyIHRhZ3Mgd2hpbGUgZGVtdXhpbmcgdGhlIGNvbnRlbnRzPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW1hZ2VmcmVlemUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW1hZ2VmcmVlemUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5YjNjNy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWltYWdlZnJlZXplLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aW1hZ2VmcmVlemU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXguaHRtbCIgdGl0bGU9ImlkM2RlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlLmh0bWwiIHRpdGxlPSJpbnRlcmxlYXZlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taWQzZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW50ZXJsZWF2ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW1hZ2VmcmVlemUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5pbWFnZWZyZWV6ZTwvc3Bhbj48L2gyPgotPHA+aW1hZ2VmcmVlemUg4oCUIDxhIG5hbWU9InBsdWdpbi1pbWFnZWZyZWV6ZSI+PC9hPlN0aWxsIGZyYW1lIHN0cmVhbSBnZW5lcmF0b3I8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjMxLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0aW1hZ2VmcmVlemUuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzEuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLmh0bWwiIHRpdGxlPSJpbWFnZWZyZWV6ZSI+aW1hZ2VmcmVlemU8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyYXRlcyBhIHN0aWxsIGZyYW1lIHN0cmVhbSBmcm9tIGFuIGltYWdlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW50ZXJsZWF2ZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYzdiMmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aW50ZXJsZWF2ZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbWFnZWZyZWV6ZS5odG1sIiB0aXRsZT0iaW1hZ2VmcmVlemUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNC5odG1sIiB0aXRsZT0iaXNvbXA0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW1hZ2VmcmVlemUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taXNvbXA0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+aW50ZXJsZWF2ZTwvc3Bhbj48L2gyPgotPHA+aW50ZXJsZWF2ZSDigJQgPGEgbmFtZT0icGx1Z2luLWludGVybGVhdmUiPjwvYT5BdWRpbyBpbnRlcmxlYXZlci9kZWludGVybGVhdmVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zMi4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGludGVybGVhdmUuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzIuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGVpbnRlcmxlYXZlLmh0bWwiIHRpdGxlPSJkZWludGVybGVhdmUiPmRlaW50ZXJsZWF2ZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3BsaXRzIG9uZSBpbnRlcmxlYXZlZCBtdWx0aWNoYW5uZWwgYXVkaW8gc3RyZWFtIGludG8gbWFueSBtb25vIGF1ZGlvIHN0cmVhbXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pbnRlcmxlYXZlLmh0bWwiIHRpdGxlPSJpbnRlcmxlYXZlIj5pbnRlcmxlYXZlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Gb2xkcyBtYW55IG1vbm8gY2hhbm5lbHMgaW50byBvbmUgaW50ZXJsZWF2ZWQgYXVkaW8gc3RyZWFtPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pc29tcDQuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taXNvbXA0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZjJlNWQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pc29tcDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+aXNvbXA0OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWludGVybGVhdmUuaHRtbCIgdGl0bGU9ImludGVybGVhdmUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2suaHRtbCIgdGl0bGU9ImphY2siPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pbnRlcmxlYXZlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2suaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPmlzb21wNDwvc3Bhbj48L2gyPgotPHA+aXNvbXA0IOKAlCA8YSBuYW1lPSJwbHVnaW4taXNvbXA0Ij48L2E+SVNPIGJhc2UgbWVkaWEgZmlsZSBmb3JtYXQgc3VwcG9ydCAobXA0LCAzZ3BwLCBxdCwgbWoyKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzMuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rpc29tcDQuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzMuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtM2dwcG11eC5odG1sIiB0aXRsZT0iM2dwcG11eCI+M2dwcG11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TXVsdGlwbGV4IGF1ZGlvIGFuZCB2aWRlbyBpbnRvIGEgM0dQUCBmaWxlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sIiB0aXRsZT0iaXNtbG11eCI+aXNtbG11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TXVsdGlwbGV4IGF1ZGlvIGFuZCB2aWRlbyBpbnRvIGEgSVNNTCBmaWxlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWoybXV4Lmh0bWwiIHRpdGxlPSJtajJtdXgiPm1qMm11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TXVsdGlwbGV4IGF1ZGlvIGFuZCB2aWRlbyBpbnRvIGEgTUoyIGZpbGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCIgdGl0bGU9Im1wNG11eCI+bXA0bXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5NdWx0aXBsZXggYXVkaW8gYW5kIHZpZGVvIGludG8gYSBNUDQgZmlsZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbCIgdGl0bGU9InF0ZGVtdXgiPnF0ZGVtdXg8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRlbXVsdGlwbGV4IGEgUXVpY2tUaW1lIGZpbGUgaW50byBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaHRtbCIgdGl0bGU9InF0bW9vdnJlY292ZXIiPnF0bW9vdnJlY292ZXI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlJlY292ZXJzIHVuZmluaXNoZWQgcXRtdXggZmlsZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sIiB0aXRsZT0icXRtdXgiPnF0bXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5NdWx0aXBsZXggYXVkaW8gYW5kIHZpZGVvIGludG8gYSBRdWlja1RpbWUgZmlsZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5Lmh0bWwiIHRpdGxlPSJydHB4cXRkZXBheSI+cnRweHF0ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIFF1aWNrdGltZSBhdWRpby92aWRlbyBmcm9tIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qYWNrLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2suaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1N2RlMC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2suaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5qYWNrOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNC5odG1sIiB0aXRsZT0iaXNvbXA0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qcGVnLmh0bWwiIHRpdGxlPSJqcGVnIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taXNvbXA0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWpwZWcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWphY2siPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5qYWNrPC9zcGFuPjwvaDI+Ci08cD5qYWNrIOKAlCA8YSBuYW1lPSJwbHVnaW4tamFjayI+PC9hPkpBQ0sgYXVkaW8gZWxlbWVudHM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjM0LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0amFjay5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zNC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwiIHRpdGxlPSJqYWNrYXVkaW9zaW5rIj5qYWNrYXVkaW9zaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5PdXRwdXQgYXVkaW8gdG8gYSBKQUNLIHNlcnZlcjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWphY2thdWRpb3NyYy5odG1sIiB0aXRsZT0iamFja2F1ZGlvc3JjIj5qYWNrYXVkaW9zcmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNhcHR1cmVzIGF1ZGlvIGZyb20gYSBKQUNLIHNlcnZlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tanBlZy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qcGVnLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MmNhOWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qcGVnLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+anBlZzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qYWNrLmh0bWwiIHRpdGxlPSJqYWNrIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1sZXZlbC5odG1sIiB0aXRsZT0ibGV2ZWwiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qYWNrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWxldmVsLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1qcGVnIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+anBlZzwvc3Bhbj48L2gyPgotPHA+anBlZyDigJQgPGEgbmFtZT0icGx1Z2luLWpwZWciPjwvYT5KUGVnIHBsdWdpbiBsaWJyYXJ5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zNS4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdGpwZWcuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzUuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2RlYy5odG1sIiB0aXRsZT0ianBlZ2RlYyI+anBlZ2RlYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGVjb2RlIGltYWdlcyBmcm9tIEpQRUcgZm9ybWF0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIiB0aXRsZT0ianBlZ2VuYyI+anBlZ2VuYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RW5jb2RlIGltYWdlcyBpbiBKUEVHIGZvcm1hdDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbGV2ZWwuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbGV2ZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhY2UwYy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWxldmVsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bGV2ZWw6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tanBlZy5odG1sIiB0aXRsZT0ianBlZyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EuaHRtbCIgdGl0bGU9Im1hdHJvc2thIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tanBlZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tYXRyb3NrYS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbGV2ZWwiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5sZXZlbDwvc3Bhbj48L2gyPgotPHA+bGV2ZWwg4oCUIDxhIG5hbWU9InBsdWdpbi1sZXZlbCI+PC9hPkF1ZGlvIGxldmVsIHBsdWdpbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzYuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RsZXZlbC5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zNi40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCIgdGl0bGU9ImxldmVsIj5sZXZlbDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Uk1TL1BlYWsvRGVjYXlpbmcgUGVhayBMZXZlbCBtZXNzYWdlciBmb3IgYXVkaW8vcmF3PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThhNjczYS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1hdHJvc2thLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bWF0cm9za2E6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbGV2ZWwuaHRtbCIgdGl0bGU9ImxldmVsIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tb25vc2NvcGUuaHRtbCIgdGl0bGU9Im1vbm9zY29wZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWxldmVsLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1vbm9zY29wZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5tYXRyb3NrYTwvc3Bhbj48L2gyPgotPHA+bWF0cm9za2Eg4oCUIDxhIG5hbWU9InBsdWdpbi1tYXRyb3NrYSI+PC9hPk1hdHJvc2thIGFuZCBXZWJNIHN0cmVhbSBoYW5kbGluZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzcuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RtYXRyb3NrYS5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zNy40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lmh0bWwiIHRpdGxlPSJtYXRyb3NrYWRlbXV4Ij5tYXRyb3NrYWRlbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EZW11eGVzIE1hdHJvc2thL1dlYk0gc3RyZWFtcyBpbnRvIHZpZGVvL2F1ZGlvL3N1YnRpdGxlczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thbXV4Lmh0bWwiIHRpdGxlPSJtYXRyb3NrYW11eCI+bWF0cm9za2FtdXg8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPk11eGVzIHZpZGVvL2F1ZGlvL3N1YnRpdGxlIHN0cmVhbXMgaW50byBhIG1hdHJvc2thIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbCIgdGl0bGU9Im1hdHJvc2thcGFyc2UiPm1hdHJvc2thcGFyc2U8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBhcnNlcyBNYXRyb3NrYS9XZWJNIHN0cmVhbXMgaW50byB2aWRlby9hdWRpby9zdWJ0aXRsZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lmh0bWwiIHRpdGxlPSJ3ZWJtbXV4Ij53ZWJtbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5NdXhlcyB2aWRlbyBhbmQgYXVkaW8gc3RyZWFtcyBpbnRvIGEgV2ViTSBzdHJlYW08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1vbm9zY29wZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tb25vc2NvcGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyMWU3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1vbm9zY29wZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm1vbm9zY29wZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tYXRyb3NrYS5odG1sIiB0aXRsZT0ibWF0cm9za2EiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwiIHRpdGxlPSJtdWxhdyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1hdHJvc2thLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tb25vc2NvcGUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5tb25vc2NvcGU8L3NwYW4+PC9oMj4KLTxwPm1vbm9zY29wZSDigJQgPGEgbmFtZT0icGx1Z2luLW1vbm9zY29wZSI+PC9hPk1vbm9zY29wZSB2aXN1YWxpemF0aW9uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy4zOC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdG1vbm9zY29wZS5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMS4zPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjM4LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tb25vc2NvcGUuaHRtbCIgdGl0bGU9Im1vbm9zY29wZSI+bW9ub3Njb3BlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EaXNwbGF5cyBhIGhpZ2hseSBzdGFiaWxpc2VkIHdhdmVmb3JtIG9mIGF1ZGlvIGlucHV0PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsYXcuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsYXcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRiMDIzOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bXVsYXc6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbW9ub3Njb3BlLmh0bWwiIHRpdGxlPSJtb25vc2NvcGUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpZmlsZS5odG1sIiB0aXRsZT0ibXVsdGlmaWxlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbW9ub3Njb3BlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpZmlsZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsYXciPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5tdWxhdzwvc3Bhbj48L2gyPgotPHA+bXVsYXcg4oCUIDxhIG5hbWU9InBsdWdpbi1tdWxhdyI+PC9hPk11TGF3IGF1ZGlvIGNvbnZlcnNpb24gcm91dGluZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjM5LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0bXVsYXcuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuMzkuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsYXdkZWMuaHRtbCIgdGl0bGU9Im11bGF3ZGVjIj5tdWxhd2RlYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29udmVydCA4Yml0IG11IGxhdyB0byAxNmJpdCBQQ008L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2VuYy5odG1sIiB0aXRsZT0ibXVsYXdlbmMiPm11bGF3ZW5jPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db252ZXJ0IDE2Yml0IFBDTSB0byA4Yml0IG11IGxhdzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpZmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzc1M2ViLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bXVsdGlmaWxlOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bGF3Lmh0bWwiIHRpdGxlPSJtdWxhdyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlwYXJ0Lmh0bWwiIHRpdGxlPSJtdWx0aXBhcnQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWxhdy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aXBhcnQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpZmlsZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPm11bHRpZmlsZTwvc3Bhbj48L2gyPgotPHA+bXVsdGlmaWxlIOKAlCA8YSBuYW1lPSJwbHVnaW4tbXVsdGlmaWxlIj48L2E+UmVhZHMvV3JpdGVzIGJ1ZmZlcnMgZnJvbS90byBzZXF1ZW50aWFsbHkgbmFtZWQgZmlsZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQwLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0bXVsdGlmaWxlLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQwLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNpbmsuaHRtbCIgdGl0bGU9Im11bHRpZmlsZXNpbmsiPm11bHRpZmlsZXNpbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPldyaXRlIGJ1ZmZlcnMgdG8gYSBzZXF1ZW50aWFsbHkgbmFtZWQgc2V0IG9mIGZpbGVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwiIHRpdGxlPSJtdWx0aWZpbGVzcmMiPm11bHRpZmlsZXNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVhZCBhIHNlcXVlbnRpYWxseSBuYW1lZCBzZXQgb2YgZmlsZXMgaW50byBidWZmZXJzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwiIHRpdGxlPSJzcGxpdGZpbGVzcmMiPnNwbGl0ZmlsZXNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVhZCBhIHNlcXVlbnRpYWxseSBuYW1lZCBzZXQgb2YgZmlsZXMgYXMgaWYgaXQgd2FzIG9uZSBsYXJnZSBmaWxlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwiIHRpdGxlPSJzcGxpdG11eHNpbmsiPnNwbGl0bXV4c2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29udmVuaWVuY2UgYmluIHRoYXQgbXV4ZXMgaW5jb21pbmcgc3RyZWFtcyBpbnRvIG11bHRpcGxlIHRpbWUvc2l6ZSBsaW1pdGVkIGZpbGVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCIgdGl0bGU9InNwbGl0bXV4c3JjIj5zcGxpdG11eHNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlIHRoYXQgcmVhZHMgYSBzZXQgb2YgZmlsZXMgY3JlYXRlZCBieSBzcGxpdG11eHNpbms8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpcGFydC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aXBhcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVhYWNlOC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW11bHRpcGFydC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm11bHRpcGFydDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aWZpbGUuaHRtbCIgdGl0bGU9Im11bHRpZmlsZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbmF2aWdhdGlvbnRlc3QuaHRtbCIgdGl0bGU9Im5hdmlnYXRpb250ZXN0Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW5hdmlnYXRpb250ZXN0Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aXBhcnQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5tdWx0aXBhcnQ8L3NwYW4+PC9oMj4KLTxwPm11bHRpcGFydCDigJQgPGEgbmFtZT0icGx1Z2luLW11bHRpcGFydCI+PC9hPm11bHRpcGFydCBzdHJlYW0gbWFuaXB1bGF0aW9uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40MS4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdG11bHRpcGFydC5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40MS40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXBhcnRkZW11eC5odG1sIiB0aXRsZT0ibXVsdGlwYXJ0ZGVtdXgiPm11bHRpcGFydGRlbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5kZW11eCBtdWx0aXBhcnQgc3RyZWFtczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydG11eC5odG1sIiB0aXRsZT0ibXVsdGlwYXJ0bXV4Ij5tdWx0aXBhcnRtdXg8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPm11eCBtdWx0aXBhcnQgc3RyZWFtczwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbmF2aWdhdGlvbnRlc3QuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbmF2aWdhdGlvbnRlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MwNjY4Yi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW5hdmlnYXRpb250ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+bmF2aWdhdGlvbnRlc3Q6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlwYXJ0Lmh0bWwiIHRpdGxlPSJtdWx0aXBhcnQiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zczQuaHRtbCIgdGl0bGU9Im9zczQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aXBhcnQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzNC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbmF2aWdhdGlvbnRlc3QiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5uYXZpZ2F0aW9udGVzdDwvc3Bhbj48L2gyPgotPHA+bmF2aWdhdGlvbnRlc3Qg4oCUIDxhIG5hbWU9InBsdWdpbi1uYXZpZ2F0aW9udGVzdCI+PC9hPlRlbXBsYXRlIGZvciBhIHZpZGVvIGZpbHRlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNDIuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RuYXZpZ2F0aW9udGVzdC5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40Mi40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbmF2aWdhdGlvbnRlc3QuaHRtbCIgdGl0bGU9Im5hdmlnYXRpb250ZXN0Ij5uYXZpZ2F0aW9udGVzdDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SGFuZGxlIG5hdmlnYXRpb24gZXZlbnRzIHNob3dpbmcgYSBibGFjayBzcXVhcmUgZm9sbG93aW5nIG1vdXNlIHBvaW50ZXI8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3M0Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zczQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYzYjBlZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zczQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vc3M0OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW5hdmlnYXRpb250ZXN0Lmh0bWwiIHRpdGxlPSJuYXZpZ2F0aW9udGVzdCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzYXVkaW8uaHRtbCIgdGl0bGU9Im9zc2F1ZGlvIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbmF2aWdhdGlvbnRlc3QuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzYXVkaW8uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zczQiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5vc3M0PC9zcGFuPjwvaDI+Ci08cD5vc3M0IOKAlCA8YSBuYW1lPSJwbHVnaW4tb3NzNCI+PC9hPk9wZW4gU291bmQgU3lzdGVtIChPU1MpIHZlcnNpb24gNCBzdXBwb3J0IGZvciBHU3RyZWFtZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQzLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0b3NzNGF1ZGlvLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQzLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmh0bWwiIHRpdGxlPSJvc3M0c2luayI+b3NzNHNpbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPk91dHB1dCB0byBhIHNvdW5kIGNhcmQgdmlhIE9TUyB2ZXJzaW9uIDQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3M0c3JjLmh0bWwiIHRpdGxlPSJvc3M0c3JjIj5vc3M0c3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5DYXB0dXJlIGZyb20gYSBzb3VuZCBjYXJkIHZpYSBPU1MgdmVyc2lvbiA0PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3NhdWRpby5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3NhdWRpby5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTdkNzU2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzYXVkaW8uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5vc3NhdWRpbzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3M0Lmh0bWwiIHRpdGxlPSJvc3M0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3hhdWRpby5odG1sIiB0aXRsZT0ib3N4YXVkaW8iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3M0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeGF1ZGlvLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3NhdWRpbyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPm9zc2F1ZGlvPC9zcGFuPjwvaDI+Ci08cD5vc3NhdWRpbyDigJQgPGEgbmFtZT0icGx1Z2luLW9zc2F1ZGlvIj48L2E+T1NTIChPcGVuIFNvdW5kIFN5c3RlbSkgc3VwcG9ydCBmb3IgR1N0cmVhbWVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40NC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdG9zc2F1ZGlvLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ0LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NpbmsuaHRtbCIgdGl0bGU9Im9zc3NpbmsiPm9zc3Npbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPk91dHB1dCB0byBhIHNvdW5kIGNhcmQgdmlhIE9TUzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zc3NyYy5odG1sIiB0aXRsZT0ib3Nzc3JjIj5vc3NzcmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNhcHR1cmUgZnJvbSBhIHNvdW5kIGNhcmQgdmlhIE9TUzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4YXVkaW8uaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4YXVkaW8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNmNmU2MS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeGF1ZGlvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+b3N4YXVkaW86IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzYXVkaW8uaHRtbCIgdGl0bGU9Im9zc2F1ZGlvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3h2aWRlby5odG1sIiB0aXRsZT0ib3N4dmlkZW8iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3NhdWRpby5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3h2aWRlby5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4YXVkaW8iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5vc3hhdWRpbzwvc3Bhbj48L2gyPgotPHA+b3N4YXVkaW8g4oCUIDxhIG5hbWU9InBsdWdpbi1vc3hhdWRpbyI+PC9hPk9TWCAoTWFjIE9TIFgpIGF1ZGlvIHN1cHBvcnQgZm9yIEdTdHJlYW1lcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNDUuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rvc3hhdWRpby5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjAuMTAuNS4xPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIENWUy9wcmVyZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ1LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luay5odG1sIiB0aXRsZT0ib3N4YXVkaW9zaW5rIj5vc3hhdWRpb3Npbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPk91dHB1dCB0byBhIHNvdW5kIGNhcmQgaW4gT1MgWDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc3JjLmh0bWwiIHRpdGxlPSJvc3hhdWRpb3NyYyI+b3N4YXVkaW9zcmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPklucHV0IGZyb20gYSBzb3VuZCBjYXJkIGluIE9TIFg8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeHZpZGVvLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeHZpZGVvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMGU1YjMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3h2aWRlby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPm9zeHZpZGVvOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeGF1ZGlvLmh0bWwiIHRpdGxlPSJvc3hhdWRpbyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcG5nLmh0bWwiIHRpdGxlPSJwbmciPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3hhdWRpby5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wbmcuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeHZpZGVvIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+b3N4dmlkZW88L3NwYW4+PC9oMj4KLTxwPm9zeHZpZGVvIOKAlCA8YSBuYW1lPSJwbHVnaW4tb3N4dmlkZW8iPjwvYT5PU1ggbmF0aXZlIHZpZGVvIG91dHB1dCBwbHVnaW48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ2LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0b3N4dmlkZW8uc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4wLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R3N0cmVhbWVyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40Ni40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwiIHRpdGxlPSJvc3h2aWRlb3NpbmsiPm9zeHZpZGVvc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T1NYIG5hdGl2ZSB2aWRlb3Npbms8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wbmcuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcG5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NjJjZTcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5wbmc6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4dmlkZW8uaHRtbCIgdGl0bGU9Im9zeHZpZGVvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvLmh0bWwiIHRpdGxlPSJwdWxzZWF1ZGlvIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3N4dmlkZW8uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcHVsc2VhdWRpby5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcG5nIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+cG5nPC9zcGFuPjwvaDI+Ci08cD5wbmcg4oCUIDxhIG5hbWU9InBsdWdpbi1wbmciPjwvYT5QTkcgcGx1Z2luIGxpYnJhcnk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ3LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0cG5nLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ3LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy5odG1sIiB0aXRsZT0icG5nZGVjIj5wbmdkZWM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRlY29kZSBhIHBuZyB2aWRlbyBmcmFtZSB0byBhIHJhdyBpbWFnZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5odG1sIiB0aXRsZT0icG5nZW5jIj5wbmdlbmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkVuY29kZSBhIHZpZGVvIGZyYW1lIHRvIGEgLnBuZyBpbWFnZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcHVsc2VhdWRpby5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzI0OGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cHVsc2VhdWRpbzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wbmcuaHRtbCIgdGl0bGU9InBuZyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sIiB0aXRsZT0icmVwbGF5Z2FpbiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXBuZy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1yZXBsYXlnYWluLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+cHVsc2VhdWRpbzwvc3Bhbj48L2gyPgotPHA+cHVsc2VhdWRpbyDigJQgPGEgbmFtZT0icGx1Z2luLXB1bHNlYXVkaW8iPjwvYT5QdWxzZUF1ZGlvIHBsdWdpbiBsaWJyYXJ5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy40OC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdHB1bHNlLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ4LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIiB0aXRsZT0icHVsc2VzaW5rIj5wdWxzZXNpbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBsYXlzIGF1ZGlvIHRvIGEgUHVsc2VBdWRpbyBzZXJ2ZXI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sIiB0aXRsZT0icHVsc2VzcmMiPnB1bHNlc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5DYXB0dXJlcyBhdWRpbyBmcm9tIGEgUHVsc2VBdWRpbyBzZXJ2ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJlcGxheWdhaW4uaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDdjZWRhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJlcGxheWdhaW46IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcHVsc2VhdWRpby5odG1sIiB0aXRsZT0icHVsc2VhdWRpbyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sIiB0aXRsZT0icnRwbWFuYWdlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXB1bHNlYXVkaW8uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2FpbiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnJlcGxheWdhaW48L3NwYW4+PC9oMj4KLTxwPnJlcGxheWdhaW4g4oCUIDxhIG5hbWU9InBsdWdpbi1yZXBsYXlnYWluIj48L2E+UmVwbGF5R2FpbiB2b2x1bWUgbm9ybWFsaXphdGlvbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNDkuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RyZXBsYXlnYWluLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjQ5LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCIgdGl0bGU9InJnYW5hbHlzaXMiPnJnYW5hbHlzaXM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBlcmZvcm0gdGhlIFJlcGxheUdhaW4gYW5hbHlzaXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuaHRtbCIgdGl0bGU9InJnbGltaXRlciI+cmdsaW1pdGVyPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BcHBseSBzaWduYWwgY29tcHJlc3Npb24gdG8gcmF3IGF1ZGlvIGRhdGE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sIiB0aXRsZT0icmd2b2x1bWUiPnJndm9sdW1lPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BcHBseSBSZXBsYXlHYWluIHZvbHVtZSBhZGp1c3RtZW50PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NWI2YmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQyMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCIgdGl0bGU9InJ0cG1hbmFnZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0c3AuaHRtbCIgdGl0bGU9InJ0c3AiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHBtYW5hZ2VyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0c3AuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnJ0cDwvc3Bhbj48L2gyPgotPHA+cnRwIOKAlCA8YSBuYW1lPSJwbHVnaW4tcnRwIj48L2E+UmVhbC10aW1lIHByb3RvY29sIHBsdWdpbnM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjUxLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0cnRwLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjUxLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzdGVyaXNraDI2My5odG1sIiB0aXRsZT0iYXN0ZXJpc2toMjYzIj5hc3Rlcmlza2gyNjM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEgyNjMgdmlkZW8gZnJvbSBSVFAgYW5kIGVuY29kZXMgaW4gQXN0ZXJpc2sgSDI2MyBmb3JtYXQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5odG1sIiB0aXRsZT0icnRwTDE2ZGVwYXkiPnJ0cEwxNmRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyByYXcgYXVkaW8gZnJvbSBSVFAgcGFja2V0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5odG1sIiB0aXRsZT0icnRwTDE2cGF5Ij5ydHBMMTZwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQtZW5jb2RlIFJhdyBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMzU1MSk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRkZXBheS5odG1sIiB0aXRsZT0icnRwTDI0ZGVwYXkiPnJ0cEwyNGRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyByYXcgMjQtYml0IGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkuaHRtbCIgdGl0bGU9InJ0cEwyNHBheSI+cnRwTDI0cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZSBSYXcgMjQtYml0IGF1ZGlvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzMTkwKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBhYzNkZXBheSI+cnRwYWMzZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEFDMyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgNDE4NCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNwYXkuaHRtbCIgdGl0bGU9InJ0cGFjM3BheSI+cnRwYWMzcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkIEFDMyBhdWRpbyBhcyBSVFAgcGFja2V0cyAoUkZDIDQxODQpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGFtcmRlcGF5Ij5ydHBhbXJkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgQU1SIG9yIEFNUi1XQiBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzI2Nyk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuaHRtbCIgdGl0bGU9InJ0cGFtcnBheSI+cnRwYW1ycGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZSBBTVIgb3IgQU1SLVdCIGF1ZGlvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzMjY3KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGJ2ZGVwYXkiPnJ0cGJ2ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEJyb2FkY29tVm9pY2UgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDQyOTgpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkuaHRtbCIgdGl0bGU9InJ0cGJ2cGF5Ij5ydHBidnBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGFja2V0aXplIEJyb2FkY29tVm9pY2UgYXVkaW8gc3RyZWFtcyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNDI5OCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGNlbHRkZXBheSI+cnRwY2VsdGRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBDRUxUIGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lmh0bWwiIHRpdGxlPSJydHBjZWx0cGF5Ij5ydHBjZWx0cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgQ0VMVCBhdWRpbyBpbnRvIGEgUlRQIHBhY2tldDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGR2ZGVwYXkiPnJ0cGR2ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRlcGF5bG9hZHMgRFYgZnJvbSBSVFAgcGFja2V0cyAoUkZDIDMxODkpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkuaHRtbCIgdGl0bGU9InJ0cGR2cGF5Ij5ydHBkdnBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZHMgRFYgaW50byBSVFAgcGFja2V0cyAoUkZDIDMxODkpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzIyZGVwYXkiPnJ0cGc3MjJkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgRzcyMiBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5odG1sIiB0aXRsZT0icnRwZzcyMnBheSI+cnRwZzcyMnBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZC1lbmNvZGUgUmF3IGF1ZGlvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzNTUxKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5odG1sIiB0aXRsZT0icnRwZzcyM2RlcGF5Ij5ydHBnNzIzZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEcuNzIzIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzNTUxKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjNwYXkiPnJ0cGc3MjNwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBhY2tldGl6ZSBHLjcyMyBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzI2ZGVwYXkiPnJ0cGc3MjZkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgRy43MjYgYXVkaW8gZnJvbSBSVFAgcGFja2V0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjZwYXkiPnJ0cGc3MjZwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQtZW5jb2RlcyBHLjcyNiBhdWRpbyBpbnRvIGEgUlRQIHBhY2tldDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sIiB0aXRsZT0icnRwZzcyOWRlcGF5Ij5ydHBnNzI5ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEcuNzI5IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzNTUxKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjlwYXkiPnJ0cGc3MjlwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBhY2tldGl6ZSBHLjcyOSBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGdzbWRlcGF5Ij5ydHBnc21kZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgR1NNIGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuaHRtbCIgdGl0bGU9InJ0cGdzbXBheSI+cnRwZ3NtcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgR1NNIGF1ZGlvIGludG8gYSBSVFAgcGFja2V0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGdzdGRlcGF5Ij5ydHBnc3RkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgR1N0cmVhbWVyIGJ1ZmZlcnMgZnJvbSBSVFAgcGFja2V0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5odG1sIiB0aXRsZT0icnRwZ3N0cGF5Ij5ydHBnc3RwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQgR1N0cmVhbWVyIGJ1ZmZlcnMgYXMgUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjFkZXBheSI+cnRwaDI2MWRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBIMjYxIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA0NTg3KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjFwYXkiPnJ0cGgyNjFwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQtZW5jb2RlcyBIMjYxIHZpZGVvIGluIFJUUCBwYWNrZXRzIChSRkMgNDU4Nyk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNkZXBheSI+cnRwaDI2M2RlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBIMjYzIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAyMTkwKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNwYXkiPnJ0cGgyNjNwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQtZW5jb2RlcyBIMjYzIHZpZGVvIGluIFJUUCBwYWNrZXRzIChSRkMgMjE5MCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBoMjYzcGRlcGF5Ij5ydHBoMjYzcGRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBIMjYzLysvKysgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDQ2MjkpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNwcGF5Ij5ydHBoMjYzcHBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZC1lbmNvZGVzIEgyNjMvKy8rKyB2aWRlbyBpbiBSVFAgcGFja2V0cyAoUkZDIDQ2MjkpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBoMjY0ZGVwYXkiPnJ0cGgyNjRkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgSDI2NCB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzk4NCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lmh0bWwiIHRpdGxlPSJydHBoMjY0cGF5Ij5ydHBoMjY0cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZSBIMjY0IHZpZGVvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzOTg0KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5odG1sIiB0aXRsZT0icnRwaDI2NWRlcGF5Ij5ydHBoMjY1ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEgyNjUgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDc3OTgpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5odG1sIiB0aXRsZT0icnRwaDI2NXBheSI+cnRwaDI2NXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZC1lbmNvZGUgSDI2NSB2aWRlbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNzc5OCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGlsYmNkZXBheSI+cnRwaWxiY2RlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBpTEJDIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzOTUyKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkuaHRtbCIgdGl0bGU9InJ0cGlsYmNwYXkiPnJ0cGlsYmNwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBhY2tldGl6ZSBpTEJDIGF1ZGlvIHN0cmVhbXMgaW50byBSVFAgcGFja2V0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBqMmtkZXBheSI+cnRwajJrZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEpQRUcgMjAwMCB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgNTM3MSk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuaHRtbCIgdGl0bGU9InJ0cGoya3BheSI+cnRwajJrcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgSlBFRyAyMDAwIHBpY3R1cmVzIGludG8gUlRQIHBhY2tldHMgKFJGQyA1MzcxKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5odG1sIiB0aXRsZT0icnRwanBlZ2RlcGF5Ij5ydHBqcGVnZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIEpQRUcgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDI0MzUpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sIiB0aXRsZT0icnRwanBlZ3BheSI+cnRwanBlZ3BheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZC1lbmNvZGVzIEpQRUcgcGljdHVyZXMgaW50byBSVFAgcGFja2V0cyAoUkZDIDI0MzUpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGtsdmRlcGF5Ij5ydHBrbHZkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgS0xWIChTTVBURSBTVCAzMzYpIG1ldGFkYXRhIGZyb20gUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuaHRtbCIgdGl0bGU9InJ0cGtsdnBheSI+cnRwa2x2cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkcyBLTFYgKFNNUFRFIFNUIDMzNikgbWV0YWRhdGEgYXMgUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wMXNkZXBheSI+cnRwbXAxc2RlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBNUEVHMSBTeXN0ZW0gU3RyZWFtcyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzU1NSk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wMnRkZXBheSI+cnRwbXAydGRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBNUEVHMiBUUyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjI1MCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0cGF5Lmh0bWwiIHRpdGxlPSJydHBtcDJ0cGF5Ij5ydHBtcDJ0cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgTVBFRzIgVFMgaW50byBSVFAgcGFja2V0cyAoUkZDIDIyNTApPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YWRlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDRhZGVwYXkiPnJ0cG1wNGFkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgTVBFRzQgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDMwMTYpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5odG1sIiB0aXRsZT0icnRwbXA0YXBheSI+cnRwbXA0YXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZCBNUEVHNCBhdWRpbyBhcyBSVFAgcGFja2V0cyAoUkZDIDMwMTYpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDRnZGVwYXkiPnJ0cG1wNGdkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgTVBFRzQgZWxlbWVudGFyeSBzdHJlYW1zIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzNjQwKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkuaHRtbCIgdGl0bGU9InJ0cG1wNGdwYXkiPnJ0cG1wNGdwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQgTVBFRzQgZWxlbWVudGFyeSBzdHJlYW1zIGFzIFJUUCBwYWNrZXRzIChSRkMgMzY0MCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wNHZkZXBheSI+cnRwbXA0dmRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBNUEVHNCB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzAxNik8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5Lmh0bWwiIHRpdGxlPSJydHBtcDR2cGF5Ij5ydHBtcDR2cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkIE1QRUctNCB2aWRlbyBhcyBSVFAgcGFja2V0cyAoUkZDIDMwMTYpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wYWRlcGF5Ij5ydHBtcGFkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgTVBFRyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjAzOCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkuaHRtbCIgdGl0bGU9InJ0cG1wYXBheSI+cnRwbXBhcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkIE1QRUcgYXVkaW8gYXMgUlRQIHBhY2tldHMgKFJGQyAyMDM4KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXJvYnVzdGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcGFyb2J1c3RkZXBheSI+cnRwbXBhcm9idXN0ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIE1QRUcgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDUyMTkpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wdmRlcGF5Ij5ydHBtcHZkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgTVBFRyB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjI1MCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCIgdGl0bGU9InJ0cG1wdnBheSI+cnRwbXB2cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgTVBFRzIgRVMgaW50byBSVFAgcGFja2V0cyAoUkZDIDIyNTApPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBvcHVzZGVwYXkiPnJ0cG9wdXNkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgT3B1cyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS5odG1sIiB0aXRsZT0icnRwb3B1c3BheSI+cnRwb3B1c3BheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UHV0cyBPcHVzIGF1ZGlvIGluIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5Lmh0bWwiIHRpdGxlPSJydHBwY21hZGVwYXkiPnJ0cHBjbWFkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgUENNQSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5odG1sIiB0aXRsZT0icnRwcGNtYXBheSI+cnRwcGNtYXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZC1lbmNvZGVzIFBDTUEgYXVkaW8gaW50byBhIFJUUCBwYWNrZXQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHBjbXVkZXBheSI+cnRwcGNtdWRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBQQ01VIGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5Lmh0bWwiIHRpdGxlPSJydHBwY211cGF5Ij5ydHBwY211cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgUENNVSBhdWRpbyBpbnRvIGEgUlRQIHBhY2tldDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFjZWxwZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHFjZWxwZGVwYXkiPnJ0cHFjZWxwZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIFFDRUxQIChQdXJlVm9pY2UpIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAyNjU4KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5odG1sIiB0aXRsZT0icnRwcWRtMmRlcGF5Ij5ydHBxZG0yZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIFFETTIgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAobm8gUkZDKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBzYmNkZXBheSI+cnRwc2JjZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIFNCQyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lmh0bWwiIHRpdGxlPSJydHBzYmNwYXkiPnJ0cHNiY3BheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZCBTQkMgYXVkaW8gYXMgUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzaXJlbmRlcGF5Ij5ydHBzaXJlbmRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBTaXJlbiBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkuaHRtbCIgdGl0bGU9InJ0cHNpcmVucGF5Ij5ydHBzaXJlbnBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGFja2V0aXplIFNpcmVuIGF1ZGlvIHN0cmVhbXMgaW50byBSVFAgcGFja2V0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHNwZWV4ZGVwYXkiPnJ0cHNwZWV4ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIFNwZWV4IGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sIiB0aXRsZT0icnRwc3BlZXhwYXkiPnJ0cHNwZWV4cGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkLWVuY29kZXMgU3BlZXggYXVkaW8gaW50byBhIFJUUCBwYWNrZXQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5odG1sIiB0aXRsZT0icnRwc3RyZWFtZGVwYXkiPnJ0cHN0cmVhbWRlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EZXBheWxvYWRzIFJUUC9SVENQIHBhY2tldHMgZm9yIHN0cmVhbWluZyBwcm90b2NvbHMgYWNjb3JkaW5nIHRvIFJGQzQ1NzE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuaHRtbCIgdGl0bGU9InJ0cHN0cmVhbXBheSI+cnRwc3RyZWFtcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXlsb2FkcyBSVFAvUlRDUCBwYWNrZXRzIGZvciBzdHJlYW1pbmcgcHJvdG9jb2xzIGFjY29yZGluZyB0byBSRkM0NTcxPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzdjN2ZGVwYXkiPnJ0cHN2M3ZkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgU1ZRMyB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChubyBSRkMpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHRoZW9yYWRlcGF5Ij5ydHB0aGVvcmFkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgVGhlb3JhIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKGRyYWZ0LTAxIG9mIFJGQyBYWFhYKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sIiB0aXRsZT0icnRwdGhlb3JhcGF5Ij5ydHB0aGVvcmFwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQtZW5jb2RlIFRoZW9yYSB2aWRlbyBpbnRvIFJUUCBwYWNrZXRzIChkcmFmdC0wMSBSRkMgWFhYWCk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5odG1sIiB0aXRsZT0icnRwdm9yYmlzZGVwYXkiPnJ0cHZvcmJpc2RlcGF5PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FeHRyYWN0cyBWb3JiaXMgQXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDUyMTUpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzcGF5Lmh0bWwiIHRpdGxlPSJydHB2b3JiaXNwYXkiPnJ0cHZvcmJpc3BheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGF5bG9hZC1lbmNvZGUgVm9yYmlzIGF1ZGlvIGludG8gUlRQIHBhY2tldHMgKFJGQyA1MjE1KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOGRlcGF5Lmh0bWwiIHRpdGxlPSJydHB2cDhkZXBheSI+cnRwdnA4ZGVwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkV4dHJhY3RzIFZQOCB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzKTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sIiB0aXRsZT0icnRwdnA4cGF5Ij5ydHB2cDhwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlB1dHMgVlA4IHZpZGVvIGluIFJUUCBwYWNrZXRzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHZwOWRlcGF5Ij5ydHB2cDlkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgVlA5IHZpZGVvIGZyb20gUlRQIHBhY2tldHMpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5Lmh0bWwiIHRpdGxlPSJydHB2cDlwYXkiPnJ0cHZwOXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UHV0cyBWUDkgdmlkZW8gaW4gUlRQIHBhY2tldHMpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5Lmh0bWwiIHRpdGxlPSJydHB2cmF3ZGVwYXkiPnJ0cHZyYXdkZXBheTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RXh0cmFjdHMgcmF3IHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA0MTc1KTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkuaHRtbCIgdGl0bGU9InJ0cHZyYXdwYXkiPnJ0cHZyYXdwYXk8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlBheWxvYWQgcmF3IHZpZGVvIGFzIFJUUCBwYWNrZXRzIChSRkMgNDE3NSk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzE5MjAxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtYW5hZ2VyOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJlcGxheWdhaW4uaHRtbCIgdGl0bGU9InJlcGxheWdhaW4iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sIiB0aXRsZT0icnRwIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5ydHBtYW5hZ2VyPC9zcGFuPjwvaDI+Ci08cD5ydHBtYW5hZ2VyIOKAlCA8YSBuYW1lPSJwbHVnaW4tcnRwbWFuYWdlciI+PC9hPlJUUCBzZXNzaW9uIG1hbmFnZW1lbnQgcGx1Z2luIGxpYnJhcnk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjUwLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0cnRwbWFuYWdlci5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy41MC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCIgdGl0bGU9InJ0cGJpbiI+cnRwYmluPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWFsLVRpbWUgVHJhbnNwb3J0IFByb3RvY29sIGJpbjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbCIgdGl0bGU9InJ0cGR0bWZtdXgiPnJ0cGR0bWZtdXg8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPm1peGVzIFJUUCBEVE1GIHN0cmVhbXMgaW50byBvdGhlciBSVFAgc3RyZWFtczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sIiB0aXRsZT0icnRwaml0dGVyYnVmZmVyIj5ydHBqaXR0ZXJidWZmZXI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkEgYnVmZmVyIHRoYXQgZGVhbHMgd2l0aCBuZXR3b3JrIGppdHRlciBhbmQgb3RoZXIgdHJhbnNtaXNzaW9uIGZhdWx0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sIiB0aXRsZT0icnRwbXV4Ij5ydHBtdXg8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPm11bHRpcGxleCBOIHJ0cCBzdHJlYW1zIGludG8gb25lPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sIiB0aXRsZT0icnRwcHRkZW11eCI+cnRwcHRkZW11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGFyc2VzIGNvZGVjIHN0cmVhbXMgdHJhbnNtaXR0ZWQgaW4gdGhlIHNhbWUgUlRQIHNlc3Npb248L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS5odG1sIiB0aXRsZT0icnRwcnR4cXVldWUiPnJ0cHJ0eHF1ZXVlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5LZWVwIFJUUCBwYWNrZXRzIGluIGEgcXVldWUgZm9yIHJldHJhbnNtaXNzaW9uPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5odG1sIiB0aXRsZT0icnRwcnR4cmVjZWl2ZSI+cnRwcnR4cmVjZWl2ZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVjZWl2ZSByZXRyYW5zbWl0dGVkIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkM0NTg4PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sIiB0aXRsZT0icnRwcnR4c2VuZCI+cnRwcnR4c2VuZDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmV0cmFuc21pdCBSVFAgcGFja2V0cyB3aGVuIG5lZWRlZCwgYWNjb3JkaW5nIHRvIFJGQzQ1ODg8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwiIHRpdGxlPSJydHBzZXNzaW9uIj5ydHBzZXNzaW9uPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5JbXBsZW1lbnQgYW4gUlRQIHNlc3Npb248L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbCIgdGl0bGU9InJ0cHNzcmNkZW11eCI+cnRwc3NyY2RlbXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TcGxpdHMgUlRQIHN0cmVhbXMgYmFzZWQgb24gdGhlIFNTUkM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0c3AuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRzcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGFjY2MxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRzcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0c3A6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwiIHRpdGxlPSJydHAiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNoYXBld2lwZS5odG1sIiB0aXRsZT0ic2hhcGV3aXBlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNoYXBld2lwZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRzcCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnJ0c3A8L3NwYW4+PC9oMj4KLTxwPnJ0c3Ag4oCUIDxhIG5hbWU9InBsdWdpbi1ydHNwIj48L2E+dHJhbnNmZXIgZGF0YSB2aWEgUlRTUDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTIuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RydHNwLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjUyLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sIiB0aXRsZT0icnRwZGVjIj5ydHBkZWM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFjY2VwdHMgcmF3IFJUUCBhbmQgUlRDUCBwYWNrZXRzIGFuZCBzZW5kcyB0aGVtIGZvcndhcmQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwiIHRpdGxlPSJydHNwc3JjIj5ydHNwc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWNlaXZlIGRhdGEgb3ZlciB0aGUgbmV0d29yayB2aWEgUlRTUCAoUkZDIDIzMjYpPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zaGFwZXdpcGUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hhcGV3aXBlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODE0OTEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zaGFwZXdpcGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zaGFwZXdpcGU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRzcC5odG1sIiB0aXRsZT0icnRzcCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hvdXQyc2VuZC5odG1sIiB0aXRsZT0ic2hvdXQyc2VuZCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0c3AuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hvdXQyc2VuZC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hhcGV3aXBlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+c2hhcGV3aXBlPC9zcGFuPjwvaDI+Ci08cD5zaGFwZXdpcGUg4oCUIDxhIG5hbWU9InBsdWdpbi1zaGFwZXdpcGUiPjwvYT5TaGFwZSBXaXBlIHRyYW5zaXRpb24gZmlsdGVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy41My4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdHNoYXBld2lwZS5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy41My40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhcGV3aXBlLmh0bWwiIHRpdGxlPSJzaGFwZXdpcGUiPnNoYXBld2lwZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QWRkcyBhIHNoYXBlIHdpcGUgdHJhbnNpdGlvbiB0byBhIHZpZGVvIHN0cmVhbTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNob3V0MnNlbmQuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hvdXQyc2VuZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWRmN2I0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hvdXQyc2VuZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNob3V0MnNlbmQ6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hhcGV3aXBlLmh0bWwiIHRpdGxlPSJzaGFwZXdpcGUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNtcHRlLmh0bWwiIHRpdGxlPSJzbXB0ZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNoYXBld2lwZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zbXB0ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hvdXQyc2VuZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnNob3V0MnNlbmQ8L3NwYW4+PC9oMj4KLTxwPnNob3V0MnNlbmQg4oCUIDxhIG5hbWU9InBsdWdpbi1zaG91dDJzZW5kIj48L2E+U2VuZHMgZGF0YSB0byBhbiBpY2VjYXN0IHNlcnZlciB1c2luZyBsaWJzaG91dDI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjU0LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0c2hvdXQyLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYnNob3V0MjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+aHR0cDovL3d3dy5pY2VjYXN0Lm9yZy9kb3dubG9hZC5odG1sPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjU0LjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwiIHRpdGxlPSJzaG91dDJzZW5kIj5zaG91dDJzZW5kPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZW5kcyBkYXRhIHRvIGFuIGljZWNhc3Qgc2VydmVyPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUzOWQyNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNtcHRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+c21wdGU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc2hvdXQyc2VuZC5odG1sIiB0aXRsZT0ic2hvdXQyc2VuZCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc291cC5odG1sIiB0aXRsZT0ic291cCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNob3V0MnNlbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc291cC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5zbXB0ZTwvc3Bhbj48L2gyPgotPHA+c21wdGUg4oCUIDxhIG5hbWU9InBsdWdpbi1zbXB0ZSI+PC9hPkFwcGx5IHRoZSBzdGFuZGFyZCBTTVBURSB0cmFuc2l0aW9ucyBvbiB2aWRlbyBpbWFnZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjU1LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0c21wdGUuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTUuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCIgdGl0bGU9InNtcHRlIj5zbXB0ZTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QXBwbHkgdGhlIHN0YW5kYXJkIFNNUFRFIHRyYW5zaXRpb25zIG9uIHZpZGVvIGltYWdlczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuaHRtbCIgdGl0bGU9InNtcHRlYWxwaGEiPnNtcHRlYWxwaGE8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFwcGx5IHRoZSBzdGFuZGFyZCBTTVBURSB0cmFuc2l0aW9ucyBhcyBhbHBoYSBvbiB2aWRlbyBpbWFnZXM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNvdXAuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc291cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDdjODI3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc291cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNvdXA6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbCIgdGl0bGU9InNtcHRlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sIiB0aXRsZT0ic3BlY3RydW0iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zbXB0ZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc291cCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnNvdXA8L3NwYW4+PC9oMj4KLTxwPnNvdXAg4oCUIDxhIG5hbWU9InBsdWdpbi1zb3VwIj48L2E+bGlic291cCBIVFRQIGNsaWVudCBzcmMvc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTYuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3Rzb3VwaHR0cHNyYy5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy41Ni40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCIgdGl0bGU9InNvdXBodHRwY2xpZW50c2luayI+c291cGh0dHBjbGllbnRzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZW5kcyBzdHJlYW1zIHRvIEhUVFAgc2VydmVyIHZpYSBQVVQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sIiB0aXRsZT0ic291cGh0dHBzcmMiPnNvdXBodHRwc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWNlaXZlIGRhdGEgYXMgYSBjbGllbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgSFRUUCB1c2luZyBTT1VQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmNmNDgzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc3BlY3RydW0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zcGVjdHJ1bTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zb3VwLmh0bWwiIHRpdGxlPSJzb3VwIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVleC5odG1sIiB0aXRsZT0ic3BlZXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zb3VwLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnNwZWN0cnVtPC9zcGFuPjwvaDI+Ci08cD5zcGVjdHJ1bSDigJQgPGEgbmFtZT0icGx1Z2luLXNwZWN0cnVtIj48L2E+UnVuIGFuIEZGVCBvbiB0aGUgYXVkaW8gc2lnbmFsLCBvdXRwdXQgc3BlY3RydW0gZGF0YTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTcuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RzcGVjdHJ1bS5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy41Ny40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCIgdGl0bGU9InNwZWN0cnVtIj5zcGVjdHJ1bTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UnVuIGFuIEZGVCBvbiB0aGUgYXVkaW8gc2lnbmFsLCBvdXRwdXQgc3BlY3RydW0gZGF0YTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDE1NDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNwZWV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWN0cnVtLmh0bWwiIHRpdGxlPSJzcGVjdHJ1bSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdGFnbGliLmh0bWwiIHRpdGxlPSJ0YWdsaWIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi10YWdsaWIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+c3BlZXg8L3NwYW4+PC9oMj4KLTxwPnNwZWV4IOKAlCA8YSBuYW1lPSJwbHVnaW4tc3BlZXgiPjwvYT5TcGVleCBwbHVnaW4gbGlicmFyeTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTguMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3RzcGVleC5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy41OC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5odG1sIiB0aXRsZT0ic3BlZXhkZWMiPnNwZWV4ZGVjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5kZWNvZGUgc3BlZXggc3RyZWFtcyB0byBhdWRpbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwiIHRpdGxlPSJzcGVleGVuYyI+c3BlZXhlbmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkVuY29kZXMgYXVkaW8gaW4gU3BlZXggZm9ybWF0PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi10YWdsaWIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdGFnbGliLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MGM5OGIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi10YWdsaWIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT50YWdsaWI6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc3BlZXguaHRtbCIgdGl0bGU9InNwZWV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbCIgdGl0bGU9InVkcCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXVkcC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdGFnbGliIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+dGFnbGliPC9zcGFuPjwvaDI+Ci08cD50YWdsaWIg4oCUIDxhIG5hbWU9InBsdWdpbi10YWdsaWIiPjwvYT5UYWcgd3JpdGluZyBwbHVnLWluIGJhc2VkIG9uIHRhZ2xpYjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTkuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3R0YWdsaWIuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNTkuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBldjJtdXguaHRtbCIgdGl0bGU9ImFwZXYybXV4Ij5hcGV2Mm11eDwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QWRkcyBhbiBBUEV2MiBoZWFkZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBmaWxlcyB1c2luZyB0YWdsaWI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDN2Mm11eC5odG1sIiB0aXRsZT0iaWQzdjJtdXgiPmlkM3YybXV4PC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BZGRzIGFuIElEM3YyIGhlYWRlciB0byB0aGUgYmVnaW5uaW5nIG9mIE1QMyBmaWxlcyB1c2luZyB0YWdsaWI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXVkcC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzMWNkYS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXVkcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnVkcDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi10YWdsaWIuaHRtbCIgdGl0bGU9InRhZ2xpYiI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW80bGludXgyLmh0bWwiIHRpdGxlPSJ2aWRlbzRsaW51eDIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi10YWdsaWIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW80bGludXgyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj51ZHA8L3NwYW4+PC9oMj4KLTxwPnVkcCDigJQgPGEgbmFtZT0icGx1Z2luLXVkcCI+PC9hPnRyYW5zZmVyIGRhdGEgdmlhIFVEUDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjAuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3R1ZHAuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjAuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZHludWRwc2luay5odG1sIiB0aXRsZT0iZHludWRwc2luayI+ZHludWRwc2luazwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2VuZCBkYXRhIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFVEUCB3aXRoIHBhY2tldCBkZXN0aW5hdGlvbnMgcGlja2VkIHVwIGR5bmFtaWNhbGx5IGZyb20gbWV0YSBvbiB0aGUgYnVmZmVycyBwYXNzZWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWx0aXVkcHNpbmsuaHRtbCIgdGl0bGU9Im11bHRpdWRwc2luayI+bXVsdGl1ZHBzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZW5kIGRhdGEgb3ZlciB0aGUgbmV0d29yayB2aWEgVURQIHRvIG9uZSBvciBtdWx0aXBsZSByZWNpcGllbnRzIHdoaWNoIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGF0IHJ1bnRpbWUgdXNpbmcgYWN0aW9uIHNpZ25hbHM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzaW5rLmh0bWwiIHRpdGxlPSJ1ZHBzaW5rIj51ZHBzaW5rPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZW5kIGRhdGEgb3ZlciB0aGUgbmV0d29yayB2aWEgVURQPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwiIHRpdGxlPSJ1ZHBzcmMiPnVkcHNyYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVjZWl2ZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFVEUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW80bGludXgyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvNGxpbnV4Mi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmE0ZjBkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW80bGludXgyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dmlkZW80bGludXgyOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXVkcC5odG1sIiB0aXRsZT0idWRwIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2JveC5odG1sIiB0aXRsZT0idmlkZW9ib3giPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9ib3guaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvNGxpbnV4MiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnZpZGVvNGxpbnV4Mjwvc3Bhbj48L2gyPgotPHA+dmlkZW80bGludXgyIOKAlCA8YSBuYW1lPSJwbHVnaW4tdmlkZW80bGludXgyIj48L2E+ZWxlbWVudHMgZm9yIFZpZGVvIDQgTGludXg8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjYxLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0dmlkZW80bGludXgyLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjYxLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5odG1sIiB0aXRsZT0idjRsMnJhZGlvIj52NGwycmFkaW88L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNvbnRyb2xzIGEgVmlkZW80TGludXgyIHJhZGlvIGRldmljZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwiIHRpdGxlPSJ2NGwyc2luayI+djRsMnNpbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkRpc3BsYXlzIGZyYW1lcyBvbiBhIHZpZGVvNGxpbnV4MiBkZXZpY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwiIHRpdGxlPSJ2NGwyc3JjIj52NGwyc3JjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZWFkcyBmcmFtZXMgZnJvbSBhIFZpZGVvNExpbnV4MiBkZXZpY2U8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvYm94Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvYm94Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0M2I5NDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2JveC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZpZGVvYm94OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvNGxpbnV4Mi5odG1sIiB0aXRsZT0idmlkZW80bGludXgyIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbCIgdGl0bGU9InZpZGVvY3JvcCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvNGxpbnV4Mi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvYm94Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+dmlkZW9ib3g8L3NwYW4+PC9oMj4KLTxwPnZpZGVvYm94IOKAlCA8YSBuYW1lPSJwbHVnaW4tdmlkZW9ib3giPjwvYT5yZXNpemVzIGEgdmlkZW8gYnkgYWRkaW5nIGJvcmRlcnMgb3IgY3JvcHBpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjYyLjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0dmlkZW9ib3guc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjIuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwiIHRpdGxlPSJ2aWRlb2JveCI+dmlkZW9ib3g8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPlJlc2l6ZXMgYSB2aWRlbyBieSBhZGRpbmcgYm9yZGVycyBvciBjcm9wcGluZzwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvY3JvcC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiOWRjNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvY3JvcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZpZGVvY3JvcDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2JveC5odG1sIiB0aXRsZT0idmlkZW9ib3giPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvZmlsdGVyLmh0bWwiIHRpdGxlPSJ2aWRlb2ZpbHRlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvYm94Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvZmlsdGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj52aWRlb2Nyb3A8L3NwYW4+PC9oMj4KLTxwPnZpZGVvY3JvcCDigJQgPGEgbmFtZT0icGx1Z2luLXZpZGVvY3JvcCI+PC9hPkNyb3BzIHZpZGVvIGludG8gYSB1c2VyLWRlZmluZWQgcmVnaW9uPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42My4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdHZpZGVvY3JvcC5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42My40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3BlY3RyYXRpb2Nyb3AuaHRtbCIgdGl0bGU9ImFzcGVjdHJhdGlvY3JvcCI+YXNwZWN0cmF0aW9jcm9wPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Dcm9wcyB2aWRlbyBpbnRvIGEgdXNlci1kZWZpbmVkIGFzcGVjdC1yYXRpbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sIiB0aXRsZT0idmlkZW9jcm9wIj52aWRlb2Nyb3A8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNyb3BzIHZpZGVvIGludG8gYSB1c2VyLWRlZmluZWQgcmVnaW9uPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmY1NTNjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9maWx0ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT52aWRlb2ZpbHRlcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbCIgdGl0bGU9InZpZGVvY3JvcCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9taXhlci5odG1sIiB0aXRsZT0idmlkZW9taXhlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvY3JvcC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb21peGVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlciI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnZpZGVvZmlsdGVyPC9zcGFuPjwvaDI+Ci08cD52aWRlb2ZpbHRlciDigJQgPGEgbmFtZT0icGx1Z2luLXZpZGVvZmlsdGVyIj48L2E+VmlkZW8gZmlsdGVycyBwbHVnaW48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjY0LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0dmlkZW9maWx0ZXIuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjQuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEuaHRtbCIgdGl0bGU9ImdhbW1hIj5nYW1tYTwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QWRqdXN0cyBnYW1tYSBvbiBhIHZpZGVvIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sIiB0aXRsZT0idmlkZW9iYWxhbmNlIj52aWRlb2JhbGFuY2U8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkFkanVzdHMgYnJpZ2h0bmVzcywgY29udHJhc3QsIGh1ZSwgc2F0dXJhdGlvbiBvbiBhIHZpZGVvIHN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sIiB0aXRsZT0idmlkZW9mbGlwIj52aWRlb2ZsaXA8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkZsaXBzIGFuZCByb3RhdGVzIHZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4uaHRtbCIgdGl0bGU9InZpZGVvbWVkaWFuIj52aWRlb21lZGlhbjwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QXBwbHkgYSBtZWRpYW4gZmlsdGVyIHRvIGFuIGltYWdlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb21peGVyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyMDI3Zi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT52aWRlb21peGVyOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvZmlsdGVyLmh0bWwiIHRpdGxlPSJ2aWRlb2ZpbHRlciI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwiIHRpdGxlPSJ2cHgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12cHguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj52aWRlb21peGVyPC9zcGFuPjwvaDI+Ci08cD52aWRlb21peGVyIOKAlCA8YSBuYW1lPSJwbHVnaW4tdmlkZW9taXhlciI+PC9hPlZpZGVvIG1peGVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42NS4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdHZpZGVvbWl4ZXIuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjUuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCIgdGl0bGU9InZpZGVvbWl4ZXIiPnZpZGVvbWl4ZXI8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPk1peCBtdWx0aXBsZSB2aWRlbyBzdHJlYW1zPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZweC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzQyNGFlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dnB4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAyLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIFBsdWdpbnMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbCIgdGl0bGU9InZpZGVvbWl4ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdmVmb3JtLmh0bWwiIHRpdGxlPSJ3YXZlZm9ybSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZWZvcm0uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZweCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPnZweDwvc3Bhbj48L2gyPgotPHA+dnB4IOKAlCA8YSBuYW1lPSJwbHVnaW4tdnB4Ij48L2E+VlA4IHBsdWdpbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjYuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3R2cHguc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjYuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLmh0bWwiIHRpdGxlPSJ2cDhkZWMiPnZwOGRlYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGVjb2RlIFZQOCB2aWRlbyBzdHJlYW1zPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwiIHRpdGxlPSJ2cDhlbmMiPnZwOGVuYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RW5jb2RlIFZQOCB2aWRlbyBzdHJlYW1zPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwiIHRpdGxlPSJ2cDlkZWMiPnZwOWRlYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGVjb2RlIFZQOSB2aWRlbyBzdHJlYW1zPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwiIHRpdGxlPSJ2cDllbmMiPnZwOWVuYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RW5jb2RlIFZQOSB2aWRlbyBzdHJlYW1zPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlZm9ybS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlZm9ybS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2ExNTNjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZWZvcm0uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT53YXZlZm9ybTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12cHguaHRtbCIgdGl0bGU9InZweCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZW5jLmh0bWwiIHRpdGxlPSJ3YXZlbmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12cHguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZW5jLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlZm9ybSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPndhdmVmb3JtPC9zcGFuPjwvaDI+Ci08cD53YXZlZm9ybSDigJQgPGEgbmFtZT0icGx1Z2luLXdhdmVmb3JtIj48L2E+V2F2ZUZvcm0gQVBJIGJhc2VkIHBsdWdpbjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjcuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3R3YXZlZm9ybS5kbGw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4wLjEwLjQuMTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBDVlM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNjcuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay5odG1sIiB0aXRsZT0id2F2ZWZvcm1zaW5rIj53YXZlZm9ybXNpbms8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPldhdmVGb3JtIGF1ZGlvIHNpbms8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlbmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZW5jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMzc3MDQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlbmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT53YXZlbmM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZWZvcm0uaHRtbCIgdGl0bGU9IndhdmVmb3JtIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYWNrLmh0bWwiIHRpdGxlPSJ3YXZwYWNrIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZWZvcm0uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFjay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZW5jIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+d2F2ZW5jPC9zcGFuPjwvaDI+Ci08cD53YXZlbmMg4oCUIDxhIG5hbWU9InBsdWdpbi13YXZlbmMiPjwvYT5FbmNvZGUgcmF3IGF1ZGlvIGludG8gV0FWPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42OC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdHdhdmVuYy5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42OC40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmh0bWwiIHRpdGxlPSJ3YXZlbmMiPndhdmVuYzwvYT48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RW5jb2RlIHJhdyBhdWRpbyBpbnRvIFdBVjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdnBhY2suaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFjay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTM2Yzk3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFjay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPndhdnBhY2s6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZW5jLmh0bWwiIHRpdGxlPSJ3YXZlbmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdnBhcnNlLmh0bWwiIHRpdGxlPSJ3YXZwYXJzZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdmVuYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYXJzZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFjayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPndhdnBhY2s8L3NwYW4+PC9oMj4KLTxwPndhdnBhY2sg4oCUIDxhIG5hbWU9InBsdWdpbi13YXZwYWNrIj48L2E+V2F2cGFjayBsb3NzbGVzcy9sb3NzeSBhdWRpbyBmb3JtYXQgaGFuZGxpbmc8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjY5LjMiPjwvYT48aDI+UGx1Z2luIEluZm9ybWF0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZmlsZW5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bGliZ3N0d2F2cGFjay5zbzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj52ZXJzaW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPjEuMTAuNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5ydW4tdGltZSBsaWNlbnNlPC9zcGFuPjwvcD48L3RkPgotPHRkPkxHUEw8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGFja2FnZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5vcmlnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy42OS40Ij48L2E+PGgyPkVsZW1lbnRzPC9oMj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwiIHRpdGxlPSJ3YXZwYWNrZGVjIj53YXZwYWNrZGVjPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EZWNvZGVzIFdhdnBhY2sgYXVkaW8gZGF0YTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCIgdGl0bGU9IndhdnBhY2tlbmMiPndhdnBhY2tlbmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkVuY29kZXMgYXVkaW8gd2l0aCB0aGUgV2F2cGFjayBsb3NzbGVzcy9sb3NzeSBhdWRpbyBjb2RlYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFyc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI0ZTdiMi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdnBhcnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+d2F2cGFyc2U6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFjay5odG1sIiB0aXRsZT0id2F2cGFjayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4teGltYWdlc3JjLmh0bWwiIHRpdGxlPSJ4aW1hZ2VzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDIuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYWNrLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXhpbWFnZXNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj53YXZwYXJzZTwvc3Bhbj48L2gyPgotPHA+d2F2cGFyc2Ug4oCUIDxhIG5hbWU9InBsdWdpbi13YXZwYXJzZSI+PC9hPlBhcnNlIGEgLndhdiBmaWxlIGludG8gcmF3IGF1ZGlvPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImlkLTEuMy43MC4zIj48L2E+PGgyPlBsdWdpbiBJbmZvcm1hdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmZpbGVuYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmxpYmdzdHdhdnBhcnNlLnNvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnZlcnNpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+MS4xMC40PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnJ1bi10aW1lIGxpY2Vuc2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TEdQTDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wYWNrYWdlPC9zcGFuPjwvcD48L3RkPgotPHRkPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm9yaWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iaWQtMS4zLjcwLjQiPjwvYT48aDI+RWxlbWVudHM8L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5odG1sIiB0aXRsZT0id2F2cGFyc2UiPndhdnBhcnNlPC9hPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QYXJzZSBhIC53YXYgZmlsZSBpbnRvIHJhdyBhdWRpbzwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXhpbWFnZXNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi14aW1hZ2VzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUyMjRhOC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXhpbWFnZXNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnhpbWFnZXNyYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYXJzZS5odG1sIiB0aXRsZT0id2F2cGFyc2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXk0bWVuYy5odG1sIiB0aXRsZT0ieTRtZW5jIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFyc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4teTRtZW5jLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi14aW1hZ2VzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj54aW1hZ2VzcmM8L3NwYW4+PC9oMj4KLTxwPnhpbWFnZXNyYyDigJQgPGEgbmFtZT0icGx1Z2luLXhpbWFnZXNyYyI+PC9hPlgxMSB2aWRlbyBpbnB1dCBwbHVnaW4gdXNpbmcgc3RhbmRhcmQgWGxpYiBjYWxsczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNzEuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3R4aW1hZ2VzcmMuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNzEuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sIiB0aXRsZT0ieGltYWdlc3JjIj54aW1hZ2VzcmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkNyZWF0ZXMgYSBzY3JlZW5zaG90IHZpZGVvIHN0cmVhbTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXk0bWVuYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi15NG1lbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBiNmExZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXk0bWVuYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnk0bWVuYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMi5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBQbHVnaW5zIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi14aW1hZ2VzcmMuaHRtbCIgdGl0bGU9InhpbWFnZXNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMi5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXhpbWFnZXNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxpbWcgc3JjPSJyaWdodC1pbnNlbnNpdGl2ZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIj48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi15NG1lbmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj55NG1lbmM8L3NwYW4+PC9oMj4KLTxwPnk0bWVuYyDigJQgPGEgbmFtZT0icGx1Z2luLXk0bWVuYyI+PC9hPkVuY29kZXMgYSBZVVYgZnJhbWUgaW50byB0aGUgeXV2NG1wZWcgZm9ybWF0IChtanBlZ3Rvb2xzKTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNzIuMyI+PC9hPjxoMj5QbHVnaW4gSW5mb3JtYXRpb248L2gyPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5maWxlbmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5saWJnc3R5NG1lbmMuc288L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+dmVyc2lvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4xLjEwLjQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cnVuLXRpbWUgbGljZW5zZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MR1BMPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBhY2thZ2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+b3JpZ2luPC9zcGFuPjwvcD48L3RkPgotPHRkPlVua25vd24gcGFja2FnZSBvcmlnaW48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJpZC0xLjMuNzIuNCI+PC9hPjxoMj5FbGVtZW50czwvaDI+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXk0bWVuYy5odG1sIiB0aXRsZT0ieTRtZW5jIj55NG1lbmM8L2E+PC9zcGFuPjwvcD48L3RkPgotPHRkPkVuY29kZXMgYSBZVVYgZnJhbWUgaW50byB0aGUgeXV2NG1wZWcgZm9ybWF0IChtanBlZ3Rvb2xzKTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTQxMzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5wbmdkZWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3N4dmlkZW9zaW5rLmh0bWwiIHRpdGxlPSJvc3h2aWRlb3NpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwiIHRpdGxlPSJwbmdlbmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3h2aWRlb3NpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy50b3Bfb2ZfcGFnZSI+PC9hPnBuZ2RlYzwvc3Bhbj48L2gyPgotPHA+cG5nZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFBuZ0RlYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy5odG1sI0dzdFBuZ0RlYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UG5nRGVjIj5Hc3RQbmdEZWM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtR3N0VmlkZW9EZWNvZGVyLmh0bWwjR3N0VmlkZW9EZWNvZGVyIj5Hc3RWaWRlb0RlY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFBuZ0RlYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RGVjb2RlcyBwbmcgaW1hZ2VzLiBJZiB0aGVyZSBpcyBubyBmcmFtZXJhdGUgc2V0IG9uIHNpbmsgY2FwcywgaXQgc2VuZHMgRU9TCi1hZnRlciB0aGUgZmlyc3QgcGljdHVyZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEwOS42LjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcG5nLmh0bWwjcGx1Z2luLXBuZyI+cG5nPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVjb2Rlci9JbWFnZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMDkuNi4zLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmltYWdlL3BuZzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCQSwgUkdCLCBBUkdCNjQsIEdSQVk4LCBHUkFZMTZfQkUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2RlYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UG5nRGVjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UG5nRGVjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UG5nRGVjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0YjgyZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnBuZ2VuYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMuaHRtbCIgdGl0bGU9InBuZ2RlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sIiB0aXRsZT0icHJvZ3Jlc3NyZXBvcnQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy50b3Bfb2ZfcGFnZSI+PC9hPnBuZ2VuYzwvc3Bhbj48L2gyPgotPHA+cG5nZW5jPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwjR3N0UG5nRW5jLS1jb21wcmVzc2lvbi1sZXZlbCIgdGl0bGU9IlRoZSDigJxjb21wcmVzc2lvbi1sZXZlbOKAnSBwcm9wZXJ0eSI+Y29tcHJlc3Npb24tbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwjR3N0UG5nRW5jLS1zbmFwc2hvdCIgdGl0bGU9IlRoZSDigJxzbmFwc2hvdOKAnSBwcm9wZXJ0eSI+c25hcHNob3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFBuZ0VuYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5odG1sI0dzdFBuZ0VuYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UG5nRW5jIj5Hc3RQbmdFbmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtR3N0VmlkZW9FbmNvZGVyLmh0bWwjR3N0VmlkZW9FbmNvZGVyIj5Hc3RWaWRlb0VuY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFBuZ0VuYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0UG5nRW5jIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RW5jb2RlcyBwbmcgaW1hZ2VzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTEwLjguMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wbmcuaHRtbCNwbHVnaW4tcG5nIj5wbmc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KZXJlbXkgU0lNT04gJmx0O2pzaW1vbjEzQHlhaG9vLmZyJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9FbmNvZGVyL0ltYWdlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExMC44LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCQSwgUkdCLCBHUkFZOCwgR1JBWTE2X0JFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+aW1hZ2UvcG5nLCB3aWR0aD0oaW50KVsgMTYsIDEwMDAwMDAgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMTAwMDAwMCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdlbmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBuZ0VuYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFBuZ0VuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFBuZ0VuYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQbmdFbmMtLWNvbXByZXNzaW9uLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29tcHJlc3Npb24tbGV2ZWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbXByZXNzaW9uLWxldmVs4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UE5HIGNvbXByZXNzaW9uIGxldmVsLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gOTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDY8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFBuZ0VuYy0tc25hcHNob3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzbmFwc2hvdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc25hcHNob3TigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZW5kIEVPUyBhZnRlciBlbmNvZGluZyBhIGZyYW1lLCB1c2VmdWwgZm9yIHNuYXBzaG90cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNjMzY4Ny4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cHJvZ3Jlc3NyZXBvcnQ6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwiIHRpdGxlPSJwbmdlbmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmh0bWwiIHRpdGxlPSJwdWxzZXNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBuZ2VuYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC50b3Bfb2ZfcGFnZSI+PC9hPnByb2dyZXNzcmVwb3J0PC9zcGFuPjwvaDI+Ci08cD5wcm9ncmVzc3JlcG9ydDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCNHc3RQcm9ncmVzc1JlcG9ydC0tc2lsZW50IiB0aXRsZT0iVGhlIOKAnHNpbGVudOKAnSBwcm9wZXJ0eSI+c2lsZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sI0dzdFByb2dyZXNzUmVwb3J0LS11cGRhdGUtZnJlcSIgdGl0bGU9IlRoZSDigJx1cGRhdGUtZnJlceKAnSBwcm9wZXJ0eSI+dXBkYXRlLWZyZXE8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sI0dzdFByb2dyZXNzUmVwb3J0LS1mb3JtYXQiIHRpdGxlPSJUaGUg4oCcZm9ybWF04oCdIHByb3BlcnR5Ij5mb3JtYXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCNHc3RQcm9ncmVzc1JlcG9ydC0tZG8tcXVlcnkiIHRpdGxlPSJUaGUg4oCcZG8tcXVlcnnigJ0gcHJvcGVydHkiPmRvLXF1ZXJ5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RQcm9ncmVzc1JlcG9ydCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCNHc3RQcm9ncmVzc1JlcG9ydC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UHJvZ3Jlc3NSZXBvcnQiPkdzdFByb2dyZXNzUmVwb3J0PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UHJvZ3Jlc3NSZXBvcnQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIHByb2dyZXNzcmVwb3J0IGVsZW1lbnQgY2FuIGJlIHB1dCBpbnRvIGEgcGlwZWxpbmUgdG8gcmVwb3J0IHByb2dyZXNzLAotd2hpY2ggaXMgZG9uZSBieSBkb2luZyB1cHN0cmVhbSBkdXJhdGlvbiBhbmQgcG9zaXRpb24gcXVlcmllcyBpbiByZWd1bGFyCi0ocmVhbC10aW1lKSBpbnRlcnZhbHMuIEJvdGggdGhlIGludGVydmFsIGFuZCB0aGUgcHJlZmVyZWQgcXVlcnkgZm9ybWF0Ci1jYW4gYmUgc3BlY2lmaWVkIHZpYSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sI0dzdFByb2dyZXNzUmVwb3J0LS11cGRhdGUtZnJlcSIgdGl0bGU9IlRoZSDigJx1cGRhdGUtZnJlceKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHVwZGF0ZS1mcmVx4oCdPC9zcGFuPjwvYT4gYW5kIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5odG1sI0dzdFByb2dyZXNzUmVwb3J0LS1mb3JtYXQiIHRpdGxlPSJUaGUg4oCcZm9ybWF04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZm9ybWF04oCdPC9zcGFuPjwvYT4gcHJvcGVydHkuPC9wPgotPHA+RWxlbWVudCBtZXNzYWdlcyBjb250YWluaW5nIGEgInByb2dyZXNzIiBzdHJ1Y3R1cmUgYXJlIHBvc3RlZCBvbiB0aGUgYnVzCi13aGVuZXZlciBwcm9ncmVzcyBoYXMgYmVlbiBxdWVyaWVkIChzaW5jZSBnc3QtcGx1Z2lucy1nb29kIDAuMTAuNiBvbmx5KS48L3A+Ci08cD5TaW5jZSB0aGUgZWxlbWVudCB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBpdCB3aWxsCi1ieSBkZWZhdWx0IGFsc28gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcHJvZ3Jlc3MgdG8gdGhlCi10ZXJtaW5hbC4gVGhpcyBjYW4gYmUgcHJldmVudGVkIGJ5IHNldHRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCNHc3RQcm9ncmVzc1JlcG9ydC0tc2lsZW50IiB0aXRsZT0iVGhlIOKAnHNpbGVudOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHNpbGVudOKAnTwvc3Bhbj48L2E+Ci1wcm9wZXJ0eSB0byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4uPC9wPgotPHA+VGhpcyBlbGVtZW50IGlzIG1vc3QgdXNlZnVsIGluIHRyYW5zY29kaW5nIHBpcGVsaW5lcyBvciBvdGhlciBzaXR1YXRpb25zCi13aGVyZSBqdXN0IHF1ZXJ5aW5nIHRoZSBwaXBlbGluZSBtaWdodCBub3QgbGVhZCB0byB0aGUgd2FudGVkIHJlc3VsdC4gRm9yCi1wcm9ncmVzcyBpbiBUSU1FIGZvcm1hdCwgdGhlIGVsZW1lbnQgaXMgYmVzdCBwbGFjZWQgaW4gYSAncmF3IHN0cmVhbScKLXNlY3Rpb24gb2YgdGhlIHBpcGVsaW5lIChvciBhZnRlciBhbnkgZGVtdXhlcnMvZGVjb2RlcnMvcGFyc2VycykuPC9wPgotPHA+VGhyZWUgbW9yZSB0aGluZ3Mgc2hvdWxkIGJlIHBvaW50ZWQgb3V0OiBmaXJzdGx5LCB0aGUgZWxlbWVudCB3aWxsIG9ubHkKLXF1ZXJ5IHByb2dyZXNzIHdoZW4gZGF0YSBmbG93IGhhcHBlbnMuIElmIGRhdGEgZmxvdyBpcyBzdGFsbGVkIGZvciBzb21lCi1yZWFzb24sIG5vIHByb2dyZXNzIG1lc3NhZ2VzIHdpbGwgYmUgcG9zdGVkLiBTZWNvbmRseSwgdGhlcmUgYXJlIG90aGVyCi1lbGVtZW50cyAobGlrZSBxdGRlbXV4LCBmb3IgZXhhbXBsZSkgdGhhdCBtYXkgYWxzbyBwb3N0ICJwcm9ncmVzcyIgZWxlbWVudAotbWVzc2FnZXMgb24gdGhlIGJ1cy4gQXBwbGljYXRpb25zIHNob3VsZCBjaGVjayB0aGUgc291cmNlIG9mIGFueSBlbGVtZW50Ci1tZXNzYWdlcyB0aGV5IHJlY2VpdmUsIGlmIG5lZWRlZC4gRmluYWxseSwgYXBwbGljYXRpb25zIHNob3VsZCBub3QgdGFrZQotYWN0aW9uIG9uIHJlY2VpdmluZyBub3RpZmljYXRpb24gb2YgcHJvZ3Jlc3MgYmVpbmcgMTAwJSwgdGhleSBzaG91bGQgb25seQotdGFrZSBhY3Rpb24gd2hlbiB0aGV5IHJlY2VpdmUgYW4gRU9TIG1lc3NhZ2UgKHNpbmNlIHRoZSBwcm9ncmVzcyByZXBvcnRlZAotaXMgaW4gcmVmZXJlbmNlIHRvIGFuIGludGVybmFsIHBvaW50IG9mIGEgcGlwZWxpbmUgYW5kIG5vdCB0aGUgcGlwZWxpbmUgYXMKLWEgd2hvbGUpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTEuNy43Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm0gZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZvbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBwcm9ncmVzc3JlcG9ydCB1cGRhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5mcmVxPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b2F1ZGlvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHNob3dzIGEgcHJvZ3Jlc3MgcXVlcnkgd2hlcmUgYSBkdXJhdGlvbiBpcyBhdmFpbGFibGUuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bSBhdWRpb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHByb2dyZXNzcmVwb3J0IHVwZGF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmZyZXE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgc2hvd3MgYSBwcm9ncmVzcyBxdWVyeSB3aGVyZSBubyBkdXJhdGlvbiBpcyBhdmFpbGFibGUuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTExLjcuOC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sI3BsdWdpbi1kZWJ1ZyI+ZGVidWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGVzdGluZzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTEuNy44LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wcm9ncmVzc3JlcG9ydC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFByb2dyZXNzUmVwb3J0LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UHJvZ3Jlc3NSZXBvcnQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RQcm9ncmVzc1JlcG9ydDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFByb2dyZXNzUmVwb3J0LS1zaWxlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzaWxlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpbGVudOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RG8gbm90IHByaW50IG91dHB1dCB0byBzdGRvdXQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQcm9ncmVzc1JlcG9ydC0tdXBkYXRlLWZyZXEiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1cGRhdGUtZnJlceKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXBkYXRlLWZyZXHigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiByZXBvcnRzIHdoZW4gZGF0YSBpcyBmbG93aW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFByb2dyZXNzUmVwb3J0LS1mb3JtYXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmb3JtYXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZvcm1hdOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+Rm9ybWF0IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5aW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiYXV0byI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFByb2dyZXNzUmVwb3J0LS1kby1xdWVyeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLXF1ZXJ54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkby1xdWVyeeKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSBhIHF1ZXJ5IGluc3RlYWQgb2YgYnVmZmVyIG1ldGFkYXRhIHRvIGRldGVybWluZSBzdHJlYW0gcG9zaXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOThlZmIxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cHVsc2VzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0Lmh0bWwiIHRpdGxlPSJwcm9ncmVzc3JlcG9ydCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sIiB0aXRsZT0icHVsc2VzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHJvZ3Jlc3NyZXBvcnQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLnRvcF9vZl9wYWdlIj48L2E+cHVsc2VzaW5rPC9zcGFuPjwvaDI+Ci08cD5wdWxzZXNpbms8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tZGV2aWNlIiB0aXRsZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmh0bWwjR3N0UHVsc2VTaW5rLS1zZXJ2ZXIiIHRpdGxlPSJUaGUg4oCcc2VydmVy4oCdIHByb3BlcnR5Ij5zZXJ2ZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstLWRldmljZS1uYW1lIiB0aXRsZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5Ij5kZXZpY2UtbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tdm9sdW1lIiB0aXRsZT0iVGhlIOKAnHZvbHVtZeKAnSBwcm9wZXJ0eSI+dm9sdW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tbXV0ZSIgdGl0bGU9IlRoZSDigJxtdXRl4oCdIHByb3BlcnR5Ij5tdXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstLXN0cmVhbS1wcm9wZXJ0aWVzIiB0aXRsZT0iVGhlIOKAnHN0cmVhbS1wcm9wZXJ0aWVz4oCdIHByb3BlcnR5Ij5zdHJlYW0tcHJvcGVydGllczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sI0dzdFB1bHNlU2luay0tY2xpZW50LW5hbWUiIHRpdGxlPSJUaGUg4oCcY2xpZW50LW5hbWXigJ0gcHJvcGVydHkiPmNsaWVudC1uYW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmh0bWwjR3N0UHVsc2VTaW5rLS1jdXJyZW50LWRldmljZSIgdGl0bGU9IlRoZSDigJxjdXJyZW50LWRldmljZeKAnSBwcm9wZXJ0eSI+Y3VycmVudC1kZXZpY2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RQdWxzZVNpbmsiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuaHRtbCNHc3RQdWxzZVNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFB1bHNlU2luayI+R3N0UHVsc2VTaW5rPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+R3N0QmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9iYXNlc2luay5odG1sI0dzdEF1ZGlvQmFzZVNpbmstc3RydWN0Ij5Hc3RBdWRpb0Jhc2VTaW5rPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UHVsc2VTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RQdWxzZVNpbmsgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0c3RyZWFtdm9sdW1lLmh0bWwjR3N0U3RyZWFtVm9sdW1lLXN0cnVjdCI+R3N0U3RyZWFtVm9sdW1lPC9hPiwgIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgYW5kICBHc3RQcm9wZXJ0eVByb2JlLjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgb3V0cHV0cyBhdWRpbyB0byBhPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSIiIHRhcmdldD0iX3RvcCI+UHVsc2VBdWRpbyBzb3VuZCBzZXJ2ZXI8L2E+LgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExMi44LjQiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNpbmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcHVsc2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFBsYXkgYW4gT2dnL1ZvcmJpcyBmaWxlLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvbHVtZSB2b2x1bWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBwdWxzZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUGxheSBhIDQ0MEh6IHNpbmUgd2F2ZS4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcHVsc2VzaW5rIHN0cmVhbTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnByb3BlcnRpZXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtwcm9wcyxtZWRpYS50aXRsZT10ZXN0JnF1b3Q7PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBQbGF5IGEgc2luZSB3YXZlIGFuZCBzZXQgYSBzdHJlYW0gcHJvcGVydHkuIFRoZSBwcm9wZXJ0eSBjYW4gYmUgY2hlY2tlZAotd2l0aCAicGFjdGwgbGlzdCIuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTEyLjguNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvLmh0bWwjcGx1Z2luLXB1bHNlYXVkaW8iPnB1bHNlYXVkaW88L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MZW5uYXJ0IFBvZXR0ZXJpbmc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTIuOC41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBTMTZCRSwgRjMyTEUsIEYzMkJFLCBTMzJMRSwgUzMyQkUsIFMyNExFLCBTMjRCRSwgUzI0XzMyTEUsIFMyNF8zMkJFLCBVOCB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMzIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdywgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMzIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtbXVsYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDMyIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFjMywgZnJhbWVkPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWVhYzMsIGZyYW1lZD0oYm9vbGVhbil0cnVlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1kdHMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBibG9jay1zaXplPShpbnQpeyA1MTIsIDEwMjQsIDIwNDggfTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbXBlZ2F1ZGlvdmVyc2lvbj0oaW50KVsgMSwgMiBdLCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpeyAyLCA0IH0sIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYWR0czwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU2luay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFB1bHNlU2luazwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFB1bHNlU2luazs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdWxzZVNpbmstLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgUHVsc2VBdWRpbyBzaW5rIGRldmljZSB0byBjb25uZWN0IHRvLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdWxzZVNpbmstLXNlcnZlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlcnZlcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2VydmVy4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgUHVsc2VBdWRpbyBzZXJ2ZXIgdG8gY29ubmVjdCB0by48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVsc2VTaW5rLS1kZXZpY2UtbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZS1uYW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2UtbmFtZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU2luay0tdm9sdW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdm9sdW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx2b2x1bWXigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5MaW5lYXIgdm9sdW1lIG9mIHRoaXMgc3RyZWFtLCAxLjA9MTAwJS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU2luay0tbXV0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11dGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG11dGXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+TXV0ZSBzdGF0ZSBvZiB0aGlzIHN0cmVhbS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU2luay0tc3RyZWFtLXByb3BlcnRpZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdHJlYW0tcHJvcGVydGllc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RyZWFtLXByb3BlcnRpZXPigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkxpc3Qgb2YgcHVsc2VhdWRpbyBzdHJlYW0gcHJvcGVydGllcy4gQSBsaXN0IG9mIGRlZmluZWQgcHJvcGVydGllcyBjYW4gYmUKLWZvdW5kIGluIHRoZSA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL3B1bHNlYXVkaW8vZG94eWdlbi9wcm9wbGlzdF84aC5odG1sIiB0YXJnZXQ9Il90b3AiPnB1bHNlYXVkaW8gYXBpIGRvY3M8L2E+LjwvcD4KLTxwPkJlbG93IGlzIGFuIGV4YW1wbGUgZm9yIHJlZ2lzdGVyaW5nIGFzIGEgbXVzaWMgYXBwbGljYXRpb24gdG8gcHVsc2VhdWRpby48L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTU8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkdzdFN0cnVjdHVyZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5wcm9wczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi1wcm9wcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcm9tLXN0cmluZyI+Z3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3Byb3BzLG1lZGlhLnJvbGU9bXVzaWMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij5nX29iamVjdF9zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wdWxzZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtzdHJlYW0tcHJvcGVydGllcyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gcHJvcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLWdzdF9zdHJ1Y3R1cmVfZnJlZTwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLQotPHA+PC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVsc2VTaW5rLS1jbGllbnQtbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsaWVudC1uYW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjbGllbnQtbmFtZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBQdWxzZUF1ZGlvIGNsaWVudCBuYW1lIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FuIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVsc2VTaW5rLS1jdXJyZW50LWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGN1cnJlbnQtZGV2aWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjdXJyZW50LWRldmljZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBjdXJyZW50IFB1bHNlQXVkaW8gc2luayBkZXZpY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cHVsc2VzcmM8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NGYzNmYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnB1bHNlc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIiB0aXRsZT0icHVsc2VzaW5rIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwiIHRpdGxlPSJwdXNoZmlsZXNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLnRvcF9vZl9wYWdlIj48L2E+cHVsc2VzcmM8L3NwYW4+PC9oMj4KLTxwPnB1bHNlc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLWRldmljZSIgdGl0bGU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiPmRldmljZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLXNlcnZlciIgdGl0bGU9IlRoZSDigJxzZXJ2ZXLigJ0gcHJvcGVydHkiPnNlcnZlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLWRldmljZS1uYW1lIiB0aXRsZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5Ij5kZXZpY2UtbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtLXN0cmVhbS1wcm9wZXJ0aWVzIiB0aXRsZT0iVGhlIOKAnHN0cmVhbS1wcm9wZXJ0aWVz4oCdIHByb3BlcnR5Ij5zdHJlYW0tcHJvcGVydGllczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sI0dzdFB1bHNlU3JjLS1tdXRlIiB0aXRsZT0iVGhlIOKAnG11dGXigJ0gcHJvcGVydHkiPm11dGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy0tc291cmNlLW91dHB1dC1pbmRleCIgdGl0bGU9IlRoZSDigJxzb3VyY2Utb3V0cHV0LWluZGV44oCdIHByb3BlcnR5Ij5zb3VyY2Utb3V0cHV0LWluZGV4PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy0tdm9sdW1lIiB0aXRsZT0iVGhlIOKAnHZvbHVtZeKAnSBwcm9wZXJ0eSI+dm9sdW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy0tY2xpZW50LW5hbWUiIHRpdGxlPSJUaGUg4oCcY2xpZW50LW5hbWXigJ0gcHJvcGVydHkiPmNsaWVudC1uYW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCNHc3RQdWxzZVNyYy0tY3VycmVudC1kZXZpY2UiIHRpdGxlPSJUaGUg4oCcY3VycmVudC1kZXZpY2XigJ0gcHJvcGVydHkiPmN1cnJlbnQtZGV2aWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UHVsc2VTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwjR3N0UHVsc2VTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFB1bHNlU3JjIj5Hc3RQdWxzZVNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9iYXNlc3JjLmh0bWwjR3N0QXVkaW9CYXNlU3JjLXN0cnVjdCI+R3N0QXVkaW9CYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9zcmMuaHRtbCNHc3RBdWRpb1NyYy1zdHJ1Y3QiPkdzdEF1ZGlvU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RQdWxzZVNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RQdWxzZVNyYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RzdHJlYW12b2x1bWUuaHRtbCNHc3RTdHJlYW1Wb2x1bWUtc3RydWN0Ij5Hc3RTdHJlYW1Wb2x1bWU8L2E+LCAgR3N0SW1wbGVtZW50c0ludGVyZmFjZSwgIEdzdE1peGVyIGFuZCAgR3N0UHJvcGVydHlQcm9iZS48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgY2FwdHVyZXMgYXVkaW8gZnJvbSBhPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSIiIHRhcmdldD0iX3RvcCI+UHVsc2VBdWRpbyBzb3VuZCBzZXJ2ZXI8L2E+LgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExMy44LjQiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgcHVsc2VzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+YWxzYXNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZzwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSZWNvcmQgZnJvbSBhIHNvdW5kIGNhcmQgdXNpbmcgcHVsc2VhdWRpbyBhbmQgZW5jb2RlIHRvIE9nZy9Wb3JiaXMuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTEzLjguNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1wdWxzZWF1ZGlvLmh0bWwjcGx1Z2luLXB1bHNlYXVkaW8iPnB1bHNlYXVkaW88L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MZW5uYXJ0IFBvZXR0ZXJpbmc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExMy44LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBTMTZCRSwgRjMyTEUsIEYzMkJFLCBTMzJMRSwgUzMyQkUsIFMyNExFLCBTMjRCRSwgUzI0XzMyTEUsIFMyNF8zMkJFLCBVOCB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMzIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdywgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMzIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtbXVsYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDMyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVsc2VTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RQdWxzZVNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFB1bHNlU3JjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVsc2VTcmMtLWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgUHVsc2VBdWRpbyBzb3VyY2UgZGV2aWNlIHRvIGNvbm5lY3QgdG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU3JjLS1zZXJ2ZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzZXJ2ZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNlcnZlcuKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIFB1bHNlQXVkaW8gc2VydmVyIHRvIGNvbm5lY3QgdG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU3JjLS1kZXZpY2UtbmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZS1uYW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2UtbmFtZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU3JjLS1zdHJlYW0tcHJvcGVydGllcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0cmVhbS1wcm9wZXJ0aWVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzdHJlYW0tcHJvcGVydGllc+KAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TGlzdCBvZiBwdWxzZWF1ZGlvIHN0cmVhbSBwcm9wZXJ0aWVzLiBBIGxpc3Qgb2YgZGVmaW5lZCBwcm9wZXJ0aWVzIGNhbiBiZQotZm91bmQgaW4gdGhlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iIiB0YXJnZXQ9Il90b3AiPnB1bHNlYXVkaW8gYXBpIGRvY3M8L2E+LjwvcD4KLTxwPkJlbG93IGlzIGFuIGV4YW1wbGUgZm9yIHJlZ2lzdGVyaW5nIGFzIGEgbXVzaWMgYXBwbGljYXRpb24gdG8gcHVsc2VhdWRpby48L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTU8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPkdzdFN0cnVjdHVyZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5wcm9wczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi1wcm9wcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1mcm9tLXN0cmluZyI+Z3N0X3N0cnVjdHVyZV9mcm9tX3N0cmluZzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3Byb3BzLG1lZGlhLnJvbGU9bXVzaWMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjZy1vYmplY3Qtc2V0Ij5nX29iamVjdF9zZXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5wdWxzZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtzdHJlYW0tcHJvcGVydGllcyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gcHJvcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZnJlZSI+Z3N0X3N0cnVjdHVyZV9mcmVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+cHJvcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdWxzZVNyYy0tbXV0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11dGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG11dGXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hldGhlciB0aGUgc3RyZWFtIGlzIG11dGVkIG9yIG5vdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU3JjLS1zb3VyY2Utb3V0cHV0LWluZGV4Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc291cmNlLW91dHB1dC1pbmRleOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc291cmNlLW91dHB1dC1pbmRleOKAnSAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgaW5kZXggb2YgdGhlIFB1bHNlQXVkaW8gc291cmNlIG91dHB1dCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZWxlbWVudC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDQyOTQ5NjcyOTU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU3JjLS12b2x1bWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx2b2x1bWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHZvbHVtZeKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSB2b2x1bWUgb2YgdGhlIHJlY29yZCBzdHJlYW0uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdWxzZVNyYy0tY2xpZW50LW5hbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbGllbnQtbmFtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2xpZW50LW5hbWXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgUHVsc2VBdWRpbyBjbGllbnQgbmFtZSB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1bHNlU3JjLS1jdXJyZW50LWRldmljZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGN1cnJlbnQtZGV2aWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjdXJyZW50LWRldmljZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBjdXJyZW50IFB1bHNlQXVkaW8gc291cmNlIGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnB1bHNlc2luazwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzllMTk1Ny4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cHVzaGZpbGVzcmM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzcmMuaHRtbCIgdGl0bGU9InB1bHNlc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbCIgdGl0bGU9InF0ZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdWxzZXNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMudG9wX29mX3BhZ2UiPjwvYT5wdXNoZmlsZXNyYzwvc3Bhbj48L2gyPgotPHA+cHVzaGZpbGVzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5odG1sI0dzdFB1c2hGaWxlU3JjLS1hcHBsaWVkLXJhdGUiIHRpdGxlPSJUaGUg4oCcYXBwbGllZC1yYXRl4oCdIHByb3BlcnR5Ij5hcHBsaWVkLXJhdGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtLWluaXRpYWwtdGltZXN0YW1wIiB0aXRsZT0iVGhlIOKAnGluaXRpYWwtdGltZXN0YW1w4oCdIHByb3BlcnR5Ij5pbml0aWFsLXRpbWVzdGFtcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtLWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5Ij5sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCNHc3RQdXNoRmlsZVNyYy0tcmF0ZSIgdGl0bGU9IlRoZSDigJxyYXRl4oCdIHByb3BlcnR5Ij5yYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCNHc3RQdXNoRmlsZVNyYy0tc3RhcnQtdGltZSIgdGl0bGU9IlRoZSDigJxzdGFydC10aW1l4oCdIHByb3BlcnR5Ij5zdGFydC10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCNHc3RQdXNoRmlsZVNyYy0tc3RyZWFtLXRpbWUiIHRpdGxlPSJUaGUg4oCcc3RyZWFtLXRpbWXigJ0gcHJvcGVydHkiPnN0cmVhbS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtLXRpbWUtc2VnbWVudCIgdGl0bGU9IlRoZSDigJx0aW1lLXNlZ21lbnTigJ0gcHJvcGVydHkiPnRpbWUtc2VnbWVudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UHVzaEZpbGVTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLmh0bWwjR3N0UHVzaEZpbGVTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFB1c2hGaWxlU3JjIj5Hc3RQdXNoRmlsZVNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RQdXNoRmlsZVNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RQdXNoRmlsZVNyYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGlzIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEl0IGltcGxlbWVudHMgYW4gVVJJCi1wcm90b2NvbCBoYW5kbGVyIGZvciB0aGUgJ3B1c2hmaWxlJyBwcm90b2NvbCBhbmQgYmVoYXZlcyBsaWtlIGEgZmlsZSBzb3VyY2UKLWVsZW1lbnQgdGhhdCBjYW5ub3QgYmUgYWN0aXZhdGVkIGluIHB1bGwtbW9kZS4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8KLWRlYnVnIGRlbXV4ZXJzIG9yIGRlY29kZXJzIHRoYXQgY2FuIG9wZXJhdGUgYm90aCBwdWxsIGFuZCBwdXNoLWJhc2VkIGluCi1jb25uZWN0aW9uIHdpdGggdGhlIHBsYXliaW4gZWxlbWVudCAod2hpY2ggY3JlYXRlcyBhIHNvdXJjZSBiYXNlZCBvbiB0aGUKLVVSSSBwYXNzZWQpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTQuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPm0gcGxheWJpbiB1cmk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5wdXNoZmlsZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLy9ob21lL3lvdS9zb21lL2ZpbGUub2dnPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBsYXlzIGJhY2sgdGhlIGdpdmVuIGZpbGUgdXNpbmcgcGxheWJpbiwgd2l0aCB0aGUgZGVtdXhlciBvcGVyYXRpbmcKLXB1c2gtYmFzZWQuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE0LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sI3BsdWdpbi1kZWJ1ZyI+ZGVidWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UZXN0aW5nPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExNC44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdXNoRmlsZVNyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFB1c2hGaWxlU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UHVzaEZpbGVTcmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1c2hmaWxlc3JjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RQdXNoRmlsZVNyYy0tYXBwbGllZC1yYXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXBwbGllZC1yYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhcHBsaWVkLXJhdGXigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BcHBsaWVkIHJhdGUgdG8gdXNlIGluIFRJTUUgU0VHTUVOVC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUlORE9VQkxFPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVzaEZpbGVTcmMtLWluaXRpYWwtdGltZXN0YW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaW5pdGlhbC10aW1lc3RhbXDigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGluaXRpYWwtdGltZXN0YW1w4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkluaXRpYWwgQnVmZmVyIFRpbWVzdGFtcCAoaWYgdGltZS1zZWdtZW50IFRSVUUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxODQ0Njc0NDA3MzcwOTU1MTYxNTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVzaEZpbGVTcmMtLWxvY2F0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG9jYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxvY2F0aW9u4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gcmVhZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UHVzaEZpbGVTcmMtLXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyYXRl4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5SYXRlIHRvIHVzZSBpbiBUSU1FIFNFR01FTlQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01JTkRPVUJMRTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1c2hGaWxlU3JjLS1zdGFydC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RhcnQtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RhcnQtdGltZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkluaXRpYWwgU3RhcnQgVGltZSAoaWYgdGltZS1zZWdtZW50IFRSVUUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1c2hGaWxlU3JjLS1zdHJlYW0tdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0cmVhbS10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzdHJlYW0tdGltZeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+SW5pdGlhbCBTdHJlYW0gVGltZSAoaWYgdGltZS1zZWdtZW50IFRSVUUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFB1c2hGaWxlU3JjLS10aW1lLXNlZ21lbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aW1lLXNlZ21lbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRpbWUtc2VnbWVudOKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RW1pdCBUSU1FIFNFR01FTlRTLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+ZmlsZXNyYzwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdGRlbXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMjUzNGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cXRkZW11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wdXNoZmlsZXNyYy5odG1sIiB0aXRsZT0icHVzaGZpbGVzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sIiB0aXRsZT0icXRtb292cmVjb3ZlciI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC50b3Bfb2ZfcGFnZSI+PC9hPnF0ZGVtdXg8L3NwYW4+PC9oMj4KLTxwPnF0ZGVtdXg8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UVREZW11eCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdGRlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdGRlbXV4Lmh0bWwjR3N0UVREZW11eC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UVREZW11eCI+R3N0UVREZW11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFFURGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5EZW11eGVzIGEgLm1vdiBmaWxlIGludG8gcmF3IG9yIGNvbXByZXNzZWQgYXVkaW8gYW5kL29yIHZpZGVvIHN0cmVhbXMuPC9wPgotPHA+VGhpcyBlbGVtZW50IHN1cHBvcnRzIGJvdGggcHVzaCBhbmQgcHVsbC1iYXNlZCBzY2hlZHVsaW5nLCBkZXBlbmRpbmcgb24gdGhlCi1jYXBhYmlsaXRpZXMgb2YgdGhlIHVwc3RyZWFtIGVsZW1lbnRzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTUuNi40Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bW92IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdGRlbXV4IG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5kZW11eCAgZGVtdXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5hdWRpb18wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3NpbmsgICBkZW11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnZpZGVvXzAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9zY2FsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBQbGF5IChwYXJzZSBhbmQgZGVjb2RlKSBhIC5tb3YgZmlsZSBhbmQgdHJ5IHRvIG91dHB1dCBpdCB0bwotYW4gYXV0b21hdGljYWxseSBkZXRlY3RlZCBzb3VuZGNhcmQgYW5kIHZpZGVvc2luay4gSWYgdGhlIE1PViBmaWxlIGNvbnRhaW5zCi1jb21wcmVzc2VkIGF1ZGlvIG9yIHZpZGVvIGRhdGEsIHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IGhhdmUgdGhlCi1yaWdodCBkZWNvZGVyIGVsZW1lbnRzL3BsdWdpbnMgaW5zdGFsbGVkLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExNS42LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taXNvbXA0Lmh0bWwjcGx1Z2luLWlzb21wNCI+aXNvbXA0PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZW11eGVyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExNS42LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vcXVpY2t0aW1lPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbWoyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tNGE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LTNncDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW9fJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnN1YnRpdGxlXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVREZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFFURGVtdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RRVERlbXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Zjg1OGQyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnF0bW9vdnJlY292ZXI6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRkZW11eC5odG1sIiB0aXRsZT0icXRkZW11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sIiB0aXRsZT0icXRtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0ZGVtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIudG9wX29mX3BhZ2UiPjwvYT5xdG1vb3ZyZWNvdmVyPC9zcGFuPjwvaDI+Ci08cD5xdG1vb3ZyZWNvdmVyIOKAlCBVdGlsaXR5IGVsZW1lbnQgZm9yIHJlY292ZXJpbmcgdW5maW5pc2hlZCBxdWlja3RpbWUgZmlsZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwjR3N0UVRNb292UmVjb3Zlci0tYnJva2VuLWlucHV0IiB0aXRsZT0iVGhlIOKAnGJyb2tlbi1pbnB1dOKAnSBwcm9wZXJ0eSI+YnJva2VuLWlucHV0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaHRtbCNHc3RRVE1vb3ZSZWNvdmVyLS1mYXN0c3RhcnQtbW9kZSIgdGl0bGU9IlRoZSDigJxmYXN0c3RhcnQtbW9kZeKAnSBwcm9wZXJ0eSI+ZmFzdHN0YXJ0LW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwjR3N0UVRNb292UmVjb3Zlci0tZml4ZWQtb3V0cHV0IiB0aXRsZT0iVGhlIOKAnGZpeGVkLW91dHB1dOKAnSBwcm9wZXJ0eSI+Zml4ZWQtb3V0cHV0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5odG1sI0dzdFFUTW9vdlJlY292ZXItLXJlY292ZXJ5LWlucHV0IiB0aXRsZT0iVGhlIOKAnHJlY292ZXJ5LWlucHV04oCdIHByb3BlcnR5Ij5yZWNvdmVyeS1pbnB1dDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UVRNb292UmVjb3ZlciI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwjR3N0UVRNb292UmVjb3Zlci1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UVRNb292UmVjb3ZlciI+R3N0UVRNb292UmVjb3ZlcjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij5Hc3RCaW48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQaXBlbGluZS5odG1sI0dzdFBpcGVsaW5lLXN0cnVjdCI+R3N0UGlwZWxpbmU8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RRVE1vb3ZSZWNvdmVyCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0UVRNb292UmVjb3ZlciBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE2LjguMiI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08cD4KLVRoaXMgZWxlbWVudCByZWNvdmVycyBxdWlja3RpbWUgZmlsZXMgY3JlYXRlZCB3aXRoIHF0bXV4IHVzaW5nIHRoZSBtb292Ci1yZWNvdmVyeSBmZWF0dXJlLgotPC9wPgotPHA+Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci1UT0RPCi08L3ByZT4KLTxwPgotPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExNi44LjMuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taXNvbXA0Lmh0bWwjcGx1Z2luLWlzb21wNCI+aXNvbXA0PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGhpYWdvIFNhbnRvcyAmbHQ7dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlV0aWw8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE2LjguMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtb292cmVjb3Zlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNb292UmVjb3Zlci1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFFUTW9vdlJlY292ZXI8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RRVE1vb3ZSZWNvdmVyOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRVE1vb3ZSZWNvdmVyLS1icm9rZW4taW5wdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxicm9rZW4taW5wdXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJyb2tlbi1pbnB1dOKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+UGF0aCB0byBicm9rZW4gaW5wdXQgZmlsZS4gKElmIHF0bXV4IHdhcyBvbiBmYXN0c3RhcnQgbW9kZSwgdGhpcyBmaWxlIGlzIHRoZSBmYXN0c3RhcnQgZmlsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFFUTW9vdlJlY292ZXItLWZhc3RzdGFydC1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmFzdHN0YXJ0LW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZhc3RzdGFydC1tb2Rl4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgdGhlIGJyb2tlbiBpbnB1dCBpcyBmcm9tIGZhc3RzdGFydCBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNb292UmVjb3Zlci0tZml4ZWQtb3V0cHV0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZml4ZWQtb3V0cHV04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmaXhlZC1vdXRwdXTigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlBhdGggdG8gd3JpdGUgdGhlIGZpeGVkIGZpbGUgdG8gKHVzZWQgYXMgb3V0cHV0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNb292UmVjb3Zlci0tcmVjb3ZlcnktaW5wdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZWNvdmVyeS1pbnB1dOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVjb3ZlcnktaW5wdXTigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5QYXRoIHRvIHJlY292ZXJ5IGZpbGUgKHVzZWQgYXMgaW5wdXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3YTRlNDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MzMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnF0bXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaHRtbCIgdGl0bGU9InF0bW9vdnJlY292ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXVhcmt0di5odG1sIiB0aXRsZT0icXVhcmt0diI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bW9vdnJlY292ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4LnRvcF9vZl9wYWdlIj48L2E+cXRtdXg8L3NwYW4+PC9oMj4KLTxwPnF0bXV4IOKAlCBNdXhlciBmb3IgcXVpY2t0aW1lKC5tb3YpIGZpbGVzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RRVE11eER0c01ldGhvZHM8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1kdHMtbWV0aG9kIiB0aXRsZT0iVGhlIOKAnGR0cy1tZXRob2TigJ0gcHJvcGVydHkiPmR0cy1tZXRob2Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tZmFzdHN0YXJ0IiB0aXRsZT0iVGhlIOKAnGZhc3RzdGFydOKAnSBwcm9wZXJ0eSI+ZmFzdHN0YXJ0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tZmFzdHN0YXJ0LWZpbGUiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gcHJvcGVydHkiPmZhc3RzdGFydC1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLWZyYWdtZW50LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnGZyYWdtZW50LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij5mcmFnbWVudC1kdXJhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSIgdGl0bGU9IlRoZSDigJxtb292LXJlY292ZXJ5LWZpbGXigJ0gcHJvcGVydHkiPm1vb3YtcmVjb3ZlcnktZmlsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1tb3ZpZS10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5Ij5tb3ZpZS10aW1lc2NhbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tcHJlc2VudGF0aW9uLXRpbWUiIHRpdGxlPSJUaGUg4oCccHJlc2VudGF0aW9uLXRpbWXigJ0gcHJvcGVydHkiPnByZXNlbnRhdGlvbi10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLXN0cmVhbWFibGUiIHRpdGxlPSJUaGUg4oCcc3RyZWFtYWJsZeKAnSBwcm9wZXJ0eSI+c3RyZWFtYWJsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS10cmFrLXRpbWVzY2FsZSIgdGl0bGU9IlRoZSDigJx0cmFrLXRpbWVzY2FsZeKAnSBwcm9wZXJ0eSI+dHJhay10aW1lc2NhbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyIgdGl0bGU9IlRoZSDigJxyZXNlcnZlZC1ieXRlcy1wZXItc2Vj4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1ieXRlcy1wZXItc2VjPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1yZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmciIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtZHVyYXRpb24tcmVtYWluaW5n4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1yZXNlcnZlZC1tYXgtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdIHByb3BlcnR5Ij5yZXNlcnZlZC1tYXgtZHVyYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLXJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZCIgdGl0bGU9IlRoZSDigJxyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2TigJ0gcHJvcGVydHkiPnJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UVRNdXgiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFFUTXV4Ij5Hc3RRVE11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RRVE11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RRVE11eCBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPkdzdFRhZ1NldHRlcjwvYT4sICBHc3RUYWdYbXBXcml0ZXIgYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbWVyZ2VzIHN0cmVhbXMgKGF1ZGlvIGFuZCB2aWRlbykgaW50byBRdWlja1RpbWUoLm1vdikgZmlsZXMuPC9wPgotPHA+VGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIGludGVuZHMgdG8gZXhwbGFpbiB3aHkgdmFyaW91cyBzaW1pbGFyIG11eGVycwotYXJlIHByZXNlbnQgaW4gdGhpcyBwbHVnaW4uPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL3Jlc291cmNlcy9xdGZpbGVmb3JtYXQucGRmIiB0YXJnZXQ9Il90b3AiPgotUXVpY2tUaW1lIGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb248L2E+IHNlcnZlZCBhcyBiYXNpcyBmb3IgdGhlIE1QNCBmaWxlCi1mb3JtYXQgc3BlY2lmaWNhdGlvbiAobXA0bXV4KSwgYW5kIGFzIHN1Y2ggdGhlIFF1aWNrVGltZSBmaWxlIHN0cnVjdHVyZSBpcwotbmVhcmx5IGlkZW50aWNhbCB0byB0aGUgc28tY2FsbGVkIElTTyBCYXNlIE1lZGlhIGZpbGUgZm9ybWF0IGRlZmluZWQgaW4KLUlTTyAxNDQ5Ni0xMiAoZXhjZXB0IGZvciBzb21lIG1lZGlhIHNwZWNpZmljIHBhcnRzKS4KLUluIHR1cm4sIHRoZSBsYXR0ZXIgSVNPIEJhc2UgTWVkaWEgZm9ybWF0IHdhcyBmdXJ0aGVyIHNwZWNpYWxpemVkIGFzIGEKLU1vdGlvbiBKUEVHLTIwMDAgZmlsZSBmb3JtYXQgaW4gSVNPIDE1NDQ0LTMgKG1qMm11eCkKLWFuZCBpbiB2YXJpb3VzIDNHUFAoMikgc3BlY3MgKGdwcG11eCkuCi1UaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci1JU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuPC9wPgotPHA+QSBmZXcgcHJvcGVydGllcyAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1tb3ZpZS10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcbW92aWUtdGltZXNjYWxl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbW92aWUtdGltZXNjYWxl4oCdPC9zcGFuPjwvYT4sIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tdHJhay10aW1lc2NhbGUiIHRpdGxlPSJUaGUg4oCcdHJhay10aW1lc2NhbGXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJx0cmFrLXRpbWVzY2FsZeKAnTwvc3Bhbj48L2E+KSBhbGxvdwotYWRqdXN0aW5nIHNvbWUgdGVjaG5pY2FsIHBhcmFtZXRlcnMsIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCBpbiAocmFyZSkgY2FzZXMgdG8KLXJlc29sdmUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gc29tZSBzaXR1YXRpb25zLjwvcD4KLTxwPlNvbWUgb3RoZXIgcHJvcGVydGllcyBpbmZsdWVuY2UgdGhlIHJlc3VsdCBtb3JlIGZ1bmRhbWVudGFsbHkuCi1BIHR5cGljYWwgbW92L21wNCBmaWxlJ3MgbWV0YWRhdGEgKGFrYSBtb292KSBpcyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgdGhlCi1maWxlLCBzb21ld2hhdCBjb250cmFyeSB0byB0aGlzIHVzdWFsbHkgYmVpbmcgY2FsbGVkICJ0aGUgaGVhZGVyIi4KLUhvd2V2ZXIsIGEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4LS1mYXN0c3RhcnQiIHRpdGxlPSJUaGUg4oCcZmFzdHN0YXJ04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcZmFzdHN0YXJ04oCdPC9zcGFuPjwvYT4gZmlsZSB3aWxsICh3aXRoIHNvbWUgZWZmb3J0KSBhcnJhbmdlIHRoaXMgdG8KLWJlIGxvY2F0ZWQgbmVhciBzdGFydCBvZiB0aGUgZmlsZSwgd2hpY2ggdGhlbiBhbGxvd3MgaXQgZS5nLiB0byBiZSBwbGF5ZWQKLXdoaWxlIGRvd25sb2FkaW5nLiBBbHRlcm5hdGl2ZWx5LCByYXRoZXIgdGhhbiBoYXZpbmcgb25lIGNodW5rIG9mIG1ldGFkYXRhIGF0Ci1zdGFydCAob3IgZW5kKSwgdGhlcmUgY2FuIGJlIHNvbWUgbWV0YWRhdGEgYXQgc3RhcnQgYW5kIG1vc3Qgb2YgdGhlIG90aGVyCi1kYXRhIGNhbiBiZSBzcHJlYWQgb3V0IGludG8gZnJhZ21lbnRzIG9mIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXRtdXguaHRtbCNHc3RRVE11eC0tZnJhZ21lbnQtZHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxmcmFnbWVudC1kdXJhdGlvbuKAnTwvc3Bhbj48L2E+LgotSWYgc3VjaCBmcmFnbWVudGVkIGxheW91dCBpcyBpbnRlbmRlZCBmb3Igc3RyZWFtaW5nIHB1cnBvc2VzLCB0aGVuCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwjR3N0UVRNdXgtLXN0cmVhbWFibGUiIHRpdGxlPSJUaGUg4oCcc3RyZWFtYWJsZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHN0cmVhbWFibGXigJ08L3NwYW4+PC9hPiBhbGxvd3MgZm9yZWdvaW5nIHRvIGFkZCBpbmRleCBtZXRhZGF0YSAoYXQgdGhlIGVuZCBvZgotZmlsZSkuPC9wPgotPHA+V2hlbiB0aGUgbWF4aW11bSBkdXJhdGlvbiB0byBiZSByZWNvcmRlZCBjYW4gYmUga25vd24gaW4gYWR2YW5jZSwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sI0dzdFFUTXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UVRNdXg8L3NwYW4+PC9hPgotYWxzbyBzdXBwb3J0cyBhICdSb2J1c3QgTXV4aW5nJyBtb2RlLiBJbiByb2J1c3QgbXV4aW5nIG1vZGUsICBzcGFjZSBmb3IgdGhlCi1oZWFkZXJzIGFyZSByZXNlcnZlZCBhdCB0aGUgc3RhcnQgb2YgbXV4aW5nLCBhbmQgcmV3cml0dGVuIGF0IGEgY29uZmlndXJhYmxlCi1pbnRlcnZhbCwgc28gdGhhdCB0aGUgb3V0cHV0IGZpbGUgaXMgYWx3YXlzIHBsYXlhYmxlLCBldmVuIGlmIHRoZSByZWNvcmRpbmcKLWlzIGludGVycnVwdGVkIHVuY2xlYW5seSBieSBhIGNyYXNoLiBSb2J1c3QgbXV4aW5nIG1vZGUgcmVxdWlyZXMgYSBzZWVrYWJsZQotb3V0cHV0LCBzdWNoIGFzIGZpbGVzaW5rLCBiZWNhdXNlIGl0IG5lZWRzIHRvIHJld3JpdGUgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLjwvcD4KLTxwPlRvIGVuYWJsZSByb2J1c3QgbXV4aW5nIG1vZGUsIHNldCB0aGUgPHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnTwvc3Bhbj4KLWFuZCA8c3BhbiBjbGFzcz0idHlwZSI+4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdPC9zcGFuPiBwcm9wZXJ0eS4gQWxzbyBwcmVzZW50IGlzIHRoZQotPHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ08L3NwYW4+IHByb3BlcnR5LCB3aGljaCBjYW4gYmUgaW5jcmVhc2VkIGlmCi1mb3Igc29tZSByZWFzb24gdGhlIGRlZmF1bHQgaXMgbm90IGxhcmdlIGVub3VnaCBhbmQgdGhlIGluaXRpYWwgcmVzZXJ2ZWQKLXNwYWNlIGZvciBoZWFkZXJzIGlzIHRvbyBzbWFsbC4gQXBwbGljYXRpb25zIGNhbiBtb25pdG9yIHRoZQotPHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZ+KAnTwvc3Bhbj4gcHJvcGVydHkgdG8gc2VlIGhvdyBjbG9zZSB0byBmdWxsCi10aGUgcmVzZXJ2ZWQgc3BhY2UgaXMgYmVjb21pbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjExNy44LjkiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHY0bDJzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPndpZHRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzIwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmhlaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI0MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXRtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5tb3Y8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLVJlY29yZHMgYSB2aWRlbyBzdHJlYW0gY2FwdHVyZWQgZnJvbSBhIHY0bDIgZGV2aWNlIGFuZCBtdXhlcyBpdCBpbnRvIGEgcXQgZmlsZS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTcuOC4xMC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pc29tcDQuaHRtbCNwbHVnaW4taXNvbXA0Ij5pc29tcDQ8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaGlhZ28gU291c2EgU2FudG9zICZsdDt0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5iciZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE3LjguMTAuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMzJMRSwgUzMyQkUsIFMyNExFLCBTMjRCRSwgUzE2TEUsIFMxNkJFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludCkzLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXcsIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWR2aSwgYmxvY2tfYWxpZ249KGludClbIDY0LCA4MDk2IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vQU1SLCByYXRlPShpbnQpODAwMCwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL0FNUi1XQiwgcmF0ZT0oaW50KTE2MDAwLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hbGFjLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnN1YnRpdGxlXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD50ZXh0L3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl1dGY4PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCLCBVWVZZLCB2MjEwIH0sIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZGl2eCwgZGl2eHZlcnNpb249KGludCk1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1wcm9yZXMsIHZhcmlhbnQ9KHN0cmluZyl7IHN0YW5kYXJkLCBsdCwgaHEsIHByb3h5IH0sIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmMsIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1zdnEsIHN2cXZlcnNpb249KGludCkzLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gaW1hZ2UvanBlZywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA4LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kaXJhYywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcXQtcGFydCwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpYXBwbGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9xdWlja3RpbWU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNdXgtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RRVE11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFFUTXV4OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNdXgtLWR0cy1tZXRob2QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkdHMtbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkdHMtbWV0aG9k4oCdICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFFUTXV4RHRzTWV0aG9kczwvc3Bhbj48L3ByZT4KLTxwPk1ldGhvZCB0byBkZXRlcm1pbmUgRFRTIHRpbWUgKERFUFJFQ0FURUQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiByZW9yZGVyPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRVE11eC0tZmFzdHN0YXJ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmFzdHN0YXJ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmYXN0c3RhcnTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRVE11eC0tZmFzdHN0YXJ0LWZpbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmYXN0c3RhcnQtZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmFzdHN0YXJ0LWZpbGXigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWxlIHRoYXQgd2lsbCBiZSB1c2VkIHRlbXBvcmFyaWx5IHRvIHN0b3JlIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHdoZW4gY3JlYXRpbmcgYSBmYXN0c3RhcnQgZmlsZS4gSWYgbnVsbCBhIGZpbGVwYXRoIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRVE11eC0tZnJhZ21lbnQtZHVyYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmcmFnbWVudC1kdXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZnJhZ21lbnQtZHVyYXRpb27igJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5GcmFnbWVudCBkdXJhdGlvbnMgaW4gbXMgKHByb2R1Y2UgYSBmcmFnbWVudGVkIGZpbGUgaWYgJmd0OyAwKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNdXgtLW1vb3YtcmVjb3ZlcnktZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vb3YtcmVjb3ZlcnktZmlsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9vdi1yZWNvdmVyeS1maWxl4oCdICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5GaWxlIHRvIGJlIHVzZWQgdG8gc3RvcmUgZGF0YSBmb3IgbW9vdiBhdG9tIG1ha2luZyBtb3ZpZSBmaWxlIHJlY292ZXJ5IHBvc3NpYmxlIGluIGNhc2Ugb2YgYSBjcmFzaCBkdXJpbmcgbXV4aW5nLiBOdWxsIGZvciBkaXNhYmxlZC4gKEV4cGVyaW1lbnRhbCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFFUTXV4LS1tb3ZpZS10aW1lc2NhbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb3ZpZS10aW1lc2NhbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vdmllLXRpbWVzY2FsZeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZXNjYWxlIHRvIHVzZSBpbiB0aGUgbW92aWUgKHVuaXRzIHBlciBzZWNvbmQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE4MDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFFUTXV4LS1wcmVzZW50YXRpb24tdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByZXNlbnRhdGlvbi10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcmVzZW50YXRpb24tdGltZeKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkNhbGN1bGF0ZSBhbmQgaW5jbHVkZSBwcmVzZW50YXRpb24vY29tcG9zaXRpb24gdGltZSAoaW4gYWRkaXRpb24gdG8gZGVjb2RpbmcgdGltZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFFUTXV4LS1zdHJlYW1hYmxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RyZWFtYWJsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RyZWFtYWJsZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgdG8gYmUgc3RyZWFtZWQgYW5kIGhlbmNlIG5vIGluZGV4ZXMgd3JpdHRlbiBvciBkdXJhdGlvbiB3cml0dGVuLiAoREVQUkVDQVRFRCwgb25seSB2YWxpZCBmb3IgZnJhZ21lbnRlZCBNUDQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNdXgtLXRyYWstdGltZXNjYWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdHJhay10aW1lc2NhbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRyYWstdGltZXNjYWxl4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGltZXNjYWxlIHRvIHVzZSBmb3IgdGhlIHRyYWNrcyAodW5pdHMgcGVyIHNlY29uZCwgMCBpcyBhdXRvbWF0aWMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RRVE11eC0tcmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLWJ5dGVzLXBlci1zZWPigJ0gICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TXVsdGlwbGllciBmb3IgY29udmVydGluZyByZXNlcnZlZC1tYXgtZHVyYXRpb24gaW50byBieXRlcyBvZiBoZWFkZXIgdG8gcmVzZXJ2ZSwgcGVyIHNlY29uZCwgcGVyIHRyYWNrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTAwMDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1NTA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFFUTXV4LS1yZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZ+KAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPlJlcG9ydHMgdGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiByZW1haW5pbmcgbW9vdiBoZWFkZXIgc3BhY2UgcmVzZXJ2ZWQgdXNpbmcgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UVRNdXgtLXJlc2VydmVkLW1heC1kdXJhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2VydmVkLW1heC1kdXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzZXJ2ZWQtbWF4LWR1cmF0aW9u4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hlbiBzZXQgdG8gYSB2YWx1ZSAmZ3Q7IDAsIHJlc2VydmVzIHNwYWNlIGZvciBpbmRleCB0YWJsZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTg0NDY3NDQwNzM3MDk1NTE2MTU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFFUTXV4LS1yZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2VydmVkLW1vb3YtdXBkYXRlLXBlcmlvZOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gdXNlZCB3aXRoIHJlc2VydmVkLW1heC1kdXJhdGlvbiwgcGVyaW9kaWNhbGx5IHVwZGF0ZXMgdGhlIGluZGV4IHRhYmxlcyB3aXRoIGluZm9ybWF0aW9uIG11eGVkIHNvIGZhci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTg0NDY3NDQwNzM3MDk1NTE2MTU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OTEzY2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cXVhcmt0djogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG11eC5odG1sIiB0aXRsZT0icXRtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwiIHRpdGxlPSJyYWRpb2FjdHYiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXVhcmt0di50b3Bfb2ZfcGFnZSI+PC9hPnF1YXJrdHY8L3NwYW4+PC9oMj4KLTxwPnF1YXJrdHY8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lmh0bWwjR3N0UXVhcmtUVi0tcGxhbmVzIiB0aXRsZT0iVGhlIOKAnHBsYW5lc+KAnSBwcm9wZXJ0eSI+cGxhbmVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UXVhcmtUViI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lmh0bWwjR3N0UXVhcmtUVi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UXVhcmtUViI+R3N0UXVhcmtUVjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RRdWFya1RWCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+UXVhcmtUViBkaXNvbHZlcyBtb3Zpbmcgb2JqZWN0cy4gSXQgcGlja3MgdXAgcGl4ZWxzIGZyb20KLXRoZSBsYXN0IGZyYW1lcyByYW5kb21seS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE4LjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVhcmt0diA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiBxdWFya3R2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE4LjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwjcGx1Z2luLWVmZmVjdHYiPmVmZmVjdHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE4LjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyB4UkdCLCB4QkdSLCBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgeFJHQiwgeEJHUiwgQkdSeCwgUkdCeCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFF1YXJrVFYtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RRdWFya1RWPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UXVhcmtUVjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXVhcmt0di5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UXVhcmtUVi0tcGxhbmVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGxhbmVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwbGFuZXPigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgcGxhbmVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzEsNjRdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTY8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjY1OTAwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cmFkaW9hY3R2OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF1YXJrdHYuaHRtbCIgdGl0bGU9InF1YXJrdHYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCIgdGl0bGU9InJldnR2Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdWFya3R2Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di50b3Bfb2ZfcGFnZSI+PC9hPnJhZGlvYWN0djwvc3Bhbj48L2gyPgotPHA+cmFkaW9hY3R2PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmFkaW9hY1RWQ29sb3I8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYuaHRtbCNHc3RSYWRpb2FjVFYtLWNvbG9yIiB0aXRsZT0iVGhlIOKAnGNvbG9y4oCdIHByb3BlcnR5Ij5jb2xvcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYuaHRtbCNHc3RSYWRpb2FjVFYtLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnGludGVydmFs4oCdIHByb3BlcnR5Ij5pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSYWRpb2FjVFZNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwjR3N0UmFkaW9hY1RWLS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPm1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwjR3N0UmFkaW9hY1RWLS10cmlnZ2VyIiB0aXRsZT0iVGhlIOKAnHRyaWdnZXLigJ0gcHJvcGVydHkiPnRyaWdnZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJhZGlvYWNUViI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJhZGlvYWN0di5odG1sI0dzdFJhZGlvYWNUVi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UmFkaW9hY1RWIj5Hc3RSYWRpb2FjVFY8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSYWRpb2FjVFYKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJhZGlvYWNUViBkb2VzICpOT1QqIGRldGVjdCBhIHJhZGlvYWN0aXZpdHkuIEl0IGRldGVjdHMgYSBkaWZmZXJlbmNlCi1mcm9tIHByZXZpb3VzIGZyYW1lIGFuZCBibHVycyBpdC48L3A+Ci08cD5SYWRpb2FjVFYgaGFzIDQgbW9kZSwgbm9ybWFsLCBzdHJvYmUxLCBzdHJvYmUyIGFuZCB0cmlnZ2VyLgotSW4gdHJpZ2dlciBtb2RlLCBlZmZlY3QgYXBwZWFycyBvbmx5IHdoZW4gdGhlIHRyaWdnZXIgcHJvcGVydHkgaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+VFJVRTwvY29kZT48L2E+LjwvcD4KLTxwPnN0cm9iZTEgYW5kIHN0cm9iZTIgbW9kZSBkcm9wcyBzb21lIGZyYW1lcy4gc3Ryb2JlMSBtb2RlIHVzZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgotY3VycmVudCBmcmFtZSBhbmQgcHJldmlvdXMgZnJhbWUgZHJvcHBlZCwgd2hpbGUgc3Ryb2JlMiBtb2RlIHVzZXMgdGhlIGRpZmZlcmVuY2UgZnJvbQotcHJldmlvdXMgZnJhbWUgZGlzcGxheWVkLiBUaGUgZWZmZWN0IG9mIHN0cm9iZTIgaXMgc3Ryb25nZXIgdGhhbiBzdHJvYmUxLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTkuNy41Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiByYWRpb2FjdHYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgcmFkaW9hY3R2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTE5LjcuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwjcGx1Z2luLWVmZmVjdHYiPmVmZmVjdHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMTkuNy42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIEJHUnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCBCR1J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yYWRpb2FjdHYub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJhZGlvYWNUVi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJhZGlvYWNUVjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJhZGlvYWNUVjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSYWRpb2FjVFYtLWNvbG9yIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29sb3LigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbG9y4oCdICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UmFkaW9hY1RWQ29sb3I8L3NwYW4+PC9wcmU+Ci08cD5Db2xvci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogV2hpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJhZGlvYWNUVi0taW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaW50ZXJ2YWzigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TbmFwc2hvdCBpbnRlcnZhbCAoaW4gc3Ryb2JlIG1vZGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gR19NQVhJTlQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSYWRpb2FjVFYtLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb2Rl4oCdICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFJhZGlvYWNUVk1vZGU8L3NwYW4+PC9wcmU+Ci08cD5Nb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOb3JtYWw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJhZGlvYWNUVi0tdHJpZ2dlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRyaWdnZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRyaWdnZXLigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VHJpZ2dlciAoaW4gdHJpZ2dlciBtb2RlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJldnR2Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMwYjU4NS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cmV2dHY6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwiIHRpdGxlPSJyYWRpb2FjdHYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sIiB0aXRsZT0icmdhbmFseXNpcyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0diI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di50b3Bfb2ZfcGFnZSI+PC9hPnJldnR2PC9zcGFuPjwvaDI+Ci08cD5yZXZ0djwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJldnR2Lmh0bWwjR3N0UmV2VFYtLWRlbGF5IiB0aXRsZT0iVGhlIOKAnGRlbGF54oCdIHByb3BlcnR5Ij5kZWxheTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCNHc3RSZXZUVi0tZ2FpbiIgdGl0bGU9IlRoZSDigJxnYWlu4oCdIHByb3BlcnR5Ij5nYWluPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5odG1sI0dzdFJldlRWLS1saW5lc3BhY2UiIHRpdGxlPSJUaGUg4oCcbGluZXNwYWNl4oCdIHByb3BlcnR5Ij5saW5lc3BhY2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJldlRWIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJldnR2Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5odG1sI0dzdFJldlRWLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSZXZUViI+R3N0UmV2VFY8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJldlRWCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJldnR2LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJldlRWIGFjdHMgbGlrZSBhIHZpZGVvIHdhdmVmb3JtIG1vbml0b3IgZm9yIGVhY2ggbGluZSBvZiB2aWRlbwotcHJvY2Vzc2VkLiBUaGlzIGNyZWF0ZXMgYSBwc2V1ZG8gM0QgZWZmZWN0IGJhc2VkIG9uIHRoZSBicmlnaHRuZXNzCi1vZiB0aGUgdmlkZW8gYWxvbmcgZWFjaCBsaW5lLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjAuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiByZXZ0diA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiByZXZ0diBvbiBhIHRlc3Qgc3RyZWFtLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyMC43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZWZmZWN0di5odG1sI3BsdWdpbi1lZmZlY3R2Ij5lZmZlY3R2PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmJlJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyMC43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQkdSeCwgUkdCeCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJldlRWLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UmV2VFY8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSZXZUVjs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJldlRWLS1kZWxheSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRlbGF54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZWxheeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWxheSBpbiBmcmFtZXMgYmV0d2VlbiB1cGRhdGVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzEsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJldlRWLS1nYWluIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ2FpbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZ2FpbuKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q29udHJvbCBnYWluLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzEsMjAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDUwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZXZUVi0tbGluZXNwYWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbGluZXNwYWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsaW5lc3BhY2XigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Db250cm9sIGxpbmUgc3BhY2luZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA2PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjE2ZmY3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJnYW5hbHlzaXM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmV2dHYuaHRtbCIgdGl0bGU9InJldnR2Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5odG1sIiB0aXRsZT0icmdsaW1pdGVyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZXZ0di5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMudG9wX29mX3BhZ2UiPjwvYT5yZ2FuYWx5c2lzPC9zcGFuPjwvaDI+Ci08cD5yZ2FuYWx5c2lzPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCNHc3RSZ0FuYWx5c2lzLS1mb3JjZWQiIHRpdGxlPSJUaGUg4oCcZm9yY2Vk4oCdIHByb3BlcnR5Ij5mb3JjZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCNHc3RSZ0FuYWx5c2lzLS1udW0tdHJhY2tzIiB0aXRsZT0iVGhlIOKAnG51bS10cmFja3PigJ0gcHJvcGVydHkiPm51bS10cmFja3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCNHc3RSZ0FuYWx5c2lzLS1yZWZlcmVuY2UtbGV2ZWwiIHRpdGxlPSJUaGUg4oCccmVmZXJlbmNlLWxldmVs4oCdIHByb3BlcnR5Ij5yZWZlcmVuY2UtbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sI0dzdFJnQW5hbHlzaXMtLW1lc3NhZ2UiIHRpdGxlPSJUaGUg4oCcbWVzc2FnZeKAnSBwcm9wZXJ0eSI+bWVzc2FnZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UmdBbmFseXNpcyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwjR3N0UmdBbmFseXNpcy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UmdBbmFseXNpcyI+R3N0UmdBbmFseXNpczwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UmdBbmFseXNpcwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBhbmFseXplcyByYXcgYXVkaW8gc2FtcGxlIGRhdGEgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm9wb3NlZDwvcD4KLTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3JlcGxheWdhaW4ub3JnIiB0YXJnZXQ9Il90b3AiPlJlcGxheUdhaW4gc3RhbmRhcmQ8L2E+IGZvcgotPHA+Y2FsY3VsYXRpbmcgdGhlIGlkZWFsIHJlcGxheSBnYWluIGZvciBtdXNpYyB0cmFja3MgYW5kIGFsYnVtcy4gIFRoZSBlbGVtZW50Ci1pcyBkZXNpZ25lZCBhcyBhIHBhc3MtdGhyb3VnaCBmaWx0ZXIgdGhhdCBuZXZlciBtb2RpZmllcyBhbnkgZGF0YS4gIEFzIGl0Ci1yZWNlaXZlcyBhbiBFT1MgZXZlbnQsIGl0IGZpbmFsaXplcyB0aGUgb25nb2luZyBhbmFseXNpcyBhbmQgZ2VuZXJhdGVzIGEgdGFnCi1saXN0IGNvbnRhaW5pbmcgdGhlIHJlc3VsdHMuICBJdCBpcyBzZW50IGRvd25zdHJlYW0gd2l0aCBhIHRhZyBldmVudCBhbmQKLXBvc3RlZCBvbiB0aGUgbWVzc2FnZSBidXMgd2l0aCBhIHRhZyBtZXNzYWdlLiAgVGhlIEVPUyBldmVudCBpcyBmb3J3YXJkZWQgYXMKLW5vcm1hbCBhZnRlcndhcmRzLiAgUmVzdWx0IHRhZyBsaXN0cyBhdCBsZWFzdCBjb250YWluIHRoZSB0YWdzCi08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stR0FJTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19UUkFDS19HQUlOPC9zcGFuPjwvYT4sIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1UUkFDSy1QRUFLOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX1RSQUNLX1BFQUs8L3NwYW4+PC9hPiBhbmQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVJFRkVSRU5DRS1MRVZFTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19SRUZFUkVOQ0VfTEVWRUw8L3NwYW4+PC9hPi48L3A+Ci08cD5CZWNhdXNlIHRoZSBnZW5lcmF0ZWQgbWV0YWRhdGEgdGFncyBiZWNvbWUgYXZhaWxhYmxlIGF0IHRoZSBlbmQgb2Ygc3RyZWFtcywKLWRvd25zdHJlYW0gbXV4ZXIgYW5kIGVuY29kZXIgZWxlbWVudHMgYXJlIG5vcm1hbGx5IHVuYWJsZSB0byBzYXZlIHRoZW0gaW4KLXRoZWlyIG91dHB1dCBzaW5jZSB0aGV5IGdlbmVyYWxseSBzYXZlIG1ldGFkYXRhIGluIHRoZSBmaWxlIGhlYWRlci4KLVRoZXJlZm9yZSwgaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHRoYXQgYXBwbGljYXRpb25zIHJlYWQgdGhlIHJlc3VsdHMgaW4gYSBidXMKLWV2ZW50IGhhbmRsZXIgZm9yIHRoZSB0YWcgbWVzc2FnZS4gIE9idGFpbmluZyB0aGUgdmFsdWVzIHRoaXMgd2F5IGlzIGFsd2F5cwotbmVlZGVkIGZvciBhbGJ1bSBwcm9jZXNzaW5nIChzZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwjR3N0UmdBbmFseXNpcy0tbnVtLXRyYWNrcyIgdGl0bGU9IlRoZSDigJxudW0tdHJhY2tz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbnVtLXRyYWNrc+KAnTwvc3Bhbj48L2E+IHByb3BlcnR5KSBzaW5jZQotdGhlIGFsYnVtIGdhaW4gYW5kIHBlYWsgdmFsdWVzIG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGFsbCB0cmFja3Mgb2YgYW4KLWFsYnVtLCBub3QganVzdCB0aGUgbGFzdCBvbmUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyMS43LjYiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnQgYXVkaW90ZXN0c3JjIHdhdmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zaW5lIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MTI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiByZ2FuYWx5c2lzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmYWtlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBBbmFseXplIGEgc2ltcGxlIHRlc3Qgd2F2ZWZvcm0KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj50IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5maWxlbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmV4dCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIFwKLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiByZ2FuYWx5c2lzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmYWtlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBBbmFseXplIGEgZ2l2ZW4gZmlsZQotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnQgZ25vbWV2ZnNzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5odHRwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vcmVwbGF5Z2Fpbi5oeWRyb2dlbmF1ZGlvLm9yZy9yZWZfcGluay53YXYgXDwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gd2F2cGFyc2UgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJnYW5hbHlzaXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZha2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEFuYWx5emUgdGhlIHBpbmsgbm9pc2UgcmVmZXJlbmNlIGZpbGUKLTxwPgotVGhlIGFib3ZlIGxhdW5jaCBsaW5lIHlpZWxkcyBhIHJlc3VsdCBnYWluIG9mICs2IGRCIChpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZAotKzAgZEIpLiAgVGhpcyBpcyBub3QgaW4gZXJyb3IsIHJlZmVyIHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCNHc3RSZ0FuYWx5c2lzLS1yZWZlcmVuY2UtbGV2ZWwiIHRpdGxlPSJUaGUg4oCccmVmZXJlbmNlLWxldmVs4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccmVmZXJlbmNlLWxldmVs4oCdPC9zcGFuPjwvYT4KLXByb3BlcnR5IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi08L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjEuNy43Ij48L2E+PGgzPkFja25vd2xlZGdlbWVudHM8L2gzPgotPHA+Ci1UaGlzIGVsZW1lbnQgaXMgYmFzZWQgb24gY29kZSB1c2VkIGluIHRoZSA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9zamVuZy5vcmcvdm9yYmlzZ2Fpbi5odG1sIiB0YXJnZXQ9Il90b3AiPnZvcmJpc2dhaW48L2E+IHByb2dyYW0gYW5kIG1hbnkKLW90aGVycy4gIFRoZSByZWxldmFudCBwYXJ0cyBhcmUgY29weXJpZ2h0ZWQgYnkgRGF2aWQgUm9iaW5zb24sIEdsZW4gU2F3eWVyCi1hbmQgRnJhbmsgS2xlbW0uCi08L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTIxLjcuOC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1yZXBsYXlnYWluLmh0bWwjcGx1Z2luLXJlcGxheWdhaW4iPnJlcGxheWdhaW48L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZW7DqSBTdGFkbGVyICZsdDttYWlsQHJlbmVzdGFkbGVyLmRlJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvQW5hbHl6ZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTIxLjcuOC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgUzE2TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KXsgODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgUzE2TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMywgcmF0ZT0oaW50KXsgODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpeyA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzLCByYXRlPShpbnQpeyA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmdBbmFseXNpcy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJnQW5hbHlzaXM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSZ0FuYWx5c2lzOzwvcHJlPgotPHA+T3BhcXVlIGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmdBbmFseXNpcy0tZm9yY2VkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZm9yY2Vk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmb3JjZWTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZXRoZXIgdG8gYW5hbHl6ZSBzdHJlYW1zIGV2ZW4gd2hlbiBSZXBsYXlHYWluIHRhZ3MgZXhpc3QuPC9wPgotPHA+Rm9yIGFzc2lzdGluZyB0cmFuc2NvZGVyL2NvbnZlcnRlciBhcHBsaWNhdGlvbnMsIHRoZSBlbGVtZW50IGNhbiBzaWxlbnRseQotc2tpcCB0aGUgcHJvY2Vzc2luZyBvZiBzdHJlYW1zIHRoYXQgYWxyZWFkeSBjb250YWluIHRoZSBuZWNlc3NhcnkgdGFncy4KLURhdGEgd2lsbCBmbG93IGFzIHVzdWFsIGJ1dCB0aGUgZWxlbWVudCB3aWxsIG5vdCBjb25zdW1lIENQVSB0aW1lIGFuZCB3aWxsCi1ub3QgZ2VuZXJhdGUgcmVzdWx0IHRhZ3MuICBUbyBlbmFibGUgcG9zc2libGUgc2tpcHBpbmcsIHNldCB0aGlzIHByb3BlcnR5Ci10byA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNGQUxTRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+RkFMU0U8L3NwYW4+PC9hPi48L3A+Ci08cD5JZiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwjR3N0UmdBbmFseXNpcy0tbnVtLXRyYWNrcyIgdGl0bGU9IlRoZSDigJxudW0tdHJhY2tz4oCdIHByb3BlcnR5Ij5hbGJ1bQotcHJvY2Vzc2luZzwvYT4sIHRoZSBlbGVtZW50IHdpbGwgc2tpcCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBhbGJ1bQotdHJhY2tzIGlmIGEgZnVsbCBzZXQgb2YgdGFncyBpcyBmb3VuZCBmb3IgdGhlIGZpcnN0IHRyYWNrLiAgSWYgYSBzdWJzZXF1ZW50Ci10cmFjayBvZiB0aGUgYWxidW0gaXMgbWlzc2luZyB0YWdzLCBwcm9jZXNzaW5nIGNhbm5vdCBzdGFydCBhZ2Fpbi4gIElmIHRoaXMKLWlzIHVuZGVzaXJlZCwgdGhlIGFwcGxpY2F0aW9uIGhhcyB0byBzY2FuIGFsbCBmaWxlcyBiZWZvcmVoYW5kIGFuZCBlbmFibGUKLWZvcmNpbmcgb2YgcHJvY2Vzc2luZyBpZiBuZWVkZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJnQW5hbHlzaXMtLW51bS10cmFja3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxudW0tdHJhY2tz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxudW0tdHJhY2tz4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgcmVtYWluaW5nIGFsYnVtIHRyYWNrcy48L3A+Ci08cD5BbmFseXppbmcgc2V2ZXJhbCBzdHJlYW1zIHNlcXVlbnRpYWxseSBhbmQgYXNzaWduaW5nIHRoZW0gYSBjb21tb24gcmVzdWx0Ci1nYWluIGlzIGtub3duIGFzICJhbGJ1bSBwcm9jZXNzaW5nIi4gIElmIHRoaXMgZ2FpbiBpcyB1c2VkIGR1cmluZyBwbGF5YmFjawotKGJ5IHN3aXRjaGluZyB0byAiYWxidW0gbW9kZSIpLCBhbGwgdHJhY2tzIG9mIGFuIGFsYnVtIHJlY2VpdmUgdGhlIHNhbWUKLWFtcGxpZmljYXRpb24uICBUaGlzIGtlZXBzIHRoZSByZWxhdGl2ZSB2b2x1bWUgbGV2ZWxzIGJldHdlZW4gdGhlIHRyYWNrcwotaW50YWN0LiAgVG8gZW5hYmxlIHRoaXMsIHNldCB0aGlzIHByb3BlcnR5IHRvIHRoZSBudW1iZXIgb2Ygc3RyZWFtcyB0aGF0Ci13aWxsIGJlIHByb2Nlc3NlZCBhcyBhbGJ1bSB0cmFja3MuPC9wPgotPHA+RXZlcnkgdGltZSBhbiBFT1MgZXZlbnQgaXMgcmVjZWl2ZWQsIHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IGlzCi1kZWNyZW1lbnRlZCBieSBvbmUuICBBcyBpdCByZWFjaGVzIHplcm8sIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgbGFzdCB0cmFjawotb2YgdGhlIGFsYnVtIGZpbmlzaGVkLiAgVGhlIHRhZyBsaXN0IGZvciB0aGUgZmluYWwgc3RyZWFtIHdpbGwgY29udGFpbiB0aGUKLWFkZGl0aW9uYWwgdGFncyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tR0FJTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19BTEJVTV9HQUlOPC9zcGFuPjwvYT4gYW5kIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1QRUFLOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX0FMQlVNX1BFQUs8L3NwYW4+PC9hPi4gIEFsbCBvdGhlcgotc3RyZWFtcyBqdXN0IGdldCB0aGUgdHdvIHRyYWNrIHRhZ3MgcG9zdGVkIGJlY2F1c2UgdGhlIHZhbHVlcyBmb3IgdGhlIGFsYnVtCi10YWdzIGFyZSBub3Qga25vd24gYmVmb3JlIGFsbCB0cmFja3MgYXJlIGFuYWx5emVkLiAgQXBwbGljYXRpb25zIG5lZWQgdG8KLWVuc3VyZSB0aGF0IHRoZSBhbGJ1bSBnYWluIGFuZCBwZWFrIHZhbHVlcyBhcmUgYWxzbyBhc3NvY2lhdGVkIHdpdGggdGhlCi1vdGhlciB0cmFja3Mgd2hlbiBzdG9yaW5nIHRoZSByZXN1bHRzLjwvcD4KLTxwPklmIHRoZSB0b3RhbCBudW1iZXIgb2YgYWxidW0gdHJhY2tzIGlzIHVua25vd24gYmVmb3JlaGFuZCwganVzdCBlbnN1cmUgdGhhdAotdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAxIGJlZm9yZSBlYWNoIHRyYWNrIHN0YXJ0cy4gIFRoZW4gYmVmb3JlIHRoZSBlbmQKLW9mIHRoZSBsYXN0IHRyYWNrLCBzZXQgaXQgdG8gdGhlIHZhbHVlIDEuPC9wPgotPHA+VG8gcGVyZm9ybSBhbGJ1bSBwcm9jZXNzaW5nLCB0aGUgZWxlbWVudCBoYXMgdG8gcHJlc2VydmUgZGF0YSBiZXR3ZWVuCi1zdHJlYW1zLiAgVGhpcyBjYW5ub3Qgc3Vydml2ZSBhIHN0YXRlIGNoYW5nZSB0byB0aGUgTlVMTCBvciBSRUFEWSBzdGF0ZS4KLUlmIHlvdSBjaGFuZ2UgeW91ciBwaXBlbGluZSdzIHN0YXRlIHRvIE5VTEwgb3IgUkVBRFkgYmV0d2VlbiB0cmFja3MsIGxvY2sKLXRoZSBlbGVtZW50J3Mgc3RhdGUgdXNpbmcgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtbG9ja2VkLXN0YXRlIj48Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUoKTwvY29kZT48L2E+IHdoZW4gaXQgaXMgaW4KLVBBVVNFRCBvciBQTEFZSU5HLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJnQW5hbHlzaXMtLXJlZmVyZW5jZS1sZXZlbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlZmVyZW5jZS1sZXZlbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVmZXJlbmNlLWxldmVs4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+UmVmZXJlbmNlIGxldmVsIFtkQl0uPC9wPgotPHA+QW5hbHl6aW5nIHRoZSBSZXBsYXlHYWluIHBpbmsgbm9pc2UgcmVmZXJlbmNlIHdhdmVmb3JtIGNvbXB1dGVzIGEgcmVzdWx0IG9mCi0rNiBkQiBpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZCAwIGRCLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBkZWZhdWx0IHJlZmVyZW5jZQotbGV2ZWwgaXMgODkgZEIuICBUbyBvYnRhaW4gdmFsdWVzIGFzIGxpbmVkIG91dCBpbiB0aGUgb3JpZ2luYWwgcHJvcG9zYWwgb2YKLVJlcGxheUdhaW4sIHNldCB0aGlzIHByb3BlcnR5IHRvIDgzLjwvcD4KLTxwPkFsbW9zdCBhbGwgc29mdHdhcmUgdXNlcyA4OSBkQiBhcyBhIHJlZmVyZW5jZSBob3dldmVyLCBhbmQgdGhpcyB2YWx1ZSBoYXMKLWJlY29tZSB0aGUgbmV3IG9mZmljaWFsIHZhbHVlLiAgVGhhdCBpcyB0byBzYXksIHdoaWxlIHRoZSBjaGFuZ2UgaGFzIGJlZW4KLWFjY2xhaW1lZCBieSB0aGUgYXV0aG9yIG9mIHRoZSBSZXBsYXlHYWluIHByb3Bvc2FsLCB0aGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vcmVwbGF5Z2Fpbi5vcmciIHRhcmdldD0iX3RvcCI+d2VicGFnZTwvYT4gaXMgc3RpbGwgb3V0ZGF0ZWQgYXQgdGhlIHRpbWUKLW9mIHRoaXMgd3JpdGluZy48L3A+Ci08cD5UaGUgdmFsdWUgd2FzIGNoYW5nZWQgYmVjYXVzZSB0aGUgb3JpZ2luYWwgcHJvcG9zYWwgcmVjb21tZW5kcyBhIGRlZmF1bHQKLXByZS1hbXAgdmFsdWUgb2YgKzYgZEIgZm9yIHBsYXliYWNrLiAgVGhpcyBzZWVtZWQgYSBiaXQgb2RkLCBhcyBpdCBtZWFucwotdGhhdCB0aGUgYWxnb3JpdGhtIGhhcyB0aGUgZ2VuZXJhbCB0ZW5kZW5jeSB0byBwcm9kdWNlIGFkanVzdG1lbnQgdmFsdWVzCi10aGF0IGFyZSA2IGRCIHRvbyBsb3cuICBCdW1waW5nIHRoZSByZWZlcmVuY2UgbGV2ZWwgYnkgNiBkQiBjb21wZW5zYXRlZCBmb3IKLXRoaXMuPC9wPgotPHA+VGhlIHByb2JsZW0gb2YgdGhlIHJlZmVyZW5jZSBsZXZlbCBiZWluZyBhbWJpZ3VvdXMgZm9yIGxhY2sgb2YgY29uY2lzZQotc3RhbmRhcmRpemF0aW9uIGlzIHRvIGJlIHNvbHZlZCBieSBhZG9wdGluZyB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVJFRkVSRU5DRS1MRVZFTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19SRUZFUkVOQ0VfTEVWRUw8L3NwYW4+PC9hPgotdGFnLCB3aGljaCBhbGxvd3MgdG8gc3RvcmUgdGhlIHVzZWQgdmFsdWUgYWxvbmdzaWRlIHRoZSBnYWluIHZhbHVlcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDE1MF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA4OTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmdBbmFseXNpcy0tbWVzc2FnZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1lc3NhZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1lc3NhZ2XigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+UG9zdCBzdGF0aWNzIG1lc3NhZ2VzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZ1ZvbHVtZTwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzY2VkYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5yZ2xpbWl0ZXI6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sIiB0aXRsZT0icmdhbmFseXNpcyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sIiB0aXRsZT0icmd2b2x1bWUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLnRvcF9vZl9wYWdlIj48L2E+cmdsaW1pdGVyPC9zcGFuPjwvaDI+Ci08cD5yZ2xpbWl0ZXI8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLmh0bWwjR3N0UmdMaW1pdGVyLS1lbmFibGVkIiB0aXRsZT0iVGhlIOKAnGVuYWJsZWTigJ0gcHJvcGVydHkiPmVuYWJsZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSZ0xpbWl0ZXIiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuaHRtbCNHc3RSZ0xpbWl0ZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJnTGltaXRlciI+R3N0UmdMaW1pdGVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJnTGltaXRlcgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGFwcGxpZXMgc2lnbmFsIGNvbXByZXNzaW9uL2xpbWl0aW5nIHRvIHJhdyBhdWRpbyBkYXRhLiAgSXQKLXBlcmZvcm1zIHN0cmljdCBoYXJkIGxpbWl0aW5nIHdpdGggc29mdC1rbmVlIGNoYXJhY3RlcmlzdGljcywgdXNpbmcgYQotdGhyZXNob2xkIG9mIC02IGRCLiAgVGhpcyB0eXBlIG9mIGZpbHRlciBpcyBtZW50aW9uZWQgaW4gdGhlIHByb3Bvc2VkIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3JlcGxheWdhaW4ub3JnIiB0YXJnZXQ9Il90b3AiPlJlcGxheUdhaW4gc3RhbmRhcmQ8L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjIuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5maWxlbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmV4dCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgXAotICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcmd2b2x1bWUgcHJlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+Ni4wPC9zcGFuPiBoZWFkcm9vbTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiByZ2xpbWl0ZXIgXAotICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLVBsYXliYWNrIG9mIGEgZmlsZQotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyMi43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcmVwbGF5Z2Fpbi5odG1sI3BsdWdpbi1yZXBsYXlnYWluIj5yZXBsYXlnYWluPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UmVuw6kgU3RhZGxlciAmbHQ7bWFpbEByZW5lc3RhZGxlci5kZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjIuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylGMzJMRSwgbGF5b3V0PShzdHJpbmcpeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUYzMkxFLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnbGltaXRlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmdMaW1pdGVyLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UmdMaW1pdGVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UmdMaW1pdGVyOzwvcHJlPgotPHA+T3BhcXVlIGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZ0xpbWl0ZXItLWVuYWJsZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlbmFibGVk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxlbmFibGVk4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZSBwcm9jZXNzaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sI0dzdFJnVm9sdW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmdWb2x1bWU8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhNjM3Yy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cmd2b2x1bWU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLmh0bWwiIHRpdGxlPSJyZ2xpbWl0ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCIgdGl0bGU9InJpcHBsZXR2Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUudG9wX29mX3BhZ2UiPjwvYT5yZ3ZvbHVtZTwvc3Bhbj48L2gyPgotPHA+cmd2b2x1bWU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLWFsYnVtLW1vZGUiIHRpdGxlPSJUaGUg4oCcYWxidW0tbW9kZeKAnSBwcm9wZXJ0eSI+YWxidW0tbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCNHc3RSZ1ZvbHVtZS0tZmFsbGJhY2stZ2FpbiIgdGl0bGU9IlRoZSDigJxmYWxsYmFjay1nYWlu4oCdIHByb3BlcnR5Ij5mYWxsYmFjay1nYWluPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sI0dzdFJnVm9sdW1lLS1oZWFkcm9vbSIgdGl0bGU9IlRoZSDigJxoZWFkcm9vbeKAnSBwcm9wZXJ0eSI+aGVhZHJvb208L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLXByZS1hbXAiIHRpdGxlPSJUaGUg4oCccHJlLWFtcOKAnSBwcm9wZXJ0eSI+cHJlLWFtcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCNHc3RSZ1ZvbHVtZS0tcmVzdWx0LWdhaW4iIHRpdGxlPSJUaGUg4oCccmVzdWx0LWdhaW7igJ0gcHJvcGVydHkiPnJlc3VsdC1nYWluPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCNHc3RSZ1ZvbHVtZS0tdGFyZ2V0LWdhaW4iIHRpdGxlPSJUaGUg4oCcdGFyZ2V0LWdhaW7igJ0gcHJvcGVydHkiPnRhcmdldC1nYWluPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UmdWb2x1bWUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJnVm9sdW1lIj5Hc3RSZ1ZvbHVtZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSZ1ZvbHVtZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RSZ1ZvbHVtZSBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGFwcGxpZXMgdm9sdW1lIGNoYW5nZXMgdG8gc3RyZWFtcyBhcyBsaW5lZCBvdXQgaW4gdGhlIHByb3Bvc2VkPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vcmVwbGF5Z2Fpbi5vcmciIHRhcmdldD0iX3RvcCI+UmVwbGF5R2FpbiBzdGFuZGFyZDwvYT4uICBJdAotPHA+aW50ZXJwcmV0cyB0aGUgUmVwbGF5R2FpbiBtZXRhIGRhdGEgdGFncyBhbmQgY2FycmllcyBvdXQgdGhlIGFkanVzdG1lbnQgKGJ5Ci11c2luZyBhIHZvbHVtZSBlbGVtZW50IGludGVybmFsbHkpLiAgVGhlIHJlbGV2YW50IHRhZ3MgYXJlOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctVFJBQ0stR0FJTjpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19UUkFDS19HQUlOPC9zcGFuPjwvYT48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVRSQUNLLVBFQUs6Q0FQUyI+PHNwYW4gY2xhc3M9InR5cGUiPkdTVF9UQUdfVFJBQ0tfUEVBSzwvc3Bhbj48L2E+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdMaXN0Lmh0bWwjR1NULVRBRy1BTEJVTS1HQUlOOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfVEFHX0FMQlVNX0dBSU48L3NwYW4+PC9hPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnTGlzdC5odG1sI0dTVC1UQUctQUxCVU0tUEVBSzpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19BTEJVTV9QRUFLPC9zcGFuPjwvYT48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ0xpc3QuaHRtbCNHU1QtVEFHLVJFRkVSRU5DRS1MRVZFTDpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX1RBR19SRUZFUkVOQ0VfTEVWRUw8L3NwYW4+PC9hPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+VGhlIGluZm9ybWF0aW9uIGNhcnJpZWQgYnkgdGhlc2UgdGFncyBtdXN0IGhhdmUgYmVlbiBjYWxjdWxhdGVkIGJlZm9yZWhhbmQgYnkKLXBlcmZvcm1pbmcgdGhlIFJlcGxheUdhaW4gYW5hbHlzaXMuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJnYW5hbHlzaXMuaHRtbCNHc3RSZ0FuYWx5c2lzIj5yZ2FuYWx5c2lzPC9hPiBlbGVtZW50LjwvcD4KLTxwPlRoZSBzaWduYWwgY29tcHJlc3Npb24vbGltaXRpbmcgcmVjb21tZW5kYXRpb25zIG91dGxpbmVkIGluIHRoZSBwcm9wb3NlZAotc3RhbmRhcmQgYXJlIG5vdCBpbXBsZW1lbnRlZCBieSB0aGlzIGVsZW1lbnQuICBUaGlzIGhhcyB0byBiZSBoYW5kbGVkIGJ5Ci1zZXBhcmF0ZSBlbGVtZW50cyBiZWNhdXNlIGFwcGxpY2F0aW9ucyBtaWdodCB3YW50IHRvIGhhdmUgYWRkaXRpb25hbCBmaWx0ZXJzCi1iZXR3ZWVuIHRoZSB2b2x1bWUgYWRqdXN0bWVudCBhbmQgdGhlIGxpbWl0aW5nIHN0YWdlLiAgQSBiYXNpYyBsaW1pdGVyIGlzCi1pbmNsdWRlZCB3aXRoIHRoaXMgcGx1Z2luOiBUaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuaHRtbCNHc3RSZ0xpbWl0ZXIiPnJnbGltaXRlcjwvYT4KLWVsZW1lbnQgYXBwbGllcyAtNiBkQiBoYXJkIGxpbWl0aW5nIGFzIG1lbnRpb25lZCBpbiB0aGUgUmVwbGF5R2FpbiBzdGFuZGFyZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTIzLjguOCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZmlsZW5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5leHQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IFwKLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcmd2b2x1bWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUGxheWJhY2sgb2YgYSBmaWxlCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTIzLjguOS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1yZXBsYXlnYWluLmh0bWwjcGx1Z2luLXJlcGxheWdhaW4iPnJlcGxheWdhaW48L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5SZW7DqSBTdGFkbGVyICZsdDttYWlsQHJlbmVzdGFkbGVyLmRlJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyMy44LjkuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIFMxNkxFIH0sIGxheW91dD0oc3RyaW5nKXsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZCB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJnVm9sdW1lLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UmdWb2x1bWU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSZ1ZvbHVtZTs8L3ByZT4KLTxwPk9wYXF1ZSBkYXRhIHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZ1ZvbHVtZS0tYWxidW0tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFsYnVtLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGFsYnVtLW1vZGXigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hldGhlciB0byBwcmVmZXIgYWxidW0gZ2FpbiBvdmVyIHRyYWNrIGdhaW4uPC9wPgotPHA+SWYgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiwgdXNlIGFsYnVtIGdhaW4gaW5zdGVhZCBvZiB0cmFjayBnYWluIGlmIGJvdGggYXJlCi1hdmFpbGFibGUuICBUaGlzIGtlZXBzIHRoZSByZWxhdGl2ZSBsb3VkbmVzcyBsZXZlbHMgb2YgdHJhY2tzIGZyb20gdGhlIHNhbWUKLWFsYnVtIGludGFjdC48L3A+Ci08cD5JZiBzZXQgdG8gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4sIHRyYWNrIG1vZGUgaXMgdXNlZCBpbnN0ZWFkLiAgVGhpcyBlZmZlY3RpdmVseSBsZWFkcyB0bwotbW9yZSBleHRlbnNpdmUgbm9ybWFsaXphdGlvbi48L3A+Ci08cD5JZiBhbGJ1bSBtb2RlIGlzIGVuYWJsZWQgYnV0IHRoZSBhbGJ1bSBnYWluIHRhZyBpcyBhYnNlbnQgaW4gdGhlIHN0cmVhbSwKLXRoZSB0cmFjayBnYWluIGlzIHVzZWQgaW5zdGVhZC4gIElmIGJvdGggZ2FpbiB0YWdzIGFyZSBtaXNzaW5nLCB0aGUgdmFsdWUKLW9mIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLWZhbGxiYWNrLWdhaW4iIHRpdGxlPSJUaGUg4oCcZmFsbGJhY2stZ2FpbuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGZhbGxiYWNrLWdhaW7igJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBpcyB1c2VkIGluc3RlYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJnVm9sdW1lLS1mYWxsYmFjay1nYWluIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZmFsbGJhY2stZ2FpbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmFsbGJhY2stZ2FpbuKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+RmFsbGJhY2sgZ2FpbiBbZEJdIGZvciBzdHJlYW1zIG1pc3NpbmcgUmVwbGF5R2FpbiB0YWdzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy02MCw2MF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSZ1ZvbHVtZS0taGVhZHJvb20iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxoZWFkcm9vbeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaGVhZHJvb23igJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+RXh0cmEgaGVhZHJvb20gW2RCXS4gIFRoaXMgY29udHJvbHMgdGhlIGFtb3VudCBieSB3aGljaCB0aGUgb3V0cHV0IGNhbgotZXhjZWVkIGRpZ2l0YWwgZnVsbCBzY2FsZS48L3A+Ci08cD5Pbmx5IHNldCB0aGlzIHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuMCBpZiBzaWduYWwgY29tcHJlc3Npb24vbGltaXRpbmcgb2YKLWEgc3VpdGFibGUgZm9ybSBpcyBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgKG9yIG91dHB1dCBpcyBicm91Z2h0IGludG8gdGhlCi1jb3JyZWN0IHJhbmdlIGJ5IHNvbWUgb3RoZXIgdHJhbnNmb3JtYXRpb24pLjwvcD4KLTxwPlRoaXMgZWxlbWVudCBpbnRlcm5hbGx5IHVzZXMgYSB2b2x1bWUgZWxlbWVudCwgd2hpY2ggYWxzbyBzdXBwb3J0cwotb3BlcmF0aW5nIG9uIGludGVnZXIgYXVkaW8gZm9ybWF0cy4gIFRoZXNlIGZvcm1hdHMgZG8gbm90IGFsbG93IGV4Y2VlZGluZwotZGlnaXRhbCBmdWxsIHNjYWxlLiAgSWYgZXh0cmEgaGVhZHJvb20gaXMgdXNlZCwgbWFrZSBzdXJlIHRoYXQgdGhlIHJhdwotYXVkaW8gZGF0YSBmb3JtYXQgaXMgZmxvYXRpbmcgcG9pbnQgKEYzMikuICBPdGhlcndpc2UsCi1jbGlwcGluZyBkaXN0b3J0aW9uIG1pZ2h0IGJlIGludHJvZHVjZWQgYXMgcGFydCBvZiB0aGUgdm9sdW1lIGFkanVzdG1lbnQKLWl0c2VsZi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDYwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJnVm9sdW1lLS1wcmUtYW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJlLWFtcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJlLWFtcOKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+QWRkaXRpb25hbCBnYWluIHRvIGFwcGx5IGdsb2JhbGx5IFtkQl0uICBUaGlzIGNvbnRyb2xzIHRoZSB0cmFkZS1vZmYKLWJldHdlZW4gdW5pZm9ybWl0eSBvZiBub3JtYWxpemF0aW9uIGFuZCB1dGlsaXphdGlvbiBvZiBhdmFpbGFibGUgZHluYW1pYwotcmFuZ2UuPC9wPgotPHA+Tm90ZSB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIGlzIDAgZEIgYmVjYXVzZSB0aGUgUmVwbGF5R2FpbiByZWZlcmVuY2UgdmFsdWUKLXdhcyBhZGp1c3RlZCBieSArNiBkQiAoZnJvbSA4MyB0byA4OSBkQikuICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIHRoZTwvcD4KLTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3JlcGxheWdhaW4ub3JnIiB0YXJnZXQ9Il90b3AiPndlYnBhZ2U8L2E+IGlzIHN0aWxsIG91dGRhdGVkIGFuZAotPHA+ZG9lcyBub3QgcmVmbGVjdCB0aGlzIGNoYW5nZSBob3dldmVyLiAgV2hlcmUgdGhlIG9yaWdpbmFsIHByb3Bvc2FsIHN0YXRlcwotdGhhdCBhIHByb3BlciBkZWZhdWx0IHByZS1hbXAgdmFsdWUgaXMgKzYgZEIsIHRoaXMgdHJhbnNsYXRlcyB0byB0aGUgdXNlZCAwCi1kQi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFstNjAsNjBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmdWb2x1bWUtLXJlc3VsdC1nYWluIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzdWx0LWdhaW7igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc3VsdC1nYWlu4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPkFwcGxpZWQgZ2FpbiBbZEJdLiAgVGhpcyBnYWluIGlzIGFwcGxpZWQgdG8gcHJvY2Vzc2VkIGJ1ZmZlciBkYXRhLjwvcD4KLTxwPlRoaXMgaXMgc2V0IHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLXRhcmdldC1nYWluIiB0aXRsZT0iVGhlIOKAnHRhcmdldC1nYWlu4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcdGFyZ2V0LWdhaW7igJ08L3NwYW4+PC9hPiBpZiBhbXBsaWZpY2F0aW9uIGJ5IHRoYXQgYW1vdW50Ci1jYW4gYmUgYXBwbGllZCBzYWZlbHkuICJTYWZlbHkiIG1lYW5zIHRoYXQgdGhlIHZvbHVtZSBhZGp1c3RtZW50IGRvZXMgbm90Ci1pbmZsaWN0IGNsaXBwaW5nIGRpc3RvcnRpb24uICBTaG91bGQgdGhpcyBub3QgYmUgdGhlIGNhc2UsIHRoZSByZXN1bHQgZ2FpbgotaXMgc2V0IHRvIGFuIGFwcHJvcHJpYXRlbHkgcmVkdWNlZCB2YWx1ZSAoYnkgYXBwbHlpbmcgcGVhayBub3JtYWxpemF0aW9uKS4KLVRoZSBwcm9wb3NlZCBzdGFuZGFyZCBjYWxscyB0aGlzICJjbGlwcGluZyBwcmV2ZW50aW9uIi48L3A+Ci08cD5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRhcmdldCBhbmQgcmVzdWx0IGdhaW4gcmVmbGVjdHMgdGhlIG5lY2Vzc2FyeSBhbW91bnQKLW9mIHJlZHVjdGlvbi4gIEFwcGxpY2F0aW9ucyBjYW4gbWFrZSB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbiB0byB0ZW1wb3JhcmlseQotcmVkdWNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLXByZS1hbXAiIHRpdGxlPSJUaGUg4oCccHJlLWFtcOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHByZS1hbXDigJ08L3NwYW4+PC9hPiBmb3Igc3Vic2VxdWVudCBzdHJlYW1zLCBhcyByZWNvbW1lbmRlZCBieQotdGhlIFJlcGxheUdhaW4gc3RhbmRhcmQuPC9wPgotPHA+Tm90ZSB0aGF0IHRhcmdldCBhbmQgcmVzdWx0IGdhaW4gZGlmZmVyaW5nIGZvciBhIGdyZWF0IG1ham9yaXR5IG9mIHN0cmVhbXMKLWluZGljYXRlcyBhIHByb2JsZW06IFdoYXQgaGFwcGVucyBpbiB0aGlzIGNhc2UgaXMgdGhhdCBtb3N0IHN0cmVhbXMgcmVjZWl2ZQotcGVhayBub3JtYWxpemF0aW9uIGluc3RlYWQgb2YgYW1wbGlmaWNhdGlvbiBieSB0aGUgaWRlYWwgcmVwbGF5IGdhaW4uICBUbwotcHJldmVudCB0aGlzLCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sI0dzdFJnVm9sdW1lLS1wcmUtYW1wIiB0aXRsZT0iVGhlIOKAnHByZS1hbXDigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwcmUtYW1w4oCdPC9zcGFuPjwvYT4gaGFzIHRvIGJlIGxvd2VyZWQgYW5kL29yIGEgbGltaXRlcgotaGFzIHRvIGJlIHVzZWQgd2hpY2ggZmFjaWxpdGF0ZXMgdGhlIHVzZSBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLWhlYWRyb29tIiB0aXRsZT0iVGhlIOKAnGhlYWRyb29t4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcaGVhZHJvb23igJ08L3NwYW4+PC9hPi48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTEyMCwxMjBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmdWb2x1bWUtLXRhcmdldC1nYWluIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGFyZ2V0LWdhaW7igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRhcmdldC1nYWlu4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPkFwcGxpY2FibGUgZ2FpbiBbZEJdLiAgVGhpcyBnYWluIGlzIHN1cHBvc2VkIHRvIGJlIGFwcGxpZWQuPC9wPgotPHA+RGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sI0dzdFJnVm9sdW1lLS1hbGJ1bS1tb2RlIiB0aXRsZT0iVGhlIOKAnGFsYnVtLW1vZGXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxhbGJ1bS1tb2Rl4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgYW5kIHRoZQotcHJlc2VuY2Ugb2YgUmVwbGF5R2FpbiB0YWdzIGluIHRoZSBzdHJlYW0sIHRoaXMgaXMgc2V0IGFjY29yZGluZyB0byBvbmUgb2YKLXRoZXNlIHNpbXBsZSBmb3JtdWxhczo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+Ci08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLXByZS1hbXAiIHRpdGxlPSJUaGUg4oCccHJlLWFtcOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHByZS1hbXDigJ08L3NwYW4+PC9hPiArIGFsYnVtIGdhaW4gb2YgdGhlIHN0cmVhbTwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj4KLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCNHc3RSZ1ZvbHVtZS0tcHJlLWFtcCIgdGl0bGU9IlRoZSDigJxwcmUtYW1w4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccHJlLWFtcOKAnTwvc3Bhbj48L2E+ICsgdHJhY2sgZ2FpbiBvZiB0aGUgc3RyZWFtPC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPgotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ3ZvbHVtZS5odG1sI0dzdFJnVm9sdW1lLS1wcmUtYW1wIiB0aXRsZT0iVGhlIOKAnHByZS1hbXDigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwcmUtYW1w4oCdPC9zcGFuPjwvYT4gKyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwjR3N0UmdWb2x1bWUtLWZhbGxiYWNrLWdhaW4iIHRpdGxlPSJUaGUg4oCcZmFsbGJhY2stZ2FpbuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGZhbGxiYWNrLWdhaW7igJ08L3NwYW4+PC9hPgotPC9saT4KLTwvdWw+PC9kaXY+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTEyMCwxMjBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2xpbWl0ZXIuaHRtbCNHc3RSZ0xpbWl0ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSZ0xpbWl0ZXI8L3NwYW4+PC9hPiwgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yZ2FuYWx5c2lzLmh0bWwjR3N0UmdBbmFseXNpcyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJnQW5hbHlzaXM8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiYTE4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cmlwcGxldHY6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmd2b2x1bWUuaHRtbCIgdGl0bGU9InJndm9sdW1lIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuaHRtbCIgdGl0bGU9InJuZGJ1ZmZlcnNpemUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcm5kYnVmZmVyc2l6ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yaXBwbGV0diI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yaXBwbGV0di50b3Bfb2ZfcGFnZSI+PC9hPnJpcHBsZXR2PC9zcGFuPjwvaDI+Ci08cD5yaXBwbGV0djwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UmlwcGxlVFZNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCNHc3RSaXBwbGVUVi0tbW9kZSIgdGl0bGU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5Ij5tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lmh0bWwjR3N0UmlwcGxlVFYtLXJlc2V0IiB0aXRsZT0iVGhlIOKAnHJlc2V04oCdIHByb3BlcnR5Ij5yZXNldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+V3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSaXBwbGVUViI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yaXBwbGV0di5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCNHc3RSaXBwbGVUVi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UmlwcGxlVFYiPkdzdFJpcHBsZVRWPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSaXBwbGVUVgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yaXBwbGV0di5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5SaXBwbGVUViBkb2VzIHJpcHBsZSBtYXJrIGVmZmVjdCBvbiB0aGUgdmlkZW8gaW5wdXQuIFRoZSByaXBwbGUgaXMgY2F1c2VkCi1ieSBtb3Rpb24gb3IgcmFuZG9tIHJhaW4gZHJvcHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyNC43LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJpcHBsZXR2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG92aWRlb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgZWZmZWN0IG9mIHJpcHBsZXR2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI0LjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwjcGx1Z2luLWVmZmVjdHYiPmVmZmVjdHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjQuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQngsIHhCR1IsIHhSR0IgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4LCB4QkdSLCB4UkdCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSaXBwbGVUVi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJpcHBsZVRWPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UmlwcGxlVFY7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSaXBwbGVUVi0tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vZGXigJ0gICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UmlwcGxlVFZNb2RlPC9zcGFuPjwvcHJlPgotPHA+TW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTW90aW9uIERldGVjdGlvbjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UmlwcGxlVFYtLXJlc2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2V04oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+UmVzZXQgYWxsIGN1cnJlbnQgcmlwcGxlcy48L3A+Ci08cD5GbGFnczogV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcm5kYnVmZmVyc2l6ZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY2NmVlNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcm5kYnVmZmVyc2l6ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ybmRidWZmZXJzaXplOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJpcHBsZXR2Lmh0bWwiIHRpdGxlPSJyaXBwbGV0diI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNkZXBheS5odG1sIiB0aXRsZT0icnRwYWMzZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1yaXBwbGV0di5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcm5kYnVmZmVyc2l6ZS50b3Bfb2ZfcGFnZSI+PC9hPnJuZGJ1ZmZlcnNpemU8L3NwYW4+PC9oMj4KLTxwPnJuZGJ1ZmZlcnNpemU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IHB1bGxzIGJ1ZmZlcnMgd2l0aCByYW5kb20gc2l6ZXMgZnJvbSB0aGUgc291cmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI1LjMuMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sI3BsdWdpbi1kZWJ1ZyI+ZGVidWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TdGVmYW4gS29zdCAmbHQ7c3RlZmFuLmtvc3RAbm9raWEuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UZXN0aW5nPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyNS4zLjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJuZGJ1ZmZlcnNpemUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhZWEzOC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwTDE2ZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5Lmh0bWwiIHRpdGxlPSJydHBrbHZwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5Lmh0bWwiIHRpdGxlPSJydHBMMTZwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwTDE2ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cEwxNmRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEwxNkRlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5odG1sI0dzdFJ0cEwxNkRlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBMMTZEZXBheSI+R3N0UnRwTDE2RGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEwxNkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkV4dHJhY3QgcmF3IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAzNTUxLgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MS50eHQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTcyLjYuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB1ZHBzcmMgY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPidhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTQ0MTAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDE2LCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLCBjaGFubmVscz0oaW50KTEsIHBheWxvYWQ9KGludCk5Nic8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBMMTZkZXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcHVsc2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIGRlcGF5bG9hZCBhbiBSVFAgcmF3IGF1ZGlvIHN0cmVhbS4gUmVmZXIgdG8KLXRoZSBydHBMMTZwYXkgZXhhbXBsZSB0byBjcmVhdGUgdGhlIFJUUCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTcyLjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5aZWVzaGFuIEFsaSAmbHQ7emFrMTQ3QHlhaG9vLmNvbSZndDssV2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTcyLjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDE2PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCl7IDEwLCAxMSB9LCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZCRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBMMTZEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEwxNkRlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwTDE2RGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnJ0cEwxNnBheTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjNlMjY5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwTDE2cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBMMTZkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRkZXBheS5odG1sIiB0aXRsZT0icnRwTDI0ZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBMMTZwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cEwxNnBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBMMTZQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkuaHRtbCNHc3RSdHBMMTZQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEwxNlBheSI+R3N0UnRwTDE2UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmh0bWwjR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VBdWRpb1BheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBMMTZQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBheWxvYWQgcmF3IGF1ZGlvIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAzNTUxLgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MS50eHQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTczLjYuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBMMTZwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgcGF5bG9hZCByYXcgYXVkaW8uIFJlZmVyIHRvCi10aGUgcnRwTDE2ZGVwYXkgZXhhbXBsZSB0byBkZXBheWxvYWQgYW5kIHBsYXkgdGhlIFJUUCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTczLjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTczLjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2QkUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUwxNiwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDE2LCBwYXlsb2FkPShpbnQpMTAsIGNsb2NrLXJhdGU9KGludCk0NDEwMDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDE2LCBwYXlsb2FkPShpbnQpMTEsIGNsb2NrLXJhdGU9KGludCk0NDEwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEwxNlBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEwxNlBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEwxNlBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2cGF5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnJ0cEwxNmRlcGF5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzI0OGE4Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBMMjRkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkuaHRtbCIgdGl0bGU9InJ0cEwxNnBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkuaHRtbCIgdGl0bGU9InJ0cEwyNHBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBMMjRkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwTDI0ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwTDI0RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lmh0bWwjR3N0UnRwTDI0RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEwyNERlcGF5Ij5Hc3RSdHBMMjREZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTDI0RGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+RXh0cmFjdCByYXcgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDMxOTAsIHNlY3Rpb24gNC4KLUZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzMxOTAudHh0PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3NC42LjMiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdWRwc3JjIGNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4nYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk0NDEwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUwyNCwgZW5jb2RpbmctcGFyYW1zPShzdHJpbmcpMSwgY2hhbm5lbHM9KGludCkxLCBwYXlsb2FkPShpbnQpOTYnPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwTDI0ZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHB1bHNlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZXBheWxvYWQgYW4gUlRQIHJhdyBhdWRpbyBzdHJlYW0uIFJlZmVyIHRvCi10aGUgcnRwTDI0cGF5IGV4YW1wbGUgdG8gY3JlYXRlIHRoZSBSVFAgc3RyZWFtLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3NC42LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+WmVlc2hhbiBBbGkgJmx0O3phazE0N0B5YWhvby5jb20mZ3Q7LFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7LERhdmlkIEhvbHJveWQgJmx0O2RhdmVAYmFkZ2Vycy1pbi1mb2lsLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNzQuNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylMMjQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMjRCRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0ZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBMMjREZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEwyNERlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwTDI0RGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnJ0cEwyNHBheTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTMxODhlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwTDI0cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBMMjRkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wMXNkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNGRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBMMjRwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cEwyNHBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBMMjRQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRwYXkuaHRtbCNHc3RSdHBMMjRQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEwyNFBheSI+R3N0UnRwTDI0UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmh0bWwjR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VBdWRpb1BheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBMMjRQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBheWxvYWQgcmF3IDI0LWJpdCBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgMzE5MCwgc2VjdGlvbiA0LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzE5MC50eHQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTc1LjYuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBMMjRwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgcGF5bG9hZCByYXcgYXVkaW8uIFJlZmVyIHRvCi10aGUgcnRwTDI0ZGVwYXkgZXhhbXBsZSB0byBkZXBheWxvYWQgYW5kIHBsYXkgdGhlIFJUUCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTc1LjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OyxEYXZpZCBIb2xyb3lkICZsdDtkYXZlQGJhZGdlcnMtaW4tZm9pbC5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3NS42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMyNEJFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylMMjQsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBMMjRQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBMMjRQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBMMjRQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBMMjRkZXBheTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFhZDVhOC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwYWMzZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcm5kYnVmZmVyc2l6ZS5odG1sIiB0aXRsZT0icm5kYnVmZmVyc2l6ZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNwYXkuaHRtbCIgdGl0bGU9InJ0cGFjM3BheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ybmRidWZmZXJzaXplLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwYWMzZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGFjM2RlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEFDM0RlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNkZXBheS5odG1sI0dzdFJ0cEFDM0RlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBBQzNEZXBheSI+R3N0UnRwQUMzRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEFDM0RlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkV4dHJhY3QgQUMzIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA0MTg0LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNDE4NC50eHQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI2LjYuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB1ZHBzcmMgY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPidhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTQ0MTAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQUMzLCBwYXlsb2FkPShpbnQpOTYnPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwYWMzZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGE1MmRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcHVsc2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIGRlcGF5bG9hZCBhbmQgZGVjb2RlIGFuIFJUUCBBQzMgc3RyZWFtLiBSZWZlciB0bwotdGhlIHJ0cGFjM3BheSBleGFtcGxlIHRvIGNyZWF0ZSB0aGUgUlRQIHN0cmVhbS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjYuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyNi42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCl7IDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUFDMzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vYWMzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEFDM0RlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwQUMzRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBBQzNEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwYWMzcGF5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTA0MzcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM3BheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBhYzNwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGFjM2RlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBhbXJkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM3BheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGFjM3BheTwvc3Bhbj48L2gyPgotPHA+cnRwYWMzcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEFDM1BheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM3BheS5odG1sI0dzdFJ0cEFDM1BheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwQUMzUGF5Ij5Hc3RSdHBBQzNQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBBQzNQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBheWxvYWQgQUMzIGF1ZGlvIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA0MTg0LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNDE4NC50eHQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI3LjYuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXZlbmNfYWMzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBhYzNwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZW5jb2RlIGFuZCBwYXlsb2FkIEFDMyBzdHJlYW0uIFJlZmVyIHRvCi10aGUgcnRwYWMzZGVwYXkgZXhhbXBsZSB0byBkZXBheWxvYWQgYW5kIGRlY29kZSB0aGUgUlRQIHN0cmVhbS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjcuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjcuNi40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL2FjMzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWMzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpeyAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylBQzM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM3BheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBBQzNQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBBQzNQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBBQzNQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM3BheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBhYzNkZXBheTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZmNWY4ZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwYW1yZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwiIHRpdGxlPSJydHBhYzNwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1ycGF5Lmh0bWwiIHRpdGxlPSJydHBhbXJwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1yZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYWMzcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1ycGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwYW1yZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGFtcmRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEFNUkRlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5odG1sI0dzdFJ0cEFNUkRlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBBTVJEZXBheSI+R3N0UnRwQU1SRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEFNUkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkV4dHJhY3QgQU1SIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAzMjY3LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzI2Ny50eHQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI4LjYuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB1ZHBzcmMgY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPidhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylBTVIsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTEsIG9jdGV0LWFsaWduPShzdHJpbmcpMSwgcGF5bG9hZD0oaW50KTk2Jzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGFtcmRlcGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbXJuYmRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcHVsc2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIGRlcGF5bG9hZCBhbmQgZGVjb2RlIGFuIFJUUCBBTVIgc3RyZWFtLiBSZWZlciB0bwotdGhlIHJ0cGFtcnBheSBleGFtcGxlIHRvIGNyZWF0ZSB0aGUgUlRQIHN0cmVhbS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjguNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEyOC42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQU1SLCBvY3RldC1hbGlnbj0oc3RyaW5nKTE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTE2MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQU1SLVdCLCBvY3RldC1hbGlnbj0oc3RyaW5nKTE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL0FNUiwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL0FNUi1XQiwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpMTYwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcmRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQU1SRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBBTVJEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEFNUkRlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBhbXJwYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlMWUxYy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1ycGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGFtcnBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5odG1sIiB0aXRsZT0icnRwYW1yZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwiIHRpdGxlPSJydHBiaW4iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1ycGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwYW1ycGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBhbXJwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwQU1SUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1ycGF5Lmh0bWwjR3N0UnRwQU1SUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBBTVJQYXkiPkdzdFJ0cEFNUlBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEFNUlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+UGF5bG9hZCBBTVIgYXVkaW8gaW50byBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDMyNjcuCi1Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzMjY3LnR4dDwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMjkuNi4zIj48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbXJuYmVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwYW1ycGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIGVuY29kZSBhbmQgcGF5bG9hZCBhbiBBTVIgc3RyZWFtLiBSZWZlciB0bwotdGhlIHJ0cGFtcmRlcGF5IGV4YW1wbGUgdG8gZGVwYXlsb2FkIGFuZCBkZWNvZGUgdGhlIFJUUCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI5LjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTI5LjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9BTVIsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9BTVItV0IsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTE2MDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUFNUiwgZW5jb2RpbmctcGFyYW1zPShzdHJpbmcpMSwgb2N0ZXQtYWxpZ249KHN0cmluZykxLCBjcmM9KHN0cmluZykwLCByb2J1c3Qtc29ydGluZz0oc3RyaW5nKTAsIGludGVybGVhdmluZz0oc3RyaW5nKTAsIG1vZGUtc2V0PShpbnQpWyAwLCA3IF0sIG1vZGUtY2hhbmdlLXBlcmlvZD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBtb2RlLWNoYW5nZS1uZWlnaGJvcj0oc3RyaW5nKXsgMCwgMSB9LCBtYXhwdGltZT0oaW50KVsgMjAsIDIxNDc0ODM2NDcgXSwgcHRpbWU9KGludClbIDIwLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpMTYwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylBTVItV0IsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTEsIG9jdGV0LWFsaWduPShzdHJpbmcpMSwgY3JjPShzdHJpbmcpMCwgcm9idXN0LXNvcnRpbmc9KHN0cmluZykwLCBpbnRlcmxlYXZpbmc9KHN0cmluZykwLCBtb2RlLXNldD0oaW50KVsgMCwgNyBdLCBtb2RlLWNoYW5nZS1wZXJpb2Q9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbW9kZS1jaGFuZ2UtbmVpZ2hib3I9KHN0cmluZyl7IDAsIDEgfSwgbWF4cHRpbWU9KGludClbIDIwLCAyMTQ3NDgzNjQ3IF0sIHB0aW1lPShpbnQpWyAyMCwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQU1SUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwQU1SUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwQU1SUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJwYXkuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwYW1yZGVwYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzMjU0NS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTE5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBiaW46IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYW1ycGF5Lmh0bWwiIHRpdGxlPSJydHBhbXJwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5odG1sIiB0aXRsZT0icnRwYnZkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGJpbjwvc3Bhbj48L2gyPgotPHA+cnRwYmluPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4ucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1kby1sb3N0IiB0aXRsZT0iVGhlIOKAnGRvLWxvc3TigJ0gcHJvcGVydHkiPmRvLWxvc3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1sYXRlbmN5IiB0aXRsZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiPmxhdGVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tc2RlcyIgdGl0bGU9IlRoZSDigJxzZGVz4oCdIHByb3BlcnR5Ij5zZGVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0taWdub3JlLXB0IiB0aXRsZT0iVGhlIOKAnGlnbm9yZS1wdOKAnSBwcm9wZXJ0eSI+aWdub3JlLXB0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tYXV0b3JlbW92ZSIgdGl0bGU9IlRoZSDigJxhdXRvcmVtb3Zl4oCdIHByb3BlcnR5Ij5hdXRvcmVtb3ZlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPlJUUEppdHRlckJ1ZmZlck1vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLWJ1ZmZlci1tb2RlIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1tb2Rl4oCdIHByb3BlcnR5Ij5idWZmZXItbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLW50cC1zeW5jIiB0aXRsZT0iVGhlIOKAnG50cC1zeW5j4oCdIHByb3BlcnR5Ij5udHAtc3luYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLXVzZS1waXBlbGluZS1jbG9jayIgdGl0bGU9IlRoZSDigJx1c2UtcGlwZWxpbmUtY2xvY2vigJ0gcHJvcGVydHkiPnVzZS1waXBlbGluZS1jbG9jazwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVENQU3luYzwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcnRjcC1zeW5jIiB0aXRsZT0iVGhlIOKAnHJ0Y3Atc3luY+KAnSBwcm9wZXJ0eSI+cnRjcC1zeW5jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcnRjcC1zeW5jLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnHJ0Y3Atc3luYy1pbnRlcnZhbOKAnSBwcm9wZXJ0eSI+cnRjcC1zeW5jLWludGVydmFsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tZHJvcC1vbi1sYXRlbmN5IiB0aXRsZT0iVGhlIOKAnGRyb3Atb24tbGF0ZW5jeeKAnSBwcm9wZXJ0eSI+ZHJvcC1vbi1sYXRlbmN5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tZG8tc3luYy1ldmVudCIgdGl0bGU9IlRoZSDigJxkby1zeW5jLWV2ZW504oCdIHByb3BlcnR5Ij5kby1zeW5jLWV2ZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tZG8tcmV0cmFuc21pc3Npb24iIHRpdGxlPSJUaGUg4oCcZG8tcmV0cmFuc21pc3Npb27igJ0gcHJvcGVydHkiPmRvLXJldHJhbnNtaXNzaW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUUFByb2ZpbGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tLXJ0cC1wcm9maWxlIiB0aXRsZT0iVGhlIOKAnHJ0cC1wcm9maWxl4oCdIHByb3BlcnR5Ij5ydHAtcHJvZmlsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBOdHBUaW1lU291cmNlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1udHAtdGltZS1zb3VyY2UiIHRpdGxlPSJUaGUg4oCcbnRwLXRpbWUtc291cmNl4oCdIHByb3BlcnR5Ij5udHAtdGltZS1zb3VyY2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1tYXgtZHJvcG91dC10aW1lIiB0aXRsZT0iVGhlIOKAnG1heC1kcm9wb3V0LXRpbWXigJ0gcHJvcGVydHkiPm1heC1kcm9wb3V0LXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLS1tYXgtbWlzb3JkZXItdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtbWlzb3JkZXItdGltZeKAnSBwcm9wZXJ0eSI+bWF4LW1pc29yZGVyLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiIgdGl0bGU9IlRoZSDigJxtYXgtcnRjcC1ydHAtdGltZS1kaWZm4oCdIHByb3BlcnR5Ij5tYXgtcnRjcC1ydHAtdGltZS1kaWZmPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcnRjcC1zeW5jLXNlbmQtdGltZSIgdGl0bGU9IlRoZSDigJxydGNwLXN5bmMtc2VuZC10aW1l4oCdIHByb3BlcnR5Ij5ydGNwLXN5bmMtc2VuZC10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tcmZjNzI3My1zeW5jIiB0aXRsZT0iVGhlIOKAnHJmYzcyNzMtc3luY+KAnSBwcm9wZXJ0eSI+cmZjNzI3My1zeW5jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi0tbWF4LXN0cmVhbXMiIHRpdGxlPSJUaGUg4oCcbWF4LXN0cmVhbXPigJ0gcHJvcGVydHkiPm1heC1zdHJlYW1zPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1jbGVhci1wdC1tYXAiIHRpdGxlPSJUaGUg4oCcY2xlYXItcHQtbWFw4oCdIHNpZ25hbCI+Y2xlYXItcHQtbWFwPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj4KLTxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+UlRQU2Vzc2lvbjwvc3Bhbj4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLWdldC1pbnRlcm5hbC1zZXNzaW9uIiB0aXRsZT0iVGhlIOKAnGdldC1pbnRlcm5hbC1zZXNzaW9u4oCdIHNpZ25hbCI+Z2V0LWludGVybmFsLXNlc3Npb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tYnllLXNzcmMiIHRpdGxlPSJUaGUg4oCcb24tYnllLXNzcmPigJ0gc2lnbmFsIj5vbi1ieWUtc3NyYzwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tYnllLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcb24tYnllLXRpbWVvdXTigJ0gc2lnbmFsIj5vbi1ieWUtdGltZW91dDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tbmV3LXNzcmMiIHRpdGxlPSJUaGUg4oCcb24tbmV3LXNzcmPigJ0gc2lnbmFsIj5vbi1uZXctc3NyYzwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tbnB0LXN0b3AiIHRpdGxlPSJUaGUg4oCcb24tbnB0LXN0b3DigJ0gc2lnbmFsIj5vbi1ucHQtc3RvcDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc2VuZGVyLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcb24tc2VuZGVyLXRpbWVvdXTigJ0gc2lnbmFsIj5vbi1zZW5kZXItdGltZW91dDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc3NyYy1hY3RpdmUiIHRpdGxlPSJUaGUg4oCcb24tc3NyYy1hY3RpdmXigJ0gc2lnbmFsIj5vbi1zc3JjLWFjdGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc3NyYy1jb2xsaXNpb24iIHRpdGxlPSJUaGUg4oCcb24tc3NyYy1jb2xsaXNpb27igJ0gc2lnbmFsIj5vbi1zc3JjLWNvbGxpc2lvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc3NyYy1zZGVzIiB0aXRsZT0iVGhlIOKAnG9uLXNzcmMtc2Rlc+KAnSBzaWduYWwiPm9uLXNzcmMtc2RlczwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc3NyYy12YWxpZGF0ZWQiIHRpdGxlPSJUaGUg4oCcb24tc3NyYy12YWxpZGF0ZWTigJ0gc2lnbmFsIj5vbi1zc3JjLXZhbGlkYXRlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tdGltZW91dCIgdGl0bGU9IlRoZSDigJxvbi10aW1lb3V04oCdIHNpZ25hbCI+b24tdGltZW91dDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+cmVxdWVzdC1wdC1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlc2V0LXN5bmMiIHRpdGxlPSJUaGUg4oCccmVzZXQtc3luY+KAnSBzaWduYWwiPnJlc2V0LXN5bmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcGF5bG9hZC10eXBlLWNoYW5nZSIgdGl0bGU9IlRoZSDigJxwYXlsb2FkLXR5cGUtY2hhbmdl4oCdIHNpZ25hbCI+cGF5bG9hZC10eXBlLWNoYW5nZTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tbmV3LWppdHRlcmJ1ZmZlciIgdGl0bGU9IlRoZSDigJxuZXctaml0dGVyYnVmZmVy4oCdIHNpZ25hbCI+bmV3LWppdHRlcmJ1ZmZlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtYXV4LXJlY2VpdmVyIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtYXV4LXJlY2VpdmVy4oCdIHNpZ25hbCI+cmVxdWVzdC1hdXgtcmVjZWl2ZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+KjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LWF1eC1zZW5kZXIiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1hdXgtc2VuZGVy4oCdIHNpZ25hbCI+cmVxdWVzdC1hdXgtc2VuZGVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPio8L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1ydGNwLWRlY29kZXIiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1ydGNwLWRlY29kZXLigJ0gc2lnbmFsIj5yZXF1ZXN0LXJ0Y3AtZGVjb2RlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtcnRjcC1lbmNvZGVyIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcnRjcC1lbmNvZGVy4oCdIHNpZ25hbCI+cmVxdWVzdC1ydGNwLWVuY29kZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+KjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LXJ0cC1kZWNvZGVyIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcnRwLWRlY29kZXLigJ0gc2lnbmFsIj5yZXF1ZXN0LXJ0cC1kZWNvZGVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPio8L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1ydHAtZW5jb2RlciIgdGl0bGU9IlRoZSDigJxyZXF1ZXN0LXJ0cC1lbmNvZGVy4oCdIHNpZ25hbCI+cmVxdWVzdC1ydHAtZW5jb2RlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tbmV3LXNlbmRlci1zc3JjIiB0aXRsZT0iVGhlIOKAnG9uLW5ldy1zZW5kZXItc3NyY+KAnSBzaWduYWwiPm9uLW5ldy1zZW5kZXItc3NyYzwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tb24tc2VuZGVyLXNzcmMtYWN0aXZlIiB0aXRsZT0iVGhlIOKAnG9uLXNlbmRlci1zc3JjLWFjdGl2ZeKAnSBzaWduYWwiPm9uLXNlbmRlci1zc3JjLWFjdGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLWdldC1zZXNzaW9uIiB0aXRsZT0iVGhlIOKAnGdldC1zZXNzaW9u4oCdIHNpZ25hbCI+Z2V0LXNlc3Npb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBCaW4iPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEJpbiI+R3N0UnRwQmluPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBCaW4KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFJ0cEJpbiBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJUUCBiaW4gY29tYmluZXMgdGhlIGZ1bmN0aW9ucyBvZiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNzcmNEZW11eDwvc3Bhbj48L2E+LAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBKaXR0ZXJCdWZmZXI8L3NwYW4+PC9hPiBhbmQgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwjR3N0UnRwUHREZW11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFB0RGVtdXg8L3NwYW4+PC9hPiBpbiBvbmUgZWxlbWVudC4gSXQgYWxsb3dzIGZvciBtdWx0aXBsZQotUlRQIHNlc3Npb25zIHRoYXQgd2lsbCBiZSBzeW5jaHJvbml6ZWQgdG9nZXRoZXIgdXNpbmcgUlRDUCBTUiBwYWNrZXRzLjwvcD4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gaXMgY29uZmlndXJlZCB3aXRoIGEgbnVtYmVyIG9mIHJlcXVlc3QgcGFkcyB0aGF0IGRlZmluZSB0aGUKLWZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBhY3RpdmF0ZWQsIHNpbWlsYXIgdG8gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gZWxlbWVudC48L3A+Ci08cD5UbyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiBhcyBhbiBSVFAgcmVjZWl2ZXIsIHJlcXVlc3QgYSByZWN2X3J0cF9zaW5rXyV1IHBhZC4gVGhlIHNlc3Npb24KLW51bWJlciBtdXN0IGJlIHNwZWNpZmllZCBpbiB0aGUgcGFkIG5hbWUuCi1EYXRhIHJlY2VpdmVkIG9uIHRoZSByZWN2X3J0cF9zaW5rXyV1IHBhZCB3aWxsIGJlIHByb2Nlc3NlZCBpbiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNlc3Npb248L3NwYW4+PC9hPgotbWFuYWdlciBhbmQgYWZ0ZXIgYmVpbmcgdmFsaWRhdGVkIGZvcndhcmRlZCBvbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNzcmNEZW11eDwvc3Bhbj48L2E+IGVsZW1lbnQuIEVhY2gKLVJUUCBzdHJlYW0gaXMgZGVtdXhlZCBiYXNlZCBvbiB0aGUgU1NSQyBhbmQgc2VuZCB0byBhIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwSml0dGVyQnVmZmVyPC9zcGFuPjwvYT4uIEFmdGVyCi10aGUgcGFja2V0cyBhcmUgcmVsZWFzZWQgZnJvbSB0aGUgaml0dGVyYnVmZmVyLCB0aGV5IHdpbGwgYmUgZm9yd2FyZGVkIHRvIGEKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBQdERlbXV4PC9zcGFuPjwvYT4gZWxlbWVudC4gVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBQdERlbXV4PC9zcGFuPjwvYT4gZWxlbWVudCB3aWxsIGRlbXV4IHRoZSBwYWNrZXRzIGJhc2VkCi1vbiB0aGUgcGF5bG9hZCB0eXBlIGFuZCB3aWxsIGNyZWF0ZSBhIHVuaXF1ZSBwYWQgcmVjdl9ydHBfc3JjXyV1XyV1XyV1IG9uCi1ydHBiaW4gd2l0aCB0aGUgc2Vzc2lvbiBudW1iZXIsIFNTUkMgYW5kIHBheWxvYWQgdHlwZSByZXNwZWN0aXZlbHkgYXMgdGhlIHBhZAotbmFtZS48L3A+Ci08cD5UbyBhbHNvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+IGFzIGFuIFJUQ1AgcmVjZWl2ZXIsIHJlcXVlc3QgYSByZWN2X3J0Y3Bfc2lua18ldSBwYWQuIFRoZQotc2Vzc2lvbiBudW1iZXIgbXVzdCBiZSBzcGVjaWZpZWQgaW4gdGhlIHBhZCBuYW1lLjwvcD4KLTxwPklmIHlvdSB3YW50IHRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gZ2VuZXJhdGUgYW5kIHNlbmQgUlRDUCBwYWNrZXRzLCByZXF1ZXN0Ci10aGUgc2VuZF9ydGNwX3NyY18ldSBwYWQgd2l0aCB0aGUgc2Vzc2lvbiBudW1iZXIgaW4gdGhlIHBhZCBuYW1lLiBQYWNrZXQgcHVzaGVkCi1vbiB0aGlzIHBhZCBjb250YWluIFNSL1JSIFJUQ1AgcmVwb3J0cyB0aGF0IHNob3VsZCBiZSBzZW50IHRvIGFsbCBwYXJ0aWNpcGFudHMKLWluIHRoZSBzZXNzaW9uLjwvcD4KLTxwPlRvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+IGFzIGEgc2VuZGVyLCByZXF1ZXN0IGEgc2VuZF9ydHBfc2lua18ldSBwYWQsIHdoaWNoIHdpbGwKLWF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2VuZF9ydHBfc3JjXyV1IHBhZC4gSWYgdGhlIHNlc3Npb24gbnVtYmVyIGlzIG5vdCBwcm92aWRlZCwKLXRoZSBwYWQgZnJvbSB0aGUgbG93ZXN0IGF2YWlsYWJsZSBzZXNzaW9uIHdpbGwgYmUgcmV0dXJuZWQuIFRoZSBzZXNzaW9uIG1hbmFnZXIgd2lsbCBtb2RpZnkgdGhlCi1TU1JDIGluIHRoZSBSVFAgcGFja2V0cyB0byBpdHMgb3duIFNTUkMgYW5kIHdpbCBmb3J3YXJkIHRoZSBwYWNrZXRzIG9uIHRoZQotc2VuZF9ydHBfc3JjXyV1IHBhZCBhZnRlciB1cGRhdGluZyBpdHMgaW50ZXJuYWwgc3RhdGUuPC9wPgotPHA+VGhlIHNlc3Npb24gbWFuYWdlciBuZWVkcyB0aGUgY2xvY2stcmF0ZSBvZiB0aGUgcGF5bG9hZCB0eXBlcyBpdCBpcyBoYW5kbGluZwotYW5kIHdpbGwgc2lnbmFsIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlcXVlc3QtcHQtbWFw4oCdPC9zcGFuPjwvYT4gc2lnbmFsIHdoZW4gaXQgbmVlZHMgc3VjaCBhCi1tYXBwaW5nLiBPbmUgY2FuIGNsZWFyIHRoZSBjYWNoZWQgdmFsdWVzIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tY2xlYXItcHQtbWFwIiB0aXRsZT0iVGhlIOKAnGNsZWFyLXB0LW1hcOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxjbGVhci1wdC1tYXDigJ08L3NwYW4+PC9hPgotc2lnbmFsLjwvcD4KLTxwPkFjY2VzcyB0byB0aGUgaW50ZXJuYWwgc3RhdGlzdGljcyBvZiBydHBiaW4gaXMgcHJvdmlkZWQgd2l0aCB0aGUKLWdldC1pbnRlcm5hbC1zZXNzaW9uIHByb3BlcnR5LiBUaGlzIGFjdGlvbiBzaWduYWwgZ2l2ZXMgYWNjZXNzIHRvIHRoZQotUlRQU2Vzc2lvbiBvYmplY3Qgd2hpY2ggZnVydGhlciBwcm92aWRlcyBhY3Rpb24gc2lnbmFscyB0byByZXRyaWV2ZSB0aGUKLWludGVybmFsIHNvdXJjZSBhbmQgb3RoZXIgc291cmNlcy48L3A+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+IGFsc28gaGFzIHNpZ25hbHMgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluLXJlcXVlc3QtcnRwLWVuY29kZXIiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1ydHAtZW5jb2RlcuKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxyZXF1ZXN0LXJ0cC1lbmNvZGVy4oCdPC9zcGFuPjwvYT4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LXJ0cC1kZWNvZGVyIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcnRwLWRlY29kZXLigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCccmVxdWVzdC1ydHAtZGVjb2RlcuKAnTwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LXJ0Y3AtZW5jb2RlciIgdGl0bGU9IlRoZSDigJxyZXF1ZXN0LXJ0Y3AtZW5jb2RlcuKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxyZXF1ZXN0LXJ0Y3AtZW5jb2RlcuKAnTwvc3Bhbj48L2E+IGFuZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1ydHAtZGVjb2RlciIgdGl0bGU9IlRoZSDigJxyZXF1ZXN0LXJ0cC1kZWNvZGVy4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlcXVlc3QtcnRwLWRlY29kZXLigJ08L3NwYW4+PC9hPikgdG8gZHluYW1pY2FsbHkgcmVxdWVzdCBmb3IgUlRQIGFuZCBSVENQIGVuY29kZXJzCi1hbmQgZGVjb2RlcnMgaW4gb3JkZXIgdG8gc3VwcG9ydCBTUlRQLiBUaGUgZW5jb2RlcnMgbXVzdCBwcm92aWRlIHRoZSBwYWRzCi1ydHBfc2lua18ldSBhbmQgcnRwX3NyY18ldSBmb3IgUlRQIGFuZCBydGNwX3NpbmtfJXUgYW5kIHJ0Y3Bfc3JjXyV1IGZvcgotUlRDUC4gVGhlIHNlc3Npb24gbnVtYmVyIHdpbGwgYmUgdXNlZCBpbiB0aGUgcGFkIG5hbWUuIFRoZSBkZWNvZGVycyBtdXN0IHByb3ZpZGUKLXJ0cF9zaW5rIGFuZCBydHBfc3JjIGZvciBSVFAgYW5kIHJ0Y3Bfc2luayBhbmQgcnRjcF9zcmMgZm9yIFJUQ1AuIFRoZSBkZWNvZGVycyB3aWxsCi1iZSBwbGFjZWQgYmVmb3JlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+IGVsZW1lbnQsIHRodXMgdGhleSBtdXN0IHN1cHBvcnQgU1NSQyBkZW11eGluZwotaW50ZXJuYWxseS48L3A+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+IGhhcyBzaWduYWxzICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1yZXF1ZXN0LWF1eC1zZW5kZXIiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1hdXgtc2VuZGVy4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlcXVlc3QtYXV4LXNlbmRlcuKAnTwvc3Bhbj48L2E+IGFuZAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1hdXgtcmVjZWl2ZXIiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1hdXgtcmVjZWl2ZXLigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCccmVxdWVzdC1hdXgtcmVjZWl2ZXLigJ08L3NwYW4+PC9hPiB0byBkeW5hbWljYWxseSByZXF1ZXN0IGFuIGVsZW1lbnQgdGhhdCBjYW4gYmUKLXVzZWQgdG8gY3JlYXRlIG9yIG1lcmdlIGFkZGl0aW9uYWwgUlRQIHN0cmVhbXMuIEFVWCBlbGVtZW50cyBhcmUgbmVlZGVkIHRvCi1pbXBsZW1lbnQgRkVDIG9yIHJldHJhbnNtaXNzaW9uIChzdWNoIGFzIFJGQyA0NTg4KS4gQW4gQVVYIHNlbmRlciBtdXN0IGhhdmUgb25lCi1zaW5rXyV1IHBhZCB0aGF0IG1hdGNoZXMgdGhlIHNlc3Npb25pZCBpbiB0aGUgc2lnbmFsIGFuZCBpdCBzaG91bGQgaGF2ZSAxIG9yCi1tb3JlIHNyY18ldSBwYWRzLiBGb3IgZWFjaCBzcmNfJVx1IHBhZCwgYSBzZXNzaW9uIHdpbGwgYmUgbWFkZSAoaWYgbmVlZGVkKQotYW5kIHRoZSBwYWQgd2lsbCBiZSBsaW5rZWQgdG8gdGhlIHNlc3Npb24gc2VuZF9ydHBfc2luayBwYWQuIEVhY2ggc2Vzc2lvbiB3aWxsCi10aGVuIGV4cG9zZSBpdHMgc291cmNlIHBhZCBhcyBzZW5kX3J0cF9zcmNfJXUgb24gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPi4KLUFuIEFVWCByZWNlaXZlciBoYXMgMSBzcmNfJXUgcGFkIHRoYXQgbXVjaCBtYXRjaCB0aGUgc2Vzc2lvbmlkIGluIHRoZSBzaWduYWwKLWFuZCAxIG9yIG1vcmUgc2lua18ldSBwYWRzLiBBIHNlc3Npb24gd2lsbCBiZSBtYWRlIGZvciBlYWNoIHNpbmtfJXUgcGFkCi13aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlY3ZfcnRwX3NpbmtfJXUgcGFkIGlzIHJlcXVlc3RlZCBvbiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzAuOS4xMiI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTI8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAwPC9zcGFuPiBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXBwbGljYXRpb24veC1ydHAsIC4uLiZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiEgLjwvc3Bhbj5yZWN2X3J0cF9zaW5rXzAgXAotICAgIHJ0cGJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwdGhlb3JhZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHRoZW9yYWRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUmVjZWl2ZSBSVFAgZGF0YSBmcm9tIHBvcnQgNTAwMCBhbmQgc2VuZCB0byB0aGUgc2Vzc2lvbiAwIGluIHJ0cGJpbi4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBydHBiaW4gbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnJ0cGJpbiBcCi0gICAgICAgIHY0bDJzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmZlbmNfaDI2MyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwaDI2M3BwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRwX3NpbmtfMCBcCi0gICAgICAgICAgICAgICAgICBydHBiaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0cF9zcmNfMCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdWRwc2luayBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMDwvc3Bhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgcnRwYmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydGNwX3NyY18wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAxPC9zcGFuPiBzeW5jPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPiBhc3luYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mYWxzZTwvc3Bhbj4gICAgXAotICAgICAgICAgICAgICAgICAgdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDA1PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwYmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbXJuYmVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwYW1ycGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBiaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0cF9zaW5rXzEgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgcnRwYmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydHBfc3JjXzEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDI8L3NwYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIHJ0cGJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRjcF9zcmNfMSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdWRwc2luayBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMzwvc3Bhbj4gc3luYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mYWxzZTwvc3Bhbj4gYXN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZmFsc2U8L3NwYW4+ICAgIFwKLSAgICAgICAgICAgICAgICAgIHVkcHNyYyBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwNzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRjcF9zaW5rXzE8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gRW5jb2RlIGFuZCBwYXlsb2FkIEgyNjMgdmlkZW8gY2FwdHVyZWQgZnJvbSBhIHY0bDJzcmMuIEVuY29kZSBhbmQgcGF5bG9hZCBBTVIKLWF1ZGlvIGdlbmVyYXRlZCBmcm9tIGF1ZGlvdGVzdHNyYy4gVGhlIHZpZGVvIGlzIHNlbnQgdG8gc2Vzc2lvbiAwIGluIHJ0cGJpbgotYW5kIHRoZSBhdWRpbyBpcyBzZW50IHRvIHNlc3Npb24gMS4gVmlkZW8gcGFja2V0cyBhcmUgc2VudCBvbiBVRFAgcG9ydCA1MDAwCi1hbmQgYXVkaW8gcGFja2V0cyBvbiBwb3J0IDUwMDIuIFRoZSB2aWRlbyBSVENQIHBhY2tldHMgZm9yIHNlc3Npb24gMCBhcmUgc2VudAotb24gcG9ydCA1MDAxIGFuZCB0aGUgYXVkaW8gUlRDUCBwYWNrZXRzIGZvciBzZXNzaW9uIDAgYXJlIHNlbnQgb24gcG9ydCA1MDAzLgotUlRDUCBwYWNrZXRzIGZvciBzZXNzaW9uIDAgYXJlIHJlY2VpdmVkIG9uIHBvcnQgNTAwNSBhbmQgUlRDUCBmb3Igc2Vzc2lvbiAxCi1pcyByZWNlaXZlZCBvbiBwb3J0IDUwMDcuIFNpbmNlIFJUQ1AgcGFja2V0cyBmcm9tIHRoZSBzZW5kZXIgc2hvdWxkIGJlIHNlbnQKLWFzIHNvb24gYXMgcG9zc2libGUgYW5kIGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwcmVyb2xsLCBzeW5jPWZhbHNlIGFuZAotYXN5bmM9ZmFsc2UgaXMgY29uZmlndXJlZCBvbiB1ZHBzaW5rCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTgKLTkKLTEwCi0xMTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHJ0cGJpbiBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+cnRwYmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHVkcHNyYyBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXBwbGljYXRpb24veC1ydHAsbWVkaWE9KHN0cmluZyl2aWRlbyxjbG9jay1yYXRlPShpbnQpOTAwMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjMtMTk5OCZxdW90Ozwvc3Bhbj4gXAotICAgICAgICAgICAgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBiaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5yZWN2X3J0cF9zaW5rXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnRwYmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4gITwvc3Bhbj4gcnRwaDI2M3BkZXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmZkZWNfaDI2MyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbmsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAxPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwYmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHJ0cGJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRjcF9zcmNfMCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdWRwc2luayBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwNTwvc3Bhbj4gc3luYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mYWxzZTwvc3Bhbj4gYXN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZmFsc2U8L3NwYW4+ICAgICAgICBcCi0gICAgdWRwc3JjIGNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKWF1ZGlvLGNsb2NrLXJhdGU9KGludCk4MDAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylBTVIsZW5jb2RpbmctcGFyYW1zPShzdHJpbmcpMSxvY3RldC1hbGlnbj0oc3RyaW5nKTEmcXVvdDs8L3NwYW4+IFwKLSAgICAgICAgICAgIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAyPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwYmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydHBfc2lua18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJ0cGJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uICE8L3NwYW4+IHJ0cGFtcmRlcGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbXJuYmRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHVkcHNyYyBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRjcF9zaW5rXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICBydHBiaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0Y3Bfc3JjXzEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDc8L3NwYW4+IHN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZmFsc2U8L3NwYW4+IGFzeW5jPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSZWNlaXZlIEgyNjMgb24gcG9ydCA1MDAwLCBzZW5kIGl0IHRocm91Z2ggcnRwYmluIGluIHNlc3Npb24gMCwgZGVwYXlsb2FkLAotZGVjb2RlIGFuZCBkaXNwbGF5IHRoZSB2aWRlby4KLVJlY2VpdmUgQU1SIG9uIHBvcnQgNTAwMiwgc2VuZCBpdCB0aHJvdWdoIHJ0cGJpbiBpbiBzZXNzaW9uIDEsIGRlcGF5bG9hZCwKLWRlY29kZSBhbmQgcGxheSB0aGUgYXVkaW8uCi1SZWNlaXZlIHNlcnZlciBSVENQIHBhY2tldHMgZm9yIHNlc3Npb24gMCBvbiBwb3J0IDUwMDEgYW5kIFJUQ1AgcGFja2V0cyBmb3IKLXNlc3Npb24gMSBvbiBwb3J0IDUwMDMuIFRoZXNlIHBhY2tldHMgd2lsbCBiZSB1c2VkIGZvciBzZXNzaW9uIG1hbmFnZW1lbnQgYW5kCi1zeW5jaHJvbmlzYXRpb24uCi1TZW5kIFJUQ1AgcmVwb3J0cyBmb3Igc2Vzc2lvbiAwIG9uIHBvcnQgNTAwNSBhbmQgUlRDUCByZXBvcnRzIGZvciBzZXNzaW9uIDEKLW9uIHBvcnQgNTAwNy4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzAuOS4xMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHBtYW5hZ2VyLmh0bWwjcGx1Z2luLXJ0cG1hbmFnZXIiPnJ0cG1hbmFnZXI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTMwLjkuMTMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlY3ZfcnRjcF9zaW5rXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0Y3A8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXNydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZWN2X3J0cF9zaW5rXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3J0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2VuZF9ydHBfc2lua18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlY3ZfcnRwX3NyY18ldV8ldV8ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zZW5kX3J0cF9zcmNfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3J0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2VuZF9ydGNwX3NyY18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0Y3A8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXNydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwQmluPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwQmluOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4ucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tZG8tbG9zdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLWxvc3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRvLWxvc3TigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBhbiBldmVudCBkb3duc3RyZWFtIHdoZW4gYSBwYWNrZXQgaXMgbG9zdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tbGF0ZW5jeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxhdGVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhdGVuY3nigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RGVmYXVsdCBhbW91bnQgb2YgbXMgdG8gYnVmZmVyIGluIHRoZSBqaXR0ZXJidWZmZXJzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAyMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tc2RlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNkZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNkZXPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgU0RFUyBpdGVtcyBvZiB0aGlzIHNlc3Npb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLS1pZ25vcmUtcHQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpZ25vcmUtcHTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGlnbm9yZS1wdOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RG8gbm90IGRlbXVsdGlwbGV4IGJhc2VkIG9uIFBUIHZhbHVlcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tYXV0b3JlbW92ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGF1dG9yZW1vdmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGF1dG9yZW1vdmXigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+QXV0b21hdGljYWxseSByZW1vdmUgdGltZWQgb3V0IHNvdXJjZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tLWJ1ZmZlci1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnVmZmVyLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1ZmZlci1tb2Rl4oCdICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+UlRQSml0dGVyQnVmZmVyTW9kZTwvc3Bhbj48L3ByZT4KLTxwPkNvbnRyb2wgdGhlIGJ1ZmZlcmluZyBhbmQgdGltZXN0YW1waW5nIG1vZGUgdXNlZCBieSB0aGUgaml0dGVyYnVmZmVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBTbGF2ZSByZWNlaXZlciB0byBzZW5kZXIgY2xvY2s8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tbnRwLXN5bmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxudHAtc3luY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnRwLXN5bmPigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZXQgdGhlIE5UUCB0aW1lIGZyb20gdGhlIHNlbmRlciByZXBvcnRzIGFzIHRoZSBydW5uaW5nLXRpbWUgb24gdGhlCi1idWZmZXJzLiBXaGVuIGJvdGggdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgaGF2ZSBzeWNocm9uaXplZAotcnVubmluZy10aW1lLCBpLmUuIHdoZW4gdGhlIGNsb2NrIGFuZCBiYXNlLXRpbWUgaXMgc2hhcmVkCi1iZXR3ZWVuIHRoZSByZWNlaXZlcnMgYW5kIHRoZSBhbmQgdGhlIHNlbmRlcnMsIHRoaXMgb3B0aW9uIGNhbiBiZQotdXNlZCB0byBzeW5jaHJvbml6ZSByZWNlaXZlcnMgb24gbXVsdGlwbGUgbWFjaGluZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tLXVzZS1waXBlbGluZS1jbG9jayI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZS1waXBlbGluZS1jbG9ja+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXNlLXBpcGVsaW5lLWNsb2Nr4oCdICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Vc2UgdGhlIHBpcGVsaW5lIHJ1bm5pbmctdGltZSB0byBzZXQgdGhlIE5UUCB0aW1lIGluIHRoZSBSVENQIFNSIG1lc3NhZ2VzIChERVBSRUNBVEVEOiBVc2UgbnRwLXRpbWUtc291cmNlIHByb3BlcnR5KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tcnRjcC1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnRjcC1zeW5j4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydGNwLXN5bmPigJ0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUQ1BTeW5jPC9zcGFuPjwvcHJlPgotPHA+SWYgbm90IHN5bmNocm9uaXppbmcgKGRpcmVjdGx5KSB0byB0aGUgTlRQIGNsb2NrLCBkZXRlcm1pbmVzIGhvdyB0byBzeW5jCi10aGUgdmFyaW91cyBzdHJlYW1zLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBhbHdheXM8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tcnRjcC1zeW5jLWludGVydmFsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnRjcC1zeW5jLWludGVydmFs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydGNwLXN5bmMtaW50ZXJ2YWzigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkRldGVybWluZXMgaG93IG9mdGVuIHRvIHN5bmMgc3RyZWFtcyB1c2luZyBSVENQIGRhdGEuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tZHJvcC1vbi1sYXRlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHJvcC1vbi1sYXRlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkcm9wLW9uLWxhdGVuY3nigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRlbGxzIHRoZSBqaXR0ZXJidWZmZXIgdG8gbmV2ZXIgZXhjZWVkIHRoZSBnaXZlbiBsYXRlbmN5IGluIHNpemUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tLWRvLXN5bmMtZXZlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkby1zeW5jLWV2ZW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkby1zeW5jLWV2ZW504oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNlbmQgZXZlbnQgZG93bnN0cmVhbSB3aGVuIGEgc3RyZWFtIGlzIHN5bmNocm9uaXplZCB0byB0aGUgc2VuZGVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLS1kby1yZXRyYW5zbWlzc2lvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLXJldHJhbnNtaXNzaW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkby1yZXRyYW5zbWlzc2lvbuKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZXMgUlRQIHJldHJhbnNtaXNzaW9uIG9uIGFsbCBzdHJlYW1zLiBUbyBjb250cm9sIHJldHJhbnNtaXNzaW9uIG9uCi1hIHBlci1TU1JDIGJhc2lzLCBjb25uZWN0IHRvIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbi1uZXctaml0dGVyYnVmZmVyIiB0aXRsZT0iVGhlIOKAnG5ldy1qaXR0ZXJidWZmZXLigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcbmV3LWppdHRlcmJ1ZmZlcuKAnTwvc3Bhbj48L2E+IHNpZ25hbCBhbmQKLXNldCB0aGUgPHNwYW4gY2xhc3M9InR5cGUiPuKAnGRvLXJldHJhbnNtaXNzaW9u4oCdPC9zcGFuPiBwcm9wZXJ0eSBvbiB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwSml0dGVyQnVmZmVyPC9zcGFuPjwvYT4gb2JqZWN0IGluc3RlYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tLXJ0cC1wcm9maWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnRwLXByb2ZpbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0cC1wcm9maWxl4oCdICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRQUHJvZmlsZTwvc3Bhbj48L3ByZT4KLTxwPlNldHMgdGhlIGRlZmF1bHQgUlRQIHByb2ZpbGUgb2YgbmV3bHkgY3JlYXRlZCBSVFAgc2Vzc2lvbnMuIFRoZQotcHJvZmlsZSBjYW4gYmUgY2hhbmdlZCBhZnRlcndhcmRzIG9uIGEgcGVyLXNlc3Npb24gYmFzaXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEdTVF9SVFBfUFJPRklMRV9BVlA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tbnRwLXRpbWUtc291cmNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbnRwLXRpbWUtc291cmNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxudHAtdGltZS1zb3VyY2XigJ0gICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cE50cFRpbWVTb3VyY2U8L3NwYW4+PC9wcmU+Ci08cD5OVFAgdGltZSBzb3VyY2UgZm9yIFJUQ1AgcGFja2V0cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlRQIHRpbWUgYmFzZWQgb24gcmVhbHRpbWUgY2xvY2s8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tbWF4LWRyb3BvdXQtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1kcm9wb3V0LXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1kcm9wb3V0LXRpbWXigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNzaW5nIHBhY2tldHMgdG9sZXJhdGVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA2MDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLS1tYXgtbWlzb3JkZXItdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1taXNvcmRlci10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtbWlzb3JkZXItdGltZeKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXhpbXVtIHRpbWUgKG1pbGxpc2Vjb25kcykgb2YgbWlzb3JkZXJlZCBwYWNrZXRzIHRvbGVyYXRlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLS1tYXgtcnRjcC1ydHAtdGltZS1kaWZmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZuKAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBSVFAgdGltZSBpbiBSVENQIFNScyBpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLS1ydGNwLXN5bmMtc2VuZC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnRjcC1zeW5jLXNlbmQtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccnRjcC1zeW5jLXNlbmQtdGltZeKAnSAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Vc2Ugc2VuZCB0aW1lIG9yIGNhcHR1cmUgdGltZSBmb3IgUlRDUCBzeW5jIChUUlVFID0gc2VuZCB0aW1lLCBGQUxTRSA9IGNhcHR1cmUgdGltZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi0tcmZjNzI3My1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmZjNzI3My1zeW5j4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZmM3MjczLXN5bmPigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlN5bmNocm9uaXplIHJlY2VpdmVkIHN0cmVhbXMgdG8gdGhlIFJGQzcyNzMgY2xvY2sgKHJlcXVpcmVzIGNsb2NrIGFuZCBvZmZzZXQgdG8gYmUgcHJvdmlkZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLS1tYXgtc3RyZWFtcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zdHJlYW1z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtc3RyZWFtc+KAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBzdHJlYW1zIHRvIGNyZWF0ZSBmb3Igb25lIHNlc3Npb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDQyOTQ5NjcyOTU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tY2xlYXItcHQtbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xlYXItcHQtbWFw4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Q2xlYXIgYWxsIHByZXZpb3VzbHkgY2FjaGVkIHB0LW1hcHBpbmcgb2J0YWluZWQgd2l0aAotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4tcmVxdWVzdC1wdC1tYXAiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1wdC1tYXDigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCccmVxdWVzdC1wdC1tYXDigJ08L3NwYW4+PC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tY2xlYXItcHQtbWFwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tZ2V0LWludGVybmFsLXNlc3Npb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxnZXQtaW50ZXJuYWwtc2Vzc2lvbuKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPlJUUFNlc3Npb248L3NwYW4+KgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBpZCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVxdWVzdCB0aGUgaW50ZXJuYWwgUlRQU2Vzc2lvbiBvYmplY3QgYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdPYmplY3Q8L3NwYW4+PC9hPiBpbiBzZXNzaW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1nZXQtaW50ZXJuYWwtc2Vzc2lvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbiBpZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tYnllLXNzcmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1ieWUtc3NyY+KAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPk5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgYmVjYW1lIGluYWN0aXZlIGJlY2F1c2Ugb2YgYSBCWUUgcGFja2V0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1ieWUtc3NyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLWJ5ZS10aW1lb3V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tYnllLXRpbWVvdXTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5Ob3RpZnkgb2YgYW4gU1NSQyB0aGF0IGhhcyB0aW1lZCBvdXQgYmVjYXVzZSBvZiBCWUU8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tYnllLXRpbWVvdXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1uZXctc3NyYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLW5ldy1zc3Jj4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGEgbmV3IFNTUkMgdGhhdCBlbnRlcmVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXNzaW9uPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLW5ldy1zc3JjLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tbnB0LXN0b3AiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1ucHQtc3RvcOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPk5vdGlmeSB0aGF0IFNTUkMgc2VuZGVyIGhhcyBzZW50IGRhdGEgdXAgdG8gdGhlIGNvbmZpZ3VyZWQgTlBUIHN0b3AgdGltZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tbnB0LXN0b3AucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1zZW5kZXItdGltZW91dCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLXNlbmRlci10aW1lb3V04oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGEgc2VuZGVyIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0IGFuZCBiZWNhbWUgYSByZWNlaXZlcjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1zZW5kZXItdGltZW91dC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLXNzcmMtYWN0aXZlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tc3NyYy1hY3RpdmXigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5Ob3RpZnkgb2YgYSBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLXNzcmMtYWN0aXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tc3NyYy1jb2xsaXNpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1zc3JjLWNvbGxpc2lvbuKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPk5vdGlmeSB3aGVuIHdlIGhhdmUgYW4gU1NSQyBjb2xsaXNpb248L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tc3NyYy1jb2xsaXNpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1zc3JjLXNkZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1zc3JjLXNkZXPigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5Ob3RpZnkgb2YgYSBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLXNzcmMtc2Rlcy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLXNzcmMtdmFsaWRhdGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tc3NyYy12YWxpZGF0ZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5Ob3RpZnkgb2YgYSBuZXcgU1NSQyB0aGF0IGJlY2FtZSB2YWxpZGF0ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLXNzcmMtdmFsaWRhdGVkLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tdGltZW91dCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLXRpbWVvdXTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5Ob3RpZnkgb2YgYW4gU1NSQyB0aGF0IGhhcyB0aW1lZCBvdXQ8L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tdGltZW91dC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLXJlcXVlc3QtcHQtbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVxdWVzdC1wdC1tYXDigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHB0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5SZXF1ZXN0IHRoZSBwYXlsb2FkIHR5cGUgYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlc3Npb248L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcmVxdWVzdC1wdC1tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLXJlc2V0LXN5bmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNldC1zeW5j4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVzZXQgYWxsIGN1cnJlbnRseSBjb25maWd1cmVkIGxpcC1zeW5jIHBhcmFtZXRlcnMgYW5kIHJlcXVpcmUgbmV3IFNSCi1wYWNrZXRzIGZvciBhbGwgc3RyZWFtcyBiZWZvcmUgbGlwLXN5bmMgaXMgYXR0ZW1wdGVkIGFnYWluLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1yZXNldC1zeW5jLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcGF5bG9hZC10eXBlLWNoYW5nZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBheWxvYWQtdHlwZS1jaGFuZ2XigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBwdCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+U2lnbmFsIHRoYXQgdGhlIGN1cnJlbnQgcGF5bG9hZCB0eXBlIGNoYW5nZWQgdG8gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlc3Npb248L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcGF5bG9hZC10eXBlLWNoYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnB0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHB0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tbmV3LWppdHRlcmJ1ZmZlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5ldy1qaXR0ZXJidWZmZXLigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAgKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4gKmppdHRlcmJ1ZmZlciwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IHRoYXQgYSBuZXcgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcmJ1ZmZlcjwvY29kZT48L2VtPgotIHdhcyBjcmVhdGVkIGZvciA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vzc2lvbjwvY29kZT48L2VtPgotIGFuZCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3NyYzwvY29kZT48L2VtPgotLgotVGhpcyBzaWduYWwgY2FuLCBmb3IgZXhhbXBsZSwgYmUgdXNlZCB0byBjb25maWd1cmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmppdHRlcmJ1ZmZlcjwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1uZXctaml0dGVyYnVmZmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5qaXR0ZXJidWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgbmV3IGppdHRlcmJ1ZmZlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS40PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcmVxdWVzdC1hdXgtcmVjZWl2ZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXF1ZXN0LWF1eC1yZWNlaXZlcuKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPioKLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVxdWVzdCBhbiBBVVggcmVjZWl2ZXIgZWxlbWVudCBmb3IgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXNzaW9uPC9jb2RlPjwvZW0+Ci0uIFRoZSBBVVgKLWVsZW1lbnQgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmluLjwvcD4KLTxwPklmIG5vIGhhbmRsZXIgaXMgY29ubmVjdGVkLCBubyBBVVggZWxlbWVudCB3aWxsIGJlIHVzZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwQmluLXJlcXVlc3QtYXV4LXJlY2VpdmVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1yZXF1ZXN0LWF1eC1zZW5kZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXF1ZXN0LWF1eC1zZW5kZXLigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcXVlc3QgYW4gQVVYIHNlbmRlciBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlc3Npb248L2NvZGU+PC9lbT4KLS4gVGhlIEFVWAotZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiaW4uPC9wPgotPHA+SWYgbm8gaGFuZGxlciBpcyBjb25uZWN0ZWQsIG5vIEFVWCBlbGVtZW50IHdpbGwgYmUgdXNlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcmVxdWVzdC1hdXgtc2VuZGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1yZXF1ZXN0LXJ0Y3AtZGVjb2RlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlcXVlc3QtcnRjcC1kZWNvZGVy4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+KgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5SZXF1ZXN0IGFuIFJUQ1AgZGVjb2RlciBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlc3Npb248L2NvZGU+PC9lbT4KLS4gVGhlIGRlY29kZXIKLWVsZW1lbnQgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmluIGlmIG5vdCBwcmV2aW91c2x5IGFkZGVkLjwvcD4KLTxwPklmIG5vIGhhbmRsZXIgaXMgY29ubmVjdGVkLCBubyBlbmNvZGVyIHdpbGwgYmUgdXNlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcmVxdWVzdC1ydGNwLWRlY29kZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLXJlcXVlc3QtcnRjcC1lbmNvZGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVxdWVzdC1ydGNwLWVuY29kZXLigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcXVlc3QgYW4gUlRDUCBlbmNvZGVyIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vzc2lvbjwvY29kZT48L2VtPgotLiBUaGUgZW5jb2RlcgotZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiaW4gaWYgbm90IHByZXZpb3VzbHkgYWRkZWQuPC9wPgotPHA+SWYgbm8gaGFuZGxlciBpcyBjb25uZWN0ZWQsIG5vIGVuY29kZXIgd2lsbCBiZSB1c2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1yZXF1ZXN0LXJ0Y3AtZW5jb2Rlci5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS40PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tcmVxdWVzdC1ydHAtZGVjb2RlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlcXVlc3QtcnRwLWRlY29kZXLigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RFbGVtZW50PC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcXVlc3QgYW4gUlRQIGRlY29kZXIgZWxlbWVudCBmb3IgdGhlIGdpdmVuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXNzaW9uPC9jb2RlPjwvZW0+Ci0uIFRoZSBkZWNvZGVyCi1lbGVtZW50IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJpbiBpZiBub3QgcHJldmlvdXNseSBhZGRlZC48L3A+Ci08cD5JZiBubyBoYW5kbGVyIGlzIGNvbm5lY3RlZCwgbm8gZW5jb2RlciB3aWxsIGJlIHVzZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwQmluLXJlcXVlc3QtcnRwLWRlY29kZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLXJlcXVlc3QtcnRwLWVuY29kZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXF1ZXN0LXJ0cC1lbmNvZGVy4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+KgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5SZXF1ZXN0IGFuIFJUUCBlbmNvZGVyIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c2Vzc2lvbjwvY29kZT48L2VtPgotLiBUaGUgZW5jb2RlcgotZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiaW4gaWYgbm90IHByZXZpb3VzbHkgYWRkZWQuPC9wPgotPHA+SWYgbm8gaGFuZGxlciBpcyBjb25uZWN0ZWQsIG5vIGVuY29kZXIgd2lsbCBiZSB1c2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1yZXF1ZXN0LXJ0cC1lbmNvZGVyLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1uZXctc2VuZGVyLXNzcmMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1uZXctc2VuZGVyLXNzcmPigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tb24tbmV3LXNlbmRlci1zc3JjLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZW5kZXIgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuODwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQmluLW9uLXNlbmRlci1zc3JjLWFjdGl2ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLXNlbmRlci1zc3JjLWFjdGl2ZeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJpbi5odG1sI0dzdFJ0cEJpbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEJpbjwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1vbi1zZW5kZXItc3NyYy1hY3RpdmUucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlbmRlciBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS44PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBCaW4tZ2V0LXNlc3Npb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxnZXQtc2Vzc2lvbuKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPioKLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwjR3N0UnRwQmluIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwQmluPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgaWQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPlJlcXVlc3QgdGhlIHJlbGF0ZWQgR3N0UnRwU2Vzc2lvbiBhcyA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+IHJlbGF0ZWQgd2l0aCBzZXNzaW9uIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pZDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEJpbi1nZXQtc2Vzc2lvbi5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+aWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbiBpZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS44PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwaml0dGVyYnVmZmVyLCBydHBzZXNzaW9uLCBydHBwdGRlbXV4LCBydHBzc3JjZGVtdXg8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjE4ZjUzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGJ2ZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYmluLmh0bWwiIHRpdGxlPSJydHBiaW4iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkuaHRtbCIgdGl0bGU9InJ0cGJ2cGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBidmRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBidmRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJUUEJWRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5odG1sI0dzdFJUUEJWRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJUUEJWRGVwYXkiPkdzdFJUUEJWRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQQlZEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkV4dHJhY3QgQnJvYWRjb21Wb2ljZSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgNDI5OC4KLUZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzQyOTgudHh0PC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzEuNi4zLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEzMS42LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQlYxNjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpMTYwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylCVjMyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWJ2LCBtb2RlPShpbnQpeyAxNiwgMzIgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQQlZEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUEJWRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBCVkRlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnJ0cGJ2cGF5PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGI2YWMwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBidnBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBidmRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRkZXBheS5odG1sIiB0aXRsZT0icnRwY2VsdGRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBidnBheTwvc3Bhbj48L2gyPgotPHA+cnRwYnZwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UlRQQlZQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5Lmh0bWwjR3N0UlRQQlZQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJUUEJWUGF5Ij5Hc3RSVFBCVlBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmh0bWwjR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VBdWRpb1BheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBCVlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5QYXlsb2FkIEJyb2FkY29tVm9pY2UgYXVkaW8gaW50byBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDQyOTguCi1Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0Mjk4LnR4dDwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTMyLjYuMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTMyLjYuMy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWJ2LCBtb2RlPShpbnQpeyAxNiwgMzIgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylCVjE2PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTE2MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQlYzMjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBCVlBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUEJWUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UlRQQlZQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5LnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnJ0cGJ2ZGVwYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNhYzc0MS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGNlbHRkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBidnBheS5odG1sIiB0aXRsZT0icnRwYnZwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5odG1sIiB0aXRsZT0icnRwY2VsdHBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGJ2cGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwY2VsdGRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBjZWx0ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwQ0VMVERlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5Lmh0bWwjR3N0UnRwQ0VMVERlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBDRUxURGVwYXkiPkdzdFJ0cENFTFREZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cENFTFREZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzMuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEzMy42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludClbIDMyMDAwLCA0ODAwMCBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQ0VMVDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1jZWx0PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQ0VMVERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwQ0VMVERlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwQ0VMVERlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU5NTNmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGNlbHRwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBjZWx0ZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwiIHRpdGxlPSJydHBkZWMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBjZWx0cGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBjZWx0cGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cENFTFRQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5odG1sI0dzdFJ0cENFTFRQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cENFTFRQYXkiPkdzdFJ0cENFTFRQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwQ0VMVFBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTM0LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTM0LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWNlbHQsIHJhdGU9KGludClbIDMyMDAwLCA2NDAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCBmcmFtZS1zaXplPShpbnQpWyA2NCwgNTEyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDMyMDAwLCA0ODAwMCBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQ0VMVDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwQ0VMVFBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cENFTFRQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBDRUxUUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MjRlNy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGRlYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0cGF5Lmh0bWwiIHRpdGxlPSJydHBjZWx0cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5odG1sIiB0aXRsZT0icnRwZHRtZmRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGNlbHRwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGRlYzwvc3Bhbj48L2gyPgotPHA+cnRwZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYy0tbGF0ZW5jeSIgdGl0bGU9IlRoZSDigJxsYXRlbmN54oCdIHByb3BlcnR5Ij5sYXRlbmN5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCNHc3RSVFBEZWMtY2xlYXItcHQtbWFwIiB0aXRsZT0iVGhlIOKAnGNsZWFyLXB0LW1hcOKAnSBzaWduYWwiPmNsZWFyLXB0LW1hcDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+cmVxdWVzdC1wdC1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLWJ5ZS1zc3JjIiB0aXRsZT0iVGhlIOKAnG9uLWJ5ZS1zc3Jj4oCdIHNpZ25hbCI+b24tYnllLXNzcmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLWJ5ZS10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnG9uLWJ5ZS10aW1lb3V04oCdIHNpZ25hbCI+b24tYnllLXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLW5ldy1zc3JjIiB0aXRsZT0iVGhlIOKAnG9uLW5ldy1zc3Jj4oCdIHNpZ25hbCI+b24tbmV3LXNzcmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLXNzcmMtY29sbGlzaW9uIiB0aXRsZT0iVGhlIOKAnG9uLXNzcmMtY29sbGlzaW9u4oCdIHNpZ25hbCI+b24tc3NyYy1jb2xsaXNpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLXNzcmMtdmFsaWRhdGVkIiB0aXRsZT0iVGhlIOKAnG9uLXNzcmMtdmFsaWRhdGVk4oCdIHNpZ25hbCI+b24tc3NyYy12YWxpZGF0ZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLW9uLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcb24tdGltZW91dOKAnSBzaWduYWwiPm9uLXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UlRQRGVjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBEZWMiPkdzdFJUUERlYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQRGVjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BIHNpbXBsZSBSVFAgc2Vzc2lvbiBtYW5hZ2VyIHVzZWQgaW50ZXJuYWxseSBieSBydHNwc3JjLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTM1LjguMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHNwLmh0bWwjcGx1Z2luLXJ0c3AiPnJ0c3A8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXJzZXIvTmV0d29yazwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzUuOC4zLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZWN2X3J0Y3Bfc2lua18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZWN2X3J0cF9zaW5rXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVjdl9ydHBfc3JjXyV1XyV1XyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnJ0Y3Bfc3JjXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRjcDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERlYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUERlYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJUUERlYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBEZWMtLWxhdGVuY3kiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsYXRlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsYXRlbmN54oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkFtb3VudCBvZiBtcyB0byBidWZmZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERlYy1jbGVhci1wdC1tYXAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbGVhci1wdC1tYXDigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCNHc3RSVFBEZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFBEZWM8L3NwYW4+PC9hPiAqZ3N0cnRwZGVjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRGVjLXJlcXVlc3QtcHQtbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVxdWVzdC1wdC1tYXDigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUUERlYzwvc3Bhbj48L2E+ICpydHBkZWMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHB0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5SZXF1ZXN0IHRoZSBwYXlsb2FkIHR5cGUgYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0PC9jb2RlPjwvZW0+Ci0gaW4gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnNlc3Npb248L2NvZGU+PC9lbT4KLS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSVFBEZWMtcmVxdWVzdC1wdC1tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwZGVjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRGVjLW9uLWJ5ZS1zc3JjIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tYnllLXNzcmPigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCNHc3RSVFBEZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFBEZWM8L3NwYW4+PC9hPiAqcnRwYmluLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5Ob3RpZnkgb2YgYW4gU1NSQyB0aGF0IGJlY2FtZSBpbmFjdGl2ZSBiZWNhdXNlIG9mIGEgQllFIHBhY2tldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSVFBEZWMtb24tYnllLXNzcmMucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkMgPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBEZWMtb24tYnllLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1ieWUtdGltZW91dOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGRlYy5odG1sI0dzdFJUUERlYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUUERlYzwvc3Bhbj48L2E+ICpydHBiaW4sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNlc3Npb24sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPk5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgaGFzIHRpbWVkIG91dCBiZWNhdXNlIG9mIEJZRTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJUUERlYy1vbi1ieWUtdGltZW91dC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5ydHBiaW48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQyA8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERlYy1vbi1uZXctc3NyYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLW5ldy1zc3Jj4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRQRGVjPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGEgbmV3IFNTUkMgdGhhdCBlbnRlcmVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXNzaW9uPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UlRQRGVjLW9uLW5ldy1zc3JjLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0cGJpbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzaW9uPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDIDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRGVjLW9uLXNzcmMtY29sbGlzaW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tc3NyYy1jb2xsaXNpb27igJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCNHc3RSVFBEZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFBEZWM8L3NwYW4+PC9hPiAqZ3N0cnRwZGVjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBhcmcxLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBhcmcyLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRGVjLW9uLXNzcmMtdmFsaWRhdGVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tc3NyYy12YWxpZGF0ZWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCNHc3RSVFBEZWMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFBEZWM8L3NwYW4+PC9hPiAqZ3N0cnRwZGVjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBhcmcxLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICBhcmcyLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRGVjLW9uLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi10aW1lb3V04oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwjR3N0UlRQRGVjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRQRGVjPC9zcGFuPjwvYT4gKnJ0cGJpbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UlRQRGVjLW9uLXRpbWVvdXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRwYmluPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2Vzc2lvbjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkMgPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIzZjMyOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZmRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGR0bWZkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCIgdGl0bGU9InJ0cGRlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mbXV4Lmh0bWwiIHRpdGxlPSJydHBkdG1mbXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkZWMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mbXV4Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBkdG1mZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGR0bWZkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZmRlcGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5odG1sI0dzdFJ0cERUTUZEZXBheS0tbWF4LWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnG1heC1kdXJhdGlvbuKAnSBwcm9wZXJ0eSI+bWF4LWR1cmF0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5odG1sI0dzdFJ0cERUTUZEZXBheS0tdW5pdC10aW1lIiB0aXRsZT0iVGhlIOKAnHVuaXQtdGltZeKAnSBwcm9wZXJ0eSI+dW5pdC10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBEVE1GRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuaHRtbCNHc3RSdHBEVE1GRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cERUTUZEZXBheSI+R3N0UnRwRFRNRkRlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZmRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwRFRNRkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgdGFrZXMgUlRQIERUTUYgcGFja2V0cyBhbmQgcHJvZHVjZXMgc291bmQuIEl0IGFsc28gZW1pdHMgYQotbWVzc2FnZSBvbiB0aGUgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEJ1cy5odG1sI0dzdEJ1cy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPi48L3A+Ci08cD5UaGUgbWVzc2FnZSBpcyBjYWxsZWQgImR0bWYtZXZlbnQiIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM8L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMSI+Ci08Y29sZ3JvdXA+Ci08Y29sIGNsYXNzPSJOYW1lIj4KLTxjb2wgY2xhc3M9IlR5cGUiPgotPGNvbCBjbGFzcz0iUG9zc2libGUgdmFsdWVzIj4KLTxjb2wgY2xhc3M9IlB1cnBvc2UiPgotPC9jb2xncm91cD4KLTx0aGVhZD48dHI+Ci08dGg+TmFtZTwvdGg+Ci08dGg+R1R5cGU8L3RoPgotPHRoPlBvc3NpYmxlIHZhbHVlczwvdGg+Ci08dGg+UHVycG9zZTwvdGg+Ci08L3RyPjwvdGhlYWQ+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+dHlwZTwvdGQ+Ci08dGQ+R19UWVBFX0lOVDwvdGQ+Ci08dGQ+MC0xPC90ZD4KLTx0ZD5XaGljaCBvZiB0aGUgdHdvIG1ldGhvZHMKLXNwZWNpZmllZCBpbiBSRkMgMjgzMyB0byB1c2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUgMCBmb3IgdG9uZXMgYW5kIDEgZm9yCi1uYW1lZCBldmVudHMuIFRvbmVzIGFyZSBzcGVjaWZpZWQgYnkgdGhlaXIgZnJlcXVlbmNpZXMgYW5kIGV2ZW50cyBhcmUgc3BlY2llZAotYnkgdGhlaXIgbnVtYmVyLiBUaGlzIGVsZW1lbnQgY3VycmVudGx5IG9ubHkgcmVjb2duaXplcyBldmVudHMuCi1EbyBub3QgY29uZnVzZSB3aXRoICJtZXRob2QiIHdoaWNoIHNwZWNpZmllZCB0aGUgb3V0cHV0LgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+bnVtYmVyPC90ZD4KLTx0ZD5HX1RZUEVfSU5UPC90ZD4KLTx0ZD4wLTE2PC90ZD4KLTx0ZD5UaGUgZXZlbnQgbnVtYmVyLjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPnZvbHVtZTwvdGQ+Ci08dGQ+R19UWVBFX0lOVDwvdGQ+Ci08dGQ+MC0zNjwvdGQ+Ci08dGQ+VGhpcyBmaWVsZCBkZXNjcmliZXMgdGhlIHBvd2VyIGxldmVsIG9mIHRoZSB0b25lLCBleHByZXNzZWQgaW4gZEJtMAotYWZ0ZXIgZHJvcHBpbmcgdGhlIHNpZ24uIFBvd2VyIGxldmVscyByYW5nZSBmcm9tIDAgdG8gLTYzIGRCbTAuIFRoZSByYW5nZSBvZgotdmFsaWQgRFRNRiBpcyBmcm9tIDAgdG8gLTM2IGRCbTAuCi08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD5tZXRob2Q8L3RkPgotPHRkPkdfVFlQRV9JTlQ8L3RkPgotPHRkPjE8L3RkPgotPHRkPlRoaXMgZmllbGQgd2lsbCBhbHdheXMgYmVlbiAxIChpZSBSVFAgZXZlbnQpIGZyb20gdGhpcyBlbGVtZW50LgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTM2LjcuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kdG1mLmh0bWwjcGx1Z2luLWR0bWYiPmR0bWY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Zb3VuZXNzIEFsYW91aSAmbHQ7eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEzNi43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpVEVMRVBIT05FLUVWRU5UPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwRFRNRkRlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwRFRNRkRlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwRFRNRkRlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mZGVwYXkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cERUTUZEZXBheS0tbWF4LWR1cmF0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LWR1cmF0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtZHVyYXRpb27igJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXh1bWltdW0gZHVyYXRpb24gKG1zKSBvZiB0aGUgb3V0Z29pbmcgc291bmRwYWNrZXQuICgwID0gbm8gbGltaXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBEVE1GRGVwYXktLXVuaXQtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVuaXQtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdW5pdC10aW1l4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgc21hbGxlc3QgdW5pdCAobXMpIHRoZSBkdXJhdGlvbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgKDAgZGlzYWJsZXMgaXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTAwMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBkdG1mc3JjLCBydHBkdG1mbXV4PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlNTk0ZC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBkdG1mbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5odG1sIiB0aXRsZT0icnRwZHRtZmRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCIgdGl0bGU9InJ0cGR0bWZzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mbXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mbXV4LnRvcF9vZl9wYWdlIj48L2E+cnRwZHRtZm11eDwvc3Bhbj48L2gyPgotPHA+cnRwZHRtZm11eDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBEVE1GTXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbCNHc3RSVFBEVE1GTXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBEVE1GTXV4Ij5Hc3RSVFBEVE1GTXV4PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCNHc3RSVFBNdXgiPkdzdFJUUE11eDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQRFRNRk11eAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mbXV4LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBSVFAgIkRUTUYiIE11eGVyIG11eGVzIG11bHRpcGxlIFJUUCBzdHJlYW1zIGludG8gYSB2YWxpZCBSVFAKLXN0cmVhbS4gSXQgZG9lcyBleGFjdGx5IHdoYXQgaXRzIHBhcmVudCAoPHNwYW4gY2xhc3M9InR5cGUiPnJ0cG11eDwvc3Bhbj4pIGRvZXMsIGV4Y2VwdAotdGhhdCBpdCBwcmV2ZW50IGJ1ZmZlcnMgY29taW5nIG92ZXIgYSByZWd1bGFyIHNpbmtfJXUgcGFkIGZyb20gZ29pbmcgdGhyb3VnaAotZm9yIHRoZSBkdXJhdGlvbiBvZiBidWZmZXJzIHRoYXQgY2FtZSBpbiBhIHByaW9yaXR5X3NpbmtfJXUgcGFkLjwvcD4KLTxwPlRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaWYgYSBkaXNjb250aW51b3VzIHNvdXJjZSBsaWtlIGR0bWZzcmMgb3IKLXJ0cGR0bWZzcmMgYXJlIGNvbm5lY3RlZCB0byB0aGUgcHJpb3JpdHkgc2luayBwYWRzLiBUaGlzIHdheSwgdGhlIGdlbmVyYXRlZAotRFRNRiBzaWduYWwgY2FuIHJlcGxhY2UgdGhlIHJlY29yZGVkIGF1ZGlvIHdoaWxlIHRoZSB0b25lIGlzIGJlaW5nIHNlbnQuPC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzcuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCNwbHVnaW4tcnRwbWFuYWdlciI+cnRwbWFuYWdlcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlplZXNoYW4gQWxpICZsdDtmaXJzdC5sYXN0QG5va2lhLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvTXV4ZXI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTM3LjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cHJpb3JpdHlfc2lua18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbmtfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRFRNRk11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUERUTUZNdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBEVE1GTXV4OzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbCNHc3RSVFBEVE1GTXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRQRFRNRk11eDwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwZHRtZnNyYywgZHRtZnNyYywgcnRwbXV4PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1NmYxYy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBkdG1mc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbCIgdGl0bGU9InJ0cGR0bWZtdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS5odG1sIiB0aXRsZT0icnRwZHZkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZm11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLnRvcF9vZl9wYWdlIj48L2E+cnRwZHRtZnNyYzwvc3Bhbj48L2gyPgotPHA+cnRwZHRtZnNyYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tY2xvY2stcmF0ZSIgdGl0bGU9IlRoZSDigJxjbG9jay1yYXRl4oCdIHByb3BlcnR5Ij5jbG9jay1yYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLS1wYWNrZXQtcmVkdW5kYW5jeSIgdGl0bGU9IlRoZSDigJxwYWNrZXQtcmVkdW5kYW5jeeKAnSBwcm9wZXJ0eSI+cGFja2V0LXJlZHVuZGFuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sI0dzdFJUUERUTUZTcmMtLXB0IiB0aXRsZT0iVGhlIOKAnHB04oCdIHByb3BlcnR5Ij5wdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tc2VxbnVtIiB0aXRsZT0iVGhlIOKAnHNlcW51beKAnSBwcm9wZXJ0eSI+c2VxbnVtPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sI0dzdFJUUERUTUZTcmMtLXNlcW51bS1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcc2VxbnVtLW9mZnNldOKAnSBwcm9wZXJ0eSI+c2VxbnVtLW9mZnNldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tc3NyYyIgdGl0bGU9IlRoZSDigJxzc3Jj4oCdIHByb3BlcnR5Ij5zc3JjPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLS10aW1lc3RhbXAiIHRpdGxlPSJUaGUg4oCcdGltZXN0YW1w4oCdIHByb3BlcnR5Ij50aW1lc3RhbXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwjR3N0UlRQRFRNRlNyYy0tdGltZXN0YW1wLW9mZnNldCIgdGl0bGU9IlRoZSDigJx0aW1lc3RhbXAtb2Zmc2V04oCdIHByb3BlcnR5Ij50aW1lc3RhbXAtb2Zmc2V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBEVE1GU3JjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBEVE1GU3JjIj5Hc3RSVFBEVE1GU3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ij5Hc3RCYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBEVE1GU3JjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIFJUUERUTUZTcmMgZWxlbWVudCBnZW5lcmF0ZXMgUlRQIERUTUYgKFJGQyAyODMzKSBldmVudCBwYWNrZXRzIG9uIHJlcXVlc3QKLWZyb20gYXBwbGljYXRpb24uIFRoZSBhcHBsaWNhdGlvbiBjb21tdW5pY2F0ZXMgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEKLURUTUYgZXZlbnQgdXNpbmcgY3VzdG9tIHVwc3RyZWFtIGdzdHJlYW1lciBldmVudHMuIFRvIHJlcG9ydCBhIERUTUYgZXZlbnQsIGFuCi1hcHBsaWNhdGlvbiBtdXN0IHNlbmQgYW4gZXZlbnQgb2YgdHlwZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCBoYXZpbmcgYQotc3RydWN0dXJlIG9mIG5hbWUgImR0bWYtZXZlbnQiIHdpdGggZmllbGRzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwotdGFibGU6PC9wPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjEiPgotPGNvbGdyb3VwPgotPGNvbCBjbGFzcz0iTmFtZSI+Ci08Y29sIGNsYXNzPSJUeXBlIj4KLTxjb2wgY2xhc3M9IlBvc3NpYmxlIHZhbHVlcyI+Ci08Y29sIGNsYXNzPSJQdXJwb3NlIj4KLTwvY29sZ3JvdXA+Ci08dGhlYWQ+PHRyPgotPHRoPk5hbWU8L3RoPgotPHRoPkdUeXBlPC90aD4KLTx0aD5Qb3NzaWJsZSB2YWx1ZXM8L3RoPgotPHRoPlB1cnBvc2U8L3RoPgotPC90cj48L3RoZWFkPgotPHRib2R5PgotPHRyPgotPHRkPnR5cGU8L3RkPgotPHRkPkdfVFlQRV9JTlQ8L3RkPgotPHRkPjAtMTwvdGQ+Ci08dGQ+VGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhpcyBmaWVsZCB0byBzcGVjaWZ5IHdoaWNoIG9mIHRoZSB0d28gbWV0aG9kcwotc3BlY2lmaWVkIGluIFJGQyAyODMzIHRvIHVzZS4gVGhlIHZhbHVlIHNob3VsZCBiZSAwIGZvciB0b25lcyBhbmQgMSBmb3IKLW5hbWVkIGV2ZW50cy4gVG9uZXMgYXJlIHNwZWNpZmllZCBieSB0aGVpciBmcmVxdWVuY2llcyBhbmQgZXZlbnRzIGFyZSBzcGVjaWVkCi1ieSB0aGVpciBudW1iZXIuIFRoaXMgZWxlbWVudCBjYW4gb25seSB0YWtlIGV2ZW50cyBhcyBpbnB1dC4gRG8gbm90IGNvbmZ1c2UKLXdpdGggIm1ldGhvZCIgd2hpY2ggc3BlY2lmaWVkIHRoZSBvdXRwdXQuCi08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD5udW1iZXI8L3RkPgotPHRkPkdfVFlQRV9JTlQ8L3RkPgotPHRkPjAtMTU8L3RkPgotPHRkPlRoZSBldmVudCBudW1iZXIuPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+dm9sdW1lPC90ZD4KLTx0ZD5HX1RZUEVfSU5UPC90ZD4KLTx0ZD4wLTM2PC90ZD4KLTx0ZD5UaGlzIGZpZWxkIGRlc2NyaWJlcyB0aGUgcG93ZXIgbGV2ZWwgb2YgdGhlIHRvbmUsIGV4cHJlc3NlZCBpbiBkQm0wCi1hZnRlciBkcm9wcGluZyB0aGUgc2lnbi4gUG93ZXIgbGV2ZWxzIHJhbmdlIGZyb20gMCB0byAtNjMgZEJtMC4gVGhlIHJhbmdlIG9mCi12YWxpZCBEVE1GIGlzIGZyb20gMCB0byAtMzYgZEJtMC4gQ2FuIGJlIG9taXR0ZWQgaWYgc3RhcnQgaXMgc2V0IHRvIEZBTFNFLgotPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+c3RhcnQ8L3RkPgotPHRkPkdfVFlQRV9CT09MRUFOPC90ZD4KLTx0ZD5UcnVlIG9yIEZhbHNlPC90ZD4KLTx0ZD5XaGV0aGVyIHRoZSBldmVudCBpcyBzdGFydGluZyBvciBlbmRpbmcuPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+bWV0aG9kPC90ZD4KLTx0ZD5HX1RZUEVfSU5UPC90ZD4KLTx0ZD4xPC90ZD4KLTx0ZD5UaGUgbWV0aG9kIHVzZWQgZm9yIHNlbmRpbmcgZXZlbnQsIHRoaXMgZWxlbWVudCB3aWxsIHJlYWN0IGlmIHRoaXMKLWZpZWxkIGlzIGFic2VudCBvciAxLgotPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxwPkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgaW5mb3JtcyB0aGUgcGlwZWxpbmUgKGFuZCBpbiB0dXJuLCB0aGUKLVJUUERUTUZTcmMgZWxlbWVudCBpbnNpZGUgdGhlIHBpcGVsaW5lKSBhYm91dCB0aGUgc3RhcnQgb2YgYW4gUlRQIERUTUYgbmFtZWQKLWV2ZW50ICcxJyBvZiB2b2x1bWUgLTI1IGRCbTA6PC9wPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPgotc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJkdG1mLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAidHlwZSIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICAgICAgICAgICAgICAgIm51bWJlciIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICAgICAgICAgICAgICAgInZvbHVtZSIsIEdfVFlQRV9JTlQsIDI1LAotICAgICAgICAgICAgICAgICAgICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLQotZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgc3RydWN0dXJlKTsKLWdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGVsaW5lLCBldmVudCk7Ci08L3ByZT4KLTxwPldoZW4gYSBEVE1GIHRvbmUgYWN0dWFsbHkgc3RhcnRzIG9yIHN0b3AsIGEgImR0bWYtZXZlbnQtcHJvY2Vzc2VkIgotZWxlbWVudCA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0TWVzc2FnZS5odG1sI0dzdE1lc3NhZ2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0TWVzc2FnZTwvc3Bhbj48L2E+IHdpdGggdGhlIHNhbWUgZmllbGRzIGFzIHRoZSAiZHRtZi1ldmVudCIKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFdmVudC5odG1sI0dzdEV2ZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEV2ZW50PC9zcGFuPjwvYT4gdGhhdCB3YXMgdXNlZCB0byByZXF1ZXN0IHRoZSBldmVudC4gQWxzbywgaWYgYW55IGV2ZW50Ci1oYXMgbm90IGJlZW4gcHJvY2Vzc2VkIHdoZW4gdGhlIGVsZW1lbnQgZ29lcyBmcm9tIHRoZSBQQVVTRUQgdG8gdGhlCi1SRUFEWSBzdGF0ZSwgdGhlbiBhICJkdG1mLWV2ZW50LWRyb3BwZWQiIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEJ1cy5odG1sI0dzdEJ1cy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RCdXM8L3NwYW4+PC9hPiBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgcmVjZWl2ZWQuPC9wPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzguNy43LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWR0bWYuaHRtbCNwbHVnaW4tZHRtZiI+ZHRtZjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlplZXNoYW4gQWxpICZsdDt6ZWVzaGFuLmFsaUBub2tpYS5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9OZXR3b3JrPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEzOC43LjcuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVRFTEVQSE9ORS1FVkVOVDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRFRNRlNyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUERUTUZTcmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBEVE1GU3JjOzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMuaHRtbCNHc3RSVFBEVE1GU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRQRFRNRlNyYzwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJUUERUTUZTcmMubWVtYmVycyI+PC9hPjxoND5NZW1iZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InN0cnVjdF9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0ic3RydWN0X21lbWJlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzdHJ1Y3RfbWVtYmVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERUTUZTcmMtLWNsb2NrLXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbG9jay1yYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjbG9jay1yYXRl4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBjbG9jay1yYXRlIGF0IHdoaWNoIHRvIGdlbmVyYXRlIHRoZSBkdG1mIHBhY2tldHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDgwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERUTUZTcmMtLXBhY2tldC1yZWR1bmRhbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGFja2V0LXJlZHVuZGFuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBhY2tldC1yZWR1bmRhbmN54oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIHBhY2tldHMgdG8gc2VuZCB0byBpbmRpY2F0ZSBzdGFydCBhbmQgc3RvcCBkdG1mIGV2ZW50cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRFRNRlNyYy0tcHQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHTigJ0gICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgcGF5bG9hZCB0eXBlIG9mIHRoZSBwYWNrZXRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTI4PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogOTY8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERUTUZTcmMtLXNlcW51bSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlcW51beKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2VxbnVt4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgUlRQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0LjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRFRNRlNyYy0tc2VxbnVtLW9mZnNldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlcW51bS1vZmZzZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNlcW51bS1vZmZzZXTigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk9mZnNldCB0byBhZGQgdG8gYWxsIG91dGdvaW5nIHNlcW51bSAoLTEgPSByYW5kb20pLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBEVE1GU3JjLS1zc3JjIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3NyY+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3NyY+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgU1NSQyBvZiB0aGUgcGFja2V0cyAoLTEgPT0gcmFuZG9tKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDI5NDk2NzI5NTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRFRNRlNyYy0tdGltZXN0YW1wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGltZXN0YW1w4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aW1lc3RhbXDigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBSVFAgdGltZXN0YW1wIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBwYWNrZXQuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBEVE1GU3JjLS10aW1lc3RhbXAtb2Zmc2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGltZXN0YW1wLW9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGltZXN0YW1wLW9mZnNldOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+T2Zmc2V0IHRvIGFkZCB0byBhbGwgb3V0Z29pbmcgdGltZXN0YW1wcyAoLTEgPSByYW5kb20pLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPmR0bWZzcmMsIHJ0cGR0bWZkZXBheSwgcnRwZHRtZm11eDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdmRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjODQxYzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwZHZkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwiIHRpdGxlPSJydHBkdG1mc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5Lmh0bWwiIHRpdGxlPSJydHBkdnBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHRtZnNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGR2ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGR2ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UlRQRFZEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdmRlcGF5Lmh0bWwjR3N0UlRQRFZEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UlRQRFZEZXBheSI+R3N0UlRQRFZEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBEVkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xMzkuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPk1hcmNlbCBNb3JlYXV4ICZsdDttYXJjZWxtQHNwYWNlbGFicy5ubCZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjEzOS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpeyB2aWRlbywgYXVkaW8gfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKURWLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kZT0oc3RyaW5nKXsgU0QtVkNSLzUyNS02MCwgU0QtVkNSLzYyNS01MCwgSEQtVkNSLzExMjUtNjAsIEhELVZDUi8xMjUwLTUwLCBTREwtVkNSLzUyNS02MCwgU0RMLVZDUi82MjUtNTAsIDMwNk0vNTI1LTYwLCAzMDZNLzYyNS01MCwgMzE0TS0yNS81MjUtNjAsIDMxNE0tMjUvNjI1LTUwLCAzMTRNLTUwLzUyNS02MCwgMzE0TS01MC82MjUtNTAgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1kdjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRFZEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUERWRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBEVkRlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYzFiZGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGR2cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGR2ZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzIyZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBkdnBheTwvc3Bhbj48L2gyPgotPHA+cnRwZHZwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REVlBheU1vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5odG1sI0dzdFJUUERWUGF5LS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPm1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBEVlBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkuaHRtbCNHc3RSVFBEVlBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UlRQRFZQYXkiPkdzdFJUUERWUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBEVlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0MC43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TWFyY2VsIE1vcmVhdXggJmx0O21hcmNlbG1Ac3BhY2VsYWJzLm5sJmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0MC43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1kdjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpeyB2aWRlbywgYXVkaW8gfSwgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpRFYsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RlPShzdHJpbmcpeyBTRC1WQ1IvNTI1LTYwLCBTRC1WQ1IvNjI1LTUwLCBIRC1WQ1IvMTEyNS02MCwgSEQtVkNSLzEyNTAtNTAsIFNETC1WQ1IvNTI1LTYwLCBTREwtVkNSLzYyNS01MCwgMzA2TS81MjUtNjAsIDMwNk0vNjI1LTUwLCAzMTRNLTI1LzUyNS02MCwgMzE0TS0yNS82MjUtNTAsIDMxNE0tNTAvNTI1LTYwLCAzMTRNLTUwLzYyNS01MCB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERWUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UlRQRFZQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBEVlBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUERWUGF5LS1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbW9kZeKAnSAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3REVlBheU1vZGU8L3NwYW4+PC9wcmU+Ci08cD5UaGUgcGF5bG9hZCBtb2RlIG9mIHBheWxvYWRpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFZpZGVvIG9ubHk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5NDEwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwZzcyMmRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR2cGF5Lmh0bWwiIHRpdGxlPSJydHBkdnBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5Lmh0bWwiIHRpdGxlPSJydHBnNzIycGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZHZwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBnNzIyZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGc3MjJkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBHNzIyRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuaHRtbCNHc3RSdHBHNzIyRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEc3MjJEZXBheSI+R3N0UnRwRzcyMkRlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMmRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwRzcyMkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0MS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQxLjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylHNzIyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCk5LCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL0c3MjIsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMmRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEc3MjJEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEc3MjJEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEc3MjJEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U4NWFkMC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBnNzIycGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheS5odG1sIiB0aXRsZT0icnRwZzcyMmRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5odG1sIiB0aXRsZT0icnRwZzcyM2RlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIyZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwZzcyMnBheTwvc3Bhbj48L2gyPgotPHA+cnRwZzcyMnBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBHNzIyUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJwYXkuaHRtbCNHc3RSdHBHNzIyUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBHNzIyUGF5Ij5Hc3RSdHBHNzIyUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VBdWRpb1BheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlQXVkaW9QYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwRzcyMlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQyLjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQyLjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9HNzIyLCByYXRlPShpbnQpMTYwMDAsIGNoYW5uZWxzPShpbnQpMTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGVuY29kaW5nLW5hbWU9KHN0cmluZylHNzIyLCBwYXlsb2FkPShpbnQpOSwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3MjIsIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEc3MjJQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBHNzIyUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwRzcyMlBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjQ1NzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBnNzIzZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5odG1sIiB0aXRsZT0icnRwZzcyMnBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzIzcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyMnBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGc3MjNkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwZzcyM2RlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEc3MjNEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5odG1sI0dzdFJ0cEc3MjNEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwRzcyM0RlcGF5Ij5Hc3RSdHBHNzIzRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBHNzIzRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQzLjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNDMuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3MjM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTQsIGNsb2NrLXJhdGU9KGludCk4MDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9HNzIzLCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwRzcyM0RlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwRzcyM0RlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwRzcyM0RlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2M0N2NiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGc3MjNwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzIzZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzI2ZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBnNzIzcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBnNzIzcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJUUEc3MjNQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5odG1sI0dzdFJUUEc3MjNQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJUUEc3MjNQYXkiPkdzdFJUUEc3MjNQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQRzcyM1BheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQ0LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQ0LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9HNzIzLCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTQsIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpRzcyMzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpRzcyMzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRzcyM1BheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUEc3MjNQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBHNzIzUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhMTFmOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGc3MjZkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzcGF5Lmh0bWwiIHRpdGxlPSJydHBnNzIzcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjZwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjNwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBnNzI2ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGc3MjZkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkuaHRtbCNHc3RSdHBHNzI2RGVwYXktLWZvcmNlLWFhbDIiIHRpdGxlPSJUaGUg4oCcZm9yY2UtYWFsMuKAnSBwcm9wZXJ0eSI+Zm9yY2UtYWFsMjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEc3MjZEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5odG1sI0dzdFJ0cEc3MjZEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwRzcyNkRlcGF5Ij5Hc3RSdHBHNzI2RGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBHNzI2RGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQ1LjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BeGlzIENvbW11bmljYXRpb25zICZsdDtkZXYtZ3N0cmVhbWVyQGF4aXMuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNDUuNy4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpeyBHNzI2LCBHNzI2LTE2LCBHNzI2LTI0LCBHNzI2LTMyLCBHNzI2LTQwLCBBQUwyLUc3MjYtMTYsIEFBTDItRzcyNi0yNCwgQUFMMi1HNzI2LTMyLCBBQUwyLUc3MjYtNDAgfSwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtYWRwY20sIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDAsIGJpdHJhdGU9KGludCl7IDE2MDAwLCAyNDAwMCwgMzIwMDAsIDQwMDAwIH0sIGJsb2NrX2FsaWduPShpbnQpeyAyLCAzLCA0LCA1IH0sIGxheW91dD0oc3RyaW5nKWc3MjY8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBHNzI2RGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBHNzI2RGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBHNzI2RGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZkZXBheS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwRzcyNkRlcGF5LS1mb3JjZS1hYWwyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZm9yY2UtYWFsMuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZm9yY2UtYWFsMuKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Gb3JjZSBBQUwyIGRlY29kaW5nIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYmFkIHBheWxvYWRlcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2cGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZTFlYzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwZzcyNnBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjZkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjlkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNnBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGc3MjZwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGc3MjZwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCNHc3RSdHBHNzI2UGF5LS1mb3JjZS1hYWwyIiB0aXRsZT0iVGhlIOKAnGZvcmNlLWFhbDLigJ0gcHJvcGVydHkiPmZvcmNlLWFhbDI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBHNzI2UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCNHc3RSdHBHNzI2UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBHNzI2UGF5Ij5Hc3RSdHBHNzI2UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNnBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VBdWRpb1BheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlQXVkaW9QYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwRzcyNlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI2cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQ2LjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BeGlzIENvbW11bmljYXRpb25zICZsdDtkZXYtZ3N0cmVhbWVyQGF4aXMuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTQ2LjcuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWFkcGNtLCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwLCBiaXRyYXRlPShpbnQpeyAxNjAwMCwgMjQwMDAsIDMyMDAwLCA0MDAwMCB9LCBsYXlvdXQ9KHN0cmluZylnNzI2PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgRzcyNi0xNiwgRzcyNi0yNCwgRzcyNi0zMiwgRzcyNi00MCwgQUFMMi1HNzI2LTE2LCBBQUwyLUc3MjYtMjQsIEFBTDItRzcyNi0zMiwgQUFMMi1HNzI2LTQwIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEc3MjZQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBHNzI2UGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwRzcyNlBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNnBheS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwRzcyNlBheS0tZm9yY2UtYWFsMiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZvcmNlLWFhbDLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZvcmNlLWFhbDLigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+Rm9yY2UgQUFMMiBlbmNvZGluZyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJhZCBkZXBheWxvYWRlcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmZhOTAxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwZzcyOWRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjZwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5odG1sIiB0aXRsZT0icnRwZzcyOXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBnNzI5ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGc3MjlkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBHNzI5RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5ZGVwYXkuaHRtbCNHc3RSdHBHNzI5RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEc3MjlEZXBheSI+R3N0UnRwRzcyOURlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwRzcyOURlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0Ny42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+TGF1cmVudCBHbGF5YWwgJmx0O3NwZ2xlZ2xlQHlhaG9vLmZyJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNDcuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3Mjk8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTE4LCBjbG9jay1yYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vRzcyOSwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEc3MjlEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEc3MjlEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEc3MjlEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y1YmIxNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBnNzI5cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sIiB0aXRsZT0icnRwZzcyOWRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbWRlcGF5Lmh0bWwiIHRpdGxlPSJydHBnc21kZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwZzcyOXBheTwvc3Bhbj48L2gyPgotPHA+cnRwZzcyOXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBHNzI5UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlwYXkuaHRtbCNHc3RSVFBHNzI5UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBHNzI5UGF5Ij5Hc3RSVFBHNzI5UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUUEc3MjlQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0OC42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+T2xpdmllciBDcmV0ZSAmbHQ7b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNDguNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL0c3MjksIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpMTgsIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpRzcyOTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpRzcyOTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQRzcyOVBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUEc3MjlQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBHNzI5UGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbWRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDBjZjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbWRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGdzbWRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlwYXkuaHRtbCIgdGl0bGU9InJ0cGc3MjlwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtcGF5Lmh0bWwiIHRpdGxlPSJydHBnc21wYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbWRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyOXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGdzbWRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBnc21kZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBHU01EZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkuaHRtbCNHc3RSVFBHU01EZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UlRQR1NNRGVwYXkiPkdzdFJUUEdTTURlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBHU01EZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0OS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+WmVlc2hhbiBBbGkgJmx0O3plZW5peEBnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE0OS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpR1NNPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkzLCBjbG9jay1yYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1nc20sIHJhdGU9KGludCk4MDAwLCBjaGFubmVscz0oaW50KTE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbWRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQR1NNRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFBHU01EZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJUUEdTTURlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg4MGFkYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGdzbXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5odG1sIiB0aXRsZT0icnRwZ3NtZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGdzdGRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwZ3NtcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBnc21wYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UlRQR1NNUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3NtcGF5Lmh0bWwjR3N0UlRQR1NNUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBHU01QYXkiPkdzdFJUUEdTTVBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUUEdTTVBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTAuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlplZXNoYW4gQWxpICZsdDt6ZWVuaXhAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTUwLjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWdzbSwgcmF0ZT0oaW50KTgwMDAsIGNoYW5uZWxzPShpbnQpMTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkzLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUdTTTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpR1NNPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21wYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQR1NNUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UlRQR1NNUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UlRQR1NNUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdGRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTQ5OTguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdGRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGdzdGRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5odG1sIiB0aXRsZT0icnRwZ3NtcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5odG1sIiB0aXRsZT0icnRwZ3N0cGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGdzdGRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBnc3RkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBHU1REZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkuaHRtbCNHc3RSdHBHU1REZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwR1NURGVwYXkiPkdzdFJ0cEdTVERlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBHU1REZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1MS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yazwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTEuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWFwcGxpY2F0aW9uLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylYLUdTVDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEdTVERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwR1NURGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBHU1REZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MzRmYjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBnc3RwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGdzdGRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFkZXBheS5odG1sIiB0aXRsZT0icnRwaDI2MWRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwZ3N0cGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBnc3RwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lmh0bWwjR3N0UnRwR1NUUGF5LS1jb25maWctaW50ZXJ2YWwiIHRpdGxlPSJUaGUg4oCcY29uZmlnLWludGVydmFs4oCdIHByb3BlcnR5Ij5jb25maWctaW50ZXJ2YWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBHU1RQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkuaHRtbCNHc3RSdHBHU1RQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEdTVFBheSI+R3N0UnRwR1NUUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwR1NUUGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1Mi43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1Mi43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhcHBsaWNhdGlvbiwgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylYLUdTVDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEdTVFBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEdTVFBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEdTVFBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBHU1RQYXktLWNvbmZpZy1pbnRlcnZhbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbmZpZy1pbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29uZmlnLWludGVydmFs4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JbnRlcnZhbCBmb3Igc2VuZGluZyBjYXBzIGFuZCBUQUcgZXZlbnRzIGluIHNlY29uZHMgKDAgPSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAzNjAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZGYxMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBoMjYxZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZ3N0cGF5Lmh0bWwiIHRpdGxlPSJydHBnc3RwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MXBheS5odG1sIiB0aXRsZT0icnRwaDI2MXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGgyNjFkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwaDI2MWRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjFEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFkZXBheS5odG1sI0dzdFJ0cEgyNjFEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwSDI2MURlcGF5Ij5Hc3RSdHBIMjYxRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBIMjYxRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkV4dHJhY3QgZW5jb2RlZCBILjI2MSB2aWRlbyBmcmFtZXMgZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDQ1ODcuCi1Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNDU4Ny50eHQ8L3A+Ci08cD5UaGUgZGVwYXlsb2FkZXIgdGFrZXMgYW4gUlRQIHBhY2tldCBhbmQgZXh0cmFjdHMgaXRzIEguMjYxIHN0cmVhbS4gSXQKLWFnZ3JlZ2F0ZXMgdGhlIGV4dHJhY3RlZCBzdHJlYW0gdW50aWwgYSBjb21wbGV0ZSBmcmFtZSBpcyByZWNlaXZlZCBiZWZvcmUKLWl0IHB1c2hlcyBpdCBkb3duc3RyZWFtLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTMuNi40Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHVkcHNyYyBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+J2FwcGxpY2F0aW9uL3gtcnRwLCBwYXlsb2FkPTMxJzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGgyNjFkZXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXZkZWNfaDI2MSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZXBheWxvYWQgYW5kIGRlY29kZSBhbiBSVFAgSC4yNjEgdmlkZW8gc3RyZWFtLgotUmVmZXIgdG8gdGhlIHJ0cGgyNjFwYXkgZXhhbXBsZSB0byBjcmVhdGUgdGhlIFJUUCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTUzLjYuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TdGlhbiBTZWxuZXMgJmx0O3N0aWFuQHBleGlwLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTUzLjYuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KTMxLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYxPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2MTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1oMjYxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSDI2MURlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSDI2MURlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwSDI2MURlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwaDI2MXBheTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NTk1OTUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwaDI2MXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjFkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGgyNjFwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGgyNjFwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwSDI2MVBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxcGF5Lmh0bWwjR3N0UnRwSDI2MVBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwSDI2MVBheSI+R3N0UnRwSDI2MVBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBIMjYxUGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+UGF5bG9hZCBlbmNvZGVkIEguMjYxIHZpZGVvIGZyYW1lcyBpbnRvIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgNDU4Ny4KLUZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0NTg3LnR4dDwvcD4KLTxwPlRoZSBwYXlsb2FkZXIgdGFrZXMgYSBILjI2MSBmcmFtZSwgcGFyc2VzIGl0IGFuZCBzcGxpdHMgaXQgaW50byBmcmFnbWVudHMKLW9uIE1CIGJvdW5kYXJpZXMgaW4gb3JkZXIgdG8gbWF0Y2ggY29uZmlndXJlZCBNVFUgc2l6ZS4gRm9yIGVhY2ggZnJhZ21lbnQKLWFuIFJUUCBwYWNrZXQgaXMgY29uc3RydWN0ZWQgd2l0aCBhbiBSVFAgcGFja2V0IGhlYWRlciBmb2xsb3dlZCBieSB0aGUKLWZyYWdtZW50LiBJbiBhZGRpdGlvbiB0aGUgcGF5bG9hZGVyIHdpbGwgbWFrZSBzdXJlIHRoZSBwYWNrZXRpemVkIEguMjYxCi1zdHJlYW0gYXBwZWFycyBhcyBhIGNvbnRpbnVvdXMgYml0LXN0cmVhbSBhZnRlciBkZXBhY2tldGl6YXRpb24gYnkgc2hpZnRpbmcKLXRoZSBlbmNvZGVkIGJpdC1zdHJlYW0gb2YgYSBmcmFtZSB0byBhbGlnbiB3aXRoIHRoZSBsYXN0IHNpZ25pZmljYW50IGJpdCBvZgotdGhlIHByZXZpb3VzIGZyYW1lLiBUaGlzIGhlbHBzIGludGVyb3BlcmFiaWxpdHkgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCi1lbmNvZGVyIGRvZXMgbm90IHByb2R1Y2UgYSBjb250aW51b3VzIGJpdC1zdHJlYW0gYnV0IHRoZSBkZWNvZGVyIHJlcXVpcmVzCi1pdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTU0LjYuNCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF2ZW5jX2gyNjEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGgyNjFwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyB3aWxsIGVuY29kZSBhIHRlc3QgdmlkZW8gYW5kIHBheWxvYWQgaXQuIFJlZmVyIHRvIHRoZSBydHBoMjYxZGVwYXkKLWV4YW1wbGUgdG8gZGVwYXlsb2FkIGFuZCBwbGF5IHRoZSBSVFAgc3RyZWFtLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1NC42LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3RpYW4gU2VsbmVzICZsdDtzdGlhbkBwZXhpcC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTQuNi41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtaDI2MTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkzMSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2MTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjFwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjFQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBIMjYxUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwSDI2MVBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MXBheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBoMjYxZGVwYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlMDM5NS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M2RlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGgyNjNkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxcGF5Lmh0bWwiIHRpdGxlPSJydHBoMjYxcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M2RlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwaDI2M2RlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBoMjYzZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwSDI2M0RlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M2RlcGF5Lmh0bWwjR3N0UnRwSDI2M0RlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBIMjYzRGVwYXkiPkdzdFJ0cEgyNjNEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEgyNjNEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTUuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlBoaWxpcHBlIEthbGFmICZsdDtwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWsmZ3Q7LCBFZHdhcmQgSGVydmV5ICZsdDtiaWxib2VkQGJpbGJvZWQuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTUuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzQsIGNsb2NrLXJhdGU9KGludCk5MDAwMDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZylpdHUsIGgyNjN2ZXJzaW9uPShzdHJpbmcpaDI2MzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M2RlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjNEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEgyNjNEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEgyNjNEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRmODg3MS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBoMjYzcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5odG1sIiB0aXRsZT0icnRwaDI2M2RlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNwZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwaDI2M3BheTwvc3Bhbj48L2gyPgotPHA+cnRwaDI2M3BheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sI0dzdFJ0cEgyNjNQYXktLW1vZGVhLW9ubHkiIHRpdGxlPSJUaGUg4oCcbW9kZWEtb25seeKAnSBwcm9wZXJ0eSI+bW9kZWEtb25seTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjNQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BheS5odG1sI0dzdFJ0cEgyNjNQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEgyNjNQYXkiPkdzdFJ0cEgyNjNQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwSDI2M1BheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTU2LjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5OZWlsIFN0cmF0Zm9yZCAmbHQ7bmVpbHNAdmlwYWRpYS5jb20mZ3Q7RGVqYW4gU2FrZWxzYWsgJmx0O2RlamFuLnNha2Vsc2FrQG1hcmFuZC5zaSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1Ni43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1LCBoMjYzdmVyc2lvbj0oc3RyaW5nKWgyNjM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzQsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBIMjYzUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSDI2M1BheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEgyNjNQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjNQYXktLW1vZGVhLW9ubHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb2RlYS1vbmx54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb2RlYS1vbmx54oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkRpc2FibGUgcGFja2V0aXphdGlvbiBtb2RlcyBCIGFuZCBDLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwZWMzYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBoMjYzcGRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjNwcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwaDI2M3BkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwaDI2M3BkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBIMjYzUERlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkuaHRtbCNHc3RSdHBIMjYzUERlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBIMjYzUERlcGF5Ij5Hc3RSdHBIMjYzUERlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEgyNjNQRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1Ny42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTU3LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0xOTk4PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjMtMjAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcGRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBIMjYzUERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSDI2M1BEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEgyNjNQRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMyZWY5NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwaDI2M3BwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5odG1sIiB0aXRsZT0icnRwaDI2M3BkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjRkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcHBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcHBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcHBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGgyNjNwcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBoMjYzcHBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZyYWdtZW50YXRpb25Nb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbCNHc3RSdHBIMjYzUFBheS0tZnJhZ21lbnRhdGlvbi1tb2RlIiB0aXRsZT0iVGhlIOKAnGZyYWdtZW50YXRpb24tbW9kZeKAnSBwcm9wZXJ0eSI+ZnJhZ21lbnRhdGlvbi1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UnRwSDI2M1BQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwcGF5Lmh0bWwjR3N0UnRwSDI2M1BQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEgyNjNQUGF5Ij5Hc3RSdHBIMjYzUFBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwSDI2M1BQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTguNy4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNTguNy4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtaDI2MywgdmFyaWFudD0oc3RyaW5nKWl0dTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0xOTk4PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0yMDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYzcHBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjNQUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSDI2M1BQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBIMjYzUFBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjNQUGF5LS1mcmFnbWVudGF0aW9uLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmcmFnbWVudGF0aW9uLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZyYWdtZW50YXRpb24tbW9kZeKAnSAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0RnJhZ21lbnRhdGlvbk1vZGU8L3NwYW4+PC9wcmU+Ci08cD5QYWNrZXQgRnJhZ21lbnRhdGlvbiBNb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOb3JtYWw8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmY4NDYxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwaDI2NGRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwcGF5Lmh0bWwiIHRpdGxlPSJydHBoMjYzcHBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lmh0bWwiIHRpdGxlPSJydHBoMjY0cGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M3BwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBoMjY0ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGgyNjRkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBIMjY0RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkuaHRtbCNHc3RSdHBIMjY0RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEgyNjREZXBheSI+R3N0UnRwSDI2NERlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwSDI2NERlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE1OS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTU5LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2NDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYXZjLCBhbGlnbm1lbnQ9KHN0cmluZylhdTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWJ5dGUtc3RyZWFtLCBhbGlnbm1lbnQ9KHN0cmluZyl7IG5hbCwgYXUgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjREZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEgyNjREZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEgyNjREZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkxODMxMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBoMjY0cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRkZXBheS5odG1sIiB0aXRsZT0icnRwaDI2NGRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5odG1sIiB0aXRsZT0icnRwaDI2NWRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwaDI2NHBheTwvc3Bhbj48L2gyPgotPHA+cnRwaDI2NHBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbCNHc3RSdHBIMjY0UGF5LS1zcHJvcC1wYXJhbWV0ZXItc2V0cyIgdGl0bGU9IlRoZSDigJxzcHJvcC1wYXJhbWV0ZXItc2V0c+KAnSBwcm9wZXJ0eSI+c3Byb3AtcGFyYW1ldGVyLXNldHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbCNHc3RSdHBIMjY0UGF5LS1jb25maWctaW50ZXJ2YWwiIHRpdGxlPSJUaGUg4oCcY29uZmlnLWludGVydmFs4oCdIHByb3BlcnR5Ij5jb25maWctaW50ZXJ2YWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjRQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5odG1sI0dzdFJ0cEgyNjRQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEgyNjRQYXkiPkdzdFJ0cEgyNjRQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwSDI2NFBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY0cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTYwLjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5MYXVyZW50IEdsYXlhbCAmbHQ7c3BnbGVnbGVAeWFob28uZnImZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNjAuNy4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSwgYWxpZ25tZW50PShzdHJpbmcpeyBuYWwsIGF1IH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjRQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBIMjY0UGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwSDI2NFBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NHBheS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSDI2NFBheS0tc3Byb3AtcGFyYW1ldGVyLXNldHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzcHJvcC1wYXJhbWV0ZXItc2V0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3Byb3AtcGFyYW1ldGVyLXNldHPigJ0gICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgYmFzZTY0IHNwcm9wLXBhcmFtZXRlci1zZXRzIHRvIHNldCBpbiBvdXQgY2FwcyAoc2V0IHRvIE5VTEwgdG8gZXh0cmFjdCBmcm9tIHN0cmVhbSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjRQYXktLWNvbmZpZy1pbnRlcnZhbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbmZpZy1pbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29uZmlnLWludGVydmFs4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBTUFMgYW5kIFBQUyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoc3Byb3AgcGFyYW1ldGVyIHNldHMgd2lsbCBiZSBtdWx0aXBsZXhlZCBpbiB0aGUgZGF0YSBzdHJlYW0gd2hlbiBkZXRlY3RlZC4pICgwID0gZGlzYWJsZWQsIC0xID0gc2VuZCB3aXRoIGV2ZXJ5IElEUiBmcmFtZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbR19NQVhVTE9ORywzNjAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2NjYTcyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwaDI2NWRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjRwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5odG1sIiB0aXRsZT0icnRwaDI2NXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBoMjY1ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGgyNjVkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBIMjY1RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkuaHRtbCNHc3RSdHBIMjY1RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEgyNjVEZXBheSI+R3N0UnRwSDI2NURlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwSDI2NURlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE2MS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SnVyZ2VuIFNsb3dhY2sgJmx0O2p1cmdlbnNsb3dhY2tAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNjEuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjY1PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWgyNjUsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSwgYWxpZ25tZW50PShzdHJpbmcpeyBuYWwsIGF1IH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBIMjY1RGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBIMjY1RGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBIMjY1RGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZTc4NjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwaDI2NXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGgyNjVkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGlsYmNkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGgyNjVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGgyNjVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkuaHRtbCNHc3RSdHBIMjY1UGF5LS1jb25maWctaW50ZXJ2YWwiIHRpdGxlPSJUaGUg4oCcY29uZmlnLWludGVydmFs4oCdIHByb3BlcnR5Ij5jb25maWctaW50ZXJ2YWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5Lmh0bWwjR3N0UnRwSDI2NVBheS0tc3Byb3AtcGFyYW1ldGVyLXNldHMiIHRpdGxlPSJUaGUg4oCcc3Byb3AtcGFyYW1ldGVyLXNldHPigJ0gcHJvcGVydHkiPnNwcm9wLXBhcmFtZXRlci1zZXRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBIMjY1UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkuaHRtbCNHc3RSdHBIMjY1UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBIMjY1UGF5Ij5Hc3RSdHBIMjY1UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEgyNjVQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE2Mi43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SnVyZ2VuIFNsb3dhY2sgJmx0O2p1cmdlbnNsb3dhY2tAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTYyLjcuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LWgyNjUsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylodmMxLCBhbGlnbm1lbnQ9KHN0cmluZylhdTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtaDI2NSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWJ5dGUtc3RyZWFtLCBhbGlnbm1lbnQ9KHN0cmluZyl7IG5hbCwgYXUgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2NTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSDI2NVBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEgyNjVQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBIMjY1UGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBIMjY1UGF5LS1jb25maWctaW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb25maWctaW50ZXJ2YWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlNlbmQgVlBTLCBTUFMgYW5kIFBQUyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoc3Byb3AgcGFyYW1ldGVyIHNldHMgd2lsbCBiZSBtdWx0aXBsZXhlZCBpbiB0aGUgZGF0YSBzdHJlYW0gd2hlbiBkZXRlY3RlZC4pICgwID0gZGlzYWJsZWQsIC0xID0gc2VuZCB3aXRoIGV2ZXJ5IElEUiBmcmFtZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbR19NQVhVTE9ORywzNjAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEgyNjVQYXktLXNwcm9wLXBhcmFtZXRlci1zZXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3Byb3AtcGFyYW1ldGVyLXNldHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNwcm9wLXBhcmFtZXRlci1zZXRz4oCdICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGJhc2U2NCBzcHJvcC1wYXJhbWV0ZXItc2V0cyB0byBzZXQgaW4gb3V0IGNhcHMgKHNldCB0byBOVUxMIHRvIGV4dHJhY3QgZnJvbSBzdHJlYW0pLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5MTIyYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGlsYmNkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5Lmh0bWwiIHRpdGxlPSJydHBoMjY1cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkuaHRtbCIgdGl0bGU9InJ0cGlsYmNwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBpbGJjZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGlsYmNkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5pTEJDTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5odG1sI0dzdFJUUGlMQkNEZXBheS0tbW9kZSIgdGl0bGU9IlRoZSDigJxtb2Rl4oCdIHByb3BlcnR5Ij5tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UlRQaUxCQ0RlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5Lmh0bWwjR3N0UlRQaUxCQ0RlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBpTEJDRGVwYXkiPkdzdFJUUGlMQkNEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUUGlMQkNEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNjMuNy4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlBoaWxpcHBlIEthbGFmICZsdDtwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE2My43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSUxCQzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1pTEJDLCBtb2RlPShpbnQpeyAyMCwgMzAgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUGlMQkNEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJUUGlMQkNEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJUUGlMQkNEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBpTEJDRGVwYXktLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb2Rl4oCdICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPmlMQkNNb2RlPC9zcGFuPjwvcHJlPgotPHA+aUxCQyBmcmFtZSBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzMG1zIGZyYW1lczwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkNTU1MC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBpbGJjcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNkZXBheS5odG1sIiB0aXRsZT0icnRwaWxiY2RlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBqMmtkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwaWxiY3BheTwvc3Bhbj48L2gyPgotPHA+cnRwaWxiY3BheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBJTEJDUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGlsYmNwYXkuaHRtbCNHc3RSVFBJTEJDUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBJTEJDUGF5Ij5Hc3RSVFBJTEJDUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VBdWRpb1BheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlQXVkaW9QYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQSUxCQ1BheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY0LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5QaGlsaXBwZSBLYWxhZiAmbHQ7cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY0LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LWlMQkMsIG1vZGU9KGludCl7IDIwLCAzMCB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUlMQkMsIG1vZGU9KHN0cmluZyl7IDIwLCAzMCB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBJTEJDUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UlRQSUxCQ1BheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJUUElMQkNQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTljZDI5Ni4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwajJrZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheS5odG1sIiB0aXRsZT0icnRwaWxiY3BheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuaHRtbCIgdGl0bGU9InJ0cGoya3BheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwajJrZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGoya2RlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEoyS0RlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtkZXBheS5odG1sI0dzdFJ0cEoyS0RlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBKMktEZXBheSI+R3N0UnRwSjJLRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEoyS0RlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya2RlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkRlcGF5bG9hZCBhbiBSVFAtcGF5bG9hZGVkIEpQRUcgMjAwMCBpbWFnZSBpbnRvIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgNTM3MQotYW5kIFJGQyA1MzcyLgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvcmZjNTM3MS8KLWFuZCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9yZmM1MzcyLzwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY1LjYuMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNjUuNi4zLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIHNhbXBsaW5nPShzdHJpbmcpeyBSR0IsIEJHUiwgUkdCQSwgQkdSQSwgWUNiQ3JBLCBZQ2JDci00OjQ6NCwgWUNiQ3ItNDoyOjIsIFlDYkNyLTQ6MjowLCBZQ2JDci00OjE6MSwgR1JBWVNDQUxFIH0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylKUEVHMjAwMDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGNvbG9yc3BhY2U9KHN0cmluZyl7IHNSR0IsIHNZVVYsIEdSQVkgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUpQRUcyMDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5pbWFnZS94LWpwYywgY29sb3JzcGFjZT0oc3RyaW5nKXsgc1JHQiwgc1lVViwgR1JBWSB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEoyS0RlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSjJLRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBKMktEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMjZhNDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya3BheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBqMmtwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGoya2RlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sIiB0aXRsZT0icnRwaml0dGVyYnVmZmVyIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya3BheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGoya3BheTwvc3Bhbj48L2gyPgotPHA+cnRwajJrcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEoyS1BheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya3BheS5odG1sI0dzdFJ0cEoyS1BheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwSjJLUGF5Ij5Hc3RSdHBKMktQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBKMktQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBheWxvYWQgZW5jb2RlIEpQRUcgMjAwMCBpbWFnZXMgaW50byBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDUzNzEKLWFuZCBSRkMgNTM3Mi4KLUZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL3JmYzUzNzEvCi1hbmQgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvcmZjNTM3Mi88L3A+Ci08cD5UaGUgcGF5bG9hZGVyIHRha2VzIGEgSlBFRyAyMDAwIGltYWdlLCBzY2FucyBpdCBmb3IgInBhY2tldGl6YXRpb24KLXVuaXRzIiBhbmQgY29uc3RydWN0cyB0aGUgUlRQIHBhY2tldCBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlIEpQRUcgMjAwMAotY29kZXN0cmVhbS4gQSAicGFja2V0aXphdGlvbiB1bml0IiBpcyBkZWZpbmVkIGFzIGVpdGhlciBhIEpQRUcgMjAwMCBtYWluIGhlYWRlciwKLWEgSlBFRyAyMDAwIHRpbGUtcGFydCBoZWFkZXIsIG9yIGEgSlBFRyAyMDAwIHBhY2tldC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE2Ni42LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE2Ni42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+aW1hZ2UveC1qcGMsIHNhbXBsaW5nPShzdHJpbmcpeyBSR0IsIEJHUiwgUkdCQSwgQkdSQSwgWUNiQ3JBLCBZQ2JDci00OjQ6NCwgWUNiQ3ItNDoyOjIsIFlDYkNyLTQ6MjowLCBZQ2JDci00OjE6MSwgR1JBWVNDQUxFIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgc2FtcGxpbmc9KHN0cmluZyl7IFJHQiwgQkdSLCBSR0JBLCBCR1JBLCBZQ2JDckEsIFlDYkNyLTQ6NDo0LCBZQ2JDci00OjI6MiwgWUNiQ3ItNDoyOjAsIFlDYkNyLTQ6MToxLCBHUkFZU0NBTEUgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUpQRUcyMDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGoya3BheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSjJLUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSjJLUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwSjJLUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0YjUyMC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NDggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGppdHRlcmJ1ZmZlcjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuaHRtbCIgdGl0bGU9InJ0cGoya3BheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGpwZWdkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGppdHRlcmJ1ZmZlcjwvc3Bhbj48L2gyPgotPHA+cnRwaml0dGVyYnVmZmVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1kby1sb3N0IiB0aXRsZT0iVGhlIOKAnGRvLWxvc3TigJ0gcHJvcGVydHkiPmRvLWxvc3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1kcm9wLW9uLWxhdGVuY3kiIHRpdGxlPSJUaGUg4oCcZHJvcC1vbi1sYXRlbmN54oCdIHByb3BlcnR5Ij5kcm9wLW9uLWxhdGVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1sYXRlbmN5IiB0aXRsZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiPmxhdGVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXRzLW9mZnNldCIgdGl0bGU9IlRoZSDigJx0cy1vZmZzZXTigJ0gcHJvcGVydHkiPnRzLW9mZnNldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5SVFBKaXR0ZXJCdWZmZXJNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPm1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcGVyY2VudCIgdGl0bGU9IlRoZSDigJxwZXJjZW504oCdIHByb3BlcnR5Ij5wZXJjZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLWRvLXJldHJhbnNtaXNzaW9uIiB0aXRsZT0iVGhlIOKAnGRvLXJldHJhbnNtaXNzaW9u4oCdIHByb3BlcnR5Ij5kby1yZXRyYW5zbWlzc2lvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVsYXkiIHRpdGxlPSJUaGUg4oCccnR4LWRlbGF54oCdIHByb3BlcnR5Ij5ydHgtZGVsYXk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LWRlbGF5LXJlb3JkZXIiIHRpdGxlPSJUaGUg4oCccnR4LWRlbGF5LXJlb3JkZXLigJ0gcHJvcGVydHkiPnJ0eC1kZWxheS1yZW9yZGVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1yZXRyeS1wZXJpb2QiIHRpdGxlPSJUaGUg4oCccnR4LXJldHJ5LXBlcmlvZOKAnSBwcm9wZXJ0eSI+cnR4LXJldHJ5LXBlcmlvZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtcmV0cnktdGltZW91dCIgdGl0bGU9IlRoZSDigJxydHgtcmV0cnktdGltZW91dOKAnSBwcm9wZXJ0eSI+cnR4LXJldHJ5LXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tc3RhdHMiIHRpdGxlPSJUaGUg4oCcc3RhdHPigJ0gcHJvcGVydHkiPnN0YXRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1taW4tZGVsYXkiIHRpdGxlPSJUaGUg4oCccnR4LW1pbi1kZWxheeKAnSBwcm9wZXJ0eSI+cnR4LW1pbi1kZWxheTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtbWluLXJldHJ5LXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCccnR4LW1pbi1yZXRyeS10aW1lb3V04oCdIHByb3BlcnR5Ij5ydHgtbWluLXJldHJ5LXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LW1heC1yZXRyaWVzIiB0aXRsZT0iVGhlIOKAnHJ0eC1tYXgtcmV0cmllc+KAnSBwcm9wZXJ0eSI+cnR4LW1heC1yZXRyaWVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LW5leHQtc2VxbnVtIiB0aXRsZT0iVGhlIOKAnHJ0eC1uZXh0LXNlcW51beKAnSBwcm9wZXJ0eSI+cnR4LW5leHQtc2VxbnVtPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tbWF4LWRyb3BvdXQtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtZHJvcG91dC10aW1l4oCdIHByb3BlcnR5Ij5tYXgtZHJvcG91dC10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tbWF4LW1pc29yZGVyLXRpbWUiIHRpdGxlPSJUaGUg4oCcbWF4LW1pc29yZGVyLXRpbWXigJ0gcHJvcGVydHkiPm1heC1taXNvcmRlci10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLW1heC1ydGNwLXJ0cC10aW1lLWRpZmYiIHRpdGxlPSJUaGUg4oCcbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZuKAnSBwcm9wZXJ0eSI+bWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJmYzcyNzMtc3luYyIgdGl0bGU9IlRoZSDigJxyZmM3MjczLXN5bmPigJ0gcHJvcGVydHkiPnJmYzcyNzMtc3luYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVhZGxpbmUiIHRpdGxlPSJUaGUg4oCccnR4LWRlYWRsaW5l4oCdIHByb3BlcnR5Ij5ydHgtZGVhZGxpbmU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtc3RhdHMtdGltZW91dCIgdGl0bGU9IlRoZSDigJxydHgtc3RhdHMtdGltZW91dOKAnSBwcm9wZXJ0eSI+cnR4LXN0YXRzLXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLWNsZWFyLXB0LW1hcCIgdGl0bGU9IlRoZSDigJxjbGVhci1wdC1tYXDigJ0gc2lnbmFsIj5jbGVhci1wdC1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItaGFuZGxlLXN5bmMiIHRpdGxlPSJUaGUg4oCcaGFuZGxlLXN5bmPigJ0gc2lnbmFsIj5oYW5kbGUtc3luYzwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItb24tbnB0LXN0b3AiIHRpdGxlPSJUaGUg4oCcb24tbnB0LXN0b3DigJ0gc2lnbmFsIj5vbi1ucHQtc3RvcDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+cmVxdWVzdC1wdC1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLXNldC1hY3RpdmUiIHRpdGxlPSJUaGUg4oCcc2V0LWFjdGl2ZeKAnSBzaWduYWwiPnNldC1hY3RpdmU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXIiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cEppdHRlckJ1ZmZlciI+R3N0UnRwSml0dGVyQnVmZmVyPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBKaXR0ZXJCdWZmZXIKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCByZW9yZGVycyBhbmQgcmVtb3ZlcyBkdXBsaWNhdGUgUlRQIHBhY2tldHMgYXMgdGhleSBhcmUgcmVjZWl2ZWQKLWZyb20gYSBuZXR3b3JrIHNvdXJjZS48L3A+Ci08cD5UaGUgZWxlbWVudCBuZWVkcyB0aGUgY2xvY2stcmF0ZSBvZiB0aGUgUlRQIHBheWxvYWQgaW4gb3JkZXIgdG8gZXN0aW1hdGUgdGhlCi1kZWxheS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCBlaXRoZXIgZnJvbSB0aGUgY2FwcyBvbiB0aGUgc2luayBwYWQgb3IsCi13aGVuIG5vIGNhcHMgYXJlIHByZXNlbnQsIGZyb20gdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlcXVlc3QtcHQtbWFw4oCdPC9zcGFuPjwvYT4gc2lnbmFsLgotVG8gY2xlYXIgdGhlIHByZXZpb3VzIHB0LW1hcCB1c2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLWNsZWFyLXB0LW1hcCIgdGl0bGU9IlRoZSDigJxjbGVhci1wdC1tYXDigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcY2xlYXItcHQtbWFw4oCdPC9zcGFuPjwvYT4gc2lnbmFsLjwvcD4KLTxwPlRoZSBydHBqaXR0ZXJidWZmZXIgd2lsbCB3YWl0IGZvciBtaXNzaW5nIHBhY2tldHMgdXAgdG8gYSBjb25maWd1cmFibGUgdGltZQotbGltaXQgdXNpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1sYXRlbmN5IiB0aXRsZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxsYXRlbmN54oCdPC9zcGFuPjwvYT4gcHJvcGVydHkuIFBhY2tldHMgYXJyaXZpbmcgdG9vCi1sYXRlIGFyZSBjb25zaWRlcmVkIHRvIGJlIGxvc3QgcGFja2V0cy4gSWYgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1kby1sb3N0IiB0aXRsZT0iVGhlIOKAnGRvLWxvc3TigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxkby1sb3N04oCdPC9zcGFuPjwvYT4KLXByb3BlcnR5IGlzIHNldCwgbG9zdCBwYWNrZXRzIHdpbGwgcmVzdWx0IGluIGEgY3VzdG9tIHNlcmlhbGl6ZWQgZG93bnN0cmVhbQotZXZlbnQgb2YgbmFtZSBHc3RSVFBQYWNrZXRMb3N0LiBUaGUgbG9zdCBwYWNrZXQgZXZlbnRzIGFyZSB1c3VhbGx5IHVzZWQgYnkgYQotZGVwYXlsb2FkZXIgb3Igb3RoZXIgZWxlbWVudCB0byBjcmVhdGUgY29uY2VhbG1lbnQgZGF0YSBvciBzb21lIG90aGVyIGxvZ2ljCi10byBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgbWlzc2luZyBwYWNrZXRzLjwvcD4KLTxwPlRoZSBqaXR0ZXJidWZmZXIgd2lsbCB1c2UgdGhlIERUUyAob3IgUFRTIGlmIG5vIERUUyBpcyBzZXQpIG9mIHRoZSBpbmNvbW1pbmcKLWJ1ZmZlciBhbmQgdGhlIHJ0cHRpbWUgaW5zaWRlIHRoZSBSVFAgcGFja2V0IHRvIGNyZWF0ZSBhIFBUUyBvbiB0aGUgb3V0Z29pbmcKLWJ1ZmZlci48L3A+Ci08cD5UaGUgaml0dGVyYnVmZmVyIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gc2VuZCBlYXJseSByZXRyYW5zbWlzc2lvbiBldmVudHMKLXVwc3RyZWFtIGJ5IHNldHRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1kby1yZXRyYW5zbWlzc2lvbiIgdGl0bGU9IlRoZSDigJxkby1yZXRyYW5zbWlzc2lvbuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGRvLXJldHJhbnNtaXNzaW9u4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkuIEluCi10aGlzIG1vZGUsIHRoZSBqaXR0ZXJidWZmZXIgdHJpZXMgdG8gZXN0aW1hdGUgd2hlbiBhIHBhY2tldCBzaG91bGQgYXJyaXZlIGFuZAotc2VuZHMgYSBjdXN0b20gdXBzdHJlYW0gZXZlbnQgbmFtZWQgR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IHdoZW4gdGhlCi1wYWNrZXQgaXMgY29uc2lkZXJlZCBsYXRlLiBUaGUgaW5pdGlhbCBleHBlY3RlZCBwYWNrZXQgYXJyaXZhbCB0aW1lIGlzCi1jYWxjdWxhdGVkIGFzIGZvbGxvd3M6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPklmIHNlcW51bSBOIGFycml2ZWQgYXQgdGltZSBULCBzZXFudW0gTisxIGlzIGV4cGVjdGVkIHRvIGFycml2ZSBhdAotVCArIHBhY2tldC1zcGFjaW5nICsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1kZWxheSIgdGl0bGU9IlRoZSDigJxydHgtZGVsYXnigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxydHgtZGVsYXnigJ08L3NwYW4+PC9hPi4gVGhlIHBhY2tldCBzcGFjaW5nIGlzCi1jYWxjdWxhdGVkIGZyb20gdGhlIERUUyAob3IgUFRTIGlzIG5vIERUUykgb2YgdHdvIGNvbnNlY3V0aXZlIFJUUAotcGFja2V0cyB3aXRoIGRpZmZlcmVudCBydHB0aW1lLjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+SWYgc2VxbnVtIE4wIGFycml2ZWQgYXQgdGltZSBUMCBhbmQgc2VxbnVtIE5tIGFycml2ZWQgYXQgdGltZSBUbSwKLXNlcW51bSBOaSBpcyBleHBlY3RlZCBhdCB0aW1lIFRpID0gVDAgKyBpKihUbSAtIFQwKS8oTm0gLSBOMCkuIEFueQotcHJldmlvdXNseSBzY2hlZHVsZWQgdGltZW91dCBpcyBvdmVyd3JpdHRlbi48L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPklmIHNlcW51bSBOIGFycml2ZWQsIGFsbCBzZXFudW0gb2xkZXIgdGhhbgotTiAtIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVsYXktcmVvcmRlciIgdGl0bGU9IlRoZSDigJxydHgtZGVsYXktcmVvcmRlcuKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJ0eC1kZWxheS1yZW9yZGVy4oCdPC9zcGFuPjwvYT4gYXJlIGNvbnNpZGVyZWQgbGF0ZQotaW1tZWRpYXRlbHkuIFRoaXMgaXMgdG8gcmVxdWVzdCBmYXN0IGZlZWRiYWNrIGZvciBhYm9ub3JtYWxseSByZW9yZGVyCi1wYWNrZXRzIGJlZm9yZSBhbnkgb2YgdGhlIHByZXZpb3VzIHRpbWVvdXRzIGlzIHRyaWdnZXJlZC48L3A+PC9saT4KLTwvdWw+PC9kaXY+Ci08cD5BIGxhdGUgcGFja2V0IHRyaWdnZXJzIHRoZSBHc3RSVFBSZXRyYW5zbWlzc2lvblJlcXVlc3QgY3VzdG9tIHVwc3RyZWFtCi1ldmVudC4gQWZ0ZXIgdGhlIGluaXRpYWwgdGltZW91dCBleHBpcmVzIGFuZCB0aGUgcmV0cmFuc21pc3Npb24gZXZlbnQgaXMKLXNlbnQsIHRoZSB0aW1lb3V0IGlzIHNjaGVkdWxlZCBmb3IKLVQgKyA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LXJldHJ5LXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCccnR4LXJldHJ5LXRpbWVvdXTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxydHgtcmV0cnktdGltZW91dOKAnTwvc3Bhbj48L2E+LiBJZiB0aGUgbWlzc2luZyBwYWNrZXQgZGlkIG5vdAotYXJyaXZlIGFmdGVyIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtcmV0cnktdGltZW91dCIgdGl0bGU9IlRoZSDigJxydHgtcmV0cnktdGltZW91dOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJ0eC1yZXRyeS10aW1lb3V04oCdPC9zcGFuPjwvYT4sIGEgbmV3Ci1Hc3RSVFBSZXRyYW5zbWlzc2lvblJlcXVlc3QgaXMgc2VudCB1cHN0cmVhbSBhbmQgdGhlIHRpbWVvdXQgaXMgcmVzY2hlZHVsZWQKLWFnYWluIGZvciBUICsgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1yZXRyeS10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnHJ0eC1yZXRyeS10aW1lb3V04oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccnR4LXJldHJ5LXRpbWVvdXTigJ08L3NwYW4+PC9hPi4gVGhpcyByZXBlYXRzIHVudGlsCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LXJldHJ5LXBlcmlvZCIgdGl0bGU9IlRoZSDigJxydHgtcmV0cnktcGVyaW9k4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCccnR4LXJldHJ5LXBlcmlvZOKAnTwvc3Bhbj48L2E+IGVsYXBzZWQsIGF0IHdoaWNoIHBvaW50IG5vIGZ1cnRoZXIKLXJldHJhbnNtaXNzaW9uIHJlcXVlc3RzIGFyZSBzZW50IGFuZCB0aGUgcmVndWxhciBsb2dpYyBpcyBwZXJmb3JtZWQgdG8KLXNjaGVkdWxlIGEgbG9zdCBwYWNrZXQgYXMgZGlzY3Vzc2VkIGFib3ZlLjwvcD4KLTxwPlRoaXMgZWxlbWVudCBhY3RzIGFzIGEgbGl2ZSBlbGVtZW50IGFuZCBzbyBhZGRzIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLS1sYXRlbmN5IiB0aXRsZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxsYXRlbmN54oCdPC9zcGFuPjwvYT4KLXRvIHRoZSBwaXBlbGluZS48L3A+Ci08cD5UaGlzIGVsZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHVzZWQgaW5zaWRlIHJ0cGJpbi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY3LjguMTEiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHJ0c3BzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5ydHNwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vMTkyLjE2OC4xLjEzMzo4NTU0L21wZWcxb3IyQXVkaW9WaWRlb1Rlc3QgISBydHBqaXR0ZXJidWZmZXIgISBydHBtcHZkZXBheSAhIG1wZWcyZGVjICEgeHZpbWFnZXNpbms8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIENvbm5lY3QgdG8gYSBzdHJlYW1pbmcgc2VydmVyIGFuZCBkZWNvZGUgdGhlIE1QRUcgdmlkZW8uIFRoZSBqaXR0ZXJidWZmZXIgaXMKLWluc2VydGVkIGludG8gdGhlIHBpcGVsaW5lIHRvIHNtb290aCBvdXQgbmV0d29yayBqaXR0ZXIgYW5kIHRvIHJlb3JkZXIgdGhlCi1vdXQtb2Ytb3JkZXIgUlRQIHBhY2tldHMuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY3LjguMTIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sI3BsdWdpbi1ydHBtYW5hZ2VyIj5ydHBtYW5hZ2VyPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+UGhpbGlwcGUgS2FsYWYgJmx0O3BoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51ayZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNjcuOC4xMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2lua19ydGNwPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0Y3A8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSml0dGVyQnVmZmVyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwSml0dGVyQnVmZmVyOzwvcHJlPgotPHA+T3BhcXVlIGppdHRlcmJ1ZmZlciBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci0tZG8tbG9zdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLWxvc3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRvLWxvc3TigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBvdXQgYSBHc3RSVFBQYWNrZXRMb3N0IGV2ZW50IGRvd25zdHJlYW0gd2hlbiBhIHBhY2tldCBpcyBjb25zaWRlcmVkCi1sb3N0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1kcm9wLW9uLWxhdGVuY3kiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkcm9wLW9uLWxhdGVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRyb3Atb24tbGF0ZW5jeeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RHJvcCBvbGRlc3QgYnVmZmVycyB3aGVuIHRoZSBxdWV1ZSBpcyBjb21wbGV0ZWx5IGZpbGxlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci0tbGF0ZW5jeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxhdGVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhdGVuY3nigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG1heGltdW0gbGF0ZW5jeSBvZiB0aGUgaml0dGVyYnVmZmVyLiBQYWNrZXRzIHdpbGwgYmUga2VwdCBpbiB0aGUgYnVmZmVyCi1mb3IgYXQgbW9zdCB0aGlzIHRpbWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS10cy1vZmZzZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0cy1vZmZzZXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRzLW9mZnNldOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BZGp1c3QgR1N0cmVhbWVyIG91dHB1dCBidWZmZXIgdGltZXN0YW1wcyBpbiB0aGUgaml0dGVyYnVmZmVyIHdpdGggb2Zmc2V0LgotVGhpcyBpcyBtYWlubHkgdXNlZCB0byBlbnN1cmUgaW50ZXJzdHJlYW0gc3luY2hyb25pc2F0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb2Rl4oCdICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPlJUUEppdHRlckJ1ZmZlck1vZGU8L3NwYW4+PC9wcmU+Ci08cD5Db250cm9sIHRoZSBidWZmZXJpbmcgYW5kIHRpbWVzdGFtcGluZyBtb2RlIHVzZWQgYnkgdGhlIGppdHRlcmJ1ZmZlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogU2xhdmUgcmVjZWl2ZXIgdG8gc2VuZGVyIGNsb2NrPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLXBlcmNlbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwZXJjZW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwZXJjZW504oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgcGVyY2VudCBvZiB0aGUgaml0dGVyYnVmZmVyIHRoYXQgaXMgZmlsbGVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLWRvLXJldHJhbnNtaXNzaW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZG8tcmV0cmFuc21pc3Npb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRvLXJldHJhbnNtaXNzaW9u4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBvdXQgYSBHc3RSVFBSZXRyYW5zbWlzc2lvbiBldmVudCB1cHN0cmVhbSB3aGVuIGEgcGFja2V0IGlzIGNvbnNpZGVyZWQKLWxhdGUgYW5kIHNob3VsZCBiZSByZXRyYW5zbWl0dGVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVsYXkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydHgtZGVsYXnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0eC1kZWxheeKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gYSBwYWNrZXQgZGlkIG5vdCBhcnJpdmUgYXQgdGhlIGV4cGVjdGVkIHRpbWUsIHdhaXQgdGhpcyBleHRyYSBhbW91bnQKLW9mIHRpbWUgYmVmb3JlIHNlbmRpbmcgYSByZXRyYW5zbWlzc2lvbiBldmVudC48L3A+Ci08cD5XaGVuIC0xIGlzIHVzZWQsIHRoZSBtYXggaml0dGVyIHdpbGwgYmUgdXNlZCBhcyBleHRyYSBkZWxheS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVsYXktcmVvcmRlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJ0eC1kZWxheS1yZW9yZGVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydHgtZGVsYXktcmVvcmRlcuKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Bc3N1bWUgdGhhdCBhIHJldHJhbnNtaXNzaW9uIGV2ZW50IHNob3VsZCBiZSBzZW50IHdoZW4gd2Ugc2VlCi10aGlzIG11Y2ggcGFja2V0IHJlb3JkZXJpbmcuPC9wPgotPHA+V2hlbiAtMSBpcyB1c2VkLCB0aGUgdmFsdWUgd2lsbCBiZSBlc3RpbWF0ZWQgYmFzZWQgb24gb2JzZXJ2ZWQgcGFja2V0Ci1yZW9yZGVyaW5nLiBXaGVuIDAgaXMgdXNlZCBwYWNrZXQgcmVvcmRlcmluZyBhbG9uZSB3aWxsIG5vdCBjYXVzZSBhCi1yZXRyYW5zbWlzc2lvbiBldmVudCAoU2luY2UgMS4xMCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMzwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtcmV0cnktcGVyaW9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnR4LXJldHJ5LXBlcmlvZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccnR4LXJldHJ5LXBlcmlvZOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIGFtb3VudCBvZiB0aW1lIHRvIHRyeSB0byBnZXQgYSByZXRyYW5zbWlzc2lvbi48L3A+Ci08cD5XaGVuIC0xIGlzIHVzZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIGVzdGltYXRlZCBiYXNlZCBvbiB0aGUgaml0dGVyYnVmZmVyCi1sYXRlbmN5IGFuZCB0aGUgb2JzZXJ2ZWQgcm91bmQgdHJpcCB0aW1lLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4yPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1yZXRyeS10aW1lb3V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnR4LXJldHJ5LXRpbWVvdXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0eC1yZXRyeS10aW1lb3V04oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlJldHJ5IHNlbmRpbmcgYSB0cmFuc21pc3Npb24gZXZlbnQgYWZ0ZXIgdGhpcyB0aW1lb3V0IGluIG1zICgtMSBhdXRvbWF0aWMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLXN0YXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RhdHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0YXRz4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5WYXJpb3VzIGppdHRlcmJ1ZmZlciBzdGF0aXN0aWNzLiBUaGlzIHByb3BlcnR5IHJldHVybnMgYSBHc3RTdHJ1Y3R1cmUKLXdpdGggbmFtZSBhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczo8L3A+Ci08ZGl2IGNsYXNzPSJpdGVtaXplZGxpc3QiPjx1bCBjbGFzcz0iaXRlbWl6ZWRsaXN0IiBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBkaXNjOyAiPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4ibnVtLXB1c2hlZCI8L2NvZGU+OgotICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcHVzaGVkIG91dC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJudW0tbG9zdCI8L2NvZGU+OgotICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgY29uc2lkZXJlZCBsb3N0LgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+Im51bS1sYXRlIjwvY29kZT46Ci0gIHRoZSBudW1iZXIgb2YgcGFja2V0cyBhcnJpdmluZyB0b28gbGF0ZS4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJudW0tZHVwbGljYXRlcyI8L2NvZGU+OgotICB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZSBwYWNrZXRzLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InJ0eC1jb3VudCI8L2NvZGU+OgotICB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyByZXF1ZXN0ZWQuCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4icnR4LXN1Y2Nlc3MtY291bnQiPC9jb2RlPjoKLSAgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIHJldHJhbnNtaXNzaW9ucy4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJydHgtcGVyLXBhY2tldCI8L2NvZGU+OgotICBhdmVyYWdlIG51bWJlciBvZiBSVFggcGVyIHBhY2tldC4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci0gIDxjb2RlIGNsYXNzPSJjbGFzc25hbWUiPiJydHgtcnR0IjwvY29kZT46Ci0gIGF2ZXJhZ2Ugcm91bmQgdHJpcCB0aW1lIHBlciBSVFguCi0gIDwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS40PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLXJ0eC1taW4tZGVsYXkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydHgtbWluLWRlbGF54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydHgtbWluLWRlbGF54oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gYSBwYWNrZXQgZGlkIG5vdCBhcnJpdmUgYXQgdGhlIGV4cGVjdGVkIHRpbWUsIHdhaXQgYXQgbGVhc3QgdGhpcyBleHRyYSBhbW91bnQKLW9mIHRpbWUgYmVmb3JlIHNlbmRpbmcgYSByZXRyYW5zbWlzc2lvbiBldmVudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtbWluLXJldHJ5LXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydHgtbWluLXJldHJ5LXRpbWVvdXTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0eC1taW4tcmV0cnktdGltZW91dOKAnSAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1pbmltdW0gdGltZW91dCBiZXR3ZWVuIHNlbmRpbmcgYSB0cmFuc21pc3Npb24gZXZlbnQgaW4gbXMgKC0xIGF1dG9tYXRpYykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogLTE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci0tcnR4LW1heC1yZXRyaWVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnR4LW1heC1yZXRyaWVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydHgtbWF4LXJldHJpZXPigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyB0byByZXF1ZXN0IGEgcmV0cmFuc21pc3Npb24uPC9wPgotPHA+VGhpcyBpbXBsaWVzIHRoYXQgYXMgbWF4aW11bSAocnR4LW1heC1yZXRyaWVzICsgMSkgcmV0cmFuc21pc3Npb25zIHdpbGwgYmUgcmVxdWVzdGVkLgotV2hlbiAtMSBpcyB1c2VkLCB0aGUgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHJlcXVlc3Qgd2lsbCBub3QgYmUgbGltaXRlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtbmV4dC1zZXFudW0iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydHgtbmV4dC1zZXFudW3igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0eC1uZXh0LXNlcW51beKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RXN0aW1hdGUgd2hlbiB0aGUgbmV4dCBwYWNrZXQgc2hvdWxkIGFycml2ZSBhbmQgc2NoZWR1bGUgYSByZXRyYW5zbWlzc2lvbgotcmVxdWVzdCBmb3IgaXQuCi1UaGlzIGlzLCB3aGVuIHBhY2tldCBOIGFycml2ZXMsIGEgR3N0UlRQUmV0cmFuc21pc3Npb24gZXZlbnQgaXMgc2NoZWR1bGUKLWZvciBwYWNrZXQgTisxLiBTbyBpdCB3aWxsIGJlIHJlcXVlc3RlZCBpZiBpdCBkb2VzIG5vdCBhcnJpdmUgYXQgdGhlIGV4cGVjdGVkIHRpbWUuCi1UaGUgZXhwZWN0ZWQgdGltZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBkdHMgb2YgTiBhbmQgdGhlIHBhY2tldCBzcGFjaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS42PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItLW1heC1kcm9wb3V0LXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtZHJvcG91dC10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtZHJvcG91dC10aW1l4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXhpbXVtIHRpbWUgKG1pbGxpc2Vjb25kcykgb2YgbWlzc2luZyBwYWNrZXRzIHRvbGVyYXRlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNjAwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci0tbWF4LW1pc29yZGVyLXRpbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtbWlzb3JkZXItdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LW1pc29yZGVyLXRpbWXigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc29yZGVyZWQgcGFja2V0cyB0b2xlcmF0ZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci0tbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1ydGNwLXJ0cC10aW1lLWRpZmbigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1ydGNwLXJ0cC10aW1lLWRpZmbigJ0gICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIGluIG1zIHRoYXQgdGhlIFJUUCB0aW1lIGluIHRoZSBSVENQIFNScwotaXMgYWxsb3dlZCB0byBiZSBhaGVhZCBvZiB0aGUgbGFzdCBSVFAgcGFja2V0IHdlIHJlY2VpdmVkLiBVc2UKLS0xIHRvIGRpc2FibGUgaWdub3Jpbmcgb2YgUlRDUCBwYWNrZXRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDA8L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjg8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci0tcmZjNzI3My1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmZjNzI3My1zeW5j4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZmM3MjczLXN5bmPigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlN5bmNocm9uaXplIHJlY2VpdmVkIHN0cmVhbXMgdG8gdGhlIFJGQzcyNzMgY2xvY2sgKHJlcXVpcmVzIGNsb2NrIGFuZCBvZmZzZXQgdG8gYmUgcHJvdmlkZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtZGVhZGxpbmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydHgtZGVhZGxpbmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0eC1kZWFkbGluZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBkZWFkbGluZSBmb3IgYSB2YWxpZCBSVFggcmVxdWVzdCBpbiBtcy48L3A+Ci08cD5Ib3cgbG9uZyB0aGUgUlRYIFJUQ1Agd2lsbCBiZSB2YWxpZCBmb3IuCi1XaGVuIC0xIGlzIHVzZWQsIHRoZSBzaXplIG9mIHRoZSBqaXR0ZXJidWZmZXIgd2lsbCBiZSB1c2VkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4xMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLS1ydHgtc3RhdHMtdGltZW91dCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJ0eC1zdGF0cy10aW1lb3V04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydHgtc3RhdHMtdGltZW91dOKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSB0aW1lIHRvIHdhaXQgZm9yIGEgcmV0cmFuc21pdHRlZCBwYWNrZXQgYWZ0ZXIgaXQgaGFzIGJlZW4gY29uc2lkZXJlZCBsb3N0IGluIG9yZGVyIHRvIGNvbGxlY3Qgc3RhdGlzdGljcyAobXMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLWNsZWFyLXB0LW1hcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNsZWFyLXB0LW1hcOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEppdHRlckJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkludmFsaWRhdGUgdGhlIGNsb2NrLXJhdGUgYXMgb2J0YWluZWQgd2l0aCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyLXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHJlcXVlc3QtcHQtbWFw4oCdPC9zcGFuPjwvYT4gc2lnbmFsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1jbGVhci1wdC1tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+YnVmZmVyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1oYW5kbGUtc3luYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhhbmRsZS1zeW5j4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwSml0dGVyQnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlciwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT4gICAgICAgKnN0cnVjdCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+QmUgbm90aWZpZWQgb2YgbmV3IHN5bmMgdmFsdWVzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1oYW5kbGUtc3luYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3RydWN0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSBHc3RTdHJ1Y3R1cmUgY29udGFpbmluZyBzeW5jIHZhbHVlcy48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1vbi1ucHQtc3RvcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLW5wdC1zdG9w4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwjR3N0UnRwSml0dGVyQnVmZmVyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwSml0dGVyQnVmZmVyPC9zcGFuPjwvYT4gKmJ1ZmZlciwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+U2lnbmFsIHRoYXQgdGhlIGppdHRlcmJ1ZmVyIGhhcyBwdXNoZWQgdGhlIFJUUCBwYWNrZXQgdGhhdCBjb3JyZXNwb25kcyB0bwotdGhlIG5wdC1zdG9wIHBvc2l0aW9uLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1vbi1ucHQtc3RvcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1yZXF1ZXN0LXB0LW1hcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlcXVlc3QtcHQtbWFw4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqaXR0ZXJidWZmZXIuaHRtbCNHc3RSdHBKaXR0ZXJCdWZmZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBKaXR0ZXJCdWZmZXI8L3NwYW4+PC9hPiAqYnVmZmVyLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICAgICBwdCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVxdWVzdCB0aGUgcGF5bG9hZCB0eXBlIGFzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1yZXF1ZXN0LXB0LW1hcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cEppdHRlckJ1ZmZlci1zZXQtYWN0aXZlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2V0LWFjdGl2ZeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sI0dzdFJ0cEppdHRlckJ1ZmZlciI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cEppdHRlckJ1ZmZlcjwvc3Bhbj48L2E+ICpidWZmZXIsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPiAgICAgICAgICAgIFJldHVybnMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT4gICAgICAgICAgICAgYXJnMiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+U3RhcnQgcHVzaGluZyBvdXQgcGFja2V0cyB3aXRoIHRoZSBnaXZlbiBiYXNlIHRpbWUuIFRoaXMgc2lnbmFsIGlzIG9ubHkKLXVzZWZ1bCBpbiBidWZmZXJpbmcgbW9kZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBKaXR0ZXJCdWZmZXItc2V0LWFjdGl2ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5idWZmZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwSml0dGVyQnVmZmVyLXNldC1hY3RpdmUucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiB0aGUgdGltZSBvZiB0aGUgbGFzdCBwdXNoZWQgcGFja2V0LjwvcD4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1BQ1RJT046Q0FQUyI+QWN0aW9uPC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNTc0N2YuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBqcGVnZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwiIHRpdGxlPSJydHBqaXR0ZXJidWZmZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sIiB0aXRsZT0icnRwanBlZ3BheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGppdHRlcmJ1ZmZlci5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cGpwZWdkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwanBlZ2RlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEpQRUdEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5odG1sI0dzdFJ0cEpQRUdEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwSlBFR0RlcGF5Ij5Hc3RSdHBKUEVHRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBKUEVHRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY4LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNjguNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylKUEVHPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkyNiwgY2xvY2stcmF0ZT0oaW50KTkwMDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5pbWFnZS9qcGVnPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSlBFR0RlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwSlBFR0RlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwSlBFR0RlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTM1OTc3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGpwZWdwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBqcGVnZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cGtsdmRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVnZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBqcGVncGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBqcGVncGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwjR3N0UnRwSlBFR1BheS0tcXVhbGl0eSIgdGl0bGU9IlRoZSDigJxxdWFsaXR54oCdIHByb3BlcnR5Ij5xdWFsaXR5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwjR3N0UnRwSlBFR1BheS0tdHlwZSIgdGl0bGU9IlRoZSDigJx0eXBl4oCdIHByb3BlcnR5Ij50eXBlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBKUEVHUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdwYXkuaHRtbCNHc3RSdHBKUEVHUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBKUEVHUGF5Ij5Hc3RSdHBKUEVHUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEpQRUdQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5QYXlsb2FkIGVuY29kZSBKUEVHIHBpY3R1cmVzIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAyNDM1LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMjQzNS50eHQ8L3A+Ci08cD5UaGUgcGF5bG9hZGVyIHRha2VzIGEgSlBFRyBwaWN0dXJlLCBzY2FucyB0aGUgaGVhZGVyIGZvciBxdWFudGl6YXRpb24KLXRhYmxlcyAoaWYgbmVlZGVkKSBhbmQgY29uc3RydWN0cyB0aGUgUlRQIHBhY2tldCBoZWFkZXIgZm9sbG93ZWQgYnkKLXRoZSBhY3R1YWwgSlBFRyBlbnRyb3B5IHNjYW4uPC9wPgotPHA+VGhlIHBheWxvYWRlciBhc3N1bWVzIHRoYXQgY29ycmVjdCB3aWR0aCBhbmQgaGVpZ2h0IGlzIGZvdW5kIGluIHRoZSBjYXBzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY5LjcuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BeGlzIENvbW11bmljYXRpb25zICZsdDtkZXYtZ3N0cmVhbWVyQGF4aXMuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTY5LjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5pbWFnZS9qcGVnPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1qcGVnPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KTI2LCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylKUEVHLCB3aWR0aD0oaW50KVsgMSwgNjU1MzYgXSwgaGVpZ2h0PShpbnQpWyAxLCA2NTUzNiBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSlBFRywgd2lkdGg9KGludClbIDEsIDY1NTM2IF0sIGhlaWdodD0oaW50KVsgMSwgNjU1MzYgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSlBFR1BheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cEpQRUdQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBKUEVHUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBKUEVHUGF5LS1xdWFsaXR5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccXVhbGl0eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccXVhbGl0eeKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UXVhbGl0eSBmYWN0b3Igb24gSlBFRyBkYXRhICh1bnVzZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMjU1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDI1NTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwSlBFR1BheS0tdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR5cGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR5cGXigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkRlZmF1bHQgSlBFRyBUeXBlLCBvdmVyd3JpdHRlbiBieSBTT0Ygd2hlbiBwcmVzZW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMjU1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdmRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdmMGExYy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwa2x2ZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwanBlZ3BheS5odG1sIiB0aXRsZT0icnRwanBlZ3BheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuaHRtbCIgdGl0bGU9InJ0cGtsdnBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdmRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdmRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwa2x2ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cGtsdmRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cEtsdkRlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5odG1sI0dzdFJ0cEtsdkRlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBLbHZEZXBheSI+R3N0UnRwS2x2RGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEtsdkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdmRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkV4dHJhY3QgS0xWIG1ldGFkYXRhIGZyb20gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA2NTk3LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU5NzwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNzAuNi4zIj48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHVkcHNyYyBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+J2FwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWFwcGxpY2F0aW9uLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylTTVBURTMzNk0nPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwa2x2ZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZha2VzaW5rIGR1bXA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHJ1ZTwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZGVwYXlsb2FkIGFuIFJUUCBLTFYgc3RyZWFtIGFuZCBkaXNwbGF5Ci1hIGhleGR1bXAgb2YgdGhlIEtMViBkYXRhIG9uIHN0ZG91dC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNzAuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbUBjZW50cmljdWxhci5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3MC42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXBwbGljYXRpb24sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNNUFRFMzM2TTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bWV0YS94LWtsdiwgcGFyc2VkPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdmRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwS2x2RGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBLbHZEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cEtsdkRlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBrbHZwYXk8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4OTUxNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cGtsdnBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5odG1sIiB0aXRsZT0icnRwa2x2ZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDE2ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cEwxNmRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwa2x2cGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBrbHZwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwS2x2UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdnBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5Lmh0bWwjR3N0UnRwS2x2UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBLbHZQYXkiPkdzdFJ0cEtsdlBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdnBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cEtsdlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+UGF5bG9hZHMgS0xWIG1ldGFkYXRhIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA2NTk3LgotRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU5NzwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNzEuNi4zIj48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj52aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPndpdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5rbHY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj50cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdHNkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwa2x2cGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIHBheWxvYWQgYW4gUlRQIEtMViBzdHJlYW0gZXh0cmFjdGVkIGZyb20gYW4KLU1QRUctVFMgc3RyZWFtIGFuZCBzZW5kIGl0IHZpYSBVRFAgdG8gYW4gUlRQIHJlY2VpdmVyLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3MS42LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltQGNlbnRyaWN1bGFyLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3MS42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+bWV0YS94LWtsdiwgcGFyc2VkPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWFwcGxpY2F0aW9uLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylTTVBURTMzNk08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdnBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwa2x2cGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBLbHZQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBLbHZQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBLbHZQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdnBheS5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5ydHBrbHZkZXBheTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMXNkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMXNkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDFmMDU3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwbXAxc2RlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheS5odG1sIiB0aXRsZT0icnRwTDI0cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRkZXBheS5odG1sIiB0aXRsZT0icnRwbXAydGRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwTDI0cGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMXNkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBtcDFzZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cG1wMXNkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBNUDFTRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkuaHRtbCNHc3RSdHBNUDFTRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QMVNEZXBheSI+R3N0UnRwTVAxU0RlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVAxU0RlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMXNkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3Ni42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTc2LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylvdGhlciwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVAxUzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUDFTPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby9tcGVnLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QMVNEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QMVNEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cE1QMVNEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDBhMDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcDJ0ZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDFzZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5odG1sIiB0aXRsZT0icnRwbXAydHBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAxc2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwbXAydGRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBtcDJ0ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRkZXBheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwjR3N0UnRwTVAyVERlcGF5LS1za2lwLWZpcnN0LWJ5dGVzIiB0aXRsZT0iVGhlIOKAnHNraXAtZmlyc3QtYnl0ZXPigJ0gcHJvcGVydHkiPnNraXAtZmlyc3QtYnl0ZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBNUDJURGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkuaHRtbCNHc3RSdHBNUDJURGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QMlREZXBheSI+R3N0UnRwTVAyVERlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVAyVERlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3Ny43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDssIFRoaWpzIFZlcm1laXIgJmx0O3RoaWpzLnZlcm1laXJAYmFyY28uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xNzcuNy4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZyl7IE1QMlQsIE1QMlQtRVMgfTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzMsIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZ3RzLCBwYWNrZXRzaXplPShpbnQpMTg4LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QMlREZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QMlREZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cE1QMlREZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBNUDJURGVwYXktLXNraXAtZmlyc3QtYnl0ZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxza2lwLWZpcnN0LWJ5dGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxza2lwLWZpcnN0LWJ5dGVz4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIHNraXBwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF5bG9hZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5MDJiMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcDJ0cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRkZXBheS5odG1sIiB0aXRsZT0icnRwbXAydGRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5odG1sIiB0aXRsZT0icnRwbXA0YWRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0cGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDJ0cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwbXAydHBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXAydHBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBNUDJUUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkuaHRtbCNHc3RSVFBNUDJUUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBNUDJUUGF5Ij5Hc3RSVFBNUDJUUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUUE1QMlRQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3OC42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3OC42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZ3RzLCBwYWNrZXRzaXplPShpbnQpMTg4LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkzMywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVAyVDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QMlQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUE1QMlRQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFBNUDJUUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UlRQTVAyVFBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YWRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YWRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NjIyYmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcDRhZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5odG1sIiB0aXRsZT0icnRwbXAydHBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDRhcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydHBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YWRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cG1wNGFkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXA0YWRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cE1QNEFEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5odG1sI0dzdFJ0cE1QNEFEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwTVA0QURlcGF5Ij5Hc3RSdHBNUDRBRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBNUDRBRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YWRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTc5LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Ob2tpYSBDb3Jwb3JhdGlvbiAoY29udGFjdCAmbHQ7c3RlZmFuLmtvc3RAbm9raWEuY29tJmd0OyksIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE3OS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QNEEtTEFUTTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBmcmFtZWQ9KGJvb2xlYW4peyBmYWxzZSwgdHJ1ZSB9LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwTVA0QURlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwTVA0QURlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwTVA0QURlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDQ4ZGI3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cG1wNGFwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YWRlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDRhZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDRnZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBtcDRhcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBtcDRhcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cE1QNEFQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5odG1sI0dzdFJ0cE1QNEFQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QNEFQYXkiPkdzdFJ0cE1QNEFQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVA0QVBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTgwLjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTgwLjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXc8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QNEEtTEFUTTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0YXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwTVA0QVBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QNEFQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBNUDRBUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIyNGU1Yy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cG1wNGdkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lmh0bWwiIHRpdGxlPSJydHBtcDRhcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkuaHRtbCIgdGl0bGU9InJ0cG1wNGdwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwbXA0Z2RlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBtcDRnZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwTVA0R0RlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5Lmh0bWwjR3N0UnRwTVA0R0RlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBNUDRHRGVwYXkiPkdzdFJ0cE1QNEdEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cE1QNEdEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODEuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE4MS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpeyB2aWRlbywgYXVkaW8sIGFwcGxpY2F0aW9uIH0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QRUc0LUdFTkVSSUMsIG1vZGU9KHN0cmluZyl7IGdlbmVyaWMsIENFTFAtY2JyLCBDRUxQLXZiciwgQUFDLWxiciwgQUFDLWhiciB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z2RlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QNEdEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QNEdEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cE1QNEdEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRhNTg1Ni4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcDRncGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdkZXBheS5odG1sIiB0aXRsZT0icnRwbXA0Z2RlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZkZXBheS5odG1sIiB0aXRsZT0icnRwbXA0dmRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRncGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRncGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwbXA0Z3BheTwvc3Bhbj48L2gyPgotPHA+cnRwbXA0Z3BheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBNUDRHUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkuaHRtbCNHc3RSdHBNUDRHUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBNUDRHUGF5Ij5Hc3RSdHBNUDRHUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cE1QNEdQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE4Mi42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE4Mi42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXc8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXsgdmlkZW8sIGF1ZGlvLCBhcHBsaWNhdGlvbiB9LCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QRUc0LUdFTkVSSUMsIHN0cmVhbXR5cGU9KHN0cmluZyl7IDQsIDUgfSwgbW9kZT0oc3RyaW5nKXsgZ2VuZXJpYywgQ0VMUC1jYnIsIENFTFAtdmJyLCBBQUMtbGJyLCBBQUMtaGJyIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGdwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QNEdQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBNUDRHUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwTVA0R1BheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YzhlMGUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcDR2ZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5odG1sIiB0aXRsZT0icnRwbXA0Z3BheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5Lmh0bWwiIHRpdGxlPSJydHBtcDR2cGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cG1wNHZkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXA0dmRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cE1QNFZEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZkZXBheS5odG1sI0dzdFJ0cE1QNFZEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwTVA0VkRlcGF5Ij5Hc3RSdHBNUDRWRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBNUDRWRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTgzLjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODMuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUDRWLUVTPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QNFZEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QNFZEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cE1QNFZEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4ZWI5YS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcDR2cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZkZXBheS5odG1sIiB0aXRsZT0icnRwbXA0dmRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcGFkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwbXA0dnBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXA0dnBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5odG1sI0dzdFJ0cE1QNFZQYXktLWNvbmZpZy1pbnRlcnZhbCIgdGl0bGU9IlRoZSDigJxjb25maWctaW50ZXJ2YWzigJ0gcHJvcGVydHkiPmNvbmZpZy1pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cE1QNFZQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5odG1sI0dzdFJ0cE1QNFZQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QNFZQYXkiPkdzdFJ0cE1QNFZQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVA0VlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTg0LjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTg0LjcuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZGl2eDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVA0Vi1FUzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dnBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwTVA0VlBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QNFZQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBNUDRWUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBNUDRWUGF5LS1jb25maWctaW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb25maWctaW50ZXJ2YWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBDb25maWcgSW5zZXJ0aW9uIEludGVydmFsIGluIHNlY29uZHMgKGNvbmZpZ3VyYXRpb24gaGVhZGVycyB3aWxsIGJlIG11bHRpcGxleGVkIGluIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRldGVjdGVkLikgKDAgPSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAzNjAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTM0MDU1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcGFkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDR2cGF5Lmh0bWwiIHRpdGxlPSJydHBtcDR2cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXBheS5odG1sIiB0aXRsZT0icnRwbXBhcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBtcGFkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXBhZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwTVBBRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lmh0bWwjR3N0UnRwTVBBRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QQURlcGF5Ij5Hc3RSdHBNUEFEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVBBRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODUuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE4NS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkxNCwgY2xvY2stcmF0ZT0oaW50KTkwMDAwPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUEEsIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QQURlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwTVBBRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBNUEFEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNDQ0YzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcGFwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG1wYWRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXJvYnVzdGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBtcGFyb2J1c3RkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cG1wYXBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXBhcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cE1QQVBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXBheS5odG1sI0dzdFJ0cE1QQVBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwTVBBUGF5Ij5Hc3RSdHBNUEFQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBNUEFQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTg2LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTg2LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpMTQsIGNsb2NrLXJhdGU9KGludCk5MDAwMDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QQTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QQVBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE1QQVBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cE1QQVBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWU1YWJkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcGFyb2J1c3RkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFwYXkuaHRtbCIgdGl0bGU9InJ0cG1wYXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZkZXBheS5odG1sIiB0aXRsZT0icnRwbXB2ZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXJvYnVzdGRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBtcGFyb2J1c3RkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXBhcm9idXN0ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwTVBBUm9idXN0RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXJvYnVzdGRlcGF5Lmh0bWwjR3N0UnRwTVBBUm9idXN0RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QQVJvYnVzdERlcGF5Ij5Hc3RSdHBNUEFSb2J1c3REZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXJvYnVzdGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVBBUm9idXN0RGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODcuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPk1hcmsgTmF1d2VsYWVydHMgJmx0O21hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODcuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUEEtUk9CVVNUPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgWC1NUDMtRFJBRlQtMDAsIFgtTVAzLURSQUZULTAxLCBYLU1QMy1EUkFGVC0wMiwgWC1NUDMtRFJBRlQtMDMsIFgtTVAzLURSQUZULTA0LCBYLU1QMy1EUkFGVC0wNSwgWC1NUDMtRFJBRlQtMDYgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cE1QQVJvYnVzdERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwTVBBUm9idXN0RGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBNUEFSb2J1c3REZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmY4MWQxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBtcHZkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcGFyb2J1c3RkZXBheS5odG1sIiB0aXRsZT0icnRwbXBhcm9idXN0ZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2cGF5Lmh0bWwiIHRpdGxlPSJydHBtcHZwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdmRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcm9idXN0ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBtcHZkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwbXB2ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwTVBWRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdmRlcGF5Lmh0bWwjR3N0UnRwTVBWRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cE1QVkRlcGF5Ij5Hc3RSdHBNUFZEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdmRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwTVBWRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODguNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE4OC42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QVjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzIsIGNsb2NrLXJhdGU9KGludCk5MDAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkyLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdmRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwTVBWRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBNUFZEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cE1QVkRlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFmZjc0OS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2cGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cG1wdnBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZkZXBheS5odG1sIiB0aXRsZT0icnRwbXB2ZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwiIHRpdGxlPSJydHBtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdnBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwbXB2cGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBtcHZwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UlRQTVBWUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdnBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2cGF5Lmh0bWwjR3N0UlRQTVBWUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBNUFZQYXkiPkdzdFJUUE1QVlBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdnBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUUE1QVlBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODkuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlRoaWpzIFZlcm1laXIgJmx0O3RoaWpzdmVybWVpckBnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xODkuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMiwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KTMyLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUFY8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUFY8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdnBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2cGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBNUFZQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFBNUFZQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBNUFZQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzIwMjdmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwbXV4OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wdnBheS5odG1sIiB0aXRsZT0icnRwbXB2cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5odG1sIiB0aXRsZT0icnRwb3B1c2RlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC50b3Bfb2ZfcGFnZSI+PC9hPnJ0cG11eDwvc3Bhbj48L2gyPgotPHA+cnRwbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXgucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwjR3N0UlRQTXV4LS1zZXFudW0iIHRpdGxlPSJUaGUg4oCcc2VxbnVt4oCdIHByb3BlcnR5Ij5zZXFudW08L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCNHc3RSVFBNdXgtLXNlcW51bS1vZmZzZXQiIHRpdGxlPSJUaGUg4oCcc2VxbnVtLW9mZnNldOKAnSBwcm9wZXJ0eSI+c2VxbnVtLW9mZnNldDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCNHc3RSVFBNdXgtLXNzcmMiIHRpdGxlPSJUaGUg4oCcc3NyY+KAnSBwcm9wZXJ0eSI+c3NyYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwjR3N0UlRQTXV4LS10aW1lc3RhbXAtb2Zmc2V0IiB0aXRsZT0iVGhlIOKAnHRpbWVzdGFtcC1vZmZzZXTigJ0gcHJvcGVydHkiPnRpbWVzdGFtcC1vZmZzZXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJUUE11eCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXgub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sI0dzdFJUUE11eC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UlRQTXV4Ij5Hc3RSVFBNdXg8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUUE11eAotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZtdXguaHRtbCNHc3RSVFBEVE1GTXV4Ij5Hc3RSVFBEVE1GTXV4PC9hPgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIHJ0cCBtdXhlciB0YWtlcyBtdWx0aXBsZSBSVFAgc3RyZWFtcyBoYXZpbmcgdGhlIHNhbWUgY2xvY2stcmF0ZSBhbmQKLW11eGVzIGludG8gYSBzaW5nbGUgc3RyZWFtIHdpdGggYSBzaW5nbGUgU1NSQy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTkwLjcuMyI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTY8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gcnRwbXV4IG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5tdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgaG9zdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyNy4wLjAuMTwvc3Bhbj4gcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjg4ODg8L3NwYW4+ICAgICAgICBcCi0gICAgICAgICAgICAgYWxzYXNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxhd2VuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwcGNtYXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgYXBwbGljYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj54PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cnRwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHBheWxvYWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj44PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiByYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+ODAwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNpbmtfMCAgICBcCi0gICAgICAgICAgICAgYXVkaW90ZXN0c3JjIGlzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGl2ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIG11bGF3ZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBwY211cGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICBhcHBsaWNhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5ydHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gcGF5bG9hZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHJhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj44MDAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2lua18xPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi1JbiB0aGlzIGV4YW1wbGUsIGFuIGF1ZGlvIHN0cmVhbSBpcyBjYXB0dXJlZCBmcm9tIEFMU0EgYW5kIGFub3RoZXIgaXMKLWdlbmVyYXRlZCwgYm90aCBhcmUgZW5jb2RlZCBpbnRvIGRpZmZlcmVudCBwYXlsb2FkIHR5cGVzIGFuZCBtdXhlZCB0b2dldGhlcgotc28gdGhleSBjYW4gYmUgc2VudCBvbiB0aGUgc2FtZSBwb3J0LgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5MC43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sI3BsdWdpbi1ydHBtYW5hZ2VyIj5ydHBtYW5hZ2VyPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+WmVlc2hhbiBBbGkgJmx0O2ZpcnN0Lmxhc3RAbm9raWEuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9NdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTAuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBNdXgtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFBNdXg8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBNdXg7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwjR3N0UlRQTXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRQTXV4PC9zcGFuPjwvYT4gc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBNdXgtLXNlcW51bSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlcW51beKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2VxbnVt4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgUlRQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0LjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQTXV4LS1zZXFudW0tb2Zmc2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2VxbnVtLW9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2VxbnVtLW9mZnNldOKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+T2Zmc2V0IHRvIGFkZCB0byBhbGwgb3V0Z29pbmcgc2VxbnVtICgtMSA9IHJhbmRvbSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogLTE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUE11eC0tc3NyYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNzcmPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNzcmPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIFNTUkMgb2YgdGhlIHBhY2tldHMgKGRlZmF1bHQgPT0gcmFuZG9tKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDI5NDk2NzI5NTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQTXV4LS10aW1lc3RhbXAtb2Zmc2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGltZXN0YW1wLW9mZnNldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGltZXN0YW1wLW9mZnNldOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+T2Zmc2V0IHRvIGFkZCB0byBhbGwgb3V0Z29pbmcgdGltZXN0YW1wcyAoLTEgPSByYW5kb20pLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwZHRtZm11eDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODdhMDk4Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwb3B1c2RlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG11eC5odG1sIiB0aXRsZT0icnRwbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkuaHRtbCIgdGl0bGU9InJ0cG9wdXNwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBvcHVzZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cG9wdXNkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSVFBPcHVzRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c2RlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbCNHc3RSVFBPcHVzRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJUUE9wdXNEZXBheSI+R3N0UlRQT3B1c0RlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c2RlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQT3B1c0RlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5MS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhICZsdDtkYW5pbG8uY2VzYXJAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTEuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk0ODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgT1BVUywgWC1HU1QtT1BVUy1EUkFGVC1TUElUVEtBLTAwIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtb3B1cywgY2hhbm5lbC1tYXBwaW5nLWZhbWlseT0oaW50KTA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c2RlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBPcHVzRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFBPcHVzRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBPcHVzRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDcxZTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwb3B1c3BheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzZGVwYXkuaHRtbCIgdGl0bGU9InJ0cG9wdXNkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHBjbWFkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cG9wdXNwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cG9wdXNwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwT1BVU1BheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lmh0bWwjR3N0UnRwT1BVU1BheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwT1BVU1BheSI+R3N0UnRwT1BVU1BheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBPUFVTUGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTIuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkRhbmlsbyBDZXNhciBMZW1lcyBkZSBQYXVsYSAmbHQ7ZGFuaWxvLmNlc2FyQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5Mi42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1vcHVzLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCBjaGFubmVsLW1hcHBpbmctZmFtaWx5PShpbnQpMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTQ4MDAwLCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykyLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpeyBPUFVTLCBYLUdTVC1PUFVTLURSQUZULVNQSVRUS0EtMDAgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwb3B1c3BheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwT1BVU1BheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cE9QVVNQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBPUFVTUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk4MmE3OS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHBjbWFkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lmh0bWwiIHRpdGxlPSJydHBvcHVzcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkuaHRtbCIgdGl0bGU9InJ0cHBjbWFwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwcGNtYWRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBwY21hZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwUGNtYURlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5Lmh0bWwjR3N0UnRwUGNtYURlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBQY21hRGVwYXkiPkdzdFJ0cFBjbWFEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFBjbWFEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTMuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkVkZ2FyZCBMaW1hICZsdDtlZGdhcmQubGltYUBpbmR0Lm9yZy5iciZndDssIFplZXNoYW4gQWxpICZsdDt6ZWVuaXhAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTMuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpOCwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNQTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1hbGF3LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYWRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFBjbWFEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFBjbWFEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFBjbWFEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlYzk3YS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBwY21hcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFkZXBheS5odG1sIiB0aXRsZT0icnRwcGNtYWRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5odG1sIiB0aXRsZT0icnRwcGNtdWRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwcGNtYXBheTwvc3Bhbj48L2gyPgotPHA+cnRwcGNtYXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBQY21hUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkuaHRtbCNHc3RSdHBQY21hUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBQY21hUGF5Ij5Hc3RSdHBQY21hUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VBdWRpb1BheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlQXVkaW9QYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwUGNtYVBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTk0LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FZGdhcmQgTGltYSAmbHQ7ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnImZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTQuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtYWxhdywgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCk4LCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVBDTUE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylQQ01BPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBQY21hUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwUGNtYVBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFBjbWFQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzA3MTdkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211ZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwcGNtdWRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkuaHRtbCIgdGl0bGU9InJ0cHBjbWFwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5odG1sIiB0aXRsZT0icnRwcGNtdXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbWFwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBwY211ZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cHBjbXVkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBQY211RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211ZGVwYXkuaHRtbCNHc3RSdHBQY211RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFBjbXVEZXBheSI+R3N0UnRwUGNtdURlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwUGNtdURlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5NS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RWRnYXJkIExpbWEgJmx0O2VkZ2FyZC5saW1hQGluZHQub3JnLmJyJmd0OywgWmVlc2hhbiBBbGkgJmx0O3plZW5peEBnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5NS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkwLCBjbG9jay1yYXRlPShpbnQpODAwMDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNVSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LW11bGF3LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFBjbXVEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFBjbXVEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFBjbXVEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxZmI0OC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBwY211cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5odG1sIiB0aXRsZT0icnRwcGNtdWRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCIgdGl0bGU9InJ0cHB0ZGVtdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwcGNtdXBheTwvc3Bhbj48L2gyPgotPHA+cnRwcGNtdXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBQY211UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVwYXkuaHRtbCNHc3RSdHBQY211UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBQY211UGF5Ij5Hc3RSdHBQY211UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VBdWRpb1BheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlQXVkaW9QYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwUGNtdVBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTk2LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FZGdhcmQgTGltYSAmbHQ7ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnImZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTYuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtbXVsYXcsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpMCwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylQQ01VPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNVTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUGNtdVBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFBjbXVQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBQY211UGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjExN2U3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHB0ZGVtdXg6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdXBheS5odG1sIiB0aXRsZT0icnRwcGNtdXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBxY2VscGRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY211cGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWNlbHBkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5ydHBwdGRlbXV4PC9zcGFuPjwvaDI+Ci08cD5ydHBwdGRlbXV4PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4LnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LWNsZWFyLXB0LW1hcCIgdGl0bGU9IlRoZSDigJxjbGVhci1wdC1tYXDigJ0gc2lnbmFsIj5jbGVhci1wdC1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtQUNUSU9OOkNBUFMiPkFjdGlvbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwjR3N0UnRwUHREZW11eC1uZXctcGF5bG9hZC10eXBlIiB0aXRsZT0iVGhlIOKAnG5ldy1wYXlsb2FkLXR5cGXigJ0gc2lnbmFsIj5uZXctcGF5bG9hZC10eXBlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LXBheWxvYWQtdHlwZS1jaGFuZ2UiIHRpdGxlPSJUaGUg4oCccGF5bG9hZC10eXBlLWNoYW5nZeKAnSBzaWduYWwiPnBheWxvYWQtdHlwZS1jaGFuZ2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LXJlcXVlc3QtcHQtbWFwIiB0aXRsZT0iVGhlIOKAnHJlcXVlc3QtcHQtbWFw4oCdIHNpZ25hbCI+cmVxdWVzdC1wdC1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UnRwUHREZW11eCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwjR3N0UnRwUHREZW11eC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwUHREZW11eCI+R3N0UnRwUHREZW11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFB0RGVtdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5ydHBwdGRlbXV4IGFjdHMgYXMgYSBkZW11eGVyIGZvciBSVFAgcGFja2V0cyBiYXNlZCBvbiB0aGUgcGF5bG9hZCB0eXBlIG9mCi10aGUgcGFja2V0cy4gSXRzIG1haW4gcHVycG9zZSBpcyB0byBhbGxvdyBhbiBhcHBsaWNhdGlvbiB0byBlYXNpbHkgcmVjZWl2ZQotYW5kIGRlY29kZSBhbiBSVFAgc3RyZWFtIHdpdGggbXVsdGlwbGUgcGF5bG9hZCB0eXBlcy48L3A+Ci08cD5Gb3IgZWFjaCBwYXlsb2FkIHR5cGUgdGhhdCBpcyBkZXRlY3RlZCwgYSBuZXcgcGFkIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LW5ldy1wYXlsb2FkLXR5cGUiIHRpdGxlPSJUaGUg4oCcbmV3LXBheWxvYWQtdHlwZeKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxuZXctcGF5bG9hZC10eXBl4oCdPC9zcGFuPjwvYT4gc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4gV2hlbiB0aGUgcGF5bG9hZCBmb3IKLXRoZSBSVFAgc3RyZWFtIGNoYW5nZXMsIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4LXBheWxvYWQtdHlwZS1jaGFuZ2UiIHRpdGxlPSJUaGUg4oCccGF5bG9hZC10eXBlLWNoYW5nZeKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwYXlsb2FkLXR5cGUtY2hhbmdl4oCdPC9zcGFuPjwvYT4gc2lnbmFsIHdpbGwgYmUKLWVtaXR0ZWQuPC9wPgotPHA+VGhlIGVsZW1lbnQgd2lsbCB0cnkgdG8gc2V0IGNvbXBsZXRlIGFuZCB1bmlxdWUgYXBwbGljYXRpb24veC1ydHAgY2Fwcwotb24gdGhlIG91dHB1dCBwYWRzIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgtcmVxdWVzdC1wdC1tYXAiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1wdC1tYXDigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCccmVxdWVzdC1wdC1tYXDigJ08L3NwYW4+PC9hPgotc2lnbmFsLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTcuNy41Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB1ZHBzcmMgY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2FwcGxpY2F0aW9uL3gtcnRwJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwcHRkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmFrZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGFrZXMgYW4gUlRQIHN0cmVhbSBhbmQgc2VuZCB0aGUgUlRQIHBhY2tldHMgd2l0aCB0aGUgZmlyc3QgZGV0ZWN0ZWQKLXBheWxvYWQgdHlwZSB0byBmYWtlc2luaywgZGlzY2FyZGluZyB0aGUgb3RoZXIgcGF5bG9hZCB0eXBlcy4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTcuNy42LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCNwbHVnaW4tcnRwbWFuYWdlciI+cnRwbWFuYWdlcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkthaSBWZWhtYW5lbiAmbHQ7a2FpLnZlaG1hbmVuQG5va2lhLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGVtdXgvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTk3LjcuNi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIHBheWxvYWQ9KGludClbIDAsIDI1NSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBQdERlbXV4LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwUHREZW11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFB0RGVtdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUHREZW11eC1jbGVhci1wdC1tYXAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjbGVhci1wdC1tYXDigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwdGRlbXV4Lmh0bWwjR3N0UnRwUHREZW11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFB0RGVtdXg8L3NwYW4+PC9hPiAqZGVtdXgsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5UaGUgYXBwbGljYXRpb24gY2FuIGNhbGwgdGhpcyBzaWduYWwgdG8gaW5zdHJ1Y3QgdGhlIGVsZW1lbnQgdG8gZGlzY2FyZCB0aGUKLWN1cnJlbnRseSBjYWNoZWQgcGF5bG9hZCB0eXBlIG1hcC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBQdERlbXV4LWNsZWFyLXB0LW1hcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW11eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBQdERlbXV4LW5ldy1wYXlsb2FkLXR5cGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxuZXctcGF5bG9hZC10eXBl4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sI0dzdFJ0cFB0RGVtdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBQdERlbXV4PC9zcGFuPjwvYT4gKmRlbXV4LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgcHQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAgICAgICAqcGFkLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIHdoZW4gYSBuZXcgcGF5bG9hZCB0eXBlIHBhZCBoYXMgYmVlbiBjcmVhdGVkIGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5kZW11eDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFB0RGVtdXgtbmV3LXBheWxvYWQtdHlwZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW11eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBwYXlsb2FkIHR5cGU8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHBhZCB3aXRoIHRoZSBuZXcgcGF5bG9hZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUHREZW11eC1wYXlsb2FkLXR5cGUtY2hhbmdlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGF5bG9hZC10eXBlLWNoYW5nZeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwUHREZW11eDwvc3Bhbj48L2E+ICpkZW11eCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgIHB0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIHdoZW4gdGhlIHBheWxvYWQgdHlwZSBjaGFuZ2VkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFB0RGVtdXgtcGF5bG9hZC10eXBlLWNoYW5nZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW11eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBuZXcgcGF5bG9hZCB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBQdERlbXV4LXJlcXVlc3QtcHQtbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVxdWVzdC1wdC1tYXDigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwUHREZW11eDwvc3Bhbj48L2E+ICpkZW11eCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgIHB0LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+UmVxdWVzdCB0aGUgcGF5bG9hZCB0eXBlIGFzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gZm9yIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5wdDwvY29kZT48L2VtPgotLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFB0RGVtdXgtcmVxdWVzdC1wdC1tYXAucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVtdXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cHQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcGF5bG9hZCB0eXBlPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWNlbHBkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFmZWIyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHFjZWxwZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sIiB0aXRsZT0icnRwcHRkZW11eCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHFkbTJkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWNlbHBkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFjZWxwZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcHRkZW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFjZWxwZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBxY2VscGRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBxY2VscGRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cFFDRUxQRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWNlbHBkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWNlbHBkZXBheS5odG1sI0dzdFJ0cFFDRUxQRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFFDRUxQRGVwYXkiPkdzdFJ0cFFDRUxQRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwUUNFTFBEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTk4LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4xOTguNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVFDRUxQPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkxMiwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3FjZWxwLCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxY2VscGRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBRQ0VMUERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwUUNFTFBEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFFDRUxQRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmVlZTUzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwcWRtMmRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFjZWxwZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHFjZWxwZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbCIgdGl0bGU9InJ0cHJ0eHF1ZXVlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWNlbHBkZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBxZG0yZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cHFkbTJkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBRRE0yRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWRtMmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBxZG0yZGVwYXkuaHRtbCNHc3RSdHBRRE0yRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFFETTJEZXBheSI+R3N0UnRwUURNMkRlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWRtMmRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwUURNMkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjE5OS42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RWR3YXJkIEhlcnZleSAmbHQ7YmlsYm9lZEBiaWxib2VkLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMTk5LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVgtUURNPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXFkbTI8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWRtMmRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBRRE0yRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBRRE0yRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBRRE0yRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk0ZTEwNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwcnR4cXVldWU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWRtMmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBxZG0yZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5odG1sIiB0aXRsZT0icnRwcnR4cmVjZWl2ZSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcWRtMmRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHJ0eHF1ZXVlPC9zcGFuPjwvaDI+Ci08cD5ydHBydHhxdWV1ZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbCNHc3RSVFBSdHhRdWV1ZS0tbWF4LXNpemUtcGFja2V0cyIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS1wYWNrZXRz4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS1wYWNrZXRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwjR3N0UlRQUnR4UXVldWUtLW1heC1zaXplLXRpbWUiIHRpdGxlPSJUaGUg4oCcbWF4LXNpemUtdGltZeKAnSBwcm9wZXJ0eSI+bWF4LXNpemUtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UlRQUnR4UXVldWUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwjR3N0UlRQUnR4UXVldWUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJUUFJ0eFF1ZXVlIj5Hc3RSVFBSdHhRdWV1ZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBSdHhRdWV1ZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwMC43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sI3BsdWdpbi1ydHBtYW5hZ2VyIj5ydHBtYW5hZ2VyPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjAwLjcuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRQUnR4UXVldWUtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFBSdHhRdWV1ZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJUUFJ0eFF1ZXVlOzwvcHJlPgotPHA+VGhlIG9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwjR3N0UlRQUnR4UXVldWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFBSdHhRdWV1ZTwvc3Bhbj48L2E+IHN0cnVjdHVyZS48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBSdHhRdWV1ZS0tbWF4LXNpemUtcGFja2V0cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zaXplLXBhY2tldHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1zaXplLXBhY2tldHPigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QW1vdW50IG9mIHBhY2tldHMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUFJ0eFF1ZXVlLS1tYXgtc2l6ZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtdGltZeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbW91bnQgb2YgbXMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTNiNDI0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHJ0eHJlY2VpdmU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cXVldWUuaHRtbCIgdGl0bGU9InJ0cHJ0eHF1ZXVlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCIgdGl0bGU9InJ0cHJ0eHNlbmQiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHF1ZXVlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUudG9wX29mX3BhZ2UiPjwvYT5ydHBydHhyZWNlaXZlPC9zcGFuPjwvaDI+Ci08cD5ydHBydHhyZWNlaXZlPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCNHc3RSdHBSdHhSZWNlaXZlLS1udW0tcnR4LXJlcXVlc3RzIiB0aXRsZT0iVGhlIOKAnG51bS1ydHgtcmVxdWVzdHPigJ0gcHJvcGVydHkiPm51bS1ydHgtcmVxdWVzdHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCNHc3RSdHBSdHhSZWNlaXZlLS1udW0tcnR4LXBhY2tldHMiIHRpdGxlPSJUaGUg4oCcbnVtLXJ0eC1wYWNrZXRz4oCdIHByb3BlcnR5Ij5udW0tcnR4LXBhY2tldHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCNHc3RSdHBSdHhSZWNlaXZlLS1udW0tcnR4LWFzc29jLXBhY2tldHMiIHRpdGxlPSJUaGUg4oCcbnVtLXJ0eC1hc3NvYy1wYWNrZXRz4oCdIHByb3BlcnR5Ij5udW0tcnR4LWFzc29jLXBhY2tldHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwjR3N0UnRwUnR4UmVjZWl2ZS0tcGF5bG9hZC10eXBlLW1hcCIgdGl0bGU9IlRoZSDigJxwYXlsb2FkLXR5cGUtbWFw4oCdIHByb3BlcnR5Ij5wYXlsb2FkLXR5cGUtbWFwPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBSdHhSZWNlaXZlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCNHc3RSdHBSdHhSZWNlaXZlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBSdHhSZWNlaXZlIj5Hc3RSdHBSdHhSZWNlaXZlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwUnR4UmVjZWl2ZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSByZWNlaXZlciB3aWxsIGxpc3RlbiB0byB0aGUgY3VzdG9tIHJldHJhbnNtaXNzaW9uIGV2ZW50cyBmcm9tIHRoZQotZG93bnN0cmVhbSBqaXR0ZXJidWZmZXIgYW5kIHdpbGwgcmVtZW1iZXIgdGhlIFNTUkMxIG9mIHRoZSBzdHJlYW0gYW5kCi1zZXFudW0gdGhhdCB3YXMgcmVxdWVzdGVkLiBXaGVuIGl0IHNlZXMgYSBwYWNrZXQgd2l0aCBvbmUgb2YgdGhlIHN0b3JlZAotc2VxbnVtLCBpdCBhc3NvY2lhdGVzIHRoZSBTU1JDMiBvZiB0aGUgc3RyZWFtIHdpdGggdGhlIFNTUkMxIG9mIHRoZQotbWFzdGVyIHN0cmVhbS4gRnJvbSB0aGVuIGl0IGtub3dzIHRoYXQgU1NSQzIgaXMgdGhlIHJldHJhbnNtaXNzaW9uCi1zdHJlYW0gb2YgU1NSQzEuIFRoaXMgYWxnb3JpdGhtIGlzIHN0YXRlZCBpbiBSRkMgNDU4OC4gRm9yIHRoaXMKLWFsZ29yaXRobSB0byB3b3JrLCBSRkM0NTg4IGFsc28gc3RhdGVzIHRoYXQgbm8gdHdvIHBlbmRpbmcgcmV0cmFuc21pc3Npb24KLXJlcXVlc3RzIGNhbiBleGlzdCBmb3IgdGhlIHNhbWUgc2VxbnVtIGFuZCBkaWZmZXJlbnQgU1NSQ3Mgb3IgZWxzZSBpdAotd291bGQgYmUgaW1wb3NzaWJsZSB0byBhc3NvY2lhdGUgdGhlIHJldHJhbnNtaXNzaW9uIHdpdGggdGhlIG9yaWdpbmFsCi1yZXF1ZXN0ZXIgU1NSQy4KLVdoZW4gdGhlIFJUWCByZWNlaXZlciBoYXMgYXNzb2NpYXRlZCB0aGUgcmV0cmFuc21pc3Npb24gcGFja2V0cywKLWl0IGNhbiBkZXBheWxvYWQgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgc291cmNlIHBhZCBvZiB0aGUgZWxlbWVudC4KLVJUWCBpcyBTU1JDLW11bHRpcGxleGVkLiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFJ0eFNlbmQ8L3NwYW4+PC9hPjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDEuNy4zIj48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBydHBzZXNzaW9uIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5ydHBzZXNzaW9uIFwKLSAgICAgICAgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBzcGVleGVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwc3BlZXhwYXkgcHQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj45Nzwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHJ0eHNlbmQgcnR4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cGF5bG9hZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnR5cGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj45OTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IFwKLSAgICAgICAgICAgIGlkZW50aXR5IGRyb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wcm9iYWJpbGl0eTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuMTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHNlc3Npb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0cF9zaW5rIFwKLSAgICAgICAgICAgIHJ0cHNlc3Npb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0cF9zcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgaG9zdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90OzEyNy4wLjAuMSZxdW90Ozwvc3Bhbj4gcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDA8L3NwYW4+IFwKLSAgICAgICAgdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAxPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwc2Vzc2lvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRjcF9zaW5rIFwKLSAgICAgICAgcnRwc2Vzc2lvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRjcF9zcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgaG9zdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90OzEyNy4wLjAuMSZxdW90Ozwvc3Bhbj4gcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDI8L3NwYW4+IHN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZmFsc2U8L3NwYW4+IGFzeW5jPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBTZW5kIGF1ZGlvIHN0cmVhbSB0aHJvdWdoIHBvcnQgNTAwMC4gKDUwMDEgYW5kIDUwMDIgYXJlIGp1c3QgdGhlIHJ0Y3AgbGluayB3aXRoIHRoZSByZWNlaXZlcikKLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBydHBzZXNzaW9uIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5ydHBzZXNzaW9uIFwKLSAgICAgICAgdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAwPC9zcGFuPiBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXBwbGljYXRpb24veC1ydHAsbWVkaWE9KHN0cmluZylhdWRpbyxjbG9jay1yYXRlPShpbnQpNDQxMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNQRUVYLGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTEsb2N0ZXQtYWxpZ249KHN0cmluZykxJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICAgICAgICAgICAgcnRwc2Vzc2lvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRwX3NpbmsgXAotICAgICAgICAgICAgcnRwc2Vzc2lvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRwX3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwcnR4cmVjZWl2ZSBydHg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wYXlsb2FkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dHlwZXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs5OSZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGppdHRlcmJ1ZmZlciA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG88L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cmV0cmFuc21pc3Npb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHJ1ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHNwZWV4ZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IFwKLSAgICAgICAgICAgIHNwZWV4ZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3NpbmsgXAotICAgICAgICBydHBzZXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydGNwX3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdWRwc2luayBob3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7MTI3LjAuMC4xJnF1b3Q7PC9zcGFuPiBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMTwvc3Bhbj4gXAotICAgICAgICB1ZHBzcmMgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBzZXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydGNwX3Npbmsgc3luYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZha3NlIGFzeW5jPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSZWNlaXZlIGF1ZGlvIHN0cmVhbSBmcm9tIHBvcnQgNTAwMC4gKDUwMDEgYW5kIDUwMDIgYXJlIGp1c3QgdGhlIHJ0Y3AgbGluayB3aXRoIHRoZSBzZW5kZXIpCi1PbiBzZW5kZXIgc2lkZSBtYWtlIHN1cmUgdG8gdXNlIGEgZGlmZmVyZW50IHBheWxvYWQgdHlwZSBmb3IgdGhlIHN0cmVhbSBhbmQKLWl0cyBhc3NvY2lhdGVkIHJldHJhbnNtaXNzaW9uIHN0cmVhbSAoc2VlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sI0dzdFJ0cFJ0eFNlbmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBSdHhTZW5kPC9zcGFuPjwvYT4pLiBOb3RlIHRoYXQgc2V2ZXJhbCByZXRyYW5zbWlzc2lvbiBzdHJlYW1zIGNhbgotaGF2ZSB0aGUgc2FtZSBwYXlsb2FkIHR5cGUgc28gdGhpcyBpcyBub3QgZGV0ZXJtaW5pc3RpYy4gQWN0dWFsbHkgdGhlCi1ydHBydHhyZWNlaXZlciBlbGVtZW50IGRvZXMgdGhlIGFzc29jaWF0aW9uIHVzaW5nIHNlcW51bSB2YWx1ZXMuCi1PbiByZWNlaXZlciBzaWRlIHNldCBhbGwgdGhlIHJldHJhbnNtaXNzaW9uIHBheWxvYWQgdHlwZXMgKFRob3NlIGluZm9ybWF0aW9ucyBhcmUgcmV0cmlldmUKLXRocm91Z2ggU0RQKS4KLVlvdSBzaG91bGQgc3RpbGwgaGVhciBhIGNsZWFyIHNvdW5kIHdoZW4gc2V0dGluZyBkcm9wLXByb2JhYmlsaXR5IHRvIHNvbWV0aGluZyBncmVhdGVyIHRoYW4gMC4KLVRoZSBydHBqaXR0ZXJidWZmZXIgd2lsbCBnZW5lcmF0ZSBhIGN1c3RvbSB1cHN0cmVhbSBldmVudCBHc3RSVFBSZXRyYW5zbWlzc2lvblJlcXVlc3Qgd2hlbgotaXQgYXNzdW1lcyB0aGF0IG9uZSBwYWNrZXQgaXMgbWlzc2luZy4gVGhlbiB0aGlzIHJlcXVlc3QgaXMgdHJhbnNsYXRlZCB0byBhIEZCIE5BQ0sgaW4gdGhlIHJ0Y3AgbGluawotRmluYWxseSB0aGUgcnRwc2Vzc2lvbiBvZiB0aGUgc2VuZGVyIHNpZGUgcmUtY29udmVydCBpdCBpbiBhIEdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCB0aGF0IHdpbGwKLWJlIGhhbmRsZSBieSBydHBydHhzZW5kLgotV2hlbiBpbmNyZWFzaW5nIHRoaXMgdmFsdWUgaXQgbWF5IGJlIHBvc3NpYmxlIHRoYXQgZXZlbiB0aGUgcmV0cmFuc21pc3Npb24gc3RyZWFtIHdvdWxkIGJlIGRyb3BwZWQKLXNvIHRoZSByZWNlaXZlciB3aWxsIGFzayB0byByZXNlbmQgdGhlIHBhY2tldHMgYWdhaW4gYW5kIGFnYWluIHVudGlsIGl0IGFjdHVhbGx5IHJlY2VpdmUgdGhlbS4KLUlmIHRoZSB2YWx1ZSBpcyB0b28gaGlnaCB0aGUgcnRwcnR4c2VuZCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJldHJpZXZlIHRoZSBwYWNrZXQgaW4gaXRzIGxpc3Qgb2YKLXN0b3JlZCBwYWNrZXRzLiBGb3IgbGVhcm5pbmcgcHVycG9zZSB5b3UgY291bGQgdHJ5IHRvIGluY3JlYXNlIHRoZSBtYXgtc2l6ZS1wYWNrZXRzIG9yIG1heC1zaXplLXRpbWUKLXJ0cHJ0eHNlbmRlcidzIHByb3BlcnRpZXMuCi1BbHNvIG5vdGUgdGhhdCB5b3Ugc2hvdWxkIHVzZSBydHBydHhzZW5kIHRocm91Z2ggcnRwYmluIGFuZCBpdHMgc2V0LWF1eC1zZW5kIHByb3BlcnR5LiBTZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPi4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBydHBzZXNzaW9uIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5ydHBzZXNzaW9uMCBcCi0gICAgICAgIGF1ZGlvdGVzdHNyYyB3YXZlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHNwZWV4ZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBzcGVleHBheSBwdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjk3PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwcnR4c2VuZCBydHg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wYXlsb2FkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dHlwZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjk5PC9zcGFuPiBzZXFudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5vZmZzZXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICAgICAgICAgICAgaWRlbnRpdHkgZHJvcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnByb2JhYmlsaXR5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwc2Vzc2lvbjA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0cF9zaW5rIFwKLSAgICAgICAgICAgIHJ0cHNlc3Npb24wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydHBfc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rIGhvc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDsxMjcuMC4wLjEmcXVvdDs8L3NwYW4+IHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAwPC9zcGFuPiBcCi0gICAgICAgIHVkcHNyYyBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHNlc3Npb24wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydGNwX3NpbmsgXAotICAgICAgICBydHBzZXNzaW9uMDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRjcF9zcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgaG9zdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90OzEyNy4wLjAuMSZxdW90Ozwvc3Bhbj4gcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDI8L3NwYW4+IHN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZmFsc2U8L3NwYW4+IGFzeW5jPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPiBcCi0gICAgICAgICAgICAgICBydHBzZXNzaW9uIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5ydHBzZXNzaW9uMSBcCi0gICAgICAgIGF1ZGlvdGVzdHNyYyB3YXZlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHNwZWV4ZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBzcGVleHBheSBwdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjk3PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwcnR4c2VuZCBydHg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wYXlsb2FkPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dHlwZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjk5PC9zcGFuPiBzZXFudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5vZmZzZXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IFwKLSAgICAgICAgICAgIGlkZW50aXR5IGRyb3A8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5wcm9iYWJpbGl0eTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuMTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHNlc3Npb24xPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydHBfc2luayBcCi0gICAgICAgICAgICBydHBzZXNzaW9uMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRwX3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdWRwc2luayBob3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7MTI3LjAuMC4xJnF1b3Q7PC9zcGFuPiBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMDwvc3Bhbj4gXAotICAgICAgICB1ZHBzcmMgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBzZXNzaW9uMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRjcF9zaW5rIFwKLSAgICAgICAgcnRwc2Vzc2lvbjE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5zZW5kX3J0Y3Bfc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rIGhvc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDsxMjcuMC4wLjEmcXVvdDs8L3NwYW4+IHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAyPC9zcGFuPiBzeW5jPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPiBhc3luYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mYWxzZTwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gU2VuZCB0d28gYXVkaW8gc3RyZWFtcyB0byBwb3J0IDUwMDAuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQKLTUKLTYKLTcKLTg8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gcnRwc2Vzc2lvbiBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+cnRwc2Vzc2lvbgotICAgICAgICB1ZHBzcmMgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDA8L3NwYW4+IGNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKWF1ZGlvLGNsb2NrLXJhdGU9KGludCk0NDEwMCxlbmNvZGluZy1uYW1lPShzdHJpbmcpU1BFRVgsZW5jb2RpbmctcGFyYW1zPShzdHJpbmcpMSxvY3RldC1hbGlnbj0oc3RyaW5nKTEmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gICAgICAgICAgICBydHBzZXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydHBfc2luayBcCi0gICAgICAgICAgICBydHBzZXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydHBfc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBydHhyZWNlaXZlIHJ0eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnBheWxvYWQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj50eXBlczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozk5JnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwc3NyY2RlbXV4IG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5kZW11eCBcCi0gICAgICAgICAgICBkZW11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uICE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBqaXR0ZXJidWZmZXIgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJldHJhbnNtaXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRydWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBzcGVleGRlcGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBzcGVleGRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rIFwKLSAgICAgICAgICAgIGRlbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4gITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cGppdHRlcmJ1ZmZlciA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG88L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cmV0cmFuc21pc3Npb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHJ1ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHNwZWV4ZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHNwZWV4ZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3NpbmsgXAotICAgICAgICBydHBzZXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydGNwX3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ISAhPC9zcGFuPiB0ZWUgbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rIGhvc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDsxMjcuMC4wLjEmcXVvdDs8L3NwYW4+IHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAxPC9zcGFuPiB0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4gITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgaG9zdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90OzEyNy4wLjAuMSZxdW90Ozwvc3Bhbj4gcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDQ8L3NwYW4+IFwKLSAgICAgICAgdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAyPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwc2Vzc2lvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRjcF9zaW5rIHN5bmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5mYWtzZSBhc3luYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mYWxzZTwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUmVjZWl2ZSBhdWRpbyBzdHJlYW0gZnJvbSBwb3J0IDUwMDAuCi1PbiBzZW5kZXIgc2lkZSB0aGUgdHdvIHN0cmVhbXMgaGF2ZSB0aGUgc2FtZSBwYXlsb2FkIHR5cGUgZm9yIG1hc3RlciBzdHJlYW1zLCBTYW1lIGFib3V0IHJldHJhbnNtaXNzaW9uIHN0cmVhbXMuCi1UaGUgc3RyZWFtcyBhcmUgc2VudCB0byB0aGUgbmV0d29yayB0aHJvdWdoIHR3byBkaXN0aW5jdHMgc2Vzc2lvbnMuCi1CdXQgd2UgbmVlZCB0byBzZXQgYSBkaWZmZXJlbnQgc2VxbnVtLW9mZnNldCB0byBtYWtlIHN1cmUgdGhlaXIgc2VxbnVtIG5hdmlnYXRlIGF0IGEgZGlmZmVyZW50IHJhdGUgbGlrZSBpbiBjb25jcmV0ZSBjYXNlcy4KLVdlIGNvdWxkIGFsc28gY2hvb3NlIHRoZSBzYW1lIHNlcW51bSBvZmZzZXQgYnV0IHdlIHdvdWxkIHJlcXVpcmUgdG8gc2V0IGEgZGlmZmVyZW50IGluaXRpYWwgc2VxbnVtIHZhbHVlLgotVGhpcyBpcyBhbHNvIHdoeSB0aGUgcnRwcnR4cmVjZWl2ZSBjYW4gc3VjY2VlZCB0byBkbyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBtYXN0ZXIgYW5kIHJldHJhbnNtaXNzaW9uIHN0cmVhbS4KLU9uIHJlY2VpdmVyIHNpZGUgdGhlIHNhbWUgc2Vzc2lvbiBpcyB1c2VkIHRvIHJlY2VpdmUgdGhlIHR3byBzdHJlYW1zLiBTbyB0aGUgcnRwc3NyY2RlbXV4IGlzIGhlcmUgdG8gZGVtdWx0aXBsZXgKLXRob3NlIHR3byBzdHJlYW1zLiBUaGUgcnRwcnR4cmVjZWl2ZSBpcyByZXNwb25zaWJsZSBmb3IgcmVjb25zdHJ1Y3RpbmcgdGhlIG9yaWdpbmFsIHBhY2tldHMgZnJvbSB0aGUgdHdvIHJldHJhbnNtaXNzaW9uIHN0cmVhbXMuCi1Zb3UgY2FuIHBsYXkgd2l0aCB0aGUgZHJvcC1wcm9iYWJpbGl0eSB2YWx1ZSBmb3Igb25lIG9yIGJvdGggc3RyZWFtcy4KLVlvdSBzaG91bGQgaGVhciBhIGNsZWFyIHNvdW5kLiAoYWZ0ZXIgYSBmZXcgc2Vjb25kcyB0aGUgdHdvIHN0cmVhbXMgd2F2ZSBmZWVsIHN5bmNocm9uaXplZCkKLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDEuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCNwbHVnaW4tcnRwbWFuYWdlciI+cnRwbWFuYWdlcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkp1bGllbiBJc29yY2UgJmx0O2p1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDEuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4cmVjZWl2ZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUnR4UmVjZWl2ZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFJ0eFJlY2VpdmU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBSdHhSZWNlaXZlOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBSdHhSZWNlaXZlLS1udW0tcnR4LXJlcXVlc3RzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbnVtLXJ0eC1yZXF1ZXN0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnVtLXJ0eC1yZXF1ZXN0c+KAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gZXZlbnRzIHJlY2VpdmVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUnR4UmVjZWl2ZS0tbnVtLXJ0eC1wYWNrZXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbnVtLXJ0eC1wYWNrZXRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxudW0tcnR4LXBhY2tldHPigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPiBOdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gcGFja2V0cyByZWNlaXZlZC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFJ0eFJlY2VpdmUtLW51bS1ydHgtYXNzb2MtcGFja2V0cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG51bS1ydHgtYXNzb2MtcGFja2V0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnVtLXJ0eC1hc3NvYy1wYWNrZXRz4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gcGFja2V0cyBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHJldHJhbnNtaXNzaW9uIHJlcXVlc3RzLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUnR4UmVjZWl2ZS0tcGF5bG9hZC10eXBlLW1hcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBheWxvYWQtdHlwZS1tYXDigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBheWxvYWQtdHlwZS1tYXDigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5NYXAgb2Ygb3JpZ2luYWwgcGF5bG9hZCB0eXBlcyB0byB0aGVpciByZXRyYW5zbWlzc2lvbiBwYXlsb2FkIHR5cGVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwcnR4c2VuZCwgcnRwc2Vzc2lvbiwgcnRwaml0dGVyYnVmZmVyPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBlODM2NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBydHhzZW5kOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCIgdGl0bGU9InJ0cHJ0eHJlY2VpdmUiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHNiY2RlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLnRvcF9vZl9wYWdlIj48L2E+cnRwcnR4c2VuZDwvc3Bhbj48L2gyPgotPHA+cnRwcnR4c2VuZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZC0tbWF4LXNpemUtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtc2l6ZS10aW1l4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCNHc3RSdHBSdHhTZW5kLS1tYXgtc2l6ZS1wYWNrZXRzIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLXBhY2tldHPigJ0gcHJvcGVydHkiPm1heC1zaXplLXBhY2tldHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sI0dzdFJ0cFJ0eFNlbmQtLW51bS1ydHgtcmVxdWVzdHMiIHRpdGxlPSJUaGUg4oCcbnVtLXJ0eC1yZXF1ZXN0c+KAnSBwcm9wZXJ0eSI+bnVtLXJ0eC1yZXF1ZXN0czwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5odG1sI0dzdFJ0cFJ0eFNlbmQtLW51bS1ydHgtcGFja2V0cyIgdGl0bGU9IlRoZSDigJxudW0tcnR4LXBhY2tldHPigJ0gcHJvcGVydHkiPm51bS1ydHgtcGFja2V0czwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCNHc3RSdHBSdHhTZW5kLS1wYXlsb2FkLXR5cGUtbWFwIiB0aXRsZT0iVGhlIOKAnHBheWxvYWQtdHlwZS1tYXDigJ0gcHJvcGVydHkiPnBheWxvYWQtdHlwZS1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCNHc3RSdHBSdHhTZW5kLS1zc3JjLW1hcCIgdGl0bGU9IlRoZSDigJxzc3JjLW1hcOKAnSBwcm9wZXJ0eSI+c3NyYy1tYXA8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPldyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UnRwUnR4U2VuZCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwjR3N0UnRwUnR4U2VuZC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwUnR4U2VuZCI+R3N0UnRwUnR4U2VuZDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFJ0eFNlbmQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5TZWUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhyZWNlaXZlLmh0bWwjR3N0UnRwUnR4UmVjZWl2ZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFJ0eFJlY2VpdmU8L3NwYW4+PC9hPiBmb3IgZXhhbXBsZXM8L3A+Ci08cD5UaGUgcHVycG9zZSBvZiB0aGUgc2VuZGVyIFJUWCBvYmplY3QgaXMgdG8ga2VlcCBhIGhpc3Rvcnkgb2YgUlRQIHBhY2tldHMgdXAKLXRvIGEgY29uZmlndXJhYmxlIGxpbWl0IChtYXgtc2l6ZS10aW1lIG9yIG1heC1zaXplLXBhY2tldHMpLiBJdCB3aWxsIGxpc3RlbgotZm9yIHVwc3RyZWFtIGN1c3RvbSByZXRyYW5zbWlzc2lvbiBldmVudHMgKEdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCkgdGhhdAotY29tZXMgZnJvbSBkb3duc3RyZWFtICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+KS4gV2hlbiByZWNlaXZpbmcgYSByZXF1ZXN0IGl0IHdpbGwKLWxvb2sgdXAgdGhlIHJlcXVlc3RlZCBzZXFudW0gaW4gaXRzIGxpc3Qgb2Ygc3RvcmVkIHBhY2tldHMuIElmIHRoZSBwYWNrZXQKLWlzIGF2YWlsYWJsZSwgaXQgd2lsbCBjcmVhdGUgYSBSVFggcGFja2V0IGFjY29yZGluZyB0byBSRkMgNDU4OCBhbmQgc2VuZAotdGhpcyBhcyBhbiBhdXhpbGlhcnkgc3RyZWFtLiBSVFggaXMgU1NSQy1tdWx0aXBsZXhlZDwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjAyLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHBtYW5hZ2VyLmh0bWwjcGx1Z2luLXJ0cG1hbmFnZXIiPnJ0cG1hbmFnZXI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KdWxpZW4gSXNvcmNlICZsdDtqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjAyLjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcnR4c2VuZC5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUnR4U2VuZC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFJ0eFNlbmQ8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBSdHhTZW5kOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBSdHhTZW5kLS1tYXgtc2l6ZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtdGltZeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbW91bnQgb2YgbXMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBSdHhTZW5kLS1tYXgtc2l6ZS1wYWNrZXRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtcGFja2V0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtcGFja2V0c+KAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbW91bnQgb2YgcGFja2V0cyB0byBxdWV1ZSAoMCA9IHVubGltaXRlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAzMjc2NzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwUnR4U2VuZC0tbnVtLXJ0eC1yZXF1ZXN0cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG51bS1ydHgtcmVxdWVzdHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG51bS1ydHgtcmVxdWVzdHPigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIGV2ZW50cyByZWNlaXZlZC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFJ0eFNlbmQtLW51bS1ydHgtcGFja2V0cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG51bS1ydHgtcGFja2V0c+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnVtLXJ0eC1wYWNrZXRz4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD4gTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHBhY2tldHMgc2VudC48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFJ0eFNlbmQtLXBheWxvYWQtdHlwZS1tYXAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwYXlsb2FkLXR5cGUtbWFw4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwYXlsb2FkLXR5cGUtbWFw4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TWFwIG9mIG9yaWdpbmFsIHBheWxvYWQgdHlwZXMgdG8gdGhlaXIgcmV0cmFuc21pc3Npb24gcGF5bG9hZCB0eXBlcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBSdHhTZW5kLS1zc3JjLW1hcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNzcmMtbWFw4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzc3JjLW1hcOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TWFwIG9mIFNTUkNzIHRvIHRoZWlyIHJldHJhbnNtaXNzaW9uIFNTUkNzIGZvciBTU1JDLW11bHRpcGxleGVkIG1vZGUgKGRlZmF1bHQgPSByYW5kb20pLjwvcD4KLTxwPkZsYWdzOiBXcml0ZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTUwZTgzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBzYmNkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhzZW5kLmh0bWwiIHRpdGxlPSJydHBydHhzZW5kIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY3BheS5odG1sIiB0aXRsZT0icnRwc2JjcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBzYmNkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwc2JjZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwU2JjRGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lmh0bWwjR3N0UnRwU2JjRGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFNiY0RlcGF5Ij5Hc3RSdHBTYmNEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU2JjRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDMuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkFydW4gUmFnaGF2YW4gJmx0O2FydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDMuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCl7IDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylTQkM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtc2JjLCByYXRlPShpbnQpeyAxNjAwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9LCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCBtb2RlPShzdHJpbmcpeyBtb25vLCBkdWFsLCBzdGVyZW8sIGpvaW50IH0sIGJsb2Nrcz0oaW50KXsgNCwgOCwgMTIsIDE2IH0sIHN1YmJhbmRzPShpbnQpeyA0LCA4IH0sIGFsbG9jYXRpb24tbWV0aG9kPShzdHJpbmcpeyBzbnIsIGxvdWRuZXNzIH0sIGJpdHBvb2w9KGludClbIDIsIDY0IF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNkZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2JjRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBTYmNEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFNiY0RlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQxYTZkMy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHNiY3BheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNkZXBheS5odG1sIiB0aXRsZT0icnRwc2JjZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sIiB0aXRsZT0icnRwc2Vzc2lvbiI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY3BheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBzYmNwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cHNiY3BheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lmh0bWwjR3N0UnRwU0JDUGF5LS1taW4tZnJhbWVzIiB0aXRsZT0iVGhlIOKAnG1pbi1mcmFtZXPigJ0gcHJvcGVydHkiPm1pbi1mcmFtZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBTQkNQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkuaHRtbCNHc3RSdHBTQkNQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFNCQ1BheSI+R3N0UnRwU0JDUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU0JDUGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY3BheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwNC43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+VGhpYWdvIFNvdXNhIFNhbnRvcyAmbHQ7dGhpYWdvc3NAbGNjLnVmY2cuZWR1LmJyJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yazwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDQuNy4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtc2JjLCByYXRlPShpbnQpeyAxNjAwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9LCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCBjaGFubmVsLW1vZGU9KHN0cmluZyl7IG1vbm8sIGR1YWwsIHN0ZXJlbywgam9pbnQgfSwgYmxvY2tzPShpbnQpeyA0LCA4LCAxMiwgMTYgfSwgc3ViYmFuZHM9KGludCl7IDQsIDggfSwgYWxsb2NhdGlvbi1tZXRob2Q9KHN0cmluZyl7IHNuciwgbG91ZG5lc3MgfSwgYml0cG9vbD0oaW50KVsgMiwgNjQgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KXsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNCQzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNCQ1BheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFNCQ1BheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFNCQ1BheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTQkNQYXktLW1pbi1mcmFtZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtaW4tZnJhbWVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtaW4tZnJhbWVz4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NaW5pbXVtIHF1YW50aXR5IG9mIGZyYW1lcyB0byBzZW5kIGluIG9uZSBwYWNrZXQgKC0xIGZvciBtYXhpbXVtIGFsbG93ZWQgYnkgdGhlIG10dSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhNzY2NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEyMyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwc2Vzc2lvbjogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkuaHRtbCIgdGl0bGU9InJ0cHNiY3BheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzaXJlbmRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzYmNwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHNlc3Npb248L3NwYW4+PC9oMj4KLTxwPnJ0cHNlc3Npb248L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24ucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1iYW5kd2lkdGgiIHRpdGxlPSJUaGUg4oCcYmFuZHdpZHRo4oCdIHByb3BlcnR5Ij5iYW5kd2lkdGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxzcGFuIGNsYXNzPSJ0eXBlIj5SVFBTZXNzaW9uPC9zcGFuPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLWludGVybmFsLXNlc3Npb24iIHRpdGxlPSJUaGUg4oCcaW50ZXJuYWwtc2Vzc2lvbuKAnSBwcm9wZXJ0eSI+aW50ZXJuYWwtc2Vzc2lvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLW51bS1hY3RpdmUtc291cmNlcyIgdGl0bGU9IlRoZSDigJxudW0tYWN0aXZlLXNvdXJjZXPigJ0gcHJvcGVydHkiPm51bS1hY3RpdmUtc291cmNlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLW51bS1zb3VyY2VzIiB0aXRsZT0iVGhlIOKAnG51bS1zb3VyY2Vz4oCdIHByb3BlcnR5Ij5udW0tc291cmNlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1ydGNwLWZyYWN0aW9uIiB0aXRsZT0iVGhlIOKAnHJ0Y3AtZnJhY3Rpb27igJ0gcHJvcGVydHkiPnJ0Y3AtZnJhY3Rpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1zZGVzIiB0aXRsZT0iVGhlIOKAnHNkZXPigJ0gcHJvcGVydHkiPnNkZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1ydGNwLXJyLWJhbmR3aWR0aCIgdGl0bGU9IlRoZSDigJxydGNwLXJyLWJhbmR3aWR0aOKAnSBwcm9wZXJ0eSI+cnRjcC1yci1iYW5kd2lkdGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1ydGNwLXJzLWJhbmR3aWR0aCIgdGl0bGU9IlRoZSDigJxydGNwLXJzLWJhbmR3aWR0aOKAnSBwcm9wZXJ0eSI+cnRjcC1ycy1iYW5kd2lkdGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLXVzZS1waXBlbGluZS1jbG9jayIgdGl0bGU9IlRoZSDigJx1c2UtcGlwZWxpbmUtY2xvY2vigJ0gcHJvcGVydHkiPnVzZS1waXBlbGluZS1jbG9jazwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLXJ0Y3AtbWluLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnHJ0Y3AtbWluLWludGVydmFs4oCdIHByb3BlcnR5Ij5ydGNwLW1pbi1pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tcHJvYmF0aW9uIiB0aXRsZT0iVGhlIOKAnHByb2JhdGlvbuKAnSBwcm9wZXJ0eSI+cHJvYmF0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tc3RhdHMiIHRpdGxlPSJUaGUg4oCcc3RhdHPigJ0gcHJvcGVydHkiPnN0YXRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFBQcm9maWxlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLXJ0cC1wcm9maWxlIiB0aXRsZT0iVGhlIOKAnHJ0cC1wcm9maWxl4oCdIHByb3BlcnR5Ij5ydHAtcHJvZmlsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBOdHBUaW1lU291cmNlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLW50cC10aW1lLXNvdXJjZSIgdGl0bGU9IlRoZSDigJxudHAtdGltZS1zb3VyY2XigJ0gcHJvcGVydHkiPm50cC10aW1lLXNvdXJjZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi0tbWF4LWRyb3BvdXQtdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtZHJvcG91dC10aW1l4oCdIHByb3BlcnR5Ij5tYXgtZHJvcG91dC10aW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLS1tYXgtbWlzb3JkZXItdGltZSIgdGl0bGU9IlRoZSDigJxtYXgtbWlzb3JkZXItdGltZeKAnSBwcm9wZXJ0eSI+bWF4LW1pc29yZGVyLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tLXJ0Y3Atc3luYy1zZW5kLXRpbWUiIHRpdGxlPSJUaGUg4oCccnRjcC1zeW5jLXNlbmQtdGltZeKAnSBwcm9wZXJ0eSI+cnRjcC1zeW5jLXNlbmQtdGltZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tY2xlYXItcHQtbWFwIiB0aXRsZT0iVGhlIOKAnGNsZWFyLXB0LW1hcOKAnSBzaWduYWwiPmNsZWFyLXB0LW1hcDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1BQ1RJT046Q0FQUyI+QWN0aW9uPC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLWJ5ZS1zc3JjIiB0aXRsZT0iVGhlIOKAnG9uLWJ5ZS1zc3Jj4oCdIHNpZ25hbCI+b24tYnllLXNzcmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tYnllLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcb24tYnllLXRpbWVvdXTigJ0gc2lnbmFsIj5vbi1ieWUtdGltZW91dDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1vbi1uZXctc3NyYyIgdGl0bGU9IlRoZSDigJxvbi1uZXctc3NyY+KAnSBzaWduYWwiPm9uLW5ldy1zc3JjPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLXNlbmRlci10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnG9uLXNlbmRlci10aW1lb3V04oCdIHNpZ25hbCI+b24tc2VuZGVyLXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc3NyYy1hY3RpdmUiIHRpdGxlPSJUaGUg4oCcb24tc3NyYy1hY3RpdmXigJ0gc2lnbmFsIj5vbi1zc3JjLWFjdGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1vbi1zc3JjLWNvbGxpc2lvbiIgdGl0bGU9IlRoZSDigJxvbi1zc3JjLWNvbGxpc2lvbuKAnSBzaWduYWwiPm9uLXNzcmMtY29sbGlzaW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLXNzcmMtc2RlcyIgdGl0bGU9IlRoZSDigJxvbi1zc3JjLXNkZXPigJ0gc2lnbmFsIj5vbi1zc3JjLXNkZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc3NyYy12YWxpZGF0ZWQiIHRpdGxlPSJUaGUg4oCcb24tc3NyYy12YWxpZGF0ZWTigJ0gc2lnbmFsIj5vbi1zc3JjLXZhbGlkYXRlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1vbi10aW1lb3V0IiB0aXRsZT0iVGhlIOKAnG9uLXRpbWVvdXTigJ0gc2lnbmFsIj5vbi10aW1lb3V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPkdzdENhcHM8L3NwYW4+PC9hPio8L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1yZXF1ZXN0LXB0LW1hcCIgdGl0bGU9IlRoZSDigJxyZXF1ZXN0LXB0LW1hcOKAnSBzaWduYWwiPnJlcXVlc3QtcHQtbWFwPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLW9uLW5ldy1zZW5kZXItc3NyYyIgdGl0bGU9IlRoZSDigJxvbi1uZXctc2VuZGVyLXNzcmPigJ0gc2lnbmFsIj5vbi1uZXctc2VuZGVyLXNzcmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24tb24tc2VuZGVyLXNzcmMtYWN0aXZlIiB0aXRsZT0iVGhlIOKAnG9uLXNlbmRlci1zc3JjLWFjdGl2ZeKAnSBzaWduYWwiPm9uLXNlbmRlci1zc3JjLWFjdGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBTZXNzaW9uIj5Hc3RSdHBTZXNzaW9uPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU2Vzc2lvbgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBSVFAgc2Vzc2lvbiBtYW5hZ2VyIG1vZGVscyBwYXJ0aWNpcGFudHMgd2l0aCB1bmlxdWUgU1NSQyBpbiBhbiBSVFAKLXNlc3Npb24uIFRoaXMgc2Vzc2lvbiBjYW4gYmUgdXNlZCB0byBzZW5kIGFuZCByZWNlaXZlIFJUUCBhbmQgUlRDUCBwYWNrZXRzLgotQmFzZWQgb24gd2hhdCBSRVFVRVNUIHBhZHMgYXJlIHJlcXVlc3RlZCBmcm9tIHRoZSBzZXNzaW9uIG1hbmFnZXIsIHNwZWNpZmljCi1mdW5jdGlvbmFsaXR5IGNhbiBiZSBhY3RpdmF0ZWQuPC9wPgotPHA+VGhlIHNlc3Npb24gbWFuYWdlciBjdXJyZW50bHkgaW1wbGVtZW50cyBSRkMgMzU1MCBpbmNsdWRpbmc6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlJUUCBwYWNrZXQgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb25zZWN1dGl2ZSBzZXF1ZW5jZSBudW1iZXJzLjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+TWFpbnRhaW5hbmNlIG9mIHRoZSBTU1JDIHBhcnRpY2lwYW50IGRhdGFiYXNlLjwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+S2VlcGluZyBwZXIgcGFydGljaXBhbnQgc3RhdGlzdGljcyBiYXNlZCBvbiByZWNlaXZlZCBSVENQIHBhY2tldHMuPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD5TY2hlZHVsaW5nIG9mIFJSL1NSIFJUQ1AgcGFja2V0cy48L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPlN1cHBvcnQgZm9yIG11bHRpcGxlIHNlbmRlciBTU1JDLjwvcD48L2xpPgotPC91bD48L2Rpdj4KLTxwPlRoZSBydHBzZXNzaW9uIHdpbGwgbm90IGRlbXV4IHBhY2tldHMgYmFzZWQgb24gU1NSQyBvciBwYXlsb2FkIHR5cGUsIG5vciB3aWxsCi1pdCBjb3JyZWN0IGZvciBwYWNrZXQgcmVvcmRlcmluZyBhbmQgaml0dGVyLiBVc2UgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cHNTcmNEZW11eDwvc3Bhbj4sCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCNHc3RSdHBQdERlbXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwUHREZW11eDwvc3Bhbj48L2E+IGFuZCBHc3RSdHBKaXR0ZXJCdWZmZXIgaW4gYWRkaXRpb24gdG8gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNlc3Npb248L3NwYW4+PC9hPiB0bwotcGVyZm9ybSB0aGVzZSB0YXNrcy4gSXQgaXMgdXN1YWxseSBhIGdvb2QgaWRlYSB0byB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCNHc3RSdHBCaW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBCaW48L3NwYW4+PC9hPiwgd2hpY2gKLWNvbWJpbmVzIGFsbCB0aGVzZSBmZWF0dXJlcyBpbiBvbmUgZWxlbWVudC48L3A+Ci08cD5UbyB1c2UgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNlc3Npb248L3NwYW4+PC9hPiBhcyBhbiBSVFAgcmVjZWl2ZXIsIHJlcXVlc3QgYSByZWN2X3J0cF9zaW5rIHBhZCwgd2hpY2ggd2lsbAotYXV0b21hdGljYWxseSBjcmVhdGUgcmVjdl9ydHBfc3JjIHBhZC4gRGF0YSByZWNlaXZlZCBvbiB0aGUgcmVjdl9ydHBfc2luayBwYWQKLXdpbGwgYmUgcHJvY2Vzc2VkIGluIHRoZSBzZXNzaW9uIGFuZCBhZnRlciBiZWluZyB2YWxpZGF0ZWQgZm9yd2FyZGVkIG9uIHRoZQotcmVjdl9ydHBfc3JjIHBhZC48L3A+Ci08cD5UbyBhbHNvIHVzZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+IGFzIGFuIFJUQ1AgcmVjZWl2ZXIsIHJlcXVlc3QgYSByZWN2X3J0Y3Bfc2luayBwYWQsCi13aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc3luY19zcmMgcGFkLiBQYWNrZXRzIHJlY2VpdmVkIG9uIHRoZSBSVENQCi1wYWQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gdXBkYXRlIHRoZSBzdGF0cyBhbmQgZGF0YWJhc2Ugb2YKLXRoZSBvdGhlciBwYXJ0aWNpcGFudHMuIFNSIHBhY2tldHMgd2lsbCBiZSBmb3J3YXJkZWQgb24gdGhlIHN5bmNfc3JjIHBhZAotc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gaW50ZXItc3RyZWFtIHN5bmNocm9uaXNhdGlvbiB3aGVuIG5lZWRlZC48L3A+Ci08cD5JZiB5b3Ugd2FudCB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHRvIGdlbmVyYXRlIGFuZCBzZW5kIFJUQ1AgcGFja2V0cywgcmVxdWVzdAotdGhlIHNlbmRfcnRjcF9zcmMgcGFkLiBQYWNrZXQgcHVzaGVkIG9uIHRoaXMgcGFkIGNvbnRhaW4gU1IvUlIgUlRDUCByZXBvcnRzCi10aGF0IHNob3VsZCBiZSBzZW50IHRvIGFsbCBwYXJ0aWNpcGFudHMgaW4gdGhlIHNlc3Npb24uPC9wPgotPHA+VG8gdXNlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gYXMgYSBzZW5kZXIsIHJlcXVlc3QgYSBzZW5kX3J0cF9zaW5rIHBhZCwgd2hpY2ggd2lsbAotYXV0b21hdGljYWxseSBjcmVhdGUgYSBzZW5kX3J0cF9zcmMgcGFkLiBUaGUgc2Vzc2lvbiBtYW5hZ2VyIHdpbGwKLWZvcndhcmQgdGhlIHBhY2tldHMgb24gdGhlIHNlbmRfcnRwX3NyYyBwYWQgYWZ0ZXIgdXBkYXRpbmcgaXRzIGludGVybmFsIHN0YXRlLjwvcD4KLTxwPlRoZSBzZXNzaW9uIG1hbmFnZXIgbmVlZHMgdGhlIGNsb2NrLXJhdGUgb2YgdGhlIHBheWxvYWQgdHlwZXMgaXQgaXMgaGFuZGxpbmcKLWFuZCB3aWxsIHNpZ25hbCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1yZXF1ZXN0LXB0LW1hcCIgdGl0bGU9IlRoZSDigJxyZXF1ZXN0LXB0LW1hcOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxyZXF1ZXN0LXB0LW1hcOKAnTwvc3Bhbj48L2E+IHNpZ25hbCB3aGVuIGl0IG5lZWRzIHN1Y2ggYQotbWFwcGluZy4gT25lIGNhbiBjbGVhciB0aGUgY2FjaGVkIHZhbHVlcyB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uLWNsZWFyLXB0LW1hcCIgdGl0bGU9IlRoZSDigJxjbGVhci1wdC1tYXDigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcY2xlYXItcHQtbWFw4oCdPC9zcGFuPjwvYT4KLXNpZ25hbC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjA1LjguMTEiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHVkcHNyYyBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMDwvc3Bhbj4gY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2FwcGxpY2F0aW9uL3gtcnRwLCAuLi4mcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hIC48L3NwYW4+cmVjdl9ydHBfc2luayBydHBzZXNzaW9uIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRwX3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwdGhlb3JhZGVwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHRoZW9yYWRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUmVjZWl2ZSB0aGVvcmEgUlRQIHBhY2tldHMgZnJvbSBwb3J0IDUwMDAgYW5kIHNlbmQgdGhlbSB0byB0aGUgZGVwYXlsb2FkZXIsCi1kZWNvZGVyIGFuZCBkaXNwbGF5LiBOb3RlIHRoYXQgdGhlIGFwcGxpY2F0aW9uL3gtcnRwIGNhcHMgb24gdWRwc3JjIHNob3VsZCBiZQotY29uZmlndXJlZCBiYXNlZCBvbiBzb21lIG5lZ290aWF0aW9uIHByb2Nlc3Mgc3VjaCBhcyBSVFNQIGZvciB0aGlzIHBpcGVsaW5lCi10byB3b3JrIGNvcnJlY3RseS4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB1ZHBzcmMgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDA8L3NwYW4+IGNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthcHBsaWNhdGlvbi94LXJ0cCwgLi4uJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ISAuPC9zcGFuPnJlY3ZfcnRwX3NpbmsgcnRwc2Vzc2lvbiBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2Vzc2lvbiBcCi0gICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cmVjdl9ydHBfc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHB0aGVvcmFkZXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGhlb3JhZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4dmltYWdlc2luayBcCi0gICAgdWRwc3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAxPC9zcGFuPiBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXBwbGljYXRpb24veC1ydGNwJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gc2Vzc2lvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnJlY3ZfcnRjcF9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFJlY2VpdmUgdGhlb3JhIFJUUCBwYWNrZXRzIGZyb20gcG9ydCA1MDAwIGFuZCBzZW5kIHRoZW0gdG8gdGhlIGRlcGF5bG9hZGVyLAotZGVjb2RlciBhbmQgZGlzcGxheS4gUmVjZWl2ZSBSVENQIHBhY2tldHMgZnJvbSBwb3J0IDUwMDEgYW5kIHByb2Nlc3MgdGhlbSBpbgotdGhlIHNlc3Npb24gbWFuYWdlci4KLU5vdGUgdGhhdCB0aGUgYXBwbGljYXRpb24veC1ydHAgY2FwcyBvbiB1ZHBzcmMgc2hvdWxkIGJlCi1jb25maWd1cmVkIGJhc2VkIG9uIHNvbWUgbmVnb3RpYXRpb24gcHJvY2VzcyBzdWNoIGFzIFJUU1AgZm9yIHRoaXMgcGlwZWxpbmUKLXRvIHdvcmsgY29ycmVjdGx5LgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGhlb3JhZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHB0aGVvcmFwYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiEgLjwvc3Bhbj5zZW5kX3J0cF9zaW5rIHJ0cHNlc3Npb24gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydHBfc3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDAwPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBTZW5kIHRoZW9yYSBSVFAgcGFja2V0cyB0aHJvdWdoIHRoZSBzZXNzaW9uIG1hbmFnZXIgYW5kIG91dCBvbiBVRFAgcG9ydAotNTAwMC4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMjwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHRoZW9yYWVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwdGhlb3JhcGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hIC48L3NwYW4+c2VuZF9ydHBfc2luayBydHBzZXNzaW9uIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zZXNzaW9uIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnNlbmRfcnRwX3NyYyBcCi0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHVkcHNpbmsgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjUwMDA8L3NwYW4+ICBzZXNzaW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+c2VuZF9ydGNwX3NyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdWRwc2luayBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwMTwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gU2VuZCB0aGVvcmEgUlRQIHBhY2tldHMgdGhyb3VnaCB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGFuZCBvdXQgb24gVURQIHBvcnQKLTUwMDAuIFNlbmQgUlRDUCBwYWNrZXRzIG9uIHBvcnQgNTAwMS4gTm90ZSB0aGF0IHRoaXMgcGlwZWxpbmUgd2lsbCBub3QgcHJlcm9sbAotY29ycmVjdGx5IGJlY2F1c2UgdGhlIHNlY29uZCB1ZHBzaW5rIHdpbGwgbm90IHByZXJvbGwgY29ycmVjdGx5IChubyBSVENQCi1wYWNrZXRzIGFyZSBzZW50IGluIHRoZSBQQVVTRUQgc3RhdGUpLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG1hbnVhbGx5IHNldCBhbmQKLWtlZXAgKHNlZSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LXNldC1sb2NrZWQtc3RhdGUiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSgpPC9jb2RlPjwvYT4pIHRoZSBSVENQIHVkcHNpbmsgdG8gdGhlIFBMQVlJTkcgc3RhdGUuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjA1LjguMTIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sI3BsdWdpbi1ydHBtYW5hZ2VyIj5ydHBtYW5hZ2VyPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwNS44LjEyLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZWN2X3J0Y3Bfc2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZWN2X3J0cF9zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2VuZF9ydHBfc2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlY3ZfcnRwX3NyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zZW5kX3J0cF9zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3luY19zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0Y3A8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNlbmRfcnRjcF9zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwU2Vzc2lvbjwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFNlc3Npb247PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24ucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tLWJhbmR3aWR0aCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJhbmR3aWR0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZHdpZHRo4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIGJhbmR3aWR0aCBvZiB0aGUgc2Vzc2lvbiBpbiBieXRlcyBwZXIgc2Vjb25kICgwIGZvciBhdXRvLWRpc2NvdmVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLS1pbnRlcm5hbC1zZXNzaW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaW50ZXJuYWwtc2Vzc2lvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaW50ZXJuYWwtc2Vzc2lvbuKAnSAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5SVFBTZXNzaW9uPC9zcGFuPsKgKjwvcHJlPgotPHA+VGhlIGludGVybmFsIFJUUFNlc3Npb24gb2JqZWN0LjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLS1udW0tYWN0aXZlLXNvdXJjZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxudW0tYWN0aXZlLXNvdXJjZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG51bS1hY3RpdmUtc291cmNlc+KAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG51bWJlciBvZiBhY3RpdmUgc291cmNlcyBpbiB0aGUgc2Vzc2lvbi48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tLW51bS1zb3VyY2VzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbnVtLXNvdXJjZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG51bS1zb3VyY2Vz4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIG51bWJlciBvZiBzb3VyY2VzIGluIHRoZSBzZXNzaW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi0tcnRjcC1mcmFjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJ0Y3AtZnJhY3Rpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0Y3AtZnJhY3Rpb27igJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBSVENQIGJhbmR3aWR0aCBvZiB0aGUgc2Vzc2lvbiBpbiBieXRlcyBwZXIgc2Vjb25kIChvciBhcyBhIHJlYWwgZnJhY3Rpb24gb2YgdGhlIFJUUCBiYW5kd2lkdGggaWYgJmx0OyAxLjApLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDAuMDU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tLXNkZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzZGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzZGVz4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIFNERVMgaXRlbXMgb2YgdGhpcyBzZXNzaW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tLXJ0Y3AtcnItYmFuZHdpZHRoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccnRjcC1yci1iYW5kd2lkdGjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0Y3AtcnItYmFuZHdpZHRo4oCdICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBSVENQIGJhbmR3aWR0aCB1c2VkIGZvciByZWNlaXZlcnMgaW4gYnl0ZXMgcGVyIHNlY29uZCAoLTEgPSBkZWZhdWx0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi0tcnRjcC1ycy1iYW5kd2lkdGgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydGNwLXJzLWJhbmR3aWR0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccnRjcC1ycy1iYW5kd2lkdGjigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIFJUQ1AgYmFuZHdpZHRoIHVzZWQgZm9yIHNlbmRlcnMgaW4gYnl0ZXMgcGVyIHNlY29uZCAoLTEgPSBkZWZhdWx0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi0tdXNlLXBpcGVsaW5lLWNsb2NrIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlLXBpcGVsaW5lLWNsb2Nr4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1c2UtcGlwZWxpbmUtY2xvY2vigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSB0aGUgcGlwZWxpbmUgcnVubmluZy10aW1lIHRvIHNldCB0aGUgTlRQIHRpbWUgaW4gdGhlIFJUQ1AgU1IgbWVzc2FnZXMgKERFUFJFQ0FURUQ6IFVzZSBudHAtdGltZS1zb3VyY2UgcHJvcGVydHkpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi0tcnRjcC1taW4taW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydGNwLW1pbi1pbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccnRjcC1taW4taW50ZXJ2YWzigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIFJlZ3VsYXIgUlRDUCBwYWNrZXQgKGluIG5zKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTAwMDAwMDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi0tcHJvYmF0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJvYmF0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcm9iYXRpb27igJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkNvbnNlY3V0aXZlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXJzIHRvIGFjY2VwdCB0aGUgc291cmNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAyPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLS1zdGF0cyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0YXRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzdGF0c+KAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VmFyaW91cyBzdGF0aXN0aWNzLjwvcD4KLTxwPkZsYWdzOiBSZWFkPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLS1ydHAtcHJvZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJ0cC1wcm9maWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydHAtcHJvZmlsZeKAnSAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUUFByb2ZpbGU8L3NwYW4+PC9wcmU+Ci08cD5SVFAgcHJvZmlsZSB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEdTVF9SVFBfUFJPRklMRV9BVlA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tLW50cC10aW1lLXNvdXJjZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG50cC10aW1lLXNvdXJjZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnRwLXRpbWUtc291cmNl4oCdICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBOdHBUaW1lU291cmNlPC9zcGFuPjwvcHJlPgotPHA+TlRQIHRpbWUgc291cmNlIGZvciBSVENQIHBhY2tldHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5UUCB0aW1lIGJhc2VkIG9uIHJlYWx0aW1lIGNsb2NrPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLS1tYXgtZHJvcG91dC10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LWRyb3BvdXQtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWRyb3BvdXQtdGltZeKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc3NpbmcgcGFja2V0cyB0b2xlcmF0ZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDYwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLS1tYXgtbWlzb3JkZXItdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1taXNvcmRlci10aW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtbWlzb3JkZXItdGltZeKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBtYXhpbXVtIHRpbWUgKG1pbGxpc2Vjb25kcykgb2YgbWlzb3JkZXJlZCBwYWNrZXRzIHRvbGVyYXRlZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi0tcnRjcC1zeW5jLXNlbmQtdGltZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJ0Y3Atc3luYy1zZW5kLXRpbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJ0Y3Atc3luYy1zZW5kLXRpbWXigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VXNlIHNlbmQgdGltZSBvciBjYXB0dXJlIHRpbWUgZm9yIFJUQ1Agc3luYyAoVFJVRSA9IHNlbmQgdGltZSwgRkFMU0UgPSBjYXB0dXJlIHRpbWUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tY2xlYXItcHQtbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xlYXItcHQtbWFw4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gKnNlc3MsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5DbGVhciB0aGUgY2FjaGVkIHB0LW1hcHMgcmVxdWVzdGVkIHdpdGggPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbi1yZXF1ZXN0LXB0LW1hcCIgdGl0bGU9IlRoZSDigJxyZXF1ZXN0LXB0LW1hcOKAnSBzaWduYWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxyZXF1ZXN0LXB0LW1hcOKAnTwvc3Bhbj48L2E+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tY2xlYXItcHQtbWFwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1BQ1RJT046Q0FQUyI+QWN0aW9uPC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1ieWUtc3NyYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLWJ5ZS1zc3Jj4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gKnNlc3MsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBiZWNhbWUgaW5hY3RpdmUgYmVjYXVzZSBvZiBhIEJZRSBwYWNrZXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1ieWUtc3NyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1ieWUtdGltZW91dCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLWJ5ZS10aW1lb3V04oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gKnNlc3MsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0IGJlY2F1c2Ugb2YgQllFPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1ieWUtdGltZW91dC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1uZXctc3NyYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLW5ldy1zc3Jj4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gKnNlc3MsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGEgbmV3IFNTUkMgdGhhdCBlbnRlcmVkIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZXNzaW9uPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1uZXctc3NyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1zZW5kZXItdGltZW91dCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLXNlbmRlci10aW1lb3V04oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gKnNlc3MsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGEgc2VuZGVyIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0IGFuZCBiZWNhbWUgYSByZWNlaXZlcjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tb24tc2VuZGVyLXRpbWVvdXQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2VzczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tb24tc3NyYy1hY3RpdmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1zc3JjLWFjdGl2ZeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+ICpzZXNzLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPk5vdGlmeSBvZiBhIFNTUkMgdGhhdCBpcyBhY3RpdmUsIGkuZS4sIHNlbmRpbmcgUlRDUC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLW9uLXNzcmMtYWN0aXZlLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLW9uLXNzcmMtY29sbGlzaW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tc3NyYy1jb2xsaXNpb27igJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNlc3Npb248L3NwYW4+PC9hPiAqZ3N0cnRwc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgIGFyZzEsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1zc3JjLXNkZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1zc3JjLXNkZXPigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNlc3Npb248L3NwYW4+PC9hPiAqc2Vzc2lvbiwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgIHNyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPk5vdGlmeSB0aGF0IGEgbmV3IFNERVMgd2FzIHJlY2VpdmVkIGZvciBTU1JDLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tb24tc3NyYy1zZGVzLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3Npb248L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tb24tc3NyYy12YWxpZGF0ZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1zc3JjLXZhbGlkYXRlZOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+ICpnc3RydHBzZXNzaW9uLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgYXJnMSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLW9uLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi10aW1lb3V04oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sI0dzdFJ0cFNlc3Npb24iPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTZXNzaW9uPC9zcGFuPjwvYT4gKnNlc3MsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+Tm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0PC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi10aW1lb3V0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLXJlcXVlc3QtcHQtbWFwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVxdWVzdC1wdC1tYXDigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+ICpzZXNzLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgcHQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5SZXF1ZXN0IHRoZSBwYXlsb2FkIHR5cGUgYXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPiBmb3IgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnB0PC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1yZXF1ZXN0LXB0LW1hcC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnB0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHB0PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLW9uLW5ldy1zZW5kZXItc3NyYyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG9uLW5ldy1zZW5kZXItc3NyY+KAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCNHc3RSdHBTZXNzaW9uIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU2Vzc2lvbjwvc3Bhbj48L2E+ICpzZXNzLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFNlc3Npb24tb24tbmV3LXNlbmRlci1zc3JjLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNlc3M8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZW5kZXIgU1NSQzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuODwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU2Vzc2lvbi1vbi1zZW5kZXItc3NyYy1hY3RpdmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvbi1zZW5kZXItc3NyYy1hY3RpdmXigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwjR3N0UnRwU2Vzc2lvbiI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNlc3Npb248L3NwYW4+PC9hPiAqc2VzcywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBTZXNzaW9uLW9uLXNlbmRlci1zc3JjLWFjdGl2ZS5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zZXNzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc2VuZGVyIFNTUkM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjg8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+cnRwaml0dGVyYnVmZmVyLCBydHBiaW4sIHJ0cHB0ZGVtdXgsIHJ0cHNzcmNkZW11eDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NDMxNmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwc2lyZW5kZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzZXNzaW9uLmh0bWwiIHRpdGxlPSJydHBzZXNzaW9uIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lmh0bWwiIHRpdGxlPSJydHBzaXJlbnBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5kZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2Vzc2lvbi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5kZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHNpcmVuZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cHNpcmVuZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UlRQU2lyZW5EZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lmh0bWwjR3N0UlRQU2lyZW5EZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UlRQU2lyZW5EZXBheSI+R3N0UlRQU2lyZW5EZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSVFBTaXJlbkRlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDYuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlBoaWxpcHBlIEthbGFmICZsdDtwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwNi42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCkxNjAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNJUkVOPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXNpcmVuLCBkY3QtbGVuZ3RoPShpbnQpMzIwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbmRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFBTaXJlbkRlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UlRQU2lyZW5EZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJUUFNpcmVuRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI0YWNlNy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwc2lyZW5wYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5kZXBheS5odG1sIiB0aXRsZT0icnRwc2lyZW5kZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzcGVleGRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbnBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleGRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwc2lyZW5wYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cHNpcmVucGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJUUFNpcmVuUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbnBheS5odG1sI0dzdFJUUFNpcmVuUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSVFBTaXJlblBheSI+R3N0UlRQU2lyZW5QYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbnBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VBdWRpb1BheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlQXVkaW9QYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UlRQU2lyZW5QYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDcuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPllvdW5lc3MgQWxhb3VpICZsdDtrYWthcm90b0BrYWthcm90by5ob21lbGludXgubmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjA3LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXNpcmVuLCBkY3QtbGVuZ3RoPShpbnQpMzIwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpMTYwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylTSVJFTiwgYml0cmF0ZT0oc3RyaW5nKTE2MDAwLCBkY3QtbGVuZ3RoPShpbnQpMzIwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzaXJlbnBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2lyZW5wYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUUFNpcmVuUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UlRQU2lyZW5QYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSVFBTaXJlblBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0MTY1ZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBzcGVleGRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lmh0bWwiIHRpdGxlPSJydHBzaXJlbnBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sIiB0aXRsZT0icnRwc3BlZXhwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleGRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwc3BlZXhkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwc3BlZXhkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBTUEVFWERlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuaHRtbCNHc3RSdHBTUEVFWERlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBTUEVFWERlcGF5Ij5Hc3RSdHBTUEVFWERlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFNQRUVYRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwOC42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RWRnYXJkIExpbWEgJmx0O2VkZ2FyZC5saW1hQGluZHQub3JnLmJyJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDguNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpU1BFRVg8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtc3BlZXg8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNQRUVYRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBTUEVFWERlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwU1BFRVhEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWEzMDUxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHBzcGVleHBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleGRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzcGVleGRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sIiB0aXRsZT0icnRwc3NyY2RlbXV4Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHBzcGVleHBheTwvc3Bhbj48L2gyPgotPHA+cnRwc3BlZXhwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwU1BFRVhQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4cGF5Lmh0bWwjR3N0UnRwU1BFRVhQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFNQRUVYUGF5Ij5Hc3RSdHBTUEVFWFBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4cGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU1BFRVhQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMDkuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkVkZ2FyZCBMaW1hICZsdDtlZGdhcmQubGltYUBpbmR0Lm9yZy5iciZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIwOS42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1zcGVleCwgcmF0ZT0oaW50KVsgNjAwMCwgNDgwMDAgXSwgY2hhbm5lbHM9KGludCkxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpU1BFRVgsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNwZWV4cGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU1BFRVhQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBTUEVFWFBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFNQRUVYUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJmNzM4YS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHNzcmNkZW11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sIiB0aXRsZT0icnRwc3BlZXhwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHN0cmVhbWRlcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXgub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3NpZ25hbHMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5zaWduYWxzIiBjbGFzcz0ic2hvcnRjdXQiPlNpZ25hbHM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzcGVleHBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXgudG9wX29mX3BhZ2UiPjwvYT5ydHBzc3JjZGVtdXg8L3NwYW4+PC9oMj4KLTxwPnJ0cHNzcmNkZW11eDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4LnNpZ25hbHMiPjwvYT48aDI+U2lnbmFsczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InNpZ25hbHNfcmV0dXJuIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0ic2lnbmFsc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0ic2lnbmFsc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eC1jbGVhci1zc3JjIiB0aXRsZT0iVGhlIOKAnGNsZWFyLXNzcmPigJ0gc2lnbmFsIj5jbGVhci1zc3JjPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwjR3N0UnRwU3NyY0RlbXV4LW5ldy1zc3JjLXBhZCIgdGl0bGU9IlRoZSDigJxuZXctc3NyYy1wYWTigJ0gc2lnbmFsIj5uZXctc3NyYy1wYWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwjR3N0UnRwU3NyY0RlbXV4LXJlbW92ZWQtc3NyYy1wYWQiIHRpdGxlPSJUaGUg4oCccmVtb3ZlZC1zc3JjLXBhZOKAnSBzaWduYWwiPnJlbW92ZWQtc3NyYy1wYWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UnRwU3NyY0RlbXV4Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwjR3N0UnRwU3NyY0RlbXV4LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBTc3JjRGVtdXgiPkdzdFJ0cFNzcmNEZW11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU3NyY0RlbXV4Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5ydHBzc3JjZGVtdXggYWN0cyBhcyBhIGRlbXV4ZXIgZm9yIFJUUCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBTU1JDIG9mIHRoZQotcGFja2V0cy4gSXRzIG1haW4gcHVycG9zZSBpcyB0byBhbGxvdyBhbiBhcHBsaWNhdGlvbiB0byBlYXNpbHkgcmVjZWl2ZSBhbmQKLWRlY29kZSBhbiBSVFAgc3RyZWFtIHdpdGggbXVsdGlwbGUgU1NSQ3MuPC9wPgotPHA+Rm9yIGVhY2ggU1NSQyB0aGF0IGlzIGRldGVjdGVkLCBhIG5ldyBwYWQgd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwjR3N0UnRwU3NyY0RlbXV4LW5ldy1zc3JjLXBhZCIgdGl0bGU9IlRoZSDigJxuZXctc3NyYy1wYWTigJ0gc2lnbmFsIj48c3BhbiBjbGFzcz0idHlwZSI+4oCcbmV3LXNzcmMtcGFk4oCdPC9zcGFuPjwvYT4gc2lnbmFsIHdpbGwgYmUgZW1pdHRlZC4gPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxMC43LjQiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHVkcHNyYyBjYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXBwbGljYXRpb24veC1ydHAmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHBzc3JjZGVtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZha2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRha2VzIGFuIFJUUCBzdHJlYW0gYW5kIHNlbmQgdGhlIFJUUCBwYWNrZXRzIHdpdGggdGhlIGZpcnN0IGRldGVjdGVkIFNTUkMKLXRvIGZha2VzaW5rLCBkaXNjYXJkaW5nIHRoZSBvdGhlciBTU1JDcy4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTAuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cG1hbmFnZXIuaHRtbCNwbHVnaW4tcnRwbWFuYWdlciI+cnRwbWFuYWdlcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkRlbXV4L05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxMC43LjUuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnJ0Y3Bfc2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0Y3A8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnJ0Y3Bfc3JjXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmNfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXgub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNzcmNEZW11eC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFNzcmNEZW11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFNzcmNEZW11eDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4LnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFNzcmNEZW11eC1jbGVhci1zc3JjIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xlYXItc3NyY+KAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sI0dzdFJ0cFNzcmNEZW11eCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJ0cFNzcmNEZW11eDwvc3Bhbj48L2E+ICpkZW11eCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgc3NyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+QWN0aW9uIHNpZ25hbCB0byByZW1vdmUgdGhlIHBhZCBmb3IgU1NSQy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBTc3JjRGVtdXgtY2xlYXItc3NyYy5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW11eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkMgb2YgdGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLUFDVElPTjpDQVBTIj5BY3Rpb248L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTc3JjRGVtdXgtbmV3LXNzcmMtcGFkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbmV3LXNzcmMtcGFk4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3NyY2RlbXV4Lmh0bWwjR3N0UnRwU3NyY0RlbXV4Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0UnRwU3NyY0RlbXV4PC9zcGFuPjwvYT4gKmRlbXV4LAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgICAgICBzc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFBhZC5odG1sI0dzdFBhZC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RQYWQ8L3NwYW4+PC9hPiAgICAgICAgICAqcGFkLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5FbWl0ZWQgd2hlbiBhIG5ldyBTU1JDIHBhZCBoYXMgYmVlbiBjcmVhdGVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJ0cFNzcmNEZW11eC1uZXctc3NyYy1wYWQucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZGVtdXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWw8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3NyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBTU1JDIG9mIHRoZSBwYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cGFkPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIG5ldyBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTc3JjRGVtdXgtcmVtb3ZlZC1zc3JjLXBhZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlbW92ZWQtc3NyYy1wYWTigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbCNHc3RSdHBTc3JjRGVtdXgiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSdHBTc3JjRGVtdXg8L3NwYW4+PC9hPiAqZGVtdXgsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICAgICAgIHNzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UGFkLmh0bWwjR3N0UGFkLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFBhZDwvc3Bhbj48L2E+ICAgICAgICAgICpwYWQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkVtaXRlZCB3aGVuIGEgU1NSQyBwYWQgaGFzIGJlZW4gcmVtb3ZlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSdHBTc3JjRGVtdXgtcmVtb3ZlZC1zc3JjLXBhZC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5kZW11eDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5zc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIFNTUkMgb2YgdGhlIHBhZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5wYWQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgcmVtb3ZlZCBwYWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMzcyYzYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHN0cmVhbWRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sIiB0aXRsZT0icnRwc3NyY2RlbXV4Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5odG1sIiB0aXRsZT0icnRwc3RyZWFtcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNzcmNkZW11eC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHN0cmVhbWRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBzdHJlYW1kZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBTdHJlYW1EZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtZGVwYXkuaHRtbCNHc3RSdHBTdHJlYW1EZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwU3RyZWFtRGVwYXkiPkdzdFJ0cFN0cmVhbURlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VQYXJzZS5odG1sI0dzdEJhc2VQYXJzZS1zdHJ1Y3QiPkdzdEJhc2VQYXJzZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU3RyZWFtRGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+SW1wbGVtZW50cyBzdHJlYW0gZGVwYXlsb2FkaW5nIG9mIFJUUCBhbmQgUlRDUCBwYWNrZXRzIGZvciBjb25uZWN0aW9uLW9yaWVudGVkCi10cmFuc3BvcnQgcHJvdG9jb2xzIGFjY29yZGluZyB0byBSRkM0NTcxLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTEuNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW8veC1yYXcscmF0ZT00ODAwMCZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2VuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwdm9yYmlzcGF5IGNvbmZpZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmludGVydmFsPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHN0cmVhbXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGNwc2VydmVyc2luayBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTY3ODwvc3Bhbj4KLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdGNwY2xpZW50c3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41Njc4PC9zcGFuPiBob3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTI3LjAuMC4xPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG88L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dGltZXN0YW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRydWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0sbWVkaWE9YXVkaW8sY2xvY2stcmF0ZT00ODAwMCxlbmNvZGluZy1uYW1lPVZPUkJJUyZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHN0cmVhbWRlcGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHB2b3JiaXNkZXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTEuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbkBjZW50cmljdWxhci5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcms8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjExLjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0Y3Atc3RyZWFtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1zcnRwLXN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3J0Y3Atc3RyZWFtPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtcnRjcDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3J0cDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3J0Y3A8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbWRlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU3RyZWFtRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBTdHJlYW1EZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFN0cmVhbURlcGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVlM2MwNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHN0cmVhbXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5odG1sIiB0aXRsZT0icnRwc3RyZWFtZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzdjN2ZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1kZXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwc3RyZWFtcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBzdHJlYW1wYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwU3RyZWFtUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtcGF5Lmh0bWwjR3N0UnRwU3RyZWFtUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBTdHJlYW1QYXkiPkdzdFJ0cFN0cmVhbVBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwU3RyZWFtUGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5JbXBsZW1lbnRzIHN0cmVhbSBwYXlsb2FkaW5nIG9mIFJUUCBhbmQgUlRDUCBwYWNrZXRzIGZvciBjb25uZWN0aW9uLW9yaWVudGVkCi10cmFuc3BvcnQgcHJvdG9jb2xzIGFjY29yZGluZyB0byBSRkM0NTcxLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTIuNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW8veC1yYXcscmF0ZT00ODAwMCZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2VuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcnRwdm9yYmlzcGF5IGNvbmZpZzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmludGVydmFsPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHN0cmVhbXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGNwc2VydmVyc2luayBwb3J0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTY3ODwvc3Bhbj4KLWdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdGNwY2xpZW50c3JjIHBvcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41Njc4PC9zcGFuPiBob3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTI3LjAuMC4xPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG88L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dGltZXN0YW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRydWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDthcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0sbWVkaWE9YXVkaW8sY2xvY2stcmF0ZT00ODAwMCxlbmNvZGluZy1uYW1lPVZPUkJJUyZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHJ0cHN0cmVhbWRlcGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBydHB2b3JiaXNkZXBheSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTIuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbkBjZW50cmljdWxhci5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxMi42LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0Y3A8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXNydHA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXNydGNwPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXJ0Y3Atc3RyZWFtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1zcnRwLXN0cmVhbTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3J0Y3Atc3RyZWFtPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN0cmVhbXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwU3RyZWFtUGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwU3RyZWFtUGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwU3RyZWFtUGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdjN2ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdjN2ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3MGQ3Ni4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHN2M3ZkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuaHRtbCIgdGl0bGU9InJ0cHN0cmVhbXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5odG1sIiB0aXRsZT0icnRwdGhlb3JhZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdjN2ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwc3YzdmRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHBzdjN2ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwU1YzVkRlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwjR3N0UnRwU1YzVkRlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBTVjNWRGVwYXkiPkdzdFJ0cFNWM1ZEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFNWM1ZEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdjN2ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTMuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxMy42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgWC1TVjNWLUVTLCBYLVNPUkVOU09OLVZJREVPLCBYLVNPUkVOU09OVklERU8sIFgtU29yZW5zb25WaWRlbyB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXN2cSwgc3ZxdmVyc2lvbj0oaW50KTM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHN2M3ZkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBTVjNWRGVwYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBTVjNWRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBTVjNWRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM4NWYyMy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwdGhlb3JhZGVwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwiIHRpdGxlPSJydHBzdjN2ZGVwYXkiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lmh0bWwiIHRpdGxlPSJydHB0aGVvcmFwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwdGhlb3JhZGVwYXk8L3NwYW4+PC9oMj4KLTxwPnJ0cHRoZW9yYWRlcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cFRoZW9yYURlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5odG1sI0dzdFJ0cFRoZW9yYURlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBUaGVvcmFEZXBheSI+R3N0UnRwVGhlb3JhRGVwYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFRoZW9yYURlcGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjE0LjYuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTQuNi4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylUSEVPUkE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtdGhlb3JhPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFRoZW9yYURlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwVGhlb3JhRGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBUaGVvcmFEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYWUzMjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHB0aGVvcmFwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHRoZW9yYWRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lmh0bWwiIHRpdGxlPSJydHB2b3JiaXNkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwdGhlb3JhcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHB0aGVvcmFwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lmh0bWwjR3N0UnRwVGhlb3JhUGF5LS1jb25maWctaW50ZXJ2YWwiIHRpdGxlPSJUaGUg4oCcY29uZmlnLWludGVydmFs4oCdIHByb3BlcnR5Ij5jb25maWctaW50ZXJ2YWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBUaGVvcmFQYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFwYXkuaHRtbCNHc3RSdHBUaGVvcmFQYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFRoZW9yYVBheSI+R3N0UnRwVGhlb3JhUGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZVBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlUGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwVGhlb3JhUGF5Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxNS43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxNS43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC10aGVvcmE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVRIRU9SQTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB0aGVvcmFwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFRoZW9yYVBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFRoZW9yYVBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFRoZW9yYVBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBUaGVvcmFQYXktLWNvbmZpZy1pbnRlcnZhbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbmZpZy1pbnRlcnZhbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29uZmlnLWludGVydmFs4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZW5kIENvbmZpZyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoY29uZmlndXJhdGlvbiBoZWFkZXJzIHdpbGwgYmUgbXVsdGlwbGV4ZWQgaW4gdGhlIGRhdGEgc3RyZWFtIHdoZW4gZGV0ZWN0ZWQuKSAoMCA9IGRpc2FibGVkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDM2MDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZmJiODUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHZvcmJpc2RlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sIiB0aXRsZT0icnRwdGhlb3JhcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sIiB0aXRsZT0icnRwdm9yYmlzcGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYXBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHZvcmJpc2RlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHB2b3JiaXNkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBWb3JiaXNEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzZGVwYXkuaHRtbCNHc3RSdHBWb3JiaXNEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwVm9yYmlzRGVwYXkiPkdzdFJ0cFZvcmJpc0RlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBWb3JiaXNEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxNi42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjE2LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpVk9SQklTPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXZvcmJpczwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBWb3JiaXNEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFZvcmJpc0RlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwVm9yYmlzRGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTI3YzU5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwdm9yYmlzcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lmh0bWwiIHRpdGxlPSJydHB2b3JiaXNkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5odG1sIiB0aXRsZT0icnRwdnA4ZGVwYXkiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzcGF5LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzcGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHZvcmJpc3BheTwvc3Bhbj48L2gyPgotPHA+cnRwdm9yYmlzcGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNwYXkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5odG1sI0dzdFJ0cFZvcmJpc1BheS0tY29uZmlnLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSBwcm9wZXJ0eSI+Y29uZmlnLWludGVydmFsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UnRwVm9yYmlzUGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzcGF5Lmh0bWwjR3N0UnRwVm9yYmlzUGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBWb3JiaXNQYXkiPkdzdFJ0cFZvcmJpc1BheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFZvcmJpc1BheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTcuNy4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTcuNy4yLjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtdm9yYmlzPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylWT1JCSVM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBWb3JiaXNQYXktc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSdHBWb3JiaXNQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBWb3JiaXNQYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc3BheS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwVm9yYmlzUGF5LS1jb25maWctaW50ZXJ2YWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb25maWctaW50ZXJ2YWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbmZpZy1pbnRlcnZhbOKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2VuZCBDb25maWcgSW5zZXJ0aW9uIEludGVydmFsIGluIHNlY29uZHMgKGNvbmZpZ3VyYXRpb24gaGVhZGVycyB3aWxsIGJlIG11bHRpcGxleGVkIGluIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRldGVjdGVkLikgKDAgPSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAzNjAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGU2YzIxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHB2cDhkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNwYXkuaHRtbCIgdGl0bGU9InJ0cHZvcmJpc3BheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkuaHRtbCIgdGl0bGU9InJ0cHZwOHBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2b3JiaXNwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHB2cDhkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRwdnA4ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwVlA4RGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOGRlcGF5Lmh0bWwjR3N0UnRwVlA4RGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFZQOERlcGF5Ij5Hc3RSdHBWUDhEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwVlA4RGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTguNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNqb2VyZCBTaW1vbnMgJmx0O3Nqb2VyZEBsdW9uLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjE4LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpeyBWUDgsIFZQOC1EUkFGVC1JRVRGLTAxIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtdnA4PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFZQOERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwVlA4RGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBWUDhEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YWM5NDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHB2cDhwYXk6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHZwOGRlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lmh0bWwiIHRpdGxlPSJydHB2cDlkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwdnA4cGF5PC9zcGFuPjwvaDI+Ci08cD5ydHB2cDhwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4UlRQUGF5TW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sI0dzdFJ0cFZQOFBheS0tcGljdHVyZS1pZC1tb2RlIiB0aXRsZT0iVGhlIOKAnHBpY3R1cmUtaWQtbW9kZeKAnSBwcm9wZXJ0eSI+cGljdHVyZS1pZC1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UnRwVlA4UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5Lmh0bWwjR3N0UnRwVlA4UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBWUDhQYXkiPkdzdFJ0cFZQOFBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFZQOFBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMTkuNy4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlNqb2VyZCBTaW1vbnMgJmx0O3Nqb2VyZEBsdW9uLm5ldCZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIxOS43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC12cDg8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgVlA4LCBWUDgtRFJBRlQtSUVURi0wMSB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwVlA4UGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwVlA4UGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwVlA4UGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDhwYXkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFZQOFBheS0tcGljdHVyZS1pZC1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGljdHVyZS1pZC1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwaWN0dXJlLWlkLW1vZGXigJ0gICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOFJUUFBheU1vZGU8L3NwYW4+PC9wcmU+Ci08cD5UaGUgcGljdHVyZSBJRCBtb2RlIGZvciBwYXlsb2FkaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBObyBQaWN0dXJlIElEPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNzBiZWUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHZwOWRlcGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sIiB0aXRsZT0icnRwdnA4cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sIiB0aXRsZT0icnRwdnA5cGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOHBheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHZwOWRlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHB2cDlkZXBheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBWUDlEZXBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5ZGVwYXkuaHRtbCNHc3RSdHBWUDlEZXBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwVlA5RGVwYXkiPkdzdFJ0cFZQOURlcGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZWRlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VEZXBheWxvYWQtc3RydWN0Ij5Hc3RSVFBCYXNlRGVwYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBWUDlEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlkZXBheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyMC42LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U3RpYW4gU2VsbmVzICZsdDtzdGlhbkBwZXhpcC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyMC42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgbWVkaWE9KHN0cmluZyl2aWRlbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgVlA5LCBWUDktRFJBRlQtSUVURi0wMSB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXZwOTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5ZGVwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBWUDlEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFZQOURlcGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwVlA5RGVwYXk7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2E4YThmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+cnRwdnA5cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lmh0bWwiIHRpdGxlPSJydHB2cDlkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuaHRtbCIgdGl0bGU9InJ0cHZyYXdkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5ZGVwYXkuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS50b3Bfb2ZfcGFnZSI+PC9hPnJ0cHZwOXBheTwvc3Bhbj48L2gyPgotPHA+cnRwdnA5cGF5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOVJUUFBheU1vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkuaHRtbCNHc3RSdHBWUDlQYXktLXBpY3R1cmUtaWQtbW9kZSIgdGl0bGU9IlRoZSDigJxwaWN0dXJlLWlkLW1vZGXigJ0gcHJvcGVydHkiPnBpY3R1cmUtaWQtbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFJ0cFZQOVBheSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5odG1sI0dzdFJ0cFZQOVBheS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UnRwVlA5UGF5Ij5Hc3RSdHBWUDlQYXk8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRwYmFzZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlUGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VQYXlsb2FkPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RSdHBWUDlQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjIxLjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHAuaHRtbCNwbHVnaW4tcnRwIj5ydHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TdGlhbiBTZWxuZXMgJmx0O3N0aWFuQHBleGlwLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyMS43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC12cDk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgVlA5LCBWUDktRFJBRlQtSUVURi0wMSB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOXBheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwVlA5UGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwVlA5UGF5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UnRwVlA5UGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFZQOVBheS0tcGljdHVyZS1pZC1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccGljdHVyZS1pZC1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwaWN0dXJlLWlkLW1vZGXigJ0gICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOVJUUFBheU1vZGU8L3NwYW4+PC9wcmU+Ci08cD5UaGUgcGljdHVyZSBJRCBtb2RlIGZvciBwYXlsb2FkaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBObyBQaWN0dXJlIElEPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4MTJmMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnJ0cHZyYXdkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cDlwYXkuaHRtbCIgdGl0bGU9InJ0cHZwOXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5Lmh0bWwiIHRpdGxlPSJydHB2cmF3cGF5Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwdnJhd2RlcGF5PC9zcGFuPjwvaDI+Ci08cD5ydHB2cmF3ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwVlJhd0RlcGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdkZXBheS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5Lmh0bWwjR3N0UnRwVlJhd0RlcGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBWUmF3RGVwYXkiPkdzdFJ0cFZSYXdEZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdkZXBheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlZGVwYXlsb2FkLmh0bWwjR3N0UlRQQmFzZURlcGF5bG9hZC1zdHJ1Y3QiPkdzdFJUUEJhc2VEZXBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFZSYXdEZXBheQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjIuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sI3BsdWdpbi1ydHAiPnJ0cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyMi42LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVJBVywgc2FtcGxpbmc9KHN0cmluZyl7IFJHQiwgUkdCQSwgQkdSLCBCR1JBLCBZQ2JDci00OjQ6NCwgWUNiQ3ItNDoyOjIsIFlDYkNyLTQ6MjowLCBZQ2JDci00OjE6MSB9LCBkZXB0aD0oc3RyaW5nKXsgOCwgMTAsIDEyLCAxNiB9PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFZSYXdEZXBheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFZSYXdEZXBheTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFJ0cFZSYXdEZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1NjEzOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHB2cmF3cGF5OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdkZXBheS5odG1sIiB0aXRsZT0icnRwdnJhd2RlcGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5Lmh0bWwiIHRpdGxlPSJydHB4cXRkZXBheSI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd2RlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5LnRvcF9vZl9wYWdlIj48L2E+cnRwdnJhd3BheTwvc3Bhbj48L2gyPgotPHA+cnRwdnJhd3BheTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkuaHRtbCNHc3RSdHBWUmF3UGF5LS1jaHVua3MtcGVyLWZyYW1lIiB0aXRsZT0iVGhlIOKAnGNodW5rcy1wZXItZnJhbWXigJ0gcHJvcGVydHkiPmNodW5rcy1wZXItZnJhbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RSdHBWUmF3UGF5Ij48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdwYXkuaHRtbCNHc3RSdHBWUmF3UGF5LXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RSdHBWUmF3UGF5Ij5Hc3RSdHBWUmF3UGF5PC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHBiYXNlcGF5bG9hZC5odG1sI0dzdFJUUEJhc2VQYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZVBheWxvYWQ8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJ0cFZSYXdQYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyMy43LjIuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwLmh0bWwjcGx1Z2luLXJ0cCI+cnRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyMy43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCLCBSR0JBLCBCR1IsIEJHUkEsIEFZVVYsIFVZVlksIEk0MjAsIFk0MUIsIFVZVlAgfSwgd2lkdGg9KGludClbIDEsIDMyNzY3IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUkFXLCBzYW1wbGluZz0oc3RyaW5nKXsgUkdCLCBSR0JBLCBCR1IsIEJHUkEsIFlDYkNyLTQ6NDo0LCBZQ2JDci00OjI6MiwgWUNiQ3ItNDoyOjAsIFlDYkNyLTQ6MToxIH0sIGRlcHRoPShzdHJpbmcpeyA4LCAxMCwgMTIsIDE2IH0sIGNvbG9yaW1ldHJ5PShzdHJpbmcpeyBCVDYwMS01LCBCVDcwOS0yLCBTTVBURTI0ME0gfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UnRwVlJhd1BheS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFJ0cFZSYXdQYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBWUmF3UGF5OzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSdHBWUmF3UGF5LS1jaHVua3MtcGVyLWZyYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2h1bmtzLXBlci1mcmFtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY2h1bmtzLXBlci1mcmFtZeKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U3BsaXQgYW5kIHNlbmQgb3V0IGVhY2ggZnJhbWUgaW4gbXVsdGlwbGUgY2h1bmtzIHRvIHJlZHVjZSBvdmVyaGVhZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDE8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB4cXRkZXBheS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjg1MzFiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB4cXRkZXBheS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHB4cXRkZXBheTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5Lmh0bWwiIHRpdGxlPSJydHB2cmF3cGF5Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCIgdGl0bGU9InJ0c3BzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnJhd3BheS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkudG9wX29mX3BhZ2UiPjwvYT5ydHB4cXRkZXBheTwvc3Bhbj48L2gyPgotPHA+cnRweHF0ZGVwYXk8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0UnRwWFFURGVwYXkiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5Lmh0bWwjR3N0UnRwWFFURGVwYXktc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFJ0cFhRVERlcGF5Ij5Hc3RSdHBYUVREZXBheTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHJ0cGJhc2VkZXBheWxvYWQuaHRtbCNHc3RSVFBCYXNlRGVwYXlsb2FkLXN0cnVjdCI+R3N0UlRQQmFzZURlcGF5bG9hZDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0UnRwWFFURGVwYXkKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjQuNi4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNC5odG1sI3BsdWdpbi1pc29tcDQiPmlzb21wNDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcms8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI0LjYuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hcHBsaWNhdGlvbi94LXJ0cCwgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBtZWRpYT0oc3RyaW5nKXsgYXVkaW8sIHZpZGVvIH0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgWC1RVCwgWC1RVUlDS1RJTUUgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB4cXRkZXBheS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRweHF0ZGVwYXkub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJ0cFhRVERlcGF5LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0UnRwWFFURGVwYXk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RSdHBYUVREZXBheTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlMmE1Yi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5ydHNwc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5Lmh0bWwiIHRpdGxlPSJydHB4cXRkZXBheSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sIiB0aXRsZT0ic2JjcGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHhxdGRlcGF5Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLnRvcF9vZl9wYWdlIj48L2E+cnRzcHNyYzwvc3Bhbj48L2gyPgotPHA+cnRzcHNyYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tZGVidWciIHRpdGxlPSJUaGUg4oCcZGVidWfigJ0gcHJvcGVydHkiPmRlYnVnPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5Ij5sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRzcHRyYW5zcG9ydC5odG1sI0dzdFJUU1BMb3dlclRyYW5zIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUExvd2VyVHJhbnM8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXByb3RvY29scyIgdGl0bGU9IlRoZSDigJxwcm90b2NvbHPigJ0gcHJvcGVydHkiPnByb3RvY29sczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tcmV0cnkiIHRpdGxlPSJUaGUg4oCccmV0cnnigJ0gcHJvcGVydHkiPnJldHJ5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdGltZW91dCIgdGl0bGU9IlRoZSDigJx0aW1lb3V04oCdIHByb3BlcnR5Ij50aW1lb3V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1sYXRlbmN5IiB0aXRsZT0iVGhlIOKAnGxhdGVuY3nigJ0gcHJvcGVydHkiPmxhdGVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS10Y3AtdGltZW91dCIgdGl0bGU9IlRoZSDigJx0Y3AtdGltZW91dOKAnSBwcm9wZXJ0eSI+dGNwLXRpbWVvdXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1jb25uZWN0aW9uLXNwZWVkIiB0aXRsZT0iVGhlIOKAnGNvbm5lY3Rpb24tc3BlZWTigJ0gcHJvcGVydHkiPmNvbm5lY3Rpb24tc3BlZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUE5hdE1ldGhvZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1uYXQtbWV0aG9kIiB0aXRsZT0iVGhlIOKAnG5hdC1tZXRob2TigJ0gcHJvcGVydHkiPm5hdC1tZXRob2Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLWRvLXJ0Y3AiIHRpdGxlPSJUaGUg4oCcZG8tcnRjcOKAnSBwcm9wZXJ0eSI+ZG8tcnRjcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1wcm94eSIgdGl0bGU9IlRoZSDigJxwcm94eeKAnSBwcm9wZXJ0eSI+cHJveHk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXJ0cC1ibG9ja3NpemUiIHRpdGxlPSJUaGUg4oCccnRwLWJsb2Nrc2l6ZeKAnSBwcm9wZXJ0eSI+cnRwLWJsb2Nrc2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS11c2VyLWlkIiB0aXRsZT0iVGhlIOKAnHVzZXItaWTigJ0gcHJvcGVydHkiPnVzZXItaWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdXNlci1wdyIgdGl0bGU9IlRoZSDigJx1c2VyLXB34oCdIHByb3BlcnR5Ij51c2VyLXB3PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUU1BTcmNCdWZmZXJNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLWJ1ZmZlci1tb2RlIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1tb2Rl4oCdIHByb3BlcnR5Ij5idWZmZXItbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1wb3J0LXJhbmdlIiB0aXRsZT0iVGhlIOKAnHBvcnQtcmFuZ2XigJ0gcHJvcGVydHkiPnBvcnQtcmFuZ2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS11ZHAtYnVmZmVyLXNpemUiIHRpdGxlPSJUaGUg4oCcdWRwLWJ1ZmZlci1zaXpl4oCdIHByb3BlcnR5Ij51ZHAtYnVmZmVyLXNpemU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXNob3J0LWhlYWRlciIgdGl0bGU9IlRoZSDigJxzaG9ydC1oZWFkZXLigJ0gcHJvcGVydHkiPnNob3J0LWhlYWRlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tZG8tcnRzcC1rZWVwLWFsaXZlIiB0aXRsZT0iVGhlIOKAnGRvLXJ0c3Ata2VlcC1hbGl2ZeKAnSBwcm9wZXJ0eSI+ZG8tcnRzcC1rZWVwLWFsaXZlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1kcm9wLW9uLWxhdGVuY3kiIHRpdGxlPSJUaGUg4oCcZHJvcC1vbi1sYXRlbmN54oCdIHByb3BlcnR5Ij5kcm9wLW9uLWxhdGVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXByb2JhdGlvbiIgdGl0bGU9IlRoZSDigJxwcm9iYXRpb27igJ0gcHJvcGVydHkiPnByb2JhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdWRwLXJlY29ubmVjdCIgdGl0bGU9IlRoZSDigJx1ZHAtcmVjb25uZWN04oCdIHByb3BlcnR5Ij51ZHAtcmVjb25uZWN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXByb3h5LWlkIiB0aXRsZT0iVGhlIOKAnHByb3h5LWlk4oCdIHByb3BlcnR5Ij5wcm94eS1pZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1wcm94eS1wdyIgdGl0bGU9IlRoZSDigJxwcm94eS1wd+KAnSBwcm9wZXJ0eSI+cHJveHktcHc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbXVsdGljYXN0LWlmYWNlIiB0aXRsZT0iVGhlIOKAnG11bHRpY2FzdC1pZmFjZeKAnSBwcm9wZXJ0eSI+bXVsdGljYXN0LWlmYWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS1udHAtc3luYyIgdGl0bGU9IlRoZSDigJxudHAtc3luY+KAnSBwcm9wZXJ0eSI+bnRwLXN5bmM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXVzZS1waXBlbGluZS1jbG9jayIgdGl0bGU9IlRoZSDigJx1c2UtcGlwZWxpbmUtY2xvY2vigJ0gcHJvcGVydHkiPnVzZS1waXBlbGluZS1jbG9jazwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXNkZXMiIHRpdGxlPSJUaGUg4oCcc2Rlc+KAnSBwcm9wZXJ0eSI+c2RlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1Rsc0RhdGFiYXNlLmh0bWwjR1Rsc0RhdGFiYXNlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdUbHNEYXRhYmFzZTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tdGxzLWRhdGFiYXNlIiB0aXRsZT0iVGhlIOKAnHRscy1kYXRhYmFzZeKAnSBwcm9wZXJ0eSI+dGxzLWRhdGFiYXNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvZ2lvLVRMUy1PdmVydmlldy5odG1sI0dUbHNDZXJ0aWZpY2F0ZUZsYWdzIj48c3BhbiBjbGFzcz0idHlwZSI+R1Rsc0NlcnRpZmljYXRlRmxhZ3M8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXRscy12YWxpZGF0aW9uLWZsYWdzIiB0aXRsZT0iVGhlIOKAnHRscy12YWxpZGF0aW9uLWZsYWdz4oCdIHByb3BlcnR5Ij50bHMtdmFsaWRhdGlvbi1mbGFnczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tZG8tcmV0cmFuc21pc3Npb24iIHRpdGxlPSJUaGUg4oCcZG8tcmV0cmFuc21pc3Npb27igJ0gcHJvcGVydHkiPmRvLXJldHJhbnNtaXNzaW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HVGxzSW50ZXJhY3Rpb24uaHRtbCNHVGxzSW50ZXJhY3Rpb24tc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1Rsc0ludGVyYWN0aW9uPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLS10bHMtaW50ZXJhY3Rpb24iIHRpdGxlPSJUaGUg4oCcdGxzLWludGVyYWN0aW9u4oCdIHByb3BlcnR5Ij50bHMtaW50ZXJhY3Rpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUFNyY050cFRpbWVTb3VyY2U8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tbnRwLXRpbWUtc291cmNlIiB0aXRsZT0iVGhlIOKAnG50cC10aW1lLXNvdXJjZeKAnSBwcm9wZXJ0eSI+bnRwLXRpbWUtc291cmNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXVzZXItYWdlbnQiIHRpdGxlPSJUaGUg4oCcdXNlci1hZ2VudOKAnSBwcm9wZXJ0eSI+dXNlci1hZ2VudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLW1heC1ydGNwLXJ0cC10aW1lLWRpZmYiIHRpdGxlPSJUaGUg4oCcbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZuKAnSBwcm9wZXJ0eSI+bWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy0tcmZjNzI3My1zeW5jIiB0aXRsZT0iVGhlIOKAnHJmYzcyNzMtc3luY+KAnSBwcm9wZXJ0eSI+cmZjNzI3My1zeW5jPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5zaWduYWxzIj48L2E+PGgyPlNpZ25hbHM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJzaWduYWxzX3JldHVybiI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InNpZ25hbHNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InNpZ25hbHNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy1oYW5kbGUtcmVxdWVzdCIgdGl0bGU9IlRoZSDigJxoYW5kbGUtcmVxdWVzdOKAnSBzaWduYWwiPmhhbmRsZS1yZXF1ZXN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy1vbi1zZHAiIHRpdGxlPSJUaGUg4oCcb24tc2Rw4oCdIHNpZ25hbCI+b24tc2RwPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLXNlbGVjdC1zdHJlYW0iIHRpdGxlPSJUaGUg4oCcc2VsZWN0LXN0cmVhbeKAnSBzaWduYWwiPnNlbGVjdC1zdHJlYW08L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0ic2lnbmFsX3R5cGUiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy1uZXctbWFuYWdlciIgdGl0bGU9IlRoZSDigJxuZXctbWFuYWdlcuKAnSBzaWduYWwiPm5ldy1tYW5hZ2VyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9mbGFncyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1GSVJTVDpDQVBTIj5SdW4gRmlyc3Q8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InNpZ25hbF90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R3N0Q2Fwczwvc3Bhbj48L2E+KjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjLXJlcXVlc3QtcnRjcC1rZXkiIHRpdGxlPSJUaGUg4oCccmVxdWVzdC1ydGNwLWtleeKAnSBzaWduYWwiPnJlcXVlc3QtcnRjcC1rZXk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0UlRTUFNyYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0UlRTUFNyYyI+R3N0UlRTUFNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij5Hc3RCaW48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFJUU1BTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RSVFNQU3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0Ij5Hc3RDaGlsZFByb3h5PC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBnc3RyZWFtZXItR3N0VXJpSGFuZGxlci5odG1sI0dzdFVSSUhhbmRsZXItc3RydWN0Ij5Hc3RVUklIYW5kbGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPk1ha2VzIGEgY29ubmVjdGlvbiB0byBhbiBSVFNQIHNlcnZlciBhbmQgcmVhZCB0aGUgZGF0YS4KLXJ0c3BzcmMgc3RyaWN0bHkgZm9sbG93cyBSRkMgMjMyNiBhbmQgdGhlcmVmb3JlIGRvZXMgbm90ICh5ZXQpIHN1cHBvcnQKLVJlYWxNZWRpYS9RdWlja3RpbWUvTWljcm9zb2Z0IGV4dGVuc2lvbnMuPC9wPgotPHA+UlRTUCBzdXBwb3J0cyB0cmFuc3BvcnQgb3ZlciBUQ1Agb3IgVURQIGluIHVuaWNhc3Qgb3IgbXVsdGljYXN0IG1vZGUuIEJ5Ci1kZWZhdWx0IHJ0c3BzcmMgd2lsbCBuZWdvdGlhdGUgYSBjb25uZWN0aW9uIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci1VRFAgdW5pY2FzdC9VRFAgbXVsdGljYXN0L1RDUC4gVGhlIG9yZGVyIGNhbm5vdCBiZSBjaGFuZ2VkIGJ1dCB0aGUgYWxsb3dlZAotcHJvdG9jb2xzIGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMtLXByb3RvY29scyIgdGl0bGU9IlRoZSDigJxwcm90b2NvbHPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwcm90b2NvbHPigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eS48L3A+Ci08cD5ydHNwc3JjIGN1cnJlbnRseSB1bmRlcnN0YW5kcyBTRFAgYXMgdGhlIGZvcm1hdCBvZiB0aGUgc2Vzc2lvbiBkZXNjcmlwdGlvbi4KLUZvciBlYWNoIHN0cmVhbSBsaXN0ZWQgaW4gdGhlIFNEUCBhIG5ldyBydHBfc3RyZWFtJWQgcGFkIHdpbGwgYmUgY3JlYXRlZAotd2l0aCBjYXBzIGRlcml2ZWQgZnJvbSB0aGUgU0RQIG1lZGlhIGRlc2NyaXB0aW9uLiBUaGlzIGlzIGEgY2FwcyBvZiBtaW1lIHR5cGUKLSJhcHBsaWNhdGlvbi94LXJ0cCIgdGhhdCBjYW4gYmUgY29ubmVjdGVkIHRvIGFueSBhdmFpbGFibGUgUlRQIGRlcGF5bG9hZGVyCi1lbGVtZW50LjwvcD4KLTxwPnJ0c3BzcmMgd2lsbCBpbnRlcm5hbGx5IGluc3RhbnRpYXRlIGFuIFJUUCBzZXNzaW9uIG1hbmFnZXIgZWxlbWVudAotdGhhdCB3aWxsIGhhbmRsZSB0aGUgUlRDUCBtZXNzYWdlcyB0byBhbmQgZnJvbSB0aGUgc2VydmVyLCBqaXR0ZXIgcmVtb3ZhbCwKLXBhY2tldCByZW9yZGVyaW5nIGFsb25nIHdpdGggcHJvdmlkaW5nIGEgY2xvY2sgZm9yIHRoZSBwaXBlbGluZS4KLVRoaXMgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgZ3N0cnRwYmluIGVsZW1lbnQuPC9wPgotPHA+cnRzcHNyYyBhY3RzIGxpa2UgYSBsaXZlIHNvdXJjZSBhbmQgd2lsbCB0aGVyZWZvcmUgb25seSBnZW5lcmF0ZSBkYXRhIGluIHRoZQotUExBWUlORyBzdGF0ZS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI1LjkuNyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBydHNwc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+cnRzcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vL3NvbWUuc2VydmVyL3VybCAhIGZha2VzaW5rPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBFc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGFuIFJUU1Agc2VydmVyIGFuZCBzZW5kIHRoZSByYXcgUlRQIHBhY2tldHMgdG8gYQotZmFrZXNpbmsuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI1LjkuOC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1ydHNwLmh0bWwjcGx1Z2luLXJ0c3AiPnJ0c3A8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OywgVGhpanMgVmVybWVpciAmbHQ7dGhpanMudmVybWVpckBiYXJjby5jb20mZ3Q7LCBMdXR6IE11ZWxsZXIgJmx0O2x1dHpAdG9wZnJvc2UuZGUmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9OZXR3b3JrPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyNS45LjguMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnN0cmVhbV8ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gtcnRwPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1yZHQ8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RSVFNQU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0UlRTUFNyYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tZGVidWciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkZWJ1Z+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGVidWfigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EdW1wIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2VzIHRvIHN0ZG91dC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLWxvY2F0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG9jYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxvY2F0aW9u4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TG9jYXRpb24gb2YgdGhlIFJUU1AgdXJsIHRvIHJlYWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXByb3RvY29scyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByb3RvY29sc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJvdG9jb2xz4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0cnRzcHRyYW5zcG9ydC5odG1sI0dzdFJUU1BMb3dlclRyYW5zIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUExvd2VyVHJhbnM8L3NwYW4+PC9hPjwvcHJlPgotPHA+QWxsb3dlZCBsb3dlciB0cmFuc3BvcnQgcHJvdG9jb2xzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBHU1RfUlRTUF9MT1dFUl9UUkFOU19VRFB8R1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQX01DQVNUfEdTVF9SVFNQX0xPV0VSX1RSQU5TX1RDUDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tcmV0cnkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXRyeeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmV0cnnigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXggbnVtYmVyIG9mIHJldHJpZXMgd2hlbiBhbGxvY2F0aW5nIFJUUCBwb3J0cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDY1NTM1PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aW1lb3V04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aW1lb3V04oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5SZXRyeSBUQ1AgdHJhbnNwb3J0IGFmdGVyIFVEUCB0aW1lb3V0IG1pY3Jvc2Vjb25kcyAoMCA9IGRpc2FibGVkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTAwMDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tbGF0ZW5jeSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxhdGVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhdGVuY3nigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QW1vdW50IG9mIG1zIHRvIGJ1ZmZlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdGNwLXRpbWVvdXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0Y3AtdGltZW91dOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGNwLXRpbWVvdXTigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RmFpbCBhZnRlciB0aW1lb3V0IG1pY3Jvc2Vjb25kcyBvbiBUQ1AgY29ubmVjdGlvbnMgKDAgPSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDIwMDAwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS1jb25uZWN0aW9uLXNwZWVkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29ubmVjdGlvbi1zcGVlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29ubmVjdGlvbi1zcGVlZOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TmV0d29yayBjb25uZWN0aW9uIHNwZWVkIGluIGticHMgKDAgPSB1bmtub3duKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDE4NDQ2NzQ0MDczNzA5NTUxPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tbmF0LW1ldGhvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5hdC1tZXRob2TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5hdC1tZXRob2TigJ0gICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUE5hdE1ldGhvZDwvc3Bhbj48L3ByZT4KLTxwPk1ldGhvZCB0byB1c2UgZm9yIHRyYXZlcnNpbmcgZmlyZXdhbGxzIGFuZCBOQVQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFNlbmQgRHVtbXkgcGFja2V0czwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tZG8tcnRjcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRvLXJ0Y3DigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRvLXJ0Y3DigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RW5hYmxlIFJUQ1Agc3VwcG9ydC4gU29tZSBvbGQgc2VydmVyIGRvbid0IGxpa2UgUlRDUCBhbmQgdGhlbiB0aGlzIHByb3BlcnR5Ci1uZWVkcyB0byBiZSBzZXQgdG8gRkFMU0UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXByb3h5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJveHnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHByb3h54oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U2V0IHRoZSBwcm94eSBwYXJhbWV0ZXJzLiBUaGlzIGhhcyB0byBiZSBhIHN0cmluZyBvZiB0aGUgZm9ybWF0Ci1odHRwOi8vaG9zdFs6cG9ydF0uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXJ0cC1ibG9ja3NpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxydHAtYmxvY2tzaXpl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxydHAtYmxvY2tzaXpl4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlJUUCBwYWNrYWdlIHNpemUgdG8gc3VnZ2VzdCB0byBzZXJ2ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSA2NTUzNjwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXVzZXItaWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1c2VyLWlk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1c2VyLWlk4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlJUU1AgbG9jYXRpb24gVVJJIHVzZXIgaWQgZm9yIGF1dGhlbnRpY2F0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS11c2VyLXB3Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlci1wd+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXNlci1wd+KAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5SVFNQIGxvY2F0aW9uIFVSSSB1c2VyIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tYnVmZmVyLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxidWZmZXItbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnVmZmVyLW1vZGXigJ0gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjQnVmZmVyTW9kZTwvc3Bhbj48L3ByZT4KLTxwPkNvbnRyb2wgdGhlIGJ1ZmZlcmluZyBhbmQgdGltZXN0YW1waW5nIG1vZGUgdXNlZCBieSB0aGUgaml0dGVyYnVmZmVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBDaG9vc2UgbW9kZSBkZXBlbmRpbmcgb24gc3RyZWFtIGxpdmU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXBvcnQtcmFuZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwb3J0LXJhbmdl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb3J0LXJhbmdl4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkNvbmZpZ3VyZSB0aGUgY2xpZW50IHBvcnQgbnVtYmVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlY2lldmUgUlRQIGFuZAotUlRDUC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdWRwLWJ1ZmZlci1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdWRwLWJ1ZmZlci1zaXpl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1ZHAtYnVmZmVyLXNpemXigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TaXplIG9mIHRoZSBrZXJuZWwgVURQIHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDUyNDI4ODwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tc2hvcnQtaGVhZGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2hvcnQtaGVhZGVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzaG9ydC1oZWFkZXLigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPk9ubHkgc2VuZCB0aGUgYmFzaWMgUlRTUCBoZWFkZXJzIGZvciBicm9rZW4gZW5jb2RlcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS1kby1ydHNwLWtlZXAtYWxpdmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkby1ydHNwLWtlZXAtYWxpdmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRvLXJ0c3Ata2VlcC1hbGl2ZeKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RW5hYmxlIFJUU1Aga2VlcCBhbGl2ZSBzdXBwb3J0LiBTb21lIG9sZCBzZXJ2ZXIgZG9uJ3QgbGlrZSBSVFNQCi1rZWVwIGFsaXZlIGFuZCB0aGVuIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgc2V0IHRvIEZBTFNFLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS1kcm9wLW9uLWxhdGVuY3kiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkcm9wLW9uLWxhdGVuY3nigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRyb3Atb24tbGF0ZW5jeeKAnSAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VGVsbHMgdGhlIGppdHRlcmJ1ZmZlciB0byBuZXZlciBleGNlZWQgdGhlIGdpdmVuIGxhdGVuY3kgaW4gc2l6ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLXByb2JhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByb2JhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJvYmF0aW9u4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Db25zZWN1dGl2ZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVycyB0byBhY2NlcHQgdGhlIHNvdXJjZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdWRwLXJlY29ubmVjdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVkcC1yZWNvbm5lY3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVkcC1yZWNvbm5lY3TigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+UmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgaWYgUlRTUCBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aGVuIGRvaW5nIFVEUC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tcHJveHktaWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcm94eS1pZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJveHktaWTigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5TZXRzIHRoZSBwcm94eSBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24uIElmIHRoZSBVUkkgc2V0IHZpYSB0aGUKLSJwcm94eSIgcHJvcGVydHkgY29udGFpbnMgYSB1c2VyLWlkIGFscmVhZHksIHRoYXQgd2lsbCB0YWtlIHByZWNlZGVuY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4yPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS1wcm94eS1wdyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByb3h5LXB34oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcm94eS1wd+KAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlNldHMgdGhlIHByb3h5IFVSSSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24uIElmIHRoZSBVUkkgc2V0IHZpYSB0aGUKLSJwcm94eSIgcHJvcGVydHkgY29udGFpbnMgYSBwYXNzd29yZCBhbHJlYWR5LCB0aGF0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiIjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tbXVsdGljYXN0LWlmYWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbXVsdGljYXN0LWlmYWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdWx0aWNhc3QtaWZhY2XigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBuZXR3b3JrIGludGVyZmFjZSBvbiB3aGljaCB0byBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLW50cC1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbnRwLXN5bmPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG50cC1zeW5j4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U3luY2hyb25pemUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgTlRQIGNsb2NrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdXNlLXBpcGVsaW5lLWNsb2NrIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlLXBpcGVsaW5lLWNsb2Nr4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1c2UtcGlwZWxpbmUtY2xvY2vigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSB0aGUgcGlwZWxpbmUgcnVubmluZy10aW1lIHRvIHNldCB0aGUgTlRQIHRpbWUgaW4gdGhlIFJUQ1AgU1IgbWVzc2FnZXMoREVQUkVDQVRFRDogVXNlIG50cC10aW1lLXNvdXJjZSBwcm9wZXJ0eSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS1zZGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2Rlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2Rlc+KAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBTREVTIGl0ZW1zIG9mIHRoaXMgc2Vzc2lvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS10bHMtZGF0YWJhc2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0bHMtZGF0YWJhc2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRscy1kYXRhYmFzZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HVGxzRGF0YWJhc2UuaHRtbCNHVGxzRGF0YWJhc2Utc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1Rsc0RhdGFiYXNlPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRMUyBkYXRhYmFzZSB3aXRoIGFuY2hvciBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdGxzLXZhbGlkYXRpb24tZmxhZ3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0bHMtdmFsaWRhdGlvbi1mbGFnc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGxzLXZhbGlkYXRpb24tZmxhZ3PigJ0gICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb2dpby1UTFMtT3ZlcnZpZXcuaHRtbCNHVGxzQ2VydGlmaWNhdGVGbGFncyI+PHNwYW4gY2xhc3M9InR5cGUiPkdUbHNDZXJ0aWZpY2F0ZUZsYWdzPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRMUyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGZsYWdzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQXxHX1RMU19DRVJUSUZJQ0FURV9CQURfSURFTlRJVFl8R19UTFNfQ0VSVElGSUNBVEVfTk9UX0FDVElWQVRFRHxHX1RMU19DRVJUSUZJQ0FURV9FWFBJUkVEfEdfVExTX0NFUlRJRklDQVRFX1JFVk9LRUR8R19UTFNfQ0VSVElGSUNBVEVfSU5TRUNVUkV8R19UTFNfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tZG8tcmV0cmFuc21pc3Npb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkby1yZXRyYW5zbWlzc2lvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZG8tcmV0cmFuc21pc3Npb27igJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Bc2sgdGhlIHNlcnZlciB0byByZXRyYW5zbWl0IGxvc3QgcGFja2V0cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdGxzLWludGVyYWN0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGxzLWludGVyYWN0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0bHMtaW50ZXJhY3Rpb27igJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2lvR1Rsc0ludGVyYWN0aW9uLmh0bWwjR1Rsc0ludGVyYWN0aW9uLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdUbHNJbnRlcmFjdGlvbjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5BIEdUbHNJbnRlcmFjdGlvbiBvYmplY3QgdG8gcHJvbXQgdGhlIHVzZXIgZm9yIHBhc3N3b3JkIG9yIGNlcnRpZmljYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtLW50cC10aW1lLXNvdXJjZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG50cC10aW1lLXNvdXJjZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbnRwLXRpbWUtc291cmNl4oCdICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjTnRwVGltZVNvdXJjZTwvc3Bhbj48L3ByZT4KLTxwPk5UUCB0aW1lIHNvdXJjZSBmb3IgUlRDUCBwYWNrZXRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVFAgdGltZSBiYXNlZCBvbiByZWFsdGltZSBjbG9jazwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tdXNlci1hZ2VudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZXItYWdlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXItYWdlbnTigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIFVzZXItQWdlbnQgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIHNlcnZlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIkdTdHJlYW1lci8xLjEwLjQiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLS1tYXgtcnRjcC1ydHAtdGltZS1kaWZmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZuKAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGF0IHRoZSBSVFAgdGltZSBpbiBSVENQIFNScyBpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy0tcmZjNzI3My1zeW5jIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmZjNzI3My1zeW5j4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZmM3MjczLXN5bmPigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlN5bmNocm9uaXplIHJlY2VpdmVkIHN0cmVhbXMgdG8gdGhlIFJGQzcyNzMgY2xvY2sgKHJlcXVpcmVzIGNsb2NrIGFuZCBvZmZzZXQgdG8gYmUgcHJvdmlkZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLWhhbmRsZS1yZXF1ZXN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaGFuZGxlLXJlcXVlc3TigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUU1BTcmM8L3NwYW4+PC9hPiAqcnRzcHNyYywKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHJlcXVlc3QsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICByZXNwb25zZSwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3BvaW50ZXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ncG9pbnRlcjwvc3Bhbj48L2E+ICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxwPkhhbmRsZSBhIHNlcnZlciByZXF1ZXN0IGluIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXF1ZXN0PC9jb2RlPjwvZW0+Ci0gYW5kIHByZXBhcmUgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlc3BvbnNlPC9jb2RlPjwvZW0+Ci0uPC9wPgotPHA+VGhpcyBzaWduYWwgaXMgY2FsbGVkIGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQsIHlvdSBzaG91bGQgdGhlcmVmb3JlIG5vdAotZG8gYW55IHN0YXRlIGNoYW5nZXMgb24gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJ0c3BzcmM8L2NvZGU+PC9lbT4KLSBiZWNhdXNlIHRoaXMgbWlnaHQgZGVhZGxvY2suIElmIHlvdSB3YW50Ci10byBtb2RpZnkgdGhlIHN0YXRlIGFzIGEgcmVzdWx0IG9mIHRoaXMgc2lnbmFsLCBwb3N0IGEKLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RNZXNzYWdlLmh0bWwjR1NULU1FU1NBR0UtUkVRVUVTVC1TVEFURTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+R1NUX01FU1NBR0VfUkVRVUVTVF9TVEFURTwvc3Bhbj48L2E+IG1lc3NhZ2Ugb24gdGhlIGJ1cyBvciBzaWduYWwgdGhlIG1haW4gdGhyZWFkCi1pbiBzb21lIG90aGVyIHdheS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLWhhbmRsZS1yZXF1ZXN0LnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0c3BzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cmVxdWVzdDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHNwbWVzc2FnZS5odG1sI0dzdFJUU1BNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5yZXNwb25zZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RydHNwbWVzc2FnZS5odG1sI0dzdFJUU1BNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUE1lc3NhZ2U8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtb24tc2RwIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb24tc2Rw4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjPC9zcGFuPjwvYT4gICAgKnJ0c3BzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHNkcG1lc3NhZ2UuaHRtbCNHc3RTRFBNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U0RQTWVzc2FnZTwvc3Bhbj48L2E+ICpzZHAsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5FbWl0ZWQgd2hlbiB0aGUgY2xpZW50IGhhcyByZXRyaWV2ZWQgdGhlIFNEUCBhbmQgYmVmb3JlIGl0IGNvbmZpZ3VyZXMgdGhlCi1zdHJlYW1zIGluIHRoZSBTRFAuIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5zZHA8L2NvZGU+PC9lbT4KLSBjYW4gYmUgaW5zcGVjdGVkIGFuZCBtb2RpZmllZC48L3A+Ci08cD5UaGlzIHNpZ25hbCBpcyBjYWxsZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCwgeW91IHNob3VsZCB0aGVyZWZvcmUgbm90Ci1kbyBhbnkgc3RhdGUgY2hhbmdlcyBvbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+cnRzcHNyYzwvY29kZT48L2VtPgotIGJlY2F1c2UgdGhpcyBtaWdodCBkZWFkbG9jay4gSWYgeW91IHdhbnQKLXRvIG1vZGlmeSB0aGUgc3RhdGUgYXMgYSByZXN1bHQgb2YgdGhpcyBzaWduYWwsIHBvc3QgYQotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE1lc3NhZ2UuaHRtbCNHU1QtTUVTU0FHRS1SRVFVRVNULVNUQVRFOkNBUFMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFPC9zcGFuPjwvYT4gbWVzc2FnZSBvbiB0aGUgYnVzIG9yIHNpZ25hbCB0aGUgbWFpbiB0aHJlYWQKLWluIHNvbWUgb3RoZXIgd2F5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtb24tc2RwLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0c3BzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c2RwPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHNkcG1lc3NhZ2UuaHRtbCNHc3RTRFBNZXNzYWdlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U0RQTWVzc2FnZTwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy1zZWxlY3Qtc3RyZWFtIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2VsZWN0LXN0cmVhbeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdib29sZWFuPC9zcGFuPjwvYT4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjPC9zcGFuPjwvYT4gKnJ0c3BzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPiAgICAgICBudW0sCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+ICAgICpjYXBzLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIGJlZm9yZSB0aGUgY2xpZW50IGRlY2lkZXMgdG8gY29uZmlndXJlIHRoZSBzdHJlYW0gPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm51bTwvY29kZT48L2VtPgotIHdpdGgKLTxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jYXBzPC9jb2RlPjwvZW0+Ci0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy1zZWxlY3Qtc3RyZWFtLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnJ0c3BzcmM8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD5hIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+bnVtPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHN0cmVhbSBudW1iZXI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+Y2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzdHJlYW0gY2FwczwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLXNlbGVjdC1zdHJlYW0ucmV0dXJucyI+PC9hPjxoND5SZXR1cm5zPC9oND4KLTxwPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1TdGFuZGFyZC1NYWNyb3MuaHRtbCNUUlVFOkNBUFMiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5UUlVFPC9jb2RlPjwvYT4gd2hlbiB0aGUgc3RyZWFtIHNob3VsZCBiZSBzZWxlY3RlZCwgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjRkFMU0U6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPkZBTFNFPC9jb2RlPjwvYT4gd2hlbiB0aGUgc3RyZWFtCi1pcyB0byBiZSBpZ25vcmVkLjwvcD4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tRklSU1Q6Q0FQUyI+UnVuIEZpcnN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0UlRTUFNyYy1uZXctbWFuYWdlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5ldy1tYW5hZ2Vy4oCdPC9jb2RlPiBzaWduYWw8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+dm9pZDwvc3Bhbj4KLXVzZXJfZnVuY3Rpb24gKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sI0dzdFJUU1BTcmMiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RSVFNQU3JjPC9zcGFuPjwvYT4gKnJ0c3BzcmMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+ICptYW5hZ2VyLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RW1pdGVkIGFmdGVyIGEgbmV3IG1hbmFnZXIgKGxpa2UgcnRwYmluKSB3YXMgY3JlYXRlZCBhbmQgdGhlIGRlZmF1bHQKLXByb3BlcnRpZXMgd2VyZSBjb25maWd1cmVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtbmV3LW1hbmFnZXIucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRzcHNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUU1BTcmM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5tYW5hZ2VyPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+YSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnVzZXJfZGF0YTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnVzZXIgZGF0YSBzZXQgd2hlbiB0aGUgc2lnbmFsIGhhbmRsZXIgd2FzIGNvbm5lY3RlZC48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUZJUlNUOkNBUFMiPlJ1biBGaXJzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAxLjQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFJUU1BTcmMtcmVxdWVzdC1ydGNwLWtleSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlcXVlc3QtcnRjcC1rZXnigJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj5Hc3RDYXBzPC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCNHc3RSVFNQU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0UlRTUFNyYzwvc3Bhbj48L2E+ICpydHNwc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT4gICAgICAgbnVtLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+U2lnbmFsIGVtaXRlZCB0byBnZXQgdGhlIGNyeXB0byBwYXJhbWV0ZXJzIHJlbGV2YW50IHRvIHRoZSBSVENQCi1zdHJlYW0uIFVzZXIgc2hvdWxkIHByb3ZpZGUgdGhlIGtleSBhbmQgdGhlIFJUQ1AgZW5jcnlwdGlvbiBjaXBoZXJzCi1hbmQgYXV0aGVudGljYXRpb24sIGFuZCByZXR1cm4gdGhlbSB3cmFwcGVkIGluIGEgR3N0Q2Fwcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RSVFNQU3JjLXJlcXVlc3QtcnRjcC1rZXkucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+cnRzcHNyYzwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPmEgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwjR3N0UlRTUFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFJUU1BTcmM8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5udW08L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgc3RyZWFtIG51bWJlcjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuNDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2UuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDA1YWZiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zYmNwYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zYmNwYXJzZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHNwc3JjLmh0bWwiIHRpdGxlPSJydHNwc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbCIgdGl0bGU9InNjYWxldGVtcG8iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRzcHNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2UudG9wX29mX3BhZ2UiPjwvYT5zYmNwYXJzZTwvc3Bhbj48L2gyPgotPHA+c2JjcGFyc2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0U2JjUGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2Uub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLmh0bWwjR3N0U2JjUGFyc2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNiY1BhcnNlIj5Hc3RTYmNQYXJzZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0Ij5Hc3RCYXNlUGFyc2U8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNiY1BhcnNlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoZSBzYmNwYXJzZSBlbGVtZW50IHdpbGwgcGFyc2UgYSBibHVldG9vdGggU0JDIGF1ZGlvIHN0cmVhbSBpbnRvCi1mcmFtZXMgYW5kIHRpbWVzdGFtcCB0aGVtIHByb3Blcmx5LjwvcD4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI2LjYuMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb3BhcnNlcnMuaHRtbCNwbHVnaW4tYXVkaW9wYXJzZXJzIj5hdWRpb3BhcnNlcnM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvUGFyc2VyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyNi42LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1zYmM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtc2JjLCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KXsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTYmNQYXJzZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFNiY1BhcnNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U2JjUGFyc2U7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnNiY2RlYywgc2JjZW5jPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUyN2IzYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjk4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zY2FsZXRlbXBvOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLmh0bWwiIHRpdGxlPSJzYmNwYXJzZSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuaHRtbCIgdGl0bGU9InNoYWdhZGVsaWN0diI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8ucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2JjcGFyc2UuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wbyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLnRvcF9vZl9wYWdlIj48L2E+c2NhbGV0ZW1wbzwvc3Bhbj48L2gyPgotPHA+c2NhbGV0ZW1wbzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sI0dzdFNjYWxldGVtcG8tLW92ZXJsYXAiIHRpdGxlPSJUaGUg4oCcb3ZlcmxhcOKAnSBwcm9wZXJ0eSI+b3ZlcmxhcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sI0dzdFNjYWxldGVtcG8tLXJhdGUiIHRpdGxlPSJUaGUg4oCccmF0ZeKAnSBwcm9wZXJ0eSI+cmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sI0dzdFNjYWxldGVtcG8tLXNlYXJjaCIgdGl0bGU9IlRoZSDigJxzZWFyY2jigJ0gcHJvcGVydHkiPnNlYXJjaDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwjR3N0U2NhbGV0ZW1wby0tc3RyaWRlIiB0aXRsZT0iVGhlIOKAnHN0cmlkZeKAnSBwcm9wZXJ0eSI+c3RyaWRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RTY2FsZXRlbXBvIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbCNHc3RTY2FsZXRlbXBvLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTY2FsZXRlbXBvIj5Hc3RTY2FsZXRlbXBvPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RTY2FsZXRlbXBvCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+U2NhbGUgdGVtcG8gd2hpbGUgbWFpbnRhaW5pbmcgcGl0Y2gKLShXU09MQS1saWtlIHRlY2huaXF1ZSB3aXRoIGNyb3NzIGNvcnJlbGF0aW9uKQotSW5zcGlyZWQgYnkgU291bmRUb3VjaCBsaWJyYXJ5IGJ5IE9sbGkgUGFydmlhaW5lbjwvcD4KLTxwPlVzZSBTY2VsZXRlbXBvIHRvIGFwcGx5IHBsYXliYWNrIHJhdGVzIHdpdGhvdXQgdGhlIGNoaXBtdW5rIGVmZmVjdC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI3LjcuNCI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08cD4KLTwvcD4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMzwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ZmlsZXNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm1lZGlhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+ZXh0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBkZWNvZGViaW4gbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmQgXAotICAgIGQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LiAhPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBzY2FsZXRlbXBvIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3NpbmsgXAotICAgIGQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LiAhPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD4KLU9SCi08L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnBsYXliaW4gdXJpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0uLi48L3NwYW4+IGF1ZGlvX3Npbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtzY2FsZXRlbXBvICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsmcXVvdDs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD4KLVdoZW4gYW4gYXBwbGljYXRpb24gc2VuZHMgYSBzZWVrIGV2ZW50IHdpdGggcmF0ZSAhPSAxLjAsIFNjYWxldGVtcG8gYXBwbGllcwotdGhlIHJhdGUgY2hhbmdlIGJ5IHNjYWxpbmcgdGhlIHRlbXBvIHdpdGhvdXQgc2NhbGluZyB0aGUgcGl0Y2guCi0KLVNjYWxldGVtcG8gd29ya3MgYnkgcHJvZHVjaW5nIGF1ZGlvIGluIGNvbnN0YW50IHNpemVkIGNodW5rcwotKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sI0dzdFNjYWxldGVtcG8tLXN0cmlkZSIgdGl0bGU9IlRoZSDigJxzdHJpZGXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxzdHJpZGXigJ08L3NwYW4+PC9hPikgYnV0IGNvbnN1bWluZyBjaHVua3MgcHJvcG9ydGlvbmFsIHRvIHRoZSBwbGF5YmFjawotcmF0ZS4KLQotU2NhbGV0ZW1wbyB0aGVuIHNtb290aHMgdGhlIG91dHB1dCBieSBibGVuZGluZyB0aGUgZW5kIG9mIG9uZSBzdHJpZGUgd2l0aAotdGhlIG5leHQgKDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sI0dzdFNjYWxldGVtcG8tLW92ZXJsYXAiIHRpdGxlPSJUaGUg4oCcb3ZlcmxhcOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnG92ZXJsYXDigJ08L3NwYW4+PC9hPikuCi0KLVNjYWxldGVtcG8gc21vb3RocyB0aGUgb3ZlcmxhcCBmdXJ0aGVyIGJ5IHNlYXJjaGluZyB3aXRoaW4gdGhlIGlucHV0IGJ1ZmZlcgotZm9yIHRoZSBiZXN0IG92ZXJsYXAgcG9zaXRpb24uICBTY2FsZXRlbXBvIHVzZXMgYSBzdGF0aXN0aWNhbCBjcm9zcwotY29ycmVsYXRpb24gKHJvdWdobHkgYSBkb3QtcHJvZHVjdCkuICBTY2FsZXRlbXBvIGNvbnN1bWVzIG1vc3Qgb2YgaXRzIENQVQotY3ljbGVzIGhlcmUuIE9uZSBjYW4gdXNlIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8uaHRtbCNHc3RTY2FsZXRlbXBvLS1zZWFyY2giIHRpdGxlPSJUaGUg4oCcc2VhcmNo4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcc2VhcmNo4oCdPC9zcGFuPjwvYT4gcHJvcGVyeSB0byB0dW5lIGhvdyBmYXIKLXRoZSBhbGdvcml0bSBsb29rcy4KLTwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjcuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvZnguaHRtbCNwbHVnaW4tYXVkaW9meCI+YXVkaW9meDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPlJvdiBKdXZhbm8gJmx0O3Jvdmp1dmFub0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvUmF0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjcuNy41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylGMzJMRSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUY2NExFLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUYzMkxFLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpRjY0TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTY2FsZXRlbXBvLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U2NhbGV0ZW1wbzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFNjYWxldGVtcG87PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNjYWxldGVtcG8ucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNjYWxldGVtcG8tLW92ZXJsYXAiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvdmVybGFw4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvdmVybGFw4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QZXJjZW50YWdlIG9mIHN0cmlkZSB0byBvdmVybGFwLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwLjI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNjYWxldGVtcG8tLXJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyYXRl4oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DdXJyZW50IHBsYXliYWNrIHJhdGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0yLjE0NzQ4ZSswOSwyLjE0NzQ4ZSswOV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTY2FsZXRlbXBvLS1zZWFyY2giPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzZWFyY2jigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNlYXJjaOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TGVuZ3RoIGluIG1pbGxpc2Vjb25kcyB0byBzZWFyY2ggZm9yIGJlc3Qgb3ZlcmxhcCBwb3NpdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDUwMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTY2FsZXRlbXBvLS1zdHJpZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdHJpZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0cmlkZeKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TGVuZ3RoIGluIG1pbGxpc2Vjb25kcyB0byBvdXRwdXQgZWFjaCBzdHJpZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSw1MDAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDMwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4YzEwMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNoYWdhZGVsaWN0djogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zY2FsZXRlbXBvLmh0bWwiIHRpdGxlPSJzY2FsZXRlbXBvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sIiB0aXRsZT0ic2hhcGV3aXBlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2LnRvcF9vZl9wYWdlIj48L2E+c2hhZ2FkZWxpY3R2PC9zcGFuPjwvaDI+Ci08cD5zaGFnYWRlbGljdHY8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0U2hhZ2FkZWxpY1RWIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYWdhZGVsaWN0di5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2Lmh0bWwjR3N0U2hhZ2FkZWxpY1RWLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTaGFnYWRlbGljVFYiPkdzdFNoYWdhZGVsaWNUVjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYWdhZGVsaWN0di5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNoYWdhZGVsaWNUVgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+T2ggYmVoYXZlLCBTaGFnZWRlbGljVFYgbWFrZXMgaW1hZ2VzIHNoYWdhZGVsaWMhPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIyOC42LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHNoYWdhZGVsaWN0diA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvdmlkZW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiBzaGFnYWRlbGljdHYgb24gYSB0ZXN0IHN0cmVhbS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjguNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbCNwbHVnaW4tZWZmZWN0diI+ZWZmZWN0djwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI4LjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSeCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSeCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYWdhZGVsaWN0di5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2hhZ2FkZWxpY1RWLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U2hhZ2FkZWxpY1RWPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U2hhZ2FkZWxpY1RWOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjNjRmZi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhcGV3aXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNoYXBld2lwZTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuaHRtbCIgdGl0bGU9InNoYWdhZGVsaWN0diI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwiIHRpdGxlPSJzaG91dDJzZW5kIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFnYWRlbGljdHYuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUudG9wX29mX3BhZ2UiPjwvYT5zaGFwZXdpcGU8L3NwYW4+PC9oMj4KLTxwPnNoYXBld2lwZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhcGV3aXBlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhcGV3aXBlLmh0bWwjR3N0U2hhcGVXaXBlLS1ib3JkZXIiIHRpdGxlPSJUaGUg4oCcYm9yZGVy4oCdIHByb3BlcnR5Ij5ib3JkZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUuaHRtbCNHc3RTaGFwZVdpcGUtLXBvc2l0aW9uIiB0aXRsZT0iVGhlIOKAnHBvc2l0aW9u4oCdIHByb3BlcnR5Ij5wb3NpdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U2hhcGVXaXBlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhcGV3aXBlLmh0bWwjR3N0U2hhcGVXaXBlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTaGFwZVdpcGUiPkdzdFNoYXBlV2lwZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U2hhcGVXaXBlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGUgc2hhcGV3aXBlIGVsZW1lbnQgcHJvdmlkZXMgY3VzdG9tIHRyYW5zaXRpb25zIG9uIHZpZGVvIHN0cmVhbXMKLWJhc2VkIG9uIGEgZ3JheXNjYWxlIGJpdG1hcC4gVGhlIHN0YXRlIG9mIHRoZSB0cmFuc2l0aW9uIGNhbiBiZQotY29udHJvbGxlZCBieSB0aGUgcG9zaXRpb24gcHJvcGVydHkgYW5kIGFuIG9wdGlvbmFsIGJsZW5kZWQgYm9yZGVyCi1jYW4gYmUgYWRkZWQgYnkgdGhlIGJvcmRlciBwcm9wZXJ0eS48L3A+Ci08cD5UcmFuc2l0aW9uIGJpdG1hcHMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB0aGU8L3A+Ci08YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly9jaW5lbGVycmEub3JnL3RyYW5zaXRpb25zLnBocCIgdGFyZ2V0PSJfdG9wIj5DaW5lbGVycmEgdHJhbnNpdGlvbjwvYT48cD5wYWdlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjkuNy42Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5mb3JtYXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5BWVVWPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+d2lkdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj42NDA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+aGVpZ2h0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NDgwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gc2hhcGV3aXBlIHBvc2l0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC41PC9zcGFuPiBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2hhcGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvbWl4ZXIgbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm1peGVyIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG92aWRlb3NpbmsgICAgIGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5tYXNrPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+cG5nIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB0eXBlZmluZCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZGVjb2RlYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvc2NhbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBzaGFwZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm1hc2tfc2luayAgICB2aWRlb3Rlc3RzcmMgcGF0dGVybjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnNub3cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmZvcm1hdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPkFZVVY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj53aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjY0MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5oZWlnaHQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj40ODA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbWl4ZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBhZGRzIHRoZSB0cmFuc2l0aW9uIGZyb20gbWFzay5wbmcgd2l0aCBwb3NpdGlvbiAwLjUgdG8gYW4gU01QVEUgdGVzdCBzY3JlZW4gYW5kIHNub3cuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjI5LjcuNy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zaGFwZXdpcGUuaHRtbCNwbHVnaW4tc2hhcGV3aXBlIj5zaGFwZXdpcGU8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VkaXRvci9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMjkuNy43LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5tYXNrX3Npbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUdSQVk4LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbikwLzE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpR1JBWTE2X0xFLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbikwLzE8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvX3Npbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2hhcGVXaXBlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U2hhcGVXaXBlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U2hhcGVXaXBlOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaGFwZXdpcGUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNoYXBlV2lwZS0tYm9yZGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYm9yZGVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxib3JkZXLigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Qm9yZGVyIG9mIHRoZSBtYXNrLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaGFwZVdpcGUtLXBvc2l0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9zaXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBvc2l0aW9u4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Qb3NpdGlvbiBvZiB0aGUgbWFzay48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NlMTVjNC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zaG91dDJzZW5kOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sIiB0aXRsZT0ic2hhcGV3aXBlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuaHRtbCIgdGl0bGU9InNtcHRlYWxwaGEiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLnRvcF9vZl9wYWdlIj48L2E+c2hvdXQyc2VuZDwvc3Bhbj48L2gyPgotPHA+c2hvdXQyc2VuZDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS1kZXNjcmlwdGlvbiIgdGl0bGU9IlRoZSDigJxkZXNjcmlwdGlvbuKAnSBwcm9wZXJ0eSI+ZGVzY3JpcHRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tZ2VucmUiIHRpdGxlPSJUaGUg4oCcZ2VucmXigJ0gcHJvcGVydHkiPmdlbnJlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtLWlwIiB0aXRsZT0iVGhlIOKAnGlw4oCdIHByb3BlcnR5Ij5pcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS1tb3VudCIgdGl0bGU9IlRoZSDigJxtb3VudOKAnSBwcm9wZXJ0eSI+bW91bnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tcGFzc3dvcmQiIHRpdGxlPSJUaGUg4oCccGFzc3dvcmTigJ0gcHJvcGVydHkiPnBhc3N3b3JkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tcG9ydCIgdGl0bGU9IlRoZSDigJxwb3J04oCdIHByb3BlcnR5Ij5wb3J0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNob3V0MlNlbmRQcm90b2NvbDwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS1wcm90b2NvbCIgdGl0bGU9IlRoZSDigJxwcm90b2NvbOKAnSBwcm9wZXJ0eSI+cHJvdG9jb2w8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwjR3N0U2hvdXQyc2VuZC0tc3RyZWFtbmFtZSIgdGl0bGU9IlRoZSDigJxzdHJlYW1uYW1l4oCdIHByb3BlcnR5Ij5zdHJlYW1uYW1lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtLXVybCIgdGl0bGU9IlRoZSDigJx1cmzigJ0gcHJvcGVydHkiPnVybDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLS11c2VybmFtZSIgdGl0bGU9IlRoZSDigJx1c2VybmFtZeKAnSBwcm9wZXJ0eSI+dXNlcm5hbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtLXB1YmxpYyIgdGl0bGU9IlRoZSDigJxwdWJsaWPigJ0gcHJvcGVydHkiPnB1YmxpYzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kLWNvbm5lY3Rpb24tcHJvYmxlbSIgdGl0bGU9IlRoZSDigJxjb25uZWN0aW9uLXByb2JsZW3igJ0gc2lnbmFsIj5jb25uZWN0aW9uLXByb2JsZW08L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj5DbGVhbnVwPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFNob3V0MnNlbmQiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sI0dzdFNob3V0MnNlbmQtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNob3V0MnNlbmQiPkdzdFNob3V0MnNlbmQ8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+R3N0QmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNob3V0MnNlbmQKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RTaG91dDJzZW5kIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPnNob3V0MnNlbmQgcHVzaGVzIGEgbWVkaWEgc3RyZWFtIHRvIGFuIEljZWNhc3Qgc2VydmVyPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzMC45LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdXJpZGVjb2RlYmluIHVyaTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmZpbGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8vcGF0aC90by9hdWRpb2ZpbGUgISBhdWRpb2NvbnZlcnQgISB2b3JiaXNlbmMgISBvZ2dtdXggISBzaG91dDJzZW5kIG1vdW50PS9zdHJlYW0ub2dnIHBvcnQ9ODAwMCB1c2VybmFtZT1zb3VyY2UgcGFzc3dvcmQ9c29tZXBhc3N3b3JkIGlwPXNlcnZlcl9JUF9hZGRyZXNzX29yX2hvc3RuYW1lPC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGRlbXV4ZXMsIGRlY29kZXMsIHJlLWVuY29kZXMgYW5kIHJlLW11eGVzIGFuIGF1ZGlvCi1tZWRpYSBmaWxlIGludG8gb2dndm9yYmlzIGFuZCBzZW5kcyB0aGUgcmVzdWx0aW5nIHN0cmVhbSB0byBhbiBJY2VjYXN0Ci1zZXJ2ZXIuIFByb3BlcnRpZXMgbW91bnQsIHBvcnQsIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgYWxsIHNlcnZlci1jb25maWcKLWRlcGVuZGVudC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzAuOS40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNob3V0MnNlbmQuaHRtbCNwbHVnaW4tc2hvdXQyc2VuZCI+c2hvdXQyc2VuZDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7LCBQZWRybyBDb3J0ZS1SZWFsICZsdDt0eXBvQG5ldGNhYm8ucHQmZ3Q7LCBaYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2luay9OZXR3b3JrPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzMC45LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXBwbGljYXRpb24vb2dnPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vb2dnPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vb2dnPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsgMSwgMyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vd2VibTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3dlYm08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNob3V0MnNlbmQtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RTaG91dDJzZW5kPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U2hvdXQyc2VuZDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2hvdXQyc2VuZC0tZGVzY3JpcHRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkZXNjcmlwdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGVzY3JpcHRpb27igJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5kZXNjcmlwdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNob3V0MnNlbmQtLWdlbnJlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZ2VucmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGdlbnJl4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+Z2VucmUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaG91dDJzZW5kLS1pcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGlw4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpcOKAnSAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPklQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIxMjcuMC4wLjEiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaG91dDJzZW5kLS1tb3VudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vdW504oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtb3VudOKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPm1vdW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2hvdXQyc2VuZC0tcGFzc3dvcmQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwYXNzd29yZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccGFzc3dvcmTigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5wYXNzd29yZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogImhhY2ttZSI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNob3V0MnNlbmQtLXBvcnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwb3J04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb3J04oCdICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5wb3J0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzEsNjU1MzVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogODAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U2hvdXQyc2VuZC0tcHJvdG9jb2wiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcm90b2NvbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJvdG9jb2zigJ0gICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTaG91dDJTZW5kUHJvdG9jb2w8L3NwYW4+PC9wcmU+Ci08cD5Db25uZWN0aW9uIFByb3RvY29sIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogSHR0cCBQcm90b2NvbCAoaWNlY2FzdCAyLngpPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaG91dDJzZW5kLS1zdHJlYW1uYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RyZWFtbmFtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RyZWFtbmFtZeKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5uYW1lIG9mIHRoZSBzdHJlYW0uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaG91dDJzZW5kLS11cmwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1cmzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVybOKAnSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+dGhlIHN0cmVhbSdzIGhvbWVwYWdlIFVSTC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNob3V0MnNlbmQtLXVzZXJuYW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlcm5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXJuYW1l4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+dXNlcm5hbWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICJzb3VyY2UiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaG91dDJzZW5kLS1wdWJsaWMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwdWJsaWPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHB1YmxpY+KAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgdGhlIHN0cmVhbSBzaG91bGQgYmUgbGlzdGVkIG9uIHRoZSBzZXJ2ZXIncyBzdHJlYW0gZGlyZWN0b3J5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTaG91dDJzZW5kLWNvbm5lY3Rpb24tcHJvYmxlbSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbm5lY3Rpb24tcHJvYmxlbeKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCNHc3RTaG91dDJzZW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U2hvdXQyc2VuZDwvc3Bhbj48L2E+ICpnc3RzaG91dDJzZW5kLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICAgICBhcmcxLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNncG9pbnRlciI+PHNwYW4gY2xhc3M9InR5cGUiPmdwb2ludGVyPC9zcGFuPjwvYT4gICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPHA+RmxhZ3M6IENsZWFudXA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNjOGE0OS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+c21wdGU6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sIiB0aXRsZT0ic21wdGVhbHBoYSI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCIgdGl0bGU9InNvdXBodHRwY2xpZW50c2luayI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS50b3Bfb2ZfcGFnZSI+PC9hPnNtcHRlPC9zcGFuPjwvaDI+Ci08cD5zbXB0ZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlLmh0bWwjR3N0U01QVEUtLWJvcmRlciIgdGl0bGU9IlRoZSDigJxib3JkZXLigJ0gcHJvcGVydHkiPmJvcmRlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCNHc3RTTVBURS0tZGVwdGgiIHRpdGxlPSJUaGUg4oCcZGVwdGjigJ0gcHJvcGVydHkiPmRlcHRoPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNNUFRFVHJhbnNpdGlvblR5cGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sI0dzdFNNUFRFLS10eXBlIiB0aXRsZT0iVGhlIOKAnHR5cGXigJ0gcHJvcGVydHkiPnR5cGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlLmh0bWwjR3N0U01QVEUtLWR1cmF0aW9uIiB0aXRsZT0iVGhlIOKAnGR1cmF0aW9u4oCdIHByb3BlcnR5Ij5kdXJhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sI0dzdFNNUFRFLS1pbnZlcnQiIHRpdGxlPSJUaGUg4oCcaW52ZXJ04oCdIHByb3BlcnR5Ij5pbnZlcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFNNUFRFIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sI0dzdFNNUFRFLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTTVBURSI+R3N0U01QVEU8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U01QVEUKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+c21wdGUgY2FuIGFjY2VwdCBJNDIwIHZpZGVvIHN0cmVhbXMgd2l0aCB0aGUgc2FtZSB3aWR0aCwgaGVpZ2h0IGFuZAotZnJhbWVyYXRlLiBUaGUgdHdvIGluY29tbWluZyBidWZmZXJzIGFyZSBibGVuZGVkIHRvZ2V0aGVyIHVzaW5nIGFuIGVmZmVjdAotc3BlY2lmaWMgYWxwaGEgbWFzay4gPC9wPgotPHA+VGhlIDxzcGFuIGNsYXNzPSJ0eXBlIj7igJxkZXB0aOKAnTwvc3Bhbj4gcHJvcGVydHkgZGVmaW5lcyB0aGUgcHJlc2lzaW9uIGluIGJpdHMgb2YgdGhlIG1hc2suIEEKLWhpZ2hlciBwcmVzaXNpb24gd2lsbCBjcmVhdGUgYSBtYXNrIHdpdGggc21vb3RoZXIgZ3JhZGllbnRzIGluIG9yZGVyIHRvIGF2b2lkCi1iYW5kaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzIuNy40Ij48L2E+PGgzPlNhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIHBhdHRlcm48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gc21wdGUgbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnMgYm9yZGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjAwMDA8L3NwYW4+IHR5cGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yMzQ8L3NwYW4+IGR1cmF0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjAwMDAwMDAwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geGltYWdlc2luayB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gQSBwaXBlbGluZSB0byBkZW1vbnN0cmF0ZSB0aGUgc21wdGUgdHJhbnNpdGlvbi4KLUl0IHNob3dzIGEgcGlud2hlZWwgdHJhbnNpdGlvbiBhIGZyb20gYSBzbm93IHZpZGVvdGVzdHNyYyB0byBhbiBzbXB0ZQotcGF0dGVybiB2aWRlb3Rlc3RzcmMuIFRoZSB0cmFuc2l0aW9uIHdpbGwgdGFrZSAyIHNlY29uZHMgdG8gY29tcGxldGUuIFRoZQotZWRnZXMgb2YgdGhlIHRyYW5zaXRpb24gYXJlIHNtb290aGVkIHdpdGggYSAyMDAwMCBiaWcgYm9yZGVyLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzMi43LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbCNwbHVnaW4tc21wdGUiPnNtcHRlPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGNoZWxsby5iZSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VkaXRvci9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzIuNy41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rMTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rMjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNNUFRFLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U01QVEU8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTTVBURTs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNNUFRFLS1ib3JkZXIiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxib3JkZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJvcmRlcuKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBib3JkZXIgd2lkdGggb2YgdGhlIHRyYW5zaXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U01QVEUtLWRlcHRoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVwdGjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRlcHRo4oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkRlcHRoIG9mIHRoZSBtYXNrIGluIGJpdHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSwyNF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxNjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U01QVEUtLXR5cGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0eXBl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0eXBl4oCdICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFNNUFRFVHJhbnNpdGlvblR5cGU8L3NwYW4+PC9wcmU+Ci08cD5UaGUgdHlwZSBvZiB0cmFuc2l0aW9uIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogQSBiYXIgbW92ZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTTVBURS0tZHVyYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkdXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZHVyYXRpb27igJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24gZWZmZWN0IGluIG5hbm9zZWNvbmRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDAwMDAwMDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTTVBURS0taW52ZXJ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaW52ZXJ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpbnZlcnTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkludmVydCB0cmFuc2l0aW9uIG1hc2suPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2E2YTU1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNtcHRlYWxwaGE6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hvdXQyc2VuZC5odG1sIiB0aXRsZT0ic2hvdXQyc2VuZCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sIiB0aXRsZT0ic21wdGUiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNob3V0MnNlbmQuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEudG9wX29mX3BhZ2UiPjwvYT5zbXB0ZWFscGhhPC9zcGFuPjwvaDI+Ci08cD5zbXB0ZWFscGhhPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwjR3N0U01QVEVBbHBoYS0tYm9yZGVyIiB0aXRsZT0iVGhlIOKAnGJvcmRlcuKAnSBwcm9wZXJ0eSI+Ym9yZGVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwjR3N0U01QVEVBbHBoYS0tZGVwdGgiIHRpdGxlPSJUaGUg4oCcZGVwdGjigJ0gcHJvcGVydHkiPmRlcHRoPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwjR3N0U01QVEVBbHBoYS0tcG9zaXRpb24iIHRpdGxlPSJUaGUg4oCccG9zaXRpb27igJ0gcHJvcGVydHkiPnBvc2l0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNNUFRFQWxwaGFUcmFuc2l0aW9uVHlwZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuaHRtbCNHc3RTTVBURUFscGhhLS10eXBlIiB0aXRsZT0iVGhlIOKAnHR5cGXigJ0gcHJvcGVydHkiPnR5cGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGVhbHBoYS5odG1sI0dzdFNNUFRFQWxwaGEtLWludmVydCIgdGl0bGU9IlRoZSDigJxpbnZlcnTigJ0gcHJvcGVydHkiPmludmVydDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U01QVEVBbHBoYSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwjR3N0U01QVEVBbHBoYS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0U01QVEVBbHBoYSI+R3N0U01QVEVBbHBoYTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RTTVBURUFscGhhCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+c21wdGVhbHBoYSBjYW4gYWNjZXB0IGFuIEk0MjAgb3IgQVlVViB2aWRlbyBzdHJlYW0uIEFuIGFscGhhIGNoYW5uZWwgaXMgYWRkZWQKLXVzaW5nIGFuIGVmZmVjdCBzcGVjaWZpYyBTTVBURSBtYXNrIGluIHRoZSBJNDIwIGlucHV0IGNhc2UuIEluIHRoZSBBWVVWIGNhc2UsCi10aGUgYWxwaGEgY2hhbm5lbCBpcyBtb2RpZmllZCB1c2luZyB0aGUgZWZmZWN0IHNwZWNpZmljIFNNUFRFIG1hc2suPC9wPgotPHA+VGhlIDxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwb3NpdGlvbuKAnTwvc3Bhbj4gcHJvcGVydHkgaXMgYSBjb250cm9sbGFiZSBkb3VibGUgYmV0d2VlbiAwLjAgYW5kCi0xLjAgdGhhdCBzcGVjaWZpZXMgdGhlIHBvc2l0aW9uIGluIHRoZSB0cmFuc2l0aW9uLiAwLjAgaXMgdGhlIHN0YXJ0IG9mIHRoZQotdHJhbnNpdGlvbiB3aXRoIHRoZSBhbHBoYSBjaGFubmVsIHRvIGNvbXBsZXRlIG9wYXF1ZSB3aGVyZSAxLjAgaGFzIHRoZSBhbHBoYQotY2hhbm5lbCBzZXQgdG8gY29tcGxldGVseSB0cmFuc3BhcmVudC48L3A+Ci08cD5UaGUgPHNwYW4gY2xhc3M9InR5cGUiPuKAnGRlcHRo4oCdPC9zcGFuPiBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBwcmVjaXNpb24gaW4gYml0cyBvZiB0aGUgbWFzay4KLUEgaGlnaGVyIHByZXNpc2lvbiB3aWxsIGNyZWF0ZSBhIG1hc2sgd2l0aCBzbW9vdGhlciBncmFkaWVudHMgaW4gb3JkZXIgdG8KLWF2b2lkIGJhbmRpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzMS43LjUiPjwvYT48aDM+U2FtcGxlIHBpcGVsaW5lczwvaDM+Ci08cD4KLUhlcmUgaXMgYSBwaXBlbGluZSB0byBkZW1vbnN0cmF0ZSB0aGUgc21wdGUgdHJhbnNpdGlvbiA6Ci08L3A+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Ci1nc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgISBzbXB0ZWFscGhhIGJvcmRlcj0yMDAwMCB0eXBlPTQ0Ci1wb3NpdGlvbj0wLjUgISB2aWRlb21peGVyICEgdmlkZW9jb252ZXJ0ICEgeGltYWdlc2luawotPC9wcmU+Ci08cD4KLVRoaXMgc2hvd3MgYSBtaWR3YXkgYm93dGllLWggdHJhbnNpdGlvbiBhIGZyb20gYSB2aWRlb3Rlc3RzcmMgdG8gYQotdHJhbnNwYXJlbnQgaW1hZ2UuIFRoZSBlZGdlcyBvZiB0aGUgdHJhbnNpdGlvbiBhcmUgc21vb3RoZWQgd2l0aCBhCi0yMDAwMCBiaWcgYm9yZGVyLgotPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzMS43LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbCNwbHVnaW4tc21wdGUiPnNtcHRlPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VkaXRvci9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzEuNy42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVYxMiwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUFZVVYsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylBUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSQSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVJHQkEsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylBUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylBWVVWLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQVJHQiwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUJHUkEsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylSR0JBLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQVJHQiwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTTVBURUFscGhhLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U01QVEVBbHBoYTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFNNUFRFQWxwaGE7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNtcHRlYWxwaGEucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNNUFRFQWxwaGEtLWJvcmRlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJvcmRlcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYm9yZGVy4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIGJvcmRlciB3aWR0aCBvZiB0aGUgdHJhbnNpdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTTVBURUFscGhhLS1kZXB0aCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRlcHRo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXB0aOKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZXB0aCBvZiB0aGUgbWFzayBpbiBiaXRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzEsMjRdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTY8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNNUFRFQWxwaGEtLXBvc2l0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9zaXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBvc2l0aW9u4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPlBvc2l0aW9uIG9mIHRoZSB0cmFuc2l0aW9uIGVmZmVjdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U01QVEVBbHBoYS0tdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR5cGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR5cGXigJ0gICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0U01QVEVBbHBoYVRyYW5zaXRpb25UeXBlPC9zcGFuPjwvcHJlPgotPHA+VGhlIHR5cGUgb2YgdHJhbnNpdGlvbiB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEEgYmFyIG1vdmVzIGZyb20gbGVmdCB0byByaWdodDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U01QVEVBbHBoYS0taW52ZXJ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaW52ZXJ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpbnZlcnTigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNldCB0byBUUlVFIHRvIGludmVydCB0aGUgdHJhbnNpdGlvbiBtYXNrIChpZS4gZmxpcCBpdCBob3Jpem9udGFsbHkpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZDdmMDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zb3VwaHR0cGNsaWVudHNpbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCIgdGl0bGU9InNtcHRlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwiIHRpdGxlPSJzb3VwaHR0cHNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc21wdGUuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLnRvcF9vZl9wYWdlIj48L2E+c291cGh0dHBjbGllbnRzaW5rPC9zcGFuPjwvaDI+Ci08cD5zb3VwaHR0cGNsaWVudHNpbms8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLWF1dG9tYXRpYy1yZWRpcmVjdCIgdGl0bGU9IlRoZSDigJxhdXRvbWF0aWMtcmVkaXJlY3TigJ0gcHJvcGVydHkiPmF1dG9tYXRpYy1yZWRpcmVjdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI0dTdHJ2Ij48c3BhbiBjbGFzcz0idHlwZSI+R1N0cnY8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1jb29raWVzIiB0aXRsZT0iVGhlIOKAnGNvb2tpZXPigJ0gcHJvcGVydHkiPmNvb2tpZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnGxvY2F0aW9u4oCdIHByb3BlcnR5Ij5sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sI0dzdFNvdXBIdHRwQ2xpZW50U2luay0tcHJveHkiIHRpdGxlPSJUaGUg4oCccHJveHnigJ0gcHJvcGVydHkiPnByb3h5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1wcm94eS1pZCIgdGl0bGU9IlRoZSDigJxwcm94eS1pZOKAnSBwcm9wZXJ0eSI+cHJveHktaWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLXByb3h5LXB3IiB0aXRsZT0iVGhlIOKAnHByb3h5LXB34oCdIHByb3BlcnR5Ij5wcm94eS1wdzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPHNwYW4gY2xhc3M9InR5cGUiPlNvdXBTZXNzaW9uPC9zcGFuPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1zZXNzaW9uIiB0aXRsZT0iVGhlIOKAnHNlc3Npb27igJ0gcHJvcGVydHkiPnNlc3Npb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLXVzZXItYWdlbnQiIHRpdGxlPSJUaGUg4oCcdXNlci1hZ2VudOKAnSBwcm9wZXJ0eSI+dXNlci1hZ2VudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sI0dzdFNvdXBIdHRwQ2xpZW50U2luay0tdXNlci1pZCIgdGl0bGU9IlRoZSDigJx1c2VyLWlk4oCdIHByb3BlcnR5Ij51c2VyLWlkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS11c2VyLXB3IiB0aXRsZT0iVGhlIOKAnHVzZXItcHfigJ0gcHJvcGVydHkiPnVzZXItcHc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+U291cExvZ2dlckxvZ0xldmVsPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLS1odHRwLWxvZy1sZXZlbCIgdGl0bGU9IlRoZSDigJxodHRwLWxvZy1sZXZlbOKAnSBwcm9wZXJ0eSI+aHR0cC1sb2ctbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sI0dzdFNvdXBIdHRwQ2xpZW50U2luay0tcmV0cmllcyIgdGl0bGU9IlRoZSDigJxyZXRyaWVz4oCdIHByb3BlcnR5Ij5yZXRyaWVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCNHc3RTb3VwSHR0cENsaWVudFNpbmstLXJldHJ5LWRlbGF5IiB0aXRsZT0iVGhlIOKAnHJldHJ5LWRlbGF54oCdIHByb3BlcnR5Ij5yZXRyeS1kZWxheTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmh0bWwjR3N0U291cEh0dHBDbGllbnRTaW5rLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTb3VwSHR0cENsaWVudFNpbmsiPkdzdFNvdXBIdHRwQ2xpZW50U2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay1zdHJ1Y3QiPkdzdEJhc2VTaW5rPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RTb3VwSHR0cENsaWVudFNpbmsKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjMzLjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zb3VwLmh0bWwjcGx1Z2luLXNvdXAiPnNvdXA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EYXZpZCBTY2hsZWVmICZsdDtkc0BlbnRyb3B5d2F2ZS5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjMzLjcuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBjbGllbnRzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSHR0cENsaWVudFNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RTb3VwSHR0cENsaWVudFNpbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTb3VwSHR0cENsaWVudFNpbms7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rLS1hdXRvbWF0aWMtcmVkaXJlY3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxhdXRvbWF0aWMtcmVkaXJlY3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGF1dG9tYXRpYy1yZWRpcmVjdOKAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+QXV0b21hdGljYWxseSBmb2xsb3cgSFRUUCByZWRpcmVjdHMgKEhUVFAgU3RhdHVzIENvZGUgM3h4KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rLS1jb29raWVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29va2llc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29va2llc+KAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI0dTdHJ2Ij48c3BhbiBjbGFzcz0idHlwZSI+R1N0cnY8L3NwYW4+PC9hPjwvcHJlPgotPHA+SFRUUCByZXF1ZXN0IGNvb2tpZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rLS1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvY2F0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb2NhdGlvbuKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlVSSSB0byBzZW5kIHRvLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rLS1wcm94eSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByb3h54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcm94eeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkhUVFAgcHJveHkgc2VydmVyIFVSSS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIdHRwQ2xpZW50U2luay0tcHJveHktaWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcm94eS1pZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJveHktaWTigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD51c2VyIGlkIGZvciBwcm94eSBhdXRoZW50aWNhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIdHRwQ2xpZW50U2luay0tcHJveHktcHciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcm94eS1wd+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJveHktcHfigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD51c2VyIHBhc3N3b3JkIGZvciBwcm94eSBhdXRoZW50aWNhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIdHRwQ2xpZW50U2luay0tc2Vzc2lvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNlc3Npb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNlc3Npb27igJ0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+U291cFNlc3Npb248L3NwYW4+wqAqPC9wcmU+Ci08cD5Tb3VwU2Vzc2lvbiBvYmplY3QgdG8gdXNlIGZvciBjb21tdW5pY2F0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIdHRwQ2xpZW50U2luay0tdXNlci1hZ2VudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZXItYWdlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXItYWdlbnTigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VmFsdWUgb2YgdGhlIFVzZXItQWdlbnQgSFRUUCByZXF1ZXN0IGhlYWRlciBmaWVsZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIkdTdHJlYW1lciBzb3VwaHR0cGNsaWVudHNpbmsgIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rLS11c2VyLWlkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXNlci1pZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXNlci1pZOKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD51c2VyIGlkIGZvciBhdXRoZW50aWNhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIiI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIdHRwQ2xpZW50U2luay0tdXNlci1wdyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZXItcHfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXItcHfigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+dXNlciBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSHR0cENsaWVudFNpbmstLWh0dHAtbG9nLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaHR0cC1sb2ctbGV2ZWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGh0dHAtbG9nLWxldmVs4oCdICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+U291cExvZ2dlckxvZ0xldmVsPC9zcGFuPjwvcHJlPgotPHA+U2V0IGxvZyBsZXZlbCBmb3Igc291cCdzIEhUVFAgc2Vzc2lvbiBsb2cuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFNPVVBfTE9HR0VSX0xPR19OT05FPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSHR0cENsaWVudFNpbmstLXJldHJpZXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXRyaWVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXRyaWVz4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLCB6ZXJvIHRvIGRpc2FibGUsIC0xIHRvIHJldHJ5IGZvcmV2ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEh0dHBDbGllbnRTaW5rLS1yZXRyeS1kZWxheSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJldHJ5LWRlbGF54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXRyeS1kZWxheeKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWxheSBpbiBzZWNvbmRzIGJldHdlZW4gcmV0cmllcyBhZnRlciBhIGZhaWx1cmUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAxPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWFlOWU2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zb3VwaHR0cHNyYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCIgdGl0bGU9InNvdXBodHRwY2xpZW50c2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sIiB0aXRsZT0ic3BlY3RydW0iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cGNsaWVudHNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy50b3Bfb2ZfcGFnZSI+PC9hPnNvdXBodHRwc3JjPC9zcGFuPjwvaDI+Ci08cD5zb3VwaHR0cHNyYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tYXV0b21hdGljLXJlZGlyZWN0IiB0aXRsZT0iVGhlIOKAnGF1dG9tYXRpYy1yZWRpcmVjdOKAnSBwcm9wZXJ0eSI+YXV0b21hdGljLXJlZGlyZWN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjR1N0cnYiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU3Rydjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1jb29raWVzIiB0aXRsZT0iVGhlIOKAnGNvb2tpZXPigJ0gcHJvcGVydHkiPmNvb2tpZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0taXJhZGlvLW1vZGUiIHRpdGxlPSJUaGUg4oCcaXJhZGlvLW1vZGXigJ0gcHJvcGVydHkiPmlyYWRpby1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tbG9jYXRpb24iIHRpdGxlPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiPmxvY2F0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tcHJveHkiIHRpdGxlPSJUaGUg4oCccHJveHnigJ0gcHJvcGVydHkiPnByb3h5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tdXNlci1hZ2VudCIgdGl0bGU9IlRoZSDigJx1c2VyLWFnZW504oCdIHByb3BlcnR5Ij51c2VyLWFnZW50PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLWlzLWxpdmUiIHRpdGxlPSJUaGUg4oCcaXMtbGl2ZeKAnSBwcm9wZXJ0eSI+aXMtbGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXByb3h5LWlkIiB0aXRsZT0iVGhlIOKAnHByb3h5LWlk4oCdIHByb3BlcnR5Ij5wcm94eS1pZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXByb3h5LXB3IiB0aXRsZT0iVGhlIOKAnHByb3h5LXB34oCdIHByb3BlcnR5Ij5wcm94eS1wdzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXVzZXItaWQiIHRpdGxlPSJUaGUg4oCcdXNlci1pZOKAnSBwcm9wZXJ0eSI+dXNlci1pZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXVzZXItcHciIHRpdGxlPSJUaGUg4oCcdXNlci1wd+KAnSBwcm9wZXJ0eSI+dXNlci1wdzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tZXh0cmEtaGVhZGVycyIgdGl0bGU9IlRoZSDigJxleHRyYS1oZWFkZXJz4oCdIHByb3BlcnR5Ij5leHRyYS1oZWFkZXJzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcdGltZW91dOKAnSBwcm9wZXJ0eSI+dGltZW91dDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1jb21wcmVzcyIgdGl0bGU9IlRoZSDigJxjb21wcmVzc+KAnSBwcm9wZXJ0eSI+Y29tcHJlc3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+U291cExvZ2dlckxvZ0xldmVsPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0taHR0cC1sb2ctbGV2ZWwiIHRpdGxlPSJUaGUg4oCcaHR0cC1sb2ctbGV2ZWzigJ0gcHJvcGVydHkiPmh0dHAtbG9nLWxldmVsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLWtlZXAtYWxpdmUiIHRpdGxlPSJUaGUg4oCca2VlcC1hbGl2ZeKAnSBwcm9wZXJ0eSI+a2VlcC1hbGl2ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tcmV0cmllcyIgdGl0bGU9IlRoZSDigJxyZXRyaWVz4oCdIHByb3BlcnR5Ij5yZXRyaWVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tc3NsLWNhLWZpbGUiIHRpdGxlPSJUaGUg4oCcc3NsLWNhLWZpbGXigJ0gcHJvcGVydHkiPnNzbC1jYS1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXNzbC1zdHJpY3QiIHRpdGxlPSJUaGUg4oCcc3NsLXN0cmljdOKAnSBwcm9wZXJ0eSI+c3NsLXN0cmljdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1zc2wtdXNlLXN5c3RlbS1jYS1maWxlIiB0aXRsZT0iVGhlIOKAnHNzbC11c2Utc3lzdGVtLWNhLWZpbGXigJ0gcHJvcGVydHkiPnNzbC11c2Utc3lzdGVtLWNhLWZpbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dUbHNEYXRhYmFzZS5odG1sI0dUbHNEYXRhYmFzZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVGxzRGF0YWJhc2U8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tdGxzLWRhdGFiYXNlIiB0aXRsZT0iVGhlIOKAnHRscy1kYXRhYmFzZeKAnSBwcm9wZXJ0eSI+dGxzLWRhdGFiYXNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tbWV0aG9kIiB0aXRsZT0iVGhlIOKAnG1ldGhvZOKAnSBwcm9wZXJ0eSI+bWV0aG9kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HVGxzSW50ZXJhY3Rpb24uaHRtbCNHVGxzSW50ZXJhY3Rpb24tc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R1Rsc0ludGVyYWN0aW9uPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtLXRscy1pbnRlcmFjdGlvbiIgdGl0bGU9IlRoZSDigJx0bHMtaW50ZXJhY3Rpb27igJ0gcHJvcGVydHkiPnRscy1pbnRlcmFjdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmh0bWwjR3N0U291cEhUVFBTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNvdXBIVFRQU3JjIj5Hc3RTb3VwSFRUUFNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNvdXBIVFRQU3JjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFNvdXBIVFRQU3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBwbHVnaW4gcmVhZHMgZGF0YSBmcm9tIGEgcmVtb3RlIGxvY2F0aW9uIHNwZWNpZmllZCBieSBhIFVSSS4KLVN1cHBvcnRlZCBwcm90b2NvbHMgYXJlICdodHRwJywgJ2h0dHBzJy48L3A+Ci08cD5BbiBIVFRQIHByb3h5IG11c3QgYmUgc3BlY2lmaWVkIGJ5IGl0cyBVUkwuCi1JZiB0aGUgImh0dHBfcHJveHkiIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgaXRzIHZhbHVlIGlzIHVzZWQuCi1JZiBidWlsdCB3aXRoIGxpYnNvdXAncyBHTk9NRSBpbnRlZ3JhdGlvbiBmZWF0dXJlcywgdGhlIEdOT01FIHByb3h5Ci1jb25maWd1cmF0aW9uIHdpbGwgYmUgdXNlZCwgb3IgZmFpbGluZyB0aGF0LCBwcm94eSBhdXRvZGV0ZWN0aW9uLgotVGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0tcHJveHkiIHRpdGxlPSJUaGUg4oCccHJveHnigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwcm94eeKAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LjwvcD4KLTxwPkluIGNhc2UgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuaHRtbCNHc3RTb3VwSFRUUFNyYy0taXJhZGlvLW1vZGUiIHRpdGxlPSJUaGUg4oCcaXJhZGlvLW1vZGXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxpcmFkaW8tbW9kZeKAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIHNldCBhbmQgdGhlIGxvY2F0aW9uIGlzCi1hbiBIVFRQIHJlc291cmNlLCBzb3VwaHR0cHNyYyB3aWxsIHNlbmQgc3BlY2lhbCBJY2VjYXN0IEhUVFAgaGVhZGVycyB0byB0aGUKLXNlcnZlciB0byByZXF1ZXN0IGFkZGl0aW9uYWwgSWNlY2FzdCBtZXRhLWluZm9ybWF0aW9uLgotSWYgdGhlIHNlcnZlciBpcyBub3QgYW4gSWNlY2FzdCBzZXJ2ZXIsIGl0IHdpbGwgYmVoYXZlIGFzIGlmIHRoZQotPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sI0dzdFNvdXBIVFRQU3JjLS1pcmFkaW8tbW9kZSIgdGl0bGU9IlRoZSDigJxpcmFkaW8tbW9kZeKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGlyYWRpby1tb2Rl4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgd2VyZSBub3Qgc2V0LiBJZiBpdCBpcywgc291cGh0dHBzcmMgd2lsbAotb3V0cHV0IGRhdGEgd2l0aCBhIG1lZGlhIHR5cGUgb2YgYXBwbGljYXRpb24veC1pY3ksIGluIHdoaWNoIGNhc2UgeW91IHdpbGwKLW5lZWQgdG8gdXNlIHRoZSA8c3BhbiBjbGFzcz0idHlwZSI+SUNZRGVtdXg8L3NwYW4+IGVsZW1lbnQgYXMgZm9sbG93LXVwIGVsZW1lbnQgdG8gZXh0cmFjdCB0aGUgSWNlY2FzdAotbWV0YWRhdGEgYW5kIHRvIGRldGVybWluZSB0aGUgdW5kZXJseWluZyBtZWRpYSB0eXBlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzQuOC41Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgc291cGh0dHBzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5odHRwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vL3NvbWUuc2VydmVyLm9yZy9pbmRleC5odG1sPC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49Lzwvc3Bhbj5ob21lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+am9lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+c2VydmVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+aHRtbDwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGUgYWJvdmUgcGlwZWxpbmUgcmVhZHMgYSB3ZWIgcGFnZSBmcm9tIGEgc2VydmVyIHVzaW5nIHRoZSBIVFRQUyBwcm90b2NvbAotYW5kIHdyaXRlcyBpdCB0byBhIGxvY2FsIGZpbGUuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQ8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBzb3VwaHR0cHNyYyB1c2VyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YWdlbnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtGb29QbGF5ZXIgMC45OSBiZXRhJnF1b3Q7PC9zcGFuPgotICAgIGF1dG9tYXRpYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJlZGlyZWN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmZhbHNlPC9zcGFuPiBwcm94eTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmh0dHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly9wcm94eS5pbnRyYW5ldC5sb2NhbDo4MDgwPC9zcGFuPgotICAgIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+aHR0cDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vL211c2ljLmZvb2Jhci5jb20vZGVtby5tcDMgISBtYWQgISBhdWRpb2NvbnZlcnQ8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvcmVzYW1wbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGFsc2FzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoZSBhYm92ZSBwaXBlbGluZSB3aWxsIHJlYWQgYW5kIGRlY29kZSBhbmQgcGxheSBhbiBtcDMgZmlsZSBmcm9tIGEKLXdlYiBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuIElmIHRoZSBzZXJ2ZXIgc2VuZHMgcmVkaXJlY3RzLAotdGhlIHJlcXVlc3QgZmFpbHMgaW5zdGVhZCBvZiBmb2xsb3dpbmcgdGhlIHJlZGlyZWN0LiBUaGUgc3BlY2lmaWVkCi1IVFRQIHByb3h5IHNlcnZlciBpcyB1c2VkLiBUaGUgVXNlci1BZ2VudCBIVFRQIHJlcXVlc3QgaGVhZGVyCi1pcyBzZXQgdG8gYSBjdXN0b20gc3RyaW5nIGluc3RlYWQgb2YgIkdTdHJlYW1lciBzb3VwaHR0cHNyYy4iCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQ8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBzb3VwaHR0cHNyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmh0dHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly8xMC4xMS4xMi4xMy9tanBlZzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG88L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+dGltZXN0YW1wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRydWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdWx0aXBhcnRkZW11eAotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBpbWFnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPmpwZWc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj53aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjY0MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5oZWlnaHQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj40ODA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtYXRyb3NrYW11eAotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm1qcGVnPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bWt2PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoZSBhYm92ZSBwaXBlbGluZSByZWFkcyBhIG1vdGlvbiBKUEVHIHN0cmVhbSBmcm9tIGFuIElQIGNhbWVyYQotdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wsIGVuY29kZWQgYXMgbWltZS9tdWx0aXBhcnQgaW1hZ2UvanBlZwotcGFydHMsIGFuZCB3cml0ZXMgYSBNYXRyb3NrYSBtb3Rpb24gSlBFRyBmaWxlLiBUaGUgd2lkdGggYW5kCi1oZWlnaHQgcHJvcGVydGllcyBhcmUgc2V0IGluIHRoZSBjYXBzIHRvIHByb3ZpZGUgdGhlIE1hdHJvc2thCi1tdWx0aXBsZXhlciB3aXRoIHRoZSBpbmZvcm1hdGlvbiB0byBzZXQgdGhpcyBpbiB0aGUgaGVhZGVyLgotVGltZXN0YW1wcyBhcmUgc2V0IG9uIHRoZSBidWZmZXJzIGFzIHRoZXkgYXJyaXZlIGZyb20gdGhlIGNhbWVyYS4KLVRoZXNlIGFyZSB1c2VkIGJ5IHRoZSBtaW1lL211bHRpcGFydCBkZW11bHRpcGxleGVyIHRvIGVtaXQgdGltZXN0YW1wcwotb24gdGhlIEpQRUctZW5jb2RlZCB2aWRlbyBmcmFtZSBidWZmZXJzLiBUaGlzIGFsbG93cyB0aGUgTWF0cm9za2EKLW11bHRpcGxleGVyIHRvIHRpbWVzdGFtcCB0aGUgZnJhbWVzIGluIHRoZSByZXN1bHRpbmcgZmlsZS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzQuOC42LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNvdXAuaHRtbCNwbHVnaW4tc291cCI+c291cDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldvdXRlciBDbG9ldGVucyAmbHQ7d291dGVyQG1pbmQuYmUmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9OZXR3b3JrPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzNC44LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc291cGh0dHBzcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFNvdXBIVFRQU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U291cEhUVFBTcmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwc3JjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tYXV0b21hdGljLXJlZGlyZWN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXV0b21hdGljLXJlZGlyZWN04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhdXRvbWF0aWMtcmVkaXJlY3TigJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkF1dG9tYXRpY2FsbHkgZm9sbG93IEhUVFAgcmVkaXJlY3RzIChIVFRQIFN0YXR1cyBDb2RlIDN4eCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIVFRQU3JjLS1jb29raWVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29va2llc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29va2llc+KAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI0dTdHJ2Ij48c3BhbiBjbGFzcz0idHlwZSI+R1N0cnY8L3NwYW4+PC9hPjwvcHJlPgotPHA+SFRUUCByZXF1ZXN0IGNvb2tpZXMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLWlyYWRpby1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaXJhZGlvLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGlyYWRpby1tb2Rl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+RW5hYmxlIGludGVybmV0IHJhZGlvIG1vZGUgKGFzayBzZXJ2ZXIgdG8gc2VuZCBzaG91dGNhc3QvaWNlY2FzdCBtZXRhZGF0YSBpbnRlcmxlYXZlZCB3aXRoIHRoZSBhY3R1YWwgc3RyZWFtIGRhdGEpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb2NhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9jYXRpb27igJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5Mb2NhdGlvbiB0byByZWFkIGZyb20uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tcHJveHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcm94eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccHJveHnigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5IVFRQIHByb3h5IHNlcnZlciBVUkkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tdXNlci1hZ2VudCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZXItYWdlbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXItYWdlbnTigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VmFsdWUgb2YgdGhlIFVzZXItQWdlbnQgSFRUUCByZXF1ZXN0IGhlYWRlciBmaWVsZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIkdTdHJlYW1lciBzb3VwaHR0cHNyYyAiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0taXMtbGl2ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGlzLWxpdmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGlzLWxpdmXigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+QWN0IGxpa2UgYSBsaXZlIHNvdXJjZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIVFRQU3JjLS1wcm94eS1pZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHByb3h5LWlk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwcm94eS1pZOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkhUVFAgcHJveHkgVVJJIHVzZXIgaWQgZm9yIGF1dGhlbnRpY2F0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLXByb3h5LXB3Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccHJveHktcHfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHByb3h5LXB34oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+SFRUUCBwcm94eSBVUkkgdXNlciBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tdXNlci1pZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZXItaWTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXItaWTigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+SFRUUCBsb2NhdGlvbiBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tdXNlci1wdyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZXItcHfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZXItcHfigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+SFRUUCBsb2NhdGlvbiBVUkkgdXNlciBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tZXh0cmEtaGVhZGVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGV4dHJhLWhlYWRlcnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4dHJhLWhlYWRlcnPigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5FeHRyYSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgSFRUUCByZXF1ZXN0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIVFRQU3JjLS10aW1lb3V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGltZW91dOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGltZW91dOKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5WYWx1ZSBpbiBzZWNvbmRzIHRvIHRpbWVvdXQgYSBibG9ja2luZyBJL08gKDAgPSBObyB0aW1lb3V0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDM2MDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxNTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLWNvbXByZXNzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29tcHJlc3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNvbXByZXNz4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+QWxsb3cgY29tcHJlc3NlZCBjb250ZW50IGVuY29kaW5ncy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNvdXBIVFRQU3JjLS1odHRwLWxvZy1sZXZlbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGh0dHAtbG9nLWxldmVs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxodHRwLWxvZy1sZXZlbOKAnSAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPlNvdXBMb2dnZXJMb2dMZXZlbDwvc3Bhbj48L3ByZT4KLTxwPlNldCBsb2cgbGV2ZWwgZm9yIHNvdXAncyBIVFRQIHNlc3Npb24gbG9nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBTT1VQX0xPR0dFUl9MT0dfSEVBREVSUzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLWtlZXAtYWxpdmUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxrZWVwLWFsaXZl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxrZWVwLWFsaXZl4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSBIVFRQIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tcmV0cmllcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJldHJpZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJldHJpZXPigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgdW50aWwgZ2l2aW5nIHVwICgtMT1pbmZpbml0ZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLXNzbC1jYS1maWxlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3NsLWNhLWZpbGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNzbC1jYS1maWxl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TG9jYXRpb24gb2YgYSBTU0wgYW5jaG9yIENBIGZpbGUgdG8gdXNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tc3NsLXN0cmljdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNzbC1zdHJpY3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNzbC1zdHJpY3TigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U3RyaWN0IFNTTCBjZXJ0aWZpY2F0ZSBjaGVja2luZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLXNzbC11c2Utc3lzdGVtLWNhLWZpbGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzc2wtdXNlLXN5c3RlbS1jYS1maWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzc2wtdXNlLXN5c3RlbS1jYS1maWxl4oCdICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlVzZSBzeXN0ZW0gQ0EgZmlsZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLXRscy1kYXRhYmFzZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRscy1kYXRhYmFzZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGxzLWRhdGFiYXNl4oCdICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dUbHNEYXRhYmFzZS5odG1sI0dUbHNEYXRhYmFzZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVGxzRGF0YWJhc2U8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VExTIGRhdGFiYXNlIHdpdGggYW5jaG9yIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTb3VwSFRUUFNyYy0tbWV0aG9kIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWV0aG9k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtZXRob2TigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBIVFRQIG1ldGhvZCB0byB1c2UgKEdFVCwgSEVBRCwgT1BUSU9OUywgZXRjKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U291cEhUVFBTcmMtLXRscy1pbnRlcmFjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRscy1pbnRlcmFjdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGxzLWludGVyYWN0aW9u4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dUbHNJbnRlcmFjdGlvbi5odG1sI0dUbHNJbnRlcmFjdGlvbi1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVGxzSW50ZXJhY3Rpb248L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+QSBHVGxzSW50ZXJhY3Rpb24gb2JqZWN0IHRvIGJlIHVzZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBvciBjZXJ0aWZpY2F0ZSBkYXRhYmFzZSBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlIHVzZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGVkMjJmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTc2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zcGVjdHJ1bTogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sIiB0aXRsZT0ic291cGh0dHBzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuaHRtbCIgdGl0bGU9InNwZWV4ZGVjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLnRvcF9vZl9wYWdlIj48L2E+c3BlY3RydW08L3NwYW4+PC9oMj4KLTxwPnNwZWN0cnVtPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1iYW5kcyIgdGl0bGU9IlRoZSDigJxiYW5kc+KAnSBwcm9wZXJ0eSI+YmFuZHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tLWludGVydmFsIiB0aXRsZT0iVGhlIOKAnGludGVydmFs4oCdIHByb3BlcnR5Ij5pbnRlcnZhbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCNHc3RTcGVjdHJ1bS0tdGhyZXNob2xkIiB0aXRsZT0iVGhlIOKAnHRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+dGhyZXNob2xkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tLW1lc3NhZ2UtbWFnbml0dWRlIiB0aXRsZT0iVGhlIOKAnG1lc3NhZ2UtbWFnbml0dWRl4oCdIHByb3BlcnR5Ij5tZXNzYWdlLW1hZ25pdHVkZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1tZXNzYWdlLXBoYXNlIiB0aXRsZT0iVGhlIOKAnG1lc3NhZ2UtcGhhc2XigJ0gcHJvcGVydHkiPm1lc3NhZ2UtcGhhc2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCNHc3RTcGVjdHJ1bS0tcG9zdC1tZXNzYWdlcyIgdGl0bGU9IlRoZSDigJxwb3N0LW1lc3NhZ2Vz4oCdIHByb3BlcnR5Ij5wb3N0LW1lc3NhZ2VzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tLW11bHRpLWNoYW5uZWwiIHRpdGxlPSJUaGUg4oCcbXVsdGktY2hhbm5lbOKAnSBwcm9wZXJ0eSI+bXVsdGktY2hhbm5lbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U3BlY3RydW0iPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNwZWN0cnVtIj5Hc3RTcGVjdHJ1bTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0YXVkaW9maWx0ZXIuaHRtbCNHc3RBdWRpb0ZpbHRlci1zdHJ1Y3QiPkdzdEF1ZGlvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U3BlY3RydW0KLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhlIFNwZWN0cnVtIGVsZW1lbnQgYW5hbHl6ZXMgdGhlIGZyZXF1ZW5jeSBzcGVjdHJ1bSBvZiBhbiBhdWRpbyBzaWduYWwuCi1JZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1wb3N0LW1lc3NhZ2VzIiB0aXRsZT0iVGhlIOKAnHBvc3QtbWVzc2FnZXPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwb3N0LW1lc3NhZ2Vz4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RhbmRhcmQtTWFjcm9zLmh0bWwjVFJVRTpDQVBTIj48c3BhbiBjbGFzcz0idHlwZSI+VFJVRTwvc3Bhbj48L2E+LCBpdCBzZW5kcyBhbmFseXNpcyByZXN1bHRzCi1hcyBlbGVtZW50IG1lc3NhZ2VzIG5hbWVkPC9wPgotPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InNwZWN0cnVtIjwvY29kZT4gYWZ0ZXIgZWFjaCBpbnRlcnZhbCBvZiB0aW1lIGdpdmVuCi08cD5ieSB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1pbnRlcnZhbCIgdGl0bGU9IlRoZSDigJxpbnRlcnZhbOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnGludGVydmFs4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkuPC9wPgotPHA+VGhlIG1lc3NhZ2UncyBzdHJ1Y3R1cmUgY29udGFpbnMgc29tZSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmaWVsZHM6PC9wPgotPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4idGltZXN0YW1wIjwvY29kZT46Ci0gIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+InN0cmVhbS10aW1lIjwvY29kZT46Ci0gIHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVyLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4icnVubmluZy10aW1lIjwvY29kZT46Ci0gIHRoZSBydW5uaW5nX3RpbWUgb2YgdGhlIGJ1ZmZlci4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENsb2NrLmh0bWwjR3N0Q2xvY2tUaW1lIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2xvY2tUaW1lPC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+ImR1cmF0aW9uIjwvY29kZT46Ci0gIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLgotICA8L3A+PC9saT4KLTxsaSBjbGFzcz0ibGlzdGl0ZW0iPjxwPgotICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2xvY2suaHRtbCNHc3RDbG9ja1RpbWUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDbG9ja1RpbWU8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4iZW5kdGltZSI8L2NvZGU+OgotICB0aGUgZW5kIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZSBhcyBzdHJlYW0gdGltZSAodGhpcwotICBpcyBkZXByZWNhdGVkLCBhcyBpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHN0cmVhbS10aW1lICsgZHVyYXRpb24pCi0gIDwvcD48L2xpPgotPGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWYWx1ZUxpc3Q8L3NwYW4+IG9mIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT4KLSAgPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+Im1hZ25pdHVkZSI8L2NvZGU+OgotICB0aGUgbGV2ZWwgZm9yIGVhY2ggZnJlcXVlbmN5IGJhbmQgaW4gZEIuIEFsbCB2YWx1ZXMgYmVsb3cgdGhlIHZhbHVlIG9mIHRoZQotICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwjR3N0U3BlY3RydW0tLXRocmVzaG9sZCIgdGl0bGU9IlRoZSDigJx0aHJlc2hvbGTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJx0aHJlc2hvbGTigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSB3aWxsIGJlIHNldCB0byB0aGUgdGhyZXNob2xkLiBPbmx5IHByZXNlbnQKLSAgaWYgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCNHc3RTcGVjdHJ1bS0tbWVzc2FnZS1tYWduaXR1ZGUiIHRpdGxlPSJUaGUg4oCcbWVzc2FnZS1tYWduaXR1ZGXigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtZXNzYWdlLW1hZ25pdHVkZeKAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi4KLSAgPC9wPjwvbGk+Ci08bGkgY2xhc3M9Imxpc3RpdGVtIj48cD4KLSAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFZhbHVlTGlzdDwvc3Bhbj4gb2YgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4icGhhc2UiPC9jb2RlPjoKLSAgVGhlIHBoYXNlIGZvciBlYWNoIGZyZXF1ZW5jeSBiYW5kLiBUaGUgdmFsdWUgaXMgYmV0d2VlbiAtcGkgYW5kIHBpLiBPbmx5Ci0gIHByZXNlbnQgaWYgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uaHRtbCNHc3RTcGVjdHJ1bS0tbWVzc2FnZS1waGFzZSIgdGl0bGU9IlRoZSDigJxtZXNzYWdlLXBoYXNl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbWVzc2FnZS1waGFzZeKAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPi4KLSAgPC9wPjwvbGk+Ci08L3VsPjwvZGl2PgotPHA+SWYgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sI0dzdFNwZWN0cnVtLS1tdWx0aS1jaGFubmVsIiB0aXRsZT0iVGhlIOKAnG11bHRpLWNoYW5uZWzigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtdWx0aS1jaGFubmVs4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuIG1hZ25pdHVkZSBhbmQgcGhhc2UKLWZpZWxkcyB3aWxsIGJlIGVhY2ggYSBuZXN0ZWQgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENvbnRyb2xTb3VyY2UuaHRtbCNHc3RWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmFsdWVBcnJheTwvc3Bhbj48L2E+LiBUaGUgZmlyc3QgZGltZW5zaW9uIGFyZSB0aGUKLWNoYW5uZWxzIGFuZCB0aGUgc2Vjb25kIGRpbWVuc2lvbiBhcmUgdGhlIHZhbHVlcy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM2LjcuOCI+PC9hPjxoMz5FeGFtcGxlIGFwcGxpY2F0aW9uPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi0xMgotMTMKLTE0Ci0xNQotMTYKLTE3Ci0xOAotMTkKLTIwCi0yMQotMjIKLTIzCi0yNAotMjUKLTI2Ci0yNwotMjgKLTI5Ci0zMAotMzEKLTMyCi0zMwotMzQKLTM1Ci0zNgotMzcKLTM4Ci0zOQotNDAKLTQxCi00MgotNDMKLTQ0Ci00NQotNDYKLTQ3Ci00OAotNDkKLTUwCi01MQotNTIKLTUzCi01NAotNTUKLTU2Ci01NwotNTgKLTU5Ci02MAotNjEKLTYyCi02MwotNjQKLTY1Ci02NgotNjcKLTY4Ci02OQotNzAKLTcxCi03MgotNzMKLTc0Ci03NQotNzYKLTc3Ci03OAotNzkKLTgwCi04MQotODIKLTgzCi04NAotODUKLTg2Ci04NwotODgKLTg5Ci05MAotOTEKLTkyCi05MwotOTQKLTk1Ci05NgotOTcKLTk4Ci05OQotMTAwCi0xMDEKLTEwMgotMTAzCi0xMDQKLTEwNQotMTA2Ci0xMDcKLTEwOAotMTA5Ci0xMTAKLTExMQotMTEyCi0xMTMKLTExNAotMTE1Ci0xMTYKLTExNwotMTE4Ci0xMTkKLTEyMAotMTIxCi0xMjIKLTEyMwotMTI0PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iY29tbWVudCI+LyogR1N0cmVhbWVyPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pYyYjNjQ7dXNlcnMuc2YubmV0Jmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIFNjaG1pZHQgJmx0O2phbi5zY2htaWR0JiM2NDtzdW4uY29tJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLDwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVTwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICo8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWM8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGU8L3NwYW4+Ci08c3BhbiBjbGFzcz0iY29tbWVudCI+ICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsPC9zcGFuPgotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPiAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLjwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJjb21tZW50Ij4gKi88L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDs8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIHBwYyI+I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0Ozwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBwcGMiPiNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7PC9zcGFuPgotCi08c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+c3RhdGljPC9zcGFuPiBndWludCBzcGVjdF9iYW5kcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2MgcHBjIj4jZGVmaW5lIEFVRElPRlJFUSAzMjAwMDwvc3Bhbj4KLQotPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8qIHJlY2VpdmUgc3BlY3RyYWwgZGF0YSBmcm9tIGVsZW1lbnQgbWVzc2FnZSAqLzwvc3Bhbj4KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5zdGF0aWM8L3NwYW4+IGdib29sZWFuCi08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm1lc3NhZ2VfaGFuZGxlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+R3N0QnVzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPiBidXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR3N0TWVzc2FnZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj4gbWVzc2FnZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBncG9pbnRlciBkYXRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ezwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tZXNzYWdlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi0mZ3Q7PC9zcGFuPnR5cGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj09PC9zcGFuPiBHU1RfTUVTU0FHRV9FTEVNRU5UPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikgezwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y29uc3Q8L3NwYW4+IEdzdFN0cnVjdHVyZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5zIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RNZXNzYWdlLmh0bWwjZ3N0LW1lc3NhZ2UtZ2V0LXN0cnVjdHVyZSI+Z3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1lc3NhZ2U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNvbnN0PC9zcGFuPiBnY2hhciA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5uYW1lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNnc3Qtc3RydWN0dXJlLWdldC1uYW1lIj5nc3Rfc3RydWN0dXJlX2dldF9uYW1lPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICBHc3RDbG9ja1RpbWUgZW5kdGltZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotCi0gICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZnVuY3Rpb24iPnN0cmNtcDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtzcGVjdHJ1bSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSA9PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSB7PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNvbnN0PC9zcGFuPiBHVmFsdWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+bWFnbml0dWRlczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNvbnN0PC9zcGFuPiBHVmFsdWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+cGhhc2VzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIGt3YiI+Y29uc3Q8L3NwYW4+IEdWYWx1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5tYWc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPnBoYXNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gICAgICBnZG91YmxlIGZyZXE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgICAgIGd1aW50IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLQotICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmlmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KCE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtY2xvY2stdGltZSI+Z3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7ZW5kdGltZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAmYW1wOzwvc3Bhbj5lbmR0aW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpPC9zcGFuPgotICAgICAgICBlbmR0aW1lIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiBHU1RfQ0xPQ0tfVElNRV9OT05FPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7TmV3IHNwZWN0cnVtIG1lc3NhZ2UsIGVuZHRpbWUgJSZxdW90Ozwvc3Bhbj4gR1NUX1RJTUVfRk9STUFUIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMGdzdHJlYW1lci1Hc3RJbmZvLmh0bWwjR1NULVRJTUUtQVJHUzpDQVBTIj5HU1RfVElNRV9BUkdTPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZW5kdGltZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pKTs8L3NwYW4+Ci0KLSAgICAgIG1hZ25pdHVkZXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI2dzdC1zdHJ1Y3R1cmUtZ2V0LXZhbHVlIj5nc3Rfc3RydWN0dXJlX2dldF92YWx1ZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bWFnbml0dWRlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICAgIHBoYXNlcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjZ3N0LXN0cnVjdHVyZS1nZXQtdmFsdWUiPmdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+czxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtwaGFzZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5mb3I8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZsdDs8L3NwYW4+IHNwZWN0X2JhbmRzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjsgKys8L3NwYW4+aTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gICAgICAgIGZyZXEgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0gKDwvc3Bhbj5nZG91YmxlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikgKCg8L3NwYW4+QVVESU9GUkVRIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pICo8L3NwYW4+IGkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPis8L3NwYW4+IEFVRElPRlJFUSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+NDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSAvPC9zcGFuPiBzcGVjdF9iYW5kczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotICAgICAgICBtYWcgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMGdzdHJlYW1lci1Hc3RWYWx1ZS5odG1sI2dzdC12YWx1ZS1saXN0LWdldC12YWx1ZSI+Z3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bWFnbml0dWRlczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgICAgICBwaGFzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFZhbHVlLmh0bWwjZ3N0LXZhbHVlLWxpc3QtZ2V0LXZhbHVlIj5nc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5waGFzZXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gaTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPm1hZyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+IT08L3NwYW4+IE5VTEwgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiZhbXA7JmFtcDs8L3NwYW4+IHBoYXNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPTwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHs8L3NwYW4+Ci0gICAgICAgICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1XYXJuaW5ncy1hbmQtQXNzZXJ0aW9ucy5odG1sI2ctcHJpbnQiPmdfcHJpbnQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtiYW5kICVkIChmcmVxICVnKTogbWFnbml0dWRlICVmIGRCIHBoYXNlICVmPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGk8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gZnJlcTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPgotICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVN0YW5kYXJkLVBhcmFtZXRlci1hbmQtVmFsdWUtVHlwZXMuaHRtbCNnLXZhbHVlLWdldC1mbG9hdCI+Z192YWx1ZV9nZXRfZmxvYXQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5tYWc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU3RhbmRhcmQtUGFyYW1ldGVyLWFuZC1WYWx1ZS1UeXBlcy5odG1sI2ctdmFsdWUtZ2V0LWZsb2F0Ij5nX3ZhbHVlX2dldF9mbG9hdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnBoYXNlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpOzwvc3Bhbj4KLSAgICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItV2FybmluZ3MtYW5kLUFzc2VydGlvbnMuaHRtbCNnLXByaW50Ij5nX3ByaW50PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICAgIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij59PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+Ci0KLTxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+Ci08c3BhbiBjbGFzcz0iZnVuY3Rpb24iPm1haW48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mga3diIj5pbnQ8L3NwYW4+IGFyZ2M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmNoYXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qPC9zcGFuPmFyZ3Y8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+W10pPC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPns8L3NwYW4+Ci0gIEdzdEVsZW1lbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+YmluPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdzdEVsZW1lbnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPio8L3NwYW4+c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5hdWRpb2NvbnZlcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LCAqPC9zcGFuPnNwZWN0cnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgKjwvc3Bhbj5zaW5rPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdzdEJ1cyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5idXM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ozwvc3Bhbj4KLSAgR3N0Q2FwcyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5jYXBzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0gIEdNYWluTG9vcCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Kjwvc3Bhbj5sb29wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdC5odG1sI2dzdC1pbml0Ij5nc3RfaW5pdDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oJmFtcDs8L3NwYW4+YXJnYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sICZhbXA7PC9zcGFuPmFyZ3Y8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgYmluIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQaXBlbGluZS5odG1sI2dzdC1waXBlbGluZS1uZXciPmdzdF9waXBlbGluZV9uZXc8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtiaW4mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvdGVzdHNyYyZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c3JjJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXNldCI+Z19vYmplY3Rfc2V0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0ctT0JKRUNUOkNBUFMiPkdfT0JKRUNUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiksPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDt3YXZlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtmcmVxJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj42MDAwLjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IE5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudEZhY3RvcnkuaHRtbCNnc3QtZWxlbWVudC1mYWN0b3J5LW1ha2UiPmdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2F1ZGlvY29udmVydCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1UZXN0aW5nLmh0bWwjZy1hc3NlcnQiPmdfYXNzZXJ0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YXVkaW9jb252ZXJ0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIHNwZWN0cnVtIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50RmFjdG9yeS5odG1sI2dzdC1lbGVtZW50LWZhY3RvcnktbWFrZSI+Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c3BlY3RydW0mcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3NwZWN0cnVtJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI2ctb2JqZWN0LXNldCI+Z19vYmplY3Rfc2V0PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0ctT0JKRUNUOkNBUFMiPkdfT0JKRUNUPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+c3BlY3RydW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O2JhbmRzJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBzcGVjdF9iYW5kczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDt0aHJlc2hvbGQmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiwgLTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj44MDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4KLSAgICAgIDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3Bvc3QtbWVzc2FnZXMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7bWVzc2FnZS1waGFzZSZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gVFJVRTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIHNpbmsgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnRGYWN0b3J5Lmh0bWwjZ3N0LWVsZW1lbnQtZmFjdG9yeS1tYWtlIj5nc3RfZWxlbWVudF9mYWN0b3J5X21ha2U8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtmYWtlc2luayZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c2luayZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNnLW9iamVjdC1zZXQiPmdfb2JqZWN0X3NldDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHLU9CSkVDVDpDQVBTIj5HX09CSkVDVDwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPnNpbms8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiZxdW90O3N5bmMmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IFRSVUU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gTlVMTDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNnc3QtYmluLWFkZC1tYW55Ij5nc3RfYmluX2FkZF9tYW55PC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5HU1RfQklOPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5iaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KSw8L3NwYW4+IHNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBhdWRpb2NvbnZlcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gc3BlY3RydW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gc2luazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIGNhcHMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNnc3QtY2Fwcy1uZXctc2ltcGxlIj5nc3RfY2Fwc19uZXdfc2ltcGxlPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7YXVkaW8veC1yYXcmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+Ci0gICAgICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtyYXRlJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHX1RZUEVfSU5UPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IEFVRElPRlJFUTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pZjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPighPC9zcGFuPjxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1saW5rIj5nc3RfZWxlbWVudF9saW5rPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGF1ZGlvY29udmVydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHx8PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmstZmlsdGVyZWQiPmdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQ8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5hdWRpb2NvbnZlcnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gc3BlY3RydW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gY2FwczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pIHx8PC9zcGFuPgotICAgICAgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+PHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI2dzdC1lbGVtZW50LWxpbmsiPmdzdF9lbGVtZW50X2xpbms8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zcGVjdHJ1bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBzaW5rPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPikpIHs8L3NwYW4+Ci0gICAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj5mcHJpbnRmPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5zdGRlcnI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7Y2FuJ3QgbGluayBlbGVtZW50czwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XG48L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPmV4aXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+fTwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2Fwcy5odG1sI2dzdC1jYXBzLXVucmVmIj5nc3RfY2Fwc191bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmNhcHM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgYnVzIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtZ2V0LWJ1cyI+Z3N0X2VsZW1lbnRfZ2V0X2J1czwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QnVzLmh0bWwjZ3N0LWJ1cy1hZGQtd2F0Y2giPmdzdF9idXNfYWRkX3dhdGNoPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IG1lc3NhZ2VfaGFuZGxlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBOVUxMPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNnc3Qtb2JqZWN0LXVucmVmIj5nc3Rfb2JqZWN0X3VucmVmPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+YnVzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik7PC9zcGFuPgotCi0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNnc3QtZWxlbWVudC1zZXQtc3RhdGUiPmdzdF9lbGVtZW50X3NldF9zdGF0ZTwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBHU1RfU1RBVEVfUExBWUlORzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Lyogd2UgbmVlZCB0byBydW4gYSBHTGliIG1haW4gbG9vcCB0byBnZXQgdGhlIG1lc3NhZ2VzICovPC9zcGFuPgotICBsb29wIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVRoZS1NYWluLUV2ZW50LUxvb3AuaHRtbCNnLW1haW4tbG9vcC1uZXciPmdfbWFpbl9sb29wX25ldzwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPk5VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gRkFMU0U8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0gIDxzcGFuIGNsYXNzPSJmdW5jdGlvbiI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItVGhlLU1haW4tRXZlbnQtTG9vcC5odG1sI2ctbWFpbi1sb29wLXJ1biI+Z19tYWluX2xvb3BfcnVuPC9hPjwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+bG9vcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0iZnVuY3Rpb24iPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjZ3N0LWVsZW1lbnQtc2V0LXN0YXRlIj5nc3RfZWxlbWVudF9zZXRfc3RhdGU8L2E+PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5iaW48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gR1NUX1NUQVRFX05VTEw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTs8L3NwYW4+Ci0KLSAgPHNwYW4gY2xhc3M9ImZ1bmN0aW9uIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjZ3N0LW9iamVjdC11bnJlZiI+Z3N0X29iamVjdF91bnJlZjwvYT48L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmJpbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pOzwvc3Bhbj4KLQotICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4wPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij47PC9zcGFuPgotPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPn08L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM2LjcuOS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVjdHJ1bS5odG1sI3BsdWdpbi1zcGVjdHJ1bSI+c3BlY3RydW08L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OywgU3RlZmFuIEtvc3QgJmx0O2Vuc29uaWNAdXNlcnMuc2YubmV0Jmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9BbmFseXplci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzYuNy45LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBTMjRMRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgUzI0TEUsIFMzMkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlY3RydW0uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVjdHJ1bS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFNwZWN0cnVtPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3BlY3RydW07PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVjdHJ1bS0tYmFuZHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYW5kc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYmFuZHPigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgZnJlcXVlbmN5IGJhbmRzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzIsMTA3Mzc0MTgyNF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMjg8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwZWN0cnVtLS1pbnRlcnZhbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGludGVydmFs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpbnRlcnZhbOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5JbnRlcnZhbCBvZiB0aW1lIGJldHdlZW4gbWVzc2FnZSBwb3N0cyAoaW4gbmFub3NlY29uZHMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDAwMDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlY3RydW0tLXRocmVzaG9sZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRocmVzaG9sZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGhyZXNob2xk4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+ZEIgdGhyZXNob2xkIGZvciByZXN1bHQuIEFsbCBsb3dlciB2YWx1ZXMgd2lsbCBiZSBzZXQgdG8gdGhpcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAtNjA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwZWN0cnVtLS1tZXNzYWdlLW1hZ25pdHVkZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1lc3NhZ2UtbWFnbml0dWRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtZXNzYWdlLW1hZ25pdHVkZeKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZXRoZXIgdG8gYWRkIGEgJ21hZ25pdHVkZScgZmllbGQgdG8gdGhlIHN0cnVjdHVyZSBvZiBhbnkgJ3NwZWN0cnVtJyBlbGVtZW50IG1lc3NhZ2VzIHBvc3RlZCBvbiB0aGUgYnVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVjdHJ1bS0tbWVzc2FnZS1waGFzZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1lc3NhZ2UtcGhhc2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1lc3NhZ2UtcGhhc2XigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hldGhlciB0byBhZGQgYSAncGhhc2UnIGZpZWxkIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgYW55ICdzcGVjdHJ1bScgZWxlbWVudCBtZXNzYWdlcyBwb3N0ZWQgb24gdGhlIGJ1cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwZWN0cnVtLS1wb3N0LW1lc3NhZ2VzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9zdC1tZXNzYWdlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9zdC1tZXNzYWdlc+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGV0aGVyIHRvIHBvc3QgYSAnc3BlY3RydW0nIGVsZW1lbnQgbWVzc2FnZSBvbiB0aGUgYnVzIGZvciBlYWNoIHBhc3NlZCBpbnRlcnZhbC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlY3RydW0tLW11bHRpLWNoYW5uZWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtdWx0aS1jaGFubmVs4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdWx0aS1jaGFubmVs4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNlbmQgc2VwYXJhdGUgcmVzdWx0cyBmb3IgZWFjaCBjaGFubmVsLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzNmZDcxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zcGVleGRlYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sIiB0aXRsZT0ic3BlY3RydW0iPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCIgdGl0bGU9InNwZWV4ZW5jIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVjdHJ1bS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLnRvcF9vZl9wYWdlIj48L2E+c3BlZXhkZWM8L3NwYW4+PC9oMj4KLTxwPnNwZWV4ZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuaHRtbCNHc3RTcGVleERlYy0tZW5oIiB0aXRsZT0iVGhlIOKAnGVuaOKAnSBwcm9wZXJ0eSI+ZW5oPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U3BlZXhEZWMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLmh0bWwjR3N0U3BlZXhEZWMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNwZWV4RGVjIj5Hc3RTcGVleERlYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZGVjb2Rlci5odG1sI0dzdEF1ZGlvRGVjb2Rlci1zdHJ1Y3QiPkdzdEF1ZGlvRGVjb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0U3BlZXhEZWMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGRlY29kZXMgYSBTcGVleCBzdHJlYW0gdG8gcmF3IGludGVnZXIgYXVkaW8uPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnNwZWV4Lm9yZy8iIHRhcmdldD0iX3RvcCI+U3BlZXg8L2E+IGlzIGEgcm95YWx0eS1mcmVlCi08cD5hdWRpbyBjb2RlYyBtYWludGFpbmVkIGJ5IHRoZSA8YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cueGlwaC5vcmcvIiB0YXJnZXQ9Il90b3AiPlhpcGgub3JnCi1Gb3VuZGF0aW9uPC9hPi48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM3LjcuNSI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c3BlZXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ2RlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBzcGVleGRlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBEZWNvZGUgYW4gT2dnL1NwZWV4IGZpbGUuIFRvIGNyZWF0ZSBhbiBPZ2cvU3BlZXggZmlsZSByZWZlciB0byB0aGUKLWRvY3VtZW50YXRpb24gb2Ygc3BlZXhlbmMuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM3LjcuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zcGVleC5odG1sI3BsdWdpbi1zcGVleCI+c3BlZXg8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZWNvZGVyL0F1ZGlvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzNy43LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1zcGVleDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgNjAwMCwgNDgwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVleERlYy1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFNwZWV4RGVjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3BlZXhEZWM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVleERlYy0tZW5oIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZW5o4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxlbmjigJ0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZSBwZXJjZXB0dWFsIGVuaGFuY2VtZW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGRlYy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD5zcGVleGVuYywgb2dnZGVtdXg8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzQzNmEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNwZWV4ZW5jOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLmh0bWwiIHRpdGxlPSJzcGVleGRlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuaHRtbCIgdGl0bGU9InNwbGl0ZmlsZXNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLnRvcF9vZl9wYWdlIj48L2E+c3BlZXhlbmM8L3NwYW4+PC9oMj4KLTxwPnNwZWV4ZW5jPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tYWJyIiB0aXRsZT0iVGhlIOKAnGFicuKAnSBwcm9wZXJ0eSI+YWJyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLS1iaXRyYXRlIiB0aXRsZT0iVGhlIOKAnGJpdHJhdGXigJ0gcHJvcGVydHkiPmJpdHJhdGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwjR3N0U3BlZXhFbmMtLWNvbXBsZXhpdHkiIHRpdGxlPSJUaGUg4oCcY29tcGxleGl0eeKAnSBwcm9wZXJ0eSI+Y29tcGxleGl0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLS1kdHgiIHRpdGxlPSJUaGUg4oCcZHR44oCdIHByb3BlcnR5Ij5kdHg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLS1sYXN0LW1lc3NhZ2UiIHRpdGxlPSJUaGUg4oCcbGFzdC1tZXNzYWdl4oCdIHByb3BlcnR5Ij5sYXN0LW1lc3NhZ2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLS1uZnJhbWVzIiB0aXRsZT0iVGhlIOKAnG5mcmFtZXPigJ0gcHJvcGVydHkiPm5mcmFtZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLS1xdWFsaXR5IiB0aXRsZT0iVGhlIOKAnHF1YWxpdHnigJ0gcHJvcGVydHkiPnF1YWxpdHk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCNHc3RTcGVleEVuYy0tdmFkIiB0aXRsZT0iVGhlIOKAnHZhZOKAnSBwcm9wZXJ0eSI+dmFkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmh0bWwjR3N0U3BlZXhFbmMtLXZiciIgdGl0bGU9IlRoZSDigJx2YnLigJ0gcHJvcGVydHkiPnZicjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTcGVleEVuY01vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPm1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFNwZWV4RW5jIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sI0dzdFNwZWV4RW5jLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RTcGVleEVuYyI+R3N0U3BlZXhFbmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3RhdWRpb2VuY29kZXIuaHRtbCNHc3RBdWRpb0VuY29kZXItc3RydWN0Ij5Hc3RBdWRpb0VuY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNwZWV4RW5jCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFNwZWV4RW5jIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBlbmNvZGVzIGF1ZGlvIGFzIGEgU3BlZXggc3RyZWFtLjwvcD4KLTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5zcGVleC5vcmcvIiB0YXJnZXQ9Il90b3AiPlNwZWV4PC9hPiBpcyBhIHJveWFsdHktZnJlZQotPHA+YXVkaW8gY29kZWMgbWFpbnRhaW5lZCBieSB0aGUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LnhpcGgub3JnLyIgdGFyZ2V0PSJfdG9wIj5YaXBoLm9yZwotRm91bmRhdGlvbjwvYT4uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjIzOC44LjUiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gc3BlZXhlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ211eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5iZWVwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEVuY29kZSBhbiBPZ2cvU3BlZXggZmlsZS4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yMzguOC42LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwjcGx1Z2luLXNwZWV4Ij5zcGVleDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0VuY29kZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM4LjguNi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KTE8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KTIsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtc3BlZXgsIHJhdGU9KGludClbIDYwMDAsIDQ4MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlZXhFbmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RTcGVleEVuYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFNwZWV4RW5jOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlZXhFbmMtLWFiciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFicuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYWJy4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RW5hYmxlIGF2ZXJhZ2UgYml0LXJhdGUgKDAgPSBkaXNhYmxlZCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlZXhFbmMtLWJpdHJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiaXRyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxiaXRyYXRl4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TcGVjaWZ5IGFuIGVuY29kaW5nIGJpdC1yYXRlIChpbiBicHMpLiAoMCA9IGF1dG9tYXRpYykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlZXhFbmMtLWNvbXBsZXhpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb21wbGV4aXR54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb21wbGV4aXR54oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TZXQgZW5jb2RpbmcgY29tcGxleGl0eS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVleEVuYy0tZHR4Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZHR44oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkdHjigJ0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZSBkaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwZWV4RW5jLS1sYXN0LW1lc3NhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsYXN0LW1lc3NhZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxhc3QtbWVzc2FnZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGxhc3Qgc3RhdHVzIG1lc3NhZ2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVleEVuYy0tbmZyYW1lcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5mcmFtZXPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5mcmFtZXPigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk51bWJlciBvZiBmcmFtZXMgcGVyIGJ1ZmZlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlIC8gQ29uc3RydWN0PC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVleEVuYy0tcXVhbGl0eSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHF1YWxpdHnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHF1YWxpdHnigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmNvZGluZyBxdWFsaXR5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogODwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlZXhFbmMtLXZhZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHZhZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdmFk4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmFibGUgdm9pY2UgYWN0aXZpdHkgZGV0ZWN0aW9uLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BlZXhFbmMtLXZiciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHZicuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdmJy4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmFibGUgdmFyaWFibGUgYml0LXJhdGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGVleEVuYy0tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vZGXigJ0gICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0U3BlZXhFbmNNb2RlPC9zcGFuPjwvcHJlPgotPHA+VGhlIGVuY29kaW5nIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEF1dG88L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWV4ZW5jLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnNwZWV4ZGVjLCBvZ2dtdXg8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmYzkxNy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnNwbGl0ZmlsZXNyYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sIiB0aXRsZT0ic3BlZXhlbmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwiIHRpdGxlPSJzcGxpdG11eHNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0ZmlsZXNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0ZmlsZXNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhlbmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0ZmlsZXNyYy50b3Bfb2ZfcGFnZSI+PC9hPnNwbGl0ZmlsZXNyYzwvc3Bhbj48L2gyPgotPHA+c3BsaXRmaWxlc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwjR3N0U3BsaXRGaWxlU3JjLS1sb2NhdGlvbiIgdGl0bGU9IlRoZSDigJxsb2NhdGlvbuKAnSBwcm9wZXJ0eSI+bG9jYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RTcGxpdEZpbGVTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuaHRtbCNHc3RTcGxpdEZpbGVTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNwbGl0RmlsZVNyYyI+R3N0U3BsaXRGaWxlU3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNwbGl0RmlsZVNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0U3BsaXRGaWxlU3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlJlYWRzIGRhdGEgZnJvbSBtdWx0aXBsZSBmaWxlcywgcHJlc2VudGluZyB0aG9zZSBmaWxlcyBhcyBvbmUgY29udGludW91cwotZmlsZSB0byBkb3duc3RyZWFtIGVsZW1lbnRzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVhZGluZyBhIGxhcmdlIGZpbGUgdGhhdAotaGFkIHRvIGJlIHNwbGl0IGludG8gbXVsdGlwbGUgcGFydHMgZHVlIHRvIGZpbGVzeXN0ZW0gZmlsZSBzaXplIGxpbWl0YXRpb25zLAotZm9yIGV4YW1wbGUuPC9wPgotPHA+VGhlIGZpbGVzIHRvIHNlbGVjdCBhcmUgY2hvc2VuIHZpYSB0aGUgbG9jYXRpb24gcHJvcGVydHksIHdoaWNoIHN1cHBvcnRzCi0oYW5kIGV4cGVjdHMpIHNoZWxsLXN0eWxlIHdpbGRjYXJkcyAoYnV0IG9ubHkgZm9yIHRoZSBmaWxlbmFtZSwgbm90IGZvcgotZGlyZWN0b3JpZXMpLiBUaGUgcmVzdWx0cyB3aWxsIGJlIHNvcnRlZC48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM5LjguNCI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gc3BsaXRmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7L3BhdGgvdG8vcGFydC0qLm1wZyZxdW90Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ISAuLi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFBsYXlzIHRoZSBkaWZmZXJlbnQgcGFydHMgYXMgaWYgdGhleSB3ZXJlIG9uZSBzaW5nbGUgTVBFRyBmaWxlLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHBsYXliaW4gdXJpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c3BsaXRmaWxlOi8vcGF0aC90by9mb28uYXZpLiomcXVvdDs8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFBsYXlzIHRoZSBkaWZmZXJlbnQgcGFydHMgYXMgaWYgdGhleSB3ZXJlIG9uZSBzaW5nbGUgQVZJIGZpbGUuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM5LjguNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aWZpbGUuaHRtbCNwbHVnaW4tbXVsdGlmaWxlIj5tdWx0aWZpbGU8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U291cmNlL0ZpbGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjM5LjguNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0ZmlsZXNyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BsaXRGaWxlU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U3BsaXRGaWxlU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3BsaXRGaWxlU3JjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwbGl0RmlsZVNyYy0tbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxsb2NhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9jYXRpb27igJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5XaWxkY2FyZCBwYXR0ZXJuIHRvIG1hdGNoIGZpbGUgbmFtZXMgb2YgdGhlIGlucHV0IGZpbGVzLiBJZiB0aGUgbG9jYXRpb24gaXMgYW4gYWJzb2x1dGUgcGF0aCBvciBjb250YWlucyBkaXJlY3RvcnkgY29tcG9uZW50cywgb25seSB0aGUgYmFzZSBmaWxlIG5hbWUgcGFydCB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHBhdHRlcm4gbWF0Y2hpbmcuIFRoZSByZXN1bHRzIHdpbGwgYmUgc29ydGVkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdGZpbGVzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLXBsdWdpbnMtMS4wZ3N0cmVhbWVyLXBsdWdpbnMtZmlsZXNyYy5odG1sI0dzdEZpbGVTcmMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RmlsZVNyYzwvc3Bhbj48L2E+LCA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpZmlsZXNyYy5odG1sI0dzdE11bHRpRmlsZVNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdE11bHRpRmlsZVNyYzwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYmQ0MzAuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zcGxpdG11eHNpbms6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwiIHRpdGxlPSJzcGxpdGZpbGVzcmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCIgdGl0bGU9InNwbGl0bXV4c3JjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRmaWxlc3JjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay50b3Bfb2ZfcGFnZSI+PC9hPnNwbGl0bXV4c2luazwvc3Bhbj48L2gyPgotPHA+c3BsaXRtdXhzaW5rIOKAlCBNdXhlciB3cmFwcGVyIGZvciBzcGxpdHRpbmcgb3V0cHV0IHN0cmVhbSBieSBzaXplIG9yIHRpbWU8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sI0dzdFNwbGl0TXV4U2luay0tbG9jYXRpb24iIHRpdGxlPSJUaGUg4oCcbG9jYXRpb27igJ0gcHJvcGVydHkiPmxvY2F0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstLW1heC1zaXplLWJ5dGVzIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLWJ5dGVz4oCdIHByb3BlcnR5Ij5tYXgtc2l6ZS1ieXRlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1tYXgtc2l6ZS10aW1lIiB0aXRsZT0iVGhlIOKAnG1heC1zaXplLXRpbWXigJ0gcHJvcGVydHkiPm1heC1zaXplLXRpbWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sI0dzdFNwbGl0TXV4U2luay0tbXV4LW92ZXJoZWFkIiB0aXRsZT0iVGhlIOKAnG11eC1vdmVyaGVhZOKAnSBwcm9wZXJ0eSI+bXV4LW92ZXJoZWFkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmstLW11eGVyIiB0aXRsZT0iVGhlIOKAnG11eGVy4oCdIHByb3BlcnR5Ij5tdXhlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1zaW5rIiB0aXRsZT0iVGhlIOKAnHNpbmvigJ0gcHJvcGVydHkiPnNpbms8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1tYXgtZmlsZXMiIHRpdGxlPSJUaGUg4oCcbWF4LWZpbGVz4oCdIHByb3BlcnR5Ij5tYXgtZmlsZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLS1zZW5kLWtleWZyYW1lLXJlcXVlc3RzIiB0aXRsZT0iVGhlIOKAnHNlbmQta2V5ZnJhbWUtcmVxdWVzdHPigJ0gcHJvcGVydHkiPnNlbmQta2V5ZnJhbWUtcmVxdWVzdHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4qPC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwjR3N0U3BsaXRNdXhTaW5rLWZvcm1hdC1sb2NhdGlvbiIgdGl0bGU9IlRoZSDigJxmb3JtYXQtbG9jYXRpb27igJ0gc2lnbmFsIj5mb3JtYXQtbG9jYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFNwbGl0TXV4U2luayI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sI0dzdFNwbGl0TXV4U2luay1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0U3BsaXRNdXhTaW5rIj5Hc3RTcGxpdE11eFNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RCaW4uaHRtbCNHc3RCaW4tc3RydWN0Ij5Hc3RCaW48L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFNwbGl0TXV4U2luawotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0U3BsaXRNdXhTaW5rIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2hpbGRQcm94eS5odG1sI0dzdENoaWxkUHJveHktc3RydWN0Ij5Hc3RDaGlsZFByb3h5PC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IHdyYXBzIGEgbXV4ZXIgYW5kIGEgc2luaywgYW5kIHN0YXJ0cyBhIG5ldyBmaWxlIHdoZW4gdGhlIG11eAotY29udGVudHMgYXJlIGFib3V0IHRvIGNyb3NzIGEgdGhyZXNob2xkIG9mIG1heGltdW0gc2l6ZSBvZiBtYXhpbXVtIHRpbWUsCi1zcGxpdHRpbmcgYXQgdmlkZW8ga2V5ZnJhbWUgYm91bmRhcmllcy4gRXhhY3RseSBvbmUgaW5wdXQgdmlkZW8gc3RyZWFtCi1jYW4gYmUgbXV4ZWQsIHdpdGggYXMgbWFueSBhY2NvbXBhbnlpbmcgYXVkaW8gYW5kIHN1YnRpdGxlIHN0cmVhbXMgYXMKLWRlc2lyZWQuPC9wPgotPHA+QnkgZGVmYXVsdCwgaXQgdXNlcyBtcDRtdXggYW5kIGZpbGVzaW5rLCBidXQgdGhleSBjYW4gYmUgY2hhbmdlZCB2aWEKLXRoZSAnbXV4ZXInIGFuZCAnc2luaycgcHJvcGVydGllcy48L3A+Ci08cD5UaGUgbWluaW11bSBmaWxlIHNpemUgaXMgMSBHT1AsIGhvd2V2ZXIgLSBzbyBsaW1pdHMgbWF5IGJlIG92ZXJydW4gaWYgdGhlCi1kaXN0YW5jZSBiZXR3ZWVuIGFueSAyIGtleWZyYW1lcyBpcyBsYXJnZXIgdGhhbiB0aGUgbGltaXRzLjwvcD4KLTxwPklmIGEgdmlkZW8gc3RyZWFtIGlzIGF2YWlsYWJsZSwgdGhlIHNwbGl0dGluZyBwcm9jZXNzIGlzIGRyaXZlbiBieSB0aGUgdmlkZW8KLXN0cmVhbSBjb250ZW50cywgYW5kIHRoZSB2aWRlbyBzdHJlYW0gbXVzdCBjb250YWluIGNsb3NlZCBHT1BzIGZvciB0aGUgb3V0cHV0Ci1maWxlIHBhcnRzIHRvIGJlIHBsYXllZCBpbmRpdmlkdWFsbHkgY29ycmVjdGx5LiBJbiB0aGUgYWJzZW5jZSBvZiBhIHZpZGVvCi1zdHJlYW0sIHRoZSBmaXJzdCBhdmFpbGFibGUgc3RyZWFtIGlzIHVzZWQgYXMgcmVmZXJlbmNlIGZvciBzeW5jaHJvbml6YXRpb24uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0MC45LjYiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmUgdjRsMnNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj54PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+cmF3PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+d2lkdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4zMjA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+aGVpZ2h0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjQwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGltZW92ZXJsYXkgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHgyNjRlbmMga2V5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBrd2IiPmludDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5tYXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGgyNjRwYXJzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gc3BsaXRtdXhzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW88c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+JTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wMjwvc3Bhbj5kPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+bW92IG1heDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnNpemU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj50aW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwMDAwMDAwMDA8L3NwYW4+IG1heDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnNpemU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5ieXRlczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDAwMDA8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi1SZWNvcmRzIGEgdmlkZW8gc3RyZWFtIGNhcHR1cmVkIGZyb20gYSB2NGwyIGRldmljZSBhbmQgbXV4ZXMgaXQgaW50bwotSVNPIG1wNCBmaWxlcywgc3BsaXR0aW5nIGFzIG5lZWRlZCB0byBsaW1pdCBzaXplL2R1cmF0aW9uIHRvIDEwIHNlY29uZHMKLWFuZCAxTUIgbWF4aW11bSBzaXplLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0MC45LjcuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwjcGx1Z2luLW11bHRpZmlsZSI+bXVsdGlmaWxlPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+SmFuIFNjaG1pZHQgJmx0O2phbkBjZW50cmljdWxhci5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWMvQmluL011eGVyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0MC45LjcuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnN1YnRpdGxlXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGxpdE11eFNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RTcGxpdE11eFNpbms8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTcGxpdE11eFNpbms7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTaW5rLS1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvY2F0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb2NhdGlvbuKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkZvcm1hdCBzdHJpbmcgcGF0dGVybiBmb3IgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlcyB0byB3cml0ZSAoZS5nLiB2aWRlbyUwNWQubXA0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTlVMTDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTaW5rLS1tYXgtc2l6ZS1ieXRlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1zaXplLWJ5dGVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtYXgtc2l6ZS1ieXRlc+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXguIGFtb3VudCBvZiBkYXRhIHBlciBmaWxlIChpbiBieXRlcywgMD1kaXNhYmxlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTaW5rLS1tYXgtc2l6ZS10aW1lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWF4LXNpemUtdGltZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LXNpemUtdGltZeKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4LiBhbW91bnQgb2YgdGltZSBwZXIgZmlsZSAoaW4gbnMsIDA9ZGlzYWJsZSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwbGl0TXV4U2luay0tbXV4LW92ZXJoZWFkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbXV4LW92ZXJoZWFk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdXgtb3ZlcmhlYWTigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FeHRyYSBzaXplIG92ZXJoZWFkIG9mIG11eGluZyAoMC4wMiA9IDIlKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMC4wMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTaW5rLS1tdXhlciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11eGVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdXhlcuKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEVsZW1lbnQ8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIG11eGVyIGVsZW1lbnQgdG8gdXNlIChOVUxMID0gZGVmYXVsdCBtcDRtdXgpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwbGl0TXV4U2luay0tc2luayI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNpbmvigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNpbmvigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0RWxlbWVudDwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgc2luayBlbGVtZW50IChvciBlbGVtZW50IGNoYWluKSB0byB1c2UgKE5VTEwgPSBkZWZhdWx0IGZpbGVzaW5rKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGxpdE11eFNpbmstLW1heC1maWxlcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1maWxlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWZpbGVz4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9uIGRpc2suIE9uY2UgdGhlIG1heGltdW0gaXMgcmVhY2hlZCxvbGQgZmlsZXMgc3RhcnQgdG8gYmUgZGVsZXRlZCB0byBtYWtlIHJvb20gZm9yIG5ldyBvbmVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGxpdE11eFNpbmstLXNlbmQta2V5ZnJhbWUtcmVxdWVzdHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzZW5kLWtleWZyYW1lLXJlcXVlc3Rz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzZW5kLWtleWZyYW1lLXJlcXVlc3Rz4oCdICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlJlcXVlc3QgYSBrZXlmcmFtZSBldmVyeSBtYXgtc2l6ZS10aW1lIG5zIHRvIHRyeSBzcGxpdHRpbmcgYXQgdGhhdCBwb2ludC4gTmVlZHMgbWF4LXNpemUtYnl0ZXMgdG8gYmUgMCBpbiBvcmRlciB0byBiZSBlZmZlY3RpdmUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuc2lnbmFsLWRldGFpbHMiPjwvYT48aDI+U2lnbmFsIERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTaW5rLWZvcm1hdC1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZvcm1hdC1sb2NhdGlvbuKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPmdjaGFyPC9zcGFuPjwvYT4qCi11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c2luay5odG1sI0dzdFNwbGl0TXV4U2luayI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNwbGl0TXV4U2luazwvc3Bhbj48L2E+ICpzcGxpdG11eCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+ICAgICAgICAgICAgZnJhZ21lbnRfaWQsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgIHVzZXJfZGF0YSk8L3ByZT4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFNwbGl0TXV4U2luay1mb3JtYXQtbG9jYXRpb24ucGFyYW1ldGVycyI+PC9hPjxoND5QYXJhbWV0ZXJzPC9oND4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InBhcmFtZXRlcnNfbmFtZSI+Ci08Y29sIGNsYXNzPSJwYXJhbWV0ZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icGFyYW1ldGVyc19hbm5vdGF0aW9ucyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+c3BsaXRtdXg8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCNHc3RTcGxpdE11eFNpbmsiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTcGxpdE11eFNpbms8L3NwYW4+PC9hPjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5mcmFnbWVudF9pZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfZGVzY3JpcHRpb24iPjxwPnRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZDwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD51c2VyX2RhdGE8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD51c2VyIGRhdGEgc2V0IHdoZW4gdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjb25uZWN0ZWQuPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MyI+Ci08YSBuYW1lPSJHc3RTcGxpdE11eFNpbmstZm9ybWF0LWxvY2F0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gdGhlIGxvY2F0aW9uIHRvIGJlIHVzZWQgZm9yIHRoZSBuZXh0IG91dHB1dCBmaWxlPC9wPgotPC9kaXY+Ci08cD5GbGFnczogPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtU2lnbmFscy5odG1sI0ctU0lHTkFMLVJVTi1MQVNUOkNBUFMiPlJ1biBMYXN0PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjc5YzAzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT5zcGxpdG11eHNyYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCIgdGl0bGU9InNwbGl0bXV4c2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5odG1sIiB0aXRsZT0ic3RyZWFrdHYiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c3JjLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfc2lnbmFscyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuc2lnbmFscyIgY2xhc3M9InNob3J0Y3V0Ij5TaWduYWxzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzaW5rLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMudG9wX29mX3BhZ2UiPjwvYT5zcGxpdG11eHNyYzwvc3Bhbj48L2gyPgotPHA+c3BsaXRtdXhzcmMg4oCUIFNwbGl0IERlbXV4ZXIgYmluIHRoYXQgcmVjb21iaW5lcyBmaWxlcyBjcmVhdGVkIGJ5Ci10aGUgc3BsaXRtdXhzaW5rIGVsZW1lbnQuPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sI0dzdFNwbGl0TXV4U3JjLS1sb2NhdGlvbiIgdGl0bGU9IlRoZSDigJxsb2NhdGlvbuKAnSBwcm9wZXJ0eSI+bG9jYXRpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjR1N0cnYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1N0cnY8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c3JjLmh0bWwjR3N0U3BsaXRNdXhTcmMtZm9ybWF0LWxvY2F0aW9uIiB0aXRsZT0iVGhlIOKAnGZvcm1hdC1sb2NhdGlvbuKAnSBzaWduYWwiPmZvcm1hdC1sb2NhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJzaWduYWxfZmxhZ3MiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c3JjLmh0bWwjR3N0U3BsaXRNdXhTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFNwbGl0TXV4U3JjIj5Hc3RTcGxpdE11eFNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0QmluLmh0bWwjR3N0QmluLXN0cnVjdCI+R3N0QmluPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RTcGxpdE11eFNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RTcGxpdE11eFNyYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENoaWxkUHJveHkuaHRtbCNHc3RDaGlsZFByb3h5LXN0cnVjdCI+R3N0Q2hpbGRQcm94eTwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IHJlYWRzIGEgc2V0IG9mIGlucHV0IGZpbGVzIGNyZWF0ZWQgYnkgdGhlIHNwbGl0bXV4c2luayBlbGVtZW50Ci1jb250YWluaW5nIGNvbnRpZ3VvdXMgZWxlbWVudGFyeSBzdHJlYW1zIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBmaWxlcy48L3A+Ci08cD5UaGlzIGVsZW1lbnQgaXMgc2ltaWxhciB0byBzcGxpdGZpbGVzcmMsIGV4Y2VwdCB0aGF0IGl0IHJlY29tYmluZXMgdGhlCi1zdHJlYW1zIGluIGVhY2ggZmlsZSBwYXJ0IGF0IHRoZSBkZW11eGVkIGVsZW1lbnRhcnkgbGV2ZWwsIHJhdGhlciB0aGFuCi1hcyBhIHNpbmdsZSBsYXJnZXIgYnl0ZXN0cmVhbS48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQxLjkuNCI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gc3BsaXRtdXhzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj52aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4qLjwvc3Bhbj5tb3YgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geHZpbWFnZXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gRGVtdXggZWFjaCBmaWxlIHBhcnQgYW5kIG91dHB1dCB0aGUgdmlkZW8gc3RyZWFtIGFzIG9uZSBjb250aW51b3VzIHN0cmVhbQotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHBsYXliaW4gdXJpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7c3BsaXRtdXg6Ly9wYXRoL3RvL2Zvby5tcDQuKiZxdW90Ozwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gUGxheSBiYWNrIGEgc2V0IG9mIGZpbGVzIGNyZWF0ZWQgYnkgc3BsaXRtdXhzaW5rCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQxLjkuNS4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1tdWx0aWZpbGUuaHRtbCNwbHVnaW4tbXVsdGlmaWxlIj5tdWx0aWZpbGU8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5KYW4gU2NobWlkdCAmbHQ7amFuQGNlbnRyaWN1bGFyLmNvbSZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R2VuZXJpYy9CaW4vRGVtdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDEuOS41LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvbWV0aW1lczwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3VidGl0bGVfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c29tZXRpbWVzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwbGl0TXV4U3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0U3BsaXRNdXhTcmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RTcGxpdE11eFNyYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFNwbGl0TXV4U3JjLS1sb2NhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxvY2F0aW9u4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxsb2NhdGlvbuKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkdsb2IgcGF0dGVybiBmb3IgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlcyB0byByZWFkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5zaWduYWwtZGV0YWlscyI+PC9hPjxoMj5TaWduYWwgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTcGxpdE11eFNyYy1mb3JtYXQtbG9jYXRpb24iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmb3JtYXQtbG9jYXRpb27igJ08L2NvZGU+IHNpZ25hbDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItU3RyaW5nLVV0aWxpdHktRnVuY3Rpb25zLmh0bWwjR1N0cnYiPjxzcGFuIGNsYXNzPSJyZXR1cm52YWx1ZSI+R1N0cnY8L3NwYW4+PC9hPgotdXNlcl9mdW5jdGlvbiAoPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sI0dzdFNwbGl0TXV4U3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3BsaXRNdXhTcmM8L3NwYW4+PC9hPiAqc3BsaXRtdXgsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICAgICAgdXNlcl9kYXRhKTwvcHJlPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTcmMtZm9ybWF0LWxvY2F0aW9uLnBhcmFtZXRlcnMiPjwvYT48aDQ+UGFyYW1ldGVyczwvaDQ+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX25hbWUiPgotPGNvbCBjbGFzcz0icGFyYW1ldGVyc19kZXNjcmlwdGlvbiI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InBhcmFtZXRlcnNfYW5ub3RhdGlvbnMiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX25hbWUiPjxwPnNwbGl0bXV4PC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCNHc3RTcGxpdE11eFNyYyI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFNwbGl0TXV4U3JjPC9zcGFuPjwvYT48L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0U3BsaXRNdXhTcmMtZm9ybWF0LWxvY2F0aW9uLnJldHVybnMiPjwvYT48aDQ+UmV0dXJuczwvaDQ+Ci08cD4gQSBOVUxMLXRlcm1pbmF0ZWQgc29ydGVkIGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUKLWZpbGVuYW1lcyBvZiB0aGUgaW5wdXQgZmlsZXMuIFRoZSBhcnJheSB3aWxsIGJlIGZyZWVkIGludGVybmFsbHkKLXVzaW5nIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0cmluZy1VdGlsaXR5LUZ1bmN0aW9ucy5odG1sI2ctc3RyZnJlZXYiPjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+Z19zdHJmcmVldigpPC9jb2RlPjwvYT48L3A+Ci08L2Rpdj4KLTxwPkZsYWdzOiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS44PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzN2Y4MmIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnN0cmVha3R2OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0bXV4c3JjLmh0bWwiIHRpdGxlPSJzcGxpdG11eHNyYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbCIgdGl0bGU9InRhZ2luamVjdCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BsaXRtdXhzcmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYudG9wX29mX3BhZ2UiPjwvYT5zdHJlYWt0djwvc3Bhbj48L2gyPgotPHA+c3RyZWFrdHY8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5odG1sI0dzdFN0cmVha1RWLS1mZWVkYmFjayIgdGl0bGU9IlRoZSDigJxmZWVkYmFja+KAnSBwcm9wZXJ0eSI+ZmVlZGJhY2s8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RTdHJlYWtUViI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuaHRtbCNHc3RTdHJlYWtUVi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0U3RyZWFrVFYiPkdzdFN0cmVha1RWPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RTdHJlYWtUVgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5TdHJlYWtUViBtYWtlcyBhZnRlciBpbWFnZXMgb2YgbW92aW5nIG9iamVjdHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0Mi43LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHN0cmVha3R2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG92aWRlb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgZWZmZWN0IG9mIHN0cmVha3R2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQyLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwjcGx1Z2luLWVmZmVjdHYiPmVmZmVjdHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDIuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQngsIHhCR1IsIHhSR0IgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4LCB4QkdSLCB4UkdCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3RyZWFrdHYuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJlYWtUVi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFN0cmVha1RWPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0U3RyZWFrVFY7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2LnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RTdHJlYWtUVi0tZmVlZGJhY2siPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmZWVkYmFja+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmVlZGJhY2vigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5GZWVkYmFjay48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjc2MjUzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dGFnaW5qZWN0OiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2Lmh0bWwiIHRpdGxlPSJzdHJlYWt0diI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10ZXN0c2luay5odG1sIiB0aXRsZT0idGVzdHNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGFnaW5qZWN0LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXN0cmVha3R2Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGVzdHNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGFnaW5qZWN0Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC50b3Bfb2ZfcGFnZSI+PC9hPnRhZ2luamVjdDwvc3Bhbj48L2gyPgotPHA+dGFnaW5qZWN0PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGFnaW5qZWN0Lmh0bWwjR3N0VGFnSW5qZWN0LS10YWdzIiB0aXRsZT0iVGhlIOKAnHRhZ3PigJ0gcHJvcGVydHkiPnRhZ3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPldyaXRlPC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFRhZ0luamVjdCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3Qub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5odG1sI0dzdFRhZ0luamVjdC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VGFnSW5qZWN0Ij5Hc3RUYWdJbmplY3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3Qub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VGFnSW5qZWN0Ci08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5FbGVtZW50IHRoYXQgaW5qZWN0cyBuZXcgbWV0YWRhdGEgdGFncywgYnV0IHBhc3NlcyBpbmNvbW1pbmcgZGF0YSB0aHJvdWdoCi11bm1vZGlmaWVkLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDMuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhdWRpb3Rlc3RzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHRhZ2luamVjdCB0YWdzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+JnF1b3Q7dGl0bGU9dGVzdHNyYyxhcnRpc3Q9Z3N0cmVhbWVyJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdm9yYmlzZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dGVzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZzwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBzZXQgdGl0bGUgYW5kIGFydGlzdAotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGF1ZGlvdGVzdHNyYyBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGFnaW5qZWN0IHRhZ3M8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDtrZXl3b3Jkcz1cezwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj50ZXN0b25lPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiw8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlwmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+YXVkaW88L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBlc2MiPlwmcXVvdDs8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+XH0sdGl0bGU9PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2MgZXNjIj5cJnF1b3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPmF1ZGlvXCB0ZXN0dG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIGVzYyI+XCZxdW90Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG9nZ211eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+b2dnPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIHNldCBrZXl3b3JkcyBhbmQgdGl0bGUgZGVtb25zdHJhdGluZyBxdW90aW5nIG9mIHNwZWNpYWwgY2hhcnMgYW5kIGhhbmRsaW5nIGxpc3RzCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQzLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kZWJ1Zy5odG1sI3BsdWdpbi1kZWJ1ZyI+ZGVidWc8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkdlbmVyaWM8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQzLjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPkFOWTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGFnaW5qZWN0LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3Qub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRhZ0luamVjdC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFRhZ0luamVjdDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFRhZ0luamVjdDs8L3ByZT4KLTxwPk9wYXF1ZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5odG1sI0dzdFRhZ0luamVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFRhZ0luamVjdDwvc3Bhbj48L2E+IGRhdGEgc3RydWN0dXJlPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10YWdpbmplY3QucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFRhZ0luamVjdC0tdGFncyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRhZ3PigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRhZ3PigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+TGlzdCBvZiB0YWdzIHRvIGluamVjdCBpbnRvIHRoZSB0YXJnZXQgZmlsZS48L3A+Ci08cD5GbGFnczogV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10ZXN0c2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZjUyZjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnRlc3RzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5odG1sIiB0aXRsZT0idGFnaW5qZWN0Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCIgdGl0bGU9InVkcHNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGFnaW5qZWN0Lmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10ZXN0c2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10ZXN0c2luay50b3Bfb2ZfcGFnZSI+PC9hPnRlc3RzaW5rPC9zcGFuPjwvaDI+Ci08cD50ZXN0c2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGVzdHNpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDQuMy4yLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWRlYnVnLmh0bWwjcGx1Z2luLWRlYnVnIj5kZWJ1ZzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkJlbmphbWluIE90dGUgJmx0O290dGVAZ25vbWUmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlRlc3Rpbmc8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ0LjMuMi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10ZXN0c2luay5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhlZDkyMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT51ZHBzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRlc3RzaW5rLmh0bWwiIHRpdGxlPSJ0ZXN0c2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCIgdGl0bGU9InVkcHNyYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdGVzdHNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luayI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzaW5rLnRvcF9vZl9wYWdlIj48L2E+dWRwc2luazwvc3Bhbj48L2gyPgotPHA+dWRwc2luazwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCNHc3RVRFBTaW5rLS1ob3N0IiB0aXRsZT0iVGhlIOKAnGhvc3TigJ0gcHJvcGVydHkiPmhvc3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCNHc3RVRFBTaW5rLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPnBvcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFVEUFNpbmsiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sI0dzdFVEUFNpbmstc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFVEUFNpbmsiPkdzdFVEUFNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzaW5rLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU2luay5odG1sI0dzdEJhc2VTaW5rLXN0cnVjdCI+R3N0QmFzZVNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGl1ZHBzaW5rLmh0bWwjR3N0TXVsdGlVRFBTaW5rIj5Hc3RNdWx0aVVEUFNpbms8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RVRFBTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VURQU2luayBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMGdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiPkdzdFVSSUhhbmRsZXI8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+dWRwc2luayBpcyBhIG5ldHdvcmsgc2luayB0aGF0IHNlbmRzIFVEUCBwYWNrZXRzIHRvIHRoZSBuZXR3b3JrLgotSXQgY2FuIGJlIGNvbWJpbmVkIHdpdGggUlRQIHBheWxvYWRlcnMgdG8gaW1wbGVtZW50IFJUUCBzdHJlYW1pbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0NS44LjMiPjwvYT48aDM+RXhhbXBsZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ1LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbCNwbHVnaW4tdWRwIj51ZHA8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL05ldHdvcms8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ1LjguNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BTlk8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNpbmstc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RVRFBTaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VURQU2luazs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU2luay0taG9zdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhvc3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGhvc3TigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIGhvc3QvSVAvTXVsdGljYXN0IGdyb3VwIHRvIHNlbmQgdGhlIHBhY2tldHMgdG8uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICJsb2NhbGhvc3QiPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RVRFBTaW5rLS1wb3J0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9ydOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9ydOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIHBvcnQgdG8gc2VuZCB0aGUgcGFja2V0cyB0by48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDY1NTM1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDUwMDQ8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+dWRwc3JjLCBtdWx0aWZkc2luazwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzI0MjhkLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dWRwc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCIgdGl0bGU9InVkcHNpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmh0bWwiIHRpdGxlPSJ2NGwycmFkaW8iPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc2luay5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLnRvcF9vZl9wYWdlIj48L2E+dWRwc3JjPC9zcGFuPjwvaDI+Ci08cD51ZHBzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdENhcHMuaHRtbCNHc3RDYXBzLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENhcHM8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1jYXBzIiB0aXRsZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiPmNhcHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLW11bHRpY2FzdC1ncm91cCIgdGl0bGU9IlRoZSDigJxtdWx0aWNhc3QtZ3JvdXDigJ0gcHJvcGVydHkiPm11bHRpY2FzdC1ncm91cDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPnBvcnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLXVyaSIgdGl0bGU9IlRoZSDigJx1cmnigJ0gcHJvcGVydHkiPnVyaTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1idWZmZXItc2l6ZSIgdGl0bGU9IlRoZSDigJxidWZmZXItc2l6ZeKAnSBwcm9wZXJ0eSI+YnVmZmVyLXNpemU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50NjQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tdGltZW91dCIgdGl0bGU9IlRoZSDigJx0aW1lb3V04oCdIHByb3BlcnR5Ij50aW1lb3V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLXNraXAtZmlyc3QtYnl0ZXMiIHRpdGxlPSJUaGUg4oCcc2tpcC1maXJzdC1ieXRlc+KAnSBwcm9wZXJ0eSI+c2tpcC1maXJzdC1ieXRlczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLWF1dG8tbXVsdGljYXN0IiB0aXRsZT0iVGhlIOKAnGF1dG8tbXVsdGljYXN04oCdIHByb3BlcnR5Ij5hdXRvLW11bHRpY2FzdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tbXVsdGljYXN0LWlmYWNlIiB0aXRsZT0iVGhlIOKAnG11bHRpY2FzdC1pZmFjZeKAnSBwcm9wZXJ0eSI+bXVsdGljYXN0LWlmYWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tcmV1c2UiIHRpdGxlPSJUaGUg4oCccmV1c2XigJ0gcHJvcGVydHkiPnJldXNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tY2xvc2Utc29ja2V0IiB0aXRsZT0iVGhlIOKAnGNsb3NlLXNvY2tldOKAnSBwcm9wZXJ0eSI+Y2xvc2Utc29ja2V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tc29ja2V0IiB0aXRsZT0iVGhlIOKAnHNvY2tldOKAnSBwcm9wZXJ0eSI+c29ja2V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9naW9HU29ja2V0Lmh0bWwjR1NvY2tldC1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HU29ja2V0PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tdXNlZC1zb2NrZXQiIHRpdGxlPSJUaGUg4oCcdXNlZC1zb2NrZXTigJ0gcHJvcGVydHkiPnVzZWQtc29ja2V0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tYWRkcmVzcyIgdGl0bGU9IlRoZSDigJxhZGRyZXNz4oCdIHByb3BlcnR5Ij5hZGRyZXNzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tbG9vcCIgdGl0bGU9IlRoZSDigJxsb29w4oCdIHByb3BlcnR5Ij5sb29wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tcmV0cmlldmUtc2VuZGVyLWFkZHJlc3MiIHRpdGxlPSJUaGUg4oCccmV0cmlldmUtc2VuZGVyLWFkZHJlc3PigJ0gcHJvcGVydHkiPnJldHJpZXZlLXNlbmRlci1hZGRyZXNzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RVRFBTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFVEUFNyYyI+R3N0VURQU3JjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFVEUFNyYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VURQU3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPnVkcHNyYyBpcyBhIG5ldHdvcmsgc291cmNlIHRoYXQgcmVhZHMgVURQIHBhY2tldHMgZnJvbSB0aGUgbmV0d29yay4KLUl0IGNhbiBiZSBjb21iaW5lZCB3aXRoIFJUUCBkZXBheWxvYWRlcnMgdG8gaW1wbGVtZW50IFJUUCBzdHJlYW1pbmcuPC9wPgotPHA+VGhlIHVkcHNyYyBlbGVtZW50IHN1cHBvcnRzIGF1dG9tYXRpYyBwb3J0IGFsbG9jYXRpb24gYnkgc2V0dGluZyB0aGUKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1wb3J0IiB0aXRsZT0iVGhlIOKAnHBvcnTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxwb3J04oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgdG8gMC4gQWZ0ZXIgc2V0dGluZyB0aGUgdWRwc3JjIHRvIFBBVVNFRCwgdGhlCi1hbGxvY2F0ZWQgcG9ydCBjYW4gYmUgb2J0YWluZWQgYnkgcmVhZGluZyB0aGUgcG9ydCBwcm9wZXJ0eS48L3A+Ci08cD51ZHBzcmMgY2FuIHJlYWQgZnJvbSBtdWx0aWNhc3QgZ3JvdXBzIGJ5IHNldHRpbmcgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1tdWx0aWNhc3QtZ3JvdXAiIHRpdGxlPSJUaGUg4oCcbXVsdGljYXN0LWdyb3Vw4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcbXVsdGljYXN0LWdyb3Vw4oCdPC9zcGFuPjwvYT4KLXByb3BlcnR5IHRvIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtdWx0aWNhc3QgZ3JvdXAuPC9wPgotPHA+QWx0ZXJuYXRpdmVseSBvbmUgY2FuIHByb3ZpZGUgYSBjdXN0b20gc29ja2V0IHRvIHVkcHNyYyB3aXRoIHRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tc29ja2V0IiB0aXRsZT0iVGhlIOKAnHNvY2tldOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHNvY2tldOKAnTwvc3Bhbj48L2E+Ci1wcm9wZXJ0eSwgdWRwc3JjIHdpbGwgdGhlbiBub3QgYWxsb2NhdGUgYSBzb2NrZXQgaXRzZWxmIGJ1dCB1c2UgdGhlIHByb3ZpZGVkCi1vbmUuPC9wPgotPHA+VGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwjR3N0VURQU3JjLS1jYXBzIiB0aXRsZT0iVGhlIOKAnGNhcHPigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxjYXBz4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgbWFpbmx5IHVzZWQgdG8gZ2l2ZSBhIHR5cGUgdG8gdGhlIFVEUCBwYWNrZXQKLXNvIHRoYXQgdGhleSBjYW4gYmUgYXV0b3BsdWdnZWQgaW4gR1N0cmVhbWVyIHBpcGVsaW5lcy4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bAotZm9yIFJUUCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBVRFAgcGFja2V0cyBpcyB0cmFuc2ZlcmVkCi1vdXQtb2YtYm91bmRzIHVzaW5nIFNEUCBvciBvdGhlciBtZWFucy48L3A+Ci08cD5UaGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLWJ1ZmZlci1zaXplIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1zaXpl4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcYnVmZmVyLXNpemXigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBrZXJuZWwKLWJ1ZmZlcnNpemVzIHVzZWQgZm9yIHJlY2VpdmluZyBwYWNrZXRzLiBUaGUgYnVmZmVyIHNpemUgbWF5IGJlIGluY3JlYXNlZCBmb3IKLWhpZ2gtdm9sdW1lIGNvbm5lY3Rpb25zLCBvciBtYXkgYmUgZGVjcmVhc2VkIHRvIGxpbWl0IHRoZSBwb3NzaWJsZSBiYWNrbG9nIG9mCi1pbmNvbWluZyBkYXRhLiBUaGUgc3lzdGVtIHBsYWNlcyBhbiBhYnNvbHV0ZSBsaW1pdCBvbiB0aGVzZSB2YWx1ZXMsIG9uIExpbnV4LAotZm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHR5cGljYWxseSA1MEsgYW5kIGNhbiBiZSBpbmNyZWFzZWQgdG8KLW1heGltYWxseSAxMDBLLjwvcD4KLTxwPlRoZSA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tc2tpcC1maXJzdC1ieXRlcyIgdGl0bGU9IlRoZSDigJxza2lwLWZpcnN0LWJ5dGVz4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcc2tpcC1maXJzdC1ieXRlc+KAnTwvc3Bhbj48L2E+IHByb3BlcnR5IGlzIHVzZWQgdG8gc3RyaXAgb2ZmIGFuIGFyYml0cmFyeQotbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSByYXcgdWRwIHBhY2tldCBhbmQgY2FuIGJlIHVzZWQgdG8gc3RyaXAKLW9mZiBwcm9wcmlldGFyeSBoZWFkZXIsIGZvciBleGFtcGxlLjwvcD4KLTxwPlRoZSB1ZHBzcmMgaXMgYWx3YXlzIGEgbGl2ZSBzb3VyY2UuIEl0IGRvZXMgaG93ZXZlciBub3QgcHJvdmlkZSBhIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDbG9jay5odG1sI0dzdENsb2NrLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdENsb2NrPC9zcGFuPjwvYT4sCi10aGlzIGlzIGxlZnQgZm9yIHVwc3RyZWFtIGVsZW1lbnRzIHN1Y2ggYXMgYW4gUlRQIHNlc3Npb24gbWFuYWdlciBvciBkZW11eGVyCi0oc3VjaCBhcyBhbiBNUEVHIGRlbXV4ZXIpLiBBcyB3aXRoIGFsbCBsaXZlIHNvdXJjZXMsIHRoZSBjYXB0dXJlZCBidWZmZXJzCi13aWxsIGhhdmUgdGhlaXIgdGltZXN0YW1wIHNldCB0byB0aGUgY3VycmVudCBydW5uaW5nIHRpbWUgb2YgdGhlIHBpcGVsaW5lLjwvcD4KLTxwPnVkcHNyYyBpbXBsZW1lbnRzIGEgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMGdzdHJlYW1lci1Hc3RVcmlIYW5kbGVyLmh0bWwjR3N0VVJJSGFuZGxlci1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RVUklIYW5kbGVyPC9zcGFuPjwvYT4gaW50ZXJmYWNlIHRoYXQgaGFuZGxlcyB1ZHA6Ly9ob3N0OnBvcnQKLXR5cGUgVVJJcy48L3A+Ci08cD5JZiB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLXRpbWVvdXQiIHRpdGxlPSJUaGUg4oCcdGltZW91dOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHRpbWVvdXTigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSBpcyBzZXQgdG8gYSB2YWx1ZSBiaWdnZXIgdGhhbiAwLCB1ZHBzcmMKLXdpbGwgZ2VuZXJhdGUgYW4gZWxlbWVudCBtZXNzYWdlIG5hbWVkPC9wPgotPGNvZGUgY2xhc3M9ImNsYXNzbmFtZSI+IkdzdFVEUFNyY1RpbWVvdXQiPC9jb2RlPjxwPmlmIG5vIGRhdGEgd2FzIHJlY2lldmVkIGluIHRoZSBnaXZlbiB0aW1lb3V0LgotVGhlIG1lc3NhZ2UncyBzdHJ1Y3R1cmUgY29udGFpbnMgb25lIGZpZWxkOjwvcD4KLTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHN0eWxlPSJsaXN0LXN0eWxlLXR5cGU6IGRpc2M7ICI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+PHA+Ci0gIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPgotICA8Y29kZSBjbGFzcz0iY2xhc3NuYW1lIj4idGltZW91dCI8L2NvZGU+OiB0aGUgdGltZW91dCBpbiBtaWNyb3NlY29uZHMgdGhhdAotICBleHBpcmVkIHdoZW4gd2FpdGluZyBmb3IgZGF0YS4KLSAgPC9wPjwvbGk+PC91bD48L2Rpdj4KLTxwPlRoZSBtZXNzYWdlIGlzIHR5cGljYWxseSB1c2VkIHRvIGRldGVjdCB0aGF0IG5vIFVEUCBhcnJpdmVzIGluIHRoZSByZWNlaXZlcgotYmVjYXVzZSBpdCBpcyBibG9ja2VkIGJ5IGEgZmlyZXdhbGwuPC9wPgotPHA+QSBjdXN0b20gZmlsZSBkZXNjcmlwdG9yIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhlCi08YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sI0dzdFVEUFNyYy0tc29ja2V0IiB0aXRsZT0iVGhlIOKAnHNvY2tldOKAnSBwcm9wZXJ0eSI+PHNwYW4gY2xhc3M9InR5cGUiPuKAnHNvY2tldOKAnTwvc3Bhbj48L2E+IHByb3BlcnR5LiBUaGUgc29ja2V0IHdpbGwgYmUgY2xvc2VkIHdoZW4gc2V0dGluZwotdGhlIGVsZW1lbnQgdG8gUkVBRFkgYnkgZGVmYXVsdC4gVGhpcyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRlbgotd2l0aCB0aGUgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCNHc3RVRFBTcmMtLWNsb3NlLXNvY2tldCIgdGl0bGU9IlRoZSDigJxjbG9zZS1zb2NrZXTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxjbG9zZS1zb2NrZXTigJ08L3NwYW4+PC9hPiBwcm9wZXJ0eSwgaW4gd2hpY2ggY2FzZSB0aGUKLWFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0Ni44LjE3Ij48L2E+PGgzPkV4YW1wbGVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHVkcHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmFrZXNpbmsgZHVtcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEEgcGlwZWxpbmUgdG8gcmVhZCBmcm9tIHRoZSBkZWZhdWx0IHBvcnQgYW5kIGR1bXAgdGhlIHVkcCBwYWNrZXRzLgotVG8gYWN0dWFsbHkgZ2VuZXJhdGUgdWRwIHBhY2tldHMgb24gdGhlIGRlZmF1bHQgcG9ydCBvbmUgY2FuIHVzZSB0aGUKLXVkcHNpbmsgZWxlbWVudC4gV2hlbiBydW5uaW5nIHRoZSBmb2xsb3dpbmcgcGlwZWxpbmUgaW4gYW5vdGhlciB0ZXJtaW5hbCwgdGhlCi1hYm92ZSBtZW50aW9uZWQgcGlwZWxpbmUgc2hvdWxkIGR1bXAgZGF0YSBwYWNrZXRzIHRvIHRoZSBjb25zb2xlLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgYXVkaW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB1ZHBzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diB1ZHBzcmMgcG9ydDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmYWtlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSByZWFkIHVkcCBwYWNrZXRzIGZyb20gYSBmcmVlIHBvcnQuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ2LjguMTguMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdWRwLmh0bWwjcGx1Z2luLXVkcCI+dWRwPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDssIFRoaWpzIFZlcm1laXIgJmx0O3RoaWpzLnZlcm1laXJAYmFyY28uY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Tb3VyY2UvTmV0d29yazwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDYuOC4xOC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+QU5ZPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VURQU3JjPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VURQU3JjOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tY2FwcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNhcHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGNhcHPigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0Q2Fwcy5odG1sI0dzdENhcHMtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0Q2Fwczwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgY2FwcyBvZiB0aGUgc291cmNlIHBhZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RVRFBTcmMtLW11bHRpY2FzdC1ncm91cCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11bHRpY2FzdC1ncm91cOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbXVsdGljYXN0LWdyb3Vw4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5UaGUgQWRkcmVzcyBvZiBtdWx0aWNhc3QgZ3JvdXAgdG8gam9pbi4gKERFUFJFQ0FURUQ6IFVzZSBhZGRyZXNzIHByb3BlcnR5IGluc3RlYWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAiMC4wLjAuMCI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tcG9ydCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvcnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBvcnTigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBwb3J0IHRvIHJlY2VpdmUgdGhlIHBhY2tldHMgZnJvbSwgMD1hbGxvY2F0ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDY1NTM1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDUwMDQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tdXJpIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdXJp4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1cmnigJ0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlVSSSBpbiB0aGUgZm9ybSBvZiB1ZHA6Ly9tdWx0aWNhc3RfZ3JvdXA6cG9ydC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogInVkcDovLzAuMC4wLjA6NTAwNCI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tYnVmZmVyLXNpemUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxidWZmZXItc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnVmZmVyLXNpemXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+U2l6ZSBvZiB0aGUga2VybmVsIHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzLCAwPWRlZmF1bHQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU3JjLS10aW1lb3V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGltZW91dOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGltZW91dOKAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UG9zdCBhIG1lc3NhZ2UgYWZ0ZXIgdGltZW91dCBuYW5vc2Vjb25kcyAoMCA9IGRpc2FibGVkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU3JjLS1za2lwLWZpcnN0LWJ5dGVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2tpcC1maXJzdC1ieXRlc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2tpcC1maXJzdC1ieXRlc+KAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+bnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZm9yIGVhY2ggdWRwIHBhY2tldC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RVRFBTcmMtLWF1dG8tbXVsdGljYXN0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXV0by1tdWx0aWNhc3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGF1dG8tbXVsdGljYXN04oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+QXV0b21hdGljYWxseSBqb2luL2xlYXZlIG11bHRpY2FzdCBncm91cHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tbXVsdGljYXN0LWlmYWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbXVsdGljYXN0LWlmYWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdWx0aWNhc3QtaWZhY2XigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBuZXR3b3JrIGludGVyZmFjZSBvbiB3aGljaCB0byBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tcmV1c2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXVzZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmV1c2XigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5FbmFibGUgcmV1c2Ugb2YgdGhlIHBvcnQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tY2xvc2Utc29ja2V0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY2xvc2Utc29ja2V04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjbG9zZS1zb2NrZXTigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkNsb3NlIHNvY2tldCBpZiBwYXNzZWQgYXMgcHJvcGVydHkgb24gc3RhdGUgY2hhbmdlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RVRFBTcmMtLXNvY2tldCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNvY2tldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc29ja2V04oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U29ja2V0IHRvIHVzZSBmb3IgVURQIHJlY2VwdGlvbi4gKE5VTEwgPT0gYWxsb2NhdGUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFVEUFNyYy0tdXNlZC1zb2NrZXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1c2VkLXNvY2tldOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdXNlZC1zb2NrZXTigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dpb0dTb2NrZXQuaHRtbCNHU29ja2V0LXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdTb2NrZXQ8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U29ja2V0IGN1cnJlbnRseSBpbiB1c2UgZm9yIFVEUCByZWNlcHRpb24uIChOVUxMID0gbm8gc29ja2V0KS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU3JjLS1hZGRyZXNzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYWRkcmVzc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYWRkcmVzc+KAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5BZGRyZXNzIHRvIHJlY2VpdmUgcGFja2V0cyBmb3IuIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgbXVsdGljYXN0LWdyb3VwIHByb3BlcnR5IGZvciBub3cuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIwLjAuMC4wIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU3JjLS1sb29wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbG9vcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbG9vcOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Vc2VkIGZvciBzZXR0aW5nIHRoZSBtdWx0aWNhc3QgbG9vcCBwYXJhbWV0ZXIuIFRSVUUgPSBlbmFibGUsIEZBTFNFID0gZGlzYWJsZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VURQU3JjLS1yZXRyaWV2ZS1zZW5kZXItYWRkcmVzcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJldHJpZXZlLXNlbmRlci1hZGRyZXNz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXRyaWV2ZS1zZW5kZXItYWRkcmVzc+KAnSAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZXRoZXIgdG8gcmV0cmlldmUgdGhlIHNlbmRlciBhZGRyZXNzIGFuZCBhZGQgaXQgdG8gYnVmZmVycyBhcyBtZXRhLiBEaXNhYmxpbmcgdGhpcyBtaWdodCByZXN1bHQgaW4gbWlub3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGluIGNlcnRhaW4gc2NlbmFyaW9zLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+dWRwc2luaywgbXVsdGlmZHNpbms8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmYmE1MS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnY0bDJyYWRpbzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy11ZHBzcmMuaHRtbCIgdGl0bGU9InVkcHNyYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sIiB0aXRsZT0idjRsMnNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8ucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdWRwc3JjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby50b3Bfb2ZfcGFnZSI+PC9hPnY0bDJyYWRpbzwvc3Bhbj48L2gyPgotPHA+djRsMnJhZGlvPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8ucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaHRtbCNHc3RWNGwyUmFkaW8tLWRldmljZSIgdGl0bGU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiPmRldmljZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnJhZGlvLmh0bWwjR3N0VjRsMlJhZGlvLS1mcmVxdWVuY3kiIHRpdGxlPSJUaGUg4oCcZnJlcXVlbmN54oCdIHByb3BlcnR5Ij5mcmVxdWVuY3k8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFY0bDJSYWRpbyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8ub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5odG1sI0dzdFY0bDJSYWRpby1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VjRsMlJhZGlvIj5Hc3RWNGwyUmFkaW88L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8ub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFY0bDJSYWRpbwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VjRsMlJhZGlvIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4gYW5kICBHc3RUdW5lci48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+djRsMnJhZGlvIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgcmFkaW8gZGV2aWNlCi1hbmQgdG8gdHVuZSBpdCB0byBkaWZmZXJlbnQgcmFkaW9zdGF0aW9ucy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ3LjguMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lczwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTI8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdjRsMnJhZGlvIGRldmljZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49Lzwvc3Bhbj5kZXY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj5yYWRpbzAgZnJlcXVlbmN5PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAxMjAwMDAwPC9zcGFuPgotZ3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBhbHNhc3JjIGRldmljZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmh3PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1ZGlvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9yZXNhbXBsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYWxzYXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLUZpcnN0IHBpcGVsaW5lIHR1bmVzIHRoZSByYWRpbyBkZXZpY2UgL2Rldi9yYWRpbzAgdG8gc3RhdGlvbiAxMDEuMiBNSHosCi1zZWNvbmQgcGlwZWxpbmUgY29ubmVjdHMgZGlnaXRhbCBhdWRpbyBvdXQgKGh3OjEpIHRvIGRlZmF1bHQgc291bmQgY2FyZC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDcuOC40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvNGxpbnV4Mi5odG1sI3BsdWdpbi12aWRlbzRsaW51eDIiPnZpZGVvNGxpbnV4MjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkFsZXhleSBDaGVybm92ICZsdDs0ZXJub3ZAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UdW5lcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDcuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlJhZGlvLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VjRsMlJhZGlvPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VjRsMlJhZGlvOzwvcHJlPgotPHA+T3BhcXVlIHZpZGVvNGxpbnV4MiByYWRpbyB0dW5lciBlbGVtZW50PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8ucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJSYWRpby0tZGV2aWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2XigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlZpZGVvNExpbnV4MiByYWRpbyBkZXZpY2UgbG9jYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIvZGV2L3JhZGlvMCI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJSYWRpby0tZnJlcXVlbmN5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZnJlcXVlbmN54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmcmVxdWVuY3nigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5TdGF0aW9uIGZyZXF1ZW5jeSBpbiBIei48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFs4NzUwMDAwMCwxMDgwMDAwMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTAwMDAwMDAwPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwODRhYWIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnY0bDJzaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJyYWRpby5odG1sIiB0aXRsZT0idjRsMnJhZGlvIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCIgdGl0bGU9InY0bDJzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLnRvcF9vZl9wYWdlIj48L2E+djRsMnNpbms8L3NwYW4+PC9oMj4KLTxwPnY0bDJzaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWRldmljZSIgdGl0bGU9IlRoZSDigJxkZXZpY2XigJ0gcHJvcGVydHkiPmRldmljZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tZGV2aWNlLWZkIiB0aXRsZT0iVGhlIOKAnGRldmljZS1mZOKAnSBwcm9wZXJ0eSI+ZGV2aWNlLWZkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWRldmljZS1uYW1lIiB0aXRsZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5Ij5kZXZpY2UtbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VjRsMkRldmljZVR5cGVGbGFnczwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWZsYWdzIiB0aXRsZT0iVGhlIOKAnGZsYWdz4oCdIHByb3BlcnR5Ij5mbGFnczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tb3ZlcmxheS1oZWlnaHQiIHRpdGxlPSJUaGUg4oCcb3ZlcmxheS1oZWlnaHTigJ0gcHJvcGVydHkiPm92ZXJsYXktaGVpZ2h0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1vdmVybGF5LWxlZnQiIHRpdGxlPSJUaGUg4oCcb3ZlcmxheS1sZWZ04oCdIHByb3BlcnR5Ij5vdmVybGF5LWxlZnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLW92ZXJsYXktdG9wIiB0aXRsZT0iVGhlIOKAnG92ZXJsYXktdG9w4oCdIHByb3BlcnR5Ij5vdmVybGF5LXRvcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1vdmVybGF5LXdpZHRoIiB0aXRsZT0iVGhlIOKAnG92ZXJsYXktd2lkdGjigJ0gcHJvcGVydHkiPm92ZXJsYXktd2lkdGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWJyaWdodG5lc3MiIHRpdGxlPSJUaGUg4oCcYnJpZ2h0bmVzc+KAnSBwcm9wZXJ0eSI+YnJpZ2h0bmVzczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tY29udHJhc3QiIHRpdGxlPSJUaGUg4oCcY29udHJhc3TigJ0gcHJvcGVydHkiPmNvbnRyYXN0PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1odWUiIHRpdGxlPSJUaGUg4oCcaHVl4oCdIHByb3BlcnR5Ij5odWU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLXNhdHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcc2F0dXJhdGlvbuKAnSBwcm9wZXJ0eSI+c2F0dXJhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1jcm9wLWhlaWdodCIgdGl0bGU9IlRoZSDigJxjcm9wLWhlaWdodOKAnSBwcm9wZXJ0eSI+Y3JvcC1oZWlnaHQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWNyb3AtbGVmdCIgdGl0bGU9IlRoZSDigJxjcm9wLWxlZnTigJ0gcHJvcGVydHkiPmNyb3AtbGVmdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0tY3JvcC10b3AiIHRpdGxlPSJUaGUg4oCcY3JvcC10b3DigJ0gcHJvcGVydHkiPmNyb3AtdG9wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWNyb3Atd2lkdGgiIHRpdGxlPSJUaGUg4oCcY3JvcC13aWR0aOKAnSBwcm9wZXJ0eSI+Y3JvcC13aWR0aDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWNGwySU9Nb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCNHc3RWNGwyU2luay0taW8tbW9kZSIgdGl0bGU9IlRoZSDigJxpby1tb2Rl4oCdIHByb3BlcnR5Ij5pby1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPlY0TDJfVFZfbm9ybXM8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1ub3JtIiB0aXRsZT0iVGhlIOKAnG5vcm3igJ0gcHJvcGVydHkiPm5vcm08L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwjR3N0VjRsMlNpbmstLWV4dHJhLWNvbnRyb2xzIiB0aXRsZT0iVGhlIOKAnGV4dHJhLWNvbnRyb2xz4oCdIHByb3BlcnR5Ij5leHRyYS1jb250cm9sczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1mb3JjZS1hc3BlY3QtcmF0aW8iIHRpdGxlPSJUaGUg4oCcZm9yY2UtYXNwZWN0LXJhdGlv4oCdIHByb3BlcnR5Ij5mb3JjZS1hc3BlY3QtcmF0aW88L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLS1waXhlbC1hc3BlY3QtcmF0aW8iIHRpdGxlPSJUaGUg4oCccGl4ZWwtYXNwZWN0LXJhdGlv4oCdIHByb3BlcnR5Ij5waXhlbC1hc3BlY3QtcmF0aW88L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sI0dzdFY0bDJTaW5rLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RWNGwyU2luayI+R3N0VjRsMlNpbms8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNpbmsuaHRtbCNHc3RCYXNlU2luay1zdHJ1Y3QiPkdzdEJhc2VTaW5rPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvc2luay5odG1sI0dzdFZpZGVvU2luay1zdHJ1Y3QiPkdzdFZpZGVvU2luazwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFY0bDJTaW5rCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFY0bDJTaW5rIGltcGxlbWVudHMKLSBHc3RUdW5lciwgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9vdmVybGF5Lmh0bWwjR3N0VmlkZW9PdmVybGF5LXN0cnVjdCI+R3N0VmlkZW9PdmVybGF5PC9hPiwgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0bmF2aWdhdGlvbi5odG1sI0dzdE5hdmlnYXRpb24tc3RydWN0Ij5Hc3ROYXZpZ2F0aW9uPC9hPiwgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0Y29sb3JiYWxhbmNlLmh0bWwjR3N0Q29sb3JCYWxhbmNlLXN0cnVjdCI+R3N0Q29sb3JCYWxhbmNlPC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9vcmllbnRhdGlvbi5odG1sI0dzdFZpZGVvT3JpZW50YXRpb24tc3RydWN0Ij5Hc3RWaWRlb09yaWVudGF0aW9uPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD52NGwyc2luayBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHZpZGVvIHRvIHY0bDIgZGV2aWNlcyAoc2NyZWVuIG92ZXJsYXlzCi1wcm92aWRlZCBieSB0aGUgZ3JhcGhpY3MgaGFyZHdhcmUsIHR2LW91dCwgZXRjKTwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDguOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHY0bDJzaW5rIGRldmljZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49Lzwvc3Bhbj5kZXY8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj52aWRlbzE8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBkaXNwbGF5cyBhIHRlc3QgcGF0dGVybiBvbiAvZGV2L3ZpZGVvMQotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBuYXZpZ2F0aW9udGVzdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdjRsMnNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gQSBwaXBlbGluZSB0byB0ZXN0IG5hdmlnYXRpb24gZXZlbnRzLgotV2hpbGUgbW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIG92ZXIgdGhlIHRlc3Qgc2lnbmFsIHlvdSB3aWxsIHNlZSBhIGJsYWNrIGJveAotZm9sbG93aW5nIHRoZSBtb3VzZSBwb2ludGVyLiBJZiB5b3UgcHJlc3MgdGhlIG1vdXNlIGJ1dHRvbiBzb21ld2hlcmUgb24gdGhlCi12aWRlbyBhbmQgcmVsZWFzZSBpdCBzb21ld2hlcmUgZWxzZSBhIGdyZWVuIGJveCB3aWxsIGFwcGVhciB3aGVyZSB5b3UgcHJlc3NlZAotdGhlIGJ1dHRvbiBhbmQgYSByZWQgb25lIHdoZXJlIHlvdSByZWxlYXNlZCBpdC4gKFRoZSBuYXZpZ2F0aW9udGVzdCBlbGVtZW50Ci1pcyBwYXJ0IG9mIGdzdC1wbHVnaW5zLWdvb2QuKSBZb3UgY2FuIG9ic2VydmUgaGVyZSB0aGF0IGV2ZW4gaWYgdGhlIGltYWdlcwotYXJlIHNjYWxlZCB0aHJvdWdoIGhhcmR3YXJlIHRoZSBwb2ludGVyIGNvb3JkaW5hdGVzIGFyZSBjb252ZXJ0ZWQgYmFjayB0byB0aGUKLW9yaWdpbmFsIHZpZGVvIGZyYW1lIGdlb21ldHJ5IHNvIHRoYXQgdGhlIGJveCBjYW4gYmUgZHJhd24gdG8gdGhlIGNvcnJlY3QKLXBvc2l0aW9uLiBUaGlzIGFsc28gaGFuZGxlcyBib3JkZXJzIGNvcnJlY3RseSwgbGltaXRpbmcgY29vcmRpbmF0ZXMgdG8gdGhlCi1pbWFnZSBhcmVhCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ4LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlbzRsaW51eDIuaHRtbCNwbHVnaW4tdmlkZW80bGludXgyIj52aWRlbzRsaW51eDI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Sb2IgQ2xhcmsgJmx0O3JvYkB0aS5jb20mZ3Q7LDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TaW5rL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0OC44LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+aW1hZ2UvanBlZzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkyPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbXBlZ3RzLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtYmF5ZXIsIGZvcm1hdD0oc3RyaW5nKXsgYmdnciwgZ2JyZywgZ3JiZywgcmdnYiB9LCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpeyBieXRlLXN0cmVhbSwgYXZjIH0sIGFsaWdubWVudD0oc3RyaW5nKWF1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1wd2MxLCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcHdjMiwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0IxNiwgQkdSLCBSR0IsIEdSQVk4LCBHUkFZMTZfTEUsIEdSQVkxNl9CRSwgWVZVOSwgWVYxMiwgWVVZMiwgWVZZVSwgVVlWWSwgWTQyQiwgWTQxQiwgWVVWOSwgTlYxMl82NFozMiwgTlYyNCwgTlY2MSwgTlYxNiwgTlYyMSwgTlYxMiwgSTQyMCwgQkdSQSwgQkdSeCwgQVJHQiwgeFJHQiwgQkdSMTUsIFJHQjE1IH0sIHdpZHRoPShpbnQpWyAxLCAzMjc2OCBdLCBoZWlnaHQ9KGludClbIDEsIDMyNzY4IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1zb25peCwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXZwODwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtd212LCB3bXZ2ZXJzaW9uPShpbnQpMywgZm9ybWF0PShzdHJpbmcpV1ZDMTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFY0bDJTaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VjRsMlNpbms7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tZGV2aWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2XigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkRldmljZSBsb2NhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIi9kZXYvdmlkZW8xIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNpbmstLWRldmljZS1mZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRldmljZS1mZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNlLWZk4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBkZXZpY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IC0xPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tZGV2aWNlLW5hbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkZXZpY2UtbmFtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNlLW5hbWXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5OYW1lIG9mIHRoZSBkZXZpY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tZmxhZ3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmbGFnc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZmxhZ3PigJ0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWNGwyRGV2aWNlVHlwZUZsYWdzPC9zcGFuPjwvcHJlPgotPHA+RGV2aWNlIHR5cGUgZmxhZ3MuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1vdmVybGF5LWhlaWdodCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG92ZXJsYXktaGVpZ2h04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvdmVybGF5LWhlaWdodOKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBoZWlnaHQgb2YgdGhlIHZpZGVvIG92ZXJsYXk7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSBoZWlnaHQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1vdmVybGF5LWxlZnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvdmVybGF5LWxlZnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG92ZXJsYXktbGVmdOKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSBsZWZ0bW9zdCAoeCkgY29vcmRpbmF0ZSBvZiB0aGUgdmlkZW8gb3ZlcmxheTsgdG9wIGxlZnQgY29ybmVyIG9mIHNjcmVlbiBpcyAwLDAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1vdmVybGF5LXRvcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG92ZXJsYXktdG9w4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvdmVybGF5LXRvcOKAnSAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgdG9wbW9zdCAoeSkgY29vcmRpbmF0ZSBvZiB0aGUgdmlkZW8gb3ZlcmxheTsgdG9wIGxlZnQgY29ybmVyIG9mIHNjcmVlbiBpcyAwLDAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1vdmVybGF5LXdpZHRoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb3ZlcmxheS13aWR0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcb3ZlcmxheS13aWR0aOKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgd2lkdGggb2YgdGhlIHZpZGVvIG92ZXJsYXk7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSB3aWR0aC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNpbmstLWJyaWdodG5lc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxicmlnaHRuZXNz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxicmlnaHRuZXNz4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QaWN0dXJlIGJyaWdodG5lc3MsIG9yIG1vcmUgcHJlY2lzZWx5LCB0aGUgYmxhY2sgbGV2ZWwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1jb250cmFzdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbnRyYXN04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb250cmFzdOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QaWN0dXJlIGNvbnRyYXN0IG9yIGx1bWEgZ2Fpbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNpbmstLWh1ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGh1ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaHVl4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+SHVlIG9yIGNvbG9yIGJhbGFuY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1zYXR1cmF0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2F0dXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2F0dXJhdGlvbuKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGljdHVyZSBjb2xvciBzYXR1cmF0aW9uIG9yIGNocm9tYSBnYWluLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tY3JvcC1oZWlnaHQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjcm9wLWhlaWdodOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3JvcC1oZWlnaHTigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgaGVpZ2h0IG9mIHRoZSB2aWRlbyBjcm9wOyBkZWZhdWx0IGlzIGVxdWFsIHRvIG5lZ290aWF0ZWQgaW1hZ2UgaGVpZ2h0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tY3JvcC1sZWZ0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY3JvcC1sZWZ04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjcm9wLWxlZnTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgbGVmdG1vc3QgKHgpIGNvb3JkaW5hdGUgb2YgdGhlIHZpZGVvIGNyb3A7IHRvcCBsZWZ0IGNvcm5lciBvZiBpbWFnZSBpcyAwLDAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1jcm9wLXRvcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNyb3AtdG9w4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjcm9wLXRvcOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgdG9wbW9zdCAoeSkgY29vcmRpbmF0ZSBvZiB0aGUgdmlkZW8gY3JvcDsgdG9wIGxlZnQgY29ybmVyIG9mIGltYWdlIGlzIDAsMC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNpbmstLWNyb3Atd2lkdGgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjcm9wLXdpZHRo4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjcm9wLXdpZHRo4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoZSB3aWR0aCBvZiB0aGUgdmlkZW8gY3JvcDsgZGVmYXVsdCBpcyBlcXVhbCB0byBuZWdvdGlhdGVkIGltYWdlIHdpZHRoLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0taW8tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGlvLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGlvLW1vZGXigJ0gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VjRsMklPTW9kZTwvc3Bhbj48L3ByZT4KLTxwPkkvTyBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBHU1RfVjRMMl9JT19BVVRPPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tbm9ybSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG5vcm3igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5vcm3igJ0gICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+VjRMMl9UVl9ub3Jtczwvc3Bhbj48L3ByZT4KLTxwPnZpZGVvIHN0YW5kYXJkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBub25lPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU2luay0tZXh0cmEtY29udHJvbHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxleHRyYS1jb250cm9sc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZXh0cmEtY29udHJvbHPigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RTdHJ1Y3R1cmUuaHRtbCNHc3RTdHJ1Y3R1cmUtc3RydWN0Ij48c3BhbiBjbGFzcz0idHlwZSI+R3N0U3RydWN0dXJlPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkV4dHJhIHY0bDIgY29udHJvbHMgKENJRHMpIGZvciB0aGUgZGV2aWNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1mb3JjZS1hc3BlY3QtcmF0aW8iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxmb3JjZS1hc3BlY3QtcmF0aW/igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZvcmNlLWFzcGVjdC1yYXRpb+KAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+V2hlbiBlbmFibGVkLCB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIHdpbGwgYmUgZW5mb3JjZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFRSVUU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTaW5rLS1waXhlbC1hc3BlY3QtcmF0aW8iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwaXhlbC1hc3BlY3QtcmF0aW/igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBpeGVsLWFzcGVjdC1yYXRpb+KAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+T3ZlcndyaXRlIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIjEvMSI8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmMjYzMjUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+djRsMnNyYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc2luay5odG1sIiB0aXRsZT0idjRsMnNpbmsiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwiIHRpdGxlPSJ2ZXJ0aWdvdHYiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9zaWduYWxzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLnNpZ25hbHMiIGNsYXNzPSJzaG9ydGN1dCI+U2lnbmFsczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzaW5rLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy50b3Bfb2ZfcGFnZSI+PC9hPnY0bDJzcmM8L3NwYW4+PC9oMj4KLTxwPnY0bDJzcmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0tZGV2aWNlIiB0aXRsZT0iVGhlIOKAnGRldmljZeKAnSBwcm9wZXJ0eSI+ZGV2aWNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWRldmljZS1uYW1lIiB0aXRsZT0iVGhlIOKAnGRldmljZS1uYW1l4oCdIHByb3BlcnR5Ij5kZXZpY2UtbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VjRsMkRldmljZVR5cGVGbGFnczwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjLS1mbGFncyIgdGl0bGU9IlRoZSDigJxmbGFnc+KAnSBwcm9wZXJ0eSI+ZmxhZ3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0tZGV2aWNlLWZkIiB0aXRsZT0iVGhlIOKAnGRldmljZS1mZOKAnSBwcm9wZXJ0eSI+ZGV2aWNlLWZkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWJyaWdodG5lc3MiIHRpdGxlPSJUaGUg4oCcYnJpZ2h0bmVzc+KAnSBwcm9wZXJ0eSI+YnJpZ2h0bmVzczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWNvbnRyYXN0IiB0aXRsZT0iVGhlIOKAnGNvbnRyYXN04oCdIHByb3BlcnR5Ij5jb250cmFzdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWh1ZSIgdGl0bGU9IlRoZSDigJxodWXigJ0gcHJvcGVydHkiPmh1ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLXNhdHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcc2F0dXJhdGlvbuKAnSBwcm9wZXJ0eSI+c2F0dXJhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5WNEwyX1RWX25vcm1zPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLW5vcm0iIHRpdGxlPSJUaGUg4oCcbm9ybeKAnSBwcm9wZXJ0eSI+bm9ybTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWNGwySU9Nb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWlvLW1vZGUiIHRpdGxlPSJUaGUg4oCcaW8tbW9kZeKAnSBwcm9wZXJ0eSI+aW8tbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFN0cnVjdHVyZS5odG1sI0dzdFN0cnVjdHVyZS1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RTdHJ1Y3R1cmU8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLWV4dHJhLWNvbnRyb2xzIiB0aXRsZT0iVGhlIOKAnGV4dHJhLWNvbnRyb2xz4oCdIHByb3BlcnR5Ij5leHRyYS1jb250cm9sczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwjR3N0VjRsMlNyYy0tZm9yY2UtYXNwZWN0LXJhdGlvIiB0aXRsZT0iVGhlIOKAnGZvcmNlLWFzcGVjdC1yYXRpb+KAnSBwcm9wZXJ0eSI+Zm9yY2UtYXNwZWN0LXJhdGlvPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtLXBpeGVsLWFzcGVjdC1yYXRpbyIgdGl0bGU9IlRoZSDigJxwaXhlbC1hc3BlY3QtcmF0aW/igJ0gcHJvcGVydHkiPnBpeGVsLWFzcGVjdC1yYXRpbzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuc2lnbmFscyI+PC9hPjxoMj5TaWduYWxzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ic2lnbmFsc19yZXR1cm4iPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJzaWduYWxzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJzaWduYWxzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJzaWduYWxfdHlwZSI+PHNwYW4gY2xhc3M9InJldHVybnZhbHVlIj52b2lkPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InNpZ25hbF9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjLXByZXBhcmUtZm9ybWF0IiB0aXRsZT0iVGhlIOKAnHByZXBhcmUtZm9ybWF04oCdIHNpZ25hbCI+cHJlcGFyZS1mb3JtYXQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0ic2lnbmFsX2ZsYWdzIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1TaWduYWxzLmh0bWwjRy1TSUdOQUwtUlVOLUxBU1Q6Q0FQUyI+UnVuIExhc3Q8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFY0bDJTcmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5odG1sI0dzdFY0bDJTcmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFY0bDJTcmMiPkdzdFY0bDJTcmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlU3JjLmh0bWwjR3N0QmFzZVNyYy1zdHJ1Y3QiPkdzdEJhc2VTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdFB1c2hTcmMuaHRtbCNHc3RQdXNoU3JjLXN0cnVjdCI+R3N0UHVzaFNyYzwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFY0bDJTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RWNGwyU3JjIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFVyaUhhbmRsZXIuaHRtbCNHc3RVUklIYW5kbGVyLXN0cnVjdCI+R3N0VVJJSGFuZGxlcjwvYT4sICBHc3RUdW5lciwgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0Y29sb3JiYWxhbmNlLmh0bWwjR3N0Q29sb3JCYWxhbmNlLXN0cnVjdCI+R3N0Q29sb3JCYWxhbmNlPC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9vcmllbnRhdGlvbi5odG1sI0dzdFZpZGVvT3JpZW50YXRpb24tc3RydWN0Ij5Hc3RWaWRlb09yaWVudGF0aW9uPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPnY0bDJzcmMgY2FuIGJlIHVzZWQgdG8gY2FwdHVyZSB2aWRlbyBmcm9tIHY0bDIgZGV2aWNlcywgbGlrZSB3ZWJjYW1zIGFuZCB0dgotY2FyZHMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI0OS45LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHY0bDJzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHh2aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIHZpZGVvIGNhcHR1cmVkIGZyb20gL2Rldi92aWRlbzAgdHYgY2FyZCBhbmQgZm9yCi13ZWJjYW1zLgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHY0bDJzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGpwZWdkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHh2aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIHZpZGVvIGNhcHR1cmVkIGZyb20gYSB3ZWJjYW0gdGhhdCBkZWxpdmVycyBqcGVnCi1pbWFnZXMuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjQ5LjkuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlbzRsaW51eDIuaHRtbCNwbHVnaW4tdmlkZW80bGludXgyIj52aWRlbzRsaW51eDI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5FZGdhcmQgTGltYSAmbHQ7ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnImZ3Q7LCBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNvdXJjZS9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNDkuOS40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5pbWFnZS9qcGVnPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTI8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby9tcGVndHMsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1iYXllciwgZm9ybWF0PShzdHJpbmcpeyBiZ2dyLCBnYnJnLCBncmJnLCByZ2diIH0sIHdpZHRoPShpbnQpWyAxLCAzMjc2OCBdLCBoZWlnaHQ9KGludClbIDEsIDMyNzY4IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZylpdHU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZyl7IGJ5dGUtc3RyZWFtLCBhdmMgfSwgYWxpZ25tZW50PShzdHJpbmcpYXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXB3YzEsIHdpZHRoPShpbnQpWyAxLCAzMjc2OCBdLCBoZWlnaHQ9KGludClbIDEsIDMyNzY4IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC1wd2MyLCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQjE2LCBCR1IsIFJHQiwgR1JBWTgsIEdSQVkxNl9MRSwgR1JBWTE2X0JFLCBZVlU5LCBZVjEyLCBZVVkyLCBZVllVLCBVWVZZLCBZNDJCLCBZNDFCLCBZVVY5LCBOVjEyXzY0WjMyLCBOVjI0LCBOVjYxLCBOVjE2LCBOVjIxLCBOVjEyLCBJNDIwLCBCR1JBLCBCR1J4LCBBUkdCLCB4UkdCLCBCR1IxNSwgUkdCMTUgfSwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXNvbml4LCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHZpZGVvL3gtdnA4PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdmlkZW8veC13bXYsIHdtdnZlcnNpb249KGludCkzLCBmb3JtYXQ9KHN0cmluZylXVkMxPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU3JjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VjRsMlNyYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFY0bDJTcmM7PC9wcmU+Ci08cD5PcGFxdWUgb2JqZWN0LjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy0tZGV2aWNlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2XigJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPkRldmljZSBsb2NhdGlvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIi9kZXYvdmlkZW8wIjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy0tZGV2aWNlLW5hbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkZXZpY2UtbmFtZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGV2aWNlLW5hbWXigJ0gICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5OYW1lIG9mIHRoZSBkZXZpY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU3JjLS1mbGFncyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZsYWdz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmbGFnc+KAnSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFY0bDJEZXZpY2VUeXBlRmxhZ3M8L3NwYW4+PC9wcmU+Ci08cD5EZXZpY2UgdHlwZSBmbGFncy48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy0tZGV2aWNlLWZkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGV2aWNlLWZk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxkZXZpY2UtZmTigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5GaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGRldmljZS48L3A+Ci08cD5GbGFnczogUmVhZDwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogLTE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTcmMtLWJyaWdodG5lc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxicmlnaHRuZXNz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxicmlnaHRuZXNz4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QaWN0dXJlIGJyaWdodG5lc3MsIG9yIG1vcmUgcHJlY2lzZWx5LCB0aGUgYmxhY2sgbGV2ZWw8L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy0tY29udHJhc3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjb250cmFzdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY29udHJhc3TigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGljdHVyZSBjb250cmFzdCBvciBsdW1hIGdhaW48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy0taHVlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcaHVl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxodWXigJ0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5IdWUgb3IgY29sb3IgYmFsYW5jZTwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU3JjLS1zYXR1cmF0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2F0dXJhdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2F0dXJhdGlvbuKAnSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGljdHVyZSBjb2xvciBzYXR1cmF0aW9uIG9yIGNocm9tYSBnYWluPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTcmMtLW5vcm0iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxub3Jt4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxub3Jt4oCdICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPlY0TDJfVFZfbm9ybXM8L3NwYW4+PC9wcmU+Ci08cD5UViBub3JtPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IG5vbmU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTcmMtLWlvLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpby1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpby1tb2Rl4oCdICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFY0bDJJT01vZGU8L3NwYW4+PC9wcmU+Ci08cD5JTyBNb2RlPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEdTVF9WNEwyX0lPX0FVVE88L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTcmMtLWV4dHJhLWNvbnRyb2xzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZXh0cmEtY29udHJvbHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4dHJhLWNvbnRyb2xz4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0U3RydWN0dXJlLmh0bWwjR3N0U3RydWN0dXJlLXN0cnVjdCI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFN0cnVjdHVyZTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5BZGRpdGlvbmFsIHY0bDIgY29udHJvbHMgZm9yIHRoZSBkZXZpY2UuIFRoZSBjb250cm9scyBhcmUgaWRlbnRpZmllZAotYnkgdGhlIGNvbnRyb2wgbmFtZSAobG93ZXJjYXNlIHdpdGggJ18nIGZvciBhbnkgbm9uLWFscGhhbnVtZXJpYwotY2hhcmFjdGVycykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwIGNsYXNzPSJzaW5jZSI+U2luY2U6IDEuMjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy0tZm9yY2UtYXNwZWN0LXJhdGlvIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZm9yY2UtYXNwZWN0LXJhdGlv4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxmb3JjZS1hc3BlY3QtcmF0aW/igJ0gICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPldoZW4gZW5hYmxlZCwgdGhlIHBpeGVsIGFzcGVjdCByYXRpbyBxdWVyaWVkIGZyb20gdGhlIGRldmljZSBvciBzZXQKLXdpdGggdGhlIHBpeGVsLWFzcGVjdC1yYXRpbyBwcm9wZXJ0eSB3aWxsIGJlIGVuZm9yY2VkLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4yPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWNGwyU3JjLS1waXhlbC1hc3BlY3QtcmF0aW8iPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwaXhlbC1hc3BlY3QtcmF0aW/igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHBpeGVsLWFzcGVjdC1yYXRpb+KAnSAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGhlIHBpeGVsIGFzcGVjdCByYXRpbyBvZiB0aGUgZGV2aWNlLiBUaGlzIG92ZXJ3cml0ZXMgdGhlIHBpeGVsIGFzcGVjdAotcmF0aW8gcXVlcmllZCBmcm9tIHRoZSBkZXZpY2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6ICIxLzEiPC9wPgotPHAgY2xhc3M9InNpbmNlIj5TaW5jZTogMS4yPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLnNpZ25hbC1kZXRhaWxzIj48L2E+PGgyPlNpZ25hbCBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFY0bDJTcmMtcHJlcGFyZS1mb3JtYXQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxwcmVwYXJlLWZvcm1hdOKAnTwvY29kZT4gc2lnbmFsPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icmV0dXJudmFsdWUiPnZvaWQ8L3NwYW4+Ci11c2VyX2Z1bmN0aW9uICg8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXY0bDJzcmMuaHRtbCNHc3RWNGwyU3JjIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VjRsMlNyYzwvc3Bhbj48L2E+ICp2NGwyc3JjLAotICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+ICAgICAgICBmZCwKLSAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDYXBzLmh0bWwjR3N0Q2Fwcy1zdHJ1Y3QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RDYXBzPC9zcGFuPjwvYT4gICAgKmNhcHMsCi0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dwb2ludGVyIj48c3BhbiBjbGFzcz0idHlwZSI+Z3BvaW50ZXI8L3NwYW4+PC9hPiAgICB1c2VyX2RhdGEpPC9wcmU+Ci08cD5UaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHY0bDIgVklESU9DX1NfRk1UIGlvY3RsCi0oc2V0IGZvcm1hdCkuIFRoaXMgYWxsb3dzIGZvciBhbnkgY3VzdG9tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZSB0bwotaGFwcGVuIHByaW9yIHRvIHRoZSBmb3JtYXQgYmVpbmcgc2V0LgotVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciBVVkMgSDI2NCBlbmNvZGluZyBjYW1lcmFzIHdoaWNoIG5lZWQgdGhlIEgyNjQKLVByb2JlICZhbXA7IENvbW1pdCB0byBoYXBwZW4gcHJpb3IgdG8gdGhlIG5vcm1hbCBQcm9iZSAmYW1wOyBDb21taXQuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDMiPgotPGEgbmFtZT0iR3N0VjRsMlNyYy1wcmVwYXJlLWZvcm1hdC5wYXJhbWV0ZXJzIj48L2E+PGg0PlBhcmFtZXRlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icGFyYW1ldGVyc19uYW1lIj4KLTxjb2wgY2xhc3M9InBhcmFtZXRlcnNfZGVzY3JpcHRpb24iPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwYXJhbWV0ZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD52NGwyc3JjPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIHY0bDJzcmMgaW5zdGFuY2U8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+ZmQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Rlc2NyaXB0aW9uIj48cD50aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBjdXJyZW50IGRldmljZTwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9uYW1lIj48cD5jYXBzPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dGhlIGNhcHMgb2YgdGhlIGZvcm1hdCBiZWluZyBzZXQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0icGFyYW1ldGVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfbmFtZSI+PHA+dXNlcl9kYXRhPC9wPjwvdGQ+Ci08dGQgY2xhc3M9InBhcmFtZXRlcl9kZXNjcmlwdGlvbiI+PHA+dXNlciBkYXRhIHNldCB3aGVuIHRoZSBzaWduYWwgaGFuZGxlciB3YXMgY29ubmVjdGVkLjwvcD48L3RkPgotPHRkIGNsYXNzPSJwYXJhbWV0ZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPHA+RmxhZ3M6IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVNpZ25hbHMuaHRtbCNHLVNJR05BTC1SVU4tTEFTVDpDQVBTIj5SdW4gTGFzdDwvYT48L3A+Ci08cCBjbGFzcz0ic2luY2UiPlNpbmNlOiAwLjEwLjMyPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmMTE3NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZlcnRpZ290djogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwiIHRpdGxlPSJ2NGwyc3JjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sIiB0aXRsZT0idmlkZW9iYWxhbmNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZlcnRpZ290di5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZlcnRpZ290diI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYudG9wX29mX3BhZ2UiPjwvYT52ZXJ0aWdvdHY8L3NwYW4+PC9oMj4KLTxwPnZlcnRpZ290djwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2LnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZmxvYXQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZmxvYXQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwjR3N0VmVydGlnb1RWLS1zcGVlZCIgdGl0bGU9IlRoZSDigJxzcGVlZOKAnSBwcm9wZXJ0eSI+c3BlZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuaHRtbCNHc3RWZXJ0aWdvVFYtLXpvb20tc3BlZWQiIHRpdGxlPSJUaGUg4oCcem9vbS1zcGVlZOKAnSBwcm9wZXJ0eSI+em9vbS1zcGVlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VmVydGlnb1RWIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZlcnRpZ290di5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwjR3N0VmVydGlnb1RWLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RWZXJ0aWdvVFYiPkdzdFZlcnRpZ29UVjwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZlcnRpZ290di5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZlcnRpZ29UVgotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VmVydGlnb1RWIGlzIGEgbG9vcGJhY2sgYWxwaGEgYmxlbmRpbmcgZWZmZWN0b3Igd2l0aCByb3RhdGluZyBhbmQgc2NhbGluZy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjUwLjcuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmVydGlnb3R2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG92aWRlb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgZWZmZWN0IG9mIHZlcnRpZ290diBvbiBhIHRlc3Qgc3RyZWFtLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1MC43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZWZmZWN0di5odG1sI3BsdWdpbi1lZmZlY3R2Ij5lZmZlY3R2PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmJlJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1MC43LjQuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgQkdSeCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIEJHUnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZlcnRpZ290di5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmVydGlnb1RWLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VmVydGlnb1RWPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VmVydGlnb1RWOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZlcnRpZ29UVi0tc3BlZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzcGVlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3BlZWTigJ0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Zsb2F0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2Zsb2F0PC9zcGFuPjwvYT48L3ByZT4KLTxwPkNvbnRyb2wgdGhlIHNwZWVkIG9mIG1vdmVtZW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAuMDEsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDAuMDI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZlcnRpZ29UVi0tem9vbS1zcGVlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHpvb20tc3BlZWTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHpvb20tc3BlZWTigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dmbG9hdCI+PHNwYW4gY2xhc3M9InR5cGUiPmdmbG9hdDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Db250cm9sIHRoZSByYXRlIG9mIHpvb21pbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMS4wMSwxLjFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMS4wMTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMzJkYjAuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT52aWRlb2JhbGFuY2U6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmVydGlnb3R2Lmh0bWwiIHRpdGxlPSJ2ZXJ0aWdvdHYiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCIgdGl0bGU9InZpZGVvYm94Ij4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZlcnRpZ290di5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZSI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UudG9wX29mX3BhZ2UiPjwvYT52aWRlb2JhbGFuY2U8L3NwYW4+PC9oMj4KLTxwPnZpZGVvYmFsYW5jZTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuaHRtbCNHc3RWaWRlb0JhbGFuY2UtLWJyaWdodG5lc3MiIHRpdGxlPSJUaGUg4oCcYnJpZ2h0bmVzc+KAnSBwcm9wZXJ0eSI+YnJpZ2h0bmVzczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwjR3N0VmlkZW9CYWxhbmNlLS1jb250cmFzdCIgdGl0bGU9IlRoZSDigJxjb250cmFzdOKAnSBwcm9wZXJ0eSI+Y29udHJhc3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sI0dzdFZpZGVvQmFsYW5jZS0taHVlIiB0aXRsZT0iVGhlIOKAnGh1ZeKAnSBwcm9wZXJ0eSI+aHVlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuaHRtbCNHc3RWaWRlb0JhbGFuY2UtLXNhdHVyYXRpb24iIHRpdGxlPSJUaGUg4oCcc2F0dXJhdGlvbuKAnSBwcm9wZXJ0eSI+c2F0dXJhdGlvbjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VmlkZW9CYWxhbmNlIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwjR3N0VmlkZW9CYWxhbmNlLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RWaWRlb0JhbGFuY2UiPkdzdFZpZGVvQmFsYW5jZTwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZpZGVvQmFsYW5jZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VmlkZW9CYWxhbmNlIGltcGxlbWVudHMKLSBHc3RJbXBsZW1lbnRzSW50ZXJmYWNlIGFuZCAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3Rjb2xvcmJhbGFuY2UuaHRtbCNHc3RDb2xvckJhbGFuY2Utc3RydWN0Ij5Hc3RDb2xvckJhbGFuY2U8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5BZGp1c3RzIGJyaWdodG5lc3MsIGNvbnRyYXN0LCBodWUsIHNhdHVyYXRpb24gb24gYSB2aWRlbyBzdHJlYW0uPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1MS44LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2JhbGFuY2Ugc2F0dXJhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geGltYWdlc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGNvbnZlcnRzIHRoZSBpbWFnZSB0byBibGFjayBhbmQgd2hpdGUgYnkgc2V0dGluZyB0aGUKLXNhdHVyYXRpb24gdG8gMC4wLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1MS44LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9maWx0ZXIuaHRtbCNwbHVnaW4tdmlkZW9maWx0ZXIiPnZpZGVvZmlsdGVyPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjUxLjguNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBSR0J4LCB4QkdSLCBCR1J4LCBSR0IsIEJHUiwgWTQyQiwgWVVZMiwgVVlWWSwgWVZZVSwgSTQyMCwgWVYxMiwgSVlVViwgWTQxQiwgTlYxMiwgTlYyMSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdyhBTlkpPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBSR0J4LCB4QkdSLCBCR1J4LCBSR0IsIEJHUiwgWTQyQiwgWVVZMiwgVVlWWSwgWVZZVSwgSTQyMCwgWVYxMiwgSVlVViwgWTQxQiwgTlYxMiwgTlYyMSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXJhdyhBTlkpPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JhbGFuY2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9CYWxhbmNlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VmlkZW9CYWxhbmNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VmlkZW9CYWxhbmNlOzwvcHJlPgotPHA+T3BhcXVlIGRhdGEgc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0JhbGFuY2UtLWJyaWdodG5lc3MiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxicmlnaHRuZXNz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxicmlnaHRuZXNz4oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5icmlnaHRuZXNzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWy0xLDFdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9CYWxhbmNlLS1jb250cmFzdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGNvbnRyYXN04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb250cmFzdOKAnSAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5jb250cmFzdC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDJdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9CYWxhbmNlLS1odWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxodWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGh1ZeKAnSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPmh1ZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFstMSwxXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvQmFsYW5jZS0tc2F0dXJhdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNhdHVyYXRpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHNhdHVyYXRpb27igJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3ByZT4KLTxwPnNhdHVyYXRpb24uPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwyXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU1MzlhYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dmlkZW9ib3g6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwiIHRpdGxlPSJ2aWRlb2JhbGFuY2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwiIHRpdGxlPSJ2aWRlb2Nyb3AiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94LmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3gub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94LnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYmFsYW5jZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC50b3Bfb2ZfcGFnZSI+PC9hPnZpZGVvYm94PC9zcGFuPjwvaDI+Ci08cD52aWRlb2JveDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3gucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dkb3VibGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nZG91YmxlPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLWFscGhhIiB0aXRsZT0iVGhlIOKAnGFscGhh4oCdIHByb3BlcnR5Ij5hbHBoYTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNHc3RWaWRlb0JveC0tYm9yZGVyLWFscGhhIiB0aXRsZT0iVGhlIOKAnGJvcmRlci1hbHBoYeKAnSBwcm9wZXJ0eSI+Ym9yZGVyLWFscGhhPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI0dzdFZpZGVvQm94LS1ib3R0b20iIHRpdGxlPSJUaGUg4oCcYm90dG9t4oCdIHByb3BlcnR5Ij5ib3R0b208L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3hGaWxsIiB0aXRsZT0iZW51bSBHc3RWaWRlb0JveEZpbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0JveEZpbGw8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNHc3RWaWRlb0JveC0tZmlsbCIgdGl0bGU9IlRoZSDigJxmaWxs4oCdIHByb3BlcnR5Ij5maWxsPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI0dzdFZpZGVvQm94LS1sZWZ0IiB0aXRsZT0iVGhlIOKAnGxlZnTigJ0gcHJvcGVydHkiPmxlZnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLXJpZ2h0IiB0aXRsZT0iVGhlIOKAnHJpZ2h04oCdIHByb3BlcnR5Ij5yaWdodDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNHc3RWaWRlb0JveC0tdG9wIiB0aXRsZT0iVGhlIOKAnHRvcOKAnSBwcm9wZXJ0eSI+dG9wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3gtLWF1dG9jcm9wIiB0aXRsZT0iVGhlIOKAnGF1dG9jcm9w4oCdIHByb3BlcnR5Ij5hdXRvY3JvcDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VmlkZW9Cb3giPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3gub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCNHc3RWaWRlb0JveC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VmlkZW9Cb3giPkdzdFZpZGVvQm94PC9hPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5lbnVtPC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5odG1sI0dzdFZpZGVvQm94RmlsbCIgdGl0bGU9ImVudW0gR3N0VmlkZW9Cb3hGaWxsIj5Hc3RWaWRlb0JveEZpbGw8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9maWx0ZXIuaHRtbCNHc3RWaWRlb0ZpbHRlci1zdHJ1Y3QiPkdzdFZpZGVvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VmlkZW9Cb3gKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBwbHVnaW4gY3JvcHMgb3IgZW5sYXJnZXMgdGhlIGltYWdlLiBJdCB0YWtlcyA0IHZhbHVlcyBhcyBpbnB1dCwgYQotdG9wLCBib3R0b20sIGxlZnQgYW5kIHJpZ2h0IG9mZnNldC4gUG9zaXRpdmUgdmFsdWVzIHdpbGwgY3JvcCB0aGF0IG11Y2gKLXBpeGVscyBmcm9tIHRoZSByZXNwZWN0aXZlIGJvcmRlciBvZiB0aGUgaW1hZ2UsIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGFkZAotdGhhdCBtdWNoIHBpeGVscy4gV2hlbiBwaXhlbHMgYXJlIGFkZGVkLCB5b3UgY2FuIHNwZWNpZnkgdGhlaXIgY29sb3IuIAotU29tZSBwcmVkZWZpbmVkIGNvbG9ycyBhcmUgdXNhYmxlIHdpdGggYW4gZW51bSBwcm9wZXJ0eS48L3A+Ci08cD5UaGUgcGx1Z2luIGlzIGFscGhhIGNoYW5uZWwgYXdhcmUgYW5kIHdpbGwgdHJ5IHRvIG5lZ290aWF0ZSB3aXRoIGEgZm9ybWF0Ci10aGF0IHN1cHBvcnRzIGFscGhhIGNoYW5uZWxzIGZpcnN0LiBXaGVuIGFscGhhIGNoYW5uZWwgaXMgYWN0aXZlIHR3bwotb3RoZXIgcHJvcGVydGllcywgYWxwaGEgYW5kIGJvcmRlcl9hbHBoYSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGFscGhhCi12YWx1ZXMgb2YgdGhlIGlubmVyIHBpY3R1cmUgYW5kIHRoZSBib3JkZXIgcmVzcGVjdGl2ZWx5LiBhbiBhbHBoYSB2YWx1ZSBvZgotMC4wIG1lYW5zIHRvdGFsIHRyYW5zcGFyZW5jeSwgMS4wIGlzIG9wYXF1ZS48L3A+Ci08cD5UaGUgdmlkZW9ib3ggcGx1Z2luIGhhcyBtYW55IHVzZXMgc3VjaCBhcyBkb2luZyBhIG1vc2FpYyBvZiBwaWN0dXJlcywgCi1sZXR0ZXJib3hpbmcgdmlkZW8sIGN1dHRpbmcgb3V0IHBpZWNlcyBvZiB2aWRlbywgcGljdHVyZSBpbiBwaWN0dXJlLCBldGMuLjwvcD4KLTxwPlNldHRpbmcgYXV0b2Nyb3AgdG8gdHJ1ZSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB0aGUgcGx1Z2luIHNvIHRoYXQKLWNhcHMgZGV0ZXJtaW5lIGNyb3AgcHJvcGVydGllcyByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IGFyb3VuZDogZ2l2ZW4KLWlucHV0IGFuZCBvdXRwdXQgZGltZW5zaW9ucywgdGhlIGNyb3AgdmFsdWVzIGFyZSBzZWxlY3RlZCBzbyB0aGF0IHRoZQotc21hbGxlciBmcmFtZSBpcyBlZmZlY3RpdmVseSBjZW50ZXJlZCBpbiB0aGUgbGFyZ2VyIGZyYW1lLiAgVGhpcwotaW52b2x2ZXMgZWl0aGVyIGNyb3BwaW5nIG9yIHBhZGRpbmcuPC9wPgotPHA+SWYgeW91IHVzZSBhdXRvY3JvcCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gc2V0dGluZyB0aGUgb3RoZXIKLXByb3BlcnRpZXMgbWFudWFsbHkgYmVjYXVzZSB0aGV5IHdpbGwgYmUgb3ZlcnJpZGVuIGlmIHRoZSBjYXBzIGNoYW5nZSwKLWJ1dCBub3RoaW5nIHN0b3BzIHlvdSBmcm9tIGRvaW5nIHNvLjwvcD4KLTxwPlNhbXBsZSBwaXBlbGluZTo8L3A+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTI8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2JveCBhdXRvY3JvcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50cnVlPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDt2aWRlby94LXJhdywgd2lkdGg9NjAwLCBoZWlnaHQ9NDAwJnF1b3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08cD48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1Mi43LjEwLjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvYm94Lmh0bWwjcGx1Z2luLXZpZGVvYm94Ij52aWRlb2JveDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjUyLjcuMTAuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCeCwgUkdCLCBCR1IsIFk0NDQsIFk0MkIsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFk0MUIsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIHhSR0IsIEJHUngsIHhCR1IsIFJHQngsIFJHQiwgQkdSLCBZNDQ0LCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBZNDFCLCBHUkFZOCwgR1JBWTE2X0JFLCBHUkFZMTZfTEUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2JveC5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3gub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvQm94LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VmlkZW9Cb3g8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWaWRlb0JveDs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9Cb3hGaWxsIj48L2E+PGgzPmVudW0gR3N0VmlkZW9Cb3hGaWxsPC9oMz4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFZpZGVvQm94RmlsbC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IlZJREVPLUJPWC1GSUxMLUJMQUNLOkNBUFMiPjwvYT5WSURFT19CT1hfRklMTF9CTEFDSzwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJWSURFTy1CT1gtRklMTC1HUkVFTjpDQVBTIj48L2E+VklERU9fQk9YX0ZJTExfR1JFRU48L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iVklERU8tQk9YLUZJTEwtQkxVRTpDQVBTIj48L2E+VklERU9fQk9YX0ZJTExfQkxVRTwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJWSURFTy1CT1gtRklMTC1SRUQ6Q0FQUyI+PC9hPlZJREVPX0JPWF9GSUxMX1JFRDwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJWSURFTy1CT1gtRklMTC1ZRUxMT1c6Q0FQUyI+PC9hPlZJREVPX0JPWF9GSUxMX1lFTExPVzwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJWSURFTy1CT1gtRklMTC1XSElURTpDQVBTIj48L2E+VklERU9fQk9YX0ZJTExfV0hJVEU8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iVklERU8tQk9YLUZJTEwtTEFTVDpDQVBTIj48L2E+VklERU9fQk9YX0ZJTExfTEFTVDwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3gucHJvcGVydHktZGV0YWlscyI+PC9hPjxoMj5Qcm9wZXJ0eSBEZXRhaWxzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvQm94LS1hbHBoYSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFscGhh4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhbHBoYeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbHBoYSB2YWx1ZSBwaWN0dXJlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0JveC0tYm9yZGVyLWFscGhhIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYm9yZGVyLWFscGhh4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxib3JkZXItYWxwaGHigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnZG91YmxlIj48c3BhbiBjbGFzcz0idHlwZSI+Z2RvdWJsZTwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbHBoYSB2YWx1ZSBvZiB0aGUgYm9yZGVyLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMV08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0JveC0tYm90dG9tIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYm90dG9t4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxib3R0b23igJ0gICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QaXhlbHMgdG8gYm94IGF0IGJvdHRvbSAoJmx0OzAgPSBhZGQgYSBib3JkZXIpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0JveC0tZmlsbCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZpbGzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZpbGzigJ0gICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3hGaWxsIiB0aXRsZT0iZW51bSBHc3RWaWRlb0JveEZpbGwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0JveEZpbGw8L3NwYW4+PC9hPjwvcHJlPgotPHA+SG93IHRvIGZpbGwgdGhlIGJvcmRlcnMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEJsYWNrPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0JveC0tbGVmdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxlZnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxlZnTigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlBpeGVscyB0byBib3ggYXQgbGVmdCAoJmx0OzAgID0gYWRkIGEgYm9yZGVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9Cb3gtLXJpZ2h0Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmlnaHTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJpZ2h04oCdICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlBpeGVscyB0byBib3ggYXQgcmlnaHQgKCZsdDswID0gYWRkIGEgYm9yZGVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9Cb3gtLXRvcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRvcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdG9w4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGl4ZWxzIHRvIGJveCBhdCB0b3AgKCZsdDswID0gYWRkIGEgYm9yZGVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9Cb3gtLWF1dG9jcm9wIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXV0b2Nyb3DigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGF1dG9jcm9w4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+SWYgc2V0IHRvIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLVN0YW5kYXJkLU1hY3Jvcy5odG1sI1RSVUU6Q0FQUyI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPlRSVUU8L2NvZGU+PC9hPiB2aWRlb2JveCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JvcC9wYWQgdGhlIGlucHV0Ci12aWRlbyB0byBiZSBjZW50ZXJlZCBpbiB0aGUgb3V0cHV0LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3AiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0Nyb3A8L3NwYW4+PC9hPjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGFlMTc0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dmlkZW9jcm9wOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwiIHRpdGxlPSJ2aWRlb2JveCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaHRtbCIgdGl0bGU9InZpZGVvZmxpcCI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9ib3guaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC50b3Bfb2ZfcGFnZSI+PC9hPnZpZGVvY3JvcDwvc3Bhbj48L2gyPgotPHA+dmlkZW9jcm9wPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sI0dzdFZpZGVvQ3JvcC0tYm90dG9tIiB0aXRsZT0iVGhlIOKAnGJvdHRvbeKAnSBwcm9wZXJ0eSI+Ym90dG9tPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3AtLWxlZnQiIHRpdGxlPSJUaGUg4oCcbGVmdOKAnSBwcm9wZXJ0eSI+bGVmdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwjR3N0VmlkZW9Dcm9wLS1yaWdodCIgdGl0bGU9IlRoZSDigJxyaWdodOKAnSBwcm9wZXJ0eSI+cmlnaHQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sI0dzdFZpZGVvQ3JvcC0tdG9wIiB0aXRsZT0iVGhlIOKAnHRvcOKAnSBwcm9wZXJ0eSI+dG9wPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RWaWRlb0Nyb3AiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3AuaHRtbCNHc3RWaWRlb0Nyb3Atc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFZpZGVvQ3JvcCI+R3N0VmlkZW9Dcm9wPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlVHJhbnNmb3JtLmh0bWwjR3N0QmFzZVRyYW5zZm9ybS1zdHJ1Y3QiPkdzdEJhc2VUcmFuc2Zvcm08L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtZ3N0dmlkZW9maWx0ZXIuaHRtbCNHc3RWaWRlb0ZpbHRlci1zdHJ1Y3QiPkdzdFZpZGVvRmlsdGVyPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VmlkZW9Dcm9wCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgY3JvcHMgdmlkZW8gZnJhbWVzLCBtZWFuaW5nIGl0IGNhbiByZW1vdmUgcGFydHMgb2YgdGhlCi1waWN0dXJlIG9uIHRoZSBsZWZ0LCByaWdodCwgdG9wIG9yIGJvdHRvbSBvZiB0aGUgcGljdHVyZSBhbmQgb3V0cHV0Ci1hIHNtYWxsZXIgcGljdHVyZSB0aGFuIHRoZSBpbnB1dCBwaWN0dXJlLCB3aXRoIHRoZSB1bndhbnRlZCBwYXJ0cyBhdCB0aGUKLWJvcmRlciByZW1vdmVkLjwvcD4KLTxwPlRoZSB2aWRlb2Nyb3AgZWxlbWVudCBpcyBzaW1pbGFyIHRvIHRoZSB2aWRlb2JveCBlbGVtZW50LCBidXQgaXRzIG1haW4KLWdvYWwgaXMgdG8gc3VwcG9ydCBhIG11bHRpdHVkZSBvZiBmb3JtYXRzIGFzIGVmZmljaWVudGx5IGFzIHBvc3NpYmxlLgotVW5saWtlIHZpZGVib3gsIGl0IGNhbm5vdCBhZGQgYm9yZGVycyB0byB0aGUgcGljdHVyZSBhbmQgdW5saWtlIHZpZGVib3gKLWl0IHdpbGwgYWx3YXlzIG91dHB1dCBpbWFnZXMgaW4gZXhhY3RseSB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIGlucHV0IGltYWdlLjwvcD4KLTxwPklmIHRoZXJlIGlzIG5vdGhpbmcgdG8gY3JvcCwgdGhlIGVsZW1lbnQgd2lsbCBvcGVyYXRlIGluIHBhc3MtdGhyb3VnaCBtb2RlLjwvcD4KLTxwPk5vdGUgdGhhdCBubyBzcGVjaWFsIGVmZm9ydHMgYXJlIG1hZGUgdG8gaGFuZGxlIGNocm9tYS1zdWJzYW1wbGVkIGZvcm1hdHMKLWluIHRoZSBjYXNlIG9mIG9kZC12YWx1ZWQgY3JvcHBpbmcgYW5kIGNvbXBlbnNhdGUgZm9yIHN1Yi11bml0IGNocm9tYSBwbGFuZQotc2hpZnRzIGZvciBzdWNoIGZvcm1hdHMgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwjR3N0VmlkZW9Dcm9wLS1sZWZ0IiB0aXRsZT0iVGhlIOKAnGxlZnTigJ0gcHJvcGVydHkiPjxzcGFuIGNsYXNzPSJ0eXBlIj7igJxsZWZ04oCdPC9zcGFuPjwvYT4gb3IKLTxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwjR3N0VmlkZW9Dcm9wLS10b3AiIHRpdGxlPSJUaGUg4oCcdG9w4oCdIHByb3BlcnR5Ij48c3BhbiBjbGFzcz0idHlwZSI+4oCcdG9w4oCdPC9zcGFuPjwvYT4gcHJvcGVydHkgaXMgc2V0IHRvIGFuIG9kZCBudW1iZXIuIFRoaXMgZG9lc24ndCBtYXR0ZXIgZm9yIAotbW9zdCB1c2UgY2FzZXMsIGJ1dCBpdCBtaWdodCBtYXR0ZXIgZm9yIHlvdXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNTMuNy42Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2Nyb3AgdG9wPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NDI8L3NwYW4+IGxlZnQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPiByaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjQ8L3NwYW4+IGJvdHRvbTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjUzLjcuNy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbCNwbHVnaW4tdmlkZW9jcm9wIj52aWRlb2Nyb3A8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1My43LjcuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCQSwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCLCBCR1IsIEFZVVYsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFJHQjE2LCBSR0IxNSwgR1JBWTgsIE5WMTIsIE5WMjEsIEdSQVkxNl9MRSwgR1JBWTE2X0JFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCQSwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCLCBCR1IsIEFZVVYsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFJHQjE2LCBSR0IxNSwgR1JBWTgsIE5WMTIsIE5WMjEsIEdSQVkxNl9MRSwgR1JBWTE2X0JFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2Nyb3Aub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvQ3JvcC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFZpZGVvQ3JvcDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFZpZGVvQ3JvcDs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0Nyb3AtLWJvdHRvbSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJvdHRvbeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYm90dG9t4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGl4ZWxzIHRvIGNyb3AgYXQgYm90dG9tICgtMSB0byBhdXRvLWNyb3ApLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvQ3JvcC0tbGVmdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGxlZnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGxlZnTigJ0gICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlBpeGVscyB0byBjcm9wIGF0IGxlZnQgKC0xIHRvIGF1dG8tY3JvcCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSBHX01BWFVMT05HPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9Dcm9wLS1yaWdodCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJpZ2h04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyaWdodOKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5QaXhlbHMgdG8gY3JvcCBhdCByaWdodCAoLTEgdG8gYXV0by1jcm9wKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IEdfTUFYVUxPTkc8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0Nyb3AtLXRvcCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRvcOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdG9w4oCdICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+UGl4ZWxzIHRvIGNyb3AgYXQgdG9wICgtMSB0byBhdXRvLWNyb3ApLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gR19NQVhVTE9ORzwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwjR3N0VmlkZW9Cb3giPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0JveDwvc3Bhbj48L2E+PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmUwYjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT52aWRlb2ZsaXA6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwiIHRpdGxlPSJ2aWRlb2Nyb3AiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4uaHRtbCIgdGl0bGU9InZpZGVvbWVkaWFuIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvY3JvcC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcCI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAudG9wX29mX3BhZ2UiPjwvYT52aWRlb2ZsaXA8L3NwYW4+PC9oMj4KLTxwPnZpZGVvZmxpcDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwjR3N0VmlkZW9GbGlwTWV0aG9kIiB0aXRsZT0iZW51bSBHc3RWaWRlb0ZsaXBNZXRob2QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0ZsaXBNZXRob2Q8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwjR3N0VmlkZW9GbGlwLS1tZXRob2QiIHRpdGxlPSJUaGUg4oCcbWV0aG9k4oCdIHByb3BlcnR5Ij5tZXRob2Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZSAvIENvbnN0cnVjdDwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RWaWRlb0ZsaXAiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dzdFZpZGVvRmxpcC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VmlkZW9GbGlwIj5Hc3RWaWRlb0ZsaXA8L2E+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPmVudW08L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sI0dzdFZpZGVvRmxpcE1ldGhvZCIgdGl0bGU9ImVudW0gR3N0VmlkZW9GbGlwTWV0aG9kIj5Hc3RWaWRlb0ZsaXBNZXRob2Q8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZpZGVvRmxpcAotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VmlkZW9GbGlwIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZGlyZWN0aW9uLmh0bWwjR3N0VmlkZW9EaXJlY3Rpb24tc3RydWN0Ij5Hc3RWaWRlb0RpcmVjdGlvbjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPkZsaXBzIGFuZCByb3RhdGVzIHZpZGVvLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNTQuOC4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9mbGlwIG1ldGhvZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmNsb2Nrd2lzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4aW1hZ2VzaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgZmxpcHMgdGhlIHRlc3QgaW1hZ2UgOTAgZGVncmVlcyBjbG9ja3dpc2UuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjU0LjguNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sI3BsdWdpbi12aWRlb2ZpbHRlciI+dmlkZW9maWx0ZXI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5EYXZpZCBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VmZmVjdC9WaWRlbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNTQuOC40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsIHhSR0IsIFJHQngsIHhCR1IsIEJHUngsIFJHQiwgQkdSLCBJNDIwLCBZVjEyLCBJWVVWLCBZVVkyLCBVWVZZLCBZVllVLCBOVjEyLCBOVjIxLCBHUkFZOCwgR1JBWTE2X0JFLCBHUkFZMTZfTEUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBSR0J4LCB4QkdSLCBCR1J4LCBSR0IsIEJHUiwgSTQyMCwgWVYxMiwgSVlVViwgWVVZMiwgVVlWWSwgWVZZVSwgTlYxMiwgTlYyMSwgR1JBWTgsIEdSQVkxNl9CRSwgR1JBWTE2X0xFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb2ZsaXAub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvRmxpcC1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFZpZGVvRmxpcDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFZpZGVvRmxpcDs8L3ByZT4KLTxwPk9wYXF1ZSBkYXRhc3RydWN0dXJlLjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9GbGlwTWV0aG9kIj48L2E+PGgzPmVudW0gR3N0VmlkZW9GbGlwTWV0aG9kPC9oMz4KLTxwPlRoZSBkaWZmZXJlbnQgZmxpcCBtZXRob2RzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFZpZGVvRmxpcE1ldGhvZC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1WSURFTy1GTElQLU1FVEhPRC1JREVOVElUWTpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EX0lERU5USVRZPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPklkZW50aXR5IChubyByb3RhdGlvbik8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVZJREVPLUZMSVAtTUVUSE9ELTkwUjpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EXzkwUjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Sb3RhdGUgY2xvY2t3aXNlIDkwIGRlZ3JlZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVZJREVPLUZMSVAtTUVUSE9ELTE4MDpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EXzE4MDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Sb3RhdGUgMTgwIGRlZ3JlZXM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVZJREVPLUZMSVAtTUVUSE9ELTkwTDpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EXzkwTDwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5Sb3RhdGUgY291bnRlci1jbG9ja3dpc2UgOTAgZGVncmVlczwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVklERU8tRkxJUC1NRVRIT0QtSE9SSVo6Q0FQUyI+PC9hPkdTVF9WSURFT19GTElQX01FVEhPRF9IT1JJWjwvcD48L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9kZXNjcmlwdGlvbiI+Ci08cD5GbGlwIGhvcml6b250YWxseTwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVklERU8tRkxJUC1NRVRIT0QtVkVSVDpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EX1ZFUlQ8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RmxpcCB2ZXJ0aWNhbGx5PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMiPsKgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1WSURFTy1GTElQLU1FVEhPRC1UUkFOUzpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EX1RSQU5TPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPkZsaXAgYWNyb3NzIHVwcGVyIGxlZnQvbG93ZXIgcmlnaHQgZGlhZ29uYWw8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iR1NULVZJREVPLUZMSVAtTUVUSE9ELU9USEVSOkNBUFMiPjwvYT5HU1RfVklERU9fRkxJUF9NRVRIT0RfT1RIRVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+RmxpcCBhY3Jvc3MgdXBwZXIgcmlnaHQvbG93ZXIgbGVmdCBkaWFnb25hbDwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVklERU8tRkxJUC1NRVRIT0QtQVVUTzpDQVBTIj48L2E+R1NUX1ZJREVPX0ZMSVBfTUVUSE9EX0FVVE88L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+U2VsZWN0IGZsaXAgbWV0aG9kIGJhc2VkIG9uIGltYWdlLW9yaWVudGF0aW9uIHRhZzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb0ZsaXAtLW1ldGhvZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1ldGhvZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWV0aG9k4oCdICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9mbGlwLmh0bWwjR3N0VmlkZW9GbGlwTWV0aG9kIiB0aXRsZT0iZW51bSBHc3RWaWRlb0ZsaXBNZXRob2QiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb0ZsaXBNZXRob2Q8L3NwYW4+PC9hPjwvcHJlPgotPHA+bWV0aG9kIChkZXByZWNhdGVkLCB1c2UgdmlkZW8tZGlyZWN0aW9uIGluc3RlYWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGUgLyBDb25zdHJ1Y3Q8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBJZGVudGl0eSAobm8gcm90YXRpb24pPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMWIwZDcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZpZGVvbWVkaWFuOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sIiB0aXRsZT0idmlkZW9mbGlwIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCIgdGl0bGU9InZpZGVvbWl4ZXIiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4ub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4udG9wX29mX3BhZ2UiPjwvYT52aWRlb21lZGlhbjwvc3Bhbj48L2gyPgotPHA+dmlkZW9tZWRpYW48L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sI0dzdFZpZGVvTWVkaWFuU2l6ZSIgdGl0bGU9ImVudW0gR3N0VmlkZW9NZWRpYW5TaXplIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmlkZW9NZWRpYW5TaXplPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwjR3N0VmlkZW9NZWRpYW4tLWZpbHRlcnNpemUiIHRpdGxlPSJUaGUg4oCcZmlsdGVyc2l6ZeKAnSBwcm9wZXJ0eSI+ZmlsdGVyc2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sI0dzdFZpZGVvTWVkaWFuLS1sdW0tb25seSIgdGl0bGU9IlRoZSDigJxsdW0tb25seeKAnSBwcm9wZXJ0eSI+bHVtLW9ubHk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFZpZGVvTWVkaWFuIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwjR3N0VmlkZW9NZWRpYW4tc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFZpZGVvTWVkaWFuIj5Hc3RWaWRlb01lZGlhbjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4uaHRtbCNHc3RWaWRlb01lZGlhblNpemUiIHRpdGxlPSJlbnVtIEdzdFZpZGVvTWVkaWFuU2l6ZSI+R3N0VmlkZW9NZWRpYW5TaXplPC9hPjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVRyYW5zZm9ybS5odG1sI0dzdEJhc2VUcmFuc2Zvcm0tc3RydWN0Ij5Hc3RCYXNlVHJhbnNmb3JtPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdHZpZGVvZmlsdGVyLmh0bWwjR3N0VmlkZW9GaWx0ZXItc3RydWN0Ij5Hc3RWaWRlb0ZpbHRlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZpZGVvTWVkaWFuCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjU1LjcuMi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sI3BsdWdpbi12aWRlb2ZpbHRlciI+dmlkZW9maWx0ZXI8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1NS43LjIuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEk0MjAsIFlWMTIgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4ub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZpZGVvTWVkaWFuLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0VmlkZW9NZWRpYW48L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWaWRlb01lZGlhbjs8L3ByZT4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9NZWRpYW5TaXplIj48L2E+PGgzPmVudW0gR3N0VmlkZW9NZWRpYW5TaXplPC9oMz4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFZpZGVvTWVkaWFuU2l6ZS5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IkdTVC1WSURFTy1NRURJQU4tU0laRS01OkNBUFMiPjwvYT5HU1RfVklERU9fTUVESUFOX1NJWkVfNTwvcD48L3RkPgotPHRkPsKgPC90ZD4KLTx0ZD7CoDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9uYW1lIj48cD48YSBuYW1lPSJHU1QtVklERU8tTUVESUFOLVNJWkUtOTpDQVBTIj48L2E+R1NUX1ZJREVPX01FRElBTl9TSVpFXzk8L3A+PC90ZD4KLTx0ZD7CoDwvdGQ+Ci08dGQ+wqA8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLnByb3BlcnR5LWRldGFpbHMiPjwvYT48aDI+UHJvcGVydHkgRGV0YWlsczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb01lZGlhbi0tZmlsdGVyc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGZpbHRlcnNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGZpbHRlcnNpemXigJ0gICAgICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWVkaWFuLmh0bWwjR3N0VmlkZW9NZWRpYW5TaXplIiB0aXRsZT0iZW51bSBHc3RWaWRlb01lZGlhblNpemUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb01lZGlhblNpemU8L3NwYW4+PC9hPjwvcHJlPgotPHA+VGhlIHNpemUgb2YgdGhlIGZpbHRlci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogTWVkaWFuIG9mIDUgbmVpZ2hib3VyIHBpeGVsczwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9NZWRpYW4tLWx1bS1vbmx5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbHVtLW9ubHnigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGx1bS1vbmx54oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+T25seSBhcHBseSBmaWx0ZXIgb24gbHVtaW5hbmNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjRiNjFjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNDQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZpZGVvbWl4ZXI6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9tZWRpYW4uaHRtbCIgdGl0bGU9InZpZGVvbWVkaWFuIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sIiB0aXRsZT0idnA4ZGVjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIudG9wX29mX3BhZ2UiPjwvYT52aWRlb21peGVyPC9zcGFuPjwvaDI+Ci08cD52aWRlb21peGVyPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5odG1sI0dzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZCIgdGl0bGU9ImVudW0gR3N0VmlkZW9NaXhlcjJCYWNrZ3JvdW5kIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmlkZW9NaXhlcjJCYWNrZ3JvdW5kPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCNHc3RWaWRlb01peGVyMi0tYmFja2dyb3VuZCIgdGl0bGU9IlRoZSDigJxiYWNrZ3JvdW5k4oCdIHByb3BlcnR5Ij5iYWNrZ3JvdW5kPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0VmlkZW9NaXhlcjIiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwjR3N0VmlkZW9NaXhlcjItc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFZpZGVvTWl4ZXIyIj5Hc3RWaWRlb01peGVyMjwvYT48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+ZW51bTwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5odG1sI0dzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZCIgdGl0bGU9ImVudW0gR3N0VmlkZW9NaXhlcjJCYWNrZ3JvdW5kIj5Hc3RWaWRlb01peGVyMkJhY2tncm91bmQ8L2E+PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZpZGVvTWl4ZXIyCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VmlkZW9NaXhlcjIgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RDaGlsZFByb3h5Lmh0bWwjR3N0Q2hpbGRQcm94eS1zdHJ1Y3QiPkdzdENoaWxkUHJveHk8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VmlkZW9taXhlciBjYW4gYWNjZXB0IEFZVVYsIEFSR0IgYW5kIEJHUkEgdmlkZW8gc3RyZWFtcy4gRm9yIGVhY2ggb2YgdGhlIHJlcXVlc3RlZAotc2luayBwYWRzIGl0IHdpbGwgY29tcGFyZSB0aGUgaW5jb21pbmcgZ2VvbWV0cnkgYW5kIGZyYW1lcmF0ZSB0byBkZWZpbmUgdGhlCi1vdXRwdXQgcGFyYW1ldGVycy4gSW5kZWVkIG91dHB1dCB2aWRlbyBmcmFtZXMgd2lsbCBoYXZlIHRoZSBnZW9tZXRyeSBvZiB0aGUKLWJpZ2dlc3QgaW5jb21pbmcgdmlkZW8gc3RyZWFtIGFuZCB0aGUgZnJhbWVyYXRlIG9mIHRoZSBmYXN0ZXN0IGluY29taW5nIG9uZS48L3A+Ci08cD5WaWRlb21peGVyIHdpbGwgZG8gY29sb3JzcGFjZSBjb252ZXJzaW9uLjwvcD4KLTxwPkluZGl2aWR1YWwgcGFyYW1ldGVycyBmb3IgZWFjaCBpbnB1dCBzdHJlYW0gY2FuIGJlIGNvbmZpZ3VyZWQgb24gdGhlCi08c3BhbiBjbGFzcz0idHlwZSI+R3N0VmlkZW9NaXhlcjJQYWQ8L3NwYW4+LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNTYuOC41Ij48L2E+PGgzPlNhbXBsZSBwaXBlbGluZXM8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xCi0yCi0zCi00Ci01Ci02Ci03Ci04PC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IFwKLSAgdmlkZW90ZXN0c3JjIHBhdHRlcm48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICB2aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5mb3JtYXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5BWVVWPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ZnJhbWVyYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+XDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmZyYWN0aW9uXDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+d2lkdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+aGVpZ2h0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICB2aWRlb2JveCBib3JkZXI8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5hbHBoYTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+IHRvcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj43MDwvc3Bhbj4gYm90dG9tPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj0tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjcwPC9zcGFuPiByaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yMjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHZpZGVvbWl4ZXIgbmFtZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm1peCBzaW5rXzA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojo8L3NwYW4+YWxwaGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjc8L3NwYW4+IHNpbmtfMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46Ojwvc3Bhbj5hbHBoYTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjAuNTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IFwKLSAgdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB4dmltYWdlc2luayBcCi0gIHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICB2aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5mb3JtYXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5BWVVWPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+ZnJhbWVyYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+XDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4oPC9zcGFuPmZyYWN0aW9uXDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4pPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjU8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj53aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMyMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5oZWlnaHQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yNDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtaXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gQSBwaXBlbGluZSB0byBkZW1vbnN0cmF0ZSB2aWRlb21peGVyIHVzZWQgdG9nZXRoZXIgd2l0aCB2aWRlb2JveC4KLVRoaXMgc2hvdWxkIHNob3cgYSAzMjB4MjQwIHBpeGVscyB2aWRlbyB0ZXN0IHNvdXJjZSB3aXRoIHNvbWUgdHJhbnNwYXJlbmN5Ci1zaG93aW5nIHRoZSBiYWNrZ3JvdW5kIGNoZWNrZXIgcGF0dGVybi4gQW5vdGhlciB2aWRlbyB0ZXN0IHNvdXJjZSB3aXRoIGp1c3QKLXRoZSBzbm93IHBhdHRlcm4gb2YgMTAweDEwMCBwaXhlbHMgaXMgb3ZlcmxhaWQgb24gdG9wIG9mIHRoZSBmaXJzdCBvbmUgb24KLXRoZSBsZWZ0IHZlcnRpY2FsbHkgY2VudGVyZWQgd2l0aCBhIHNtYWxsIHRyYW5zcGFyZW5jeSBzaG93aW5nIHRoZSBmaXJzdAotdmlkZW8gdGVzdCBzb3VyY2UgYmVoaW5kIGFuZCB0aGUgY2hlY2tlciBwYXR0ZXJuIHVuZGVyIGl0LiBOb3RlIHRoYXQgdGhlCi1mcmFtZXJhdGUgb2YgdGhlIG91dHB1dCB2aWRlbyBpcyAxMCBmcmFtZXMgcGVyIHNlY29uZC4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgcGF0dGVybjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBmcmFtZXJhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5cPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZnJhY3Rpb25cPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gd2lkdGg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDA8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGhlaWdodDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IFwKLSAgdmlkZW9taXhlciBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bWl4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHhpbWFnZXNpbmsgXAotICB2aWRlb3Rlc3RzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+ICBcCi0gIHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBmcmFtZXJhdGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5cPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPig8L3NwYW4+ZnJhY3Rpb25cPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPik8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiB3aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjMyMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gaGVpZ2h0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MjQwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbWl4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEEgcGlwZWxpbmUgdG8gZGVtb3N0cmF0ZSBiZ3JhIG1peGluZy4gKFRoaXMgZG9lcyBub3QgZGVtb25zdHJhdGUgYWxwaGEgYmxlbmRpbmcpLiAKLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb3Rlc3RzcmMgcGF0dGVybjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmZvcm1hdCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5JNDIwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZyYW1lcmF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPlw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5mcmFjdGlvblw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiB3aWR0aDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj4gaGVpZ2h0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICB2aWRlb21peGVyIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5taXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geGltYWdlc2luayBcCi0gIHZpZGVvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICB2aWRlbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5mb3JtYXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5JNDIwPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IGZyYW1lcmF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPlw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KDwvc3Bhbj5mcmFjdGlvblw8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiw8L3NwYW4+IHdpZHRoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MzIwPC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPiBoZWlnaHQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yNDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtaXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj48L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gQSBwaXBlbGluZSB0byB0ZXN0IEk0MjAKLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MQotMgotMwotNAotNQotNgotNwotODwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB2aWRlb21peGVyIG5hbWU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5taXhlciBzaW5rXzE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojo8L3NwYW4+YWxwaGE8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4wLjU8L3NwYW4+IHNpbmtfMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46Ojwvc3Bhbj54cG9zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTA8L3NwYW4+IHNpbmtfMTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46Ojwvc3Bhbj55cG9zPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4geGltYWdlc2luayBcCi0gIHZpZGVvdGVzdHNyYyBwYXR0ZXJuPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c25vdyB0aW1lc3RhbXA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5vZmZzZXQ8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4zMDAwMDAwMDAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDt2aWRlby94LXJhdyxmb3JtYXQ9QVlVVix3aWR0aD02NDAsaGVpZ2h0PTQ4MCxmcmFtZXJhdGU9KGZyYWN0aW9uKTMwLzEmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHRpbWVvdmVybGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZTIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG1peGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+IFwKLSAgdmlkZW90ZXN0c3JjIHBhdHRlcm48c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zbXB0ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gXAotICA8c3BhbiBjbGFzcz0ic3RyaW5nIj4mcXVvdDt2aWRlby94LXJhdyxmb3JtYXQ9QVlVVix3aWR0aD04MDAsaGVpZ2h0PTYwMCxmcmFtZXJhdGU9KGZyYWN0aW9uKTEwLzEmcXVvdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBcCi0gIHRpbWVvdmVybGF5IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZTIgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG1peGVyPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIEEgcGlwZWxpbmUgdG8gZGVtb25zdHJhdGUgc3luY2hyb25pemVkIG1peGluZyAodGhlIHNlY29uZCBzdHJlYW0gc3RhcnRzIGFmdGVyIDMgc2Vjb25kcykKLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNTYuOC42LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZpZGVvbWl4ZXIuaHRtbCNwbHVnaW4tdmlkZW9taXhlciI+dmlkZW9taXhlcjwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RmlsdGVyL0VkaXRvci9WaWRlby9Db21wb3NpdG9yPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1Ni44LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbmtfJXU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+cmVxdWVzdDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEJHUkEsIEFSR0IsIFJHQkEsIEFCR1IsIFk0NDQsIFk0MkIsIFlVWTIsIFVZVlksIFlWWVUsIEk0MjAsIFlWMTIsIE5WMTIsIE5WMjEsIFk0MUIsIFJHQiwgQkdSLCB4UkdCLCB4QkdSLCBSR0J4LCBCR1J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQkdSQSwgQVJHQiwgUkdCQSwgQUJHUiwgWTQ0NCwgWTQyQiwgWVVZMiwgVVlWWSwgWVZZVSwgSTQyMCwgWVYxMiwgTlYxMiwgTlYyMSwgWTQxQiwgUkdCLCBCR1IsIHhSR0IsIHhCR1IsIFJHQngsIEJHUnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb01peGVyMi1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFZpZGVvTWl4ZXIyPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0VmlkZW9NaXhlcjI7PC9wcmU+Ci08cD5UaGUgb3BhcXVlIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5odG1sI0dzdFZpZGVvTWl4ZXIyIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VmlkZW9NaXhlcjI8L3NwYW4+PC9hPiBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWaWRlb01peGVyMkJhY2tncm91bmQiPjwvYT48aDM+ZW51bSBHc3RWaWRlb01peGVyMkJhY2tncm91bmQ8L2gzPgotPHA+VGhlIGRpZmZlcmVudCBiYWNrZ3JvdW5kcyB2aWRlb21peGVyIGNhbiBibGVuZCBvdmVyLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QzIj4KLTxhIG5hbWU9IkdzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZC5tZW1iZXJzIj48L2E+PGg0Pk1lbWJlcnM8L2g0PgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX25hbWUiPgotPGNvbCBjbGFzcz0iZW51bV9tZW1iZXJzX2Rlc2NyaXB0aW9uIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0iZW51bV9tZW1iZXJzX2Fubm90YXRpb25zIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX25hbWUiPjxwPjxhIG5hbWU9IlZJREVPLU1JWEVSMi1CQUNLR1JPVU5ELUNIRUNLRVI6Q0FQUyI+PC9hPlZJREVPX01JWEVSMl9CQUNLR1JPVU5EX0NIRUNLRVI8L3A+PC90ZD4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfZGVzY3JpcHRpb24iPgotPHA+Y2hlY2tlciBwYXR0ZXJuIGJhY2tncm91bmQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iVklERU8tTUlYRVIyLUJBQ0tHUk9VTkQtQkxBQ0s6Q0FQUyI+PC9hPlZJREVPX01JWEVSMl9CQUNLR1JPVU5EX0JMQUNLPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNvbGlkIGNvbG9yIGJsYWNrIGJhY2tncm91bmQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iVklERU8tTUlYRVIyLUJBQ0tHUk9VTkQtV0hJVEU6Q0FQUyI+PC9hPlZJREVPX01JWEVSMl9CQUNLR1JPVU5EX1dISVRFPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPnNvbGlkIGNvbG9yIHdoaXRlIGJhY2tncm91bmQ8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJlbnVtX21lbWJlcl9hbm5vdGF0aW9ucyI+wqA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0iZW51bV9tZW1iZXJfbmFtZSI+PHA+PGEgbmFtZT0iVklERU8tTUlYRVIyLUJBQ0tHUk9VTkQtVFJBTlNQQVJFTlQ6Q0FQUyI+PC9hPlZJREVPX01JWEVSMl9CQUNLR1JPVU5EX1RSQU5TUEFSRU5UPC9wPjwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Rlc2NyaXB0aW9uIj4KLTxwPmJhY2tncm91bmQgaXMgbGVmdCB0cmFuc3BhcmVudCBhbmQgbGF5ZXJzIGFyZSBjb21wb3NpdGVkIHVzaW5nICJBIE9WRVIgQiIgY29tcG9zaXRpb24gcnVsZXMuIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIHRvIEFZVVYgYW5kIEFSR0IgKGFuZCB2YXJpYW50cykgYXMgaXQgcHJlc2VydmVzIHRoZSBhbHBoYSBjaGFubmVsIGFuZCBhbGxvd3MgZm9yIGZ1cnRoZXIgbWl4aW5nLjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImVudW1fbWVtYmVyX2Fubm90YXRpb25zIj7CoDwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9taXhlci5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VmlkZW9NaXhlcjItLWJhY2tncm91bmQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxiYWNrZ3JvdW5k4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxiYWNrZ3JvdW5k4oCdICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21peGVyLmh0bWwjR3N0VmlkZW9NaXhlcjJCYWNrZ3JvdW5kIiB0aXRsZT0iZW51bSBHc3RWaWRlb01peGVyMkJhY2tncm91bmQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWaWRlb01peGVyMkJhY2tncm91bmQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QmFja2dyb3VuZCB0eXBlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBDaGVja2VyIHBhdHRlcm48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzU0ZTQwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+dnA4ZGVjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCIgdGl0bGU9InZpZGVvbWl4ZXIiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwiIHRpdGxlPSJ2cDhlbmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy50b3Bfb2ZfcGFnZSI+PC9hPnZwOGRlYzwvc3Bhbj48L2gyPgotPHA+dnA4ZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLmh0bWwjR3N0VlA4RGVjLS1kZWJsb2NraW5nLWxldmVsIiB0aXRsZT0iVGhlIOKAnGRlYmxvY2tpbmctbGV2ZWzigJ0gcHJvcGVydHkiPmRlYmxvY2tpbmctbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLmh0bWwjR3N0VlA4RGVjLS1ub2lzZS1sZXZlbCIgdGl0bGU9IlRoZSDigJxub2lzZS1sZXZlbOKAnSBwcm9wZXJ0eSI+bm9pc2UtbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLmh0bWwjR3N0VlA4RGVjLS1wb3N0LXByb2Nlc3NpbmciIHRpdGxlPSJUaGUg4oCccG9zdC1wcm9jZXNzaW5n4oCdIHByb3BlcnR5Ij5wb3N0LXByb2Nlc3Npbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RGVjUG9zdFByb2Nlc3NpbmdGbGFnczwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sI0dzdFZQOERlYy0tcG9zdC1wcm9jZXNzaW5nLWZsYWdzIiB0aXRsZT0iVGhlIOKAnHBvc3QtcHJvY2Vzc2luZy1mbGFnc+KAnSBwcm9wZXJ0eSI+cG9zdC1wcm9jZXNzaW5nLWZsYWdzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sI0dzdFZQOERlYy0tdGhyZWFkcyIgdGl0bGU9IlRoZSDigJx0aHJlYWRz4oCdIHByb3BlcnR5Ij50aHJlYWRzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RWUDhEZWMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbCNHc3RWUDhEZWMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFZQOERlYyI+R3N0VlA4RGVjPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLUdzdFZpZGVvRGVjb2Rlci5odG1sI0dzdFZpZGVvRGVjb2RlciI+R3N0VmlkZW9EZWNvZGVyPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RWUFhEZWMKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZQOERlYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBlbGVtZW50IGRlY29kZXMgVlA4IHN0cmVhbXMgaW50byByYXcgdmlkZW8uPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZyIgdGFyZ2V0PSJfdG9wIj5WUDg8L2E+IGlzIGEgcm95YWx0eS1mcmVlCi08cD52aWRlbyBjb2RlYyBtYWludGFpbmVkIGJ5IDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tLyIgdGFyZ2V0PSJfdG9wIj5Hb29nbGUKLTwvYT4uIEl0J3MgdGhlIHN1Y2Nlc3NvciBvZiBPbjIgVlAzLCB3aGljaCB3YXMgdGhlIGJhc2Ugb2YgdGhlCi1UaGVvcmEgdmlkZW8gY29kZWMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1Ny43LjUiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW90ZXN0c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2VibSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gbWF0cm9za2FkZW11eCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdnA4ZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvc2NhbGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG92aWRlb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZGVjb2RlIGEgV2ViTSBzdHJlYW0gYW5kIGRlY29kZXMgdGhlIFZQOCB2aWRlby4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNTcuNy42LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZweC5odG1sI3BsdWdpbi12cHgiPnZweDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkRhdmlkIFNjaGxlZWYgJmx0O2RzQGVudHJvcHl3YXZlLmNvbSZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9EZWNvZGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1Ny43LjYuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC12cDg8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZGVjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhEZWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RWUDhEZWM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWUDhEZWM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RGVjLS1kZWJsb2NraW5nLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVibG9ja2luZy1sZXZlbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGVibG9ja2luZy1sZXZlbOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWJsb2NraW5nIGxldmVsLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTY8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhEZWMtLW5vaXNlLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbm9pc2UtbGV2ZWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5vaXNlLWxldmVs4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Tm9pc2UgbGV2ZWwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxNjwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOERlYy0tcG9zdC1wcm9jZXNzaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9zdC1wcm9jZXNzaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb3N0LXByb2Nlc3NpbmfigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZSBwb3N0IHByb2Nlc3NpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhEZWMtLXBvc3QtcHJvY2Vzc2luZy1mbGFncyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvc3QtcHJvY2Vzc2luZy1mbGFnc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9zdC1wcm9jZXNzaW5nLWZsYWdz4oCdICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDhEZWNQb3N0UHJvY2Vzc2luZ0ZsYWdzPC9zcGFuPjwvcHJlPgotPHA+RmxhZ3MgdG8gY29udHJvbCBwb3N0IHByb2Nlc3NpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IERlYmxvY2t8RGVtYWNyb2Jsb2NrfE11bHRpLWZyYW1lIHF1YWxpdHkgZW5oYW5jZW1lbnQ8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOERlYy0tdGhyZWFkcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRocmVhZHPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRocmVhZHPigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBudW1iZXIgb2YgZGVjb2RpbmcgdGhyZWFkcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDE2XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5zZWUtYWxzbyI+PC9hPjxoMj5TZWUgQWxzbzwvaDI+Ci08cD52cDhlbmMsIG1hdHJvc2thZGVtdXg8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ2YmUwOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MTAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnZwOGVuYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbCIgdGl0bGU9InZwOGRlYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCIgdGl0bGU9InZwOWRlYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhkZWMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy50b3Bfb2ZfcGFnZSI+PC9hPnZwOGVuYzwvc3Bhbj48L2gyPgotPHA+dnA4ZW5jPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tYXJuci1tYXhmcmFtZXMiIHRpdGxlPSJUaGUg4oCcYXJuci1tYXhmcmFtZXPigJ0gcHJvcGVydHkiPmFybnItbWF4ZnJhbWVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWFybnItc3RyZW5ndGgiIHRpdGxlPSJUaGUg4oCcYXJuci1zdHJlbmd0aOKAnSBwcm9wZXJ0eSI+YXJuci1zdHJlbmd0aDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1hcm5yLXR5cGUiIHRpdGxlPSJUaGUg4oCcYXJuci10eXBl4oCdIHByb3BlcnR5Ij5hcm5yLXR5cGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1hdXRvLWFsdC1yZWYiIHRpdGxlPSJUaGUg4oCcYXV0by1hbHQtcmVm4oCdIHByb3BlcnR5Ij5hdXRvLWFsdC1yZWY8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tYnVmZmVyLWluaXRpYWwtc2l6ZSIgdGl0bGU9IlRoZSDigJxidWZmZXItaW5pdGlhbC1zaXpl4oCdIHByb3BlcnR5Ij5idWZmZXItaW5pdGlhbC1zaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWJ1ZmZlci1vcHRpbWFsLXNpemUiIHRpdGxlPSJUaGUg4oCcYnVmZmVyLW9wdGltYWwtc2l6ZeKAnSBwcm9wZXJ0eSI+YnVmZmVyLW9wdGltYWwtc2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1idWZmZXItc2l6ZSIgdGl0bGU9IlRoZSDigJxidWZmZXItc2l6ZeKAnSBwcm9wZXJ0eSI+YnVmZmVyLXNpemU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tY3B1LXVzZWQiIHRpdGxlPSJUaGUg4oCcY3B1LXVzZWTigJ0gcHJvcGVydHkiPmNwdS11c2VkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWNxLWxldmVsIiB0aXRsZT0iVGhlIOKAnGNxLWxldmVs4oCdIHByb3BlcnR5Ij5jcS1sZXZlbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDY0PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tZGVhZGxpbmUiIHRpdGxlPSJUaGUg4oCcZGVhZGxpbmXigJ0gcHJvcGVydHkiPmRlYWRsaW5lPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWRyb3BmcmFtZS10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCcZHJvcGZyYW1lLXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+ZHJvcGZyYW1lLXRocmVzaG9sZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDhFbmNFbmRVc2FnZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tZW5kLXVzYWdlIiB0aXRsZT0iVGhlIOKAnGVuZC11c2FnZeKAnSBwcm9wZXJ0eSI+ZW5kLXVzYWdlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOEVuY0VyRmxhZ3M8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWVycm9yLXJlc2lsaWVudCIgdGl0bGU9IlRoZSDigJxlcnJvci1yZXNpbGllbnTigJ0gcHJvcGVydHkiPmVycm9yLXJlc2lsaWVudDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1sYWctaW4tZnJhbWVzIiB0aXRsZT0iVGhlIOKAnGxhZy1pbi1mcmFtZXPigJ0gcHJvcGVydHkiPmxhZy1pbi1mcmFtZXM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbWF4LXF1YW50aXplciIgdGl0bGU9IlRoZSDigJxtYXgtcXVhbnRpemVy4oCdIHByb3BlcnR5Ij5tYXgtcXVhbnRpemVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLW1pbi1xdWFudGl6ZXIiIHRpdGxlPSJUaGUg4oCcbWluLXF1YW50aXplcuKAnSBwcm9wZXJ0eSI+bWluLXF1YW50aXplcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbXVsdGlwYXNzLWNhY2hlLWZpbGUiIHRpdGxlPSJUaGUg4oCcbXVsdGlwYXNzLWNhY2hlLWZpbGXigJ0gcHJvcGVydHkiPm11bHRpcGFzcy1jYWNoZS1maWxlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOEVuY011bHRpcGFzc01vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLW11bHRpcGFzcy1tb2RlIiB0aXRsZT0iVGhlIOKAnG11bHRpcGFzcy1tb2Rl4oCdIHByb3BlcnR5Ij5tdWx0aXBhc3MtbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1ub2lzZS1zZW5zaXRpdml0eSIgdGl0bGU9IlRoZSDigJxub2lzZS1zZW5zaXRpdml0eeKAnSBwcm9wZXJ0eSI+bm9pc2Utc2Vuc2l0aXZpdHk8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1yZXNpemUtYWxsb3dlZCIgdGl0bGU9IlRoZSDigJxyZXNpemUtYWxsb3dlZOKAnSBwcm9wZXJ0eSI+cmVzaXplLWFsbG93ZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tcmVzaXplLWRvd24tdGhyZXNob2xkIiB0aXRsZT0iVGhlIOKAnHJlc2l6ZS1kb3duLXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+cmVzaXplLWRvd24tdGhyZXNob2xkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXJlc2l6ZS11cC10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCccmVzaXplLXVwLXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+cmVzaXplLXVwLXRocmVzaG9sZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1zaGFycG5lc3MiIHRpdGxlPSJUaGUg4oCcc2hhcnBuZXNz4oCdIHByb3BlcnR5Ij5zaGFycG5lc3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tc3RhdGljLXRocmVzaG9sZCIgdGl0bGU9IlRoZSDigJxzdGF0aWMtdGhyZXNob2xk4oCdIHByb3BlcnR5Ij5zdGF0aWMtdGhyZXNob2xkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXRhcmdldC1iaXRyYXRlIiB0aXRsZT0iVGhlIOKAnHRhcmdldC1iaXRyYXRl4oCdIHByb3BlcnR5Ij50YXJnZXQtYml0cmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10aHJlYWRzIiB0aXRsZT0iVGhlIOKAnHRocmVhZHPigJ0gcHJvcGVydHkiPnRocmVhZHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jVG9rZW5QYXJ0aXRpb25zPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10b2tlbi1wYXJ0aXRpb25zIiB0aXRsZT0iVGhlIOKAnHRva2VuLXBhcnRpdGlvbnPigJ0gcHJvcGVydHkiPnRva2VuLXBhcnRpdGlvbnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jVHVuaW5nPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10dW5pbmciIHRpdGxlPSJUaGUg4oCcdHVuaW5n4oCdIHByb3BlcnR5Ij50dW5pbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jU2NhbGluZ01vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLWhvcml6b250YWwtc2NhbGluZy1tb2RlIiB0aXRsZT0iVGhlIOKAnGhvcml6b250YWwtc2NhbGluZy1tb2Rl4oCdIHByb3BlcnR5Ij5ob3Jpem9udGFsLXNjYWxpbmctbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1rZXlmcmFtZS1tYXgtZGlzdCIgdGl0bGU9IlRoZSDigJxrZXlmcmFtZS1tYXgtZGlzdOKAnSBwcm9wZXJ0eSI+a2V5ZnJhbWUtbWF4LWRpc3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jS2ZNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS1rZXlmcmFtZS1tb2RlIiB0aXRsZT0iVGhlIOKAnGtleWZyYW1lLW1vZGXigJ0gcHJvcGVydHkiPmtleWZyYW1lLW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tbWF4LWludHJhLWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcbWF4LWludHJhLWJpdHJhdGXigJ0gcHJvcGVydHkiPm1heC1pbnRyYS1iaXRyYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLW92ZXJzaG9vdCIgdGl0bGU9IlRoZSDigJxvdmVyc2hvb3TigJ0gcHJvcGVydHkiPm92ZXJzaG9vdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlkIiB0aXRsZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlk4oCdIHByb3BlcnR5Ij50ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1udW1iZXItbGF5ZXJzIiB0aXRsZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnPigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHkiIHRpdGxlPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHnigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LXBlcmlvZGljaXR5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3IiIHRpdGxlPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3LigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LXJhdGUtZGVjaW1hdG9yPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGXigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXR3b3Bhc3MtdmJyLWJpYXMiIHRpdGxlPSJUaGUg4oCcdHdvcGFzcy12YnItYmlhc+KAnSBwcm9wZXJ0eSI+dHdvcGFzcy12YnItYmlhczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10d29wYXNzLXZici1tYXhzZWN0aW9uIiB0aXRsZT0iVGhlIOKAnHR3b3Bhc3MtdmJyLW1heHNlY3Rpb27igJ0gcHJvcGVydHkiPnR3b3Bhc3MtdmJyLW1heHNlY3Rpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdHdvcGFzcy12YnItbWluc2VjdGlvbiIgdGl0bGU9IlRoZSDigJx0d29wYXNzLXZici1taW5zZWN0aW9u4oCdIHByb3BlcnR5Ij50d29wYXNzLXZici1taW5zZWN0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCNHc3RWUDhFbmMtLXVuZGVyc2hvb3QiIHRpdGxlPSJUaGUg4oCcdW5kZXJzaG9vdOKAnSBwcm9wZXJ0eSI+dW5kZXJzaG9vdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDhFbmNTY2FsaW5nTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy0tdmVydGljYWwtc2NhbGluZy1tb2RlIiB0aXRsZT0iVGhlIOKAnHZlcnRpY2FsLXNjYWxpbmctbW9kZeKAnSBwcm9wZXJ0eSI+dmVydGljYWwtc2NhbGluZy1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEZyYWN0aW9uPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwjR3N0VlA4RW5jLS10aW1lYmFzZSIgdGl0bGU9IlRoZSDigJx0aW1lYmFzZeKAnSBwcm9wZXJ0eSI+dGltZWJhc2U8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFZQOEVuYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sI0dzdFZQOEVuYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VlA4RW5jIj5Hc3RWUDhFbmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtR3N0VmlkZW9FbmNvZGVyLmh0bWwjR3N0VmlkZW9FbmNvZGVyIj5Hc3RWaWRlb0VuY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZQWEVuYwotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VlA4RW5jCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RWUDhFbmMgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+IGFuZCAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPkdzdFRhZ1NldHRlcjwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBlbmNvZGVzIHJhdyB2aWRlbyBpbnRvIGEgVlA4IHN0cmVhbS48L3A+Ci08YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnIiB0YXJnZXQ9Il90b3AiPlZQODwvYT4gaXMgYSByb3lhbHR5LWZyZWUKLTxwPnZpZGVvIGNvZGVjIG1haW50YWluZWQgYnkgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiB0YXJnZXQ9Il90b3AiPkdvb2dsZQotPC9hPi4gSXQncyB0aGUgc3VjY2Vzc29yIG9mIE9uMiBWUDMsIHdoaWNoIHdhcyB0aGUgYmFzZSBvZiB0aGUKLVRoZW9yYSB2aWRlbyBjb2RlYy48L3A+Ci08cD5UbyBjb250cm9sIHRoZSBxdWFsaXR5IG9mIHRoZSBlbmNvZGluZywgdGhlIDxzcGFuIGNsYXNzPSJ0eXBlIj7igJx0YXJnZXQtYml0cmF0ZeKAnTwvc3Bhbj4sCi08c3BhbiBjbGFzcz0idHlwZSI+4oCcbWluLXF1YW50aXplcuKAnTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJ0eXBlIj7igJxtYXgtcXVhbnRpemVy4oCdPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0idHlwZSI+4oCcY3EtbGV2ZWzigJ08L3NwYW4+Ci1wcm9wZXJ0aWVzIGNhbiBiZSB1c2VkLiBXaGljaCBvbmUgaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSBtb2RlIHNlbGVjdGVkIGJ5Ci10aGUgPHNwYW4gY2xhc3M9InR5cGUiPuKAnGVuZC11c2FnZeKAnTwvc3Bhbj4gcHJvcGVydHkuCi1TZWUgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy9kb2NzL2VuY29kZXItcGFyYW1ldGVycy8iIHRhcmdldD0iX3RvcCI+RW5jb2RlciBQYXJhbWV0ZXJzPC9hPgotZm9yIGV4cGxhbmF0aW9uLCBleGFtcGxlcyBmb3IgdXNlZnVsIGVuY29kaW5nIHBhcmFtZXRlcnMgYW5kIG1vcmUgZGV0YWlscwotb24gdGhlIGVuY29kaW5nIHBhcmFtZXRlcnMuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1OC44LjYiPjwvYT48aDM+RXhhbXBsZSBwaXBlbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diB2aWRlb3Rlc3RzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEwMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2cDhlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHdlYm1tdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dmlkZW90ZXN0c3JjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2VibTwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBlbmNvZGUgYSB0ZXN0IHZpZGVvIHNvdXJjZSB0byBWUDggbXV4ZWQgaW4gYW4KLVdlYk0gY29udGFpbmVyLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1OC44LjcuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwjcGx1Z2luLXZweCI+dnB4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAZW50cm9weXdhdmUuY29tJmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0VuY29kZXIvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjU4LjguNy4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDE2MzgzIF0sIGhlaWdodD0oaW50KVsgMSwgMTYzODMgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtdnA4LCBwcm9maWxlPShzdHJpbmcpeyAwLCAxLCAyLCAzIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RWUDhFbmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWUDhFbmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1hcm5yLW1heGZyYW1lcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFybnItbWF4ZnJhbWVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhcm5yLW1heGZyYW1lc+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbHRSZWYgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1hcm5yLXN0cmVuZ3RoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXJuci1zdHJlbmd0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYXJuci1zdHJlbmd0aOKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QWx0UmVmIHN0cmVuZ3RoLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLWFybnItdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFybnItdHlwZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYXJuci10eXBl4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QWx0UmVmIHR5cGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSwzXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDM8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tYXV0by1hbHQtcmVmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXV0by1hbHQtcmVm4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhdXRvLWFsdC1yZWbigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgQWx0UmVmIGZyYW1lcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tYnVmZmVyLWluaXRpYWwtc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJ1ZmZlci1pbml0aWFsLXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1ZmZlci1pbml0aWFsLXNpemXigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkluaXRpYWwgY2xpZW50IGJ1ZmZlciBzaXplIChtcykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1idWZmZXItb3B0aW1hbC1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnVmZmVyLW9wdGltYWwtc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnVmZmVyLW9wdGltYWwtc2l6ZeKAnSAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+T3B0aW1hbCBjbGllbnQgYnVmZmVyIHNpemUgKG1zKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1MDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLWJ1ZmZlci1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnVmZmVyLXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1ZmZlci1zaXpl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkNsaWVudCBidWZmZXIgc2l6ZSAobXMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDYwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tY3B1LXVzZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjcHUtdXNlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3B1LXVzZWTigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q1BVIHVzZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTE2LDE2XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tY3EtbGV2ZWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjcS1sZXZlbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3EtbGV2ZWzigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q29uc3RyYWluZWQgcXVhbGl0eSBsZXZlbC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDYzXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLWRlYWRsaW5lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVhZGxpbmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRlYWRsaW5l4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWFkbGluZSBwZXIgZnJhbWUgKHVzZWMsIDA9ZGlzYWJsZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tZHJvcGZyYW1lLXRocmVzaG9sZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRlbXBvcmFsIHJlc2FtcGxpbmcgdGhyZXNob2xkIChidWYgJSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1lbmQtdXNhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlbmQtdXNhZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGVuZC11c2FnZeKAnSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jRW5kVXNhZ2U8L3NwYW4+PC9wcmU+Ci08cD5SYXRlIGNvbnRyb2wgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVmFyaWFibGUgQml0IFJhdGUgKFZCUikgbW9kZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1lcnJvci1yZXNpbGllbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlcnJvci1yZXNpbGllbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGVycm9yLXJlc2lsaWVudOKAnSAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jRXJGbGFnczwvc3Bhbj48L3ByZT4KLTxwPkVycm9yIHJlc2lsaWVuY2UgZmxhZ3MuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1sYWctaW4tZnJhbWVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbGFnLWluLWZyYW1lc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGFnLWluLWZyYW1lc+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIGxhZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDI1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tbWF4LXF1YW50aXplciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1xdWFudGl6ZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1xdWFudGl6ZXLigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heGltdW0gUXVhbnRpemVyICh3b3JzdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw2M108L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA2MzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1taW4tcXVhbnRpemVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWluLXF1YW50aXplcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWluLXF1YW50aXplcuKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWluaW11bSBRdWFudGl6ZXIgKGJlc3QpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNjNdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1tdWx0aXBhc3MtY2FjaGUtZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11bHRpcGFzcy1jYWNoZS1maWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdWx0aXBhc3MtY2FjaGUtZmlsZeKAnSAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPk11bHRpcGFzcyBjYWNoZSBmaWxlLiBJZiBzdHJlYW0gY2FwcyByZWluaXRlZCwgbXVsdGlwbGUgZmlsZXMgd2lsbCBiZSBjcmVhdGVkOiBmaWxlLCBmaWxlLjEsIGZpbGUuMiwgLi4uIGFuZCBzbyBvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIm11bHRpcGFzcy5jYWNoZSI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tbXVsdGlwYXNzLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtdWx0aXBhc3MtbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbXVsdGlwYXNzLW1vZGXigJ0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDhFbmNNdWx0aXBhc3NNb2RlPC9zcGFuPjwvcHJlPgotPHA+TXVsdGlwYXNzIGVuY29kZSBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBPbmUgcGFzcyBlbmNvZGluZyAoZGVmYXVsdCk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tbm9pc2Utc2Vuc2l0aXZpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxub2lzZS1zZW5zaXRpdml0eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbm9pc2Utc2Vuc2l0aXZpdHnigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Tm9pc2Ugc2Vuc2lzaXZpdHkgKGZyYW1lcyB0byBibHVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDZdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS1yZXNpemUtYWxsb3dlZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2l6ZS1hbGxvd2Vk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXNpemUtYWxsb3dlZOKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkFsbG93IHNwYXRpYWwgcmVzYW1wbGluZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tcmVzaXplLWRvd24tdGhyZXNob2xkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccmVzaXplLWRvd24tdGhyZXNob2xk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXNpemUtZG93bi10aHJlc2hvbGTigJ0gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Eb3duc2NhbGUgdGhyZXNob2xkIChidWYgJSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNjA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tcmVzaXplLXVwLXRocmVzaG9sZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2l6ZS11cC10aHJlc2hvbGTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHJlc2l6ZS11cC10aHJlc2hvbGTigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlVwc2NhbGUgdGhyZXNob2xkIChidWYgJSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMzA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tc2hhcnBuZXNzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2hhcnBuZXNz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzaGFycG5lc3PigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5GaWx0ZXIgc2hhcnBuZXNzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsN108L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXN0YXRpYy10aHJlc2hvbGQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdGF0aWMtdGhyZXNob2xk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzdGF0aWMtdGhyZXNob2xk4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5Nb3Rpb24gZGV0ZWN0aW9uIHRocmVzaG9sZC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXRhcmdldC1iaXRyYXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGFyZ2V0LWJpdHJhdGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRhcmdldC1iaXRyYXRl4oCdICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRhcmdldCBiaXRyYXRlIChpbiBiaXRzL3NlYykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMjU2MDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXRocmVhZHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aHJlYWRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aHJlYWRz4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgdGhyZWFkcyB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw2NF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXRva2VuLXBhcnRpdGlvbnMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0b2tlbi1wYXJ0aXRpb25z4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0b2tlbi1wYXJ0aXRpb25z4oCdICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOEVuY1Rva2VuUGFydGl0aW9uczwvc3Bhbj48L3ByZT4KLTxwPk51bWJlciBvZiB0b2tlbiBwYXJ0aXRpb25zLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBPbmUgdG9rZW4gcGFydGl0aW9uPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXR1bmluZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR1bmluZ+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdHVuaW5n4oCdICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDhFbmNUdW5pbmc8L3NwYW4+PC9wcmU+Ci08cD5UdW5pbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IFR1bmUgZm9yIFBTTlI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0taG9yaXpvbnRhbC1zY2FsaW5nLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxob3Jpem9udGFsLXNjYWxpbmctbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcaG9yaXpvbnRhbC1zY2FsaW5nLW1vZGXigJ0gIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDhFbmNTY2FsaW5nTW9kZTwvc3Bhbj48L3ByZT4KLTxwPkhvcml6b250YWwgc2NhbGluZyBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOb3JtYWw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0ta2V5ZnJhbWUtbWF4LWRpc3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxrZXlmcmFtZS1tYXgtZGlzdOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCca2V5ZnJhbWUtbWF4LWRpc3TigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIGtleWZyYW1lcyAobnVtYmVyIG9mIGZyYW1lcykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTI4PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLWtleWZyYW1lLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxrZXlmcmFtZS1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxrZXlmcmFtZS1tb2Rl4oCdICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOEVuY0tmTW9kZTwvc3Bhbj48L3ByZT4KLTxwPktleWZyYW1lIHBsYWNlbWVudC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRGV0ZXJtaW5lIG9wdGltYWwgcGxhY2VtZW50IGF1dG9tYXRpY2FsbHk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tbWF4LWludHJhLWJpdHJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtaW50cmEtYml0cmF0ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWludHJhLWJpdHJhdGXigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBJbnRyYSBmcmFtZSBiaXRyYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tb3ZlcnNob290Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcb3ZlcnNob2904oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxvdmVyc2hvb3TigJ0gICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EYXRhcmF0ZSBvdmVyc2hvb3QgKG1heCkgdGFyZ2V0ICglKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktbGF5ZXItaWTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlk4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI0dWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlQXJyYXk8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+U2VxdWVuY2UgZGVmaW5pbmcgY29kaW5nIGxheWVyIG1lbWJlcnNoaXAuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1udW1iZXItbGF5ZXJzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktbnVtYmVyLWxheWVyc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktbnVtYmVyLWxheWVyc+KAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk51bWJlciBvZiBjb2RpbmcgbGF5ZXJzIHRvIHVzZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFsxLDVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1wZXJpb2RpY2l0eSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LXBlcmlvZGljaXR54oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS1wZXJpb2RpY2l0eeKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkxlbmd0aCBvZiBzZXF1ZW5jZSB0aGF0IGRlZmluZXMgbGF5ZXIgbWVtYmVyc2hpcCBwZXJpb2RpY2l0eS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDE2XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3IiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS1yYXRlLWRlY2ltYXRvcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3LigJ0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC9wcmU+Ci08cD5SYXRlIGRlY2ltYXRpb24gZmFjdG9ycyBmb3IgZWFjaCBsYXllci48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRl4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI0dWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlQXJyYXk8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+VGFyZ2V0IGJpdHJhdGVzIGZvciBjb2RpbmcgbGF5ZXJzIChvbmUgcGVyIGxheWVyLCBkZWNyZWFzaW5nKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXR3b3Bhc3MtdmJyLWJpYXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0d29wYXNzLXZici1iaWFz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0d29wYXNzLXZici1iaWFz4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DQlIvVkJSIGJpYXMgKDA9Q0JSLCAxMDA9VkJSKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1MDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS10d29wYXNzLXZici1tYXhzZWN0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdHdvcGFzcy12YnItbWF4c2VjdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdHdvcGFzcy12YnItbWF4c2VjdGlvbuKAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+R09QIG1heGltdW0gYml0cmF0ZSAoJSB0YXJnZXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOEVuYy0tdHdvcGFzcy12YnItbWluc2VjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR3b3Bhc3MtdmJyLW1pbnNlY3Rpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR3b3Bhc3MtdmJyLW1pbnNlY3Rpb27igJ0gICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkdPUCBtaW5pbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDhFbmMtLXVuZGVyc2hvb3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1bmRlcnNob2904oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1bmRlcnNob2904oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EYXRhcmF0ZSB1bmRlcnNob290IChtaW4pIHRhcmdldCAoJSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS12ZXJ0aWNhbC1zY2FsaW5nLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx2ZXJ0aWNhbC1zY2FsaW5nLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHZlcnRpY2FsLXNjYWxpbmctbW9kZeKAnSAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA4RW5jU2NhbGluZ01vZGU8L3NwYW4+PC9wcmU+Ci08cD5WZXJ0aWNhbCBzY2FsaW5nIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5vcm1hbDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA4RW5jLS10aW1lYmFzZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRpbWViYXNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aW1lYmFzZeKAnSAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEZyYWN0aW9uPC9zcGFuPjwvcHJlPgotPHA+RnJhY3Rpb24gb2Ygb25lIHNlY29uZCB0aGF0IGlzIHRoZSBzaG9ydGVzdCBpbnRlcmZyYW1lIHRpbWUgLSBub3JtYWxseSBsZWZ0IGFzIHplcm8gd2hpY2ggd2lsbCBkZWZhdWx0IHRvIHRoZSBmcmFtZXJhdGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnZwOGRlYywgd2VibW11eCwgb2dnbXV4PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMmY4NGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT52cDlkZWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA4ZW5jLmh0bWwiIHRpdGxlPSJ2cDhlbmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwiIHRpdGxlPSJ2cDllbmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGVuYy5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLnRvcF9vZl9wYWdlIj48L2E+dnA5ZGVjPC9zcGFuPjwvaDI+Ci08cD52cDlkZWM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5wcm9wZXJ0aWVzIj48L2E+PGgyPlByb3BlcnRpZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX3R5cGUiPgotPGNvbCB3aWR0aD0iMzAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX25hbWUiPgotPGNvbCB3aWR0aD0iMjAwcHgiIGNsYXNzPSJwcm9wZXJ0aWVzX2ZsYWdzIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCNHc3RWUDlEZWMtLWRlYmxvY2tpbmctbGV2ZWwiIHRpdGxlPSJUaGUg4oCcZGVibG9ja2luZy1sZXZlbOKAnSBwcm9wZXJ0eSI+ZGVibG9ja2luZy1sZXZlbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCNHc3RWUDlEZWMtLW5vaXNlLWxldmVsIiB0aXRsZT0iVGhlIOKAnG5vaXNlLWxldmVs4oCdIHByb3BlcnR5Ij5ub2lzZS1sZXZlbDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuaHRtbCNHc3RWUDlEZWMtLXBvc3QtcHJvY2Vzc2luZyIgdGl0bGU9IlRoZSDigJxwb3N0LXByb2Nlc3NpbmfigJ0gcHJvcGVydHkiPnBvc3QtcHJvY2Vzc2luZzwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDlEZWNQb3N0UHJvY2Vzc2luZ0ZsYWdzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwjR3N0VlA5RGVjLS1wb3N0LXByb2Nlc3NpbmctZmxhZ3MiIHRpdGxlPSJUaGUg4oCccG9zdC1wcm9jZXNzaW5nLWZsYWdz4oCdIHByb3BlcnR5Ij5wb3N0LXByb2Nlc3NpbmctZmxhZ3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwjR3N0VlA5RGVjLS10aHJlYWRzIiB0aXRsZT0iVGhlIOKAnHRocmVhZHPigJ0gcHJvcGVydHkiPnRocmVhZHM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFZQOURlYyI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5odG1sI0dzdFZQOURlYy1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0VlA5RGVjIj5Hc3RWUDlEZWM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdC1wbHVnaW5zLWJhc2UtbGlicy0xLjBnc3QtcGx1Z2lucy1iYXNlLWxpYnMtR3N0VmlkZW9EZWNvZGVyLmh0bWwjR3N0VmlkZW9EZWNvZGVyIj5Hc3RWaWRlb0RlY29kZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZQWERlYwotICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0VlA5RGVjCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgZGVjb2RlcyBWUDkgc3RyZWFtcyBpbnRvIHJhdyB2aWRlby48L3A+Ci08YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnIiB0YXJnZXQ9Il90b3AiPlZQOTwvYT4gaXMgYSByb3lhbHR5LWZyZWUKLTxwPnZpZGVvIGNvZGVjIG1haW50YWluZWQgYnkgPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiB0YXJnZXQ9Il90b3AiPkdvb2dsZQotPC9hPi4gSXQncyB0aGUgc3VjY2Vzc29yIG9mIE9uMiBWUDMsIHdoaWNoIHdhcyB0aGUgYmFzZSBvZiB0aGUKLVRoZW9yYSB2aWRlbyBjb2RlYy48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjU5LjcuNSI+PC9hPjxoMz5FeGFtcGxlIHBpcGVsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj52aWRlb3Rlc3RzcmM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj53ZWJtIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtYXRyb3NrYWRlbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2cDlkZWMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdmlkZW9zY2FsZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZWNvZGUgYSBXZWJNIHN0cmVhbSBhbmQgZGVjb2RlcyB0aGUgVlA5IHZpZGVvLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI1OS43LjYuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdnB4Lmh0bWwjcGx1Z2luLXZweCI+dnB4PC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAZW50cm9weXdhdmUuY29tJmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlY29kZXIvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjU5LjcuNi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXZwOTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiwgWTQyQiwgWTQ0NCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlEZWMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RWUDlEZWM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWUDlEZWM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWRlYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RGVjLS1kZWJsb2NraW5nLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVibG9ja2luZy1sZXZlbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZGVibG9ja2luZy1sZXZlbOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWJsb2NraW5nIGxldmVsLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gMTY8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA0PC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlEZWMtLW5vaXNlLWxldmVsIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbm9pc2UtbGV2ZWzigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG5vaXNlLWxldmVs4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Tm9pc2UgbGV2ZWwuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSAxNjwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOURlYy0tcG9zdC1wcm9jZXNzaW5nIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCccG9zdC1wcm9jZXNzaW5n4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxwb3N0LXByb2Nlc3NpbmfigJ0gICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkVuYWJsZSBwb3N0IHByb2Nlc3NpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlEZWMtLXBvc3QtcHJvY2Vzc2luZy1mbGFncyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHBvc3QtcHJvY2Vzc2luZy1mbGFnc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccG9zdC1wcm9jZXNzaW5nLWZsYWdz4oCdICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDlEZWNQb3N0UHJvY2Vzc2luZ0ZsYWdzPC9zcGFuPjwvcHJlPgotPHA+RmxhZ3MgdG8gY29udHJvbCBwb3N0IHByb2Nlc3NpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IERlYmxvY2t8RGVtYWNyb2Jsb2NrPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlEZWMtLXRocmVhZHMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0aHJlYWRz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aHJlYWRz4oCdICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heGltdW0gbnVtYmVyIG9mIGRlY29kaW5nIHRocmVhZHMuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSwxNl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDlkZWMuc2VlLWFsc28iPjwvYT48aDI+U2VlIEFsc288L2gyPgotPHA+dnA5ZW5jLCBtYXRyb3NrYWRlbXV4PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjN2JlYTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT52cDllbmM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwiIHRpdGxlPSJ2cDlkZWMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwiIHRpdGxlPSJ3YXJwdHYiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9wcm9wZXJ0aWVzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMucHJvcGVydGllcyIgY2xhc3M9InNob3J0Y3V0Ij5Qcm9wZXJ0aWVzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMudG9wX29mX3BhZ2UiPjwvYT52cDllbmM8L3NwYW4+PC9oMj4KLTxwPnZwOWVuYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWFybnItbWF4ZnJhbWVzIiB0aXRsZT0iVGhlIOKAnGFybnItbWF4ZnJhbWVz4oCdIHByb3BlcnR5Ij5hcm5yLW1heGZyYW1lczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1hcm5yLXN0cmVuZ3RoIiB0aXRsZT0iVGhlIOKAnGFybnItc3RyZW5ndGjigJ0gcHJvcGVydHkiPmFybnItc3RyZW5ndGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tYXJuci10eXBlIiB0aXRsZT0iVGhlIOKAnGFybnItdHlwZeKAnSBwcm9wZXJ0eSI+YXJuci10eXBlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tYXV0by1hbHQtcmVmIiB0aXRsZT0iVGhlIOKAnGF1dG8tYWx0LXJlZuKAnSBwcm9wZXJ0eSI+YXV0by1hbHQtcmVmPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWJ1ZmZlci1pbml0aWFsLXNpemUiIHRpdGxlPSJUaGUg4oCcYnVmZmVyLWluaXRpYWwtc2l6ZeKAnSBwcm9wZXJ0eSI+YnVmZmVyLWluaXRpYWwtc2l6ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1idWZmZXItb3B0aW1hbC1zaXplIiB0aXRsZT0iVGhlIOKAnGJ1ZmZlci1vcHRpbWFsLXNpemXigJ0gcHJvcGVydHkiPmJ1ZmZlci1vcHRpbWFsLXNpemU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tYnVmZmVyLXNpemUiIHRpdGxlPSJUaGUg4oCcYnVmZmVyLXNpemXigJ0gcHJvcGVydHkiPmJ1ZmZlci1zaXplPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWNwdS11c2VkIiB0aXRsZT0iVGhlIOKAnGNwdS11c2Vk4oCdIHByb3BlcnR5Ij5jcHUtdXNlZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1jcS1sZXZlbCIgdGl0bGU9IlRoZSDigJxjcS1sZXZlbOKAnSBwcm9wZXJ0eSI+Y3EtbGV2ZWw8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWRlYWRsaW5lIiB0aXRsZT0iVGhlIOKAnGRlYWRsaW5l4oCdIHByb3BlcnR5Ij5kZWFkbGluZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1kcm9wZnJhbWUtdGhyZXNob2xkIiB0aXRsZT0iVGhlIOKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ0gcHJvcGVydHkiPmRyb3BmcmFtZS10aHJlc2hvbGQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jRW5kVXNhZ2U8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWVuZC11c2FnZSIgdGl0bGU9IlRoZSDigJxlbmQtdXNhZ2XigJ0gcHJvcGVydHkiPmVuZC11c2FnZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDlFbmNFckZsYWdzPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1lcnJvci1yZXNpbGllbnQiIHRpdGxlPSJUaGUg4oCcZXJyb3ItcmVzaWxpZW504oCdIHByb3BlcnR5Ij5lcnJvci1yZXNpbGllbnQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jU2NhbGluZ01vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLWhvcml6b250YWwtc2NhbGluZy1tb2RlIiB0aXRsZT0iVGhlIOKAnGhvcml6b250YWwtc2NhbGluZy1tb2Rl4oCdIHByb3BlcnR5Ij5ob3Jpem9udGFsLXNjYWxpbmctbW9kZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1rZXlmcmFtZS1tYXgtZGlzdCIgdGl0bGU9IlRoZSDigJxrZXlmcmFtZS1tYXgtZGlzdOKAnSBwcm9wZXJ0eSI+a2V5ZnJhbWUtbWF4LWRpc3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jS2ZNb2RlPC9zcGFuPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1rZXlmcmFtZS1tb2RlIiB0aXRsZT0iVGhlIOKAnGtleWZyYW1lLW1vZGXigJ0gcHJvcGVydHkiPmtleWZyYW1lLW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tbGFnLWluLWZyYW1lcyIgdGl0bGU9IlRoZSDigJxsYWctaW4tZnJhbWVz4oCdIHByb3BlcnR5Ij5sYWctaW4tZnJhbWVzPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLW1heC1pbnRyYS1iaXRyYXRlIiB0aXRsZT0iVGhlIOKAnG1heC1pbnRyYS1iaXRyYXRl4oCdIHByb3BlcnR5Ij5tYXgtaW50cmEtYml0cmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1tYXgtcXVhbnRpemVyIiB0aXRsZT0iVGhlIOKAnG1heC1xdWFudGl6ZXLigJ0gcHJvcGVydHkiPm1heC1xdWFudGl6ZXI8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tbWluLXF1YW50aXplciIgdGl0bGU9IlRoZSDigJxtaW4tcXVhbnRpemVy4oCdIHByb3BlcnR5Ij5taW4tcXVhbnRpemVyPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1tdWx0aXBhc3MtY2FjaGUtZmlsZSIgdGl0bGU9IlRoZSDigJxtdWx0aXBhc3MtY2FjaGUtZmlsZeKAnSBwcm9wZXJ0eSI+bXVsdGlwYXNzLWNhY2hlLWZpbGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jTXVsdGlwYXNzTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tbXVsdGlwYXNzLW1vZGUiIHRpdGxlPSJUaGUg4oCcbXVsdGlwYXNzLW1vZGXigJ0gcHJvcGVydHkiPm11bHRpcGFzcy1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLW5vaXNlLXNlbnNpdGl2aXR5IiB0aXRsZT0iVGhlIOKAnG5vaXNlLXNlbnNpdGl2aXR54oCdIHByb3BlcnR5Ij5ub2lzZS1zZW5zaXRpdml0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1vdmVyc2hvb3QiIHRpdGxlPSJUaGUg4oCcb3ZlcnNob2904oCdIHByb3BlcnR5Ij5vdmVyc2hvb3Q8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1yZXNpemUtYWxsb3dlZCIgdGl0bGU9IlRoZSDigJxyZXNpemUtYWxsb3dlZOKAnSBwcm9wZXJ0eSI+cmVzaXplLWFsbG93ZWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tcmVzaXplLWRvd24tdGhyZXNob2xkIiB0aXRsZT0iVGhlIOKAnHJlc2l6ZS1kb3duLXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+cmVzaXplLWRvd24tdGhyZXNob2xkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXJlc2l6ZS11cC10aHJlc2hvbGQiIHRpdGxlPSJUaGUg4oCccmVzaXplLXVwLXRocmVzaG9sZOKAnSBwcm9wZXJ0eSI+cmVzaXplLXVwLXRocmVzaG9sZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS1zaGFycG5lc3MiIHRpdGxlPSJUaGUg4oCcc2hhcnBuZXNz4oCdIHByb3BlcnR5Ij5zaGFycG5lc3M8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tc3RhdGljLXRocmVzaG9sZCIgdGl0bGU9IlRoZSDigJxzdGF0aWMtdGhyZXNob2xk4oCdIHByb3BlcnR5Ij5zdGF0aWMtdGhyZXNob2xkPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXRhcmdldC1iaXRyYXRlIiB0aXRsZT0iVGhlIOKAnHRhcmdldC1iaXRyYXRl4oCdIHByb3BlcnR5Ij50YXJnZXQtYml0cmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPgotPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVmFsdWUtYXJyYXlzLmh0bWwjR1ZhbHVlQXJyYXkiPjxzcGFuIGNsYXNzPSJ0eXBlIj5HVmFsdWVBcnJheTwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlkIiB0aXRsZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlk4oCdIHByb3BlcnR5Ij50ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1udW1iZXItbGF5ZXJzIiB0aXRsZT0iVGhlIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnPigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnM8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHkiIHRpdGxlPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHnigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LXBlcmlvZGljaXR5PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3IiIHRpdGxlPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3LigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LXJhdGUtZGVjaW1hdG9yPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+Ci08YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGXigJ0gcHJvcGVydHkiPnRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXRocmVhZHMiIHRpdGxlPSJUaGUg4oCcdGhyZWFkc+KAnSBwcm9wZXJ0eSI+dGhyZWFkczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RGcmFjdGlvbjwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdGltZWJhc2UiIHRpdGxlPSJUaGUg4oCcdGltZWJhc2XigJ0gcHJvcGVydHkiPnRpbWViYXNlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOUVuY1Rva2VuUGFydGl0aW9uczwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdG9rZW4tcGFydGl0aW9ucyIgdGl0bGU9IlRoZSDigJx0b2tlbi1wYXJ0aXRpb25z4oCdIHByb3BlcnR5Ij50b2tlbi1wYXJ0aXRpb25zPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOUVuY1R1bmluZzwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdHVuaW5nIiB0aXRsZT0iVGhlIOKAnHR1bmluZ+KAnSBwcm9wZXJ0eSI+dHVuaW5nPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXR3b3Bhc3MtdmJyLWJpYXMiIHRpdGxlPSJUaGUg4oCcdHdvcGFzcy12YnItYmlhc+KAnSBwcm9wZXJ0eSI+dHdvcGFzcy12YnItYmlhczwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwjR3N0VlA5RW5jLS10d29wYXNzLXZici1tYXhzZWN0aW9uIiB0aXRsZT0iVGhlIOKAnHR3b3Bhc3MtdmJyLW1heHNlY3Rpb27igJ0gcHJvcGVydHkiPnR3b3Bhc3MtdmJyLW1heHNlY3Rpb248L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdHdvcGFzcy12YnItbWluc2VjdGlvbiIgdGl0bGU9IlRoZSDigJx0d29wYXNzLXZici1taW5zZWN0aW9u4oCdIHByb3BlcnR5Ij50d29wYXNzLXZici1taW5zZWN0aW9uPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtLXVuZGVyc2hvb3QiIHRpdGxlPSJUaGUg4oCcdW5kZXJzaG9vdOKAnSBwcm9wZXJ0eSI+dW5kZXJzaG9vdDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDlFbmNTY2FsaW5nTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sI0dzdFZQOUVuYy0tdmVydGljYWwtc2NhbGluZy1tb2RlIiB0aXRsZT0iVGhlIOKAnHZlcnRpY2FsLXNjYWxpbmctbW9kZeKAnSBwcm9wZXJ0eSI+dmVydGljYWwtc2NhbGluZy1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RWUDlFbmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCNHc3RWUDlFbmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFZQOUVuYyI+R3N0VlA5RW5jPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLUdzdFZpZGVvRW5jb2Rlci5odG1sI0dzdFZpZGVvRW5jb2RlciI+R3N0VmlkZW9FbmNvZGVyPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RWUFhFbmMKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFZQOUVuYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyI+PC9hPjxoMj5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9oMj4KLTxwPgotR3N0VlA5RW5jIGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0UHJlc2V0Lmh0bWwjR3N0UHJlc2V0LXN0cnVjdCI+R3N0UHJlc2V0PC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RUYWdTZXR0ZXIuaHRtbCNHc3RUYWdTZXR0ZXItc3RydWN0Ij5Hc3RUYWdTZXR0ZXI8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgZW5jb2RlcyByYXcgdmlkZW8gaW50byBhIFZQOSBzdHJlYW0uPC9wPgotPGEgY2xhc3M9InVsaW5rIiBocmVmPSJodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZyIgdGFyZ2V0PSJfdG9wIj5WUDk8L2E+IGlzIGEgcm95YWx0eS1mcmVlCi08cD52aWRlbyBjb2RlYyBtYWludGFpbmVkIGJ5IDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tLyIgdGFyZ2V0PSJfdG9wIj5Hb29nbGUKLTwvYT4uIEl0J3MgdGhlIHN1Y2Nlc3NvciBvZiBPbjIgVlAzLCB3aGljaCB3YXMgdGhlIGJhc2Ugb2YgdGhlCi1UaGVvcmEgdmlkZW8gY29kZWMuPC9wPgotPHA+VG8gY29udHJvbCB0aGUgcXVhbGl0eSBvZiB0aGUgZW5jb2RpbmcsIHRoZSA8c3BhbiBjbGFzcz0idHlwZSI+4oCcdGFyZ2V0LWJpdHJhdGXigJ08L3NwYW4+LAotPHNwYW4gY2xhc3M9InR5cGUiPuKAnG1pbi1xdWFudGl6ZXLigJ08L3NwYW4+LCA8c3BhbiBjbGFzcz0idHlwZSI+4oCcbWF4LXF1YW50aXplcuKAnTwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9InR5cGUiPuKAnGNxLWxldmVs4oCdPC9zcGFuPgotcHJvcGVydGllcyBjYW4gYmUgdXNlZC4gV2hpY2ggb25lIGlzIHVzZWQgZGVwZW5kcyBvbiB0aGUgbW9kZSBzZWxlY3RlZCBieQotdGhlIDxzcGFuIGNsYXNzPSJ0eXBlIj7igJxlbmQtdXNhZ2XigJ08L3NwYW4+IHByb3BlcnR5LgotU2VlIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvZG9jcy9lbmNvZGVyLXBhcmFtZXRlcnMvIiB0YXJnZXQ9Il90b3AiPkVuY29kZXIgUGFyYW1ldGVyczwvYT4KLWZvciBleHBsYW5hdGlvbiwgZXhhbXBsZXMgZm9yIHVzZWZ1bCBlbmNvZGluZyBwYXJhbWV0ZXJzIGFuZCBtb3JlIGRldGFpbHMKLW9uIHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjAuOC42Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMDAwPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdnA5ZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3ZWJtbXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnZpZGVvdGVzdHNyYzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPndlYm08L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZW5jb2RlIGEgdGVzdCB2aWRlbyBzb3VyY2UgdG8gVlA5IG11eGVkIGluIGFuCi1XZWJNIGNvbnRhaW5lci4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjAuOC43LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXZweC5odG1sI3BsdWdpbi12cHgiPnZweDwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkRhdmlkIFNjaGxlZWYgJmx0O2RzQGVudHJvcHl3YXZlLmNvbSZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9FbmNvZGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI2MC44LjcuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3gtdnA5LCBwcm9maWxlPShzdHJpbmcpeyAwLCAxLCAyLCAzIH08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RWUDlFbmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RWUDlFbmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1hcm5yLW1heGZyYW1lcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFybnItbWF4ZnJhbWVz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhcm5yLW1heGZyYW1lc+KAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbHRSZWYgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTVdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1hcm5yLXN0cmVuZ3RoIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXJuci1zdHJlbmd0aOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYXJuci1zdHJlbmd0aOKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QWx0UmVmIHN0cmVuZ3RoLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAzPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLWFybnItdHlwZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGFybnItdHlwZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYXJuci10eXBl4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+QWx0UmVmIHR5cGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSwzXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDM8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tYXV0by1hbHQtcmVmIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYXV0by1hbHQtcmVm4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxhdXRvLWFsdC1yZWbigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgQWx0UmVmIGZyYW1lcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tYnVmZmVyLWluaXRpYWwtc2l6ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJ1ZmZlci1pbml0aWFsLXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1ZmZlci1pbml0aWFsLXNpemXigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkluaXRpYWwgY2xpZW50IGJ1ZmZlciBzaXplIChtcykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1idWZmZXItb3B0aW1hbC1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnVmZmVyLW9wdGltYWwtc2l6ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYnVmZmVyLW9wdGltYWwtc2l6ZeKAnSAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+T3B0aW1hbCBjbGllbnQgYnVmZmVyIHNpemUgKG1zKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1MDAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLWJ1ZmZlci1zaXplIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcYnVmZmVyLXNpemXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJ1ZmZlci1zaXpl4oCdICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkNsaWVudCBidWZmZXIgc2l6ZSAobXMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDYwMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tY3B1LXVzZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjcHUtdXNlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3B1LXVzZWTigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q1BVIHVzZWQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbLTE2LDE2XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tY3EtbGV2ZWwiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxjcS1sZXZlbOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcY3EtbGV2ZWzigJ0gICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Q29uc3RyYWluZWQgcXVhbGl0eSBsZXZlbC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDYzXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLWRlYWRsaW5lIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZGVhZGxpbmXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRlYWRsaW5l4oCdICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EZWFkbGluZSBwZXIgZnJhbWUgKHVzZWMsIDA9ZGlzYWJsZWQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tZHJvcGZyYW1lLXRocmVzaG9sZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRyb3BmcmFtZS10aHJlc2hvbGTigJ0gICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPlRlbXBvcmFsIHJlc2FtcGxpbmcgdGhyZXNob2xkIChidWYgJSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDBdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1lbmQtdXNhZ2UiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlbmQtdXNhZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGVuZC11c2FnZeKAnSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jRW5kVXNhZ2U8L3NwYW4+PC9wcmU+Ci08cD5SYXRlIGNvbnRyb2wgbW9kZS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVmFyaWFibGUgQml0IFJhdGUgKFZCUikgbW9kZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1lcnJvci1yZXNpbGllbnQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxlcnJvci1yZXNpbGllbnTigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGVycm9yLXJlc2lsaWVudOKAnSAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jRXJGbGFnczwvc3Bhbj48L3ByZT4KLTxwPkVycm9yIHJlc2lsaWVuY2UgZmxhZ3MuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1ob3Jpem9udGFsLXNjYWxpbmctbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGhvcml6b250YWwtc2NhbGluZy1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxob3Jpem9udGFsLXNjYWxpbmctbW9kZeKAnSAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFZQOUVuY1NjYWxpbmdNb2RlPC9zcGFuPjwvcHJlPgotPHA+SG9yaXpvbnRhbCBzY2FsaW5nIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5vcm1hbDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1rZXlmcmFtZS1tYXgtZGlzdCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGtleWZyYW1lLW1heC1kaXN04oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxrZXlmcmFtZS1tYXgtZGlzdOKAnSAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5NYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4ga2V5ZnJhbWVzIChudW1iZXIgb2YgZnJhbWVzKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMjg8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0ta2V5ZnJhbWUtbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGtleWZyYW1lLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGtleWZyYW1lLW1vZGXigJ0gICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jS2ZNb2RlPC9zcGFuPjwvcHJlPgotPHA+S2V5ZnJhbWUgcGxhY2VtZW50LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBEZXRlcm1pbmUgb3B0aW1hbCBwbGFjZW1lbnQgYXV0b21hdGljYWxseTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1sYWctaW4tZnJhbWVzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbGFnLWluLWZyYW1lc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbGFnLWluLWZyYW1lc+KAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIGxhZy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDI1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tbWF4LWludHJhLWJpdHJhdGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtYXgtaW50cmEtYml0cmF0ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWF4LWludHJhLWJpdHJhdGXigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWF4aW11bSBJbnRyYSBmcmFtZSBiaXRyYXRlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tbWF4LXF1YW50aXplciI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1heC1xdWFudGl6ZXLigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1heC1xdWFudGl6ZXLigJ0gICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPk1heGltdW0gUXVhbnRpemVyICh3b3JzdCkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCw2M108L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA2MzwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1taW4tcXVhbnRpemVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcbWluLXF1YW50aXplcuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbWluLXF1YW50aXplcuKAnSAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TWluaW11bSBRdWFudGl6ZXIgKGJlc3QpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNjNdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogNDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1tdWx0aXBhc3MtY2FjaGUtZmlsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG11bHRpcGFzcy1jYWNoZS1maWxl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxtdWx0aXBhc3MtY2FjaGUtZmlsZeKAnSAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPk11bHRpcGFzcyBjYWNoZSBmaWxlLiBJZiBzdHJlYW0gY2FwcyByZWluaXRlZCwgbXVsdGlwbGUgZmlsZXMgd2lsbCBiZSBjcmVhdGVkOiBmaWxlLCBmaWxlLjEsIGZpbGUuMiwgLi4uIGFuZCBzbyBvbi48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogIm11bHRpcGFzcy5jYWNoZSI8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tbXVsdGlwYXNzLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtdWx0aXBhc3MtbW9kZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbXVsdGlwYXNzLW1vZGXigJ0gICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDlFbmNNdWx0aXBhc3NNb2RlPC9zcGFuPjwvcHJlPgotPHA+TXVsdGlwYXNzIGVuY29kZSBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBPbmUgcGFzcyBlbmNvZGluZyAoZGVmYXVsdCk8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tbm9pc2Utc2Vuc2l0aXZpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxub2lzZS1zZW5zaXRpdml0eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcbm9pc2Utc2Vuc2l0aXZpdHnigJ0gICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+Tm9pc2Ugc2Vuc2lzaXZpdHkgKGZyYW1lcyB0byBibHVyKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDZdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1vdmVyc2hvb3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxvdmVyc2hvb3TigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG92ZXJzaG9vdOKAnSAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkRhdGFyYXRlIG92ZXJzaG9vdCAobWF4KSB0YXJnZXQgKCUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAxMDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tcmVzaXplLWFsbG93ZWQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNpemUtYWxsb3dlZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzaXplLWFsbG93ZWTigJ0gICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5BbGxvdyBzcGF0aWFsIHJlc2FtcGxpbmcuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IEZBTFNFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLXJlc2l6ZS1kb3duLXRocmVzaG9sZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlc2l6ZS1kb3duLXRocmVzaG9sZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVzaXplLWRvd24tdGhyZXNob2xk4oCdICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RG93bnNjYWxlIHRocmVzaG9sZCAoYnVmICUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDYwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLXJlc2l6ZS11cC10aHJlc2hvbGQiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxyZXNpemUtdXAtdGhyZXNob2xk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxyZXNpemUtdXAtdGhyZXNob2xk4oCdICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5VcHNjYWxlIHRocmVzaG9sZCAoYnVmICUpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMTAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDMwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLXNoYXJwbmVzcyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHNoYXJwbmVzc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc2hhcnBuZXNz4oCdICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+RmlsdGVyIHNoYXJwbmVzcy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDddPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS1zdGF0aWMtdGhyZXNob2xkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc3RhdGljLXRocmVzaG9sZOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RhdGljLXRocmVzaG9sZOKAnSAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TW90aW9uIGRldGVjdGlvbiB0aHJlc2hvbGQuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmZ3Q7PSAwPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10YXJnZXQtYml0cmF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRhcmdldC1iaXRyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0YXJnZXQtYml0cmF0ZeKAnSAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UYXJnZXQgYml0cmF0ZSAoaW4gYml0cy9zZWMpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDI1NjAwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZCI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LWxheWVyLWlk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZOKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlNlcXVlbmNlIGRlZmluaW5nIGNvZGluZyBsYXllciBtZW1iZXJzaGlwLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktbnVtYmVyLWxheWVycyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnPigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LW51bWJlci1sYXllcnPigJ0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5OdW1iZXIgb2YgY29kaW5nIGxheWVycyB0byB1c2UuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMSw1XTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDE8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHkiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS1wZXJpb2RpY2l0eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcGVyaW9kaWNpdHnigJ0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5MZW5ndGggb2Ygc2VxdWVuY2UgdGhhdCBkZWZpbmVzIGxheWVyIG1lbWJlcnNoaXAgcGVyaW9kaWNpdHkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxNl08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLXRlbXBvcmFsLXNjYWxhYmlsaXR5LXJhdGUtZGVjaW1hdG9yIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGVtcG9yYWwtc2NhbGFiaWxpdHktcmF0ZS1kZWNpbWF0b3LigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LXJhdGUtZGVjaW1hdG9y4oCdIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVZhbHVlLWFycmF5cy5odG1sI0dWYWx1ZUFycmF5Ij48c3BhbiBjbGFzcz0idHlwZSI+R1ZhbHVlQXJyYXk8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+UmF0ZSBkZWNpbWF0aW9uIGZhY3RvcnMgZm9yIGVhY2ggbGF5ZXIuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10ZW1wb3JhbC1zY2FsYWJpbGl0eS10YXJnZXQtYml0cmF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRlbXBvcmFsLXNjYWxhYmlsaXR5LXRhcmdldC1iaXRyYXRl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0ZW1wb3JhbC1zY2FsYWJpbGl0eS10YXJnZXQtYml0cmF0ZeKAnSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1WYWx1ZS1hcnJheXMuaHRtbCNHVmFsdWVBcnJheSI+PHNwYW4gY2xhc3M9InR5cGUiPkdWYWx1ZUFycmF5PC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRhcmdldCBiaXRyYXRlcyBmb3IgY29kaW5nIGxheWVycyAob25lIHBlciBsYXllciwgZGVjcmVhc2luZykuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10aHJlYWRzIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdGhyZWFkc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdGhyZWFkc+KAnSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+TnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsNjRdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10aW1lYmFzZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHRpbWViYXNl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0aW1lYmFzZeKAnSAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdEZyYWN0aW9uPC9zcGFuPjwvcHJlPgotPHA+RnJhY3Rpb24gb2Ygb25lIHNlY29uZCB0aGF0IGlzIHRoZSBzaG9ydGVzdCBpbnRlcmZyYW1lIHRpbWUgLSBub3JtYWxseSBsZWZ0IGFzIHplcm8gd2hpY2ggd2lsbCBkZWZhdWx0IHRvIHRoZSBmcmFtZXJhdGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10b2tlbi1wYXJ0aXRpb25zIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdG9rZW4tcGFydGl0aW9uc+KAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdG9rZW4tcGFydGl0aW9uc+KAnSAgICAgICAgIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RWUDlFbmNUb2tlblBhcnRpdGlvbnM8L3NwYW4+PC9wcmU+Ci08cD5OdW1iZXIgb2YgdG9rZW4gcGFydGl0aW9ucy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogT25lIHRva2VuIHBhcnRpdGlvbjwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10dW5pbmciPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0dW5pbmfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR1bmluZ+KAnSAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jVHVuaW5nPC9zcGFuPjwvcHJlPgotPHA+VHVuaW5nLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUdW5lIGZvciBQU05SPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLXR3b3Bhc3MtdmJyLWJpYXMiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx0d29wYXNzLXZici1iaWFz4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx0d29wYXNzLXZici1iaWFz4oCdICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5DQlIvVkJSIGJpYXMgKDA9Q0JSLCAxMDA9VkJSKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6IFswLDEwMF08L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiA1MDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS10d29wYXNzLXZici1tYXhzZWN0aW9uIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcdHdvcGFzcy12YnItbWF4c2VjdGlvbuKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcdHdvcGFzcy12YnItbWF4c2VjdGlvbuKAnSAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2ludCI+PHNwYW4gY2xhc3M9InR5cGUiPmdpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+R09QIG1heGltdW0gYml0cmF0ZSAoJSB0YXJnZXQpLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmd0Oz0gMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFZQOUVuYy0tdHdvcGFzcy12YnItbWluc2VjdGlvbiI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHR3b3Bhc3MtdmJyLW1pbnNlY3Rpb27igJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHR3b3Bhc3MtdmJyLW1pbnNlY3Rpb27igJ0gICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5naW50PC9zcGFuPjwvYT48L3ByZT4KLTxwPkdPUCBtaW5pbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZndDs9IDA8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RWUDlFbmMtLXVuZGVyc2hvb3QiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx1bmRlcnNob2904oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx1bmRlcnNob2904oCdICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnaW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z2ludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5EYXRhcmF0ZSB1bmRlcnNob290IChtaW4pIHRhcmdldCAoJSkuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiBbMCwxMDAwXTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDEwMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0VlA5RW5jLS12ZXJ0aWNhbC1zY2FsaW5nLW1vZGUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJx2ZXJ0aWNhbC1zY2FsaW5nLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHZlcnRpY2FsLXNjYWxpbmctbW9kZeKAnSAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0VlA5RW5jU2NhbGluZ01vZGU8L3NwYW4+PC9wcmU+Ci08cD5WZXJ0aWNhbCBzY2FsaW5nIG1vZGUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5vcm1hbDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPnZwOWRlYywgd2VibW11eCwgb2dnbXV4PC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMGE0OTIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT53YXJwdHY6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZW5jLmh0bWwiIHRpdGxlPSJ2cDllbmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZWZvcm1zaW5rLmh0bWwiIHRpdGxlPSJ3YXZlZm9ybXNpbmsiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDllbmMuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Ij48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di50b3Bfb2ZfcGFnZSI+PC9hPndhcnB0djwvc3Bhbj48L2gyPgotPHA+d2FycHR2PC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFdhcnBUViI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXJwdHYub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di5odG1sI0dzdFdhcnBUVi1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0V2FycFRWIj5Hc3RXYXJwVFY8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXJwdHYub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci1saWJzLTEuMEdzdEJhc2VUcmFuc2Zvcm0uaHRtbCNHc3RCYXNlVHJhbnNmb3JtLXN0cnVjdCI+R3N0QmFzZVRyYW5zZm9ybTwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0LXBsdWdpbnMtYmFzZS1saWJzLTEuMGdzdC1wbHVnaW5zLWJhc2UtbGlicy1nc3R2aWRlb2ZpbHRlci5odG1sI0dzdFZpZGVvRmlsdGVyLXN0cnVjdCI+R3N0VmlkZW9GaWx0ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RXYXJwVFYKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2LmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPldhcnBUViBkb2VzIHJlYWx0aW1lIGdvbydpbmcgb2YgdGhlIHZpZGVvIGlucHV0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjEuNi4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnYgdmlkZW90ZXN0c3JjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3YXJwdHYgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXV0b3ZpZGVvc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2Ygd2FycHR2IG9uIGEgdGVzdCBzdHJlYW0uCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjYxLjYuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1lZmZlY3R2Lmh0bWwjcGx1Z2luLWVmZmVjdHYiPmVmZmVjdHY8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TYW0gTGFudGluZ2EgJmx0O3Nsb3VrZW5AZGV2b2x1dGlvbi5jb20mZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkZpbHRlci9FZmZlY3QvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjYxLjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2FycHR2Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RXYXJwVFYtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RXYXJwVFY8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RXYXJwVFY7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGJmMGQzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+d2F2ZWZvcm1zaW5rOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhcnB0di5odG1sIiB0aXRsZT0id2FycHR2Ij4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVuYy5odG1sIiB0aXRsZT0id2F2ZW5jIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXJwdHYuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZWZvcm1zaW5rIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay50b3Bfb2ZfcGFnZSI+PC9hPndhdmVmb3Jtc2luazwvc3Bhbj48L2gyPgotPHA+d2F2ZWZvcm1zaW5rPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsub3RoZXIiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgotPGNvbGdyb3VwPgotPGNvbCB3aWR0aD0iMTUwcHgiIGNsYXNzPSJuYW1lIj4KLTxjb2wgY2xhc3M9ImRlc2NyaXB0aW9uIj4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+PHRyPgotPHRkIGNsYXNzPSJkYXRhdHlwZV9rZXl3b3JkIj5zdHJ1Y3Q8L3RkPgotPHRkIGNsYXNzPSJmdW5jdGlvbl9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay5odG1sI0dzdFdhdmVGb3JtU2luayIgdGl0bGU9InN0cnVjdCBHc3RXYXZlRm9ybVNpbmsiPkdzdFdhdmVGb3JtU2luazwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVmb3Jtc2luay5kZXNjcmlwdGlvbiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Ci08cD5UaGlzIGVsZW1lbnQgbGV0cyB5b3Ugb3V0cHV0IHNvdW5kIHVzaW5nIHRoZSBXaW5kb3dzIFdhdmVGb3JtIEFQSS48L3A+Ci08cD5Ob3RlIHRoYXQgeW91IHNob3VsZCBhbG1vc3QgYWx3YXlzIHVzZSBnZW5lcmljIGF1ZGlvIGNvbnZlcnNpb24gZWxlbWVudHMKLWxpa2UgYXVkaW9jb252ZXJ0IGFuZCBhdWRpb3Jlc2FtcGxlIGluIGZyb250IG9mIGFuIGF1ZGlvc2luayB0byBtYWtlIHN1cmUKLXlvdXIgcGlwZWxpbmUgd29ya3MgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMgKHRob3NlIGNvbnZlcnNpb24gZWxlbWVudHMgd2lsbAotYWN0IGluIHBhc3N0aHJvdWdoLW1vZGUgaWYgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkpLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjIuNC40Ij48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj52IGF1ZGlvdGVzdHNyYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b2x1bWUgdm9sdW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MC4xPC9zcGFuPiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gd2F2ZWZvcm1zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIHdpbGwgb3V0cHV0IGEgc2luZSB3YXZlIChjb250aW51b3VzIGJlZXAgc291bmQpIHRvIHlvdXIgc291bmQgY2FyZCAod2l0aAotYSB2ZXJ5IGxvdyB2b2x1bWUgYXMgcHJlY2F1dGlvbikuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+diBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXVzaWM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5vZ2cgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGRlY29kZWJpbiA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3YXZlZm9ybXNpbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gd2lsbCBwbGF5IGFuIE9nZy9Wb3JiaXMgYXVkaW8gZmlsZSBhbmQgb3V0cHV0IGl0LgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI2Mi40LjUuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2ZWZvcm0uaHRtbCNwbHVnaW4td2F2ZWZvcm0iPndhdmVmb3JtPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+U2ViYXN0aWVuIE1vdXR0ZSAmbHQ7c2ViYXN0aWVuQG1vdXR0ZS5uZXQmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPlNpbmsvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjYyLjQuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZWZvcm1zaW5rLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFdhdmVGb3JtU2luayI+PC9hPjxoMz5zdHJ1Y3QgR3N0V2F2ZUZvcm1TaW5rPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0V2F2ZUZvcm1TaW5rIHsKLSAgLyogcGFyZW50IG9iamVjdCAqLwotICBHc3RBdWRpb1Npbmsgc2luazsKLQotICAvKiBzdXBwb3J0ZWQgY2FwcyAqLwotICBHc3RDYXBzICpjYWNoZWRfY2FwczsKLSAgCi0gIC8qIGhhbmRsZSB0byB0aGUgd2F2ZWZvcm0tYXVkaW8gb3V0cHV0IGRldmljZSAqLwotICBIV0FWRU9VVCBod2F2ZW91dDsKLSAgCi0gIC8qIHRhYmxlIG9mIGJ1ZmZlciBoZWFkZXJzICovCi0gIFdBVkVIRFIgKndhdmVfYnVmZmVyczsKLQotICAvKiBjcml0aWNhbCBzZWN0aW9uIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBudW1iZXIgb2YgZnJlZSBidWZmZXJzICovCi0gIENSSVRJQ0FMX1NFQ1RJT04gY3JpdGljX3dhdmU7Ci0KLSAgLyogbnVtYmVyIG9mIGZyZWUgYnVmZmVycyBhdmFpbGFibGUgKi8KLSAgZ3VpbnQgZnJlZV9idWZmZXJzX2NvdW50OwotICAKLSAgLyogY3VycmVudCBmcmVlIGJ1ZmZlciB3aGVyZSB5b3UgaGF2ZSB0byB3cml0ZSBpbmNvbWluZyBkYXRhICovCi0gIGd1aW50IHdyaXRlX2J1ZmZlcjsKLSAgCi0gIC8qIHNpemUgb2YgYnVmZmVycyBzdHJlYW1lZCB0byB0aGUgZGV2aWNlICovCi0gIGd1aW50IGJ1ZmZlcl9zaXplOwotCi0gIC8qIG51bWJlciBvZiBidWZmZXJzIHN0cmVhbWVkIHRvIHRoZSBkZXZpY2UgKi8KLSAgZ3VpbnQgYnVmZmVyX2NvdW50OwotCi0gIC8qIHRvdGFsIG9mIGJ5dGVzIGluIHF1ZXVlIGJlZm9yZSB0aGV5IGFyZSB3cml0dGVuIHRvIHRoZSBkZXZpY2UgKi8KLSAgZ3VpbnQgYnl0ZXNfaW5fcXVldWU7Ci0KLSAgLyogYnl0ZXMgcGVyIHNhbXBsZSBmcm9tIHNldGNhcHMgdXNlZCB0byBldmFsdWF0ZSB0aGUgbnVtYmVyIHNhbXBsZXMgcmV0dXJuZWQgYnkgZGVsYXkgKi8KLSAgZ3VpbnQgYnl0ZXNfcGVyX3NhbXBsZTsKLQotICAvKiB3YXZlIGZvcm0gZXJyb3Igc3RyaW5nICovCi0gIGdjaGFyIGVycm9yX3N0cmluZ1tFUlJPUl9MRU5HVEhdOwotfTsKLTwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YzVlOC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPndhdmVuYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsuaHRtbCIgdGl0bGU9IndhdmVmb3Jtc2luayI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwiIHRpdGxlPSJ3YXZwYWNrZGVjIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2ludGVyZmFjZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlZm9ybXNpbmsuaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVuYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMudG9wX29mX3BhZ2UiPjwvYT53YXZlbmM8L3NwYW4+PC9oMj4KLTxwPndhdmVuYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RXYXZFbmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuaHRtbCNHc3RXYXZFbmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFdhdkVuYyI+R3N0V2F2RW5jPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RXYXZFbmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFdhdkVuYyBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFRhZ1NldHRlci5odG1sI0dzdFRhZ1NldHRlci1zdHJ1Y3QiPkdzdFRhZ1NldHRlcjwvYT4gYW5kICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wZ3N0cmVhbWVyLUdzdFRvY1NldHRlci5odG1sI0dzdFRvY1NldHRlciI+R3N0VG9jU2V0dGVyPC9hPi48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+Rm9ybWF0IGFuIGF1ZGlvIHN0cmVhbSBpbnRvIHRoZSB3YXYgZm9ybWF0LjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjMuNy4zIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGNkcGFyYW5vaWFzcmMgbW9kZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmNvbnRpbnVvdXMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHdhdmVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gZmlsZXNpbmsgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5jZDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPndhdjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSaXAgYSB3aG9sZSBhdWRpbyBDRCBpbnRvIGEgc2luZ2xlIHdhdiBmaWxlLCB3aXRoIHRoZSB0cmFjayB0YWJsZSB3cml0dGVuIGludG8gYSBDVUUgc2hlZXQgaW5zaWRlIHRoZSBmaWxlCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gY2RwYXJhbm9pYXNyYyB0cmFjazxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjU8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBxdWV1ZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3YXZlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+dHJhY2s1PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2F2PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFJpcCB0cmFjayA1IG9mIGFuIGF1ZGlvIENEIGludG8gYSBzaW5nbGUgd2F2IGZpbGUgY29udGFpbmluZyB1bmVuY29kZWQgcmF3IGF1ZGlvIHNhbXBsZXMuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjYzLjcuNC4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZlbmMuaHRtbCNwbHVnaW4td2F2ZW5jIj53YXZlbmM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5JYWluIEhvbG1lcyAmbHQ7aWFpbkBwcmV0dHlwZW9wbGUub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9NdXhlci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjMuNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtcmF3LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCA2NTUzNSBdLCBmb3JtYXQ9KHN0cmluZyl7IFMzMkxFLCBTMjRMRSwgUzE2TEUsIFU4LCBGMzJMRSwgRjY0TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWFsYXcsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1tdWxhdywgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtd2F2PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1yZjY0PC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZlbmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVuYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0V2F2RW5jLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0V2F2RW5jPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0V2F2RW5jOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2RlYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU5ZWZmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPndhdnBhY2tkZWM6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmh0bWwiIHRpdGxlPSJ3YXZlbmMiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sIiB0aXRsZT0id2F2cGFja2VuYyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2RlYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tkZWMub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZW5jLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sIj48aW1nIHNyYz0icmlnaHQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJOZXh0Ij48L2E+PC90ZD4KLTwvdHI+PC90YWJsZT4KLTxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tkZWMudG9wX29mX3BhZ2UiPjwvYT53YXZwYWNrZGVjPC9zcGFuPjwvaDI+Ci08cD53YXZwYWNrZGVjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxhIG5hbWU9IkdzdFdhdnBhY2tEZWMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2RlYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2RlYy5odG1sI0dzdFdhdnBhY2tEZWMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFdhdnBhY2tEZWMiPkdzdFdhdnBhY2tEZWM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZGVjb2Rlci5odG1sI0dzdEF1ZGlvRGVjb2Rlci1zdHJ1Y3QiPkdzdEF1ZGlvRGVjb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0V2F2cGFja0RlYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPldhdnBhY2tEZWMgZGVjb2RlcyBmcmFtZWQgKGZvciBleGFtcGxlIGJ5IHRoZSBXYXZwYWNrUGFyc2UgZWxlbWVudCkKLVdhdnBhY2sgc3RyZWFtcyBhbmQgZGVjb2RlcyB0aGVtIHRvIHJhdyBhdWRpby48L3A+Ci08YSBjbGFzcz0idWxpbmsiIGhyZWY9Imh0dHA6Ly93d3cud2F2cGFjay5jb20vIiB0YXJnZXQ9Il90b3AiPldhdnBhY2s8L2E+IGlzIGFuIG9wZW4tc291cmNlCi08cD5hdWRpbyBjb2RlYyB0aGF0IGZlYXR1cmVzIGJvdGggbG9zc2xlc3MgYW5kIGxvc3N5IGVuY29kaW5nLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjQuNi41Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj50ZXN0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d3YgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHdhdnBhY2twYXJzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gd2F2cGFja2RlYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdXRvYXVkaW9zaW5rPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgZGVjb2RlcyB0aGUgV2F2cGFjayBmaWxlIHRlc3Qud3YgaW50byByYXcgYXVkaW8gYnVmZmVycyBhbmQKLXRyaWVzIHRvIHBsYXkgaXQgYmFjayB1c2luZyBhbiBhdXRvbWF0aWNhbGx5IGZvdW5kIGF1ZGlvIHNpbmsuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY0LjYuNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYWNrLmh0bWwjcGx1Z2luLXdhdnBhY2siPndhdnBhY2s8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5BcndlZCB2LiBNZXJrYXR6ICZsdDt2Lm1lcmthdHpAZ214Lm5ldCZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3Nsb21vQGNpcmN1bGFyLWNoYW9zLm9yZyZndDs8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+Y2xhc3M8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Q29kZWMvRGVjb2Rlci9BdWRpbzwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjQuNi42LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtd2F2cGFjaywgZGVwdGg9KGludClbIDEsIDMyIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDYwMDAsIDE5MjAwMCBdLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVM4LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgNjAwMCwgMTkyMDAwIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA2MDAwLCAxOTIwMDAgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMzJMRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDYwMDAsIDE5MjAwMCBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RXYXZwYWNrRGVjLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0V2F2cGFja0RlYzwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFdhdnBhY2tEZWM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOTNhZmUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+d2F2cGFja2VuYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwiIHRpdGxlPSJ3YXZwYWNrZGVjIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5odG1sIiB0aXRsZT0id2F2cGFja3BhcnNlIj4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iR1RLLURvYyBWMS4yNSAoWE1MIG1vZGUpIj4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Ci08L2hlYWQ+Ci08Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Ci08dGFibGUgY2xhc3M9Im5hdmlnYXRpb24iIGlkPSJ0b3AiIHdpZHRoPSIxMDAlIiBzdW1tYXJ5PSJOYXZpZ2F0aW9uIGhlYWRlciIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSI1Ij48dHIgdmFsaWduPSJtaWRkbGUiPgotPHRkIHdpZHRoPSIxMDAlIiBhbGlnbj0ibGVmdCIgY2xhc3M9InNob3J0Y3V0cyI+Ci08YSBocmVmPSIjIiBjbGFzcz0ic2hvcnRjdXQiPlRvcDwvYT48c3BhbiBpZD0ibmF2X2Rlc2NyaXB0aW9uIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaW50ZXJmYWNlcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIiBjbGFzcz0ic2hvcnRjdXQiPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5wcm9wZXJ0aWVzIiBjbGFzcz0ic2hvcnRjdXQiPlByb3BlcnRpZXM8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy50b3Bfb2ZfcGFnZSI+PC9hPndhdnBhY2tlbmM8L3NwYW4+PC9oMj4KLTxwPndhdnBhY2tlbmM8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sI0dzdFdhdnBhY2tFbmMtLWJpdHJhdGUiIHRpdGxlPSJUaGUg4oCcYml0cmF0ZeKAnSBwcm9wZXJ0eSI+Yml0cmF0ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sI0dzdFdhdnBhY2tFbmMtLWJpdHMtcGVyLXNhbXBsZSIgdGl0bGU9IlRoZSDigJxiaXRzLXBlci1zYW1wbGXigJ0gcHJvcGVydHkiPmJpdHMtcGVyLXNhbXBsZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RXYXZwYWNrRW5jQ29ycmVjdGlvbk1vZGU8L3NwYW4+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwjR3N0V2F2cGFja0VuYy0tY29ycmVjdGlvbi1tb2RlIiB0aXRsZT0iVGhlIOKAnGNvcnJlY3Rpb24tbW9kZeKAnSBwcm9wZXJ0eSI+Y29ycmVjdGlvbi1tb2RlPC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X2ZsYWdzIj5SZWFkIC8gV3JpdGU8L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBjbGFzcz0icHJvcGVydHlfdHlwZSI+PGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50PC9zcGFuPjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCNHc3RXYXZwYWNrRW5jLS1leHRyYS1wcm9jZXNzaW5nIiB0aXRsZT0iVGhlIOKAnGV4dHJhLXByb2Nlc3NpbmfigJ0gcHJvcGVydHkiPmV4dHJhLXByb2Nlc3Npbmc8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48c3BhbiBjbGFzcz0idHlwZSI+R3N0V2F2cGFja0VuY0pTTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCNHc3RXYXZwYWNrRW5jLS1qb2ludC1zdGVyZW8tbW9kZSIgdGl0bGU9IlRoZSDigJxqb2ludC1zdGVyZW8tbW9kZeKAnSBwcm9wZXJ0eSI+am9pbnQtc3RlcmVvLW1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj48YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sI0dzdFdhdnBhY2tFbmMtLW1kNSIgdGl0bGU9IlRoZSDigJxtZDXigJ0gcHJvcGVydHkiPm1kNTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RXYXZwYWNrRW5jTW9kZTwvc3Bhbj48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9uYW1lIj48YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuaHRtbCNHc3RXYXZwYWNrRW5jLS1tb2RlIiB0aXRsZT0iVGhlIOKAnG1vZGXigJ0gcHJvcGVydHkiPm1vZGU8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxhIG5hbWU9IkdzdFdhdnBhY2tFbmMiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sI0dzdFdhdnBhY2tFbmMtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFdhdnBhY2tFbmMiPkdzdFdhdnBhY2tFbmM8L2E+PC90ZD4KLTwvdHI+PC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLWdzdGF1ZGlvZW5jb2Rlci5odG1sI0dzdEF1ZGlvRW5jb2Rlci1zdHJ1Y3QiPkdzdEF1ZGlvRW5jb2RlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gR3N0V2F2cGFja0VuYwotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFdhdnBhY2tFbmMgaW1wbGVtZW50cwotIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RQcmVzZXQuaHRtbCNHc3RQcmVzZXQtc3RydWN0Ij5Hc3RQcmVzZXQ8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+V2F2cGFja0VuYyBlbmNvZGVzIHJhdyBhdWRpbyBpbnRvIGEgZnJhbWVkIFdhdnBhY2sgc3RyZWFtLjwvcD4KLTxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL3d3dy53YXZwYWNrLmNvbS8iIHRhcmdldD0iX3RvcCI+V2F2cGFjazwvYT4gaXMgYW4gb3Blbi1zb3VyY2UKLTxwPmF1ZGlvIGNvZGVjIHRoYXQgZmVhdHVyZXMgYm90aCBsb3NzbGVzcyBhbmQgbG9zc3kgZW5jb2RpbmcuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI2NS44LjUiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gYXVkaW90ZXN0c3JjIG51bTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmJ1ZmZlcnM8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj41MDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHdhdnBhY2tlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+c2luZXdhdmU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj53djwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGVuY29kZXMgYXVkaW8gZnJvbSBhdWRpb3Rlc3RzcmMgaW50byBhIFdhdnBhY2sgZmlsZS4gVGhlIGF1ZGlvY29udmVydCBlbGVtZW50IGlzIG5lZWRlZAotYXMgdGhlIFdhdnBhY2sgZW5jb2RlciBvbmx5IGFjY2VwdHMgaW5wdXQgd2l0aCAzMiBiaXQgd2lkdGguCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjE8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gY2RkYTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLzEgISBhdWRpb2NvbnZlcnQgISB3YXZwYWNrZW5jICEgZmlsZXNpbmsgbG9jYXRpb249dHJhY2sxLnd2PC9zcGFuPjwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBUaGlzIHBpcGVsaW5lIGVuY29kZXMgYXVkaW8gZnJvbSBhbiBhdWRpbyBDRCBpbnRvIGEgV2F2cGFjayBmaWxlIHVzaW5nCi1sb3NzbGVzcyBlbmNvZGluZyAodGhlIGZpbGUgb3V0cHV0IHdpbGwgYmUgZmFpcmx5IGxhcmdlKS4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBjZGRhPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPjo8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBzbGMiPi8vMSAhIGF1ZGlvY29udmVydCAhIHdhdnBhY2tlbmMgYml0cmF0ZT0xMjgwMDAgISBmaWxlc2luayBsb2NhdGlvbj10cmFjazEud3Y8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgZW5jb2RlcyBhdWRpbyBmcm9tIGFuIGF1ZGlvIENEIGludG8gYSBXYXZwYWNrIGZpbGUgdXNpbmcKLWxvc3N5IGVuY29kaW5nIGF0IGEgY2VydGFpbiBiaXRyYXRlICh0aGUgZmlsZSB3aWxsIGJlIGZhaXJseSBzbWFsbCkuCi08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY1LjguNi4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYWNrLmh0bWwjcGx1Z2luLXdhdnBhY2siPndhdnBhY2s8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5TZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0VuY29kZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY1LjguNi4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzMyTEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA2MDAwLCAxOTIwMDAgXTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC13YXZwYWNrLCBkZXB0aD0oaW50KVsgMSwgMzIgXSwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgNjAwMCwgMTkyMDAwIF0sIGZyYW1lZD0oYm9vbGVhbil0cnVlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD53dmNzcmM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNvdXJjZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb21ldGltZXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXdhdnBhY2stY29ycmVjdGlvbiwgZnJhbWVkPShib29sZWFuKXRydWU8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2tlbmMub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFdhdnBhY2tFbmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RXYXZwYWNrRW5jPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0V2F2cGFja0VuYzs8L3ByZT4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0V2F2cGFja0VuYy0tYml0cmF0ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJpdHJhdGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGJpdHJhdGXigJ0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VHJ5IHRvIGVuY29kZSB3aXRoIHRoaXMgYXZlcmFnZSBiaXRyYXRlIChiaXRzL3NlYykuIFRoaXMgZW5hYmxlcyBsb3NzeSBlbmNvZGluZywgdmFsdWVzIHNtYWxsZXIgdGhhbiAyNDAwMCBkaXNhYmxlIGl0IGFnYWluLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gOTYwMDAwMDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFdhdnBhY2tFbmMtLWJpdHMtcGVyLXNhbXBsZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGJpdHMtcGVyLXNhbXBsZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcYml0cy1wZXItc2FtcGxl4oCdICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2RvdWJsZSI+PHNwYW4gY2xhc3M9InR5cGUiPmdkb3VibGU8L3NwYW4+PC9hPjwvcHJlPgotPHA+VHJ5IHRvIGVuY29kZSB3aXRoIHRoaXMgYW1vdW50IG9mIGJpdHMgcGVyIHNhbXBsZS4gVGhpcyBlbmFibGVzIGxvc3N5IGVuY29kaW5nLCB2YWx1ZXMgc21hbGxlciB0aGFuIDIuMCBkaXNhYmxlIGl0IGFnYWluLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogWzAsMjRdPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0V2F2cGFja0VuYy0tY29ycmVjdGlvbi1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcY29ycmVjdGlvbi1tb2Rl4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxjb3JyZWN0aW9uLW1vZGXigJ0gICAgICAgICAgPHNwYW4gY2xhc3M9InR5cGUiPkdzdFdhdnBhY2tFbmNDb3JyZWN0aW9uTW9kZTwvc3Bhbj48L3ByZT4KLTxwPlVzZSB0aGlzIG1vZGUgZm9yIHRoZSBjb3JyZWN0aW9uIHN0cmVhbS4gT25seSB3b3JrcyBpbiBsb3NzeSBtb2RlIS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogQ3JlYXRlIG5vIGNvcnJlY3Rpb24gZmlsZTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0V2F2cGFja0VuYy0tZXh0cmEtcHJvY2Vzc2luZyI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnGV4dHJhLXByb2Nlc3NpbmfigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGV4dHJhLXByb2Nlc3NpbmfigJ0gICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+VXNlIGJldHRlciBidXQgc2xvd2VyIGZpbHRlcnMgZm9yIGJldHRlciBjb21wcmVzc2lvbi9xdWFsaXR5LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gNjwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFdhdnBhY2tFbmMtLWpvaW50LXN0ZXJlby1tb2RlIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcam9pbnQtc3RlcmVvLW1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGpvaW50LXN0ZXJlby1tb2Rl4oCdICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0V2F2cGFja0VuY0pTTW9kZTwvc3Bhbj48L3ByZT4KLTxwPlVzZSB0aGlzIGpvaW50LXN0ZXJlbyBtb2RlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBhdXRvPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RXYXZwYWNrRW5jLS1tZDUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxtZDXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1kNeKAnSAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+U3RvcmUgTUQ1IGhhc2ggb2YgcmF3IHNhbXBsZXMgd2l0aGluIHRoZSBmaWxlLjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBGQUxTRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0V2F2cGFja0VuYy0tbW9kZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnG1vZGXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnG1vZGXigJ0gICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idHlwZSI+R3N0V2F2cGFja0VuY01vZGU8L3NwYW4+PC9wcmU+Ci08cD5TcGVlZCB2ZXJzdXMgY29tcHJlc3Npb24gdHJhZGVvZmYuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5vcm1hbCBDb21wcmVzc2lvbjwvcD4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9ImZvb3RlciI+Ci08aHI+R2VuZXJhdGVkIGJ5IEdUSy1Eb2MgVjEuMjU8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLmh0bWwgYi9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOGZmZDkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTx0aXRsZT53YXZwYWNrcGFyc2U6IEdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbDwvdGl0bGU+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc5LjEiPgotPGxpbmsgcmVsPSJob21lIiBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsIj4KLTxsaW5rIHJlbD0idXAiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja2VuYy5odG1sIiB0aXRsZT0id2F2cGFja2VuYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5odG1sIiB0aXRsZT0id2F2cGFyc2UiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPgotPC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9ImluZGV4Lmh0bWwiPjxpbWcgc3JjPSJob21lLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iSG9tZSI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJjaDAxLmh0bWwiPjxpbWcgc3JjPSJ1cC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlVwIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS50b3Bfb2ZfcGFnZSI+PC9hPndhdnBhY2twYXJzZTwvc3Bhbj48L2gyPgotPHA+d2F2cGFja3BhcnNlIOKAlCBXYXZwYWNrIHBhcnNlcjwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RXYXZwYWNrUGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrcGFyc2UuaHRtbCNHc3RXYXZwYWNrUGFyc2Utc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFdhdnBhY2tQYXJzZSI+R3N0V2F2cGFja1BhcnNlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RCYXNlUGFyc2UuaHRtbCNHc3RCYXNlUGFyc2Utc3RydWN0Ij5Hc3RCYXNlUGFyc2U8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFdhdnBhY2tQYXJzZQotPC9wcmU+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrcGFyc2UuZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+VGhpcyBpcyBhbiBXYXZwYWNrIHBhcnNlci48L3A+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY2LjYuMyI+PC9hPjxoMz5FeGFtcGxlIGxhdW5jaCBsaW5lPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBmaWxlc3JjIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+YWJjPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2F2cGFjayA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gd2F2cGFja3BhcnNlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3YXZwYWNrZGVjIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3Jlc2FtcGxlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGF1dG9hdWRpb3Npbms8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjYuNi40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sI3BsdWdpbi1hdWRpb3BhcnNlcnMiPmF1ZGlvcGFyc2VyczwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPk1hcmsgTmF1d2VsYWVydHMgJmx0O21hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9QYXJzZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY2LjYuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXdhdnBhY2s8L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmF1ZGlvL3gtd2F2cGFjaywgZGVwdGg9KGludClbIDEsIDMyIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDYwMDAsIDE5MjAwMCBdLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtd2F2cGFjay1jb3JyZWN0aW9uLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrcGFyc2Uub3RoZXJfZGV0YWlscyI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFdhdnBhY2tQYXJzZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFdhdnBhY2tQYXJzZTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFdhdnBhY2tQYXJzZTs8L3ByZT4KLTxwPlRoZSBvcGFxdWUgR3N0V2F2cGFja1BhcnNlIG9iamVjdDwvcD4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFja3BhcnNlLnNlZS1hbHNvIj48L2E+PGgyPlNlZSBBbHNvPC9oMj4KLTxwPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYW1ycGFyc2UuaHRtbCNHc3RBbXJQYXJzZSI+PHNwYW4gY2xhc3M9InR5cGUiPkdzdEFtclBhcnNlPC9zcGFuPjwvYT4sIDxzcGFuIGNsYXNzPSJ0eXBlIj5Hc3RBQUNQYXJzZTwvc3Bhbj48L3A+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZjcxYzMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPndhdnBhcnNlOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5odG1sIiB0aXRsZT0id2F2cGFja3BhcnNlIj4KLTxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCIgdGl0bGU9IndlYm1tdXgiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2Uub2JqZWN0LWhpZXJhcmNoeSIgY2xhc3M9InNob3J0Y3V0Ij5PYmplY3QgSGllcmFyY2h5PC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X3Byb3BlcnRpZXMiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhY2twYXJzZS5odG1sIj48aW1nIHNyYz0ibGVmdC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IlByZXYiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UudG9wX29mX3BhZ2UiPjwvYT53YXZwYXJzZTwvc3Bhbj48L2gyPgotPHA+d2F2cGFyc2U8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLnByb3BlcnRpZXMiPjwvYT48aDI+UHJvcGVydGllczwvaDI+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9ImluZm9ybWFsdGFibGUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9InByb3BlcnRpZXNfdHlwZSI+Ci08Y29sIHdpZHRoPSIzMDBweCIgY2xhc3M9InByb3BlcnRpZXNfbmFtZSI+Ci08Y29sIHdpZHRoPSIyMDBweCIgY2xhc3M9InByb3BlcnRpZXNfZmxhZ3MiPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5odG1sI0dzdFdhdlBhcnNlLS1pZ25vcmUtbGVuZ3RoIiB0aXRsZT0iVGhlIOKAnGlnbm9yZS1sZW5ndGjigJ0gcHJvcGVydHkiPmlnbm9yZS1sZW5ndGg8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08YSBuYW1lPSJHc3RXYXZQYXJzZSI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UuaHRtbCNHc3RXYXZQYXJzZS1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0V2F2UGFyc2UiPkdzdFdhdlBhcnNlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2Uub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFdhdlBhcnNlCi08L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlBhcnNlIGEgLndhdiBmaWxlIGludG8gcmF3IG9yIGNvbXByZXNzZWQgYXVkaW8uPC9wPgotPHA+V2F2cGFyc2Ugc3VwcG9ydHMgYm90aCBwdXNoIGFuZCBwdWxsIG1vZGUgb3BlcmF0aW9ucywgbWFraW5nIGl0IHBvc3NpYmxlIHRvCi1zdHJlYW0gZnJvbSBhIG5ldHdvcmsgc291cmNlLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjcuNy40Ij48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPGRpdiBjbGFzcz0iaW5mb3JtYWxleGFtcGxlIj4KLSAgPHRhYmxlIGNsYXNzPSJsaXN0aW5nX2ZyYW1lIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgPHRib2R5PgotICAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfbGluZXMiIGFsaWduPSJyaWdodCI+PHByZT4xPC9wcmU+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2NvZGUiPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5nc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5sYXVuY2g8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjA8L3NwYW4+IGZpbGVzcmMgbG9jYXRpb248c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+PTwvc3Bhbj5zaW5lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi48L3NwYW4+d2F2IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB3YXZwYXJzZSA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhbHNhc2luazwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBSZWFkIGEgd2F2IGZpbGUgYW5kIG91dHB1dCB0byB0aGUgc291bmRjYXJkIHVzaW5nIHRoZSBBTFNBIGVsZW1lbnQuIFRoZQotd2F2IGZpbGUgaXMgYXNzdW1lZCB0byBjb250YWluIHJhdyB1bmNvbXByZXNzZWQgc2FtcGxlcy4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiBnbm9tZXZmc3NyYyBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPmh0dHA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ojwvc3Bhbj48c3BhbiBjbGFzcz0iZ3RrZG9jIHNsYyI+Ly93d3cuZXhhbXBsZS5vcmcvc2luZS53YXYgISBxdWV1ZSAhIHdhdnBhcnNlICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbms8L3NwYW4+PC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFN0cmVhbSBkYXRhIGZyb20gYSBuZXR3b3JrIHVybC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjcuNy41LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdnBhcnNlLmh0bWwjcGx1Z2luLXdhdnBhcnNlIj53YXZwYXJzZTwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmNsYXNzPC9zcGFuPjwvcD48L3RkPgotPHRkPkNvZGVjL0RlbXV4ZXIvQXVkaW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY3LjcuNS4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hbHdheXM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpby94LXdhdjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8vbXMtZ3NtPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFUxNkxFLCBTMjRMRSwgVTI0TEUsIFMzMkxFLCBVMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtdm9yYmlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hYzM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LWR0czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtYWxhdzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtbXVsYXc8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXdtcywgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpbWljcm9zb2Z0LCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZHZpLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC10cnVlc3BlZWNoPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC13bWEsIHdtYXZlcnNpb249KGludCkxLCBiaXRyYXRlPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF0sIGJsb2NrX2FsaWduPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXdtYSwgd21hdmVyc2lvbj0oaW50KTIsIGJpdHJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgYmxvY2tfYWxpZ249KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtd21hLCB3bWF2ZXJzaW9uPShpbnQpMywgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC12bmQuc29ueS5hdHJhYzM8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby94LXZveHdhcmUsIHZveHdhcmV0eXBlPShpbnQpMTE3PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGs0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGszPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZHZpPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vQU1SPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8vQU1SLVdCPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXVkaW8veC1zaXJlbjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtb2dnLWF2aTwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2cGFyc2UuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RXYXZQYXJzZS1zdHJ1Y3QiPjwvYT48aDM+c3RydWN0IEdzdFdhdlBhcnNlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0V2F2UGFyc2U7PC9wcmU+Ci08cD5PcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0V2F2UGFyc2UtLWlnbm9yZS1sZW5ndGgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxpZ25vcmUtbGVuZ3Ro4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxpZ25vcmUtbGVuZ3Ro4oCdICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlRoaXMgc2VsZWN0cyB3aGV0aGVyIHRoZSBsZW5ndGggZm91bmQgaW4gYSBkYXRhIGNodW5rCi1zaG91bGQgYmUgaWdub3JlZC4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzdHJlYW1lZCBhdWRpbwotd2hlcmUgdGhlIGxlbmd0aCBpcyB1bmtub3duIHVudGlsIHRoZSBlbmQgb2Ygc3RyZWFtaW5nLAotYW5kIHZhcmlvdXMgc29mdHdhcmUvaGFyZHdhcmUganVzdCBwdXRzIHNvbWUgcmFuZG9tIHZhbHVlCi1pbiB0aGVyZSBhbmQgaG9wZXMgaXQgZG9lc24ndCBicmVhayB0b28gbXVjaC48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWRiYWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+d2VibW11eDogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYXJzZS5odG1sIiB0aXRsZT0id2F2cGFyc2UiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwiIHRpdGxlPSJ4aW1hZ2VzcmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguZGVzY3JpcHRpb24iIGNsYXNzPSJzaG9ydGN1dCI+RGVzY3JpcHRpb248L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfaGllcmFyY2h5Ij7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4LmltcGxlbWVudGVkLWludGVyZmFjZXMiIGNsYXNzPSJzaG9ydGN1dCI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXgiPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgotPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+PHRhYmxlIHdpZHRoPSIxMDAlIj48dHI+Ci08dGQgdmFsaWduPSJ0b3AiPgotPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2VibW11eC50b3Bfb2ZfcGFnZSI+PC9hPndlYm1tdXg8L3NwYW4+PC9oMj4KLTxwPndlYm1tdXg8L3A+Ci08L3RkPgotPHRkIGNsYXNzPSJnYWxsZXJ5X2ltYWdlIiB2YWxpZ249InRvcCIgYWxpZ249InJpZ2h0Ij48L3RkPgotPC90cj48L3RhYmxlPjwvZGl2PgotPGEgbmFtZT0iR3N0V2ViTU11eCI+PC9hPjxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lmh0bWwjR3N0V2ViTU11eC1zdHJ1Y3QiIHRpdGxlPSJzdHJ1Y3QgR3N0V2ViTU11eCI+R3N0V2ViTU11eDwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXgub2JqZWN0LWhpZXJhcmNoeSI+PC9hPjxoMj5PYmplY3QgSGllcmFyY2h5PC9oMj4KLTxwcmUgY2xhc3M9InNjcmVlbiI+ICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR09iamVjdC1zdHJ1Y3QiPkdPYmplY3Q8L2E+Ci0gICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHSW5pdGlhbGx5VW5vd25lZCI+R0luaXRpYWxseVVub3duZWQ8L2E+Ci0gICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RPYmplY3QuaHRtbCNHc3RPYmplY3Qtc3RydWN0Ij5Hc3RPYmplY3Q8L2E+Ci0gICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0RWxlbWVudC5odG1sI0dzdEVsZW1lbnQtc3RydWN0Ij5Hc3RFbGVtZW50PC9hPgotICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbWF0cm9za2FtdXguaHRtbCNHc3RNYXRyb3NrYU11eCI+R3N0TWF0cm9za2FNdXg8L2E+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IEdzdFdlYk1NdXgKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2VibW11eC5pbXBsZW1lbnRlZC1pbnRlcmZhY2VzIj48L2E+PGgyPkltcGxlbWVudGVkIEludGVyZmFjZXM8L2gyPgotPHA+Ci1Hc3RXZWJNTXV4IGltcGxlbWVudHMKLSA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0VGFnU2V0dGVyLmh0bWwjR3N0VGFnU2V0dGVyLXN0cnVjdCI+R3N0VGFnU2V0dGVyPC9hPiBhbmQgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBnc3RyZWFtZXItR3N0VG9jU2V0dGVyLmh0bWwjR3N0VG9jU2V0dGVyIj5Hc3RUb2NTZXR0ZXI8L2E+LjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguZGVzY3JpcHRpb24iPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgotPHA+d2VibW11eCBtdXhlcyBWUDggdmlkZW8gYW5kIFZvcmJpcyBhdWRpbyBzdHJlYW1zIGludG8gYSBXZWJNIGZpbGUuPC9wPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI2OC43LjMiPjwvYT48aDM+RXhhbXBsZSBsYXVuY2ggbGluZTwvaDM+Ci08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTMKLTQ8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gd2VibW11eCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPm5ld2ZpbGU8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj53ZWJtICAgICAgICAgXAotICB1cmlkZWNvZGViaW4gdXJpPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZmlsZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij46PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgc2xjIj4vLy9wYXRoL3RvL3NvbWVmaWxlLm9ndiBuYW1lPWRlbXV4ICAgICAgICAgICAgICAgIFw8L3NwYW4+Ci0gIGRlbXV4PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi4gITwvc3Bhbj4gdmlkZW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2cDhlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj52aWRlb18wICAgIFwKLSAgZGVtdXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LiAhPC9zcGFuPiBwcm9ncmVzc3JlcG9ydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gYXVkaW9jb252ZXJ0IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpb3JhdGUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZvcmJpc2VuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPmF1ZGlvXzA8L3ByZT48L3RkPgotICAgICAgPC90cj4KLSAgICA8L3Rib2R5PgotICA8L3RhYmxlPgotPC9kaXY+Ci0gVGhpcyBwaXBlbGluZSByZS1lbmNvZGVzIGEgdmlkZW8gZmlsZSBvZiBhbnkgZm9ybWF0IGludG8gYSBXZWJNIGZpbGUuCi08ZGl2IGNsYXNzPSJpbmZvcm1hbGV4YW1wbGUiPgotICA8dGFibGUgY2xhc3M9Imxpc3RpbmdfZnJhbWUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICA8dGJvZHk+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19saW5lcyIgYWxpZ249InJpZ2h0Ij48cHJlPjEKLTIKLTM8L3ByZT48L3RkPgotICAgICAgICA8dGQgY2xhc3M9Imxpc3RpbmdfY29kZSI+PHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPmdzdDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPmxhdW5jaDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMDwvc3Bhbj4gd2VibW11eCBuYW1lPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+bXV4IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBmaWxlc2luayBsb2NhdGlvbjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPnRlc3Q8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj53ZWJtICAgICAgICAgICAgXAotICB2aWRlb3Rlc3RzcmMgbnVtPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+YnVmZmVyczxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI1MDwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmZyYW1lcmF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjI1PC9zcGFuPjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2aWRlb2NvbnZlcnQgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZwOGVuYyA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gcXVldWUgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IG11eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPnZpZGVvXzAgXAotICBhdWRpb3Rlc3RzcmMgc2FtcGxlc3BlcmJ1ZmZlcjxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjQ0MTAwPC9zcGFuPiBudW08c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5idWZmZXJzPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBhdWRpbzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4vPC9zcGFuPng8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LTwvc3Bhbj5yYXc8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+LDwvc3Bhbj5yYXRlPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+NDQxMDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiB2b3JiaXNlbmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHF1ZXVlIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBtdXg8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+Ljwvc3Bhbj5hdWRpb18wPC9wcmU+PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgPC90Ym9keT4KLSAgPC90YWJsZT4KLTwvZGl2PgotIFRoaXMgcGlwZWxpbmUgbXV4ZXMgYSB0ZXN0IHZpZGVvIGFuZCBhIHNpbmUgd2F2ZSBpbnRvIGEgV2ViTSBmaWxlLgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzeW5vcHNpc2RpdiI+Ci08aDI+U3lub3BzaXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI2OC43LjQuMSI+PC9hPjxoMz5FbGVtZW50IEluZm9ybWF0aW9uPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cGx1Z2luPC9zcGFuPjwvcD48L3RkPgotPHRkPgotICAgICAgICAgICAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbWF0cm9za2EuaHRtbCNwbHVnaW4tbWF0cm9za2EiPm1hdHJvc2thPC9hPgotICAgICAgICAgIDwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5hdXRob3I8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+R1N0cmVhbWVyIG1haW50YWluZXJzICZsdDtnc3RyZWFtZXItZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9NdXhlcjwvdGQ+Ci08L3RyPgotPC90Ym9keT4KLTwvdGFibGU+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjguNy40LjIiPjwvYT48aDM+RWxlbWVudCBQYWRzPC9oMz4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5hdWRpb18ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YXVkaW8veC12b3JiaXMsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGF1ZGlvL3gtb3B1cywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InZhcmlhYmxlbGlzdCI+Ci08Y29sZ3JvdXA+Ci08Y29sIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+Ci08Y29sPgotPC9jb2xncm91cD4KLTx0Ym9keT4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+bmFtZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zdWJ0aXRsZV8ldTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c2luazwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wcmVzZW5jZTwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5yZXF1ZXN0PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3VidGl0bGUveC1rYXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gdGV4dC94LXJhdywgZm9ybWF0PShzdHJpbmcpdXRmODwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IGFwcGxpY2F0aW9uL3gtc3NhPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4gYXBwbGljYXRpb24veC1hc3M8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXVzZjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+IHN1YnBpY3R1cmUveC1kdmQ8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhcHBsaWNhdGlvbi94LXN1YnRpdGxlLXVua25vd248L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvXyV1PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zaW5rPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPnJlcXVlc3Q8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGV0YWlsczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD52aWRlby94LXZwOCwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiB2aWRlby94LXZwOSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPnZpZGVvL3dlYm08L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+PC9zcGFuPjwvcD48L3RkPgotPHRkPiBhdWRpby93ZWJtPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4LmZ1bmN0aW9uc19kZXRhaWxzIj48L2E+PGgyPkZ1bmN0aW9uczwvaDI+Ci08cD48L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13ZWJtbXV4Lm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RXZWJNTXV4LXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0V2ViTU11eDwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+c3RydWN0IEdzdFdlYk1NdXg7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjZiZmQwLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+eGltYWdlc3JjOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9InVwIiBocmVmPSJjaDAxLmh0bWwiIHRpdGxlPSJnc3QtcGx1Z2lucy1nb29kIEVsZW1lbnRzIj4KLTxsaW5rIHJlbD0icHJldiIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCIgdGl0bGU9IndlYm1tdXgiPgotPGxpbmsgcmVsPSJuZXh0IiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLmh0bWwiIHRpdGxlPSJ5NG1lbmMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gaGVhZGVyIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjUiPjx0ciB2YWxpZ249Im1pZGRsZSI+Ci08dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0ic2hvcnRjdXRzIj4KLTxhIGhyZWY9IiMiIGNsYXNzPSJzaG9ydGN1dCI+VG9wPC9hPjxzcGFuIGlkPSJuYXZfZGVzY3JpcHRpb24iPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5kZXNjcmlwdGlvbiIgY2xhc3M9InNob3J0Y3V0Ij5EZXNjcmlwdGlvbjwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9oaWVyYXJjaHkiPsKgwqA8c3BhbiBjbGFzcz0iZGltIj58PC9zcGFuPsKgCi0gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5vYmplY3QtaGllcmFyY2h5IiBjbGFzcz0ic2hvcnRjdXQiPk9iamVjdCBIaWVyYXJjaHk8L2E+PC9zcGFuPjxzcGFuIGlkPSJuYXZfcHJvcGVydGllcyI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLnByb3BlcnRpZXMiIGNsYXNzPSJzaG9ydGN1dCI+UHJvcGVydGllczwvYT48L3NwYW4+Ci08L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9ImhvbWUucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJIb21lIj48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9InUiIGhyZWY9ImNoMDEuaHRtbCI+PGltZyBzcmM9InVwLnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iVXAiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0icCIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdlYm1tdXguaHRtbCI+PGltZyBzcmM9ImxlZnQucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJQcmV2Ij48L2E+PC90ZD4KLTx0ZD48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaHRtbCI+PGltZyBzcmM9InJpZ2h0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iTmV4dCI+PC9hPjwvdGQ+Ci08L3RyPjwvdGFibGU+Ci08ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPjx0YWJsZSB3aWR0aD0iMTAwJSI+PHRyPgotPHRkIHZhbGlnbj0idG9wIj4KLTxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy50b3Bfb2ZfcGFnZSI+PC9hPnhpbWFnZXNyYzwvc3Bhbj48L2gyPgotPHA+eGltYWdlc3JjPC9wPgotPC90ZD4KLTx0ZCBjbGFzcz0iZ2FsbGVyeV9pbWFnZSIgdmFsaWduPSJ0b3AiIGFsaWduPSJyaWdodCI+PC90ZD4KLTwvdHI+PC90YWJsZT48L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMucHJvcGVydGllcyI+PC9hPjxoMj5Qcm9wZXJ0aWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0icHJvcGVydGllc190eXBlIj4KLTxjb2wgd2lkdGg9IjMwMHB4IiBjbGFzcz0icHJvcGVydGllc19uYW1lIj4KLTxjb2wgd2lkdGg9IjIwMHB4IiBjbGFzcz0icHJvcGVydGllc19mbGFncyI+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLWRpc3BsYXktbmFtZSIgdGl0bGU9IlRoZSDigJxkaXNwbGF5LW5hbWXigJ0gcHJvcGVydHkiPmRpc3BsYXktbmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXNob3ctcG9pbnRlciIgdGl0bGU9IlRoZSDigJxzaG93LXBvaW50ZXLigJ0gcHJvcGVydHkiPnNob3ctcG9pbnRlcjwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLWVuZHgiIHRpdGxlPSJUaGUg4oCcZW5keOKAnSBwcm9wZXJ0eSI+ZW5keDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLWVuZHkiIHRpdGxlPSJUaGUg4oCcZW5keeKAnSBwcm9wZXJ0eSI+ZW5keTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXN0YXJ0eCIgdGl0bGU9IlRoZSDigJxzdGFydHjigJ0gcHJvcGVydHkiPnN0YXJ0eDwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXN0YXJ0eSIgdGl0bGU9IlRoZSDigJxzdGFydHnigJ0gcHJvcGVydHkiPnN0YXJ0eTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXVzZS1kYW1hZ2UiIHRpdGxlPSJUaGUg4oCcdXNlLWRhbWFnZeKAnSBwcm9wZXJ0eSI+dXNlLWRhbWFnZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXJlbW90ZSIgdGl0bGU9IlRoZSDigJxyZW1vdGXigJ0gcHJvcGVydHkiPnJlbW90ZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgY2xhc3M9InByb3BlcnR5X3R5cGUiPjxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQ2NCI+PHNwYW4gY2xhc3M9InR5cGUiPmd1aW50NjQ8L3NwYW4+PC9hPjwvdGQ+Ci08dGQgY2xhc3M9InByb3BlcnR5X25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwjR3N0WEltYWdlU3JjLS14aWQiIHRpdGxlPSJUaGUg4oCceGlk4oCdIHByb3BlcnR5Ij54aWQ8L2E+PC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfZmxhZ3MiPlJlYWQgLyBXcml0ZTwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV90eXBlIj4KLTxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2NoYXIiPjxzcGFuIGNsYXNzPSJ0eXBlIj5nY2hhcjwvc3Bhbj48L2E+wqAqPC90ZD4KLTx0ZCBjbGFzcz0icHJvcGVydHlfbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCNHc3RYSW1hZ2VTcmMtLXhuYW1lIiB0aXRsZT0iVGhlIOKAnHhuYW1l4oCdIHByb3BlcnR5Ij54bmFtZTwvYT48L3RkPgotPHRkIGNsYXNzPSJwcm9wZXJ0eV9mbGFncyI+UmVhZCAvIFdyaXRlPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGEgbmFtZT0iR3N0WEltYWdlU3JjIj48L2E+PGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5vdGhlciI+PC9hPjxoMj5UeXBlcyBhbmQgVmFsdWVzPC9oMj4KLTxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0iaW5mb3JtYWx0YWJsZSIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCI+Ci08Y29sZ3JvdXA+Ci08Y29sIHdpZHRoPSIxNTBweCIgY2xhc3M9Im5hbWUiPgotPGNvbCBjbGFzcz0iZGVzY3JpcHRpb24iPgotPC9jb2xncm91cD4KLTx0Ym9keT48dHI+Ci08dGQgY2xhc3M9ImRhdGF0eXBlX2tleXdvcmQiPnN0cnVjdDwvdGQ+Ci08dGQgY2xhc3M9ImZ1bmN0aW9uX25hbWUiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwjR3N0WEltYWdlU3JjLXN0cnVjdCIgdGl0bGU9InN0cnVjdCBHc3RYSW1hZ2VTcmMiPkdzdFhJbWFnZVNyYzwvYT48L3RkPgotPC90cj48L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5vYmplY3QtaGllcmFyY2h5Ij48L2E+PGgyPk9iamVjdCBIaWVyYXJjaHk8L2gyPgotPHByZSBjbGFzcz0ic2NyZWVuIj4gICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ29iamVjdGdvYmplY3QtVGhlLUJhc2UtT2JqZWN0LVR5cGUuaHRtbCNHT2JqZWN0LXN0cnVjdCI+R09iamVjdDwvYT4KLSAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dJbml0aWFsbHlVbm93bmVkIj5HSW5pdGlhbGx5VW5vd25lZDwvYT4KLSAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdE9iamVjdC5odG1sI0dzdE9iamVjdC1zdHJ1Y3QiPkdzdE9iamVjdDwvYT4KLSAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dzdHJlYW1lci0xLjBHc3RFbGVtZW50Lmh0bWwjR3N0RWxlbWVudC1zdHJ1Y3QiPkdzdEVsZW1lbnQ8L2E+Ci0gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLWxpYnMtMS4wR3N0QmFzZVNyYy5odG1sI0dzdEJhc2VTcmMtc3RydWN0Ij5Hc3RCYXNlU3JjPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItbGlicy0xLjBHc3RQdXNoU3JjLmh0bWwjR3N0UHVzaFNyYy1zdHJ1Y3QiPkdzdFB1c2hTcmM8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RYSW1hZ2VTcmMKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxwPlRoaXMgZWxlbWVudCBjYXB0dXJlcyB5b3VyIFggRGlzcGxheSBhbmQgY3JlYXRlcyByYXcgUkdCIHZpZGVvLiAgSXQgdXNlcwotdGhlIFhEYW1hZ2UgZXh0ZW5zaW9uIGlmIGF2YWlsYWJsZSB0byBvbmx5IGNhcHR1cmUgYXJlYXMgb2YgdGhlIHNjcmVlbiB0aGF0Ci1oYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgZnJhbWUuICBJdCB1c2VzIHRoZSBYRml4ZXMgZXh0ZW5zaW9uIGlmCi1hdmFpbGFibGUgdG8gYWxzbyBjYXB0dXJlIHlvdXIgbW91c2UgcG9pbnRlci4gIEJ5IGRlZmF1bHQgaXQgd2lsbCBmaXhhdGUgdG8KLTI1IGZyYW1lcyBwZXIgc2Vjb25kLjwvcD4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjkuNy4zIj48L2E+PGgzPkV4YW1wbGUgcGlwZWxpbmVzPC9oMz4KLTxkaXYgY2xhc3M9ImluZm9ybWFsZXhhbXBsZSI+Ci0gIDx0YWJsZSBjbGFzcz0ibGlzdGluZ19mcmFtZSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgIDx0Ym9keT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsaXN0aW5nX2xpbmVzIiBhbGlnbj0icmlnaHQiPjxwcmU+MTwvcHJlPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGlzdGluZ19jb2RlIj48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+Z3N0PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+bGF1bmNoPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi08L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4wPC9zcGFuPiB4aW1hZ2VzcmMgPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+eDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4tPC9zcGFuPnJhdzxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4sPC9zcGFuPmZyYW1lcmF0ZTxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij49PC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjU8L3NwYW4+PHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPi88L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj4gPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IHZpZGVvY29udmVydCA8c3BhbiBjbGFzcz0iZ3RrZG9jIG9wdCI+ITwvc3Bhbj4gdGhlb3JhZW5jIDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4hPC9zcGFuPiBvZ2dtdXggPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPiE8L3NwYW4+IGZpbGVzaW5rIGxvY2F0aW9uPHNwYW4gY2xhc3M9Imd0a2RvYyBvcHQiPj08L3NwYW4+ZGVza3RvcDxzcGFuIGNsYXNzPSJndGtkb2Mgb3B0Ij4uPC9zcGFuPm9nZzwvcHJlPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGJvZHk+Ci0gIDwvdGFibGU+Ci08L2Rpdj4KLSBFbmNvZGVzIHlvdXIgWCBkaXNwbGF5IHRvIGFuIE9nZyB0aGVvcmEgdmlkZW8gYXQgNSBmcmFtZXMgcGVyIHNlY29uZC4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPgotPGgyPlN5bm9wc2lzPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNjkuNy40LjEiPjwvYT48aDM+RWxlbWVudCBJbmZvcm1hdGlvbjwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnBsdWdpbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD4KLSAgICAgICAgICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXhpbWFnZXNyYy5odG1sI3BsdWdpbi14aW1hZ2VzcmMiPnhpbWFnZXNyYzwvYT4KLSAgICAgICAgICA8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+YXV0aG9yPC9zcGFuPjwvcD48L3RkPgotPHRkPkx1dHogTXVlbGxlciAmbHQ7bHV0ekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBKYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbSZndDssIFphaGVlciBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Tb3VyY2UvVmlkZW88L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjY5LjcuNC4yIj48L2E+PGgzPkVsZW1lbnQgUGFkczwvaDM+Ci08ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPjx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgotPGNvbGdyb3VwPgotPGNvbCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgotPGNvbD4KLTwvY29sZ3JvdXA+Ci08dGJvZHk+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPm5hbWU8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c3JjPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRpcmVjdGlvbjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5zb3VyY2U8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcGl4ZWwtYXNwZWN0LXJhdGlvPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5mdW5jdGlvbnNfZGV0YWlscyI+PC9hPjxoMj5GdW5jdGlvbnM8L2gyPgotPHA+PC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLm90aGVyX2RldGFpbHMiPjwvYT48aDI+VHlwZXMgYW5kIFZhbHVlczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RYSW1hZ2VTcmMtc3RydWN0Ij48L2E+PGgzPnN0cnVjdCBHc3RYSW1hZ2VTcmM8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPnN0cnVjdCBHc3RYSW1hZ2VTcmM7PC9wcmU+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXhpbWFnZXNyYy5wcm9wZXJ0eS1kZXRhaWxzIj48L2E+PGgyPlByb3BlcnR5IERldGFpbHM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0WEltYWdlU3JjLS1kaXNwbGF5LW5hbWUiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxkaXNwbGF5LW5hbWXigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnGRpc3BsYXktbmFtZeKAnSAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2djaGFyIj48c3BhbiBjbGFzcz0idHlwZSI+Z2NoYXI8L3NwYW4+PC9hPsKgKjwvcHJlPgotPHA+WCBEaXNwbGF5IE5hbWUuPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IE5VTEw8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFhJbWFnZVNyYy0tc2hvdy1wb2ludGVyIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcc2hvdy1wb2ludGVy4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJxzaG93LXBvaW50ZXLigJ0gICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnYm9vbGVhbiI+PHNwYW4gY2xhc3M9InR5cGUiPmdib29sZWFuPC9zcGFuPjwvYT48L3ByZT4KLTxwPlNob3cgbW91c2UgcG9pbnRlciAoaWYgWEZpeGVzIGV4dGVuc2lvbiBlbmFibGVkKS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogVFJVRTwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0WEltYWdlU3JjLS1lbmR4Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZW5keOKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZW5keOKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5YIGNvb3JkaW5hdGUgb2YgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkCi0oMCBmb3IgYm90dG9tIHJpZ2h0IG9mIHNjcmVlbik8L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IEdfTUFYSU5UPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0WEltYWdlU3JjLS1lbmR5Ij48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCcZW5keeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcZW5keeKAnSAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5ZIGNvb3JkaW5hdGUgb2YgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkCi0oMCBmb3IgYm90dG9tIHJpZ2h0IG9mIHNjcmVlbik8L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+QWxsb3dlZCB2YWx1ZXM6ICZsdDs9IEdfTUFYSU5UPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0WEltYWdlU3JjLS1zdGFydHgiPjwvYT48aDM+VGhlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj7igJxzdGFydHjigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHN0YXJ0eOKAnSAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2d1aW50Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ8L3NwYW4+PC9hPjwvcHJlPgotPHA+WCBjb29yZGluYXRlIG9mIHRvcCBsZWZ0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkCi0oMCBmb3IgdG9wIGxlZnQgb2Ygc2NyZWVuKTwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5BbGxvd2VkIHZhbHVlczogJmx0Oz0gR19NQVhJTlQ8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiAwPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RYSW1hZ2VTcmMtLXN0YXJ0eSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHN0YXJ0eeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCcc3RhcnR54oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ3VpbnQiPjxzcGFuIGNsYXNzPSJ0eXBlIj5ndWludDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5ZIGNvb3JkaW5hdGUgb2YgdG9wIGxlZnQgY29ybmVyIG9mIGFyZWEgdG8gYmUgcmVjb3JkZWQKLSgwIGZvciB0b3AgbGVmdCBvZiBzY3JlZW4pPC9wPgotPHA+RmxhZ3M6IFJlYWQgLyBXcml0ZTwvcD4KLTxwPkFsbG93ZWQgdmFsdWVzOiAmbHQ7PSBHX01BWElOVDwvcD4KLTxwPkRlZmF1bHQgdmFsdWU6IDA8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFhJbWFnZVNyYy0tdXNlLWRhbWFnZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHVzZS1kYW1hZ2XigJ08L2NvZGU+IHByb3BlcnR5PC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4gIOKAnHVzZS1kYW1hZ2XigJ0gICAgICAgICAgICAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nbGliZ2xpYi1CYXNpYy1UeXBlcy5odG1sI2dib29sZWFuIj48c3BhbiBjbGFzcz0idHlwZSI+Z2Jvb2xlYW48L3NwYW4+PC9hPjwvcHJlPgotPHA+VXNlIFhEYW1hZ2UgKGlmIHRoZSBYRGFtYWdlIGV4dGVuc2lvbiBpcyBlbmFibGVkKTwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBUUlVFPC9wPgotPC9kaXY+Ci08aHI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJHc3RYSW1hZ2VTcmMtLXJlbW90ZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHJlbW90ZeKAnTwvY29kZT4gcHJvcGVydHk8L2gzPgotPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPiAg4oCccmVtb3Rl4oCdICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dsaWJnbGliLUJhc2ljLVR5cGVzLmh0bWwjZ2Jvb2xlYW4iPjxzcGFuIGNsYXNzPSJ0eXBlIj5nYm9vbGVhbjwvc3Bhbj48L2E+PC9wcmU+Ci08cD5XaGV0aGVyIHRoZSBYIGRpc3BsYXkgaXMgcmVtb3RlLiBUaGUgZWxlbWVudCB3aWxsIHRyeSB0byB1c2UgYWx0ZXJuYXRlIGNhbGxzCi1rbm93biB0byB3b3JrIGJldHRlciB3aXRoIHJlbW90ZSBkaXNwbGF5cy48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogRkFMU0U8L3A+Ci08L2Rpdj4KLTxocj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9IkdzdFhJbWFnZVNyYy0teGlkIj48L2E+PGgzPlRoZSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+4oCceGlk4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx4aWTigJ0gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNndWludDY0Ij48c3BhbiBjbGFzcz0idHlwZSI+Z3VpbnQ2NDwvc3Bhbj48L2E+PC9wcmU+Ci08cD5UaGUgWElEIG9mIHRoZSB3aW5kb3cgdG8gY2FwdHVyZS4gMCBmb3IgdGhlIHJvb3Qgd2luZG93IChkZWZhdWx0KS48L3A+Ci08cD5GbGFnczogUmVhZCAvIFdyaXRlPC9wPgotPHA+RGVmYXVsdCB2YWx1ZTogMDwvcD4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0WEltYWdlU3JjLS14bmFtZSI+PC9hPjxoMz5UaGUgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPuKAnHhuYW1l4oCdPC9jb2RlPiBwcm9wZXJ0eTwvaDM+Ci08cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+ICDigJx4bmFtZeKAnSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ2xpYmdsaWItQmFzaWMtVHlwZXMuaHRtbCNnY2hhciI+PHNwYW4gY2xhc3M9InR5cGUiPmdjaGFyPC9zcGFuPjwvYT7CoCo8L3ByZT4KLTxwPlRoZSBuYW1lIG9mIHRoZSB3aW5kb3cgdG8gY2FwdHVyZSwgaWYgYW55LjwvcD4KLTxwPkZsYWdzOiBSZWFkIC8gV3JpdGU8L3A+Ci08cD5EZWZhdWx0IHZhbHVlOiBOVUxMPC9wPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaHRtbCBiL2RvY3MvcGx1Z2lucy9odG1sL2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwOGI3My4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPHRpdGxlPnk0bWVuYzogR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsPC90aXRsZT4KLTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzkuMSI+Ci08bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWwiPgotPGxpbmsgcmVsPSJ1cCIgaHJlZj0iY2gwMS5odG1sIiB0aXRsZT0iZ3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50cyI+Ci08bGluayByZWw9InByZXYiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy14aW1hZ2VzcmMuaHRtbCIgdGl0bGU9InhpbWFnZXNyYyI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDIuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgUGx1Z2lucyI+Ci08bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkdUSy1Eb2MgVjEuMjUgKFhNTCBtb2RlKSI+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgotPC9oZWFkPgotPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgotPHRhYmxlIGNsYXNzPSJuYXZpZ2F0aW9uIiBpZD0idG9wIiB3aWR0aD0iMTAwJSIgc3VtbWFyeT0iTmF2aWdhdGlvbiBoZWFkZXIiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iNSI+PHRyIHZhbGlnbj0ibWlkZGxlIj4KLTx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJzaG9ydGN1dHMiPgotPGEgaHJlZj0iIyIgY2xhc3M9InNob3J0Y3V0Ij5Ub3A8L2E+PHNwYW4gaWQ9Im5hdl9kZXNjcmlwdGlvbiI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLmRlc2NyaXB0aW9uIiBjbGFzcz0ic2hvcnRjdXQiPkRlc2NyaXB0aW9uPC9hPjwvc3Bhbj48c3BhbiBpZD0ibmF2X2hpZXJhcmNoeSI+wqDCoDxzcGFuIGNsYXNzPSJkaW0iPnw8L3NwYW4+wqAKLSAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLm9iamVjdC1oaWVyYXJjaHkiIGNsYXNzPSJzaG9ydGN1dCI+T2JqZWN0IEhpZXJhcmNoeTwvYT48L3NwYW4+PHNwYW4gaWQ9Im5hdl9pbnRlcmZhY2VzIj7CoMKgPHNwYW4gY2xhc3M9ImRpbSI+fDwvc3Bhbj7CoAotICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2dzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaW1wbGVtZW50ZWQtaW50ZXJmYWNlcyIgY2xhc3M9InNob3J0Y3V0Ij5JbXBsZW1lbnRlZCBJbnRlcmZhY2VzPC9hPjwvc3Bhbj4KLTwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iaG9tZS5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9IkhvbWUiPjwvYT48L3RkPgotPHRkPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY2gwMS5odG1sIj48aW1nIHNyYz0idXAucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGJvcmRlcj0iMCIgYWx0PSJVcCI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJwIiBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwiPjxpbWcgc3JjPSJsZWZ0LnBuZyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBib3JkZXI9IjAiIGFsdD0iUHJldiI+PC9hPjwvdGQ+Ci08dGQ+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJjaDAyLmh0bWwiPjxpbWcgc3JjPSJyaWdodC5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgYm9yZGVyPSIwIiBhbHQ9Ik5leHQiPjwvYT48L3RkPgotPC90cj48L3RhYmxlPgotPGRpdiBjbGFzcz0icmVmZW50cnkiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXk0bWVuYyI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij48dGFibGUgd2lkdGg9IjEwMCUiPjx0cj4KLTx0ZCB2YWxpZ249InRvcCI+Ci08aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMudG9wX29mX3BhZ2UiPjwvYT55NG1lbmM8L3NwYW4+PC9oMj4KLTxwPnk0bWVuYzwvcD4KLTwvdGQ+Ci08dGQgY2xhc3M9ImdhbGxlcnlfaW1hZ2UiIHZhbGlnbj0idG9wIiBhbGlnbj0icmlnaHQiPjwvdGQ+Ci08L3RyPjwvdGFibGU+PC9kaXY+Ci08YSBuYW1lPSJHc3RZNG1FbmNvZGUiPjwvYT48ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLm90aGVyIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJpbmZvcm1hbHRhYmxlIiB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4KLTxjb2xncm91cD4KLTxjb2wgd2lkdGg9IjE1MHB4IiBjbGFzcz0ibmFtZSI+Ci08Y29sIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci08L2NvbGdyb3VwPgotPHRib2R5Pjx0cj4KLTx0ZCBjbGFzcz0iZGF0YXR5cGVfa2V5d29yZCI+c3RydWN0PC90ZD4KLTx0ZCBjbGFzcz0iZnVuY3Rpb25fbmFtZSI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuaHRtbCNHc3RZNG1FbmNvZGUtc3RydWN0IiB0aXRsZT0ic3RydWN0IEdzdFk0bUVuY29kZSI+R3N0WTRtRW5jb2RlPC9hPjwvdGQ+Ci08L3RyPjwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLm9iamVjdC1oaWVyYXJjaHkiPjwvYT48aDI+T2JqZWN0IEhpZXJhcmNoeTwvaDI+Ci08cHJlIGNsYXNzPSJzY3JlZW4iPiAgICA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nb2JqZWN0Z29iamVjdC1UaGUtQmFzZS1PYmplY3QtVHlwZS5odG1sI0dPYmplY3Qtc3RydWN0Ij5HT2JqZWN0PC9hPgotICAgIDxzcGFuIGNsYXNzPSJsaW5lYXJ0Ij7ilbDilIDilIA8L3NwYW4+IDxhIGhyZWY9Ii91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sL2dvYmplY3Rnb2JqZWN0LVRoZS1CYXNlLU9iamVjdC1UeXBlLmh0bWwjR0luaXRpYWxseVVub3duZWQiPkdJbml0aWFsbHlVbm93bmVkPC9hPgotICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3RyZWFtZXItMS4wR3N0T2JqZWN0Lmh0bWwjR3N0T2JqZWN0LXN0cnVjdCI+R3N0T2JqZWN0PC9hPgotICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmVhcnQiPuKVsOKUgOKUgDwvc3Bhbj4gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdEVsZW1lbnQuaHRtbCNHc3RFbGVtZW50LXN0cnVjdCI+R3N0RWxlbWVudDwvYT4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiA8YSBocmVmPSIvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1iYXNlLWxpYnMtMS4wZ3N0LXBsdWdpbnMtYmFzZS1saWJzLUdzdFZpZGVvRW5jb2Rlci5odG1sI0dzdFZpZGVvRW5jb2RlciI+R3N0VmlkZW9FbmNvZGVyPC9hPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGluZWFydCI+4pWw4pSA4pSAPC9zcGFuPiBHc3RZNG1FbmNvZGUKLTwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLmltcGxlbWVudGVkLWludGVyZmFjZXMiPjwvYT48aDI+SW1wbGVtZW50ZWQgSW50ZXJmYWNlczwvaDI+Ci08cD4KLUdzdFk0bUVuY29kZSBpbXBsZW1lbnRzCi0gPGEgaHJlZj0iL3Vzci9zaGFyZS9ndGstZG9jL2h0bWwvZ3N0cmVhbWVyLTEuMEdzdFByZXNldC5odG1sI0dzdFByZXNldC1zdHJ1Y3QiPkdzdFByZXNldDwvYT4uPC9wPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Ci08YSBuYW1lPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteTRtZW5jLmRlc2NyaXB0aW9uIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KLTxkaXYgY2xhc3M9InJlZnNlY3QyIj4KLTxhIG5hbWU9ImlkLTEuMi4yNzAuNy4yIj48L2E+PGgzPkV4YW1wbGUgbGF1bmNoIGxpbmU8L2gzPgotPHA+Ci1DcmVhdGVzIGEgWVU0TVBFRzIgcmF3IHZpZGVvIHN0cmVhbSBhcyBkZWZpbmVkIGJ5IHRoZSBtanBlZ3Rvb2xzIHByb2plY3QuCi08L3A+Ci08cD4KLSh3cml0ZSBldmVyeXRoaW5nIGluIG9uZSBsaW5lLCB3aXRob3V0IHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVycykKLTwvcD4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KLWdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0yNTAgXAotISAndmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0zMjAsaGVpZ2h0PTI0MCxmcmFtZXJhdGU9KGZyYWN0aW9uKTI1LzEnIFwKLSEgeTRtZW5jICEgZmlsZXNpbmsgbG9jYXRpb249dGVzdC55dXYKLTwvcHJlPgotPHA+Ci08L3A+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij4KLTxoMj5TeW5vcHNpczwvaDI+Ci08ZGl2IGNsYXNzPSJyZWZzZWN0MiI+Ci08YSBuYW1lPSJpZC0xLjIuMjcwLjcuMy4xIj48L2E+PGgzPkVsZW1lbnQgSW5mb3JtYXRpb248L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5wbHVnaW48L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+Ci0gICAgICAgICAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi15NG1lbmMuaHRtbCNwbHVnaW4teTRtZW5jIj55NG1lbmM8L2E+Ci0gICAgICAgICAgPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmF1dGhvcjwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5jbGFzczwvc3Bhbj48L3A+PC90ZD4KLTx0ZD5Db2RlYy9FbmNvZGVyL1ZpZGVvPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPGhyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iaWQtMS4yLjI3MC43LjMuMiI+PC9hPjxoMz5FbGVtZW50IFBhZHM8L2gzPgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+ZGlyZWN0aW9uPC9zcGFuPjwvcD48L3RkPgotPHRkPnNpbms8L3RkPgotPC90cj4KLTx0cj4KLTx0ZD48cD48c3BhbiBjbGFzcz0idGVybSI+cHJlc2VuY2U8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+YWx3YXlzPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPmRldGFpbHM8L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSVlVViwgSTQyMCwgWTQyQiwgWTQxQiwgWTQ0NCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L3RkPgotPC90cj4KLTwvdGJvZHk+Ci08L3RhYmxlPjwvZGl2PgotPGRpdiBjbGFzcz0idmFyaWFibGVsaXN0Ij48dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idmFyaWFibGVsaXN0Ij4KLTxjb2xncm91cD4KLTxjb2wgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KLTxjb2w+Ci08L2NvbGdyb3VwPgotPHRib2R5PgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5uYW1lPC9zcGFuPjwvcD48L3RkPgotPHRkPnNyYzwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kaXJlY3Rpb248L3NwYW4+PC9wPjwvdGQ+Ci08dGQ+c291cmNlPC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQ+PHA+PHNwYW4gY2xhc3M9InRlcm0iPnByZXNlbmNlPC9zcGFuPjwvcD48L3RkPgotPHRkPmFsd2F5czwvdGQ+Ci08L3RyPgotPHRyPgotPHRkPjxwPjxzcGFuIGNsYXNzPSJ0ZXJtIj5kZXRhaWxzPC9zcGFuPjwvcD48L3RkPgotPHRkPmFwcGxpY2F0aW9uL3gteXV2NG1wZWcsIHk0bXZlcnNpb249KGludCkyPC90ZD4KLTwvdHI+Ci08L3Rib2R5PgotPC90YWJsZT48L2Rpdj4KLTwvZGl2PgotPC9kaXY+Ci08L2Rpdj4KLTxkaXYgY2xhc3M9InJlZnNlY3QxIj4KLTxhIG5hbWU9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy15NG1lbmMuZnVuY3Rpb25zX2RldGFpbHMiPjwvYT48aDI+RnVuY3Rpb25zPC9oMj4KLTxwPjwvcD4KLTwvZGl2PgotPGRpdiBjbGFzcz0icmVmc2VjdDEiPgotPGEgbmFtZT0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXk0bWVuYy5vdGhlcl9kZXRhaWxzIj48L2E+PGgyPlR5cGVzIGFuZCBWYWx1ZXM8L2gyPgotPGRpdiBjbGFzcz0icmVmc2VjdDIiPgotPGEgbmFtZT0iR3N0WTRtRW5jb2RlLXN0cnVjdCI+PC9hPjxoMz5zdHJ1Y3QgR3N0WTRtRW5jb2RlPC9oMz4KLTxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj5zdHJ1Y3QgR3N0WTRtRW5jb2RlOzwvcHJlPgotPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgotPGRpdiBjbGFzcz0iZm9vdGVyIj4KLTxocj5HZW5lcmF0ZWQgYnkgR1RLLURvYyBWMS4yNTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2hvbWUucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvaG9tZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5ODlkNDYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvaG9tZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9pbmRleC5odG1sIGIvZG9jcy9wbHVnaW5zL2h0bWwvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMzODYwYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA0NiArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08dGl0bGU+R1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgUGx1Z2lucyBSZWZlcmVuY2UgTWFudWFsOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3RpdGxlPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OS4xIj4KLTxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkdTdHJlYW1lciBHb29kIFBsdWdpbnMgMS4wIFBsdWdpbnMgUmVmZXJlbmNlIE1hbnVhbCI+Ci08bGluayByZWw9Im5leHQiIGhyZWY9ImNoMDEuaHRtbCIgdGl0bGU9ImdzdC1wbHVnaW5zLWdvb2QgRWxlbWVudHMiPgotPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJHVEstRG9jIFYxLjI1IChYTUwgbW9kZSkiPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KLTxkaXYgY2xhc3M9ImJvb2siPgotPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KLTxkaXY+Ci08ZGl2Pjx0YWJsZSBjbGFzcz0ibmF2aWdhdGlvbiIgaWQ9InRvcCIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0aCB2YWxpZ249Im1pZGRsZSI+PHAgY2xhc3M9InRpdGxlIj5HU3RyZWFtZXIgR29vZCBQbHVnaW5zIDEuMCBQbHVnaW5zIFJlZmVyZW5jZSBNYW51YWw8L3A+PC90aD48L3RyPjwvdGFibGU+PC9kaXY+Ci08ZGl2PjxwIGNsYXNzPSJyZWxlYXNlaW5mbyI+Ci0gICAgICBmb3IgR1N0cmVhbWVyIEdvb2QgUGx1Z2lucyAxLjAgKDEuMTAuNCkKLSAgICAgIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIG9uLWxpbmUgYXQKLSAgICAgIDxhIGNsYXNzPSJ1bGluayIgaHJlZj0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZGF0YS9kb2MvZ3N0cmVhbWVyL2hlYWQvZ3N0LXBsdWdpbnMtZ29vZC9odG1sLyIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9kYXRhL2RvYy9nc3RyZWFtZXIvaGVhZC9nc3QtcGx1Z2lucy1nb29kL2h0bWwvPC9hPi4KLSAgICA8L3A+PC9kaXY+Ci08L2Rpdj4KLTxocj4KLTwvZGl2PgotPGRpdiBjbGFzcz0idG9jIj48ZGwgY2xhc3M9InRvYyI+Ci08ZHQ+PHNwYW4gY2xhc3M9ImNoYXB0ZXIiPjxhIGhyZWY9ImNoMDEuaHRtbCI+Z3N0LXBsdWdpbnMtZ29vZCBFbGVtZW50czwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLTNncHBtdXguaHRtbCI+M2dwcG11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTXV4ZXIgZm9yIDNHUFAgKC4zZ3ApIGZpbGVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWFjcGFyc2UuaHRtbCI+YWFjcGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFBQyBwYXJzZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hYXNpbmsuaHRtbCI+YWFzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYWMzcGFyc2UuaHRtbCI+YWMzcGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFDMyBwYXJzZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hZ2luZ3R2Lmh0bWwiPmFnaW5ndHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZGVjLmh0bWwiPmFsYXdkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbGF3ZW5jLmh0bWwiPmFsYXdlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYWNvbG9yLmh0bWwiPmFscGhhY29sb3I8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hbHBoYS5odG1sIj5hbHBoYTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFtcnBhcnNlLmh0bWwiPmFtcnBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBTVIgcGFyc2VyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXBlZGVtdXguaHRtbCI+YXBlZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hcGV2Mm11eC5odG1sIj5hcGV2Mm11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWFzcGVjdHJhdGlvY3JvcC5odG1sIj5hc3BlY3RyYXRpb2Nyb3A8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hc3Rlcmlza2gyNjMuaHRtbCI+YXN0ZXJpc2toMjYzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9hbXBsaWZ5Lmh0bWwiPmF1ZGlvYW1wbGlmeTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmJhbmQuaHRtbCI+YXVkaW9jaGViYmFuZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvY2hlYmxpbWl0Lmh0bWwiPmF1ZGlvY2hlYmxpbWl0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9keW5hbWljLmh0bWwiPmF1ZGlvZHluYW1pYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvZWNoby5odG1sIj5hdWRpb2VjaG88L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2ZpcmZpbHRlci5odG1sIj5hdWRpb2ZpcmZpbHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1ZGlvaWlyZmlsdGVyLmh0bWwiPmF1ZGlvaWlyZmlsdGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9pbnZlcnQuaHRtbCI+YXVkaW9pbnZlcnQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb2thcmFva2UuaHRtbCI+YXVkaW9rYXJhb2tlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW9wYW5vcmFtYS5odG1sIj5hdWRpb3Bhbm9yYW1hPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVkaW93c2luY2JhbmQuaHRtbCI+YXVkaW93c2luY2JhbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdWRpb3dzaW5jbGltaXQuaHRtbCI+YXVkaW93c2luY2xpbWl0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXVwYXJzZS5odG1sIj5hdXBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc2luay5odG1sIj5hdXRvYXVkaW9zaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtYXV0b2F1ZGlvc3JjLmh0bWwiPmF1dG9hdWRpb3NyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NpbmsuaHRtbCI+YXV0b3ZpZGVvc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF1dG92aWRlb3NyYy5odG1sIj5hdXRvdmlkZW9zcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlkZW11eC5odG1sIj5hdmlkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWF2aW11eC5odG1sIj5hdmltdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1hdmlzdWJ0aXRsZS5odG1sIj5hdmlzdWJ0aXRsZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWJyZWFrbXlkYXRhLmh0bWwiPmJyZWFrbXlkYXRhPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2FjYXNpbmsuaHRtbCI+Y2FjYXNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1jYWlyb292ZXJsYXkuaHRtbCI+Y2Fpcm9vdmVybGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY2Fwc3NldHRlci5odG1sIj5jYXBzc2V0dGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtY3B1cmVwb3J0Lmh0bWwiPmNwdXJlcG9ydDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWN1dHRlci5odG1sIj5jdXR0ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kY2FwYXJzZS5odG1sIj5kY2FwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRENBIChEVFMgQ29oZXJlbnQgQWNvdXN0aWNzKSBwYXJzZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kZWludGVybGFjZS5odG1sIj5kZWludGVybGFjZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWRlaW50ZXJsZWF2ZS5odG1sIj5kZWludGVybGVhdmU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kaWNldHYuaHRtbCI+ZGljZXR2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZGlyZWN0c291bmRzaW5rLmh0bWwiPmRpcmVjdHNvdW5kc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR0bWZzcmMuaHRtbCI+ZHRtZnNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2MTM5NHNyYy5odG1sIj5kdjEzOTRzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1kdmRlYy5odG1sIj5kdmRlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR2ZGVtdXguaHRtbCI+ZHZkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWR5bnVkcHNpbmsuaHRtbCI+ZHludWRwc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVkZ2V0di5odG1sIj5lZGdldHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1lcXVhbGl6ZXItMTBiYW5kcy5odG1sIj5lcXVhbGl6ZXItMTBiYW5kczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci0zYmFuZHMuaHRtbCI+ZXF1YWxpemVyLTNiYW5kczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWVxdWFsaXplci1uYmFuZHMuaHRtbCI+ZXF1YWxpemVyLW5iYW5kczwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNkZWMuaHRtbCI+ZmxhY2RlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNlbmMuaHRtbCI+ZmxhY2VuYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsYWNwYXJzZS5odG1sIj5mbGFjcGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbGFjdGFnLmh0bWwiPmZsYWN0YWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHZkZW11eC5odG1sIj5mbHZkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWZsdm11eC5odG1sIj5mbHZtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1mbHhkZWMuaHRtbCI+Zmx4ZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2FtbWEuaHRtbCI+Z2FtbWE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1nZGtwaXhidWZkZWMuaHRtbCI+Z2RrcGl4YnVmZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmb3ZlcmxheS5odG1sIj5nZGtwaXhidWZvdmVybGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ2RrcGl4YnVmc2luay5odG1sIj5nZGtwaXhidWZzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbTJrMS5odG1sIj5nb29tMmsxPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtZ29vbS5odG1sIj5nb29tPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaGR2MTM5NHNyYy5odG1sIj5oZHYxMzk0c3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWN5ZGVtdXguaHRtbCI+aWN5ZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1pZDNkZW11eC5odG1sIj5pZDNkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWlkM3YybXV4Lmh0bWwiPmlkM3YybXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaWlyZXF1YWxpemVyLmh0bWwiPmlpcmVxdWFsaXplcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLWltYWdlZnJlZXplLmh0bWwiPmltYWdlZnJlZXplPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaW50ZXJsZWF2ZS5odG1sIj5pbnRlcmxlYXZlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtaXNtbG11eC5odG1sIj5pc21sbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNdXhlciBmb3IgSVNNTCBzbW9vdGggc3RyZWFtaW5nICguaXNtbCkgZmlsZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zaW5rLmh0bWwiPmphY2thdWRpb3Npbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1qYWNrYXVkaW9zcmMuaHRtbCI+amFja2F1ZGlvc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2RlYy5odG1sIj5qcGVnZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtanBlZ2VuYy5odG1sIj5qcGVnZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbGV2ZWwuaHRtbCI+bGV2ZWw8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYWRlbXV4Lmh0bWwiPm1hdHJvc2thZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tYXRyb3NrYW11eC5odG1sIj5tYXRyb3NrYW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1hdHJvc2thcGFyc2UuaHRtbCI+bWF0cm9za2FwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1qMm11eC5odG1sIj5tajJtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE11eGVyIGZvciBNb3Rpb24gSlBFRy0yMDAwICgubWoyKSBmaWxlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW1vbm9zY29wZS5odG1sIj5tb25vc2NvcGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcDRtdXguaHRtbCI+bXA0bXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNdXhlciBmb3IgSVNPIE1QRUctNCAoLm1wNCkgZmlsZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tcGVnYXVkaW9wYXJzZS5odG1sIj5tcGVnYXVkaW9wYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTVBFRyBhdWRpbyBwYXJzZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1tdWxhd2RlYy5odG1sIj5tdWxhd2RlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bGF3ZW5jLmh0bWwiPm11bGF3ZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc2luay5odG1sIj5tdWx0aWZpbGVzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlmaWxlc3JjLmh0bWwiPm11bHRpZmlsZXNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpcGFydGRlbXV4Lmh0bWwiPm11bHRpcGFydGRlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtbXVsdGlwYXJ0bXV4Lmh0bWwiPm11bHRpcGFydG11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW11bHRpdWRwc2luay5odG1sIj5tdWx0aXVkcHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1uYXZpZ2F0aW9udGVzdC5odG1sIj5uYXZpZ2F0aW9udGVzdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW5hdnNlZWsuaHRtbCI+bmF2c2VlazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9wdHYuaHRtbCI+b3B0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zczRzaW5rLmh0bWwiPm9zczRzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3NzNHNyYy5odG1sIj5vc3M0c3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc2luay5odG1sIj5vc3NzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtb3Nzc3JjLmh0bWwiPm9zc3NyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeGF1ZGlvc2luay5odG1sIj5vc3hhdWRpb3Npbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1vc3hhdWRpb3NyYy5odG1sIj5vc3hhdWRpb3NyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLW9zeHZpZGVvc2luay5odG1sIj5vc3h2aWRlb3Npbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbmdkZWMuaHRtbCI+cG5nZGVjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcG5nZW5jLmh0bWwiPnBuZ2VuYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXByb2dyZXNzcmVwb3J0Lmh0bWwiPnByb2dyZXNzcmVwb3J0PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVsc2VzaW5rLmh0bWwiPnB1bHNlc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXB1bHNlc3JjLmh0bWwiPnB1bHNlc3JjPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcHVzaGZpbGVzcmMuaHRtbCI+cHVzaGZpbGVzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdGRlbXV4Lmh0bWwiPnF0ZGVtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1xdG1vb3ZyZWNvdmVyLmh0bWwiPnF0bW9vdnJlY292ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFV0aWxpdHkgZWxlbWVudCBmb3IgcmVjb3ZlcmluZyB1bmZpbmlzaGVkIHF1aWNrdGltZSBmaWxlczwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXF0bXV4Lmh0bWwiPnF0bXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNdXhlciBmb3IgcXVpY2t0aW1lKC5tb3YpIGZpbGVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcXVhcmt0di5odG1sIj5xdWFya3R2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmFkaW9hY3R2Lmh0bWwiPnJhZGlvYWN0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJldnR2Lmh0bWwiPnJldnR2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdhbmFseXNpcy5odG1sIj5yZ2FuYWx5c2lzPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmdsaW1pdGVyLmh0bWwiPnJnbGltaXRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJndm9sdW1lLmh0bWwiPnJndm9sdW1lPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcmlwcGxldHYuaHRtbCI+cmlwcGxldHY8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ybmRidWZmZXJzaXplLmh0bWwiPnJuZGJ1ZmZlcnNpemU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhYzNkZXBheS5odG1sIj5ydHBhYzNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFjM3BheS5odG1sIj5ydHBhYzNwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBhbXJkZXBheS5odG1sIj5ydHBhbXJkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGFtcnBheS5odG1sIj5ydHBhbXJwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBiaW4uaHRtbCI+cnRwYmluPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZkZXBheS5odG1sIj5ydHBidmRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwYnZwYXkuaHRtbCI+cnRwYnZwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBjZWx0ZGVwYXkuaHRtbCI+cnRwY2VsdGRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwY2VsdHBheS5odG1sIj5ydHBjZWx0cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZGVjLmh0bWwiPnJ0cGRlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGR0bWZkZXBheS5odG1sIj5ydHBkdG1mZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mbXV4Lmh0bWwiPnJ0cGR0bWZtdXg8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdG1mc3JjLmh0bWwiPnJ0cGR0bWZzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdmRlcGF5Lmh0bWwiPnJ0cGR2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBkdnBheS5odG1sIj5ydHBkdnBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjJkZXBheS5odG1sIj5ydHBnNzIyZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIycGF5Lmh0bWwiPnJ0cGc3MjJwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzIzZGVwYXkuaHRtbCI+cnRwZzcyM2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyM3BheS5odG1sIj5ydHBnNzIzcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwZzcyNmRlcGF5Lmh0bWwiPnJ0cGc3MjZkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjZwYXkuaHRtbCI+cnRwZzcyNnBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGc3MjlkZXBheS5odG1sIj5ydHBnNzI5ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnNzI5cGF5Lmh0bWwiPnJ0cGc3MjlwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc21kZXBheS5odG1sIj5ydHBnc21kZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzbXBheS5odG1sIj5ydHBnc21wYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBnc3RkZXBheS5odG1sIj5ydHBnc3RkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGdzdHBheS5odG1sIj5ydHBnc3RwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjYxZGVwYXkuaHRtbCI+cnRwaDI2MWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2MXBheS5odG1sIj5ydHBoMjYxcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2M2RlcGF5Lmh0bWwiPnJ0cGgyNjNkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwYXkuaHRtbCI+cnRwaDI2M3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwZGVwYXkuaHRtbCI+cnRwaDI2M3BkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjNwcGF5Lmh0bWwiPnJ0cGgyNjNwcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaDI2NGRlcGF5Lmh0bWwiPnJ0cGgyNjRkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjRwYXkuaHRtbCI+cnRwaDI2NHBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGgyNjVkZXBheS5odG1sIj5ydHBoMjY1ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBoMjY1cGF5Lmh0bWwiPnJ0cGgyNjVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBpbGJjZGVwYXkuaHRtbCI+cnRwaWxiY2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaWxiY3BheS5odG1sIj5ydHBpbGJjcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwajJrZGVwYXkuaHRtbCI+cnRwajJrZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqMmtwYXkuaHRtbCI+cnRwajJrcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwaml0dGVyYnVmZmVyLmh0bWwiPnJ0cGppdHRlcmJ1ZmZlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGpwZWdkZXBheS5odG1sIj5ydHBqcGVnZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBqcGVncGF5Lmh0bWwiPnJ0cGpwZWdwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBrbHZkZXBheS5odG1sIj5ydHBrbHZkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cGtsdnBheS5odG1sIj5ydHBrbHZwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMTZkZXBheS5odG1sIj5ydHBMMTZkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwxNnBheS5odG1sIj5ydHBMMTZwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBMMjRkZXBheS5odG1sIj5ydHBMMjRkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cEwyNHBheS5odG1sIj5ydHBMMjRwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDFzZGVwYXkuaHRtbCI+cnRwbXAxc2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXAydGRlcGF5Lmh0bWwiPnJ0cG1wMnRkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wMnRwYXkuaHRtbCI+cnRwbXAydHBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNGFkZXBheS5odG1sIj5ydHBtcDRhZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRhcGF5Lmh0bWwiPnJ0cG1wNGFwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcDRnZGVwYXkuaHRtbCI+cnRwbXA0Z2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0Z3BheS5odG1sIj5ydHBtcDRncGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXA0dmRlcGF5Lmh0bWwiPnJ0cG1wNHZkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wNHZwYXkuaHRtbCI+cnRwbXA0dnBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYWRlcGF5Lmh0bWwiPnJ0cG1wYWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXBhcGF5Lmh0bWwiPnJ0cG1wYXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG1wYXJvYnVzdGRlcGF5Lmh0bWwiPnJ0cG1wYXJvYnVzdGRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXB2ZGVwYXkuaHRtbCI+cnRwbXB2ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBtcHZwYXkuaHRtbCI+cnRwbXB2cGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwbXV4Lmh0bWwiPnJ0cG11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cG9wdXNkZXBheS5odG1sIj5ydHBvcHVzZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBvcHVzcGF5Lmh0bWwiPnJ0cG9wdXNwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBwY21hZGVwYXkuaHRtbCI+cnRwcGNtYWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtYXBheS5odG1sIj5ydHBwY21hcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwcGNtdWRlcGF5Lmh0bWwiPnJ0cHBjbXVkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHBjbXVwYXkuaHRtbCI+cnRwcGNtdXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHB0ZGVtdXguaHRtbCI+cnRwcHRkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFjZWxwZGVwYXkuaHRtbCI+cnRwcWNlbHBkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHFkbTJkZXBheS5odG1sIj5ydHBxZG0yZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBydHhxdWV1ZS5odG1sIj5ydHBydHhxdWV1ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHJlY2VpdmUuaHRtbCI+cnRwcnR4cmVjZWl2ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHJ0eHNlbmQuaHRtbCI+cnRwcnR4c2VuZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNiY2RlcGF5Lmh0bWwiPnJ0cHNiY2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc2JjcGF5Lmh0bWwiPnJ0cHNiY3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNlc3Npb24uaHRtbCI+cnRwc2Vzc2lvbjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVuZGVwYXkuaHRtbCI+cnRwc2lyZW5kZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHNpcmVucGF5Lmh0bWwiPnJ0cHNpcmVucGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhkZXBheS5odG1sIj5ydHBzcGVleGRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3BlZXhwYXkuaHRtbCI+cnRwc3BlZXhwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzc3JjZGVtdXguaHRtbCI+cnRwc3NyY2RlbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3RyZWFtZGVwYXkuaHRtbCI+cnRwc3RyZWFtZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHBzdHJlYW1wYXkuaHRtbCI+cnRwc3RyZWFtcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwc3YzdmRlcGF5Lmh0bWwiPnJ0cHN2M3ZkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHRoZW9yYWRlcGF5Lmh0bWwiPnJ0cHRoZW9yYWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdGhlb3JhcGF5Lmh0bWwiPnJ0cHRoZW9yYXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZvcmJpc2RlcGF5Lmh0bWwiPnJ0cHZvcmJpc2RlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdm9yYmlzcGF5Lmh0bWwiPnJ0cHZvcmJpc3BheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOGRlcGF5Lmh0bWwiPnJ0cHZwOGRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA4cGF5Lmh0bWwiPnJ0cHZwOHBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZwOWRlcGF5Lmh0bWwiPnJ0cHZwOWRlcGF5PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcnRwdnA5cGF5Lmh0bWwiPnJ0cHZwOXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0cHZyYXdkZXBheS5odG1sIj5ydHB2cmF3ZGVwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB2cmF3cGF5Lmh0bWwiPnJ0cHZyYXdwYXk8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1ydHB4cXRkZXBheS5odG1sIj5ydHB4cXRkZXBheTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXJ0c3BzcmMuaHRtbCI+cnRzcHNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNiY3BhcnNlLmh0bWwiPnNiY3BhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2NhbGV0ZW1wby5odG1sIj5zY2FsZXRlbXBvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc2hhZ2FkZWxpY3R2Lmh0bWwiPnNoYWdhZGVsaWN0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNoYXBld2lwZS5odG1sIj5zaGFwZXdpcGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zaG91dDJzZW5kLmh0bWwiPnNob3V0MnNlbmQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZWFscGhhLmh0bWwiPnNtcHRlYWxwaGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zbXB0ZS5odG1sIj5zbXB0ZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNvdXBodHRwY2xpZW50c2luay5odG1sIj5zb3VwaHR0cGNsaWVudHNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zb3VwaHR0cHNyYy5odG1sIj5zb3VwaHR0cHNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwZWN0cnVtLmh0bWwiPnNwZWN0cnVtPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtc3BlZXhkZWMuaHRtbCI+c3BlZXhkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGVleGVuYy5odG1sIj5zcGVleGVuYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXNwbGl0ZmlsZXNyYy5odG1sIj5zcGxpdGZpbGVzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNpbmsuaHRtbCI+c3BsaXRtdXhzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNdXhlciB3cmFwcGVyIGZvciBzcGxpdHRpbmcgb3V0cHV0IHN0cmVhbSBieSBzaXplIG9yIHRpbWU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zcGxpdG11eHNyYy5odG1sIj5zcGxpdG11eHNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU3BsaXQgRGVtdXhlciBiaW4gdGhhdCByZWNvbWJpbmVzIGZpbGVzIGNyZWF0ZWQgYnkKLXRoZSBzcGxpdG11eHNpbmsgZWxlbWVudC48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1zdHJlYWt0di5odG1sIj5zdHJlYWt0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXRhZ2luamVjdC5odG1sIj50YWdpbmplY3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy10ZXN0c2luay5odG1sIj50ZXN0c2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNpbmsuaHRtbCI+dWRwc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXVkcHNyYy5odG1sIj51ZHBzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwycmFkaW8uaHRtbCI+djRsMnJhZGlvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdjRsMnNpbmsuaHRtbCI+djRsMnNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12NGwyc3JjLmh0bWwiPnY0bDJzcmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12ZXJ0aWdvdHYuaHRtbCI+dmVydGlnb3R2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9iYWxhbmNlLmh0bWwiPnZpZGVvYmFsYW5jZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvYm94Lmh0bWwiPnZpZGVvYm94PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdmlkZW9jcm9wLmh0bWwiPnZpZGVvY3JvcDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvZmxpcC5odG1sIj52aWRlb2ZsaXA8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12aWRlb21lZGlhbi5odG1sIj52aWRlb21lZGlhbjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZpZGVvbWl4ZXIuaHRtbCI+dmlkZW9taXhlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOGRlYy5odG1sIj52cDhkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy12cDhlbmMuaHRtbCI+dnA4ZW5jPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtdnA5ZGVjLmh0bWwiPnZwOWRlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXZwOWVuYy5odG1sIj52cDllbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXJwdHYuaHRtbCI+d2FycHR2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2F2ZWZvcm1zaW5rLmh0bWwiPndhdmVmb3Jtc2luazwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdmVuYy5odG1sIj53YXZlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZGVjLmh0bWwiPndhdnBhY2tkZWM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrZW5jLmh0bWwiPndhdnBhY2tlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy13YXZwYWNrcGFyc2UuaHRtbCI+d2F2cGFja3BhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBXYXZwYWNrIHBhcnNlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXdhdnBhcnNlLmh0bWwiPndhdnBhcnNlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtd2VibW11eC5odG1sIj53ZWJtbXV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMteGltYWdlc3JjLmh0bWwiPnhpbWFnZXNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXk0bWVuYy5odG1sIj55NG1lbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj48L3NwYW4+Ci08L2R0PgotPC9kbD48L2RkPgotPGR0PjxzcGFuIGNsYXNzPSJjaGFwdGVyIj48YSBocmVmPSJjaDAyLmh0bWwiPmdzdC1wbHVnaW5zLWdvb2QgUGx1Z2luczwvYT48L3NwYW4+PC9kdD4KLTxkZD48ZGw+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi0xMzk0Lmh0bWwiPjEzOTQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFNvdXJjZSBmb3IgdmlkZW8gZGF0YSB2aWEgSUVFRTEzOTQgaW50ZXJmYWNlPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFhc2luay5odG1sIj5hYXNpbms8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFTQ0lJIEFydCB2aWRlbyBzaW5rPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFsYXcuaHRtbCI+YWxhdzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQUxhdyBhdWRpbyBjb252ZXJzaW9uIHJvdXRpbmVzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFscGhhY29sb3IuaHRtbCI+YWxwaGFjb2xvcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUkdCQSBmcm9tL3RvIEFZVVYgY29sb3JzcGFjZSBjb252ZXJzaW9uIHByZXNlcnZpbmcgdGhlIGFscGhhIGNoYW5uZWw8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tYWxwaGEuaHRtbCI+YWxwaGE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGFkZHMgYW4gYWxwaGEgY2hhbm5lbCB0byB2aWRlbyAtIGNvbnN0YW50IG9yIHZpYSBjaHJvbWEta2V5aW5nPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWFwZXRhZy5odG1sIj5hcGV0YWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFQRXYxLzIgdGFnIHJlYWRlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdWRpb2Z4Lmh0bWwiPmF1ZGlvZng8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEF1ZGlvIGVmZmVjdHMgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1ZGlvcGFyc2Vycy5odG1sIj5hdWRpb3BhcnNlcnM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFBhcnNlcnMgZm9yIHZhcmlvdXMgYXVkaW8gZm9ybWF0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdXBhcnNlLmh0bWwiPmF1cGFyc2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIHBhcnNlcyBhdSBzdHJlYW1zPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWF1dG9kZXRlY3QuaHRtbCI+YXV0b2RldGVjdDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUGx1Z2luIGNvbnRhaW5zIGF1dG8tZGV0ZWN0aW9uIHBsdWdpbnMgZm9yIHZpZGVvL2F1ZGlvIGluLSBhbmQgb3V0cHV0czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1hdmkuaHRtbCI+YXZpPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBVkkgc3RyZWFtIGhhbmRsaW5nPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhY2FzaW5rLmh0bWwiPmNhY2FzaW5rPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDb2xvcmVkIEFTQ0lJIEFydCB2aWRlbyBzaW5rPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWNhaXJvLmh0bWwiPmNhaXJvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDYWlyby1iYXNlZCBlbGVtZW50czwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1jdXR0ZXIuaHRtbCI+Y3V0dGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBdWRpbyBDdXR0ZXIgdG8gc3BsaXQgYXVkaW8gaW50byBub24tc2lsZW50IGJpdHM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVidWcuaHRtbCI+ZGVidWc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIGVsZW1lbnRzIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZGVpbnRlcmxhY2UuaHRtbCI+ZGVpbnRlcmxhY2U8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIERlaW50ZXJsYWNlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1kaXJlY3Rzb3VuZC5odG1sIj5kaXJlY3Rzb3VuZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGlyZWN0U291bmQgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWR0bWYuaHRtbCI+ZHRtZjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRFRNRiBwbHVnaW5zPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWR2Lmh0bWwiPmR2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBEViBkZW11eGVyIGFuZCBkZWNvZGVyIGJhc2VkIG9uIGxpYmR2IChsaWJkdi5zZi5uZXQpPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVmZmVjdHYuaHRtbCI+ZWZmZWN0djwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgZWZmZWN0IHBsdWdpbnMgZnJvbSB0aGUgZWZmZWN0diBwcm9qZWN0PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWVxdWFsaXplci5odG1sIj5lcXVhbGl6ZXI8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdTdHJlYW1lciBhdWRpbyBlcXVhbGl6ZXJzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWZsYWMuaHRtbCI+ZmxhYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVGhlIEZMQUMgTG9zc2xlc3MgY29tcHJlc3NvciBDb2RlYzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1mbHYuaHRtbCI+Zmx2PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBGTFYgbXV4aW5nIGFuZCBkZW11eGluZyBwbHVnaW48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tZmx4ZGVjLmh0bWwiPmZseGRlYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRkxDL0ZMSS9GTFggdmlkZW8gZGVjb2Rlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nZGtwaXhidWYuaHRtbCI+Z2RrcGl4YnVmPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBHZGtQaXhidWYtYmFzZWQgaW1hZ2UgZGVjb2Rlciwgb3ZlcmxheSBhbmQgc2luazwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1nb29tMmsxLmh0bWwiPmdvb20yazE8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEdPT00gMmsxIHZpc3VhbGl6YXRpb24gZmlsdGVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWdvb20uaHRtbCI+Z29vbTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgR09PTSB2aXN1YWxpemF0aW9uIGZpbHRlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pY3lkZW11eC5odG1sIj5pY3lkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGVtdXggSUNZIHRhZ3MgZnJvbSBhIHN0cmVhbTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1pZDNkZW11eC5odG1sIj5pZDNkZW11eDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgRGVtdXggSUQzdjEgYW5kIElEM3YyIHRhZ3MgZnJvbSBhIGZpbGU8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW1hZ2VmcmVlemUuaHRtbCI+aW1hZ2VmcmVlemU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFN0aWxsIGZyYW1lIHN0cmVhbSBnZW5lcmF0b3I8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4taW50ZXJsZWF2ZS5odG1sIj5pbnRlcmxlYXZlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBBdWRpbyBpbnRlcmxlYXZlci9kZWludGVybGVhdmVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWlzb21wNC5odG1sIj5pc29tcDQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIElTTyBiYXNlIG1lZGlhIGZpbGUgZm9ybWF0IHN1cHBvcnQgKG1wNCwgM2dwcCwgcXQsIG1qMik8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tamFjay5odG1sIj5qYWNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBKQUNLIGF1ZGlvIGVsZW1lbnRzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLWpwZWcuaHRtbCI+anBlZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgSlBlZyBwbHVnaW4gbGlicmFyeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1sZXZlbC5odG1sIj5sZXZlbDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgQXVkaW8gbGV2ZWwgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW1hdHJvc2thLmh0bWwiPm1hdHJvc2thPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBNYXRyb3NrYSBhbmQgV2ViTSBzdHJlYW0gaGFuZGxpbmc8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbW9ub3Njb3BlLmh0bWwiPm1vbm9zY29wZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgTW9ub3Njb3BlIHZpc3VhbGl6YXRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsYXcuaHRtbCI+bXVsYXc8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE11TGF3IGF1ZGlvIGNvbnZlcnNpb24gcm91dGluZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlmaWxlLmh0bWwiPm11bHRpZmlsZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUmVhZHMvV3JpdGVzIGJ1ZmZlcnMgZnJvbS90byBzZXF1ZW50aWFsbHkgbmFtZWQgZmlsZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbXVsdGlwYXJ0Lmh0bWwiPm11bHRpcGFydDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgbXVsdGlwYXJ0IHN0cmVhbSBtYW5pcHVsYXRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tbmF2aWdhdGlvbnRlc3QuaHRtbCI+bmF2aWdhdGlvbnRlc3Q8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFRlbXBsYXRlIGZvciBhIHZpZGVvIGZpbHRlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3M0Lmh0bWwiPm9zczQ8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE9wZW4gU291bmQgU3lzdGVtIChPU1MpIHZlcnNpb24gNCBzdXBwb3J0IGZvciBHU3RyZWFtZXI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tb3NzYXVkaW8uaHRtbCI+b3NzYXVkaW88L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIE9TUyAoT3BlbiBTb3VuZCBTeXN0ZW0pIHN1cHBvcnQgZm9yIEdTdHJlYW1lcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1vc3hhdWRpby5odG1sIj5vc3hhdWRpbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgT1NYIChNYWMgT1MgWCkgYXVkaW8gc3VwcG9ydCBmb3IgR1N0cmVhbWVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLW9zeHZpZGVvLmh0bWwiPm9zeHZpZGVvPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBPU1ggbmF0aXZlIHZpZGVvIG91dHB1dCBwbHVnaW48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcG5nLmh0bWwiPnBuZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUE5HIHBsdWdpbiBsaWJyYXJ5PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXB1bHNlYXVkaW8uaHRtbCI+cHVsc2VhdWRpbzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUHVsc2VBdWRpbyBwbHVnaW4gbGlicmFyeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1yZXBsYXlnYWluLmh0bWwiPnJlcGxheWdhaW48L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlcGxheUdhaW4gdm9sdW1lIG5vcm1hbGl6YXRpb248L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tcnRwbWFuYWdlci5odG1sIj5ydHBtYW5hZ2VyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSVFAgc2Vzc2lvbiBtYW5hZ2VtZW50IHBsdWdpbiBsaWJyYXJ5PC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0cC5odG1sIj5ydHA8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIFJlYWwtdGltZSBwcm90b2NvbCBwbHVnaW5zPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXJ0c3AuaHRtbCI+cnRzcDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgdHJhbnNmZXIgZGF0YSB2aWEgUlRTUDwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi1zaGFwZXdpcGUuaHRtbCI+c2hhcGV3aXBlPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTaGFwZSBXaXBlIHRyYW5zaXRpb24gZmlsdGVyPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNob3V0MnNlbmQuaHRtbCI+c2hvdXQyc2VuZDwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgU2VuZHMgZGF0YSB0byBhbiBpY2VjYXN0IHNlcnZlciB1c2luZyBsaWJzaG91dDI8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc21wdGUuaHRtbCI+c21wdGU8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEFwcGx5IHRoZSBzdGFuZGFyZCBTTVBURSB0cmFuc2l0aW9ucyBvbiB2aWRlbyBpbWFnZXM8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tc291cC5odG1sIj5zb3VwPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBsaWJzb3VwIEhUVFAgY2xpZW50IHNyYy9zaW5rPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWN0cnVtLmh0bWwiPnNwZWN0cnVtPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBSdW4gYW4gRkZUIG9uIHRoZSBhdWRpbyBzaWduYWwsIG91dHB1dCBzcGVjdHJ1bSBkYXRhPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXNwZWV4Lmh0bWwiPnNwZWV4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBTcGVleCBwbHVnaW4gbGlicmFyeTwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi10YWdsaWIuaHRtbCI+dGFnbGliPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBUYWcgd3JpdGluZyBwbHVnLWluIGJhc2VkIG9uIHRhZ2xpYjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi11ZHAuaHRtbCI+dWRwPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCB0cmFuc2ZlciBkYXRhIHZpYSBVRFA8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW80bGludXgyLmh0bWwiPnZpZGVvNGxpbnV4MjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgZWxlbWVudHMgZm9yIFZpZGVvIDQgTGludXg8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9ib3guaHRtbCI+dmlkZW9ib3g8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIHJlc2l6ZXMgYSB2aWRlbyBieSBhZGRpbmcgYm9yZGVycyBvciBjcm9wcGluZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2Nyb3AuaHRtbCI+dmlkZW9jcm9wPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBDcm9wcyB2aWRlbyBpbnRvIGEgdXNlci1kZWZpbmVkIHJlZ2lvbjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12aWRlb2ZpbHRlci5odG1sIj52aWRlb2ZpbHRlcjwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgVmlkZW8gZmlsdGVycyBwbHVnaW48L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4tdmlkZW9taXhlci5odG1sIj52aWRlb21peGVyPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBWaWRlbyBtaXhlcjwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi12cHguaHRtbCI+dnB4PC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBWUDggcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdmVmb3JtLmh0bWwiPndhdmVmb3JtPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBXYXZlRm9ybSBBUEkgYmFzZWQgcGx1Z2luPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXdhdmVuYy5odG1sIj53YXZlbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVuY29kZSByYXcgYXVkaW8gaW50byBXQVY8L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4td2F2cGFjay5odG1sIj53YXZwYWNrPC9hPjwvc3Bhbj48c3BhbiBjbGFzcz0icmVmcHVycG9zZSI+IOKAlCBXYXZwYWNrIGxvc3NsZXNzL2xvc3N5IGF1ZGlvIGZvcm1hdCBoYW5kbGluZzwvc3Bhbj4KLTwvZHQ+Ci08ZHQ+Ci08c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+PGEgaHJlZj0iZ3N0LXBsdWdpbnMtZ29vZC1wbHVnaW5zLXBsdWdpbi13YXZwYXJzZS5odG1sIj53YXZwYXJzZTwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgUGFyc2UgYSAud2F2IGZpbGUgaW50byByYXcgYXVkaW88L3NwYW4+Ci08L2R0PgotPGR0PgotPHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPjxhIGhyZWY9ImdzdC1wbHVnaW5zLWdvb2QtcGx1Z2lucy1wbHVnaW4teGltYWdlc3JjLmh0bWwiPnhpbWFnZXNyYzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9InJlZnB1cnBvc2UiPiDigJQgWDExIHZpZGVvIGlucHV0IHBsdWdpbiB1c2luZyBzdGFuZGFyZCBYbGliIGNhbGxzPC9zcGFuPgotPC9kdD4KLTxkdD4KLTxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj48YSBocmVmPSJnc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtcGx1Z2luLXk0bWVuYy5odG1sIj55NG1lbmM8L2E+PC9zcGFuPjxzcGFuIGNsYXNzPSJyZWZwdXJwb3NlIj4g4oCUIEVuY29kZXMgYSBZVVYgZnJhbWUgaW50byB0aGUgeXV2NG1wZWcgZm9ybWF0IChtanBlZ3Rvb2xzKTwvc3Bhbj4KLTwvZHQ+Ci08L2RsPjwvZGQ+Ci08L2RsPjwvZGl2PgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJmb290ZXIiPgotPGhyPkdlbmVyYXRlZCBieSBHVEstRG9jIFYxLjI1PC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC1pbnNlbnNpdGl2ZS5wbmcgYi9kb2NzL3BsdWdpbnMvaHRtbC9sZWZ0LWluc2Vuc2l0aXZlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjExNDhmYi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9sZWZ0LWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL2xlZnQucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNjQ5MTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvbGVmdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaHRtbC9yaWdodC1pbnNlbnNpdGl2ZS5wbmcgYi9kb2NzL3BsdWdpbnMvaHRtbC9yaWdodC1pbnNlbnNpdGl2ZS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZWZhMjcuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQtaW5zZW5zaXRpdmUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvcmlnaHQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzM2MWE2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL3JpZ2h0LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3N0eWxlLmNzcyBiL2RvY3MvcGx1Z2lucy9odG1sL3N0eWxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3NTQyMC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC9zdHlsZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotYm9keQotewotICBmb250LWZhbWlseTogY2FudGFyZWxsLCBzYW5zLXNlcmlmOwotfQotLnN5bm9wc2lzLCAuY2xhc3NzeW5vcHNpcwotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMS8yICovCi0gIGJhY2tncm91bmQ6ICNlZWVlZWM7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMjM4LCAyMzgsIDIzNiwgMC41KTsKLSAgYm9yZGVyOiBzb2xpZCAxcHggcmdiKDIzOCwgMjM4LCAyMzYpOwotICBwYWRkaW5nOiAwLjVlbTsKLX0KLS5wcm9ncmFtbGlzdGluZwotewotICAvKiB0YW5nbzpza3kgYmx1ZSAwLzEgKi8KLSAgLyogZmFsbGJhY2sgZm9yIG5vIHJnYmEgc3VwcG9ydCAqLwotICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOwotICBib3JkZXI6IHNvbGlkIDFweCAjNzI5ZmNmOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMSk7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgcGFkZGluZzogMC41ZW07Ci19Ci0udmFyaWFibGVsaXN0Ci17Ci0gIHBhZGRpbmc6IDRweDsKLSAgbWFyZ2luLWxlZnQ6IDNlbTsKLX0KLS52YXJpYWJsZWxpc3QgdGQ6Zmlyc3QtY2hpbGQKLXsKLSAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotZGl2LmdhbGxlcnktZmxvYXQKLXsKLSAgZmxvYXQ6IGxlZnQ7Ci0gIHBhZGRpbmc6IDEwcHg7Ci19Ci1kaXYuZ2FsbGVyeS1mbG9hdCBpbWcKLXsKLSAgYm9yZGVyLXN0eWxlOiBub25lOwotfQotZGl2LmdhbGxlcnktc3BhY2VyCi17Ci0gIGNsZWFyOiBib3RoOwotfQotCi1hLCBhOnZpc2l0ZWQKLXsKLSAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAvKiB0YW5nbzpza3kgYmx1ZSAyICovCi0gIGNvbG9yOiAjMzQ2NWE0OwotfQotYTpob3ZlcgotewotICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgLyogdGFuZ286c2t5IGJsdWUgMSAqLwotICBjb2xvcjogIzcyOWZjZjsKLX0KLQotZGl2LmluZm9ybWFsdGFibGUgdGFibGUKLXsKLSAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKLSAgYm9yZGVyLXNwYWNpbmc6IDFlbSAwLjNlbTsKLSAgYm9yZGVyOiBub25lOwotfQotCi1kaXYuaW5mb3JtYWx0YWJsZSB0YWJsZSB0ZCwgZGl2LmluZm9ybWFsdGFibGUgdGFibGUgdGgKLXsKLSAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotLmZ1bmN0aW9uX3R5cGUsCi0udmFyaWFibGVfdHlwZSwKLS5wcm9wZXJ0eV90eXBlLAotLnNpZ25hbF90eXBlLAotLnBhcmFtZXRlcl9uYW1lLAotLnN0cnVjdF9tZW1iZXJfbmFtZSwKLS51bmlvbl9tZW1iZXJfbmFtZSwKLS5kZWZpbmVfa2V5d29yZCwKLS5kYXRhdHlwZV9rZXl3b3JkLAotLnR5cGVkZWZfa2V5d29yZAotewotICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLyogZGltIG5vbi1wcmltYXJ5IGNvbHVtbnMgKi8KLS5jX3B1bmN0dWF0aW9uLAotLmZ1bmN0aW9uX3R5cGUsCi0udmFyaWFibGVfdHlwZSwKLS5wcm9wZXJ0eV90eXBlLAotLnNpZ25hbF90eXBlLAotLmRlZmluZV9rZXl3b3JkLAotLmRhdGF0eXBlX2tleXdvcmQsCi0udHlwZWRlZl9rZXl3b3JkLAotLnByb3BlcnR5X2ZsYWdzLAotLnNpZ25hbF9mbGFncywKLS5wYXJhbWV0ZXJfYW5ub3RhdGlvbnMsCi0uZW51bV9tZW1iZXJfYW5ub3RhdGlvbnMsCi0uc3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucywKLS51bmlvbl9tZW1iZXJfYW5ub3RhdGlvbnMKLXsKLSAgY29sb3I6ICM4ODhhODU7Ci19Ci0KLS5mdW5jdGlvbl90eXBlIGEsCi0uZnVuY3Rpb25fdHlwZSBhOnZpc2l0ZWQsCi0uZnVuY3Rpb25fdHlwZSBhOmhvdmVyLAotLnByb3BlcnR5X3R5cGUgYSwKLS5wcm9wZXJ0eV90eXBlIGE6dmlzaXRlZCwKLS5wcm9wZXJ0eV90eXBlIGE6aG92ZXIsCi0uc2lnbmFsX3R5cGUgYSwKLS5zaWduYWxfdHlwZSBhOnZpc2l0ZWQsCi0uc2lnbmFsX3R5cGUgYTpob3ZlciwKLS5zaWduYWxfZmxhZ3MgYSwKLS5zaWduYWxfZmxhZ3MgYTp2aXNpdGVkLAotLnNpZ25hbF9mbGFncyBhOmhvdmVyCi17Ci0gY29sb3I6ICM3MjlmY2Y7Ci19Ci0KLXRkIHAKLXsKLSAgbWFyZ2luOiAwLjI1ZW07Ci19Ci0KLWRpdi50YWJsZSB0YWJsZQotewotICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICBib3JkZXItc3BhY2luZzogMHB4OwotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjYmFiZGI2OwotfQotCi1kaXYudGFibGUgdGFibGUgdGQsIGRpdi50YWJsZSB0YWJsZSB0aAotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMyAqLwotICBib3JkZXI6IHNvbGlkIDFweCAjYmFiZGI2OwotICBwYWRkaW5nOiAzcHg7Ci0gIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLWRpdi50YWJsZSB0YWJsZSB0aAotewotICAvKiB0YW5nbzphbHVtaW5pdW0gMiAqLwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDNkN2NmOwotfQotCi1oNAotewotICBjb2xvcjogIzU1NTc1MzsKLSAgbWFyZ2luLXRvcDogMWVtOwotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLWhyCi17Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAxICovCi0gIGNvbG9yOiAjZDNkN2NmOwotICBiYWNrZ3JvdW5kOiAjZDNkN2NmOwotICBib3JkZXI6IG5vbmUgMHB4OwotICBoZWlnaHQ6IDFweDsKLSAgY2xlYXI6IGJvdGg7Ci0gIG1hcmdpbjogMi4wZW0gMGVtIDIuMGVtIDBlbTsKLX0KLQotZGwudG9jIGR0Ci17Ci0gIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07Ci19Ci0KLWRsLnRvYyA+IGR0Ci17Ci0gIHBhZGRpbmctdG9wOiAwLjI1ZW07Ci0gIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1kbC50b2MgPiBkbAotewotICBwYWRkaW5nLWJvdHRvbTogMC41ZW07Ci19Ci0KLS5wYXJhbWV0ZXIKLXsKLSAgZm9udC1zdHlsZTogbm9ybWFsOwotfQotCi0uZm9vdGVyCi17Ci0gIHBhZGRpbmctdG9wOiAzLjVlbTsKLSAgLyogdGFuZ286YWx1bWluaXVtIDMgKi8KLSAgY29sb3I6ICNiYWJkYjY7Ci0gIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgZm9udC1zaXplOiA4MCU7Ci19Ci0KLS5pbmZvcm1hbGZpZ3VyZSwKLS5maWd1cmUKLXsKLSAgbWFyZ2luOiAxZW07Ci19Ci0KLS5pbmZvcm1hbGV4YW1wbGUsCi0uZXhhbXBsZQotewotICBtYXJnaW4tdG9wOiAxZW07Ci0gIG1hcmdpbi1ib3R0b206IDFlbTsKLX0KLQotLndhcm5pbmcKLXsKLSAgLyogdGFuZ286b3JhbmdlIDAvMSAqLwotICBiYWNrZ3JvdW5kOiAjZmZlZWQ5OwotICBiYWNrZ3JvdW5kOiByZ2JhKDI1MiwgMTc1LCA2MiwgMC4xKTsKLSAgYm9yZGVyLWNvbG9yOiAjZmZiMDRmOwotICBib3JkZXItY29sb3I6IHJnYmEoMjUyLCAxNzUsIDYyLCAwLjIpOwotfQotLm5vdGUKLXsKLSAgLyogdGFuZ286Y2hhbWVsZW9uIDAvMC41ICovCi0gIGJhY2tncm91bmQ6ICNkOGZmYjI7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMTM4LCAyMjYsIDUyLCAwLjEpOwotICBib3JkZXItY29sb3I6ICNhYmY1NjI7Ci0gIGJvcmRlci1jb2xvcjogcmdiYSgxMzgsIDIyNiwgNTIsIDAuMik7Ci19Ci1kaXYuYmxvY2txdW90ZQotewotICBib3JkZXItY29sb3I6ICNlZWVlZWM7Ci19Ci0ubm90ZSwgLndhcm5pbmcsIGRpdi5ibG9ja3F1b3RlCi17Ci0gIHBhZGRpbmc6IDAuNWVtOwotICBib3JkZXItd2lkdGg6IDFweDsKLSAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKLSAgbWFyZ2luOiAyZW07Ci19Ci0ubm90ZSBwLCAud2FybmluZyBwCi17Ci0gIG1hcmdpbjogMDsKLX0KLQotZGl2Lndhcm5pbmcgaDMudGl0bGUsCi1kaXYubm90ZSBoMy50aXRsZQotewotICBkaXNwbGF5OiBub25lOwotfQotCi1wICsgZGl2LnNlY3Rpb24KLXsKLSAgbWFyZ2luLXRvcDogMWVtOwotfQotCi1kaXYucmVmbmFtZWRpdiwKLWRpdi5yZWZzeW5vcHNpc2RpdiwKLWRpdi5yZWZzZWN0MSwKLWRpdi5yZWZzZWN0MiwKLWRpdi50b2MsCi1kaXYuc2VjdGlvbgotewotICBtYXJnaW4tYm90dG9tOiAxZW07Ci19Ci0KLS8qIGJsb2IgbGlua3MgKi8KLWgyIC5leHRyYWxpbmtzLCBoMyAuZXh0cmFsaW5rcwotewotICBmbG9hdDogcmlnaHQ7Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSAzICovCi0gIGNvbG9yOiAjYmFiZGI2OwotICBmb250LXNpemU6IDgwJTsKLSAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLmxpbmVhcnQKLXsKLSAgY29sb3I6ICNkM2Q3Y2Y7Ci0gIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci19Ci0KLS5hbm5vdGF0aW9uCi17Ci0gIC8qIHRhbmdvOmFsdW1pbml1bSA1ICovCi0gIGNvbG9yOiAjNTU1NzUzOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi0uc3RydWN0ZmllbGQKLXsKLSAgZm9udC1zdHlsZTogbm9ybWFsOwotICBmb250LXdlaWdodDogbm9ybWFsOwotfQotCi1hY3JvbnltLGFiYnIgCi17Ci0gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgZ3JheTsKLX0KLQotLyogY29kZSBsaXN0aW5ncyAqLwotCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAubm9ybWFsLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm5vcm1hbCBhLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLm51bWJlciwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jYnJhY2tldCwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zeW1ib2wgICAgIHsgY29sb3I6ICM1NTU3NTM7IH0KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5jb21tZW50LAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLmxpbmVudW0gICAgeyBjb2xvcjogI2JhYmRiNjsgfSAvKiB0YW5nbzogYWx1bWluaXVtIDMgKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiwKLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5mdW5jdGlvbiBhLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnByZXByb2MgICAgeyBjb2xvcjogIzIwNGE4NzsgfSAvKiB0YW5nbzogc2t5IGJsdWUgMyAgKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5zdHJpbmcgICAgIHsgY29sb3I6ICNhZDdmYTg7IH0gLyogdGFuZ286IHBsdW0gKi8KLS5saXN0aW5nX2NvZGUgLnByb2dyYW1saXN0aW5nIC5rZXl3b3JkLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnVzZXJ0eXBlLAotLmxpc3RpbmdfY29kZSAucHJvZ3JhbWxpc3RpbmcgLnR5cGUsCi0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyAudHlwZSBhICAgICB7IGNvbG9yOiAjNGU5YTA2OyB9IC8qIHRhbmdvOiBjaGFtZWxlb24gMyAgKi8KLQotLmxpc3RpbmdfZnJhbWUgewotICAvKiB0YW5nbzpza3kgYmx1ZSAxICovCi0gIGJvcmRlcjogc29saWQgMXB4ICM3MjlmY2Y7Ci0gIGJvcmRlcjogc29saWQgMXB4IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgcGFkZGluZzogMHB4OwotfQotCi0ubGlzdGluZ19saW5lcywgLmxpc3RpbmdfY29kZSB7Ci0gIG1hcmdpbi10b3A6IDBweDsKLSAgbWFyZ2luLWJvdHRvbTogMHB4OwotICBwYWRkaW5nOiAwLjVlbTsKLX0KLS5saXN0aW5nX2xpbmVzIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMC41ICovCi0gIGJhY2tncm91bmQ6ICNhNmM1ZTM7Ci0gIGJhY2tncm91bmQ6IHJnYmEoMTE0LCAxNTksIDIwNywgMC4yKTsKLSAgLyogdGFuZ286YWx1bWluaXVtIDYgKi8KLSAgY29sb3I6ICMyZTM0MzY7Ci19Ci0ubGlzdGluZ19jb2RlIHsKLSAgLyogdGFuZ286c2t5IGJsdWUgMCAqLwotICBiYWNrZ3JvdW5kOiAjZTZmM2ZmOwotICBiYWNrZ3JvdW5kOiByZ2JhKDExNCwgMTU5LCAyMDcsIDAuMSk7Ci19Ci0ubGlzdGluZ19jb2RlIC5wcm9ncmFtbGlzdGluZyB7Ci0gIC8qIG92ZXJyaWRlIGZyb20gcHJldmlvdXMgKi8KLSAgYm9yZGVyOiBub25lIDBweDsKLSAgcGFkZGluZzogMHB4OwotICBiYWNrZ3JvdW5kOiBub25lOwotfQotLmxpc3RpbmdfbGluZXMgcHJlLCAubGlzdGluZ19jb2RlIHByZSB7Ci0gIG1hcmdpbjogMHB4OwotfQotCi1AbWVkaWEgc2NyZWVuIHsKLSAgLyogdGhlc2UgaGF2ZSBhIDxzdXA+IGFzIGEgZmlyc3QgY2hpbGQsIGJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gcGFyZW50IHNlbGVjdG9ycwotICAgKiB3ZSBjYW4ndCB1c2UgdGhhdC4gKi8KLSAgYS5mb290bm90ZQotICB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDogMGVtICEgaW1wb3J0YW50OwotICB9Ci0gIC8qIHRoaXMgaXMgbmVlZGVkIHNvIHRoYXQgdGhlIGxvY2FsIGFuY2hvcnMgYXJlIGRpc3BsYXllZCBiZWxvdyB0aGUgbmF2aWFndGlvbiAqLwotICBkaXYuZm9vdG5vdGUgYVtuYW1lXSwgZGl2LnJlZm5hbWVkaXYgYVtuYW1lXSwgZGl2LnJlZnNlY3QxIGFbbmFtZV0sIGRpdi5yZWZzZWN0MiBhW25hbWVdLCBkaXYuaW5kZXggYVtuYW1lXSwgZGl2Lmdsb3NzYXJ5IGFbbmFtZV0sIGRpdi5zZWN0MSBhW25hbWVdCi0gIHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHRvcDotNWVtOwotICB9Ci0gIC8qIHRoaXMgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhlIHhzbCBzdHlsZSBzaGVldHMgd2hlbiBnZW5lcmF0aW5nIGluZGV4ZXMgKi8KLSAgZGl2LmluZGV4IGRpdi5pbmRleAotICB7Ci0gICAgdG9wOiAwZW07Ci0gIH0KLSAgLyogbWFrZSBzcGFjZSBmb3IgdGhlIGZpeGVkIG5hdmlnYXRpb24gYmFyIGFuZCBhZGQgc3BhY2UgYXQgdGhlIGJvdHRvbSBzbyB0aGF0Ci0gICAqIGxpbmsgdGFyZ2V0cyBhcHBlYXIgc29tZXdoYXQgY2xvc2UgdG8gdG9wCi0gICAqLwotICBib2R5Ci0gIHsKLSAgICBwYWRkaW5nLXRvcDogMi41ZW07Ci0gICAgcGFkZGluZy1ib3R0b206IDUwMHB4OwotICAgIG1heC13aWR0aDogNjBlbTsKLSAgfQotICBwCi0gIHsKLSAgICBtYXgtd2lkdGg6IDYwZW07Ci0gIH0KLSAgLyogc3R5bGUgYW5kIHNpemUgdGhlIG5hdmlnYXRpb24gYmFyICovCi0gIHRhYmxlLm5hdmlnYXRpb24jdG9wCi0gIHsKLSAgICBwb3NpdGlvbjogZml4ZWQ7Ci0gICAgYmFja2dyb3VuZDogI2UyZTJlMjsKLSAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgICBib3JkZXItc3BhY2luZzogNXB4OwotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICB6LWluZGV4OiAxMDsKLSAgfQotICB0YWJsZS5uYXZpZ2F0aW9uI3RvcCB0ZAotICB7Ci0gICAgcGFkZGluZy1sZWZ0OiA2cHg7Ci0gICAgcGFkZGluZy1yaWdodDogNnB4OwotICB9Ci0gIC5uYXZpZ2F0aW9uIGEsIC5uYXZpZ2F0aW9uIGE6dmlzaXRlZAotICB7Ci0gICAgLyogdGFuZ286c2t5IGJsdWUgMyAqLwotICAgIGNvbG9yOiAjMjA0YTg3OwotICB9Ci0gIC5uYXZpZ2F0aW9uIGE6aG92ZXIKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KLSAgICBjb2xvcjogIzM0NjVhNDsKLSAgfQotICB0ZC5zaG9ydGN1dHMKLSAgewotICAgIC8qIHRhbmdvOnNreSBibHVlIDIgKi8KLSAgICBjb2xvcjogIzM0NjVhNDsKLSAgICBmb250LXNpemU6IDgwJTsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICB9Ci0gIHRkLnNob3J0Y3V0cyAuZGltCi0gIHsKLSAgICBjb2xvcjogI2JhYmRiNjsKLSAgfQotICAubmF2aWdhdGlvbiAudGl0bGUKLSAgewotICAgIGZvbnQtc2l6ZTogODAlOwotICAgIG1heC13aWR0aDogbm9uZTsKLSAgICBtYXJnaW46IDBweDsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICB9Ci19Ci1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MGVtKSB7Ci0gIC8qIHNjcmVlbiBsYXJnZXIgdGhhbiA2MGVtICovCi0gIGJvZHkgeyBtYXJnaW46IGF1dG87IH0KLX0KLUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDYwZW0pIHsKLSAgLyogc2NyZWVuIGxlc3MgdGhhbiA2MGVtICovCi0gICNuYXZfaGllcmFyY2h5IHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2ludGVyZmFjZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfcHJlcmVxdWlzaXRlcyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9kZXJpdmVkX2ludGVyZmFjZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfaW1wbGVtZW50YXRpb25zIHsgZGlzcGxheTogbm9uZTsgfQotICAjbmF2X2NoaWxkX3Byb3BlcnRpZXMgeyBkaXNwbGF5OiBub25lOyB9Ci0gICNuYXZfc3R5bGVfcHJvcGVydGllcyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9pbmRleCB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgI25hdl9nbG9zc2FyeSB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLmdhbGxlcnlfaW1hZ2UgeyBkaXNwbGF5OiBub25lOyB9Ci0gIC5wcm9wZXJ0eV9mbGFncyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnNpZ25hbF9mbGFncyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnBhcmFtZXRlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLmVudW1fbWVtYmVyX2Fubm90YXRpb25zIHsgZGlzcGxheTogbm9uZTsgfQotICAuc3RydWN0X21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLnVuaW9uX21lbWJlcl9hbm5vdGF0aW9ucyB7IGRpc3BsYXk6IG5vbmU7IH0KLSAgLyogbm93IHRoYXQgYSBjb2x1bW4gaXMgaGlkZGVuLCBvcHRpbWl6ZSBzcGFjZSAqLwotICBjb2wucGFyYW1ldGVyc19uYW1lIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnBhcmFtZXRlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wuc3RydWN0X21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5zdHJ1Y3RfbWVtYmVyc19kZXNjcmlwdGlvbiB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5lbnVtX21lbWJlcnNfbmFtZSB7IHdpZHRoOiBhdXRvOyB9Ci0gIGNvbC5lbnVtX21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICBjb2wudW5pb25fbWVtYmVyc19uYW1lIHsgd2lkdGg6IGF1dG87IH0KLSAgY29sLnVuaW9uX21lbWJlcnNfZGVzY3JpcHRpb24geyB3aWR0aDogYXV0bzsgfQotICAubGlzdGluZ19saW5lcyB7IGRpc3BsYXk6IG5vbmU7IH0KLX0KLUBtZWRpYSBwcmludCB7Ci0gIHRhYmxlLm5hdmlnYXRpb24gewotICAgIHZpc2liaWxpdHk6IGNvbGxhcHNlOwotICAgIGRpc3BsYXk6IG5vbmU7Ci0gIH0KLSAgZGl2LnRpdGxlcGFnZSB0YWJsZS5uYXZpZ2F0aW9uIHsKLSAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwotICAgIGRpc3BsYXk6IHRhYmxlOwotICAgIGJhY2tncm91bmQ6ICNlMmUyZTI7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggI2JhYmRiNjsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiAzZW07Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2h0bWwvdXAtaW5zZW5zaXRpdmUucG5nIGIvZG9jcy9wbHVnaW5zL2h0bWwvdXAtaW5zZW5zaXRpdmUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2UxYTRmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9odG1sL3VwLWluc2Vuc2l0aXZlLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9odG1sL3VwLnBuZyBiL2RvY3MvcGx1Z2lucy9odG1sL3VwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhOTA1NC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaHRtbC91cC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tMTM5NC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzMzBmMGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLTEzOTQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+MTM5NDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlNvdXJjZSBmb3IgdmlkZW8gZGF0YSB2aWEgSUVFRTEzOTQgaW50ZXJmYWNlPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC9yYXcxMzk0Ly5saWJzL2xpYmdzdDEzOTQuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0MTM5NC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZHYxMzk0c3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkZpcmV3aXJlICgxMzk0KSBEViB2aWRlbyBzb3VyY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNvdXJjZS9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+U291cmNlIGZvciBEViB2aWRlbyBkYXRhIGZyb20gZmlyZXdpcmUgcG9ydDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAdGVtcGxlLWJhcHRpc3QuY29tJmd0OywgRGFuaWVsIEZpc2NoZXIgJmx0O2RhbkBmM2MuY29tJmd0OywgV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDssIFphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtZHYsIGZvcm1hdD0oc3RyaW5nKXsgTlRTQywgUEFMIH0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+aGR2MTM5NHNyYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GaXJld2lyZSAoMTM5NCkgSERWIHZpZGVvIHNvdXJjZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlL1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Tb3VyY2UgZm9yIE1QRUctVFMgdmlkZW8gZGF0YSBmcm9tIGZpcmV3aXJlIHBvcnQ8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FZHdhcmQgSGVydmV5ICZsdDtiaWxib2VkQGJpbGJvZWQuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL21wZWd0cywgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWUsIHBhY2tldHNpemU9KGludCkxODg8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWFzaW5rLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTY5NWEyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hYXNpbmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+YWFzaW5rPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+QVNDSUkgQXJ0IHZpZGVvIHNpbms8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L2FhbGliLy5saWJzL2xpYmdzdGFhc2luay5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RhYXNpbmsuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmFhc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BU0NJSSBhcnQgdmlkZW8gc2luazwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QW4gQVNDSUkgYXJ0IHZpZGVvc2luazwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFsYXcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGU4OTE1Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbGF3LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmFsYXc8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5BTGF3IGF1ZGlvIGNvbnZlcnNpb24gcm91dGluZXM8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2xhdy8ubGlicy9saWJnc3RhbGF3LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGFsYXcuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmFsYXdkZWM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QSBMYXcgYXVkaW8gZGVjb2RlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVjb2Rlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q29udmVydCA4Yml0IEEgbGF3IHRvIDE2Yml0IFBDTTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1hbGF3LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmFsYXdlbmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QSBMYXcgYXVkaW8gZW5jb2RlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRW5jb2Rlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q29udmVydCAxNmJpdCBQQ00gdG8gOGJpdCBBIGxhdzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlphaGVlciBBYmJhcyBNZXJhbGkgJmx0O3phaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1hbGF3LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmEyNzYyLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5hbHBoYTwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPmFkZHMgYW4gYWxwaGEgY2hhbm5lbCB0byB2aWRlbyAtIGNvbnN0YW50IG9yIHZpYSBjaHJvbWEta2V5aW5nPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9hbHBoYS8ubGlicy9saWJnc3RhbHBoYS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RhbHBoYS5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YWxwaGE8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QWxwaGEgZmlsdGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BZGRzIGFuIGFscGhhIGNoYW5uZWwgdG8gdmlkZW8gLSB1bmlmb3JtIG9yIHZpYSBjaHJvbWEta2V5aW5nPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDsKLUVkd2FyZCBIZXJ2ZXkgJmx0O2Vkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrJmd0OwotSmFuIFNjaG1pZHQgJmx0O3RoYXl0YW5Abm9yYWlzaW4ubmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCeCwgUkdCLCBCR1IsIFk0MkIsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFk0MUIgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsIHhSR0IsIEJHUngsIHhCR1IsIFJHQngsIFJHQiwgQkdSLCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBZNDFCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hbHBoYWNvbG9yLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM1MDRkMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYWxwaGFjb2xvci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5hbHBoYWNvbG9yPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+UkdCQSBmcm9tL3RvIEFZVVYgY29sb3JzcGFjZSBjb252ZXJzaW9uIHByZXNlcnZpbmcgdGhlIGFscGhhIGNoYW5uZWw8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2FscGhhLy5saWJzL2xpYmdzdGFscGhhY29sb3Iuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0YWxwaGFjb2xvci5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YWxwaGFjb2xvcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BbHBoYSBjb2xvciBmaWx0ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9Db252ZXJ0ZXIvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFSR0IgZnJvbS90byBBWVVWIGNvbG9yc3BhY2UgY29udmVyc2lvbiBwcmVzZXJ2aW5nIHRoZSBhbHBoYSBjaGFubmVsPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEFZVVYgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEFZVVYgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWFwZXRhZy54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5ZTVlOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXBldGFnLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmFwZXRhZzwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkFQRXYxLzIgdGFnIHJlYWRlcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvYXBldGFnLy5saWJzL2xpYmdzdGFwZXRhZy5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RhcGV0YWcuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmFwZWRlbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkFQRSB0YWcgZGVtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVtdXhlci9NZXRhZGF0YTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVhZCBhbmQgb3V0cHV0IEFQRSB0YWdzIHdoaWxlIGRlbXV4aW5nIHRoZSBjb250ZW50czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbSBjZW50cmljdWxhciBuZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LWFwZXRhZzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVkaW9meC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZmFiMTkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvZngueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmF1ZGlvZng8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5BdWRpbyBlZmZlY3RzIHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvYXVkaW9meC8ubGlicy9saWJnc3RhdWRpb2Z4LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGF1ZGlvZnguc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmF1ZGlvYW1wbGlmeTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBhbXBsaWZpZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFtcGxpZmllcyBhbiBhdWRpbyBzdHJlYW0gYnkgYSBnaXZlbiBmYWN0b3I8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5TZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMzMkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMzMkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmF1ZGlvY2hlYmJhbmQ8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QmFuZCBwYXNzICZhbXA7IGJhbmQgcmVqZWN0IGZpbHRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q2hlYnlzaGV2IGJhbmQgcGFzcyBhbmQgYmFuZCByZWplY3QgZmlsdGVyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmF1ZGlvY2hlYmxpbWl0PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkxvdyBwYXNzICZhbXA7IGhpZ2ggcGFzcyBmaWx0ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkNoZWJ5c2hldiBsb3cgcGFzcyBhbmQgaGlnaCBwYXNzIGZpbHRlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb2R5bmFtaWM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RHluYW1pYyByYW5nZSBjb250cm9sbGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Db21wcmVzc29yIGFuZCBFeHBhbmRlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3Nsb21vQGNpcmN1bGFyLWNoYW9zLm9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKXsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKXsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXVkaW9lY2hvPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkF1ZGlvIGVjaG88L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFkZHMgYW4gZWNobyBvciByZXZlcmIgZWZmZWN0IHRvIGFuIGF1ZGlvIHN0cmVhbTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb2ZpcmZpbHRlcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBGSVIgZmlsdGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5HZW5lcmljIGF1ZGlvIEZJUiBmaWx0ZXIgd2l0aCBjdXN0b20gZmlsdGVyIGtlcm5lbDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb2lpcmZpbHRlcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBJSVIgZmlsdGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5HZW5lcmljIGF1ZGlvIElJUiBmaWx0ZXIgd2l0aCBjdXN0b20gZmlsdGVyIGtlcm5lbDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb2ludmVydDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBpbnZlcnNpb248L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlN3YXBzIHVwcGVyIGFuZCBsb3dlciBoYWxmIG9mIGF1ZGlvIHNhbXBsZXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5TZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZyl7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmF1ZGlva2FyYW9rZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpb0thcmFva2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlJlbW92ZXMgdm9pY2UgZnJvbSBzb3VuZDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KTIsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDMsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMywgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb3Bhbm9yYW1hPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlN0ZXJlbyBwb3NpdGlvbmluZzwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UG9zaXRpb25zIGF1ZGlvIHN0cmVhbXMgaW4gdGhlIHN0ZXJlbyBwYW5vcmFtYTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0ZWZhbiBLb3N0ICZsdDtlbnNvbmljQHVzZXJzLnNmLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMiwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb3dzaW5jYmFuZDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5CYW5kIHBhc3MgJmFtcDsgYmFuZCByZWplY3QgZmlsdGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5CYW5kIHBhc3MgYW5kIGJhbmQgcmVqZWN0IHdpbmRvd2VkIHNpbmMgZmlsdGVyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGhvbWFzIFZhbmRlciBTdGljaGVsZSAmbHQ7dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnJmd0OywgU3RldmVuIFcuIFNtaXRoLCBEcmVhbWxhYiBUZWNobm9sb2dpZXMgTHRkLiAmbHQ7bWF0aGlzLmhvZmVyQGRyZWFtbGFiLm5ldCZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdWRpb3dzaW5jbGltaXQ8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TG93IHBhc3MgJmFtcDsgaGlnaCBwYXNzIGZpbHRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TG93IHBhc3MgYW5kIGhpZ2ggcGFzcyB3aW5kb3dlZCBzaW5jIGZpbHRlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDssIFN0ZXZlbiBXLiBTbWl0aCwgRHJlYW1sYWIgVGVjaG5vbG9naWVzIEx0ZC4gJmx0O21hdGhpcy5ob2ZlckBkcmVhbWxhYi5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c2NhbGV0ZW1wbzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TY2FsZXRlbXBvPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1JhdGU8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlN5bmMgYXVkaW8gdGVtcG8gd2l0aCBwbGF5YmFjayByYXRlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+Um92IEp1dmFubyAmbHQ7cm92anV2YW5vQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylGMzJMRSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpRjY0TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUYzMkxFLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylGNjRMRSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdWRpb3BhcnNlcnMueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNTViYzkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1ZGlvcGFyc2Vycy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+YXVkaW9wYXJzZXJzPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+UGFyc2VycyBmb3IgdmFyaW91cyBhdWRpbyBmb3JtYXRzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9hdWRpb3BhcnNlcnMvLmxpYnMvbGliZ3N0YXVkaW9wYXJzZXJzLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGF1ZGlvcGFyc2Vycy5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YWFjcGFyc2U8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QUFDIGF1ZGlvIHN0cmVhbSBwYXJzZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BhcnNlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QWR2YW5jZWQgQXVkaW8gQ29kaW5nIHBhcnNlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0ZWZhbiBLb3N0ICZsdDtzdGVmYW4ua29zdEBub2tpYS5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsgMiwgNCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL21wZWcsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBtcGVndmVyc2lvbj0oaW50KXsgMiwgNCB9LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpeyByYXcsIGFkdHMsIGFkaWYsIGxvYXMgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmFjM3BhcnNlPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkFDMyBhdWRpbyBzdHJlYW0gcGFyc2VyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXJzZXIvQ29udmVydGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BQzMgcGFyc2VyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltIGNlbnRyaWN1bGFyIG5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtYWMzOyBhdWRpby94LWVhYzM7IGF1ZGlvL2FjMzsgYXVkaW8veC1wcml2YXRlMS1hYzM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1hYzMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBjaGFubmVscz0oaW50KVsgMSwgNiBdLCByYXRlPShpbnQpWyA4MDAwLCA0ODAwMCBdLCBhbGlnbm1lbnQ9KHN0cmluZyl7IGllYzYxOTM3LCBmcmFtZSB9OyBhdWRpby94LWVhYzMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBjaGFubmVscz0oaW50KVsgMSwgNiBdLCByYXRlPShpbnQpWyA4MDAwLCA0ODAwMCBdLCBhbGlnbm1lbnQ9KHN0cmluZyl7IGllYzYxOTM3LCBmcmFtZSB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YW1ycGFyc2U8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QU1SIGF1ZGlvIHN0cmVhbSBwYXJzZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BhcnNlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QWRhcHRpdmUgTXVsdGktUmF0ZSBhdWRpbyBwYXJzZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5Sb25hbGQgQnVsdGplICZsdDtyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWFtci1uYi1zaDsgYXVkaW8veC1hbXItd2Itc2g8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vQU1SLCByYXRlPShpbnQpODAwMCwgY2hhbm5lbHM9KGludCkxOyBhdWRpby9BTVItV0IsIHJhdGU9KGludCkxNjAwMCwgY2hhbm5lbHM9KGludCkxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZGNhcGFyc2U8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RFRTIENvaGVyZW50IEFjb3VzdGljcyBhdWRpbyBzdHJlYW0gcGFyc2VyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXJzZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRDQSBwYXJzZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1kdHM7IGF1ZGlvL3gtcHJpdmF0ZTEtZHRzPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtZHRzLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZSwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGRlcHRoPShpbnQpeyAxNCwgMTYgfSwgZW5kaWFubmVzcz0oaW50KXsgMTIzNCwgNDMyMSB9LCBibG9jay1zaXplPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lLXNpemU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmZsYWNwYXJzZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GTEFDIGF1ZGlvIHBhcnNlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGFyc2VyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXJzZXMgYXVkaW8gd2l0aCB0aGUgRkxBQyBsb3NzbGVzcyBhdWRpbyBjb2RlYzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1mbGFjPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtZmxhYywgZnJhbWVkPShib29sZWFuKXRydWUsIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDEsIDY1NTM1MCBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bXBlZ2F1ZGlvcGFyc2U8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TVBFRzEgQXVkaW8gUGFyc2VyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXJzZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBhcnNlcyBhbmQgZnJhbWVzIG1wZWcxIGF1ZGlvIHN0cmVhbXMgKGxldmVscyAxLTMpLCBwcm92aWRlcyBzZWVrPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+SmFuIFNjaG1pZHQgJmx0O3RoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20mZ3Q7LE1hcmsgTmF1d2VsYWVydHMgJmx0O21hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludClbIDEsIDMgXSwgbXBlZ2F1ZGlvdmVyc2lvbj0oaW50KVsgMSwgMyBdLCByYXRlPShpbnQpWyA4MDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnNiY3BhcnNlPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlNCQyBhdWRpbyBwYXJzZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BhcnNlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGFyc2VzIGFuIFNCQyBibHVldG9vdGggYXVkaW8gc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltLm11bGxlckBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNiYzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNiYywgcGFyc2VkPShib29sZWFuKXRydWUsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludCl7IDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT53YXZwYWNrcGFyc2U8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+V2F2cGFjayBhdWRpbyBzdHJlYW0gcGFyc2VyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXJzZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPldhdnBhY2sgcGFyc2VyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+TWFyayBOYXV3ZWxhZXJ0cyAmbHQ7bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXdhdnBhY2s8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC13YXZwYWNrLCBkZXB0aD0oaW50KVsgMSwgMzIgXSwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgNjAwMCwgMTkyMDAwIF0sIGZyYW1lZD0oYm9vbGVhbil0cnVlOyBhdWRpby94LXdhdnBhY2stY29ycmVjdGlvbiwgZnJhbWVkPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tYXVwYXJzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3M2JjYTYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1cGFyc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+YXVwYXJzZTwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPnBhcnNlcyBhdSBzdHJlYW1zPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9hdXBhcnNlLy5saWJzL2xpYmdzdGF1cGFyc2Uuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0YXVwYXJzZS5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXVwYXJzZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BVSBhdWRpbyBkZW11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZW11eGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXJzZSBhbiAuYXUgZmlsZSBpbnRvIHJhdyBhdWRpbzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWF1PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzE2QkUsIFMyNExFLCBTMjRCRSwgUzMyTEUsIFMzMkJFLCBGMzJMRSwgRjMyQkUsIEY2NExFLCBGNjRCRSB9LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludCkxLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMTZCRSwgUzI0TEUsIFMyNEJFLCBTMzJMRSwgUzMyQkUsIEYzMkxFLCBGMzJCRSwgRjY0TEUsIEY2NEJFIH0sIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KTIsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDMsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkOyBhdWRpby94LWFsYXcsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdOyBhdWRpby94LW11bGF3LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpeyBnNzIxLCBnNzIyLCBnNzIzXzMsIGc3MjNfNSB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF1dG9kZXRlY3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWJkMmM5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdXRvZGV0ZWN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmF1dG9kZXRlY3Q8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5QbHVnaW4gY29udGFpbnMgYXV0by1kZXRlY3Rpb24gcGx1Z2lucyBmb3IgdmlkZW8vYXVkaW8gaW4tIGFuZCBvdXRwdXRzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9hdXRvZGV0ZWN0Ly5saWJzL2xpYmdzdGF1dG9kZXRlY3Quc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0YXV0b2RldGVjdC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXV0b2F1ZGlvc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdXRvIGF1ZGlvIHNpbms8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPldyYXBwZXIgYXVkaW8gc2luayBmb3IgYXV0b21hdGljYWxseSBkZXRlY3RlZCBhdWRpbyBzaW5rPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+SmFuIFNjaG1pZHQgJmx0O3RoYXl0YW5Abm9yYWlzaW4ubmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXV0b2F1ZGlvc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkF1dG8gYXVkaW8gc291cmNlPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPldyYXBwZXIgYXVkaW8gc291cmNlIGZvciBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGF1ZGlvIHNvdXJjZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG5vcmFpc2luLm5ldCZndDssIFN0ZWZhbiBLb3N0ICZsdDtlbnNvbmljQHVzZXJzLnNmLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdXRvdmlkZW9zaW5rPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkF1dG8gdmlkZW8gc2luazwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+V3JhcHBlciB2aWRlbyBzaW5rIGZvciBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHZpZGVvIHNpbms8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBub3JhaXNpbi5uZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdXRvdmlkZW9zcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXV0byB2aWRlbyBzb3VyY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNvdXJjZS9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+V3JhcHBlciB2aWRlbyBzb3VyY2UgZm9yIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgdmlkZW8gc291cmNlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+SmFuIFNjaG1pZHQgJmx0O3RoYXl0YW5Abm9yYWlzaW4ubmV0Jmd0OywgU3RlZmFuIEtvc3QgJmx0O2Vuc29uaWNAdXNlcnMuc2YubmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1hdmkueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNDkwODAuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWF2aS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+YXZpPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+QVZJIHN0cmVhbSBoYW5kbGluZzwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvYXZpLy5saWJzL2xpYmdzdGF2aS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3Rhdmkuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmF2aWRlbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkF2aSBkZW11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZW11eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5EZW11bHRpcGxleCBhbiBhdmkgZmlsZSBpbnRvIGF1ZGlvIGFuZCB2aWRlbzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY2hlbGxvLmJlJmd0OywgVGhpanMgVmVybWVpciAmbHQ7dGhpanN2ZXJtZWlyQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtbXN2aWRlbzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5hdWRpb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL21zLWdzbTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTM7IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludCkyOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgVTgsIFMxNkxFLCBVMTZMRSwgUzI0TEUsIFUyNExFLCBTMzJMRSwgVTMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ7IGF1ZGlvL3gtdm9yYmlzOyBhdWRpby94LWFjMzsgYXVkaW8veC1kdHM7IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNDsgYXVkaW8veC1hbGF3OyBhdWRpby94LW11bGF3OyBhdWRpby94LXdtcywgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZyltaWNyb3NvZnQsIGJsb2NrX2FsaWduPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWR2aSwgYmxvY2tfYWxpZ249KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC10cnVlc3BlZWNoOyBhdWRpby94LXdtYSwgd21hdmVyc2lvbj0oaW50KTEsIGJpdHJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgYmxvY2tfYWxpZ249KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC13bWEsIHdtYXZlcnNpb249KGludCkyLCBiaXRyYXRlPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF0sIGJsb2NrX2FsaWduPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtd21hLCB3bWF2ZXJzaW9uPShpbnQpMywgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXZuZC5zb255LmF0cmFjMzsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIEY2NExFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkOyBhdWRpby94LXZveHdhcmUsIHZveHdhcmV0eXBlPShpbnQpMTE3OyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylkazQ7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWRrMzsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZHZpOyBhdWRpby9BTVI7IGF1ZGlvL0FNUi1XQjsgYXVkaW8veC1zaXJlbjsgYXBwbGljYXRpb24veC1vZ2ctYXZpOyBhdWRpby94LWF2aS11bmtub3duPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnBpY3R1cmVfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5zdWJwaWN0dXJlL3gteHN1YjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zdWJ0aXRsZV8ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtc3VidGl0bGUtYXZpPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1hc3VzLCBhc3VzdmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1hc3VzLCBhc3VzdmVyc2lvbj0oaW50KTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1jaXJydXMtbG9naWMtYWNjdXBhaywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWNhbXN0dWRpbywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWNvbXByZXNzZWQteXV2LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQjhQLCBCR1IsIEJHUnggfSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWRpdngsIGRpdnh2ZXJzaW9uPShpbnQpMywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWRpdngsIGRpdnh2ZXJzaW9uPShpbnQpNCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXRydWVtb3Rpb24sIHRydWV2ZXJzaW9uPShpbnQpMSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGR2dmVyc2lvbj0oaW50KTI1LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgZHZ2ZXJzaW9uPShpbnQpNTAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kaXZ4LCBkaXZ4dmVyc2lvbj0oaW50KTUsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1mbGFzaC12aWRlbywgZmx2dmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDYtZmxhc2gsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaDI2MywgdmFyaWFudD0oc3RyaW5nKWx1Y2VudCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWgyNjQsIHZhcmlhbnQ9KHN0cmluZylpdHUsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1odWZmeXV2LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaW50ZWwtaDI2MywgdmFyaWFudD0oc3RyaW5nKWludGVsLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaW5kZW8sIGluZGVvdmVyc2lvbj0oaW50KTMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1pbmRlbywgaW5kZW92ZXJzaW9uPShpbnQpNCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWluZGVvLCBpbmRlb3ZlcnNpb249KGludCk1LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaDI2MywgdmFyaWFudD0oc3RyaW5nKWxlYWQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjY0LCB2YXJpYW50PShzdHJpbmcpbGVhZCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZyltaWNyb3NvZnQsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgaW1hZ2UvanBlZywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LW1zbXBlZywgbXNtcGVndmVyc2lvbj0oaW50KTQyLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtbXNtcGVnLCBtc21wZWd2ZXJzaW9uPShpbnQpNDMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8vbXBlZywgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCBtcGVndmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8vbXBlZywgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCBtcGVndmVyc2lvbj0oaW50KTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1tc21wZWcsIG1zbXBlZ3ZlcnNpb249KGludCk0MSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LW1zemgsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgaW1hZ2UvcG5nLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcmxlLCBsYXlvdXQ9KHN0cmluZyltaWNyb3NvZnQsIGRlcHRoPShpbnQpWyAxLCA2NCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaW5kZW8sIGluZGVvdmVyc2lvbj0oaW50KTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8vc3A1eCwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXRydWVtb3Rpb24sIHRydWV2ZXJzaW9uPShpbnQpMiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWNhbXRhc2lhLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtdWx0aW1vdGlvbiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpVVlWWSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWF0aS12Y3IsIHZjcnZlcnNpb249KGludCkxLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtYXRpLXZjciwgdmNydmVyc2lvbj0oaW50KTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpdmRvbGl2ZSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZyl2aXZvLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtdm1uYywgdmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjY0LCB2YXJpYW50PShzdHJpbmcpdmlkZW9zb2Z0LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtd212LCB3bXZ2ZXJzaW9uPShpbnQpMSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXdtdiwgd212dmVyc2lvbj0oaW50KTIsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC13bXYsIHdtdnZlcnNpb249KGludCkzLCBmb3JtYXQ9KHN0cmluZylXTVYzLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gteGFuLCB3Y3ZlcnNpb249KGludCk0LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVVkyLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVlU5LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtemxpYiwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWNpbmVwYWssIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjY0LCB2YXJpYW50PShzdHJpbmcpaXR1LCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtbXN2aWRlb2NvZGVjLCBtc3ZpZGVvdmVyc2lvbj0oaW50KTEsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpeGlybGluaywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWRpcmFjLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZmZ2LCBmZnZ2ZXJzaW9uPShpbnQpMSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWttdmMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDUsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDYsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDYtZmxhc2gsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDcsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDgsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1taW1pYywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWFwcGxlLXZpZGVvLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtdGhlb3JhLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZnJhcHMsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1hYXNjLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVjEyLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtbG9jbywgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXptYnYsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXYyMTAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXIyMTAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU7IHZpZGVvL3gtYXZpLXVua25vd248L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hdmltdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXZpIG11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9NdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TXV4ZXMgYXVkaW8gYW5kIHZpZGVvIGludG8gYW4gYXZpIHN0cmVhbTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkdTdHJlYW1lciBtYWludGFpbmVycyAmbHQ7Z3N0cmVhbWVyLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5hdWRpb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgVTgsIFMxNkxFIH0sIHJhdGU9KGludClbIDEwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF07IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludClbIDEsIDMgXSwgcmF0ZT0oaW50KVsgMTAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3LCByYXRlPShpbnQpWyAxMDAwLCA5NjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdOyBhdWRpby94LWFjMywgcmF0ZT0oaW50KVsgMTAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDYgXTsgYXVkaW8veC1hbGF3LCByYXRlPShpbnQpWyAxMDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdOyBhdWRpby94LW11bGF3LCByYXRlPShpbnQpWyAxMDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdOyBhdWRpby94LXdtYSwgcmF0ZT0oaW50KVsgMTAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgd21hdmVyc2lvbj0oaW50KVsgMSwgMiBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBZVVkyLCBJNDIwLCBCR1IsIEJHUngsIEJHUkEsIEdSQVk4LCBVWVZZIH0sIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyBpbWFnZS9qcGVnLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1kaXZ4LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXSwgZGl2eHZlcnNpb249KGludClbIDMsIDUgXTsgdmlkZW8veC1tc21wZWcsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCBtc21wZWd2ZXJzaW9uPShpbnQpWyA0MSwgNDMgXTsgdmlkZW8vbXBlZywgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIG1wZWd2ZXJzaW9uPShpbnQpeyAxLCAyLCA0IH0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsgdmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1oMjY0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYnl0ZS1zdHJlYW0sIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1kdiwgd2lkdGg9KGludCk3MjAsIGhlaWdodD0oaW50KXsgNTc2LCA0ODAgfSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsgdmlkZW8veC1odWZmeXV2LCB3aWR0aD0oaW50KVsgMTYsIDQwOTYgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNDA5NiBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC13bXYsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3bXZ2ZXJzaW9uPShpbnQpWyAxLCAzIF07IGltYWdlL3gtanBjLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtdnA4LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IGltYWdlL3BuZywgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1tc3ZpZGVvPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXZpc3VidGl0bGU8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXZpIHN1YnRpdGxlIHBhcnNlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGFyc2VyL1N1YnRpdGxlPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXJzZSBhdmkgc3VidGl0bGUgc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGhpanMgVmVybWVpciAmbHQ7dGhpanN2ZXJtZWlyQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtc3VidGl0bGUtYXZpPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtc3VidGl0bGU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWNhY2FzaW5rLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMzZDIzNy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2FjYXNpbmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+Y2FjYXNpbms8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5Db2xvcmVkIEFTQ0lJIEFydCB2aWRlbyBzaW5rPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC9saWJjYWNhLy5saWJzL2xpYmdzdGNhY2FzaW5rLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGNhY2FzaW5rLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5jYWNhc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BIGNvbG9yZWQgQVNDSUkgYXJ0IHZpZGVvIHNpbms8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkEgY29sb3JlZCBBU0NJSSBhcnQgdmlkZW9zaW5rPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmVlc2hhbiBBbGkgJmx0O3phazE0N0B5YWhvby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0IsIEJHUiwgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCMTYsIFJHQjE1IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY2Fpcm8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWM1OGNlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1jYWlyby54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5jYWlybzwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkNhaXJvLWJhc2VkIGVsZW1lbnRzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC9jYWlyby8ubGlicy9saWJnc3RjYWlyby5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RjYWlyby5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+Y2Fpcm9vdmVybGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkNhaXJvIG92ZXJsYXk8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZGl0b3IvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlJlbmRlciBvdmVybGF5IG9uIGEgdmlkZW8gc3RyZWFtIHVzaW5nIENhaXJvPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+Sm9uIE5vcmRieSAmbHQ7am9ub25vckBnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBCR1JBLCBSR0IxNiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQkdSeCwgQkdSQSwgUkdCMTYgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWN1dHRlci54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkYmJmNS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tY3V0dGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmN1dHRlcjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkF1ZGlvIEN1dHRlciB0byBzcGxpdCBhdWRpbyBpbnRvIG5vbi1zaWxlbnQgYml0czwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvY3V0dGVyLy5saWJzL2xpYmdzdGN1dHRlci5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RjdXR0ZXIuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmN1dHRlcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBjdXR0ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZGl0b3IvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkF1ZGlvIEN1dHRlciB0byBzcGxpdCBhdWRpbyBpbnRvIG5vbi1zaWxlbnQgYml0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kZWJ1Zy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjZmYjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlYnVnLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5kZWJ1ZzwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPmVsZW1lbnRzIGZvciB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmc8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2RlYnVndXRpbHMvLmxpYnMvbGliZ3N0ZGVidWcuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0ZGVidWcuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmJyZWFrbXlkYXRhPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkJyZWFrIG15IGRhdGE8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlRlc3Rpbmc8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPnJhbmRvbWx5IGNoYW5nZSBkYXRhIGluIHRoZSBzdHJlYW08L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5CZW5qYW1pbiBPdHRlICZsdDtvdHRlQGdub21lJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmNhcHNzZXR0ZXI8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+Q2Fwc1NldHRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+R2VuZXJpYzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+U2V0L21lcmdlIGNhcHMgb24gc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+TWFyayBOYXV3ZWxhZXJ0cyAmbHQ7bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmNwdXJlcG9ydDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5DUFUgcmVwb3J0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5UZXN0aW5nPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Qb3N0IGNwdSB1c2FnZSBpbmZvcm1hdGlvbiBldmVyeSBidWZmZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5aYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5uYXZzZWVrPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlNlZWsgYmFzZWQgb24gbGVmdC1yaWdodCBhcnJvd3M8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+U2VlayBiYXNlZCBvbiBuYXZpZ2F0aW9uIGtleXMgbGVmdC1yaWdodDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnByb2dyZXNzcmVwb3J0PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlByb2dyZXNzIHJlcG9ydDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+VGVzdGluZzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGVyaW9kaWNhbGx5IHF1ZXJ5IGFuZCByZXBvcnQgb24gcHJvY2Vzc2luZyBwcm9ncmVzczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnB1c2hmaWxlc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlB1c2ggRmlsZSBTb3VyY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlRlc3Rpbmc8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkltcGxlbWVudHMgcHVzaGZpbGU6Ly8gVVJJLWhhbmRsZXIgZm9yIHB1c2gtYmFzZWQgZmlsZSBhY2Nlc3M8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJuZGJ1ZmZlcnNpemU8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UmFuZG9tIGJ1ZmZlciBzaXplPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5UZXN0aW5nPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5wdWxsIHJhbmRvbSBzaXplZCBidWZmZXJzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U3RlZmFuIEtvc3QgJmx0O3N0ZWZhbi5rb3N0QG5va2lhLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT50YWdpbmplY3Q8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VGFnSW5qZWN0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5pbmplY3QgbWV0YWRhdGEgdGFnczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0ZWZhbiBLb3N0ICZsdDtlbnNvbmljQHVzZXJzLnNmLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT50ZXN0c2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5UZXN0IHBsdWdpbjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+VGVzdGluZzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+cGVyZm9ybSBhIG51bWJlciBvZiB0ZXN0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkJlbmphbWluIE90dGUgJmx0O290dGVAZ25vbWUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWRlaW50ZXJsYWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ3MGYyNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGVpbnRlcmxhY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+ZGVpbnRlcmxhY2U8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5EZWludGVybGFjZXI8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2RlaW50ZXJsYWNlLy5saWJzL2xpYmdzdGRlaW50ZXJsYWNlLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGRlaW50ZXJsYWNlLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5kZWludGVybGFjZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5EZWludGVybGFjZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW8vRGVpbnRlcmxhY2U8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRlaW50ZXJsYWNlIE1ldGhvZHMgcG9ydGVkIGZyb20gRFNjYWxlci9UdlRpbWU8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5NYXJ0aW4gRWlrZXJtYW5uICZsdDttZWlrZXJAdXBiLmRlJmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBBQkdSLCBSR0JBLCBCR1JBLCBZNDQ0LCB4UkdCLCB4QkdSLCBSR0J4LCBCR1J4LCBSR0IsIEJHUiwgWVVZMiwgWVZZVSwgVVlWWSwgWTQyQiwgSTQyMCwgWVYxMiwgWTQxQiwgTlYxMiwgTlYyMSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3KEFOWSksIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiwgWVVZMiwgVVlWWSwgQVlVViwgUkdCeCwgQkdSeCwgeFJHQiwgeEJHUiwgUkdCQSwgQkdSQSwgQVJHQiwgQUJHUiwgUkdCLCBCR1IsIFk0MUIsIFk0MkIsIFlWWVUsIFk0NDQsIHYyMTAsIHYyMTYsIE5WMTIsIE5WMjEsIE5WMTYsIE5WNjEsIE5WMjQsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSwgdjMwOCwgSVlVMiwgUkdCMTYsIEJHUjE2LCBSR0IxNSwgQkdSMTUsIFVZVlAsIEE0MjAsIFJHQjhQLCBZVVY5LCBZVlU5LCBJWVUxLCBBUkdCNjQsIEFZVVY2NCwgcjIxMCwgSTQyMF8xMExFLCBJNDIwXzEwQkUsIEk0MjJfMTBMRSwgSTQyMl8xMEJFLCBZNDQ0XzEwTEUsIFk0NDRfMTBCRSwgR0JSLCBHQlJfMTBMRSwgR0JSXzEwQkUsIE5WMTJfNjRaMzIsIEE0MjBfMTBMRSwgQTQyMF8xMEJFLCBBNDIyXzEwTEUsIEE0MjJfMTBCRSwgQTQ0NF8xMExFLCBBNDQ0XzEwQkUsIFAwMTBfMTBMRSwgUDAxMF8xMEJFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBBQkdSLCBSR0JBLCBCR1JBLCBZNDQ0LCB4UkdCLCB4QkdSLCBSR0J4LCBCR1J4LCBSR0IsIEJHUiwgWVVZMiwgWVZZVSwgVVlWWSwgWTQyQiwgSTQyMCwgWVYxMiwgWTQxQiwgTlYxMiwgTlYyMSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3KEFOWSksIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiwgWVVZMiwgVVlWWSwgQVlVViwgUkdCeCwgQkdSeCwgeFJHQiwgeEJHUiwgUkdCQSwgQkdSQSwgQVJHQiwgQUJHUiwgUkdCLCBCR1IsIFk0MUIsIFk0MkIsIFlWWVUsIFk0NDQsIHYyMTAsIHYyMTYsIE5WMTIsIE5WMjEsIE5WMTYsIE5WNjEsIE5WMjQsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSwgdjMwOCwgSVlVMiwgUkdCMTYsIEJHUjE2LCBSR0IxNSwgQkdSMTUsIFVZVlAsIEE0MjAsIFJHQjhQLCBZVVY5LCBZVlU5LCBJWVUxLCBBUkdCNjQsIEFZVVY2NCwgcjIxMCwgSTQyMF8xMExFLCBJNDIwXzEwQkUsIEk0MjJfMTBMRSwgSTQyMl8xMEJFLCBZNDQ0XzEwTEUsIFk0NDRfMTBCRSwgR0JSLCBHQlJfMTBMRSwgR0JSXzEwQkUsIE5WMTJfNjRaMzIsIEE0MjBfMTBMRSwgQTQyMF8xMEJFLCBBNDIyXzEwTEUsIEE0MjJfMTBCRSwgQTQ0NF8xMExFLCBBNDQ0XzEwQkUsIFAwMTBfMTBMRSwgUDAxMF8xMEJFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kaXJlY3Rzb3VuZC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZGlyZWN0c291bmQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTljY2Q2Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kaXJlY3Rzb3VuZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5kaXJlY3Rzb3VuZDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkRpcmVjdFNvdW5kIHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi93aW4zMi92czYvcmVsZWFzZS9saWJnc3RkaXJlY3Rzb3VuZC5kbGw8L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0ZGlyZWN0c291bmQuZGxsPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MC4xMC40LjE8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtYmFkPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIENWUzwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmRpcmVjdHNvdW5kc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5EaXJlY3RTb3VuZCBhdWRpbyBzaW5rPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5TaW5rL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5EaXJlY3RTb3VuZCBhdWRpbyBzaW5rPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWVuIE1vdXR0ZSAmbHQ7c2ViYXN0aWVuQG1vdXR0ZS5uZXQmZ3Q7PC9hdXRob3I+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHRtZi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjODNlM2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWR0bWYueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+ZHRtZjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkRUTUYgcGx1Z2luczwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvZHRtZi8ubGlicy9saWJnc3RkdG1mLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGR0bWYuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmR0bWZzcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RFRNRiB0b25lIGdlbmVyYXRvcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5HZW5lcmF0ZXMgRFRNRiB0b25lczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPllvdW5lc3MgQWxhb3VpICZsdDt5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMxNkxFLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGR0bWZkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgRFRNRiBwYWNrZXQgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcms8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkdlbmVyYXRlcyBEVE1GIFNvdW5kIGZyb20gdGVsZXBob25lLWV2ZW50IFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WW91bmVzcyBBbGFvdWkgJmx0O3lvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVRFTEVQSE9ORS1FVkVOVDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwZHRtZnNyYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgRFRNRiBwYWNrZXQgZ2VuZXJhdG9yPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+R2VuZXJhdGVzIFJUUCBEVE1GIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5aZWVzaGFuIEFsaSAmbHQ7emVlc2hhbi5hbGlAbm9raWEuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVRFTEVQSE9ORS1FVkVOVDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZHYueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTNmNjRlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1kdi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5kdjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkRWIGRlbXV4ZXIgYW5kIGRlY29kZXIgYmFzZWQgb24gbGliZHYgKGxpYmR2LnNmLm5ldCk8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L2R2Ly5saWJzL2xpYmdzdGR2LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGR2LnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5kdmRlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5EViB2aWRlbyBkZWNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZWNvZGVyL1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Vc2VzIGxpYmR2IHRvIGRlY29kZSBEViB2aWRlbyAoc21wdGUzMTQpIChsaWJkdi5zb3VyY2Vmb3JnZS5uZXQpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RXJpayBXYWx0aGluc2VuICZsdDtvbWVnYUBjc2Uub2dpLmVkdSZndDssV2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBZVVkyLCBCR1J4LCBSR0IgfSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDEvMSwgNjAvMSBdLCB3aWR0aD0oaW50KTcyMCwgaGVpZ2h0PShpbnQpeyA1NzYsIDQ4MCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZHZkZW11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5EViBzeXN0ZW0gc3RyZWFtIGRlbXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlbXV4ZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlVzZXMgbGliZHYgdG8gc2VwYXJhdGUgRFYgYXVkaW8gZnJvbSBEViB2aWRlbyAobGliZHYuc291cmNlZm9yZ2UubmV0KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+YXVkaW88L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpeyAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sIGNoYW5uZWxzPShpbnQpeyAyLCA0IH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+dmlkZW88L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZWZmZWN0di54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkYmEzN2QuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVmZmVjdHYueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmVmZmVjdHY8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5lZmZlY3QgcGx1Z2lucyBmcm9tIHRoZSBlZmZlY3R2IHByb2plY3Q8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2VmZmVjdHYvLmxpYnMvbGliZ3N0ZWZmZWN0di5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RlZmZlY3R2LnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5hZ2luZ3R2PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkFnaW5nVFYgZWZmZWN0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BZ2luZ1RWIGFkZHMgYWdlIHRvIHZpZGVvIGlucHV0IHVzaW5nIHNjcmF0Y2hlcyBhbmQgZHVzdDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNhbSBMYW50aW5nYSAmbHQ7c2xvdWtlbkBkZXZvbHV0aW9uLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZGljZXR2PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkRpY2VUViBlZmZlY3Q8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPiZhcG9zO0RpY2VzJmFwb3M7IHRoZSBzY3JlZW4gdXAgaW50byBtYW55IHNtYWxsIHNxdWFyZXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuYmUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmVkZ2V0djwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5FZGdlVFYgZWZmZWN0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BcHBseSBlZGdlIGRldGVjdCBvbiB2aWRlbzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPm9wdHY8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+T3BUViBlZmZlY3Q8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk9wdGljYWwgYXJ0IG1lZXRzIHJlYWwtdGltZSB2aWRlbyBlZmZlY3Q8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cXVhcmt0djwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5RdWFya1RWIGVmZmVjdDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TW90aW9uIGRpc3NvbHZlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkZVS1VDSEksIEtlbnRhcm91ICZsdDtmdWt1Y2hpQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IHhSR0IsIHhCR1IsIEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IHhSR0IsIHhCR1IsIEJHUngsIFJHQnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cmFkaW9hY3R2PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJhZGlvYWNUViBlZmZlY3Q8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPm1vdGlvbi1lbmxpZ2h0bWVudCBlZmZlY3Q8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5GVUtVQ0hJLCBLZW50YXJvdSAmbHQ7ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIEJHUnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIEJHUnggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cmV2dHY8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UmV2VFYgZWZmZWN0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BIHZpZGVvIHdhdmVmb3JtIG1vbml0b3IgZm9yIGVhY2ggbGluZSBvZiB2aWRlbyBwcm9jZXNzZWQ8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuYmUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJpcHBsZXR2PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJpcHBsZVRWIGVmZmVjdDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmlwcGxlVFYgZG9lcyByaXBwbGUgbWFyayBlZmZlY3Qgb24gdGhlIHZpZGVvIGlucHV0PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RlVLVUNISSwgS2VudGFyb3UgJmx0O2Z1a3VjaGlAdXNlcnMuc291cmNlZm9yZ2UubmV0Jmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4LCB4QkdSLCB4UkdCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBCR1J4LCBSR0J4LCB4QkdSLCB4UkdCIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnNoYWdhZGVsaWN0djwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TaGFnYWRlbGljVFY8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk9oIGJlaGF2ZSwgU2hhZ2VkZWxpY1RWIG1ha2VzIGltYWdlcyBzaGFnYWRlbGljITwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BjaGVsbG8uYmUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSeCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylCR1J4LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5zdHJlYWt0djwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TdHJlYWtUViBlZmZlY3Q8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlN0cmVha1RWIG1ha2VzIGFmdGVyIGltYWdlcyBvZiBtb3Zpbmcgb2JqZWN0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkZVS1VDSEksIEtlbnRhcm91ICZsdDtmdWt1Y2hpQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQkdSeCwgUkdCeCwgeEJHUiwgeFJHQiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQkdSeCwgUkdCeCwgeEJHUiwgeFJHQiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT52ZXJ0aWdvdHY8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VmVydGlnb1RWIGVmZmVjdDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QSBsb29wYmFjayBhbHBoYSBibGVuZGluZyBlZmZlY3RvciB3aXRoIHJvdGF0aW5nIGFuZCBzY2FsaW5nPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmJlJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgQkdSeCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgQkdSeCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT53YXJwdHY8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+V2FycFRWIGVmZmVjdDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+V2FycFRWIGRvZXMgcmVhbHRpbWUgZ29vJmFwb3M7aW5nIG9mIHRoZSB2aWRlbyBpbnB1dDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNhbSBMYW50aW5nYSAmbHQ7c2xvdWtlbkBkZXZvbHV0aW9uLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIHhSR0IsIEJHUngsIHhCR1IgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIHhSR0IsIEJHUngsIHhCR1IgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWVxdWFsaXplci54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiZTY2Ny4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZXF1YWxpemVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmVxdWFsaXplcjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkdTdHJlYW1lciBhdWRpbyBlcXVhbGl6ZXJzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9lcXVhbGl6ZXIvLmxpYnMvbGliZ3N0ZXF1YWxpemVyLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGVxdWFsaXplci5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZXF1YWxpemVyLTEwYmFuZHM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+MTAgQmFuZCBFcXVhbGl6ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRpcmVjdCBGb3JtIDEwIGJhbmQgSUlSIGVxdWFsaXplcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0ZWZhbiBLb3N0ICZsdDtlbnNvbmljQHVzZXJzLnNmLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMTAwMCwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgRjMyTEUsIEY2NExFIH0sIHJhdGU9KGludClbIDEwMDAsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5lcXVhbGl6ZXItM2JhbmRzPC9uYW1lPgotICAgICAgPGxvbmduYW1lPjMgQmFuZCBFcXVhbGl6ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRpcmVjdCBGb3JtIDMgYmFuZCBJSVIgZXF1YWxpemVyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U3RlZmFuIEtvc3QgJmx0O2Vuc29uaWNAdXNlcnMuc2YubmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxMDAwLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMTAwMCwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmVxdWFsaXplci1uYmFuZHM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TiBCYW5kIEVxdWFsaXplcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGlyZWN0IEZvcm0gSUlSIGVxdWFsaXplcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkJlbmphbWluIE90dGUgJmx0O290dGVAZ25vbWUub3JnJmd0OywgU3RlZmFuIEtvc3QgJmx0O2Vuc29uaWNAdXNlcnMuc2YubmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxMDAwLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBGMzJMRSwgRjY0TEUgfSwgcmF0ZT0oaW50KVsgMTAwMCwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbGFjLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZkM2JjZS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmxhYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5mbGFjPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+VGhlIEZMQUMgTG9zc2xlc3MgY29tcHJlc3NvciBDb2RlYzwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9leHQvZmxhYy8ubGlicy9saWJnc3RmbGFjLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGZsYWMuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmZsYWNkZWM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RkxBQyBhdWRpbyBkZWNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZWNvZGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5EZWNvZGVzIEZMQUMgbG9zc2xlc3MgYXVkaW8gc3RyZWFtczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbUBjZW50cmljdWxhci5uZXQmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1mbGFjLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZSwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCA4IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMjRfMzJMRSwgUzMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KVsgMSwgOCBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZmxhY2VuYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GTEFDIGF1ZGlvIGVuY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0VuY29kZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkVuY29kZXMgYXVkaW8gd2l0aCB0aGUgRkxBQyBsb3NzbGVzcyBhdWRpbyBlbmNvZGVyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGNoZWxsby5iZSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzI0TEUsIFMyNF8zMkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCA2NTUzNTAgXSwgY2hhbm5lbHM9KGludCkxOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNExFLCBTMjRfMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMzsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMjRMRSwgUzI0XzMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KTMsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDc7IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzI0TEUsIFMyNF8zMkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCA2NTUzNTAgXSwgY2hhbm5lbHM9KGludCk0LCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDMzOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNExFLCBTMjRfMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpNSwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAzNzsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzgsIFMxNkxFLCBTMjRMRSwgUzI0XzMyTEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDY1NTM1MCBdLCBjaGFubmVscz0oaW50KTYsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwM2Y7IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzI0TEUsIFMyNF8zMkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCA2NTUzNTAgXSwgY2hhbm5lbHM9KGludCk3LCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMTNmOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgUzE2TEUsIFMyNExFLCBTMjRfMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgNjU1MzUwIF0sIGNoYW5uZWxzPShpbnQpOCwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMGMzZjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWZsYWM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5mbGFjdGFnPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkZMQUMgdGFnZ2VyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Gb3JtYXR0ZXIvTWV0YWRhdGE8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlJld3JpdGUgdGFncyBpbiBhIEZMQUMgZmlsZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkNocmlzdG9waGUgRmVyZ2VhdSAmbHQ7dGV1ZkBnbm9tZS5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWZsYWM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1mbGFjPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWZsdi54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBhMzIyMi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx2LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmZsdjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkZMViBtdXhpbmcgYW5kIGRlbXV4aW5nIHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvZmx2Ly5saWJzL2xpYmdzdGZsdi5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RmbHYuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmZsdmRlbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkZMViBEZW11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZW11eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5EZW11eCBGTFYgZmVlZHMgaW50byBkaWdpdGFsIHN0cmVhbXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KdWxpZW4gTW91dHRlICZsdDtqdWxpZW5AbW91dHRlLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtZmx2PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpc3dmLCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH07IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMSwgbGF5ZXI9KGludCkzLCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpeyA1NTEyLCA4MDAwLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH0sIHBhcnNlZD0oYm9vbGVhbil0cnVlOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXcsIGZyYW1lZD0oYm9vbGVhbil0cnVlOyBhdWRpby94LW5lbGx5bW9zZXIsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDQ0MTAwIH07IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFU4LCBTMTZMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9OyBhdWRpby94LWFsYXcsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgYXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9OyBhdWRpby94LXNwZWV4LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCkxNjAwMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT52aWRlbzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtZmxhc2gtdmlkZW8sIGZsdnZlcnNpb249KGludCkxOyB2aWRlby94LWZsYXNoLXNjcmVlbjsgdmlkZW8veC12cDYtZmxhc2g7IHZpZGVvL3gtdnA2LWFscGhhOyB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5mbHZtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+RkxWIG11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9NdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TXV4ZXMgdmlkZW8vYXVkaW8gc3RyZWFtcyBpbnRvIGEgRkxWIHN0cmVhbTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylzd2YsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTMsIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludCl7IDU1MTIsIDgwMDAsIDExMDI1LCAyMjA1MCwgNDQxMDAgfSwgcGFyc2VkPShib29sZWFuKXRydWU7IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpeyA0LCAyIH0sIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXc7IGF1ZGlvL3gtbmVsbHltb3NlciwgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgNDQxMDAgfTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgVTgsIFMxNkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH07IGF1ZGlvL3gtYWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KXsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9OyBhdWRpby94LW11bGF3LCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH07IGF1ZGlvL3gtc3BlZXgsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTE2MDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LWZsYXNoLXZpZGVvOyB2aWRlby94LWZsYXNoLXNjcmVlbjsgdmlkZW8veC12cDYtZmxhc2g7IHZpZGVvL3gtdnA2LWFscGhhOyB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1mbHY8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZmx4ZGVjLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDg3YTMzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1mbHhkZWMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+Zmx4ZGVjPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+RkxDL0ZMSS9GTFggdmlkZW8gZGVjb2RlcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvZmx4Ly5saWJzL2xpYmdzdGZseGRlYy5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RmbHhkZWMuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmZseGRlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5GTFggdmlkZW8gZGVjb2RlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVjb2Rlci9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RkxDL0ZMSS9GTFggdmlkZW8gZGVjb2RlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNlcHAgV2lqbmFuZHMgJmx0O21ycmF6ekBnYXJiYWdlLWNvZGVyei5uZXQmZ3Q7LCBaZWVzaGFuIEFsaSAmbHQ7emVlbml4QGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtZmxpPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylCR1J4LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ2RrcGl4YnVmLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRlNDVmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nZGtwaXhidWYueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+Z2RrcGl4YnVmPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+R2RrUGl4YnVmLWJhc2VkIGltYWdlIGRlY29kZXIsIG92ZXJsYXkgYW5kIHNpbms8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L2dka19waXhidWYvLmxpYnMvbGliZ3N0Z2RrcGl4YnVmLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGdka3BpeGJ1Zi5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+Z2RrcGl4YnVmZGVjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkdka1BpeGJ1ZiBpbWFnZSBkZWNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZWNvZGVyL0ltYWdlPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5EZWNvZGVzIGltYWdlcyBpbiBhIHZpZGVvIHN0cmVhbSB1c2luZyBHZGtQaXhidWY8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5EYXZpZCBBLiBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDssIFJlbmF0byBGaWxobyAmbHQ7cmVuYXRvLmZpbGhvQGluZHQub3JnLmJyJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+aW1hZ2UvcG5nOyBpbWFnZS9naWY7IGltYWdlL3gtaWNvbjsgYXBwbGljYXRpb24veC1uYXZpLWFuaW1hdGlvbjsgaW1hZ2UveC1jbXUtcmFzdGVyOyBpbWFnZS94LXN1bi1yYXN0ZXI7IGltYWdlL3gtcGl4bWFwOyBpbWFnZS90aWZmOyBpbWFnZS94LXBvcnRhYmxlLWFueW1hcDsgaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXA7IGltYWdlL3gtcG9ydGFibGUtZ3JheW1hcDsgaW1hZ2UveC1wb3J0YWJsZS1waXhtYXA7IGltYWdlL2JtcDsgaW1hZ2UveC1ibXA7IGltYWdlL3gtTVMtYm1wOyBpbWFnZS92bmQud2FwLndibXA7IGltYWdlL3gtYml0bWFwOyBpbWFnZS94LXRnYTsgaW1hZ2UveC1wY3g7IGltYWdlL3N2ZzsgaW1hZ2Uvc3ZnK3htbDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylSR0JBLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5nZGtwaXhidWZvdmVybGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkdka1BpeGJ1ZiBPdmVybGF5PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5PdmVybGF5IGFuIGltYWdlIG9udG8gYSB2aWRlbyBzdHJlYW08L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW0gY2VudHJpY3VsYXIgbmV0Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgUkdCLCBCR1IsIEJHUngsIHhSR0IsIHhCR1IsIFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEk0MjAsIFlWMTIsIEFZVVYsIFlVWTIsIFVZVlksIHYzMDgsIHYyMTAsIHYyMTYsIFk0MUIsIFk0MkIsIFk0NDQsIFlWWVUsIE5WMTIsIE5WMjEsIFVZVlAsIFJHQjE2LCBCR1IxNiwgUkdCMTUsIEJHUjE1LCBVWVZQLCBBNDIwLCBZVVY5LCBZVlU5LCBJWVUxLCBBUkdCNjQsIEFZVVY2NCwgcjIxMCwgSTQyMF8xMExFLCBJNDIwXzEwQkUsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgUkdCLCBCR1IsIEJHUngsIHhSR0IsIHhCR1IsIFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEk0MjAsIFlWMTIsIEFZVVYsIFlVWTIsIFVZVlksIHYzMDgsIHYyMTAsIHYyMTYsIFk0MUIsIFk0MkIsIFk0NDQsIFlWWVUsIE5WMTIsIE5WMjEsIFVZVlAsIFJHQjE2LCBCR1IxNiwgUkdCMTUsIEJHUjE1LCBVWVZQLCBBNDIwLCBZVVY5LCBZVlU5LCBJWVUxLCBBUkdCNjQsIEFZVVY2NCwgcjIxMCwgSTQyMF8xMExFLCBJNDIwXzEwQkUsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5nZGtwaXhidWZzaW5rPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkdka1BpeGJ1ZiBzaW5rPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5TaW5rL1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5PdXRwdXQgaW1hZ2VzIGFzIEdka1BpeGJ1ZiBvYmplY3RzIGluIGJ1cyBtZXNzYWdlczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbSBjZW50cmljdWxhciBuZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylSR0JBLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tZ29vbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjQzNTguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+Z29vbTwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkdPT00gdmlzdWFsaXphdGlvbiBmaWx0ZXI8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2dvb20vLmxpYnMvbGliZ3N0Z29vbS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3Rnb29tLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5nb29tPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkdPT006IHdoYXQgYSBHT09NITwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+VmlzdWFsaXphdGlvbjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+VGFrZXMgZnJhbWVzIG9mIGRhdGEgYW5kIG91dHB1dHMgdmlkZW8gZnJhbWVzIHVzaW5nIHRoZSBHT09NIGZpbHRlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDgwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpMSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ7IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSeCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWdvb20yazEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2Y1MDkzLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1nb29tMmsxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmdvb20yazE8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5HT09NIDJrMSB2aXN1YWxpemF0aW9uIGZpbHRlcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvZ29vbTJrMS8ubGlicy9saWJnc3Rnb29tMmsxLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGdvb20yazEuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmdvb20yazE8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+R09PTTogd2hhdCBhIEdPT00hIDJrMSBlZGl0aW9uPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5WaXN1YWxpemF0aW9uPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5UYWtlcyBmcmFtZXMgb2YgZGF0YSBhbmQgb3V0cHV0cyB2aWRlbyBmcmFtZXMgdXNpbmcgdGhlIEdPT00gMmsxIGZpbHRlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDgwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpMSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ7IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgcmF0ZT0oaW50KVsgODAwMCwgOTYwMDAgXSwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSeCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pY3lkZW11eC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMjFlZWYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWljeWRlbXV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmljeWRlbXV4PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+RGVtdXggSUNZIHRhZ3MgZnJvbSBhIHN0cmVhbTwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvaWN5ZGVtdXgvLmxpYnMvbGliZ3N0aWN5ZGVtdXguc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0aWN5ZGVtdXguc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmljeWRlbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPklDWSB0YWcgZGVtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVtdXhlci9NZXRhZGF0YTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVhZCBhbmQgb3V0cHV0IElDWSB0YWdzIHdoaWxlIGRlbXV4aW5nIHRoZSBjb250ZW50czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OywgTWljaGFlbCBTbWl0aCAmbHQ7bXNtaXRoQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1pY3ksIG1ldGFkYXRhLWludGVydmFsPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pZDNkZW11eC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYjc2Y2MuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlkM2RlbXV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmlkM2RlbXV4PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+RGVtdXggSUQzdjEgYW5kIElEM3YyIHRhZ3MgZnJvbSBhIGZpbGU8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2lkM2RlbXV4Ly5saWJzL2xpYmdzdGlkM2RlbXV4LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGlkM2RlbXV4LnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5pZDNkZW11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5JRDMgdGFnIGRlbXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlbXV4ZXIvTWV0YWRhdGE8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlJlYWQgYW5kIG91dHB1dCBJRDN2MSBhbmQgSUQzdjIgdGFncyB3aGlsZSBkZW11eGluZyB0aGUgY29udGVudHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KYW4gU2NobWlkdCAmbHQ7dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtaWQzPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW1hZ2VmcmVlemUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmZkY2U5Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbWFnZWZyZWV6ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5pbWFnZWZyZWV6ZTwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlN0aWxsIGZyYW1lIHN0cmVhbSBnZW5lcmF0b3I8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2ltYWdlZnJlZXplLy5saWJzL2xpYmdzdGltYWdlZnJlZXplLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGltYWdlZnJlZXplLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5pbWFnZWZyZWV6ZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TdGlsbCBmcmFtZSBzdHJlYW0gZ2VuZXJhdG9yPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkdlbmVyYXRlcyBhIHN0aWxsIGZyYW1lIHN0cmVhbSBmcm9tIGFuIGltYWdlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1pbnRlcmxlYXZlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThlMmUzYS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taW50ZXJsZWF2ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5pbnRlcmxlYXZlPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+QXVkaW8gaW50ZXJsZWF2ZXIvZGVpbnRlcmxlYXZlcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvaW50ZXJsZWF2ZS8ubGlicy9saWJnc3RpbnRlcmxlYXZlLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGludGVybGVhdmUuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmRlaW50ZXJsZWF2ZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBkZWludGVybGVhdmVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvQ29udmVydGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5TcGxpdHMgb25lIGludGVybGVhdmVkIG11bHRpY2hhbm5lbCBhdWRpbyBzdHJlYW0gaW50byBtYW55IG1vbm8gYXVkaW8gc3RyZWFtczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkFuZHkgV2luZ28gJmx0O3dpbmdvIGF0IHBvYm94LmNvbSZndDssIElhaW4gJmx0O2lhaW5AcHJldHR5cGVvcGxlLm9yZyZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3Nsb21vQGNpcmN1bGFyLWNoYW9zLm9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFMxNkJFLCBVMTZMRSwgVTE2QkUsIFMyNF8zMkxFLCBTMjRfMzJCRSwgVTI0XzMyTEUsIFUyNF8zMkJFLCBTMzJMRSwgUzMyQkUsIFUzMkxFLCBVMzJCRSwgUzI0TEUsIFMyNEJFLCBVMjRMRSwgVTI0QkUsIFMyMExFLCBTMjBCRSwgVTIwTEUsIFUyMEJFLCBTMThMRSwgUzE4QkUsIFUxOExFLCBVMThCRSwgRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmNfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTOCwgVTgsIFMxNkxFLCBTMTZCRSwgVTE2TEUsIFUxNkJFLCBTMjRfMzJMRSwgUzI0XzMyQkUsIFUyNF8zMkxFLCBVMjRfMzJCRSwgUzMyTEUsIFMzMkJFLCBVMzJMRSwgVTMyQkUsIFMyNExFLCBTMjRCRSwgVTI0TEUsIFUyNEJFLCBTMjBMRSwgUzIwQkUsIFUyMExFLCBVMjBCRSwgUzE4TEUsIFMxOEJFLCBVMThMRSwgVTE4QkUsIEYzMkxFLCBGMzJCRSwgRjY0TEUsIEY2NEJFIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxLCBsYXlvdXQ9KHN0cmluZyl7IG5vbi1pbnRlcmxlYXZlZCwgaW50ZXJsZWF2ZWQgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmludGVybGVhdmU8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXVkaW8gaW50ZXJsZWF2ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9Db252ZXJ0ZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkZvbGRzIG1hbnkgbW9ubyBjaGFubmVscyBpbnRvIG9uZSBpbnRlcmxlYXZlZCBhdWRpbyBzdHJlYW08L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5BbmR5IFdpbmdvICZsdDt3aW5nbyBhdCBwb2JveC5jb20mZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2lua18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxLCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFMxNkJFLCBVMTZMRSwgVTE2QkUsIFMyNF8zMkxFLCBTMjRfMzJCRSwgVTI0XzMyTEUsIFUyNF8zMkJFLCBTMzJMRSwgUzMyQkUsIFUzMkxFLCBVMzJCRSwgUzI0TEUsIFMyNEJFLCBVMjRMRSwgVTI0QkUsIFMyMExFLCBTMjBCRSwgVTIwTEUsIFUyMEJFLCBTMThMRSwgUzE4QkUsIFUxOExFLCBVMThCRSwgRjMyTEUsIEYzMkJFLCBGNjRMRSwgRjY0QkUgfSwgbGF5b3V0PShzdHJpbmcpeyBub24taW50ZXJsZWF2ZWQsIGludGVybGVhdmVkIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZm9ybWF0PShzdHJpbmcpeyBTOCwgVTgsIFMxNkxFLCBTMTZCRSwgVTE2TEUsIFUxNkJFLCBTMjRfMzJMRSwgUzI0XzMyQkUsIFUyNF8zMkxFLCBVMjRfMzJCRSwgUzMyTEUsIFMzMkJFLCBVMzJMRSwgVTMyQkUsIFMyNExFLCBTMjRCRSwgVTI0TEUsIFUyNEJFLCBTMjBMRSwgUzIwQkUsIFUyMExFLCBVMjBCRSwgUzE4TEUsIFMxOEJFLCBVMThMRSwgVTE4QkUsIEYzMkxFLCBGMzJCRSwgRjY0TEUsIEY2NEJFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWlzb21wNC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlZGJjNi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4taXNvbXA0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5pc29tcDQ8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5JU08gYmFzZSBtZWRpYSBmaWxlIGZvcm1hdCBzdXBwb3J0IChtcDQsIDNncHAsIHF0LCBtajIpPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9pc29tcDQvLmxpYnMvbGliZ3N0aXNvbXA0LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdGlzb21wNC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+M2dwcG11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT4zR1BQIE11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9NdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TXVsdGlwbGV4IGF1ZGlvIGFuZCB2aWRlbyBpbnRvIGEgM0dQUCBmaWxlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGhpYWdvIFNvdXNhIFNhbnRvcyAmbHQ7dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnImZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+YXVkaW9fJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL0FNUiwgcmF0ZT0oaW50KTgwMDAsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF07IGF1ZGlvL0FNUi1XQiwgcmF0ZT0oaW50KTE2MDAwLCBjaGFubmVscz0oaW50KVsgMSwgMiBdOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXcsIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1hYzMsIGNoYW5uZWxzPShpbnQpWyAxLCA2IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zdWJ0aXRsZV8ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dGV4dC94LXJhdywgZm9ybWF0PShzdHJpbmcpdXRmODwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT52aWRlb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kaXZ4LCBkaXZ4dmVyc2lvbj0oaW50KTUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpM2dwcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmlzbWxtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+SVNNTCBNdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvTXV4ZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk11bHRpcGxleCBhdWRpbyBhbmQgdmlkZW8gaW50byBhIElTTUwgZmlsZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRoaWFnbyBTb3VzYSBTYW50b3MgJmx0O3RoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylyYXcsIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT52aWRlb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZGl2eCwgZGl2eHZlcnNpb249KGludCk1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmMsIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3F1aWNrdGltZSwgdmFyaWFudD0oc3RyaW5nKWlzby1mcmFnbWVudGVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bWoybXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPk1KMiBNdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvTXV4ZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk11bHRpcGxleCBhdWRpbyBhbmQgdmlkZW8gaW50byBhIE1KMiBmaWxlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGhpYWdvIFNvdXNhIFNhbnRvcyAmbHQ7dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnImZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+YXVkaW9fJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBTMTZCRSwgUzgsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+dmlkZW9fJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmltYWdlL3gtajJjLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyBpbWFnZS94LWpwYywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby9tajI8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5tcDRtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TVA0IE11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9NdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TXVsdGlwbGV4IGF1ZGlvIGFuZCB2aWRlbyBpbnRvIGEgTVA0IGZpbGU8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaGlhZ28gU291c2EgU2FudG9zICZsdDt0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5iciZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5hdWRpb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KVsgMSwgMyBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdywgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LWFjMywgY2hhbm5lbHM9KGludClbIDEsIDYgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LWFsYWMsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1vcHVzLCBjaGFubmVsLW1hcHBpbmctZmFtaWx5PShpbnQpWyAwLCAyNTUgXSwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnRpdGxlXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz50ZXh0L3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl1dGY4PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kaXZ4LCBkaXZ4dmVyc2lvbj0oaW50KTUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtbXA0LXBhcnQsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50PShzdHJpbmcpaXNvPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cXRkZW11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5RdWlja1RpbWUgZGVtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVtdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGVtdWx0aXBsZXggYSBRdWlja1RpbWUgZmlsZSBpbnRvIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vcXVpY2t0aW1lOyB2aWRlby9tajI7IGF1ZGlvL3gtbTRhOyBhcHBsaWNhdGlvbi94LTNncDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5hdWRpb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zdWJ0aXRsZV8ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT52aWRlb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnF0bW9vdnJlY292ZXI8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UVQgTW9vdiBSZWNvdmVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5VdGlsPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5SZWNvdmVycyB1bmZpbmlzaGVkIHF0bXV4IGZpbGVzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGhpYWdvIFNhbnRvcyAmbHQ7dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5xdG11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5RdWlja1RpbWUgTXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL011eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5NdWx0aXBsZXggYXVkaW8gYW5kIHZpZGVvIGludG8gYSBRdWlja1RpbWUgZmlsZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRoaWFnbyBTb3VzYSBTYW50b3MgJmx0O3RoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMzJMRSwgUzMyQkUsIFMyNExFLCBTMjRCRSwgUzE2TEUsIFMxNkJFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTMsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3LCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWR2aSwgYmxvY2tfYWxpZ249KGludClbIDY0LCA4MDk2IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1hbGF3LCBjaGFubmVscz0oaW50KVsgMSwgMiBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtbXVsYXcsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8vQU1SLCByYXRlPShpbnQpODAwMCwgY2hhbm5lbHM9KGludClbIDEsIDIgXTsgYXVkaW8vQU1SLVdCLCByYXRlPShpbnQpMTYwMDAsIGNoYW5uZWxzPShpbnQpWyAxLCAyIF07IGF1ZGlvL3gtYWxhYywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnRpdGxlXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz50ZXh0L3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl1dGY4PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0IsIFVZVlksIHYyMTAgfSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZGl2eCwgZGl2eHZlcnNpb249KGludCk1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXByb3JlcywgdmFyaWFudD0oc3RyaW5nKXsgc3RhbmRhcmQsIGx0LCBocSwgcHJveHkgfSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmMsIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXN2cSwgc3ZxdmVyc2lvbj0oaW50KTMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgaW1hZ2UvanBlZywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDgsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtZGlyYWMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcXQtcGFydCwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby9xdWlja3RpbWUsIHZhcmlhbnQ9KHN0cmluZylhcHBsZTsgdmlkZW8vcXVpY2t0aW1lPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRweHF0ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIHBhY2tldCBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgUXVpY2t0aW1lIGF1ZGlvL3ZpZGVvIGZyb20gUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgbWVkaWE9KHN0cmluZyl7IGF1ZGlvLCB2aWRlbyB9LCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZyl7IFgtUVQsIFgtUVVJQ0tUSU1FIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWphY2sueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWQyNjRmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qYWNrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmphY2s8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5KQUNLIGF1ZGlvIGVsZW1lbnRzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC9qYWNrLy5saWJzL2xpYmdzdGphY2suc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0amFjay5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+amFja2F1ZGlvc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5BdWRpbyBTaW5rIChKYWNrKTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+T3V0cHV0IGF1ZGlvIHRvIGEgSkFDSyBzZXJ2ZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUYzMkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+amFja2F1ZGlvc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkF1ZGlvIFNvdXJjZSAoSmFjayk8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNvdXJjZS9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q2FwdHVyZXMgYXVkaW8gZnJvbSBhIEpBQ0sgc2VydmVyPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VHJpc3RhbiBNYXR0aGV3cyAmbHQ7dHJpc3RhbkBzYXQucWMuY2EmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUYzMkxFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLWpwZWcueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGEzNWVmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1qcGVnLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPmpwZWc8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5KUGVnIHBsdWdpbiBsaWJyYXJ5PC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC9qcGVnLy5saWJzL2xpYmdzdGpwZWcuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0anBlZy5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+anBlZ2RlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5KUEVHIGltYWdlIGRlY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlY29kZXIvSW1hZ2U8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRlY29kZSBpbWFnZXMgZnJvbSBKUEVHIGZvcm1hdDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5pbWFnZS9qcGVnPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEk0MjAsIFJHQiwgQkdSLCBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSLCBHUkFZOCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5qcGVnZW5jPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkpQRUcgaW1hZ2UgZW5jb2RlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRW5jb2Rlci9JbWFnZTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RW5jb2RlIGltYWdlcyBpbiBKUEVHIGZvcm1hdDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0B0dmQuYmUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJNDIwLCBZVjEyLCBZVVkyLCBVWVZZLCBZNDFCLCBZNDJCLCBZVllVLCBZNDQ0LCBOVjIxLCBOVjEyLCBSR0IsIEJHUiwgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgR1JBWTggfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmltYWdlL2pwZWcsIHdpZHRoPShpbnQpWyAxNiwgNjU1MzUgXSwgaGVpZ2h0PShpbnQpWyAxNiwgNjU1MzUgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF0sIHNvZi1tYXJrZXI9KGludCl7IDAsIDEsIDIsIDkgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbGV2ZWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjM3ODIxLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1sZXZlbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5sZXZlbDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkF1ZGlvIGxldmVsIHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvbGV2ZWwvLmxpYnMvbGliZ3N0bGV2ZWwuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0bGV2ZWwuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPmxldmVsPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkxldmVsPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvQW5hbHl6ZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlJNUy9QZWFrL0RlY2F5aW5nIFBlYWsgTGV2ZWwgbWVzc2FnZXIgZm9yIGF1ZGlvL3JhdzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRob21hcyBWYW5kZXIgU3RpY2hlbGUgJmx0O3Rob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBTMTZMRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tYXRyb3NrYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzhjMWMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1hdHJvc2thLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5tYXRyb3NrYTwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPk1hdHJvc2thIGFuZCBXZWJNIHN0cmVhbSBoYW5kbGluZzwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvbWF0cm9za2EvLmxpYnMvbGliZ3N0bWF0cm9za2Euc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0bWF0cm9za2Euc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPm1hdHJvc2thZGVtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TWF0cm9za2EgZGVtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVtdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGVtdXhlcyBNYXRyb3NrYS9XZWJNIHN0cmVhbXMgaW50byB2aWRlby9hdWRpby9zdWJ0aXRsZXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5HU3RyZWFtZXIgbWFpbnRhaW5lcnMgJmx0O2dzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LW1hdHJvc2thOyB2aWRlby94LW1hdHJvc2thOyB2aWRlby94LW1hdHJvc2thLTNkOyBhdWRpby93ZWJtOyB2aWRlby93ZWJtPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnRpdGxlXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dGV4dC94LXJhdywgZm9ybWF0PShzdHJpbmcpcGFuZ28tbWFya3VwOyBhcHBsaWNhdGlvbi94LXNzYTsgYXBwbGljYXRpb24veC1hc3M7IGFwcGxpY2F0aW9uL3gtdXNmOyBzdWJwaWN0dXJlL3gtZHZkOyBzdWJwaWN0dXJlL3gtcGdzOyBzdWJ0aXRsZS94LWthdGU7IGFwcGxpY2F0aW9uL3gtc3VidGl0bGUtdW5rbm93bjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT52aWRlb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPm1hdHJvc2thbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPk1hdHJvc2thIG11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9NdXhlcjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+TXV4ZXMgdmlkZW8vYXVkaW8vc3VidGl0bGUgc3RyZWFtcyBpbnRvIGEgbWF0cm9za2Egc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+R1N0cmVhbWVyIG1haW50YWluZXJzICZsdDtnc3RyZWFtZXItZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpWyAxLCAzIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCl7IDIsIDQgfSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LWFjMywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LWVhYzMsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1kdHMsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC12b3JiaXMsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1mbGFjLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtb3B1czsgYXVkaW8veC1zcGVleCwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBVOCwgUzE2QkUsIFMxNkxFLCBTMjRCRSwgUzI0TEUsIFMzMkJFLCBTMzJMRSwgRjMyTEUsIEY2NExFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtdHRhLCB3aWR0aD0oaW50KXsgOCwgMTYsIDI0IH0sIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludClbIDgwMDAsIDk2MDAwIF07IGF1ZGlvL3gtcG4tcmVhbGF1ZGlvLCByYXZlcnNpb249KGludCl7IDEsIDIsIDggfSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXdtYSwgd21hdmVyc2lvbj0oaW50KVsgMSwgMyBdLCBibG9ja19hbGlnbj0oaW50KVsgMCwgNjU1MzUgXSwgYml0cmF0ZT0oaW50KVsgMCwgNTI0Mjg4IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1hbGF3LCBjaGFubmVscz0oaW50KXsgMSwgMiB9LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXTsgYXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludCl7IDEsIDIgfSwgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF07IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWR2aSwgYmxvY2tfYWxpZ249KGludClbIDY0LCA4MTkyIF0sIGNoYW5uZWxzPShpbnQpeyAxLCAyIH0sIHJhdGU9KGludClbIDgwMDAsIDk2MDAwIF07IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWc3MjYsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3VidGl0bGVfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnN1YnRpdGxlL3gta2F0ZTsgdGV4dC94LXJhdywgZm9ybWF0PShzdHJpbmcpdXRmODsgYXBwbGljYXRpb24veC1zc2E7IGFwcGxpY2F0aW9uL3gtYXNzOyBhcHBsaWNhdGlvbi94LXVzZjsgc3VicGljdHVyZS94LWR2ZDsgYXBwbGljYXRpb24veC1zdWJ0aXRsZS11bmtub3duPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsgMSwgMiwgNCB9LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2UsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXUsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaDI2NSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWh2YzEsIGFsaWdubWVudD0oc3RyaW5nKWF1LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LWRpdngsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtaHVmZnl1diwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1kdiwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1oMjYzLCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LW1zbXBlZywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgaW1hZ2UvanBlZywgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC10aGVvcmE7IHZpZGVvL3gtZGlyYWMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtcG4tcmVhbHZpZGVvLCBybXZlcnNpb249KGludClbIDEsIDQgXSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC12cDgsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtdnA5LCB3aWR0aD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBZVVkyLCBJNDIwLCBZVjEyLCBVWVZZLCBBWVVWLCBHUkFZOCwgQkdSLCBSR0IgfSwgd2lkdGg9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMTYsIDIxNDc0ODM2NDcgXTsgdmlkZW8veC1wcm9yZXMsIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF07IHZpZGVvL3gtd212LCB3bXZ2ZXJzaW9uPShpbnQpWyAxLCAzIF0sIHdpZHRoPShpbnQpWyAxNiwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDE2LCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1tYXRyb3NrYTsgdmlkZW8veC1tYXRyb3NrYS0zZDsgYXVkaW8veC1tYXRyb3NrYTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPm1hdHJvc2thcGFyc2U8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TWF0cm9za2EgcGFyc2VyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXJzZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBhcnNlcyBNYXRyb3NrYS9XZWJNIHN0cmVhbXMgaW50byB2aWRlby9hdWRpby9zdWJ0aXRsZXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5HU3RyZWFtZXIgbWFpbnRhaW5lcnMgJmx0O2dzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LW1hdHJvc2thOyB2aWRlby94LW1hdHJvc2thOyB2aWRlby94LW1hdHJvc2thLTNkOyBhdWRpby93ZWJtOyB2aWRlby93ZWJtPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtbWF0cm9za2E7IHZpZGVvL3gtbWF0cm9za2E7IHZpZGVvL3gtbWF0cm9za2EtM2Q7IGF1ZGlvL3dlYm07IHZpZGVvL3dlYm08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT53ZWJtbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPldlYk0gbXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL011eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5NdXhlcyB2aWRlbyBhbmQgYXVkaW8gc3RyZWFtcyBpbnRvIGEgV2ViTSBzdHJlYW08L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5HU3RyZWFtZXIgbWFpbnRhaW5lcnMgJmx0O2dzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+YXVkaW9fJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtdm9yYmlzLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtb3B1cywgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnRpdGxlXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5zdWJ0aXRsZS94LWthdGU7IHRleHQveC1yYXcsIGZvcm1hdD0oc3RyaW5nKXV0Zjg7IGFwcGxpY2F0aW9uL3gtc3NhOyBhcHBsaWNhdGlvbi94LWFzczsgYXBwbGljYXRpb24veC11c2Y7IHN1YnBpY3R1cmUveC1kdmQ7IGFwcGxpY2F0aW9uL3gtc3VidGl0bGUtdW5rbm93bjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT52aWRlb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC12cDgsIHdpZHRoPShpbnQpWyAxNiwgNDA5NiBdLCBoZWlnaHQ9KGludClbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXZwOSwgd2lkdGg9KGludClbIDE2LCA0MDk2IF0sIGhlaWdodD0oaW50KVsgMTYsIDQwOTYgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vd2VibTsgYXVkaW8vd2VibTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tb25vc2NvcGUueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMTE2MzUuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW1vbm9zY29wZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5tb25vc2NvcGU8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5Nb25vc2NvcGUgdmlzdWFsaXphdGlvbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvbW9ub3Njb3BlLy5saWJzL2xpYmdzdG1vbm9zY29wZS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3Rtb25vc2NvcGUuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEuMzwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bW9ub3Njb3BlPC9uYW1lPgotICAgICAgPGxvbmduYW1lPk1vbm9zY29wZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+VmlzdWFsaXphdGlvbjwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGlzcGxheXMgYSBoaWdobHkgc3RhYmlsaXNlZCB3YXZlZm9ybSBvZiBhdWRpbyBpbnB1dDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlJpY2hhcmQgQm91bHRvbiAmbHQ7cmljaGFyZEB0YXJ0YXJ1cy5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIHJhdGU9KGludClbIDgwMDAsIDk2MDAwIF0sIGNoYW5uZWxzPShpbnQpMSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUJHUngsIHdpZHRoPShpbnQpMjU2LCBoZWlnaHQ9KGludCkxMjgsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWxhdy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMjVmMGYuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bGF3LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPm11bGF3PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+TXVMYXcgYXVkaW8gY29udmVyc2lvbiByb3V0aW5lczwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvbGF3Ly5saWJzL2xpYmdzdG11bGF3LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdG11bGF3LnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5tdWxhd2RlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5NdSBMYXcgYXVkaW8gZGVjb2RlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVjb2Rlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q29udmVydCA4Yml0IG11IGxhdyB0byAxNmJpdCBQQ008L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5aYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtbXVsYXcsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bXVsYXdlbmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TXUgTGF3IGF1ZGlvIGVuY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0VuY29kZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkNvbnZlcnQgMTZiaXQgUENNIHRvIDhiaXQgbXUgbGF3PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmFoZWVyIEFiYmFzIE1lcmFsaSAmbHQ7emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LW11bGF3LCByYXRlPShpbnQpWyA4MDAwLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1tdWx0aWZpbGUueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Nzg2ZDEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpZmlsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+bXVsdGlmaWxlPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+UmVhZHMvV3JpdGVzIGJ1ZmZlcnMgZnJvbS90byBzZXF1ZW50aWFsbHkgbmFtZWQgZmlsZXM8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L211bHRpZmlsZS8ubGlicy9saWJnc3RtdWx0aWZpbGUuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0bXVsdGlmaWxlLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5tdWx0aWZpbGVzaW5rPC9uYW1lPgotICAgICAgPGxvbmduYW1lPk11bHRpLUZpbGUgU2luazwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9GaWxlPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Xcml0ZSBidWZmZXJzIHRvIGEgc2VxdWVudGlhbGx5IG5hbWVkIHNldCBvZiBmaWxlczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhdmlkIFNjaGxlZWYgJmx0O2RzQHNjaGxlZWYub3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bXVsdGlmaWxlc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPk11bHRpLUZpbGUgU291cmNlPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvRmlsZTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVhZCBhIHNlcXVlbnRpYWxseSBuYW1lZCBzZXQgb2YgZmlsZXMgaW50byBidWZmZXJzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAc2NobGVlZi5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c3BsaXRmaWxlc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlNwbGl0LUZpbGUgU291cmNlPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvRmlsZTwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVhZCBhIHNlcXVlbnRpYWxseSBuYW1lZCBzZXQgb2YgZmlsZXMgYXMgaWYgaXQgd2FzIG9uZSBsYXJnZSBmaWxlPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltLm11bGxlckBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c3BsaXRtdXhzaW5rPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlNwbGl0IE11eGluZyBCaW48L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkdlbmVyaWMvQmluL011eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Db252ZW5pZW5jZSBiaW4gdGhhdCBtdXhlcyBpbmNvbWluZyBzdHJlYW1zIGludG8gbXVsdGlwbGUgdGltZS9zaXplIGxpbWl0ZWQgZmlsZXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KYW4gU2NobWlkdCAmbHQ7amFuQGNlbnRyaWN1bGFyLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5hdWRpb18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnRpdGxlXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+dmlkZW88L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnNwbGl0bXV4c3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlNwbGl0IEZpbGUgRGVtdXhpbmcgQmluPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljL0Jpbi9EZW11eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5Tb3VyY2UgdGhhdCByZWFkcyBhIHNldCBvZiBmaWxlcyBjcmVhdGVkIGJ5IHNwbGl0bXV4c2luazwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkphbiBTY2htaWR0ICZsdDtqYW5AY2VudHJpY3VsYXIuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPmF1ZGlvXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnN1YnRpdGxlXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnZpZGVvPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW11bHRpcGFydC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiMzNiYy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbXVsdGlwYXJ0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPm11bHRpcGFydDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPm11bHRpcGFydCBzdHJlYW0gbWFuaXB1bGF0aW9uPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9tdWx0aXBhcnQvLmxpYnMvbGliZ3N0bXVsdGlwYXJ0LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdG11bHRpcGFydC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bXVsdGlwYXJ0ZGVtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+TXVsdGlwYXJ0IGRlbXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlbXV4ZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPmRlbXV4IG11bHRpcGFydCBzdHJlYW1zPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDssIFNqb2VyZCBTaW1vbnMgJmx0O3Nqb2VyZEBsdW9uLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPm11bHRpcGFydC94LW1peGVkLXJlcGxhY2U8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+bXVsdGlwYXJ0bXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPk11bHRpcGFydCBtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvTXV4ZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPm11eCBtdWx0aXBhcnQgc3RyZWFtczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2lua18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+cmVxdWVzdDwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPm11bHRpcGFydC94LW1peGVkLXJlcGxhY2U8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW5hdmlnYXRpb250ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmNDlmYS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tbmF2aWdhdGlvbnRlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+bmF2aWdhdGlvbnRlc3Q8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5UZW1wbGF0ZSBmb3IgYSB2aWRlbyBmaWx0ZXI8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L2RlYnVndXRpbHMvLmxpYnMvbGliZ3N0bmF2aWdhdGlvbnRlc3Quc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0bmF2aWdhdGlvbnRlc3Quc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPm5hdmlnYXRpb250ZXN0PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlZpZGVvIG5hdmlnYXRpb24gdGVzdDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+SGFuZGxlIG5hdmlnYXRpb24gZXZlbnRzIHNob3dpbmcgYSBibGFjayBzcXVhcmUgZm9sbG93aW5nIG1vdXNlIHBvaW50ZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5EYXZpZCBTY2hsZWVmICZsdDtkc0BzY2hsZWVmLm9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3M0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxN2E5OS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzNC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5vc3M0PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+T3BlbiBTb3VuZCBTeXN0ZW0gKE9TUykgdmVyc2lvbiA0IHN1cHBvcnQgZm9yIEdTdHJlYW1lcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9zeXMvb3NzNC8ubGlicy9saWJnc3Rvc3M0YXVkaW8uc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0b3NzNGF1ZGlvLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5vc3M0c2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5PU1MgdjQgQXVkaW8gU2luazwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+T3V0cHV0IHRvIGEgc291bmQgY2FyZCB2aWEgT1NTIHZlcnNpb24gNDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlRpbS1QaGlsaXBwIE3DvGxsZXIgJmx0O3RpbSBjZW50cmljdWxhciBuZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWFsYXcsIHJhdGU9KGludClbIDEsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgNDA5NiBdOyBhdWRpby94LW11bGF3LCByYXRlPShpbnQpWyAxLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDQwOTYgXTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzMyTEUsIFMzMkJFLCBTMjRfMzJMRSwgUzI0XzMyQkUsIFMyNExFLCBTMTZMRSwgUzE2QkUsIFUxNkxFLCBVMTZCRSwgUzgsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDQwOTYgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPm9zczRzcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+T1NTIHY0IEF1ZGlvIFNvdXJjZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5DYXB0dXJlIGZyb20gYSBzb3VuZCBjYXJkIHZpYSBPU1MgdmVyc2lvbiA0PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltIGNlbnRyaWN1bGFyIG5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWFsYXcsIHJhdGU9KGludClbIDEsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgNDA5NiBdOyBhdWRpby94LW11bGF3LCByYXRlPShpbnQpWyAxLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDQwOTYgXTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzMyTEUsIFMzMkJFLCBTMjRfMzJMRSwgUzI0XzMyQkUsIFMyNExFLCBTMTZMRSwgUzE2QkUsIFUxNkxFLCBVMTZCRSwgUzgsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAxOTIwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDQwOTYgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3NzYXVkaW8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzlmYjZmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3NhdWRpby54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5vc3NhdWRpbzwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPk9TUyAoT3BlbiBTb3VuZCBTeXN0ZW0pIHN1cHBvcnQgZm9yIEdTdHJlYW1lcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9zeXMvb3NzLy5saWJzL2xpYmdzdG9zc2F1ZGlvLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdG9zc2F1ZGlvLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5vc3NzaW5rPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkF1ZGlvIFNpbmsgKE9TUyk8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk91dHB1dCB0byBhIHNvdW5kIGNhcmQgdmlhIE9TUzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY2hlbGxvLmJlJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIFUxNkxFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkxOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgVTE2TEUsIFM4LCBVOCB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KTIsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5vc3NzcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXVkaW8gU291cmNlIChPU1MpPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkNhcHR1cmUgZnJvbSBhIHNvdW5kIGNhcmQgdmlhIE9TUzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBVMTZMRSwgUzgsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpMTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIFUxNkxFLCBTOCwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludCkyLCBjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgwMDAwMDAwMDAwMDAwMDAzPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zeGF1ZGlvLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3hhdWRpby54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MThhNGEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLW9zeGF1ZGlvLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPm9zeGF1ZGlvPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+T1NYIChNYWMgT1MgWCkgYXVkaW8gc3VwcG9ydCBmb3IgR1N0cmVhbWVyPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL3N5cy9vc3hhdWRpby8ubGlicy9saWJnc3Rvc3hhdWRpby5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3Rvc3hhdWRpby5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjAuMTAuNS4xPC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgQ1ZTL3ByZXJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5vc3hhdWRpb3Npbms8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXVkaW8gU2luayAoT1NYKTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+T3V0cHV0IHRvIGEgc291bmQgY2FyZCBpbiBPUyBYPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmFoZWVyIEFiYmFzIE1lcmFsaSAmbHQ7emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmcmZ3Q7PC9hdXRob3I+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+b3N4YXVkaW9zcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+QXVkaW8gU291cmNlIChPU1gpPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPklucHV0IGZyb20gYSBzb3VuZCBjYXJkIGluIE9TIFg8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5aYWhlZXIgQWJiYXMgTWVyYWxpICZsdDt6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3h2aWRlby54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tb3N4dmlkZW8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWJkZWViLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1vc3h2aWRlby54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5vc3h2aWRlbzwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPk9TWCBuYXRpdmUgdmlkZW8gb3V0cHV0IHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9leHQvb3N4dmlkZW8vLmxpYnMvbGliZ3N0b3N4dmlkZW8uc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0b3N4dmlkZW8uc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4wLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtYmFkPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdzdHJlYW1lcjwvcGFja2FnZT4KLSAgPG9yaWdpbj5odHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZzwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5vc3h2aWRlb3Npbms8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+T1NYIFZpZGVvIHNpbms8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk9TWCBuYXRpdmUgdmlkZW9zaW5rPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmFoZWVyIEFiYmFzIE1lcmFsaSAmbHQ7emFoZWVyYWJhcyBhdCBtZXJhbGkgZG90IG9yZyZndDs8L2F1dGhvcj4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wbmcueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YjljOTQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXBuZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5wbmc8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5QTkcgcGx1Z2luIGxpYnJhcnk8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L2xpYnBuZy8ubGlicy9saWJnc3Rwbmcuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0cG5nLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5wbmdkZWM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UE5HIGltYWdlIGRlY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlY29kZXIvSW1hZ2U8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRlY29kZSBhIHBuZyB2aWRlbyBmcmFtZSB0byBhIHJhdyBpbWFnZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5pbWFnZS9wbmc8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCQSwgUkdCLCBBUkdCNjQsIEdSQVk4LCBHUkFZMTZfQkUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cG5nZW5jPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlBORyBpbWFnZSBlbmNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9FbmNvZGVyL0ltYWdlPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FbmNvZGUgYSB2aWRlbyBmcmFtZSB0byBhIC5wbmcgaW1hZ2U8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KZXJlbXkgU0lNT04gJmx0O2pzaW1vbjEzQHlhaG9vLmZyJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCQSwgUkdCLCBHUkFZOCwgR1JBWTE2X0JFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5pbWFnZS9wbmcsIHdpZHRoPShpbnQpWyAxNiwgMTAwMDAwMCBdLCBoZWlnaHQ9KGludClbIDE2LCAxMDAwMDAwIF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXB1bHNlYXVkaW8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM0NWNhLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1wdWxzZWF1ZGlvLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnB1bHNlYXVkaW88L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5QdWxzZUF1ZGlvIHBsdWdpbiBsaWJyYXJ5PC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC9wdWxzZS8ubGlicy9saWJnc3RwdWxzZS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RwdWxzZS5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cHVsc2VzaW5rPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlB1bHNlQXVkaW8gQXVkaW8gU2luazwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGxheXMgYXVkaW8gdG8gYSBQdWxzZUF1ZGlvIHNlcnZlcjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkxlbm5hcnQgUG9ldHRlcmluZzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUzE2TEUsIFMxNkJFLCBGMzJMRSwgRjMyQkUsIFMzMkxFLCBTMzJCRSwgUzI0TEUsIFMyNEJFLCBTMjRfMzJMRSwgUzI0XzMyQkUsIFU4IH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAzMiBdOyBhdWRpby94LWFsYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDMyIF07IGF1ZGlvL3gtbXVsYXcsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDMyIF07IGF1ZGlvL3gtYWMzLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZTsgYXVkaW8veC1lYWMzLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZTsgYXVkaW8veC1kdHMsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBibG9jay1zaXplPShpbnQpeyA1MTIsIDEwMjQsIDIwNDggfTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBtcGVnYXVkaW92ZXJzaW9uPShpbnQpWyAxLCAyIF0sIHBhcnNlZD0oYm9vbGVhbil0cnVlOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KXsgMiwgNCB9LCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWFkdHM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5wdWxzZXNyYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5QdWxzZUF1ZGlvIEF1ZGlvIFNvdXJjZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5DYXB0dXJlcyBhdWRpbyBmcm9tIGEgUHVsc2VBdWRpbyBzZXJ2ZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5MZW5uYXJ0IFBvZXR0ZXJpbmc8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBTMTZMRSwgUzE2QkUsIEYzMkxFLCBGMzJCRSwgUzMyTEUsIFMzMkJFLCBTMjRMRSwgUzI0QkUsIFMyNF8zMkxFLCBTMjRfMzJCRSwgVTggfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDMyIF07IGF1ZGlvL3gtYWxhdywgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMzIgXTsgYXVkaW8veC1tdWxhdywgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMzIgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1yZXBsYXlnYWluLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFiYjdkMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcmVwbGF5Z2Fpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5yZXBsYXlnYWluPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+UmVwbGF5R2FpbiB2b2x1bWUgbm9ybWFsaXphdGlvbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3QvcmVwbGF5Z2Fpbi8ubGlicy9saWJnc3RyZXBsYXlnYWluLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHJlcGxheWdhaW4uc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJnYW5hbHlzaXM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UmVwbGF5R2FpbiBhbmFseXNpczwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0FuYWx5emVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QZXJmb3JtIHRoZSBSZXBsYXlHYWluIGFuYWx5c2lzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+UmVuw6kgU3RhZGxlciAmbHQ7bWFpbEByZW5lc3RhZGxlci5kZSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpeyA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIFMxNkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KTIsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDMsIHJhdGU9KGludCl7IDgwMDAsIDExMDI1LCAxMjAwMCwgMTYwMDAsIDIyMDUwLCAyNDAwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEYzMkxFLCBTMTZMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpeyA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsgYXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgRjMyTEUsIFMxNkxFIH0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KTIsIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDAwMDAwMDAwMDAwMDAwMDMsIHJhdGU9KGludCl7IDgwMDAsIDExMDI1LCAxMjAwMCwgMTYwMDAsIDIyMDUwLCAyNDAwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cmdsaW1pdGVyPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJlcGxheUdhaW4gbGltaXRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QXBwbHkgc2lnbmFsIGNvbXByZXNzaW9uIHRvIHJhdyBhdWRpbyBkYXRhPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+UmVuw6kgU3RhZGxlciAmbHQ7bWFpbEByZW5lc3RhZGxlci5kZSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylGMzJMRSwgbGF5b3V0PShzdHJpbmcpeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpRjMyTEUsIGxheW91dD0oc3RyaW5nKXsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZCB9LCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5yZ3ZvbHVtZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SZXBsYXlHYWluIHZvbHVtZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QXBwbHkgUmVwbGF5R2FpbiB2b2x1bWUgYWRqdXN0bWVudDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlJlbsOpIFN0YWRsZXIgJmx0O21haWxAcmVuZXN0YWRsZXIuZGUmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgUzE2TEUgfSwgbGF5b3V0PShzdHJpbmcpeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgUzE2TEUgfSwgbGF5b3V0PShzdHJpbmcpeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH0sIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHAueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjM2RhNzEuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0cC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODE5ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnJ0cDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlJlYWwtdGltZSBwcm90b2NvbCBwbHVnaW5zPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9ydHAvLmxpYnMvbGliZ3N0cnRwLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHJ0cC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXN0ZXJpc2toMjYzPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBBc3RlcmlzayBIMjYzIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgSDI2MyB2aWRlbyBmcm9tIFJUUCBhbmQgZW5jb2RlcyBpbiBBc3RlcmlzayBIMjYzIGZvcm1hdDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPk5laWwgU3RyYXRmb3JkICZsdDtuZWlsc0B2aXBhZGlhLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjMtMTk5ODwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LWFzdGVyaXNraDI2MzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cEwxNmRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBhdWRpbyBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIHJhdyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmVlc2hhbiBBbGkgJmx0O3phazE0N0B5YWhvby5jb20mZ3Q7LFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDE2OyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KXsgMTAsIDExIH0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2QkUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBMMTZwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIGF1ZGlvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZSBSYXcgYXVkaW8gaW50byBSVFAgcGFja2V0cyAoUkZDIDM1NTEpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZCRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylMMTYsIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDE2LCBwYXlsb2FkPShpbnQpMTAsIGNsb2NrLXJhdGU9KGludCk0NDEwMDsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGVuY29kaW5nLW5hbWU9KHN0cmluZylMMTYsIHBheWxvYWQ9KGludCkxMSwgY2xvY2stcmF0ZT0oaW50KTQ0MTAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwTDI0ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIGF1ZGlvIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgcmF3IDI0LWJpdCBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmVlc2hhbiBBbGkgJmx0O3phazE0N0B5YWhvby5jb20mZ3Q7LFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7LERhdmlkIEhvbHJveWQgJmx0O2RhdmVAYmFkZ2Vycy1pbi1mb2lsLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUwyNDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzI0QkUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBMMjRwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIGF1ZGlvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZSBSYXcgMjQtYml0IGF1ZGlvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzMTkwKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7LERhdmlkIEhvbHJveWQgJmx0O2RhdmVAYmFkZ2Vycy1pbi1mb2lsLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVMyNEJFLCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBjaGFubmVscz0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUwyNCwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGFjM2RlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBBQzMgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBBQzMgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDQxODQpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpeyAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylBQzM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vYWMzPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwYWMzcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBBQzMgYXVkaW8gcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQgQUMzIGF1ZGlvIGFzIFJUUCBwYWNrZXRzIChSRkMgNDE4NCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vYWMzOyBhdWRpby94LWFjMzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpeyAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylBQzM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBhbXJkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgQU1SIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgQU1SIG9yIEFNUi1XQiBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzI2Nyk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQU1SLCBvY3RldC1hbGlnbj0oc3RyaW5nKTE7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpMTYwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylBTVItV0IsIG9jdGV0LWFsaWduPShzdHJpbmcpMTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby9BTVIsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA7IGF1ZGlvL0FNUi1XQiwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpMTYwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBhbXJwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEFNUiBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZC1lbmNvZGUgQU1SIG9yIEFNUi1XQiBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMzI2Nyk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vQU1SLCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwOyBhdWRpby9BTVItV0IsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTE2MDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQU1SLCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLCBvY3RldC1hbGlnbj0oc3RyaW5nKTEsIGNyYz0oc3RyaW5nKTAsIHJvYnVzdC1zb3J0aW5nPShzdHJpbmcpMCwgaW50ZXJsZWF2aW5nPShzdHJpbmcpMCwgbW9kZS1zZXQ9KGludClbIDAsIDcgXSwgbW9kZS1jaGFuZ2UtcGVyaW9kPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIG1vZGUtY2hhbmdlLW5laWdoYm9yPShzdHJpbmcpeyAwLCAxIH0sIG1heHB0aW1lPShpbnQpWyAyMCwgMjE0NzQ4MzY0NyBdLCBwdGltZT0oaW50KVsgMjAsIDIxNDc0ODM2NDcgXTsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTE2MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQU1SLVdCLCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLCBvY3RldC1hbGlnbj0oc3RyaW5nKTEsIGNyYz0oc3RyaW5nKTAsIHJvYnVzdC1zb3J0aW5nPShzdHJpbmcpMCwgaW50ZXJsZWF2aW5nPShzdHJpbmcpMCwgbW9kZS1zZXQ9KGludClbIDAsIDcgXSwgbW9kZS1jaGFuZ2UtcGVyaW9kPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIG1vZGUtY2hhbmdlLW5laWdoYm9yPShzdHJpbmcpeyAwLCAxIH0sIG1heHB0aW1lPShpbnQpWyAyMCwgMjE0NzQ4MzY0NyBdLCBwdGltZT0oaW50KVsgMjAsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGJ2ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEJyb2FkY29tVm9pY2UgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBCcm9hZGNvbVZvaWNlIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA0Mjk4KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0Bjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylCVjE2OyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTE2MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQlYzMjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWJ2LCBtb2RlPShpbnQpeyAxNiwgMzIgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGJ2cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBCViBQYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGFja2V0aXplIEJyb2FkY29tVm9pY2UgYXVkaW8gc3RyZWFtcyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNDI5OCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1idiwgbW9kZT0oaW50KXsgMTYsIDMyIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylCVjE2OyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpMTYwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylCVjMyPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwY2VsdGRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBDRUxUIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgQ0VMVCBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpWyAzMjAwMCwgNDgwMDAgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUNFTFQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1jZWx0PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwY2VsdHBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgQ0VMVCBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZC1lbmNvZGVzIENFTFQgYXVkaW8gaW50byBhIFJUUCBwYWNrZXQ8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1jZWx0LCByYXRlPShpbnQpWyAzMjAwMCwgNjQwMDAgXSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgZnJhbWUtc2l6ZT0oaW50KVsgNjQsIDUxMiBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDMyMDAwLCA0ODAwMCBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQ0VMVDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGR2ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIERWIERlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGVwYXlsb2FkcyBEViBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzE4OSk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5NYXJjZWwgTW9yZWF1eCAmbHQ7bWFyY2VsbUBzcGFjZWxhYnMubmwmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpeyB2aWRlbywgYXVkaW8gfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKURWLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kZT0oc3RyaW5nKXsgU0QtVkNSLzUyNS02MCwgU0QtVkNSLzYyNS01MCwgSEQtVkNSLzExMjUtNjAsIEhELVZDUi8xMjUwLTUwLCBTREwtVkNSLzUyNS02MCwgU0RMLVZDUi82MjUtNTAsIDMwNk0vNTI1LTYwLCAzMDZNLzYyNS01MCwgMzE0TS0yNS81MjUtNjAsIDMxNE0tMjUvNjI1LTUwLCAzMTRNLTUwLzUyNS02MCwgMzE0TS01MC82MjUtNTAgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LWR2PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwZHZwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIERWIFBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkcyBEViBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMzE4OSk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5NYXJjZWwgTW9yZWF1eCAmbHQ7bWFyY2VsbUBzcGFjZWxhYnMubmwmZ3Q7LCBXaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1kdjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl7IHZpZGVvLCBhdWRpbyB9LCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylEViwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGU9KHN0cmluZyl7IFNELVZDUi81MjUtNjAsIFNELVZDUi82MjUtNTAsIEhELVZDUi8xMTI1LTYwLCBIRC1WQ1IvMTI1MC01MCwgU0RMLVZDUi81MjUtNjAsIFNETC1WQ1IvNjI1LTUwLCAzMDZNLzUyNS02MCwgMzA2TS82MjUtNTAsIDMxNE0tMjUvNTI1LTYwLCAzMTRNLTI1LzYyNS01MCwgMzE0TS01MC81MjUtNjAsIDMxNE0tNTAvNjI1LTUwIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBnNzIyZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIGF1ZGlvIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgRzcyMiBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3MjI7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpOSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL0c3MjIsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgY2hhbm5lbHM9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGc3MjJwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIGF1ZGlvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZSBSYXcgYXVkaW8gaW50byBSVFAgcGFja2V0cyAoUkZDIDM1NTEpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL0c3MjIsIHJhdGU9KGludCkxNjAwMCwgY2hhbm5lbHM9KGludCkxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpRzcyMiwgcGF5bG9hZD0oaW50KTksIGNsb2NrLXJhdGU9KGludCk4MDAwOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3MjIsIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBnNzIzZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEcuNzIzIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgRy43MjMgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDM1NTEpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3MjM7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpNCwgY2xvY2stcmF0ZT0oaW50KTgwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vRzcyMywgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGc3MjNwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEcuNzIzIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYWNrZXRpemUgRy43MjMgYXVkaW8gaW50byBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby9HNzIzLCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpNCwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylHNzIzOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3MjM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBnNzI2ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEcuNzI2IGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgRy43MjYgYXVkaW8gZnJvbSBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkF4aXMgQ29tbXVuaWNhdGlvbnMgJmx0O2Rldi1nc3RyZWFtZXJAYXhpcy5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgRzcyNiwgRzcyNi0xNiwgRzcyNi0yNCwgRzcyNi0zMiwgRzcyNi00MCwgQUFMMi1HNzI2LTE2LCBBQUwyLUc3MjYtMjQsIEFBTDItRzcyNi0zMiwgQUFMMi1HNzI2LTQwIH0sIGNsb2NrLXJhdGU9KGludCk4MDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtYWRwY20sIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDAsIGJpdHJhdGU9KGludCl7IDE2MDAwLCAyNDAwMCwgMzIwMDAsIDQwMDAwIH0sIGJsb2NrX2FsaWduPShpbnQpeyAyLCAzLCA0LCA1IH0sIGxheW91dD0oc3RyaW5nKWc3MjY8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBnNzI2cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBHLjcyNiBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZC1lbmNvZGVzIEcuNzI2IGF1ZGlvIGludG8gYSBSVFAgcGFja2V0PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+QXhpcyBDb21tdW5pY2F0aW9ucyAmbHQ7ZGV2LWdzdHJlYW1lckBheGlzLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtYWRwY20sIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDAsIGJpdHJhdGU9KGludCl7IDE2MDAwLCAyNDAwMCwgMzIwMDAsIDQwMDAwIH0sIGxheW91dD0oc3RyaW5nKWc3MjY8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZyl7IEc3MjYtMTYsIEc3MjYtMjQsIEc3MjYtMzIsIEc3MjYtNDAsIEFBTDItRzcyNi0xNiwgQUFMMi1HNzI2LTI0LCBBQUwyLUc3MjYtMzIsIEFBTDItRzcyNi00MCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwZzcyOWRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBHLjcyOSBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIEcuNzI5IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzNTUxKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkxhdXJlbnQgR2xheWFsICZsdDtzcGdsZWdsZUB5YWhvby5mciZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3Mjk7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpMTgsIGNsb2NrLXJhdGU9KGludCk4MDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL0c3MjksIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBnNzI5cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBHLjcyOSBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGFja2V0aXplIEcuNzI5IGF1ZGlvIGludG8gUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5PbGl2aWVyIENyZXRlICZsdDtvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL0c3MjksIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkxOCwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylHNzI5OyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUc3Mjk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBnc21kZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgR1NNIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgR1NNIGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5aZWVzaGFuIEFsaSAmbHQ7emVlbml4QGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUdTTTsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkzLCBjbG9jay1yYXRlPShpbnQpODAwMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWdzbSwgcmF0ZT0oaW50KTgwMDAsIGNoYW5uZWxzPShpbnQpMTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGdzbXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgR1NNIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZXMgR1NNIGF1ZGlvIGludG8gYSBSVFAgcGFja2V0PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WmVlc2hhbiBBbGkgJmx0O3plZW5peEBnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWdzbSwgcmF0ZT0oaW50KTgwMDAsIGNoYW5uZWxzPShpbnQpMTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTMsIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpR1NNOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUdTTTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGdzdGRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPkdTdHJlYW1lciBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgR1N0cmVhbWVyIGJ1ZmZlcnMgZnJvbSBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhcHBsaWNhdGlvbiwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpWC1HU1Q8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwZ3N0cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBHU3RyZWFtZXIgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQgR1N0cmVhbWVyIGJ1ZmZlcnMgYXMgUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWFwcGxpY2F0aW9uLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVgtR1NUPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwaDI2MWRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBIMjYxIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgSDI2MSB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgNDU4Nyk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5TdGlhbiBTZWxuZXMgJmx0O3N0aWFuQHBleGlwLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzEsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjE7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1oMjYxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwaDI2MXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgSDI2MSBwYWNrZXQgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQtZW5jb2RlcyBIMjYxIHZpZGVvIGluIFJUUCBwYWNrZXRzIChSRkMgNDU4Nyk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5TdGlhbiBTZWxuZXMgJmx0O3N0aWFuQHBleGlwLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtaDI2MTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KTMxLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYxOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwaDI2M2RlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBIMjYzIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgSDI2MyB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjE5MCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5QaGlsaXBwZSBLYWxhZiAmbHQ7cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrJmd0OywgRWR3YXJkIEhlcnZleSAmbHQ7YmlsYm9lZEBiaWxib2VkLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzQsIGNsb2NrLXJhdGU9KGludCk5MDAwMDsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1LCBoMjYzdmVyc2lvbj0oc3RyaW5nKWgyNjM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBoMjYzcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBIMjYzIHBhY2tldCBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZC1lbmNvZGVzIEgyNjMgdmlkZW8gaW4gUlRQIHBhY2tldHMgKFJGQyAyMTkwKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPk5laWwgU3RyYXRmb3JkICZsdDtuZWlsc0B2aXBhZGlhLmNvbSZndDtEZWphbiBTYWtlbHNhayAmbHQ7ZGVqYW4uc2FrZWxzYWtAbWFyYW5kLnNpJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1LCBoMjYzdmVyc2lvbj0oc3RyaW5nKWgyNjM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkzNCwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2MzsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2MzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGgyNjNwZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEgyNjMgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBIMjYzLysvKysgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDQ2MjkpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzLTE5OTg7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzLTIwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwaDI2M3BwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEgyNjMgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQtZW5jb2RlcyBIMjYzLysvKysgdmlkZW8gaW4gUlRQIHBhY2tldHMgKFJGQyA0NjI5KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZylpdHU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0xOTk4OyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzLTIwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBoMjY0ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEgyNjQgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBIMjY0IHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzOTg0KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2NDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmMsIGFsaWdubWVudD0oc3RyaW5nKWF1OyB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSwgYWxpZ25tZW50PShzdHJpbmcpeyBuYWwsIGF1IH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBoMjY0cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBIMjY0IHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZSBIMjY0IHZpZGVvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzOTg0KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkxhdXJlbnQgR2xheWFsICZsdDtzcGdsZWdsZUB5YWhvby5mciZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXU7IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWJ5dGUtc3RyZWFtLCBhbGlnbm1lbnQ9KHN0cmluZyl7IG5hbCwgYXUgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjY0PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwaDI2NWRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBIMjY1IGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgSDI2NSB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgNzc5OCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KdXJnZW4gU2xvd2FjayAmbHQ7anVyZ2Vuc2xvd2Fja0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2NTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LWgyNjUsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSwgYWxpZ25tZW50PShzdHJpbmcpeyBuYWwsIGF1IH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBoMjY1cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBIMjY1IHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZSBIMjY1IHZpZGVvIGludG8gUlRQIHBhY2tldHMgKFJGQyA3Nzk4KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkp1cmdlbiBTbG93YWNrICZsdDtqdXJnZW5zbG93YWNrQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtaDI2NSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWh2YzEsIGFsaWdubWVudD0oc3RyaW5nKWF1OyB2aWRlby94LWgyNjUsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSwgYWxpZ25tZW50PShzdHJpbmcpeyBuYWwsIGF1IH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2NTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGlsYmNkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgaUxCQyBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIGlMQkMgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDM5NTIpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+UGhpbGlwcGUgS2FsYWYgJmx0O3BoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUlMQkM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1pTEJDLCBtb2RlPShpbnQpeyAyMCwgMzAgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGlsYmNwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIGlMQkMgUGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBhY2tldGl6ZSBpTEJDIGF1ZGlvIHN0cmVhbXMgaW50byBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlBoaWxpcHBlIEthbGFmICZsdDtwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LWlMQkMsIG1vZGU9KGludCl7IDIwLCAzMCB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSUxCQywgbW9kZT0oc3RyaW5nKXsgMjAsIDMwIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBqMmtkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgSlBFRyAyMDAwIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgSlBFRyAyMDAwIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA1MzcxKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBzYW1wbGluZz0oc3RyaW5nKXsgUkdCLCBCR1IsIFJHQkEsIEJHUkEsIFlDYkNyQSwgWUNiQ3ItNDo0OjQsIFlDYkNyLTQ6MjoyLCBZQ2JDci00OjI6MCwgWUNiQ3ItNDoxOjEsIEdSQVlTQ0FMRSB9LCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSlBFRzIwMDA7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGNvbG9yc3BhY2U9KHN0cmluZyl7IHNSR0IsIHNZVVYsIEdSQVkgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUpQRUcyMDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmltYWdlL3gtanBjLCBjb2xvcnNwYWNlPShzdHJpbmcpeyBzUkdCLCBzWVVWLCBHUkFZIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBqMmtwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEpQRUcgMjAwMCBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZC1lbmNvZGVzIEpQRUcgMjAwMCBwaWN0dXJlcyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNTM3MSk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+aW1hZ2UveC1qcGMsIHNhbXBsaW5nPShzdHJpbmcpeyBSR0IsIEJHUiwgUkdCQSwgQkdSQSwgWUNiQ3JBLCBZQ2JDci00OjQ6NCwgWUNiQ3ItNDoyOjIsIFlDYkNyLTQ6MjowLCBZQ2JDci00OjE6MSwgR1JBWVNDQUxFIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBzYW1wbGluZz0oc3RyaW5nKXsgUkdCLCBCR1IsIFJHQkEsIEJHUkEsIFlDYkNyQSwgWUNiQ3ItNDo0OjQsIFlDYkNyLTQ6MjoyLCBZQ2JDci00OjI6MCwgWUNiQ3ItNDoxOjEsIEdSQVlTQ0FMRSB9LCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSlBFRzIwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBqcGVnZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEpQRUcgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBKUEVHIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAyNDM1KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSlBFRzsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkyNiwgY2xvY2stcmF0ZT0oaW50KTkwMDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmltYWdlL2pwZWc8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBqcGVncGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBKUEVHIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZXMgSlBFRyBwaWN0dXJlcyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMjQzNSk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5BeGlzIENvbW11bmljYXRpb25zICZsdDtkZXYtZ3N0cmVhbWVyQGF4aXMuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+aW1hZ2UvanBlZzsgdmlkZW8veC1qcGVnPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMjYsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUpQRUcsIHdpZHRoPShpbnQpWyAxLCA2NTUzNiBdLCBoZWlnaHQ9KGludClbIDEsIDY1NTM2IF07IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUpQRUcsIHdpZHRoPShpbnQpWyAxLCA2NTUzNiBdLCBoZWlnaHQ9KGludClbIDEsIDY1NTM2IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBrbHZkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgS0xWIERlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgS0xWIChTTVBURSBTVCAzMzYpIG1ldGFkYXRhIGZyb20gUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW1AY2VudHJpY3VsYXIuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXBwbGljYXRpb24sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNNUFRFMzM2TTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5tZXRhL3gta2x2LCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGtsdnBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgS0xWIFBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkcyBLTFYgKFNNUFRFIFNUIDMzNikgbWV0YWRhdGEgYXMgUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaW0tUGhpbGlwcCBNw7xsbGVyICZsdDt0aW1AY2VudHJpY3VsYXIuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+bWV0YS94LWtsdiwgcGFyc2VkPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXBwbGljYXRpb24sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNNUFRFMzM2TTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wMXNkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgTVBFRzEgU3lzdGVtIFN0cmVhbSBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIE1QRUcxIFN5c3RlbSBTdHJlYW1zIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzNTU1KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylvdGhlciwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVAxUzsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QMVM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vbXBlZywgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBtcDJ0ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE1QRUcgVHJhbnNwb3J0IFN0cmVhbSBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIE1QRUcyIFRTIGZyb20gUlRQIHBhY2tldHMgKFJGQyAyMjUwKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7LCBUaGlqcyBWZXJtZWlyICZsdDt0aGlqcy52ZXJtZWlyQGJhcmNvLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZyl7IE1QMlQsIE1QMlQtRVMgfTsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkzMywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL21wZWd0cywgcGFja2V0c2l6ZT0oaW50KTE4OCwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBtcDJ0cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBNUEVHMiBUcmFuc3BvcnQgU3RyZWFtIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZXMgTVBFRzIgVFMgaW50byBSVFAgcGFja2V0cyAoUkZDIDIyNTApPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL21wZWd0cywgcGFja2V0c2l6ZT0oaW50KTE4OCwgc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludCkzMywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVAyVDsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVAyVDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wNGFkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgTVBFRzQgYXVkaW8gZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBNUEVHNCBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzAxNik8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5Ob2tpYSBDb3Jwb3JhdGlvbiAoY29udGFjdCAmbHQ7c3RlZmFuLmtvc3RAbm9raWEuY29tJmd0OyksIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVA0QS1MQVRNPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgZnJhbWVkPShib29sZWFuKXsgZmFsc2UsIHRydWUgfSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wNGFwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE1QRUc0IGF1ZGlvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkIE1QRUc0IGF1ZGlvIGFzIFJUUCBwYWNrZXRzIChSRkMgMzAxNik8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QNEEtTEFUTTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wNGdkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgTVBFRzQgRVMgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBNUEVHNCBlbGVtZW50YXJ5IHN0cmVhbXMgZnJvbSBSVFAgcGFja2V0cyAoUkZDIDM2NDApPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXsgdmlkZW8sIGF1ZGlvLCBhcHBsaWNhdGlvbiB9LCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUEVHNC1HRU5FUklDLCBtb2RlPShzdHJpbmcpeyBnZW5lcmljLCBDRUxQLWNiciwgQ0VMUC12YnIsIEFBQy1sYnIsIEFBQy1oYnIgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwbXA0Z3BheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgTVBFRzQgRVMgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQgTVBFRzQgZWxlbWVudGFyeSBzdHJlYW1zIGFzIFJUUCBwYWNrZXRzIChSRkMgMzY0MCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U7IGF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl7IHZpZGVvLCBhdWRpbywgYXBwbGljYXRpb24gfSwgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUEVHNC1HRU5FUklDLCBzdHJlYW10eXBlPShzdHJpbmcpeyA0LCA1IH0sIG1vZGU9KHN0cmluZyl7IGdlbmVyaWMsIENFTFAtY2JyLCBDRUxQLXZiciwgQUFDLWxiciwgQUFDLWhiciB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwbXA0dmRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBNUEVHNCB2aWRlbyBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIE1QRUc0IHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzMDE2KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVA0Vi1FUzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wNHZwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE1QRUc0IFZpZGVvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkIE1QRUctNCB2aWRlbyBhcyBSVFAgcGFja2V0cyAoUkZDIDMwMTYpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlOyB2aWRlby94LWRpdng8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVA0Vi1FUzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wYWRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBNUEVHIGF1ZGlvIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgTVBFRyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjAzOCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCkxNCwgY2xvY2stcmF0ZT0oaW50KTkwMDAwOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QQSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG1wYXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgTVBFRyBhdWRpbyBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZCBNUEVHIGF1ZGlvIGFzIFJUUCBwYWNrZXRzIChSRkMgMjAzOCk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpMTQsIGNsb2NrLXJhdGU9KGludCk5MDAwMDsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVBBPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwbXBhcm9idXN0ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE1QRUcgYXVkaW8gZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBNUEVHIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA1MjE5KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPk1hcmsgTmF1d2VsYWVydHMgJmx0O21hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QQS1ST0JVU1Q7IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZyl7IFgtTVAzLURSQUZULTAwLCBYLU1QMy1EUkFGVC0wMSwgWC1NUDMtRFJBRlQtMDIsIFgtTVAzLURSQUZULTAzLCBYLU1QMy1EUkFGVC0wNCwgWC1NUDMtRFJBRlQtMDUsIFgtTVAzLURSQUZULTA2IH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwbXB2ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE1QRUcgdmlkZW8gZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBNUEVHIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAyMjUwKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVBWOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KTMyLCBjbG9jay1yYXRlPShpbnQpOTAwMDA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkyLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBtcHZwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE1QRUcyIEVTIHZpZGVvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkLWVuY29kZXMgTVBFRzIgRVMgaW50byBSVFAgcGFja2V0cyAoUkZDIDIyNTApPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGhpanMgVmVybWVpciAmbHQ7dGhpanN2ZXJtZWlyQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMiwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpMzIsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QVjsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVBWPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwb3B1c2RlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBPcHVzIHBhY2tldCBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIE9wdXMgYXVkaW8gZnJvbSBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhbmlsbyBDZXNhciBMZW1lcyBkZSBQYXVsYSAmbHQ7ZGFuaWxvLmNlc2FyQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk0ODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgT1BVUywgWC1HU1QtT1BVUy1EUkFGVC1TUElUVEtBLTAwIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1vcHVzLCBjaGFubmVsLW1hcHBpbmctZmFtaWx5PShpbnQpMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG9wdXNwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIE9wdXMgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlB1dHMgT3B1cyBhdWRpbyBpbiBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhbmlsbyBDZXNhciBMZW1lcyBkZSBQYXVsYSAmbHQ7ZGFuaWxvLmNlc2FyQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtb3B1cywgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgY2hhbm5lbC1tYXBwaW5nLWZhbWlseT0oaW50KTA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTQ4MDAwLCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykyLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpeyBPUFVTLCBYLUdTVC1PUFVTLURSQUZULVNQSVRUS0EtMDAgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHBjbWFkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUENNQSBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIFBDTUEgYXVkaW8gZnJvbSBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVkZ2FyZCBMaW1hICZsdDtlZGdhcmQubGltYUBpbmR0Lm9yZy5iciZndDssIFplZXNoYW4gQWxpICZsdDt6ZWVuaXhAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCk4LCBjbG9jay1yYXRlPShpbnQpODAwMDsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVBDTUE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1hbGF3LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHBjbWFwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFBDTUEgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQtZW5jb2RlcyBQQ01BIGF1ZGlvIGludG8gYSBSVFAgcGFja2V0PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RWRnYXJkIExpbWEgJmx0O2VkZ2FyZC5saW1hQGluZHQub3JnLmJyJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1hbGF3LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpOCwgY2xvY2stcmF0ZT0oaW50KTgwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylQQ01BOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGVuY29kaW5nLW5hbWU9KHN0cmluZylQQ01BPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwcGNtdWRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBQQ01VIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgUENNVSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RWRnYXJkIExpbWEgJmx0O2VkZ2FyZC5saW1hQGluZHQub3JnLmJyJmd0OywgWmVlc2hhbiBBbGkgJmx0O3plZW5peEBnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTAsIGNsb2NrLXJhdGU9KGludCk4MDAwOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVBDTVUsIGNsb2NrLXJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LW11bGF3LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludClbIDEsIDIxNDc0ODM2NDcgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHBjbXVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFBDTVUgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQtZW5jb2RlcyBQQ01VIGF1ZGlvIGludG8gYSBSVFAgcGFja2V0PC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RWRnYXJkIExpbWEgJmx0O2VkZ2FyZC5saW1hQGluZHQub3JnLmJyJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1tdWxhdywgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTAsIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNVTsgYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNVTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHFjZWxwZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFFDRUxQIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgUUNFTFAgKFB1cmVWb2ljZSkgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDI2NTgpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpODAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVFDRUxQOyBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KTEyLCBjbG9jay1yYXRlPShpbnQpODAwMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby9xY2VscCwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHFkbTJkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUURNMiBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIFFETTIgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAobm8gUkZDKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVkd2FyZCBIZXJ2ZXkgJmx0O2JpbGJvZWRAYmlsYm9lZC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVgtUURNPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcWRtMjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHNiY2RlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBTQkMgYXVkaW8gZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBTQkMgYXVkaW8gZnJvbSBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkFydW4gUmFnaGF2YW4gJmx0O2FydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KXsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNCQzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNiYywgcmF0ZT0oaW50KXsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgbW9kZT0oc3RyaW5nKXsgbW9ubywgZHVhbCwgc3RlcmVvLCBqb2ludCB9LCBibG9ja3M9KGludCl7IDQsIDgsIDEyLCAxNiB9LCBzdWJiYW5kcz0oaW50KXsgNCwgOCB9LCBhbGxvY2F0aW9uLW1ldGhvZD0oc3RyaW5nKXsgc25yLCBsb3VkbmVzcyB9LCBiaXRwb29sPShpbnQpWyAyLCA2NCBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwc2JjcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBwYWNrZXQgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZCBTQkMgYXVkaW8gYXMgUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaGlhZ28gU291c2EgU2FudG9zICZsdDt0aGlhZ29zc0BsY2MudWZjZy5lZHUuYnImZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNiYywgcmF0ZT0oaW50KXsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgY2hhbm5lbHM9KGludClbIDEsIDIgXSwgY2hhbm5lbC1tb2RlPShzdHJpbmcpeyBtb25vLCBkdWFsLCBzdGVyZW8sIGpvaW50IH0sIGJsb2Nrcz0oaW50KXsgNCwgOCwgMTIsIDE2IH0sIHN1YmJhbmRzPShpbnQpeyA0LCA4IH0sIGFsbG9jYXRpb24tbWV0aG9kPShzdHJpbmcpeyBzbnIsIGxvdWRuZXNzIH0sIGJpdHBvb2w9KGludClbIDIsIDY0IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KXsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNCQzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHNpcmVuZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFNpcmVuIHBhY2tldCBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIFNpcmVuIGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5QaGlsaXBwZSBLYWxhZiAmbHQ7cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCkxNjAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNJUkVOPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtc2lyZW4sIGRjdC1sZW5ndGg9KGludCkzMjA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBzaXJlbnBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUGF5bG9hZGVyIGZvciBTaXJlbiBBdWRpbzwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYWNrZXRpemUgU2lyZW4gYXVkaW8gc3RyZWFtcyBpbnRvIFJUUCBwYWNrZXRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+WW91bmVzcyBBbGFvdWkgJmx0O2tha2Fyb3RvQGtha2Fyb3RvLmhvbWVsaW51eC5uZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNpcmVuLCBkY3QtbGVuZ3RoPShpbnQpMzIwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCkxNjAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNJUkVOLCBiaXRyYXRlPShzdHJpbmcpMTYwMDAsIGRjdC1sZW5ndGg9KGludCkzMjA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBzcGVleGRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBTcGVleCBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIFNwZWV4IGF1ZGlvIGZyb20gUlRQIHBhY2tldHM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FZGdhcmQgTGltYSAmbHQ7ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnImZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgNjAwMCwgNDgwMDAgXSwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVNQRUVYPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtc3BlZXg8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBzcGVleHBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgU3BlZXggcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQtZW5jb2RlcyBTcGVleCBhdWRpbyBpbnRvIGEgUlRQIHBhY2tldDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVkZ2FyZCBMaW1hICZsdDtlZGdhcmQubGltYUBpbmR0Lm9yZy5iciZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtc3BlZXgsIHJhdGU9KGludClbIDYwMDAsIDQ4MDAwIF0sIGNoYW5uZWxzPShpbnQpMTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpU1BFRVgsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBzdHJlYW1kZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgU3RyZWFtIERlcGF5bG9hZGluZzwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGVwYXlsb2FkcyBSVFAvUlRDUCBwYWNrZXRzIGZvciBzdHJlYW1pbmcgcHJvdG9jb2xzIGFjY29yZGluZyB0byBSRkM0NTcxPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLXN0cmVhbTsgYXBwbGljYXRpb24veC1ydGNwLXN0cmVhbTsgYXBwbGljYXRpb24veC1zcnRwLXN0cmVhbTsgYXBwbGljYXRpb24veC1zcnRjcC1zdHJlYW08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHA7IGFwcGxpY2F0aW9uL3gtcnRjcDsgYXBwbGljYXRpb24veC1zcnRwOyBhcHBsaWNhdGlvbi94LXNydGNwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwc3RyZWFtcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBTdHJlYW0gUGF5bG9hZGluZzwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcms8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWRzIFJUUC9SVENQIHBhY2tldHMgZm9yIHN0cmVhbWluZyBwcm90b2NvbHMgYWNjb3JkaW5nIHRvIFJGQzQ1NzE8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5TZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHA7IGFwcGxpY2F0aW9uL3gtcnRjcDsgYXBwbGljYXRpb24veC1zcnRwOyBhcHBsaWNhdGlvbi94LXNydGNwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLXN0cmVhbTsgYXBwbGljYXRpb24veC1ydGNwLXN0cmVhbTsgYXBwbGljYXRpb24veC1zcnRwLXN0cmVhbTsgYXBwbGljYXRpb24veC1zcnRjcC1zdHJlYW08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBzdjN2ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFNWUTMgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBTVlEzIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKG5vIFJGQyk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgWC1TVjNWLUVTLCBYLVNPUkVOU09OLVZJREVPLCBYLVNPUkVOU09OVklERU8sIFgtU29yZW5zb25WaWRlbyB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtc3ZxLCBzdnF2ZXJzaW9uPShpbnQpMzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHRoZW9yYWRlcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBUaGVvcmEgZGVwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FeHRyYWN0cyBUaGVvcmEgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoZHJhZnQtMDEgb2YgUkZDIFhYWFgpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylUSEVPUkE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC10aGVvcmE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHB0aGVvcmFwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFRoZW9yYSBwYXlsb2FkZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGF5bG9hZC1lbmNvZGUgVGhlb3JhIHZpZGVvIGludG8gUlRQIHBhY2tldHMgKGRyYWZ0LTAxIFJGQyBYWFhYKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXRoZW9yYTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywgcGF5bG9hZD0oaW50KVsgOTYsIDEyNyBdLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylUSEVPUkE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHB2b3JiaXNkZXBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgVm9yYmlzIGRlcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RXh0cmFjdHMgVm9yYmlzIEF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA1MjE1KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpVk9SQklTPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtdm9yYmlzPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwdm9yYmlzcGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBWb3JiaXMgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlBheWxvYWQtZW5jb2RlIFZvcmJpcyBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNTIxNSk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC12b3JiaXM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpVk9SQklTPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwdnA4ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFZQOCBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIFZQOCB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNqb2VyZCBTaW1vbnMgJmx0O3Nqb2VyZEBsdW9uLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGVuY29kaW5nLW5hbWU9KHN0cmluZyl7IFZQOCwgVlA4LURSQUZULUlFVEYtMDEgfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXZwODwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHZwOHBheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgVlA4IHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QdXRzIFZQOCB2aWRlbyBpbiBSVFAgcGFja2V0czwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlNqb2VyZCBTaW1vbnMgJmx0O3Nqb2VyZEBsdW9uLm5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtdnA4PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBwYXlsb2FkPShpbnQpWyA5NiwgMTI3IF0sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgVlA4LCBWUDgtRFJBRlQtSUVURi0wMSB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwdnA5ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFZQOSBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIFZQOSB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0aWFuIFNlbG5lcyAmbHQ7c3RpYW5AcGV4aXAuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgbWVkaWE9KHN0cmluZyl2aWRlbywgZW5jb2RpbmctbmFtZT0oc3RyaW5nKXsgVlA5LCBWUDktRFJBRlQtSUVURi0wMSB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtdnA5PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwdnA5cGF5PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBWUDkgcGF5bG9hZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlB1dHMgVlA5IHZpZGVvIGluIFJUUCBwYWNrZXRzKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlN0aWFuIFNlbG5lcyAmbHQ7c3RpYW5AcGV4aXAuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC12cDk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpeyBWUDksIFZQOS1EUkFGVC1JRVRGLTAxIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHB2cmF3ZGVwYXk8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIFJhdyBWaWRlbyBkZXBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkV4dHJhY3RzIHJhdyB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgNDE3NSk8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKVJBVywgc2FtcGxpbmc9KHN0cmluZyl7IFJHQiwgUkdCQSwgQkdSLCBCR1JBLCBZQ2JDci00OjQ6NCwgWUNiQ3ItNDoyOjIsIFlDYkNyLTQ6MjowLCBZQ2JDci00OjE6MSB9LCBkZXB0aD0oc3RyaW5nKXsgOCwgMTAsIDEyLCAxNiB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwdnJhd3BheTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUmF3IFZpZGVvIHBheWxvYWRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5QYXlsb2FkIHJhdyB2aWRlbyBhcyBSVFAgcGFja2V0cyAoUkZDIDQxNzUpPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQiwgUkdCQSwgQkdSLCBCR1JBLCBBWVVWLCBVWVZZLCBJNDIwLCBZNDFCLCBVWVZQIH0sIHdpZHRoPShpbnQpWyAxLCAzMjc2NyBdLCBoZWlnaHQ9KGludClbIDEsIDMyNzY3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sIHBheWxvYWQ9KGludClbIDk2LCAxMjcgXSwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpUkFXLCBzYW1wbGluZz0oc3RyaW5nKXsgUkdCLCBSR0JBLCBCR1IsIEJHUkEsIFlDYkNyLTQ6NDo0LCBZQ2JDci00OjI6MiwgWUNiQ3ItNDoyOjAsIFlDYkNyLTQ6MToxIH0sIGRlcHRoPShzdHJpbmcpeyA4LCAxMCwgMTIsIDE2IH0sIGNvbG9yaW1ldHJ5PShzdHJpbmcpeyBCVDYwMS01LCBCVDcwOS0yLCBTTVBURTI0ME0gfTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHBtYW5hZ2VyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ1OGRhYS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tcnRwbWFuYWdlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMDEgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+cnRwbWFuYWdlcjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlJUUCBzZXNzaW9uIG1hbmFnZW1lbnQgcGx1Z2luIGxpYnJhcnk8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L3J0cG1hbmFnZXIvLmxpYnMvbGliZ3N0cnRwbWFuYWdlci5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RydHBtYW5hZ2VyLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBiaW48L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIEJpbjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL05ldHdvcmsvUlRQPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5SZWFsLVRpbWUgVHJhbnNwb3J0IFByb3RvY29sIGJpbjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+cmVjdl9ydGNwX3NpbmtfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDsgYXBwbGljYXRpb24veC1zcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5yZWN2X3J0cF9zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDsgYXBwbGljYXRpb24veC1zcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNlbmRfcnRwX3NpbmtfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnJlY3ZfcnRwX3NyY18ldV8ldV8ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNlbmRfcnRwX3NyY18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwOyBhcHBsaWNhdGlvbi94LXNydHA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2VuZF9ydGNwX3NyY18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0Y3A7IGFwcGxpY2F0aW9uL3gtc3J0Y3A8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBkdG1mbXV4PC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvTXV4ZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPm1peGVzIFJUUCBEVE1GIHN0cmVhbXMgaW50byBvdGhlciBSVFAgc3RyZWFtczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlplZXNoYW4gQWxpICZsdDtmaXJzdC5sYXN0QG5va2lhLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5wcmlvcml0eV9zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cGppdHRlcmJ1ZmZlcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgcGFja2V0IGppdHRlci1idWZmZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QSBidWZmZXIgdGhhdCBkZWFscyB3aXRoIG5ldHdvcmsgaml0dGVyIGFuZCBvdGhlciB0cmFuc21pc3Npb24gZmF1bHRzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+UGhpbGlwcGUgS2FsYWYgJmx0O3BoaWxpcHBlLmthbGFmQGNvbGxhYm9yYS5jby51ayZndDssIFdpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rX3J0Y3A8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cG11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgbXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL011eGVyPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5tdWx0aXBsZXggTiBydHAgc3RyZWFtcyBpbnRvIG9uZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlplZXNoYW4gQWxpICZsdDtmaXJzdC5sYXN0QG5va2lhLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHB0ZGVtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+UlRQIERlbXV4PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5EZW11eC9OZXR3b3JrL1JUUDwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGFyc2VzIGNvZGVjIHN0cmVhbXMgdHJhbnNtaXR0ZWQgaW4gdGhlIHNhbWUgUlRQIHNlc3Npb248L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5LYWkgVmVobWFuZW4gJmx0O2thaS52ZWhtYW5lbkBub2tpYS5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmNfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cCwgcGF5bG9hZD0oaW50KVsgMCwgMjU1IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBydHhxdWV1ZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUmV0cmFuc21pc3Npb24gUXVldWU8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5LZWVwIFJUUCBwYWNrZXRzIGluIGEgcXVldWUgZm9yIHJldHJhbnNtaXNzaW9uPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwcnR4cmVjZWl2ZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUmV0cmFuc21pc3Npb24gcmVjZWl2ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5SZWNlaXZlIHJldHJhbnNtaXR0ZWQgUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQzQ1ODg8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KdWxpZW4gSXNvcmNlICZsdDtqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwcnR4c2VuZDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgUmV0cmFuc21pc3Npb24gU2VuZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmV0cmFuc21pdCBSVFAgcGFja2V0cyB3aGVuIG5lZWRlZCwgYWNjb3JkaW5nIHRvIFJGQzQ1ODg8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5KdWxpZW4gSXNvcmNlICZsdDtqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwLCBjbG9jay1yYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydHA8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHBzZXNzaW9uPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBTZXNzaW9uPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkltcGxlbWVudCBhbiBSVFAgc2Vzc2lvbjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+cmVjdl9ydGNwX3Npbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5yZWN2X3J0cF9zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zZW5kX3J0cF9zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5yZWN2X3J0cF9zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zZW5kX3J0cF9zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zeW5jX3NyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zZW5kX3J0Y3Bfc3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnJ0cHNzcmNkZW11eDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SVFAgU1NSQyBEZW11eDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RGVtdXgvTmV0d29yay9SVFA8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlNwbGl0cyBSVFAgc3RyZWFtcyBiYXNlZCBvbiB0aGUgU1NSQzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+cnRjcF9zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnJ0Y3Bfc3JjXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1ydGNwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyY18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5zb21ldGltZXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRwPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXJ0c3AueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDYwOWM3Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1ydHNwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnJ0c3A8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj50cmFuc2ZlciBkYXRhIHZpYSBSVFNQPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9ydHNwLy5saWJzL2xpYmdzdHJ0c3Auc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0cnRzcC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+cnRwZGVjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUUCBEZWNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9QYXJzZXIvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QWNjZXB0cyByYXcgUlRQIGFuZCBSVENQIHBhY2tldHMgYW5kIHNlbmRzIHRoZW0gZm9yd2FyZDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+cmVjdl9ydGNwX3NpbmtfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtcnRjcDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5yZWN2X3J0cF9zaW5rXyV1PC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5yZWN2X3J0cF9zcmNfJXVfJXVfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5ydGNwX3NyY18ldTwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5yZXF1ZXN0PC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0Y3A8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5ydHNwc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlJUU1AgcGFja2V0IHJlY2VpdmVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Tb3VyY2UvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVjZWl2ZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFJUU1AgKFJGQyAyMzI2KTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7LCBUaGlqcyBWZXJtZWlyICZsdDt0aGlqcy52ZXJtZWlyQGJhcmNvLmNvbSZndDssIEx1dHogTXVlbGxlciAmbHQ7bHV0ekB0b3Bmcm9zZS5kZSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zdHJlYW1fJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+c29tZXRpbWVzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXJ0cDsgYXBwbGljYXRpb24veC1yZHQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hhcGV3aXBlLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTY5MTFjLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaGFwZXdpcGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+c2hhcGV3aXBlPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+U2hhcGUgV2lwZSB0cmFuc2l0aW9uIGZpbHRlcjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3Qvc2hhcGV3aXBlLy5saWJzL2xpYmdzdHNoYXBld2lwZS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RzaGFwZXdpcGUuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnNoYXBld2lwZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TaGFwZSBXaXBlIHRyYW5zaXRpb24gZmlsdGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWRpdG9yL1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BZGRzIGEgc2hhcGUgd2lwZSB0cmFuc2l0aW9uIHRvIGEgdmlkZW8gc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+bWFza19zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylHUkFZOCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMC8xOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpR1JBWTE2X0xFLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbikwLzE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+dmlkZW9fc2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zaG91dDJzZW5kLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1OWEyMy4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc2hvdXQyc2VuZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT5zaG91dDJzZW5kPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+U2VuZHMgZGF0YSB0byBhbiBpY2VjYXN0IHNlcnZlciB1c2luZyBsaWJzaG91dDI8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L3Nob3V0Mi8ubGlicy9saWJnc3RzaG91dDIuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0c2hvdXQyLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+bGlic2hvdXQyPC9wYWNrYWdlPgotICA8b3JpZ2luPmh0dHA6Ly93d3cuaWNlY2FzdC5vcmcvZG93bmxvYWQuaHRtbDwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5zaG91dDJzZW5kPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkljZWNhc3QgbmV0d29yayBzaW5rPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5TaW5rL05ldHdvcms8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlNlbmRzIGRhdGEgdG8gYW4gaWNlY2FzdCBzZXJ2ZXI8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY2hlbGxvLmJlJmd0OywgUGVkcm8gQ29ydGUtUmVhbCAmbHQ7dHlwb0BuZXRjYWJvLnB0Jmd0OywgWmFoZWVyIEFiYmFzIE1lcmFsaSAmbHQ7emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi9vZ2c7IGF1ZGlvL29nZzsgdmlkZW8vb2dnOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpWyAxLCAzIF07IHZpZGVvL3dlYm07IGF1ZGlvL3dlYm08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNtcHRlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZkMjAyOS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc21wdGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+c21wdGU8L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5BcHBseSB0aGUgc3RhbmRhcmQgU01QVEUgdHJhbnNpdGlvbnMgb24gdmlkZW8gaW1hZ2VzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9zbXB0ZS8ubGlicy9saWJnc3RzbXB0ZS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RzbXB0ZS5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c21wdGU8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+U01QVEUgdHJhbnNpdGlvbnM8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZGl0b3IvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFwcGx5IHRoZSBzdGFuZGFyZCBTTVBURSB0cmFuc2l0aW9ucyBvbiB2aWRlbyBpbWFnZXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAY2hlbGxvLmJlJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbmsxPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazI8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c21wdGVhbHBoYTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TTVBURSB0cmFuc2l0aW9uczwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VkaXRvci9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QXBwbHkgdGhlIHN0YW5kYXJkIFNNUFRFIHRyYW5zaXRpb25zIGFzIGFscGhhIG9uIHZpZGVvIGltYWdlczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpSTQyMCwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVYxMiwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQVlVViwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQVJHQiwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQkdSQSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpUkdCQSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpQVJHQiwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylBWVVWLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylBUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylCR1JBLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylSR0JBLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylBUkdCLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc291cC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOWYwM2EuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNvdXAueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+c291cDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPmxpYnNvdXAgSFRUUCBjbGllbnQgc3JjL3Npbms8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L3NvdXAvLmxpYnMvbGliZ3N0c291cGh0dHBzcmMuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0c291cGh0dHBzcmMuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnNvdXBodHRwY2xpZW50c2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5IVFRQIGNsaWVudCBzaW5rPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5HZW5lcmljPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5TZW5kcyBzdHJlYW1zIHRvIEhUVFAgc2VydmVyIHZpYSBQVVQ8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5EYXZpZCBTY2hsZWVmICZsdDtkc0BlbnRyb3B5d2F2ZS5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5zb3VwaHR0cHNyYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5IVFRQIGNsaWVudCBzb3VyY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNvdXJjZS9OZXR3b3JrPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5SZWNlaXZlIGRhdGEgYXMgYSBjbGllbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgSFRUUCB1c2luZyBTT1VQPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V291dGVyIENsb2V0ZW5zICZsdDt3b3V0ZXJAbWluZC5iZSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sIGIvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWN0cnVtLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI1MDBiMS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tc3BlY3RydW0ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+c3BlY3RydW08L25hbWU+Ci0gIDxkZXNjcmlwdGlvbj5SdW4gYW4gRkZUIG9uIHRoZSBhdWRpbyBzaWduYWwsIG91dHB1dCBzcGVjdHJ1bSBkYXRhPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC9zcGVjdHJ1bS8ubGlicy9saWJnc3RzcGVjdHJ1bS5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3RzcGVjdHJ1bS5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+c3BlY3RydW08L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+U3BlY3RydW0gYW5hbHl6ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9BbmFseXplci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UnVuIGFuIEZGVCBvbiB0aGUgYXVkaW8gc2lnbmFsLCBvdXRwdXQgc3BlY3RydW0gZGF0YTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkVyaWsgV2FsdGhpbnNlbiAmbHQ7b21lZ2FAY3NlLm9naS5lZHUmZ3Q7LCBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBTMjRMRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFMxNkxFLCBTMjRMRSwgUzMyTEUsIEYzMkxFLCBGNjRMRSB9LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi1zcGVleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZDU2YjguLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXNwZWV4LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnNwZWV4PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+U3BlZXggcGx1Z2luIGxpYnJhcnk8L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZXh0L3NwZWV4Ly5saWJzL2xpYmdzdHNwZWV4LnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHNwZWV4LnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5zcGVleGRlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TcGVleCBhdWRpbyBkZWNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZWNvZGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5kZWNvZGUgc3BlZXggc3RyZWFtcyB0byBhdWRpbzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNwZWV4PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDYwMDAsIDQ4MDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5zcGVleGVuYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5TcGVleCBhdWRpbyBlbmNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9FbmNvZGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FbmNvZGVzIGF1ZGlvIGluIFNwZWV4IGZvcm1hdDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzE2TEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCByYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KTE7IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIHJhdGU9KGludClbIDYwMDAsIDQ4MDAwIF0sIGNoYW5uZWxzPShpbnQpMiwgY2hhbm5lbC1tYXNrPShiaXRtYXNrKTB4MDAwMDAwMDAwMDAwMDAwMzwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXNwZWV4LCByYXRlPShpbnQpWyA2MDAwLCA0ODAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXRhZ2xpYi54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYxNDViNC4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdGFnbGliLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnRhZ2xpYjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlRhZyB3cml0aW5nIHBsdWctaW4gYmFzZWQgb24gdGFnbGliPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC90YWdsaWIvLmxpYnMvbGliZ3N0dGFnbGliLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHRhZ2xpYi5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXBldjJtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VGFnTGliLWJhc2VkIEFQRXYyIE11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Gb3JtYXR0ZXIvTWV0YWRhdGE8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFkZHMgYW4gQVBFdjIgaGVhZGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgZmlsZXMgdXNpbmcgdGFnbGliPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmFwcGxpY2F0aW9uL3gtYXBldGFnPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+aWQzdjJtdXg8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VGFnTGliLWJhc2VkIElEM3YyIE11eGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Gb3JtYXR0ZXIvTWV0YWRhdGE8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFkZHMgYW4gSUQzdjIgaGVhZGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgTVAzIGZpbGVzIHVzaW5nIHRhZ2xpYjwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkNocmlzdG9waGUgRmVyZ2VhdSAmbHQ7dGV1ZkBnbm9tZS5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXBwbGljYXRpb24veC1pZDM8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdWRwLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWUyNmJmLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi11ZHAueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+dWRwPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+dHJhbnNmZXIgZGF0YSB2aWEgVURQPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC91ZHAvLmxpYnMvbGliZ3N0dWRwLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHVkcC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+ZHludWRwc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5VRFAgcGFja2V0IHNlbmRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9OZXR3b3JrPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5TZW5kIGRhdGEgb3ZlciB0aGUgbmV0d29yayB2aWEgVURQIHdpdGggcGFja2V0IGRlc3RpbmF0aW9ucyBwaWNrZWQgdXAgZHluYW1pY2FsbHkgZnJvbSBtZXRhIG9uIHRoZSBidWZmZXJzIHBhc3NlZDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlBoaWxpcHBlIEtoYWxhZiAmbHQ7YnVyZ2VyQHNwZWVkeS5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT5tdWx0aXVkcHNpbms8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VURQIHBhY2tldCBzZW5kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+U2VuZCBkYXRhIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFVEUCB0byBvbmUgb3IgbXVsdGlwbGUgcmVjaXBpZW50cyB3aGljaCBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBhdCBydW50aW1lIHVzaW5nIGFjdGlvbiBzaWduYWxzPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbS50YXltYW5zQGdtYWlsLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPkFOWTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnVkcHNpbms8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VURQIHBhY2tldCBzZW5kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNpbmsvTmV0d29yazwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+U2VuZCBkYXRhIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFVEUDwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW1AZmx1ZW5kby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5BTlk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT51ZHBzcmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VURQIHBhY2tldCByZWNlaXZlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlL05ldHdvcms8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPlJlY2VpdmUgZGF0YSBvdmVyIHRoZSBuZXR3b3JrIHZpYSBVRFA8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltQGZsdWVuZG8uY29tJmd0OywgVGhpanMgVmVybWVpciAmbHQ7dGhpanMudmVybWVpckBiYXJjby5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+QU5ZPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvNGxpbnV4Mi54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxNDU1NS4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW80bGludXgyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnZpZGVvNGxpbnV4MjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPmVsZW1lbnRzIGZvciBWaWRlbyA0IExpbnV4PC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL3N5cy92NGwyLy5saWJzL2xpYmdzdHZpZGVvNGxpbnV4Mi5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3R2aWRlbzRsaW51eDIuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnY0bDJyYWRpbzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5SYWRpbyAodmlkZW80bGludXgyKSBUdW5lcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+VHVuZXI8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkNvbnRyb2xzIGEgVmlkZW80TGludXgyIHJhZGlvIGRldmljZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkFsZXhleSBDaGVybm92ICZsdDs0ZXJub3ZAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+djRsMnNpbms8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VmlkZW8gKHZpZGVvNGxpbnV4MikgU2luazwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U2luay9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RGlzcGxheXMgZnJhbWVzIG9uIGEgdmlkZW80bGludXgyIGRldmljZTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPlJvYiBDbGFyayAmbHQ7cm9iQHRpLmNvbSZndDssPC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5pbWFnZS9qcGVnOyB2aWRlby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTQsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsgdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkyOyB2aWRlby9tcGVndHMsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlOyB2aWRlby94LWJheWVyLCBmb3JtYXQ9KHN0cmluZyl7IGJnZ3IsIGdicmcsIGdyYmcsIHJnZ2IgfSwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlOyB2aWRlby94LWgyNjMsIHZhcmlhbnQ9KHN0cmluZylpdHU7IHZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKXsgYnl0ZS1zdHJlYW0sIGF2YyB9LCBhbGlnbm1lbnQ9KHN0cmluZylhdTsgdmlkZW8veC1wd2MxLCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1wd2MyLCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCMTYsIEJHUiwgUkdCLCBHUkFZOCwgR1JBWTE2X0xFLCBHUkFZMTZfQkUsIFlWVTksIFlWMTIsIFlVWTIsIFlWWVUsIFVZVlksIFk0MkIsIFk0MUIsIFlVVjksIE5WMTJfNjRaMzIsIE5WMjQsIE5WNjEsIE5WMTYsIE5WMjEsIE5WMTIsIEk0MjAsIEJHUkEsIEJHUngsIEFSR0IsIHhSR0IsIEJHUjE1LCBSR0IxNSB9LCB3aWR0aD0oaW50KVsgMSwgMzI3NjggXSwgaGVpZ2h0PShpbnQpWyAxLCAzMjc2OCBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1zb25peCwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtdnA4OyB2aWRlby94LXdtdiwgd212dmVyc2lvbj0oaW50KTMsIGZvcm1hdD0oc3RyaW5nKVdWQzE8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT52NGwyc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlZpZGVvICh2aWRlbzRsaW51eDIpIFNvdXJjZTwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+U291cmNlL1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5SZWFkcyBmcmFtZXMgZnJvbSBhIFZpZGVvNExpbnV4MiBkZXZpY2U8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FZGdhcmQgTGltYSAmbHQ7ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnImZ3Q7LCBTdGVmYW4gS29zdCAmbHQ7ZW5zb25pY0B1c2Vycy5zZi5uZXQmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+aW1hZ2UvanBlZzsgdmlkZW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U7IHZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpMjsgdmlkZW8vbXBlZ3RzLCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTsgdmlkZW8veC1iYXllciwgZm9ybWF0PShzdHJpbmcpeyBiZ2dyLCBnYnJnLCBncmJnLCByZ2diIH0sIHdpZHRoPShpbnQpWyAxLCAzMjc2OCBdLCBoZWlnaHQ9KGludClbIDEsIDMyNzY4IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LWR2LCBzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZTsgdmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1OyB2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9KHN0cmluZyl7IGJ5dGUtc3RyZWFtLCBhdmMgfSwgYWxpZ25tZW50PShzdHJpbmcpYXU7IHZpZGVvL3gtcHdjMSwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcHdjMiwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQjE2LCBCR1IsIFJHQiwgR1JBWTgsIEdSQVkxNl9MRSwgR1JBWTE2X0JFLCBZVlU5LCBZVjEyLCBZVVkyLCBZVllVLCBVWVZZLCBZNDJCLCBZNDFCLCBZVVY5LCBOVjEyXzY0WjMyLCBOVjI0LCBOVjYxLCBOVjE2LCBOVjIxLCBOVjEyLCBJNDIwLCBCR1JBLCBCR1J4LCBBUkdCLCB4UkdCLCBCR1IxNSwgUkdCMTUgfSwgd2lkdGg9KGludClbIDEsIDMyNzY4IF0sIGhlaWdodD0oaW50KVsgMSwgMzI3NjggXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF07IHZpZGVvL3gtc29uaXgsIHdpZHRoPShpbnQpWyAxLCAzMjc2OCBdLCBoZWlnaHQ9KGludClbIDEsIDMyNzY4IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXZwODsgdmlkZW8veC13bXYsIHdtdnZlcnNpb249KGludCkzLCBmb3JtYXQ9KHN0cmluZylXVkMxPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2JveC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MGI3YzQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvYm94LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnZpZGVvYm94PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+cmVzaXplcyBhIHZpZGVvIGJ5IGFkZGluZyBib3JkZXJzIG9yIGNyb3BwaW5nPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC92aWRlb2JveC8ubGlicy9saWJnc3R2aWRlb2JveC5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3R2aWRlb2JveC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dmlkZW9ib3g8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VmlkZW8gYm94IGZpbHRlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UmVzaXplcyBhIHZpZGVvIGJ5IGFkZGluZyBib3JkZXJzIG9yIGNyb3BwaW5nPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIHhSR0IsIEJHUngsIHhCR1IsIFJHQngsIFJHQiwgQkdSLCBZNDQ0LCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBZNDFCLCBHUkFZOCwgR1JBWTE2X0JFLCBHUkFZMTZfTEUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIHhSR0IsIEJHUngsIHhCR1IsIFJHQngsIFJHQiwgQkdSLCBZNDQ0LCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBZNDFCLCBHUkFZOCwgR1JBWTE2X0JFLCBHUkFZMTZfTEUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvY3JvcC54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY1NjhjMi4uMDAwMDAwMAotLS0gYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9jcm9wLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPnZpZGVvY3JvcDwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPkNyb3BzIHZpZGVvIGludG8gYSB1c2VyLWRlZmluZWQgcmVnaW9uPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC92aWRlb2Nyb3AvLmxpYnMvbGliZ3N0dmlkZW9jcm9wLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHZpZGVvY3JvcC5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+YXNwZWN0cmF0aW9jcm9wPC9uYW1lPgotICAgICAgPGxvbmduYW1lPmFzcGVjdHJhdGlvY3JvcDwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q3JvcHMgdmlkZW8gaW50byBhIHVzZXItZGVmaW5lZCBhc3BlY3QtcmF0aW88L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5UaGlqcyBWZXJtZWlyICZsdDt0aGlqc3Zlcm1laXJAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCQSwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCLCBCR1IsIEFZVVYsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFJHQjE2LCBSR0IxNSwgR1JBWTgsIE5WMTIsIE5WMjEsIEdSQVkxNl9MRSwgR1JBWTE2X0JFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSLCBSR0JBLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0IsIEJHUiwgQVlVViwgWVVZMiwgWVZZVSwgVVlWWSwgSTQyMCwgWVYxMiwgUkdCMTYsIFJHQjE1LCBHUkFZOCwgTlYxMiwgTlYyMSwgR1JBWTE2X0xFLCBHUkFZMTZfQkUgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dmlkZW9jcm9wPC9uYW1lPgotICAgICAgPGxvbmduYW1lPkNyb3A8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkNyb3BzIHZpZGVvIGludG8gYSB1c2VyLWRlZmluZWQgcmVnaW9uPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+VGltLVBoaWxpcHAgTcO8bGxlciAmbHQ7dGltIGNlbnRyaWN1bGFyIG5ldCZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFJHQngsIHhSR0IsIEJHUngsIHhCR1IsIFJHQkEsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQiwgQkdSLCBBWVVWLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBSR0IxNiwgUkdCMTUsIEdSQVk4LCBOVjEyLCBOVjIxLCBHUkFZMTZfTEUsIEdSQVkxNl9CRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCQSwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCLCBCR1IsIEFZVVYsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFJHQjE2LCBSR0IxNSwgR1JBWTgsIE5WMTIsIE5WMjEsIEdSQVkxNl9MRSwgR1JBWTE2X0JFIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9maWx0ZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmZlNGQ4Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12aWRlb2ZpbHRlci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi08cGx1Z2luPgotICA8bmFtZT52aWRlb2ZpbHRlcjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlZpZGVvIGZpbHRlcnMgcGx1Z2luPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC92aWRlb2ZpbHRlci8ubGlicy9saWJnc3R2aWRlb2ZpbHRlci5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3R2aWRlb2ZpbHRlci5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+Z2FtbWE8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+VmlkZW8gZ2FtbWEgY29ycmVjdGlvbjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+RmlsdGVyL0VmZmVjdC9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+QWRqdXN0cyBnYW1tYSBvbiBhIHZpZGVvIHN0cmVhbTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkFyd2VkIHYuIE1lcmthdHogJmx0O3YubWVya2F0ekBnbXgubmV0PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBSR0J4LCB4QkdSLCBCR1J4LCBSR0IsIEJHUiwgWTQyQiwgTlYxMiwgTlYyMSwgWVVZMiwgVVlWWSwgWVZZVSwgSTQyMCwgWVYxMiwgSVlVViwgWTQxQiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgUkdCeCwgeEJHUiwgQkdSeCwgUkdCLCBCR1IsIFk0MkIsIE5WMTIsIE5WMjEsIFlVWTIsIFVZVlksIFlWWVUsIEk0MjAsIFlWMTIsIElZVVYsIFk0MUIgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dmlkZW9iYWxhbmNlPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlZpZGVvIGJhbGFuY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkZpbHRlci9FZmZlY3QvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkFkanVzdHMgYnJpZ2h0bmVzcywgY29udHJhc3QsIGh1ZSwgc2F0dXJhdGlvbiBvbiBhIHZpZGVvIHN0cmVhbTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhdmlkIFNjaGxlZWYgJmx0O2RzQHNjaGxlZWYub3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgUkdCeCwgeEJHUiwgQkdSeCwgUkdCLCBCR1IsIFk0MkIsIFlVWTIsIFVZVlksIFlWWVUsIEk0MjAsIFlWMTIsIElZVVYsIFk0MUIsIE5WMTIsIE5WMjEgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdOyB2aWRlby94LXJhdyhBTlkpPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsIHhSR0IsIFJHQngsIHhCR1IsIEJHUngsIFJHQiwgQkdSLCBZNDJCLCBZVVkyLCBVWVZZLCBZVllVLCBJNDIwLCBZVjEyLCBJWVVWLCBZNDFCLCBOVjEyLCBOVjIxIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTsgdmlkZW8veC1yYXcoQU5ZKTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnZpZGVvZmxpcDwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5WaWRlbyBmbGlwcGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5GbGlwcyBhbmQgcm90YXRlcyB2aWRlbzwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhdmlkIFNjaGxlZWYgJmx0O2RzQHNjaGxlZWYub3JnJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgUkdCeCwgeEJHUiwgQkdSeCwgUkdCLCBCR1IsIEk0MjAsIFlWMTIsIElZVVYsIFlVWTIsIFVZVlksIFlWWVUsIE5WMTIsIE5WMjEsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgUkdCeCwgeEJHUiwgQkdSeCwgUkdCLCBCR1IsIEk0MjAsIFlWMTIsIElZVVYsIFlVWTIsIFVZVlksIFlWWVUsIE5WMTIsIE5WMjEsIEdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT52aWRlb21lZGlhbjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5NZWRpYW4gZWZmZWN0PC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWZmZWN0L1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5BcHBseSBhIG1lZGlhbiBmaWx0ZXIgdG8gYW4gaW1hZ2U8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5XaW0gVGF5bWFucyAmbHQ7d2ltLnRheW1hbnNAZ21haWwuY29tJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKXsgSTQyMCwgWVYxMiB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdmlkZW9taXhlci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZjQ3ZjIuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXZpZGVvbWl4ZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+dmlkZW9taXhlcjwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPlZpZGVvIG1peGVyPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC92aWRlb21peGVyLy5saWJzL2xpYmdzdHZpZGVvbWl4ZXIuc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0dmlkZW9taXhlci5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dmlkZW9taXhlcjwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5WaWRlbyBtaXhlciAyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5GaWx0ZXIvRWRpdG9yL1ZpZGVvL0NvbXBvc2l0b3I8L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPk1peCBtdWx0aXBsZSB2aWRlbyBzdHJlYW1zPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+V2ltIFRheW1hbnMgJmx0O3dpbUBmbHVlbmRvLmNvbSZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbmtfJXU8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnJlcXVlc3Q8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEFZVVYsIEJHUkEsIEFSR0IsIFJHQkEsIEFCR1IsIFk0NDQsIFk0MkIsIFlVWTIsIFVZVlksIFlWWVUsIEk0MjAsIFlWMTIsIE5WMTIsIE5WMjEsIFk0MUIsIFJHQiwgQkdSLCB4UkdCLCB4QkdSLCBSR0J4LCBCR1J4IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBBWVVWLCBCR1JBLCBBUkdCLCBSR0JBLCBBQkdSLCBZNDQ0LCBZNDJCLCBZVVkyLCBVWVZZLCBZVllVLCBJNDIwLCBZVjEyLCBOVjEyLCBOVjIxLCBZNDFCLCBSR0IsIEJHUiwgeFJHQiwgeEJHUiwgUkdCeCwgQkdSeCB9LCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgZnJhbWVyYXRlPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4tdnB4LnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQxNmZlLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi12cHgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+dnB4PC9uYW1lPgotICA8ZGVzY3JpcHRpb24+VlA4IHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9leHQvdnB4Ly5saWJzL2xpYmdzdHZweC5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3R2cHguc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnZwOGRlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5PbjIgVlA4IERlY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlY29kZXIvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRlY29kZSBWUDggdmlkZW8gc3RyZWFtczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhdmlkIFNjaGxlZWYgJmx0O2RzQGVudHJvcHl3YXZlLmNvbSZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC12cDg8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPnZwOGVuYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5PbjIgVlA4IEVuY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0VuY29kZXIvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkVuY29kZSBWUDggdmlkZW8gc3RyZWFtczwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPkRhdmlkIFNjaGxlZWYgJmx0O2RzQGVudHJvcHl3YXZlLmNvbSZndDssIFNlYmFzdGlhbiBEcsO2Z2UgJmx0O3NlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrJmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKUk0MjAsIHdpZHRoPShpbnQpWyAxLCAxNjM4MyBdLCBoZWlnaHQ9KGludClbIDEsIDE2MzgzIF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtdnA4LCBwcm9maWxlPShzdHJpbmcpeyAwLCAxLCAyLCAzIH08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT52cDlkZWM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+T24yIFZQOSBEZWNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9EZWNvZGVyL1ZpZGVvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5EZWNvZGUgVlA5IHZpZGVvIHN0cmVhbXM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5EYXZpZCBTY2hsZWVmICZsdDtkc0BlbnRyb3B5d2F2ZS5jb20mZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51ayZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtdnA5PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPnZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IEk0MjAsIFlWMTIsIFk0MkIsIFk0NDQgfSwgd2lkdGg9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgaGVpZ2h0PShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+dnA5ZW5jPC9uYW1lPgotICAgICAgPGxvbmduYW1lPk9uMiBWUDkgRW5jb2RlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRW5jb2Rlci9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+RW5jb2RlIFZQOSB2aWRlbyBzdHJlYW1zPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+RGF2aWQgU2NobGVlZiAmbHQ7ZHNAZW50cm9weXdhdmUuY29tJmd0OywgU2ViYXN0aWFuIERyw7ZnZSAmbHQ7c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWsmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJNDIwLCBZVjEyIH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXZwOSwgcHJvZmlsZT0oc3RyaW5nKXsgMCwgMSwgMiwgMyB9PC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVmb3JtLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlZm9ybS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZDI3N2UuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdmVmb3JtLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPndhdmVmb3JtPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+V2F2ZUZvcm0gQVBJIGJhc2VkIHBsdWdpbjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi93aW4zMi92czYvcmVsZWFzZS9saWJnc3R3YXZlZm9ybS5kbGw8L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0d2F2ZWZvcm0uZGxsPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MC4xMC40LjE8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtYmFkPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIENWUzwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPndhdmVmb3Jtc2luazwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5XYXZlRm9ybSBhdWRpbyBzaW5rPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5TaW5rL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5XYXZlRm9ybSBhdWRpbyBzaW5rPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+U2ViYXN0aWVuIE1vdXR0ZSAmbHQ7c2ViYXN0aWVuQG1vdXR0ZS5uZXQmZ3Q7PC9hdXRob3I+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2ZW5jLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGY1MDhiLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZlbmMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+d2F2ZW5jPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+RW5jb2RlIHJhdyBhdWRpbyBpbnRvIFdBVjwvZGVzY3JpcHRpb24+Ci0gIDxmaWxlbmFtZT4uLi8uLi9nc3Qvd2F2ZW5jLy5saWJzL2xpYmdzdHdhdmVuYy5zbzwvZmlsZW5hbWU+Ci0gIDxiYXNlbmFtZT5saWJnc3R3YXZlbmMuc288L2Jhc2VuYW1lPgotICA8dmVyc2lvbj4xLjEwLjQ8L3ZlcnNpb24+Ci0gIDxsaWNlbnNlPkxHUEw8L2xpY2Vuc2U+Ci0gIDxzb3VyY2U+Z3N0LXBsdWdpbnMtZ29vZDwvc291cmNlPgotICA8cGFja2FnZT5HU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZTwvcGFja2FnZT4KLSAgPG9yaWdpbj5Vbmtub3duIHBhY2thZ2Ugb3JpZ2luPC9vcmlnaW4+Ci0gIDxlbGVtZW50cz4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPndhdmVuYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5XQVYgYXVkaW8gbXV4ZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL011eGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FbmNvZGUgcmF3IGF1ZGlvIGludG8gV0FWPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+SWFpbiBIb2xtZXMgJmx0O2lhaW5AcHJldHR5cGVvcGxlLm9yZyZndDs8L2F1dGhvcj4KLSAgICAgIDxwYWRzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zaW5rPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c2luazwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtcmF3LCByYXRlPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGNoYW5uZWxzPShpbnQpWyAxLCA2NTUzNSBdLCBmb3JtYXQ9KHN0cmluZyl7IFMzMkxFLCBTMjRMRSwgUzE2TEUsIFU4LCBGMzJMRSwgRjY0TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ7IGF1ZGlvL3gtYWxhdywgcmF0ZT0oaW50KVsgODAwMCwgMTkyMDAwIF0sIGNoYW5uZWxzPShpbnQpWyAxLCAyIF07IGF1ZGlvL3gtbXVsYXcsIHJhdGU9KGludClbIDgwMDAsIDE5MjAwMCBdLCBjaGFubmVscz0oaW50KVsgMSwgMiBdPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNyYzwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNvdXJjZTwvZGlyZWN0aW9uPgotICAgICAgICAgIDxwcmVzZW5jZT5hbHdheXM8L3ByZXNlbmNlPgotICAgICAgICAgIDxkZXRhaWxzPmF1ZGlvL3gtd2F2OyBhdWRpby94LXJmNjQ8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWwgYi9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4td2F2cGFjay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MGUwOTMuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhY2sueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+d2F2cGFjazwvbmFtZT4KLSAgPGRlc2NyaXB0aW9uPldhdnBhY2sgbG9zc2xlc3MvbG9zc3kgYXVkaW8gZm9ybWF0IGhhbmRsaW5nPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2V4dC93YXZwYWNrLy5saWJzL2xpYmdzdHdhdnBhY2suc288L2ZpbGVuYW1lPgotICA8YmFzZW5hbWU+bGliZ3N0d2F2cGFjay5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+d2F2cGFja2RlYzwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5XYXZwYWNrIGF1ZGlvIGRlY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0RlY29kZXIvQXVkaW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkRlY29kZXMgV2F2cGFjayBhdWRpbyBkYXRhPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+QXJ3ZWQgdi4gTWVya2F0eiAmbHQ7di5tZXJrYXR6QGdteC5uZXQmZ3Q7LCBTZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXdhdnBhY2ssIGRlcHRoPShpbnQpWyAxLCAzMiBdLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA2MDAwLCAxOTIwMDAgXSwgZnJhbWVkPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVM4LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZCwgY2hhbm5lbHM9KGludClbIDEsIDggXSwgcmF0ZT0oaW50KVsgNjAwMCwgMTkyMDAwIF07IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylTMTZMRSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQsIGNoYW5uZWxzPShpbnQpWyAxLCA4IF0sIHJhdGU9KGludClbIDYwMDAsIDE5MjAwMCBdOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzMyTEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA2MDAwLCAxOTIwMDAgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgICA8ZWxlbWVudD4KLSAgICAgIDxuYW1lPndhdnBhY2tlbmM8L25hbWU+Ci0gICAgICA8bG9uZ25hbWU+V2F2cGFjayBhdWRpbyBlbmNvZGVyPC9sb25nbmFtZT4KLSAgICAgIDxjbGFzcz5Db2RlYy9FbmNvZGVyL0F1ZGlvPC9jbGFzcz4KLSAgICAgIDxkZXNjcmlwdGlvbj5FbmNvZGVzIGF1ZGlvIHdpdGggdGhlIFdhdnBhY2sgbG9zc2xlc3MvbG9zc3kgYXVkaW8gY29kZWM8L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5TZWJhc3RpYW4gRHLDtmdlICZsdDtzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpUzMyTEUsIGxheW91dD0oc3RyaW5nKWludGVybGVhdmVkLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA2MDAwLCAxOTIwMDAgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hdWRpby94LXdhdnBhY2ssIGRlcHRoPShpbnQpWyAxLCAzMiBdLCBjaGFubmVscz0oaW50KVsgMSwgOCBdLCByYXRlPShpbnQpWyA2MDAwLCAxOTIwMDAgXSwgZnJhbWVkPShib29sZWFuKXRydWU8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+d3Zjc3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPnNvbWV0aW1lczwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC13YXZwYWNrLWNvcnJlY3Rpb24sIGZyYW1lZD0oYm9vbGVhbil0cnVlPC9kZXRhaWxzPgotICAgICAgICA8L2NhcHM+Ci0gICAgICA8L3BhZHM+Ci0gICAgPC9lbGVtZW50PgotICA8L2VsZW1lbnRzPgotPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi13YXZwYXJzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYzVkODQuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL2luc3BlY3QvcGx1Z2luLXdhdnBhcnNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTxwbHVnaW4+Ci0gIDxuYW1lPndhdnBhcnNlPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+UGFyc2UgYSAud2F2IGZpbGUgaW50byByYXcgYXVkaW88L2Rlc2NyaXB0aW9uPgotICA8ZmlsZW5hbWU+Li4vLi4vZ3N0L3dhdnBhcnNlLy5saWJzL2xpYmdzdHdhdnBhcnNlLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHdhdnBhcnNlLnNvPC9iYXNlbmFtZT4KLSAgPHZlcnNpb24+MS4xMC40PC92ZXJzaW9uPgotICA8bGljZW5zZT5MR1BMPC9saWNlbnNlPgotICA8c291cmNlPmdzdC1wbHVnaW5zLWdvb2Q8L3NvdXJjZT4KLSAgPHBhY2thZ2U+R1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgc291cmNlIHJlbGVhc2U8L3BhY2thZ2U+Ci0gIDxvcmlnaW4+VW5rbm93biBwYWNrYWdlIG9yaWdpbjwvb3JpZ2luPgotICA8ZWxlbWVudHM+Ci0gICAgPGVsZW1lbnQ+Ci0gICAgICA8bmFtZT53YXZwYXJzZTwvbmFtZT4KLSAgICAgIDxsb25nbmFtZT5XQVYgYXVkaW8gZGVtdXhlcjwvbG9uZ25hbWU+Ci0gICAgICA8Y2xhc3M+Q29kZWMvRGVtdXhlci9BdWRpbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+UGFyc2UgYSAud2F2IGZpbGUgaW50byByYXcgYXVkaW88L2Rlc2NyaXB0aW9uPgotICAgICAgPGF1dGhvcj5FcmlrIFdhbHRoaW5zZW4gJmx0O29tZWdhQGNzZS5vZ2kuZWR1Jmd0OzwvYXV0aG9yPgotICAgICAgPHBhZHM+Ci0gICAgICAgIDxjYXBzPgotICAgICAgICAgIDxuYW1lPnNpbms8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zaW5rPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8veC13YXY8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+YXVkaW8vbXMtZ3NtOyBhdWRpby9tcGVnLCBtcGVndmVyc2lvbj0oaW50KTEsIGxheWVyPShpbnQpMzsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCkxLCBsYXllcj0oaW50KTI7IGF1ZGlvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZyl7IFM4LCBVOCwgUzE2TEUsIFUxNkxFLCBTMjRMRSwgVTI0TEUsIFMzMkxFLCBVMzJMRSB9LCBsYXlvdXQ9KHN0cmluZylpbnRlcmxlYXZlZDsgYXVkaW8veC12b3JiaXM7IGF1ZGlvL3gtYWMzOyBhdWRpby94LWR0czsgYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb249KGludCk0OyBhdWRpby94LWFsYXc7IGF1ZGlvL3gtbXVsYXc7IGF1ZGlvL3gtd21zLCBiaXRyYXRlPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF0sIGJsb2NrX2FsaWduPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKW1pY3Jvc29mdCwgYmxvY2tfYWxpZ249KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZHZpLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXRydWVzcGVlY2g7IGF1ZGlvL3gtd21hLCB3bWF2ZXJzaW9uPShpbnQpMSwgYml0cmF0ZT0oaW50KVsgMCwgMjE0NzQ4MzY0NyBdLCBibG9ja19hbGlnbj0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdOyBhdWRpby94LXdtYSwgd21hdmVyc2lvbj0oaW50KTIsIGJpdHJhdGU9KGludClbIDAsIDIxNDc0ODM2NDcgXSwgYmxvY2tfYWxpZ249KGludClbIDEsIDIxNDc0ODM2NDcgXTsgYXVkaW8veC13bWEsIHdtYXZlcnNpb249KGludCkzLCBiaXRyYXRlPShpbnQpWyAwLCAyMTQ3NDgzNjQ3IF0sIGJsb2NrX2FsaWduPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF07IGF1ZGlvL3gtdm5kLnNvbnkuYXRyYWMzOyBhdWRpby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBGMzJMRSwgRjY0TEUgfSwgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQ7IGF1ZGlvL3gtdm94d2FyZSwgdm94d2FyZXR5cGU9KGludCkxMTc7IGF1ZGlvL3gtYWRwY20sIGxheW91dD0oc3RyaW5nKWRrNDsgYXVkaW8veC1hZHBjbSwgbGF5b3V0PShzdHJpbmcpZGszOyBhdWRpby94LWFkcGNtLCBsYXlvdXQ9KHN0cmluZylkdmk7IGF1ZGlvL0FNUjsgYXVkaW8vQU1SLVdCOyBhdWRpby94LXNpcmVuOyBhcHBsaWNhdGlvbi94LW9nZy1hdmk8L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teGltYWdlc3JjLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODY2NGExLi4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi14aW1hZ2VzcmMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+eGltYWdlc3JjPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+WDExIHZpZGVvIGlucHV0IHBsdWdpbiB1c2luZyBzdGFuZGFyZCBYbGliIGNhbGxzPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL3N5cy94aW1hZ2UvLmxpYnMvbGliZ3N0eGltYWdlc3JjLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHhpbWFnZXNyYy5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+eGltYWdlc3JjPC9uYW1lPgotICAgICAgPGxvbmduYW1lPlhpbWFnZSB2aWRlbyBzb3VyY2U8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPlNvdXJjZS9WaWRlbzwvY2xhc3M+Ci0gICAgICA8ZGVzY3JpcHRpb24+Q3JlYXRlcyBhIHNjcmVlbnNob3QgdmlkZW8gc3RyZWFtPC9kZXNjcmlwdGlvbj4KLSAgICAgIDxhdXRob3I+THV0eiBNdWVsbGVyICZsdDtsdXR6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldCZndDssIEphbiBTY2htaWR0ICZsdDt0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tJmd0OywgWmFoZWVyIE1lcmFsaSAmbHQ7emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmcmZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c3JjPC9uYW1lPgotICAgICAgICAgIDxkaXJlY3Rpb24+c291cmNlPC9kaXJlY3Rpb24+Ci0gICAgICAgICAgPHByZXNlbmNlPmFsd2F5czwvcHJlc2VuY2U+Ci0gICAgICAgICAgPGRldGFpbHM+dmlkZW8veC1yYXcsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pWyAwLzEsIDIxNDc0ODM2NDcvMSBdLCB3aWR0aD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBoZWlnaHQ9KGludClbIDEsIDIxNDc0ODM2NDcgXSwgcGl4ZWwtYXNwZWN0LXJhdGlvPShmcmFjdGlvbilbIDAvMSwgMjE0NzQ4MzY0Ny8xIF08L2RldGFpbHM+Ci0gICAgICAgIDwvY2Fwcz4KLSAgICAgIDwvcGFkcz4KLSAgICA8L2VsZW1lbnQ+Ci0gIDwvZWxlbWVudHM+Ci08L3BsdWdpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL3BsdWdpbnMvaW5zcGVjdC9wbHVnaW4teTRtZW5jLnhtbCBiL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTAyZDY0Li4wMDAwMDAwCi0tLSBhL2RvY3MvcGx1Z2lucy9pbnNwZWN0L3BsdWdpbi15NG1lbmMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPHBsdWdpbj4KLSAgPG5hbWU+eTRtZW5jPC9uYW1lPgotICA8ZGVzY3JpcHRpb24+RW5jb2RlcyBhIFlVViBmcmFtZSBpbnRvIHRoZSB5dXY0bXBlZyBmb3JtYXQgKG1qcGVndG9vbHMpPC9kZXNjcmlwdGlvbj4KLSAgPGZpbGVuYW1lPi4uLy4uL2dzdC95NG0vLmxpYnMvbGliZ3N0eTRtZW5jLnNvPC9maWxlbmFtZT4KLSAgPGJhc2VuYW1lPmxpYmdzdHk0bWVuYy5zbzwvYmFzZW5hbWU+Ci0gIDx2ZXJzaW9uPjEuMTAuNDwvdmVyc2lvbj4KLSAgPGxpY2Vuc2U+TEdQTDwvbGljZW5zZT4KLSAgPHNvdXJjZT5nc3QtcGx1Z2lucy1nb29kPC9zb3VyY2U+Ci0gIDxwYWNrYWdlPkdTdHJlYW1lciBHb29kIFBsdWctaW5zIHNvdXJjZSByZWxlYXNlPC9wYWNrYWdlPgotICA8b3JpZ2luPlVua25vd24gcGFja2FnZSBvcmlnaW48L29yaWdpbj4KLSAgPGVsZW1lbnRzPgotICAgIDxlbGVtZW50PgotICAgICAgPG5hbWU+eTRtZW5jPC9uYW1lPgotICAgICAgPGxvbmduYW1lPllVVjRNUEVHIHZpZGVvIGVuY29kZXI8L2xvbmduYW1lPgotICAgICAgPGNsYXNzPkNvZGVjL0VuY29kZXIvVmlkZW88L2NsYXNzPgotICAgICAgPGRlc2NyaXB0aW9uPkVuY29kZXMgYSBZVVYgZnJhbWUgaW50byB0aGUgeXV2NG1wZWcgZm9ybWF0IChtanBlZ3Rvb2xzKTwvZGVzY3JpcHRpb24+Ci0gICAgICA8YXV0aG9yPldpbSBUYXltYW5zICZsdDt3aW0udGF5bWFuc0BnbWFpbC5jb20mZ3Q7PC9hdXRob3I+Ci0gICAgICA8cGFkcz4KLSAgICAgICAgPGNhcHM+Ci0gICAgICAgICAgPG5hbWU+c2luazwvbmFtZT4KLSAgICAgICAgICA8ZGlyZWN0aW9uPnNpbms8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz52aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpeyBJWVVWLCBJNDIwLCBZNDJCLCBZNDFCLCBZNDQ0IH0sIHdpZHRoPShpbnQpWyAxLCAyMTQ3NDgzNjQ3IF0sIGhlaWdodD0oaW50KVsgMSwgMjE0NzQ4MzY0NyBdLCBmcmFtZXJhdGU9KGZyYWN0aW9uKVsgMC8xLCAyMTQ3NDgzNjQ3LzEgXTwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgICA8Y2Fwcz4KLSAgICAgICAgICA8bmFtZT5zcmM8L25hbWU+Ci0gICAgICAgICAgPGRpcmVjdGlvbj5zb3VyY2U8L2RpcmVjdGlvbj4KLSAgICAgICAgICA8cHJlc2VuY2U+YWx3YXlzPC9wcmVzZW5jZT4KLSAgICAgICAgICA8ZGV0YWlscz5hcHBsaWNhdGlvbi94LXl1djRtcGVnLCB5NG12ZXJzaW9uPShpbnQpMjwvZGV0YWlscz4KLSAgICAgICAgPC9jYXBzPgotICAgICAgPC9wYWRzPgotICAgIDwvZWxlbWVudD4KLSAgPC9lbGVtZW50cz4KLTwvcGx1Z2luPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvcGx1Z2lucy9zY2Fub2JqLWJ1aWxkLnN0YW1wIGIvZG9jcy9wbHVnaW5zL3NjYW5vYmotYnVpbGQuc3RhbXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvZG9jcy9wbHVnaW5zL3NjYW5vYmotYnVpbGQuc3RhbXAKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZG9jcy9yYW5kb20vQ2hhbmdlTG9nLTAuOCBiL2RvY3MvcmFuZG9tL0NoYW5nZUxvZy0wLjgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2M2VmNmMuLjAwMDAwMDAKLS0tIGEvZG9jcy9yYW5kb20vQ2hhbmdlTG9nLTAuOAorKysgL2Rldi9udWxsCkBAIC0xLDE3NTAxICswLDAgQEAKLTIwMDUtMDgtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIFVwZGF0ZXMgZm9yIHR3by1hcmcgaW5pdCBmcm9tIEdTVF9CT0lMRVJQTEFURS4KLQotCSogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuYyAoZ3N0X3NpZ25hbF9wcm9jZXNzb3JfaW5pdCk6IFVzZQotCXRoZSBzZWNvbmQgYXJnIGZvciB0aGUgY2xhc3MsIGJlY2F1c2UgR19PQkpFQ1RfR0VUX0NMQVNTIChzZWxmKQotCXJldHVybnMgdGhlIHdyb25nIHRoaW5nLgotCShnc3Rfc2lnbmFsX3Byb2Nlc3Nvcl9hZGRfcGFkX2Zyb21fdGVtcGxhdGUpOiBNYWtlIHBhZHMgb2YgdGhlCi0JcmlnaHQgdHlwZS4KLQotCSogZXh0L2xhZHNwYS9nc3RsYWRzcGEuYyAoZ3N0X2xhZHNwYV9jbGFzc19nZXRfcGFyYW1fc3BlYyk6IE1ha2UKLQl3cml0YWJsZSBwYXJhbSBzcGVjcyBHX1BBUkFNX0NPTlNUUlVDVCBzbyBkZWZhdWx0IHZhbHVlcyB3b3JrLgotCShnc3RfbGFkc3BhX2luaXQpOiBVc2UgdGhlIHNlY29uZCBhcmcgZm9yIHRoZSBjbGFzcy4KLQotMjAwNS0wOC0yNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2xhZHNwYS9nc3RsYWRzcGEuYzogCi0JKiBleHQvbGFkc3BhL2dzdGxhZHNwYS5oOiBGaW5pc2ggcG9ydGluZywgc3RpbGwgZG9lc24ndCB3b3JrIGJ1dAotCWl0IGRvZXMgY29tcGlsZSBhbmQgcmVnaXN0ZXIuIEkgaGF2ZSBtb3JlIGZlYXR1cmVzIHRoYW4geW91LgotCQotCSogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuaDogCi0JKiBleHQvbGFkc3BhL2dzdHNpZ25hbHByb2Nlc3Nvci5jOiBVcGRhdGVzLCBidWcgZml4ZW4uCi0KLTIwMDUtMDgtMjYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6IChnc3RfcXVhcmt0dl9pbml0KSwKLQkoZ3N0X3F1YXJrdHZfY2hhbmdlX3N0YXRlKToKLQkgIGRvIHByb3BlciBjbGVhbnVwL2NyZWF0aW9uLCBmaXhlcyBzdGF0ZSBjaGFuZ2VzCi0KLTIwMDUtMDgtMjUgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6IChnc3RfbGV2ZWxfbWVzc2FnZV9uZXcpOgotCVJldmVydCB1bnBvcHVsYXIgY2hhbmdlIGZvciBHU1RfTUVTU0FHRV9TUkMgdG8gR09iamVjdC4KLQotMjAwNS0wOC0yNSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2xhZHNwYS9nc3RsYWRzcGEuaDogCi0JKiBleHQvbGFkc3BhL2dzdGxhZHNwYS5jOiBIYWxmd2F5LXBvcnRlZC4gRG9lc24ndCBjb21waWxlIHlldC4KLQotCSogZXh0L2xhZHNwYS9nc3RzaWduYWxwcm9jZXNzb3IuaDoKLQkqIGV4dC9sYWRzcGEvZ3N0c2lnbmFscHJvY2Vzc29yLmM6IE5ldyBmaWxlcywgdGhlIHN0YXJ0IG9mIGEgYmFzZQotCWNsYXNzIGZvciBEU1AgZWxlbWVudHMuCi0KLQkqIGNvbmZpZ3VyZS5hYzogU29ydCB0aGUgZXh0ZXJuYWwgbGlicyBjaGVja3MsIGFkZCBhIGxhZHNwYSBjaGVjaywKLQlvdXRwdXQgdGhlIGxhZHNwYSBtYWtlZmlsZS4KLQotMjAwNS0wOC0yNSAgT3dlbiBGcmFzZXItR3JlZW4gIDxvd2VuQGRpc2NvYmFiZS5uZXQ+Ci0KLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jIChnc3Rfcm1kZW11eF9sb29wLCBnc3Rfcm1kZW11eF9jaGFpbik6Ci0JRml4ZWQgRU9TLgotCShnc3Rfcm1kZW11eF9wYXJzZV9pbmR4X2RhdGEsIGdzdF9ybWRlbXV4X3BhcnNlX2luZHgpOiBIYW5kbGUKLQltYWxmb3JtZWQgaW5kZXggaGVhZGVycyB3aGVyZSB0aGUgcGFja2V0IHNpemUgaXMgaW5jb3JyZWN0LgotCi0yMDA1LTA4LTI0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5jIChnc3RfZHZkZW11eF9kZW11eF9mcmFtZSk6IFNlbmQgb3V0IHZhbGlkCi0Jc2VnbWVudCBlbmQgdGltZXN0YW1wcy4KLQotMjAwNS0wOC0yNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSAgbGFtZSBhbmQgbXBlZ2F1ZGlvcGFyc2Ugc2VlbSB0byB3b3JrCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCksCi0JKGdzdF92aWRlb19ib3hfdHJhbnNmb3JtX2NhcHMpLCAoZ3N0X3ZpZGVvX2JveF9nZXRfdW5pdF9zaXplKToKLQkgIHVwZGF0ZSBmb3IgYmFzZXRyYW5zZm9ybSBjaGFuZ2VzCi0KLTIwMDUtMDgtMjQgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX21lc3NhZ2VfbmV3KToKLQkgIEdTVF9NRVNTQUdFX1NSQyBiZWNhbWUgYSBHT2JqZWN0Ci0KLTIwMDUtMDgtMjMgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgRml4ZWQgaW5jbHVkZSBwYXRoIG9mIGFkYXB0ZXIKLQotMjAwNS0wOC0yMyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoZ3N0X3NwZWV4X2RlY19jbGFzc19pbml0KToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2NsYXNzX2luaXQpOgotCUZpeCBwcm9wZXJ0eSB3YXJuaW5nLgotCi0yMDA1LTA4LTIzICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJkZWMuYzogKGdzdF9ydHBhbXJkZWNfaW5pdCksCi0JKGdzdF9ydHBhbXJkZWNfc2lua19zZXRjYXBzKSwgKGdzdF9ydHBhbXJkZWNfY2hhaW4pOgotCSogZ3N0L3J0cC9nc3RydHBhbXJlbmMuYzogKGdzdF9ydHBhbXJlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9ydHBhbXJlbmNfaW5pdCksIChnc3RfcnRwYW1yZW5jX2NoYWluKToKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuYzogKGdzdF9ydHBoMjYzcGVuY19jbGFzc19pbml0KSwKLQkoZ3N0X3J0cGgyNjNwZW5jX2ZsdXNoKSwgKGdzdF9ydHBoMjYzcGVuY19jaGFpbik6Ci0JU21hbGwgdXBkYXRlcywgUkZDIHJlZmVyZW5jZSB0byBwYXlsb2FkIGVuY29kZXJzLgotCi0yMDA1LTA4LTIzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvc3BlZXgvTWFrZWZpbGUuYW06Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXguYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoc3BlZXhfZ2V0X3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X3NwZWV4X2RlY19pbml0KSwgKHNwZWV4X2RlY19zcmNfcXVlcnkpLCAoc3BlZXhfZGVjX3NyY19ldmVudCksCi0JKHNwZWV4X2RlY19ldmVudCksIChzcGVleF9kZWNfY2hhaW4pOgotCSAgUG9ydCBzcGVleGRlYy4gTGVhZHMgdG8gc29tZSB1bmZhbWlsaWFyIHdhcm5pbmdzIG9uIGNvbnNvbGUsCi0JICBidXQgd29ya3Mgb3RoZXJ3aXNlLgotCi0yMDA1LTA4LTIzICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jIChnc3Rfb3NzX3NyY19vcGVuKTogU2V0IHRoZSBkZXZpY2UtbmFtZQotCXByb3BlcnR5IGFmdGVyIG9wZW5pbmcgdGhlIG1peGVyLgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOiAKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmg6IEVhc3kgdG8gaW1wbGVtZW50IGEgbWl4ZXIsIGVoLi4uCi0KLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJlbGVtZW50Lmg6Ci0JKiBzeXMvb3NzL2dzdG9zc21peGVyZWxlbWVudC5jOiBBZGRlZCBtaXhlciBlbGVtZW50IGxpa2UKLQlhbHNhbWl4ZXIuCi0KLQkqIHN5cy9vc3MvTWFrZWZpbGUuYW06IAotCSogc3lzL29zcy9nc3Rvc3NhdWRpby5jOiBSZWdpc3RlciB0aGUgb3NzbWl4ZXIgZWxlbWVudC4KLQkKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXIuaDoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXIuYzogUmVmYWN0b3JlZCB0byBiZSBtb3JlIGxpa2UgYWxzYW1peGVyLgotCi0JKiBzeXMvb3NzL2dzdG9zc21peGVydHJhY2suaDoKLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXJ0cmFjay5jOiBTcGxpdCBvdXQgZnJvbSBnc3Rvc3NtaXhlci5bY2hdLAotCWxpa2UgZ3N0YWxzYW1peGVyLgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IFdoZXJlIGJlZm9yZSB3ZSB1c2VkIGEgZ3N0b3NzZWxlbWVudAotCW9iamVjdCBhcyBhIGhlbHBlciBsaWJyYXJ5LCBub3cganVzdCBjYWxsIGZ1bmN0aW9ucyBmcm9tCi0JZ3N0b3NzaGVscGVyLgotCi0JKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5oOgotCSogc3lzL29zcy9nc3Rvc3NoZWxwZXIuYzogTWFkZSBhIHJlYWwgbGlicmFyeS4gUmVtb3ZlZAotCXByb3BlcnR5cHJvYmUgZm9yIG5vdywgc2hvdWxkIGFkZCBpdCBiYWNrIGxhdGVyLgotCQotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50Lmg6Ci0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogUmVtb3ZlZCwgd2UgZG9uJ3QgaGF2ZSBhIHNoYXJlZCBiYXNlCi0JY2xhc3MuCi0JCi0JKiBzeXMvb3NzL2dzdG9zc2hlbHBlci5jIChnc3Rfb3NzX2hlbHBlcl9wcm9iZV9jYXBzKTogU2VhcmNoCi0JaGlnaGVyLXRvLWxvd2VyLCBtYWtlcyAxNiBiaXQgYXBwZWFyIGVhcmxpZXIgaW4gdGhlIGNhcHMsIHdoaWNoCi0JbWFrZXMgaXQgcHJlZmVycmVkLgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5oOiAKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IFRvdGFsbHkgcG9ydGVkLCBkdWRlLgotCi0JKiBzeXMvb3NzL01ha2VmaWxlLmFtOgotCSogc3lzL29zcy9nc3Rvc3NhdWRpby5jOiBBZGQgb3Nzc3JjLgotCQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IFdlIGRvIG5hdGl2ZSBieXRlIG9yZGVyLgotCi0yMDA1LTA4LTIzICBPd2VuIEZyYXNlci1HcmVlbiAgPG93ZW5AZGlzY29iYWJlLm5ldD4KLQotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmMgKGdzdF9ybWRlbXV4X3NyY19ldmVudCk6IEZpeGVkIGJ1ZwotCWNhdXNpbmcgZXZlbnRzIHRvIGJlIHBhc3NlZCB3cm9uZyB3YXkuCi0JKGdzdF9ybWRlbXV4X3BhcnNlX3BhY2tldCk6IEF2b2lkIGFjY2lkZW50YWxseSBza2lwcGluZyBhdWRpby4KLQotMjAwNS0wOC0yMiAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfaW5pdCksCi0JKGdzdF9pZDNfdGFnX3NpbmtfZXZlbnQpLCAoZ3N0X2lkM190YWdfZG9fY2Fwc19uZWdvKSwKLQkoZ3N0X2lkM190YWdfY2hhaW4pLCAoZ3N0X2lkM190YWdfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgIFdvcmtzIGEgYml0IGJldHRlciBub3csIGJ1dCBzdGlsbCBuZWVkcyBhIHJld3JpdGUgdG8gdXNlCi0JICBnZXRfcmFuZ2UgaW5zdGVhZCBvZiB0aGlzIHNlZWtpbmcgbmFzdGluZXNzLgotCi0yMDA1LTA4LTIyICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvZmxhYy9NYWtlZmlsZS5hbToKLQkqIGV4dC9mbGFjL2dzdGZsYWMuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGZsYWNkZWNfZ2V0X3R5cGUpLCAoZ3N0X2ZsYWNkZWNfaW5pdCksCi0JKGdzdF9mbGFjZGVjX3VwZGF0ZV9tZXRhZGF0YSksIChnc3RfZmxhY2RlY19zZWVrKSwKLQkoZ3N0X2ZsYWNkZWNfdGVsbCksIChnc3RfZmxhY2RlY19sZW5ndGgpLCAoZ3N0X2ZsYWNkZWNfcmVhZCksCi0JKGdzdF9mbGFjZGVjX3dyaXRlKSwgKGdzdF9mbGFjZGVjX2xvb3ApLAotCShnc3RfZmxhY2RlY19nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwgKGdzdF9mbGFjZGVjX3NyY19xdWVyeSksCi0JKGdzdF9mbGFjZGVjX3NyY19ldmVudCksIChnc3RfZmxhY2RlY19zaW5rX2FjdGl2YXRlKSwKLQkoZ3N0X2ZsYWNkZWNfc2lua19hY3RpdmF0ZV9wdWxsKSwgKGdzdF9mbGFjZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmg6Ci0JICBQb3J0IGZsYWNkZWMgKHNlZWtpbmcgaXMgc3RpbGwgc2xvdydpc2gpLgotCi0yMDA1LTA4LTIyICBPd2VuIEZyYXNlci1HcmVlbiAgPG93ZW5AZGlzY29iYWJlLm5ldD4KLQotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6IAotCShnc3Rfcm1kZW11eF9wZXJmb3JtX3NlZWssIGdzdF9ybWRlbXV4X3BhcnNlX3BhY2tldCk6IAotCVNlZWtpbmcgaW1wcm92ZW1lbnRzLgotCi0yMDA1LTA4LTE5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfY2xhc3NfaW5pdCk6Ci0JUmVtb3ZlIGdldF90aW1lIGNvZGUgdGhhdCBpcyBib3RoIHdyb25nIGFuZCB1bm5lZWRlZC4KLQotMjAwNS0wOC0xOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuYzogKGdzdF9ydHBoMjYzcGVuY19jbGFzc19pbml0KSwKLQkoZ3N0X3J0cGgyNjNwZW5jX2ZsdXNoKSwgKGdzdF9ydHBoMjYzcGVuY19jaGFpbiksCi0JKGdzdF9ydHBoMjYzcGVuY19zZXRfcHJvcGVydHkpLCAoZ3N0X3J0cGgyNjNwZW5jX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZW5jLmg6Ci0JQWRkZWQgY29uZmlndXJhYmxlIHB0IGFuZCBzc3JjLCB0byBiZSBtZXJnZWQgaW4gdGhlIGNhcHMgb3IKLQlhIGJhc2UgY2xhc3MuLi4KLQotMjAwNS0wOC0xOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BkZWMuYzogKGdzdF9ydHBoMjYzcGRlY19pbml0KSwKLQkoZ3N0X3J0cGgyNjNwZGVjX2NoYWluKToKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuYzogKGdzdF9ydHBoMjYzcGVuY19jbGFzc19pbml0KSwKLQkoZ3N0X3J0cGgyNjNwZW5jX2ZsdXNoKSwgKGdzdF9ydHBoMjYzcGVuY19jaGFpbik6Ci0JU29tZSBjbGVhbnVwcyBpbiB0aGUgaDI2M3AgKGRlKXBheWxvYWRlcnMuCi0KLTIwMDUtMDgtMTkgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvYW1ybmIvYW1ybmJkZWMuYzoKLQkqIGV4dC9hbXJuYi9hbXJuYmVuYy5jOiAoZ3N0X2Ftcm5iZW5jX3NldGNhcHMpOgotCSogZXh0L2Ftcm5iL2Ftcm5icGFyc2UuYzoKLQlVcGRhdGUgY2FwcyB3aXRoIGF1ZGlvL0FNUi4KLQkKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZGVjLmM6IChnc3RfcnRwYW1yZGVjX2luaXQpLAotCShnc3RfcnRwYW1yZGVjX3Npbmtfc2V0Y2FwcyksIChnc3RfcnRwYW1yZGVjX2NoYWluKSwKLQkoZ3N0X3J0cGFtcmRlY19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZWMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwYW1yZW5jLmM6IChnc3RfcnRwYW1yZW5jX2NsYXNzX2luaXQpLAotCShnc3RfcnRwYW1yZW5jX2luaXQpLCAoZ3N0X3J0cGFtcmVuY19jaGFpbik6Ci0JRG9udCBzZXQgRlQgaGVhZGVycyB0d2ljZSwgaXQgd2FzIGFscmVhZHkgaW4gdGhlIGVuY29kZWQKLQliaXRzdHJlYW0uCi0JCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZW5kKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCShnc3RfcnRzcHNyY19jbG9zZSksIChnc3RfcnRzcHNyY19wbGF5KToKLQkqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChwYXJzZV9saW5lKToKLQlDbGVhbnVwcwotCQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfY2xhc3NfaW5pdCksCi0JKGdzdF91ZHBzcmNfY3JlYXRlKSwgKGdzdF91ZHBzcmNfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3VkcHNyY19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQlBZGRlZCBjYXBzIHByb3BlcnR5LCB3ZSBuZWVkIHRoaXMgc29vbiB0byB0eXBlIHRoZSBidWZmZXJzLgotCi0yMDA1LTA4LTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJkZWMuYzogKGdzdF9ydHBhbXJkZWNfaW5pdCksCi0JKGdzdF9ydHBhbXJkZWNfY2hhaW4pOgotCUZpeCB1cCBhbXIgZGVwYXlsb2FkZXIgYSBiaXQuCi0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX3NlbmQpLCAoZ3N0X3J0c3BzcmNfb3BlbiksCi0JKGdzdF9ydHNwc3JjX2Nsb3NlKSwgKGdzdF9ydHNwc3JjX3BsYXkpOgotCUxvb2sgZm9yIG9wdGlvbnMgcmVzdWx0IGluIFB1YmxpYyBhbmQgQWxsb3cgaGVhZGVyIGZpZWxkcy4uCi0Jc3BlYyBzYXlzIEFsbG93IGJ1dCBzb21lIHNlcnZlcnMgcmV0dXJuIFB1YmxpYy4uLgotCi0yMDA1LTA4LTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3J0cC9nc3RydHBhbXJlbmMuYzogKGdzdF9ydHBhbXJlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9ydHBhbXJlbmNfaW5pdCksIChnc3RfcnRwYW1yZW5jX2NoYWluKSwKLQkoZ3N0X3J0cGFtcmVuY19zZXRfcHJvcGVydHkpLCAoZ3N0X3J0cGFtcmVuY19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3J0cC9nc3RydHBhbXJlbmMuaDoKLQlBZGRlZCBwYXlsb2FkX3R5cGUgYW5kIHNzcmMgcHJvcGVydGllcyB0byB0aGUgcGF5bG9hZGVyLgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZW5kKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCShnc3RfcnRzcHNyY19jbG9zZSksIChnc3RfcnRzcHNyY19wbGF5KToKLQlPcHRpb25zIG5lZWQgdG8gYmUgc3RyaXBwZWQgYW5kIGFyZSBpbiB0aGUgUHVibGljIGhlYWRlciBmaWVsZC4KLQotCSogZ3N0L3J0c3AvcnRzcHVybC5jOiAocnRzcF91cmxfcGFyc2UpOgotCUZpeCB1cmwgLyBwYXJzaW5nLi4uCi0KLQotMjAwNS0wOC0xOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSogZ3N0L3J0cC9nc3RydHBhbXJkZWMuYzogKGdzdF9ydHBhbXJkZWNfZ2V0X3R5cGUpLAotCShnc3RfcnRwYW1yZGVjX2Jhc2VfaW5pdCksIChnc3RfcnRwYW1yZGVjX2NsYXNzX2luaXQpLAotCShnc3RfcnRwYW1yZGVjX2luaXQpLCAoZ3N0X3J0cGFtcmRlY19jaGFpbiksCi0JKGdzdF9ydHBhbXJkZWNfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBhbXJkZWNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3J0cGFtcmRlY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3J0cGFtcmRlY19wbHVnaW5faW5pdCk6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmRlYy5oOgotCSogZ3N0L3J0cC9nc3RydHBhbXJlbmMuYzogKGdzdF9ydHBhbXJlbmNfZ2V0X3R5cGUpLAotCShnc3RfcnRwYW1yZW5jX2Jhc2VfaW5pdCksIChnc3RfcnRwYW1yZW5jX2NsYXNzX2luaXQpLAotCShnc3RfcnRwYW1yZW5jX2luaXQpLCAoZ3N0X3J0cGFtcmVuY19jaGFpbiksCi0JKGdzdF9ydHBhbXJlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBhbXJlbmNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3J0cGFtcmVuY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3J0cGFtcmVuY19wbHVnaW5faW5pdCk6Ci0JKiBnc3QvcnRwL2dzdHJ0cGFtcmVuYy5oOgotCSogZ3N0L3J0cC9nc3RydHBtcGFlbmMuYzogKGdzdF9ydHBtcGFlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9ydHBtcGFlbmNfZmx1c2gpLCAoZ3N0X3J0cG1wYWVuY19jaGFpbik6Ci0JQWRkZWQgdmVyeSBzaW1wbGlzdGljIGFtciBwYXlsb2FkZXIuIGRlcGF5bG9hZGVyIGRvZXMgbm90Ci0Jd29yayB5ZXQuCi0KLTIwMDUtMDgtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19zZW5kKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCShnc3RfcnRzcHNyY19jbG9zZSksIChnc3RfcnRzcHNyY19wbGF5KSwgKGdzdF9ydHNwc3JjX3BhdXNlKSwKLQkoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkqIGdzdC9ydHNwL3J0c3BkZWZzLmM6IChydHNwX21ldGhvZF9hc190ZXh0KSwgKHJ0c3BfZmluZF9tZXRob2QpOgotCSogZ3N0L3J0c3AvcnRzcGRlZnMuaDoKLQkqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuYzogKHJ0c3BfdHJhbnNwb3J0X3BhcnNlKToKLQlIYW5kbGUgUlRTUCBkZWZhdWx0cyBiZXR0ZXIuCi0JSXNzdWUgT1BUSU9OUyByZXF1ZXN0IHRvIGZpZ3VyZSBvdXQgd2hhdCB3ZSBhcmUgYWxsb3dlZCB0byBkby4KLQlNYWtlIHRoZSBtZXRob2RzIGEgYml0ZmllbGQgc28gd2UgY2FuIGVhc2lseSBjb2xsZWN0IHN1cHBvcnRlZCAKLQlvcHRpb25zLgotCUZpeCBydHNwX2ZpbmRfbWV0aG9kLgotCURvIHByb3BlciBSVFNQIGNvbm5lY3Rpb24gc2h1dGRvd24uCi0KLTIwMDUtMDgtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAtY29tbW9uLmg6Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOiAocGx1Z2luX2luaXQpOgotCSogZ3N0L3J0cC9nc3RydHBMMTZlbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2dldF90eXBlKSwKLQkoZ3N0X3J0cGRlY19jbGFzc19pbml0KSwgKGdzdF9ydHBkZWNfY2hhaW5fcnRwKSwKLQkoZ3N0X3J0cGRlY19jaGFpbl9ydGNwKSwgKGdzdF9ydHBkZWNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3J0cGRlY19wbHVnaW5faW5pdCk6Ci0JKiBnc3QvcnRwL2dzdHJ0cGgyNjNwZGVjLmM6IChnc3RfcnRwaDI2M3BkZWNfZ2V0X3R5cGUpLAotCShnc3RfcnRwaDI2M3BkZWNfYmFzZV9pbml0KSwgKGdzdF9ydHBoMjYzcGRlY19jbGFzc19pbml0KSwKLQkoZ3N0X3J0cGgyNjNwZGVjX2luaXQpLCAoZ3N0X3J0cGgyNjNwZGVjX2NoYWluKSwKLQkoZ3N0X3J0cGgyNjNwZGVjX3NldF9wcm9wZXJ0eSksIChnc3RfcnRwaDI2M3BkZWNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3J0cGgyNjNwZGVjX2NoYW5nZV9zdGF0ZSksIChnc3RfcnRwaDI2M3BkZWNfcGx1Z2luX2luaXQpOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGRlYy5oOgotCSogZ3N0L3J0cC9nc3RydHBoMjYzcGVuYy5jOiAoZ3N0X3J0cGgyNjNwZW5jX2dldF90eXBlKSwKLQkoZ3N0X3J0cGgyNjNwZW5jX2Jhc2VfaW5pdCksIChnc3RfcnRwaDI2M3BlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9ydHBoMjYzcGVuY19pbml0KSwgKGdzdF9ydHBoMjYzcGVuY19mbHVzaCksCi0JKGdzdF9ydHBoMjYzcGVuY19jaGFpbiksIChnc3RfcnRwaDI2M3BlbmNfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3J0cGgyNjNwZW5jX2dldF9wcm9wZXJ0eSksIChnc3RfcnRwaDI2M3BlbmNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3J0cGgyNjNwZW5jX3BsdWdpbl9pbml0KToKLQkqIGdzdC9ydHAvZ3N0cnRwaDI2M3BlbmMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZGVjLmM6IChnc3RfcnRwbXBhZGVjX2dldF90eXBlKSwKLQkoZ3N0X3J0cG1wYWRlY19iYXNlX2luaXQpLCAoZ3N0X3J0cG1wYWRlY19jbGFzc19pbml0KSwKLQkoZ3N0X3J0cG1wYWRlY19pbml0KSwgKGdzdF9ydHBtcGFkZWNfY2hhaW4pLAotCShnc3RfcnRwbXBhZGVjX3NldF9wcm9wZXJ0eSksIChnc3RfcnRwbXBhZGVjX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9ydHBtcGFkZWNfY2hhbmdlX3N0YXRlKSwgKGdzdF9ydHBtcGFkZWNfcGx1Z2luX2luaXQpOgotCSogZ3N0L3J0cC9nc3RydHBtcGFkZWMuaDoKLQkqIGdzdC9ydHAvZ3N0cnRwbXBhZW5jLmM6IChnc3RfcnRwbXBhZW5jX2dldF90eXBlKSwKLQkoZ3N0X3J0cG1wYWVuY19iYXNlX2luaXQpLCAoZ3N0X3J0cG1wYWVuY19jbGFzc19pbml0KSwKLQkoZ3N0X3J0cG1wYWVuY19pbml0KSwgKGdzdF9ydHBtcGFlbmNfZmx1c2gpLCAoZ3N0X3J0cG1wYWVuY19jaGFpbiksCi0JKGdzdF9ydHBtcGFlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBtcGFlbmNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3J0cG1wYWVuY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3J0cG1wYWVuY19wbHVnaW5faW5pdCk6Ci0JKiBnc3QvcnRwL2dzdHJ0cG1wYWVuYy5oOgotCSogZ3N0L3J0cC9ydHAtcGFja2V0LmM6Ci0JKiBnc3QvcnRwL3J0cC1wYWNrZXQuaDoKLQlSZW1vdmUgb2xkIGNvZGUgdGhhdCBpcyBub3cgaW4gZ3N0LWxpYnMvZ3N0L3J0cC8uCi0JQWRkZWQgc29tZSBwYXlsb2FkL2RlcGF5bG9hZGVycy4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6IChnc3RfdWRwc2lua19jbGFzc19pbml0KToKLQlGaXggcG9ydCBudW1iZXIgcmFuZ2UuCi0KLTIwMDUtMDgtMTcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JQWRkZWQgbXBlZ2F1ZGlvcGFyc2UKLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfc3JjX2dldGNhcHMpLAotCShnc3RfbGFtZV9zcmNfc2V0Y2FwcyksIChnc3RfbGFtZV9zaW5rX3NldGNhcHMpLAotCShnc3RfbGFtZV9zaW5rX2V2ZW50KSwgKGdzdF9sYW1lX2NoYWluKToKLQlTb21lIGNsZWFudXBzLgotCUZpeCBtZW1sZWFrLgotCi0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzoKLQkoZ3N0X21wM3BhcnNlX2NsYXNzX2luaXQpLCAoZ3N0X21wM3BhcnNlX2luaXQpLAotCShnc3RfbXAzcGFyc2VfY2hhaW4pLCAoZ3N0X21wM3BhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuaDoKLQlQb3J0ZWQgbXBlZ2F1ZGlvcGFyc2UKLQotMjAwNS0wOC0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwc3JjX29wZW4pLCAoZ3N0X3J0c3BzcmNfcGxheSk6Ci0JU3VwcG9ydCBhYnNvbHV0ZSBjb250cm9sIHVybHMgdG9vLgotCi0yMDA1LTA4LTE2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcik6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfcXRkZW11eF9hZGRfc3RyZWFtKSwgKHF0ZGVtdXhfcGFyc2VfdHJlZSk6Ci0JICBVbmNvbW1lbnQgbWV0YWRhdGEgYW5kIGNvZGVjLW5hbWUgaGFuZGxpbmcuCi0KLTIwMDUtMDgtMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvYW1ybmIvYW1ybmJwYXJzZS5jOiAoZ3N0X2Ftcm5icGFyc2VfcmVhZF9oZWFkZXIpOgotCUZpeCBjb21waWxlIHdhcm5pbmcuCi0KLQkqIGV4dC9sYW1lL2dzdGxhbWUuYzogKGdzdF9sYW1lX2NsYXNzX2luaXQpLAotCShnc3RfbGFtZV9zcmNfZ2V0Y2FwcyksIChnc3RfbGFtZV9zcmNfc2V0Y2FwcyksCi0JKGdzdF9sYW1lX3Npbmtfc2V0Y2FwcyksIChnc3RfbGFtZV9pbml0KSwgKGdzdF9sYW1lX3NpbmtfZXZlbnQpLAotCShnc3RfbGFtZV9jaGFpbiksIChnc3RfbGFtZV9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2xhbWUvZ3N0bGFtZS5oOgotCVBvcnQgbGFtZSBwbHVnaW4KLQotMjAwNS0wOC0xNiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVtdXguYyAoZ3N0X2R2ZGVtdXhfZmx1c2gpOiBVc2UgZ3N0X2FkYXB0ZXJfdGFrZSBzbwotCXdlIGhhdmUgb3VyIG93biBjb3B5IG9mIHRoZSBkYXRhLgotCShnc3RfZHZkZW11eF9kZW11eF92aWRlbyk6IFNldCB0aGUgdGFrZSgpIGRhdGEgYXMgbWFsbG9jX2RhdGEgc28KLQlpdCB3aWxsIGdldCBmcmVlZCBsYXRlci4KLQotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmMgKGdzdF9kdjEzOTRzcmNfaXNvX3JlY2VpdmUpOiBOb3RlCi0JbGljZW5zZSBpbmZvIGluIHRoZSBzb3VyY2UgY29kZSAtLSB3YXMgb25seSBpbiB0aGUgY29tbWl0IGxvZwotCWJlZm9yZS4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmg6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogT25seSBkZWNvZGVzIHN5c3RlbXN0cmVhbT1GQUxTRSBkdiB2aWRlbyAtLQotCW9sZCBwaXBlbGluZXMgdXNpbmcgZHZkZWMgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBkdmRlbXV4IGZpcnN0LgotCi0JKiBleHQvZHYvZ3N0ZHZkZW11eC5oOgotCSogZXh0L2R2L2dzdGR2ZGVtdXguYzogU3BsaXQgb3V0IGZyb20gZHZkZWMsIGNodW5rcyB0aGUgaW5jb21pbmcKLQlzeXN0ZW1zdHJlYW09VFJVRSBkYXRhIGludG8gZnJhbWVzLCBzZXRzIGNhcHMgZGF0YSwgYW5kIHNwaXRzIG91dAotCVBDTSBhdWRpbyBpbiBhZGRpdGlvbiB0byBzeXN0ZW1zdHJlYW09RkFMU0UgdmlkZW8gZnJhbWVzLiBPcGVyYXRlcwotCWluIGNoYWluIG1vZGUgb25seSBmb3Igbm93OyBzaG91bGQgbWFrZSBhIGdldHJhbmdlIHZlcnNpb24gYXMKLQl3ZWxsLgotCi0JKiBleHQvZHYvZ3N0ZHYuYzogTmV3IGZpbGUsIHJlZ2lzdGVycyB0aGUgbGliZ3N0ZHYgcGx1Z2luLgotCi0JKiBleHQvZHYvTWFrZWZpbGUuYW06IExpYnJhcnkgbmFtZSBjaGFuZ2VkIHRvIGxpYmdzdGR2LiBTcGxpdAotCWR2ZGVjIGludG8gZHZkZW11eCBhbmQgZHZkZWMuCi0KLTIwMDUtMDgtMTYgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX2V2ZW50KSwgKGdzdF9mYWFkX2NoYWluKToKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKToKLQkgIEhhbmRsZSBfcHVzaCgpIHJldHVybiB2YWx1ZXMuCi0KLTIwMDUtMDgtMTUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX2V2ZW50KToKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKToKLQkgIEZpeCBkZWJ1Zy4KLQotMjAwNS0wOC0xNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEZvcndhcmRwb3J0IGZyb20gMC44IHRvIGltcGxlbWVudCBSTEUuCi0KLTIwMDUtMDgtMTUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9SRUFETUU6Ci0JQWRkZWQgcnRzcCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gZG9jcy4KLQotMjAwNS0wOC0xNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOgotCSAgYWFsaWIgaXMgTEdQTCwgc28gdGhpcyBwbHVnaW4gY2FuIGJlIExHUEwKLQkqIGV4dC9hcnRzL2dzdF9hcnRzLmM6IChwbHVnaW5faW5pdCk6Ci0JICByZW5hbWUsIHdlIGRvbid0IGxpa2UgdW5kZXJzY29yZXMKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWYuYzoKLQkqIGV4dC9zbmRmaWxlL2dzdHNmLmM6Ci0JICByZW5hbWUsIHdlIGxpa2UgYSBkZXNjcmlwdGl2ZSBwbHVnaW4gbmFtZQotCSogZXh0L2djb25mL2dzdGdjb25mZWxlbWVudHMuYzoKLQkgIGNoYW5nZSBkZXNjcmlwdGlvbiBhIGxpdHRsZQotCSogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOgotCSAgbXVzaWNicmFpbnogaXMgTEdQTCwgc28gcGx1Z2luIGNhbiBiZSBMR1BMCi0JKiBleHQvcmF3MTM5NC9nc3QxMzk0LmM6Ci0JICByZW5hbWUsIHdlIGxpa2UgYWxsLWRpZ2l0IG5hbWVzCi0JKiBnc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jOgotCSogZ3N0L2Zkc3JjL2dzdGZkc3JjLmM6Ci0JKiBnc3QvbXVsdGlmaWxlc2luay9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JICByZW5hbWUKLQkqIGdzdC92aXJ0dWFsZHViL2dzdHZpcnR1YWxkdWIuYzoKLQkgIHVzZSBHU1RfUExVR0lOX0RFRklORQotCSogc3lzL2R4cjMvZHhyM2luaXQuYzoKLQkgIG9ubHkgdXNlcyBzeXN0ZW0gaGVhZGVycywgYW5kIGNvZGUgaXMgTEdQTCwgc28gcGx1Z2luIGlzIExHUEwKLQotMjAwNS0wOC0xMyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvbWFkL01ha2VmaWxlLmFtOgotCSogZ3N0L2F2aS9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L01ha2VmaWxlLmFtOgotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkqIGdzdC93YXZwYXJzZS9NYWtlZmlsZS5hbToKLQkgIFVzZSAtbGdzdGZvby1AR1NUX01BSk9STUlOT1JAIGluc3RlYWQgb2YgLWxnc3Rmb28tMC45Ci0KLTIwMDUtMDgtMTIgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdfZGVjX2RlY29kZV9pbmRpcmVjdCksCi0JKGdzdF9qcGVnX2RlY19kZWNvZGVfZGlyZWN0KSwgKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICBGaXggZGVjb2Rpbmcgb2YgcGljdHVyZXMgd2l0aCBjZXJ0YWluIHVuZXZlbiBvciB1bmFsaWduZWQKLQkgIHdpZHRocyB3aGVyZSBqcGVnbGliIG5lZWRzIG1vcmUgaG9yaXpvbnRhbCBwYWRkaW5nIHRoYW4gb3VyCi0JICBJNDIwIGJ1ZmZlcnMgcHJvdmlkZSwgcmVzdWx0aW5nIGluIGJsb2NreSBhcnRpZmFjdHMgYXQgdGhlCi0JICBsZWZ0IHNpZGUgb2YgdGhlIHBpY3R1cmUgKCMxNjQxNzYpLiAKLQkgIEFsc28gbWFrZSB1c2Ugb2Ygb3VyIHNoaW55IG5ldyBHU1RfUk9VTkRfTigpIG1hY3Jvcy4KLQotMjAwNS0wOC0xMSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfaW5pdCksIChnc3RfanBlZ19kZWNfY2hhaW4pLAotCShnc3RfanBlZ19kZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuaDoKLQkgIEZpeCBjcmFzaGVzL2ludmFsaWQgbWVtb3J5IGFjY2VzcyBmb3IgcGljdHVyZXMgdGhhdCBoYXZlIGEgaGVpZ2h0Ci0JICB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDE2IChvciByYXRoZXI6IHZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKS4KLQkgIAotCSAgQWxzbyBmaXggdGhlIHN0YXRlIGNoYW5nZSBmdW5jdGlvbiBmb3IgZG93bndhcmRzIHN0YXRlIGNoYW5nZXMKLQkgIChuZWVkIHRvIGNoYWluIHVwIHRvIHBhcmVudCBiZWZvcmUgZGVzdHJveWluZyBvdXIgcmVzb3VyY2VzLCB0byAKLQkgIG1ha2Ugc3VyZSBwYWRzIGdldCBkZWFjdGl2YXRlZCBhbmQgb3VyIGNoYWluIGZ1bmN0aW9uIGlzbid0Ci0JICBydW5uaW5nIGFuZCB1c2luZyB0aG9zZSB2ZXJ5IHNhbWUgcmVzb3VyY2VzIGluIGFub3RoZXIgdGhyZWFkKS4KLQotCSAgVGhlIGpwZWcgbGluZSBidWZmZXIgb25seSBuZWVkcyB0byBiZSB2X3NhbXBfZmFjdG9yKkRDVFNJWkUgbGluZXMKLQkgIHBlciBwbGFuZSwgbm90IHBpY3R1cmVfaGVpZ2h0IGxpbmVzOyBhbGxvY2F0ZSB0aGF0IG9uIHRoZSBzdGFjay4KLQotMjAwNS0wOC0xMCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyksCi0JKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSk6Ci0JICBBZGQgc29tZSBmaXhlcyBmcm9tIDAuOCBicmFuY2g6IGFsbG93IDI0LzMyYnBzIHNvbmdzIGFuZAotCSAgYmxvY2thbGlnbiBzYW1wbGVzIHRvIHRoZSBoZWFkZXItc3BlY2lmaWVkIHNpemUsIGlmIGFueQotCSAgKCMzMTEwNzApOyBlcnJvciBvdXQgb24gY2hhbm5lbHM9PTAgb3IgYml0cmF0ZT09MCAKLQkgICgjMzA5MDQzLCAjMzA0NTg4KS4KLQotMjAwNS0wOC0xMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L2xldmVsL2dzdGxldmVsLmM6IChnc3RfbGV2ZWxfaW5pdCksIChnc3RfbGV2ZWxfc2V0X2NhcHMpLAotCShnc3RfbGV2ZWxfdHJhbnNmb3JtKToKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5oOgotCSAgcmVtb3ZlIHVudXNlZCBNUyBzdHJ1Y3QgbWVtYmVyCi0JICBkb24ndCByZXNldCB0aGUgQ1MgdmFsdWVzIGZvciBjaGFubmVscyBvbiBldmVyeSBfY2hhaW4sIHNvIHRoYXQKLQkgIGxldmVsIGFjdHVhbGx5IGNvcnJlY3RseSBjYWxjdWxhdGVzIHRoZSBSTVMgdmFsdWUuICBzaWdoLgotCSAgY2FsY3VsYXRlIFJNUyB2YWx1ZXMgY29ycmVjdGx5IGZvciBwZWFrIGFuZCBkZWNheSBwZWFrIHN1bXM7Ci0JICBiZWZvcmUgd2Ugd2VyZSBzaWduYWxsaW5nIHRoZW0gYXMgaWYgdGhleSBhbHJlYWR5IHdlcmUgYW1wbGl0dWRlCi0JICBhbmQgbm90IHBvd2VyIHZhbHVlcy4gIHNpZ2guCi0JUmVtaW5kIG1lIHRvIG5vdCB0cnkgYW5kIHByZXRlbmQgSSdtIHdyaXRpbmcgRFNQIGNvZGUuCi0KLTIwMDUtMDgtMTAgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX2NsYXNzX2luaXQpLCAoZ3N0X2ZhYWRfc2V0Y2Fwcyk6Ci0JICBBZGQgZGVidWcgY2F0ZWdvcnksIHJlbW92ZSBDbG9zZSgpIGNhbGwgdGhhdCBtYWRlIGl0IGNyYXNoCi0JICB3aGVuZXZlciByZXVzaW5nLCByZW5lZ290aWF0aW5nIG9yIGFueXRoaW5nOyBDbG9zZSgpIGFjdHVhbGx5Ci0JICBmcmVlKClzIHRoZSBoYW5kbGUgYW5kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBSRUFEWS0+TlVMTC4KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKToKLQkgIEFjdHVhbGx5IHNldCBjYXBzIG9uIGJ1ZmZlciAoaW4gYWRkaXRpb24gdG8gcGFkKSwgYWxzby4KLQotMjAwNS0wOC0xMCAgT3dlbiBGcmFzZXItR3JlZW4gIDxvd2VuQGRpc2NvYmFiZS5uZXQ+Ci0KLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jIChnc3Rfcm1kZW11eF9zaW5rX2FjdGl2YXRlKSAKLQkoZ3N0X3JtZGVtdXhfc2lua19hY3RpdmF0ZV9wdXNoLCBnc3Rfcm1kZW11eF9zaW5rX2FjdGl2YXRlX3B1bGwpIAotCShnc3Rfcm1kZW11eF9sb29wLCBnc3Rfcm1kZW11eF9zcmNfZXZlbnQpIAotCShnc3Rfcm1kZW11eF9wZXJmb3JtX3NlZWssIGdzdF9ybWRlbXV4X3NyY19xdWVyeSk6IEltcGxlbWVudGVkCi0JcHVzaC1wdWxsIGFuZCBzZWVraW5nLgotCi0yMDA1LTA4LTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9ldmVudCk6Ci0JICBTaWduL3Vuc2lnbiBtaXNtYXRjaC4KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2NsYXNzX2luaXQpLAotCShnc3RfcXRkZW11eF9pbml0KSwgKGdzdF9xdGRlbXV4X2dldF9zcmNfcXVlcnlfdHlwZXMpLAotCShnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCShwbHVnaW5faW5pdCksIChnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCksCi0JKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSksIChnc3RfcXRkZW11eF9sb29wX2hlYWRlciksCi0JKHF0ZGVtdXhfc2lua19hY3RpdmF0ZSksIChxdGRlbXV4X3NpbmtfYWN0aXZhdGVfcHVsbCksCi0JKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLCAocXRkZW11eF9wYXJzZSksIChxdGRlbXV4X3BhcnNlX3RyZWUpLAotCShxdGRlbXV4X3BhcnNlX3RyYWspLCAocXRkZW11eF92aWRlb19jYXBzKSwgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0JICBIYWxmLWFzc2VkIHBvcnQgKGhleSwgaXQgd29ya3MpLgotCi0yMDA1LTA4LTA5ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcik6Ci0JICBGaXggQVZJIGhlYWRlciBwYXJzaW5nOiBhZGQgbWlzc2luZyBicmVhayBzdGF0ZW1lbnQgYWZ0ZXIKLQkgIEdTVF9SSUZGX0lORk9fTElTVCBwYXJzaW5nIGNvZGU7IGdzdF9yaWZmX3JlYWRfY2h1bmsoKSBoYXMKLQkgIGFscmVhZHkgYWR2YW5jZWQgdGhlIGF2aS0+b2Zmc2V0LCBubyBuZWVkIHRvIGRvIGl0IHR3aWNlCi0JICAoZml4ZXMgTW92aWVPZk1vdmllcy5hdmkpLgotCi0yMDA1LTA4LTA5ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19pbml0KSwKLQkoZ3N0X2pwZWdfZGVjX3NldGNhcHMpLCAoZ3N0X2pwZWdfZGVjX2NoYWluKSwKLQkoZ3N0X2pwZWdfZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmg6Ci0JICBNYWtlIG1qcGVnIGFjdHVhbGx5IHdvcmsgYW5kIHNraXAganBlZyBkYXRhIHBhcnNpbmcgaWYgd2UKLQkgIGtub3cgdGhhdCB0aGUgaW5wdXQgaXMgcGFja2V0aXplZCAoaWUuIGVhY2ggaW5wdXQgYnVmZmVyCi0JICBpcyBleGFjdGx5IG9uZSBqcGVnIGZyYW1lKS4KLQotMjAwNS0wOC0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaW5pdCksIChnc3RfbWFkX2NoYWluKToKLQkgIEl0J2QgYmUgbmljZSBpZiBJIGNvdWxkIGxpc3RlbiB0byBteSBtcDMgZmlsZXMsIHNvIHNlbmQgb3V0IGFuCi0JICBpbml0aWFsIGRpc2NvbnQsIGFzIHRoZSBzaW5rIGFwcGFyZW50bHkgd2FudHMuCi0KLTIwMDUtMDgtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksCi0JKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspOgotCSAgRml4IHNlZWtpbmcgKG9yLCB3ZWxsLCBmaXggdGhyZWFkaW5nIGlzc3VlIHdoZXJlIGEgdmFyaWFibGUgd2FzCi0JICBzZXQgYmVmb3JlIGEgbG9jayB3YXMgdGFrZW4gYW5kIHdhcyBhbHJlYWR5IHVuc2V0IGJlZm9yZSB0aGF0Ci0JICBzYW1lIGxvY2sgd2FzIHRha2VuIGFuZCB3YXMgdGh1cyBubyBsb25nZXIgaW4gZXhpc3RhbmNlIHdoZW4gaXQKLQkgIGFjdHVhbGx5IGhhZCB0byBiZSB1c2VkKS4KLQotMjAwNS0wOC0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpOgotCSAgTWl4aW5nIGJpbmFyeSBhbmQgbG9naWNhbCBvcGVyYXRvcnMgaXMgbm90IGdvaW5nIHRvIHdvcms7IGZpeAotCSAgcG9zaXRpb24tcXVlcnlpbmcgaW4gVG90ZW0uCi0KLTIwMDUtMDgtMDggIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfYmFzZV9pbml0KSwgKGdzdF9mYWFkX2NsYXNzX2luaXQpLAotCShnc3RfZmFhZF9pbml0KSwgKGdzdF9mYWFkX3NldGNhcHMpLCAoZ3N0X2ZhYWRfc3JjZ2V0Y2FwcyksCi0JKGdzdF9mYWFkX2V2ZW50KSwgKGdzdF9mYWFkX3VwZGF0ZV9jYXBzKSwgKGdzdF9mYWFkX2NoYWluKSwKLQkoZ3N0X2ZhYWRfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9mYWFkL2dzdGZhYWQuaDoKLQkgIEZpeCBuZWdvdGlhdGlvbiAoIzMxMDkzMikgYW5kIG1pc2NlbGxhbmVvdXMgb3RoZXIgc3R1ZmYuIFByb2JhYmx5Ci0JICBzdGlsbCBuZWVkcyBzb21lIG1vcmUgd29yay4KLQotMjAwNS0wOC0wOCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ19kZWNfaW5pdCksCi0JKGdzdF9qcGVnX2RlY19zZXRjYXBzKSwgKGdzdF9qcGVnX2RlY19jaGFpbik6Ci0JICBBZGQgc2V0Y2FwcygpIGZ1bmN0aW9uIChmb3IgbWpwZWcpLgotCi0yMDA1LTA4LTA4ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvZXNkL2VzZHNpbmsuYyAoZ3N0X2VzZHNpbmtfZ2V0Y2Fwcyk6IFNlZW1zIHRoYXQgd2llcmQKLQl2YV9saXN0IGNhcHMgc2V0dGluZyBmdW5jdGlvbiB3YXMgYm9ya2VkLiBGaXhlZCBlc2RzaW5rLgotCi0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYyAoZ3N0X29zc19zaW5rX29wZW4sIGdzdF9vc3Nfc2lua19jbG9zZSkgCi0JKGdzdF9vc3Nfc2lua19wcmVwYXJlLCBnc3Rfb3NzX3NpbmtfdW5wcmVwYXJlKTogVXBkYXRlIGZvciBuZXdlcgotCWF1ZGlvc2luayBhcGkuCi0KLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jIChnc3RfZHYxMzk0c3JjX2dldF9wcm9wZXJ0eSkgCi0JKGdzdF9kdjEzOTRzcmNfc2V0X3Byb3BlcnR5KTogU3R5bGUuIEFsbCBhYm91dCB0aGUgc3R5bGUuCi0KLQkqIGV4dC9lc2QvZXNkc2luay5jIChnc3RfZXNkc2lua19nZXRjYXBzKTogUmV0dXJuIHNwZWNpZmljIGNhcHMKLQlvbmx5IGlmIGluIFJFQURZIG9yIGhpZ2hlciAoaS5lLiwgaWYgX29wZW4oKSBoYXMgYmVlbiBjYWxsZWQuKQotCShnc3RfZXNkc2lua19vcGVuLCBnc3RfZXNkc2lua19jbG9zZSwgZ3N0X2VzZHNpbmtfcHJlcGFyZSkgCi0JKGdzdF9lc2RzaW5rX3VucHJlcGFyZSk6IFVwZGF0ZSBmb3IgYXVkaW9zaW5rIGNoYW5nZXMuCi0JKGdzdF9lc2RzaW5rX2NoYW5nZV9zdGF0ZSk6IERpZSEKLQotMjAwNS0wOC0wOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2pwZWcvTWFrZWZpbGUuYW06Ci0JICBGaXggY29tcGlsZS4KLQotMjAwNS0wOC0wOCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvanBlZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9qcGVnL2dzdGpwZWcuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnX2RlY19nZXRfdHlwZSksCi0JKGdzdF9qcGVnX2RlY19maW5hbGl6ZSksIChnc3RfanBlZ19kZWNfYmFzZV9pbml0KSwKLQkoZ3N0X2pwZWdfZGVjX2NsYXNzX2luaXQpLCAoZ3N0X2pwZWdfZGVjX2ZpbGxfaW5wdXRfYnVmZmVyKSwKLQkoZ3N0X2pwZWdfZGVjX2luaXRfc291cmNlKSwgKGdzdF9qcGVnX2RlY19za2lwX2lucHV0X2RhdGEpLAotCShnc3RfanBlZ19kZWNfcmVzeW5jX3RvX3Jlc3RhcnQpLCAoZ3N0X2pwZWdfZGVjX3Rlcm1fc291cmNlKSwKLQkoZ3N0X2pwZWdfZGVjX215X291dHB1dF9tZXNzYWdlKSwgKGdzdF9qcGVnX2RlY19teV9lbWl0X21lc3NhZ2UpLAotCShnc3RfanBlZ19kZWNfbXlfZXJyb3JfZXhpdCksIChnc3RfanBlZ19kZWNfaW5pdCksCi0JKGlzX2pwZWdfc3RhcnRfbWFya2VyKSwgKGlzX2pwZWdfZW5kX21hcmtlciksCi0JKGdzdF9qcGVnX2RlY19maW5kX2pwZWdfaGVhZGVyKSwgKGdzdF9qcGVnX2RlY19lbnN1cmVfaGVhZGVyKSwKLQkoZ3N0X2pwZWdfZGVjX2hhdmVfZW5kX21hcmtlciksCi0JKGdzdF9qcGVnX2RlY19wYXJzZV90YWdfaGFzX2VudHJvcHlfc2VnbWVudCksCi0JKGdzdF9qcGVnX2RlY19wYXJzZV9pbWFnZV9kYXRhKSwgKGdzdF9qcGVnX2RlY19jaGFpbiksCi0JKGdzdF9qcGVnX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5oOgotCSAgUG9ydCBqcGVnZGVjIHRvIDAuOTsgaGFuZGxlcyAncHJvZ3Jlc3NpdmUgbG9hZGluZycgbm93LCBpZS4gaW5wdXQgZG9lcwotCSAgbm8gbG9uZ2VyIG5lZWQgdG8gYmUgb25lIHNpbmdsZSBidWZmZXIuCi0KLTIwMDUtMDgtMDQgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzYXVkaW8uYyAocGx1Z2luX2luaXQpOiBTZWNvbmQtY2xhc3MgY2l0aXplbi4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmMgKGdzdF92aWRlb19ib3hfZ2V0X3NpemUpOiBVcGRhdGUgZm9yCi0JQVBJIGNoYW5nZXMuCi0KLQkqIGNvbmZpZ3VyZS5hYyAoREVGQVVMVF9BVURJT1NJTkssIERFRkFVTFRfVklERU9TSU5LKTogU2V0IHRvCi0JYXV0b2F1ZGlvc2luayBhbmQgYXV0b3ZpZGVvc2luay4KLQotMjAwNS0wOC0wNCAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9yZXNldCksCi0JKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtKSwgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQlZb3UgbmVlZCB0byBhbGxvY2F0YXRlIChsZW4rMSkgY2hhcmFjdGVycyB0byBzdG9yZSBhIGxlbiBzaXplIHN0cmluZy4KLQlBbHNvIGRvbid0IHN0b3AgdGhlIHByb2Nlc3NpbmcgdGFzayBpZiB0aGUgb3V0cHV0IHBhZCBpcyBub3QgbGlua2VkLgotCi0yMDA1LTA4LTAzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogKGdzdF9nY29uZl9hdWRpb19zaW5rX3Jlc2V0KSwKLQkoZ3N0X2djb25mX2F1ZGlvX3NpbmtfaW5pdCksIChkb190b2dnbGVfZWxlbWVudCksCi0JKGNiX3RvZ2dsZV9lbGVtZW50KSwgKGdzdF9nY29uZl9hdWRpb19zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuaDoKLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5jOiAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfcmVzZXQpLAotCShnc3RfZ2NvbmZfdmlkZW9fc2lua19pbml0KSwgKGRvX3RvZ2dsZV9lbGVtZW50KSwKLQkoY2JfdG9nZ2xlX2VsZW1lbnQpLCAoZ3N0X2djb25mX3ZpZGVvX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9nY29uZi9nc3RnY29uZnZpZGVvc2luay5oOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOiAoZ3N0X2F1dG9fYXVkaW9fc2lua19yZXNldCksCi0JKGdzdF9hdXRvX2F1ZGlvX3NpbmtfaW5pdCksIChnc3RfYXV0b19hdWRpb19zaW5rX2RldGVjdCksCi0JKGdzdF9hdXRvX2F1ZGlvX3NpbmtfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuaDoKLQkqIGdzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYzogKGdzdF9hdXRvX3ZpZGVvX3NpbmtfcmVzZXQpLAotCShnc3RfYXV0b192aWRlb19zaW5rX2luaXQpLCAoZ3N0X2F1dG9fdmlkZW9fc2lua19kZXRlY3QpLAotCShnc3RfYXV0b192aWRlb19zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmg6Ci0JICBVc2UgbmV3IGdob3N0cGFkIEFQSTsgbm93IHRoZXkgYWN0dWFsbHkgd29yayBpbiBUb3RlbSwgYWxzby4KLQotMjAwNS0wOC0wMyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2xpYnBuZy9NYWtlZmlsZS5hbToKLQkgIEZpeCB1bmluc3RhbGxlZCBidWlsZC4KLQotMjAwNS0wOC0wMiAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2xpYnBuZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOgotCVBvcnRlZCBwbmdlbmMgLCBzdGlsbCBoYXZlIHRvIHBvcnQgcG5nZGVjLi4uCi0KLTIwMDUtMDgtMDEgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQlyZXZpZXdlZCBieTogPGRlbGV0ZSBpZiBub3QgdXNpbmcgYSBidWRkeT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2xhZHNwYS9NYWtlZmlsZS5hbToKLQkqIGV4dC9sYWRzcGEvZ3N0bGFkc3BhLmM6IChnc3RfbGFkc3BhX2luaXQpLCAoZ3N0X2xhZHNwYV9sb29wKSwKLQkoZ3N0X2xhZHNwYV9jaGFpbiksIChnc3RfbGFkc3BhX2dldCksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvbGFkc3BhL2dzdGxhZHNwYS5oOgotICAgICAgICAgIGRlYWN0aXZhdGUgYW5kIHJlbW92ZSBkcGFyYW1zIChsaWJnc3Rjb250cm9sKQotCi0yMDA1LTA3LTI3ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfZXZlbnQpOgotCUNvbXBpbGUgZml4ZXMuCi0KLTIwMDUtMDctMjcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvYW1ybmIvYW1ybmJwYXJzZS5jOiAoZ3N0X2Ftcm5icGFyc2VfZXZlbnQpLAotCShnc3RfYW1ybmJwYXJzZV9sb29wKToKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkoZ3N0X2R2ZGVjX2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X2R2ZGVjX2RlY29kZV9mcmFtZSk6Ci0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfc3JjX2V2ZW50KSwKLQkoZ3N0X2lkM190YWdfc2lua19ldmVudCksIChnc3RfaWQzX3RhZ19jaGFpbik6Ci0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9zcmNfcXVlcnkpLCAoaW5kZXhfc2VlayksCi0JKG5vcm1hbF9zZWVrKSwgKGdzdF9tYWRfc2lua19ldmVudCksIChnc3RfbWFkX2NoYWluKToKLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOgotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzogKGdzdF9zaG91dDJzZW5kX2V2ZW50KToKLQkqIGV4dC9zaWRwbGF5L2dzdHNpZGRlYy5jYzoKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksCi0JKGdzdF9hdmlfZGVtdXhfc2VuZF9ldmVudCksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpLAotCShnc3RfYXZpX2RlbXV4X2hhbmRsZV9zZWVrKSwgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQkqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2V2ZW50KToKLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jOiAoZ3N0X3JtZGVtdXhfc2lua19ldmVudCksCi0JKGdzdF9ybWRlbXV4X2NoYWluKSwgKGdzdF9ybWRlbXV4X3NlbmRfZXZlbnQpLAotCShnc3Rfcm1kZW11eF9hZGRfc3RyZWFtKToKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2hhbmRsZV9zZWVrKSwKLQkoZ3N0X3dhdnBhcnNlX3N0cmVhbV9oZWFkZXJzKSwgKGdzdF93YXZwYXJzZV9zdHJlYW1fZGF0YSksCi0JKGdzdF93YXZwYXJzZV9sb29wKSwgKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpOgotCVZhcmlvdXMgZXZlbnQgdXBkYXRlcyBhbmQgY2xlYW51cHMuCi0KLTIwMDUtMDctMjUgIENocmlzdGlhbiBTY2hhbGxlciAgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQotCSogZ3N0LXBsdWdpbnMuc3BlYy5pbjogYWRkIHNpbGVuY2UgYW5kIHZpZGVvZmxpcAotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOiBhZGQgbWlzc2luZyBoZWFkZXIgdG8gbm9pbnN0Ci0KLTIwMDUtMDctMjUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOiAoZ3N0X2dhbW1hX3NldHVwKToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzogKGdzdF92aWRlb2JhbGFuY2Vfc2V0dXApOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmlsdGVyLmM6IChnc3RfdmlkZW9maWx0ZXJfY2xhc3NfaW5pdCksCi0JKGdzdF92aWRlb2ZpbHRlcl9nZXRjYXBzKSwgKGdzdF92aWRlb2ZpbHRlcl9zZXRjYXBzKSwKLQkoZ3N0X3ZpZGVvZmlsdGVyX2luaXQpLCAoZ3N0X3ZpZGVvZmlsdGVyX2NoYWluKSwKLQkoZ3N0X3ZpZGVvZmlsdGVyX3NldF9wcm9wZXJ0eSksIChnc3RfdmlkZW9maWx0ZXJfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3ZpZGVvZmlsdGVyX3NldHVwKSwgKGdzdF92aWRlb2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcyk6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9maWx0ZXIuaDoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzogKGdzdF92aWRlb2ZsaXBfaW5pdCksCi0JKGdzdF92aWRlb2ZsaXBfc2V0X3Byb3BlcnR5KSwgKGdzdF92aWRlb2ZsaXBfZ2V0X3Byb3BlcnR5KSwKLQkocGx1Z2luX2luaXQpLCAoZ3N0X3ZpZGVvZmxpcF9zZXR1cCksIChnc3RfdmlkZW9mbGlwX3BsYW5hcjQxMSk6Ci0JICBmb3J3YXJkIHBvcnQgZnJvbSAwLjkgYW5kIGVuYWJsZSB2aWRlb2ZsaXAgbm93IHRoYXQgaXQgd29ya3MKLQotMjAwNS0wNy0yMyAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3NpbGVuY2UvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc2lsZW5jZS9nc3RzaWxlbmNlLmg6Ci0JKiBnc3Qvc2lsZW5jZS9nc3RzaWxlbmNlLmM6Ci0JUG9ydGVkIHNpbGVuY2UgdG8gMC45IHVzaW5nIEdzdEJhc2VTcmMgLi4uIDE4MCBsaW5lcyA6KQotCi0yMDA1LTA3LTIyICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9zcmNfZXZlbnQpOgotCSAgRmlyc3QgdHJ5IGZvcndhcmRpbmcgZXZlbnRzLCBtYWtlcyBzZWVraW5nIGluIEFWSSBmaWxlcyB3aXRoIG1wMwotCSAgYXVkaW8gd29yayBhZ2Fpbi4KLQotMjAwNS0wNy0yMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmMgKGdzdF9tcGVnMmRlY19zaW5rX2V2ZW50KTogU2lnbmVkbmVzcwotCWZpeC4KLQotMjAwNS0wNy0yMCAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOiAKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCSogZ3N0L3dhdnBhcnNlL01ha2VmaWxlLmFtOgotCVBvcnRlZCB3YXZwYXJzZSB0byAwLjkgLiBQbGF5aW5nLCBzZWVraW5nIGFuZCBzdGF0ZSBjaGFuZ2VzIHdvcmsuCi0JQ291bGQgbmVlZCBtb3JlIGxvdmluZyBvbiB0aGUgaGVhZGVycyB0aG91Z2guCi0KLTIwMDUtMDctMjAgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9nY29uZi9NYWtlZmlsZS5hbToKLQkqIGV4dC9nY29uZi9nY29uZi5jOiAoZ3N0X2Jpbl9maW5kX3VuY29ubmVjdGVkX3BhZCksCi0JKGdzdF9nY29uZl9yZW5kZXJfYmluX2Zyb21fZGVzY3JpcHRpb24pLAotCShnc3RfZ2NvbmZfZ2V0X2RlZmF1bHRfdmlkZW9fc2luayk6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZhdWRpb3NpbmsuYzogKGdzdF9nY29uZl9hdWRpb19zaW5rX2Jhc2VfaW5pdCksCi0JKGdzdF9nY29uZl9hdWRpb19zaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2djb25mX2F1ZGlvX3NpbmtfZGlzcG9zZSksCi0JKGNiX3RvZ2dsZV9lbGVtZW50KSwgKGdzdF9nY29uZl9hdWRpb19zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvZ2NvbmYvZ3N0Z2NvbmZlbGVtZW50cy5oOgotCSogZXh0L2djb25mL2dzdGdjb25mdmlkZW9zaW5rLmM6IChnc3RfZ2NvbmZfdmlkZW9fc2lua19iYXNlX2luaXQpLAotCShnc3RfZ2NvbmZfdmlkZW9fc2lua19jbGFzc19pbml0KSwgKGdzdF9nY29uZl92aWRlb19zaW5rX2Rpc3Bvc2UpLAotCShjYl90b2dnbGVfZWxlbWVudCksIChnc3RfZ2NvbmZfdmlkZW9fc2lua19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jOgotCShnc3RfYXV0b19hdWRpb19zaW5rX2Jhc2VfaW5pdCksIChnc3RfYXV0b19hdWRpb19zaW5rX2NsYXNzX2luaXQpLAotCShnc3RfYXV0b19hdWRpb19zaW5rX2RldGVjdCksIChnc3RfYXV0b19hdWRpb19zaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmM6Ci0JKGdzdF9hdXRvX3ZpZGVvX3NpbmtfYmFzZV9pbml0KSwgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCksCi0JKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZmluZF9iZXN0KSwgKGdzdF9hdXRvX3ZpZGVvX3NpbmtfZGV0ZWN0KToKLQkgIFBvcnQgYXV0by9nY29uZnNpbmtzIHRvIDAuOS4gVGhleSBhY3R1YWxseSBhcHBlYXIgdG8gd29yayBoZXJlIGluCi0JICBUb3RlbSBhcyB3ZWxsLCBtYWtpbmcgdGhlbSBhY3R1YWxseSB1c2VmdWwuCi0KLTIwMDUtMDctMjAgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9mYWFkL01ha2VmaWxlLmFtOgotCSAgRml4IHVuaW5zdGFsbGVkIGJ1aWxkLgotCi0yMDA1LTA3LTE5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3NzX3NpbmtfZ2V0X2Zvcm1hdCksCi0JKGdzdF9vc3Nfc2lua19vcGVuKToKLQlQYXJzZSBzcGVjIHRvIHNldCBjb3JyZWN0IG9zcyB2YWx1ZXMuCi0KLTIwMDUtMDctMTkgIEVkZ2FyZCBOLiBBLiBHLiBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLQotICAgICAgICAqIGNvbmZpZ3VyZS5hYwotCSogZXh0L01ha2VmaWxlLmFtCi0JKiBleHQvYW1ybmIvYW1ybmJkZWMuYwotCSogZXh0L2Ftcm5iL2Ftcm5iZW5jLmMKLQkqIGV4dC9hbXJuYi9hbXJuYnBhcnNlLmMKLQkqIGV4dC9mYWFkL2dzdGZhYWQuYwotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmMKLQlQb3J0ZWQgYW1ybmIsIGZhYWQsIG1wZWcyZGVjIHRvIDAuOQotCi0yMDA1LTA3LTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYyAoZ3N0X2R2ZGVjX2RlY29kZV92aWRlbyk6IFNldCB0aGUgcHJvcGVyCi0JZnJhbWVyYXRlIG9uIHRoZSBvdXRib3VuZCBidWZmZXIuCi0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jIChnc3RfZHZkZWNfZGVjb2RlX3ZpZGVvKTogRG9uJ3QgY2xvYmJlcgotCWFsbG9jX2J1ZmZlcidzIHJldHVybiB2YWx1ZS4KLQkoZ3N0X2R2ZGVjX2RlY29kZV9mcmFtZSk6IEhhbmRsZSB1bmxpbmtlZCBwYWRzIHdpdGggZ3JhY2UgYW5kCi0JYWdpbGl0eS4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmg6IEZpeCBzaWduZWRuZXNzIGVycm9yLgotCi0yMDA1LTA3LTE5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfaW5pdCksIChnc3RfZHZkZWNfc3JjX2NvbnZlcnQpLAotCShnc3RfZHZkZWNfc2lua19jb252ZXJ0KSwgKGdzdF9kdmRlY19nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X2R2ZGVjX3NyY19xdWVyeSksIChnc3RfZHZkZWNfZ2V0X3NpbmtfcXVlcnlfdHlwZXMpLAotCShnc3RfZHZkZWNfc2lua19xdWVyeSksIChnc3RfZHZkZWNfc2VuZF9ldmVudCksCi0JKGdzdF9kdmRlY19oYW5kbGVfc2lua19ldmVudCksIChnc3RfZHZkZWNfaGFuZGxlX3NyY19ldmVudCksCi0JKGdzdF9kdmRlY19kZWNvZGVfYXVkaW8pLCAoZ3N0X2R2ZGVjX2RlY29kZV92aWRlbyksCi0JKGdzdF9kdmRlY19kZWNvZGVfZnJhbWUpLCAoZ3N0X2R2ZGVjX2ZsdXNoKSwgKGdzdF9kdmRlY19jaGFpbik6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuaDoKLQlJbXBsZW1lbnRlZCBzZWVraW5nIGluIGR2ZGVjLgotCi0yMDA1LTA3LTE5ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleHQvTWFrZWZpbGUuYW06IEVuYWJsZSBkdmRldiBhbmQgcmF3MTM5NHNyYy4KLQotMjAwNS0wNy0xOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogY29uZmlndXJlLmFjOiBVc2UgQVNfTElCVE9PTF9UQUdTLiBGaXggY3JhcCBnZXR0ZXh0IGNvbW1pdAotCWNvbW1lbnQuCi0KLTIwMDUtMDctMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcHNyY19hZGRfZWxlbWVudCksCi0JKGdzdF9ydHNwc3JjX3BsYXkpOgotCUZpeCBmb3IgY29yZSBjaGFuZ2VzLgotCi0yMDA1LTA3LTE4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19zaW5rX2V2ZW50KToKLQkgIFdoZW4gcmV0dXJuaW5nIHRvIE5PUk1BTCBzdGF0ZSBhZnRlciByZWFkaW5nIHRhZ3MsCi0JICBwYXNzIG9uIHRoZSBkaXNjb250IGV2ZW50LgotCi0yMDA1LTA3LTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6IChnc3Rfcm1kZW11eF9zaW5rX2V2ZW50KSwKLQkoZ3N0X3JtZGVtdXhfY2hhbmdlX3N0YXRlKSwgKGdzdF9ybWRlbXV4X2NoYWluKSwKLQkoZ3N0X3JtZGVtdXhfZ2V0X3N0cmVhbV9ieV9pZCksIChnc3Rfcm1kZW11eF9zZW5kX2V2ZW50KSwKLQkoZ3N0X3JtZGVtdXhfYWRkX3N0cmVhbSk6Ci0JU2VuZCBkaXNjb250IGV2ZW50IGJlZm9yZSBwdXNoaW5nIGZpcnN0IGJ1ZmZlci4KLQotMjAwNS0wNy0xNyAgUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4KLQotCSogZ3N0L2Zkc3JjL2dzdGZkc3JjLmM6Ci0JUmVtb3ZlZCAjaW5jbHVkZSA8Z3N0X3ByaXZhdGUuaD4KLQotMjAwNS0wNy0xNiAgUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4KLQotCSogZ3N0L2Zkc3JjL2dzdGZkc3JjLmM6Ci0JKiBnc3QvZmRzcmMvZ3N0ZmRzcmMuaDoKLQkqIGdzdC9mZHNyYy9NYWtlZmlsZS5hbToKLQlNb3ZlZCBmZHNyYyAwLjkgcG9ydCBmcm9tIGdzdHJlYW1lci9nc3QvZWxlbWVudHMgdG8gaGVyZS4KLQotMjAwNS0wNy0xNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX3NyY19xdWVyeSksIChnc3RfbWFkX3NpbmtfZXZlbnQpLAotCShnc3RfbWFkX2NoYWluKToKLQlBZGQgY29udmVydCBmdW5jdGlvbiBmb3IgcHJvcGVyIHRpbWVzdGFtcCBjYWxjdWxhdGlvbnMuCi0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc2VuZF9ldmVudCksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlciksIChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zZWVrKSwKLQkoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpLCAoZ3N0X2F2aV9kZW11eF9sb29wKToKLQlTZW5kIG91dCBpbml0aWFsIGRpc2NvbnQuCi0KLTIwMDUtMDctMTUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF90cmFuc2Zvcm0pOgotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IChnc3RfdmlkZW9fYm94X2NsYXNzX2luaXQpLAotCShnc3RfdmlkZW9fYm94X2dldF9zaXplKSwgKGdzdF92aWRlb19ib3hfdHJhbnNmb3JtKToKLQlQb3J0IHRvIG5ldyBiYXNlIGNsYXNzLgotCi0yMDA1LTA3LTE0ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6IChnc3RfZHYxMzk0c3JjX2dldF90eXBlKSwKLQkoZ3N0X2R2MTM5NHNyY19jbGFzc19pbml0KSwgKGdzdF9kdjEzOTRzcmNfaW5pdCksCi0JKGdzdF9kdjEzOTRzcmNfaXNvX3JlY2VpdmUpLCAoZ3N0X2R2MTM5NHNyY19jcmVhdGUpLAotCShnc3RfZHYxMzk0c3JjX2NoYW5nZV9zdGF0ZSksIChnc3RfZHYxMzk0c3JjX3F1ZXJ5KToKLQlJdCdzIFBVU0hfU1JDIG5vdy4KLQotMjAwNS0wNy0xNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfZ2V0X3R5cGUpLAotCShnc3RfdWRwc3JjX2NsYXNzX2luaXQpOgotCSAgbW9yZSBhdXRpc3RpYyBjbGVhbmxpbmVzcyBpbiBmdW5jdGlvbnMvbmFtZXMvZGVmaW5lcwotCi0KLTIwMDUtMDctMTAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzogKGdzdF9hYXNpbmtfZ2V0X3R5cGUpLAotCShnc3RfYWFzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2Fhc2lua19pbml0KToKLQkqIGV4dC9lc2QvZXNkc2luay5jOiAoZ3N0X2VzZHNpbmtfZ2V0X3R5cGUpLAotCShnc3RfZXNkc2lua19jbGFzc19pbml0KToKLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmM6IChnc3RfY2FjYXNpbmtfZ2V0X3R5cGUpLAotCShnc3RfY2FjYXNpbmtfY2xhc3NfaW5pdCksIChnc3RfY2FjYXNpbmtfaW5pdCk6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOiAoZ3N0X3Nob3V0MnNlbmRfZ2V0X3R5cGUpLAotCShnc3Rfc2hvdXQyc2VuZF9jbGFzc19pbml0KSwgKGdzdF9zaG91dDJzZW5kX2luaXQpOgotCSogZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmM6IChnc3RfZHludWRwc2lua19nZXRfdHlwZSksCi0JKGdzdF9keW51ZHBzaW5rX2NsYXNzX2luaXQpOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3R5cGUpLAotCShnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpOgotCSAgbW9yZSBtYWNybyBzcGxpdHRpbmcKLQotMjAwNS0wNy0wOCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogc3lzL29zcy86IFBvcnQgZnJvbSBUSFJFQURFRCt3aW0ncyBmaXhlcy4KLQotCSogZ3N0L2F2aS9NYWtlZmlsZS5hbSAobGliZ3N0YXZpX2xhX0NGTEFHUyk6IE5vIGdldHRleHQgaGFja3MsIHRoZQotCWRlZmluZXMgY29tZSBmcm9tIGNvbmZpZy5oLgotCi0JKiBhdXRvZ2VuLnNoOiBSdW4gYXV0b3BvaW50LCBldGMuCi0KLQkqIE1ha2VmaWxlLmFtIChESVNUX1NVQkRJUlMsIFNVQkRJUlMpOiBHbyBpbnRvIHBvLy4KLQotCSogY29uZmlndXJlLmFjOiBBZGQgZ2V0dGV4dCBzdHVmZi4KLQotMjAwNS0wNy0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiAoZ3N0X3ZpZGVvX2JveF9pbml0KSwKLQkoZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fY2FwcyksIChnc3RfdmlkZW9fYm94X3NldF9jYXBzKToKLQlMb2dpYyB3YXMgcmV2ZXJzZWQuIE5lZWRzIHNvbWUgIG1vcmUgZml4ZXMgaW4gdGhlIHRyYW5zZm9ybQotCWZ1bmN0aW9uIHRvIGluY2x1ZGUgQVlVViBvdXRwdXQuCi0JTW92ZWQgQVlVViBhcyBwcmVmZXJlZCBmb3JtYXQuCi0KLTIwMDUtMDctMDcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvZHYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19jbGFzc19pbml0KSwgKGdzdF9kdmRlY19pbml0KSwKLQkoZ3N0X2R2ZGVjX2dldF9zcmNfcXVlcnlfdHlwZXMpLCAoZ3N0X2R2ZGVjX3NyY19xdWVyeSksCi0JKGdzdF9kdmRlY19oYW5kbGVfc2lua19ldmVudCksIChnc3RfZHZkZWNfaGFuZGxlX3NyY19ldmVudCksCi0JKGdzdF9kdmRlY192aWRlb19nZXRjYXBzKSwgKGdzdF9kdmRlY192aWRlb19zZXRjYXBzKSwKLQkoZ3N0X2R2ZGVjX2RlY29kZV9hdWRpbyksIChnc3RfZHZkZWNfZGVjb2RlX3ZpZGVvKSwKLQkoZ3N0X2R2ZGVjX2RlY29kZV9mcmFtZSksIChnc3RfZHZkZWNfY2hhaW4pLAotCShnc3RfZHZkZWNfY2hhbmdlX3N0YXRlKSwgKGdzdF9kdmRlY19zZXRfcHJvcGVydHkpLAotCShnc3RfZHZkZWNfZ2V0X3Byb3BlcnR5KSwgKHBsdWdpbl9pbml0KToKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jbGFzc19pbml0KToKLQlQb3J0ZWQgRFZkZWMgdG8gMC45LgotCVBhcmVudCBvZiBlc2RzaW5rIGlzIEdzdEF1ZGlvU2luay4KLQotMjAwNS0wNy0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9yYXcxMzk0L01ha2VmaWxlLmFtOgotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6IChnc3RfZHYxMzk0c3JjX2dldF90eXBlKSwKLQkoZ3N0X2R2MTM5NHNyY19jbGFzc19pbml0KSwgKGdzdF9kdjEzOTRzcmNfaW5pdCksCi0JKGdzdF9kdjEzOTRzcmNfaXNvX3JlY2VpdmUpLCAoZ3N0X2R2MTM5NHNyY19jcmVhdGUpLAotCShnc3RfZHYxMzk0c3JjX2NoYW5nZV9zdGF0ZSksIChnc3RfZHYxMzk0c3JjX2NvbnZlcnQpLAotCShnc3RfZHYxMzk0c3JjX2dldF9xdWVyeV90eXBlcyksIChnc3RfZHYxMzk0c3JjX3F1ZXJ5KToKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5oOgotCVBvcnRlZCB0aGUgMTM5NCBzb3VyY2UgdG8gMC45LgotCi0yMDA1LTA3LTA3ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2dldF9xdWVyeV90eXBlcyk6Ci0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9nZXRfcXVlcnlfdHlwZXMpLCAoZ3N0X21hZF9zcmNfcXVlcnkpOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9nZXRfc3JjX3F1ZXJ5X3R5cGVzKToKLQlSZW1vdmUgZGVwcmVjYXRlZC91bnNlZCBjb2RlLgotCi0yMDA1LTA3LTA2ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19pbml0KTogCi0JR1NUX0JBU0VTUkMgLS0+IEdTVF9CQVNFX1NSQwotCi0yMDA1LTA3LTA1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3Qvb25ldG9uOiBSZW1vdmVkIChyZXBsYWNlZCBieSBkZWludGVybGVhdmUpLgotCi0JKiBnc3QvYWRkZXI6Ci0JKiBnc3QvYXVkaW9jb252ZXJ0OgotCSogZ3N0L2F1ZGlvcmF0ZToKLQkqIGdzdC9hdWRpb3NjYWxlOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2U6Ci0JKiBnc3QvcGxheWJhY2s6Ci0JKiBnc3Qvc2luZToKLQkqIGdzdC9zdWJwYXJzZToKLQkqIGdzdC90YWdzOgotCSogZ3N0L3RjcDoKLQkqIGdzdC92aWRlb3NjYWxlOgotCSogZ3N0L3ZvbHVtZTogUmVtb3ZlZCBkaXJzIHRoYXQgYXJlIG5vdyBpbiBnc3QtcGx1Z2lucy1iYXNlLgotCi0yMDA1LTA3LTA1ICBFZHdhcmQgSGVydmV5ICA8ZWR3YXJkQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6IChHU1RfUExVR0lOU19BTEwpOiAKLQl2aWRlb2ZpbHRlciBtdXN0IGJlIGNvbXBpbGVkIGZpcnN0LCBzaW5jZSBvdGhlciBwbHVnaW5zIGRlcGVuZCBvbnQgaXQuCi0KLTIwMDUtMDctMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIFdheSwgd2F5LCB3YXkgdG9vIG1hbnkgZmlsZXM6Ci0JUmVtb3ZlIGNyYWNrIGNvbW1lbnQgZnJvbSB0aGUgMjAwMCBlcmEuCi0KLTIwMDUtMDctMDUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGdzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jOiBDbGVhbiB1cCwgcG9ydCB0byAwLjksIHVzZQotCUJhc2VUcmFuc2Zvcm0uCi0KLQkqIGdzdC92aWRlb2JveC9NYWtlZmlsZS5hbTogTGluayB0byBiYXNlIGxpYnMsIGluY2x1ZGUKLQlwbHVnaW5zLWJhc2UgY2ZsYWdzLCBkaXN0IHRoZSBSRUFETUUuCi0KLQkqIGNvbmZpZ3VyZS5hYyAoR1NUX1BMVUdJTl9BTEwsIEFDX0NPTkZJR19GSUxFUyk6IEFkZCB2aWRlb2JveCB0bwotCXRoZSBidWlsZC4KLQotMjAwNS0wNy0wNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jOgotCUkgZG9uJ3QgdGhpbmsgdGhhdCBwaWVjZSBvZiBjaGFuZ2Vsb2cgc2hvdWxkIGdvIHRoZXJlLgotCi0yMDA1LTA3LTA0ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBleGFtcGxlcy9sZXZlbC86Ci0JKiBleGFtcGxlcy9sZXZlbC9NYWtlZmlsZS5hbToKLQkqIGV4YW1wbGVzL2xldmVsL1JFQURNRToKLQkqIGV4YW1wbGVzL2xldmVsL2RlbW8uYzoKLQkqIGV4YW1wbGVzL2xldmVsL3Bsb3QuYzogRXhhbXBsZXMgbW92ZWQgb3V0IG9mIHRoZSBzb3VyY2UgZGlyLiBOb3QKLQl1cGRhdGVkIHRoby4KLQotCSogY29uZmlndXJlLmFjOiBBZGQgbGV2ZWwgdG8gdGhlIGJ1aWxkLgotCi0JKiBnc3QvbGV2ZWwvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuaDoKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiBDbGVhbmVkIHVwLCBwb3J0ZWQgdG8gMC45LgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmMgKGdzdF9hYXNpbmtfZml4YXRlKTogVXBkYXRlIGZvciBuZXdlcgotCWZpeGF0ZSBwcm90b3R5cGUuCi0KLTIwMDUtMDctMDMgIE93ZW4gRnJhc2VyLUdyZWVuICA8b3dlbkBkaXNjb2JhYmUubmV0PgotCi0JKiBnc3QvcmVhbG1lZGlhL3JtZGVtdXguYyAoZ3N0X3JtZGVtdXhfYWRkX3N0cmVhbSksCi0JKGdzdF9ybWRlbXV4X3NyY19nZXRjYXBzKSwgKGdzdF9ybWRlbXV4X2NoYWluKTogCi0JQWRkZWQgZ2V0Y2FwcyBmdW5jdGlvbiBub19tb3JlX3BhZHMgY2FsbAotCi0yMDA1LTA3LTAxICBQaGlsaXBwZSBLaGFsYWYgPGJ1cmdlckBzcGVlZHkub3JnPgotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkqIGdzdC91ZHAvZ3N0dWRwLmM6Ci0JKiBnc3QvdWRwL2dzdGR5bnVkcHNpbmsuYzogKG5ldykKLQkqIGdzdC91ZHAvZ3N0ZHludWRwc2luay5oOiAobmV3KQotCSAgQWRkZWQgbmV3IGVsZW1lbnQgKHVkcGR5bnNpbmspIHRoYXQgcmVjZWl2ZXMgR3N0TmV0QnVmZmVycyBhbmQgc2VuZHMgdGhlCi0JICB1ZHAgcGFja2V0cyB0byB0aGUgc291cmNlIGdpdmVuIGluIHRoZSBidWZmZXIuIEl0J3MgdXNlZCBieSBydHBzZXNzaW9uCi0JICBlbGVtZW50IGZvciBub3cuCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOgotCSAgRml4ZWQgbWVtb3J5IGxlYWsuCi0KLTIwMDUtMDctMDEgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L21hZC9NYWtlZmlsZS5hbToKLQkqIHN5cy9vc3MvTWFrZWZpbGUuYW06Ci0JUm9sbCBnc3RyZWFtZXItaW50ZXJmYWNlcy0wLjkucGMgaW50byBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLTAuOS5wYwotCi0yMDA1LTA3LTAxICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBleHQvbGliY2FjYS9NYWtlZmlsZS5hbToKLQkqIGV4dC9tYWQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC91ZHAvTWFrZWZpbGUuYW06Ci0JICBSZXBsYWNlIEdTVF9QTFVHSU5TX0xJQlNfKiB3aXRoIEdTVF9QTFVHSU5TX0JBU0VfKgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfc3JjX3F1ZXJ5KSwKLQkoZ3N0X2lkM190YWdfc3JjX2V2ZW50KSwgKGdzdF9pZDNfdGFnX3NpbmtfZXZlbnQpLAotCShnc3RfaWQzX3RhZ19jaGFpbiksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9zcmNfcXVlcnkpLCAoZ3N0X21hZF9jaGFpbik6Ci0JICBTaWduZWRuZXNzIHdhcm5pbmcgZml4LCB1c2UgZ3N0X3BhZF9nZXRfcGVlciBpbnN0ZWFkIG9mIEdTVF9QQURfUEVFUgotCSAgaW4gcXVlcnlpbmcgYW5kIGV2ZW50IGhhbmRsaW5nLCBiZWNhdXNlIHdlJ3JlIG5vdCBob2xkaW5nIHRoZSBwYWQKLQkgIGxvY2sgYW5kIHRoZSBwZWVyIG1heSBkaXNhcHBlYXIuCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3BhcnNlX3N1YmluZGV4KSwKLQkoZ3N0X2F2aV9kZW11eF9wYXJzZV9pbmRleCksIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpOgotCSAgU2lnbmVkbmVzcyB3YXJuaW5nIGZpeGVzLgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW90ZW1wbGF0ZS5jOiAocGx1Z2luX2luaXQpOgotCSAgUmVtb3ZlIGdzdF9saWJyYXJ5X2xvYWQKLQotMjAwNS0wNi0zMCAgRWR3YXJkIEhlcnZleSAgPGVkd2FyZEBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2F2aS9NYWtlZmlsZS5hbTogKGxpYmdzdGF2aV9sYV9MSUJBREQpOgotCUFkZGVkIGxpbmtpbmcgdG8gbGliZ3N0cmlmZi0wLjkKLQkKLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX3NyY19xdWVyeSk6IAotCWNoZWNrIHRoZSBmb3JtYXQgb2YgdGhlIHVwc3RyZWFtIHF1ZXJ5IGFuZCByZXR1cm4gcXVlcnkgaWYgaXQncyB0aGUKLQlzYW1lIGZvcm1hdCBhcyB0aGUgcmVxdWVzdGVkIG9uZS4KLQotMjAwNS0wNi0zMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KToKLQkgIENvbXBpbGVyIHBhaW5zLgotCi0yMDA1LTA2LTMwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvYXZpL01ha2VmaWxlLmFtOgotCSogZ3N0L2F2aS9nc3RhdmkuYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfZ2V0X3R5cGUpLAotCShnc3RfYXZpX2RlbXV4X2NsYXNzX2luaXQpLCAoZ3N0X2F2aV9kZW11eF9pbml0KSwKLQkoZ3N0X2F2aV9kZW11eF9yZXNldCksIChnc3RfYXZpX2RlbXV4X2luZGV4X25leHQpLAotCShnc3RfYXZpX2RlbXV4X2luZGV4X2VudHJ5X2Zvcl90aW1lKSwKLQkoZ3N0X2F2aV9kZW11eF9pbmRleF9lbnRyeV9mb3JfYnl0ZSksCi0JKGdzdF9hdmlfZGVtdXhfaW5kZXhfZW50cnlfZm9yX2ZyYW1lKSwgKGdzdF9hdmlfZGVtdXhfc3JjX2NvbnZlcnQpLAotCShnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLCAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwKLQkoZ3N0X2F2aV9kZW11eF9wYXJzZV9maWxlX2hlYWRlciksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0KSwKLQkoZ3N0X2F2aV9kZW11eF9wYXJzZV9hdmloKSwgKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3VwZXJpbmRleCksCi0JKGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9yZWFkX3N1YmluZGV4ZXMpLAotCShnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSksIChnc3RfYXZpX2RlbXV4X3BhcnNlX29kbWwpLAotCShnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KSwKLQkoZ3N0X2F2aV9kZW11eF9zdHJlYW1fc2NhbiksIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpLAotCShnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpLCAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2VlayksCi0JKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpLAotCShnc3RfYXZpX2RlbXV4X2xvb3ApLCAoZ3N0X2F2aV9kZW11eF9zaW5rX2FjdGl2YXRlKSwKLQkoZ3N0X2F2aV9kZW11eF9zaW5rX2FjdGl2YXRlX3B1bGwpOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5oOgotCSAgUG9ydCBmcm9tIC1USFJFQURFRCB0byBIRUFELCBhbmQgZml4IGZvciBsYXRlc3QgQVBJIGNoYW5nZXMgb2YKLQkgIHRoZSBkYXkuIEtlZXAgYXZpbXV4IGRlYWQgZm9yIG5vdy4KLQotMjAwNS0wNi0yOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChnc3Rfc2hvdXQyc2VuZF9yZW5kZXIpOgotCUZpeCBidWlsZC4KLQotMjAwNS0wNi0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZXhhbXBsZS5jOiBSZW1vdmVkIGdzdF9saWJyYXJ5X2xvYWQsIEkKLQl0aGluay4gV2hhdGV2ZXIgdGhpcyBwbHVnaW4gYWN0dWFsbHkgZG9lcywgdGhhdCBJIGRvbid0IGtub3cuCi0KLTIwMDUtMDYtMjkgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmMgKGdzdF9pZDNfdGFnX2dldF9ldmVudF9tYXNrcyk6IFJlc2NobW9vdmUuCi0KLQkqIGV4dC9tYWQvZ3N0bWFkLmMgKGdzdF9tYWRfZ2V0X2V2ZW50X21hc2tzKTogUmVtb3ZlLgotCShnc3RfbWFkX2NoYWluKTogQXBwZWFzZSBHQ0MuCi0KLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmMgKGdzdF9jYWNhc2lua19zZXRjYXBzKTogU2lnbmVkbmVzcy4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jIChnc3RfYWFzaW5rX2ZpeGF0ZSk6IFVucmVmIGNhcHMsIG5vdCBmcmVlLgotCShnc3RfYWFzaW5rX3NjYWxlKTogU2lnbmVkbmVzcy4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmMgKGdzdF91ZHBzaW5rX2dldF90eXBlKTogQWN0dWFsbHkgYWRkIHRoZQotCVVSSSBoYW5kbGVyLgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jIChnc3RfdWRwc3JjX3N0YXJ0KToKLQkoZ3N0X3VkcHNyY19jcmVhdGUpOiBTaWduZWRuZXNzLgotCi0JKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmMgKHNkcF9tZXNzYWdlX3BhcnNlX2J1ZmZlcik6IFRoYW5rcwotCWNvbXBpbGVyIQotCShzZHBfcGFyc2VfbGluZSk6IFNpZ25lZG5lc3MgZml4LgotCi0JKiBjb25maWd1cmUuYWMgKEdTVF9DRkxBR1MpOiBHQ0Mgc3RyaWtlcyBiYWNrISEhIExldCB0aGUgYnVpbGQKLQlicmVha2FnZSBlbnN1ZSEhIQotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmMgKGdzdF9ydHNwc3JjX2xvb3AsIGdzdF9ydHNwc3JjX29wZW4pOgotCVNpZ25lZG5lc3MsIHVudXNlZCB2YXIgZml4ZXMuCi0JKGdzdF9ydHNwc3JjX2Nsb3NlKTogVW51c2VkPwotCi0JKiBnc3QvcmVhbG1lZGlhL3JtZGVtdXguYyAocmVfaGV4ZHVtcF9ieXRlcyk6IFVudXNlZC4KLQotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYyAoZ3N0X211bGF3ZW5jX2NoYWluKTogU2lnbmVuZXNzIGZpeC4KLQotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jIChhbGF3ZW5jX2dldGNhcHMpOiBSZW1vdmUgdW5uZWVkZWQKLQlkZWNsYXJhdGlvbnMuIFR5cG8gKHByb2JhYmx5IGNyYXNoZXIpIGZpeC4KLQkKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmMgKG11bGF3ZGVjX2dldGNhcHMpOiAKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmMgKG11bGF3ZW5jX2dldGNhcHMpOiAKLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYyAoYWxhd2RlY19nZXRjYXBzKTogU2FtZSBjcmFzaGVyIGZpeC4KLQotCSogZ3N0L2dvb20vZ3N0Z29vbS5jIChnc3RfZ29vbV9pbml0KTogSG9vayB1cCB0aGUgZXZlbnQgZnVuY3Rpb24uCi0KLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYyAoZ3N0X3dhcnB0dl9zZXR1cCk6IFNpZ25lZG5lc3MgZml4LgotCi0JKiBnc3QvZWZmZWN0di9nc3RkaWNlLmMgKGdzdF9kaWNldHZfZHJhdyk6IFVtLCBkZWZlcmVuY2luZwotCXVuaW5pdGlhbGl6ZWQgcG9pbnRlciBub3QgZ29vZC4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZXhhbXBsZS5jIChwbHVnaW5faW5pdCk6IAotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtIChsaWJnc3R2aWRlb2V4YW1wbGVfbGFfTElCQUREKTogTGluawotCXRvIGxpYmdzdHZpZGVvZmlsdGVyIGluc3RlYWQgb2YgZ3N0X2xpYnJhcnlfbG9hZC4KLQotCSogZ3N0L2FscGhhL2dzdGFscGhhLmMgKGdzdF9hbHBoYV9jaHJvbWFfa2V5X2k0MjApIAotCShnc3RfYWxwaGFfY2hyb21hX2tleV9heXV2KTogU2lnbmVkbmVzcyBmaXhlbi4KLQotMjAwNS0wNi0yOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwX3Byb3RvX2dldF90eXBlKSwKLQkoZ3N0X3J0c3BzcmNfY2xhc3NfaW5pdCksIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkoZ3N0X3J0c3BzcmNfYWRkX2VsZW1lbnQpLCAoZ3N0X3J0c3BzcmNfc2V0X3N0YXRlKSwKLQkoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksCi0JKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGZpbmRfc3RyZWFtKSwKLQkoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX3BsYXkpLAotCShnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCUZpeCBjYXNlIHdoZXJlIG91dHBhZCBjb3VsZCBub3QgYmUgZGVjaWRlZC4KLQotMjAwNS0wNi0yOSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L01ha2VmaWxlLmFtIChNQURfRElSKTogQWRkIG1hZCB0byB0aGUgYnVpbGQuCi0KLTIwMDUtMDYtMjggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfc3JjX2xpbmspOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfaW5pdCk6Ci0JRml4IG9sZCBSUEFEIG1hY3JvLgotCWJhc2VzcmMgLT4gYmFzZV9zcmMKLQotMjAwNS0wNi0yNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19zcmNfbGluayk6Ci0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9jaGFpbik6Ci0JUlBBRF8gLT4gUEFECi0JRml4IGFyZ3MgaW4gYnVmZmVyYWxsb2MgZnVuY3Rpb24gY2FsbC4KLQlNYWtlcyB0aGUgbWFkIHBsdWdpbiBjb21waWxlIGFnYWluCi0KLTIwMDUtMDYtMjcgIE93ZW4gRnJhc2VyLUdyZWVuICA8b3dlbkBkaXNjb2JhYmUubmV0PgotCi0JKiBnc3QvcmVhbG1lZGlhL3JtZGVtdXguYzogUmV3cm90ZSB0byB1c2UgZ3N0YWRhcHRlci4gQWxzbyBwYXJzZXMKLQlhdWRpbyBhbmQgdmlkZW8gaGVhZGVyIHBhY2tldHMgZm9yIGtub3duIHByb3BlcnRpZXMuCi0KLTIwMDUtMDYtMjMgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcF9wcm90b19nZXRfdHlwZSksCi0JKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksCi0JKGdzdF9ydHNwc3JjX2FkZF9lbGVtZW50KSwgKGdzdF9ydHNwc3JjX3NldF9zdGF0ZSksCi0JKGdzdF9ydHNwc3JjX3N0cmVhbV9zZXR1cF9ydHApLAotCShnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksIChmaW5kX3N0cmVhbSksCi0JKGdzdF9ydHNwc3JjX2xvb3ApLCAoZ3N0X3J0c3BzcmNfb3BlbiksIChnc3RfcnRzcHNyY19wbGF5KSwKLQkoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX3BhcnNlKToKLQlNYWtlIHJ0c3BzcmMgYSBsaXZlIHNvdXJjZS4KLQlEb24ndCB0cnkgdG8gcGFyc2UgTlVMTCB1cmxzLgotCi0yMDA1LTA2LTIzICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfaW5pdCk6Ci0JTWFrZSB1ZHBzcmMgYSBsaXZlIHNvdXJjZS4KLQotMjAwNS0wNi0wMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC91ZHAvTWFrZWZpbGUuYW06Ci0JVXNlIHZlcnNpb25lZCBuZXQgbGliLgotCi0yMDA1LTA2LTAyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQlGaXggaGFjayBpbiBtYWtlZmlsZS4KLQotMjAwNS0wNi0wMiAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogRmluaXNoIHBvcnRpbmcgdG8gMC45OiBubyBtb3JlIGdzdGRhdGEsCi0JY2hlY2sgZm9yIGxpbmsgZnVuY3Rpb25zIGJlZm9yZSBjYWxsaW5nIHRoZW0sIGdpdmUKLQlnc3RfbWVzc2FnZV9uZXdfdGFnIGl0cyBvd24gY29weSBvZiB0aGUgdGFnIGxpc3QsIHNldCB0aGUgcGFyc2VyCi0Jc3RhdGUgYmVmb3JlIHNlbmRpbmcgdGhlIGV2ZW50IChiZWNhdXNlIGluIDAuOSBldmVudHMgYXJlCi0JcHJvY2Vzc2VkIGltbWVkaWF0ZWx5KSwgY2FzdGluZyBmaXhlcy4KLQotCSogZXh0L21hZC9NYWtlZmlsZS5hbSAobGliZ3N0bWFkX2xhX0xERkxBR1MpOiBMaW5rIHdpdGgKLQlnc3R0YWdlZGl0LgotCi0yMDA1LTA2LTAyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3VkcC9NYWtlZmlsZS5hbToKLQkqIGdzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmM6IChnc3RfbXVsdGl1ZHBzaW5rX2dldF90eXBlKSwKLQkoZ3N0X211bHRpdWRwc2lua19iYXNlX2luaXQpLCAoZ3N0X211bHRpdWRwc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpdWRwc2lua19pbml0KSwgKGdzdF9tdWx0aXVkcHNpbmtfZmluYWxpemUpLAotCShnc3RfbXVsdGl1ZHBzaW5rX2dldF90aW1lcyksIChnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlciksCi0JKGdzdF9tdWx0aXVkcHNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9tdWx0aXVkcHNpbmtfaW5pdF9zZW5kKSwKLQkoZ3N0X211bHRpdWRwc2lua19hZGQpLCAoY2xpZW50X2NvbXBhcmUpLCAoZnJlZV9jbGllbnQpLAotCShnc3RfbXVsdGl1ZHBzaW5rX3JlbW92ZSksIChnc3RfbXVsdGl1ZHBzaW5rX2NsZWFyKSwKLQkoZ3N0X211bHRpdWRwc2lua19nZXRfc3RhdHMpOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfZ2V0X3R5cGUpLAotCShnc3RfdWRwc3JjX2Jhc2VfaW5pdCksIChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLAotCShnc3RfdWRwc3JjX2NyZWF0ZSksIChnc3RfdWRwc3JjX3NldF91cmkpLCAoZ3N0X3VkcHNyY19zdGFydCksCi0JKGdzdF91ZHBzcmNfdW5sb2NrKSwgKGdzdF91ZHBzcmNfc3RvcCk6Ci0JVXNlIE5ldEJ1ZmZlciBhbmQgc21hbGwgY2xlYW51cHMuCi0JSW1wbGVtZW50IGNsaWVudCByZW1vdmFsIGluIG11bHRpdWRwc2luay4KLQotMjAwNS0wNi0wMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9ydHNwL1JFQURNRToKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuYzogKGdzdF9ydHNwX3Byb3RvX2dldF90eXBlKSwKLQkoZ3N0X3J0c3BzcmNfY2xhc3NfaW5pdCksIChnc3RfcnRzcHNyY19jcmVhdGVfc3RyZWFtKSwKLQkoZ3N0X3J0c3BzcmNfYWRkX2VsZW1lbnQpLCAoZ3N0X3J0c3BzcmNfc2V0X3N0YXRlKSwKLQkoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksCi0JKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGZpbmRfc3RyZWFtKSwKLQkoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX3BsYXkpLAotCShnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3J0c3AvcnRzcHRyYW5zcG9ydC5jOiAocnRzcF90cmFuc3BvcnRfbmV3KSwKLQkocnRzcF90cmFuc3BvcnRfaW5pdCksIChwYXJzZV9tb2RlKSwgKHBhcnNlX3JhbmdlKSwKLQkocnRzcF90cmFuc3BvcnRfcGFyc2UpLCAocnRzcF90cmFuc3BvcnRfZnJlZSk6Ci0JUlRTUCBjbGVhbnVwcy4KLQotMjAwNS0wNi0wMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6IChnc3RfcXVhcmt0dl9jaGFpbik6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6IChnc3RfZ29vbV9jaGFpbik6Ci0JKiBnc3QvdmlkZW9ib3gvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCksCi0JKGdzdF92aWRlb19ib3hfaW5pdCksIChnc3RfdmlkZW9fYm94X3Npbmtfc2V0Y2FwcyksCi0JKGdzdF92aWRlb19ib3hfY2hhaW4pOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmlsdGVyLmM6IChnc3RfdmlkZW9maWx0ZXJfY2hhaW4pOgotCSogZ3N0L3ZpZGVvcmF0ZS9nc3R2aWRlb3JhdGUuYzogKGdzdF92aWRlb3JhdGVfY2xhc3NfaW5pdCksCi0JKGdzdF92aWRlb3JhdGVfZ2V0Y2FwcyksIChnc3RfdmlkZW9yYXRlX3NldGNhcHMpLAotCShnc3RfdmlkZW9yYXRlX2luaXQpLCAoZ3N0X3ZpZGVvcmF0ZV9ldmVudCksIChnc3RfdmlkZW9yYXRlX2NoYWluKSwKLQkoZ3N0X3ZpZGVvcmF0ZV9jaGFuZ2Vfc3RhdGUpOgotCUJ1ZmZlcmFsbG9jIGNoYW5nZXMuCi0KLTIwMDUtMDUtMjUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9jaGFpbiksIChnc3RfbWFkX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvc2lkcGxheS9nc3RzaWRkZWMuY2M6Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9jaGFpbik6Ci0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6IChnc3RfZ29vbV9jaGFpbik6Ci0JTm8gbmVlZCB0byB0YWtlIHRoZSBsb2NrIGFueW1vcmUsICBjb3JlIGFscmVhZHkgZGlkCi0JdGhhdCBiZWZvcmUgY2FsbGluZyB1cy4KLQotMjAwNS0wNS0yNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9hbXJuYi9hbXJuYmRlYy5jOiAoZ3N0X2Ftcm5iZGVjX2luaXQpLCAoZ3N0X2Ftcm5iZGVjX2NoYWluKSwKLQkoZ3N0X2Ftcm5iZGVjX3N0YXRlX2NoYW5nZSk6Ci0JKiBleHQvYW1ybmIvYW1ybmJlbmMuYzogKGdzdF9hbXJuYmVuY19iYXNlX2luaXQpLAotCShnc3RfYW1ybmJlbmNfZmluYWxpemUpLCAoZ3N0X2Ftcm5iZW5jX2NoYWluKSwKLQkoZ3N0X2Ftcm5iZW5jX3N0YXRlX2NoYW5nZSk6Ci0JKiBleHQvYW1ybmIvYW1ybmJwYXJzZS5jOiAoZ3N0X2Ftcm5icGFyc2VfaW5pdCksCi0JKGdzdF9hbXJuYnBhcnNlX3F1ZXJ5KSwgKGdzdF9hbXJuYnBhcnNlX2NoYWluKSwKLQkoZ3N0X2Ftcm5icGFyc2VfcmVhZF9oZWFkZXIpLCAoZ3N0X2Ftcm5icGFyc2VfbG9vcCksCi0JKGdzdF9hbXJuYnBhcnNlX3NpbmtfYWN0aXZhdGUpLCAoZ3N0X2Ftcm5icGFyc2Vfc3RhdGVfY2hhbmdlKToKLQlDb3JlIGFscmVhZHkgdG9vayB0aGUgbG9jay4KLQotMjAwNS0wNS0xOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2VzZC9NYWtlZmlsZS5hbToKLQkgIERpc2FibGUgdGNwIGVsZW1lbnRzIGFuZCBlc2Rtb24gKHRoZXkgZG9uJ3QgY29tcGlsZSkuCi0KLTIwMDUtMDUtMTkgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBzeXMvTWFrZWZpbGUuYW06Ci0JICBNYWtlIG15IGF1dG9tYWtlIHZlcnNpb24gc2h1dCB1cCBhYm91dCB1bmRlZmluZWQgdmFyaWFibGVzCi0JKiBnc3QvZ29vbS9nc3Rnb29tLmM6Ci0JICBHc3RBZGFwdGVyIG1vdmVkIHRvIGJhc2Ugb2JqZWN0cy4gCi0KLTIwMDUtMDUtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvYW1ybmIvTWFrZWZpbGUuYW06Ci0JKiBleHQvYW1ybmIvYW1ybmIuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9hbXJuYi9hbXJuYmRlYy5jOiAoZ3N0X2Ftcm5iZGVjX2luaXQpLAotCShnc3RfYW1ybmJkZWNfc2V0Y2FwcyksIChnc3RfYW1ybmJkZWNfY2hhaW4pLAotCShnc3RfYW1ybmJkZWNfc3RhdGVfY2hhbmdlKToKLQkqIGV4dC9hbXJuYi9hbXJuYmRlYy5oOgotCSogZXh0L2Ftcm5iL2Ftcm5iZW5jLmM6IChnc3RfYW1ybmJlbmNfZ2V0X3R5cGUpLAotCShnc3RfYW1ybmJlbmNfYmFzZV9pbml0KSwgKGdzdF9hbXJuYmVuY19jbGFzc19pbml0KSwKLQkoZ3N0X2Ftcm5iZW5jX2luaXQpLCAoZ3N0X2Ftcm5iZW5jX2ZpbmFsaXplKSwKLQkoZ3N0X2Ftcm5iZW5jX3NldGNhcHMpLCAoZ3N0X2Ftcm5iZW5jX2NoYWluKSwKLQkoZ3N0X2Ftcm5iZW5jX3N0YXRlX2NoYW5nZSk6Ci0JKiBleHQvYW1ybmIvYW1ybmJlbmMuaDoKLQkqIGV4dC9hbXJuYi9hbXJuYnBhcnNlLmM6IChnc3RfYW1ybmJwYXJzZV9pbml0KSwKLQkoZ3N0X2Ftcm5icGFyc2VfcXVlcnkpLCAoZ3N0X2Ftcm5icGFyc2VfZXZlbnQpLAotCShnc3RfYW1ybmJwYXJzZV9jaGFpbiksIChnc3RfYW1ybmJwYXJzZV9yZWFkX2hlYWRlciksCi0JKGdzdF9hbXJuYnBhcnNlX2xvb3ApLCAoZ3N0X2Ftcm5icGFyc2Vfc2lua19hY3RpdmF0ZSksCi0JKGdzdF9hbXJuYnBhcnNlX3N0YXRlX2NoYW5nZSk6Ci0JKiBleHQvYW1ybmIvYW1ybmJwYXJzZS5oOgotCVBvcnRlZCBBTVIgZGVjb2Rlci9wYXJzZS4KLQlBZGRlZCBBTVIgZW5jb2Rlci4KLQotMjAwNS0wNS0xOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9nb29tL01ha2VmaWxlLmFtOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21faW5pdCksIChnc3RfZ29vbV9zaW5rX3NldGNhcHMpLAotCShnc3RfZ29vbV9zcmNfc2V0Y2FwcyksIChnc3RfZ29vbV9zcmNfbmVnb3RpYXRlKSwgKGdzdF9nb29tX2V2ZW50KSwKLQkoZ3N0X2dvb21fY2hhaW4pLCAoZ3N0X2dvb21fY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQlQb3J0ZWQgZ29vbS4KLQlBZGRlZCBnb29tIGFuZCBhbHBoYSB0byBidWlsZC4KLQotMjAwNS0wNS0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9hbHBoYS9NYWtlZmlsZS5hbToKLQkqIGdzdC9hbHBoYS9nc3RhbHBoYS5jOiAoZ3N0X2FscGhhX2NsYXNzX2luaXQpLCAoZ3N0X2FscGhhX2luaXQpLAotCShnc3RfYWxwaGFfc2lua19zZXRjYXBzKSwgKGdzdF9hbHBoYV9jaGFpbik6Ci0JUG9ydGVkIGFscGhhLCAgcmVtb3ZlIGFscGhhY29sb3IgYXMgZnVuY3Rpb25hbGl0eSBpcyBpbgotCWZmbXBlZ2NvbG9yc3BhY2UuCi0KLTIwMDUtMDUtMTcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOiAoZ3N0X2NhY2FzaW5rX3NldGNhcHMpLAotCShnc3RfY2FjYXNpbmtfcmVuZGVyKSwgKGdzdF9jYWNhc2lua19vcGVuKSwgKGdzdF9jYWNhc2lua19jbG9zZSksCi0JKGdzdF9jYWNhc2lua19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaDoKLQlDbGVhbnVwcy4KLQotMjAwNS0wNS0xNSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JTW92ZSBjb3JlIHBsdWdpbnMgb3V0IG9mIGNvcmUuICBJIGRvbid0IG1pbmQgZmRzcmMvZmRzaW5rCi0JZ29pbmcgYmFjayBpbnRvIHRoZSBjb3JlOyB0aGV5IHdlcmUganVzdCBkaXNhYmxlZCB0aGVyZSwgc28KLQlJIG1vdmVkIHRoZW0uICBTb21lIG9mIHRoaXMgc3R1ZmYgY291bGQgKHNob3VsZCkgYmUgZGVsZXRlZC4KLQkqIGdzdC9vbGRjb3JlL01ha2VmaWxlLmFtOgotCSogZ3N0L29sZGNvcmUvZ3N0YWdncmVnYXRvci5jOgotCSogZ3N0L29sZGNvcmUvZ3N0YWdncmVnYXRvci5oOgotCSogZ3N0L29sZGNvcmUvZ3N0ZWxlbWVudHMuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdGZkc2luay5jOgotCSogZ3N0L29sZGNvcmUvZ3N0ZmRzaW5rLmg6Ci0JKiBnc3Qvb2xkY29yZS9nc3RmZHNyYy5jOgotCSogZ3N0L29sZGNvcmUvZ3N0ZmRzcmMuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdG1kNXNpbmsuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdG1kNXNpbmsuaDoKLQkqIGdzdC9vbGRjb3JlL2dzdG11bHRpZmlsZXNyYy5jOgotCSogZ3N0L29sZGNvcmUvZ3N0bXVsdGlmaWxlc3JjLmg6Ci0JKiBnc3Qvb2xkY29yZS9nc3RwaXBlZmlsdGVyLmM6Ci0JKiBnc3Qvb2xkY29yZS9nc3RwaXBlZmlsdGVyLmg6Ci0JKiBnc3Qvb2xkY29yZS9nc3RzaGFwZXIuYzoKLQkqIGdzdC9vbGRjb3JlL2dzdHNoYXBlci5oOgotCSogZ3N0L29sZGNvcmUvZ3N0c3RhdGlzdGljcy5jOgotCSogZ3N0L29sZGNvcmUvZ3N0c3RhdGlzdGljcy5oOgotCi0yMDA1LTA1LTEzICBDaHJpc3RpYW4gU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBleHQvTWFrZWZpbGUuYW06IGRpc3QgZXNkIGRpcmVjdG9yeQotCSogZ3N0LXBsdWdpbnMuc3BlYy5pbjogYWRkIHJ0cCBwbHVnaW5zIGFuZCBlc2QgcGx1Z2luCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbTogZml4IHZpZGVvZmlsdGVyIGxpbmtpbmcKLQkqIGdzdC9ydHAvTWFrZWZpbGUuYW06IGFkZCBtaXNzaW5nIGhlYWRlcnMgCi0JKiBnc3QvcnRzcC9NYWtlZmlsZS5hbTogYWRkIG1pc3NpbmcgaGVhZGVycwotCi0yMDA1LTA1LTEyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3NpZHBsYXkvZ3N0c2lkZGVjLmNjOgotCUFkZCB3b3JraW5nIHBsdWdpbnMgdG8gYnVpbGQuCi0JTWFrZSBzaWRwbGF5IGNvbXBpbGUgYWdhaW4uCi0KLTIwMDUtMDUtMTIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfc3JjX3F1ZXJ5KToKLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NoYWluKToKLQlGaXggbWFkIGFuZCBpZDN0YWcgY29tcGlsYXRpb24gYWdhaW4uCi0KLTIwMDUtMDUtMTIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdWRwLy5jdnNpZ25vcmU6Ci0JKiBnc3QvdWRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuYzogKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3R5cGUpLAotCShnc3RfbXVsdGl1ZHBzaW5rX2Jhc2VfaW5pdCksIChnc3RfbXVsdGl1ZHBzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGl1ZHBzaW5rX2luaXQpLCAoZ3N0X211bHRpdWRwc2lua19maW5hbGl6ZSksCi0JKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3RpbWVzKSwgKGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyKSwKLQkoZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpdWRwc2lua19nZXRfcHJvcGVydHkpLAotCShnc3RfbXVsdGl1ZHBzaW5rX2luaXRfc2VuZCksIChnc3RfbXVsdGl1ZHBzaW5rX2Nsb3NlKSwKLQkoZ3N0X211bHRpdWRwc2lua19hZGQpLCAoZ3N0X211bHRpdWRwc2lua19yZW1vdmUpLAotCShnc3RfbXVsdGl1ZHBzaW5rX2NsZWFyKSwgKGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3N0YXRzKSwKLQkoZ3N0X211bHRpdWRwc2lua19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwLW1hcnNoYWwubGlzdDoKLQkqIGdzdC91ZHAvZ3N0dWRwLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvdWRwL2dzdHVkcC5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6IChnc3RfdWRwc2lua19nZXRfdHlwZSksCi0JKGdzdF91ZHBzaW5rX2Jhc2VfaW5pdCksIChnc3RfdWRwc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X3VkcHNpbmtfaW5pdCksIChnc3RfdWRwc2lua19zZXRfdXJpKSwKLQkoZ3N0X3VkcHNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF91ZHBzaW5rX2dldF9wcm9wZXJ0eSksCi0JKGdzdF91ZHBzaW5rX3VyaV9nZXRfdHlwZSksIChnc3RfdWRwc2lua191cmlfZ2V0X3Byb3RvY29scyksCi0JKGdzdF91ZHBzaW5rX3VyaV9nZXRfdXJpKSwgKGdzdF91ZHBzaW5rX3VyaV9zZXRfdXJpKSwKLQkoZ3N0X3VkcHNpbmtfdXJpX2hhbmRsZXJfaW5pdCk6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuaDoKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2dldF90eXBlKSwKLQkoZ3N0X3VkcHNyY19iYXNlX2luaXQpLCAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwKLQkoZ3N0X3VkcHNyY19jcmVhdGUpLCAoZ3N0X3VkcHNyY19zZXRfdXJpKSwgKGdzdF91ZHBzcmNfc3RhcnQpLAotCShnc3RfdWRwc3JjX3VubG9jayksIChnc3RfdWRwc3JjX3N0b3ApOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQlBZGRlZCBtdWx0aWZkc2luayB0byBzZW5kIFVEUCB0byBtdWx0aXBsZSBhZGRyZXNzZXMuCi0JQ2xlYW5lZCB1cCBVRFAgc291cmNlL3NpbmsgZWxlbWVudHMgc29tZSBtb3JlLgotCU1ha2UgVURQIHNpbmsgZXh0ZW5kcyBmcm9tIG11bHRpdWRwc2luay4KLQotMjAwNS0wNS0xMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9zcmNfcXVlcnkpLCAoZ3N0X21hZF9zaW5rX2V2ZW50KToKLQkgIE1ha2UgcXVlcmllcyBhY3R1YWxseSB3b3JrICh1cGRhdGUgY29yZSBmaXJzdCkuCi0KLTIwMDUtMDUtMTIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9SRUFETUU6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOiAoZ3N0X3RjcGNsaWVudHNyY19nZXRfdHlwZSksCi0JKGdzdF90Y3BjbGllbnRzcmNfYmFzZV9pbml0KSwgKGdzdF90Y3BjbGllbnRzcmNfY2xhc3NfaW5pdCksCi0JKGdzdF90Y3BjbGllbnRzcmNfaW5pdCksIChnc3RfdGNwY2xpZW50c3JjX2dldGNhcHMpLAotCShnc3RfdGNwY2xpZW50c3JjX3N0b3ApLCAoZ3N0X3RjcGNsaWVudHNyY19lb3MpLAotCShnc3RfdGNwY2xpZW50c3JjX2NyZWF0ZSksIChnc3RfdGNwY2xpZW50c3JjX3N0YXJ0KToKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c3JjLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNyYy5jOiAoZ3N0X3RjcHNlcnZlcnNyY19nZXRfdHlwZSksCi0JKGdzdF90Y3BzZXJ2ZXJzcmNfYmFzZV9pbml0KSwgKGdzdF90Y3BzZXJ2ZXJzcmNfY2xhc3NfaW5pdCksCi0JKGdzdF90Y3BzZXJ2ZXJzcmNfaW5pdCksIChnc3RfdGNwc2VydmVyc3JjX2NyZWF0ZSksCi0JKGdzdF90Y3BzZXJ2ZXJzcmNfc3RhcnQpLCAoZ3N0X3RjcHNlcnZlcnNyY19zdG9wKToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNyYy5jOiAoZ3N0X3RjcHNyY19nZXRfdHlwZSksCi0JKGdzdF90Y3BzcmNfYmFzZV9pbml0KSwgKGdzdF90Y3BzcmNfY2xhc3NfaW5pdCksIChnc3RfdGNwc3JjX2luaXQpLAotCShnc3RfdGNwc3JjX2NyZWF0ZSksIChnc3RfdGNwc3JjX3N0YXJ0KSwgKGdzdF90Y3BzcmNfc3RvcCk6Ci0JKiBnc3QvdGNwL2dzdHRjcHNyYy5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6IChnc3RfdWRwc2lua19iYXNlX2luaXQpLAotCShnc3RfdWRwc2lua19pbml0KSwgKGdzdF91ZHBzaW5rX2dldF90aW1lcyksIChnc3RfdWRwc2lua19yZW5kZXIpLAotCShnc3RfdWRwc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X3VkcHNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3VkcHNpbmtfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfZ2V0X3R5cGUpLAotCShnc3RfdWRwc3JjX2Jhc2VfaW5pdCksIChnc3RfdWRwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3VkcHNyY19pbml0KSwKLQkoZ3N0X3VkcHNyY19jcmVhdGUpLCAoZ3N0X3VkcHNyY19zZXRfdXJpKSwgKGdzdF91ZHBzcmNfc3RhcnQpLAotCShnc3RfdWRwc3JjX3N0b3ApOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQlNYWtlIFVEUCBhbmQgVENQIGVsZW1lbnRzIHVzZSBQdXNoU3JjLgotCi0KLTIwMDUtMDUtMTEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaW5pdCksIChnc3RfbWFkX3NyY19xdWVyeSksCi0JKGluZGV4X3NlZWspLCAobm9ybWFsX3NlZWspLCAoZ3N0X21hZF9zaW5rX2V2ZW50KToKLQkgIFBvcnQgdG8gbmV3IHF1ZXJ5IEFQSSBhbmQgcmVwbGFjZSBnc3RfcGFkX2NvbnZlcnQoKQotCSAgYW5kIGdzdF9wYWRfZ2V0X2Zvcm1hdHMoKSB1c2FnZS4gZ3N0aWQzdGFnIGxvb2tzIGxpa2UKLQkgIGl0IG5lZWRzIHNvbWUgbW9yZSBsb3ZlIGJlZm9yZSBpdCB3aWxsIHdvcmsgYWdhaW4sIGlmIAotCSAgbm90IGEgcmV3cml0ZS4KLQotMjAwNS0wNS0xMiAgWmVlc2hhbiBBbGkgIDx6ZWVuaXhAZ21haWwuY29tPgotCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQlGaXhlZCB0aGUgZWZmZWN0diBidWlsZCBhZ2Fpbi4KLQotMjAwNS0wNS0xMSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfZ2V0X3R5cGUpLAotCShnc3RfbXVsdGlmZHNpbmtfYmFzZV9pbml0KSwgKGdzdF9tdWx0aWZkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpZmRzaW5rX2luaXQpLCAoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLAotCShnc3RfbXVsdGlmZHNpbmtfcXVldWVfYnVmZmVyKSwgKGdzdF9tdWx0aWZkc2lua19yZW5kZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNpbmsuYzogKGdzdF90Y3BjbGllbnRzaW5rX2dldF90eXBlKSwKLQkoZ3N0X3RjcGNsaWVudHNpbmtfYmFzZV9pbml0KSwgKGdzdF90Y3BjbGllbnRzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfdGNwY2xpZW50c2lua19pbml0KSwgKGdzdF90Y3BjbGllbnRzaW5rX3JlbmRlciksCi0JKGdzdF90Y3BjbGllbnRzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfdGNwY2xpZW50c2lua19nZXRfcHJvcGVydHkpLAotCShnc3RfdGNwY2xpZW50c2lua19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzaW5rLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOiAoZ3N0X3RjcGNsaWVudHNyY19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcGNsaWVudHNyY19pbml0X3JlY2VpdmUpOgotCSogZ3N0L3RjcC9nc3R0Y3BwbHVnaW4uYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOiAoZ3N0X3RjcHNlcnZlcnNpbmtfY2xhc3NfaW5pdCk6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6IChnc3RfdGNwc2VydmVyc3JjX2NsYXNzX2luaXQpOgotCSogZ3N0L3RjcC9nc3R0Y3BzaW5rLmM6IChnc3RfdGNwc2lua19nZXRfdHlwZSksCi0JKGdzdF90Y3BzaW5rX2Jhc2VfaW5pdCksIChnc3RfdGNwc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcHNpbmtfc2V0Y2FwcyksIChnc3RfdGNwc2lua19pbml0KSwgKGdzdF90Y3BzaW5rX2dldF90aW1lcyksCi0JKGdzdF90Y3BzaW5rX3JlbmRlciksIChnc3RfdGNwc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfdGNwc2lua19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3RjcC9nc3R0Y3BzaW5rLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNyYy5jOiAoZ3N0X3RjcHNyY19jbGFzc19pbml0KSwgKGdzdF90Y3BzcmNfZ2V0KToKLQlQb3J0ZWQgb3ZlciBzb21lIHNpbmsgZWxlbWVudHMuCi0JU291cmNlcyBub3QgcG9ydGVkIHlldCBhcyB0aGV5IHJlcXVpcmUgYSBQdXNoU291cmNlIGJhc2UgY2xhc3MuCi0KLTIwMDUtMDUtMTEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZ3N0L2VmZmVjdHYvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JICBUdXJuIHZpZGVvZmlsdGVyIGludG8gYSBsaWJyYXJ5IChwcml2YXRlIGZvciBub3cpCi0KLTIwMDUtMDUtMTEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9SRUFETUU6Ci0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcF9wcm90b19nZXRfdHlwZSksCi0JKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksCi0JKGdzdF9ydHNwc3JjX2FkZF9lbGVtZW50KSwgKGdzdF9ydHNwc3JjX3NldF9zdGF0ZSksCi0JKGdzdF9ydHNwc3JjX3N0cmVhbV9zZXR1cF9ydHApLAotCShnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCksIChmaW5kX3N0cmVhbSksCi0JKGdzdF9ydHNwc3JjX2xvb3ApLCAoZ3N0X3J0c3BzcmNfb3BlbiksIChnc3RfcnRzcHNyY19wbGF5KToKLQkqIGdzdC9ydHNwL3J0c3AuaDoKLQkqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fY3JlYXRlKSwKLQkocnRzcF9jb25uZWN0aW9uX3NlbmQpLCAocmVhZF9saW5lKSwgKHBhcnNlX3JlcXVlc3RfbGluZSksCi0JKHBhcnNlX2xpbmUpLCAocmVhZF9ib2R5KSwgKHJ0c3BfY29ubmVjdGlvbl9yZWNlaXZlKSwKLQkocnRzcF9jb25uZWN0aW9uX2ZyZWUpOgotCSogZ3N0L3J0c3AvcnRzcGNvbm5lY3Rpb24uaDoKLQkqIGdzdC9ydHNwL3J0c3BkZWZzLmM6IChydHNwX2ZpbmRfbWV0aG9kKToKLQkqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5jOiAocnRzcF9tZXNzYWdlX3NldF9ib2R5KSwKLQkocnRzcF9tZXNzYWdlX3Rha2VfYm9keSk6Ci0JKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5oOgotCSogZ3N0L3J0c3AvcnRzcHN0cmVhbS5oOgotCSogZ3N0L3J0c3Avc2RwbWVzc2FnZS5jOiAoc2RwX3BhcnNlX2xpbmUpOgotCUFkZGVkIFJFQURNRQotCVNvbWUgY2xlYW51cHMuCi0KLTIwMDUtMDUtMTEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6IChnc3RfcnRzcF9wcm90b19nZXRfdHlwZSksCi0JKGdzdF9ydHNwc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3J0c3BzcmNfaW5pdCksCi0JKGdzdF9ydHNwc3JjX2NyZWF0ZV9zdHJlYW0pLCAoZ3N0X3J0c3BzcmNfYWRkX2VsZW1lbnQpLAotCShnc3RfcnRzcHNyY19zZXRfc3RhdGUpLCAoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksCi0JKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGZpbmRfc3RyZWFtKSwKLQkoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY19vcGVuKSwgKGdzdF9ydHNwc3JjX2Nsb3NlKSwKLQkoZ3N0X3J0c3BzcmNfcGxheSksIChnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oOgotCVNldHVwIFVEUCBzb3VyY2VzIGNvcnJlY3RseSwgcmVjZWl2ZXMgcmF3IGRhdGEgZnJvbSBSVFNQCi0JY29tcGxpYW50IHNlcnZlcnMgbm93LgotCi0yMDA1LTA1LTExICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3J0c3AvLmN2c2lnbm9yZToKLQkqIGdzdC9ydHNwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0c3AvZ3N0cnRzcC5jOiAocGx1Z2luX2luaXQpOgotCSogZ3N0L3J0c3AvZ3N0cnRzcC5oOgotCSogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOiAoZ3N0X3J0c3BfcHJvdG9fZ2V0X3R5cGUpLAotCShnc3RfcnRzcHNyY19nZXRfdHlwZSksIChnc3RfcnRzcHNyY19iYXNlX2luaXQpLAotCShnc3RfcnRzcHNyY19jbGFzc19pbml0KSwgKGdzdF9ydHNwc3JjX2luaXQpLAotCShnc3RfcnRzcHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3J0c3BzcmNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSksIChydHNwc3JjX2FkZF9lbGVtZW50KSwKLQkoZ3N0X3J0c3BzcmNfc3RyZWFtX3NldHVwX3J0cCksCi0JKGdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0KSwgKGZpbmRfc3RyZWFtKSwKLQkoZ3N0X3J0c3BzcmNfbG9vcCksIChnc3RfcnRzcHNyY19zZW5kKSwgKGdzdF9ydHNwc3JjX29wZW4pLAotCShnc3RfcnRzcHNyY19jbG9zZSksIChnc3RfcnRzcHNyY19wbGF5KSwgKGdzdF9ydHNwc3JjX3BhdXNlKSwKLQkoZ3N0X3J0c3BzcmNfYWN0aXZhdGUpLCAoZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9ydHNwL2dzdHJ0c3BzcmMuaDoKLQkqIGdzdC9ydHNwL3J0c3AuaDoKLQkqIGdzdC9ydHNwL3J0c3Bjb25uZWN0aW9uLmM6IChydHNwX2Nvbm5lY3Rpb25fb3BlbiksCi0JKHJ0c3BfY29ubmVjdGlvbl9jcmVhdGUpLCAoYXBwZW5kX2hlYWRlciksIChydHNwX2Nvbm5lY3Rpb25fc2VuZCksCi0JKHJlYWRfbGluZSksIChyZWFkX3N0cmluZyksIChyZWFkX2tleSksIChwYXJzZV9yZXNwb25zZV9zdGF0dXMpLAotCShwYXJzZV9saW5lKSwgKHJlYWRfYm9keSksIChydHNwX2Nvbm5lY3Rpb25fcmVjZWl2ZSksCi0JKHJ0c3BfY29ubmVjdGlvbl9jbG9zZSk6Ci0JKiBnc3QvcnRzcC9ydHNwY29ubmVjdGlvbi5oOgotCSogZ3N0L3J0c3AvcnRzcGRlZnMuYzogKHJ0c3BfaW5pdF9zdGF0dXMpLCAocnRzcF9tZXRob2RfYXNfdGV4dCksCi0JKHJ0c3BfaGVhZGVyX2FzX3RleHQpLCAocnRzcF9zdGF0dXNfYXNfdGV4dCksCi0JKHJ0c3Bfc3RhdHVzX3RvX3N0cmluZyksIChydHNwX2ZpbmRfaGVhZGVyX2ZpZWxkKToKLQkqIGdzdC9ydHNwL3J0c3BkZWZzLmg6Ci0JKiBnc3QvcnRzcC9ydHNwbWVzc2FnZS5jOiAocnRzcF9tZXNzYWdlX25ld19yZXF1ZXN0KSwKLQkocnRzcF9tZXNzYWdlX2luaXRfcmVxdWVzdCksIChydHNwX21lc3NhZ2VfbmV3X3Jlc3BvbnNlKSwKLQkocnRzcF9tZXNzYWdlX2luaXRfcmVzcG9uc2UpLCAocnRzcF9tZXNzYWdlX2luaXRfZGF0YSksCi0JKHJ0c3BfbWVzc2FnZV9hZGRfaGVhZGVyKSwgKHJ0c3BfbWVzc2FnZV9yZW1vdmVfaGVhZGVyKSwKLQkocnRzcF9tZXNzYWdlX2dldF9oZWFkZXIpLCAocnRzcF9tZXNzYWdlX2dldF9oZWFkZXJfY29weSksCi0JKHJ0c3BfbWVzc2FnZV9zZXRfYm9keSksIChydHNwX21lc3NhZ2Vfc2V0X2JvZHlfY29weSksCi0JKHJ0c3BfbWVzc2FnZV9nZXRfYm9keSksIChydHNwX21lc3NhZ2VfZ2V0X2JvZHlfY29weSksIChkdW1wX21lbSksCi0JKGR1bXBfa2V5X3ZhbHVlKSwgKHJ0c3BfbWVzc2FnZV9kdW1wKToKLQkqIGdzdC9ydHNwL3J0c3BtZXNzYWdlLmg6Ci0JKiBnc3QvcnRzcC9ydHNwc3RyZWFtLmg6Ci0JKiBnc3QvcnRzcC9ydHNwdHJhbnNwb3J0LmM6IChydHNwX3RyYW5zcG9ydF9uZXcpLAotCShydHNwX3RyYW5zcG9ydF9pbml0KSwgKHBhcnNlX21vZGUpLCAocGFyc2VfcmFuZ2UpLAotCShydHNwX3RyYW5zcG9ydF9wYXJzZSksIChydHNwX3RyYW5zcG9ydF9mcmVlKToKLQkqIGdzdC9ydHNwL3J0c3B0cmFuc3BvcnQuaDoKLQkqIGdzdC9ydHNwL3J0c3B1cmwuYzogKHJ0c3BfdXJsX3BhcnNlKSwgKHJ0c3BfdXJsX2ZyZWUpOgotCSogZ3N0L3J0c3AvcnRzcHVybC5oOgotCSogZ3N0L3J0c3Avc2RwLmg6Ci0JKiBnc3QvcnRzcC9zZHBtZXNzYWdlLmM6IChzZHBfbWVzc2FnZV9uZXcpLCAoc2RwX21lc3NhZ2VfaW5pdCksCi0JKHNkcF9tZXNzYWdlX2NsZWFuKSwgKHNkcF9tZXNzYWdlX2ZyZWUpLCAoc2RwX21lZGlhX25ldyksCi0JKHNkcF9tZWRpYV9pbml0KSwgKHNkcF9tZXNzYWdlX3NldF9vcmlnaW4pLAotCShzZHBfbWVzc2FnZV9nZXRfb3JpZ2luKSwgKHNkcF9tZXNzYWdlX3NldF9jb25uZWN0aW9uKSwKLQkoc2RwX21lc3NhZ2VfZ2V0X2Nvbm5lY3Rpb24pLCAoc2RwX21lc3NhZ2VfYWRkX2JhbmR3aWR0aCksCi0JKHNkcF9tZXNzYWdlX2FkZF90aW1lKSwgKHNkcF9tZXNzYWdlX2FkZF96b25lKSwKLQkoc2RwX21lc3NhZ2Vfc2V0X2tleSksIChzZHBfbWVzc2FnZV9nZXRfa2V5KSwKLQkoc2RwX21lc3NhZ2VfZ2V0X2F0dHJpYnV0ZV92YWwpLCAoc2RwX21lc3NhZ2VfYWRkX2F0dHJpYnV0ZSksCi0JKHNkcF9tZXNzYWdlX2FkZF9tZWRpYSksIChzZHBfbWVkaWFfYWRkX2F0dHJpYnV0ZSksCi0JKHNkcF9tZWRpYV9hZGRfYmFuZHdpZHRoKSwgKHNkcF9tZWRpYV9hZGRfZm9ybWF0KSwKLQkoc2RwX21lZGlhX2dldF9hdHRyaWJ1dGVfdmFsKSwgKHJlYWRfc3RyaW5nKSwgKHJlYWRfc3RyaW5nX2RlbCksCi0JKHNkcF9wYXJzZV9saW5lKSwgKHNkcF9tZXNzYWdlX3BhcnNlX2J1ZmZlciksIChwcmludF9tZWRpYSksCi0JKHNkcF9tZXNzYWdlX2R1bXApOgotCSogZ3N0L3J0c3Avc2RwbWVzc2FnZS5oOgotCSogZ3N0L3J0c3AvdGVzdC5jOiAobWFpbik6Ci0JUG9ydGVkIHRvIDAuOS4KLQlTZXQgdXAgdHJhbnNwb3J0cywgaW5pdCBVRFAgcG9ydHMsIGluaXQgUlRQIHNlc3Npb24gbWFuYWdlcnMuCi0KLTIwMDUtMDUtMTEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcnRwL01ha2VmaWxlLmFtOgotCSogZ3N0L3J0cC9nc3RydHAuYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC9ydHAvZ3N0cnRwZGVjLmM6IChnc3RfcnRwZGVjX2dldF90eXBlKSwKLQkoZ3N0X3J0cGRlY19jbGFzc19pbml0KSwgKGdzdF9ydHBkZWNfaW5pdCksIChnc3RfcnRwZGVjX2NoYWluX3J0cCksCi0JKGdzdF9ydHBkZWNfY2hhaW5fcnRjcCksIChnc3RfcnRwZGVjX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9ydHBkZWNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9ydHBkZWNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3J0cGRlY19wbHVnaW5faW5pdCk6Ci0JKiBnc3QvcnRwL2dzdHJ0cGRlYy5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzaW5rLmM6IChnc3RfdWRwc2lua19iYXNlX2luaXQpLAotCShnc3RfdWRwc2lua19nZXRfdGltZXMpLCAoZ3N0X3VkcHNpbmtfcmVuZGVyKSwKLQkoZ3N0X3VkcHNpbmtfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2dldF90eXBlKSwKLQkoZ3N0X3VkcHNyY19iYXNlX2luaXQpLCAoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwgKGdzdF91ZHBzcmNfaW5pdCksCi0JKGdzdF91ZHBzcmNfbG9vcCksIChnc3RfdWRwc3JjX3NldF91cmkpLCAoZ3N0X3VkcHNyY19zZXRfcHJvcGVydHkpLAotCShnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSksIChnc3RfdWRwc3JjX2luaXRfcmVjZWl2ZSksCi0JKGdzdF91ZHBzcmNfYWN0aXZhdGUpLCAoZ3N0X3VkcHNyY19jaGFuZ2Vfc3RhdGUpLAotCShnc3RfdWRwc3JjX3VyaV9nZXRfdHlwZSksIChnc3RfdWRwc3JjX3VyaV9nZXRfcHJvdG9jb2xzKSwKLQkoZ3N0X3VkcHNyY191cmlfZ2V0X3VyaSksIChnc3RfdWRwc3JjX3VyaV9zZXRfdXJpKSwKLQkoZ3N0X3VkcHNyY191cmlfaGFuZGxlcl9pbml0KToKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JVURQIGZpeGVzLCBhZGRlZCB1cmkgaGFuZGxlci4KLQlBZGRlZCBydHBkZWMgdGhhdCB3aWxsIG1hbmFnZSB0aGUgUlRQIHNlc3Npb24gaW4gdGhlIGZ1dHVyZS4KLQotMjAwNS0wNS0xMCAgQXJ3ZWQgdi4gTWVya2F0eiAgPHYubWVya2F0ekBnbXgubmV0PgotCi0JKiBQT1JURURfMDk6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvZXNkL01ha2VmaWxlLmFtOgotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19nZXRfdHlwZSksCi0JKGdzdF9lc2RzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2VzZHNpbmtfaW5pdCksCi0JKGdzdF9lc2RzaW5rX2Rpc3Bvc2UpLCAoZ3N0X2VzZHNpbmtfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X2NhcHNfc2V0X2VhY2gpLCAoZ3N0X2VzZHNpbmtfZ2V0Y2FwcyksIChnc3RfZXNkc2lua19vcGVuKSwKLQkoZ3N0X2VzZHNpbmtfY2xvc2UpLCAoZ3N0X2VzZHNpbmtfd3JpdGUpLCAoZ3N0X2VzZHNpbmtfZGVsYXkpLAotCShnc3RfZXNkc2lua19yZXNldCksIChnc3RfZXNkc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfZXNkc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X2VzZHNpbmtfZmFjdG9yeV9pbml0KToKLQkqIGV4dC9lc2QvZXNkc2luay5oOgotCSogZXh0L2VzZC9nc3Rlc2QuYzogKHBsdWdpbl9pbml0KToKLQlQb3J0ZWQgZXNkc2luayBwbHVnaW4KLQotMjAwNS0wNS0xMCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC91ZHAvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX2dldF90eXBlKSwKLQkoZ3N0X3VkcHNpbmtfYmFzZV9pbml0KSwgKGdzdF91ZHBzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfdWRwc2lua19pbml0KSwgKGdzdF91ZHBzaW5rX2dldF90aW1lcyksIChnc3RfdWRwc2lua19yZW5kZXIpLAotCShnc3RfdWRwc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X3VkcHNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3VkcHNpbmtfaW5pdF9zZW5kKSwgKGdzdF91ZHBzaW5rX2Nsb3NlKSwKLQkoZ3N0X3VkcHNpbmtfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC91ZHAvZ3N0dWRwc2luay5oOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuYzogKGdzdF91ZHBzcmNfYmFzZV9pbml0KSwKLQkoZ3N0X3VkcHNyY19jbGFzc19pbml0KSwgKGdzdF91ZHBzcmNfaW5pdCksIChnc3RfdWRwc3JjX2xvb3ApLAotCShnc3RfdWRwc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSksCi0JKGdzdF91ZHBzcmNfaW5pdF9yZWNlaXZlKSwgKGdzdF91ZHBzcmNfY2xvc2UpLAotCShnc3RfdWRwc3JjX2FjdGl2YXRlKSwgKGdzdF91ZHBzcmNfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmg6Ci0JUG9ydGVkIHVkcCBzcmMvc2luay4KLQotMjAwNS0wNS0wOSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBQT1JURURfMDk6Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvc2hvdXQyL01ha2VmaWxlLmFtOgotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzogKGdzdF9zaG91dDJzZW5kX2dldF90eXBlKSwKLQkoZ3N0X3Nob3V0MnNlbmRfYmFzZV9pbml0KSwgKGdzdF9zaG91dDJzZW5kX2NsYXNzX2luaXQpLAotCShnc3Rfc2hvdXQyc2VuZF9pbml0KSwgKGdzdF9zaG91dDJzZW5kX2V2ZW50KSwKLQkoZ3N0X3Nob3V0MnNlbmRfcmVuZGVyKSwgKGdzdF9zaG91dDJzZW5kX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9zaG91dDJzZW5kX2dldF9wcm9wZXJ0eSksIChnc3Rfc2hvdXQyc2VuZF9zZXRjYXBzKSwKLQkoZ3N0X3Nob3V0MnNlbmRfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmg6Ci0KLQlQb3J0IHNob3V0MiBwbHVnaW4KLQotMjAwNS0wNS0wOCAgWmVlc2hhbiBBbGkgICA8emVlbml4QGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2xpYmNhY2EvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOiAoZ3N0X2NhY2FzaW5rX2dldF90eXBlKSwKLQkoZ3N0X2NhY2FzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2NhY2FzaW5rX2dldF90aW1lcyksCi0JKGdzdF9jYWNhc2lua19zZXRjYXBzKSwgKGdzdF9jYWNhc2lua19pbml0KSwgKGdzdF9jYWNhc2lua19yZW5kZXIpLAotCShwbHVnaW5faW5pdCk6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5oOgotCVBvcnRlZCB0aGUgbGliY2FjYSBwbHVnaW4uCi0KLTIwMDUtMDUtMDggIFplZXNoYW4gQWxpICA8emVlbml4QGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L21hZC9NYWtlZmlsZS5hbToKLQkqIGVmZmVjdHYvTWFrZWZpbGUuYW06Ci0JRml4ZWQgYSBmZXcgdGhpbmdzIHRvIGVuYWJsZSB0aGUgbWFkIGFuZCBlZmZlY3R2IHRvIGJlIGFibGUgdG8gZmluZCB0aGUKLQloZWFkZXJzIGluIHRoZSBnc3QtcGx1Z2lucy1iYXNlL2dzdC1saWJzIGFuZCB0byBsaW5rIGFnYWluc3QgdGhlIGxpYnMKLQlpbiB0aGVyZS4KLQotMjAwNS0wNS0wNyAgWmVlc2hhbiBBbGkgIDx6ZWVuaXhAZ21haWwuY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JRml4ZWQgdGhlIGJ1aWxkIGJ5IGZpeGluZyBhIHNtYWxsIG1pc3Rha2Ugb2YgV2ltLgotCQotMjAwNS0wNS0wNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9hYWxpYi9NYWtlZmlsZS5hbToKLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzogKGdzdF9hYXNpbmtfZ2V0X3R5cGUpLAotCShnc3RfYWFzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2Fhc2lua19maXhhdGUpLCAoZ3N0X2Fhc2lua19zZXRjYXBzKSwKLQkoZ3N0X2Fhc2lua19pbml0KSwgKGdzdF9hYXNpbmtfZ2V0X3RpbWVzKSwgKGdzdF9hYXNpbmtfcmVuZGVyKSwKLQkoZ3N0X2Fhc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X2Fhc2lua19nZXRfcHJvcGVydHkpLAotCShnc3RfYWFzaW5rX29wZW4pLCAoZ3N0X2Fhc2lua19jbG9zZSksIChnc3RfYWFzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmg6Ci0JKiBnc3Qvc21wdGUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzogKGdzdF9zbXB0ZV9zZXRjYXBzKSwgKGdzdF9zbXB0ZV9pbml0KSwKLQkoZ3N0X3NtcHRlX2NvbGxlY3RlZCk6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuaDoKLQlQb3J0ZWQgMiBtb3JlIHBsdWdpbnMuIHVzZ2x5IGhhY2sgaW4gdGhlIE1ha2VmaWxlLmFtIHRob3VnaCwgSSdtCi0Jc3VyZSBzb21lb25lIHdpbGwgZml4IGl0LgotCi0yMDA1LTA1LTA2ICBDaHJpc3RpYW4gU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBjb25maWd1cmUuYWM6IGFkZCBzaWRwbGF5Ci0JKiBleHQvTWFrZWZpbGUuYW06IGFkZCBzaWRwbGF5Ci0JKiBleHQvc2lkcGxheS9NYWtlZmlsZS5hbTogYWRkIEdTVF9QTFVHSU5TX0NGTEFHUwotCSogZXh0L3NpZHBsYXkvZ3N0c2lkZGVjLmNjOiByZW1vdmUgYnl0ZXN0cmVhbS5oCi0KLTIwMDUtMDUtMDYgIENocmlzdGlhbiBTY2hhbGxlciAgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogYWRkIGdzdC1wbHVnaW5zLWxpYnMKLQotMjAwNS0wNS0wNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9zaWRwbGF5L2dzdHNpZGRlYy5jYzoKLQkqIGV4dC9zaWRwbGF5L2dzdHNpZGRlYy5oOgotCVBvcnRlZCBzaWRwbGF5LgotCi0yMDA1LTA1LTA2ICBDaHJpc3RpYW4gU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBjb25maWd1cmUuYWM6IAotCSogZXh0L21hZC9NYWtlZmlsZS5hbTogYWRkIGxpbmtpbmcgb2YgZ3N0aW50ZXJmYWNlcwotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKHBsdWdpbl9pbml0KTogcmVtb3ZlIGxpYnJhcnlfbG9hZAotCSogZ3N0LXBsdWdpbnMuc3BlYy5pbjogCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbTogbGluayB0byBsaWJnc3R2aWRlb2ZpbHRlcgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5jOiAocGx1Z2luX2luaXQpOiBzYW1lIGFzIGZvciBtYWQKLQkqIGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbTogbWFrZSBzdXJlIHZpZGVvZmxpcCBpcyBub3QgYnVpbHQKLQotMjAwNS0wNS0wNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9sYXcvYWxhdy1kZWNvZGUuYzogKGFsYXdkZWNfZ2V0Y2FwcyksIChhbGF3ZGVjX3NldGNhcHMpLAotCShnc3RfYWxhd2RlY19pbml0KSwgKGdzdF9hbGF3ZGVjX2NoYWluKToKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzogKGFsYXdlbmNfZ2V0Y2FwcyksIChhbGF3ZW5jX3NldGNhcHMpLAotCShnc3RfYWxhd2VuY19pbml0KSwgKGdzdF9hbGF3ZW5jX2NoYWluKToKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChtdWxhd2RlY19nZXRjYXBzKSwgKG11bGF3ZGVjX3NldGNhcHMpLAotCShnc3RfbXVsYXdkZWNfaW5pdCksIChnc3RfbXVsYXdkZWNfY2hhaW4pOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzogKG11bGF3ZW5jX2dldGNhcHMpLCAobXVsYXdlbmNfc2V0Y2FwcyksCi0JKGdzdF9tdWxhd2VuY19pbml0KSwgKGdzdF9tdWxhd2VuY19jaGFpbik6Ci0JUG9ydGVkIGFsYXcgYW5kIG11bGF3IHBsdWdpbnMgdG8gMC45LCBmaXhlZCB0aGUgbmVnb3RpYXRpb24gYXMKLQl3ZWxsLgotCi0yMDA1LTA1LTA2ICBDaHJpc3RpYW4gU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBleHQvYWxzYTogcmVtb3ZlZCBwbHVnaW5zIHRoYXQgYXJlIG5vdyBpbiBnc3QtcGx1Z2lucy1iYXNlCi0JKiBleHQvZ25vbWV2ZnM6Ci0JKiBleHQvdGhlb3JhOgotCSogZXh0L3ZvcmJpczoKLQkqIGdzdC9hZGRlcjoKLQkqIGdzdC9hdWRpb2NvbnZlcnQ6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZToKLQkqIGdzdC90eXBlZmluZDoKLQkqIGdzdC92aWRlb2ZpbHRlcjogY29tbWVudCBvdXQgdmlkZW9mbGlwIGFuZCBnYW1tYSBwbHVnaW5zCi0KLTIwMDUtMDUtMDYgIENocmlzdGlhbiBTY2hhbGxlciAgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC1saWJzOiBSZW1vdmUgYWxsIGZpbGVzIGFzIHRoaXMgaXMgaW4gZ3N0LXBsdWdpbnMtYmFzZSBub3cKLQkqIGdzdC1saWJzL1JFQURNRTogYWRkIGEgcmVtb3ZlIGluZm9ybWluZyBvZiB0aGlzIG1vdmUKLQotMjAwNS0wNS0wNiAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPiAKLQotCSogUE9SVEVEXzA5OiB1cGRhdGUgdG8gYWRkIHZpZGVvZmlsdGVyCi0JKiBjb25maWd1cmUuYWM6IHJlLWFkZCB2aWRlb2ZpbHRlcgotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOiByZW1vdmUgdmlkZW9iYWxhbmNlIChub3QgcG9ydGVkIHlldCkKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jOiAoZ3N0X2dhbW1hX2NsYXNzX2luaXQpOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOiAoZ3N0X3ZpZGVvYmFsYW5jZV9jbGFzc19pbml0KToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5jOiAoZ3N0X3ZpZGVvZmlsdGVyX2dldGNhcHMpLAotCShnc3RfdmlkZW9maWx0ZXJfc2V0Y2FwcyksIChnc3RfdmlkZW9maWx0ZXJfaW5pdCksCi0JKGdzdF92aWRlb2ZpbHRlcl9jaGFpbiksIChnc3RfdmlkZW9maWx0ZXJfc2V0X291dHB1dF9zaXplKToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYzogKGdzdF92aWRlb2ZsaXBfY2xhc3NfaW5pdCk6Ci0KLTIwMDUtMDUtMDYgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogZXh0L21hZDogcG9ydGVkIHBsdWdpbiBmcm9tIHRocmVhZGVkIGJyYW5jaAotCSogZ3N0L2VmZmVjdHY6IHBvcnRlZCBwbHVnaW5zIGZyb20gdGhyZWFkZWQgYnJhbmNoCi0JKiBnc3QvbGF3OiBlbmFibGUgbGF3IHBsdWdpbiBhcyBpdCBjb21waWxlcyAoV2ltIHdpbGwgZml4b3IpCi0KLTIwMDUtMDUtMDYgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCWZpeCB0eXBvCi0KLTIwMDUtMDUtMDUgIENocmlzdGlhbiBTY2hhbGxlciA8dXJhZXVzQGdub21lLm9yZz4KLQotCSogVXBkYXRlIGNvbmZpZ3VyZS5hYyBhbmQgTWFrZWZpbGVzIHRvIG9ubHkgYnVpbGQgd2hhdCBpcyBhY3R1YWxseQotCXBvcnRlZCBhbmQgbm90IG1vdmVkIGludG8gZ3N0LXBsdWdpbnMtYmFzZQotCi0yMDA1LTAyLTIyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBodW50aW5nIHNlYXNvbiBvbiAwLjkgaXMgbm93IE9QRU4KLQotMjAwNS0wMi0yMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50LmM6IChnc3Rfb3NzZWxlbWVudF9jbGFzc19wcm9iZV9kZXZpY2VzKToKLQkgIEtpY2sgdGhlIGhlbGwgb3V0IG9mIGdjYyBmb3Igbm90IHdhcm5pbmcgbWUgYWJvdXQgYSBzeW1ib2wgY29uZmxpY3QuCi0KLTIwMDUtMDItMjIgIEx1Y2EgT2duaWJlbmUgIDxsdW9nbmlAdGluLml0PgotCi0JUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzogKGdzdF9waXhidWZzY2FsZV9saW5rKToKLQkgIERvbid0IGxlYWsgY2FwcyBzdHJpbmcgKGZpeGVzICMxNjgxMzQpCi0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX2NsYXNzX2luaXQpLAotCShnc3RfanBlZ2VuY19pbml0KSwgKGdzdF9qcGVnZW5jX2ZpbmFsaXplKSwKLQkoZ3N0X2pwZWdlbmNfY2hhbmdlX3N0YXRlKToKLQkgIERvbid0IGxlYWsgbGluZSBidWZmZXJzIGFuZCBjb250ZXh0IHN0cnVjdCAoZml4ZXMgIzE2ODEzMykuCi0KLTIwMDUtMDItMjEgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2RpcmFjL2dzdGRpcmFjZGVjLmNjOgotCShnc3RfZGlyYWNkZWNfY2hhaW4pOgotCSAgU2luY2UgZGlyYWMgMC41LjAgdGhlIGZyYW1lcmF0ZSBpbiBkaXJhYyBpcyBleHByZXNzZWQgYXMgYQotCSAgcmF0aW9uYWwgbnVtYmVyLiBGaXggYnVpbGQgYW5kIHVwIHJlcXVpcmVtZW50IHRvIDAuNS4wLCBhbmQKLQkgIGFsc28gcGFzcyBwYXJhbWV0ZXJzIHRvIGdzdF9kaXJhY2RlY19saW5rIGluIHRoZSByaWdodCBvcmRlcgotCSAgKGZpeGVzICMxNjc5NTkpLgotCi0yMDA1LTAyLTIxICBNYWNpZWogS2F0YWZpYXN6ICA8bWF0aHJpY2tAZnJlZWRlc2t0b3Aub3JnPgotCi0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9zaW5rY29ubmVjdCksIChnc3RfZmFhZF9jaGFpbik6Ci0JKiBleHQvZmFhZC9nc3RmYWFkLmg6Ci0JVEVIIExPTkdFU1QgREVCVUdHSU5HIFNFU1NJT04gRVZBUiBpcyBvdmVyLiBGaXggaW50ZXJhY3Rpb24gd2l0aCAKLQljZXJ0YWluIGludmFsaWQgbXV4ZWQgc3RyZWFtcywgd2hlcmUgc29tZSBwYWNrZXRzIHdpbGwgY29udGFpbiAKLQlqdW5rIGFmdGVyIGRlY29kZXIgZGF0YS4gUGFydGlhbGx5IGZpeGVzICMxNDkxNTguCi0KLTIwMDUtMDItMjEgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSogZ3N0L2R2ZGxwY21kZWMvZ3N0ZHZkbHBjbWRlYy5jOiAoZ3N0X2R2ZGxwY21kZWNfY2hhaW4pOgotICAgICAgICAgIE1ha2Ugc3VyZSB3ZSBvbmx5IHdyaXRlIHRvIHdyaXRhYmxlIGJ1ZmZlcnMKLQotMjAwNS0wMi0yMCAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzX3dpdGhfZGF0YSk6Ci0JICBEbyBhY3R1YWxseSBmaXggaW52YWxpZCBSSUZGIGZtdCBoZWFkZXIgdmFsdWVzIGZvciBhbGF3Ci0JICBhbmQgbXVsYXcgYXVkaW8gaW5zdGVhZCBvZiBqdXN0IHNheWluZyBzby4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfZm10KToKLQkgIEdpdmUgZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHNfd2l0aF9kYXRhKCkgYSBjaGFuY2UgdG8KLQkgIGZpeCB1cCBicm9rZW4gZm9ybWF0IGhlYWRlciBmaWVsZHMgYmVmb3JlIGV4dHJhY3RpbmcgYW55Ci0JICBwYXJhbWV0ZXJzIGZyb20gdGhlIGhlYWRlci4gKGZpeGVzICMxNjc2MzMpCi0KLTIwMDUtMDItMTkgIE1hcnRpbiBIb2x0ZXJzICA8bWFydGluLmhvbHRlcnNAZ214LmRlPgotCi0JUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9idWZmZXJmcmFtZXNjb252ZXJ0LmM6Ci0JKGJ1ZmZlcl9mcmFtZXNfY29udmVydF9saW5rKToKLQkgIERvbid0IGxlYWsgb3RoZXJjYXBzLiAoZml4ZXMgIzE2Nzg3OCkKLQotMjAwNS0wMi0xOSAgQXJ3ZWQgdi4gTWVya2F0eiAgPHYubWVya2F0ekBnbXgubmV0Pj4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L2xpYnZpc3VhbC92aXN1YWwuYzogKGdzdF92aXN1YWxfc3JjbGluayksCi0JKGdzdF92aXN1YWxfY2hhbmdlX3N0YXRlKToKLQkgIFN1cHBvcnQgbGlidmlzdWFsIDAuMi4wLgotCi0yMDA1LTAyLTE4ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKGdzdF9qcGVnZGVjX2NoYWluKToKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX3Jlc3luYyksIChnc3RfanBlZ2VuY19jaGFpbik6Ci0JICBVc2Ugc2FtZSByb3dzdHJpZGVzIGZvciBJNDIwIGFzIHVzZWQgZXZlcnl3aGVyZSBlbHNlLgotCi0yMDA1LTAyLTE3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaW52ZXJ0KToKLQkgIERlY2xhcmUgdmFyaWFibGVzIGF0IGJlZ2lubmluZyBvZiBibG9jayBhbmQgbWFrZSBnY2MtMi45NSBoYXBweQotCSAgKGZpeGVzICMgMTY3NDgyLCBwYXRjaCBieSBHZXJnZWx5IE5hZ3kpLgotCSAgCi0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuaDoKLQkgIE1vdmUgc29tZSBpbmNsdWRlcyBpbnRvIHRoZSBoZWFkZXIsIHNvIHRoYXQgc3RydWN0IHNvY2thZGRyX2luIGlzCi0JICBkZWZpbmVkIHdoZW4gaXQgc2hvdWxkIGJlIGRlZmluZWQgb24gRnJlZUJTRCBhcyB3ZWxsIChmaXhlcwotCSAgIzE2NzQ4MykuCi0JICAKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6IChnc3RfdGNwc2VydmVyc3JjX2luaXRfcmVjZWl2ZSk6Ci0JICBEb24ndCBwYXNzIHVuaW5pdGlhbGlzZWQgdmFsdWVzIHRvIHNldHNvY2tvcHQoKSBoZXJlIGVpdGhlci4KLQotMjAwNS0wMi0xNyAgTHVjYSBPZ25pYmVuZSAgPGx1b2duaSBhdCB0aW4gZG90IGl0PgotCi0JUmV2aWV3ZWQgYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6IChnc3RfdGNwc2VydmVyc2lua19pbml0X3NlbmQpOgotCSAgRG9uJ3QgcGFzcyB1bmluaXRpYWxpc2VkIHZhbHVlcyB0byBzZXRzb2Nrb3B0KCkuIChmaXhlcyAjMTY3NzA0KQotCi0yMDA1LTAyLTE2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoYWRkX3NpbmspOgotCSAgSW52ZXJ0IGJpbl9hZGQvbGluayBvcmRlciB0byB3b3JrYXJvdW5kIGRlYWRsb2NrIGluIG9wdC4KLQotMjAwNS0wMi0xNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21vZHBsdWcvZ3N0bW9kcGx1Zy5jYzoKLQkgIEFkZCBtaXNzaW5nIGJyZWFrIGNhdXNpbmcgcG9zaXRpb24gcXVlcmllcyB0byBmYWlsLgotCi0yMDA1LTAyLTE1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX3BhZF9wb3B1bGF0ZSk6Ci0JICBHcmFucG9zIGNhbiBhcHBhcmVudGx5IGJlIC0xLCB3aGljaCBzY3Jld3MgdXAgY2FsY3VsYXRpb25zLi4uCi0KLTIwMDUtMDItMTYgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jaGFpbiksCi0JKGdzdF94aW1hZ2VzaW5rX3NlbmRfcGVuZGluZ19uYXZpZ2F0aW9uKSwKLQkoZ3N0X3hpbWFnZXNpbmtfbmF2aWdhdGlvbl9zZW5kX2V2ZW50KSwgKGdzdF94aW1hZ2VzaW5rX2ZpbmFsaXplKSwKLQkoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hhaW4pLAotCShnc3RfeHZpbWFnZXNpbmtfc2VuZF9wZW5kaW5nX25hdmlnYXRpb24pLAotCShnc3RfeHZpbWFnZXNpbmtfbmF2aWdhdGlvbl9zZW5kX2V2ZW50KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2ZpbmFsaXplKSwgKGdzdF94dmltYWdlc2lua19pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmg6Ci0JICBVc2UgYSBtdXRleCBwcm90ZWN0ZWQgbGlzdCB0byBtYXJzaGFsIG5hdmlnYXRpb24KLQkgIGV2ZW50cyBpbnRvIHRoZSBzdHJlYW0gdGhyZWFkIGZyb20gd2hpY2hldmVyIHRocmVhZAotCSAgc2VuZHMgdGhlbS4KLQotMjAwNS0wMi0xNSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3Qvc3BlZWQvZGVtby1tcDMuYzogKHRpbWVfdGlja19jYiksIChtYWluKToKLQkgIERpc3BsYXkgY3VycmVudCBwb3NpdGlvbiBhbmQgdHJhY2sgbGVuZ3RoOyBtaXNjLiBjbGVhbi11cHMuCi0JICAKLQkqIGdzdC9zcGVlZC9nc3RzcGVlZC5jOiAoc3BlZWRfZ2V0X3F1ZXJ5X3R5cGVzKSwgKHNwZWVkX3NyY19xdWVyeSksCi0JKHNwZWVkX2luaXQpLCAoc3BlZWRfY2hhaW4pOgotCSAgQWRkIHF1ZXJ5IGZ1bmN0aW9uLCBzbyB0aGF0IHRoZSBzdHJlYW0gbGVuZ3RoIGFuZCBjdXJyZW50IHBvc2l0aW9uCi0JICBnZXQgYWRqdXN0ZWQgd2hlbiBxdWVyaWVkIChub3RlIHRoYXQgY3VycmVudCBwb3NpdGlvbiBxdWVyaWVzIG1heQotCSAgc3RpbGwgYmUgd3JvbmcgaWYgdGhlIGF1ZGlvIHNpbmsgcmV0dXJucyB2YWx1ZXMgYmFzZWQgb24gYnVmZmVyCi0JICB0aW1lc3RhbXBzIGluc3RlYWQgb2YgcGFzc2luZyBvbiB0aGUgcXVlcnkpLgotCi0yMDA1LTAyLTEzICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9saW5rKSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfY2hhbm5lbHMpOgotCSAgY3JlYXRlIGNoYW5uZWwgY29udmVyc2lvbiBtYXRyaXggd2hlbiBsaW5raW5nCi0JKiBnc3QvYXVkaW9jb252ZXJ0Ly5jdnNpZ25vcmU6Ci0JKiBnc3QvYXVkaW9jb252ZXJ0L01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvY29udmVydC9jaGFubmVsbWl4dGVzdC5jOiAobWFpbik6Ci0JICBhZGQgKHVnbHkpIHRlc3QgdGhhdCBlbnN1cmVzIHN0ZXJlbyA8PT4gbW9ubyBjb252ZXJzaW9uIHdvcmtzCi0JICBjb3JyZWN0bHkKLQotMjAwNS0wMi0xMyAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGNoYW5uZWxtaXguaDoKLQkgIGluY2x1ZGUgbWlzc2luZyBoZWFkZXIgZmlsZQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RjaGFubmVsbWl4LmM6Ci0JKGdzdF9hdWRpb19jb252ZXJ0X2ZpbGxfY29tcGF0aWJsZSk6Ci0JICB1c2Ugc2FtZSBzaWduIGZvciBib3RoIGNoYW5uZWxzIHdoZW4gY29udmVydGluZyB0by9mcm9tIGNvbXBhdGlibGUKLQkgIGNoYW5uZWwuIFByZXZpb3VzbHkgdXNlZCBkaWZmZXJlbnQgc2lnbnMgbWFkZSB0aGUgc2lnbmFscyBjYW5jZWwKLQkgIGVhY2ggb3RoZXIgb3V0IGFuZCBhcHBlYXIgbGlrZSBzaWxlbmNlLiAoZml4ZXMgIzE2NzI2OSkKLQotMjAwNS0wMi0xMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9hdmNvZGVjLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2RlY21hcC5jOgotCShnc3RfZmZtcGVnX3BpeGZtdF90b19jYXBzKSwgKGdzdF9mZm1wZWdfY2Fwc190b19waXhmbXQpLAotCShnc3RfZmZtcGVnY3NwX2F2cGljdHVyZV9maWxsKToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2ltZ2NvbnZlcnQuYzoKLQkgIENvbnZlcnQgdG8gYW5kIGZyb20gWVYxMiAoZml4ZXMgIzE1NjM3OSkuCi0KLTIwMDUtMDItMTIgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194d2luZG93X25ldyksCi0JKGdzdF94aW1hZ2VzaW5rX3NpbmtfbGluayksIChnc3RfeGltYWdlc2lua19jaGFuZ2Vfc3RhdGUpLAotCShnc3RfeGltYWdlc2lua19jaGFpbiksIChnc3RfeGltYWdlc2lua19zZXRfeHdpbmRvd19pZCksCi0JKGdzdF94aW1hZ2VzaW5rX2V4cG9zZSksIChnc3RfeGltYWdlc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfeGltYWdlc2lua19maW5hbGl6ZSksIChnc3RfeGltYWdlc2lua19pbml0KTogUHJvdGVjdCBpbnRlcmZhY2UKLSAgICAgICAgbWV0aG9kcyBmcm9tIGNoYWluIGFuZCBuZWdvdGlhdGlvbiBhbmQgdmljZSB2ZXJzYSAoRml4ZXMgIzE2NjE0MikuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDogQWRkIHN0cmVhbV9sb2NrLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19zaW5rX2xpbmspLAotCShnc3RfeHZpbWFnZXNpbmtfY2hhaW4pLCAoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9mcmVlKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyksIChnc3RfeHZpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLAotCShnc3RfeHZpbWFnZXNpbmtfZXhwb3NlKTogQ2hlY2sgZm9yIHhjb250ZXh0IGJlZm9yZSB0cnlpbmcgdG8gbGluay4KLQotMjAwNS0wMi0xMiAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvZHZkbmF2L2R2ZG5hdnNyYy5jOiAoZHZkbmF2c3JjX29wZW4pOgotCSAgRG9uJ3Qgc2VuZCAiSGV5ISBZb3UgZ2F2ZSBtZSBhIE5VTEwgcG9pbnRlciB5b3UgbmF1Z2h0eSBwZXJzb24iIGFzCi0JICBlcnJvciBtZXNzYWdlIHdoZW4gd2UgY2FuJ3Qgb3BlbiB0aGUgRFZEIGRldmljZSAod2hlbiBkdmRuYXZfb3BlbigpCi0JICBmYWlscywgc3JjLT5kdmRuYXYgaXMgTlVMTCwgc28gZHZkbmF2X2Vycl90b19zdHJpbmcoKSB3aWxsIHJldHVybgotCSAgdGhlIGFib3ZlKS4gU2VuZCBzb21ldGhpbmcgbW9yZSB1c2VmdWwgaW5zdGVhZCAoZml4ZXMgIzE2NzExNykuCi0KLTIwMDUtMDItMTEgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194dmltYWdlX3B1dCksCi0JKGdzdF94dmltYWdlc2lua19zaW5rX2xpbmspLCAoZ3N0X3h2aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF94dmltYWdlc2lua19jaGFpbiksIChnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2ZyZWUpLAotCShnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKSwgKGdzdF94dmltYWdlc2lua19zZXRfeHdpbmRvd19pZCksCi0JKGdzdF94dmltYWdlc2lua19leHBvc2UpLCAoZ3N0X3h2aW1hZ2VzaW5rX3NldF9wcm9wZXJ0eSksCi0JKGdzdF94dmltYWdlc2lua19maW5hbGl6ZSksIChnc3RfeHZpbWFnZXNpbmtfaW5pdCk6IFByb3RlY3QgaW50ZXJmYWNlCi0JbWV0aG9kcyBmcm9tIGNoYWluIGFuZCBuZWdvdGlhdGlvbiBhbmQgdmljZSB2ZXJzYSAoRml4ZXMgIzE2NjE0MikuCi0JRml4IGEgcG9zc2libGUgYnVnIG9mIGltYWdlcyBpbiB0aGUgYnVmZmVyIHBvb2wgYmVpbmcgZGlzY2FyZGVkIGJlY2F1c2UKLQl3ZSBhcmUgbG9va2luZyBhdCB0aGUgd3JvbmcgZ2VvbWV0cnkuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5oOiBBZGQgc3RyZWFtX2xvY2suCi0KLTIwMDUtMDItMTEgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChjcm9wX2J1ZmZlcik6IENoYW5nZSB1aW50IHRvCi0JdW5zaWduZWQgaW50LiAoZml4ZXMgIzE2NzEyOCkKLQotMjAwNS0wMi0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbGlicmZiL01ha2VmaWxlLmFtOiBUZXN0aW5nIHN0dWZmIGJlZm9yZSBjb21taXR0aW5nIGlzCi0JICBmb3Igd2ltcHMuLi4gYW5kIHBlb3BsZSB3aXRoIGZhc3QgbWFjaGluZXMuICBGaXggc3R1cGlkCi0JICBtaXN0YWtlLgotCi0yMDA1LTAyLTExICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogUHVsbCBpbiBsaWJyZmIgZnJvbSBteSBDVlMgdHJlZSwgYmVjYXVzZSBpdCBpcwotCSAgdG9vIHNtYWxsIGFuZCBhbm5veWluZyB0byBiZSBzZXBhcmF0ZS4gIE1vdmUgcmZic3JjIHBsdWdpbgotCSAgdG8gZ3N0Ly4KLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJyZmIvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGlicmZiL2dzdHJmYnNyYy5jOgotCSogZ3N0L2xpYnJmYi9NYWtlZmlsZS5hbToKLQkqIGdzdC9saWJyZmIvZ3N0cmZic3JjLmM6Ci0JKiBnc3QvbGlicmZiL3JmYi5jOgotCSogZ3N0L2xpYnJmYi9yZmIuaDoKLQkqIGdzdC9saWJyZmIvcmZiYnVmZmVyLmM6Ci0JKiBnc3QvbGlicmZiL3JmYmJ1ZmZlci5oOgotCSogZ3N0L2xpYnJmYi9yZmJieXRlc3RyZWFtLmM6Ci0JKiBnc3QvbGlicmZiL3JmYmJ5dGVzdHJlYW0uaDoKLQkqIGdzdC9saWJyZmIvcmZiY29udGV4dC5oOgotCSogZ3N0L2xpYnJmYi9yZmJkZWNvZGVyLmM6Ci0JKiBnc3QvbGlicmZiL3JmYmRlY29kZXIuaDoKLQkqIGdzdC9saWJyZmIvcmZidXRpbC5oOgotCi0yMDA1LTAyLTEwICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGdzdC9zcGVlZC9NYWtlZmlsZS5hbToKLQkqIGdzdC9zcGVlZC9kZW1vLW1wMy5jOiAobWFpbik6Ci0JKiBnc3Qvc3BlZWQvZmlsdGVyLmZ1bmM6Ci0JKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuYzogKHNwZWVkX2xpbmspLCAoc3BlZWRfcGFyc2VfY2FwcyksCi0JKHNwZWVkX2NsYXNzX2luaXQpLCAoc3BlZWRfaW5pdCksIChzcGVlZF9jaGFpbl9pbnQxNiksCi0JKHNwZWVkX2NoYWluX2Zsb2F0MzIpLCAoc3BlZWRfY2hhaW4pLCAoc3BlZWRfc2V0X3Byb3BlcnR5KSwKLQkoc3BlZWRfZ2V0X3Byb3BlcnR5KSwgKHNwZWVkX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuaDoKLQkgIEZpeCBzcGVlZCBlbGVtZW50IGFuZCBtYWtlIGl0IGNoYWluLWJhc2VkIChmaXhlcyAjMTU2NDY3KSwKLQkgIGFuZCBtYWtlIGl0IGhhbmRsZSBtb3JlIHRoYW4gb25lIGNoYW5uZWwuCi0KLTIwMDUtMDItMTAgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L2R0cy9nc3RkdHNkZWMuYzogKGdzdF9kdHNkZWNfaW5pdCksIChnc3RfZHRzZGVjX2NoYW5uZWxzKSwKLQkoZ3N0X2R0c2RlY19oYW5kbGVfZXZlbnQpLCAoZ3N0X2R0c2RlY19oYW5kbGVfZnJhbWUpLAotCShnc3RfZHRzZGVjX2NoYWluKSwgKGdzdF9kdHNkZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9kdHMvZ3N0ZHRzZGVjLmg6Ci0gICAgICAgICAgRG9uJ3QgY2xvYmJlciB0aGUgc3RhY2sgY29uc3RydWN0aW5nIHRoZSBjaGFubmVscyBhcnJheS4KLQkgIE1ha2UgdGhlIGVsZW1lbnQgY2hhaW4tYmFzZWQuIERUUyB0cmFja3MgY2FuIG5vdyBiZSBwbGF5ZWQuCi0JICAKLTIwMDUtMDItMDkgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL211bHRpY2hhbm5lbC5oOgotCSogZ3N0LWxpYnMvZ3N0L2djb25mL2djb25mLmg6Ci0JKiBnc3QtbGlicy9nc3QvaWRjdC9pZGN0Lmg6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXByaXYuaDoKLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuaDoKLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9wcml2YXRlLmg6Ci0JKiBnc3QtbGlicy9nc3QvcmVzYW1wbGUvcmVzYW1wbGUuaDoKLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtaWRzLmg6Ci0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8uaDoKLQkqIGdzdC1saWJzL2dzdC92aWRlby92aWRlb3NpbmsuaDoKLQkgIEFkZCBHX0JFR0lOX0RFQ0xTIGFuZCBHX0VORF9ERUNMUyBhcm91bmQgaGVhZGVycyB3aGVyZQotCSAgbWlzc2luZywgc28gdGhhdCB0aGV5IHdvcmsgd2hlbiBpbmNsdWRlZCBmcm9tIEMrKyBjb2RlLgotCi0yMDA1LTAyLTA5ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHRlc3RzdWl0ZS9nc3QtbGludDogQ2hlY2sgZm9yIG5vbi1zdGF0aWNhbGx5IHNjb3BlZAotCSAgcGFyZW50X2NsYXNzIHZhcmlhYmxlcy4gIFRoaXMgd29uJ3QgYmUgYSBwcm9ibGVtIG9uY2UKLQkgIHBsdWdpbnMgYXJlIGxvYWRlZCB3aXRoIFJUTERfTE9DQUwuCi0KLTIwMDUtMDItMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tcGxleC9nc3RtcGxleGliaXRzdHJlYW0uY2M6Ci0JICBnY2MgbWFkbmVzcy4KLQotMjAwNS0wMi0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ21wYXJzZS5jOgotCSogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6Ci0JICBEaWUsIHRob3UgZmF1bHR5IHN5bWJvbCBwb2xsdXRvcnMgKG5vbi1zdGF0aWMgcGFyZW50X2NsYXNzKS4KLQotMjAwNS0wMi0wOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L21wbGV4L2dzdG1wbGV4aWJpdHN0cmVhbS5jYzoKLQkgIEZpeCBldmVudCBoYW5kbGluZyAoIzE2NTUyNSkuCi0KLTIwMDUtMDItMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6Ci0JKiBnc3QvbW9kcGx1Zy9nc3Rtb2RwbHVnLmNjOgotCSAgQWRkIG1pc3NpbmcgZW5kaWFubmVzcyB0byB0ZW1wbGF0ZSAoZml4ZXMgIzE2NTUwOSkuCi0KLTIwMDUtMDItMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9oYW5kbGVfZGF0YSk6Ci0JICBGaXggd3Jvbmcgb3JkZXIgb2YgcmVhZGluZyBvZiBvcHRpb25hbCBieXRlcyAoIzE2NTI5MCkuCi0KLTIwMDUtMDItMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2NoZWNrX2V2ZW50KToKLQkgIEltcGxlbWVudCBGSUxMRVIgZXZlbnQgYXdhcmVuZXNzLgotCi0yMDA1LTAyLTA4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhLmM6IChjZHBhcmFub2lhX2NvbnZlcnQpOgotCSAgRml4IHRyYWNrIGNhbGN1bGF0aW9ucyAoIzE2NjIwOCkuCi0KLTIwMDUtMDItMDggIEdlcmdlbHkgTmFneSAgPGFsZ2Vybm9uQGJvbmVodW50ZXIucnVsZXoub3JnPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOiAoZ3N0X3BuZ2RlY19pbml0KSwgKGdzdF9wbmdkZWNfY2hhaW4pOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzoKLQkgIEZpeCBieXRlLW9yZGVyLCB1c2UgcHJvcGVyIGZpeGVkIGNhcHMuIEZpeGVzICMxNjQxOTcuCi0KLTIwMDUtMDItMDggIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSAgQWRkIGR2ZGxwY21kZWMgCi0KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOiAoZ3N0X21wZWcyZGVjX3Jlc2V0KSwKLQkoZnJlZV9hbGxfYnVmZmVycyksIChnc3RfbXBlZzJkZWNfYWxsb2NfYnVmZmVyKToKLQkgIERvbid0IHB1c2ggYnVmZmVycyBpZiB0aGUgc3JjIHBhZCBpc24ndCBuZWdvdGlhdGVkIHlldC4KLQkgIAotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzoKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfYnVmZmVyX3RvX2RlZmF1bHRfZm9ybWF0KSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfYnVmZmVyX2Zyb21fZGVmYXVsdF9mb3JtYXQpOgotCSAgQWRkIHN1cHBvcnQgZm9yIDI0LWJpdCB3aWR0aC4KLQotCSogZ3N0L2R2ZGxwY21kZWMvLmN2c2lnbm9yZToKLQkqIGdzdC9kdmRscGNtZGVjL01ha2VmaWxlLmFtOgotCSogZ3N0L2R2ZGxwY21kZWMvZ3N0ZHZkbHBjbWRlYy5jOiAoZ3N0X2R2ZGxwY21kZWNfZ2V0X3R5cGUpLAotCShnc3RfZHZkbHBjbWRlY19iYXNlX2luaXQpLCAoZ3N0X2R2ZGxwY21kZWNfY2xhc3NfaW5pdCksCi0JKGdzdF9kdmRscGNtX3Jlc2V0KSwgKGdzdF9kdmRscGNtZGVjX2luaXQpLCAoZ3N0X2R2ZGxwY21kZWNfbGluayksCi0JKGdzdF9kdmRscGNtZGVjX2NoYWluKSwgKGdzdF9kdmRscGNtZGVjX2NoYW5nZV9zdGF0ZSksCi0JKHBsdWdpbl9pbml0KToKLQkqIGdzdC9kdmRscGNtZGVjL2dzdGR2ZGxwY21kZWMuaDoKLQkgIE5ldyBkZWNvZGVyIGZvciByZWFycmFuZ2luZyBEVkQgTFBDTSBpbnRvIG91ciBhdWRpby94LXJhdy1pbnQKLQkgIGZvcm1hdC4gTmVlZHMgc3VwcG9ydCBmb3IgdGhlIGNoYW5uZWxzIG1hcHMgaWYgc29tZW9uZSBjYW4gZmluZCAKLQkgIGEgRFZEIExQQ00gdHJhY2sgd2l0aCA+IDIgY2hhbm5lbHMuCi0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6IChnc3RfZHZkX2RlbXV4X2hhbmRsZV9kdmRfZXZlbnQpLAotCShnc3RfZHZkX2RlbXV4X3NlbmRfZGlzY29udCksIChnc3RfZHZkX2RlbXV4X2hhbmRsZV9kaXNjb250KSwKLQkoZ3N0X2R2ZF9kZW11eF9nZXRfYXVkaW9fc3RyZWFtKSwgKGdzdF9kdmRfZGVtdXhfcHJvY2Vzc19wcml2YXRlKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4Lmg6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X3NlbmRfZGlzY29udCksCi0JKGdzdF9tcGVnX2RlbXV4X25ld19vdXRwdXRfcGFkKSwgKGdzdF9tcGVnX2RlbXV4X2luaXRfc3RyZWFtKSwKLQkoZ3N0X21wZWdfZGVtdXhfc2VuZF9zdWJidWZmZXIpLCAoZ3N0X21wZWdfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSk6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguaDoKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfcmVzZXQpLAotCShnc3RfbXBlZ19wYXJzZV9wYXJzZV9wYWNraGVhZCksIChnc3RfbXBlZ19wYXJzZV9sb29wKSwKLQkoZ3N0X21wZWdfcGFyc2VfZ2V0X3JhdGUpLCAoZ3N0X21wZWdfcGFyc2VfY29udmVydF9zcmMpLAotCShnc3RfbXBlZ19wYXJzZV9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkoZ3N0X21wZWdfcGFyc2VfaGFuZGxlX3NyY19ldmVudCk6Ci0JICBVc2UgYXVkaW8veC1kdmQtbHBjbSBmb3IgTFBDTSBvdXRwdXQuCi0JICBBZGQgRFRTIG91dHB1dC4KLQotMjAwNS0wMi0wOCAgR2VyZ2VseSBOYWd5ICA8YWxnZXJub25AYm9uZWh1bnRlci5ydWxlei5vcmc+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmM6IChnc3RfYWxwaGFfY29sb3Jfc2lua19saW5rKSwKLQkodHJhbnNmb3JtX3JnYiksICh0cmFuc2Zvcm1fYmdyKSwgKGdzdF9hbHBoYV9jb2xvcl9jaGFpbik6Ci0JICBBZGQgQkdSQSBoYW5kbGluZyAoIzE2NTczNikuCi0KLTIwMDUtMDItMDggIEZyYW5jaXMgTGFib250ZSAgPGZyYW5jaXNfbGFib250ZUBob3RtYWlsLmNvbT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoYWxhd2RlY19saW5rKToKLQkqIGdzdC9sYXcvYWxhdy1lbmNvZGUuYzogKGFsYXdlbmNfbGluayk6Ci0JKiBnc3QvbGF3L211bGF3LWRlY29kZS5jOiAobXVsYXdkZWNfbGluayk6Ci0JKiBnc3QvbGF3L211bGF3LWVuY29kZS5jOiAobXVsYXdlbmNfbGluayk6Ci0JICBGaXggY2FwcyBtZW1sZWFrcyAoIzE2NjYwMCkuCi0KLTIwMDUtMDItMDggIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZXh0L3Rhcmtpbi9tZW0uaDoKLQkqIGV4dC90YXJraW4vd2F2ZWxldC5oOgotCSogZXh0L3Rhcmtpbi95dXYuaDoKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2F2Y29kZWMuaDoKLQkgIEluY2x1ZGUgIl9zdGRpbnQuaCIgaW5zdGVhZCBvZiA8c3RkaW50Lmg+LiBGaXhlcyBidWlsZCBvbgotCSAgc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgc3RkaW50LmgsIGxpa2UgU29sYXJpczkgKGZpeGVzICMxNjY2MzEpLgotCi0yMDA1LTAyLTA1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3h3aW5kb3dfY2xlYXIpLAotCShnc3RfeHZpbWFnZXNpbmtfY2hhbmdlX3N0YXRlKToKLQkgIENsZWFyIHdpbmRvdyBvbiBQQVVTRUQtPlJFQURZIGluc3RlYWQgb2YgUkVBRFktPlBBVVNFRC4gU3RvcAotCSAgWHYgdmlkZW8gKGFuZCB0aGVyZWJ5IHJlZ2VuZXJhdGUgWHYgY29sb3Vya2V5KSBpbiBjbGVhcigpIHNvCi0JICB0aGF0IFBMQVkgLT4gUkVBRFkgLT4gUExBWSB3b3JrcyAoZml4ZXMgIzE2MjUwNCkuCi0KLTIwMDUtMDItMDUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19nZXRjYXBzKToKLQkgIFN3aXRjaCB0byBsaXN0IGluc3RlYWQgb2YgcmFuZ2UsIHNpbmNlIE1KUEVHLWRldmljZXMgcmVhbGx5IGp1c3QKLQkgIHN1cHBvcnQgZGVjaW1hdGlvbnMsIG5vdCBhbnkgc2l6ZS4KLQotMjAwNS0wMi0wNSAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChnc3RfbXBlZzJkZWNfb3Blbl9kZWNvZGVyKSwKLQkoZ3N0X21wZWcyZGVjX3Jlc2V0KSwgKGZyZWVfYWxsX2J1ZmZlcnMpLAotCShnc3RfbXBlZzJkZWNfYWxsb2NfYnVmZmVyKSwgKGhhbmRsZV9zZXF1ZW5jZSk6Ci0JKiBleHQvbXBlZzJkZWMvZ3N0bXBlZzJkZWMuaDoKLQkgIFRoZSBsaWJtcGVnMiB1c2VyLWFsbG9jYXRlZCBidWZmZXIgbWFuYWdlbWVudCBpcyBhd2t3YXJkLCAKLQkgIHRvIHNheSB0aGUgbGVhc3QuIEhvcGVmdWxseSB0aGlzIGZpeGVzIHRoaW5ncy4KLQotMjAwNS0wMi0wNCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9idWZmZXJmcmFtZXNjb252ZXJ0LmMKLQkoYnVmZmVyX2ZyYW1lc19jb252ZXJ0X2ZpeGF0ZSk6IE5ldyBmdW5jdGlvbiwgZml4YXRlcyB0byAyNTYKLQlmcmFtZXMgcGVyIGJ1ZmZlciBieSBkZWZhdWx0LiAoTXVjaCBiZXR0ZXIgdGhhbiAxLikKLQkoYnVmZmVyX2ZyYW1lc19jb252ZXJ0X2luaXQpOiBTZXQgdGhlIGZpeGF0ZSBmdW5jdGlvbiBmb3IgYm90aCBzcmMKLQlhbmQgc2luayBwYWQuCi0JKGJ1ZmZlcl9mcmFtZXNfY29udmVydF9saW5rKTogQWZ0ZXIgc3VjY2VzcyBzZXR0aW5nIG5vbmZpeGVkIGNhcHMsCi0JZ2V0IHRoZSBuZWdvdGlhdGVkIGNhcHMgc28gd2UgY2FuIGtub3cgaG93IG1hbnkgYnVmZmVyLWZyYW1lcyBpdAotCXdpbGwgYmUuIE5vIGlkZWEgaG93IHRoaXMgd29ya2VkIGF0IGFsbCBiZWZvcmUuCi0KLTIwMDUtMDItMDUgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChnc3RfbXBlZzJkZWNfaW5pdCksCi0JKGdzdF9tcGVnMmRlY19jbG9zZV9kZWNvZGVyKSwgKHB1dF9idWZmZXIpLCAoY2hlY2tfYnVmZmVyKSwKLQkoZnJlZV9idWZmZXIpLCAoZnJlZV9hbGxfYnVmZmVycyksIChnc3RfbXBlZzJkZWNfYWxsb2NfYnVmZmVyKSwKLQkoaGFuZGxlX3NlcXVlbmNlKSwgKGhhbmRsZV9waWN0dXJlKToKLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5oOgotCSAgUmVhcnJhbmdlIGJ1ZmZlciB0cmFja2luZyBhbmQgcmVmY291bnRpbmcgYW5kIHJlZmFjdG9yCi0JICBhIGxpdHRsZSBmb3IgcmVhZGFiaWxpdHkuIAotCi0yMDA1LTAyLTA0ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBzeXMvdjRsL2dzdHY0bC5jOiAocGx1Z2luX2luaXQpOgotCSogc3lzL3Y0bC9nc3R2NGxqcGVnc3JjLmM6IChnc3RfdjRsanBlZ3NyY19nZXRfdHlwZSksCi0JKGdzdF92NGxqcGVnc3JjX2Jhc2VfaW5pdCksIChnc3RfdjRsanBlZ3NyY19jbGFzc19pbml0KSwKLQkoZ3N0X3Y0bGpwZWdzcmNfaW5pdCksIChnc3RfdjRsanBlZ3NyY19zcmNfbGluayksCi0JKGdzdF92NGxqcGVnc3JjX2dldGNhcHMpLCAoZ3N0X3Y0bGpwZWdzcmNfZ2V0KToKLQkqIHN5cy92NGwvZ3N0djRsanBlZ3NyYy5oOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfb3BlbiksIChnc3RfdjRsc3JjX3NyY19saW5rKToKLQkqIHN5cy92NGwvdjRsX2NhbGxzLmg6Ci0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5jOiAoZ3N0X3Y0bHNyY19wYWxldHRlX25hbWUpLAotCShnc3RfdjRsc3JjX2dldF9mcHMpOgotCSogc3lzL3Y0bC92NGxzcmNfY2FsbHMuaDoKLQkgIEFkZCBuZXcgdjRsanBlZ3NyYyBmb3IgaGFuZGxpbmcgdGhlIG92NTF4IGhhY2t5ICJJJ2xsIGdpdmUKLQkgIHlvdSBqcGVnIGluc2lkZSByZ2IgZnJhbWVzIiBkcml2ZXIuCi0JICBEb24ndCBlcnJvciBpbiB0aGUgdjRsc3JjIGxpbmsgZnVuY3Rpb24sIGp1c3QgcmV0dXJuIAotCSAgUkVGVVNFRC4KLQotMjAwNS0wMi0wMyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3FjYW0vZ3N0cWNhbXNyYy5jOiAoZ3N0X3FjYW1zcmNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3FjYW1zcmNfb3Blbik6Ci0JICBVc2UgR1NUX0VMRU1FTlRfRVJST1IsIG5vdCBnX3dhcm5pbmcsIGlmIG9wZW4gZmFpbGVkLgotCi0yMDA1LTAyLTAyICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgQ2hhbmdlIGNhcHMgb24gTUpQRUctQiBzbyBpdCBkb2Vzbid0IGludGVyZmVyZSB3aXRoIE1KUEVHL0pQRUcuCi0KLTIwMDUtMDItMDIgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOiAoZ3N0X2R2MTM5NHNyY19jaGFuZ2Vfc3RhdGUpOgotCSAgUmVzZXQgbmVnb3RpYXRlZCBzdGF0ZSBvbiBQQVVTRUQtPlJFQURZLgotCi0yMDA1LTAyLTAyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogUHV0IERFRkFVTFRfQVVESU9TSU5LIGluIGNvbmZpZy5oIGFuZCB1c2UKLQl3aGVyZWV2ZXIgcG9zc2libGUuICAoRml4ZXMgIzE2NTk5NykKLQkqIGV4YW1wbGVzL2NhcHNmaWx0ZXIvY2Fwc2ZpbHRlcjEuYzogKG1haW4pOgotCSogZXhhbXBsZXMvZHlucGFyYW1zL2ZpbHRlci5jOiAoY3JlYXRlX3VpKToKLQkqIGV4YW1wbGVzL3NlZWtpbmcvY2RwYXJhbm9pYS5jOiAoZ2V0X3RyYWNrX2luZm8pLCAobWFpbik6Ci0JKiBleGFtcGxlcy9zZWVraW5nL2NoYWluZWQuYzogKG1haW4pOgotCSogZXhhbXBsZXMvc2Vla2luZy9zZWVrLmM6IChtYWtlX21vZF9waXBlbGluZSksIChtYWtlX2R2X3BpcGVsaW5lKSwKLQkobWFrZV93YXZfcGlwZWxpbmUpLCAobWFrZV9mbGFjX3BpcGVsaW5lKSwgKG1ha2Vfc2lkX3BpcGVsaW5lKSwKLQkobWFrZV92b3JiaXNfcGlwZWxpbmUpLCAobWFrZV9tcDNfcGlwZWxpbmUpLCAobWFrZV9hdmlfcGlwZWxpbmUpLAotCShtYWtlX21wZWdfcGlwZWxpbmUpLCAobWFrZV9tcGVnbnRfcGlwZWxpbmUpOgotCSogZXhhbXBsZXMvc2Vla2luZy9zcGlkZXJfc2Vlay5jOiAobWFrZV9zcGlkZXJfcGlwZWxpbmUpOgotCSogZXhhbXBsZXMvc3dpdGNoL3N3aXRjaGVyLmM6IChtYWluKToKLQkqIGV4dC9kdi9kZW1vLXBsYXkuYzogKG1haW4pOgotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NoYWluKToKLQkqIGV4dC9zbW9vdGh3YXZlL2RlbW8tb3Nzc3JjLmM6IChtYWluKToKLQkqIGdzdC1saWJzL2dzdC9nY29uZi9nY29uZi5jOiAoZ3N0X2djb25mX3NldF9zdHJpbmcpLAotCShnc3RfZ2NvbmZfcmVuZGVyX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKSwKLQkoZ3N0X2djb25mX2dldF9kZWZhdWx0X2F1ZGlvX3NpbmspLAotCShnc3RfZ2NvbmZfZ2V0X2RlZmF1bHRfdmlkZW9fc2luayksCi0JKGdzdF9nY29uZl9nZXRfZGVmYXVsdF9hdWRpb19zcmMpLAotCShnc3RfZ2NvbmZfZ2V0X2RlZmF1bHRfdmlkZW9fc3JjKSwKLQkoZ3N0X2djb25mX2dldF9kZWZhdWx0X3Zpc3VhbGl6YXRpb25fZWxlbWVudCk6Ci0JKiBnc3QvbGV2ZWwvZGVtby5jOiAobWFpbik6Ci0JKiBnc3QvbGV2ZWwvcGxvdC5jOiAobWFpbik6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ2VuX3ZpZGVvX2VsZW1lbnQpLAotCShnZW5fYXVkaW9fZWxlbWVudCk6Ci0JKiBnc3QvcGxheWJhY2svdGVzdC5jOiAoZ2VuX3ZpZGVvX2VsZW1lbnQpLCAoZ2VuX2F1ZGlvX2VsZW1lbnQpOgotCSogZ3N0L3BsYXlvbmRlbWFuZC9kZW1vLW1wMy5jOiAoc2V0dXBfcGlwZWxpbmUpOgotCSogZ3N0L3NpbmUvZGVtby1kcGFyYW1zLmM6IChtYWluKToKLQkqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAobWFpbik6Ci0JKiBnc3Qvc3BlZWQvZGVtby1tcDMuYzogKG1haW4pOgotCSogZ3N0L3ZvbHVtZS9kZW1vLmM6IChtYWluKToKLQkqIHRlc3RzdWl0ZS9lbWJlZC9lbWJlZC5jOiAobWFpbik6Ci0KLTIwMDUtMDItMDIgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzaW5rLmM6IChnc3RfdGNwY2xpZW50c2lua19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcGNsaWVudHNpbmtfZmluYWxpemUpOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfY2xhc3NfaW5pdCksCi0JKGdzdF90Y3BjbGllbnRzcmNfZmluYWxpemUpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6IChnc3RfdGNwc2VydmVyc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfaW5pdCksIChnc3RfdGNwc2VydmVyc2lua19maW5hbGl6ZSk6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNyYy5jOiAoZ3N0X3RjcHNlcnZlcnNyY19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcHNlcnZlcnNyY19pbml0KSwgKGdzdF90Y3BzZXJ2ZXJzcmNfZmluYWxpemUpOgotCSAgRG9uJ3QgbGVhayB0aGUgaG9zdG5hbWUgd2hlbiBzaHV0dGluZyBkb3duLgotCSAgSW4gdGNwc2VydmVyc3JjLCB0YWtlIGEgY29weSBvZiB0aGUgZGVmYXVsdCBob3N0bmFtZS4KLQotMjAwNS0wMi0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6IChnc3RfZHYxMzk0c3JjX2lzb19yZWNlaXZlKToKLQkgIFNldCBjYXBzIHRvIHN5c3RlbXN0cmVhbT1UUlVFLgotCi0yMDA1LTAyLTAxICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06Ci0JICBGaXggbW9yZSBPU1ggYnVpbGRib3RzLgotCi0yMDA1LTAyLTAyICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOgotCSAgRG9uJ3Qgc2VuZCB0aGluZ3MgdG8gTlVMTCBQQURfUEVFUnMKLQotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6IChnc3RfZGVpbnRlcmxhY2VfY2hhaW4pOgotCSAgQ29weS1vbi13cml0ZSB0aGUgaW5jb21pbmcgYnVmZmVyLgotCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5oOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2Nsb2NrLmg6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3N5c2hlYWQpLAotCShub3JtYWxfc2VlayksIChnc3RfbXBlZ19kZW11eF9oYW5kbGVfc3JjX2V2ZW50KToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5oOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhY2tldGl6ZS5oOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhcnNlLmM6Ci0JKGdzdF9tcGVnX3BhcnNlX3VwZGF0ZV9zdHJlYW1pbmZvKSwgKGdzdF9tcGVnX3BhcnNlX3Jlc2V0KSwKLQkoZ3N0X21wZWdfcGFyc2VfaGFuZGxlX2Rpc2NvbnQpLCAoZ3N0X21wZWdfcGFyc2VfcGFyc2VfcGFja2hlYWQpLAotCShnc3RfbXBlZ19wYXJzZV9sb29wKSwgKGdzdF9tcGVnX3BhcnNlX2dldF9yYXRlKSwKLQkoZ3N0X21wZWdfcGFyc2VfY29udmVydF9zcmMpLCAoZ3N0X21wZWdfcGFyc2VfaGFuZGxlX3NyY19xdWVyeSksCi0JKGdzdF9tcGVnX3BhcnNlX2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X21wZWdfcGFyc2VfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5oOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0cmZjMjI1MGVuYy5oOgotICAgICAgICAgIFZhcmlvdXMgY2hhbmdlcyB0byB0aGUgd2F5IHRpbWUgaXMgY29tcHV0ZWQgdGhhdCBtYWtlIHNlZWtpbmcgYW5kCi0JICB0b3RhbCB0aW1lIGVzdGltYXRpb24gbXVjaCBiZXR0ZXIgaGVyZS4KLQkgIFVzZSBHX0JFR0lOL0VORF9ERUNMUyBpbnN0ZWFkIG9mIF9fY3BsdXNwbHVzCi0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6IChnc3RfdmlkZW9fY3JvcF9jaGFpbik6Ci0JICBVc2UgZ3N0X2J1ZmZlcl9zdGFtcCBpbnN0ZWFkIG9mIG9ubHkgY29weWluZyB0aGUgVElNRVNUQU1QCi0KLTIwMDUtMDItMDEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jOgotCSAgRml4IE9TWCBidWlsZGJvdC4KLQotMjAwNS0wMS0zMSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAodGhlb3JhX2J1ZmZlcl9mcm9tX3BhY2tldCksCi0JKHRoZW9yYV9lbmNfY2hhaW4pLCAodGhlb3JhX2VuY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKGdzdF92b3JiaXNlbmNfaW5pdCksCi0JKGdzdF92b3JiaXNlbmNfYnVmZmVyX2Zyb21fcGFja2V0KSwgKGdzdF92b3JiaXNlbmNfY2hhaW4pLAotCShnc3Rfdm9yYmlzZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5oOgotCSAgU2V0IGdyYW51bGVwb3MgYW5kIHRpbWVzdGFtcCBjb3JyZWN0bHkgZm9yIHN0cmVhbXMgbm90Ci0JICBzdGFydGluZyBhdCAwLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBpbml0aWFsIGRlbGF5LgotCi0yMDA1LTAxLTMxICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6Ci0JICBBZGQgYXVkaW8veC1kdHMgdG8gYXVkaW8gcGFkIHRlbXBsYXRlIGNhcHMKLQotMjAwNS0wMS0zMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvcG9seXAvcG9seXBzaW5rLmM6IChnc3RfcG9seXBzaW5rX2Jhc2VfaW5pdCksCi0JKGNyZWF0ZV9jb250ZXh0KSwgKGdzdF9wb2x5cHNpbmtfbGluayk6IEZpeCBzaWxseSBlbmRpYW5uZXNzCi0JYnVnLiAgQWRkIHNvbWUgZGVidWdnaW5nLiAgUmVtb3ZlIGZsb2F0IGZyb20gY2FwczsgaXQgZG9lc24ndAotCXdvcmsuICBBdHRlbXB0IHRvIGdldCByZW1vdGUgYXVkaW8gd29ya2luZy4KLQotMjAwNS0wMS0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF92aWRlb19jYXBzKToKLQkgIEFkZCAzSVYyIGZvdXJjYy4KLQotMjAwNS0wMS0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9hZGRfc3RyZWFtKSwgKHN3YXBfbGluZSksCi0JKGdzdF9hdmlfZGVtdXhfaW52ZXJ0KSwgKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KSwKLQkoZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSk6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBJbnZlcnQgRElCIGltYWdlcy4gRml4ZXMgIzEzMjM0MS4KLQotMjAwNS0wMS0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29sb3JzcGFjZS5jOgotCShnc3RfZmZtcGVnY3NwX2NoYWluKToKLQkgIEQnb2gsIHJlZmVyZW5jZSB0aGUgcGFsZXR0ZSBkYXRhLCBub3QgdGhlIHBhbGV0dGUgc3RydWN0dXJlLgotCSAgRml4ZXMgY29sb3IgZGlzdG9ydGlvbiBpbiAjMTMyMzQxLgotCi0yMDA1LTAxLTI5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9saW5rKToKLQkgIFBBUiBjYW4gYmUgbm9uLWZpeGVkIHdoZW4gbm90IHByb3ZpZGVkIGFzIGFyZ3VtZW50ICgjMTYyNjI2KS4KLQotMjAwNS0wMS0yOSAgRGF2aWQgTW9vcmUgIDxkY21AYWNtLm9yZz4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpOgotCSAgUmUtYXBwbHkgcGF0Y2ggZnJvbSAjMTQyMjcyIHRoYXQgYWxsb3dzIG5vbi1zZWVrYWJsZSBzb3VyY2VzLAotCSAgcmUtcHJvcG9zZWQgYnkgRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4uCi0KLTIwMDUtMDEtMjkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmM6IChnc3RfcnRwZ3NtZW5jX2luaXQpOgotCSAgVXNlIHRoZSBzcmMgdGVtcGxhdGUgZm9yIGNyZWF0aW5nIHRoZSBzcmMgcGFkICgjMTYyMzMwKS4KLQotMjAwNS0wMS0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L211c2VwYWNrL01ha2VmaWxlLmFtOgotCSogZXh0L211c2VwYWNrL2dzdG11c2VwYWNrZGVjLmM6IChnc3RfbXVzZXBhY2tkZWNfY2xhc3NfaW5pdCksCi0JKGdzdF9tdXNlcGFja2RlY19pbml0KSwgKGdzdF9tdXNlcGFja2RlY19kaXNwb3NlKSwKLQkoZ3N0X211c2VwYWNrZGVjX3NyY19xdWVyeSksIChnc3RfbXVzZXBhY2tkZWNfc3JjX2NvbnZlcnQpLAotCShnc3RfbXVzZXBhY2tfc3RyZWFtX2luaXQpLCAoZ3N0X211c2VwYWNrZGVjX2xvb3ApLAotCShnc3RfbXVzZXBhY2tkZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja2RlYy5jcHA6Ci0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tkZWMuaDoKLQkqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja3JlYWRlci5jOiAoZ3N0X211c2VwYWNrX3JlYWRlcl9wZWVrKSwKLQkoZ3N0X211c2VwYWNrX3JlYWRlcl9yZWFkKSwgKGdzdF9tdXNlcGFja19yZWFkZXJfc2VlayksCi0JKGdzdF9tdXNlcGFja19yZWFkZXJfdGVsbCksIChnc3RfbXVzZXBhY2tfcmVhZGVyX2dldF9zaXplKSwKLQkoZ3N0X211c2VwYWNrX3JlYWRlcl9jYW5zZWVrKSwgKGdzdF9tdXNlcGFja19pbml0X3JlYWRlcik6Ci0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tyZWFkZXIuY3BwOgotCSogZXh0L211c2VwYWNrL2dzdG11c2VwYWNrcmVhZGVyLmg6Ci0JICBVcGRhdGUgdG8gMS4xIEFQSSAoIzE2NTQ0NikuCi0KLTIwMDUtMDEtMjggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkgIFVuYnJlYWsgYnVpbGRib3QuCi0KLTIwMDUtMDEtMjggIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiBDaGFuZ2UgdGhlIHBpeGVsIGFzcGVjdCByYXRpbyBvZiBkdmRlYyBvdXRwdXQKLQl0byByZWZsZWN0IGEgZGlmZmVyZW50IGR1YmlvdXMgaW50ZXJuZXQgc291cmNlLiBBZGQgYSByZWZlcmVuY2UKLQlhbmQgc29tZSBjb21tZW50YXJ5LgotCi0yMDA1LTAxLTI4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc2VsZWN0b3IuYzogKGdzdF9zdHJlYW1fc2VsZWN0b3JfaW5pdCksCi0JKGdzdF9zdHJlYW1fc2VsZWN0b3JfZ2V0X2NhcHMpLCAoZ3N0X3N0cmVhbV9zZWxlY3Rvcl9jaGFpbik6Ci0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc2VsZWN0b3IuaDoKLQkgIEJlIG1vcmUgc2VsZWN0aXZlIHdoZW4gd2UncmUgcmVkb2luZyBjYXBzIG5lZ290aWF0aW9uIGZyb20KLQkgIHdpdGhpbiB0aGUgY2hhaW4gZnVuY3Rpb24gb24gYSBzdHJlYW0gY2hhbmdlLgotCi0yMDA1LTAxLTI4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvYW1ybmIvTWFrZWZpbGUuYW06Ci0JKiBleHQvYW1ybmIvYW1ybmIuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9hbXJuYi9hbXJuYmRlYy5jOiAoZ3N0X2Ftcm5iZGVjX2dldF90eXBlKSwKLQkoZ3N0X2Ftcm5iZGVjX2Jhc2VfaW5pdCksIChnc3RfYW1ybmJkZWNfY2xhc3NfaW5pdCksCi0JKGdzdF9hbXJuYmRlY19pbml0KSwgKGdzdF9hbXJuYmRlY19saW5rKSwgKGdzdF9hbXJuYmRlY19jaGFpbiksCi0JKGdzdF9hbXJuYmRlY19zdGF0ZV9jaGFuZ2UpOgotCSogZXh0L2Ftcm5iL2Ftcm5iZGVjLmg6Ci0JKiBleHQvYW1ybmIvYW1ybmJwYXJzZS5jOiAoZ3N0X2Ftcm5icGFyc2VfZ2V0X3R5cGUpLAotCShnc3RfYW1ybmJwYXJzZV9iYXNlX2luaXQpLCAoZ3N0X2Ftcm5icGFyc2VfY2xhc3NfaW5pdCksCi0JKGdzdF9hbXJuYnBhcnNlX2luaXQpLCAoZ3N0X2Ftcm5icGFyc2VfZm9ybWF0cyksCi0JKGdzdF9hbXJuYnBhcnNlX3F1ZXJ5dHlwZXMpLCAoZ3N0X2Ftcm5icGFyc2VfcXVlcnkpLAotCShnc3RfYW1ybmJwYXJzZV9oYW5kbGVfZXZlbnQpLCAoZ3N0X2Ftcm5icGFyc2VfcmVzZXJ2ZSksCi0JKGdzdF9hbXJuYnBhcnNlX2xvb3ApLCAoZ3N0X2Ftcm5icGFyc2Vfc3RhdGVfY2hhbmdlKToKLQkqIGV4dC9hbXJuYi9hbXJuYnBhcnNlLmg6Ci0JICBBZGQgc3VwcG9ydCBmb3IgQU1SLU5CIChtb2JpbGUgcGhvbmUgYXVkaW8gZm9ybWF0OyAjMTU1MTYzLCAjMTYzMjg2KS4KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAocGx1Z2luX2luaXQpOgotCSAgQWRkIEFNUi1OQi8tV0IgcmF3IGZvcm1hdHMuCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9saW5rKToKLQkgIEtlZXAgdmFsaWQgdGltZSB3aGVuIGNoYW5naW5nIGZvcm1hdC4KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwKLQkocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIEFkZCBzb21lIG1vcmUgZm9ybWF0LXNwZWNpZmljIG9wdGlvbnMgKCMxNDAxNDEsICMxNDM1NTUsICMxNTUxNjMpLgotCi0yMDA1LTAxLTI4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXApOgotCSAgRml4IGxvZ2ljIGVycm9yIGluIHRpbWluZyBvZiBzdWJ0aXRsZSBzdHJlYW0gc3luY2hyb25pemF0aW9uLgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChxdF90eXBlX2ZpbmQpOgotCSAgQWRkIHNraXAtY2h1bmssIHdoaWNoIGlzIGZvdW5kIGluIGtvZGFrLWNhbWVyYSBzdHJlYW1zLgotCi0yMDA1LTAxLTI3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vdmkucG86Ci0JICBBZGRpbmcgVmlldG5hbWVzZSB0cmFuc2xhdGlvbiAoc3VibWl0dGVkIGJ5IENseXRpZSBTaWRkYWxsKQotCi0yMDA1LTAxLTI3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6ICh0cnlfdG9fbGlua18xKToKLQkgIFVzZSByZWFscGFkIGZvciBzaWduYWwuCi0KLTIwMDUtMDEtMjcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzZGVtdXhiaW4uYzogKGdzdF9pZDNkZW11eF9iaW5fYmFzZV9pbml0KToKLQkgIEZpeCBjYXRlZ29yeSBzbyBkZWNvZGViaW4gcGlja3MgaXQgdXAuCi0KLTIwMDUtMDEtMjcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tYWQvTWFrZWZpbGUuYW06Ci0JKiBleHQvbWFkL2dzdGlkM2RlbXV4YmluLmM6IChnc3RfaWQzZGVtdXhfYmluX2dldF90eXBlKSwKLQkoZ3N0X2lkM2RlbXV4X2Jpbl9iYXNlX2luaXQpLCAoZ3N0X2lkM2RlbXV4X2Jpbl9jbGFzc19pbml0KSwKLQkoZ3N0X2lkM2RlbXV4X2Jpbl9pbml0KSwgKGdzdF9pZDNkZW11eF9iaW5fcmVtb3ZlX3BhZCksCi0JKGZvdW5kX3R5cGUpLCAoZ3N0X2lkM2RlbXV4X2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2FkZF9zcmNfcGFkKSwKLQkoZ3N0X2lkM190YWdfaW5pdCksIChnc3RfaWQzX3RhZ19oYW5kbGVfZXZlbnQpLAotCShnc3RfaWQzX3RhZ19zcmNfbGluayksIChnc3RfaWQzX3RhZ19jaGFpbiksCi0JKGdzdF9pZDNfdGFnX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvbWFkL2dzdG1hZC5oOgotCSAgQWRkIGlkM2RlbXV4YmluICh3aGljaCBpcyBhIHNpbXBsZSBiaW4gY29uc2lzdGluZyBvZiBpZDNkZW11eAotCSAgYW5kIHR5cGVmaW5kKSwgdGFrZSBvdmVyIHJhbmsgZnJvbSBpZDNkZW11eCwgcmVtb3ZlIHR5cGVmaW5kCi0JICBjb2RlIGZyb20gaWQzZGVtdXguIE1ha2VzIGFsbCBicm9rZW4gbXAzcyB0aGF0IEkga25vdyBvZiB3b3JrLAotCSAgYW5kIHRoZXJlYnkgZml4ZXMgIzE1MjY4OC4KLQotMjAwNS0wMS0yNyAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX3NyY19ldmVudCk6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpOgotCSAgQWxsb3cgc2Vla3Mgb24gYXVkaW8gcGFkLCBtYWtlIG1hZCBmb3J3YXJkIHRob3NlICgjMTY0ODI2KS4KLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuYzogKGdzdF9hdWRpb3NjYWxlX2NoYWluKToKLQkgIFNldCBkdXJhdGlvbiAoIzE2NTMzNSkuCi0KLTIwMDUtMDEtMjcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9pbml0KSwKLQkoZ3N0X2FzZl9kZW11eF9jb21taXRfdGFnbGlzdCksIChnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfY29tbWVudCksCi0JKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19leHRfY29udGVudF9kZXNjKSwKLQkoZ3N0X2FzZl9kZW11eF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2FzZl9kZW11eF9hZGRfYXVkaW9fc3RyZWFtKSwKLQkoZ3N0X2FzZl9kZW11eF9hZGRfdmlkZW9fc3RyZWFtKSwgKGdzdF9hc2ZfZGVtdXhfc2V0dXBfcGFkKToKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5oOgotCSAgSW1wcm92ZSBtZXRhZGF0YSBkaXNwbGF5LCBlLmcuIGlmIHRoZSBtZXRhZGF0YSBjb21lcyBiZWZvcmUgdGhlCi0JICBzdHJlYW1zIGFyZSBsb2FkZWQgKHdoaWNoIGlzIHBlcmZlY3RseSB2YWxpZCkuCi0KLTIwMDUtMDEtMjcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2gtZXh0LW0ubToKLQkgIEZpeCBBVkkvQVNGIHBpcGVsaW5lcyAoIzE2NTM0MCkuCi0KLTIwMDUtMDEtMjYgIEFtYXVyeSBKYWNxdW90ICA8c3hwZXJ0QGVzaXRjb20ub3JnPgotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5LmM6IGluY2x1ZGUgIHN0cmluZy5oIGFuZCBzdHJpbmdzLmggdG8gZml4Ci0JYnVpbGQgZmFpbHVyZSBvbiBhbWQ2NAotCi0yMDA1LTAxLTI2ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChtYWRfaWQzX3BhcnNlX2xhdGluMV9zdHJpbmcpLAotCShtYWRfaWQzX3BhcnNlX2NvbW1lbnRfZnJhbWUpLCAoZ3N0X21hZF9pZDNfdG9fdGFnX2xpc3QpOgotCSAgQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdTVF9JRDNWMl9UQUdfRU5DT0RJTkcsCi0JICBHU1RfSUQzX1RBR19FTkNPRElORyBhbmQgR1NUX1RBR19FTkNPRElORyBmb3IgYSBjb2xvbi1zZXBhcmF0ZWQKLQkgIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncyB0byBmb3JjZSBpbnRlcnByZXRhdGlvbiBvZiBub24tdW5pY29kZQotCSAgc3RyaW5ncyBzdG9yZWQgaW4gYW4gSUQzdjIgdGFnIHRvIGEgcGFydGljdWxhciBlbmNvZGluZy4gSWYgbm9uZQotCSAgaXMgc3BlY2lmaWVkLCB0cnkgdG8gdXNlIGN1cnJlbnQgbG9jYWxlJ3MgZW5jb2RpbmcsIHRoZW4gZmFsbCBiYWNrCi0JICB0byBJU08tODg1OS0xICh3aGljaCB3aWxsIGFsd2F5cyBzdWNjZWVkKS4gKFJlc29sdmVzICMxNDkyNzQpCi0JKiBnc3QvdGFncy9nc3RpZDN0YWcuYzogKGdzdF90YWdfZnJvbV9pZDNfdGFnKSwKLQkoZ3N0X3RhZ19leHRyYWN0X2lkM3YxX3N0cmluZyksIChnc3RfdGFnX2xpc3RfbmV3X2Zyb21faWQzdjEpOgotCSAgQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGVzIEdTVF9JRDNWMV9UQUdfRU5DT0RJTkcsCi0JICBHU1RfSUQzX1RBR19FTkNPRElORyBhbmQgR1NUX1RBR19FTkNPRElORyBmb3IgYSBjb2xvbi1zZXBhcmF0ZWQKLQkgIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncyB0byB1c2UgaW4gY2FzZSBhIHN0cmluZyBlbmNvdW50ZXJlZAotCSAgaW4gYW4gSUQzdjEgdGFnIGlzIG5vdCB2YWxpZCBVVEYtOCBhbHJlYWR5LiBJZiBubyBlbmNvZGluZyBpcwotCSAgc3BlY2lmaWVkLCB0cnkgdG8gdXNlIHRoZSBjdXJyZW50IGxvY2FsZSdzIGVuY29kaW5nLCB0aGVuIGZhbGwKLQkgIGJhY2sgdG8gSVNPLTg4NTktMSAod2hpY2ggd2lsbCBhbHdheXMgc3VjY2VlZCkuCi0KLTIwMDUtMDEtMjUgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfY2hlY2tfY2Fwc19yZXNldCksIChnc3RfbWFkX2NoYWluKToKLQkgIC0gb24gaGFsZiBmcmFtZXJhdGUsIGNvbXB1dGUgdGhlIHJhdGUgaW4gYWR2YW5jZSBzbyB0aGUgY29tcGFyaXNvbnMKLQkgICAgZG9uJ3QgY29tcGFyZSB3cm9uZyB2YWx1ZXMKLQkgIC0gZG9uJ3QgdXNlIG1hZF9zeW50aC9mcmFtZV9tdXRlIGFueW1vcmUsIHRoaXMgbWlycm9ycyBtYWRfZGVjb2RlcgotCSAgICBiZWhhdmlvdXIKLQkgIC0gZG9uJ3QgdXNlIG1hZF9oZWFkZXJfZGVjb2RlIGFueW1vcmUsIG1hZF9mcmFtZV9kZWNvZGUgZG9lcyB0aGF0Ci0JICAgIGF1dG9tYXRpY2FsbHkKLQkgIC0gd2hlbiBnZXR0aW5nIHJpZCBvZiBjb25zdW1lZCBieXRlcywgcmVzZXQgdGhlIHN0cmVhbSdzIHNraXBsZW4KLQkgIChmaXhlcyAjMTYzODY3KQotCi0yMDA1LTAxLTI2ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfY2xhc3NfaW5pdCkKLQkgIFVzZSAxLzIgYSBzZWNvbmQgZm9yIGRlZmF1bHQgbWF4X2Rpc2NvbnQsIGFzIFBFUyBzdHJlYW1zIGZyb20gRFZCCi0JICBzZWVtIHRvIGhhdmUgbGFyZ2VyIHNwYWNpbmdzIGluIHRoZSBTQ1IuIAotCSAgRml4IGEgdHlwby4KLQotMjAwNS0wMS0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChncm91cF9jb21taXQpOgotCSAgTm90aWZ5IGRlbGF5ZWQgc3RyZWFtLWluZm8gYXZhaWxhYmlsaXR5LgotCi0yMDA1LTAxLTI2ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19wdXNoKSwKLQkoZ3N0X2E1MmRlY19oYW5kbGVfZXZlbnQpLCAoZ3N0X2E1MmRlY19jaGFpbik6Ci0JQWRkIHNvbWUgZGVidWcgb3V0cHV0LiBDaGVjayB0aGF0IGEgZGlzY29udCBoYXMgYSB2YWxpZAotCXRpbWUgYXNzb2NpYXRlZC4KLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2NoZWNrX2V2ZW50KSwKLQkoZ3N0X2Fsc2Ffc2lua19sb29wKToKLQlJZ25vcmUgVEFHIGV2ZW50cy4gQSBsaXR0bGUgZXh0cmEgZGVidWcgZm9yIGJyb2tlbiB0aW1lc3RhbXBzLgotCSogZXh0L2R2ZG5hdi9kdmRuYXZzcmMuYzogKGR2ZG5hdnNyY19pbml0KSwgKGR2ZG5hdnNyY19sb29wKSwKLQkoZHZkbmF2c3JjX2NoYW5nZV9zdGF0ZSk6Ci0JRW5zdXJlIHdlIHNlbmQgYSBkaXNjb250IHRvIGVuZ2FnZSB0aGUgbGluayBiZWZvcmUgd2Ugc2VuZCBhbnkKLQlvdGhlciBldmVudHMuCi0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmM6IChkdmRyZWFkc3JjX2luaXQpLAotCShkdmRyZWFkc3JjX2ZpbmFsaXplKSwgKF9jbG9zZSksIChfb3BlbiksIChfc2Vla190aXRsZSksCi0JKF9zZWVrX2NoYXB0ZXIpLCAoc2Vla19zZWN0b3IpLCAoZHZkcmVhZHNyY19nZXQpLAotCShkdmRyZWFkc3JjX3VyaV9nZXRfdXJpKSwgKGR2ZHJlYWRzcmNfdXJpX3NldF91cmkpOgotCUhhbmRsZSBVUkkgb2YgdGhlIGZvcm0gZHZkOi8vdGl0bGVbLGNoYXB0ZXJbLGFuZ2xlXV0uIEN1cnJlbnRseSBvbmx5Ci0JZHZkOi8vdGl0bGUgd29ya3MgaW4gdG90ZW0gYmVjYXVzZSB0eXBlZmluZGluZyBzZW5kcyBhIHNlZWsgdGhhdCBlbmRzCi0JdXAgZ29pbmcgYmFjayB0byBjaGFwdGVyIDEgcmVnYXJkbGVzcy4KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmg6Ci0JT3V0cHV0IGNvcnJlY3QgdGltZXN0YW1wcyBhbmQgaGFuZGxlIGRpc2NvbnRzLgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ2V0X3JlbGF0aXZlKToKLQlTbWFsbCBndWFyZCBhZ2FpbnN0IGEgbnVsbCBkZXJlZmVyZW5jZS4KLQkqIGV4dC9wYW5nby9nc3R0ZXh0b3ZlcmxheS5jOiAoZ3N0X3RleHRvdmVybGF5X2ZpbmFsaXplKSwKLQkoZ3N0X3RleHRvdmVybGF5X3NldF9wcm9wZXJ0eSk6Ci0JRnJlZSBtZW1vcnkgd2hlbiBkb25lLiBEb24ndCBjYWxsIGdzdF9ldmVudF9maWxsZXJfZ2V0X2R1cmF0aW9uIG9uCi0JRU9TIGV2ZW50cy4gVXNlIEdTVF9MT0cgYW5kIEdTVF9XQVJOSU5HIGluc3RlYWQgb2YgZ19tZXNzYWdlIGFuZAotCWdfd2FybmluZy4KLQkqIGV4dC9zbW9vdGh3YXZlL2dzdHNtb290aHdhdmUuYzogKGdzdF9zbW9vdGh3YXZlX2luaXQpLAotCShkcmF3X2xpbmUpLCAoZ3N0X3Ntb290aHdhdmVfZGlzcG9zZSksIChnc3Rfc3dfc2lua2xpbmspLAotCShnc3Rfc3dfc3JjbGluayksIChnc3Rfc21vb3Rod2F2ZV9jaGFpbik6Ci0JRHJhdyBzb2xpZCBsaW5lcywgcHJldHRpZXIgY29sb3Vycy4KLQkqIGdzdC9tcGVnMnN1Yi9nc3RtcGVnMnN1YnQuYzogKGdzdF9tcGVnMnN1YnRfaW5pdCk6Ci0JQWRkIGEgZGVmYXVsdCBwYWxldHRlIHRoYXQnbGwgd29yayBmb3Igc29tZSBtb3ZpZXMuCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOiAoZ3N0X2R2ZF9kZW11eF9pbml0KSwKLQkoZ3N0X2R2ZF9kZW11eF9oYW5kbGVfZHZkX2V2ZW50KSwgKGdzdF9kdmRfZGVtdXhfc2VuZF9kaXNjb250KSwKLQkoZ3N0X2R2ZF9kZW11eF9zZW5kX3N1YmJ1ZmZlciksIChnc3RfZHZkX2RlbXV4X3Jlc2V0KToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4Lmg6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X3NlbmRfZGlzY29udCksCi0JKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3N5c2hlYWQpLCAoZ3N0X21wZWdfZGVtdXhfcGFyc2VfcGVzKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfaW5pdCksCi0JKGdzdF9tcGVnX3BhcnNlX2hhbmRsZV9kaXNjb250KSwgKGdzdF9tcGVnX3BhcnNlX3BhcnNlX3BhY2toZWFkKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5oOgotCVVzZSBQVE0vTkFWIGV2ZW50cyB3aGVuIGZvciB0aW1lc3RhbXAgYWRqdXN0bWVudCB3aGVuIGNvbm5lY3RlZCB0byAKLQlkdmRuYXZzcmMuIERvbid0IHVzZSBtYW55IGRpc2NvbnQgZXZlbnRzIHdoZXJlIG9uZSBzdWZmaWNlcy4KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3JvdXBfZGVzdHJveSksCi0JKGdlbl9wcmVyb2xsX2VsZW1lbnQpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmg6Ci0JTWFrZSBzdXJlIHdlIHJlbW92ZSBzdWJ0aXRsZXMgZnJvbSB0aGUgc2FtZSBiaW4gd2UgcHV0IHRoZW0gaW4uCi0JKiBnc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYzogKGNvbnZlcnRfZW5jb2RpbmcpLCAocGFyc2Vfc3VicmlwKSwKLQkoZ3N0X3N1YnBhcnNlX2J1ZmZlcl9mb3JtYXRfYXV0b2RldGVjdCksCi0JKGdzdF9zdWJwYXJzZV9jaGFuZ2Vfc3RhdGUpOgotCUZpeCBzb21lIG1lbWxlYWtzIGFuZCBpbnZhbGlkIGFjY2Vzc2VzLgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChvZ2dhbnhfdHlwZV9maW5kKSwKLQkob2dnc2tlbF90eXBlX2ZpbmQpLCAoY21tbF90eXBlX2ZpbmQpLCAocGx1Z2luX2luaXQpOgotCVNvbWUgdHlwZWZpbmQgZnVuY3Rpb25zIGZvciBBbm5vZGV4IHYzLjAgZmlsZXMKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oOgotCUdzdFJpZmZSZWFkQ2xhc3MgaXMgdGhlIGNvcnJlY3QgcGFyZW50IGNsYXNzLgotCi0yMDA1LTAxLTI1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzX3dpdGhfZGF0YSk6Ci0JICBBZGQgZXh0cmFkYXRhIHRvIGh1ZmZ5dXYgKGZpeGVzICMxNjUwMTMpLgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6Ci0JKGdzdF9yaWZmX3JlYWRfc3RyZl92aWRzX3dpdGhfZGF0YSk6Ci0JICBGaXggZXh0cmFkYXRhIGV4dHJhY3Rpb24gaWYgaXQgaXMgaW4gdGhlIGNodW5rIHNpemUuCi0KLTIwMDUtMDEtMjUgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOiAoZ3N0X3F1YXJrdHZfY2xhc3NfaW5pdCksCi0JKGdzdF9xdWFya3R2X2NoYW5nZV9zdGF0ZSksIChnc3RfcXVhcmt0dl9kaXNwb3NlKToKLQkgIE1lbW9yeSBmcmVlJ2luZyBsb2NhdGlvbiBmaXggKCMxNjQ3MDgpLgotCi0yMDA1LTAxLTI1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdyb3VwX2NvbW1pdCksCi0JKGdlbl9wcmVyb2xsX2VsZW1lbnQpLCAocHJvYmVfdHJpZ2dlcmVkKSwgKGdlbl9zb3VyY2VfZWxlbWVudCksCi0JKHNldHVwX3NvdXJjZSksIChnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9hZGRfZWxlbWVudCk6Ci0JICBEb24ndCBibG9jayBmb3Igc3RyZWFtcy4KLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmM6IChzdHJlYW1faW5mb19jaGFuZ2Vfc3RhdGUpLAotCShnc3Rfc3RyZWFtX2luZm9fc2V0X211dGUpOgotCSAgVXNlIGdzdF9wYWRfc2V0X2FjdGl2ZV9yZWN1cnNpdmUuCi0KLTIwMDUtMDEtMjUgIEFuZHkgV2luZ28gIDx3aW5nb0Bwb2JveC5jb20+Ci0KLQkqIHN5cy92NGwvZ3N0djRsZWxlbWVudC5jIChnc3RfdjRsX2lmYWNlX3N1cHBvcnRlZCk6IEZpeCBjb21waWxlCi0JZm9yICNpZm5kZWYgSEFWRV9YVklERU8uCi0KLTIwMDUtMDEtMjQgIEplZmZyZXkgQy4gT2xsaWUKLQotCXJldmlld2VkIGJ5OiBNYWNpZWogS2F0YWZpYXN6ICA8bWF0aHJpY2tAZnJlZWRlc2t0b3Aub3JnPgotCi0JKiBleHQvZ3NtL2dzdGdzbWRlYy5jOiAoZ3N0X2dzbWRlY19pbml0KSwgKGdzdF9nc21kZWNfY2hhaW4pOgotCSogZXh0L2dzbS9nc3Rnc21kZWMuaDoKLQkqIGV4dC9nc20vZ3N0Z3NtZW5jLmM6IChnc3RfZ3NtZW5jX2luaXQpLCAoZ3N0X2dzbWVuY19jaGFpbik6Ci0JKiBleHQvZ3NtL2dzdGdzbWVuYy5oOgotCUZpeCByYXRlIHRvIDhrSHogYXMgcGVyIHNwZWMsIHJlbW92ZXMgb2JzY3VyZSBlcnJvcnMgd2hlbiBubyByYXRlCi0Jd2FzIGdpdmVuIGJ5IHByb3BlcnR5LiBBZGQgcHJvcGVyIGJ1ZmZlciB0aW1lc3RhbXBzIGFuZCBvZmZzZXRzLgotCi0yMDA1LTAxLTI0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzX3dpdGhfZGF0YSk6Ci0JICBBdWRpbyBjYW4gYmUgPDgwMDBIei4KLQotMjAwNS0wMS0yMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgRXhwbGljaXQgc3RhdGUgY2hhbmdlIHRvIHdvcmthcm91bmQgcmVmY291bnQgYnVncy4KLQotMjAwNS0wMS0yMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfd3JpdGVfdGFnKSwKLQkoZ3N0X2F2aW11eF9yaWZmX2dldF9hdmlfaGVhZGVyKToKLQkgIEZpeC4uLgotCi0yMDA1LTAxLTE5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3BlZWtfZWxlbWVudF9kYXRhKSwKLQkoZ3N0X3JpZmZfcmVhZF9lbGVtZW50X2RhdGEpOgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmg6Ci0JICBBZGQgX3BlZWsgdmVyc2lvbiAocmVxJ2VkIGluIENEWEEpLgotCSogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuYzogKGdzdF9jZHhhcGFyc2VfaW5pdCksCi0JKGdzdF9jZHhhcGFyc2VfbG9vcCk6Ci0JICBGaXggcGFyc2luZyBpbiBwbGF5YmluLgotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoY2xvc2VfcGFkX2xpbmspOgotCSAgSWdub3JlIGN1cnJlbnRfIHBhZHMsIHRoZXkgY2F1c2UgbWFqb3IgYW5ub3lhbmNlLgotCi0yMDA1LTAxLTE5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19sb29wKToKLQkgIFNhZmV0eSBndWFyZC4KLQotMjAwNS0wMS0xOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfd3JpdGVfdGFnKToKLQkgIEZpeCBwYWRkaW5nLi4uCi0KLTIwMDUtMDEtMTkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfYnVmZmVyKToKLQkgIEFsbG93IGZvciAwLXNpemVkIGJ1ZmZlcnMuIEZpeGVzIGxlbmd0aCBxdWVyeSBwcm9ibGVtcyBpbgotCSAgc3RhcndhcnMubWt2IGZyb20gdGhlIHRlc3RzdWl0ZS4KLQotMjAwNS0wMS0xOSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfY29weV9wbGFuZV9pNDIwKSwKLQkoZ3N0X3ZpZGVvX2JveF9pNDIwKSwgKGdzdF92aWRlb19ib3hfY2hhaW4pOgotCSAgRml4IHJvdyBzdHJpZGVzIGZvciBJNDIwIChmaXhlcyAjMTYzMTU5KQotCSAgCi0yMDA1LTAxLTE5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVncGFyc2UuYzogKGdzdF9tcGVnX3BhcnNlX3BhcnNlX3BhY2toZWFkKToKLQkgIE1QRUcyIGhhcyBhIHVzZWZ1bCByYXRlIHByb3BlcnR5LCBzbyB3ZSBjYW4gYWN0dWFsbHkgdXNlIHRoYXQuCi0JICBGb3IgTVBFRy0xLCBjb250aW51ZSB1c2luZyB0aGUgYnl0ZXMvdGltZSBwcm9wZXJ0aWVzLgotCi0yMDA1LTAxLTE5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzX3dpdGhfZGF0YSksCi0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb190ZW1wbGF0ZV9jYXBzKToKLQkgIEFkZCBpbnRlbC1oMjYzLgotCi0yMDA1LTAxLTE5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9jaGVja19jYXBzX3Jlc2V0KSwgKGdzdF9tYWRfY2hhaW4pOgotCSAgRmFpbCBpZiBjYXBzIG5lZ290aWF0aW9uIGZhaWxzLiBTaG91bGQgZml4ICMxNjIxODQsIGFuZCBzaG91bGQKLQkgIGRlZmluYXRlbHkgYmUgaW4gdGhlcmUgcmVnYXJkbGVzcyBvZiBpdCBmaXhpbmcgdGhlIGFjdHVhbCBidWcuCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aW11eF9nZXRfdHlwZSksIChnc3RfYXZpbXV4X2luaXQpLAotCShnc3RfYXZpbXV4X3dyaXRlX3RhZyksIChnc3RfYXZpbXV4X3JpZmZfZ2V0X2F2aV9oZWFkZXIpLAotCShnc3RfYXZpbXV4X3JpZmZfZ2V0X2F2aXhfaGVhZGVyKSwKLQkoZ3N0X2F2aW11eF9yaWZmX2dldF92aWRlb19oZWFkZXIpLAotCShnc3RfYXZpbXV4X3JpZmZfZ2V0X2F1ZGlvX2hlYWRlciksIChnc3RfYXZpbXV4X3dyaXRlX2luZGV4KSwKLQkoZ3N0X2F2aW11eF9zdGFydF9maWxlKSwgKGdzdF9hdmltdXhfaGFuZGxlX2V2ZW50KSwKLQkoZ3N0X2F2aW11eF9jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L2F2aS9nc3RhdmltdXguaDoKLQkgIFJlZmFjdG9yIHN0cnVjdHVyZSB3cml0aW5nIHRvIHVzZSBHU1RfV1JJVEVfVUlOVCBtYWNyb3MsIGFkZAotCSAgbWV0YWRhdGEgd3JpdGluZyBzdXBwb3J0LgotCi0yMDA1LTAxLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtaW5mby5jOiAoZ3N0X3N0cmVhbV9pbmZvX2Rpc3Bvc2UpOgotCSAgRWxlbWVudHMgbWF5IGFscmVhZHkgYmUgZGVzdHJveWVkIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCi0KLTIwMDUtMDEtMTggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwgKGdzdF9xdGRlbXV4X2hhbmRsZV9lc2RzKToKLQkgIE1vcmUgbWVtb3J5IGxlYWsgZml4ZXMgKCMxNDkxNjIpLgotCi0yMDA1LTAxLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfcXRkZW11eF9hZGRfc3RyZWFtKToKLQkgIEZpeCB0d28gbWVtbGVha3MuCi0KLTIwMDUtMDEtMTggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX3NyY2dldGNhcHMpOgotCSAgQXJnaC4uLgotCi0yMDA1LTAxLTE3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9zcmNnZXRjYXBzKToKLQkgIEZpeCBvZmYtYnktb25lIGJ1Zy4gRml4ZXMgd2FybmluZ3MgZHVyaW5nIHBsYXliYWNrIG9mIHNpbmNpdHkubXA0Ci0JICB3aGVuIGZpeGF0aW5nIHRvIHNpeCBjaGFubmVscyBpbiBUb3RlbS4KLQotMjAwNS0wMS0xNyAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBhdCBjZW50cmljdWxhciBkb3QgbmV0PgotCi0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmM6IChnZXRfbmV4dF9jZWxsX2Zvcik6Ci0JICBGaXggY29tcGlsZSB3YXJuaW5ncyBvbiBTb2xhcmlzIDEwIGJ1aWxkYm90Ci0KLTIwMDUtMDEtMTcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gYXQgY2VudHJpY3VsYXIgZG90IG5ldD4KLQotCSogZXh0L2R2ZHJlYWQvZHZkcmVhZHNyYy5jOiAoX3JlYWQpOgotCSAgRG9uJ3QgcmVhZCBiZXlvbmQgdGhlIGxhc3QgY2VsbCBpbiBhIGNoYXB0ZXIgKGZpeGVzIAotCSAgaW52YWxpZCBtZW1vcnkgYWNjZXNzKQotCi0yMDA1LTAxLTE3ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGF0IGNlbnRyaWN1bGFyIGRvdCBuZXQ+Ci0KLQkqIGV4dC9kdmRyZWFkL3N0cmVhbV9sYWJlbHMuYzoKLQkoZHZkcmVhZHNyY19nZXRfYXVkaW9fc3RyZWFtX2xhYmVscyk6Ci0JICBVc2UgTlVMTCBmb3IgYW4gZW1wdHkgR0xpc3QgaW5zdGVhZCBvZiBnX2xpc3RfYWxsb2MoKTsgZml4IAotCSAgbWVtb3J5IGxlYWtzOyBzL0xDUE0vTFBDTS87IHVzZSBnX3N0cmR1cF9wcmludGYoKSBpbnN0ZWFkIAotCSAgb2YgR1N0cmluZyAoZWFzaWVyIHRvIGJ1bGsgZnJlZSBsYXRlcikKLQotMjAwNS0wMS0xNyAgR2VyZ2VseSBOYWd5ICA8YWxnZXJub25AYm9uZWh1bnRlci5ydWxlei5vcmc+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKGdzdF9mZm1wZWdfcGl4Zm10X3RvX2NhcHMpOgotCSAgRml4IEJHUkEzMiBjYXBzICgjMTY0MjA5KS4KLQotMjAwNS0wMS0xNyAgR2VyZ2VseSBOYWd5ICA8YWxnZXJub25AYm9uZWh1bnRlci5ydWxlei5vcmc+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKGdzdF9mZm1wZWdfY2Fwc190b19waXhmbXQpOgotCSAgYWxwaGFfbWFzayBjYW4gYmUgUkdCQS9BQkdSLiBGaXhlcyAjMTY0MjY1LgotCi0yMDA1LTAxLTE3ICBGcmFuY2lzIExhYm9udGUgIDxmcmFuY2lzX2xhYm9udGVAaG90bWFpbC5jb20+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOiAoY3JvcF9idWZmZXIpLAotCShnc3RfbXBlZzJkZWNfYWxsb2NfYnVmZmVyKToKLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5oOgotCSAgQ3JvcCBpZiBkZWNvZGluZyBzaXplIGlzIG5vdCB0aGUgYWN0dWFsIGltYWdlIHNpemUgKCMxNjM2NzYpLgotCi0yMDA1LTAxLTE3ICBTdGV2ZSBCYWtlciAgPHN0ZXZlQHN0ZXZlYmFrZXIub3JnPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKGFpZmZfdHlwZV9maW5kKSwKLQkoc3Z4X3R5cGVfZmluZCksIChzZHNfdHlwZV9maW5kKSwgKGlyY2FtX3R5cGVfZmluZCksIChwbHVnaW5faW5pdCk6Ci0JICBBZGQgbGlic25kZmlsZSB0eXBlZmluZCBmdW5jdGlvbnMgKCMxNjMzMDkpLgotCi0yMDA1LTAxLTE3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC1tLm06Ci0JICBBZGQgLmFhYywgZml4IC5tMXYvLm0ydiAoIzE2Mzg5MSkuCi0KLTIwMDUtMDEtMTcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FjbG9jay5jOiAoZ3N0X2Fsc2FfY2xvY2tfd2FpdCk6Ci0JICBTYW5pdHkgY2hlY2ssIGRvbid0IHdhaXQgZW5kbGVzc2x5IHNpbmNlIHRoZSBjbG9jayBtaWdodCBub3QKLQkgIGFjdHVhbGx5IHJ1biBhdCB0aGlzIHBvaW50ICh3aGljaCBpcyBhIGRlYWRsb2NrKS4gRml4ZXMgIzE2NDA2OS4KLQotMjAwNS0wMS0xNiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChwcm9iZV90cmlnZ2VyZWQpOgotCSAgT2YgY291cnNlLCBvbmx5IHBhdXNlIGlmIGdyb3VwIGlzIGRvbmUuLi4KLQotMjAwNS0wMS0xNiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChwcm9iZV90cmlnZ2VyZWQpOgotCSAgVGhyZWFkIHNhZmV0eS4KLQotMjAwNS0wMS0xNiAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOiAoZ3N0X3N3ZmRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgcmV0dXJuIHN0YXRlIGNoYW5nZSBzdWNjZXNzIHdoZW4gdGhlIHBhcmVudAotCSAgZmFpbGVkLgotCi0yMDA1LTAxLTE2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aW11eF9oYW5kbGVfZXZlbnQpOgotCSAgRnJlZSBldmVudHMgKGZpeCBtZW1sZWFrIGluICMxNjI5MDUpLgotCi0yMDA1LTAxLTE1ICBHZXJnZWx5IE5hZ3kgIDxhbGdlcm5vbkBib25laHVudGVyLnJ1bGV6Lm9yZz4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29kZWNtYXAuYzoKLQkoZ3N0X2ZmbXBlZ19jYXBzX3RvX3BpeGZtdCk6Ci0JICBGaXggZm9yIGRlcHRoID0gMTUuIEZpeGVzICMxNjE2NzUuCi0KLTIwMDUtMDEtMTQgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2dldGNhcHMpOgotCSAgU2V0IEZQUyBjb3JyZWN0bHksIGV2ZW4gZm9yIHdlYmNhbXMgYW5kIHRoZSBsaWtlLgotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfc2V0X2NoYW5fbm9ybSk6Ci0JICBEb24gZXJyb3Igb24gc2V0dGluZyB3aGlsZSBjYXB0dXJpbmcuCi0KLTIwMDUtMDEtMTQgIFN0ZXBoYW5lIExPRVVJTExFVCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGdzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jOiAocGFyc2VfbWR2ZHN1Yik6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOiAoZ3N0X3k0bWVuY29kZV9zaW5rY29ubmVjdCk6Ci0JICBJJ20gYSBiYWQgYm95LiB1c2luZyAvMTAwMS4gdG8gZm9yY2UgQyB0byBkbyBmbG9hdCBkaXZpc2lvbgotCSAgYW5kIG5vdCBpbnRlZ2VyIGRpdmlzaW9uIChhcyBpdCBkaWQgaW4gbXkgbGFzdCBjb21taXQpCi0JICBUaGFua3MgdG8gRGF2aWQgSS4gTGVobiBmb3IgcG9pbnRpbmcgdGhpcyBtaXN0YWtlLgotCi0yMDA1LTAxLTE0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvdjRsL2dzdHY0bGVsZW1lbnQuYzogKGdzdF92NGxfaWZhY2Vfc3VwcG9ydGVkKToKLQkgIFJldmVydCBKb2hhbsK0cyAxLjM1LT4xLjM2IHNpbmNlIGl0IGJyZWFrcyBjb21wYXQuCi0KLTIwMDUtMDEtMTQgIFN0ZXBoYW5lIExPRVVJTExFVCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkqIGV4dC9saWJmYW1lL2dzdGxpYmZhbWUuYzoKLQkqIGdzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jOiAocGFyc2VfbWR2ZHN1Yik6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOiAoZ3N0X3k0bWVuY29kZV9zaW5rY29ubmVjdCk6Ci0gICAgICAgICAgcmVwbGFjZSBmcmFtZXJhdGUgYXByb3hpbWF0aW9ucyBieSB0aGVpciByZWFsIHZhbHVlCi0gICAgICAgICAgKDI0MDAwLzEwMDEsIDMwMDAwLzEwMDEsIDYwMDAwLzEwMDEpCi0gICAgICAgICAgRmluaXNoIGZpeGluZyBidWcgIzE2NDA0OQotCi0yMDA1LTAxLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOgotCSAgZW9zL2JvcyBkZWJ1Z2dpbmcKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzoKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcC5oOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzaW5rLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNyYy5jOgotCSAgaW1wcm92ZSByZXVzYWJpbGl0eSBvZiBlbGVtZW50cyBhZnRlciBzdGF0ZSBjaGFuZ2VzIGFuZCBlcnJvcnMKLQkgIG1ha2UgbXVsdGlmZHNpbmsgdGhyb3cgYXdheSBzdHJlYW1oZWFkZXJzIHdoZW4gcmVjZWl2aW5nIG5ldyBvbmVzCi0KLTIwMDUtMDEtMTMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3JhdGVzX3Byb2JlKToKLQkgIEZpeCBmb3IgaWYgaXRlbXMgYXJlIGFscmVhZHkgaW4gbGlzdC4uLgotCi0yMDA1LTAxLTEyICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hZGRlci9nc3RhZGRlci5jOiAoZ3N0X2FkZGVyX2xvb3ApOgotCSAgZml4IGFkZGVyIGEgYml0IHNvIGl0IGRvZXNuJ3Qgc2NyZXcgdXAgd2l0aCBldmVudHMgYXMgbXVjaCBhbnltb3JlCi0KLTIwMDUtMDEtMTIgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzogKGdzdF9waXhidWZzY2FsZV9saW5rKSwKLQkocGl4YnVmc2NhbGVfc2NhbGUpLCAoZ3N0X3BpeGJ1ZnNjYWxlX2NoYWluKToKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmg6Ci0JICBJbmNvcnBvcmF0ZSBjaGFuZ2VzIGZyb20gVGltLVBoaWxpcHAgTXVlbGxlciA8dC5pLm1Ab3JhbmdlLm5ldD4KLQkgIHRvIGVuc3VyZSByb3dzdHJpZGVzIGFyZSBjYWxjdWxhdGVkIHRoZSBzYW1lIHdheSBhcyAKLQkgIGZmbXBlZ2NvbG9yc3BhY2UKLQkgIFVzZSBnc3RfYnVmZmVyX3N0YW1wIGluc3RlYWQgb2YgY29weWluZyBUSU1FU1RBTVAgbWFudWFsbHksIHNvCi0JICB0aGF0IHdlIHBpY2sgdXAgZHVyYXRpb24gYW5kIG9mZnNldCBhbHNvLgotCi0yMDA1LTAxLTExICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aW11eF9jbGFzc19pbml0KSwKLQkoZ3N0X2F2aW11eF9wYWRfdW5saW5rKSwgKGdzdF9hdmltdXhfcmVsZWFzZV9wYWQpOgotCSAgUmV1c2FiaWxpdHkgZml4ZXMuCi0KLTIwMDUtMDEtMTEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FtaXhlci5jOiAoZ3N0X2Fsc2FfbWl4ZXJfdXBkYXRlKSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfZ2V0X3ZvbHVtZSksIChnc3RfYWxzYV9taXhlcl9zZXRfdm9sdW1lKSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfc2V0X211dGUpLCAoZ3N0X2Fsc2FfbWl4ZXJfc2V0X3JlY29yZCksCi0JKGdzdF9hbHNhX21peGVyX3NldF9vcHRpb24pLCAoZ3N0X2Fsc2FfbWl4ZXJfZ2V0X29wdGlvbik6Ci0JICBVcGRhdGUgZmxhZ3Mgd2hlbiByZXF1ZXN0ZWQuCi0KLTIwMDUtMDEtMTEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3JhdGVzX3Byb2JlKToKLQkgIEZpeCBkbWl4LgotCi0yMDA1LTAxLTExICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2NsYXNzX2luaXQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwgKGdzdF9wbGF5X2Jhc2VfYmluX2Rpc3Bvc2UpLAotCShwcm9iZV90cmlnZ2VyZWQpLCAobmV3X2RlY29kZWRfcGFkKSwgKGdlbl9zb3VyY2VfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX3NldF9wcm9wZXJ0eSksIChnc3RfcGxheV9iYXNlX2Jpbl9nZXRfcHJvcGVydHkpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmg6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ3N0X3BsYXlfYmluX2NsYXNzX2luaXQpLAotCShnc3RfcGxheV9iaW5faW5pdCksIChncm91cF9zd2l0Y2gpLCAocmVtb3ZlX3NpbmtzKSwgKHNldHVwX3NpbmtzKSwKLQkoZ3N0X3BsYXlfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBJbXBsZW1lbnQgZ3JvdXAtc3dpdGNoIHNpZ25hbCBmb3IgdXNlIGluIGFwcHMgdG8gY2xlYXIgbWV0YWRhdGEKLQkgIGNhY2hlLCBjbGVhbiB1cCBzdWJ0aXRsZSwgYWRkIHN1YnVyaSBwcm9wZXJ0eSBpbnN0ZWFkIG9mICMgaGFjaywKLQkgIHNvbWUgZXJyb3Itb3V0IGZpeGVzLgotCi0yMDA1LTAxLTExICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19jaGFpbik6Ci0JICBEZWJ1Zy4KLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6IChnc3RfdjRsc3JjX2dyYWJfZnJhbWUpOgotCSAgSWYgd2UgZ290IGEgc3RhdGUgY2hhbmdlIGluIHRoZSBfZ2V0IGhhbmRsZXIsIGRvbid0IHJldHVybiBzdWNjZXNzLgotCi0yMDA1LTAxLTEwICBTdGVwaGFuZSBMT0VVSUxMRVQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdkZWNfbXlfb3V0cHV0X21lc3NhZ2UpLAotCShnc3RfanBlZ2RlY19teV9lbWl0X21lc3NhZ2UpLCAoZ3N0X2pwZWdkZWNfaW5pdCk6Ci0JICBNYWtlIGpwZWdkZWMgcXVpZXQgb24gTUpQRUcgZGVjb2RpbmcKLQkqIGdzdC9hc2ZkZW11eC9SRUFETUU6Ci0JICBGaXggbWltZXR5cGVzIGZvciBNSlBFRyBhbmQgSDI2MwotCi0yMDA1LTAxLTEwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOiAodGhlb3JhX2RlY19jaGFpbik6Ci0JICBGaXggYnJva2VuIGNvZGUgZ2VuZXJhdGlvbiBieSBnY2MgYnkgc3dhcHBpbmcgYXJndW1lbnRzLgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfc3JjX3F1ZXJ5KToKLQkgIEZpeCBcbiBpbiBkZWJ1Zy4KLQotMjAwNS0wMS0xMCAgU3RlcGhhbmUgTE9FVUlMTEVUICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIFRPRE86Ci0JICBkZWxldGUgdGhpcyBmaWxlLCBpdCBpcyBieSBmYXIgb3V0ZGF0ZWQKLQkqIGV4dC9hbHNhL2dzdGFsc2EuMTogcmVtb3ZlCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChhZGRfcmF0ZXMpLCAoYWRkX2NoYW5uZWxzKSwgKGdzdF9hbHNhX2NhcHMpLAotCShnc3RfYWxzYV9jaGVja19zYW1wbGVfcmF0ZXMpLCAoZ3N0X2Fsc2FfcmF0ZXNfcHJvYmUpLAotCShnc3RfYWxzYV9nZXRfY2Fwcyk6Ci0JICBBZGQgSFcgcHJvYmluZyBmb3Igc3VwcG9ydGVkIHNhbXBsZSByYXRlcy4gRml4ZXMgIzE2MTcwNAotCi0yMDA1LTAxLTEwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmM6IChnc3RfYXVkaW9zY2FsZV9jaGFpbik6Ci0JICBEb24ndCBjcmFzaCwgYmlhdGNoISA6KS4KLQotMjAwNS0wMS0xMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L211c2VwYWNrL2dzdG11c2VwYWNrcmVhZGVyLmNwcDoKLQkqIGdzdC9hcGV0YWcvYXBlZGVtdXguYzogKGdzdF9hcGVfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgU29tZSB3b3JrIG9uIHRhZ3MgLSBzdGlsbCBkb2Vzbid0IHdvcmsgaW4gcGxheWJpbi4uLgotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOiAoZ3N0X2F1ZGlvc2NhbGVfY2hhaW4pOgotCSAgSGFuZGxlIGV2ZW50cy4uLgotCi0yMDA1LTAxLTEwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3RyZWUpOgotCSAgQWxzbyBzaG92ZSB0YWdzIG9uIGtpZCBwYWRzLgotCi0yMDA1LTAxLTEwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3JlYWRfdXNlX2V2ZW50KToKLQkgIERvbid0IGJhaWwgb24gdW5rbm93biBldmVudHMuCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmM6IChnc3RfYXVkaW9zY2FsZV9jaGFpbik6Ci0JICBEb24ndCBjcmFzaCBvbiBldmVudHMgYmVmb3JlIG5lZ290aWF0aW9uLgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9hZGRfc3RyZWFtKToKLQkgIFNlbmQgdGFncyBvbiBwYWRzLCB0b28uCi0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc2VsZWN0b3IuYzoKLQkoZ3N0X3N0cmVhbV9zZWxlY3Rvcl9yZXF1ZXN0X25ld19wYWQpOgotCSAgRm9yd2FyZCBldmVudHMgb24gZmlyc3QgcGFkIGlmIG5vIGlucHV0IHdhcyBzZWxlY3RlZCB5ZXQuCi0KLTIwMDUtMDEtMTAgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoc2V0dXBfc3Vic3RyZWFtcyk6Ci0JICBEb24ndCBkaXNhYmxlIHN0cmVhbXR5cGUgaWYgdGhlIHN0cmVhbSBkb2Vzbid0IGV4aXN0LCBzaW5jZQotCSAgdGhlbiBwbGF5aW5nIGEgdmlkZW8gYWZ0ZXIgYXVkaW8gd2lsbCBkaXNhYmxlIGJvdGggYW5kIG5vdGhpbmcKLQkgIHdpbGwgaGFwcGVuLiBGaXhlcyB0aGUgdGVzdHN1aXRlLgotCi0yMDA1LTAxLTEwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvdjRsL2dzdHY0bHhvdmVybGF5LmM6IChnc3RfdjRsX3hvdmVybGF5X2ludGVyZmFjZV9pbml0KSwKLQkoZ3N0X3Y0bF94b3ZlcmxheV9zZXRfeHdpbmRvd19pZCk6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuYzogKGdzdF92NGwyX3hvdmVybGF5X2ludGVyZmFjZV9pbml0KSwKLQkoZ3N0X3Y0bDJfeG92ZXJsYXlfc2V0X3h3aW5kb3dfaWQpOgotCSAgQWRkIGRlYnVnIGNhdGVnb3JpZXMsIGZpeCBvdmVybGF5IGRpc2FibGluZy4KLQotMjAwNS0wMS0xMCAgU3RlcGhhbmUgTE9FVUlMTEVUICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2NsYXNzX2luaXQpLCAoZ3N0X2Fsc2FfZ2V0X2NhcHMpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSAgQWRkIEhXIHByb2JpbmcgZm9yIHBlcmlvZF9jb3VudC9zaXplIGFuZCBidWZmZXJfc2l6ZSBNSVgvTUFYCi0JICBBZGp1c3QgZGVmYXVsdC91c2VyIGRlZmluZWQgdmFsdWUgaWYgb3V0IG9mIGJvdW5kcwotCSAgU2hvdWxkIGZpeCBidWcgIzE2MjAyNAotCi0yMDA1LTAxLTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCk6Ci0JICBGaXggd2FybmluZyAoIzE2MTE5MSkuCi0KLTIwMDUtMDEtMDkgIFN0ZXBoYW5lIExPRVVJTExFVCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvZHZkcmVhZC9zdHJlYW1fbGFiZWxzLmM6Ci0JKGR2ZHJlYWRzcmNfZ2V0X2F1ZGlvX3N0cmVhbV9sYWJlbHMpOgotCSAgRml4IHdhcm5pbmcgKGluaXQgdGhlIGdvb2QgdmFyaWFibGUgaW4gc3dpdGNoIGRlZmF1bHQpCi0KLTIwMDUtMDEtMDkgIEtvb3AgTWFzdCAgPGt3bUByYWluYm93LXJ1bm5lci5ubD4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3R0YS9nc3R0dGFwYXJzZS5jOiAoZ3N0X3R0YV9zcmNfZXZlbnQpOgotCSAgRml4IGdjYy0yLjk1IGNvbXBpbGUgKCMxNjM0ODUpLgotCi0yMDA1LTAxLTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY2VuY19pbml0KSwKLQkoZ3N0X2ZsYWNlbmNfc2Vla19jYWxsYmFjayksIChnc3RfZmxhY2VuY193cml0ZV9jYWxsYmFjayksCi0JKGdzdF9mbGFjZW5jX3RlbGxfY2FsbGJhY2spLCAoZ3N0X2ZsYWNlbmNfY2hhaW4pLAotCShnc3RfZmxhY2VuY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5oOgotCSAgVXBkYXRlIGZvciBBUEkgY2hhbmdlIGluIGZsYWMtMS4xLjEuIFVwZGF0ZSByZXF1aXJlbWVudCBpbgotCSAgY29uZmlndXJlLmFjLiBGaXhlcyAjMTYyOTc0LgotCi0yMDA1LTAxLTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdyb3VwX2Rlc3Ryb3kpOgotCSAgUmVtb3ZlIGhhY2sgdG8gZ2V0IHJpZCBvZiBhc3NlcnQgYW5kIGdldCByaWQgb2YgdW5saW5rZWQKLQkgIHNpZ25hbHMgcHJvcGVybHkuCi0KLTIwMDUtMDEtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoc2V0dXBfc291cmNlKToKLQkgIFNldCBzb3VyY2UgdG8gTlVMTCBzbyB0aGF0IHJlc291cmNlcyBhcmUgZnJlZSdlZC4gRml4ZXMgaXNzdWVzCi0JICB3aXRoIHBsYXliYWNrIG9mIENEREEgYW5kIHNpbWlsYXIgZGV2aWNlLWFjY2Vzc2luZyB0aGluZ3MuCi0KLTIwMDUtMDEtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHRlc3RzdWl0ZS9lbWJlZC9NYWtlZmlsZS5hbToKLQkgIHRlc3QtPm5vaW5zdCwgZml4IG1ha2UgdGVzdCBpbiBidWlsZGJvdC4KLQotMjAwNS0wMS0wOSAgU3RlcGhhbmUgTE9FVUlMTEVUICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGV4dC9kdmRyZWFkL3N0cmVhbV9sYWJlbHMuYzogbmV3IGZpbGUKLQkqIGV4dC9kdmRyZWFkL3N0cmVhbV9sYWJlbHMuaDogbmV3IGZpbGUKLQkqIGV4dC9kdmRyZWFkL01ha2VmaWxlLmFtOgotCSogZXh0L2R2ZHJlYWQvZHZkcmVhZHNyYy5jOiAoX3NlZWtfdGl0bGUpOgotCSAgRXh0cmFjdCBhdWRpbyBzdHJlYW0gbGFiZWwgZnJvbSBEVkQgSUZPIGZpbGVzLgotCSAgSXQgb25seSBkdW1wIHRoZW0gb24gdGhlIGNvbnNvbGUgZm9yIG5vdywgc3RpbGwgaGF2ZSB0bwotCSAgbWFrZSBwbGF5YmluIGF3YXJlIG9mIHRoZW0uCi0KLTIwMDUtMDEtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoc2V0dXBfc291cmNlKToKLQkgIEZpeCBoYW5naW5nIHN1YnMuCi0KLTIwMDUtMDEtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3N0X3BsYXlfYmFzZV9iaW5faW5pdCksCi0JKGdlbl9wcmVyb2xsX2VsZW1lbnQpLCAocmVtb3ZlX2dyb3VwcyksIChzZXR1cF9zdWJ0aXRsZSksCi0JKGdlbl9zb3VyY2VfZWxlbWVudCksIChzZXR1cF9zb3VyY2UpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmg6Ci0JICBNdWx0aXBsZSAuc3ViIGZpbGVzIGlzIGp1c3QgYSBzdHVwaWQgaWRlYS4uLiBGaXggc29tZSB0aHJlYWRpbmcKLQkgIG1pc3Rha2VzLiBJbnRlcmVzdGluZ2x5LCBleHRlcm5hbCAuc3ViIGZpbGVzIGNhdXNlIHBsYXliaW4gdG8KLQkgIGhhbmcsIEkgZG9uJ3Qga25vdyB3aHkuLi4gUGFyc2luZyBmaXhlcyBjb250cmlidXRlZCBieSBGcmFuw6dvaXMKLQkgIEtvb21hbiA8Zmtvb21hbkB0dXhlZC5uZXQ+LgotCi0yMDA1LTAxLTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiB0ZXN0c3VpdGUvZW1iZWQvTWFrZWZpbGUuYW06Ci0JICBGaXggYnVpbGRib3QuCi0KLTIwMDUtMDEtMDkgIEdlcmdlbHkgTmFneSAgPGFsZ2Vybm9uQGJvbmVodW50ZXIucnVsZXoub3JnPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOiAoZ3N0X3BuZ2VuY19jbGFzc19pbml0KSwKLQkoZ3N0X3BuZ2VuY19pbml0KSwgKGdzdF9wbmdlbmNfY2hhaW4pLCAoZ3N0X3BuZ2VuY19nZXRfcHJvcGVydHkpLAotCShnc3RfcG5nZW5jX3NldF9wcm9wZXJ0eSk6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5oOgotCSAgQWRkIGNvbXByZXNzaW9uIGxldmVsIHByb3BlcnR5ICgjMTYzMzIzKS4KLQotMjAwNS0wMS0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXhhbXBsZXMvY2Fwc2ZpbHRlci9jYXBzZmlsdGVyMS5jOiAobWFpbik6Ci0JKiBleGFtcGxlcy9zZWVraW5nL3NwaWRlcl9zZWVrLmM6IChtYWtlX3NwaWRlcl9waXBlbGluZSk6Ci0JKiBleHQvZHZkcmVhZC9NYWtlZmlsZS5hbToKLQkqIGV4dC9kdmRyZWFkL2RlbW8tcGxheToKLQkqIGV4dC9kdmRyZWFkL2RlbW8tcGxheS5jOgotCSogZ2NvbmYvZ3N0cmVhbWVyLnNjaGVtYXMuaW46Ci0JKiBnc3QtbGlicy9nc3QvZ2NvbmYvZ2NvbmYuYzoKLQkqIHN5cy92NGwvVE9ETzoKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9lbWJlZC9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9lbWJlZC9lbWJlZC5jOiAoY2JfZXhwb3NlKSwgKG1haW4pOgotCSAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIHh2aWRlb3NpbmssIGZpeCBleGFtcGxlcyAoIzE0MDg0NSkuCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdyb3VwX2Rlc3Ryb3kpOgotCSAgQXBwYXJlbnRseSwgZGlzcG9zYWwgZG9lcyBub3QgdW5saW5rIC0gc28gZG8gZXhwbGljaXRlbHkuCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19jaGVja19ldmVudCk6Ci0JICBBZGQgZGVidWcuCi0KLTIwMDUtMDEtMDkgIE1hY2llaiBLYXRhZmlhc3ogPG1hdGhyaWNrQGZyZWVkZXNrdG9wLm9yZz4KLQotCSogUkVBRE1FOiBmaXggUEtHX0NPTkZJR19QQVRIIGluc3RydWN0aW9ucywgd2hhdCB3YXMgdGhlcmUKLQlwcmV2aW91c2x5IHdhcyBicmVha2luZyBkZWZhdWx0IHNlYXJjaCBwYXRoLCBub3QgbmljZS4gCi0JRml4ZXMgIzE2MzM1OAotCi0yMDA1LTAxLTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmM6IChnc3RfYXVkaW9zY2FsZV9pbml0KSwKLQkoZ3N0X2F1ZGlvc2NhbGVfY2hhaW4pOgotCSAgJSNeQF4jQF5AI14jQF4jQF5AI15AI15AI15AI14jQF4jQF4jQF5AI14jQCBmaXggc2Vla2luZwotCSAgd2hlbiByZXNhbXBsaW5nIC0gaG93IHRoZSBeQCReIUBeISBpcyB0aGlzIHBvc3NpYmxlPyE/Ci0KLTIwMDUtMDEtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2NoYW5nZV9zdGF0ZSk6Ci0JICBSZXNldCB2YXJpYWJsZXMgb24gUkVBRFkuCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmM6IChnc3RfbWF0cm9za2FfbXV4X3JlcXVlc3RfbmV3X3BhZCksCi0JKGdzdF9tYXRyb3NrYV9tdXhfbG9vcCk6Ci0JICBSZXF1aXJlIGRhdGEgYmVmb3JlIHdyaXRpbmcgaGVhZGVyLgotCi0yMDA1LTAxLTA5ICBGcmFuY2lzIExhYm9udGUgIDxmcmFuY2lzX2xhYm9udGVAaG90bWFpbC5jb20+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NoYWluKToKLQkgIERvbid0IGNhbGwgbWFkX3N0cmVhbV9zeW5jKCkgZGlyZWN0bHkgYWZ0ZXIgcmVjb3ZlcmluZyBzeW5jLgotCSAgRml4ZXMgIzE1MTY2MS4KLQotMjAwNS0wMS0wOSAgTWFydGluIEVpa2VybWFubiAgPG1laWtlckB1cGIuZGU+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9zbmFwc2hvdC9nc3RzbmFwc2hvdC5jOiAoZ3N0X3NuYXBzaG90X2NsYXNzX2luaXQpLAotCShzbmFwc2hvdF9oYW5kbGVyKSwgKGdzdF9zbmFwc2hvdF9zaW5rY29ubmVjdCksCi0JKGdzdF9zbmFwc2hvdF9jaGFpbik6Ci0JICBBbGxvY2F0ZSByZXNvdXJjZXMgd2hlbiByZXF1aXJlZCwgZml4IHJlY3Vyc2l2ZSBzaWduYWwgZW1pc3Npb24KLQkgIGFuZCBmaXggY2Fwcy4gRml4ZXMgIzE2MTY2Ny4KLQotMjAwNS0wMS0wOSAgR2VyZ2VseSBOYWd5ICA8YWxnZXJub25AYm9uZWh1bnRlci5ydWxlei5vcmc+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IChnc3RfcG5nZGVjX3NyY19nZXRjYXBzKSwKLQkoZ3N0X3BuZ2RlY19jaGFpbik6Ci0JICBIYW5kbGUgb25seSA4LWJwcGMgKGJpdHMtcGVyLXBpeGVsLWNvbXBvbmVudCkgaW1hZ2VzLCBiZXR0ZXIKLQkgIGVycm9yIGhhbmRsaW5nIGFuZCBjb3JyZWN0IHN0cmlkZXMuIEZpeGVzICMxNjMxNzcuCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOiAoZ3N0X3BuZ2VuY19zaW5rbGluayksCi0JKGdzdF9wbmdlbmNfY2hhaW4pOgotCSAgQmV0dGVyIGVycm9yIGhhbmRsaW5nLiBGaXhlcyAjMTYzMzQ4LgotCi0yMDA1LTAxLTA5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZHZkbmF2L2R2ZG5hdnNyYy5jOiAoZHZkbmF2c3JjX2dldF90eXBlKSwKLQkoZHZkbmF2c3JjX3VyaV9nZXRfdHlwZSksIChkdmRuYXZzcmNfdXJpX2dldF9wcm90b2NvbHMpLAotCShkdmRuYXZzcmNfdXJpX2dldF91cmkpLCAoZHZkbmF2c3JjX3VyaV9zZXRfdXJpKSwKLQkoZHZkbmF2c3JjX3VyaV9oYW5kbGVyX2luaXQpOgotCSAgQWRkIERWRC1uYXYgVVJJIChkdmRuYXY6Ly8pIGZvciBUb3RlbSB0ZXN0aW5nIHB1cnBvc2VzLgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnZW5fc291cmNlX2VsZW1lbnQpOgotCSAgQWRkIE1NUyB0byBzdHJlYW1pbmcgVVJJcy4KLQotMjAwNS0wMS0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19uYXZpZ2F0aW9uX3NlbmRfZXZlbnQpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzoKLQkoZ3N0X3h2aW1hZ2VzaW5rX25hdmlnYXRpb25fc2VuZF9ldmVudCk6Ci0JICBDaGVjayBmb3IgcGFkIGF2YWlsYWJpbGl0eSBiZWZvcmUgc2VuZGluZyBldmVudC4KLQotMjAwNS0wMS0wOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LXBsdWdpbnMuc3BlYy5pbjoKLQkgIEFkZCBzdWJwYXJzZS4KLQotMjAwNS0wMS0wOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgU2luY2Ugd2UgdXNlIGZ1bmN0aW9ucyBmcm9tIENWUywgdXAgcmVxdWlyZW1lbnQuCi0KLTIwMDUtMDEtMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksCi0JKGdyb3VwX2Rlc3Ryb3kpLCAoZ3JvdXBfY29tbWl0KSwgKGdyb3VwX2lzX211dGVkKSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChhZGRfc3RyZWFtKSwgKHVua25vd25fdHlwZSksCi0JKHByb2JlX3RyaWdnZXJlZCksIChwcmVyb2xsX3VubGlua2VkKSwgKG11dGVfc3RyZWFtKSwKLQkoc2lsZW5jZV9zdHJlYW0pLCAobmV3X2RlY29kZWRfcGFkKSwgKHNldHVwX3N1YnN0cmVhbXMpLAotCShzZXR1cF9zb3VyY2UpLCAoZ2V0X2FjdGl2ZV9zb3VyY2UpLCAobXV0ZV9ncm91cF90eXBlKSwKLQkobXV0ZWRfZ3JvdXBfY2hhbmdlX3N0YXRlKSwgKHNldF9hY3RpdmVfc291cmNlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9wcm9wZXJ0eSksCi0JKHBsYXlfYmFzZV9lb3MpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGFkZF9zaW5rKSwgKHNldHVwX3NpbmtzKToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmM6IChnc3Rfc3RyZWFtX2luZm9fY2xhc3NfaW5pdCksCi0JKGdzdF9zdHJlYW1faW5mb19kaXNwb3NlKSwgKHN0cmVhbV9pbmZvX211dGVfcGFkKSwKLQkoc3RyZWFtX2luZm9fY2hhbmdlX3N0YXRlKSwgKGdzdF9zdHJlYW1faW5mb19zZXRfbXV0ZSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtc2VsZWN0b3IuYzogKGdzdF9zdHJlYW1fc2VsZWN0b3JfZ2V0X3R5cGUpLAotCShnc3Rfc3RyZWFtX3NlbGVjdG9yX2Jhc2VfaW5pdCksIChnc3Rfc3RyZWFtX3NlbGVjdG9yX2NsYXNzX2luaXQpLAotCShnc3Rfc3RyZWFtX3NlbGVjdG9yX2luaXQpLCAoZ3N0X3N0cmVhbV9zZWxlY3Rvcl9kaXNwb3NlKSwKLQkoZ3N0X3N0cmVhbV9zZWxlY3Rvcl9nZXRfbGlua2VkX3BhZCksCi0JKGdzdF9zdHJlYW1fc2VsZWN0b3JfZ2V0X2NhcHMpLCAoZ3N0X3N0cmVhbV9zZWxlY3Rvcl9saW5rKSwKLQkoZ3N0X3N0cmVhbV9zZWxlY3Rvcl9nZXRfbGlua2VkX3BhZHMpLAotCShnc3Rfc3RyZWFtX3NlbGVjdG9yX3JlcXVlc3RfbmV3X3BhZCksIChnc3Rfc3RyZWFtX3NlbGVjdG9yX2NoYWluKToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1zZWxlY3Rvci5oOgotCSAgQWRkaW5nIHN0cmVhbSBzZWxlY3Rpb24gc3VwcG9ydCBwbHVzIHJlcXVpcmVkIHByb3BlcnRpZXMgZm9yCi0JICBhcHBsaWNhdGlvbnMgdG8gdXNlIHRoaXMuIEZ1bGx5IGZpeGVzICMxMDA5MzEuCi0KLTIwMDUtMDEtMDggIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2dhbWVzL2dzdHB1enpsZS5jOiAobmF2X2V2ZW50X2hhbmRsZXIpOgotCSAgLSBoYW5kbGUgbmF2IGV2ZW50cyBkaWZmZXJlbnRseTogZm9yd2FyZCBldmVyeSBldmVudCBubyBtYXR0ZXIgaWYgaXQKLQkgICAgd2FzIGhhbmRsZWQgb3Igbm90LgotCSAgLSB0cmFuc2xhdGUgZXZlbnRzCi0JICBZb3UgY2FuIG5vdyBjaGVhdCBieSB1c2luZyBuYXZpZ2F0aW9udGVzdCAhIHB1enpsZSBhbmQgbW92aW5nIHRoZQotCSAgbW91c2UgY2xvc2UgdG8gdGhlIGVkZ2Ugb2YgYSB0aWxlLiA7KQotCi0yMDA1LTAxLTA4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX3BhZF9uZXcpOgotCSogZXh0L29nZy9nc3RvZ21wYXJzZS5jOiAoZ3N0X29nbV90ZXh0X3BhcnNlX2dldF90eXBlKSwKLQkoZ3N0X29nbV90ZXh0X3BhcnNlX2Jhc2VfaW5pdCksIChnc3Rfb2dtX3RleHRfcGFyc2VfaW5pdCksCi0JKGdzdF9vZ21fcGFyc2VfZ2V0X3NpbmtfcXVlcnl0eXBlcyksIChnc3Rfb2dtX3BhcnNlX3NpbmtfY29udmVydCksCi0JKGdzdF9vZ21fcGFyc2Vfc2lua19xdWVyeSksIChnc3Rfb2dtX3BhcnNlX2NoYWluKSwKLQkoZ3N0X29nbV9wYXJzZV9wbHVnaW5faW5pdCk6Ci0JKiBleHQvcGFuZ28vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0b3ZlcmxheV9saW5rZWRwYWRzKSwKLQkoZ3N0X3RleHRvdmVybGF5X2xpbmspLCAoZ3N0X3RleHRvdmVybGF5X2dldGNhcHMpLAotCShnc3RfdGV4dG92ZXJsYXlfZXZlbnQpLCAoZ3N0X3RleHRvdmVybGF5X3ZpZGVvX2NoYWluKSwKLQkoZ3N0X3RleHRvdmVybGF5X2xvb3ApLCAoZ3N0X3RleHRvdmVybGF5X2luaXQpLCAocGx1Z2luX2luaXQpOgotCSogZXh0L3BhbmdvL2dzdHRleHRvdmVybGF5Lmg6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtKSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50KSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3N5bmNfc3RyZWFtcyksCi0JKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwKSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3N1YnRpdGxlX2NhcHMpLAotCShnc3RfbWF0cm9za2FfZGVtdXhfcGx1Z2luX2luaXQpOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoY2xvc2VfcGFkX2xpbmspOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChyZW1vdmVfZ3JvdXBzKSwgKGFkZF9zdHJlYW0pLAotCShuZXdfZGVjb2RlZF9wYWQpLCAoc2V0dXBfc3VidGl0bGVzKSwgKGdlbl9zb3VyY2VfZWxlbWVudCksCi0JKHNldHVwX3NvdXJjZSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uaDoKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnZW5fdGV4dF9lbGVtZW50KSwgKHNldHVwX3NpbmtzKToKLQkqIGdzdC9zdWJwYXJzZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jOiAoZ3N0X3N1YnBhcnNlX2dldF90eXBlKSwKLQkoZ3N0X3N1YnBhcnNlX2Jhc2VfaW5pdCksIChnc3Rfc3VicGFyc2VfY2xhc3NfaW5pdCksCi0JKGdzdF9zdWJwYXJzZV9pbml0KSwgKGdzdF9zdWJwYXJzZV9mb3JtYXRzKSwKLQkoZ3N0X3N1YnBhcnNlX2V2ZW50bWFzayksIChnc3Rfc3VicGFyc2VfZXZlbnQpLAotCShnc3Rfc3VicGFyc2VfaGFuZGxlX2V2ZW50KSwgKGNvbnZlcnRfZW5jb2RpbmcpLCAoZ2V0X25leHRfbGluZSksCi0JKHBhcnNlX21kdmRzdWIpLCAocGFyc2VfbWR2ZHN1Yl9pbml0KSwgKHBhcnNlX3N1YnJpcCksCi0JKHBhcnNlX3N1YnJpcF9kZWluaXQpLCAocGFyc2Vfc3VicmlwX2luaXQpLCAocGFyc2VfbXBzdWIpLAotCShwYXJzZV9tcHN1Yl9kZWluaXQpLCAocGFyc2VfbXBzdWJfaW5pdCksCi0JKGdzdF9zdWJwYXJzZV9idWZmZXJfZm9ybWF0X2F1dG9kZXRlY3QpLAotCShnc3Rfc3VicGFyc2VfZm9ybWF0X2F1dG9kZXRlY3QpLCAoZ3N0X3N1YnBhcnNlX2xvb3ApLAotCShnc3Rfc3VicGFyc2VfY2hhbmdlX3N0YXRlKSwgKGdzdF9zdWJwYXJzZV90eXBlX2ZpbmQpLAotCShwbHVnaW5faW5pdCk6Ci0JKiBnc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuaDoKLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAob2dtdGV4dF90eXBlX2ZpbmQpLAotCShwbHVnaW5faW5pdCk6Ci0JICBBZGQgc3VidGl0bGUgc3VwcG9ydCwgLnN1YiBwYXJzZXIgKHN1cHBvcnRzIFNSVCBhbmQgTVBzdWIpLAotCSAgT0dNIHRleHQgc3VwcG9ydCwgTWF0cm9za2EgVVRGLTggdGV4dCBzdXBwb3J0LCBkZWFkbG9jayBmaXhlcwotCSAgYWxsIG92ZXIgdGhlIHBsYWNlLCBzdWJ0aXRsZSBhd2FyZW5lc3MgaW4gZGVjb2RlYmluL3BsYXliaW4KLQkgIGFuZCBzb21lIGZpeGVzIHRvIHRleHRvdmVybGF5IHRvIGhhbmRsZSBzdWJ0aXRsZXMgaW4gYSBzdHJlYW0KLQkgIGNvcnJlY3RseS4gRml4ZXMgIzEwMDkzMS4KLQotMjAwNS0wMS0wOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfc3JjX3F1ZXJ5KToKLQkgIENoZWNrIGZvciBwYWQgYXZhaWxhYmlsaXR5IGJlZm9yZSBkb2luZyBhIHF1ZXJ5IG9uIGl0LgotCi0yMDA1LTAxLTA4ICBTdGVwaGFuZSBMT0VVSUxMRVQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6Ci0JICByZWFsbHkgZml4IGJwcDI0LzMyIGR2ZGVjIGNhcHMgKGNsYXNzaWMgcmdiYSBpbmRlZWQpCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzoKLQkoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX2V4dF9jb250ZW50X2Rlc2MpOgotCSAgZG9uJ3Qgc2VuZCB0ZXh0IHRhZ3MgaWYgdGhleSBhcmUgZW1wdHkgKGJpcyByZXBldGl0YSkKLQotMjAwNS0wMS0wOCAgU3RlcGhhbmUgTE9FVUlMTEVUICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSByZW1vdmUgdW5uZWVkZWQgY29tbWVudCBmcm9tIGR2ZGVjCi0JICAocmVsYXRlZCB0byBEViA0Q0MgY29kZXMgaW4gQVZJIGZpbGVzKQotCSAgbW92ZWQgdGhlbSBpbiBnc3RyZWFtZXIvZG9jcy9yYW5kb20vbWltZXR5cGVzCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzoKLQkoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX2V4dF9jb250ZW50X2Rlc2MpOgotCSBkb24ndCBzZW5kIHRleHQgdGFncyBpZiB0aGV5IGFyZSBlbXB0eQotCSBmaXggbWVtIGxlYWsgb24gZXJyb3IgcGF0aAotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvYXZjb2RlYy5oOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29kZWNtYXAuYzoKLQkoZ3N0X2ZmbXBlZ19waXhmbXRfdG9fY2FwcyksIChnc3RfZmZtcGVnX2NhcHNfdG9fcGl4Zm10KSwKLQkoZ3N0X2ZmbXBlZ2NzcF9hdnBpY3R1cmVfZmlsbCk6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0LmM6IChpbWdfZ2V0X2FscGhhX2luZm8pOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydF90ZW1wbGF0ZS5oOgotCSBhZGRzIEJHUjMyIGFuZCBCR1JBMzIgdG8gZmZtcGVnY29sb3JzcGFjZQotCSAgKHN0aWxsIGJhZCBjb2xvcnMsIGZpeGluZyBpdCBvbiBuZXh0IGNvbW1pdCkKLQkgIGhlbHBzIHdpdGggZHZkZWMgb3V0cHV0aW5nIEJHUjMyCi0KLTIwMDUtMDEtMDggIFN0ZXBoYW5lIExPRVVJTExFVCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzoKLQkgRml4IGF1ZGlvIGNhcHMgaSBqdXN0IGJyb2tlIChtaXNzaW5nICcsJykKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfZ2V0X3R5cGUpLAotCShnc3RfbWF0cm9za2FfbXV4X3Jlc2V0KToKLQkgRml4IHR5cG8gKyBhZGQgRklYTUUgYWJvdXQgb2xkICJ4LWdzdC1tZXRhZGF0YSIgY3JhcAotCi0yMDA1LTAxLTA3ICBTdGVwaGFuZSBMT0VVSUxMRVQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L2R2L2RlbW8tcGxheS5jOiAobWFpbik6Ci0JIHh2aWRlb3NpbmsgLT4geHZpbWFnZXNpbmsKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOgotCSBjaGFuZ2UgcmdiIDMyLzMyIGNhcHMgdG8gMjQvMzIgKG5vIGFscGhhKQotCSBjaGFuZ2UgbmIgb2YgY2hhbm5lbHMgdG8gYmUgYSBsaXN0ICgyIG9yIDQsIG5vdCAyKQotCSBjaGFuZ2Ugc2FtcGxlIHJhdGUgdG8gYmUgYSBsaXN0ICgzMiwgNDQuMSwgNDgga0h6KSBub3QgYSByYW5nZQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6Ci0JKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19leHRfY29udGVudF9kZXNjKToKLQkgQWRkICdkYXRlL3llYXInIHRvIGV4dHJhY3RlZCBtZXRhZGF0YSBsaXN0Ci0KLTIwMDUtMDEtMDcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9maXhhdGUpOgotCSAgVGhlIHJldHVybiB2YWx1ZSBvZiBmaXhhdGVfdG8gZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgcmVxdWVzdGVkCi0JICB2YWx1ZSB3YXMgc2V0LCBzbyBkb24ndCBhc3N1bWUuCi0KLTIwMDUtMDEtMDcgIEdlcmdlbHkgTmFneSAgPGFsZ2Vybm9uQGJvbmVodW50ZXIucnVsZXoub3JnPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2RlYy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogKGdzdF9wbmdlbmNfYmFzZV9pbml0KSwKLQkoZ3N0X3BuZ2VuY19zaW5rbGluayksIChnc3RfcG5nZW5jX2luaXQpLCAoZ3N0X3BuZ2VuY19jaGFpbik6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5oOgotCSAgQWxwaGEgc3VwcG9ydCAoZW5jb2RlcjsgIzE2MzE2MSksIG1pbWUgZml4YWdlLgotCi0yMDA1LTAxLTA3ICBTZWJhc3RpZW4gQ290ZSAgPHNjNUBoZXJtZXMudXNoZXJiLmNhPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmFhYy9nc3RmYWFjLmM6IChnc3RfZmFhY19vdXRwdXRmb3JtYXRfZ2V0X3R5cGUpLAotCShnc3RfZmFhY19jbGFzc19pbml0KSwgKGdzdF9mYWFjX2luaXQpLCAoZ3N0X2ZhYWNfc3JjY29ubmVjdCksCi0JKGdzdF9mYWFjX3NldF9wcm9wZXJ0eSksIChnc3RfZmFhY19nZXRfcHJvcGVydHkpOgotCSogZXh0L2ZhYWMvZ3N0ZmFhYy5oOgotCSAgQWxsb3cgZm9yIEFEVFMgb3V0cHV0ICgjMTUzNDM0KS4KLQotMjAwNS0wMS0wNyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOiAoZ3N0X3Y0bDJzcmNfZ2V0Y2Fwcyk6Ci0JICBGaXggYWdhaW5zdCB0ZW1wbGF0ZSAoIzE1MDU3NikuCi0KLTIwMDUtMDEtMDYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2dhbWVzL2dzdHB1enpsZS5jOiAoZHJhd19wdXp6bGUpOgotCSAgZG9uJ3QgZHJhdyBhIHB1enpsZSBpZiBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IG9mIHRpbGVzIHdvdWxkIGJlIDAuCi0KLTIwMDUtMDEtMDYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2dhbWVzL2dzdHB1enpsZS5jOiAoZ3N0X3B1enpsZV9nZXRfdHlwZSksCi0JKGdzdF9wdXp6bGVfY2xhc3NfaW5pdCksIChnc3RfcHV6emxlX2ZpbmFsaXplKToKLQkgIG5vIG1lbWxlYWtzLCBwbGVhc2UKLQkoZ3N0X3B1enpsZV9jcmVhdGUpLCAoZ3N0X3B1enpsZV9pbml0KSwKLQkoZ3N0X3B1enpsZV9zZXRfcHJvcGVydHkpLCAoZ3N0X3B1enpsZV9zZXR1cCk6Ci0JICBjaGFuZ2UgaW5pdGlhbGl6YXRpb24gY29kZSBhcm91bmQgc28gd2UgZG9uJ3QgcmVzaHVmZmxlIG9uIHJlc2l6ZQotCShkcmF3X3B1enpsZSk6Ci0JICBmaXggYW5vdGhlciBzdHVwaWQgdHlwbwotCi0yMDA1LTAxLTA2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nYW1lcy9nc3R2aWRlb2ltYWdlLmM6IChjb3B5X2hsaW5lX1lVWTIpOgotCSAgZml4IHN0dXBpZCB0eXBvIHRoYXQgYm9ya2VkIGNvcHlpbmcgb24gWVVZMgotCi0yMDA1LTAxLTA2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nYW1lcy9nc3RwdXp6bGUuYzogKGRyYXdfcHV6emxlKToKLQkgIGZpeCBlZGdlcyB3aGVuIGltYWdlIHNpemVzIGFyZW4ndCBtdWx0aXBsZXMgb2YgdGlsZSBzaXplcwotCi0yMDA1LTAxLTA2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9nYW1lcy9nc3RwdXp6bGUuYzogKGdzdF9wdXp6bGVfYmFzZV9pbml0KToKLQkgIG1ha2UgUkdCIGVuZGlhbm5lc3Mgd29yayBjb3JyZWN0bHkKLQkoZ3N0X3B1enpsZV9zaG93KSwgKGdzdF9wdXp6bGVfc3dhcCksIChnc3RfcHV6emxlX21vdmUpOgotCSAgcmVmYWN0b3IgYW5kIGZpeCByYWNlIHdpdGggaW5pdGlhbCBzaHVmZmxpbmcKLQkobmF2X2V2ZW50X2hhbmRsZXIpOgotCSAgYWxsb3cgdXNpbmcgdGhlIG1vdXNlIHRvIHB1enpsZQotCShkcmF3X3B1enpsZSk6Ci0JICBpbnNpc3Qgb24gdGlsZXMgaGF2aW5nIHdpZHRoIGFuZCBoZWlnaHQgYXMgbXVsdGlwbGVzIG9mIDQgdG8gZ2V0Ci0JICBjbGVhbiBZVVYgaW1hZ2UgaGFuZGxpbmcKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9uZXcpLAotCShnc3RfeHZpbWFnZXNpbmtfaGFuZGxlX3hldmVudHMpLCAoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JICBzL0RFQlVHL0xPRy8gZm9yIGNvbW1vbiBtZXNzYWdlcwotCShnc3RfeHZpbWFnZXNpbmtfbmF2aWdhdGlvbl9zZW5kX2V2ZW50KToKLQkgIGZpeCBtb3VzZSBldmVudCB0cmFuc2xhdGlvbiB0byBub3QgaW5jbHVkZSBzY3JlZW4gUEFSCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX25hdmlnYXRpb25fc2VuZF9ldmVudCk6Ci0JICBmaXggbW91c2UgZXZlbnQgdHJhbnNsYXRpb24gdG8gYWN0dWFsbHkgd29yawotCi0yMDA1LTAxLTA2ICBTdGVwaGFuZSBMT0VVSUxMRVQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6Ci0JKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19leHRfY29udGVudF9kZXNjKToKLQkgRXh0cmFjdCBUcmFja051bWJlciBtZXRhZGF0YSArIGNsZWFuIHVwIGNvZGUKLQkqIGdzdC9nYW1lcy9nc3R2aWRlb2ltYWdlLmM6IChnc3RfdmlkZW9faW1hZ2VfZHJhd19yZWN0YW5nbGUpOgotCSBIb3BlIHRoaXMgaXMgdGhlIGdvb2QgZml4ICh2YXIgdXNlZCB1bml0aWFsaXNlZCkKLQotMjAwNS0wMS0wNiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfY2hhaW4pOgotCSAgT25seSBpbmNyZW1lbnQgdGltZXN0YW1wIGlmIGl0J3MgdmFsaWQuIEZpeGVzIHJhdyBBQUMgc3RyZWFtcy4KLQotMjAwNS0wMS0wNiAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvZ2FtZXMvTWFrZWZpbGUuYW06Ci0JKiBnc3QvZ2FtZXMvZ3N0cHV6emxlLmM6Ci0JICBhZGQgYSBwdXp6bGUgZ2FtZSB3aXRoLi4uCi0JKiBnc3QvZ2FtZXMvZ3N0dmlkZW9pbWFnZS5jOgotCSogZ3N0L2dhbWVzL2dzdHZpZGVvaW1hZ2UuaDoKLQkgIC4uLiBmdWxsIGNvbG9yc3BhY2Ugc3VwcG9ydCAodGhhdCBpbmNsdWRlcyBZVVY5IGFuZCBSR0IxNikpIHN0b2xlbgotCSAgZnJvbSB2aWRlb3Rlc3RzcmMgYW5kIG1hZGUgaW50byBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSBhIG5pY2UKLQkgIGxpYnJhcnkgZm9yIGEgbG90IG9mIG90aGVyIHBsdWdpbnMuCi0KLTIwMDUtMDEtMDYgIFN0ZXBoYW5lIExPRVVJTExFVCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JIGRvbid0IGNvbXBpbGUgZmFhZCBwbHVnaW4gaWYgYSBSQyBvZiAyLjAgaXMgZm91bmQKLQkgRml4ZXMgIzE1NTM0NiAoYW5kIEZDMSBidWlsZGJvdCkKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOgotCShnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfZXh0X2NvbnRlbnRfZGVzYyk6Ci0JIHRyeSB0byBtYWtlIFNvbGFyaXMgY29tcGlsZXIgaGFwcGllcgotCi0yMDA1LTAxLTA2ICBQYXVsIEphY2sgIDxwamFja0BzZmFmLm9yZz4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90LmM6IChnc3Rfc25hcHNob3RfY2xhc3NfaW5pdCk6Ci0JICBGaXggc2VnZmF1bHQgKCMxNjE2NjcpLgotCi0yMDA1LTAxLTA1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19nZXRjYXBzKToKLQkgIEZpeCBmcmFtZXJhdGUgcmVwb3J0aW5nLgotCi0yMDA1LTAxLTA1ICBTdGVwaGFuZSBMT0VVSUxMRVQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1pZHMuaDoKLQkqIGdzdC93YXZlbmMvcmlmZi5oOgotCSBBZGQgQU1SIChWQlIgYW5kIENCUikgaWRzIHRvIHJpZmYuaCBhdWRpbyBjb2RlYyBsaXN0Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzoKLQkoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX2V4dF9jb250ZW50X2Rlc2MpLAotCShnc3RfYXNmX2RlbXV4X3Byb2Nlc3Nfb2JqZWN0KToKLQkgIFJldHJpZXZlIG1vcmUgdGFncyBmcm9tIEFTRiBmaWxlcyAoR2VucmUsIEFsYnVtVGl0bGUsIEFydGlzdCkKLQotMjAwNS0wMS0wNSAgTWFydGluIEVpa2VybWFubiAgPG1laWtlckB1cGIuZGU+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6IChnc3RfZHZkX2RlbXV4X2NsYXNzX2luaXQpLAotCShnc3RfZHZkX2RlbXV4X2hhbmRsZV9kaXNjb250KToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfY2xhc3NfaW5pdCksCi0JKGdzdF9tcGVnX2RlbXV4X2hhbmRsZV9kaXNjb250KToKLQkgIFJlY3JlYXRlIHBhZHMgb24gbmV3LW1lZGlhICgjMTYwNzMwKS4KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfbmV3X3BhZCk6Ci0JICBTZW5kIGRpc2NvbnQgZXZlbiBpZiBtYW5hZ2VyIGNoYW5nZXMgdGltZXN0YW1wcyAoIzE2MTkyOSkuCi0KLTIwMDUtMDEtMDUgIFNlYmFzdGllbiBDb3RlICA8c2M1QGhlcm1lcy51c2hlcmIuY2E+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9yZXNhbXBsZS5jOiAoZ3N0X3Jlc2FtcGxlX3NpbmNfZnRfczE2KToKLQkgIEZpeCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgKCMxNTkyMTEpLgotCi0yMDA1LTAxLTA1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleGFtcGxlcy9nc3RwbGF5L3BsYXllci5jOiAobWFpbik6Ci0JICBEb24ndCBpdGVyYXRlLgotCSogZXhhbXBsZXMvc2Vla2luZy9zZWVrLmM6IChmaXhhdGUpLCAobWFrZV9wbGF5ZXJiaW5fcGlwZWxpbmUpOgotCSAgQWRkIHZpc3VhbGl6YXRpb25zLgotCSogZXh0L2E1MmRlYy9nc3RhNTJkZWMuYzogKGdzdF9hNTJkZWNfcHVzaCksCi0JKGdzdF9hNTJkZWNfaGFuZGxlX2ZyYW1lKToKLQkgIFNldCBkdXJhdGlvbi4KLQkqIGV4dC9kdmRuYXYvZ3N0LWR2ZDoKLQkgIEFkZCBhdWRpb2NvbnZlcnQuIEZpeGVzICMxNjEzMjUuCi0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmM6IChkdmRyZWFkc3JjX2dldCk6Ci0JICBFeHBsaWNpdGVseSBjYXNlIHRvIGdpbnQ2NC4gUG9zc2libGUgdmFsZ3JpbmQgZXJyb3IuCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChjYXBzX3NldCksIChzZXR1cF9zaXplKSwKLQkoZ3N0X3BsYXlfdGlja19jYWxsYmFjayksIChnc3RfcGxheV9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfcGxheV9kaXNwb3NlKSwgKGdzdF9wbGF5X2luaXQpLCAoZ3N0X3BsYXlfY2xhc3NfaW5pdCksCi0JKGdzdF9wbGF5X3NldF9sb2NhdGlvbiksIChnc3RfcGxheV9nZXRfbG9jYXRpb24pLAotCShnc3RfcGxheV9zZWVrX3RvX3RpbWUpLCAoZ3N0X3BsYXlfc2V0X2RhdGFfc3JjKSwKLQkoZ3N0X3BsYXlfc2V0X3ZpZGVvX3NpbmspLCAoZ3N0X3BsYXlfc2V0X2F1ZGlvX3NpbmspLAotCShnc3RfcGxheV9zZXRfdmlzdWFsaXphdGlvbiksIChnc3RfcGxheV9jb25uZWN0X3Zpc3VhbGl6YXRpb24pLAotCShnc3RfcGxheV9nZXRfZnJhbWVyYXRlKSwgKGdzdF9wbGF5X2dldF9hbGxfYnlfaW50ZXJmYWNlKSwKLQkoZ3N0X3BsYXlfbmV3KToKLQkgIFVzZSBwbGF5YmluLiBGaXhlcyAjMTM5NzQ5IGFuZCAjMTQ3NzQ0LgotCSogZ3N0L2FwZXRhZy9hcGVkZW11eC5jOiAoZ3N0X2FwZV9kZW11eF9wYXJzZV90YWdzKToKLQkgIEFkZCBnZW5yZSB0YWcuCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmM6IChnc3RfYXVkaW9zY2FsZV9tZXRob2RfZ2V0X3R5cGUpLAotCShhdWRpb3NjYWxlX2dldF90eXBlKSwgKGdzdF9hdWRpb3NjYWxlX2Jhc2VfaW5pdCksCi0JKGdzdF9hdWRpb3NjYWxlX2NsYXNzX2luaXQpLCAoZ3N0X2F1ZGlvc2NhbGVfZXhwYW5kX2NhcHMpLAotCShnc3RfYXVkaW9zY2FsZV9nZXRjYXBzKSwgKGdzdF9hdWRpb3NjYWxlX2ZpeGF0ZSksCi0JKGdzdF9hdWRpb3NjYWxlX2xpbmspLCAoZ3N0X2F1ZGlvc2NhbGVfZ2V0X2J1ZmZlciksCi0JKGdzdF9hdWRpb3NjYWxlX2RlY3JlYXNlX3JhdGUpLCAoZ3N0X2F1ZGlvc2NhbGVfaW5jcmVhc2VfcmF0ZSksCi0JKGdzdF9hdWRpb3NjYWxlX2luaXQpLCAoZ3N0X2F1ZGlvc2NhbGVfZGlzcG9zZSksCi0JKGdzdF9hdWRpb3NjYWxlX2NoYWluKSwgKGdzdF9hdWRpb3NjYWxlX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9hdWRpb3NjYWxlX2dldF9wcm9wZXJ0eSksIChwbHVnaW5faW5pdCk6Ci0JICBJbmRlbnQgcHJvcGVybHkuCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOiAoZ3N0X2R2ZF9kZW11eF9wcm9jZXNzX3ByaXZhdGUpOgotCSAgRml4IExQQ00uCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X3BhcnNlX3VkdGEpLAotCShxdGRlbXV4X3RhZ19hZGRfc3RyKSwgKHF0ZGVtdXhfdGFnX2FkZF9udW0pLAotCShxdGRlbXV4X3RhZ19hZGRfZ25yZSksIChxdGRlbXV4X3ZpZGVvX2NhcHMpOgotCSAgQWRkIG1vcmUgbWV0YWRhdGEgKGZpeGVzICMxNjI2NTYpLgotCi0yMDA1LTAxLTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBiYWNrIHRvIGN2cwotCi09PT0gcmVsZWFzZSAwLjguNyA9PT0KLQotMjAwNS0wMS0wNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogTkVXUzoKLQkqIFJFTEVBU0U6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICByZWxlYXNpbmcgMC44LjcsICJIeXBlcnNwYWNlIgotCi0yMDA1LTAxLTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JcGF0Y2ggYnk6IFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0LmkubUB6ZW4uY28udWs+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOgotCSBGaXggZm9yICMxNjI5MjQgLSBmcmVlIGNhcHMgYWZ0ZXIgdXNlLCBub3QgYmVmb3JlCi0KLTIwMDUtMDEtMDQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlwYXRjaCBieTogUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzoKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgRml4IGZvciAjMTU0NzczIC0gZml4ZXMgcGxheWJhY2sgb2Ygc21hbGwgLndhdiBmaWxlcwotCi0yMDA1LTAxLTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JcGF0Y2ggYnk6IFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOgotCSAgRml4IGZvciAjMTYyODE5IC0gbWFrZSBhdWRpb3NjYWxlIHJldXNhYmxlCi0JICBGaXhlcyBwbGF5YmFjayBvZiBtb3JlIHRoYW4gb25lIGZpbGUgd2l0aCBwbGF5YmluL3RvdGVtCi0KLTIwMDQtMTItMjkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2F2Y29kZWMuaDoKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0LmM6Ci0JICBjbGVhbiB1cCB0aGUgbWVzcyB0aGF0IG1hZGUgbWUgY3J5IGFuZCBhdm9pZCBuZWVkbGVzcyBkdXBsaWNhdGlvbgotCi0yMDA0LTEyLTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0LmM6Ci0JICBnaXZlIHNvbWUgaW5kaWNhdGlvbiBvZiB3aHkgd2UncmUgc2VnZmF1bHRpbmcKLQotMjAwNC0xMi0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgRml4IGluZGVudGF0aW9uLCBmaXggdjRsMiBwbHVnaW4gZGV0ZWN0aW9uLgotCSogZXh0L01ha2VmaWxlLmFtOgotCSAgRml4IGxpYm1tcyBsb2NhdGlvbiAoTWFjaWVqLCB1c2UgZGlmZiAtdSEpLgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfaW5pdCk6Ci0JICBJbml0aWFsaXplIGNhcHMgY2FjaGUgdG8gTlVMTC4KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKToKLQkgIE9ubHkgY2hhbmdlIHN0YXRlIG9uIGF1ZGlvc2luayBpZiBpdCBleGlzdHMuCi0KLTIwMDQtMTItMjggIE1hY2llaiBLYXRhZmlhc3ogIDxtYXRocmlja0BtYXRocmljay5vcmc+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4Lmg6Ci0JRml4IFZvcmJpcyBzdHJlYW1zIGZhaWxpbmcgdG8gZGVjb2RlIGluIHNvbWUgZmlsZXMsIHdoZXJlIGNsdXN0ZXJfdGltZQotCWlzbid0IDAsIGJlY2F1c2UgdGhlbiBpdCBkb2Vzbid0IHNlbmQgY29kZWNfcHJpdiBiZWZvcmUgYWN0dWFsIGRhdGEuCi0JUmVtb3ZlIHRpbWUtYmFzZWQgdGVzdCBhbmQgcmVwbGFjZSBpdCB3aXRoIG1hcmtlciBzZXQgb24gYmVnaW5uaW5nIG9mCi0JbmV3IHN0cmVhbQotCi0yMDA0LTEyLTI4ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQlNZXJnZSBwYXRjaCBmcm9tIFJvbmFsZCBmaXhpbmcgcHJvYmxlbXMgd2l0aCBzdHJlYW1pbmcKLQl0ZXh0LgotCSogZXh0L2NhaXJvL2dzdGNhaXJvLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0b3ZlcmxheV9yZW5kZXJfdGV4dCksCi0JKGdzdF90ZXh0X292ZXJsYXlfYmxpdF8xKSwgKGdzdF90ZXh0X292ZXJsYXlfYmxpdF9zdWIyeDIpLAotCShnc3RfdGV4dG92ZXJsYXlfdmlkZW9fY2hhaW4pLCAoZ3N0X3RleHRvdmVybGF5X2xvb3ApLAotCShnc3RfdGV4dG92ZXJsYXlfZm9udF9pbml0KSwgKGdzdF90ZXh0b3ZlcmxheV9pbml0KSwKLQkoZ3N0X3RleHRvdmVybGF5X3NldF9wcm9wZXJ0eSk6Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuaDoKLQotMjAwNC0xMi0yNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogKGdzdF90ZXh0b3ZlcmxheV9yZW5kZXJfdGV4dCksCi0JKGdzdF90ZXh0X292ZXJsYXlfYmxpdF8xKSwgKGdzdF90ZXh0X292ZXJsYXlfYmxpdF9zdWIyeDIpLAotCShnc3RfdGV4dG92ZXJsYXlfdmlkZW9fY2hhaW4pLCAoZ3N0X3RleHRvdmVybGF5X2xvb3ApLAotCShnc3RfdGV4dG92ZXJsYXlfZm9udF9pbml0KSwgKGdzdF90ZXh0b3ZlcmxheV9pbml0KSwKLQkoZ3N0X3RleHRvdmVybGF5X3NldF9wcm9wZXJ0eSk6IEltcHJvdmVtZW50cyB0byBhY3R1YWxseQotCXJlbmRlciB0ZXh0IGFzIHdoaXRlIG9uIGJsYWNrIG91dGxpbmUgb24gdmlkZW8sIGluY2x1ZGluZwotCWZvbnQgc2VsZWN0aW9uIGFuZCBob3Jpem9udGFsL3ZlcnRpY2FsIGFsaWdubWVudC4gIChSb25hbGQncwotCWNocmlzdG1hcyBwcmVzZW50KQotCSogZXh0L2NhaXJvL2dzdHRleHRvdmVybGF5Lmg6Ci0KLTIwMDQtMTItMjYgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvb2dnL2dzdG9nZy5jOgotCSogZXh0L29nZy9nc3RvZ21wYXJzZS5jOgotCSAgZml4IG9nbVthdWRpby92aWRlb11wYXJzZSBwbHVnaW4gcmVnaXN0cmF0aW9uCi0JICAocmlmZiB3b24ndCBsb2FkIGlmIGJ5dGVzdHJlYW0gaXMgYWxyZWFkeSBsb2FkZWQpCi0KLTIwMDQtMTItMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0Y2hhbm5lbG1peC5jOgotCSAgZml4IGZvciBHTElCIDwgMi40Ci0KLTIwMDQtMTItMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmFjOgotCSAgZGlzYWJsZSBkb2NzIGFnYWluIHVudGlsIGl0IGFjdHVhbGx5IHBhc3NlcyBtYWtlIGRpc3RjaGVjay4KLQotMjAwNC0xMi0yNCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF90eXBlX2dldCksIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChxM2dwX3R5cGVfZmluZCksCi0JKHBsdWdpbl9pbml0KToKLQkgIEFkZCAzR1AgKHZhcmlhYmxlcyBuYW1lIFEzR1AgYmVjYXVzZSB0aGV5IGNhbid0IHN0YXJ0IHdpdGggYQotCSAgbnVtYmVyKS4gQWRkIHNhbXIgYXVkaW8gZm91cmNjICh1c2VkIGluIC4zZ3AgZmlsZXMpLCBkZWNvZGVyCi0JICBpcyB3b3JrIGluIHByb2dyZXNzLiBBbHNvIGRvIGEgR1NUX1dBUk5JTkcgaW5zdGVhZCBvZiBFUlJPUgotCSAgaW4gY2FzZSBvZiB1bmtub3duIG5vZGVzLCB0byBkZWNyZWFzZSBvdXRwdXQuCi0KLTIwMDQtMTItMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSAgcmVhbGx5IGZpeCBkaXN0Ci0KLTIwMDQtMTItMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5oOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JICBGaXhlcyAjMTU4MzgyLiAgTWFrZSBzcGVleCBwbHVnaW4gY29tcGF0aWJsZSB3aXRoIGJvdGggMS4wIGFuZCAxLjEuCi0JICBGaXggZGV0ZWN0aW9uIGNvZGUgaW4gY29uZmlndXJlLmFjCi0KLTIwMDQtMTItMjMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cCk6Ci0JICBTYXZlIHBvc2l0aW9uLCBzbyB0aGF0IHF1ZXJpZXMgZ2l2ZSBwcm9wZXIgcmV0dXJuIHZhbHVlcy4gRG9uJ3QKLQkgIGtub3cgaG93IHRoaXMgY291bGQgZXZlciBoYXZlIHdvcmtlZCBiZWZvcmUuLi4KLQotMjAwNC0xMi0yMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgUHV0IGFkZGl0aW9uYWwgTEFNRSBjaGVjayBpbnNpZGUgdGhlIGNvbmRpdGlvbmFsLiAgRml4ZXMgIzE1MjMzOQotCi0yMDA0LTEyLTIzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX3NjYW4pOgotCSAgQWRkIHNvbWUgbW9yZSBkZWJ1Zy4gRml4IGxvZ2ljIGVycm9yIHdoZW4gc2V0dGluZyBtb3ZpIG9mZnNldAotCSAgd2hpbGUgcmVhZGluZyBpbmRleC4KLQotMjAwNC0xMi0yMyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpLAotCShnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspLAotCShnc3RfYXZpX2RlbXV4X3Byb2Nlc3NfbmV4dF9lbnRyeSk6Ci0JICBBZGQgc29tZSBkZWJ1Z2dpbmcuIEJldHRlciBkZXRlY3Rpb24gb2YgYnJva2VuIGluZGV4ZXMgYW5kIHRoZQotCSAgYWNjb21wYW55aW5nIGluZGV4IHJlY292ZXJ5LiBObyBpbmZpbml0ZSBsb29wcyBvbiBzdGF0ZSBjaGFuZ2VzCi0JICB3aGVuIHdlJ3JlIHN0aWxsIGluIG91ciBsb29wZnVuY3Rpb24uCi0KLTIwMDQtMTItMjIgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEZpeCB1cC4KLQotMjAwNC0xMi0yMiAgQXJjaGFuYSBTaGFoICA8YXJjaGFuYS5zaGFoQHdpcHJvLmNvbT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VubWl4ZXIuYzogKGdzdF9zdW5hdWRpb21peGVyX3NldF92b2x1bWUpOgotCSAgTm9ybWFsaXppbmcgdGhlIHZhbHVlIGJlZm9yZSBzZXR0aW5nCi0JKGdzdF9zdW5hdWRpb21peGVyX2dldF92b2x1bWUpOgotCSAgTm9ybWFsaXppbmcgdGhlIHZhbHVlIGFmdGVyIGdldHRpbmcuIEZpeGVzIGJ1ZyMgMTYxOTgwCi0KLTIwMDQtMTItMjIgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBNYWtlZmlsZS5hbTogTWFrZSBzdXJlIGRvY3MgZ2V0cyBkaXN0ZWQKLQkqIGRvY3MvTWFrZWZpbGUuYW06IE1ha2Ugc3VyZSBhbGwgbmVlZGVkIGZpbGVzIGdldCBkaXN0ZWQKLQkqIGdzdC1wbHVnaW5zLnNwZWMuaW46IGxhdGVzdCB1cGRhdGVzCi0KLTIwMDQtMTItMjIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2FkZF9lbGVtZW50KToKLQlSZXZlcnQgcGF0Y2ggMS4zOCBhcyBjbG9jayBkaXN0cmlidXRpb24gb3ZlciBzY2hlZHVsZXJzIGRvZXMKLQlub3Qgd29yayBjb3JyZWNseSBpbiB0aGUgY29yZSB5ZXQuCi0KLTIwMDQtMTItMjEgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBzeXMvb3NzL1JFQURNRTogcmVtb3ZlIHRoaXMgZmlsZSwgd2hpY2ggcHJlZGF0ZXMgbXkgYmlydGgKLQkgIChhbmQgd2hpY2ggY29udGVudCBpcyBieSBmYXIgb3V0ZGF0ZWQpCi0KLTIwMDQtMTItMjAgIFN0ZWZhbiBLb3N0ICA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogY29uZmlndXJlLmFjOgotCSogZG9jcy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9NYWtlZmlsZS5hbToKLQkqIGRvY3MvbGlicy9nc3QtcGx1Z2lucy1saWJzLWRvY3Muc2dtbDoKLQkqIGRvY3MvbGlicy9nc3QtcGx1Z2lucy1saWJzLXNlY3Rpb25zLnR4dDoKLQkqIGRvY3MvbGlicy90bXBsL2dzdGdjb25mLnNnbWw6Ci0JKiBkb2NzL3VwbG9hZC5tYWs6Ci0JKiBkb2NzL3ZlcnNpb24uZW50aXRpZXMuaW46Ci0JICBBZGRlZCBib2lsZXJwbGF0ZSBndGstZG9jIGZpbGVzIGZvciBwbHVnaW4tbGlicyBkb2N1bWVudGF0aW9uLgotCi0yMDA0LTEyLTE5ICBTdGVwaGFuZSBMb2V1aWxsZXQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOiBmaXggaW50IGFuZCBmbG9hdCBhdWRpbyBjYXBzCi0KLTIwMDQtMTItMTkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvZ3N0djRsZWxlbWVudC5jOiAoZ3N0X3Y0bF9pZmFjZV9zdXBwb3J0ZWQpOgotCSogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuYzogKGdzdF92NGwyX2lmYWNlX3N1cHBvcnRlZCk6Ci0JICBnX2Fzc2VydCgpIGNhbiBiZSBhIG1hY3JvLCBkb24ndCB1c2UgI2lmZGVmIGluc2lkZSBpdC4KLQotMjAwNC0xMi0xOSAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6IChnc3RfdmlkZW9yYXRlX2JsYW5rX2RhdGEpLAotCShnc3RfdmlkZW9yYXRlX2luaXQpLCAoZ3N0X3ZpZGVvcmF0ZV9jaGFpbiksCi0JKGdzdF92aWRlb3JhdGVfY2hhbmdlX3N0YXRlKToKLQkgIEV2ZW50IGhhbmRsaW5nIChmaXhlcyAjMTU5OTg2KS4KLQotMjAwNC0xMi0xOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwc193aXRoX2RhdGEpOgotCSAgQWRkIEJMWjAgKEJsaXp6YXJkJ3MgdmVyc2lvbiBvZiBEaXZYKSBmb3VyY2MuCi0KLTIwMDQtMTItMTggIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3R0YS9nc3R0dGFkZWMuYzogKGdzdF90dGFfZGVjX2xpbmspOiBBbmQgeWV0IGFub3RoZXIKLQlwb3J0YWJpbGl0eSBmaXguCi0KLTIwMDQtMTItMTggIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3R0YS90dGFkZWMuaDogRGlzYWJsZSBzb21lIGhlYWRlciBjb2RlIHRoYXQgaXNuJ3QgdXNlZAotCWFuZCBjbGVhcmx5IGlzbid0IHBvcnRhYmxlLgotCi0yMDA0LTEyLTE4ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2ltZ2NvbnZlcnQuYzogKGdldF9waXhfZm10X2luZm8pLAotCShhdmNvZGVjX2dldF9jaHJvbWFfc3ViX3NhbXBsZSksIChhdmNvZGVjX2dldF9waXhfZm10X25hbWUpLAotCShhdmNvZGVjX2dldF9waXhfZm10KSwgKGF2cGljdHVyZV9sYXlvdXQpLAotCShhdmNvZGVjX2dldF9waXhfZm10X2xvc3MpLCAoYXZnX2JpdHNfcGVyX3BpeGVsKSwgKGltZ19jb3B5KSwKLQkoZ2V0X2NvbnZlcnRfdGFibGVfZW50cnkpLCAoaW1nX2NvbnZlcnQpLCAoaW1nX2dldF9hbHBoYV9pbmZvKToKLQlGaXggY29kZSB0byBub3QgdXNlIEdDQyBleHRlbnNpb25zIChhbmQgYzk5IGV4dGVuc2lvbnMgdGhhdAotCUZvcnRlIGRvZXMgbm90IGxpa2UuKQotCi0yMDA0LTEyLTE5ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dC5pLm1AemVuLmNvLnVrPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzogKGdzdF9kZWludGVybGFjZV9saW5rKSwKLQkoZ3N0X2RlaW50ZXJsYWNlX2NoYWluKToKLQkgIFJvd3N0cmlkZSBmaXhlcy4gRml4ZXMgIzE2MTAzOS4KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6IChnc3RfdmlkZW9fY3JvcF9pbml0KSwKLQkoZ3N0X3ZpZGVvX2Nyb3BfZ2V0X3Byb3BlcnR5KSwgKGdzdF92aWRlb19jcm9wX2FkZF90b19zdHJ1Y3RfdmFsKSwKLQkoZ3N0X3ZpZGVvX2Nyb3BfZ2V0Y2FwcyksIChnc3RfdmlkZW9fY3JvcF9saW5rKSwKLQkoZ3N0X3ZpZGVvX2Nyb3BfaTQyMCksIChnc3RfdmlkZW9fY3JvcF9jaGFpbiksCi0JKGdzdF92aWRlb19jcm9wX2NoYW5nZV9zdGF0ZSk6Ci0JICBSZXdvcmsgb2YgbmVnb3RpYXRpb24uIEFjdHVhbGx5IHdvcmtzIG5vdy4gRml4ZXMgIzE1ODY1MC4KLQotMjAwNC0xMi0xOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZWJtbG51bV9zaW50KToKLQkgIFRoYXQgd2FzIHZlcnkgc3R1cGlkLgotCi0yMDA0LTEyLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXApOgotCSAgRml4IHBvc3NpYmxlIGNyYXNoZXIuCi0KLTIwMDQtMTItMTggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2VibWxudW1fdWludCksCi0JKGdzdF9tYXRyb3NrYV9lYm1sbnVtX3NpbnQpLCAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXApOgotCSAgTGFjZSBzaXplcyBjYW4gYmUgemVyby4KLQotMjAwNC0xMi0xOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L211c2VwYWNrL2dzdG11c2VwYWNrZGVjLmNwcDoKLQkgIEZldGNoIGVycm9yIHJldHVybiB2YWx1ZXMuIEZpeGVzICMxNjE2MjQuCi0JKiBnc3QvYXBldGFnL2FwZWRlbXV4LmM6IChnc3RfYXBlX2RlbXV4X3N0cmVhbV9kYXRhKToKLQkgIFJlYWxseSBFT1MuCi0KLTIwMDQtMTItMTggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KToKLQkgIFdvcmsgZm9yIHRydW5jYXRlZCAodW5maW5pc2hlZCBkb3dubG9hZCBldGMuKSBmaWxlcy4gRml4ZXMgIzE2MDUxNC4KLQotMjAwNC0xMi0xOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfbG9vcCk6Ci0JICBGaXggZm9yIGludGVnZXIgb3ZlcmZsb3cuIE1ha2VzICMxNTYwMDEgbm90IGNyYXNoLiBQcm9iYWJseSBtYXNrcwotCSAgdGhlIHJlYWwgYnVnLgotCi0yMDA0LTEyLTE3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYWMzcGFyc2UvZ3N0YWMzcGFyc2UuYzogKHBsdWdpbl9pbml0KToKLQkgIFBhcnNlcnMgbmV2ZXIgaGF2ZSByYW5rcy4gRml4ZXMgIzE1OTY1MS4KLQotMjAwNC0xMi0xNyAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChjb21wYXJlX3JhbmtzKToKLQkgIG1ha2Ugc3VyZSB0aGUgZmFjb3RyaWVzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGV2ZXJ5IHRpbWUgZXZlbiBpZiB0aGV5Ci0JICBoYXZlIHRoZSBzYW1lIHJhbmsgYnkgdXNpbmcgdGhlIG5hbWUKLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKGZpbmRfY29tcGF0aWJsZXMpOgotCSAgbWFrZSBzdXJlIHdlIGRvbid0IGFkZCBmYWN0b3JpZXMgdG8gdGhlIGxpc3QgdHdpY2UKLQotMjAwNC0xMi0xNiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb25maWd1cmUuYWM6IGxvb2sgZm9yIG11c2VwYWNrIGhlYWRlcnMgYXMgbXVzZXBhY2svKi5oCi0JKGZpeGVzICMxNTk4NDcpCi0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tkZWMuaDogdXNlIDxtdXNlcGFjay8qLmg+Ci0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tyZWFkZXIuaDogc2FtZQotCi0yMDA0LTEyLTE3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzoKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX2F1ZHNfd2l0aF9kYXRhKToKLQkgIFJlYWQgZXh0cmFkYXRhIGNvcnJlY3RseSAoZml4ZXMgIzE1NTg3OSkuCi0KLTIwMDQtMTItMTYgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOiBhbGxvdyBwYXNzdGhydSBvZiA+MiBjaGFubmVsCi0JYXVkaW8uICBkb2VzIF9ub3RfIGF0dGVtcHQgb3IgYWxsb3cgY29udmVyc2lvbiB1bmxlc3MgY2hhbm5lbHMKLQlpcyAxIG9yIDIuCi0KLTIwMDQtMTItMTYgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC1tLm06IGZpeCBtcGVnIGFuZCB2b2IgcGlwZWxpbmVzCi0KLTIwMDQtMTItMTYgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOiB0aGUgcmVzYW1wbGUgbGlicmFyeSBvbmx5Ci0JaGFuZGxlcyAxIG9yIDIgY2hhbm5lbHMuICBDaGFuZ2UgY2FwcyB0byBjb21wZW5zYXRlLgotCi0yMDA0LTEyLTE2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGFhY19yYXRlX2lkeCksIChhYWNfcHJvZmlsZV9pZHgpLAotCShnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBTb21lIE1QRUctQUFDIGhhY2tzLCBiZWNhdXNlIGVsc2UgaXQgZG9lc24ndCB3b3JrLi4uCi0KLTIwMDQtMTItMTYgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX2NhcHNfd2l0aF9kYXRhKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX3RlbXBsYXRlX2NhcHMpOgotCSAgQWRkIGgyNjQuCi0KLTIwMDQtMTItMTYgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9hdWRpby9NYWtlZmlsZS5hbToKLQkgIFRyeSB0byBmaXggYnVpbGRib3QuCi0KLTIwMDQtMTItMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzoKLQkgIENsZWFuIHVwIGFuZCB1bmlmb3JtaXplIGRlYnVnZ2luZy4KLQotMjAwNC0xMi0xNiAgRWR3YXJkIEhlcnZleSAgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6IChnc3RfZHZkX2RlbXV4X2NsYXNzX2luaXQpLAotCShnc3RfZHZkX2RlbXV4X3Jlc2V0KSwgKGdzdF9kdmRfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfcmVzZXQpLAotCShnc3RfbXBlZ19kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSAgUmVzZXQgb24gcmVhZHkuIEZpeGVzIDE2MDI3Ni4KLQotMjAwNC0xMi0xNiAgU2ViYXN0aWVuIENvdGUgIDxzYzVAaGVybWVzLnVzaGVyYi5jYT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29sb3JzcGFjZS5jOgotCShnc3RfZmZtcGVnY3NwX3BhZF9saW5rKToKLQkgIEZpeCBtZW1sZWFrICgjMTU0ODE1KS4KLQotMjAwNC0xMi0xNiAgSmFtZXMgQm93ZXMgIDxib3dlc0Bjcy5kYWwuY2E+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uYzogKGdzdF9tdXNpY2JyYWluel9jbGFzc19pbml0KSwKLQkoZ3N0X211c2ljYnJhaW56X2luaXQpLCAoZ3N0X211c2ljYnJhaW56X2NoYWluKSwKLQkoZ3N0X211c2ljYnJhaW56X3NldF9wcm9wZXJ0eSksIChnc3RfbXVzaWNicmFpbnpfZ2V0X3Byb3BlcnR5KToKLQkqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uaDoKLQkgIEFkZCBzdXBwb3J0IGZvciB1c2luZyBhIHByb3h5IHNlcnZlciB3aGVuIGdldHRpbmcgYSB0cm0gaWQgZnJvbQotCSAgdGhlIE11c2ljQnJhaW56IGRhdGFiYXNlICgjMTQ5NjEzKS4KLQotMjAwNC0xMi0xNiAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKG5ld19wYWQpLCAoY2xvc2VfbGluayk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKG5ld19kZWNvZGVkX3BhZCk6Ci0JICBGaXggbWVtbGVha3MgKCMxNTcyMzMpLgotCi0yMDA0LTEyLTE2ICBTZWJhc3RpZW4gQ290ZSAgPHNjNUBoZXJtZXMudXNoZXJiLmNhPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmVzYW1wbGUvcmVzYW1wbGUuYzogKGdzdF9yZXNhbXBsZV9jbG9zZSk6Ci0JKiBnc3QtbGlicy9nc3QvcmVzYW1wbGUvcmVzYW1wbGUuaDoKLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuYzoKLQkgIEZpeCBtZW1sZWFrICgjMTU5MjE1KS4KLQotMjAwNC0xMi0xNiAgVG9uaSBXaWxsYmVyZyAgPHRvbml3QGlraS5maT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50LmM6IChnc3Rfb3NzZWxlbWVudF9wcm9iZV9jYXBzKToKLQkqIHN5cy9vc3Mvb3NzX3Byb2JlLmM6IChtYWluKToKLQkgIENoZWNrIGZvciBtb25vL3N0ZXJlbyBzdXBwb3J0IChzaW1pbGFyIHRvIHNhbXBsZXJhdGUgcHJvYmluZyksCi0JICBmaXhlcyAjMTU5NDMzLiBBbHNvIGFkZCBtaXNzaW5nIGNvcHlyaWdodCBoZWFkZXIgdG8gb3NzX3Byb2JlLmMuCi0KLTIwMDQtMTItMTUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOiBhZGQgYXVkaW9yZXNhbXBsZSBhbmQgY2Fpcm8gcGx1Z2lucy4gIFJlbW92ZQotCUhBVkVfTU1YIHN0dWZmLCBiZWNhdXNlIGl0J3Mgbm90IHVzZWQuCi0JKiBleHQvTWFrZWZpbGUuYW06IHNhbWUKLQkqIGV4dC9hdWRpb3Jlc2FtcGxlL01ha2VmaWxlLmFtOiBZb3UgYXJlIG5vdCByZWFkeSBmb3IgYW4KLQlhdWRpbyByZXNhbXBsaW5nIGVsZW1lbnQgYmFzZWQgb24gYXVkaW9yZXNhbXBsZS4KLQkqIGV4dC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuYzoKLQkqIGV4dC9hdWRpb3Jlc2FtcGxlL2dzdGF1ZGlvcmVzYW1wbGUuaDoKLQkqIGV4dC9jYWlyby9NYWtlZmlsZS5hbTogWW91IGFyZSBub3QgcmVhZHkgZm9yIG92ZXJsYXkgZWxlbWVudHMKLQliYXNlZCBvbiBjYWlyby4gIERvbid0IGxvb2sgdG9vIGNsb3NlbHksIHRoZXNlIGVsZW1lbnRzIGtpbmRhCi0Jc3VjayByaWdodCBub3cuCi0JKiBleHQvY2Fpcm8vZ3N0Y2Fpcm8uYzogbmV3Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuYzogbmV3Ci0JKiBleHQvY2Fpcm8vZ3N0dGV4dG92ZXJsYXkuaDogbmV3Ci0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuYzogbmV3Ci0JKiBleHQvY2Fpcm8vZ3N0dGltZW92ZXJsYXkuaDogbmV3Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXByaXYuaDogZml4IGNvbXBpbGUKLQlwcm9ibGVtIHdpdGggY29tcGlsZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB2YXJpYWRpYyBtYWNyb3MuCi0KLTIwMDQtMTItMTUgIEJhbGFtdXJhbGkgVmlzd2FuYXRoYW4gIDxiYWxhbXVyYWxpLnZpc3dhbmF0aGFuQHdpcHJvLmNvbT4KLQotCVJldmlld2VkIGJ5OiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW8uYzogKHBsdWdpbl9pbml0KTogIEFwcGx5IHBhdGNoIGZyb20KLQlCYWxhLCByZWdpc3RlcmluZyBzdW5hdWRpb3NyYyAob29wcyEpLCBhbmQgY2xlYW5pbmcgdXAgY29kZSBhCi0JYml0LiAgQWxzbyByYW4gaW5kZW50LWdzdC4KLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOiAoZ3N0X3N1bmF1ZGlvc3JjX2luaXQpLAotCShnc3Rfc3VuYXVkaW9zcmNfY2hhbmdlX3N0YXRlKSwgKGdzdF9zdW5hdWRpb3NyY19nZXQpLAotCShnc3Rfc3VuYXVkaW9zcmNfc2V0cGFyYW1zKToKLQotMjAwNC0xMi0xNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZmVzdGl2YWwvZ3N0ZmVzdGl2YWwuYzogKGdzdF9mZXN0aXZhbF9jaGFpbik6IFNldCB0aGUKLQlvdXRwdXQgcmF0ZSB0byAxNjAwMC4gIFNob3VsZCBmaXggIzE2MDIzNS4KLQotMjAwNC0xMi0xNCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1wZWcyX3N5c190eXBlX2ZpbmQpOgotCUFkZCB0eXBlZmluZGluZyBmb3IgbXBlZzIgcGVzIHN0cmVhbXMKLQotMjAwNC0xMi0xMyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb25maWd1cmUuYWM6ICBBcHBsaWVkIHBhdGNoIGZyb20gYnVnICMxNDM2NTksIG1ha2luZyBkZWZhdWx0Ci0Jc291cmNlcyBhbmQgc2lua3MgT1MtZGVwZW5kZW50IChmb3IgU29sYXJpcyksIGFuZCBhZGRlZCBjb2RlCi0JZm9yIE9TL1guCi0JKiBnY29uZi9nc3RyZWFtZXIuc2NoZW1hcy5pbjogdXNlIE9TLWRlcGVuZGVudCBzaW5rcyBpbiBnY29uZi4KLQotMjAwNC0xMi0xMyAgU3RlcGhhbmUgTG9ldWlsbGV0ICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkgIGZvcmdvdCB0byBhZGQgaDIuNjQgdG8gYXZpZGVtdXggdGVtcGxhdGUgY2FwcwotCi0yMDA0LTEyLTEzICBTdGVwaGFuZSBMb2V1aWxsZXQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L3dhdmVuYy9yaWZmLmg6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLWlkcy5oOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYwotCWFkZCA0Q0MgY29kZSBmb3IgVmlkZW9Tb2Z0IGgyNjQgaW4gQVZJIChWU1NIKQotCSAgZml4ZXMgYnVnICMxNjA2NTUKLQlyZW1vdmUgczMyMyBmcm9tIHJpZmYsIGl0J3MgcXVpY2t0aW1lIHNwZWNpZmljIDooCi0KLTIwMDQtMTItMTMgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBnc3QvYXNmZGVtdXgvUkVBRE1FCi0JKiBnc3Qvd2F2ZW5jL3JpZmYuaAotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1pZHMuaAotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6Ci0JICBhZGQgbmV3IDRDQyBjb2RlcyBmb3IgaDI2MyByZWxhdGVkIGNvZGVjcwotCSAgZml4ZXMgcGFydGlhbGx5IGJ1ZyAjMTU1MTYzCi0KLTIwMDQtMTItMTIgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgIDxjaHJpc3RpYW4gYXQgZmx1ZW5kbyBkb3QgY29tPgotCi0JKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBwb2x5YXVkaW8gcmVxdWlyZW1lbnQgdG8gMC43Ci0JKiBleHQvcG9seXAvcG9seXBzaW5rLmM6IChjcmVhdGVfc3RyZWFtKTogYWRkIHBhdGNoIGZyb20gaWFpbiAoMTU4MjU4KQotCi0yMDA0LTEyLTExICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jOgotCWZpeCBteSBuYW1lJ3Mgc3BlbGxpbmchIDopCi0KLTIwMDQtMTItMTEgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBBVVRIT1JTIENoYW5nZUxvZwotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYwotCSogZ3N0L2xhdy86Ci0JCWFsYXctZGVjb2RlLmMgYWxhdy1lbmNvZGUuYwotCQltdWxhdy1kZWNvZGUuYyBtdWxhdy1lbmNvZGUuYwotCSogZ3N0L29uZXRvbi9nc3RvbmV0b24uYwotCSogc3lzL29zeGF1ZGlvLzoKLQkJZ3N0b3N4YXVkaW9lbGVtZW50LmMgZ3N0b3N4YXVkaW9zaW5rLmMgZ3N0b3N4YXVkaW9zcmMuYwotCSogc3lzL29zeHZpZGVvLzoKLQkJY29jb2F3aW5kb3cuaCBjb2NvYXdpbmRvdy5tCi0JCW9zeHZpZGVvc2luay5oIG9zeHZpZGVvc2luay5tCi0KLQlwdXQgdGhlIHNhbWUgbWFpbCBhZGRyZXNzIGZvciBaYWhlZXIgQWJiYXMgTWVyYWxpIGV2ZXJ5d2hlcmUKLQotMjAwNC0xMi0xMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X2xvb3ApOgotCSAgQWxpZ24gYnkgcGFja2V0c2l6ZSwgYW5kIGFzc2VydCB0aGF0IHdlIGEgcGFja2V0IGF2YWlsYWJsZSBiZWZvcmUKLQkgIHBsYXlpbmcuIFRoZSBmaXJzdCBtYWtlcyB3ZWJzdHJlYW1zIHdvcmsgKHRoZXkgb2Z0ZW4gaW5jbHVkZQotCSAgdHJhaWxpbmcgcGFkZGluZyBkYXRhIGluIGEgcGFja2V0KSwgdGhlIHNlY29uZCBhbGxvd3MgcGF1c2luZyBhCi0JICBBU0Ygc3RyZWFtIGluIHRvdGVtIHdpdGhvdXQgZ2V0dGluZyBkZW11eCBlcnJvcnMgYWZ0ZXJ3YXJkcy4KLQotMjAwNC0xMi0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ2V0X3JlbGF0aXZlKToKLQkgIENoZWNrIGZvciBub24tTlVMTCBiZWZvcmUgYWNjZXNzaW5nIG1lbWJlciAoZW5kLW9mLWNoYWluKS4KLQotMjAwNC0xMi0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYS5jOiAoY2RwYXJhbm9pYV9jbGFzc19pbml0KSwKLQkoY2RwYXJhbm9pYV9zZXRfcHJvcGVydHkpLCAoY2RwYXJhbm9pYV9nZXRfcHJvcGVydHkpOgotCSogZXh0L2R2ZG5hdi9kdmRuYXZzcmMuYzogKGR2ZG5hdnNyY19jbGFzc19pbml0KSwKLQkoZHZkbmF2c3JjX3NldF9wcm9wZXJ0eSksIChkdmRuYXZzcmNfZ2V0X3Byb3BlcnR5KToKLQkqIGV4dC9kdmRyZWFkL2R2ZHJlYWRzcmMuYzogKGR2ZHJlYWRzcmNfY2xhc3NfaW5pdCksCi0JKGR2ZHJlYWRzcmNfaW5pdCksIChkdmRyZWFkc3JjX3NldF9wcm9wZXJ0eSksCi0JKGR2ZHJlYWRzcmNfZ2V0X3Byb3BlcnR5KToKLQkqIHN5cy92Y2QvdmNkc3JjLmM6IChnc3RfdmNkc3JjX2NsYXNzX2luaXQpLAotCShnc3RfdmNkc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfdmNkc3JjX2dldF9wcm9wZXJ0eSk6Ci0JICBTeW5jaHJvbml6ZSBwcm9wZXJ0eSBuYW1lcyB3aGVyZSBub3QgeWV0IHRoZSBjYXNlLiBEZXZpY2VzIGFyZQotCSAgbm93IGRldmljZT1YLCBvdGhlciB2ZXJzaW9ucyBhcmUgZGVwcmVjYXRlZCAoYnV0IHN0aWxsIGV4aXN0KS4KLQkgIEFsc28gdXNlIGdfZnJlZSgpIHVuY29uZGl0aW9uYWxseS4KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksCi0JKHNldHVwX3NvdXJjZSksIChnc3RfcGxheV9iYXNlX2Jpbl9nZXRfcHJvcGVydHkpOgotCSAgRXhwb3NlIHNvdXJjZS4KLQotMjAwNC0xMi0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOiBtb3ZlIEdDT05GIG1hY3JvIG91dHNpZGUgY29uZGl0aW9uYWwgZm9yIHRoZSBhbQotCSAgY29uZGl0aW9uYWwuIEZpeGVzICMxNjA0MzkKLQotMjAwNC0xMi0wOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0b29scy9nc3QtdmlzdWFsaXNlLW0ubTogU3dpdGNoIHRvIGVsZW1lbnRzIHRoYXQgY3VycmVudGx5Ci0JZXhpc3QuCi0KLTIwMDQtMTItMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dtcGFyc2UuYzogKGdzdF9vZ21fcGFyc2VfY2hhaW4pOgotCSAgV2UgbG92ZSB3cm9uZyBjb21tYXMuCi0KLTIwMDQtMTItMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCShnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSk6Ci0JICBEb24ndCBzZXQgREVGQVVMVCwgdW5zdXBwb3J0ZWQgLSBtYWtlcyBsZW5ndGggZGlzcGxheSBpbmNvcnJlY3RseQotCSAgaW4gc29tZSBjYXNlcy4KLQotMjAwNC0xMi0wNyAgQ2hyaXN0aWFuIEZyZWRyaWsgS2FsYWdlciBTY2hhbGxlciAgPHVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIGdzdC9tb25vc2NvcGUvUkVBRE1FOiByZW1vdmUgYmx1cmIgYWJvdXQgZmlsZXMgYmVpbmcgR1BMCi0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOiBDaGFuZ2UgbGljZW5zZSBmaWVsZCB0byBMR1BMCi0JKiBnc3QvbW9ub3Njb3BlL21vbm9zY29wZS5jOiBDaGFuZ2UgbGljZW5zZSB0byBCU0Qgd2l0aCBleHBsYW5hdGlvbgotCSAgbW9ub3Njb3BlIGlzIG5vdyBlZmZlY3RpdmVseSBMR1BMIGxpY2Vuc2VkCi0KLTIwMDQtMTItMDcgIENocmlzdGlhbiBGcmVkcmlrIEthbGFnZXIgU2NoYWxsZXIgIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QvbW9ub3Njb3BlL1JFQURNRTogVXBkYXRlIGluZm9ybWF0aW9uIHRvIGJlIG1vcmUgY29ycmVjdAotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jOiBSZWxpY2Vuc2UgdG8gTEdQTAotCSogZ3N0L21vbm9zY29wZS9jb252b2x2ZS5oOiBSZWxpY2Vuc2UgdG8gTEdQTAotCi0yMDA0LTEyLTA2ICBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCSogZ3N0L21wZWdhdWRpb3BhcnNlL2dzdG1wZWdhdWRpb3BhcnNlLmM6IChnc3RfbXAzcGFyc2VfY2hhaW4pOgotCSAgc2V0IEJVRkZFUl9EVVJBVElPTiB0byBjb3JyZWN0IHZhbHVlcyAobXBlZzEgYXVkaW8gZnJhbWUgbGVuZ3RoIGlzIGZpeGVkKQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfbGluayk6Ci0JICBzZXQgZGVmYXVsdF9kdXJhdGlvbiBmb3IgbXBlZzEgYXVkaW8KLQotMjAwNC0xMi0wNiAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9nZXRfY2FwcyksIChnc3RfYWxzYV9jbG9zZV9hdWRpbyk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhLmg6Ci0JICByZWZhY3RvciBiaWcgY2h1bmtzIG9mIHRoZSBjb3JlIGNhcHMgbmVnb3RpYXRpb24gY29kZSB0byBtYWtlIGl0Ci0JICBhIGxvdCBmYXN0ZXIsIGJlY2F1c2UgcGVvcGxlIGNsYWltIGl0J3MgcmVhbGx5IHNsb3cKLQkgIChhY3R1YWxseSwganVzdCBjYWNoZSB0aGUgZ2V0Y2FwcyB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlbmVkKQotCi0yMDA0LTEyLTA2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19pbml0KSwKLQkoZ3N0X2E1MmRlY19oYW5kbGVfZXZlbnQpLCAoZ3N0X2E1MmRlY191cGRhdGVfc3RyZWFtaW5mbyksCi0JKGdzdF9hNTJkZWNfaGFuZGxlX2ZyYW1lKSwgKGdzdF9hNTJkZWNfY2hhaW4pLAotCShnc3RfYTUyZGVjX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5oOgotCSAgRG8gc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRpbWVzdGFtcHMuIE1ha2UgY2hhaW4tYmFzZWQgKHNpbmNlCi0JICB0aGVyZSdzIHJlYWxseSBubyByZWFzb24gdG8gYmUgbG9vcGJhc2VkKS4KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcHJvY2Vzc19uZXh0X2VudHJ5KToKLQkgIFVwZGF0ZSBjdXJyZW50X2J5dGUvZnJhbWUgY29ycmVjdGx5LgotCi0yMDA0LTEyLTA0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXBldGFnL2FwZWRlbXV4LmM6IChnc3RfYXBlX2RlbXV4X3BhcnNlX3RhZ3MpLAotCShnc3RfYXBlX2RlbXV4X3N0cmVhbV9pbml0KToKLQkgIEZvcndhcmQgdGFncywgdG9vLgotCi0yMDA0LTEyLTA0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXBldGFnL2FwZWRlbXV4LmM6IChnc3RfYXBlX2RlbXV4X3N0cmVhbV9pbml0KToKLQkgIExldCdzIG1ha2Ugc3VyZSB3ZSdyZSBkb25lIHR5cGVmaW5kaW5nIHdoZW4gZGV0ZWN0aW5nIHRhZ3MuCi0KLTIwMDQtMTItMDMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfY2xhc3NfaW5pdCksCi0JKGdzdF9lYm1sX3JlYWRfaW5pdCksIChnc3RfZWJtbF9yZWFkX3VzZV9ldmVudCksCi0JKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9pZCksIChnc3RfZWJtbF9wZWVrX2lkKSwKLQkoZ3N0X2VibWxfcmVhZF9zZWVrKSwgKGdzdF9lYm1sX3JlYWRfc2tpcCksCi0JKGdzdF9lYm1sX3JlYWRfcmVzZXJ2ZSksIChnc3RfZWJtbF9yZWFkX2J1ZmZlciksCi0JKGdzdF9lYm1sX3JlYWRfbWFzdGVyKToKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHMpLAotCShnc3RfbWF0cm9za2FfZGVtdXhfbG9vcF9zdHJlYW0pLCAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpOgotCSAgRGlzZ3VzdGluZ2x5IGV2aWwgaGFjayBmb3Igd29ya2luZyBhcm91bmQgSU5URVJSVVBUIGV2ZW50cyBhbmQKLQkgIHRoZWlyIGV4dHJlbWVseSBhbm5veWluZyBoYWJpdCBvZiBiZWluZyBhIHBhaW4gaW4gdGhlIGFzcy4gV2UKLQkgIHNpbXBseSBwZWVrIGEgY2x1c3RlciBiZWZvcmUgcmVhZGluZyBhbnkgb2YgaXQuCi0KLTIwMDQtMTItMDMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja2RlYy5jcHA6Ci0JICBUaGVyZSdzIGFsc28gZmxvYXRpbmcgcG9pbnQgbGlibXVzZXBhY2tzLgotCi0yMDA0LTEyLTAzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9jaGFucG9zX2Zyb21fZ3N0KSwKLQkoZ3N0X2ZhYWRfY2hhbnBvc190b19nc3QpLCAoZ3N0X2ZhYWRfY2hhaW4pOgotCSAgU2V0IERVUkFUSU9OIGV2ZW4gaWYgc291cmNlIGJ1ZmZlciBkaWRuJ3QuIEFsc28gdXNlIGluY3JlYXNpbmcKLQkgIHRpbWVzdGFtcHMuCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzX3dpdGhfZGF0YSk6Ci0JICBCbG9ja19hbGlnbiBjYW4gaGF2ZSBsYXJnZXIgdmFsdWVzIHRoYW4gODE5Mi4KLQotMjAwNC0xMi0wMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoYWxhd2RlY19nZXRjYXBzKSwgKGFsYXdkZWNfbGluayk6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6IChhbGF3ZW5jX2dldGNhcHMpLCAoYWxhd2VuY19saW5rKToKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChtdWxhd2RlY19nZXRjYXBzKSwgKG11bGF3ZGVjX2xpbmspOgotCSogZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYzogKG11bGF3ZW5jX2dldGNhcHMpLCAobXVsYXdlbmNfbGluayk6Ci0JICBGaXggY2Fwcy4KLQotMjAwNC0xMi0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfZ2V0X2NoYW5fbmFtZXMpOgotCSAgRml4IGxvZ2ljIGJ1Zy4KLQotMjAwNC0xMi0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ190eXBlX2ZpbmQpOgotCSAgWWF5LCBhbm90aGVyIG9uZS4KLQotMjAwNC0xMi0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jaGFpbik6Ci0JICBNYWtlIGVycm9yIGFjdHVhbGx5IHNheSBzb21ldGhpbmcgdXNlZnVsIChmaXhlcyAjMTU2Nzk4KS4KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX2NhcHNfd2l0aF9kYXRhKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX3RlbXBsYXRlX2NhcHMpOgotCSAgQWRkIEludGVsIFZpZGVvIDUuMCBmb3VyY2MgKElWNTApLgotCi0yMDA0LTEyLTAxICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKG1wZzEyM19wYXJzZV94aW5nX2hlYWRlcik6IGZpeCB4aW5nIGhlYWRlcgotCWRldGVjdGlvbiBvbiBtb25vIGFuZCBzdGVyZW8gbXAzIGZpbGVzLgotCi0yMDA0LTEyLTAxICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBEb24ndCBjcmFzaCBvbiBFTVBUWSBjYXBzIChlLmcuIHdoZW4gdGhlIGRlbXV4ZXIgZGlkbid0IHJlY29nbml6ZQotCSAgdGhlIGNvbnRhaW5lZCBzdHJlYW0pLgotCi0yMDA0LTEyLTAxICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9zcmNjb25uZWN0KSwgKGdzdF9mYWFkX2NoYWluKToKLQkgIE9vcHMsIHJlbW92ZSBkZWJ1Zy4KLQotMjAwNC0xMi0wMSAgU2ViYXN0aWVuIENvdGUgIDxzYzVAaGVybWVzLnVzaGVyYi5jYT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoYWxhd2RlY19nZXRjYXBzKToKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChtdWxhd2RlY19nZXRjYXBzKToKLQkgIFByZXZlbnQgd2FybmluZ3Mgd2hlbiBuZWdvdGlhdGluZyBjYXBzIChmaXhlcyAjMTU5MzM4KS4KLQotMjAwNC0xMi0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29sb3JzcGFjZS5jOgotCShnc3RfZmZtcGVnY3NwX2NoYWluKToKLQkgIFJlbW92ZSBvbGQgbGVmdG92ZXIgdGhhdCBzaG91bGRuJ3QgYmUgdGhlcmUuLi4KLQotMjAwNC0xMi0wMSAgU2ViYXN0aWVuIENvdGUgIDxzYzVAaGVybWVzLnVzaGVyYi5jYT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX3VzZV9ldmVudCk6Ci0JICBEb24ndCBmb3J3YXJkIERJU0NPTlQgZXZlbnRzIChmaXhlcyAjMTU5Njg0KS4KLQotMjAwNC0xMi0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKHJlbW92ZV9zaW5rcyksIChzZXR1cF9zaW5rcyk6Ci0JICBVbmxpbmsgbWFudWFsbHkgc2luY2Ugc29tZXRpbWVzIGJpbiBkaXNwb3NhbCAoYW5kIHRoZXJlZm9yZQotCSAgcGFkIHVubGlua2luZykgaXMgZGVsYXllZCwgd2hpY2ggd2lsbCBjYXVzZSBhIG5ldyBtZWRpYSBmaWxlCi0JICB0byBub3QgYmUgYWJsZSB0byBzdGFydCBwbGF5aW5nIGluc3RhbnRseS4KLQotMjAwNC0xMS0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uYzogKHN0cmVhbV9pbmZvX211dGVfcGFkKToKLQkgIE9uIG11dGUgb2YgYW4gdW5saW5rZWQgc3RyZWFtLCBjaGVjayBmb3IgcGFkIGF2YWlsYWJpbGl0eSBzbwotCSAgd2UgZG9uJ3QgY3Jhc2ggb24gdW5saW5rZWQgcGFkLgotCi0yMDA0LTExLTI5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCksCi0JKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCk6Ci0JICBGaXggcXVpdGUgaHVtaWxpYXRpbmcgYnVnIGluIG9taXR0aW5nIDAtc2l6ZWQgaW5kZXggY2h1bmtzIGJ1dAotCSAgZm9yZ2V0dGluZyB0byBjb3VudCB0aGVtIGZvciB0aW1lc3RhbXBzLgotCi0yMDA0LTExLTI5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19sb29wKToKLQkgIEFjdHVhbGx5IGxlYXZlIHRoZSBsb29wIGlmIHdlIGZhaWxlZCB0byBzeW5jLiBEb24ndCBjcmFzaC4KLQotMjAwNC0xMS0yOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0ZHZkZGVtdXguYzogKGdzdF9kdmRfZGVtdXhfZ2V0X2F1ZGlvX3N0cmVhbSksCi0JKGdzdF9kdmRfZGVtdXhfcHJvY2Vzc19wcml2YXRlKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4Lmg6Ci0JICBGaXggY3Jhc2ggKCMxNTk3NTkpLiBEb2Vzbid0IHdvcmssIHRob3VnaC4gOi0oLgotCi0yMDA0LTExLTI4ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0Y2hhbm5lbG1peC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfbWl4KToKLQkgIG1vcmUgb3ZlcndyaXRpbmcgcHJvdGVjdGlvbiBkdWUgdG8gbW9kaWZ5aW5nIGNoYW5uZWxzIG9uZSBieSBvbmUKLQkgIGluc3RlYWQgb2YgYWxsIGF0IG9uY2UKLQotMjAwNC0xMS0yOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RjaGFubmVsbWl4LmM6Ci0JKGdzdF9hdWRpb19jb252ZXJ0X2ZpbGxfbm9ybWFsaXplKToKLQkgIE5vcm1hbGl6ZSB1c2luZyBhYnNvbHV0ZSB2YWx1ZXMuCi0KLTIwMDQtMTEtMjggIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2RpcmVjdGZiL01ha2VmaWxlLmFtOgotCSogZXh0L2RpcmVjdGZiL2RpcmVjdGZidmlkZW9zaW5rLmM6IChnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfY3JlYXRlKSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2dldF9waXhlbF9mb3JtYXQpLAotCShnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfZ2V0X2Zvcm1hdF9mcm9tX2ZvdXJjYyksCi0JKGdzdF9kaXJlY3RmYnZpZGVvc2lua19maXhhdGUpLCAoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2dldGNhcHMpLAotCShnc3RfZGlyZWN0ZmJ2aWRlb3Npbmtfc2lua19saW5rKSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9kaXJlY3RmYnZpZGVvc2lua19jaGFpbiksIChnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfYnVmZmVyX2ZyZWUpLAotCShnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfYnVmZmVyX2FsbG9jKSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2ludGVyZmFjZV9zdXBwb3J0ZWQpLAotCShnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfaW50ZXJmYWNlX2luaXQpLAotCShnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfbmF2aWdhdGlvbl9zZW5kX2V2ZW50KSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX25hdmlnYXRpb25faW5pdCksCi0JKGdzdF9kaXJlY3RmYnZpZGVvc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfZGlyZWN0ZmJ2aWRlb3NpbmtfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2ZpbmFsaXplKSwgKGdzdF9kaXJlY3RmYnZpZGVvc2lua19pbml0KSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2Jhc2VfaW5pdCksCi0JKGdzdF9kaXJlY3RmYnZpZGVvc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X2RpcmVjdGZidmlkZW9zaW5rX2dldF90eXBlKSwgKHBsdWdpbl9pbml0KToKLQkqIGV4dC9kaXJlY3RmYi9kaXJlY3RmYnZpZGVvc2luay5oOiBBZGRpbmcgYSBmaXJzdCB2ZXJzaW9uIG9mCi0JZGlyZWN0ZmJ2aWRlb3NpbmsuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2luaXQpOiBJbml0aWFsaXppbmcgc29tZQotCW1vcmUuCi0KLTIwMDQtMTEtMjggIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RjaGFubmVsbWl4LmM6IChnc3RfYXVkaW9fY29udmVydF9taXgpOgotCSAgd2FsayB0aGUgc2FtcGxlcyBiYWNrd2FyZHMgaWYgb3V0X2NoYW5uZWxzID4gaW5fY2hhbm5lbHMgc28gd2UgZG9uJ3QKLQkgIG92ZXJ3cml0ZSBkYXRhCi0KLTIwMDQtMTEtMjggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfaW5pdCksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspLCAoZ3N0X2F1ZGlvX2NvbnZlcnRfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfY2hhbm5lbHMpOgotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RjaGFubmVsbWl4LmM6Ci0JKGdzdF9hdWRpb19jb252ZXJ0X3Vuc2V0X21hdHJpeCksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2ZpbGxfaWRlbnRpY2FsKSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfZmlsbF9jb21wYXRpYmxlKSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfZGV0ZWN0X3BvcyksIChnc3RfYXVkaW9fY29udmVydF9maWxsX29uZV9vdGhlciksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2ZpbGxfb3RoZXJzKSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfZmlsbF9ub3JtYWxpemUpLAotCShnc3RfYXVkaW9fY29udmVydF9maWxsX21hdHJpeCksIChnc3RfYXVkaW9fY29udmVydF9zZXR1cF9tYXRyaXgpLAotCShnc3RfYXVkaW9fY29udmVydF9wYXNzdGhyb3VnaCksIChnc3RfYXVkaW9fY29udmVydF9taXgpOgotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RjaGFubmVsbWl4Lmg6Ci0JICBJbXBsZW1lbnQgYSBjaGFubmVsIG1peGVyLgotCi0yMDA0LTExLTI4ICBNYXJ0aW4gU290byAgPG1hcnRpbnNvdG9AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jIChnc3RfYWxzYV9zaW5rX2xvb3ApOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jIChnc3RfYWxzYV9zZXRfY2xvY2spOgotCU1ha2UgYWxzYXNpbmsgYWN0dWFsbHkgaG9ub3IgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIGFuZCB1c2UgdGhhdAotCWNsb2NrIGluc3RlYWQgb2YgaXRzIGludGVybmFsIG9uZS4KLQotMjAwNC0xMS0yNyAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoc2V0dXBfc291cmNlKTogZml4ZWQgYSBjYXBzIGxlYWsKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKTogbnVsbGlmeSBzb3VyY2UgYW5kIGRlY29kZXIgd2hlbgotCWdvaW5nIGZyb20gUkVBRFkgdG8gTlVMTCBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byBkbyB3ZWlyZCBzdHVmZiB3aXRoCi0JdGhlbSB3aGVuIGdvaW5nIGZyb20gTlVMTCB0byBSRUFEWQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9pbml0KTogdXNlIGdzdF9vYmplY3RfdW5yZWYKLQlpbnN0ZWFkIG9mIGdfb2JqZWN0X3VucmVmCi0JKGdlbl92aWRlb19lbGVtZW50KSwgKGdlbl9hdWRpb19lbGVtZW50KTogbW9yZSByZWZjb3VudGluZyBmaXhlcywgbm93Ci0JaXQgc2hvdWxkIGJlIGNvcnJlY3QKLQkoZ3N0X3BsYXlfYmluX2NoYW5nZV9zdGF0ZSk6IGRvbid0IGNhbGwgcmVtb3ZlX3NpbmtzIGlmIHdlIGFyZQotCWN1cnJlbnRseSBkaXNwb3NpbmcgdGhlIG9iamVjdAotCi0yMDA0LTExLTI3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19sb29wKToKLQkgIERvbid0IGZvcmdldCBiYXNzIGlmIGl0J3MgdGhlcmUuIEVsc2UgbGVmdCBjaGFubmVsIGlzIHNpbGVudC4uLgotCi0yMDA0LTExLTI3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19sb29wKSwKLQkoZ3N0X2E1MmRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgZG8gc2FtcGxlIGFkanVzdGluZyBhbnltb3JlLCB3ZSB1c2UgZmxvYXQgYXVkaW8gbm93LgotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2ZpeGF0ZSk6Ci0JICBEb24ndCBmaXhhdGUgdG8gbm9uLWV4aXN0aW5nIHByb3BlcnRpZXMuCi0KLTIwMDQtMTEtMjcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hNTJkZWMvZ3N0YTUyZGVjLmM6IChnc3RfYTUyZGVjX2NoYW5uZWxzKSwKLQkoZ3N0X2E1MmRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgQWR2ZXJ0aXNlIHRoYXQgd2UgY2FuIGRvIHN1cnJvdW5kIHNvdW5kLgotCi0yMDA0LTExLTI3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19yZW5lZyk6Ci0JICBBZGQgYnVmZmVyLWZyYW1lcz0wLgotCSogZXh0L2R2ZHJlYWQvZHZkcmVhZHNyYy5jOiAoZHZkcmVhZHNyY19nZXRfdHlwZSksCi0JKGR2ZHJlYWRzcmNfaW5pdCksIChkdmRyZWFkc3JjX2dldF9ldmVudF9tYXNrKSwKLQkoZHZkcmVhZHNyY19nZXRfcXVlcnlfdHlwZXMpLCAoZHZkcmVhZHNyY19nZXRfZm9ybWF0cyksCi0JKGR2ZHJlYWRzcmNfc3JjcGFkX2V2ZW50KSwgKGR2ZHJlYWRzcmNfc3JjcGFkX3F1ZXJ5KSwKLQkoX3NlZWtfdGl0bGUpLCAoX3NlZWtfY2hhcHRlciksIChnZXRfbmV4dF9jZWxsX2ZvciksIChfcmVhZCksCi0JKHNlZWtfc2VjdG9yKSwgKGR2ZHJlYWRzcmNfZ2V0KSwgKGR2ZHJlYWRzcmNfb3Blbl9maWxlKSwKLQkoZHZkcmVhZHNyY19jaGFuZ2Vfc3RhdGUpLCAoZHZkcmVhZHNyY191cmlfZ2V0X3R5cGUpLAotCShkdmRyZWFkc3JjX3VyaV9nZXRfcHJvdG9jb2xzKSwgKGR2ZHJlYWRzcmNfdXJpX2dldF91cmkpLAotCShkdmRyZWFkc3JjX3VyaV9zZXRfdXJpKSwgKGR2ZHJlYWRzcmNfdXJpX2hhbmRsZXJfaW5pdCk6Ci0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmg6Ci0JICBBZGQgc2Vla2luZywgcXVlcnlpbmcgZm9yIGJ5dGVzLCBzZWN0b3JzLCB0aXRsZSwgYW5nbGUgYW5kCi0JICBjaGFwdGVyLiBIYW5kbGUgbXVsdGlwbGUgY2hhcHRlcnMuIFJlbGljZW5zZSB0byBMR1BMIGJlY2F1c2UKLQkgIEJpbGx5IGFncmVlZCBvbiB0aGF0ICh0aGFua3MgQmlsbHkhKS4KLQotMjAwNC0xMS0yNyAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9kaXNwb3NlKToKLQljYWxsIHBhcmVudCBkaXNwb3NlIG1ldGhvZAotCi0yMDA0LTExLTI3ICBNYXJ0aW4gU290byAgPG1hcnRpbnNvdG9AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW9jbG9jay5jIChnc3RfYXVkaW9fY2xvY2tfc2V0X2FjdGl2ZSkKLQkoZ3N0X2F1ZGlvX2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lKToKLQlGaXggYWN0aXZlIDwtPiBpbmFjdGl2ZSB0cmFuc2l0aW9uczogZW5zdXJlIHRpbWUgdmFsdWUgYWx3YXlzCi0JZ3Jvd3MgYW5kIGF2b2lkIGFicnVwdCB2YWx1ZSBjaGFuZ2VzLgotCi0yMDA0LTExLTI3ICBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3R0YS9NYWtlZmlsZS5hbToKLQkqIGdzdC90dGEvY3JjMzIuaDoKLQkqIGdzdC90dGEvZmlsdGVycy5oOgotCSogZ3N0L3R0YS9nc3R0dGEuYzoKLQkqIGdzdC90dGEvZ3N0dHRhZGVjLmM6Ci0JKiBnc3QvdHRhL2dzdHR0YWRlYy5oOgotCSogZ3N0L3R0YS9nc3R0dGFwYXJzZS5jOgotCSogZ3N0L3R0YS9nc3R0dGFwYXJzZS5oOgotCSogZ3N0L3R0YS90dGFkZWMuaDoKLQkgIGFkZGVkIFRUQSBwYXJzZXIgYW5kIGRlY29kZXIKLQotMjAwNC0xMS0yNiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9jbGFzc19pbml0KSwKLQkocHJvYmVfdHJpZ2dlcmVkKSwgKGNoZWNrX3F1ZXVlKSwgKGJ1ZmZlcl91bmRlcnJ1biksCi0JKGJ1ZmZlcl9ydW5uaW5nKSwgKGJ1ZmZlcl9vdmVycnVuKSwgKGdlbl9zb3VyY2VfZWxlbWVudCksCi0JKHNldHVwX3NvdXJjZSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uaDoKLQkgIEltcGxlbWVudCBidWZmZXJpbmcuIE5lZWRzIHNvbWUgbW9yZSB3b3JrLgotCi0yMDA0LTExLTI2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOiAodGhlb3JhX2RlY19jaGFpbik6Ci0JICBGaXggaWxvZyBtYXNrIHJhbmdlIG92ZXJmbG93LgotCi0yMDA0LTExLTI2ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9nZXRfY2Fwcyk6Ci0JICBEb24ndCBvbWl0IHRoZSBsYXN0ICh3aGljaCBpbiBjYXNlIG9mIGRtaXggaXMgdGhlIG9ubHkgOikgKQotCSAgY2hhbm5lbCBjb3VudC4gRG9uJ3Qgc2V0IGNoYW5uZWxzIGlmIDw9IDIuCi0KLTIwMDQtMTEtMjYgIENocmlzdG9waGUgRmVyZ2VhdSAgPHRldWZAZ25vbWUub3JnPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ2VuX3ZpZGVvX2VsZW1lbnQpLAotCShnZW5fYXVkaW9fZWxlbWVudCk6IFJlbW92ZWQgMiBvYnNvbGV0ZSBjb21tZW50cwotCi0yMDA0LTExLTI2ICBTdGVwaGFuZSBMb2V1aWxsZXQgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvdm9yYmlzL29nZ3ZvcmJpc2VuYy5jCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jIDoKLQkgIGNoYW5nZSBkZXNjcmlwdGlvbiBmaWVsZHMgb2YgdGhvc2UgcGx1Z2lucyB0byBkaWZmZXJlbnRpYXRlIHRoZW0KLQkgIChwaXRpdmkgc2hvdyBFbmNvZGVycyBieSBkZXNjcmlwdGlvbiwgdGhleSBoYWQgdGhlIHNhbWUgb25lKQotCi0yMDA0LTExLTI1ICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9kaXNwb3NlKSwKLQkoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksIChnZW5fdmlkZW9fZWxlbWVudCksCi0JKGdlbl9hdWRpb19lbGVtZW50KToKLQkgIFJlZmNvdW50aW5nIGZpeGVzIGZvciBwcm92aWRlZCBhdWRpby0vdmlkZW9zaW5rcy4KLQotMjAwNC0xMS0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdlbl92aWRlb19lbGVtZW50KSwKLQkoZ2VuX2F1ZGlvX2VsZW1lbnQpLCAoc2V0dXBfc2lua3MpLCAoZ3N0X3BsYXlfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBEb24ndCByZWZlcmVuY2UgYWxsIHNpbmtzLCBidXQgb25seSB0aGUgdmlkZW8tIGFuZCBhdWRpb3NpbmtzLgotCSAgVGhlIHZpcy4gZWxlbWVudCBzaG91bGQgYmUgZGlzcG9zZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggaXQuCi0JICBXZSBkb24ndCBoYXZlIGFueSByZWFzb24gdG8ga2VlcCBpdCBhcm91bmQuIFRoaXMgZml4ZXMgd2FybmluZ3MKLQkgIHdoZW4gcmV1c2luZyBwbGF5YmluIGZvciBwbGF5aW5nIG11bHRpcGxlIGF1ZGlvIGZpbGVzIHdpdGgKLQkgIHZpcy4gZW5hYmxlZC4gQWxzbyByZWxlYXNlIGF1ZGlvIGRldmljZSBvbiBwYXVzZSAtIGlkZWEgc3RvbGVuCi0JICBmcm9tIFJoeXRobWJveC4KLQotMjAwNC0xMS0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2E1MmRlYy9nc3RhNTJkZWMuYzogKGdzdF9hNTJkZWNfY2hhbm5lbHMpLCAoZ3N0X2E1MmRlY19wdXNoKSwKLQkoZ3N0X2E1MmRlY19yZW5lZyksIChnc3RfYTUyZGVjX2xvb3ApLCAocGx1Z2luX2luaXQpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfZ2V0X2NhcHMpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXBsdWdpbi5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L2R0cy9nc3RkdHNkZWMuYzogKGdzdF9kdHNkZWNfY2hhbm5lbHMpLAotCShnc3RfZHRzZGVjX3JlbmVnb3RpYXRlKSwgKGdzdF9kdHNkZWNfbG9vcCksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9pbml0KSwgKGdzdF9mYWFkX2NoYW5wb3NfZnJvbV9nc3QpLAotCShnc3RfZmFhZF9jaGFucG9zX3RvX2dzdCksIChnc3RfZmFhZF9zaW5rY29ubmVjdCksCi0JKGdzdF9mYWFkX3NyY2dldGNhcHMpLCAoZ3N0X2ZhYWRfc3JjY29ubmVjdCksIChnc3RfZmFhZF9jaGFpbiksCi0JKGdzdF9mYWFkX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvZmFhZC9nc3RmYWFkLmg6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpcy5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfY2hhaW4pOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QtbGlicy9nc3QvYXVkaW8vbXVsdGljaGFubmVsLmM6Ci0JKGdzdF9hdWRpb19jaGVja19jaGFubmVsX3Bvc2l0aW9ucyksCi0JKGdzdF9hdWRpb19nZXRfY2hhbm5lbF9wb3NpdGlvbnMpLAotCShnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRpb25zKSwKLQkoZ3N0X2F1ZGlvX3NldF9zdHJ1Y3R1cmVfY2hhbm5lbF9wb3NpdGlvbnNfbGlzdCksCi0JKGFkZF9saXN0X3RvX3N0cnVjdCksIChnc3RfYXVkaW9fc2V0X2NhcHNfY2hhbm5lbF9wb3NpdGlvbnNfbGlzdCksCi0JKGdzdF9hdWRpb19maXhhdGVfY2hhbm5lbF9wb3NpdGlvbnMpOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL211bHRpY2hhbm5lbC5oOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL3Rlc3RjaGFubmVscy5jOiAobWFpbik6Ci0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOgotCShnc3RfYXVkaW9fY29udmVydF9jbGFzc19pbml0KSwgKGdzdF9hdWRpb19jb252ZXJ0X2luaXQpLAotCShnc3RfYXVkaW9fY29udmVydF9kaXNwb3NlKSwgKGdzdF9hdWRpb19jb252ZXJ0X2dldGNhcHMpLAotCShnc3RfYXVkaW9fY29udmVydF9wYXJzZV9jYXBzKSwgKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspLAotCShnc3RfYXVkaW9fY29udmVydF9maXhhdGUpLCAoZ3N0X2F1ZGlvX2NvbnZlcnRfY2hhbm5lbHMpOgotCSogZ3N0L2F1ZGlvY29udmVydC9wbHVnaW4uYzogKHBsdWdpbl9pbml0KToKLQkgIFN1cnJvdW5kIHNvdW5kIHN1cHBvcnQuCi0KLTIwMDQtMTEtMjUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfcHVzaCk6Ci0JICBGaXggcG9zaXRpb24gZm9yIGRpc2NvbnQgaWYgd2UncmUgY2xvc2UgYXMgd2VsbC4gTml0cGlja2luZywgYnV0Ci0JICBzYXZlcyBhIGZldyBtaWxsaXNlY29uZHMgb2YgZXh0cmEgd2FpdGluZyBvciBza2lwcGluZy4KLQotMjAwNC0xMS0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5fZmFjdG9yeV9maWx0ZXIpOgotCSAgV2Ugc29tZXRpbWVzIG5lZWQgcGFyc2VycyBmb3IgcGxheWJhY2ssIHNvIGFkZCB0aG9zZSB0b28uCi0KLTIwMDQtMTEtMjUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGdzdC9hcGV0YWcvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYXBldGFnL2FwZWRlbXV4LmM6IChnc3RfYXBlX2RlbXV4X2dldF90eXBlKSwKLQkoZ3N0X2FwZV9kZW11eF9iYXNlX2luaXQpLCAoZ3N0X2FwZV9kZW11eF9jbGFzc19pbml0KSwKLQkoZ3N0X2FwZV9kZW11eF9pbml0KSwgKGdzdF9hcGVfZGVtdXhfZ2V0X3NyY19mb3JtYXRzKSwKLQkoZ3N0X2FwZV9kZW11eF9nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X2FwZV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9hcGVfZGVtdXhfZ2V0X2V2ZW50X21hc2spLAotCShnc3RfYXBlX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X2FwZV9kZW11eF9oYW5kbGVfZXZlbnQpLAotCShnc3RfYXBlX2RlbXV4X3R5cGVmaW5kX3BlZWspLCAoZ3N0X2FwZV9kZW11eF90eXBlZmluZF9nZXRfbGVuZ3RoKSwKLQkoZ3N0X2FwZV9kZW11eF90eXBlZmluZF9zdWdnZXN0KSwgKGdzdF9hcGVfZGVtdXhfdHlwZWZpbmQpLAotCShnc3RfYXBlX2RlbXV4X3BhcnNlX3RhZ3MpLCAoZ3N0X2FwZV9kZW11eF9zdHJlYW1faW5pdCksCi0JKGdzdF9hcGVfZGVtdXhfc3RyZWFtX2RhdGEpLCAoZ3N0X2FwZV9kZW11eF9sb29wKSwKLQkoZ3N0X2FwZV9kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L2FwZXRhZy9hcGVkZW11eC5oOgotCSogZ3N0L2FwZXRhZy9hcGV0YWcuYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAoYXBldGFnX3R5cGVfZmluZCksCi0JKHBsdWdpbl9pbml0KToKLQkgIEFQRSB2MS8yIHRhZyByZWFkZXIgcGx1cyB0eXBlZmluZCBmdW5jdGlvbi4KLQotMjAwNC0xMS0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9hZGRfZWxlbWVudCk6Ci0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1wM190eXBlX2ZpbmQpOgotCSAgUmVtb3ZlIGhhY2tzIGZvciBvbGRlciBjb3JlLiBSZXF1aXJlIG5ld2VyIGNvcmUgdmVyc2lvbgotCSAgYWNjb3JkaW5nbHkuCi0KLTIwMDQtMTEtMjUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9jZHhhcGFyc2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFwYXJzZS5jOiAoZ3N0X2NkeGFwYXJzZV9nZXRfdHlwZSksCi0JKGdzdF9jZHhhcGFyc2VfY2xhc3NfaW5pdCksIChnc3RfY2R4YXBhcnNlX2luaXQpLAotCShnc3RfY2R4YXBhcnNlX2xvb3ApLCAoZ3N0X2NkeGFwYXJzZV9jaGFuZ2Vfc3RhdGUpLCAocGx1Z2luX2luaXQpOgotCSogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuaDoKLQkqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXN0cmlwLmM6IChnc3RfY2R4YXN0cmlwX2dldF90eXBlKSwKLQkoZ3N0X2NkeGFzdHJpcF9iYXNlX2luaXQpLCAoZ3N0X2NkeGFzdHJpcF9jbGFzc19pbml0KSwKLQkoZ3N0X2NkeGFzdHJpcF9pbml0KSwgKGdzdF9jZHhhc3RyaXBfZ2V0X3NyY19mb3JtYXRzKSwKLQkoZ3N0X2NkeGFzdHJpcF9nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X2NkeGFzdHJpcF9oYW5kbGVfc3JjX3F1ZXJ5KSwgKGdzdF9jZHhhc3RyaXBfZ2V0X2V2ZW50X21hc2spLAotCShnc3RfY2R4YXN0cmlwX2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X2NkeGFzdHJpcF9zdHJpcCksCi0JKGdzdF9jZHhhc3RyaXBfc3luYyksIChnc3RfY2R4YXN0cmlwX2hhbmRsZV9ldmVudCksCi0JKGdzdF9jZHhhc3RyaXBfY2hhaW4pLCAoZ3N0X2NkeGFzdHJpcF9jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhc3RyaXAuaDoKLQkgIFNWQ0QvVkNEIGhlYWRlciBzdHJpcHBpbmcgc2VwYXJhdGVkIGZyb20gQ0RYQSBpbWFnZSBwYXJzaW5nLgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChtcDNfdHlwZV9maW5kKSwKLQkocGx1Z2luX2luaXQpOgotCSAgQWRkIFZDRC9TVkNEIGhlYWRlciB0eXBlZmluZGluZyBmb3IgVkNEL1NWQ0QuCi0JKiBzeXMvdmNkL3ZjZHNyYy5jOiAoZ3N0X3ZjZHNyY19nZXRfdHlwZSksIChnc3RfdmNkc3JjX2Jhc2VfaW5pdCksCi0JKGdzdF92Y2RzcmNfY2xhc3NfaW5pdCksIChnc3RfdmNkc3JjX2luaXQpLAotCShnc3RfdmNkc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfdmNkc3JjX2dldF9wcm9wZXJ0eSksCi0JKGdzdF92Y2RzcmNfZ2V0X2V2ZW50X21hc2spLCAoZ3N0X3ZjZHNyY19nZXRfcXVlcnlfdHlwZXMpLAotCShnc3RfdmNkc3JjX2dldF9mb3JtYXRzKSwgKGdzdF92Y2RzcmNfc3JjcGFkX2V2ZW50KSwKLQkoZ3N0X3ZjZHNyY19zcmNwYWRfcXVlcnkpLCAoZ3N0X3ZjZHNyY19nZXQpLAotCShnc3RfdmNkc3JjX29wZW5fZmlsZSksIChnc3RfdmNkc3JjX2Nsb3NlX2ZpbGUpLAotCShnc3RfdmNkc3JjX2NoYW5nZV9zdGF0ZSksIChnc3RfdmNkc3JjX21zZiksCi0JKGdzdF92Y2RzcmNfcmVjYWxjdWxhdGUpLCAoZ3N0X3ZjZHNyY191cmlfZ2V0X3R5cGUpLAotCShnc3RfdmNkc3JjX3VyaV9nZXRfcHJvdG9jb2xzKSwgKGdzdF92Y2RzcmNfdXJpX2dldF91cmkpLAotCShnc3RfdmNkc3JjX3VyaV9zZXRfdXJpKSwgKGdzdF92Y2RzcmNfdXJpX2hhbmRsZXJfaW5pdCk6Ci0JKiBzeXMvdmNkL3ZjZHNyYy5oOgotCSAgRml4IHVwLCBhZGQgc2Vla2luZywgcXVlcnlpbmcsIFVSSSBpbnRlcmZhY2UuIFdvcmtzIGluIHRvdGVtIG5vdy4KLQotMjAwNC0xMS0yNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYmFjayB0byBDVlMKLQotPT09IHJlbGVhc2UgMC44LjYgPT09Ci0KLTIwMDQtMTEtMjUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2NzLnBvOgotCSogcG8vZW5fR0IucG86Ci0JKiBwby9odS5wbzoKLQkqIHBvL2l0LnBvOgotCSogcG8vbmIucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL29yLnBvOgotCSogcG8vc3EucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JICByZWxlYXNpbmcgMC44LjYsICJJT1UgTG92ZSIKLQotMjAwNC0xMS0yMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCXBhdGNoIGJ5OiBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOgotCSAgRml4IHVucGxheWFibGUgZmlsZXMgZXJyb3IgaGFuZGxpbmcuICBGaXhlcyAjMTU4MzY1Ci0KLTIwMDQtMTEtMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlwYXRjaCBieTogUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzoKLQkgIEZpeCBicm9rZW4gbXAzIHR5cGVmaW5kaW5nLiAgRml4ZXMgIzE1ODM3NQotCi0yMDA0LTExLTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JcGF0Y2ggYnk6IFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOgotCSAgRml4IHN5bmMgb24gYnJva2VuIGZpbGVzLiAgRml4ZXMgIzE1ODk3NgotCi0yMDA0LTExLTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JcGF0Y2ggYnk6IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6Ci0JICBDb3B5IG92ZXIgYnVmZmVyIHByb3BlcnRpZXMuICBGaXhlcyAjMTU4ODMyCi0KLTIwMDQtMTEtMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlwYXRjaCBieTogVGltLVBoaWxpcHAgTcO8bGxlciA8dC5pLm1AemVuLmNvLnVrPgotCi0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmM6Ci0JICBGaXhlcyBpbnZhbGlkIHJlYWRzICgjMTU4NDYyKQotCi0yMDA0LTExLTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuaDoKLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6Ci0JICBQcm9iZSBsZXNzIGFuZCBjYWNoZSBpdC4gIEZpeGVzICMxNTkxODcuCi0KLTIwMDQtMTEtMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6Ci0JICBIYW5kbGUgYWxsIHZpZGVvIGZvcm1hdHMuIEZpeGVzICMxNTkxODYuCi0KLTIwMDQtMTEtMTYgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGdzdC9zeW5hZXN0aGVzaWEvZ3N0c3luYWVzdGhlc2lhLmM6Ci0JKGdzdF9zeW5hZXN0aGVzaWFfY2xhc3NfaW5pdCksIChnc3Rfc3luYWVzdGhlc2lhX2luaXQpLAotCShnc3Rfc3luYWVzdGhlc2lhX2Rpc3Bvc2UpLCAoZ3N0X3N5bmFlc3RoZXNpYV9maW5hbGl6ZSksCi0JKGdzdF9zeW5hZXN0aGVzaWFfc2lua19saW5rKSwgKGdzdF9zeW5hZXN0aGVzaWFfc3JjX2dldGNhcHMpLAotCShnc3Rfc3luYWVzdGhlc2lhX3NyY19saW5rKSwgKGdzdF9zeW5hZXN0aGVzaWFfY2hhaW4pLAotCShnc3Rfc3luYWVzdGhlc2lhX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JRml4IHVwIHN5bmFlc3RoZXNpYSB0byB3b3JrIHVuZGVyIGRpZmZlcmVudCBzYW1wbGVyYXRlcy8gYnVmZmVyIHNpemVzLgotCUZvcmNlIDMyMHgyMDAgb3V0cHV0LCBhcyB0aGF0J3MgdGhlIG9ubHkgdGhpbmcgdGhlIHVuZGVybHlpbmcKLQlzeW5hZXN0aGVzaWEgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMuIFN0aWxsIG5lZWRzIHRvIGJlIG1hZGUKLQlyZS1lbnRyYW50LgotCi0yMDA0LTExLTE0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBGaXggbXBlZzJlbmMgY29uZmlndXJlIGNoZWNrIChzaW1pbGFyIHRvIG1wbGV4IGNoZWNrIGJlbG93KS4KLQotMjAwNC0xMS0xNCAgS29vcCBNYXN0ICA8a3dtQHJhaW5ib3ctcnVubmVyLm5sPgotCi0JcmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2RlY21hcC5jOgotCSAgRml4IGZvciBnY2MtMi45NSAoZml4ZXMgIzE1ODIyMSkuCi0KLTIwMDQtMTEtMTMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpOgotCSAgUmUtYWRkIGNsb2NrIGRpc3RyaWJ1dGlvbiBoYWNrICh1bnRpbCBuZXcgY29yZSBpcyByZWxlYXNlZCkuCi0JICBGaXhlcyAjMTU4MTI1LgotCi0yMDA0LTExLTEzICBBcndlZCB2LiBNZXJrYXR6ICA8di5tZXJrYXR6QGdteC5uZXQ+Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBmaXggbXBsZXggY29uZmlndXJlIGNoZWNrIHNlZ2ZhdWx0aW5nIG9uIHNvbWUgc3lzdGVtcyAoYnVnICMxNDA5OTQpCi0KLTIwMDQtMTEtMTMgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfcGNtX3dhaXQpOgotCSAgYWRkIGRlYnVnZ2luZwotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfbG9vcCk6Ci0JICBkbyBhIHdhaXQgd2hlbiB3ZSBlbnRlciB0aGUgbG9vcCBmdW5jIHdpdGggbm8gZGF0YSBhdmFpbGFibGUgdG8KLQkgIHdyaXRlIGluc3RlYWQgb2YgZ2V0dGluZyBpbnRvIGFuIDEwMCUgQ1BVIGxvb3AgYnkganVzdCByZXR1cm5pbmcgYW5kCi0JICBiZWluZyBjYWxsZWQgYWdhaW4gYnkgdGhlIHNjaGVkdWxlcgotCi0yMDA0LTExLTEzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9saWJ2aXN1YWwvdmlzdWFsLmM6IChnc3RfdmlzdWFsX2dldF90eXBlKSwKLQkobGlidmlzdWFsX2xvZ19oYW5kbGVyKSwgKGdzdF92aXN1YWxfZ2V0Y2FwcyksCi0JKGdzdF92aXN1YWxfc3JjbGluayksIChnc3RfdmlzdWFsX2NoYW5nZV9zdGF0ZSksIChtYWtlX3ZhbGlkX25hbWUpLAotCShwbHVnaW5faW5pdCk6Ci0JICBVcGRhdGUgbGlidmlzdWFsIHRvIDAuMS43LiBMaW5rIGluIHRoZSBkZWJ1ZyBoYW5kbGluZyB0byBnc3RyZWFtZXIKLQkqIGV4dC9zbW9vdGh3YXZlL01ha2VmaWxlLmFtOgotCSogZXh0L3Ntb290aHdhdmUvZGVtby1vc3NzcmMuYzogKG1haW4pOgotCSogZXh0L3Ntb290aHdhdmUvZ3N0c21vb3Rod2F2ZS5jOiAoZ3N0X3Ntb290aHdhdmVfY2xhc3NfaW5pdCksCi0JKGdzdF9zbW9vdGh3YXZlX2luaXQpLCAoZ3N0X3Ntb290aHdhdmVfZGlzcG9zZSksIChnc3Rfc3dfc2lua2xpbmspLAotCShnc3Rfc3dfc3JjbGluayksIChnc3Rfc21vb3Rod2F2ZV9jaGFpbiksIChnc3Rfc3dfY2hhbmdlX3N0YXRlKSwKLQkocGx1Z2luX2luaXQpOgotCSogZXh0L3Ntb290aHdhdmUvZ3N0c21vb3Rod2F2ZS5oOgotCSAgTWFrZSBnc3RzbW9vdGh3YXZlIGEgd29ya2luZyBlbGVtZW50IGluIHRoZSAyMHRoIGNlbnR1cnkuCi0KLQkqIGdzdC9jaGFydC9nc3RjaGFydC5jOiAoZ3N0X2NoYXJ0X2luaXQpLCAoZ3N0X2NoYXJ0X3NyY2Nvbm5lY3QpOgotCSAgRml4IGluY29ycmVjdCBsaW5rIGZ1bmN0aW9uCi0KLTIwMDQtMTEtMTIgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC92b2x1bWUvZ3N0dm9sdW1lLmM6Ci0JICBBbGxvdyBidWZmZXItZnJhbWVzPTAuCi0KLTIwMDQtMTEtMTIgSWFpbiA8aWFpbmdub21lQGdtYWlsLmNvbT4KLQotCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgcG9seXBhdWRpbwotCi0JKiBleHQvTWFrZWZpbGUuYW06IEJ1aWxkIHRoZSBwb2x5cCBkaXIKLQotCSogZXh0L3BvbHlwOiBUaGUgcG9seXBzaW5rIHNvdXJjZXMuCi0KLTIwMDQtMTAtMzAgSWFpbiA8aWFpbmdub21lQGdtYWlsLmNvbT4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jIChpbnRlcmxlYXZlX3VubGluayk6IENoYW5nZSB0aGUgc3JjIHBhZHMKLQljYXBzIHRvIHJlZmxlY3QgdGhlIG5ldyBudW1iZXIgb2YgY2hhbm5lbHMuCi0KLTIwMDQtMTEtMTIgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2xvb3ApOgotCSAgRml4IGZvciBuZWdvdGlhdGlvbiBvcmRlciBwcm9ibGVtLiBUaGlzIHdvdWxkIHNob3cgd2hlbiB0aGUKLQkgIEFMU0EgbG9vcGZ1Y3Rpb24gd2FzIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGZ1bmN0aW9uLiBBTFNBCi0JICB3b3VsZG4ndCBkbyBhbnl0aGluZyBiZWNhdXNlIHdlJ3JlIG5vdCBuZWdvdGlhdGVkIHlldCwgbGVhZGluZwotCSAgdG8gYW4gaW5maW5pdGUgbG9vcC4gU2hvd2VkIGluIGUuZy4gUmh5dGhtYm94LiBGaXhlcyAjMTU4MDA2LgotCi0yMDA0LTExLTExICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dC5pLm1AemVuLmNvLnVrPgotCi0JcmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19zcmNfcXVlcnkpOgotCSAgTm8gd2FybmluZ3MgKCMxNTc5ODYpLgotCi0yMDA0LTExLTExICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKHBsdWdpbl9pbml0KToKLQkgIFByZWZlciBhcGV2MS8yIGFuZCBpZDN2MSAoYXQgZW5kIG9mIGZpbGUpIG92ZXIgbXVzZXBhY2suCi0KLTIwMDQtMTEtMTEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2xvb3Bfc3RyZWFtKToKLQkgIFNpZ25hbCBuby1tb3JlLXBhZHMgKHNvIGl0IHdvcmtzIGluIHBsYXliaW4pLgotCi0yMDA0LTExLTExICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tyZWFkZXIuY3BwOgotCSAgV29ya2Fyb3VuZCBmb3Igb2xkZXIgY29yZS4KLQotMjAwNC0xMS0xMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydC5jOiAoeXV2NDIwcF90b195dXY0MjIpOgotCSAgQWN0dWFsbHkgdGVzdCBmb3Igb2RkIHdpZHRoL2hlaWdodCByYXRoZXIgdGhhbiB0ZXN0aW5nIHdoZXRoZXIKLQkgIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRoYXQgd2FzIDAgYmVmb3JlIHdlIHN1YnRyYWN0ZWQgMSBpcyBub3cKLQkgIG5vdCBlcXVhbCB0byB6ZXJvICh3aGljaCBpdCBhbHdheXMgaXMpLgotCi0yMDA0LTExLTExICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50LmM6IChnc3RfdjRsMl9pZmFjZV9zdXBwb3J0ZWQpOgotCUZpeCBjb21waWxhdGlvbiBpZiBIQVZFX1hWSURFTyBpcyBub3QgZGVmaW5lZAotCi0yMDA0LTExLTExICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwvZ3N0djRsZWxlbWVudC5jOiAoZ3N0X3Y0bF9pZmFjZV9zdXBwb3J0ZWQpOgotCUZpeCBjb21waWxhdGlvbiBpZiBIQVZFX1hWSURFTyBpcyBub3QgZGVmaW5lZAotCi0yMDA0LTExLTExICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2NsYXNzX2luaXQpLCAoZ3N0X2dvb21faW5pdCksCi0JKGdzdF9nb29tX2Rpc3Bvc2UpLCAoZ3N0X2dvb21fc2lua2Nvbm5lY3QpLCAoZ3N0X2dvb21fY2hhaW4pLAotCShnc3RfZ29vbV9jaGFuZ2Vfc3RhdGUpLCAocGx1Z2luX2luaXQpOgotCVVzZSB0aGUgYnl0ZXN0cmVhbSBhZGFwdGVyIHNvIGdvb20gZG9lc24ndCBkZXBlbmQgb24gdGhlIGlucHV0Ci0JYnVmZmVyIHNpemUuCi0JQWRkIGEgZGVidWcgY2F0ZWdvcnkKLQotMjAwNC0xMS0xMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfY2hhbmdlX3N0YXRlKToKLQkgIE9ubHkgc2V0IGhhcmR3YXJlIHBhcmFtZXRlcnMgKmFmdGVyKiBuZWdvdGlhdGlvbi4gQmVmb3JlCi0JICBuZWdvdGlhdGlvbiwgaXQgd2lsbCBzZXQgQU5ZIGFuZCB0aGF0IHNlZW1zIHRvIGNhdXNlIGNyYXNoZXMKLQkgIChzZWUgZS5nLiAjMTUxMjg4LCAjMTUzMjI3KS4KLQotMjAwNC0xMS0xMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfZ2V0X3RpbWUpOgotCSAgVGhpcyBzZWVtcyB0byBiZSBhbnRpcXVlIGxlZnRvdmVyLiBJdCBuZWVkcyB0byBwYXNzIGVycm9yCi0JICBjaGVja2luZy4KLQkqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2luaXQpLAotCShnc3Rfc2RsdmlkZW9zaW5rX2RlaW5pdHNkbCksIChnc3Rfc2RsdmlkZW9zaW5rX2luaXRzZGwpLAotCShnc3Rfc2RsdmlkZW9zaW5rX2Rlc3Ryb3kpLCAoZ3N0X3NkbHZpZGVvc2lua19jcmVhdGUpLAotCShnc3Rfc2RsdmlkZW9zaW5rX3Npbmtjb25uZWN0KSwgKGdzdF9zZGx2aWRlb3NpbmtfY2hhaW4pOgotCSAgRml4IEdzdFhPdmVybGF5IGltcGxlbWVudGF0aW9uICgjMTUxMDU5KS4KLQotMjAwNC0xMS0xMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgYXNzZXJ0ICgjMTU3ODUzKS4KLQotMjAwNC0xMS0xMCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfY2hlY2tfZXZlbnQpLAotCSAgRml4IGJ5dGVzL3NhbXBsZXMgY29uZnVzdGlvbi4KLQkoZ3N0X2Fsc2Ffc2lua19tbWFwKSwgKGdzdF9hbHNhX3NpbmtfbG9vcCk6Ci0JICBGaXggZm9yIHVuZGVycnVuICgjMTQ0Mzg5KS4KLQotMjAwNC0xMS0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChtcDNfdHlwZV9maW5kKToKLQkgIERpc2FibGUgaGFsZndheS1zZWVrIGZvciBwZW5kaW5nIHJlbGVhc2UgKHNpbmNlIGl0IG5lZWRzIGEgbmV3Ci0JICBjb3JlIHJlbGVhc2UpLgotCi0yMDA0LTExLTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuaDoKLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6Ci0JICBhZGQgYXV0b3Byb2JlLWZwcyBwcm9wZXJ0eSBzbyB3ZSBjYW4gc2VwYXJhdGUgYXV0b3Byb2JpbmcgcGFydHMKLQotMjAwNC0xMS0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzoKLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6Ci0JaW5pdGlhbGlzZSBmb3VyY2MgdG8gY2F0Y2ggdW5zZXQgZm91cmNjJ3MsIGFuZCBkZWJ1ZwotCi0yMDA0LTExLTA5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL1JFQURNRToKLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKGNsb3NlX3BhZF9saW5rKSwgKHRyeV90b19saW5rXzEpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmluX2Rpc3Bvc2UpLCAoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksCi0JKHJlbW92ZV9zaW5rcyksIChzZXR1cF9zaW5rcyksIChnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3BsYXlfYmluX2dldF9ldmVudF9tYXNrcyksIChnc3RfcGxheV9iaW5fc2VuZF9ldmVudCksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfZm9ybWF0cyksIChnc3RfcGxheV9iaW5fY29udmVydCksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfcXVlcnlfdHlwZXMpLCAoZ3N0X3BsYXlfYmluX3F1ZXJ5KToKLQlDbGVhbnVwcyBhbmQgc29tZSBtb3JlIGRvY3VtZW50YXRpb24uCi0KLTIwMDQtMTEtMDkgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzogKGdzdF9jYWNhc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X2NhY2FzaW5rX2luaXQpLCAoZ3N0X2NhY2FzaW5rX2NoYWluKToKLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmg6Ci0JQ2FjYXNpbmsgaW5oZXJpdHMgZnJvbSBWaWRlb1NpbmssIHNvIGxldCB0aGF0IHN0b3JlIHRoZSBjbG9jay4KLQotMjAwNC0xMS0wOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9SRUFETUU6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdyb3VwX2Rlc3Ryb3kpLCAoZ3JvdXBfaXNfbXV0ZWQpLAotCShhZGRfc3RyZWFtKSwgKHVua25vd25fdHlwZSksIChhZGRfZWxlbWVudF9zdHJlYW0pLCAobm9fbW9yZV9wYWRzKSwKLQkocHJvYmVfdHJpZ2dlcmVkKSwgKHByZXJvbGxfdW5saW5rZWQpLCAobmV3X2RlY29kZWRfcGFkKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2ZvdW5kX3RhZyk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ2VuX3Zpc19lbGVtZW50KSwgKHJlbW92ZV9zaW5rcyksCi0JKHNldHVwX3NpbmtzKToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmM6IChnc3Rfc3RyZWFtX2luZm9fc2V0X211dGUpLAotCShnc3Rfc3RyZWFtX2luZm9faXNfbXV0ZSksIChnc3Rfc3RyZWFtX2luZm9fc2V0X3Byb3BlcnR5KToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmg6Ci0JVXBkYXRlZCBSRUFETUUuCi0JT25seSBzd2l0Y2ggZ3JvdXBzIGlmIGFsbCBzdHJlYW1zIGhhdmUgbXV0ZWQgKEVPU2VkKS4KLQlTZW5kIFRhZ3MgaW4gc3luYyB3aXRoIHRoZSBzdHJlYW0gcGxheWJhY2sgaW5zdGVhZCBvZiBpbgotCXRoZSBwbGF5YmFjay9wcmVyb2xsIHBoYXNlLgotCVNvbWUgY2xlYW51cHMsIGZyZWUgdGhlIGZha2VzcmMgZWxlbWVudHMuCi0KLTIwMDQtMTEtMDkgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfZ2V0X2NhcHNfaW50ZXJuYWwpOgotCSAgYnVmZmVyLWZyYW1lcyBwcm9wZXJ0eSB3YXMgbWlzc2luZwotCSogZXh0L2FydHMvZ3N0X2FydHMuYzoKLQkgIHJhdGUgbWlzc2luZyBmcm9tIHNpbmtjYXBzCi0JKiBleHQvYXVkaW9maWxlL2dzdGFmcGFyc2UuYzoKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6Ci0JKiBleHQvYXVkaW9maWxlL2dzdGFmc3JjLmM6Ci0JKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOgotCSAgaW50IGF1ZGlvIGRvZXNuJ3Qga25vdyBidWZmZXItZnJhbWVzCi0JKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhLmM6Ci0JICBpbnQgYXVkaW8gZG9lc24ndCBrbm93IGNodW5rc2l6ZSBlaXRoZXIKLQkqIGV4dC9uYXMvbmFzc2luay5jOgotCSAgaXQncyBlbmRpYW5uZXNzLCBub3QgZW5kaWFuZXNzCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW8uaDoKLQkgIG1ha2UgZmxvYXQgc3RhbmRhcmQgcGFkIHRlbXBsYXRlIGNhcHMgcmVhbGx5IGRlc2NyaWJlIGZsb2F0Ci0JKiBnc3QvbGF3L211bGF3LmM6IChsaW5lYXJfZmFjdG9yeSk6Ci0JICBzaWduZWQgb25seSwgcGxlYXNlCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOgotCSAgd2lkdGhzIG9mIDIwIGFyZSBub3QgdmFsaWQKLQotMjAwNC0xMS0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCVN1Ym1pdHRlZCBieTogTHVjYSBGZXJyZXR0aSA8ZWxsZS51Y2FAaW5maW5pdG8uaXQ+Ci0KLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9pdC5wbzoKLQkgIEFkZCBJdGFsaWFuCi0KLTIwMDQtMTEtMDggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svUkVBRE1FOgotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoY2xvc2VfcGFkX2xpbmspLCAodHJ5X3RvX2xpbmtfMSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKHByb2JlX3RyaWdnZXJlZCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JVXBkYXRlZCBSRUFETUUsIGFkZGVkIG1vcmUgY29tbWVudHMgZm9yIGZpeG1lcyBldGMuLgotCi0yMDA0LTExLTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9hZGRfZWxlbWVudCk6Ci0JV2UgY2FuIHJlbW92ZSB0aGlzIGhhY2sgbm93LgotCi0yMDA0LTExLTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfYmxlbmRfYXl1dl9heXV2KSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jaGVja2VyKSwgKGdzdF92aWRlb21peGVyX2ZpbGxfY29sb3IpLAotCShnc3RfdmlkZW9taXhlcl9ibGVuZF9idWZmZXJzKSwgKGdzdF92aWRlb21peGVyX2xvb3ApOgotCU9ubHkgbWl4IEFZVVYgZm9yIG1heGltdW0gcXVhbGl0eS4KLQotMjAwNC0xMS0wOCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ2V0X3JlbGF0aXZlKSwgKGdzdF9vZ2dfZGVtdXhfc3JjX3F1ZXJ5KSwKLQkoZ3N0X29nZ19kZW11eF9wdXNoKSwgKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSAgTGV0J3MgYWN0IGFzIGlmIHdlJ3JlIHN5bmNocm9uaXplZCBub3chIDopLgotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9kZWNfY2hhaW4pOgotCSAgQWRkIHNvbWUgZGVidWcuCi0KLTIwMDQtMTEtMDggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9tZXRob2RfZ2V0X3R5cGUpLAotCShnc3RfYWxwaGFfc2V0X3Byb3BlcnR5KSwgKGdzdF9hbHBoYV9zaW5rX2xpbmspLAotCShnc3RfYWxwaGFfc2V0X2F5dXYpLCAoZ3N0X2FscGhhX3NldF9pNDIwKSwKLQkoZ3N0X2FscGhhX2Nocm9tYV9rZXlfYXl1diksIChnc3RfYWxwaGFfY2hyb21hX2tleV9pNDIwKSwKLQkoZ3N0X2FscGhhX2luaXRfcGFyYW1zKSwgKGdzdF9hbHBoYV9jaGFpbik6Ci0JSW1wbGVtZW50IGFscGhhIGZ1bmN0aW9ucyBmb3IgQVlVViB0b28sIHRoaXMgaW5jcmVhc2VzCi0JYWNjdXJhY3kgcXVpdGUgYSBiaXQuCi0KLTIwMDQtMTEtMDggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9hdmNvZGVjLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2RlY21hcC5jOgotCShnc3RfZmZtcGVnX3BpeGZtdF90b19jYXBzKSwgKGdzdF9mZm1wZWdfY2Fwc190b19waXhmbXQpLAotCShnc3RfZmZtcGVnY3NwX2F2cGljdHVyZV9maWxsKToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvbG9yc3BhY2UuYzoKLQkoZ3N0X2ZmbXBlZ2NzcF9jYXBzX3JlbW92ZV9mb3JtYXRfaW5mbyk6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0LmM6IChhdnBpY3R1cmVfZ2V0X3NpemUpLAotCShzaHJpbmsxMiksIChpbWdfZ2V0X2FscGhhX2luZm8pLCAoZGVpbnRlcmxhY2VfbGluZSksCi0JKGRlaW50ZXJsYWNlX2xpbmVfaW5wbGFjZSk6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0X3RlbXBsYXRlLmg6Ci0JQWRkZWQgQVlVViBjb2xvcnNwYWNlIGFuZCBoYW5kbGUgUkdCQSBhIGJpdCBtb3JlIHJlc3BlY3RmdWwuCi0KLTIwMDQtMTEtMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSAgQWN0dWFsbHkgYWx3YXlzIHNlbmQgYSBkaXNjb250IChjb3JuZXJjYXNlIHdoZW4gcmVzZW5kaW5nIHRoZQotCSAgc2FtZSBzZXJpYWwtdGFnZ2VkIGNoYWluIHR3aWNlKS4KLQotMjAwNC0xMS0wOCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3hjb250ZXh0X2NsZWFyKSwKLQkoZ3N0X3hpbWFnZXNpbmtfZmluYWxpemUpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194Y29udGV4dF9jbGVhciksCi0JKGdzdF94dmltYWdlc2lua19maW5hbGl6ZSk6IFNvbWUgbW9yZSBjbGVhbnVwcywgbGVha3MgZml4ZWQgYW5kIGNoZWNrcy4KLQotMjAwNC0xMS0wOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAoYWFjX3R5cGVfZmluZCk6Ci0JRG9uJ3Qgc2VnZmF1bHQgb24gTlVMTCBkYXRhLgotCi0yMDA0LTExLTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAodW5saW5rZWQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXktbWFyc2hhbC5saXN0OgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9jbGFzc19pbml0KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5faW5pdCksIChncm91cF9jcmVhdGUpLCAoZ2V0X2FjdGl2ZV9ncm91cCksCi0JKGdldF9idWlsZGluZ19ncm91cCksIChncm91cF9kZXN0cm95KSwgKGdyb3VwX2NvbW1pdCksCi0JKHF1ZXVlX292ZXJydW4pLCAocmVtb3ZlX2dyb3VwcyksIChhZGRfc3RyZWFtKSwgKHVua25vd25fdHlwZSksCi0JKGFkZF9lbGVtZW50X3N0cmVhbSksIChub19tb3JlX3BhZHMpLCAocHJvYmVfdHJpZ2dlcmVkKSwKLQkocHJlcm9sbF91bmxpbmtlZCksIChuZXdfZGVjb2RlZF9wYWQpLCAocmVtb3ZlZF9kZWNvZGVkX3BhZCksCi0JKHN0YXRlX2NoYW5nZSksIChzZXR1cF9zb3VyY2UpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2FkZF9lbGVtZW50KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fbGlua19zdHJlYW0pLAotCShnc3RfcGxheV9iYXNlX2Jpbl9nZXRfc3RyZWFtaW5mbyk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uaDoKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnc3RfcGxheV9iaW5fY2xhc3NfaW5pdCksCi0JKHJlbW92ZV9zaW5rcyksIChzZXR1cF9zaW5rcyksIChnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKToKLQlBZGQgc3VwcG9ydCBmb3IgY2hhaW5lZCBvZ2cgZmlsZXMuIFByZXBhcmUgZm9yIHBsYXlsaXN0Ci0Jc3VwcG9ydC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBjb25jZXB0IG9mIHBhZCBncm91cHMsIHdoaWNoCi0JdG9nZXRoZXIgY29tcG9zZSBvbmUgcGxheWFibGUgbWVkaWEgZmlsZS4KLQotMjAwNC0xMS0wNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0ZXN0c3VpdGUvZ3N0LWxpbnQ6IENoZWNrIGZvciBwYWQgdGVtcGxhdGVzIHRoYXQgYXJlbid0IHN0YXRpY2FsbHkKLQlzY29wZWQuCi0KLTIwMDQtMTEtMDcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9tdXNlcGFjay9NYWtlZmlsZS5hbToKLQkqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja2RlYy5jcHA6Ci0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tkZWMuaDoKLQkqIGV4dC9tdXNlcGFjay9nc3RtdXNlcGFja3JlYWRlci5jcHA6Ci0JKiBleHQvbXVzZXBhY2svZ3N0bXVzZXBhY2tyZWFkZXIuaDoKLQkgIEFkZCBtdXNlcGFjayBkZWNvZGVyLgotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfYmFzZV9pbml0KToKLQkgIE1ha2UgcGFkIHRlbXBsYXRlcyBzdGF0aWMuCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1wM190eXBlX2ZpbmQpLAotCShwbHVnaW5faW5pdCk6Ci0JICBBZGQgbXVzZXBhY2sgdHlwZWZpbmRlciwgbWFrZSBtcDMgdHlwZWZpbmRpbmcgd29yayBoYWxmd2F5IHN0cmVhbSwKLQkgIHdoaWNoIGRvZXNuJ3QgYWN0dWFsbHkgd29yayB5ZXQgYmVjYXVzZSBpZDNkZW11eCBkb2Vzbid0IGltcGxlbWVudAotCSAgX2dldF9sZW5ndGgoKS4KLQotMjAwNC0xMS0wNyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dtdXguYzogKGdzdF9vZ2dfbXV4X25leHRfYnVmZmVyKSwKLQkoZ3N0X29nZ19tdXhfcXVldWVfcGFkcyksIChnc3Rfb2dnX211eF9sb29wKToKLQkgIEZpeCBpbnRlcnJ1cHQgZXZlbnQgaGFuZGxpbmcgKCMxNDQ0MzYpLgotCi0yMDA0LTExLTA3ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfZG9fdHlwZWZpbmQpOgotCSAgSGlkZSB1bnVzZWQgZ2xvcnkuCi0KLTIwMDQtMTEtMDYgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0LmkubUB6ZW4uY28udWs+Ci0KLQlyZXZpZXdlZCBieTogUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKHJhd19jYXBzX2ZhY3RvcnkpOgotCSAgRml4IHdlaXJkIGNhcHMgKCMxNTc1NDgpLgotCi0yMDA0LTExLTA2ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dC5pLm1AemVuLmNvLnVrPgotCi0JUmV2aWV3ZWQgYnk6IFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtcGFyc2UuYzogKGdzdF9ydHBnc21fY2Fwc19uZWdvKToKLQkgIEFkZCBtaXNzaW5nIE5VTEwgdGVybWluYXRvciAoIzE1NzU0MykuCi0KLTIwMDQtMTEtMDUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC90Y3AvZ3N0dGNwLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNpbmsuYzoKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c3JjLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzoKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6Ci0JICBwb3J0cyBjYW4gZ28gdXAgdG8gNjU1MzUuICBNb3ZlIGNvbW1vbiBkZWZpbmVzIHRvIGdzdHRjcC5oCi0KLTIwMDQtMTEtMDUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdmlkZW90ZXN0c3JjL3ZpZGVvdGVzdHNyYy5jOiAocGFpbnRfc2V0dXBfWTQxQiksCi0JKHBhaW50X2hsaW5lX1k0MUIpLCAocGFpbnRfc2V0dXBfWTQyQiksIChwYWludF9obGluZV9ZNDJCKToKLQlBZGRlZCB0d28gbW9yZSBjb2xvcnNwYWNlcy4KLQotMjAwNC0xMS0wNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKGdzdF9mZm1wZWdjc3BfYXZwaWN0dXJlX2ZpbGwpOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydC5jOiAoYXZwaWN0dXJlX2dldF9zaXplKSwKLQkoeXV2NDIycF90b195dXY0MjIpLCAoeXV2NDIwcF90b195dXY0MjIpLCAoc2hyaW5rMTIpLAotCShpbWdfY29udmVydCksIChkZWludGVybGFjZV9saW5lKSwgKGRlaW50ZXJsYWNlX2xpbmVfaW5wbGFjZSk6Ci0JTW9yZSBzdHJpZGUgZml4ZXMuCi0KLTIwMDQtMTEtMDUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9zZXRfcHJvcGVydHkpLCAoZ3N0X2FscGhhX2FkZCksCi0JKGdzdF9hbHBoYV9jaHJvbWFfa2V5KSwgKGdzdF9hbHBoYV9pbml0X3BhcmFtcyksIChnc3RfYWxwaGFfY2hhaW4pOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfYmxlbmRfYXl1dl9pNDIwKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jaGVja2VyKSwgKGdzdF92aWRlb21peGVyX2JsZW5kX2J1ZmZlcnMpLAotCShnc3RfdmlkZW9taXhlcl9sb29wKToKLQlNb3JlIHN0cmlkZSBmaXhlcy4KLQotMjAwNC0xMS0wNSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9jaGFpbik6Ci0JICBkb24ndCBvdmVyZmxvdyBkYXRhIGJ1ZmZlci4gRmx1c2ggbm90IG5lZWRlZCBzeW5jIGRhdGEgd2hlbiBzeW5jaW5nCi0JICBmYWlsZWQuCi0KLTIwMDQtMTEtMDQgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9tZXRob2RfZ2V0X3R5cGUpLAotCShnc3RfYWxwaGFfY2xhc3NfaW5pdCksIChnc3RfYWxwaGFfaW5pdCksIChnc3RfYWxwaGFfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2FscGhhX2dldF9wcm9wZXJ0eSksIChnc3RfYWxwaGFfYWRkKSwgKGdzdF9hbHBoYV9jaHJvbWFfa2V5KSwKLQkoZ3N0X2FscGhhX2luaXRfcGFyYW1zKSwgKGdzdF9hbHBoYV9jaGFpbiksCi0JKGdzdF9hbHBoYV9jaGFuZ2Vfc3RhdGUpOgotCVVwZGF0ZWQgdGhlIGNocm9tYSBrZXlpbmcgYWxnb3JpdGhtIHdpdGggc29tZXRoaW5nIG1vcmUKLQlzb3BoaXN0aWNhdGVkLgotCi0yMDA0LTExLTAzICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfYmxlbmRfYXl1dl9pNDIwKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jaGVja2VyKSwgKGdzdF92aWRlb21peGVyX2ZpbGxfY29sb3IpLAotCShnc3RfdmlkZW9taXhlcl9ibGVuZF9idWZmZXJzKSwgKGdzdF92aWRlb21peGVyX2xvb3ApOgotCUZpeCBzdHJpZGUgaXNzdWVzLiBEb2VzIG5vdCBjb21wbGV0ZWx5IHdvcmsgZm9yIG9kZAotCWhlaWdodHMuCi0KLTIwMDQtMTEtMDMgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9tZXRob2RfZ2V0X3R5cGUpLAotCShnc3RfYWxwaGFfY2hyb21hX2tleSksIChnc3RfYWxwaGFfY2hhaW4pOgotCUZpeCBzdHJpZGUgaXNzdWVzLiBEb2VzIG5vdCBjb21wbGV0ZWx5IHdvcmsgZm9yIG9kZAotCWhlaWdodHMuCi0KLTIwMDQtMTEtMDMgIENocmlzdG9waGUgRmVyZ2VhdSAgPHRldWZAZ25vbWUub3JnPgotCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9nZXRjYXBzKToKLQkqIGdzdC92aWRlb3NjYWxlL3ZpZGVvc2NhbGUuYzogKHZpZGVvc2NhbGVfZmluZF9ieV9zdHJ1Y3R1cmUpOgotCWxlYWsgZml4ZXMKLQotMjAwNC0xMS0wMyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKGdzdF9mZm1wZWdjc3BfYXZwaWN0dXJlX2ZpbGwpOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydC5jOiAoYXZwaWN0dXJlX2dldF9zaXplKSwKLQkoYXZwaWN0dXJlX2FsbG9jKToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2ltZ2NvbnZlcnRfdGVtcGxhdGUuaDoKLQlVc2UgY29ycmVjdCBfZmlsbCBmdW5jdGlvbiB0byBnZXQgY29ycmVjdCBzdHJpZGVzLgotCi0yMDA0LTExLTAyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwKLQkoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksIChxdGRlbXV4X3BhcnNlKSwgKHF0ZGVtdXhfcGFyc2VfdHJlZSksCi0JKHF0ZGVtdXhfcGFyc2VfdWR0YSksIChxdGRlbXV4X3RhZ19hZGQpLCAoZ3N0X3F0ZGVtdXhfaGFuZGxlX2VzZHMpOgotCUNoYW5nZSBhbGwgZ19wcmludCgpcyB0byBkZWJ1Z2dpbmcuICBBZGQgYSBidW5jaCBvZiBjb25zaXN0ZW5jeQotCWNoZWNrcy4KLQotMjAwNC0xMS0wMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpLAotCSh0cnlfdG9fbGlua18xKSwgKGdldF9vdXJfZ2hvc3RfcGFkKSwgKHJlbW92ZV9lbGVtZW50X2NoYWluKSwKLQkodW5saW5rZWQpLCAobm9fbW9yZV9wYWRzKSwgKGNsb3NlX2xpbmspOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwKLQkodW5rbm93bl90eXBlKSwgKGFkZF9lbGVtZW50X3N0cmVhbSksIChuZXdfZGVjb2RlZF9wYWQpLAotCShyZW1vdmVkX2RlY29kZWRfcGFkKSwgKHNldHVwX3NvdXJjZSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtaW5mby5jOiAoZ3N0X3N0cmVhbV9pbmZvX2dldF90eXBlKSwKLQkoZ3N0X3N0cmVhbV9pbmZvX2NsYXNzX2luaXQpLCAoZ3N0X3N0cmVhbV9pbmZvX2luaXQpLAotCShnc3Rfc3RyZWFtX2luZm9fbmV3KSwgKGdzdF9zdHJlYW1faW5mb19kaXNwb3NlKSwKLQkoc3RyZWFtX2luZm9fbXV0ZV9wYWQpLCAoZ3N0X3N0cmVhbV9pbmZvX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9zdHJlYW1faW5mb19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uaDoKLQlGaXggcGxheWJhY2sgb2YgbXVsdGlwbGUgZmlsZXMuCi0JYSBzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gaGFuZGxpbmcgZHluYW1pYyBwYWQgcmVtb3ZhbHMuCi0JVGhpcyBvbmUgb25seSBsb29rcyBhdCBwYWRzIHRoYXQgd2UgaGF2ZSBsaW5rZWQuCi0KLTIwMDQtMTEtMDEgIENocmlzdG9waGUgRmVyZ2VhdSAgPHRldWZAZ25vbWUub3JnPgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X2ZpbmFsaXplKTogZml4IGFuICJpbnZhbGlkCi0JZnJlZSIgd2FybmluZyBmcm9tIGxpYmMuCi0KLTIwMDQtMTEtMDEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpLAotCShnZXRfdW5jb25uZWN0ZWRfZWxlbWVudCksIChyZW1vdmVfc3RhcnRpbmdfZnJvbSksIChwYWRfcmVtb3ZlZCksCi0JKGNsb3NlX2xpbmspOgotCSAgSW1wbGVtZW50IHN1cHBvcnQgZm9yIGR5bmFtaWMgcGFkIGNoYW5naW5nLiBXZSBsaXN0ZW4gdG8gImxpdmUiCi0JICBwYWQgcmVtb3ZhbHMgKGkuZS4gd2hpbGUgcGxheWluZykgYW5kIHJlLXNldHVwIGF1dG9wbHVnZ2luZwotCSAgYWZ0ZXIgdGhhdC4gUGxheWJhc2ViaW4vcGxheWJpbiBuZWVkIHNvbWUgbW9yZSB3b3JrIGZvciB0aGlzCi0JICB0byBmaW5hbGx5IHdvcmssIGJ1dCBkZWNvZGViaW4gc3VwcG9ydHMgKGFuZCByZXBsdWdzKSBjaGFpbmVkCi0JICBvZ2cgbm93LgotCi0yMDA0LTExLTAyICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2NsYXNzX2luaXQpLCAoZ3N0X2Fsc2FfZGlzcG9zZSksCi0JKGdzdF9hbHNhX2ZpbmFsaXplKToKLQkqIGV4dC9jZGF1ZGlvL2dzdGNkYXVkaW8uYzogKGdzdF9jZGF1ZGlvX2NsYXNzX2luaXQpLAotCShnc3RfY2RhdWRpb19maW5hbGl6ZSk6Ci0JKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhLmM6IChjZHBhcmFub2lhX2NsYXNzX2luaXQpLAotCShjZHBhcmFub2lhX2ZpbmFsaXplKToKLQkqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzogKGdzdF9kaXZ4ZGVjX2Rpc3Bvc2UpOgotCSogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOiAoZ3N0X2RpdnhlbmNfZGlzcG9zZSk6Ci0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmM6IChkdmRyZWFkc3JjX2NsYXNzX2luaXQpLAotCShkdmRyZWFkc3JjX2ZpbmFsaXplKToKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjZGVjX2NsYXNzX2luaXQpLAotCShnc3RfZmxhY2RlY19maW5hbGl6ZSk6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY2VuY19jbGFzc19pbml0KSwKLQkoZ3N0X2ZsYWNlbmNfZmluYWxpemUpOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc2luay5jOiAoZ3N0X2dub21ldmZzc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X2dub21ldmZzc2lua19maW5hbGl6ZSk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogKGdzdF9nbm9tZXZmc3NyY19jbGFzc19pbml0KSwKLQkoZ3N0X2dub21ldmZzc3JjX2ZpbmFsaXplKToKLQkqIGV4dC9saWJmYW1lL2dzdGxpYmZhbWUuYzogKGdzdF9mYW1lZW5jX2NsYXNzX2luaXQpLAotCShnc3RfZmFtZWVuY19maW5hbGl6ZSk6Ci0JKiBleHQvbmFzL25hc3NpbmsuYzogKGdzdF9uYXNzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfbmFzc2lua19maW5hbGl6ZSk6Ci0JKiBleHQvc2RsL3NkbHZpZGVvc2luay5jOiAoZ3N0X3NkbHZpZGVvc2lua19maW5hbGl6ZSksCi0JKGdzdF9zZGx2aWRlb3NpbmtfY2xhc3NfaW5pdCk6Ci0JKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX2Rpc3Bvc2UpOgotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVydHJhY2suYzogKGdzdF9taXhlcl90cmFja19kaXNwb3NlKToKLQkqIGdzdC1saWJzL2dzdC90dW5lci90dW5lcmNoYW5uZWwuYzogKGdzdF90dW5lcl9jaGFubmVsX2Rpc3Bvc2UpOgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL3R1bmVybm9ybS5jOiAoZ3N0X3R1bmVyX25vcm1fZGlzcG9zZSk6Ci0JKiBnc3QtbGlicy9nc3QveHdpbmRvd2xpc3RlbmVyL3h3aW5kb3dsaXN0ZW5lci5jOgotCShnc3RfeF93aW5kb3dfbGlzdGVuZXJfZGlzcG9zZSk6Ci0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmM6Ci0JKiBnc3QvcGxheW9uZGVtYW5kL2dzdHBsYXlvbmRlbWFuZC5jOiAocGxheV9vbl9kZW1hbmRfY2xhc3NfaW5pdCksCi0JKHBsYXlfb25fZGVtYW5kX2ZpbmFsaXplKToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzogKGdzdF92aWRlb2JhbGFuY2VfZGlzcG9zZSk6Ci0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9jaGFpbik6Ci0JKiBzeXMvY2Ryb20vZ3N0Y2RwbGF5ZXIuYzogKGNkcGxheWVyX2NsYXNzX2luaXQpLAotCShjZHBsYXllcl9maW5hbGl6ZSk6Ci0JKiBzeXMvZ2xzaW5rL2dsaW1hZ2VzaW5rLmM6IChnc3RfZ2xpbWFnZXNpbmtfZmluYWxpemUpLAotCShnc3RfZ2xpbWFnZXNpbmtfY2xhc3NfaW5pdCk6Ci0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogKGdzdF9vc3NlbGVtZW50X2NsYXNzX2luaXQpLAotCShnc3Rfb3NzZWxlbWVudF9maW5hbGl6ZSk6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3NzaW5rX2Rpc3Bvc2UpOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuYzogKGdzdF9vc3NzcmNfZGlzcG9zZSk6Ci0JKiBzeXMvdjRsL2dzdHY0bGVsZW1lbnQuYzogKGdzdF92NGxlbGVtZW50X2Rpc3Bvc2UpOgotCSAgRml4ZXMgYSBidW5jaCBvZiBwcm9ibGVtcyB3aXRoIGZpbmFsaXplIGFuZCBkaXNwb3NlIGZ1bmN0aW9ucywKLQkgIGVpdGhlciBhc3N1bXB0aW9ucyB0aGF0IGRpc3Bvc2UgaXMgb25seSBjYWxsZWQgb25jZSwgb3Igbm90IGNhbGxpbmcKLQkgIHRoZSBwYXJlbnQgY2xhc3MgZGlzcG9zZS9maW5hbGl6ZSBmdW5jdGlvbgotCi0yMDA0LTExLTAxICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBleHQvZXNkL2VzZHNpbmsuYzogKGdzdF9lc2RzaW5rX2luaXQpLCAoZ3N0X2VzZHNpbmtfbGluayk6Ci0JICBhZGRlZCB0d28gYXBpIHByZWNvbmRpdGlvbiBndWFyZHMKLQkgIHVzZSBnX3N0cmR1cCB3aXRoIGdldGVudiB0byBmaXggY3Jhc2ggd2hlbiB1c2luZyBFTlZWQVIKLQotMjAwNC0xMS0wMSAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X2VzZHNpbmtfZmluYWxpemUpOgotCVVzZSBhIGZpbmFsaXplIGZ1bmN0aW9uLCBub3QgZGlzcG9zZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksCi0JY2FsbCB0aGUgcGFyZW50IGNsYXNzIGZpbmFsaXplIGZ1bmN0aW9uIHRvbwotCi0yMDA0LTExLTAxICBKb2hhbiBEYWhsaW4gIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzoKLQkqIGdzdC90YWdzL2dzdHZvcmJpc3RhZy5jOgotCVBsdWcgbGVha3MuCi0KLTIwMDQtMTAtMzEgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IChnc3Rfdm9yYmlzX3RhZ19jaGFpbik6Ci0JICBsb3RzYSBtZW1sZWFrcyB0b2RheS4gQnV0IHRoZXkncmUgYWxsIHNtYWxsLi4uCi0KLTIwMDQtMTAtMzEgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19wYWRfcHVzaCk6Ci0JICBhbm90aGVyIG1lbWxlYWsgY3J1c2hlZAotCi0yMDA0LTEwLTMxICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC90YWdzL2dzdHZvcmJpc3RhZy5jOiAoZ3N0X3RhZ190b192b3JiaXNfY29tbWVudHMpOgotCSAgZml4IG1lbWxlYWsKLQotMjAwNC0xMC0zMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19wYWRfcHVzaCk6Ci0JICBIYWNrIHRvIHByZXZlbnQgY3Jhc2ggd2hlbiBnb2luZyB0byBSRUFEWSBpbnNpZGUgc2lnbmFsIGhhbmRsZXIKLQkgIHdoaWxlIHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlLgotCi0yMDA0LTEwLTMxICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9NYWtlZmlsZS5hbToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2F2Y29kZWMuaDoKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2NvbW1vbi5oOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZHNwdXRpbC5jOiAoZHNwdXRpbF9zdGF0aWNfaW5pdCk6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9kc3B1dGlsLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWcuYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKGdzdF9mZm1wZWdfZ2V0X3BhbGV0dGUpLCAoZ3N0X2ZmbXBlZ19zZXRfcGFsZXR0ZSksCi0JKGdzdF9mZm1wZWdfcGl4Zm10X3RvX2NhcHMpLCAoZ3N0X2ZmbXBlZ19zbXBmbXRfdG9fY2FwcyksCi0JKGdzdF9mZm1wZWdjc3BfY29kZWN0eXBlX3RvX2NhcHMpLCAoZ3N0X2ZmbXBlZ19jYXBzX3RvX3NtcGZtdCksCi0JKGdzdF9mZm1wZWdfY2Fwc190b19waXhmbXQpLCAoZ3N0X2ZmbXBlZ2NzcF9jYXBzX3dpdGhfY29kZWN0eXBlKSwKLQkoZ3N0X2ZmbXBlZ2NzcF9hdnBpY3R1cmVfZmlsbCk6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2RlY21hcC5oOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29sb3JzcGFjZS5jOgotCShnc3RfZmZtcGVnY3NwX2NhcHNfcmVtb3ZlX2Zvcm1hdF9pbmZvKSwgKGdzdF9mZm1wZWdjc3BfZ2V0Y2FwcyksCi0JKGdzdF9mZm1wZWdjc3BfcGFkX2xpbmspLCAoZ3N0X2ZmbXBlZ2NzcF9nZXRfdHlwZSksCi0JKGdzdF9mZm1wZWdjc3BfYmFzZV9pbml0KSwgKGdzdF9mZm1wZWdjc3BfY2xhc3NfaW5pdCksCi0JKGdzdF9mZm1wZWdjc3BfaW5pdCksIChnc3RfZmZtcGVnY3NwX2NoYWluKSwKLQkoZ3N0X2ZmbXBlZ2NzcF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2ZmbXBlZ2NzcF9zZXRfcHJvcGVydHkpLAotCShnc3RfZmZtcGVnY3NwX2dldF9wcm9wZXJ0eSksIChnc3RfZmZtcGVnY29sb3JzcGFjZV9yZWdpc3Rlcik6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0LmM6Ci0JKGF2Y29kZWNfZ2V0X2Nocm9tYV9zdWJfc2FtcGxlKSwgKGF2Y29kZWNfZ2V0X3BpeF9mbXRfbmFtZSksCi0JKGF2Y29kZWNfZ2V0X3BpeF9mbXQpLCAoYXZwaWN0dXJlX2ZpbGwpLCAoYXZwaWN0dXJlX2xheW91dCksCi0JKGF2cGljdHVyZV9nZXRfc2l6ZSksIChhdmNvZGVjX2dldF9waXhfZm10X2xvc3MpLAotCShhdmdfYml0c19wZXJfcGl4ZWwpLCAoYXZjb2RlY19maW5kX2Jlc3RfcGl4X2ZtdDEpLAotCShhdmNvZGVjX2ZpbmRfYmVzdF9waXhfZm10KSwgKGltZ19jb3B5X3BsYW5lKSwgKGltZ19jb3B5KSwKLQkoeXV2NDIyX3RvX3l1djQyMHApLCAodXl2eTQyMl90b195dXY0MjBwKSwgKHV5dnk0MjJfdG9feXV2NDIycCksCi0JKHl1djQyMl90b195dXY0MjJwKSwgKHl1djQyMnBfdG9feXV2NDIyKSwgKHl1djQyMnBfdG9fdXl2eTQyMiksCi0JKHV5dnk0MTFfdG9feXV2NDExcCksICh5dXY0MjBwX3RvX3l1djQyMiksIChDX0pQRUdfVE9fQ0NJUiksCi0JKGltZ19jb252ZXJ0X2luaXQpLCAoaW1nX2FwcGx5X3RhYmxlKSwgKHNocmluazQxKSwgKHNocmluazIxKSwKLQkoc2hyaW5rMTIpLCAoc2hyaW5rMjIpLCAoc2hyaW5rNDQpLCAoZ3JvdzIxX2xpbmUpLCAoZ3JvdzQxX2xpbmUpLAotCShncm93MjEpLCAoZ3JvdzIyKSwgKGdyb3c0MSksIChncm93NDQpLCAoY29udjQxMSksCi0JKGdpZl9jbHV0X2luZGV4KSwgKGJ1aWxkX3JnYl9wYWxldHRlKSwgKGJpdGNvcHlfbiksIChtb25vX3RvX2dyYXkpLAotCShtb25vd2hpdGVfdG9fZ3JheSksIChtb25vYmxhY2tfdG9fZ3JheSksIChncmF5X3RvX21vbm8pLAotCShncmF5X3RvX21vbm93aGl0ZSksIChncmF5X3RvX21vbm9ibGFjayksIChhdnBpY3R1cmVfYWxsb2MpLAotCShhdnBpY3R1cmVfZnJlZSksIChpc195dXZfcGxhbmFyKSwgKGltZ19jb252ZXJ0KSwKLQkoZ2V0X2FscGhhX2luZm9fcGFsOCksIChpbWdfZ2V0X2FscGhhX2luZm8pLCAoZGVpbnRlcmxhY2VfbGluZSksCi0JKGRlaW50ZXJsYWNlX2xpbmVfaW5wbGFjZSksIChkZWludGVybGFjZV9ib3R0b21fZmllbGQpLAotCShkZWludGVybGFjZV9ib3R0b21fZmllbGRfaW5wbGFjZSksIChhdnBpY3R1cmVfZGVpbnRlcmxhY2UpOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydF90ZW1wbGF0ZS5oOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvbWVtLmM6IChhdl9tYWxsb2MpLCAoYXZfcmVhbGxvYyksIChhdl9mcmVlKToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL21teC5oOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvdXRpbHMuYzogKGF2X21hbGxvY3opLCAoYXZfc3RyZHVwKSwKLQkoYXZfZmFzdF9yZWFsbG9jKSwgKGF2X21hbGxvY3pfc3RhdGljKSwgKGF2X2ZyZWVfc3RhdGljKSwKLQkoYXZfZnJlZXApLCAoYXZjb2RlY19nZXRfY29udGV4dF9kZWZhdWx0cyksCi0JKGF2Y29kZWNfYWxsb2NfY29udGV4dCksIChhdmNvZGVjX2luaXQpOgotCSAgU3luYyBiYWNrIGZyb20gZ3N0LWZmbXBlZy4gRGVwcmVjYXRlcyBmZmNvbG9yc3BhY2UuIEFkZHMgcGFsZXR0ZQotCSAgaGFuZGxpbmcgcGx1cyB1cGRhdGUgZnJvbSBmZm1wZWcgQ1ZTLiBMYXJnZSBjbGVhbi11cC4KLQotMjAwNC0xMC0zMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL01ha2VmaWxlLmFtOgotCSAgV2UgbmVlZCB0aGUgbWFyc2hhbGxlcnMgZm9yIGRlY29kZWJpbiwgdG9vLgotCi0yMDA0LTEwLTMwICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAocXRfdHlwZV9maW5kKTogTWFrZQotCSAgcXVpY2t0aW1lIHR5cGVmaW5kaW5nIHdvcmsgd2l0aCA2NC1iaXQgb2Zmc2V0cy4KLQotMjAwNC0xMC0zMCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19oYW5kbGVfc2lua19ldmVudCk6Ci0JICBTZXQgRU9TIG9uIHRoZSBlbGVtZW50IHdoZW4gcHJvY2Vzc2luZyBhbiBFT1MgZXZlbnQuCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuaDoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5oOgotCSAgT25seSBrZWVwIGEgY29uc3QgcHRyIHRvIHRoZSBtb2RlCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzX3dpdGhfZGF0YSksCi0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb190ZW1wbGF0ZV9jYXBzKToKLQkgIEFsbG93IFdNQVYzLCB3aXRoIHVwIHRvIDYgY2hhbm5lbHMuCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmbXV4LmM6IChnc3RfYXNmbXV4X3JlcXVlc3RfbmV3X3BhZCk6Ci0JICBEb24ndCBjYWxsIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIG9uIGEgc2luayBwYWQuCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOgotCShnc3RfZHZkX2RlbXV4X2dldF9zdWJwaWN0dXJlX3N0cmVhbSksCi0JKGdzdF9kdmRfZGVtdXhfc2V0X2N1cl9hdWRpbyksIChnc3RfZHZkX2RlbXV4X3NldF9jdXJfc3VicGljdHVyZSk6Ci0JICBDb3B5IHRoZSBleHBsaWNpdCBjYXBzIHRoYXQgd2VyZSBzZXQgYWNyb3NzIHRvIHRoZSBjdXJfKiBwYWRzLAotCSAgaW5zdGVhZCBvZiB0cnlpbmcgdG8gdXNlIGEgcG9zc2libHkgbm9uLWV4aXN0ZW50IG5lZ290aWF0ZWQgY2Fwcy4KLQkgIFJlc2V0IHRoZSB0eXBlIG9mIHN1YnBpY3R1cmUgcGFkcyB0byBVTktOT1dOIGFmdGVyIGNhbGxpbmcKLQkgIGluaXRfc3RyZWFtLCBzbyB0aGF0IHRoZSBjYXBzIGdldCBzZXQuCi0KLTIwMDQtMTAtMjkgIE1hcnRpbiBQaXR0ICA8bWFydGluLnBpdHRAY2Fub25pY2FsLmNvbT4KLQotCVJldmlld2VkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfY2h1bmspOgotCSAgRG9uJ3QgdG91Y2ggYnVmZmVyIGlmIGl0IGlzIG9mIHNpemUgMCAoZml4ZXMgIzE1MTA2NCkuCi0KLTIwMDQtMTAtMjkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfcHVzaCksIChnc3Rfb2dnX3BhZF9wdXNoKToKLQkgIFN5bmNocm9uaXplZCBkaXNjb250IGhhbmRsaW5nLgotCi0yMDA0LTEwLTI5ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19ldmVudCksCi0JKGdzdF9vZ2dfZGVtdXhfcHVzaCk6Ci0JICBNYWtlIHNlZWtpbmcgc29ydC1vZiBleGFjdCBhZ2FpbiAoZml4ZXMgIzE1NjM4NykuCi0KLTIwMDQtMTAtMjkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAodW5rbm93bl90eXBlKSwKLQkoYWRkX2VsZW1lbnRfc3RyZWFtKSwgKG5ld19kZWNvZGVkX3BhZCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtaW5mby5jOiAoZ3N0X3N0cmVhbV9pbmZvX2NsYXNzX2luaXQpLAotCShnc3Rfc3RyZWFtX2luZm9faW5pdCksIChnc3Rfc3RyZWFtX2luZm9fbmV3KSwKLQkoZ3N0X3N0cmVhbV9pbmZvX2Rpc3Bvc2UpLCAoZ3N0X3N0cmVhbV9pbmZvX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtaW5mby5oOgotCSAgTWFrZSBjYXBzIGV4cGxpY2l0ZWx5IGF2YWlsYWJsZS4gTWFrZXMgdGVzdGluZyBmb3IgdW5zdXBwb3J0ZWQKLQkgIHR5cGVzIHBvc3NpYmxlLiBJbXByb3ZlcyBlcnJvciByZXBvcnRpbmcuCi0KLTIwMDQtMTAtMjkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6Ci0JKGdzdF9hdWRpb19jb252ZXJ0X2J1ZmZlcl90b19kZWZhdWx0X2Zvcm1hdCk6Ci0JICBSZWFsbHkgZG9uJ3QgdG91Y2ggcmVhZC1vbmx5IGJ1ZmZlcnMgKCMxNTY1NjMpLgotCi0yMDA0LTEwLTI5ICBTZWJhc3RpZW4gQ290ZSAgPHNjNUBoZXJtZXMudXNoZXJiLmNhPgotCi0JUmV2aWV3ZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2ZtdCk6Ci0JICBGaXggbWVtbGVhayAoIzE1NTIyMykuCi0KLTIwMDQtMTAtMjkgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwLy5jdnNpZ25vcmU6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3Rfc3luY19tZXRob2RfZ2V0X3R5cGUpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xhc3NfaW5pdCksIChnc3RfbXVsdGlmZHNpbmtfaW5pdCksCi0JKGdzdF9tdWx0aWZkc2lua19hZGQpLCAoZ3N0X211bHRpZmRzaW5rX3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19yZW1vdmVfY2xpZW50X2xpbmspLCAoaXNfc3luY19mcmFtZSksCi0JKGdzdF9tdWx0aWZkc2lua19uZXdfY2xpZW50KSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVjb3Zlcl9jbGllbnQpLCAoZ3N0X211bHRpZmRzaW5rX3F1ZXVlX2J1ZmZlciksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50cyksIChnc3RfbXVsdGlmZHNpbmtfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X211bHRpZmRzaW5rX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmg6Ci0JQWRkZWQgYnVyc3Qgb24gY29ubmVjdCBzeW5jX21ldGhvZCwgZGVwcmVjYXRlZCBzeW5jX2NsaWVudHMsCi0Jc3RyZWFtbGluZWQgdGhlIHN5bmMgY29kZSBzb21lIG1vcmUuCi0KLTIwMDQtMTAtMjkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAodGhyZWFkX2Vycm9yKSwgKHNldHVwX3NvdXJjZSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBJbXByb3ZlIGVycm9yIHJlcG9ydGluZy4KLQotMjAwNC0xMC0yOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdGNwL2Zkc2V0c3RyZXNzLmM6IChtZXNzX3NvbWVfbW9yZSksIChydW5fdGVzdCksIChtYWluKToKLQkqIGdzdC90Y3AvZ3N0ZmRzZXQuYzogKG5lYXJlc3RfcG93KSwgKHJlc2l6ZSksIChlbnN1cmVfc2l6ZSksCi0JKGdzdF9mZHNldF9uZXcpLCAoZ3N0X2Zkc2V0X2ZyZWUpLCAoZ3N0X2Zkc2V0X3NldF9tb2RlKSwKLQkoZ3N0X2Zkc2V0X2ZkX2N0bF93cml0ZSksIChnc3RfZmRzZXRfZmRfY3RsX3JlYWQpLAotCShnc3RfZmRzZXRfZmRfaGFzX2Nsb3NlZCksIChnc3RfZmRzZXRfZmRfaGFzX2Vycm9yKSwKLQkoZ3N0X2Zkc2V0X2ZkX2Nhbl9yZWFkKSwgKGdzdF9mZHNldF9mZF9jYW5fd3JpdGUpLAotCShnc3RfZmRzZXRfd2FpdCk6Ci0JQWRkZWQgbW9yZSBsb2NrcyBhcm91bmQgZmRzZXQgc3RydWN0dXJlcy4gRml4ZWQvcmV3b3JrZWQKLQl0aGUgcG9sbCBhcnJheSByZXNpemluZyBjb2RlLgotCUFkZGVkIHN0cmVzcyB0ZXN0IGZvciBmZHNldC4KLQotMjAwNC0xMC0yOCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuYzogKGdzdF9hdWRpb2ZpbHRlcl9saW5rKToKLQlmaXggYnVpbGQKLQotMjAwNC0xMC0yOCAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuYzogKGdzdF9hdWRpb2ZpbHRlcl9saW5rKToKLQkgIGZpeCBsaW5rIGZ1bmN0aW9uIHRvIGFsd2F5cyBxdWVyeSBjaGFubmVscyBhbmQgcXVlcnkgd2lkdGggZm9yCi0JICBmbG9hdHMKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGFkZCBlcXVhbGl6ZXIgZGlyCi0JKiBnc3QvZXF1YWxpemVyL01ha2VmaWxlLmFtOgotCSogZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYzogKGdzdF9paXJfZXF1YWxpemVyX2dldF90eXBlKSwKLQkoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFzZV9pbml0KSwgKGdzdF9paXJfZXF1YWxpemVyX2NsYXNzX2luaXQpLAotCShnc3RfaWlyX2VxdWFsaXplcl9pbml0KSwgKGdzdF9paXJfZXF1YWxpemVyX2ZpbmFsaXplKSwKLQkoYXJnX3RvX3NjYWxlKSwgKHNldHVwX2ZpbHRlciksCi0JKGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMpLAotCShnc3RfaWlyX2VxdWFsaXplcl9zZXRfcHJvcGVydHkpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2lpcl9lcXVhbGl6ZXJfZmlsdGVyX2lucGxhY2UpLCAoZ3N0X2lpcl9lcXVhbGl6ZXJfc2V0dXApLAotCShwbHVnaW5faW5pdCk6Ci0JICBhZGQgYW4gZXF1YWxpemVyCi0KLTIwMDQtMTAtMjcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlTdWJtaXR0ZWQgYnk6IEtqYXJ0YW4gTWFyYWFzIDxrbWFyYWFzQGJyb2FkcGFyay5ubz4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL25iLnBvOgotCSAgQWRkZWQgTm9yd2VnaWFuIEJva21hYWwgdHJhbnNsYXRpb24KLQotMjAwNC0xMC0yNyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmM6IChnc3RfYWxzYV9taXhlcl9idWlsZF9saXN0KToKLQkgIERvbid0IGJyZWFrIG9uIG9wdGlvbnMgKGZpeGVzICMxNTY0ODgpLgotCi0yMDA0LTEwLTI3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvY2RhdWRpby9NYWtlZmlsZS5hbToKLQkqIHN5cy9NYWtlZmlsZS5hbToKLQkgIGZpeCBidWlsZCBvbiBvbGRlciBhdXRvbWFrZQotCi0yMDA0LTEwLTI2ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfdmlkZW9fZ2V0Y2FwcyksCi0JKGdzdF9kdmRlY192aWRlb19saW5rKSwgKGdzdF9kdmRlY19wdXNoKSwgKGdzdF9kdmRlY19sb29wKToKLQlBbGxvdyBhIGxpdHRsZSBtYXJnaW4gd2hlbiBuZWdvdGlhdGluZyB0aGUgZnJhbWVyYXRlLgotCi0yMDA0LTEwLTI2ICBTdGVmYW4gS29zdCAgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzoKLQkgIHN5bmNob25pc2VkIG5hbWluZyBvZiBwYWRzIGFuZCBwYWQtdGVtcGxhdGVzCi0KLTIwMDQtMTAtMjYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19ldmVudCksCi0JKGdzdF9vZ2dfZGVtdXhfaGFuZGxlX2V2ZW50KSwgKF9maW5kX2NoYWluX2dldF91bmtub3duX3BhcnQpLAotCShfZmluZF9zdHJlYW1zX2NoZWNrKSwgKGdzdF9vZ2dfZGVtdXhfcHVzaCk6Ci0JRml4IEVPUyBhZ2Fpbi4gTmVlZHMgdG8gYmUgZG9uZSBpbiBhIGJldHRlciB3YXkuIFdlIHNob3VsZCBub3QKLQlyZW1vdmUgdGhlIHBhZCBpZiB0aGVyZSBpcyBubyBuZXcgY2hhaW5lZCBzdHJlYW0uCi0KLTIwMDQtMTAtMjYgSWFpbiA8aWFpbmdub21lQGdtYWlsLmNvbT4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jIChnc3Rfb2dnX3BhZF9uZXcpOiBGcmVlIHRoZSB0YWcgbGlzdC4KLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuYyAoZ3N0X2F1ZGlvc2NhbGVfbGluayk6IEZyZWUgdGhlIGNvcHkKLQlvZiB0aGUgY2Fwcy4KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYyAoaW50ZXJsZWF2ZV9jbGFzc19pbml0KTogSG9vayB1cCByZWxlYXNlCi0JcGFkLgotCShpbnRlcmxlYXZlX3JlbGVhc2VfcGFkKTogUmVtb3ZlIHRoZSBwYWQuCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogQWxsb3cgdGhlIGxldmVsIHRvIHRha2UgMSBvciAyIGNoYW5uZWxzLgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvLmMgKGdzdF9zdW5hdWRpb19zZXRwYXJhbXMpOiBQYXkgYXR0ZW50aW9uIHRvCi0JdGhlIHNldCBkZXZpY2UuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jIChnc3RfeHZpbWFnZXNpbmtfZ2V0X3h2X3N1cHBvcnQpOiBGcmVlIHRoZQotCWF0dHJzCi0JKGdzdF94dmltYWdlc2lua194Y29udGV4dF9jbGVhcik6IEZyZWUgdGhlIHhjb250ZXh0LgotCShnc3RfeHZpbWFnZXNpbmtfZmluYWxpemUpOiBGcmVlIHRoZSBwYXIuCi0KLTIwMDQtMTAtMjYgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6IChnc3RfYXZpbXV4X2F1ZHNpbmtjb25uZWN0KSwKLQkoZ3N0X2F2aW11eF9zdG9wX2ZpbGUpOgotCSAgRmlyc3QgY2FsY3VsYXRlIHRoZSByYXRlLCBhbmQgb25seSB0aGVuIHVzZSBpdC4gSGRyLnJhdGUgaXMgYQotCSAgbXVsdGlwbGUgYW5kIG5vdCBhIGRlcml2YXRpdmUgb2YgaGRyLnNjYWxlLiBTY2FsZSBpcyBub3QgdGhlCi0JICBzYW1lIGFzIGJsb2NrYWxpZ24gYnV0IGlzIHNvbGVseSByZWxhdGVkIHRvIHJhdGUuCi0KLTIwMDQtMTAtMjYgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzogKGdzdF9nbm9tZXZmc3NpbmtfaW5pdCksCi0JKGdzdF9nbm9tZXZmc3NpbmtfaGFuZGxlX2V2ZW50KSwgKGdzdF9nbm9tZXZmc3NpbmtfY2hhaW4pOgotCSAgSW1wbGVtZW50IHNlZWtpbmcuCi0KLTIwMDQtMTAtMjUgIEphbWVzIEhlbnN0cmlkZ2UgIDxqYW1lc0BqYW1lc2guaWQuYXU+Ci0KLQlSZXZpZXdlZCBieTogIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKGdvdF9zdHJlYW1fbGVuZ3RoKSwgKG1haW4pOgotCSogZXhhbXBsZXMvc2Vla2luZy9jZHBsYXllci5jOiAodXBkYXRlX3NjYWxlKToKLQkqIGV4YW1wbGVzL3NlZWtpbmcvc2Vlay5jOiAoZm9ybWF0X3ZhbHVlKSwgKHVwZGF0ZV9zY2FsZSk6Ci0JKiBleGFtcGxlcy9zZWVraW5nL3NwaWRlcl9zZWVrLmM6IChmb3JtYXRfdmFsdWUpLCAodXBkYXRlX3NjYWxlKSwKLQkoc3RvcF9zZWVrKToKLQlCdWlsZCBmaXhlcyBvbiBBTUQ2NC4KLQotMjAwNC0xMC0yNSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JcmV2aWV3ZWQgYnk6IFJvbmFsZCBCdWx0amUgPHJidWx0amUgYXQgZ25vbWUgZG90IG9yZz4KLQotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfZ2V0X2NoYW5fbmFtZXMpOgotCUZpeCBmb3Igc29tZSB2NGwgY2FyZHMgd2hpY2ggaGFuZyBpbiB2NGxzcmMKLQotMjAwNC0xMC0yNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfcGFkX3JlbW92ZSksCi0JKGdzdF9vZ2dfZGVtdXhfcHVzaCksIChnc3Rfb2dnX2NoYWluc19jbGVhcik6Ci0JTWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgcGFkIHdoZW4gYSBuZXcgY2hhaW4gaXMKLQllbmNvdW50ZXJlZC4gU2V0IHNvbWUgdmFycyB0byBOVUxMIHNvIHdlIGRvbid0IHRyeQotCXRvIHJlZmVyZW5jZSBmcmVlZCBtZW1vcnkuCi0KLTIwMDQtMTAtMjUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleGFtcGxlcy9zZWVraW5nL01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvc2Vla2luZy9jZHBsYXllci5jOiAodXBkYXRlX3NjYWxlKToKLQkqIGV4YW1wbGVzL3NlZWtpbmcvY2hhaW5lZC5jOiAodW5saW5rZWQpLCAobmV3X3BhZCksIChtYWluKToKLQkqIGV4YW1wbGVzL3NlZWtpbmcvcGxheWJpbi5jOiAobWFrZV9wbGF5ZXJiaW5fcGlwZWxpbmUpLAotCShmb3JtYXRfdmFsdWUpLCAodXBkYXRlX3NjYWxlKSwgKGl0ZXJhdGUpLCAoc3RhcnRfc2VlayksCi0JKHN0b3Bfc2VlayksIChwcmludF9tZWRpYV9pbmZvKSwgKHBsYXlfY2IpLCAocGF1c2VfY2IpLCAoc3RvcF9jYiksCi0JKHByaW50X3VzYWdlKSwgKG1haW4pOgotCUFkZGVkIHNvbWUgbW9yZSBleGFtcGxlcywgdXBkYXRlIG90aGVycy4KLQotMjAwNC0xMC0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNkZWNfdXBkYXRlX21ldGFkYXRhKToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoc3BlZXhfZGVjX2NoYWluKToKLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6ICh0aGVvcmFfZGVjX2NoYWluKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2NoYWluKToKLQkgIEFkZCBjb2RlYy1uYW1lIG1ldGFkYXRhLgotCi0yMDA0LTEwLTI1ICBUYWthbyBGdWppd2FyYSAgPFRha2FvLkZ1aml3YXJhQFN1bi5DT00+Ci0KLQlSZXZpZXdkIGJ5OiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmM6IChnc3RfYWxzYV9taXhlcl9idWlsZF9saXN0KToKLQkqIGV4dC9hbHNhL2dzdGFsc2FtaXhlcnRyYWNrLmM6IChnc3RfYWxzYV9taXhlcl90cmFja19uZXcpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVydHJhY2suaDoKLQkqIHBvL1BPVEZJTEVTLmluOgotCSAgQUxTQSBtaXhlciB0cmFjayBsYWJlbCBpbnRlcm5hdGlvbmFsaXphdGlvbiAoIzE1NDA1NCkuCi0KLTIwMDQtMTAtMjUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6ICh0aGVvcmFfZGVjX2NoYWluKToKLQkgIEV4cG9ydCBiaXRyYXRlIGFzIG1ldGFkYXRhLgotCi0yMDA0LTEwLTI1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzogKGdzdF9hbHNhX21peGVyX2J1aWxkX2xpc3QpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVydHJhY2suYzogKGdzdF9hbHNhX21peGVyX3RyYWNrX25ldyk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJ0cmFjay5oOgotCSAgRml4IG5hbWVzLCBmaXggbG9vcC4KLQotMjAwNC0xMC0yNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmM6IChnc3Rfc3BlZXhfZGVjX2luaXQpLAotCShzcGVleF9kZWNfY29udmVydCk6Ci0JICBzaW5rY29udmVydCBmdW5jdGlvbiBzbyBvZ2dkZW11eCBjYW4gZ2V0IHRoZSBmaWxlIGxlbmd0aCAodG90ZW0pLgotCi0yMDA0LTEwLTI1ICBKYW1lcyBNb3JyaXNvbiAgPGphMm1vcnJpQGNzY2x1Yi51d2F0ZXJsb28uY2E+Ci0KLQlSZXZpZXdlZCBieTogIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX2NodW5rKToKLQkgIERvbid0IHB1c2ggaW5jb21wbGV0ZSBwYWNrZXRzLgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChtNGFfdHlwZV9maW5kKToKLQkgIEZpeCBNUEVHLTQgYXVkaW8gdHlwZWZpbmRpbmcuCi0KLTIwMDQtMTAtMjUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsL2dzdHY0bC5jOiAocGx1Z2luX2luaXQpOgotCSogc3lzL3Y0bC9nc3R2NGxlbGVtZW50LmM6IChnc3RfdjRsZWxlbWVudF9nZXRfdHlwZSksCi0JKGdzdF92NGxlbGVtZW50X2luaXQpLCAoZ3N0X3Y0bGVsZW1lbnRfZGlzcG9zZSksCi0JKGdzdF92NGxlbGVtZW50X2NoYW5nZV9zdGF0ZSk6Ci0JKiBzeXMvdjRsL2dzdHY0bGVsZW1lbnQuaDoKLQkqIHN5cy92NGwvZ3N0djRseG92ZXJsYXkuYzogKGdzdF92NGxfeG92ZXJsYXlfb3BlbiksCi0JKGdzdF92NGxfeG92ZXJsYXlfY2xvc2UpLCAoaWRsZV9yZWZyZXNoKSwKLQkoZ3N0X3Y0bF94b3ZlcmxheV9zZXRfeHdpbmRvd19pZCk6Ci0JKiBzeXMvdjRsL2dzdHY0bHhvdmVybGF5Lmg6Ci0JKiBzeXMvdjRsL3Y0bC1vdmVybGF5X2NhbGxzLmM6Ci0JKiBzeXMvdjRsL3Y0bF9jYWxscy5oOgotCSogc3lzL3Y0bDIvTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyZWxlbWVudC5jOiAoZ3N0X3Y0bDJlbGVtZW50X2dldF90eXBlKSwKLQkoZ3N0X3Y0bDJlbGVtZW50X2luaXQpLCAoZ3N0X3Y0bDJlbGVtZW50X2Rpc3Bvc2UpLAotCShnc3RfdjRsMmVsZW1lbnRfY2hhbmdlX3N0YXRlKToKLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuYzogKGdzdF92NGwyX3hvdmVybGF5X29wZW4pLAotCShnc3RfdjRsMl94b3ZlcmxheV9jbG9zZSksIChpZGxlX3JlZnJlc2gpLAotCShnc3RfdjRsMl94b3ZlcmxheV9zZXRfeHdpbmRvd19pZCk6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyeG92ZXJsYXkuaDoKLQkqIHN5cy92NGwyL3Y0bDItb3ZlcmxheV9jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMl9jYWxscy5oOgotCSAgUmVtb3ZlIGNsaWVudC1zaWRlIG92ZXJsYXkgaGFuZGxpbmcsIHVzZSB0aGUgWC1zZXJ2ZXIgdjRsIHBsdWdpbgotCSAgZm9yIHRoYXQuIE5pY2VyIG92ZXJsYXksIGxlc3MgY29kZS4gQWxzbyBtYWtlIHRoZSBwbHVnaW4KLQkgIGNvbXBpbGVhYmxlIHdpdGhvdXQgWCAoYnV0IHRoZW4gd2l0aG91dCBvdmVybGF5LCBvYnZpb3VzbHkpLgotCSAgTWFrZXMgeHdpbmRvd2xpc3RlbmVyIG9ic29sZXRlLCBzaG91bGQgd2UgcmVtb3ZlIHRoYXQ/Ci0KLTIwMDQtMTAtMjUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3Nzc3JjX2dldF90aW1lKSwgKGdzdF9vc3NzcmNfZ2V0KSwKLQkoZ3N0X29zc3NyY19zcmNfcXVlcnkpOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuaDoKLQkgIE9LLCBzbyBwZW9wbGUgd2FudCBvZmZzZXQgaW4gREVGQVVMVC4gVGhpcyB0aW1lLCBhY3R1YWxseSBmaXggYWxsCi0JICBjYXNlcy4KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2dldGNhcHMpOgotCSAgQWRkIEZQUyBwcm9wZXJseS4KLQotMjAwNC0xMC0yNCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZm11eC5jOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzoKLQkgIEZyYW1lcmF0ZS4KLQotMjAwNC0xMC0yNCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuYzogKGdzdF92NGwyZWxlbWVudF9zZXRfcHJvcGVydHkpOgotCSAgRml4IHByb3BlcnRpZXMgKGNoYW5uZWwsIG5vcm0sIGZyZXF1ZW5jeSkuCi0KLTIwMDQtMTAtMjQgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50LmM6IChnc3RfdjRsMmVsZW1lbnRfZ2V0X3Byb3BlcnR5KToKLQkgIEZsYWcgdHlwby4KLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX3NldF9kZWZhdWx0cyk6Ci0JICBObyB3YXJuaW5ncy4KLQotMjAwNC0xMC0yNCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfY2xlYXJfZm9ybWF0X2xpc3QpOgotCSAgRml4IGhhbmcuCi0KLTIwMDQtMTAtMjQgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50Lmg6Ci0JICBZZXQgQW5vdGhlciBIYWNrICh0bSkgZm9yIGtlcm5lbCBoZWFkZXIgYm9ya2VkbmVzcy4KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2luaXQpLAotCShnc3RfdjRsMnNyY192NGwyZm91cmNjX3RvX2NhcHMpLCAoZ3N0X3Y0bDJfZm91cmNjX2Zyb21fc3RydWN0dXJlKSwKLQkoZ3N0X3Y0bDJzcmNfbGluayksIChnc3RfdjRsMnNyY19nZXRjYXBzKSwKLQkoZ3N0X3Y0bDJzcmNfY2hhbmdlX3N0YXRlKToKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuaDoKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCksCi0JKGdzdF92NGwyc3JjX2NhcHR1cmVfc3RhcnQpLCAoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdG9wKToKLQkgIEZpeCBjYXBzLCBrZWVwIHRyYWNrIG9mIHN0YXRlLCB3b3JrLgotCi0yMDA0LTEwLTI0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19nZXRjYXBzKToKLQkgIFF1aWV0LgotCi0yMDA0LTEwLTI0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOiAoZ3N0X29zc3NyY19nZXQpOgotCSAgRG9uJ3QgbWl4IGJ5dGVzIGFuZCBzYW1wbGVzLgotCi0yMDA0LTEwLTI0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOgotCSAgQmFzaWMgcGFkIHRlbXBsYXRlIHdoaWNoIGFjY2VwdHMgT0dNIHRyYWNrcywgc3BlZXgsIGZsYWMsIHZvcmJpcwotCSAgYW5kIHRoZW9yYS4gQW55IGlzIGluY29ycmVjdC4KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZtdXguYzogKGdzdF9hc2ZtdXhfdmlkc2lua19saW5rKToKLQkgIEZpeCBjYXBzLgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NpbmsuYzogKGdzdF92NGxtanBlZ3NpbmtfYmFzZV9pbml0KToKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19iYXNlX2luaXQpLAotCShnc3RfdjRsbWpwZWdzcmNfaW5pdCksIChnc3RfdjRsbWpwZWdzcmNfc3JjY29ubmVjdCksCi0JKGdzdF92NGxtanBlZ3NyY19nZXRjYXBzKSwgKGdzdF92NGxtanBlZ3NyY19jaGFuZ2Vfc3RhdGUpOgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NyYy5oOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfc3JjX2xpbmspLCAoZ3N0X3Y0bHNyY19nZXRjYXBzKSwKLQkoZ3N0X3Y0bHNyY19jaGFuZ2Vfc3RhdGUpOgotCSogc3lzL3Y0bC92NGxtanBlZ3NyY19jYWxscy5jOiAoZ3N0X3Y0bG1qcGVnc3JjX2NhcHR1cmVfc3RhcnQpLAotCShnc3RfdjRsbWpwZWdzcmNfY2FwdHVyZV9zdG9wKToKLQkgIEZpeCBjYXBzLiBLZWVwIHRyYWNrIG9mIGludGVybmFsIHN0YXRlLiBXb3JrLgotCi0yMDA0LTEwLTIzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvTWFrZWZpbGUuYW06Ci0JICBGaXggdGhlIGJ1aWxkIGZpeGVzLgotCi0yMDA0LTEwLTIzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSksCi0JKGdzdF9vZ2dfZGVtdXhfc3JjX2V2ZW50KSwgKF9maW5kX2NoYWluX3NlZWspLAotCShnc3Rfb2dnX3BhZF9wdXNoKToKLQkgIENoZWNrIGZvciBwYWQgYXZhaWxhYmlsaXR5IGJlZm9yZSB1c2luZyBpdC4KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKF9maW5kX2NoYWluX3Byb2Nlc3MpOgotCSAgRml4IHBhcnNpbmcgb2YgY2hhaW5lZCBvZ2cuIE5lZWRzIG1vcmUgd29yayBvbiB0aGUgZGVjb2RlciBzaWRlLgotCi0yMDA0LTEwLTIyICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbToKLQkqIGdzdC9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jOiAoc3BlY3RydW1fY2hhaW4pLCAobWFpbiksCi0JKGlkbGVfZnVuYyk6Ci0JICBGaXggZGVtbyBhbmQgcmVlbmFibGUgaXQuIFllcywgSSdtIGN1cnJlbnRseSBwbGF5aW5nIHdpdGggYXVkaW8KLQkgIGFuYWx5c2lzIHRvb2xzCi0KLTIwMDQtMTAtMjIgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSAgV2UgbG92ZSBpdCBpZiBmaWxlcyB0aGF0IHN0YXJ0IGF0IHplcm8gd29yayB0b28uLi4KLQotMjAwNC0xMC0yMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9pdGVyYXRlKToKLQkgIEhhbmRsZSBmaWxlcyB3aXRoIG1pc3NpbmcgRU9TIGhlYWRlcnMuCi0KLTIwMDQtMTAtMjEgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6Ci0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2hhbmRsZV9zZXJ2ZXJfcmVhZCksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2luaXRfc2VuZCk6Ci0JWmVybyBzb21lIHZhcmlhYmxlcyBmaXJzdCAobmVlZCBmb3IgYWNjZXB0IG5vdCB0byByZXR1cm4gRUlOVkFMKQotCi0yMDA0LTEwLTIwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSksCi0JKGdzdF9vZ2dfZGVtdXhfc3JjX2V2ZW50KSwgKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9kZWNfc2lua19jb252ZXJ0KSwKLQkodGhlb3JhX2RlY19jaGFpbik6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19nZXRfZm9ybWF0cyksCi0JKGdzdF92b3JiaXNfZGVjX2luaXQpLCAodm9yYmlzX2RlY19jb252ZXJ0KSwgKHZvcmJpc19kZWNfY2hhaW4pOgotCSAgU2Vla2luZyBhbmQgcXVlcnlpbmcgZmluZXR1bmUuCi0KLTIwMDQtMTAtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9yYXcxMzk0L01ha2VmaWxlLmFtOgotCSAgZml4IHRoZSBidWlsZAotCi0yMDA0LTEwLTIwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X2l0ZXJhdGUpOgotCSAgV3JvbmcgcmV0dXJuLgotCSogZ3N0L3BsYXliYWNrL01ha2VmaWxlLmFtOgotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5fY2xhc3NfaW5pdCk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheS1tYXJzaGFsLmxpc3Q6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2NsYXNzX2luaXQpOgotCSAgRml4IG1hcnNoYWxsZXJzLgotCi0yMDA0LTEwLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19ldmVudCk6Ci0JICBTaWxlbmNlLgotCi0yMDA0LTEwLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSksCi0JKGdzdF9vZ2dfZGVtdXhfc3JjX2V2ZW50KSwgKGdzdF9vZ2dfcGFkX3BvcHVsYXRlKSwKLQkoZ3N0X29nZ19wYWRfcHVzaCk6Ci0JICBZYXkgZm9yIG5vbi1saW5lYWlyIGdyYW51bGVwb3MgaW4gdGhlb3JhLgotCi0yMDA0LTEwLTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfaW5pdCksIChnc3RfZHZkZWNfdmlkZW9fZ2V0Y2FwcyksCi0JKGdzdF9kdmRlY192aWRlb19saW5rKSwgKGdzdF9kdmRlY19wdXNoKSwgKGdzdF9kdmRlY19sb29wKToKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCU1ha2Ugc3VyZSB3ZSByZW5lZ290aWF0ZSBhc3BlY3QgcmF0aW8gd2hlbiB0aGUgY2FtZXJhIHN3aXRjaGVzLgotCi0yMDA0LTEwLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSksCi0JKGdzdF9vZ2dfZGVtdXhfc3JjX2V2ZW50KSwgKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSAgU3RhcnQgYXQgemVyby4KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6ICh0aGVvcmFfZGVjX2NoYWluKToKLQkgIFNraXAgaGVhZGVycy4gQmFkIGlkZWEgZm9yIGNoYWluZWQgb2dnLCBidXQgZml4ZXMgc2Vla2luZy4KLQotMjAwNC0xMC0xOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQlJIHN3ZWFyLCB0aGlzIGlzIHRoZSBsYXN0IHRpbWUgSSB0b3VjaCB0aGlzLgotCi0yMDA0LTEwLTE4ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSksCi0JKGdzdF9vZ2dfZGVtdXhfc3JjX2V2ZW50KSwgKGdzdF9vZ2dfcGFkX3BvcHVsYXRlKSwKLQkoX3JlYWRfYm9zX3Byb2Nlc3MpLCAoZ3N0X29nZ19kZW11eF9pdGVyYXRlKSwgKGdzdF9vZ2dfcGFkX25ldyk6Ci0JICBGYXN0ZXIgc2Vla2luZy4KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6ICh0aGVvcmFfZGVjX3NpbmtfY29udmVydCk6Ci0JICBUaW1lLXRvLWRlZmF1bHQgY29udmVyc2lvbi4KLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2NoYWluKToKLQkgIERvbid0IGVycm9yIG9uIHVua25vd24gcGFja2V0cywganVzdCBza2lwLiBXZSBzaG91bGQgcHJvYmFibHkKLQkgIHJlYWQgdGhlbSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgY2hhaW5lZCBvZ2cuCi0KLTIwMDQtMTAtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JQWRkZWQgY2RhdWRpbyB0byB3cm9uZyBsaXN0LgotCi0yMDA0LTEwLTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCVJldml2ZSBjZGF1ZGlvLgotCi0yMDA0LTEwLTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfdmlkZW9fZ2V0Y2FwcyksCi0JKGdzdF9kdmRlY192aWRlb19saW5rKSwgKGdzdF9kdmRlY19wdXNoKToKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6IChnc3Rfc21va2VlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9zbW9rZWVuY19yZXN5bmMpLCAoZ3N0X3Ntb2tlZW5jX2NoYWluKToKLQlGaXggbWltZXR5cGUgb24gc21va2UgZW5jb2Rlci4KLQlBZGQgYXNwZWN0IHJhdGlvIHRvIGR2ZGVjLiBOb3Qgc3VyZSBpZiB0aGVzZQotCXZhbHVlcyBhcmUgY29ycmVjdCB0aG91Z2guLi4uCi0KLTIwMDQtMTAtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jOiAoZ3N0X3ZvcmJpc2VuY19jbGFzc19pbml0KToKLQlGaXggdm9yYmlzIHByb3BlcnR5IGRlc2NyaXB0aW9ucyBhbmQgcmFuZ2VzLgotCi0yMDA0LTEwLTE4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9pdGVyYXRlKToKLQlSZWFsbHkgZG8gbm90aGluZyB3aGVuIG5vIGRhdGEgaXMgYXZhaWxhYmxlLgotCUdvIHRvIHRoZSBwbGF5aW5nIHN0YXRlIHdoZW4gdGhlIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUKLQlpbnN0ZWFkIG9mIGZhaWxpbmcuCi0KLTIwMDQtMTAtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvY2RhdWRpby9nc3RjZGF1ZGlvLmM6IChfZG9faW5pdCksIChnc3RfY2RhdWRpb19iYXNlX2luaXQpLAotCShnc3RfY2RhdWRpb19nZXRfZXZlbnRfbWFza3MpLCAoZ3N0X2NkYXVkaW9fc2VuZF9ldmVudCksCi0JKGdzdF9jZGF1ZGlvX3F1ZXJ5KSwgKHBsdWdpbl9pbml0KSwgKGNkYXVkaW9fdXJpX2dldF90eXBlKSwKLQkoY2RhdWRpb191cmlfZ2V0X3Byb3RvY29scyksIChjZGF1ZGlvX3VyaV9nZXRfdXJpKSwKLQkoY2RhdWRpb191cmlfc2V0X3VyaSksIChjZGF1ZGlvX3VyaV9oYW5kbGVyX2luaXQpOgotCUFkZGVkIHVyaSBoYW5kbGVyIGZvciBjZDovLwotCVBvcnQgdG8gbmV3IEFQSS4KLQotMjAwNC0xMC0xOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpLAotCShnc3RfZGVjb2RlX2Jpbl9pbml0KSwgKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLAotCSh0cnlfdG9fbGlua18xKSwgKG5vX21vcmVfcGFkcyksIChjbG9zZV9saW5rKSwgKHR5cGVfZm91bmQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnZW5fcHJlcm9sbF9lbGVtZW50KSwKLQkocmVtb3ZlX3ByZXJvbGxzKSwgKHVua25vd25fdHlwZSksIChhZGRfZWxlbWVudF9zdHJlYW0pLAotCShuZXdfZGVjb2RlZF9wYWQpLCAoc2V0dXBfc291cmNlKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2FkZF9lbGVtZW50KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fcmVtb3ZlX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9saW5rX3N0cmVhbSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ2VuX3ZpZGVvX2VsZW1lbnQpLAotCShnZW5fdmlzX2VsZW1lbnQpLCAocmVtb3ZlX3NpbmtzKSwgKHNldHVwX3NpbmtzKToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmM6IChnc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUpLAotCShnc3Rfc3RyZWFtX2luZm9fZ2V0X3R5cGUpLCAoZ3N0X3N0cmVhbV9pbmZvX2NsYXNzX2luaXQpLAotCShnc3Rfc3RyZWFtX2luZm9faW5pdCksIChnc3Rfc3RyZWFtX2luZm9fbmV3KSwKLQkoZ3N0X3N0cmVhbV9pbmZvX2Rpc3Bvc2UpLCAoc3RyZWFtX2luZm9fbXV0ZV9wYWQpLAotCShnc3Rfc3RyZWFtX2luZm9fc2V0X3Byb3BlcnR5KSwgKGdzdF9zdHJlYW1faW5mb19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uaDoKLQlBZGQgc2luayBwYWR0ZW1wbGF0ZSB0byBkZWNvZGViaW4uCi0JQWRkZWQgc29tZSBtb3JlIGNvbW1lbnRzLgotCU1ha2UgcXVldWUgc2l6ZSBjb25maWd1cmFibGUgaW4gcGxheWJhc2ViaW4uCi0JQWRkZWQgcG9zc2liaWxpdHkgdG8gdXNlIGVsZW1lbnRzIGFzIHNpbmtzIChleCBjZGF1ZGlvKS4KLQotMjAwNC0xMC0xNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2NsYXNzX2luaXQpLAotCShnc3Rfc3BlZXhlbmNfY2hhaW4pOgotCUZpeCBzcGVleCB0aW1lc3RhbXBzIHNvIHRoYXQgaXQgZ2V0cyBtdXhlZCBwcm9wZXJseS4KLQotMjAwNC0xMC0xNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOiAoZ3N0X2R2MTM5NHNyY19nZXRfdHlwZSksCi0JKGdzdF9kdjEzOTRzcmNfYmFzZV9pbml0KSwgKGdzdF9kdjEzOTRzcmNfY2xhc3NfaW5pdCksCi0JKGdzdF9kdjEzOTRzcmNfaW5pdCksIChnc3RfZHYxMzk0c3JjX2Rpc3Bvc2UpLAotCShnc3RfZHYxMzk0c3JjX2lzb19yZWNlaXZlKSwgKGdzdF9kdjEzOTRzcmNfZGlzY292ZXJfYXZjX25vZGUpLAotCShnc3RfZHYxMzk0c3JjX2NoYW5nZV9zdGF0ZSksIChnc3RfZHYxMzk0c3JjX2dldF9ldmVudF9tYXNrKSwKLQkoZ3N0X2R2MTM5NHNyY19ldmVudCksIChnc3RfZHYxMzk0c3JjX2dldF9mb3JtYXRzKSwKLQkoZ3N0X2R2MTM5NHNyY19jb252ZXJ0KSwgKGdzdF9kdjEzOTRzcmNfZ2V0X3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X2R2MTM5NHNyY19xdWVyeSksIChnc3RfZHYxMzk0c3JjX3VyaV9nZXRfdHlwZSksCi0JKGdzdF9kdjEzOTRzcmNfdXJpX2dldF9wcm90b2NvbHMpLCAoZ3N0X2R2MTM5NHNyY191cmlfZ2V0X3VyaSksCi0JKGdzdF9kdjEzOTRzcmNfdXJpX3NldF91cmkpLCAoZ3N0X2R2MTM5NHNyY191cmlfaGFuZGxlcl9pbml0KToKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5oOgotCUFkZGVkIGNvbnZlcnNpb24vcXVlcnkgZnVuY3Rpb25zLgotCVVwZGF0ZSBidWZmZXIgdGltZXN0YW1wcywKLQlBZGRlZCBzaWduYWxzLgotCUFkZGVkIHVyaSBkdjovLyBzbyBpdCBtaWdodCBwbGF5IGZyb20gdGhlIGZpcmV3aXJlIGluIHBsYXliaW4uCi0JRml4IGEgcG9zc2libGUgbGVhay4KLQlBZGRlZCBkZWJ1Z2dpbmcuCi0KLTIwMDQtMTAtMTUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfY2xhc3NfaW5pdCksCi0JKGdzdF9kdjEzOTRzcmNfaW5pdCksIChnc3RfZHYxMzk0c3JjX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9kdjEzOTRzcmNfZ2V0X3Byb3BlcnR5KSwgKGdzdF9kdjEzOTRzcmNfaXNvX3JlY2VpdmUpLAotCShnc3RfZHYxMzk0c3JjX2Rpc2NvdmVyX2F2Y19ub2RlKSwgKGdzdF9kdjEzOTRzcmNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5oOgotCUFkZGVkIEFWL0MgVlRSIGNvbnRyb2wgc3VwcG9ydCBuZWVkZWQgZm9yIHNvbWUgY2FtZXJhcy4KLQlBZGRlZCBhdXRvbWF0aWMgcG9ydCBkZXRlY3Rpb24uCi0JQWRkZWQgcHJvcGVydGllcyBmb3Igc2VsZWN0aW5nIHRoZSBjaGFubmVsLgotCVRoZSBjb25maWd1cmUuYWMgc2NyaXB0IGlzIG5vdCB5ZXQgdXBkYXRlZCB0byByZWZsZWN0IHRoZQotCW5ldyBsaWJhdmMxMzk0IGFuZCBsaWJyb20xMzk0IGRlcGVuZGVuY2llcy4KLQotMjAwNC0xMC0xNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwKLQkocXRkZW11eF9wYXJzZSksIChnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyk6Ci0JQW4gZXNkcyBib3ggaXMgbm90IGEgY29udGFpbmVyLgotCUZpeCBwYXJzaW5nIG9mIG1wNHYgYm94ZXMuCi0JRG8gbm90IHRyeSB0byByZW5lZ290aWF0ZSBmcHMgZm9yIGVhY2ggZnJhbWUuIE5lZWQgdG8KLQlmaW5kIGEgYmV0dGVyIG1ldGhvZC4gVGhpcyBzaG91bGQgZml4IG1wNCBwbGF5YmFjay4KLQotMjAwNC0xMC0xNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb25maWd1cmUuYWM6IHVwZGF0ZSBmb3Igc3dmZGVjLTAuMyBhbmQgbGlib2lsLTAuMgotCSogZXh0L3N3ZmRlYy9nc3Rzd2ZkZWMuYzogdXBkYXRlIGZvciBzd2ZkZWMtMC4zCi0JKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5oOiBzYW1lCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6IHVwZGF0ZSBmb3IgbGlib2lsLTAuMgotCSogZ3N0L3ZpZGVvdGVzdHNyYy92aWRlb3Rlc3RzcmMuYzogc2FtZQotCi0yMDA0LTEwLTE0ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X211bHRpZmRzaW5rX2FkZCksCi0JKGdzdF9tdWx0aWZkc2lua19yZW1vdmUpLCAoZ3N0X211bHRpZmRzaW5rX3JlbW92ZV9jbGllbnRfbGluayksCi0JKGlzX3N5bmNfZnJhbWUpLCAoZ3N0X211bHRpZmRzaW5rX25ld19jbGllbnQpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19yZWNvdmVyX2NsaWVudCksIChnc3RfbXVsdGlmZHNpbmtfcXVldWVfYnVmZmVyKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRzKSwgKGdzdF9tdWx0aWZkc2lua19jaGFuZ2Vfc3RhdGUpOgotCVR1cm4gd2FybmluZ3MgaW50byBpbmZvLgotCURvbid0IGFsbG93IGEgc3RhdGUgY2hhbmdlIGluIHRoZSBzdHJlYW1pbmcgdGhyZWFkLgotCi0yMDA0LTEwLTE0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvdm9yYmlzL29nZ3ZvcmJpc2VuYy5jOgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzoKLQkgIGZpeCB0ZW1wbGF0ZSBzYW1wbGUgcmF0ZQotCi0yMDA0LTEwLTEzICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfY2hlY2tfY2Fwc19yZXNldCksIChnc3RfbWFkX2NoYWluKToKLQlEZWNvZGluZyB0aGUgaGVhZGVyIGZpcnN0IGZpeGVzIHNvbWUgcHJvYmxlbXMgaW4gcmVzeW5jaW5nCi0JaW4gbW9yZSBtcDNzLgotCi0yMDA0LTEwLTEyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdlbl92aWRlb19lbGVtZW50KSwKLQkoZ2VuX3Zpc19lbGVtZW50KSwgKHJlbW92ZV9zaW5rcyksIChzZXR1cF9zaW5rcyk6Ci0JQWRkZWQgdmlzIHBsdWdpbiBzdXBwb3J0LCBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgdmlzCi0JZWxlbWVudCB0byBhY3RpdmF0ZSBpdC4KLQotMjAwNC0xMC0xMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6IChnc3RfZ25vbWV2ZnNzcmNfZ2V0KSwKLQkoZ3N0X2dub21ldmZzc3JjX3NyY3BhZF9xdWVyeSksIChnc3RfZ25vbWV2ZnNzcmNfc3JjcGFkX2V2ZW50KToKLQkgIFNvbWUgZGVidWcuCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3Jlc2V0KSwKLQkoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwgKGdzdF9hdmlfZGVtdXhfcmVhZF9zdXBlcmluZGV4KSwKLQkoZ3N0X2F2aV9kZW11eF9yZWFkX3N1YmluZGV4ZXMpLCAoZ3N0X2F2aV9kZW11eF9hZGRfc3RyZWFtKSwKLQkoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9za2lwKSwKLQkoZ3N0X2F2aV9kZW11eF9zeW5jKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX3NjYW4pLAotCShnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKToKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguaDoKLQkgIFN1cHBvcnQgZm9yIG9wZW5ETUwtMi4wIGluZHgvaXgjIyBjaHVua3MuIFN1cHBvcnQgZm9yIGJyb2tlbiBpbmRleAotCSAgcmVjb3ZlcnkgKHdoZXJlLCBpZiBwYXJ0IG9mIHRoZSBpbmRleCBpcyBicm9rZW4sIHdlIHdpbGwgc3RpbGwgcmVhZAotCSAgdGhlIHJlc3Qgb2YgdGhlIGluZGV4IGFuZCByZWNvdmVyIHRoZSBicm9rZW4gcGFydCBieSBzdHJlYW0KLQkgIHNjYW5uaW5nKS4gTW9yZSBicm9rZW4gbWVkaWEgc3VwcG9ydC4gRU9TIHdvcmthcm91bmRzLiBHZW5lcmFsIEFWSQotCSAgYnJhaW5kYW1hZ2UgaGVhZGFjaGUgcmVjb3ZlcnkuIEFzcGlyaW4gaW5jbHVkZWQuCi0KLTIwMDQtMTAtMTEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9jZHBhcmFub2lhL2dzdGNkcGFyYW5vaWEuYzogKGNkcGFyYW5vaWFfb3BlbiksCi0JKGNkcGFyYW5vaWFfZXZlbnQpLCAoY2RwYXJhbm9pYV9xdWVyeSk6Ci0JICBHZXQgcmlkIG9mIGhpZGVvdXMgbGVhZC1pbi4KLQotMjAwNC0xMC0xMSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoc2V0dXBfc291cmNlKToKLQlXcm9uZyB2YXIgdXNlZCB0byBnZXQgZ19saXN0X25leHQuCi0KLTIwMDQtMTAtMTEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9jZHBhcmFub2lhL2dzdGNkcGFyYW5vaWEuYzogKGNkcGFyYW5vaWFfY2xhc3NfaW5pdCksCi0JKGNkcGFyYW5vaWFfZ2V0KSwgKGNkcGFyYW5vaWFfb3Blbik6Ci0JICBSZXBvcnQgZGlzY2lkIGFzIG1ldGFkYXRhLCBhZGQgZHVyYXRpb24uCi0KLTIwMDQtMTAtMTEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKHNldHVwX3NvdXJjZSk6Ci0JQ2xlYW51cCB0aGUgcHJldmlvdXMgcGlwZWxpbmUgYSBsaXR0bGUgZWFybGllciBmb3IgdGhlCi0JY2FzZSB0aGF0IGEgc291cmNlIGVsZW1lbnQgcHJvdmlkZXMgcmF3IGRhdGEuCi0KLTIwMDQtMTAtMTEgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2NoYWluKToKLQkgIHJlc2V0IHYxIHRhZyBvZmZzZXQgd2hlbiB0aGVyZSBpcyBubyB2MSB0YWcuIEZpeGVzIGlkM2RlbXV4IGFsd2F5cwotCSAgY29uc3VtaW5nIHRoZSBsYXN0IDEyOCBieXRlcywgZXZlbiB0aG91Z2ggaXQgd2FzIHZhbGlkIG1wMyBkYXRhLgotCi0yMDA0LTEwLTEwICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX3BhbGV0dGVfdG9fY2FwcyksCi0JKGdzdF92NGxzcmNfZ2V0Y2FwcyksIChnc3RfdjRsc3JjX2dldCk6Ci0JKiBzeXMvdjRsL3Y0bC1vdmVybGF5X2NhbGxzLmM6IChnc3RfdjRsX3NldF9vdmVybGF5KToKLQlDaGFuZ2UgZ193YXJuaW5ncyB0byBHU1RfV0FSTklOR19PQkpFQ1QgYW5kIGZpeCBjb2xvdXJzcGFjZSBpc3N1ZQotCi0yMDA0LTEwLTEwICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX3NyY19saW5rKSwgKGdzdF92NGxzcmNfZ2V0Y2Fwcyk6Ci0JRml4IGZvciB3ZWJjYW1zIHRoYXQgc3VwcG9ydCBvbmx5IHNwZWNpZmljIHdpZHRoIG9yIGhlaWdodAotCi0yMDA0LTEwLTA5ICBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dC5pLm1AemVuLmNvLnVrPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiAoZ3N0X3dhdmVuY19zdG9wX2ZpbGUpOgotCSAgRml4IHdyb25nIGRpc2NvbnQgZXZlbnQgc2V0dXAgKGZpeGVzICMxNTQ5NjcpLgotCi0yMDA0LTEwLTA5ICBTZWJhc3RpZW4gQ290ZSAgPHNjNUBoZXJtZXMudXNoZXJiLmNhPgotCi0JUmV2aWV3ZWQgYnk6ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVwYXJzZV9jaGFpbik6Ci0JICBFcnJvciBvdXQgb24gaW52YWxpZCBkYXRhIChmaXhlcyAjMTU0ODA3KS4KLQotMjAwNC0xMC0wOSAgVGltLVBoaWxpcHAgTcO8bGxlciAgPHQuaS5tQHplbi5jby51az4KLQotCVJldmlld2VkIGJ5OiBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZHZkcmVhZC9kdmRyZWFkc3JjLmM6IChfcmVhZCk6Ci0JICBNYWtlIHRpdGxlcyA+IDAgd29yayBhZ2FpbiAoZml4ZXMgIzE1NDgzNCkuCi0KLTIwMDQtMTAtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX3RlbXBsYXRlX2NhcHMpOgotCSAgV01WMyBtaXNzaW5nIGluIHRlbXBsYXRlIGNhcHMuCi0KLTIwMDQtMTAtMDkgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCk6Ci0JICBPSywgc28gdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHRvbyBzdHJpY3QuIEl0IG1ha2VzIHJhbmRvbSBBVkkgZmlsZXMKLQkgIGhhbmcgZm9yIHNlY29uZHMgdXBvbiBvcGVuaW5nLCB3aGljaCBpcyB1bmFjY2VwdGFibGUgYW5kIGlzIGZhcgotCSAgYmV5b25kIHRoZSBvcmlnaW5hbCBnb2FsIG9mIGdldHRpbmcgbXVsdGlwbGUgY2h1bmtzIGZvciBvbmUtY2h1bmsKLQkgIHNvdW5jIHN0cmVhbSBmaWxlcy4gU28gbm93IGRvIGp1c3QgdGhhdC4KLQotMjAwNC0xMC0wOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChzZXR1cF9zb3VyY2UpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgQWN0dWFsbHkgY2xlYW4gdXAgc3RyZWFtaW5mbyBpZiBvdXRwdXQgZmFpbHMuIFRoaXMgd291bGQgdHJpZ2dlcgotCSAgaWYsIGZvciBleGFtcGxlLCB0aGVyZSB3YXMgbm8gQ0QgaW4gdGhlIGRyaXZlLiBObyBwcmVyb2xsLCBzbwotCSAgYSBzdHJlYW1pbmZvIHN0cnVjdHVyZSBpcyBjcmVhdGVkLCBidXQgdGhlIHN1YnNlcXVlbnQgc3RhdGUgY2hhbmdlCi0JICBvZiB0aGUgdGhyZWFkIGZhaWxzLgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSAgRG9uJ3QgY2hhbmdlIHN0YXRlIGlmIHBhcmVudCBmYWlsZWQuCi0KLTIwMDQtMTAtMDggIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnc3RfcGxheV9iaW5fY2xhc3NfaW5pdCksCi0JKGdzdF9wbGF5X2Jpbl9pbml0KSwgKGdzdF9wbGF5X2Jpbl9nZXRfcHJvcGVydHkpLCAoaGFuZG9mZiksCi0JKGdlbl92aWRlb19lbGVtZW50KSwgKHJlbW92ZV9zaW5rcyk6Ci0JICBBZGQgc21hbGwgYml0cyBvZiBjb2RlIGZvciBzY3JlZW5zaG90IGhhbmRsaW5nLgotCi0yMDA0LTEwLTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9zZXRfcHJvcGVydHkpLAotCShnZW5fdmlkZW9fZWxlbWVudCksIChnZW5fYXVkaW9fZWxlbWVudCksIChzZXR1cF9zaW5rcyk6Ci0JRG9uJ3QgYXNzdW1lIHRoZSB1c2VyIHByb3ZpZGVkIHNpbmtzIGFyZSBuYW1lZCAic2luayIuLi4KLQotMjAwNC0xMC0wOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ2VuX3ByZXJvbGxfZWxlbWVudCksCi0JKHVua25vd25fdHlwZSksIChzZXR1cF9zb3VyY2UpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fcmVtb3ZlX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9saW5rX3N0cmVhbSk6Ci0JRG8gbm90IHRyeSB0byBhdXRvcGx1ZyBzb3VyY2VzIHRoYXQgZ2VuZXJhdGUgcmF3IHN0cmVhbXMgbGlrZQotCWNkcGFyYW5vaWEuCi0JZGlzY29ubmVjdCB0aGUgcHJlcm9sbCBvdmVycnVuIHNpZ25hbCB3aGVuIHdlIGRvbid0IG5lZWQgaXQgYW55bW9yZS4KLQotMjAwNC0xMC0wOCAgTWlsb3N6IERlcmV6eW5za2kgIDxpbnRlcm5hbGVycm9yLnJlekBmaHR3LWJlcmxpbi5kZT4KLQotCSogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYS5jOiAoX2RvX2luaXQpLAotCUFkZGVkIHJld29ya2VkIHBhdGNoIGZyb20gIzE1NDkwMyBmcm9tIG1pbG9zeiBkZXJlenluc2tpIChkZWFkY2hpcCkuCi0KLTIwMDQtMTAtMDggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhLmM6IChfZG9faW5pdCksCi0JKGNkcGFyYW5vaWFfYmFzZV9pbml0KSwgKGNkcGFyYW5vaWFfY2xhc3NfaW5pdCksIChjZHBhcmFub2lhX2luaXQpLAotCShjZHBhcmFub2lhX2Rpc3Bvc2UpLCAoY2RwYXJhbm9pYV9nZXQpLCAoY2RwYXJhbm9pYV9jaGFuZ2Vfc3RhdGUpLAotCShjZHBhcmFub2lhX2NvbnZlcnQpLCAoY2RwYXJhbm9pYV91cmlfZ2V0X3R5cGUpLAotCShjZHBhcmFub2lhX3VyaV9nZXRfcHJvdG9jb2xzKSwgKGNkcGFyYW5vaWFfdXJpX2dldF91cmkpLAotCShjZHBhcmFub2lhX3VyaV9zZXRfdXJpKSwgKGNkcGFyYW5vaWFfdXJpX2hhbmRsZXJfaW5pdCk6Ci0JKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhLmg6Ci0JVGhpcyBhZGRzIHRoZSBjZGRhOi8vPHRyYWNrbnVtPiB1cmkuCi0KLTIwMDQtMTAtMDggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChnc3RfZGVjb2RlX2Jpbl9jbGFzc19pbml0KSwKLQkoZ3N0X2RlY29kZV9iaW5faW5pdCksIChmaW5kX2NvbXBhdGlibGVzKSwgKGNsb3NlX3BhZF9saW5rKSwKLQkodHJ5X3RvX2xpbmtfMSksIChub19tb3JlX3BhZHMpLCAoY2xvc2VfbGluayksICh0eXBlX2ZvdW5kKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksCi0JKHVua25vd25fdHlwZSksIChnc3RfcGxheV9iYXNlX2Jpbl9yZW1vdmVfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksIChnZW5fdmlkZW9fZWxlbWVudCksCi0JKGdlbl9hdWRpb19lbGVtZW50KSwgKHNldHVwX3NpbmtzKToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmM6IChnc3Rfc3RyZWFtX3R5cGVfZ2V0X3R5cGUpLAotCShnc3Rfc3RyZWFtX2luZm9fZ2V0X3R5cGUpLCAoZ3N0X3N0cmVhbV9pbmZvX2NsYXNzX2luaXQpLAotCShnc3Rfc3RyZWFtX2luZm9faW5pdCksIChnc3Rfc3RyZWFtX2luZm9fbmV3KSwKLQkoZ3N0X3N0cmVhbV9pbmZvX2Rpc3Bvc2UpLCAoc3RyZWFtX2luZm9fbXV0ZV9wYWQpLAotCShnc3Rfc3RyZWFtX2luZm9fc2V0X3Byb3BlcnR5KSwgKGdzdF9zdHJlYW1faW5mb19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uaDoKLQlSZXVzZSB0aGUgYXVkaW8gYW5kIHZpZGVvIGJpbnMuCi0JU29tZSBpbnRlcm5hbCBjbGVhbnVwcyBpbiB0aGUgc3RyZWFtIHNlbGVjdGlvbiBjb2RlLgotCi0yMDA0LTEwLTA4ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfc2lua19saW5rKSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfc2lua19saW5rKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF94d2luZG93X2lkKSwgKGdzdF94dmltYWdlc2lua19pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmg6IFJldmVydGluZyBSb25hbGQncyBjaGFuZ2VzIGFzIHRoZSBpc3N1ZSBpcwotCW5vdCBjb21pbmcgZnJvbSB0aG9zZSBlbGVtZW50cy4gTW9yZW92ZXIgdGhlc2UgZWxlbWVudHMgc2hvdWxkIG5vdCBrZWVwCi0JdGhlIHhpZCB0aGV5IGhhdmUgYmVlbiBnaXZlbiB3aGVuIGluIE5VTEwgc3RhdGUuCi0KLTIwMDQtMTAtMDcgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfc2lua19saW5rKSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfc2lua19saW5rKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF94d2luZG93X2lkKSwgKGdzdF94dmltYWdlc2lua19pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmg6Ci0JICBBY3R1YWxseSBvbmx5IGNyZWF0ZSBhIG5ldyB0b3BsZXZlbCB3aW5kb3cgaWYgd2UncmUgbm90IGdvbm5hCi0JICBlbWJlZCBpdCByaWdodCBhZnRlci4KLQotMjAwNC0xMC0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAocGxheV9iYXNlX2Jpbl9tdXRlX3BhZCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX211dGVfc3RyZWFtKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChzZXR1cF9zaW5rcyk6Ci0JSW1wbGVtZW50IG11dGluZy91bm11dGluZyBvZiBzdHJlYW1zLCBtdXRlIHN0cmVhbXMgdGhhdCBhcmUgbm90Ci0JdXNlZC4KLQotMjAwNC0xMC0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAoYWMzX3R5cGVfZmluZCksCi0JKHBsdWdpbl9pbml0KToKLQlBZGRlZCBsYW1lIGF1ZGlvL3gtYWMzIHR5cGVmaW5kIGZ1bmN0aW9uLgotCi0yMDA0LTEwLTA2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYnVtcCBuYW5vIHRvIGN2cwotCi09PT0gcmVsZWFzZSAwLjguNSA9PT0KLQotMjAwNC0xMC0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIE5FV1M6Ci0JKiBSRUxFQVNFOgotCSogY29uZmlndXJlLmFjOgotCSAgcmVsZWFzaW5nIDAuOC41LCAiVGFrZSBZb3UgT24iCi0KLTIwMDQtMTAtMDYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChnc3RfZGVjb2RlX2Jpbl9pbml0KSwKLQkoZmluZF9jb21wYXRpYmxlcyksIChjbG9zZV9wYWRfbGluayksICh0cnlfdG9fbGlua18xKSwgKG5ld19wYWQpLAotCShub19tb3JlX3BhZHMpLCAoY2xvc2VfbGluayksICh0eXBlX2ZvdW5kKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAobmV3X2RlY29kZWRfcGFkKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnZW5fdmlkZW9fZWxlbWVudCk6Ci0JRG8gbm90IHNpZ25hbCB0aGUgbm9fbW9yZV9wYWRzIGFmdGVyIHRoZSBmaXJzdCBwYWQgd2hlbgotCXdlIGFyZSBwbHVnZ2luZyBhIG5vbiBkeW5hbWljIGVsZW1lbnQgd2l0aCBtdWx0aXBsZQotCW91dHB1dCBwYWRzIChsaWtlIHN3ZmRlYywgZHZkZWMsIC4uLikuCi0KLTIwMDQtMTAtMDYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGJ1bXAgZm9yIHByZXJlbGVhc2UKLQotMjAwNC0xMC0wNiAgU3RlcGhhbmUgTG9ldWlsbGV0ICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOgotCSAgYWRkIEFUUkFDMyB0byBTVEFUSUMgQ0FQUyB0byBmaXggYSB3YXJuaW5nCi0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzoKLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5jOgotCSAgZml4IHR5cG9zCi0KLTIwMDQtMTAtMDYgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JICBnZW5lcmF0ZSBjYXBzIGZvciBBVFJBQzMgYXVkaW8gc3RyZWFtcwotCi0JKiBnc3QvcmVhbG1lZGlhL3JtZGVtdXguYzoKLQkgIGdlbmVyYXRlIGNhcHMgZm9yIEFUUkFDMyBhdWRpbyBzdHJlYW1zCi0KLTIwMDQtMTAtMDYgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBnc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW0KLQkqIGdzdC93YXZwYXJzZS9yaWZmLmgKLQkqIGdzdC93YXZwYXJzZS93YXZwYXJzZS52Y3Byb2oKLQkgIHJpZmYuaCByZW1vdmFsICh1bnVzZWQgYW5kIGR1cGxpY2F0aW9uIHdpdGggcmlmZi1pZHMuaCkKLQotMjAwNC0xMC0wNiAgU3RlcGhhbmUgTG9ldWlsbGV0ICA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5oCi0JICByZW1vdmUgZHVwbGljYXRlZCBkZWZpbmVzIGZvciBhdWRpbyBjb2RlYyBjb2RlcwotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLWlkcy5oCi0JKiBnc3Qvd2F2ZW5jL3JpZmYuaDoKLQkgIGFkZCAiNENDIiBjb2RlIGZvciBBVFJBQzMgYXVkaW8gc3RyZWFtcwotCSAgYWRkICI0Q0MiIGNvZGUgZm9yIElUVV9HNzIxX0FEUENNICh1bnVzZWQgZm9yIG5vdykKLQotMjAwNC0xMC0wNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX2luaXQpLCAoZ3N0X2ZseGRlY19sb29wKToKLQlBY3R1YWxseSBfZG9fIG5lZ290aWF0aW9uLiBQYXNzIGdkb3VibGUgYXMgYXJnIGluc3RlYWQKLQlvZiBndWludDY0IGZvciB0aGUgZnJhbWVyYXRlLgotCi0yMDA0LTEwLTA2ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5faW5pdCksCi0JKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLCAodHJ5X3RvX2xpbmtfMSksCi0JKG5vX21vcmVfcGFkcyksIChjbG9zZV9saW5rKSwgKHR5cGVfZm91bmQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChuZXdfZGVjb2RlZF9wYWQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdlbl92aWRlb19lbGVtZW50KSwKLQkoZ2VuX2F1ZGlvX2VsZW1lbnQpOgotCVNldCBzdGF0ZSBvbiBuZXdseSBhZGRlZCBlbGVtZW50IHRvIFJFQURZIHNvIHRoYXQgbmVnb3RpYXRpb24KLQljYW4gaGFwcGVuIEFTQVAuCi0JQWRkZXMgc29tZSBtb3JlIGRlYnVnIGluZm8uCi0JRG8gbm90IHRyeSB0byBwbHVnIHBhZHMgd2l0aCBtdWx0aXBsZSBjYXBzIHN0cnVjdHVyZXMgb3IgQU5ZCi0JYmVjYXVzZSBpdCBpcyB0b28gZGFuZ2Vyb3VzIHNpbmNlIHdlIGRvIG5vdCBkbyBkeW5hbWljCi0JcmVwbHVnZ2luZy4KLQotMjAwNC0xMC0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCXdyaXR0ZW4gYnk6IEdvcmEgTW9oYW50eSA8Z29yYV9tb2hhbnR5QHlhaG9vLmNvLmluPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vb3IucG86Ci0JICBhZGQgT3JpeWEgdHJhbnNsYXRpb24KLQotMjAwNC0xMC0wNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9tYXNzYWdlX2luZGV4KToKLQkgIFByZXZlbnQgb3ZlcndyaXRlIG9mIHNpemUgbWVtYmVyLiBNYWtlcyBhdWRpbyBzb3VuZCBjcmFwcHkuCi0KLTIwMDQtMTAtMDUgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKHBsdWdpbl9pbml0KToKLQlBZGQgcm12YiB0byB0aGUgbGlzdCBvZiBrbm93biBSZWFsTWVkaWEgZXh0ZW5zaW9ucwotCi0yMDA0LTEwLTA1ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2xpYm1uZy9nc3RtbmdkZWMuYzogKGdzdF9tbmdkZWNfbG9vcCksIChtbmdkZWNfZXJyb3IpLAotCShtbmdkZWNfb3BlbnN0cmVhbSksIChtbmdkZWNfY2xvc2VzdHJlYW0pLAotCShtbmdkZWNfaGFuZGxlX3NpbmtfZXZlbnQpLCAobW5nZGVjX3JlYWRkYXRhKSwKLQkobW5nZGVjX2dldHRpY2tjb3VudCksIChtbmdkZWNfc2V0dGltZXIpLCAobW5nZGVjX3Byb2Nlc3NoZWFkZXIpLAotCShtbmdkZWNfZ2V0Y2FudmFzbGluZSksIChtbmdkZWNfcmVmcmVzaCksCi0JKGdzdF9tbmdkZWNfY2hhbmdlX3N0YXRlKToKLQlTZXQgdGhlIGZyYW1lcmF0ZSBjb3JyZWN0bHkuCi0KLTIwMDQtMTAtMDQgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfbWFzc2FnZV9pbmRleCk6Ci0JICBUaGVyZSB3YXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGluZGV4IG1hc3NhZ2luZy4KLQotMjAwNC0xMC0wNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWcuYzogKHNtb2tlX3R5cGVfZmluZCksIChwbHVnaW5faW5pdCk6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWRlYy5jOiAoZ3N0X3Ntb2tlZGVjX2luaXQpLAotCShnc3Rfc21va2VkZWNfY2hhaW4pOgotCSogZXh0L2pwZWcvZ3N0c21va2VkZWMuaDoKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmM6IChnc3Rfc21va2VlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9zbW9rZWVuY19pbml0KSwgKGdzdF9zbW9rZWVuY19yZXN5bmMpLCAoZ3N0X3Ntb2tlZW5jX2NoYWluKToKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZW5jLmg6Ci0JKiBleHQvanBlZy9zbW9rZWNvZGVjLmM6IChzbW9rZWNvZGVjX2VuY29kZV9uZXcpLAotCShzbW9rZWNvZGVjX2RlY29kZV9uZXcpLCAoc21va2Vjb2RlY19pbmZvX2ZyZWUpLAotCShzbW9rZWNvZGVjX3NldF9xdWFsaXR5KSwgKHNtb2tlY29kZWNfZ2V0X3F1YWxpdHkpLAotCShzbW9rZWNvZGVjX3NldF90aHJlc2hvbGQpLCAoc21va2Vjb2RlY19nZXRfdGhyZXNob2xkKSwKLQkoc21va2Vjb2RlY19zZXRfYml0cmF0ZSksIChzbW9rZWNvZGVjX2dldF9iaXRyYXRlKSwKLQkoZmluZF9iZXN0X3NpemUpLCAoYWJzX2RpZmYpLCAocHV0KSwgKHNtb2tlY29kZWNfZW5jb2RlX2lkKSwKLQkoc21va2Vjb2RlY19lbmNvZGUpLCAoc21va2Vjb2RlY19wYXJzZV9pZCksCi0JKHNtb2tlY29kZWNfcGFyc2VfaGVhZGVyKSwgKHNtb2tlY29kZWNfZGVjb2RlKToKLQkqIGV4dC9qcGVnL3Ntb2tlY29kZWMuaDoKLQkqIGV4dC9qcGVnL3Ntb2tlZm9ybWF0Lmg6Ci0JVXBkYXRlZCBzbW9rZSwgbmV3IGJpdHN0cmVhbSwgYWxsb3dzIGVtYmVkZGluZyBpbiBvZ2cuCi0KLTIwMDQtMTAtMDQgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCk6Ci0JICBGaXggc2Vla2luZyBpbiBzb21lIGZpbGVzLiBBbGwgdGhpcyBjb2RlIGlzIG5vIGxvbmdlciBuZWVkZWQgKGFuZAotCSAgYWN0dWFsbHkgYnJlYWtzIHN0dWZmKSBiZWNhdXNlIHdlIG5vdyBzeW5jaHJvbml6ZSB0aGUgZnVsbCBpbmRleAotCSAgcmlnaHQgd2hlbiByZWFkaW5nIHRoZSBoZWFkZXIuCi0KLTIwMDQtMTAtMDQgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JY29uZmlndXJlIHVwZGF0ZSBmb3IgbGlibW5nLgotCi0yMDA0LTEwLTA0ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L2xpYm1uZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9saWJtbmcvZ3N0bW5nLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBleHQvbGlibW5nL2dzdG1uZy5oOgotCSogZXh0L2xpYm1uZy9nc3RtbmdkZWMuYzogKGdzdF9tbmdkZWNfZ2V0X3R5cGUpLAotCShnc3RfbW5nZGVjX2Jhc2VfaW5pdCksIChnc3RfbW5nZGVjX2NsYXNzX2luaXQpLAotCShnc3RfbW5nZGVjX3NpbmtsaW5rKSwgKGdzdF9tbmdkZWNfaW5pdCksIChnc3RfbW5nZGVjX3NyY19nZXRjYXBzKSwKLQkoZ3N0X21uZ2RlY19sb29wKSwgKGdzdF9tbmdkZWNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X21uZ2RlY19zZXRfcHJvcGVydHkpLCAobW5nZGVjX2Vycm9yKSwgKG1uZ2RlY19vcGVuc3RyZWFtKSwKLQkobW5nZGVjX2Nsb3Nlc3RyZWFtKSwgKG1uZ2RlY19oYW5kbGVfc2lua19ldmVudCksCi0JKG1uZ2RlY19yZWFkZGF0YSksIChtbmdkZWNfZ2V0dGlja2NvdW50KSwgKG1uZ2RlY19zZXR0aW1lciksCi0JKG1uZ2RlY19wcm9jZXNzaGVhZGVyKSwgKG1uZ2RlY19nZXRjYW52YXNsaW5lKSwgKG1uZ2RlY19yZWZyZXNoKSwKLQkoZ3N0X21uZ2RlY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2xpYm1uZy9nc3RtbmdkZWMuaDoKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmM6IChnc3RfbW5nZW5jX2dldF90eXBlKSwKLQkobW5nX2NhcHNfZmFjdG9yeSksIChyYXdfY2Fwc19mYWN0b3J5KSwgKGdzdF9tbmdlbmNfYmFzZV9pbml0KSwKLQkoZ3N0X21uZ2VuY19jbGFzc19pbml0KSwgKGdzdF9tbmdlbmNfc2lua2xpbmspLCAoZ3N0X21uZ2VuY19pbml0KSwKLQkoZ3N0X21uZ2VuY19jaGFpbiksIChnc3RfbW5nZW5jX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9tbmdlbmNfc2V0X3Byb3BlcnR5KToKLQkqIGV4dC9saWJtbmcvZ3N0bW5nZW5jLmg6Ci0JQWRkZWQgYmFzaWMgTU5HIGRlY29kZXIuIE5lZWRzIG1vcmUgd29yay4gVGhlIGVuY29kZXIgZG9lcwotCW5vdCB3b3JrIHlldC4KLQotMjAwNC0xMC0wNCAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6IChnc3Rfcm1kZW11eF9oYW5kbGVfc2lua19ldmVudCksCi0JKGdzdF9ybWRlbXV4X2xvb3ApLCAoZ3N0X3JtZGVtdXhfYWRkX3N0cmVhbSksCi0JKGdzdF9ybWRlbXV4X3BhcnNlX21kcHIpLCAoZ3N0X3JtZGVtdXhfZHVtcF9tZHByKToKLQkgIERvbid0IGhhbmcgb24gbGVuZ3RoPTAgY2h1bmtzLiBTb21lIG5lZ290aWF0aW9uIGZpeGVzLiBTaWduYWwKLQkgIG5vLW1vcmUtcGFkcy4KLQotMjAwNC0xMC0wNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgeW91IG5lZWQgYXQgbGVhc3QgMS4wLjQgb2Ygc3BlZXgKLQotMjAwNC0xMC0wNCBJYWluIDxpYWluZ25vbWVAZ21haWwuY29tPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuaDogUmV2ZXJ0IHRoZSBpbmNsdWRlcyBjaGFuZ2VzLgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuW2NoXTogUmV2ZXJ0IHRoZSBpbmNsdWRlcyBjaGFuZ2VzLgotCi0yMDA0LTA5LTMwIElhaW4gPGlhaW5nbm9tZUBnbWFpbC5jb20+Ci0KLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jIChnc3Rfc3VuYXVkaW9zaW5rX29wZW4pOiBVc2UgdGhlIGRldmljZQotCWZvdW5kIGR1cmluZyBpbml0IG9yIHNldCBhcyBhIHByb3BlcnR5IGluc3RlYWQgb2YgaGFyZGNvZGluZyAvZGV2L2F1ZGlvCi0KLTIwMDQtMTAtMDQgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jOiAoZ3N0X3JtZGVtdXhfY2xhc3NfaW5pdCksCi0JKGdzdF9ybWRlbXV4X2luaXQpLCAoZ3N0X3JtZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpLAotCShnc3Rfcm1kZW11eF9sb29wKSwgKGdzdF9ybWRlbXV4X2FkZF9zdHJlYW0pLCAocmVfaGV4ZHVtcF9ieXRlcyksCi0JKHJlX2R1bXBfcGFzY2FsX3N0cmluZyksIChnc3Rfcm1kZW11eF9kdW1wX19ybWYpLAotCShnc3Rfcm1kZW11eF9kdW1wX3Byb3ApLCAoZ3N0X3JtZGVtdXhfcGFyc2VfbWRwciksCi0JKGdzdF9ybWRlbXV4X2R1bXBfbWRwciksIChnc3Rfcm1kZW11eF9kdW1wX2luZHgpLAotCShnc3Rfcm1kZW11eF9kdW1wX2RhdGEpOgotCSAgVXNlIGRlYnVnIGNhdGVnb3J5LCBmaXggRU9TIGhhbmRsaW5nLiBmaWxlc3JjICEgcm1kZW11eCBub3cKLQkgIHdvcmtzLgotCi0yMDA0LTEwLTA0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX3NjYW4pLCAoc29ydCksIChnc3RfYXZpX2RlbXV4X21hc3NhZ2VfaW5kZXgpLAotCShnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSk6Ci0JICBJbXByb3ZlIGFsbG9jYXRpb24sIGN1dHRpbmcgYW5kIHNvcnRpbmcgb2YgdGhlIGluZGV4LiBIb3cgdGFrZXMgYQotCSAgZmV3IHNlY29uZHMgaW5zdGVhZCBvZiBtaW51dGVzLgotCi0yMDA0LTEwLTAzICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6IChnc3Rfcm1kZW11eF9wYXJzZV9tZHByKToKLQkgIGZpeGVkIGNvbXBpbGF0aW9uCi0KLTIwMDQtMTAtMDIgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX2NhcHNfd2l0aF9kYXRhKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX3RlbXBsYXRlX2NhcHMpOgotCSAgQWRkIHdpbmcgY29tbWFuZGVyIGZvcm1hdCBtaW1ldHlwZS9mb3VyY2NzLgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9tYXNzYWdlX2luZGV4KToKLQkgIERvbid0IGNyYXNoIGlmIHNvbWUgdmFsdWUgaXMgMC4KLQotMjAwNC0xMC0wMiAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwc193aXRoX2RhdGEpLAotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fdGVtcGxhdGVfY2Fwcyk6Ci0JICBBZGQgRElCIGZvdXJjYyAocmF3LCBwYWxldHRpemVkIDgtYml0IFJHQikuCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzoKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX3ZpZHNfd2l0aF9kYXRhKToKLQkgIE9vcHMsIGZpeCBzdHJmX2RhdGEgcmVhZGluZyBidWcuCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2FkZF9zdHJlYW0pOgotCSAgVXNlIGEgbm9uLU5VTEwgdGFnLgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFRpbWUgZm9yIGhhY2tzLiBTb3JyeSBEYXZlLiBBdCBsZWFzdCBvbmUgcXVpY2t0aW1lIG1vdmllIChhCi0JICB0cmFpbGVyKSB0aGF0IEkndmUgZW5jb3VudGVyZWQgY29udGFpbnMgbXVsdGlwbGUgdmlkZW8gdHJhY2tzLgotCSAgT25lIG9mIHRob3NlIGlzIHRoZSBhY3R1YWwgdmlkZW8gdHJhY2ssIHRoZSBvdGhlciBhcmUgb25lLWZyYW1lCi0JICB0cmFja3MgKGltYWdlcykuIFVuZm9ydHVuYXRlbHksIHRoZSBudW1iZXIgb2YgZnJhbWVzIGFjY29yZGluZwotCSAgdG8gdGhlIHRyYWsgaGVhZGVyIGlzIDEgZm9yIGVhY2gsIHNvIHRoYXQgZG9lc24ndCBoZWxwLiBTbwotCSAgaW5zdGVhZCwgSSBsb29rIGF0IHRoZSBkdXJhdGlvbiBhbmQgZGlzY2FyZCB0cmFja3Mgd2l0aCBhCi0JICBkdXJhdGlvbiBzaG9ydGVyIHRoYW4gMjAlIG9mIHRoZSBsZW5ndGggb2YgdGhlIHN0cmVhbS4gQmV0dGVyCi0JICB0aGFuIG5vdGhpbmcuCi0KLTIwMDQtMTAtMDEgIENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuQGZsdWVuZG8uY29tPgotCi0JKiBleHQvaXZvcmJpcy92b3JiaXMuYzoKLQkgIFBhdGNoIGZyb20gUGhpbCBCbHVuZGVsbCAoQnVnIDE1MjM0MSkKLQotMjAwNC0xMC0wMSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoZ3N0X3NwZWV4X2RlY19jbGFzc19pbml0KSwKLQkoc3BlZXhfZGVjX2dldF9mb3JtYXRzKSwgKHNwZWV4X2RlY19jb252ZXJ0KSwKLQkoc3BlZXhfZGVjX3NyY19xdWVyeSksIChzcGVleF9kZWNfc3JjX2V2ZW50KSwgKHNwZWV4X2RlY19ldmVudCksCi0JKHNwZWV4X2RlY19jaGFpbiksIChnc3Rfc3BlZXhkZWNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3NwZWV4ZGVjX3NldF9wcm9wZXJ0eSk6Ci0JU21hbGwgY2xlYW51cHMuCi0KLTIwMDQtMTAtMDEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9jbGFzc19pbml0KSwKLQkoZ3N0X3dhdnBhcnNlX3N0cmVhbV9pbml0KSwgKGdzdF93YXZwYXJzZV9mbXQpLAotCShnc3Rfd2F2cGFyc2Vfb3RoZXIpLCAoZ3N0X3dhdnBhcnNlX2xvb3ApLAotCShnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQpLCAoZ3N0X3dhdnBhcnNlX3BhZF9xdWVyeSksCi0JKGdzdF93YXZwYXJzZV9zcmNwYWRfZXZlbnQpOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmg6Ci0JQWRkZWQgc29tZSBtb3JlIGRlYnVnZ2luZyBpbmZvLgotCUZpeCB0aGUgY2FzZSB3aGVyZSB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIGlzIDAuCi0JTWFrZSBzdXJlIHdlIHNlZWsgdG8gc2FtcGxlIGJvcmRlcnMuCi0KLTIwMDQtMTAtMDEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svUkVBRE1FOgotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5fZmFjdG9yeV9maWx0ZXIpLAotCShnc3RfZGVjb2RlX2Jpbl9pbml0KSwgKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLAotCSh0cnlfdG9fbGlua18xKSwgKG5vX21vcmVfcGFkcyksIChjbG9zZV9saW5rKSwgKHR5cGVfZm91bmQpOgotCUFkZCBzb21lIGRlYnVnIGluZm8gdG8gZGVjb2RlYmluLCB1cGRhdGUgUkVBRE1FCi0KLTIwMDQtMTAtMDEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9kdmRuYXYvZHZkbmF2c3JjLmM6IChkdmRuYXZfaGFuZGxlX25hdmlnYXRpb25fZXZlbnQpOgotCSAgRG9uJ3QgdXNlIGdfcHJpbnQoKTsgdXNlIEdTVF9ERUJVRygpLgotCi0yMDA0LTEwLTAxICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9xdWV1ZV9wYWRzKToKLQkgIEhhbmRsZSBFT1MgcHJvcGVybHkuCi0KLTIwMDQtMTAtMDEgIFNlYmFzdGllbiBDb3RlICA8c2M1QGhlcm1lcy51c2hlcmIuY2E+Ci0KLQlSZXZpZXdlZCBieTogUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfaW5pdCksIChnc3RfZmFhZF9zaW5rY29ubmVjdCksCi0JKGdzdF9mYWFkX2NoYWluKSwgKGdzdF9mYWFkX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvZmFhZC9nc3RmYWFkLmg6Ci0JICBBbGxvdyBwbGF5YmFjayBvZiByYXcgKHVuZnJhbWVkKSBNUEVHIEFBQyBmaWxlcyAoIzE0ODk5MykuCi0KLTIwMDQtMTAtMDEgIFNlYmFzdGllbiBDb3RlICA8c2M1QGhlcm1lcy51c2hlcmIuY2E+Ci0KLQlSZXZpZXdlZCBieTogUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfZm10KToKLQkgIFRocm93IGVycm9yIGlmIHdlIGRpZG4ndCByZWNvZ25pemUgdGhlIHN0cmVhbS4gRml4ZXMgIzE1MjI4OS4KLQotMjAwNC0xMC0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOiAoZ3N0X3ZpZGVvc2NhbGVfbGluayk6Ci0JICBGaXggbmVnb3RpYXRpb24uCi0KLTIwMDQtMTAtMDEgIEZyYW5jaXMgTGFib250ZSAgPGZyYW5jaXNfbGFib250ZUBob3RtYWlsLmNvbT4KLQotCVJldmlld2VkIGJ5OiBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9mbXQpOgotCSAgRml4IG1lbWxlYWsuCi0KLTIwMDQtMTAtMDEgIEJhbGFtdXJhbGkgVmlzd2FuYXRoYW4gIDxiYWxhbXVyYWxpLnZpc3dhbmF0aGFuQHdpcHJvLmNvbT4KLQotCVJldmlld2VkIGJ5OiBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW8uYzogKGdzdF9zdW5hdWRpb3Npbmtfc2V0cGFyYW1zKToKLQkgIFNvbHZlICMxNTI4MDUuCi0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VubWl4ZXIuYzogKGdzdF9zdW5hdWRpb21peGVyX3NldF9tdXRlKToKLQkgIFNvbHZlIDE1MjgwNi4KLQotMjAwNC0xMC0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwc193aXRoX2RhdGEpLAotCShnc3RfcmlmZl9jcmVhdGVfYXVkaW9fY2Fwc193aXRoX2RhdGEpOgotCSAgQWRkIGNvZGVjX2RhdGEgaGFuZGxpbmcgKGxpa2UgYXNmZGVtdXggdXNlZCB0byBkbykuCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfYmFzZV9pbml0KSwKLQkoZ3N0X2FzZl9kZW11eF9hZGRfYXVkaW9fc3RyZWFtKSwgKGdzdF9hc2ZfZGVtdXhfYWRkX3ZpZGVvX3N0cmVhbSk6Ci0JICBVc2UgcmlmZi1tZWRpYSBmb3IgY2FwcyBjcmVhdGlvbiBpbnN0ZWFkIG9mIG91ciBvd24gKG1vc3RseQotCSAgYnJva2VuKSBjb3B5IG9mIGl0cyBmdW5jdGlvbnMuCi0KLTIwMDQtMTAtMDEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6IChnc3RfdjRsc3JjX3RyeV9jYXB0dXJlKToKLQkgIERvbid0IGFjdHVhbGx5IGVycm9yIG91dCBpZiB3ZSBnZXQgYW5vdGhlciByZXR1cm4gdmFsdWUgdGhhbgotCSAgLUVJTlZBTC4gT3Bwb3NpdGUgdG8gd2hhdCBJIGZpcnN0IHRob3VnaHQsIGRyaXZlcnMgaGF2ZSByYW5kb20KLQkgIHJldHVybiB2YWx1ZXMgZm9yIHRoaXMsIGFsdGhvdWdoIC1FSU5WQUwgaXMgdGhlIGV4cGVjdGVkIHJldHVybgotCSAgdmFsdWUuIFNpbmNlIHRoaXMgaXMgbm90IGZhdGFsLCB3ZSBzaG91bGRuJ3QgdXNlCi0JICBHU1RfRUxFTUVOVF9FUlJPUigpIGJ1dCBqdXN0IEdTVF9FUlJPUl9PQkpFQ1QoKS4KLQotMjAwNC0xMC0wMSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2R2ZHJlYWQvZHZkcmVhZHNyYy5jOiAoZHZkcmVhZHNyY19jbGFzc19pbml0KSwKLQkoZHZkcmVhZHNyY19pbml0KSwgKGR2ZHJlYWRzcmNfZGlzcG9zZSksIChkdmRyZWFkc3JjX3NldF9wcm9wZXJ0eSksCi0JKGR2ZHJlYWRzcmNfZ2V0X3Byb3BlcnR5KSwgKF9vcGVuKSwgKF9zZWVrKSwgKF9yZWFkKSwKLQkoZHZkcmVhZHNyY19nZXQpLCAoZHZkcmVhZHNyY19vcGVuX2ZpbGUpLAotCShkdmRyZWFkc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JICBGaXguIERvbid0IGRvIG9uZSBiaWcgaHVnZSBsb29wIGFyb3VuZCB0aGUgd2hvbGUgRFZELCB0aGF0IHdpbGwKLQkgIGNhY2hlIGFsbCBkYXRhIGFuZCB0aHVzIGVhdCBzaXplb2YoZHZkKSAoc2V2ZXJhbCBHQikgYmVmb3JlIHdlCi0JICBzZWUgc29tZXRoaW5nLgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX3NlZWspOgotCSAgQWN0dWFsbHkgTlVMTCdpZnkgZXZlbnQgYWZ0ZXIgdXNpbmcgaXQuCi0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX3VzZV9ldmVudCksCi0JKGdzdF9lYm1sX3JlYWRfaGFuZGxlX2V2ZW50KSwgKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9pZCksCi0JKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9sZW5ndGgpLCAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2RhdGEpLAotCShnc3RfZWJtbF9yZWFkX3NlZWspLCAoZ3N0X2VibWxfcmVhZF9za2lwKToKLQkgIEhhbmRsZSBldmVudHMuCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOiAoZ3N0X2R2ZF9kZW11eF9iYXNlX2luaXQpLAotCShnc3RfZHZkX2RlbXV4X2luaXQpLCAoZ3N0X2R2ZF9kZW11eF9nZXRfYXVkaW9fc3RyZWFtKSwKLQkoZ3N0X2R2ZF9kZW11eF9nZXRfc3VicGljdHVyZV9zdHJlYW0pLCAoZ3N0X2R2ZF9kZW11eF9wbHVnaW5faW5pdCk6Ci0JICBGaXggdGltaW5nICh0aGlzIHdpbGwgcHJvYmFibHkgYnJlYWsgaWYgSSBzZWVrIHVzaW5nIG1lbnVzLCBidXQKLQkgIEkgZGlkbid0IGdldCB0aGVyZSB5ZXQpLiBWT0JzIGFuZCBub3JtYWwgRFZEcyBzaG91bGQgbm93IHdvcmsuCi0JICBBZGQgYSBtcGVnMi1vbmx5IHBhZCB3aXRoIGhpZ2ggcmFuayBzbyB0aGlzIGdldCBhdXRvcGx1Z2dlZCBmb3IKLQkgIE1QRUctMiBtb3ZpZXMuCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X2Jhc2VfaW5pdCksCi0JKGdzdF9tcGVnX2RlbXV4X2NsYXNzX2luaXQpLCAoZ3N0X21wZWdfZGVtdXhfaW5pdCksCi0JKGdzdF9tcGVnX2RlbXV4X25ld19vdXRwdXRfcGFkKSwgKGdzdF9tcGVnX2RlbXV4X2dldF92aWRlb19zdHJlYW0pLAotCShnc3RfbXBlZ19kZW11eF9nZXRfYXVkaW9fc3RyZWFtKSwKLQkoZ3N0X21wZWdfZGVtdXhfZ2V0X3ByaXZhdGVfc3RyZWFtKSwgKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3BhY2tldCksCi0JKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3BlcyksIChnc3RfbXBlZ19kZW11eF9wbHVnaW5faW5pdCk6Ci0JICBVc2UgdGhpcyBhcyBzZWNvbmQgcmFuayBmb3IgTVBFRy0xIGFuZCBNUEVHLTIuIFN0aWxsIHVzZSB0aGlzIGZvcgotCSAgTVBFRy0xIGJ1dCB1c2UgZHZkZGVtdXggZm9yIE1QRUctMi4KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfY2xhc3NfaW5pdCksCi0JKGdzdF9tcGVnX3BhcnNlX2luaXQpLCAoZ3N0X21wZWdfcGFyc2VfbmV3X3BhZCksCi0JKGdzdF9tcGVnX3BhcnNlX3BhcnNlX3BhY2toZWFkKToKLQkgIFRpbWluZy4gT25seSBhZGQgcGFkIHRlbXBsYXRlIGlmIGl0IGV4aXN0cy4gQWRkIHNpbmsgdGVtcGxhdGUgZnJvbQotCSAgY2xhc3MgYW5kIG5vdCBmcm9tIG91cnNlbHZlcy4gVGhpcyBtZWFucyB3ZSB3aWxsIGFsd2F5cyB1c2UgdGhlCi0JICBjb3JyZWN0IHNpbmsgdGVtcGxhdGUgZXZlbiBpZiBpdCBpcyBub3QgdGhlIG9uZSBkZWZpbmVkIGluIHRoaXMKLQkgIGZpbGUuCi0KLTIwMDQtMDktMjkgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3BhY2tldCksCi0JKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3Blcyk6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVncGFyc2UuYzogKGdzdF9tcGVnX3BhcnNlX3BhcnNlX3BhY2toZWFkKToKLQlGaXggcGxheWJhY2sgb2YgbXBlZyBhZ2FpbiwgdGltZXN0YW1wcyB3aGVyZSBzY3Jld2VkIHVwIGJ5Ci0JcGF0Y2ggMS42MS4KLQotMjAwNC0wOS0yOSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNkZWNfc3JjX3F1ZXJ5KToKLQkgIE9ubHkgcmV0dXJuIHRydWUgaWYgd2UgYWN0dWFsbHkgZmlsbGVkIHNvbWV0aGluZyBpbi4gUHJldmVudHMKLQkgIHBsYXllciBhcHBsaWNhdGlvbnMgZnJvbSBzaG93aW5nIGEgcmFuZG9tIGxlbmd0aCBmb3IgZmxhYyBmaWxlcy4KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5jOiAoZ3N0X3JpZmZfcmVhZF9jbGFzc19pbml0KSwKLQkoZ3N0X3JpZmZfcmVhZF91c2VfZXZlbnQpLCAoZ3N0X3JpZmZfcmVhZF9oYW5kbGVfZXZlbnQpLAotCShnc3RfcmlmZl9yZWFkX3NlZWspLCAoZ3N0X3JpZmZfcmVhZF9za2lwKSwgKGdzdF9yaWZmX3JlYWRfc3RyaCksCi0JKGdzdF9yaWZmX3JlYWRfc3RyZl92aWRzX3dpdGhfZGF0YSksCi0JKGdzdF9yaWZmX3JlYWRfc3RyZl9hdWRzX3dpdGhfZGF0YSksIChnc3RfcmlmZl9yZWFkX3N0cmZfaWF2cyk6Ci0JICBPSywgb2ssIHNvIEkgaW1wbGVtZW50ZWQgZXZlbnQgaGFuZGxpbmcuIEFwcGFyZW50bHkgaXQncyBub3JtYWwKLQkgIHRoYXQgd2UgcmVjZWl2ZSByYW5kb20gZXZlbnRzIGF0IHJhbmRvbSBwb2ludHMgd2l0aG91dCBhc2tpbmcKLQkgIGZvciBpdC4KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfcmVzZXQpLAotCShnc3RfYXZpX2RlbXV4X3NyY19jb252ZXJ0KSwgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCksCi0JKGdzdF9hdmlfZGVtdXhfc3luYyksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuKSwKLQkoZ3N0X2F2aV9kZW11eF9tYXNzYWdlX2luZGV4KSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlciksCi0JKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWspLCAoZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkpLAotCShnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKSwgKGdzdF9hdmlfZGVtdXhfbG9vcCk6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBJbXBsZW1lbnQgbm9uLWxpbmVhaXIgY2h1bmsgaGFuZGxpbmcgYW5kIHN1YmNodW5rIHByb2Nlc3NpbmcuCi0JICBUaGUgZmlyc3Qgc29sdmVzIHBsYXliYWNrIG9mIEFWSSBmaWxlcyB3aGVyZSB0aGUgYXVkaW8gYW5kIHZpZGVvCi0JICBkYXRhIG9mIGluZGl2aWR1YWwgYnVmZmVycyB0aGF0IHdlIHJlYWQgYXJlIG5vdCBzeW5jaHJvbml6ZWQuCi0JICBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGFjY29yZGluZyB0byB0aGUgd29uZGVyZnVsIEFWSSBzcGVjcywgYnV0Ci0JICBvZiBjb3Vyc2UgaXQgZG9lcyBoYXBwZW4gaW4gcmVhbGl0eS4gSXQgaXMgYWxzbyBhIHByZXJlcXVpc2l0ZSBmb3IKLQkgIHRoZSBzZWNvbmQuIFN1YmNodW5rIHByb2Nlc3NpbmcgYWxsb3dzIHVzIHRvIGN1dCBjaHVua3MgaW4gc21hbGwKLQkgIHBpZWNlcyBhbmQgcHJvY2VzcyBlYWNoIG9mIHRoZXNlIHBpZWNlcyBzZXBhcmF0ZWx5LiBUaGlzIGlzCi0JICByZXF1aXJlZCBiZWNhdXNlIEkndmUgc2VlbiBzZXZlcmFsIEFWSSBmaWxlcyB3aXRoIGluY3JlZGlibHkgbGFyZ2UKLQkgIGF1ZGlvIGNodW5rcywgZXZlbiBzb21lIGZpbGVzIHdpdGggb25seSBvbmUgYXVkaW8gY2h1bmsgZm9yIHRoZQotCSAgd2hvbGUgZmlsZS4gVGhpcyBhbGxvd3MgZm9yIHByb3BlciBwbGF5YmFjayBpbmNsdWRpbmcgc2Vla2luZy4KLQkgIFRoaXMgcGF0Y2ggaXMgc3VwcG9zZWQgdG8gZml4IGFsbCBBVkkgQS9WIHN5bmMgaXNzdWVzLgotCSogZ3N0L2ZseC9nc3RmbHhkZWMuYzogKGdzdF9mbHhkZWNfY2xhc3NfaW5pdCksCi0JKGZseF9kZWNvZGVfY2h1bmtzKSwgKGZseF9kZWNvZGVfY29sb3IpLCAoZ3N0X2ZseGRlY19sb29wKToKLQkgIFdvcmsuCi0JKiBnc3QvbW9kcGx1Zy9nc3Rtb2RwbHVnLmNjOgotCSAgUHJvcGVyIHJldHVybiB2YWx1ZSBzZXR0aW5nIGZvciB0aGUgcXVlcnkoKSBmdW5jdGlvbi4KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAoc2V0dXBfc291cmNlKToKLQkgIEJlaW5nIGluIG5vbi1wbGF5aW5nIHN0YXRlIChhZnRlciwgZS5nLiwgRU9TKSBpcyBub3QgbmVjZXNzYXJpbHkKLQkgIGEgYmFkIHRoaW5nLiBBbGxvdyBmb3IgdGhhdC4gVGhpcyBmaXhlcyBwbGF5YmFjayBvZiBzaG9ydCBmaWxlcy4KLQkgIFRoZXkgZG9uJ3QgYWN0dWFsbHkgcGxheWJhY2sgZnVsbHkgbm93LCBiZWNhdXNlIHRoZSBjbG9jayBhbHJlYWR5Ci0JICBydW5zLiBUaGlzIG1lYW5zIHRoYXQgc21hbGwgZmlsZXMgKDw1MDBrQikgd2l0aCBhIHNtYWxsIGxlbmd0aAotCSAgKDwyc2VjKSB3aWxsIHN0aWxsIG5vdCBvciBiYXJlbHkgcGxheS4gT3RoZXIgZmlsZXMsIHN1Y2ggYXMgbW9kCi0JICBvciBmbHgsIHdpbGwgd29yayBjb3JyZWN0bHksIGhvd2V2ZXIuCi0KLTIwMDQtMDktMjggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvc3BlZXgvZ3N0c3BlZXguYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoZ3N0X3NwZWV4X2RlY19iYXNlX2luaXQpLAotCShnc3Rfc3BlZXhfZGVjX2NsYXNzX2luaXQpLCAoc3BlZXhfZGVjX2dldF9mb3JtYXRzKSwKLQkoc3BlZXhfZ2V0X2V2ZW50X21hc2tzKSwgKHNwZWV4X2dldF9xdWVyeV90eXBlcyksCi0JKGdzdF9zcGVleF9kZWNfaW5pdCksIChzcGVleF9kZWNfY29udmVydCksIChzcGVleF9kZWNfc3JjX3F1ZXJ5KSwKLQkoc3BlZXhfZGVjX3NyY19ldmVudCksIChzcGVleF9kZWNfZXZlbnQpLCAoc3BlZXhfZGVjX2NoYWluKSwKLQkoZ3N0X3NwZWV4ZGVjX2dldF9wcm9wZXJ0eSksIChnc3Rfc3BlZXhkZWNfc2V0X3Byb3BlcnR5KSwKLQkoc3BlZXhfZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuaDoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2dldF9mb3JtYXRzKSwKLQkoZ3N0X3NwZWV4ZW5jX2dldF90eXBlKSwgKHNwZWV4X2NhcHNfZmFjdG9yeSksIChyYXdfY2Fwc19mYWN0b3J5KSwKLQkoZ3N0X3NwZWV4ZW5jX2Jhc2VfaW5pdCksIChnc3Rfc3BlZXhlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9zcGVleGVuY19zaW5rY29ubmVjdCksIChnc3Rfc3BlZXhlbmNfY29udmVydF9zcmMpLAotCShnc3Rfc3BlZXhlbmNfY29udmVydF9zaW5rKSwgKGdzdF9zcGVleGVuY19nZXRfcXVlcnlfdHlwZXMpLAotCShnc3Rfc3BlZXhlbmNfc3JjX3F1ZXJ5KSwgKGdzdF9zcGVleGVuY19pbml0KSwKLQkoZ3N0X3NwZWV4ZW5jX2dldF90YWdfdmFsdWUpLCAoY29tbWVudF9pbml0KSwgKGNvbW1lbnRfYWRkKSwKLQkoZ3N0X3NwZWV4ZW5jX21ldGFkYXRhX3NldDEpLCAoZ3N0X3NwZWV4ZW5jX3NldF9tZXRhZGF0YSksCi0JKGdzdF9zcGVleGVuY19zZXR1cCksIChnc3Rfc3BlZXhlbmNfYnVmZmVyX2Zyb21fZGF0YSksCi0JKGdzdF9zcGVleGVuY19wdXNoX2J1ZmZlciksIChnc3Rfc3BlZXhlbmNfc2V0X2hlYWRlcl9vbl9jYXBzKSwKLQkoZ3N0X3NwZWV4ZW5jX2NoYWluKSwgKGdzdF9zcGVleGVuY19nZXRfcHJvcGVydHkpLAotCShnc3Rfc3BlZXhlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9zcGVleGVuY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmg6Ci0JUmV3cm90ZSBzcGVleCBlbmNvZGVyLCBtYWtlIHN1cmUgaXQgY2FuIGJlIGVtYmVkZGVkIGluIG9nZy4KLQlJbXBsZW1lbnRlZCBzcGVleCBkZWNvZGVyLgotCi0yMDA0LTA5LTI4ICBDaHJpc3RpYW4gU2NoYWxsZXIgPGNocmlzdGlhbkBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCVJlbW92ZSBraW9zbGF2ZSBwbHVnaW4uIE1hcmtleSBpcyBicmV3aW5nIGEgbmV3IHdvcmtpbmcgb25lCi0JKiBleHQvTWFrZWZpbGUuYW06IFJlbW92ZSBraW9zbGF2ZSBwbHVnaW4KLQkqIGV4dC9raW86IHJlbW92ZQotCSogZ3N0LXBsdWdpbnMuc3BlYy5pbjogcmVtb3ZlIGtpbyBwbHVnaW4gZnJvbSBzcGVjCi0KLTIwMDQtMDktMjcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfYWRkKSwKLQkoZ3N0X211bHRpZmRzaW5rX3JlbW92ZSksIChnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlX2NsaWVudF9saW5rKSwKLQkoaXNfc3luY19mcmFtZSksIChnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2J1ZmZlciksCi0JKGdzdF9tdWx0aWZkc2lua19uZXdfY2xpZW50KSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVjb3Zlcl9jbGllbnQpLCAoZ3N0X211bHRpZmRzaW5rX3F1ZXVlX2J1ZmZlciksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50cyk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmg6Ci0JTWFrZSBzeW5jaW5nIHRvIGtleWZyYW1lcyBhY3R1YWxseSB3b3JrIGZvciBuZXcgY2xpZW50cyBhbmQgbGFnZ2luZwotCWNsaWVudHMuCi0KLTIwMDQtMDktMjYgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L2RlYnVnL2dzdG5hdmlnYXRpb250ZXN0LmM6IChnc3RfbmF2aWdhdGlvbnRlc3RfY2xhc3NfaW5pdCksCi0JKGdzdF9uYXZpZ2F0aW9udGVzdF9oYW5kbGVfc3JjX2V2ZW50KSwgKGRyYXdfYm94X3BsYW5hcjQxMSksCi0JKGdzdF9uYXZpZ2F0aW9udGVzdF9wbGFuYXI0MTEpLCAoZ3N0X25hdmlnYXRpb250ZXN0X2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvZGVidWcvZ3N0bmF2aWdhdGlvbnRlc3QuaDoKLQkgIG1ha2UgbmF2aWdhdGlvbnRlc3QgZGlzcGxheSBidXR0b24tcHJlc3MgYW5kIGJ1dHRvbi1yZWxlYXNlIGV2ZW50cwotCi0yMDA0LTA5LTI2IElhaW4gPGlhaW5nbm9tZUBnbWFpbC5jb20+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYyAoYWxsX2NoYW5uZWxzX25ld19tZWRpYSk6IENoZWNrcyBpZiBhbGwKLQl0aGUgY2hhbm5lbHMgaGF2ZSByZWNlaXZlZCBhIG5ldyBtZWRpYSBldmVudC4KLQkoaW50ZXJsZWF2ZV9idWZmZXJlZF9sb29wKTogQ29tcHJlc3NlcyBhIG5ldyBtZWRpYSBldmVudCBvbiBhbGwKLQljaGFubmVscyBpbnRvIG9uZS4KLQotMjAwNC0wOS0yNiBJYWluIDxpYWluZ25vbWVAZ21haWwuY29tPgotCi0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jIChnc3Rfd2F2ZW5jX2NoYWluKTogQ29tcGFueSBzYXlzIHdlIG5lZWQgdG8KLQljYWxsIHRoZSBzaW5rcGFkJ3MgZGVmYXVsdCBldmVudCBoYW5kbGVyIGFuZCBub3QgdGhlIHNyY3BhZHMuIEhlIGFsc28KLQlzYXlzIHRoaXMgaXMgY29uZnVzaW5nIDopCi0JKGdzdF93YXZlbmNfc3RvcF9maWxlKTogQ29tcGFueSBzYXlzIHRoYXQgc2VlayBldmVudHMgb25seSBnbyB1cHN0cmVhbQotCXdlIHNob3VsZCBzZW5kIGEgZGlzY29udGludW91cyBkb3duc3RyZWFtIGluc3RlYWQuCi0KLTIwMDQtMDktMjUgIENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuQGZsdWVuZG8uY29tPgotCi0JKiBVcGRhdGUgU1BFQyBmaWxlIHRvIGJlIHVzYWJsZSBpbiBjb25qdW5jdGlvbiB3aXRoIEZlZG9yYSBDb3JlLAotCSAgRmVkb3JhLnVzIGFuZCBmcmVzaHJwbXMgcGFja2FnZXMKLQkqIEZpeCB0eXBvIGluIG11bHRpZmlsZXNyYyB0ZXN0IE1ha2VmaWxlCi0KLTIwMDQtMDktMjQgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKG5ld19kZWNvZGVkX3BhZCk6Ci0JT25seSBzaWduYWwgdGhlIG5vX21vcmVfcGFkcyBzaWduYWwgd2hlbiB3ZSBoYXZlCi0JYWRkZWQgdGhlIHN0cmVhbSB0byBvdXIgbGlzdC4KLQotMjAwNC0wOS0yNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAocmVtb3ZlX3ByZXJvbGxzKSwKLQkobmV3X2RlY29kZWRfcGFkKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKHNldHVwX3NpbmtzKToKLQlEb24ndCB0cnkgdG8gcHJlcm9sbCBvciBkZWNvZGUgbW9yZSB0aGFuIG9uZSBhdWRpby92aWRlbwotCXRyYWNrLgotCi0yMDA0LTA5LTI0ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2NoYW5nZV9zdGF0ZSk6Ci0JICBUaHJvdyBlcnJvciBpZiB3ZSBmYWlsZWQgdG8gZmluZCBhIHN1aXRhYmxlIG91dHB1dC4gVGhpcyBzaG91bGQKLQkgIHRocm93IGFuIGVycm9yIGlmIHdlIHN1Y2Nlc3NmdWxseSBzZXQgdXAgYSBwaXBlbGluZSAoZS5nLiBiZWNhdXNlCi0JICB3ZSByZWNvZ25pemVkIGEgbWVkaWEgZmlsZSkgYnV0IGZvdW5kIG5vIGRlY29kYWJsZSBzdHJlYW1zIGluIGl0Ci0JICAoZS5nLiBiZWNhdXNlIGl0IGNvbnRhaW5zIG9ubHkgbWVkaWEgc3RyZWFtIHR5cGVzIGZvciB3aGljaCB3ZQotCSAgaGF2ZSBubyBkZWNvZGVycywgb3IgYmVjYXVzZSBpdCdzIG5vdCBhIG1lZGlhIHR5cGUpLgotCi0yMDA0LTA5LTIzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZGlyYWMvTWFrZWZpbGUuYW06Ci0JKiBleHQvZGlyYWMvZ3N0ZGlyYWMuY2M6Ci0JKiBleHQvZGlyYWMvZ3N0ZGlyYWNkZWMuY2M6Ci0JKiBleHQvZGlyYWMvZ3N0ZGlyYWNkZWMuaDoKLQkgIERvIHNvbWV0aGluZy4gRG9uJ3QgYWN0dWFsbHkga25vdyBpZiB0aGlzIHdvcmtzIGJlY2F1c2UgSSBkb24ndAotCSAgaGF2ZSBhIGRlbXV4ZXIgeWV0LgotCSogZXh0L2dzbS9nc3Rnc21kZWMuYzogKGdzdF9nc21kZWNfZ2V0Y2Fwcyk6Ci0JICBBZGQgY2hhbm5lbHM9MSB0byBjYXBzIHJldHVybmVkIGZyb20gX2dldGNhcHMoKS4KLQkqIGV4dC9vZ2cvZ3N0b2dtcGFyc2UuYzogKGdzdF9vZ21fYXVkaW9fcGFyc2VfZ2V0X3R5cGUpLAotCShnc3Rfb2dtX3ZpZGVvX3BhcnNlX2dldF90eXBlKSwgKGdzdF9vZ21fYXVkaW9fcGFyc2VfYmFzZV9pbml0KSwKLQkoZ3N0X29nbV92aWRlb19wYXJzZV9iYXNlX2luaXQpLCAoZ3N0X29nbV9wYXJzZV9pbml0KSwKLQkoZ3N0X29nbV9hdWRpb19wYXJzZV9pbml0KSwgKGdzdF9vZ21fdmlkZW9fcGFyc2VfaW5pdCksCi0JKGdzdF9vZ21fcGFyc2Vfc2lua19jb252ZXJ0KSwgKGdzdF9vZ21fcGFyc2VfY2hhaW4pLAotCShnc3Rfb2dtX3BhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JICBTZXBhcmF0ZSBiZXR3ZWVuIGF1ZGlvL3ZpZGVvIHNvIG9nbWF1ZGlvcGFyc2UgYWN0dWFsbHkgdXNlcyB0aGUKLQkgIGF1ZGlvIHBhZCB0ZW1wbGF0ZXMuIEJvdGggYXVkaW8gYW5kIHZpZGVvIHdvcmsgbm93LCBpbmNsdWRpbmcKLQkgIGF1dG9wbHVnZ2luZy4gQWxzbyB1c2Ugc29tZXRpbWVzLXNyY3BhZCBoYWNrLgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX3NlZWspOgotCSAgSGFuZGxlIGV2ZW50cyBiZXR0ZXIuIERvbid0IGhhbmcgb24gaW5maW5pdGUgbG9vcHMuCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2NsYXNzX2luaXQpLAotCShnc3RfYXZpX2RlbXV4X2luaXQpLCAoZ3N0X2F2aV9kZW11eF9yZXNldCksCi0JKGdzdF9hdmlfZGVtdXhfc3JjX2NvbnZlcnQpLCAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpLAotCShnc3RfYXZpX2RlbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBJbXByb3ZlIEEvViBzeW5jLiBTdGlsbCBub3QgcGVyZmVjdC4KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfc2VlayksCi0JKGdzdF9lYm1sX3JlYWRfc2tpcCk6Ci0JICBIYW5kbGUgZXZlbnRzIGJldHRlci4KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLCAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkocXRkZW11eF9hdWRpb19jYXBzKToKLQkgIEFkZCBJTUE0LiBJbXByb3ZlIGV2ZW50IGhhbmRsaW5nLiBTYXZlIG9mZnNldCBhZnRlciBhIHNlZWsgd2hlbgotCSAgdGhlIGhlYWRlcnMgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgc28gdGhhdCB3ZSBkb24ndCBlbmQgdXAgaW4KLQkgIGFuIGluZmluaXRlIGxvb3AuCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKHF0X3R5cGVfZmluZCk6Ci0JICBBZGQgbG93LXByaW9yaXR5IHR5cGVmaW5kIHN1cHBvcnQgZm9yIGZpbGVzIHdpdGggbm8gbGVuZ3RoLgotCi0yMDA0LTA5LTIzICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIHRlc3RzdWl0ZS9tdWx0aWZpbGVzaW5rL01ha2VmaWxlLmFtOgotCWZpeCB0eXBvCi0KLTIwMDQtMDktMjIgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194aW1hZ2VfZGVzdHJveSk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2NoZWNrX3hzaG1fY2FsbHMpOiBGaXgKLQltaXN0YWtlcyBmcm9tIHRoYXl0YW4ncyBwYXRjaGVzLgotCi0yMDA0LTA5LTIzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX2Rlc3Ryb3kpOgotCSAgRm9yIGNvbXBsZXRlbmVzcywgWFN5bmMgaW4gdGhlIGRlc3Ryb3kgZnVuY3Rpb24gYXMgeHZpbWFnZSBkb2VzLgotCi0yMDA0LTA5LTIzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmM6IChnc3RfcGl4YnVmc2NhbGVfZ2V0Y2Fwcyk6Ci0JICAgQ29ycmVjdCBjYXBzIG5lZ290aWF0aW9uCi0JKiBnc3Qvdm9sdW1lL2dzdHZvbHVtZS5jOiAodm9sdW1lX2NoYWluX2Zsb2F0KSwKLQkodm9sdW1lX2NoYWluX2ludDE2KToKLQkgICBNb2RpZnkgZGVidWcgb3V0cHV0IHRvIGJlIGxpdHRsZSBtb3JlIGluZm9ybWF0aXZlCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2NoZWNrX3hzaG1fY2FsbHMpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jaGVja194c2htX2NhbGxzKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3h2aW1hZ2VfZGVzdHJveSk6Ci0JICBBZGQgWFN5bmMgY2FsbHMgYWZ0ZXIgZGV0YWNoaW5nIGZyb20gdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCB0bwotCSAgYXZvaWQgYSBjcmFzaC4KLQotMjAwNC0wOS0yMiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfaW5pdCksCi0JKGdzdF9vZ2dfbXV4X25leHRfYnVmZmVyKSwgKGdzdF9vZ2dfbXV4X2xvb3ApOgotCSogZXh0L3ZvcmJpcy92b3JiaXMuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzZW5jX2luaXQpLAotCShnc3Rfdm9yYmlzZW5jX2NoYWluKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmg6Ci0JcmVtb3ZlIGV4cGxpY2l0IG5ld21lZGlhIHN1cHBvcnQgZnJvbSBvZ2dtdXggYW5kIHZvcmJpc2VuYwotCWFkZCBkZWJ1ZyBjYXRlZ29yeSB0byB2b3JiaXNlbmMKLQkqIGdzdC9tdWx0aWZpbGVzaW5rL2dzdG11bHRpZmlsZXNpbmsuYzoKLQkoZ3N0X211bHRpZmlsZXNpbmtfY2xhc3NfaW5pdCksIChnc3RfbXVsdGlmaWxlc2lua19pbml0KSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfZGlzcG9zZSksIChnc3RfbXVsdGlmaWxlc2lua19zZXRfbG9jYXRpb24pLAotCShnc3RfbXVsdGlmaWxlc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpZmlsZXNpbmtfbmV4dF9maWxlKSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfaGFuZGxlX2V2ZW50KSwgKGdzdF9tdWx0aWZpbGVzaW5rX2NoYWluKSwKLQkocGx1Z2luX2luaXQpOgotCSogZ3N0L211bHRpZmlsZXNpbmsvZ3N0bXVsdGlmaWxlc2luay5oOgotCWFkZCBzdXBwb3J0IGZvciBzdHJlYW1oZWFkZXIgaW4gbXVsdGlmaWxlc2luawotCi0yMDA0LTA5LTIyICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKF9yZWFkX3Zhcl9sZW5ndGgpLCAoX3JlYWRfZ3VpZCksCi0JKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19zZWdtZW50KSwgKGdzdF9hc2ZfZGVtdXhfaGFuZGxlX2RhdGEpLAotCShnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfY2h1bmspLCAoZ3N0X2FzZl9kZW11eF9oYW5kbGVfc2lua19ldmVudCk6Ci0JICBQcmV2ZW50IGluZmluaXRlIGxvb3BzLiBNb3JlIGNvcnJlY3QgZXJyb3IgcmVwb3J0aW5nLgotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOiAoZ3N0X2F1cGFyc2VfY2hhaW4pOgotCSAgRXJyb3Igb3V0IGlmIG5lZ290aWF0aW9uIGZhaWxzLgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChzZXR1cF9zb3VyY2UpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fZXJyb3IpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9mb3VuZF90YWcpOgotCSAgRXJyb3IvdGFnIGZvcndhcmRpbmcuIFByZS1yb2xsIGZpeGVzIGZvciBzb3VyY2UgZXJyb3JzIG9uIHN0YXRlCi0JICBjaGFuZ2VzIChlLmcuICJmaWxlIGRvZXMgbm90IGV4aXN0IikgdG8gcHJldmVudCBoYW5ncy4KLQotMjAwNC0wOS0yMSAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiB0ZXN0c3VpdGUvbXVsdGlmaWxlc2luay9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9tdWx0aWZpbGVzaW5rL2xhbWVfdGVzdC5jOiAoZ3N0X25ld21lZGlhX2Jhc2VfaW5pdCksCi0JKGdzdF9uZXdtZWRpYV9jbGFzc19pbml0KSwgKGdzdF9uZXdtZWRpYV9pbml0KSwKLQkoZ3N0X25ld21lZGlhX2NoYWluKSwgKGdzdF9uZXdtZWRpYV90cmlnZ2VyKSwgKHRlc3RfZm9ybWF0KSwKLQkobmV3ZmlsZV9zaWduYWwpLCAodGVzdF9zaWduYWwpLCAobWFpbik6Ci0JKiB0ZXN0c3VpdGUvbXVsdGlmaWxlc2luay9tdWx0aWZpbGVzcmNfdGVzdC5jOiAobWFpbik6Ci0JKiB0ZXN0c3VpdGUvbXVsdGlmaWxlc2luay9vZ2d0aGVvcmFfdGVzdC5jOgotCShnc3RfbmV3bWVkaWFfYmFzZV9pbml0KSwgKGdzdF9uZXdtZWRpYV9jbGFzc19pbml0KSwKLQkoZ3N0X25ld21lZGlhX2luaXQpLCAoZ3N0X25ld21lZGlhX2NoYWluKSwgKGdzdF9uZXdtZWRpYV90cmlnZ2VyKSwKLQkodGVzdF9mb3JtYXQpLCAobmV3ZmlsZV9zaWduYWwpLCAodGVzdF9zaWduYWwpLCAobWFpbik6Ci0JKiB0ZXN0c3VpdGUvbXVsdGlmaWxlc2luay9vZ2d2b3JiaXNfdGVzdC5jOgotCShnc3RfbmV3bWVkaWFfYmFzZV9pbml0KSwgKGdzdF9uZXdtZWRpYV9jbGFzc19pbml0KSwKLQkoZ3N0X25ld21lZGlhX2luaXQpLCAoZ3N0X25ld21lZGlhX2NoYWluKSwgKGdzdF9uZXdtZWRpYV90cmlnZ2VyKSwKLQkodGVzdF9mb3JtYXQpLCAobmV3ZmlsZV9zaWduYWwpLCAodGVzdF9zaWduYWwpLCAobWFpbik6Ci0JKiB0ZXN0c3VpdGUvbXVsdGlmaWxlc2luay93YXZlbmNfdGVzdC5jOiAoZ3N0X25ld21lZGlhX2Jhc2VfaW5pdCksCi0JKGdzdF9uZXdtZWRpYV9jbGFzc19pbml0KSwgKGdzdF9uZXdtZWRpYV9pbml0KSwKLQkoZ3N0X25ld21lZGlhX2NoYWluKSwgKGdzdF9uZXdtZWRpYV90cmlnZ2VyKSwgKHRlc3RfZm9ybWF0KSwKLQkobmV3ZmlsZV9zaWduYWwpLCAodGVzdF9zaWduYWwpLCAobWFpbik6Ci0JTmV3IG1lZGlhIHRlc3RzCi0KLTIwMDQtMDktMjAgIENocmlzdGlhbiBTY2hhbGxlciA8Y2hyaXN0aWFuQGZsdWVuZG8uY29tPgotCi0JKiBGaXggbWlrbW9kIGxpY2Vuc2UgdG8gTEdQTCBhcyB0aGV5IGhhdmUgcmVsaWNlbnNlZAotCSogTW92ZSBEaXJhYyBhbmQgRWZmZWN0diBpbnRvIExHUEwgc2VjdGlvbiBvZiBSRUFETUVfbGljZW5zZQotCi0yMDA0LTA5LTIwICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9jaGVja19jYXBzX3Jlc2V0KSwKLQkoZ3N0X21hZF9jaGFuZ2Vfc3RhdGUpOgotCSAgQWxsb3cgZm9yIG1wMyByYXRlL2NoYW5uZWxzIGNoYW5nZXMuIEhvd2V2ZXIsIG9ubHkgdmVyeQotCSAgY29uc2VydmF0aXZlbHkuIFJlYXNvbiB0aGF0IHdlICpoYXZlKiB0byBlbmFibGUgdGhpcyBpcyBzbWlwbHkKLQkgIGJlY2F1c2UgdGhlIG1hZCBmaW5kX3N5bmMoKSBmdW5jdGlvbiBpcyBub3QgZ29vZCBlbm91Z2gsIGl0IHdpbGwKLQkgIHJlZ3VsYXJseSBzeW5jIG9uIHJhbmRvbSBkYXRhIGFzIHZhbGlkIGZyYW1lcyBhbmQgdGhlcmVmb3JlIG1ha2UKLQkgIHVzIHByb3ZpZGUgcmFuZG9tIGNhcHMgYXMgKmZpbmFsKiBjYXBzIG9mIHRoZSBzdHJlYW0uIFRoZSBiZXN0IGZpeAotCSAgSSBjb3VsZCB0aGluayBvZiBpcyB0byBzaW1wbHkgcmVxdWlyZSBzZXZlcmFsIG9mIHRoZSBzYW1lIHN0cmVhbQotCSAgY2hhbmdlcyBpbiBhIHJvdyBiZWZvcmUgd2UgY2hhbmdlIGNhcHMuCi0JICBUaGUgYWN0dWFsIHRlc3RjYXNlIHRoYXQgd29ya3Mgbm93IGlzICMKLQkqIGV4dC9vZ2cvTWFrZWZpbGUuYW06Ci0JKiBleHQvb2dnL2dzdG9nZy5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L29nZy9nc3RvZ21wYXJzZS5jOgotCSAgT0dNIHN1cHBvcnQgKHZpZGVvIG9ubHkgZm9yIG5vdzsgSSBuZWVkIGFuIGF1ZGlvIHNhbXBsZSBmaWxlKS4KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9iYXNlX2luaXQpLAotCShnc3RfYXNmX2RlbXV4X3Byb2Nlc3Nfc3RyZWFtKSwgKGdzdF9hc2ZfZGVtdXhfdmlkZW9fY2FwcyksCi0JKGdzdF9hc2ZfZGVtdXhfYWRkX3ZpZGVvX3N0cmVhbSk6Ci0JICBXTVYgZXh0cmFkYXRhLgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6ICh1bmtub3duX3R5cGUpOgotCSAgRG9uJ3QgZXJyb3Igb3V0IG9uIHNpbmdsZSB1bmtub3duLXR5cGVzIGFmdGVyIGFsbC4gSXQncyB3cm9uZy4KLQkgIElmIHdlIGZvdW5kIHR5cGUgb2YgdmlkZW8gYW5kIGF1ZGlvIGJ1dCBub3Qgb2YgYSBzdWJ0aXRsZSBzdHJlYW0sCi0JICBpdCB3aWxsIHN0aWxsIGVycm9yIG91dCAod2hpY2ggaXMgdW53YW50ZWQpLiBXaWxsIGZpbmQgYSBiZXR0ZXIgZml4Ci0JICBsYXRlciBvbi4KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAob2dtdmlkZW9fdHlwZV9maW5kKSwKLQkob2dtYXVkaW9fdHlwZV9maW5kKSwgKHBsdWdpbl9pbml0KToKLQkgIE9HTSBzdXBwb3J0LgotCi0yMDA0LTA5LTIwICBKb2hhbiBEYWhsaW4gIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYyAoZ3N0X2pwZWdkZWNfY2hhaW4pOiBBbGxvY2F0ZSB0aGUgYnVmZmVyCi0JYWZ0ZXIgc2V0dGluZyBjYXBzLgotCi0yMDA0LTA5LTE5ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX2luaXQpLCAoZ3N0X3dhdmVuY19jaGFpbik6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oOgotCUFkZGVkIG5ld21lZGlhIHN1cHBvcnQgdG8gd2F2ZW5jCi0KLTIwMDQtMDktMTcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IChnc3RfZmRzZXRfZmRfaGFzX2Nsb3NlZCksCi0JKGdzdF9mZHNldF9mZF9oYXNfZXJyb3IpLCAoZ3N0X2Zkc2V0X2ZkX2Nhbl9yZWFkKSwKLQkoZ3N0X2Zkc2V0X2ZkX2Nhbl93cml0ZSksIChnc3RfZmRzZXRfd2FpdCk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfY2xpZW50X3N0YXR1c19nZXRfdHlwZSksCi0JKGdzdF9tdWx0aWZkc2lua19pbml0KSwgKGdzdF9tdWx0aWZkc2lua19hZGQpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlKSwgKGdzdF9tdWx0aWZkc2lua19nZXRfc3RhdHMpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlX2NsaWVudF9saW5rKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19yZWNvdmVyX2NsaWVudCksIChnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudHMpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xvc2UpLCAoZ3N0X211bHRpZmRzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzogKGdzdF90Y3BzZXJ2ZXJzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfdGNwc2VydmVyc2lua19yZW1vdmVkKToKLQlTbWFsbCBjbGVhbnVwcyBpbiBmZHNldC5jCi0JVXNlIGEgaGFzdGFibGUgdG8gbWFwIGZkIHRvIHRoZSBjbGllbnQgc3RydWN0dXJlIGZvciBmYXN0ZXIKLQlsb29rdXAgaW4gX3JlbW92ZSBhbmQgZ2V0X3N0YXRzLgotCUFkZGVkIHZpcnR1YWwgZnVuY3Rpb24gdG8gY2xvc2UgdGhlIGZkcy4KLQlIYW5kbGUgY2xpZW50cyBldmVuIHdoZW4gdGhlIHNlbGVjdC9wb2xsIGNhbGwgd2FzIHVuYmxvY2tlZCBiZWNhdXNlCi0Jb2YgYSBjb21tYW5kLgotCUltcGxlbWVudCBzeW5jaW5nIHRvIGtleWZyYW1lIGluIHRoZSByZWNvdmVyeSBwcm9jZWR1cmUuCi0KLTIwMDQtMDktMTYgSWFpbiA8aWFpbmdub21lQGdtYWlsLmNvbT4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYyAoX2ZpeGF0ZV9jYXBzX3RvX2ludCk6IEZyZWUgdGhlCi0JdHJ5IGNhcHMuCi0KLTIwMDQtMDktMTUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6IChnc3RfZHZkX2RlbXV4X2dldF9hdWRpb19zdHJlYW0pOgotCSAgQ2FwcyBhcmUgb25seSBzZXQgaWYgdGhlIHR5cGUgb2YgdGhlIHN0cmVhbSBpcyB1bmtub3duLCBidXQgdGhpcwotCSAgaXMgaW5pdGlhbGl6ZWQgaW4gLT5pbml0X3N0cmVhbSgpLCBzbyBzZXQgdG8gVU5LTk9XTiBhZnRlciBjYWxsaW5nCi0JICAtPmluaXRfc3RyZWFtKCkgc28gdGhhdCBjYXBzbmVnbyBzdGFydHMuCi0KLTIwMDQtMDktMTUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgSnVzdCBoYXJkY29kZSBmb3IgcmF3IGF1ZGlvIHRoZW4uIEFWSSBhdWRpbyBzdWNrcy4KLQotMjAwNC0wOS0xNSAgQXJ3ZWQgdi4gTWVya2F0eiAgPHYubWVya2F0ekBnbXgubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9hdWRpb19jYXBzKToKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGF1ZGlvc2lua190ZW1wbCksCi0JKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX2xpbmspOgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6ICh0dGFfY2FwcyksIChwbHVnaW5faW5pdCk6Ci0JVXNlIGF1ZGlvL3gtdHRhZmlsZSBmb3IgdHRhIGZpbGVzIGFuZCBhdWRpby94LXR0YSBmb3IgcmF3IHR0YSBmcmFtZXMuCi0KLTIwMDQtMDktMTUgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgVHJ5IHRvIGZpeCBhL3Ygc3luYyBpc3N1ZXMuCi0KLTIwMDQtMDktMTUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOiByZW1vdmUgTkFTTSBjaGVjaywgc2luY2Ugd2UgZG9uJ3QgdXNlIGl0LiAgVXBkYXRlCi0JZGlyYWMgY2hlY2sgdG8gMC40Ci0JKiBleHQvZGlyYWMvZ3N0ZGlyYWNkZWMuY2M6IHVwZGF0ZSB0byBjdXJyZW50IDAuNCBBUEkKLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9saW5rKToKLQlJbml0aWFsaXplZCB2YXJpYWJsZXMuCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfcXRkZW11eF9sb29wX2hlYWRlciksIChxdGRlbXV4X3BhcnNlKSwgKHF0ZGVtdXhfcGFyc2VfdHJhayksCi0JKGdzdF9xdGRlbXV4X2hhbmRsZV9lc2RzKSwgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6IEZpeCBzZWVraW5nLCBhZGQKLQlTVlEzIGZvcm1hdAotCi0yMDA0LTA5LTE1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCShnc3RfYXZpX2RlbXV4X2FkZF9zdHJlYW0pLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSk6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBGaXggZm9yIGNvbXByZXNzZWQgYXVkaW8gKG1wMykgdGltZXN0YW1wIGdlbmVyYXRpb24uIEhvdyBkaWQgdGhpcwotCSAgZXZlciB3b3JrPwotCi0yMDA0LTA5LTE1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ3N0X3BsYXlfYmluX2dldF9wcm9wZXJ0eSk6Ci0JICBWb2x1bWUgaXMgYSBkb3VibGUgbm90IGEgZmxvYXQuCi0KLTIwMDQtMDktMTUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlX2NsaWVudF9saW5rKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRzKSwgKGdzdF9tdWx0aWZkc2lua19jaGFuZ2Vfc3RhdGUpOgotCURvbid0IGNsb3NlIHRoZSBmZCBpbiBtdWx0aWZkc2luayBhcyB3ZSBkaWRuJ3Qgb3BlbiBpdCBpbiB0aGUKLQlmaXJzdCBwbGFjZS4gU29tZSBjbGVhbnVwcy4KLQotMjAwNC0wOS0xNSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSogZXh0L29nZy9nc3RvZ2dtdXguYzogKGdzdF9vZ2dfbXV4X25leHRfYnVmZmVyKSwKLQkoZ3N0X29nZ19tdXhfc2VuZF9oZWFkZXJzKSwgKGdzdF9vZ2dfbXV4X2xvb3ApOgotCUZpeCB0aGUgY2FzZSB3aGVyZSB0aGUgbXV4ZXIgd291bGQgbWFyayBwYWdlcyBhcyBkZWx0YQotCWZyYW1lcyB3aGVuIHRoZXkgYXJlIG5vdCAodm9yYmlzIG9ubHkgb2dnKS4KLQotMjAwNC0wOS0xNSAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChzdGF0ZV9jaGFuZ2UpLCAoc2V0dXBfc291cmNlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKToKLQkgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBmYWlsZWQgdG8gc2V0dXAgYSBjbGVhciBwaXBlbGluZS4gVGhpcwotCSAgd2lsbCB0aHJvdyBhbiBlcnJvciAob3IgRU9TLCBhbm90aGVyIG5pY2UgY2FzZSkgYW5kIGlmIHlvdSBkb24ndAotCSAgY2F0Y2ggdGhhdCwgdGhlIGFwcCB3aWxsIHdhaXQgZm9yIHRoZSBzaWduYWwgZm9yZXZlciAoYW5kIHRodXMKLQkgIGhhbmcpLgotCi0yMDA0LTA5LTE1ICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzaW5rLmM6Ci0JKGdzdF9nbm9tZXZmc3NpbmtfdXJpX2dldF9wcm90b2NvbHMpOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6Ci0JKGdzdF9nbm9tZXZmc3NyY191cmlfZ2V0X3Byb3RvY29scyk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnN1cmkuYzogKGdzdF9nbm9tZXZmc19nZXRfc3VwcG9ydGVkX3VyaXMpOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzdXJpLmg6Ci0JICBVc2UgX3VyaV9uZXcoKSBpbnN0ZWFkIG9mIF9vcGVuKCksIHNvIGl0IGRvZXNuJ3QgdGFrZSBhcyBsb25nIGFuZAotCSAgQ2hyaXN0b3BoZSdzIGNvbXB1dGVyIHdvbid0IGhhbmcuCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKHVua25vd25fdHlwZSk6Ci0JICBUaHJvdyBlcnJvciBvbiB1bmtub3duIG1lZGlhIHR5cGUsIHNvIGFwcHMgYWN0dWFsbHkgZGlzcGxheSBpdC4KLQotMjAwNC0wOS0xNCAgQnJpYW4gQ2FtZXJvbiAgPGJyaWFuLmNhbWVyb25Ac3VuLmNvbQotCi0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC1tLm06ICBDaGFuZ2VkIH4gdG8gJEVOVntIT01FfSB0byBhbGxvdwotCSAgdGhpcyBzY3JpcHQgdG8gd29yayBvbiBTb2xhcmlzIHNpbmNlIGJhc2ggc2hlbGwgaGFuZGxlcyBlY2hvCi0JICBkaWZmZXJlbmx5IHRoYW4gYmFzaC4KLQotMjAwNC0wOS0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOiAocXVldWVfb3ZlcnJ1biksIChub19tb3JlX3BhZHMpLAotCShzZXR1cF9zb3VyY2UpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9zZW5kX2V2ZW50KToKLQlTb21lIG1vcmUgd29yayBvbiBtYWtpbmcgc3VyZSBzZWVraW5nIHBhdXNlcyB0aGUgcGlwZWxpbmUgYW5kCi0JdGhhdCBjaGFuZ2luZyB0aGUgdXJpIGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nLgotCi0yMDA0LTA5LTE3ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3RjcC9nc3RmZHNldC5jOiAoZ3N0X2Zkc2V0X3dhaXQpOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X211bHRpZmRzaW5rX2Nsb3NlKToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOiAoZ3N0X3RjcHNlcnZlcnNpbmtfaW5pdF9zZW5kKSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfY2xvc2UpOgotCUJlIGEgYml0IG1vcmUgcGFyYW5vaWQgd2hlbiBmcmVlaW5nIG1lbW9yeS4KLQotMjAwNC0wOS0xMyAgUm9uYWxkIFMuIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksCi0JKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBEb24ndCBjcmFzaCBieSBkaXZpZGluZyBieSB6ZXJvIChzZWUgc2FtcGxlIG1vdmllIGluICMxMjY5MjIpLgotCi0yMDA0LTA5LTEzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgRG9uJ3QgdG91Y2ggbm9uLWV4aXN0aW5nIGRhdGEgKGZpeGVzIGNyYXNoIG9uIGZpbGUgaW4gIzE0MDE0NykuCi0KLTIwMDQtMDktMTMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5jOgotCShnc3RfcGxheV9iYXNlX2Jpbl9kaXNwb3NlKSwgKGdzdF9wbGF5X2Jhc2VfYmluX3NldF9wcm9wZXJ0eSk6Ci0JICBIYW5kbGUgZG91YmxlIGRpc3Bvc2FscywgYW5kIHByb3BlciBjaGFuZ2Ugb2YgVVJJcy4KLQotMjAwNC0wOS0xMyAgTWFydGluIEVpa2VybWFubiA8bWVpa2VyQHVwYi5kZT4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhcnNlLmM6Ci0JICBmaXggc3luY2hyb25pc3RhdGlvbiBmb3Igc3RyZWFtcyByZWNvcmRlZCBmcm9tIGRpZ2l0YWwgUENSCi0JICBmaXhlcyBidWcgIzExOTM3NgotCi0yMDA0LTA5LTEzICBSb25hbGQgUy4gQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZ25vbWV2ZnMvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnMuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzogKGdzdF9nbm9tZXZmc3NpbmtfZ2V0X3R5cGUpLAotCShnc3RfZ25vbWV2ZnNzaW5rX2Rpc3Bvc2UpLCAoZ3N0X2dub21ldmZzc2lua19pbml0KSwKLQkoZ3N0X2dub21ldmZzc2lua191cmlfZ2V0X3R5cGUpLAotCShnc3RfZ25vbWV2ZnNzaW5rX3VyaV9nZXRfcHJvdG9jb2xzKSwKLQkoZ3N0X2dub21ldmZzc2lua191cmlfZ2V0X3VyaSksIChnc3RfZ25vbWV2ZnNzaW5rX3VyaV9zZXRfdXJpKSwKLQkoZ3N0X2dub21ldmZzc2lua191cmlfaGFuZGxlcl9pbml0KSwKLQkoZ3N0X2dub21ldmZzc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X2dub21ldmZzc2lua19nZXRfcHJvcGVydHkpLAotCShnc3RfZ25vbWV2ZnNzaW5rX29wZW5fZmlsZSksIChnc3RfZ25vbWV2ZnNzaW5rX2Nsb3NlX2ZpbGUpOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6IChnc3RfZ25vbWV2ZnNzcmNfZ2V0X3R5cGUpLAotCShnc3RfZ25vbWV2ZnNzcmNfaW5pdCksIChnc3RfZ25vbWV2ZnNzcmNfZGlzcG9zZSksCi0JKGdzdF9nbm9tZXZmc3NyY191cmlfZ2V0X3R5cGUpLAotCShnc3RfZ25vbWV2ZnNzcmNfdXJpX2dldF9wcm90b2NvbHMpLCAoZ3N0X2dub21ldmZzc3JjX3VyaV9nZXRfdXJpKSwKLQkoZ3N0X2dub21ldmZzc3JjX3VyaV9zZXRfdXJpKSwgKGdzdF9nbm9tZXZmc3NyY191cmlfaGFuZGxlcl9pbml0KSwKLQkoZ3N0X2dub21ldmZzc3JjX3NldF9wcm9wZXJ0eSksIChnc3RfZ25vbWV2ZnNzcmNfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2dub21ldmZzc3JjX29wZW5fZmlsZSksIChnc3RfZ25vbWV2ZnNzcmNfY2xvc2VfZmlsZSk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnN1cmkuYzogKGdzdF9nbm9tZXZmc19nZXRfc3VwcG9ydGVkX3VyaXMpOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzdXJpLmg6Ci0JICBBZGQgVVJJIHN1cHBvcnQgdG8gR25vbWUtVkZTIHBsdWdpbnMuIFRyaWVzIHRvIGxvYWQgYSBmaXhlZCBsaXN0Ci0JICBvZiBmYWtlIFVSSXMgdG8gc2VlIHdoaWNoIHRoaXMgdmVyc2lvbiBvZiBHbm9tZS1WRlMgbGlrZXMsIGFuZAotCSAgdXNlcyB0aGF0IGZvciB0aGUgR3N0LVVSSSBpbnRlcmZhY2UuIE1ha2VzIHBsYXliaW4gc3VwcG9ydCBodHRwOi8vCi0JICBzdHJlYW1zLiBBbHNvIGZpeCB1cCBzb21lIHN0dXBpZCBiZWhhdmlvdXIgaW4gZ25vbWV2ZnNzcmMuCi0KLTIwMDQtMDktMTMgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FtaXhlci5jOiAoZ3N0X2Fsc2FfbWl4ZXJfdXBkYXRlKSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfZ2V0X3ZvbHVtZSksIChnc3RfYWxzYV9taXhlcl9zZXRfdm9sdW1lKSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfc2V0X211dGUpLCAoZ3N0X2Fsc2FfbWl4ZXJfc2V0X3JlY29yZCksCi0JKGdzdF9hbHNhX21peGVyX3NldF9vcHRpb24pLCAoZ3N0X2Fsc2FfbWl4ZXJfZ2V0X29wdGlvbik6Ci0JICBVcGRhdGUgbWl4ZXIgKHRvIHN5bmMgd2l0aCBvdGhlciBzZXNzaW9ucykgaWYgd2UgdHJ5IHRvIG9idGFpbgotCSAgYSBuZXcgdmFsdWUuIFRoaXMgbWFrZXMgYWxzYW1peGVyIHdvcmsgYWNjcm9zcyBhcHBsaWNhdGlvbnMuCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19nZXRfdGltZSk6Ci0JICBPbmx5IGNhbGwgc3luYyBmdW5jdGlvbnMgaWYgd2UncmUgcnVubmluZywgZWxzZSBhbHNhbGliIGFzc2VydHMuCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSk6Ci0JICBTb21ldGltZXMgZmFpbHMgdG8gY29tcGlsZS4gUG9zc2libHkgYSBnY2MgYnVnLgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdlbl92aWRlb19lbGVtZW50KSwKLQkoZ2VuX2F1ZGlvX2VsZW1lbnQpOgotCSAgQWRkIGEgcmVmZXJlbmNlIHRvIGFuIGFwcGxpY2F0aW9uLXByb3ZpZGVkIG9iamVjdCwgYmVjYXVzZSB3ZSBsb3NlCi0JICB0aGlzIHNhbWUgcmVmZXJlbmNlIGlmIHdlIGFkZCBpdCB0byB0aGUgYmluLiBJZiB3ZSBkb24ndCBkbyB0aGlzLAotCSAgd2UgY2FuIG9ubHkgdXNlIHRoaXMgb2JqZWN0IG9uY2UgYW5kIHRodXMgY3Jhc2ggaWYgd2UgZ28gZnJvbQotCSAgcmVhZHkgdG8gcGxheWluZywgYmFjayB0byByZWFkeSBhbmQgYmFjayB0byBwbGF5aW5nIGFnYWluLgotCSAgQWxzbyBhZGQgYW4gYXVkaW9zY2FsZSBlbGVtZW50IGJlY2F1c2Ugc2V2ZXJhbCBjaGVhcCBzb3VuZGNhcmRzIC0KLQkgIGxpa2UgbWluZSAtIGRvbid0IHN1cHBvcnQgYWxsIHNhbXBsZXJhdGVzLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpLAotCShnc3RfeGltYWdlc2lua194Y29udGV4dF9jbGVhciksIChnc3RfeGltYWdlc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgRml4IHdyb25nIG9yZGVyIG9yIFBBUiBjYWxscy4gTWFrZXMgYXV0b21hdGljYWxseSBvYnRhaW5lZCBQQVIKLQkgIGZyb20gdGhlIFggc2VydmVyIGF0dWFsbHkgYmVpbmcgdXNlZC4KLQotMjAwNC0wOS0xMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JRml4ZXM6ICMxNTE4NzksICMxNTE4ODEsICMxNTE4ODIsICMxNTE4ODMsICMxNTE4ODQsICMxNTE4ODYsCi0JIzE1MTg4NywgIzE1MjEwMiwgIzE1MjI0Ny4KLQkqIGV4YW1wbGVzL2luZGV4aW5nL2luZGV4bXBlZy5jOiA2NC1iaXQgd2FybmluZyBmaXhlcy4KLQkqIGV4YW1wbGVzL3NlZWtpbmcvY2RwYXJhbm9pYS5jOiBzYW1lCi0JKiBleGFtcGxlcy9zZWVraW5nL2NkcGxheWVyLmM6IHNhbWUKLQkqIGV4YW1wbGVzL3NlZWtpbmcvc2Vlay5jOiBzYW1lCi0JKiBleGFtcGxlcy9zZWVraW5nL3NwaWRlcl9zZWVrLmM6IHNhbWUKLQkqIGV4YW1wbGVzL3NlZWtpbmcvdm9yYmlzZmlsZS5jOiBzYW1lCi0JKiBleGFtcGxlcy9zdGF0cy9tcDJvZ2cuYzogc2FtZQotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X2VzZHNpbmtfZGlzcG9zZSk6IERpc3Bvc2Ugb2YgZWxlbWVudCBwcm9wZXJseS4KLQkqIGV4dC9pdm9yYmlzL3ZvcmJpc2ZpbGUuYzogKGdzdF9pdm9yYmlzZmlsZV9zZWVrKTogNjQtYml0IHdhcm5pbmcKLQlmaXhlcy4KLQkqIGV4dC9uYXMvbmFzc2luay5jOiAoZ3N0X25hc3NpbmtfY2xhc3NfaW5pdCksCi0JKGdzdF9uYXNzaW5rX2Rpc3Bvc2UpOiBEaXNwb3NlIG9mIGVsZW1lbnQgY29ycmVjdGx5LgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2hhaW4pOiBGaXggbGVhay4KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9uZXcpLCAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX2Rlc3Ryb3kpOgotCUZpeCA2NC1iaXQgd2FybmluZy4KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyksIChnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9kZXN0cm95KToKLQlGaXggNjQtYml0IHdhcm5pbmcuCi0KLTIwMDQtMDktMTIgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBjb25maWd1cmUuYWMgOiBjaGFuZ2Ugc3BlZXggZGV0ZWN0aW9uIGFzIDEuMS42IG5vdyB1c2VzCi0JICAucGMvcGtnLWNvbmZpZyBhbmQgdGhleSBjaGFuZ2VkIHRoZWlyIGhlYWRlcnMgbG9jYXRpb24uCi0KLTIwMDQtMDktMDkgIEFyd2VkIHYuIE1lcmthdHogIDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9yZXNldCksCi0JKGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQpLCAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpLAotCShnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgV3JpdGUgbXVsdGlwbGUgYmxvY2tzL2ZyYW1lcyBwZXIgY2x1c3Rlci4KLQkJV3JpdGUgbWV0YS1zZWVrIGluZm9ybWF0aW9uIChzZWVrIGhlYWRzKS4KLQotMjAwNC0wOS0wOSAgU2NvdHQgV2hlZWxlciA8d2hlZWxlckBrZGUub3JnPgotCi0JKiBnc3QvZ3N0cGxheWJpbi5jOiAoZ3N0X3BsYXlfYmluX2NsYXNzX2luaXQpLCAoZ3N0X3BsYXlfYmluX2luaXQpLAotCShnc3RfcGxheV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X2Jpbl9nZXRfcHJvcGVydHkpLAotCShnZW5fYXVkaW9fZWxlbWVudCksIChnZW5fYXVkaW9fZWxlbWVudCk6Ci0JICBBZGQgYSB2b2x1bWUgZWxlbWVudCAvIHByb3BlcnR5IHRvIHRoZSBwaXBlbGluZS4KLQotMjAwNC0wOS0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX2JsZW5kX2J1ZmZlcnMpOgotCUNvcHkgdGltZXN0YW1wcyBmcm9tIHRoZSBtYXN0ZXIgcGFkIHRvIHRoZSBvdXRwdXQgYnVmZmVycy4KLQotMjAwNC0wOS0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmM6Ci0JICB0aHJvdyBlcnJvcnMgd2hlbiBhcHBsaWNhYmxlCi0KLTIwMDQtMDktMDEgIEFyd2VkIHYuIE1lcmthdHogIDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtaWRzLmg6Ci0JKiBnc3QvbWF0cm9za2EvZWJtbC1yZWFkLmM6IChnc3RfZWJtbF9yZWFkX2RhdGUpOgotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzogKGdzdF9lYm1sX3dyaXRlX2RhdGUpOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9maW5pc2gpOgotCSAgYXV0b21hdGljYWxseSBjb252ZXJ0IHVuaXggdGltZSA8LT4gZWJtbCB0aW1lIHdoZW4gcmVhZGluZy93cml0aW5nCi0JICBhIGRhdGUsIHVzZSBnc3RfZWJtbF93cml0ZV91aW50IHRvIHdyaXRlIENVRVRJTUUsCi0JICBub3QgZ3N0X2VibWxfd3JpdGVfZGF0ZS4KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1pZHMuaDoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfY3JlYXRlX3VpZCksCi0JKGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQpLCAoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfbGluayksCi0JKGdzdF9tYXRyb3NrYV9tdXhfdHJhY2tfaGVhZGVyKSwgKGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQpLAotCShnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEpOgotCSAgV3JpdGUgdHJhY2sgYW5kIHNlZ21lbnQgVUlEcywgd3JpdGUgbXV4aW5nIGRhdGUsIHdyaXRlCi0JICBUUkFDS0RFRkFVTFREVVJBVElPTiBmb3IgVFRBIGF1ZGlvLCB3cml0ZSBCTE9DS0RVUkFUSU9OIGlmIGtub3duLgotCSAgQ3JlYXRlIGN1ZXMgZm9yIGF1ZGlvIG9ubHkgZmlsZXMuCi0KLTIwMDQtMDgtMzEgIFJvbmFsZCBTLiBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FtaXhlci5jOiAoZ3N0X2Fsc2FfbWl4ZXJfYnVpbGRfbGlzdCk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJ0cmFjay5jOiAoZ3N0X2Fsc2FfbWl4ZXJfdHJhY2tfbmV3KToKLQkgIFJlLWNvbW1pdCBBTFNBIHN3aXRjaGVzLgotCSogZ3N0L2FkZGVyL2dzdGFkZGVyLmM6IChnc3RfYWRkZXJfbG9vcCk6Ci0JICA2NC1iaXQgZml4ICgjMTUxNDE2KS4KLQkqIGdzdC9kZWJ1Zy9wcm9ncmVzc3JlcG9ydC5jOiAoZ3N0X3Byb2dyZXNzcmVwb3J0X3JlcG9ydCk6Ci0JICA2NC1iaXQgZml4ICgjMTUxNDE5KS4KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHMpOgotCSAgNjQtYml0IGZpeCAoIzE1MTQyMCkuCi0JKiBnc3QvcGxheWJhY2svdGVzdDMuYzogKHVwZGF0ZV9zY2FsZSk6Ci0JICA2NC1iaXQgZml4ICgjMTUxNDIxKS4KLQotMjAwNC0wOC0zMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYnVtcCBuYW5vIHRvIGN2cwotCi09PT0gcmVsZWFzZSAwLjguNCA9PT0KLQotMjAwNC0wOC0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOiByZWxlYXNpbmcgMC44LjQsICJBbGlhcyIKLQotMjAwNC0wOC0zMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L3RoZW9yYS9NYWtlZmlsZS5hbToKLQkgIGZpeCBtYWtlZmlsZS4gIEZpeGVzICMxNTE0NjIuCi0KLTIwMDQtMDgtMzAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IChnc3RfZmRzZXRfZnJlZSksIChnc3RfZmRzZXRfd2FpdCk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfYWRkKSwKLQkoZ3N0X211bHRpZmRzaW5rX3JlbW92ZV9jbGllbnRfbGluayksCi0JKGdzdF9tdWx0aWZkc2lua19jbGllbnRfcXVldWVfYnVmZmVyKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzaW5rLmM6IChnc3RfdGNwY2xpZW50c2lua19pbml0X3NlbmQpOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfaW5pdF9yZWNlaXZlKToKLQlGaXggc29tZSBtZW1vcnkgbGVha3MuCi0KLTIwMDQtMDgtMzAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlQYXRjaCBieTogRGF2aWQgU2NobGVlZgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBzeXMvTWFrZWZpbGUuYW06Ci0JICByZW5hbWUgb3VyIGRldGVjdGlvbiBtYWNybyBmb3IgVjRMMi4gIEZpeGVzICMxNTEyMzYuCi0KLTIwMDQtMDgtMzAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlQYXRjaCBieTogRGF2aWQgU2NobGVlZgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBjaGVjayB0byBkZWZpbmUgTEFNRVBSRVNFVC4gIEZpeGVzICMxNTEyMzIuCi0KLTIwMDQtMDgtMjcgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogc3lzL2dsc2luay9nbGltYWdlc2luay5jOiAoZ3N0X2dsaW1hZ2VzaW5rX3hpbWFnZV9wdXQpLAotCShnc3RfZ2xpbWFnZXNpbmtfeHdpbmRvd19uZXcpLCAoZ3N0X2dsaW1hZ2VzaW5rX3hjb250ZXh0X2dldCksCi0JKGdzdF9nbGltYWdlc2lua19maXhhdGUpOiAgTW92ZSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8KLQltYWtlIGdjYy0yLjk1IGhhcHB5LgotCi0yMDA0LTA4LTI3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBidW1wIG5hbm8gZm9yIHByZXJlbGVhc2UKLQotMjAwNC0wOC0yNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMvc3VuYXVkaW8vTWFrZWZpbGUuYW06IEFkZCBzdW5hdWRpb3NyYyBwYXRjaCBmcm9tIEJhbGEKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc3JjLmg6Ci0KLTIwMDQtMDgtMjcgQXJ3ZWQgdi4gTWVya2F0eiA8di5tZXJrYXR6QGdteC5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3BlZWRfaWQpLCAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2lkKSwKLQloYW5kbGUgRU9TIGNvcnJlY3RseQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF92aWRlb19wYWRfbGluayk6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0JYWRkZWQgQklUTUFQSU5GT0hFQURFUiBzdHJ1Y3R1cmUsIG11eCB2aWRlby94LWRpdnggYW5kIHZpZGVvL3gteHZpZCBpbgotCVZGVyBjb21wYXRpYmlsaXR5IG1vZGUKLQotMjAwNC0wOC0yNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCXBhdGNoIGJ5OiBaYWhlZXIgQWJiYXMgTWVyYWxpCi0KLQkqIGV4dC9vZ2cvZ3N0b2dnbXV4LmM6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jOgotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuaDoKLQkgIGhhbmRsZSBORVdNRURJQQotCi0yMDA0LTA4LTI2IEFyd2VkIHYuIE1lcmthdHogPHYubWVya2F0ekBnbXgubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jOiAoZ3N0X2VibWxfd3JpdGVfZmxvYXQpLAotCWZpeCBieXRlIG9yZGVyIHJldmVyc2lvbiBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzLgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoYXVkaW9zaW5rX3RlbXBsKSwKLQkoZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfbGluayk6Ci0JYWRkIFRUQSBjb2RlYyB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY29kZWNzLgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9pbml0KSwKLQkoZ3N0X21hdHJvc2thX211eF9zdGFydCksIChnc3RfbWF0cm9za2FfbXV4X2ZpbmlzaCksCi0JKGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfZGF0YSk6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4Lmg6Ci0Jd3JpdGUgc2VnbWVudCBkdXJhdGlvbiBjb3JyZWN0bHksIHdyaXRlIG11eGluZyBhcHAgc3RyaW5nLCBmaXhlcyBidWdzCi0JIzE0MDg5NyBhbmQgIzE0MDg5OC4KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfbG9vcCksCi0Jd2FpdCBmb3IgYWxsIHBhZHMgdG8gYmUgbmVnb3RpYXRlZCBiZWZvcmUgc3RhcnRpbmcgdG8gbXV4LgotCi0yMDA0LTA4LTI2ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGV4dC9sYW1lL2dzdGxhbWUuYzogKGdzdF9sYW1lX2luaXQpLCAoZ3N0X2xhbWVfY2hhaW4pOgotCSogZXh0L2xhbWUvZ3N0bGFtZS5oOgotCUFkZGVkIG5ldyBtZWRpYSBzdXBwb3J0IHRvIGxhbWUKLQotMjAwNC0wOC0yNSBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cCksCi0Jc2VuZCB2b3JiaXMgaGVhZGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyZWFtLCBmaXhlcyBidWcgIzE0MTU1NC4KLQlJbnRlcnByZXQgQkxPQ0tEVVJBVElPTiBhbmQgc2V0IGJ1ZmZlciBkdXJhdGlvbiBhY2NvcmRpbmdseSwgZml4ZXMKLQlidWcgIzE0ODk1MC4KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMpLAotCShnc3RfbWF0cm9za2FfZGVtdXhfcGx1Z2luX2luaXQpOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCWVuYWJsZSBkZW11eGluZyBvZiBUVEEgYXVkaW8gc3RyZWFtcywgZml4ZXMgYnVnICMxNDg5NTEuCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKHR0YV90eXBlX2ZpbmQpLCAocGx1Z2luX2luaXQpLAotCWVuYWJsZSB0eXBlZmluZGluZyBmb3IgVFRBIGF1ZGlvIGZpbGVzLCBmaXhlcyBidWcgIzE0ODcxMS4KLQkqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzogKGdzdF94dmlkZGVjX2NoYWluKSwKLQlzZXQgWFZJRF9MT1dERUxBWSBmbGFnIGZvciBkZWNvZGluZyBzbyB4dmlkIGFsd2F5cyByZXR1cm5zIGFuIGltYWdlLAotCWZpeGVzIHBsYXliYWNrIG9mIHBhY2tlZCBiaXRzdHJlYW0gYW5kIHh2aWQgd2l0aCBiZnJhbWVzLCBidWcgIzEzNTQwNy4KLQotMjAwNC0wOC0yNCAgU2ViYXN0aWVuIENvdGUgIDxzYzVAaGVybWVzLnVzaGVyYi5jYT4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9wZWVrX2hlYWQpLAotCShnc3RfcmlmZl9yZWFkX2VsZW1lbnRfZGF0YSksIChnc3RfcmlmZl9yZWFkX3NlZWspLAotCShnc3RfcmlmZl9yZWFkX3NraXApOiBmaXggaW5maW5pdGUgbG9vcCBpbiB3YXZwYXJzZSwgZml4ZXMgYnVnCi0JIzE0NDYxNiwgcGF0Y2ggcmV2aWV3ZWQgYnkgUm9uYWxkIGFuZCBjb21taXR0ZWQgYnkgQ2hyaXN0b3BoZSBGZXJnZWF1Ci0JPHRldWZAZ25vbWUub3JnPgotCi0yMDA0LTA4LTIzIElhaW4gPGlhaW5nbm9tZUBnbWFpbC5jb20+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmMgKGdzdF9tYWRfaWQzX3RvX3RhZ19saXN0KTogU3BlY2lhbCBjYXNlIENPTU0KLQl0YWdzLiBUaGV5IGFwcGVhciB0byBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IHRvIG5vcm1hbC4KLQkodGFnX2xpc3RfdG9faWQzX3RhZ19mb3JlYWNoKTogRGl0dG8uCi0KLTIwMDQtMDgtMjIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9zZW5kX2hlYWRlcnMpLCAoZ3N0X29nZ19tdXhfbG9vcCk6Ci0JTWFrZSBzdXJlIHdlIG5ldmVyIHNlbmQgLTEgZ3JhbnVsZXBvcy4KLQotMjAwNC0wOC0yMCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnbXV4LmM6IChnc3Rfb2dnX211eF9uZXh0X2J1ZmZlciksCi0JKGdzdF9vZ2dfbXV4X2xvb3ApOgotCUkgd2lsbCBhY2NlcHQgYml0Y2hzbGFwcGluZ3Mgd2l0aCBub24gc2hhcnAgb2JqZWN0cy4KLQotMjAwNC0wOC0yMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JQ2xlYW4gdXAgdGhlIHRlc3QgZm9yIGxhbWUgcHJlc2V0cwotCi0yMDA0LTA4LTE5ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9sYW1lL01ha2VmaWxlLmFtOgotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfY2xhc3NfaW5pdCksCi0JKGdzdF9sYW1lX3NldF9wcm9wZXJ0eSksIChnc3RfbGFtZV9nZXRfcHJvcGVydHkpLCAoZ3N0X2xhbWVfc2V0dXApOgotCU9ubHkgZW5hYmxlIGxhbWUgcHJlc2V0cyBpZiB2ZXJzaW9uIG9mIGxhbWUgaGFzIHByZXNldHMgaW4gQVBJCi0KLTIwMDQtMDgtMTkgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2luaXQpLCAoZ3N0X3VkcHNyY19nZXQpOgotCSogZ3N0L3VkcC9nc3R1ZHBzcmMuaDoKLQkgIERvbid0IGNhbGwgZ3N0X3BhZF9wdXNoIGluIGEgZ2V0IGZ1bmN0aW9uLiBGaXhlcyAjMTUwNDQ5Ci0KLTIwMDQtMDgtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IChnc3RfZmRzZXRfZnJlZSksIChnc3RfZmRzZXRfc2V0X21vZGUpLAotCShnc3RfZmRzZXRfZ2V0X21vZGUpLCAoZ3N0X2Zkc2V0X2FkZF9mZCksIChnc3RfZmRzZXRfcmVtb3ZlX2ZkKSwKLQkoZ3N0X2Zkc2V0X2ZkX2N0bF93cml0ZSksIChnc3RfZmRzZXRfZmRfY3RsX3JlYWQpLAotCShnc3RfZmRzZXRfZmRfaGFzX2Nsb3NlZCksIChnc3RfZmRzZXRfZmRfaGFzX2Vycm9yKSwKLQkoZ3N0X2Zkc2V0X2ZkX2Nhbl9yZWFkKSwgKGdzdF9mZHNldF9mZF9jYW5fd3JpdGUpLAotCShnc3RfZmRzZXRfd2FpdCk6Ci0JKiBnc3QvdGNwL2dzdGZkc2V0Lmg6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfYWRkKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmg6Ci0JU29tZSBleHRyYSBjaGVja3MgaW4gZ3N0ZmRzZXQuCi0JT25seSB1c2Ugc2VuZCgpIHdoZW4gdGhlIGZkIGlzIGEgc29ja2V0LiBEb24ndCB0cnkgdG8KLQlyZWFkIGZyb20gd3JpdGUgb25seSBmZHMuCi0KLTIwMDQtMDgtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IChnc3RfZmRzZXRfYWRkX2ZkKSwgKGdzdF9mZHNldF9yZW1vdmVfZmQpLAotCShnc3RfZmRzZXRfZmRfY3RsX3dyaXRlKSwgKGdzdF9mZHNldF9mZF9jdGxfcmVhZCksCi0JKGdzdF9mZHNldF9mZF9oYXNfY2xvc2VkKSwgKGdzdF9mZHNldF9mZF9oYXNfZXJyb3IpLAotCShnc3RfZmRzZXRfZmRfY2FuX3JlYWQpLCAoZ3N0X2Zkc2V0X2ZkX2Nhbl93cml0ZSksCi0JKGdzdF9mZHNldF93YWl0KToKLQlBZGQgbW9yZSBsb2NraW5nIGFuZCBib3VuZHMgY2hlY2tpbmcuCi0KLTIwMDQtMDgtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IChlbnN1cmVfc2l6ZSksIChnc3RfZmRzZXRfd2FpdCk6Ci0JUmVhbGxvYyB0ZXN0IGZkc2V0IGluIHRoZSBsb2NrIGFuZCByaWdodCBiZWZvcmUgc3RhcnRpbmcKLQl0aGUgcG9sbCBjYWxsLiBCdW1wIHRoZSBsaW1pdCB0byA0MDk2LgotCi0yMDA0LTA4LTE3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHN5cy9zdW5hdWRpby9NYWtlZmlsZS5hbToKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOiBGaXggY2FwcyB0byBoYW5kbGUgZnVsbCByYW5nZQotCW9mIHJhdGVzIGFuZCBjaGFubmVscy4gIE1ha2UgZGVidWdnaW5nIGxlc3Mgb2Jub3hpb3VzLgotCi0JUGF0Y2ggZnJvbSBCYWxhbXVyYWxpIFZpc3dhbmF0aGFuIGltcGxlbWVudGluZyBhIG1peGVyIGZvcgotCVN1biBhdWRpby4gIChidWcgIzE0NDA5MSk6Ci0JKiBzeXMvc3VuYXVkaW8vZ3N0c3VuZWxlbWVudC5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmVsZW1lbnQuaDoKLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5taXhlci5jOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bm1peGVyLmg6Ci0KLTIwMDQtMDgtMTcgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOgotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5oOgotCW1hZGUgYXVkaW9zY2FsZSByZXNhbXBsZSBmcm9tIGFueSBzYW1wbGUgcmF0ZSB0byBhbnkgc2FtcGxlIHJhdGUKLQotMjAwNC0wOC0xNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuYzoKLQkgIGVycm9yIG91dCBvbiB1bnN1cHBvcnRlZCB0eXBlcwotCi0yMDA0LTA4LTE3ICBJYWluIDxpYWluZ25vbWVAZ21haWwuY29tPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmMgKGdzdF9mbGFjZW5jX3VwZGF0ZV9xdWFsaXR5KTogT25seSBzZXQgdGhlCi0JbWlkX3NpZGUgYW5kIGxvb3NlX21pZF9zaWRlIHByb3BlcnRpZXMgaWYgaXRzIGEgc3RlcmVvIHN0cmVhbS4KLQotMjAwNC0wOC0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6IChnc3RfdGhlb3JhX2RlY19jbGFzc19pbml0KSwKLQkodGhlb3JhX2dldF9mb3JtYXRzKSwgKHRoZW9yYV9kZWNfc3JjX2NvbnZlcnQpLAotCSh0aGVvcmFfZGVjX3NpbmtfY29udmVydCksICh0aGVvcmFfZGVjX3NyY19xdWVyeSksCi0JKHRoZW9yYV9kZWNfc3JjX2V2ZW50KSwgKHRoZW9yYV9kZWNfZXZlbnQpLCAodGhlb3JhX2RlY19jaGFpbik6Ci0JQWRkIGEgZGVidWcgbGluZS4KLQotMjAwNC0wOC0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfaXRlcmF0ZSksCi0JKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSogZXh0L29nZy9nc3RvZ2dtdXguYzogKGdzdF9vZ2dfbXV4X2luaXQpLAotCShnc3Rfb2dnX211eF9yZXF1ZXN0X25ld19wYWQpLCAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9idWZmZXJfZnJvbV9wYWdlKSwgKGdzdF9vZ2dfbXV4X3B1c2hfcGFnZSksCi0JKGdzdF9vZ2dfbXV4X3NlbmRfaGVhZGVycyksIChnc3Rfb2dnX211eF9sb29wKToKLQlNYXJrIGRlbHRhIHVuaXRzIGluIHRoZSBtdXhlci4KLQlUcnkgdG8gZGVjb2RlIHRoZSBwYWNrZXQgYWZ0ZXIgYW4gb3V0LW9mLXN5bmMgZXJyb3IgZnJvbQotCWxpYm9nZy4KLQotMjAwNC0wOC0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzogKGdzdF9tdWx0aWZkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpZmRzaW5rX2luaXQpLCAoZ3N0X211bHRpZmRzaW5rX2FkZCksCi0JKGdzdF9tdWx0aWZkc2lua19jbGllbnRfcXVldWVfYnVmZmVyKSwKLQkoZ3N0X211bHRpZmRzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfbXVsdGlmZHNpbmtfZ2V0X3Byb3BlcnR5KToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQlBZGRlZCBvcHRpb24gdG8gc2VuZCBhIGtleWZyYW1lIHRvIGNsaWVudHMgYXMgdGhlIGZpcnN0IGJ1ZmZlci4KLQlNYWtlIHRpbWVvdXQgcHJvcGVydHkgd3JpdGFibGUuCi0KLTIwMDQtMDgtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlwYXRjaCBieTogV2ltIFRheW1hbnMKLQotCSogZ3N0L3RjcC9nc3RmZHNldC5jOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOgotCSAgZml4IGluZGV4IGNvbXBhcmlzb24sIHNob3VsZCBpbmNsdWRlIDAKLQotMjAwNC0wOC0xNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvZ3N0ZmRzZXQuYzogKGVuc3VyZV9zaXplKSwgKGdzdF9mZHNldF9uZXcpLAotCShnc3RfZmRzZXRfYWRkX2ZkKSwgKGdzdF9mZHNldF9yZW1vdmVfZmQpLAotCShnc3RfZmRzZXRfZmRfaGFzX2Nsb3NlZCksIChnc3RfZmRzZXRfZmRfaGFzX2Vycm9yKSwKLQkoZ3N0X2Zkc2V0X2ZkX2Nhbl9yZWFkKSwgKGdzdF9mZHNldF9mZF9jYW5fd3JpdGUpLAotCShnc3RfZmRzZXRfd2FpdCk6Ci0JICBjb3B5IHdoZW4gcmVhbGxvY2luZyBmb3IgcG9sbCBzbyB0aGUgc2VsZWN0IGFyZ3VtZW50cyBkb24ndCBnZXQKLQkgIGNoYW5nZWQgZHVyaW5nIHRoZSBjYWxsCi0KLTIwMDQtMDgtMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAoZ3N0X2JvcmRlcl9tb2RlX2dldF90eXBlKSwKLQkoZ3N0X3RoZW9yYV9lbmNfY2xhc3NfaW5pdCksICh0aGVvcmFfZW5jX3NpbmtfbGluayksCi0JKHRoZW9yYV9idWZmZXJfZnJvbV9wYWNrZXQpLCAodGhlb3JhX2VuY19jaGFpbik6Ci0JRml4IGJ1ZyB3aGVyZSBidWZmZXJzIHdlcmUgbm90IG1hcmtlZCBhcyBrZXlmcmFtZXMKLQljb3JyZWN0bHkuCi0KLTIwMDQtMDgtMTUgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfdmJybW9kZV9nZXRfdHlwZSksCi0JKGdzdF9sYW1lX3ByZXNldF9nZXRfdHlwZSksIChnc3RfbGFtZV9jbGFzc19pbml0KToKLQlkZXNjcmliZSB0aGUgZW51bSB2YWx1ZXMgZm9yIHZiciBtb2RlIGFuZCBwcmVzZXRzIG1vcmUgdmVyYm9zZWx5Ci0KLTIwMDQtMDgtMTMgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfbW9kZV9nZXRfdHlwZSksCi0JKGdzdF9sYW1lX3F1YWxpdHlfZ2V0X3R5cGUpLCAoZ3N0X2xhbWVfcGFkZGluZ19nZXRfdHlwZSksCi0JKGdzdF9sYW1lX3ByZXNldF9nZXRfdHlwZSksIChnc3RfbGFtZV9jbGFzc19pbml0KSwgKGdzdF9sYW1lX2luaXQpLAotCShnc3RfbGFtZV9zZXRfcHJvcGVydHkpLCAoZ3N0X2xhbWVfZ2V0X3Byb3BlcnR5KSwgKGdzdF9sYW1lX3NldHVwKToKLQkqIGV4dC9sYW1lL2dzdGxhbWUuaDoKLQlhZGQgcHJlc2V0IHByb3BlcnR5IHRvIGxhbWUgc28gaXQgY2FuIHVzZSBsYW1lIHByZXNldHMKLQotMjAwNC0wOC0xMyAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBleHQvbGFtZS9nc3RsYW1lLmM6IChnc3RfbGFtZV9nZXRfcHJvcGVydHkpOgotCXdob29wcyBmb3Jnb3QgYnJlYWssIHRoYW5rcyB0ZXVmCi0KLTIwMDQtMDgtMTMgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfdmJybW9kZV9nZXRfdHlwZSksCi0JKGdzdF9sYW1lX2NsYXNzX2luaXQpLCAoZ3N0X2xhbWVfc3JjX2dldGNhcHMpLAotCShnc3RfbGFtZV9zaW5rX2xpbmspLCAoZ3N0X2xhbWVfaW5pdCksIChnc3RfbGFtZV9zZXRfcHJvcGVydHkpLAotCShnc3RfbGFtZV9nZXRfcHJvcGVydHkpLCAoZ3N0X2xhbWVfc2V0dXApOgotCSogZXh0L2xhbWUvZ3N0bGFtZS5oOgotCWZpeCBsYW1lJ3MgYnJva2VuIHZiciBzdHVmZiwgYWxsb3cgaXQgdG8gcmVzYW1wbGUgaWYgbmVlZCBiZSwgYW5kIGFsc28KLQltYWtlIHhpbmcgaGVhZGVyIG9wdGlvbmFsCi0KLTIwMDQtMDgtMTIgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfc3JjX2dldGNhcHMpLCAoZ3N0X2xhbWVfaW5pdCk6Ci0JYWRkZWQgZ2V0Y2FwcyBmdW5jdGlvbiBzbyBzYW1wbGVyYXRlIGRvZXNudCBnZXQgZml4YXRlZCB0byBzaWxseSB2YWx1ZXMKLQotMjAwNC0wOC0xMiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBleHQvbGFtZS9nc3RsYW1lLmM6IChnc3RfbGFtZV9zcmNfbGluayk6Ci0JcmV2ZXJ0IHByZXZpb3VzIGZpeAotCi0yMDA0LTA4LTEyICBKb2hhbiBEYWhsaW4gIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIHN5cy92NGwvZ3N0djRsZWxlbWVudC5jIChnc3RfdjRsX2lmYWNlX3N1cHBvcnRlZCk6IFJlbW92ZSBib2d1cwotCWNoZWNrcy4gRG9lc24ndCBtYXR0ZXIgd2hhdCBzdGF0ZSB3ZSBhcmUgaW4uIEludGVyZmFjZXMgYXJlIGEKLQljb21waWxlIHRpbWUgdGhpbmcsIG5vdCBydW50aW1lLiBJdCBhbHNvIGJyb2tlIHRoZSBweXRob24gYmluZGluZ3MuCi0KLTIwMDQtMDgtMTIgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfc3JjX2xpbmspOgotCW1hZGUgc291cmNlIHBhZCBsaW5rIGZ1bmN0aW9uIGNoZWNrIGlmIHNpbmtwYWQgaXMgb2suLmZpeGVzIHRoZSBwcm9ibGVtCi0Jd2hlcmUgY29yZSBmaXhhdGVzIHRoZSBvdXRwdXQgcmF0ZSBvZiBsYW1lIHN0dXBpZGx5Ci0KLTIwMDQtMDgtMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19zcmNfbGluayksIChnc3RfdjRsc3JjX2ZpeGF0ZSk6Ci0JKiBzeXMvdjRsL3Y0bF9jYWxscy5jOgotCSogc3lzL3Y0bC92NGxzcmNfY2FsbHMuYzogKGdzdF92NGxzcmNfc2V0X2NhcHR1cmUpOgotCSAgZml4IGZpeGF0ZSBmdW5jdGlvbiB0byBoYW5kbGUgbm9uc2ltcGxlIGNhcHMuCi0JICByZW1vdmUgYm9ndXMgY2hlY2sgaW4gX2xpbmsKLQkgIGNsZWFudXBzCi0KLTIwMDQtMDgtMTIgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfY2xhc3NfaW5pdCksIChnc3RfbGFtZV9pbml0KToKLQlzZXQgZGVmYXVsdCBjb21wcmVzc2lvbiByYXRpbyBwYXJhbWV0ZXIgdG8gMC4wIHNvIGJpdHJhdGUgcGFyYW1ldGVyCi0Jd29ya3MgOikKLQotMjAwNC0wOC0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IEZpeCBjb21waWxlIHByb2JsZW0gb24gT1MvWC4KLQotMjAwNC0wOC0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvbXBlZzFzeXMvZ3N0bXBlZzFzeXN0ZW1lbmNvZGUuYzogT29wcywgdGhpcyB3YXMgY29ycmVjdAotCWJlZm9yZS4KLQotMjAwNC0wOC0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW9zaW5rLmg6IENoYW5nZSBjb3B5cmlnaHQgYmxvY2sgdG8gTEdQTC4KLQotMjAwNC0wOC0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvcGFuZ28vZ3N0dGV4dG92ZXJsYXkuYzogQWRkIGNvcHlyaWdodCBibG9jayBhbmQgZml4IHBsdWdpbgotCSAgbGljZW5zZSBmaWVsZAotCSogZ3N0LWxpYnMvZ3N0L2lkY3QvTWFrZWZpbGUuYW06IFJlbW92ZSBtbXgvc3NlIGNvZGUKLQkqIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3NpbmsuYzogQ2hhbmdlIGNvcHlyaWdodCBibG9jayB0bwotCSAgTEdQTC4KLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzogRml4IHBsdWdpbiBsaWNlbnNlIGZpZWxkLgotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogRml4IHBsdWdpbiBsaWNlbnNlIGZpZWxkLgotCSogZ3N0L21wZWcxc3lzL2dzdG1wZWcxc3lzdGVtZW5jb2RlLmM6IEZpeCBwbHVnaW4gbGljZW5zZSBmaWVsZC4KLQkqIGdzdC9ydHAvZ3N0cnRwLmM6IEZpeCBwbHVnaW4gbGljZW5zZSBmaWVsZC4KLQotMjAwNC0wOC0xMSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdGNwL2dzdGZkc2V0LmM6IChnc3RfZmRzZXRfbW9kZV9nZXRfdHlwZSksIChuZWFyZXN0X3BvdyksCi0JKGVuc3VyZV9zaXplKSwgKGdzdF9mZHNldF9uZXcpLCAoZ3N0X2Zkc2V0X2ZyZWUpLAotCShnc3RfZmRzZXRfc2V0X21vZGUpLCAoZ3N0X2Zkc2V0X2dldF9tb2RlKSwgKGdzdF9mZHNldF9hZGRfZmQpLAotCShnc3RfZmRzZXRfcmVtb3ZlX2ZkKSwgKGdzdF9mZHNldF9mZF9jdGxfd3JpdGUpLAotCShnc3RfZmRzZXRfZmRfY3RsX3JlYWQpLCAoZ3N0X2Zkc2V0X2ZkX2hhc19jbG9zZWQpLAotCShnc3RfZmRzZXRfZmRfaGFzX2Vycm9yKSwgKGdzdF9mZHNldF9mZF9jYW5fcmVhZCksCi0JKGdzdF9mZHNldF9mZF9jYW5fd3JpdGUpLCAoZ3N0X2Zkc2V0X3dhaXQpOgotCSogZ3N0L3RjcC9nc3RmZHNldC5oOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X3VuaXRfdHlwZV9nZXRfdHlwZSksCi0JKGdzdF9tdWx0aWZkc2lua19jbGFzc19pbml0KSwgKGdzdF9tdWx0aWZkc2lua19pbml0KSwKLQkoZ3N0X211bHRpZmRzaW5rX2FkZCksIChnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsZWFyKSwgKGdzdF9tdWx0aWZkc2lua19nZXRfc3RhdHMpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlX2NsaWVudF9saW5rKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfcmVhZCksCi0JKGdzdF9tdWx0aWZkc2lua19jbGllbnRfcXVldWVfZGF0YSksCi0JKGdzdF9tdWx0aWZkc2lua19jbGllbnRfcXVldWVfY2FwcyksCi0JKGdzdF9tdWx0aWZkc2lua19jbGllbnRfcXVldWVfYnVmZmVyKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVjb3Zlcl9jbGllbnQpLCAoZ3N0X211bHRpZmRzaW5rX3F1ZXVlX2J1ZmZlciksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50cyksIChnc3RfbXVsdGlmZHNpbmtfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X211bHRpZmRzaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfbXVsdGlmZHNpbmtfaW5pdF9zZW5kKSwKLQkoZ3N0X211bHRpZmRzaW5rX2Nsb3NlKToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOiAoZ3N0X3RjcHNlcnZlcnNpbmtfY2xhc3NfaW5pdCksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2luaXQpLCAoZ3N0X3RjcHNlcnZlcnNpbmtfaGFuZGxlX3NlcnZlcl9yZWFkKSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfaGFuZGxlX3dhaXQpLCAoZ3N0X3RjcHNlcnZlcnNpbmtfaW5pdF9zZW5kKSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfY2xvc2UpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmg6Ci0JQWJzdHJhY3RlZCBhd2F5IHRoZSBzZWxlY3QgY2FsbCwgaW1wbGVtZW50ZWQgcG9sbCAoeWVzIHdlIHJhbiBpbnRvCi0JdGhlIDEwMjQgbGltaXQgaW4gcHJvZHVjdGlvbikuCi0KLTIwMDQtMDgtMTEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC90Y3AvZ3N0dGNwLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcHBsdWdpbi5jOgotCSAgaW1wcm92ZSBkZWJ1Z2dnaW5nLCByZW1vdmUgYXNzZXJ0Ci0KLTIwMDQtMDgtMTAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfdW5pdF90eXBlX2dldF90eXBlKSwKLQkoZ3N0X2NsaWVudF9zdGF0dXNfZ2V0X3R5cGUpLCAoZ3N0X211bHRpZmRzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGlmZHNpbmtfaW5pdCksIChnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlX2NsaWVudF9saW5rKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfcmVhZCksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKSwKLQkoZ3N0X211bHRpZmRzaW5rX3JlY292ZXJfY2xpZW50KSwgKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudHMpLCAoZ3N0X211bHRpZmRzaW5rX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9tdWx0aWZkc2lua19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5oOgotCSogZ3N0L3RjcC9nc3R0Y3AtbWFyc2hhbC5saXN0OgotCVN0YXJ0aW5nIHRvIHByZXBhcmUgZm9yIHNwZWNpZnlpbmcgYnVmZmVyIHRpbWUgaW4gb3RoZXIgdW5pdHMKLQl0aGFuIGJ1ZmZlcnMuIEV4cG9zZSByZW1vdmUgcmVhc29uIGluIHNpZ25hbC4KLQotMjAwNC0wOC0xMCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzogKGdzdF9tdWx0aWZkc2lua19hZGQpLAotCShnc3RfbXVsdGlmZHNpbmtfcmVtb3ZlKSwgKGdzdF9tdWx0aWZkc2lua19jbGVhciksCi0JKGdzdF9tdWx0aWZkc2lua19yZW1vdmVfY2xpZW50X2xpbmspLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF9yZWFkKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9kYXRhKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpLCAoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRzKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NoYWluKSwgKGdzdF9tdWx0aWZkc2lua19jbG9zZSk6Ci0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmg6Ci0JQWRkZWQgbW9yZSBkZWJ1Z2dpbmcgaW5mby4gQ2hhbmdlZCB0aGUgd2F5IGNsaWVudHMgYXJlCi0JcmVtb3ZlZCBmcm9tIHRoZSBsaXN0cy4gRml4ZWQgYSBidWcgd2hlcmUgYSBiYWQgZmlsZSBkZXNjcmlwdG9yCi0JY291bGQgY2F1c2UgbWFueSBjbGllbnRzIHRvIGJlIHJlbW92ZWQuCi0KLTIwMDQtMDgtMDYgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzogKGdlbmVyYXRlX2NhcHNsaXN0KToKLQkgIGFsbG93IGFsbCBwaXhlbC1hc3BlY3QtcmF0aW9zLCBub3QganVzdCAxOjEKLQotMjAwNC0wOC0wOSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMvZ2xzaW5rL0FSQl9tdWx0aXRleHR1cmUuaDogIFJlbW92ZSBvbGQgZmlsZXMuCi0JKiBzeXMvZ2xzaW5rL0VYVF9wYWxldHRlZF90ZXh0dXJlLmg6Ci0JKiBzeXMvZ2xzaW5rL05WX3JlZ2lzdGVyX2NvbWJpbmVycy5oOgotCSogc3lzL2dsc2luay9nc3RnbF9udmltYWdlLmM6Ci0JKiBzeXMvZ2xzaW5rL2dzdGdsX3BkcmltYWdlLmM6Ci0JKiBzeXMvZ2xzaW5rL2dzdGdsX3JnYmltYWdlLmM6Ci0JKiBzeXMvZ2xzaW5rL2dzdGdsc2luay5jOgotCSogc3lzL2dsc2luay9nc3RnbHNpbmsuaDoKLQkqIHN5cy9nbHNpbmsvZ3N0Z2x4d2luZG93LmM6Ci0JKiBzeXMvZ2xzaW5rL3JlZ2NvbWJfeXV2cmdiLmM6Ci0KLTIwMDQtMDgtMDkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCVBhdGNoIGZyb20gR2Vybm90IFppZWdsZXIgPGd6QGx5c2F0b3IubGl1LnNlPiByZXdyaXRpbmcgdGhlCi0JR0wgc2luayBwbHVnaW4uICAoQnVnICMxNDczMDIpCi0KLQkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgT3BlbkdMCi0JKiBzeXMvTWFrZWZpbGUuYW06IFVzZSB0ZXN0IGZvciBPcGVuR0wKLQkqIHN5cy9nbHNpbmsvTWFrZWZpbGUuYW06Ci0JKiBzeXMvZ2xzaW5rL2dsaW1hZ2VzaW5rLmM6IHJld3JpdGUKLQkqIHN5cy9nbHNpbmsvZ2xpbWFnZXNpbmsuaDogcmV3cml0ZQotCi0yMDA0LTA4LTA5ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2Jhc2VfaW5pdCk6ICBPbmx5IGFsbG93Ci0Jc2FuZSBmcmFtZXJhdGVzLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpOiBzYW1lCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2dldF94dl9zdXBwb3J0KTogc2FtZQotCSogdGVzdHN1aXRlL2dzdC1saW50OiBUZXN0IGZvciBHX0dVSU5UNjRfRk9STUFUIHVzYWdlIG5lYXIgZ2V0dGV4dC4KLQotMjAwNC0wOC0wOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzogKGdzdF9tdWx0aWZkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpZmRzaW5rX2FkZCksIChnc3RfbXVsdGlmZHNpbmtfZ2V0X3N0YXRzKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9yZW1vdmUpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF9yZWFkKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLAotCShnc3RfbXVsdGlmZHNpbmtfcXVldWVfYnVmZmVyKSwgKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50cyk6Ci0JRG8gYSBiaXQgbW9yZSBsb2dnaW5nLCBtYWtlIHRoZSBjbGllbnRfcmVhZCBjb2RlIG1vcmUgcm9idXN0LgotCi0yMDA0LTA4LTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvanBlZy9nc3RqcGVnZGVjLmM6IChnc3RfanBlZ2RlY19pbml0X3NvdXJjZSksCi0JKGdzdF9qcGVnZGVjX2ZpbGxfaW5wdXRfYnVmZmVyKSwgKGdzdF9qcGVnZGVjX3NraXBfaW5wdXRfZGF0YSksCi0JKGdzdF9qcGVnZGVjX3Jlc3luY190b19yZXN0YXJ0KSwgKGdzdF9qcGVnZGVjX3Rlcm1fc291cmNlKSwKLQkoZ3N0X2pwZWdkZWNfaW5pdCksIChnc3RfanBlZ2RlY19jaGFpbik6Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmM6IChnc3RfbXVsdGlwYXJ0X2RlbXV4X2luaXQpLAotCShnc3RfbXVsdGlwYXJ0X2RlbXV4X2NoYWluKSwgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhbmdlX3N0YXRlKToKLQkgIGNsZWFudXBzLCBkZWJ1Z2dpbmcgZml4ZXMgYW5kIG1lbWxlYWsgcGx1Z2dpbmcKLQotMjAwNC0wOC0wOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6IChnc3RfdGhlb3JhX2RlY19jbGFzc19pbml0KSwKLQkodGhlb3JhX2dldF9mb3JtYXRzKSwgKHRoZW9yYV9kZWNfc3JjX2NvbnZlcnQpLAotCSh0aGVvcmFfZGVjX3NpbmtfY29udmVydCksICh0aGVvcmFfZGVjX3NyY19xdWVyeSksCi0JKHRoZW9yYV9kZWNfc3JjX2V2ZW50KSwgKHRoZW9yYV9kZWNfZXZlbnQpLCAodGhlb3JhX2RlY19jaGFpbiksCi0JKHRoZW9yYV9kZWNfY2hhbmdlX3N0YXRlKToKLQlEb24ndCBjcmFzaCBvbiBtaXNzaW5nIGhlYWRlciBwYWNrZXRzLgotCi0yMDA0LTA4LTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vc3EucG86Ci0JICBBZGRlZCBBbGJhbmlhbiB0cmFuc2xhdGlvbiAoTGF1cmVudCBEaGltYSkKLQkqIHBvL2NzLnBvOgotCSAgdXBkYXRlZAotCi0yMDA0LTA4LTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvbGFtZS9nc3RsYW1lLmM6Ci0JICBmaXgvYWRkIGRlYnVnZ2luZwotCi0yMDA0LTA4LTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzoKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6Ci0JICBhc3NpZ24gYWxsIFRPT19MQVpZJ3MgdG8gYSByZWFsIGNhdGVnb3J5LiAgVGhhbmtzIHRvIFdhcnRoeSBXYXJ0aG9nLgotCi0yMDA0LTA4LTA2ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X211bHRpZmRzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGlmZHNpbmtfYWRkKSwgKGdzdF9tdWx0aWZkc2lua19nZXRfc3RhdHMpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3JlYWQpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpLCAoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRzKToKLQlNYWtlIHN1cmUgd2UgZG9uJ3QgdHJ5IHRvIHJlYWQgbW9yZSBmcm9tIGEgY2xpZW50IHRoYXQgd2hhdAotCWlvY3RsIHNheXMgdXMgb3Igd2UgZGVhZGxvY2suCi0KLTIwMDQtMDgtMDUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6IChnc3RfdmlkZW90ZXN0c3JjX3NyY19saW5rKSwKLQkoZ3N0X3ZpZGVvdGVzdHNyY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3ZpZGVvdGVzdHNyY19zcmNfcXVlcnkpLAotCShnc3RfdmlkZW90ZXN0c3JjX2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X3ZpZGVvdGVzdHNyY19nZXQpOgotCSAgZGVjb3VwbGUgcnVubmluZ190aW1lIGFuZCBuX2ZyYW1lcyBzbyBpdCBjYW4gaGFuZGxlIGNoYW5naW5nCi0JICBmcmFtZXJhdGUgd2hpbGUgcnVubmluZwotCi0yMDA0LTA4LTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9ubC5wbzoKLQkqIHBvL3N2LnBvOgotCSAgdXBkYXRlZCB0cmFuc2xhdGlvbnMKLQotMjAwNC0wOC0wNCAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvdmlkZW90ZXN0c3JjL2dzdHZpZGVvdGVzdHNyYy5jOgotCShnc3RfdmlkZW90ZXN0c3JjX2dldF9jYXBzbGlzdCksIChnZW5lcmF0ZV9jYXBzbGlzdCksCi0JKHBsdWdpbl9pbml0KToKLQkgIGdlbmVyYXRlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBjYXBzIGF0IHN0YXJ0dXAgYW5kIHJldXNlIGl0IGluc3RlYWQKLQkgIG9mIGFsd2F5cyBnZW5lcmF0aW5nIGl0Ci0KLTIwMDQtMDctMzAgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X3BhZF9saW5rKToKLQkgIHdob29wcywgbGFzdCBjaGVja2luIGJyb2tlIG5vcm1hbCBidWlsZAotCi0yMDA0LTA4LTAzICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FtaXhlci5jOiAoZ3N0X2Fsc2FfbWl4ZXJfZ2V0X3ZvbHVtZSksCi0JKGdzdF9hbHNhX21peGVyX3NldF92b2x1bWUpLCAoZ3N0X2Fsc2FfbWl4ZXJfc2V0X211dGUpLAotCShnc3RfYWxzYV9taXhlcl9zZXRfcmVjb3JkKSwgKGdzdF9hbHNhX21peGVyX3NldF9vcHRpb24pLAotCShnc3RfYWxzYV9taXhlcl9nZXRfb3B0aW9uKToKLQkqIGV4dC9kdmRuYXYvZHZkbmF2c3JjLmM6IChkdmRuYXZfZ2V0X2V2ZW50X25hbWUpLAotCShkdmRuYXZzcmNfcHJpbnRfZXZlbnQpOgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoX2ZpbmRfY2hhaW5fcHJvY2VzcyksIChnc3Rfb2dnX3ByaW50KToKLQkqIGV4dC9vZ2cvZ3N0b2dnbXV4LmM6IChnc3Rfb2dnX211eF9wYWRfbGluayksCi0JKGdzdF9vZ2dfbXV4X3BhZF91bmxpbmspOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X3BhZF9saW5rKSwKLQkoZ3N0X211bHRpcGFydF9tdXhfcGFkX3VubGluayk6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6Ci0JKGdzdF92aWRlb2JhbGFuY2VfY29sb3JiYWxhbmNlX3NldF92YWx1ZSk6Ci0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9wYWRfbGluayksCi0JKGdzdF92aWRlb21peGVyX3BhZF91bmxpbmspOgotCSogcG8vdWsucG86Ci0JKiBzeXMvb3NzL2dzdG9zc21peGVyLmM6Ci0JKiBzeXMvdjRsL2dzdHY0bGNvbG9yYmFsYW5jZS5jOgotCSogc3lzL3Y0bC9nc3R2NGx0dW5lci5jOgotCSogc3lzL3Y0bC92NGxzcmNfY2FsbHMuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuYzoKLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOgotCSAgY29tcGlsZSBmaXhlcyBmb3IgLS1kaXNhYmxlLWdzdC1kZWJ1ZywgR19ESVNBQkxFX0FTU0VSVCBhbmQgZnJpZW5kcwotCi0yMDA0LTA4LTAzICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4YW1wbGVzL2R5bnBhcmFtcy9maWx0ZXIuYzogKHVpX2NvbnRyb2xfY3JlYXRlKToKLQkqIGV4YW1wbGVzL2dzdHBsYXkvcGxheWVyLmM6IChwcmludF90YWcpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfcmVxdWVzdF9uZXdfcGFkKToKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka2FuaW1hdGlvbi5jOgotCShnc3RfZ2RrX2FuaW1hdGlvbl9pdGVyX21heV9hZHZhbmNlKToKLQkqIGV4dC9qYWNrL2dzdGphY2suYzogKGdzdF9qYWNrX3JlcXVlc3RfbmV3X3BhZCk6Ci0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X21hZF9pZDNfdG9fdGFnX2xpc3QpLAotCSh0YWdfbGlzdF90b19pZDNfdGFnX2ZvcmVhY2gpLCAoZ3N0X2lkM190YWdfaGFuZGxlX2V2ZW50KToKLQkqIGV4dC92b3JiaXMvb2dndm9yYmlzZW5jLmM6IChnc3Rfb2dndm9yYmlzZW5jX2dldF90YWdfdmFsdWUpOgotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKGdzdF92b3JiaXNlbmNfZ2V0X3RhZ192YWx1ZSk6Ci0JKiBleHQveGluZS94aW5lYXVkaW9kZWMuYzogKGdzdF94aW5lX2F1ZGlvX2RlY19jaGFpbik6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXRlc3QuYzogKHByaW50X3RhZyk6Ci0JKiBnc3Qvc2luZS9kZW1vLWRwYXJhbXMuYzogKG1haW4pOgotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IChnc3RfdGFnX3RvX3ZvcmJpc19jb21tZW50cyk6Ci0JKiB0ZXN0c3VpdGUvYWxzYS9mb3JtYXRzLmM6IChjcmVhdGVfcGlwZWxpbmUpOgotCSogdGVzdHN1aXRlL2Fsc2Evc2luZXNyYy5jOiAoc2luZXNyY19mb3JjZV9jYXBzKSwgKHNpbmVzcmNfZ2V0KToKLQkgIGZpeGVzIGZvciBHX0RJU0FCTEVfQVNTRVJUIGFuZCBmcmllbmRzCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKGFhY190eXBlX2ZpbmQpLAotCShtcDNfdHlwZV9mcmFtZV9sZW5ndGhfZnJvbV9oZWFkZXIpLCAobXAzX3R5cGVfZmluZCksCi0JKHBsdWdpbl9pbml0KToKLQkgIHJlcXVpcmUgbXAzIHR5cGVmaW5kaW5nIHRvIGhhdmUgYXQgbGVhc3QgTUlOX0hFQURFUlMgdmFsaWQgaGVhZGVycwotCSAgYWRkIHR5cGVmaW5kaW5nIGZvciBBQUMgYWR0cyBmaWxlcwotCi0yMDA0LTA4LTA0ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOgotCShnc3RfeGltYWdlc2lua19jYWxjdWxhdGVfcGl4ZWxfYXNwZWN0X3JhdGlvKToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6Ci0JKGdzdF94dmltYWdlc2lua19jYWxjdWxhdGVfcGl4ZWxfYXNwZWN0X3JhdGlvKToKLQlNYWtlIHN1cmUgd2UgY2FsY3VsYXRlIHBpeGVsLWFzcGVjdC1yYXRpbyB1c2luZyBmbG9hdGluZyBwb2ludCBtYXRocwotCi0yMDA0LTA4LTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby91ay5wbzoKLQkgIHVwZGF0ZWQgdHJhbnNsYXRpb24KLQotMjAwNC0wOC0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194Y29udGV4dF9nZXQpOgotCSAgYWRkIGRlYnVnZ2luZyBmb3IgZGlzcGxheSBQQVIgY2FsY3VsYXRpb24KLQotMjAwNC0wOC0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb25maWd1cmUuYWM6IEZpeCBtaWttb2QgQ0ZMQUdTLgotCi0yMDA0LTA3LTI3ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuYzoKLQktIGZpeCB0ZW1wbGF0ZXMgdG8gb25seSBzdXBwb3J0IFMxNiwgaXQncyB0aGUgb25seSBmb3JtYXQgdGhhdCB3b3JrcwotCS0gbWFrZSBjYXBzIG5lZ28gY29kZSB1c2UgdHJ5X3NldF9jYXBzX25vbmZpeGVkIGFuZCBmaXhhdGlvbiBpbnN0ZWFkCi0Jb2YgdHJ5X3NldF9jYXBzIHR3aWNlLCB3aGljaCBpcyBub3QgbmljZSBmb3IgYXV0b3BsdWdnZXJzCi0JLSBjaGFuZ2UgcmFuayB0byBzZWNvbmRhcnksIHNvIGF1dG9wbHVnZ2VycyBjYW4gcGljayBpdCB1cCBhZnRlcgotCWF1ZGlvY29udmVydAotCi0yMDA0LTA4LTAyICBJYWluIDxpYWluQHByZXR0eXBlb3BsZS5vcmc+Ci0KLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYyAoaW50ZXJsZWF2ZV9pbml0KSwKLQkoaW50ZXJsZWF2ZV9yZXF1ZXN0X25ld19wYWQpLAotCShpbnRlcmxlYXZlX3BhZF9yZW1vdmVkKSwKLQkoaW50ZXJsZWF2ZV9idWZmZXJlZF9sb29wKTogVXNlIHRoZSByZWFsIHBhZCBjb3VudCwgbm90IHRoZSBhcnRpZmljaWFsCi0Jb25lLgotCi0yMDA0LTA4LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IGJ1bXAgbmFubyBiYWNrIHRvIGRldmVsb3BtZW50Ci0KLT09PSByZWxlYXNlIDAuOC4zID09PQotCi0yMDA0LTA4LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IHJlbGVhc2luZyAwLjguMywgIldhdGVyIgotCi0yMDA0LTA4LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOgotCShnc3RfeHZpbWFnZXNpbmtfY2FsY3VsYXRlX3BpeGVsX2FzcGVjdF9yYXRpbyksCi0JKGdzdF94dmltYWdlc2lua194Y29udGV4dF9jbGVhciksIChnc3RfeHZpbWFnZXNpbmtfc2lua19saW5rKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSksIChnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfeHZpbWFnZXNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2luaXQpLCAoZ3N0X3h2aW1hZ2VzaW5rX2NsYXNzX2luaXQpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuaDoKLQkgIGFwcGx5IHNpbWlsYXIgUEFSIGZpeGVzIGFzIHRvIHhpbWFnZXNpbmsKLQotMjAwNC0wOC0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCXBhdGNoIGZyb206IEJlbmphbWluIE90dGUKLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfc3JjX2xpbmspLCAoZ3N0X2xhbWVfaW5pdCk6Ci0JICBhZGQgbGluayBmdW5jdGlvbiB0byBsYW1lLiAgRml4ZXMgIzE0ODk4Ni4KLQotMjAwNC0wOC0wMiAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jIChnc3RfbXVsdGlwYXJ0X211eF9uZXh0X2J1ZmZlcik6Ci0JZml4IGRlYnVnZ2luZyBsb2cKLQotMjAwNC0wNy0zMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9taXhlci9NYWtlZmlsZS5hbTogRml4IHRoaW5ncyB0aGF0IHNob3VsZCBoYXZlIGJlZW4KLQlmaXhlZCBpbiB0aGUgbGFzdCBjaGVja2luLgotCi0yMDA0LTA3LTMwICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvTWFrZWZpbGUuYW06IEZpeCB0aGluZ3MgdGhhdCBzaG91bGQgaGF2ZSBiZWVuCi0JZml4ZWQgaW4gdGhlIGxhc3QgY2hlY2tpbi4KLQotMjAwNC0wNy0zMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0ZXN0c3VpdGUvbXVsdGlmaWxlc2luay9NYWtlZmlsZS5hbTogRml4IHVudXNlZCB2YXJpYWJsZS4KLQotMjAwNC0wNy0zMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgYnVtcCBuYW5vIGZvciBwcmVyZWxlYXNlCi0JKiBwby9hZi5wbzoKLQkqIHBvL2F6LnBvOgotCSogcG8vY3MucG86Ci0JKiBwby9lbl9HQi5wbzoKLQkqIHBvL2h1LnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotCSogcG8vdWsucG86Ci0JICB1cGRhdGVzCi0KLTIwMDQtMDctMzAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfY2xhc3NfaW5pdCksCi0JKGdzdF9tdWx0aWZkc2lua19hZGQpLCAoZ3N0X211bHRpZmRzaW5rX3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19jbGVhciksIChnc3RfbXVsdGlmZHNpbmtfZ2V0X3N0YXRzKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9yZW1vdmUpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpLCAoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRzKToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQlSZWNvdmVyIGZyb20gYSBzZWxlY3Qgd2l0aCBhIGJhZCBmaWxlIGRlc2NyaXB0b3IgYnkgcmVtb3ZpbmcKLQl0aGUgY2xpZW50LgotCi0yMDA0LTA3LTMwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBmaXggcmVxdWlyZW1lbnQgb2YgY29yZQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jOiAoZ3N0X3BsYXlfZXJyb3JfcGx1Z2luKSwKLQkoZ3N0X3BsYXlfcGlwZWxpbmVfc2V0dXApOgotCSAgZG9uJ3QgdXNlIGNvbG9yc3BhY2UgZWxlbWVudC4gIGRvIHVzZSBoZXJtZXNjb2xvcnNwYWNlIGVsZW1lbnQuCi0JICBtYWtlIG1hY3JvIHRvIGdldCBhIGNvbG9yc3BhY2UgZWxlbWVudC4KLQkgIG1hcmsgc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24uCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIGFkZCBwbGF5LmMKLQkqIHBvL2FmLnBvOgotCSogcG8vYXoucG86Ci0JKiBwby9jcy5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vaHUucG86Ci0JKiBwby9ubC5wbzoKLQkqIHBvL3NyLnBvOgotCSogcG8vc3YucG86Ci0JKiBwby91ay5wbzoKLQkgIHVwZGF0ZSB0cmFuc2xhdGlvbnMKLQotMjAwNC0wNy0zMCAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5jOiAoZ3N0X3BuZ2VuY19jbGFzc19pbml0KToKLQlmaXggZGVmYXVsdCBmb3IgbmV3bWVkaWEgZmxhZwotCi0yMDA0LTA3LTMwICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKGdzdF90aGVvcmFfZGVjX2NsYXNzX2luaXQpLAotCShnc3RfdGhlb3JhX2RlY19pbml0KSwgKHRoZW9yYV9nZXRfZm9ybWF0cyksCi0JKHRoZW9yYV9kZWNfc3JjX2NvbnZlcnQpLCAodGhlb3JhX2RlY19zaW5rX2NvbnZlcnQpLAotCSh0aGVvcmFfZGVjX3NyY19xdWVyeSksICh0aGVvcmFfZGVjX3NyY19ldmVudCksICh0aGVvcmFfZGVjX2V2ZW50KSwKLQkodGhlb3JhX2RlY19jaGFpbiksICh0aGVvcmFfZGVjX3NldF9wcm9wZXJ0eSksCi0JKHRoZW9yYV9kZWNfZ2V0X3Byb3BlcnR5KToKLQkqIGV4dC90aGVvcmEvdGhlb3JhZW5jLmM6IChnc3RfYm9yZGVyX21vZGVfZ2V0X3R5cGUpLAotCShnc3RfdGhlb3JhX2VuY19jbGFzc19pbml0KSwgKGdzdF90aGVvcmFfZW5jX2luaXQpLAotCSh0aGVvcmFfZW5jX3NpbmtfbGluayksICh0aGVvcmFfZW5jX2NoYWluKSwKLQkodGhlb3JhX2VuY19zZXRfcHJvcGVydHkpLCAodGhlb3JhX2VuY19nZXRfcHJvcGVydHkpOgotCUFkZGVkIGNyb3BwaW5nIG9wdGlvbiB0byB0aGVvcmEgZGVjb2Rlci4KLQlBZGRlZCBib3JkZXIgb3B0aW9uIHRvIHRoZW9yYSBlbmNvZGVyLgotCi0yMDA0LTA3LTMwICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChnc3RfcG5nZW5jX2NsYXNzX2luaXQpLAotCShnc3RfcG5nZW5jX2luaXQpLCAoZ3N0X3BuZ2VuY19jaGFpbiksIChnc3RfcG5nZW5jX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9wbmdlbmNfc2V0X3Byb3BlcnR5KToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmg6Ci0JQWRkZWQgbmV3bWVkaWEgc3VwcG9ydCB0byBwbmdlbmMgc28gbm93IGdzdC1sYXVuY2gtMC44IHZpZGVvdGVzdHNyYyAhIGZmbXBlZ2NvbG9yc3BhY2UgISBwbmdlbmMgc25hcHNob3Q9ZmFsc2UgbmV3bWVkaWE9dHJ1ZSAhIG11bHRpZmlsZXNpbmsgbG9jYXRpb249YmxhaCVkLnBuZyB3b3JrcyBhcyBleHBlY3RlZAotCi0yMDA0LTA3LTMwICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzogKGdzdF90aGVvcmFfZW5jX2NsYXNzX2luaXQpLAotCSh0aGVvcmFfZW5jX3NpbmtfbGluayksICh0aGVvcmFfZW5jX2NoYWluKSwKLQkodGhlb3JhX2VuY19zZXRfcHJvcGVydHkpLCAodGhlb3JhX2VuY19nZXRfcHJvcGVydHkpOgotCUZpeCBlbmNvZGluZyBvZiBub24tbXVsdGlwbGUtb2YtMTYgdmlkZW8uCi0KLTIwMDQtMDctMjkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOiBtYWtlIHRlc3QgZm9yIGF1ZGlvZmlsZSBtb3JlIHN0cmljdAotCi0yMDA0LTA3LTI1ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAocGx1Z2luX2luaXQpOgotCSAgZ2l2ZSBkaWZmZXJlbnQgbmFtZXMgdG8gdHlwZWZpbmQgZnVuY3Rpb25zCi0KLTIwMDQtMDctMjggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfcmVuZWdvdGlhdGVfc2l6ZSksCi0JKGdzdF94aW1hZ2VzaW5rX2NhbGN1bGF0ZV9waXhlbF9hc3BlY3RfcmF0aW8pLAotCShnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpLCAoZ3N0X3hpbWFnZXNpbmtfZ2V0Y2FwcyksCi0JKGdzdF94aW1hZ2VzaW5rX3NpbmtfbGluayksIChnc3RfeGltYWdlc2lua19jaGFuZ2Vfc3RhdGUpLAotCShnc3RfeGltYWdlc2lua19zZXRfeHdpbmRvd19pZCksIChnc3RfeGltYWdlc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfeGltYWdlc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkgIGFsbG9jYXRlIFBBUidzIGR5bmFtaWNhbGx5LgotCSAgdXNlIGF1dG9kZXRlY3RlZCBQQVIgaWYgbm8gb2JqZWN0LXNldCBQQVIgaXMgZ2l2ZW4uCi0JICBhZGQgd29ya2Fyb3VuZCBmb3IgZGlyZWN0ZmIncyBYIG5vdCBzZXR0aW5nIHBoeXNpY2FsIHNpemUuCi0JICBmaXggdG8geHZpbWFnZXNpbmsgd2lsbCBmb2xsb3cgdG9tb3Jyb3cuCi0KLTIwMDQtMDctMjggIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfY2hhaW4pOiBzZW5kIHRhZyBldmVudHMgZG93bnN0cmVhbQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzogKGdzdF9zaG91dDJzZW5kX3Byb3RvY29sX2dldF90eXBlKSwKLQkoZ3N0X3Nob3V0MnNlbmRfZ2V0X3R5cGUpLCAoZ3N0X3Nob3V0MnNlbmRfc2V0X2Nsb2NrKSwKLQkoZ3N0X3Nob3V0MnNlbmRfY2xhc3NfaW5pdCksIChnc3Rfc2hvdXQyc2VuZF9pbml0KSwKLQkoc2V0X3Nob3V0X21ldGFkYXRhKSwgKGdzdF9zaG91dDJzZW5kX3NldF9tZXRhZGF0YSksCi0JKGdzdF9zaG91dDJzZW5kX2NoYWluKSwgKGdzdF9zaG91dDJzZW5kX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9zaG91dDJzZW5kX2dldF9wcm9wZXJ0eSksIChnc3Rfc2hvdXQyc2VuZF9jb25uZWN0KSwKLQkoZ3N0X3Nob3V0MnNlbmRfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmg6Ci0JLSBmaXggZm9yIHNlbmRpbmcgbXAzIGF1ZGlvIHRvIGljZWNhc3QyIHNlcnZlciwgaWYgcGFkIGxpbmsgZnVuY3Rpb24gbm90Ci0JY2FsbGVkIGJlZm9yZSBQQVVTRUQgc3RhdGUKLQktIGFkZGVkIG9wdGlvbiB0byB1c2UgR1N0cmVhbWVyIGNsb2NrIHN5bmMgKGFzIG9wcG9zZWQgdG8gbGlic2hvdXQncyBvd24gc3luYykKLQktIGFkZGVkIHRhZ2dpbmcgc3VwcG9ydCBmb3IgbXAzIGF1ZGlvIGJyb2FkY2FzdGVkCi0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOiAoZ3N0X21vbm9zY29wZV9jbGFzc19pbml0KToKLQlkZWJ1ZyBpbmZvCi0KLTIwMDQtMDctMjggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19xdWVyeSksCi0JKGdzdF9vZ2dfZGVtdXhfcHVzaCk6Ci0JUmV0dXJuIHF1ZXJ5IGZhaWx1cmUgd2hlbiB3ZSBkb24ndCBrbm93IHRoZSBsZW5ndGggb2YKLQlhbiBvZ2cgc3RyZWFtIGluc3RlZGEgb2YgcmV0dXJuaW5nIFRSVUUgd2l0aCBhIGJvZ3VzIHZhbHVlLgotCi0yMDA0LTA3LTI4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9nZXRfZm9ybWF0cyksCi0JKHRoZW9yYV9kZWNfc3JjX2NvbnZlcnQpLCAodGhlb3JhX2RlY19zaW5rX2NvbnZlcnQpLAotCSh0aGVvcmFfZGVjX3NyY19xdWVyeSksICh0aGVvcmFfZGVjX3NyY19ldmVudCksICh0aGVvcmFfZGVjX2V2ZW50KSwKLQkodGhlb3JhX2RlY19jaGFpbik6Ci0JRG9uJ3Qgc2NyZXcgdXAgdGhlIDEgQ2hyb21hIGZvciAxIGx1bWEgc2FtcGxlIHNpdHVhdGlvbiB3aGVuIHdlCi0JaGF2ZSBhbiBvZGQgb2Zmc2V0L3dpZHRoIGJ5IGFkZGluZyBhIGJsYWNrIGJvcmRlciBpbiB0aG9zZSBjYXNlcy4KLQotMjAwNC0wNy0yOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6ICh0aGVvcmFfZ2V0X2Zvcm1hdHMpLAotCSh0aGVvcmFfZGVjX3NyY19jb252ZXJ0KSwgKHRoZW9yYV9kZWNfc2lua19jb252ZXJ0KSwKLQkodGhlb3JhX2RlY19zcmNfcXVlcnkpLCAodGhlb3JhX2RlY19zcmNfZXZlbnQpLCAodGhlb3JhX2RlY19ldmVudCksCi0JKHRoZW9yYV9kZWNfY2hhaW4pOgotCSogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzogKHRoZW9yYV9lbmNfc2lua19saW5rKToKLQlBZGRlZCBmaXJzdCBhdHRlbXB0IGF0IGNyb3BwaW5nIG9mIHRoZSBpbWFnZSBhcyByZXF1aXJlZCBieSB0aGUKLQl0aGVvcmEgc3BlYy4gV2UgbmVlZCBtb3JlIHByb3BlcnRpZXMgaW4gdGhlIGNhcHMgKG9mZnNldF94LAotCW9mZnNldF95LHN0cmlkZSkgdG8gaW1wbGVtZW50IHRoaXMgY29ycmVjdGx5LgotCi0yMDA0LTA3LTI4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9kdmRuYXYvUkVBRE1FOgotCSAgVXBkYXRlIHRoZSBSRUFETUUgdG8gdXNlIGR2ZGRlbXV4Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOiAoZ3N0X3BpeGJ1ZnNjYWxlX2dldGNhcHMpOgotCSAgRW5zdXJlIGdldGNhcHMgcmV0dXJucyBhIHN1YnNldCBvZiB0aGUgdGVtcGxhdGUgY2FwcwotCSogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOiAoZ3N0X21wZWcyc3VidF9iYXNlX2luaXQpLAotCShnc3RfbXBlZzJzdWJ0X2luaXQpOgotCSAgRW5zdXJlIGdldGNhcHMgcmV0dXJucyBhIHN1YnNldCBvZiB0aGUgdGVtcGxhdGUgY2FwcwotCSogZ3N0L21wZWdzdHJlYW0vZ3N0ZHZkZGVtdXguYzogKGdzdF9kdmRfZGVtdXhfY2xhc3NfaW5pdCksCi0JKGdzdF9kdmRfZGVtdXhfaW5pdCksIChnc3RfZHZkX2RlbXV4X2dldF92aWRlb19zdHJlYW0pLAotCShnc3RfZHZkX2RlbXV4X2dldF9zdWJwaWN0dXJlX3N0cmVhbSksCi0JKGdzdF9kdmRfZGVtdXhfc2VuZF9zdWJidWZmZXIpLCAoZ3N0X2R2ZF9kZW11eF9zZXRfY3VyX3N1YnBpY3R1cmUpOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0ZHZkZGVtdXguaDoKLQkgIFNldCB0aGUgZXhwbGljaXQgY2FwcyBvbiB0aGUgY3VycmVudF92aWRlbyBwYWQgYmVmb3JlIHB1c2hpbmcKLQkgIGFueXRoaW5nCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X2dldF92aWRlb19zdHJlYW0pLAotCShnc3RfbXBlZ19kZW11eF9nZXRfYXVkaW9fc3RyZWFtKToKLQkgIEZyZWUgY2FwcyB1c2VkIHRvIGdzdF9wYWRfc2V0X2V4cGxpY2l0X2NhcHMsIHdoaWNoIHRha2VzIGEgY29uc3QKLQkgIEdzdENhcHMgKgotCi0yMDA0LTA3LTI4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IHVwZGF0ZSBHU3RyZWFtZXIgcmVxdWlyZW1lbnQgdG8gMC44LjQgYmVjYXVzZSBvZgotCSAgR3N0RnJhY3Rpb24uCi0KLTIwMDQtMDctMjggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9mbXQpLAotCShnc3Rfd2F2cGFyc2VfaGFuZGxlX3NlZWspLCAoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCk6Ci0JQWRkIHRoZSBwYWQgdG8gdGhlIGVsZW1lbnQgYWZ0ZXIgc2V0dGluZyB1cCB0aGUgY2Fwcy4gVGhpcwotCW1ha2VzIGl0IGEgbG90IGVhc2llciB0byBhdXRvcGx1Zy4KLQotMjAwNC0wNy0yNyAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIGdzdC9tZWRpYW4vZ3N0bWVkaWFuLmM6Ci0JKiBnc3QvbXBlZzJzdWJ0L2dzdG1wZWcyc3VidC5jOgotCSogZ3N0L21wZWdhdWRpb3BhcnNlL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVncGFja2V0aXplLmM6Ci0JKiBnc3QvcnRqcGVnL2dzdHJ0anBlZy5jOgotCSogZ3N0L3J0anBlZy9nc3RydGpwZWdkZWMuYzoKLQkqIGdzdC9ydGpwZWcvZ3N0cnRqcGVnZW5jLmM6Ci0JKiBnc3Qvc2luZS9nc3RzaW5lc3JjLmM6Ci0JKiBnc3Qvc21vb3RoL2dzdHNtb290aC5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuaDoKLQkqIGdzdC9zdGVyZW8vZ3N0c3RlcmVvLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzoKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmxpcC5jOgotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOgotCSogZ3N0L3ZpZGVvc2NhbGUvdmlkZW9zY2FsZS5jOgotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzoKLQkqIGdzdC92aWRlb3Rlc3RzcmMvdmlkZW90ZXN0c3JjLmM6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JICBmaXggbG9jYWwgaW5jbHVkZXMgYW5kIDY0IGJpdHMgY29uc3RhbnRzCi0KLTIwMDQtMDctMjcgIFN0ZXZlIExob21tZSAgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JKiB3aW4zMi9nc3Quc2xuOgotCSogZ3N0LWxpYnMvZ3N0LyovKi52Y3Byb2o6Ci0JKiBnc3QvKi8qLnZjcHJvajoKLQkgIG1vcmUgd29ya2luZyBwbHVnaW5zCi0KLTIwMDQtMDctMjcgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogdGVzdHN1aXRlL2Fsc2EvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvYWxzYS9zcmNzdGF0ZS5jOgotCWFkZCB0ZXN0IGZvciBhbHNhc3JjIGNoYW5naW5nIHN0YXRlCi0KLTIwMDQtMDctMjcgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogZ3N0L3NpbGVuY2UvZ3N0c2lsZW5jZS5jOiAoZ3N0X3NpbGVuY2VfaW5pdCksIChnc3Rfc2lsZW5jZV9saW5rKSwKLQkoZ3N0X3NpbGVuY2VfZ2V0KToKLQkqIGdzdC9zaWxlbmNlL2dzdHNpbGVuY2UuaDoKLQlmaXggc2lsZW5jZSBnZW5lcmF0aW9uIGZvciAxNmJpdCByYXcgYXVkaW8KLQotMjAwNC0wNy0yNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9tZXRhZGF0YSksCi0JKGdzdF9tYXRyb3NrYV9kZW11eF92aWRlb19jYXBzKSwgKGdzdF9tYXRyb3NrYV9kZW11eF9wbHVnaW5faW5pdCk6Ci0JKiBnc3QvbXBlZ2F1ZGlvL2NvbW1vbi5jOgotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOiAoZ3N0X3ZpZGVvc2NhbGVfY2xhc3NfaW5pdCksCi0JKGdzdF92aWRlb3NjYWxlX2dldGNhcHMpLCAoZ3N0X3ZpZGVvc2NhbGVfbGluayksCi0JKGdzdF92aWRlb3NjYWxlX3NyY19maXhhdGUpLCAoZ3N0X3ZpZGVvc2NhbGVfaW5pdCksCi0JKGdzdF92aWRlb3NjYWxlX2ZpbmFsaXplKToKLQkqIGdzdC92aWRlb3NjYWxlL2dzdHZpZGVvc2NhbGUuaDoKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6Ci0JKGdzdF92aWRlb3Rlc3RzcmNfZ2V0X2NhcHNsaXN0KToKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc21peGVyLmM6IChmaWxsX2xhYmVscyk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3JlbmVnb3RpYXRlX3NpemUpLAotCShnc3RfeGltYWdlc2lua19oYW5kbGVfeGV2ZW50cyksCi0JKGdzdF94aW1hZ2VzaW5rX2NhbGN1bGF0ZV9waXhlbF9hc3BlY3RfcmF0aW8pLAotCShnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpLCAoZ3N0X3hpbWFnZXNpbmtfZml4YXRlKSwKLQkoZ3N0X3hpbWFnZXNpbmtfZ2V0Y2FwcyksIChnc3RfeGltYWdlc2lua19zaW5rX2xpbmspLAotCShnc3RfeGltYWdlc2lua19jaGFpbiksIChnc3RfeGltYWdlc2lua19zZXRfeHdpbmRvd19pZCksCi0JKGdzdF94aW1hZ2VzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfeGltYWdlc2lua19nZXRfcHJvcGVydHkpLAotCShnc3RfeGltYWdlc2lua19pbml0KSwgKGdzdF94aW1hZ2VzaW5rX2NsYXNzX2luaXQpOgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmg6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOgotCShnc3RfeHZpbWFnZXNpbmtfY2FsY3VsYXRlX3BpeGVsX2FzcGVjdF9yYXRpbyksCi0JKGdzdF94dmltYWdlc2lua194Y29udGV4dF9nZXQpLCAoZ3N0X3h2aW1hZ2VzaW5rX3NpbmtfbGluayksCi0JKGdzdF94dmltYWdlc2lua19jaGFpbiksIChnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfeHZpbWFnZXNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2luaXQpLCAoZ3N0X3h2aW1hZ2VzaW5rX2NsYXNzX2luaXQpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuaDoKLQkgIGZpcnN0IGJhdGNoIG9mIHBpeGVsIGFzcGVjdCByYXRpbyBjb21taXRzLgotCi0yMDA0LTA3LTI3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NsYXNzX2luaXQpLCAoZ3N0X2ZmbXBlZ2NvbG9yc3BhY2VfY2hhaW4pOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydC5jOiAoYXZwaWN0dXJlX2ZpbGwpOgotCSAgaGFuZGxlIHN0cmlkZSwgbmVlZHMgd29yayBpZiB3ZSB3YW50IHRvIG1vdmUgc3RyaWRlIGhhbmRsaW5nCi0JICB1cHN0cmVhbSwgYnV0IHdvcmtzIGNvcnJlY3RseSBmb3Igb3VyIHB1cnBvc2VzLgotCi0yMDA0LTA3LTI3ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdmlkZW9zY2FsZS9SRUFETUU6Ci0JICBhZGQgdGVzdGluZyBleGFtcGxlcwotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOiAoZ3N0X3ZpZGVvc2NhbGVfbGluayksCi0JKGdzdF92aWRlb3NjYWxlX2NoYWluKToKLQkqIGdzdC92aWRlb3NjYWxlL3ZpZGVvc2NhbGUuYzogKGdzdF92aWRlb3NjYWxlX3NldHVwKSwKLQkoZ3N0X3ZpZGVvc2NhbGVfZ2V0X3NpemUpOgotCSAgYWRkIGdldF9zaXplIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBzdHJpZGUgbGlrZSB2aWRlb3Rlc3RzcmMuCi0JICBmaXhlcyBjb252ZXJzaW9uIGZvciBZVVYgZm9ybWF0cyBmb3IgYXMgbXVjaCBhcyBJIGNhbiB0ZXN0IHRoZW0uCi0KLTIwMDQtMDctMjcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9uZXcpLCAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX2Rlc3Ryb3kpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jaGVja194c2htX2NhbGxzKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3h2aW1hZ2VfbmV3KSwgKGdzdF94dmltYWdlc2lua194dmltYWdlX2Rlc3Ryb3kpLAotCShnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9wdXQpOgotCSAgZnVydGhlciBjbGVhbnVwcywgbG9nZ2luZywgZXJyb3IgaGFuZGxpbmcgYW5kIHN5bmNocm9uaXppbmcKLQotMjAwNC0wNy0yNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIuYzogKGdzdF92aWRlb21peGVyX3BhZF9nZXRfdHlwZSksCi0JKGdzdF92aWRlb21peGVyX3BhZF9jbGFzc19pbml0KSwgKGdzdF92aWRlb21peGVyX3BhZF9nZXRfcHJvcGVydHkpLAotCShnc3RfdmlkZW9taXhlcl9wYWRfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfcGFkX3Npbmtjb25uZWN0KSwgKGdzdF92aWRlb21peGVyX3BhZF9pbml0KSwKLQkoZ3N0X3ZpZGVvX21peGVyX2JhY2tncm91bmRfZ2V0X3R5cGUpLCAoZ3N0X3ZpZGVvbWl4ZXJfZ2V0X3R5cGUpLAotCShnc3RfdmlkZW9taXhlcl9jbGFzc19pbml0KSwgKGdzdF92aWRlb21peGVyX2luaXQpLAotCShnc3RfdmlkZW9taXhlcl9nZXRjYXBzKSwgKGdzdF92aWRlb21peGVyX3JlcXVlc3RfbmV3X3BhZCksCi0JKGdzdF92aWRlb21peGVyX2JsZW5kX2F5dXZfaTQyMCksIChwYWRfem9yZGVyX2NvbXBhcmUpLAotCShnc3RfdmlkZW9taXhlcl9zb3J0X3BhZHMpLCAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jaGVja2VyKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jb2xvciksIChnc3RfdmlkZW9taXhlcl9maWxsX3F1ZXVlcyksCi0JKGdzdF92aWRlb21peGVyX2JsZW5kX2J1ZmZlcnMpLCAoZ3N0X3ZpZGVvbWl4ZXJfdXBkYXRlX3F1ZXVlcyksCi0JKGdzdF92aWRlb21peGVyX2xvb3ApLCAocGx1Z2luX2luaXQpOgotCUJlIGEgbmljZXIgbmVnb3RpYXRpb24gY2l0aXplbiBhbmQgcHJvdmlkZSBhIGdldGNhcHMgZnVuY3Rpb24gb24KLQl0aGUgc3JjcGFkLiBUaGlzIGFsc28gZml4ZXMgYSBjcmFzaCB3aGVuIHJlc2l6aW5nLgotCi0yMDA0LTA3LTI3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyk6IFNvbWUgZml4ZXMgdG8gaW1hZ2Ugc2l6ZSBjYWxjdWxhdGlvbi4KLQotMjAwNC0wNy0yNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6IChnc3RfcG5nZGVjX3NyY19nZXRjYXBzKToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6IChnc3RfcG5nZW5jX2NsYXNzX2luaXQpLAotCShnc3RfcG5nZW5jX2luaXQpLCAoZ3N0X3BuZ2VuY19jaGFpbiksIChnc3RfcG5nZW5jX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9wbmdlbmNfc2V0X3Byb3BlcnR5KToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmg6Ci0JQWRkZWQgc25hcHNob3QgcHJvcGVydHkgdG8gcG5nZW5jLgotCXJlbW92ZWQgZ19wcmludCBmcm9tIHBuZ2RlYwotCi0yMDA0LTA3LTI3ICBTdGV2ZSBMaG9tbWUgIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSogZ3N0L2FjM3BhcnNlL2FjM3BhcnNlLnZjcHJvagotCSogZ3N0L2FkZGVyL2FkZGVyLnZjcHJvagotCSogZ3N0L2FscGhhL2FscGhhLnZjcHJvagotCSogZ3N0L2FscGhhL2FscGhhY29sb3IudmNwcm9qCi0JKiBnc3QvYXNmZGVtdXgvYXNmLnZjcHJvagotCSogZ3N0L2F1ZGlvY29udmVydC9hdWRpb2NvbnZlcnQudmNwcm9qCi0JKiBnc3QvYXVkaW9yYXRlL2F1ZGlvcmF0ZS52Y3Byb2oKLQkqIGdzdC9hdWRpb3NjYWxlL2F1ZGlvc2NhbGUudmNwcm9qCi0JKiBnc3QvYXVwYXJzZS9hdXBhcnNlLnZjcHJvagotCSogZ3N0L2F2aS9hdmkudmNwcm9qCi0JKiBnc3QvY2R4YXBhcnNlL2NkeGFwYXJzZS52Y3Byb2oKLQkqIGdzdC9jaGFydC9jaGFydC52Y3Byb2oKLQkqIGdzdC9jb2xvcnNwYWNlL2NvbG9yc3BhY2UudmNwcm9qCi0JKiBnc3QvY3V0dGVyL2N1dHRlci52Y3Byb2oKLQkqIGdzdC9kZWJ1Zy9kZWJ1Zy52Y3Byb2oKLQkqIGdzdC9kZWJ1Zy9lZmVuY2UudmNwcm9qCi0JKiBnc3QvZGVidWcvbmF2aWdhdGlvbnRlc3QudmNwcm9qCi0JKiBnc3QvZGVpbnRlcmxhY2UvZGVpbnRlcmxhY2UudmNwcm9qCi0JKiBnc3QvZWZmZWN0di9lZmZlY3R2LnZjcHJvagotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZmZtcGVnY29sb3JzcGFjZS52Y3Byb2oKLQkqIGdzdC9maWx0ZXIvZmlsdGVyLnZjcHJvagotCSogZ3N0L2ZseC9mbHhkZWMudmNwcm9qCi0JKiBnc3QvZ29vbS9nb29tLnZjcHJvagotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS52Y3Byb2oKLQkqIGdzdC9sYXcvYWxhdy52Y3Byb2oKLQkqIGdzdC9sYXcvbXVsYXcudmNwcm9qCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EudmNwcm9qCi0JKiBnc3QvbWVkaWFuL21lZGlhbi52Y3Byb2oKLQkqIGdzdC9taXhtYXRyaXgvbWl4bWF0cml4LnZjcHJvagotCSogZ3N0L21wZWcxc3lzL21wZWcxc3lzdGVtZW5jb2RlLnZjcHJvagotCSogZ3N0L21wZWcxdmlkZW9wYXJzZS9tcDF2aWRlb3BhcnNlLnZjcHJvagotCSogZ3N0L21wZWcyc3ViL21wZWcyc3VidC52Y3Byb2oKLQkqIGdzdC9tcGVnYXVkaW8vbXBlZ2F1ZGlvLnZjcHJvagotCSogZ3N0L21wZWdhdWRpb3BhcnNlL21wZWdhdWRpb3BhcnNlLnZjcHJvagotCSogZ3N0L21wZWdzdHJlYW0vbXBlZ3N0cmVhbS52Y3Byb2oKLQkqIGdzdC9tdWx0aWZpbGVzaW5rL211bHRpZmlsZXNpbmsudmNwcm9qCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydC52Y3Byb2oKLQkqIGdzdC9vbmV0b24vb25ldG9uLnZjcHJvagotCSogZ3N0L292ZXJsYXkvb3ZlcmxheS52Y3Byb2oKLQkqIGdzdC9wYXNzdGhyb3VnaC9wYXNzdGhyb3VnaC52Y3Byb2oKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXgudmNwcm9qCi0JKiBnc3QvcmVhbG1lZGlhL3JtZGVtdXgudmNwcm9qCi0JKiBnc3QvcnRqcGVnL3J0anBlZy52Y3Byb2oKLQkqIGdzdC9ydHAvcnRwLnZjcHJvagotCSogZ3N0L3NpbGVuY2Uvc2lsZW5jZS52Y3Byb2oKLQkqIGdzdC9zaW5lL3NpbmVzcmMudmNwcm9qCi0JKiBnc3Qvc21vb3RoL3Ntb290aC52Y3Byb2oKLQkqIGdzdC9zbXB0ZS9zbXB0ZS52Y3Byb2oKLQkqIGdzdC9zcGVjdHJ1bS9zcGVjdHJ1bS52Y3Byb2oKLQkqIGdzdC9zcGVlZC9zcGVlZC52Y3Byb2oKLQkqIGdzdC9zdGVyZW8vc3RlcmVvLnZjcHJvagotCSogZ3N0L3N3aXRjaC9zd2l0Y2gudmNwcm9qCi0JKiBnc3QvdGFncy90YWdlZGl0LnZjcHJvagotCSogZ3N0L3RjcC90Y3AudmNwcm9qCi0JKiBnc3QvdHlwZWZpbmQvdHlwZWZpbmRmdW5jdGlvbnMudmNwcm9qCi0JKiBnc3QvdWRwL3VkcC52Y3Byb2oKLQkqIGdzdC92aWRlb2JveC92aWRlb2JveC52Y3Byb2oKLQkqIGdzdC92aWRlb2Nyb3AvdmlkZW9jcm9wLnZjcHJvagotCSogZ3N0L3ZpZGVvZHJvcC92aWRlb2Ryb3AudmNwcm9qCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ2FtbWEudmNwcm9qCi0JKiBnc3QvdmlkZW9maWx0ZXIvdmlkZW9iYWxhbmNlLnZjcHJvagotCSogZ3N0L3ZpZGVvZmlsdGVyL3ZpZGVvZmlsdGVyLnZjcHJvagotCSogZ3N0L3ZpZGVvZmlsdGVyL3ZpZGVvZmxpcC52Y3Byb2oKLQkqIGdzdC92aWRlb2ZsaXAvdmlkZW9mbGlwLnZjcHJvagotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci52Y3Byb2oKLQkqIGdzdC92aWRlb3JhdGUvdmlkZW9yYXRlLnZjcHJvagotCSogZ3N0L3ZpZGVvc2NhbGUvdmlkZW9zY2FsZS52Y3Byb2oKLQkqIGdzdC92aWRlb3Rlc3RzcmMvdmlkZW90ZXN0c3JjLnZjcHJvagotCSogZ3N0L3ZpcnR1YWxkdWIvdmlydHVhbGR1Yi52Y3Byb2oKLQkqIGdzdC92b2xlbnYvdm9sZW52LnZjcHJvagotCSogZ3N0L3ZvbHVtZS92b2x1bWUudmNwcm9qCi0JKiBnc3Qvd2F2ZW5jL3dhdmVuYy52Y3Byb2oKLQkqIGdzdC93YXZwYXJzZS93YXZwYXJzZS52Y3Byb2oKLQkqIGdzdC95NG0veTRtZW5jLnZjcHJvagotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLnZjcHJvagotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvZmlsdGVyLnZjcHJvagotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9jb2xvcmJhbGFuY2UudmNwcm9qCi0JKiBnc3QtbGlicy9nc3QvaWRjdC9pZHRjLnZjcHJvagotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby52Y3Byb2oKLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci52Y3Byb2oKLQkqIGdzdC1saWJzL2dzdC9uYXZpZ2F0aW9uL25hdmlnYXRpb24udmNwcm9qCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LnZjcHJvagotCSogZ3N0LWxpYnMvZ3N0L3Byb3BlcnR5cHJvYmUvcHJvcGVydHlwcm9iZS52Y3Byb2oKLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9yZXNhbXBsZS52Y3Byb2oKLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYudmNwcm9qCi0JKiBnc3QtbGlicy9nc3QvdHVuZXIvdHVuZXIudmNwcm9qCi0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8udmNwcm9qCi0JKiBnc3QtbGlicy9nc3QveG92ZXJsYXkveG92ZXJsYXkudmNwcm9qCi0JICBhdm9pZCBwcm9ibGVtcyB3aXRoIG1hdGguaCwgZml4IHJlbGVhc2UgZGVwZW5kYW5jeQotCSAgcmVuYW1lIEdTdHJlYW1lci0wLjgubGliIHRvIGxpYmdzdHJlYW1lci5saWIKLQotMjAwNC0wNy0yNyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfZGVjb3JhdGUpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194d2luZG93X2RlY29yYXRlKTogV2hlbgotCXRoZSBhdG9tIGlzIG5vdCBhdmFpbGFibGUgd2UgaGF2ZSB0byB1bmxvY2sgdGhlIG11dGV4LiBGaXhlcyAjMTQ4MDIzCi0KLTIwMDQtMDctMjYgIFN0ZXZlIExob21tZSAgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLmg6Ci0JICBpc3N1ZSBmb3IgYSB2YXJhcmcgbWFjcm8gd2l0aCBNU1ZDCi0KLTIwMDQtMDctMjYgIFN0ZXZlIExob21tZSAgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JKiBnc3QvZWZmZWN0di9lZmZlY3R2LnZjcHJvagotCSogZ3N0LWxpYnMvZ3N0L2lkY3QvaWRjdC52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLnZjcHJvajoKLQkqIGdzdC1saWJzL2dzdC9uYXZpZ2F0aW9uL25hdmlnYXRpb24udmNwcm9qOgotCSogZ3N0LWxpYnMvZ3N0L3Byb3BlcnR5cHJvYmUvcHJvcGVydHlwcm9iZS52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8udmNwcm9qOgotCSogZ3N0LWxpYnMvZ3N0L3hvdmVybGF5L3hvdmVybGF5LnZjcHJvajoKLQkgIGZpeGVzIGZvciBidWlsZCBwcm9ibGVtcwotCi0yMDA0LTA3LTI2ICBTdGV2ZSBMaG9tbWUgIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLmRlZjoKLQkqIGdzdC1saWJzL2dzdC9hdWRpby9yaWZmLmRlZjoKLQkgIGFkZCBzb21lIGRlZmluaXRpb25zIG5lZWRlZCBieSBwbHVnaW5zCi0KLTIwMDQtMDctMjYgIFN0ZXZlIExob21tZSAgPHN0ZXZlLmxob21tZUBmcmVlLmZyPgotCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmbXV4LmMKLQkgIEZpeCBzb21lIDY0IGJpdHMgY29uc3RhbnRzIHRvIGJlIGdsaWIgZnJpZW5kbHkKLQotMjAwNC0wNy0yNiAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIGdzdC9hYzNwYXJzZS9nc3RhYzNwYXJzZS5jCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmMKLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYwotCSogZ3N0L2NvbG9yc3BhY2UvZ3N0Y29sb3JzcGFjZS5jCi0JKiBnc3QvY29sb3JzcGFjZS95dXYycmdiLmgKLQkgIGxvY2FsIGluY2x1ZGUgZml4ZXMKLQotMjAwNC0wNy0yNiAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIHdpbjMyL2dzdC5zbG4KLQkgIGFkZCBtb3JlIHBsdWdpbnMgdG8gdGhlIGJ1aWxkCi0KLTIwMDQtMDctMjYgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jaGVja194c2htX2NhbGxzKSwKLQkoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX25ldyk6IFNvbWUgbW9yZSBmaXhlcyB0byBpbWFnZSBzaXplIGNhbGN1bGF0aW9uLgotCi0yMDA0LTA3LTI2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9saW5rKSwgKGdzdF9sZXZlbF9jaGFpbiksCi0JKGdzdF9sZXZlbF9zZXRfcHJvcGVydHkpLCAoZ3N0X2xldmVsX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9sZXZlbF9iYXNlX2luaXQpLCAoZ3N0X2xldmVsX2NsYXNzX2luaXQpOgotCSAgYWRkIGRlYnVnZ2luZyBjYXRlZ29yaWVzLiAgY2xlYW51cHMuCi0KLTIwMDQtMDctMjYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92aWRlb3NjYWxlL3ZpZGVvc2NhbGUuYzogKGdzdF92aWRlb3NjYWxlX3NldHVwKSwKLQkoZ3N0X3ZpZGVvc2NhbGVfcGxhbmFyNDExKSwgKGdzdF92aWRlb3NjYWxlX3BsYW5hcjQwMCksCi0JKGdzdF92aWRlb3NjYWxlX3BhY2tlZDQyMiksIChnc3RfdmlkZW9zY2FsZV9wYWNrZWQ0MjJyZXYpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjEpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjIpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjQpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0XzE2Yml0KSwKLQkoZ3N0X3ZpZGVvc2NhbGVfc2NhbGVfbmVhcmVzdF8yNGJpdCk6Ci0JICBmaXhlZCBzdHJpZGUgaXNzdWVzCi0JICB0ZXN0ZWQgd2l0aCAzMjB4MjQwIC0+IDMyMSwgMzIyLCAzMjQgeDI0MAotCSAgdGVzdGVkIHdpdGggWVYxMiwgSTQyMCwgWVVZMiwgVVlWWQotCSAgZml4ZWQgcGFja2VkNDIycmV2IChkb24ndCB0aGluayBpdCBjb3VsZCBoYXZlIHdvcmtlZCBiZWZvcmUpCi0JICBieSB0ZXN0aW5nIHdpdGggVVlWWQotCi0yMDA0LTA3LTI2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9sYW1lL2dzdGxhbWUuYzogKGdzdF9sYW1lX3NpbmtfbGluayksIChnc3RfbGFtZV9pbml0KSwKLQkoZ3N0X2xhbWVfY2hhaW4pLCAoZ3N0X2xhbWVfc2V0dXApLCAoZ3N0X2xhbWVfY2hhbmdlX3N0YXRlKSwKLQkocGx1Z2luX2luaXQpOgotCSAgYWRkIGRlYnVnZ2luZyBjYXRlZ29yeSwgYWRkIGVycm9yIGNoZWNrcyBsaWtlIGNoZWNraW5nIHJldHVybiB2YWx1ZXMKLQkgIG9mIHNldHVwIGNhbGxzLCBtYWtlIHN1cmUgaXQgc3RpbGwgd29ya3MgYWZ0ZXIKLQkgIFBMQVlJTkc9Pk5VTEw9PlBMQVlJTkcsIGZpeCBlbmNvZGluZyBvZiBtb25vIHN0cmVhbXMKLQotMjAwNC0wNy0yNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfZ2V0X3ZpZGVvX3N0cmVhbSksCi0JKGdzdF9tcGVnX2RlbXV4X2dldF9hdWRpb19zdHJlYW0pLAotCShnc3RfbXBlZ19kZW11eF9wcm9jZXNzX3ByaXZhdGUpOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhcnNlLmM6IChnc3RfbXBlZ19wYXJzZV9zZW5kX2RhdGEpOgotCUNoZWNrIGZvciBlcnJvciBjb2RlcyBmcm9tIHRoZSBuZWdvdGlhdGlvbiBmdW5jdGlvbnMuIE1ha2Ugc3VyZQotCXdlIHJlYWxseSBzZXQgdGhlIHBhZCBjYXBzIHdoZW4gYSBuZXcgcGFkIGlzIGNyZWF0ZWQuCi0KLTIwMDQtMDctMjYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKGdzdF9mZm1wZWdfY2Fwc190b19waXhfZm10KToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX3BhZF9saW5rKToKLQkgIGRvbid0IG1ha2UgZnVuY3Rpb24gZG8gdHdvIHRoaW5ncyBhdCB0aGUgc2FtZSB0aW1lIHdpdGhvdXQgcmVhc29uLgotCi0yMDA0LTA3LTI2ICBTdGV2ZSBMaG9tbWUgIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSogZ3N0L2FjM3BhcnNlL2FjM3BhcnNlLnZjcHJvagotCSogZ3N0L2FkZGVyL2FkZGVyLnZjcHJvagotCSogZ3N0L2FscGhhL2FscGhhLnZjcHJvagotCSogZ3N0L2FscGhhL2FscGhhY29sb3IudmNwcm9qCi0JKiBnc3QvYXNmZGVtdXgvYXNmLnZjcHJvagotCSogZ3N0L2F1ZGlvY29udmVydC9hdWRpb2NvbnZlcnQudmNwcm9qCi0JKiBnc3QvYXVkaW9yYXRlL2F1ZGlvcmF0ZS52Y3Byb2oKLQkqIGdzdC9hdWRpb3NjYWxlL2F1ZGlvc2NhbGUudmNwcm9qCi0JKiBnc3QvYXVwYXJzZS9hdXBhcnNlLnZjcHJvagotCSogZ3N0L2F2aS9hdmkudmNwcm9qCi0JKiBnc3QvY2R4YXBhcnNlL2NkeGFwYXJzZS52Y3Byb2oKLQkqIGdzdC9jaGFydC9jaGFydC52Y3Byb2oKLQkqIGdzdC9jb2xvcnNwYWNlL2NvbG9yc3BhY2UudmNwcm9qCi0JKiBnc3QvY3V0dGVyL2N1dHRlci52Y3Byb2oKLQkqIGdzdC9kZWJ1Zy9kZWJ1Zy52Y3Byb2oKLQkqIGdzdC9kZWJ1Zy9lZmVuY2UudmNwcm9qCi0JKiBnc3QvZGVidWcvbmF2aWdhdGlvbnRlc3QudmNwcm9qCi0JKiBnc3QvZGVpbnRlcmxhY2UvZGVpbnRlcmxhY2UudmNwcm9qCi0JKiBnc3QvZWZmZWN0di9lZmZlY3R2LnZjcHJvagotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZmZtcGVnY29sb3JzcGFjZS52Y3Byb2oKLQkqIGdzdC9maWx0ZXIvZmlsdGVyLnZjcHJvagotCSogZ3N0L2ZseC9mbHhkZWMudmNwcm9qCi0JKiBnc3QvZ29vbS9nb29tLnZjcHJvagotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS52Y3Byb2oKLQkqIGdzdC9sYXcvYWxhdy52Y3Byb2oKLQkqIGdzdC9sYXcvbXVsYXcudmNwcm9qCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EudmNwcm9qCi0JKiBnc3QvbWVkaWFuL21lZGlhbi52Y3Byb2oKLQkqIGdzdC9taXhtYXRyaXgvbWl4bWF0cml4LnZjcHJvagotCSogZ3N0L21wZWcxc3lzL21wZWcxc3lzdGVtZW5jb2RlLnZjcHJvagotCSogZ3N0L21wZWcxdmlkZW9wYXJzZS9tcDF2aWRlb3BhcnNlLnZjcHJvagotCSogZ3N0L21wZWcyc3ViL21wZWcyc3VidC52Y3Byb2oKLQkqIGdzdC9tcGVnYXVkaW8vbXBlZ2F1ZGlvLnZjcHJvagotCSogZ3N0L21wZWdhdWRpb3BhcnNlL21wZWdhdWRpb3BhcnNlLnZjcHJvagotCSogZ3N0L21wZWdzdHJlYW0vbXBlZ3N0cmVhbS52Y3Byb2oKLQkqIGdzdC9tdWx0aWZpbGVzaW5rL211bHRpZmlsZXNpbmsudmNwcm9qCi0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydC52Y3Byb2oKLQkqIGdzdC9vbmV0b24vb25ldG9uLnZjcHJvagotCSogZ3N0L292ZXJsYXkvb3ZlcmxheS52Y3Byb2oKLQkqIGdzdC9wYXNzdGhyb3VnaC9wYXNzdGhyb3VnaC52Y3Byb2oKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXgudmNwcm9qCi0JKiBnc3QvcmVhbG1lZGlhL3JtZGVtdXgudmNwcm9qCi0JKiBnc3QvcnRqcGVnL3J0anBlZy52Y3Byb2oKLQkqIGdzdC9ydHAvcnRwLnZjcHJvagotCSogZ3N0L3NpbGVuY2Uvc2lsZW5jZS52Y3Byb2oKLQkqIGdzdC9zaW5lL3NpbmVzcmMudmNwcm9qCi0JKiBnc3Qvc21vb3RoL3Ntb290aC52Y3Byb2oKLQkqIGdzdC9zbXB0ZS9zbXB0ZS52Y3Byb2oKLQkqIGdzdC9zcGVjdHJ1bS9zcGVjdHJ1bS52Y3Byb2oKLQkqIGdzdC9zcGVlZC9zcGVlZC52Y3Byb2oKLQkqIGdzdC9zdGVyZW8vc3RlcmVvLnZjcHJvagotCSogZ3N0L3N3aXRjaC9zd2l0Y2gudmNwcm9qCi0JKiBnc3QvdGFncy90YWdlZGl0LnZjcHJvagotCSogZ3N0L3RjcC90Y3AudmNwcm9qCi0JKiBnc3QvdHlwZWZpbmQvdHlwZWZpbmRmdW5jdGlvbnMudmNwcm9qCi0JKiBnc3QvdWRwL3VkcC52Y3Byb2oKLQkqIGdzdC92aWRlb2JveC92aWRlb2JveC52Y3Byb2oKLQkqIGdzdC92aWRlb2Nyb3AvdmlkZW9jcm9wLnZjcHJvagotCSogZ3N0L3ZpZGVvZHJvcC92aWRlb2Ryb3AudmNwcm9qCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ2FtbWEudmNwcm9qCi0JKiBnc3QvdmlkZW9maWx0ZXIvdmlkZW9iYWxhbmNlLnZjcHJvagotCSogZ3N0L3ZpZGVvZmlsdGVyL3ZpZGVvZmlsdGVyLnZjcHJvagotCSogZ3N0L3ZpZGVvZmlsdGVyL3ZpZGVvZmxpcC52Y3Byb2oKLQkqIGdzdC92aWRlb2ZsaXAvdmlkZW9mbGlwLnZjcHJvagotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci52Y3Byb2oKLQkqIGdzdC92aWRlb3JhdGUvdmlkZW9yYXRlLnZjcHJvagotCSogZ3N0L3ZpZGVvc2NhbGUvdmlkZW9zY2FsZS52Y3Byb2oKLQkqIGdzdC92aWRlb3Rlc3RzcmMvdmlkZW90ZXN0c3JjLnZjcHJvagotCSogZ3N0L3ZpcnR1YWxkdWIvdmlydHVhbGR1Yi52Y3Byb2oKLQkqIGdzdC92b2xlbnYvdm9sZW52LnZjcHJvagotCSogZ3N0L3ZvbHVtZS92b2x1bWUudmNwcm9qCi0JKiBnc3Qvd2F2ZW5jL3dhdmVuYy52Y3Byb2oKLQkqIGdzdC93YXZwYXJzZS93YXZwYXJzZS52Y3Byb2oKLQkqIGdzdC95NG0veTRtZW5jLnZjcHJvagotCSAgbW9yZSBwbHVnaW5zIHN1cHBvcnRlZCB1bmRlciB3aW5kb3dzCi0KLTIwMDQtMDctMjYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX25ldyksCi0JKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9wdXQpLCAoZ3N0X3hpbWFnZXNpbmtfcmVuZWdvdGlhdGVfc2l6ZSksCi0JKGdzdF94aW1hZ2VzaW5rX2NoYWluKSwgKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3h2aW1hZ2VfbmV3KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKSwgKGdzdF94dmltYWdlc2lua19idWZmZXJfYWxsb2MpOgotCSAgQWRkIGRlYnVnZ2luZyBzdGF0ZW1lbnRzLiAgVXNlIHRoZSBzaXplcyBhcyByZXR1cm5lZCBieSB0aGUKLQkgICpDcmVhdGVJbWFnZSBjYWxscy4KLQotMjAwNC0wNy0yNiAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jIChnc3RfdGNwY2xpZW50c3JjX2dldCk6IE1ha2Ugc3VyZSB0aGF0Ci0JdGhlIHBhZCBpcyBuZWdvdGlhdGVkLgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmMgKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NoYWluKTogRGl0dG8KLQotMjAwNC0wNy0yNiAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvY29sb3JiYWxhbmNlLnZjcHJvajoKLQkqIGdzdC1saWJzL2dzdC9pZGN0L2lkY3QudmNwcm9qOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXIudmNwcm9qOgotCSogZ3N0LWxpYnMvZ3N0L25hdmlnYXRpb24vbmF2aWdhdGlvbi52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LnZjcHJvajoKLQkqIGdzdC1saWJzL2dzdC9wcm9wZXJ0eXByb2JlL3Byb3BlcnR5cHJvYmUudmNwcm9qOgotCSogZ3N0LWxpYnMvZ3N0L3Jlc2FtcGxlL3Jlc2FtcGxlLnZjcHJvajoKLQkqIGdzdC1saWJzL2dzdC90dW5lci90dW5lci52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8udmNwcm9qOgotCSogZ3N0LWxpYnMvZ3N0L3hvdmVybGF5L3hvdmVybGF5LnZjcHJvajoKLQkgIG1vcmUgcGx1Z2lucyBzdXBwb3J0ZWQgdW5kZXIgd2luZG93cwotCi0yMDA0LTA3LTI1IElhaW4gPGlhaW5AcHJldHR5cGVvcGxlLm9yZz4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmMgKGdzdF93YXZwYXJzZV9mbXQpOiBTZXQgdGhlIGNhcHMgb24gdGhlCi0JcGFkIG5vdyByYXRoZXIgdGhhbiB3aGVuIHRoZSBwYWQgaXMgY3JlYXRlZCBiZWNhdXNlIHN0YXRlIGNoYW5nZXMgd2lwZQotCWV4cGxpY2l0IGNhcHMgKGZpeGVzICMxNDgwNDMpLgotCi0yMDA0LTA3LTI1ICBTZWJhc3RpZW4gQ290ZSAgPHNjNUBoZXJtZXMudXNoZXJiLmNhPgotCi0JcmV2aWV3ZWQgYnkgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOgotCSAgZml4IG1hZCBwbHVnaW4gY3Jhc2hpbmcgb24gU3VuIChmaXhlcyAjMTQ4Mjg5KQotCi0yMDA0LTA3LTI1ICBTdGV2ZSBMaG9tbWUgIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSogZ3N0L2F2aS9hdmkuZGVmOgotCSogZ3N0L2F2aS9hdmkudmNwcm9qOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLmRlZjoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS52Y3Byb2o6Ci0JICByZW1vdmUgdW51c2VkIC5kZWYgZmlsZXMKLQotMjAwNC0wNy0yNSAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5jOgotCSAgQ2xlYW4gdGhlIGxvY2FsIGluY2x1ZGUKLQotMjAwNC0wNy0yNSAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIHdpbjMyL2dzdC5zbG46Ci0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW8uZGVmOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLnZjcHJvajoKLQkqIGdzdC1saWJzL2dzdC9hdWRpby9hdWRpb2ZpbHRlci52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvYXVkaW8vcmlmZi5kZWY6Ci0JKiBnc3QtbGlicy9nc3QvYXVkaW8vcmlmZi52Y3Byb2o6Ci0JKiBnc3QtbGlicy9nc3QvZ3N0LWxpYnMuZGVmOgotCSogZ3N0LWxpYnMvZ3N0L2dzdC1saWJzLnZjcHJvajoKLQkqIGdzdC9hdmkvYXZpLnZjcHJvajoKLQkqIGdzdC9hdmkvYXZpLnZjcHJvajoKLQkgIENvcHkgdGhlIGZpbGVzIHdoZXJlIG5lZWRlZCBhZnRlciBidWlsZGluZywgY2xlYW5lciBwcm9qZWN0cwotCi0yMDA0LTA3LTI1ICBTdGV2ZSBMaG9tbWUgIDxzdGV2ZS5saG9tbWVAZnJlZS5mcj4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYzoKLQkgIEZpeCBzb21lIDY0IGJpdHMgY29uc3RhbnRzIHRvIGJlIGdsaWIgZnJpZW5kbHkKLQotMjAwNC0wNy0yNCAgU3RldmUgTGhvbW1lICA8c3RldmUubGhvbW1lQGZyZWUuZnI+Ci0KLQkqIHdpbjMyL2dzdC5zbG46Ci0JKiBnc3QtbGlicy9nc3QvZ3N0LWxpYnMuZGVmOgotCSogZ3N0LWxpYnMvZ3N0L2dzdC1saWJzLnZjcHJvajoKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS5kZWY6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EudmNwcm9qOgotCSAgQWRkIHRoZSBwcmVsaW1pbmFyeSBjYW52YXMgdG8gYnVpbGQgcGx1Z2lucyBvbiBXaW4zMgotCi0yMDA0LTA3LTIzICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9saW5rKToKLQkgIGRvbid0IGVuZm9yZSBuZWdvdGlhdGlvbiBmcm9tIHNvdXJjZSBzaWRlLCBpdCBicmVha3MKLQkgIHNpbmVzcmMgISBhdWRpb2NvbnZlcnQgISBvc3NzaW5rCi0KLTIwMDQtMDctMjIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChwbHVnaW5faW5pdCk6IEFkZCB0eXBlZmluZAotCWZvciBFTEYgZmlsZXMsIHNpbmNlIHRoZXkgY2FuIGVhc2lseSBiZSByZWNvZ25pemVkIGFzIGF1ZGlvL21wZWcuCi0JKGJ1ZyAjMTQ3NDQxKQotCi0yMDA0LTA3LTIyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdmlkZW9zY2FsZS92aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9zZXR1cCksCi0JKGdzdF92aWRlb3NjYWxlX3BsYW5hcjQxMSksIChnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0XzMyYml0KSwKLQkoZ3N0X3ZpZGVvc2NhbGVfc2NhbGVfbmVhcmVzdF8yNGJpdCksCi0JKGdzdF92aWRlb3NjYWxlX3NjYWxlX25lYXJlc3RfMTZiaXQpOgotCSAgZml4IDE2Yml0IGFuZCAyNGJpdCBmb3Igc3RyaWRlICgyNGJpdCBtaWdodCBuZWVkIHRlc3RpbmcpCi0JICBkb24ndCBwcmV0ZW5kIHdlIGRvIG1vcmUgdGhhbiBvbmUgYWxnb3JpdGhtCi0KLTIwMDQtMDctMjIgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L01ha2VmaWxlLmFtOgotCSogZ3N0L211bHRpZmlsZXNpbmsvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbXVsdGlmaWxlc2luay9nc3RtdWx0aWZpbGVzaW5rLmM6Ci0JKGdzdF9tdWx0aWZpbGVzaW5rX2dldF9mb3JtYXRzKSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfZ2V0X3F1ZXJ5X3R5cGVzKSwgKF9kb19pbml0KSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfYmFzZV9pbml0KSwgKGdzdF9tdWx0aWZpbGVzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGlmaWxlc2lua19pbml0KSwgKGdzdF9tdWx0aWZpbGVzaW5rX2Rpc3Bvc2UpLAotCShnc3RfbXVsdGlmaWxlc2lua19zZXRfbG9jYXRpb24pLCAoZ3N0X211bHRpZmlsZXNpbmtfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9tdWx0aWZpbGVzaW5rX29wZW5fZmlsZSksCi0JKGdzdF9tdWx0aWZpbGVzaW5rX2Nsb3NlX2ZpbGUpLCAoZ3N0X211bHRpZmlsZXNpbmtfbmV4dF9maWxlKSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfcGFkX3F1ZXJ5KSwgKGdzdF9tdWx0aWZpbGVzaW5rX2hhbmRsZV9ldmVudCksCi0JKGdzdF9tdWx0aWZpbGVzaW5rX2NoYWluKSwgKGdzdF9tdWx0aWZpbGVzaW5rX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9tdWx0aWZpbGVzaW5rX3VyaV9nZXRfdHlwZSksCi0JKGdzdF9tdWx0aWZpbGVzaW5rX3VyaV9nZXRfcHJvdG9jb2xzKSwKLQkoZ3N0X211bHRpZmlsZXNpbmtfdXJpX2dldF91cmkpLCAoZ3N0X211bHRpZmlsZXNpbmtfdXJpX3NldF91cmkpLAotCShnc3RfbXVsdGlmaWxlc2lua191cmlfaGFuZGxlcl9pbml0KSwgKHBsdWdpbl9pbml0KToKLQkqIGdzdC9tdWx0aWZpbGVzaW5rL2dzdG11bHRpZmlsZXNpbmsuaDoKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbToKLQkqIHRlc3RzdWl0ZS9tdWx0aWZpbGVzaW5rL01ha2VmaWxlLmFtOgotCSogdGVzdHN1aXRlL211bHRpZmlsZXNpbmsvZmFrZXNyY190ZXN0LmM6IChnc3RfbmV3bWVkaWFfYmFzZV9pbml0KSwKLQkoZ3N0X25ld21lZGlhX2NsYXNzX2luaXQpLCAoZ3N0X25ld21lZGlhX2luaXQpLAotCShnc3RfbmV3bWVkaWFfY2hhaW4pLCAoZ3N0X25ld21lZGlhX3RyaWdnZXIpLCAodGVzdF9mb3JtYXQpLAotCShuZXdmaWxlX3NpZ25hbCksICh0ZXN0X3NpZ25hbCksIChtYWluKToKLQltdWx0aWZpbGVzaW5rIHBsdWdpbiBmb3IgY3JlYXRpbmcgbmV3IGZpbGVzIGV2ZXJ5IHRpbWUgYSBuZXcgbWVkaWEKLQlkaXNjb250aW51aXR5IGV2ZW50IG9jY3VycwotCi0yMDA0LTA3LTIyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2FscGhhL01ha2VmaWxlLmFtOgotCSogZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYzogKGdzdF9hbHBoYV9jb2xvcl9nZXRfdHlwZSksCi0JKGdzdF9hbHBoYV9jb2xvcl9iYXNlX2luaXQpLCAoZ3N0X2FscGhhX2NvbG9yX2NsYXNzX2luaXQpLAotCShnc3RfYWxwaGFfY29sb3JfaW5pdCksIChnc3RfYWxwaGFfY29sb3Jfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2FscGhhX2NvbG9yX2dldF9wcm9wZXJ0eSksIChnc3RfYWxwaGFfY29sb3Jfc2lua19saW5rKSwKLQkodHJhbnNmb3JtKSwgKGdzdF9hbHBoYV9jb2xvcl9jaGFpbiksCi0JKGdzdF9hbHBoYV9jb2xvcl9jaGFuZ2Vfc3RhdGUpLCAocGx1Z2luX2luaXQpOgotCVN0dXBpZCBwbHVnaW4gdG8gdG8gUkdCQSB0byBBWVVWIGNvbnZlcnNpb24gYmVjYXVzZSBub25lIG9mCi0JdGhlIGNvbG9yc3BhY2UgcGx1Z2lucyBjYW4gaGFuZGxlIHRoYXQgeWV0LgotCi0yMDA0LTA3LTIyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXhhbXBsZXMvc2Vla2luZy9zZWVrLmM6ICh1cGRhdGVfc2NhbGUpLCAobWFpbik6Ci0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChnc3RfZGVjb2RlX2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2RlY29kZV9iaW5faXNfZHluYW1pYyksCi0JKGdzdF9kZWNvZGVfYmluX2ZhY3RvcnlfZmlsdGVyKSwgKGNvbXBhcmVfcmFua3MpLCAocHJpbnRfZmVhdHVyZSksCi0JKGdzdF9kZWNvZGVfYmluX2luaXQpLCAoZ3N0X2RlY29kZV9iaW5fZGlzcG9zZSksCi0JKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLCAodHJ5X3RvX2xpbmtfMSksIChuZXdfcGFkKSwKLQkobm9fbW9yZV9wYWRzKSwgKGNsb3NlX2xpbmspLCAodHlwZV9mb3VuZCksCi0JKGdzdF9kZWNvZGVfYmluX3NldF9wcm9wZXJ0eSksIChnc3RfZGVjb2RlX2Jpbl9nZXRfcHJvcGVydHkpLAotCShwbHVnaW5faW5pdCk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2dldF90eXBlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksIChnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fZGlzcG9zZSksIChxdWV1ZV9vdmVycnVuKSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChyZW1vdmVfcHJlcm9sbHMpLCAodW5rbm93bl90eXBlKSwKLQkobm9fbW9yZV9wYWRzKSwgKG5ld19zdHJlYW0pLCAoc2V0dXBfc291cmNlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9wcm9wZXJ0eSksCi0JKHBsYXlfYmFzZV9lb3MpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9yZW1vdmVfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX211dGVfc3RyZWFtKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fdW5saW5rX3N0cmVhbSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9zdHJlYW1pbmZvKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmluLmM6IChnZW5fdmlkZW9fZWxlbWVudCksCi0JKGdlbl9hdWRpb19lbGVtZW50KToKLQkqIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1pbmZvLmg6Ci0JTW9yZSBwbGF5YmFjayB1cGRhdGVzLCBhdHRlbXB0IHRvIGZpeCB0aGluZ3MgYWZ0ZXIgdGhlIHN0YXRlIGNoYW5nZQotCWJyZWFrYWdlLgotCi0yMDA0LTA3LTIyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdmlkZW9zY2FsZS92aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9wbGFuYXI0MTEpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0XzE2Yml0KToKLQkgIGNvbW1lbnQgYWxnb3JpdGhtCi0KLTIwMDQtMDctMjIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6Ci0JKGdzdF92aWRlb3Rlc3RzcmNfY2xhc3NfaW5pdCksIChnc3RfdmlkZW90ZXN0c3JjX3NyY19saW5rKSwKLQkoZ3N0X3ZpZGVvdGVzdHNyY19pbml0KSwgKGdzdF92aWRlb3Rlc3RzcmNfZ2V0KSwKLQkoZ3N0X3ZpZGVvdGVzdHNyY19zZXRfcGF0dGVybiksIChnc3RfdmlkZW90ZXN0c3JjX3NldF9wcm9wZXJ0eSksCi0JKGdzdF92aWRlb3Rlc3RzcmNfZ2V0X3Byb3BlcnR5KToKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmg6Ci0JKiBnc3QvdmlkZW90ZXN0c3JjL3ZpZGVvdGVzdHNyYy5jOgotCSogZ3N0L3ZpZGVvdGVzdHNyYy92aWRlb3Rlc3RzcmMuaDoKLQkgIGNsZWFudXAgYW5kIGNvbW1lbnRpbmcKLQotMjAwNC0wNy0yMSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfaW5pdCksCi0JKGdzdF9vZ2dfZGVtdXhfZ2V0X2Zvcm1hdHMpLCAoZ3N0X29nZ19kZW11eF9zcmNfcXVlcnkpLAotCShnc3Rfb2dnX2RlbXV4X3NyY19ldmVudCksIChnc3Rfb2dnX2RlbXV4X3NyY19jb252ZXJ0KSwKLQkoZ3N0X29nZ19kZW11eF9oYW5kbGVfZXZlbnQpLCAoZ3N0X29nZ19kZW11eF9zZWVrX2JlZm9yZSksCi0JKF9maW5kX2NoYWluX2dldF91bmtub3duX3BhcnQpLCAoX2ZpbmRfc3RyZWFtc19jaGVjayksCi0JKGdzdF9vZ2dfZGVtdXhfcHVzaCksIChnc3Rfb2dnX3BhZF9wdXNoKToKLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6ICh0aGVvcmFfZ2V0X2Zvcm1hdHMpLAotCSh0aGVvcmFfZGVjX3NyY19jb252ZXJ0KSwgKHRoZW9yYV9kZWNfc2lua19jb252ZXJ0KSwKLQkodGhlb3JhX2RlY19zcmNfcXVlcnkpLCAodGhlb3JhX2RlY19zcmNfZXZlbnQpLCAodGhlb3JhX2RlY19ldmVudCksCi0JKHRoZW9yYV9kZWNfY2hhaW4pOgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfZ2V0X2Zvcm1hdHMpLAotCSh2b3JiaXNfZGVjX2NvbnZlcnQpLCAodm9yYmlzX2RlY19zcmNfcXVlcnkpLAotCSh2b3JiaXNfZGVjX3NyY19ldmVudCksICh2b3JiaXNfZGVjX2V2ZW50KToKLQlNb3JlIHNlZWtpbmcgZml4ZXMsIG9nZ2RlbXV4IG5vdyBzdXBwb3J0cyBzZWVraW5nIHRvIHRpbWUgYW5kCi0JdXNlcyB0aGUgZG93bnN0cmVhbSBlbGVtZW50IHRvIGNvbnZlcnQgZ3JhbnVsZXBvcyB0byB0aW1lLgotCVNlZWtpbmcgaW4gdGhlb3JhLW9ubHkgb2dnIGZpbGVzIG5vdyB3b3Jrcy4KLQotMjAwNC0wNy0yMSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6IChnc3RfdGhlb3JhX2RlY19pbml0KSwKLQkodGhlb3JhX2dldF9mb3JtYXRzKSwgKHRoZW9yYV9nZXRfZXZlbnRfbWFza3MpLAotCSh0aGVvcmFfZ2V0X3F1ZXJ5X3R5cGVzKSwgKHRoZW9yYV9kZWNfc3JjX2NvbnZlcnQpLAotCSh0aGVvcmFfZGVjX3NpbmtfY29udmVydCksICh0aGVvcmFfZGVjX3NyY19xdWVyeSksCi0JKHRoZW9yYV9kZWNfc3JjX2V2ZW50KSwgKHRoZW9yYV9kZWNfZXZlbnQpLCAodGhlb3JhX2RlY19jaGFpbik6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19nZXRfZm9ybWF0cyksCi0JKHZvcmJpc19nZXRfZXZlbnRfbWFza3MpLCAodm9yYmlzX2dldF9xdWVyeV90eXBlcyksCi0JKGdzdF92b3JiaXNfZGVjX2luaXQpLCAodm9yYmlzX2RlY19jb252ZXJ0KSwKLQkodm9yYmlzX2RlY19zcmNfcXVlcnkpLCAodm9yYmlzX2RlY19zcmNfZXZlbnQpLCAodm9yYmlzX2RlY19ldmVudCk6Ci0JQWRkZWQgcXVlcnkvY29udmVydC9mb3JtYXRzIGZ1bmN0aW9ucyB0byB2b3JiaXMgYW5kIHRoZW9yYSBkZWNvZGVycwotCXNvIHRoYXQgdGhlIG91dHNpZGUgd29ybGQgY2FuIHVzZSB0aGVtIHRvby4gRml4ZWQgc2Vla2luZyBvbiBhbgotCW9nZy90aGVvcmEvdm9yYmlzIGZpbGUgYnkgZGlzYWJsaW5nIHRoZSBzZWVraW5nIHNlZWtpbmcgb24gdGhlCi0JdGhlb3JhIHNyY3BhZC4KLQotMjAwNC0wNy0yMSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9uZXcpLAotCShnc3RfeGltYWdlc2lua19yZW5lZ290aWF0ZV9zaXplKSwgKGdzdF94aW1hZ2VzaW5rX3NpbmtfbGluayksCi0JKGdzdF94aW1hZ2VzaW5rX2NoYWluKSwgKGdzdF94aW1hZ2VzaW5rX3NldF94d2luZG93X2lkKTogT3B0aW1pemUKLQlpbWFnZXMgY3JlYXRpb24gZm9yIGJvdGggZWxlbWVudHMuIFdlIGRvbid0IGNyZWF0ZSB0aGUgaW1hZ2Ugb24gY2FwcwotCW5lZ28gb3IgcmVuZWdvLCB3ZSBqdXN0IGRlc3Ryb3kgdGhlIGludGVybmFsIG9uZSBpZiBwcmVzZW50IGlmIGl0IGRvZXMKLQlub3QgbWF0Y2ggdGhlIG5lZWRzLiBUaGUgY2hhaW4gZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBjcmVhdGluZyBhIG5ldwotCWltYWdlIHdoZW4gbmVlZGVkLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyksCi0JKGdzdF94dmltYWdlc2lua194d2luZG93X2RlY29yYXRlKSwgKGdzdF94dmltYWdlc2lua19zaW5rX2xpbmspLAotCShnc3RfeHZpbWFnZXNpbmtfY2hhaW4pLCAoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyksCi0JKGdzdF94dmltYWdlc2lua19zZXRfeHdpbmRvd19pZCk6IEFkZGl0aW9uYWxseSB4dmltYWdlIG5vdyBjb250YWlucwotCXRoZSBpbWFnZSBmb3JtYXQgaW5mb3JtYXRpb24uIFRoZSBidWZmZXIgcG9vbCBjaGVja3MgZm9yIHRoZSBjb250ZXh0Ci0JaW1hZ2UgZm9ybWF0IGFuZCBkaXNjYXJkIGltYWdlcyB3aXRoIGRpZmZlcmVudCBmb3JtYXRzLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuaDogQWRkaW5nIGltX2Zvcm1hdCBpbiB0aGUgeHZpbWFnZSBzdHJ1Y3R1cmUuCi0KLTIwMDQtMDctMjEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvbG9yc3BhY2UuYzoKLQkoZ3N0X2ZmbXBlZ2NvbG9yc3BhY2VfY2hhaW4pOgotCSAgbm8gcG9pbnQgaW4gZG9pbmcgYW55IGNoYWluaW5nIGlmIHRoZSBwYWQgd2Ugd2FudCB0byBwdXNoIGZyb20KLQkgIGlzbid0IHVzYWJsZS4KLQotMjAwNC0wNy0yMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCShnc3RfcmlmZl9jcmVhdGVfYXVkaW9fY2Fwc193aXRoX2RhdGEpOgotCSAgRml4IGRvdWJsZSBlbmQtdG8tbmF0aXZlIHN5bWJvbCBjb252ZXJzaW9uICgjMTQ4MDIxKS4KLQotMjAwNC0wNy0yMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfZGVjb3JhdGUpOgotCURvbid0IHVzZSBhbiBBdG9tIHRoYXQgZG9lc24ndCBleGlzdC4KLQotMjAwNC0wNy0yMCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzogKGdzdF9tdWx0aWZkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpZmRzaW5rX2FkZCksIChnc3RfbXVsdGlmZHNpbmtfZ2V0X3N0YXRzKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9yZW1vdmUpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5oOgotCU1vcmUgbXVsdGlmZHNpbmsgc3RhdHMuIEF2b2lkIGRlYWRsb2NrIGJ5IHJlbGVhc2luZyBsb2NrcwotCWJlZm9yZSBzZW5kaW5nIG91dCBhIHNpZ25hbC4KLQotMjAwNC0wNy0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogcG8vTElOR1VBUzoKLQkqIHBvL2h1LnBvOgotCSAgYWRkZWQgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uIChMYXN6bG8gRHZvcm5paykKLQotMjAwNC0wNy0yMCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuYzogKGdzdF9tdWx0aWZkc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpZmRzaW5rX2FkZCksIChnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKSwKLQkoZ3N0X211bHRpZmRzaW5rX3F1ZXVlX2J1ZmZlcik6Ci0JKiBnc3QvdGNwL2dzdHRjcC1tYXJzaGFsLmxpc3Q6Ci0JRml4ZWQgdGhlIHN0dXBpZCBtYXJzaGFsIGRlZmluaXRpb24uCi0KLTIwMDQtMDctMjAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfY2xhc3NfaW5pdCksCi0JKGdzdF9tdWx0aWZkc2lua19pbml0KSwgKGdzdF9tdWx0aWZkc2lua19hZGQpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKSwKLQkoZ3N0X211bHRpZmRzaW5rX3F1ZXVlX2J1ZmZlciksIChnc3RfbXVsdGlmZHNpbmtfY2hhaW4pLAotCShnc3RfbXVsdGlmZHNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9tdWx0aWZkc2lua19nZXRfcHJvcGVydHkpLAotCShnc3RfbXVsdGlmZHNpbmtfaW5pdF9zZW5kKToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQlBZGRlZCBtb3JlIHN0YXRzLCBhZGRlZCB0aW1lb3V0IGZvciBhIGNsaWVudCwgZml4ZWQgc29tZSB0eXBvcwotCWFuZCBhZGRlZCBzb21lIGNvbW1lbnRzLgotCi0yMDA0LTA3LTIwICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X211bHRpZmRzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGlmZHNpbmtfYWRkKSwgKGdzdF9tdWx0aWZkc2lua19nZXRfc3RhdHMpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwLW1hcnNoYWwubGlzdDoKLQlBZGRlZCBnZXRfc3RhdHMgbWV0aG9kIHRoYXQgcmV0dXJucyBhIEdWYWx1ZUFycmF5IG9mCi0Jc3RhdHMgdmFsdWVzLgotCi0yMDA0LTA3LTE5ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9sYWRzcGEvZ3N0bGFkc3BhLmM6IChnc3RfbGFkc3BhX2Jhc2VfaW5pdCk6Ci0JICBtYWtlIHN1cmUgbG9uZ25hbWUsIGRlc2NyaXB0aW9uIGFuZCBhdXRob3IgYXJlIHZhbGlkIFVURi04Ci0KLTIwMDQtMDctMTkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2V0X3Byb3BlcnR5KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF9wcm9wZXJ0eSk6Ci0JICBtYWtlIHN1cmUgU1lOQ0hST05PVVMgaXMgcmVzcGVjdGVkIGFmdGVyIGdldHRpbmcgdGhlIFggY29udGV4dAotCi0yMDA0LTA3LTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cCk6Ci0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmg6Ci0JICBhZGQgQmxvY2tSZWZlcmVuY2UgdGFnIGFuZCBpZ25vcmUgaXQgdG8gY2xlYXIgb3V0IGxvZy4KLQkgIGlnbm9yZSBOQVZJR0FUSU9OIGV2ZW50cyB0byBjbGVhciBvdXQgbG9nLgotCi0yMDA0LTA3LTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9jbGFzc19pbml0KSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5jOiAoZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0KToKLQkgIGFkZCBkZWJ1ZyBjYXRlZ29yaWVzCi0KLTIwMDQtMDctMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvbGlicG5nL01ha2VmaWxlLmFtOgotCSogZXh0L2xpYnBuZy9nc3RwbmcuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZGVjLmM6ICh1c2VyX2Vycm9yX2ZuKSwgKHVzZXJfd2FybmluZ19mbiksCi0JKGdzdF9wbmdkZWNfZ2V0X3R5cGUpLCAoZ3N0X3BuZ2RlY19iYXNlX2luaXQpLAotCShnc3RfcG5nZGVjX2NsYXNzX2luaXQpLCAoZ3N0X3BuZ2RlY19zaW5rbGluayksIChnc3RfcG5nZGVjX2luaXQpLAotCShnc3RfcG5nZGVjX3NyY19nZXRjYXBzKSwgKHVzZXJfcmVhZF9kYXRhKSwgKGdzdF9wbmdkZWNfY2hhaW4pOgotCSogZXh0L2xpYnBuZy9nc3RwbmdkZWMuaDoKLQlBZGRlZCBwbmcgZGVjb2Rlci4KLQotMjAwNC0wNy0xNiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXJyb3IpLAotCShnc3RfeGltYWdlc2lua19jaGVja194c2htX2NhbGxzKSwgKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9uZXcpLAotCShnc3RfeGltYWdlc2lua194aW1hZ2VfZGVzdHJveSksIChnc3RfeGltYWdlc2lua19zaW5rX2xpbmspLAotCShnc3RfeGltYWdlc2lua19jaGFpbiksIChnc3RfeGltYWdlc2lua19idWZmZXJfZnJlZSksCi0JKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyksIChnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9kZXN0cm95KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKSwgKGdzdF94dmltYWdlc2lua19idWZmZXJfZnJlZSksCi0JKGdzdF94dmltYWdlc2lua19idWZmZXJfYWxsb2MpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuaDogR2V0dGluZyB0aGUgMiB2aWRlbyBzaW5rcyBzeW5jaHJvbml6ZWQKLQlhZ2Fpbi4gVXNpbmcgaW50ZXJuYWwgZGF0YSBwb2ludGVyIG9mIHRoZSB4KHYpaW1hZ2UgdG8gc3RvcmUgaW1hZ2UncwotCWRhdGEgdG8gYmUgY29oZXJlbnQgd2l0aCB0aGUgYnVmZmVyIGFsbG9jIG1lY2hhbmlzbS4gSW52ZXN0aWdhdGVkIHRoZQotCWltYWdlIGRlc3RydWN0aW9uIGNvZGUgdG8gYmUgc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgZ2V0cyBmcmVlZCBjb3JyZWN0bHkuCi0KLTIwMDQtMDctMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzoKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX3ZpZHNfd2l0aF9kYXRhKSwKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX2F1ZHNfd2l0aF9kYXRhKToKLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JKGdzdF9hdmlfZGVtdXhfYWRkX3N0cmVhbSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpOgotCU1ha2Ugc3VyZSB3ZSBkb24ndCBjcmVhdGUgMCBzaXplZCBzdWJidWZmZXJzIGluIHJpZmYtcmVhZC4KLQlTaWduYWwgdGhlIG5vIG1vcmUgcGFkcyBzaWduYWwgYWZ0ZXIgcmVhZGluZyB0aGUgYXZpIGhlYWRlci4KLQotMjAwNC0wNy0xNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9nc3RkZWNvZGViaW4uYzogKGdzdF9kZWNvZGVfYmluX2dldF90eXBlKSwKLQkoZ3N0X2RlY29kZV9iaW5fY2xhc3NfaW5pdCksIChnc3RfZGVjb2RlX2Jpbl9pc19keW5hbWljKSwKLQkoZ3N0X2RlY29kZV9iaW5fZmFjdG9yeV9maWx0ZXIpLCAoY29tcGFyZV9yYW5rcyksIChwcmludF9mZWF0dXJlKSwKLQkoZ3N0X2RlY29kZV9iaW5faW5pdCksIChnc3RfZGVjb2RlX2Jpbl9kaXNwb3NlKSwKLQkoZmluZF9jb21wYXRpYmxlcyksIChjbG9zZV9wYWRfbGluayksICh0cnlfdG9fbGlua18xKSwgKG5ld19wYWQpLAotCShub19tb3JlX3BhZHMpLCAoY2xvc2VfbGluayksICh0eXBlX2ZvdW5kKSwKLQkoZ3N0X2RlY29kZV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9kZWNvZGVfYmluX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9kZWNvZGVfYmluX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2dldF90eXBlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksIChnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fZGlzcG9zZSksIChxdWV1ZV9vdmVycnVuKSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChyZW1vdmVfcHJlcm9sbHMpLCAodW5rbm93bl90eXBlKSwKLQkobm9fbW9yZV9wYWRzKSwgKG5ld19zdHJlYW0pLCAoc2V0dXBfc291cmNlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9wcm9wZXJ0eSksCi0JKHBsYXlfYmFzZV9lb3MpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9yZW1vdmVfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX211dGVfc3RyZWFtKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fdW5saW5rX3N0cmVhbSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9zdHJlYW1pbmZvKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCUJldHRlciBlcnJvciByZWNvdmVyeS4gQWRkZWQgY29uZmlndXJhYmxlIHByZXJvbGwgcXVldWUgc2l6ZS4gRmFzdGVyCi0JZGV0ZWN0aW9uIG9mIG5vLW1vcmUtcGFkcy4KLQotMjAwNC0wNy0xNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC1saWJzL2dzdC92aWRlby92aWRlby5oOgotCUFkZGVkIDMyIGJpdHMgUkdCQS4gTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHVzZSBhbm90aGVyIG1pbWUtdHlwZQotCWZvciBhbHBoYSByZ2IuIEN1cnJlbnRseSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGFscGhhX21hc2sgcHJvcGVydHkKLQlzaWduYWxzIGFuIGFscGhhIGNoYW5uZWwuCi0KLTIwMDQtMDctMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3hjb250ZXh0X2dldCk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2dldF94dl9zdXBwb3J0KToKLQlGUFMgc2VlbXMgdG8gYmUgMC4wIHRvIE1BWCBldmVyeXdoZXJlIGVsc2UuCi0KLTIwMDQtMDctMTUgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX2NhcHNfd2l0aF9kYXRhKToKLQkgIG1wNDIvbXA0MyAobm8gY2FwcykgZXhpc3QgdG9vLgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2Fwcyk6Ci0JICBTZXQgcGl4ZWxfd2lkdGgvaGVpZ2h0OyB3ZSd2ZSBnb3QgdGhlbSBpbi1jYXBzLgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKHBsdWdpbl9pbml0KToKLQkgIEJvdGggYXJlIHZhbGlkIHByaW1hcnkuCi0JKiBzeXMvb3NzL2dzdG9zc21peGVyLmM6Ci0JICBSZW1vdmUgaTE4biBoYWNrIGFuZCBlbmFibGUgdHJhbnNsYXRpb25zLgotCi0yMDA0LTA3LTE1ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyksIChnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9kZXN0cm95KToKLQkgIGZpeCBmb3Igbm9uLXNobSB4di4gT3JpZ2luYWwgcGF0Y2ggYnkgVGltIFJpbmdlbmJhY2ggKGZpeGVzICMxNDcyNDgpCi0KLTIwMDQtMDctMTUgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2Ffb3Blbl9hdWRpbyksCi0JKGdzdF9hbHNhX3N3X3BhcmFtc19kdW1wKSwgKGdzdF9hbHNhX2h3X3BhcmFtc19kdW1wKSwKLQkoZ3N0X2Fsc2FfY2xvc2VfYXVkaW8pOgotCSAgZGlzYWJsZSBzb21lIG9mIHRoZSBkZWJ1Z2dpbmcgY29kZSBmb3Igbm93LiBXcml0aW5nIGRlYnVnZ2luZyB0byBhCi0JICBidWZmZXIgaXMgYnJva2VuIGluIGN1cnJlbnQgYWxzYWxpYiByZWxlYXNlcy4KLQotMjAwNC0wNy0xMiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvbXBlZzJkZWMvZ3N0bXBlZzJkZWMuYzogKGdzdF9tcGVnMmRlY19hbGxvY19idWZmZXIpOgotCSAgdXNlIGJ1ZmZlcnBvb2xzCi0KLTIwMDQtMDctMTQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZGVjLmM6IChnc3RfdGhlb3JhX2RlY19jbGFzc19pbml0KSwKLQkodGhlb3JhX2RlY19zcmNfcXVlcnkpLCAodGhlb3JhX2RlY19ldmVudCk6Ci0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAoZ3N0X3RoZW9yYV9lbmNfY2xhc3NfaW5pdCk6Ci0JICBhZGQgZGVidWdnaW5nIGNhdGVnb3JpZXMuICBSZW1vdmUgXG4ncy4KLQotMjAwNC0wNy0xMyAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jIChnc3RfcGxheV9iaW5fc2V0X3Byb3BlcnR5KQotCShnc3RfcGxheV9iaW5fZ2V0X3Byb3BlcnR5KTogSW1wbC4KLQotMjAwNC0wNy0xMyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfc2Vla19iZWZvcmUpOgotCVdoZW4gdHJ5aW5nIHRvIGZpbmQgdGhlIHN0cmVhbSBsZW5ndGgsIHNlZWsgYmFjayBOIHBhZ2VzCi0JaW5zdGVhZCBvZiBqdXN0IG9uZSwgd2hlcmUgTiBpcyB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgaW4KLQl0aGUgY3VycmVudCBjaGFpbi4KLQotMjAwNC0wNy0xMyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzoKLQkoZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHNfd2l0aF9kYXRhKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHMpLAotCShnc3RfcmlmZl9jcmVhdGVfYXVkaW9fdGVtcGxhdGVfY2Fwcyk6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmg6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzoKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX3ZpZHNfd2l0aF9kYXRhKSwKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX2F1ZHNfd2l0aF9kYXRhKSwgKGdzdF9yaWZmX3JlYWRfc3RyZl9hdWRzKToKLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5oOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KSwKLQkoZ3N0X2F2aV9kZW11eF9hZGRfc3RyZWFtKToKLQlTZXQgY29kZWNfZGF0YSBvbiBjYXBzIGZvciBhdmlkZW11eGVyLgotCi0yMDA0LTA3LTEyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogRml4IHRlc3QgZm9yIE9iamVjdGl2ZSBDCi0KLTIwMDQtMDctMTIgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfZ2V0X2NhcHNsaXN0KSwKLQkoZ3N0X2dka19waXhidWZfY2hhaW4pOgotCSAgQWRkIHN2ZyBhbmQgcGN4IHRvIHRlbXBsYXRlIGNhcHMsIGFuZCBlbnN1cmUgdGhhdCBnZXRjYXBzIHJldHVybnMgYQotCSAgc3Vic2V0IG9mIHRoZSB0ZW1wbGF0ZSBjYXBzLgotCSAgQ29weSBlYWNoIHJvdyBtYW51YWxseSBmb3Igb3V0cHV0LCBhcyBnZGtwaXhidWYgbWF5IHBhZCB0aGUKLQkgIHJvd3N0cmlkZSB0byBhIDMyLWJpdCB3b3JkIGJvdW5kYXJ5LgotCi0yMDA0LTA3LTEyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOiAoZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHMpLAotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fdGVtcGxhdGVfY2Fwcyk6Ci0JRml4IHRoZSB0ZW1wbGF0ZSBjYXBzIHRvIGluY2x1ZGUgc29tZSBtb3JlIG1lZGlhIHR5cGVzLgotCi0yMDA0LTA3LTEyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5fZ2V0X3R5cGUpLAotCShnc3RfZGVjb2RlX2Jpbl9jbGFzc19pbml0KSwgKGdzdF9kZWNvZGVfYmluX2ZhY3RvcnlfZmlsdGVyKSwKLQkoY29tcGFyZV9yYW5rcyksIChwcmludF9mZWF0dXJlKSwgKGdzdF9kZWNvZGVfYmluX2luaXQpLAotCShnc3RfZGVjb2RlX2Jpbl9kaXNwb3NlKSwgKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLAotCSh0cnlfdG9fbGlua18xKSwgKG5ld19wYWQpLCAoY2xvc2VfbGluayksICh0eXBlX2ZvdW5kKSwKLQkoZ3N0X2RlY29kZV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9kZWNvZGVfYmluX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9kZWNvZGVfYmluX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2dldF90eXBlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksIChnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fZGlzcG9zZSksIChxdWV1ZV9vdmVycnVuKSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChyZW1vdmVfcHJlcm9sbHMpLCAobm9fbW9yZV9wYWRzKSwKLQkobmV3X3N0cmVhbSksIChzZXR1cF9zb3VyY2UpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fZ2V0X3Byb3BlcnR5KSwgKHBsYXlfYmFzZV9lb3MpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9yZW1vdmVfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX211dGVfc3RyZWFtKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fdW5saW5rX3N0cmVhbSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9zdHJlYW1pbmZvKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9wbGF5X2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmluX2Rpc3Bvc2UpLCAoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfcHJvcGVydHkpLCAoZ2VuX3ZpZGVvX2VsZW1lbnQpLAotCShnZW5fYXVkaW9fZWxlbWVudCksIChyZW1vdmVfc2lua3MpLCAoc2V0dXBfc2lua3MpLAotCShnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9wbGF5X2Jpbl9nZXRfZXZlbnRfbWFza3MpLAotCShnc3RfcGxheV9iaW5fc2VuZF9ldmVudCksIChnc3RfcGxheV9iaW5fZ2V0X2Zvcm1hdHMpLAotCShnc3RfcGxheV9iaW5fY29udmVydCksIChnc3RfcGxheV9iaW5fZ2V0X3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X3BsYXlfYmluX3F1ZXJ5KSwgKHBsdWdpbl9pbml0KToKLQkqIGdzdC9wbGF5YmFjay90ZXN0NC5jOiAobWFpbik6Ci0JTW9yZSBmaXhlcyBvbiByZXVzaW5nIG9mIHRoZSBlbGVtZW50LgotCi0yMDA0LTA3LTExICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChub3JtYWxfc2Vlayk6Ci0JICBhbGxvdyBzZWVraW5nIGZvciBvdGhlciBtZXRob2RzIHRoYW4ganVzdCBTRVQKLQotMjAwNC0wNy0xMSAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYyAoZ3N0X2F1ZGlvX2NvbnZlcnRfbGluayk6IEZvcgotCWZsb2F0LCAiYW55IiBjYXBzIC0+IGJ1ZmZlcl9mcmFtZXM9WzAsTUFYXS4KLQotCSogZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jIChpbnRlcmxlYXZlX2dldGNhcHMpOiBTZWVtcyB0aGUgY29yZQotCWRvZXNuJ3QgaW50ZXJzZWN0IG91ciBjYXBzIHdpdGggdGhlIHRlbXBsYXRlIGFueSBtb3JlLiBEbyBpdAotCW91cnNlbHZlcy4KLQkoaW50ZXJsZWF2ZV9idWZmZXJlZF9sb29wKTogVXNlIGdfbmV3YSBpbnN0ZWFkIG9mIG1hbGxvYy9mcmVlLgotCi0yMDA0LTA3LTA5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5fZ2V0X3R5cGUpLAotCShnc3RfZGVjb2RlX2Jpbl9jbGFzc19pbml0KSwgKGdzdF9kZWNvZGVfYmluX2ZhY3RvcnlfZmlsdGVyKSwKLQkoY29tcGFyZV9yYW5rcyksIChwcmludF9mZWF0dXJlKSwgKGdzdF9kZWNvZGVfYmluX2luaXQpLAotCShnc3RfZGVjb2RlX2Jpbl9kaXNwb3NlKSwgKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLAotCSh0cnlfdG9fbGlua18xKSwgKG5ld19wYWQpLCAoY2xvc2VfbGluayksICh0eXBlX2ZvdW5kKSwKLQkoZ3N0X2RlY29kZV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9kZWNvZGVfYmluX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9kZWNvZGVfYmluX2NoYW5nZV9zdGF0ZSksIChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJhc2ViaW4uYzogKGdzdF9wbGF5X2Jhc2VfYmluX2dldF90eXBlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fY2xhc3NfaW5pdCksIChnc3RfcGxheV9iYXNlX2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fZGlzcG9zZSksIChxdWV1ZV9vdmVycnVuKSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChyZW1vdmVfcHJlcm9sbHMpLCAobm9fbW9yZV9wYWRzKSwKLQkobmV3X3N0cmVhbSksIChzZXR1cF9zb3VyY2UpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fZ2V0X3Byb3BlcnR5KSwgKHBsYXlfYmFzZV9lb3MpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9yZW1vdmVfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX211dGVfc3RyZWFtKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fdW5saW5rX3N0cmVhbSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9zdHJlYW1pbmZvKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9wbGF5X2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmluX2Rpc3Bvc2UpLCAoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfcHJvcGVydHkpLCAoZ2VuX3ZpZGVvX2VsZW1lbnQpLAotCShnZW5fYXVkaW9fZWxlbWVudCksIChyZW1vdmVfc2lua3MpLCAoc2V0dXBfc2lua3MpLAotCShnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9wbGF5X2Jpbl9nZXRfZXZlbnRfbWFza3MpLAotCShnc3RfcGxheV9iaW5fc2VuZF9ldmVudCksIChnc3RfcGxheV9iaW5fZ2V0X2Zvcm1hdHMpLAotCShnc3RfcGxheV9iaW5fY29udmVydCksIChnc3RfcGxheV9iaW5fZ2V0X3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X3BsYXlfYmluX3F1ZXJ5KSwgKHBsdWdpbl9pbml0KToKLQkqIGdzdC9wbGF5YmFjay90ZXN0NC5jOiAobWFpbik6Ci0JV29yayBvbiBvYmplY3QgcmV1c2UgYW5kIHNlZWtpbmcuCi0KLTIwMDQtMDctMDkgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleGFtcGxlcy9zZWVraW5nL3NlZWsuYzogKGl0ZXJhdGUpOgotCURvbid0IGNvbnN1bWUgYWxsIENQVSBpbiB0aGUgaWRsZSBsb29wLgotCi0yMDA0LTA3LTA5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6IChnc3RfbXBlZ19kZW11eF9uZXdfb3V0cHV0X3BhZCksCi0JKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3BhY2tldCksIChnc3RfbXBlZ19kZW11eF9wcm9jZXNzX3ByaXZhdGUpOgotCUFkZCBwYWQgdG8gZWxlbWVudCAqYWZ0ZXIqIHNldHRpbmcgdGhlIHBhZCBmdW5jdGlvbnMgc28gdGhhdAotCXRoZSBzY2hlZHVsZXIgY2FuIHVzZSB0aGUgY29ycmVjdCBvbmVzLgotCi0yMDA0LTA3LTA5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9kZWNfZnJvbV9ncmFudWxlcG9zKSwKLQkodGhlb3JhX2RlY19zcmNfcXVlcnkpLCAodGhlb3JhX2RlY19zcmNfZXZlbnQpLCAodGhlb3JhX2RlY19jaGFpbik6Ci0JU3luYyB0byBrZXlmcmFtZSBhZnRlciBzZWVrCi0KLTIwMDQtMDctMDkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgKGF0KSBhcGVzdGFhcnQgKGRvdCkgb3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfY2hlY2tfZXZlbnQpLAotCShnc3RfYWxzYV9zaW5rX2xvb3ApLCAoZ3N0X2Fsc2Ffc2lua19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2Ffc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvbGlidmlzdWFsL3Zpc3VhbC5jOiAoZ3N0X3Zpc3VhbF9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9kZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC90aGVvcmEvdGhlb3JhZW5jLmM6ICh0aGVvcmFfZW5jX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0LWxpYnMvZ3N0L25hdmlnYXRpb24vbmF2aWdhdGlvbi5jOgotCSogZ3N0L2FkZGVyL2dzdGFkZGVyLmM6IChnc3RfYWRkZXJfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9jaGFpbiksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2dldF9idWZmZXIpOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOgotCShnc3RfbXVsdGlwYXJ0X2RlbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChnc3RfZGVjb2RlX2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOgotCShnc3RfdmlkZW9zY2FsZV9oYW5kbGVfc3JjX2V2ZW50KToKLQkqIGdzdC92b2x1bWUvZ3N0dm9sdW1lLmM6ICh2b2x1bWVfY2hhaW5faW50MTYpOgotCSAgZG9uJ3QgYXNzZXJ0IGluIHN0YXRlIGNoYW5nZSwgdGhpcyBzaG91bGQgYmUgZG9uZSBieSB0aGUgYmFzZQotCSAgR3N0RWxlbWVudCBjbGFzcy4KLQkgIHZhcmlvdXMgZGVidWdnaW5nIGZpeGVzLgotCi0yMDA0LTA3LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jOiAoZ3N0X3BsYXlfcGlwZWxpbmVfc2V0dXApLAotCShnc3RfcGxheV9kaXNwb3NlKSwgKGdzdF9wbGF5X3NldF9sb2NhdGlvbiksCi0JKGdzdF9wbGF5X3NldF9kYXRhX3NyYyksIChnc3RfcGxheV9zZXRfdmlkZW9fc2luayksCi0JKGdzdF9wbGF5X3NldF9hdWRpb19zaW5rKSwgKGdzdF9wbGF5X3NldF92aXN1YWxpemF0aW9uKSwKLQkoZ3N0X3BsYXlfY29ubmVjdF92aXN1YWxpemF0aW9uKSwgKGdzdF9wbGF5X2dldF9zaW5rX2VsZW1lbnQpLAotCShnc3RfcGxheV9nZXRfYWxsX2J5X2ludGVyZmFjZSk6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5Lmg6Ci0JICBhZGQgbmV3IG1ldGhvZCB0byBnZXQgZWxlbWVudHMgaW1wbGVtZW50aW5nIGFuIGludGVyZmFjZS4KLQkgIGFkZCB2YXJpb3VzIGVycm9yIGxvZ2dpbmcKLQotMjAwNC0wNy0wOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4YW1wbGVzL3NlZWtpbmcvc2Vlay5jOiAobWFrZV9kdl9waXBlbGluZSksIChtYWtlX2F2aV9waXBlbGluZSksCi0JKG1ha2VfbXBlZ19waXBlbGluZSksIChtYWtlX21wZWdudF9waXBlbGluZSksCi0JKG1ha2VfcGxheWVyYmluX3BpcGVsaW5lKSwgKHF1ZXJ5X2R1cmF0aW9uc19lbGVtcyksCi0JKHF1ZXJ5X2R1cmF0aW9uc19wYWRzKSwgKHF1ZXJ5X3Bvc2l0aW9uc19lbGVtcyksCi0JKHF1ZXJ5X3Bvc2l0aW9uc19wYWRzKSwgKHVwZGF0ZV9zY2FsZSksIChpdGVyYXRlKSwgKHN0b3Bfc2VlayksCi0JKG1haW4pOgotCUFkZGVkIHBsYXliaW4gc2Vla2luZyBleGFtcGxlLgotCi0yMDA0LTA3LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jOiAoZ3N0X3BsYXlfc2V0X2xvY2F0aW9uKSwKLQkoZ3N0X3BsYXlfc2V0X2RhdGFfc3JjKSwgKGdzdF9wbGF5X3NldF92aWRlb19zaW5rKSwKLQkoZ3N0X3BsYXlfc2V0X2F1ZGlvX3NpbmspLCAoZ3N0X3BsYXlfc2V0X3Zpc3VhbGl6YXRpb24pLAotCShnc3RfcGxheV9jb25uZWN0X3Zpc3VhbGl6YXRpb24pLCAoZ3N0X3BsYXlfZ2V0X2ZyYW1lcmF0ZSk6Ci0JICB1c2UgYSBtYWNybyB0byBsb29rIHVwIGVsZW1lbnRzIGZyb20gaGFzaCB0YWJsZQotCi0yMDA0LTA3LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jOiAoZ3N0X3BsYXlfcGlwZWxpbmVfc2V0dXApLAotCShnc3RfcGxheV9nZXRfbGVuZ3RoX2NhbGxiYWNrKSwgKGdzdF9wbGF5X3NldF9sb2NhdGlvbiksCi0JKGdzdF9wbGF5X3NlZWtfdG9fdGltZSksIChnc3RfcGxheV9zZXRfZGF0YV9zcmMpLAotCShnc3RfcGxheV9zZXRfdmlkZW9fc2luayksIChnc3RfcGxheV9zZXRfYXVkaW9fc2luayksCi0JKGdzdF9wbGF5X3NldF92aXN1YWxpemF0aW9uKSwgKGdzdF9wbGF5X2Nvbm5lY3RfdmlzdWFsaXphdGlvbiksCi0JKGdzdF9wbGF5X2dldF9zaW5rX2VsZW1lbnQpOgotCS0gYWRkIGRlYnVnZ2luZyBpbmZvCi0JLSBmaXggbG9va2luZyB1cCBzaW5rIGVsZW1lbnRzIGJ5IGl0ZXJhdGluZyBvdmVyIGNvbXBsZXRlIGNhcHMKLQktIHB1dCBldmVyeXRoaW5nIGV4Y2VwdCBmb3Igc291cmNlIGFuZCBhdXRvcGx1Z2dlciBpbiBhIGNvbXBsZXRlIGJpbgotCi0yMDA0LTA3LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfZHJhaW5fYXVkaW8pOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfZmx1c2hfb25lX3BhZCksCi0JKGdzdF9hbHNhX3NpbmtfY2hlY2tfZXZlbnQpLCAoZ3N0X2Fsc2Ffc2lua19tbWFwKSwKLQkoZ3N0X2Fsc2Ffc2lua193cml0ZSksIChnc3RfYWxzYV9zaW5rX2xvb3ApOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuaDoKLQktIGFkZCBkZWJ1Z2dpbmcgaW5mbwotCS0gY2xlYW4gdXAgc2NoaXpvcGhyZW5pYSBvZiBkYXRhL2J1ZmZlci9ldmVudAotCS0gZml4IGRvdWJsZSBldmVudCB1bnJlZiBlcnJvcgotCi0yMDA0LTA3LTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3BsYXliYWNrL01ha2VmaWxlLmFtOgotCUFkZCBoZWFkZXJzIHRvIG5vaW5zdAotCi0yMDA0LTA3LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC1leHQtbS5tOgotCSogdG9vbHMvZ3N0LWxhdW5jaC1leHQuMS5pbjoKLQkgIGNvbnZlcnQgdG8gdGhlIHRoaXJkIG1pbGxlbml1bQotCi0yMDA0LTA3LTA3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHN5cy9keHIzL01ha2VmaWxlLmFtOiBub2luc3RfU09VUkNFUyBzaG91bGQgYmUgbm9kaXN0X1NPVVJDRVMKLQotMjAwNC0wNy0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbToKLQkqIGdzdC9wbGF5YmFjay9SRUFETUU6Ci0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChnc3RfZGVjb2RlX2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2RlY29kZV9iaW5fZmFjdG9yeV9maWx0ZXIpLAotCShjb21wYXJlX3JhbmtzKSwgKHByaW50X2ZlYXR1cmUpLCAoZ3N0X2RlY29kZV9iaW5faW5pdCksCi0JKGdzdF9kZWNvZGVfYmluX2Rpc3Bvc2UpLCAoZmluZF9jb21wYXRpYmxlcyksIChjbG9zZV9wYWRfbGluayksCi0JKHRyeV90b19saW5rXzEpLCAobmV3X3BhZCksIChjbG9zZV9saW5rKSwgKHR5cGVfZm91bmQpLAotCShnc3RfZGVjb2RlX2Jpbl9zZXRfcHJvcGVydHkpLCAoZ3N0X2RlY29kZV9iaW5fZ2V0X3Byb3BlcnR5KSwKLQkocGx1Z2luX2luaXQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliYXNlYmluLmM6IChnc3RfcGxheV9iYXNlX2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2NsYXNzX2luaXQpLCAoZ3N0X3BsYXlfYmFzZV9iaW5faW5pdCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2Rpc3Bvc2UpLCAocmVidWlsZF9waXBlbGluZSksIChxdWV1ZV9vdmVycnVuKSwKLQkoZ2VuX3ByZXJvbGxfZWxlbWVudCksIChub19tb3JlX3BhZHMpLCAobmV3X3N0cmVhbSksCi0JKHNldHVwX3NvdXJjZSksIChnc3RfcGxheV9iYXNlX2Jpbl9zZXRfcHJvcGVydHkpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9nZXRfcHJvcGVydHkpLCAoZ3N0X3BsYXlfYmFzZV9iaW5fY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fYWRkX2VsZW1lbnQpLAotCShnc3RfcGxheV9iYXNlX2Jpbl9yZW1vdmVfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX211dGVfc3RyZWFtKSwgKGdzdF9wbGF5X2Jhc2VfYmluX2xpbmtfc3RyZWFtKSwKLQkoZ3N0X3BsYXlfYmFzZV9iaW5fdW5saW5rX3N0cmVhbSksCi0JKGdzdF9wbGF5X2Jhc2VfYmluX2dldF9zdHJlYW1pbmZvKToKLQkqIGdzdC9wbGF5YmFjay9nc3RwbGF5YmFzZWJpbi5oOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9wbGF5X2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmluX2Rpc3Bvc2UpLCAoZ3N0X3BsYXlfYmluX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfcHJvcGVydHkpLCAoZ2VuX3ZpZGVvX2VsZW1lbnQpLAotCShnZW5fYXVkaW9fZWxlbWVudCksIChzZXR1cF9zaW5rcyksIChnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3BsYXlfYmluX2dldF9ldmVudF9tYXNrcyksIChnc3RfcGxheV9iaW5fc2VuZF9ldmVudCksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfZm9ybWF0cyksIChnc3RfcGxheV9iaW5fY29udmVydCksCi0JKGdzdF9wbGF5X2Jpbl9nZXRfcXVlcnlfdHlwZXMpLCAoZ3N0X3BsYXlfYmluX3F1ZXJ5KSwKLQkocGx1Z2luX2luaXQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHN0cmVhbWluZm8uYzogKGdzdF9zdHJlYW1fdHlwZV9nZXRfdHlwZSksCi0JKGdzdF9zdHJlYW1faW5mb19nZXRfdHlwZSksIChnc3Rfc3RyZWFtX2luZm9fY2xhc3NfaW5pdCksCi0JKGdzdF9zdHJlYW1faW5mb19pbml0KSwgKGdzdF9zdHJlYW1faW5mb19uZXcpLAotCShnc3Rfc3RyZWFtX2luZm9fZGlzcG9zZSksIChnc3Rfc3RyZWFtX2luZm9fc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3N0cmVhbV9pbmZvX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0c3RyZWFtaW5mby5oOgotCSogZ3N0L3BsYXliYWNrL3Rlc3QuYzogKGdlbl92aWRlb19lbGVtZW50KSwgKGdlbl9hdWRpb19lbGVtZW50KSwKLQkobWFpbik6Ci0JKiBnc3QvcGxheWJhY2svdGVzdDIuYzogKG1haW4pOgotCSogZ3N0L3BsYXliYWNrL3Rlc3QzLmM6ICh1cGRhdGVfc2NhbGUpLCAobWFpbik6Ci0JTW9yZSBwbGF5YmluIGZpeGVzLiBBZGRlZCBSRUFETUUuIERvIGJldHRlciBlbGVtZW50IGZpbHRlcmluZy4KLQlBZGRlZCBiYXNlIGNsYXNzIHRvIHByZXJvbGwgbWVkaWEuIEFkZGVkIHRlc3QgYXBwcy4KLQotMjAwNC0wNy0wNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOiAoZ3N0X21wZWcyZGVjX2ZsdXNoX2RlY29kZXIpOgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmg6Ci0JICB2YXJpb3VzIGRlYnVnZ2luZyBpbXByb3ZlbWVudHMuICBSZXNldCBzdHJlYW0gdG8gbmV4dCBwaWN0dXJlCi0JICBpbnN0ZWFkIG9mIHNlcXVlbmNlIGhlYWRlciwgb3RoZXJ3aXNlIHNlZWtzIGNhbm5vdCB3b3JrLgotCi0yMDA0LTA3LTA3ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmM6IChnc3RfdmlkZW9fYm94X2ZpbGxfZ2V0X3R5cGUpLAotCShnc3RfdmlkZW9fYm94X2NsYXNzX2luaXQpLCAoZ3N0X3ZpZGVvX2JveF9zZXRfcHJvcGVydHkpLAotCShnc3RfdmlkZW9fYm94X2k0MjApLCAoZ3N0X3ZpZGVvX2JveF9heXV2KSwgKGdzdF92aWRlb19ib3hfY2hhaW4pOgotCVVzZSBwYWRfYWxsb2Mgd2hlcmUgcG9zc2libGUuCi0KLTIwMDQtMDctMDcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogKGdzdF9vc3NlbGVtZW50X3Jlc2V0KSwKLQkoZ3N0X29zc2VsZW1lbnRfcGFyc2VfY2Fwcyk6Ci0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuaDoKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3Nzc3JjX2dldCk6Ci0JRml4IG9mZnNldCBvbiBvc3NzcmMuCi0KLTIwMDQtMDctMDcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYS5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9kZWNfZnJvbV9ncmFudWxlcG9zKSwKLQkodGhlb3JhX2RlY19zcmNfcXVlcnkpLCAodGhlb3JhX2RlY19jaGFpbik6Ci0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAoZ3N0X3RoZW9yYV9lbmNfY2xhc3NfaW5pdCksCi0JKHRoZW9yYV9lbmNfc2lua19saW5rKSwgKHRoZW9yYV9idWZmZXJfZnJvbV9wYWNrZXQpLAotCSh0aGVvcmFfcHVzaF9wYWNrZXQpLCAodGhlb3JhX2VuY19jaGFpbik6Ci0JRml4IHRoZW9yYSBncmFudWxlcG9zIGNhbGN1bGF0aW9uLgotCUZpeCBvdmVyZmxvdyBpbiBkdXJhdGlvbi9wb3NpdGlvbiBjYWxjdWxhdGlvbi4KLQlCdW1wIHJhbmsgdG8gUFJJTUFSWSBmb3IgdGhlb3JhZGVjLgotCVVzZSBncmFudWxlcG9zIG9mIGxhc3QgcGFja2V0IHRvIGNhbGN1bGF0ZSBwb3NpdGlvbi4KLQlTZXQga2V5ZnJhbWUgZmxhZyBvbiBidWZmZXJzIHdoZW4gbmVlZGVkLgotCi0yMDA0LTA3LTA2ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9wbGF5YmFjay9NYWtlZmlsZS5hbTogJ3Rlc3QnIGluIGJpbl9QUk9HUkFNUz8gIEFyZSB5b3UKLQlzZXJpb3VzPyAgKEZpeGVkLCBvYnZpb3VzbHkuKQotCi0yMDA0LTA3LTA2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vY3MucG86Ci0JICBhZGRlZCBDemVjaCB0cmFuc2xhdGlvbiAoTWlsb3NsYXYgVHJtYWMpCi0KLTIwMDQtMDctMDUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvcGxheWJhY2svZ3N0ZGVjb2RlYmluLmM6IChnc3RfZGVjb2RlX2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9kZWNvZGVfYmluX2NsYXNzX2luaXQpLCAoZ3N0X2RlY29kZV9iaW5fZmFjdG9yeV9maWx0ZXIpLAotCShjb21wYXJlX3JhbmtzKSwgKGdzdF9kZWNvZGVfYmluX2luaXQpLCAoZ3N0X2RlY29kZV9iaW5fZGlzcG9zZSksCi0JKGZpbmRfY29tcGF0aWJsZXMpLCAoY2xvc2VfcGFkX2xpbmspLCAodHJ5X3RvX2xpbmtfMSksIChuZXdfcGFkKSwKLQkoY2xvc2VfbGluayksICh0eXBlX2ZvdW5kKSwgKGdzdF9kZWNvZGVfYmluX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9kZWNvZGVfYmluX2dldF9wcm9wZXJ0eSksIChnc3RfZGVjb2RlX2Jpbl9nZXRfZXZlbnRfbWFza3MpLAotCShnc3RfZGVjb2RlX2Jpbl9zZW5kX2V2ZW50KSwgKGdzdF9kZWNvZGVfYmluX2dldF9mb3JtYXRzKSwKLQkoZ3N0X2RlY29kZV9iaW5fY29udmVydCksIChnc3RfZGVjb2RlX2Jpbl9nZXRfcXVlcnlfdHlwZXMpLAotCShnc3RfZGVjb2RlX2Jpbl9xdWVyeSksIChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvcGxheWJhY2svZ3N0cGxheWJpbi5jOiAoZ3N0X3BsYXlfYmluX2dldF90eXBlKSwKLQkoZ3N0X3BsYXlfYmluX2NsYXNzX2luaXQpLCAoZ3N0X3BsYXlfYmluX2luaXQpLAotCShnc3RfcGxheV9iaW5fZGlzcG9zZSksIChyZWJ1aWxkX3BpcGVsaW5lKSwgKGdldF9hdWRpb19lbGVtZW50KSwKLQkoZ2V0X3ZpZGVvX2VsZW1lbnQpLCAobmV3X3BhZCksIChzZXR1cF9zb3VyY2UpLAotCShnc3RfcGxheV9iaW5fc2V0X3Byb3BlcnR5KSwgKGdzdF9wbGF5X2Jpbl9nZXRfcHJvcGVydHkpLAotCShnc3RfcGxheV9iaW5fY2hhbmdlX3N0YXRlKSwgKGdzdF9wbGF5X2Jpbl9hZGRfZWxlbWVudCksCi0JKGdzdF9wbGF5X2Jpbl9yZW1vdmVfZWxlbWVudCksIChnc3RfcGxheV9iaW5fZ2V0X2V2ZW50X21hc2tzKSwKLQkoZ3N0X3BsYXlfYmluX3NlbmRfZXZlbnQpLCAoZ3N0X3BsYXlfYmluX2dldF9mb3JtYXRzKSwKLQkoZ3N0X3BsYXlfYmluX2NvbnZlcnQpLCAoZ3N0X3BsYXlfYmluX2dldF9xdWVyeV90eXBlcyksCi0JKGdzdF9wbGF5X2Jpbl9xdWVyeSksIChnc3RfcGxheV9iaW5fZ2V0X2Nsb2NrKSwgKHBsdWdpbl9pbml0KToKLQkqIGdzdC9wbGF5YmFjay90ZXN0LmM6IChtYWluKToKLQlNb3JlIGZpeGVzLCBjbGVhbmVkIHVwIHBsYXliaW4sIG1ha2UgaXQgdXNlIGRlY29kZWJpbi4gQWRkZWQKLQl0aHJlYWRlZCBwcm9wZXJ0eSB0byBwbGF5YmluLgotCi0yMDA0LTA3LTA1ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L3BsYXliYWNrL01ha2VmaWxlLmFtOgotCSogZ3N0L3BsYXliYWNrL2RlY29kZXRlc3QuYzogKG1haW4pOgotCSogZ3N0L3BsYXliYWNrL2dzdGRlY29kZWJpbi5jOiAoZ3N0X2RlY29kZV9iaW5fZ2V0X3R5cGUpLAotCShnc3RfZGVjb2RlX2Jpbl9jbGFzc19pbml0KSwgKGdzdF9kZWNvZGVfYmluX2ZhY3RvcnlfZmlsdGVyKSwKLQkoY29tcGFyZV9yYW5rcyksIChnc3RfZGVjb2RlX2Jpbl9pbml0KSwgKGdzdF9kZWNvZGVfYmluX2Rpc3Bvc2UpLAotCShmaW5kX2NvbXBhdGlibGVzKSwgKGNsb3NlX3BhZF9saW5rKSwgKHRyeV90b19saW5rXzEpLCAobmV3X3BhZCksCi0JKGNsb3NlX2xpbmspLCAodHlwZV9mb3VuZCksIChnc3RfZGVjb2RlX2Jpbl9zZXRfcHJvcGVydHkpLAotCShnc3RfZGVjb2RlX2Jpbl9nZXRfcHJvcGVydHkpLCAoZ3N0X2RlY29kZV9iaW5fY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X2RlY29kZV9iaW5fZ2V0X2V2ZW50X21hc2tzKSwgKGdzdF9kZWNvZGVfYmluX3NlbmRfZXZlbnQpLAotCShnc3RfZGVjb2RlX2Jpbl9nZXRfZm9ybWF0cyksIChnc3RfZGVjb2RlX2Jpbl9jb252ZXJ0KSwKLQkoZ3N0X2RlY29kZV9iaW5fZ2V0X3F1ZXJ5X3R5cGVzKSwgKGdzdF9kZWNvZGVfYmluX3F1ZXJ5KSwKLQkocGx1Z2luX2luaXQpOgotCSogZ3N0L3BsYXliYWNrL2dzdHBsYXliaW4uYzogKGdzdF9wbGF5X2Jpbl9nZXRfdHlwZSksCi0JKGdzdF9wbGF5X2Jpbl9jbGFzc19pbml0KSwgKGdzdF9wbGF5X2Jpbl9pbml0KSwKLQkoZ3N0X3BsYXlfYmluX2Rpc3Bvc2UpLCAoZ2VuX2RlZmF1bHRfb3V0cHV0KSwgKHJlYnVpbGRfcGlwZWxpbmUpLAotCShjb2xsZWN0X3NpbmtfcGFkcyksIChmaW5kX2NvbXBhdGlibGVzKSwgKGNsb3NlX3BhZF9saW5rKSwKLQkodHJ5X3RvX2xpbmtfMSksIChuZXdfcGFkKSwgKGNsb3NlX2xpbmspLCAodHlwZV9mb3VuZCksCi0JKHNldHVwX3NvdXJjZSksIChnc3RfcGxheV9iaW5fc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3BsYXlfYmluX2dldF9wcm9wZXJ0eSksIChnc3RfcGxheV9iaW5fZmFjdG9yeV9maWx0ZXIpLAotCShjb21wYXJlX3JhbmtzKSwgKGdzdF9wbGF5X2Jpbl9jb2xsZWN0X2ZhY3RvcmllcyksCi0JKGdzdF9wbGF5X2Jpbl9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3BsYXlfYmluX2FkZF9lbGVtZW50KSwKLQkoZ3N0X3BsYXlfYmluX3JlbW92ZV9lbGVtZW50KSwgKGdzdF9wbGF5X2Jpbl9nZXRfZXZlbnRfbWFza3MpLAotCShnc3RfcGxheV9iaW5fc2VuZF9ldmVudCksIChnc3RfcGxheV9iaW5fZ2V0X2Zvcm1hdHMpLAotCShnc3RfcGxheV9iaW5fY29udmVydCksIChnc3RfcGxheV9iaW5fZ2V0X3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X3BsYXlfYmluX3F1ZXJ5KSwgKGdzdF9wbGF5X2Jpbl9nZXRfY2xvY2spLCAocGx1Z2luX2luaXQpOgotCSogZ3N0L3BsYXliYWNrL3Rlc3QuYzogKG1haW4pOgotCUFkZGVkIHNvbWUgcGxheWJhY2sgaGVscGVyIGVsZW1lbnRzIGFuZCBzb21lIHRlc3QgYXBwcywgdmVyeSBhbHBoYQotCXN0aWxsLgotCi0yMDA0LTA3LTA0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3hydW5fcmVjb3ZlcnkpOgotCSAgb25seSByZXN0YXJ0IGF1ZGlvIHdoZW4gd2UgaW5kZWVkIGhhdmUgYW4geHJ1biB0byBmaXggcmVwZWF0ZWQKLQkgIHhydW5zLiBGaXggc3VnZ2VzdGVkIGJ5IEdpdWxpYW5vIFBvY2hpbmkuCi0KLTIwMDQtMDctMDMgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXBsdWdpbi5jOiAoZ3N0X2Fsc2FfZXJyb3Jfd3JhcHBlcik6IERpc2FibGUKLQljYWxsIHRvIGdzdF9kZWJ1Z19sb2coKSBpZiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQgKGJ1ZyAjMTQ1MTE4KQotCi0yMDA0LTA3LTAzICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3hydW5fcmVjb3ZlcnkpOgotCSAgdXNlIG91ciBvd24gZnVuY3Rpb25zIGZvciByZXN0YXJ0aW5nIHRoZSBhbHNhIGRldmljZS4KLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2NoZWNrX2V2ZW50KToKLQkgIEkgc2hvdWxkIGFwcGx5IHBhdGNoZXMgbXlzZWxmIC0gdXNlIE1JTiBmb3IgdGhlIHRoaXJkIGFyZ3VtZW50LCBub3QKLQkgIHRoZSBzZWNvbmQsIHRoaXMgZml4ZXMgc2Vla2luZwotCi0yMDA0LTA3LTAyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjZGVjX2NsYXNzX2luaXQpLAotCShnc3RfZmxhY2RlY193cml0ZSk6ICBBY3R1YWxseSwgR1NUX1BBRF9DQVBTKCkgaGFzIG5vdGhpbmcgdG8KLQlkbyB3aXRoIHRoZSBsb2dpYy4KLQotMjAwNC0wNy0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY2RlY193cml0ZSk6ICBTZXQgZHVyYXRpb24gb24KLQlvdXRwdXQgYnVmZmVycy4gIEZpeCBsb2dpYyBtaXN0YWtlLiAgKGJ1ZyAjMTQ0ODY2KQotCi0yMDA0LTA3LTAyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC94b3ZlcmxheS9NYWtlZmlsZS5hbTogeG92ZXJsYXkgbm8gbG9uZ2VyIGRlcGVuZHMKLQlvbiBYLiAgKGJ1ZyAjMTQ0NzUzKQotCi0yMDA0LTA3LTAyICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmM6IChnc3Rfd2F2ZW5jX3NldHVwKSwKLQkoZ3N0X3dhdmVuY19zdG9wX2ZpbGUpOiBTd2l0Y2ggdG8gR1NUX1dSSVRFX1VJTlQzMl9MRSBtYWNyb3MKLQkoYnVnICMxNDQ2MjQpCi0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogKGdzdF9vc3NlbGVtZW50X3Byb2JlX2NhcHMpLAotCShnc3Rfb3NzZWxlbWVudF9yYXRlX3Byb2JlX2NoZWNrKTogQWRkIGFub3RoZXIgd29ya2Fyb3VuZCBmb3IKLQlidWdneSBkcml2ZXJzIChidWcgIzE0NTMzNikKLQotMjAwNC0wNy0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSk6Ci0JTW9zdCBzeXN0ZW1zIGRvbid0IGhhdmUgTVNHX05PU0lHTkFMLgotCi0yMDA0LTA3LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC90dW5lci9NYWtlZmlsZS5hbToKLQkgIChob3BlZnVsbHkpIGZpeCBib3RoIGluc3RhbGwgYW5kIGRpc3QgYW5kIG1ha2UgZXJyb3IgbWVzc2FnZSB1c2VmdWwuCi0JICBuZWVkcyB0ZXN0aW5nIGFjcm9zcyBhdXRvbWFrZXMuCi0KLTIwMDQtMDctMDIgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L29nZy9nc3RvZ2cuYzogKHBsdWdpbl9pbml0KToKLQkgIHdlIHJlcXVpcmUgYnl0ZXN0cmVhbSBub3cKLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzoKLQkgIGh1Z2UgZGlmZiB0byBpbXBsZW1lbnQgY2hhaW4gc2V0dXAgaW4gYSBmYXN0IGFuZCBnZW5lcmljIHdheS4gVGhpcwotCSAgaW1wcm92ZXMgdGFnIHJlYWRpbmcgYW5kIHN0YXJ0dXAgb2YgaHVnZSBmaWxlcyAocmVhZDogVGhlb3JhIHZpZGVvcykKLQkgIHF1aXRlIGEgYml0LiBJdCBwcm9iYWJseSBjb250YWlucyBidWdzLCB0b28sIHNvIHBsZWFzZSB0ZXN0LgotCSAgU2Vla2luZyBpcyBub3QgaW1wcm92ZWQgdG8gdGhlIGZhc3QgbWV0aG9kLgotCi0yMDA0LTA2LTI5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19wYWRfcHVzaCk6Ci0JKiBleHQvb2dnL2dzdG9nZ211eC5jOgotCUZpeCBtZW1sZWFrIGluIG9nZ2RlbXV4IHdoZW4gcnVubmluZyB1bmNvbm5lY3RlZCBwYWRzLgotCWRvYyB1cGRhdGUgaW4gbXV4LCBzdGFydCB3b3JraW5nIG9uIGtleWZyYW1lIG1vZGUuCi0KLTIwMDQtMDYtMjkgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOgotCSAgYWR2ZXJ0aXNlIGNvcnJlY3QgdGVtcGxhdGUgY2FwcyAtIHdlIGluZGVlZCBkbyBub24tbmF0aXZlIGVuZGlhbm5lc3MKLQkgIGFuZCA4Yml0IGF1ZGlvIGhhcyBubyBlbmRpYW5uZXNzCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2dldGNhcHMpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19nZXRjYXBzKToKLQkgIGF2b2lkICh3cm9uZykgZHVwbGljYXRpb25zIGluIGdldGNhcHMgZnVuY3Rpb24gYW5kIHJldHVybgotCSAgdGVtcGxhdGUgY2FwcwotCi0yMDA0LTA2LTI5ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X3JlY292ZXJfcG9saWN5X2dldF90eXBlKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X211bHRpZmRzaW5rX2FkZCksCi0JKGdzdF9tdWx0aWZkc2lua19yZW1vdmUpLCAoZ3N0X211bHRpZmRzaW5rX2NsZWFyKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9yZW1vdmUpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF9yZWFkKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9kYXRhKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9jYXBzKSwKLQkoZ3N0X211bHRpZmRzaW5rX2NsaWVudF9xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudF93cml0ZSksCi0JKGdzdF9tdWx0aWZkc2lua19yZWNvdmVyX2NsaWVudCksIChnc3RfbXVsdGlmZHNpbmtfcXVldWVfYnVmZmVyKSwKLQkoZ3N0X211bHRpZmRzaW5rX2hhbmRsZV9jbGllbnRzKSwgKGdzdF9tdWx0aWZkc2lua190aHJlYWQpLAotCShnc3RfbXVsdGlmZHNpbmtfaW5pdF9zZW5kKSwgKGdzdF9tdWx0aWZkc2lua19jbG9zZSk6Ci0JRml4IHdyb25nIEdMaXN0IGl0ZXJhdGlvbiB0aGF0IGNvdWxkIGNyYXNoIHRoZSBzZXJ2ZXIgd2hlbgotCW1vcmUgdGhlbiAyIGNsaWVudHMgZGlzY29ubmVjdCBhdCB0aGUgc2FtZSB0aW1lLiBSZWFkIGFsbCB0aGUKLQlwZW5kaW5nIGNvbW1hbmRzIGluIG9uZSBiYXRjaCB0byByZWNvdmVyIGZyb20gY29tbWFuZCBzdG9ybXMgdW5kZXIKLQl2ZXJ5IGhlYXZ5IGxvYWQuCi0KLTIwMDQtMDYtMjggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdmlkZW9taXhlci92aWRlb21peGVyLmM6IChnc3RfdmlkZW9taXhlcl9wYWRfZ2V0X3R5cGUpLAotCShnc3RfdmlkZW9taXhlcl9wYWRfY2xhc3NfaW5pdCksIChnc3RfdmlkZW9taXhlcl9wYWRfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfcGFkX3NldF9wcm9wZXJ0eSksCi0JKGdzdF92aWRlb21peGVyX3BhZF9zaW5rY29ubmVjdCksIChnc3RfdmlkZW9taXhlcl9wYWRfaW5pdCksCi0JKGdzdF92aWRlb19taXhlcl9iYWNrZ3JvdW5kX2dldF90eXBlKSwgKGdzdF92aWRlb21peGVyX2dldF90eXBlKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfY2xhc3NfaW5pdCksIChnc3RfdmlkZW9taXhlcl9pbml0KSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF92aWRlb21peGVyX2JsZW5kX2F5dXZfaTQyMCksCi0JKHBhZF96b3JkZXJfY29tcGFyZSksIChnc3RfdmlkZW9taXhlcl9zb3J0X3BhZHMpLAotCShnc3RfdmlkZW9taXhlcl9maWxsX2NoZWNrZXIpLCAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jb2xvciksCi0JKGdzdF92aWRlb21peGVyX2ZpbGxfcXVldWVzKSwgKGdzdF92aWRlb21peGVyX2JsZW5kX2J1ZmZlcnMpLAotCShnc3RfdmlkZW9taXhlcl91cGRhdGVfcXVldWVzKSwgKGdzdF92aWRlb21peGVyX2xvb3ApLAotCShwbHVnaW5faW5pdCk6Ci0JQXZvaWQgZGl2aWRlIGJ5IHplcm8sIGNob29zZSBtYXN0ZXJwYWQgYXMgdGhlIHBhZCB3aXRoIHRoZSBoaWdoZXN0Ci0JZnJhbWVyYXRlLgotCi0yMDA0LTA2LTI3ICBKdWxpZW4gTW91dHRlICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeHdpbmRvd19kZWNvcmF0ZSksCi0JKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeHdpbmRvd19kZWNvcmF0ZSksCi0JKGdzdF94dmltYWdlc2lua194d2luZG93X25ldyk6IEkgcHJlZmVyIGxvY2tpbmcgdGhlIG11dGV4IGluIHRoZQotCWZ1bmN0aW9uIGRpcmVjdGx5LiBXZSBtaWdodCB3YW50IHRvIGNhbGwgaXQgZnJvbSBzb21ld2hlcmUgZWxzZSBvbmUgZGF5LgotCi0yMDA0LTA2LTI3ICBKdWxpZW4gTW91dHRlICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeHdpbmRvd19kZWNvcmF0ZSksCi0JKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeHdpbmRvd19kZWNvcmF0ZSksCi0JKGdzdF94dmltYWdlc2lua194d2luZG93X25ldyk6IFRyeWluZyB0byBmaXggdGhlIHJhbmRvbSBiZWhhdmlvdXIgb2YKLQl3aW5kb3cgZGVjb3JhdGlvbnMuCi0KLTIwMDQtMDYtMjcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19jbGFzc19pbml0KSwgKGdzdF9kdmRlY19pbml0KSwKLQkoZ3N0X2R2ZGVjX3ZpZGVvX2dldGNhcHMpLCAoZ3N0X2R2ZGVjX3ZpZGVvX2xpbmspLAotCShnc3RfZHZkZWNfcHVzaCksIChnc3RfZHZkZWNfbG9vcCksIChnc3RfZHZkZWNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X2R2ZGVjX3NldF9wcm9wZXJ0eSksIChnc3RfZHZkZWNfZ2V0X3Byb3BlcnR5KToKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCUltcGxlbWVudCBkcm9wX2ZhY3RvciBwcm9wZXJ0eSB0byBsb3dlciB0aGUgZnJhbWVyYXRlIHdpdGgKLQlhIGZhY3Rvci4KLQotMjAwNC0wNi0yNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9wbGF5L01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL01ha2VmaWxlLmFtOgotCSAgdW5icmVhayBDb21wYW55J3MgZml4IHRoYXQgZGlkbid0IGluc3RhbGwgdGhlIC1lbnVtLmggZmlsZXMKLQotMjAwNC0wNi0yNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX3B1c2gpLCAoZ3N0X2R2ZGVjX2xvb3ApLAotCShnc3RfZHZkZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCUZpeCB0aW1lc3RhbXAsIGR1cmF0aW9uIGFuZCBvZmZzZXQgb2YgdGhlIGJ1ZmZlcnMuCi0KLTIwMDQtMDYtMjcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdG11bHRpZmRzaW5rLmM6IChnc3RfcmVjb3Zlcl9wb2xpY3lfZ2V0X3R5cGUpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xhc3NfaW5pdCksIChnc3RfbXVsdGlmZHNpbmtfYWRkKSwKLQkoZ3N0X211bHRpZmRzaW5rX3JlbW92ZSksIChnc3RfbXVsdGlmZHNpbmtfY2xlYXIpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3JlYWQpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2RhdGEpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2NhcHMpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2J1ZmZlciksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKSwKLQkoZ3N0X211bHRpZmRzaW5rX3JlY292ZXJfY2xpZW50KSwgKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudHMpLCAoZ3N0X211bHRpZmRzaW5rX3RocmVhZCksCi0JKGdzdF9tdWx0aWZkc2lua19pbml0X3NlbmQpLCAoZ3N0X211bHRpZmRzaW5rX2Nsb3NlKToKLQkqIGdzdC90Y3AvZ3N0bXVsdGlmZHNpbmsuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOgotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfc2VydmVyX3JlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfc2VsZWN0KSwgKGdzdF90Y3BzZXJ2ZXJzaW5rX2Nsb3NlKToKLQlNb3JlIG11bHRpZmRzaW5rIGZpeGVzLCBtb3JlIHJlY292ZXJ5IHBvbGljeSBmaXhlcy4KLQlSZW1vdmVkIHN0dXBpZCBnX3ByaW50Ci0KLTIwMDQtMDYtMjYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL01ha2VmaWxlLmFtOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5jOiAoZ3N0X3JlY292ZXJfcG9saWN5X2dldF90eXBlKSwKLQkoZ3N0X211bHRpZmRzaW5rX2dldF90eXBlKSwgKGdzdF9tdWx0aWZkc2lua19iYXNlX2luaXQpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xhc3NfaW5pdCksIChnc3RfbXVsdGlmZHNpbmtfaW5pdCksCi0JKGdzdF9tdWx0aWZkc2lua19kZWJ1Z19mZHNldCksIChnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3JlYWQpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2RhdGEpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2NhcHMpLAotCShnc3RfbXVsdGlmZHNpbmtfY2xpZW50X3F1ZXVlX2J1ZmZlciksCi0JKGdzdF9tdWx0aWZkc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKSwKLQkoZ3N0X211bHRpZmRzaW5rX3JlY292ZXJfY2xpZW50KSwgKGdzdF9tdWx0aWZkc2lua19xdWV1ZV9idWZmZXIpLAotCShnc3RfbXVsdGlmZHNpbmtfaGFuZGxlX2NsaWVudHMpLCAoZ3N0X211bHRpZmRzaW5rX3RocmVhZCksCi0JKGdzdF9tdWx0aWZkc2lua19jaGFpbiksIChnc3RfbXVsdGlmZHNpbmtfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X211bHRpZmRzaW5rX2dldF9wcm9wZXJ0eSksIChnc3RfbXVsdGlmZHNpbmtfaW5pdF9zZW5kKSwKLQkoZ3N0X211bHRpZmRzaW5rX2Nsb3NlKSwgKGdzdF9tdWx0aWZkc2lua19jaGFuZ2Vfc3RhdGUpOgotCSogZ3N0L3RjcC9nc3RtdWx0aWZkc2luay5oOgotCSogZ3N0L3RjcC9nc3R0Y3BwbHVnaW4uYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOiAoZ3N0X3RjcHNlcnZlcnNpbmtfZ2V0X3R5cGUpLAotCShnc3RfdGNwc2VydmVyc2lua19jbGFzc19pbml0KSwgKGdzdF90Y3BzZXJ2ZXJzaW5rX2luaXQpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfc2VydmVyX3JlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfc2VsZWN0KSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF90Y3BzZXJ2ZXJzaW5rX2dldF9wcm9wZXJ0eSksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2luaXRfc2VuZCksIChnc3RfdGNwc2VydmVyc2lua19jbG9zZSk6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuaDoKLQlBZGRlZCBtdWx0aWZkc2luaywgbWFkZSB0Y3BzZXJ2ZXJzaW5rIGEgc3ViY2xhc3Mgb2YgZmRzaW5rLCByZW1vdmVkCi0Jb25lIG9mIHRoZSBsb2NrcywgYWRkZWQgcmVjb3ZlcnkgcG9saWN5IHRvIG11bHRpZmRzaW5rLgotCi0yMDA0LTA2LTI2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdmlkZW9yYXRlL2dzdHZpZGVvcmF0ZS5jOiAoZ3N0X3ZpZGVvcmF0ZV9jaGFpbik6Ci0JICBmaXggZGVjaXNpb24gZm9yIHdoZW4gZ2V0dGluZyBmcmFtZXMgd2l0aCBzYW1lIHRpbWVzdGFtcAotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfY2xhc3NfaW5pdCksIChnc3RfdjRsc3JjX2luaXQpLAotCShnc3RfdjRsc3JjX2dldCksIChnc3RfdjRsc3JjX3NldF9wcm9wZXJ0eSksCi0JKGdzdF92NGxzcmNfZ2V0X3Byb3BlcnR5KToKLQkqIHN5cy92NGwvZ3N0djRsc3JjLmg6Ci0JICBhZGQgbGF0ZW5jeSBvZmZzZXQgcHJvcGVydHkKLQotMjAwNC0wNi0yNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3ZpZGVvcmF0ZS9nc3R2aWRlb3JhdGUuYzogKGdzdF92aWRlb3JhdGVfY2hhaW4pLAotCShwbHVnaW5faW5pdCk6Ci0JICBmaXggZGVidWdnaW5nLiBhZGQgY2F0ZWdvcnkuCi0KLTIwMDQtMDYtMjUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuYzogKGdzdF9zaW5lc3JjX2dldCk6Ci0gICAgICAgICAgZml4IHdyb25nIG9mZnNldHMKLQotMjAwNC0wNi0yNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2Ffc3JjX2luaXQpLAotCShnc3RfYWxzYV9zcmNfZ2V0X3RpbWUpLCAoZ3N0X2Fsc2Ffc3JjX2xvb3ApLAotCShnc3RfYWxzYV9zcmNfY2hhbmdlX3N0YXRlKToKLQkgIHJldHVybiBhIHRpbWUgdGhhdCBpcyBpbiBzeW5jIHdpdGggdGhlIGVsZW1lbnQncyBwcm9jZXNzaW5nCi0KLTIwMDQtMDYtMjUgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzogKGdzdF90Y3BzZXJ2ZXJzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfdGNwc2VydmVyc2lua19pbml0KSwgKGdzdF90Y3BzZXJ2ZXJzaW5rX2hhbmRsZV9zZXJ2ZXJfcmVhZCksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2NsaWVudF9yZW1vdmUpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfY2xpZW50X3JlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19jbGllbnRfcXVldWVfZGF0YSksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2NsaWVudF9xdWV1ZV9jYXBzKSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfY2xpZW50X3F1ZXVlX2J1ZmZlciksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLAotCShnc3RfdGNwc2VydmVyc2lua19xdWV1ZV9idWZmZXIpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfY2xpZW50cyksIChnc3RfdGNwc2VydmVyc2lua190aHJlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19jaGFpbiksIChnc3RfdGNwc2VydmVyc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfdGNwc2VydmVyc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X3RjcHNlcnZlcnNpbmtfaW5pdF9zZW5kKSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfY2xvc2UpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmg6Ci0JU2VydmVyc2luayByZXdyaXRlLiBSZWFsbHkgZG8gbm9uIGJsb2NraW5nIHdyaXRlcyB0byBjbGllbnRzIGFuZAotCW1haW50YWluIGFuIGludGVybmFsIHF1ZXVlIHRvIGhhbmRsZSBzbG93ZXIgY2xpZW50cyB3aGlsZSBub3QKLQlkaXN0dXJiaW5nIGZhc3QgY2xpZW50cy4KLQotMjAwNC0wNi0yNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfZ2V0KToKLQkgIGJldHRlciBkZWJ1ZywgZG9uJ3Qgb3ZlcnJpZGUgT0ZGU0VUIGFuZCBPRkZTRVRfRU5ECi0KLTIwMDQtMDYtMjUgIElhaW4gPGlhaW5AcHJldHR5cGVvcGxlLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby1wcml2LmMgKGdtaV9zZXRfbWltZSk6IEFkZAotCW5hbWU9c291cmNlIGZvciB0aGUgd2F2cGFyc2UgcGlwZWxpbmUuCi0KLTIwMDQtMDYtMjQgIEpvaGFuIERhaGxpbiAgPGpvaGFuQGdub21lLm9yZz4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFlbmMuYyAodGhlb3JhX2VuY19jaGFpbik6IENhbGwKLQlnc3RfcGFkX3RyeV9zZXRfY2FwcyBpbnN0ZWFkIG9mIGdzdF9wYWRfc2V0X2V4cGxpY2l0X2NhcHMgc28gdGhlCi0Jc3RyZWFtaGVhZGVyIGNhcHMgYXJlIHNldCBjb3JyZWN0bHkuCi0KLTIwMDQtMDYtMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChyYXdfY2Fwc19mYWN0b3J5KSwKLQkoZ3N0X3ZvcmJpc2VuY19zZXR1cCksIChnc3Rfdm9yYmlzZW5jX3NldF9wcm9wZXJ0eSk6Ci0JICByZXNwZWN0IG1pbmltdW0gYml0cmF0ZTsgc2FtZSBjb3VsZCBiZSBkb25lIGZvciBtYXggYml0cmF0ZQotCi0yMDA0LTA2LTI0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jOiAocmF3X2NhcHNfZmFjdG9yeSksCi0JKGdzdF92b3JiaXNlbmNfc2V0dXApOgotCSAgZml4IHNhbXBsZSByYXRlIHJhbmdlCi0KLTIwMDQtMDYtMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC92b3JiaXMvb2dndm9yYmlzZW5jLmM6IChnc3Rfb2dndm9yYmlzZW5jX2NsYXNzX2luaXQpLAotCShnc3Rfb2dndm9yYmlzZW5jX3NldHVwKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzZW5jX2NsYXNzX2luaXQpLAotCShnc3Rfdm9yYmlzZW5jX3NldHVwKToKLQkgIHJlc29sdmUgYW1iaWd1aXRpZXMgaW4gY29kZSBhbmQgZGVzY3JpcHRpb24KLQotMjAwNC0wNi0yNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3N0YXJ0KSwgKGdzdF9hbHNhX3hydW5fcmVjb3ZlcnkpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2Ffc3JjX2luaXQpLAotCShnc3RfYWxzYV9zcmNfdXBkYXRlX2F2YWlsKSwgKGdzdF9hbHNhX3NyY19sb29wKToKLQlVc2UgYWxzYSB0cmlnZ2VyX3RzdGFtcCB0byBnZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3QKLQlzYW1wbGUgaW4gdGhlIGJ1ZmZlciBmb3IgbW9yZSBwcmVjaXNlIHN5bmMuIFNvbWUgY2xlYW51cHMuCi0KLTIwMDQtMDYtMjQgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvYXVkaW9yYXRlL2dzdGF1ZGlvcmF0ZS5jOiAoZ3N0X2F1ZGlvcmF0ZV9saW5rKSwKLQkoZ3N0X2F1ZGlvcmF0ZV9pbml0KSwgKGdzdF9hdWRpb3JhdGVfY2hhaW4pLAotCShnc3RfYXVkaW9yYXRlX3NldF9wcm9wZXJ0eSksIChnc3RfYXVkaW9yYXRlX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvdmlkZW9yYXRlL2dzdHZpZGVvcmF0ZS5jOiAoZ3N0X3ZpZGVvcmF0ZV9jbGFzc19pbml0KSwKLQkoZ3N0X3ZpZGVvcmF0ZV9jaGFpbik6Ci0JQWRkZWQgc29tZSBsb2dnaW5nLCBmaXhlZCBhbiBvdmVyZmxvdyBidWcgaW4gdmlkZW9yYXRlLgotCi0yMDA0LTA2LTI0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9raW8vTWFrZWZpbGUuYW06Ci0JICBmaXggZm9yIGJ1aWxkZGlyICE9IHNyY2RpciBhbmQgZGlzdGNoZWNrCi0KLTIwMDQtMDYtMjQgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9wbGF5L01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3RjcC9NYWtlZmlsZS5hbToKLQkqIHN5cy9keHIzL01ha2VmaWxlLmFtOgotCSAgZG9uJ3QgaW5jbHVkZSAtZW51bXR5cGVzLltjaF0gb3IgLW1hcnNoYWwuW2NoXSBmaWxlcyBpbiB0aGUgZGlzdGVkCi0JICB0YXJiYWxsLgotCSAgQWxzbyBhZGQgYWxsICoubGlzdCBmaWxlcyB0aGF0IHdlcmUgbWlzc2luZy4KLQkqIE1ha2VmaWxlLmFtOgotCSAgYWRkIGEgZGlzdGNoZWNrIGhvb2sgdG8gZW5zdXJlIHRoZSBhYm92ZSBkb2Vzbid0IGhhcHBlbiBhZ2Fpbi4KLQotMjAwNC0wNi0yMyAgRGF2aWQgSS4gTGVobiAgPGRsZWhuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZXh0L01ha2VmaWxlLmFtOiBzL0RUU19ESVI9ZHZkcmVhZC9EVFNfRElSPWR0cy8KLQotMjAwNC0wNi0yMyAgQ29saW4gV2FsdGVycyAgPHdhbHRlcnNAcmVkaGF0LmNvbT4KLQotCSogbTQvTWFrZWZpbGUuYW06IERpc3RyaWJ1dGUgZ3N0LWZpb25yZWFkLm00LgotCi0yMDA0LTA2LTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IGJhY2sgdG8gZGV2Ci0KLTIwMDQtMDYtMjMgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2Fsc2Ffc3RhcnQpLAotCShnc3RfYWxzYV94cnVuX3JlY292ZXJ5KToKLQkqIGV4dC9hbHNhL2dzdGFsc2EuaDoKLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2NoZWNrX2V2ZW50KSwKLQkoZ3N0X2Fsc2Ffc2lua19sb29wKSwgKGdzdF9hbHNhX3NpbmtfZ2V0X3RpbWUpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2Ffc3JjX2luaXQpLAotCShnc3RfYWxzYV9zcmNfZ2V0X3RpbWUpLCAoZ3N0X2Fsc2Ffc3JjX3VwZGF0ZV9hdmFpbCksCi0JKGdzdF9hbHNhX3NyY19sb29wKToKLQlBZGQgY2xvY2sgdG8gYWxzYXNyYy4gVGFrZSBuZXcgY2FwdHVyZSB0aW1lc3RhbXAgd2hlbgotCXJlc3RhcnRpbmcgYWZ0ZXIgYW4gb3ZlcnJ1bi4gU3BsaXQgdXAgc29tZSBmdW5jdGlvbnMgYmV0d2VlbgotCWFsc2FzcmMgYW5kIGFsc2FzaW5rLgotCi09PT0gcmVsZWFzZSAwLjguMiA9PT0KLQotMjAwNC0wNi0yMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfaW5pdCksIChnc3RfYWxzYV9kaXNwb3NlKSwKLQkoZ3N0X2Fsc2FfY2hhbmdlX3N0YXRlKSwgKGdzdF9hbHNhX3VwZGF0ZV9hdmFpbCksCi0JKGdzdF9hbHNhX3hydW5fcmVjb3ZlcnkpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfY2hlY2tfZXZlbnQpOgotCSAgbWVyZ2UgYmFjayBjaGFuZ2VzIGZyb20gcmVsZWFzZQotCi0yMDA0LTA2LTIzICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2F1ZGlvcmF0ZS9nc3RhdWRpb3JhdGUuYzogKGdzdF9hdWRpb3JhdGVfY2xhc3NfaW5pdCksCi0JKGdzdF9hdWRpb3JhdGVfaW5pdCksIChnc3RfYXVkaW9yYXRlX2NoYWluKSwKLQkoZ3N0X2F1ZGlvcmF0ZV9zZXRfcHJvcGVydHkpLCAoZ3N0X2F1ZGlvcmF0ZV9nZXRfcHJvcGVydHkpOgotCUltcGxlbWVudCBzYW1wbGUgZHJvcHBpbmcgYW5kIG5vdGlmeQotCi0yMDA0LTA2LTIyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzogKGdzdF90aGVvcmFfZW5jX2NsYXNzX2luaXQpLAotCSh0aGVvcmFfZW5jX3NpbmtfbGluayksICh0aGVvcmFfYnVmZmVyX2Zyb21fcGFja2V0KSwKLQkodGhlb3JhX3B1c2hfcGFja2V0KSwgKHRoZW9yYV9lbmNfY2hhaW4pOgotCVNvbWUgY2xlYW51cHMsIG1ha2Ugc3VyZSB0aGUgdGltZXN0YW1wcyBhcmUgY29ycmVjdC4KLQotMjAwNC0wNi0yMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2dldF90aW1lKSwgKGdzdF9hbHNhX2Nsb2NrX3VwZGF0ZSksCi0JKGdzdF9hbHNhX2NoYW5nZV9zdGF0ZSksIChnc3RfYWxzYV91cGRhdGVfYXZhaWwpLAotCShnc3RfYWxzYV94cnVuX3JlY292ZXJ5KToKLQkqIGV4dC9hbHNhL2dzdGFsc2EuaDoKLQkqIGV4dC9hbHNhL2dzdGFsc2FzcmMuYzogKGdzdF9hbHNhX3NyY19sb29wKToKLQlDbGVhbnVwcywgdGFrZSBxdWV1ZWQgc2FtcGxlcyBpbnRvIGFjY291bnQgd2hlbiByZXBvcnRpbmcKLQl0aGUgdGltZS4KLQotMjAwNC0wNi0yMiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6IChnc3RfdmlkZW9yYXRlX2NsYXNzX2luaXQpLAotCShnc3RfdmlkZW9yYXRlX2luaXQpOgotCUluaXRpYWxpemUgdGhlIHByb3BlcnR5IGFzIHdlbGwuCi0KLTIwMDQtMDYtMjIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdmlkZW9yYXRlL2dzdHZpZGVvcmF0ZS5jOiAoZ3N0X3ZpZGVvcmF0ZV9jbGFzc19pbml0KSwKLQkoZ3N0X3ZpZGVvcmF0ZV9pbml0KSwgKGdzdF92aWRlb3JhdGVfY2hhaW4pLAotCShnc3RfdmlkZW9yYXRlX3NldF9wcm9wZXJ0eSksIChnc3RfdmlkZW9yYXRlX2dldF9wcm9wZXJ0eSk6Ci0JQWRkIHByb3BlcnR5IHRvIG1ha2UgdmlkZW9yYXRlIHNpbGVudC4KLQlBZGQgcHJvcGVydHkgdG8gcHJlZmVyIG5ldyBmcmFtZXMgb3ZlciBvbGQgb25lcy4KLQotMjAwNC0wNi0yMiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBzeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW06Ci0gICAgICAgIFdvcmthcm91bmQgc28gdGhhdCB0aGUgb3N4dmlkZW8gLnNvIGZpbGUgZ2V0cyBsaW5rZWQgd2l0aCB0aGUKLSAgICAgICAgQ29jb2EsIE9wZW5HTCBhbmQgUXVpY2tUaW1lIGZyYW1ld29ya3MKLQotMjAwNC0wNi0yMiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBzeXMvb3N4YXVkaW8vTWFrZWZpbGUuYW06Ci0gICAgICAgIFdvcmthcm91bmQgc28gdGhhdCB0aGUgb3N4YXVkaW8gLnNvIGZpbGUgZ2V0cyBsaW5rZWQgd2l0aCB0aGUKLSAgICAgICAgQ29yZUF1ZGlvIGZyYW1ld29yawotCi0yMDA0LTA2LTIyICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQlXaG9vcHMsIG15IGZhdWx0Li4uZml4ZWQgYnVpbGQgaXNzdWVzCi0KLTIwMDQtMDYtMjIgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotICAgICAgICBBZGQgb2JqZWN0aXZlLWMgc3VwcG9ydCBpZiBydW5uaW5nIGluIERhcndpbi9NYWMgT1MgWAotCSogc3lzL01ha2VmaWxlLmFtOgotICAgICAgICAqIHN5cy9vc3h2aWRlbzoKLSAgICAgICAgKiBzeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW06Ci0gICAgICAgICogc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5oOgotICAgICAgICAqIHN5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsubToKLSAgICAgICAgKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cuaDoKLSAgICAgICAgKiBzeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubToKLSAgICAgICAgQWRkIG9zeHZpZGVvc2luaywgYSBjb2NvYS1iYXNlZCBvc3ggdmlkZW8gc2luawotCi0KLTIwMDQtMDYtMTkgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGV4dC9kdmRuYXYvZ3N0LWR2ZDoKLQlHcmFiIHRoZSBnY29uZiBrZXkgZnJvbSB0aGUgcmlnaHQgc3BvdAotCSogZ3N0L2RlYnVnL2dzdG5hdnNlZWsuYzogKGdzdF9uYXZzZWVrX2luaXQpLAotCShnc3RfbmF2c2Vla19zZWdzZWVrKSwgKGdzdF9uYXZzZWVrX2hhbmRsZV9zcmNfZXZlbnQpLAotCShnc3RfbmF2c2Vla19jaGFpbik6Ci0JKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5oOgotCSAgQWRkICdzJywgJ2UnIGFuZCAnbCcga2V5cHJlc3NlcyB0byBuYXZzZWVrIHRvIGRlZmluZSB0aGUgc3RhcnQsZW5kCi0JICBhbmQgbG9vcCBwYXJhbWV0ZXJzIG9mIGEgc2VnbWVudCBzZWVrLgotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzogKGdzdF92aWRlb3Rlc3RzcmNfaW5pdCksCi0JKGdzdF92aWRlb3Rlc3RzcmNfZ2V0X2V2ZW50X21hc2tzKSwKLQkoZ3N0X3ZpZGVvdGVzdHNyY19oYW5kbGVfc3JjX2V2ZW50KSwgKGdzdF92aWRlb3Rlc3RzcmNfZ2V0KToKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmg6Ci0JICBBZGQgc2Vla2luZyBzdXBwb3J0IHRvIHZpZGVvdGVzdHNyYwotCSAgSW5pdGlhbGlzZSB0aGUgdGltZXN0YW1wX29mZnNldCB2YXJpYWJsZS4KLQotMjAwNC0wNi0xOCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9zaWRwbGF5L2dzdHNpZGRlYy5jYzoKLQlGaXggbmVnb3RpYXRpb24gYW5kIHNldCBjb3JyZWN0IGVuZCBvZmZzZXQuCi0KLTIwMDQtMDYtMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogYnJhbmNoIGFuZCBwcmVyZWxlYXNlCi0KLTIwMDQtMDYtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c3JjLmM6IChnc3RfdGNwY2xpZW50c3JjX2luaXQpLAotCShnc3RfdGNwY2xpZW50c3JjX2dldGNhcHMpLCAoZ3N0X3RjcGNsaWVudHNyY19nZXQpLAotCShnc3RfdGNwY2xpZW50c3JjX2luaXRfcmVjZWl2ZSk6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5oOgotICAgICAgICAgIHJlYWQgY2FwcyB3aGVuIGNvbm5lY3RpbmcgdG8gc2VydmVyIGZvciBHRFAgc28gd2Ugc2V0IHRoZW0gY29ycmVjdGx5Ci0KLTIwMDQtMDYtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92aWRlb3JhdGUvZ3N0dmlkZW9yYXRlLmM6IChnc3RfdmlkZW9yYXRlX2NoYWluKToKLQkgIG5vdGlmeSBkcm9wcyBhbmQgZHVwbGljYXRlcwotCSogZ3N0L3ZpZGVvc2NhbGUvdmlkZW9zY2FsZS5jOiAodmlkZW9zY2FsZV9nZXRfc3RydWN0dXJlKToKLQkgIG5vIGdvb2QgcmVhc29uIHRvIGxpbWl0IG91cnNlbHZlcyB0byAxMDB4MTAwCi0KLTIwMDQtMDYtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3Y0bHNyY19pbml0KSwKLQkoZ3N0X3Y0bHNyY19vcGVuKSwgKGdzdF92NGxzcmNfc3JjX2xpbmspLCAoZ3N0X3Y0bHNyY19nZXRjYXBzKSwKLQkoZ3N0X3Y0bHNyY19nZXQpLCAoZ3N0X3Y0bHNyY19zZXRfcHJvcGVydHkpLAotCShnc3RfdjRsc3JjX2dldF9wcm9wZXJ0eSk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5oOgotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfc2V0X3dpbmRvd19wcm9wZXJ0aWVzKSwKLQkoZ3N0X3Y0bF9vcGVuKSwgKGdzdF92NGxfZ2V0X3BpY3R1cmUpLCAoZ3N0X3Y0bF9nZXRfYXVkaW8pLAotCShnc3RfdjRsX3NldF9hdWRpbyk6Ci0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5jOiAoZ3N0X3Y0bHNyY19ncmFiX2ZyYW1lKSwKLQkoZ3N0X3Y0bHNyY190cnlfY2FwdHVyZSk6Ci0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5oOgotCSAgY2hhbmdlIHRyeV9wYWxldHRlIHRvIG1vcmUgZ2VuZXJhbCB0cnlfY2FwdHVyZQotCSAgYWRkIGF1dG9wcm9iZSBvcHRpb24gc28gd2UgY2FuIHR1cm4gb2ZmIGF1dG9wcm9iaW5nCi0JICB2YXJpb3VzIGZpeGVzCi0KLTIwMDQtMDYtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGFkZCB2aWRlb3JhdGUKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfZmluYWxpemUpLAotCShnc3RfeGltYWdlc2lua19jbGFzc19pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfZmluYWxpemUpLAotCShnc3RfeHZpbWFnZXNpbmtfY2xhc3NfaW5pdCk6Ci0gICAgICAgICAgcnVuIHRoZW0gYXMgZmluYWxpemUsIG5vdCBkaXNwb3NlLCBzaW5jZSBkaXNwb3NlIGNhbiBiZSBpbnZva2VkCi0gICAgICAgICAgbXVsdGlwbGUgdGltZXMKLQotMjAwNC0wNi0xNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2luaXQpLCAoZ3N0X2Fsc2FfZGlzcG9zZSksCi0JKGdzdF9hbHNhX2dldF90aW1lKSwgKGdzdF9hbHNhX3hydW5fcmVjb3ZlcnkpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYWNsb2NrLmM6IChnc3RfYWxzYV9jbG9ja19nZXRfdHlwZSk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6IChnc3RfYWxzYV9zcmNfaW5pdCksIChnc3RfYWxzYV9zcmNfbG9vcCksCi0JKGdzdF9hbHNhX3NyY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5oOgotCU1ha2UgdGhlIHhydW4gY29kZSB0aW1lc3RhbXAgYW5kIG9mZnNldCB0aGUgYnVmZmVycyBjb3JyZWN0bHkuCi0JbW92ZWQgdGhlIGNsb2NrIHRvIHRoZSBiYXNlIGNsYXNzLCB1c2UgYWxzYSBtZXRob2RzIHRvIGdldCB0aW1lLgotCURvIGNvcnJlY3QgdGltZXN0YW1waW5nIG9uIG91dGdvaW5nIGJ1ZmZlcnMuCi0KLTIwMDQtMDYtMTcgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvYXVkaW9yYXRlL01ha2VmaWxlLmFtOgotCSogZ3N0L2F1ZGlvcmF0ZS9nc3RhdWRpb3JhdGUuYzogKGdzdF9hdWRpb3JhdGVfZ2V0X3R5cGUpLAotCShnc3RfYXVkaW9yYXRlX2Jhc2VfaW5pdCksIChnc3RfYXVkaW9yYXRlX2NsYXNzX2luaXQpLAotCShnc3RfYXVkaW9yYXRlX2xpbmspLCAoZ3N0X2F1ZGlvcmF0ZV9pbml0KSwgKGdzdF9hdWRpb3JhdGVfY2hhaW4pLAotCShnc3RfYXVkaW9yYXRlX3NldF9wcm9wZXJ0eSksIChnc3RfYXVkaW9yYXRlX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9hdWRpb3JhdGVfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQlBZGRlZCBhbiBhdWRpb3JhdGUgY29udmVydGVyIHRoYXQgZmlsbHMgaW4gZ2Fwcy4KLQotMjAwNC0wNi0xNyAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgotCi0JKiBleHQvdGNwLyo6IFJldmVydCBaYWhlZXIgY2hhbmdlcywgdG8gbWFrZSB0aGluZ3MgYWN0dWFsbHkgd29yayBhZ2Fpbi4KLQotMjAwNC0wNi0xNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19nZXQpOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfc3luY19tb2RlX2dldF90eXBlKSwKLQkoZ3N0X3Y0bHNyY19jbGFzc19pbml0KSwgKGdzdF92NGxzcmNfaW5pdCksIChnc3RfdjRsc3JjX2dldF9mcHMpLAotCShnc3RfdjRsc3JjX2dldCksIChnc3RfdjRsc3JjX3NldF9wcm9wZXJ0eSksCi0JKGdzdF92NGxzcmNfZ2V0X3Byb3BlcnR5KToKLQkqIHN5cy92NGwvZ3N0djRsc3JjLmg6Ci0JQWRkZWQgYSBjb3B5IG1vZGUgdG8gdjRsc3JjIHdoZXJlIGl0IHdpbGwgb3V0cHV0IGEgY29waWVkIHZlcnNpb24KLQlvZiBpdHMgaW50ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLgotCUZpeCB0aGUgd3JvbmcgRkxBR19TRVQgdXNhZ2UuIFRoZSBmbGFncyBhcmUgaW50ZWdlcnMsIG5vdCBiaXRzLCB5b3UKLQljYW4ndCB8IHRoZW0uCi0KLTIwMDQtMDYtMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOiAoZ3N0X29zc3NyY19nZXQpOgotCVRpbWVzdGFtcCBmaXhlcy4KLQotMjAwNC0wNi0xNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX3N5bmNfbW9kZV9nZXRfdHlwZSksCi0JKGdzdF92NGxzcmNfY2xhc3NfaW5pdCksIChnc3RfdjRsc3JjX2luaXQpLCAoZ3N0X3Y0bHNyY19nZXRfZnBzKSwKLQkoZ3N0X3Y0bHNyY19nZXQpLCAoZ3N0X3Y0bHNyY19zZXRfcHJvcGVydHkpLAotCShnc3RfdjRsc3JjX2dldF9wcm9wZXJ0eSk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5oOgotCSogc3lzL3Y0bC92NGwtb3ZlcmxheV9jYWxscy5jOiAoZ3N0X3Y0bF9zZXRfb3ZlcmxheSk6Ci0JQWRkZWQgYSBzeW5jIG1vZGUgZW51bSBwcm9wZXJ0eSB0byBjb250cm9sIHY0bHNyYyB0aW1lc3RhbXAgbWV0aG9kCi0JUmVtb3ZlZCB0aGUgdXNlLWZpeGVkLWZwcyBwcm9wZXJ0eSBhbmQgbW92ZWQgZnVuY3Rpb25hbGl0eSBpbgotCXRoZSBlbnVtLgotCURvbid0IGVycm9yIG9uIGFuIGVycm9yIHZhbHVlIGZyb20gdjRsLWNvbmYsIGl0IG1pZ2h0IG5vdCBhbHdheXMKLQliZSBhIHJlYWwgZXJyb3IuCi0KLTIwMDQtMDYtMTYgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBnc3QvdmlkZW9yYXRlL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvcmF0ZS9nc3R2aWRlb3JhdGUuYzogKGdzdF92aWRlb3JhdGVfZ2V0X3R5cGUpLAotCShnc3RfdmlkZW9yYXRlX2Jhc2VfaW5pdCksIChnc3RfdmlkZW9yYXRlX2NsYXNzX2luaXQpLAotCShnc3RfdmlkZW9yYXRlX2dldGNhcHMpLCAoZ3N0X3ZpZGVvcmF0ZV9saW5rKSwKLQkoZ3N0X3ZpZGVvcmF0ZV9pbml0KSwgKGdzdF92aWRlb3JhdGVfY2hhaW4pLAotCShnc3RfdmlkZW9yYXRlX3NldF9wcm9wZXJ0eSksIChnc3RfdmlkZW9yYXRlX2dldF9wcm9wZXJ0eSksCi0JKGdzdF92aWRlb3JhdGVfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQlBZGRlZCBhIHZpZGVvIHRpbWVzdGFtcCBjb3JyZWN0b3IuCi0KLTIwMDQtMDYtMTUgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCWZpeGVkIGEgcG90ZW50aWFsIGxlYWsgd2l0aCBwcmV2aW91cyBjb21taXQKLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9wZWVrX2hlYWQpOgotCi0yMDA0LTA2LTE1ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5jOiAoZ3N0X3JpZmZfcGVla19oZWFkKToKLQlBZGRlZCBtaXNzaW5nIHJlZmNvdW50LCBmaXhlcyBidWcgIzE0NDQyNQotCUNoZWVycyBUaW0gZm9yIGZpbmRpbmcgdGhlIGJ1ZwotCi0yMDA0LTA2LTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMvdjRsL2dzdHY0bC5jOiAocGx1Z2luX2luaXQpOgotCSogc3lzL3Y0bC9nc3R2NGxjb2xvcmJhbGFuY2UuYzoKLQkqIHN5cy92NGwvZ3N0djRsY29sb3JiYWxhbmNlLmg6Ci0JKiBzeXMvdjRsL2dzdHY0bGVsZW1lbnQuYzoKLQkqIHN5cy92NGwvZ3N0djRsZWxlbWVudC5oOgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NpbmsuYzogKGdzdF92NGxtanBlZ3NpbmtfY2xhc3NfaW5pdCk6Ci0JKiBzeXMvdjRsL2dzdHY0bG1qcGVnc2luay5oOgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NyYy5jOiAoZ3N0X3Y0bG1qcGVnc3JjX2NsYXNzX2luaXQpOgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NyYy5oOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfZ2V0X2Zwc19saXN0KSwKLQkoZ3N0X3Y0bHNyY19nZXRfZnBzKSwgKGdzdF92NGxzcmNfc3JjY29ubmVjdCksCi0JKGdzdF92NGxzcmNfZ2V0Y2FwcyksIChnc3RfdjRsc3JjX2dldCk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5oOgotCSogc3lzL3Y0bC9nc3R2NGx0dW5lci5jOgotCSogc3lzL3Y0bC9nc3R2NGx0dW5lci5oOgotCSogc3lzL3Y0bC9nc3R2NGx4b3ZlcmxheS5jOgotCSogc3lzL3Y0bC9nc3R2NGx4b3ZlcmxheS5oOgotCSogc3lzL3Y0bC92NGwtb3ZlcmxheV9jYWxscy5jOiAoZ3N0X3Y0bF9zZXRfb3ZlcmxheSksCi0JKGdzdF92NGxfc2V0X3dpbmRvdyksIChnc3RfdjRsX2VuYWJsZV9vdmVybGF5KToKLQkqIHN5cy92NGwvdjRsX2NhbGxzLmM6IChnc3RfdjRsX3NldF93aW5kb3dfcHJvcGVydGllcyksCi0JKGdzdF92NGxfb3BlbiksIChnc3RfdjRsX2dldF9waWN0dXJlKSwgKGdzdF92NGxfZ2V0X2F1ZGlvKSwKLQkoZ3N0X3Y0bF9zZXRfYXVkaW8pOgotCSogc3lzL3Y0bC92NGxfY2FsbHMuaDoKLQkqIHN5cy92NGwvdjRsbWpwZWdzaW5rX2NhbGxzLmM6IChnc3RfdjRsbWpwZWdzaW5rX3N5bmNfdGhyZWFkKSwKLQkoZ3N0X3Y0bG1qcGVnc2lua19xdWV1ZV9mcmFtZSksIChnc3RfdjRsbWpwZWdzaW5rX3N5bmNfZnJhbWUpLAotCShnc3RfdjRsbWpwZWdzaW5rX3NldF9idWZmZXIpLCAoZ3N0X3Y0bG1qcGVnc2lua19zZXRfcGxheWJhY2spLAotCShnc3RfdjRsbWpwZWdzaW5rX3BsYXliYWNrX2luaXQpLAotCShnc3RfdjRsbWpwZWdzaW5rX3BsYXliYWNrX3N0YXJ0KSwgKGdzdF92NGxtanBlZ3NpbmtfZ2V0X2J1ZmZlciksCi0JKGdzdF92NGxtanBlZ3NpbmtfcGxheV9mcmFtZSksIChnc3RfdjRsbWpwZWdzaW5rX3dhaXRfZnJhbWUpLAotCShnc3RfdjRsbWpwZWdzaW5rX3BsYXliYWNrX3N0b3ApLAotCShnc3RfdjRsbWpwZWdzaW5rX3BsYXliYWNrX2RlaW5pdCk6Ci0JKiBzeXMvdjRsL3Y0bG1qcGVnc2lua19jYWxscy5oOgotCSogc3lzL3Y0bC92NGxtanBlZ3NyY19jYWxscy5jOiAoZ3N0X3Y0bG1qcGVnc3JjX3F1ZXVlX2ZyYW1lKSwKLQkoZ3N0X3Y0bG1qcGVnc3JjX3N5bmNfbmV4dF9mcmFtZSksIChnc3RfdjRsbWpwZWdzcmNfc2V0X2J1ZmZlciksCi0JKGdzdF92NGxtanBlZ3NyY19zZXRfY2FwdHVyZSksIChnc3RfdjRsbWpwZWdzcmNfc2V0X2NhcHR1cmVfbSksCi0JKGdzdF92NGxtanBlZ3NyY19jYXB0dXJlX2luaXQpLCAoZ3N0X3Y0bG1qcGVnc3JjX2NhcHR1cmVfc3RhcnQpLAotCShnc3RfdjRsbWpwZWdzcmNfZ3JhYl9mcmFtZSksIChnc3RfdjRsbWpwZWdzcmNfcmVxdWV1ZV9mcmFtZSksCi0JKGdzdF92NGxtanBlZ3NyY19jYXB0dXJlX3N0b3ApLCAoZ3N0X3Y0bG1qcGVnc3JjX2NhcHR1cmVfZGVpbml0KToKLQkqIHN5cy92NGwvdjRsbWpwZWdzcmNfY2FsbHMuaDoKLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6IChnc3RfdjRsc3JjX3F1ZXVlX2ZyYW1lKSwKLQkoZ3N0X3Y0bHNyY19zeW5jX2ZyYW1lKSwgKGdzdF92NGxzcmNfc2V0X2NhcHR1cmUpLAotCShnc3RfdjRsc3JjX2NhcHR1cmVfaW5pdCksIChnc3RfdjRsc3JjX2NhcHR1cmVfc3RhcnQpLAotCShnc3RfdjRsc3JjX2dyYWJfZnJhbWUpLCAoZ3N0X3Y0bHNyY19yZXF1ZXVlX2ZyYW1lKSwKLQkoZ3N0X3Y0bHNyY19jYXB0dXJlX3N0b3ApLCAoZ3N0X3Y0bHNyY19jYXB0dXJlX2RlaW5pdCksCi0JKGdzdF92NGxzcmNfdHJ5X3BhbGV0dGUpOgotCSogc3lzL3Y0bC92NGxzcmNfY2FsbHMuaDoKLQkgIGJ1bmNoIG9mIHBhcmFub2lhIGNsZWFudXBzCi0KLTIwMDQtMDYtMTQgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYS5jOiAoY2RwYXJhbm9pYV9pbml0KSwKLQkoY2RwYXJhbm9pYV9nZXQpLCAoY2RwYXJhbm9pYV9vcGVuKSwgKGNkcGFyYW5vaWFfY2hhbmdlX3N0YXRlKToKLQlTZW5kIGRpc2NvbnQgZXZlbnRzIGFuZCBjaGFuZ2UgdGltZXN0YW1wcyBhcHByb3ByaWF0ZWx5IHdoZW4KLQl3ZSBnZXQgYSBzZWVrIGV2ZW50LiAgKGJ1ZyAjMTQ0MjQwKQotCSogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYS5oOgotCi0yMDA0LTA2LTE0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogVXNlIHNuZF9wY21faHdfcGFyYW1zX3NldF9yYXRlIF9uZWFyIGluc3RlYWQgb2YKLQkgIHNuZF9wY21faHdfcGFyYW1zX3NldF9yYXRlICBzaW5jZSB0aGUgbGF0dGVyIGZhaWxzIGZvciBubyBnb29kCi0JICByZWFzb24gb24gc29tZSBzZXR1cHMuCi0KLTIwMDQtMDYtMTQgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3ZvbHVtZS9kZW1vLmM6ICh2YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrKTogZXhwMTAoKSBpcyBub3QKLQlzdGFuZGFyZC4gIFRoYW5rIHlvdSBmb3IgcGxheWluZy4KLQotMjAwNC0wNi0xNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2ltZ2NvbnZlcnQuYzogKGltZ19jb252ZXJ0KToKLQlQYXRjaCAxLjMgYnJva2UgdGhlIG9yZGVyaW5nIG9mIHRoZSBjb2xvcnNwYWNlIGluZm8gYW5kCi0JbWFkZSB0aGUgcGx1Z2luIGJhc2ljYWxseSB3b3JrIGJ5IGNvaW5jaWRlbmNlLCByZW9yZGVyZWQKLQl0aGUgaW5mby4KLQotMjAwNC0wNi0xNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOgotCSogZXh0L21hZC9nc3RtYWQuYzoKLQkgIHN5bmMgY2Fwcy4gIE1ha2Ugc3VyZSBtYWQgY2FuIG9ubHkgb3V0cHV0IGEgbGlzdCBvZiByYXRlcywgbm90Ci0JICBhIGZ1bGwgcmFuZ2UuICBJbiB0aGUgZnV0dXJlLCBoYXZlIHRocmVlIGNhcHMgbGlzdHMgZm9yIGVhY2ggb2YgdGhlCi0JICBtcGVnIHZlcnNpb25zLiAgQ2hhbmdlIG1wZWd2ZXJzaW9uIHRvIGEgZG91YmxlIGFzIHdlbGwuCi0KLTIwMDQtMDYtMTQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC92b2x1bWUvLmN2c2lnbm9yZToKLQkqIGdzdC92b2x1bWUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvdm9sdW1lL2RlbW8uYzogKHZhbHVlX2NoYW5nZWRfY2FsbGJhY2spLCAoaWRsZXIpLAotCShzZXR1cF9ndWkpLCAobWFpbik6Ci0JICBhZGRlZCBzbWFsbCBkZW1vIGFwcAotCi0yMDA0LTA2LTEzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBleHQvZXNkL2VzZHNpbmsuYzogKGdzdF9lc2RzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvZXNkL2VzZHNpbmsuaDoKLQlDbG9zZSB0aGUgZXNkIGNvbm5lY3Rpb24gb24gcGF1c2UsIGJlY2F1c2UgZXNkIHdpbGwganVzdCB3YWl0IC0KLQlibG9ja2luZyBhbGwgb3RoZXIgZXNkIGNsaWVudHMgaW5kZWZpbml0ZWx5LgotCi0yMDA0LTA2LTEyICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IHJlcGxhY2VkIGEgZ193YXJuaW5nIHdoaWNoIEkgYWRkZWQgaW4gbXkKLQkgIHByZXZpb3VzIGNvbW1pdCB3aXRoIEdTVF9ERUJVRwotCi0yMDA0LTA2LTEyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBhZGQgYSBoZWFkZXIgY2hlY2sgZm9yIGEgZHZkcmVhZCBoZWFkZXIgaW4gZHZkbmF2LiAgRml4ZXMgIzEzMzAwMgotCi0yMDA0LTA2LTEyICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c2luay5jOiAoZ3N0X3RjcGNsaWVudHNpbmtfaW5pdF9zZW5kKToKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c2luay5oOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfaW5pdF9yZWNlaXZlKToKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c3JjLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzogKGdzdF90Y3BzZXJ2ZXJzaW5rX2luaXQpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfc2VydmVyX3JlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19pbml0X3NlbmQpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNyYy5jOiAoZ3N0X3RjcHNlcnZlcnNyY19pbml0X3JlY2VpdmUpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzcmMuaDoKLQlNb2RpZmllZCB0aGUgdGNwIHBsdWdpbnMgc28gdGhleSBhcmUgcG9ydGFibGUgKElQdjQsSVB2NiwgYW55IGZ1dHVyZQotICAgICAgICB2ZXJzaW9uIG9mIElQKQotCi0yMDA0LTA2LTEyICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQlBZGRlZCBvZ2cgbGlicmFyeSBzbyB0aGF0IE9TWCBkZXRlY3RzIGxpYnRoZW9yYSBwcm9wZXJseQotCi0yMDA0LTA2LTExICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKHRoZW9yYV9kZWNfY2hhaW4pLAotCSh0aGVvcmFfZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JRG9uJ3QgdHJ5IHRvIGRlY29kZSBmcmFtZXMgYmVmb3JlIHdlIHJlY2VpdmVkIGEga2V5ZnJhbWUuCi0KLTIwMDQtMDYtMTEgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfY2xhc3NfaW5pdCksCi0JKGdzdF9vZ2dfbXV4X2luaXQpLCAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9nZXRfaGVhZGVycyksIChnc3Rfb2dnX211eF9zZXRfaGVhZGVyX29uX2NhcHMpLAotCShnc3Rfb2dnX211eF9zZW5kX2hlYWRlcnMpLCAoZ3N0X29nZ19tdXhfbG9vcCksCi0JKGdzdF9vZ2dfbXV4X2dldF9wcm9wZXJ0eSksIChnc3Rfb2dnX211eF9zZXRfcHJvcGVydHkpOgotCUFkZGVkIHByb3BlcnR5IHRvIHNldCB0aGUgbWF4aW11bSBkZWxheSBvZiBhIHBhZ2UuCi0KLTIwMDQtMDYtMTAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfY2xhc3NfaW5pdCksCi0JKGdzdF9vZ2dfbXV4X2luaXQpLCAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9nZXRfaGVhZGVycyksIChnc3Rfb2dnX211eF9zZXRfaGVhZGVyX29uX2NhcHMpLAotCShnc3Rfb2dnX211eF9zZW5kX2hlYWRlcnMpLCAoZ3N0X29nZ19tdXhfbG9vcCksCi0JKGdzdF9vZ2dfbXV4X2dldF9wcm9wZXJ0eSksIChnc3Rfb2dnX211eF9zZXRfcHJvcGVydHkpOgotCUFkZGVkIG1heC1kZWxheSBwcm9wZXJ0eSB0byBjb250cm9sIHRoZSBtYXhpbXVtIGFtb3VudAotCW9mIGRhdGEgdG8gcHV0IGluIG9uZSBwYWdlLgotCi0yMDA0LTA2LTEwICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzogKGdzdF90aGVvcmFfZW5jX2NsYXNzX2luaXQpLAotCShnc3RfdGhlb3JhX2VuY19pbml0KSwgKHRoZW9yYV9lbmNfc2lua19saW5rKSwKLQkodGhlb3JhX2J1ZmZlcl9mcm9tX3BhY2tldCksICh0aGVvcmFfZW5jX3NldF9wcm9wZXJ0eSksCi0JKHRoZW9yYV9lbmNfZ2V0X3Byb3BlcnR5KToKLQlTZXQgZHVyYXRpb24gb24gZW5jb2RlZCBidWZmZXIsIGFkZGVkIHNvbWUgbW9yZSBwcm9wZXJ0aWVzCi0KLTIwMDQtMDYtMTAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9nZXRfaGVhZGVycyksIChnc3Rfb2dnX211eF9zZXRfaGVhZGVyX29uX2NhcHMpLAotCShnc3Rfb2dnX211eF9zZW5kX2hlYWRlcnMpLCAoZ3N0X29nZ19tdXhfbG9vcCk6Ci0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAodGhlb3JhX2VuY19jaGFpbik6Ci0JRml4IHJlZmNvdW50aW5nIGJ1Z3MKLQotMjAwNC0wNi0xMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X2luaXQpLAotCShnc3RfYXNmX2RlbXV4X2xvb3ApLCAoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX2ZpbGUpLAotCShnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfZGF0YSksIChnc3RfYXNmX2RlbXV4X2hhbmRsZV9kYXRhKSwKLQkoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX29iamVjdCksIChnc3RfYXNmX2RlbXV4X2dldF9zdHJlYW0pLAotCShnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfY2h1bmspLCAoZ3N0X2FzZl9kZW11eF9oYW5kbGVfc2lua19ldmVudCksCi0JKGdzdF9hc2ZfZGVtdXhfaGFuZGxlX3NyY19ldmVudCksIChnc3RfYXNmX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkpLAotCShnc3RfYXNmX2RlbXV4X2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguaDoKLQkgIFlvdSBrbm93IENoaW1haXJhPyAiSSAtIEhBVEUgLSBFVkVSWVRISU5HIi4gWWVhaCwgdGhhdCdzIHdoYXQgdGhpcwotCSAgZmVlbHMgbGlrZS4gSSB0aGluayB3ZSBzaG91bGQgc2V0IGEgbmV3IHJlcXVpcmVtZW50IGZvciBkZW11eGVycwotCSAgZnJvbSBub3cgb24gdG8gaW1wbGVtZW50IHNhbmUgbG9vcCBmdW5jdGlvbnMsIGRhdGEgbG9vcHMsIHF1ZXJ5Ci0JICBhbmQgc2VlayBmdW5jdGlvbnMgYmVmb3JlIGZpcnN0IGNvbW1pdCBpbnRvIENWUy4gQW5kIHRoaXMgY29tbWl0Ci0JICBmaXhlcyBhbGwgb2YgdGhlIGFib3ZlLgotCi0yMDA0LTA2LTEwICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IChnc3Rfdm9yYmlzX3RhZ19hZGQpOiBtYWtlIHN1cmUgcGFyc2VkCi0JICB2b3JiaXMgY29tbWVudHMgYXJlIHByb3Blcmx5IGVuY29kZWQgaW4gVVRGLTggYmVmb3JlIGFkZGluZyB0aGVtCi0JICB0byBhIEdzdFRhZ0xpc3QKLQotMjAwNC0wNi0wOSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChhZGRfY2hhbm5lbHMpOgotCSAgaGFuZGxlIG1pbiA8PSBtYXggY29ycmVjdGx5Ci0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9maXhhdGVfdG9fbWltZXR5cGUpLAotCShnc3RfYWxzYV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQpLCAoZ3N0X2Fsc2FfZml4YXRlKToKLQkgIGFkZCBmaXhhdGlvbiBmdW5jdGlvbnMgc28gd2UgZml4YXRlIGNvcnJlY3RseS4gTm8gcHJlZmVycmluZyBvZiBhbGF3Ci0JICBhbnltb3JlIGJlY2F1c2UgaXQncyB0aGUgZmlyc3Qgc3RydWN0dXJlLgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2Ffc3dfcGFyYW1zX2R1bXApLAotCShnc3RfYWxzYV9od19wYXJhbXNfZHVtcCk6Ci0JICBhZGQgZnVuY3Rpb25zIHRvIGVhc2UgZGVidWdnaW5nIGluIGFsc2FsaWIKLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3Byb2JlX2h3X3BhcmFtcyksCi0JKGdzdF9hbHNhX3NldF9od19wYXJhbXMpLCAoZ3N0X2Fsc2Ffc2V0X3N3X3BhcmFtcyksCi0JKGdzdF9hbHNhX3N0YXJ0X2F1ZGlvKToKLQkgIG9ubHkgc3BlY2lmeSBodyBwYXJhbXMgaWYgd2UgcmVhbGx5IHNldHVwIGEgZm9ybWF0IChmaXhlcyAjMTM0MDA3IC0KLQkgIG9yIGF0IGxlYXN0IHdvcmtzIGFyb3VuZCBpdCkKLQotMjAwNC0wNi0wOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnbXV4LmM6IChnc3Rfb2dnX211eF9pbml0KSwKLQkoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLCAoZ3N0X29nZ19tdXhfYnVmZmVyX2Zyb21fcGFnZSksCi0JKGdzdF9vZ2dfbXV4X3B1c2hfcGFnZSksIChnc3Rfb2dnX211eF9nZXRfaGVhZGVycyksCi0JKGdzdF9vZ2dfbXV4X3NldF9oZWFkZXJfb25fY2FwcyksIChnc3Rfb2dnX211eF9zZW5kX2hlYWRlcnMpLAotCShnc3Rfb2dnX211eF9sb29wKToKLQlVc2Ugc3RyZWFtIGNhcHMgdG8gc2V0dXAgdGhlIGluaXRpYWwgcGFnZXMgaW4gdGhlIG9nZyBzdHJlYW0uCi0JQ29ycmVjdGx5IHNldCB0aGUgc3RyZWFtaGVhZGVyIGNhcHMgb24gdGhlIHNyY3BhZC4KLQotMjAwNC0wNi0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfZ2V0X2Zwc19saXN0KSwKLQkoZ3N0X3Y0bHNyY19nZXRfZnBzKSwgKGdzdF92NGxzcmNfc3JjY29ubmVjdCksCi0JKGdzdF92NGxzcmNfZ2V0Y2Fwcyk6Ci0JKiBzeXMvdjRsL3Y0bF9jYWxscy5jOiAoZ3N0X3Y0bF9zZXRfd2luZG93X3Byb3BlcnRpZXMpLAotCShnc3RfdjRsX2dldF9waWN0dXJlKSwgKGdzdF92NGxfZ2V0X2F1ZGlvKSwgKGdzdF92NGxfc2V0X2F1ZGlvKToKLQkgIGFkZCBxdWVyeWluZyBvZiBmcHMgbGlzdHMgZm9yIHdlYmNhbXMuICBOZWdvdGlhdGluZyB0byBhIGZyYW1lcmF0ZQotCSAgbm93IHdvcmtzLgotCi0yMDA0LTA2LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAodGhlb3JhX2J1ZmZlcl9mcm9tX3BhY2tldCksCi0JKHRoZW9yYV9wdXNoX2J1ZmZlciksICh0aGVvcmFfcHVzaF9wYWNrZXQpLAotCSh0aGVvcmFfc2V0X2hlYWRlcl9vbl9jYXBzKSwgKHRoZW9yYV9lbmNfY2hhaW4pOgotCSAgbWFyayBidWZmZXJzIGFuZCBwdXQgb24gc3RyZWFtaGVhZGVyLCByYXcgdGhlb3JhIHN0cmVhbWluZwotCSAgbm93IHdvcmtzIHRvbywgd2hlZQotCi0yMDA0LTA2LTA4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdGNwL2dzdHRjcC5jOiAoZ3N0X3RjcF9nZHBfcmVhZF9oZWFkZXIpLAotCShnc3RfdGNwX2dkcF9yZWFkX2NhcHMpOgotICAgICAgICAgIGRvIGEgbG9vcGluZyByZWFkIGZvciBjYXBzIGFuZCBHRFAgaGVhZGVycyB0b28KLQotMjAwNC0wNi0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfZ2V0KToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6IChnc3RfdGNwc2VydmVyc3JjX2dldCk6Ci0gICAgICAgICAgcmV0dXJuIEVPUyBpbnN0ZWFkIG9mIE5VTEwgaW4gX2dldAotCi0yMDA0LTA2LTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3RjcC9nc3R0Y3AuYzogKGdzdF90Y3BfZ2RwX3JlYWRfaGVhZGVyKSwKLQkoZ3N0X3RjcF9nZHBfcmVhZF9jYXBzKSwgKGdzdF90Y3BfZ2RwX3dyaXRlX2hlYWRlciksCi0JKGdzdF90Y3BfZ2RwX3dyaXRlX2NhcHMpOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfZ2V0KToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6IChnc3RfdGNwc2VydmVyc3JjX2dkcF9yZWFkX2NhcHMpLAotCShnc3RfdGNwc2VydmVyc3JjX2dkcF9yZWFkX2hlYWRlciksIChnc3RfdGNwc2VydmVyc3JjX2dldCk6Ci0JTWVtb3J5IGxlYWsgZml4ZXMKLQotMjAwNC0wNi0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L3ZvcmJpcy9NYWtlZmlsZS5hbToKLQkqIGV4dC92b3JiaXMvdm9yYmlzLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc3BhcnNlLmM6IChnc3Rfdm9yYmlzX3BhcnNlX2Jhc2VfaW5pdCksCi0JKGdzdF92b3JiaXNfcGFyc2VfY2xhc3NfaW5pdCksIChnc3Rfdm9yYmlzX3BhcnNlX2luaXQpLAotCSh2b3JiaXNfcGFyc2Vfc2V0X2hlYWRlcl9vbl9jYXBzKSwgKHZvcmJpc19wYXJzZV9jaGFpbiksCi0JKHZvcmJpc19wYXJzZV9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3ZvcmJpcy92b3JiaXNwYXJzZS5oOgotICAgICAgICAgIGFkZGluZyBhIHZvcmJpc3BhcnNlIGVsZW1lbnQgdGhhdCBtYXJrcyB0aGUgYnVmZmVycywgc3RyZWFtaW5nCi0gICAgICAgICAgcmF3IHZvcmJpcyB1c2luZyBHRFAgbm93IHdvcmtzLCB3aGVlCi0KLTIwMDQtMDYtMDggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvanBlZy9NYWtlZmlsZS5hbToKLQkqIGV4dC9qcGVnL1JFQURNRToKLQkqIGV4dC9qcGVnL2dzdGpwZWcuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmM6IChnc3Rfc21va2VkZWNfZ2V0X3R5cGUpLAotCShnc3Rfc21va2VkZWNfYmFzZV9pbml0KSwgKGdzdF9zbW9rZWRlY19jbGFzc19pbml0KSwKLQkoZ3N0X3Ntb2tlZGVjX2luaXQpLCAoZ3N0X3Ntb2tlZGVjX2xpbmspLCAoZ3N0X3Ntb2tlZGVjX2NoYWluKToKLQkqIGV4dC9qcGVnL2dzdHNtb2tlZGVjLmg6Ci0JKiBleHQvanBlZy9nc3RzbW9rZWVuYy5jOiAoZ3N0X3Ntb2tlZW5jX2dldF90eXBlKSwKLQkoZ3N0X3Ntb2tlZW5jX2Jhc2VfaW5pdCksIChnc3Rfc21va2VlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9zbW9rZWVuY19pbml0KSwgKGdzdF9zbW9rZWVuY19nZXRjYXBzKSwgKGdzdF9zbW9rZWVuY19saW5rKSwKLQkoZ3N0X3Ntb2tlZW5jX3Jlc3luYyksIChnc3Rfc21va2VlbmNfY2hhaW4pLAotCShnc3Rfc21va2VlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9zbW9rZWVuY19nZXRfcHJvcGVydHkpOgotCSogZXh0L2pwZWcvZ3N0c21va2VlbmMuaDoKLQkqIGV4dC9qcGVnL3Ntb2tlY29kZWMuYzogKHNtb2tlY29kZWNfaW5pdF9kZXN0aW5hdGlvbiksCi0JKHNtb2tlY29kZWNfZmx1c2hfZGVzdGluYXRpb24pLCAoc21va2Vjb2RlY190ZXJtX2Rlc3RpbmF0aW9uKSwKLQkoc21va2Vjb2RlY19pbml0X3NvdXJjZSksIChzbW9rZWNvZGVjX2ZpbGxfaW5wdXRfYnVmZmVyKSwKLQkoc21va2Vjb2RlY19za2lwX2lucHV0X2RhdGEpLCAoc21va2Vjb2RlY19yZXN5bmNfdG9fcmVzdGFydCksCi0JKHNtb2tlY29kZWNfdGVybV9zb3VyY2UpLCAoc21va2Vjb2RlY19lbmNvZGVfbmV3KSwKLQkoc21va2Vjb2RlY19kZWNvZGVfbmV3KSwgKHNtb2tlY29kZWNfaW5mb19mcmVlKSwKLQkoc21va2Vjb2RlY19zZXRfcXVhbGl0eSksIChzbW9rZWNvZGVjX2dldF9xdWFsaXR5KSwKLQkoc21va2Vjb2RlY19zZXRfdGhyZXNob2xkKSwgKHNtb2tlY29kZWNfZ2V0X3RocmVzaG9sZCksCi0JKHNtb2tlY29kZWNfc2V0X2JpdHJhdGUpLCAoc21va2Vjb2RlY19nZXRfYml0cmF0ZSksCi0JKGZpbmRfYmVzdF9zaXplKSwgKGFic19kaWZmKSwgKHB1dCksIChzbW9rZWNvZGVjX2VuY29kZSksCi0JKHNtb2tlY29kZWNfcGFyc2VfaGVhZGVyKSwgKHNtb2tlY29kZWNfZGVjb2RlKToKLQkqIGV4dC9qcGVnL3Ntb2tlY29kZWMuaDoKLQlBZGRlZCBhIG5ldyBzaW1wbGUganBlZyBiYXNlZCBjb2RlYwotCi0yMDA0LTA2LTA4ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGlwYXJ0X211eF9sb29wKToKLQlGaXggbWVtb3J5IGxlYWsKLQotMjAwNC0wNi0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzogKGdzdF90Y3BjbGllbnRzcmNfZ2V0KToKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5jOiAoZ3N0X3RjcHNlcnZlcnNpbmtfY2xpZW50X3JlbW92ZSksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2hhbmRsZV9jbGllbnRfcmVhZCksIChnc3RfdGNwX2J1ZmZlcl93cml0ZSksCi0JKGdzdF90Y3BzZXJ2ZXJzaW5rX2hhbmRsZV9jbGllbnRfd3JpdGUpLCAoZ3N0X3RjcHNlcnZlcnNpbmtfY2hhaW4pLAotCShnc3RfdGNwc2VydmVyc2lua19pbml0X3NlbmQpLCAoZ3N0X3RjcHNlcnZlcnNpbmtfY2xvc2UpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmg6Ci0gICAgICAgICAgdGFrZSBzdHJlYW1oZWFkZXIgaW50byBhY2NvdW50Ci0KLTIwMDQtMDYtMDggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9sZXZlbC9NYWtlZmlsZS5hbToKLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX2NsYXNzX2luaXQpOgotCSAgY2xlYW4gdXAgbWFyc2hhbCBnZW5lcmF0aW9uCi0KLTIwMDQtMDYtMDggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC90Y3AvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNpbmsuYzogKGdzdF90Y3BjbGllbnRzaW5rX2dldF90eXBlKSwKLQkoZ3N0X3RjcGNsaWVudHNpbmtfY2xhc3NfaW5pdCksIChnc3RfdGNwY2xpZW50c2lua19pbml0KSwKLQkoZ3N0X3RjcGNsaWVudHNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF90Y3BjbGllbnRzaW5rX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOiAoZ3N0X3RjcGNsaWVudHNyY19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcGNsaWVudHNyY19pbml0KSwgKGdzdF90Y3BjbGllbnRzcmNfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3RjcGNsaWVudHNyY19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzaW5rLmM6IChnc3RfdGNwc2VydmVyc2lua19jbGFzc19pbml0KSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfaW5pdCksIChnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfc2VydmVyX3JlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfY2xpZW50X3JlYWQpLAotCShnc3RfdGNwc2VydmVyc2lua19oYW5kbGVfY2xpZW50X3dyaXRlKSwKLQkoZ3N0X3RjcHNlcnZlcnNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF90Y3BzZXJ2ZXJzaW5rX2dldF9wcm9wZXJ0eSk6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuaDoKLQkgIGFkZCBzaWduYWxzIGNsaWVudC1hZGRlZCBhbmQgY2xpZW50LXJlbW92ZWQKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmM6IChnc3RfdGNwc2VydmVyc3JjX2NsYXNzX2luaXQpLAotCShnc3RfdGNwc2VydmVyc3JjX2luaXQpLCAoZ3N0X3RjcHNlcnZlcnNyY19zZXRfcHJvcGVydHkpLAotCShnc3RfdGNwc2VydmVyc3JjX2dldF9wcm9wZXJ0eSk6Ci0JdW5pZm9ybWl6ZWQsIGNoYW5nZSBkZWZhdWx0IHByb3RvY29sIHRvIE5PTkUKLQkqIGdzdC90Y3AvZ3N0dGNwLW1hcnNoYWwubGlzdDogYWRkZWQKLTIwMDQtMDYtMDcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfY2hlY2tfZXZlbnQpOgotCSAgaGFuZGxlIGRpc2NvbnQgZXZlbnRzIGlmIHRoZXkgaGFwcGVuIGJlZm9yZSBjYXBzIG5lZ28KLQotMjAwNC0wNi0wNyAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguYzogKGdzdF9tdWx0aXBhcnRfZGVtdXhfYmFzZV9pbml0KSwKLQkoZ3N0X211bHRpcGFydF9maW5kX3BhZF9ieV9taW1lKSwgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhaW4pLAotCShnc3RfbXVsdGlwYXJ0X2RlbXV4X3BsdWdpbl9pbml0KToKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpcGFydF9tdXhfaW5pdCksIChnc3RfbXVsdGlwYXJ0X211eF9sb29wKSwKLQkoZ3N0X211bHRpcGFydF9tdXhfY2hhbmdlX3N0YXRlKToKLQlTbWFsbCB1cGRhdGVzLCBmaXggYSBtZW1sZWFrCi0KLTIwMDQtMDYtMDcgIFN0ZXBoYW5lIExvZXVpbGxldCAgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBjb25maWd1cmUuYWM6IE9TUyBwb3J0YWJpbGl0eQotCSogZXh0L2FydHMvZ3N0X2FydHMuYzogaWRlbQotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50LmM6IGlkZW0KLQkqIHN5cy9vc3MvZ3N0b3NzbWl4ZXIuYzogaWRlbQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IGlkZW0KLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IGlkZW0KLQkqIHN5cy9vc3Mvb3NzX3Byb2JlLmM6IGlkZW0KLQkgIC0gY2hlY2sgZm9yIHNvdW5kY2FyZC5oIGluIGRpZmZlcmVudCBwbGFjZXMgZm9yIHNvbWUgQlNECi0KLTIwMDQtMDYtMDcgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBBVVRIT1JTOgotCUFkZCBtZSB0byB0aGUgYXV0aG9ycyBmaWxlCi0JKiBjb25maWd1cmUuYWM6Ci0JSW5jcmVhc2UgdGhlIGxpYmR2IHJlcXVpcmVtZW50IHRvID49IHZlcnNpb24gMC4xMDAKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2luaXQpLCAoZ3N0X2R2ZGVjX3NyY19jb252ZXJ0KSwKLQkoZ3N0X2R2ZGVjX3NyY19xdWVyeSksIChnc3RfZHZkZWNfaGFuZGxlX3NpbmtfZXZlbnQpLAotCShnc3RfZHZkZWNfcHVzaCksIChnc3RfZHZkZWNfbG9vcCksIChnc3RfZHZkZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9kdi9nc3RkdmRlYy5oOgotCUFkZCBzdXBwb3J0IGZvciB0aGUgbmV3X21lZGlhIGZsYWcgd2hlbiBzZW5kaW5nIERJU0NPTlQgZXZlbnRzCi0JTWFrZSB0aGUgcXVlcnlpbmcgd29yayB3aGVuIHZpZGVvIHBhZCBpcyBub3QgbGlua2VkCi0KLTIwMDQtMDYtMDcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0LmkubUB6ZW4uY28udWs+Ci0KLQlyZXZpZXdlZCBieSBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9taXhtYXRyaXgvbWl4bWF0cml4LmM6IChnc3RfbWl4bWF0cml4X2luaXQpOgotCSAgY3JlYXRlIGEgTlVMTC1pbml0aWFsaXplZCBhcnJheSBvZiBwYWRzLCBzbyB3ZSBkb24ndCB0aGluayB0aGV5Ci0JICBleGlzdCBhbHJlYWR5LiAoZml4ZXMgIzE0MzEzMCkKLQotMjAwNC0wNi0wNyAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvbWl4bWF0cml4L21peG1hdHJpeC5jOiAoZ3N0X21peG1hdHJpeF9pbml0KSwKLQkobWl4bWF0cml4X3Jlc2l6ZSksIChnc3RfbWl4bWF0cml4X3NldF9hbGxfY2FwcyksCi0JKGdzdF9taXhtYXRyaXhfcmVxdWVzdF9uZXdfcGFkKSwgKGdzdF9taXhtYXRyaXhfbG9vcCk6Ci0JICBkb24ndCB1c2UgLy8gY29tZW50cwotCi0yMDA0LTA2LTA3ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3NhbXBsZXNfdG9fdGltZXN0YW1wKToKLQkgIGNhc3QgdG8gR3N0Q2xvY2tUaW1lIHRvIGdldCBoaWdoZXIgZ3JhbnVsYXJpdHkKLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2NoZWNrX2V2ZW50KToKLQkgIHVzZSBnc3RfZWxlbWVudF9zZXRfdGltZV9kZWxheSB0byBnZXQgdGhlIGV4YWN0IHRpbWUKLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NoYWluKToKLQkgIHVzZSB0aGUgbmVnb3RpYXRlZCByYXRlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgZnJhbWUncyByYXRlIHdoaWNoCi0JICBtaWdodCBiZSB3cm9uZyBiZWNhdXNlIG9mIGJpdCBlcnJvcnMuIFRoaXMgYXZvaWRzIGVtaXR0aW5nIHRvdGFsbHkKLQkgIGJvZ3VzIHRpbWVzdGFtcHMgYW5kIHNjcmV3aW5nIHN5bmMuCi0JKGZpeGVzICMxNDM0NTQpCi0KLTIwMDQtMDYtMDcgIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0LmkubUB6ZW4uY28udWs+Ci0KLQlyZXZpZXdlZCBieSBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hZGRlci9nc3RhZGRlci5jOiAoZ3N0X2FkZGVyX2xvb3ApOgotCSAgcHJvcGVybHkgZXJyb3Igb3V0IHdoZW4gbm8gbmVnb3RpYXRpb24gaGFzIGhhcHBlbmVkIHlldC4gKGZpeGVzCi0JICAjMTQzMDMyKQotCi0yMDA0LTA2LTA2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19oYW5kbGVfZXZlbnQpOgotCSAgZm9yd2FyZCBjb3JyZWN0bHkgdHJhbnNmb3JtZWQgb2Zmc2V0IGluIGRpc2NvbnQgZXZlbnRzLiBCYXNlZCBvbgotCSAgcGF0Y2ggYnkgQXJ3ZWQgdi4gTWVya2F0ei4gKGZpeGVzICMxNDI4NTEpCi0KLTIwMDQtMDYtMDYgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29kZWNtYXAuYzogdGhhdCdzCi0JR19IQVZFX0dOVUNfVkFSQVJHUywgbm90IEdfSEFWRV9HTlVfVkFSQVJHUy4gIFNob3VsZCBmaXggY29tcGlsZQotCXByb2JsZW1zIG9uIHNldmVyYWwgc3lzdGVtcy4KLQotMjAwNC0wNi0wNiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAoZ3N0X3ZvcmJpc19kZWNfaW5pdCk6Ci0JICB1c2UgZXhwbGljaXQgY2FwcyBvbiB0aGUgc3JjcGFkCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19jaGFpbik6Ci0JICBwcm9wZXJseSBlcnJvciBvdXQgaWYgY2FwcyBjb3VsZG4ndCBiZSBzZXQgKGZpeGVzICMxNDI3NjQpCi0KLTIwMDQtMDYtMDYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfcHJvYmVfaHdfcGFyYW1zKSwKLQkoZ3N0X2Fsc2Ffc2V0X2h3X3BhcmFtcyksIChnc3RfYWxzYV9zZXRfc3dfcGFyYW1zKSwKLQkoZ3N0X2Fsc2Ffc3RhcnRfYXVkaW8pOgotCSAgLSBkb24ndCBjYWxsIHNldF9wZXJpb2RzX2ludGVnZXIgYW55bW9yZSwgaXQgYnJlYWtzIHRoZQotCSAgY29uZmlndXJhdGlvbiByYW5kb21seQotCSAgLSBjYWxsIHNuZF9wY21faHdfcGFyYW1zX3NldF9hY2Nlc3MgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyBtYXNrcwotCSAgLSBkb24ndCBmYWlsIGlmIHRoZSBzd19wYXJhbXMgY2FuJ3QgYmUgc2V0LCBqdXN0IHVzZSB0aGUgZGVmYXVsdAotCSAgcGFyYW1zIGFuZCBob3BlIGl0IHdvcmtzLiBBbHNhbGliIGhhcyB3ZWlyZCBpc3N1ZXMgd2hlbiB5b3UgdG91Y2gKLQkgIHN3X3BhcmFtcyBhbmQgZG9lcyBubyBwcm9wZXIgZXJyb3IgcmVwb3J0aW5nIGFib3V0IHdoYXQgZmFpbGVkLgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2Ffb3Blbl9hdWRpbyksCi0JKGdzdF9hbHNhX2Nsb3NlX2F1ZGlvKToKLQkgIG1ha2Ugb3VyIGFsc2EgZGVidWdnaW5nIGdvIHZpYSBnc3QgZGVidWdnaW5nIGFuZCBub3QgY29uZGl0aW9uYWxseQotCSAgZGVmaW5lZAotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSAgYWRkIEFMU0FfREVCVUdfRkxVU0ggbWFjcm8KLQkqIGV4dC9hbHNhL2dzdGFsc2FwbHVnaW4uYzogKGdzdF9hbHNhX2Vycm9yX3dyYXBwZXIpLAotCShwbHVnaW5faW5pdCk6Ci0JICB3cmFwIGFsc2EgZXJyb3JzIHRvIGJlIHByaW50ZWQgdmlhIHRoZSBnc3QgZGVidWdnaW5nIHN5c3RlbSBhbmQgbm90Ci0JICBzcGFtbWVkIHRvIHN0ZGVycgotCi0yMDA0LTA2LTA0ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9pbml0KSwKLQkoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksIChnc3RfcXRkZW11eF9oYW5kbGVfc3JjX2V2ZW50KSwKLQkoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpLCAoZ3N0X3F0ZGVtdXhfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLCAocXRkZW11eF9kdW1wX212aGQpLAotCShxdGRlbXV4X3BhcnNlX3RyYWspOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5oOgotCSAgQml0Y2guIEFsc28ga25vd24gYXMgc2Vla2luZywgcXVlcnlpbmcgJiBjby4KLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfaW5pdCksIChnc3Rfb3Nzc2lua19jaGFpbiksCi0JKGdzdF9vc3NzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuaDoKLQkgIFJlc3luY2luZyBpcyBmb3Igd2VlbmllcywgdGhpcyBoYWNrIGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kIHdhcwotCSAgYnJva2VuIGFueXdheSAoc2luY2UgaXQgLSB1bmludGVuZGVkbHkgLSBhbHdheXMgbGVhdmVzIHJlc3luYyB0bwotCSAgVFJVRSkuCi0KLTIwMDQtMDYtMDUgIEFuZHJldyBUdXJuZXIgPHp4b21iaWVAaG90cG9wLmNvbT4KLQotCSogZ3N0L3RjcC9nc3R0Y3AuYzogcG9ydGFiaWxpdHkgKFNvbGFyaXMgMTAvRnJlZUJTRCkKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c3JjLmg6IGlkZW0KLQkgIC0gZGVmaW5lIE1TR19OT1NJR05BTCBpZiBub3QgZG9uZQotCSAgLSBpbmNsdWRlIHVuaXN0ZC5oIGZvciBvZmZfdAotICAgICAgICAgIChmaXhlcyAjMTQzNzQ5KQotCi0yMDA0LTA2LTA1ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9raW8vTWFrZWZpbGUuYW06Ci0JICBjaGVjayBmb3IgcXQncyBtb2MgcHJlcHJvY2Vzc29yIGV4cGxpY2l0bHkgYW5kIHVzZSBpdAotCi0yMDA0LTA2LTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZ3N0L3RjcC9nc3R0Y3AuYzogKGdzdF90Y3Bfc29ja2V0X3dyaXRlKToKLQkgIGRvbid0IGdldCBhIHNpZ25hbCBmb3IgRVBJUEUgb24gc29ja2V0IHdyaXRlcwotCSAgKHNvbWVib2R5IGNoZWNrIGlmIHRoaXMgd29ya3Mgb24gb3RoZXIgcGxhdGZvcm1zKQotCi0yMDA0LTA2LTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhY2xvY2suYzogKGdzdF9hbHNhX2Nsb2NrX2dldF90eXBlKToKLQkqIGV4dC9hbHNhL2dzdGFsc2FzcmMuYzogKGdzdF9hbHNhX3NyY19sb29wKToKLSAgICAgICAgICBjaGVjayBlcnJvciBjb25kaXRpb24gb24gYXZhaWxhYmxlIHNhbXBsZXMgY29ycmVjdGx5Ci0KLTIwMDQtMDYtMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FzcmMuYzogKGdzdF9hbHNhX3NyY19nZXRfdGltZSk6Ci0gICAgICAgICAgYXZvaWQgYSBzZWdmYXVsdAotCSogZ3N0L3RjcC9nc3R0Y3AuYzogKGdzdF90Y3Bfc29ja2V0X3dyaXRlKSwgKGdzdF90Y3Bfc29ja2V0X3JlYWQpLAotCShnc3RfdGNwX2dkcF9yZWFkX2hlYWRlciksIChnc3RfdGNwX2dkcF9yZWFkX2NhcHMpOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzcmMuYzogKGdzdF90Y3BzZXJ2ZXJzcmNfZ2RwX3JlYWRfY2FwcyksCi0JKGdzdF90Y3BzZXJ2ZXJzcmNfZ2RwX3JlYWRfaGVhZGVyKToKLSAgICAgICAgIHVzZSBzc2l6ZV90IG92ZXIgc2l6ZV90IHNpbmNlIHRoZSBmb3JtZXIgaXMgc2lnbmVkIGFuZCB0aHVzIHRoZQotICAgICAgICAgY2hlY2sgZm9yIGVycm9yIGNvZGVzIGNhbiB3b3JrCi0KLTIwMDQtMDYtMDIgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JcmV2aWV3ZWQgYnk6IEpvaGFuCi0KLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpcGFydF9tdXhfbG9vcCk6Ci0JT29wcwotCi0yMDA0LTA2LTAyICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguYzogKGdzdF9tdWx0aXBhcnRfbXV4X2NsYXNzX2luaXQpLAotCShnc3RfbXVsdGlwYXJ0X211eF9pbml0KSwgKGdzdF9tdWx0aXBhcnRfbXV4X2xvb3ApLAotCShnc3RfbXVsdGlwYXJ0X211eF9nZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpcGFydF9tdXhfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X211bHRpcGFydF9tdXhfY2hhbmdlX3N0YXRlKToKLQlBZGRlZCBjb25maWd1cmFibGUgYm91bmRhcnkgc3BlY2lmaWVyLCBhZGRlZCB0aGUgdmFsdWUgYXMgYQotCWNhcHMgZmllbGQgYXMgd2VsbC4KLQotMjAwNC0wNi0wMiAgWmFoZWVyIEFiYmFzIE1lcmFsaSAgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotCi0JKiBnc3QvdGNwL2dzdHRjcC5jOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuYzoKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c3JjLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNyYy5jOgotCSAgLSBwb3J0YWJpbGl0eSBmaXgsIHRvIGNvbXBpbGUgb24gT1NYCi0gICAgICAgICAgICAoZml4ZXMgIzE0MzE0NikKLQotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmM6Ci0JICAtIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIE9TWAotICAgICAgICAgICAgKGZpeGVzICMxNDMxNTMpCi0KLTIwMDQtMDYtMDIgIFN0ZXBoYW5lIExvZXVpbGxldCA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmMgOiBzaWduIHdhcm5pbmcgZml4ZXMKLQotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVydHJhY2suYyA6Ci0JICBkbyBubyB1c2UgZGVmaW5lcyB3aGljaCBhcmUgZ2xpYiAyLjQgc3BlY2lmaWMKLQotMjAwNC0wNi0wMSAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzogc3RyaXAgZW5kaW5nIGZyYW1pbmcgYml0IGZyb20gdm9yYmlzY29tbWVudAotCSAgYnVmZmVyIHNpbmNlIGxpYmZsYWMgZG9lc24ndCBleHBlY3QgaXQgKHJlcG9ydHMgYSBzeW5jIGVycm9yIHdoZW4KLQkgIGl0IGVuY291bnRlcnMgdGhhdCkKLQotCi0yMDA0LTA2LTAxICBPd2VuIEZyYXNlci1HcmVlbiAgPG93ZW5AZGlzY29iYWJlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVydHJhY2suaDogQ2hhbmdlZCBzdHJ1Y3Qgc3ludGF4Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXJ0cmFjay5jOgotCShnc3RfbWl4ZXJfdHJhY2tfZ2V0X3Byb3BlcnR5KSwgKGdldF9taXhlcl90cmFja19pbml0KSwKLQkoZ2V0X21peGVyX3RyYWNrX2dldF9wcm9wZXJ0eSk6IEFkZGVkIHByb3BlcnR5IGFjY2Vzc29ycwotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVyb3B0aW9ucy5oOiBDaGFuZ2VkIHN0cnVjdCBzeW50YXgKLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlcm9wdGlvbnMuYzoKLQkoZ3N0X21peGVyX29wdGlvbnNfZ2V0X3ZhbHVlcyk6IEFkZGVkCi0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXIuaDogQ2hhbmdlZCBHc3RNaXhlckNsYXNzIHN5bnRheAotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVyLmM6IEZpeGVkIGNvbW1lbnQKLQotCi0yMDA0LTA2LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2Ffb3Blbl9hdWRpbyk6Ci0gICAgICAgICAgaW1wcm92ZSBlcnJvciBtZXNzYWdlcyBvbiBvcGVuCi0KLQotMjAwNC0wNi0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogc3lzL3Y0bC92NGwtb3ZlcmxheV9jYWxscy5jOiAoZ3N0X3Y0bF9zZXRfb3ZlcmxheSk6Ci0gICAgICAgICAgY2hlY2sgaWYgdjRsLWNvbmYgaXMgaW4gcGF0aAotCi0yMDA0LTA2LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXByaXYuYzogKGdtaV9zZXRfbWltZSk6Ci0gICAgICAgICAgY2hhbmdlIGFzc2VydCB0byBhIG1vcmUgcmVhZGFibGUgZXJyb3IgbWVzc2FnZQotCi0yMDA0LTA1LTMxICBTdGVwaGFuZSBMb2V1aWxsZXQgIDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL3R1bmVyY2hhbm5lbC5oOgotCSAgLSBhZGQgYSBmcmVxX211bHRpcGxpY2F0b3IgZmllbGQgdG8gbWFrZSB0aGUgY29udmVyc2lvbgotCSAgICBiZXR3ZWVuIGludGVybmFsIGZyZXF1ZW5jeSB1bml0IGFuZCBIegotCSogc3lzL3Y0bC9nc3R2NGxlbGVtZW50LmM6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyZWxlbWVudC5jOgotCSAgLSBjaGFuZ2UgZGVmYXVsdCB2aWRlbyBkZXZpY2UgdG8gL2Rldi92aWRlbzAKLQkqIHN5cy92NGwvdjRsX2NhbGxzLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Ci0JICAtIHdlIG9ubHkgZXhwb3NlIGZyZXF1ZW5jeSB0byB0aGUgdXNlciBpbiBIeiBpbnN0ZWFkIG9mCi0JICAgIGJhc3RhcmQgdjRsWCB1bml0IChlaXRoZXIgNjIuNWtIeiBvciA2Mi41SHopCi0KLTIwMDQtMDUtMzEgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2NoYWluKToKLQkgIEluaXRpYWxpc2UgYl9vX3MgYW5kIGVfb19zIHZhcmlhYmxlcwotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwc193aXRoX2RhdGEpOgotCSAgQWRkIHNvbWUgdW51c3VhbCBmb3VyY2MncyBmcm9tIG1wbGF5ZXIgYXZpJ3MKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9wbHVnaW5faW5pdCk6Ci0JICBNYWtlIHRoZSBtdXhlciBoYXZlIHJhbmsgR1NUX1JBTktfTk9ORSwgc28gaXQgZG9lc24ndCBtZXNzIHVwCi0JICBhdXRvcGx1Z2dpbmcuCi0KLTIwMDQtMDUtMjggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QvYWxwaGEvTWFrZWZpbGUuYW06Ci0JKiBnc3QvYWxwaGEvZ3N0YWxwaGEuYzogKGdzdF9hbHBoYV9tZXRob2RfZ2V0X3R5cGUpLAotCShnc3RfYWxwaGFfZ2V0X3R5cGUpLCAoZ3N0X2FscGhhX2Jhc2VfaW5pdCksCi0JKGdzdF9hbHBoYV9jbGFzc19pbml0KSwgKGdzdF9hbHBoYV9pbml0KSwgKGdzdF9hbHBoYV9zZXRfcHJvcGVydHkpLAotCShnc3RfYWxwaGFfZ2V0X3Byb3BlcnR5KSwgKGdzdF9hbHBoYV9zaW5rX2xpbmspLCAoZ3N0X2FscGhhX2FkZCksCi0JKGdzdF9hbHBoYV9jaHJvbWFfa2V5KSwgKGdzdF9hbHBoYV9jaGFpbiksCi0JKGdzdF9hbHBoYV9jaGFuZ2Vfc3RhdGUpLCAocGx1Z2luX2luaXQpOgotCUEgcGx1Z2luIHRvIGFkZCBhbiBhbHBoYSBjaGFubmVsIHRvIEk0MjAgdmlkZW8uIENhbiBvcHRpb25hbGx5IGRvCi0JY2hyb21hIGtleWluZy4KLQkqIGdzdC9tdWx0aXBhcnQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbXVsdGlwYXJ0L211bHRpcGFydC5jOiAocGx1Z2luX2luaXQpOgotCSogZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jOiAoZ3N0X211bHRpcGFydF9kZW11eF9iYXNlX2luaXQpLAotCShnc3RfbXVsdGlwYXJ0X2RlbXV4X2NsYXNzX2luaXQpLCAoZ3N0X211bHRpcGFydF9kZW11eF9pbml0KSwKLQkoZ3N0X211bHRpcGFydF9kZW11eF9maW5hbGl6ZSksIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2hhbmRsZV9ldmVudCksCi0JKGdzdF9tdWx0aXBhcnRfZmluZF9wYWRfYnlfbWltZSksIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2NoYWluKSwKLQkoZ3N0X211bHRpcGFydF9kZW11eF9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfbXVsdGlwYXJ0X2RlbXV4X3BsdWdpbl9pbml0KToKLQkqIGdzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmM6IChnc3RfbXVsdGlwYXJ0X211eF9nZXRfdHlwZSksCi0JKGdzdF9tdWx0aXBhcnRfbXV4X2Jhc2VfaW5pdCksIChnc3RfbXVsdGlwYXJ0X211eF9jbGFzc19pbml0KSwKLQkoZ3N0X211bHRpcGFydF9tdXhfZ2V0X3NpbmtfZXZlbnRfbWFza3MpLCAoZ3N0X211bHRpcGFydF9tdXhfaW5pdCksCi0JKGdzdF9tdWx0aXBhcnRfbXV4X3Npbmtjb25uZWN0KSwgKGdzdF9tdWx0aXBhcnRfbXV4X3BhZF9saW5rKSwKLQkoZ3N0X211bHRpcGFydF9tdXhfcGFkX3VubGluayksCi0JKGdzdF9tdWx0aXBhcnRfbXV4X3JlcXVlc3RfbmV3X3BhZCksCi0JKGdzdF9tdWx0aXBhcnRfbXV4X2hhbmRsZV9zcmNfZXZlbnQpLAotCShnc3RfbXVsdGlwYXJ0X211eF9uZXh0X2J1ZmZlciksIChnc3RfbXVsdGlwYXJ0X211eF9jb21wYXJlX3BhZHMpLAotCShnc3RfbXVsdGlwYXJ0X211eF9xdWV1ZV9wYWRzKSwgKGdzdF9tdWx0aXBhcnRfbXV4X2xvb3ApLAotCShnc3RfbXVsdGlwYXJ0X211eF9nZXRfcHJvcGVydHkpLCAoZ3N0X211bHRpcGFydF9tdXhfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X211bHRpcGFydF9tdXhfY2hhbmdlX3N0YXRlKSwgKGdzdF9tdWx0aXBhcnRfbXV4X3BsdWdpbl9pbml0KToKLQlBIE11bHRpcGFydCBkZW11eGVyL211eGVyLiBOb3Qgc3VyZSBpZiBpdCB2aW9sYXRlcyBzcGVjcy4gVXNlZCB0bwotCXNlbmQgbXVsdGlwYXJ0IGpwZWcgaW1hZ2VzIHRvIGEgYnJvd3Nlci4KLQkqIGdzdC92aWRlb2JveC9NYWtlZmlsZS5hbToKLQkqIGdzdC92aWRlb2JveC9SRUFETUU6Ci0JKiBnc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3guYzogKGdzdF92aWRlb19ib3hfZmlsbF9nZXRfdHlwZSksCi0JKGdzdF92aWRlb19ib3hfZ2V0X3R5cGUpLCAoZ3N0X3ZpZGVvX2JveF9iYXNlX2luaXQpLAotCShnc3RfdmlkZW9fYm94X2NsYXNzX2luaXQpLCAoZ3N0X3ZpZGVvX2JveF9pbml0KSwKLQkoZ3N0X3ZpZGVvX2JveF9zZXRfcHJvcGVydHkpLCAoZ3N0X3ZpZGVvX2JveF9nZXRfcHJvcGVydHkpLAotCShnc3RfdmlkZW9fYm94X3NpbmtfbGluayksIChnc3RfdmlkZW9fYm94X2k0MjApLAotCShnc3RfdmlkZW9fYm94X2F5dXYpLCAoZ3N0X3ZpZGVvX2JveF9jaGFpbiksCi0JKGdzdF92aWRlb19ib3hfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQlDcm9wcyBvciBhZGRzIGJvcmRlcnMgYXJvdW5kIGFuIGltYWdlLiBjYW4gZG8gYWxwaGEgY2hhbm5lbAotCWJvcmRlcnMgYXMgd2VsbC4KLQkqIGdzdC92aWRlb21peGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvbWl4ZXIvUkVBRE1FOgotCSogZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlci5jOiAoZ3N0X3ZpZGVvbWl4ZXJfcGFkX2dldF90eXBlKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfcGFkX2Jhc2VfaW5pdCksIChnc3RfdmlkZW9taXhlcl9wYWRfY2xhc3NfaW5pdCksCi0JKGdzdF92aWRlb21peGVyX3BhZF9nZXRfc2lua19ldmVudF9tYXNrcyksCi0JKGdzdF92aWRlb21peGVyX3BhZF9nZXRfcHJvcGVydHkpLAotCShnc3RfdmlkZW9taXhlcl9wYWRfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfcGFkX3Npbmtjb25uZWN0KSwgKGdzdF92aWRlb21peGVyX3BhZF9saW5rKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfcGFkX3VubGluayksIChnc3RfdmlkZW9taXhlcl9wYWRfaW5pdCksCi0JKGdzdF92aWRlb19taXhlcl9iYWNrZ3JvdW5kX2dldF90eXBlKSwgKGdzdF92aWRlb21peGVyX2dldF90eXBlKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfYmFzZV9pbml0KSwgKGdzdF92aWRlb21peGVyX2NsYXNzX2luaXQpLAotCShnc3RfdmlkZW9taXhlcl9pbml0KSwgKGdzdF92aWRlb21peGVyX3JlcXVlc3RfbmV3X3BhZCksCi0JKGdzdF92aWRlb21peGVyX2hhbmRsZV9zcmNfZXZlbnQpLAotCShnc3RfdmlkZW9taXhlcl9ibGVuZF9heXV2X2k0MjApLCAoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jaGVja2VyKSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfZmlsbF9jb2xvciksIChnc3RfdmlkZW9taXhlcl9maWxsX3F1ZXVlcyksCi0JKGdzdF92aWRlb21peGVyX2JsZW5kX2J1ZmZlcnMpLCAoZ3N0X3ZpZGVvbWl4ZXJfdXBkYXRlX3F1ZXVlcyksCi0JKGdzdF92aWRlb21peGVyX2xvb3ApLCAoZ3N0X3ZpZGVvbWl4ZXJfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3ZpZGVvbWl4ZXJfc2V0X3Byb3BlcnR5KSwgKGdzdF92aWRlb21peGVyX2NoYW5nZV9zdGF0ZSksCi0JKHBsdWdpbl9pbml0KToKLQlHZW5lcmljIHZpZGVvIG1peGVyIHBsdWdpbiwgY2FuIGhhbmRsZSBtdWx0aXBsZSBpbnB1dHMgYWxsIHdpdGgKLQlkaWZmZXJlbnQgZnJhbWVyYXRlcyBhbmQgdmlkZW8gc2l6ZXMuIElzIGZ1bGx5IGFscGhhIGNoYW5uZWwKLQlhd2FyZS4KLQotMjAwNC0wNS0yNyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmM6IChnc3RfYWxzYV9taXhlcl9idWlsZF9saXN0KToKLQkgIFNlbGVjdCBmaXJzdCB0cmFjayBhcyBtYXN0ZXIgdHJhY2suIE5vdCBzdXJlIGhvdyBlbHNlIHRvIGhhbmRsZQotCSAgdGhhdC4uLgotCSogZXh0L29nZy9nc3RvZ2dtdXguYzogKGdzdF9vZ2dfbXV4X25leHRfYnVmZmVyKToKLQkgIERpc2NhcmQgZGlzY29udCBldmVudHMuIFNob3VsZCBmaXggIzE0Mjk2Mi4KLQotMjAwNC0wNS0yNiAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvTWFrZWZpbGUuYW06Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzogKGdzdF9hbHNhX21peGVyX2ludGVyZmFjZV9pbml0KSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfYnVpbGRfbGlzdCksIChnc3RfYWxzYV9taXhlcl9nZXRfdm9sdW1lKSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfc2V0X3ZvbHVtZSksIChnc3RfYWxzYV9taXhlcl9zZXRfbXV0ZSksCi0JKGdzdF9hbHNhX21peGVyX3NldF9yZWNvcmQpLCAoZ3N0X2Fsc2FfbWl4ZXJfc2V0X29wdGlvbiksCi0JKGdzdF9hbHNhX21peGVyX2dldF9vcHRpb24pOgotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmg6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJvcHRpb25zLmM6Ci0JKGdzdF9hbHNhX21peGVyX29wdGlvbnNfZ2V0X3R5cGUpLAotCShnc3RfYWxzYV9taXhlcl9vcHRpb25zX2NsYXNzX2luaXQpLCAoZ3N0X2Fsc2FfbWl4ZXJfb3B0aW9uc19pbml0KSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfb3B0aW9uc19uZXcpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyb3B0aW9ucy5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVydHJhY2suYzogKGdzdF9hbHNhX21peGVyX3RyYWNrX25ldyk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJ0cmFjay5oOgotCSAgQWRkIGVudW1lcmF0aW9ucyAoYXMgR3N0TWl4ZXJPcHRpb25zKS4gTWFrZSBjb3JyZWN0IGRpc3RpbmN0aW9uCi0JICBiZXR3ZWVuIGlucHV0L291dHB1dCB0cmFja3MuIEFkZCBjYXB0dXJlL3BsYXliYWNrIHByaXZhdGUgZmxhZy4KLQkgIFVzZSBmbGFnIHRvIGRlY2lkZSBvbiB3aGV0aGVyIHRvIHNldCBjYXB0dXJlIG9yIHBsYXliYWNrIHZvbHVtZXMKLQkgIG9yIHN3aXRjaGVzLiBVc2UgcGxheWJhY2sgYW5kIHJlY29yZCBzd2l0Y2hlcy4KLQkqIGdzdC1saWJzL2dzdC9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci1tYXJzaGFsLmxpc3Q6Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXIuYzogKGdzdF9taXhlcl9jbGFzc19pbml0KSwKLQkoZ3N0X21peGVyX3NldF9vcHRpb24pLCAoZ3N0X21peGVyX2dldF9vcHRpb24pLAotCShnc3RfbWl4ZXJfbXV0ZV90b2dnbGVkKSwgKGdzdF9taXhlcl9yZWNvcmRfdG9nZ2xlZCksCi0JKGdzdF9taXhlcl92b2x1bWVfY2hhbmdlZCksIChnc3RfbWl4ZXJfb3B0aW9uX2NoYW5nZWQpOgotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVyLmg6Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXJvcHRpb25zLmM6IChnc3RfbWl4ZXJfb3B0aW9uc19nZXRfdHlwZSksCi0JKGdzdF9taXhlcl9vcHRpb25zX2NsYXNzX2luaXQpLCAoZ3N0X21peGVyX29wdGlvbnNfaW5pdCksCi0JKGdzdF9taXhlcl9vcHRpb25zX2Rpc3Bvc2UpOgotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVyb3B0aW9ucy5oOgotCSAgQWRkIEdzdE1peGVyT3B0aW9ucy4KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfY2xhc3NfcHJvYmVfZGV2aWNlcyk6Ci0JICBSZW5hbWUgQXVkaW8gTWl4ZXIgdG8gT1NTIE1peGVyIChzaW1pbGFyIHRvIEFsc2EgTWl4ZXIpLiBGaXgKLQkgIGJyb2tlbiBkZXZpY2UgZGV0ZWN0aW9uIG9uIGNvbXB1dGVycyB3aXRoIG11bHRpcGxlIE9TUyBzb3VuZAotCSAgY2FyZHMuCi0KLTIwMDQtMDUtMjYgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2ZpeGF0ZSk6Ci0JICBmaXhhdGUgbmljZWx5IGV2ZW4gd2hlbiB0aGUgcGVlciBpcyBub3QgbmVnb3RpYXRpbmcKLQotMjAwNC0wNS0yNSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOgotCShnc3RfYXVkaW9fY29udmVydF9wYXJzZV9jYXBzKToKLQkgIG1ha2Ugc3VyZSB3ZSBkb24ndCBhbGxvdyBkZXB0aCA+IHdpZHRoCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfZml4YXRlKToKLQkgIGZpeGF0ZSBlbmRpYW5uZXNzIHRvIEdfQllURV9PUkRFUiBhcyBkZWZhdWx0Ci0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmM6Ci0JICB3ZSBkb24ndCBoYW5kbGUgYW5vdGhlciBlbmRpYW5uZXNzIGFzIGhvc3QtZW5kaWFubmVzcwotCi0yMDA0LTA1LTI1ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL21lbS5jOiAgbWFsbG9jKCkgaXMgaW4gc3RkbGliLmgsIG5vdCBtYWxsb2MuaAotCi0yMDA0LTA1LTI0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC92b3JiaXMvb2dndm9yYmlzZW5jLmM6IChnc3Rfb2dndm9yYmlzZW5jX3Npbmtjb25uZWN0KSwKLQkoZ3N0X29nZ3ZvcmJpc2VuY19zZXR1cCk6Ci0JICBwcm9wZXJseSBmYWlsIHdoZW4gd2UgY2FuJ3Qgc2V0dXAgdGhlIHZvcmJpcyBlbmNvZGVyIGR1ZSB0bwotCSAgdW5zdXBwb3J0ZWQgc2V0dGluZ3MKLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzZW5jX3Npbmtjb25uZWN0KSwKLQkoZ3N0X3ZvcmJpc2VuY19zZXR1cCk6Ci0JICBzYW1lCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfbGluayk6Ci0JICBmaXggY2FzZSB3aGVyZSB3YXJuaW5ncyBvY2N1cmVkIHdoZW4gb25lIHBhZCB3YXMgdW5saW5rZWQgd2hpbGUgdGhlCi0JICBvdGhlcidzIGxpbmsgZnVuY3Rpb24gd2FzIGNhbGxlZAotCi0yMDA0LTA1LTI0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdGNwL01ha2VmaWxlLmFtOgotICAgICAgICAgIHVzZSBHU1RfRU5BQkxFX05FVwotCi0yMDA0LTA1LTI0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9wcml2YXRlLmg6Ci0JICBkb24ndCB1c2Ugb3B0aW1pemF0aW9ucyB0aGF0IGFyZSAjaWYgMCdlZAotCi0yMDA0LTA1LTI0ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KToKLQlGaXggcG90ZW50aWFsIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3IgYW5kIGhvcGVmdWxseSBnZXQKLQl0aGUgcG9zaXRpb24gcXVlcnkgcmlnaHQgdG8gZ2V0IGNvcnJlY3QgdGltZXN0YW1wcyBvbiBhdmkKLQlhdWRpby4KLQotMjAwNC0wNS0yNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC92aWRlb3NjYWxlL3ZpZGVvc2NhbGUuYzogKGdzdF92aWRlb3NjYWxlX3NjYWxlX25lYXJlc3QpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjIpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjQpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0XzMyYml0KSwKLQkoZ3N0X3ZpZGVvc2NhbGVfc2NhbGVfbmVhcmVzdF8yNGJpdCksCi0JKGdzdF92aWRlb3NjYWxlX3NjYWxlX25lYXJlc3RfMTZiaXQpOgotCUZpeCB0aGUgc2NhbGluZyBhbGdvcml0aG0gYW5kIGF2b2lkIGEgYnVmZmVyIG92ZXJmbG93LgotICAgICAgICByZW1vdmVkIHRoZSB3aGlsZSBsb29wIGluIHRoZSBzY2FsaW5nIGZ1bmN0aW9uIGFzIGl0Ci0Jd2FzIHVzZWQgZm9yIHBvaW50IHNhbXBsaW5nIG9ubHkuCi0KLTIwMDQtMDUtMjQgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2dldF90eXBlKSwKLQkoZ3N0X2lkM190YWdfY2xhc3NfaW5pdCksIChnc3RfaWQzX3RhZ19pbml0KSwKLQkoZ3N0X2lkM190YWdfc2V0X3Byb3BlcnR5KSwgKGdzdF9pZDNfdGFnX2dldF90YWdfdG9fcmVuZGVyKSwKLQkoZ3N0X2lkM190YWdfaGFuZGxlX2V2ZW50KSwgKGdzdF9pZDNfdGFnX2RvX2NhcHNfbmVnbyksCi0JKGdzdF9pZDNfdGFnX3NlbmRfdGFnX2V2ZW50KToKLQkgIGxvdHMgb2YgZml4ZXMgdG8gbWFrZSBpZDNtdXggd29yayBhbmQgaWQzZGVtdXggd29yayBjb3JyZWN0bHkKLQotMjAwNC0wNS0yNCAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L01ha2VmaWxlLmFtOgotCSAgYWRkIHJ1bGVzIHRvIGJ1aWxkIHNob3V0MnNlbmQgKHdhcyByZW1vdmVkIGJ5IGFjY2lkZW50Ci0JICB3aGVuIHRoaXMgbW9kdWxlIHdhcyBubyBtb3JlIG1hcmtlZCBleHBlcmltZW50YWwvYnJva2VuKQotCi0yMDA0LTA1LTI0ICBaYWhlZXIgQWJiYXMgTWVyYWxpICA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0KLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6Ci0JKiBleHQvc2hvdXQyL2dzdHNob3V0Mi5oOgotCSAgYWRkaW5nIGEgImNvbm5lY3Rpb24gcHJvYmxlbSIgc2lnbmFsIHRvIHNob3V0MnNlbmQKLQkgIChmaXhlcyAjMTQyOTU0KQotCi0yMDA0LTA1LTIxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQva2lvL2tpb3JlY2VpdmVyLmNwcDoKLQkqIGV4dC9raW8va2lvcmVjZWl2ZXIuaDoKLSAgICAgICAgICBmaXggc2lnbiBjb21wYXJpc29uIGlzc3VlcwotCi0yMDA0LTA1LTIxICBTdGVwaGFuZSBMb2V1aWxsZXQgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFwYXJzZS5jOgotCSogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuaDoKLQkgIHNvbWUgcmVuYW1pbmcKLQkgIGFkZCBzb21lIGNoZWNrcy9zYW5pdHkKLQkgIHByZXBhcmUgZm9yIHNlZWsgYWRkaXRpb24KLQotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvLmM6Ci0JICByZW1vdmUgZXhwb3J0ZWQgZHVwZSBpbml0IGZ1bmN0aW9uCi0KLTIwMDQtMDUtMjEgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfaW5pdCksIChnc3RfZHZkZWNfZ2V0X2Zvcm1hdHMpLAotCShnc3RfZHZkZWNfc3JjX2NvbnZlcnQpLCAoZ3N0X2R2ZGVjX3NpbmtfY29udmVydCk6Ci0JICBGaXggZm9ybWF0IGNvbnZlcnNpb24gYW5kIHBvc2l0aW9uIHF1ZXJ5aW5nLgotCSogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6IChnc3RfcHJvZ3Jlc3NyZXBvcnRfcmVwb3J0KToKLQkgIERvbid0IG91dHB1dCBhIGJvZ3VzIHRvdGFsIHZhbHVlIHRoYXQgd2UgZGlkbid0IHF1ZXJ5LgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19nZXRfeHZfc3VwcG9ydCk6Ci0JICBBbHdheXMgc2V0IFhWX0FVVE9QQUlOVF9DT0xPUktFWSB0byB0cnVlLiBGaXhlcyB4dmltYWdlc2luayBzaG93aW5nCi0JICBvbmx5IGEgYmxhbmsgd2luZG93IGFmdGVyIHhpbmUgaGFzIGJlZW4gdXNlZC4KLQotMjAwNC0wNS0yMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyAoYXQpIGFwZXN0YWFydCAoZG90KSBvcmc+Ci0KLQkqIG00L2FzLWFydHMubTQ6Ci0JICBzeW5jIHdpdGggdXBzdHJlYW0gdmVyc2lvbiB0byBmaXggdGVzdCBvbiBGQzIKLQkgIHJlYWRkIHdpdGggLWtvIHRvIHByZXNlcnZlIElkIGhlYWRlcgotCi0yMDA0LTA1LTIwICBTdGVwaGFuZSBMb2V1aWxsZXQgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICB0ZXN0IGZvciBGSU9OUkVBRCBpb2N0bCBpbiBzeXMvZmlsaW8uaCBmb3IgU29sYXJpcyBjb21wYXQuCi0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOiBpZGVtCi0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzogaWRlbQotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzcmMuYzogaWRlbQotCSogbTQvZ3N0LWZpb25yZWFkLm00OiBpZGVtCi0KLQkqIHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jOiBjaGFuZ2UgY2F0ZWdvcnkgdG8gU2luay9BdWRpbwotCi0JKiBjb25maWd1cmUuYWM6IGVuYWJsZSBzcGVleCBwbHVnaW4gZm9yIHNwZWV4IDEuMS41KwotCSogZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmM6IGZpeCBjYXN0IHdhcm5pbmcKLQotCSogZXh0L2VzZC9SRUFETUU6IGZpeCB0eXBvCi0KLTIwMDQtMDUtMjAgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOiBNaW5vciBjb3NtZXRpYyBjaGFuZ2UgdG8gY29udmluY2UgdGhlIGJ1aWxkYm90IHRvCi0JcmVhdXRvZ2VuLgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvLmM6IChnc3Rfc3VuYXVkaW9zaW5rX2NsYXNzX2luaXQpLAotCShnc3Rfc3VuYXVkaW9zaW5rX2luaXQpLCAoZ3N0X3N1bmF1ZGlvc2lua19nZXRjYXBzKSwKLQkoZ3N0X3N1bmF1ZGlvc2lua19wYWRfbGluayksIChnc3Rfc3VuYXVkaW9zaW5rX2NoYWluKSwKLQkoZ3N0X3N1bmF1ZGlvc2lua19zZXRwYXJhbXMpLCAoZ3N0X3N1bmF1ZGlvc2lua19vcGVuKSwKLQkoZ3N0X3N1bmF1ZGlvc2lua19jbG9zZSksIChnc3Rfc3VuYXVkaW9zaW5rX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9zdW5hdWRpb3Npbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF9zdW5hdWRpb3NpbmtfZ2V0X3Byb3BlcnR5KToKLQlNb3JlIGhhY2tpbmcuICBQbGF5cyBhdWRpbyBub3cuCi0KLTIwMDQtMDUtMjAgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL01ha2VmaWxlLmFtOgotCi0yMDA0LTA1LTIwICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHN5cy9vc3hhdWRpby9NYWtlZmlsZS5hbTogIE5ldyBPUyBYIGF1ZGlvIHBsdWdpbiBieSBaYWhlZXIgQWJiYXMgTWVyYWxpCi0JKiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW8uYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYzoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaDoKLQkqIHN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jOgotCSogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmg6Ci0KLTIwMDQtMDUtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzZW5jX3NldF9oZWFkZXJfb25fY2FwcyksCi0JKGdzdF92b3JiaXNlbmNfY2hhaW4pOgotICAgICAgICAgIHB1dCB0aGUgY29kZWMgaGVhZGVycyBvbiB0aGUgY2FwcyBhcyBzdHJlYW1oZWFkZXIgYXMgd2VsbCBhcwotICAgICAgICAgIHB1c2hpbmcgdGhlbSBvdXQKLQotMjAwNC0wNS0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKHZvcmJpc19ncmFudWxlX3RpbWVfY29weSksCi0JKGdzdF92b3JiaXNlbmNfYnVmZmVyX2Zyb21fcGFja2V0KSwgKGdzdF92b3JiaXNlbmNfcHVzaF9idWZmZXIpLAotCShnc3Rfdm9yYmlzZW5jX3B1c2hfcGFja2V0KSwgKGdzdF92b3JiaXNlbmNfY2hhaW4pOgotICAgICAgICBzcGxpdCB1cCBwdXNoX3BhY2tldCBpbnRvIHR3byBmdW5jdGlvbnMKLQotMjAwNC0wNS0yMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3RjcC8uY3ZzaWdub3JlOgotCSAgaWdub3JlIGVudW1zCi0JKiBnc3QvdGNwL01ha2VmaWxlLmFtOgotCSogZ3N0L3RjcC9SRUFETUU6Ci0JKiBnc3QvdGNwL2dzdHRjcC5jOgotCSogZ3N0L3RjcC9nc3R0Y3AuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwY2xpZW50c2luay5jOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzaW5rLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcGNsaWVudHNyYy5jOgotCSogZ3N0L3RjcC9nc3R0Y3BjbGllbnRzcmMuaDoKLQkqIGdzdC90Y3AvZ3N0dGNwcGx1Z2luLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcHNlcnZlcnNpbmsuYzoKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc2luay5oOgotCSogZ3N0L3RjcC9nc3R0Y3BzZXJ2ZXJzcmMuYzoKLQkqIGdzdC90Y3AvZ3N0dGNwc2VydmVyc3JjLmg6Ci0gICAgICAgICAgYWRkIG5ldyB0Y3AgZWxlbWVudHMKLQotMjAwNC0wNS0xOSAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGdzdC9sYXcvbXVsYXctY29udmVyc2lvbi5jOiAobXVsYXdfZW5jb2RlKToKLQlGaXggb3ZlcmZsb3cgYnVnIGluIHVsYXcgZW5jb2RpbmcuCi0KLTIwMDQtMDUtMTkgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaGFuZGxlX2V2ZW50KToKLQkgIGRvbid0IHVucmVmIHRoZSBldmVudCB0d2ljZQotCi0yMDA0LTA1LTE5ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbW92ZSAtV25vLXNpZ24tY29tcGFyZQotCi0yMDA0LTA1LTE5ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHJlbW92ZSAtREdfRElTQUJMRV9ERVBSRUNBVEVELiBJdCdzIG5vdCB1c2FibGUgd2l0aG91dCB3b3JrYXJvdW5kcwotCSAgaWYgeW91IHdhbnQgdG8gd29yayBhZ2FpbnN0IGdsaWIgMi4yIGFuZCAyLjQKLQotMjAwNC0wNS0xOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3RjcC9NYWtlZmlsZS5hbToKLQkqIGdzdC90Y3AvZ3N0dGNwLmM6Ci0JKiBnc3QvdGNwL2dzdHRjcC5oOgotCSogZ3N0L3RjcC9nc3R0Y3BzaW5rLmg6Ci0JKiBnc3QvdGNwL2dzdHRjcHNyYy5oOgotICAgICAgICAgIGdzdHRjcCAtPiBnc3R0Y3BwbHVnaW4gKyBDVlMgc3VyZ2VyeSBpbiBwcmVwYXJhdGlvbiBmb3IgdGNwIG1lcmdlCi0KLTIwMDQtMDUtMTkgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L2RlYnVnL3Rlc3RzLmM6IChtZDVfZ2V0X3ZhbHVlKToKLQkgIGZpeCBzZWdmYXVsdCBvbiBnc3QtaW5zcGVjdAotCi0yMDA0LTA1LTE5ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC9kZWJ1Zy90ZXN0cGx1Z2luLmM6Ci0JKiBnc3QvZGVidWcvdGVzdHMuYzoKLQkqIGdzdC9kZWJ1Zy90ZXN0cy5oOgotCSAgYWRkIG5ldyBleHRlbnNpYmxlIGFuZCBjb25maWd1cmFibGUgdGVzdGluZyBlbGVtZW50LiBDdXJyZW50IHRlc3RzCi0JICBpbmNsdWRlIGJ1ZmZlciBjb3VudCwgc3RyZWFtIGxlbmd0aCwgdGltZXN0YW1wL2R1cmF0aW9uIG1hdGNoaW5nIGFuZAotCSAgbWQ1LgotCSogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlYnVnL2dzdGRlYnVnLmM6IChwbHVnaW5faW5pdCk6Ci0JICBhZGQgaW5mcmFzdHJ1Y3R1cmUgZm9yIG5ldyBlbGVtZW50Ci0KLTIwMDQtMDUtMTkgIEpvaGFuIERhaGxpbiAgPGpvaGFuQGdub21lLm9yZz4KLQotCSogZXh0L2R2L2dzdGR2ZGVjLmMgKGdzdF9kdmRlY19xdWFsaXR5X2dldF90eXBlKTogQWRkIHByb3BlcgotCWVuZGluZyBvZiB0aGUgYXJyYXkuIEZpeGVzIGdzdC1pbnNwZWN0IHNlZ2ZhdWx0IG9uIHBwYy4KLQotMjAwNC0wNS0xOSAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L2RpcmFjL2dzdGRpcmFjZGVjLmNjIDogY2hhbmdlIGNhdGVnb3J5IHRvIENvZGVjL0RlY29kZXIvVmlkZW8KLQotCSogbTQvYTUyLm00IDogZG9uJ3QgZml4IGEgdGVzdCB0aGF0IHNob3VsZCBmYWlsIHdpdGggY3VycmVudCBhNTJkZWMgbGliCi0KLTIwMDQtMDUtMTggIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvaW1nY29udmVydC5jOiAoaW1nX2NvbnZlcnQpOiBGaXhlcyBmb3IKLQl3YXJuaW5ncyAoYnVncywgYWN0dWFsbHkpIG5vdGljZWQgYnkgZ2NjIGJ1dCBub3QgZm9ydGUuCi0KLTIwMDQtMDUtMTggIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogc3lzL3N1bmF1ZGlvL01ha2VmaWxlLmFtOgotCSogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvLmM6IE5ldyBzdW5hdWRpb3NpbmsKLQotMjAwNC0wNS0xOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9jaGFuZ2Vfc3RhdGUpLAotCShnc3RfcXRkZW11eF9sb29wX2hlYWRlcik6ICBQYXRjaCBmcm9tIGRjbUBhY20ub3JnIChEYXZpZCBNb29yZSkKLQl0byBhbGxvdyBxdGRlbXV4IHRvIHVzZSBub24tc2Vla2FibGUgc3RyZWFtcy4gKGJ1ZyAjMTQyMjcyKQotCi0yMDA0LTA1LTE4ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9yZXNhbXBsZS5jOiAoZ3N0X3Jlc2FtcGxlX3NpbmNfZnRfczE2KSwKLQkoZ3N0X3Jlc2FtcGxlX3NpbmNfZnRfZmxvYXQpOiBSZW1vdmUgdXNlIG9mIHN0YXRpYyB0ZW1wb3JhcnkKLQlidWZmZXIuICBUaGlzIGNvZGUgd2FzIG9idmlvdXNseSBub3Qgc3VwcG9zZWQgdG8gbGFzdCBsb25nLCBidXQKLQlpdCdzIHN0dWNrIGluIG91ciBBQkksIHNvIGl0IHJlcXVpcmVkIGEgbGl0dGxlIGhhY2sgdG8gbWFrZSBpdAotCUFCSS1jb21wYXRpYmxlLiAgRml4ZXMgIzE0MjU4NS4KLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9yZXNhbXBsZS5oOiBzYW1lLgotCi0yMDA0LTA1LTE4ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogQWRkIHN1bmF1ZGlvCi0JKiBleGFtcGxlcy9NYWtlZmlsZS5hbTogbWFrZSBnc3RwbGF5IGRlcGVuZCBvbiBnY29uZgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29kZWNtYXAuYzogUmVtb3ZlIGM5OS1pc21zCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0LmM6IChidWlsZF9yZ2JfcGFsZXR0ZSksCi0JKGNvbnZlcnRfdGFibGVfbG9va3VwKSwgKGltZ19jb252ZXJ0KTogcmVtb3ZlIGM5OS1pc21zCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0X3RlbXBsYXRlLmg6IG1ha2UgYSBjb25zdGFudAotICAgICAgICAgIHVuc2lnbmVkLCB0byBmaXggYSB3YXJuaW5nIG9uIFNvbGFyaXMKLQkqIGdzdC9tcGVnMXN5cy9zeXN0ZW1zLmM6IGJjb3B5LT5tZW1jcHkKLQkqIGdzdC9ydGpwZWcvUlRqcGVnLmM6IChSVGpwZWdfeXV2cmdiOCk6IGJjb3B5LT5tZW1jcHkKLQkqIHN5cy9NYWtlZmlsZS5hbTogQWRkIHN1bmF1ZGlvCi0KLTIwMDQtMDUtMTggIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfZ2V0X3R5cGUpLCAoZ3N0X29nZ19tdXhfaW5pdCksCi0JKGdzdF9vZ2dfbXV4X3Npbmtjb25uZWN0KSwgKGdzdF9vZ2dfbXV4X3JlcXVlc3RfbmV3X3BhZCksCi0JKGdzdF9vZ2dfbXV4X25leHRfYnVmZmVyKSwgKGdzdF9vZ2dfbXV4X3B1c2hfcGFnZSksCi0JKGdzdF9vZ2dfbXV4X2NvbXBhcmVfcGFkcyksIChnc3Rfb2dnX211eF9xdWV1ZV9wYWRzKSwKLQkoZ3N0X29nZ19tdXhfbG9vcCk6Ci0JRml4IGFuIHVnbHkgbWVtbGVhayB3aGVyZSB0aGUgbXV4ZXIgZGlkbid0IGZsdXNoIGVub3VnaCBvZ2cKLQlwYWdlcy4gVGhpcyBhbHNvIHJlc3VsdGVkIGluIGJhZGx5IG11eGVkIG9nZyBmaWxlcy4KLQotMjAwNC0wNS0xOCAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L2FzZmRlbXV4L2FzZmhlYWRlcnMuYyA6Ci0JKiBnc3QvYXNmZGVtdXgvYXNmaGVhZGVycy5oIDoKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jIDoKLQkgIC0gZml4IEFTRl9PQkpfUEFERElORyBndWlkCi0JICAtIGFkZCAzIG5ldyBvYmplY3QgZ3VpZHMgKGxhbmd1YWdlIGxpc3QsIG1ldGFkYXRhLAotICAgICAgICAgICAgZXh0ZW5kZWQgc3RyZWFtIHByb3BlcnRpZXMpCi0gICAgICAgICAgLSBhZGQgYSBmdW5jdGlvbiB0byBwYXJzZSBleHRlbmRlZCBoZWFkZXIgb2JqZWN0cwotCi0yMDA0LTA1LTE4ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfc3luY19wYXJtcyk6Ci0JICByZW1vdmUgbGVmdG92ZXIgZGVidWdnaW5nIGdfcHJpbnQKLQotMjAwNC0wNS0xNyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaGFuZGxlX2V2ZW50KToKLQkgIEZpeCBmb3Igd2hlbiB0aGUgZmlyc3QgZm9ybWF0IGluIGEgZGlzY29udCBldmVudCBpcyBub3QgYQotCSAgYnl0ZS1iYXNlZCBvbmUuIFNob3VsZCBmaXggIzEzNzcxMC4KLQotMjAwNC0wNS0xOCAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogbTQvYTUyLm00IDogZml4IGNvbXBpbGF0aW9uIHdpdGggLVdhbGwgLVdlcnJvcgotCSogbTQvbGliZmFtZS5tNCA6IGlkZW0KLQkqIG00L2xpYm1pa21vZC5tNCA6IGlkZW0KLQotMjAwNC0wNS0xNyAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19jb21tZW50KToKLQkgIHNpZ25hbCB0aGUgbmV3IHRhZ3MgYmVmb3JlIGdpdmluZyB1cCB0aGUgcmVmZXJlbmNlCi0KLTIwMDQtMDUtMTcgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuYzoKLQkgIHVzZSBhcHBsaWNhdGlvbi9vZ2cgaW5zdGVhZCBvZiBhcHBsaWNhdGlvbi94LW9nZyAocGF0Y2ggYnkgUGF0cmljawotCSAgR3VpbW9uZCwgZml4ZXMgIzE0MjQzMikKLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfcmVzZXQpLAotCShnc3Rfb3NzZWxlbWVudF9zeW5jX3Bhcm1zKToKLQkgIGRvbid0IHNldCBmcmFnbWVudCBzaXplIHVubGVzcyBzcGVjaWZpZWQgKGZpeGVzICMxNDI0OTMpCi0KLTIwMDQtMDUtMTcgIFN0ZXBoYW5lIExvZXVpbGxldCA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGNvbmZpZ3VyZS5hYyA6IGZpeCBjb21waWxhdGlvbiBvZiB2NGwyc3JjIHdpdGggIi1XYWxsIC1XZXJyb3IiCi0JICBmaXhlcyAjMTQyNjY0Ci0KLTIwMDQtMDUtMTcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2NoYWluKToKLQkgIGNvbXB1dGUgb2Zmc2V0cyBjb3JyZWN0bHkgZm9yIGludGVybmFsIGJ1ZmZlcnMgc28gdGltZXN0YW1wcyBhcmUgc2V0Ci0JICBjb3JyZWN0bHkgd2hlbiB3ZSBjYW4ndCBzZWVrLiBBbHNvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8KLQkgIG9mZnNldHMuIChiYXNlZCBvbiBhIHBhdGNoIGJ5IERhdmlkIE1vb3JlLCBmaXhlcyAjMTQyNTA3KQotCi0yMDA0LTA1LTE3ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2xvb3ApOgotCSAgdXNlIGNvcnJlY3QgdmFyaWFibGUgd2hlbiBkZXRlcm1pbmluZyBhbW91bnQgb2YgZGF0YSB0byBza2lwIHNvIHdlCi0JICBkb24ndCBza2lwIGludG8gdGhlIHZvaWQgYW5kIHNlZ2ZhdWx0Ci0KLTIwMDQtMDUtMTYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X2F1ZGlvX2NhcHMpOgotCSAgSGksIEknbSBhIG1lbWxlYWsKLQotMjAwNC0wNS0xNiAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6Ci0JICAtIGZpeCBhIG1lbSBsZWFrIGFuZCBhbHdheXMgcHJvcGFnYXRlIHRhZ3MKLQkgIC0gYWRkIFdNVjMgdG8ga25vd24gdmlkZW8gY29kZWNzIChidXQgbm8gZGVjb2RlciB5ZXQpCi0JICAtIHJlcGxhY2UgInN1cnBsdXMgZGF0YSIgYXQgZW5kIG9mIGF1ZGlvIGhlYWRlciBmb3Igd2hhdAotCSAgICBpdCBpcyA6IGNvZGVjIHNwZWNpZmljIGRhdGEKLQkgIC0gZml4IGEgdHlwbwotCi0yMDA0LTA1LTE2ICBBcndlZCB2LiBNZXJrYXR6ICA8di5tZXJrYXR6QGdteC5uZXQ+Ci0KLQlyZXZpZXdlZCBieTogUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvY2xvY2suYzoKLQkgIEZpeCB3cm9uZyByZXR1cm4gdHlwZSAoIzE0MjIwNSkuCi0KLTIwMDQtMDUtMTYgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NsYXNzX2luaXQpLCAoZ3N0X21hZF9pbml0KToKLQkgIElnbm9yZSBDUkNzIGJ5IGRlZmF1bHQgKGZpeGVzICMxNDI1NjYpLgotCi0yMDA0LTA1LTE2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzogKGdzdF9hbHNhX21peGVyX29wZW4pLAotCShnc3RfYWxzYV9taXhlcl9jbG9zZSksIChnc3RfYWxzYV9taXhlcl9zdXBwb3J0ZWQpLAotCShnc3RfYWxzYV9taXhlcl9idWlsZF9saXN0KSwgKGdzdF9hbHNhX21peGVyX2ZyZWVfbGlzdCksCi0JKGdzdF9hbHNhX21peGVyX2NoYW5nZV9zdGF0ZSksIChnc3RfYWxzYV9taXhlcl9saXN0X3RyYWNrcyksCi0JKGdzdF9hbHNhX21peGVyX2dldF92b2x1bWUpLCAoZ3N0X2Fsc2FfbWl4ZXJfc2V0X3ZvbHVtZSksCi0JKGdzdF9hbHNhX21peGVyX3NldF9tdXRlKSwgKGdzdF9hbHNhX21peGVyX3NldF9yZWNvcmQpOgotCSAgRml4IGZvciBjYXNlcyB3aGVyZSB3ZSBmYWlsIHRvIGF0dGFjaCB0byBhIG1peGVyLgotCi0yMDA0LTA1LTE2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3JlYWRfc2Vlayk6Ci0JICBEb24ndCB0b3VjaCBldmVudHMgYWZ0ZXIgbm90IG93bmluZyB0aGVtIGFueW1vcmUuCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9iYXNlX2luaXQpLAotCShnc3Rfd2F2cGFyc2VfZm10KSwgKGdzdF93YXZwYXJzZV9vdGhlciksCi0JKGdzdF93YXZwYXJzZV9oYW5kbGVfc2VlayksIChnc3Rfd2F2cGFyc2VfbG9vcCksCi0JKGdzdF93YXZwYXJzZV9wYWRfY29udmVydCksIChnc3Rfd2F2cGFyc2VfcGFkX3F1ZXJ5KSwKLQkoZ3N0X3dhdnBhcnNlX3NyY3BhZF9ldmVudCk6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIEFkZCBzZWVraW5nLCBmaXggcXVlcnlpbmcuCi0KLTIwMDQtMDUtMTYgIFN0ZXBoYW5lIExvZXVpbGxldCA8c3RlcGhhbmUubG9ldWlsbGV0QHRpc2NhbGkuZnI+Ci0KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX2NvbW1lbnQpOgotCSAgLSBwcm9jZXNzIGNvbW1lbnRzIGV2ZW4gaWYgdGhleSBkb24ndCBlbmQgd2l0aCBcMFwwCi0gICAgICAgICAgICBnX2NvbnZlcnQgd291bGQgaWdub3JlIHRoZW0gaWYgcHJlc2VudCBhbmQgd29ya3Mgd2VsbCB3aXRob3V0IHRoZW0KLQotMjAwNC0wNS0xNiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9jYXBzKSwgKGdzdF9hbHNhX2dldF9jYXBzKToKLQkgIHNpbXBsaWZ5IGNhcHMKLQotMjAwNC0wNS0xNiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19jb21tZW50KToKLQkgIGRvbid0IHdyaXRlIHRvIG1lbW9yeSB3ZSBtaWdodCBub3Qgd3JpdGUgdG8gLSBnX2NvbnZlcnQgZG9lcyB0aGF0Ci0JICBmb3IgdXMgYW55d2F5IChmaXhlcyAjMTQyNjEzKQotCShnc3RfYXNmX2RlbXV4X2F1ZGlvX2NhcHMpOgotCSAgY29tbWVudCBvdXQgZ3N0X3V0aWxfZHVtcF9tZW0KLQotMjAwNC0wNS0xNiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19sb29wKToKLQkgIGNvbXB1dGUgY29ycmVjdCBleHBlY3RlZCB0aW1lc3RhbXBzIGFmdGVyIHNlZWsgKGJyb2tlbiBzaW5jZQotCSAgbGFzdCBjb21taXQpCi0JKiBleHQvZ2RrX3BpeGJ1Zi9waXhidWZzY2FsZS5jOiAocGl4YnVmc2NhbGVfaW5pdCk6Ci0JICByZW5hbWUgZWxlbWVudCBhbmQgZGVidWdnaW5nIGNhdGVnb3J5IHRvIGdka3BpeGJ1ZnNjYWxlCi0KLTIwMDQtMDUtMTYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfbG9vcCk6Ci0JICBhZGQgZXJyb3IgY2hlY2tpbmcgdG8gc25kX3BjbV9kZWxheSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZSBjYWxsIHRvCi0JICBzbmRfcGNtX2RlbGF5IHRoYXQgY2F1c2VkIGlzc3VlcyAoc2VlIGlubGluZSBjb2RlIGNvbW1lbnRzKQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfZ2V0X3RpbWUpOgotCSAgbWFrZSBtb3JlIHJlYWRhYmxlIGFuZCBmaXggcmV0dXJuIHZhbHVlIHdoZW4gc25kX3BjbV9kZWxheSBmYWlscwotCShmaXhlcyAjMTQyNTg2KQotCi0yMDA0LTA1LTE1ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdGkuY29tPgotCSogZXh0L2dka19waXhidWYvcGl4YnVmc2NhbGUuYzogKGdzdF9waXhidWZzY2FsZV9tZXRob2RfZ2V0X3R5cGUpLAotCShnc3RfcGl4YnVmc2NhbGVfZ2V0X3R5cGUpLCAoZ3N0X3BpeGJ1ZnNjYWxlX2Jhc2VfaW5pdCksCi0JKGdzdF9waXhidWZzY2FsZV9jbGFzc19pbml0KSwgKGdzdF9waXhidWZzY2FsZV9nZXRjYXBzKSwKLQkoZ3N0X3BpeGJ1ZnNjYWxlX2xpbmspLCAoZ3N0X3BpeGJ1ZnNjYWxlX2luaXQpLAotCShnc3RfcGl4YnVmc2NhbGVfaGFuZGxlX3NyY19ldmVudCksIChwaXhidWZzY2FsZV9zY2FsZSksCi0JKGdzdF9waXhidWZzY2FsZV9jaGFpbiksIChnc3RfcGl4YnVmc2NhbGVfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3BpeGJ1ZnNjYWxlX2dldF9wcm9wZXJ0eSksIChwaXhidWZzY2FsZV9pbml0KToKLQkqIGV4dC9nZGtfcGl4YnVmL3BpeGJ1ZnNjYWxlLmg6Ci0JQWRkIHRoZXNlIGZpbGVzIEkgZm9yZ290IGVhcmxpZXIKLQotMjAwNC0wNS0xNSAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5oOgotCUFkZCBuZXcgcGl4YnVmc2NhbGUgZWxlbWVudCB0byBzY2FsZSBSR0IgdmlkZW8KLQl1c2luZyBnZGtfcGl4YnVmLCBiZWNhdXNlIGdka19waXhidWYgZG9lcyBCSUxJTkVBUgotCWFuZCBIWVBFUiBpbnRlcnBvbGF0aW9uIGNvcnJlY3RseS4KLQkqIGV4dC90aGVvcmEvdGhlb3JhZW5jLmM6ICh0aGVvcmFfZW5jX2NoYWluKSwKLQlEaXNjYXJkIGJ1ZmZlciBhbmQgcmV0dXJuIGlmIGV4cGxpY2l0IGNhcHMgY291bGQgbm90IGJlIHNldAotCSh0aGVvcmFfZW5jX2dldF9wcm9wZXJ0eSk6Ci0JTWFrZSBfZ2V0IHJldHVybiBrYnBzIGZvciB0aGUgYml0cmF0ZSBjb25zaXN0ZW50IHdpdGgKLQl0aGUgX3NldCBmdW5jdGlvbi4KLQotCi0yMDA0LTA1LTE0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9saWJ2aXN1YWwvdmlzdWFsLmM6IChnc3RfdmlzdWFsX2NoYWluKToKLQkgIGFkZCBtaXNzaW5nIHZpc3VhbF9hdWRpb19hbmFseXplCi0KLTIwMDQtMDUtMTQgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jaGFpbik6IEZpeCBjcmFzaCB3aGVuIEVTRAotCWlzIGtpbGxlZCB3aGlsZSB3ZSdyZSBwbGF5aW5nLgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZSk6IGNhbGwKLQlnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMoKS4KLQotMjAwNC0wNS0xNCAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmMgOgotCSAgLSBmaXggSU5GTyB0YWcgZXh0cmFjdGlvbiBpbiBSSUZGL0FWSSBmaWxlcwotICAgICAgICAgICAgYmVjYXVzZSBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KSBhbHNvIGZyZWVkIHRhZ2xpc3QKLSAgICAgICAgICAtIGF2b2lkIGEgbWVtIGxlYWsKLQotMjAwNC0wNS0xMyAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYyA6IG1vdmUgZnJvbSAiQ29kZWMvKERlbS9NKXV4ZXIiIHRvICJDb2RlYy8oRGVtL00pdXhlci9BdWRpbyIKLQkqIGdzdC93YXZlbmMvZ3N0d2F2ZW5jLmMgOiBtb3ZlIGZyb20gIkNvZGVjL0VuY29kZXIvQXVkaW8iIHRvICJDb2RlYy9NdXhlci9BdWRpbyIKLQotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jIDoKLQkgIC0gYWRkIGNvZGUgKGNvbW1lbnRlZCBmb3Igbm93KSB0byBzdXBwb3J0IGF1ZGlvL3gtYWRwY20gb24gc3JjIHBhZAotCSAgICAod2UgaGF2ZSBubyBkZWNvZGVyIGZvciB0aG9zZSBsYXlvdXQgeWV0KQotCi0JKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFwYXJzZS5jIDoKLQkqIGdzdC9jZHhhcGFyc2UvZ3N0Y2R4YXBhcnNlLmggOgotCSAgLSBwYXJ0aWFsIHJld3JpdGUgdXNpbmcgUmlmZlJlYWQgKHJpcHBlZCBpYWluJ3Mgd2F2cGFyc2UgY29kZSkKLQotCSogZ3N0L3J0cC9nc3RydHBMMTZlbmMuYyA6IHR5cG8KLQkqIGdzdC9ydHAvZ3N0cnRwZ3NtZW5jLmMgOiB0eXBvCi0KLTIwMDQtMDUtMTMgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY2hlY2sgZm9yIGV4YWN0IHZlcnNpb24gb2YgbGlidmlzdWFsLCBpdCdzIG5vdCBzdXBwb3NlZCB0byBiZQotCSAgQVBJL0FCSSBzdGFibGUgeWV0Ci0KLTIwMDQtMDUtMTMgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9wdXNoKToKLQkgIHNpZ25hbCBuby1tb3JlLXBhZHMKLQotMjAwNC0wNS0xMyAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19zcmNfY29udmVydCkKLQlSZXBvcnQgd2hpY2ggZm9ybWF0IHdhcyB1c2VkIGZvciBHU1RfRk9STUFUX0RFRkFVTFQKLQkqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Zy9nc3RkZWJ1Zy5jOiAocGx1Z2luX2luaXQpOgotCSogZ3N0L2RlYnVnL3Byb2dyZXNzcmVwb3J0LmM6IChnc3RfcHJvZ3Jlc3NyZXBvcnRfYmFzZV9pbml0KSwKLQkoZ3N0X3Byb2dyZXNzcmVwb3J0X2NsYXNzX2luaXQpLCAoZ3N0X3Byb2dyZXNzcmVwb3J0X2luaXQpLAotCShnc3RfcHJvZ3Jlc3NyZXBvcnRfcmVwb3J0KSwgKGdzdF9wcm9ncmVzc3JlcG9ydF9zZXRfcHJvcGVydHkpLAotCShnc3RfcHJvZ3Jlc3NyZXBvcnRfZ2V0X3Byb3BlcnR5KSwgKGdzdF9wcm9ncmVzc3JlcG9ydF9jaGFpbiksCi0JKGdzdF9wcm9ncmVzc3JlcG9ydF9wbHVnaW5faW5pdCk6Ci0JQWRkIHByb2dyZXNzcmVwb3J0IGVsZW1lbnQgZm9yIHRlc3RpbmcuCi0KLTIwMDQtMDUtMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2dldCksIChnc3RfdjRsc3JjX2NoYW5nZV9zdGF0ZSk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5oOgotCSogc3lzL3Y0bC92NGxtanBlZ3NpbmtfY2FsbHMuYzogKGdzdF92NGxtanBlZ3NpbmtfcGxheWJhY2tfaW5pdCk6Ci0JKiBzeXMvdjRsL3Y0bG1qcGVnc3JjX2NhbGxzLmM6IChnc3RfdjRsbWpwZWdzcmNfY2FwdHVyZV9pbml0KToKLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6IChnc3RfdjRsc3JjX2NhcHR1cmVfaW5pdCksCi0JKGdzdF92NGxzcmNfZ3JhYl9mcmFtZSk6Ci0gICAgICAgICAgYWRkIG1vcmUgZGVidWdnaW5nCi0gICAgICAgICAgc2VuZCBhIGRpc2NvbnQgYXQgc3RhcnQKLQotMjAwNC0wNS0xMiAgQ29saW4gV2FsdGVycyAgPHdhbHRlcnNAcmVkaGF0LmNvbT4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmMgKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19zZWdtZW50KTogQXZvaWQKLQlpbmZsb29waW5nIGlmIHdlIGNhbid0IGZpbmQgYSBjaHVuay4gIE9yIGluIG90aGVyIHdvcmRzLCBkb24ndCBibG93Ci0JY2h1bmtzIGlmIHdlIGRvbid0IGhhdmUgYSBjaHVuayB0byBibG93LgotCi0yMDA0LTA1LTEzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBleHQvYXVkaW9maWxlL2dzdGFmc3JjLmM6IChnc3RfYWZzcmNfZ2V0KToKLQlSZW1vdmUgb2xkIGRlYnVnIG91dHB1dAotCSogZXh0L2R2L2dzdGR2ZGVjLmM6IChnc3RfZHZkZWNfcXVhbGl0eV9nZXRfdHlwZSksCi0JKGdzdF9kdmRlY19jbGFzc19pbml0KSwgKGdzdF9kdmRlY19sb29wKSwgKGdzdF9kdmRlY19jaGFuZ2Vfc3RhdGUpLAotCShnc3RfZHZkZWNfc2V0X3Byb3BlcnR5KSwgKGdzdF9kdmRlY19nZXRfcHJvcGVydHkpOgotCUNoYW5nZSB0aGUgcXVhbGl0eSBzZXR0aW5nIHRvIGFuIGVudW0sIHNvIGl0IHdvcmtzIGZyb20gZ3N0LWxhdW5jaAotCURvbid0IHJlbmVnb3RpYXRlIGEgbm9uLWxpbmtlZCBwYWQuIEFsbG93cyBhdWRpbyBvbmx5IGRlY29kaW5nLgotCSogZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmM6IChnc3RfZGVpbnRlcmxhY2VfZ2V0Y2FwcyksCi0JKGdzdF9kZWludGVybGFjZV9saW5rKSwgKGdzdF9kZWludGVybGFjZV9pbml0KToKLQkqIGdzdC92aWRlb2Ryb3AvZ3N0dmlkZW9kcm9wLmM6IChnc3RfdmlkZW9kcm9wX2dldGNhcHMpLAotCShnc3RfdmlkZW9kcm9wX2xpbmspOgotCVNvbWUgY2FwcyBuZWdvdGlhdGlvbiBmaXhlcwotCi0yMDA0LTA1LTEyICBTdGVwaGFuZSBMb2V1aWxsZXQgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvdGFya2luL2dzdHRhcmtpbi5jIDoKLQkgIC0gQ2hhbmdlIFJBTksgZnJvbSBOT05FIHRvIFBSSU1BUlkKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jIDoKLQkgIC0gQ2hhbmdlIFJBTksgZnJvbSBOT05FIHRvIE1BUkdJTkFMCi0JKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmMgOgotCSAgLSBDaGFuZ2UgUkFOSyBmcm9tIFBSSU1BUlkgdG8gTk9ORSAoZW5jb2Rlci9zcGlkZXIgaXNzdWUpCi0KLTIwMDQtMDUtMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6ICh2b3JiaXNfZ3JhbnVsZV90aW1lX2NvcHkpLAotCShnc3Rfdm9yYmlzZW5jX3B1c2hfcGFja2V0KToKLSAgICAgICAgICBjb3B5IGEgZnVuY3Rpb24gdGhhdCB3YXMgYWRkZWQgYmV0d2VlbiAxLjAgYW5kIDEuMC4xIHVudGlsIHdlCi0gICAgICAgICAgZGVwZW5kIG9uIHdvcnRod2hpbGUgZmVhdHVyZXMgb2YgcG9zdC0xLjAKLQotMjAwNC0wNS0xMiAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBlbmFibGUgc2hvdXQyIGJ5IGRlZmF1bHQKLQkqIGV4dC9zaG91dDIvZ3N0c2hvdXQyLmM6IChnc3Rfc2hvdXQyc2VuZF9wcm90b2NvbF9nZXRfdHlwZSksCi0JKGdzdF9zaG91dDJzZW5kX2Jhc2VfaW5pdCksIChnc3Rfc2hvdXQyc2VuZF9pbml0KSwKLQkoZ3N0X3Nob3V0MnNlbmRfY29ubmVjdCksIChnc3Rfc2hvdXQyc2VuZF9jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3Nob3V0Mi9nc3RzaG91dDIuaDoKLQkgIG1ha2UgdGhpcyB3b3JrIGFnYWluLiBCYXNlZCBvbiBhIHBhdGNoIGJ5IFphaGVlciBBYmJhcyBNZXJhbGkgKGZpeGVzCi0JICAjMTQyMjYyKQotCSogZXh0L3RoZW9yYS90aGVvcmEuYzogKHBsdWdpbl9pbml0KToKLQkgIGRvbid0IHNldCByYW5rIG9uIGVuY29kZXJzCi0KLTIwMDQtMDUtMTEgIEplcmVteSBTaW1vbiAgPGplc2ltb25AbGliZXJ0eXN1cmYuZnI+Ci0KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9hdWRpb19jYXBzKToKLQkgIFVzZSBjb2RlY19kYXRhIHByb3BlcnR5IGluc3RlYWQgb2YgZmxhZzEgYW5kIGZsYWcyIGZvciB3bWEKLQotMjAwNC0wNS0xMSAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L2NkeGFwYXJzZS9nc3RjZHhhcGFyc2UuYyA6Ci0JICAtIEFkZCBtcGVndmVyc2lvbiB0byBDQVBTIHRvIG1ha2UgaXQgbGluawotCSAgLSBSYW5rIGlzIGFzIEdTVF9SQU5LX1NFQ09OREFSWSBpbnN0ZWFkIG9mIE5PTkUKLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYyA6Ci0JICAtIERvY3VtZW50IGFsbCBhdWRpbyBlbmNvZGluZyB3ZSBjYW4gZW5jb3VudGVyIGZyb20gU29sYXJpcyA5Ci0JICAgIGhlYWRlcnMgYW5kIGxpYnNuZGZpbGUgaW5mb3JtYXRpb24uCi0JICAtIEluY3JlYXNlIG1heC4gcmF0ZSBmcm9tIDQ4MDAwIHRvIDE5MjAwMCAodG8gbWF0Y2ggb3RoZXIgZWxlbWVudHMpCi0JICAtIERvbid0IHRyeSB0byBwbGF5IGp1bmsgZGF0YSBiZXR3ZWVuIGhlYWRlciBhbmQgc2FtcGxlcwotCi0yMDA0LTA1LTExICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9saWJ2aXN1YWwvdmlzdWFsLmM6IChnc3RfdmlzdWFsX2dldGNhcHMpOgotCSAgdXNlIHRoZSByaWdodCBjYXBzIGRlcGVuZGluZyBvbiBlbmRpYW5uZXNzIChJIGhvcGUpCi0JKiBleHQvb2dnL2dzdG9nZ211eC5jOiAoZ3N0X29nZ19tdXhfcGx1Z2luX2luaXQpOgotCSAgdXNlIEdTVF9SQU5LX05PTkUgZm9yIGFsbCBub24tZGVjb2RpbmcgZWxlbWVudHMgb3Igc3BpZGVyIGdldHMKLQkgIG1pZ2h0eSBjb25mdXNlZAotCi0yMDA0LTA1LTExICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19jb21tZW50KToKLQkgIEZpeCBzb21lIG9kZCBjYXNlcyBhbmQgZml4IEJFIG1ldGFkYXRhIHBhcnNpbmcgb2YgdW5pY29kZTE2IHRleHQuCi0KLTIwMDQtMDUtMTEgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfcmVsZWFzZV9wYWQpLAotCShnc3Rfc3dpdGNoX3JlcXVlc3RfbmV3X3BhZCksIChnc3Rfc3dpdGNoX3BvbGxfc2lua3BhZHMpLAotCShnc3Rfc3dpdGNoX2xvb3ApLCAoZ3N0X3N3aXRjaF9nZXRfdHlwZSk6Ci0JICB3aG9ldmVyIHRoYXQgd2FzOiBETyBOT1QgSU1QT1JUIFBSSVZBVEUgU1lNQk9MUyBUSEFUIEFSRSBOT1QgSU4KLQkgIEhFQURFUlMuIEhhZCB0byBiZSBzYWlkLgotCi0yMDA0LTA1LTEwICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogQWRkIHByb3RvdHlwZSBEaXJhYyBzdXBwb3J0LgotCSogZXh0L01ha2VmaWxlLmFtOgotCSogZXh0L2RpcmFjL01ha2VmaWxlLmFtOgotCSogZXh0L2RpcmFjL2dzdGRpcmFjLmNjOgotCSogZXh0L2RpcmFjL2dzdGRpcmFjZGVjLmNjOgotCi0yMDA0LTA1LTEwICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVwYXJzZV9jbGFzc19pbml0KSwKLQkoZ3N0X2F1cGFyc2VfaW5pdCksIChnc3RfYXVwYXJzZV9jaGFpbiksCi0JKGdzdF9hdXBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JICBIYWNrIGFyb3VuZCBzcGlkZXIuIFJlbW92ZSBtZSBzb21lIGRheSBwbGVhc2UuCi0KLTIwMDQtMDUtMTAgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYzogKGdzdF9hdXBhcnNlX2NoYWluKToKLQkgIEZpeCBmb3Igc29tZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBwcmV2aW91cyBwYXRjaCwgYWxzbwotCSAgbWFrZXMgaXQgd29yay4gRml4ZXMgIzE0MjI4NiB3aGlsZSB3ZSdyZSBhdCBpdC4KLQotMjAwNC0wNS0xMSAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOgotCQlmaXhlcyBhLWxhdywgYWRkcyBtdS1sYXcsIGxpbmVhciBwY20gKDgsMTYsMjQsMzIpLCBpZWVlICgzMiwgNjQpCi0JCW9ubHkgdW5zdXBwb3J0ZWQgZm9ybWF0cyBhcmUgQURQQ00vQ0NJVFQgRy43MngKLQkJcmV2aWV3ZWQgYnkgUm9uYWxkCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW8uaDogYWRkcyAyNGJpdCBkZXB0aCB0byBQQ00gKHgtcmF3LWludCkKLQotMjAwNC0wNS0xMCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC92b3JiaXMvTWFrZWZpbGUuYW06Ci0JKiBleHQvdm9yYmlzL1JFQURNRToKLQkqIGV4dC92b3JiaXMvb2dndm9yYmlzZW5jLmM6IChnc3Rfb2dndm9yYmlzZW5jX2dldF9mb3JtYXRzKSwKLQkob2dndm9yYmlzZW5jX2dldF90eXBlKSwgKHZvcmJpc19jYXBzX2ZhY3RvcnkpLCAocmF3X2NhcHNfZmFjdG9yeSksCi0JKGdzdF9vZ2d2b3JiaXNlbmNfYmFzZV9pbml0KSwgKGdzdF9vZ2d2b3JiaXNlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF9vZ2d2b3JiaXNlbmNfc2lua2Nvbm5lY3QpLCAoZ3N0X29nZ3ZvcmJpc2VuY19jb252ZXJ0X3NyYyksCi0JKGdzdF9vZ2d2b3JiaXNlbmNfY29udmVydF9zaW5rKSwKLQkoZ3N0X29nZ3ZvcmJpc2VuY19nZXRfcXVlcnlfdHlwZXMpLCAoZ3N0X29nZ3ZvcmJpc2VuY19zcmNfcXVlcnkpLAotCShnc3Rfb2dndm9yYmlzZW5jX2luaXQpLCAoZ3N0X29nZ3ZvcmJpc2VuY19nZXRfdGFnX3ZhbHVlKSwKLQkoZ3N0X29nZ3ZvcmJpc2VuY19tZXRhZGF0YV9zZXQxKSwgKGdzdF9vZ2d2b3JiaXNlbmNfc2V0X21ldGFkYXRhKSwKLQkoZ2V0X2NvbnN0cmFpbnRzX3N0cmluZyksICh1cGRhdGVfc3RhcnRfbWVzc2FnZSksCi0JKGdzdF9vZ2d2b3JiaXNlbmNfc2V0dXApLCAoZ3N0X29nZ3ZvcmJpc2VuY193cml0ZV9wYWdlKSwKLQkoZ3N0X29nZ3ZvcmJpc2VuY19jaGFpbiksIChnc3Rfb2dndm9yYmlzZW5jX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9vZ2d2b3JiaXNlbmNfc2V0X3Byb3BlcnR5KSwgKGdzdF9vZ2d2b3JiaXNlbmNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC92b3JiaXMvb2dndm9yYmlzZW5jLmg6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpcy5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKHZvcmJpc19jYXBzX2ZhY3RvcnkpLAotCShyYXdfY2Fwc19mYWN0b3J5KSwgKGdzdF92b3JiaXNlbmNfY2xhc3NfaW5pdCksCi0JKGdzdF92b3JiaXNlbmNfaW5pdCksIChnc3Rfdm9yYmlzZW5jX3NldHVwKSwKLQkoZ3N0X3ZvcmJpc2VuY19wdXNoX3BhY2tldCksIChnc3Rfdm9yYmlzZW5jX2NoYWluKSwKLQkoZ3N0X3ZvcmJpc2VuY19nZXRfcHJvcGVydHkpLCAoZ3N0X3ZvcmJpc2VuY19zZXRfcHJvcGVydHkpOgotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuaDoKLQlBZGRlZCBhIHJhdyB2b3JiaXMgZW5jb2RlciB0byBiZSB1c2VkIHdpdGggdGhlIG9nZ211eGVyLgotCVdlIHN0aWxsIG5lZWQgdGhlIG9sZCBlbmNvZGVyIGZvciBzb21lIGdub21lIGFwcGxpY2F0aW9ucywKLQlyZWFkIHRoZSBSRUFETUUgdG8gZmluZCBvdXQgaG93IHRoYXQgd29ya3MuCi0JVGhlIHJhdyBlbmNvZGVyIGlzIGNhbGxlZCAicmF3dm9yYmlzZW5jIiB1bnRpbCAwLjkuCi0KLTIwMDQtMDUtMTAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvb2dnL2dzdG9nZy5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9wbHVnaW5faW5pdCksCi0JKGdzdF9vZ2dfcHJpbnQpOgotCSogZXh0L29nZy9nc3RvZ2dtdXguYzogKGdzdF9vZ2dfbXV4X2dldF90eXBlKSwKLQkoZ3N0X29nZ19tdXhfYmFzZV9pbml0KSwgKGdzdF9vZ2dfbXV4X2NsYXNzX2luaXQpLAotCShnc3Rfb2dnX211eF9nZXRfc2lua19ldmVudF9tYXNrcyksIChnc3Rfb2dnX211eF9pbml0KSwKLQkoZ3N0X29nZ19tdXhfc2lua2Nvbm5lY3QpLCAoZ3N0X29nZ19tdXhfcGFkX2xpbmspLAotCShnc3Rfb2dnX211eF9wYWRfdW5saW5rKSwgKGdzdF9vZ2dfbXV4X3JlcXVlc3RfbmV3X3BhZCksCi0JKGdzdF9vZ2dfbXV4X2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X29nZ19tdXhfbmV4dF9idWZmZXIpLAotCShnc3Rfb2dnX211eF9wdXNoX3BhZ2UpLCAoZ3N0X29nZ19tdXhfY29tcGFyZV9wYWRzKSwKLQkoZ3N0X29nZ19tdXhfcXVldWVfcGFkcyksIChnc3Rfb2dnX211eF9sb29wKSwKLQkoZ3N0X29nZ19tdXhfZ2V0X3Byb3BlcnR5KSwgKGdzdF9vZ2dfbXV4X3NldF9wcm9wZXJ0eSksCi0JKGdzdF9vZ2dfbXV4X2NoYW5nZV9zdGF0ZSksIChnc3Rfb2dnX211eF9wbHVnaW5faW5pdCk6Ci0JQWRkZWQgYW4gb2dnIG11eGVyLgotCVNtYWxsIHR5cG8gZml4ZXMgaW4gdGhlIGRlbXV4ZXIuCi0KLTIwMDQtMDUtMTAgIFdpbSBUYXltYW5zICA8d2ltQGZsdWVuZG8uY29tPgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWVuYy5jOiAoZ3N0X3RoZW9yYV9lbmNfY2xhc3NfaW5pdCksCi0JKHRoZW9yYV9lbmNfc2lua19saW5rKSwgKHRoZW9yYV9wdXNoX3BhY2tldCksICh0aGVvcmFfZW5jX2NoYWluKSwKLQkodGhlb3JhX2VuY19jaGFuZ2Vfc3RhdGUpLCAodGhlb3JhX2VuY19zZXRfcHJvcGVydHkpLAotCSh0aGVvcmFfZW5jX2dldF9wcm9wZXJ0eSk6Ci0JTWFyayB0aGUgbGFzdCBwYWNrZXQgd2l0aCBhbiBFT1MgZmxhZyB3aGljaCBpcyBub3QgcmVhbGx5IG5lZWRlZAotCWluIGdzdHJlYW1lci4KLQlEbyBzb21lIGJldHRlciB2aWRlbyBmcmFtZXJhdGUgaW5pdGlhbGlzYXRpb24uCi0JVXBkYXRlIHRoZSBidWZmZXIgdGltZXN0YW1wLgotCi0yMDA0LTA1LTEwICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIHBhcmVudCBzdGF0ZSBjaGFuZ2UgY2FsbAotCi0yMDA0LTA1LTEwICBTdGVwaGFuZSBMb2V1aWxsZXQgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBnc3QvbGF3L2FsYXcuYyA6IGFsYXdkZWMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCB0eXBlIEFMQVdERUMsIG5vdCBBTEFXRU5DCi0JKiBnc3QvbGF3L2FsYXctZGVjb2RlLmMgOiBwdXQgYXVkaW8veC1hbGF3IG9uIHBhZHMsIGluc3RlYWQgb2YgYXVkaW8veC1tdWxhdwotCSogZ3N0L2xhdy9hbGF3LWVuY29kZS5jIDogKGlkZW0pCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jIDogbWFyayBhdWRpby9hNTIsIGF1ZGlvL2FjMyBhcyBkZXByZWNhdGVkIGluIGEgY29tbWVudAotCSogZ3N0L2FjM3BhcnNlL2dzdGFjM3BhcnNlLmMgOiBhdWRpby9hYzMgPT4gYXVkaW8veC1hYzMKLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jIDogYXVkaW8vYTUyID0+IGF1ZGlvL3gtYWMzCi0KLTIwMDQtMDUtMDkgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2Ffc3JjX2xvb3ApOgotCSAgZG9uJ3QgdXNlIGEgZml4ZWQgYnVmZmVyIHNpemUgd2hlbiB3cml0aW5nIHZhcmlhYmxlIGxlbmd0aCBkYXRhIHRvCi0JICBpdC4gRml4ZXMgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIG1ha2VzIGFsc2FzcmMgd29yawotCi0yMDA0LTA1LTA5ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzaW5rLmM6Ci0JKF9nc3RfYm9vbGVhbl9hbGxvd19vdmVyd3JpdGVfYWNjdW11bGF0b3IpLAotCShnc3RfZ25vbWV2ZnNzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2dub21ldmZzc2lua19vcGVuX2ZpbGUpOgotCSAgUnVuIGdsaWIncyBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyICg/PykgaW4gUlVOX0NMRUFOVVAgcmF0aGVyIHRoYW4KLQkgIFJVTl9MQVNULCBhbmQgZG9uJ3QgdXNlIHRoYXQgdG8gc2V0IHRoZSBhY2N1bXVsYXRvciB2YWx1ZSBiZWNhdXNlCi0JICB0aGVuIGl0J3MgYWx3YXlzIEZBTFNFLgotCi0yMDA0LTA1LTA5ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzX3dpdGhfZGF0YSksCi0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX3RlbXBsYXRlX2NhcHMpOgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9wZWVrX2hlYWQpOgotCSAgRml4IGZvciB1bmFsaWduZWQgUklGRiBmaWxlcyAoaS5lLiB3aGVyZSBhbGwgdGhlIGNodW5rcyB0b2dldGhlcgotCSAgaW4gYSBMSVNUIGNodW5rIGFyZSBub3Qgb2YgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgc2l6ZSBnaXZlbiBpbgotCSAgdGhlIExJU1QgY2h1bmsgaGVhZGVyKS4gRml4ZXMgc2V2ZXJhbCBvZGQgV0FWRSBmaWxlcy4gQWxzbyBmaXgKLQkgIEFEUENNIChibG9ja19hbGlnbiBwcm9wZXJ0eSkgaW4gYXVkaW8sIHNvIHRoYXQgd2F2cGFyc2UgYmFzZWQKLQkgIG9uIHRoaXMgd29ya3Mgbm93IGFzIGl0IHVzZWQgdG8gc3RhbmQtYWxvbmUuCi0KLTIwMDQtMDUtMDkgIEVkd2FyZCBIZXJ2ZXkgIDxiaWxib2VkQGJpbGJvZWQuY29tPgotCi0JcmV2aWV3ZWQgYnkgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOgotCSogZXh0L2RpdngvZ3N0ZGl2eGRlYy5jOgotCSogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOgotCSogZXh0L2R0cy9nc3RkdHNkZWMuYzogKGdzdF9kdHNkZWNfYmFzZV9pbml0KToKLQkqIGV4dC9mYWFjL2dzdGZhYWMuYzogKGdzdF9mYWFjX2Jhc2VfaW5pdCk6Ci0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9iYXNlX2luaXQpOgotCSogZXh0L2l2b3JiaXMvdm9yYmlzZmlsZS5jOgotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOgotCSogZXh0L2xpYmZhbWUvZ3N0bGliZmFtZS5jOgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jLmNjOgotCSogZXh0L211c2ljYnJhaW56L2dzdHRybS5jOiAoZ3N0X211c2ljYnJhaW56X2Jhc2VfaW5pdCk6Ci0JKiBleHQvc2lkcGxheS9nc3RzaWRkZWMuY2M6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzoKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOgotCSogZXh0L3h2aWQvZ3N0eHZpZGRlYy5jOgotCSogZXh0L3h2aWQvZ3N0eHZpZGVuYy5jOgotCSAgY29ycmVjdCBrbGFzc2VzLiBNb3N0bHkgcyxDb2RlYy8oQXVkaW98VmlkZW8pLFwxL0NvZGVjLAotCSAgKGZpeGVzICMxNDIxOTMpCi0KLTIwMDQtMDUtMDggIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGRldmljZV9saXN0KSwKLQkoZ3N0X2Fsc2FfY2xhc3NfcHJvYmVfZGV2aWNlcyk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzogKGdzdF9hbHNhX21peGVyX29wZW4pOgotCSAgRml4IGFsc2Egb2RkbmVzcyBpbiBtaXhlciBhZnRlciB0aGUgY29tYmluYXRpb24gb2YgdXNpbmcgbWl4ZXIKLQkgIGluIHNvdXJjZS9zaW5rIGVsZW1lbnRzIGFuZCB1c2luZyBodzp4LHkgaW5zdGVhZCBvZiBqdXN0IGh3OnguCi0KLTIwMDQtMDUtMDkgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfZGVzdHJveV9zb3VyY2VwYWQpLAotCShnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCk6Ci0JICBtYWtlIFBBVVNFRD0+UkVBRFk9PlBBVVNFRD1SRUFEWSB3b3JrIGJ5IG5vdCBkZXN0cm95aW5nIE5VTEwKLQkgIHNvdXJjZXBhZHMKLQotMjAwNC0wNS0wOSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19jaGVja19ldmVudCk6Ci0JICBhbGxvdyBkaXNjb250IGV2ZW50cyBiZWZvcmUgY2FwcyBuZWdvCi0KLTIwMDQtMDUtMDggIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfZXZlbnQpOgotCSAgZG9uJ3QgbGVhayBldmVudHMKLQotMjAwNC0wNS0wOCAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvbGV2ZWwvZ3N0bGV2ZWwuYzogKGdzdF9sZXZlbF9saW5rKSwgKGdzdF9sZXZlbF9jaGFpbiksCi0JKGdzdF9sZXZlbF9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2xldmVsX2luaXQpOgotCSogZ3N0L2xldmVsL2dzdGxldmVsLmg6Ci0JICBmaWd1cmUgb3V0IGlmIHdlJ3JlIGluaXRpYWxpemVkIGRpcmVjdGx5IGluc3RlYWQgb2Yga2VlcGluZyBhCi0JICB2YXJpYWJsZSB0aGF0J3Mgd3JvbmcgaW4gOTAlIG9mIGNhc2VzCi0JICBkb24ndCBpbml0aWFsaXplIHBhZHMgYW5kIHRoZW4gbGVhayB0aGVtIGFuZCB1c2UgYSBuZXcgdW5pdGlhbGl6ZWQKLQkgIHBhZC4gKGZpeGVzICMxNDIwODQpCi0JICB0aGVzZSB3ZXJlIGJ1Z3Mgc28gbjAwYmlzaCBJIGRpZG4ndCBmaW5kIHRoZW0gZm9yIGFuIGhvdXIgOi8KLQotMjAwNC0wNS0wOCBJYWluIDxpYWluQHByZXR0eXBlb3BsZS5vcmc+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5bY2hdOiBSZXdyb3RlIHRvIHVzZSBSaWZmUmVhZCBpbnN0ZWFkLgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmMgKGdzdF9yaWZmX3JlYWRfcGVla19oZWFkKTogVW5zdGF0aWMgaXQKLQkoZ3N0X3JpZmZfcmVhZF9lbGVtZW50X2RhdGEpOiBEaXR0bywgYW5kIGFkZGVkIGEgZ290X2J5dGVzIGFyZ3VtZW50IHRvCi0JcmV0dXJuIHRoZSBsZW5ndGggdGhhdCB3YXMgcmVhZC4KLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX2F1ZHMpOiBBbGxvdyBmbXQgdGFncyBhcyB3ZWxsLgotCi0yMDA0LTA1LTA3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX3Npbmtjb25uZWN0KTogSEFDSyB0byBjb3JyZWN0Ci0Jc2lnbmVkIGNoYXIgYXNzdW1wdGlvbiBpbiBmYWFkLmguCi0KLTIwMDQtMDUtMDcgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX3Y0bDJmb3VyY2NfdG9fY2Fwcyk6Ci0JICBNaXNzaW5nIGJyZWFrLCBkZXRlY3RlZCBieSBEYW5pZWwgR2F6YXJkIDxkYW5pZWwuZ2F6YXJkQGZyZWUuZnI+LgotCi0yMDA0LTA1LTA3ICBDb2xpbiBXYWx0ZXJzICA8d2FsdGVyc0ByZWRoYXQuY29tPgotCi0JKiBnc3Qvdm9sdW1lL2dzdHZvbHVtZS5jIChnc3Rfdm9sdW1lX2Rpc3Bvc2UpOiBVbnJlZiBkcG1hbi4KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYyAoZ3N0X2ZsYWNkZWNfZGlzcG9zZSk6IEFkZCBkaXNwb3NlCi0JZnVuY3Rpb24uCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmMgKGdzdF9hdWRpb3NjYWxlX2Rpc3Bvc2UpOgotCUFkZCBkaXNwb3NlIGZ1bmN0aW9uLgotCi0yMDA0LTA1LTA4ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY192aWRlb19saW5rKToKLQkgIEZpeCBjYXBzIG5lZ28gYW5kIHBhZCB0ZW1wbGF0ZXMuIFJHQiBtb2RlIGNhcHMgc2hvdWxkCi0JICB3b3JrIG5vdy4KLQkqIGV4dC9kdmRuYXYvZ3N0LWR2ZDoKLQkgIE1vdmUgbXBlZzJkZWMgaW5zaWRlIHRoZSB0aHJlYWQgYmVjYXVzZSBvdGhlcndpc2UgdGhlCi0JICBxdWV1ZSByZWplY3RzIGNhcCBjaGFuZ2VzIG1pZC1zdHJlYW0KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOiAoZ3N0X21wZWcyZGVjX2dldF90eXBlKSwKLQkoZ3N0X21wZWcyZGVjX2ZsdXNoX2RlY29kZXIpOgotCSAgRm9yIG1wZWcyZGVjID4gMC40LjAsIGNhbGwgdGhlIGZsdXNoIGZ1bmN0aW9uIGluc3RlYWQgb2YKLQkgIG1hbnVhbGx5IGV4dHJhY3RpbmcgYWxsIGluLWZsaWdodCBmcmFtZXMuCi0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzogKGdzdF9kdjEzOTRzcmNfZmFjdG9yeSksCi0JKGdzdF9kdjEzOTRzcmNfaW5pdCksIChnc3RfZHYxMzk0c3JjX2lzb19yZWNlaXZlKToKLQkgIENoYW5nZSBtaW1lIHR5cGUgdmlkZW8vZHYgZ28gdmlkZW8veC1kdiB0byBtYXRjaCB0aGUKLQkgIHJlc3Qgb2YgZ3N0LXBsdWdpbnMKLQotMjAwNC0wNS0wNyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmM6IChnc3RfYWxzYV9taXhlcl9idWlsZF9saXN0KToKLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2dldF90eXBlKSwKLQkoZ3N0X2Fsc2Ffc2lua19jbGFzc19pbml0KToKLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmg6Ci0JKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6IChnc3RfYWxzYV9zcmNfZ2V0X3R5cGUpLAotCShnc3RfYWxzYV9zcmNfY2xhc3NfaW5pdCk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhc3JjLmg6Ci0JICBNYWtlIGFsc2FzaW5rL3NyYyBhIHN1YmNsYXNzIG9mIGFsc2FtaXhlciBzbyB0aGF0IG1peGVyIHN0dWZmCi0JICBzaG93cyB1cCBpbiBnc3QtcmVjLiBOZWVkcyBzb21lIGZpbmV0dW5pbmcuCi0KLTIwMDQtMDUtMDUgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfY2hhaW4pOgotCSAgc2ltcGxpZnkKLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2hhbmRsZV9ldmVudCk6Ci0JICBmaXggZXZlbnQgbGVhawotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChtcDNfdHlwZV9maW5kKToKLQkgIGJlIGFibGUgdG8gZGV0ZWN0IG1wMyBmaWxlcyA8IDQwOTYgYnl0ZXMKLQotMjAwNC0wNS0wNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC90aGVvcmEvdGhlb3JhZW5jLmM6IChnc3RfdGhlb3JhX2VuY19jbGFzc19pbml0KSwKLQkodGhlb3JhX2VuY19zaW5rX2xpbmspLCAodGhlb3JhX3B1c2hfcGFja2V0KSwgKHRoZW9yYV9lbmNfY2hhaW4pLAotCSh0aGVvcmFfZW5jX3NldF9wcm9wZXJ0eSksICh0aGVvcmFfZW5jX2dldF9wcm9wZXJ0eSk6Ci0JQWxzbyBlbmNvZGUgdGhlIGZpcnN0IGZyYW1lLCBjbGVhbnVwIHNvbWUgY29kZS4KLQotMjAwNC0wNS0wNiAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuYy5jYzoKLQlGb3J3YXJkIGV2ZW50cyBmaXJzdCBiZWZvcmUgZGVjaWRpbmcgdGhhdCBuZWdvdGlhdGlvbiB3YXMKLQlub3QgcGVyZm9ybWVkLgotCi0yMDA0LTA1LTA2ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2hhaW4pOgotCUZpcnN0IHByb2Nlc3MgdGhlIGV2ZW50cyBiZWZvcmUgZGVjaWRpbmcgdGhhdCBuZWdvdGlhdGlvbgotCXdhcyBub3QgcGVyZm9ybWVkLgotCi0yMDA0LTA1LTA2ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L3RoZW9yYS9NYWtlZmlsZS5hbToKLQkqIGV4dC90aGVvcmEvdGhlb3JhLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOiAodGhlb3JhX2RlY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3RoZW9yYS90aGVvcmFlbmMuYzogKGdzdF90aGVvcmFfZW5jX2Jhc2VfaW5pdCksCi0JKGdzdF90aGVvcmFfZW5jX2NsYXNzX2luaXQpLCAoZ3N0X3RoZW9yYV9lbmNfaW5pdCksCi0JKHRoZW9yYV9lbmNfc2lua19saW5rKSwgKHRoZW9yYV9lbmNfZXZlbnQpLCAodGhlb3JhX3B1c2hfcGFja2V0KSwKLQkodGhlb3JhX2VuY19jaGFpbiksICh0aGVvcmFfZW5jX2NoYW5nZV9zdGF0ZSksCi0JKHRoZW9yYV9lbmNfc2V0X3Byb3BlcnR5KSwgKHRoZW9yYV9lbmNfZ2V0X3Byb3BlcnR5KToKLQlBZGRlZCBhIHRoZW9yYSBlbmNvZGVyLCBncm91cGVkIHRoZSBlbmNvZGVyIGFuZCBkZWNvZGVyIGludG8gdGhlCi0Jc2FtZSBwbHVnaW4uCi0KLTIwMDQtMDUtMDUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX2dldF90eXBlKSwKLQkoZ3N0X2pwZWdlbmNfY2hhaW4pOgotICAgICAgICBmaXggRFVSQVRJT04gb24gb3V0Z29pbmcgYnVmZmVycwotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X2hhbmRsZV9zaW5rX2V2ZW50KToKLSAgICAgICAgZGVidWcgdXNpbmcgdGltZSBmb3JtYXRzCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3hjb250ZXh0X2dldCk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2dldF94dl9zdXBwb3J0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NpbmtfbGluayk6Ci0gICAgICAgIHdpbmRvd3Mgd2l0aCB3aWR0aC9oZWlnaHQgMCBnZW5lcmF0ZSBYIGVycm9ycywgc28gZG9uJ3QgYWxsb3cgdGhlbQotCi0yMDA0LTA1LTA1ICBXaW0gVGF5bWFucyAgPHdpbUBmbHVlbmRvLmNvbT4KLQotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChzcmNfdGVtcGwpLAotCShnc3RfbXBlZzJkZWNfYmFzZV9pbml0KSwgKGdzdF9tcGVnMmRlY19pbml0KSwKLQkoZ3N0X21wZWcyZGVjX25lZ290aWF0ZV9mb3JtYXQpOgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmg6Ci0JICByZW1vdmVkIHRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlIHNvIHRoYXQgd2UgY2FuIGFkZCB0aGUKLQkgIG1vcmUgYWNjdXJhdGUgZnJhbWVyYXRlIHZhbHVlIHRvIHRoZSBjYXBzLgotCi0KLTIwMDQtMDUtMDQgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgY2hlY2sgZm9yIGtkZW1hY3Jvcy5oLCB0b28gKHNob3VsZCBmaXggIzE0MTgyMSkKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2V2ZW50KSwgKHZvcmJpc19kZWNfY2hhaW4pOgotCSAgZG9uJ3QgY3Jhc2ggaWYgbm8gaGVhZGVyIHdhcyBzZW50LCBidXQgbmljZWx5IGVycm9yIG91dCAoZml4ZXMgcGFydAotCSAgb2YgIzE0MTU1NCkKLQotMjAwNC0wNS0wNCAgV2ltIFRheW1hbnMgIDx3aW1AZmx1ZW5kby5jb20+Ci0KLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuYy5jYzogKGdzdF9tcGVnMmVuY19kaXNwb3NlKTogY2FsbCB0aGUKLQlwYXJlbnQgZGlzcG9zZSBmdW5jdGlvbiB0byBhdm9pZCBzZWdmYXVsdCBvbiBkZXN0cm95LgotCi0yMDA0LTA1LTA0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3NpbmtfbGluayksCi0JKHBsdWdpbl9pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NpbmtfbGluayk6Ci0gICAgICAgIGNsZWFuIHVwIGRlYnVnZ2luZyBjYXBzCi0gICAgICAgIGFsc28gcmVjcmVhdGUgeHZpbWFnZSB3aGVuIGZvcm1hdCBoYXMgY2hhbmdlZAotCi0yMDA0LTA1LTA0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9saWJ2aXN1YWwvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGlidmlzdWFsL3Zpc3VhbC5jOiAoZ3N0X3Zpc3VhbF9jbGFzc19pbml0KSwKLQkoZ3N0X3Zpc3VhbF9pbml0KSwgKGdzdF92aXN1YWxfZGlzcG9zZSksIChnc3RfdmlzdWFsX2dldGNhcHMpLAotCShnc3RfdmlzdWFsX3NyY2xpbmspLCAoZ3N0X3Zpc3VhbF9jaGFpbiksCi0JKGdzdF92aXN1YWxfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgIHVzZSBhIEdzdEFkYXB0ZXIgdG8gY29ycmVjdGx5IGFkYXB0IGJ1ZmZlciBzaXplcyAtIGFsbG93cyB1c2luZyBhCi0JICBmcmFtZXJhdGUKLQotMjAwNC0wNS0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogc3lzL3Y0bC9nc3R2NGxlbGVtZW50Lmg6Ci0JKiBzeXMvdjRsL2dzdHY0bG1qcGVnc3JjLmM6IChnc3RfdjRsbWpwZWdzcmNfY2xhc3NfaW5pdCk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19nZXRfZnBzKSwgKGdzdF92NGxzcmNfZ2V0Y2FwcyksCi0JKGdzdF92NGxzcmNfYnVmZmVyX2ZyZWUpOgotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfZ2V0X2NhcGFiaWxpdGllcyk6Ci0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5jOiAoZ3N0X3Y0bHNyY19xdWV1ZV9mcmFtZSksCi0JKGdzdF92NGxzcmNfc3luY19mcmFtZSksIChnc3RfdjRsc3JjX2dyYWJfZnJhbWUpLAotCShnc3RfdjRsc3JjX3JlcXVldWVfZnJhbWUpOgotICAgICAgICBtb3ZlIHNvbWUgZGVidWdnaW5nIGNhdGVnb3JpZXMgYXJvdW5kCi0gICAgICAgIHF1ZXJ5IGZvciBmcHMgaW5kZXggYW5kIHNldCBhY2NvcmRpbmdseSBpZiBmb3VuZAotCi0yMDA0LTA1LTAzICBTdGVwaGFuZSBMb2V1aWxsZXQgPHN0ZXBoYW5lLmxvZXVpbGxldEB0aXNjYWxpLmZyPgotCi0JKiBleHQvbGFtZS9nc3RsYW1lLmM6Ci0JY29ycmVjdCBkZWZhdWx0cyB0aGF0IGxhbWVfaW5pdCBwdXRzIG91dCBvZiByYW5nZQotCi0yMDA0LTA1LTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmM6IChnc3RfZGl2eGVuY19nZXRfdHlwZSksCi0JKGdzdF9kaXZ4ZW5jX2NsYXNzX2luaXQpOgotICAgICAgICBmaXggcmFuZ2Ugc2luY2UgLTEgaXMgdGhlIGRlZmF1bHQKLQkqIGdzdC9tcGVnMXN5cy9nc3RtcGVnMXN5c3RlbWVuY29kZS5jOgotCShnc3RfbXBlZzFfc3lzdGVtX2VuY29kZV9nZXRfdHlwZSksIChnc3Rfc3lzdGVtX2VuY29kZV9tdWx0aXBsZXgpOgotCSogZ3N0L3J0anBlZy9nc3RydGpwZWdkZWMuYzogKGdzdF9ydGpwZWdkZWNfZ2V0X3R5cGUpLAotCShnc3RfcnRqcGVnZGVjX2NoYWluKToKLQkqIGdzdC9ydGpwZWcvZ3N0cnRqcGVnZW5jLmM6IChnc3RfcnRqcGVnZW5jX2dldF90eXBlKSwKLQkoZ3N0X3J0anBlZ2VuY19jaGFpbik6Ci0JKiBzeXMvcWNhbS9nc3RxY2Ftc3JjLmM6IChnc3RfYXV0b2V4cF9tb2RlX2dldF90eXBlKSwKLQkoZ3N0X3FjYW1zcmNfZ2V0X3R5cGUpLCAoZ3N0X3FjYW1zcmNfY2hhbmdlX3N0YXRlKToKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzaW5rLmM6IChnc3RfdjRsbWpwZWdzaW5rX2dldF90eXBlKToKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19nZXRfdHlwZSk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOgotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfb3Blbik6Ci0JKiBzeXMvdjRsL3Y0bG1qcGVnc2lua19jYWxscy5jOiAoZ3N0X3Y0bG1qcGVnc2lua19wbGF5YmFja19pbml0KToKLQkqIHN5cy92NGwvdjRsbWpwZWdzcmNfY2FsbHMuYzogKGdzdF92NGxtanBlZ3NyY19jYXB0dXJlX2luaXQpOgotCSogc3lzL3Y0bC92NGxzcmNfY2FsbHMuYzogKGdzdF92NGxzcmNfY2FwdHVyZV9pbml0KToKLQkqIHN5cy92Y2QvdmNkc3JjLmM6ICh2Y2RzcmNfZ2V0X3R5cGUpLCAodmNkc3JjX2dldCk6Ci0gICAgICAgICAgcmVtb3ZlIGdzdF9pbmZvIGNhbGxzCi0KLTIwMDQtMDUtMDMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogcG8vYWYucG86Ci0JKiBwby9hei5wbzoKLQkqIHBvL2VuX0dCLnBvOgotCSogcG8vbmwucG86Ci0JKiBwby9zci5wbzoKLQkqIHBvL3N2LnBvOgotICAgICAgICAgIFVwZGF0ZWQgdHJhbnNsYXRpb25zCi0KLTIwMDQtMDUtMDMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChfZml4YXRlX2NhcHNfdG9faW50KToKLSAgICAgICAgICByZWZhY3Rvci9jb21tZW50IGNvZGUKLQotMjAwNC0wNS0wMiAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2FzZmRlbXV4L01ha2VmaWxlLmFtOgotCSogZ3N0L2FzZmRlbXV4L2FzZmhlYWRlcnMuYzoKLQkqIGdzdC9hc2ZkZW11eC9hc2ZoZWFkZXJzLmg6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfZ2V0X3R5cGUpLAotCShnc3RfYXNmX2RlbXV4X2Jhc2VfaW5pdCksIChnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfY29tbWVudCksCi0JKGdzdF9hc2ZfZGVtdXhfc2V0dXBfcGFkKToKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5oOgotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZm11eC5jOgotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZm11eC5oOgotCSAgQWRkIHRhZ2dpbmcgc3VwcG9ydCB0byBkZW11eGVyLCBzcGxpdCBvdXQgcmVnaXN0cmF0aW9uIGluIGl0cyBvd24KLQkgIGZpbGUgaW5zdGVhZCBvZiBpbiBkZW11eCAoaGFja3kpLCBhbmQgcHJldmVudCBoYXZpbmcgc29tZSB0YWJsZXMKLQkgIGluIG91ciBtZW1vcnkgbXVsdGlwbGUgdGltZXMgKGluIGFzZmhlYWRlcnMuaCkuCi0KLTIwMDQtMDUtMDEgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOgotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfbWV0YWRhdGEpOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgQmFzaWMgdGFnIHJlYWRpbmcgc3VwcG9ydC4KLQotMjAwNC0wNC0zMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBSZWFsbHkgZGV0ZWN0IGFjLTMgYXVkaW8uCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1hdHJvc2thX3R5cGVfZmluZCk6Ci0JICByZWFsbHkgZGV0ZWN0IG1hdHJvc2thIGZpbGVzIChvZmYtYnktMSkuCi0KLTIwMDQtMDQtMzAgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCShnc3RfcXRkZW11eF9hZGRfc3RyZWFtKSwgKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF90eXBlX2dldCksCi0JKHF0ZGVtdXhfZHVtcF9zdHN6KSwgKHF0ZGVtdXhfZHVtcF9zdGNvKSwgKHF0ZGVtdXhfZHVtcF9jbzY0KSwKLQkocXRkZW11eF9kdW1wX3Vua25vd24pLCAocXRkZW11eF9wYXJzZV90cmVlKSwgKHF0ZGVtdXhfcGFyc2VfdWR0YSksCi0JKHF0ZGVtdXhfdGFnX2FkZCksIChnZXRfc2l6ZSksIChnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyk6IE1vcmUgcXRkZW11eAotCWhhY2thZ2UgLS0gcGFyc2UgYSBsb3QgbW9yZSBhdG9tcywgZXh0cmFjdCBhIGZldyB0YWdzLiAgT25lIG1pZ2h0IGV2ZW4KLQltaXN0YWtlIHRoaXMgZm9yIHRhZyBzdXBwb3J0LiAgTWF5YmUgaXQgaXMuCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4Lmg6Ci0KLTIwMDQtMDQtMzAgIENvbGluIFdhbHRlcnMgIDx3YWx0ZXJzQHZlcmJ1bS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmMgKGdzdF9hbHNhX3NpbmtfbW1hcCk6IFBsdWcgYSBtZW1sZWFrLgotCi0yMDA0LTA0LTMwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2dldGNhcHMpOgotICAgICAgICAgIHJlbW92ZSBicm9rZW4gbmVnbyBmaXgKLQotMjAwNC0wNC0zMCAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGlidmlzdWFsL01ha2VmaWxlLmFtOgotCSogZXh0L2xpYnZpc3VhbC92aXN1YWwuYzoKLQkgIGFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGxpYnZpc3VhbCAoaHR0cDovL2xpYnZpc3VhbC5zb3VyY2Vmb3JnZS5uZXQpCi0JICBsaWJ2aXN1YWwgaXMgc3RpbGwgcXVpdGUgYWxwaGEsIHNvIGV4cGVjdCBjcmFzaGVzIGluIHRoZXJlIDopCi0KLTIwMDQtMDQtMjkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSksIChxdGRlbXV4X3BhcnNlKSwKLQkocXRkZW11eF9wYXJzZV90cmFrKSwgKGdldF9zaXplKSwgKGdzdF9xdGRlbXV4X2hhbmRsZV9lc2RzKTogSGFja2VkCi0JdXAgcXRkZW11eCB0byBtYWtlIGl0IHNwaXQgb3V0IGNvZGVjX2RhdGEuICBEbyBfbm90XyBsb29rIGF0IHRoaXMKLQljb2RlOyB5b3Ugd2lsbCBubyBsb25nZXIgcmVzcGVjdCBtZS4KLQotMjAwNC0wNC0yOSAgU3RlcGhhbmUgTG9ldWlsbGV0IDxzdGVwaGFuZS5sb2V1aWxsZXRAdGlzY2FsaS5mcj4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jIDogKGdzdF9hbHNhX2NsYXNzX3Byb2JlX2RldmljZXMpCi0JKiBleHQvYWxzYS9nc3RhbHNhLmggOgotCWNoYW5nZSBhbHNhIHBjbSBkZXZpY2UgZGlzY292ZXJ5IHRvIGZpbmQgbW9yZSB0aGFuIDEgZGV2aWNlCi0JcGVyIGNhcmQuIGNvZGUgcmV2aWV3IGJ5IFJvbmFsZC4KLQotMjAwNC0wNC0yOSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogKGdzdF9vc3NlbGVtZW50X3JhdGVfcHJvYmVfY2hlY2spOgotCUFkZCBhIGNoZWNrIGZvciBhIGRyaXZlciBidWcgb24gRnJlZUJTRC4gIChidWcgIzE0MDU2NSkKLQotMjAwNC0wNC0yOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdkZWNfZ2V0X3R5cGUpOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAoZ3N0X2pwZWdlbmNfZ2V0X3R5cGUpLAotCShnc3RfanBlZ2VuY19nZXRjYXBzKToKLSAgICAgICAgICBtb3ZlIGZvcm1hdCBzZXR0aW5nIHRvIGlubmVyIGxvb3AKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvbG9yc3BhY2UuYzoKLQkoZ3N0X2ZmbXBlZ2NvbG9yc3BhY2VfZ2V0Y2Fwcyk6Ci0gICAgICAgICAgdXNlIEdTVF9QQURfQ0FQUyBpZiBhdmFpbGFibGUgc28gdGhhdCB3ZSB1c2UgYWxyZWFkeSBuZWdvdGlhdGVkCi0gICAgICAgICAgY2FwcwotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfbG9vcF9oZWFkZXIpLAotCShxdGRlbXV4X3BhcnNlX21vb3YpLCAocXRkZW11eF9wYXJzZSk6Ci0gICAgICAgICAgZXh0cmEgZGVidWdnaW5nCi0JKiBzeXMvcWNhbS9xY2FtLUxpbnV4LmM6IChxY19sb2NrX3dhaXQpLCAocWNfdW5sb2NrKToKLQkqIHN5cy9xY2FtL3FjYW0tb3MuYzogKHFjX2xvY2tfd2FpdCksIChxY191bmxvY2spOgotICAgICAgICAgIG1vdmUgaGFyZGNvZGVkIHBhdGggdG8gREVGSU5FCi0KLTIwMDQtMDQtMjggIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3NwZWVkL2dzdHNwZWVkLmM6IChzcGVlZF9wYXJzZV9jYXBzKTogIEZpeCBjYXBzIHBhcnNpbmcuCi0JKGJ1ZyAjMTQwMDY0KQotCi0yMDA0LTA0LTI4ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9jbGFzc19wcm9iZV9kZXZpY2VzKToKLQkgIERvbid0IHByb2JlIGZvciBwbGF5YmFjayBkZXZpY2UgaWYgd2UncmUgYSBzb3VyY2UgZWxlbWVudC4gRml4ZXMKLQkgICMxMzk2NTguCi0KLTIwMDQtMDQtMjkgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2hhbmRsZV9ldmVudCksCi0JKGdzdF9pZDNfdGFnX2NoYWluKToKLQkgIHJld3JpdGUgYnVmZmVyIG9mZnNldAotCi0yMDA0LTA0LTI4ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvZHRzL01ha2VmaWxlLmFtOgotCSogZXh0L2R0cy9nc3RkdHNkZWMuYzogKGdzdF9kdHNkZWNfZ2V0X3R5cGUpLAotCShnc3RfZHRzZGVjX2Jhc2VfaW5pdCksIChnc3RfZHRzZGVjX2NsYXNzX2luaXQpLCAoZ3N0X2R0c2RlY19pbml0KSwKLQkoZ3N0X2R0c2RlY19jaGFubmVscyksIChnc3RfZHRzZGVjX3JlbmVnb3RpYXRlKSwKLQkoZ3N0X2R0c2RlY19oYW5kbGVfZXZlbnQpLCAoZ3N0X2R0c2RlY191cGRhdGVfc3RyZWFtaW5mbyksCi0JKGdzdF9kdHNkZWNfbG9vcCksIChnc3RfZHRzZGVjX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9kdHNkZWNfc2V0X3Byb3BlcnR5KSwgKGdzdF9kdHNkZWNfZ2V0X3Byb3BlcnR5KSwKLQkocGx1Z2luX2luaXQpOgotCSogZXh0L2R0cy9nc3RkdHNkZWMuaDoKLQkgIE5ldyBEVFMgZGVjb2Rlci4KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX3Npbmtjb25uZWN0KSwKLQkoZ3N0X2ZhYWRfc3JjY29ubmVjdCk6Ci0JICBBZGQgRVNEUyBhdG9tIGhhbmRsaW5nICgubTRhKS4KLQotMjAwNC0wNC0yNyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2RpdngvZ3N0ZGl2eGRlYy5jOiAocGx1Z2luX2luaXQpOgotCSAgUmVtb3ZlIGNvbW1lbnQgdGhhdCBtYWtlcyBubyBzZW5zZS4KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19zZXRfcHJvcGVydHkpOgotCSAgRml4IGZvciBvYnZpb3VzIHR5cG8gdGhhdCByZXN1bHRlZCBpbiB3YXJuaW5ncyBkdXJpbmcgZ3N0LXJlZ2lzdGVyLgotCSogZXh0L3h2aWQvZ3N0eHZpZGRlYy5jOiAoZ3N0X3h2aWRkZWNfc3JjX2xpbmspLAotCShnc3RfeHZpZGRlY19zaW5rX2xpbmspOgotCSAgRml4IGNhcHMgbmVnb3RpYXRpb24gYSBiaXQgYmV0dGVyLgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9wYXJzZV90cmFrKToKLQkgIFdlIGNhbGwgdGhpcyAnY29kZWNfZGF0YScsIG5vdCAnZXNkcycuCi0KLTIwMDQtMDQtMjcgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzoKLQkgIG1ha2Ugc3VyZSB3ZSBvbmx5IHByb3ZpZGUgMjU2eDEyOAotCSogZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuYzogKG1vbm9zY29wZV9pbml0KToKLQkgIGFzc2VydCBzaXplIG9mIDI1NngxMjgKLQotMjAwNC0wNC0yNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19pbml0KSwgKGdzdF92NGxzcmNfZml4YXRlKSwKLQkoZ3N0X3Y0bHNyY19nZXRjYXBzKSwgKGdzdF92NGxzcmNfYnVmZmVyX2ZyZWUpOgotICAgICAgICAgIGZpeGF0ZSB0byBtYXggd2lkdGggYW5kIGhlaWdodCBvZiBkZXZpY2UKLQotMjAwNC0wNC0yNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogTWFrZWZpbGUuYW06Ci0JKiBzeXMvdjRsL2dzdHY0bC5jOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzoKLQkqIHN5cy92NGwvdjRsX2NhbGxzLmM6Ci0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5jOgotICAgICAgICAgIGZpeCBmb3IgcWMtdXNiIGRyaXZlciB3aGljaCBmYWtlcyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBidWZmZXIKLSAgICAgICAgICBieSBoYW5kaW5nIHRoZSBzYW1lIGJ1ZmZlciB0d2ljZSwgd2hpY2ggY29uZnVzZWQgR1N0cmVhbWVyJ3MvdjRsc3JjCi0gICAgICAgICAgYnVmZmVyX2ZyZWUgb3ZlcnJpZGUKLSAgICAgICAgICBhZGQgZGVidWdnaW5nCi0KLTIwMDQtMDQtMjcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzoKLQkoZ3N0X3ZpZGVvdGVzdHNyY19jbGFzc19pbml0KSwgKGdzdF92aWRlb3Rlc3RzcmNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3ZpZGVvdGVzdHNyY19pbml0KSwgKGdzdF92aWRlb3Rlc3RzcmNfZ2V0KSwKLQkoZ3N0X3ZpZGVvdGVzdHNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3ZpZGVvdGVzdHNyY19nZXRfcHJvcGVydHkpOgotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuaDoKLSAgICAgICAgICBhZGQgbnVtLWJ1ZmZlcnMgcHJvcGVydHkKLQotCTIwMDQtMDQtMjYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKHBsdWdpbl9pbml0KToKLQkgIHNldCBpZDNtdXggcmFuayB0byBOT05FIHNvIGl0IGRvZXNuJ3QgY29uZnVzZSBzcGlkZXIKLQkgIHJlcXVpcmUgYXVkaW8vbXBlZyxtcGVndmVyc2lvbj0xIGluIGlkM211eAotCi0yMDA0LTA0LTI2ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGRldGVjdCBmYWFkIGNvcnJlY3RseSBhcyBub24td29ya2luZyBpZiBpdCdzIGluZGVlZCBub24td29ya2luZwotCi0yMDA0LTA0LTI2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX2dldF90eXBlKSwKLQkoZ3N0X2pwZWdlbmNfY2xhc3NfaW5pdCksIChnc3RfanBlZ2VuY19nZXRjYXBzKToKLSAgICAgICAgZml4IF9nZXRjYXBzIHNvIGl0IG9ubHkgbmVnb3RpYXRlcyB0byBpdHMgc3VwcG9ydGVkIGZvcm1hdAotCi0yMDA0LTA0LTI1ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChfZml4YXRlX2NhcHNfdG9faW50KToKLQkgIGZpeCBtZW1sZWFrCi0KLTIwMDQtMDQtMjMgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOiAoZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHMpOgotCSAgYXVkaW8veC1yYXctaW50IHdpdGggaGVpZ2h0IHJ1bGVzISBub3QuIE5vdyBpdCdzIGRlcHRoLgotCi0yMDA0LTA0LTIyICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9jcmVhdGVfc291cmNlcGFkKSwKLQkoZ3N0X3dhdnBhcnNlX3BhcnNlX2ZtdCksIChnc3Rfd2F2cGFyc2VfaGFuZGxlX3NpbmtfZXZlbnQpLAotCShnc3Rfd2F2cGFyc2VfbG9vcCk6Ci0JICBNaXNzaW5nIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLiBBZGQgaGFuZGxpbmcgb2YgRFZJIEFEUENNLiBGaXgKLQkgIG1pcy1wYXJzaW5nIG9mIExJU1QgY2h1bmtzLiBUaGlzIHdvcmtzIGFyb3VuZCBhIGJ1ZyB3aGVyZSB3ZSBtaXMtCi0JICBwYXJzZSBub24tYWxpZ25pbmcgTElTVCBjaHVua3MgKHNvIExJU1QgY2h1bmtzIHdoZXJlIHRoZSBjb250ZW50cwotCSAgZG9uJ3QgYWxpZ24gd2l0aCB0aGUgYWN0dWFsIExJU1Qgc2l6ZSkuIFRoZSBjb3JyZWN0IGZpeCBpcyB0byB1c2UKLQkgIHJpZmZsaWIsIEknbSBub3QgZ29pbmcgdG8gZml4IHdhdnBhcnNlIC0gdG9vIG11Y2ggd29yay4gQWxsIHRoaXMKLQkgIGZpeGVzICMxMDQ4NzguCi0KLTIwMDQtMDQtMjIgIFphaGVlciBBYmJhcyBNZXJhbGkgIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLQotCXJldmlld2VkIGJ5IEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L3Nob3V0L2dzdHNob3V0LmM6IChnc3RfaWNlY2FzdHNlbmRfY2hhbmdlX3N0YXRlKToKLQkgIGZpeCBzaG91dGNhc3Qgbm90IHdvcmtpbmcgKGZpeGVzICMxNDA4NDQpCi0KLTIwMDQtMDQtMjIgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2hlcm1lcy9nc3RoZXJtZXNjb2xvcnNwYWNlLmM6Ci0JKGdzdF9oZXJtZXNfY29sb3JzcGFjZV9jYXBzX3JlbW92ZV9mb3JtYXRfaW5mbyk6Ci0JKiBnc3QvY29sb3JzcGFjZS9nc3Rjb2xvcnNwYWNlLmM6Ci0JKGdzdF9jb2xvcnNwYWNlX2NhcHNfcmVtb3ZlX2Zvcm1hdF9pbmZvKToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvbG9yc3BhY2UuYzoKLQkoZ3N0X2ZmbXBlZ2NvbG9yc3BhY2VfY2Fwc19yZW1vdmVfZm9ybWF0X2luZm8pOgotCSAgcy9nc3RfY2Fwc19zaW1wbGlmeS9nc3RfY2Fwc19kb19zaW1wbGlmeS8KLQotMjAwNC0wNC0yMiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzX3dpdGhfZGF0YSk6Ci0JICBtcGVndmVyc2lvbiBpcyBhbiBpbnQKLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2Jhc2VfaW5pdCk6Ci0JICBkb24ndCB0cnkgdG8gY3JlYXRlIHBhZCB0ZW1wbGF0ZXMgd2l0aCBOVUxMIGNhcHMsIHVzZSBhbnkgY2FwcwotCSAgaW5zdGVhZC4KLQotMjAwNC0wNC0yMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvc2RsL01ha2VmaWxlLmFtOiBMaW5rIGFnYWluc3QgbGliZ3N0aW50ZXJmYWNlcywgbm90Ci0JbGliZ3N0eG92ZXJsYXkuICBqbW12QG1lbnRhLm5ldCAoSnVsaW8gTS4gTWVyaW5vIFZpZGFsKQotCShidWcgIzE0MDM4NCkKLQotMjAwNC0wNC0yMCAgRGFuaWVsIEdhemFyZCAgPGRhbmllbC5nYXphcmRAZXBpdGEuZnI+Ci0KLQlyZXZpZXdlZCBieSBEYXZpZCBTY2hsZWVmCi0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IEFkZCBzdGRsaWIuaAotCSogZ3N0L3J0cC9nc3RydHBnc21lbmMuYzogc2FtZQotCSogZ3N0L3RhZ3MvZ3N0aWQzdGFnLmM6IHNhbWUKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2dldCk6IEZpeCBHU1RfRElTQUJMRV9MT0FEU0FWRQotCSogZ3N0L3RjcC9nc3R0Y3BzaW5rLmM6IChnc3RfdGNwc2lua19zaW5rX2xpbmspOiBBZGp1c3QKLQlHU1RfRElTQUJMRV9MT0FEU0FWRSB1c2UuCi0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX3NpbmtfbGluayk6IExpa2V3aXNlLgotCSogZ3N0L3RjcC9nc3R0Y3BzcmMuYzogKGdzdF90Y3BzcmNfZ2V0KTogTGlrZXdpc2UuCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogSW5jbHVkZSA8c3RkbGliLmg+IChuZWVkZWQgYnkKLQlhdG9sKDMpKS4KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5oOiBJbmNsdWRlIDxzeXMvdHlwZXMuaD4gKG5lZWRlZCBmb3IgZGV2X3QpLgotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPiAobmVlZGVkIGJ5Ci0Jc3RydG91bCgzKSkuCi0JKiBnc3QvcnRwL2dzdHJ0cEwxNmVuYy5jOiBJbmNsdWRlIDxzdGRsaWIuaD4gKG5lZWRlZCBieSByYW5kb20oMykpLgotCSogZXh0L21hZC9NYWtlZmlsZS5hbTogKGxpYmdzdG1hZF9sYV9DRkxBR1MpOiBBZGQgJChNQURfQ0ZMQUdTKQotCSQoSUQzX0NGTEFHUykuCi0JKiBleHQvbGliZmFtZS9NYWtlZmlsZS5hbTogKGxpYmdzdGxpYmZhbWVfbGFfQ0ZMQUdTKTogQWRkCi0JJChMSUJGQU1FX0NGTEFHUykuCi0KLTIwMDQtMDQtMjAgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6ICBUaGlzIHdhcyBzdXBwb3NlZCB0byBwYXJ0IG9mIHRoZQotCWxhc3QgY2hlY2tpbi4gIFNhbWUgaWRlYS4KLQotMjAwNC0wNC0yMCAgRGFuaWVsIEdhemFyZCAgPGRhbmllbC5nYXphcmRAZXBpdGEuZnI+Ci0KLQlyZXZpZXdlZCBieSBEYXZpZCBTY2hsZWVmCi0KLQkqIGNvbmZpZ3VyZS5hYzogYnVtcCByZXF1aXJlZCBnc3RyZWFtZXIgdmVyc2lvbiB0byAwLjguMS4xCi0JYmVjYXVzZSBvZiBmb2xsb3dpbmcgY2hhbmdlcyBbLS1kc10KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6ICBJbmNsdWRlIGdzdC9nc3R1dGlscy5oLgotCShnc3RfcmlmZl9wZWVrX2hlYWQsIGdzdF9yaWZmX3BlZWtfbGlzdCwgZ3N0X3JpZmZfcmVhZF9saXN0KQotCShnc3RfcmlmZl9yZWFkX2hlYWRlcik6ICBVc2UgR1NUX1JFQURfVUlOVCoKLQltYWNyb3MgdG8gYWNjZXNzIHBvc3NpYmx5IHVuYWxpZ25lZCBtZW1vcnkuCi0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiBJbmNsdWRlIGdzdC9nc3R1dGlscy5oLgotCShtcDNfdHlwZV9maW5kKTogIFVzZSBHU1RfUkVBRF9VSU5UKgotCW1hY3JvcyB0byBhY2Nlc3MgcG9zc2libHkgdW5hbGlnbmVkIG1lbW9yeS4KLQkobXAzX3R5cGVfZmluZCwgbXBlZzFfcGFyc2VfaGVhZGVyLCBxdF90eXBlX2ZpbmQpCi0JKHNwZWV4X3R5cGVfZmluZCk6IExpa2V3aXNlCi0KLQkqIGdzdC90YWdzL2dzdHZvcmJpc3RhZy5jOiAoQURWQU5DRSk6IExpa2V3aXNlCi0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogSW5jbHVkZSBzdGRsaWIuaCAobmVlZGVkIGJ5IHJlYWxsb2MpLgotCShRVERFTVVYX0dVSU5UMzJfR0VULCBRVERFTVVYX0dVSU5UMTZfR0VULCBRVERFTVVYX0ZQMzJfR0VUKQotCShRVERFTVVYX0ZQMTZfR0VULCBRVERFTVVYX0ZPVVJDQ19HRVQpCi0JKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyLCBnc3RfcXRkZW11eF9sb29wX2hlYWRlcikKLQkocXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCwgcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlKQotCShxdGRlbXV4X3RyZWVfZ2V0X3NpYmxpbmdfYnlfdHlwZSk6ICBVc2UgR1NUX1JFQURfVUlOVCoKLQltYWNyb3MgdG8gYWNjZXNzIHBvc3NpYmx5IHVuYWxpZ25lZCBtZW1vcnkuCi0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYWNrZXRpemUuYzogKHBhcnNlX2dlbmVyaWMsIHBhcnNlX2NodW5rKToKLQlMaWtld2lzZS4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6IChnc3RfbXBlZ19kZW11eF9wYXJzZV9zeXNoZWFkKQotCShnc3RfbXBlZ19kZW11eF9wYXJzZV9wYWNrZXQsIGdzdF9tcGVnX2RlbXV4X3BhcnNlX3Blcyk6IExpa2V3aXNlLgotCi0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzogKGdzdF9tcDNwYXJzZV9jaGFpbik6Ci0JTGlrZXdpc2UuCi0KLQkqIGdzdC9tcGVnMnN1Yi9nc3RtcGVnMnN1YnQuYzogKEdTVF9CVUZGRVJfREFUQSkKLQkoZ3N0X21wZWcyc3VidF9jaGFpbl9zdWJ0aXRsZSk6IExpa2V3aXNlLgotCi0JKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuYzogKG1wMXZpZGVvcGFyc2VfcGFyc2Vfc2VxKQotCShnc3RfbXAxdmlkZW9wYXJzZV90aW1lX2NvZGUsIGdzdF9tcDF2aWRlb3BhcnNlX3JlYWxfY2hhaW4pOgotCUxpa2V3aXNlLgotCi0JKiBnc3QvbXBlZzFzeXMvYnVmZmVyLmM6IChtcGVnMW11eF9idWZmZXJfdXBkYXRlX2F1ZGlvX2luZm8pOgotCUxpa2V3aXNlLgotCi0JKiBnc3QvY2R4YXBhcnNlL2dzdGNkeGFwYXJzZS5jOiAoZ3N0X2J5dGVzdHJlYW1fcGVla19ieXRlcyk6Ci0JTGlrZXdpc2UuCi0KLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoX3JlYWRfdmFyX2xlbmd0aCwgX3JlYWRfdWludCk6Ci0JTGlrZXdpc2UuCi0KLTIwMDQtMDQtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLSAgICAgICAgICB1cGRhdGUgcmVxdWlyZWQgdmVyc2lvbiBvZiBHU3RyZWFtZXIgYmVjYXVzZSBvZiBHU1RfVElNRV9GT1JNQVQKLQotMjAwNC0wNC0yMCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfaW5pdCk6Ci0JICByZW1vdmUgbGVmdG92ZXIgZ19wcmludAotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspOgotCSAgZG9uJ3QgdHJ5IHNldHRpbmcgb25seSBhIHN1YnNldCBvZiB0aGUgY2Fwcy4gV2UgZG9uJ3Qgd2FudCB0byBraWxsCi0JICBhdXRvcGx1Z2dpbmcgb24gcHVycG9zZQotCi0yMDA0LTA0LTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKHBsdWdpbl9pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChwbHVnaW5faW5pdCk6Ci0gICAgICAgICAgYWRkIGRlYnVnZ2luZyBjYXRlZ29yaWVzCi0KLTIwMDQtMDQtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHBvL2VuX0dCLnBvOgotICAgICAgICAqIHBvL0xJTkdVQVM6Ci0gICAgICAgICAgQWRkaW5nIGVuX0dCIHRyYW5zbGF0aW9uIChHYXJldGggT3dlbikKLQotMjAwNC0wNC0yMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCksCi0JKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF90eXBlX2dldCksIChxdGRlbXV4X2R1bXBfbXZoZCksCi0JKHF0ZGVtdXhfZHVtcF90a2hkKSwgKHF0ZGVtdXhfZHVtcF9zdHNkKSwgKHF0ZGVtdXhfZHVtcF91bmtub3duKSwKLQkocXRkZW11eF9wYXJzZV90cmFrKSwgKHF0ZGVtdXhfdmlkZW9fY2FwcyksIChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCUEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcyBhbmQgaGFja3MgdG8gZXh0cmFjdCB0aGUgZXNkcyBhdG9tIGFuZAotCXB1dCBpdCBpbnRvIHRoZSBjYXBzLiAgKGJ1ZyAjMTM3NzI0KQotCi0yMDA0LTA0LTE5ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdjb25mL01ha2VmaWxlLmFtOiBGaXggZm9yIG5vbi1HTlUgbWFrZQotCSogZ3N0LWxpYnMvZ3N0L01ha2VmaWxlLmFtOiBDaGFuZ2UgZGlyZWN0b3J5IG9yZGVyIHRvIGhhbmRsZQotCUdzdFBsYXkgbGlua2luZyB3aXRoIGdzdGludGVyZmFjZXMKLQkqIGdzdC1saWJzL2dzdC9hdWRpby9tYWtlX2ZpbHRlcjogbWFrZSB1c2Ugb2YgdHIgcG9ydGFibGUKLQkqIGdzdC1saWJzL2dzdC9wbGF5L01ha2VmaWxlLmFtOiBBZGQgaW50ZW5kZWQgXAotCSogZ3N0LWxpYnMvZ3N0L3h3aW5kb3dsaXN0ZW5lci94d2luZG93bGlzdGVuZXIuYzoKLQkoZ3N0X3h3aW5fc2V0X2NsaXBzKTogU3dpdGNoIHRvIElTTyB2YXJpYWRpYyBtYWNyby4gVXNlIGEKLQlmdW5jdGlvbiBwcm90b3R5cGUgaW5zdGVhZCBvZiB2b2lkICouCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2RlY21hcC5jOiBTd2l0Y2ggdG8gSVNPIHZhcmlhZGljCi0JbWFjcm8uCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NoYWluKTogd3JhcCBOVUxMIGluIEdTVF9FTEVNRU5UX0VSUk9SIGNhbGwKLQkqIGdzdC92aWRlb2ZpbHRlci9tYWtlX2ZpbHRlcjogbWFrZSB1c2Ugb2YgdHIgcG9ydGFibGUKLQkqIHBrZ2NvbmZpZy9NYWtlZmlsZS5hbTogUmVtb3ZlIEdOVSBleHRlbnNpb24gaW4gTWFrZWZpbGUgdGFyZ2V0Ci0KLTIwMDQtMDQtMTkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby91ay5wbzoKLSAgICAgICAgICBBZGRlZCBVa3JhaW5pYW4gdHJhbnNsYXRpb24gKE1heGltIFYuIER6aXVtYW5lbmtvKQotCi0yMDA0LTA0LTE4ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZ3NtL2dzdGdzbWRlYy5jOiAoZ3N0X2dzbWRlY19pbml0KSwgKGdzdF9nc21kZWNfZ2V0Y2FwcyksCi0JKGdzdF9nc21kZWNfbGluayksIChnc3RfZ3NtZGVjX2NoYWluKToKLQkgIEZpeCBjYXBzbmVnbywgc2ltcGxpZnkgY2hhaW4gZnVuY3Rpb24gc2xpZ2h0bHkuCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChxdGRlbXV4X2F1ZGlvX2NhcHMpOgotCSAgQWRkIEdTTS4KLQotMjAwNC0wNC0xOCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfaW5pdCksCi0JKGdzdF93YXZwYXJzZV9kZXN0cm95X3NvdXJjZXBhZCksIChnc3Rfd2F2cGFyc2VfY3JlYXRlX3NvdXJjZXBhZCksCi0JKGdzdF93YXZwYXJzZV9wYXJzZV9mbXQpLCAoZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JICBIYWNrIHRvIG1ha2Ugd2F2cGFyc2Ugd29yayB3aXRoIHNwaWRlciAoYWx3YXlzIC0+IHNvbWV0aW1lcyBwYWQpLgotCSAgRml4ZXMgIzEzNTg2MiAmJiAjMTQwNDExLgotCi0yMDA0LTA0LTE4ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfc3luY19wYXJtcyksCi0JKGdzdF9vc3NlbGVtZW50X3JhdGVfcHJvYmVfY2hlY2spLAotCShnc3Rfb3NzZWxlbWVudF9yYXRlX2NoZWNrX3JhdGUpLCAoZ3N0X29zc2VsZW1lbnRfcmF0ZV9hZGRfcmF0ZSk6Ci0JICBnZXQgcmlkIG9mIFxuIGluIGRlYnVnIG91dHB1dAotCi0yMDA0LTA0LTE3ICBJYWluIDxpYWluQHByZXR0eXBlb3BsZS5vcmc+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jIChnc3Rfd2F2cGFyc2VfbG9vcCk6IEFsbG93IGFsbCBldmVudHMsCi0Jbm90IGp1c3QgRU9TLgotCi0yMDA0LTA0LTE3ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19nZXRfdHlwZSksCi0JKGdzdF9pZDNfdGFnX2NsYXNzX2luaXQpLCAoZ3N0X2lkM190YWdfZ2V0X2NhcHMpLAotCShnc3RfaWQzX3RhZ19hZGRfc3JjX3BhZCksIChnc3RfaWQzX3RhZ19pbml0KSwKLQkoZ3N0X2lkM190YWdfc2V0X3Byb3BlcnR5KSwgKGdzdF9pZDNfdGFnX2RvX2NhcHNfbmVnbyksCi0JKGdzdF9pZDNfdGFnX3NyY19saW5rKSwgKGdzdF9pZDNfdGFnX2NoYWluKSwKLQkoZ3N0X2lkM190YWdfY2hhbmdlX3N0YXRlKSwgKHBsdWdpbl9pbml0KToKLQkgIGRlcHJlY2F0ZSBpZDN0YWcgZWxlbWVudCBhbmQgcmVwbGFjZSB3aXRoIGlkM2RlbXV4L2lkM211eC4KLQkgIGdyZWF0IHNpZGUgZWZmZWN0OiB0aGlzIHVnbHkgZmlsZSBpcyBub3cgZXZlbiB1Z2xpZXIsIHlheSEKLQkqIGV4dC9tYWQvZ3N0bWFkLmg6Ci0JICByZW1vdmUgbm9uLWF2YWlsYWJsZSBmdW5jdGlvbgotCSAgdXBkYXRlIGZvciBuZXcgZ2V0X3R5cGUKLQotMjAwNC0wNC0xNyAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICByZXF1aXJlIG1wZWcyZGVjID49IDAuNC4wCi0KLTIwMDQtMDQtMTcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19nZXRfeHZfc3VwcG9ydCksCi0JKGdzdF94dmltYWdlc2lua194Y29udGV4dF9nZXQpLCAoZ3N0X3h2aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF94dmltYWdlc2lua19zZXRfeHdpbmRvd19pZCk6Ci0JICBjYWxsIEdTVF9FTEVNRU5UX0VSUk9SIHdoZW5ldmVyIGdldF94Y29udGV4dCBmYWlscy4gSW5jbHVkZXMKLQkgIGFzc29ydGVkIGNsZWFudXAgZml4ZXMuCi0KLTIwMDQtMDQtMTYgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmg6IENvbXBpbGUgZml4IGZvciBGcmVlQlNELiAoYnVnICMxNDAyNjgpCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5oOiBzYW1lCi0KLTIwMDQtMDQtMTYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzogKGdzdF9nbm9tZXZmc3Npbmtfb3Blbl9maWxlKToKLSAgICAgICAgICBGaXggR1NUX0VMRU1FTlRfRVJST1Igd2l0aCAoTlVMTCkKLQotMjAwNC0wNC0xNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwc193aXRoX2RhdGEpOgotCSAgQWRkIGRpdlszNDU2XSBhcyBmb3VyY2NzIGZvciBEaXZYIDMgKGZpeGVzICMxNDAxMzcpLgotCi0yMDA0LTA0LTE1ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6Ci0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzX3dpdGhfZGF0YSksCi0JKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzKSwgKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX3RlbXBsYXRlX2NhcHMpLAotCShnc3RfcmlmZl9jcmVhdGVfYXVkaW9fdGVtcGxhdGVfY2Fwcyk6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmg6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzoKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX3ZpZHNfd2l0aF9kYXRhKSwgKGdzdF9yaWZmX3JlYWRfc3RyZl92aWRzKToKLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5oOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9hZGRfc3RyZWFtKToKLQkgIEFkZCBNUyBSTEUgc3VwcG9ydC4gSSBhZGRlZCBzb21lIGZ1bmN0aW9ucyB0byByZWFkIG91dCBzdHJmIGNodW5rcwotCSAgaW50byBzdHJmIGNodW5rcyBhbmQgdGhlIGRhdGEgYmVoaW5kIGl0LiBUaGlzIGlzIHVzdWFsbHkgY29sb3IKLQkgIHBhbGV0dGVzIChhcyBpbiBSTEUsIGJ1dCBhbHNvIGluIDgtYml0IFJHQikuIEFsc28gdXNlIHRob3NlIGR1cmluZwotCSAgY2FwcyBjcmVhdGlvbi4gTGFzdGx5LCBhZGQgQURQQ00gKHNpbWlsYXIgdG8gd2F2cGFyc2UgLSB3aGljaAotCSAgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmlmZmxpYiBiYXNlZCkuCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzogKGdzdF9tYXRyb3NrYV9kZW11eF9jbGFzc19pbml0KSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X2luaXQpLCAoZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0KToKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oOgotCSAgUmVtb3ZlIHBsYWNlaG9sZGVycyBmb3Igc29tZSBwcmVoaXN0b3JpYyB0YWdnaW5nIHN5c3RlbS4gRGlkbid0IGFkZAotCSAgc3VwcG9ydCBmb3IgYW55IHRhZyBzeXN0ZW0gcmVhbGx5IGFueXdheS4KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzoKLQkgIEFkZCBzdXBwb3J0IGZvciBhdWRpby94LW00YSAoTVBFRy00KSB0aHJvdWdoIHNwaWRlci4KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3BhcnNlX2ZtdCksCi0JKGdzdF93YXZwYXJzZV9sb29wKToKLQkgIEFEUENNIHN1cHBvcnQgKCMxMzU4NjIpLiBJbmNyZWFzZSBtYXguIGJ1ZmZlciBzaXplIGJlY2F1c2Ugd2UKLQkgIGNhbm5vdCBzcGxpdCBidWZmZXJzIGZvciBBRFBDTSAoc2NyZXdzIHJlZmVyZW5jZXMpIGFuZCBJJ3ZlIHNlZW4KLQkgIGZpbGVzIHdpdGggMjA0OCBieXRlIGNodW5rcy4gNDA5NiBzZWVtcyBzYWZlIGZvciBub3cuCi0KLTIwMDQtMDQtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogYnVtcCBuYW5vIHRvIDEKLQotPT09IHJlbGVhc2UgMC44LjEgPT09Ci0KLTIwMDQtMDQtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogcmVsZWFzaW5nIDAuOC4xLCAiQ29tZm9ydGluZyBTb3VuZHMiCi0KLTIwMDQtMDQtMTQgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzogKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzKToKLQkgIEZpeCB0eXBvIGluIGRpdnh2ZXJzaW9uICgzIGluc3RlYWQgb2YgNCBmb3IgIkRJVlgiIGZvdXJjYykuCi0JICBGaXhlcyAjMTQwMDU4Ci0KLTIwMDQtMDQtMTQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6IChnc3RfZHZkX2RlbXV4X3BsdWdpbl9pbml0KToKLSAgICAgICAgICBsb3dlciByYW5rIG9mIGR2ZGRlbXV4IHNvIHRoYXQgaXQncyBub3QgdXNlZCBmb3IgbXBlZyBwbGF5YmFjay4KLQotMjAwNC0wNC0xNCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBzYXZlIGxpYnMgY29ycmVjdGx5IHdoZW4gY2hlY2tpbmcgbWFkCi0KLTIwMDQtMDQtMTQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChwbHVnaW5faW5pdCk6Ci0gICAgICAgICAgbG93ZXIgcmFuayBvZiBpZDN0YWcgYXMgcHJvcG9zZWQgYnkgQmVuamFtaW4uICBGaXhlcyAjMTM5OTI2LgotCi0yMDA0LTA0LTEzICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNDogQ2FsbCAtY29uZmlnIHNjcmlwdHMgd2l0aAotCS0tcGx1Z2luLWxpYnMgaWYgaXQgaXMgc3VwcG9ydGVkLgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfdmlkc2lua2Nvbm5lY3QpOiBzZXF1ZW5jZXMgb2YKLQlKUEVHIGltYWdlcyBhcmUgaW1hZ2UvanBlZy4KLQkqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Zy9uZWdvdGlhdGlvbi5jOiAoZ3N0X25lZ290aWF0aW9uX2NsYXNzX2luaXQpLAotCShnc3RfbmVnb3RpYXRpb25fZ2V0Y2FwcyksIChnc3RfbmVnb3RpYXRpb25fcGFkX2xpbmspLAotCShnc3RfbmVnb3RpYXRpb25fdXBkYXRlX2NhcHMpLCAoZ3N0X25lZ290aWF0aW9uX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9uZWdvdGlhdGlvbl9wbHVnaW5faW5pdCk6IEFkZCBhIHByb3BlcnR5IHRoYXQgYWN0cyBsaWtlCi0JZmlsdGVyIGNhcHMuCi0JKiB0ZXN0c3VpdGUvZ3N0LWxpbnQ6ICBNb3ZlIGxpY2Vuc2UgY2hlY2tpbmcgdG8gYmUgYSBzdGFuZGFyZAotCXRlc3QuCi0KLTIwMDQtMDQtMTMgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9yZXNldCk6IEZpeCBtZW1sZWFrLgotCXBhdGNoIGZyb20gU2ViYXN0aWVuIENvdGUgKGJ1ZyAjMTM5OTU4KQotCi0yMDA0LTA0LTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleGFtcGxlcy9nc3RwbGF5L01ha2VmaWxlLmFtOgotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKG1haW4pOgotICAgICAgICAgIG1ha2UgdGhlIGNvbW1hbmRsaW5lIHBsYXllciBleGFtcGxlIHVzZSBnY29uZiBzZXR0aW5ncwotCi0yMDA0LTA0LTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOiAoZ3N0X2NhY2FzaW5rX2NsYXNzX2luaXQpLAotCShnc3RfY2FjYXNpbmtfc2lua2Nvbm5lY3QpLCAoZ3N0X2NhY2FzaW5rX2luaXQpLAotCShnc3RfY2FjYXNpbmtfY2hhaW4pLCAoZ3N0X2NhY2FzaW5rX29wZW4pLCAoZ3N0X2NhY2FzaW5rX2Nsb3NlKToKLSAgICAgICAgICBpbml0L2VuZCBsaWJyYXJ5IGR1cmluZyBzdGF0ZSB0cmFuc2l0aW9uLCBub3Qgb2JqZWN0Ci0gICAgICAgICAgY3JlYXRpb24vZGlzcG9zYWwuICBnZXQgcmlkIG9mIGN1c3RvbSBkaXNwb3NlIGhhbmRsZXIuCi0KLQotMjAwNC0wNC0xMiAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAZ25vbWUub3JnPgotCi0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogcy9sc3RhdC9zdGF0LyBmcm9tIGZyZWVCU0QsIHNpbmNlIGl0IGNhbgotCWJlIGEgc3ltbGluawotCi0yMDA0LTA0LTExICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9kYXRhKToKLQkgIEhhbmRsZSBKVU5LIGNodW5rcyBpbnNpZGUgZGF0YSBzZWN0aW9uLiBQcmV2ZW50cyB3YXJuaW5ncy4KLQotMjAwNC0wNC0xMSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOiAoZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX2NhcHMpLAotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fdGVtcGxhdGVfY2Fwcyk6Ci0JICBBZGQgTVMgdmlkZW8gdjEuCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IChnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEpOgotCSAgQWRkIHN1cHBvcnQgZm9yICJyZWMtbGlzdCIgY2h1bmtzLgotCi0yMDA0LTA0LTExICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6IChnc3RfcmlmZl9jcmVhdGVfYXVkaW9fY2Fwcyk6Ci0JICBGaXggYW5vdGhlciBjb2RlY25hbWUgbWlzbWF0Y2guCi0KLTIwMDQtMDQtMTEgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtbWVkaWEuYzogKGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzKToKLQkgIEZpeCBkaXZ4IGNhcHMgbWlzbWF0Y2ggYW5kIG1vdmUgZnJvbSB2aWRlby94LWpwZWcgdG8gaW1hZ2UvanBlZwotCSAgc28gdGhhdCBNSlBFRyBwbGF5cyBiYWNrLgotCi0yMDA0LTA0LTEwICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuYzogKGdzdF9tcDF2aWRlb3BhcnNlX2luaXQpLAotCShnc3RfbXAxdmlkZW9wYXJzZV9yZWFsX2NoYWluKSwgKGdzdF9tcDF2aWRlb3BhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuaDoKLQkgIEZpeCBmb3Igc29tZSBzbGlnaHQgbWlzLWN1dHMgaW4gYnVmZmVyIHBhcnNpbmcsIGFuZCBmb3Igc29tZQotCSAgcG90ZW50aWFsIG92ZXJmbG93cyBvciBmYXVsdHMtY2F1c2Vycy4gQWRkcyBkaXNjb250cy4gQWxzbyBmaXhlcwotCSAgIzEzOTEwNSB3aGlsZSB3ZSdyZSBhdCBpdC4KLQotMjAwNC0wNC0xMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSogc3lzL3Y0bDIvZ3N0djRsMmVsZW1lbnQuaDoKLQkgIFdvcmthcm91bmQgZm9yIG1pc3Npbmcgc3RydWN0IHY0bDJfYnVmZmVyIGRlY2xhcmF0aW9uIGluIFN1c2UgOQotCSAgYW5kIE1hbmRyYWtlIDEwIGxpbnV4L3ZpZGVvZGV2Mi5oIGhlYWRlciBmaWxlICgjMTM1OTE5KS4KLQotMjAwNC0wNC0xMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc2luay5jOiAoZ3N0X2dub21ldmZzc2lua19vcGVuX2ZpbGUpOgotCSAgQmFpbCBvdXQgaWYgbm8gZmlsZW5hbWUgd2FzIGdpdmVuLgotCi0yMDA0LTA0LTEwICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY192NGwyZm91cmNjX3RvX2NhcHMpLAotCShnc3RfdjRsMl9mb3VyY2NfZnJvbV9zdHJ1Y3R1cmUpOgotCSAgQWRkIFk0MUIvWTQyQiBZVVYgZm9ybWF0cyAoc2VlICMxMjU3MzIpLCBmaXggWTQxUCAod2FzIHR5cG8nZWQgdG8KLQkgIFk0MUIgc29tZXdoZXJlKS4KLQotMjAwNC0wNC0wOSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzaW5rLmM6Ci0JKF9nc3RfYm9vbGVhbl9hbGxvd19vdmVyd3JpdGVfYWNjdW11bGF0b3IpLAotCShnc3RfZ25vbWV2ZnNzaW5rX2NsYXNzX2luaXQpOgotCSAgZml4IGVyYXNlIHNpZ25hbCAtIGlmIGFueSBoYW5kbGVyIHJldHVybnMgZmFsc2UgdGhlIGZpbGUgd2lsbCBub3QgYmUKLQkgIG92ZXJ3cml0dGVuLiBJZiBubyBoYW5kbGVyIGlzIGNvbm5lY3RlZCwgdGhlIGZpbGUgd2lsbCBub3QgYmUKLQkgIG92ZXJ3cml0dGVuIGVpdGhlci4KLQkgIHJlbmFtZWQgc2lnbmFsIHRvICJhbGxvdy1vdmVyd3JpdGUiCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAodGFnX2xpc3RfdG9faWQzX3RhZ19mb3JlYWNoKToKLQkgIGZyZWUgc3RyaW5nIHdoZW4gYWRkaW5nIGl0IHRvIElEMyBmYWlsZWQKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2V2ZW50KToKLQkgIHVucmVmIGV2ZW50IHdoZW4gZG9uZQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKF9maXhhdGVfY2Fwc190b19pbnQpOgotCSAgZnJlZSBjYXBzCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzoKLQkobXBlZ192aWRlb19zdHJlYW1fdHlwZV9maW5kKToKLQkgIGZpeCBpbnZhbGlkIHJlYWQKLQotMjAwNC0wNC0wOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX3JlZ2lzdGVyKTogQ2hhbmdlIHJhbmsgdG8gUFJJTUFSWS4KLQotMjAwNC0wNC0wOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvY29sb3JzcGFjZS9nc3Rjb2xvcnNwYWNlLmM6IERvbid0IGFkdmVydGlzZSBhIGNvbnZlcnNpb24KLQl3ZSBkb24ndCBzdXBwb3J0IChidWcgIzEzOTUzMikKLQotMjAwNC0wNC0wNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaGFuZGxlX2V2ZW50KSwKLQkoZ3N0X21hZF9jaGVja19jYXBzX3Jlc2V0KSwgKGdzdF9tYWRfY2hhaW4pLAotCShnc3RfbWFkX2NoYW5nZV9zdGF0ZSk6Ci0gICAgICAgICAgb25seSBzZXQgZXhwbGljaXQgY2FwcyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBzZXQgYmVmb3JlIGZvcgotICAgICAgICAgIHRoaXMgc3RyZWFtLiAgTVBFRy1hdWRpbyBzYW1wbGUgcmF0ZS9jaGFubmVscyBhcmVuJ3QgYWxsb3dlZAotICAgICAgICAgIHRvIGNoYW5nZSBpbi1zdHJlYW0uCi0gICAgICAgICAgRml4ZXMgIzEzOTM4MgotCi0yMDA0LTA0LTA2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzaW5rLmM6IChnc3RfZ25vbWV2ZnNzaW5rX2Jhc2VfaW5pdCksCi0JKF9nc3RfYm9vbGVhbl9kaWRfc29tZXRoaW5nX2FjY3VtdWxhdG9yKSwKLQkoZ3N0X2dub21ldmZzc2lua19jbGFzc19pbml0KSwgKGdzdF9nbm9tZXZmc3NpbmtfZGlzcG9zZSksCi0JKGdzdF9nbm9tZXZmc3NpbmtfaW5pdCksIChnc3RfZ25vbWV2ZnNzaW5rX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9nbm9tZXZmc3NpbmtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9nbm9tZXZmc3Npbmtfb3Blbl9maWxlKSwKLQkoZ3N0X2dub21ldmZzc2lua19jbG9zZV9maWxlKSwgKGdzdF9nbm9tZXZmc3NpbmtfY2hhaW4pLAotCShnc3RfZ25vbWV2ZnNzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICBGaXggZXJhc2Ugc2lnbmFsLiBEb24ndCBlcmFzZSBieSBkZWZhdWx0LiBSZW1vdmUgaGFuZG9mZiBzaWduYWwuCi0JICBSZW1vdmUgZXJhc2UgcHJvcGVydHkuIERvbid0IHNlZ2ZhdWx0LiBHZW5lcmFsIGNsZWFudXAuCi0KLTIwMDQtMDQtMDcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2djb25mL3Rlc3QtZ2NvbmYuYzogKG1haW4pOgotCSAgYWRkIG1pc3NpbmcgZ3N0X2luaXQKLQotMjAwNC0wNC0wNyAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogKGdzdF9nbm9tZXZmc3NyY19kaXNwb3NlKToKLQkgIGZyZWUgdGhlIG11dGV4ZXMsIHRvbwotCi0yMDA0LTA0LTA3ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NyYy5jOiAoZ3N0X2dub21ldmZzc3JjX2Rpc3Bvc2UpOgotCSAgYWN0dWFsbHkgZnJlZSB0aGUgVVJJIHN0cmluZwotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX3NyY19ldmVudCk6Ci0JICBjb21wdXRlIG9mZnNldCBjb3JyZWN0bHkgd2hlbiBwYXNzaW5nIGRpc2NvbnQgZXZlbnRzCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfaGFuZGxlX2V2ZW50KToKLQkgIGRvbid0IGxlYWsgZGlzY29udCBldmVudHMKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF92aWRlb19jYXBzKToKLQkgIGFkZCBzb21lIG1pc3NpbmcgYnJlYWtzIHNvIGNhcHMgYXJlbid0IGNvcGllZCByYW5kb21seQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6IChnc3RfbXBlZ19kZW11eF9nZXRfdmlkZW9fc3RyZWFtKToKLQkgIGlmIHdlIHJlYWxsb2MgbWVtb3J5LCB3ZSBiZXR0ZXIgdXNlIGl0Ci0KLTIwMDQtMDQtMDYgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKG5vcm1hbF9zZWVrKToKLQkgIGZpeCBHU1RfRk9STUFUX1RJTUUgdXNhZ2UKLQotMjAwNC0wNC0wNSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQva2lvL2tpb3NyYy5jcHA6ICBVbmRlZmluZSBLREVfREVQUkVDQVRFRCBzbyB3ZSBjYW4gdXNlCi0JYSBkZXByZWNhdGVkIGZ1bmN0aW9uIChoYWNrISkKLQotMjAwNC0wNC0wNSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvZXNkL2VzZG1vbi5jOiAoZ3N0X2VzZG1vbl9nZXQpOgotCSAgZml4IG5vbnRlcm1pbmF0ZWQgdmFyYXJnIGFuZCBtZW1sZWFrCi0KLTIwMDQtMDQtMDUgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2xhZHNwYS9nc3RsYWRzcGEuYzogKGdzdF9sYWRzcGFfY2xhc3NfaW5pdCksCi0JKGdzdF9sYWRzcGFfaW5pdCksIChnc3RfbGFkc3BhX2ZvcmNlX3NyY19jYXBzKSwKLQkoZ3N0X2xhZHNwYV9zZXRfcHJvcGVydHkpLCAoZ3N0X2xhZHNwYV9nZXRfcHJvcGVydHkpLAotCShnc3RfbGFkc3BhX2luc3RhbnRpYXRlKSwgKGdzdF9sYWRzcGFfYWN0aXZhdGUpLAotCShnc3RfbGFkc3BhX2RlYWN0aXZhdGUpLCAoZ3N0X2xhZHNwYV9sb29wKSwgKGdzdF9sYWRzcGFfY2hhaW4pOgotCSAgY2xlYW4gdXAgZGVidWdnaW5nCi0KLTIwMDQtMDQtMDUgIFN0ZWZhbiBLb3N0IDxrb3N0QGltbi5odHdrLWxlaXB6aWcuZGU+Ci0KLQlyZXZpZXdlZCBieSBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9sYWRzcGEvZ3N0bGFkc3BhLmM6IChnc3RfbGFkc3BhX2NsYXNzX2luaXQpOgotCSAgY2hlY2sgZm9yIGJyb2tlbiBMQURTUEEgcGFyYW1ldGVycyAoZml4ZXMgIzEzODYzNSkKLQotMjAwNC0wNC0wNSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfZ2V0Y2Fwcyk6Ci0JICBhZHZlcnRpc2UgYnVmZmVyLWZyYW1lcyBjb3JyZWN0bHkgb24gc2lua3BhZHMKLQotMjAwNC0wNC0wNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfZ2V0X3R5cGUpLCAoZ3N0X21hZF9sYXllcl9nZXRfdHlwZSksCi0JKGdzdF9tYWRfbW9kZV9nZXRfdHlwZSksIChnc3RfbWFkX2VtcGhhc2lzX2dldF90eXBlKSwKLQkoZ3N0X21hZF9nZXRfZXZlbnRfbWFza3MpLCAoZ3N0X21hZF9nZXRfcXVlcnlfdHlwZXMpLCAoaW5kZXhfc2VlayksCi0JKG5vcm1hbF9zZWVrKSwgKGdzdF9tYWRfc3JjX2V2ZW50KSwgKGdzdF9tYWRfaGFuZGxlX2V2ZW50KSwKLQkoZ3N0X21hZF9jaGVja19jYXBzX3Jlc2V0KSwgKGdzdF9tYWRfY2hhaW4pOgotICAgICAgICBhZGQgbW9yZSBkZWJ1Z2dpbmcsIG9ubHkgcmVzZXQgY2FwcyB3aGVuIHdlJ3JlIG5vdCBpbiBlcnJvciBzdGF0ZQotCi0yMDA0LTA0LTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvbWFkL2dzdG1hZC5jOiBhZGQgZGVidWdnaW5nIGNhdGVnb3J5LCBjb21tZW50ICsgY2xlYW51cHMKLQotMjAwNC0wNC0wNSAgSnVsaW8gTS4gTWVyaW5vIFZpZGFsICA8am1tdkBtZW50YS5uZXQ+Ci0KLQlyZXZpZXdlZCBieSBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIGZpeCA9PSBpbiB0ZXN0KDEpIG9wZXJhdG9yCi0KLTIwMDQtMDQtMDUgIEp1bGlvIE0uIE1lcmlubyBWaWRhbCAgPGptbXZAbWVudGEubmV0PgotCi0JcmV2aWV3ZWQgYnkgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICBmaXggLS1leHBvcnQtc3ltYmxvcy1yZWdleCB0byBhIHdvcmtpbmcgcmVnZXguCi0KLTIwMDQtMDQtMDQgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogc3lzL29zcy8uY3ZzaWdub3JlOgotCSAgYWRkIGZvciBvc3NfcHJvYmUKLQotMjAwNC0wNC0wMyAgVGltLVBoaWxsaXAgTcO8bGxlciA8dC5pLm1AemVuLmNvLnVrPgotCi0JcmV2aWV3ZWQgYnkgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfaGFuZGxlX2V2ZW50KToKLQkgIGFkZCBtaXNzaW5nICduZXdfbWVkaWEnIGFyZ3VtZW50IChmaXhlcyAjMTM4MTY4KQotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6Ci0JKGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCk6Ci0JICBhZGQgdmFyYXJnIHRlcm1pbmF0b3IgKGZpeGVzICMxMzgxNjkpCi0KLTIwMDQtMDQtMDIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW06ICBNYWtlIHN1cmUgZ3N0Z2RrYW5pbWF0aW9uLmggaXMKLQlkaXN0ZWQgKGJ1ZyAjMTM4OTE0KQotCi0yMDA0LTA0LTAxICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9hbHNhX2Nsb3NlX2F1ZGlvKToKLQkgIGhhbmRsZSBjYXNlIGJldHRlciB3aGVyZSBhIHNvdW5kY2FyZCBjYW4ndCBwYXVzZQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOgotCSAgZG9uJ3QgY3Jhc2ggd2hlbiB3ZSBnZXQgZXZlbnRzIGJ1dCBkb24ndCBoYXZlIHBhZHMgeWV0Ci0KLTIwMDQtMDQtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfcHJvYmVfY2Fwcyk6Ci0gICAgICAgICAgdGhyb3cgYW4gZXJyb3IgaWYgd2UgY291bGRuJ3QgcHJvYmUgYW55IGNhcHMuCi0KLTIwMDQtMDQtMDEgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L2R2ZG5hdi9nc3QtZHZkOgotCUFkZCBhIHJlYWxseSBzaW1wbGUgc2FtcGxlIERWRCBwbGF5ZXIKLQotMjAwNC0wNC0wMSAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19nZXRfdHlwZSksIChnc3RfYTUyZGVjX2luaXQpLAotCShnc3RfYTUyZGVjX3B1c2gpLCAoZ3N0X2E1MmRlY19oYW5kbGVfZXZlbnQpLAotCShnc3RfYTUyZGVjX3VwZGF0ZV9zdHJlYW1pbmZvKSwgKGdzdF9hNTJkZWNfbG9vcCksCi0JKGdzdF9hNTJkZWNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC9hNTJkZWMvZ3N0YTUyZGVjLmg6Ci0JICBVc2UgYSBkZWJ1ZyBjYXRlZ29yeSwgT3V0cHV0IHRpbWVzdGFtcHMgY29ycmVjdGx5Ci0JICBFbWl0IHRhZyBpbmZvLCBIYW5kbGUgZXZlbnRzLCB0ZWxsIGxpYmE1MmRlYyBhYm91dCBjcHUKLQkgIGNhcGFiaWxpdGllcyBzbyBpdCBjYW4gdXNlIE1NWCBldGMuCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19sb29wKSwgKGdzdF9kdmRlY19jaGFuZ2Vfc3RhdGUpOgotCSAgRml4IGEgY3Jhc2hlciBhY2Nlc3NpbmcgaW52YWxpZCBtZW1vcnkKLQkqIGV4dC9kdmRuYXYvZHZkbmF2c3JjLmM6IChkdmRuYXZzcmNfaW5pdCksCi0JKGR2ZG5hdnNyY191cGRhdGVfaGlnaGxpZ2h0KSwgKGR2ZG5hdnNyY19sb29wKSwKLQkoZHZkbmF2c3JjX2dldF9ldmVudF9tYXNrKSwgKGR2ZG5hdl9oYW5kbGVfbmF2aWdhdGlvbl9ldmVudCksCi0JKGR2ZG5hdnNyY19ldmVudCksIChkdmRuYXZzcmNfZ2V0X2Zvcm1hdHMpLCAoZHZkbmF2c3JjX2NvbnZlcnQpLAotCShkdmRuYXZzcmNfcXVlcnkpOgotCSAgU29tZSBzdXBwb3J0IGZvciBieXRlLWZvcm1hdCBzZWVraW5nLgotCSAgU21hbGwgZml4ZXMgZm9yIHN0aWxsIGZyYW1lcyBhbmQgbWVudSBidXR0b24gb3ZlcmxheXMKLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOiAoZ3N0X21wZWcyZGVjX2dldF90eXBlKSwKLQkoZ3N0X21wZWcyZGVjX2FsbG9jX2J1ZmZlcik6Ci0JICBVc2UgYSBkZWJ1ZyBjYXRlZ29yeS4gQWRqdXN0IHRoZSByZXBvcnQgbGV2ZWwgb2Ygc2V2ZXJhbCBpdGVtcyB0bwotCSAgTE9HLiBDYWxsIG1wZWcyX2N1c3RvbV9mYnVmIHRvIG1hcmsgb3VyIGJ1ZmZlcnMgYXMgJ2N1c3RvbSBidWZmZXJzJwotCSAgc28gaXQgZG9lc24ndCBsb3NlIHRoZSBHc3RCdWZmZXIgcG9pbnRlcgotCSogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlYnVnL2dzdGRlYnVnLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvZGVidWcvZ3N0bmF2c2Vlay5jOiAoZ3N0X25hdnNlZWtfZ2V0X3R5cGUpLAotCShnc3RfbmF2c2Vla19iYXNlX2luaXQpLCAoZ3N0X25hdnNlZWtfY2xhc3NfaW5pdCksCi0JKGdzdF9uYXZzZWVrX2luaXQpLCAoZ3N0X25hdnNlZWtfc2VlayksCi0JKGdzdF9uYXZzZWVrX2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X25hdnNlZWtfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X25hdnNlZWtfZ2V0X3Byb3BlcnR5KSwgKGdzdF9uYXZzZWVrX2NoYWluKSwKLQkoZ3N0X25hdnNlZWtfcGx1Z2luX2luaXQpOgotCSogZ3N0L2RlYnVnL2dzdG5hdnNlZWsuaDoKLQkgIEFkZCB0aGUgbmF2c2VlayBkZWJ1ZyBlbGVtZW50IGZvciBzZWVraW5nIGJhY2sgYW5kIGZvcnRoIGluIGEKLQkgIHZpZGVvIHN0cmVhbSB1c2luZyBhcnJvdyBrZXlzLgotCSogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOiAoZ3N0X21wZWcyc3VidF9nZXRfdHlwZSksCi0JKGdzdF9tcGVnMnN1YnRfYmFzZV9pbml0KSwgKGdzdF9tcGVnMnN1YnRfY2xhc3NfaW5pdCksCi0JKGdzdF9tcGVnMnN1YnRfaW5pdCksIChnc3RfbXBlZzJzdWJ0X2ZpbmFsaXplKSwKLQkoZ3N0X21wZWcyc3VidF9nZXRjYXBzX3ZpZGVvKSwgKGdzdF9tcGVnMnN1YnRfbGlua192aWRlbyksCi0JKGdzdF9tcGVnMnN1YnRfaGFuZGxlX3ZpZGVvKSwgKGdzdF9tcGVnMnN1YnRfc3JjX2V2ZW50KSwKLQkoZ3N0X21wZWcyc3VidF9wYXJzZV9oZWFkZXIpLCAoZ3N0X2dldF9uaWJibGUpLAotCShnc3Rfc2V0dXBfcGFsZXR0ZSksIChnc3RfZ2V0X3JsZV9jb2RlKSwgKGdzdF9kcmF3X3JsZV9saW5lKSwKLQkoZ3N0X21lcmdlX3V2X2RhdGEpLCAoZ3N0X21wZWcyc3VidF9tZXJnZV90aXRsZSksCi0JKGdzdF91cGRhdGVfc3RpbGxfZnJhbWUpLCAoZ3N0X21wZWcyc3VidF9oYW5kbGVfc3VidGl0bGUpLAotCShnc3RfbXBlZzJzdWJ0X2hhbmRsZV9kdmRfZXZlbnQpLCAoZ3N0X21wZWcyc3VidF9sb29wKToKLQkqIGdzdC9tcGVnMnN1Yi9nc3RtcGVnMnN1YnQuaDoKLQkgIFByZXR0eSBtdWNoIGEgY29tcGxldGUgcmV3cml0ZS4gTm93IGEgbG9vcGJhc2VkIGVsZW1lbnQuIE1heSBzdGlsbAotCSAgcmVxdWlyZSB3b3JrIHRvIHByb3Blcmx5IHN5bmNocm9uaXNlIHN1YnRpdGxlIGJ1ZmZlcnMuCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5jOiAoZ3N0X2R2ZF9kZW11eF9wcm9jZXNzX3ByaXZhdGUpLAotCShnc3RfZHZkX2RlbXV4X3NlbmRfc3ViYnVmZmVyKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfc2VuZF9zdWJidWZmZXIpOgotCSAgRG9uJ3QgYXR0ZW1wdCB0byBjcmVhdGUgc3ViYnVmZmVycyBvZiBzaXplIDAKLQkgIFJlZHVjZSBhIGNvdXBsZSBvZiBlcnJvciBvdXRwdXRzIHRvIHdhcm5pbmdzLgotCSogZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYzogKGdzdF95NG1lbmNvZGVfc2lua2Nvbm5lY3QpLAotCShnc3RfeTRtZW5jb2RlX2NoYWluKToKLQlPdXRwdXQgdGhlIHk0bSBmcmFtZSBoZWFkZXIgY29ycmVjdGx5LgotCi0yMDA0LTA0LTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvYWRkZXIvZ3N0YWRkZXIuYzogKGdzdF9hZGRlcl9nZXRfdHlwZSksIChnc3RfYWRkZXJfbG9vcCk6Ci0gICAgICAgICAgdGhyb3cgZXJyb3JzIGluc3RlYWQgb2YgYWxsb3dpbmcgU0lHRlBFCi0KLTIwMDQtMDQtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9nY29uZi9nY29uZi5jOiAoZ3N0X2djb25mX2dldF9zdHJpbmcpLAotCShnc3RfZ2NvbmZfcmVuZGVyX2Jpbl9mcm9tX2tleSk6Ci0gICAgICAgICAgbGVhayBwbHVnZ2luZyBhbmQgc3R5bGUgZml4aW5nCi0KLTIwMDQtMDMtMzEgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOiAoZ3N0X2F1ZGlvc2NhbGVfZXhwYW5kX3ZhbHVlKSwKLQkoZ3N0X2F1ZGlvc2NhbGVfZ2V0Y2Fwcyk6IEZpeCBnZXRjYXBzIHRvIGV4cGFuZCBhbmQgdW5pb24gbGlzdHMuCi0JKGJ1ZyAjMTM4MjI1KQotCSogZ3N0L2RlYnVnL01ha2VmaWxlLmFtOgotCSogZ3N0L2RlYnVnL2JyZWFrbXlkYXRhLmM6IChnc3RfYnJlYWtfbXlfZGF0YV9wbHVnaW5faW5pdCk6Ci0JKiBnc3QvZGVidWcvZ3N0ZGVidWcuYzogKHBsdWdpbl9pbml0KTogIE1lcmdlIGVsZW1lbnRzIGludG8gb25lCi0JcGx1Z2luLgotCSogZ3N0L2RlYnVnL25lZ290aWF0aW9uLmM6IChnc3RfZ3N0X25lZ290aWF0aW9uX2dldF90eXBlKSwKLQkoZ3N0X25lZ290aWF0aW9uX2Jhc2VfaW5pdCksIChnc3RfbmVnb3RpYXRpb25fY2xhc3NfaW5pdCksCi0JKGdzdF9uZWdvdGlhdGlvbl9pbml0KSwgKGdzdF9uZWdvdGlhdGlvbl9nZXRjYXBzKSwKLQkoZ3N0X25lZ290aWF0aW9uX3BhZF9saW5rKSwgKGdzdF9uZWdvdGlhdGlvbl9jaGFpbiksCi0JKGdzdF9uZWdvdGlhdGlvbl9zZXRfcHJvcGVydHkpLCAoZ3N0X25lZ290aWF0aW9uX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9uZWdvdGlhdGlvbl9wbHVnaW5faW5pdCk6ICBOZXcgZWxlbWVudCB0byB0YWxrIGFib3V0IHJhbmRvbQotCW5lZ290aWF0aW9uIHRoaW5ncyBoYXBwZW5pbmcgaW4gYSBwaXBlbGluZS4KLQotMjAwNC0wMy0zMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L2FkZGVyL2dzdGFkZGVyLmM6IChnc3RfYWRkZXJfZ2V0X3R5cGUpLCAoZ3N0X2FkZGVyX2xvb3ApOgotICAgICAgICAgIGZpeCBpbnRlZ2VyIGFkZGl0aW9uIHdpdGggaGVscCBvZiBTdGVmYW4gS29zdAotCi0yMDA0LTAzLTMxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9ubC5wbzogdXBkYXRlZCBEdXRjaCB0cmFuc2xhdGlvbiAoRWxyb3MgQ3lyaWF0YW4pCi0KLTIwMDQtMDMtMzAgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChnc3RfbXBlZzJkZWNfYWxsb2NfYnVmZmVyKSwKLQkoZ3N0X21wZWcyZGVjX25lZ290aWF0ZV9mb3JtYXQpOiAgSGFuZGxlIFk0MkItZm9ybWF0IE1QRUcKLQl2aWRlbywgcGF0Y2ggZnJvbSBNYXR0aGV3LlNwZW5jZXJAZXUuc29ueS5jb20gKE1hdHRoZXcgU3BlbmNlcikKLQkoYnVnICMxMzc1MDQpCi0JKiBleHQvbXBlZzJkZWMvZ3N0bXBlZzJkZWMuaDoKLQotMjAwNC0wMy0zMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbTogUmVtb3ZlIHNwdXJpb3VzIHJ1bGVzLiAoYnVnICMxMzY1MjcpCi0KLTIwMDQtMDMtMzAgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC1leHQtbS5tOiAgQXBwbGllZCBwYXRjaCBmcm9tIGdub21lQGZseW4ub3JnIChXLgotCU1pY2hhZWwgUGV0dWxsbykgdG8gaGFuZGxlIC5tb3YKLQotMjAwNC0wMy0zMCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzogKGdzdF9vc3NlbGVtZW50X3Byb2JlX2NhcHMpLAotCShnc3Rfb3NzZWxlbWVudF9yYXRlX2NoZWNrX3JhdGUpOgotCSAgcHJvYmUgY2FwcyBjb3JyZWN0bHkgZm9yIHNvdW5kIGNhcmRzIHRoYXQgb25seSBzdXBwb3J0IG9uZSBmb3JtYXQKLQotMjAwNC0wMy0zMCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQva2lvL2tpb3NyYy5jcHA6IChwcm9jZXNzX2V2ZW50cyk6Ci0JICB1cGRhdGUgaGFuZGxpbmcgZXZlbnQgcHJvY2Vzc2luZyBpZiBpbnNpZGUgS0RFIC0gdW50ZXN0ZWQKLQotMjAwNC0wMy0yOSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvaGVybWVzL2dzdGhlcm1lc2NvbG9yc3BhY2UuYzogKHBsdWdpbl9pbml0KTogZGVjcmVhc2UgcmFuawotCWJ5IDIgdG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIGNvbG9yc3BhY2VzLgotCSogZXh0L3BhbmdvL2dzdHRleHRvdmVybGF5LmM6IChwbHVnaW5faW5pdCk6IGNoYW5nZSByYW5rIHRvIE5PTkUKLQkqIGdzdC9jb2xvcnNwYWNlL2dzdGNvbG9yc3BhY2UuYzogKHBsdWdpbl9pbml0KTogZGVjcmVhc2UgcmFuayBieQotCW9uZSB0byBub3QgaW50ZXJmZXJlIHdpdGggZmZtcGVnX2NvbG9yc3BhY2UuCi0KLTIwMDQtMDMtMjkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfZml4YXRlKTogRG9uJ3QgZml4YXRlIGZpZWxkcyB0aGF0Ci0JYXJlbid0IGluIHRoZSBjYXBzLgotCSogZ3N0L3NpbmUvZ3N0c2luZXNyYy5jOiBjaGFuZ2UgcmF0ZSBjYXBzIHRvIFsxLE1BWF0KLQkqIGdzdC92aWRlb2Nyb3AvZ3N0dmlkZW9jcm9wLmM6IChwbHVnaW5faW5pdCk6IENoYW5nZSByYW5rIHRvIE5PTkUuCi0KLTIwMDQtMDMtMzAgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1tZWRpYS5jOgotCSAgZmFpbCBvbiBlcnJvciwgZG9uJ3QgdHJ5IHRvIHNldCBzdHVmZiBvbiBOVUxMIGNhcHMKLQotMjAwNC0wMy0zMCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQva2lvL01ha2VmaWxlLmFtOgotCSogZXh0L2tpby9raW9yZWNlaXZlci5jcHA6Ci0JKiBleHQva2lvL2tpb3JlY2VpdmVyLmg6Ci0JKiBleHQva2lvL2tpb3NyYy5jcHA6Ci0JKiBleHQva2lvL2tpb3NyYy5oOgotCSAgYWRkIGV4cGVyaW1lbnRhbCBraW9zcmMgcGx1Z2luCi0JKiBleHQvYWxzYS9nc3RhbHNhcGx1Z2luLmM6IChwbHVnaW5faW5pdCk6Ci0JICBpbml0aWFsaXplIGRlYnVnZ2luZyBjYXRlZ29yeSBvbmx5IHdoZW4gd2UncmUgc3VyZSByZWdpc3RlcmluZyB0aGUKLQkgIHBsdWdpbnMgd29ya2VkLgotCi0yMDA0LTAzLTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleGFtcGxlcy9nc3RwbGF5L3BsYXllci5jOiAobWFpbik6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9jbGFzc19pbml0KSwKLQkoZ3N0X3BsYXlfc2V0X2xvY2F0aW9uKSwgKGdzdF9wbGF5X3NldF9kYXRhX3NyYyksCi0JKGdzdF9wbGF5X3NldF92aWRlb19zaW5rKSwgKGdzdF9wbGF5X3NldF9hdWRpb19zaW5rKSwKLQkoZ3N0X3BsYXlfc2V0X3Zpc3VhbGl6YXRpb24pLCAoZ3N0X3BsYXlfY29ubmVjdF92aXN1YWxpemF0aW9uKToKLSAgICAgICAgICBjaGVjayByZXR1cm4gdmFsdWVzIG9mIGVsZW1lbnRfc2V0X3N0YXRlIGFuZCByZXR1cm4gRkFMU0Ugd2hlcmUKLSAgICAgICAgICBmYWlsZWQKLQotMjAwNC0wMy0yOSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfaGFuZGxlX2V2ZW50KToKLQkgIHRyeSBoYXJkZXIgdG8gY2hlY2sgaWYgYW4gZXZlbnQgaXMgcmVhbGx5IGEgZGlzY29udAotCi0yMDA0LTAzLTI5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9MSU5HVUFTOiBhZGRpbmcgQXplcmJhaWphbmkgKE3JmXRpbiDGj21pcm92KQotCSogcG8vYXoucG86Ci0KLTIwMDQtMDMtMjggIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0ZHZkZGVtdXguYzogKGdzdF9kdmRfZGVtdXhfcHJvY2Vzc19wcml2YXRlKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfcGFyc2Vfc3lzaGVhZCksCi0JKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3BhY2tldCksIChnc3RfbXBlZ19kZW11eF9wYXJzZV9wZXMpOgotCSAgZ2V0IHJpZCBvZiBub24tc3RhbmRhcmQgIi4uLiIgcmFuZ2VzIGluIGNhc2Ugc3RhdGVtZW50cy4KLQotMjAwNC0wMy0yNyAgTWFydGluIFNvdG8gIDxtYXJ0aW5zb3RvQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguaDogQ29tcGxldGUgb3ZlcmhhdWwuIEFsbCBEVkQKLQlzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IHNwbGl0IHRvIHRoZSBuZXcgZHZkZGVtdXggZWxlbWVudC4KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdGR2ZGRlbXV4LmM6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RkdmRkZW11eC5oOiBOZXcgZGVtdWx0aXBsZXhlciBmb3IgRFZEIChWT0IpCi0Jc3RyZWFtcywgZGVyaXZlZCBmcm9tIG1wZWdkZW11eC4KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiBEaXNjb250aW51aXR5IGhhbmRsaW5nIGNsZWFuZWQKLQl1cC4gU0NSIGJhc2VkIHRpbWVzdGFtcCByZXdyaXRpbmcgY2FuIGJlIHR1cm5lZCBvZmYgKHdpbGwgcHJvYmFibHkKLQljb21wbGV0ZWx5IGRpc2FwcGVhciBzb29uKS4KLQkqIGV4dC9kdmRuYXYvZHZkbmF2c3JjLmM6IENoYW5nZXMgcmVzdWx0aW5nIGZyb20gYSBmZXcgbW9udGhzCi0JaGFja2luZy4gR2VuZXJhbCBjbGVhbnVwLiBBbGwgcHJpbnRmIHN0YXRlbWVudHMgcmVwbGFjZWQgYnkKLQlkZWJ1Z2dpbmcgbWVzc2FnZXMuIEFsbW9zdCBjb21wbGV0ZSBsaWJkdmRuYXYgc3VwcG9ydC4KLQkoZHZkbmF2c3JjX2NsYXNzX2luaXQpOiBHb3QgcmlkIG9mIHVubmVjZXNzYXJ5IHNpZ25hbHMgKHJlcGxhY2VkCi0JYnkgZXZlbnRzLiBOZXcgcHJvcGVydGllcyBmb3IgYXVkaW8gYW5kIHN1YnBpY3R1cmUgbGFuZ3VhZ2VzLgotCShkdmRuYXZzcmNfdXBkYXRlX2hpZ2hsaWdodCk6IE5vdyB1c2VzIGV2ZW50cy4KLQkoZHZkbmF2c3JjX3VzZXJfb3ApOiBDbGVhbmVkIHVwLgotCShkdmRuYXZzcmNfZ2V0KTogUmVuYW1lZCB0byBkdmRuYXZzcmNfbG9vcCAoZWxlbWVudCBpcyBub3cgbG9vcAotCWJhc2VkKS4gTG90cyBvZiBjbGVhbnVwLCBhbmQgcHJvcHBlciBzdXBwb3J0IGZvciBtb3N0IGxpYmR2ZG5hdgotCWV2ZW50cy4KLQkoZHZkbmF2c3JjX21ha2VfZHZkX2V2ZW50KTogTmV3IGZ1bmN0aW9uLgotCShkdmRuYXZzcmNfbWFrZV9kdmRfbmF2X3BhY2tldF9ldmVudCk6IE5ldyBmdW5jdGlvbi4KLQkoZHZkbmF2c3JjX21ha2VfY2x1dF9jaGFuZ2VfZXZlbnQpOiBOZXcgZnVuY3Rpb24uCi0KLTIwMDQtMDMtMjYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6ICh0aGVvcmFfdHlwZV9maW5kKToKLQkgIGZpeCBidWcgd2hlcmUgdHlwZWZpbmRpbmcgd291bGQgY2xhaW0gaXQncyB0aGVvcmEgd2hlbmV2ZXIgbGVzcyB0aGVuCi0JICA3IGJ5dGVzIG9mIGRhdGEgd2VyZSBhdmFpbGFibGUKLQotMjAwNC0wMy0yNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2xhdy9hbGF3LWRlY29kZS5jOiAoYWxhd2RlY19nZXRjYXBzKSwgKGFsYXdkZWNfbGluayksCi0JKGdzdF9hbGF3ZGVjX2Jhc2VfaW5pdCksIChnc3RfYWxhd2RlY19jbGFzc19pbml0KSwKLQkoZ3N0X2FsYXdkZWNfaW5pdCksIChnc3RfYWxhd2RlY19jaGFpbik6Ci0JKiBnc3QvbGF3L2FsYXctZW5jb2RlLmM6IChhbGF3ZW5jX2dldGNhcHMpLCAoYWxhd2VuY19saW5rKSwKLQkoZ3N0X2FsYXdlbmNfYmFzZV9pbml0KSwgKGdzdF9hbGF3ZW5jX2NsYXNzX2luaXQpLAotCShnc3RfYWxhd2VuY19pbml0KSwgKGdzdF9hbGF3ZW5jX2NoYWluKToKLQkqIGdzdC9sYXcvbXVsYXctZGVjb2RlLmM6IChtdWxhd2RlY19nZXRjYXBzKSwgKG11bGF3ZGVjX2xpbmspLAotCShnc3RfbXVsYXdkZWNfYmFzZV9pbml0KSwgKGdzdF9tdWxhd2RlY19jbGFzc19pbml0KSwKLQkoZ3N0X211bGF3ZGVjX2luaXQpLCAoZ3N0X211bGF3ZGVjX2NoYWluKToKLQkqIGdzdC9sYXcvbXVsYXctZW5jb2RlLmM6IChtdWxhd2VuY19nZXRjYXBzKSwgKG11bGF3ZW5jX2xpbmspLAotCShnc3RfbXVsYXdlbmNfYmFzZV9pbml0KSwgKGdzdF9tdWxhd2VuY19jbGFzc19pbml0KSwKLQkoZ3N0X211bGF3ZW5jX2luaXQpLCAoZ3N0X211bGF3ZW5jX2NoYWluKToKLQkgIEZpeCBjYXBzbmVnbyBpbiBhbGwgZm91ciwgcmVtb3ZlIHRoZSB1bnVzZWQgcHJvcGVydHkgZnVuY3Rpb25zIGFuZAotCSAgc2ltcGxpZnkgdGhlIGNoYWluIGZ1bmN0aW9ucyBzbGlnaHRseS4gSSBndWVzcyB3ZSBjb3VsZCB1c2UgbWFjcm9zCi0JICBvciBzb21ldGhpbmcgc2ltaWxhciBmb3IgdGhvc2UsIHNpbmNlIHRoZSBjb2RlIGlzIHNvIHNpbWlsYXIsIGJ1dAotCSAgSSdtIGN1cnJlbnRseSB0b28gbGF6eS4uLgotCi0yMDA0LTAzLTI0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfc3luY19wYXJtcyksCi0JKGdzdF9vc3NlbGVtZW50X2Nsb3NlX2F1ZGlvKSwgKGdzdF9vc3NlbGVtZW50X3Byb2JlX2NhcHMpLAotCShnc3Rfb3NzZWxlbWVudF9nZXRfZm9ybWF0X3N0cnVjdHVyZSksCi0JKGdzdF9vc3NlbGVtZW50X3JhdGVfcHJvYmVfY2hlY2spLCAoZ3N0X29zc2VsZW1lbnRfcmF0ZV9hZGRfcmFuZ2UpLAotCShnc3Rfb3NzZWxlbWVudF9yYXRlX2NoZWNrX3JhdGUpLCAoZ3N0X29zc2VsZW1lbnRfcmF0ZV9hZGRfcmF0ZSksCi0JKGdzdF9vc3NlbGVtZW50X3JhdGVfaW50X2NvbXBhcmUpOiBBZGQgY29kZSB0byBoYW5kbGUgcmF0ZSBwcm9iaW5nCi0JKGJ1ZyAjMTIwODgzKQotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50Lmg6IHNhbWUKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfaW5pdCksIChnc3Rfb3Nzc2lua19nZXRjYXBzKToKLQlVc2UgcmF0ZSBwcm9iaW5nIHByb3ZpZGVkIGJ5IG9zc2VsZW1lbnQuCi0JKiBzeXMvb3NzL2dzdG9zc3NyYy5jOiAoZ3N0X29zc3NyY19pbml0KSwgKGdzdF9vc3NzcmNfZ2V0Y2Fwcyk6IHNhbWUKLQotMjAwNC0wMy0yNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3h2aWQvZ3N0eHZpZGVuYy5jOiAoZ3N0X3h2aWRlbmNfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3h2aWRlbmNfZ2V0X3Byb3BlcnR5KToKLQkgIHVsb25nL2ludCBtZXNzLXVwLgotCi0yMDA0LTAzLTI0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9zcGVleC9nc3RzcGVleGRlYy5jOiAoZ3N0X3NwZWV4ZGVjX2Jhc2VfaW5pdCksCi0JKGdzdF9zcGVleGRlY19pbml0KToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2Jhc2VfaW5pdCksCi0JKGdzdF9zcGVleGVuY19pbml0KTogIENyZWF0ZSB0aGUgcGFkIHRlbXBsYXRlIGNvcnJlY3RseSAoZnJvbQotCXRoZSBzdGF0aWMgcGFkIHRlbXBsYXRlLCBub3QgYSBOVUxMIHBvaW50ZXIuKQotCi0yMDA0LTAzLTI1ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9kZWJ1Zy9NYWtlZmlsZS5hbToKLQkqIGdzdC9kZWJ1Zy9icmVha215ZGF0YS5jOgotCSAgYWRkIGVsZW1lbnQgdGhhdCBxdWFzaS1yYW5kb21seSBjaGFuZ2VzIGJ5dGVzIGluIHRoZSBzdHJlYW0uCi0JICBJbnRlbmRlZCB1c2UgaXMgcm9idXN0bmVzcyBjaGVja2luZyBvZiBkZW11eGVycyBhbmQgZGVjb2RlcnMgaW4KLQkgIG1lZGlhIHRlc3RzLgotCi0yMDA0LTAzLTI0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX29wZW5fYXVkaW8pLAotCShnc3RfYWxzYV9wcm9iZV9od19wYXJhbXMpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSAgZGVidWdnaW5nIG91dHB1dCBmaXhlcwotCi0yMDA0LTAzLTI0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NyYy5jOiAoZ3N0X2dub21ldmZzc3JjX3NldF9wcm9wZXJ0eSk6Ci0JICBkb24ndCBnX3JldHVybl9pZl9mYWlsIGlmIGVsZW1lbnQgaXMgUExBWUlORywgZmFpbCBzaWxlbnRseSBhcyBldmVyeQotCSAgb3RoZXIgZWxlbWVudC4KLQkqIGdzdC9lZmZlY3R2L2dzdHF1YXJrLmM6IChnc3RfcXVhcmt0dl9jaGFpbik6Ci0JICBvbmx5IGZpeCBuZWVkZWQgZm9yIGNhc3QgbHZhbHVlIGlzc3VlcyBpbiBnc3QtcGx1Z2lucwotCSogZ3N0L3ZvbGVudi9nc3R2b2xlbnYuYzogKGdzdF92b2xlbnZfaW5pdCk6Ci0JICBhZGQgcHJveHlfZ2V0Y2FwcwotCi0yMDA0LTAzLTI0ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9sZXZlbC9nc3RsZXZlbC5jOiAoZ3N0X2xldmVsX2luaXQpOgotCSAgYWRkIHByb3h5aW5nIGdldGNhcHMgZnVuY3Rpb24sIHNvIGxldmVsIGRvZXNuJ3QgYWR2ZXJ0aXNlIGltcG9zc2libGUKLQkgIGNhcHMKLQotMjAwNC0wMy0yNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCksCi0JKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwgKHF0ZGVtdXhfcGFyc2VfbW9vdiksIChxdGRlbXV4X3BhcnNlKSwKLQkocXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCksIChxdGRlbXV4X2R1bXBfbXZoZCksCi0JKHF0ZGVtdXhfZHVtcF90a2hkKSwgKHF0ZGVtdXhfZHVtcF9lbHN0KSwgKHF0ZGVtdXhfZHVtcF9tZGhkKSwKLQkocXRkZW11eF9kdW1wX2hkbHIpLCAocXRkZW11eF9kdW1wX3ZtaGQpLCAocXRkZW11eF9kdW1wX2RyZWYpLAotCShxdGRlbXV4X2R1bXBfc3RzZCksIChxdGRlbXV4X2R1bXBfc3R0cyksIChxdGRlbXV4X2R1bXBfc3RzcyksCi0JKHF0ZGVtdXhfZHVtcF9zdHNjKSwgKHF0ZGVtdXhfZHVtcF9zdHN6KSwgKHF0ZGVtdXhfZHVtcF9zdGNvKSwKLQkocXRkZW11eF9kdW1wX2NvNjQpLCAocXRkZW11eF9kdW1wX2Rjb20pLCAocXRkZW11eF9kdW1wX2NtdmQpLAotCShxdGRlbXV4X3BhcnNlX3RyZWUpLCAocXRkZW11eF9wYXJzZV90cmFrKTogIEZpeCBkZWJ1Z2dpbmcKLQltZXNzYWdlcy4gIERpdmlkZSB0aGUgY2h1bmsgc2l6ZSBieSB0aGUgY29tcHJlc3Npb24gcmF0aW8KLQkobmVlZGVkIGZvciBNQUNFIGF1ZGlvKQotCi0yMDA0LTAzLTIzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzogKGdzdF9tcDNwYXJzZV9jaGFpbik6Ci0JICBGaXggYnVmZmVyIG92ZXJmbG93IHJlYWQgZXJyb3IuCi0KLTIwMDQtMDMtMjMgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuaDoKLQkgIFJlbW92ZSB1bnVzZWQgZW50cnkuCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6IChnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2Fwcyk6Ci0JICBBZGQgY2luZXBhay4KLQkqIGdzdC92aWRlb2Ryb3AvZ3N0dmlkZW9kcm9wLmM6IChnc3RfdmlkZW9kcm9wX2dldGNhcHMpLAotCShnc3RfdmlkZW9kcm9wX2xpbmspLCAoZ3N0X3ZpZGVvZHJvcF9jaGFpbik6Ci0JICBGaXgsIHNvcnQgb2YuIFdhcyBob3JyaWJseSBicm9rZW4gd2l0aCBuZXcgY2Fwc25lZ28uIEJhaC4uLgotCi0yMDA0LTAzLTIzICBKZXJlbXkgU2ltb24gIDxqZXNpbW9uQGxpYmVydHlzdXJmLmZyPgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKGFwZV90eXBlX2ZpbmQpLAotCShwbHVnaW5faW5pdCk6Ci0JQWRkIGEgbW9ua2V5c2F1ZGlvIHR5cGVmaW5kIGZ1bmN0aW9uCi0KLTIwMDQtMDMtMjMgIEpvaGFuIERhaGxpbiAgPGpvaGFuQGdub21lLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jIChnc3RfcGxheV9hdWRpb19maXhhdGUpCi0JKGdzdF9wbGF5X3ZpZGVvX2ZpeGF0ZSk6IENoZWNrIHNvIHRoZSBzdHJ1Y3R1cmUgaGFzIHRoZSBmaWVsZAotCWJlZm9yZSB0cnlpbmcgdG8gZml4YXRlIHRoZW0sIHRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaGF2ZQotCWZha2VzaW5rcyBmb3IgdmlkZW8gYW5kIGF1ZGlvIG91dHB1dCB3aXRob3V0IHByaW50aW5nIGVycm9ycyBvbgotCXRoZSBvdXRwdXQgY29uc29sZS4KLQotMjAwNC0wMy0yMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMvb3NzL01ha2VmaWxlLmFtOgotCSogc3lzL29zcy9vc3NfcHJvYmUuYzogKG1haW4pLCAocHJvYmVfY2hlY2spLCAoYWRkX3JhbmdlKSwKLQkoY2hlY2tfcmF0ZSksIChhZGRfcmF0ZSk6ICBSYXRlIHByb2JpbmcgdGVzdCBhcHAuCi0KLTIwMDQtMDMtMjEgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspLAotCShfZml4YXRlX2NhcHNfdG9faW50KSwgKGdzdF9hdWRpb19jb252ZXJ0X2ZpeGF0ZSk6Ci0JICBhZGQgYSBmaXhhdGlvbiBmdW5jdGlvbiB0aGF0IHByZXR0eSBtdWNoIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIChmaXhlcwotCSAgIzEzNzU1NikKLQotMjAwNC0wMy0yMCAgRGF2aWQgSS4gTGVobiAgPGRsZWhuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogY29uZmlndXJlLmFjOiBHU1RfUEFDS0FHRSBkZWZhdWx0OiBzL0dTdHJlYW1lci9HU3RyZWFtZXIgUGx1Z2lucy8KLQotMjAwNC0wMy0yMCAgVGltLVBoaWxsaXAgTcO8bGxlciA8dC5pLm1AemVuLmNvLnVrPgotCi0JcmV2aWV3ZWQgYnk6IEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19wYWRfcHVzaCk6Ci0JICB0ZXJtaW5hdGUgZ3N0X2V2ZW50X25ld19kaXNjb250aW51b3VzIGNvcnJlY3RseSAoZml4ZXMgcGFydHMgb2YKLQkgICMxMzc3MTEpCi0KLTIwMDQtMDMtMTkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L01ha2VmaWxlLmFtOiAgRW5hYmxlIHhvdmVybGF5IHVuY29uZGl0aW9uYWxseSwKLQlzaW5jZSBpdCBkb2Vzbid0IGRlcGVuZCBvbiBYLCBhbmQgaXQncyBwYXJ0IG9mIG91ciBBQkkuCi0KLTIwMDQtMDMtMTkgIElhaW4gPGlhaW5AcHJldHR5cGVvcGxlLm9yZz4KLQotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmMgKGRlaW50ZXJsZWF2ZV9zaW5rX2xpbmspOiBVc2UgdGhlCi0JaXNfaW50IGluIHRoZSBzdHJ1Y3R1cmUsIG5vdCB0aGUgbG9jYWwgdmFyaWFibGUuCi0KLTIwMDQtMDMtMTkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2xpYnJmYi9nc3RyZmJzcmMuYzogKGdzdF9yZmJzcmNfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3JmYnNyY19pbml0KSwgKGdzdF9yZmJzcmNfZ2V0Y2FwcyksIChnc3RfcmZic3JjX2ZpeGF0ZSksCi0JKGdzdF9yZmJzcmNfbGluayksIChnc3RfcmZic3JjX3BhaW50X3JlY3QpLCAoZ3N0X3JmYnNyY19nZXQpOgotCUltcHJvdmVtZW50cyBpbiBjYXBzIG5lZ290aWF0aW9uLgotCi0yMDA0LTAzLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBwby9MSU5HVUFTOgotCSogcG8vYWYucG86Ci0gICAgICAgICAgYWRkaW5nIEFmcmlrYWFucyAoUGV0cmkgSm9vc3RlKQotCi0yMDA0LTAzLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NoYWluKToKLSAgICAgICAgdGhyb3cgZXJyb3IgaW5zdGVhZCBvZiBnX2NyaXRpY2FsICgjMTM3NTg4KQotCi0yMDA0LTAzLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBNYWtlZmlsZS5hbToKLQkqIGNvbmZpZ3VyZS5hYzoKLSAgICAgICAgICBkaXN0IGNvbW1vbiBhbmQgbTQgY29ycmVjdGx5Ci0JKiBwby9zdi5wbzoKLQotMjAwNC0wMy0xNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBwa2djb25maWcvZ3N0cmVhbWVyLW1lZGlhLWluZm8ucGMuaW46ICBBZGQgVmVyc2lvbi4KLQkoYnVnICMxMzczNDgpCi0KLTIwMDQtMDMtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9zdi5wbzoKLSAgICAgICAgICBhZGRpbmcgU3dlZGlzaCB0cmFuc2xhdGlvbiAoQ2hyaXN0aWFuIFJvc2UpCi0KLTIwMDQtMDMtMTcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIE1ha2VmaWxlLmFtOiB1c2UgcmVsZWFzZS5tYWsKLQotMjAwNC0wMy0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29tbW9uL0NoYW5nZUxvZzoKLQkqIGNvbW1vbi9nc3QtYXV0b2dlbi5zaDoKLSAgICAgICAgICBhZGQgc29tZSBleHBsYW5hdGlvbiBhYm91dCB0aGUgdmVyc2lvbiBkZXRlY3Rpb24KLQkqIGNvbmZpZ3VyZS5hYzoKLSAgICAgICAgICBmaXggWCBjaGVjawotCi0yMDA0LTAzLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IGJ1bXAgbmFubyB0byAxCi0KLT09PSByZWxlYXNlIDAuOC4wID09PQotCi0yMDA0LTAzLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IHJlbGVhc2UgMC44LjAsICJQaGFybWFjZXV0aWNhbCBJdGNoIgotCi0yMDA0LTAzLTE2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0gICAgICAgICAgdXBkYXRlIGxpYnRvb2wgdmVyc2lvbgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vTWFrZWZpbGUuYW06Ci0gICAgICAgICAgYWN0dWFsbHkgdXNlIGxpYnRvb2wgdmVyc2lvbgotCi0yMDA0LTAzLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IGZpeCBzcGVleCBkZXRlY3Rpb24gdG8gd29yayB3aXRoIDEuMCBidXQgbm90IDEuMQotCi0yMDA0LTAzLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QtcGx1Z2lucy5zcGVjLmluOgotCSogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1nY29uZi11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItaW50ZXJmYWNlcy11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbGlicy11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbGlicy5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbWVkaWEtaW5mby11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItcGxheS11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItcGx1Z2lucy11bmluc3RhbGxlZC5wYy5pbjoKLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItcGx1Z2lucy5wYy5pbjoKLSAgICAgICAgICByZW1vdmUgQFZFUlNJT05AIGZyb20gc29tZSBvZiB0aGUgcGMgZmlsZXMgc2luY2UgY29yZSBhbmQgcGx1Z2lucwotICAgICAgICAgIGFyZSBkZWNvdXBsZWQuCi0gICAgICAgICAgY3JlYXRlZCBnc3RyZWFtZXItcGx1Z2lucy5wYyBhcyBpdCdzIGEgYmV0dGVyIG5hbWUsIGJ1dCBrZWVwaW5nCi0gICAgICAgICAgLWxpYnMgYXJvdW5kIGZvciBub3cgdG8gZ2V0IGZpeGVzIHVwc3RyZWFtIGRvbmUgZmlyc3QuCi0KLTIwMDQtMDMtMTUgIEp1bGllbiBNT1VUVEUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9nZXRfZnJhbWVyYXRlKSwKLQkoZ3N0X3BsYXlfZ2V0X3NpbmtfZWxlbWVudCk6IEZpcnN0IGRyYWZ0IG9mIGdzdF9wbGF5X2dldF9mcmFtZXJhdGUuCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5Lmg6Ci0KLTIwMDQtMDMtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqICouYywgKi5jYzogZG9uJ3QgbWl4IHRhYnMgYW5kIHNwYWNlcwotCi0yMDA0LTAzLTE1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9waXBlbGluZV9zZXR1cCk6Ci0gICAgICAgICAgdXNlIHRoZSBuZXcgZmZtcGVnY29sb3JzcGFjZQotCSogZ3N0LXBsdWdpbnMuc3BlYy5pbjoKLSAgICAgICAgICBwYWNrYWdlIG5ldyBjb2xvcnNwYWNlIGFuZCBtZWRpYS1pbmZvCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBwa2djb25maWcvTWFrZWZpbGUuYW06Ci0gICAgICAgICAgZml4IHNvbWUgbW9yZSBkaXN0aW5nIGlzc3VlcwotCSogcGtnY29uZmlnL2dzdHJlYW1lci1tZWRpYS1pbmZvLXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1tZWRpYS1pbmZvLnBjLmluOgotICAgICAgICAgIGdlbmVyYXRlIG1lZGlhLWluZm8gcGMgZmlsZXMKLQotMjAwNC0wMy0xNSAgSm9oYW4gRGFobGluICA8am9oYW5AZ25vbWUub3JnPgotCi0JKiAqLmg6IFJldmVydCBpbmRlbnRpbmcKLQotMjAwNC0wMy0xNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotICAgICAgICAgIGFkZGluZyBmZm1wZWdjb2xvcnNwYWNlIGVsZW1lbnQKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvYXZjb2RlYy5oOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvY29tbW9uLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9kc3B1dGlsLmM6IChkc3B1dGlsX3N0YXRpY19pbml0KToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2RzcHV0aWwuaDoKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZy5jOiAocGx1Z2luX2luaXQpOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvZ3N0ZmZtcGVnY29kZWNtYXAuYzoKLQkoZ3N0X2ZmbXBlZ19waXhmbXRfdG9fY2FwcyksIChnc3RfZmZtcGVnX3BpeF9mbXRfdG9fY2FwcyksCi0JKGdzdF9mZm1wZWdfY2Fwc190b19waXhfZm10KToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2dzdGZmbXBlZ2NvZGVjbWFwLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6Ci0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NhcHNfcmVtb3ZlX2Zvcm1hdF9pbmZvKSwKLQkoZ3N0X2ZmbXBlZ2NvbG9yc3BhY2VfZ2V0Y2FwcyksIChnc3RfZmZtcGVnY29sb3JzcGFjZV9wYWRfbGluayksCi0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2dldF90eXBlKSwgKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2Jhc2VfaW5pdCksCi0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NsYXNzX2luaXQpLCAoZ3N0X2ZmbXBlZ2NvbG9yc3BhY2VfaW5pdCksCi0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NoYWluKSwgKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX2dldF9wcm9wZXJ0eSksCi0JKGdzdF9mZm1wZWdjb2xvcnNwYWNlX3JlZ2lzdGVyKToKLQkqIGdzdC9mZm1wZWdjb2xvcnNwYWNlL2ltZ2NvbnZlcnQuYzoKLQkoYXZjb2RlY19nZXRfY2hyb21hX3N1Yl9zYW1wbGUpLCAoYXZjb2RlY19nZXRfcGl4X2ZtdF9uYW1lKSwKLQkoYXZjb2RlY19nZXRfcGl4X2ZtdCksIChhdnBpY3R1cmVfZmlsbCksIChhdnBpY3R1cmVfbGF5b3V0KSwKLQkoYXZwaWN0dXJlX2dldF9zaXplKSwgKGF2Y29kZWNfZ2V0X3BpeF9mbXRfbG9zcyksCi0JKGF2Z19iaXRzX3Blcl9waXhlbCksIChhdmNvZGVjX2ZpbmRfYmVzdF9waXhfZm10MSksCi0JKGF2Y29kZWNfZmluZF9iZXN0X3BpeF9mbXQpLCAoaW1nX2NvcHlfcGxhbmUpLCAoaW1nX2NvcHkpLAotCSh5dXY0MjJfdG9feXV2NDIwcCksICh5dXY0MjJfdG9feXV2NDIycCksICh5dXY0MjJwX3RvX3l1djQyMiksCi0JKENfSlBFR19UT19DQ0lSKSwgKGltZ19jb252ZXJ0X2luaXQpLCAoaW1nX2FwcGx5X3RhYmxlKSwKLQkoc2hyaW5rNDEpLCAoc2hyaW5rMjEpLCAoc2hyaW5rMTIpLCAoc2hyaW5rMjIpLCAoc2hyaW5rNDQpLAotCShncm93MjFfbGluZSksIChncm93NDFfbGluZSksIChncm93MjEpLCAoZ3JvdzIyKSwgKGdyb3c0MSksCi0JKGdyb3c0NCksIChjb252NDExKSwgKGdpZl9jbHV0X2luZGV4KSwgKGJ1aWxkX3JnYl9wYWxldHRlKSwKLQkoYml0Y29weV9uKSwgKG1vbm9fdG9fZ3JheSksIChtb25vd2hpdGVfdG9fZ3JheSksCi0JKG1vbm9ibGFja190b19ncmF5KSwgKGdyYXlfdG9fbW9ubyksIChncmF5X3RvX21vbm93aGl0ZSksCi0JKGdyYXlfdG9fbW9ub2JsYWNrKSwgKGF2cGljdHVyZV9hbGxvYyksIChhdnBpY3R1cmVfZnJlZSksCi0JKGlzX3l1dl9wbGFuYXIpLCAoaW1nX2NvbnZlcnQpLCAoZ2V0X2FscGhhX2luZm9fcGFsOCksCi0JKGltZ19nZXRfYWxwaGFfaW5mbyksIChkZWludGVybGFjZV9saW5lKSwKLQkoZGVpbnRlcmxhY2VfbGluZV9pbnBsYWNlKSwgKGRlaW50ZXJsYWNlX2JvdHRvbV9maWVsZCksCi0JKGRlaW50ZXJsYWNlX2JvdHRvbV9maWVsZF9pbnBsYWNlKSwgKGF2cGljdHVyZV9kZWludGVybGFjZSk6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9pbWdjb252ZXJ0X3RlbXBsYXRlLmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS9tZW0uYzogKGF2X21hbGxvYyksIChhdl9yZWFsbG9jKSwgKGF2X2ZyZWUpOgotCSogZ3N0L2ZmbXBlZ2NvbG9yc3BhY2UvbW14Lmg6Ci0JKiBnc3QvZmZtcGVnY29sb3JzcGFjZS91dGlscy5jOiAoYXZjb2RlY19pbml0KToKLSAgICAgICAgICBhZGRpbmcgZmZtcGVnY29sb3JzcGFjZSBlbGVtZW50IHN1cHBsaWVkIGJ5IFJvbmFsZCBhZnRlciBjbGVhbmluZwotICAgICAgICAgIHVwIGFuZCBwdWxsaW5nIGluIHRoZSByaWdodCBiaXRzIG9mIHVwc3RyZWFtIHNvdXJjZS4KLSAgICAgICAgICBJJ20gc3VyZSBhIGJldHRlciBDL2NvbXBpbGVyIHdpemFyZCBjb3VsZCBkbyBzb21lIGNsZWFuaW5nIHVwIChmb3IKLSAgICAgICAgICBleGFtcGxlIHVzZSBHTElCJ3MgbWFsbG9jIHN0dWZmKSwgYnV0IGFzIGEgZmlyc3QgcGFzcyB0aGlzCi0gICAgICAgICAgd29ya3MgdmVyeSB3ZWxsCi0KLTIwMDQtMDMtMTUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuaDoKLQkgIEkgYXNzdW1lIFJvbmFsZCBmb3Jnb3QgdG8gY29tbWl0IHRoZSBjaGFuZ2UgdG8gaGF2ZSBjYXJkbmFtZQotICAgICAgICAgIGFzIGEgc3RydWN0IG1lbWJlci4gIEV4cGVjdCBzb21lIHB1YmxpYyBzcGFua2luZyBhdCB0aGUgbmV4dAotICAgICAgICAgIG9wcG9ydHVuaXR5LgotCi0yMDA0LTAzLTE1ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9nZXRfcHJvcGVydHkpLAotCShnc3RfYWxzYV9vcGVuX2F1ZGlvKSwgKGdzdF9hbHNhX2Nsb3NlX2F1ZGlvKToKLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzoKLQkgIERvbid0IG9wZW4gdGhlIGRldmljZSBpZiB3ZSdyZSBhIG1peGVyICg9IHBhZGxlc3MpLgotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmM6IChnc3RfYWxzYV9taXhlcl9jbGFzc19pbml0KSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfaW5pdCksIChnc3RfYWxzYV9taXhlcl9vcGVuKSwKLQkoZ3N0X2Fsc2FfbWl4ZXJfY2xvc2UpLCAoZ3N0X2Fsc2FfbWl4ZXJfY2hhbmdlX3N0YXRlKToKLQkgIE9wZW4gbWl4ZXIgZHVyaW5nIHN0YXRlIGNoYW5nZSByYXRoZXIgdGhhbiBkdXJpbmcgb2JqZWN0Ci0JICBpbml0aWFsaXphdGlvbi4gQWxzbywgZ2V0IGEgZGV2aWNlIG5hbWUuIEN1cnJlbnRseSBpbiBhIHNvbWV3aGF0Ci0JICBoYWNraXNoIGZhc2hpb24sIGJ1dCBJIGRpZG4ndCByZWFsbHkgZmluZCBzb21ldGhpbmcgYmV0dGVyLgotCi0yMDA0LTAzLTE0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiAqLmMsICouaDogcnVuIGdzdC1pbmRlbnQKLQotMjAwNC0wMy0xNCAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvbW9kcGx1Zy9nc3Rtb2RwbHVnLmNjOgotCSogZ3N0L21vZHBsdWcvZ3N0bW9kcGx1Zy5oOgotCSAgc2V0IGNvcnJlY3QgdGltZXN0YW1wcyBvbiBvdXRnb2luZyBidWZmZXJzCi0KLTIwMDQtMDMtMTQgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L21vZHBsdWcvZ3N0bW9kcGx1Zy5jYzoKLQkgIGhhbmRsZSBldmVudHMgLSBkb24ndCBkbyBjcmFwIHdoZW4gYSBkaXNjb250IGFycml2ZXMgdGhhdCdzIG5vdAotCSAgbmVjZXNzYXJ5Ci0JICBUaGlzIGFsbG93cyBjb3JyZWN0IGxvYWRpbmcgYW5kIHBsYXliYWNrIG9mIG1vZHMgaW4gUmh5dGhtYm94Ci0KLTIwMDQtMDMtMTQgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0LWxpYnMvZ3N0L2djb25mL01ha2VmaWxlLmFtOgotCSogcGtnY29uZmlnL01ha2VmaWxlLmFtOgotCSAgbW92ZSBnc3RyZWFtZXItZ2NvbmYgcGtnY29uZmlnIGZpbGVzIHRvIHBrZ2NvbmZpZy8gZGlyLiBNYWtlIHN1cmUKLQkgIHRoZXkgZ2V0IHJlYnVpbHQgcHJvcGVybHkKLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIHdoZW4gY2hlY2tpbmcgZm9yIHZvcmJpcywgdHJ5IHBrZ2NvbmZpZyBmaXJzdC4KLQkqIGdzdC9tb2RwbHVnL2dzdG1vZHBsdWcuY2M6Ci0JICBhZGQgZml4YXRlIGZ1bmN0aW9uCi0KLTIwMDQtMDMtMTQgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBGaXggZm9yIG9idmlvdXMgbWlzdGFrZSwgd2hlcmUgd2UgZmlyc3Qgc2hpZnQgdGhlIG9mZnNldCBhbmQgdGhlbgotCSAgcmVhZCBhIHNhbXBsZXNpemUgZWxlbWVudCBhc3N1bWluZyB0aGUgb2xkIG9mZnNldC4gTm90ZSB0aGF0IHRoaXMKLQkgIHBhcnQgc3RpbGwgaGFzIHNvbWV0aGluZyB3ZWlyZCwgaS5lLiBteSBtb3ZpZXMgY29udGFpbmluZyB0aG9zZQotCSAgZG9uJ3QgYWN0dWFsbHkgcGxheSB3ZWxsLCBidXQgYXQgbGVhc3QgdGhlcmUncyBzb21ldGhpbmcgdGhhdCBsb29rcwotCSAgbGlrZSBzb3VuZCBub3cuCi0KLTIwMDQtMDMtMTQgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAoc3BlZXhfdHlwZV9maW5kKSwKLQkocGx1Z2luX2luaXQpOgotCUFkZCBhIHR5cGVmaW5kIGZ1bmN0aW9uIGZvciBzcGVleCBmb3JtYXQKLQotMjAwNC0wMy0xMyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X3ZpZGVvX2NhcHMpLAotCShnc3RfYXNmX2RlbXV4X3NldHVwX3BhZCk6Ci0JICBVc2UgMjVmcHMgYXMgb3VyICJmYWtlIiBmcHMgdmFsdWUgKG1hcmtlZCBmb3IgZml4YWdlIGluIDAuOS54KQotCSAgaW5zdGVhZCBvZiAwLiBSZWFzb24gaXMgc2ltcGxlOiBzb21lIGVsZW1lbnRzIGhhdmUgYSBmcHMgcmFuZ2UKLQkgIG9mIDEtbWF4IGluc3RlYWQgb2YgMC1tYXguIFNvIG5vdyBBU0YgdmlkZW8gYWN0dWFsbHkgd29ya3MuCi0KLTIwMDQtMDMtMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHBvL0xJTkdVQVM6Ci0JKiBwby9zci5wbzoKLQkgIGFkZGluZyBzZXJiaWFuIGFzIGEgbGFuZ3VhZ2UKLQotMjAwNC0wMy0xMyAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3Qvc2luZS9nc3RzaW5lc3JjLmM6IChnc3Rfc2luZXNyY19nZXQpOgotCSAgcmV0dXJuIHRhZ2xpc3QgY29ycmVjdGx5IGZyb20gX2dldCBmdW5jdGlvbiwgZG9uJ3QgZ3N0X3BhZF9wdXNoIGl0LgotCSAgKGZpeGVzICMxMzcwNDIpCi0KLTIwMDQtMDMtMTMgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2NsYXNzX3Byb2JlX2RldmljZXMpOgotCi0yMDA0LTAzLTEzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzogKGdzdF9hbHNhX21peGVyX2ZyZWVfbGlzdCk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJ0cmFjay5jOiAoZ3N0X2Fsc2FfbWl4ZXJfdHJhY2tfY2xhc3NfaW5pdCksCi0JKGdzdF9hbHNhX21peGVyX3RyYWNrX25ldyk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXJ0cmFjay5oOgotCSAgRml4IGFuY2llbnQgbGVmdG92ZXJzLi4uIE1peGVyVHJhY2sgaXMgYSBHT2JqZWN0LgotCi0yMDA0LTAzLTEzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9jbGFzc19wcm9iZV9kZXZpY2VzKToKLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfY2xhc3NfcHJvYmVfZGV2aWNlcyk6Ci0JICBEb24ndCBibG9jayBkdXJpbmcgcHJvYmluZy4uLgotCi0yMDA0LTAzLTEyICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9nZXRfdHlwZSksIChnc3RfYWxzYV9jbGFzc19pbml0KSwKLQkoZ3N0X2Fsc2FfZ2V0X3Byb3BlcnR5KSwgKGdzdF9hbHNhX3Byb2JlX2dldF9wcm9wZXJ0aWVzKSwKLQkoZ3N0X2Fsc2FfY2xhc3NfcHJvYmVfZGV2aWNlcyksIChnc3RfYWxzYV9jbGFzc19saXN0X2RldmljZXMpLAotCShnc3RfYWxzYV9wcm9iZV9wcm9iZV9wcm9wZXJ0eSksIChnc3RfYWxzYV9wcm9iZV9uZWVkc19wcm9iZSksCi0JKGdzdF9hbHNhX3Byb2JlX2dldF92YWx1ZXMpLCAoZ3N0X2Fsc2FfcHJvYmVfaW50ZXJmYWNlX2luaXQpLAotCShnc3RfYWxzYV9vcGVuX2F1ZGlvKSwgKGdzdF9hbHNhX2Nsb3NlX2F1ZGlvKToKLQkqIGV4dC9hbHNhL2dzdGFsc2EuaDoKLQkgIEFkZCBwcm9wZXJ0eXByb2JlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiwgYWRkIHNvbWUgZGV2aWNlLW5hbWUKLQkgIHByb3BlcnR5LCBhbGwgdGhpcyBzbyB0aGF0IGl0IGxvb2tzIGdvb2QgaW4gZ25vbWUtdm9sdW1lLWNvbnRyb2wuCi0KLTIwMDQtMDMtMTIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOiB0aGUgSGVybWVzIGxpYnJhcnkgY29udHJvbHMgaGVybWVzY29sb3JzcGFjZSwgbm90Ci0JY29sb3JzcGFjZS4KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOiAoZ3N0X21wZWcyZGVjX2Jhc2VfaW5pdCksCi0JKGdzdF9tcGVnMmRlY19pbml0KTogbWlub3IgcGV0IHBlZXZlOiBkaXNhYmxlIGNvZGUgd2l0aCAjaWZkZWYsCi0Jbm90IC8qICovCi0JKiBleHQvc2RsL3NkbHZpZGVvc2luay5jOiBDaGFuZ2UgWElEIHRvIHVuc2lnbmVkIGxvbmcuCi0JKiBleHQvc2RsL3NkbHZpZGVvc2luay5oOiBkaXR0by4KLQkqIGdzdC9jb2xvcnNwYWNlL2dzdGNvbG9yc3BhY2UuYzogRml4IG9sZCBjb21tZW50cyBhYm91dCBIZXJtZXMKLQotMjAwNC0wMy0xMiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QtbGlicy9nc3QveG92ZXJsYXkveG92ZXJsYXkuYzogKGdzdF94X292ZXJsYXlfc2V0X3h3aW5kb3dfaWQpLAotCShnc3RfeF9vdmVybGF5X2dvdF94d2luZG93X2lkKToKLQkqIGdzdC1saWJzL2dzdC94b3ZlcmxheS94b3ZlcmxheS5oOgotCSAgcmVwbGFjZSBYSUQgd2l0aCB1bnNpZ25lZCBsb25nIHRvIGdldCByaWQgb2YgdGhlIHhsaWJzIGRlcGVuZGVuY3kgaW4KLQkgIFhPdmVybGF5IChmaXhlcyAjMTM3MDA0KQotCi0yMDA0LTAzLTEzICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0JKiBnc3QvZWZmZWN0di9nc3RhZ2luZy5jOiAoZ3N0X2FnaW5ndHZfYmFzZV9pbml0KSwKLQkoZ3N0X2FnaW5ndHZfc2V0dXApOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jOiAoZ3N0X2RpY2V0dl9nZXRfdHlwZSksCi0JKGdzdF9kaWNldHZfYmFzZV9pbml0KSwgKGdzdF9kaWNldHZfY2xhc3NfaW5pdCksCi0JKGdzdF9kaWNldHZfc2V0dXApLCAoZ3N0X2RpY2V0dl9pbml0KSwgKGdzdF9kaWNldHZfZHJhdyk6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZGdlLmM6IChnc3RfZWRnZXR2X2dldF90eXBlKSwKLQkoZ3N0X2VkZ2V0dl9iYXNlX2luaXQpLCAoZ3N0X2VkZ2V0dl9jbGFzc19pbml0KSwgKGdzdF9lZGdldHZfaW5pdCksCi0JKGdzdF9lZGdldHZfc2V0dXApLCAoZ3N0X2VkZ2V0dl9yZ2IzMik6Ci0JKiBnc3QvZWZmZWN0di9nc3RlZmZlY3R2LmM6Ci0JKiBnc3QvZWZmZWN0di9nc3RxdWFyay5jOiAoZ3N0X3F1YXJrdHZfbGluayksIChnc3RfcXVhcmt0dl9pbml0KSwKLQkoZ3N0X3F1YXJrdHZfc2V0X3Byb3BlcnR5KToKLQkqIGdzdC9lZmZlY3R2L2dzdHJldi5jOiAoZ3N0X3JldnR2X2dldF90eXBlKSwKLQkoZ3N0X3JldnR2X2Jhc2VfaW5pdCksIChnc3RfcmV2dHZfY2xhc3NfaW5pdCksIChnc3RfcmV2dHZfaW5pdCksCi0JKGdzdF9yZXZ0dl9zZXR1cCksIChnc3RfcmV2dHZfcmdiMzIpOgotCSogZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5jOiAoZ3N0X3NoYWdhZGVsaWN0dl9nZXRfdHlwZSksCi0JKGdzdF9zaGFnYWRlbGljdHZfYmFzZV9pbml0KSwgKGdzdF9zaGFnYWRlbGljdHZfY2xhc3NfaW5pdCksCi0JKGdzdF9zaGFnYWRlbGljdHZfaW5pdCksIChnc3Rfc2hhZ2FkZWxpY3R2X3NldHVwKSwKLQkoZ3N0X3NoYWdhZGVsaWN0dl9yZ2IzMik6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6IChnc3RfdmVydGlnb3R2X2dldF90eXBlKSwKLQkoZ3N0X3ZlcnRpZ290dl9iYXNlX2luaXQpLCAoZ3N0X3ZlcnRpZ290dl9jbGFzc19pbml0KSwKLQkoZ3N0X3ZlcnRpZ290dl9zZXR1cCksIChnc3RfdmVydGlnb3R2X2luaXQpLCAoZ3N0X3ZlcnRpZ290dl9yZ2IzMik6Ci0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6Ci0JUG9ydCBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIHBvcnRlZCB0byB2aWRlb2ZpbHRlciBhbmQgZml4IHVwIHRoZSBjYXBzLgotCUNhbiBzb21lb25lIHdpdGggYSBiaWctZW5kaWFuIG1hY2hpbmUgcGxlYXNlIGNoZWNrIHRoZXNlPwotCi0yMDA0LTAzLTEwICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3NzaW5rX2luaXQpLCAoZ3N0X29zc3NpbmtfZ2V0X3RpbWUpLAotCShnc3Rfb3Nzc2lua19jaGFpbiksIChnc3Rfb3Nzc2lua19jaGFuZ2Vfc3RhdGUpOgotCSAgTGF0ZXN0IGZpeGVzIGZvciBBL1Ygc3luYywgYXVkaW8gcGxheWJhY2sgYW5kIHN1Y2guIFRoaXMgaXMgYWJvdXQKLQkgIGFsbC4uLiBNUEVHIHBsYXliYWNrIGlzc3VlcyBhcmUgbW9zdGx5IHJlbGF0ZWQgdG8gdGhlIGFzeW5jIGJ1aWxkLQotCSAgdXAgb2YgTVBFRyBmaWxlcywgSSBjYW5ub3QgZml4IHRoYXQuIFVzZSBiYXNpY2d0aHJlYWQgdG8gc29sdmUgaXQuCi0KLTIwMDQtMDMtMTAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQlwYXRjaCBmcm9tOiBTdGVwaGFuZSBMb2V1aWxsZXQKLQotCSogY29uZmlndXJlLmFjOgotCSAgdXNlIHBrZy1jb25maWcgZm9yIHNvbWUgbGlicmFyaWVzLCBmYWxsaW5nIGJhY2sgdG8gdGhlIG9sZCAubTQgd2F5Ci0gICAgICAgICAgKGZpeGVzICMxMzEyNzApCi0JKiBtNC9saWJkdi5tNDoKLSAgICAgICAgICByZW1vdmVkCi0KLTIwMDQtMDMtMTAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIHRvb2xzL01ha2VmaWxlLmFtOgotCSogdG9vbHMvTWFrZWZpbGUuaW46Ci0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC1tLm06Ci0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC4xLmluOgotCSogdG9vbHMvZ3N0LXZpc3VhbGlzZS1tLm06Ci0JKiB0b29scy9nc3QtdmlzdWFsaXNlLjE6Ci0JKiB0b29scy9nc3QtdmlzdWFsaXNlLjEuaW46Ci0gICAgICAgICAgcmVvcmdhbml6aW5nIGdlbmVyYXRpb24gb2Ygc2NyaXB0IHRvb2xzCi0KLTIwMDQtMDMtMTAgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzoKLQkgIERvd25ncmFkZSBwcmlvcml0eS4gV2UgcHJlZmVyIGZmZGVjX21wZWc0LgotCSogZXh0L2ZhYWQvZ3N0ZmFhZC5jOiAoZ3N0X2ZhYWRfc3JjZ2V0Y2FwcyksIChnc3RfZmFhZF9zcmNjb25uZWN0KSwKLQkoZ3N0X2ZhYWRfY2hhaW4pLCAoZ3N0X2ZhYWRfY2hhbmdlX3N0YXRlKToKLQkgIEZpeCBjYXBzbmVnby4gRG9lc24ndCB3b3JrIGZvciBzb21lIHNvdW5kcyBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLQkgIGEgNToxIHRvIHN0ZXJlbyBlbGVtZW50LgotCSogZXh0L3h2aWQvZ3N0eHZpZC5jOiAocGx1Z2luX2luaXQpOgotCSAgQWRkIHByaW9yaXR5LgotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3Nzc2lua19pbml0KSwgKGdzdF9vc3NzaW5rX2NoYWluKSwKLQkoZ3N0X29zc3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIEFkZCBkaXNjb250IGhhbmRsaW5nLgotCi0yMDA0LTAzLTA5ICBDb2xpbiBXYWx0ZXJzICA8d2FsdGVyc0B2ZXJidW0ub3JnPgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiBGaXggdHlwbyBpbiB3aWR0aCA4Ci0JY29udmVyc2lvbi4KLQotMjAwNC0wMy0wOSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXIuYzogKGdzdF9taXhlcl9jbGFzc19pbml0KToKLQkgIHRoZSBzaWduYWxzIHRha2UgMiBhcmd1bWVudHMKLQotMjAwNC0wMy0wOSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9yZXF1ZXN0X25ld19wYWQpLAotCShnc3RfYWxzYV9maXhhdGUpOiBBZGQgZml4YXRlIGZ1bmN0aW9uLiAgKGJ1ZyAjMTM2Njg2KQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5oOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfaW5pdCk6Ci0KLTIwMDQtMDMtMDkgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzogKGdzdF9taWttb2RfaW5pdCksIChnc3RfbWlrbW9kX2xvb3ApLAotCShnc3RfbWlrbW9kX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQvbWlrbW9kL2dzdG1pa21vZC5oOgotCSAgbWFrZSBtaWttb2QncyBsb29wIGZ1bmN0aW9uIG5vdCBsb29wIGluZmluaXRlbHkgYW5kIGNhbGwKLQkgIGdzdF9lbGVtZW50X3lpZWxkIGFueW1vcmUKLQkqIGdzdC9tb2RwbHVnL2dzdG1vZHBsdWcuY2M6Ci0JICBmaXggcGFkIG5lZ290aWF0aW9uIChmaXhlcyAjMTM2NTkwKQotCi0yMDA0LTAzLTA5ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9sY3MvTWFrZWZpbGUuYW06ICBGaXggc28gdGhhdCB0aGUgbGNzIGNvbG9yc3BhY2UgcGx1Z2luCi0JZG9lc24ndCBjb25mbGljdCB3aXRoIHRoZSBpbnRlcm5hbCBjb2xvcnNwYWNlIHBsdWdpbi4KLQkqIGdzdC1saWJzL2dzdC9hdWRpby9tYWtlX2ZpbHRlcjogIFVzZSBgYCBpbnN0ZWFkIG9mICQoKSB0bwotCXNhdGlzZnkgdGhlIGNyYXBweS1hc3Mgc2hlbGwgc2hpcHBlZCBieSBhIGNlcnRhaW4gdmVuZG9yLgotCSogZ3N0L3ZpZGVvZmlsdGVyL21ha2VfZmlsdGVyOiBzYW1lIChidWcgIzEzNTI5OSkKLQotMjAwNC0wMy0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOiBidW1wIG5hbm8gdG8gMQotCi09PT0gcmVsZWFzZSAwLjcuNiA9PT0KLQotMjAwNC0wMy0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmluOiByZWxlYXNpbmcgMC43LjYsICJUaGVyZSIKLQotMjAwNC0wMy0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogcGtnY29uZmlnL2dzdHJlYW1lci1wbGF5LXVuaW5zdGFsbGVkLnBjLmluOgotCSogcGtnY29uZmlnL2dzdHJlYW1lci1wbGF5LnBjLmluOgotICAgICAgICAgIHN5bmNocm9uaXplIHRoZSB0d28KLQotMjAwNC0wMy0wOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2NkcGFyYW5vaWEvZ3N0Y2RwYXJhbm9pYS5jOiAoY2RwYXJhbm9pYV9iYXNlX2luaXQpLAotCShjZHBhcmFub2lhX29wZW4pLCAoY2RwYXJhbm9pYV9ldmVudCk6Ci0JICBmaXgvYWRkIGVycm9yIGhhbmRsaW5nCi0JKiBwby9QT1RGSUxFUy5pbjoKLQkgIGFkZCBjZHBhcmFub2lhIHNvdXJjZQotCSogdG9vbHMvTWFrZWZpbGUuYW06Ci0JICBtYWtlIHNjcmlwdHMgZXhlY3V0YWJsZQotCi0yMDA0LTAzLTA5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvdm9yYmlzL01ha2VmaWxlLmFtOgotCSogc3lzL01ha2VmaWxlLmFtOgotCSAgcmVtb3ZlIGlkM3R5cGVzLCB2b3JiaXNmaWxlIGFuZCB4dmlkZW9zaW5rIGZyb20gdGhlIGJ1aWxkICgjMTMzNzgzKQotCi0yMDA0LTAzLTA4ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3JlYWRfaW5mbyk6Ci0JICBGaXggbWV0YWRhdGEgcmVhZCBjcmFzaCAoIzEzNjUzNykuCi0KLTIwMDQtMDMtMDggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8tcHJpdi5jOiAoZ21pX3NldF9taW1lKToKLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8uYzogKGdzdF9tZWRpYV9pbmZvX3JlYWQpOgotICAgICAgICAgIGFkZGluZyBtaW1lIHR5cGVzLCBmaXhpbmcgdGhlIG9uZS1zdG9wIGZ1bmN0aW9uCi0KLTIwMDQtMDMtMDggIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KLQotCSogZXh0L25hcy9uYXNzaW5rLmMgYW5kIC9leHQvbmFzL25hc3NpbmsuaDoKLQlNb3JlIE5BUyBsb3ZlIGZyb20gQXJ3ZWQgdm9uIE1lcmthdHoKLQlTbyBsZXRzIGFsbCBzaW5nICdDYW4geW91IGZlZWwgdGhlIE5BUyB0b25pZ2h0JwotCi0yMDA0LTAzLTA4ICBDaHJpc3RpYW4gU2NoYWxsZXIgPFVyYWV1c0Bnbm9tZS5vcmc+Ci0KLQkqIHRvb2xzL2dzdC1sYXVuY2gtZXh0LmluOgotCVJlcGxhY2Ugdm9yYmlzZmlsZSB3aXRoIG9nZ2RlbXV4L3ZvcmJpc2RlYy9hdWRpb2NvbnZlcnQKLQotMjAwNC0wMy0wOCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChnc3RfbXBlZzJkZWNfYmFzZV9pbml0KSwKLQkoZ3N0X21wZWcyZGVjX2luaXQpOgotICAgICAgICByZW1vdmUgdGhlIHVzZXJfZGF0YSBwYWQgZm9yIG5vdywgYmVjYXVzZSBpdCBpcyBiZWluZyB1c2VkIGluCi0gICAgICAgIGZpeGF0aW5nIGNhdXNpbmcgTVBFRyBwbGF5YmFjayB0byBmaXhhdGUgb24gMTAwMCBIeiBmb3IgcGxheWJhY2suCi0gICAgICAgIElmIHNvbWVvbmUga25vd3MgaG93IHRvIGZpeCB0aGlzIHByb3Blcmx5LCBwbGVhc2UgZG8uCi0KLTIwMDQtMDMtMDggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfZ2V0X2RlbGF5KSwKLQkoZ3N0X29zc3NpbmtfZ2V0X3RpbWUpOgotICAgICAgICBhZGQgYSB3YXJuaW5nLCBJTU8gdGhpcyB3b24ndCBnZXQgdHJpZ2dlcmVkIGFueW1vcmUsIHJlbW92ZSBsYXRlcgotCi0yMDA0LTAzLTA3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfdmlkZW9fY2Fwcyk6ICBBZGRlZCBDaW5lcGFrCi0JZm9ybWF0IChidWcgIzEzNjQ3MCkKLQotMjAwNC0wMy0wNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWxpYnMvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8tcHJpdi5jOiAoZm91bmRfdGFnX2NhbGxiYWNrKSwKLQkoZXJyb3JfY2FsbGJhY2spLCAoZ3N0X21lZGlhX2luZm9fZXJyb3JfY3JlYXRlKSwKLQkoZ3N0X21lZGlhX2luZm9fZXJyb3JfZWxlbWVudCksIChnbWlwX2luaXQpLCAoZ21pcF9yZXNldCksCi0JKGdtaV9jbGVhcl9kZWNvZGVyKSwgKGdtaXBfZmluZF90eXBlX3ByZSksIChnbWlwX2ZpbmRfdHlwZSk6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXByaXYuaDoKLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8tdGVzdC5jOiAobWFpbik6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLmM6IChnc3RfbWVkaWFfaW5mb19pbml0KSwKLQkoZ3N0X21lZGlhX2luZm9fY2xhc3NfaW5pdCksIChnc3RfbWVkaWFfaW5mb19pbnN0YW5jZV9pbml0KSwKLQkoZ3N0X21lZGlhX2luZm9fc2V0X3NvdXJjZSksIChnc3RfbWVkaWFfaW5mb19yZWFkX3dpdGhfaWRsZXIpLAotCShnc3RfbWVkaWFfaW5mb19yZWFkX2lkbGVyKSwgKGdzdF9tZWRpYV9pbmZvX3JlYWQpOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby5oOgotCWZpeGVkLCBzaG91bGQgd29yayBub3cKLQotMjAwNC0wMy0wNyAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAZ25vbWUub3JnPgotCi0JKiBleHQvbmFzL25hc3NpbmsuYzoKLQlBIGJ1bmNoIG9mIE5BUyBmaXhlcyBmcm9tIEFyd2VkIHZvbiBNZXJrYXR6Ci0KLTIwMDQtMDMtMDYgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pLAotCShxdGRlbXV4X3BhcnNlX3RyYWspOgotCSAgRml4IGNyYXNoIChqIG1pZ2h0IGJlIGdyZWF0ZXIgdGhhbiBuX3NhbXBsZXMsIGluIHdoaWNoIGNhc2Ugd2UncmUKLQkgIHdyaXRpbmcgb3V0c2lkZSB0aGUgYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgYXJyYXkpIGFuZCBtZW1sZWFrLgotCi0yMDA0LTAzLTA2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3NzaW5rX2NoYWluKToKLQkgIEFuZCBhbm90aGVyIGNhbGxlciB0aGF0IGNvdWxkbid0IGhhbmRsZSBkZWxheSA8IDAgKHVuc2lnbmVkCi0JICBpbnRlZ2VyIG92ZXJmbG93KS4gVmlkZW8gbm93IGNvbnRpbnVlcyBwbGF5aW5nIG9uIGFuIGF1ZGlvCi0JICBidWZmZXIgdW5kZXJydW4sIGFuZCB0aGUgY2xvY2sgY29udGludWVzIHdvcmtpbmcuIEF1ZGlvIHN0aWxsCi0JICBzdGFsbHMuCi0KLTIwMDQtMDMtMDYgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfZ2V0X2RlbGF5KSwKLQkoZ3N0X29zc3NpbmtfZ2V0X3RpbWUpOgotCSAgZ2V0X2RlbGF5KCkgbWF5IHJldHVybiB2YWx1ZXMgbG93ZXIgdGhhbiAwLiBJbiB0aG9zZSBjYXNlcywgd2UKLQkgIHNob3VsZCBub3QgYWN0dWFsbHkgY2FzdCB0byAqdW5zaWduZWQqIGludDY0LCB0aGF0IHdpbGwgYnJlYWsKLQkgIHN0dWZmIGhvcnJpYmx5LiBJbiBteSBjYXNlLCBpdCBzY3Jld2VkIHVwIEEvViBzeW5jIGluIG1vdmllcwotCSAgaW4gdG90ZW0gcmF0aGVyIGJhZGx5LgotCi0yMDA0LTAzLTA2ICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCSogZXh0L2ZhYWMvZ3N0ZmFhYy5jOiAoZ3N0X2ZhYWNfY2hhaW4pOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOiAoZ3N0X2ZsYWNfdGFnX2NoYWluKToKLQkqIGV4dC9saWJwbmcvZ3N0cG5nZW5jLmM6ICh1c2VyX3dyaXRlX2RhdGEpOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzogKGdzdF9taWttb2RfbG9vcCk6Ci0JKiBnc3QvYWMzcGFyc2UvZ3N0YWMzcGFyc2UuYzogKGdzdF9hYzNwYXJzZV9jaGFpbik6Ci0JKiBnc3QvbXBlZzJzdWIvZ3N0bXBlZzJzdWJ0LmM6IChnc3RfbXBlZzJzdWJ0X2NoYWluX3N1YnRpdGxlKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdHJmYzIyNTBlbmMuYzogKGdzdF9yZmMyMjUwX2VuY19hZGRfc2xpY2UpOgotCUZpeCBzZXZlcmFsIG1pc3VzZSBvZiBnc3RfYnVmZmVyX21lcmdlIChpdCBkb2Vzbid0IHRha2Ugb3duZXJzaGlwCi0Jb2YgYW55IGJ1ZmZlciksIHNob3VsZCBmaXggc29tZSBsZWFrcy4gSSBob3BlIEkgZGlkbid0IHVucmVmIGJ1ZmZlcnMKLQl0aGF0IHNob3VsZG4ndCBiZS4uLgotCi0yMDA0LTAzLTA2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXByaXYuYzogKGhhdmVfdHlwZV9jYWxsYmFjayksCi0JKGRlZXBfbm90aWZ5X2NhbGxiYWNrKSwgKHRhZ19mbGFnX3Njb3JlKSwgKGZvdW5kX3RhZ19jYWxsYmFjayksCi0JKGVycm9yX2NhbGxiYWNrKSwgKGdtaV9yZXNldCksIChnbWlfc2Vla190b190cmFjayksCi0JKGdtaV9nZXRfZGVjb2RlciksIChnbWlfc2V0X21pbWUpLCAoZ21pcF9maW5kX3R5cGVfcHJlKSwKLQkoZ21pcF9maW5kX3R5cGVfcG9zdCksIChnbWlwX2ZpbmRfc3RyZWFtX3Bvc3QpLAotCShnbWlwX2ZpbmRfdHJhY2tfc3RyZWFtaW5mb19wb3N0KToKLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8tcHJpdi5oOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby10ZXN0LmM6IChwcmludF90YWcpLAotCShpbmZvX3ByaW50KSwgKG1haW4pOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby5jOgotCShnc3RfbWVkaWFfaW5mb19lcnJvcl9jcmVhdGUpLCAoZ3N0X21lZGlhX2luZm9fZXJyb3JfZWxlbWVudCksCi0JKGdzdF9tZWRpYV9pbmZvX2luc3RhbmNlX2luaXQpLCAoZ3N0X21lZGlhX2luZm9fZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X21lZGlhX2luZm9fbmV3KSwgKGdzdF9tZWRpYV9pbmZvX3NldF9zb3VyY2UpLAotCShnc3RfbWVkaWFfaW5mb19yZWFkX2lkbGVyKSwgKGdzdF9tZWRpYV9pbmZvX3JlYWQpOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby5oOgotICAgICAgICAgIGZpcnN0IHBhc3MgYXQgbWFraW5nIHRoaXMgd29yayBhZ2Fpbi4gIFRoaXMgc2VlbXMgdG8gd29yayBvbgotICAgICAgICAgIHRhZ2dlZCBvZ2cvdm9yYmlzIGFuZCBtcDMgZmlsZXMuCi0KLTIwMDQtMDMtMDYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2NoYWluKToKLQkgIGZpeCBodWdlIGxlYWs6IGdzdF9idWZmZXJfbWVyZ2UgZG9lc24ndCB1bnJlZiB0aGUgZmlyc3QgYXJndW1lbnQKLQkgIGl0c2VsZi4KLQotMjAwNC0wMy0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfY2xhc3NfaW5pdCksIChnc3RfbWFkX3VwZGF0ZV9pbmZvKToKLSAgICAgICAgICByZXBvcnQgbGF5ZXIvbW9kZS9lbXBoYXNpcwotCi0yMDA0LTAzLTA2ICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfY2hhaW4pOiBmaXhlZCBjYXBzIGxlYWsKLQotMjAwNC0wMy0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19wYWRfbmV3KToKLSAgICAgICAgICBzaWduYWwgc2VyaWFsCi0KLTIwMDQtMDMtMDYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC92b3JiaXMvdm9yYmlzLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19nZXRfZm9ybWF0cyksCi0JKGdzdF92b3JiaXNfZGVjX2luaXQpLCAodm9yYmlzX2RlY19ldmVudCk6Ci0gICAgICAgIGFkZCBkZWJ1ZyBjYXRlZ29yeQotICAgICAgICBtYWtlIHZvcmJpc2RlYyBoYW5kbGUgX0JZVEUgYW5kIF9USU1FIHF1ZXJpZXMKLQotMjAwNC0wMy0wNiAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NoYWluKTogc2VuZCB0aGUgYXZlcmFnZSBiaXRyYXRlIHJlYWQKLQkgIGZyb20gdGhlIHhpbmcgaGVhZGVyCi0KLTIwMDQtMDMtMDYgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2dldGNhcHMpLAotCShnc3RfYXVkaW9fY29udmVydF9saW5rKSwgKGdzdF9hdWRpb19jb252ZXJ0X2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2J1ZmZlcl9mcm9tX2RlZmF1bHRfZm9ybWF0KToKLQkgIGRvIGNvbnZlcnNpb25zIGZyb20vdG8gZmxvYXQgY29ycmVjdGx5LCBmaXggc29tZSBjYXBzIG5lZ28gZXJyb3JzLAotCSAgZXhwb3J0IGNvcnJlY3Qgc3VwcG9ydGVkIGNhcHMgaW4gdGVtcGxhdGUgYW5kIGdldGNhcHMsIHVzZSBjb3JyZWN0Ci0JICBjYXBzIGluIHRyeV9zZXRfY2FwcyBmdW5jdGlvbnMKLQotMjAwNC0wMy0wNiAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQlGb3Igc29tZSByZWFzb24sIEkgb25seSBjb21taXR0ZWQgYSBDaGFuZ2VMb2cgZW50cnkgeWVzdGVyZGF5IGFuZAotCW5vdCB0aGUgY29ycmVzcG9uZGluZyBjb2RlLi4uCi0JKiBleHQvbWFkL2dzdG1hZC5jOiBGaXggZGV0ZWN0aW9uIG9mIFhpbmcgaGVhZGVycwotCSogZ3N0L3RhZ3MvZ3N0aWQzdGFnLmM6IENoYW5nZXMgdG8gc3VwcG9ydCBUTEVOIHRhZ3MKLQotMjAwNC0wMy0wNiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2dldF9wYWRfYnlfcGFkKSwKLQkoZ3N0X29nZ19kZW11eF9zcmNfcXVlcnkpOgotCSAgbWFrZSBzdXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIG5vIGN1cnJlbnQgY2hhaW4KLQkgIGdyYWNlZnVsbHkuCi0KLTIwMDQtMDMtMDUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2FhbGliL2dzdGFhc2luay5jOiAoZ3N0X2Fhc2lua19maXhhdGUpLCAoZ3N0X2Fhc2lua19pbml0KToKLQlBZGQgZml4YXRlIGZ1bmN0aW9uLiAoYnVnICMxMzExMjgpCi0JKiBleHQvc2RsL3NkbHZpZGVvc2luay5jOiAoZ3N0X3NkbHZpZGVvc2lua19pbml0KSwKLQkoZ3N0X3NkbHZpZGVvc2lua19maXhhdGUpOiAgQWRkIGZpeGF0ZSBmdW5jdGlvbi4KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChnc3RfYXVkaW9fY29udmVydF9saW5rKToKLQlGaXggYXR0ZW1wdCB0byBwcmludCBhIG5vbi1wb2ludGVyIHVzaW5nIEdTVF9QVFJfRk9STUFULgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcGFyc2VfZm10KToKLQlGaXggbWlzc2luZyBicmVhayB0aGF0IHdhcyBjYXVzaW5nIHVsYXcgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKLQlyYXcgaW50LgotCi0yMDA0LTAzLTA1ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdHJmYzIyNTBlbmMuYzogKGdzdF9yZmMyMjUwX2VuY19hZGRfc2xpY2UpOgotCUZpeCBjb2RlIHRoYXQgaWdub3JlcyByZXR1cm4gdmFsdWUgb2YgZ3N0X2J1ZmZlcl9tZXJnZSgpLgotCShidWcgIzExNDU2MCkKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF9kZXNjcmFtYmxlX3NlZ21lbnQpOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0cmZjMjI1MGVuYy5jOiAoZ3N0X3JmYzIyNTBfZW5jX2FkZF9zbGljZSk6IHNhbWUKLQkqIHRlc3RzdWl0ZS9nc3QtbGludDogIENoZWNrIGZvciBhYm92ZS4KLQotMjAwNC0wMy0wNSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19nZXQpOiAgQ2hlY2sgZm9yIHVuZml4ZWQKLQljYXBzIGFuZCB0aHJvdyBhbiBlbGVtZW50IGVycm9yLiAgKGJ1ZyAjMTM2MzM0KQotCi0yMDA0LTAzLTA1ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX2luaXQpLCAoZ3N0X2ZhYWRfc3JjZ2V0Y2FwcyksCi0JKGdzdF9mYWFkX2NoYWluKTogRml4IG5lZ290aWF0aW9uLgotCSogZXh0L2xpYnJmYi9nc3RyZmJzcmMuYzogKGdzdF9yZmJzcmNfaGFuZGxlX3NyY19ldmVudCk6IEFkZAotCWtleSBhbmQgYnV0dG9uIGV2ZW50cy4KLQkqIGdzdC1saWJzL2dzdC9mbG9hdGNhc3QvZmxvYXRjYXN0Lmg6IEZpeCBhIG1pbm9yIGJ1ZyBpbiB0aGlzCi0JZHVuZyBoZWFwIG9mIGNvZGUuCi0JKiBnc3QtbGlicy9nc3QvZ2NvbmYvZ3N0cmVhbWVyLWdjb25mLXVuaW5zdGFsbGVkLnBjLmluOiBnc3RnY29uZgotCWRlcGVuZHMgb24gZ2NvbmYKLQkqIGdzdC1saWJzL2dzdC9nY29uZi9nc3RyZWFtZXItZ2NvbmYucGMuaW46IHNhbWUKLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuYzogKGdzdF9wbGF5X3BpcGVsaW5lX3NldHVwKSwKLQkoZ3N0X3BsYXlfdmlkZW9fZml4YXRlKSwgKGdzdF9wbGF5X2F1ZGlvX2ZpeGF0ZSk6IEFkZCBhIGZpeGF0ZQotCWZ1bmN0aW9uIHRvIGVuY291cmFnZSBiZXR0ZXIgbmVnb3RpYXRpb24sIHBhcnRpY3VsYXJseSBiZXR3ZWVuCi0JYXVkaW9jb252ZXJ0IGFuZCBvc3NzaW5rLgotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2NoYWluKToKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHF0ZGVtdXhfcGFyc2VfdHJhayk6ICBNYWtlIHNvbWUgZGVidWdnaW5nCi0JbW9yZSBpbXBvcnRhbnQuCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogIEZpeCBtaXN0YWtlIGluIGZsYXNoCi0JdHlwZWZpbmRpbmcuCi0JKiBnc3QvdmJpZGVjL3ZiaXNjcmVlbi5jOiAgQWRkIGdsaWIgaGVhZGVyCi0JKiBwa2djb25maWcvZ3N0cmVhbWVyLXBsYXkucGMuaW46ICBEZXBlbmRzIG9uIGdzdC1pbnRlcmZhY2VzLgotCi0yMDA0LTAzLTA2ICBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZXh0L21hZC9nc3RtYWQuYzogRml4IGRldGVjdGlvbiBvZiBYaW5nIGhlYWRlcnMKLQkqIGdzdC90YWdzL2dzdGlkM3RhZy5jOiBDaGFuZ2VzIHRvIHN1cHBvcnQgVExFTiB0YWdzCi0KLTIwMDQtMDMtMDYgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX3BhcnNlX2ZtdCksCi0JKGdzdF93YXZwYXJzZV9wYWRfY29udmVydCksIChnc3Rfd2F2cGFyc2VfcGFkX3F1ZXJ5KToKLSAgICAgICAgICBkZWJ1ZyB1cGRhdGVzCi0KLTIwMDQtMDMtMDYgIENocmlzdG9waGUgRmVyZ2VhdSAgPHRldWZAZ25vbWUub3JnPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X21hZF9pZDNfdG9fdGFnX2xpc3QpOgotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaW5pdCksIChpc194aGVhZCksCi0JKG1wZzEyM19wYXJzZV94aW5nX2hlYWRlciksIChnc3RfbWFkX2NoYWluKTogcGFyc2UgWGluZyBoZWFkZXIgaW4gdmJyCi0JZmlsZXMsIGFuZCByZXBvcnQgdGhlIHBhcnNlZCBsZW5ndGggYXMgYSBHU1RfVEFHX0RVUkFUSU9OIHRhZy4KLQkqIGdzdC90YWdzL2dzdGlkM3RhZy5jOiBzdXBwb3J0IFRMRU4gKGR1cmF0aW9uKSB0YWcKLQotMjAwNC0wMy0wNSAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfY2hhbm5lbHMpOgotCSAgY29udmVydCBjaGFubmVscyBjb3JyZWN0bHkuIGNvbnZlcnQgY29ycmVjdGx5IHRvIHVuc2lnbmVkLgotCi0yMDA0LTAzLTA1ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jaGFuZ2Vfc3RhdGUpOiBDaGVjayBpZgotCXdlIGhhdmUgYSB3aW5kb3cgYmVmb3JlIGNsZWFyaW5nIGl0LgotCi0yMDA0LTAzLTA1ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jaGFuZ2Vfc3RhdGUpOiBDaGVjayBpZiB3ZQotCWhhdmUgYSB3aW5kb3cgYmVmb3JlIGNsZWFyaW5nIGl0LgotCi0yMDA0LTAzLTA1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnY29uZi9nc3RyZWFtZXIuc2NoZW1hcy5pbjoKLQkqIGdzdC1saWJzL2dzdC9nY29uZi9NYWtlZmlsZS5hbToKLSAgICAgICAgICB2ZXJzaW9uIGluc3RhbGxhdGlvbiBwYXRoIHRoZSBzYW1lIHdheSBhcyBmb3IgMC42Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWludGVyZmFjZXMtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWxpYnMtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLXBsYXktdW5pbnN0YWxsZWQucGMuaW46Ci0gICAgICAgICAgcmVtb3ZlIGNvbW1lbnQgdGhhdCB3YXMgZml4ZWQKLQotMjAwNC0wMy0wNSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9nZXRfc3JjX2Zvcm1hdHMpLAotCShnc3RfcXRkZW11eF9zcmNfY29udmVydCksIChnc3RfcXRkZW11eF9nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X3F0ZGVtdXhfZ2V0X2V2ZW50X21hc2spLCAoZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19xdWVyeSksCi0JKGdzdF9xdGRlbXV4X2hhbmRsZV9zcmNfZXZlbnQpLCAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSk6Ci0JQWRkIHByb3RvdHlwZSBjb2RlIGZvciBoYW5kbGluZyBzZWVraW5nIGFuZCBxdWVyeWluZy4KLQotMjAwNC0wMy0wNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKG1haW4pOgotCSAgSW5pdGlhbGl6ZSB2YXJpYWJsZXMgdG8gTlVMTC4gUHJldmVudHMgYSBzZWdmYXVsdCBiZWNhdXNlIHRoZQotCSAgKHVuaW5pdGlhbGl6ZWQpIHZhcmlhYmxlIGlzIG5vdCBOVUxMLCByZXN1bHRpbmcgaW4gYSBjcmFzaCBvbgotCSAgdHJ5aW5nIHRvIHJlYWNoIGVycm9yLT5tZXNzYWdlLgotCi0yMDA0LTAzLTA1ICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6Ci0JKGdzdF9hdWRpb19jb252ZXJ0X2J1ZmZlcl90b19kZWZhdWx0X2Zvcm1hdCk6Ci0JbWFrZSBmbG9hdD0+aW50IGNvbnZlcnNpb24gd29yayBjb3JyZWN0bHkgZXZlbiBpbiBjb3JuZXJjYXNlcy4KLQotMjAwNC0wMy0wNCAgRGF2aWQgSS4gTGVobiAgPGRsZWhuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZGViaWFuL1JFQURNRS5EZWJpYW46Ci0JKiBkZWJpYW4vYnVpbGQtZGVwczoKLQkqIGRlYmlhbi9jaGFuZ2Vsb2c6Ci0JKiBkZWJpYW4vY29udHJvbDoKLQkqIGRlYmlhbi9jb250cm9sLmluOgotCSogZGViaWFuL2NvcHlyaWdodDoKLQkqIGRlYmlhbi9nc3RyZWFtZXItYTUyZGVjLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1hYS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItYWxzYS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItYWxzYS5tYW5wYWdlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItYXJ0cy5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItYXJ0c2QuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLWF1ZGlvZmlsZS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItYXZpZmlsZS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItY2RwYXJhbm9pYS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItY29sb3JzcGFjZS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItZG9jLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1kdi5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItZHZkLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1lc2QuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLWZlc3RpdmFsLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1mbGFjLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1nY29uZi5jb25mZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLWdjb25mLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1nY29uZi5wb3N0aW5zdDoKLQkqIGRlYmlhbi9nc3RyZWFtZXItZ25vbWV2ZnMuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLWdzbS5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItaHR0cC5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItamFjay5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItanBlZy5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItbWFkLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1taWttb2QuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLW1pc2MuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLW1wZWcyZGVjLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1vc3MuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLXBsdWdpbi1hcHBzLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1wbHVnaW4tYXBwcy5tYW5wYWdlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItcGx1Z2luLWxpYnMtZGV2LmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci1wbHVnaW4tbGlicy5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItcGx1Z2luLXRlbXBsYXRlLnBvc3RpbnN0OgotCSogZGViaWFuL2dzdHJlYW1lci1wbHVnaW4tdGVtcGxhdGUucG9zdHJtOgotCSogZGViaWFuL2dzdHJlYW1lci1zZGwuZmlsZXM6Ci0JKiBkZWJpYW4vZ3N0cmVhbWVyLXNpZC5maWxlczoKLQkqIGRlYmlhbi9nc3RyZWFtZXItdm9yYmlzLmZpbGVzOgotCSogZGViaWFuL2dzdHJlYW1lci14LmZpbGVzOgotCSogZGViaWFuL21rLmNvbnRyb2w6Ci0JKiBkZWJpYW4vcnVsZXM6Ci0JRGViaWFuIHBhY2thZ2UgaW5mbyBub3QgbWFpbnRhaW5lZCBoZXJlLgotCi0yMDA0LTAzLTA0ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX2NsYXNzX2luaXQpOgotCSogZXh0L2NkYXVkaW8vZ3N0Y2RhdWRpby5jOiAoZ3N0X2NkYXVkaW9fY2xhc3NfaW5pdCk6Ci0JKiBleHQvY2RwYXJhbm9pYS9nc3RjZHBhcmFub2lhLmM6IChjZHBhcmFub2lhX2NsYXNzX2luaXQpOgotCSogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOiAoZ3N0X2RpdnhlbmNfY2xhc3NfaW5pdCk6Ci0JKiBleHQvZHZkbmF2L2R2ZG5hdnNyYy5jOiAoZHZkbmF2c3JjX2NsYXNzX2luaXQpOgotCSogZXh0L2dzbS9nc3Rnc21lbmMuYzogKGdzdF9nc21lbmNfY2xhc3NfaW5pdCk6Ci0JKiBleHQvanBlZy9nc3RqcGVnZW5jLmM6IChnc3RfanBlZ2VuY19jbGFzc19pbml0KToKLQkqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uYzogKGdzdF9tdXNpY2JyYWluel9jbGFzc19pbml0KToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2NsYXNzX2luaXQpOgotCSogZXh0L3h2aWQvZ3N0eHZpZGVuYy5jOiAoZ3N0X3h2aWRlbmNfY2xhc3NfaW5pdCk6Ci0JKiBnc3QtbGlicy9nc3QvY29sb3JiYWxhbmNlL2NvbG9yYmFsYW5jZS5jOgotCShnc3RfY29sb3JfYmFsYW5jZV9jbGFzc19pbml0KToKLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvY29sb3JiYWxhbmNlY2hhbm5lbC5jOgotCShnc3RfY29sb3JfYmFsYW5jZV9jaGFubmVsX2NsYXNzX2luaXQpOgotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVyLmM6IChnc3RfbWl4ZXJfY2xhc3NfaW5pdCk6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9jbGFzc19pbml0KToKLQkqIGdzdC1saWJzL2dzdC9wcm9wZXJ0eXByb2JlL3Byb3BlcnR5cHJvYmUuYzoKLQkoZ3N0X3Byb3BlcnR5X3Byb2JlX2lmYWNlX2luaXQpOgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL3R1bmVyLmM6IChnc3RfdHVuZXJfY2xhc3NfaW5pdCk6Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvdHVuZXJjaGFubmVsLmM6Ci0JKGdzdF90dW5lcl9jaGFubmVsX2NsYXNzX2luaXQpOgotCSogZ3N0LWxpYnMvZ3N0L3hvdmVybGF5L3hvdmVybGF5LmM6IChnc3RfeF9vdmVybGF5X2Jhc2VfaW5pdCk6Ci0JKiBnc3QvY3V0dGVyL2dzdGN1dHRlci5jOiAoZ3N0X2N1dHRlcl9jbGFzc19pbml0KToKLQkqIGdzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYzogKGdzdF92ZXJ0aWdvdHZfY2xhc3NfaW5pdCk6Ci0JKiBzeXMvY2Ryb20vZ3N0Y2RwbGF5ZXIuYzogKGNkcGxheWVyX2NsYXNzX2luaXQpOgotCSogc3lzL2R4cjMvZHhyM3NwdXNpbmsuYzogKGR4cjNzcHVzaW5rX2NsYXNzX2luaXQpOgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NpbmsuYzogKGdzdF92NGxtanBlZ3NpbmtfY2xhc3NfaW5pdCk6Ci0JKiBzeXMvdjRsL2dzdHY0bG1qcGVnc3JjLmM6IChnc3RfdjRsbWpwZWdzcmNfY2xhc3NfaW5pdCk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19jbGFzc19pbml0KToKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2NsYXNzX2luaXQpOgotICAgICAgICAgIGZpeCBzaWduYWxzIHRvIHVzZSAtIGluc3RlYWQgb2YgXwotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaDoKLQkqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmg6Ci0gICAgICAgICAgZml4IGhlYWRlciByZW5hbWUKLQotMjAwNC0wMy0wNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiB0ZXN0c3VpdGUvZ3N0LWxpbnQ6ICBBZGQgYSBjaGVjayBmb3IgYmFkIHNpZ25hbCBuYW1lcy4KLQotMjAwNC0wMy0wNCAgPGtvc3RAaW1uLmh0d2stbGVpcHppZy5kZT4KLQotCXJldmlld2VkIGJ5IERhdmlkIFNjaGxlZWYKLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6IChnc3RfZ2FtbWFfcmdiMzIpOiBGaXggdHlwbyB0aGF0Ci0JbW9kaWZpZWQgdGhlIGFscGhhIGNoYW5uZWwgYW5kIGNhdXNlZCBhIHdhcm5pbmcuIChidWcgIzEzNjE5MikKLQotMjAwNC0wNC0wMyAgQ2hyaXN0aWFuIFNjaGFsbGVyIDxVcmFldXNAZ25vbWUub3JnPgotCi0JKiBnc3QtcGx1Z2lucy5zcGVjLmluOgotCUNoYW5nZSBuYW1lcyBvZiBwbHVnaW5zIHRvIGFjdHVhbGx5IGJlIGNvcnJlY3QuIFRyeSB0byBrZWVwIHRoaW5ncwotCWFscGhhYmV0aWNhbCB0byBhdm9pZCBnZXR0aW5nIGJlYXQgdXAgYnkgVGhvbWFzCi0KLTIwMDQtMDMtMDMgIEp1bGllbiBNT1VUVEUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvZ2NvbmYvZ2NvbmYuYzogKGdzdF9nY29uZl9nZXRfZGVmYXVsdF92aWRlb19zaW5rKToKLQlVc2luZyB4aW1hZ2VzaW5rIGFzIGEgZGVmYXVsdCBpZiBubyBnY29uZiBrZXkgZm91bmQuIFdlIHNob3VsZAotCXByb2JhYmx5IGNvbnNpZGVyIHVzaW5nIGFsc2FzaW5rIGluc3RlYWQgb2Ygb3Nzc2luayBmb3IgdGhlIGF1ZGlvCi0JcGFydC4KLQotMjAwNC0wMy0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgZml4IC0td2l0aC1wbHVnaW5zLCBkb24ndCB0aGluayBpdCBldmVyIHdvcmtlZCBiZWZvcmUKLQkqIGdzdC1wbHVnaW5zLnNwZWMuaW46Ci0gICAgICAgICAgZXZlbiBtb3JlIHVwZGF0ZXMKLQotMjAwNC0wMy0wMSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3NkbC9zZGx2aWRlb3NpbmsuaDoKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5oOgotCSogc3lzL3h2aWRlby94dmlkZW9zaW5rLmg6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5oOgotCSAgRml4IGZvciBtb3ZlIG9mIGdzdHZpZGVvc2luay5oIC0+IHZpZGVvc2luay5oLgotCi0yMDA0LTAzLTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QveHdpbmRvd2xpc3RlbmVyL01ha2VmaWxlLmFtOgotCSAgdGhpcyBpcyBhIHBsdWdpbiBsaWJyYXJ5LCBub3QgYSBsaWJyYXJ5Ci0KLTIwMDQtMDMtMDEgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogQVVUSE9SUzogIEFkZGVkIHNvbWUgbmFtZXMuICBBZGQgeW91cnNlbGYgaWYgeW91J3JlIHN0aWxsCi0JbWlzc2luZy4KLQotMjAwNC0wMy0wMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBNQUlOVEFJTkVSUzogQWRkCi0KLTIwMDQtMDMtMDEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1wbHVnaW5zLnNwZWMuaW46IGNsZWFuIHVwIHNwZWMgZmlsZQotCi0yMDA0LTAzLTAxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvdmlkZW8vTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmM6Ci0JKiBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmg6Ci0gICAgICAgICAgcmVuYW1lIGdzdHZpZGVvc2luay5oIHRvIHZpZGVvc2luay5oIHRvIG1hdGNoIG90aGVyIGhlYWRlcnMKLQkqIGdzdC9taXhtYXRyaXgvTWFrZWZpbGUuYW06Ci0gICAgICAgICAgZml4IHBsdWdpbiBmaWxlbmFtZQotCSogZ3N0L3RhZ3MvTWFrZWZpbGUuYW06IGZpeCBwbHVnaW4gZmlsZW5hbWUKLQotMjAwNC0wMy0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3RhZ3MvTWFrZWZpbGUuYW06IGZpeCBwbHVnaW4gZmlsZW5hbWUKLQotMjAwNC0wMy0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKGdvdF90aW1lX3RpY2spLCAobWFpbik6Ci0JICBhZGQgZXJyb3IgaGFuZGxlcgotICAgICAgICAgIGRpc3BsYXkgdGltZV90aWNrIG1vcmUgcmVhZGFibHkKLQkqIGdzdC9taXhtYXRyaXgvTWFrZWZpbGUuYW06Ci0gICAgICAgICAgZml4IHBsdWdpbiBmaWxlIG5hbWUKLQotMjAwNC0wMi0yOSAgQ2hyaXN0b3BoZSBGZXJnZWF1ICA8dGV1ZkBnbm9tZS5vcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfcHJvYmUpLAotCShkZXZpY2VfY29tYmluYXRpb25fYXBwZW5kKSwgKGdzdF9vc3NlbGVtZW50X2NsYXNzX3Byb2JlX2RldmljZXMpOgotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50Lmg6Ci0JICBSZXdvcmtlZCBlbnVtZXJhdGlvbiBvZiBvc3MgZHNwcyBhbmQgbWl4ZXJzIHNvIHRoYXQgZ3N0LW1peGVyIHdvcmtzCi0JICBvbiBteSBzeXN0ZW0gdXNpbmcgYWxzYSBvc3MgZW11bGF0aW9uLCBmaXhlcyBidWcgIzEzNTU5NwotCi0yMDA0LTAyLTI5ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdmlkZW9kcm9wL2dzdHZpZGVvZHJvcC5jOiAoZ3N0X3ZpZGVvZHJvcF9pbml0KSwKLQkoZ3N0X3ZpZGVvZHJvcF9jaGFpbiksIChnc3RfdmlkZW9kcm9wX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3QvdmlkZW9kcm9wL2dzdHZpZGVvZHJvcC5oOgotCSAgV29yayBiYXNlZCBvbiB0aW1lc3RhbXAgb2YgaW5wdXQgZGF0YSwgbm90IGJhc2VkIG9uIHRoZSBleHBlY3RlZAotCSAgZnJhbWVyYXRlIGZyb20gdGhlIGlucHV0LiBUaGUgY29uc2VxdWVuY2UgaXMgdGhhdCB0aGlzIGVsZW1lbnQgbm93Ci0JICBub3Qgb25seSBzY2FsZXMgZnJhbWVyYXRlcywgYnV0IGFsc28gZnVuY3Rpb25zIGFzIGEgZnJhbWVyYXRlCi0JICBjb3JyZWN0b3Igb3IgZnJhbWVyYXRlIHN0YWJpbGl6ZXIvY29uc3RhbnRpemVyLgotCi0yMDA0LTAyLTI3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQlwYXRjaGVzIGZyb20gam1tdkBtZW50YS5uZXQgKEp1bGlvIE0uIE1lcmlubyBWaWRhbCkKLQotCSogZ3N0L2ludGVybGVhdmUvZGVpbnRlcmxlYXZlLmM6IChkZWludGVybGVhdmVfY2hhaW4pOiBGaXgKLQlHU1RfRUxFTUVOVF9FUlJPUiBjYWxsIChidWcgIzEzNTYzNCkKLQkqIGdzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuYzogKGludGVybGVhdmVfYnVmZmVyZWRfbG9vcCksCi0JKGludGVybGVhdmVfYnl0ZXN0cmVhbV9sb29wKTogRG9uJ3QgdXNlIGFsbG9jYSgpIChidWcgIzEzNTY0MCkKLQkqIHN5cy9jZHJvbS9nc3RjZHBsYXllcl9pb2N0bF9ic2QuaDogRml4IGlvY3RscyBvbiBOZXRCU0QgKGJ1ZyAjMTM1NjQ1KQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3Nzc2lua19nZXRfZGVsYXkpLAotCShnc3Rfb3Nzc2lua19jaGFpbik6IEZpeCBpb2N0bHMgb24gTmV0QlNELiAoYnVnICMxMzU2NDQpCi0JKiBzeXMvdjRsL3Y0bG1qcGVnc3JjX2NhbGxzLmM6IChnc3RfdjRsbWpwZWdzcmNfc3luY19uZXh0X2ZyYW1lKSwKLQkoZ3N0X3Y0bG1qcGVnc3JjX3NldF9jYXB0dXJlKSwgKGdzdF92NGxtanBlZ3NyY19zZXRfY2FwdHVyZV9tKSwKLQkoZ3N0X3Y0bG1qcGVnc3JjX2NhcHR1cmVfaW5pdCksIChnc3RfdjRsbWpwZWdzcmNfcmVxdWV1ZV9mcmFtZSk6Ci0JRml4IEdTVF9FTEVNRU5UX0VSUk9SIGNhbGwuCi0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5jOiAoZ3N0X3Y0bHNyY190cnlfcGFsZXR0ZSk6IEZpeAotCUdTVF9FTEVNRU5UX0VSUk9SIGNhbGwuCi0KLTIwMDQtMDItMjcgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLmg6Ci0JICBhZGQgbWFjcm8gdG8gbWFrZSBzdXJlIGhlYWRlciBpc24ndCBpbmNsdWRlZCB0d2ljZQotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X3Byb2Nlc3NfY2h1bmspOgotCSAgZG9uJ3QgdXNlIGdzdF9idWZmZXJfZnJlZQotCSogZ3N0L3BsYXlvbmRlbWFuZC9maWx0ZXIuZnVuYzoKLQkgIGRvbid0IHVzZSBnc3RfZGF0YV9mcmVlLiBGcmVlIGRhdGEgb25seSBvbmNlLgotCi0yMDA0LTAyLTI2ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvbGV2ZWwvTWFrZWZpbGUuYW06IC1tYXJzaGFsLltjaF0gYW5kIC1lbnVtLltjaF0gZmlsZXMKLQlzaG91bGQgbm90IGJlIGRpc3RlZCwgLW1hcnNoYWwuaCBmaWxlcyBzaG91bGQgbm90IGJlIGluc3RhbGxlZCwKLQlhbmQgLWVudW0uaCBmaWxlcyBfc2hvdWxkXyBiZSBpbnN0YWxsZWQuICBGaXggdG8gbWFrZSB0aGlzIHRoZQotCWNhc2UuCi0KLT09PSByZWxlYXNlIDAuNy41ID09PQotCi0yMDA0LTAyLTI2ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6IHJlbGVhc2UgMC43LjUsICJVbmRlciBUaGUgU2VhIgotCi0yMDA0LTAyLTI1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfbGluayksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2NoYW5nZV9zdGF0ZSksIChnc3RfYXVkaW9fY29udmVydF9nZXRfYnVmZmVyKToKLQkqIGdzdC92aWRlb3NjYWxlL2dzdHZpZGVvc2NhbGUuYzoKLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfc3luY19wYXJtcyk6Ci0gICAgICAgICAgYXNzb3J0ZWQgZGVidWcvd2FybmluZyBmaXhlcwotCi0yMDA0LTAyLTI1ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9nZXRjYXBzKSwKLQkoZ3N0X3ZpZGVvc2NhbGVfaW5pdCksIChnc3RfdmlkZW9zY2FsZV9jaGFpbiksCi0JKGdzdF92aWRlb3NjYWxlX3NldF9wcm9wZXJ0eSksIChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmg6Ci0JKiBnc3QvdmlkZW9zY2FsZS92aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9zZXR1cCksCi0JKGdzdF92aWRlb3NjYWxlX3NjYWxlX3JnYiksIChnc3RfdmlkZW9zY2FsZV9wbGFuYXI0MTEpLAotCShnc3RfdmlkZW9zY2FsZV9wbGFuYXI0MDApLCAoZ3N0X3ZpZGVvc2NhbGVfcGFja2VkNDIyKSwKLQkoZ3N0X3ZpZGVvc2NhbGVfcGFja2VkNDIycmV2KSwgKGdzdF92aWRlb3NjYWxlXzMyYml0KSwKLQkoZ3N0X3ZpZGVvc2NhbGVfMjRiaXQpLCAoZ3N0X3ZpZGVvc2NhbGVfMTZiaXQpLAotCShnc3RfdmlkZW9zY2FsZV9iaWxpbmVhciksIChnc3RfdmlkZW9zY2FsZV9iaWN1YmljKSwKLQkoZ3N0X3ZpZGVvc2NhbGVfc2NhbGVfcGxhbmVfc2xvdyksCi0JKGdzdF92aWRlb3NjYWxlX3NjYWxlX3BvaW50X3NhbXBsZSksCi0JKGdzdF92aWRlb3NjYWxlX3NjYWxlX25lYXJlc3QpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjIpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0X3N0cjQpLAotCShnc3RfdmlkZW9zY2FsZV9zY2FsZV9uZWFyZXN0XzMyYml0KSwKLQkoZ3N0X3ZpZGVvc2NhbGVfc2NhbGVfbmVhcmVzdF8yNGJpdCksCi0JKGdzdF92aWRlb3NjYWxlX3NjYWxlX25lYXJlc3RfMTZiaXQpOgotICAgICAgICBhZGQgZGVidWdnaW5nIGNhdGVnb3J5IGFuZCB1c2UgaXQgcHJvcGVybHkKLSAgICAgICAgZml4IHVzZSBvZiBHU1RfUFRSX0ZPUk1BVAotCi0yMDA0LTAyLTI1ICBBbmR5IFdpbmdvICA8d2luZ29AcG9ib3guY29tPgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmMgKGludGVybGVhdmVfYnVmZmVyZWRfbG9vcCk6IEFsd2F5cwotCXB1c2ggb25seSB3aGVuIGNoYW5uZWwtPmJ1ZmZlciBpcyBOVUxMLiBQcmV2ZW50cyBzZWdmYXVsdHMgZG9pbmcKLQl0aGUgc3RhdGUgY2hhbmdlIGFmdGVyIGEgbm9ubG9jYWwgZXhpdCwgbGlrZSBhIHNjaGVtZSBleGNlcHRpb24uCi0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmMgKGdzdF9hdWRpb19jb252ZXJ0X2dldGNhcHMpOgotCUhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgaW50ZXJzZWN0ZWQgY2FwcyBpcyBlbXB0eS4KLQotMjAwNC0wMi0yNSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYzogKG11bGF3ZGVjX2xpbmspOgotCSogZ3N0L2xhdy9tdWxhdy5jOiAocGx1Z2luX2luaXQpOgotICAgICAgICAgIGZpeCBtdWxhd2RlYyBzbyBpdCBhY3R1YWxseSB3b3JrcyBhZ2FpbgotCi0yMDA0LTAyLTI0ICBBcndlZCB2LiBNZXJrYXR6ICA8di5tZXJrYXR6QGdteC5uZXQ+Ci0KLQlyZXZpZXdlZCBieTogRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYzogKGdzdF9nYW1tYV9jbGFzc19pbml0KSwKLQkoZ3N0X2dhbW1hX2luaXQpLCAoZ3N0X2dhbW1hX3NldF9wcm9wZXJ0eSksCi0JKGdzdF9nYW1tYV9nZXRfcHJvcGVydHkpLCAoZ3N0X2dhbW1hX2NhbGN1bGF0ZV90YWJsZXMpLAotCShnc3RfZ2FtbWFfcmdiMjQpLCAoZ3N0X2dhbW1hX3JnYjMyKTogIEFkZHMgZ2FtbWEgY29ycmVjdGlvbgotCWZvciBSR0IsIHdpdGggc2VwYXJhdGUgciBnIGFuZCBiIGNvcnJlY3Rpb24gZmFjdG9ycy4gKCMxMzExNjcpCi0KLTIwMDQtMDItMjQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2NoYWluKToKLSAgICAgICAgICBvbmx5IHNpZ25hbCB0YWdzIGZvciBiaXRyYXRlIGlmIHRoZXkncmUgPiAwICgjMTM0ODk0KQotCi0yMDA0LTAyLTI0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguYzogKHBsdWdpbl9pbml0KSwgKGdzdF9xdGRlbXV4X2xvb3BfaGVhZGVyKSwKLQkocXRkZW11eF9wYXJzZV9tb292KSwgKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCksCi0JKHF0ZGVtdXhfZHVtcF9tdmhkKSwgKHF0ZGVtdXhfZHVtcF90a2hkKSwgKHF0ZGVtdXhfZHVtcF9lbHN0KSwKLQkocXRkZW11eF9kdW1wX21kaGQpLCAocXRkZW11eF9kdW1wX2hkbHIpLCAocXRkZW11eF9kdW1wX3ZtaGQpLAotCShxdGRlbXV4X2R1bXBfZHJlZiksIChxdGRlbXV4X2R1bXBfc3RzZCksIChxdGRlbXV4X2R1bXBfc3R0cyksCi0JKHF0ZGVtdXhfZHVtcF9zdHNzKSwgKHF0ZGVtdXhfZHVtcF9zdHNjKSwgKHF0ZGVtdXhfZHVtcF9zdHN6KSwKLQkocXRkZW11eF9kdW1wX3N0Y28pLCAocXRkZW11eF9kdW1wX2NvNjQpLCAocXRkZW11eF9kdW1wX2Rjb20pLAotCShxdGRlbXV4X2R1bXBfY212ZCksIChxdGRlbXV4X3BhcnNlX3RyZWUpLCAocXRkZW11eF9wYXJzZV90cmFrKToKLQlDbGVhbnVwcy4gIENvbnZlcnQgZ19wcmludHMgdG8gR1NUX0xPR3MuICBBZGQgcXRkZW11eCBkZWJ1ZwotCWNhdGVnb3J5LiAgQXR0ZW1wdCB0byBmaXggdGltZXN0YW1wIGNhbGN1bGF0aW9uLgotCi0yMDA0LTAyLTI0ICBKb2hhbiBEYWhsaW4gIDxqb2hhbkBnbm9tZS5vcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9nY29uZi9nY29uZi5jOiBBZGQgXG4gdG8gZ19wcmludCBlcnJvciBtZXNzYWdlcwotCi0yMDA0LTAyLTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBnY29uZi9NYWtlZmlsZS5hbToKLQkqIGdjb25mL2dzdHJlYW1lci5zY2hlbWFzOgotCSogZ3N0LWxpYnMvZ3N0L2djb25mL01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L2djb25mL2djb25mLmM6Ci0gICAgICAgICAgdmVyc2lvbiBnY29uZiBzY2hlbWFzIGFuZCBpbnN0YWxsIGxvY2F0aW9ucwotCi0yMDA0LTAyLTIzICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC94aW5lL3hpbmVpbnB1dC5jOiAoZ3N0X3hpbmVfaW5wdXRfZGlzcG9zZSk6Ci0JKGdzdF94aW5lX2lucHV0X3N1YmNsYXNzX2luaXQpOgotCSAgY2FsbCBwYXJlbnQgZGlzcG9zZS4KLQkgIGNoYW5nZSBwYWQgdGVtcGxhdGUgZm9yIENEIHJlYWRlciBjb3JyZWN0bHkKLQkqIGV4dC94aW5lL01ha2VmaWxlLmFtOgotCSogZXh0L3hpbmUvZ3N0eGluZS5oOgotCSogZXh0L3hpbmUveGluZS5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L3hpbmUveGluZWF1ZGlvc2luay5jOgotCSAgd3JhcCBhdWRpbyBzaW5rcywgdG9vCi0JKiBnc3QtbGlicy9nc3QvcmVzYW1wbGUvcHJpdmF0ZS5oOgotCSogZ3N0LWxpYnMvZ3N0L3Jlc2FtcGxlL3Jlc2FtcGxlLmM6IChnc3RfcmVzYW1wbGVfaW5pdCksCi0JKGdzdF9yZXNhbXBsZV9yZWluaXQpLCAoZ3N0X3Jlc2FtcGxlX3NjYWxlKSwKLQkoZ3N0X3Jlc2FtcGxlX25lYXJlc3RfczE2KSwgKGdzdF9yZXNhbXBsZV9iaWxpbmVhcl9zMTYpLAotCShnc3RfcmVzYW1wbGVfc2luY19zbG93X3MxNiksIChnc3RfcmVzYW1wbGVfc2luY19zMTYpLAotCShnc3RfcmVzYW1wbGVfc2luY19mdF9zMTYpLCAoZ3N0X3Jlc2FtcGxlX25lYXJlc3RfZmxvYXQpLAotCShnc3RfcmVzYW1wbGVfYmlsaW5lYXJfZmxvYXQpLCAoZ3N0X3Jlc2FtcGxlX3NpbmNfc2xvd19mbG9hdCksCi0JKGdzdF9yZXNhbXBsZV9zaW5jX2Zsb2F0KSwgKGdzdF9yZXNhbXBsZV9zaW5jX2Z0X2Zsb2F0KToKLQkqIGdzdC1saWJzL2dzdC9yZXNhbXBsZS9yZXNhbXBsZS5oOgotCSogZ3N0L2F1ZGlvc2NhbGUvZ3N0YXVkaW9zY2FsZS5jOiAoZ3N0X2F1ZGlvc2NhbGVfbWV0aG9kX2dldF90eXBlKSwKLQkoZ3N0X2F1ZGlvc2NhbGVfY2xhc3NfaW5pdCksIChnc3RfYXVkaW9zY2FsZV9saW5rKSwKLQkoZ3N0X2F1ZGlvc2NhbGVfZ2V0X2J1ZmZlciksIChnc3RfYXVkaW9zY2FsZV9pbml0KSwKLQkoZ3N0X2F1ZGlvc2NhbGVfY2hhaW4pLCAoZ3N0X2F1ZGlvc2NhbGVfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2F1ZGlvc2NhbGVfZ2V0X3Byb3BlcnR5KToKLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuaDoKLQkgIHMvcmVzYW1wbGVfKi9nc3RfcmVzYW1wbGVfKi9pIHRvIG5vdCBjbG9iYmVyIG5hbWVzcGFjZXMKLQotMjAwNC0wMi0yMyAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmM6IChnc3RfcmlmZl9jcmVhdGVfdmlkZW9fY2FwcyksCi0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzKSwgKGdzdF9yaWZmX2NyZWF0ZV9pYXZzX2NhcHMpLAotCShnc3RfcmlmZl9jcmVhdGVfdmlkZW9fdGVtcGxhdGVfY2FwcyksCi0JKGdzdF9yaWZmX2NyZWF0ZV9hdWRpb190ZW1wbGF0ZV9jYXBzKSwKLQkoZ3N0X3JpZmZfY3JlYXRlX2lhdnNfdGVtcGxhdGVfY2Fwcyk6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLW1lZGlhLmg6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfYmFzZV9pbml0KSwKLQkoZ3N0X2FzZl9kZW11eF9hdWRpb19jYXBzKSwgKGdzdF9hc2ZfZGVtdXhfYWRkX2F1ZGlvX3N0cmVhbSksCi0JKGdzdF9hc2ZfZGVtdXhfdmlkZW9fY2FwcyksIChnc3RfYXNmX2RlbXV4X2FkZF92aWRlb19zdHJlYW0pOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9hZGRfc3RyZWFtKToKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pLAotCShnc3RfbWF0cm9za2FfZGVtdXhfdmlkZW9fY2FwcyksIChnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2FwcyksCi0JKGdzdF9tYXRyb3NrYV9kZW11eF9wbHVnaW5faW5pdCk6IEZpcnN0IGJhdGNoIGltcGxlbWVudGluZyBhdWRpbyBhbmQKLQl2aWRlbyBjb2RlYyB0YWdzIGluIGRlbXV4ZXJzLgotCi0yMDA0LTAyLTIyICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC94aW5lL01ha2VmaWxlLmFtOgotCSogZXh0L3hpbmUvZ3N0eGluZS5oOgotCSogZXh0L3hpbmUveGluZS5jOiAocGx1Z2luX2luaXQpOgotCSogZXh0L3hpbmUveGluZWlucHV0LmM6Ci0JICBhZGQgaW5wdXQgcGx1Z2luIHdyYXBwZXIuIFBsYXliYWNrIGZyb20gZmlsZXMsIGh0dHAsIG1tcyBhbmQgY2RkYQotCSAgd29ya3MuCi0JKiBleHQveGluZS94aW5lYXVkaW9kZWMuYzogKGdzdF94aW5lX2F1ZGlvX2RlY19jaGFpbik6Ci0JICByZW1vdmUgbGVmdG92ZXIgR19HTlVDX1VOVVNFRAotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X3Byb2Nlc3Nfc3RyZWFtKSwKLQkoZ3N0X2FzZl9kZW11eF9pZGVudGlmeV9ndWlkKToKLQkgIGltcHJvdmUgZGVidWdnaW5nIG91dHB1dAotCi0yMDA0LTAyLTIyICBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQlyZXBvcnRlZCBieTogUGFkcmFpZyBPJ0JyaWFpbiA8cGFkcmFpZy5vYnJpYWluQHN1bi5jb20+Ci0KLQkqIGF1dG9nZW4uc2g6Ci0JICByZXBsYWNlIHRlc3QgLWUgd2l0aCB0ZXN0IC14IGZvciBta2luc3RhbGxkaXJzIHRvIGJlIG1vcmUgcG9ydGFibGUuCi0JICAoZml4ZXMgIzEzNDgxNikKLQotMjAwNC0wMi0yMiAgQmVuamFtaW4gT3R0ZSAgPG90dGVAZ25vbWUub3JnPgotCi0JcmVwb3J0ZWQgYnk6IFN0ZWZhbiBLb3N0IDxrb3N0QGltbi5odHdrLWxlaXB6aWcuZGU+Ci0KLQkqIGdzdC9hdWRpb2NvbnZlcnQvZ3N0YXVkaW9jb252ZXJ0LmM6IChwbHVnaW5faW5pdCk6Ci0JICBzZXQgcmFuayB0byBQUklNQVJZCi0JKiBnc3Qvdm9sdW1lL2dzdHZvbHVtZS5jOiAocGx1Z2luX2luaXQpOgotCSAgc2V0IHJhbmsgdG8gTk9ORQotCWZpeGVzICMxMzQ5NjAKLQotMjAwNC0wMi0yMiAgIEp1bGlvIE0uIE1lcmlubyBWaWRhbCA8am1tdkBtZW50YS5uZXQ+Ci0KLQlyZXZpZXdlZCBieSBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjZW5jX2NoYWluKToKLQkgIGVzY2FwZSBOVUxMIHN0cmluZ3MgaW4gR1NUX0VMRU1FTlRfRVJST1IgcHJvcGVybHkgKGZpeGVzICMxMzUxMTYpCi0KLTIwMDQtMDItMjIgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSAgZXhwb3J0IFtfXSp7Z3N0LEdzdCxHU1R9Liogc3ltYm9scyBmcm9tIHBsdWdpbnMKLQotMjAwNC0wMi0yMiAgQ2hyaXN0b3BoZSBGZXJnZWF1IDx0ZXVmQGdub21lLm9yZz4KLQotCXJldmlld2VkIGJ5OiBCZW5qYW1pbiBPdHRlICA8b3R0ZUBnbm9tZS5vcmc+Ci0KLQkqIGV4dC9sYW1lL2dzdGxhbWUuYzogKGFkZF9vbmVfdGFnKToKLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfbWFkX2lkM190b190YWdfbGlzdCk6Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2VuYy5jOiAoZ3N0X3ZvcmJpc2VuY19nZXRfdGFnX3ZhbHVlKSwKLQkoZ3N0X3ZvcmJpc2VuY19tZXRhZGF0YV9zZXQxKToKLQkqIGdzdC90YWdzL2dzdGlkM3RhZy5jOgotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IChnc3Rfdm9yYmlzX3RhZ19hZGQpOgotCSAgYXBwbHkgZml4ZXMgZnJvbSBidWdzICMxMzUwNDIgKGxhbWUgY2FuJ3Qgd3JpdGUgdGFncykgYW5kICMxMzM4MTcKLQkgIChhZGQgR1NUX0FMQlVNX1ZPTFVNRV97Q09VTlQsTlVNQkVSfSB0YWdzKQotCi0yMDA0LTAyLTIyIFJhbW9uIEdhcmNpYSA8cmFtb25fZ2FyY2lhX2ZAeWFob28uY29tPgotCi0JKiBjb25maWd1cmUuYWM6IEV4cG9ydCBvbmx5IGdzdF9wbHVnaW5fZGVzYyBmcm9tIHBsdWdpbnMuCi0gICAgICAgICBOb3RlIHRoYXQgdGhpcyBjaGFuZ2Ugb25seSBtYWtlcyBhbnkgZWZmZWN0IHdpdGggTGludXggdXNpbmcgbGlidG9vbAotCSAxLjUuMiBvciBoaWdoZXIuIE90aGVyd2lzZSBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLCBidXQgaXQgd291bGQgYnVpbGQKLSAgICAgICAgIGZpbmUuIEFuZCBkb24ndCB0cnkgdG8gaGF2ZSBzZXZlcmFsIHZlcnNpb25zIG9mIGxpYnRvb2wgaW4gZGlmZmVyZW50Ci0gICAgICAgICBkaXJlY3Rvcmllcy4KLQotMjAwNC0wMi0yMCAgQW5keSBXaW5nbyAgPHdpbmdvQHBvYm94LmNvbT4KLQotCSogZ3N0L2ludGZsb2F0LywgZ3N0L29uZXRvbjogUmVtb3ZlZCwgcmVwbGFjZWQgYnkgYXVkaW9jb252ZXJ0IGFuZAotCWludGVybGVhdmUgcmVzcGVjdGl2ZWx5LgotCi0JKiBnc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYzogTmV3IHBsdWdpbjogZGVpbnRlcmxlYXZlCi0JKHJlcGxhY2VzIG9uIG9uZXRvbikuCi0JKiBnc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmM6IE5ldyBwbHVnaW46IGludGVybGVhdmUuCi0JKiBnc3QvaW50ZXJsZWF2ZS9wbHVnaW4uaDogU3VwcG9ydCBmaWxlLgotCSogZ3N0L2ludGVybGVhdmUvcGx1Z2luLmM6IFN1cHBvcnQgZmlsZS4KLQotCSogY29uZmlndXJlLmFjOiBSZW1vdmUgaW50ZmxvYXQgYW5kIG9uZXRvbiwgYWRkIGludGVybGVhdmUuCi0KLQkqIGV4dC9zbmRmaWxlL2dzdHNmLmM6IEhhbmRsZSBldmVudHMgYmV0dGVyLgotCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiBDaGFuZ2UgdG8gc3VwcG9ydCBpbnQyZmxvYXQKLQlhbmQgZmxvYXQyaW50IG9wZXJhdGlvbi4gaW50MmZsb2F0IGhhcyBzY2hlZHVsaW5nIHByb2JsZW1zIGFzCi0Jbm90ZWQgaW4gaW4yZmxvYXRfY2hhaW4uCi0KLTIwMDQtMDItMjAgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L3hpbmUvTWFrZWZpbGUuYW06Ci0JKiBleHQveGluZS9nc3R4aW5lLmg6Ci0JKiBleHQveGluZS94aW5lLmM6Ci0JKiBleHQveGluZS94aW5lYXVkaW9kZWMuYzoKLQkqIGV4dC94aW5lL3hpbmVjYXBzLmM6Ci0JICBhZGQgZmlyc3QgdmVyc2lvbiBvZiB4aW5lIHBsdWdpbiB3cmFwcGVyLiBDdXJyZW50bHkgb25seSB3cmFwcyB0aGUKLQkgIFFETTIgd2luMzIgRExMLCBhbmQgZXZlbiB0aGF0IG9ubHkgaW4gcHJvb2Ytb2YtY29uY2VwdCBxdWFsaXR5LgotCSogY29uZmlndXJlLmFjOgotCSogZXh0L01ha2VmaWxlLmFtOgotCSAgYWRkIHhpbmUgcGx1Z2luIHdyYXBwZXIsIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFVzZSAtLWVuYWJsZS14aW5lIHRvCi0JICBidWlsZC4gTm90ZSB0aGF0IGl0J2xsIHNlZ2ZhdWx0IG9uIGdzdC1yZWdpc3RlciBpZiB5b3UgZG9uJ3QgcmVtb3ZlCi0JICB0aGUgZ29vbSBhbmQgdHZ0aW1lIHBvc3QgcGx1Z2lucyBmcm9tIHhpbmUuCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCksCi0JKHF0ZGVtdXhfcGFyc2UpLCAocXRkZW11eF9wYXJzZV90cmFrKSwgKHF0ZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JICBhZGQgZXh0cmFkYXRhIHBhcnNpbmcgZm9yIFFETTIuCi0JICBjaGFuZ2UgYXJvdW5kIGRlYnVnZ2luZyBwcmludHMuCi0KLTIwMDQtMDItMTkgIEJlbmphbWluIE90dGUgIDxvdHRlQGdub21lLm9yZz4KLQotCSogZXh0L2xhbWUvZ3N0bGFtZS5jOiAoZ3N0X2xhbWVfY2hhaW4pOgotCSogZXh0L3ZvcmJpcy92b3JiaXNlbmMuYzogKGdzdF92b3JiaXNlbmNfY2hhaW4pOgotCSAgdXNlIGdzdF90YWdfbGlzdF9pbnNlcnQgd2hlbiB5b3Ugd2FudCB0byBpbnNlcnQgdGFncwotCi0yMDA0LTAyLTE4ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogIE1vdmUgbWFzc2luayB0byBnc3Qtcm90dGVuCi0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvbWFzL01ha2VmaWxlLmFtOgotCSogZXh0L21hcy9tYXNzaW5rLmM6Ci0JKiBleHQvbWFzL21hc3NpbmsuaDoKLQotMjAwNC0wMi0xOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKHBsdWdpbl9pbml0KTogRGlzYWJsZSBnZGtfcGl4YnVmCi0JdHlwZWZpbmRpbmcsIHNpbmNlIGl0IHNlZW1zIHRvIGJlIHdvcnNlIHRoYW4gbm90aGluZy4KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAocXRfdHlwZV9maW5kKTogIEFkZCBmdHlwCi0JYXRvbSB0byByZWNvZ25pemUgLm1wNCBhbmQgLm00YSBmaWxlcyBhcyB2aWRlby9xdWlja3RpbWUuCi0KLTIwMDQtMDItMTggIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3NpbmUvZGVtby1kcGFyYW1zLmM6IChxdWl0X2xpdmUpLAotCShkeW5wYXJtX2xvZ192YWx1ZV9jaGFuZ2VkKSwgKGR5bnBhcm1fdmFsdWVfY2hhbmdlZCksIChtYWluKToKLQlVc2UgZG91YmxlIGRwYXJhbXMsIG5vdCBmbG9hdC4KLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuYzogKGdzdF9zaW5lc3JjX2NsYXNzX2luaXQpLAotCShnc3Rfc2luZXNyY19pbml0KTogQ2hhbmdlIHN5bmMgZGVmYXVsdCB0byBGQUxTRSwgc2luY2UgbXVsdGlwbGUKLQlzeW5jJ2QgZWxlbWVudHMgZG9uJ3QgcmVhbGx5IHdvcmsgY29ycmVjdGx5LgotCSogZ3N0L3ZvbHVtZS9nc3R2b2x1bWUuYzogKHZvbHVtZV9jbGFzc19pbml0KSwgKHZvbHVtZV9pbml0KSwKLQkodm9sdW1lX3VwZGF0ZV92b2x1bWUpLCAodm9sdW1lX2dldF9wcm9wZXJ0eSk6ICBDaGFuZ2UgZHBhcmFtCi0JdG8gZG91YmxlLgotCi0yMDA0LTAyLTE4ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOgotCShnc3RfeGltYWdlc2lua194d2luZG93X3VwZGF0ZV9nZW9tZXRyeSksCi0JKGdzdF94aW1hZ2VzaW5rX3JlbmVnb3RpYXRlX3NpemUpLCAoZ3N0X3hpbWFnZXNpbmtfaGFuZGxlX3hldmVudHMpLAotCShnc3RfeGltYWdlc2lua19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3hpbWFnZXNpbmtfZXhwb3NlKSwKLQkoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6IFJld29yayB0aGUgd2F5IHNvZnR3YXJlIHZpZGVvIHNjYWxpbmcgd29ya3MuIFNvCi0Jbm93IHdlIGNoZWNrIG9uIGVhY2ggY2hhaW4gY2FsbCBpZiB0aGUgdmlkZW8gZnJhbWVzIGFyZSBmZWVsaW5nIHRoZQotCXdpbmRvdy4gSWYgbm90IHdlIHRyeSB0byByZW5lZ290aWF0ZSBjYXBzLiBPbiBmYWlsdXJlIHdlIG1lbW9yaXplIHRoYXQKLQlhbmQgd2Ugd29uJ3QgdHJ5IGFnYWluIGZvciB0aGF0IFBMQVlJTkcgc2Vzc2lvbnMuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDogQWRkaW5nIGEgYm9vbGVhbiB0byBzdG9yZSB0aGUgY2FwcyByZW5lZ28KLQlmYWlsdXJlLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19pbml0KTogaW5pdGlhbGl6ZSB0aGUKLQlzeW5jaHJvbm91cyBmbGFnLgotCi0yMDA0LTAyLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9waXBlbGluZV9zZXR1cCk6Ci0gICAgICAgICAgYnJlYWsgdXAgX2xpbmsgc28gd2UgY2FuIGdpdmUgYSBiZXR0ZXIgZGVidWcgbWVzc2FnZSBmb3IgZXJyb3JzCi0KLTIwMDQtMDItMTggIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAocGx1Z2luX2luaXQpOgotICAgICAgICAgIHNldCB1cCBkZWJ1ZyBjYXRlZ29yeQotCi0yMDA0LTAyLTE4ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19yZW5lZ290aWF0ZV9zaXplKSwKLQkoZ3N0X3hpbWFnZXNpbmtfaGFuZGxlX3hldmVudHMpLCAoZ3N0X3hpbWFnZXNpbmtfZXhwb3NlKTogUmVvcmdhbml6aW5nCi0JdGhlIHdheSByZW5lZ290aWF0aW9uIHdvcmsuIFRoZSBldmVudCBoYW5kbGluZyBmdW5jdGlvbiBpcyBub3QgdGFraW5nCi0JY2FyZSBvZiBleHRlcm5hbCB3aW5kb3dzIGFuZCByZW5lZ290aWF0ZSBtZXRob2QgY2hlY2sgZm9yIHBhZCBmbGFncwotCU5FR09USUFUSU5HLiBTaG91bGQgZml4IDogIzEzMzIwOQotCi0yMDA0LTAyLTE3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfZXhwb3NlKTogQ2hlY2tpbmcgaWYgdGhlCi0JcGFkIGlzIG5lZ290aWF0aW5nIGJlZm9yZSB0cnlpbmcgcmVuZWdvdGlhdGlvbi4KLQotMjAwNC0wMi0xNyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl90eXBlX2ZpbmQpOgotICAgICAgICAgIHBhc3Mgb24gYWxsIHBvc3NpYmxlIG1pbWUgdHlwZXMgYXMgdHlwZWZpbmQgaGludHMKLQotMjAwNC0wMi0xNyAgSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX25ldyk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3h2aW1hZ2VfbmV3KTogRml4IGEKLQlwb3NzaWJsZSBTSE0gbGVhayBpZiB3ZSBjcmFzaC4gQWxsIG90aGVyIGFwcHMgdXNpbmcgWFNobSBhcmUgZG9pbmcKLQl0aGF0LgotCi0yMDA0LTAyLTE3ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfcmVuZWdvdGlhdGVfc2l6ZSksCi0JKGdzdF94aW1hZ2VzaW5rX2V4cG9zZSk6IFJlbmVnb3RpYXRlIHNpemUgb24gZXhwb3NlLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19leHBvc2UpOiBVcGRhdGUgd2luZG93Ci0Jc2l6ZSBvbiBleHBvc2UuCi0KLTIwMDQtMDItMTYgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogdGVzdHN1aXRlL2Fsc2Evc2luZXNyYy5jOgotCSAgY29zbWV0aWMgZml4IHRvIGZpeCBjb21waWxlIGlzc3VlIHdpdGggZ2NjIDIuOTUuNAotCi0yMDA0LTAyLTE2ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2Ffb3Blbl9hdWRpbyksCi0JKGdzdF9hbHNhX3RpbWVzdGFtcF90b19ieXRlcyk6IEFsc2Egc2hvdWxkIHRyaWdnZXIgYW4gZXJyb3IgaWYgaXQKLQlmYWlsZWQgb3BlbmluZyB0aGUgYXVkaW8gZGV2aWNlLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194aW1hZ2VfbmV3KSwKLQkoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX2Rlc3Ryb3kpLCAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX3B1dCksCi0JKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KSwgKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfZGVzdHJveSksCi0JKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfcmVzaXplKSwgKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfY2xlYXIpLAotCShnc3RfeGltYWdlc2lua19yZW5lZ290aWF0ZV9zaXplKSwgKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXZlbnRzKSwKLQkoZ3N0X3hpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwgKGdzdF94aW1hZ2VzaW5rX3hjb250ZXh0X2NsZWFyKSwKLQkoZ3N0X3hpbWFnZXNpbmtfY2hhbmdlX3N0YXRlKSwgKGdzdF94aW1hZ2VzaW5rX2NoYWluKSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpOiBDbGVhcmluZyB3aW5kb3cgaW4gUkVBRFkgVE8gUEFVU0VELgotCVJlbW92aW5nIHNvbWUgdXNlbGVzcyBnX3JldHVybl9pZl9mYWlsIGxpa2Ugd2luZ28gc3VnZ2VzdGVkLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyksCi0JKGdzdF94dmltYWdlc2lua194dmltYWdlX2Rlc3Ryb3kpLCAoZ3N0X3h2aW1hZ2VzaW5rX3h2aW1hZ2VfcHV0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KSwgKGdzdF94dmltYWdlc2lua194d2luZG93X2Rlc3Ryb3kpLAotCShnc3RfeHZpbWFnZXNpbmtfeHdpbmRvd19yZXNpemUpLCAoZ3N0X3h2aW1hZ2VzaW5rX3h3aW5kb3dfY2xlYXIpLAotCShnc3RfeHZpbWFnZXNpbmtfdXBkYXRlX2NvbG9yYmFsYW5jZSksCi0JKGdzdF94dmltYWdlc2lua19oYW5kbGVfeGV2ZW50cyksIChnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3hjb250ZXh0X2NsZWFyKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2dldF9mb3VyY2NfZnJvbV9jYXBzKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSksIChnc3RfeHZpbWFnZXNpbmtfY2hhaW4pLAotCShnc3RfeHZpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLAotCShnc3RfeHZpbWFnZXNpbmtfY29sb3JiYWxhbmNlX2xpc3RfY2hhbm5lbHMpLAotCShnc3RfeHZpbWFnZXNpbmtfY29sb3JiYWxhbmNlX3NldF92YWx1ZSksCi0JKGdzdF94dmltYWdlc2lua19jb2xvcmJhbGFuY2VfZ2V0X3ZhbHVlKTogQ2xlYXJpbmcgd2luZG93IGluIFJFQURZIFRPCi0JUEFVU0VELiBSZW1vdmluZyBzb21lIHVzZWxlc3MgZ19yZXR1cm5faWZfZmFpbCBsaWtlIHdpbmdvIHN1Z2dlc3RlZC4KLQotMjAwNC0wMi0xNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2NoYWluKToKLSAgICAgICAgICB0aHJvdyBlcnJvciB3aGVuIG5vdCBuZWdvdGlhdGVkIGluc3RlYWQgb2YgYXNzZXJ0aW5nCi0KLTIwMDQtMDItMTUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfbG9vcCk6IE1vcmUgZml4ZXMgZm9yCi0JY29ycmVjdCBkYXRhIHJlZmNvdW50aW5nLgotCi0yMDA0LTAyLTE1ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIGdzdC9zd2l0Y2gvZ3N0c3dpdGNoLmM6IChnc3Rfc3dpdGNoX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF9zd2l0Y2hfY2xhc3NfaW5pdCk6IENsZWFuaW5nIHRoZSBzaW5rcGFkcyBjb3JyZWN0bHkgb24gc3RhdGUKLQljaGFuZ2UsIG1vc3RseSB0aGUgRU9TIGZsYWcuCi0KLTIwMDQtMDItMTUgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKGdvdF9lb3MpLCAobWFpbik6IEFkZGluZyBzb21lCi0Jb3V0cHV0IGZvciBkZWJ1Z2dpbmcuCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9zdGF0ZV9jaGFuZ2UpOiBTdG9wIG91cgotCXRpbWVvdXRzIGlmIHdlIGdvIHRvIGFueSBzdGF0ZSBkaWZmZXJlbnQgZnJvbSBQTEFZSU5HLgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX3NlZWspOiBGaXggc29tZQotCW1vcmUgRU9TIGJ1Z3MgaW4gcmlmZiBsaWIuCi0KLTIwMDQtMDItMTQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jOiAoZ3N0X3BsYXlfY29ubmVjdF92aXN1YWxpemF0aW9uKTogRGlzYWJsZQotCXZpc3VhbGl6YXRpb24gdW50aWwgaSBmaW5kIGEgd2F5IHRvIGZpeCBzd2l0Y2ggY29ycmVjdGx5LgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9wZWVrX2hlYWQpOiBGaXggYSBidWcgd2hlbgotCUVPUyBhcnJpdmVzLgotCSogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfcmVsZWFzZV9wYWQpLAotCShnc3Rfc3dpdGNoX3JlcXVlc3RfbmV3X3BhZCksIChnc3Rfc3dpdGNoX3BvbGxfc2lua3BhZHMpLAotCShnc3Rfc3dpdGNoX2xvb3ApLCAoZ3N0X3N3aXRjaF9kaXNwb3NlKSwgKGdzdF9zd2l0Y2hfY2xhc3NfaW5pdCk6Ci0JUmV3b3JrZWQgc3dpdGNoIHRvIGdldCBhIG1vcmUgY29ycmVjdCBiZWhhdmlvdXIgd2l0aCBldmVudHMgYW5kIHJlZmluZwotCW9mIGRhdGEgc3RvcmVkIGluIHNpbmtwYWRzLgotCSogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guaDogQWRkaW5nIGFuIGVvcyBmbGFnIGZvciBldmVyeSBzaW5rcGFkIHNvIHRoYXQKLQl3ZSBkb24ndCBwdWxsIGZyb20gYSBwYWQgaW4gRU9TLgotCi0yMDA0LTAyLTE0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19jaGFpbik6Ci0JICByZW1vdmUgdjEgdGFnIGV2ZW4gaWYgd2UgY2FuJ3QgcmVhZCBpdCAobWFrZXMgc3VyZSB3ZSBkb24ndCBkZXRlY3QKLQkgIGl0IGFnYWluKQotCi0yMDA0LTAyLTE0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3BjbV93YWl0KSwKLQkoZ3N0X2Fsc2FfeHJ1bl9yZWNvdmVyeSk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhLmg6Ci0JICB0cnkgeHJ1biByZWNvdmVyeSB3aGVuIHdhaXQgZmFpbGVkLiBNYWtlIHhydW4gcmVjb3ZlcnkgZnVuY3Rpb24KLQkgIHJldHVybiBUUlVFL0ZBTFNFIHRvIGluZGljYXRlIHN1Y2Nlc3MuIChtaWdodCBmaXggIzEzNDM1NCkKLQotMjAwNC0wMi0xMyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3Qvc2luZS9kZW1vLWRwYXJhbXMuYzogKGR5bnBhcm1fbG9nX3ZhbHVlX2NoYW5nZWQpLAotCShkeW5wYXJtX3ZhbHVlX2NoYW5nZWQpLCAobWFpbik6IENvbnZlcnQgZnJvbSBmbG9hdCB0byBkb3VibGUuCi0JKiBnc3Qvc2luZS9nc3RzaW5lc3JjLmM6IChnc3Rfc2luZXNyY19pbml0KTogc2FtZS4KLQotMjAwNC0wMi0xMyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3Qvc2lsZW5jZS9nc3RzaWxlbmNlLmM6IChnc3Rfc2lsZW5jZV9jbGFzc19pbml0KSwKLQkoZ3N0X3NpbGVuY2Vfc2V0X2Nsb2NrKSwgKGdzdF9zaWxlbmNlX2dldCksCi0JKGdzdF9zaWxlbmNlX3NldF9wcm9wZXJ0eSksIChnc3Rfc2lsZW5jZV9nZXRfcHJvcGVydHkpOgotCSogZ3N0L3NpbGVuY2UvZ3N0c2lsZW5jZS5oOiBBZGQgc3luYyBwcm9wZXJ0eS4KLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuYzogKGdzdF9zaW5lc3JjX2NsYXNzX2luaXQpLAotCShnc3Rfc2luZXNyY19pbml0KSwgKGdzdF9zaW5lc3JjX3NldF9jbG9jayksIChnc3Rfc2luZXNyY19nZXQpLAotCShnc3Rfc2luZXNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3NpbmVzcmNfZ2V0X3Byb3BlcnR5KToKLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuaDogQWRkIHN5bmMgcHJvcGVydHkuCi0KLTIwMDQtMDItMTMgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2ludGZsb2F0L2dzdGludDJmbG9hdC5jOiAoY29udl9mMzJfczE2KSwKLQkoZ3N0X2ludDJmbG9hdF9jaGFpbl9naW50MTYpOiAgQ2hhbmdlIHN0ZGludCB1c2FnZSB0byBnbGliIHR5cGVzLgotCi0yMDA0LTAyLTEzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9leHQvTWFrZWZpbGUuYW06Ci0gICAgICAgICAgbW92ZSBmZm1wZWcgcGx1Z2luIHRvIGdzdC1mZm1wZWcgbW9kdWxlCi0KLTIwMDQtMDItMTMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGNvbmZpZ3VyZS5hYzogdXNlIEdTVF9BUkNIIHRvIGRldGVjdCBhcmNoaXRlY3R1cmUKLQotMjAwNC0wMi0xMiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QvdmJpZGVjL3ZiaXNjcmVlbi5jOiBGaXhpbmcgdGhvbWFzdnMgZml4ZXMuIE1pc3NpbmcgaGVhZGVyLgotCi0yMDA0LTAyLTEyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvbGFkc3BhL2dzdGxhZHNwYS5jOiAoZ3N0X2xhZHNwYV9iYXNlX2luaXQpOgotICAgICAgICAgIGNsYXNzaWZ5IExBRFNQQSBwbHVnaW5zIGJhc2VkIG9uIG51bWJlciBvZiBzcmMvc2luayBwYWRzCi0JICAoIzEzMzY2MywgU3RlZmFuIEtvc3QpCi0JKiBnc3Qvc2luZS9nc3RzaW5lc3JjLmM6IChnc3Rfc2luZXNyY19pbml0KToKLSAgICAgICAgICBmaXggZHBhcmFtcyByZWdpc3RyYXRpb24KLQkgICgjMTMzNTI4LCBTdGVmYW4gS29zdCkKLQkqIGdzdC92YmlkZWMvdmJpc2NyZWVuLmM6ICh2YmlzY3JlZW5fc2V0X2N1cnJlbnRfY2VsbCk6Ci0gICAgICAgICAgZml4IHVzZSBvZiBpc3ByaW50IGFuZCB1c2UgZ19hc2NpaV9pc3ByaW50IGluc3RlYWQKLQkgICgjMTMzMzE2LCBTdGVmYW4gS29zdCkKLQotMjAwNC0wMi0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JQ29udmVydCBhIGZldyBpbm5lciBsb29wcyB0byB1c2UgbGlib2lsLiAgVGhpcyBpcyBjdXJyZW50bHkKLQlvcHRpb25hbCwgYW5kIGlzIG9ubHkgZW5hYmxlZCBpZiBsaWJvaWwgaXMgcHJlc2VudCAoZHVoISkuCi0JKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBsaWJvaWwtMC4xCi0JKiBnc3QvaW50ZmxvYXQvTWFrZWZpbGUuYW06Ci0JKiBnc3QvaW50ZmxvYXQvZ3N0aW50MmZsb2F0LmM6IChjb252X2YzMl9zMTYpLCAoc2NhbGFybXVsdF9mMzIpLAotCShnc3RfaW50MmZsb2F0X2NoYWluX2dpbnQxNik6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmM6IChnc3RfdmlkZW9iYWxhbmNlX2NsYXNzX2luaXQpLAotCSh0YWJsZWxvb2t1cF91OCksIChnc3RfdmlkZW9iYWxhbmNlX3BsYW5hcjQxMSk6Ci0JKiBnc3QvdmlkZW90ZXN0c3JjL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC92aWRlb3Rlc3RzcmMvdmlkZW90ZXN0c3JjLmM6IChzcGxhdF91OCksIChwYWludF9obGluZV9ZVVkyKSwKLQkocGFpbnRfaGxpbmVfSVlVMiksIChwYWludF9obGluZV9zdHI0KSwgKHBhaW50X2hsaW5lX3N0cjMpLAotCShwYWludF9obGluZV9SR0I1NjUpLCAocGFpbnRfaGxpbmVfeFJHQjE1NTUpOgotCi0yMDA0LTAyLTExICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9sY3MvZ3N0Y29sb3JzcGFjZS5jOiAoY29sb3JzcGFjZV9maW5kX2xjc19mb3JtYXQpLAotCShnc3RfY29sb3JzcGFjZV9jYXBzX2dldF9mb3VyY2MpLCAoY29sb3JzcGFjZV9zZXR1cF9jb252ZXJ0ZXIpLAotCShnc3RfY29sb3JzcGFjZV9nZXRjYXBzKSwgKGdzdF9jb2xvcnNwYWNlX2xpbmspLAotCShnc3RfY29sb3JzcGFjZV9iYXNlX2luaXQpLCAoZ3N0X2NvbG9yc3BhY2VfaW5pdCksCi0JKGdzdF9jb2xvcnNwYWNlX2NoYWluKSwgKGdzdF9jb2xvcnNwYWNlX2NoYW5nZV9zdGF0ZSksCi0JKHBsdWdpbl9pbml0KTogTWVyZ2UgUm9uYWxkJ3MgcGF0Y2ggKGJ1ZyAjMTE3ODk3KSBhbmQgdXBkYXRlCi0JZm9yIG5ldyBjYXBzIGFuZCBuZWdvdGlhdGlvbi4gIFNlZW1zIHRvIHdvcmssIGFsdGhvdWdoIGl0Ci0Jc2hvd3Mgb2ZmIGJ1Z3MgaW4gbGNzLgotCi0yMDA0LTAyLTExICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9hbHNhL01ha2VmaWxlLmFtOiBGaXggbGlua2luZyBhZ2FpbnN0IGxpYmdzdGludGVyZmFjZXMuCi0JKGJ1ZyAjMTMzODg2KSAgTm90aWNlZCBieSBidWdzQGxlcm91dGllci5uZXQgKFN0ZXBoYW5lIExPRVVJTExFVCkKLQotMjAwNC0wMi0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvbGlicmZiL2dzdHJmYnNyYy5jOiAoZ3N0X3JmYnNyY19jbGFzc19pbml0KSwKLQkoZ3N0X3JmYnNyY19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3JmYnNyY19pbml0KSwKLQkoZ3N0X3JmYnNyY19zZXRfcHJvcGVydHkpLCAoZ3N0X3JmYnNyY19nZXRfcHJvcGVydHkpOgotCUFkZCBzZXJ2ZXIgYW5kIHBvcnQgcHJvcGVydGllcwotCi0yMDA0LTAyLTExICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBtNC9hNTIubTQ6Ci0JKiBtNC9hYWxpYi5tNDoKLQkqIG00L2FzLWZmbXBlZy5tNDoKLQkqIG00L2FzLWxpYmxhbWUubTQ6Ci0JKiBtNC9hcy1zbHVycC1mZm1wZWcubTQ6Ci0JKiBtNC9jaGVjay1saWJoZWFkZXIubTQ6Ci0JKiBtNC9lc2QubTQ6Ci0JKiBtNC9mcmVldHlwZTIubTQ6Ci0JKiBtNC9nY29uZi0yLm00OgotCSogbTQvZ2xpYi5tNDoKLQkqIG00L2dzdC1hbHNhLm00OgotCSogbTQvZ3N0LWFydHNjLm00OgotCSogbTQvZ3N0LWl2b3JiaXMubTQ6Ci0JKiBtNC9nc3QtbWF0cm9za2EubTQ6Ci0JKiBtNC9nc3Qtc2RsLm00OgotCSogbTQvZ3N0LXNob3V0Mi5tNDoKLQkqIG00L2dzdC1zaWQubTQ6Ci0JKiBtNC9ndGsubTQ6Ci0JKiBtNC9saWJkdi5tNDoKLQkqIG00L2xpYmZhbWUubTQ6Ci0JKiBtNC9saWJtaWttb2QubTQ6Ci0JKiBtNC9vZ2cubTQ6Ci0JKiBtNC92b3JiaXMubTQ6Ci0gICAgICAgICAgZml4IHVuZGVycXVvdGVkbmVzcyBvZiBtYWNyb3MgKCMxMzM4MDApCi0JKiBtNC9hcy1hdmlmaWxlLm00OgotCSogbTQveG1tcy5tNDoKLSAgICAgICAgICByZW1vdmVkIGJlY2F1c2Ugbm8gbG9uZ2VyIHVzZWQKLQotMjAwNC0wMi0xMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotICAgICAgICAgIHJlcXVpcmUgZ2V0dGV4dCAwLjExLjUgc28gdWxvbmdsb25nLm00IGdldHMgY2hlY2tlZCBvdXQgYW5kIGNvcGllZAotICAgICAgICAgIGJ5IGF1dG9wb2ludCAoZml4ZXMgIzEzMjk5NikKLQotMjAwNC0wMi0xMSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlYy5jOiAoZ3N0X2ZmbXBlZ2RlY19iYXNlX2luaXQpOgotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdkZW11eC5jOiAoZ3N0X2ZmbXBlZ2RlbXV4X2Jhc2VfaW5pdCk6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2VuYy5jOiAoZ3N0X2ZmbXBlZ2VuY19iYXNlX2luaXQpOgotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdtdXguYzogKGdzdF9mZm1wZWdtdXhfYmFzZV9pbml0KToKLQkgIGZpeCBtZW1sZWFrcwotCi0yMDA0LTAyLTExICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfc2lua19saW5rKSwKLQkoZ3N0X2dka19waXhidWZfY2hhaW4pOiBGaXggbG9naWMgYnVnIGNhdXNpbmcgc3B1cmlvdXMgZXJyb3JzLgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdkZWNfYmFzZV9pbml0KSwKLQkoZ3N0X2pwZWdkZWNfaW5pdCksIChnc3RfanBlZ2RlY19jaGFpbik6IEZpeCBuZWdvdGlhdGlvbi4KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuYzogKGdzdF9qcGVnZW5jX2Jhc2VfaW5pdCksCi0JKGdzdF9qcGVnZW5jX2NsYXNzX2luaXQpLCAoZ3N0X2pwZWdlbmNfaW5pdCksCi0JKGdzdF9qcGVnZW5jX2dldGNhcHMpLCAoZ3N0X2pwZWdlbmNfbGluayksIChnc3RfanBlZ2VuY19yZXN5bmMpLAotCShnc3RfanBlZ2VuY19jaGFpbiksIChnc3RfanBlZ2VuY19zZXRfcHJvcGVydHkpLAotCShnc3RfanBlZ2VuY19nZXRfcHJvcGVydHkpOiAgRml4IG5lZ290aWF0aW9uLiAgQWRkIHNvbWUgcHJvcGVydGllcy4KLQkqIGV4dC9qcGVnL2dzdGpwZWdlbmMuaDogRml4IG5lZ290aWF0aW9uLgotCi0yMDA0LTAyLTEwICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6IChnc3RfbWlrbW9kX2luaXQpLAotCShnc3RfbWlrbW9kX3NyY2ZpeGF0ZSksIChnc3RfbWlrbW9kX3NyY2xpbmspLCAoZ3N0X21pa21vZF9sb29wKToKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmg6Ci0JICBmaXggY2FwcyBuZWdvdGlhdGlvbiBpbiBtaWttb2QKLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfcHJpbnQpOgotCSAgb3V0cHV0IGRlYnVnIGluZm9ybWF0aW9uCi0KLTIwMDQtMDItMDggIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9uYXZpZ2F0aW9uL01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L3hvdmVybGF5L01ha2VmaWxlLmFtOgotCSAgcmVtb3ZlIHVudXNlZCBHU1RfT1BUX0NGTEFHUyBmcm9tIE1ha2VmaWxlcwotCSAgaW5jbHVkZSBYX0NGTEFHUyBhbmQgWF9MSUJTIGluIHhvdmVybGF5LiAoIzEzMTk0OCkKLQotMjAwNC0wMi0wNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X2hhbmRsZV9ldmVudCk6IERvbid0Ci0JcHVzaCBldmVudHMgdG8gcGFkcyB0aGF0IGhhdmVuJ3QgYmVlbiBjcmVhdGVkICgjMTMzNTA4KQotCi0yMDA0LTAyLTA3ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2luaXQpLCAoZ3N0X2R2ZGVjX3NyY19jb252ZXJ0KSwKLQkoZ3N0X2R2ZGVjX3NpbmtfY29udmVydCksIChnc3RfZHZkZWNfaGFuZGxlX3NpbmtfZXZlbnQpLAotCShnc3RfZHZkZWNfdmlkZW9fZ2V0Y2FwcyksIChnc3RfZHZkZWNfdmlkZW9fbGluayksCi0JKGdzdF9kdmRlY19sb29wKSwgKGdzdF9kdmRlY19jaGFuZ2Vfc3RhdGUpOgotCVNlY29uZCBhdHRlbXB0IGF0IGNvbW1pdHRpbmcgYSB3b3JraW5nIGR2ZGVjIGVsZW1lbnQuCi0KLTIwMDQtMDItMDYgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCUJ1aWxkIGZpeGVzIGZvciBPUyBYOiAoc2VlICMxMjk2MDApCi0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3JlYWRfc3RyaCksCi0JKGdzdF9yaWZmX3JlYWRfc3RyZl92aWRzKSwgKGdzdF9yaWZmX3JlYWRfc3RyZl9hdWRzKSwKLQkoZ3N0X3JpZmZfcmVhZF9zdHJmX2lhdnMpOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fYXZpaCksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX29kbWwpOgotCSogZ3N0L3BsYXlvbmRlbWFuZC9NYWtlZmlsZS5hbToKLQkqIGdzdC9ydHAvcnRwLXBhY2tldC5jOgotCi0yMDA0LTAyLTA1ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2luaXQpLCAoZ3N0X2R2ZGVjX2xvb3ApOiBSZXZlcnQKLQlsYXN0IGNoYW5nZSwgYmVjYXVzZSBpdCBKdXN0IERvZXNuJ3QgQ29tcGlsZS4KLQotMjAwNC0wMi0wNSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfY2hhaW4pOgotCSAgc2tpcCB1bmRlY29kYWJsZSBpZDN2MiB0YWcgaW5zdGVhZCBvZiBrZWVwaW5nIGl0Ci0KLTIwMDQtMDItMDUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L21wZWdhdWRpb3BhcnNlL2dzdG1wZWdhdWRpb3BhcnNlLmM6IChnc3RfbXAzcGFyc2VfY2hhaW4pOgotCVVucmVmIGxlYWtlZCBidWZmZXIuICAoTm90aWNlZCBieSBSb25hbGQpCi0KLTIwMDQtMDItMDUgIERhdmlkIEkuIExlaG4gIDxkbGVobkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIHBrZ2NvbmZpZy9nc3RyZWFtZXItbGlicy11bmluc3RhbGxlZC5wYy5pbjoKLQlTeW5jIHJlcXVpcmVzIHdpdGggb3RoZXIgY2hlY2tzLiAgPj0gdnMgPS4KLQotMjAwNC0wMi0wNiAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19pbml0KSwgKGdzdF9kdmRlY192aWRlb19nZXRjYXBzKSwKLQkoZ3N0X2R2ZGVjX3ZpZGVvX2xpbmspLCAoZ3N0X2R2ZGVjX2xvb3ApOgotCSogZXh0L2R2L2dzdGR2ZGVjLmg6Ci0JICByZXdvcmsgdGhlIGNhcHMgbmVnb3RpYXRpb24gc28gdGhhdCBkdmRlYyB3b3JrcyBhZ2FpbiBpbnN0ZWFkCi0JICBvZiBqdXN0IHNlZ2ZhdWx0aW5nLgotCi09PT0gcmVsZWFzZSAwLjcuNCA9PT0KLQotMjAwNC0wMi0wNiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogTkVXUzogR1N0cmVhbWVyIFBsdWdpbnMgMC43LjQgIkZvciBHcmVhdCBKdXN0aWNlIiByZWxlYXNlZAotCSogY29uZmlndXJlLmFjOiBjaGFuZ2VkIGZvciByZWxlYXNlCi0KLTIwMDQtMDItMDUgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9nY29uZi9nc3RyZWFtZXItZ2NvbmYtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWludGVyZmFjZXMtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLWxpYnMtdW5pbnN0YWxsZWQucGMuaW46Ci0JKiBwa2djb25maWcvZ3N0cmVhbWVyLXBsYXktdW5pbnN0YWxsZWQucGMuaW46Ci0gICAgICAgICAgcmV3b3JrZWQgcGF0Y2ggYnkgRGF2aWQgTGVobiB0byBmaXggbGliZGlyIGFuZCBpbmNsdWRlZGlyIGZvcgotICAgICAgICAgIHVuaW5zdGFsbGVkIGxpYnJhcmllcwotICAgICAgICAgIHJlbW92ZWQgcGxheSBhbmQgZ2NvbmYgZnJvbSBnc3RyZWFtZXItbGlicyBzaW5jZSB0aGV5IGhhdmUgdGhlaXIKLSAgICAgICAgICBvd24gcGtnY29uZmlnIGZpbGVzCi0KLTIwMDQtMDItMDQgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcGFyc2VfZm10KTogRml4IGEgY2FwcwotCW1lbWxlYWsuCi0KLTIwMDQtMDItMDUgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX2luZm8pOgotCSAgdXNlIGNvcnJlY3QgR1NUX1RBR19FTkNPREVSIHRhZwotCi0yMDA0LTAyLTA1ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX2NoYW5nZV9zdGF0ZSk6Ci0JICBiZSBzdXJlIHRvIHN0b3AgdGhlIGNsb2NrIHdoZW4gZ29pbmcgdG8gcGF1c2VkCi0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3NzaW5rX2NoYW5nZV9zdGF0ZSk6Ci0JICByZXNldCBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgd2hlbiBnb2luZyB0byByZWFkeS4KLQlmaXhlcyAjMTMyOTM1Ci0KLTIwMDQtMDItMDUgIENoYXJsZXMgU2NobWlkdCA8Y3NjaG1pZHQyQGVtaWNoLmVkdT4KLQotCXJldmlld2VkIGJ5IEJlbmphbWluIE90dGUKLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9tYWRfaWQzX3RvX3RhZ19saXN0KToKLQkgIGV4dHJhY3QgdHJhY2sgY291bnQgKGZpeGVzICMxMzM0MTApCi0KLTIwMDQtMDItMDQgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2RvX2NhcHNfbmVnbyk6Ci0JICB0aGF0IHNob3VsZCBiZSAhPSwgbm90ID09IChmaXhlcyAjMTMyNTE5KQotCi0yMDA0LTAyLTA0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQlNYWtlIHN1cmUgc2V0X2V4cGxpY2l0X2NhcHMoKSBpcyBjYWxsZWQgYmVmb3JlIGFkZGluZyBwYWQuCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlbXV4LmM6IChnc3RfZmZtcGVnZGVtdXhfbG9vcCk6Ci0JKiBnc3QvaWQzL2dzdGlkM3R5cGVzLmM6IChnc3RfaWQzdHlwZXNfbG9vcCk6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3N5c2hlYWQpOgotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6IChnc3Rfcm1kZW11eF9hZGRfc3RyZWFtKToKLQotMjAwNC0wMi0wNCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotICAgICAgICAgIGJ1bXAgbmFubyB0byAyLCBmaXJzdCBwcmVyZWxlYXNlCi0gICAgICAgICAgcHV0IGJhY2sgQU1fUFJPR19MSUJUT09MCi0KLTIwMDQtMDItMDQgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHRlc3RzdWl0ZS9hbHNhL01ha2VmaWxlLmFtOgotICAgICAgICAgIHRoZXNlIGFyZSB1c2VyIHRlc3QgYXBwcywgbm90IGF1dG9tYXRpYyB0ZXN0c3VpdGUgdGVzdHMKLQotMjAwNC0wMi0wNCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JQ29udmVydCBHU1RfREVCVUdfQ0FQUygpIHRvIEdTVF9ERUJVRygpOgotCSogZ3N0L21wZWcxdmlkZW9wYXJzZS9nc3RtcDF2aWRlb3BhcnNlLmM6Ci0JKG1wMXZpZGVvcGFyc2VfcGFyc2Vfc2VxKToKLQkqIGdzdC9yZWFsbWVkaWEvcm1kZW11eC5jOiAoZ3N0X3JtZGVtdXhfYWRkX3N0cmVhbSk6Ci0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9nZXRjYXBzKToKLQkqIHN5cy94dmlkZW8vZ3N0eHdpbmRvdy5jOiAoX2dzdF94d2luZG93X25ldyk6Ci0JKiBzeXMveHZpZGVvL3h2aWRlb3NpbmsuYzogKGdzdF94dmlkZW9zaW5rX3Npbmtjb25uZWN0KSwKLQkoZ3N0X3h2aWRlb3NpbmtfZ2V0Y2Fwcyk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2dldF94dl9zdXBwb3J0KToKLQkqIHRlc3RzdWl0ZS9nc3QtbGludDogbW9yZSB0ZXN0cwotCi0yMDA0LTAyLTA0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQlSZXBsYWNlIHVzZSBvZiBHU1RfUEFEX0ZPUk1BVFNfRlVOQ1RJT04oKSBhbmQgc2ltaWxhciBtYWNyb3MKLQl3aXRoIHRoZSBjb2RlIHRoYXQgdGhleSB3b3VsZCBleHBhbmQgdG8uCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY2RlY19nZXRfc3JjX2Zvcm1hdHMpLAotCShnc3RfZmxhY2RlY19nZXRfc3JjX3F1ZXJ5X3R5cGVzKSwKLQkoZ3N0X2ZsYWNkZWNfZ2V0X3NyY19ldmVudF9tYXNrcyk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogKGdzdF9nbm9tZXZmc3NyY19nZXRfZm9ybWF0cyksCi0JKGdzdF9nbm9tZXZmc3NyY19nZXRfcXVlcnlfdHlwZXMpLAotCShnc3RfZ25vbWV2ZnNzcmNfZ2V0X2V2ZW50X21hc2spOgotCi0yMDA0LTAyLTA0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuYzogKGdzdF9zaW5lc3JjX2NsYXNzX2luaXQpLAotCShnc3Rfc2luZXNyY19kaXNwb3NlKToKLQkgIGZpeCBtZW1sZWFrIGJ5IHByb3Blcmx5IGRpc3Bvc2luZyBzaW5lc3JjCi0KLTIwMDQtMDItMDQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3hvdmVybGF5L3hvdmVybGF5LmM6IChnc3RfeF9vdmVybGF5X2V4cG9zZSk6Ci0JKiBnc3QtbGlicy9nc3QveG92ZXJsYXkveG92ZXJsYXkuaDogQWRkaW5nIHRoZSBfZXhwb3NlIG1ldGhvZCB0byB0ZWxsCi0JYW4gb3ZlcmxheSB0byByZWRyYXcgdGhlIGltYWdlIGJlY2F1c2UgaXQgaGFzIGJlZW4gZXhwb3NlZC4KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX2Rlc3Ryb3kpLAotCShnc3RfeGltYWdlc2lua194aW1hZ2VfcHV0KSwgKGdzdF94aW1hZ2VzaW5rX2V4cG9zZSksCi0JKGdzdF94aW1hZ2VzaW5rX3hvdmVybGF5X2luaXQpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6Ci0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDogSW1wbGVtZW50IGV4cG9zZSBtZXRob2QgZnJvbSBYT3ZlcmxheQotCWludGVyZmFjZQotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194dmltYWdlX2Rlc3Ryb3kpLAotCShnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9wdXQpLCAoZ3N0X3h2aW1hZ2VzaW5rX2V4cG9zZSksCi0JKGdzdF94dmltYWdlc2lua194b3ZlcmxheV9pbml0KSwgKGdzdF94dmltYWdlc2lua19pbml0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmg6IEltcGxlbWVudCBleHBvc2UgbWV0aG9kIGZyb20gWE92ZXJsYXkKLQlpbnRlcmZhY2UKLQotMjAwNC0wMi0wMyAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKGdzdF9nZGtfcGl4YnVmX3R5cGVfZmluZCk6Ci0JICBtb3JlIG1lbWxlYWsgZml4YWdlCi0KLTIwMDQtMDItMDMgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzoKLQkgIGZpeCBtZW1sZWFrcyBzaG93biBieSBnc3QtdHlwZWZpbmQKLQotMjAwNC0wMi0wMyAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29tbW9uL2dsaWItZ2VuLm1hazoKLSAgICAgICAgICBhZGQgaGFjayBydWxlIHRvIHRvdWNoIC5QbG8gZmlsZXMKLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC90dW5lci9NYWtlZmlsZS5hbToKLSAgICAgICAgICByZW1vdmUgZ2xpYl9yb290IHZhcmlhYmxlCi0KLTIwMDQtMDItMDMgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAoZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSk6Ci0JICBzZXQgZXhwbGljaXQgY2FwcyBiZWZvcmUgYWRkaW5nIHRoZSBlbGVtZW50LCBzbyB0aGUgYXV0b3BsdWdnZXJzIGNhbgotCSAgcGx1ZyBjb3JyZWN0bHkuCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1wM190eXBlX2ZpbmQpLAotCShtcGVnMl9zeXNfdHlwZV9maW5kKSwgKG1wZWcxX3N5c190eXBlX2ZpbmQpLAotCShtcGVnX3ZpZGVvX3R5cGVfZmluZCksIChtcGVnX3ZpZGVvX3N0cmVhbV90eXBlX2ZpbmQpLAotCShkdl90eXBlX2ZpbmQpOgotCSAgZml4IG1lbWxlYWtzIGluIHR5cGVmaW5kIGZ1bmN0aW9ucy4gZ3N0X3R5cGVfZmluZF9zdWdnZXN0IHRha2VzIGEgY29uc3QKLQkgIGFyZ3VtZW50LgotCi0yMDA0LTAyLTAzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvY29sb3JiYWxhbmNlL01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9jb2xvcmJhbGFuY2UtbWFyc2hhbC5saXN0OgotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9jb2xvcmJhbGFuY2UuYzoKLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvY29sb3JiYWxhbmNlLmg6Ci0JKiBnc3QtbGlicy9nc3QvY29sb3JiYWxhbmNlL2NvbG9yYmFsYW5jZW1hcnNoYWwubGlzdDoKLQkqIGdzdC1saWJzL2dzdC9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci1tYXJzaGFsLmxpc3Q6Ci0JKiBnc3QtbGlicy9nc3QvbWl4ZXIvbWl4ZXIuYzoKLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci5oOgotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVybWFyc2hhbC5saXN0OgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5Lmg6Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvdHVuZXItbWFyc2hhbC5saXN0OgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL3R1bmVyLmM6Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvdHVuZXIuaDoKLQkqIGdzdC1saWJzL2dzdC90dW5lci90dW5lcm1hcnNoYWwubGlzdDoKLSAgICAgICAgICB1c2UgbmV3IGdsaWItZ2VuLm1hayBzbmlwcGV0IHRvIGNsZWFuIHVwIE1ha2VmaWxlLmFtCi0gICAgICAgICAgZml4IHZhcmlvdXMgYnVncyBpbiBNYWtlZmlsZS5hbSdzCi0KLTIwMDQtMDItMDMgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9jaGFpbik6Ci0JICBoYW5kbGUgY2hhaW4gcGFyc2luZyBjb3JyZWN0bHkgaW4gdGhlIG11bHRpY2hhaW4gY2FzZQotCSogZXh0L3RoZW9yYS90aGVvcmFkZWMuYzogKGdzdF90aGVvcmFfZGVjX2luaXQpLCAoX3RoZW9yYV9pbG9nKSwKLQkodGhlb3JhX2RlY19mcm9tX2dyYW51bGVwb3MpLCAodGhlb3JhX2RlY190b19ncmFudWxlcG9zKSwKLQkodGhlb3JhX2RlY19zcmNfcXVlcnkpLCAodGhlb3JhX2RlY19zcmNfZXZlbnQpLCAodGhlb3JhX2RlY19ldmVudCksCi0JKHRoZW9yYV9kZWNfY2hhaW4pOgotCSAgaGFuZGxlIGV2ZW50cyBhbmQgcXVlcmllcyBjb3JyZWN0bHkKLQotMjAwNC0wMi0wMyAgRGF2aWQgSS4gTGVobiAgPGRsZWhuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogLmN2c2lnbm9yZToKLQlJZ25vcmUgZ2VuZXJhdGVkIGZpbGUgX3N0ZGludC5oLgotCi0yMDA0LTAyLTAzICBEYXZpZCBJLiBMZWhuICA8ZGxlaG5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvY29sb3JiYWxhbmNlL01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9jb2xvcmJhbGFuY2UuaDoKLQkqIGdzdC1saWJzL2dzdC9taXhlci9NYWtlZmlsZS5hbToKLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci5oOgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5Lmg6Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvdHVuZXIvdHVuZXIuaDoKLQlHZW5lcmF0ZSBlbnVtIHR5cGUgY29kZSB3aXRoIGdsaWItbWtlbnVtcy4KLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvLmN2c2lnbm9yZToKLQkqIGdzdC1saWJzL2dzdC9taXhlci8uY3ZzaWdub3JlOgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvLmN2c2lnbm9yZToKLQkqIGdzdC1saWJzL2dzdC90dW5lci8uY3ZzaWdub3JlOgotCUlnbm9yZSBnZW5lcmF0ZWQgZmlsZXMuCi0KLTIwMDQtMDItMDMgIERhdmlkIEkuIExlaG4gIDxkbGVobkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9hdWRpby8uY3ZzaWdub3JlOgotCUlnbm9yZSBnZW5lcmF0ZWQgZmlsZS4KLQkqIGdzdC1saWJzL2dzdC9hdWRpby9NYWtlZmlsZS5hbToKLQlEbyBub3QgaW5zdGFsbCBleGFtcGxlIGZpbHRlci4KLQotMjAwNC0wMi0wMyAgRGF2aWQgSS4gTGVobiAgPGRsZWhuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotCSogZXhhbXBsZXMvc3dpdGNoLy5jdnNpZ25vcmU6Ci0JSWdub3JlIGdlbmVyYXRlZCBmaWxlLgotCi0yMDA0LTAyLTAzICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGNvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQ6Ci0JKiBjb25maWd1cmUuYWM6Ci0JICBhZGQgQVhfQ1JFQVRFX1NURElOVF9IIHRvIGdldCBjb3JyZWN0IHR5cGUgZGVmaW5pdGlvbnMgZm9yIGE1MmRlYyBpbgotCSAgX3N0ZGludC5oLgotCSogTWFrZWZpbGUuYW06Ci0JICByZW1vdmUgZ2VuZXJhdGVkIF9zdGRpbnQuaCBpbiBESVNUQ0xFQU5GSUxFUwotCSogZXh0L2E1MmRlYy9nc3RhNTJkZWMuYzoKLQkgIGluY2x1ZGUgX3N0ZGludC5oIGZvciBhNTJkZWMuIChzaG91bGQgZml4ICMxMzMwNjQpCi0KLTIwMDQtMDItMDIgIEplcmVteSBTaW1vbiAgPGplc2ltb25AbGliZXJ0eXN1cmYuZnI+Ci0KLQkqIGdzdC90YWdzL2dzdHZvcmJpc3RhZy5jOiAoZ3N0X3ZvcmJpc190YWdfYWRkKSwKLQkoZ3N0X3RhZ190b192b3JiaXNfY29tbWVudHMpOgotCUFkZCByZXBsYXlnYWluIHN1cHBvcnQgdG8gdm9yYmlzdGFnCi0KLTIwMDQtMDItMDIgIEplcmVteSBTaW1vbiAgPGplc2ltb25AbGliZXJ0eXN1cmYuZnI+Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2NvZGVjbWFwLmM6IChnc3RfZmZtcGVnX2NvZGVjaWRfdG9fY2FwcyksCi0JKGdzdF9mZm1wZWdfY2Fwc190b19leHRyYWRhdGEpOgotCSAgRml4IFNWUTMgY2FwcyBmbGFnIHByb3BlcnRpZXMKLQkgIFVzZSBnbGliIG1hY3JvIGZvciBieXRlcyBzd2FwCi0KLTIwMDQtMDItMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6IChnc3RfYWZzaW5rX3BsdWdpbl9pbml0KToKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzogKGdzdF9hZnNyY19wbHVnaW5faW5pdCk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnMuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9zbmRmaWxlL2dzdHNmLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBnc3QvYXZpL2dzdGF2aS5jOiAocGx1Z2luX2luaXQpOgotCSogc3lzL2R4cjMvZHhyM2luaXQuYzogKHBsdWdpbl9pbml0KToKLQkqIHN5cy9vc3MvZ3N0b3NzYXVkaW8uYzogKHBsdWdpbl9pbml0KToKLQkqIHN5cy92NGwvZ3N0djRsLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyLmM6IChwbHVnaW5faW5pdCk6Ci0gICAgICAgICAgcmVtb3ZlIHRleHRkb21haW4gY2FsbHMKLQkqIHBvL25sLnBvOgotICAgICAgICAgIHVwZGF0ZSBEdXRjaCB0cmFuc2xhdGlvbgotCi0yMDA0LTAyLTAyICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuYzogKGdzdF9wbGF5X3BpcGVsaW5lX3NldHVwKSwKLQkoZ3N0X3BsYXlfc2V0X2F1ZGlvX3NpbmspOiBNb3Zpbmcgdm9sdW1lIGluIHRoZSBhdWRpbyB0aHJlYWQgZm9yCi0JaW5zdGFudGFuZW91cyB2b2x1bWUgY2hhbmdlLiBNYXliZSBpIHdpbGwgYWRkIGFub3RoZXIgdm9sdW1lIGluIGZyb250Ci0Jb2YgdmlzdWFsaXphdGlvbiBsYXRlciwgbm90IHN1cmUgeWV0IHRob3VnaC4KLQotMjAwNC0wMi0wMiAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3JlbmVnb3RpYXRlX3NpemUpLAotCShnc3RfeGltYWdlc2lua19oYW5kbGVfeGV2ZW50cyk6IEJldHRlciBYIGV2ZW50cyBoYW5kbGluZywgb25seSB0YWtlCi0JdGhlIGxhdGVzdCBldmVudHMgZm9yIGNvbmZpZ3VyZSBhbmQgbW90aW9uLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19oYW5kbGVfeGV2ZW50cyk6IHNhbWUuCi0KLTIwMDQtMDItMDIgIEpvbiBUcm93YnJpZGdlICA8dHJvd0BnbnUub3JnPgotCi0JcmV2aWV3ZWQgYnk6IERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCUZpeCBtZW1vcnkgbGVha3M6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlYy5jOiAoZ3N0X2ZmbXBlZ2RlY19yZWdpc3Rlcik6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2VuYy5jOiAoZ3N0X2ZmbXBlZ2VuY19yZWdpc3Rlcik6Ci0KLTIwMDQtMDItMDIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCWNvZGUgY2xlYW51cC4gIENoYW5nZSBiemVybygpIHRvIG1lbXNldCgpLiAgUmVtb3ZlIGR1cGxpY2F0ZSA7IGF0IGVuZHMKLQlvZiBsaW5lcy4KLQkqIGV4dC9jZHBhcmFub2lhL2dzdGNkcGFyYW5vaWEuYzogKGNkcGFyYW5vaWFfZXZlbnQpOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY3RhZy5jOiAoZ3N0X2ZsYWNfdGFnX2NoYWluKToKLQkqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzogKGdzdF94dmlkZGVjX3NyY19saW5rKToKLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuYzogKGdzdF9wbGF5X2dldF9zaW5rX2VsZW1lbnQpOgotCSogZ3N0L2FjM3BhcnNlL2dzdGFjM3BhcnNlLmM6IChnc3RfYWMzcGFyc2VfY2hhaW4pOgotCSogZ3N0L2VmZmVjdHYvZ3N0ZWRnZS5jOiAoZ3N0X2VkZ2V0dl9zaW5rY29ubmVjdCk6Ci0JKiBnc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmM6IChnc3RfdmVydGlnb3R2X3Npbmtjb25uZWN0KToKLQkqIGdzdC9pbnRmbG9hdC9mbG9hdDIyaW50LmM6IChnc3RfZmxvYXQyXzJfaW50X2dldGNhcHMpLAotCShnc3RfZmxvYXQyXzJfaW50X2xpbmspOgotCSogZ3N0L21wZWcyc3ViL2dzdG1wZWcyc3VidC5jOiAoZ3N0X21wZWcyc3VidF9jaGFpbl9zdWJ0aXRsZSk6Ci0JKiBnc3QvcnRqcGVnL1JUanBlZy5jOiAoUlRqcGVnX2luaXRfbWNvbXByZXNzKToKLQkqIGdzdC90Y3AvZ3N0dGNwc2luay5jOiAoZ3N0X3RjcHNpbmtfaW5pdF9zZW5kKToKLQkqIGdzdC90Y3AvZ3N0dGNwc3JjLmM6IChnc3RfdGNwc3JjX2luaXRfcmVjZWl2ZSk6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX2luaXRfc2VuZCk6Ci0JKiBnc3QvdWRwL2dzdHVkcHNyYy5jOiAoZ3N0X3VkcHNyY19pbml0X3JlY2VpdmUpOgotCSogc3lzL3Y0bC9nc3R2NGxlbGVtZW50LmM6IChnc3RfdjRsZWxlbWVudF9pbml0KToKLQkqIHN5cy92NGwyL3Y0bDJzcmNfY2FsbHMuYzogKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKToKLQkqIHRlc3RzdWl0ZS9nc3QtbGludDogQWRkIHRlc3RzIGZvciBiemVybyBhbmQgOzsKLQotMjAwNC0wMi0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvZGVidWcvZWZlbmNlLmM6IEFkZCBmYWxsYmFjayBpZiBNQVBfQU5PTllNT1VTIGlzbid0IGRlZmluZWQuCi0KLTIwMDQtMDItMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9hYWxpYi9nc3RhYXNpbmsuYzogKGdzdF9hYXNpbmtfb3Blbik6Ci0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9saW5rKSwgKGdzdF9hbHNhX3hydW5fcmVjb3ZlcnkpOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNpbmsuYzogKGdzdF9hbHNhX3NpbmtfbG9vcCk6Ci0JKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6IChnc3RfYWxzYV9zcmNfbG9vcCk6Ci0JKiBleHQvYXVkaW9maWxlL2dzdGFmc2luay5jOiAoZ3N0X2Fmc2lua19vcGVuX2ZpbGUpLAotCShnc3RfYWZzaW5rX2Nsb3NlX2ZpbGUpOgotCSogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5jOiAoZ3N0X2Fmc3JjX29wZW5fZmlsZSksCi0JKGdzdF9hZnNyY19jbG9zZV9maWxlKToKLQkqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzogKGdzdF9kaXZ4ZGVjX3NldHVwKSwgKGdzdF9kaXZ4ZGVjX2NoYWluKToKLQkqIGV4dC9kaXZ4L2dzdGRpdnhlbmMuYzogKGdzdF9kaXZ4ZW5jX3NldHVwKSwgKGdzdF9kaXZ4ZW5jX2NoYWluKToKLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2xvb3ApOgotCSogZXh0L2R2ZG5hdi9kdmRuYXZzcmMuYzogKGR2ZG5hdnNyY191c2VyX29wKSwgKGR2ZG5hdnNyY19nZXQpOgotCSogZXh0L2VzZC9lc2Rtb24uYzogKGdzdF9lc2Rtb25fZ2V0KToKLQkqIGV4dC9lc2QvZXNkc2luay5jOiAoZ3N0X2VzZHNpbmtfY2hhaW4pLCAoZ3N0X2VzZHNpbmtfb3Blbl9hdWRpbyk6Ci0JKiBleHQvZmFhYy9nc3RmYWFjLmM6IChnc3RfZmFhY19jaGFpbik6Ci0JKiBleHQvZmFhZC9nc3RmYWFkLmM6IChnc3RfZmFhZF9jaGFpbik6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlYy5jOiAoZ3N0X2ZmbXBlZ2RlY19jaGFpbik6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlbXV4LmM6IChnc3RfZmZtcGVnZGVtdXhfbG9vcCk6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ211eC5jOiAoZ3N0X2ZmbXBlZ211eF9sb29wKToKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjZGVjX2Vycm9yX2NhbGxiYWNrKSwKLQkoZ3N0X2ZsYWNkZWNfbG9vcCk6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChnc3RfZmxhY2VuY19jaGFpbik6Ci0JKiBleHQvZmxhYy9nc3RmbGFjdGFnLmM6IChnc3RfZmxhY190YWdfY2hhaW4pOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl9jaGFpbik6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzaW5rLmM6IChnc3RfZ25vbWV2ZnNzaW5rX29wZW5fZmlsZSksCi0JKGdzdF9nbm9tZXZmc3NpbmtfY2xvc2VfZmlsZSk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogKGF1ZGlvY2FzdF9pbml0KSwKLQkoZ3N0X2dub21ldmZzc3JjX29wZW5fZmlsZSk6Ci0JKiBleHQvaXZvcmJpcy92b3JiaXNmaWxlLmM6IChnc3RfaXZvcmJpc2ZpbGVfbG9vcCk6Ci0JKiBleHQvbGFtZS9nc3RsYW1lLmM6IChnc3RfbGFtZV9zaW5rX2xpbmspLCAoZ3N0X2xhbWVfY2hhaW4pOgotCSogZXh0L2xjcy9nc3Rjb2xvcnNwYWNlLmM6IChnc3RfY29sb3JzcGFjZV9zcmNjb25uZWN0X2Z1bmMpOgotCSogZXh0L21hZC9nc3RpZDN0YWcuYzogKGdzdF9pZDNfdGFnX2hhbmRsZV9ldmVudCksCi0JKGdzdF9pZDNfdGFnX2RvX3R5cGVmaW5kKSwgKGdzdF9pZDNfdGFnX2NoYWluKToKLQkqIGV4dC9tYWQvZ3N0bWFkLmM6IChnc3RfbWFkX2NoYWluKToKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6IChnc3RfbWlrbW9kX2xvb3ApOgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6Ci0JKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmMuY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXguY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXhpYml0c3RyZWFtLmNjOgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9jaGFpbiksCi0JKGdzdF9vZ2dfZGVtdXhfcHVzaCk6Ci0JKiBleHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuYzoKLQkqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2xvY2spLAotCShnc3Rfc2RsdmlkZW9zaW5rX2luaXRzZGwpLCAoZ3N0X3NkbHZpZGVvc2lua19jcmVhdGUpOgotCSogZXh0L3NuZGZpbGUvZ3N0c2YuYzogKGdzdF9zZl9vcGVuX2ZpbGUpLCAoZ3N0X3NmX2Nsb3NlX2ZpbGUpLAotCShnc3Rfc2ZfbG9vcCk6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhlbmMuYzogKGdzdF9zcGVleGVuY19jaGFpbik6Ci0JKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOiAoZ3N0X3N3ZmRlY19sb29wKToKLQkqIGV4dC90YXJraW4vZ3N0dGFya2luZGVjLmM6IChnc3RfdGFya2luZGVjX2NoYWluKToKLQkqIGV4dC90YXJraW4vZ3N0dGFya2luZW5jLmM6IChnc3RfdGFya2luZW5jX2NoYWluKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzZW5jX2NoYWluKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZmlsZS5jOiAoZ3N0X3ZvcmJpc2ZpbGVfbG9vcCk6Ci0JKiBleHQveHZpZC9nc3R4dmlkZGVjLmM6IChnc3RfeHZpZGRlY19zZXR1cCksIChnc3RfeHZpZGRlY19jaGFpbik6Ci0JKiBleHQveHZpZC9nc3R4dmlkZW5jLmM6IChnc3RfeHZpZGVuY19zZXR1cCksIChnc3RfeHZpZGVuY19jaGFpbik6Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3BlZWtfaGVhZCksCi0JKGdzdF9yaWZmX3JlYWRfZWxlbWVudF9kYXRhKSwgKGdzdF9yaWZmX3JlYWRfc2VlayksCi0JKGdzdF9yaWZmX3BlZWtfbGlzdCksIChnc3RfcmlmZl9yZWFkX2xpc3QpLCAoZ3N0X3JpZmZfcmVhZF9oZWFkZXIpOgotCSogZ3N0L2FkZGVyL2dzdGFkZGVyLmM6IChnc3RfYWRkZXJfbG9vcCk6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19zZWdtZW50KSwKLQkoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX3N0cmVhbSksIChnc3RfYXNmX2RlbXV4X2dldF9zdHJlYW0pOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5pdCksCi0JKGdzdF9hdmlfZGVtdXhfYWRkX3N0cmVhbSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfc3RvcF9maWxlKToKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX2xvb3ApOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21fY2hhaW4pOgotCSogZ3N0L2lkMy9nc3RpZDN0eXBlcy5jOiAoZ3N0X2lkM3R5cGVzX2xvb3ApOgotCSogZ3N0L2ludGZsb2F0L2Zsb2F0MjJpbnQuYzogKGdzdF9mbG9hdDJfMl9pbnRfY2hhaW4pOgotCSogZ3N0L2ludGZsb2F0L2dzdGZsb2F0MmludC5jOiAoZ3N0X2Zsb2F0MmludF9sb29wKToKLQkqIGdzdC9pbnRmbG9hdC9nc3RpbnQyZmxvYXQuYzogKGdzdF9pbnQyZmxvYXRfY2hhaW5fZ2ludDE2KToKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9pZCksCi0JKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9sZW5ndGgpLCAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2RhdGEpLAotCShnc3RfZWJtbF9yZWFkX3NlZWspLCAoZ3N0X2VibWxfcmVhZF91aW50KSwgKGdzdF9lYm1sX3JlYWRfc2ludCksCi0JKGdzdF9lYm1sX3JlYWRfZmxvYXQpLCAoZ3N0X2VibWxfcmVhZF9oZWFkZXIpOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfaW5pdF9zdHJlYW0pLAotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cCk6Ci0JKiBnc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jOiAoZ3N0X21vbm9zY29wZV9jaGFpbik6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVncGFyc2UuYzogKGdzdF9tcGVnX3BhcnNlX2xvb3ApOgotCSogZ3N0L29uZXRvbi9nc3RvbmV0b24uYzogKGdzdF9vbmV0b25fY2hhaW4pOgotCSogZ3N0L3NpbGVuY2UvZ3N0c2lsZW5jZS5jOiAoZ3N0X3NpbGVuY2VfZ2V0KToKLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuYzogKGdzdF9zaW5lc3JjX2dldCk6Ci0JKiBnc3Qvc21wdGUvZ3N0c21wdGUuYzogKGdzdF9zbXB0ZV9sb29wKToKLQkqIGdzdC9zcGVlZC9nc3RzcGVlZC5jOiAoc3BlZWRfbG9vcCk6Ci0JKiBnc3QvdGFncy9nc3R2b3JiaXN0YWcuYzogKGdzdF92b3JiaXNfdGFnX2NoYWluKToKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6IChnc3RfdmlkZW90ZXN0c3JjX2dldCk6Ci0JKiBnc3Qvdm9sZW52L2dzdHZvbGVudi5jOiAoZ3N0X3ZvbGVudl9jaGFpbik6Ci0JKiBnc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jOiAoZ3N0X3dhdmVuY19jaGFpbik6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYzogKGdzdF93YXZwYXJzZV9wYXJzZV9mbXQpLAotCShnc3Rfd2F2cGFyc2VfbG9vcCk6Ci0JKiBzeXMvZHhyMy9keHIzYXVkaW9zaW5rLmM6IChkeHIzYXVkaW9zaW5rX29wZW4pLAotCShkeHIzYXVkaW9zaW5rX3NldF9tb2RlX3BjbSksIChkeHIzYXVkaW9zaW5rX3NldF9tb2RlX2FjMyksCi0JKGR4cjNhdWRpb3NpbmtfY2xvc2UpOgotCSogc3lzL2R4cjMvZHhyM3NwdXNpbmsuYzogKGR4cjNzcHVzaW5rX29wZW4pLCAoZHhyM3NwdXNpbmtfY2xvc2UpOgotCSogc3lzL2R4cjMvZHhyM3ZpZGVvc2luay5jOiAoZHhyM3ZpZGVvc2lua19vcGVuKSwKLQkoZHhyM3ZpZGVvc2lua19jbG9zZSksIChkeHIzdmlkZW9zaW5rX3dyaXRlX2RhdGEpOgotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50LmM6IChnc3Rfb3NzZWxlbWVudF9vcGVuX2F1ZGlvKToKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfY2hhaW4pOgotCSogc3lzL29zcy9nc3Rvc3NzcmMuYzogKGdzdF9vc3NzcmNfZ2V0KToKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzaW5rLmM6IChnc3RfdjRsbWpwZWdzaW5rX2NoYWluKToKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19idWZmZXJfZnJlZSk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19idWZmZXJfZnJlZSk6Ci0JKiBzeXMvdjRsL3Y0bC1vdmVybGF5X2NhbGxzLmM6IChnc3RfdjRsX3NldF9vdmVybGF5KSwKLQkoZ3N0X3Y0bF9zZXRfd2luZG93KSwgKGdzdF92NGxfZW5hYmxlX292ZXJsYXkpOgotCSogc3lzL3Y0bC92NGxfY2FsbHMuYzogKGdzdF92NGxfZ2V0X2NhcGFiaWxpdGllcyksIChnc3RfdjRsX29wZW4pLAotCShnc3RfdjRsX3NldF9jaGFuX25vcm0pLCAoZ3N0X3Y0bF9nZXRfc2lnbmFsKSwKLQkoZ3N0X3Y0bF9nZXRfZnJlcXVlbmN5KSwgKGdzdF92NGxfc2V0X2ZyZXF1ZW5jeSksCi0JKGdzdF92NGxfZ2V0X3BpY3R1cmUpLCAoZ3N0X3Y0bF9zZXRfcGljdHVyZSksIChnc3RfdjRsX2dldF9hdWRpbyksCi0JKGdzdF92NGxfc2V0X2F1ZGlvKToKLQkqIHN5cy92NGwvdjRsX2NhbGxzLmg6Ci0JKiBzeXMvdjRsL3Y0bG1qcGVnc2lua19jYWxscy5jOiAoZ3N0X3Y0bG1qcGVnc2lua19zeW5jX3RocmVhZCksCi0JKGdzdF92NGxtanBlZ3NpbmtfcXVldWVfZnJhbWUpLCAoZ3N0X3Y0bG1qcGVnc2lua19zZXRfcGxheWJhY2spLAotCShnc3RfdjRsbWpwZWdzaW5rX3BsYXliYWNrX2luaXQpLAotCShnc3RfdjRsbWpwZWdzaW5rX3BsYXliYWNrX3N0YXJ0KToKLQkqIHN5cy92NGwvdjRsbWpwZWdzcmNfY2FsbHMuYzogKGdzdF92NGxtanBlZ3NyY19xdWV1ZV9mcmFtZSk6Ci0JKiBzeXMvdjRsL3Y0bHNyY19jYWxscy5jOiAoZ3N0X3Y0bHNyY19xdWV1ZV9mcmFtZSksCi0JKGdzdF92NGxzcmNfc3luY19mcmFtZSksIChnc3RfdjRsc3JjX2NhcHR1cmVfaW5pdCksCi0JKGdzdF92NGxzcmNfcmVxdWV1ZV9mcmFtZSksIChnc3RfdjRsc3JjX3RyeV9wYWxldHRlKToKLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2dldCk6Ci0JKiBzeXMvdjRsMi92NGwyLW92ZXJsYXlfY2FsbHMuYzogKGdzdF92NGwyX3NldF9kaXNwbGF5KSwKLQkoZ3N0X3Y0bDJfc2V0X3dpbmRvdyksIChnc3RfdjRsMl9lbmFibGVfb3ZlcmxheSk6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IChnc3RfdjRsMl9nZXRfY2FwYWJpbGl0aWVzKSwKLQkoZ3N0X3Y0bDJfZmlsbF9saXN0cyksIChnc3RfdjRsMl9vcGVuKSwgKGdzdF92NGwyX2dldF9ub3JtKSwKLQkoZ3N0X3Y0bDJfc2V0X25vcm0pLCAoZ3N0X3Y0bDJfZ2V0X2lucHV0KSwgKGdzdF92NGwyX3NldF9pbnB1dCksCi0JKGdzdF92NGwyX2dldF9vdXRwdXQpLCAoZ3N0X3Y0bDJfc2V0X291dHB1dCksCi0JKGdzdF92NGwyX2dldF9mcmVxdWVuY3kpLCAoZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSksCi0JKGdzdF92NGwyX3NpZ25hbF9zdHJlbmd0aCksIChnc3RfdjRsMl9nZXRfYXR0cmlidXRlKSwKLQkoZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSk6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0JKiBzeXMvdjRsMi92NGwyc3JjX2NhbGxzLmM6IChnc3RfdjRsMnNyY19maWxsX2Zvcm1hdF9saXN0KSwKLQkoZ3N0X3Y0bDJzcmNfcXVldWVfZnJhbWUpLCAoZ3N0X3Y0bDJzcmNfZ3JhYl9mcmFtZSksCi0JKGdzdF92NGwyc3JjX2dldF9jYXB0dXJlKSwgKGdzdF92NGwyc3JjX3NldF9jYXB0dXJlKSwKLQkoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9pbml0KSwgKGdzdF92NGwyc3JjX2NhcHR1cmVfc3RhcnQpLAotCShnc3RfdjRsMnNyY19jYXB0dXJlX3N0b3ApOgotCSogc3lzL3ZjZC92Y2RzcmMuYzogKHZjZHNyY19vcGVuX2ZpbGUpOgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpLAotCShnc3RfeGltYWdlc2lua19jaGFpbik6Ci0JKiBzeXMveHZpZGVvL3h2aWRlb3NpbmsuYzogKGdzdF94dmlkZW9zaW5rX2J1ZmZlcl9uZXcpLAotCShnc3RfeHZpZGVvc2lua19zaW5rY29ubmVjdCksIChnc3RfeHZpZGVvc2lua19jaGFpbiksCi0JKGdzdF94dmlkZW9zaW5rX3h3aW5kb3dfbmV3KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKToKLQotMjAwNC0wMi0wMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L3ZvbHVtZS9nc3R2b2x1bWUuYzogKGdzdF92b2x1bWVfc2V0X3ZvbHVtZSksCi0JKGdzdF92b2x1bWVfZ2V0X3ZvbHVtZSksICh2b2x1bWVfY2xhc3NfaW5pdCksICh2b2x1bWVfaW5pdCksCi0JKHZvbHVtZV9jaGFpbl9pbnQxNiksICh2b2x1bWVfdXBkYXRlX3ZvbHVtZSk6Ci0JKiBnc3Qvdm9sdW1lL2dzdHZvbHVtZS5oOgotICAgICAgICAgIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlIGJ5IHJlbW92aW5nIG1hZ2ljIG51bWJlcnMKLSAgICAgICAgICBtYWtlIG1peGVyIGludGVyZmFjZSBleHBvcnQgMC0xMDAgcmFuZ2UKLSAgICAgICAgICBtYWtlIGl0IGludGVybmFsbHkgbWFwIHRvIDAuMC0xLjAgcmFuZ2Ugc28gdXNlcnMgZG9uJ3QgZGlzdG9ydAotICAgICAgICAgIG91dHB1dCBieSBwdXR0aW5nIHRoZSBzbGlkZXJzIGF0IGZ1bGwgdm9sdW1lCi0KLTIwMDQtMDItMDIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuYzogKGdzdF9wbGF5X3RpY2tfY2FsbGJhY2spLAotCShnc3RfcGxheV9zdGF0ZV9jaGFuZ2UpLCAoZ3N0X3BsYXlfc2Vla190b190aW1lKToKLSAgICAgICAgYmxvY2sgdGhlIHRpY2sgY2FsbGJhY2sgZm9yIDAuNSBzZWNzIGFmdGVyIGRvaW5nIGEgc2VlawotCi0yMDA0LTAyLTAyICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9uZXcpOgotICAgICAgICAgIGNoZWNrIGZvciBHRXJyb3IKLQotMjAwNC0wMi0wMSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9zZWVrX3RvX3RpbWUpLAotCShnc3RfcGxheV9uZXcpOiBBY2NlcHRpbmcgTlVMTCBHRXJyb3IsIGJsb2NraW5nIHRpbWUgdGljayB3aGlsZSBzZWVraW5nLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19zaW5rX2xpbmspLAotCShnc3RfeGltYWdlc2lua19jaGFpbiksIChnc3RfeGltYWdlc2lua19pbml0KTogcy9zaW5rY29ubmVjdC9zaW5rX2xpbmsKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfc2lua19saW5rKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKSwgKGdzdF94dmltYWdlc2lua19pbml0KTogcy9zaW5rY29ubmVjdC9zaW5rX2xpbmsKLQotMjAwNC0wMi0wMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfZXZlbnQpOgotICAgICAgICAgIGNoZWNrIGZvciBhIGZ1bmN0aW9uIGFkZGVkIGluIHZvcmJpcyAxLjEKLQotMjAwNC0wMS0zMSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhLmM6IChnc3RfYWxzYV9jaGFuZ2Vfc3RhdGUpLCAoZ3N0X2Fsc2Ffc3RhcnQpLAotCShnc3RfYWxzYV9kcmFpbl9hdWRpbyksIChnc3RfYWxzYV9zdG9wX2F1ZGlvKToKLQkgIHJlYWxseSBzdGFydC9zdG9wIGNsb2NrIG9ubHkgb24gUExBWUlORyA8PT4gUEFVU0VECi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19sb29wKToKLQkgIHJlbW92ZSBcbiBmcm9tIGRlYnVnZ2luZyBsaW5lcwotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9jaGFpbik6Ci0JICBtYWtlIGl0IHdvcmsgd2hlbiBzZWVraW5nIGRvZXMgbm90Ci0JKiBleHQvdm9yYmlzL3ZvcmJpc2RlYy5jOiAodm9yYmlzX2RlY19ldmVudCk6Ci0JICByZXNldCBvbiBESVNDT05UCi0KLTIwMDQtMDEtMzEgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfY2hhbmdlX3N0YXRlKSwgKGdzdF9hbHNhX3N0YXJ0KToKLQkgIHN0YXJ0IGNsb2NrIG9uIFBBVVNFRD0+UExBWUlORywgbm90IGxhdGVyCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19jaGVja19ldmVudCk6Ci0JICBleHRyYWN0IGNvcnJlY3QgdGltZSBmb3IgZGlmZmVyZW50IGRpc2NvbnQgZm9ybWF0cwotCShnc3RfYWxzYV9zaW5rX2dldF90aW1lKToKLQkgIGRvbid0IHNlZ2ZhdWx0IHdoZW4gbm8gZm9ybWF0IGlzIG5lZ290aWF0ZWQgeWV0LCBqdXN0IHJldHVybiAwCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6IChnc3Rfb2dnX2RlbXV4X3NyY19ldmVudCksCi0JKGdzdF9vZ2dfZGVtdXhfaGFuZGxlX2V2ZW50KSwgKGdzdF9vZ2dfZGVtdXhfcHVzaCksCi0JKGdzdF9vZ2dfcGFkX3B1c2gpOgotCSAgaGFuZGxlIGZsdXNoIGFuZCBkaXNjb250IGV2ZW50cyBjb3JyZWN0bHkKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX2V2ZW50KSwgKHZvcmJpc19kZWNfY2hhaW4pOgotCSAgaGFuZGxlIGRpc2NvbnQgZXZlbnRzIGNvcnJlY3RseQotCi0yMDA0LTAxLTMxICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5LmM6IChnc3RfcGxheV9lcnJvcl9xdWFyayksCi0JKGdzdF9wbGF5X2Vycm9yX2NyZWF0ZSksIChnc3RfcGxheV9lcnJvcl9wbHVnaW4pLAotCShnc3RfcGxheV9waXBlbGluZV9zZXR1cCksIChnc3RfcGxheV9pbml0KSwgKGdzdF9wbGF5X25ldyk6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5Lmg6Ci0gICAgICAgICAgYWRkIGVycm9yIGhhbmRsaW5nIGR1cmluZyBjcmVhdGlvbgotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKG1haW4pOgotICAgICAgICAgIHVzZSBuZXcgZ3N0X3BsYXlfbmV3Ci0KLQotMjAwNC0wMS0zMSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOiAodGhlb3JhX2RlY19jaGFpbik6Ci0JICBtYWtlIGNvbW1lbnRzIHdvcmsKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6ICh2b3JiaXNfZGVjX3NyY19xdWVyeSksCi0JKHZvcmJpc19kZWNfc3JjX2V2ZW50KSwgKHZvcmJpc19kZWNfY2hhaW4pOgotCSAgYWRkIGVuY29kZXIgdGFnLCBmaXggdGFnIHJlYWRpbmcgdG8gYmUgbW9yZSBlcnJvciB0b2xlcmFudCwgY2hhbmdlCi0JICBCSVRSQVRFIHRvIE5PTUlOQUxfQklUUkFURSwgYWRkIGRlYnVnZ2luZywgZG9uJ3QgdW5yZWYgZXZlbnRzIGFmdGVyCi0JICBnc3RfcGFkX2V2ZW50X2RlZmF1bHQuCi0JKiBnc3QvdGFncy9nc3R2b3JiaXN0YWcuYzoKLQkoZ3N0X3RhZ19saXN0X2Zyb21fdm9yYmlzY29tbWVudF9idWZmZXIpOgotCSAgdW5kZWZpbmUgZnVuY3Rpb24gc3BlY2lmaWMgZGVmaW5lIGF0IGVuZCBvZiBmdW5jdGlvbgotCi0yMDA0LTAxLTMxICBKZXJlbXkgU2ltb24gIDxqZXNpbW9uQGxpYmVydHlzdXJmLmZyPgotCi0JKiBleHQvZmxhYy9nc3RmbGFjLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6IChnc3RfZmxhY2RlY19jbGFzc19pbml0KToKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuaDoKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuaDoKLQkgIEZpeCB0eXBvcwotCi0yMDA0LTAxLTMwICBEYXZpZCBJLiBMZWhuICA8ZGxlaG5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBleGFtcGxlcy9nc3RwbGF5L3BsYXllci5jOiBzL2dzdHBsYXkuaC9wbGF5LmgvCi0KLTIwMDQtMDEtMzAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvZ3N0cGxheS5jOgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvZ3N0cGxheS5oOgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvcGxheS5jOgotICAgICAgICAgIG1vcmUgc3VyZ2VyeSwgb3BlcmF0aW9uIGNvbXBsZXRlCi0KLTIwMDQtMDEtMzAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkub2xkLmM6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5Lm9sZC5oOgotICAgICAgICAgIGFmdGVyIENWUyBzdXJnZXJ5IGJ5IG1vdmluZywgcmVtb3ZlCi0JKiBnc3QtbGlicy9nc3QvcGxheS9wbGF5cGlwZWxpbmVzLmM6Ci0gICAgICAgICAgcmVtb3ZlCi0KLQkqIGdzdC9pbnRmbG9hdC9mbG9hdDIyaW50LmM6IChnc3RfZmxvYXQyXzJfaW50X2NoYWluKToKLSAgICAgICAgICBhZGQgbmVnb3RpYXRpb24gZXJyb3IKLQotMjAwNC0wMS0zMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9zcmNfZXZlbnQpLAotCShnc3Rfb2dnX2RlbXV4X3B1c2gpOgotICAgICAgICAgIGFkZCBzb21lIHNlZWtpbmcgZGVidWcgaW5mbwotICAgICAgICAgIHNlbmQgYSBmbHVzaCB3aGVuIHNlZWtpbmcKLQotMjAwNC0wMS0zMCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JICB1c2UgQUNfQ19JTkxJTkUKLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC90aGVvcmEvTWFrZWZpbGUuYW06Ci0JKiBleHQvdGhlb3JhL3RoZW9yYWRlYy5jOgotCSAgYWRkIHRoZW9yYSB2aWRlbyBkZWNvZGVyLiBEb2VzIGp1c3QgZG8gc2ltcGxlIGRlY29kaW5nIGZvciBub3cgYW5kCi0JICBoYXMgYmVlbiB0ZXN0ZWQgYWdhaW5zdCBUaGVvcmEgY3ZzIG9ubHkuIEl0IG9ubHkgd29ya3Mgd2hlbiB0aGVvcmEKLQkgIGlzIGNvbXBpbGVkIHdpdGggLS1lbmFibGUtc3RhdGljLgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzogKHZvcmJpc19kZWNfZXZlbnQpOgotCSAgYWx3YXlzIHJlc2V0IHBhY2tldG5vIG9uIERJU0NPTlQKLQotMjAwNC0wMS0zMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6IChnc3RfbXBlZ19kZW11eF9wYXJzZV9zeXNoZWFkKToKLQkgIEZpeCBhdWRpby4KLQotMjAwNC0wMS0zMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21wZWdhdWRpb3BhcnNlL2dzdG1wZWdhdWRpb3BhcnNlLmM6Ci0JKG1wM190eXBlX2ZyYW1lX2xlbmd0aF9mcm9tX2hlYWRlcik6Ci0JICBGaXggaGVhZGVyIHBhcnNpbmcgLSBzdG9sZW4gZnJvbSBmZm1wZWcgKHRoYW5rIHlvdSEgOikgKS4KLQotMjAwNC0wMS0zMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19pbml0KToKLQkgIFNpbmNlIHdlIGhhdmUgc3RhdGljIHBhZCB0ZW1wbGF0ZSBjYXBzLCB3ZSBkb24ndCBuZWVkIHRvIG5lZ290aWF0ZTsKLQkgIGVpdGhlciB0aGUgY29yZSBlcnJvcnMgb3V0IG9yIHdlIGtub3cgdGhlIGZvcm1hdC4KLQotMjAwNC0wMS0zMCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9wZWVrX2hlYWQpLAotCShnc3RfcmlmZl9yZWFkX3NlZWspOgotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2lkKSwKLQkoZ3N0X2VibWxfcmVhZF9zZWVrKToKLQkgIEZpeCBldmVudCBoYW5kbGluZy4KLQotMjAwNC0wMS0zMCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2NvZGVjbWFwLmM6IChnc3RfZmZtcGVnX2NvZGVjaWRfdG9fY2Fwcyk6Ci0JICByZW1vdmVlIHZpZGVvL3gtdGhlb3JhIGZyb20gdnAzIGRlY29kZXIsIGl0IGRvZXNuJ3QgaGFuZGxlIHJhdwotCSAgdGhlb3JhIHN0cmVhbXMKLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfaW5pdCk6Ci0JICBmaXggYnVnIHdpdGggZmluYWxpemluZyBlbGVtZW50IHRoYXQgbmV2ZXIgd2VudCB0byBQQVVTRUQKLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzogKGdzdF9vZ2dfZGVtdXhfc3JjX3F1ZXJ5KToKLQkgIGxlbmd0aCBhbmQgcG9zaXRpb24gcXVlcmllcyB3ZXJlIHN3YXBwZWQKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmM6IChnc3Rfdm9yYmlzX2RlY19pbml0KSwKLQkodm9yYmlzX2RlY19mcm9tX2dyYW51bGVwb3MpLCAodm9yYmlzX2RlY19zcmNfcXVlcnkpLAotCSh2b3JiaXNfZGVjX3NyY19ldmVudCk6Ci0JICBpbXBsZW1lbnQgcXVlcnlpbmcgdGltZSBhbmQgYnl0ZXMKLQotMjAwNC0wMS0zMCAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotICAgICAgICAqIGp1c3QgYWJvdXQgZXZlcnkgc291cmNlIGZpbGU6Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfZXJyb3IgLT4gR1NUX0VMRU1FTlRfRVJST1IKLQotMjAwNC0wMS0yOSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzcmMuYzogKGdzdF9nbm9tZXZmc3NyY19nZXQpOiBGaXhpbmcgc2Vla2luZwotCWVtaXRpbmcgRkxVU0ggYW5kIGV2ZW4gYmVmb3JlIERJU0NPTlQuCi0JKiBnc3QtbGlicy9nc3QvcGxheS9nc3RwbGF5LmM6IChnc3RfcGxheV9zZWVrX3RvX3RpbWUpOiBGaXggc2Vla2luZyB0bwotCWdldCB0aGUgYmVzdCBpbnN0YW50IHNlZWtpbmcgYXMgcG9zc2libGUgeWF5IQotCi0yMDA0LTAxLTI5ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuYzoKLQkoZ3N0X21wMXZpZGVvcGFyc2VfcmVhbF9jaGFpbik6Ci0JICBDb21taXR0ZWQgd3JvbmcgdmVyc2lvbiBsYXN0IHdlZWsuLi4gR3JyLi4uIERpZG4ndCBub3RpY2UgdW50aWwgbm93LgotCi0yMDA0LTAxLTI5ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194d2luZG93X25ldyk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KTogRW1pdCB0aGUKLQloYXZlX3h3aW5kb3dfaWQgc2lnbmFsIGluIHh3aW5kb3dfY3JlYXRlLgotCi0yMDA0LTAxLTI5ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9vZ2cvZ3N0b2dnZGVtdXguYzoKLQkgIGxvdHMgb2YgY2hhbmdlcyAtIG1haW5seSBzdXBwb3J0IGZvciBjaGFpbmVkIGJpdHN0cmVhbXMsIHNlZWtpbmcsCi0JICBxdWVyeWluZyBhbmQgYnVnZml4ZXMgb2YgY291cnNlCi0JKiBleHQvdm9yYmlzL01ha2VmaWxlLmFtOgotCSogZXh0L3ZvcmJpcy92b3JiaXNkZWMuYzoKLQkqIGV4dC92b3JiaXMvdm9yYmlzZGVjLmg6Ci0JICBhZGQgdm9yYmlzZGVjIHJhdyB2b3JiaXMgZGVjb2RlcgotCSogZXh0L3ZvcmJpcy92b3JiaXMuYzogKHBsdWdpbl9pbml0KToKLQkgIHJlZ2lzdGVyIHZvcmJpc2RlYyBhcyBQUklNQVJZLCB2b3JiaXNmaWxlIGFzIFNFQ09OREFSWQotCSogZ3N0L2ludGZsb2F0L01ha2VmaWxlLmFtOgotCSogZ3N0L2ludGZsb2F0L2Zsb2F0MjJpbnQuYzoKLQkqIGdzdC9pbnRmbG9hdC9mbG9hdDIyaW50Lmg6Ci0JKiBnc3QvaW50ZmxvYXQvZ3N0aW50ZmxvYXRjb252ZXJ0LmM6IChwbHVnaW5faW5pdCk6Ci0JICBhZGQgZmxvYXQyaW50bmV3IHBsdWdpbi4gSXQgY29udmVydHMgbXVsdGljaGFubmVsIGludGVybGVhdmVkIGZsb2F0IHRvCi0JICBtdWx0aWNoYW5uZWwgaW50ZXJsZWF2ZWQgaW50LiBUaGUgbmFtZSBzaG91bGQgcHJvYmFibHkgYmUgY2hhbmdlZC4KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAodGhlb3JhX3R5cGVfZmluZCksCi0JKHBsdWdpbl9pbml0KToKLQkgIGFkZCB0eXBlZmluZGluZyBmb3IgcmF3IHRoZW9yYSB2aWRlbyBzbyBvZ2dkZW11eCBjYW4gZGV0ZWN0IGl0LgotCi0yMDA0LTAxLTI4ICBKdWxpZW4gTU9VVFRFICA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L2dzdHBsYXkuYzogKGdzdF9wbGF5X3NlZWtfdG9fdGltZSk6IHNlZWsgb24gdmlkZW8KLQlzaW5rIGVsZW1lbnQgZmlyc3QuCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6Ci0JKGdzdF92aWRlb3NjYWxlX2hhbmRsZV9zcmNfZXZlbnQpOiBGaXhpbmcgc3JjIGV2ZW50IGhhbmRsZXIuCi0KLTIwMDQtMDEtMjggIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2NsYXNzX2luaXQpLCAoZ3N0X3Y0bHNyY19pbml0KSwKLQkoZ3N0X3Y0bHNyY19vcGVuKSwgKGdzdF92NGxzcmNfY2xvc2UpLAotCShnc3RfdjRsc3JjX3BhbGV0dGVfdG9fY2FwcyksIChnc3RfdjRsc3JjX3NyY2Nvbm5lY3QpLAotCShnc3RfdjRsc3JjX2dldGNhcHMpLCAoZ3N0X3Y0bHNyY19zZXRfY2xvY2spOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuaDoKLQkqIHN5cy92NGwvdjRsc3JjX2NhbGxzLmM6IChnc3RfdjRsc3JjX2NhcHR1cmVfc3RhcnQpLAotCShnc3RfdjRsc3JjX2dyYWJfZnJhbWUpLCAoZ3N0X3Y0bHNyY19jYXB0dXJlX3N0b3ApOgotCSAgSW1wbGVtZW50IHJlc2l6aW5nLi4uIEhhY2suIEJ1dCB0aGF0J3Mgd2h5IHY0bCBpcyBiMHJrZWQuLi4KLQotMjAwNC0wMS0yOCAgSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9uZXcpLCAoZ3N0X3hpbWFnZXNpbmtfeGltYWdlX2Rlc3Ryb3kpLAotCShnc3RfeGltYWdlc2lua194aW1hZ2VfcHV0KSwgKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KSwKLQkoZ3N0X3hpbWFnZXNpbmtfeHdpbmRvd19kZXN0cm95KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hlY2tfeHNobV9jYWxscyksCi0JKGdzdF94dmltYWdlc2lua194dmltYWdlX25ldyksIChnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9kZXN0cm95KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3h3aW5kb3dfbmV3KSwgKGdzdF94dmltYWdlc2lua194d2luZG93X2Rlc3Ryb3kpLAotCShnc3RfeHZpbWFnZXNpbmtfeHdpbmRvd19yZXNpemUpLCAoZ3N0X3h2aW1hZ2VzaW5rX2dldF94dl9zdXBwb3J0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3hjb250ZXh0X2dldCk6IFJlbW92aW5nIHNvbWUgdXNlbGVzcyBkZWJ1Z3MgbWVzc2FnZXMsCi0JY29ycmVjdGx5IGNsZWFuaW5nIHRoZSBpbWFnZSBjcmVhdGVkIHRvIGNoZWNrIHhzaG0gY2FsbHMgb24gc3VjY2VzLAotCWFkZGVkIGEgbG90IG9mIFhTeW5jIGNhbGxzIGluIFgxMSBmdW5jdGlvbnMsIGFuZCBmaXhlZCBhIHNlZ2ZhdWx0IHdoZW4KLQlubyBpbWFnZSBmb3JtYXQgd2FzIGRlZmluZWQgYmVmb3JlIG5lZ290aWF0aW9uIGhhcHBlbmVkLgotCi0yMDA0LTAxLTI4ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX3F1ZXJ5X2Z1bmMpOgotCSAgdXNlIGdzdF9lbGVtZW50X2dldF90aW1lIHRvIGdldCBjb3JyZWN0IHRpbWUKLQotMjAwNC0wMS0yOCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXJyb3IpLAotCShnc3RfeGltYWdlc2lua19jaGVja194c2htX2NhbGxzKSwgKGdzdF94aW1hZ2VzaW5rX3hpbWFnZV9kZXN0cm95KSwKLQkoZ3N0X3hpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwgKGdzdF94aW1hZ2VzaW5rX2NsYXNzX2luaXQpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19oYW5kbGVfeGVycm9yKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoZWNrX3hzaG1fY2FsbHMpLAotCShnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9kZXN0cm95KSwgKGdzdF94dmltYWdlc2lua194Y29udGV4dF9nZXQpOiBPdXIKLQlYIHBsdWdpbnMgYXJlIG5vdyBhYmxlIHRvIGRldGVjdCB0aGF0IFhTaG0gY2FsbHMgd2lsbCBmYWlsIGV2ZW4gaWYgdGhlCi0Jc2VydmVyIGNsYWltcyB0aGF0IGl0IGhhcyBYU2htIHN1cHBvcnQgKHJlbW90ZSBkaXNwbGF5cyBtb3N0IG9mIHRoZQotCXRpbWUpLiBXZSB0aGVuIGxvZyB0aGUgZXJyb3IgYXMgYSBHU1RfREVCVUcgYW5kIHNldCB1c2Vfc2htIHRvIEZBTFNFCi0Jc28gdGhhdCB3ZSB1c2Ugbm9uIFhTaG0gZnVuY3Rpb25zLiBUaGlzIGZlYXR1cmUgaXMgYWxtb3N0IHVzZWxlc3MgZm9yCi0JeHZpbWFnZXNpbmsgYXMgWHYgaXMgbm90IHN1cHBvcnRlZCBvbiByZW1vdGUgZGlzcGxheXMgYW55d2F5LCBidXQKLQlpdCBtaWdodCBoYXBwZW4gdGhhbiBldmVuIG9uIHRoZSBsb2NhbCBkaXNwbGF5IFhTaG0gY2FsbHMgZmFpbC4KLQotMjAwNC0wMS0yNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZXNkL2VzZHNpbmsuYzogKGdzdF9lc2RzaW5rX2NsYXNzX2luaXQpLCAoZ3N0X2VzZHNpbmtfaW5pdCksCi0JKGdzdF9lc2RzaW5rX2xpbmspLCAoZ3N0X2VzZHNpbmtfZ2V0X3RpbWUpLCAoZ3N0X2VzZHNpbmtfY2hhaW4pLAotCShnc3RfZXNkc2lua19jaGFuZ2Vfc3RhdGUpOiAgRml4IHN5bmMgaXNzdWVzIGluIGVzZHNpbmsuICBBbHNvCi0JY2hhbmdlZCBlc2RzaW5rIHRvIG9ubHkgdXNlIDQ0MTAwLDE2LDIsIHNpbmNlIGVzZCBzdWNrcyBhdCByYXRlCi0JY29udmVyc2lvbiBhbmQgZXNkc2luayBoYXMgaGFkIGRpZmZpY3VsdHkgbmVnb3RpYXRpbmcuCi0KLTIwMDQtMDEtMjcgIEp1bGllbiBNT1VUVEUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9nc3RwbGF5LmM6IChnc3RfcGxheV90aWNrX2NhbGxiYWNrKSwKLQkoZ3N0X3BsYXlfc2Vla190b190aW1lKTogRml4aW5nIHRoZSB3YXkgdG8gZ2V0IGN1cnJlbnQgcG9zaXRpb24uCi0KLTIwMDQtMDEtMjcgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogc3lzL29zcy9nc3Rvc3NzaW5rLmM6IChnc3Rfb3Nzc2lua19zaW5rX3F1ZXJ5KToKLQkgIHVzZSBnc3RfZWxlbWVudF9nZXRfdGltZSB0byBnZXQgY29ycmVjdCB0aW1lCi0KLTIwMDQtMDEtMjcgIEp1bGllbiBNT1VUVEUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9nc3RwbGF5LmM6IChnc3RfcGxheV9zZXRfbG9jYXRpb24pOiBUaGUgZWFzaWVzdAotCWZpeCBldmVyLi4uIEludmVydGluZyAyIGxpbmVzIG9mIGNvZGUgbWFrZSBzcGlkZXIgYXV0b3BsdWcgY29ycmVjdGx5Ci0JdGFnZ2VkIG1wMyAhCi0KLTIwMDQtMDEtMjcgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspOgotCVVzZSBnc3RfcGFkX3RyeV9zZXRfY2Fwc19ub25maXhlZCgpLgotCi0yMDA0LTAxLTI3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC9hYzNwYXJzZS9nc3RhYzNwYXJzZS5jOiB1cGRhdGUgdG8gY2hlY2tsaXN0IDUKLQkqIGdzdC9hZGRlci9nc3RhZGRlci5jOiByZXdyaXRlIG5lZ290aWF0aW9uLiAgdXBkYXRlIHRvIGNoZWNrbGlzdCA1Ci0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiB1cGRhdGUgdG8gY2hlY2tsaXN0IDUKLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuYzogc2FtZQotCSogZ3N0L2F1cGFyc2UvZ3N0YXVwYXJzZS5jOiBzYW1lCi0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4LmM6IHNhbWUKLQotMjAwNC0wMS0yNyAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpOgotCSAgc3RvcCBwcm9jZXNzaW5nIGFmdGVyIEVPUwotCi0yMDA0LTAxLTI3ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC9hc2ZkZW11eC9hc2ZoZWFkZXJzLmg6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzoKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZtdXguYzogKGdzdF9hc2ZtdXhfcHV0X2d1aWQpLAotCShnc3RfYXNmbXV4X3B1dF9zdHJpbmcpLCAoZ3N0X2FzZm11eF9wdXRfd2F2X2hlYWRlciksCi0JKGdzdF9hc2ZtdXhfcHV0X3ZpZF9oZWFkZXIpLCAoZ3N0X2FzZm11eF9wdXRfYm1wX2hlYWRlcik6Ci0JICBsb3QncyBvZiBmaXhlcyB0byBtYWtlIGRhdGEgZXh0cmFjdGlvbiBzaW1wbGVyIGFuZCBnZXQgdGhlIGNvZGUKLQkgIGFyY2hpdGVjdHVyZSBhbmQgY29tcGlsZXIgaW5kZXBlbmRhbnQuIEFkZCBkZWJ1Z2dpbmcgY2F0ZWdvcnkKLQkqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2NoYW5nZV9zdGF0ZSk6Ci0JICByZXNldCBjaGFubmVsIGNvdW50IG9uIFBBVVNFRD0+UkVBRFksIG5vdCBSRUFEWT0+UEFVU0VECi0KLTIwMDQtMDEtMjYgIENvbGluIFdhbHRlcnMgIDx3YWx0ZXJzQHZlcmJ1bS5vcmc+Ci0KLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NyYy5jIChnc3RfZ25vbWV2ZnNzcmNfZ2V0KTogUmVtb3ZlIHVnbHkKLQljb2RlIHRvIHB1bGwgYSBiaWdnZXIgYnVmZmVyIGluIGlyYWRpbyBtb2RlLiAgVGhpcyBhcyBhIHNpZGUgZWZmZWN0Ci0JbWFrZXMgdHlwZWZpbmRpbmcgd29yay4KLQotMjAwNC0wMS0yNiAgSmVyZW15IFNpbW9uICA8amVzaW1vbkBsaWJlcnR5c3VyZi5mcj4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2RlY21hcC5jOiAoZ3N0X2ZmbXBlZ19jYXBzX3RvX2V4dHJhZGF0YSk6Ci0JRml4IFNWUTMgZGVjb2Rpbmcgb24gUFBDCi0KLTIwMDQtMDEtMjYgIEp1bGllbiBNT1VUVEUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9jaGFpbik6IER1bm5vIGhvdwotCXRoYXQgb25lIG1hbmFnZWQgdG8gc3RheSB0aGVyZS4uLiBGaXhlZC4KLQotMjAwNC0wMS0yNiAgSmVyZW15IFNpbW9uICA8amVzaW1vbkBsaWJlcnR5c3VyZi5mcj4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2RlY21hcC5jOiAoZ3N0X2ZmbXBlZ19jb2RlY2lkX3RvX2NhcHMpLAotCShnc3RfZmZtcGVnX2NhcHNfdG9fZXh0cmFkYXRhKSwgKGdzdF9mZm1wZWdfY2Fwc190b19waXhmbXQpOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocGx1Z2luX2luaXQpLCAocXRkZW11eF9wYXJzZV90cmFrKSwKLQkocXRkZW11eF92aWRlb19jYXBzKToKLQkqIGdzdC9xdGRlbXV4L3F0ZGVtdXguaDoKLQlBZGQgU1ZRMyBzcGVjaWZpYyBmbGFncyB0byBxdGRlbXV4IGFuZCBmZm1wZWcKLQotMjAwNC0wMS0yNiAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW8uaDoKLQkgIHJlbW92ZSBidWZmZXItZnJhbWVzIGZyb20gYXVkaW8gY2FwcwotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzoKLQkgIGZpeCBwbHVnaW4gdG8gcmVhbGx5IHdvcmsuCi0KLTIwMDQtMDEtMjUgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci5jOgotCSogZ3N0LWxpYnMvZ3N0L3Byb3BlcnR5cHJvYmUvcHJvcGVydHlwcm9iZS5jOgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL3R1bmVyLmM6IChnc3RfdHVuZXJfZmluZF9ub3JtX2J5X25hbWUpLAotCShnc3RfdHVuZXJfZmluZF9jaGFubmVsX2J5X25hbWUpOgotCSogZ3N0LWxpYnMvZ3N0L3R1bmVyL3R1bmVyLmg6Ci0JICBBZGQgZ3RrLWRvYyBzdHlsZSBjb21tZW50cy4gQWxzbyBmaXggYSBmdW5jdGlvbiBuYW1lLgotCi0yMDA0LTAxLTI1ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6IChnc3RfZGl2eGRlY19pbml0KSwKLQkoZ3N0X2RpdnhkZWNfbmVnb3RpYXRlKToKLQkgIEZpeCBmb3IgbmV3IGNhcHNuZWdvIC0gYWxzbyBmaXhlcyBnc3QtcGxheWVyIHdpdGggZGl2eGRlYy4KLQotMjAwNC0wMS0yNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3QtbGlicy9nc3QvcGxheS9nc3RwbGF5LmM6IChnc3RfcGxheV9waXBlbGluZV9zZXR1cCksCi0JKGdzdF9wbGF5X2lkZW50aXR5X2hhbmRvZmYpLCAoZ3N0X3BsYXlfc2V0X2xvY2F0aW9uKSwKLQkoZ3N0X3BsYXlfc2V0X3Zpc3VhbGl6YXRpb24pLCAoZ3N0X3BsYXlfY29ubmVjdF92aXN1YWxpemF0aW9uKTogQW5vdGhlcgotCXRyeSBpbiB2aXN1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uLiBTdGlsbCBoYXZlIGFuIGlzc3VlIHdpdGggc3dpdGNoCi0JYmxvY2tpbmcgd2hlbiBwdWxsaW5nIGZyb20gdmlkZW9fcXVldWUgYW5kIG9ubHkgYXVkaW8gY29tZXMgb3V0IG9mCi0Jc3BpZGVyLgotCSogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfcmVsZWFzZV9wYWQpLAotCShnc3Rfc3dpdGNoX3BvbGxfc2lua3BhZHMpLCAoZ3N0X3N3aXRjaF9jbGFzc19pbml0KTogSW1wbGVtZW50aW5nIHBhZAotCXJlbGVhc2UgbWV0aG9kLiBBbmQgY2hlY2sgaWYgdGhlIHBhZCBpcyB1c2FibGUgYmVmb3JlIHB1bGxpbmcuCi0KLTIwMDQtMDEtMjUgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzogKGdzdF92aWRlb2JhbGFuY2VfZGlzcG9zZSksCi0JKGdzdF92aWRlb2JhbGFuY2VfaW5pdCksCi0JKGdzdF92aWRlb2JhbGFuY2VfY29sb3JiYWxhbmNlX2xpc3RfY2hhbm5lbHMpLAotCShnc3RfdmlkZW9iYWxhbmNlX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWUpLAotCShnc3RfdmlkZW9iYWxhbmNlX2NvbG9yYmFsYW5jZV9nZXRfdmFsdWUpLAotCShnc3RfdmlkZW9iYWxhbmNlX3VwZGF0ZV9wcm9wZXJ0aWVzKSwKLQkoZ3N0X3ZpZGVvYmFsYW5jZV91cGRhdGVfdGFibGVzX3BsYW5hcjQxMSksCi0JKGdzdF92aWRlb2JhbGFuY2VfcGxhbmFyNDExKToKLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaDoKLQkgIEltcGxlbWVudCBsb29rdXAtdGFibGVzLiArLy0gMTB4IGZhc3Rlci4KLQotMjAwNC0wMS0yNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1fYXZpaCksCi0JKGdzdF9hdmlfZGVtdXhfc3RyZWFtX29kbWwpLCAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXgpOgotCSAgVGhlIGluZGV4IHJlYWRpbmcgd2FzIGJyb2tlbi4gVGhlIHJlc3Qgd29ya2VkIGZpbmUsIGJ1dCB0aGUgd2hvbGUKLQkgIGdvYWwgb2YgbXkgcmV3cml0ZSB3YXMgdG8gbWFrZSBhdmlkZW11eCByZWFkYWJsZSwgYW5kIHRoaXMgd2FzCi0JICBub3QgYXQgYWxsIHJlYWRhYmxlLiBQbGVhc2UgdXNlIHR5cGVkIHZhcmlhYmxlcy4KLQotMjAwNC0wMS0yNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX2luZm8pOgotCSAgQWRkaXRpb25hbCBwYWQgdXNhYmlsaXR5IGNoZWNrLgotCSogZ3N0L21wZWcxdmlkZW9wYXJzZS9nc3RtcDF2aWRlb3BhcnNlLmM6IChnc3RfbXAxdmlkZW9wYXJzZV9pbml0KSwKLQkobXAxdmlkZW9wYXJzZV9maW5kX25leHRfZ29wKSwgKGdzdF9tcDF2aWRlb3BhcnNlX3RpbWVfY29kZSksCi0JKGdzdF9tcDF2aWRlb3BhcnNlX3JlYWxfY2hhaW4pOgotCSAgRml4IE1QRUcgdmlkZW8gc3RyZWFtIHBhcnNpbmcuIFRoZSBvcmlnaW5hbCBwbHVnaW4gaGFkIHNldmVyYWwKLQkgIGlzc3VlcywgaW5jbHVkaW5nIG5vdCB0aW1lc3RhbXBpbmcgc3RyZWFtcyB3aGVyZSB0aGUgc291cmNlIHdhcwotCSAgbm90IHRpbWVzdGFtcGVkICh0aGlzIGhhcHBlbnMgd2l0aCBQVFMgdmFsdWVzIGluIG1wZWcgc3lzdGVtCi0JICBzdHJlYW1zLCBidXQgTVBFRyB2aWRlbyBpcyBhbHNvIGEgdmFsaWQgc3RyZWFtIG9uIGl0cyBvd24gc28KLQkgIHRoYXQgbmVlZHMgdGltZXN0YW1wcyB0b28pLiBXZSB1c2UgdGhlIGRpc3BsYXkgdGltZSBjb2RlIGZvciB0aGF0Ci0JICBmb3Igbm93LiBBbHNvLCBpZiBvbmUgaW5jb21pbmcgYnVmZmVyIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkCi0JICBmcmFtZXMsIHdlIHB1c2ggdGhlbSBhbGwgb24gY29ycmVjdGx5IG5vdywgaW5jbHVkaW5nIHByb3BlciBFT1MKLQkgIGhhbmRsaW5nLiBMYXN0bHksIHNldmVyYWwgcG90ZW50aWFsIHNlZ2ZhdWx0cyB3ZXJlIGZpeGVkLCBhbmQgd2UKLQkgIHByb3Blcmx5IHN5bmMgb24gbmV3IHNlcXVlbmNlL2dvcCBoZWFkZXJzIHRvIGluY2x1ZGUgdGhlbSBpbiBuZXh0LAotCSAgbm90IHByZXZpb3VzIGZyYW1lcyAoc2luY2UgdGhleSdyZSBoZWFkZXIgZm9yIHRoZSBuZXh0IGZyYW1lLCBub3QKLQkgIHRoZSBwcmV2aW91cykuIEFsc28gc2VlICMxMTkyMDYuCi0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzogKGdzdF9tcDNwYXJzZV9jaGFpbiksCi0JKGJwZl9mcm9tX2hlYWRlcik6Ci0JICBNb3ZlIGNhcHMgc2V0dGluZyBzbyB3ZSBvbmx5IGRvIGl0IGFmdGVyIGZpbmRpbmcgc2V2ZXJhbCB2YWxpZAotCSAgTVBFRy0xIGZyYWVzIHNlcXVlbnRpYWxseSwgbm90IHJpZ2h0IGFmdGVyIHRoZSBmaXJzdCBvbmUgKHdoaWNoCi0JICBtaWdodCBiZSBjb2luY2lkZW50YWwpLgotCSogZ3N0L3R5cGVmaW5kL2dzdHR5cGVmaW5kZnVuY3Rpb25zLmM6IChtcGVnMV9zeXNfdHlwZV9maW5kKSwKLQkobXBlZ192aWRlb190eXBlX2ZpbmQpLCAobXBlZ192aWRlb19zdHJlYW1fdHlwZV9maW5kKSwKLQkocGx1Z2luX2luaXQpOgotCSAgQWRkIHVuc3luY2VkIE1QRUcgdmlkZW8gc3RyZWFtIHR5cGVmaW5kaW5nLCBhbmQgY2hhbmdlIHNvbWUKLQkgIHByb2JhYmlsaXR5IHZhbHVlcyBzbyB3ZSBkZXRlY3Qgc3RyZWFtcyByaWdodGx5LiBUaGUgaWRlYSBpcyBhcwotCSAgZm9sbG93czogSSBjYW4gaGF2ZSBhbiB1bnN5bmNlZCBzeXN0ZW0gc3RyZWFtIHdoaWNoIGNvbnRhaW5zCi0JICB2aWRlby4gSW4gdGhlIGN1cnJlbnQgY29kZSwgSSB3b3VsZCByYW5kb21seSBnZXQgYSB0eXBlIGZvciBlaXRoZXIKLQkgIHN5c3RlbSBvciB2aWRlbyBzdHJlYW0gdHlwZSBmb3VuZCwgYmVjYXVzZSB0aGUgcHJvYmFiaWxpdGllcyBhcmUKLQkgIGJlaW5nIGNhbGN1bGF0ZWQgcmF0aGVyIHJhbmRvbWx5LiBJIG5vdyB1c2UgZml4ZWQgdmFsdWVzLCBzbyB3ZQotCSAgYWx3YXlzIHByZWZlciBzeXN0ZW0gc3RyZWFtIGlmIHRoYXQgd2FzIGZvdW5kIChhbmQgdGhhdCBpcyBob3cgaXQKLQkgIHNob3VsZCBiZSkuIElmIG5vIHN5c3RlbSBzdHJlYW0gd2FzIGZvdW5kLCB3ZSBjYW4gc3RpbGwgaWRlbnRpdHkJCSAgdGhlIHN0cmVhbSBhcyB2aWRlby1vbmx5LgotCi0yMDA0LTAxLTIzICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC9hdmkvZ3N0YXZpZGVtdXguYzogKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2F2aWgpLAotCShnc3RfYXZpX2RlbXV4X3N0cmVhbV9vZG1sKSwgKGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4KToKLQkgIGRvbid0IHdyaXRlIHRvIGJ1ZmZlci4gRXh0cmFjdCBkYXRhIHdpdGhvdXQgdGhlIG5lZWQgb2YKLQkgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi0yMDA0LTAxLTIzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1wZWcxX3BhcnNlX2hlYWRlciksCi0JKG1wZWcxX3N5c190eXBlX2ZpbmQpOgotCSAgRml4IE1QRUctMSBzdHJlYW0gdHlwZWZpbmRpbmcuCi0KLTIwMDQtMDEtMjMgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOiAobXBlZzJfc3lzX3R5cGVfZmluZCk6Ci0JICBGaXggdHlwZWZpbmRpbmcgZm9yIE1QRUctMSBzeXN0ZW0gc3RyZWFtcywgc2ltaWxhciB0byBNUEVHLTIuCi0KLTIwMDQtMDEtMjMgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9lc2QvZXNkc2luay5jOiAoZ3N0X2VzZHNpbmtfb3Blbl9hdWRpbyk6Ci0JKiBleHQvZXNkL2dzdGVzZC5jOiAocGx1Z2luX2luaXQpOgotICAgICAgICAgIHByaXZhdGUgZGVidWdnaW5nLCBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nCi0KLTIwMDQtMDEtMjMgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5jOiAoZ3N0X3JpZmZfcmVhZF9jbGFzc19pbml0KSwKLQkoZ3N0X3JpZmZfcmVhZF9pbml0KSwgKGdzdF9yaWZmX3JlYWRfY2hhbmdlX3N0YXRlKToKLQkqIGdzdC1saWJzL2dzdC9yaWZmL3JpZmYtcmVhZC5oOgotCSAgUmVtb3ZlIHN0dWZmIGZyb21vbGQgbWV0YWRhdGEgc3lzdGVtLgotCi0yMDA0LTAxLTIzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvb2dnL2dzdG9nZ2RlbXV4LmM6Ci0JICBGaXggd3JvbmcgZmlsZSBjb21tZW50LgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX2luZm8pOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyKToKLQkgIEFkZCBtZXRhZGF0YSByZWFkaW5nIHByb3Blcmx5LgotCi0yMDA0LTAxLTIzICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvTWFrZWZpbGUuYW06Ci0gICAgICAgICAgRml4IG5hcyBESVNUX1NVQkRJUlMKLSAgICAgICAgICBVcmFldXM6Ci0gICAgICAgICAgRml4IGJ1ZyB3aGVyZSBtYWtlIGRpc3RjaGVjayBkb2Vzbid0IGdldCBydW4gb24gYWRkaW5nIHN0dWZmIHRvCi0gICAgICAgICAgdGhlIGJ1aWxkLgotCi0yMDA0LTAxLTIzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6IChnc3RfZGl2eGRlY19pbml0KSwgKGdzdF9kaXZ4ZGVjX3NldHVwKToKLQkqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuaDoKLQkgIEZpeCBkaXZ4MyAoIm1zbXBlZzQiKSBwbGF5YmFjayB1c2luZyBkaXZ4ZGVjLgotCi0yMDA0LTAxLTIzICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC90eXBlZmluZC9nc3R0eXBlZmluZGZ1bmN0aW9ucy5jOgotCShtcDNfdHlwZV9mcmFtZV9sZW5ndGhfZnJvbV9oZWFkZXIpOiBmaXggYnVnIGluIGxlbmd0aCBjb21wdXRhdGlvbgotCShtcDNfdHlwZV9maW5kKTogaW1wcm92ZSBkZWJ1Z2dpbmcgb3V0cHV0Ci0KLTIwMDQtMDEtMjMgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvZ3N0cGxheS5jOiAoZ3N0X3BsYXlfcGlwZWxpbmVfc2V0dXApLAotCShnc3RfcGxheV9zZXRfbG9jYXRpb24pLCAoZ3N0X3BsYXlfc2Vla190b190aW1lKSwKLQkoZ3N0X3BsYXlfc2V0X2F1ZGlvX3NpbmspLCAoZ3N0X3BsYXlfc2V0X3Zpc3VhbGl6YXRpb24pLAotCShnc3RfcGxheV9jb25uZWN0X3Zpc3VhbGl6YXRpb24pLCAoZ3N0X3BsYXlfZ2V0X3NpbmtfZWxlbWVudCk6IFJld29ya2VkCi0JdGhlIHBpcGVsaW5lIGZyb20gc2NyYXRjaC4gVmlzdWFsaXphdGlvbiBpcyBiYWNrIGFuZCBzd2l0Y2ggd2VudCBvdXQgYXMKLQlpIHJlYWxpemVkIGl0IHdhcyBub3QgcG9zc2libGUgdG8gdXNlIHRoZSB3YXkgaSB3YW50ZWQuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2ltYWdlcG9vbF9jbGVhciksCi0JKGdzdF94aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSksIChnc3RfeGltYWdlc2lua19kaXNwb3NlKTogTW92ZSB4Y29udGV4dAotCWNsZWFyaW5nIGluIHN0YXRlIGNoYW5nZSBmcm9tIFJFQURZIHRvIE5VTEwuIFNvIHRoYXQgb25lIGNhbiBjbGVhbiB0aGUKLQlYIHJlc3NvdXJjZXMga2VlcGluZyB0aGUgZWxlbWVudC4KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2ltYWdlcG9vbF9jbGVhciksIChnc3RfeHZpbWFnZXNpbmtfY2hhbmdlX3N0YXRlKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWUpLAotCShnc3RfeHZpbWFnZXNpbmtfY29sb3JiYWxhbmNlX2dldF92YWx1ZSksCi0JKGdzdF94dmltYWdlc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X3h2aW1hZ2VzaW5rX2Rpc3Bvc2UpLAotCShnc3RfeHZpbWFnZXNpbmtfaW5pdCk6IFNhbWUgeGNvbnRleHQgY2xlYW5pbmcgdGhhbiB4aW1hZ2VzaW5rIGluIHN0YXRlCi0JY2hhbmdlIGZyb20gUkVBRFkgdG8gTlVMTCBhbmQgZml4ZWQgc29tZSBzdHVwaWQgYnVncyBpbiBjb2xvcmJhbGFuY2UKLQlnZXQvc2V0IHZhbHVlcy4gQWxzbyBhZGRlZCB0aGUgZm9sbG93aW5nIGZlYXR1cmUgOiB3aGVuIG5vYm9keSB0cmllcyB0bwotCXNldCBzb21lIHZhbHVlcyB0byB0aGUgY29sb3JiYWxhbmNlIGxldmVscyBiZWZvcmUgdGhlIHhjb250ZXh0IGlzCi0JZ3JhYmJlZCwgdGhlbiB3aGVuIGNyZWF0aW5nIGNoYW5uZWxzIGxpc3QgZnJvbSBYdiBhdHRyaWJ1dGVzIHdlIHNldCB0aGUKLQlpbnRlcm5hbCB2YWx1ZXMgdG8gdGhlIFh2IGRlZmF1bHRzLiBUaGlzIHdheSB3ZSBoYW5kbGUgYnVnZ3kgWHYgZHJpdmVycwotCXRoYXQgc2V0IGRlZmF1bHQgaHVlIHZhbHVlcyBmYXIgZnJvbSB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSAoVGhhbmtzCi0JdG8gSm9uIFRyb3dicmlkZ2UgZm9yIHBvaW50aW5nIHRoYXQgaXNzdWUpLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuaDogQWRkaW5nIGEgY2JfY2hhbmdlZCBib29sZWFuIHRvIGtub3cgaWYKLQljb2xvcmJhbGFuY2UgbGV2ZWxzIGhhdmUgYmVlbiBzZXQgYmVmb3JlIHhjb250ZXh0IGlzIGdyYWJiZWQuCi0KLTIwMDQtMDEtMjIgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfY2xhc3NfcHJvYmVfZGV2aWNlcyk6Ci0JICBGaXggdGhlIG9zc21peGVyIGNhc2Ugd2hlcmUgd2Ugc2hvdWxkbid0IG9wZW4gL2Rldi9kc3AqIGJlY2F1c2UKLQkgIGl0IG1pZ2h0IGJsb2NrIG9wZXJhdGlvbnMgKHdoaWNoIGlzIGJhZCBmb3IgYSBtaXhlcikuCi0KLTIwMDQtMDEtMjIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8tcHJpdi5jOiAoaGF2ZV90eXBlX2NhbGxiYWNrKSwKLQkoZGVlcF9ub3RpZnlfY2FsbGJhY2spLCAoZ21pX3NldF9kZWNvZGVyKSwgKGdtaV9jbGVhcl9kZWNvZGVyKSwKLQkoZ21pcF9maW5kX3R5cGVfcHJlKToKLQkqIGdzdC1saWJzL2dzdC9tZWRpYS1pbmZvL21lZGlhLWluZm8tcHJpdi5oOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby5jOgotCShnc3RfbWVkaWFfaW5mb19pbnN0YW5jZV9pbml0KSwgKGdzdF9tZWRpYV9pbmZvX3JlYWRfaWRsZXIpOgotICAgICAgICBhZGQgZmFrZXNpbmsgdG8gZ2V0IGNhcHMgb24gZGVjb2RlciBzcmMgcGFkIGFnYWluCi0gICAgICAgIGZpeCBjYWxsYmFjayBwcm90b3R5cGUgdG8gbWF0Y2ggbmV3IGhhdmVfdHlwZSBzaWduYWwgc2lnbmF0dXJlCi0KLTIwMDQtMDEtMjIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9hZGRlci9nc3RhZGRlci5jOiAoZ3N0X2FkZGVyX2xpbmspOgotICAgICAgICAgIGZpeCBub24tY29tcGlsZSBhbmQgY3V0LW4tcGFzdGUgY29kZQotCi0yMDA0LTAxLTIxICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6IChnc3Rfc3dmZGVjX3ZpZGVvX2dldGNhcHMpLAotCShnc3Rfc3dmZGVjX3ZpZGVvX2xpbmspLCAoY29weV9pbWFnZSksIChnc3Rfc3dmZGVjX2xvb3ApLAotCShnc3Rfc3dmZGVjX2luaXQpLCAoZ3N0X3N3ZmRlY19jaGFuZ2Vfc3RhdGUpOgotCSogZXh0L3N3ZmRlYy9nc3Rzd2ZkZWMuaDoKLQlGaXggbmVnb3RpYXRpb24uCi0JKiBnc3QvYWRkZXIvZ3N0YWRkZXIuYzogKGdzdF9hZGRlcl9saW5rKSwgKGdzdF9hZGRlcl9pbml0KSwKLQkoZ3N0X2FkZGVyX3JlcXVlc3RfbmV3X3BhZCk6IEZpeCBuZWdvdGlhdGlvbi4KLQkqIGdzdC9nb29tL2dzdGdvb20uYzogKGdzdF9nb29tX2luaXQpLCAoZ3N0X2dvb21fc3JjX2ZpeGF0ZSk6Ci0JQWRkIGEgZml4YXRlIGZ1bmN0aW9uLgotCSogZ3N0L2ludGZsb2F0L2dzdGZsb2F0MmludC5jOgotCSogZ3N0L2ludGZsb2F0L2dzdGZsb2F0MmludC5oOgotCSogZ3N0L2ludGZsb2F0L2dzdGludDJmbG9hdC5jOgotCSogZ3N0L2ludGZsb2F0L2dzdGludDJmbG9hdC5oOgotCUNvbXBsZXRlbHkgcmV3cml0ZSB0aGUgbmVnb3RpYXRpb24uICBEb2Vzbid0IHF1aXRlIHdvcmsgeWV0LAotCWR1ZSB0byBzb21lIGJ1ZmZlci1mcmFtZXMgcHJvYmxlbS4KLQotMjAwNC0wMS0yMSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0gICAgICAgICAgZml4IGluY2x1ZGVzIGZvciBkaXN0Y2hlY2sKLQotMjAwNC0wMS0yMSAgQ2hyaXN0aWFuIFNjaGFsbGVyIDx1cmFldXNAZ25vbWUub3JnPgotCi0JKiBleHQvbmFzLwotCUFkZCBsaWJuYXMgKG5ldHdvcmsgYXVkaW8gc3lzdGVtKSBwbHVnaW4sIHBhdGNoIGZyb20gQXJ3ZWQgdm9uIE1lcmthdHoKLQliYXNlZCBvbiBlYXJsaWVyIHBhdGNoIGZyb20gTGF1cmVudCBWaXZpZXIKLQotMjAwNC0wMS0yMCAgSmVyZW15IFNpbW9uICA8amVzaW1vbkBsaWJlcnR5c3VyZi5mcj4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2RlY21hcC5jOiAoZ3N0X2ZmbXBlZ19jYXBzX3RvX2V4dHJhZGF0YSk6Ci0JRml4IHdtYSBjYXBzIHByb3BlcnR5Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfYXVkaW9fY2Fwcyk6Ci0JRml4IHR5cG8gKGZsYWdzMSBhbmQgZmxhZ3MyKQotCi0yMDA0LTAxLTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXByaXYuYzoKLQkoZGVlcF9ub3RpZnlfY2FsbGJhY2spLCAoZ21pX3NlZWtfdG9fdHJhY2spLCAoZ21pX2dldF9kZWNvZGVyKSwKLQkoZ21pcF9maW5kX3R5cGVfcHJlKSwgKGdtaXBfZmluZF90eXBlKSwgKGdtaXBfZmluZF9zdHJlYW1fcG9zdCksCi0JKGdtaXBfZmluZF9zdHJlYW0pLCAoZ21pcF9maW5kX3RyYWNrX21ldGFkYXRhKSwKLQkoZ21pcF9maW5kX3RyYWNrX3N0cmVhbWluZm9fcG9zdCksIChnbWlwX2ZpbmRfdHJhY2tfc3RyZWFtaW5mbyksCi0JKGdtaXBfZmluZF90cmFja19mb3JtYXQpOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby1wcml2Lmg6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLXRlc3QuYzogKG1haW4pOgotCSogZ3N0LWxpYnMvZ3N0L21lZGlhLWluZm8vbWVkaWEtaW5mby5jOiAoZ3N0X21lZGlhX2luZm9faW5pdCksCi0JKGdzdF9tZWRpYV9pbmZvX3JlYWRfaWRsZXIpLCAoZ3N0X21lZGlhX2luZm9fcmVhZCk6Ci0JKiBnc3QtbGlicy9nc3QvbWVkaWEtaW5mby9tZWRpYS1pbmZvLmg6Ci0gICAgICAgICAgcmVnaXN0ZXIgZGVidWdnaW5nIGNhdGVnb3J5IGFuZCB1c2UgaXQgZm9yIGRlYnVnZ2luZwotCi0yMDA0LTAxLTIwICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleHQvdm9yYmlzL3ZvcmJpc2ZpbGUuYzogKGdzdF92b3JiaXNmaWxlX3VwZGF0ZV9zdHJlYW1pbmZvKSwKLQkoZ3N0X3ZvcmJpc2ZpbGVfbmV3X2xpbmspOgotICAgICAgICAgIHNpZ25hbCBzdHJlYW1pbmZvIHRocm91Z2ggdGFncwotCi0yMDA0LTAxLTIwICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbXBsZXgvZ3N0bXBsZXguY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXhpYml0c3RyZWFtLmNjOgotCSAgZysrIGRvZXNuJ3QgbGlrZSBOVUxMIGluIG91ciBpMThuL2Vycm9yIG1hY3Jvcywgc2hvdWxkIGJlCi0JICBlaXRoZXIgKE5VTEwpIG9yICgiIikuCi0KLTIwMDQtMDEtMjAgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuYzoKLQkqIHN5cy9keHIzL2R4cjNpbml0LmM6Ci0JKiBzeXMvZHhyMy9keHIzc3B1c2luay5jOiAoZHhyM3NwdXNpbmtfY2xvc2UpOgotCSogc3lzL2R4cjMvZHhyM3ZpZGVvc2luay5jOiAoZHhyM3ZpZGVvc2lua19jbG9zZSk6Ci0JICBGaXggbW9yZSBlcnJvciBlcnJvciBlcnJvciBlcnJvcnMgKG1pc3NpbmcgaW5jbHVkZXMgaGVyZSkuCi0KLTIwMDQtMDEtMjAgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuY3BpY3R1cmVyZWFkZXIuY2M6Ci0JICBmaXggdGhvbWFzJyBlcnJvciBlcnJvcnMuCi0KLTIwMDQtMDEtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuYy5jYzoKLSAgICAgICAgICBmaXggZXJyb3IgZXJyb3JzLgotCi0yMDA0LTAxLTIwICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6IChnc3RfZGl2eGRlY19zZXR1cCksIChnc3RfZGl2eGRlY19jaGFpbik6Ci0JKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmM6IChnc3RfZGl2eGVuY19zZXR1cCksIChnc3RfZGl2eGVuY19jaGFpbik6Ci0JICBGaXggZm9yIG5ldyBlcnJvciBzeXN0ZW0uCi0KLTIwMDQtMDEtMjAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGV4dC9kaXZ4L2dzdGRpdnhlbmMuYzogKGdzdF9kaXZ4ZW5jX3NldHVwKSwgKGdzdF9kaXZ4ZW5jX2NoYWluKToKLSAgICAgICAgICBmaXggZm9yIG5ldyBlcnJvciByZXBvcnRpbmcKLQotMjAwNC0wMS0yMCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXZlbnRzKSwKLQkoZ3N0X3hpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwgKGdzdF94aW1hZ2VzaW5rX2dldGNhcHMpLAotCShnc3RfeGltYWdlc2lua19zZXRfeHdpbmRvd19pZCk6IENoYW5nZSB0byB1c2luZyBhIGZyYW1lcmF0ZQotCW9mIFsxLDEwMF0gaW5zdGVhZCBvZiBbMCxNQVhdLCBzaW5jZSAwIGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LAotCWFuZCBuZWl0aGVyIGlzIDEwMCssIG1vc3QgbGlrZWx5LgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19nZXRfeHZfc3VwcG9ydCksCi0JKGdzdF94dmltYWdlc2lua19nZXRjYXBzKTogc2FtZQotCi0yMDA0LTAxLTE5ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIFVwIHZlcnNpb24gcmVxdWlyZW1lbnQgdG8gMi4wLjMgKG5vdCB5ZXQgcmVsZWFzZWQpIHRvIGF2b2lkIHN5bWJvbAotCSAgY2xhc2hlcyB3aXRoIGZmbXBlZy4KLQotMjAwNC0wMS0yMCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBnc3Qvc3dpdGNoL2dzdHN3aXRjaC5jOiAoZ3N0X3N3aXRjaF9yZXF1ZXN0X25ld19wYWQpLAotCShnc3Rfc3dpdGNoX2luaXQpOiBGaXhlZCBzd2l0Y2ggZWxlbWVudCA6IHByb3h5aW5nIGxpbmsgYW5kIHNldHRpbmcKLQljYXBzIGZyb20gc3JjIHRvIHNpbmsgb24gcmVxdWVzdC4KLQotMjAwNC0wMS0xOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogc3lzL3Y0bC92NGwtb3ZlcmxheV9jYWxscy5jOiAoZ3N0X3Y0bF9zZXRfb3ZlcmxheSk6Ci0JKiBzeXMvdjRsMi92NGwyLW92ZXJsYXlfY2FsbHMuYzogKGdzdF92NGwyX3NldF9kaXNwbGF5KSwKLQkoZ3N0X3Y0bDJfc2V0X3dpbmRvdyksIChnc3RfdjRsMl9lbmFibGVfb3ZlcmxheSk6Ci0gICAgICAgIGZpeCBlbGVtZW50X2Vycm9yCi0KLTIwMDQtMDEtMTkgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy92NGwvdjRsX2NhbGxzLmg6Ci0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmg6Ci0gICAgICAgICAgZWxlbWVudF9lcnJvciBmaXhlcwotCi0yMDA0LTAxLTE5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBnc3QtbGlicy9nc3QvZ3N0LWkxOG4tcGx1Z2luLmg6Ci0gICAgICAgICAgYWRkIGxvY2FsZS5oCi0gICAgICAgICAgcmVtb3ZlIGNvbmZpZy5oIGluY2x1c2lvbgotCi0yMDA0LTAxLTE5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBhdXRvZ2VuLnNoOgotICAgICAgICAgIGFkZGluZyBhdXRvcG9pbnQgaW52b2NhdGlvbgotCSogTWFrZWZpbGUuYW06Ci0JKiBjb25maWd1cmUuYWM6Ci0JKiBnc3QtbGlicy9nc3QvZ2V0dGV4dC5oOgotICAgICAgICAgIGFkZGluZyBnZXR0ZXh0IGJpdHMKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzaW5rLmM6IChnc3RfYWZzaW5rX3BsdWdpbl9pbml0KToKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzogKGdzdF9hZnNyY19wbHVnaW5faW5pdCk6Ci0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnMuYzogKHBsdWdpbl9pbml0KToKLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzogKGdzdF9nbm9tZXZmc3Npbmtfb3Blbl9maWxlKSwKLQkoZ3N0X2dub21ldmZzc2lua19jbG9zZV9maWxlKToKLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NyYy5jOiAoZ3N0X2dub21ldmZzc3JjX29wZW5fZmlsZSk6Ci0JKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX2xvb3ApLCAocGx1Z2luX2luaXQpOgotCSogZ3N0LWxpYnMvZ3N0L2dzdC1pMThuLXBsdWdpbi5oOgotCSogZ3N0L2F2aS9nc3RhdmkuYzogKHBsdWdpbl9pbml0KToKLQkqIHN5cy9keHIzL2R4cjNpbml0LmM6IChwbHVnaW5faW5pdCk6Ci0JKiBzeXMvZHhyMy9keHIzdmlkZW9zaW5rLmM6IChkeHIzdmlkZW9zaW5rX3dyaXRlX2RhdGEpOgotCSogc3lzL29zcy9nc3Rvc3NhdWRpby5jOiAocGx1Z2luX2luaXQpOgotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50LmM6IChnc3Rfb3NzZWxlbWVudF9vcGVuX2F1ZGlvKToKLQkqIHN5cy92NGwvZ3N0djRsLmM6IChwbHVnaW5faW5pdCk6Ci0JKiBzeXMvdjRsL3Y0bF9jYWxscy5jOiAoZ3N0X3Y0bF9vcGVuKToKLQkqIHN5cy92NGwyL2dzdHY0bDIuYzogKHBsdWdpbl9pbml0KToKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX2dldF9jYXBhYmlsaXRpZXMpLAotCShnc3RfdjRsMl9maWxsX2xpc3RzKSwgKGdzdF92NGwyX2dldF9ub3JtKSwgKGdzdF92NGwyX3NldF9ub3JtKSwKLQkoZ3N0X3Y0bDJfZ2V0X2lucHV0KSwgKGdzdF92NGwyX3NldF9pbnB1dCksIChnc3RfdjRsMl9nZXRfb3V0cHV0KSwKLQkoZ3N0X3Y0bDJfc2V0X291dHB1dCksIChnc3RfdjRsMl9nZXRfZnJlcXVlbmN5KSwKLQkoZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSksIChnc3RfdjRsMl9zaWduYWxfc3RyZW5ndGgpLAotCShnc3RfdjRsMl9nZXRfYXR0cmlidXRlKSwgKGdzdF92NGwyX3NldF9hdHRyaWJ1dGUpOgotCSAgbWFrZSBzdXJlIGxvY2FsZSBhbmQgdHJhbnNsYXRpb24gZG9tYWluIGFyZSBzZXQKLSAgICAgICAgICBmaXggdHJhbnNsYXRlZCBzdHJpbmdzCi0JKiBwby8uY3ZzaWdub3JlOgotCSogcG8vTElOR1VBUzoKLQkqIHBvL01ha2V2YXJzOgotCSogcG8vUE9URklMRVMuaW46Ci0JKiBwby9ubC5wbzoKLSAgICAgICAgICBwdXQgdHJhbnNsYXRpb24gZmlsZXMgaW50byBwbGFjZQotCSogc3lzL3h2aWRlby9pbWFnZXRlc3QuYzogKG1haW4pOgotCSogZXh0L2R2L2RlbW8tcGxheS5jOiAobWFpbik6Ci0gICAgICAgICAgZml4IHVubmVjZXNzYXJ5IHRyYW5zbGF0aW9ucwotCi0yMDA0LTAxLTE5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIChhdCkgYXBlc3RhYXJ0IChkb3QpIG9yZz4KLQotCSogZXh0L3NuZGZpbGUvZ3N0c2YuYzoKLQkqIGdzdC9hdmkvZ3N0YXZpbXV4LmM6Ci0JKiBleHQvYXVkaW9maWxlL2dzdGFmc2luay5jOgotCSogZXh0L2F1ZGlvZmlsZS9nc3RhZnNyYy5jOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc2luay5jOgotCSogZXh0L2dub21ldmZzL2dzdGdub21ldmZzc3JjLmM6Ci0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuYzoKLQkqIHN5cy92NGwvdjRsX2NhbGxzLmg6Ci0gICAgICAgICAgZml4IGkxOG4gaW5jbHVkZQotCi0yMDA0LTAxLTE5ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6IChnc3RfdjRsMl9nZXRfY2FwYWJpbGl0aWVzKSwKLQkoZ3N0X3Y0bDJfZmlsbF9saXN0cyksIChnc3RfdjRsMl9vcGVuKSwgKGdzdF92NGwyX2dldF9ub3JtKSwKLQkoZ3N0X3Y0bDJfc2V0X25vcm0pLCAoZ3N0X3Y0bDJfZ2V0X2lucHV0KSwgKGdzdF92NGwyX3NldF9pbnB1dCksCi0JKGdzdF92NGwyX2dldF9vdXRwdXQpLCAoZ3N0X3Y0bDJfc2V0X291dHB1dCksCi0JKGdzdF92NGwyX2dldF9mcmVxdWVuY3kpLCAoZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSksCi0JKGdzdF92NGwyX3NpZ25hbF9zdHJlbmd0aCksIChnc3RfdjRsMl9nZXRfYXR0cmlidXRlKSwKLQkoZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSk6Ci0gICAgICAgIHVwZGF0ZSB0byBuZXcgZXJyb3IgaGFuZGxpbmcKLQotMjAwNC0wMS0xOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZXh0L3NpZHBsYXkvZ3N0c2lkZGVjLmNjOgotCSogZ3N0L21vZHBsdWcvZ3N0bW9kcGx1Zy5jYzoKLSAgICAgICAgICBwYXJlbnRoZXNlIE5VTEwgYmVjYXVzZSBDKysgc2VlbXMgYW5ncnkgYWJvdXQgaXQKLQotMjAwNC0wMS0xOSAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2dzdC1pMThuLXBsdWdpbi5oOgotICAgICAgICAgIGFkZCBza2VsZXRvbiBpMThuIHN0dWZmLCBidXQgbmVlZHMgdG8gYmUgZnVydGhlciBpbXBsZW1lbnRlZAotCi0yMDA0LTAxLTE4ICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlICA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotCi0JKiBleGFtcGxlcy9nc3RwbGF5L3BsYXllci5jOiAobWFpbik6Ci0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX29wZW4pOgotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfbGluayksIChnc3RfYWxzYV94cnVuX3JlY292ZXJ5KToKLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2xvb3ApOgotCSogZXh0L2Fsc2EvZ3N0YWxzYXNyYy5jOiAoZ3N0X2Fsc2Ffc3JjX2xvb3ApOgotCSogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuYzogKGdzdF9hZnNpbmtfb3Blbl9maWxlKSwKLQkoZ3N0X2Fmc2lua19jbG9zZV9maWxlKToKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzogKGdzdF9hZnNyY19vcGVuX2ZpbGUpLAotCShnc3RfYWZzcmNfY2xvc2VfZmlsZSk6Ci0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6IChnc3RfZGl2eGRlY19zZXR1cCksIChnc3RfZGl2eGRlY19jaGFpbik6Ci0JKiBleHQvZHYvZ3N0ZHZkZWMuYzogKGdzdF9kdmRlY19sb29wKToKLQkqIGV4dC9kdmRuYXYvZHZkbmF2c3JjLmM6IChkdmRuYXZzcmNfdXNlcl9vcCksIChkdmRuYXZzcmNfZ2V0KToKLQkqIGV4dC9lc2QvZXNkbW9uLmM6IChnc3RfZXNkbW9uX2dldCk6Ci0JKiBleHQvZXNkL2VzZHNpbmsuYzogKGdzdF9lc2RzaW5rX2NoYWluKToKLQkqIGV4dC9mYWFjL2dzdGZhYWMuYzogKGdzdF9mYWFjX2NoYWluKToKLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX2NoYWluKToKLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnZGVjLmM6IChnc3RfZmZtcGVnZGVjX2NoYWluKToKLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnZGVtdXguYzogKGdzdF9mZm1wZWdkZW11eF9sb29wKToKLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnbXV4LmM6IChnc3RfZmZtcGVnbXV4X2xvb3ApOgotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNkZWNfZXJyb3JfY2FsbGJhY2spLAotCShnc3RfZmxhY2RlY19sb29wKToKLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjZW5jX2NoYWluKToKLQkqIGV4dC9mbGFjL2dzdGZsYWN0YWcuYzogKGdzdF9mbGFjX3RhZ19jaGFpbik6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKGdzdF9nZGtfcGl4YnVmX2NoYWluKToKLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NpbmsuYzogKGdzdF9nbm9tZXZmc3Npbmtfb3Blbl9maWxlKSwKLQkoZ3N0X2dub21ldmZzc2lua19jbG9zZV9maWxlKToKLQkqIGV4dC9nbm9tZXZmcy9nc3Rnbm9tZXZmc3NyYy5jOiAoYXVkaW9jYXN0X2luaXQpLAotCShnc3RfZ25vbWV2ZnNzcmNfb3Blbl9maWxlKToKLQkqIGV4dC9pdm9yYmlzL3ZvcmJpc2ZpbGUuYzogKGdzdF9pdm9yYmlzZmlsZV9sb29wKToKLQkqIGV4dC9sYW1lL2dzdGxhbWUuYzogKGdzdF9sYW1lX3NpbmtfbGluayksIChnc3RfbGFtZV9jaGFpbik6Ci0JKiBleHQvbGNzL2dzdGNvbG9yc3BhY2UuYzogKGdzdF9jb2xvcnNwYWNlX3NyY2Nvbm5lY3RfZnVuYyk6Ci0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfaGFuZGxlX2V2ZW50KSwKLQkoZ3N0X2lkM190YWdfZG9fdHlwZWZpbmQpLCAoZ3N0X2lkM190YWdfY2hhaW4pOgotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfY2hhaW4pOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuYzogKGdzdF9taWttb2RfbG9vcCk6Ci0JKiBleHQvbXBlZzJkZWMvZ3N0bXBlZzJkZWMuYzoKLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuYy5jYzoKLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuY3BpY3R1cmVyZWFkZXIuY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXguY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXhpYml0c3RyZWFtLmNjOgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19kZW11eF9jaGFpbiksCi0JKGdzdF9vZ2dfZGVtdXhfcHVzaCksIChnc3Rfb2dnX3BhZF9wdXNoKToKLQkqIGV4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jOgotCSogZXh0L3NkbC9zZGx2aWRlb3NpbmsuYzogKGdzdF9zZGx2aWRlb3NpbmtfbG9jayksCi0JKGdzdF9zZGx2aWRlb3NpbmtfaW5pdHNkbCksIChnc3Rfc2RsdmlkZW9zaW5rX2NyZWF0ZSk6Ci0JKiBleHQvc2lkcGxheS9nc3RzaWRkZWMuY2M6Ci0JKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX29wZW5fZmlsZSksIChnc3Rfc2ZfY2xvc2VfZmlsZSksCi0JKGdzdF9zZl9sb29wKToKLQkqIGV4dC9zcGVleC9nc3RzcGVleGVuYy5jOiAoZ3N0X3NwZWV4ZW5jX2NoYWluKToKLQkqIGV4dC90YXJraW4vZ3N0dGFya2luZGVjLmM6IChnc3RfdGFya2luZGVjX2NoYWluKToKLQkqIGV4dC90YXJraW4vZ3N0dGFya2luZW5jLmM6IChnc3RfdGFya2luZW5jX2NoYWluKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZW5jLmM6IChnc3Rfdm9yYmlzZW5jX2NoYWluKToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZmlsZS5jOiAoZ3N0X3ZvcmJpc2ZpbGVfbG9vcCk6Ci0JKiBleHQveHZpZC9nc3R4dmlkZGVjLmM6IChnc3RfeHZpZGRlY19zZXR1cCksIChnc3RfeHZpZGRlY19jaGFpbik6Ci0JKiBleHQveHZpZC9nc3R4dmlkZW5jLmM6IChnc3RfeHZpZGVuY19zZXR1cCksIChnc3RfeHZpZGVuY19jaGFpbik6Ci0JKiBnc3QtbGlicy9nc3QvTWFrZWZpbGUuYW06Ci0JKiBnc3QtbGlicy9nc3QvcmlmZi9yaWZmLXJlYWQuYzogKGdzdF9yaWZmX3BlZWtfaGVhZCksCi0JKGdzdF9yaWZmX3JlYWRfZWxlbWVudF9kYXRhKSwgKGdzdF9yaWZmX3JlYWRfc2VlayksCi0JKGdzdF9yaWZmX3BlZWtfbGlzdCksIChnc3RfcmlmZl9yZWFkX2xpc3QpLCAoZ3N0X3JpZmZfcmVhZF9oZWFkZXIpOgotCSogZ3N0L2FkZGVyL2dzdGFkZGVyLmM6IChnc3RfYWRkZXJfcGFyc2VfY2FwcyksIChnc3RfYWRkZXJfbG9vcCk6Ci0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfcHJvY2Vzc19zZWdtZW50KSwKLQkoZ3N0X2FzZl9kZW11eF9wcm9jZXNzX3N0cmVhbSksIChnc3RfYXNmX2RlbXV4X2dldF9zdHJlYW0pOgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5pdCksCi0JKGdzdF9hdmlfZGVtdXhfYWRkX3N0cmVhbSksIChnc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXIpOgotCSogZ3N0L2F2aS9nc3RhdmltdXguYzogKGdzdF9hdmltdXhfc3RvcF9maWxlKToKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX2xvb3ApOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOiAoZ3N0X2dvb21fY2hhaW4pOgotCSogZ3N0L2lkMy9nc3RpZDN0eXBlcy5jOiAoZ3N0X2lkM3R5cGVzX2xvb3ApOgotCSogZ3N0L2ludGZsb2F0L2dzdGZsb2F0MmludC5jOiAoZ3N0X2Zsb2F0MmludF9sb29wKToKLQkqIGdzdC9pbnRmbG9hdC9nc3RpbnQyZmxvYXQuYzogKGdzdF9pbnQyZmxvYXRfY2hhaW5fZ2ludDE2KToKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYzogKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9pZCksCi0JKGdzdF9lYm1sX3JlYWRfZWxlbWVudF9sZW5ndGgpLCAoZ3N0X2VibWxfcmVhZF9lbGVtZW50X2RhdGEpLAotCShnc3RfZWJtbF9yZWFkX3NlZWspLCAoZ3N0X2VibWxfcmVhZF91aW50KSwgKGdzdF9lYm1sX3JlYWRfc2ludCksCi0JKGdzdF9lYm1sX3JlYWRfZmxvYXQpLCAoZ3N0X2VibWxfcmVhZF9oZWFkZXIpOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfaW5pdF9zdHJlYW0pLAotCShnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cCk6Ci0JKiBnc3QvbW9kcGx1Zy9nc3Rtb2RwbHVnLmNjOgotCSogZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYzogKGdzdF9tb25vc2NvcGVfY2hhaW4pOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhcnNlLmM6IChnc3RfbXBlZ19wYXJzZV9sb29wKToKLQkqIGdzdC9vbmV0b24vZ3N0b25ldG9uLmM6IChnc3Rfb25ldG9uX2NoYWluKToKLQkqIGdzdC9zaWxlbmNlL2dzdHNpbGVuY2UuYzogKGdzdF9zaWxlbmNlX2dldCk6Ci0JKiBnc3Qvc2luZS9nc3RzaW5lc3JjLmM6IChnc3Rfc2luZXNyY19nZXQpOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6IChnc3Rfc21wdGVfbG9vcCk6Ci0JKiBnc3Qvc3BlZWQvZ3N0c3BlZWQuYzogKHNwZWVkX2xvb3ApOgotCSogZ3N0L3RhZ3MvZ3N0dm9yYmlzdGFnLmM6IChnc3Rfdm9yYmlzX3RhZ19jaGFpbik6Ci0JKiBnc3QvdmlkZW90ZXN0c3JjL2dzdHZpZGVvdGVzdHNyYy5jOiAoZ3N0X3ZpZGVvdGVzdHNyY19nZXQpOgotCSogZ3N0L3ZvbGVudi9nc3R2b2xlbnYuYzogKGdzdF92b2xlbnZfY2hhaW4pOgotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKGdzdF93YXZlbmNfY2hhaW4pOgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfcGFyc2VfZm10KSwKLQkoZ3N0X3dhdnBhcnNlX2xvb3ApOgotCSogc3lzL2R4cjMvZHhyM2F1ZGlvc2luay5jOiAoZHhyM2F1ZGlvc2lua19vcGVuKSwKLQkoZHhyM2F1ZGlvc2lua19zZXRfbW9kZV9wY20pLCAoZHhyM2F1ZGlvc2lua19zZXRfbW9kZV9hYzMpLAotCShkeHIzYXVkaW9zaW5rX2Nsb3NlKToKLQkqIHN5cy9keHIzL2R4cjNzcHVzaW5rLmM6IChkeHIzc3B1c2lua19vcGVuKSwgKGR4cjNzcHVzaW5rX2Nsb3NlKToKLQkqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuYzogKGR4cjN2aWRlb3Npbmtfb3BlbiksCi0JKGR4cjN2aWRlb3NpbmtfY2xvc2UpLCAoZHhyM3ZpZGVvc2lua193cml0ZV9kYXRhKToKLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfb3Blbl9hdWRpbyk6Ci0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuaDoKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfZ2V0X3R5cGUpLCAoZ3N0X29zc3NpbmtfaW5pdCksCi0JKGdzdF9vc3NzaW5rX2NoYWluKToKLQkqIHN5cy9vc3MvZ3N0b3Nzc3JjLmM6IChnc3Rfb3Nzc3JjX2dldCk6Ci0JKiBzeXMvdjRsL2dzdHY0bG1qcGVnc2luay5jOiAoZ3N0X3Y0bG1qcGVnc2lua19jaGFpbik6Ci0JKiBzeXMvdjRsL2dzdHY0bG1qcGVnc3JjLmM6IChnc3RfdjRsbWpwZWdzcmNfYnVmZmVyX2ZyZWUpOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfYnVmZmVyX2ZyZWUpOgotCSogc3lzL3Y0bC92NGwtb3ZlcmxheV9jYWxscy5jOiAoZ3N0X3Y0bF9zZXRfd2luZG93KSwKLQkoZ3N0X3Y0bF9lbmFibGVfb3ZlcmxheSk6Ci0JKiBzeXMvdjRsL3Y0bF9jYWxscy5jOiAoZ3N0X3Y0bF9nZXRfY2FwYWJpbGl0aWVzKSwgKGdzdF92NGxfb3BlbiksCi0JKGdzdF92NGxfc2V0X2NoYW5fbm9ybSksIChnc3RfdjRsX2dldF9zaWduYWwpLAotCShnc3RfdjRsX2dldF9mcmVxdWVuY3kpLCAoZ3N0X3Y0bF9zZXRfZnJlcXVlbmN5KSwKLQkoZ3N0X3Y0bF9nZXRfcGljdHVyZSksIChnc3RfdjRsX3NldF9waWN0dXJlKSwgKGdzdF92NGxfZ2V0X2F1ZGlvKSwKLQkoZ3N0X3Y0bF9zZXRfYXVkaW8pOgotCSogc3lzL3Y0bC92NGxfY2FsbHMuaDoKLQkqIHN5cy92NGwvdjRsbWpwZWdzaW5rX2NhbGxzLmM6IChnc3RfdjRsbWpwZWdzaW5rX3N5bmNfdGhyZWFkKSwKLQkoZ3N0X3Y0bG1qcGVnc2lua19xdWV1ZV9mcmFtZSksIChnc3RfdjRsbWpwZWdzaW5rX3NldF9wbGF5YmFjayksCi0JKGdzdF92NGxtanBlZ3NpbmtfcGxheWJhY2tfaW5pdCksCi0JKGdzdF92NGxtanBlZ3NpbmtfcGxheWJhY2tfc3RhcnQpOgotCSogc3lzL3Y0bC92NGxtanBlZ3NyY19jYWxscy5jOiAoZ3N0X3Y0bG1qcGVnc3JjX3F1ZXVlX2ZyYW1lKSwKLQkoZ3N0X3Y0bG1qcGVnc3JjX3N5bmNfbmV4dF9mcmFtZSksIChnc3RfdjRsbWpwZWdzcmNfc2V0X2NhcHR1cmUpLAotCShnc3RfdjRsbWpwZWdzcmNfc2V0X2NhcHR1cmVfbSksIChnc3RfdjRsbWpwZWdzcmNfY2FwdHVyZV9pbml0KSwKLQkoZ3N0X3Y0bG1qcGVnc3JjX3JlcXVldWVfZnJhbWUpOgotCSogc3lzL3Y0bC92NGxzcmNfY2FsbHMuYzogKGdzdF92NGxzcmNfcXVldWVfZnJhbWUpLAotCShnc3RfdjRsc3JjX3N5bmNfZnJhbWUpLCAoZ3N0X3Y0bHNyY19jYXB0dXJlX2luaXQpLAotCShnc3RfdjRsc3JjX3JlcXVldWVfZnJhbWUpLCAoZ3N0X3Y0bHNyY190cnlfcGFsZXR0ZSk6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19nZXQpOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOiAoZ3N0X3Y0bDJzcmNfZmlsbF9mb3JtYXRfbGlzdCksCi0JKGdzdF92NGwyc3JjX3F1ZXVlX2ZyYW1lKSwgKGdzdF92NGwyc3JjX2dyYWJfZnJhbWUpLAotCShnc3RfdjRsMnNyY19nZXRfY2FwdHVyZSksIChnc3RfdjRsMnNyY19zZXRfY2FwdHVyZSksCi0JKGdzdF92NGwyc3JjX2NhcHR1cmVfaW5pdCksIChnc3RfdjRsMnNyY19jYXB0dXJlX3N0YXJ0KSwKLQkoZ3N0X3Y0bDJzcmNfY2FwdHVyZV9zdG9wKToKLQkqIHN5cy92Y2QvdmNkc3JjLmM6ICh2Y2RzcmNfb3Blbl9maWxlKToKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3hpbWFnZXNpbmtfY2hhaW4pOgotCSogc3lzL3h2aWRlby94dmlkZW9zaW5rLmM6IChnc3RfeHZpZGVvc2lua19idWZmZXJfbmV3KSwKLQkoZ3N0X3h2aWRlb3Npbmtfc2lua2Nvbm5lY3QpLCAoZ3N0X3h2aWRlb3NpbmtfY2hhaW4pLAotCShnc3RfeHZpZGVvc2lua194d2luZG93X25ldyk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3hjb250ZXh0X2dldCksCi0JKGdzdF94dmltYWdlc2lua19jaGFpbik6Ci0gICAgICAgIHVzZSBuZXcgZXJyb3Igc2lnbmFsLCBmdW5jdGlvbiBhbmQgY2F0ZWdvcmllcwotCi0yMDA0LTAxLTE4ICBKZXJlbXkgU2ltb24gPGplc2ltb25AbGliZXJ0eXN1cmYuZnI+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkqIGV4dC9NYWtlZmlsZS5hbToKLQkqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uYzoKLQkqIGV4dC9tdXNpY2JyYWluei9nc3R0cm0uaDoKLQkqIGV4dC9tdXNpY2JyYWluei9NYWtlZmlsZS5hbToKLQlBZGQgYSB0cm0gcGx1Z2luCi0KLTIwMDQtMDEtMTggIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19zZXRfcHJvcGVydHkpLAotCShnc3RfeGltYWdlc2lua19nZXRfcHJvcGVydHkpLCAoZ3N0X3hpbWFnZXNpbmtfY2xhc3NfaW5pdCk6IEFkZGluZwotCXN5bmNocm9ub3VzIHByb3BlcnR5IGZvciBkZWJ1Z2dpbmcuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDogQWRkaW5nIHRoZSBzeW5jaHJvbm91cyBib29sZWFuIGZsYWcuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3hjb250ZXh0X2dldCksCi0JKGdzdF94dmltYWdlc2lua19zZXRfcHJvcGVydHkpOiBNb3ZpbmcgYSBwb2ludGVyIGRlY2xhcmF0aW9uIHRvIGEKLQlzbWFsbGVyIGJsb2NrLCBmaXhpbmcgaW5kZW50LgotCi0yMDA0LTAxLTE2ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzogRml4IHJlZ3Jlc3Npb247IGNoYW5naW5nIGEKLQlwcm9wZXJ0eSBhZmZlY3RzIHRoZSB2aWRlbyBzdHJlYW0uCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuaDoKLQlBZGQgc3luY2hyb25vdXMgcHJvcGVydHkgZm9yIGRlYnVnZ2luZy4gIFNob3VsZCBwcm9iYWJseSBiZQotCWRpc2FibGVkIGluIG5vbi1DVlMgYnVpbGRzLiAgTWFrZSBzdXJlIHRoYXQgdGhlIFh2IGF0dHJpYnV0ZQotCWV4aXN0cyBiZWZvcmUgd2Ugc2V0IGl0IChjcmFzaCEpLiAgRml4IGEgc2lsbHkgZmxvYXQgYnVnIHRoYXQKLQljYXVzZWQgY29sb3JiYWxhbmNlIHRvIGp1c3Qgbm90IHdvcmsuCi0KLTIwMDQtMDEtMTcgIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KLQotCSogdG9vbHMvZ3N0LWxhdW5jaC1leHQuaW4gLSB1cGRhdGUgZm9yIG5ldyBwbHVnaW5zCi0KLTIwMDQtMDEtMTYgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdlbmMuYzogKGdzdF9mZm1wZWdlbmNfY29ubmVjdCk6IEZpeCB1c2Ugb2YKLQlhbHJlYWR5LWZyZWVkIGNhcHMuCi0KLTI5OTQtMDEtMTYgIENocmlzdGlhbiBTY2hhbGxlciA8VXJhZXVzQGdub21lLm9yZz4KLQotCSogVXBkYXRlIHNwZWMgZm9yIG5ldyBjb2xvcnNwYWNlIHBsdWdpbiBhbmQgbGliY2FjYSBwbHVnaW4KLQkqIEZpeCBjb21waWxhdGlvbiBvZiBsaWJjYWNhIHBsdWdpbiAoY2xvY2sgLT4gaWQpCi0KLTIwMDQtMDEtMTYgIEp1bGllbiBNT1VUVEUgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3VwZGF0ZV9jb2xvcmJhbGFuY2UpLAotCShnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwgKGdzdF94dmltYWdlc2lua19jaGFuZ2Vfc3RhdGUpLAotCShnc3RfeHZpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLAotCShnc3RfeHZpbWFnZXNpbmtfY29sb3JiYWxhbmNlX3NldF92YWx1ZSksCi0JKGdzdF94dmltYWdlc2lua19jb2xvcmJhbGFuY2VfZ2V0X3ZhbHVlKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF9wcm9wZXJ0eSksIChnc3RfeHZpbWFnZXNpbmtfZ2V0X3Byb3BlcnR5KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2luaXQpLCAoZ3N0X3h2aW1hZ2VzaW5rX2NsYXNzX2luaXQpOiBJbXBsZW1lbnRpbmcKLQljb3JyZWN0IGNvbG9yYmFsYW5jZSBwcm9wZXJ0aWVzLiBUaGV5IGNhbiBub3cgYmUgc2V0IHdoZW4gdGhlIGVsZW1lbnQKLQlpcyBzdGlsbCBpbiBOVUxMIHN0YXRlLiBUaGUgdmFsdWVzIHdpbGwgYmUgY29tbWl0dGVkIHRvIHRoZSBYdiBQb3J0Ci0Jd2hlbiB4Y29udGV4dCBpcyBpbml0aWFsaXplZC4KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmg6IEFkZGVkIGh1ZSwgc2F0dXJhdGlvbiwgY29udHJhc3QsCi0JYnJpZ2h0bmVzcyBpbnQgdmFsdWVzIGluIHRoZSBHc3RYdkltYWdlc2luayBzdHJ1Y3R1cmUuCi0KLTIwMDQtMDEtMTYgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9NYWtlZmlsZS5hbToKLQkgIHJlc3RydWN0dXJlIHNvIGhhdmluZyBsb2NhbCBwYXRjaGVzIHdvcmtzIGVhc2llci4KLQotMjAwNC0wMS0xNiAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L21wZWcyZW5jL01ha2VmaWxlLmFtOgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jLmNjOgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jcGljdHVyZXJlYWRlci5jYzoKLQkgIEJ1Z2ZpeCB3aXRoIHJlc3BlY3QgdG8gRU9TIGhhbmRsaW5nLgotCi0yMDA0LTAxLTE2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2VuYy5jOiAoZ3N0X2ZmbXBlZ2VuY19jb25uZWN0KToKLQkgIExpbmsgd2l0aCByaWdodCBjYXBzIChlbHNlLCBpdCBzZWdmYXVsdHMpLgotCSogZXh0L21wbGV4L2dzdG1wbGV4am9iLmNjOgotCSAgRml4IGZvciBzbGlnaHQgQVBJIGNoYW5nZSBpbiAxLjYuMS45MyByZWxlYXNlIG9mIG1qcGVndG9vbHMuCi0KLTIwMDQtMDEtMTUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL01ha2VmaWxlLmFtOgotCUFkZCBnc3RhdWRpb2ZpbHRlcnRlbXBsYXRlLmMgYW5kIGJ1aWxkaW5nIG9mIGdzdGF1ZGlvZmlsdGVyZXhhbXBsZS5jCi0JZnJvbSB0aGUgdGVtcGxhdGUuCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuYzoKLQkqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oOgotCUFkZCBieXRlc19wZXJfc2FtcGxlIGFuZCBzaXplIGFuZCBuX3NhbXBsZXMgY2FsY3VsYXRpb24uCi0JKiBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXJleGFtcGxlLmM6Ci0JUmVtb3ZlLCBub3cgYXV0b2dlbmVyYXRlZC4KLQkqIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2ZpbHRlcnRlbXBsYXRlLmM6Ci0JTW92ZWQgZnJvbSBnc3RhdWRpb2ZpbHRlcmV4YW1wbGUsIG9iamVjdCBuYW1lIGNoYW5nZWQsIGNvZGUgYWRkZWQKLQlzbyB0aGF0IGl0IGFjdHVhbGx5IHdvcmtzLgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL21ha2VfZmlsdGVyOgotCVNjcmlwdCB0byBidWlsZCBhbiBhdWRpb2ZpbHRlciBzdWJjbGFzcyBmcm9tIHRoZSB0ZW1wbGF0ZS4KLQkqIGdzdC9jb2xvcnNwYWNlL01ha2VmaWxlLmFtOgotCSogZ3N0L2NvbG9yc3BhY2UveXV2Mnl1di5jOgotCVJlbW92ZSBmaWxlLCBzaW5jZSBpdCdzIEdQTCwgYW5kIHdlIGRvbid0IHVzZSBpdC4KLQotMjAwNC0wMS0xNSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2NoYWluKToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hhaW4pOiBNYWtpbmcgYm90aCBvZgotCXRoZW0gdXNlIHRoZSBidWZmZXIgZnJlZSBmdW5jdGlvbiB0byB0ZXN0IGhvdyB0aGUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQuCi0KLTIwMDQtMDEtMTUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2VzZC9lc2RzaW5rLmM6IChnc3RfZXNkc2lua19jbGFzc19pbml0KTogUmVtb3ZlIHByb3BlcnR5Ci0JdGhhdCBoYW5kbGVzIG9zc3NpbmsgZmFsbGJhY2suCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfaW5pdCksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2dldGNhcHMpOgotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocXRkZW11eF9hdWRpb19jYXBzKToKLQlBZGQgYXVkaW8veC1xZG0yIGZvciBRRE0yIGF1ZGlvLgotCSogZ3N0L3NpbmUvZ3N0c2luZXNyYy5jOiAoZ3N0X3NpbmVzcmNfZ2V0KToKLQkqIGdzdC9zaW5lL2dzdHNpbmVzcmMuaDogQWRkIGV4YW1wbGUgb2YgaG93IHRvIGltcGxlbWVudCB0YWdzLgotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOiAoZ3N0X3ZpZGVvc2NhbGVfZ2V0Y2Fwcyk6Ci0JRGVjcmVhc2UgbWluaW11bSBzaXplIHRvIDE2eDE2LgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6Ci0JQ29udmVydCBkaXNhYmxlZCBwYWQgdGVtcGxhdGUgY2FwcyB0byBuZXcgY2Fwcy4KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKTogVGhyb3cgZWxlbWVudCBlcnJvciB3aGVuIGRpc3BsYXkgY2Fubm90Ci0JYmUgb3BlbmVkLiAgSW5jcmVhc2UgbWluaW11bSBmcmFtZXJhdGUgdG8gMS4wLiAgQ2hlY2sgdGhlIGRhdGEKLQlmcmVlIGZ1bmN0aW9uIG9uIGEgYnVmZmVyIHRvIG1ha2Ugc3VyZSBpdCBpcyB0aGUgdHlwZSB3ZSBleHBlY3QKLQliZWZvcmUgbWFuaXB1bGF0aW5nIGl0LgotCi0yMDA0LTAxLTE1ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOiAoZ3N0X3ZpZGVvYmFsYW5jZV9pbml0KSwKLQkoZ3N0X3ZpZGVvYmFsYW5jZV9jb2xvcmJhbGFuY2Vfc2V0X3ZhbHVlKTogSW1wbGVtZW50IHBhc3N0aHJ1IGlmCi0Jc2V0dGluZ3MgYXJlIGluIHRoZSBtaWRkbGUuCi0JKiB0b29scy9nc3QtbGF1bmNoLWV4dC5pbjogU3RvcCB1c2luZyB4dmlkZW9zaW5rLCB1c2UgeGltYWdlc2luay4KLQotMjAwNC0wMS0xNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZvbHVtZS9NYWtlZmlsZS5hbToKLQkgIFNpbmNlIHdlIHVzZSB2aWRlb2ZpbHRlciBzeW1ib2xzLCBsaW5rIHRvIGl0LgotCi0yMDA0LTAxLTE1ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYW1peGVyLmM6IChnc3RfYWxzYV9taXhlcl9pbnRlcmZhY2VfaW5pdCk6IFNldHRpbmcKLQltaXhlciBpbnRlcmZhY2UgdHlwZSB0byBIQVJEV0FSRS4KLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci5jOiAoZ3N0X21peGVyX2NsYXNzX2luaXQpOiBBZGRpbmcgYSBkZWZhdWx0Ci0JdHlwZSB0byBTT0ZUV0FSRS4KLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlci5oOiBBZGRpbmcgbWl4ZXIgaW50ZXJmYWNlIHR5cGUgYW5kIG1hY3JvLgotCSogZ3N0LWxpYnMvZ3N0L21peGVyL21peGVydHJhY2suaDogQWRkaW5nIG1peGVydHJhY2sgZmxhZyBTT0ZUV0FSRS4KLQkqIGdzdC92b2x1bWUvZ3N0dm9sdW1lLmM6IChnc3Rfdm9sdW1lX2ludGVyZmFjZV9zdXBwb3J0ZWQpLAotCShnc3Rfdm9sdW1lX2ludGVyZmFjZV9pbml0KSwgKGdzdF92b2x1bWVfbGlzdF90cmFja3MpLAotCShnc3Rfdm9sdW1lX3NldF92b2x1bWUpLCAoZ3N0X3ZvbHVtZV9nZXRfdm9sdW1lKSwKLQkoZ3N0X3ZvbHVtZV9zZXRfbXV0ZSksIChnc3Rfdm9sdW1lX21peGVyX2luaXQpLAotCShnc3Rfdm9sdW1lX2Rpc3Bvc2UpLCAoZ3N0X3ZvbHVtZV9nZXRfdHlwZSksICh2b2x1bWVfY2xhc3NfaW5pdCksCi0JKHZvbHVtZV9pbml0KTogSW1wbGVtZW50aW5nIG1peGVyIGludGVyZmFjZS4KLQkqIGdzdC92b2x1bWUvZ3N0dm9sdW1lLmg6IEFkZGluZyB0cmFja2xpc3QgZm9yIG1peGVyIGludGVyZmFjZS4KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfZ2V0X3R5cGUpLAotCShnc3Rfb3NzZWxlbWVudF9jaGFuZ2Vfc3RhdGUpOiBSZW1vdmluZyBzb21lIHRyYWlsaW5nIGNvbW1hcyBpbgotCXN0cnVjdHVyZXMuCi0JKiBzeXMvb3NzL2dzdG9zc21peGVyLmM6IChnc3Rfb3NzbWl4ZXJfaW50ZXJmYWNlX2luaXQpOiBTZXR0aW5nIG1peGVyCi0JaW50ZXJmYWNlIHR5cGUgdG8gSEFSRFdBUkUuCi0JKiBzeXMvdjRsL2dzdHY0bGNvbG9yYmFsYW5jZS5jOgotCShnc3RfdjRsX2NvbG9yX2JhbGFuY2VfaW50ZXJmYWNlX2luaXQpOiBTZXR0aW5nIGNvbG9yYmFsYW5jZSBpbnRlcmZhY2UKLQl0eXBlIHRvIEhBUkRXQVJFLgotCSogc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5jOgotCShnc3RfdjRsMl9jb2xvcl9iYWxhbmNlX2ludGVyZmFjZV9pbml0KTogU2V0dGluZyBjb2xvcmJhbGFuY2UKLQlpbnRlcmZhY2UgdHlwZSB0byBIQVJEV0FSRS4KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfY2hhaW4pOiB1c2UgZXhhY3RseSB0aGUKLQlzYW1lIGNvZGUgdGhhbiB4aW1hZ2VzaW5rIGZvciBldmVudCBoYW5kbGluZy4KLQotMjAwNC0wMS0xNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3NuYXBzaG90L01ha2VmaWxlLmFtOgotCSogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90LmM6IChnc3Rfc25hcHNob3Rfc2lua2Nvbm5lY3QpLAotCShnc3Rfc25hcHNob3RfY2hhaW4pOgotCSogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90Lmg6Ci0JICBUaGlzIGhhcyB0byBiZSBhIGpva2UuLi4gU25hcHNob3Qgc2hvdWxkIGJlIGNvbm5lY3RlZCB0byBhIHRlZSwKLQkgIGNvbG9yc3BhY2UgZWxlbWVudCBiZWZvcmUgaXQgYW5kIEVPUyBhZnRlciB0aGF0LCB3aGVyZSB0aGUgb3RoZXIKLQkgIHNyYyBvZiB0aGUgdGVlIHJlY2VpdmVzIG5vcm1hbCBkYXRhLgotCSAgVGhlIGN1cnJlbnQgd2F5IGlzICp3cm9uZyouCi0KLTIwMDQtMDEtMTUgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9oZXJtZXMvZ3N0aGVybWVzY29sb3JzcGFjZS5jOgotCSAgRml4IGFub3RoZXIgY29tcGlsZSBlcnJvci4gU2FtZSBhcyBiZWxvdy4KLQotMjAwNC0wMS0xNSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L2NvbG9yc3BhY2UvZ3N0Y29sb3JzcGFjZS5jOgotCSogZ3N0L2NvbG9yc3BhY2UveXV2Mnl1di5jOiAoZ3N0X2NvbG9yc3BhY2VfeXV5Ml90b19pNDIwKSwKLQkoZ3N0X2NvbG9yc3BhY2VfaTQyMF90b195djEyKToKLQkgIEZpeCBjb21waWxpbmcuLi4gRGlkbid0IHRlc3QgaWYgaXQgYWN0dWFsbHkgd29ya3MuCi0KLTIwMDQtMDEtMTUgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogY29uZmlndXJlLmFjOgotCSogZ3N0L2NvbG9yc3BhY2UvTWFrZWZpbGUuYW06Ci0JKiBnc3QvY29sb3JzcGFjZS9nc3Rjb2xvcnNwYWNlLmM6Ci0JKiBnc3QvY29sb3JzcGFjZS9nc3Rjb2xvcnNwYWNlLmg6Ci0JKiBnc3QvY29sb3JzcGFjZS95dXYycmdiLmM6Ci0JKiBnc3QvY29sb3JzcGFjZS95dXYycmdiLmg6Ci0JRHVwbGljYXRlIHRoZSBleHQvaGVybWVzIGNvbG9yc3BhY2UgcGx1Z2luLCBhbmQgcmVtb3ZlIEhlcm1lcwotCWNvZGUgYW5kIEdQTCBjb2RlLiAgRml4IGZvciBuZXcgY2FwcyBuZWdvdGlhdGlvbi4gIFJld3JpdGUKLQltdWNoIG9mIHRoZSBmb3JtYXQgaGFuZGxpbmcgY29kZSwgYW5kIHNvbWUgb2YgdGhlIGNvbnZlcnNpb24KLQljb2RlLiAgQmFzaWNhbGx5LCByZXdyb3RlIGFsbW9zdCBldmVyeXRoaW5nLiAgVGhpcyBlbGVtZW50Ci0JaGFuZGxlcyBJNDIwLCBZVjEyIHRvIFJHQiBjb252ZXJzaW9ucy4KLQkqIGV4dC9oZXJtZXMvTWFrZWZpbGUuYW06Ci0JKiBleHQvaGVybWVzL2dzdGhlcm1lc2NvbG9yc3BhY2UuYzoKLQlSZW5hbWUgY29sb3JzcGFjZSB0byBoZXJtZXNjb2xvcnNwYWNlLiAgRml4IG5lZ290aWF0aW9uIGlzc3Vlcy4KLQlSZW1vdmUgbm9uLUhlcm1lcyByZWxhdGVkIGNvZGUuICBUaGlzIGVsZW1lbnQgaGFuZGxlcyBsb3RzIG9mCi0JUkdCIHRvIFJHQiBjb252ZXJzaW9ucywgYnV0IG5vIFlVVi4KLQkqIGV4dC9oZXJtZXMvZ3N0Y29sb3JzcGFjZS5jOgotCSogZXh0L2hlcm1lcy9nc3Rjb2xvcnNwYWNlLmg6Ci0JKiBleHQvaGVybWVzL3JnYjJ5dXYuYzoKLQkqIGV4dC9oZXJtZXMveXV2MnJnYi5jOgotCSogZXh0L2hlcm1lcy95dXYycmdiLmg6Ci0JKiBleHQvaGVybWVzL3l1djJyZ2JfbW14MTYuczoKLQkqIGV4dC9oZXJtZXMveXV2Mnl1di5jOgotCSogZXh0L2hlcm1lcy95dXYyeXV2Lmg6Ci0JUmVtb3ZlIG9sZCBjb2RlLgotCi0yMDA0LTAxLTE0ICBDb2xpbiBXYWx0ZXJzICA8d2FsdGVyc0B2ZXJidW0ub3JnPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jIChnc3RfaWQzX3RhZ19jaGFpbik6IERvbid0IG5lZ28gY2FwcyBpZgotCXRoZXkndmUgYWxyZWFkeSBiZWVuLgotCi0yMDA0LTAxLTE1ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfaWQzX3RhZ19kb19jYXBzX25lZ28pOgotCSAgYXNzdW1lIHRhZyBtb2RlIHdoZW4gcGFkIGlzIG5vdCBjb25uZWN0ZWQKLQotMjAwNC0wMS0xNSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc2luay5jOiAoZ3N0X2Fsc2Ffc2lua19jaGVja19ldmVudCk6Ci0JICBEb24ndCB1cGRhdGUgdGhlIHRpbWUgb2YgdGhlIGNsb2NrCi0JKGdzdF9hbHNhX3NpbmtfbG9vcCk6Ci0JICBzeW5jIHRvIHRoZSBjbG9jayBnaXZlbiB0byBhbHNhc2luaywgbm90IHRoZSBvd24gY2xvY2sKLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfY2hhaW4pOgotCSAgc3luYyB0byB0aGUgY2xvY2sKLQkoZ3N0X29zc3NpbmtfY2hhbmdlX3N0YXRlKToKLQkgIGFjdGl2YXRlIHRoZSBjbG9jawotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jaGFpbik6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKToKLQkgIHJlbW92ZSBib2d1cyBjb2RlIHRoYXQgbWFkZSBESVNDT05UIGV2ZW50cyB1bmhhbmRsZWQKLQkqIGdzdC9hc2ZkZW11eC9nc3Rhc2ZkZW11eC5jOiAoZ3N0X2FzZl9kZW11eF92aWRlb19jYXBzKToKLQkgIGV4cGxpY2l0bHkgY2FzZSB0byBkb3VibGUgaW4gX3NldF9zaW1wbGUuIChmaXhlcyAybmQgd2FybmluZyBpbiBidWcKLQkgICMxMzE1MDIpCi0JKiBnc3QvYXNmZGVtdXgvZ3N0YXNmZGVtdXguYzogKGdzdF9hc2ZfZGVtdXhfcmVhZF9vYmplY3RfaGVhZGVyKSwKLQkoZ3N0X2FzZl9kZW11eF9oYW5kbGVfc2lua19ldmVudCksIChnc3RfYXNmX2RlbXV4X2F1ZGlvX2NhcHMpLAotCShnc3RfYXNmX2RlbXV4X2FkZF9hdWRpb19zdHJlYW0pLCAoZ3N0X2FzZl9kZW11eF92aWRlb19jYXBzKToKLQkgIGNvbnZlcnQgZ193YXJuaW5nIGJlY2F1c2Ugb2Ygd3JvbmcgYXNmIGRhdGEgdG8gR1NUX1dBUk5JTkdzIChmaXhlcwotCSAgMm5kIHdhcm5pbmcgaW4gYnVnICMxMzE1MDIpCi0KLTIwMDQtMDEtMTQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOiAoZ3N0X3ZpZGVvYmFsYW5jZV9pbml0KSwKLQkoZ3N0X3ZpZGVvYmFsYW5jZV9jb2xvcmJhbGFuY2Vfc2V0X3ZhbHVlKSwKLQkoZ3N0X3ZpZGVvYmFsYW5jZV9jb2xvcmJhbGFuY2VfZ2V0X3ZhbHVlKTogRml4aW5nIHZpZGVvYmFsYW5jZSByYW5nZXMKLQlmb3IgY29sb3JiYWxhbmNlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2V0X3Byb3BlcnR5KSwgKGdzdF94aW1hZ2VzaW5rX2dldF9wcm9wZXJ0eSksCi0JKGdzdF94aW1hZ2VzaW5rX2Rpc3Bvc2UpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCksCi0JKGdzdF94aW1hZ2VzaW5rX2NsYXNzX2luaXQpOiBBZGRpbmcgRElTUExBWSBwcm9wZXJ0eS4KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5oOiBBZGRpbmcgZGlzcGxheV9uYW1lIHRvIHN0b3JlIGRpc3BsYXkuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3hjb250ZXh0X2dldCksCi0JKGdzdF94dmltYWdlc2lua19zZXRfcHJvcGVydHkpLCAoZ3N0X3h2aW1hZ2VzaW5rX2dldF9wcm9wZXJ0eSksCi0JKGdzdF94dmltYWdlc2lua19kaXNwb3NlKSwgKGdzdF94dmltYWdlc2lua19pbml0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NsYXNzX2luaXQpOiBBZGRpbmcgRElTUExBWSBwcm9wZXJ0eSBhbmQgY29sb3JiYWxhbmNlCi0JcHJvcGVydGllcyAodGhleSBzdGlsbCBuZWVkIHBvbGlzaGluZyB0aG91Z2ggZm9yIGdzdC1sYXVuY2ggdXNlIDogbm8KLQl4Y29udGV4dCB5ZXQsIGkgbGwgZG8gdGhhdCB0b21vcnJvdykuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5oOiBBZGRpbmcgZGlzcGxheV9uYW1lIHRvIHN0b3JlIGRpc3BsYXkuCi0KLTIwMDQtMDEtMTQgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvZ3N0cGxheS5jOiAoZ3N0X3BsYXlfcGlwZWxpbmVfc2V0dXApLAotCShnc3RfcGxheV9zZXRfbG9jYXRpb24pLCAoZ3N0X3BsYXlfc2V0X3Zpc3VhbGl6YXRpb24pOiBQcmVwYXJpbmcKLQlzd2l0Y2ggaW50ZWdyYXRpb24sIGFkZGluZyB2aWRlb2JhbGFuY2UgaW4gdGhlIHBpcGVsaW5lLgotCi0yMDA0LTAxLTE0ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9jb2xvcmJhbGFuY2UuYzoKLQkoZ3N0X2NvbG9yX2JhbGFuY2VfY2xhc3NfaW5pdCk6IEFkZGluZyBhIGRlZmF1bHQgdHlwZS4KLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvY29sb3JiYWxhbmNlLmg6IEFkZGluZyBhIG1hY3JvIHRvIGFjY2VzcwotCXRoZSB0eXBlLgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jOiAoZ3N0X3ZpZGVvYmFsYW5jZV9nZXRfdHlwZSksCi0JKGdzdF92aWRlb2JhbGFuY2VfZGlzcG9zZSksIChnc3RfdmlkZW9iYWxhbmNlX2NsYXNzX2luaXQpLAotCShnc3RfdmlkZW9iYWxhbmNlX2luaXQpLCAoZ3N0X3ZpZGVvYmFsYW5jZV9pbnRlcmZhY2Vfc3VwcG9ydGVkKSwKLQkoZ3N0X3ZpZGVvYmFsYW5jZV9pbnRlcmZhY2VfaW5pdCksCi0JKGdzdF92aWRlb2JhbGFuY2VfY29sb3JiYWxhbmNlX2xpc3RfY2hhbm5lbHMpLAotCShnc3RfdmlkZW9iYWxhbmNlX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWUpLAotCShnc3RfdmlkZW9iYWxhbmNlX2NvbG9yYmFsYW5jZV9nZXRfdmFsdWUpLAotCShnc3RfdmlkZW9iYWxhbmNlX2NvbG9yYmFsYW5jZV9pbml0KTogSW1wbGVtZW50aW5nIGNvbG9yYmFsYW5jZQotCWludGVyZmFjZS4KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaDogQWRkaW5nIGNvbG9yYmFsYW5jZSBjaGFubmVscwotCWxpc3QuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3NldF94d2luZG93X2lkKTogRml4aW5nIGEKLQlidWcgd2hpY2ggd2FzIHRyaWdnZXJpbmcgYSBCYWRBY2Nlc3MgWCBlcnJvciB3aGVuIHNldHRpbmcgYW4gb3ZlcmxheQotCWJlZm9yZSBwYWQgd2FzIHJlYWxseSBuZWdvdGlhdGVkLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jb2xvcmJhbGFuY2VfaW5pdCk6Ci0JVXNpbmcgdGhlIGNvbG9yYmFsYW5jZSB0eXBlIG1hY3JvLgotCi0yMDA0LTAxLTE0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNlbmMuYzogKGdzdF9mbGFjZW5jX3NldF9tZXRhZGF0YSksCi0JKGdzdF9mbGFjZW5jX2NoYWluKToKLQkgIGhhbmRsZSB0YWdzIGNvcnJlY3RseQotCSogZ3N0L3RhZ3MvZ3N0aWQzdGFnLmM6IChnc3RfdGFnX2xpc3RfbmV3X2Zyb21faWQzdjEpOgotCSAgZXh0cmFjdCBJRDN2MSB0YWdzIGNvcnJlY3RseQotCi0yMDA0LTAxLTE0ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvdHlwZWZpbmQvZ3N0dHlwZWZpbmRmdW5jdGlvbnMuYzogKG1hdHJvc2thX3R5cGVfZmluZCksCi0JKHBsdWdpbl9pbml0KToKLQkgIEltcHJvdmUgbWF0cm9za2EgdHlwZWZpbmRpbmcgZm9yIG9kZC10eXBlZCBoZWFkZXJzLi4uCi0KLTIwMDQtMDEtMTQgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pOgotCSAgRml4IGZvciB1c2luZyBpbmNyZW1lbnRhbCBudW1iZXIgb24gcGFkbmFtZXMuCi0KLTIwMDQtMDEtMTQgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzoKLQkqIGV4dC9kaXZ4L2dzdGRpdnhlbmMuYzoKLQkgIFNldCBjYXRlZ29yeSB0byBkaXZ4NGxpbnV4IGluc3RlYWQgb2YgZGl2eCAodG9vIGdlbmVyaWMpLgotCSogZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmM6IChnc3Rfd2F2cGFyc2VfaW5pdCksCi0JKGdzdF93YXZwYXJzZV9wYXJzZV9mbXQpLCAoZ3N0X3dhdnBhcnNlX2hhbmRsZV9zaW5rX2V2ZW50KSwKLQkoZ3N0X3dhdnBhcnNlX2xvb3ApLCAoZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIGZpeCBwYXJzaW5nIG9mIFdBViBmaWxlcyB3aXRoIG5vbi1zdGFuZGFyZCBmbXQtdGFnIHNpemUgYW5kIGZpeAotCSAgc2tpcHBpbmcgb2YgdW5yZWNvZ25pemVkIGNodW5rcy4uLiBTb21lb25lIHBsZWFzZSBmaXggdGhpcyB0aGluZwotCSAgdG8gdXNlIHJpZmZsaWIgc28gYWxsIHRoaXMgaXMgYXV0b21hdGVkLgotCSogc3lzL3Y0bC9NYWtlZmlsZS5hbToKLQkqIHN5cy92NGwyL01ha2VmaWxlLmFtOgotCSAgQWRkIFhfQ0ZMQUdTIGJlY2F1c2Ugd2UgZGVwZW5kIG9uIFggKGZvciBvdmVybGF5KS4KLQotMjAwNC0wMS0xNCAgSmFuIFNjaG1pZHQgIDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvbXBlZzJkZWMvZ3N0bXBlZzJkZWMuYzoKLQkgIERvbid0IGlzc3VlIGEgdGltZXN0YW1wIHVubGVzcyB3ZSB0YWdnZWQgdGhlIGZyYW1lCi0JICB3aXRoIGEgUFRTLgotCi0yMDA0LTAxLTE0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L2dzdHBsYXkuYzogKGdzdF9wbGF5X3RpY2tfY2FsbGJhY2spOgotCSAgUXVlcnkgdGhlIGF1ZGlvIGVsZW1lbnQgdG8gZ2V0IHRoZSB0aW1lLCBub3QgdGhlIGNsb2NrLiBXZSdyZQotCSAgaW50ZXJlc3RlZCBpbiB0aGUgZWxlbWVudCdzIHRpbWUgaGVyZS4KLQotMjAwNC0wMS0xNCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6IChnc3RfYWFzaW5rX2NoYWluKToKLQkqIGV4dC9hbHNhL2dzdGFsc2FzaW5rLmM6IChnc3RfYWxzYV9zaW5rX2NoZWNrX2V2ZW50KToKLQkqIGV4dC9lc2QvZXNkc2luay5jOiAoZ3N0X2VzZHNpbmtfY2hhaW4pOgotCSogZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuYzogKGdzdF9jYWNhc2lua19jaGFpbik6Ci0JKiBleHQvbWFzL21hc3NpbmsuYzogKGdzdF9tYXNzaW5rX2NoYWluKToKLQkqIGV4dC9zZGwvc2RsdmlkZW9zaW5rLmM6IChnc3Rfc2RsdmlkZW9zaW5rX2NoYWluKToKLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2luZGV4KSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX21ldGFkYXRhKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfbG9vcCksCi0JKGdzdF9tcGVnX3BhcnNlX3JlbGVhc2VfbG9ja3MpOgotCSogZ3N0L3RjcC9nc3R0Y3BzaW5rLmM6IChnc3RfdGNwc2lua19jaGFpbik6Ci0JKiBnc3QvdWRwL2dzdHVkcHNpbmsuYzogKGdzdF91ZHBzaW5rX2NoYWluKToKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6IChnc3RfdmlkZW90ZXN0c3JjX2dldCk6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3NzaW5rX2luaXQpLCAoZ3N0X29zc3NpbmtfY2hhaW4pLAotCShnc3Rfb3Nzc2lua19jaGFuZ2Vfc3RhdGUpOgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NpbmsuYzogKGdzdF92NGxtanBlZ3NpbmtfY2hhaW4pOgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jaGFpbik6Ci0JKiBzeXMveHZpZGVvL3h2aWRlb3NpbmsuYzogKGdzdF94dmlkZW9zaW5rX2NoYWluKSwKLQkoZ3N0X3h2aWRlb3NpbmtfcmVsZWFzZV9sb2Nrcyk6Ci0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKToKLQkgIHVzZSBlbGVtZW50IHRpbWUuCi0JKiBleHQvYWxzYS9nc3RhbHNhY2xvY2suYzogKGdzdF9hbHNhX2Nsb2NrX3N0YXJ0KSwKLQkoZ3N0X2Fsc2FfY2xvY2tfc3RvcCk6Ci0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW9jbG9jay5jOiAoZ3N0X2F1ZGlvX2Nsb2NrX3NldF9hY3RpdmUpLAotCShnc3RfYXVkaW9fY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUpOgotCSAgc2ltcGxpZnkgZm9yIHVzZSB3aXRoIG5ldyBjbG9ja2luZyBjb2RlLgotCSogdGVzdHN1aXRlL2Fsc2EvTWFrZWZpbGUuYW06Ci0JKiB0ZXN0c3VpdGUvYWxzYS9zaW5lc3JjLmM6IChzaW5lc3JjX2luaXQpLCAoc2luZXNyY19mb3JjZV9jYXBzKToKLQkgIGZpeCB0ZXN0c3VpdGUgZm9yIG5ldyBjYXBzIHN5c3RlbQotCi0yMDA0LTAxLTE0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjZGVjX3VwZGF0ZV9tZXRhZGF0YSk6Ci0JKiBleHQvZmxhYy9nc3RmbGFjZW5jLmM6IChhZGRfb25lX3RhZyk6Ci0JICBsZW5ndGggaXMgYWxyZWFkeSBob3N0IGVuZGlhbiwgbm8gbmVlZCB0byBjb252ZXJ0LiBGaXhlcyBwbGF5YmFjayBvZgotCSAgdGFnZ2VkIGZpbGVzIG9uIFBQQy4gKGJ1ZyAjMTI4Mzg0KQotCi0yMDA0LTAxLTEzICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZ3N0LWxpYnMvZ3N0L2NvbG9yYmFsYW5jZS9jb2xvcmJhbGFuY2UuaDogQWRkaW5nIGEgdHlwZSB0byB0aGUKLQljb2xvcmJhbGFuY2UgaW50ZXJmYWNlIHN0YXRpbmcgaWYgaXQgaXMgaGFyZHdhcmUgYmFzZWQgb3Igc29mdHdhcmUKLQliYXNlZC4KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuYzogKGdzdF92aWRlb2JhbGFuY2VfcGxhbmFyNDExKToKLQlSZW1vdmluZyBhIHRyYWlsaW5nIGNvbW1hLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua194Y29udGV4dF9nZXQpLAotCShnc3RfeHZpbWFnZXNpbmtfY29sb3JiYWxhbmNlX2luaXQpOiBJbnRlZ3JhdGluZyBhIHBhdGNoIGZyb20gSm9uCi0JVHJvd2JyaWRnZSA8dHJvd0B4aW1pYW4uY29tPiBxdWVyeWluZyBYdiBhZGFwdG9yIGZvciBtaW4vbWF4IHZhbHVlIGFzCi0JdGhlIGRvY3VtZW50YXRpb24gc2VlbXMgdG8gYmUgd3Jvbmcgb24gdGhlIC0xMDAwIHRvIDEwMDAgaW50ZXJ2YWwuCi0KLTIwMDQtMDEtMTIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2RlYnVnL2VmZW5jZS5jOiAoZ3N0X2VmZW5jZV9pbml0KSwgKGdzdF9lZmVuY2VfY2hhaW4pLAotCShnc3RfZWZlbmNlX2J1ZmZlcl9hbGxvYyksIChnc3RfZmVuY2VkX2J1ZmZlcl9uZXcpLAotCShnc3RfZmVuY2VkX2J1ZmZlcl9kZWZhdWx0X2ZyZWUpLCAoZ3N0X2ZlbmNlZF9idWZmZXJfZGVmYXVsdF9jb3B5KToKLQlGaXggbmVnb3RpYXRpb24uICBBZGQgYSBidWZmZXJhbGxvYyBmdW5jdGlvbiBmb3IgdGhlIHNpbmsgcGFkLAotCWFuZCBnZW5lcmFsbHkgY2xlYW4gdXAgc29tZSBvZiB0aGUgY29kZS4KLQotMjAwNC0wMS0xMiAgSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9jb2xvcmJhbGFuY2UvY29sb3JiYWxhbmNlY2hhbm5lbC5jOgotCShnc3RfY29sb3JfYmFsYW5jZV9jaGFubmVsX2Rpc3Bvc2UpOiBBZGRpbmcgc2FmZXR5IGNoZWNrIGluIGRpc3Bvc2UKLQltZXRob2QuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX3hjb250ZXh0X2dldCksCi0JKGdzdF94dmltYWdlc2lua194Y29udGV4dF9jbGVhciksCi0JKGdzdF94dmltYWdlc2lua19pbnRlcmZhY2Vfc3VwcG9ydGVkKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NvbG9yYmFsYW5jZV9saXN0X2NoYW5uZWxzKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWUpLAotCShnc3RfeHZpbWFnZXNpbmtfY29sb3JiYWxhbmNlX2dldF92YWx1ZSksCi0JKGdzdF94dmltYWdlc2lua19jb2xvcmJhbGFuY2VfaW5pdCksIChnc3RfeHZpbWFnZXNpbmtfZ2V0X3R5cGUpOgotCUFkZGluZyBjb2xvcmJhbGFuY2UgaW50ZXJmYWNlIHN1cHBvcnQgdG8gc2V0IFhWIHBhcmFtZXRlcnMgc3VjaCBhcwotCUhVRSwgQlJJR0hUTkVTUywgQ09OVFJBU1QsIFNBVFVSQVRJT04uCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5oOiBBZGRpbmcgdGhlIGNoYW5uZWxzIGxpc3QgZm9yIGNvbG9yYmFsYW5jZQotCWludGVyZmFjZS4KLQotMjAwNC0wMS0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2dldF90eXBlKSwKLQkoZ3N0X2F1ZGlvX2NvbnZlcnRfY2xhc3NfaW5pdCksIChnc3RfYXVkaW9jb252ZXJ0X2dldGNhcHMpLAotCShnc3RfYXVkaW9fY29udmVydF9pbml0KSwgKGdzdF9hdWRpb19jb252ZXJ0X3NldF9wcm9wZXJ0eSksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2dldF9wcm9wZXJ0eSksIChnc3RfYXVkaW9fY29udmVydF9jaGFpbiksCi0JKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspLAotCShnc3RfYXVkaW9fY29udmVydF9idWZmZXJfdG9fZGVmYXVsdF9mb3JtYXQpLAotCShnc3RfYXVkaW9fY29udmVydF9idWZmZXJfZnJvbV9kZWZhdWx0X2Zvcm1hdCksIChwbHVnaW5faW5pdCk6Ci0gICAgICAgICAgLSBpbXBsZW1lbnQgX2dldGNhcHMgYW5kIHVzZSBpdAotICAgICAgICAgIC0gaW1wcm92ZSBsaW5raW5nCi0gICAgICAgICAgLSByZW1vdmUgZmxvYXQgY2FwcyBzaW5jZSBubyBmbG9hdCBjb252ZXJzaW9uIGlzIGFjdHVhbGx5IGRvbmUKLSAgICAgICAgICAtIHJlbW92ZSBwcm9wZXJ0aWVzIGFuZCBhcmd1bWVudHMgdGhhdCB3ZXJlIHRvIGJlIHVzZWQgZm9yIHJhdGUKLSAgICAgICAgICAgIGNvbnZlcnNpb24KLQotMjAwNC0wMS0xMiAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSAgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLQotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLmM6IChfZ3N0X2F1ZGlvX3N0cnVjdHVyZV9zZXRfbGlzdCksCi0JKGdzdF9hdWRpb19zdHJ1Y3R1cmVfc2V0X2ludCk6Ci0JKiBnc3QtbGlicy9nc3QvYXVkaW8vYXVkaW8uaDoKLSAgICAgICAgICBhZGQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgX2dldGNhcHMgbWF0Y2hpbmcgdGhlIHN0YW5kYXJkIGF1ZGlvCi0gICAgICAgICAgdGVtcGxhdGVzCi0KLTIwMDQtMDEtMTIgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L2F1ZGlvY29udmVydC9nc3RhdWRpb2NvbnZlcnQuYzogKGdzdF9hdWRpb19jb252ZXJ0X2xpbmspOgotCVRlc3QgdGhhdCBwYWQgaXMgbmVnb3RpYXRlZCBiZWZvcmUgZ2V0dGluZyBpdHMgY2Fwcy4KLQotMjAwNC0wMS0xMiAgSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIGdzdC1saWJzL2dzdC9wbGF5L2dzdHBsYXkuYzogKGdzdF9wbGF5X2dldF9zaW5rX2VsZW1lbnQpOiBXaGVuCi0JYW5hbHl6aW5nIHRoZSBwYWRzIG9mIGFuIGVsZW1lbnQgdGhlIGJpbiBpcyBtb3N0bHkgaW4gUkVBRFkgc3RhdGUgc28KLQlubyBjYXBzIHdlcmUgbmVnb3RpYXRlZC4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gbmVlZHMgdG8gd29yayB3aXRoCi0JX2dldF9jYXBzIGRpcmVjdGx5IHRoZW4uIEkgd2FzIG5vdCBmcmVlaW5nIHRoZW0gdGhvdWdoLCBhZGRlZCB0aGF0IHRvCi0JZml4IHRoZSBtZW0gbGVhay4KLQotMjAwNC0wMS0xMiAgSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hhaW4pOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jaGFpbik6IEZpeGluZyB0aGUKLQlkaXJlY3QgcHV0IGJ1ZmZlcnMgZGV0ZWN0aW9uLiBJIHByZWZlciBjaGVja2luZyBHU1RfQlVGRkVSX1BSSVZBVEUKLQl0aGFuIHRoZSBmcmVlX2Z1bmMuCi0KLTIwMDQtMDEtMTIgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3NzYXVkaW8uYzogKHBsdWdpbl9pbml0KToKLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5jOiAoZ3N0X29zc2VsZW1lbnRfc3luY19wYXJtcyk6Ci0JKiBzeXMvb3NzL2dzdG9zc2VsZW1lbnQuaDoKLSAgICAgICAgICBtYWtlIGFuIG9zcyBkZWJ1Z2dpbmcgY2F0ZWdvcnkKLSAgICAgICAgICBtYWtlIGZhaWx1cmUgbW9yZSBkZXNjcmlwdGl2ZQotCi0yMDA0LTAxLTExICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnLmM6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2NvZGVjbWFwLmM6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlYy5jOgotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdlbmMuYzoKLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVncHJvdG9jb2wuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka2FuaW1hdGlvbi5jOgotCSogZXh0L2pwZWcvZ3N0anBlZy5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmcuYzoKLQkqIGV4dC9tcGVnMmRlYy9wZXJmdGVzdC5jOgotCSogZXh0L3NwZWV4L2dzdHNwZWV4LmM6Ci0JKiBnc3QtbGlicy9nc3QvcmVzYW1wbGUvZHRvcy5jOgotCSogZ3N0L2ludGZsb2F0L2dzdGludGZsb2F0Y29udmVydC5jOgotCSogZ3N0L29uZXRvbi9nc3RvbmV0b24uYzoKLQkqIGdzdC9ydGpwZWcvUlRqcGVnLmM6Ci0JKiBnc3QvcnRwL2dzdHJ0cC5jOgotCSogc3lzL2R4cjMvZHhyM2luaXQuYzoKLQkqIHN5cy9nbHNpbmsvZ3N0Z2xfbnZpbWFnZS5jOgotCSogc3lzL2dsc2luay9nc3RnbF9wZHJpbWFnZS5jOgotCSogc3lzL2dsc2luay9nc3RnbHNpbmsuYzoKLQkqIHRlc3RzdWl0ZS9nc3QtbGludDoKLQlNYWtlIHN1cmUgZXZlcnlib2R5IHdyYXBzICNpbmNsdWRlICJjb25maWcuaCIgaW4gI2lmZGVmIEhBVkVfQ09ORklHX0gKLQotMjAwNC0wMS0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6IChnc3RfYWxzYV9zcmNfc2V0X2NhcHMpOgotCSogZXh0L2ZhYWMvZ3N0ZmFhYy5jOiAoZ3N0X2ZhYWNfc2lua2Nvbm5lY3QpOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrYW5pbWF0aW9uLmM6Ci0JKGdzdF9nZGtfYW5pbWF0aW9uX2l0ZXJfY3JlYXRlX3BpeGJ1Zik6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzogKGdzdF9nZGtfcGl4YnVmX3NpbmtfbGluayksCi0JKGdzdF9nZGtfcGl4YnVmX2NoYWluKToKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5oOgotCSogZXh0L2phY2svZ3N0amFjay5jOiAoZ3N0X2phY2tfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzogKGdzdF94dmlkZGVjX3NpbmtfbGluayk6Ci0JKiBnc3QtbGlicy9nc3QvcGxheS9nc3RwbGF5LmM6IChnc3RfcGxheV9nZXRfc2lua19lbGVtZW50KToKLQkqIGdzdC1saWJzL2dzdC9wbGF5L3BsYXkuYzogKGdzdF9wbGF5X2dldF9zaW5rX2VsZW1lbnQpOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmlsdGVyLmM6Ci0JKGdzdF92aWRlb2ZpbHRlcl9zZXRfb3V0cHV0X3NpemUpOgotCVJlbW92ZSBhbGwgdXNhZ2Ugb2YgZ3N0X3BhZF9nZXRfY2FwcygpLCBhbmQgcmVwbGFjZSBpdCB3aXRoCi0JZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzKCkgb3IgZ3N0X3BhZF9nZXRfbmVnb3RpYXRlZF9jYXAoKS4KLQotMjAwNC0wMS0xMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06IEZpeGVzIHRvIG1ha2UgZXh0L2xpYmNhY2EgY29tcGlsZS4KLQkqIGV4dC9kaXZ4L2dzdGRpdnhkZWMuYzoKLQkqIGV4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1Zi5jOiAoZ3N0X2dka19waXhidWZfc2lua19saW5rKSwKLQkoZ3N0X2dka19waXhidWZfaW5pdCksIChnc3RfZ2RrX3BpeGJ1Zl9jaGFpbik6IE1ha2UgZ2RrcGl4YnVmZGVjCi0JaGFuZGxlIGltYWdlcyB0aGF0IHNwYW4gbXVsdGlwbGUgYnVmZmVycy4gIE5vdyB3b3JrIHdpdGggYm90aAotCWZpbGVzcmMgISBnZGtwaXhidWZkZWMgYW5kIHF0ZGVtdXggISBnZGtwaXhidWZkZWMuCi0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuaDoKLQkqIGV4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmg6IEZpeGVzIG5lZWRlZCBkdWUgdG8gcmVjZW50Ci0JdmlkZW8vdmlkZW8uaCBjaGFuZ2VzCi0JKiBleHQveHZpZC9nc3R4dmlkLmM6IChnc3RfeHZpZF9jc3BfdG9fY2Fwcyk6IHNhbWUKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19nZXQpLAotCShnc3RfdjRsbWpwZWdzcmNfYnVmZmVyX2ZyZWUpOiBVc2UgYnVmZmVyIGZyZWUgZnVuY3Rpb24gaW5zdGVhZAotCW9mIEdzdERhdGEgZnJlZSBmdW5jdGlvbi4KLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2dldCksIChnc3RfdjRsc3JjX2J1ZmZlcl9mcmVlKToKLQlzYW1lLgotCi0yMDA0LTAxLTEyICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIHN5cy92NGwyL2dzdHY0bDJlbGVtZW50LmM6IChnc3RfdjRsMmVsZW1lbnRfY2xhc3NfaW5pdCksCi0JKGdzdF92NGwyZWxlbWVudF9kaXNwb3NlKSwgKGdzdF92NGwyZWxlbWVudF9zZXRfcHJvcGVydHkpLAotCShnc3RfdjRsMmVsZW1lbnRfZ2V0X3Byb3BlcnR5KToKLQkqIHN5cy92NGwyL3Y0bDJfY2FsbHMuYzogKGdzdF92NGwyX3NldF9kZWZhdWx0cyksIChnc3RfdjRsMl9vcGVuKToKLQkgIGFkZCBub3JtLCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgcHJvcGVydGllcy4KLQkqIHN5cy92NGwyL2dzdHY0bDJ0dW5lci5jOgotCSAgZml4ZXMgZm9yIHR1bmVyIGludGVyZmFjZSBjaGFuZ2VzCi0JKiBzeXMvdjRsMi9nc3R2NGwyZWxlbWVudC5oOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOgotCSogc3lzL3Y0bDIvZ3N0djRsMnNyYy5oOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5jOgotCSogc3lzL3Y0bDIvdjRsMnNyY19jYWxscy5oOgotCSAgcmV3b3JrIHY0bDJzcmMgdG8gd29yayB3aXRoIHNhYTE3MzQgY2FyZHMgYW5kIGFsbG93IG1tYXBlZCBidWZmZXJzLgotCi0yMDA0LTAxLTEyICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC1saWJzL2dzdC90dW5lci90dW5lci5jOiAoZ3N0X3R1bmVyX2NsYXNzX2luaXQpLAotCShnc3RfdHVuZXJfZmluZF9ub3JtX2J5X25hbWUpLCAoZ3N0X3Y0bDJfZmluZF9jaGFubmVsX2J5X25hbWUpLAotCShnc3RfdHVuZXJfY2hhbm5lbF9jaGFuZ2VkKSwgKGdzdF90dW5lcl9ub3JtX2NoYW5nZWQpLAotCShnc3RfdHVuZXJfZnJlcXVlbmN5X2NoYW5nZWQpLCAoZ3N0X3R1bmVyX3NpZ25hbF9jaGFuZ2VkKToKLQkqIGdzdC1saWJzL2dzdC90dW5lci90dW5lci5oOgotCSAgR09iamVjdHMgYXJlbid0IGNvbnN0LgotCSAgQWRkIGZpbmRfYnlfbmFtZSBmdW5jdGlvbnMuCi0JICBBZGQgY2hlY2tzIHRvIF9jaGFuZ2VkIGZ1bmN0aW9ucy4KLQkqIHN5cy92NGwvZ3N0djRsdHVuZXIuYzogKGdzdF92NGxfdHVuZXJfZ2V0X2NoYW5uZWwpLAotCShnc3RfdjRsX3R1bmVyX2dldF9ub3JtKToKLQkgIEZpeGVzIGZvciBhYm92ZS4KLQotMjAwNC0wMS0xMiAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8uaDoKLQkgIEZpeCBjYXBzIHRlbXBsYXRlIG5hbWVzIHRvIGJlIHVuZGVyc3RhbmRhYmxlLgotCSAgUHJlZml4IGV2ZXJ5dGhpbmcgd2l0aCBHU1RfVklERU8uCi0JKiBleHQvYWFsaWIvZ3N0YWFzaW5rLmM6Ci0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6Ci0JKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmM6Ci0JKiBleHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWYuYzoKLQkqIGV4dC9oZXJtZXMvZ3N0Y29sb3JzcGFjZS5jOiAoZ3N0X2NvbG9yc3BhY2VfYmFzZV9pbml0KToKLQkqIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzogKHJhd19jYXBzX2ZhY3RvcnkpOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAocmF3X2NhcHNfZmFjdG9yeSk6Ci0JKiBleHQvbGliY2FjYS9nc3RjYWNhc2luay5jOgotCSogZXh0L2xpYnBuZy9nc3RwbmdlbmMuYzogKHJhd19jYXBzX2ZhY3RvcnkpOgotCSogZXh0L3NuYXBzaG90L2dzdHNuYXBzaG90LmM6Ci0JKiBleHQvc3dmZGVjL2dzdHN3ZmRlYy5jOgotCSogZXh0L3h2aWQvZ3N0eHZpZGRlYy5jOgotCSogZXh0L3h2aWQvZ3N0eHZpZGVuYy5jOgotCSogZ3N0L2NoYXJ0L2dzdGNoYXJ0LmM6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzoKLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzoKLQkqIGdzdC9mbHgvZ3N0Zmx4ZGVjLmM6IChnc3RfZmx4ZGVjX2xvb3ApOgotCSogZ3N0L2dvb20vZ3N0Z29vbS5jOgotCSogZ3N0L21lZGlhbi9nc3RtZWRpYW4uYzoKLQkqIGdzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmM6IChnc3RfbW9ub3Njb3BlX2luaXQpLAotCShnc3RfbW9ub3Njb3BlX3NyY2Nvbm5lY3QpLCAoZ3N0X21vbm9zY29wZV9jaGFpbik6Ci0JKiBnc3Qvb3ZlcmxheS9nc3RvdmVybGF5LmM6Ci0JKiBnc3Qvc21vb3RoL2dzdHNtb290aC5jOgotCSogZ3N0L3NtcHRlL2dzdHNtcHRlLmM6Ci0JKiBnc3Qvc3luYWVzdGhlc2lhL2dzdHN5bmFlc3RoZXNpYS5jOgotCSogZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYzoKLQkqIGdzdC92aWRlb2Ryb3AvZ3N0dmlkZW9kcm9wLmM6Ci0JKiBnc3QveTRtL2dzdHk0bWVuY29kZS5jOgotCSogc3lzL3FjYW0vZ3N0cWNhbXNyYy5jOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfcGFsZXR0ZV90b19jYXBzKToKLQkgIE1ha2UgdGhlbSB3b3JrIHdpdGggbmV3IHZpZGVvLmggZmlsZS4KLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfY2hhaW4pLAotCShnc3RfeGltYWdlc2lua19idWZmZXJfZnJlZSksIChnc3RfeGltYWdlc2lua19idWZmZXJfYWxsb2MpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jaGFpbiksCi0JKGdzdF94dmltYWdlc2lua19idWZmZXJfZnJlZSksIChnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKToKLQkgIE1ha2UgaXQgd29yayB3aXRoIG5ldyBidWZmZXIgYWxsb2NhdGlvbiBzeXN0ZW0uCi0KLTIwMDQtMDEtMTEgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6IChnc3RfZmZtcGVnY3NwX2NoYWluKTogRml4aW5nIHRoZQotCXBhZF9hbGxvY19idWZmZXIgaW1wbGVtZW50YXRpb24gdG8gdXNlIC0+c3JjcGFkCi0JKiBleHQvaGVybWVzL2dzdGNvbG9yc3BhY2UuYzogKGdzdF9jb2xvcnNwYWNlX2NoYWluKTogRml4aW5nIHRoZQotICAgICAgICBwYWRfYWxsb2NfYnVmZmVyIGltcGxlbWVudGF0aW9uIHRvIHVzZSAtPnNyY3BhZAotCSogZ3N0L3ZpZGVvc2NhbGUvZ3N0dmlkZW9zY2FsZS5jOiAoZ3N0X3ZpZGVvc2NhbGVfY2hhaW4pOiAgRml4aW5nIHRoZQotICAgICAgICBwYWRfYWxsb2NfYnVmZmVyIGltcGxlbWVudGF0aW9uIHRvIHVzZSAtPnNyY3BhZAotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194aW1hZ2VfbmV3KSwKLQkoZ3N0X3hpbWFnZXNpbmtfY2hhaW4pLCAoZ3N0X3hpbWFnZXNpbmtfYnVmZmVyX2ZyZWUpLAotCShnc3RfeGltYWdlc2lua19idWZmZXJfYWxsb2MpOiBOb3cgb25seSB1c2UgR1NUX0JVRkZFUl9QUklWQVRFIHRvIGtlZXAKLQlhIHJlZmVyZW5jZSB0byBldmVyeXRoaW5nIHdlIG5lZWQuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDogYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBzaW5rIGluIHRoZSBpbWFnZS4KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeHZpbWFnZV9uZXcpLAotCShnc3RfeHZpbWFnZXNpbmtfY2hhaW4pLCAoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9mcmVlKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyk6IE5vdyBvbmx5IHVzZSBHU1RfQlVGRkVSX1BSSVZBVEUgdG8ga2VlcAotICAgICAgICBhIHJlZmVyZW5jZSB0byBldmVyeXRoaW5nIHdlIG5lZWQuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5oOiBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIHNpbmsgaW4gdGhlIGltYWdlCi0KLTIwMDQtMDEtMTEgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOiByZW1vdmUgYm9ndXMgZ3N0X2NhcHNfaXNfZml4ZWQoKSB0ZXN0Ci0JKiBnc3QvZGVidWcvZWZlbmNlLmM6IChnc3RfZWZlbmNlX2NoYWluKSwgKGdzdF9mZW5jZWRfYnVmZmVyX25ldyksCi0JKGdzdF9mZW5jZWRfYnVmZmVyX2RlZmF1bHRfY29weSk6IEZpeCBmb3IgcmVuYW1lIG9mIGJ1ZmZlciBwcml2YXRlCi0Jc3RydWN0dXJlIG1lbWJlcnMuCi0JKiBnc3QvZWZmZWN0di9nc3R3YXJwLmM6IChnc3Rfd2FycHR2X3NldHVwKTogRG9uJ3QgcmVzZXQgdGhlIHRpbWUKLQl2YWx1ZSBkdXJpbmcgYSByZXNpemUvcmVuZWdvdGlhdGlvbi4KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5jOiAoZ3N0X3ZpZGVvZmlsdGVyX2NoYWluKTogdXNlCi0JZ3N0X3BhZF9hbGxvY19idWZmZXIoKTsKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19nZXQpLAotCShnc3RfdjRsbWpwZWdzcmNfYnVmZmVyX2ZyZWUpOiBGaXggZm9yIHJlbmFtZSBvZiBidWZmZXIgcHJpdmF0ZQotCXN0cnVjdHVyZSBtZW1iZXJzLgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfZ2V0KSwgKGdzdF92NGxzcmNfYnVmZmVyX2ZyZWUpOgotCUZpeCBmb3IgcmVuYW1lIG9mIGJ1ZmZlciBwcml2YXRlIHN0cnVjdHVyZSBtZW1iZXJzLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19jaGFpbiksCi0JKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9mcmVlKSwgKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9hbGxvYyk6Ci0JRml4IGZvciByZW5hbWUgb2YgYnVmZmVyIHByaXZhdGUgc3RydWN0dXJlIG1lbWJlcnMuCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2NoYWluKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2J1ZmZlcl9mcmVlKSwgKGdzdF94dmltYWdlc2lua19idWZmZXJfYWxsb2MpOgotCUZpeCBmb3IgcmVuYW1lIG9mIGJ1ZmZlciBwcml2YXRlIHN0cnVjdHVyZSBtZW1iZXJzLgotCi0yMDA0LTAxLTExICBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLQotCXJldmlld2VkIGJ5OiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmFtOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmM6IEdhbW1hIGNvcnJlY3Rpb24gZmlsdGVyLiAgTW9kaWZpZWQKLQlmcm9tIHRoZSBwYXRjaCBieSBkcyB0byBmaXQgaW4gd2l0aCByZWNlbnQgbWFrZV9maWx0ZXIgY2hhbmdlcy4KLQotMjAwNC0wMS0xMSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBjb25maWd1cmUuYWM6IEFkZGluZyBleGFtcGxlcy9zd2l0Y2gvTWFrZWZpbGUKLQkqIGV4YW1wbGVzL01ha2VmaWxlLmFtOiBBZGRpbmcgZXhhbXBsZXMvc3dpdGNoCi0JKiBleGFtcGxlcy9zd2l0Y2gvTWFrZWZpbGUuYW06IEFkZGluZyBzd2l0Y2hlciBleGFtcGxlLgotCSogZXhhbXBsZXMvc3dpdGNoL3N3aXRjaGVyLmM6IChnb3RfZW9zKSwgKGlkbGVfaXRlcmF0ZSksCi0JKHN3aXRjaF90aW1lciksIChtYWluKTogQWRkaW5nIGFuIGV4YW1wbGUgZGVtb25zdHJhdGluZyBzd2l0Y2ggdXNhZ2UKLQl3aXRoIDIgdmlkZW90ZXN0c3JjIHNob3dpbmcgZGlmZmVyZW50IHBhdHRlcm5zLgotCSogZ3N0L3N3aXRjaC9nc3Rzd2l0Y2guYzogKGdzdF9zd2l0Y2hfcmVxdWVzdF9uZXdfcGFkKSwKLQkoZ3N0X3N3aXRjaF9pbml0KTogRml4aW5nIHN3aXRjaCB3aXRoIHRoZSBuZXcgY2FwcyBzeXN0ZW0uCi0KLTIwMDQtMDEtMTEgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLmg6Ci0JICBGaXggMzJiaXQgY2Fwcy4gSXNzdWUgcmVtYWluaW5nOiBUaGUgbWFjcm8gbmFtZXMgYXJlIGNob3NlbiBwb29ybHkuCi0JICBUaGV5IHNob3VsZCBwcm9iYWJseSBiZSBsaWtlCi0JICBHU1RfVklERU9fUEFEX1RFTVBMQVRFX0NBUFNfe1JHQixCR1IsUkdCeCxCR1J4fS4KLQotMjAwNC0wMS0xMSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9sb29wX2hlYWRlciksCi0JKHF0ZGVtdXhfcGFyc2VfdHJhayk6Ci0JICBmaXggYXVkaW8gY2h1bmsgc2l6ZS90aW1lc3RhbXAgY2FsY3VsYXRpb24KLQotMjAwNC0wMS0xMSAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2NvZGVjbWFwLmM6IChnc3RfZmZtcGVnX2NvZGVjaWRfdG9fY2Fwcyk6Ci0JICBmaXggU1ZRMyBjYXBzCi0KLTIwMDQtMDEtMTEgIFN0ZXZlIEJha2VyICA8c3RldmVAc3RldmViYWtlci5vcmc+Ci0KLQkqIGdzdC9lZmZlY3R2L2dzdGFnaW5nLmM6IChnc3RfYWdpbmd0dl9nZXRfdHlwZSksCi0JKGdzdF9hZ2luZ3R2X2Jhc2VfaW5pdCksIChnc3RfYWdpbmd0dl9jbGFzc19pbml0KSwKLQkoZ3N0X2FnaW5ndHZfaW5pdCksIChnc3RfYWdpbmd0dl9zZXR1cCksIChnc3RfYWdpbmd0dl9yZ2IzMiksCi0JKGdzdF9hZ2luZ3R2X3NldF9wcm9wZXJ0eSksIChnc3RfYWdpbmd0dl9nZXRfcHJvcGVydHkpOgotICAgICAgICBQb3J0IGFnaW5nVFYgdG8gdmlkZW9maWx0ZXIKLQotMjAwNC0wMS0wOSAgSnVsaWVuIE1PVVRURSA8anVsaWVuQG1vdXR0ZS5uZXQ+Ci0KLQkqIGV4dC9oZXJtZXMvZ3N0Y29sb3JzcGFjZS5jOiAoZ3N0X2NvbG9yc3BhY2VfY2hhaW4pOgotCUltcGxlbWVudGluZyBnc3RfcGFkX2FsbG9jX2J1ZmZlciB0byB1c2Ugb3B0aW1pemVkIGJ1ZmZlciBhbGxvY2F0aW9uLgotCi0yMDA0LTAxLTA5ICBKdWxpZW4gTU9VVFRFIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6IChnc3RfZmZtcGVnY3NwX2NoYWluKToKLQlJbXBsZW1lbnRpbmcgZ3N0X3BhZF9hbGxvY19idWZmZXIgdG8gdXNlIG9wdGltaXplZCBidWZmZXIgYWxsb2NhdGlvbi4KLQkqIGdzdC1saWJzL2dzdC94b3ZlcmxheS94b3ZlcmxheS5jOgotCShnc3RfeF9vdmVybGF5X2dvdF9kZXNpcmVkX3NpemUpOiBVcGRhdGluZyBkb2MgZm9yIHRoZSB4aWQgYmVpbmcgMC4KLQkqIGdzdC92aWRlb3NjYWxlL2dzdHZpZGVvc2NhbGUuYzogKGdzdF92aWRlb3NjYWxlX2NoYWluKToKLQlJbXBsZW1lbnRpbmcgZ3N0X3BhZF9hbGxvY19idWZmZXIgdG8gdXNlIG9wdGltaXplZCBidWZmZXIgYWxsb2NhdGlvbi4KLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6IChnc3RfdmlkZW90ZXN0c3JjX2dldCk6Ci0JSW1wbGVtZW50aW5nIGdzdF9wYWRfYWxsb2NfYnVmZmVyIHRvIHVzZSBvcHRpbWl6ZWQgYnVmZmVyIGFsbG9jYXRpb24uCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2NoYWluKSwKLQkoZ3N0X3hpbWFnZXNpbmtfYnVmZmVyX2ZyZWUpLCAoZ3N0X3hpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6IEltcGxlbWVudGluZwotCXRoZSBidWZmZXJhbGxvY19mdW5jdGlvbiB0byByZXBsYWNlIGJ1ZmZlcnBvb2xzLCBmaXhpbmcgdGhlIFhPdmVybGF5Ci0JaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSB4aWQgYmVpbmcgMCBhbmQgZml4IHNvbWUgYnVncwotCXRyaWdnZXJlZCBieSBCZW5qYW1pbidzIHRlc3RjYXNlLgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19jaGFpbiksCi0JKGdzdF94dmltYWdlc2lua19idWZmZXJfZnJlZSksIChnc3RfeHZpbWFnZXNpbmtfYnVmZmVyX2FsbG9jKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3NldF94d2luZG93X2lkKSwgKGdzdF94dmltYWdlc2lua19pbml0KTogSW1wbGVtZW50aW5nCi0JdGhlIGJ1ZmZlcmFsbG9jX2Z1bmN0aW9uIHRvIHJlcGxhY2UgYnVmZmVycG9vbHMsIGZpeGluZyB0aGUgWE92ZXJsYXkKLQlpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIHhpZCBiZWluZyAwIGFuZCBmaXggc29tZSBidWdzCi0JdHJpZ2dlcmVkIGJ5IEJlbmphbWluJ3MgdGVzdGNhc2UuCi0KLTIwMDQtMDEtMDkgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZXh0L2xpYnJmYi9nc3RyZmJzcmMuYzogIEhhY2tpbmcuICBBZGRlZCBhY3R1YWwgZGVjb2RpbmcgYW5kCi0JbW91c2UgcG9pbnRlciBldmVudHMuICBJdCB3b3Jrcy4KLQotMjAwNC0wMS0wOSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2RpdngvZ3N0ZGl2eGVuYy5jOiAoZ3N0X2RpdnhlbmNfaW5pdCk6Ci0JICBVc2UgZXhwbGljaXQgY2FwcyAtIGZpeCBjYXBzbmVnby4KLQkqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzoKLQkqIGV4dC94dmlkL2dzdHh2aWRlbmMuYzoKLQkgIFJlbW92ZSBtYWNyby1pbnNpZGUtbWFjcm8gd2hpY2ggY2F1c2VkIGNvbXBpbGUgZXJyb3JzLgotCSogZ3N0LWxpYnMvZ3N0L3JpZmYvcmlmZi1yZWFkLmM6IChnc3RfcmlmZl9yZWFkX2hlYWRlcik6Ci0JICBFcnJvciBvdXQgaWYgaXQncyBub3QgYSBSSUZGIGZpbGUuIEVsc2Ugd2UgZXJyb3Igb3V0IHdpdGhvdXQKLQkgIGdzdF9lbGVtZW50X2Vycm9yKCkgd2hpY2ggaXMgbm90IGdvb2QuLi4KLQotMjAwNC0wMS0wOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2VuYy5jOiAoZ3N0X2ZmbXBlZ2VuY19jb25uZWN0KToKLQlGaXggcGFkX2xpbmsgZnVuY3Rpb24gdG8gaGFuZGxlIGZvcm1hdHMgdGhhdCBmZm1wZWcgcmV0dXJucwotCWFzIG11bHRpcGxlIGNhcHMgc3RydWN0dXJlcy4KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZpbHRlci5jOiAoZ3N0X3ZpZGVvZmlsdGVyX2NoYWluKToKLQlPbmx5IGNvbXBsYWluIGlmIHNvdXJjZSBidWZmZXIgaXMgX3NtYWxsZXJfIHRoYW4gZXhwZWN0ZWQuCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9pbml0KSwKLQkoZ3N0X3ZpZGVvc2NhbGVfaGFuZGxlX3NyY19ldmVudCk6IFJlc2l6ZSBuYXZpZ2F0aW9uIGV2ZW50cwotCXdoZW4gcGFzc2luZyB0aGVtIHVwc3RyZWFtLgotCSogZ3N0L3ZpZGVvdGVzdHNyYy9nc3R2aWRlb3Rlc3RzcmMuYzoKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmg6Ci0JKiBnc3QvdmlkZW90ZXN0c3JjL3ZpZGVvdGVzdHNyYy5jOgotCSogZ3N0L3ZpZGVvdGVzdHNyYy92aWRlb3Rlc3RzcmMuaDoKLQlSZXdyaXRlIG1hbnkgb2YgdGhlIGJ1ZmZlciBwYWludGluZyBmdW5jdGlvbnMgdG8gaGFuZGxlIG9kZAotCXNpemVzIChmb3IgbWFueSBmb3JtYXRzLCBzaXplJTQhPTAgb3Igc2l6ZSU4IT0wKS4gIE1vc3QgaGF2ZQotCWJlZW4gdmVyaWZpZWQgdG8gd29yayB3aXRoIG15IHZpZGVvIGNhcmQuCi0JKiB0ZXN0c3VpdGUvZ3N0LWxpbnQ6ICBBZGQgY2hlY2sgZm9yIGVsZW1lbnRzIGNhbGxpbmcKLQlnc3RfcGFkX2dldF9jYXBzKCkgaW5zdGVhZCBvZiBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMoKS4KLQotMjAwNC0wMS0wOCAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9kcm9wL2dzdHZpZGVvZHJvcC5jOiAoZ3N0X3ZpZGVvZHJvcF9nZXRjYXBzKSwKLQkoZ3N0X3ZpZGVvZHJvcF9saW5rKSwgKGdzdF92aWRlb2Ryb3BfaW5pdCk6IEZpeCBuZWdvdGlhdGlvbi4KLQotMjAwNC0wMS0wOCAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXZlbnRzKTogQQotCWNvbmZpZ3VyZSBldmVudCBpcyBub3QgZW1pdGluZyB0aGUgZGVzaXJlZCBzaXplIHNpZ25hbC4gVGhhdCBmaXhlcwotCWFzcGVjdCByYXRpbyBpc3N1ZXMgd2l0aCBnc3QtcGxheWVyLgotCi0yMDA0LTAxLTA4ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbWVkaWFuL2dzdG1lZGlhbi5jOiAoZ3N0X21lZGlhbl9saW5rKSwgKGdzdF9tZWRpYW5faW5pdCk6Ci0JICBGaXggY2Fwc25lZ28uCi0KLTIwMDQtMDEtMDggIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXh0L3NkbC9zZGx2aWRlb3NpbmsuYzogKGdzdF9zZGx2aWRlb3NpbmtfY3JlYXRlKTogVXNpbmcgWE92ZXJsYXkKLQlwdWJsaWMgbWV0aG9kIHRvIGZpcmUgc2l6ZSBzaWduYWwuCi0KLTIwMDQtMDEtMDcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9NYWtlZmlsZS5hbTogQWRkaW5nIHRoZSBpbnRlcmZhY2UgbGlicmFyeS4KLQkqIGdzdC1saWJzL2dzdC9wbGF5L01ha2VmaWxlLmFtOiBBZGRpbmcgdGhlIGludGVyZmFjZSBsaWJyYXJ5LgotCSogZ3N0LWxpYnMvZ3N0L3BsYXkvZ3N0cGxheS5jOiAoZ3N0X3BsYXlfc2V0X3ZpZGVvX3NpbmspOiBDb25uZWN0aW5nIHRvIAl0aGUgWE92ZXJsYXkgc2l6ZSBzaWduYWwgaW5zdGVhZCBvZiBHc3RWaWRlb1NpbmsuCi0JKiBnc3QtbGlicy9nc3QvcGxheS9nc3RwbGF5Lmg6IEluY2x1ZGluZyB0aGUgWE92ZXJsYXkgaW50ZXJmYWNlIHRvIGNoZWNrCi0JR1NUX0lTX1hfT1ZFUkxBWSBiZWZvcmUgc2lnbmFsIGNvbm5lY3QuCi0JKiBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmM6IChnc3RfdmlkZW9zaW5rX2NsYXNzX2luaXQpOgotCVJlbW92aW5nIHRoZSBoYXZlX3ZpZGVvX3NpemUgc2lnbmFsLgotCSogZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oOiBSZW1vdmluZyB0aGUgaGF2ZV92aWRlb19zaXplIHNpZ25hbAotCWFuZCBhc3NvY2lhdGVkIHB1YmxpYyBtZXRob2QuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXZlbnRzKSwKLQkoZ3N0X3hpbWFnZXNpbmtfc2lua2Nvbm5lY3QpOiBVc2luZyBYT3ZlcmxheSBwdWJsaWMgbWV0aG9kIHRvIGZpcmUgc2l6ZQotCXNpZ25hbC4KLQkqIHN5cy94dmlkZW8veHZpZGVvc2luay5jOiAoZ3N0X3h2aWRlb3Npbmtfc2lua2Nvbm5lY3QpLAotCShnc3RfeHZpZGVvc2lua194d2luZG93X25ldyk6IFVzaW5nIFhPdmVybGF5IHB1YmxpYyBtZXRob2QgdG8gZmlyZSBzaXplCi0gICAgICAgIHNpZ25hbC4KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfc2lua2Nvbm5lY3QpOgotCVVzaW5nIFhPdmVybGF5IHB1YmxpYyBtZXRob2QgdG8gZmlyZSBzaXplIHNpZ25hbC4KLQotMjAwNC0wMS0wNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW06Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW90ZW1wbGF0ZS5jOgotCSogZ3N0L3ZpZGVvZmlsdGVyL21ha2VfZmlsdGVyOgotCUNyZWF0ZSBnc3R2aWRlb2V4YW1wbGUuYyBpbiBhIHNyY2RpciE9YnVpbGRkaXIgZnJpZW5kbHkgd2F5LgotCUNvbnZlcnQgbWFrZV9maWx0ZXIgdG8gL2Jpbi9zaCBzY3JpcHQuCi0KLTIwMDQtMDEtMDcgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIGdzdC9tb2RwbHVnL2dzdG1vZHBsdWcuY2M6IGZpeCBlbGVtZW50IGRlc2NyaXB0aW9uCi0KLTIwMDQtMDEtMDcgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKGdvdF90aW1lX3RpY2spLCAoZ290X3N0cmVhbV9sZW5ndGgpLAotCShnb3RfdmlkZW9fc2l6ZSk6IEFkZGluZyBzb21lIG5ldyBsaW5lcyBpbiBnX3ByaW50IGNhbGxzLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194d2luZG93X25ldyksCi0JKGdzdF94aW1hZ2VzaW5rX3h3aW5kb3dfZGVzdHJveSksIChnc3RfeGltYWdlc2lua194d2luZG93X3Jlc2l6ZSksCi0JKGdzdF94aW1hZ2VzaW5rX2hhbmRsZV94ZXZlbnRzKSwgKGdzdF94aW1hZ2VzaW5rX2ZpeGF0ZSksCi0JKGdzdF94aW1hZ2VzaW5rX3Npbmtjb25uZWN0KSwgKGdzdF94aW1hZ2VzaW5rX2NoYW5nZV9zdGF0ZSksCi0JKGdzdF94aW1hZ2VzaW5rX2NoYWluKSwgKGdzdF94aW1hZ2VzaW5rX2J1ZmZlcl9uZXcpLAotCShnc3RfeGltYWdlc2lua19zZXRfeHdpbmRvd19pZCksIChnc3RfeGltYWdlc2lua19nZXRfZGVzaXJlZF9zaXplKToKLQlDb21wbGV0ZSBjb2RlIHJldmlldywgcmV2ZXJ0aW5nIHNvbWUgc3R1ZmYgaSBkaXNhZ3JlZSB3aXRoLCBhZGRpbmcKLQlzb21lIGZpeGVzIDogdGltZSBzeW5jaHJvbml6YXRpb24gb24gaW52YWxpZCB0aW1lc3RhbXBzLCByZW5lZ290aWF0aW9uCi0Jb2YgcHJpdmF0ZSB3aW5kb3cuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfeHdpbmRvd19kZXN0cm95KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3h3aW5kb3dfcmVzaXplKSwgKGdzdF94dmltYWdlc2lua19oYW5kbGVfeGV2ZW50cyksCi0JKGdzdF94dmltYWdlc2lua19nZXRfeHZfc3VwcG9ydCksIChnc3RfeHZpbWFnZXNpbmtfeGNvbnRleHRfZ2V0KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX2ZpeGF0ZSksIChnc3RfeHZpbWFnZXNpbmtfc2lua2Nvbm5lY3QpLAotCShnc3RfeHZpbWFnZXNpbmtfY2hhbmdlX3N0YXRlKSwgKGdzdF94dmltYWdlc2lua19jaGFpbiksCi0JKGdzdF94dmltYWdlc2lua19idWZmZXJfbmV3KSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX25hdmlnYXRpb25fc2VuZF9ldmVudCksCi0JKGdzdF94dmltYWdlc2lua19zZXRfeHdpbmRvd19pZCksCi0JKGdzdF94dmltYWdlc2lua19nZXRfZGVzaXJlZF9zaXplKSwKLQkoZ3N0X3h2aW1hZ2VzaW5rX3hvdmVybGF5X2luaXQpOiBDb21wbGV0ZSBjb2RlIHJldmlldywgcmV2ZXJ0aW5nIHNvbWUKLQlzdHVmZiBpIGRpc2FncmVlIHdpdGgsIGFkZGluZyBzb21lIGZpeGVzIDogUmVuZWdvdGlhdGlvbiBvZiBwcml2YXRlCi0Jd2luZG93LCBpbXBsZW1lbnRpbmcgZ2V0X2Rlc2lyZWRfc2l6ZS4KLQotMjAwNC0wMS0wNyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2F1ZGlvZmlsZS9nc3RhZnNpbmsuYzogKGdzdF9hZnNpbmtfaW5pdCksIChnc3RfYWZzaW5rX2NoYWluKSwKLQkoZ3N0X2Fmc2lua19oYW5kbGVfZXZlbnQpOgotCSogZXh0L2pwZWcvZ3N0anBlZ2VuYy5jOiAoZ3N0X2pwZWdlbmNfaW5pdCk6Ci0JKiBnc3QvYXZpL2dzdGF2aW11eC5jOiAoZ3N0X2F2aW11eF9yZXF1ZXN0X25ld19wYWQpOgotCSogc3lzL2R4cjMvZHhyM2F1ZGlvc2luay5jOiAoZHhyM2F1ZGlvc2lua19pbml0KToKLQkqIHN5cy9keHIzL2R4cjNzcHVzaW5rLmM6IChkeHIzc3B1c2lua19pbml0KToKLQkqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuYzogKGR4cjN2aWRlb3NpbmtfaW5pdCk6Ci0JICBGaXggZm9yIGluc3RhbnRpYXRlLXRlc3QgKHNlZSBjb3JlKS4gQWxzbyByZW1vdmUgZGVhZCBjb2RlIGZyb20KLQkgIGpwZWdlbmMgKHdoaWNoIHN0aWxsIG5lZWRzIGZpeGluZywgYnV0IHRoYXQncyBsb3dlciBvbiBteSBUT0RPCi0JICBsaXN0Li4uKS4KLQkqIHN5cy92NGwyL2dzdHY0bDJzcmMuYzogKGdzdF92NGwyc3JjX2dldGNhcHMpOgotCSAgTmV2ZXIgcmV0dXJuIE5VTEwgYXMgY2Fwcy4KLQotMjAwNC0wMS0wNyAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQvTWFrZWZpbGUuYW06Ci0JKiBleHQvbGlicmZiL01ha2VmaWxlLmFtOgotCSogZXh0L2xpYnJmYi9nc3RyZmJzcmMuYzoKLQlOZXcgc291cmNlIHBsdWdpbiBiYXNlZCBvbiBsaWJyZmItMC4xLiAgUkZCIChyZW1vdGUgZnJhbWVidWZmZXIpCi0JaXMgdGhlIHByb3RvY29sIHVzZWQgYnkgVk5DLgotCi0yMDA0LTAxLTA3ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGdzdC92aWRlb2ZpbHRlci9nc3R2aWRlb3RlbXBsYXRlLmM6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW90ZW1wbGF0ZS5oOgotCSogZ3N0L3ZpZGVvZmlsdGVyL21ha2VfZmlsdGVyOgotCU1lcmdlIHZpZGVvdGVtcGxhdGUgaGVhZGVyIGludG8gc291cmNlIGZpbGUuCi0JKiBnc3QvZWZmZWN0di9NYWtlZmlsZS5hbToKLQkqIGdzdC9lZmZlY3R2L2dzdGVmZmVjdHYuYzogKHBsdWdpbl9pbml0KToKLQkqIGdzdC9lZmZlY3R2L2dzdHdhcnAuYzoKLQlNYWtlIHdhcnBUViBhIHN1YmNsYXNzIG9mIHZpZGVvZmlsdGVyLgotCi0yMDA0LTAxLTA3ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9tYWQvZ3N0aWQzdGFnLmM6IChnc3RfbWFkX2lkM190b190YWdfbGlzdCk6Ci0JICBBZGQgZ3VhcmQgYWdhaW5zdCBpbnZhbGlkIHV0Zi04IGNvbnZlcnNpb25zIGluIG1hZC4gSnVzdCBpbiBjYXNlLgotCi0yMDA0LTAxLTA3ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3Npbmtfc2lua19maXhhdGUpOgotCSAgRml4IGZvciBidWcgc2hvd24gYnkgcG9pc29uaW5nCi0KLTIwMDQtMDEtMDYgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19nZXQpLAotCShnc3RfdjRsbWpwZWdzcmNfYnVmZmVyX2ZyZWUpOgotCSogc3lzL3Y0bC9nc3R2NGxzcmMuYzogKGdzdF92NGxzcmNfcGFsZXR0ZV90b19jYXBzKSwKLQkoZ3N0X3Y0bHNyY19zcmNjb25uZWN0KSwgKGdzdF92NGxzcmNfZ2V0Y2FwcyksIChnc3RfdjRsc3JjX2dldCksCi0JKGdzdF92NGxzcmNfYnVmZmVyX2ZyZWUpOgotCSAgRml4IGZvciByZW1vdmVkIGJ1ZmZlcnBvb2xzLgotCi0yMDA0LTAxLTA3ICBKYW4gU2NobWlkdCAgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0KLQkqIGV4dC9kdi9nc3RkdmRlYy5jOiAoZ3N0X2R2ZGVjX2xvb3ApOgotCUZpeCBjYXBzIG5lZ290aWF0aW9uLgotCi0JKiBleHQvZHZkbmF2L2R2ZG5hdnNyYy5jOiAoZHZkbmF2c3JjX2NsYXNzX2luaXQpLAotCShkdmRuYXZzcmNfdXBkYXRlX2J1dHRvbmluZm8pLCAoZHZkbmF2c3JjX2dldCksCi0JKGR2ZG5hdnNyY19nZXRfZXZlbnRfbWFzayksIChkdmRuYXZfaGFuZGxlX25hdmlnYXRpb25fZXZlbnQpLAotCShkdmRuYXZzcmNfZXZlbnQpOgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6Ci0JKiBnc3QtbGlicy9nc3QvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmM6Ci0JKGdzdF9uYXZpZ2F0aW9uX3NlbmRfa2V5X2V2ZW50KSwgKGdzdF9uYXZpZ2F0aW9uX3NlbmRfbW91c2VfZXZlbnQpOgotCSogZ3N0LWxpYnMvZ3N0L25hdmlnYXRpb24vbmF2aWdhdGlvbi5oOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6IChnc3RfbXBlZ19kZW11eF9oYW5kbGVfc3JjX2V2ZW50KToKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfaGFuZGxlX3hldmVudHMpOgotCSogc3lzL3h2aW1hZ2UveHZpbWFnZXNpbmsuYzogKGdzdF94dmltYWdlc2lua19oYW5kbGVfeGV2ZW50cyk6Ci0JU3VwZXItc2ltcGxlIGZpcnN0IHZlcnNpb24gb2YgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cy4gQ2xpY2tpbmcKLQlvbiBhIERWRCBtZW51IG5vdyB3b3JrcywgYWx0aG91Z2ggaXQgbWF5IG5vdCB0YWtlIHlvdSB3aGVyZSB5b3UKLQlleHBlY3RlZC4KLQotCSogZ3N0L3NpbmUvZ3N0c2luZXNyYy5jOiAoZ3N0X3NpbmVzcmNfc3JjX2ZpeGF0ZSk6Ci0JKiBnc3QvdmlkZW90ZXN0c3JjL2dzdHZpZGVvdGVzdHNyYy5jOgotCShnc3RfdmlkZW90ZXN0c3JjX3NyY19maXhhdGUpOgotCVRoZXNlIGZpeGF0ZSBmdW5jdGlvbnMgd2VyZSBicm9rZW4gLSB0aGV5IG5ldmVyIGFjdHVhbGx5Ci0JZml4YXRlZCA6KQotCi0yMDA0LTAxLTA2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvc2hvdXQvZ3N0c2hvdXQuYzogKGdzdF9pY2VjYXN0c2VuZF9iYXNlX2luaXQpLAotCShnc3RfaWNlY2FzdHNlbmRfaW5pdCk6Ci0JICBmaXggZm9yIG5ldyBjYXBzIHN5c3RlbS4KLQkqIGdzdC1saWJzL2dzdC9taXhlci9taXhlcnRyYWNrLmg6Ci0JKiBzeXMvb3NzL2dzdG9zc21peGVyLmM6IChnc3Rfb3NzbWl4ZXJfYnVpbGRfbGlzdCk6Ci0JICBBZGQgJ21hc3RlciB0cmFjaycgZmxhZyAoZm9yIHRvb2xzIGxpa2UgQUNNRSB0aGF0IG9ubHkgd2FudCB0bwotCSAgY2hhbmdlIHRoZSBtYWluIHZvbHVtZSkuCi0KLTIwMDQtMDEtMDcgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZXh0L3h2aWQvZ3N0eHZpZC5jOiAoZ3N0X3h2aWRfc3RydWN0dXJlX3RvX2NzcCksCi0JKGdzdF94dmlkX2NzcF90b19jYXBzKToKLQkqIGV4dC94dmlkL2dzdHh2aWRkZWMuYzogKGdzdF94dmlkZGVjX3NyY19nZXRjYXBzKToKLQkqIGV4dC94dmlkL2dzdHh2aWRlbmMuYzoKLQlpZmRlZiBvdXQgQVJHQiB0eXBlIHdoZW4gaXQgaXNuJ3QgYXZhaWxhYmxlCi0JaW4geHZpZGNvcmUgMS4wLjBiZXRhMgotCi0yMDA0LTAxLTA2ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVncGFyc2UuYzogKGdzdF9tcGVnX3BhcnNlX2xvb3ApOgotCSAgV2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGEgbmV3IFNDUiByaWdodCBpbiB0aGUgZmlyc3QgYnVmZmVyIGFmdGVyCi0JICBhIHNlZWsgKHNvIGluIHRoZSBzYW1lIGN5Y2xlIHRoYXQgaGFuZGxlcyB0aGUgZGlzY29udCksIHdlIHNob3VsZAotCSAgaGFuZGxlIHRoZSBidWZmZXIgaW5zdGVhZCBvZiB1bnJlZmZpbmcgaXQsIGVsc2Ugd2UgbG9zZSBkYXRhLgotCi0yMDA0LTAxLTA2ICBJYWluIDxpYWluQHByZXR0eXBlb3BsZS5vcmc+Ci0KLQkqIGdzdC9pbnRmbG9hdC9nc3RpbnQyZmxvYXQuYyAoZ3N0X2ludDJmbG9hdF9saW5rKTogU2V0IHRoZQotCSAgYnVmZmVyLWZyYW1lcyBjYXBzIHRvby4KLQotCSogZ3N0L29uZXRvbi9nc3RvbmV0b24uYyAoZ3N0X29uZXRvbl9zaW5rX2Nvbm5lY3QpOiBPbmx5IGNyZWF0ZSB0aGUgbmV3Ci0JICBjYXBzIHRoYXQgd2UgbmVlZCwgZG9uJ3QgZGVzdHJveSB0aGVtIGFsbCBhbmQgcmVidWlsZCB0aGVtLiBBbmQgd2hlbgotCSAgY3JlYXRpbmcgc3JjIHBhZHMsIHVzZSB0aGUgc3JjIHBhZCB0ZW1wbGF0ZSByYXRoZXIgdGhhbiB0aGUgc2luay4uLgotCi0yMDA0LTAxLTA1ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVnZGVtdXguYzogKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3N5c2hlYWQpOgotCSAgQWRkIHBhZCB0byBlbGVtZW50ICphZnRlciogc2V0dGluZyBmdW5jdGlvbnMgc3VjaCBhcyBldmVudCBoYW5kbGVyLgotCSAgV2l0aG91dCB0aGlzLCB0aGUgc2NoZWR1bGVyIChvcHQpIHdpbGwgbGluayBwYWRzLCBzZXQgdGhlIGV2ZW50Ci0JICBoYW5kbGVyIGZyb20gdGhlIGRlZmF1bHQgZXZlbnQgZnVuY3Rpb24gKGRpc3BhdGNoZXIgaW4gZ3N0cGFkLmMpCi0JICBhbmQgKmFmdGVyKiB0aGF0LCB3ZSB3aWxsIHNldCBvdXIgb3duIGV2ZW50IGZ1bmN0aW9uLCB3aGljaCB3aWxsCi0JICB0aHVzIG5ldmVyIGJlIHVzZWQgKGFuZCB0aHVzIG1wZWdkZW11eCBkb2Vzbid0IGhhbmRsZSBldmVudHMpLgotCi0yMDA0LTAxLTA0ICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQlGaXggdGhlIGZpeGF0ZSBmdW5jdGlvbnMgdG8gaGFuZGxlIG5ldyBwcm90b3R5cGU6Ci0JKiBnc3Qvc2luZS9nc3RzaW5lc3JjLmM6IChnc3Rfc2luZXNyY19zcmNfZml4YXRlKToKLQkqIGdzdC92aWRlb3Rlc3RzcmMvZ3N0dmlkZW90ZXN0c3JjLmM6Ci0JKGdzdF92aWRlb3Rlc3RzcmNfc3JjX2ZpeGF0ZSk6Ci0JKiBzeXMvb3NzL2dzdG9zc3NpbmsuYzogKGdzdF9vc3NzaW5rX3NpbmtfZml4YXRlKToKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfZml4YXRlKToKLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfZml4YXRlKToKLQotMjAwNC0wMS0wNCAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuaDoKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfeHdpbmRvd19uZXcpLAotCShnc3RfeGltYWdlc2lua194d2luZG93X2Rlc3Ryb3kpLCAoZ3N0X3hpbWFnZXNpbmtfc2lua2Nvbm5lY3QpLAotCShnc3RfeGltYWdlc2lua19jaGFuZ2Vfc3RhdGUpLCAoZ3N0X3hpbWFnZXNpbmtfc2V0X3h3aW5kb3dfaWQpLAotCShnc3RfeGltYWdlc2lua194b3ZlcmxheV9pbml0KToKLQkgIGFzc29ydGVkIGZpeGVzIHRvIG1ha2UgKHJlKWVtYmVkZGluZyB3b3JrCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3Npbmtjb25uZWN0KSwKLQkoZ3N0X3hpbWFnZXNpbmtfZ2V0X2Rlc2lyZWRfc2l6ZSk6Ci0JICBpbXBsZW1lbnQgZGVzaXJlZCBzaXplIGFkZGl0aW9ucyB0byBYT3ZlcmxheQotCi0yMDA0LTAxLTA0ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC1saWJzL2dzdC94b3ZlcmxheS94b3ZlcmxheS5jOiAoZ3N0X3hfb3ZlcmxheV9iYXNlX2luaXQpLAotCShnc3RfeF9vdmVybGF5X2dvdF94d2luZG93X2lkKSwgKGdzdF94X292ZXJsYXlfZ2V0X2Rlc2lyZWRfc2l6ZSksCi0JKGdzdF94X292ZXJsYXlfZ290X2Rlc2lyZWRfc2l6ZSk6Ci0JKiBnc3QtbGlicy9nc3QveG92ZXJsYXkveG92ZXJsYXkuaDoKLQkgIEFkZCBvcHRpb25hbCAiZGVzaXJlZCBzaXplIiBzaWduYWwgYW5kIHF1ZXJ5aW5nLgotCi0yMDA0LTAxLTA0ICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXApOgotCSAgRml4IEVCTUwtbGFjZWQgYmxvY2sgcGFyc2luZy4gRGlmZnMgYXJlIHJlbGF0aXZlIHRvIHByZXZpb3VzCi0JICBsYWNlLCBub3QgdGhlIGZpcnN0IGxhY2UuIFRoYW5rcyB0byBNb3N1IGZyb20gdGhlIE1hdHJvc2thCi0JICB0ZWFtIGZvciBkZXRlY3RpbmcgdGhpcy4KLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2luaXQpLAotCShnc3Rfd2F2cGFyc2VfcGFyc2VfZm10KSwgKGdzdF93YXZwYXJzZV9nZXRjYXBzKSwKLQkoZ3N0X3dhdnBhcnNlX2hhbmRsZV9zaW5rX2V2ZW50KSwgKGdzdF93YXZwYXJzZV9sb29wKSwKLQkoZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSk6Ci0JKiBnc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaDoKLQkgIFF1aWNrZml4IGZvciBjYXBzbmVnby4KLQotMjAwNC0wMS0wNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3dhdmVuYy9nc3R3YXZlbmMuYzogKHNldF9wcm9wZXJ0eSksIChnc3Rfd2F2ZW5jX2luaXQpOgotCSAgRml4IGluZGVudGluZywgZml4IHBhZCBjcmVhdGlvbi4KLQotMjAwNC0wMS0wNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L3h2aWQvZ3N0eHZpZGRlYy5jOiAoZ3N0X3h2aWRkZWNfaW5pdCksCi0JKGdzdF94dmlkZGVjX3NyY19nZXRjYXBzKSwgKGdzdF94dmlkZGVjX3NyY19saW5rKSwKLQkoZ3N0X3h2aWRkZWNfc2lua19saW5rKToKLQkgIEltcGxlbWVudCBzcmNfZ2V0Y2FwcygpIHNvIHByb3BlciBzaXplIGNhcHMgaXMgbmVnb3RpYXRlZC4KLQotMjAwNC0wMS0wNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jOiAoZ3N0X2ZsYWNkZWNfbG9vcCk6Ci0JICBGaW5pc2ggZmxhYyBkZWNvZGVyIG9uIEVPUy4gU2VlICMxMTYxNzguCi0KLTIwMDQtMDEtMDQgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jOiAoZ3N0X21hdHJvc2thX2RlbXV4X3NyY19nZXRjYXBzKSwKLQkoZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0pOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oOgotCSAgQWRkIGdldGNhcHMoKSBmdW5jdGlvbiB0byBmaXggY2Fwc25lZ28uLi4KLQotMjAwNC0wMS0wNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ2RlbXV4LmM6IChnc3RfbXBlZ19kZW11eF9wYXJzZV9zeXNoZWFkKSwKLQkoZ3N0X21wZWdfZGVtdXhfcGFyc2VfcGFja2V0KSwgKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3Blcyk6Ci0JKiBnc3QvbXBlZ3N0cmVhbS9nc3RtcGVncGFyc2UuYzogKGdzdF9tcGVnX3BhcnNlX3BhcnNlX3BhY2toZWFkKToKLQkgIEZpeCBtb3JlIGludGVnZXIgb3ZlcmZsb3dzLiBBZ2Fpbiwgc2VlICMxMjY5NjcuCi0KLTIwMDQtMDEtMDMgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGV4dC9tcGVnMmRlYy9nc3RtcGVnMmRlYy5jOgotCSAgQWRkIHN1cHBvcnQgZm9yIG1wZWcyZGVjLTAuNC4wIChyZWxlYXNlZCB0d28gd2Vla3MgYWdvKS4gU2VlCi0JICAjMTMwNDE2LgotCi0yMDA0LTAxLTAzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBjb25maWd1cmUuYWM6Ci0JKiBleHQveHZpZC9nc3R4dmlkLmM6IChnc3RfeHZpZF9pbml0KSwgKGdzdF94dmlkX2Vycm9yKSwKLQkoZ3N0X3h2aWRfc3RydWN0dXJlX3RvX2NzcCksIChnc3RfeHZpZF9jc3BfdG9fY2Fwcyk6Ci0JKiBleHQveHZpZC9nc3R4dmlkLmg6Ci0JKiBleHQveHZpZC9nc3R4dmlkZGVjLmM6IChnc3RfeHZpZGRlY19jbGFzc19pbml0KSwKLQkoZ3N0X3h2aWRkZWNfaW5pdCksIChnc3RfeHZpZGRlY19zZXR1cCksIChnc3RfeHZpZGRlY19jaGFpbiksCi0JKGdzdF94dmlkZGVjX3NyY19saW5rKSwgKGdzdF94dmlkZGVjX3NpbmtfbGluayksCi0JKGdzdF94dmlkZGVjX2NoYW5nZV9zdGF0ZSk6Ci0JKiBleHQveHZpZC9nc3R4dmlkZGVjLmg6Ci0JKiBleHQveHZpZC9nc3R4dmlkZW5jLmM6IChnc3RfeHZpZGVuY19wcm9maWxlX2dldF90eXBlKSwKLQkoZ3N0X3h2aWRlbmNfYmFzZV9pbml0KSwgKGdzdF94dmlkZW5jX2NsYXNzX2luaXQpLAotCShnc3RfeHZpZGVuY19pbml0KSwgKGdzdF94dmlkZW5jX3NldHVwKSwgKGdzdF94dmlkZW5jX2NoYWluKSwKLQkoZ3N0X3h2aWRlbmNfbGluayksIChnc3RfeHZpZGVuY19zZXRfcHJvcGVydHkpLAotCShnc3RfeHZpZGVuY19nZXRfcHJvcGVydHkpLCAoZ3N0X3h2aWRlbmNfY2hhbmdlX3N0YXRlKToKLQkqIGV4dC94dmlkL2dzdHh2aWRlbmMuaDoKLQkgIFVwZGF0ZSB4dmlkIHBsdWdpbiB0byBsYXRlc3QgeHZpZCAoMS4wLjAtYmV0YTMpIEFQSS4KLQotMjAwNC0wMS0wMyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L3J0cC9ydHAtcGFja2V0LmM6Ci0JICBBZGQgc3lzL3R5cGVzLmggaW5jbHVkZSwgc2luY2UgT1MgWCBkb2Vzbid0IGRlZmluZSBpbl9hZGRyX3QKLQkgIGluIG5ldGluZXQvaW4uaCwgbGlrZSBpdCBkb2VzIG9uIExpbnV4IChzZWUgIzEyOTYwMCkuCi0KLTIwMDQtMDEtMDMgIFRob21hcyBDYW50eSA8dG9tbXlkYWxAb3B0dXNob21lLmNvbS5hdT4KLQotCXJldmlld2VkIGJ5OiBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvYWxzYS9nc3RhbHNhbWl4ZXIuYzogKGdzdF9hbHNhX21peGVyX2Rpc3Bvc2UpOgotCSAgQ29ycmVjdCBsb2dpYyBvZiBkaXNwb3NlIGZ1bmN0aW9uIChzZWUgIzEyOTMwNikuCi0KLTIwMDQtMDEtMDMgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfcGFyc2VfcGVzKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfY2xhc3NfaW5pdCksCi0JKGdzdF9tcGVnX3BhcnNlX2luaXQpOgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhcnNlLmg6Ci0JICBSZW1vdmUgY2xvY2sgKHdoaWNoIHdhcyBuZXZlciBwcm92aWRlZCwgaS5lLiBkZWFkIGNvZGUpLCBhbmQKLQkgIGFsc28gZml4IGludGVnZXIgb3ZlcmZsb3dzIGF0IGhpZ2ggUFRTIHZhbHVlcyAoc2VlICMxMjY5NjcpLgotCi0yMDA0LTAxLTAzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZmxhYy9nc3RmbGFjZGVjLmM6Ci0JKiBleHQvbGlicG5nL2dzdHBuZ2VuYy5oOgotCSogZXh0L21pa21vZC9nc3RtaWttb2QuaDoKLQkgIE9TIFggZml4ZXMgKHNlZSAjMTI2NjI4KS4KLQotMjAwNC0wMS0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvYWxzYS9nc3RhbHNhc3JjLmM6IChnc3RfYWxzYV9zcmNfcGFkX2ZhY3RvcnkpLAotCShnc3RfYWxzYV9zcmNfYmFzZV9pbml0KTogUmVtb3ZlIGJvZ3VzICJzcmMiIHJlcXVlc3QgcGFkLgotCSogZ3N0L21wZWdzdHJlYW0vZ3N0bXBlZ3BhcnNlLmM6IChnc3RfbXBlZ19wYXJzZV9iYXNlX2luaXQpLAotCShnc3RfbXBlZ19wYXJzZV9jbGFzc19pbml0KTogTW92ZSBwYWQgdGVtcGxhdGUgcmVnaXN0cmF0aW9uCi0JdG8gY2xhc3NfaW5pdCwgc2luY2UgdGhlIGRlcml2ZWQgY2xhc3MgKG1wZWdkZW11eCkgZG9lc24ndAotCXdhbnQgdGhlbS4KLQotMjAwNC0wMS0wMyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3hpbWFnZS9NYWtlZmlsZS5hbToKLQkqIHN5cy94dmlkZW8vTWFrZWZpbGUuYW06Ci0JKiBzeXMveHZpbWFnZS9NYWtlZmlsZS5hbToKLQkgIE1vdmUgaW50ZXJmYWNlIGxpYnMgZnJvbSBMREZMQUdTIHRvIExJQkFERCwgZml4IHJlbG9jYXRpb24gZXJyb3JzCi0JICBhZnRlciBpbnN0YWxsYXRpb24gKHNlZSAjMTI3NjY0KS4KLQotMjAwNC0wMS0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2VuYy5jOiAoZ3N0X2ZmbXBlZ2VuY19pbml0KSwKLQkoZ3N0X2ZmbXBlZ2VuY19jb25uZWN0KTogIE5lZ290aWF0aW9uIGZpeGVzLgotCSogZXh0L21wZWcyZGVjL2dzdG1wZWcyZGVjLmM6IChnc3RfbXBlZzJkZWNfbmVnb3RpYXRlX2Zvcm1hdCk6Ci0JUmVtb3ZlIGluYXBwcm9wcmlhdGUgZ3N0X2NhcHNfZnJlZSgpLgotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19zaW5rY29ubmVjdCk6Ci0JUmVlbmFibGUgUm9uYWxkJ3MgaW50ZXJuYWwgcmVzaXplIGNvZGUsIHNpbmNlIHRoZSBjb3JlIGhhbmRsZXMKLQlpdCBjb3JyZWN0bHkgbm93LgotCi0yMDA0LTAxLTAyICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBzeXMvdjRsL2dzdHY0bG1qcGVnc2luay5jOiAoZ3N0X3Y0bG1qcGVnc2lua19pbml0KToKLQkqIHN5cy92NGwvZ3N0djRsbWpwZWdzcmMuYzogKGdzdF92NGxtanBlZ3NyY19pbml0KToKLQkqIHN5cy92NGwvZ3N0djRsc3JjLmM6IChnc3RfdjRsc3JjX2Jhc2VfaW5pdCksIChnc3RfdjRsc3JjX2luaXQpOgotCSAgRml4IHBhZCB0ZW1wbGF0ZSBzdHVmZi4KLQotMjAwNC0wMS0wMiAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZ3N0L21hdHJvc2thL2VibWwtcmVhZC5jOiAoZ3N0X2VibWxfcmVhZF9zaW50KToKLQkqIGdzdC9tYXRyb3NrYS9lYm1sLXdyaXRlLmM6IChnc3RfZWJtbF93cml0ZV9zaW50KToKLQkgIGZpeCBzaWduZWQgaW50ZWdlciByZWFkaW5nL3dyaXRpbmcuCi0KLTIwMDQtMDEtMDIgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L2Fsc2EvUkVBRE1FOgotCSAgUmVtb3ZlIG91dGRhdGVkIGRvY3VtZW50Ci0KLTIwMDQtMDEtMDMgIEphbiBTY2htaWR0ICA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLQotCSogZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYzogKGdzdF9jdXR0ZXJfaW5pdCk6Ci0JICBzcmMgcGFkIHdhcyBiZWluZyBjcmVhdGVkIHR3aWNlIC0gb29wcy4KLQotMjAwNC0wMS0wMiAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua19zaW5rY29ubmVjdCk6Ci0JICBDb21tZW50IG91dCBpbnRlcm5hbCByZXNpemUuIEl0IGRvZXNuJ3QgaGFuZGxlIHRoZSByZXN1bHRpbmcKLQkgIFhFdmVudCBpbnRlcm5hbGx5LCBkb2VzIGFub3RoZXIgdHJ5X3NldF9jYXBzKCkgd2hpY2ggbGVhZHMgdG8KLQkgIGEgcmVhbGx5IG5pY2UgbG9vcC4KLQkgIFJlYWwgZml4IHdpbGwgY29tZSB3aGVuIEp1bGllbiBhbmQgRGF2ZSBhcmUgYXdha2UuIDspLgotCi0yMDA0LTAxLTAyICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmMuY2M6Ci0JICBmaXggY29uc3Qvbm9uY29uc3QgY29tcGlsZSBpc3N1ZS4KLQotMjAwNC0wMS0wMiAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JKiBzeXMveHZpbWFnZS94dmltYWdlc2luay5jOiAoZ3N0X3h2aW1hZ2VzaW5rX2ZpeGF0ZSksCi0JKGdzdF94dmltYWdlc2lua19zaW5rY29ubmVjdCksIChnc3RfeHZpbWFnZXNpbmtfaW5pdCk6Ci0JQWRkIGZpeGF0ZSBmdW5jdGlvbiBhbmQgYSBjaGVjayBmb3IgYmFkIGZvcm1hdHMuCi0KLTIwMDQtMDEtMDEgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCU5lZ290aWF0aW9uIGZpeGVzOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmM6IChnc3RfYXVkaW9maWx0ZXJfbGluayksCi0JKGdzdF9hdWRpb2ZpbHRlcl9pbml0KToKLQkqIGdzdC9kZWJ1Zy9lZmVuY2UuYzogKGdzdF9lZmVuY2VfaW5pdCk6Ci0JKiBnc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuYzogKGdzdF9kZWludGVybGFjZV9saW5rKSwKLQkoZ3N0X2RlaW50ZXJsYWNlX2luaXQpOgotCSogZ3N0L3ZvbHVtZS9nc3R2b2x1bWUuYzogKHZvbHVtZV9jb25uZWN0KToKLQotMjAwNC0wMS0wMSAgRGF2aWQgU2NobGVlZiAgPGRzQHNjaGxlZWYub3JnPgotCi0JQ29udmVydCBlbGVtZW50cyB0byB1c2UgZ3N0X3BhZF91c2VfZXhwbGljaXRfY2FwcygpIHdoZXJlCi0JYXBwcm9wcmlhdGU6Ci0JKiBleHQvYTUyZGVjL2dzdGE1MmRlYy5jOiAoZ3N0X2E1MmRlY19pbml0KSwgKGdzdF9hNTJkZWNfcmVuZWcpOgotCSogZXh0L2F1ZGlvZmlsZS9nc3RhZnBhcnNlLmM6IChnc3RfYWZwYXJzZV9pbml0KSwKLQkoZ3N0X2FmcGFyc2Vfb3Blbl9maWxlKToKLQkqIGV4dC9hdWRpb2ZpbGUvZ3N0YWZzcmMuYzogKGdzdF9hZnNyY19pbml0KSwKLQkoZ3N0X2Fmc3JjX29wZW5fZmlsZSk6Ci0JKiBleHQvZXNkL2VzZG1vbi5jOiAoZ3N0X2VzZG1vbl9pbml0KSwgKGdzdF9lc2Rtb25fZ2V0KToKLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnZGVjLmM6IChnc3RfZmZtcGVnZGVjX2luaXQpLAotCShnc3RfZmZtcGVnZGVjX2NoYWluKToKLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnZGVtdXguYzogKGdzdF9mZm1wZWdkZW11eF9sb29wKToKLQkqIGV4dC9mbGFjL2dzdGZsYWNkZWMuYzogKGdzdF9mbGFjZGVjX2luaXQpLCAoZ3N0X2ZsYWNkZWNfd3JpdGUpOgotCSogZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmLmM6IChnc3RfZ2RrX3BpeGJ1Zl9pbml0KSwKLQkoZ3N0X2dka19waXhidWZfY2hhaW4pOgotCSogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOiAoZ3N0X2pwZWdkZWNfaW5pdCksIChnc3RfanBlZ2RlY19saW5rKSwKLQkoZ3N0X2pwZWdkZWNfY2hhaW4pOgotCSogZXh0L21hZC9nc3RtYWQuYzogKGdzdF9tYWRfaW5pdCksIChnc3RfbWFkX2NoYWluKToKLQkqIGV4dC9taWttb2QvZ3N0bWlrbW9kLmM6IChnc3RfbWlrbW9kX2luaXQpLAotCShnc3RfbWlrbW9kX25lZ290aWF0ZSk6Ci0JKiBleHQvbXBlZzJkZWMvZ3N0bXBlZzJkZWMuYzogKGdzdF9tcGVnMmRlY19pbml0KSwKLQkoZ3N0X21wZWcyZGVjX25lZ290aWF0ZV9mb3JtYXQpOgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jLmNjOgotCSogZXh0L29nZy9nc3RvZ2dkZW11eC5jOiAoZ3N0X29nZ19wYWRfcHVzaCk6Ci0JKiBleHQvc3BlZXgvZ3N0c3BlZXhkZWMuYzogKGdzdF9zcGVleGRlY19pbml0KSwKLQkoZ3N0X3NwZWV4ZGVjX3Npbmtjb25uZWN0KToKLQkqIGV4dC9zd2ZkZWMvZ3N0c3dmZGVjLmM6IChnc3Rfc3dmZGVjX2xvb3ApLCAoZ3N0X3N3ZmRlY19pbml0KToKLQkqIGV4dC92b3JiaXMvdm9yYmlzZmlsZS5jOiAoZ3N0X3ZvcmJpc2ZpbGVfaW5pdCksCi0JKGdzdF92b3JiaXNmaWxlX25ld19saW5rKToKLQkqIGdzdC9hYzNwYXJzZS9nc3RhYzNwYXJzZS5jOiAoZ3N0X2FjM3BhcnNlX2luaXQpLAotCShnc3RfYWMzcGFyc2VfY2hhaW4pOgotCSogZ3N0L2FzZmRlbXV4L2dzdGFzZmRlbXV4LmM6IChnc3RfYXNmX2RlbXV4X2FkZF9hdWRpb19zdHJlYW0pLAotCShnc3RfYXNmX2RlbXV4X3NldHVwX3BhZCk6Ci0JKiBnc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmM6IChnc3RfYXVwYXJzZV9pbml0KSwKLQkoZ3N0X2F1cGFyc2VfY2hhaW4pOgotCSogZ3N0L2lkMy9nc3RpZDN0eXBlcy5jOiAoZ3N0X2lkM3R5cGVzX2xvb3ApOgotCSogZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmM6IChnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbSk6Ci0JKiBnc3QvbXBlZzF2aWRlb3BhcnNlL2dzdG1wMXZpZGVvcGFyc2UuYzogKGdzdF9tcDF2aWRlb3BhcnNlX2luaXQpLAotCShtcDF2aWRlb3BhcnNlX3BhcnNlX3NlcSk6Ci0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzogKGdzdF9tcDNwYXJzZV9pbml0KSwKLQkoYnBmX2Zyb21faGVhZGVyKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOiAoZ3N0X21wZWdfZGVtdXhfcGFyc2Vfc3lzaGVhZCksCi0JKGdzdF9tcGVnX2RlbXV4X3BhcnNlX3BlcyksIChnc3RfbXBlZ19kZW11eF9scGNtX3NldF9jYXBzKToKLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdwYXJzZS5jOiAoZ3N0X21wZWdfcGFyc2VfaW5pdCksCi0JKGdzdF9tcGVnX3BhcnNlX3NlbmRfZGF0YSk6Ci0JKiBnc3QvcXRkZW11eC9xdGRlbXV4LmM6IChnc3RfcXRkZW11eF9sb29wX2hlYWRlciksCi0JKGdzdF9xdGRlbXV4X2FkZF9zdHJlYW0pOgotCSogZ3N0L3JlYWxtZWRpYS9ybWRlbXV4LmM6IChnc3Rfcm1kZW11eF9hZGRfc3RyZWFtKToKLQkqIGdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jOiAoZ3N0X3dhdnBhcnNlX2luaXQpLAotCShnc3Rfd2F2cGFyc2VfcGFyc2VfZm10KToKLQotMjAwNC0wMS0wMSAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogY29uZmlndXJlLmFjOgotCSAgRml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgbXBlZzJlbmMuIFdlIG5lZWQgMS42LjEuOTMgaW5zdGVhZCBvZgotCSAgMS42LjEuOTIsIHNpbmNlIHRoZSBwa2ctY29uZmlnIGZpbGUgb2YgMS42LjEuOTIgaXMgYm9ya2VkIGFuZAotCSAgaXQgdGhlcmVmb3JlIHVzZXMgdGhlIHdyb25nIGluY2x1ZGUgcGF0aHMuIFRvbyBiYWQuLi4gTm90ZQotCSAgdGhhdCAxLjYuMS45MyBpcyBub3QgcmVsZWFzZSB5ZXQuIDspLgotCSAgQWxzbyBhZGQgYSBjaGVjayBmb3IgbXBsZXgsIHdoaWNoIGlzIG5vdyB1c2luZyB0aGUgbGliJ2lmaWVkCi0JICBtcGxleCBmcm9tIG1qcGVndG9vbHMsIHRvby4KLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnY29kZWNtYXAuYzoKLQkgIEFkZCBjb2RlY190YWcgZm9yIDNpdngveHZpZC4gRm9yIHh2aWQsIHRoaXMgc2hvdWxkIGZpeCBwbGF5YmFjawotCSAgaXNzdWVzLiBJIGRvbid0IHRoaW5rIGZmbXBlZyBoYW5kbGVzIDNpdnggY29ycmVjdGx5LCBzbyB0aGlzCi0JICBwcm9iYWJseSB3b24ndCB3b3JrLiBCdXQgaXQgd29uJ3QgaHVydCBlaXRoZXIuCi0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2RlYy5jOiAoZ3N0X2ZmbXBlZ2RlY19jb25uZWN0KSwKLQkoZ3N0X2ZmbXBlZ2RlY19jaGFpbik6Ci0JKiBleHQvZmZtcGVnL2dzdGZmbXBlZ2VuYy5jOiAoZ3N0X2ZmbXBlZ2VuY19jb25uZWN0KSwKLQkoZ3N0X2ZmbXBlZ2VuY19jaGFpbl9hdWRpbyk6Ci0JICBGaXggbWVtbGVhayBpbiBhdWRpbyBlbmNvZGluZy4gQ2xvc2UgY29kZWMgaWYgb3BlbiBmYWlscywgdGhpcwotCSAgY2FsbHMgdGhlIGNsZWFudXAgcm91dGluZXMgc28gd2UgY2FuIHJlLXVzZSB0aGUgY29udGV4dC4KLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuYy5jYzoKLQkgIEZpeCBwYWQgdGVtcGxhdGUgbmFtZXMvdHlwZXMsIGZpeCBtZW1vcnkgaXNzdWUgd2l0aCBnZXRjYXBzKCkuCi0JKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmNvZGVyLmNjOgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jb2Rlci5oaDoKLQkgIEZpeCBjb21waWxlIGlzc3VlIHdpdGggbmV3IGNhcHMgc3lzdGVtIChjb25zdCB0aGluZ3kpLgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jcGljdHVyZXJlYWRlci5jYzoKLQkqIGV4dC9tcGVnMmVuYy9nc3RtcGVnMmVuY3BpY3R1cmVyZWFkZXIuaGg6Ci0JICBXZSByZWFkIGEgZmlyc3QgZnJhbWUgcmlnaHQgb24gaW5pdGluZywgc28gdGhhdCB3ZSBoYXZlIGEgY2FwcwotCSAgd2hlbiB3ZSBpbml0IHRoZSBvdXRwdXQuIFRoaXMgY2FwcyBpcyBjYWNoZWQgaW4gcGFkcHJpdmF0ZSBhbmQKLQkgIHJlYWQgYXMgZmlyc3QgZnJhbWUuCi0JKiBleHQvbXBsZXgvTWFrZWZpbGUuYW06Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXguY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXguaDoKLQkqIGV4dC9tcGxleC9nc3RtcGxleC5oaDoKLQkqIGV4dC9tcGxleC9nc3RtcGxleGliaXRzdHJlYW0uY2M6Ci0JKiBleHQvbXBsZXgvZ3N0bXBsZXhpYml0c3RyZWFtLmhoOgotCSogZXh0L21wbGV4L2dzdG1wbGV4am9iLmNjOgotCSogZXh0L21wbGV4L2dzdG1wbGV4am9iLmhoOgotCSogZXh0L21wbGV4L2dzdG1wbGV4b3V0cHV0c3RyZWFtLmNjOgotCSogZXh0L21wbGV4L2dzdG1wbGV4b3V0cHV0c3RyZWFtLmhoOgotCSAgV2Ugd3JhcCBtanBlZ3Rvb2xzIG1wbGV4LiBTbyBJIHJld3JvdGUgdGhlIHBsdWdpbi4gVGhlIG9sZCBwbHVnaW4KLQkgIGhhZCBpc3N1ZXMsIGRpZG4ndCBkbyBjYXBzbmVnbywgc3VwcG9ydGVkIG9ubHkgYSBzdWJzZXQgb2YgdGhlCi0JICBtcGxleCBmZWF0dXJlcyBhbmQgcmVxdWlyZWQgYSBtcGxleCBmb3JrIGluIG91ciBsb2NhbCBDVlMuIFBsdXMKLQkgIHRoYXQgaXQgd29ya2VkIGFnYWlzdCBhIHZlcnkgb2xkIG1wbGV4IHZlcnNpb24uIFJld3JpdGluZyB3YXMKLQkgIGZhc3RlciB0aGFuIHVwZGF0aW5nIGl0LgotCSogZ3N0LWxpYnMvZXh0L01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L0lOU1RSVUNUOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L01ha2VmaWxlLmFtOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L1JFQURNRToKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9UT0RPOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L2FjM3N0cm1faW4uY2M6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvYXVkaW9zdHJtLmhoOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L2F1ZGlvc3RybV9vdXQuY2M6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvYXVuaXQuaGg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvYml0cy5jYzoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9iaXRzLmhoOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L2J1ZmZlci5jYzoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9idWZmZXIuaGg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvZmFzdGludGZucy5oOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L2Zvcm1hdF9jb2Rlcy5oOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L2lucHV0c3RybS5jYzoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9pbnB1dHN0cm0uaGg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvbHBjbXN0cm1faW4uY2M6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvbWpwZWdfbG9nZ2luZy5jYzoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9tanBlZ19sb2dnaW5nLmg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvbWpwZWdfdHlwZXMuaDoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9tcGFzdHJtX2luLmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L21wZWdjb25zdHMuY2M6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvbXBlZ2NvbnN0cy5oOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L21wbGV4Y29uc3RzLmhoOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L211bHRwbGV4LmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L291dHB1dHN0cmVhbS5oaDoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9wYWRzdHJtLmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L3BhZHN0cm0uaGg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvc3RpbGxzc3RyZWFtLmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L3N0aWxsc3N0cmVhbS5oaDoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC9zeXN0ZW1zLmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L3N5c3RlbXMuaGg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvdmVjdG9yLmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L3ZlY3Rvci5oaDoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC92aWRlb3N0cm0uaGg6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgvdmlkZW9zdHJtX2luLmNjOgotCSogZ3N0LWxpYnMvZXh0L21wbGV4L3ZpZGVvc3RybV9vdXQuY2M6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgveXV2NG1wZWcuY2M6Ci0JKiBnc3QtbGlicy9leHQvbXBsZXgveXV2NG1wZWcuaDoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC95dXY0bXBlZ19pbnRlcm4uaDoKLQkqIGdzdC1saWJzL2V4dC9tcGxleC95dXY0bXBlZ19yYXRpby5jYzoKLQkgIFdlIGRvbid0IGZvcmsgbWpwZWd0b29scycgbXBsZXggaW4gb3VyIENWUyBhbnltb3JlLgotCSogZ3N0L2F2aS9nc3RhdmlkZW11eC5jOiAoZ3N0X2F2aV9kZW11eF9zcmNfZ2V0Y2FwcyksCi0JKGdzdF9hdmlfZGVtdXhfYWRkX3N0cmVhbSk6Ci0JKiBnc3QvYXZpL2dzdGF2aWRlbXV4Lmg6Ci0JICBBZGQgZ2V0Y2FwcygpIGZ1bmN0aW9uIGZvciBwcm9wZXIgY2FwcyBuZWdvLiBUaGlzIG1ha2VzIHNvbWUKLQkgIHBhcnRzIG9mIEFWSSBwbGF5YmFjay9yZWFkaW5nIHdvcmsuCi0JKiBzeXMveGltYWdlL3hpbWFnZXNpbmsuYzogKGdzdF94aW1hZ2VzaW5rX3Npbmtjb25uZWN0KToKLQkgIFJlc2l6ZSB3aW5kb3cgb24gbmV3IGNhcHNuZWdvLiBUaGlzIGlzIHByb2JhYmx5IHdyb25nLCBidXQKLQkgIEknbSBzdGlsbCBjb21taXR0aW5nIGl0IGJlY2F1c2Ugd2l0aCBjdXJyZW50IGNhcHNuZWdvLCB0aGUKLQkgIGZpcnN0IHN1Y2Nlc3NmdWxsIGNhcHNuZWdvIGlzIGF1dG8tZml4YXRlZCwgdGhlcmVmb3JlIHJvdW5kZWQKLQkgIGRvd24gdG8gdGhlIGxvd2VzdCB2YWx1ZXMgaW4gdGhlIGNhcHMuIHRoaXMgcmVzdWx0cyBpbiBhIDE2eDE2Ci0JICBYV2luZG93IHRoYXQgaXMgbm90IHJlaXplZCB3aGVuIHJlYWwgY2Fwc25lZ28gZmluaXNoZXMuCi0JICBEYXZlLCBJIHNlZSBtb3JlIGNhc2VzIG9mIHRoaXMsIGRvIHlvdSBrbm93IGEgcHJvcGVyIHNvbHV0aW9uPwotCSogdG9vbHMvZ3N0LWxhdW5jaC1leHQuaW46Ci0JICBGaXggTVBFRy00IEFBQyAoQXBwbGUgaVBvZC9pVHVuZXMpIGZpbGUgY29tbWFuZGxpbmUuCi0KLTIwMDMtMTItMzEgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3RjcC9nc3R0Y3BzcmMuYzogKGdzdF90Y3BzcmNfZ2V0KToKLQkqIGdzdC91ZHAvZ3N0dWRwc3JjLmM6IChnc3RfdWRwc3JjX2dldCk6Ci0JICBDaGFuZ2UgZ3N0X3BhZF9wcm94eV9saW5rKCkgdG8gZ3N0X3BhZF90cnlfc2V0X2NhcHMoKQotCi0yMDAzLTEyLTMwICBEYXZpZCBTY2hsZWVmICA8ZHNAc2NobGVlZi5vcmc+Ci0KLQkqIGV4dC9mZm1wZWcvZ3N0ZmZtcGVnY29sb3JzcGFjZS5jOgotCShnc3RfZmZtcGVnY3NwX2NhcHNfcmVtb3ZlX2Zvcm1hdF9pbmZvKSwgKGdzdF9mZm1wZWdjc3BfZ2V0Y2FwcyksCi0JKGdzdF9mZm1wZWdjc3BfcGFkX2xpbmspLCAoZ3N0X2ZmbXBlZ2NzcF9pbml0KSwKLQkoZ3N0X2ZmbXBlZ2NzcF9jaGFpbik6IE5lZ290aWF0aW9uIGZpeGVzCi0JKiBleHQvbWFkL2dzdG1hZC5jOiAoZ3N0X21hZF9jaGFpbik6IE5lZ290aWF0aW9uIGZpeGVzCi0JKiBnc3QvYXVkaW9jb252ZXJ0L2dzdGF1ZGlvY29udmVydC5jOiAoZ3N0X2F1ZGlvX2NvbnZlcnRfY2hhaW4pLAotCShnc3RfYXVkaW9fY29udmVydF9saW5rKSwgKGdzdF9hdWRpb19jb252ZXJ0X2NoYW5uZWxzKToKLQkqIGdzdC9hdWRpb3NjYWxlL2dzdGF1ZGlvc2NhbGUuYzogKGdzdF9hdWRpb3NjYWxlX2dldGNhcHMpLAotCShnc3RfYXVkaW9zY2FsZV9saW5rKSwgKGdzdF9hdWRpb3NjYWxlX2dldF9idWZmZXIpLAotCShnc3RfYXVkaW9zY2FsZV9jaGFpbik6IE5lZ290aWF0aW9uIGZpeGVzCi0JKiBnc3QvYXVkaW9zY2FsZS9nc3RhdWRpb3NjYWxlLmg6Ci0JKiBnc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9maWx0ZXIuYzoKLQkoZ3N0X3ZpZGVvZmlsdGVyX2Zvcm1hdF9nZXRfc3RydWN0dXJlKSwgKGdzdF92aWRlb2ZpbHRlcl9nZXRjYXBzKSwKLQkoZ3N0X3ZpZGVvZmlsdGVyX2xpbmspLCAoZ3N0X3ZpZGVvZmlsdGVyX2luaXQpLAotCShnc3RfdmlkZW9maWx0ZXJfc2V0X291dHB1dF9zaXplKSwgKGdzdF92aWRlb2ZpbHRlcl9zZXR1cCksCi0JKGdzdF92aWRlb2ZpbHRlcl9maW5kX2Zvcm1hdF9ieV9zdHJ1Y3R1cmUpOgotCSogZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvZmlsdGVyLmg6IE5lZ290aWF0aW9uIGZpeGVzCi0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6IChnc3RfdmlkZW9zY2FsZV9nZXRjYXBzKSwKLQkoZ3N0X3ZpZGVvc2NhbGVfbGluayk6Ci0JKiBnc3QvdmlkZW9zY2FsZS92aWRlb3NjYWxlLmM6ICh2aWRlb3NjYWxlX2dldF9zdHJ1Y3R1cmUpLAotCSh2aWRlb3NjYWxlX2ZpbmRfYnlfc3RydWN0dXJlKSwgKGdzdF92aWRlb3NjYWxlX3NldHVwKToKLQkqIGdzdC92aWRlb3NjYWxlL3ZpZGVvc2NhbGUuaDogTmVnb3RpYXRpb24gZml4ZXMKLQkqIHN5cy94aW1hZ2UveGltYWdlc2luay5jOiAoZ3N0X3hpbWFnZXNpbmtfaGFuZGxlX3hldmVudHMpLAotCShnc3RfeGltYWdlc2lua19maXhhdGUpLCAoZ3N0X3hpbWFnZXNpbmtfaW5pdCk6IEFkZCBhIGZpeGF0ZQotCWZ1bmN0aW9uLCByZXN0cmljdCByZXNpemluZyB0byBhIG11bHRpcGxlIG9mIDQgKGhhY2sgdW50aWwKLQlldmVyeW9uZSBzdXBwb3J0cyBvZGQgc2l6ZXMgY29ycmVjdGx5KS4KLQotMjAwMy0xMi0yOSAgQ29saW4gV2FsdGVycyAgPHdhbHRlcnNAdmVyYnVtLm9yZz4KLQotCSogZXh0L2VzZC9lc2RzaW5rLmMgKGdzdF9lc2RzaW5rX2xpbmspOiBGaXggdHlwbzsgZ2V0IGRlcHRoIGluc3RlYWQgb2YKLQlzaWduZWQuCi0KLTIwMDMtMTItMzAgIEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotCi0JKiBleHQvc25kZmlsZS9nc3RzZi5jOiAoZ3N0X3NmX2xvb3ApOgotCSAgRml4IHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyBjb25zdCBxdWFsaWZpZXIKLQotMjAwMy0xMi0yNyAgSmVyZW15IFNpbW9uICAgPGplc2ltb25AbGliZXJ0eXN1cmYuZnI+Ci0KLQkqIGdzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmM6Ci0JKiBnc3QvdmlkZW9zY2FsZS9nc3R2aWRlb3NjYWxlLmM6Ci0JKiBnc3Qvdm9sZW52L2dzdHZvbGVudi5jOgotCSogZ3N0LWxpYnMvZ3N0L2F1ZGlvL2F1ZGlvLmM6Ci0JKiBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8uYzoKLQkgIEZpeCB3YXJuaW5ncwotCi0yMDAzLTEyLTI3ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9hbHNhL2dzdGFsc2EuYzogKGdzdF9hbHNhX29wZW5fYXVkaW8pOgotCSAgRG9uJ3Qgc2VuZCBBTFNBIGRlYnVnZ2luZyB0byBzdGRlcnIuCi0JKiBleHQvYWxzYS9nc3RhbHNhLmg6Ci0JICBVc2UgR1NUX1dBUk5JTkcgaW5zdGVhZCBvZiBnX3dhcm5pbmcgd2hlbiBBTFNBIGZ1bmN0aW9ucyBmYWlsLgotCi0yMDAzLTEyLTI3ICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIHN5cy94dmltYWdlL3h2aW1hZ2VzaW5rLmM6IChnc3RfeHZpbWFnZXNpbmtfZ2V0X3h2X3N1cHBvcnQpOgotCSAgRnJlZSBYVkFkYXB0ZXJJbmZvIGNvcnJlY3RseS4KLQotMjAwMy0xMi0yNyAgQmVuamFtaW4gT3R0ZSAgPGluN3kxMThAcHVibGljLnVuaS1oYW1idXJnLmRlPgotCi0JKiBleHQvbWFkL2dzdGlkM3RhZy5jOiAoZ3N0X2lkM190YWdfYWRkX3NyY19wYWQpLAotCShnc3RfaWQzX3RhZ19kb19jYXBzX25lZ28pLCAoZ3N0X2lkM190YWdfc3JjX2xpbmspOgotCSAgTWFrZSBpZDN0YWcgdXNlIGNvcnJlY3QgY2FwcyBuZWdvLgotCi0yMDAzLTEyLTI3ICBBbWF1cnkgSmFjcXVvdCA8c3hwZXJ0QGVzaXRjb20ub3JnPgotCi0JKiBleHQvaXZvcmJpcy92b3JiaXMuYzoKLQkqIGV4dC9pdm9yYmlzL3ZvcmJpc2VuYy5oOgotCSogZXh0L2l2b3JiaXMvdm9yYmlzZmlsZS5jOgotCSAgTW9kaWZ5IHNvIHRoYXQgaXQgdXNlcyB0aGUgbmV3IGNhcHMgdGhpbmdzCi0KLTIwMDMtMTItMjcgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogdGVzdHN1aXRlL3NwaWRlci9zcGlkZXIxLmM6IChtYWluKToKLQkqIHRlc3RzdWl0ZS9zcGlkZXIvc3BpZGVyMi5jOiAobWFpbik6Ci0JKiB0ZXN0c3VpdGUvc3BpZGVyL3NwaWRlcjMuYzogKG1haW4pOgotCSAgTWFrZSB0ZXN0cyBjb21waWxlIGFnYWluLiBUaGV5IHByb2JhYmx5IGRvbid0IHdvcmsuCi0KLTIwMDMtMTItMjQgIENvbGluIFdhbHRlcnMgIDx3YWx0ZXJzQHZlcmJ1bS5vcmc+Ci0KLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jIChnc3Rfb3Nzc2lua19zaW5rX2ZpeGF0ZSk6IFJldHVybiBOVUxMIGlmCi0Jd2UgY2FuJ3QgZml4YXRlIHRoZSBjYXBzIGFueW1vcmUuCi0KLTIwMDMtMTItMjMgIERhdmlkIFNjaGxlZWYgIDxkc0BzY2hsZWVmLm9yZz4KLQotCSogZ3N0L3ZvbHVtZS9nc3R2b2x1bWUuYzogKHZvbHVtZV9pbml0KTogUHJveHkgZ2V0Y2Fwcy4KLQkqIHN5cy9vc3MvZ3N0b3Nzc2luay5jOiAoZ3N0X29zc3NpbmtfaW5pdCksCi0JKGdzdF9vc3NzaW5rX3NpbmtfZml4YXRlKTogQWRkIGZpeGF0ZSBmdW5jdGlvbi4KLQotMjAwMy0xMi0yNCAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2RlY21hcC5jOgotCSogZXh0L2ZmbXBlZy9nc3RmZm1wZWdjb2xvcnNwYWNlLmM6IChnc3RfZmZtcGVnY3NwX2dldGNhcHMpLAotCShnc3RfZmZtcGVnY3NwX3NyY2Nvbm5lY3RfZnVuYyksIChnc3RfZmZtcGVnY3NwX3Npbmtjb25uZWN0KSwKLQkoZ3N0X2ZmbXBlZ2NzcF9zcmNjb25uZWN0KSwgKGdzdF9mZm1wZWdjc3BfZ2V0X3R5cGUpLAotCShnc3RfZmZtcGVnY3NwX2Jhc2VfaW5pdCksIChnc3RfZmZtcGVnY3NwX2NsYXNzX2luaXQpLAotCShnc3RfZmZtcGVnY3NwX2luaXQpLCAoZ3N0X2ZmbXBlZ2NzcF9jaGFpbiksCi0JKGdzdF9mZm1wZWdjc3BfY2hhbmdlX3N0YXRlKSwgKGdzdF9mZm1wZWdjc3Bfc2V0X3Byb3BlcnR5KSwKLQkoZ3N0X2ZmbXBlZ2NzcF9nZXRfcHJvcGVydHkpLCAoZ3N0X2ZmbXBlZ2NzcF9yZWdpc3Rlcik6Ci0JICBmaXggdHlwbyBpbiBSR0IgbWFza3MsIGFuZCBtb3ZlIGJhY2sgdG8gIm9sZCIgY29sb3JzcGFjZQotCSAgY2Fwc25lZ28gY29kZSB1bnRpbCB3aG9ldmVyIHdyb3RlIHRoaXMgbmV3IGNyYXAgaGFzIGFjdHVhbGx5Ci0JICB0ZXN0ZWQgaXQgc28gdGhhdCBpdCB3b3Jrcy4KLQkgIEFuZCB5ZXMsIHRoaXMgd29ya3MsIGtlZXAgaXQgdGhhdCB3YXkgcGxlYXNlLgotCi0yMDAzLTEyLTIzICBSb25hbGQgQnVsdGplICA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotCi0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmM6IChnc3RfZGl2eGRlY19iYXNlX2luaXQpLAotCShnc3RfZGl2eGRlY19pbml0KSwgKGdzdF9kaXZ4ZGVjX25lZ290aWF0ZSk6Ci0JKiBleHQvZGl2eC9nc3RkaXZ4ZGVjLmg6Ci0JKiBleHQvZGl2eC9nc3RkaXZ4ZW5jLmM6IChnc3RfZGl2eGVuY19iYXNlX2luaXQpLAotCShnc3RfZGl2eGVuY19pbml0KToKLQkqIGV4dC9mYWFjL2dzdGZhYWMuYzogKGdzdF9mYWFjX2Jhc2VfaW5pdCksIChnc3RfZmFhY19pbml0KSwKLQkoZ3N0X2ZhYWNfc2lua2Nvbm5lY3QpLCAoZ3N0X2ZhYWNfc3JjY29ubmVjdCk6Ci0JKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmMuY2M6Ci0JKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmNvZGVyLmNjOgotCSogZXh0L21wZWcyZW5jL2dzdG1wZWcyZW5jcGljdHVyZXJlYWRlci5jYzoKLQkqIHN5cy9keHIzL2R4cjNhdWRpb3NpbmsuYzogKGR4cjNhdWRpb3NpbmtfYmFzZV9pbml0KSwKLQkoZHhyM2F1ZGlvc2lua19pbml0KSwgKGR4cjNhdWRpb3NpbmtfcGNtX3NpbmtsaW5rKToKLQkqIHN5cy9keHIzL2R4cjNzcHVzaW5rLmM6IChkeHIzc3B1c2lua19iYXNlX2luaXQpLAotCShkeHIzc3B1c2lua19pbml0KToKLQkqIHN5cy9keHIzL2R4cjN2aWRlb3NpbmsuYzogKGR4cjN2aWRlb3NpbmtfYmFzZV9pbml0KSwKLQkoZHhyM3ZpZGVvc2lua19pbml0KToKLQkgIEZpeCBjYXBzIGJyZWFrYWdlIGFmdGVyIERhdmUncyBjYXBzIGJyYW5jaCBtZXJnZS4KLQotMjAwMy0xMi0yMyAgUm9uYWxkIEJ1bHRqZSAgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLQotCSogc3lzL3hpbWFnZS94aW1hZ2VzaW5rLmM6IChnc3RfeGltYWdlc2lua194Y29udGV4dF9nZXQpOgotCSAgRml4IGZvciAyNGJwcCBkaXNwbGF5LgotCi0yMDAzLTEyLTIzICBDb2xpbiBXYWx0ZXJzICA8d2FsdGVyc0B2ZXJidW0ub3JnPgotCi0JKiBleHQvZ25vbWV2ZnMvZ3N0Z25vbWV2ZnNzaW5rLmM6IEFkZCBBUkdfSEFORExFIHByb3BlcnR5IHRoYXQgdGFrZXMKLQlhIEdub21lVkZTSGFuZGxlIGRpcmVjdGx5LgotCi0yMDAzLTEyLTIyICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGdzdC92b2x1bWUvTWFrZWZpbGUuYW06Ci0JKiBnc3Qvdm9sdW1lL2dzdHZvbHVtZS5jOiAodm9sdW1lX2Nvbm5lY3QpLCAodm9sdW1lX3BhcnNlX2NhcHMpLAotCSh2b2x1bWVfYmFzZV9pbml0KSwgKHZvbHVtZV9pbml0KToKLQkgIFJlZW5hYmxlIHZvbHVtZSBlbGVtZW50IGFuZCBmaXggdG8gd29yayB3aXRoIG5ldyBjYXBzIHN0dWZmLgotCSAgUmh5dGhtYm94IG5lZWRzIHRoaXMuCi0KLTIwMDMtMTItMjIgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZ3N0L3F0ZGVtdXgvcXRkZW11eC5jOiAocGx1Z2luX2luaXQpOgotCSAgcXRkZW11eCByZXF1aXJlcyBieXRlc3RyZWFtCi0KLTIwMDMtMTItMjIgIEJlbmphbWluIE90dGUgIDxpbjd5MTE4QHB1YmxpYy51bmktaGFtYnVyZy5kZT4KLQotCSogZXh0L2Fsc2EvZ3N0YWxzYS5jOiAoZ3N0X2Fsc2FfZ2V0X2NhcHMpLCAoZ3N0X2Fsc2FfbGluayk6Ci0JICBGaXggcmVtYWluaW5nIGNhcHMgaGFuZGxpbmcgZXJyb3JzIGR1ZSB0byBDQVBTIG1lcmdlLgotCi0yMDAzLTEyLTIyICBCZW5qYW1pbiBPdHRlICA8aW43eTExOEBwdWJsaWMudW5pLWhhbWJ1cmcuZGU+Ci0KLQkqIGV4dC9mYWFkL2dzdGZhYWQuYzogKGdzdF9mYWFkX2Jhc2VfaW5pdCksIChnc3RfZmFhZF9pbml0KSwKLQkoZ3N0X2ZhYWRfc2lua2Nvbm5lY3QpLCAoZ3N0X2ZhYWRfc3JjZ2V0Y2FwcyksCi0JKGdzdF9mYWFkX3NyY2Nvbm5lY3QpOgotCSAgUG9ydCB0byBuZXcgY2FwcyBzeXN0ZW0uCi0KLTIwMDMtMTItMjEgIEp1bGllbiBNT1VUVEUgIDxqdWxpZW5AbW91dHRlLm5ldD4KLQotCSogZXhhbXBsZXMvZ3N0cGxheS9wbGF5ZXIuYzogKGdvdF90aW1lX3RpY2spLCAoZ290X3N0cmVhbV9sZW5ndGgpLAotCShnb3RfdmlkZW9fc2l6ZSksIChtYWluKTogdXNpbmcgZ19wcmludCBpbnN0ZWFkIG9mIGdfbWVzc2FnZS4KLQkqIGdzdC1saWJzL2dzdC9wbGF5L2dzdHBsYXkuYzogKGdzdF9wbGF5X3BpcGVsaW5lX3NldHVwKTogRml4aW5nIEVPUwotCXNpZ25hbCB3aGljaCB3YXMgbm90IGVtaXR0ZWQgYmVjYXVzZSBvZiAic3dpdGNoIiBlbGVtZW50IGFkZGVkIHRvIHRoZQotCWJpbiBidXQgbm90IGNvbm5lY3RlZC4gKFJlbW92aW5nIGZyb20gdGhlIGJpbiB0ZW1wb3JhcmlseSkKLQotMjAwMy0xMi0yMSAgSnVsaWVuIE1PVVRURSAgPGp1bGllbkBtb3V0dGUubmV0PgotCi0JKiBjb25maWd1cmUuYWM6IFhfRElTUExBWV9NSVNTSU5HIGlzIHNldCB0byAxIGlmIEFDX1BBVEhfWFRSQSBmYWlscyB0bwotCWZpbmQgWCBkZXZlbG9wbWVudCBmaWxlcy4gSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBwcmV2aW91cyB0ZXN0cyBhbmQKLQl0aGV5IGZhaWwgb24gbXkgZGViaWFuL3BwYyB1bnN0YWJsZS4gVGhpcyBvbmUgd29ya3MuCi0JKiBleGFtcGxlcy9nc3RwbGF5L3BsYXllci5jOiAobWFpbik6IFNldCB0aGUgcGlwZWxpbmUgdG8gUkVBRFkgYmVmb3JlCi0JZXhpdGluZy4KLQkqIGdzdC1saWJzL2dzdC9wbGF5L2dzdHBsYXkuYzogKGdzdF9wbGF5X2dldF9sZW5ndGhfY2FsbGJhY2spLAotCShnc3RfcGxheV9zZXRfdmlkZW9fc2luayksIChnc3RfcGxheV9zZXRfYXVkaW9fc2luayksCi0JKGdzdF9wbGF5X3NldF92aXN1YWxpemF0aW9uKTogQWRkIHNvbWUgc2FmZXR5IGNoZWNrcyBpbiBzZXRfIG1ldGhvZHMKLQlhbmQgc3RhdGVfY2hhbmdlLiBUaGlzIHdhcyB0aHJvd2luZyBzb21lIHVnbHkgQ1JJVElDQUwgbWVzc2FnZXMgd2hlbgotCXBpcGVsaW5lIHdhcyBnZXR0aW5nIGRpc3Bvc2VkIGFuZCBjYXN0cyB3ZXJlIGZhaWxpbmcuCi0KLTIwMDMtMTItMjEgIFJvbmFsZCBCdWx0amUgIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0KLQkqIGNvbmZpZ3VyZS5hYzoKLQkgIEltcHJvdmUgbXBlZzJlbmMgZGV0ZWN0aW9uLiBUaGlzIGlzIGZvciBkaXN0cmlidXRpb25zIHRoYXQgZG8KLQkgIHNoaXAgbWpwZWd0b29scywgYnV0IHdpdGhvdXQgbXBlZzJlbmMuIEFsc28gZG9lcyBvYmplY3QgY2hlY2sKLQkgIGZvciBtaWdodCB0aGVyZSBldmVyIGJlIEFCSSBpbmNvbXBhdGliaWxpdHkuCi0JKiBleHQvbXBlZzJlbmMvZ3N0bXBlZzJlbmMuY2M6Ci0JICBBZGQgQW5kcmV3IGFzIHNlY29uZCBtYWludGFpbmVyIChoZSdzIGhlbHBpbmcgbWUpLCBhbmQgYWxzbyBhZGQKLQkgIGFuIGVycm9yIGlmIG5vIGNhcHMgd2FzIHNldC4gVGhpcyBoYXBwZW5zIGlmIEkgcHVsbCBiZWZvcmUgY2Fwc25lZ28KLQkgIGFuZCB0aGF0J3Mgc29tZXRoaW5nIEkgc2hvdWxkIHNvbHZlIHNvbWV0aW1lIGVsc2UuCi0JKiBnc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYzoKLQkoZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXApOgotCSAgRml4IHRpbWUgcGFyc2luZy4KLQkqIGdzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYzogKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX2xpbmspLAotCShnc3RfbWF0cm9za2FfbXV4X3RyYWNrX2hlYWRlcik6Ci0JICBBZGQgY2FwcyB0byB0ZW1wbGF0ZXMuCi0JKiBnc3QvbXBlZ2F1ZGlvcGFyc2UvZ3N0bXBlZ2F1ZGlvcGFyc2UuYzogKG1wM19zaW5rX2ZhY3RvcnkpOgotCSAgQWRkIG1wZWd2ZXJzaW9uPTEgdG8gcHJldmVudCBjb25mdXNpb24gd2l0aCBNUEVHL0FBQy4KLQkqIGdzdC9tcGVnc3RyZWFtL2dzdG1wZWdkZW11eC5jOgotCSAgUmVtb3ZlIGxheWVyIHNpbmNlIGl0IGNhdXNlcyB3YXJuaW5ncyBhYm91dCB1bmZpeGVkIGNhcHMuCi0JKiBnc3QvdmlkZW90ZXN0c3JjL2dzdHZpZGVvdGVzdHNyYy5jOiAoZ3N0X3ZpZGVvdGVzdHNyY19nZXQpOgotCSAgRml4IG9idmlvdXMgdHlwbyAod2UgZXJyb3Igb3V0IGlmIGNhcHMgd2VyZSBzZXQsIHdlIHNob3VsZCBvZgotCSAgY291cnNlIGVycm9yIG91dCBpZiAqbm8qIGNhcHMgd2VyZSBzZXQpLgotCSogc3lzL29zcy9nc3Rvc3NlbGVtZW50LmM6IChnc3Rfb3NzZWxlbWVudF9jb252ZXJ0KToKLQkgIEZpeCBmb3JtYXQgY29udmVyc2lvbiwgd2UgY29uZnVzZWQgYml0cy9ieXRlcy4KLQkqIHN5cy9vc3MvZ3N0b3NzZWxlbWVudC5oOgotCSAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIGZvciAnYnBzJy4KLQkqIHN5cy92NGwvVE9ETzoKLQkgIFJlbW92ZSBzdHVmZiBhYm91dCBwbHVnaW5zIHRoYXQgbmVlZCByZW1vdmluZyAtIHRoaXMgd2FzIGRvbmUKLQkgIGFnZXMgYWdvLgotCSogc3lzL3Y0bC9nc3R2NGxtanBlZ3NyYy5jOiAoZ3N0X3Y0bG1qcGVnc3JjX2luaXQpLAotCShnc3RfdjRsbWpwZWdzcmNfc3JjX2NvbnZlcnQpLCAoZ3N0X3Y0bG1qcGVnc3JjX3NyY19xdWVyeSk6Ci0JKiBzeXMvdjRsL2dzdHY0bHNyYy5jOiAoZ3N0X3Y0bHNyY19pbml0KSwgKGdzdF92NGxzcmNfc3JjX2NvbnZlcnQpLAotCShnc3RfdjRsc3JjX3NyY19xdWVyeSk6Ci0JKiBzeXMvdjRsMi9nc3R2NGwyc3JjLmM6IChnc3RfdjRsMnNyY19pbml0KSwKLQkoZ3N0X3Y0bDJzcmNfc3JjX2NvbnZlcnQpLCAoZ3N0X3Y0bDJzcmNfc3JjX3F1ZXJ5KToKLQkgIEFkZCBnZXRfcXVlcnlfdHlwZXMoKSwgZ2V0X2Zvcm1hdHMoKSBhbmQgcXVlcnkoKSBmdW5jdGlvbnMuCi0KLTIwMDMtMTItMjEgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0KLQkqIENoYW5nZUxvZzogbW92ZWQgdG8gZ3N0cmVhbWVyL2RvY3MvcmFuZG9tL29sZC9DaGFuZ2VMb2cuZ3N0LXBsdWdpbnMKLSAgICAgICAgKiBtb3ZlZCBDVlMgdG8gZnJlZWRlc2t0b3Aub3JnCi0KZGlmZiAtLWdpdCBhL2RvY3MvdmVyc2lvbi5lbnRpdGllcy5pbiBiL2RvY3MvdmVyc2lvbi5lbnRpdGllcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2OTg5Zi4uMDAwMDAwMAotLS0gYS9kb2NzL3ZlcnNpb24uZW50aXRpZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTwhRU5USVRZIEdTVF9BUElfVkVSU0lPTiAiQEdTVF9BUElfVkVSU0lPTkAiPgotPCFFTlRJVFkgR1NUX1ZFUlNJT04gIkBWRVJTSU9OQCI+CmRpZmYgLS1naXQgYS9leHQvTWFrZWZpbGUuYW0gYi9leHQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDAxODIuLjAwMDAwMDAKLS0tIGEvZXh0L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLWlmIFVTRV9BQUxJQgotQUFMSUJfRElSID0gYWFsaWIKLWVsc2UKLUFBTElCX0RJUiA9Ci1lbmRpZgotCi1pZiBVU0VfQ0FJUk8KLUNBSVJPX0RJUiA9IGNhaXJvCi1lbHNlCi1DQUlST19ESVIgPQotZW5kaWYKLQotaWYgVVNFX0ZMQUMKLUZMQUNfRElSID0gZmxhYwotZWxzZQotRkxBQ19ESVIgPQotZW5kaWYKLQotaWYgVVNFX0dES19QSVhCVUYKLUdES19QSVhCVUZfRElSID0gZ2RrX3BpeGJ1ZgotZWxzZQotR0RLX1BJWEJVRl9ESVIgPQotZW5kaWYKLQotaWYgVVNFX0pBQ0sKLUpBQ0tfRElSPWphY2sKLWVsc2UKLUpBQ0tfRElSPQotZW5kaWYKLQotaWYgVVNFX0pQRUcKLUpQRUdfRElSID0ganBlZwotZWxzZQotSlBFR19ESVIgPQotZW5kaWYKLQotaWYgVVNFX0xJQkNBQ0EKLUxJQkNBQ0FfRElSID0gbGliY2FjYQotZWxzZQotTElCQ0FDQV9ESVIgPQotZW5kaWYKLQotaWYgVVNFX0xJQkRWCi1MSUJEVl9ESVIgPSBkdgotZWxzZQotTElCRFZfRElSID0KLWVuZGlmCi0KLWlmIFVTRV9MSUJQTkcKLUxJQlBOR19ESVIgPSBsaWJwbmcKLWVsc2UKLUxJQlBOR19ESVIgPQotZW5kaWYKLQotaWYgVVNFX0RWMTM5NAotRFYxMzk0X0RJUiA9IHJhdzEzOTQKLWVsc2UKLURWMTM5NF9ESVIgPQotZW5kaWYKLQotaWYgVVNFX1BVTFNFCi1QVUxTRV9ESVIgPSBwdWxzZQotZWxzZQotUFVMU0VfRElSID0KLWVuZGlmCi0KLQotaWYgVVNFX1NIT1VUMgotU0hPVVQyX0RJUiA9IHNob3V0MgotZWxzZQotU0hPVVQyX0RJUiA9Ci1lbmRpZgotCi1pZiBVU0VfU09VUAotU09VUF9ESVI9c291cAotZWxzZQotU09VUF9ESVI9Ci1lbmRpZgotCi1pZiBVU0VfU1BFRVgKLVNQRUVYX0RJUiA9IHNwZWV4Ci1lbHNlCi1TUEVFWF9ESVIgPQotZW5kaWYKLQotaWYgVVNFX1RBR0xJQgotVEFHTElCX0RJUiA9IHRhZ2xpYgotZWxzZQotVEFHTElCX0RJUiA9Ci1lbmRpZgotCi1pZiBVU0VfVlBYCi1WUFhfRElSPXZweAotZWxzZQotVlBYX0RJUj0KLWVuZGlmCi0KLWlmIFVTRV9XQVZQQUNLCi1XQVZQQUNLX0RJUj13YXZwYWNrCi1lbHNlCi1XQVZQQUNLX0RJUj0KLWVuZGlmCi0KLVNVQkRJUlMgPSBcCi0JJChBQUxJQl9ESVIpIFwKLQkkKENBSVJPX0RJUikgXAotCSQoRFYxMzk0X0RJUikgXAotCSQoRkxBQ19ESVIpIFwKLQkkKEdES19QSVhCVUZfRElSKSBcCi0JJChKQUNLX0RJUikgXAotCSQoSlBFR19ESVIpIFwKLQkkKExJQkNBQ0FfRElSKSBcCi0JJChMSUJEVl9ESVIpIFwKLQkkKExJQk1OR19ESVIpIFwKLQkkKExJQlBOR19ESVIpIFwKLQkkKFBVTFNFX0RJUikgXAotCSQoU0hPVVQyX0RJUikgXAotCSQoU09VUF9ESVIpIFwKLQkkKFNQRUVYX0RJUikgXAotCSQoVEFHTElCX0RJUikgXAotCSQoVlBYX0RJUikgXAotCSQoV0FWUEFDS19ESVIpCi0KLURJU1RfU1VCRElSUyA9IFwKLQlhYWxpYiBcCi0JY2Fpcm8gXAotCWR2IFwKLQlmbGFjIFwKLQlnZGtfcGl4YnVmIFwKLQlqYWNrIFwKLQlqcGVnIFwKLQlsaWJjYWNhIFwKLQlsaWJwbmcgXAotCXB1bHNlIFwKLQlyYXcxMzk0IFwKLQlzaG91dDIgXAotCXNvdXAgXAotCXNwZWV4IFwKLQl0YWdsaWIgXAotCXZweCBcCi0Jd2F2cGFjawotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCmRpZmYgLS1naXQgYS9leHQvTWFrZWZpbGUuaW4gYi9leHQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMDQ2YjIuLjAwMDAwMDAKLS0tIGEvZXh0L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTQ5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIGluY2x1ZGUgdGhpcyBhdCB0aGUgZW5kIG9mICRNT0RVTEUvZXh0L01ha2VmaWxlLmFtIHRvIGZvcmNlIG1ha2UgdG8KLSMgYnVpbGQgc3ViZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWwgd2hlbiBtYWtlIC1qTiBpcyB1c2VkLiBXZSB3aWxsIGVuZCB1cAotIyBkZXNjZW5kaW5nIGludG8gYWxsIHN1YmRpcmVjdG9yaWVzIGEgc2Vjb25kIHRpbWUsIGJ1dCBvbmx5IGFmdGVyIHRoZSBmaXJzdAotIyAocGFyYWxsZWwpIHJ1biBoYXMgZmluaXNoZWQsIHNvIGl0IHNob3VsZCBnbyByaWdodCB0aHJvdWdoIHRoZSBzZWNvbmQgdGltZS4KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGV4dAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGNzY29wZWxpc3QtcmVjdXJzaXZlIFwKLQljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWR2aS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAotCWluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgXAotCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSBcCi0JdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLVJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCi0gIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLWFtX19yZWN1cnNpdmVfdGFyZ2V0cyA9IFwKLSAgJChSRUNVUlNJVkVfVEFSR0VUUykgXAotICAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSBcCi0gICQoYW1fX2V4dHJhX3JlY3Vyc2l2ZV90YXJnZXRzKQotQU1fUkVDVVJTSVZFX1RBUkdFVFMgPSAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0czotcmVjdXJzaXZlPSkgVEFHUyBDVEFHUyBcCi0JZGlzdGRpcgotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAotCSQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotYW1fX3JlbGF0aXZpemUgPSBcCi0gIGRpcjA9YHB3ZGA7IFwKLSAgc2VkX2ZpcnN0PSdzLF5cKFteL10qXCkvLiokJCxcMSwnOyBcCi0gIHNlZF9yZXN0PSdzLF5bXi9dKi8qLCwnOyBcCi0gIHNlZF9sYXN0PSdzLF4uKi9cKFteL10qXCkkJCxcMSwnOyBcCi0gIHNlZF9idXRsYXN0PSdzLC8qW14vXSokJCwsJzsgXAotICB3aGlsZSB0ZXN0IC1uICIkJGRpcjEiOyBkbyBcCi0gICAgZmlyc3Q9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICBpZiB0ZXN0ICIkJGZpcnN0IiAhPSAiLiI7IHRoZW4gXAotICAgICAgaWYgdGVzdCAiJCRmaXJzdCIgPSAiLi4iOyB0aGVuIFwKLSAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfbGFzdCJgLyIkJGRpcjIiOyBcCi0gICAgICAgIGRpcjA9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2J1dGxhc3QiYDsgXAotICAgICAgZWxzZSBcCi0gICAgICAgIGZpcnN0Mj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgICAgICBpZiB0ZXN0ICIkJGZpcnN0MiIgPSAiJCRmaXJzdCI7IHRoZW4gXAotICAgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICAgICAgICBlbHNlIFwKLSAgICAgICAgICBkaXIyPSIuLi8kJGRpcjIiOyBcCi0gICAgICAgIGZpOyBcCi0gICAgICAgIGRpcjA9IiQkZGlyMCIvIiQkZmlyc3QiOyBcCi0gICAgICBmaTsgXAotICAgIGZpOyBcCi0gICAgZGlyMT1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gIGRvbmU7IFwKLSAgcmVsZGlyPSIkJGRpcjIiCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUBVU0VfQUFMSUJfRkFMU0VAQUFMSUJfRElSID0gCi1AVVNFX0FBTElCX1RSVUVAQUFMSUJfRElSID0gYWFsaWIKLUBVU0VfQ0FJUk9fRkFMU0VAQ0FJUk9fRElSID0gCi1AVVNFX0NBSVJPX1RSVUVAQ0FJUk9fRElSID0gY2Fpcm8KLUBVU0VfRkxBQ19GQUxTRUBGTEFDX0RJUiA9IAotQFVTRV9GTEFDX1RSVUVARkxBQ19ESVIgPSBmbGFjCi1AVVNFX0dES19QSVhCVUZfRkFMU0VAR0RLX1BJWEJVRl9ESVIgPSAKLUBVU0VfR0RLX1BJWEJVRl9UUlVFQEdES19QSVhCVUZfRElSID0gZ2RrX3BpeGJ1ZgotQFVTRV9KQUNLX0ZBTFNFQEpBQ0tfRElSID0gCi1AVVNFX0pBQ0tfVFJVRUBKQUNLX0RJUiA9IGphY2sKLUBVU0VfSlBFR19GQUxTRUBKUEVHX0RJUiA9IAotQFVTRV9KUEVHX1RSVUVASlBFR19ESVIgPSBqcGVnCi1AVVNFX0xJQkNBQ0FfRkFMU0VATElCQ0FDQV9ESVIgPSAKLUBVU0VfTElCQ0FDQV9UUlVFQExJQkNBQ0FfRElSID0gbGliY2FjYQotQFVTRV9MSUJEVl9GQUxTRUBMSUJEVl9ESVIgPSAKLUBVU0VfTElCRFZfVFJVRUBMSUJEVl9ESVIgPSBkdgotQFVTRV9MSUJQTkdfRkFMU0VATElCUE5HX0RJUiA9IAotQFVTRV9MSUJQTkdfVFJVRUBMSUJQTkdfRElSID0gbGlicG5nCi1AVVNFX0RWMTM5NF9GQUxTRUBEVjEzOTRfRElSID0gCi1AVVNFX0RWMTM5NF9UUlVFQERWMTM5NF9ESVIgPSByYXcxMzk0Ci1AVVNFX1BVTFNFX0ZBTFNFQFBVTFNFX0RJUiA9IAotQFVTRV9QVUxTRV9UUlVFQFBVTFNFX0RJUiA9IHB1bHNlCi1AVVNFX1NIT1VUMl9GQUxTRUBTSE9VVDJfRElSID0gCi1AVVNFX1NIT1VUMl9UUlVFQFNIT1VUMl9ESVIgPSBzaG91dDIKLUBVU0VfU09VUF9GQUxTRUBTT1VQX0RJUiA9IAotQFVTRV9TT1VQX1RSVUVAU09VUF9ESVIgPSBzb3VwCi1AVVNFX1NQRUVYX0ZBTFNFQFNQRUVYX0RJUiA9IAotQFVTRV9TUEVFWF9UUlVFQFNQRUVYX0RJUiA9IHNwZWV4Ci1AVVNFX1RBR0xJQl9GQUxTRUBUQUdMSUJfRElSID0gCi1AVVNFX1RBR0xJQl9UUlVFQFRBR0xJQl9ESVIgPSB0YWdsaWIKLUBVU0VfVlBYX0ZBTFNFQFZQWF9ESVIgPSAKLUBVU0VfVlBYX1RSVUVAVlBYX0RJUiA9IHZweAotQFVTRV9XQVZQQUNLX0ZBTFNFQFdBVlBBQ0tfRElSID0gCi1AVVNFX1dBVlBBQ0tfVFJVRUBXQVZQQUNLX0RJUiA9IHdhdnBhY2sKLVNVQkRJUlMgPSBcCi0JJChBQUxJQl9ESVIpIFwKLQkkKENBSVJPX0RJUikgXAotCSQoRFYxMzk0X0RJUikgXAotCSQoRkxBQ19ESVIpIFwKLQkkKEdES19QSVhCVUZfRElSKSBcCi0JJChKQUNLX0RJUikgXAotCSQoSlBFR19ESVIpIFwKLQkkKExJQkNBQ0FfRElSKSBcCi0JJChMSUJEVl9ESVIpIFwKLQkkKExJQk1OR19ESVIpIFwKLQkkKExJQlBOR19ESVIpIFwKLQkkKFBVTFNFX0RJUikgXAotCSQoU0hPVVQyX0RJUikgXAotCSQoU09VUF9ESVIpIFwKLQkkKFNQRUVYX0RJUikgXAotCSQoVEFHTElCX0RJUikgXAotCSQoVlBYX0RJUikgXAotCSQoV0FWUEFDS19ESVIpCi0KLURJU1RfU1VCRElSUyA9IFwKLQlhYWxpYiBcCi0JY2Fpcm8gXAotCWR2IFwKLQlmbGFjIFwKLQlnZGtfcGl4YnVmIFwKLQlqYWNrIFwKLQlqcGVnIFwKLQlsaWJjYWNhIFwKLQlsaWJwbmcgXAotCXB1bHNlIFwKLQlyYXcxMzk0IFwKLQlzaG91dDIgXAotCXNvdXAgXAotCXNwZWV4IFwKLQl0YWdsaWIgXAotCXZweCBcCi0Jd2F2cGFjawotCi1hbGw6IGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrICQoYW1fX2VtcHR5KToKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi0jIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAotIyBpbnRvIHRoZW0gYW5kIHJ1biAnbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCi0jIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mICdtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCi0jICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluICdjb25maWcuc3RhdHVzJywgZWRpdCAnY29uZmlnLnN0YXR1cycKLSMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuICdtYWtlJyk7Ci0jICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgotJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpOgotCUBmYWlsPTsgXAotCWlmICQoYW1fX21ha2Vfa2VlcGdvaW5nKTsgdGhlbiBcCi0JICBmYWlsY29tPSdmYWlsPXllcyc7IFwKLQllbHNlIFwKLQkgIGZhaWxjb209J2V4aXQgMSc7IFwKLQlmaTsgXAotCWRvdF9zZWVuPW5vOyBcCi0JdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAotCWNhc2UgIiRAIiBpbiBcCi0JICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCi0JICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCi0JZXNhYzsgXAotCWZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAotCSAgICBkb3Rfc2Vlbj15ZXM7IFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKLQkgIGVsc2UgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAotCSAgZmk7IFwKLQkgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKLQkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCi0JZG9uZTsgXAotCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAotCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLXJlY3Vyc2l2ZQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD0uOyBcCi0JZWxzZSBcCi0JICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKLQkgIGVtcHR5X2ZpeD07IFwKLQlmaTsgXAotCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAotCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKLQkgIGZpOyBcCi0JZG9uZTsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLXJlY3Vyc2l2ZQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0JQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICAkKGFtX19tYWtlX2RyeXJ1bikgXAotCSAgICAgIHx8IHRlc3QgLWQgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCAkKE1LRElSX1ApICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAotCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCi0JICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAotCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAotCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAotCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCi0JCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKLQkJYW1fX3NraXBfbW9kZV9maXg9OiBcCi0JICAgICAgICBkaXN0ZGlyKSBcCi0JICAgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1yZWN1cnNpdmUKLWFsbC1hbTogTWFrZWZpbGUKLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1yZWN1cnNpdmUKLWluc3RhbGxkaXJzLWFtOgotaW5zdGFsbDogaW5zdGFsbC1yZWN1cnNpdmUKLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlCi11bmluc3RhbGw6IHVuaW5zdGFsbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLXJlY3Vyc2l2ZQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1yZWN1cnNpdmUKLQotZHZpLWFtOgotCi1odG1sOiBodG1sLXJlY3Vyc2l2ZQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLXJlY3Vyc2l2ZQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1yZWN1cnNpdmUKLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1yZWN1cnNpdmUKLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtcmVjdXJzaXZlCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLXJlY3Vyc2l2ZQotCi1wZGYtYW06Ci0KLXBzOiBwcy1yZWN1cnNpdmUKLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIFwKLQljaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCWluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBcCi0JcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLS5QSE9OWTogaW5kZXBlbmRlbnQtc3ViZGlycyAkKFNVQkRJUlMpCi0KLWluZGVwZW5kZW50LXN1YmRpcnM6ICQoU1VCRElSUykKLQotJChTVUJESVJTKToKLQkkKE1BS0UpIC1DICRACi0KLWFsbC1yZWN1cnNpdmU6IGluZGVwZW5kZW50LXN1YmRpcnMKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L2FhbGliL01ha2VmaWxlLmFtIGIvZXh0L2FhbGliL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjQ5ZTczLi4wMDAwMDAwCi0tLSBhL2V4dC9hYWxpYi9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YWFzaW5rLmxhCi0KLWxpYmdzdGFhc2lua19sYV9TT1VSQ0VTID0gZ3N0YWFzaW5rLmMKLWxpYmdzdGFhc2lua19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEFBTElCX0NGTEFHUykKLWxpYmdzdGFhc2lua19sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEFBTElCX0xJQlMpCi1saWJnc3RhYXNpbmtfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YWFzaW5rX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0YWFzaW5rLmgKZGlmZiAtLWdpdCBhL2V4dC9hYWxpYi9NYWtlZmlsZS5pbiBiL2V4dC9hYWxpYi9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwMTZmMC4uMDAwMDAwMAotLS0gYS9leHQvYWFsaWIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MTAgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L2FhbGliCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0YWFzaW5rX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RhYXNpbmtfbGFfT0JKRUNUUyA9IGxpYmdzdGFhc2lua19sYS1nc3RhYXNpbmsubG8KLWxpYmdzdGFhc2lua19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RhYXNpbmtfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGFhc2lua19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGFhc2lua19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGFhc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RhYXNpbmtfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0YWFzaW5rX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGFhc2lua19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RhYXNpbmsubGEKLWxpYmdzdGFhc2lua19sYV9TT1VSQ0VTID0gZ3N0YWFzaW5rLmMKLWxpYmdzdGFhc2lua19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEFBTElCX0NGTEFHUykKLWxpYmdzdGFhc2lua19sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEFBTElCX0xJQlMpCi1saWJnc3RhYXNpbmtfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YWFzaW5rX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGFhc2luay5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvYWFsaWIvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L2FhbGliL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0YWFzaW5rLmxhOiAkKGxpYmdzdGFhc2lua19sYV9PQkpFQ1RTKSAkKGxpYmdzdGFhc2lua19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0YWFzaW5rX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RhYXNpbmtfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGFhc2lua19sYV9PQkpFQ1RTKSAkKGxpYmdzdGFhc2lua19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGFhc2lua19sYS1nc3RhYXNpbmsuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGFhc2lua19sYS1nc3RhYXNpbmsubG86IGdzdGFhc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YWFzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGFhc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YWFzaW5rX2xhLWdzdGFhc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YWFzaW5rX2xhLWdzdGFhc2luay5UcG8gLWMgLW8gbGliZ3N0YWFzaW5rX2xhLWdzdGFhc2luay5sbyBgdGVzdCAtZiAnZ3N0YWFzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFhc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhYXNpbmtfbGEtZ3N0YWFzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0YWFzaW5rX2xhLWdzdGFhc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RhYXNpbmsuYycgb2JqZWN0PSdsaWJnc3RhYXNpbmtfbGEtZ3N0YWFzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YWFzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGFhc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhYXNpbmtfbGEtZ3N0YWFzaW5rLmxvIGB0ZXN0IC1mICdnc3RhYXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWFzaW5rLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L2FhbGliL2dzdGFhc2luay5jIGIvZXh0L2FhbGliL2dzdGFhc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODBlNDc5Li4wMDAwMDAwCi0tLSBhL2V4dC9hYWxpYi9nc3RhYXNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDU5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWFhc2luawotICogQHNlZV9hbHNvOiAjR3N0Q0FDQVNpbmsKLSAqCi0gKiBEaXNwbGF5cyB2aWRlbyBhcyBiL3cgYXNjaWkgYXJ0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXRlc3QuYXZpICEgZGVjb2RlYmluICEgdmlkZW9jb252ZXJ0ICEgYWFzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHJlbmRlcnMgYSB2aWRlbyB0byBhc2NpaSBhcnQgaW50byBhIHNlcGFyYXRlIHdpbmRvdy4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXRlc3QuYXZpICEgZGVjb2RlYmluICEgdmlkZW9jb252ZXJ0ICEgYWFzaW5rIGRyaXZlcj1jdXJzZXMKLSAqIF18IFRoaXMgcGlwZWxpbmUgcmVuZGVycyBhIHZpZGVvIHRvIGFzY2lpIGFydCBpbnRvIHRoZSBjdXJyZW50IHRlcm1pbmFsLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgotI2luY2x1ZGUgImdzdGFhc2luay5oIgotCi0vKiBhYXNpbmsgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBMQVNUX1NJR05BTAotfTsKLQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9XSURUSCwKLSAgUFJPUF9IRUlHSFQsCi0gIFBST1BfRFJJVkVSLAotICBQUk9QX0RJVEhFUiwKLSAgUFJPUF9CUklHSFRORVNTLAotICBQUk9QX0NPTlRSQVNULAotICBQUk9QX0dBTU1BLAotICBQUk9QX0lOVkVSU0lPTiwKLSAgUFJPUF9SQU5ET01WQUwsCi0gIFBST1BfRlJBTUVTX0RJU1BMQVlFRCwKLSAgUFJPUF9GUkFNRV9USU1FCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkk0MjAiKSkKLSAgICApOwotCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2Fhc2lua19maXhhdGUgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYWFzaW5rX3NldGNhcHMgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyB2b2lkIGdzdF9hYXNpbmtfZ2V0X3RpbWVzIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Fhc2lua19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdEJhc2VTaW5rICogYnNpbmssCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYWFzaW5rX3Nob3dfZnJhbWUgKEdzdFZpZGVvU2luayAqIHZpZGVvc2luaywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgdm9pZCBnc3RfYWFzaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hYXNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2Fhc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0jZGVmaW5lIGdzdF9hYXNpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QUFTaW5rLCBnc3RfYWFzaW5rLCBHU1RfVFlQRV9WSURFT19TSU5LKTsKLQotI2RlZmluZSBHU1RfVFlQRV9BQURSSVZFUlMgKGdzdF9hYXNpbmtfZHJpdmVyc19nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfYWFzaW5rX2RyaXZlcnNfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBkcml2ZXJfdHlwZSA9IDA7Ci0KLSAgaWYgKCFkcml2ZXJfdHlwZSkgewotICAgIEdFbnVtVmFsdWUgKmRyaXZlcnM7Ci0gICAgY29uc3Qgc3RydWN0IGFhX2RyaXZlciAqZHJpdmVyOwotICAgIGdpbnQgbl9kcml2ZXJzOwotICAgIGdpbnQgaTsKLQotICAgIGZvciAobl9kcml2ZXJzID0gMDsgYWFfZHJpdmVyc1tuX2RyaXZlcnNdOyBuX2RyaXZlcnMrKykgewotICAgICAgLyogY291bnQgbnVtYmVyIG9mIGRyaXZlcnMgKi8KLSAgICB9Ci0KLSAgICBkcml2ZXJzID0gZ19uZXcwIChHRW51bVZhbHVlLCBuX2RyaXZlcnMgKyAxKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuX2RyaXZlcnM7IGkrKykgewotICAgICAgZHJpdmVyID0gYWFfZHJpdmVyc1tpXTsKLSAgICAgIGRyaXZlcnNbaV0udmFsdWUgPSBpOwotICAgICAgZHJpdmVyc1tpXS52YWx1ZV9uYW1lID0gZ19zdHJkdXAgKGRyaXZlci0+bmFtZSk7Ci0gICAgICBkcml2ZXJzW2ldLnZhbHVlX25pY2sgPSBnX3V0Zjhfc3RyZG93biAoZHJpdmVyLT5zaG9ydG5hbWUsIC0xKTsKLSAgICB9Ci0gICAgZHJpdmVyc1tpXS52YWx1ZSA9IDA7Ci0gICAgZHJpdmVyc1tpXS52YWx1ZV9uYW1lID0gTlVMTDsKLSAgICBkcml2ZXJzW2ldLnZhbHVlX25pY2sgPSBOVUxMOwotCi0gICAgZHJpdmVyX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QUFTaW5rRHJpdmVycyIsIGRyaXZlcnMpOwotICB9Ci0gIHJldHVybiBkcml2ZXJfdHlwZTsKLX0KLQotI2RlZmluZSBHU1RfVFlQRV9BQURJVEhFUiAoZ3N0X2Fhc2lua19kaXRoZXJfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2Fhc2lua19kaXRoZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBkaXRoZXJfdHlwZSA9IDA7Ci0KLSAgaWYgKCFkaXRoZXJfdHlwZSkgewotICAgIEdFbnVtVmFsdWUgKmRpdGhlcmVyczsKLSAgICBnaW50IG5fZGl0aGVyZXJzOwotICAgIGdpbnQgaTsKLQotICAgIGZvciAobl9kaXRoZXJlcnMgPSAwOyBhYV9kaXRoZXJuYW1lc1tuX2RpdGhlcmVyc107IG5fZGl0aGVyZXJzKyspIHsKLSAgICAgIC8qIGNvdW50IG51bWJlciBvZiBkaXRoZXJlcnMgKi8KLSAgICB9Ci0KLSAgICBkaXRoZXJlcnMgPSBnX25ldzAgKEdFbnVtVmFsdWUsIG5fZGl0aGVyZXJzICsgMSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbl9kaXRoZXJlcnM7IGkrKykgewotICAgICAgZGl0aGVyZXJzW2ldLnZhbHVlID0gaTsKLSAgICAgIGRpdGhlcmVyc1tpXS52YWx1ZV9uYW1lID0gZ19zdHJkdXAgKGFhX2RpdGhlcm5hbWVzW2ldKTsKLSAgICAgIGRpdGhlcmVyc1tpXS52YWx1ZV9uaWNrID0KLSAgICAgICAgICBnX3N0cmRlbGltaXQgKGdfc3RyZHVwIChhYV9kaXRoZXJuYW1lc1tpXSksICIgXyIsICctJyk7Ci0gICAgfQotICAgIGRpdGhlcmVyc1tpXS52YWx1ZSA9IDA7Ci0gICAgZGl0aGVyZXJzW2ldLnZhbHVlX25hbWUgPSBOVUxMOwotICAgIGRpdGhlcmVyc1tpXS52YWx1ZV9uaWNrID0gTlVMTDsKLQotICAgIGRpdGhlcl90eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEFBU2lua0RpdGhlcmVycyIsIGRpdGhlcmVycyk7Ci0gIH0KLSAgcmV0dXJuIGRpdGhlcl90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Fhc2lua19jbGFzc19pbml0IChHc3RBQVNpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3M7Ci0gIEdzdFZpZGVvU2lua0NsYXNzICpnc3R2aWRlb3NpbmtfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc2lua19jbGFzcyA9IChHc3RCYXNlU2lua0NsYXNzICopIGtsYXNzOwotICBnc3R2aWRlb3NpbmtfY2xhc3MgPSAoR3N0VmlkZW9TaW5rQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Fhc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hYXNpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIC8qIEZJWE1FOiBhZGQgbG9uZyBwcm9wZXJ0eSBkZXNjcmlwdGlvbnMgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9XSURUSCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ3aWR0aCIsICJ3aWR0aCIsICJ3aWR0aCIsIEdfTUlOSU5ULCBHX01BWElOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9IRUlHSFQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiaGVpZ2h0IiwgImhlaWdodCIsICJoZWlnaHQiLCBHX01JTklOVCwgR19NQVhJTlQsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfRFJJVkVSLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJkcml2ZXIiLCAiZHJpdmVyIiwgImRyaXZlciIsIEdTVF9UWVBFX0FBRFJJVkVSUywgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9ESVRIRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImRpdGhlciIsICJkaXRoZXIiLCAiZGl0aGVyIiwgR1NUX1RZUEVfQUFESVRIRVIsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQlJJR0hUTkVTUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJicmlnaHRuZXNzIiwgImJyaWdodG5lc3MiLCAiYnJpZ2h0bmVzcyIsIEdfTUlOSU5ULAotICAgICAgICAgIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9DT05UUkFTVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJjb250cmFzdCIsICJjb250cmFzdCIsICJjb250cmFzdCIsIEdfTUlOSU5ULCBHX01BWElOVCwKLSAgICAgICAgICAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9HQU1NQSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImdhbW1hIiwgImdhbW1hIiwgImdhbW1hIiwgMC4wLCA1LjAsIDEuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9JTlZFUlNJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImludmVyc2lvbiIsICJpbnZlcnNpb24iLCAiaW52ZXJzaW9uIiwgVFJVRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9SQU5ET01WQUwsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicmFuZG9tdmFsIiwgInJhbmRvbXZhbCIsICJyYW5kb212YWwiLCBHX01JTklOVCwKLSAgICAgICAgICBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX0ZSQU1FU19ESVNQTEFZRUQsIGdfcGFyYW1fc3BlY19pbnQgKCJmcmFtZXMtZGlzcGxheWVkIiwKLSAgICAgICAgICAiZnJhbWVzIGRpc3BsYXllZCIsICJmcmFtZXMgZGlzcGxheWVkIiwgR19NSU5JTlQsIEdfTUFYSU5ULCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfRlJBTUVfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJmcmFtZS10aW1lIiwgImZyYW1lIHRpbWUiLCAiZnJhbWUgdGltZSIsIEdfTUlOSU5ULAotICAgICAgICAgIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJBU0NJSSBhcnQgdmlkZW8gc2luayIsICJTaW5rL1ZpZGVvIiwgIkFuIEFTQ0lJIGFydCB2aWRlb3NpbmsiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+Iik7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYXNpbmtfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RiYXNlc2lua19jbGFzcy0+Zml4YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYXNpbmtfZml4YXRlKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnNldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYXNpbmtfc2V0Y2Fwcyk7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT5nZXRfdGltZXMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Fhc2lua19nZXRfdGltZXMpOwotICBnc3RiYXNlc2lua19jbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWFzaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbik7Ci0KLSAgZ3N0dmlkZW9zaW5rX2NsYXNzLT5zaG93X2ZyYW1lID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYXNpbmtfc2hvd19mcmFtZSk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9hYXNpbmtfZml4YXRlIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChzdHJ1Y3R1cmUsICJ3aWR0aCIsIDMyMCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAyNDApOwotICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAzMCwgMSk7Ci0KLSAgY2FwcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpeGF0ZSAoYnNpbmssIGNhcHMpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYXNpbmtfc2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEFBU2luayAqYWFzaW5rOwotICBHc3RWaWRlb0luZm8gaW5mbzsKLQotICBhYXNpbmsgPSBHU1RfQUFTSU5LIChiYXNlc2luayk7Ci0KLSAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBhYXNpbmstPmluZm8gPSBpbmZvOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9jYXBzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWFzaW5rLCAiaW52YWxpZCBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWFzaW5rX2luaXQgKEdzdEFBU2luayAqIGFhc2luaykKLXsKLSAgbWVtY3B5ICgmYWFzaW5rLT5hc2NpaV9zdXJmLCAmYWFfZGVmcGFyYW1zLAotICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWFfaGFyZHdhcmVfcGFyYW1zKSk7Ci0gIGFhc2luay0+YXNjaWlfcGFybXMuYnJpZ2h0ID0gMDsKLSAgYWFzaW5rLT5hc2NpaV9wYXJtcy5jb250cmFzdCA9IDE2OwotICBhYXNpbmstPmFzY2lpX3Bhcm1zLmdhbW1hID0gMS4wOwotICBhYXNpbmstPmFzY2lpX3Bhcm1zLmRpdGhlciA9IDA7Ci0gIGFhc2luay0+YXNjaWlfcGFybXMuaW52ZXJzaW9uID0gMDsKLSAgYWFzaW5rLT5hc2NpaV9wYXJtcy5yYW5kb212YWwgPSAwOwotICBhYXNpbmstPmFhX2RyaXZlciA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWFzaW5rX3NjYWxlIChHc3RBQVNpbmsgKiBhYXNpbmssIGd1Y2hhciAqIHNyYywgZ3VjaGFyICogZGVzdCwKLSAgICBnaW50IHN3LCBnaW50IHNoLCBnaW50IHNzLCBnaW50IGR3LCBnaW50IGRoKQotewotICBnaW50IHlwb3MsIHlpbmMsIHk7Ci0gIGdpbnQgeHBvcywgeGluYywgeDsKLQotICBnX3JldHVybl9pZl9mYWlsICgoZHcgIT0gMCkgJiYgKGRoICE9IDApKTsKLQotICB5cG9zID0gMHgxMDAwMDsKLSAgeWluYyA9IChzaCA8PCAxNikgLyBkaDsKLSAgeGluYyA9IChzdyA8PCAxNikgLyBkdzsKLQotICBmb3IgKHkgPSBkaDsgeTsgeS0tKSB7Ci0gICAgd2hpbGUgKHlwb3MgPiAweDEwMDAwKSB7Ci0gICAgICB5cG9zIC09IDB4MTAwMDA7Ci0gICAgICBzcmMgKz0gc3M7Ci0gICAgfQotICAgIHhwb3MgPSAweDEwMDAwOwotICAgIHsKLSAgICAgIGd1Y2hhciAqZGVzdHAgPSBkZXN0OwotICAgICAgZ3VjaGFyICpzcmNwID0gc3JjOwotCi0gICAgICBmb3IgKHggPSBkdzsgeDsgeC0tKSB7Ci0gICAgICAgIHdoaWxlICh4cG9zID49IDB4MTAwMDBMKSB7Ci0gICAgICAgICAgc3JjcCsrOwotICAgICAgICAgIHhwb3MgLT0gMHgxMDAwMEw7Ci0gICAgICAgIH0KLSAgICAgICAgKmRlc3RwKysgPSAqc3JjcDsKLSAgICAgICAgeHBvcyArPSB4aW5jOwotICAgICAgfQotICAgIH0KLSAgICBkZXN0ICs9IGR3OwotICAgIHlwb3MgKz0geWluYzsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Fhc2lua19nZXRfdGltZXMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdENsb2NrVGltZSAqIHN0YXJ0LCBHc3RDbG9ja1RpbWUgKiBlbmQpCi17Ci0gICpzdGFydCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOwotICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSkKLSAgICAqZW5kID0gKnN0YXJ0ICsgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYWFzaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbiAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0gIGd1aW50IHNpemU7Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24gKHF1ZXJ5LCAmY2FwcywgTlVMTCk7Ci0KLSAgaWYgKGNhcHMgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBzaXplID0gR1NUX1ZJREVPX0lORk9fU0laRSAoJmluZm8pOwotCi0gIC8qIHdlIG5lZWQgYXQgbGVhc3QgMiBidWZmZXIgYmVjYXVzZSB3ZSBob2xkIG9uIHRvIHRoZSBsYXN0IG9uZSAqLwotICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIE5VTEwsIHNpemUsIDIsIDApOwotCi0gIC8qIHdlIHN1cHBvcnQgdmFyaW91cyBtZXRhZGF0YSAqLwotICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YSAocXVlcnksIEdTVF9WSURFT19NRVRBX0FQSV9UWVBFLCBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2NhcHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChic2luaywgIm5vIGNhcHMgc3BlY2lmaWVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX2NhcHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChic2luaywgImludmFsaWQgY2FwcyBzcGVjaWZpZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hYXNpbmtfc2hvd19mcmFtZSAoR3N0VmlkZW9TaW5rICogdmlkZW9zaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEFBU2luayAqYWFzaW5rOwotICBHc3RWaWRlb0ZyYW1lIGZyYW1lOwotCi0gIGFhc2luayA9IEdTVF9BQVNJTksgKHZpZGVvc2luayk7Ci0KLSAgR1NUX0RFQlVHICgic2hvdyBmcmFtZSIpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmZyYW1lLCAmYWFzaW5rLT5pbmZvLCBidWZmZXIsIEdTVF9NQVBfUkVBRCkpCi0gICAgZ290byBpbnZhbGlkX2ZyYW1lOwotCi0gIGdzdF9hYXNpbmtfc2NhbGUgKGFhc2luaywgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKCZmcmFtZSwgMCksICAgICAvKiBzcmMgKi8KLSAgICAgIGFhX2ltYWdlIChhYXNpbmstPmNvbnRleHQpLCAgICAgICAvKiBkZXN0ICovCi0gICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoJmFhc2luay0+aW5mbyksICAgICAvKiBzdyAqLwotICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmYWFzaW5rLT5pbmZvKSwgICAgLyogc2ggKi8KLSAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKCZmcmFtZSwgMCksIC8qIHNzICovCi0gICAgICBhYV9pbWd3aWR0aCAoYWFzaW5rLT5jb250ZXh0KSwgICAgLyogZHcgKi8KLSAgICAgIGFhX2ltZ2hlaWdodCAoYWFzaW5rLT5jb250ZXh0KSk7ICAvKiBkaCAqLwotCi0gIGFhX3JlbmRlciAoYWFzaW5rLT5jb250ZXh0LCAmYWFzaW5rLT5hc2NpaV9wYXJtcywKLSAgICAgIDAsIDAsIGFhX2ltZ3dpZHRoIChhYXNpbmstPmNvbnRleHQpLCBhYV9pbWdoZWlnaHQgKGFhc2luay0+Y29udGV4dCkpOwotICBhYV9mbHVzaCAoYWFzaW5rLT5jb250ZXh0KTsKLSAgYWFfZ2V0ZXZlbnQgKGFhc2luay0+Y29udGV4dCwgRkFMU0UpOwotICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9mcmFtZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFhc2luaywgImludmFsaWQgZnJhbWUiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X2Fhc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QUFTaW5rICphYXNpbms7Ci0KLSAgYWFzaW5rID0gR1NUX0FBU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfV0lEVEg6Ci0gICAgICBhYXNpbmstPmFzY2lpX3N1cmYud2lkdGggPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9IRUlHSFQ6Ci0gICAgICBhYXNpbmstPmFzY2lpX3N1cmYuaGVpZ2h0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFJJVkVSOnsKLSAgICAgIGFhc2luay0+YWFfZHJpdmVyID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9ESVRIRVI6ewotICAgICAgYWFzaW5rLT5hc2NpaV9wYXJtcy5kaXRoZXIgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0JSSUdIVE5FU1M6ewotICAgICAgYWFzaW5rLT5hc2NpaV9wYXJtcy5icmlnaHQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQ09OVFJBU1Q6ewotICAgICAgYWFzaW5rLT5hc2NpaV9wYXJtcy5jb250cmFzdCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9HQU1NQTp7Ci0gICAgICBhYXNpbmstPmFzY2lpX3Bhcm1zLmdhbW1hID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSU5WRVJTSU9OOnsKLSAgICAgIGFhc2luay0+YXNjaWlfcGFybXMuaW52ZXJzaW9uID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SQU5ET01WQUw6ewotICAgICAgYWFzaW5rLT5hc2NpaV9wYXJtcy5yYW5kb212YWwgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hYXNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEFBU2luayAqYWFzaW5rOwotCi0gIGFhc2luayA9IEdTVF9BQVNJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1dJRFRIOnsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGFhc2luay0+YXNjaWlfc3VyZi53aWR0aCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0hFSUdIVDp7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBhYXNpbmstPmFzY2lpX3N1cmYuaGVpZ2h0KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfRFJJVkVSOnsKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBhYXNpbmstPmFhX2RyaXZlcik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0RJVEhFUjp7Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgYWFzaW5rLT5hc2NpaV9wYXJtcy5kaXRoZXIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9CUklHSFRORVNTOnsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGFhc2luay0+YXNjaWlfcGFybXMuYnJpZ2h0KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQ09OVFJBU1Q6ewotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgYWFzaW5rLT5hc2NpaV9wYXJtcy5jb250cmFzdCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0dBTU1BOnsKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgYWFzaW5rLT5hc2NpaV9wYXJtcy5nYW1tYSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0lOVkVSU0lPTjp7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgYWFzaW5rLT5hc2NpaV9wYXJtcy5pbnZlcnNpb24pOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SQU5ET01WQUw6ewotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgYWFzaW5rLT5hc2NpaV9wYXJtcy5yYW5kb212YWwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9GUkFNRVNfRElTUExBWUVEOnsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGFhc2luay0+ZnJhbWVzX2Rpc3BsYXllZCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0ZSQU1FX1RJTUU6ewotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgYWFzaW5rLT5mcmFtZV90aW1lIC8gMTAwMDAwMCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDp7Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Fhc2lua19vcGVuIChHc3RBQVNpbmsgKiBhYXNpbmspCi17Ci0gIGlmICghYWFzaW5rLT5jb250ZXh0KSB7Ci0gICAgYWFfcmVjb21tZW5kaGlkaXNwbGF5IChhYV9kcml2ZXJzW2Fhc2luay0+YWFfZHJpdmVyXS0+c2hvcnRuYW1lKTsKLQotICAgIGFhc2luay0+Y29udGV4dCA9IGFhX2F1dG9pbml0ICgmYWFzaW5rLT5hc2NpaV9zdXJmKTsKLSAgICBpZiAoYWFzaW5rLT5jb250ZXh0ID09IE5VTEwpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChHU1RfRUxFTUVOVCAoYWFzaW5rKSwgTElCUkFSWSwgVE9PX0xBWlksIChOVUxMKSwKLSAgICAgICAgICAoImVycm9yIG9wZW5pbmcgYWFsaWIgY29udGV4dCIpKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgYWFfYXV0b2luaXRrYmQgKGFhc2luay0+Y29udGV4dCwgMCk7Ci0gICAgYWFfcmVzaXplaGFuZGxlciAoYWFzaW5rLT5jb250ZXh0LCAodm9pZCAqKSBhYV9yZXNpemUpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYXNpbmtfY2xvc2UgKEdzdEFBU2luayAqIGFhc2luaykKLXsKLSAgYWFfY2xvc2UgKGFhc2luay0+Y29udGV4dCk7Ci0gIGFhc2luay0+Y29udGV4dCA9IE5VTEw7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2Fhc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBpZiAoIWdzdF9hYXNpbmtfb3BlbiAoR1NUX0FBU0lOSyAoZWxlbWVudCkpKQotICAgICAgICBnb3RvIG9wZW5fZmFpbGVkOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgZ3N0X2Fhc2lua19jbG9zZSAoR1NUX0FBU0lOSyAoZWxlbWVudCkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYWFzaW5rIiwgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfQUFTSU5LKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBhYXNpbmssCi0gICAgIkFTQ0lJIEFydCB2aWRlbyBzaW5rIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvZXh0L2FhbGliL2dzdGFhc2luay5oIGIvZXh0L2FhbGliL2dzdGFhc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzg2YzI1Li4wMDAwMDAwCi0tLSBhL2V4dC9hYWxpYi9nc3RhYXNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfQUFTSU5LX0hfXwotI2RlZmluZSBfX0dTVF9BQVNJTktfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgotCi0jaW5jbHVkZSA8YWFsaWIuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwotCi0KLSNkZWZpbmUgR1NUX1RZUEVfQUFTSU5LIFwKLSAgKGdzdF9hYXNpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FBU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FBU0lOSyxHc3RBQVNpbmspKQotI2RlZmluZSBHU1RfQUFTSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FBU0lOSyxHc3RBQVNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BQVNJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BQVNJTkspKQotI2RlZmluZSBHU1RfSVNfQUFTSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FBU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBQVNpbmsgR3N0QUFTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFBU2lua0NsYXNzIEdzdEFBU2lua0NsYXNzOwotCi1zdHJ1Y3QgX0dzdEFBU2luayB7Ci0gIEdzdFZpZGVvU2luayBwYXJlbnQ7Ci0KLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgZ2ludCBmcmFtZXNfZGlzcGxheWVkOwotICBndWludDY0IGZyYW1lX3RpbWU7Ci0KLSAgYWFfY29udGV4dCAqY29udGV4dDsKLSAgc3RydWN0IGFhX2hhcmR3YXJlX3BhcmFtcyBhc2NpaV9zdXJmOwotICBzdHJ1Y3QgYWFfcmVuZGVycGFyYW1zIGFzY2lpX3Bhcm1zOwotICBhYV9wYWxldHRlIHBhbGV0dGU7Ci0gIGdpbnQgYWFfZHJpdmVyOwotfTsKLQotc3RydWN0IF9Hc3RBQVNpbmtDbGFzcyB7Ci0gIEdzdFZpZGVvU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9hYXNpbmtfZ2V0X3R5cGUodm9pZCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCi0KLQotI2VuZGlmIC8qIF9fR1NUX0FBU0lOS0VfSF9fICovCmRpZmYgLS1naXQgYS9leHQvY2Fpcm8vTWFrZWZpbGUuYW0gYi9leHQvY2Fpcm8vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMGI1N2IuLjAwMDAwMDAKLS0tIGEvZXh0L2NhaXJvL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Y2Fpcm8ubGEKLQotbm9pbnN0X0hFQURFUlMgPSBcCi0JZ3N0Y2Fpcm9vdmVybGF5LmgKLWxpYmdzdGNhaXJvX2xhX1NPVVJDRVMgPSBcCi0JZ3N0Y2Fpcm8uYyBcCi0JZ3N0Y2Fpcm9vdmVybGF5LmMKLWxpYmdzdGNhaXJvX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpICQoQ0FJUk9fQ0ZMQUdTKQotbGliZ3N0Y2Fpcm9fbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKENBSVJPX0xJQlMpICQoTElCTSkKLWxpYmdzdGNhaXJvX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGNhaXJvX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KZGlmZiAtLWdpdCBhL2V4dC9jYWlyby9NYWtlZmlsZS5pbiBiL2V4dC9jYWlyby9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2OGRiNi4uMDAwMDAwMAotLS0gYS9leHQvY2Fpcm8vTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MzEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L2NhaXJvCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0Y2Fpcm9fbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RjYWlyb19sYV9PQkpFQ1RTID0gbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm8ubG8gXAotCWxpYmdzdGNhaXJvX2xhLWdzdGNhaXJvb3ZlcmxheS5sbwotbGliZ3N0Y2Fpcm9fbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0Y2Fpcm9fbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGNhaXJvX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0Y2Fpcm9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RjYWlyb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RjYWlyb19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RjYWlyb19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RjYWlyb19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RjYWlyby5sYQotbm9pbnN0X0hFQURFUlMgPSBcCi0JZ3N0Y2Fpcm9vdmVybGF5LmgKLQotbGliZ3N0Y2Fpcm9fbGFfU09VUkNFUyA9IFwKLQlnc3RjYWlyby5jIFwKLQlnc3RjYWlyb292ZXJsYXkuYwotCi1saWJnc3RjYWlyb19sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSAkKENBSVJPX0NGTEFHUykKLQotbGliZ3N0Y2Fpcm9fbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKENBSVJPX0xJQlMpICQoTElCTSkKLQotbGliZ3N0Y2Fpcm9fbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0Y2Fpcm9fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGV4dC9jYWlyby9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvY2Fpcm8vTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RjYWlyby5sYTogJChsaWJnc3RjYWlyb19sYV9PQkpFQ1RTKSAkKGxpYmdzdGNhaXJvX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RjYWlyb19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0Y2Fpcm9fbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGNhaXJvX2xhX09CSkVDVFMpICQobGliZ3N0Y2Fpcm9fbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RjYWlyb19sYS1nc3RjYWlyby5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGNhaXJvX2xhLWdzdGNhaXJvb3ZlcmxheS5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm8ubG86IGdzdGNhaXJvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RjYWlyb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RjYWlyb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNhaXJvX2xhLWdzdGNhaXJvLlRwbyAtYyAtbyBsaWJnc3RjYWlyb19sYS1nc3RjYWlyby5sbyBgdGVzdCAtZiAnZ3N0Y2Fpcm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2Fpcm8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm8uVHBvICQoREVQRElSKS9saWJnc3RjYWlyb19sYS1nc3RjYWlyby5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RjYWlyby5jJyBvYmplY3Q9J2xpYmdzdGNhaXJvX2xhLWdzdGNhaXJvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y2Fpcm9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2Fpcm9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm8ubG8gYHRlc3QgLWYgJ2dzdGNhaXJvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNhaXJvLmMKLQotbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm9vdmVybGF5LmxvOiBnc3RjYWlyb292ZXJsYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNhaXJvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNhaXJvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RjYWlyb19sYS1nc3RjYWlyb292ZXJsYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGNhaXJvX2xhLWdzdGNhaXJvb3ZlcmxheS5UcG8gLWMgLW8gbGliZ3N0Y2Fpcm9fbGEtZ3N0Y2Fpcm9vdmVybGF5LmxvIGB0ZXN0IC1mICdnc3RjYWlyb292ZXJsYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y2Fpcm9vdmVybGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNhaXJvX2xhLWdzdGNhaXJvb3ZlcmxheS5UcG8gJChERVBESVIpL2xpYmdzdGNhaXJvX2xhLWdzdGNhaXJvb3ZlcmxheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RjYWlyb292ZXJsYXkuYycgb2JqZWN0PSdsaWJnc3RjYWlyb19sYS1nc3RjYWlyb292ZXJsYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RjYWlyb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RjYWlyb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RjYWlyb19sYS1nc3RjYWlyb292ZXJsYXkubG8gYHRlc3QgLWYgJ2dzdGNhaXJvb3ZlcmxheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYWlyb292ZXJsYXkuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9leHQvY2Fpcm8vZ3N0Y2Fpcm8uYyBiL2V4dC9jYWlyby9nc3RjYWlyby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yjk0Mzg3Li4wMDAwMDAwCi0tLSBhL2V4dC9jYWlyby9nc3RjYWlyby5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwMywyMDA0PiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3RjYWlyb292ZXJsYXkuaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZIChjYWlyb19kZWJ1Zyk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImNhaXJvb3ZlcmxheSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9DQUlST19PVkVSTEFZKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoY2Fpcm9fZGVidWcsICJjYWlybyIsIDAsICJDYWlybyBlbGVtZW50cyIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCBjYWlybywKLSAgICAiQ2Fpcm8tYmFzZWQgZWxlbWVudHMiLCBwbHVnaW5faW5pdCwgVkVSU0lPTiwKLSAgICBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2V4dC9jYWlyby9nc3RjYWlyb292ZXJsYXkuYyBiL2V4dC9jYWlyby9nc3RjYWlyb292ZXJsYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhNGM1My4uMDAwMDAwMAotLS0gYS9leHQvY2Fpcm8vZ3N0Y2Fpcm9vdmVybGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDExPiBKb24gTm9yZGJ5IDxqb25vbm9yQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1jYWlyb292ZXJsYXkKLSAqCi0gKiBjYWlyb292ZXJsYXkgcmVuZGVycyBhbiBvdmVybGF5IHVzaW5nIGEgYXBwbGljYXRpb24gcHJvdmlkZWQgcmVuZGVyIGZ1bmN0aW9uLgotICoKLSAqIFRoZSBmdWxsIGV4YW1wbGUgY2FuIGJlIGZvdW5kIGluIHRlc3RzL2V4YW1wbGVzL2NhaXJvL2NhaXJvX292ZXJsYXkuYwotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgY29kZTwvdGl0bGU+Ci0gKiB8WwotICoKLSAqICNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0gKiAjaW5jbHVkZSAmbHQ7Z3N0L3ZpZGVvL3ZpZGVvLmgmZ3Q7Ci0gKgotICogLi4uCi0gKgotICogdHlwZWRlZiBzdHJ1Y3QgewotICogICBnYm9vbGVhbiB2YWxpZDsKLSAqICAgaW50IHdpZHRoOwotICogICBpbnQgaGVpZ2h0OwotICogfSBDYWlyb092ZXJsYXlTdGF0ZTsKLSAqIAotICogLi4uCi0gKgotICogc3RhdGljIHZvaWQKLSAqIHByZXBhcmVfb3ZlcmxheSAoR3N0RWxlbWVudCAqIG92ZXJsYXksIEdzdENhcHMgKiBjYXBzLCBncG9pbnRlciB1c2VyX2RhdGEpCi0gKiB7Ci0gKiAgIENhaXJvT3ZlcmxheVN0YXRlICpzdGF0ZSA9IChDYWlyb092ZXJsYXlTdGF0ZSAqKXVzZXJfZGF0YTsKLSAqCi0gKiAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyAoY2FwcywgTlVMTCwgJmFtcDtzdGF0ZS0mZ3Q7d2lkdGgsICZhbXA7c3RhdGUtJmd0O2hlaWdodCk7Ci0gKiAgIHN0YXRlLSZndDt2YWxpZCA9IFRSVUU7Ci0gKiB9Ci0gKgotICogc3RhdGljIHZvaWQKLSAqIGRyYXdfb3ZlcmxheSAoR3N0RWxlbWVudCAqIG92ZXJsYXksIGNhaXJvX3QgKiBjciwgZ3VpbnQ2NCB0aW1lc3RhbXAsIAotICogICBndWludDY0IGR1cmF0aW9uLCBncG9pbnRlciB1c2VyX2RhdGEpCi0gKiB7Ci0gKiAgIENhaXJvT3ZlcmxheVN0YXRlICpzID0gKENhaXJvT3ZlcmxheVN0YXRlICopdXNlcl9kYXRhOwotICogICBkb3VibGUgc2NhbGU7Ci0gKgotICogICBpZiAoIXMtJmd0O3ZhbGlkKQotICogICAgIHJldHVybjsKLSAqCi0gKiAgIHNjYWxlID0gMiooKCh0aW1lc3RhbXAvKGludCkxZTcpICUgNzApKzMwKS8xMDAuMDsKLSAqICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCBzLSZndDt3aWR0aC8yLCAocy0mZ3Q7aGVpZ2h0LzIpLTMwKTsKLSAqICAgY2Fpcm9fc2NhbGUgKGNyLCBzY2FsZSwgc2NhbGUpOwotICoKLSAqICAgY2Fpcm9fbW92ZV90byAoY3IsIDAsIDApOwotICogICBjYWlyb19jdXJ2ZV90byAoY3IsIDAsLTMwLCAtNTAsLTMwLCAtNTAsMCk7Ci0gKiAgIGNhaXJvX2N1cnZlX3RvIChjciwgLTUwLDMwLCAwLDM1LCAwLDYwICk7Ci0gKiAgIGNhaXJvX2N1cnZlX3RvIChjciwgMCwzNSwgNTAsMzAsIDUwLDAgKTsgKiAgCi0gKiAgIGNhaXJvX2N1cnZlX3RvIChjciwgNTAsLTMwLCAwLC0zMCwgMCwwICk7Ci0gKiAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYSAoY3IsIDAuOSwgMC4wLCAwLjEsIDAuNyk7Ci0gKiAgIGNhaXJvX2ZpbGwgKGNyKTsKLSAqIH0KLSAqCi0gKiAuLi4KLSAqCi0gKiBjYWlyb19vdmVybGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgmcXVvdDtjYWlyb292ZXJsYXkmcXVvdDssICZxdW90O292ZXJsYXkmcXVvdDspOwotICoKLSAqIGdfc2lnbmFsX2Nvbm5lY3QgKGNhaXJvX292ZXJsYXksICZxdW90O2RyYXcmcXVvdDssIEdfQ0FMTEJBQ0sgKGRyYXdfb3ZlcmxheSksCi0gKiAgIG92ZXJsYXlfc3RhdGUpOwotICogZ19zaWduYWxfY29ubmVjdCAoY2Fpcm9fb3ZlcmxheSwgJnF1b3Q7Y2Fwcy1jaGFuZ2VkJnF1b3Q7LCAKLSAqICAgR19DQUxMQkFDSyAocHJlcGFyZV9vdmVybGF5KSwgb3ZlcmxheV9zdGF0ZSk7Ci0gKiAuLi4KLSAqCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RjYWlyb292ZXJsYXkuaCIKLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotLyogUkdCMTYgaXMgbmF0aXZlLWVuZGlhbm5lc3MgaW4gR1N0cmVhbWVyICovCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBURU1QTEFURV9DQVBTIEdTVF9WSURFT19DQVBTX01BS0UoInsgQkdSeCwgQkdSQSwgUkdCMTYgfSIpCi0jZWxzZQotI2RlZmluZSBURU1QTEFURV9DQVBTIEdTVF9WSURFT19DQVBTX01BS0UoInsgeFJHQiwgQVJHQiwgUkdCMTYgfSIpCi0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9jYWlyb19vdmVybGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChURU1QTEFURV9DQVBTKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfY2Fpcm9fb3ZlcmxheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoVEVNUExBVEVfQ0FQUykKLSAgICApOwotCi1HX0RFRklORV9UWVBFIChHc3RDYWlyb092ZXJsYXksIGdzdF9jYWlyb19vdmVybGF5LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi1lbnVtCi17Ci0gIFNJR05BTF9EUkFXLAotICBTSUdOQUxfQ0FQU19DSEFOR0VELAotICBOX1NJR05BTFMKLX07Ci0KLXN0YXRpYyBndWludCBnc3RfY2Fpcm9fb3ZlcmxheV9zaWduYWxzW05fU0lHTkFMU107Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhaXJvX292ZXJsYXlfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluX2NhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dF9jYXBzLCBHc3RWaWRlb0luZm8gKiBvdXRfaW5mbykKLXsKLSAgR3N0Q2Fpcm9PdmVybGF5ICpvdmVybGF5ID0gR1NUX0NBSVJPX09WRVJMQVkgKHZmaWx0ZXIpOwotCi0gIGdfc2lnbmFsX2VtaXQgKG92ZXJsYXksIGdzdF9jYWlyb19vdmVybGF5X3NpZ25hbHNbU0lHTkFMX0NBUFNfQ0hBTkdFRF0sIDAsCi0gICAgICBpbl9jYXBzLCBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9jYWlyb19vdmVybGF5X3RyYW5zZm9ybV9mcmFtZV9pcCAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0Q2Fpcm9PdmVybGF5ICpvdmVybGF5ID0gR1NUX0NBSVJPX09WRVJMQVkgKHZmaWx0ZXIpOwotICBjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2U7Ci0gIGNhaXJvX3QgKmNyOwotICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fRlJBTUVfRk9STUFUIChmcmFtZSkpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0IxNjoKLSAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiTm8gbWF0Y2hpbmcgY2Fpcm8gZm9ybWF0IGZvciAlcyIsCi0gICAgICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF90b19zdHJpbmcgKEdTVF9WSURFT19GUkFNRV9GT1JNQVQgKGZyYW1lKSkpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLSAgfQotCi0gIHN1cmZhY2UgPQotICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEgKEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwKLSAgICAgICAgICAwKSwgZm9ybWF0LCBHU1RfVklERU9fRlJBTUVfV0lEVEggKGZyYW1lKSwKLSAgICAgIEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKSwgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIXN1cmZhY2UpKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLQotICBjciA9IGNhaXJvX2NyZWF0ZSAoc3VyZmFjZSk7Ci0gIGlmIChHX1VOTElLRUxZICghY3IpKSB7Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95IChzdXJmYWNlKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBnX3NpZ25hbF9lbWl0IChvdmVybGF5LCBnc3RfY2Fpcm9fb3ZlcmxheV9zaWduYWxzW1NJR05BTF9EUkFXXSwgMCwKLSAgICAgIGNyLCBHU1RfQlVGRkVSX1BUUyAoZnJhbWUtPmJ1ZmZlciksIEdTVF9CVUZGRVJfRFVSQVRJT04gKGZyYW1lLT5idWZmZXIpLAotICAgICAgTlVMTCk7Ci0KLSAgY2Fpcm9fZGVzdHJveSAoY3IpOwotICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kgKHN1cmZhY2UpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYWlyb19vdmVybGF5X2NsYXNzX2luaXQgKEdzdENhaXJvT3ZlcmxheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLQotICB2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0gIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gZ3N0X2NhaXJvX292ZXJsYXlfc2V0X2luZm87Ci0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZV9pcCA9IGdzdF9jYWlyb19vdmVybGF5X3RyYW5zZm9ybV9mcmFtZV9pcDsKLQotICAvKioKLSAgICogR3N0Q2Fpcm9PdmVybGF5OjpkcmF3OgotICAgKiBAb3ZlcmxheTogT3ZlcmxheSBlbGVtZW50IGVtaXR0aW5nIHRoZSBzaWduYWwuCi0gICAqIEBjcjogQ2Fpcm8gY29udGV4dCB0byBkcmF3IHRvLgotICAgKiBAdGltZXN0YW1wOiBUaW1lc3RhbXAgKHNlZSAjR3N0Q2xvY2tUaW1lKSBvZiB0aGUgY3VycmVudCBidWZmZXIuCi0gICAqIEBkdXJhdGlvbjogRHVyYXRpb24gKHNlZSAjR3N0Q2xvY2tUaW1lKSBvZiB0aGUgY3VycmVudCBidWZmZXIuCi0gICAqIAotICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIG92ZXJsYXkgc2hvdWxkIGJlIGRyYXduLgotICAgKi8KLSAgZ3N0X2NhaXJvX292ZXJsYXlfc2lnbmFsc1tTSUdOQUxfRFJBV10gPQotICAgICAgZ19zaWduYWxfbmV3ICgiZHJhdyIsCi0gICAgICBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgMCwKLSAgICAgIDAsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAotICAgICAgR19UWVBFX05PTkUsIDMsIENBSVJPX0dPQkpFQ1RfVFlQRV9DT05URVhULCBHX1RZUEVfVUlOVDY0LCBHX1RZUEVfVUlOVDY0KTsKLQotICAvKioKLSAgICogR3N0Q2Fpcm9PdmVybGF5OjpjYXBzLWNoYW5nZWQ6Ci0gICAqIEBvdmVybGF5OiBPdmVybGF5IGVsZW1lbnQgZW1pdHRpbmcgdGhlIHNpZ25hbC4KLSAgICogQGNhcHM6IFRoZSAjR3N0Q2FwcyBvZiB0aGUgZWxlbWVudC4KLSAgICogCi0gICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgY2FwcyBvZiB0aGUgZWxlbWVudCBoYXMgY2hhbmdlZC4KLSAgICovCi0gIGdzdF9jYWlyb19vdmVybGF5X3NpZ25hbHNbU0lHTkFMX0NBUFNfQ0hBTkdFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiY2Fwcy1jaGFuZ2VkIiwKLSAgICAgIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICAwLAotICAgICAgMCwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9DQVBTKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiQ2Fpcm8gb3ZlcmxheSIsCi0gICAgICAiRmlsdGVyL0VkaXRvci9WaWRlbyIsCi0gICAgICAiUmVuZGVyIG92ZXJsYXkgb24gYSB2aWRlbyBzdHJlYW0gdXNpbmcgQ2Fpcm8iLAotICAgICAgIkpvbiBOb3JkYnkgPGpvbm9ub3JAZ21haWwuY29tPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9jYWlyb19vdmVybGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfY2Fpcm9fb3ZlcmxheV9zcmNfdGVtcGxhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NhaXJvX292ZXJsYXlfaW5pdCAoR3N0Q2Fpcm9PdmVybGF5ICogb3ZlcmxheSkKLXsKLSAgLyogbm90aGluZyB0byBkbyAqLwotfQpkaWZmIC0tZ2l0IGEvZXh0L2NhaXJvL2dzdGNhaXJvb3ZlcmxheS5oIGIvZXh0L2NhaXJvL2dzdGNhaXJvb3ZlcmxheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzY3YTdiLi4wMDAwMDAwCi0tLSBhL2V4dC9jYWlyby9nc3RjYWlyb292ZXJsYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxMT4gSm9uIE5vcmRieSA8am9ub25vckBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9DQUlST19PVkVSTEFZX0hfXwotI2RlZmluZSBfX0dTVF9DQUlST19PVkVSTEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxjYWlyby1nb2JqZWN0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9DQUlST19PVkVSTEFZIFwKLSAgKGdzdF9jYWlyb19vdmVybGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DQUlST19PVkVSTEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQ0FJUk9fT1ZFUkxBWSxHc3RDYWlyb092ZXJsYXkpKQotI2RlZmluZSBHU1RfQ0FJUk9fT1ZFUkxBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DQUlST19PVkVSTEFZLEdzdENhaXJvT3ZlcmxheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0NBSVJPX09WRVJMQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DQUlST19PVkVSTEFZKSkKLSNkZWZpbmUgR1NUX0lTX0NBSVJPX09WRVJMQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQ0FJUk9fT1ZFUkxBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDYWlyb092ZXJsYXkgR3N0Q2Fpcm9PdmVybGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENhaXJvT3ZlcmxheUNsYXNzIEdzdENhaXJvT3ZlcmxheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdENhaXJvT3ZlcmxheSB7Ci0gIEdzdFZpZGVvRmlsdGVyIHZpZGVvX2ZpbHRlcjsKLX07Ci0KLXN0cnVjdCBfR3N0Q2Fpcm9PdmVybGF5Q2xhc3MgewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHZpZGVvX2ZpbHRlcl9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9jYWlyb19vdmVybGF5X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NBSVJPX09WRVJMQVlfSF9fICovCmRpZmYgLS1naXQgYS9leHQvZHYvTWFrZWZpbGUuYW0gYi9leHQvZHYvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExM2YzM2IuLjAwMDAwMDAKLS0tIGEvZXh0L2R2L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZHYubGEKLQotbGliZ3N0ZHZfbGFfU09VUkNFUyA9IGdzdGR2LmMgZ3N0ZHZkZWMuYyBnc3RkdmRlbXV4LmMgZ3N0c21wdGV0aW1lY29kZS5jCi1saWJnc3Rkdl9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKExJQkRWX0NGTEFHUykKLWxpYmdzdGR2X2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJEVl9MSUJTKQotbGliZ3N0ZHZfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0ZHZfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RkdmRlbXV4LmggZ3N0ZHZkZWMuaCBnc3RzbXB0ZXRpbWVjb2RlLmgKLQotRVhUUkFfRElTVCA9IE5PVEVTCi0KLW5vaW5zdF9QUk9HUkFNUyA9IHNtcHRlX3Rlc3QKLQotc21wdGVfdGVzdF9TT1VSQ0VTID0gc21wdGVfdGVzdC5jIGdzdHNtcHRldGltZWNvZGUuYwotc21wdGVfdGVzdF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoTElCRFZfQ0ZMQUdTKQotc21wdGVfdGVzdF9MREFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLQpkaWZmIC0tZ2l0IGEvZXh0L2R2L01ha2VmaWxlLmluIGIvZXh0L2R2L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQxOGMzLi4wMDAwMDAwCi0tLSBhL2V4dC9kdi9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk5NCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IHNtcHRlX3Rlc3QkKEVYRUVYVCkKLXN1YmRpciA9IGV4dC9kdgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGR2X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGR2X2xhX09CSkVDVFMgPSBsaWJnc3Rkdl9sYS1nc3Rkdi5sbyBsaWJnc3Rkdl9sYS1nc3RkdmRlYy5sbyBcCi0JbGliZ3N0ZHZfbGEtZ3N0ZHZkZW11eC5sbyBsaWJnc3Rkdl9sYS1nc3RzbXB0ZXRpbWVjb2RlLmxvCi1saWJnc3Rkdl9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rkdl9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0ZHZfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3Rkdl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGR2X2xhX0NGTEFHUykgJChDRkxBR1MpICQobGliZ3N0ZHZfbGFfTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLVBST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCi1hbV9zbXB0ZV90ZXN0X09CSkVDVFMgPSBzbXB0ZV90ZXN0LXNtcHRlX3Rlc3QuJChPQkpFWFQpIFwKLQlzbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUuJChPQkpFWFQpCi1zbXB0ZV90ZXN0X09CSkVDVFMgPSAkKGFtX3NtcHRlX3Rlc3RfT0JKRUNUUykKLXNtcHRlX3Rlc3RfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotc21wdGVfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChzbXB0ZV90ZXN0X0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGR2X2xhX1NPVVJDRVMpICQoc21wdGVfdGVzdF9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3Rkdl9sYV9TT1VSQ0VTKSAkKHNtcHRlX3Rlc3RfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZHYubGEKLWxpYmdzdGR2X2xhX1NPVVJDRVMgPSBnc3Rkdi5jIGdzdGR2ZGVjLmMgZ3N0ZHZkZW11eC5jIGdzdHNtcHRldGltZWNvZGUuYwotbGliZ3N0ZHZfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChMSUJEVl9DRkxBR1MpCi1saWJnc3Rkdl9sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoTElCRFZfTElCUykKLQotbGliZ3N0ZHZfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0ZHZfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0ZHZkZW11eC5oIGdzdGR2ZGVjLmggZ3N0c21wdGV0aW1lY29kZS5oCi1FWFRSQV9ESVNUID0gTk9URVMKLXNtcHRlX3Rlc3RfU09VUkNFUyA9IHNtcHRlX3Rlc3QuYyBnc3RzbXB0ZXRpbWVjb2RlLmMKLXNtcHRlX3Rlc3RfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKExJQkRWX0NGTEFHUykKLXNtcHRlX3Rlc3RfTERBREQgPSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvZHYvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L2R2L01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0ZHYubGE6ICQobGliZ3N0ZHZfbGFfT0JKRUNUUykgJChsaWJnc3Rkdl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0ZHZfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGR2X2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3Rkdl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGR2X2xhX0xJQkFERCkgJChMSUJTKQotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLXNtcHRlX3Rlc3QkKEVYRUVYVCk6ICQoc21wdGVfdGVzdF9PQkpFQ1RTKSAkKHNtcHRlX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3NtcHRlX3Rlc3RfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgc21wdGVfdGVzdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoc21wdGVfdGVzdF9MSU5LKSAkKHNtcHRlX3Rlc3RfT0JKRUNUUykgJChzbXB0ZV90ZXN0X0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rkdl9sYS1nc3Rkdi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGR2X2xhLWdzdGR2ZGVjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZHZfbGEtZ3N0ZHZkZW11eC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGR2X2xhLWdzdHNtcHRldGltZWNvZGUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NtcHRlX3Rlc3Qtc21wdGVfdGVzdC5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3Rkdl9sYS1nc3Rkdi5sbzogZ3N0ZHYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGR2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGR2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rkdl9sYS1nc3Rkdi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZHZfbGEtZ3N0ZHYuVHBvIC1jIC1vIGxpYmdzdGR2X2xhLWdzdGR2LmxvIGB0ZXN0IC1mICdnc3Rkdi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rkdi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rkdl9sYS1nc3Rkdi5UcG8gJChERVBESVIpL2xpYmdzdGR2X2xhLWdzdGR2LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGR2LmMnIG9iamVjdD0nbGliZ3N0ZHZfbGEtZ3N0ZHYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rkdl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rkdl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rkdl9sYS1nc3Rkdi5sbyBgdGVzdCAtZiAnZ3N0ZHYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZHYuYwotCi1saWJnc3Rkdl9sYS1nc3RkdmRlYy5sbzogZ3N0ZHZkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGR2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGR2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rkdl9sYS1nc3RkdmRlYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZHZfbGEtZ3N0ZHZkZWMuVHBvIC1jIC1vIGxpYmdzdGR2X2xhLWdzdGR2ZGVjLmxvIGB0ZXN0IC1mICdnc3RkdmRlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkdmRlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rkdl9sYS1nc3RkdmRlYy5UcG8gJChERVBESVIpL2xpYmdzdGR2X2xhLWdzdGR2ZGVjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGR2ZGVjLmMnIG9iamVjdD0nbGliZ3N0ZHZfbGEtZ3N0ZHZkZWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rkdl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rkdl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rkdl9sYS1nc3RkdmRlYy5sbyBgdGVzdCAtZiAnZ3N0ZHZkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZHZkZWMuYwotCi1saWJnc3Rkdl9sYS1nc3RkdmRlbXV4LmxvOiBnc3RkdmRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rkdl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rkdl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZHZfbGEtZ3N0ZHZkZW11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZHZfbGEtZ3N0ZHZkZW11eC5UcG8gLWMgLW8gbGliZ3N0ZHZfbGEtZ3N0ZHZkZW11eC5sbyBgdGVzdCAtZiAnZ3N0ZHZkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkdmRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGR2X2xhLWdzdGR2ZGVtdXguVHBvICQoREVQRElSKS9saWJnc3Rkdl9sYS1nc3RkdmRlbXV4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGR2ZGVtdXguYycgb2JqZWN0PSdsaWJnc3Rkdl9sYS1nc3RkdmRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZHZfbGEtZ3N0ZHZkZW11eC5sbyBgdGVzdCAtZiAnZ3N0ZHZkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkdmRlbXV4LmMKLQotbGliZ3N0ZHZfbGEtZ3N0c21wdGV0aW1lY29kZS5sbzogZ3N0c21wdGV0aW1lY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGR2X2xhLWdzdHNtcHRldGltZWNvZGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGR2X2xhLWdzdHNtcHRldGltZWNvZGUuVHBvIC1jIC1vIGxpYmdzdGR2X2xhLWdzdHNtcHRldGltZWNvZGUubG8gYHRlc3QgLWYgJ2dzdHNtcHRldGltZWNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c21wdGV0aW1lY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rkdl9sYS1nc3RzbXB0ZXRpbWVjb2RlLlRwbyAkKERFUERJUikvbGliZ3N0ZHZfbGEtZ3N0c21wdGV0aW1lY29kZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzbXB0ZXRpbWVjb2RlLmMnIG9iamVjdD0nbGliZ3N0ZHZfbGEtZ3N0c21wdGV0aW1lY29kZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGR2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGR2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGR2X2xhLWdzdHNtcHRldGltZWNvZGUubG8gYHRlc3QgLWYgJ2dzdHNtcHRldGltZWNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c21wdGV0aW1lY29kZS5jCi0KLXNtcHRlX3Rlc3Qtc21wdGVfdGVzdC5vOiBzbXB0ZV90ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzbXB0ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzbXB0ZV90ZXN0LXNtcHRlX3Rlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvc21wdGVfdGVzdC1zbXB0ZV90ZXN0LlRwbyAtYyAtbyBzbXB0ZV90ZXN0LXNtcHRlX3Rlc3QubyBgdGVzdCAtZiAnc21wdGVfdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzbXB0ZV90ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NtcHRlX3Rlc3Qtc21wdGVfdGVzdC5UcG8gJChERVBESVIpL3NtcHRlX3Rlc3Qtc21wdGVfdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NtcHRlX3Rlc3QuYycgb2JqZWN0PSdzbXB0ZV90ZXN0LXNtcHRlX3Rlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc21wdGVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzbXB0ZV90ZXN0LXNtcHRlX3Rlc3QubyBgdGVzdCAtZiAnc21wdGVfdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzbXB0ZV90ZXN0LmMKLQotc21wdGVfdGVzdC1zbXB0ZV90ZXN0Lm9iajogc21wdGVfdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc21wdGVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc21wdGVfdGVzdC1zbXB0ZV90ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc21wdGVfdGVzdC1zbXB0ZV90ZXN0LlRwbyAtYyAtbyBzbXB0ZV90ZXN0LXNtcHRlX3Rlc3Qub2JqIGBpZiB0ZXN0IC1mICdzbXB0ZV90ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc21wdGVfdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zbXB0ZV90ZXN0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NtcHRlX3Rlc3Qtc21wdGVfdGVzdC5UcG8gJChERVBESVIpL3NtcHRlX3Rlc3Qtc21wdGVfdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NtcHRlX3Rlc3QuYycgb2JqZWN0PSdzbXB0ZV90ZXN0LXNtcHRlX3Rlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzbXB0ZV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNtcHRlX3Rlc3Qtc21wdGVfdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3NtcHRlX3Rlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzbXB0ZV90ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NtcHRlX3Rlc3QuYyc7IGZpYAotCi1zbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUubzogZ3N0c21wdGV0aW1lY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc21wdGVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc21wdGVfdGVzdC1nc3RzbXB0ZXRpbWVjb2RlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3NtcHRlX3Rlc3QtZ3N0c21wdGV0aW1lY29kZS5UcG8gLWMgLW8gc21wdGVfdGVzdC1nc3RzbXB0ZXRpbWVjb2RlLm8gYHRlc3QgLWYgJ2dzdHNtcHRldGltZWNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c21wdGV0aW1lY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUuVHBvICQoREVQRElSKS9zbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzbXB0ZXRpbWVjb2RlLmMnIG9iamVjdD0nc21wdGVfdGVzdC1nc3RzbXB0ZXRpbWVjb2RlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNtcHRlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc21wdGVfdGVzdC1nc3RzbXB0ZXRpbWVjb2RlLm8gYHRlc3QgLWYgJ2dzdHNtcHRldGltZWNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c21wdGV0aW1lY29kZS5jCi0KLXNtcHRlX3Rlc3QtZ3N0c21wdGV0aW1lY29kZS5vYmo6IGdzdHNtcHRldGltZWNvZGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNtcHRlX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNtcHRlX3Rlc3QtZ3N0c21wdGV0aW1lY29kZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3NtcHRlX3Rlc3QtZ3N0c21wdGV0aW1lY29kZS5UcG8gLWMgLW8gc21wdGVfdGVzdC1nc3RzbXB0ZXRpbWVjb2RlLm9iaiBgaWYgdGVzdCAtZiAnZ3N0c21wdGV0aW1lY29kZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdHNtcHRldGltZWNvZGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0c21wdGV0aW1lY29kZS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUuVHBvICQoREVQRElSKS9zbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzbXB0ZXRpbWVjb2RlLmMnIG9iamVjdD0nc21wdGVfdGVzdC1nc3RzbXB0ZXRpbWVjb2RlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc21wdGVfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzbXB0ZV90ZXN0LWdzdHNtcHRldGltZWNvZGUub2JqIGBpZiB0ZXN0IC1mICdnc3RzbXB0ZXRpbWVjb2RlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0c21wdGV0aW1lY29kZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3RzbXB0ZXRpbWVjb2RlLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoUFJPR1JBTVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQljbGVhbi1wbHVnaW5MVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCi0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKLQlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgXAotCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKLQlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L2R2L05PVEVTIGIvZXh0L2R2L05PVEVTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDIxMTU5Li4wMDAwMDAwCi0tLSBhL2V4dC9kdi9OT1RFUworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLVBhY2tldHMgY29tZSBmcm9tIDEzOTQgNDgwIGJ5dGVzIGF0IGEgdGltZS4gIFRoaXMgaXMgbm90IGEgdmlkZW8gc2VnbWVudAotbGVuZ3RoLiAgVGhpcyBjYXVzZXMgcHJvYmxlbXMsIHNpbmNlIGEgcGFja2V0IGJvdW5kYXJ5IGNyb3NzaW5nIGEgdmlkZW8KLXNlZ21lbnQgY2FuIHNwbGl0IGEgdmlkZW8gc2VnbWVudCBpZiB3ZSBsb3NlIGFuIGlzbyBwYWNrZXQuICBXZSBjYW4KLXJlY292ZXIgZnJvbSB0aGlzLCBzb3J0YSwgd2l0aCBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBwYXJzZXIuICBXZSBoYXZlCi10byBkZWFsIHdpdGggdGhlIGlkZWEgdGhhdCBhKSBzb21lIG1hY3JvYmxvY2tzIGp1c3QgZG9uJ3QgZXhpc3QgKHdlIGhhdmUKLXplcm8ncyBmb3IgdGhlbSkgYW5kIGIpIHdoZW4gYW55IG9mIHRoZSA1IG1hY3JvYmxvY2tzIGRvZXNuJ3QgZXhpc3QsIHdlCi1jYW4ndCBkbyBwYXNzIDMuCi0KLVNpbmNlIHRoaW5ncyBhcmUgYml0c3RyZWFtLWJhc2VkLCB3ZSBjYW4gZGVhbCB3aXRoIHRoaXMsIGJ1dCB3ZSBoYXZlIHRvCi1hZGQgYSBsYXllciBvZiBjb2RlIHRoYXQgdHJpZXMgdG8gc2F2ZSB0aW1lIChtYXliZSkgYnkgbm90IGRlY29kaW5nIHRoaW5ncwotdGhhdCBkb24ndCBleGlzdC4gIE5vdCBzdXJlIGhvdyB0aGlzIGlzIGdvbm5hIHdvcmsgd2l0aCB0aGUgcGFyc2UgY29kZQotYmVpbmcgYmFzZWQgb24gdmlkZW8gc2VnbWVudHMsIGFuZCBub3QgZWFzaWx5IHNwbGl0dGFibGUgaW50bwotbWFjcm9ibG9jay1sZXZlbCBwYXJzaW5nIChvciBpcyBpdD8pLgpkaWZmIC0tZ2l0IGEvZXh0L2R2L2dzdGR2LmMgYi9leHQvZHYvZ3N0ZHYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg2MWJmNi4uMDAwMDAwMAotLS0gYS9leHQvZHYvZ3N0ZHYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0ZHZkZWMuaCIKLSNpbmNsdWRlICJnc3RkdmRlbXV4LmgiCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZHZfaW5pdCAoMCwgMCk7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZHZkZW11eCIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgZ3N0X2R2ZGVtdXhfZ2V0X3R5cGUgKCkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJkdmRlYyIsIEdTVF9SQU5LX01BUkdJTkFMLAotICAgICAgICAgIGdzdF9kdmRlY19nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgZHYsCi0gICAgIkRWIGRlbXV4ZXIgYW5kIGRlY29kZXIgYmFzZWQgb24gbGliZHYgKGxpYmR2LnNmLm5ldCkiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7CmRpZmYgLS1naXQgYS9leHQvZHYvZ3N0ZHZkZWMuYyBiL2V4dC9kdi9nc3RkdmRlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjc5ZTNlLi4wMDAwMDAwCi0tLSBhL2V4dC9kdi9nc3RkdmRlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjgwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZHZkZWMKLSAqCi0gKiBkdmRlYyBkZWNvZGVzIERWIHZpZGVvIGludG8gcmF3IHZpZGVvLiBUaGUgZWxlbWVudCBleHBlY3RzIGEgZnVsbCBEViBmcmFtZQotICogYXMgaW5wdXQsIHdoaWNoIGlzIDEyMDAwMCBieXRlcyBmb3IgTlRTQyBhbmQgMTQ0MDAwIGZvciBQQUwgdmlkZW8uCi0gKgotICogVGhpcyBlbGVtZW50IGNhbiBwZXJmb3JtIHNpbXBsZSBmcmFtZSBkcm9wcGluZyB3aXRoIHRoZSAjR3N0RFZEZWM6ZHJvcC1mYWN0b3IKLSAqIHByb3BlcnR5LiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgdG8gYSB2YWx1ZSBOID4gMSB3aWxsIG9ubHkgZGVjb2RlIGV2ZXJ5IAotICogTnRoIGZyYW1lLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXRlc3QuZHYgISBkdmRlbXV4IG5hbWU9ZGVtdXggISBkdmRlYyAhIHh2aW1hZ2VzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGRlY29kZXMgYW5kIHJlbmRlcnMgdGhlIHJhdyBEViBzdHJlYW0gdG8gYSB2aWRlb3NpbmsuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KLQotI2luY2x1ZGUgImdzdGR2ZGVjLmgiCi0KLS8qIHNpemVzIG9mIG9uZSBpbnB1dCBidWZmZXIgKi8KLSNkZWZpbmUgTlRTQ19IRUlHSFQgNDgwCi0jZGVmaW5lIE5UU0NfQlVGRkVSIDEyMDAwMAotI2RlZmluZSBOVFNDX0ZSQU1FUkFURV9OVU1FUkFUT1IgMzAwMDAKLSNkZWZpbmUgTlRTQ19GUkFNRVJBVEVfREVOT01JTkFUT1IgMTAwMQotCi0jZGVmaW5lIFBBTF9IRUlHSFQgNTc2Ci0jZGVmaW5lIFBBTF9CVUZGRVIgMTQ0MDAwCi0jZGVmaW5lIFBBTF9GUkFNRVJBVEVfTlVNRVJBVE9SIDI1Ci0jZGVmaW5lIFBBTF9GUkFNRVJBVEVfREVOT01JTkFUT1IgMQotCi0jZGVmaW5lIFBBTF9OT1JNQUxfUEFSX1ggICAgICAgIDE2Ci0jZGVmaW5lIFBBTF9OT1JNQUxfUEFSX1kgICAgICAgIDE1Ci0jZGVmaW5lIFBBTF9XSURFX1BBUl9YICAgICAgICAgIDY0Ci0jZGVmaW5lIFBBTF9XSURFX1BBUl9ZICAgICAgICAgIDQ1Ci0KLSNkZWZpbmUgTlRTQ19OT1JNQUxfUEFSX1ggICAgICAgOAotI2RlZmluZSBOVFNDX05PUk1BTF9QQVJfWSAgICAgICA5Ci0jZGVmaW5lIE5UU0NfV0lERV9QQVJfWCAgICAgICAgIDMyCi0jZGVmaW5lIE5UU0NfV0lERV9QQVJfWSAgICAgICAgIDI3Ci0KLSNkZWZpbmUgRFZfREVGQVVMVF9RVUFMSVRZIERWX1FVQUxJVFlfQkVTVAotI2RlZmluZSBEVl9ERUZBVUxUX0RFQ09ERV9OVEggMQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkdmRlY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBkdmRlY19kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9DTEFNUF9MVU1BLAotICBQUk9QX0NMQU1QX0NIUk9NQSwKLSAgUFJPUF9RVUFMSVRZLAotICBQUk9QX0RFQ09ERV9OVEgKLX07Ci0KLWNvbnN0IGdpbnQgcXVhbGl0aWVzW10gPSB7Ci0gIERWX1FVQUxJVFlfREMsCi0gIERWX1FVQUxJVFlfQUNfMSwKLSAgRFZfUVVBTElUWV9BQ18yLAotICBEVl9RVUFMSVRZX0RDIHwgRFZfUVVBTElUWV9DT0xPUiwKLSAgRFZfUVVBTElUWV9BQ18xIHwgRFZfUVVBTElUWV9DT0xPUiwKLSAgRFZfUVVBTElUWV9BQ18yIHwgRFZfUVVBTElUWV9DT0xPUgotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcCA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtZHYsIHN5c3RlbXN0cmVhbSA9IChib29sZWFuKSBmYWxzZSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7IFlVWTIsIEJHUngsIFJHQiB9LCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMS8xLCA2MC8xIF0sICIKLSAgICAgICAgIndpZHRoID0gKGludCkgNzIwLCAiICJoZWlnaHQgPSAoaW50KSB7IDU3NiwgNDgwIH0iKQotICAgICk7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfRFZERUNfUVVBTElUWSAoZ3N0X2R2ZGVjX3F1YWxpdHlfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2R2ZGVjX3F1YWxpdHlfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBxdHlwZSA9IDA7Ci0KLSAgaWYgKHF0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHswLCAiTW9ub2Nocm9tZSwgREMgKEZhc3Rlc3QpIiwgImZhc3Rlc3QifSwKLSAgICAgIHsxLCAiTW9ub2Nocm9tZSwgZmlyc3QgQUMgY29lZmZpY2llbnQiLCAibW9ub2Nocm9tZS1hYyJ9LAotICAgICAgezIsICJNb25vY2hyb21lLCBoaWdoZXN0IHF1YWxpdHkiLCAibW9ub2Nocm9tZS1iZXN0In0sCi0gICAgICB7MywgIkNvbG91ciwgREMsIGZhc3Rlc3QiLCAiY29sb3VyLWZhc3Rlc3QifSwKLSAgICAgIHs0LCAiQ29sb3VyLCB1c2luZyBvbmx5IHRoZSBmaXJzdCBBQyBjb2VmZmljaWVudCIsICJjb2xvdXItYWMifSwKLSAgICAgIHs1LCAiSGlnaGVzdCBxdWFsaXR5IGNvbG91ciBkZWNvZGluZyIsICJiZXN0In0sCi0gICAgICB7MCwgTlVMTCwgTlVMTH0sCi0gICAgfTsKLQotICAgIHF0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdERWRGVjUXVhbGl0eUVudW0iLCB2YWx1ZXMpOwotICB9Ci0gIHJldHVybiBxdHlwZTsKLX0KLQotI2RlZmluZSBnc3RfZHZkZWNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0RFZEZWMsIGdzdF9kdmRlYywgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kdmRlY19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkZWNfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfZHZkZWNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQgZ3N0X2R2ZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9kdmRlY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHZkZWNfY2xhc3NfaW5pdCAoR3N0RFZEZWNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2R2ZGVjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2R2ZGVjX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0NMQU1QX0xVTUEsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImNsYW1wLWx1bWEiLCAiQ2xhbXAgbHVtYSIsICJDbGFtcCBsdW1hIiwKLSAgICAgICAgICBGQUxTRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQ0xBTVBfQ0hST01BLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjbGFtcC1jaHJvbWEiLCAiQ2xhbXAgY2hyb21hIiwgIkNsYW1wIGNocm9tYSIsCi0gICAgICAgICAgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1FVQUxJVFksCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInF1YWxpdHkiLCAiUXVhbGl0eSIsICJEZWNvZGluZyBxdWFsaXR5IiwKLSAgICAgICAgICBHU1RfVFlQRV9EVkRFQ19RVUFMSVRZLCBEVl9ERUZBVUxUX1FVQUxJVFksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfREVDT0RFX05USCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJkcm9wLWZhY3RvciIsICJEcm9wIEZhY3RvciIsICJPbmx5IGRlY29kZSBOdGggZnJhbWUiLAotICAgICAgICAgIDEsIEdfTUFYSU5ULCBEVl9ERUZBVUxUX0RFQ09ERV9OVEgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kdmRlY19jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkRWIHZpZGVvIGRlY29kZXIiLAotICAgICAgIkNvZGVjL0RlY29kZXIvVmlkZW8iLAotICAgICAgIlVzZXMgbGliZHYgdG8gZGVjb2RlIERWIHZpZGVvIChzbXB0ZTMxNCkgKGxpYmR2LnNvdXJjZWZvcmdlLm5ldCkiLAotICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCIgIldpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGR2ZGVjX2RlYnVnLCAiZHZkZWMiLCAwLCAiRFYgZGVjb2RpbmcgZWxlbWVudCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R2ZGVjX2luaXQgKEdzdERWRGVjICogZHZkZWMpCi17Ci0gIGR2ZGVjLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rX3RlbXAsICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChkdmRlYy0+c2lua3BhZCwgZ3N0X2R2ZGVjX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGR2ZGVjLT5zaW5rcGFkLCBnc3RfZHZkZWNfc2lua19ldmVudCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChkdmRlYyksIGR2ZGVjLT5zaW5rcGFkKTsKLQotICBkdmRlYy0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcCwgInNyYyIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChkdmRlYy0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGR2ZGVjKSwgZHZkZWMtPnNyY3BhZCk7Ci0KLSAgZHZkZWMtPmZyYW1lcmF0ZV9udW1lcmF0b3IgPSAwOwotICBkdmRlYy0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yID0gMDsKLSAgZHZkZWMtPndpZGUgPSBGQUxTRTsKLSAgZHZkZWMtPmRyb3BfZmFjdG9yID0gMTsKLQotICBkdmRlYy0+Y2xhbXBfbHVtYSA9IEZBTFNFOwotICBkdmRlYy0+Y2xhbXBfY2hyb21hID0gRkFMU0U7Ci0gIGR2ZGVjLT5xdWFsaXR5ID0gRFZfREVGQVVMVF9RVUFMSVRZOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdmRlY19zaW5rX3NldGNhcHMgKEdzdERWRGVjICogZHZkZWMsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGNvbnN0IEdWYWx1ZSAqcGFyID0gTlVMTCwgKnJhdGUgPSBOVUxMOwotCi0gIC8qIGZpcnN0IHBhcnNlIHRoZSBjYXBzICovCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAvKiB3ZSBhbGxvdyBmcmFtZXJhdGUgYW5kIFBBUiB0byBiZSBvdmVyd3JpdHRlbi4gZnJhbWVyYXRlIGlzIG1hbmRhdG9yeS4gKi8KLSAgaWYgKCEocmF0ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZnJhbWVyYXRlIikpKQotICAgIGdvdG8gbm9fZnJhbWVyYXRlOwotICBwYXIgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIpOwotCi0gIGlmIChwYXIpIHsKLSAgICBkdmRlYy0+cGFyX3ggPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAocGFyKTsKLSAgICBkdmRlYy0+cGFyX3kgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yIChwYXIpOwotICAgIGR2ZGVjLT5uZWVkX3BhciA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIGR2ZGVjLT5wYXJfeCA9IDA7Ci0gICAgZHZkZWMtPnBhcl95ID0gMDsKLSAgICBkdmRlYy0+bmVlZF9wYXIgPSBUUlVFOwotICB9Ci0gIGR2ZGVjLT5mcmFtZXJhdGVfbnVtZXJhdG9yID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKHJhdGUpOwotICBkdmRlYy0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAocmF0ZSk7Ci0gIGR2ZGVjLT5zaW5rX25lZ290aWF0ZWQgPSBUUlVFOwotICBkdmRlYy0+c3JjX25lZ290aWF0ZWQgPSBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2ZyYW1lcmF0ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVjLCAibm8gZnJhbWVyYXRlIHNwZWNpZmllZCBpbiBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHZkZWNfbmVnb3RpYXRlX3Bvb2wgKEdzdERWRGVjICogZGVjLCBHc3RDYXBzICogY2FwcywgR3N0VmlkZW9JbmZvICogaW5mbykKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBndWludCBzaXplLCBtaW4sIG1heDsKLSAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0KLSAgLyogZmluZCBhIHBvb2wgZm9yIHRoZSBuZWdvdGlhdGVkIGNhcHMgbm93ICovCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChjYXBzLCBUUlVFKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoZGVjLT5zcmNwYWQsIHF1ZXJ5KSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImRpZG4ndCBnZXQgZG93bnN0cmVhbSBBTExPQ0FUSU9OIGhpbnRzIik7Ci0gIH0KLQotICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KSA+IDApIHsKLSAgICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyLCBwYXJzZSB0aGVtICovCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCAmcG9vbCwgJnNpemUsICZtaW4sICZtYXgpOwotICAgIHNpemUgPSBNQVggKHNpemUsIGluZm8tPnNpemUpOwotICB9IGVsc2UgewotICAgIHBvb2wgPSBOVUxMOwotICAgIHNpemUgPSBpbmZvLT5zaXplOwotICAgIG1pbiA9IG1heCA9IDA7Ci0gIH0KLQotICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAgLyogd2UgZGlkIG5vdCBnZXQgYSBwb29sLCBtYWtlIG9uZSBvdXJzZWx2ZXMgdGhlbiAqLwotICAgIHBvb2wgPSBnc3RfdmlkZW9fYnVmZmVyX3Bvb2xfbmV3ICgpOwotICB9Ci0KLSAgaWYgKGRlYy0+cG9vbCkgewotICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChkZWMtPnBvb2wsIEZBTFNFKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChkZWMtPnBvb2wpOwotICB9Ci0gIGRlYy0+cG9vbCA9IHBvb2w7Ci0KLSAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgY2Fwcywgc2l6ZSwgbWluLCBtYXgpOwotCi0gIGlmIChnc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGEgKHF1ZXJ5LCBHU1RfVklERU9fTUVUQV9BUElfVFlQRSwgTlVMTCkpIHsKLSAgICAvKiBqdXN0IHNldCB0aGUgb3B0aW9uLCBpZiB0aGUgcG9vbCBjYW4gc3VwcG9ydCBpdCB3ZSB3aWxsIHRyYW5zcGFyZW50bHkgdXNlCi0gICAgICogaXQgdGhyb3VnaCB0aGUgdmlkZW8gaW5mbyBBUEkuIFdlIGNvdWxkIGFsc28gc2VlIGlmIHRoZSBwb29sIHN1cHBvcnQgdGhpcwotICAgICAqIG9wdGlvbiBhbmQgb25seSBhY3RpdmF0ZSBpdCB0aGVuLiAqLwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICB9Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpOwotCi0gIC8qIGFuZCBhY3RpdmF0ZSAqLwotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSk7Ci0KLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVjX3NyY19uZWdvdGlhdGUgKEdzdERWRGVjICogZHZkZWMpCi17Ci0gIEdzdENhcHMgKm90aGVyY2FwczsKLQotICAvKiBubyBQQVIgd2FzIHNwZWNpZmllZCBpbiBpbnB1dCwgZGVyaXZlIGZyb20gZW5jb2RlZCBkYXRhICovCi0gIGlmIChkdmRlYy0+bmVlZF9wYXIpIHsKLSAgICBpZiAoZHZkZWMtPlBBTCkgewotICAgICAgaWYgKGR2ZGVjLT53aWRlKSB7Ci0gICAgICAgIGR2ZGVjLT5wYXJfeCA9IFBBTF9XSURFX1BBUl9YOwotICAgICAgICBkdmRlYy0+cGFyX3kgPSBQQUxfV0lERV9QQVJfWTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGR2ZGVjLT5wYXJfeCA9IFBBTF9OT1JNQUxfUEFSX1g7Ci0gICAgICAgIGR2ZGVjLT5wYXJfeSA9IFBBTF9OT1JNQUxfUEFSX1k7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChkdmRlYy0+d2lkZSkgewotICAgICAgICBkdmRlYy0+cGFyX3ggPSBOVFNDX1dJREVfUEFSX1g7Ci0gICAgICAgIGR2ZGVjLT5wYXJfeSA9IE5UU0NfV0lERV9QQVJfWTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGR2ZGVjLT5wYXJfeCA9IE5UU0NfTk9STUFMX1BBUl9YOwotICAgICAgICBkdmRlYy0+cGFyX3kgPSBOVFNDX05PUk1BTF9QQVJfWTsKLSAgICAgIH0KLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHZkZWMsICJJbmZlcnJlZCBQQVIgJWQvJWQgZnJvbSB2aWRlbyBmb3JtYXQiLAotICAgICAgICBkdmRlYy0+cGFyX3gsIGR2ZGVjLT5wYXJfeSk7Ci0gIH0KLQotICAvKiBpZ25vcmluZyByZ2IsIGJncjAgZm9yIG5vdyAqLwotICBkdmRlYy0+YnBwID0gMjsKLQotICBnc3RfdmlkZW9faW5mb19zZXRfZm9ybWF0ICgmZHZkZWMtPnZpbmZvLCBHU1RfVklERU9fRk9STUFUX1lVWTIsCi0gICAgICA3MjAsIGR2ZGVjLT5oZWlnaHQpOwotICBkdmRlYy0+dmluZm8uZnBzX24gPSBkdmRlYy0+ZnJhbWVyYXRlX251bWVyYXRvcjsKLSAgZHZkZWMtPnZpbmZvLmZwc19kID0gZHZkZWMtPmZyYW1lcmF0ZV9kZW5vbWluYXRvcjsKLSAgZHZkZWMtPnZpbmZvLnBhcl9uID0gZHZkZWMtPnBhcl94OwotICBkdmRlYy0+dmluZm8ucGFyX2QgPSBkdmRlYy0+cGFyX3k7Ci0gIGlmIChkdmRlYy0+aW50ZXJsYWNlZCkgewotICAgIGR2ZGVjLT52aW5mby5pbnRlcmxhY2VfbW9kZSA9IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9JTlRFUkxFQVZFRDsKLSAgfSBlbHNlIHsKLSAgICBkdmRlYy0+dmluZm8uaW50ZXJsYWNlX21vZGUgPSBHU1RfVklERU9fSU5URVJMQUNFX01PREVfUFJPR1JFU1NJVkU7Ci0gIH0KLQotICBvdGhlcmNhcHMgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmZHZkZWMtPnZpbmZvKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoZHZkZWMtPnNyY3BhZCwgb3RoZXJjYXBzKTsKLQotICBnc3RfZHZkZWNfbmVnb3RpYXRlX3Bvb2wgKGR2ZGVjLCBvdGhlcmNhcHMsICZkdmRlYy0+dmluZm8pOwotICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKLQotICBkdmRlYy0+c3JjX25lZ290aWF0ZWQgPSBUUlVFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdmRlY19zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RFZEZWMgKmR2ZGVjOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGR2ZGVjID0gR1NUX0RWREVDIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmZHZkZWMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIGR2ZGVjLT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6ewotICAgICAgY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVjLCAiR290IFNFR01FTlQgJSIgR1NUX1NFR01FTlRfRk9STUFULCAmc2VnbWVudCk7Ci0KLSAgICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoc2VnbWVudCwgJmR2ZGVjLT5zZWdtZW50KTsKLSAgICAgIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChkdmRlYy0+c3JjcGFkKSkgewotICAgICAgICBkdmRlYy0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIGV2ZW50ID0gTlVMTDsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGR2ZGVjLT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgcmVzID0gZ3N0X2R2ZGVjX3Npbmtfc2V0Y2FwcyAoZHZkZWMsIGNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZXZlbnQpCi0gICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkdmRlYy0+c3JjcGFkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kdmRlY19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0RFZEZWMgKmR2ZGVjOwotICBndWludDggKmluZnJhbWU7Ci0gIGd1aW50OCAqb3V0ZnJhbWVfcHRyc1szXTsKLSAgZ2ludCBvdXRmcmFtZV9waXRjaGVzWzNdOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50IGxlbmd0aDsKLSAgZ3VpbnQ2NCBjc3RhcnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FLCBjc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGdib29sZWFuIFBBTCwgd2lkZTsKLQotICBkdmRlYyA9IEdTVF9EVkRFQyAocGFyZW50KTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBpbmZyYW1lID0gbWFwLmRhdGE7Ci0KLSAgLyogYnVmZmVyIHNob3VsZCBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBvbmUgTlRTQyBmcmFtZSwgdGhpcyBzaG91bGQKLSAgICogYmUgZW5vdWdoIHRvIGRlY29kZSB0aGUgaGVhZGVyLiAqLwotICBpZiAoR19VTkxJS0VMWSAobWFwLnNpemUgPCBOVFNDX0JVRkZFUikpCi0gICAgZ290byB3cm9uZ19zaXplOwotCi0gIC8qIHByZWxpbWluYXJ5IGRyb3BwaW5nLiB1bnJlZiBhbmQgcmV0dXJuIGlmIG91dHNpZGUgb2YgY29uZmlndXJlZCBzZWdtZW50ICovCi0gIGlmICgoZHZkZWMtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgJiYKLSAgICAgICghKGdzdF9zZWdtZW50X2NsaXAgKCZkdmRlYy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZiksCi0gICAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSArIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAmY3N0YXJ0LCAmY3N0b3ApKSkpCi0gICAgZ290byBkcm9wcGluZzsKLQotICBpZiAoR19VTkxJS0VMWSAoZHZfcGFyc2VfaGVhZGVyIChkdmRlYy0+ZGVjb2RlciwgaW5mcmFtZSkgPCAwKSkKLSAgICBnb3RvIHBhcnNlX2hlYWRlcl9lcnJvcjsKLQotICAvKiBnZXQgc2l6ZSAqLwotICBQQUwgPSBkdl9zeXN0ZW1fNTBfZmllbGRzIChkdmRlYy0+ZGVjb2Rlcik7Ci0gIHdpZGUgPSBkdl9mb3JtYXRfd2lkZSAoZHZkZWMtPmRlY29kZXIpOwotCi0gIC8qIGNoZWNrIHRoZSBidWZmZXIgaXMgb2YgcmlnaHQgc2l6ZSBhZnRlciB3ZSBrbm93IGlmIHdlIGFyZQotICAgKiBkZWFsaW5nIHdpdGggUEFMIG9yIE5UU0MgKi8KLSAgbGVuZ3RoID0gKFBBTCA/IFBBTF9CVUZGRVIgOiBOVFNDX0JVRkZFUik7Ci0gIGlmIChHX1VOTElLRUxZIChtYXAuc2l6ZSA8IGxlbmd0aCkpCi0gICAgZ290byB3cm9uZ19zaXplOwotCi0gIGR2X3BhcnNlX3BhY2tzIChkdmRlYy0+ZGVjb2RlciwgaW5mcmFtZSk7Ci0KLSAgaWYgKGR2ZGVjLT52aWRlb19vZmZzZXQgJSBkdmRlYy0+ZHJvcF9mYWN0b3IgIT0gMCkKLSAgICBnb3RvIHNraXA7Ci0KLSAgLyogcmVuZWdvdGlhdGUgb24gY2hhbmdlICovCi0gIGlmIChQQUwgIT0gZHZkZWMtPlBBTCB8fCB3aWRlICE9IGR2ZGVjLT53aWRlKSB7Ci0gICAgZHZkZWMtPnNyY19uZWdvdGlhdGVkID0gRkFMU0U7Ci0gICAgZHZkZWMtPlBBTCA9IFBBTDsKLSAgICBkdmRlYy0+d2lkZSA9IHdpZGU7Ci0gIH0KLQotICBkdmRlYy0+aGVpZ2h0ID0gKGR2ZGVjLT5QQUwgPyBQQUxfSEVJR0hUIDogTlRTQ19IRUlHSFQpOwotCi0gIGR2ZGVjLT5pbnRlcmxhY2VkID0gIWR2X2lzX3Byb2dyZXNzaXZlIChkdmRlYy0+ZGVjb2Rlcik7Ci0KLSAgLyogbmVnb3RpYXRlIGlmIG5vdCBkb25lIHlldCAqLwotICBpZiAoIWR2ZGVjLT5zcmNfbmVnb3RpYXRlZCkgewotICAgIGlmICghZ3N0X2R2ZGVjX3NyY19uZWdvdGlhdGUgKGR2ZGVjKSkKLSAgICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0gIH0KLQotICBpZiAoZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAoZHZkZWMtPnNyY3BhZCkpIHsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoZHZkZWMtPnNyY3BhZCk7Ci0gICAgaWYgKCFjYXBzKQotICAgICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICAgIGdzdF9kdmRlY19uZWdvdGlhdGVfcG9vbCAoZHZkZWMsIGNhcHMsICZkdmRlYy0+dmluZm8pOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIGlmIChkdmRlYy0+bmVlZF9zZWdtZW50KSB7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChkdmRlYy0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdmRlYy0+c2VnbWVudCkpOwotICAgIGR2ZGVjLT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgfQotCi0gIHJldCA9IGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoZHZkZWMtPnBvb2wsICZvdXRidWYsIE5VTEwpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICBnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZkdmRlYy0+dmluZm8sIG91dGJ1ZiwgR1NUX01BUF9XUklURSk7Ci0KLSAgb3V0ZnJhbWVfcHRyc1swXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKCZmcmFtZSwgMCk7Ci0gIG91dGZyYW1lX3BpdGNoZXNbMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKCZmcmFtZSwgMCk7Ci0KLSAgLyogdGhlIHJlc3Qgb25seSBtYXR0ZXJzIGZvciBZVVkyICovCi0gIGlmIChkdmRlYy0+YnBwIDwgMykgewotICAgIG91dGZyYW1lX3B0cnNbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBICgmZnJhbWUsIDEpOwotICAgIG91dGZyYW1lX3B0cnNbMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBICgmZnJhbWUsIDIpOwotCi0gICAgb3V0ZnJhbWVfcGl0Y2hlc1sxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoJmZyYW1lLCAxKTsKLSAgICBvdXRmcmFtZV9waXRjaGVzWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFICgmZnJhbWUsIDIpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZHZkZWMsICJkZWNvZGluZyBhbmQgcHVzaGluZyBidWZmZXIiKTsKLSAgZHZfZGVjb2RlX2Z1bGxfZnJhbWUgKGR2ZGVjLT5kZWNvZGVyLCBpbmZyYW1lLAotICAgICAgZV9kdl9jb2xvcl95dXYsIG91dGZyYW1lX3B0cnMsIG91dGZyYW1lX3BpdGNoZXMpOwotCi0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKLQotICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX1ZJREVPX0JVRkZFUl9GTEFHX1RGRik7Ci0KLSAgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKTsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChvdXRidWYpID0gR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpOwotCi0gIC8qIEZJWE1FIDogQ29tcHV0ZSB2YWx1ZXMgd2hlbiB1c2luZyBub24tVElNRSBzZWdtZW50cywKLSAgICogYnV0IGZvciB0aGUgbW9tZW50IG1ha2Ugc3VyZSB3ZSBhdCBsZWFzdCBkb24ndCBzZXQgYm9ndXMgdmFsdWVzCi0gICAqLwotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGNzdGFydCkpIHsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IGNzdGFydDsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGNzdG9wKSkKLSAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBjc3RvcCAtIGNzdGFydDsKLSAgfQotCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoZHZkZWMtPnNyY3BhZCwgb3V0YnVmKTsKLQotc2tpcDoKLSAgZHZkZWMtPnZpZGVvX29mZnNldCsrOwotCi1kb25lOgotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19zaXplOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGR2ZGVjLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIklucHV0IGJ1ZmZlciB0b28gc21hbGwiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBkb25lOwotICB9Ci1wYXJzZV9oZWFkZXJfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZHZkZWMsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiRXJyb3IgcGFyc2luZyBEViBoZWFkZXIiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBkb25lOwotICB9Ci1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVjLCAiY291bGQgbm90IG5lZ290aWF0ZSBvdXRwdXQiKTsKLSAgICByZXQgPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLW5vX2J1ZmZlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVjLCAiY291bGQgbm90IGFsbG9jYXRlIGJ1ZmZlciIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi1kcm9wcGluZzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVjLAotICAgICAgICAiZHJvcHBpbmcgYnVmZmVyIHNpbmNlIGl0J3Mgb3V0IG9mIHRoZSBjb25maWd1cmVkIHNlZ21lbnQiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZHZkZWNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0RFZEZWMgKmR2ZGVjID0gR1NUX0RWREVDIChlbGVtZW50KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZHZkZWMtPmRlY29kZXIgPQotICAgICAgICAgIGR2X2RlY29kZXJfbmV3ICgwLCBkdmRlYy0+Y2xhbXBfbHVtYSwgZHZkZWMtPmNsYW1wX2Nocm9tYSk7Ci0gICAgICBkdmRlYy0+ZGVjb2Rlci0+cXVhbGl0eSA9IHF1YWxpdGllc1tkdmRlYy0+cXVhbGl0eV07Ci0gICAgICBkdl9zZXRfZXJyb3JfbG9nIChkdmRlYy0+ZGVjb2RlciwgTlVMTCk7Ci0gICAgICBnc3RfdmlkZW9faW5mb19pbml0ICgmZHZkZWMtPnZpbmZvKTsKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZkdmRlYy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICAgICAgZHZkZWMtPnNyY19uZWdvdGlhdGVkID0gRkFMU0U7Ci0gICAgICBkdmRlYy0+c2lua19uZWdvdGlhdGVkID0gRkFMU0U7Ci0gICAgICBkdmRlYy0+bmVlZF9zZWdtZW50ID0gRkFMU0U7Ci0gICAgICAvKiAKLSAgICAgICAqIEVuYWJsZSB0aGlzIGZ1bmN0aW9uIGNhbGwgd2hlbiBsaWJkdjIgMC4xMDAgb3IgaGlnaGVyIGlzIG1vcmUKLSAgICAgICAqIGNvbW1vbgotICAgICAgICovCi0gICAgICAvKiBkdl9zZXRfcXVhbGl0eSAoZHZkZWMtPmRlY29kZXIsIHF1YWxpdGllcyBbZHZkZWMtPnF1YWxpdHldKTsgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBkdl9kZWNvZGVyX2ZyZWUgKGR2ZGVjLT5kZWNvZGVyKTsKLSAgICAgIGR2ZGVjLT5kZWNvZGVyID0gTlVMTDsKLSAgICAgIGlmIChkdmRlYy0+cG9vbCkgewotICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAoZHZkZWMtPnBvb2wsIEZBTFNFKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoZHZkZWMtPnBvb2wpOwotICAgICAgICBkdmRlYy0+cG9vbCA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R2ZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REVkRlYyAqZHZkZWMgPSBHU1RfRFZERUMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NMQU1QX0xVTUE6Ci0gICAgICBkdmRlYy0+Y2xhbXBfbHVtYSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTEFNUF9DSFJPTUE6Ci0gICAgICBkdmRlYy0+Y2xhbXBfY2hyb21hID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1FVQUxJVFk6Ci0gICAgICBkdmRlYy0+cXVhbGl0eSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGlmICgoZHZkZWMtPnF1YWxpdHkgPCAwKSB8fCAoZHZkZWMtPnF1YWxpdHkgPiA1KSkKLSAgICAgICAgZHZkZWMtPnF1YWxpdHkgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFQ09ERV9OVEg6Ci0gICAgICBkdmRlYy0+ZHJvcF9mYWN0b3IgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdmRlY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RFZEZWMgKmR2ZGVjID0gR1NUX0RWREVDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DTEFNUF9MVU1BOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGR2ZGVjLT5jbGFtcF9sdW1hKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTEFNUF9DSFJPTUE6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZHZkZWMtPmNsYW1wX2Nocm9tYSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUVVBTElUWToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBkdmRlYy0+cXVhbGl0eSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVDT0RFX05USDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGR2ZGVjLT5kcm9wX2ZhY3Rvcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9leHQvZHYvZ3N0ZHZkZWMuaCBiL2V4dC9kdi9nc3RkdmRlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDMxZWYwLi4wMDAwMDAwCi0tLSBhL2V4dC9kdi9nc3RkdmRlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9EVkRFQ19IX18KLSNkZWZpbmUgX19HU1RfRFZERUNfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgPGxpYmR2L2R2Lmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0KLSNkZWZpbmUgR1NUX1RZUEVfRFZERUMgXAotICAoZ3N0X2R2ZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9EVkRFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0RWREVDLEdzdERWRGVjKSkKLSNkZWZpbmUgR1NUX0RWREVDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0RWREVDLEdzdERWRGVjQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRFZERUMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9EVkRFQykpCi0jZGVmaW5lIEdTVF9JU19EVkRFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9EVkRFQykpCi0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERWRGVjIEdzdERWRGVjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERWRGVjQ2xhc3MgR3N0RFZEZWNDbGFzczsKLQotCi1zdHJ1Y3QgX0dzdERWRGVjIHsKLSAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKLQotICBHc3RQYWQgICAgICAgICpzaW5rcGFkOwotICBHc3RQYWQgICAgICAgICpzcmNwYWQ7Ci0KLSAgZHZfZGVjb2Rlcl90ICAqZGVjb2RlcjsKLSAgZ2Jvb2xlYW4gICAgICAgY2xhbXBfbHVtYTsKLSAgZ2Jvb2xlYW4gICAgICAgY2xhbXBfY2hyb21hOwotICBnaW50ICAgICAgICAgICBxdWFsaXR5OwotCi0gIGdib29sZWFuICAgICAgIFBBTDsKLSAgZ2Jvb2xlYW4gICAgICAgaW50ZXJsYWNlZDsKLSAgZ2Jvb2xlYW4gICAgICAgd2lkZTsKLQotICAvKiBpbnB1dCBjYXBzICovCi0gIGdib29sZWFuICAgICAgIHNpbmtfbmVnb3RpYXRlZDsKLSAgR3N0VmlkZW9JbmZvICAgdmluZm87Ci0gIGdpbnQgICAgICAgICAgIGZyYW1lcmF0ZV9udW1lcmF0b3I7Ci0gIGdpbnQgICAgICAgICAgIGZyYW1lcmF0ZV9kZW5vbWluYXRvcjsKLSAgZ2ludCAgICAgICAgICAgaGVpZ2h0OwotICBnaW50ICAgICAgICAgICBwYXJfeDsKLSAgZ2ludCAgICAgICAgICAgcGFyX3k7Ci0gIGdib29sZWFuICAgICAgIG5lZWRfcGFyOwotCi0gIC8qIG5lZ290aWF0ZWQgb3V0cHV0ICovCi0gIGdpbnQgICAgICAgICAgIGJwcDsKLSAgZ2Jvb2xlYW4gICAgICAgc3JjX25lZ290aWF0ZWQ7Ci0gIAotICBnaW50ICAgICAgICAgICB2aWRlb19vZmZzZXQ7Ci0gIGdpbnQgICAgICAgICAgIGRyb3BfZmFjdG9yOwotCi0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIEdzdFNlZ21lbnQgICAgIHNlZ21lbnQ7Ci0gIGdib29sZWFuICAgICAgIG5lZWRfc2VnbWVudDsKLX07Ci0KLXN0cnVjdCBfR3N0RFZEZWNDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi0KLUdUeXBlIGdzdF9kdmRlY19nZXRfdHlwZSAodm9pZCk7Ci0KLQotR19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogX19HU1RfRFZERUNfSF9fICovCmRpZmYgLS1naXQgYS9leHQvZHYvZ3N0ZHZkZW11eC5jIGIvZXh0L2R2L2dzdGR2ZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA0MDI3MC4uMDAwMDAwMAotLS0gYS9leHQvZHYvZ3N0ZHZkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAzNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgImdzdGR2ZGVtdXguaCIKLSNpbmNsdWRlICJnc3RzbXB0ZXRpbWVjb2RlLmgiCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWR2ZGVtdXgKLSAqCi0gKiBkdmRlbXV4IHNwbGl0cyByYXcgRFYgaW50byBpdHMgYXVkaW8gYW5kIHZpZGVvIGNvbXBvbmVudHMuIFRoZSBhdWRpbyB3aWxsIGJlCi0gKiBkZWNvZGVkIHJhdyBzYW1wbGVzIGFuZCB0aGUgdmlkZW8gd2lsbCBiZSBlbmNvZGVkIERWIHZpZGVvLgotICoKLSAqIFRoaXMgZWxlbWVudCBjYW4gb3BlcmF0ZSBpbiBib3RoIHB1c2ggYW5kIHB1bGwgbW9kZSBkZXBlbmRpbmcgb24gdGhlCi0gKiBjYXBhYmlsaXRpZXMgb2YgdGhlIHVwc3RyZWFtIHBlZXIuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249dGVzdC5kdiAhIGR2ZGVtdXggbmFtZT1kZW11eCAhIHF1ZXVlICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsgZGVtdXguICEgcXVldWUgISBkdmRlYyAhIHh2aW1hZ2VzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGRlY29kZXMgYW5kIHJlbmRlcnMgdGhlIHJhdyBEViBzdHJlYW0gdG8gYW4gYXVkaW8gYW5kIGEgdmlkZW9zaW5rLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBEViBvdXRwdXQgaGFzIHR3byBtb2Rlcywgbm9ybWFsIGFuZCB3aWRlLiBUaGUgcmVzb2x1dGlvbiBpcyB0aGUgc2FtZSBpbiBib3RoCi0gKiBjYXNlczogNzIwIHBpeGVscyB3aWRlIGJ5IDU3NiBwaXhlbHMgdGFsbCBpbiBQQUwgZm9ybWF0LCBhbmQgNzIweDQ4MCBmb3IKLSAqIE5UU0MuCi0gKgotICogRWFjaCBvZiB0aGUgbW9kZXMgaGFzIGl0cyBvd24gcGl4ZWwgYXNwZWN0IHJhdGlvLCB3aGljaCBpcyBmaXhlZCBpbiBwcmFjdGljZQotICogYnkgSVRVLVIgQlQuNjAxIChhbHNvIGtub3duIGFzICJDQ0lSLTYwMSIgb3IgIlJlYy42MDEiKS4gT3Igc28gY2xhaW1zIGEKLSAqIHJlZmVyZW5jZSB0aGF0IEkgY3VsbGVkIGZyb20gdGhlIHJlbGlhYmxlICJpbnRlcm5ldCIsCi0gKiBodHRwOi8vd3d3Lm1pci5jb20vRE1HL2FzcGVjdC5odG1sLiBOb3JtYWwgUEFMIGlzIDU5LzU0IGFuZCBub3JtYWwgTlRTQyBpcwotICogMTAvMTEuIEJlY2F1c2UgdGhlIHBpeGVsIHJlc29sdXRpb24gaXMgdGhlIHNhbWUgZm9yIGJvdGggY2FzZXMsIHdlIGNhbiBnZXQKLSAqIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gZm9yIHdpZGUgcmVjb3JkaW5ncyBieSBtdWx0aXBseWluZyBieSB0aGUgcmF0aW8gb2YKLSAqIGRpc3BsYXkgYXNwZWN0IHJhdGlvcywgMTYvOSAoZm9yIHdpZGUpIGRpdmlkZWQgYnkgNC8zIChmb3Igbm9ybWFsKToKLSAqCi0gKiBXaWRlIE5UU0M6IDEwLzExICogKDE2LzkpLyg0LzMpID0gNDAvMzMKLSAqIFdpZGUgUEFMOiA1OS81NCAqICgxNi85KS8oNC8zKSA9IDExOC84MQotICoKLSAqIEhvd2V2ZXIsIHRoZSBwaXhlbCByZXNvbHV0aW9uIGNvbWluZyBvdXQgb2YgYSBEViBzb3VyY2UgZG9lcyBub3QgY29tYmluZSB3aXRoCi0gKiB0aGUgc3RhbmRhcmQgcGl4ZWwgYXNwZWN0IHJhdGlvcyB0byBnaXZlIGEgcHJvcGVyIGRpc3BsYXkgYXNwZWN0IHJhdGlvLiBBbgotICogaW1hZ2UgNDgwIHBpeGVscyB0YWxsLCB3aXRoIGEgNDozIGRpc3BsYXkgYXNwZWN0IHJhdGlvLCB3aWxsIGJlIDc2OCBwaXhlbHMKLSAqIHdpZGUuIEJ1dCwgaWYgd2UgdGFrZSB0aGUgbm9ybWFsIFBBTCBhc3BlY3QgcmF0aW8gb2YgNTkvNTQsIGFuZCBtdWx0aXBseSBpdAotICogd2l0aCB0aGUgd2lkdGggb2YgdGhlIERWIGltYWdlICg3MjAgcGl4ZWxzKSwgd2UgZ2V0IDc4Ni42NjYuLi4sIHdoaWNoIGlzCi0gKiBub25pbnRlZ3JhbCBhbmQgdG9vIHdpZGUuIFRoZSBjYW1lcmEgaXMgbm90IG91dHB1dHRpbmcgYSA0OjMgaW1hZ2UuCi0gKiAKLSAqIElmIHRoZSB2aWRlbyBzaW5rIGZvciB0aGlzIHN0cmVhbSBoYXMgZml4ZWQgZGltZW5zaW9ucyAoc3VjaCBhcyBmb3IKLSAqIGZ1bGxzY3JlZW4gcGxheWJhY2ssIG9yIGZvciBhIGphdmEgYXBwbGV0IGluIGEgd2ViIHBhZ2UpLCB5b3UgdGhlbiBoYXZlIHR3bwotICogY2hvaWNlcy4gRWl0aGVyIHlvdSBzaG93IHRoZSB3aG9sZSBpbWFnZSwgYnV0IHBhZCB0aGUgaW1hZ2Ugd2l0aCBibGFjawotICogYm9yZGVycyBvbiB0aGUgdG9wIGFuZCBib3R0b20gKGxpa2Ugd2F0Y2hpbmcgYSB3aWRlc2NyZWVuIHZpZGVvIG9uIGEgNDozCi0gKiBkZXZpY2UpLCBvciB5b3UgY3JvcCB0aGUgdmlkZW8gdG8gdGhlIHByb3BlciByYXRpby4gQXBwYXJlbnRseSB0aGUgbGF0dGVyIGlzCi0gKiB0aGUgc3RhbmRhcmQgcHJhY3RpY2UuCi0gKgotICogRm9yIGl0cyBwYXJ0LCBHU3RyZWFtZXIgaXMgY29uY2VybmVkIHdpdGggYWNjdXJhY3kgYW5kIHByZXNlcnZhdGlvbiBvZgotICogaW5mb3JtYXRpb24uIFRoaXMgZWxlbWVudCBvdXRwdXRzIHRoZSA3MjB4NTc2IG9yIDcyMHg0ODAgdmlkZW8gdGhhdCBpdAotICogcmVjaWV2ZXMsIG5vdGluZyB0aGUgcHJvcGVyIGFzcGVjdCByYXRpby4gVGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSBmb3IKLSAqIHdpbmRvd2VkIGFwcGxpY2F0aW9ucywgd2hpY2ggY2FuIGNoYW5nZSBzaXplIHRvIGZpdCB0aGUgdmlkZW8uIEFwcGxpY2F0aW9ucwotICogd2l0aCBmaXhlZCBzaXplIHJlcXVpcmVtZW50cyBzaG91bGQgZGVjaWRlIHdoZXRoZXIgdG8gY3JvcCBvciBwYWQgd2hpY2gKLSAqIGFuIGVsZW1lbnQgc3VjaCBhcyB2aWRlb2JveCBjYW4gZG8uCi0gKi8KLQotI2RlZmluZSBOVFNDX0hFSUdIVCA0ODAKLSNkZWZpbmUgTlRTQ19CVUZGRVIgMTIwMDAwCi0jZGVmaW5lIE5UU0NfRlJBTUVSQVRFX05VTUVSQVRPUiAzMDAwMAotI2RlZmluZSBOVFNDX0ZSQU1FUkFURV9ERU5PTUlOQVRPUiAxMDAxCi0KLSNkZWZpbmUgUEFMX0hFSUdIVCA1NzYKLSNkZWZpbmUgUEFMX0JVRkZFUiAxNDQwMDAKLSNkZWZpbmUgUEFMX0ZSQU1FUkFURV9OVU1FUkFUT1IgMjUKLSNkZWZpbmUgUEFMX0ZSQU1FUkFURV9ERU5PTUlOQVRPUiAxCi0KLSNkZWZpbmUgUEFMX05PUk1BTF9QQVJfWCAgICAgICAgMTYKLSNkZWZpbmUgUEFMX05PUk1BTF9QQVJfWSAgICAgICAgMTUKLSNkZWZpbmUgUEFMX1dJREVfUEFSX1ggICAgICAgICAgNjQKLSNkZWZpbmUgUEFMX1dJREVfUEFSX1kgICAgICAgICAgNDUKLQotI2RlZmluZSBOVFNDX05PUk1BTF9QQVJfWCAgICAgICA4Ci0jZGVmaW5lIE5UU0NfTk9STUFMX1BBUl9ZICAgICAgIDkKLSNkZWZpbmUgTlRTQ19XSURFX1BBUl9YICAgICAgICAgMzIKLSNkZWZpbmUgTlRTQ19XSURFX1BBUl9ZICAgICAgICAgMjcKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZHZkZW11eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBkdmRlbXV4X2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXAgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LWR2LCBzeXN0ZW1zdHJlYW0gPSAoYm9vbGVhbikgdHJ1ZSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvX3NyY190ZW1wID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJ2aWRlbyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1kdiwgc3lzdGVtc3RyZWFtID0gKGJvb2xlYW4pIGZhbHNlIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYXVkaW9fc3JjX3RlbXAgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoImF1ZGlvIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSB7IDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwgIiAiY2hhbm5lbHMgPSAoaW50KSB7MiwgNH0iKQotICAgICk7Ci0KLQotI2RlZmluZSBnc3RfZHZkZW11eF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3REVkRlbXV4LCBnc3RfZHZkZW11eCwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9kdmRlbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotLyogcXVlcnkgZnVuY3Rpb25zICovCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkZW11eF9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotLyogY29udmVydCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkZW11eF9zaW5rX2NvbnZlcnQgKEdzdERWRGVtdXggKiBkZW11eCwKLSAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LAotICAgIGdpbnQ2NCAqIGRlc3RfdmFsdWUpOwotc3RhdGljIGdib29sZWFuIGdzdF9kdmRlbXV4X3NyY19jb252ZXJ0IChHc3REVkRlbXV4ICogZGVtdXgsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LAotICAgIGdpbnQ2NCAqIGRlc3RfdmFsdWUpOwotCi0vKiBldmVudCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkZW11eF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R2ZGVtdXhfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R2ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi0vKiBzY2hlZHVsaW5nIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgZ3N0X2R2ZGVtdXhfbG9vcCAoR3N0UGFkICogcGFkKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kdmRlbXV4X2ZsdXNoIChHc3REVkRlbXV4ICogZHZkZW11eCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZHZkZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotLyogc3RhdGUgY2hhbmdlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGdib29sZWFuIGdzdF9kdmRlbXV4X3NpbmtfYWN0aXZhdGUgKEdzdFBhZCAqIHNpbmtwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHZkZW11eF9zaW5rX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHNpbmtwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2R2ZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQKLWdzdF9kdmRlbXV4X2NsYXNzX2luaXQgKEdzdERWRGVtdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZHZkZW11eF9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R2ZGVtdXhfY2hhbmdlX3N0YXRlKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2VuZF9ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHZkZW11eF9zZW5kX2V2ZW50KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmdmlkZW9fc3JjX3RlbXApOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJmF1ZGlvX3NyY190ZW1wKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkRWIHN5c3RlbSBzdHJlYW0gZGVtdXhlciIsICJDb2RlYy9EZW11eGVyIiwKLSAgICAgICJVc2VzIGxpYmR2IHRvIHNlcGFyYXRlIERWIGF1ZGlvIGZyb20gRFYgdmlkZW8gKGxpYmR2LnNvdXJjZWZvcmdlLm5ldCkiLAotICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkdmRlbXV4X2RlYnVnLCAiZHZkZW11eCIsIDAsICJEViBkZW11eGVyIGVsZW1lbnQiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdmRlbXV4X2luaXQgKEdzdERWRGVtdXggKiBkdmRlbXV4KQotewotICBnaW50IGk7Ci0KLSAgZHZkZW11eC0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wLCAic2luayIpOwotICAvKiB3ZSBjYW4gb3BlcmF0ZSBpbiBwdWxsIGFuZCBwdXNoIG1vZGUgc28gd2UgaW5zdGFsbAotICAgKiBhIGN1c3RvbSBhY3RpdmF0ZSBmdW5jdGlvbiAqLwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoZHZkZW11eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHZkZW11eF9zaW5rX2FjdGl2YXRlKSk7Ci0gIC8qIHRoZSBmdW5jdGlvbiB0byBhY3RpdmF0ZSBpbiBwdXNoIG1vZGUgKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVtb2RlX2Z1bmN0aW9uIChkdmRlbXV4LT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kdmRlbXV4X3NpbmtfYWN0aXZhdGVfbW9kZSkpOwotICAvKiBmb3IgcHVzaCBtb2RlLCB0aGlzIGlzIHRoZSBjaGFpbiBmdW5jdGlvbiAqLwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoZHZkZW11eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHZkZW11eF9jaGFpbikpOwotICAvKiBoYW5kbGluZyBldmVudHMgKGluIHB1c2ggbW9kZSBvbmx5KSAqLwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoZHZkZW11eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHZkZW11eF9oYW5kbGVfc2lua19ldmVudCkpOwotICAvKiBxdWVyeSBmdW5jdGlvbnMgKi8KLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGR2ZGVtdXgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R2ZGVtdXhfc2lua19xdWVyeSkpOwotCi0gIC8qIG5vdyBhZGQgdGhlIHBhZCAqLwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZHZkZW11eCksIGR2ZGVtdXgtPnNpbmtwYWQpOwotCi0gIGR2ZGVtdXgtPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0KLSAgLyogd2UgbmVlZCA0IHRlbXAgYnVmZmVycyBmb3IgYXVkaW8gZGVjb2Rpbmcgd2hpY2ggYXJlIG9mIGEgc3RhdGljCi0gICAqIHNpemUgYW5kIHdoaWNoIHdlIGNhbiBhbGxvY2F0ZSBoZXJlICovCi0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICBkdmRlbXV4LT5hdWRpb19idWZmZXJzW2ldID0KLSAgICAgICAgKGdpbnQxNiAqKSBnX21hbGxvYyAoRFZfQVVESU9fTUFYX1NBTVBMRVMgKiBzaXplb2YgKGdpbnQxNikpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHZkZW11eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RFZEZW11eCAqZHZkZW11eDsKLSAgZ2ludCBpOwotCi0gIGR2ZGVtdXggPSBHU1RfRFZERU1VWCAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAoZHZkZW11eC0+YWRhcHRlcik7Ci0KLSAgLyogY2xlYW4gdXAgdGVtcCBhdWRpbyBidWZmZXJzICovCi0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICBnX2ZyZWUgKGR2ZGVtdXgtPmF1ZGlvX2J1ZmZlcnNbaV0pOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKiByZXNldCB0byBkZWZhdWx0IHZhbHVlcyBiZWZvcmUgc3RhcnRpbmcgc3RyZWFtaW5nICovCi1zdGF0aWMgdm9pZAotZ3N0X2R2ZGVtdXhfcmVzZXQgKEdzdERWRGVtdXggKiBkdmRlbXV4KQotewotICBkdmRlbXV4LT5mcmFtZV9vZmZzZXQgPSAwOwotICBkdmRlbXV4LT5hdWRpb19vZmZzZXQgPSAwOwotICBkdmRlbXV4LT52aWRlb19vZmZzZXQgPSAwOwotICBkdmRlbXV4LT5kaXNjb250ID0gVFJVRTsKLSAgZ19hdG9taWNfaW50X3NldCAoJmR2ZGVtdXgtPmZvdW5kX2hlYWRlciwgMCk7Ci0gIGR2ZGVtdXgtPmZyYW1lX2xlbiA9IC0xOwotICBkdmRlbXV4LT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgZHZkZW11eC0+bmV3X21lZGlhID0gRkFMU0U7Ci0gIGR2ZGVtdXgtPmZyYW1lcmF0ZV9udW1lcmF0b3IgPSAwOwotICBkdmRlbXV4LT5mcmFtZXJhdGVfZGVub21pbmF0b3IgPSAwOwotICBkdmRlbXV4LT5oZWlnaHQgPSAwOwotICBkdmRlbXV4LT5mcmVxdWVuY3kgPSAwOwotICBkdmRlbXV4LT5jaGFubmVscyA9IDA7Ci0gIGR2ZGVtdXgtPndpZGUgPSBGQUxTRTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmR2ZGVtdXgtPmJ5dGVfc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZkdmRlbXV4LT50aW1lX3NlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtID0gMDsKLSAgZHZkZW11eC0+dXBzdHJlYW1fdGltZV9zZWdtZW50ID0gRkFMU0U7Ci0gIGR2ZGVtdXgtPmhhdmVfZ3JvdXBfaWQgPSBGQUxTRTsKLSAgZHZkZW11eC0+Z3JvdXBfaWQgPSBHX01BWFVJTlQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGF2ZV9ncm91cF9pZCAoR3N0RFZEZW11eCAqIGRlbXV4KQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgZXZlbnQgPSBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKGRlbXV4LT5zaW5rcGFkLCBHU1RfRVZFTlRfU1RSRUFNX1NUQVJULCAwKTsKLSAgaWYgKGV2ZW50KSB7Ci0gICAgaWYgKGdzdF9ldmVudF9wYXJzZV9ncm91cF9pZCAoZXZlbnQsICZkZW11eC0+Z3JvdXBfaWQpKQotICAgICAgZGVtdXgtPmhhdmVfZ3JvdXBfaWQgPSBUUlVFOwotICAgIGVsc2UKLSAgICAgIGRlbXV4LT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0gZWxzZSBpZiAoIWRlbXV4LT5oYXZlX2dyb3VwX2lkKSB7Ci0gICAgZGVtdXgtPmhhdmVfZ3JvdXBfaWQgPSBUUlVFOwotICAgIGRlbXV4LT5ncm91cF9pZCA9IGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCk7Ci0gIH0KLQotICByZXR1cm4gZGVtdXgtPmhhdmVfZ3JvdXBfaWQ7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2R2ZGVtdXhfYWRkX3BhZCAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdGVtcGxhdGUsCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdib29sZWFuIG5vX21vcmVfcGFkczsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgZ2NoYXIgKnN0cmVhbV9pZDsKLSAgZ2NoYXIgcmVjX2RhdGV0aW1lWzQwXTsKLSAgR3N0RGF0ZVRpbWUgKnJlY19kdDsKLQotICBwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAodGVtcGxhdGUsIHRlbXBsYXRlLT5uYW1lX3RlbXBsYXRlKTsKLQotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocGFkLCBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5KSk7Ci0KLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHZkZW11eF9oYW5kbGVfc3JjX2V2ZW50KSk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHBhZCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLQotICBzdHJlYW1faWQgPQotICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkIChwYWQsCi0gICAgICBHU1RfRUxFTUVOVF9DQVNUIChkdmRlbXV4KSwKLSAgICAgIHRlbXBsYXRlID09ICZ2aWRlb19zcmNfdGVtcCA/ICJ2aWRlbyIgOiAiYXVkaW8iKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKTsKLSAgaWYgKGhhdmVfZ3JvdXBfaWQgKGR2ZGVtdXgpKQotICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQgKGV2ZW50LCBkdmRlbXV4LT5ncm91cF9pZCk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBldmVudCk7Ci0gIGdfZnJlZSAoc3RyZWFtX2lkKTsKLQotICBnc3RfcGFkX3NldF9jYXBzIChwYWQsIGNhcHMpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkdmRlbXV4LT50aW1lX3NlZ21lbnQpKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZHZkZW11eCksIHBhZCk7Ci0KLSAgbm9fbW9yZV9wYWRzID0KLSAgICAgIChkdmRlbXV4LT52aWRlb3NyY3BhZCAhPSBOVUxMICYmIHRlbXBsYXRlID09ICZhdWRpb19zcmNfdGVtcCkgfHwKLSAgICAgIChkdmRlbXV4LT5hdWRpb3NyY3BhZCAhPSBOVUxMICYmIHRlbXBsYXRlID09ICZ2aWRlb19zcmNfdGVtcCk7Ci0KLSAgaWYgKG5vX21vcmVfcGFkcykKLSAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdTVF9FTEVNRU5UIChkdmRlbXV4KSk7Ci0KLSAgaWYgKG5vX21vcmVfcGFkcykgewotICAgIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgICB0YWdzID0gZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19DT05UQUlORVJfRk9STUFULCAiRFYiLCBOVUxMKTsKLSAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlICh0YWdzLCBHU1RfVEFHX1NDT1BFX0dMT0JBTCk7Ci0KLSAgICBpZiAoZHZfZ2V0X3JlY29yZGluZ19kYXRldGltZSAoZHZkZW11eC0+ZGVjb2RlciwgcmVjX2RhdGV0aW1lKSkgewotICAgICAgcmVjX2R0ID0gZ3N0X2RhdGVfdGltZV9uZXdfZnJvbV9pc284NjAxX3N0cmluZyAocmVjX2RhdGV0aW1lKTsKLSAgICAgIGlmIChyZWNfZHQpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX0RBVEVfVElNRSwKLSAgICAgICAgICAgIHJlY19kdCwgTlVMTCk7Ci0gICAgICAgIGdzdF9kYXRlX3RpbWVfdW5yZWYgKHJlY19kdCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGR2ZGVtdXgtPnZpZGVvc3JjcGFkKQotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChkdmRlbXV4LT52aWRlb3NyY3BhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X3JlZiAodGFncykpKTsKLSAgICBpZiAoZHZkZW11eC0+YXVkaW9zcmNwYWQpCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGR2ZGVtdXgtPmF1ZGlvc3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfcmVmICh0YWdzKSkpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIH0KLQotICByZXR1cm4gcGFkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R2ZGVtdXhfcmVtb3ZlX3BhZHMgKEdzdERWRGVtdXggKiBkdmRlbXV4KQotewotICBpZiAoZHZkZW11eC0+dmlkZW9zcmNwYWQpIHsKLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVCAoZHZkZW11eCksIGR2ZGVtdXgtPnZpZGVvc3JjcGFkKTsKLSAgICBkdmRlbXV4LT52aWRlb3NyY3BhZCA9IE5VTEw7Ci0gIH0KLSAgaWYgKGR2ZGVtdXgtPmF1ZGlvc3JjcGFkKSB7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlQgKGR2ZGVtdXgpLCBkdmRlbXV4LT5hdWRpb3NyY3BhZCk7Ci0gICAgZHZkZW11eC0+YXVkaW9zcmNwYWQgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQgKEdzdERWRGVtdXggKiBkdmRlbXV4LCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwKLSAgICBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGlmIChkZXN0X2Zvcm1hdCA9PSBzcmNfZm9ybWF0IHx8IHNyY192YWx1ZSA9PSAtMSkgewotICAgICpkZXN0X3ZhbHVlID0gc3JjX3ZhbHVlOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGlmIChkdmRlbXV4LT5mcmFtZV9sZW4gPD0gMCkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmIChkdmRlbXV4LT5kZWNvZGVyID09IE5VTEwpCi0gICAgZ290byBlcnJvcjsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHBhZCwKLSAgICAgICJzcmNfdmFsdWU6JSIgR19HSU5UNjRfRk9STUFUICIsIHNyY19mb3JtYXQ6JWQsIGRlc3RfZm9ybWF0OiVkIiwKLSAgICAgIHNyY192YWx1ZSwgc3JjX2Zvcm1hdCwgZGVzdF9mb3JtYXQpOwotCi0gIHN3aXRjaCAoc3JjX2Zvcm1hdCkgewotICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgIHN3aXRjaCAoZGVzdF9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgICAgICAgaWYgKHBhZCA9PSBkdmRlbXV4LT52aWRlb3NyY3BhZCkKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0gc3JjX3ZhbHVlIC8gZHZkZW11eC0+ZnJhbWVfbGVuOwotICAgICAgICAgIGVsc2UgaWYgKHBhZCA9PSBkdmRlbXV4LT5hdWRpb3NyY3BhZCkKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0gc3JjX3ZhbHVlIC8gKDIgKiBkdmRlbXV4LT5jaGFubmVscyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgIGlmIChwYWQgPT0gZHZkZW11eC0+dmlkZW9zcmNwYWQpCi0gICAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLAotICAgICAgICAgICAgICAgIEdTVF9TRUNPTkQgKiBkdmRlbXV4LT5mcmFtZXJhdGVfZGVub21pbmF0b3IsCi0gICAgICAgICAgICAgICAgZHZkZW11eC0+ZnJhbWVfbGVuICogZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvcik7Ci0gICAgICAgICAgZWxzZSBpZiAocGFkID09IGR2ZGVtdXgtPmF1ZGlvc3JjcGFkKQotICAgICAgICAgICAgKmRlc3RfdmFsdWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzcmNfdmFsdWUsIEdTVF9TRUNPTkQsCi0gICAgICAgICAgICAgICAgMiAqIGR2ZGVtdXgtPmZyZXF1ZW5jeSAqIGR2ZGVtdXgtPmNoYW5uZWxzKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgc3dpdGNoIChkZXN0X2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgaWYgKHBhZCA9PSBkdmRlbXV4LT52aWRlb3NyY3BhZCkKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcmNfdmFsdWUsCi0gICAgICAgICAgICAgICAgZHZkZW11eC0+ZnJhbWVfbGVuICogZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvciwKLSAgICAgICAgICAgICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfZGVub21pbmF0b3IgKiBHU1RfU0VDT05EKTsKLSAgICAgICAgICBlbHNlIGlmIChwYWQgPT0gZHZkZW11eC0+YXVkaW9zcmNwYWQpCi0gICAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNyY192YWx1ZSwKLSAgICAgICAgICAgICAgICAyICogZHZkZW11eC0+ZnJlcXVlbmN5ICogZHZkZW11eC0+Y2hhbm5lbHMsIEdTVF9TRUNPTkQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgICAgICBpZiAocGFkID09IGR2ZGVtdXgtPnZpZGVvc3JjcGFkKSB7Ci0gICAgICAgICAgICBpZiAoc3JjX3ZhbHVlKQotICAgICAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvciwKLSAgICAgICAgICAgICAgICAgIGR2ZGVtdXgtPmZyYW1lcmF0ZV9kZW5vbWluYXRvciAqIEdTVF9TRUNPTkQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAqZGVzdF92YWx1ZSA9IDA7Ci0gICAgICAgICAgfSBlbHNlIGlmIChwYWQgPT0gZHZkZW11eC0+YXVkaW9zcmNwYWQpIHsKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcmNfdmFsdWUsCi0gICAgICAgICAgICAgICAgZHZkZW11eC0+ZnJlcXVlbmN5LCBHU1RfU0VDT05EKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgIHN3aXRjaCAoZGVzdF9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICAgICAgaWYgKHBhZCA9PSBkdmRlbXV4LT52aWRlb3NyY3BhZCkgewotICAgICAgICAgICAgKmRlc3RfdmFsdWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwKLSAgICAgICAgICAgICAgICBHU1RfU0VDT05EICogZHZkZW11eC0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgIGR2ZGVtdXgtPmZyYW1lcmF0ZV9udW1lcmF0b3IpOwotICAgICAgICAgIH0gZWxzZSBpZiAocGFkID09IGR2ZGVtdXgtPmF1ZGlvc3JjcGFkKSB7Ci0gICAgICAgICAgICBpZiAoc3JjX3ZhbHVlKQotICAgICAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgR1NUX1NFQ09ORCwgZHZkZW11eC0+ZnJlcXVlbmN5KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgKmRlc3RfdmFsdWUgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIGlmIChwYWQgPT0gZHZkZW11eC0+dmlkZW9zcmNwYWQpIHsKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0gc3JjX3ZhbHVlICogZHZkZW11eC0+ZnJhbWVfbGVuOwotICAgICAgICAgIH0gZWxzZSBpZiAocGFkID09IGR2ZGVtdXgtPmF1ZGlvc3JjcGFkKSB7Ci0gICAgICAgICAgICAqZGVzdF92YWx1ZSA9IHNyY192YWx1ZSAqIDIgKiBkdmRlbXV4LT5jaGFubmVsczsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gRkFMU0U7Ci0gIH0KLQotZG9uZToKLSAgR1NUX0lORk9fT0JKRUNUIChwYWQsCi0gICAgICAiUmVzdWx0IDogZGVzdF9mb3JtYXQ6JWQsIGRlc3RfdmFsdWU6JSIgR19HSU5UNjRfRk9STUFUICIsIHJlczolZCIsCi0gICAgICBkZXN0X2Zvcm1hdCwgKmRlc3RfdmFsdWUsIHJlcyk7Ci0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1lcnJvcjoKLSAgewotICAgIEdTVF9JTkZPICgic291cmNlIGNvbnZlcnNpb24gZmFpbGVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfc2lua19jb252ZXJ0IChHc3REVkRlbXV4ICogZHZkZW11eCwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsCi0gICAgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVtdXgsICIlZCAtPiAlZCIsIHNyY19mb3JtYXQsIGRlc3RfZm9ybWF0KTsKLSAgR1NUX0lORk9fT0JKRUNUIChkdmRlbXV4LAotICAgICAgInNyY192YWx1ZTolIiBHX0dJTlQ2NF9GT1JNQVQgIiwgc3JjX2Zvcm1hdDolZCwgZGVzdF9mb3JtYXQ6JWQiLAotICAgICAgc3JjX3ZhbHVlLCBzcmNfZm9ybWF0LCBkZXN0X2Zvcm1hdCk7Ci0KLSAgaWYgKGRlc3RfZm9ybWF0ID09IHNyY19mb3JtYXQgfHwgc3JjX3ZhbHVlID09IC0xKSB7Ci0gICAgKmRlc3RfdmFsdWUgPSBzcmNfdmFsdWU7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgaWYgKGR2ZGVtdXgtPmZyYW1lX2xlbiA8PSAwKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgc3dpdGNoIChzcmNfZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgc3dpdGNoIChkZXN0X2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgewotICAgICAgICAgIGd1aW50NjQgZnJhbWU7Ci0KLSAgICAgICAgICAvKiBnZXQgZnJhbWUgbnVtYmVyLCByb3VuZHMgZG93biBzbyBkb24ndCBjb21iaW5lIHRoaXMKLSAgICAgICAgICAgKiBsaW5lIGFuZCB0aGUgbmV4dCBsaW5lLiAqLwotICAgICAgICAgIGZyYW1lID0gc3JjX3ZhbHVlIC8gZHZkZW11eC0+ZnJhbWVfbGVuOwotCi0gICAgICAgICAgKmRlc3RfdmFsdWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGZyYW1lLAotICAgICAgICAgICAgICBHU1RfU0VDT05EICogZHZkZW11eC0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yLAotICAgICAgICAgICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfbnVtZXJhdG9yKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICBzd2l0Y2ggKGRlc3RfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgewotICAgICAgICAgIGd1aW50NjQgZnJhbWU7Ci0KLSAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIGZyYW1lICovCi0gICAgICAgICAgZnJhbWUgPQotICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwgZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvciwKLSAgICAgICAgICAgICAgZHZkZW11eC0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yICogR1NUX1NFQ09ORCk7Ci0KLSAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIG9mZnNldCBmcm9tIHRoZSByb3VuZGVkIGZyYW1lICovCi0gICAgICAgICAgKmRlc3RfdmFsdWUgPSBmcmFtZSAqIGR2ZGVtdXgtPmZyYW1lX2xlbjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICB9Ci0gIEdTVF9JTkZPX09CSkVDVCAoZHZkZW11eCwKLSAgICAgICJSZXN1bHQgOiBkZXN0X2Zvcm1hdDolZCwgZGVzdF92YWx1ZTolIiBHX0dJTlQ2NF9GT1JNQVQgIiwgcmVzOiVkIiwKLSAgICAgIGRlc3RfZm9ybWF0LCAqZGVzdF92YWx1ZSwgcmVzKTsKLQotZG9uZToKLSAgcmV0dXJuIHJlczsKLQotZXJyb3I6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGR2ZGVtdXgsICJzaW5rIGNvbnZlcnNpb24gZmFpbGVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0RFZEZW11eCAqZHZkZW11eDsKLQotICBkdmRlbXV4ID0gR1NUX0RWREVNVVggKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046Ci0gICAgewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdpbnQ2NCBjdXI7Ci0KLSAgICAgIC8qIGdldCB0YXJnZXQgZm9ybWF0ICovCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgLyogYnJpbmcgdGhlIHBvc2l0aW9uIHRvIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LiAqLwotICAgICAgaWYgKCEocmVzID0gZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQgKGR2ZGVtdXgsIHBhZCwKLSAgICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgZHZkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgZm9ybWF0LCAmY3VyKSkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBjdXIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICBnaW50NjQgZW5kOwotICAgICAgR3N0UXVlcnkgKnBxdWVyeTsKLQotICAgICAgLyogRmlyc3QgYXNrIHRoZSBwZWVyIGluIHRoZSBvcmlnaW5hbCBmb3JtYXQgKi8KLSAgICAgIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChkdmRlbXV4LT5zaW5rcGFkLCBxdWVyeSkpIHsKLSAgICAgICAgLyogZ2V0IHRhcmdldCBmb3JtYXQgKi8KLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgICAgLyogTm93IGFzayB0aGUgcGVlciBpbiBCWVRFUyBmb3JtYXQgYW5kIHRyeSB0byBjb252ZXJ0ICovCi0gICAgICAgIHBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoZHZkZW11eC0+c2lua3BhZCwgcHF1ZXJ5KSkgewotICAgICAgICAgIGdzdF9xdWVyeV91bnJlZiAocHF1ZXJ5KTsKLSAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZ2V0IHBlZXIgdG90YWwgbGVuZ3RoICovCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocHF1ZXJ5LCBOVUxMLCAmZW5kKTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3VucmVmIChwcXVlcnkpOwotCi0gICAgICAgIC8qIGNvbnZlcnQgZW5kIHRvIHJlcXVlc3RlZCBmb3JtYXQgKi8KLSAgICAgICAgaWYgKGVuZCAhPSAtMSkgewotICAgICAgICAgIGlmICghKHJlcyA9IGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCAoZHZkZW11eCwKLSAgICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBlbmQsIGZvcm1hdCwgJmVuZCkpKSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm9ybWF0LCBlbmQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfQ09OVkVSVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgc3JjX2ZtdCwgZGVzdF9mbXQ7Ci0gICAgICBnaW50NjQgc3JjX3ZhbCwgZGVzdF92YWw7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0IChxdWVyeSwgJnNyY19mbXQsICZzcmNfdmFsLCAmZGVzdF9mbXQsICZkZXN0X3ZhbCk7Ci0gICAgICBpZiAoIShyZXMgPQotICAgICAgICAgICAgICBnc3RfZHZkZW11eF9zcmNfY29udmVydCAoZHZkZW11eCwgcGFkLCBzcmNfZm10LCBzcmNfdmFsLAotICAgICAgICAgICAgICAgICAgZGVzdF9mbXQsICZkZXN0X3ZhbCkpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0IChxdWVyeSwgc3JjX2ZtdCwgc3JjX3ZhbCwgZGVzdF9mbXQsIGRlc3RfdmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0gICAgICBHc3RRdWVyeSAqcGVlcnF1ZXJ5OwotICAgICAgZ2Jvb2xlYW4gc2Vla2FibGU7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZtdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgIC8qIFdlIGNhbiBvbmx5IGhhbmRsZSBUSU1FIHNlZWtzIHJlYWxseSAqLwotICAgICAgaWYgKGZtdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgZm10LCBGQUxTRSwgLTEsIC0xKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEZpcnN0IGFzayB1cHN0cmVhbSAqLwotICAgICAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeSAoZHZkZW11eC0+c2lua3BhZCwgcXVlcnkpKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaWYgKHNlZWthYmxlKSB7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXMgPSBUUlVFOwotCi0gICAgICBwZWVycXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgc2Vla2FibGUgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKGR2ZGVtdXgtPnNpbmtwYWQsIHBlZXJxdWVyeSk7Ci0KLSAgICAgIGlmIChzZWVrYWJsZSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHBlZXJxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgICAgIGdzdF9xdWVyeV91bnJlZiAocGVlcnF1ZXJ5KTsKLQotICAgICAgaWYgKHNlZWthYmxlKSB7Ci0gICAgICAgIHBlZXJxdWVyeSA9IGdzdF9xdWVyeV9uZXdfZHVyYXRpb24gKEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICAgIHNlZWthYmxlID0gZ3N0X2R2ZGVtdXhfc3JjX3F1ZXJ5IChwYWQsIHBhcmVudCwgcGVlcnF1ZXJ5KTsKLQotICAgICAgICBpZiAoc2Vla2FibGUpIHsKLSAgICAgICAgICBnaW50NjQgZHVyYXRpb247Ci0KLSAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHBlZXJxdWVyeSwgTlVMTCwgJmR1cmF0aW9uKTsKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKHF1ZXJ5LCBHU1RfRk9STUFUX1RJTUUsIHNlZWthYmxlLCAwLCBkdXJhdGlvbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBGQUxTRSwgLTEsIC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9xdWVyeV91bnJlZiAocGVlcnF1ZXJ5KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgRkFMU0UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWVycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHICgiZXJyb3Igc291cmNlIHF1ZXJ5Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdERWRGVtdXggKmR2ZGVtdXg7Ci0KLSAgZHZkZW11eCA9IEdTVF9EVkRFTVVYIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0NPTlZFUlQ6Ci0gICAgewotICAgICAgR3N0Rm9ybWF0IHNyY19mbXQsIGRlc3RfZm10OwotICAgICAgZ2ludDY0IHNyY192YWwsIGRlc3RfdmFsOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksICZzcmNfZm10LCAmc3JjX3ZhbCwgJmRlc3RfZm10LCAmZGVzdF92YWwpOwotICAgICAgaWYgKCEocmVzID0KLSAgICAgICAgICAgICAgZ3N0X2R2ZGVtdXhfc2lua19jb252ZXJ0IChkdmRlbXV4LCBzcmNfZm10LCBzcmNfdmFsLCBkZXN0X2ZtdCwKLSAgICAgICAgICAgICAgICAgICZkZXN0X3ZhbCkpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0IChxdWVyeSwgc3JjX2ZtdCwgc3JjX3ZhbCwgZGVzdF9mbXQsIGRlc3RfdmFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotZXJyb3I6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJlcnJvciBoYW5kbGluZyBzaW5rIHF1ZXJ5Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgZXZlbnQgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfcHVzaF9ldmVudCAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGlmIChkdmRlbXV4LT52aWRlb3NyY3BhZCkgewotICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICByZXMgfD0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkdmRlbXV4LT52aWRlb3NyY3BhZCwgZXZlbnQpOwotICB9Ci0KLSAgaWYgKGR2ZGVtdXgtPmF1ZGlvc3JjcGFkKQotICAgIHJlcyB8PSBnc3RfcGFkX3B1c2hfZXZlbnQgKGR2ZGVtdXgtPmF1ZGlvc3JjcGFkLCBldmVudCk7Ci0gIGVsc2UgewotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJlcyA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdmRlbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3REVkRlbXV4ICpkdmRlbXV4ID0gR1NUX0RWREVNVVggKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICAvKiB3ZSBhcmUgbm90IGJsb2NraW5nIG9uIGFueXRoaW5nIGV4ZWN0IHRoZSBwdXNoKCkgY2FsbHMKLSAgICAgICAqIHRvIHRoZSBwZWVyIHdoaWNoIHdpbGwgYmUgdW5ibG9ja2VkIGJ5IGZvcndhcmRpbmcgdGhlCi0gICAgICAgKiBldmVudC4qLwotICAgICAgcmVzID0gZ3N0X2R2ZGVtdXhfcHVzaF9ldmVudCAoZHZkZW11eCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChkdmRlbXV4LT5hZGFwdGVyKTsKLSAgICAgIEdTVF9ERUJVRyAoImNsZWFyZWQgYWRhcHRlciIpOwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmR2ZGVtdXgtPmJ5dGVfc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmZHZkZW11eC0+dGltZV9zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgICAgZHZkZW11eC0+ZGlzY29udCA9IFRSVUU7Ci0gICAgICByZXMgPSBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkdmRlbXV4LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotICAgICAgc3dpdGNoIChzZWdtZW50LT5mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoc2VnbWVudCwgJmR2ZGVtdXgtPmJ5dGVfc2VnbWVudCk7Ci0gICAgICAgICAgZHZkZW11eC0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICAgICAgICBkdmRlbXV4LT5zZWdtZW50X3NlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0gICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoc2VnbWVudCwgJmR2ZGVtdXgtPnRpbWVfc2VnbWVudCk7Ci0KLSAgICAgICAgICBkdmRlbXV4LT51cHN0cmVhbV90aW1lX3NlZ21lbnQgPSBUUlVFOwotICAgICAgICAgIGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLQotICAgICAgICAgIC8qIGFuZCB3ZSBjYW4ganVzdCBmb3J3YXJkIHRoaXMgdGltZSBldmVudCAqLwotICAgICAgICAgIHJlcyA9IGdzdF9kdmRlbXV4X3B1c2hfZXZlbnQgKGR2ZGVtdXgsIGV2ZW50KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgICAvKiBjYW5ub3QgYWNjZXB0IHRoaXMgZm9ybWF0ICovCi0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgLyogZmx1c2ggYW55IHBlbmRpbmcgZGF0YSwgc2hvdWxkIGJlIG5vdGhpbmcgbGVmdC4gKi8KLSAgICAgIGdzdF9kdmRlbXV4X2ZsdXNoIChkdmRlbXV4KTsKLSAgICAgIC8qIGZvcndhcmQgZXZlbnQgKi8KLSAgICAgIHJlcyA9IGdzdF9kdmRlbXV4X3B1c2hfZXZlbnQgKGR2ZGVtdXgsIGV2ZW50KTsKLSAgICAgIC8qIGFuZCBjbGVhciB0aGUgYWRhcHRlciAqLwotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGR2ZGVtdXgtPmFkYXB0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9kdmRlbXV4X3B1c2hfZXZlbnQgKGR2ZGVtdXgsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogY29udmVydCBhIHBhaXIgb2YgdmFsdWVzIG9uIHRoZSBnaXZlbiBzcmNwYWQgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfY29udmVydF9zcmNfcGFpciAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY19zdGFydCwgZ2ludDY0IHNyY19zdG9wLAotICAgIEdzdEZvcm1hdCBkc3RfZm9ybWF0LCBnaW50NjQgKiBkc3Rfc3RhcnQsIGdpbnQ2NCAqIGRzdF9zdG9wKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgR1NUX0lORk8gKCJzdGFydGluZyBjb252ZXJzaW9uIG9mIHN0YXJ0Iik7Ci0gIC8qIGJyaW5nIHRoZSBmb3JtYXQgdG8gdGltZSBvbiBzcmNwYWQuICovCi0gIGlmICghKHJlcyA9IGdzdF9kdmRlbXV4X3NyY19jb252ZXJ0IChkdmRlbXV4LCBwYWQsCi0gICAgICAgICAgICAgIHNyY19mb3JtYXQsIHNyY19zdGFydCwgZHN0X2Zvcm1hdCwgZHN0X3N0YXJ0KSkpIHsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLSAgR1NUX0lORk8gKCJGaW5pc2hlZCBjb252ZXJzaW9uIG9mIHN0YXJ0OiAlIiBHX0dJTlQ2NF9GT1JNQVQsICpkc3Rfc3RhcnQpOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgY29udmVyc2lvbiBvZiBzdG9wIik7Ci0gIC8qIGJyaW5nIHRoZSBmb3JtYXQgdG8gdGltZSBvbiBzcmNwYWQuICovCi0gIGlmICghKHJlcyA9IGdzdF9kdmRlbXV4X3NyY19jb252ZXJ0IChkdmRlbXV4LCBwYWQsCi0gICAgICAgICAgICAgIHNyY19mb3JtYXQsIHNyY19zdG9wLCBkc3RfZm9ybWF0LCBkc3Rfc3RvcCkpKSB7Ci0gICAgLyogY291bGQgbm90IGNvbnZlcnQgc2VlayBmb3JtYXQgdG8gdGltZSBvZmZzZXQgKi8KLSAgICBnb3RvIGRvbmU7Ci0gIH0KLSAgR1NUX0lORk8gKCJGaW5pc2hlZCBjb252ZXJzaW9uIG9mIHN0b3A6ICUiIEdfR0lOVDY0X0ZPUk1BVCwgKmRzdF9zdG9wKTsKLWRvbmU6Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qIGNvbnZlcnQgYSBwYWlyIG9mIHZhbHVlcyBvbiB0aGUgc2lua3BhZCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfZHZkZW11eF9jb252ZXJ0X3NpbmtfcGFpciAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfc3RhcnQsIGdpbnQ2NCBzcmNfc3RvcCwKLSAgICBHc3RGb3JtYXQgZHN0X2Zvcm1hdCwgZ2ludDY0ICogZHN0X3N0YXJ0LCBnaW50NjQgKiBkc3Rfc3RvcCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgY29udmVyc2lvbiBvZiBzdGFydCIpOwotICAvKiBicmluZyB0aGUgZm9ybWF0IHRvIHRpbWUgb24gc3JjcGFkLiAqLwotICBpZiAoIShyZXMgPSBnc3RfZHZkZW11eF9zaW5rX2NvbnZlcnQgKGR2ZGVtdXgsCi0gICAgICAgICAgICAgIHNyY19mb3JtYXQsIHNyY19zdGFydCwgZHN0X2Zvcm1hdCwgZHN0X3N0YXJ0KSkpIHsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLSAgR1NUX0lORk8gKCJGaW5pc2hlZCBjb252ZXJzaW9uIG9mIHN0YXJ0OiAlIiBHX0dJTlQ2NF9GT1JNQVQsICpkc3Rfc3RhcnQpOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgY29udmVyc2lvbiBvZiBzdG9wIik7Ci0gIC8qIGJyaW5nIHRoZSBmb3JtYXQgdG8gdGltZSBvbiBzcmNwYWQuICovCi0gIGlmICghKHJlcyA9IGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCAoZHZkZW11eCwKLSAgICAgICAgICAgICAgc3JjX2Zvcm1hdCwgc3JjX3N0b3AsIGRzdF9mb3JtYXQsIGRzdF9zdG9wKSkpIHsKLSAgICAvKiBjb3VsZCBub3QgY29udmVydCBzZWVrIGZvcm1hdCB0byB0aW1lIG9mZnNldCAqLwotICAgIGdvdG8gZG9uZTsKLSAgfQotICBHU1RfSU5GTyAoIkZpbmlzaGVkIGNvbnZlcnNpb24gb2Ygc3RvcDogJSIgR19HSU5UNjRfRk9STUFULCAqZHN0X3N0b3ApOwotZG9uZToKLSAgcmV0dXJuIHJlczsKLX0KLQotLyogY29udmVydCBhIHBhaXIgb2YgdmFsdWVzIG9uIHRoZSBzcmNwYWQgdG8gYSBwYWlyIG9mCi0gKiB2YWx1ZXMgb24gdGhlIHNpbmtwYWQgCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfY29udmVydF9zcmNfdG9fc2luayAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY19zdGFydCwgZ2ludDY0IHNyY19zdG9wLAotICAgIEdzdEZvcm1hdCBkc3RfZm9ybWF0LCBnaW50NjQgKiBkc3Rfc3RhcnQsIGdpbnQ2NCAqIGRzdF9zdG9wKQotewotICBHc3RGb3JtYXQgY29udjsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGNvbnYgPSBHU1RfRk9STUFUX1RJTUU7Ci0gIC8qIGNvbnZlcnQgdG8gVElNRSBpbnRlcm1lZGlhdGUgZm9ybWF0ICovCi0gIGlmICghKHJlcyA9IGdzdF9kdmRlbXV4X2NvbnZlcnRfc3JjX3BhaXIgKGR2ZGVtdXgsIHBhZCwKLSAgICAgICAgICAgICAgc3JjX2Zvcm1hdCwgc3JjX3N0YXJ0LCBzcmNfc3RvcCwgY29udiwgZHN0X3N0YXJ0LCBkc3Rfc3RvcCkpKSB7Ci0gICAgLyogY291bGQgbm90IGNvbnZlcnQgZm9ybWF0IHRvIHRpbWUgb2Zmc2V0ICovCi0gICAgZ290byBkb25lOwotICB9Ci0gIC8qIGNvbnZlcnQgdG8gZHN0IGZvcm1hdCBvbiBzaW5rcGFkICovCi0gIGlmICghKHJlcyA9IGdzdF9kdmRlbXV4X2NvbnZlcnRfc2lua19wYWlyIChkdmRlbXV4LAotICAgICAgICAgICAgICBjb252LCAqZHN0X3N0YXJ0LCAqZHN0X3N0b3AsIGRzdF9mb3JtYXQsIGRzdF9zdGFydCwgZHN0X3N0b3ApKSkgewotICAgIC8qIGNvdWxkIG5vdCBjb252ZXJ0IGZvcm1hdCB0byB0aW1lIG9mZnNldCAqLwotICAgIGdvdG8gZG9uZTsKLSAgfQotZG9uZToKLSAgcmV0dXJuIHJlczsKLX0KLQotI2lmIDAKLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfY29udmVydF9zZWdtZW50IChHc3REVkRlbXV4ICogZHZkZW11eCwgR3N0U2VnbWVudCAqIHNyYywKLSAgICBHc3RTZWdtZW50ICogZGVzdCkKLXsKLSAgZGVzdC0+cmF0ZSA9IHNyYy0+cmF0ZTsKLSAgZGVzdC0+YWJzX3JhdGUgPSBzcmMtPmFic19yYXRlOwotICBkZXN0LT5mbGFncyA9IHNyYy0+ZmxhZ3M7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0jZW5kaWYKLQotLyogaGFuZGxlIHNlZWsgaW4gcHVzaCBiYXNlIG1vZGUuCi0gKgotICogQ29udmVydCB0aGUgdGltZSBzZWVrIHRvIGEgYnl0ZXMgc2VlayBhbmQgc2VuZCBpdAotICogdXBzdHJlYW0KLSAqIERvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBldmVudC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfZHZkZW11eF9oYW5kbGVfcHVzaF9zZWVrIChHc3REVkRlbXV4ICogZHZkZW11eCwgR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBnZG91YmxlIHJhdGU7Ci0gIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgR3N0U2Vla1R5cGUgY3VyX3R5cGUsIHN0b3BfdHlwZTsKLSAgZ2ludDY0IGN1ciwgc3RvcDsKLSAgZ2ludDY0IHN0YXJ0X3Bvc2l0aW9uLCBlbmRfcG9zaXRpb247Ci0gIEdzdEV2ZW50ICpuZXdldmVudDsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAmY3VyX3R5cGUsICZjdXIsICZzdG9wX3R5cGUsICZzdG9wKTsKLQotICAvKiBGaXJzdCB0cnkgaWYgdXBzdHJlYW0gY2FuIGhhbmRsZSB0aW1lIGJhc2VkIHNlZWtzICovCi0gIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQotICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZHZkZW11eC0+c2lua3BhZCwgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpKTsKLQotICBpZiAoIXJlcykgewotICAgIC8qIHdlIGNvbnZlcnQgdGhlIHN0YXJ0L3N0b3Agb24gdGhlIHNyY3BhZCB0byB0aGUgYnl0ZSBmb3JtYXQKLSAgICAgKiBvbiB0aGUgc2lua3BhZCBhbmQgZm9yd2FyZCB0aGUgZXZlbnQgKi8KLSAgICByZXMgPSBnc3RfZHZkZW11eF9jb252ZXJ0X3NyY190b19zaW5rIChkdmRlbXV4LCBwYWQsCi0gICAgICAgIGZvcm1hdCwgY3VyLCBzdG9wLCBHU1RfRk9STUFUX0JZVEVTLCAmc3RhcnRfcG9zaXRpb24sICZlbmRfcG9zaXRpb24pOwotICAgIGlmICghcmVzKQotICAgICAgZ290byBkb25lOwotCi0gICAgLyogbm93IHRoaXMgaXMgdGhlIHVwZGF0ZWQgc2VlayBldmVudCBvbiBieXRlcyAqLwotICAgIG5ld2V2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrIChyYXRlLCBHU1RfRk9STUFUX0JZVEVTLCBmbGFncywKLSAgICAgICAgY3VyX3R5cGUsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3R5cGUsIGVuZF9wb3NpdGlvbik7Ci0gICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKG5ld2V2ZW50LCBnc3RfZXZlbnRfZ2V0X3NlcW51bSAoZXZlbnQpKTsKLQotICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZHZkZW11eC0+c2lua3BhZCwgbmV3ZXZlbnQpOwotICB9Ci1kb25lOgotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R2ZGVtdXhfdXBkYXRlX2ZyYW1lX29mZnNldHMgKEdzdERWRGVtdXggKiBkdmRlbXV4LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICAvKiBjYWxjdWxhdGUgY3VycmVudCBmcmFtZSBudW1iZXIgKi8KLSAgZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQgKGR2ZGVtdXgsIGR2ZGVtdXgtPnZpZGVvc3JjcGFkLAotICAgICAgZHZkZW11eC0+dGltZV9zZWdtZW50LmZvcm1hdCwgdGltZXN0YW1wLAotICAgICAgR1NUX0ZPUk1BVF9ERUZBVUxULCAmZHZkZW11eC0+dmlkZW9fb2Zmc2V0KTsKLQotICAvKiBjYWxjdWxhdGUgY3VycmVudCBhdWRpbyBudW1iZXIgKi8KLSAgZ3N0X2R2ZGVtdXhfc3JjX2NvbnZlcnQgKGR2ZGVtdXgsIGR2ZGVtdXgtPmF1ZGlvc3JjcGFkLAotICAgICAgZHZkZW11eC0+dGltZV9zZWdtZW50LmZvcm1hdCwgdGltZXN0YW1wLAotICAgICAgR1NUX0ZPUk1BVF9ERUZBVUxULCAmZHZkZW11eC0+YXVkaW9fb2Zmc2V0KTsKLQotICAvKiBldmVyeSBEViBmcmFtZSBjb3JyZXNwb250cyB3aXRoIG9uZSB2aWRlbyBmcmFtZSAqLwotICBkdmRlbXV4LT5mcmFtZV9vZmZzZXQgPSBkdmRlbXV4LT52aWRlb19vZmZzZXQ7Ci19Ci0KLS8qIHBvc2l0aW9uIG91cnNlbHZlcyB0byB0aGUgY29uZmlndXJlZCBzZWdtZW50LCB1c2VkIGluIHB1bGwgbW9kZS4KLSAqIFRoZSBpbnB1dCBzZWdtZW50IGlzIGluIFRJTUUgZm9ybWF0LiBXZSBjb252ZXJ0IHRoZSB0aW1lIHZhbHVlcwotICogdG8gYnl0ZXMgdmFsdWVzIGludG8gb3VyIGJ5dGVfc2VnbWVudCB3aGljaCB3ZSB1c2UgdG8gcHVsbCBkYXRhIGZyb20KLSAqIHRoZSBzaW5rcGFkIHBlZXIuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfZG9fc2VlayAoR3N0RFZEZW11eCAqIGRlbXV4LCBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gIC8qIHBvc2l0aW9uIHRvIHZhbHVlIGNvbmZpZ3VyZWQgaXMgbGFzdF9zdG9wLCB0aGlzIHdpbGwgcm91bmQgZG93bgotICAgKiB0byB0aGUgYnl0ZSBwb3NpdGlvbiB3aGVyZSB0aGUgZnJhbWUgY29udGFpbmluZyB0aGUgZ2l2ZW4gCi0gICAqIHRpbWVzdGFtcCBjYW4gYmUgZm91bmQuICovCi0gIGZvcm1hdCA9IEdTVF9GT1JNQVRfQllURVM7Ci0gIHJlcyA9IGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCAoZGVtdXgsCi0gICAgICBzZWdtZW50LT5mb3JtYXQsIHNlZ21lbnQtPnBvc2l0aW9uLAotICAgICAgZm9ybWF0LCAoZ2ludDY0ICopICYgZGVtdXgtPmJ5dGVfc2VnbWVudC5wb3NpdGlvbik7Ci0gIGlmICghcmVzKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiB1cGRhdGUgYnl0ZSBzZWdtZW50IHN0YXJ0ICovCi0gIGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCAoZGVtdXgsCi0gICAgICBzZWdtZW50LT5mb3JtYXQsIHNlZ21lbnQtPnN0YXJ0LCBmb3JtYXQsCi0gICAgICAoZ2ludDY0ICopICYgZGVtdXgtPmJ5dGVfc2VnbWVudC5zdGFydCk7Ci0KLSAgLyogdXBkYXRlIGJ5dGUgc2VnbWVudCBzdG9wICovCi0gIGdzdF9kdmRlbXV4X3NpbmtfY29udmVydCAoZGVtdXgsCi0gICAgICBzZWdtZW50LT5mb3JtYXQsIHNlZ21lbnQtPnN0b3AsIGZvcm1hdCwKLSAgICAgIChnaW50NjQgKikgJiBkZW11eC0+Ynl0ZV9zZWdtZW50LnN0b3ApOwotCi0gIC8qIHVwZGF0ZSBieXRlIHNlZ21lbnQgdGltZSAqLwotICBnc3RfZHZkZW11eF9zaW5rX2NvbnZlcnQgKGRlbXV4LAotICAgICAgc2VnbWVudC0+Zm9ybWF0LCBzZWdtZW50LT50aW1lLCBmb3JtYXQsCi0gICAgICAoZ2ludDY0ICopICYgZGVtdXgtPmJ5dGVfc2VnbWVudC50aW1lKTsKLQotICBnc3RfZHZkZW11eF91cGRhdGVfZnJhbWVfb2Zmc2V0cyAoZGVtdXgsIHNlZ21lbnQtPnN0YXJ0KTsKLQotICBkZW11eC0+ZGlzY29udCA9IFRSVUU7Ci0KLWRvbmU6Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qIGhhbmRsZSBzZWVrIGluIHB1bGwgYmFzZSBtb2RlLgotICoKLSAqIERvZXMgbm90IHRha2Ugb3duZXJzaGlwIG9mIHRoZSBldmVudC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfZHZkZW11eF9oYW5kbGVfcHVsbF9zZWVrIChHc3REVkRlbXV4ICogZGVtdXgsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0gIGdkb3VibGUgcmF0ZTsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RTZWVrVHlwZSBjdXJfdHlwZSwgc3RvcF90eXBlOwotICBnaW50NjQgY3VyLCBzdG9wOwotICBnYm9vbGVhbiBmbHVzaDsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotICBHc3RTZWdtZW50IHNlZWtzZWdtZW50OwotICBHc3RFdmVudCAqbmV3X2V2ZW50OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZG9pbmcgc2VlayIpOwotCi0gIC8qIGZpcnN0IGJyaW5nIHRoZSBldmVudCBmb3JtYXQgdG8gVElNRSwgb3VyIG5hdGl2ZSBmb3JtYXQKLSAgICogdG8gcGVyZm9ybSB0aGUgc2VlayBvbiAqLwotICBpZiAoZXZlbnQpIHsKLSAgICBHc3RGb3JtYXQgY29udjsKLQotICAgIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgJnJhdGUsICZmb3JtYXQsICZmbGFncywKLSAgICAgICAgJmN1cl90eXBlLCAmY3VyLCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0KLSAgICAvKiBjYW4ndCBzZWVrIGJhY2t3YXJkcyB5ZXQgKi8KLSAgICBpZiAocmF0ZSA8PSAwLjApCi0gICAgICBnb3RvIHdyb25nX3JhdGU7Ci0KLSAgICAvKiBjb252ZXJ0IGlucHV0IGZvcm1hdCB0byBUSU1FICovCi0gICAgY29udiA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICBpZiAoIShnc3RfZHZkZW11eF9jb252ZXJ0X3NyY19wYWlyIChkZW11eCwgcGFkLAotICAgICAgICAgICAgICAgIGZvcm1hdCwgY3VyLCBzdG9wLCBjb252LCAmY3VyLCAmc3RvcCkpKQotICAgICAgZ290byBub19mb3JtYXQ7Ci0KLSAgICBmb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7Ci0gIH0gZWxzZSB7Ci0gICAgZmxhZ3MgPSAwOwotICB9Ci0KLSAgZGVtdXgtPnNlZ21lbnRfc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLQotICBmbHVzaCA9IGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSDsKLQotICAvKiBzZW5kIGZsdXNoIHN0YXJ0ICovCi0gIGlmIChmbHVzaCkgewotICAgIG5ld19ldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7Ci0gICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKG5ld19ldmVudCwgZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkZW11eCwgbmV3X2V2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKGRlbXV4LT5zaW5rcGFkKTsKLSAgfQotCi0gIC8qIGdyYWIgc3RyZWFtaW5nIGxvY2ssIHRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcG9zc2libGUsIGVpdGhlcgotICAgKiBiZWNhdXNlIHRoZSB0YXNrIGlzIHBhdXNlZCBvciBvdXIgc3RyZWFtaW5nIHRocmVhZCBzdG9wcGVkCi0gICAqIGJlY2F1c2Ugb3VyIHBlZXIgaXMgZmx1c2hpbmcuICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKGRlbXV4LT5zaW5rcGFkKTsKLQotICAvKiBtYWtlIGNvcHkgaW50byB0ZW1wIHN0cnVjdHVyZSwgd2UgY2FuIG9ubHkgdXBkYXRlIHRoZSBtYWluIG9uZQotICAgKiB3aGVuIHRoZSBzdWJjbGFzcyBhY3R1YWxseSBjb3VsZCB0byB0aGUgc2Vlay4gKi8KLSAgbWVtY3B5ICgmc2Vla3NlZ21lbnQsICZkZW11eC0+dGltZV9zZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICAvKiBub3cgY29uZmlndXJlIHRoZSBzZWVrIHNlZ21lbnQgKi8KLSAgaWYgKGV2ZW50KSB7Ci0gICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAotICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzZWdtZW50IGNvbmZpZ3VyZWQgZnJvbSAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICIgdG8gJSIgR19HSU5UNjRfRk9STUFUICIsIHBvc2l0aW9uICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgIHNlZWtzZWdtZW50LnN0YXJ0LCBzZWVrc2VnbWVudC5zdG9wLCBzZWVrc2VnbWVudC5wb3NpdGlvbik7Ci0KLSAgLyogZG8gdGhlIHNlZWssIHNlZ21lbnQucG9zaXRpb24gY29udGFpbnMgbmV3IHBvc2l0aW9uLiAqLwotICByZXMgPSBnc3RfZHZkZW11eF9kb19zZWVrIChkZW11eCwgJnNlZWtzZWdtZW50KTsKLQotICAvKiBhbmQgcHJlcGFyZSB0byBjb250aW51ZSBzdHJlYW1pbmcgKi8KLSAgaWYgKGZsdXNoKSB7Ci0gICAgLyogc2VuZCBmbHVzaCBzdG9wLCBwZWVyIHdpbGwgYWNjZXB0IGRhdGEgYW5kIGV2ZW50cyBhZ2Fpbi4gV2UKLSAgICAgKiBhcmUgbm90IHlldCBwcm92aWRpbmcgZGF0YSBhcyB3ZSBzdGlsbCBoYXZlIHRoZSBTVFJFQU1fTE9DSy4gKi8KLSAgICBuZXdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOwotICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChuZXdfZXZlbnQsIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgZ3N0X2R2ZGVtdXhfcHVzaF9ldmVudCAoZGVtdXgsIG5ld19ldmVudCk7Ci0gIH0KLQotICAvKiBpZiBzdWNjZXNzZnVsbCBzZWVrLCB3ZSB1cGRhdGUgb3VyIHJlYWwgc2VnbWVudCBhbmQgcHVzaAotICAgKiBvdXQgdGhlIG5ldyBzZWdtZW50LiAqLwotICBpZiAocmVzKSB7Ci0gICAgbWVtY3B5ICgmZGVtdXgtPnRpbWVfc2VnbWVudCwgJnNlZWtzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICAgIGlmIChkZW11eC0+dGltZV9zZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7Ci0gICAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoZGVtdXgpLAotICAgICAgICAgIGRlbXV4LT50aW1lX3NlZ21lbnQuZm9ybWF0LCBkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uKTsKLSAgICAgIGdzdF9tZXNzYWdlX3NldF9zZXFudW0gKG1lc3NhZ2UsIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgbWVzc2FnZSk7Ci0gICAgfQotICAgIGlmICgoc3RvcCA9IGRlbXV4LT50aW1lX3NlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICBzdG9wID0gZGVtdXgtPnRpbWVfc2VnbWVudC5kdXJhdGlvbjsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICJTYXZpbmcgbmV3c2VnbWVudCBldmVudCB0byBiZSBzZW50IGluIHN0cmVhbWluZyB0aHJlYWQiKTsKLQotICAgIGlmIChkZW11eC0+cGVuZGluZ19zZWdtZW50KQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChkZW11eC0+cGVuZGluZ19zZWdtZW50KTsKLQotICAgIGRlbXV4LT5wZW5kaW5nX3NlZ21lbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkZW11eC0+dGltZV9zZWdtZW50KTsKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZGVtdXgtPnBlbmRpbmdfc2VnbWVudCwgZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLQotICAgIGRlbXV4LT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgfQotCi0gIC8qIGFuZCByZXN0YXJ0IHRoZSB0YXNrIGluIGNhc2UgaXQgZ290IHBhdXNlZCBleHBsaWNpdGVseSBvciBieQotICAgKiB0aGUgRkxVU0hfU1RBUlQgZXZlbnQgd2UgcHVzaGVkIG91dC4gKi8KLSAgZ3N0X3BhZF9zdGFydF90YXNrIChkZW11eC0+c2lua3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2R2ZGVtdXhfbG9vcCwKLSAgICAgIGRlbXV4LT5zaW5rcGFkLCBOVUxMKTsKLQotICAvKiBhbmQgcmVsZWFzZSB0aGUgbG9jayBhZ2FpbiBzbyB3ZSBjYW4gY29udGludWUgc3RyZWFtaW5nICovCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAoZGVtdXgtPnNpbmtwYWQpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfcmF0ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibmVnYXRpdmUgcGxheWJhY2sgcmF0ZSAlbGYgbm90IHN1cHBvcnRlZC4iLCByYXRlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2Zvcm1hdDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiY2Fubm90IGNvbnZlcnQgdG8gVElNRSBmb3JtYXQsIHNlZWsgYWJvcnRlZC4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHZkZW11eF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RFZEZW11eCAqZHZkZW11eCA9IEdTVF9EVkRFTVVYIChlbGVtZW50KTsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICB7Ci0gICAgICAvKiBjaGVja2luZyBoZWFkZXIgYW5kIGNvbmZpZ3VyaW5nIHRoZSBzZWVrIG11c3QgYmUgYXRvbWljICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGR2ZGVtdXgpOwotICAgICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZkdmRlbXV4LT5mb3VuZF9oZWFkZXIpID09IDApIHsKLSAgICAgICAgR3N0RXZlbnQgKipldmVudF9wOwotCi0gICAgICAgIGV2ZW50X3AgPSAmZHZkZW11eC0+c2Vla19ldmVudDsKLQotICAgICAgICAvKiBXZSBkb24ndCBoYXZlIHBhZHMgeWV0LiBLZWVwIHRoZSBldmVudC4gKi8KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChkdmRlbXV4LCAiS2VlcGluZyB0aGUgc2VlayBldmVudCBmb3IgbGF0ZXIiKTsKLQotICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoZXZlbnRfcCwgZXZlbnQpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZHZkZW11eCk7Ci0KLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkdmRlbXV4KTsKLQotICAgICAgICBpZiAoZHZkZW11eC0+c2Vla19oYW5kbGVyKQotICAgICAgICAgIHJlcyA9IGR2ZGVtdXgtPnNlZWtfaGFuZGxlciAoZHZkZW11eCwgZHZkZW11eC0+dmlkZW9zcmNwYWQsIGV2ZW50KTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zZW5kX2V2ZW50IChlbGVtZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qIGhhbmRsZSBhbiBldmVudCBvbiB0aGUgc291cmNlIHBhZCwgaXQncyBtb3N0IGxpa2VseSBhIHNlZWsgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdERWRGVtdXggKmR2ZGVtdXg7Ci0KLSAgZHZkZW11eCA9IEdTVF9EVkRFTVVYIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgICAvKiBzZWVrIGhhbmRsZXIgaXMgaW5zdGFsbGVkIGJhc2VkIG9uIHNjaGVkdWxpbmcgbW9kZSAqLwotICAgICAgaWYgKGR2ZGVtdXgtPnNlZWtfaGFuZGxlcikKLSAgICAgICAgcmVzID0gZHZkZW11eC0+c2Vla19oYW5kbGVyIChkdmRlbXV4LCBwYWQsIGV2ZW50KTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZHZkZW11eC0+c2lua3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi0vKiBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiBidWZmZXIgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZHZkZW11eF9kZW11eF9hdWRpbyAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBndWludDY0IGR1cmF0aW9uKQotewotICBnaW50IG51bV9zYW1wbGVzOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZHZfZGVjb2RlX2Z1bGxfYXVkaW8gKGR2ZGVtdXgtPmRlY29kZXIsIG1hcC5kYXRhLCBkdmRlbXV4LT5hdWRpb19idWZmZXJzKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICBpZiAoR19MSUtFTFkgKChudW1fc2FtcGxlcyA9IGR2X2dldF9udW1fc2FtcGxlcyAoZHZkZW11eC0+ZGVjb2RlcikpID4gMCkpIHsKLSAgICBnaW50MTYgKmFfcHRyOwotICAgIGdpbnQgaSwgajsKLSAgICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgICBnaW50IGZyZXF1ZW5jeSwgY2hhbm5lbHM7Ci0KLSAgICAvKiBnZXQgaW5pdGlhbCBmb3JtYXQgb3IgY2hlY2sgaWYgZm9ybWF0IGNoYW5nZWQgKi8KLSAgICBmcmVxdWVuY3kgPSBkdl9nZXRfZnJlcXVlbmN5IChkdmRlbXV4LT5kZWNvZGVyKTsKLSAgICBjaGFubmVscyA9IGR2X2dldF9udW1fY2hhbm5lbHMgKGR2ZGVtdXgtPmRlY29kZXIpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKChkdmRlbXV4LT5hdWRpb3NyY3BhZCA9PSBOVUxMKQotICAgICAgICAgICAgfHwgKGZyZXF1ZW5jeSAhPSBkdmRlbXV4LT5mcmVxdWVuY3kpCi0gICAgICAgICAgICB8fCAoY2hhbm5lbHMgIT0gZHZkZW11eC0+Y2hhbm5lbHMpKSkgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLSAgICAgIEdzdEF1ZGlvSW5mbyBpbmZvOwotCi0gICAgICBkdmRlbXV4LT5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7Ci0gICAgICBkdmRlbXV4LT5jaGFubmVscyA9IGNoYW5uZWxzOwotCi0gICAgICBnc3RfYXVkaW9faW5mb19pbml0ICgmaW5mbyk7Ci0gICAgICBnc3RfYXVkaW9faW5mb19zZXRfZm9ybWF0ICgmaW5mbywgR1NUX0FVRElPX0ZPUk1BVF9TMTZMRSwKLSAgICAgICAgICBmcmVxdWVuY3ksIGNoYW5uZWxzLCBOVUxMKTsKLSAgICAgIGNhcHMgPSBnc3RfYXVkaW9faW5mb190b19jYXBzICgmaW5mbyk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoZHZkZW11eC0+YXVkaW9zcmNwYWQgPT0gTlVMTCkpIHsKLSAgICAgICAgZHZkZW11eC0+YXVkaW9zcmNwYWQgPQotICAgICAgICAgICAgZ3N0X2R2ZGVtdXhfYWRkX3BhZCAoZHZkZW11eCwgJmF1ZGlvX3NyY190ZW1wLCBjYXBzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKGR2ZGVtdXgtPmF1ZGlvc3JjcGFkLCBjYXBzKTsKLSAgICAgIH0KLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICB9Ci0KLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG51bV9zYW1wbGVzICoKLSAgICAgICAgc2l6ZW9mIChnaW50MTYpICogZHZkZW11eC0+Y2hhbm5lbHMpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgYV9wdHIgPSAoZ2ludDE2ICopIG1hcC5kYXRhOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCBkdmRlbXV4LT5jaGFubmVsczsgaisrKSB7Ci0gICAgICAgICooYV9wdHIrKykgPSBkdmRlbXV4LT5hdWRpb19idWZmZXJzW2pdW2ldOwotICAgICAgfQotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gICAgR1NUX0RFQlVHICgicHVzaGluZyBhdWRpbyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5wb3NpdGlvbikpOwotCi0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPSBkdmRlbXV4LT50aW1lX3NlZ21lbnQucG9zaXRpb247Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IGR1cmF0aW9uOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpID0gZHZkZW11eC0+YXVkaW9fb2Zmc2V0OwotICAgIGR2ZGVtdXgtPmF1ZGlvX29mZnNldCArPSBudW1fc2FtcGxlczsKLSAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKG91dGJ1ZikgPSBkdmRlbXV4LT5hdWRpb19vZmZzZXQ7Ci0KLSAgICBpZiAoZHZkZW11eC0+bmV3X21lZGlhIHx8IGR2ZGVtdXgtPmRpc2NvbnQpCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLQotICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoZHZkZW11eC0+YXVkaW9zcmNwYWQsIG91dGJ1Zik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogbm8gc2FtcGxlcyAqLwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogdGFrZXMgb3duZXJzaGlwIG9mIGJ1ZmZlciAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kdmRlbXV4X2RlbXV4X3ZpZGVvIChHc3REVkRlbXV4ICogZHZkZW11eCwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIGd1aW50NjQgZHVyYXRpb24pCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBnaW50IGhlaWdodDsKLSAgZ2Jvb2xlYW4gd2lkZTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICAvKiBnZXQgcGFyYW1zICovCi0gIC8qIGZyYW1lcmF0ZSBpcyBhbHJlYWR5IHVwLXRvLWRhdGUgKi8KLSAgaGVpZ2h0ID0gZHZkZW11eC0+ZGVjb2Rlci0+aGVpZ2h0OwotICB3aWRlID0gZHZfZm9ybWF0X3dpZGUgKGR2ZGVtdXgtPmRlY29kZXIpOwotCi0gIC8qIHNlZSBpZiBhbnl0aGluZyBjaGFuZ2VkICovCi0gIGlmIChHX1VOTElLRUxZICgoZHZkZW11eC0+dmlkZW9zcmNwYWQgPT0gTlVMTCkgfHwgKGR2ZGVtdXgtPmhlaWdodCAhPSBoZWlnaHQpCi0gICAgICAgICAgfHwgZHZkZW11eC0+d2lkZSAhPSB3aWRlKSkgewotICAgIGdpbnQgcGFyX3gsIHBhcl95OwotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICBkdmRlbXV4LT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZHZkZW11eC0+d2lkZSA9IHdpZGU7Ci0KLSAgICBpZiAoZHZkZW11eC0+ZGVjb2Rlci0+c3lzdGVtID09IGVfZHZfc3lzdGVtXzYyNV81MCkgewotICAgICAgaWYgKHdpZGUpIHsKLSAgICAgICAgcGFyX3ggPSBQQUxfV0lERV9QQVJfWDsKLSAgICAgICAgcGFyX3kgPSBQQUxfV0lERV9QQVJfWTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcl94ID0gUEFMX05PUk1BTF9QQVJfWDsKLSAgICAgICAgcGFyX3kgPSBQQUxfTk9STUFMX1BBUl9ZOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAod2lkZSkgewotICAgICAgICBwYXJfeCA9IE5UU0NfV0lERV9QQVJfWDsKLSAgICAgICAgcGFyX3kgPSBOVFNDX1dJREVfUEFSX1k7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwYXJfeCA9IE5UU0NfTk9STUFMX1BBUl9YOwotICAgICAgICBwYXJfeSA9IE5UU0NfTk9STUFMX1BBUl9ZOwotICAgICAgfQotICAgIH0KLQotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1kdiIsCi0gICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsCi0gICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDcyMCwKLSAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIGhlaWdodCwKLSAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBkdmRlbXV4LT5mcmFtZXJhdGVfbnVtZXJhdG9yLAotICAgICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfZGVub21pbmF0b3IsCi0gICAgICAgICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwgcGFyX3gsIHBhcl95LCBOVUxMKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChkdmRlbXV4LT52aWRlb3NyY3BhZCA9PSBOVUxMKSkgewotICAgICAgZHZkZW11eC0+dmlkZW9zcmNwYWQgPQotICAgICAgICAgIGdzdF9kdmRlbXV4X2FkZF9wYWQgKGR2ZGVtdXgsICZ2aWRlb19zcmNfdGVtcCwgY2Fwcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKGR2ZGVtdXgtPnZpZGVvc3JjcGFkLCBjYXBzKTsKLSAgICB9Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgLyogdGFrZXMgb3duZXJzaGlwIG9mIGJ1ZmZlciBoZXJlLCB3ZSBqdXN0IG5lZWQgdG8gbW9kaWZ5Ci0gICAqIHRoZSBtZXRhZGF0YS4gKi8KLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gZHZkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uOwotICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9IGR2ZGVtdXgtPnZpZGVvX29mZnNldDsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChvdXRidWYpID0gZHZkZW11eC0+dmlkZW9fb2Zmc2V0ICsgMTsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IGR1cmF0aW9uOwotCi0gIGlmIChkdmRlbXV4LT5uZXdfbWVkaWEgfHwgZHZkZW11eC0+ZGlzY29udCkKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLQotICBHU1RfREVCVUcgKCJwdXNoaW5nIHZpZGVvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5wb3NpdGlvbikpOwotCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoZHZkZW11eC0+dmlkZW9zcmNwYWQsIG91dGJ1Zik7Ci0KLSAgZHZkZW11eC0+dmlkZW9fb2Zmc2V0Kys7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotZ2V0X3NzeWJfb2Zmc2V0IChpbnQgZGlmLCBpbnQgc3N5YikKLXsKLSAgaW50IG9mZnNldDsKLQotICBvZmZzZXQgPSBkaWYgKiAxMjAwMDsgICAgICAgICAvKiB0byBkaWYgKi8KLSAgb2Zmc2V0ICs9IDgwICogKDEgKyAoc3N5YiAvIDYpKTsgICAgICAvKiB0byBzdWJjb2RlIHBhY2sgKi8KLSAgb2Zmc2V0ICs9IDM7ICAgICAgICAgICAgICAgICAgLyogcGFzdCBoZWFkZXIgKi8KLSAgb2Zmc2V0ICs9IDggKiAoc3N5YiAlIDYpOyAgICAgLyogdG8gc3N5YiAqLwotCi0gIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfZ2V0X3RpbWVjb2RlIChHc3REVkRlbXV4ICogZHZkZW11eCwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdFNNUFRFVGltZUNvZGUgKiB0aW1lY29kZSkKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgaW50IG9mZnNldDsKLSAgaW50IGRpZjsKLSAgaW50IG5fZGlmcyA9IGR2ZGVtdXgtPmRlY29kZXItPm51bV9kaWZfc2VxczsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIGZvciAoZGlmID0gMDsgZGlmIDwgbl9kaWZzOyBkaWYrKykgewotICAgIG9mZnNldCA9IGdldF9zc3liX29mZnNldCAoZGlmLCAzKTsKLSAgICBpZiAoZGF0YVtvZmZzZXQgKyAzXSA9PSAweDEzKSB7Ci0gICAgICB0aW1lY29kZS0+ZnJhbWVzID0gKChkYXRhW29mZnNldCArIDRdID4+IDQpICYgMHgzKSAqIDEwICsKLSAgICAgICAgICAoZGF0YVtvZmZzZXQgKyA0XSAmIDB4Zik7Ci0gICAgICB0aW1lY29kZS0+c2Vjb25kcyA9ICgoZGF0YVtvZmZzZXQgKyA1XSA+PiA0KSAmIDB4MykgKiAxMCArCi0gICAgICAgICAgKGRhdGFbb2Zmc2V0ICsgNV0gJiAweGYpOwotICAgICAgdGltZWNvZGUtPm1pbnV0ZXMgPSAoKGRhdGFbb2Zmc2V0ICsgNl0gPj4gNCkgJiAweDMpICogMTAgKwotICAgICAgICAgIChkYXRhW29mZnNldCArIDZdICYgMHhmKTsKLSAgICAgIHRpbWVjb2RlLT5ob3VycyA9ICgoZGF0YVtvZmZzZXQgKyA3XSA+PiA0KSAmIDB4MykgKiAxMCArCi0gICAgICAgICAgKGRhdGFbb2Zmc2V0ICsgN10gJiAweGYpOwotICAgICAgR1NUX0RFQlVHICgiZ290IHRpbWVjb2RlICUiIEdTVF9TTVBURV9USU1FX0NPREVfRk9STUFULAotICAgICAgICAgIEdTVF9TTVBURV9USU1FX0NPREVfQVJHUyAodGltZWNvZGUpKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfaXNfbmV3X21lZGlhIChHc3REVkRlbXV4ICogZHZkZW11eCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBndWludDggKmRhdGE7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBpbnQgYWF1eF9vZmZzZXQ7Ci0gIGludCBkaWY7Ci0gIGludCBuX2RpZnM7Ci0KLSAgbl9kaWZzID0gZHZkZW11eC0+ZGVjb2Rlci0+bnVtX2RpZl9zZXFzOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgZm9yIChkaWYgPSAwOyBkaWYgPCBuX2RpZnM7IGRpZisrKSB7Ci0gICAgaWYgKGRpZiAmIDEpIHsKLSAgICAgIGFhdXhfb2Zmc2V0ID0gKGRpZiAqIDEyMDAwKSArICg2ICsgMTYgKiAxKSAqIDgwICsgMzsKLSAgICB9IGVsc2UgewotICAgICAgYWF1eF9vZmZzZXQgPSAoZGlmICogMTIwMDApICsgKDYgKyAxNiAqIDQpICogODAgKyAzOwotICAgIH0KLSAgICBpZiAoZGF0YVthYXV4X29mZnNldCArIDBdID09IDB4NTEpIHsKLSAgICAgIGlmICgoZGF0YVthYXV4X29mZnNldCArIDJdICYgMHg4MCkgPT0gMCkgewotICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIHRha2VzIG93bmVyc2hpcCBvZiBidWZmZXIgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZHZkZW11eF9kZW11eF9mcmFtZSAoR3N0RFZEZW11eCAqIGR2ZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfdHM7Ci0gIEdzdEZsb3dSZXR1cm4gYXJldCwgdnJldCwgcmV0OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ2NCBkdXJhdGlvbjsKLSAgR3N0U01QVEVUaW1lQ29kZSB0aW1lY29kZTsKLSAgaW50IGZyYW1lX251bWJlcjsKLQotICBpZiAoZHZkZW11eC0+bmVlZF9zZWdtZW50KSB7Ci0gICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBnX2Fzc2VydCAoIWR2ZGVtdXgtPnVwc3RyZWFtX3RpbWVfc2VnbWVudCk7Ci0KLSAgICAvKiBjb252ZXJ0IHRvIHRpbWUgYW5kIHN0b3JlIGFzIHN0YXJ0L2VuZF90aW1lc3RhbXAgKi8KLSAgICBmb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7Ci0gICAgaWYgKCEoZ3N0X2R2ZGVtdXhfY29udmVydF9zaW5rX3BhaXIgKGR2ZGVtdXgsCi0gICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgZHZkZW11eC0+Ynl0ZV9zZWdtZW50LnN0YXJ0LAotICAgICAgICAgICAgICAgIGR2ZGVtdXgtPmJ5dGVfc2VnbWVudC5zdG9wLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgKGdpbnQ2NCAqKSAmIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5zdGFydCwKLSAgICAgICAgICAgICAgICAoZ2ludDY0ICopICYgZHZkZW11eC0+dGltZV9zZWdtZW50LnN0b3ApKSkKLSAgICAgIGdvdG8gc2VnbWVudF9lcnJvcjsKLQotICAgIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC50aW1lID0gZHZkZW11eC0+dGltZV9zZWdtZW50LnN0YXJ0OwotICAgIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5yYXRlID0gZHZkZW11eC0+Ynl0ZV9zZWdtZW50LnJhdGU7Ci0KLSAgICBnc3RfZHZkZW11eF9zaW5rX2NvbnZlcnQgKGR2ZGVtdXgsCi0gICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGR2ZGVtdXgtPmJ5dGVfc2VnbWVudC5wb3NpdGlvbiwKLSAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAoZ2ludDY0ICopICYgZHZkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uKTsKLQotICAgIGdzdF9kdmRlbXV4X3VwZGF0ZV9mcmFtZV9vZmZzZXRzIChkdmRlbXV4LCBkdmRlbXV4LT50aW1lX3NlZ21lbnQucG9zaXRpb24pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHZkZW11eCwgInNlbmRpbmcgc2VnbWVudCBzdGFydDogJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIsIHN0b3A6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCB0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5zdGFydCksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5zdG9wKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZHZkZW11eC0+dGltZV9zZWdtZW50LnN0YXJ0KSk7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmR2ZGVtdXgtPnRpbWVfc2VnbWVudCk7Ci0gICAgaWYgKGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBkdmRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgZ3N0X2R2ZGVtdXhfcHVzaF9ldmVudCAoZHZkZW11eCwgZXZlbnQpOwotCi0gICAgZHZkZW11eC0+bmVlZF9zZWdtZW50ID0gRkFMU0U7Ci0gIH0KLQotICBnc3RfZHZkZW11eF9nZXRfdGltZWNvZGUgKGR2ZGVtdXgsIGJ1ZmZlciwgJnRpbWVjb2RlKTsKLSAgZ3N0X3NtcHRlX3RpbWVfY29kZV9nZXRfZnJhbWVfbnVtYmVyICgKLSAgICAgIChkdmRlbXV4LT5kZWNvZGVyLT5zeXN0ZW0gPT0gZV9kdl9zeXN0ZW1fNjI1XzUwKSA/Ci0gICAgICBHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV8yNSA6IEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzMwLAotICAgICAgJmZyYW1lX251bWJlciwgJnRpbWVjb2RlKTsKLQotICBpZiAoZHZkZW11eC0+dGltZV9zZWdtZW50LnJhdGUgPCAwKSB7Ci0gICAgbmV4dF90cyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKAotICAgICAgICAoZHZkZW11eC0+ZnJhbWVfb2Zmc2V0ID4KLSAgICAgICAgICAgIDAgPyBkdmRlbXV4LT5mcmFtZV9vZmZzZXQgLSAxIDogMCkgKiBHU1RfU0VDT05ELAotICAgICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfZGVub21pbmF0b3IsIGR2ZGVtdXgtPmZyYW1lcmF0ZV9udW1lcmF0b3IpOwotICAgIGR1cmF0aW9uID0gZHZkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uIC0gbmV4dF90czsKLSAgfSBlbHNlIHsKLSAgICBuZXh0X3RzID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoCi0gICAgICAgIChkdmRlbXV4LT5mcmFtZV9vZmZzZXQgKyAxKSAqIEdTVF9TRUNPTkQsCi0gICAgICAgIGR2ZGVtdXgtPmZyYW1lcmF0ZV9kZW5vbWluYXRvciwgZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvcik7Ci0gICAgZHVyYXRpb24gPSBuZXh0X3RzIC0gZHZkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZHZfcGFyc2VfcGFja3MgKGR2ZGVtdXgtPmRlY29kZXIsIG1hcC5kYXRhKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZHZkZW11eC0+bmV3X21lZGlhID0gRkFMU0U7Ci0gIGlmIChnc3RfZHZkZW11eF9pc19uZXdfbWVkaWEgKGR2ZGVtdXgsIGJ1ZmZlcikgJiYKLSAgICAgIGR2ZGVtdXgtPmZyYW1lc19zaW5jZV9uZXdfbWVkaWEgPiAyKSB7Ci0gICAgZHZkZW11eC0+bmV3X21lZGlhID0gVFJVRTsKLSAgICBkdmRlbXV4LT5mcmFtZXNfc2luY2VfbmV3X21lZGlhID0gMDsKLSAgfQotICBkdmRlbXV4LT5mcmFtZXNfc2luY2VfbmV3X21lZGlhKys7Ci0KLSAgLyogZG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgYnVmZmVyICovCi0gIGFyZXQgPSByZXQgPSBnc3RfZHZkZW11eF9kZW11eF9hdWRpbyAoZHZkZW11eCwgYnVmZmVyLCBkdXJhdGlvbik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICAvKiB0YWtlcyBvd25lcnNoaXAgb2YgYnVmZmVyICovCi0gIHZyZXQgPSByZXQgPSBnc3RfZHZkZW11eF9kZW11eF92aWRlbyAoZHZkZW11eCwgYnVmZmVyLCBkdXJhdGlvbik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBpZiBib3RoIGFyZSBub3QgbGlua2VkLCB3ZSBzdG9wICovCi0gIGlmIChHX1VOTElLRUxZIChhcmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgJiYgdnJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSkgewotICAgIHJldCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgZHZkZW11eC0+ZGlzY29udCA9IEZBTFNFOwotICBkdmRlbXV4LT50aW1lX3NlZ21lbnQucG9zaXRpb24gPSBuZXh0X3RzOwotCi0gIGlmIChkdmRlbXV4LT50aW1lX3NlZ21lbnQucmF0ZSA8IDApIHsKLSAgICBpZiAoZHZkZW11eC0+ZnJhbWVfb2Zmc2V0ID4gMCkKLSAgICAgIGR2ZGVtdXgtPmZyYW1lX29mZnNldC0tOwotICAgIGVsc2UKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZHZkZW11eCwKLSAgICAgICAgICAiR290IGJlZm9yZSBmcmFtZSBvZmZzZXQgMCBpbiByZXZlcnNlIHBsYXliYWNrIik7Ci0gIH0gZWxzZSB7Ci0gICAgZHZkZW11eC0+ZnJhbWVfb2Zmc2V0Kys7Ci0gIH0KLQotICAvKiBjaGVjayBmb3IgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCAqLwotICBpZiAoKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5yYXRlID4gMCAmJiBkdmRlbXV4LT50aW1lX3NlZ21lbnQuc3RvcCAhPSAtMQotICAgICAgICAgICYmIG5leHRfdHMgPiBkdmRlbXV4LT50aW1lX3NlZ21lbnQuc3RvcCkKLSAgICAgIHx8IChkdmRlbXV4LT50aW1lX3NlZ21lbnQucmF0ZSA8IDAKLSAgICAgICAgICAmJiBkdmRlbXV4LT50aW1lX3NlZ21lbnQuc3RhcnQgPiBuZXh0X3RzKSkKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gIGVsc2UKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXNlZ21lbnRfZXJyb3I6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJlcnJvciBnZW5lcmF0aW5nIG5ld19zZWdtZW50IGV2ZW50Iik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotLyogZmx1c2ggYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBhZGFwdGVyLCB1c2VkIGluIGNoYWluIGJhc2VkIHNjaGVkdWxpbmcgbW9kZSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kdmRlbXV4X2ZsdXNoIChHc3REVkRlbXV4ICogZHZkZW11eCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICB3aGlsZSAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkdmRlbXV4LT5hZGFwdGVyKSA+PSBkdmRlbXV4LT5mcmFtZV9sZW4pIHsKLSAgICBjb25zdCBndWludDggKmRhdGE7Ci0gICAgZ2ludCBsZW5ndGg7Ci0KLSAgICAvKiBnZXQgdGhlIGFjY3VtdWxhdGVkIGJ5dGVzICovCi0gICAgZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAoZHZkZW11eC0+YWRhcHRlciwgZHZkZW11eC0+ZnJhbWVfbGVuKTsKLQotICAgIC8qIHBhcnNlIGhlYWRlciB0byBrbm93IHRoZSBsZW5ndGggYW5kIG90aGVyIHBhcmFtcyAqLwotICAgIGlmIChHX1VOTElLRUxZIChkdl9wYXJzZV9oZWFkZXIgKGR2ZGVtdXgtPmRlY29kZXIsIGRhdGEpIDwgMCkpIHsKLSAgICAgIGdzdF9hZGFwdGVyX3VubWFwIChkdmRlbXV4LT5hZGFwdGVyKTsKLSAgICAgIGdvdG8gcGFyc2VfaGVhZGVyX2Vycm9yOwotICAgIH0KLSAgICBnc3RfYWRhcHRlcl91bm1hcCAoZHZkZW11eC0+YWRhcHRlcik7Ci0KLSAgICAvKiBhZnRlciBwYXJzaW5nIHRoZSBoZWFkZXIgd2Uga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhICovCi0gICAgbGVuZ3RoID0gZHZkZW11eC0+ZnJhbWVfbGVuID0gZHZkZW11eC0+ZGVjb2Rlci0+ZnJhbWVfc2l6ZTsKLSAgICBpZiAoZHZkZW11eC0+ZGVjb2Rlci0+c3lzdGVtID09IGVfZHZfc3lzdGVtXzYyNV81MCkgewotICAgICAgZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvciA9IFBBTF9GUkFNRVJBVEVfTlVNRVJBVE9SOwotICAgICAgZHZkZW11eC0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yID0gUEFMX0ZSQU1FUkFURV9ERU5PTUlOQVRPUjsKLSAgICB9IGVsc2UgewotICAgICAgZHZkZW11eC0+ZnJhbWVyYXRlX251bWVyYXRvciA9IE5UU0NfRlJBTUVSQVRFX05VTUVSQVRPUjsKLSAgICAgIGR2ZGVtdXgtPmZyYW1lcmF0ZV9kZW5vbWluYXRvciA9IE5UU0NfRlJBTUVSQVRFX0RFTk9NSU5BVE9SOwotICAgIH0KLSAgICBnX2F0b21pY19pbnRfc2V0ICgmZHZkZW11eC0+Zm91bmRfaGVhZGVyLCAxKTsKLQotICAgIC8qIGxldCBkZW11eF92aWRlbyBzZXQgdGhlIGhlaWdodCwgaXQgbmVlZHMgdG8gZGV0ZWN0IHdoZW4gdGhpbmdzIGNoYW5nZSBzbwotICAgICAqIGl0IGNhbiByZXNldCBjYXBzICovCi0KLSAgICAvKiBpZiB3ZSBzdGlsbCBoYXZlIGVub3VnaCBmb3IgYSBmcmFtZSwgc3RhcnQgZGVjb2RpbmcgKi8KLSAgICBpZiAoR19MSUtFTFkgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZHZkZW11eC0+YWRhcHRlcikgPj0gbGVuZ3RoKSkgewotICAgICAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkdmRlbXV4LT5hZGFwdGVyLCBsZW5ndGgpOwotCi0gICAgICAvKiBhbmQgZGVjb2RlIHRoZSBidWZmZXIsIHRha2VzIG93bmVyc2hpcCAqLwotICAgICAgcmV0ID0gZ3N0X2R2ZGVtdXhfZGVtdXhfZnJhbWUgKGR2ZGVtdXgsIGJ1ZmZlcik7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfQotZG9uZToKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXBhcnNlX2hlYWRlcl9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkdmRlbXV4LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIkVycm9yIHBhcnNpbmcgRFYgaGVhZGVyIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi0vKiBzdHJlYW1pbmcgb3BlcmF0aW9uOiAKLSAqCi0gKiBhY2N1bXVsYXRlIGRhdGEgdW50aWwgd2UgaGF2ZSBhIGZyYW1lLCB0aGVuIGRlY29kZS4gCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZHZkZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0RFZEZW11eCAqZHZkZW11eDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgZHZkZW11eCA9IEdTVF9EVkRFTVVYIChwYXJlbnQpOwotCi0gIC8qIGEgZGlzY29udGludWl0eSBpbiB0aGUgc3RyZWFtLCB3ZSBuZWVkIHRvIGdldCByaWQgb2YKLSAgICogYWNjdW11bGF0ZWQgZGF0YSBpbiB0aGUgYWRhcHRlciBhbmQgYXNzdW1lIGEgbmV3IGZyYW1lCi0gICAqIHN0YXJ0cyBhZnRlciB0aGUgZGlzY29udGludWl0eSAqLwotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpKSB7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGR2ZGVtdXgtPmFkYXB0ZXIpOwotICAgIGR2ZGVtdXgtPmRpc2NvbnQgPSBUUlVFOwotCi0gICAgLyogU2hvdWxkIHJlY2hlY2sgd2hlcmUgd2UgYXJlICovCi0gICAgaWYgKCFkdmRlbXV4LT51cHN0cmVhbV90aW1lX3NlZ21lbnQpCi0gICAgICBkdmRlbXV4LT5uZWVkX3NlZ21lbnQgPSBUUlVFOwotICB9Ci0KLSAgLyogYSB0aW1lc3RhbXAgYWx3YXlzIHNob3VsZCBiZSByZXNwZWN0ZWQgKi8KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgewotICAgIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5wb3NpdGlvbiA9IHRpbWVzdGFtcDsKLQotICAgIGlmIChkdmRlbXV4LT5kaXNjb250KQotICAgICAgZ3N0X2R2ZGVtdXhfdXBkYXRlX2ZyYW1lX29mZnNldHMgKGR2ZGVtdXgsCi0gICAgICAgICAgZHZkZW11eC0+dGltZV9zZWdtZW50LnBvc2l0aW9uKTsKLSAgfSBlbHNlIGlmIChkdmRlbXV4LT51cHN0cmVhbV90aW1lX3NlZ21lbnQgJiYgZHZkZW11eC0+ZGlzY29udCkgewotICAgIC8qIFRoaXMgd2lsbCBwcm9iYWJseSBmYWlsIGxhdGVyIHRvIHByb3ZpZGUgY29ycmVjdAotICAgICAqIHRpbWVzdGFtcHMgYW5kL29yIGR1cmF0aW9ucyBidXQgYWxzbyBzaG91bGQgbm90IGhhcHBlbiAqLwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGR2ZGVtdXgsCi0gICAgICAgICJVcHN0cmVhbSBwcm92aWRlcyBUSU1FIHNlZ21lbnQgYnV0IG5vIFBUUyBhZnRlciBkaXNjb250Iik7Ci0gIH0KLQotICBnc3RfYWRhcHRlcl9wdXNoIChkdmRlbXV4LT5hZGFwdGVyLCBidWZmZXIpOwotCi0gIC8qIEFwcGFyZW50bHkgZHZfcGFyc2VfaGVhZGVyIGNhbiByZWFkIGZyb20gdGhlIGJvZHkgb2YgdGhlIGZyYW1lCi0gICAqIHRvbywgc28gaXQgbmVlZHMgbW9yZSB0aGFuIGhlYWRlcl9zaXplIGJ5dGVzLiBXYWNreSEKLSAgICovCi0gIGlmIChHX1VOTElLRUxZIChkdmRlbXV4LT5mcmFtZV9sZW4gPT0gLTEpKSB7Ci0gICAgLyogaWYgd2UgZG9uJ3Qga25vdyB0aGUgbGVuZ3RoIG9mIGEgZnJhbWUsIHdlIGFzc3VtZSBpdCBpcwotICAgICAqIHRoZSBOVFNDX0JVRkZFUiBsZW5ndGgsIGFzIHRoaXMgaXMgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgCi0gICAgICogaWYgdGhpcyBpcyBQQUwgb3IgTlRTQyAqLwotICAgIGR2ZGVtdXgtPmZyYW1lX2xlbiA9IE5UU0NfQlVGRkVSOwotICB9Ci0KLSAgLyogYW5kIHRyeSB0byBmbHVzaCBwZW5kaW5nIGZyYW1lcyAqLwotICByZXQgPSBnc3RfZHZkZW11eF9mbHVzaCAoZHZkZW11eCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogcHVsbCBiYXNlZCBvcGVyYXRpb24uCi0gKgotICogUmVhZCBoZWFkZXIgZmlyc3QgdG8gZmlndXJlIG91dCB0aGUgZnJhbWUgc2l6ZS4gVGhlbiByZWFkCi0gKiBhbmQgZGVjb2RlIGZ1bGwgZnJhbWVzLgotICovCi1zdGF0aWMgdm9pZAotZ3N0X2R2ZGVtdXhfbG9vcCAoR3N0UGFkICogcGFkKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0RFZEZW11eCAqZHZkZW11eDsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBkdmRlbXV4ID0gR1NUX0RWREVNVVggKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGdfYXRvbWljX2ludF9nZXQgKCZkdmRlbXV4LT5mb3VuZF9oZWFkZXIpID09IDApKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHZkZW11eCwgInB1bGxpbmcgZmlyc3QgYnVmZmVyIik7Ci0gICAgLyogcHVsbCBpbiBOVFNDIHNpemVkIGJ1ZmZlciB0byBmaWd1cmUgb3V0IHRoZSBmcmFtZQotICAgICAqIGxlbmd0aCAqLwotICAgIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAoZHZkZW11eC0+c2lua3BhZCwKLSAgICAgICAgZHZkZW11eC0+Ynl0ZV9zZWdtZW50LnBvc2l0aW9uLCBOVFNDX0JVRkZFUiwgJmJ1ZmZlcik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgICBnb3RvIHBhdXNlOwotCi0gICAgLyogY2hlY2sgYnVmZmVyIHNpemUsIGRvbid0IHdhbnQgdG8gcmVhZCBzbWFsbCBidWZmZXJzICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPCBOVFNDX0JVRkZFUikpCi0gICAgICBnb3RvIHNtYWxsX2J1ZmZlcjsKLQotICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgLyogcGFyc2UgaGVhZGVyIHRvIGtub3cgdGhlIGxlbmd0aCBhbmQgb3RoZXIgcGFyYW1zICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGR2X3BhcnNlX2hlYWRlciAoZHZkZW11eC0+ZGVjb2RlciwgbWFwLmRhdGEpIDwgMCkpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgICBnb3RvIHBhcnNlX2hlYWRlcl9lcnJvcjsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICAgIC8qIGFmdGVyIHBhcnNpbmcgdGhlIGhlYWRlciB3ZSBrbm93IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KLSAgICBkdmRlbXV4LT5mcmFtZV9sZW4gPSBkdmRlbXV4LT5kZWNvZGVyLT5mcmFtZV9zaXplOwotICAgIGlmIChkdmRlbXV4LT5kZWNvZGVyLT5zeXN0ZW0gPT0gZV9kdl9zeXN0ZW1fNjI1XzUwKSB7Ci0gICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfbnVtZXJhdG9yID0gUEFMX0ZSQU1FUkFURV9OVU1FUkFUT1I7Ci0gICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfZGVub21pbmF0b3IgPSBQQUxfRlJBTUVSQVRFX0RFTk9NSU5BVE9SOwotICAgIH0gZWxzZSB7Ci0gICAgICBkdmRlbXV4LT5mcmFtZXJhdGVfbnVtZXJhdG9yID0gTlRTQ19GUkFNRVJBVEVfTlVNRVJBVE9SOwotICAgICAgZHZkZW11eC0+ZnJhbWVyYXRlX2Rlbm9taW5hdG9yID0gTlRTQ19GUkFNRVJBVEVfREVOT01JTkFUT1I7Ci0gICAgfQotICAgIGR2ZGVtdXgtPm5lZWRfc2VnbWVudCA9IFRSVUU7Ci0KLSAgICAvKiBzZWUgaWYgd2UgbmVlZCB0byByZWFkIGEgbGFyZ2VyIHBhcnQgKi8KLSAgICBpZiAoZHZkZW11eC0+ZnJhbWVfbGVuICE9IE5UU0NfQlVGRkVSKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgICAgYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICAgIC8qIHNldHRpbmcgaGVhZGVyIGFuZCBwcnJmb3JtaW5nIHRoZSBzZWVrIG11c3QgYmUgYXRvbWljICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGR2ZGVtdXgpOwotICAgICAgLyogZ290IGhlYWRlciBub3cgKi8KLSAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZkdmRlbXV4LT5mb3VuZF9oZWFkZXIsIDEpOwotCi0gICAgICAvKiBub3cgcGVyZm9ybSBwZW5kaW5nIHNlZWsgaWYgYW55LiAqLwotICAgICAgZXZlbnQgPSBkdmRlbXV4LT5zZWVrX2V2ZW50OwotICAgICAgaWYgKGV2ZW50KQotICAgICAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZHZkZW11eCk7Ci0KLSAgICAgIGlmIChldmVudCkgewotICAgICAgICBpZiAoIWdzdF9kdmRlbXV4X2hhbmRsZV9wdWxsX3NlZWsgKGR2ZGVtdXgsIGR2ZGVtdXgtPnZpZGVvc3JjcGFkLAotICAgICAgICAgICAgICAgIGV2ZW50KSkgewotICAgICAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKGR2ZGVtdXgsIFNUUkVBTSwgREVDT0RFLCAoTlVMTCksCi0gICAgICAgICAgICAgICgiRXJyb3IgcGVyZm9taW5nIGluaXRpYWwgc2VlayIpKTsKLSAgICAgICAgfQotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICAgICAgICAvKiBhbmQgd2UgbmVlZCB0byBwdWxsIGEgbmV3IGJ1ZmZlciBpbiBhbGwgY2FzZXMuICovCi0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoZHZkZW11eC0+cGVuZGluZ19zZWdtZW50KSkgewotCi0gICAgLyogbm93IHNlbmQgdGhlIG5ld3NlZ21lbnQgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkdmRlbXV4LCAiU2VuZGluZyBuZXdzZWdtZW50IGZyb20iKTsKLQotICAgIGdzdF9kdmRlbXV4X3B1c2hfZXZlbnQgKGR2ZGVtdXgsIGR2ZGVtdXgtPnBlbmRpbmdfc2VnbWVudCk7Ci0gICAgZHZkZW11eC0+cGVuZGluZ19zZWdtZW50ID0gTlVMTDsKLSAgfQotCi0gIGlmIChHX0xJS0VMWSAoYnVmZmVyID09IE5VTEwpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHZkZW11eCwgInB1bGxpbmcgYnVmZmVyIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGR2ZGVtdXgtPmJ5dGVfc2VnbWVudC5wb3NpdGlvbik7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKGR2ZGVtdXgtPnNpbmtwYWQsCi0gICAgICAgIGR2ZGVtdXgtPmJ5dGVfc2VnbWVudC5wb3NpdGlvbiwgZHZkZW11eC0+ZnJhbWVfbGVuLCAmYnVmZmVyKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBwYXVzZTsKLQotICAgIC8qIGNoZWNrIGJ1ZmZlciBzaXplLCBkb24ndCB3YW50IHRvIHJlYWQgc21hbGwgYnVmZmVycyAqLwotICAgIGlmIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpIDwgZHZkZW11eC0+ZnJhbWVfbGVuKQotICAgICAgZ290byBzbWFsbF9idWZmZXI7Ci0gIH0KLSAgLyogYW5kIGRlY29kZSB0aGUgYnVmZmVyICovCi0gIHJldCA9IGdzdF9kdmRlbXV4X2RlbXV4X2ZyYW1lIChkdmRlbXV4LCBidWZmZXIpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIHBhdXNlOwotCi0gIC8qIGFuZCBwb3NpdGlvbiBvdXJzZWx2ZXMgZm9yIHRoZSBuZXh0IGJ1ZmZlciAqLwotICBkdmRlbXV4LT5ieXRlX3NlZ21lbnQucG9zaXRpb24gKz0gZHZkZW11eC0+ZnJhbWVfbGVuOwotCi1kb25lOgotICBnc3Rfb2JqZWN0X3VucmVmIChkdmRlbXV4KTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1wYXJzZV9oZWFkZXJfZXJyb3I6Ci0gIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZHZkZW11eCwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJFcnJvciBwYXJzaW5nIERWIGhlYWRlciIpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoZHZkZW11eC0+c2lua3BhZCk7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgICBpZiAoZHZkZW11eC0+c2VnbWVudF9zZXFudW0pCi0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkdmRlbXV4LCBldmVudCk7Ci0gICAgZ290byBkb25lOwotICB9Ci1zbWFsbF9idWZmZXI6Ci0gIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZHZkZW11eCwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJFcnJvciByZWFkaW5nIGJ1ZmZlciIpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoZHZkZW11eC0+c2lua3BhZCk7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgICBpZiAoZHZkZW11eC0+c2VnbWVudF9zZXFudW0pCi0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkdmRlbXV4LCBldmVudCk7Ci0gICAgZ290byBkb25lOwotICB9Ci1wYXVzZToKLSAgewotICAgIEdTVF9JTkZPX09CSkVDVCAoZHZkZW11eCwgInBhdXNpbmcgdGFzaywgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChkdmRlbXV4LT5zaW5rcGFkKTsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGR2ZGVtdXgsICJnb3QgZW9zIik7Ci0gICAgICAvKiBzbyBhbGlnbiBvdXIgcG9zaXRpb24gd2l0aCB0aGUgZW5kIG9mIGl0LCBpZiB0aGVyZSBpcyBvbmUKLSAgICAgICAqIHRoaXMgZW5zdXJlcyBhIHN1YnNlcXVlbnQgd2lsbCBhcnJpdmUgYXQgY29ycmVjdCBiYXNlL2FjYyB0aW1lICovCi0gICAgICBpZiAoZHZkZW11eC0+dGltZV9zZWdtZW50LnJhdGUgPiAwLjAgJiYKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHZkZW11eC0+dGltZV9zZWdtZW50LnN0b3ApKQotICAgICAgICBkdmRlbXV4LT50aW1lX3NlZ21lbnQucG9zaXRpb24gPSBkdmRlbXV4LT50aW1lX3NlZ21lbnQuc3RvcDsKLSAgICAgIGVsc2UgaWYgKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5yYXRlIDwgMC4wKQotICAgICAgICBkdmRlbXV4LT50aW1lX3NlZ21lbnQucG9zaXRpb24gPSBkdmRlbXV4LT50aW1lX3NlZ21lbnQuc3RhcnQ7Ci0gICAgICAvKiBwZXJmb3JtIEVPUyBsb2dpYyAqLwotICAgICAgaWYgKGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotICAgICAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoZHZkZW11eC0+dGltZV9zZWdtZW50LmZvcm1hdCwKLSAgICAgICAgICAgIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5wb3NpdGlvbik7Ci0gICAgICAgIGlmIChkdmRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLQotICAgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChkdmRlbXV4KSwKLSAgICAgICAgICAgIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5mb3JtYXQsIGR2ZGVtdXgtPnRpbWVfc2VnbWVudC5wb3NpdGlvbik7Ci0gICAgICAgIGlmIChkdmRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtZXNzYWdlLCBkdmRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0KLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoZHZkZW11eCksIG1lc3NhZ2UpOwotICAgICAgICBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkdmRlbXV4LCBldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHc3RFdmVudCAqZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgICAgICAgaWYgKGR2ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgZHZkZW11eC0+c2VnbWVudF9zZXFudW0pOwotICAgICAgICBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkdmRlbXV4LCBldmVudCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIEdzdEV2ZW50ICpldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOwotICAgICAgLyogZm9yIGZhdGFsIGVycm9ycyBvciBub3QtbGlua2VkIHdlIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSAqLwotICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAoZHZkZW11eCwgcmV0KTsKLSAgICAgIGlmIChkdmRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBkdmRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICBnc3RfZHZkZW11eF9wdXNoX2V2ZW50IChkdmRlbXV4LCBldmVudCk7Ci0gICAgfQotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdmRlbXV4X3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdERWRGVtdXggKmRlbXV4ID0gR1NUX0RWREVNVVggKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgZGVtdXgtPnNlZWtfaGFuZGxlciA9IGdzdF9kdmRlbXV4X2hhbmRsZV9wdWxsX3NlZWs7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RhcnRfdGFzayAoc2lua3BhZCwKLSAgICAgICAgICAgIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9kdmRlbXV4X2xvb3AsIHNpbmtwYWQsIE5VTEwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVtdXgtPnNlZWtfaGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RvcF90YXNrIChzaW5rcGFkKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiYWN0aXZhdGluZyBwdXNoL2NoYWluIGZ1bmN0aW9uIik7Ci0gICAgICAgIGRlbXV4LT5zZWVrX2hhbmRsZXIgPSBnc3RfZHZkZW11eF9oYW5kbGVfcHVzaF9zZWVrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJkZWFjdGl2YXRpbmcgcHVzaC9jaGFpbiBmdW5jdGlvbiIpOwotICAgICAgICBkZW11eC0+c2Vla19oYW5kbGVyID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0vKiBkZWNpZGUgb24gcHVzaCBvciBwdWxsIGJhc2VkIHNjaGVkdWxpbmcgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2ZGVtdXhfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHB1bGxfbW9kZTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoc2lua3BhZCwgcXVlcnkpKSB7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gICAgZ290byBhY3RpdmF0ZV9wdXNoOwotICB9Ci0KLSAgcHVsbF9tb2RlID0gZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGVfd2l0aF9mbGFncyAocXVlcnksCi0gICAgICBHU1RfUEFEX01PREVfUFVMTCwgR1NUX1NDSEVEVUxJTkdfRkxBR19TRUVLQUJMRSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmICghcHVsbF9tb2RlKQotICAgIGdvdG8gYWN0aXZhdGVfcHVzaDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rcGFkLCAiYWN0aXZhdGluZyBwdWxsIik7Ci0gIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHNpbmtwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLQotYWN0aXZhdGVfcHVzaDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmtwYWQsICJhY3RpdmF0aW5nIHB1c2giKTsKLSAgICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzaW5rcGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZHZkZW11eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3REVkRlbXV4ICpkdmRlbXV4ID0gR1NUX0RWREVNVVggKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZHZkZW11eC0+ZGVjb2RlciA9IGR2X2RlY29kZXJfbmV3ICgwLCBGQUxTRSwgRkFMU0UpOwotICAgICAgZHZfc2V0X2Vycm9yX2xvZyAoZHZkZW11eC0+ZGVjb2RlciwgTlVMTCk7Ci0gICAgICBnc3RfZHZkZW11eF9yZXNldCAoZHZkZW11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGR2ZGVtdXgtPmFkYXB0ZXIpOwotICAgICAgZHZfZGVjb2Rlcl9mcmVlIChkdmRlbXV4LT5kZWNvZGVyKTsKLSAgICAgIGR2ZGVtdXgtPmRlY29kZXIgPSBOVUxMOwotCi0gICAgICBnc3RfZHZkZW11eF9yZW1vdmVfcGFkcyAoZHZkZW11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICB7Ci0gICAgICBHc3RFdmVudCAqKmV2ZW50X3A7Ci0KLSAgICAgIGV2ZW50X3AgPSAmZHZkZW11eC0+c2Vla19ldmVudDsKLSAgICAgIGdzdF9ldmVudF9yZXBsYWNlIChldmVudF9wLCBOVUxMKTsKLSAgICAgIGlmIChkdmRlbXV4LT5wZW5kaW5nX3NlZ21lbnQpCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZHZkZW11eC0+cGVuZGluZ19zZWdtZW50KTsKLSAgICAgIGR2ZGVtdXgtPnBlbmRpbmdfc2VnbWVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9leHQvZHYvZ3N0ZHZkZW11eC5oIGIvZXh0L2R2L2dzdGR2ZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU4YWJiZi4uMDAwMDAwMAotLS0gYS9leHQvZHYvZ3N0ZHZkZW11eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfRFZERU1VWF9IX18KLSNkZWZpbmUgX19HU1RfRFZERU1VWF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxsaWJkdi9kdi5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0RWREVNVVggXAotICAoZ3N0X2R2ZGVtdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0RWREVNVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9EVkRFTVVYLEdzdERWRGVtdXgpKQotI2RlZmluZSBHU1RfRFZERU1VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9EVkRFTVVYLEdzdERWRGVtdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19EVkRFTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRFZERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19EVkRFTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0RWREVNVVgpKQotCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3REVkRlbXV4IEdzdERWRGVtdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RFZEZW11eENsYXNzIEdzdERWRGVtdXhDbGFzczsKLQotdHlwZWRlZiBnYm9vbGVhbiAoKkdzdERWRGVtdXhTZWVrSGFuZGxlcikgKEdzdERWRGVtdXggKmRlbXV4LCBHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpOwotCi0KLXN0cnVjdCBfR3N0RFZEZW11eCB7Ci0gIEdzdEVsZW1lbnQgICAgIGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICAgICAgICAqc2lua3BhZDsKLSAgR3N0UGFkICAgICAgICAqdmlkZW9zcmNwYWQ7Ci0gIEdzdFBhZCAgICAgICAgKmF1ZGlvc3JjcGFkOwotCi0gIGdib29sZWFuICAgICAgIGhhdmVfZ3JvdXBfaWQ7Ci0gIGd1aW50ICAgICAgICAgIGdyb3VwX2lkOwotCi0gIGR2X2RlY29kZXJfdCAgKmRlY29kZXI7Ci0KLSAgR3N0QWRhcHRlciAgICAqYWRhcHRlcjsKLSAgZ2ludCAgICAgICAgICAgZnJhbWVfbGVuOwotCi0gIC8qIHZpZGVvIHBhcmFtcyAqLwotICBnaW50ICAgICAgICAgICBmcmFtZXJhdGVfbnVtZXJhdG9yOwotICBnaW50ICAgICAgICAgICBmcmFtZXJhdGVfZGVub21pbmF0b3I7Ci0gIGdpbnQgICAgICAgICAgIGhlaWdodDsKLSAgZ2Jvb2xlYW4gICAgICAgd2lkZTsKLSAgLyogYXVkaW8gcGFyYW1zICovCi0gIGdpbnQgICAgICAgICAgIGZyZXF1ZW5jeTsKLSAgZ2ludCAgICAgICAgICAgY2hhbm5lbHM7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgZGlzY29udDsKLSAgZ2ludDY0ICAgICAgICAgZnJhbWVfb2Zmc2V0OwotICBnaW50NjQgICAgICAgICBhdWRpb19vZmZzZXQ7Ci0gIGdpbnQ2NCAgICAgICAgIHZpZGVvX29mZnNldDsKLQotICBHc3REVkRlbXV4U2Vla0hhbmRsZXIgc2Vla19oYW5kbGVyOwotICBHc3RTZWdtZW50ICAgICBieXRlX3NlZ21lbnQ7Ci0gIGdib29sZWFuICAgICAgIHVwc3RyZWFtX3RpbWVfc2VnbWVudDsKLSAgR3N0U2VnbWVudCAgICAgdGltZV9zZWdtZW50OwotICBnYm9vbGVhbiAgICAgICBuZWVkX3NlZ21lbnQ7Ci0gIGd1aW50MzIgICAgICAgIHNlZ21lbnRfc2VxbnVtOwotICBnYm9vbGVhbiAgICAgICBuZXdfbWVkaWE7Ci0gIGludCAgICAgICAgICAgIGZyYW1lc19zaW5jZV9uZXdfbWVkaWE7Ci0gIAotICBnaW50ICAgICAgICAgICBmb3VuZF9oZWFkZXI7IC8qIEFUT01JQyAqLwotICBHc3RFdmVudCAgICAgICpzZWVrX2V2ZW50OwotICBHc3RFdmVudAkqcGVuZGluZ19zZWdtZW50OwotCi0gIGdpbnQxNiAgICAgICAgKmF1ZGlvX2J1ZmZlcnNbNF07Ci19OwotCi1zdHJ1Y3QgX0dzdERWRGVtdXhDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZHZkZW11eF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9EVkRFTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuYyBiL2V4dC9kdi9nc3RzbXB0ZXRpbWVjb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMjA0ZWEuLjAwMDAwMDAKLS0tIGEvZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGhhbmRpbmcgU01QVEUgVGltZSBDb2RlcywgYXMgZGVzY3JpYmVkIGluCi0gKiBTTVBURSBTdGFuZGFyZCAxMk0tMTk5OS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RzbXB0ZXRpbWVjb2RlLmgiCi0KLSNkZWZpbmUgTlRTQ19GUkFNRVNfUEVSXzEwX01JTlMgKDEwKjYwKjMwIC0gMTAqMiArIDIpCi0jZGVmaW5lIE5UU0NfRlJBTUVTX1BFUl9IT1VSICg2Kk5UU0NfRlJBTUVTX1BFUl8xMF9NSU5TKQotCi0vKioKLSAqIGdzdF9zbXB0ZV90aW1lX2NvZGVfZnJvbV9mcmFtZV9udW1iZXI6Ci0gKiBAc3lzdGVtOiBTTVBURSBUaW1lIENvZGUgc3lzdGVtCi0gKiBAdGltZV9jb2RlOiBwb2ludGVyIHRvIHRpbWUgY29kZSBzdHJ1Y3R1cmUKLSAqIEBmcmFtZV9udW1iZXI6IGludGVnZXIgZnJhbWUgbnVtYmVyCi0gKgotICogQ29udmVydHMgYSBmcmFtZSBudW1iZXIgdG8gYSB0aW1lIGNvZGUuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bAotICovCi1nYm9vbGVhbgotZ3N0X3NtcHRlX3RpbWVfY29kZV9mcm9tX2ZyYW1lX251bWJlciAoR3N0U01QVEVUaW1lQ29kZVN5c3RlbSBzeXN0ZW0sCi0gICAgR3N0U01QVEVUaW1lQ29kZSAqIHRpbWVfY29kZSwgaW50IGZyYW1lX251bWJlcikKLXsKLSAgaW50IHRlbl9taW5zOwotICBpbnQgbjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGltZV9jb2RlICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNX0lTX1ZBTElEIChzeXN0ZW0pLCBGQUxTRSk7Ci0KLSAgdGltZV9jb2RlLT5ob3VycyA9IDk5OwotICB0aW1lX2NvZGUtPm1pbnV0ZXMgPSA5OTsKLSAgdGltZV9jb2RlLT5zZWNvbmRzID0gOTk7Ci0gIHRpbWVfY29kZS0+ZnJhbWVzID0gOTk7Ci0KLSAgaWYgKGZyYW1lX251bWJlciA8IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHN3aXRjaCAoc3lzdGVtKSB7Ci0gICAgY2FzZSBHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV8zMDoKLSAgICAgIGlmIChmcmFtZV9udW1iZXIgPj0gMjQgKiBOVFNDX0ZSQU1FU19QRVJfSE9VUikKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICB0ZW5fbWlucyA9IGZyYW1lX251bWJlciAvIE5UU0NfRlJBTUVTX1BFUl8xMF9NSU5TOwotICAgICAgZnJhbWVfbnVtYmVyIC09IHRlbl9taW5zICogTlRTQ19GUkFNRVNfUEVSXzEwX01JTlM7Ci0KLSAgICAgIHRpbWVfY29kZS0+aG91cnMgPSB0ZW5fbWlucyAvIDY7Ci0gICAgICB0aW1lX2NvZGUtPm1pbnV0ZXMgPSAxMCAqICh0ZW5fbWlucyAlIDYpOwotCi0gICAgICBpZiAoZnJhbWVfbnVtYmVyIDwgMikgewotICAgICAgICAvKiB0cmVhdCB0aGUgZmlyc3QgdHdvIGZyYW1lcyBvZiBlYWNoIHRlbiBtaW51dGVzIHNwZWNpYWxseSAqLwotICAgICAgICB0aW1lX2NvZGUtPnNlY29uZHMgPSAwOwotICAgICAgICB0aW1lX2NvZGUtPmZyYW1lcyA9IGZyYW1lX251bWJlcjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG4gPSAoZnJhbWVfbnVtYmVyIC0gMikgLyAoNjAgKiAzMCAtIDIpOwotICAgICAgICB0aW1lX2NvZGUtPm1pbnV0ZXMgKz0gbjsKLSAgICAgICAgZnJhbWVfbnVtYmVyIC09IG4gKiAoNjAgKiAzMCAtIDIpOwotCi0gICAgICAgIHRpbWVfY29kZS0+c2Vjb25kcyA9IGZyYW1lX251bWJlciAvIDMwOwotICAgICAgICB0aW1lX2NvZGUtPmZyYW1lcyA9IGZyYW1lX251bWJlciAlIDMwOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV8yNToKLSAgICAgIGlmIChmcmFtZV9udW1iZXIgPj0gMjQgKiA2MCAqIDYwICogMjUpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgdGltZV9jb2RlLT5mcmFtZXMgPSBmcmFtZV9udW1iZXIgJSAyNTsKLSAgICAgIGZyYW1lX251bWJlciAvPSAyNTsKLSAgICAgIHRpbWVfY29kZS0+c2Vjb25kcyA9IGZyYW1lX251bWJlciAlIDYwOwotICAgICAgZnJhbWVfbnVtYmVyIC89IDYwOwotICAgICAgdGltZV9jb2RlLT5taW51dGVzID0gZnJhbWVfbnVtYmVyICUgNjA7Ci0gICAgICBmcmFtZV9udW1iZXIgLz0gNjA7Ci0gICAgICB0aW1lX2NvZGUtPmhvdXJzID0gZnJhbWVfbnVtYmVyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV8yNDoKLSAgICAgIGlmIChmcmFtZV9udW1iZXIgPj0gMjQgKiA2MCAqIDYwICogMjQpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgdGltZV9jb2RlLT5mcmFtZXMgPSBmcmFtZV9udW1iZXIgJSAyNDsKLSAgICAgIGZyYW1lX251bWJlciAvPSAyNDsKLSAgICAgIHRpbWVfY29kZS0+c2Vjb25kcyA9IGZyYW1lX251bWJlciAlIDYwOwotICAgICAgZnJhbWVfbnVtYmVyIC89IDYwOwotICAgICAgdGltZV9jb2RlLT5taW51dGVzID0gZnJhbWVfbnVtYmVyICUgNjA7Ci0gICAgICBmcmFtZV9udW1iZXIgLz0gNjA7Ci0gICAgICB0aW1lX2NvZGUtPmhvdXJzID0gZnJhbWVfbnVtYmVyOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc21wdGVfdGltZV9jb2RlX2lzX3ZhbGlkOgotICogQHN5c3RlbTogU01QVEUgVGltZSBDb2RlIHN5c3RlbQotICogQHRpbWVfY29kZTogcG9pbnRlciB0byB0aW1lIGNvZGUgc3RydWN0dXJlCi0gKgotICogQ2hlY2tzIHRoYXQgdGhlIHRpbWUgY29kZSByZXByZXNlbnRzIGEgdmFsaWQgdGltZSBjb2RlLgotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHRpbWUgY29kZSBpcyB2YWxpZAotICovCi1nYm9vbGVhbgotZ3N0X3NtcHRlX3RpbWVfY29kZV9pc192YWxpZCAoR3N0U01QVEVUaW1lQ29kZVN5c3RlbSBzeXN0ZW0sCi0gICAgR3N0U01QVEVUaW1lQ29kZSAqIHRpbWVfY29kZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRpbWVfY29kZSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV9JU19WQUxJRCAoc3lzdGVtKSwgRkFMU0UpOwotCi0gIGlmICh0aW1lX2NvZGUtPmhvdXJzIDwgMCB8fCB0aW1lX2NvZGUtPmhvdXJzID49IDI0KQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHRpbWVfY29kZS0+bWludXRlcyA8IDAgfHwgdGltZV9jb2RlLT5taW51dGVzID49IDYwKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHRpbWVfY29kZS0+c2Vjb25kcyA8IDAgfHwgdGltZV9jb2RlLT5zZWNvbmRzID49IDYwKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHRpbWVfY29kZS0+ZnJhbWVzIDwgMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgc3dpdGNoIChzeXN0ZW0pIHsKLSAgICBjYXNlIEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzMwOgotICAgICAgaWYgKHRpbWVfY29kZS0+ZnJhbWVzID49IDMwKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBpZiAodGltZV9jb2RlLT5mcmFtZXMgPj0gMiB8fCB0aW1lX2NvZGUtPnNlY29uZHMgPiAwKQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIGlmICh0aW1lX2NvZGUtPm1pbnV0ZXMgJSAxMCAhPSAwKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzI1OgotICAgICAgaWYgKHRpbWVfY29kZS0+ZnJhbWVzID49IDI1KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzI0OgotICAgICAgaWYgKHRpbWVfY29kZS0+ZnJhbWVzID49IDI0KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc21wdGVfdGltZV9nZXRfZnJhbWVfbnVtYmVyOgotICogQHN5c3RlbTogU01QVEUgVGltZSBDb2RlIHN5c3RlbQotICogQGZyYW1lX251bWJlcjogcG9pbnRlciB0byBmcmFtZSBudW1iZXIKLSAqIEB0aW1lX2NvZGU6IHBvaW50ZXIgdG8gdGltZSBjb2RlIHN0cnVjdHVyZQotICoKLSAqIENvbnZlcnRzIHRoZSB0aW1lIGNvZGUgc3RydWN0dXJlIHRvIGEgbGluZWFyIGZyYW1lIG51bWJlci4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIGlmIHRoZSB0aW1lIGNvZGUgY291bGQgYmUgY29udmVydGVkCi0gKi8KLWdib29sZWFuCi1nc3Rfc21wdGVfdGltZV9jb2RlX2dldF9mcmFtZV9udW1iZXIgKEdzdFNNUFRFVGltZUNvZGVTeXN0ZW0gc3lzdGVtLAotICAgIGludCAqZnJhbWVfbnVtYmVyLCBHc3RTTVBURVRpbWVDb2RlICogdGltZV9jb2RlKQotewotICBpbnQgZnJhbWUgPSAwOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV9JU19WQUxJRCAoc3lzdGVtKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGltZV9jb2RlICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoIWdzdF9zbXB0ZV90aW1lX2NvZGVfaXNfdmFsaWQgKHN5c3RlbSwgdGltZV9jb2RlKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHN3aXRjaCAoc3lzdGVtKSB7Ci0gICAgY2FzZSBHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV8zMDoKLSAgICAgIGZyYW1lID0gdGltZV9jb2RlLT5ob3VycyAqIE5UU0NfRlJBTUVTX1BFUl9IT1VSOwotICAgICAgZnJhbWUgKz0gKHRpbWVfY29kZS0+bWludXRlcyAvIDEwKSAqIE5UU0NfRlJBTUVTX1BFUl8xMF9NSU5TOwotICAgICAgZnJhbWUgKz0gKHRpbWVfY29kZS0+bWludXRlcyAlIDEwKSAqICgzMCAqIDYwIC0gMik7Ci0gICAgICBmcmFtZSArPSB0aW1lX2NvZGUtPnNlY29uZHMgKiAzMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMjU6Ci0gICAgICB0aW1lX2NvZGUtPmZyYW1lcyA9Ci0gICAgICAgICAgMjUgKiAoKHRpbWVfY29kZS0+aG91cnMgKiA2MCArIHRpbWVfY29kZS0+bWludXRlcykgKiA2MCArCi0gICAgICAgICAgdGltZV9jb2RlLT5zZWNvbmRzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMjQ6Ci0gICAgICB0aW1lX2NvZGUtPmZyYW1lcyA9Ci0gICAgICAgICAgMjQgKiAoKHRpbWVfY29kZS0+aG91cnMgKiA2MCArIHRpbWVfY29kZS0+bWludXRlcykgKiA2MCArCi0gICAgICAgICAgdGltZV9jb2RlLT5zZWNvbmRzKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGZyYW1lICs9IHRpbWVfY29kZS0+ZnJhbWVzOwotCi0gIGlmIChmcmFtZV9udW1iZXIpIHsKLSAgICAqZnJhbWVfbnVtYmVyID0gZnJhbWU7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3Rfc21wdGVfdGltZV9nZXRfdGltZXN0YW1wOgotICogQHN5c3RlbTogU01QVEUgVGltZSBDb2RlIHN5c3RlbQotICogQHRpbWVfY29kZTogcG9pbnRlciB0byB0aW1lIGNvZGUgc3RydWN0dXJlCi0gKgotICogQ29udmVydHMgdGhlIHRpbWUgY29kZSBzdHJ1Y3R1cmUgdG8gYSB0aW1lc3RhbXAuCi0gKgotICogUmV0dXJuczogVGltZSBzdGFtcCBmb3IgdGltZSBjb2RlLCBvciBHU1RfQ0xPQ0tfVElNRV9OT05FIGlmIHRpbWUKLSAqICAgY29kZSBpcyBpbnZhbGlkLgotICovCi1Hc3RDbG9ja1RpbWUKLWdzdF9zbXB0ZV90aW1lX2NvZGVfZ2V0X3RpbWVzdGFtcCAoR3N0U01QVEVUaW1lQ29kZVN5c3RlbSBzeXN0ZW0sCi0gICAgR3N0U01QVEVUaW1lQ29kZSAqIHRpbWVfY29kZSkKLXsKLSAgaW50IGZyYW1lX251bWJlcjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fSVNfVkFMSUQgKHN5c3RlbSksCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRpbWVfY29kZSAhPSBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBpZiAoZ3N0X3NtcHRlX3RpbWVfY29kZV9nZXRfZnJhbWVfbnVtYmVyIChzeXN0ZW0sICZmcmFtZV9udW1iZXIsIHRpbWVfY29kZSkpIHsKLSAgICBzdGF0aWMgY29uc3QgaW50IGZyYW1lcmF0ZV9uWzNdID0geyAzMDAwLCAyNSwgMjQgfTsKLSAgICBzdGF0aWMgY29uc3QgaW50IGZyYW1lcmF0ZV9kWzNdID0geyAxMDAxLCAxLCAxIH07Ci0KLSAgICByZXR1cm4gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChmcmFtZV9udW1iZXIsCi0gICAgICAgIEdTVF9TRUNPTkQgKiBmcmFtZXJhdGVfZFtzeXN0ZW1dLCBmcmFtZXJhdGVfbltzeXN0ZW1dKTsKLSAgfQotCi0gIHJldHVybiBHU1RfQ0xPQ0tfVElNRV9OT05FOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuaCBiL2V4dC9kdi9nc3RzbXB0ZXRpbWVjb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNDIwNDYuLjAwMDAwMDAKLS0tIGEvZXh0L2R2L2dzdHNtcHRldGltZWNvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX0dTVF9TTVBURV9USU1FX0NPREVfSF8KLSNkZWZpbmUgX0dTVF9TTVBURV9USU1FX0NPREVfSF8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0U01QVEVUaW1lQ29kZSBHc3RTTVBURVRpbWVDb2RlOwotCi0vKioKLSAqIEdzdFNNUFRFVGltZUNvZGU6Ci0gKiBAR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMzA6IDI5Ljk3IGZyYW1lIHBlciBzZWNvbmQgc3lzdGVtIChOVFNDKQotICogQEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzI1OiAyNSBmcmFtZSBwZXIgc2Vjb25kIHN5c3RlbSAoUEFMKQotICogQEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzI0OiAyNCBmcmFtZSBwZXIgc2Vjb25kIHN5c3RlbQotICoKLSAqIEVudW0gdmFsdWUgcmVwcmVzZW50aW5nIFNNUFRFIFRpbWUgQ29kZSBzeXN0ZW0uCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzMwID0gMCwKLSAgR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMjUsCi0gIEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzI0Ci19IEdzdFNNUFRFVGltZUNvZGVTeXN0ZW07Ci0KLXN0cnVjdCBfR3N0U01QVEVUaW1lQ29kZSB7Ci0gIGludCBob3VyczsKLSAgaW50IG1pbnV0ZXM7Ci0gIGludCBzZWNvbmRzOwotICBpbnQgZnJhbWVzOwotfTsKLQotI2RlZmluZSBHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV9JU19WQUxJRCh4KSBcCi0gICgoeCkgPj0gR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMzAgJiYgKHgpIDw9IEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzI0KQotCi0jZGVmaW5lIEdTVF9TTVBURV9USU1FX0NPREVfRk9STUFUICIwMmQ6JTAyZDolMDJkOiUwMmQiCi0jZGVmaW5lIEdTVF9TTVBURV9USU1FX0NPREVfQVJHUyh0aW1lY29kZSkgXAotICAodGltZWNvZGUpLT5ob3VycywgKHRpbWVjb2RlKS0+bWludXRlcywgXAotICAodGltZWNvZGUpLT5zZWNvbmRzLCAodGltZWNvZGUpLT5mcmFtZXMKLQotZ2Jvb2xlYW4gZ3N0X3NtcHRlX3RpbWVfY29kZV9pc192YWxpZCAoR3N0U01QVEVUaW1lQ29kZVN5c3RlbSBzeXN0ZW0sCi0gICAgR3N0U01QVEVUaW1lQ29kZSAqdGltZV9jb2RlKTsKLWdib29sZWFuIGdzdF9zbXB0ZV90aW1lX2NvZGVfZnJvbV9mcmFtZV9udW1iZXIgKEdzdFNNUFRFVGltZUNvZGVTeXN0ZW0gc3lzdGVtLAotICAgIEdzdFNNUFRFVGltZUNvZGUgKnRpbWVfY29kZSwgaW50IGZyYW1lX251bWJlcik7Ci1nYm9vbGVhbiBnc3Rfc21wdGVfdGltZV9jb2RlX2dldF9mcmFtZV9udW1iZXIgKEdzdFNNUFRFVGltZUNvZGVTeXN0ZW0gc3lzdGVtLAotICAgIGludCAqZnJhbWVfbnVtYmVyLCBHc3RTTVBURVRpbWVDb2RlICp0aW1lX2NvZGUpOwotR3N0Q2xvY2tUaW1lIGdzdF9zbXB0ZV90aW1lX2NvZGVfZ2V0X3RpbWVzdGFtcCAoR3N0U01QVEVUaW1lQ29kZVN5c3RlbSBzeXN0ZW0sCi0gICAgR3N0U01QVEVUaW1lQ29kZSAqdGltZV9jb2RlKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2V4dC9kdi9zbXB0ZV90ZXN0LmMgYi9leHQvZHYvc21wdGVfdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTgxMTNjLi4wMDAwMDAwCi0tLSBhL2V4dC9kdi9zbXB0ZV90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImdzdHNtcHRldGltZWNvZGUuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2RlZmluZSBOVFNDX0ZSQU1FU19QRVJfMTBfTUlOUyAoMTAqNjAqMzAgLSAxMCoyICsgMikKLSNkZWZpbmUgTlRTQ19GUkFNRVNfUEVSX0hPVVIgKDYqTlRTQ19GUkFNRVNfUEVSXzEwX01JTlMpCi0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RTTVBURVRpbWVDb2RlIHRjOwotICBpbnQgaTsKLSAgaW50IG1pbjsKLQotICBmb3IgKG1pbiA9IDA7IG1pbiA8IDM7IG1pbisrKSB7Ci0gICAgZ19wcmludCAoIi0tLSBtaW51dGUgJWQgLS0tXG4iLCBtaW4pOwotICAgIGZvciAoaSA9IG1pbiAqIDYwICogMzAgLSA1OyBpIDw9IG1pbiAqIDYwICogMzAgKyA1OyBpKyspIHsKLSAgICAgIGdzdF9zbXB0ZV90aW1lX2NvZGVfZnJvbV9mcmFtZV9udW1iZXIgKEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzMwLCAmdGMsCi0gICAgICAgICAgaSk7Ci0gICAgICBnX3ByaW50ICgiJWQgJTAyZDolMDJkOiUwMmQ6JTAyZFxuIiwgaSwgdGMuaG91cnMsIHRjLm1pbnV0ZXMsIHRjLnNlY29uZHMsCi0gICAgICAgICAgdGMuZnJhbWVzKTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKG1pbiA9IDk7IG1pbiA8IDEyOyBtaW4rKykgewotICAgIGdfcHJpbnQgKCItLS0gbWludXRlICVkIC0tLVxuIiwgbWluKTsKLSAgICBmb3IgKGkgPSBtaW4gKiA2MCAqIDMwIC0gNSAtIDE4OyBpIDw9IG1pbiAqIDYwICogMzAgKyA1IC0gMTg7IGkrKykgewotICAgICAgZ3N0X3NtcHRlX3RpbWVfY29kZV9mcm9tX2ZyYW1lX251bWJlciAoR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMzAsICZ0YywKLSAgICAgICAgICBpKTsKLSAgICAgIGdfcHJpbnQgKCIlZCAlMDJkOiUwMmQ6JTAyZDolMDJkXG4iLCBpLCB0Yy5ob3VycywgdGMubWludXRlcywgdGMuc2Vjb25kcywKLSAgICAgICAgICB0Yy5mcmFtZXMpOwotICAgIH0KLSAgfQotCi0gIGZvciAobWluID0gLTE7IG1pbiA8IDI7IG1pbisrKSB7Ci0gICAgaW50IG9mZnNldCA9IE5UU0NfRlJBTUVTX1BFUl9IT1VSOwotCi0gICAgZ19wcmludCAoIi0tLSBtaW51dGUgJWQgLS0tXG4iLCBtaW4pOwotICAgIGZvciAoaSA9IG9mZnNldCArIG1pbiAqIDYwICogMzAgLSA1OyBpIDw9IG9mZnNldCArIG1pbiAqIDYwICogMzAgKyA1OyBpKyspIHsKLSAgICAgIGdzdF9zbXB0ZV90aW1lX2NvZGVfZnJvbV9mcmFtZV9udW1iZXIgKEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzMwLCAmdGMsCi0gICAgICAgICAgaSk7Ci0gICAgICBnX3ByaW50ICgiJWQgJTAyZDolMDJkOiUwMmQ6JTAyZFxuIiwgaSwgdGMuaG91cnMsIHRjLm1pbnV0ZXMsIHRjLnNlY29uZHMsCi0gICAgICAgICAgdGMuZnJhbWVzKTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKG1pbiA9IDA7IG1pbiA8IDE7IG1pbisrKSB7Ci0gICAgaW50IG9mZnNldCA9IE5UU0NfRlJBTUVTX1BFUl9IT1VSOwotCi0gICAgZ19wcmludCAoIi0tLSBtaW51dGUgJWQgLS0tXG4iLCBtaW4pOwotICAgIGZvciAoaSA9IDI0ICogb2Zmc2V0IC0gNTsgaSA8PSAyNCAqIG9mZnNldCArIDU7IGkrKykgewotICAgICAgZ3N0X3NtcHRlX3RpbWVfY29kZV9mcm9tX2ZyYW1lX251bWJlciAoR1NUX1NNUFRFX1RJTUVfQ09ERV9TWVNURU1fMzAsICZ0YywKLSAgICAgICAgICBpKTsKLSAgICAgIGdfcHJpbnQgKCIlZCAlMDJkOiUwMmQ6JTAyZDolMDJkXG4iLCBpLCB0Yy5ob3VycywgdGMubWludXRlcywgdGMuc2Vjb25kcywKLSAgICAgICAgICB0Yy5mcmFtZXMpOwotICAgIH0KLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCAyNCAqIE5UU0NfRlJBTUVTX1BFUl9IT1VSOyBpKyspIHsKLSAgICBpbnQgZm47Ci0gICAgaW50IHJldDsKLQotICAgIGdzdF9zbXB0ZV90aW1lX2NvZGVfZnJvbV9mcmFtZV9udW1iZXIgKEdTVF9TTVBURV9USU1FX0NPREVfU1lTVEVNXzMwLCAmdGMsCi0gICAgICAgIGkpOwotCi0gICAgcmV0ID0gZ3N0X3NtcHRlX3RpbWVfY29kZV9nZXRfZnJhbWVfbnVtYmVyIChHU1RfU01QVEVfVElNRV9DT0RFX1NZU1RFTV8zMCwKLSAgICAgICAgJmZuLCAmdGMpOwotICAgIGlmICghcmV0KSB7Ci0gICAgICBnX3ByaW50ICgiYmFkIHZhbGlkIGF0ICVkXG4iLCBpKTsKLSAgICB9Ci0gICAgaWYgKGZuICE9IGkpIHsKLSAgICAgIGdfcHJpbnQgKCJpbmRleCBtaXNtYXRjaCAlZCAhPSAlZFxuIiwgZm4sIGkpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2ZsYWMvTWFrZWZpbGUuYW0gYi9leHQvZmxhYy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQxY2UxMC4uMDAwMDAwMAotLS0gYS9leHQvZmxhYy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGZsYWMubGEKLQotbGliZ3N0ZmxhY19sYV9TT1VSQ0VTID0gZ3N0ZmxhYy5jIGdzdGZsYWNkZWMuYyBnc3RmbGFjZW5jLmMgZ3N0ZmxhY3RhZy5jCi1saWJnc3RmbGFjX2xhX0NGTEFHUyA9IC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoRkxBQ19DRkxBR1MpCi1saWJnc3RmbGFjX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctJChHU1RfQVBJX1ZFUlNJT04pIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEZMQUNfTElCUykKLWxpYmdzdGZsYWNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0ZmxhY19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGZsYWNlbmMuaCBnc3RmbGFjZGVjLmggZ3N0ZmxhY3RhZy5oCmRpZmYgLS1naXQgYS9leHQvZmxhYy9NYWtlZmlsZS5pbiBiL2V4dC9mbGFjL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWFhMDQ4Li4wMDAwMDAwCi0tLSBhL2V4dC9mbGFjL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTQyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGV4dC9mbGFjCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0ZmxhY19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0ZmxhY19sYV9PQkpFQ1RTID0gbGliZ3N0ZmxhY19sYS1nc3RmbGFjLmxvIFwKLQlsaWJnc3RmbGFjX2xhLWdzdGZsYWNkZWMubG8gbGliZ3N0ZmxhY19sYS1nc3RmbGFjZW5jLmxvIFwKLQlsaWJnc3RmbGFjX2xhLWdzdGZsYWN0YWcubG8KLWxpYmdzdGZsYWNfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0ZmxhY19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0ZmxhY19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGZsYWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RmbGFjX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGZsYWNfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0ZmxhY19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RmbGFjX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGZsYWMubGEKLWxpYmdzdGZsYWNfbGFfU09VUkNFUyA9IGdzdGZsYWMuYyBnc3RmbGFjZGVjLmMgZ3N0ZmxhY2VuYy5jIGdzdGZsYWN0YWcuYwotbGliZ3N0ZmxhY19sYV9DRkxBR1MgPSAtREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEZMQUNfQ0ZMQUdTKQotCi1saWJnc3RmbGFjX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctJChHU1RfQVBJX1ZFUlNJT04pIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEZMQUNfTElCUykKLQotbGliZ3N0ZmxhY19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RmbGFjX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGZsYWNlbmMuaCBnc3RmbGFjZGVjLmggZ3N0ZmxhY3RhZy5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvZmxhYy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvZmxhYy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGZsYWMubGE6ICQobGliZ3N0ZmxhY19sYV9PQkpFQ1RTKSAkKGxpYmdzdGZsYWNfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGZsYWNfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGZsYWNfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGZsYWNfbGFfT0JKRUNUUykgJChsaWJnc3RmbGFjX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjZGVjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjZW5jLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjdGFnLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RmbGFjX2xhLWdzdGZsYWMubG86IGdzdGZsYWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGZsYWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZmxhY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZmxhY19sYS1nc3RmbGFjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RmbGFjX2xhLWdzdGZsYWMuVHBvIC1jIC1vIGxpYmdzdGZsYWNfbGEtZ3N0ZmxhYy5sbyBgdGVzdCAtZiAnZ3N0ZmxhYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbGFjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGZsYWNfbGEtZ3N0ZmxhYy5UcG8gJChERVBESVIpL2xpYmdzdGZsYWNfbGEtZ3N0ZmxhYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RmbGFjLmMnIG9iamVjdD0nbGliZ3N0ZmxhY19sYS1nc3RmbGFjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZmxhY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RmbGFjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGZsYWNfbGEtZ3N0ZmxhYy5sbyBgdGVzdCAtZiAnZ3N0ZmxhYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbGFjLmMKLQotbGliZ3N0ZmxhY19sYS1nc3RmbGFjZGVjLmxvOiBnc3RmbGFjZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RmbGFjX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGZsYWNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGZsYWNfbGEtZ3N0ZmxhY2RlYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjZGVjLlRwbyAtYyAtbyBsaWJnc3RmbGFjX2xhLWdzdGZsYWNkZWMubG8gYHRlc3QgLWYgJ2dzdGZsYWNkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmxhY2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RmbGFjX2xhLWdzdGZsYWNkZWMuVHBvICQoREVQRElSKS9saWJnc3RmbGFjX2xhLWdzdGZsYWNkZWMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZmxhY2RlYy5jJyBvYmplY3Q9J2xpYmdzdGZsYWNfbGEtZ3N0ZmxhY2RlYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGZsYWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZmxhY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RmbGFjX2xhLWdzdGZsYWNkZWMubG8gYHRlc3QgLWYgJ2dzdGZsYWNkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmxhY2RlYy5jCi0KLWxpYmdzdGZsYWNfbGEtZ3N0ZmxhY2VuYy5sbzogZ3N0ZmxhY2VuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZmxhY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RmbGFjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RmbGFjX2xhLWdzdGZsYWNlbmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGZsYWNfbGEtZ3N0ZmxhY2VuYy5UcG8gLWMgLW8gbGliZ3N0ZmxhY19sYS1nc3RmbGFjZW5jLmxvIGB0ZXN0IC1mICdnc3RmbGFjZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZsYWNlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjZW5jLlRwbyAkKERFUERJUikvbGliZ3N0ZmxhY19sYS1nc3RmbGFjZW5jLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZsYWNlbmMuYycgb2JqZWN0PSdsaWJnc3RmbGFjX2xhLWdzdGZsYWNlbmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RmbGFjX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGZsYWNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZmxhY19sYS1nc3RmbGFjZW5jLmxvIGB0ZXN0IC1mICdnc3RmbGFjZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZsYWNlbmMuYwotCi1saWJnc3RmbGFjX2xhLWdzdGZsYWN0YWcubG86IGdzdGZsYWN0YWcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGZsYWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZmxhY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZmxhY19sYS1nc3RmbGFjdGFnLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RmbGFjX2xhLWdzdGZsYWN0YWcuVHBvIC1jIC1vIGxpYmdzdGZsYWNfbGEtZ3N0ZmxhY3RhZy5sbyBgdGVzdCAtZiAnZ3N0ZmxhY3RhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbGFjdGFnLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGZsYWNfbGEtZ3N0ZmxhY3RhZy5UcG8gJChERVBESVIpL2xpYmdzdGZsYWNfbGEtZ3N0ZmxhY3RhZy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RmbGFjdGFnLmMnIG9iamVjdD0nbGliZ3N0ZmxhY19sYS1nc3RmbGFjdGFnLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZmxhY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RmbGFjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGZsYWNfbGEtZ3N0ZmxhY3RhZy5sbyBgdGVzdCAtZiAnZ3N0ZmxhY3RhZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbGFjdGFnLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L2ZsYWMvZ3N0ZmxhYy5jIGIvZXh0L2ZsYWMvZ3N0ZmxhYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjg4YjJhLi4wMDAwMDAwCi0tLSBhL2V4dC9mbGFjL2dzdGZsYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RmbGFjZW5jLmgiCi0jaW5jbHVkZSAiZ3N0ZmxhY2RlYy5oIgotI2luY2x1ZGUgImdzdGZsYWN0YWcuaCIKLQotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC1pMThuLXBsdWdpbi5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0jaWZkZWYgRU5BQkxFX05MUwotICBHU1RfREVCVUcgKCJiaW5kaW5nIHRleHQgZG9tYWluICVzIHRvIGxvY2FsZSBkaXIgJXMiLCBHRVRURVhUX1BBQ0tBR0UsCi0gICAgICBMT0NBTEVESVIpOwotICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOwotICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKLSNlbmRpZgotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImZsYWNlbmMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0ZMQUNfRU5DKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImZsYWNkZWMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0ZMQUNfREVDKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImZsYWN0YWciLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIGdzdF9mbGFjX3RhZ19nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF90YWdfcmVnaXN0ZXJfbXVzaWNicmFpbnpfdGFncyAoKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGZsYWMsCi0gICAgIlRoZSBGTEFDIExvc3NsZXNzIGNvbXByZXNzb3IgQ29kZWMiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2V4dC9mbGFjL2dzdGZsYWNkZWMuYyBiL2V4dC9mbGFjL2dzdGZsYWNkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhYTBmMS4uMDAwMDAwMAotLS0gYS9leHQvZmxhYy9nc3RmbGFjZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNiwyMDExPiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gSmFuIFNjaG1pZHQgPHRoYXl0YW4gYXQgbWFkIHNjaWVudGlzdCBjb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZmxhY2RlYwotICogQHNlZV9hbHNvOiAjR3N0RmxhY0VuYwotICoKLSAqIGZsYWNkZWMgZGVjb2RlcyBGTEFDIHN0cmVhbXMuCi0gKiA8dWxpbmsgdXJsPSJodHRwOi8vZmxhYy5zb3VyY2Vmb3JnZS5uZXQvIj5GTEFDPC91bGluaz4KLSAqIGlzIGEgRnJlZSBMb3NzbGVzcyBBdWRpbyBDb2RlYy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1tZWRpYS9zbWFsbC9kYXJrLjQ0MS0xNi1zLmZsYWMgISBmbGFjcGFyc2UgISBmbGFjZGVjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsKLSAqIF18Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgc291cGh0dHBzcmMgbG9jYXRpb249aHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvbWVkaWEvc21hbGwvZGFyay40NDEtMTYtcy5mbGFjICEgZmxhY3BhcnNlICEgZmxhY2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBxdWV1ZSBtaW4tdGhyZXNob2xkLWJ1ZmZlcnM9MTAgISBhdXRvYXVkaW9zaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGZsYWNkZWMuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotLyogVGFrZW4gZnJvbSBodHRwOi8vZmxhYy5zb3VyY2Vmb3JnZS5uZXQvZm9ybWF0Lmh0bWwjZnJhbWVfaGVhZGVyICovCi1zdGF0aWMgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gY2hhbm5lbF9wb3NpdGlvbnNbOF1bOF0gPSB7Ci0gIHtHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05PfSwKLSAge0dTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVH0sIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVJ9LCB7Ci0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUfSwgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUfSwgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUfSwKLSAgLyogRklYTUU6IDcvOCBjaGFubmVsIGxheW91dHMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBGTEFDIHNwZWNzICovCi0gIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9DRU5URVJ9LCB7Ci0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMSwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZULAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVH0KLX07Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGZsYWNkZWNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZmxhY2RlY19kZWJ1ZwotCi1zdGF0aWMgRkxBQ19fU3RyZWFtRGVjb2RlclJlYWRTdGF0dXMKLWdzdF9mbGFjX2RlY19yZWFkX3N0cmVhbSAoY29uc3QgRkxBQ19fU3RyZWFtRGVjb2RlciAqIGRlY29kZXIsCi0gICAgRkxBQ19fYnl0ZSBidWZmZXJbXSwgc2l6ZV90ICogYnl0ZXMsIHZvaWQgKmNsaWVudF9kYXRhKTsKLXN0YXRpYyBGTEFDX19TdHJlYW1EZWNvZGVyV3JpdGVTdGF0dXMKLWdzdF9mbGFjX2RlY193cml0ZV9zdHJlYW0gKGNvbnN0IEZMQUNfX1N0cmVhbURlY29kZXIgKiBkZWNvZGVyLAotICAgIGNvbnN0IEZMQUNfX0ZyYW1lICogZnJhbWUsCi0gICAgY29uc3QgRkxBQ19faW50MzIgKiBjb25zdCBidWZmZXJbXSwgdm9pZCAqY2xpZW50X2RhdGEpOwotc3RhdGljIGdib29sZWFuCi1nc3RfZmxhY19kZWNfaGFuZGxlX2RlY29kZXJfZXJyb3IgKEdzdEZsYWNEZWMgKiBkZWMsIGdib29sZWFuIG1zZyk7Ci1zdGF0aWMgdm9pZCBnc3RfZmxhY19kZWNfbWV0YWRhdGFfY2IgKGNvbnN0IEZMQUNfX1N0cmVhbURlY29kZXIgKgotICAgIGRlY29kZXIsIGNvbnN0IEZMQUNfX1N0cmVhbU1ldGFkYXRhICogbWV0YWRhdGEsIHZvaWQgKmNsaWVudF9kYXRhKTsKLXN0YXRpYyB2b2lkIGdzdF9mbGFjX2RlY19lcnJvcl9jYiAoY29uc3QgRkxBQ19fU3RyZWFtRGVjb2RlciAqCi0gICAgZGVjb2RlciwgRkxBQ19fU3RyZWFtRGVjb2RlckVycm9yU3RhdHVzIHN0YXR1cywgdm9pZCAqY2xpZW50X2RhdGEpOwotCi1zdGF0aWMgdm9pZCBnc3RfZmxhY19kZWNfZmx1c2ggKEdzdEF1ZGlvRGVjb2RlciAqIGF1ZGlvX2RlYywgZ2Jvb2xlYW4gaGFyZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZsYWNfZGVjX3NldF9mb3JtYXQgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX2RlY19zdGFydCAoR3N0QXVkaW9EZWNvZGVyICogZGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmxhY19kZWNfc3RvcCAoR3N0QXVkaW9EZWNvZGVyICogZGVjKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9mbGFjX2RlY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRGVjb2RlciAqIGF1ZGlvX2RlYywKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotCi1HX0RFRklORV9UWVBFIChHc3RGbGFjRGVjLCBnc3RfZmxhY19kZWMsIEdTVF9UWVBFX0FVRElPX0RFQ09ERVIpOwotCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBGT1JNQVRTICJ7IFM4LCBTMTZMRSwgUzI0XzMyTEUsIFMzMkxFIH0gIgotI2Vsc2UKLSNkZWZpbmUgRk9STUFUUyAieyBTOCwgUzE2QkUsIFMyNF8zMkJFLCBTMzJCRSB9ICIKLSNlbmRpZgotCi0jZGVmaW5lIEdTVF9GTEFDX0RFQ19TUkNfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBGT1JNQVRTICIsICIgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgWyAxLCA2NTUzNTAgXSwgIiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDggXSIKLQotI2RlZmluZSBHU1RfRkxBQ19ERUNfU0lOS19DQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiYXVkaW8veC1mbGFjLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImZyYW1lZCA9IChib29sZWFuKSB0cnVlLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgWyAxLCA2NTUzNTAgXSwgIiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDggXSIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGZsYWNfZGVjX3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9GTEFDX0RFQ19TUkNfQ0FQUykpOwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGZsYWNfZGVjX3NpbmtfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9GTEFDX0RFQ19TSU5LX0NBUFMpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9mbGFjX2RlY19jbGFzc19pbml0IChHc3RGbGFjRGVjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QXVkaW9EZWNvZGVyQ2xhc3MgKmF1ZGlvZGVjb2Rlcl9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGF1ZGlvZGVjb2Rlcl9jbGFzcyA9IChHc3RBdWRpb0RlY29kZXJDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGZsYWNkZWNfZGVidWcsICJmbGFjZGVjIiwgMCwgImZsYWMgZGVjb2RlciIpOwotCi0gIGF1ZGlvZGVjb2Rlcl9jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmxhY19kZWNfc3RvcCk7Ci0gIGF1ZGlvZGVjb2Rlcl9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfZGVjX3N0YXJ0KTsKLSAgYXVkaW9kZWNvZGVyX2NsYXNzLT5mbHVzaCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmxhY19kZWNfZmx1c2gpOwotICBhdWRpb2RlY29kZXJfY2xhc3MtPnNldF9mb3JtYXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfZGVjX3NldF9mb3JtYXQpOwotICBhdWRpb2RlY29kZXJfY2xhc3MtPmhhbmRsZV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfZGVjX2hhbmRsZV9mcmFtZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZmxhY19kZWNfc3JjX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZmbGFjX2RlY19zaW5rX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJGTEFDIGF1ZGlvIGRlY29kZXIiLAotICAgICAgIkNvZGVjL0RlY29kZXIvQXVkaW8iLCAiRGVjb2RlcyBGTEFDIGxvc3NsZXNzIGF1ZGlvIHN0cmVhbXMiLAotICAgICAgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5uZXQ+LCAiCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbGFjX2RlY19pbml0IChHc3RGbGFjRGVjICogZmxhY2RlYykKLXsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X25lZWRzX2Zvcm1hdCAoR1NUX0FVRElPX0RFQ09ERVIgKGZsYWNkZWMpLCBUUlVFKTsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X3VzZV9kZWZhdWx0X3BhZF9hY2NlcHRjYXBzIChHU1RfQVVESU9fREVDT0RFUl9DQVNUCi0gICAgICAoZmxhY2RlYyksIFRSVUUpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKEdTVF9BVURJT19ERUNPREVSX1NJTktfUEFEIChmbGFjZGVjKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfZGVjX3N0YXJ0IChHc3RBdWRpb0RlY29kZXIgKiBhdWRpb19kZWMpCi17Ci0gIEZMQUNfX1N0cmVhbURlY29kZXJJbml0U3RhdHVzIHM7Ci0gIEdzdEZsYWNEZWMgKmRlYzsKLQotICBkZWMgPSBHU1RfRkxBQ19ERUMgKGF1ZGlvX2RlYyk7Ci0KLSAgZGVjLT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotCi0gIGRlYy0+ZGVjb2RlciA9IEZMQUNfX3N0cmVhbV9kZWNvZGVyX25ldyAoKTsKLQotICBnc3RfYXVkaW9faW5mb19pbml0ICgmZGVjLT5pbmZvKTsKLSAgZGVjLT5kZXB0aCA9IDA7Ci0KLSAgLyogbm8gcG9pbnQgY2FsY3VsYXRpbmcgTUQ1IHNpbmNlIGl0J3MgbmV2ZXIgY2hlY2tlZCBoZXJlICovCi0gIEZMQUNfX3N0cmVhbV9kZWNvZGVyX3NldF9tZDVfY2hlY2tpbmcgKGRlYy0+ZGVjb2RlciwgZmFsc2UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImluaXRpYWxpemluZyBkZWNvZGVyIik7Ci0gIHMgPSBGTEFDX19zdHJlYW1fZGVjb2Rlcl9pbml0X3N0cmVhbSAoZGVjLT5kZWNvZGVyLAotICAgICAgZ3N0X2ZsYWNfZGVjX3JlYWRfc3RyZWFtLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgZ3N0X2ZsYWNfZGVjX3dyaXRlX3N0cmVhbSwgZ3N0X2ZsYWNfZGVjX21ldGFkYXRhX2NiLAotICAgICAgZ3N0X2ZsYWNfZGVjX2Vycm9yX2NiLCBkZWMpOwotCi0gIGlmIChzICE9IEZMQUNfX1NUUkVBTV9ERUNPREVSX0lOSVRfU1RBVFVTX09LKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKEdTVF9FTEVNRU5UIChkZWMpLCBMSUJSQVJZLCBJTklULCAoTlVMTCksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZGVjLT5nb3RfaGVhZGVycyA9IEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX2RlY19zdG9wIChHc3RBdWRpb0RlY29kZXIgKiBkZWMpCi17Ci0gIEdzdEZsYWNEZWMgKmZsYWNkZWMgPSBHU1RfRkxBQ19ERUMgKGRlYyk7Ci0KLSAgaWYgKGZsYWNkZWMtPmRlY29kZXIpIHsKLSAgICBGTEFDX19zdHJlYW1fZGVjb2Rlcl9kZWxldGUgKGZsYWNkZWMtPmRlY29kZXIpOwotICAgIGZsYWNkZWMtPmRlY29kZXIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGZsYWNkZWMtPmFkYXB0ZXIpIHsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAoZmxhY2RlYy0+YWRhcHRlcik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGZsYWNkZWMtPmFkYXB0ZXIpOwotICAgIGZsYWNkZWMtPmFkYXB0ZXIgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfZGVjX3NldF9mb3JtYXQgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGNvbnN0IEdWYWx1ZSAqaGVhZGVyczsKLSAgR3N0RmxhY0RlYyAqZmxhY2RlYzsKLSAgR3N0U3RydWN0dXJlICpzOwotICBndWludCBpLCBudW07Ci0KLSAgZmxhY2RlYyA9IEdTVF9GTEFDX0RFQyAoZGVjKTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVjLCAic2luayBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBoZWFkZXJzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJzdHJlYW1oZWFkZXIiKTsKLSAgaWYgKGhlYWRlcnMgPT0gTlVMTCB8fCAhR1NUX1ZBTFVFX0hPTERTX0FSUkFZIChoZWFkZXJzKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjLCAibm8gJ3N0cmVhbWhlYWRlcicgZmllbGQgaW4gaW5wdXQgY2FwcywgdHJ5ICIKLSAgICAgICAgImFkZGluZyBhIGZsYWNwYXJzZSBlbGVtZW50IHVwc3RyZWFtIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZmxhY2RlYy0+YWRhcHRlcikgPiAwKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZWMsICJ1bmV4cGVjdGVkIGRhdGEgbGVmdCBpbiBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGZsYWNkZWMtPmFkYXB0ZXIpOwotICB9Ci0KLSAgbnVtID0gZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplIChoZWFkZXJzKTsKLSAgZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpoZWFkZXJfdmFsOwotICAgIEdzdEJ1ZmZlciAqaGVhZGVyX2J1ZjsKLQotICAgIGhlYWRlcl92YWwgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChoZWFkZXJzLCBpKTsKLSAgICBpZiAoaGVhZGVyX3ZhbCA9PSBOVUxMIHx8ICFHU1RfVkFMVUVfSE9MRFNfQlVGRkVSIChoZWFkZXJfdmFsKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGhlYWRlcl9idWYgPSBnX3ZhbHVlX2R1cF9ib3hlZCAoaGVhZGVyX3ZhbCk7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChkZWMsICJwdXNoaW5nIGhlYWRlciBidWZmZXIgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyAiCi0gICAgICAgICJpbnRvIGFkYXB0ZXIiLCBnc3RfYnVmZmVyX2dldF9zaXplIChoZWFkZXJfYnVmKSk7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAoZmxhY2RlYy0+YWRhcHRlciwgaGVhZGVyX2J1Zik7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJQcm9jZXNzaW5nIGhlYWRlcnMgYW5kIG1ldGFkYXRhIik7Ci0gIGlmICghRkxBQ19fc3RyZWFtX2RlY29kZXJfcHJvY2Vzc191bnRpbF9lbmRfb2ZfbWV0YWRhdGEgKGZsYWNkZWMtPmRlY29kZXIpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZWMsICJwcm9jZXNzX3VudGlsX2VuZF9vZl9tZXRhZGF0YSBmYWlsZWQiKTsKLSAgICBpZiAoRkxBQ19fc3RyZWFtX2RlY29kZXJfZ2V0X3N0YXRlIChmbGFjZGVjLT5kZWNvZGVyKSA9PQotICAgICAgICBGTEFDX19TVFJFQU1fREVDT0RFUl9BQk9SVEVEKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZsYWNkZWMsICJSZWFkIGNhbGxiYWNrIGNhdXNlZCBpbnRlcm5hbCBhYm9ydCIpOwotICAgICAgLyogYWxsb3cgcmVjb3ZlcnkgKi8KLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChmbGFjZGVjLT5hZGFwdGVyKTsKLSAgICAgIEZMQUNfX3N0cmVhbV9kZWNvZGVyX2ZsdXNoIChmbGFjZGVjLT5kZWNvZGVyKTsKLSAgICAgIGdzdF9mbGFjX2RlY19oYW5kbGVfZGVjb2Rlcl9lcnJvciAoZmxhY2RlYywgVFJVRSk7Ci0gICAgfQotICB9Ci0gIEdTVF9JTkZPX09CSkVDVCAoZGVjLCAiaGVhZGVycyBhbmQgbWV0YWRhdGEgYXJlIG5vdyBwcm9jZXNzZWQiKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIENSQy04LCBwb2x5ID0geF44ICsgeF4yICsgeF4xICsgeF4wLCBpbml0ID0gMCAqLwotc3RhdGljIGNvbnN0IGd1aW50OCBjcmM4X3RhYmxlWzI1Nl0gPSB7Ci0gIDB4MDAsIDB4MDcsIDB4MEUsIDB4MDksIDB4MUMsIDB4MUIsIDB4MTIsIDB4MTUsCi0gIDB4MzgsIDB4M0YsIDB4MzYsIDB4MzEsIDB4MjQsIDB4MjMsIDB4MkEsIDB4MkQsCi0gIDB4NzAsIDB4NzcsIDB4N0UsIDB4NzksIDB4NkMsIDB4NkIsIDB4NjIsIDB4NjUsCi0gIDB4NDgsIDB4NEYsIDB4NDYsIDB4NDEsIDB4NTQsIDB4NTMsIDB4NUEsIDB4NUQsCi0gIDB4RTAsIDB4RTcsIDB4RUUsIDB4RTksIDB4RkMsIDB4RkIsIDB4RjIsIDB4RjUsCi0gIDB4RDgsIDB4REYsIDB4RDYsIDB4RDEsIDB4QzQsIDB4QzMsIDB4Q0EsIDB4Q0QsCi0gIDB4OTAsIDB4OTcsIDB4OUUsIDB4OTksIDB4OEMsIDB4OEIsIDB4ODIsIDB4ODUsCi0gIDB4QTgsIDB4QUYsIDB4QTYsIDB4QTEsIDB4QjQsIDB4QjMsIDB4QkEsIDB4QkQsCi0gIDB4QzcsIDB4QzAsIDB4QzksIDB4Q0UsIDB4REIsIDB4REMsIDB4RDUsIDB4RDIsCi0gIDB4RkYsIDB4RjgsIDB4RjEsIDB4RjYsIDB4RTMsIDB4RTQsIDB4RUQsIDB4RUEsCi0gIDB4QjcsIDB4QjAsIDB4QjksIDB4QkUsIDB4QUIsIDB4QUMsIDB4QTUsIDB4QTIsCi0gIDB4OEYsIDB4ODgsIDB4ODEsIDB4ODYsIDB4OTMsIDB4OTQsIDB4OUQsIDB4OUEsCi0gIDB4MjcsIDB4MjAsIDB4MjksIDB4MkUsIDB4M0IsIDB4M0MsIDB4MzUsIDB4MzIsCi0gIDB4MUYsIDB4MTgsIDB4MTEsIDB4MTYsIDB4MDMsIDB4MDQsIDB4MEQsIDB4MEEsCi0gIDB4NTcsIDB4NTAsIDB4NTksIDB4NUUsIDB4NEIsIDB4NEMsIDB4NDUsIDB4NDIsCi0gIDB4NkYsIDB4NjgsIDB4NjEsIDB4NjYsIDB4NzMsIDB4NzQsIDB4N0QsIDB4N0EsCi0gIDB4ODksIDB4OEUsIDB4ODcsIDB4ODAsIDB4OTUsIDB4OTIsIDB4OUIsIDB4OUMsCi0gIDB4QjEsIDB4QjYsIDB4QkYsIDB4QjgsIDB4QUQsIDB4QUEsIDB4QTMsIDB4QTQsCi0gIDB4RjksIDB4RkUsIDB4RjcsIDB4RjAsIDB4RTUsIDB4RTIsIDB4RUIsIDB4RUMsCi0gIDB4QzEsIDB4QzYsIDB4Q0YsIDB4QzgsIDB4REQsIDB4REEsIDB4RDMsIDB4RDQsCi0gIDB4NjksIDB4NkUsIDB4NjcsIDB4NjAsIDB4NzUsIDB4NzIsIDB4N0IsIDB4N0MsCi0gIDB4NTEsIDB4NTYsIDB4NUYsIDB4NTgsIDB4NEQsIDB4NEEsIDB4NDMsIDB4NDQsCi0gIDB4MTksIDB4MUUsIDB4MTcsIDB4MTAsIDB4MDUsIDB4MDIsIDB4MEIsIDB4MEMsCi0gIDB4MjEsIDB4MjYsIDB4MkYsIDB4MjgsIDB4M0QsIDB4M0EsIDB4MzMsIDB4MzQsCi0gIDB4NEUsIDB4NDksIDB4NDAsIDB4NDcsIDB4NTIsIDB4NTUsIDB4NUMsIDB4NUIsCi0gIDB4NzYsIDB4NzEsIDB4NzgsIDB4N0YsIDB4NkEsIDB4NkQsIDB4NjQsIDB4NjMsCi0gIDB4M0UsIDB4MzksIDB4MzAsIDB4MzcsIDB4MjIsIDB4MjUsIDB4MkMsIDB4MkIsCi0gIDB4MDYsIDB4MDEsIDB4MDgsIDB4MEYsIDB4MUEsIDB4MUQsIDB4MTQsIDB4MTMsCi0gIDB4QUUsIDB4QTksIDB4QTAsIDB4QTcsIDB4QjIsIDB4QjUsIDB4QkMsIDB4QkIsCi0gIDB4OTYsIDB4OTEsIDB4OTgsIDB4OUYsIDB4OEEsIDB4OEQsIDB4ODQsIDB4ODMsCi0gIDB4REUsIDB4RDksIDB4RDAsIDB4RDcsIDB4QzIsIDB4QzUsIDB4Q0MsIDB4Q0IsCi0gIDB4RTYsIDB4RTEsIDB4RTgsIDB4RUYsIDB4RkEsIDB4RkQsIDB4RjQsIDB4RjMKLX07Ci0KLXN0YXRpYyBndWludDgKLWdzdF9mbGFjX2NhbGN1bGF0ZV9jcmM4IChjb25zdCBndWludDggKiBkYXRhLCBndWludCBsZW5ndGgpCi17Ci0gIGd1aW50OCBjcmMgPSAwOwotCi0gIHdoaWxlIChsZW5ndGgtLSkgewotICAgIGNyYyA9IGNyYzhfdGFibGVbY3JjIF4gKmRhdGFdOwotICAgICsrZGF0YTsKLSAgfQotCi0gIHJldHVybiBjcmM7Ci19Ci0KLS8qIEZJWE1FOiBmb3Igb3VyIHB1cnBvc2VzIGl0J3MgcHJvYmFibHkgZW5vdWdoIHRvIGp1c3QgY2hlY2sgZm9yIHRoZSBzeW5jCi0gKiBtYXJrZXIgLSB3ZSBqdXN0IHdhbnQgdG8ga25vdyBpZiBpdCdzIGEgaGVhZGVyIGZyYW1lIG9yIG5vdCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfZmxhY19kZWNfc2Nhbl9nb3RfZnJhbWUgKEdzdEZsYWNEZWMgKiBmbGFjZGVjLCBjb25zdCBndWludDggKiBkYXRhLAotICAgIGd1aW50IHNpemUpCi17Ci0gIGd1aW50IGhlYWRlcmxlbjsKLSAgZ3VpbnQgc3JfZnJvbV9lbmQgPSAwOyAgICAgICAgLyogY2FuIGJlIDAsIDggb3IgMTYgKi8KLSAgZ3VpbnQgYnNfZnJvbV9lbmQgPSAwOyAgICAgICAgLyogY2FuIGJlIDAsIDggb3IgMTYgKi8KLSAgZ3VpbnQzMiB2YWwgPSAwOwotICBndWludDggYnMsIHNyLCBjYSwgc3MsIHBiOwotICBnYm9vbGVhbiB2YnM7Ci0KLSAgaWYgKHNpemUgPCAxMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogc3luYyAqLwotICBpZiAoZGF0YVswXSAhPSAweEZGIHx8IChkYXRhWzFdICYgMHhGQykgIT0gMHhGOCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgdmJzID0gISAhKGRhdGFbMV0gJiAxKTsgICAgICAgLyogdmFyaWFibGUgYmxvY2tzaXplICovCi0gIGJzID0gKGRhdGFbMl0gJiAweEYwKSA+PiA0OyAgIC8qIGJsb2Nrc2l6ZSBtYXJrZXIgICAqLwotICBzciA9IChkYXRhWzJdICYgMHgwRik7ICAgICAgICAvKiBzYW1wbGVyYXRlIG1hcmtlciAgKi8KLSAgY2EgPSAoZGF0YVszXSAmIDB4RjApID4+IDQ7ICAgLyogY2hhbm5lbCBhc3NpZ25tZW50ICovCi0gIHNzID0gKGRhdGFbM10gJiAweDBGKSA+PiAxOyAgIC8qIHNhbXBsZSBzaXplIG1hcmtlciAqLwotICBwYiA9IChkYXRhWzNdICYgMHgwMSk7ICAgICAgICAvKiBwYWRkaW5nIGJpdCAgICAgICAgKi8KLQotICBHU1RfTE9HX09CSkVDVCAoZmxhY2RlYywKLSAgICAgICJnb3Qgc3luYywgdmJzPSVkLGJzPSV4LHNyPSV4LGNhPSV4LHNzPSV4LHBiPSV4IiwgdmJzLCBicywgc3IsIGNhLCBzcywKLSAgICAgIHBiKTsKLQotICBpZiAoYnMgPT0gMCB8fCBzciA9PSAweDBGIHx8IGNhID49IDB4MEIgfHwgc3MgPT0gMHgwMyB8fCBzcyA9PSAweDA3KSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogcmVhZCBibG9jayBzaXplIGZyb20gZW5kIG9mIGhlYWRlcj8gKi8KLSAgaWYgKGJzID09IDYpCi0gICAgYnNfZnJvbV9lbmQgPSA4OwotICBlbHNlIGlmIChicyA9PSA3KQotICAgIGJzX2Zyb21fZW5kID0gMTY7Ci0KLSAgLyogcmVhZCBzYW1wbGUgcmF0ZSBmcm9tIGVuZCBvZiBoZWFkZXI/ICovCi0gIGlmIChzciA9PSAweDBDKQotICAgIHNyX2Zyb21fZW5kID0gODsKLSAgZWxzZSBpZiAoc3IgPT0gMHgwRCB8fCBzciA9PSAweDBFKQotICAgIHNyX2Zyb21fZW5kID0gMTY7Ci0KLSAgdmFsID0gZGF0YVs0XTsKLSAgLyogVGhpcyBpcyBzbGlnaHRseSBmYXN0ZXIgdGhhbiBhIGxvb3AgKi8KLSAgaWYgKCEodmFsICYgMHg4MCkpIHsKLSAgICB2YWwgPSAwOwotICB9IGVsc2UgaWYgKCh2YWwgJiAweGMwKSAmJiAhKHZhbCAmIDB4MjApKSB7Ci0gICAgdmFsID0gMTsKLSAgfSBlbHNlIGlmICgodmFsICYgMHhlMCkgJiYgISh2YWwgJiAweDEwKSkgewotICAgIHZhbCA9IDI7Ci0gIH0gZWxzZSBpZiAoKHZhbCAmIDB4ZjApICYmICEodmFsICYgMHgwOCkpIHsKLSAgICB2YWwgPSAzOwotICB9IGVsc2UgaWYgKCh2YWwgJiAweGY4KSAmJiAhKHZhbCAmIDB4MDQpKSB7Ci0gICAgdmFsID0gNDsKLSAgfSBlbHNlIGlmICgodmFsICYgMHhmYykgJiYgISh2YWwgJiAweDAyKSkgewotICAgIHZhbCA9IDU7Ci0gIH0gZWxzZSBpZiAoKHZhbCAmIDB4ZmUpICYmICEodmFsICYgMHgwMSkpIHsKLSAgICB2YWwgPSA2OwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChmbGFjZGVjLCAiZmFpbGVkIHRvIHJlYWQgc2FtcGxlL2ZyYW1lIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgdmFsKys7Ci0gIGhlYWRlcmxlbiA9IDQgKyB2YWwgKyAoYnNfZnJvbV9lbmQgLyA4KSArIChzcl9mcm9tX2VuZCAvIDgpOwotCi0gIGlmIChnc3RfZmxhY19jYWxjdWxhdGVfY3JjOCAoZGF0YSwgaGVhZGVybGVuKSAhPSBkYXRhW2hlYWRlcmxlbl0pIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZmxhY2RlYywgImludmFsaWQgY2hlY2tzdW0iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmxhY19kZWNfaGFuZGxlX2RlY29kZXJfZXJyb3IgKEdzdEZsYWNEZWMgKiBkZWMsIGdib29sZWFuIG1zZykKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGRlYy0+ZXJyb3JfY291bnQrKzsKLSAgaWYgKGRlYy0+ZXJyb3JfY291bnQgPiAxMCkgewotICAgIGlmIChtc2cpCi0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLCAoTlVMTCkpOwotICAgIGRlYy0+bGFzdF9mbG93ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgcmV0ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJpZ25vcmluZyBlcnJvciBmb3Igbm93IGF0IGNvdW50ICVkIiwKLSAgICAgICAgZGVjLT5lcnJvcl9jb3VudCk7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfZGVjX21ldGFkYXRhX2NiIChjb25zdCBGTEFDX19TdHJlYW1EZWNvZGVyICogZGVjb2RlciwKLSAgICBjb25zdCBGTEFDX19TdHJlYW1NZXRhZGF0YSAqIG1ldGFkYXRhLCB2b2lkICpjbGllbnRfZGF0YSkKLXsKLSAgR3N0RmxhY0RlYyAqZmxhY2RlYyA9IEdTVF9GTEFDX0RFQyAoY2xpZW50X2RhdGEpOwotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NpdGlvbls4XTsKLQotICBHU1RfTE9HX09CSkVDVCAoZmxhY2RlYywgIm1ldGFkYXRhIHR5cGU6ICVkIiwgbWV0YWRhdGEtPnR5cGUpOwotCi0gIHN3aXRjaCAobWV0YWRhdGEtPnR5cGUpIHsKLSAgICBjYXNlIEZMQUNfX01FVEFEQVRBX1RZUEVfU1RSRUFNSU5GTzp7Ci0gICAgICBnaW50NjQgc2FtcGxlczsKLSAgICAgIGd1aW50IGRlcHRoLCB3aWR0aCwgZ2RlcHRoLCBjaGFubmVsczsKLQotICAgICAgc2FtcGxlcyA9IG1ldGFkYXRhLT5kYXRhLnN0cmVhbV9pbmZvLnRvdGFsX3NhbXBsZXM7Ci0KLSAgICAgIGZsYWNkZWMtPm1pbl9ibG9ja3NpemUgPSBtZXRhZGF0YS0+ZGF0YS5zdHJlYW1faW5mby5taW5fYmxvY2tzaXplOwotICAgICAgZmxhY2RlYy0+bWF4X2Jsb2Nrc2l6ZSA9IG1ldGFkYXRhLT5kYXRhLnN0cmVhbV9pbmZvLm1heF9ibG9ja3NpemU7Ci0gICAgICBmbGFjZGVjLT5kZXB0aCA9IGRlcHRoID0gbWV0YWRhdGEtPmRhdGEuc3RyZWFtX2luZm8uYml0c19wZXJfc2FtcGxlOwotCi0gICAgICBpZiAoZGVwdGggPCA5KSB7Ci0gICAgICAgIGdkZXB0aCA9IHdpZHRoID0gODsKLSAgICAgIH0gZWxzZSBpZiAoZGVwdGggPCAxNykgewotICAgICAgICBnZGVwdGggPSB3aWR0aCA9IDE2OwotICAgICAgfSBlbHNlIGlmIChkZXB0aCA8IDI1KSB7Ci0gICAgICAgIGdkZXB0aCA9IDI0OwotICAgICAgICB3aWR0aCA9IDMyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2RlcHRoID0gd2lkdGggPSAzMjsKLSAgICAgIH0KLQotICAgICAgY2hhbm5lbHMgPSBtZXRhZGF0YS0+ZGF0YS5zdHJlYW1faW5mby5jaGFubmVsczsKLSAgICAgIG1lbWNweSAocG9zaXRpb24sIGNoYW5uZWxfcG9zaXRpb25zW2NoYW5uZWxzIC0gMV0sIHNpemVvZiAocG9zaXRpb24pKTsKLSAgICAgIGdzdF9hdWRpb19jaGFubmVsX3Bvc2l0aW9uc190b192YWxpZF9vcmRlciAocG9zaXRpb24sIGNoYW5uZWxzKTsKLSAgICAgIC8qIE5vdGU6IHdlIGNyZWF0ZSB0aGUgaW52ZXJzZSByZW9yZGVyaW5nIG1hcCBoZXJlICovCi0gICAgICBnc3RfYXVkaW9fZ2V0X2NoYW5uZWxfcmVvcmRlcl9tYXAgKGNoYW5uZWxzLAotICAgICAgICAgIHBvc2l0aW9uLCBjaGFubmVsX3Bvc2l0aW9uc1tjaGFubmVscyAtIDFdLAotICAgICAgICAgIGZsYWNkZWMtPmNoYW5uZWxfcmVvcmRlcl9tYXApOwotCi0gICAgICBnc3RfYXVkaW9faW5mb19zZXRfZm9ybWF0ICgmZmxhY2RlYy0+aW5mbywKLSAgICAgICAgICBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIgKFRSVUUsIEdfQllURV9PUkRFUiwgd2lkdGgsIGdkZXB0aCksCi0gICAgICAgICAgbWV0YWRhdGEtPmRhdGEuc3RyZWFtX2luZm8uc2FtcGxlX3JhdGUsCi0gICAgICAgICAgbWV0YWRhdGEtPmRhdGEuc3RyZWFtX2luZm8uY2hhbm5lbHMsIHBvc2l0aW9uKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2RlYywgImJsb2Nrc2l6ZTogbWluPSV1LCBtYXg9JXUiLAotICAgICAgICAgIGZsYWNkZWMtPm1pbl9ibG9ja3NpemUsIGZsYWNkZWMtPm1heF9ibG9ja3NpemUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2RlYywgInNhbXBsZSByYXRlOiAldSwgY2hhbm5lbHM6ICV1IiwKLSAgICAgICAgICBmbGFjZGVjLT5pbmZvLnJhdGUsIGZsYWNkZWMtPmluZm8uY2hhbm5lbHMpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2RlYywgImRlcHRoOiAldSwgd2lkdGg6ICV1IiwgZmxhY2RlYy0+ZGVwdGgsCi0gICAgICAgICAgZmxhY2RlYy0+aW5mby5maW5mby0+d2lkdGgpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjZGVjLCAidG90YWwgc2FtcGxlcyA9ICUiIEdfR0lOVDY0X0ZPUk1BVCwgc2FtcGxlcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmxhY19kZWNfZXJyb3JfY2IgKGNvbnN0IEZMQUNfX1N0cmVhbURlY29kZXIgKiBkLAotICAgIEZMQUNfX1N0cmVhbURlY29kZXJFcnJvclN0YXR1cyBzdGF0dXMsIHZvaWQgKmNsaWVudF9kYXRhKQotewotICBjb25zdCBnY2hhciAqZXJyb3I7Ci0gIEdzdEZsYWNEZWMgKmRlYzsKLQotICBkZWMgPSBHU1RfRkxBQ19ERUMgKGNsaWVudF9kYXRhKTsKLQotICBzd2l0Y2ggKHN0YXR1cykgewotICAgIGNhc2UgRkxBQ19fU1RSRUFNX0RFQ09ERVJfRVJST1JfU1RBVFVTX0xPU1RfU1lOQzoKLSAgICAgIC8qIElnbm9yZSB0aGlzIGVycm9yIGFuZCBrZWVwIHByb2Nlc3NpbmcgKi8KLSAgICAgIHJldHVybjsKLSAgICBjYXNlIEZMQUNfX1NUUkVBTV9ERUNPREVSX0VSUk9SX1NUQVRVU19CQURfSEVBREVSOgotICAgICAgZXJyb3IgPSAiYmFkIGhlYWRlciI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZMQUNfX1NUUkVBTV9ERUNPREVSX0VSUk9SX1NUQVRVU19GUkFNRV9DUkNfTUlTTUFUQ0g6Ci0gICAgICBlcnJvciA9ICJDUkMgbWlzbWF0Y2giOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGVycm9yID0gInVua25vd24gZXJyb3IiOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZ3N0X2ZsYWNfZGVjX2hhbmRsZV9kZWNvZGVyX2Vycm9yIChkZWMsIEZBTFNFKSkKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLCAoIiVzICglZCkiLCBlcnJvciwgc3RhdHVzKSk7Ci19Ci0KLXN0YXRpYyBGTEFDX19TdHJlYW1EZWNvZGVyUmVhZFN0YXR1cwotZ3N0X2ZsYWNfZGVjX3JlYWRfc3RyZWFtIChjb25zdCBGTEFDX19TdHJlYW1EZWNvZGVyICogZGVjb2RlciwKLSAgICBGTEFDX19ieXRlIGJ1ZmZlcltdLCBzaXplX3QgKiBieXRlcywgdm9pZCAqY2xpZW50X2RhdGEpCi17Ci0gIEdzdEZsYWNEZWMgKmRlYyA9IEdTVF9GTEFDX0RFQyAoY2xpZW50X2RhdGEpOwotICBndWludCBsZW47Ci0KLSAgbGVuID0gTUlOIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGRlYy0+YWRhcHRlciksICpieXRlcyk7Ci0KLSAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlYywgIjAgYnl0ZXMgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQiKTsKLSAgICByZXR1cm4gRkxBQ19fU1RSRUFNX0RFQ09ERVJfUkVBRF9TVEFUVVNfQUJPUlQ7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoZGVjLCAiZmVlZGluZyAldSBieXRlcyB0byBkZWNvZGVyICIKLSAgICAgICIoYXZhaWxhYmxlPSUiIEdfR1NJWkVfRk9STUFUICIsIGJ5dGVzPSV1KSIsCi0gICAgICBsZW4sIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVjLT5hZGFwdGVyKSwgKGd1aW50KSAqIGJ5dGVzKTsKLSAgZ3N0X2FkYXB0ZXJfY29weSAoZGVjLT5hZGFwdGVyLCBidWZmZXIsIDAsIGxlbik7Ci0gICpieXRlcyA9IGxlbjsKLQotICBnc3RfYWRhcHRlcl9mbHVzaCAoZGVjLT5hZGFwdGVyLCBsZW4pOwotCi0gIHJldHVybiBGTEFDX19TVFJFQU1fREVDT0RFUl9SRUFEX1NUQVRVU19DT05USU5VRTsKLX0KLQotc3RhdGljIEZMQUNfX1N0cmVhbURlY29kZXJXcml0ZVN0YXR1cwotZ3N0X2ZsYWNfZGVjX3dyaXRlIChHc3RGbGFjRGVjICogZmxhY2RlYywgY29uc3QgRkxBQ19fRnJhbWUgKiBmcmFtZSwKLSAgICBjb25zdCBGTEFDX19pbnQzMiAqIGNvbnN0IGJ1ZmZlcltdKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ3VpbnQgZGVwdGggPSBmcmFtZS0+aGVhZGVyLmJpdHNfcGVyX3NhbXBsZTsKLSAgZ3VpbnQgd2lkdGgsIGdkZXB0aDsKLSAgZ3VpbnQgc2FtcGxlX3JhdGUgPSBmcmFtZS0+aGVhZGVyLnNhbXBsZV9yYXRlOwotICBndWludCBjaGFubmVscyA9IGZyYW1lLT5oZWFkZXIuY2hhbm5lbHM7Ci0gIGd1aW50IHNhbXBsZXMgPSBmcmFtZS0+aGVhZGVyLmJsb2Nrc2l6ZTsKLSAgZ3VpbnQgaiwgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdib29sZWFuIGNhcHNfY2hhbmdlZDsKLSAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gY2hhbnBvc1s4XTsKLQotICBHU1RfTE9HX09CSkVDVCAoZmxhY2RlYywgInNhbXBsZXMgaW4gZnJhbWUgaGVhZGVyOiAlZCIsIHNhbXBsZXMpOwotCi0gIGlmIChkZXB0aCA9PSAwKSB7Ci0gICAgaWYgKGZsYWNkZWMtPmRlcHRoIDwgNCB8fCBmbGFjZGVjLT5kZXB0aCA+IDMyKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChmbGFjZGVjLCAidW5zdXBwb3J0ZWQgZGVwdGggJWQgZnJvbSBTVFJFQU1JTkZPIiwKLSAgICAgICAgICBmbGFjZGVjLT5kZXB0aCk7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBkZXB0aCA9IGZsYWNkZWMtPmRlcHRoOwotICB9Ci0KLSAgc3dpdGNoIChkZXB0aCkgewotICAgIGNhc2UgODoKLSAgICAgIGdkZXB0aCA9IHdpZHRoID0gODsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTI6Ci0gICAgY2FzZSAxNjoKLSAgICAgIGdkZXB0aCA9IHdpZHRoID0gMTY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDIwOgotICAgIGNhc2UgMjQ6Ci0gICAgICBnZGVwdGggPSAyNDsKLSAgICAgIHdpZHRoID0gMzI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDMyOgotICAgICAgZ2RlcHRoID0gd2lkdGggPSAzMjsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChmbGFjZGVjLCAidW5zdXBwb3J0ZWQgZGVwdGggJWQiLCBkZXB0aCk7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGlmIChzYW1wbGVfcmF0ZSA9PSAwKSB7Ci0gICAgaWYgKGZsYWNkZWMtPmluZm8ucmF0ZSAhPSAwKSB7Ci0gICAgICBzYW1wbGVfcmF0ZSA9IGZsYWNkZWMtPmluZm8ucmF0ZTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZmxhY2RlYywgInVua25vd24gc2FtcGxlIHJhdGUiKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfQotCi0gIGNhcHNfY2hhbmdlZCA9IChzYW1wbGVfcmF0ZSAhPSBHU1RfQVVESU9fSU5GT19SQVRFICgmZmxhY2RlYy0+aW5mbykpCi0gICAgICB8fCAod2lkdGggIT0gR1NUX0FVRElPX0lORk9fV0lEVEggKCZmbGFjZGVjLT5pbmZvKSkKLSAgICAgIHx8IChnZGVwdGggIT0gR1NUX0FVRElPX0lORk9fREVQVEggKCZmbGFjZGVjLT5pbmZvKSkKLSAgICAgIHx8IChjaGFubmVscyAhPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJmZsYWNkZWMtPmluZm8pKTsKLQotICBpZiAoY2Fwc19jaGFuZ2VkCi0gICAgICB8fCAhZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChHU1RfQVVESU9fREVDT0RFUl9TUkNfUEFEIChmbGFjZGVjKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjZGVjLCAiTmVnb3RpYXRpbmcgJWQgSHogQCAlZCBjaGFubmVscyIsIHNhbXBsZV9yYXRlLAotICAgICAgICBjaGFubmVscyk7Ci0KLSAgICBtZW1jcHkgKGNoYW5wb3MsIGNoYW5uZWxfcG9zaXRpb25zW2ZsYWNkZWMtPmluZm8uY2hhbm5lbHMgLSAxXSwKLSAgICAgICAgc2l6ZW9mIChjaGFucG9zKSk7Ci0gICAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX3ZhbGlkX29yZGVyIChjaGFucG9zLAotICAgICAgICBmbGFjZGVjLT5pbmZvLmNoYW5uZWxzKTsKLSAgICBnc3RfYXVkaW9faW5mb19zZXRfZm9ybWF0ICgmZmxhY2RlYy0+aW5mbywKLSAgICAgICAgZ3N0X2F1ZGlvX2Zvcm1hdF9idWlsZF9pbnRlZ2VyIChUUlVFLCBHX0JZVEVfT1JERVIsIHdpZHRoLCBnZGVwdGgpLAotICAgICAgICBzYW1wbGVfcmF0ZSwgY2hhbm5lbHMsIGNoYW5wb3MpOwotCi0gICAgLyogTm90ZTogd2UgY3JlYXRlIHRoZSBpbnZlcnNlIHJlb3JkZXJpbmcgbWFwIGhlcmUgKi8KLSAgICBnc3RfYXVkaW9fZ2V0X2NoYW5uZWxfcmVvcmRlcl9tYXAgKGZsYWNkZWMtPmluZm8uY2hhbm5lbHMsCi0gICAgICAgIGZsYWNkZWMtPmluZm8ucG9zaXRpb24sIGNoYW5uZWxfcG9zaXRpb25zW2ZsYWNkZWMtPmluZm8uY2hhbm5lbHMgLSAxXSwKLSAgICAgICAgZmxhY2RlYy0+Y2hhbm5lbF9yZW9yZGVyX21hcCk7Ci0KLSAgICBmbGFjZGVjLT5kZXB0aCA9IGRlcHRoOwotCi0gICAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X291dHB1dF9mb3JtYXQgKEdTVF9BVURJT19ERUNPREVSIChmbGFjZGVjKSwKLSAgICAgICAgJmZsYWNkZWMtPmluZm8pOwotICB9Ci0KLSAgb3V0YnVmID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBzYW1wbGVzICogY2hhbm5lbHMgKiAod2lkdGggLyA4KSwgTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGlmICh3aWR0aCA9PSA4KSB7Ci0gICAgZ2ludDggKm91dGJ1ZmZlciA9IChnaW50OCAqKSBtYXAuZGF0YTsKLSAgICBnaW50ICpyZW9yZGVyX21hcCA9IGZsYWNkZWMtPmNoYW5uZWxfcmVvcmRlcl9tYXA7Ci0KLSAgICBnX2Fzc2VydCAoZ2RlcHRoID09IDggJiYgZGVwdGggPT0gOCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXM7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspIHsKLSAgICAgICAgKm91dGJ1ZmZlcisrID0gKGdpbnQ4KSBidWZmZXJbcmVvcmRlcl9tYXBbal1dW2ldOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIGlmICh3aWR0aCA9PSAxNikgewotICAgIGdpbnQxNiAqb3V0YnVmZmVyID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgICBnaW50ICpyZW9yZGVyX21hcCA9IGZsYWNkZWMtPmNoYW5uZWxfcmVvcmRlcl9tYXA7Ci0KLSAgICBpZiAoZ2RlcHRoICE9IGRlcHRoKSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxlczsgaSsrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBjaGFubmVsczsgaisrKSB7Ci0gICAgICAgICAgKm91dGJ1ZmZlcisrID0KLSAgICAgICAgICAgICAgKGdpbnQxNikgKGJ1ZmZlcltyZW9yZGVyX21hcFtqXV1baV0gPDwgKGdkZXB0aCAtIGRlcHRoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXM7IGkrKykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgY2hhbm5lbHM7IGorKykgewotICAgICAgICAgICpvdXRidWZmZXIrKyA9IChnaW50MTYpIGJ1ZmZlcltyZW9yZGVyX21hcFtqXV1baV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSBpZiAod2lkdGggPT0gMzIpIHsKLSAgICBnaW50MzIgKm91dGJ1ZmZlciA9IChnaW50MzIgKikgbWFwLmRhdGE7Ci0gICAgZ2ludCAqcmVvcmRlcl9tYXAgPSBmbGFjZGVjLT5jaGFubmVsX3Jlb3JkZXJfbWFwOwotCi0gICAgaWYgKGdkZXB0aCAhPSBkZXB0aCkgewotICAgICAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXM7IGkrKykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgY2hhbm5lbHM7IGorKykgewotICAgICAgICAgICpvdXRidWZmZXIrKyA9Ci0gICAgICAgICAgICAgIChnaW50MzIpIChidWZmZXJbcmVvcmRlcl9tYXBbal1dW2ldIDw8IChnZGVwdGggLSBkZXB0aCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBzYW1wbGVzOyBpKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspIHsKLSAgICAgICAgICAqb3V0YnVmZmVyKysgPSAoZ2ludDMyKSBidWZmZXJbcmVvcmRlcl9tYXBbal1dW2ldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2RlYywgInB1c2hpbmcgJWQgc2FtcGxlcyIsIHNhbXBsZXMpOwotICBpZiAoZmxhY2RlYy0+ZXJyb3JfY291bnQpCi0gICAgZmxhY2RlYy0+ZXJyb3JfY291bnQtLTsKLQotICByZXQgPSBnc3RfYXVkaW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKEdTVF9BVURJT19ERUNPREVSIChmbGFjZGVjKSwgb3V0YnVmLCAxKTsKLQotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNkZWMsICJmaW5pc2hfZnJhbWUgZmxvdyAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgfQotCi1kb25lOgotCi0gIC8qIHdlIGFjdCBvbiB0aGUgZmxvdyByZXR1cm4gdmFsdWUgbGF0ZXIgaW4gdGhlIGhhbmRsZV9mcmFtZSBmdW5jdGlvbiwgYXMgd2UKLSAgICogZG9uJ3Qgd2FudCB0byBtZXNzIHVwIHRoZSBpbnRlcm5hbCBkZWNvZGVyIHN0YXRlIGJ5IHJldHVybmluZyBBQk9SVCB3aGVuCi0gICAqIHRoZSBlcnJvciBpcyBpbiBmYWN0IG5vbi1mYXRhbCAobGlrZSBhIHBhZCBpbiBmbHVzaGluZyBtb2RlKSBhbmQgd2Ugd2FudAotICAgKiB0byBjb250aW51ZSBsYXRlci4gU28ganVzdCBwcmV0ZW5kIGV2ZXJ5dGhpbmcncyBkYW5keSBhbmQgYWN0IGxhdGVyLiAqLwotICBmbGFjZGVjLT5sYXN0X2Zsb3cgPSByZXQ7Ci0KLSAgcmV0dXJuIEZMQUNfX1NUUkVBTV9ERUNPREVSX1dSSVRFX1NUQVRVU19DT05USU5VRTsKLX0KLQotc3RhdGljIEZMQUNfX1N0cmVhbURlY29kZXJXcml0ZVN0YXR1cwotZ3N0X2ZsYWNfZGVjX3dyaXRlX3N0cmVhbSAoY29uc3QgRkxBQ19fU3RyZWFtRGVjb2RlciAqIGRlY29kZXIsCi0gICAgY29uc3QgRkxBQ19fRnJhbWUgKiBmcmFtZSwKLSAgICBjb25zdCBGTEFDX19pbnQzMiAqIGNvbnN0IGJ1ZmZlcltdLCB2b2lkICpjbGllbnRfZGF0YSkKLXsKLSAgcmV0dXJuIGdzdF9mbGFjX2RlY193cml0ZSAoR1NUX0ZMQUNfREVDIChjbGllbnRfZGF0YSksIGZyYW1lLCBidWZmZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfZGVjX2ZsdXNoIChHc3RBdWRpb0RlY29kZXIgKiBhdWRpb19kZWMsIGdib29sZWFuIGhhcmQpCi17Ci0gIEdzdEZsYWNEZWMgKmRlYyA9IEdTVF9GTEFDX0RFQyAoYXVkaW9fZGVjKTsKLQotICBpZiAoIWhhcmQpIHsKLSAgICBndWludCBhdmFpbGFibGUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGRlYy0+YWRhcHRlcik7Ci0KLSAgICBpZiAoYXZhaWxhYmxlID4gMCkgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChkZWMsICJkcmFpbmluZywgJXUgYnl0ZXMgbGVmdCBpbiBhZGFwdGVyIiwgYXZhaWxhYmxlKTsKLSAgICAgIEZMQUNfX3N0cmVhbV9kZWNvZGVyX3Byb2Nlc3NfdW50aWxfZW5kX29mX3N0cmVhbSAoZGVjLT5kZWNvZGVyKTsKLSAgICB9Ci0gIH0KLQotICBGTEFDX19zdHJlYW1fZGVjb2Rlcl9mbHVzaCAoZGVjLT5kZWNvZGVyKTsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGRlYy0+YWRhcHRlcik7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmxhY19kZWNfaGFuZGxlX2ZyYW1lIChHc3RBdWRpb0RlY29kZXIgKiBhdWRpb19kZWMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0RmxhY0RlYyAqZGVjOwotCi0gIGRlYyA9IEdTVF9GTEFDX0RFQyAoYXVkaW9fZGVjKTsKLQotICAvKiBkcmFpbiByZW1haW5pbmcgZGF0YT8gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGJ1ZiA9PSBOVUxMKSkgewotICAgIGdzdF9mbGFjX2RlY19mbHVzaCAoYXVkaW9fZGVjLCBGQUxTRSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlYywgImZyYW1lOiB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZmxhZ3MgMHglMDR4LCAiCi0gICAgICAiJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSwKLSAgICAgIEdTVF9CVUZGRVJfRkxBR1MgKGJ1ZiksIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotCi0gIC8qIGRyb3AgYW55IGluLXN0cmVhbSBoZWFkZXJzLCB3ZSd2ZSBwcm9jZXNzZWQgdGhvc2UgaW4gc2V0X2Zvcm1hdCBhbHJlYWR5ICovCi0gIGlmIChHX1VOTElLRUxZICghZGVjLT5nb3RfaGVhZGVycykpIHsKLSAgICBnYm9vbGVhbiBnb3RfYXVkaW9fZnJhbWU7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICAvKiBjaGVjayBpZiB0aGlzIGlzIGEgZmxhYyBhdWRpbyBmcmFtZSAocmF0aGVyIHRoYW4gYSBoZWFkZXIgb3IganVuaykgKi8KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGdvdF9hdWRpb19mcmFtZSA9IGdzdF9mbGFjX2RlY19zY2FuX2dvdF9mcmFtZSAoZGVjLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgICBpZiAoIWdvdF9hdWRpb19mcmFtZSkgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChkZWMsICJkcm9wcGluZyBpbi1zdHJlYW0gaGVhZGVyLCAlIiBHX0dTSVpFX0ZPUk1BVCAiICIKLSAgICAgICAgICAiYnl0ZXMiLCBtYXAuc2l6ZSk7Ci0gICAgICBnc3RfYXVkaW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKGF1ZGlvX2RlYywgTlVMTCwgMSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfQotCi0gICAgR1NUX0lORk9fT0JKRUNUIChkZWMsICJmaXJzdCBhdWRpbyBmcmFtZSwgZ290IGFsbCBpbi1zdHJlYW0gaGVhZGVycyBub3ciKTsKLSAgICBkZWMtPmdvdF9oZWFkZXJzID0gVFJVRTsKLSAgfQotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKGRlYy0+YWRhcHRlciwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZikpOwotICBidWYgPSBOVUxMOwotCi0gIGRlYy0+bGFzdF9mbG93ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogZnJhbWVkIC0gdGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBlbm91Z2ggZGF0YSB0byBkZWNvZGUgc29tZXRoaW5nICovCi0gIEdTVF9MT0dfT0JKRUNUIChkZWMsICIlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIGF2YWlsYWJsZSIsCi0gICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGRlYy0+YWRhcHRlcikpOwotCi0gIGlmICghRkxBQ19fc3RyZWFtX2RlY29kZXJfcHJvY2Vzc19zaW5nbGUgKGRlYy0+ZGVjb2RlcikpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGRlYywgInByb2Nlc3Nfc2luZ2xlIGZhaWxlZCIpOwotICAgIGlmIChGTEFDX19zdHJlYW1fZGVjb2Rlcl9nZXRfc3RhdGUgKGRlYy0+ZGVjb2RlcikgPT0KLSAgICAgICAgRkxBQ19fU1RSRUFNX0RFQ09ERVJfQUJPUlRFRCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZWMsICJSZWFkIGNhbGxiYWNrIGNhdXNlZCBpbnRlcm5hbCBhYm9ydCIpOwotICAgICAgLyogYWxsb3cgcmVjb3ZlcnkgKi8KLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChkZWMtPmFkYXB0ZXIpOwotICAgICAgRkxBQ19fc3RyZWFtX2RlY29kZXJfZmx1c2ggKGRlYy0+ZGVjb2Rlcik7Ci0gICAgICBnc3RfZmxhY19kZWNfaGFuZGxlX2RlY29kZXJfZXJyb3IgKGRlYywgVFJVRSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGRlYy0+bGFzdF9mbG93OwotfQpkaWZmIC0tZ2l0IGEvZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oIGIvZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQwNzNhLi4wMDAwMDAwCi0tLSBhL2V4dC9mbGFjL2dzdGZsYWNkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMTE+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0ZMQUNfREVDX0hfXwotI2RlZmluZSBfX0dTVF9GTEFDX0RFQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmg+Ci0KLSNpbmNsdWRlIDxGTEFDL2FsbC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRkxBQ19ERUMgZ3N0X2ZsYWNfZGVjX2dldF90eXBlKCkKLSNkZWZpbmUgR1NUX0ZMQUNfREVDKG9iaikgR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qob2JqLCBHU1RfVFlQRV9GTEFDX0RFQywgR3N0RmxhY0RlYykKLSNkZWZpbmUgR1NUX0ZMQUNfREVDX0NMQVNTKGtsYXNzKSBHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVChrbGFzcywgR1NUX1RZUEVfRkxBQ19ERUMsIEdzdEZsYWNEZWNDbGFzcykKLSNkZWZpbmUgR1NUX0lTX0ZMQUNfREVDKG9iaikgR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUob2JqLCBHU1RfVFlQRV9GTEFDX0RFQykKLSNkZWZpbmUgR1NUX0lTX0ZMQUNfREVDX0NMQVNTKGtsYXNzKSBHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRShrbGFzcywgR1NUX1RZUEVfRkxBQ19ERUMpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RGbGFjRGVjIEdzdEZsYWNEZWM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RmxhY0RlY0NsYXNzIEdzdEZsYWNEZWNDbGFzczsKLQotc3RydWN0IF9Hc3RGbGFjRGVjIHsKLSAgR3N0QXVkaW9EZWNvZGVyICBhdWRpb2RlY29kZXI7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEZMQUNfX1N0cmVhbURlY29kZXIgICAgICAgICAqZGVjb2RlcjsKLSAgR3N0QWRhcHRlciAgICAgICAgICAgICAgICAgICphZGFwdGVyOwotCi0gIGdib29sZWFuICAgICAgIGdvdF9oZWFkZXJzOyAvKiBoYXZlIHdlIHJlY2VpdmVkIGFsbCB0aGUgaGVhZGVyIGJ1ZmZlcnMgeWV0PyAqLwotCi0gIEdzdEZsb3dSZXR1cm4gIGxhc3RfZmxvdzsgICAvKiB0byBtYXJzaGFsIGZsb3cgcmV0dXJuIGZyb20gZmluaXNfZnJhbWUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhhbmRsZV9mcmFtZSB2aWEgZmxhYyBjYWxsYmFja3MgKi8KLQotICBHc3RBdWRpb0luZm8gICBpbmZvOwotICBnaW50ICAgICAgICAgICBjaGFubmVsX3Jlb3JkZXJfbWFwWzhdOwotICBnaW50ICAgICAgICAgICBkZXB0aDsKLQotICAvKiBmcm9tIHRoZSBzdHJlYW0gaW5mbywgbmVlZGVkIGZvciBzY2FubmluZyAqLwotICBndWludDE2ICAgICAgICBtaW5fYmxvY2tzaXplOwotICBndWludDE2ICAgICAgICBtYXhfYmxvY2tzaXplOwotCi0gIGdpbnQgICAgICAgICAgIGVycm9yX2NvdW50OwotfTsKLQotc3RydWN0IF9Hc3RGbGFjRGVjQ2xhc3MgewotICBHc3RBdWRpb0RlY29kZXJDbGFzcyAgYXVkaW9kZWNvZGVyOwotfTsKLQotR1R5cGUgZ3N0X2ZsYWNfZGVjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZMQUNfREVDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jIGIvZXh0L2ZsYWMvZ3N0ZmxhY2VuYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDhiYjhjLi4wMDAwMDAwCi0tLSBhL2V4dC9mbGFjL2dzdGZsYWNlbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1mbGFjZW5jCi0gKiBAc2VlX2Fsc286ICNHc3RGbGFjRGVjCi0gKgotICogZmxhY2VuYyBlbmNvZGVzIEZMQUMgc3RyZWFtcy4KLSAqIDx1bGluayB1cmw9Imh0dHA6Ly9mbGFjLnNvdXJjZWZvcmdlLm5ldC8iPkZMQUM8L3VsaW5rPgotICogaXMgYSBGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjLiBGTEFDIGF1ZGlvIGNhbiBkaXJlY3RseSBiZSB3cml0dGVuIGludG8KLSAqIGEgZmlsZSwgb3IgZW1iZWRkZWQgaW50byBjb250YWluZXJzIHN1Y2ggYXMgb2dnbXV4IG9yIG1hdHJvc2thbXV4LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAwICEgZmxhY2VuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPWJlZXAuZmxhYwotICogXXwgRW5jb2RlIGEgc2hvcnQgc2luZSB3YXZlIGludG8gRkxBQwotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGNkcGFyYW5vaWFzcmMgbW9kZT1jb250aW51b3VzICEgcXVldWUgISBhdWRpb2NvbnZlcnQgISBmbGFjZW5jICEgZmlsZXNpbmsgbG9jYXRpb249Y2QuZmxhYwotICogXXwgUmlwIGEgd2hvbGUgYXVkaW8gQ0QgaW50byBhIHNpbmdsZSBGTEFDIGZpbGUsIHdpdGggdGhlIHRyYWNrIHRhYmxlIHNhdmVkIGFzIGEgQ1VFIHNoZWV0IGluc2lkZSB0aGUgRkxBQyBmaWxlCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgY2RwYXJhbm9pYXNyYyB0cmFjaz01ICEgcXVldWUgISBhdWRpb2NvbnZlcnQgISBmbGFjZW5jICEgZmlsZXNpbmsgbG9jYXRpb249dHJhY2s1LmZsYWMKLSAqIF18IFJpcCB0cmFjayA1IG9mIGFuIGF1ZGlvIENEIGFuZCBlbmNvZGUgaXQgbG9zc2xlc3NseSB0byBhIEZMQUMgZmlsZQotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBUT0RPOiAtIFdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgZGlzY29udGludWl0aWVzIGluIHRoZSBzdHJlYW0gaW4gYSB1c2VmdWwKLSAqICAgICAgICAgd2F5IGFuZCBpbnN0ZWFkIHJlbHkgb24gdGhlIGRldmVsb3BlciBwbHVnZ2luZyBpbiBhdWRpb3JhdGUgaWYKLSAqICAgICAgICAgdGhlIHN0cmVhbSBjb250YWlucyBkaXNjb250aW51aXRpZXMuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0ZmxhY2VuYy5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhZ3NldHRlci5oPgotCi0vKiBUYWtlbiBmcm9tIGh0dHA6Ly9mbGFjLnNvdXJjZWZvcmdlLm5ldC9mb3JtYXQuaHRtbCNmcmFtZV9oZWFkZXIgKi8KLXN0YXRpYyBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaGFubmVsX3Bvc2l0aW9uc1s4XVs4XSA9IHsKLSAge0dTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX01PTk99LAotICB7R1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUfSwgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUn0sIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFR9LCB7Ci0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFR9LCB7Ci0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFR9LAotICAvKiBGSVhNRTogNy84IGNoYW5uZWwgbGF5b3V0cyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIEZMQUMgc3BlY3MgKi8KLSAgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0NFTlRFUn0sIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX0xFRlQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hUfQotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtZmxhYyIpCi0gICAgKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUVVBTElUWSwKLSAgUFJPUF9TVFJFQU1BQkxFX1NVQlNFVCwKLSAgUFJPUF9NSURfU0lERV9TVEVSRU8sCi0gIFBST1BfTE9PU0VfTUlEX1NJREVfU1RFUkVPLAotICBQUk9QX0JMT0NLU0laRSwKLSAgUFJPUF9NQVhfTFBDX09SREVSLAotICBQUk9QX1FMUF9DT0VGRl9QUkVDSVNJT04sCi0gIFBST1BfUUxQX0NPRUZGX1BSRUNfU0VBUkNILAotICBQUk9QX0VTQ0FQRV9DT0RJTkcsCi0gIFBST1BfRVhIQVVTVElWRV9NT0RFTF9TRUFSQ0gsCi0gIFBST1BfTUlOX1JFU0lEVUFMX1BBUlRJVElPTl9PUkRFUiwKLSAgUFJPUF9NQVhfUkVTSURVQUxfUEFSVElUSU9OX09SREVSLAotICBQUk9QX1JJQ0VfUEFSQU1FVEVSX1NFQVJDSF9ESVNULAotICBQUk9QX1BBRERJTkcsCi0gIFBST1BfU0VFS1BPSU5UUwotfTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZmxhY2VuY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBmbGFjZW5jX2RlYnVnCi0KLSNkZWZpbmUgZ3N0X2ZsYWNfZW5jX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGbGFjRW5jLCBnc3RfZmxhY19lbmMsIEdTVF9UWVBFX0FVRElPX0VOQ09ERVIsCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UQUdfU0VUVEVSLCBOVUxMKQotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVE9DX1NFVFRFUiwgTlVMTCkKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZsYWNfZW5jX3N0YXJ0IChHc3RBdWRpb0VuY29kZXIgKiBlbmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX2VuY19zdG9wIChHc3RBdWRpb0VuY29kZXIgKiBlbmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX2VuY19zZXRfZm9ybWF0IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsCi0gICAgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmxhY19lbmNfaGFuZGxlX2ZyYW1lIChHc3RBdWRpb0VuY29kZXIgKiBlbmMsCi0gICAgR3N0QnVmZmVyICogaW5fYnVmKTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfZmxhY19lbmNfZ2V0Y2FwcyAoR3N0QXVkaW9FbmNvZGVyICogZW5jLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmxhY19lbmNfc2lua19ldmVudCAoR3N0QXVkaW9FbmNvZGVyICogZW5jLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX2VuY19zaW5rX3F1ZXJ5IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9mbGFjX2VuY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfZmxhY19lbmNfZ2VuZXJhdGVfc2lua19jYXBzICh2b2lkKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX2VuY191cGRhdGVfcXVhbGl0eSAoR3N0RmxhY0VuYyAqIGZsYWNlbmMsCi0gICAgZ2ludCBxdWFsaXR5KTsKLXN0YXRpYyB2b2lkIGdzdF9mbGFjX2VuY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZmxhY19lbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgRkxBQ19fU3RyZWFtRW5jb2RlcldyaXRlU3RhdHVzCi1nc3RfZmxhY19lbmNfd3JpdGVfY2FsbGJhY2sgKGNvbnN0IEZMQUNfX1N0cmVhbUVuY29kZXIgKiBlbmNvZGVyLAotICAgIGNvbnN0IEZMQUNfX2J5dGUgYnVmZmVyW10sIHNpemVfdCBieXRlcywKLSAgICB1bnNpZ25lZCBzYW1wbGVzLCB1bnNpZ25lZCBjdXJyZW50X2ZyYW1lLCB2b2lkICpjbGllbnRfZGF0YSk7Ci1zdGF0aWMgRkxBQ19fU3RyZWFtRW5jb2RlclNlZWtTdGF0dXMKLWdzdF9mbGFjX2VuY19zZWVrX2NhbGxiYWNrIChjb25zdCBGTEFDX19TdHJlYW1FbmNvZGVyICogZW5jb2RlciwKLSAgICBGTEFDX191aW50NjQgYWJzb2x1dGVfYnl0ZV9vZmZzZXQsIHZvaWQgKmNsaWVudF9kYXRhKTsKLXN0YXRpYyBGTEFDX19TdHJlYW1FbmNvZGVyVGVsbFN0YXR1cwotZ3N0X2ZsYWNfZW5jX3RlbGxfY2FsbGJhY2sgKGNvbnN0IEZMQUNfX1N0cmVhbUVuY29kZXIgKiBlbmNvZGVyLAotICAgIEZMQUNfX3VpbnQ2NCAqIGFic29sdXRlX2J5dGVfb2Zmc2V0LCB2b2lkICpjbGllbnRfZGF0YSk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdib29sZWFuIGV4aGF1c3RpdmVfbW9kZWxfc2VhcmNoOwotICBnYm9vbGVhbiBlc2NhcGVfY29kaW5nOwotICBnYm9vbGVhbiBtaWRfc2lkZTsKLSAgZ2Jvb2xlYW4gbG9vc2VfbWlkX3NpZGU7Ci0gIGd1aW50IHFscF9jb2VmZl9wcmVjaXNpb247Ci0gIGdib29sZWFuIHFscF9jb2VmZl9wcmVjX3NlYXJjaDsKLSAgZ3VpbnQgbWluX3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlcjsKLSAgZ3VpbnQgbWF4X3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlcjsKLSAgZ3VpbnQgcmljZV9wYXJhbWV0ZXJfc2VhcmNoX2Rpc3Q7Ci0gIGd1aW50IG1heF9scGNfb3JkZXI7Ci0gIGd1aW50IGJsb2Nrc2l6ZTsKLX0KLUdzdEZsYWNFbmNQYXJhbXM7Ci0KLXN0YXRpYyBjb25zdCBHc3RGbGFjRW5jUGFyYW1zIGZsYWNlbmNfcGFyYW1zW10gPSB7Ci0gIHtGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgMCwgRkFMU0UsIDIsIDIsIDAsIDAsIDExNTJ9LAotICB7RkFMU0UsIEZBTFNFLCBUUlVFLCBUUlVFLCAwLCBGQUxTRSwgMiwgMiwgMCwgMCwgMTE1Mn0sCi0gIHtGQUxTRSwgRkFMU0UsIFRSVUUsIEZBTFNFLCAwLCBGQUxTRSwgMCwgMywgMCwgMCwgMTE1Mn0sCi0gIHtGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgMCwgRkFMU0UsIDMsIDMsIDAsIDYsIDQ2MDh9LAotICB7RkFMU0UsIEZBTFNFLCBUUlVFLCBUUlVFLCAwLCBGQUxTRSwgMywgMywgMCwgOCwgNDYwOH0sCi0gIHtGQUxTRSwgRkFMU0UsIFRSVUUsIEZBTFNFLCAwLCBGQUxTRSwgMywgMywgMCwgOCwgNDYwOH0sCi0gIHtGQUxTRSwgRkFMU0UsIFRSVUUsIEZBTFNFLCAwLCBGQUxTRSwgMCwgNCwgMCwgOCwgNDYwOH0sCi0gIHtUUlVFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIDAsIEZBTFNFLCAwLCA2LCAwLCA4LCA0NjA4fSwKLSAge1RSVUUsIEZBTFNFLCBUUlVFLCBGQUxTRSwgMCwgRkFMU0UsIDAsIDYsIDAsIDEyLCA0NjA4fSwKLSAge1RSVUUsIFRSVUUsIFRSVUUsIEZBTFNFLCAwLCBGQUxTRSwgMCwgMTYsIDAsIDMyLCA0NjA4fSwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9RVUFMSVRZIDUKLSNkZWZpbmUgREVGQVVMVF9QQURESU5HIDAKLSNkZWZpbmUgREVGQVVMVF9TRUVLUE9JTlRTIC0xMAotCi0jZGVmaW5lIEdTVF9UWVBFX0ZMQUNfRU5DX1FVQUxJVFkgKGdzdF9mbGFjX2VuY19xdWFsaXR5X2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfZmxhY19lbmNfcXVhbGl0eV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHF0eXBlID0gMDsKLQotICBpZiAocXR5cGUgPT0gMCkgewotICAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgICAgezAsICIwIC0gRmFzdGVzdCBjb21wcmVzc2lvbiIsICIwIn0sCi0gICAgICB7MSwgIjEiLCAiMSJ9LAotICAgICAgezIsICIyIiwgIjIifSwKLSAgICAgIHszLCAiMyIsICIzIn0sCi0gICAgICB7NCwgIjQiLCAiNCJ9LAotICAgICAgezUsICI1IC0gRGVmYXVsdCIsICI1In0sCi0gICAgICB7NiwgIjYiLCAiNiJ9LAotICAgICAgezcsICI3IiwgIjcifSwKLSAgICAgIHs4LCAiOCAtIEhpZ2hlc3QgY29tcHJlc3Npb24iLCAiOCJ9LAotICAgICAgezksICI5IC0gSW5zYW5lIiwgIjkifSwKLSAgICAgIHswLCBOVUxMLCBOVUxMfQotICAgIH07Ci0KLSAgICBxdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGbGFjRW5jUXVhbGl0eSIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIHF0eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfZW5jX2NsYXNzX2luaXQgKEdzdEZsYWNFbmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QXVkaW9FbmNvZGVyQ2xhc3MgKmJhc2VfY2xhc3M7Ci0gIEdzdENhcHMgKnNpbmtfY2FwczsKLSAgR3N0UGFkVGVtcGxhdGUgKnNpbmtfdGVtcGw7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBiYXNlX2NsYXNzID0gKEdzdEF1ZGlvRW5jb2RlckNsYXNzICopIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGZsYWNlbmNfZGVidWcsICJmbGFjZW5jIiwgMCwKLSAgICAgICJGbGFjIGVuY29kaW5nIGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZmxhY19lbmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZmxhY19lbmNfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9mbGFjX2VuY19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1FVQUxJVFksCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInF1YWxpdHkiLAotICAgICAgICAgICJRdWFsaXR5IiwKLSAgICAgICAgICAiU3BlZWQgdmVyc3VzIGNvbXByZXNzaW9uIHRyYWRlb2ZmIiwKLSAgICAgICAgICBHU1RfVFlQRV9GTEFDX0VOQ19RVUFMSVRZLCBERUZBVUxUX1FVQUxJVFksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIFBST1BfU1RSRUFNQUJMRV9TVUJTRVQsIGdfcGFyYW1fc3BlY19ib29sZWFuICgic3RyZWFtYWJsZS1zdWJzZXQiLAotICAgICAgICAgICJTdHJlYW1hYmxlIHN1YnNldCIsCi0gICAgICAgICAgInRydWUgdG8gbGltaXQgZW5jb2RlciB0byBnZW5lcmF0aW5nIGEgU3Vic2V0IHN0cmVhbSwgZWxzZSBmYWxzZSIsCi0gICAgICAgICAgVFJVRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX01JRF9TSURFX1NURVJFTywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibWlkLXNpZGUtc3RlcmVvIiwgIkRvIG1pZCBzaWRlIHN0ZXJlbyIsCi0gICAgICAgICAgIkRvIG1pZCBzaWRlIHN0ZXJlbyAob25seSBmb3Igc3RlcmVvIGlucHV0KSIsCi0gICAgICAgICAgZmxhY2VuY19wYXJhbXNbREVGQVVMVF9RVUFMSVRZXS5taWRfc2lkZSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9MT09TRV9NSURfU0lERV9TVEVSRU8sIGdfcGFyYW1fc3BlY19ib29sZWFuICgibG9vc2UtbWlkLXNpZGUtc3RlcmVvIiwKLSAgICAgICAgICAiTG9vc2UgbWlkIHNpZGUgc3RlcmVvIiwgIkxvb3NlIG1pZCBzaWRlIHN0ZXJlbyIsCi0gICAgICAgICAgZmxhY2VuY19wYXJhbXNbREVGQVVMVF9RVUFMSVRZXS5sb29zZV9taWRfc2lkZSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0JMT0NLU0laRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiYmxvY2tzaXplIiwgIkJsb2Nrc2l6ZSIsICJCbG9ja3NpemUgaW4gc2FtcGxlcyIsCi0gICAgICAgICAgRkxBQ19fTUlOX0JMT0NLX1NJWkUsIEZMQUNfX01BWF9CTE9DS19TSVpFLAotICAgICAgICAgIGZsYWNlbmNfcGFyYW1zW0RFRkFVTFRfUVVBTElUWV0uYmxvY2tzaXplLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfTUFYX0xQQ19PUkRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LWxwYy1vcmRlciIsICJNYXggTFBDIG9yZGVyIiwKLSAgICAgICAgICAiTWF4IExQQyBvcmRlcjsgMCA9PiB1c2Ugb25seSBmaXhlZCBwcmVkaWN0b3JzIiwgMCwKLSAgICAgICAgICBGTEFDX19NQVhfTFBDX09SREVSLCBmbGFjZW5jX3BhcmFtc1tERUZBVUxUX1FVQUxJVFldLm1heF9scGNfb3JkZXIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIFBST1BfUUxQX0NPRUZGX1BSRUNJU0lPTiwgZ19wYXJhbV9zcGVjX3VpbnQgKCJxbHAtY29lZmYtcHJlY2lzaW9uIiwKLSAgICAgICAgICAiUUxQIGNvZWZmaWNpZW50cyBwcmVjaXNpb24iLAotICAgICAgICAgICJQcmVjaXNpb24gaW4gYml0cyBvZiBxdWFudGl6ZWQgbGluZWFyLXByZWRpY3RvciBjb2VmZmljaWVudHM7IDAgPSBhdXRvbWF0aWMiLAotICAgICAgICAgIDAsIDMyLCBmbGFjZW5jX3BhcmFtc1tERUZBVUxUX1FVQUxJVFldLnFscF9jb2VmZl9wcmVjaXNpb24sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIFBST1BfUUxQX0NPRUZGX1BSRUNfU0VBUkNILCBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInFscC1jb2VmZi1wcmVjLXNlYXJjaCIsCi0gICAgICAgICAgIkRvIFFMUCBjb2VmZmljaWVudHMgcHJlY2lzaW9uIHNlYXJjaCIsCi0gICAgICAgICAgImZhbHNlID0gdXNlIHFscF9jb2VmZl9wcmVjaXNpb24sICIKLSAgICAgICAgICAidHJ1ZSA9IHNlYXJjaCBhcm91bmQgcWxwX2NvZWZmX3ByZWNpc2lvbiwgdGFrZSBiZXN0IiwKLSAgICAgICAgICBmbGFjZW5jX3BhcmFtc1tERUZBVUxUX1FVQUxJVFldLnFscF9jb2VmZl9wcmVjX3NlYXJjaCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0VTQ0FQRV9DT0RJTkcsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImVzY2FwZS1jb2RpbmciLCAiRG8gRXNjYXBlIGNvZGluZyIsCi0gICAgICAgICAgInNlYXJjaCBmb3IgZXNjYXBlIGNvZGVzIGluIHRoZSBlbnRyb3B5IGNvZGluZyBzdGFnZSAiCi0gICAgICAgICAgImZvciBzbGlnaHRseSBiZXR0ZXIgY29tcHJlc3Npb24iLAotICAgICAgICAgIGZsYWNlbmNfcGFyYW1zW0RFRkFVTFRfUVVBTElUWV0uZXNjYXBlX2NvZGluZywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9FWEhBVVNUSVZFX01PREVMX1NFQVJDSCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZXhoYXVzdGl2ZS1tb2RlbC1zZWFyY2giLAotICAgICAgICAgICJEbyBleGhhdXN0aXZlIG1vZGVsIHNlYXJjaCIsCi0gICAgICAgICAgImRvIGV4aGF1c3RpdmUgc2VhcmNoIG9mIExQIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiAoZXhwZW5zaXZlISkiLAotICAgICAgICAgIGZsYWNlbmNfcGFyYW1zW0RFRkFVTFRfUVVBTElUWV0uZXhoYXVzdGl2ZV9tb2RlbF9zZWFyY2gsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIFBST1BfTUlOX1JFU0lEVUFMX1BBUlRJVElPTl9PUkRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWluLXJlc2lkdWFsLXBhcnRpdGlvbi1vcmRlciIsCi0gICAgICAgICAgIk1pbiByZXNpZHVhbCBwYXJ0aXRpb24gb3JkZXIiLAotICAgICAgICAgICJNaW4gcmVzaWR1YWwgcGFydGl0aW9uIG9yZGVyIChhYm92ZSA0IGRvZXNuJ3QgdXN1YWxseSBoZWxwIG11Y2gpIiwgMCwKLSAgICAgICAgICAxNiwgZmxhY2VuY19wYXJhbXNbREVGQVVMVF9RVUFMSVRZXS5taW5fcmVzaWR1YWxfcGFydGl0aW9uX29yZGVyLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX01BWF9SRVNJRFVBTF9QQVJUSVRJT05fT1JERVIsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1yZXNpZHVhbC1wYXJ0aXRpb24tb3JkZXIiLAotICAgICAgICAgICJNYXggcmVzaWR1YWwgcGFydGl0aW9uIG9yZGVyIiwKLSAgICAgICAgICAiTWF4IHJlc2lkdWFsIHBhcnRpdGlvbiBvcmRlciAoYWJvdmUgNCBkb2Vzbid0IHVzdWFsbHkgaGVscCBtdWNoKSIsIDAsCi0gICAgICAgICAgMTYsIGZsYWNlbmNfcGFyYW1zW0RFRkFVTFRfUVVBTElUWV0ubWF4X3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlciwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9SSUNFX1BBUkFNRVRFUl9TRUFSQ0hfRElTVCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgicmljZS1wYXJhbWV0ZXItc2VhcmNoLWRpc3QiLAotICAgICAgICAgICJyaWNlX3BhcmFtZXRlcl9zZWFyY2hfZGlzdCIsCi0gICAgICAgICAgIjAgPSB0cnkgb25seSBjYWxjJ2QgcGFyYW1ldGVyIGs7IGVsc2UgdHJ5IGFsbCBbay1kaXN0Li5rK2Rpc3RdICIKLSAgICAgICAgICAicGFyYW1ldGVycywgdXNlIGJlc3QiLCAwLCBGTEFDX19NQVhfUklDRV9QQVJUSVRJT05fT1JERVIsCi0gICAgICAgICAgZmxhY2VuY19wYXJhbXNbREVGQVVMVF9RVUFMSVRZXS5yaWNlX3BhcmFtZXRlcl9zZWFyY2hfZGlzdCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9QQURESU5HLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJwYWRkaW5nIiwKLSAgICAgICAgICAiUGFkZGluZyIsCi0gICAgICAgICAgIldyaXRlIGEgUEFERElORyBibG9jayB3aXRoIHRoaXMgbGVuZ3RoIGluIGJ5dGVzIiwgMCwgR19NQVhVSU5ULAotICAgICAgICAgIERFRkFVTFRfUEFERElORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9TRUVLUE9JTlRTLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNlZWtwb2ludHMiLAotICAgICAgICAgICJTZWVrcG9pbnRzIiwKLSAgICAgICAgICAiQWRkIFNFRUtUQUJMRSBtZXRhZGF0YSAoaWYgPiAwLCBudW1iZXIgb2YgZW50cmllcywgaWYgPCAwLCBpbnRlcnZhbCBpbiBzZWMpIiwKLSAgICAgICAgICAtR19NQVhJTlQsIEdfTUFYSU5ULAotICAgICAgICAgIERFRkFVTFRfU0VFS1BPSU5UUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX2ZhY3RvcnkpOwotCi0gIHNpbmtfY2FwcyA9IGdzdF9mbGFjX2VuY19nZW5lcmF0ZV9zaW5rX2NhcHMgKCk7Ci0gIHNpbmtfdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNpbmsiLAotICAgICAgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgc2lua19jYXBzKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgc2lua190ZW1wbCk7Ci0gIGdzdF9jYXBzX3VucmVmIChzaW5rX2NhcHMpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJGTEFDIGF1ZGlvIGVuY29kZXIiLAotICAgICAgIkNvZGVjL0VuY29kZXIvQXVkaW8iLAotICAgICAgIkVuY29kZXMgYXVkaW8gd2l0aCB0aGUgRkxBQyBsb3NzbGVzcyBhdWRpbyBlbmNvZGVyIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPiIpOwotCi0gIGJhc2VfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX2VuY19zdGFydCk7Ci0gIGJhc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfZW5jX3N0b3ApOwotICBiYXNlX2NsYXNzLT5zZXRfZm9ybWF0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX2VuY19zZXRfZm9ybWF0KTsKLSAgYmFzZV9jbGFzcy0+aGFuZGxlX2ZyYW1lID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX2VuY19oYW5kbGVfZnJhbWUpOwotICBiYXNlX2NsYXNzLT5nZXRjYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX2VuY19nZXRjYXBzKTsKLSAgYmFzZV9jbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmxhY19lbmNfc2lua19ldmVudCk7Ci0gIGJhc2VfY2xhc3MtPnNpbmtfcXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfZW5jX3NpbmtfcXVlcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfZW5jX2luaXQgKEdzdEZsYWNFbmMgKiBmbGFjZW5jKQotewotICBHc3RBdWRpb0VuY29kZXIgKmVuYyA9IEdTVF9BVURJT19FTkNPREVSIChmbGFjZW5jKTsKLQotICBmbGFjZW5jLT5lbmNvZGVyID0gRkxBQ19fc3RyZWFtX2VuY29kZXJfbmV3ICgpOwotICBnc3RfZmxhY19lbmNfdXBkYXRlX3F1YWxpdHkgKGZsYWNlbmMsIERFRkFVTFRfUVVBTElUWSk7Ci0KLSAgLyogYXJyYW5nZSBncmFudWxlcG9zIG1hcmtpbmcgKGFuZCByZXF1aXJlZCBwZXJmZWN0IHRzKSAqLwotICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfbWFya19ncmFudWxlIChlbmMsIFRSVUUpOwotICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfcGVyZmVjdF90aW1lc3RhbXAgKGVuYywgVFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmxhY19lbmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEZsYWNFbmMgKmZsYWNlbmMgPSBHU1RfRkxBQ19FTkMgKG9iamVjdCk7Ci0KLSAgRkxBQ19fc3RyZWFtX2VuY29kZXJfZGVsZXRlIChmbGFjZW5jLT5lbmNvZGVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfZW5jX3N0YXJ0IChHc3RBdWRpb0VuY29kZXIgKiBlbmMpCi17Ci0gIEdzdEZsYWNFbmMgKmZsYWNlbmMgPSBHU1RfRkxBQ19FTkMgKGVuYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAic3RhcnQiKTsKLSAgZmxhY2VuYy0+c3RvcHBlZCA9IFRSVUU7Ci0gIGZsYWNlbmMtPmdvdF9oZWFkZXJzID0gRkFMU0U7Ci0gIGZsYWNlbmMtPmxhc3RfZmxvdyA9IEdTVF9GTE9XX09LOwotICBmbGFjZW5jLT5vZmZzZXQgPSAwOwotICBmbGFjZW5jLT5lb3MgPSBGQUxTRTsKLSAgZmxhY2VuYy0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGZsYWNlbmMtPnRvYyA9IE5VTEw7Ci0gIGZsYWNlbmMtPnNhbXBsZXNfaW4gPSAwOwotICBmbGFjZW5jLT5zYW1wbGVzX291dCA9IDA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfZW5jX3N0b3AgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYykKLXsKLSAgR3N0RmxhY0VuYyAqZmxhY2VuYyA9IEdTVF9GTEFDX0VOQyAoZW5jKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJzdG9wIik7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAoZmxhY2VuYy0+dGFncyk7Ci0gIGZsYWNlbmMtPnRhZ3MgPSBOVUxMOwotICBpZiAoZmxhY2VuYy0+dG9jKQotICAgIGdzdF90b2NfdW5yZWYgKGZsYWNlbmMtPnRvYyk7Ci0gIGZsYWNlbmMtPnRvYyA9IE5VTEw7Ci0gIGlmIChGTEFDX19zdHJlYW1fZW5jb2Rlcl9nZXRfc3RhdGUgKGZsYWNlbmMtPmVuY29kZXIpICE9Ci0gICAgICBGTEFDX19TVFJFQU1fRU5DT0RFUl9VTklOSVRJQUxJWkVEKSB7Ci0gICAgZmxhY2VuYy0+c3RvcHBlZCA9IFRSVUU7Ci0gICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfZmluaXNoIChmbGFjZW5jLT5lbmNvZGVyKTsKLSAgfQotICBpZiAoZmxhY2VuYy0+bWV0YSkgewotICAgIEZMQUNfX21ldGFkYXRhX29iamVjdF9kZWxldGUgKGZsYWNlbmMtPm1ldGFbMF0pOwotCi0gICAgaWYgKGZsYWNlbmMtPm1ldGFbMV0pCi0gICAgICBGTEFDX19tZXRhZGF0YV9vYmplY3RfZGVsZXRlIChmbGFjZW5jLT5tZXRhWzFdKTsKLQotICAgIGlmIChmbGFjZW5jLT5tZXRhWzJdKQotICAgICAgRkxBQ19fbWV0YWRhdGFfb2JqZWN0X2RlbGV0ZSAoZmxhY2VuYy0+bWV0YVsyXSk7Ci0KLSAgICBpZiAoZmxhY2VuYy0+bWV0YVszXSkKLSAgICAgIEZMQUNfX21ldGFkYXRhX29iamVjdF9kZWxldGUgKGZsYWNlbmMtPm1ldGFbM10pOwotCi0gICAgZ19mcmVlIChmbGFjZW5jLT5tZXRhKTsKLSAgICBmbGFjZW5jLT5tZXRhID0gTlVMTDsKLSAgfQotICBnX2xpc3RfZm9yZWFjaCAoZmxhY2VuYy0+aGVhZGVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoZmxhY2VuYy0+aGVhZGVycyk7Ci0gIGZsYWNlbmMtPmhlYWRlcnMgPSBOVUxMOwotCi0gIGdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MgKEdTVF9UQUdfU0VUVEVSIChlbmMpKTsKLSAgZ3N0X3RvY19zZXR0ZXJfcmVzZXQgKEdTVF9UT0NfU0VUVEVSIChlbmMpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWFkZF9vbmVfdGFnIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0xpc3QgKmNvbW1lbnRzOwotICBHTGlzdCAqaXQ7Ci0gIEdzdEZsYWNFbmMgKmZsYWNlbmMgPSBHU1RfRkxBQ19FTkMgKHVzZXJfZGF0YSk7Ci0KLSAgLyogSU1BR0UgYW5kIFBSRVZJRVdfSU1BR0UgdGFncyBhcmUgYWxyZWFkeSB3cml0dGVuCi0gICAqIGRpZmZlcmVudGx5LCBubyBuZWVkIHRvIHN0b3JlIHRoZW0gaW5zaWRlIHRoZQotICAgKiB2b3JiaXNjb21tZW50cyB0b28gKi8KLSAgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0lNQUdFKSA9PSAwCi0gICAgICB8fCBzdHJjbXAgKHRhZywgR1NUX1RBR19QUkVWSUVXX0lNQUdFKSA9PSAwKQotICAgIHJldHVybjsKLQotICBjb21tZW50cyA9IGdzdF90YWdfdG9fdm9yYmlzX2NvbW1lbnRzIChsaXN0LCB0YWcpOwotICBmb3IgKGl0ID0gY29tbWVudHM7IGl0ICE9IE5VTEw7IGl0ID0gaXQtPm5leHQpIHsKLSAgICBGTEFDX19TdHJlYW1NZXRhZGF0YV9Wb3JiaXNDb21tZW50X0VudHJ5IGNvbW1tZW50X2VudHJ5OwotCi0gICAgY29tbW1lbnRfZW50cnkubGVuZ3RoID0gc3RybGVuIChpdC0+ZGF0YSk7Ci0gICAgY29tbW1lbnRfZW50cnkuZW50cnkgPSBpdC0+ZGF0YTsKLSAgICBGTEFDX19tZXRhZGF0YV9vYmplY3Rfdm9yYmlzY29tbWVudF9pbnNlcnRfY29tbWVudCAoZmxhY2VuYy0+bWV0YVswXSwKLSAgICAgICAgZmxhY2VuYy0+bWV0YVswXS0+ZGF0YS52b3JiaXNfY29tbWVudC5udW1fY29tbWVudHMsCi0gICAgICAgIGNvbW1tZW50X2VudHJ5LCBUUlVFKTsKLSAgICBnX2ZyZWUgKGl0LT5kYXRhKTsKLSAgfQotICBnX2xpc3RfZnJlZSAoY29tbWVudHMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWFkZF9jdWVzaGVldCAoY29uc3QgR3N0VG9jICogdG9jLCBndWludCBzYW1wbGVfcmF0ZSwKLSAgICBGTEFDX19TdHJlYW1NZXRhZGF0YSAqIGN1ZXNoZWV0KQotewotICBnaW50OCB0cmFja19udW0gPSAwOwotICBnaW50NjQgc3RhcnQsIHN0b3A7Ci0gIGdjaGFyICppc3JjID0gTlVMTDsKLSAgY29uc3QgZ2NoYXIgKmlzX2xlZ2FsOwotICBHTGlzdCAqbGlzdDsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgR3N0VG9jRW50cnkgKmVudHJ5LCAqc3ViZW50cnkgPSBOVUxMOwotICBGTEFDX19TdHJlYW1NZXRhZGF0YV9DdWVTaGVldCAqY3M7Ci0gIEZMQUNfX1N0cmVhbU1ldGFkYXRhX0N1ZVNoZWV0X1RyYWNrICp0cmFjazsKLQotICBjcyA9ICZjdWVzaGVldC0+ZGF0YS5jdWVfc2hlZXQ7Ci0gIGlmICghY3MpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGNoZWNrIGlmIHRoZSBUT0MgZW50cmllcyBpcyB2YWxpZCAqLwotICBsaXN0ID0gZ3N0X3RvY19nZXRfZW50cmllcyAodG9jKTsKLSAgZW50cnkgPSBsaXN0LT5kYXRhOwotICBpZiAoZ3N0X3RvY19lbnRyeV9pc19hbHRlcm5hdGl2ZSAoZW50cnkpKSB7Ci0gICAgbGlzdCA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzIChlbnRyeSk7Ci0gICAgd2hpbGUgKGxpc3QpIHsKLSAgICAgIHN1YmVudHJ5ID0gbGlzdC0+ZGF0YTsKLSAgICAgIGlmICghZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAoc3ViZW50cnkpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOwotICAgIH0KLSAgICBsaXN0ID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVudHJ5KTsKLSAgfQotICBpZiAoZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAoZW50cnkpKSB7Ci0gICAgd2hpbGUgKGxpc3QpIHsKLSAgICAgIGVudHJ5ID0gbGlzdC0+ZGF0YTsKLSAgICAgIGlmICghZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAoZW50cnkpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOwotICAgIH0KLSAgICBsaXN0ID0gZ3N0X3RvY19nZXRfZW50cmllcyAodG9jKTsKLSAgfQotCi0gIC8qIGFkZCB0cmFja3MgaW4gY3Vlc2hlZXQgKi8KLSAgd2hpbGUgKGxpc3QpIHsKLSAgICBlbnRyeSA9IGxpc3QtPmRhdGE7Ci0gICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyAoZW50cnksICZzdGFydCwgJnN0b3ApOwotICAgIHRhZ3MgPSBnc3RfdG9jX2VudHJ5X2dldF90YWdzIChlbnRyeSk7Ci0gICAgaWYgKHRhZ3MpCi0gICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19JU1JDLCAmaXNyYyk7Ci0gICAgdHJhY2sgPSBGTEFDX19tZXRhZGF0YV9vYmplY3RfY3Vlc2hlZXRfdHJhY2tfbmV3ICgpOwotICAgIHRyYWNrLT5vZmZzZXQgPQotICAgICAgICAoRkxBQ19fdWludDY0KSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKHN0YXJ0LCBzYW1wbGVfcmF0ZSwKLSAgICAgICAgR1NUX1NFQ09ORCk7Ci0gICAgdHJhY2stPm51bWJlciA9IChGTEFDX19ieXRlKSB0cmFja19udW0gKyAxOwotICAgIGlmIChpc3JjICE9IE5VTEwgJiYgc3RybGVuIChpc3JjKSA8PSAxMikKLSAgICAgIGdfc3RybGNweSAodHJhY2stPmlzcmMsIGlzcmMsIDEzKTsKLSAgICBpZiAodHJhY2stPm51bWJlciA8PSAwKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmICghRkxBQ19fbWV0YWRhdGFfb2JqZWN0X2N1ZXNoZWV0X2luc2VydF90cmFjayAoY3Vlc2hlZXQsIHRyYWNrX251bSwKLSAgICAgICAgICAgIHRyYWNrLCBGQUxTRSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKCFGTEFDX19tZXRhZGF0YV9vYmplY3RfY3Vlc2hlZXRfdHJhY2tfaW5zZXJ0X2JsYW5rX2luZGV4IChjdWVzaGVldCwKLSAgICAgICAgICAgIHRyYWNrX251bSwgMCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgdHJhY2tfbnVtKys7Ci0gICAgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KTsKLSAgfQotCi0gIGlmIChjcy0+bnVtX3RyYWNrcyA8PSAwKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBhZGQgbGVhZC1vdXQgdHJhY2sgaW4gY3Vlc2hlZXQgKi8KLSAgdHJhY2sgPSBGTEFDX19tZXRhZGF0YV9vYmplY3RfY3Vlc2hlZXRfdHJhY2tfbmV3ICgpOwotICB0cmFjay0+b2Zmc2V0ID0KLSAgICAgIChGTEFDX191aW50NjQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoc3RvcCwgc2FtcGxlX3JhdGUsCi0gICAgICBHU1RfU0VDT05EKTsKLSAgdHJhY2stPm51bWJlciA9IDI1NTsKLSAgaWYgKCFGTEFDX19tZXRhZGF0YV9vYmplY3RfY3Vlc2hlZXRfaW5zZXJ0X3RyYWNrIChjdWVzaGVldCwgY3MtPm51bV90cmFja3MsCi0gICAgICAgICAgdHJhY2ssIEZBTFNFKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogY2hlY2sgaWYgdGhlIGN1ZXNoZWV0IGlzIHZhbGlkICovCi0gIGlmICghRkxBQ19fbWV0YWRhdGFfb2JqZWN0X2N1ZXNoZWV0X2lzX2xlZ2FsIChjdWVzaGVldCwgRkFMU0UsICZpc19sZWdhbCkpIHsKLSAgICBnX3dhcm5pbmcgKCIlc1xuIiwgaXNfbGVnYWwpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfZW5jX3NldF9tZXRhZGF0YSAoR3N0RmxhY0VuYyAqIGZsYWNlbmMsIEdzdEF1ZGlvSW5mbyAqIGluZm8sCi0gICAgZ3VpbnQ2NCB0b3RhbF9zYW1wbGVzKQotewotICBjb25zdCBHc3RUYWdMaXN0ICp1c2VyX3RhZ3M7Ci0gIEdzdFRhZ0xpc3QgKmNvcHk7Ci0gIGdpbnQgZW50cmllcyA9IDE7Ci0gIGdpbnQgbl9pbWFnZXMsIG5fcHJldmlld19pbWFnZXM7Ci0gIEZMQUNfX1N0cmVhbU1ldGFkYXRhICpjdWVzaGVldDsKLQotICBnX3JldHVybl9pZl9mYWlsIChmbGFjZW5jICE9IE5VTEwpOwotCi0gIHVzZXJfdGFncyA9IGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAoR1NUX1RBR19TRVRURVIgKGZsYWNlbmMpKTsKLSAgaWYgKChmbGFjZW5jLT50YWdzID09IE5VTEwpICYmICh1c2VyX3RhZ3MgPT0gTlVMTCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgY29weSA9IGdzdF90YWdfbGlzdF9tZXJnZSAodXNlcl90YWdzLCBmbGFjZW5jLT50YWdzLAotICAgICAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChHU1RfVEFHX1NFVFRFUiAoZmxhY2VuYykpKTsKLSAgbl9pbWFnZXMgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChjb3B5LCBHU1RfVEFHX0lNQUdFKTsKLSAgbl9wcmV2aWV3X2ltYWdlcyA9IGdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKGNvcHksIEdTVF9UQUdfUFJFVklFV19JTUFHRSk7Ci0KLSAgZmxhY2VuYy0+bWV0YSA9Ci0gICAgICBnX25ldzAgKEZMQUNfX1N0cmVhbU1ldGFkYXRhICosIDQgKyBuX2ltYWdlcyArIG5fcHJldmlld19pbWFnZXMpOwotCi0gIGZsYWNlbmMtPm1ldGFbMF0gPQotICAgICAgRkxBQ19fbWV0YWRhdGFfb2JqZWN0X25ldyAoRkxBQ19fTUVUQURBVEFfVFlQRV9WT1JCSVNfQ09NTUVOVCk7Ci0gIGdzdF90YWdfbGlzdF9mb3JlYWNoIChjb3B5LCBhZGRfb25lX3RhZywgZmxhY2VuYyk7Ci0KLSAgaWYgKCFmbGFjZW5jLT50b2MpCi0gICAgZmxhY2VuYy0+dG9jID0gZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYyAoR1NUX1RPQ19TRVRURVIgKGZsYWNlbmMpKTsKLQotICBpZiAoZmxhY2VuYy0+dG9jKSB7Ci0gICAgY3Vlc2hlZXQgPSBGTEFDX19tZXRhZGF0YV9vYmplY3RfbmV3IChGTEFDX19NRVRBREFUQV9UWVBFX0NVRVNIRUVUKTsKLSAgICBpZiAoYWRkX2N1ZXNoZWV0IChmbGFjZW5jLT50b2MsIEdTVF9BVURJT19JTkZPX1JBVEUgKGluZm8pLCBjdWVzaGVldCkpIHsKLSAgICAgIGZsYWNlbmMtPm1ldGFbZW50cmllc10gPSBjdWVzaGVldDsKLSAgICAgIGVudHJpZXMrKzsKLSAgICB9IGVsc2UgewotICAgICAgRkxBQ19fbWV0YWRhdGFfb2JqZWN0X2RlbGV0ZSAoY3Vlc2hlZXQpOwotICAgICAgZmxhY2VuYy0+bWV0YVtlbnRyaWVzXSA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG5faW1hZ2VzICsgbl9wcmV2aWV3X2ltYWdlcyA+IDApIHsKLSAgICBHc3RTYW1wbGUgKnNhbXBsZTsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICAgIEdzdFRhZ0ltYWdlVHlwZSBpbWFnZV90eXBlID0gR1NUX1RBR19JTUFHRV9UWVBFX05PTkU7Ci0gICAgZ2ludCBpOwotICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG5faW1hZ2VzICsgbl9wcmV2aWV3X2ltYWdlczsgaSsrKSB7Ci0gICAgICBpZiAoaSA8IG5faW1hZ2VzKSB7Ci0gICAgICAgIGlmICghZ3N0X3RhZ19saXN0X2dldF9zYW1wbGVfaW5kZXggKGNvcHksIEdTVF9UQUdfSU1BR0UsIGksICZzYW1wbGUpKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X3NhbXBsZV9pbmRleCAoY29weSwgR1NUX1RBR19QUkVWSUVXX0lNQUdFLAotICAgICAgICAgICAgICAgIGkgLSBuX2ltYWdlcywgJnNhbXBsZSkpCi0gICAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9zYW1wbGVfZ2V0X2luZm8gKHNhbXBsZSk7Ci0gICAgICBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyAoc2FtcGxlKTsKLSAgICAgIGlmICghY2FwcykgewotICAgICAgICBHU1RfRklYTUVfT0JKRUNUIChmbGFjZW5jLCAiSW1hZ2UgdGFnIHdpdGhvdXQgY2FwcyIpOwotICAgICAgICBnc3Rfc2FtcGxlX3VucmVmIChzYW1wbGUpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgZmxhY2VuYy0+bWV0YVtlbnRyaWVzXSA9Ci0gICAgICAgICAgRkxBQ19fbWV0YWRhdGFfb2JqZWN0X25ldyAoRkxBQ19fTUVUQURBVEFfVFlQRV9QSUNUVVJFKTsKLQotICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQgKHN0cnVjdHVyZSwgImltYWdlLXR5cGUiLCBHU1RfVFlQRV9UQUdfSU1BR0VfVFlQRSwKLSAgICAgICAgICAgICZpbWFnZV90eXBlLCBOVUxMKTsKLSAgICAgIGVsc2UKLSAgICAgICAgaW1hZ2VfdHlwZSA9IEdTVF9UQUdfSU1BR0VfVFlQRV9OT05FOwotCi0gICAgICAvKiBDb252ZXJ0IHRvIElEM3YyIEFQSUMgaW1hZ2UgdHlwZSAqLwotICAgICAgaWYgKGltYWdlX3R5cGUgPT0gR1NUX1RBR19JTUFHRV9UWVBFX05PTkUpCi0gICAgICAgIGltYWdlX3R5cGUgPSAoaSA8IG5faW1hZ2VzKSA/IDB4MDAgOiAweDAxOwotICAgICAgZWxzZQotICAgICAgICBpbWFnZV90eXBlID0gaW1hZ2VfdHlwZSArIDI7Ci0KLSAgICAgIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoc2FtcGxlKTsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBGTEFDX19tZXRhZGF0YV9vYmplY3RfcGljdHVyZV9zZXRfZGF0YSAoZmxhY2VuYy0+bWV0YVtlbnRyaWVzXSwKLSAgICAgICAgICBtYXAuZGF0YSwgbWFwLnNpemUsIFRSVUUpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICAgICAgLyogRklYTUU6IFRoZXJlJ3Mgbm8gd2F5IHRvIHNldCB0aGUgcGljdHVyZSB0eXBlIGluIGxpYkZMQUMgKi8KLSAgICAgIGZsYWNlbmMtPm1ldGFbZW50cmllc10tPmRhdGEucGljdHVyZS50eXBlID0gaW1hZ2VfdHlwZTsKLQotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgICAgIEZMQUNfX21ldGFkYXRhX29iamVjdF9waWN0dXJlX3NldF9taW1lX3R5cGUgKGZsYWNlbmMtPm1ldGFbZW50cmllc10sCi0gICAgICAgICAgKGNoYXIgKikgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSwgVFJVRSk7Ci0KLSAgICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0gICAgICBlbnRyaWVzKys7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGZsYWNlbmMtPnNlZWtwb2ludHMgJiYgdG90YWxfc2FtcGxlcyAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgZ2Jvb2xlYW4gcmVzOwotICAgIGd1aW50IHNhbXBsZXM7Ci0KLSAgICBmbGFjZW5jLT5tZXRhW2VudHJpZXNdID0KLSAgICAgICAgRkxBQ19fbWV0YWRhdGFfb2JqZWN0X25ldyAoRkxBQ19fTUVUQURBVEFfVFlQRV9TRUVLVEFCTEUpOwotICAgIGlmIChmbGFjZW5jLT5zZWVrcG9pbnRzID4gMCkgewotICAgICAgcmVzID0KLSAgICAgICAgICBGTEFDX19tZXRhZGF0YV9vYmplY3Rfc2Vla3RhYmxlX3RlbXBsYXRlX2FwcGVuZF9zcGFjZWRfcG9pbnRzCi0gICAgICAgICAgKGZsYWNlbmMtPm1ldGFbZW50cmllc10sIGZsYWNlbmMtPnNlZWtwb2ludHMsIHRvdGFsX3NhbXBsZXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzYW1wbGVzID0gLWZsYWNlbmMtPnNlZWtwb2ludHMgKiBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKTsKLSAgICAgIHJlcyA9Ci0gICAgICAgICAgRkxBQ19fbWV0YWRhdGFfb2JqZWN0X3NlZWt0YWJsZV90ZW1wbGF0ZV9hcHBlbmRfc3BhY2VkX3BvaW50c19ieV9zYW1wbGVzCi0gICAgICAgICAgKGZsYWNlbmMtPm1ldGFbZW50cmllc10sIHNhbXBsZXMsIHRvdGFsX3NhbXBsZXMpOwotICAgIH0KLSAgICBpZiAoIXJlcykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2VuYywgImFkZGluZyBzZWVrcG9pbnQgdGVtcGxhdGUgJWQgZmFpbGVkIiwKLSAgICAgICAgICBmbGFjZW5jLT5zZWVrcG9pbnRzKTsKLSAgICAgIEZMQUNfX21ldGFkYXRhX29iamVjdF9kZWxldGUgKGZsYWNlbmMtPm1ldGFbMV0pOwotICAgICAgZmxhY2VuYy0+bWV0YVtlbnRyaWVzXSA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVudHJpZXMrKzsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoZmxhY2VuYy0+c2Vla3BvaW50cyAmJiB0b3RhbF9zYW1wbGVzID09IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZsYWNlbmMsICJ0b3RhbCB0aW1lIHVua25vd247IGNhbiBub3QgYWRkIHNlZWtwb2ludHMiKTsKLSAgfQotCi0gIGlmIChmbGFjZW5jLT5wYWRkaW5nID4gMCkgewotICAgIGZsYWNlbmMtPm1ldGFbZW50cmllc10gPQotICAgICAgICBGTEFDX19tZXRhZGF0YV9vYmplY3RfbmV3IChGTEFDX19NRVRBREFUQV9UWVBFX1BBRERJTkcpOwotICAgIGZsYWNlbmMtPm1ldGFbZW50cmllc10tPmxlbmd0aCA9IGZsYWNlbmMtPnBhZGRpbmc7Ci0gICAgZW50cmllcysrOwotICB9Ci0KLSAgaWYgKEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF9tZXRhZGF0YSAoZmxhY2VuYy0+ZW5jb2RlciwKLSAgICAgICAgICBmbGFjZW5jLT5tZXRhLCBlbnRyaWVzKSAhPSB0cnVlKQotICAgIGdfd2FybmluZyAoIkR1ZGUsIGknbSBhbHJlYWR5IGluaXRpYWxpemVkISIpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAoY29weSk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9mbGFjX2VuY19nZW5lcmF0ZV9zaW5rX2NhcHMgKHZvaWQpCi17Ci0gIEdzdENhcHMgKnJldDsKLSAgZ2ludCBpOwotICBHVmFsdWUgdl9saXN0ID0geyAwLCB9OwotICBHVmFsdWUgdiA9IHsgMCwgfTsKLSAgR3N0U3RydWN0dXJlICpzLCAqczI7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdl9saXN0LCBHU1RfVFlQRV9MSVNUKTsKLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1NUUklORyk7Ci0KLSAgLyogVXNlIHN5c3RlbSdzIGVuZGlhbm5lc3MgKi8KLSAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnYsICJTOCIpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2X2xpc3QsICZ2KTsKLSAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnYsIEdTVF9BVURJT19ORSAoUzE2KSk7Ci0gIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZfbGlzdCwgJnYpOwotICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdiwgR1NUX0FVRElPX05FIChTMjQpKTsKLSAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdl9saXN0LCAmdik7Ci0gIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZ2LCBHU1RfQVVESU9fTkUgKFMyNF8zMikpOwotICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2X2xpc3QsICZ2KTsKLSAgZ192YWx1ZV91bnNldCAoJnYpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImF1ZGlvL3gtcmF3Iik7Ci0gIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAocywgImZvcm1hdCIsICZ2X2xpc3QpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwKLSAgICAgICJyYXRlIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCA2NTUzNTAsIE5VTEwpOwotCi0gIHJldCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgczIgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHMpOwotICBnc3Rfc3RydWN0dXJlX3NldCAoczIsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChyZXQsIHMyKTsKLSAgZm9yIChpID0gMjsgaSA8PSA4OyBpKyspIHsKLSAgICBndWludDY0IGNoYW5uZWxfbWFzazsKLQotICAgIHMyID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzKTsKLSAgICBnc3RfYXVkaW9fY2hhbm5lbF9wb3NpdGlvbnNfdG9fbWFzayAoY2hhbm5lbF9wb3NpdGlvbnNbaSAtIDFdLCBpLAotICAgICAgICBGQUxTRSwgJmNoYW5uZWxfbWFzayk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMyLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBpLCAiY2hhbm5lbC1tYXNrIiwKLSAgICAgICAgR1NUX1RZUEVfQklUTUFTSywgY2hhbm5lbF9tYXNrLCBOVUxMKTsKLQotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKHJldCwgczIpOwotICB9Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2ZsYWNfZW5jX2dldGNhcHMgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmV0ID0gTlVMTCwgKmNhcHMgPSBOVUxMOwotICBHc3RQYWQgKnBhZDsKLQotICBwYWQgPSBHU1RfQVVESU9fRU5DT0RFUl9TSU5LX1BBRCAoZW5jKTsKLQotICByZXQgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gIGlmIChyZXQgPT0gTlVMTCkgewotICAgIHJldCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUmV0dXJuIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgY2FwcyA9IGdzdF9hdWRpb19lbmNvZGVyX3Byb3h5X2dldGNhcHMgKGVuYywgcmV0LCBmaWx0ZXIpOwotICBnc3RfY2Fwc191bnJlZiAocmV0KTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIGd1aW50NjQKLWdzdF9mbGFjX2VuY19wZWVyX3F1ZXJ5X3RvdGFsX3NhbXBsZXMgKEdzdEZsYWNFbmMgKiBmbGFjZW5jLCBHc3RQYWQgKiBwYWQpCi17Ci0gIGdpbnQ2NCBkdXJhdGlvbjsKLSAgR3N0QXVkaW9JbmZvICppbmZvID0KLSAgICAgIGdzdF9hdWRpb19lbmNvZGVyX2dldF9hdWRpb19pbmZvIChHU1RfQVVESU9fRU5DT0RFUiAoZmxhY2VuYykpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNlbmMsICJxdWVyeWluZyBwZWVyIGZvciBERUZBVUxUIGZvcm1hdCBkdXJhdGlvbiIpOwotICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChwYWQsIEdTVF9GT1JNQVRfREVGQVVMVCwgJmR1cmF0aW9uKQotICAgICAgJiYgZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2VuYywgInF1ZXJ5aW5nIHBlZXIgZm9yIFRJTUUgZm9ybWF0IGR1cmF0aW9uIik7Ci0KLSAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAocGFkLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikKLSAgICAgICYmIGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjZW5jLCAicGVlciByZXBvcnRlZCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0gICAgZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9UT19GUkFNRVMgKGR1cmF0aW9uLCBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKSk7Ci0KLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChmbGFjZW5jLCAiVXBzdHJlYW0gcmVwb3J0ZWQgbm8gdG90YWwgc2FtcGxlcyIpOwotICByZXR1cm4gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotZG9uZToKLSAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2VuYywKLSAgICAgICJVcHN0cmVhbSByZXBvcnRlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgdG90YWwgc2FtcGxlcyIsIGR1cmF0aW9uKTsKLQotICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfZW5jX3NldF9mb3JtYXQgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0RmxhY0VuYyAqZmxhY2VuYzsKLSAgZ3VpbnQ2NCB0b3RhbF9zYW1wbGVzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgRkxBQ19fU3RyZWFtRW5jb2RlckluaXRTdGF0dXMgaW5pdF9zdGF0dXM7Ci0KLSAgZmxhY2VuYyA9IEdTVF9GTEFDX0VOQyAoZW5jKTsKLQotICAvKiBpZiBjb25maWd1cmVkIGFnYWluLCBtZWFucyBzb21ldGhpbmcgY2hhbmdlZCwgY2FuJ3QgaGFuZGxlIHRoYXQgKi8KLSAgaWYgKEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9zdGF0ZSAoZmxhY2VuYy0+ZW5jb2RlcikgIT0KLSAgICAgIEZMQUNfX1NUUkVBTV9FTkNPREVSX1VOSU5JVElBTElaRUQpCi0gICAgZ290byBlbmNvZGVyX2FscmVhZHlfaW5pdGlhbGl6ZWQ7Ci0KLSAgLyogZGVsYXkgc2V0dGluZyBvdXRwdXQgY2Fwcy9mb3JtYXQgdW50aWwgd2UgaGF2ZSBhbGwgaGVhZGVycyAqLwotCi0gIGdzdF9hdWRpb19nZXRfY2hhbm5lbF9yZW9yZGVyX21hcCAoR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGluZm8pLAotICAgICAgY2hhbm5lbF9wb3NpdGlvbnNbR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGluZm8pIC0gMV0sIGluZm8tPnBvc2l0aW9uLAotICAgICAgZmxhY2VuYy0+Y2hhbm5lbF9yZW9yZGVyX21hcCk7Ci0KLSAgdG90YWxfc2FtcGxlcyA9IGdzdF9mbGFjX2VuY19wZWVyX3F1ZXJ5X3RvdGFsX3NhbXBsZXMgKGZsYWNlbmMsCi0gICAgICBHU1RfQVVESU9fRU5DT0RFUl9TSU5LX1BBRCAoZW5jKSk7Ci0KLSAgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X2JpdHNfcGVyX3NhbXBsZSAoZmxhY2VuYy0+ZW5jb2RlciwKLSAgICAgIEdTVF9BVURJT19JTkZPX0RFUFRIIChpbmZvKSk7Ci0gIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF9zYW1wbGVfcmF0ZSAoZmxhY2VuYy0+ZW5jb2RlciwKLSAgICAgIEdTVF9BVURJT19JTkZPX1JBVEUgKGluZm8pKTsKLSAgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X2NoYW5uZWxzIChmbGFjZW5jLT5lbmNvZGVyLAotICAgICAgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGluZm8pKTsKLQotICBpZiAodG90YWxfc2FtcGxlcyAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF90b3RhbF9zYW1wbGVzX2VzdGltYXRlIChmbGFjZW5jLT5lbmNvZGVyLAotICAgICAgICBNSU4gKHRvdGFsX3NhbXBsZXMsIEdfR1VJTlQ2NF9DT05TVEFOVCAoMHgwRkZGRkZGRkZGKSkpOwotCi0gIGdzdF9mbGFjX2VuY19zZXRfbWV0YWRhdGEgKGZsYWNlbmMsIGluZm8sIHRvdGFsX3NhbXBsZXMpOwotCi0gIC8qIGNhbGxiYWNrcyBjbGVhciB0byBnbyBub3c7Ci0gICAqIHdyaXRlIGNhbGxiYWNrcyByZWNlaXZlcyBoZWFkZXJzIGR1cmluZyBpbml0ICovCi0gIGZsYWNlbmMtPnN0b3BwZWQgPSBGQUxTRTsKLQotICBpbml0X3N0YXR1cyA9IEZMQUNfX3N0cmVhbV9lbmNvZGVyX2luaXRfc3RyZWFtIChmbGFjZW5jLT5lbmNvZGVyLAotICAgICAgZ3N0X2ZsYWNfZW5jX3dyaXRlX2NhbGxiYWNrLCBnc3RfZmxhY19lbmNfc2Vla19jYWxsYmFjaywKLSAgICAgIGdzdF9mbGFjX2VuY190ZWxsX2NhbGxiYWNrLCBOVUxMLCBmbGFjZW5jKTsKLSAgaWYgKGluaXRfc3RhdHVzICE9IEZMQUNfX1NUUkVBTV9FTkNPREVSX0lOSVRfU1RBVFVTX09LKQotICAgIGdvdG8gZmFpbGVkX3RvX2luaXRpYWxpemU7Ci0KLSAgLyogbm8gc3BlY2lhbCBmZWVkYmFjayB0byBiYXNlIGNsYXNzOyBzaG91bGQgcHJvdmlkZSBhbGwgYXZhaWxhYmxlIHNhbXBsZXMgKi8KLQotICByZXR1cm4gVFJVRTsKLQotZW5jb2Rlcl9hbHJlYWR5X2luaXRpYWxpemVkOgotICB7Ci0gICAgZ193YXJuaW5nICgiZmxhYyBhbHJlYWR5IGluaXRpYWxpemVkIC0tIGZpeG1lIGFsbG93IHRoaXMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWZhaWxlZF90b19pbml0aWFsaXplOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGZsYWNlbmMsIExJQlJBUlksIElOSVQsIChOVUxMKSwKLSAgICAgICAgKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSBlbmNvZGVyICh3cm9uZyBwYXJhbWV0ZXJzPykgJWQiLCBpbml0X3N0YXR1cykpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX2VuY191cGRhdGVfcXVhbGl0eSAoR3N0RmxhY0VuYyAqIGZsYWNlbmMsIGdpbnQgcXVhbGl0eSkKLXsKLSAgR3N0QXVkaW9JbmZvICppbmZvID0KLSAgICAgIGdzdF9hdWRpb19lbmNvZGVyX2dldF9hdWRpb19pbmZvIChHU1RfQVVESU9fRU5DT0RFUiAoZmxhY2VuYykpOwotCi0gIGZsYWNlbmMtPnF1YWxpdHkgPSBxdWFsaXR5OwotCi0jZGVmaW5lIERPX1VQREFURShuYW1lLCB2YWwsIHN0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChGTEFDX19zdHJlYW1fZW5jb2Rlcl9nZXRfIyNuYW1lIChmbGFjZW5jLT5lbmNvZGVyKSAhPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZsYWNlbmNfcGFyYW1zW3F1YWxpdHldLnZhbCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF8jI25hbWUgKGZsYWNlbmMtPmVuY29kZXIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGZsYWNlbmNfcGFyYW1zW3F1YWxpdHldLnZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChmbGFjZW5jKSwgc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IEdfU1RNVF9FTkQKLQotICBnX29iamVjdF9mcmVlemVfbm90aWZ5IChHX09CSkVDVCAoZmxhY2VuYykpOwotCi0gIGlmIChHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbykgPT0gMgotICAgICAgfHwgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGluZm8pID09IDApIHsKLSAgICBET19VUERBVEUgKGRvX21pZF9zaWRlX3N0ZXJlbywgbWlkX3NpZGUsICJtaWRfc2lkZV9zdGVyZW8iKTsKLSAgICBET19VUERBVEUgKGxvb3NlX21pZF9zaWRlX3N0ZXJlbywgbG9vc2VfbWlkX3NpZGUsICJsb29zZV9taWRfc2lkZSIpOwotICB9Ci0KLSAgRE9fVVBEQVRFIChibG9ja3NpemUsIGJsb2Nrc2l6ZSwgImJsb2Nrc2l6ZSIpOwotICBET19VUERBVEUgKG1heF9scGNfb3JkZXIsIG1heF9scGNfb3JkZXIsICJtYXhfbHBjX29yZGVyIik7Ci0gIERPX1VQREFURSAocWxwX2NvZWZmX3ByZWNpc2lvbiwgcWxwX2NvZWZmX3ByZWNpc2lvbiwgInFscF9jb2VmZl9wcmVjaXNpb24iKTsKLSAgRE9fVVBEQVRFIChkb19xbHBfY29lZmZfcHJlY19zZWFyY2gsIHFscF9jb2VmZl9wcmVjX3NlYXJjaCwKLSAgICAgICJxbHBfY29lZmZfcHJlY19zZWFyY2giKTsKLSAgRE9fVVBEQVRFIChkb19lc2NhcGVfY29kaW5nLCBlc2NhcGVfY29kaW5nLCAiZXNjYXBlX2NvZGluZyIpOwotICBET19VUERBVEUgKGRvX2V4aGF1c3RpdmVfbW9kZWxfc2VhcmNoLCBleGhhdXN0aXZlX21vZGVsX3NlYXJjaCwKLSAgICAgICJleGhhdXN0aXZlX21vZGVsX3NlYXJjaCIpOwotICBET19VUERBVEUgKG1pbl9yZXNpZHVhbF9wYXJ0aXRpb25fb3JkZXIsIG1pbl9yZXNpZHVhbF9wYXJ0aXRpb25fb3JkZXIsCi0gICAgICAibWluX3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlciIpOwotICBET19VUERBVEUgKG1heF9yZXNpZHVhbF9wYXJ0aXRpb25fb3JkZXIsIG1heF9yZXNpZHVhbF9wYXJ0aXRpb25fb3JkZXIsCi0gICAgICAibWF4X3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlciIpOwotICBET19VUERBVEUgKHJpY2VfcGFyYW1ldGVyX3NlYXJjaF9kaXN0LCByaWNlX3BhcmFtZXRlcl9zZWFyY2hfZGlzdCwKLSAgICAgICJyaWNlX3BhcmFtZXRlcl9zZWFyY2hfZGlzdCIpOwotCi0jdW5kZWYgRE9fVVBEQVRFCi0KLSAgZ19vYmplY3RfdGhhd19ub3RpZnkgKEdfT0JKRUNUIChmbGFjZW5jKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBGTEFDX19TdHJlYW1FbmNvZGVyU2Vla1N0YXR1cwotZ3N0X2ZsYWNfZW5jX3NlZWtfY2FsbGJhY2sgKGNvbnN0IEZMQUNfX1N0cmVhbUVuY29kZXIgKiBlbmNvZGVyLAotICAgIEZMQUNfX3VpbnQ2NCBhYnNvbHV0ZV9ieXRlX29mZnNldCwgdm9pZCAqY2xpZW50X2RhdGEpCi17Ci0gIEdzdEZsYWNFbmMgKmZsYWNlbmM7Ci0gIEdzdFBhZCAqcGVlcnBhZDsKLSAgR3N0U2VnbWVudCBzZWc7Ci0KLSAgZmxhY2VuYyA9IEdTVF9GTEFDX0VOQyAoY2xpZW50X2RhdGEpOwotCi0gIGlmIChmbGFjZW5jLT5zdG9wcGVkKQotICAgIHJldHVybiBGTEFDX19TVFJFQU1fRU5DT0RFUl9TRUVLX1NUQVRVU19PSzsKLQotICBpZiAoKHBlZXJwYWQgPSBnc3RfcGFkX2dldF9wZWVyIChHU1RfQVVESU9fRU5DT0RFUl9TUkNfUEFEIChmbGFjZW5jKSkpKSB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotICAgIGdib29sZWFuIHJldDsKLSAgICBHc3RRdWVyeSAqcXVlcnk7Ci0gICAgZ2Jvb2xlYW4gc2Vla2FibGUgPSBGQUxTRTsKLQotICAgIC8qIHRyeSB0byBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dCAqLwotICAgIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKTsKLSAgICBpZiAoZ3N0X3BhZF9xdWVyeSAocGVlcnBhZCwgcXVlcnkpKSB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmb3JtYXQsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfQllURVMpCi0gICAgICAgIHNlZWthYmxlID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChmbGFjZW5jLCAiU0VFS0lORyBxdWVyeSBub3QgaGFuZGxlZCIpOwotICAgIH0KLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICAgIGlmICghc2Vla2FibGUpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNlbmMsICJkb3duc3RyZWFtIG5vdCBzZWVrYWJsZTsgbm90IHJld3JpdGluZyIpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcnBhZCk7Ci0gICAgICByZXR1cm4gRkxBQ19fU1RSRUFNX0VOQ09ERVJfU0VFS19TVEFUVVNfVU5TVVBQT1JURUQ7Ci0gICAgfQotCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZywgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgc2VnLnN0YXJ0ID0gYWJzb2x1dGVfYnl0ZV9vZmZzZXQ7Ci0gICAgc2VnLnN0b3AgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgIHNlZy50aW1lID0gMDsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZyk7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3NlbmRfZXZlbnQgKHBlZXJwYWQsIGV2ZW50KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVycGFkKTsKLQotICAgIGlmIChyZXQpIHsKLSAgICAgIEdTVF9ERUJVRyAoIlNlZWsgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCAiICVzIiwKLSAgICAgICAgICAoZ3VpbnQ2NCkgYWJzb2x1dGVfYnl0ZV9vZmZzZXQsICJzdWNjZWVkZWQiKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHICgiU2VlayB0byAlIiBHX0dVSU5UNjRfRk9STUFUICIgJXMiLAotICAgICAgICAgIChndWludDY0KSBhYnNvbHV0ZV9ieXRlX29mZnNldCwgImZhaWxlZCIpOwotICAgICAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1NFRUtfU1RBVFVTX1VOU1VQUE9SVEVEOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUcgKCJTZWVrIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBmYWlsZWQgKG5vIHBlZXIgcGFkKSIsCi0gICAgICAgIChndWludDY0KSBhYnNvbHV0ZV9ieXRlX29mZnNldCk7Ci0gIH0KLQotICBmbGFjZW5jLT5vZmZzZXQgPSBhYnNvbHV0ZV9ieXRlX29mZnNldDsKLSAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1NFRUtfU1RBVFVTX09LOwotfQotCi1zdGF0aWMgdm9pZAotbm90Z3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9idWZmZXIgKEdWYWx1ZSAqIGFycmF5X3ZhbCwgR3N0QnVmZmVyICogYnVmKQotewotICBHVmFsdWUgdmFsdWUgPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0JVRkZFUik7Ci0gIC8qIGNvcHkgYnVmZmVyIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggY2lyY3VsYXIgcmVmY291bnRzICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfY29weSAoYnVmKTsKLSAgLyogYWdhaW4sIGZvciBnb29kIG1lYXN1cmUgKi8KLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLSAgZ3N0X3ZhbHVlX3NldF9idWZmZXIgKCZ2YWx1ZSwgYnVmKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoYXJyYXlfdmFsLCAmdmFsdWUpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotfQotCi0jZGVmaW5lIEhEUl9UWVBFX1NUUkVBTUlORk8gICAgIDAKLSNkZWZpbmUgSERSX1RZUEVfVk9SQklTQ09NTUVOVCAgNAotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ZsYWNfZW5jX3Byb2Nlc3Nfc3RyZWFtX2hlYWRlcnMgKEdzdEZsYWNFbmMgKiBlbmMpCi17Ci0gIEdzdEJ1ZmZlciAqdm9yYmlzY29tbWVudCA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqc3RyZWFtaW5mbyA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqbWFya2VyID0gTlVMTDsKLSAgR1ZhbHVlIGFycmF5ID0geyAwLCB9OwotICBHc3RDYXBzICpjYXBzOwotICBHTGlzdCAqbDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0QXVkaW9JbmZvICppbmZvID0KLSAgICAgIGdzdF9hdWRpb19lbmNvZGVyX2dldF9hdWRpb19pbmZvIChHU1RfQVVESU9fRU5DT0RFUiAoZW5jKSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWZsYWMiLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGluZm8pLAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKSwgTlVMTCk7Ci0KLSAgZm9yIChsID0gZW5jLT5oZWFkZXJzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ3VpbnQ4ICpkYXRhOwotICAgIGdzaXplIHNpemU7Ci0KLSAgICAvKiBtYXJrIGJ1ZmZlcnMgc28gb2dnbXV4IHdpbGwgaWdub3JlIHRoZW0gaWYgaXQgYWxyZWFkeSBtdXhlZCB0aGUKLSAgICAgKiBoZWFkZXIgYnVmZmVycyBmcm9tIHRoZSBzdHJlYW1oZWFkZXJzIGZpZWxkIGluIHRoZSBjYXBzICovCi0gICAgbC0+ZGF0YSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoR1NUX0JVRkZFUl9DQVNUIChsLT5kYXRhKSk7Ci0KLSAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKGwtPmRhdGEpOwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0hFQURFUik7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGRhdGEgPSBtYXAuZGF0YTsKLSAgICBzaXplID0gbWFwLnNpemU7Ci0KLSAgICAvKiBmaW5kIGluaXRpYWwgNC1ieXRlIG1hcmtlciB3aGljaCB3ZSBuZWVkIHRvIHNraXAgbGF0ZXIgb24gKi8KLSAgICBpZiAoc2l6ZSA9PSA0ICYmIG1lbWNtcCAoZGF0YSwgImZMYUMiLCA0KSA9PSAwKSB7Ci0gICAgICBtYXJrZXIgPSBidWY7Ci0gICAgfSBlbHNlIGlmIChzaXplID4gMSAmJiAoZGF0YVswXSAmIDB4N2YpID09IEhEUl9UWVBFX1NUUkVBTUlORk8pIHsKLSAgICAgIHN0cmVhbWluZm8gPSBidWY7Ci0gICAgfSBlbHNlIGlmIChzaXplID4gMSAmJiAoZGF0YVswXSAmIDB4N2YpID09IEhEUl9UWVBFX1ZPUkJJU0NPTU1FTlQpIHsKLSAgICAgIHZvcmJpc2NvbW1lbnQgPSBidWY7Ci0gICAgfQotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgfQotCi0gIGlmIChtYXJrZXIgPT0gTlVMTCB8fCBzdHJlYW1pbmZvID09IE5VTEwgfHwgdm9yYmlzY29tbWVudCA9PSBOVUxMKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmMsICJtaXNzaW5nIGhlYWRlciAlcCAlcCAlcCwgbXV4aW5nIGludG8gY29udGFpbmVyICIKLSAgICAgICAgImZvcm1hdHMgbWF5IGJlIGJyb2tlbiIsIG1hcmtlciwgc3RyZWFtaW5mbywgdm9yYmlzY29tbWVudCk7Ci0gICAgZ290byBwdXNoX2hlYWRlcnM7Ci0gIH0KLQotICBnX3ZhbHVlX2luaXQgKCZhcnJheSwgR1NUX1RZUEVfQVJSQVkpOwotCi0gIC8qIGFkZCBtYXJrZXIgaW5jbHVkaW5nIFNUUkVBTUlORk8gaGVhZGVyICovCi0gIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICBndWludDE2IG51bTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBndWludDggKmJkYXRhOwotICAgIGdzaXplIHNsZW47Ci0KLSAgICAvKiBtaW51cyBvbmUgZm9yIHRoZSBtYXJrZXIgdGhhdCBpcyBtZXJnZWQgd2l0aCBzdHJlYW1pbmZvIGhlcmUgKi8KLSAgICBudW0gPSBnX2xpc3RfbGVuZ3RoIChlbmMtPmhlYWRlcnMpIC0gMTsKLQotICAgIHNsZW4gPSBnc3RfYnVmZmVyX2dldF9zaXplIChzdHJlYW1pbmZvKTsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEzICsgc2xlbik7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBiZGF0YSA9IG1hcC5kYXRhOwotICAgIGJkYXRhWzBdID0gMHg3ZjsKLSAgICBtZW1jcHkgKGJkYXRhICsgMSwgIkZMQUMiLCA0KTsKLSAgICBiZGF0YVs1XSA9IDB4MDE7ICAgICAgICAgICAgLyogbWFwcGluZyB2ZXJzaW9uIG1ham9yICovCi0gICAgYmRhdGFbNl0gPSAweDAwOyAgICAgICAgICAgIC8qIG1hcHBpbmcgdmVyc2lvbiBtaW5vciAqLwotICAgIGJkYXRhWzddID0gKG51bSAmIDB4RkYwMCkgPj4gODsKLSAgICBiZGF0YVs4XSA9IChudW0gJiAweDAwRkYpID4+IDA7Ci0gICAgbWVtY3B5IChiZGF0YSArIDksICJmTGFDIiwgNCk7Ci0gICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChzdHJlYW1pbmZvLCAwLCBiZGF0YSArIDEzLCBzbGVuKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gICAgbm90Z3N0X3ZhbHVlX2FycmF5X2FwcGVuZF9idWZmZXIgKCZhcnJheSwgYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci0KLSAgLyogYWRkIFZPUkJJU0NPTU1FTlQgaGVhZGVyICovCi0gIG5vdGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfYnVmZmVyICgmYXJyYXksIHZvcmJpc2NvbW1lbnQpOwotCi0gIC8qIGFkZCBvdGhlciBoZWFkZXJzLCBpZiB0aGVyZSBhcmUgYW55ICovCi0gIGZvciAobCA9IGVuYy0+aGVhZGVyczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gR1NUX0JVRkZFUl9DQVNUIChsLT5kYXRhKTsKLQotICAgIGlmIChidWYgIT0gbWFya2VyICYmIGJ1ZiAhPSBzdHJlYW1pbmZvICYmIGJ1ZiAhPSB2b3JiaXNjb21tZW50KSB7Ci0gICAgICBub3Rnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX2J1ZmZlciAoJmFycmF5LCBidWYpOwotICAgIH0KLSAgfQotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKSwKLSAgICAgICJzdHJlYW1oZWFkZXIiLCAmYXJyYXkpOwotICBnX3ZhbHVlX3Vuc2V0ICgmYXJyYXkpOwotCi1wdXNoX2hlYWRlcnM6Ci0gIGdzdF9hdWRpb19lbmNvZGVyX3NldF9vdXRwdXRfZm9ybWF0IChHU1RfQVVESU9fRU5DT0RFUiAoZW5jKSwgY2Fwcyk7Ci0KLSAgZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X2hlYWRlcnMgKEdTVF9BVURJT19FTkNPREVSIChlbmMpLCBlbmMtPmhlYWRlcnMpOwotICBlbmMtPmhlYWRlcnMgPSBOVUxMOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgRkxBQ19fU3RyZWFtRW5jb2RlcldyaXRlU3RhdHVzCi1nc3RfZmxhY19lbmNfd3JpdGVfY2FsbGJhY2sgKGNvbnN0IEZMQUNfX1N0cmVhbUVuY29kZXIgKiBlbmNvZGVyLAotICAgIGNvbnN0IEZMQUNfX2J5dGUgYnVmZmVyW10sIHNpemVfdCBieXRlcywKLSAgICB1bnNpZ25lZCBzYW1wbGVzLCB1bnNpZ25lZCBjdXJyZW50X2ZyYW1lLCB2b2lkICpjbGllbnRfZGF0YSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0RmxhY0VuYyAqZmxhY2VuYzsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLQotICBmbGFjZW5jID0gR1NUX0ZMQUNfRU5DIChjbGllbnRfZGF0YSk7Ci0KLSAgaWYgKGZsYWNlbmMtPnN0b3BwZWQpCi0gICAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1dSSVRFX1NUQVRVU19PSzsKLQotICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGJ5dGVzKTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChvdXRidWYsIDAsIGJ1ZmZlciwgYnl0ZXMpOwotCi0gIC8qIHdlIGFzc3VtZSBsaWJmbGFjIHBhc3NlcyB1cyBzdHVmZiBuZWF0bHkgZnJhbWVkICovCi0gIGlmICghZmxhY2VuYy0+Z290X2hlYWRlcnMpIHsKLSAgICBpZiAoc2FtcGxlcyA9PSAwKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjZW5jLCAiR290IGhlYWRlciwgcXVldWVpbmcgKCV1IGJ5dGVzKSIsCi0gICAgICAgICAgKGd1aW50KSBieXRlcyk7Ci0gICAgICBmbGFjZW5jLT5oZWFkZXJzID0gZ19saXN0X2FwcGVuZCAoZmxhY2VuYy0+aGVhZGVycywgb3V0YnVmKTsKLSAgICAgIC8qIG5vdGU6IGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgaW5jcmVhc2Ugb3VyIGJ5dGUgb2Zmc2V0ICovCi0gICAgICBnb3RvIG91dDsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChmbGFjZW5jLCAiTm9uLWhlYWRlciBwYWNrZXQsIHdlIGhhdmUgYWxsIGhlYWRlcnMgbm93Iik7Ci0gICAgICByZXQgPSBnc3RfZmxhY19lbmNfcHJvY2Vzc19zdHJlYW1faGVhZGVycyAoZmxhY2VuYyk7Ci0gICAgICBmbGFjZW5jLT5nb3RfaGVhZGVycyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGZsYWNlbmMtPmdvdF9oZWFkZXJzICYmIHNhbXBsZXMgPT0gMCkgewotICAgIC8qIGhlYWRlciBmaXh1cCwgcHVzaCBkb3duc3RyZWFtIGRpcmVjdGx5ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2VuYywgIkZpeGluZyB1cCBoZWFkZXJzIGF0IHBvcz0lIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIsIHNpemU9JXUiLCBmbGFjZW5jLT5vZmZzZXQsIChndWludCkgYnl0ZXMpOwotI2lmIDAKLSAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKGZsYWNlbmMsICJQcmVzdW1lZCBoZWFkZXIgZnJhZ21lbnQiLAotICAgICAgICBHU1RfQlVGRkVSX0RBVEEgKG91dGJ1ZiksIEdTVF9CVUZGRVJfU0laRSAob3V0YnVmKSk7Ci0jZW5kaWYKLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKEdTVF9BVURJT19FTkNPREVSX1NSQ19QQUQgKGZsYWNlbmMpLCBvdXRidWYpOwotICB9IGVsc2UgewotICAgIC8qIHJlZ3VsYXIgZnJhbWUgZGF0YSwgcGFzcyB0byBiYXNlIGNsYXNzICovCi0gICAgaWYgKGZsYWNlbmMtPmVvcyAmJiBmbGFjZW5jLT5zYW1wbGVzX2luID09IGZsYWNlbmMtPnNhbXBsZXNfb3V0ICsgc2FtcGxlcykgewotICAgICAgLyogSWYgZW5jb2RpbmcgcGFydCBvZiBhIGZyYW1lLCBhbmQgd2UgaGF2ZSBubyBzZXQgc3RvcCB0aW1lIG9uCi0gICAgICAgKiB0aGUgb3V0cHV0IHNlZ21lbnQsIHdlIHVwZGF0ZSB0aGUgc2VnbWVudCBzdG9wIHRpbWUgdG8gcmVmbGVjdAotICAgICAgICogdGhlIGxhc3Qgc2FtcGxlLiBUaGlzIHdpbGwgbGV0IG9nZ211eCBzZXQgdGhlIGxhc3QgcGFnZSdzCi0gICAgICAgKiBncmFucG9zIHRvIHRlbGwgYSBkZWNvZGVyIHRoZSBkdW1teSBzYW1wbGVzIHNob3VsZCBiZSBjbGlwcGVkLgotICAgICAgICovCi0gICAgICBzZWdtZW50ID0gJkdTVF9BVURJT19FTkNPREVSX09VVFBVVF9TRUdNRU5UIChmbGFjZW5jKTsKLSAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNlZ21lbnQtPnN0b3ApKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNlbmMsCi0gICAgICAgICAgICAiTm8gc3RvcCB0aW1lIGFuZCBwYXJ0aWFsIGZyYW1lLCB1cGRhdGluZyBzZWdtZW50Iik7Ci0gICAgICAgIGR1cmF0aW9uID0KLSAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZmxhY2VuYy0+c2FtcGxlc19vdXQgKyBzYW1wbGVzLAotICAgICAgICAgICAgR1NUX1NFQ09ORCwKLSAgICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9zYW1wbGVfcmF0ZSAoZmxhY2VuYy0+ZW5jb2RlcikpOwotICAgICAgICBzZWdtZW50LT5zdG9wID0gc2VnbWVudC0+c3RhcnQgKyBkdXJhdGlvbjsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY2VuYywgIm5ldyBvdXRwdXQgc2VnbWVudCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgICAgICBzZWdtZW50KTsKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQVVESU9fRU5DT0RFUl9TUkNfUEFEIChmbGFjZW5jKSwKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoc2VnbWVudCkpOwotICAgICAgfQotICAgIH0KLQotICAgIEdTVF9MT0cgKCJQdXNoaW5nIGJ1ZmZlcjogc2FtcGxlcz0ldSwgc2l6ZT0ldSwgcG9zPSUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIHNhbXBsZXMsIChndWludCkgYnl0ZXMsIGZsYWNlbmMtPm9mZnNldCk7Ci0gICAgcmV0ID0gZ3N0X2F1ZGlvX2VuY29kZXJfZmluaXNoX2ZyYW1lIChHU1RfQVVESU9fRU5DT0RFUiAoZmxhY2VuYyksCi0gICAgICAgIG91dGJ1Ziwgc2FtcGxlcyk7Ci0gIH0KLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNlbmMsICJmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLQotICBmbGFjZW5jLT5sYXN0X2Zsb3cgPSByZXQ7Ci0KLW91dDoKLSAgZmxhY2VuYy0+b2Zmc2V0ICs9IGJ5dGVzOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1dSSVRFX1NUQVRVU19GQVRBTF9FUlJPUjsKLQotICByZXR1cm4gRkxBQ19fU1RSRUFNX0VOQ09ERVJfV1JJVEVfU1RBVFVTX09LOwotfQotCi1zdGF0aWMgRkxBQ19fU3RyZWFtRW5jb2RlclRlbGxTdGF0dXMKLWdzdF9mbGFjX2VuY190ZWxsX2NhbGxiYWNrIChjb25zdCBGTEFDX19TdHJlYW1FbmNvZGVyICogZW5jb2RlciwKLSAgICBGTEFDX191aW50NjQgKiBhYnNvbHV0ZV9ieXRlX29mZnNldCwgdm9pZCAqY2xpZW50X2RhdGEpCi17Ci0gIEdzdEZsYWNFbmMgKmZsYWNlbmMgPSBHU1RfRkxBQ19FTkMgKGNsaWVudF9kYXRhKTsKLQotICAqYWJzb2x1dGVfYnl0ZV9vZmZzZXQgPSBmbGFjZW5jLT5vZmZzZXQ7Ci0KLSAgcmV0dXJuIEZMQUNfX1NUUkVBTV9FTkNPREVSX1RFTExfU1RBVFVTX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX2VuY19zaW5rX2V2ZW50IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEZsYWNFbmMgKmZsYWNlbmM7Ci0gIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0gIEdzdFRvYyAqdG9jOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBmbGFjZW5jID0gR1NUX0ZMQUNfRU5DIChlbmMpOwotCi0gIEdTVF9ERUJVRyAoIlJlY2VpdmVkICVzIGV2ZW50IG9uIHNpbmtwYWQsICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgZmxhY2VuYy0+ZW9zID0gVFJVRTsKLSAgICAgIHJldCA9IEdTVF9BVURJT19FTkNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChlbmMsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKLSAgICAgIGlmIChmbGFjZW5jLT50YWdzKSB7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFnbGlzdCk7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKGZsYWNlbmMtPnRhZ3MsIHRhZ2xpc3QsCi0gICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKEdTVF9UQUdfU0VUVEVSIChmbGFjZW5jKSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICB9Ci0gICAgICByZXQgPSBHU1RfQVVESU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoZW5jLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9UT0M6Ci0gICAgICBnc3RfZXZlbnRfcGFyc2VfdG9jIChldmVudCwgJnRvYywgTlVMTCk7Ci0gICAgICBpZiAodG9jKSB7Ci0gICAgICAgIGlmIChmbGFjZW5jLT50b2MgIT0gdG9jKSB7Ci0gICAgICAgICAgaWYgKGZsYWNlbmMtPnRvYykKLSAgICAgICAgICAgIGdzdF90b2NfdW5yZWYgKGZsYWNlbmMtPnRvYyk7Ci0gICAgICAgICAgZmxhY2VuYy0+dG9jID0gdG9jOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXQgPSBHU1RfQVVESU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoZW5jLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgICAgZmxhY2VuYy0+c2FtcGxlc19pbiA9IDA7Ci0gICAgICBmbGFjZW5jLT5zYW1wbGVzX291dCA9IDA7Ci0gICAgICByZXQgPSBHU1RfQVVESU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoZW5jLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gR1NUX0FVRElPX0VOQ09ERVJfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKGVuYywgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX2VuY19zaW5rX3F1ZXJ5IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFBhZCAqcGFkID0gR1NUX0FVRElPX0VOQ09ERVJfU0lOS19QQUQgKGVuYyk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIEdTVF9ERUJVRyAoIlJlY2VpdmVkICVzIHF1ZXJ5IG9uIHNpbmtwYWQsICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpLCBxdWVyeSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQUNDRVBUX0NBUFM6ewotICAgICAgR3N0Q2FwcyAqYWNjZXB0YWJsZSwgKmNhcHM7Ci0KLSAgICAgIGFjY2VwdGFibGUgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gICAgICBpZiAoYWNjZXB0YWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGFjY2VwdGFibGUgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzIChxdWVyeSwgJmNhcHMpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksCi0gICAgICAgICAgZ3N0X2NhcHNfaXNfc3Vic2V0IChjYXBzLCBhY2NlcHRhYmxlKSk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoYWNjZXB0YWJsZSk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBHU1RfQVVESU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19xdWVyeSAoZW5jLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0jZGVmaW5lIFJFQURfSU5UMjQgR1NUX1JFQURfVUlOVDI0X0xFCi0jZWxzZQotI2RlZmluZSBSRUFEX0lOVDI0IEdTVF9SRUFEX1VJTlQyNF9CRQotI2VuZGlmCi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmxhY19lbmNfaGFuZGxlX2ZyYW1lIChHc3RBdWRpb0VuY29kZXIgKiBlbmMsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0RmxhY0VuYyAqZmxhY2VuYzsKLSAgRkxBQ19faW50MzIgKmRhdGE7Ci0gIGdpbnQgc2FtcGxlcywgd2lkdGgsIGNoYW5uZWxzOwotICBndWxvbmcgaTsKLSAgZ2ludCBqOwotICBGTEFDX19ib29sIHJlczsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdEF1ZGlvSW5mbyAqaW5mbyA9Ci0gICAgICBnc3RfYXVkaW9fZW5jb2Rlcl9nZXRfYXVkaW9faW5mbyAoR1NUX0FVRElPX0VOQ09ERVIgKGVuYykpOwotICBnaW50ICpyZW9yZGVyX21hcDsKLQotICBmbGFjZW5jID0gR1NUX0ZMQUNfRU5DIChlbmMpOwotCi0gIC8qIGJhc2UgY2xhc3MgZW5zdXJlcyBjb25maWd1cmF0aW9uICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfQVVESU9fSU5GT19XSURUSCAoaW5mbykgIT0gMCwKLSAgICAgIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEKTsKLQotICB3aWR0aCA9IEdTVF9BVURJT19JTkZPX1dJRFRIIChpbmZvKTsKLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbyk7Ci0gIHJlb3JkZXJfbWFwID0gZmxhY2VuYy0+Y2hhbm5lbF9yZW9yZGVyX21hcDsKLQotICBpZiAoR19VTkxJS0VMWSAoIWJ1ZmZlcikpIHsKLSAgICBpZiAoZmxhY2VuYy0+ZW9zKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjZW5jLCAiZmluaXNoIGVuY29kaW5nIik7Ci0gICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9maW5pc2ggKGZsYWNlbmMtPmVuY29kZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBjYW4ndCBoYW5kbGUgaW50ZXJtaXR0ZW50IGRyYWluaW5nL3Jlc3luY2luZyAqLwotICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZmxhY2VuYywgU1RSRUFNLCBGT1JNQVQsIChOVUxMKSwKLSAgICAgICAgICAoIlN0cmVhbSBkaXNjb250aW51aXR5IGRldGVjdGVkLiAiCi0gICAgICAgICAgICAgICJUaGUgb3V0cHV0IG1heSBoYXZlIHdyb25nIHRpbWVzdGFtcHMsICIKLSAgICAgICAgICAgICAgImNvbnNpZGVyIHVzaW5nIGF1ZGlvcmF0ZSB0byBoYW5kbGUgZGlzY29udGludWl0aWVzIikpOwotICAgIH0KLSAgICByZXR1cm4gZmxhY2VuYy0+bGFzdF9mbG93OwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgc2FtcGxlcyA9IG1hcC5zaXplIC8gKHdpZHRoID4+IDMpOwotCi0gIGRhdGEgPSBnX21hbGxvYyAoc2FtcGxlcyAqIHNpemVvZiAoRkxBQ19faW50MzIpKTsKLQotICBzYW1wbGVzIC89IGNoYW5uZWxzOwotICBHU1RfTE9HX09CSkVDVCAoZmxhY2VuYywgInByb2Nlc3NpbmcgJWQgc2FtcGxlcywgJWQgY2hhbm5lbHMiLCBzYW1wbGVzLAotICAgICAgY2hhbm5lbHMpOwotICBpZiAod2lkdGggPT0gOCkgewotICAgIGdpbnQ4ICppbmRhdGEgPSAoZ2ludDggKikgbWFwLmRhdGE7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxlczsgaSsrKQotICAgICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspCi0gICAgICAgIGRhdGFbaSAqIGNoYW5uZWxzICsgcmVvcmRlcl9tYXBbal1dID0KLSAgICAgICAgICAgIChGTEFDX19pbnQzMikgaW5kYXRhW2kgKiBjaGFubmVscyArIGpdOwotICB9IGVsc2UgaWYgKHdpZHRoID09IDE2KSB7Ci0gICAgZ2ludDE2ICppbmRhdGEgPSAoZ2ludDE2ICopIG1hcC5kYXRhOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXM7IGkrKykKLSAgICAgIGZvciAoaiA9IDA7IGogPCBjaGFubmVsczsgaisrKQotICAgICAgICBkYXRhW2kgKiBjaGFubmVscyArIHJlb3JkZXJfbWFwW2pdXSA9Ci0gICAgICAgICAgICAoRkxBQ19faW50MzIpIGluZGF0YVtpICogY2hhbm5lbHMgKyBqXTsKLSAgfSBlbHNlIGlmICh3aWR0aCA9PSAyNCkgewotICAgIGd1aW50OCAqaW5kYXRhID0gKGd1aW50OCAqKSBtYXAuZGF0YTsKLSAgICBndWludDMyIHZhbDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzYW1wbGVzOyBpKyspCi0gICAgICBmb3IgKGogPSAwOyBqIDwgY2hhbm5lbHM7IGorKykgewotICAgICAgICB2YWwgPSBSRUFEX0lOVDI0ICgmaW5kYXRhWzMgKiAoaSAqIGNoYW5uZWxzICsgaildKTsKLSAgICAgICAgaWYgKHZhbCAmIDB4MDA4MDAwMDApCi0gICAgICAgICAgdmFsIHw9IDB4ZmYwMDAwMDA7Ci0gICAgICAgIGRhdGFbaSAqIGNoYW5uZWxzICsgcmVvcmRlcl9tYXBbal1dID0gKEZMQUNfX2ludDMyKSB2YWw7Ci0gICAgICB9Ci0gIH0gZWxzZSBpZiAod2lkdGggPT0gMzIpIHsKLSAgICBnaW50MzIgKmluZGF0YSA9IChnaW50MzIgKikgbWFwLmRhdGE7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxlczsgaSsrKQotICAgICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspCi0gICAgICAgIGRhdGFbaSAqIGNoYW5uZWxzICsgcmVvcmRlcl9tYXBbal1dID0KLSAgICAgICAgICAgIChGTEFDX19pbnQzMikgaW5kYXRhW2kgKiBjaGFubmVscyArIGpdOwotICB9IGVsc2UgewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgcmVzID0gRkxBQ19fc3RyZWFtX2VuY29kZXJfcHJvY2Vzc19pbnRlcmxlYXZlZCAoZmxhY2VuYy0+ZW5jb2RlciwKLSAgICAgIChjb25zdCBGTEFDX19pbnQzMiAqKSBkYXRhLCBzYW1wbGVzKTsKLSAgZmxhY2VuYy0+c2FtcGxlc19pbiArPSBzYW1wbGVzOwotCi0gIGdfZnJlZSAoZGF0YSk7Ci0KLSAgaWYgKCFyZXMpIHsKLSAgICBpZiAoZmxhY2VuYy0+bGFzdF9mbG93ID09IEdTVF9GTE9XX09LKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBmbGFjZW5jLT5sYXN0X2Zsb3c7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmxhY19lbmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZsYWNFbmMgKnRoaXMgPSBHU1RfRkxBQ19FTkMgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0aGlzKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUVVBTElUWToKLSAgICAgIGdzdF9mbGFjX2VuY191cGRhdGVfcXVhbGl0eSAodGhpcywgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJFQU1BQkxFX1NVQlNFVDoKLSAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF9zdHJlYW1hYmxlX3N1YnNldCAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JRF9TSURFX1NURVJFTzoKLSAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF9kb19taWRfc2lkZV9zdGVyZW8gKHRoaXMtPmVuY29kZXIsCi0gICAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT09TRV9NSURfU0lERV9TVEVSRU86Ci0gICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfbG9vc2VfbWlkX3NpZGVfc3RlcmVvICh0aGlzLT5lbmNvZGVyLAotICAgICAgICAgIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgotICAgICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X2Jsb2Nrc2l6ZSAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9MUENfT1JERVI6Ci0gICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfbWF4X2xwY19vcmRlciAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1FMUF9DT0VGRl9QUkVDSVNJT046Ci0gICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfcWxwX2NvZWZmX3ByZWNpc2lvbiAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1FMUF9DT0VGRl9QUkVDX1NFQVJDSDoKLSAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF9kb19xbHBfY29lZmZfcHJlY19zZWFyY2ggKHRoaXMtPmVuY29kZXIsCi0gICAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FU0NBUEVfQ09ESU5HOgotICAgICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X2RvX2VzY2FwZV9jb2RpbmcgKHRoaXMtPmVuY29kZXIsCi0gICAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FWEhBVVNUSVZFX01PREVMX1NFQVJDSDoKLSAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX3NldF9kb19leGhhdXN0aXZlX21vZGVsX3NlYXJjaCAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JTl9SRVNJRFVBTF9QQVJUSVRJT05fT1JERVI6Ci0gICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfbWluX3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlciAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9SRVNJRFVBTF9QQVJUSVRJT05fT1JERVI6Ci0gICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfbWF4X3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlciAodGhpcy0+ZW5jb2RlciwKLSAgICAgICAgICBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JJQ0VfUEFSQU1FVEVSX1NFQVJDSF9ESVNUOgotICAgICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X3JpY2VfcGFyYW1ldGVyX3NlYXJjaF9kaXN0ICh0aGlzLT5lbmNvZGVyLAotICAgICAgICAgIGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEFERElORzoKLSAgICAgIHRoaXMtPnBhZGRpbmcgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VFS1BPSU5UUzoKLSAgICAgIHRoaXMtPnNlZWtwb2ludHMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAodGhpcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmxhY19lbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZsYWNFbmMgKnRoaXMgPSBHU1RfRkxBQ19FTkMgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh0aGlzKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUVVBTElUWToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCB0aGlzLT5xdWFsaXR5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJFQU1BQkxFX1NVQlNFVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLAotICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9zdHJlYW1hYmxlX3N1YnNldCAodGhpcy0+ZW5jb2RlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JRF9TSURFX1NURVJFTzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLAotICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9kb19taWRfc2lkZV9zdGVyZW8gKHRoaXMtPmVuY29kZXIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT09TRV9NSURfU0lERV9TVEVSRU86Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwKLSAgICAgICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9nZXRfbG9vc2VfbWlkX3NpZGVfc3RlcmVvICh0aGlzLT5lbmNvZGVyKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkxPQ0tTSVpFOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsCi0gICAgICAgICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfZ2V0X2Jsb2Nrc2l6ZSAodGhpcy0+ZW5jb2RlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9MUENfT1JERVI6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwKLSAgICAgICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9nZXRfbWF4X2xwY19vcmRlciAodGhpcy0+ZW5jb2RlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1FMUF9DT0VGRl9QUkVDSVNJT046Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwKLSAgICAgICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9nZXRfcWxwX2NvZWZmX3ByZWNpc2lvbiAodGhpcy0+ZW5jb2RlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1FMUF9DT0VGRl9QUkVDX1NFQVJDSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLAotICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9kb19xbHBfY29lZmZfcHJlY19zZWFyY2ggKHRoaXMtPmVuY29kZXIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FU0NBUEVfQ09ESU5HOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsCi0gICAgICAgICAgRkxBQ19fc3RyZWFtX2VuY29kZXJfZ2V0X2RvX2VzY2FwZV9jb2RpbmcgKHRoaXMtPmVuY29kZXIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FWEhBVVNUSVZFX01PREVMX1NFQVJDSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLAotICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9kb19leGhhdXN0aXZlX21vZGVsX3NlYXJjaCAodGhpcy0+ZW5jb2RlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JTl9SRVNJRFVBTF9QQVJUSVRJT05fT1JERVI6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwKLSAgICAgICAgICBGTEFDX19zdHJlYW1fZW5jb2Rlcl9nZXRfbWluX3Jlc2lkdWFsX3BhcnRpdGlvbl9vcmRlcgotICAgICAgICAgICh0aGlzLT5lbmNvZGVyKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1JFU0lEVUFMX1BBUlRJVElPTl9PUkRFUjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLAotICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9tYXhfcmVzaWR1YWxfcGFydGl0aW9uX29yZGVyCi0gICAgICAgICAgKHRoaXMtPmVuY29kZXIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SSUNFX1BBUkFNRVRFUl9TRUFSQ0hfRElTVDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLAotICAgICAgICAgIEZMQUNfX3N0cmVhbV9lbmNvZGVyX2dldF9yaWNlX3BhcmFtZXRlcl9zZWFyY2hfZGlzdCAodGhpcy0+ZW5jb2RlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBRERJTkc6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgdGhpcy0+cGFkZGluZyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VFS1BPSU5UUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHRoaXMtPnNlZWtwb2ludHMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh0aGlzKTsKLX0KZGlmZiAtLWdpdCBhL2V4dC9mbGFjL2dzdGZsYWNlbmMuaCBiL2V4dC9mbGFjL2dzdGZsYWNlbmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhZWM0ZS4uMDAwMDAwMAotLS0gYS9leHQvZmxhYy9nc3RmbGFjZW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0ZMQUNfRU5DX0hfXwotI2RlZmluZSBfX0dTVF9GTEFDX0VOQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9lbmNvZGVyLmg+Ci0KLSNpbmNsdWRlIDxGTEFDL2FsbC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRkxBQ19FTkMgKGdzdF9mbGFjX2VuY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfRkxBQ19FTkMob2JqKSBHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVChvYmosIEdTVF9UWVBFX0ZMQUNfRU5DLCBHc3RGbGFjRW5jKQotI2RlZmluZSBHU1RfRkxBQ19FTkNfQ0xBU1Moa2xhc3MpIEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKGtsYXNzLCBHU1RfVFlQRV9GTEFDX0VOQywgR3N0RmxhY0VuY0NsYXNzKQotI2RlZmluZSBHU1RfSVNfRkxBQ19FTkMob2JqKSBHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRShvYmosIEdTVF9UWVBFX0ZMQUNfRU5DKQotI2RlZmluZSBHU1RfSVNfRkxBQ19FTkNfQ0xBU1Moa2xhc3MpIEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKGtsYXNzLCBHU1RfVFlQRV9GTEFDX0VOQykKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZsYWNFbmMgR3N0RmxhY0VuYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGbGFjRW5jQ2xhc3MgR3N0RmxhY0VuY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdEZsYWNFbmMgewotICBHc3RBdWRpb0VuY29kZXIgIGVsZW1lbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLQotICBHc3RGbG93UmV0dXJuICBsYXN0X2Zsb3c7IC8qIHNhdmUgZmxvdyBmcm9tIGxhc3QgcHVzaCBzbyB3ZSBjYW4gcGFzcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjb3JyZWN0IGZsb3cgcmV0dXJuIHVwc3RyZWFtIGluIGNhc2UgdGhlIHB1c2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmYWlscyBmb3Igc29tZSByZWFzb24gKi8KLQotICBndWludDY0ICAgICAgICBvZmZzZXQ7Ci0gIGdpbnQgICAgICAgICAgIHF1YWxpdHk7Ci0gIGdib29sZWFuICAgICAgIHN0b3BwZWQ7Ci0gIGd1aW50ICAgICAgICAgICBwYWRkaW5nOwotICBnaW50ICAgICAgICAgICAgc2Vla3BvaW50czsKLQotICBGTEFDX19TdHJlYW1FbmNvZGVyICplbmNvZGVyOwotCi0gIEZMQUNfX1N0cmVhbU1ldGFkYXRhICoqbWV0YTsKLQotICBHc3RUYWdMaXN0ICogICAgIHRhZ3M7Ci0gIEdzdFRvYyAqICAgICAgICAgdG9jOwotCi0gIGd1aW50NjQgICAgICAgICAgc2FtcGxlc19pbjsKLSAgZ3VpbnQ2NCAgICAgICAgICBzYW1wbGVzX291dDsKLSAgZ2Jvb2xlYW4gICAgICAgICBlb3M7Ci0gIC8qIHF1ZXVlIGhlYWRlcnMgdW50aWwgd2UgaGF2ZSB0aGVtIGFsbCBzbyB3ZSBjYW4gYWRkIHN0cmVhbWhlYWRlcnMgdG8gY2FwcyAqLwotICBnYm9vbGVhbiAgICAgICAgIGdvdF9oZWFkZXJzOwotICBHTGlzdCAgICAgICAgICAgKmhlYWRlcnM7Ci0KLSAgZ2ludCAgICAgICAgICAgICBjaGFubmVsX3Jlb3JkZXJfbWFwWzhdOwotfTsKLQotc3RydWN0IF9Hc3RGbGFjRW5jQ2xhc3MgewotICBHc3RBdWRpb0VuY29kZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZmxhY19lbmNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9GTEFDX0VOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9mbGFjL2dzdGZsYWN0YWcuYyBiL2V4dC9mbGFjL2dzdGZsYWN0YWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA0N2JkOS4uMDAwMDAwMAotLS0gYS9leHQvZmxhYy9nc3RmbGFjdGFnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQ2hyaXN0b3BoZSBGZXJnZWF1IDx0ZXVmQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBKb25hdGhhbiBNYXR0aGV3IDxqb25hdGhhbkBkMTRuLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBnc3RmbGFjdGFnLmM6IHBsdWctaW4gZm9yIHJlYWRpbmcvbW9kaWZ5aW5nIHZvcmJpcyBjb21tZW50cyBpbiBmbGFjIGZpbGVzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZmxhY3RhZwotICogQHNlZV9hbHNvOiAjZmxhY2VuYywgI2ZsYWNkZWMsICNHc3RUYWdTZXR0ZXIKLSAqCi0gKiBUaGUgZmxhY3RhZyBlbGVtZW50IGNhbiBjaGFuZ2UgdGhlIHRhZyBjb250YWluZWQgd2l0aGluIGEgcmF3Ci0gKiBGTEFDIHN0cmVhbS4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyB0aGUgY29tbWVudHMgaGVhZGVyIHBhY2tldAotICogb2YgdGhlIEZMQUMgc3RyZWFtLgotICoKLSAqIEFwcGxpY2F0aW9ucyBjYW4gc2V0IHRoZSB0YWdzIHRvIHdyaXRlIHVzaW5nIHRoZSAjR3N0VGFnU2V0dGVyIGludGVyZmFjZS4KLSAqIFRhZ3MgY29udGFpbmVkIHdpdGhpbmcgdGhlIEZMQUMgYml0c3RyZWFtIHdpbGwgYmUgcGlja2VkIHVwCi0gKiBhdXRvbWF0aWNhbGx5IChhbmQgbWVyZ2VkIGFjY29yZGluZyB0byB0aGUgbWVyZ2UgbW9kZSBzZXQgdmlhIHRoZSB0YWcKLSAqIHNldHRlciBpbnRlcmZhY2UpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmlsZXNyYyBsb2NhdGlvbj1mb28uZmxhYyAhIGZsYWN0YWcgISBmaWxlc2luayBsb2NhdGlvbj1iYXIuZmxhYwotICogXXwgVGhpcyBlbGVtZW50IGlzIG5vdCB1c2VmdWwgd2l0aCBnc3QtbGF1bmNoLCBiZWNhdXNlIGl0IGRvZXMgbm90IHN1cHBvcnQKLSAqIHNldHRpbmcgdGhlIHRhZ3Mgb24gYSAjR3N0VGFnU2V0dGVyIGludGVyZmFjZS4gQ29uY2VwdHVhbGx5LCB0aGUgZWxlbWVudAotICogd2lsbCB1c3VhbGx5IGJlIHVzZWQgaW4gdGhpcyBvcmRlciB0aG91Z2guCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0dGFnc2V0dGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RmbGFjdGFnLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGZsYWN0YWdfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZmxhY3RhZ19kZWJ1ZwotCi0vKiBlbGVtZW50ZmFjdG9yeSBpbmZvcm1hdGlvbiAqLwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGZsYWNfdGFnX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1mbGFjIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZmxhY190YWdfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWZsYWMiKQotICAgICk7Ci0KLQotc3RhdGljIHZvaWQgZ3N0X2ZsYWNfdGFnX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmxhY190YWdfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfZmxhY190YWdfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX3RhZ19zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotI2RlZmluZSBnc3RfZmxhY190YWdfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEZsYWNUYWcsIGdzdF9mbGFjX3RhZywgR1NUX1RZUEVfRUxFTUVOVCwKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1RBR19TRVRURVIsIE5VTEwpKTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfdGFnX2NsYXNzX2luaXQgKEdzdEZsYWNUYWdDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZmxhY3RhZ19kZWJ1ZywgImZsYWN0YWciLCAwLCAiZmxhYyB0YWcgcmV3cml0ZXIiKTsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9mbGFjX3RhZ19kaXNwb3NlOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfZmxhY190YWdfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJGTEFDIHRhZ2dlciIsCi0gICAgICAiRm9ybWF0dGVyL01ldGFkYXRhIiwKLSAgICAgICJSZXdyaXRlIHRhZ3MgaW4gYSBGTEFDIGZpbGUiLCAiQ2hyaXN0b3BoZSBGZXJnZWF1IDx0ZXVmQGdub21lLm9yZz4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZmbGFjX3RhZ19zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZmxhY190YWdfc3JjX3RlbXBsYXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbGFjX3RhZ19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RGbGFjVGFnICp0YWcgPSBHU1RfRkxBQ19UQUcgKG9iamVjdCk7Ci0KLSAgaWYgKHRhZy0+YWRhcHRlcikgewotICAgIGdfb2JqZWN0X3VucmVmICh0YWctPmFkYXB0ZXIpOwotICAgIHRhZy0+YWRhcHRlciA9IE5VTEw7Ci0gIH0KLSAgaWYgKHRhZy0+dm9yYmlzY29tbWVudCkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKHRhZy0+dm9yYmlzY29tbWVudCk7Ci0gICAgdGFnLT52b3JiaXNjb21tZW50ID0gTlVMTDsKLSAgfQotICBpZiAodGFnLT50YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWctPnRhZ3MpOwotICAgIHRhZy0+dGFncyA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfdGFnX2luaXQgKEdzdEZsYWNUYWcgKiB0YWcpCi17Ci0gIC8qIGNyZWF0ZSB0aGUgc2luayBhbmQgc3JjIHBhZHMgKi8KLSAgdGFnLT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZmxhY190YWdfc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHRhZy0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmxhY190YWdfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHRhZy0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmxhY190YWdfc2lua19ldmVudCkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAodGFnKSwgdGFnLT5zaW5rcGFkKTsKLQotICB0YWctPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmZsYWNfdGFnX3NyY190ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAodGFnKSwgdGFnLT5zcmNwYWQpOwotCi0gIHRhZy0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmxhY190YWdfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEZsYWNUYWcgKnRhZzsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHRhZyA9IEdTVF9GTEFDX1RBRyAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJSZWNlaXZlZCAlcyBldmVudCBvbiBzaW5rcGFkLCAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgZXZlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgICAvKiBGSVhNRTogcGFyc2UgYW5kIHN0b3JlIHRoZSBjYXBzLiBPbmNlIHdlIHBhcnNlZCBhbmQgYnVpbHQgdGhlIGhlYWRlcnMsCi0gICAgICAgKiB1cGRhdGUgdGhlICJzdHJlYW1oZWFkZXIiIGZpZWxkIGluIHRoZSBjYXBzIGFuZCBzZW5kIGEgbmV3IGNhcHMgZXZlbnQKLSAgICAgICAqLwotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh0YWctPnNyY3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBGTEFDX01BR0lDICJmTGFDIgotI2RlZmluZSBGTEFDX01BR0lDX1NJWkUgKHNpemVvZiAoRkxBQ19NQUdJQykgLSAxKQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ZsYWNfdGFnX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbGFjVGFnICp0YWc7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3NpemUgc2l6ZTsKLQotICByZXQgPSBHU1RfRkxPV19PSzsKLSAgdGFnID0gR1NUX0ZMQUNfVEFHIChwYXJlbnQpOwotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKHRhZy0+YWRhcHRlciwgYnVmZmVyKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAic3RhdGU6ICVkIiwgdGFnLT5zdGF0ZSk7Ci0KLSAgLyogSW5pdGlhbCBzdGF0ZSwgd2UgZG9uJ3QgZXZlbiBrbm93IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBmbGFjIGZpbGUgKi8KLSAgaWYgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX0lOSVQpIHsKLSAgICBHc3RCdWZmZXIgKmlkX2J1ZmZlcjsKLQotICAgIGlmIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHRhZy0+YWRhcHRlcikgPCBzaXplb2YgKEZMQUNfTUFHSUMpKQotICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgaWRfYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHRhZy0+YWRhcHRlciwgRkxBQ19NQUdJQ19TSVpFKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh0YWcsICJsb29raW5nIGZvciAiIEZMQUNfTUFHSUMgIiBpZGVudGlmaWVyIik7Ci0gICAgaWYgKGdzdF9idWZmZXJfbWVtY21wIChpZF9idWZmZXIsIDAsIEZMQUNfTUFHSUMsIEZMQUNfTUFHSUNfU0laRSkgPT0gMCkgewotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0YWcsICJwdXNoaW5nICIgRkxBQ19NQUdJQyAiIGlkZW50aWZpZXIgYnVmZmVyIik7Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHRhZy0+c3JjcGFkLCBpZF9idWZmZXIpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgICB0YWctPnN0YXRlID0gR1NUX0ZMQUNfVEFHX1NUQVRFX01FVEFEQVRBX0JMT0NLUzsKLSAgICB9IGVsc2UgewotICAgICAgLyogRklYTUU6IGRvZXMgdGhhdCB3b3JrIHdlbGwgd2l0aCBGTEFDIGZpbGVzIGNvbnRhaW5pbmcgSUQzdjIgdGFncyA/ICovCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChpZF9idWZmZXIpOwotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHRhZywgU1RSRUFNLCBXUk9OR19UWVBFLCAoTlVMTCksIChOVUxMKSk7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0gIH0KLQotCi0gIC8qIFRoZSBmTGFDIG1hZ2ljIHN0cmluZyBoYXMgYmVlbiBza2lwcGVkLCB0cnkgdG8gZGV0ZWN0IHRoZSBiZWdpbm5pbmcKLSAgICogb2YgYSBtZXRhZGF0YSBibG9jawotICAgKi8KLSAgaWYgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX01FVEFEQVRBX0JMT0NLUykgewotICAgIGd1aW50IHR5cGU7Ci0gICAgZ2Jvb2xlYW4gaXNfbGFzdDsKLSAgICBjb25zdCBndWludDggKmJsb2NrX2hlYWRlcjsKLQotICAgIGdfYXNzZXJ0ICh0YWctPm1ldGFkYXRhX2Jsb2NrX3NpemUgPT0gMCk7Ci0gICAgZ19hc3NlcnQgKHRhZy0+bWV0YWRhdGFfbGFzdF9ibG9jayA9PSBGQUxTRSk7Ci0KLSAgICAvKiBUaGUgaGVhZGVyIG9mIGEgZmxhYyBtZXRhZGF0YSBibG9jayBpcyA0IGJ5dGVzIGxvbmc6Ci0gICAgICogMXN0IGJpdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBtZXRhZGF0YSBpbmZvIGJsb2NrCi0gICAgICogNyBuZXh0IGJpdHM6IDQgaWYgdm9yYmlzIGNvbW1lbnQgYmxvY2sKLSAgICAgKiAyNCBuZXh0IGJpdHM6IHNpemUgb2YgdGhlIG1ldGFkYXRhIHRvIGZvbGxvdyAoYmlnIGVuZGlhbikKLSAgICAgKi8KLSAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh0YWctPmFkYXB0ZXIpIDwgNCkKLSAgICAgIGdvdG8gY2xlYW51cDsKLQotICAgIGJsb2NrX2hlYWRlciA9IGdzdF9hZGFwdGVyX21hcCAodGFnLT5hZGFwdGVyLCA0KTsKLQotICAgIGlzX2xhc3QgPSAoKGJsb2NrX2hlYWRlclswXSAmIDB4ODApID09IDB4ODApOwotICAgIHR5cGUgPSBibG9ja19oZWFkZXJbMF0gJiAweDdGOwotICAgIHNpemUgPSAoYmxvY2tfaGVhZGVyWzFdIDw8IDE2KQotICAgICAgICB8IChibG9ja19oZWFkZXJbMl0gPDwgOCkKLSAgICAgICAgfCBibG9ja19oZWFkZXJbM107Ci0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKHRhZy0+YWRhcHRlcik7Ci0KLSAgICAvKiBUaGUgNCBieXRlcyBsb25nIGhlYWRlciBpc24ndCBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgc2l6ZSAqLwotICAgIHRhZy0+bWV0YWRhdGFfYmxvY2tfc2l6ZSA9IHNpemUgKyA0OwotICAgIHRhZy0+bWV0YWRhdGFfbGFzdF9ibG9jayA9IGlzX2xhc3Q7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0YWcsCi0gICAgICAgICJnb3QgbWV0YWRhdGEgYmxvY2s6ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMsIHR5cGUgJWQsICIKLSAgICAgICAgImlzIHZvcmJpc2NvbW1lbnQ6ICVkLCBpcyBsYXN0OiAlZCIsCi0gICAgICAgIHNpemUsIHR5cGUsICh0eXBlID09IDB4MDQpLCBpc19sYXN0KTsKLQotICAgIC8qIE1ldGFkYXRhIGJsb2NrcyBvZiB0eXBlIDQgYXJlIHZvcmJpcyBjb21tZW50IGJsb2NrcyAqLwotICAgIGlmICh0eXBlID09IDB4MDQpIHsKLSAgICAgIHRhZy0+c3RhdGUgPSBHU1RfRkxBQ19UQUdfU1RBVEVfVkNfTUVUQURBVEFfQkxPQ0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRhZy0+c3RhdGUgPSBHU1RfRkxBQ19UQUdfU1RBVEVfV1JJVElOR19NRVRBREFUQV9CTE9DSzsKLSAgICB9Ci0gIH0KLQotCi0gIC8qIFJlYWRzIGEgbWV0YWRhdGEgYmxvY2sgKi8KLSAgaWYgKCh0YWctPnN0YXRlID09IEdTVF9GTEFDX1RBR19TVEFURV9XUklUSU5HX01FVEFEQVRBX0JMT0NLKSB8fAotICAgICAgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX1ZDX01FVEFEQVRBX0JMT0NLKSkgewotICAgIEdzdEJ1ZmZlciAqbWV0YWRhdGFfYnVmZmVyOwotCi0gICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAodGFnLT5hZGFwdGVyKSA8IHRhZy0+bWV0YWRhdGFfYmxvY2tfc2l6ZSkKLSAgICAgIGdvdG8gY2xlYW51cDsKLQotICAgIG1ldGFkYXRhX2J1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICh0YWctPmFkYXB0ZXIsCi0gICAgICAgIHRhZy0+bWV0YWRhdGFfYmxvY2tfc2l6ZSk7Ci0gICAgLyogY2xlYXIgdGhlIGlzLWxhc3QgZmxhZywgYXMgdGhlIGxhc3QgbWV0YWRhdGEgYmxvY2sgd2lsbAotICAgICAqIGJlIHRoZSB2b3JiaXMgY29tbWVudCBibG9jayB3aGljaCB3ZSB3aWxsIGJ1aWxkIG91cnNlbHZlcy4KLSAgICAgKi8KLSAgICBnc3RfYnVmZmVyX21hcCAobWV0YWRhdGFfYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gICAgbWFwLmRhdGFbMF0gJj0gKH4weDgwKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChtZXRhZGF0YV9idWZmZXIsICZtYXApOwotCi0gICAgaWYgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX1dSSVRJTkdfTUVUQURBVEFfQkxPQ0spIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRhZywgInB1c2hpbmcgbWV0YWRhdGEgYmxvY2sgYnVmZmVyIik7Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHRhZy0+c3JjcGFkLCBtZXRhZGF0YV9idWZmZXIpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0gZWxzZSB7Ci0gICAgICB0YWctPnZvcmJpc2NvbW1lbnQgPSBtZXRhZGF0YV9idWZmZXI7Ci0gICAgfQotICAgIHRhZy0+bWV0YWRhdGFfYmxvY2tfc2l6ZSA9IDA7Ci0gICAgdGFnLT5zdGF0ZSA9IEdTVF9GTEFDX1RBR19TVEFURV9NRVRBREFUQV9ORVhUX0JMT0NLOwotICB9Ci0KLSAgLyogVGhpcyBzdGF0ZSBpcyBtYWlubHkgdXNlZCB0byBiZSBhYmxlIHRvIHN0b3AgYXMgc29vbiBhcyB3ZSByZWFkCi0gICAqIGEgdm9yYmlzY29tbWVudCBibG9jayBmcm9tIHRoZSBmbGFjIGZpbGUgaWYgd2UgYXJlIGluIGFuIG9ubHkgb3V0cHV0Ci0gICAqIHRhZ3MgbW9kZQotICAgKi8KLSAgaWYgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX01FVEFEQVRBX05FWFRfQkxPQ0spIHsKLSAgICAvKiBDaGVjayBpZiBpbiB0aGUgcHJldmlvdXMgaXRlcmF0aW9uIHdlIHJlYWQgYSB2b3JiaXMgY29tbWVudCBtZXRhZGF0YSAKLSAgICAgKiBibG9jaywgYW5kIHN0b3Agbm93IGlmIHRoZSB1c2VyIG9ubHkgd2FudHMgdG8gcmVhZCB0YWdzCi0gICAgICovCi0gICAgaWYgKHRhZy0+dm9yYmlzY29tbWVudCAhPSBOVUxMKSB7Ci0gICAgICBndWludDggaWRfZGF0YVs0XTsKLSAgICAgIC8qIFdlIGZvdW5kIHNvbWUgdGFncywgdHJ5IHRvIHBhcnNlIHRoZW0gYW5kIG5vdGlmeSB0aGUgb3RoZXIgZWxlbWVudHMKLSAgICAgICAqIHRoYXQgd2UgZW5jb3VudGVyZWQgc29tZSB0YWdzCi0gICAgICAgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRhZywgImVtaXR0aW5nIHZvcmJpc2NvbW1lbnQgdGFncyIpOwotICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0ICh0YWctPnZvcmJpc2NvbW1lbnQsIDAsIGlkX2RhdGEsIDQpOwotICAgICAgdGFnLT50YWdzID0gZ3N0X3RhZ19saXN0X2Zyb21fdm9yYmlzY29tbWVudF9idWZmZXIgKHRhZy0+dm9yYmlzY29tbWVudCwKLSAgICAgICAgICBpZF9kYXRhLCA0LCBOVUxMKTsKLSAgICAgIGlmICh0YWctPnRhZ3MgIT0gTlVMTCkgewotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHRhZy0+c3JjcGFkLAotICAgICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKHRhZy0+dGFncykpKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodGFnLT52b3JiaXNjb21tZW50KTsKLSAgICAgIHRhZy0+dm9yYmlzY29tbWVudCA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogU2tpcCB0byBuZXh0IHN0YXRlICovCi0gICAgaWYgKHRhZy0+bWV0YWRhdGFfbGFzdF9ibG9jayA9PSBGQUxTRSkgewotICAgICAgdGFnLT5zdGF0ZSA9IEdTVF9GTEFDX1RBR19TVEFURV9NRVRBREFUQV9CTE9DS1M7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRhZy0+c3RhdGUgPSBHU1RfRkxBQ19UQUdfU1RBVEVfQUREX1ZPUkJJU19DT01NRU5UOwotICAgIH0KLSAgfQotCi0KLSAgLyogQ3JlYXRlcyBhIHZvcmJpcyBjb21tZW50IGJsb2NrIGZyb20gdGhlIG1ldGFkYXRhIHdoaWNoIHdhcyBzZXQKLSAgICogb24gdGhlIGdzdHJlYW1lciBlbGVtZW50LCBhbmQgYWRkIGl0IHRvIHRoZSBmbGFjIHN0cmVhbQotICAgKi8KLSAgaWYgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX0FERF9WT1JCSVNfQ09NTUVOVCkgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotICAgIGNvbnN0IEdzdFRhZ0xpc3QgKnVzZXJfdGFnczsKLSAgICBHc3RUYWdMaXN0ICptZXJnZWRfdGFnczsKLQotICAgIC8qIG1lcmdlIHRoZSB0YWcgbGlzdHMgKi8KLSAgICB1c2VyX3RhZ3MgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKEdTVF9UQUdfU0VUVEVSICh0YWcpKTsKLSAgICBpZiAodXNlcl90YWdzICE9IE5VTEwpIHsKLSAgICAgIG1lcmdlZF90YWdzID0gZ3N0X3RhZ19saXN0X21lcmdlICh1c2VyX3RhZ3MsIHRhZy0+dGFncywKLSAgICAgICAgICBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKEdTVF9UQUdfU0VUVEVSICh0YWcpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lcmdlZF90YWdzID0gZ3N0X3RhZ19saXN0X2NvcHkgKHRhZy0+dGFncyk7Ci0gICAgfQotCi0gICAgaWYgKG1lcmdlZF90YWdzID09IE5VTEwpIHsKLSAgICAgIC8qIElmIHdlIGdldCBhIE5VTEwgbGlzdCBvZiB0YWdzLCB3ZSBtdXN0IGdlbmVyYXRlIGEgcGFkZGluZyBibG9jawotICAgICAgICogd2hpY2ggaXMgbWFya2VkIGFzIHRoZSBsYXN0IG1ldGFkYXRhIGJsb2NrLCBvdGhlcndpc2Ugd2UnbGwKLSAgICAgICAqIGVuZCB1cCB3aXRoIGEgY29ycnVwdGVkIGZsYWMgZmlsZS4KLSAgICAgICAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh0YWcsICJObyB0YWdzIGZvdW5kIik7Ci0gICAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEyKTsKLSAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBub19idWZmZXI7Ci0KLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgICAgbWVtc2V0IChtYXAuZGF0YSwgMCwgbWFwLnNpemUpOwotICAgICAgbWFwLmRhdGFbMF0gPSAweDgxOyAgICAgICAvKiAweDgwID0gTGFzdCBtZXRhZGF0YSBibG9jaywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDB4MDEgPSBwYWRkaW5nIGJsb2NrICovCi0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIH0gZWxzZSB7Ci0gICAgICBndWNoYXIgaGVhZGVyWzRdOwotICAgICAgZ3VpbnQ4IGZiaXRbMV07Ci0KLSAgICAgIG1lbXNldCAoaGVhZGVyLCAwLCBzaXplb2YgKGhlYWRlcikpOwotICAgICAgaGVhZGVyWzBdID0gMHg4NDsgICAgICAgICAvKiAweDgwID0gTGFzdCBtZXRhZGF0YSBibG9jaywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDB4MDQgPSB2b3JiaXNjb21tZW50IGJsb2NrICovCi0gICAgICBidWZmZXIgPSBnc3RfdGFnX2xpc3RfdG9fdm9yYmlzY29tbWVudF9idWZmZXIgKG1lcmdlZF90YWdzLCBoZWFkZXIsCi0gICAgICAgICAgc2l6ZW9mIChoZWFkZXIpLCBOVUxMKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRhZywgIldyaXRpbmcgdGFncyAlIiBHU1RfUFRSX0ZPUk1BVCwgbWVyZ2VkX3RhZ3MpOwotICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChtZXJnZWRfdGFncyk7Ci0gICAgICBpZiAoYnVmZmVyID09IE5VTEwpCi0gICAgICAgIGdvdG8gbm9fY29tbWVudDsKLQotICAgICAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0gICAgICBpZiAoKHNpemUgPCA0KSB8fCAoKHNpemUgLSA0KSA+IDB4RkZGRkZGKSkKLSAgICAgICAgZ290byBjb21tZW50X3Rvb19sb25nOwotCi0gICAgICBmYml0WzBdID0gMTsKLSAgICAgIC8qIEdldCByaWQgb2YgdGhlIGZyYW1pbmcgYml0IGF0IHRoZSBlbmQgb2YgdGhlIHZvcmJpc2NvbW1lbnQgYnVmZmVyIAotICAgICAgICogaWYgaXQgZXhpc3RzIHNpbmNlIGxpYkZMQUMgc2VlbXMgdG8gbG9zZSBzeW5jIGJlY2F1c2Ugb2YgdGhpcwotICAgICAgICogYml0IGluIGdzdGZsYWNkZWMKLSAgICAgICAqLwotICAgICAgaWYgKGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIHNpemUgLSAxLCBmYml0LCAxKSA9PSAwKSB7Ci0gICAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZmZlciwgMCwgc2l6ZSAtIDEpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIFRoZSA0IGJ5dGUgbWV0YWRhdGEgYmxvY2sgaGVhZGVyIGlzbid0IGFjY291bnRlZCBmb3IgaW4gdGhlIHRvdGFsCi0gICAgICogc2l6ZSBvZiB0aGUgbWV0YWRhdGEgYmxvY2sKLSAgICAgKi8KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBtYXAuZGF0YVsxXSA9ICgoKG1hcC5zaXplIC0gNCkgJiAweEZGMDAwMCkgPj4gMTYpOwotICAgIG1hcC5kYXRhWzJdID0gKCgobWFwLnNpemUgLSA0KSAmIDB4MDBGRjAwKSA+PiA4KTsKLSAgICBtYXAuZGF0YVszXSA9ICgobWFwLnNpemUgLSA0KSAmIDB4MDAwMEZGKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodGFnLCAicHVzaGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGUgdm9yYmlzY29tbWVudCAiCi0gICAgICAgICJidWZmZXIiLCBtYXAuc2l6ZSk7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHRhZy0+c3JjcGFkLCBidWZmZXIpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgdGFnLT5zdGF0ZSA9IEdTVF9GTEFDX1RBR19TVEFURV9BVURJT19EQVRBOwotICB9Ci0KLSAgLyogVGhlIG1ldGFkYXRhIGJsb2NrcyBoYXZlIGJlZW4gcmVhZCwgbm93IHdlIGFyZSByZWFkaW5nIGF1ZGlvIGRhdGEgKi8KLSAgaWYgKHRhZy0+c3RhdGUgPT0gR1NUX0ZMQUNfVEFHX1NUQVRFX0FVRElPX0RBVEEpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBndWludCBhdmFpbDsKLQotICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh0YWctPmFkYXB0ZXIpOwotICAgIGlmIChhdmFpbCA+IDApIHsKLSAgICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICh0YWctPmFkYXB0ZXIsIGF2YWlsKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaCAodGFnLT5zcmNwYWQsIGJ1ZmZlcik7Ci0gICAgfQotICB9Ci0KLWNsZWFudXA6Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJzdGF0ZTogJWQsIHJldDogJWQiLCB0YWctPnN0YXRlLCByZXQpOwotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9fYnVmZmVyOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHRhZywgQ09SRSwgVE9PX0xBWlksIChOVUxMKSwKLSAgICAgICAgKCJFcnJvciBjcmVhdGluZyAxMi1ieXRlIGJ1ZmZlciBmb3IgcGFkZGluZyBibG9jayIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLW5vX2NvbW1lbnQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodGFnLCBDT1JFLCBUQUcsIChOVUxMKSwKLSAgICAgICAgKCJFcnJvciBjb252ZXJ0aW5nIHRhZyBsaXN0IHRvIHZvcmJpc2NvbW1lbnQgYnVmZmVyIikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotY29tbWVudF90b29fbG9uZzoKLSAgewotICAgIC8qIEZMQUMgdm9yYmlzIGNvbW1lbnQgYmxvY2tzIGFyZSBsaW1pdGVkIHRvIDJeMjQgYnl0ZXMsIAotICAgICAqIHdoaWxlIHRoZSB2b3JiaXMgc3BlY3MgYWxsb3cgbW9yZSB0aGFuIHRoYXQuIFNob3VsZG4ndCAKLSAgICAgKiBiZSBhIHJlYWwgd29ybGQgcHJvYmxlbSB0aG91Z2gKLSAgICAgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodGFnLCBDT1JFLCBUQUcsIChOVUxMKSwKLSAgICAgICAgKCJWb3JiaXMgY29tbWVudCBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgdG9vIGxvbmciLCBzaXplKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2ZsYWNfdGFnX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdEZsYWNUYWcgKnRhZzsKLQotICB0YWcgPSBHU1RfRkxBQ19UQUcgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBnZXQgb3V0IG9mIHRoZSBjaGFpbiBmdW5jdGlvbiBmYXN0ZXIgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAodGFnLT5hZGFwdGVyKTsKLSAgICAgIGlmICh0YWctPnZvcmJpc2NvbW1lbnQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodGFnLT52b3JiaXNjb21tZW50KTsKLSAgICAgICAgdGFnLT52b3JiaXNjb21tZW50ID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGlmICh0YWctPnRhZ3MpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWctPnRhZ3MpOwotICAgICAgICB0YWctPnRhZ3MgPSBOVUxMOwotICAgICAgfQotICAgICAgdGFnLT5tZXRhZGF0YV9ibG9ja19zaXplID0gMDsKLSAgICAgIHRhZy0+bWV0YWRhdGFfbGFzdF9ibG9jayA9IEZBTFNFOwotICAgICAgdGFnLT5zdGF0ZSA9IEdTVF9GTEFDX1RBR19TVEFURV9JTklUOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLX0KZGlmZiAtLWdpdCBhL2V4dC9mbGFjL2dzdGZsYWN0YWcuaCBiL2V4dC9mbGFjL2dzdGZsYWN0YWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2NTQxYS4uMDAwMDAwMAotLS0gYS9leHQvZmxhYy9nc3RmbGFjdGFnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBDaHJpc3RvcGhlIEZlcmdlYXUgPHRldWZAZ25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEpvbmF0aGFuIE1hdHRoZXcgPGpvbmF0aGFuQGQxNG4ub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGdzdGZsYWN0YWcuYzogcGx1Zy1pbiBmb3IgcmVhZGluZy9tb2RpZnlpbmcgdm9yYmlzIGNvbW1lbnRzIGluIGZsYWMgZmlsZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEdTVF9GTEFDX1RBR19ICi0jZGVmaW5lIEdTVF9GTEFDX1RBR19ICi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX0ZMQUNfVEFHIChnc3RfZmxhY190YWdfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0ZMQUNfVEFHKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0ZMQUNfVEFHLCBHc3RGbGFjVGFnKSkKLSNkZWZpbmUgR1NUX0ZMQUNfVEFHX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GTEFDX1RBRywgR3N0RmxhY1RhZykpCi0jZGVmaW5lIEdTVF9JU19GTEFDX1RBRyhvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9GTEFDX1RBRykpCi0jZGVmaW5lIEdTVF9JU19GTEFDX1RBR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRkxBQ19UQUcpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RmxhY1RhZyBHc3RGbGFjVGFnOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZsYWNUYWdDbGFzcyBHc3RGbGFjVGFnQ2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfRkxBQ19UQUdfU1RBVEVfSU5JVCwKLSAgR1NUX0ZMQUNfVEFHX1NUQVRFX01FVEFEQVRBX0JMT0NLUywKLSAgR1NUX0ZMQUNfVEFHX1NUQVRFX01FVEFEQVRBX05FWFRfQkxPQ0ssCi0gIEdTVF9GTEFDX1RBR19TVEFURV9XUklUSU5HX01FVEFEQVRBX0JMT0NLLAotICBHU1RfRkxBQ19UQUdfU1RBVEVfVkNfTUVUQURBVEFfQkxPQ0ssCi0gIEdTVF9GTEFDX1RBR19TVEFURV9BRERfVk9SQklTX0NPTU1FTlQsCi0gIEdTVF9GTEFDX1RBR19TVEFURV9BVURJT19EQVRBCi19Ci1Hc3RGbGFjVGFnU3RhdGU7Ci0KLXN0cnVjdCBfR3N0RmxhY1RhZwotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLQotICAvKiBwYWRzICovCi0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0KLSAgR3N0RmxhY1RhZ1N0YXRlIHN0YXRlOwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIEdzdEJ1ZmZlciAqdm9yYmlzY29tbWVudDsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLQotICBndWludCBtZXRhZGF0YV9ibG9ja19zaXplOwotICBnYm9vbGVhbiBtZXRhZGF0YV9sYXN0X2Jsb2NrOwotfTsKLQotc3RydWN0IF9Hc3RGbGFjVGFnQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9mbGFjX3RhZ19nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBHU1RfRkxBQ19UQUdfSCAqLwpkaWZmIC0tZ2l0IGEvZXh0L2dka19waXhidWYvTWFrZWZpbGUuYW0gYi9leHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY4OTQ1My4uMDAwMDAwMAotLS0gYS9leHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGdka3BpeGJ1Zi5sYQotCi0jIGdzdGdka2FuaW1hdGlvbi5bY2hdIC0gR2RrUGl4YnVmIGFuaW1hdGlvbnMgZGVjb2RlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc3RhcnQsCi0jIHdoaWNoIG1lYW5zIGl0J3MgZWFzeSB0byBtYWtlIHVzIGdvIE9PTSB3aXRoIG1hbmlwdWxhdGVkIGlucHV0LCBkaXNhYmxlZAotCi1saWJnc3RnZGtwaXhidWZfbGFfU09VUkNFUyA9IFwKLQlnc3RnZGtwaXhidWZkZWMuYyBcCi0JZ3N0Z2RrcGl4YnVmb3ZlcmxheS5jIFwKLQlnc3RnZGtwaXhidWZwbHVnaW4uYyBcCi0JZ3N0Z2RrcGl4YnVmc2luay5jCi1saWJnc3RnZGtwaXhidWZfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DT05UUk9MTEVSX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSAkKEdES19QSVhCVUZfQ0ZMQUdTKQotbGliZ3N0Z2RrcGl4YnVmX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0NPTlRST0xMRVJfTElCUykgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpICQoR0RLX1BJWEJVRl9MSUJTKQotbGliZ3N0Z2RrcGl4YnVmX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGdka3BpeGJ1Zl9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RnZGtwaXhidWZkZWMuaCBcCi0JZ3N0Z2RrcGl4YnVmb3ZlcmxheS5oIFwKLQlnc3RnZGtwaXhidWZzaW5rLmgKZGlmZiAtLWdpdCBhL2V4dC9nZGtfcGl4YnVmL01ha2VmaWxlLmluIGIvZXh0L2dka19waXhidWYvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1OTAxMGYuLjAwMDAwMDAKLS0tIGEvZXh0L2dka19waXhidWYvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NTkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L2dka19waXhidWYKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RnZGtwaXhidWZfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RnZGtwaXhidWZfbGFfT0JKRUNUUyA9IGxpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZkZWMubG8gXAotCWxpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZvdmVybGF5LmxvIFwKLQlsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmcGx1Z2luLmxvIFwKLQlsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmc2luay5sbwotbGliZ3N0Z2RrcGl4YnVmX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGdka3BpeGJ1Zl9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0Z2RrcGl4YnVmX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0Z2RrcGl4YnVmX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0Z2RrcGl4YnVmX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGdka3BpeGJ1Zl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RnZGtwaXhidWZfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0Z2RrcGl4YnVmX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGdka3BpeGJ1Zi5sYQotCi0jIGdzdGdka2FuaW1hdGlvbi5bY2hdIC0gR2RrUGl4YnVmIGFuaW1hdGlvbnMgZGVjb2RlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc3RhcnQsCi0jIHdoaWNoIG1lYW5zIGl0J3MgZWFzeSB0byBtYWtlIHVzIGdvIE9PTSB3aXRoIG1hbmlwdWxhdGVkIGlucHV0LCBkaXNhYmxlZAotbGliZ3N0Z2RrcGl4YnVmX2xhX1NPVVJDRVMgPSBcCi0JZ3N0Z2RrcGl4YnVmZGVjLmMgXAotCWdzdGdka3BpeGJ1Zm92ZXJsYXkuYyBcCi0JZ3N0Z2RrcGl4YnVmcGx1Z2luLmMgXAotCWdzdGdka3BpeGJ1ZnNpbmsuYwotCi1saWJnc3RnZGtwaXhidWZfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DT05UUk9MTEVSX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSAkKEdES19QSVhCVUZfQ0ZMQUdTKQotCi1saWJnc3RnZGtwaXhidWZfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQ09OVFJPTExFUl9MSUJTKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgJChHREtfUElYQlVGX0xJQlMpCi0KLWxpYmdzdGdka3BpeGJ1Zl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RnZGtwaXhidWZfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gXAotCWdzdGdka3BpeGJ1ZmRlYy5oIFwKLQlnc3RnZGtwaXhidWZvdmVybGF5LmggXAotCWdzdGdka3BpeGJ1ZnNpbmsuaAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvZ2RrX3BpeGJ1Zi9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGdka3BpeGJ1Zi5sYTogJChsaWJnc3RnZGtwaXhidWZfbGFfT0JKRUNUUykgJChsaWJnc3RnZGtwaXhidWZfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGdka3BpeGJ1Zl9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0Z2RrcGl4YnVmX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RnZGtwaXhidWZfbGFfT0JKRUNUUykgJChsaWJnc3RnZGtwaXhidWZfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmZGVjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1Zm92ZXJsYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmcGx1Z2luLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnNpbmsuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZkZWMubG86IGdzdGdka3BpeGJ1ZmRlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z2RrcGl4YnVmX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZmRlYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZmRlYy5UcG8gLWMgLW8gbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZmRlYy5sbyBgdGVzdCAtZiAnZ3N0Z2RrcGl4YnVmZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdka3BpeGJ1ZmRlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmZGVjLlRwbyAkKERFUERJUikvbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZmRlYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RnZGtwaXhidWZkZWMuYycgb2JqZWN0PSdsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmZGVjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z2RrcGl4YnVmX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmZGVjLmxvIGB0ZXN0IC1mICdnc3RnZGtwaXhidWZkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2RrcGl4YnVmZGVjLmMKLQotbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1Zm92ZXJsYXkubG86IGdzdGdka3BpeGJ1Zm92ZXJsYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RnZGtwaXhidWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZvdmVybGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmb3ZlcmxheS5UcG8gLWMgLW8gbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1Zm92ZXJsYXkubG8gYHRlc3QgLWYgJ2dzdGdka3BpeGJ1Zm92ZXJsYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2RrcGl4YnVmb3ZlcmxheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmb3ZlcmxheS5UcG8gJChERVBESVIpL2xpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZvdmVybGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGdka3BpeGJ1Zm92ZXJsYXkuYycgb2JqZWN0PSdsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmb3ZlcmxheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RnZGtwaXhidWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1Zm92ZXJsYXkubG8gYHRlc3QgLWYgJ2dzdGdka3BpeGJ1Zm92ZXJsYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2RrcGl4YnVmb3ZlcmxheS5jCi0KLWxpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZwbHVnaW4ubG86IGdzdGdka3BpeGJ1ZnBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z2RrcGl4YnVmX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnBsdWdpbi5sbyBgdGVzdCAtZiAnZ3N0Z2RrcGl4YnVmcGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdka3BpeGJ1ZnBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnBsdWdpbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RnZGtwaXhidWZwbHVnaW4uYycgb2JqZWN0PSdsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmcGx1Z2luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z2RrcGl4YnVmX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmcGx1Z2luLmxvIGB0ZXN0IC1mICdnc3RnZGtwaXhidWZwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2RrcGl4YnVmcGx1Z2luLmMKLQotbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnNpbmsubG86IGdzdGdka3BpeGJ1ZnNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RnZGtwaXhidWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmc2luay5UcG8gLWMgLW8gbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnNpbmsubG8gYHRlc3QgLWYgJ2dzdGdka3BpeGJ1ZnNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2RrcGl4YnVmc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmc2luay5UcG8gJChERVBESVIpL2xpYmdzdGdka3BpeGJ1Zl9sYS1nc3RnZGtwaXhidWZzaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGdka3BpeGJ1ZnNpbmsuYycgb2JqZWN0PSdsaWJnc3RnZGtwaXhidWZfbGEtZ3N0Z2RrcGl4YnVmc2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdka3BpeGJ1Zl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RnZGtwaXhidWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z2RrcGl4YnVmX2xhLWdzdGdka3BpeGJ1ZnNpbmsubG8gYHRlc3QgLWYgJ2dzdGdka3BpeGJ1ZnNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2RrcGl4YnVmc2luay5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZmRlYy5jIGIvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OThjNTMuLjAwMDAwMDAKLS0tIGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjIgKzAsMCBAQAotLyogR1N0cmVhbWVyIEdka1BpeGJ1Zi1iYXNlZCBpbWFnZSBkZWNvZGVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGdka3BpeGJ1ZmRlYy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnZGtwaXhidWZkZWNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ2RrcGl4YnVmZGVjX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiaW1hZ2UvcG5nOyAiCi0gICAgICAgIC8qICJpbWFnZS9qcGVnOyAiIGRpc2FibGVkIGJlY2F1c2Ugd2UgY2FuJ3QgaGFuZGxlIE1KUEVHICovCi0gICAgICAgICJpbWFnZS9naWY7ICIKLSAgICAgICAgImltYWdlL3gtaWNvbjsgIgotICAgICAgICAiYXBwbGljYXRpb24veC1uYXZpLWFuaW1hdGlvbjsgIgotICAgICAgICAiaW1hZ2UveC1jbXUtcmFzdGVyOyAiCi0gICAgICAgICJpbWFnZS94LXN1bi1yYXN0ZXI7ICIKLSAgICAgICAgImltYWdlL3gtcGl4bWFwOyAiCi0gICAgICAgICJpbWFnZS90aWZmOyAiCi0gICAgICAgICJpbWFnZS94LXBvcnRhYmxlLWFueW1hcDsgIgotICAgICAgICAiaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXA7ICIKLSAgICAgICAgImltYWdlL3gtcG9ydGFibGUtZ3JheW1hcDsgIgotICAgICAgICAiaW1hZ2UveC1wb3J0YWJsZS1waXhtYXA7ICIKLSAgICAgICAgImltYWdlL2JtcDsgIgotICAgICAgICAiaW1hZ2UveC1ibXA7ICIKLSAgICAgICAgImltYWdlL3gtTVMtYm1wOyAiCi0gICAgICAgICJpbWFnZS92bmQud2FwLndibXA7ICIgImltYWdlL3gtYml0bWFwOyAiICJpbWFnZS94LXRnYTsgIgotICAgICAgICAiaW1hZ2UveC1wY3g7IGltYWdlL3N2ZzsgaW1hZ2Uvc3ZnK3htbCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9nZGtfcGl4YnVmX2RlY19zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJSR0IiKSAiOyAiCi0gICAgICAgIEdTVF9WSURFT19DQVBTX01BS0UgKCJSR0JBIikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9nZGtfcGl4YnVmX2RlY19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgZ3N0X2dka19waXhidWZfZGVjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEdka1BpeGJ1ZkRlYywgZ3N0X2dka19waXhidWZfZGVjLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua19zZXRjYXBzIChHc3RHZGtQaXhidWZEZWMgKiBmaWx0ZXIsIEdzdENhcHMgKiBjYXBzKQotewotICBjb25zdCBHVmFsdWUgKmZyYW1lcmF0ZTsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoKGZyYW1lcmF0ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZnJhbWVyYXRlIikpICE9IE5VTEwpIHsKLSAgICBmaWx0ZXItPmluX2Zwc19uID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKGZyYW1lcmF0ZSk7Ci0gICAgZmlsdGVyLT5pbl9mcHNfZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKGZyYW1lcmF0ZSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAiZ290IGZyYW1lcmF0ZSBvZiAlZC8lZCBmcHMgPT4gcGFja2V0aXplZCBtb2RlIiwKLSAgICAgICAgZmlsdGVyLT5pbl9mcHNfbiwgZmlsdGVyLT5pbl9mcHNfZCk7Ci0gIH0gZWxzZSB7Ci0gICAgZmlsdGVyLT5pbl9mcHNfbiA9IDA7Ci0gICAgZmlsdGVyLT5pbl9mcHNfZCA9IDE7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAibm8gZnJhbWVyYXRlLCBhc3N1bWluZyBzaW5nbGUgaW1hZ2UiKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfZ2V0X2NhcHNsaXN0IChHc3RDYXBzICogZmlsdGVyKQotewotICBHU0xpc3QgKnNsaXN0OwotICBHU0xpc3QgKnNsaXN0MDsKLSAgR3N0Q2FwcyAqY2Fwc2xpc3QgPSBOVUxMOwotICBHc3RDYXBzICpyZXR1cm5fY2FwcyA9IE5VTEw7Ci0gIEdzdENhcHMgKnRtcGxfY2FwczsKLQotICBjYXBzbGlzdCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgc2xpc3QwID0gZ2RrX3BpeGJ1Zl9nZXRfZm9ybWF0cyAoKTsKLQotICBmb3IgKHNsaXN0ID0gc2xpc3QwOyBzbGlzdDsgc2xpc3QgPSBnX3NsaXN0X25leHQgKHNsaXN0KSkgewotICAgIEdka1BpeGJ1ZkZvcm1hdCAqcGl4YnVmX2Zvcm1hdDsKLSAgICBjaGFyICoqbWltZXR5cGVzOwotICAgIGNoYXIgKiptaW1ldHlwZTsKLQotICAgIHBpeGJ1Zl9mb3JtYXQgPSBzbGlzdC0+ZGF0YTsKLSAgICBtaW1ldHlwZXMgPSBnZGtfcGl4YnVmX2Zvcm1hdF9nZXRfbWltZV90eXBlcyAocGl4YnVmX2Zvcm1hdCk7Ci0KLSAgICBmb3IgKG1pbWV0eXBlID0gbWltZXR5cGVzOyAqbWltZXR5cGU7IG1pbWV0eXBlKyspIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHNsaXN0LCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoKm1pbWV0eXBlKSk7Ci0gICAgfQotICAgIGdfc3RyZnJlZXYgKG1pbWV0eXBlcyk7Ci0gIH0KLSAgZ19zbGlzdF9mcmVlIChzbGlzdDApOwotCi0gIHRtcGxfY2FwcyA9Ci0gICAgICBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmZ3N0X2dka19waXhidWZfZGVjX3NpbmtfdGVtcGxhdGUuc3RhdGljX2NhcHMpOwotICByZXR1cm5fY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2Fwc2xpc3QsIHRtcGxfY2Fwcyk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHRtcGxfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzbGlzdCk7Ci0KLSAgaWYgKGZpbHRlciAmJiByZXR1cm5fY2FwcykgewotICAgIEdzdENhcHMgKnRlbXA7Ci0KLSAgICB0ZW1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChyZXR1cm5fY2FwcywgZmlsdGVyKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmV0dXJuX2NhcHMpOwotICAgIHJldHVybl9jYXBzID0gdGVtcDsKLSAgfQotCi0gIHJldHVybiByZXR1cm5fY2FwczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqZmlsdGVyLCAqY2FwczsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGNhcHMgPSBnc3RfZ2RrX3BpeGJ1Zl9kZWNfZ2V0X2NhcHNsaXN0IChmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi0KLS8qIGluaXRpYWxpemUgdGhlIHBsdWdpbidzIGNsYXNzICovCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfZGVjX2NsYXNzX2luaXQgKEdzdEdka1BpeGJ1ZkRlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9nZGtfcGl4YnVmX2RlY19jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9nZGtfcGl4YnVmX2RlY19zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiR2RrUGl4YnVmIGltYWdlIGRlY29kZXIiLCAiQ29kZWMvRGVjb2Rlci9JbWFnZSIsCi0gICAgICAiRGVjb2RlcyBpbWFnZXMgaW4gYSB2aWRlbyBzdHJlYW0gdXNpbmcgR2RrUGl4YnVmIiwKLSAgICAgICJEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4sIFJlbmF0byBGaWxobyA8cmVuYXRvLmZpbGhvQGluZHQub3JnLmJyPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnZGtwaXhidWZkZWNfZGVidWcsICJnZGtwaXhidWYiLCAwLAotICAgICAgIkdka1BpeGJ1ZiBpbWFnZSBkZWNvZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfaW5pdCAoR3N0R2RrUGl4YnVmRGVjICogZmlsdGVyKQotewotICBmaWx0ZXItPnNpbmtwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZnc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua190ZW1wbGF0ZSwKLSAgICAgICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChmaWx0ZXItPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dka19waXhidWZfZGVjX3NpbmtfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGZpbHRlci0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ2RrX3BpeGJ1Zl9kZWNfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGZpbHRlci0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ2RrX3BpeGJ1Zl9kZWNfc2lua19ldmVudCkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZmlsdGVyKSwgZmlsdGVyLT5zaW5rcGFkKTsKLQotICBmaWx0ZXItPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmdzdF9nZGtfcGl4YnVmX2RlY19zcmNfdGVtcGxhdGUsCi0gICAgICAic3JjIik7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGZpbHRlci0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0+c3JjcGFkKTsKLQotICBmaWx0ZXItPmxhc3RfdGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZmlsdGVyLT5waXhidWZfbG9hZGVyID0gTlVMTDsKLSAgZmlsdGVyLT5wYWNrZXRpemVkID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2dka19waXhidWZfZGVjX3NldHVwX3Bvb2wgKEdzdEdka1BpeGJ1ZkRlYyAqIGZpbHRlciwgR3N0VmlkZW9JbmZvICogaW5mbykKLXsKLSAgR3N0Q2FwcyAqdGFyZ2V0OwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotICBndWludCBzaXplLCBtaW4sIG1heDsKLQotICB0YXJnZXQgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKGZpbHRlci0+c3JjcGFkKTsKLSAgaWYgKCF0YXJnZXQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIHRyeSB0byBnZXQgYSBidWZmZXJwb29sIG5vdyAqLwotICAvKiBmaW5kIGEgcG9vbCBmb3IgdGhlIG5lZ290aWF0ZWQgY2FwcyBub3cgKi8KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2FsbG9jYXRpb24gKHRhcmdldCwgVFJVRSk7Ci0KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKGZpbHRlci0+c3JjcGFkLCBxdWVyeSkpIHsKLSAgICAvKiBub3QgYSBwcm9ibGVtLCB3ZSB1c2UgdGhlIHF1ZXJ5IGRlZmF1bHRzICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAiQUxMT0NBVElPTiBxdWVyeSBmYWlsZWQiKTsKLSAgfQotCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29scyAocXVlcnkpID4gMCkgewotICAgIC8qIHdlIGdvdCBjb25maWd1cmF0aW9uIGZyb20gb3VyIHBlZXIsIHBhcnNlIHRoZW0gKi8KLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsICZwb29sLCAmc2l6ZSwgJm1pbiwgJm1heCk7Ci0gIH0gZWxzZSB7Ci0gICAgcG9vbCA9IE5VTEw7Ci0gICAgc2l6ZSA9IGluZm8tPnNpemU7Ci0gICAgbWluID0gbWF4ID0gMDsKLSAgfQotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAvKiB3ZSBkaWQgbm90IGdldCBhIHBvb2wsIG1ha2Ugb25lIG91cnNlbHZlcyB0aGVuICovCi0gICAgcG9vbCA9IGdzdF9idWZmZXJfcG9vbF9uZXcgKCk7Ci0gIH0KLQotICAvKiBhbmQgY29uZmlndXJlICovCi0gIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIHRhcmdldCwgc2l6ZSwgbWluLCBtYXgpOwotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKTsKLQotICBpZiAoZmlsdGVyLT5wb29sKSB7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKGZpbHRlci0+cG9vbCwgRkFMU0UpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGZpbHRlci0+cG9vbCk7Ci0gIH0KLSAgZmlsdGVyLT5wb29sID0gcG9vbDsKLQotICAvKiBhbmQgYWN0aXZhdGUgKi8KLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKGZpbHRlci0+cG9vbCwgVFJVRSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHRhcmdldCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfZmx1c2ggKEdzdEdka1BpeGJ1ZkRlYyAqIGZpbHRlcikKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdka1BpeGJ1ZiAqcGl4YnVmOwotICBpbnQgeTsKLSAgZ3VpbnQ4ICpvdXRfcGl4OwotICBndWludDggKmluX3BpeDsKLSAgaW50IGluX3Jvd3N0cmlkZSwgb3V0X3Jvd3N0cmlkZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgbl9jaGFubmVsczsKLSAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLQotICBwaXhidWYgPSBnZGtfcGl4YnVmX2xvYWRlcl9nZXRfcGl4YnVmIChmaWx0ZXItPnBpeGJ1Zl9sb2FkZXIpOwotICBpZiAocGl4YnVmID09IE5VTEwpCi0gICAgZ290byBub19waXhidWY7Ci0KLSAgd2lkdGggPSBnZGtfcGl4YnVmX2dldF93aWR0aCAocGl4YnVmKTsKLSAgaGVpZ2h0ID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0IChwaXhidWYpOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZmaWx0ZXItPmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikgewotICAgIEdzdFZpZGVvSW5mbyBpbmZvOwotICAgIEdzdFZpZGVvRm9ybWF0IGZtdDsKLSAgICBHTGlzdCAqbDsKLQotICAgIEdTVF9ERUJVRyAoIlNldCBzaXplIHRvICVkeCVkIiwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBuX2NoYW5uZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyAocGl4YnVmKTsKLSAgICBzd2l0Y2ggKG5fY2hhbm5lbHMpIHsKLSAgICAgIGNhc2UgMzoKLSAgICAgICAgZm10ID0gR1NUX1ZJREVPX0ZPUk1BVF9SR0I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA0OgotICAgICAgICBmbXQgPSBHU1RfVklERU9fRk9STUFUX1JHQkE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ290byBjaGFubmVsc19ub3Rfc3VwcG9ydGVkOwotICAgIH0KLQotCi0gICAgZ3N0X3ZpZGVvX2luZm9faW5pdCAoJmluZm8pOwotICAgIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLCBmbXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGluZm8uZnBzX24gPSBmaWx0ZXItPmluX2Zwc19uOwotICAgIGluZm8uZnBzX2QgPSBmaWx0ZXItPmluX2Zwc19kOwotICAgIGNhcHMgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaW5mbyk7Ci0KLSAgICBmaWx0ZXItPmluZm8gPSBpbmZvOwotCi0gICAgZ3N0X3BhZF9zZXRfY2FwcyAoZmlsdGVyLT5zcmNwYWQsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGdzdF9nZGtfcGl4YnVmX2RlY19zZXR1cF9wb29sIChmaWx0ZXIsICZpbmZvKTsKLQotICAgIGZvciAobCA9IGZpbHRlci0+cGVuZGluZ19ldmVudHM7IGw7IGwgPSBsLT5uZXh0KQotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChmaWx0ZXItPnNyY3BhZCwgbC0+ZGF0YSk7Ci0gICAgZ19saXN0X2ZyZWUgKGZpbHRlci0+cGVuZGluZ19ldmVudHMpOwotICAgIGZpbHRlci0+cGVuZGluZ19ldmVudHMgPSBOVUxMOwotICB9Ci0KLSAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChmaWx0ZXItPnBvb2wsICZvdXRidWYsIE5VTEwpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gZmlsdGVyLT5sYXN0X3RpbWVzdGFtcDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgaW5fcGl4ID0gZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzIChwaXhidWYpOwotICBpbl9yb3dzdHJpZGUgPSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUgKHBpeGJ1Zik7Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmZyYW1lLCAmZmlsdGVyLT5pbmZvLCBvdXRidWYsIEdTVF9NQVBfV1JJVEUpOwotICBvdXRfcGl4ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKCZmcmFtZSwgMCk7Ci0gIG91dF9yb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFICgmZnJhbWUsIDApOwotCi0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgIG1lbWNweSAob3V0X3BpeCwgaW5fcGl4LCB3aWR0aCAqIEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKCZmcmFtZSwgMCkpOwotICAgIGluX3BpeCArPSBpbl9yb3dzdHJpZGU7Ci0gICAgb3V0X3BpeCArPSBvdXRfcm93c3RyaWRlOwotICB9Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOwotCi0gIEdTVF9ERUJVRyAoInB1c2hpbmcuLi4gJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpKTsKLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChmaWx0ZXItPnNyY3BhZCwgb3V0YnVmKTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImZsb3c6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub19waXhidWY6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsdGVyLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLCAoImVycm9yIGdldGluZyBwaXhidWYiKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1jaGFubmVsc19ub3Rfc3VwcG9ydGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGZpbHRlciwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCIlZCBjaGFubmVscyBub3Qgc3VwcG9ydGVkIiwgbl9jaGFubmVscykpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotbm9fYnVmZmVyOgotICB7Ci0gICAgR1NUX0RFQlVHICgiRmFpbGVkIHRvIGNyZWF0ZSBvdXRidWZmZXIgLSAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2dka19waXhidWZfZGVjX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzID0gR1NUX0ZMT1dfT0s7Ci0gIGdib29sZWFuIHJldCA9IFRSVUUsIGZvcndhcmQgPSBUUlVFOwotICBHc3RHZGtQaXhidWZEZWMgKnBpeGJ1ZjsKLQotICBwaXhidWYgPSBHU1RfR0RLX1BJWEJVRl9ERUMgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIHJldCA9IGdzdF9nZGtfcGl4YnVmX2RlY19zaW5rX3NldGNhcHMgKHBpeGJ1ZiwgY2Fwcyk7Ci0gICAgICBmb3J3YXJkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgaWYgKHBpeGJ1Zi0+cGl4YnVmX2xvYWRlciAhPSBOVUxMKSB7Ci0gICAgICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlIChwaXhidWYtPnBpeGJ1Zl9sb2FkZXIsIE5VTEwpOwotICAgICAgICByZXMgPSBnc3RfZ2RrX3BpeGJ1Zl9kZWNfZmx1c2ggKHBpeGJ1Zik7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAocGl4YnVmLT5waXhidWZfbG9hZGVyKSk7Ci0gICAgICAgIHBpeGJ1Zi0+cGl4YnVmX2xvYWRlciA9IE5VTEw7Ci0gICAgICAgIC8qIGFzIGxvbmcgYXMgd2UgZG9uJ3QgaGF2ZSBmbG93IHJldHVybnMgZm9yIGV2ZW50IGZ1bmN0aW9ucyB3ZSBuZWVkCi0gICAgICAgICAqIHRvIHBvc3QgYW4gZXJyb3IgaGVyZSwgb3IgdGhlIGFwcGxpY2F0aW9uIG1pZ2h0IG5ldmVyIGtub3cgdGhhdAotICAgICAgICAgKiB0aGluZ3MgZmFpbGVkICovCi0gICAgICAgIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0sgJiYgcmVzICE9IEdTVF9GTE9XX0ZMVVNISU5HCi0gICAgICAgICAgICAmJiByZXMgIT0gR1NUX0ZMT1dfRU9TICYmIHJlcyAhPSBHU1RfRkxPV19OT1RfTElOS0VEKSB7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAocGl4YnVmLCByZXMpOwotICAgICAgICAgIGZvcndhcmQgPSBGQUxTRTsKLSAgICAgICAgICByZXQgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdfbGlzdF9mcmVlX2Z1bGwgKHBpeGJ1Zi0+cGVuZGluZ19ldmVudHMsCi0gICAgICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICAgICAgcGl4YnVmLT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gICAgICAvKiBGYWxsIHRocm91Z2ggKi8KLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLSAgICAgIGlmIChzZWdtZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykKLSAgICAgICAgcGl4YnVmLT5wYWNrZXRpemVkID0gRkFMU0U7Ci0gICAgICBlbHNlCi0gICAgICAgIHBpeGJ1Zi0+cGFja2V0aXplZCA9IFRSVUU7Ci0gICAgICBpZiAocGl4YnVmLT5waXhidWZfbG9hZGVyICE9IE5VTEwpIHsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UgKHBpeGJ1Zi0+cGl4YnVmX2xvYWRlciwgTlVMTCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAocGl4YnVmLT5waXhidWZfbG9hZGVyKSk7Ci0gICAgICAgIHBpeGJ1Zi0+cGl4YnVmX2xvYWRlciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmIChmb3J3YXJkKSB7Ci0gICAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKHBpeGJ1Zi0+c3JjcGFkKSAmJgotICAgICAgICBHU1RfRVZFTlRfSVNfU0VSSUFMSVpFRCAoZXZlbnQpCi0gICAgICAgICYmIEdTVF9FVkVOVF9UWVBFIChldmVudCkgPiBHU1RfRVZFTlRfQ0FQUwotICAgICAgICAmJiBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpICE9IEdTVF9FVkVOVF9GTFVTSF9TVE9QCi0gICAgICAgICYmIEdTVF9FVkVOVF9UWVBFIChldmVudCkgIT0gR1NUX0VWRU5UX0VPUykgewotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIHBpeGJ1Zi0+cGVuZGluZ19ldmVudHMgPSBnX2xpc3RfcHJlcGVuZCAocGl4YnVmLT5wZW5kaW5nX2V2ZW50cywgZXZlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZ2RrX3BpeGJ1Zl9kZWNfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEdka1BpeGJ1ZkRlYyAqZmlsdGVyOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZmlsdGVyID0gR1NUX0dES19QSVhCVUZfREVDIChwYXJlbnQpOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkKLSAgICBmaWx0ZXItPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCi0gIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJidWZmZXIgd2l0aCB0czogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKGZpbHRlci0+cGl4YnVmX2xvYWRlciA9PSBOVUxMKQotICAgIGZpbHRlci0+cGl4YnVmX2xvYWRlciA9IGdka19waXhidWZfbG9hZGVyX25ldyAoKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJXcml0aW5nIGJ1ZmZlciBzaXplICVkIiwgKGdpbnQpIG1hcC5zaXplKTsKLSAgaWYgKCFnZGtfcGl4YnVmX2xvYWRlcl93cml0ZSAoZmlsdGVyLT5waXhidWZfbG9hZGVyLCBtYXAuZGF0YSwgbWFwLnNpemUsCi0gICAgICAgICAgJmVycm9yKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmIChmaWx0ZXItPnBhY2tldGl6ZWQgPT0gVFJVRSkgewotICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlIChmaWx0ZXItPnBpeGJ1Zl9sb2FkZXIsIE5VTEwpOwotICAgIHJldCA9IGdzdF9nZGtfcGl4YnVmX2RlY19mbHVzaCAoZmlsdGVyKTsKLSAgICBnX29iamVjdF91bnJlZiAoZmlsdGVyLT5waXhidWZfbG9hZGVyKTsKLSAgICBmaWx0ZXItPnBpeGJ1Zl9sb2FkZXIgPSBOVUxMOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsdGVyLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoImdka19waXhidWZfbG9hZGVyX3dyaXRlIGVycm9yOiAlcyIsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9nZGtfcGl4YnVmX2RlY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgR3N0R2RrUGl4YnVmRGVjICpkZWMgPSBHU1RfR0RLX1BJWEJVRl9ERUMgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICAvKiBkZWZhdWx0IHRvIHNpbmdsZSBpbWFnZSBtb2RlLCBzZXRjYXBzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBjYWxsZWQgKi8KLSAgICAgIGRlYy0+aW5fZnBzX24gPSAwOwotICAgICAgZGVjLT5pbl9mcHNfZCA9IDE7Ci0gICAgICBnc3RfdmlkZW9faW5mb19pbml0ICgmZGVjLT5pbmZvKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICByZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBkZWMtPmluX2Zwc19uID0gMDsKLSAgICAgIGRlYy0+aW5fZnBzX2QgPSAwOwotICAgICAgaWYgKGRlYy0+cG9vbCkgewotICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAoZGVjLT5wb29sLCBGQUxTRSk7Ci0gICAgICAgIGdzdF9vYmplY3RfcmVwbGFjZSAoKEdzdE9iamVjdCAqKikgJiBkZWMtPnBvb2wsIE5VTEwpOwotICAgICAgfQotICAgICAgZ19saXN0X2ZyZWVfZnVsbCAoZGVjLT5wZW5kaW5nX2V2ZW50cywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfZXZlbnRfdW5yZWYpOwotICAgICAgZGVjLT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gICAgICBpZiAoZGVjLT5waXhidWZfbG9hZGVyICE9IE5VTEwpIHsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UgKGRlYy0+cGl4YnVmX2xvYWRlciwgTlVMTCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoZGVjLT5waXhidWZfbG9hZGVyKSk7Ci0gICAgICAgIGRlYy0+cGl4YnVmX2xvYWRlciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmZGVjLmggYi9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxMmY0OC4uMDAwMDAwMAotLS0gYS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qIEdTdHJlYW1lciBHZGtQaXhidWYtYmFzZWQgaW1hZ2UgZGVjb2RlcgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0dES19QSVhCVUZfREVDX0hfXwotI2RlZmluZSBfX0dTVF9HREtfUElYQlVGX0RFQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0dES19QSVhCVUZfREVDCQkJXAotICAoZ3N0X2dka19waXhidWZfZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9HREtfUElYQlVGX0RFQyhvYmopCQkJCQkJXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfR0RLX1BJWEJVRl9ERUMsR3N0R2RrUGl4YnVmRGVjKSkKLSNkZWZpbmUgR1NUX0dES19QSVhCVUZfREVDX0NMQVNTKGtsYXNzKQkJCQkJXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9HREtfUElYQlVGX0RFQyxHc3RHZGtQaXhidWZEZWNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19HREtfUElYQlVGX0RFQyhvYmopCQkJCQlcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9HREtfUElYQlVGX0RFQykpCi0jZGVmaW5lIEdTVF9JU19HREtfUElYQlVGX0RFQ19DTEFTUyhrbGFzcykJCQkJXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9HREtfUElYQlVGX0RFQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RHZGtQaXhidWZEZWMgICAgICBHc3RHZGtQaXhidWZEZWM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0R2RrUGl4YnVmRGVjQ2xhc3MgR3N0R2RrUGl4YnVmRGVjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0R2RrUGl4YnVmRGVjCi17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQ7Ci0KLSAgR3N0Q2xvY2tUaW1lICAgICAgbGFzdF90aW1lc3RhbXA7Ci0gIEdka1BpeGJ1ZkxvYWRlciAgKnBpeGJ1Zl9sb2FkZXI7Ci0KLSAgZ2ludCBpbl9mcHNfbiwgaW5fZnBzX2Q7Ci0KLSAgR3N0VmlkZW9JbmZvICAgaW5mbzsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgR0xpc3QgICAgICAgICAqcGVuZGluZ19ldmVudHM7Ci0gIGdib29sZWFuICAgICAgIHBhY2tldGl6ZWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdEdka1BpeGJ1ZkRlY0NsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZ2RrX3BpeGJ1Zl9kZWNfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfR0RLX1BJWEJVRl9ERUNfSF9fICovCmRpZmYgLS1naXQgYS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmMgYi9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NjUwOTEuLjAwMDAwMDAKLS0tIGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmb3ZlcmxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjM1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBHZGtQaXhidWYgb3ZlcmxheQotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIFN1aXRlIDUwMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMzNSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWdka3BpeGJ1Zm92ZXJsYXkKLSAqCi0gKiBUaGUgZ2RrcGl4YnVmb3ZlcmxheSBlbGVtZW50IG92ZXJsYXlzIGFuIGltYWdlIGxvYWRlZCBmcm9tIGZpbGUgb250bwotICogYSB2aWRlbyBzdHJlYW0uCi0gKgotICogQ2hhbmdpbmcgdGhlIHBvc2l0aW9uaW5nIG9yIG92ZXJsYXkgd2lkdGggYW5kIGhlaWdodCBwcm9wZXJ0aWVzIGF0IHJ1bnRpbWUKLSAqIGlzIHN1cHBvcnRlZCwgYnV0IGl0IG1pZ2h0IGJlIHBydWRlbnQgdG8gdG8gcHJvdGVjdCB0aGUgcHJvcGVydHkgc2V0dGluZwotICogY29kZSB3aXRoIEdTVF9CQVNFX1RSQU5TRk9STV9MT0NLIGFuZCBHU1RfQkFTRV9UUkFOU0ZPUk1fVU5MT0NLLCBhcwotICogZ19vYmplY3Rfc2V0KCkgaXMgbm90IGF0b21pYyBmb3IgbXVsdGlwbGUgcHJvcGVydGllcyBwYXNzZWQgaW4gb25lIGdvLgotICoKLSAqIENoYW5naW5nIHRoZSBpbWFnZSBhdCBydW50aW1lIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgotICoKLSAqIE5lZ2F0aXZlIG9mZnNldHMgYXJlIGFsc28gbm90IHlldCBzdXBwb3J0ZWQuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyAhIGdka3BpeGJ1Zm92ZXJsYXkgbG9jYXRpb249aW1hZ2UucG5nICEgYXV0b3ZpZGVvc2luawotICogXXwKLSAqIE92ZXJsYXlzIHRoZSBpbWFnZSBpbiBpbWFnZS5wbmcgb250byB0aGUgdGVzdCB2aWRlbyBwaWN0dXJlIHByb2R1Y2VkIGJ5Ci0gKiB2aWRlb3Rlc3RzcmMuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RnZGtwaXhidWZvdmVybGF5LmgiCi0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdka3BpeGJ1Zm92ZXJsYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ2RrcGl4YnVmb3ZlcmxheV9kZWJ1ZwotCi1zdGF0aWMgdm9pZCBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9nZGtfcGl4YnVmX292ZXJsYXlfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dka19waXhidWZfb3ZlcmxheV9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9nZGtfcGl4YnVmX292ZXJsYXlfdHJhbnNmb3JtX2ZyYW1lX2lwIChHc3RWaWRlb0ZpbHRlciAqIGZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUpOwotc3RhdGljIHZvaWQgZ3N0X2dka19waXhidWZfb3ZlcmxheV9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogb3V0YnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3NldF9pbmZvIChHc3RWaWRlb0ZpbHRlciAqIGZpbHRlciwKLSAgICBHc3RDYXBzICogaW5jYXBzLCBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBvdXRfaW5mbyk7Ci1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9nZGtfcGl4YnVmX292ZXJsYXlfbG9hZF9pbWFnZSAoR3N0R2RrUGl4YnVmT3ZlcmxheSAqIG92ZXJsYXksCi0gICAgR0Vycm9yICoqIGVycik7Ci1zdGF0aWMgdm9pZCBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3NldF9waXhidWYgKEdzdEdka1BpeGJ1Zk92ZXJsYXkgKiBvdmVybGF5LAotICAgIEdka1BpeGJ1ZiAqIHBpeGJ1Zik7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0xPQ0FUSU9OLAotICBQUk9QX1BJWEJVRiwKLSAgUFJPUF9QT1NJVElPTklOR19NT0RFLAotICBQUk9QX09GRlNFVF9YLAotICBQUk9QX09GRlNFVF9ZLAotICBQUk9QX1JFTEFUSVZFX1gsCi0gIFBST1BfUkVMQVRJVkVfWSwKLSAgUFJPUF9PVkVSTEFZX1dJRFRILAotICBQUk9QX09WRVJMQVlfSEVJR0hULAotICBQUk9QX0FMUEhBCi19OwotCi0jZGVmaW5lIFZJREVPX0ZPUk1BVFMgInsgUkdCeCwgUkdCLCBCR1IsIEJHUngsIHhSR0IsIHhCR1IsICIgXAotICAgICJSR0JBLCBCR1JBLCBBUkdCLCBBQkdSLCBJNDIwLCBZVjEyLCBBWVVWLCBZVVkyLCBVWVZZLCAiIFwKLSAgICAidjMwOCwgdjIxMCwgdjIxNiwgWTQxQiwgWTQyQiwgWTQ0NCwgWVZZVSwgTlYxMiwgTlYyMSwgVVlWUCwgIiBcCi0gICAgIlJHQjE2LCBCR1IxNiwgUkdCMTUsIEJHUjE1LCBVWVZQLCBBNDIwLCBZVVY5LCBZVlU5LCAiIFwKLSAgICAiSVlVMSwgQVJHQjY0LCBBWVVWNjQsIHIyMTAsIEk0MjBfMTBMRSwgSTQyMF8xMEJFLCAiIFwKLSAgICAiR1JBWTgsIEdSQVkxNl9CRSwgR1JBWTE2X0xFIH0iCi0KLS8qIEZJWE1FIDIuMDogY2hhbmdlIHRvIGFic29sdXRlIHBvc2l0aW9uaW5nICovCi0jZGVmaW5lIERFRkFVTFRfUE9TSVRJT05JTkdfTU9ERSBcCi0gICAgR1NUX0dES19QSVhCVUZfUE9TSVRJT05JTkdfUElYRUxTX1JFTEFUSVZFX1RPX0VER0VTCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFIChWSURFT19GT1JNQVRTKSkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoVklERU9fRk9STUFUUykpCi0gICAgKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0R2RrUGl4YnVmT3ZlcmxheSwgZ3N0X2dka19waXhidWZfb3ZlcmxheSwKLSAgICBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi0jZGVmaW5lIEdTVF9UWVBFX0dES19QSVhCVUZfUE9TSVRJT05JTkdfTU9ERSBcCi0gICAgKGdzdF9nZGtfcGl4YnVmX3Bvc2l0aW9uaW5nX21vZGVfZ2V0X3R5cGUoKSkKLQotc3RhdGljIEdUeXBlCi1nc3RfZ2RrX3BpeGJ1Zl9wb3NpdGlvbmluZ19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBwb3NfbW9kZXNbXSA9IHsKLSAgICB7R1NUX0dES19QSVhCVUZfUE9TSVRJT05JTkdfUElYRUxTX1JFTEFUSVZFX1RPX0VER0VTLAotICAgICAgICAicGl4ZWxzLXJlbGF0aXZlLXRvLWVkZ2VzIiwgInBpeGVscy1yZWxhdGl2ZS10by1lZGdlcyJ9LAotICAgIHtHU1RfR0RLX1BJWEJVRl9QT1NJVElPTklOR19QSVhFTFNfQUJTT0xVVEUsICJwaXhlbHMtYWJzb2x1dGUiLAotICAgICAgICAicGl4ZWxzLWFic29sdXRlIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIHN0YXRpYyBHVHlwZSB0eXBlOyAgICAgICAgICAgIC8qIDAgKi8KLQotICBpZiAoIXR5cGUpIHsKLSAgICB0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEdka1BpeGJ1ZlBvc2l0aW9uaW5nTW9kZSIsIHBvc19tb2Rlcyk7Ci0gIH0KLQotICByZXR1cm4gdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nZGtfcGl4YnVmX292ZXJsYXlfY2xhc3NfaW5pdCAoR3N0R2RrUGl4YnVmT3ZlcmxheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZpZGVvZmlsdGVyX2NsYXNzID0gR1NUX1ZJREVPX0ZJTFRFUl9DTEFTUyAoa2xhc3MpOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJhc2V0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9nZGtfcGl4YnVmX292ZXJsYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2ZpbmFsaXplOwotCi0gIGJhc2V0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dka19waXhidWZfb3ZlcmxheV9zdGFydCk7Ci0gIGJhc2V0cmFuc19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3N0b3ApOwotCi0gIGJhc2V0cmFuc19jbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dka19waXhidWZfb3ZlcmxheV9iZWZvcmVfdHJhbnNmb3JtKTsKLQotICB2aWRlb2ZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9nZGtfcGl4YnVmX292ZXJsYXlfc2V0X2luZm8pOwotICB2aWRlb2ZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lX2lwID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3RyYW5zZm9ybV9mcmFtZV9pcCk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJsb2NhdGlvbiIsCi0gICAgICAgICAgIkxvY2F0aW9uIG9mIGltYWdlIGZpbGUgdG8gb3ZlcmxheSIsIE5VTEwsIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUKLSAgICAgICAgICB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfCBHX1BBUkFNX1JFQURXUklURQotICAgICAgICAgIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX09GRlNFVF9YLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm9mZnNldC14IiwgIlggT2Zmc2V0IiwKLSAgICAgICAgICAiRm9yIHBvc2l0aXZlIHZhbHVlLCBob3Jpem9udGFsIG9mZnNldCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyBmcm9tIgotICAgICAgICAgICIgbGVmdCBvZiB2aWRlbyBpbWFnZS4gRm9yIG5lZ2F0aXZlIHZhbHVlLCBob3Jpem9udGFsIG9mZnNldCBvZiBvdmVybGF5IgotICAgICAgICAgICIgaW1hZ2UgaW4gcGl4ZWxzIGZyb20gcmlnaHQgb2YgdmlkZW8gaW1hZ2UiLCBHX01JTklOVCwgR19NQVhJTlQsIDAsCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcgfCBHX1BBUkFNX1JFQURXUklURQotICAgICAgICAgIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX09GRlNFVF9ZLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm9mZnNldC15IiwgIlkgT2Zmc2V0IiwKLSAgICAgICAgICAiRm9yIHBvc2l0aXZlIHZhbHVlLCB2ZXJ0aWNhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBwaXhlbHMgZnJvbSIKLSAgICAgICAgICAiIHRvcCBvZiB2aWRlbyBpbWFnZS4gRm9yIG5lZ2F0aXZlIHZhbHVlLCB2ZXJ0aWNhbCBvZmZzZXQgb2Ygb3ZlcmxheSIKLSAgICAgICAgICAiIGltYWdlIGluIHBpeGVscyBmcm9tIGJvdHRvbSBvZiB2aWRlbyBpbWFnZSIsIEdfTUlOSU5ULCBHX01BWElOVCwgMCwKLSAgICAgICAgICBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8IEdfUEFSQU1fUkVBRFdSSVRFCi0gICAgICAgICAgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVMQVRJVkVfWCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJyZWxhdGl2ZS14IiwgIlJlbGF0aXZlIFggT2Zmc2V0IiwKLSAgICAgICAgICAiSG9yaXpvbnRhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBmcmFjdGlvbnMgb2YgdmlkZW8gaW1hZ2UgIgotICAgICAgICAgICJ3aWR0aCwgZnJvbSB0b3AtbGVmdCBjb3JuZXIgb2YgdmlkZW8gaW1hZ2UiLCAwLjAsIDEuMCwgMC4wLAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwgR19QQVJBTV9SRUFEV1JJVEUKLSAgICAgICAgICB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRUxBVElWRV9ZLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoInJlbGF0aXZlLXkiLCAiUmVsYXRpdmUgWSBPZmZzZXQiLAotICAgICAgICAgICJWZXJ0aWNhbCBvZmZzZXQgb2Ygb3ZlcmxheSBpbWFnZSBpbiBmcmFjdGlvbnMgb2YgdmlkZW8gaW1hZ2UgIgotICAgICAgICAgICJoZWlnaHQsIGZyb20gdG9wLWxlZnQgY29ybmVyIG9mIHZpZGVvIGltYWdlIiwgMC4wLCAxLjAsIDAuMCwKLSAgICAgICAgICBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8IEdfUEFSQU1fUkVBRFdSSVRFCi0gICAgICAgICAgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfT1ZFUkxBWV9XSURUSCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJvdmVybGF5LXdpZHRoIiwgIk92ZXJsYXkgV2lkdGgiLAotICAgICAgICAgICJXaWR0aCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyAoMCA9IHNhbWUgYXMgb3ZlcmxheSBpbWFnZSkiLCAwLAotICAgICAgICAgIEdfTUFYSU5ULCAwLAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwgR19QQVJBTV9SRUFEV1JJVEUKLSAgICAgICAgICB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9PVkVSTEFZX0hFSUdIVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJvdmVybGF5LWhlaWdodCIsICJPdmVybGF5IEhlaWdodCIsCi0gICAgICAgICAgIkhlaWdodCBvZiBvdmVybGF5IGltYWdlIGluIHBpeGVscyAoMCA9IHNhbWUgYXMgb3ZlcmxheSBpbWFnZSkiLCAwLAotICAgICAgICAgIEdfTUFYSU5ULCAwLAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HIHwgR19QQVJBTV9SRUFEV1JJVEUKLSAgICAgICAgICB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BTFBIQSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJhbHBoYSIsICJBbHBoYSIsICJHbG9iYWwgYWxwaGEgb2Ygb3ZlcmxheSBpbWFnZSIsCi0gICAgICAgICAgMC4wLCAxLjAsIDEuMCwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcKLSAgICAgICAgICB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0R2RrUGl4YnVmT3ZlcmxheTpwaXhidWY6Ci0gICAqCi0gICAqIEdka1BpeGJ1ZiBvYmplY3QgdG8gcmVuZGVyLgotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BJWEJVRiwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJwaXhidWYiLCAiUGl4YnVmIiwgIkdka1BpeGJ1ZiBvYmplY3QgdG8gcmVuZGVyIiwKLSAgICAgICAgICBHREtfVFlQRV9QSVhCVUYsIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HCi0gICAgICAgICAgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdEdka1BpeGJ1Zk92ZXJsYXk6cG9zaXRpb25pbmctbW9kZToKLSAgICoKLSAgICogUG9zaXRpb25pbmcgbW9kZSBvZiBvZmZzZXQteCBhbmQgb2Zmc2V0LXkgcHJvcGVydGllcy4gRGV0ZXJtaW5lcyBob3cKLSAgICogbmVnYXRpdmUgeC95IG9mZnNldHMgd2lsbCBiZSBpbnRlcnByZXRlZC4gQnkgZGVmYXVsdCBuZWdhdGl2ZSB2YWx1ZXMKLSAgICogYXJlIGZvciBwb3NpdGlvbmluZyByZWxhdGl2ZSB0byB0aGUgcmlnaHQvYm90dG9tIGVkZ2Ugb2YgdGhlIHZpZGVvCi0gICAqIGltYWdlLCBidXQgeW91IGNhbiB1c2UgdGhpcyBwcm9wZXJ0eSB0byBzZWxlY3QgYWJzb2x1dGUgcG9zaXRpb25pbmcKLSAgICogcmVsYXRpdmUgdG8gYSAoMCwgMCkgb3JpZ2luIGluIHRoZSB0b3AtbGVmdCBjb3JuZXIuIFRoYXQgd2F5IG5lZ2F0aXZlCi0gICAqIG9mZnNldHMgd2lsbCBiZSB0byB0aGUgbGVmdC9hYm92ZSB0aGUgdmlkZW8gaW1hZ2UsIHdoaWNoIGFsbG93cyB5b3UgdG8KLSAgICogc21vb3RobHkgc2xpZGUgbG9nb3MgaW50byBhbmQgb3V0IG9mIHRoZSBmcmFtZSBpZiBkZXNpcmVkLgotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BPU0lUSU9OSU5HX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInBvc2l0aW9uaW5nLW1vZGUiLCAiUG9zaXRpb25pbmcgbW9kZSIsCi0gICAgICAgICAgIlBvc2l0aW9uaW5nIG1vZGUgb2Ygb2Zmc2V0LXggYW5kIG9mZnNldC15IHByb3BlcnRpZXMiLAotICAgICAgICAgIEdTVF9UWVBFX0dES19QSVhCVUZfUE9TSVRJT05JTkdfTU9ERSwgREVGQVVMVF9QT1NJVElPTklOR19NT0RFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIkdka1BpeGJ1ZiBPdmVybGF5IiwgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIk92ZXJsYXkgYW4gaW1hZ2Ugb250byBhIHZpZGVvIHN0cmVhbSIsCi0gICAgICAiVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4iKTsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdka3BpeGJ1Zm92ZXJsYXlfZGVidWcsICJnZGtwaXhidWZvdmVybGF5IiwgMCwKLSAgICAgICJkZWJ1ZyBjYXRlZ29yeSBmb3IgZ2RrcGl4YnVmb3ZlcmxheSBlbGVtZW50Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2luaXQgKEdzdEdka1BpeGJ1Zk92ZXJsYXkgKiBvdmVybGF5KQotewotICBvdmVybGF5LT5vZmZzZXRfeCA9IDA7Ci0gIG92ZXJsYXktPm9mZnNldF95ID0gMDsKLQotICBvdmVybGF5LT5yZWxhdGl2ZV94ID0gMC4wOwotICBvdmVybGF5LT5yZWxhdGl2ZV95ID0gMC4wOwotCi0gIG92ZXJsYXktPnBvc2l0aW9uaW5nX21vZGUgPSBERUZBVUxUX1BPU0lUSU9OSU5HX01PREU7Ci0KLSAgb3ZlcmxheS0+b3ZlcmxheV93aWR0aCA9IDA7Ci0gIG92ZXJsYXktPm92ZXJsYXlfaGVpZ2h0ID0gMDsKLQotICBvdmVybGF5LT5hbHBoYSA9IDEuMDsKLQotICBvdmVybGF5LT5waXhidWYgPSBOVUxMOwotfQotCi12b2lkCi1nc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0R2RrUGl4YnVmT3ZlcmxheSAqb3ZlcmxheSA9IEdTVF9HREtfUElYQlVGX09WRVJMQVkgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvdmVybGF5KTsKLQotICBzd2l0Y2ggKHByb3BlcnR5X2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOnsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgIGdfZnJlZSAob3ZlcmxheS0+bG9jYXRpb24pOwotICAgICAgb3ZlcmxheS0+bG9jYXRpb24gPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGlmICghZ3N0X2dka19waXhidWZfb3ZlcmxheV9sb2FkX2ltYWdlIChvdmVybGF5LCAmZXJyKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChvdmVybGF5LCAiQ291bGQgbm90IGxvYWQgb3ZlcmxheSBpbWFnZTogJXMiLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9QSVhCVUY6ewotICAgICAgR2RrUGl4YnVmICpwaXhidWYgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbHVlKTsKLQotICAgICAgaWYgKG92ZXJsYXktPnBpeGJ1ZiAhPSBOVUxMKQotICAgICAgICBnX29iamVjdF91bnJlZiAob3ZlcmxheS0+cGl4YnVmKTsKLSAgICAgIG92ZXJsYXktPnBpeGJ1ZiA9IGdfb2JqZWN0X3JlZiAocGl4YnVmKTsKLSAgICAgIGdzdF9nZGtfcGl4YnVmX292ZXJsYXlfc2V0X3BpeGJ1ZiAob3ZlcmxheSwgZ19vYmplY3RfcmVmIChwaXhidWYpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfT0ZGU0VUX1g6Ci0gICAgICBvdmVybGF5LT5vZmZzZXRfeCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgb3ZlcmxheS0+dXBkYXRlX2NvbXBvc2l0aW9uID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9PRkZTRVRfWToKLSAgICAgIG92ZXJsYXktPm9mZnNldF95ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBvdmVybGF5LT51cGRhdGVfY29tcG9zaXRpb24gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFTEFUSVZFX1g6Ci0gICAgICBvdmVybGF5LT5yZWxhdGl2ZV94ID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBvdmVybGF5LT51cGRhdGVfY29tcG9zaXRpb24gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFTEFUSVZFX1k6Ci0gICAgICBvdmVybGF5LT5yZWxhdGl2ZV95ID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBvdmVybGF5LT51cGRhdGVfY29tcG9zaXRpb24gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX09WRVJMQVlfV0lEVEg6Ci0gICAgICBvdmVybGF5LT5vdmVybGF5X3dpZHRoID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBvdmVybGF5LT51cGRhdGVfY29tcG9zaXRpb24gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX09WRVJMQVlfSEVJR0hUOgotICAgICAgb3ZlcmxheS0+b3ZlcmxheV9oZWlnaHQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIG92ZXJsYXktPnVwZGF0ZV9jb21wb3NpdGlvbiA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQUxQSEE6Ci0gICAgICBvdmVybGF5LT5hbHBoYSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgb3ZlcmxheS0+dXBkYXRlX2NvbXBvc2l0aW9uID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1NJVElPTklOR19NT0RFOgotICAgICAgb3ZlcmxheS0+cG9zaXRpb25pbmdfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIG92ZXJsYXktPnVwZGF0ZV9jb21wb3NpdGlvbiA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvdmVybGF5KTsKLX0KLQotdm9pZAotZ3N0X2dka19waXhidWZfb3ZlcmxheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BlcnR5X2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEdka1BpeGJ1Zk92ZXJsYXkgKm92ZXJsYXkgPSBHU1RfR0RLX1BJWEJVRl9PVkVSTEFZIChvYmplY3QpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob3ZlcmxheSk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIG92ZXJsYXktPmxvY2F0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QSVhCVUY6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBvdmVybGF5LT5waXhidWYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX09GRlNFVF9YOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgb3ZlcmxheS0+b2Zmc2V0X3gpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX09GRlNFVF9ZOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgb3ZlcmxheS0+b2Zmc2V0X3kpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFTEFUSVZFX1g6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBvdmVybGF5LT5yZWxhdGl2ZV94KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUxBVElWRV9ZOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgb3ZlcmxheS0+cmVsYXRpdmVfeSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfT1ZFUkxBWV9XSURUSDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIG92ZXJsYXktPm92ZXJsYXlfd2lkdGgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX09WRVJMQVlfSEVJR0hUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgb3ZlcmxheS0+b3ZlcmxheV9oZWlnaHQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FMUEhBOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgb3ZlcmxheS0+YWxwaGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BPU0lUSU9OSU5HX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgb3ZlcmxheS0+cG9zaXRpb25pbmdfbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BlcnR5X2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvdmVybGF5KTsKLX0KLQotdm9pZAotZ3N0X2dka19waXhidWZfb3ZlcmxheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0R2RrUGl4YnVmT3ZlcmxheSAqb3ZlcmxheSA9IEdTVF9HREtfUElYQlVGX09WRVJMQVkgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChvdmVybGF5LT5sb2NhdGlvbik7Ci0gIG92ZXJsYXktPmxvY2F0aW9uID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2dka19waXhidWZfb3ZlcmxheV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2xvYWRfaW1hZ2UgKEdzdEdka1BpeGJ1Zk92ZXJsYXkgKiBvdmVybGF5LCBHRXJyb3IgKiogZXJyKQotewotICBHZGtQaXhidWYgKnBpeGJ1ZjsKLQotICBwaXhidWYgPSBnZGtfcGl4YnVmX25ld19mcm9tX2ZpbGUgKG92ZXJsYXktPmxvY2F0aW9uLCBlcnIpOwotCi0gIGlmIChwaXhidWYgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ3N0X2dka19waXhidWZfb3ZlcmxheV9zZXRfcGl4YnVmIChvdmVybGF5LCBwaXhidWYpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyogVGFrZXMgb3duZXJzaGlwIG9mIHBpeGJ1ZjsgY2FsbCB3aXRoIE9CSkVDVF9MT0NLICovCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfb3ZlcmxheV9zZXRfcGl4YnVmIChHc3RHZGtQaXhidWZPdmVybGF5ICogb3ZlcmxheSwKLSAgICBHZGtQaXhidWYgKiBwaXhidWYpCi17Ci0gIEdzdFZpZGVvTWV0YSAqdmlkZW9fbWV0YTsKLSAgZ3VpbnQ4ICpwaXhlbHMsICpwOwotICBnaW50IHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgdywgaCwgcGxhbmU7Ci0KLSAgaWYgKCFnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEgKHBpeGJ1ZikpIHsKLSAgICBHZGtQaXhidWYgKmFscGhhX3BpeGJ1ZjsKLQotICAgIC8qIEZJWE1FOiB3ZSBjb3VsZCBkbyB0aGlzIG11Y2ggbW9yZSBlZmZpY2llbnRseSBvdXJzZWx2ZXMgYmVsb3csIGJ1dAotICAgICAqIHdlJ3JlIGxhenkgZm9yIG5vdyAqLwotICAgIC8qIEZJWE1FOiBwZXJoYXBzIGV4cG9zZSBzdWJzdGl0dXRlX2NvbG9yIHZpYSBwcm9wZXJ0aWVzICovCi0gICAgYWxwaGFfcGl4YnVmID0gZ2RrX3BpeGJ1Zl9hZGRfYWxwaGEgKHBpeGJ1ZiwgRkFMU0UsIDAsIDAsIDApOwotICAgIGdfb2JqZWN0X3VucmVmIChwaXhidWYpOwotICAgIHBpeGJ1ZiA9IGFscGhhX3BpeGJ1ZjsKLSAgfQotCi0gIHdpZHRoID0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGggKHBpeGJ1Zik7Ci0gIGhlaWdodCA9IGdka19waXhidWZfZ2V0X2hlaWdodCAocGl4YnVmKTsKLSAgc3RyaWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlIChwaXhidWYpOwotICBwaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMgKHBpeGJ1Zik7Ci0KLSAgLyogdGhlIG1lbW9yeSBsYXlvdXQgaW4gR2RrUGl4YnVmIGlzIFItRy1CLUEsIHdlIHdhbnQ6Ci0gICAqICAtIEItRy1SLUEgb24gbGl0dGxlLWVuZGlhbiBwbGF0Zm9ybXMKLSAgICogIC0gQS1SLUctQiBvbiBiaWctZW5kaWFuIHBsYXRmb3JtcwotICAgKi8KLSAgZm9yIChoID0gMDsgaCA8IGhlaWdodDsgKytoKSB7Ci0gICAgcCA9IHBpeGVscyArIChoICogc3RyaWRlKTsKLSAgICBmb3IgKHcgPSAwOyB3IDwgd2lkdGg7ICsrdykgewotICAgICAgZ3VpbnQ4IHRtcDsKLQotICAgICAgLyogUi1HLUItQSA9PT4gQi1HLVItQSAqLwotICAgICAgdG1wID0gcFswXTsKLSAgICAgIHBbMF0gPSBwWzJdOwotICAgICAgcFsyXSA9IHRtcDsKLQotICAgICAgaWYgKEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4pIHsKLSAgICAgICAgLyogQi1HLVItQSA9PT4gQS1SLUctQiAqLwotICAgICAgICAvKiB3ZSBjYW4gcHJvYmFibHkgYXNzdW1lIHNhbmUgYWxpZ25tZW50ICovCi0gICAgICAgICooKGd1aW50MzIgKikgcCkgPSBHVUlOVDMyX1NXQVBfTEVfQkUgKCooKGd1aW50MzIgKikgcCkpOwotICAgICAgfQotCi0gICAgICBwICs9IDQ7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG92ZXJsYXktPnBpeGVscykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdmVybGF5LT5waXhlbHMpOwotCi0gIC8qIGFzc3VtZSB3ZSBoYXZlIHJvdyBwYWRkaW5nIGV2ZW4gZm9yIHRoZSBsYXN0IHJvdyAqLwotICAvKiB0cmFuc2ZlciBvd25lcnNoaXAgb2YgcGl4YnVmIHRvIHRoZSBidWZmZXIgKi8KLSAgb3ZlcmxheS0+cGl4ZWxzID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksCi0gICAgICBwaXhlbHMsIGhlaWdodCAqIHN0cmlkZSwgMCwgaGVpZ2h0ICogc3RyaWRlLCBwaXhidWYsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdfb2JqZWN0X3VucmVmKTsKLQotICB2aWRlb19tZXRhID0gZ3N0X2J1ZmZlcl9hZGRfdmlkZW9fbWV0YSAob3ZlcmxheS0+cGl4ZWxzLAotICAgICAgR1NUX1ZJREVPX0ZSQU1FX0ZMQUdfTk9ORSwgR1NUX1ZJREVPX09WRVJMQVlfQ09NUE9TSVRJT05fRk9STUFUX1JHQiwKLSAgICAgIHdpZHRoLCBoZWlnaHQpOwotCi0gIGZvciAocGxhbmUgPSAwOyBwbGFuZSA8IHZpZGVvX21ldGEtPm5fcGxhbmVzOyArK3BsYW5lKQotICAgIHZpZGVvX21ldGEtPnN0cmlkZVtwbGFuZV0gPSBzdHJpZGU7Ci0KLSAgb3ZlcmxheS0+dXBkYXRlX2NvbXBvc2l0aW9uID0gVFJVRTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKG92ZXJsYXksICJVcGRhdGVkIHBpeGJ1ZiwgJWQgeCAlZCIsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9nZGtfcGl4YnVmX292ZXJsYXlfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0R2RrUGl4YnVmT3ZlcmxheSAqb3ZlcmxheSA9IEdTVF9HREtfUElYQlVGX09WRVJMQVkgKHRyYW5zKTsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIGlmIChvdmVybGF5LT5sb2NhdGlvbiAhPSBOVUxMKSB7Ci0gICAgaWYgKCFnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2xvYWRfaW1hZ2UgKG92ZXJsYXksICZlcnIpKQotICAgICAgZ290byBlcnJvcl9sb2FkaW5nX2ltYWdlOwotCi0gICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAodHJhbnMsIEZBTFNFKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG92ZXJsYXksICJubyBpbWFnZSBsb2NhdGlvbiBzZXQsIGRvaW5nIG5vdGhpbmciKTsKLSAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoICh0cmFucywgVFJVRSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotLyogRVJST1JTICovCi1lcnJvcl9sb2FkaW5nX2ltYWdlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG92ZXJsYXksIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICgiQ291bGQgbm90IGxvYWQgb3ZlcmxheSBpbWFnZS4iKSwgKCIlcyIsIGVyci0+bWVzc2FnZSkpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0R2RrUGl4YnVmT3ZlcmxheSAqb3ZlcmxheSA9IEdTVF9HREtfUElYQlVGX09WRVJMQVkgKHRyYW5zKTsKLQotICBpZiAob3ZlcmxheS0+Y29tcCkgewotICAgIGdzdF92aWRlb19vdmVybGF5X2NvbXBvc2l0aW9uX3VucmVmIChvdmVybGF5LT5jb21wKTsKLSAgICBvdmVybGF5LT5jb21wID0gTlVMTDsKLSAgfQotCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJm92ZXJsYXktPnBpeGVscywgTlVMTCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2dka19waXhidWZfb3ZlcmxheV9zZXRfaW5mbyAoR3N0VmlkZW9GaWx0ZXIgKiBmaWx0ZXIsIEdzdENhcHMgKiBpbmNhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dGNhcHMsIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKQotewotICBHU1RfSU5GT19PQkpFQ1QgKGZpbHRlciwgImNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nZGtfcGl4YnVmX292ZXJsYXlfdXBkYXRlX2NvbXBvc2l0aW9uIChHc3RHZGtQaXhidWZPdmVybGF5ICogb3ZlcmxheSkKLXsKLSAgR3N0R2RrUGl4YnVmUG9zaXRpb25pbmdNb2RlIHBvc2l0aW9uaW5nX21vZGU7Ci0gIEdzdFZpZGVvT3ZlcmxheUNvbXBvc2l0aW9uICpjb21wOwotICBHc3RWaWRlb092ZXJsYXlSZWN0YW5nbGUgKnJlY3Q7Ci0gIEdzdFZpZGVvTWV0YSAqb3ZlcmxheV9tZXRhOwotICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgdmlkZW9fd2lkdGggPQotICAgICAgR1NUX1ZJREVPX0lORk9fV0lEVEggKCZHU1RfVklERU9fRklMVEVSIChvdmVybGF5KS0+aW5faW5mbyk7Ci0gIGdpbnQgdmlkZW9faGVpZ2h0ID0KLSAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJkdTVF9WSURFT19GSUxURVIgKG92ZXJsYXkpLT5pbl9pbmZvKTsKLQotICBpZiAob3ZlcmxheS0+Y29tcCkgewotICAgIGdzdF92aWRlb19vdmVybGF5X2NvbXBvc2l0aW9uX3VucmVmIChvdmVybGF5LT5jb21wKTsKLSAgICBvdmVybGF5LT5jb21wID0gTlVMTDsKLSAgfQotCi0gIGlmIChvdmVybGF5LT5hbHBoYSA9PSAwLjAgfHwgb3ZlcmxheS0+cGl4ZWxzID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIG92ZXJsYXlfbWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX21ldGEgKG92ZXJsYXktPnBpeGVscyk7Ci0KLSAgcG9zaXRpb25pbmdfbW9kZSA9IG92ZXJsYXktPnBvc2l0aW9uaW5nX21vZGU7Ci0KLSAgd2lkdGggPSBvdmVybGF5LT5vdmVybGF5X3dpZHRoOwotICBpZiAod2lkdGggPT0gMCkKLSAgICB3aWR0aCA9IG92ZXJsYXlfbWV0YS0+d2lkdGg7Ci0KLSAgaGVpZ2h0ID0gb3ZlcmxheS0+b3ZlcmxheV9oZWlnaHQ7Ci0gIGlmIChoZWlnaHQgPT0gMCkKLSAgICBoZWlnaHQgPSBvdmVybGF5X21ldGEtPmhlaWdodDsKLQotICBpZiAocG9zaXRpb25pbmdfbW9kZSA9PSBHU1RfR0RLX1BJWEJVRl9QT1NJVElPTklOR19QSVhFTFNfQUJTT0xVVEUpIHsKLSAgICB4ID0gb3ZlcmxheS0+b2Zmc2V0X3ggKyAob3ZlcmxheS0+cmVsYXRpdmVfeCAqIHdpZHRoKTsKLSAgICB5ID0gb3ZlcmxheS0+b2Zmc2V0X3kgKyAob3ZlcmxheS0+cmVsYXRpdmVfeSAqIGhlaWdodCk7Ci0gIH0gZWxzZSB7Ci0gICAgeCA9IG92ZXJsYXktPm9mZnNldF94IDwgMCA/Ci0gICAgICAgIHZpZGVvX3dpZHRoICsgb3ZlcmxheS0+b2Zmc2V0X3ggLSB3aWR0aCArCi0gICAgICAgIChvdmVybGF5LT5yZWxhdGl2ZV94ICogdmlkZW9fd2lkdGgpIDoKLSAgICAgICAgb3ZlcmxheS0+b2Zmc2V0X3ggKyAob3ZlcmxheS0+cmVsYXRpdmVfeCAqIHZpZGVvX3dpZHRoKTsKLSAgICB5ID0gb3ZlcmxheS0+b2Zmc2V0X3kgPCAwID8KLSAgICAgICAgdmlkZW9faGVpZ2h0ICsgb3ZlcmxheS0+b2Zmc2V0X3kgLSBoZWlnaHQgKwotICAgICAgICAob3ZlcmxheS0+cmVsYXRpdmVfeSAqIHZpZGVvX2hlaWdodCkgOgotICAgICAgICBvdmVybGF5LT5vZmZzZXRfeSArIChvdmVybGF5LT5yZWxhdGl2ZV95ICogdmlkZW9faGVpZ2h0KTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG92ZXJsYXksICJvdmVybGF5IGltYWdlIGRpbWVuc2lvbnM6ICVkIHggJWQsIGFscGhhPSUuMmYiLAotICAgICAgb3ZlcmxheV9tZXRhLT53aWR0aCwgb3ZlcmxheV9tZXRhLT5oZWlnaHQsIG92ZXJsYXktPmFscGhhKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAob3ZlcmxheSwgInByb3BlcnRpZXM6IHgseTogJWQsJWQgKCVnJSUsJWclJSkgLSBXeEg6ICVkeCVkIiwKLSAgICAgIG92ZXJsYXktPm9mZnNldF94LCBvdmVybGF5LT5vZmZzZXRfeSwKLSAgICAgIG92ZXJsYXktPnJlbGF0aXZlX3ggKiAxMDAuMCwgb3ZlcmxheS0+cmVsYXRpdmVfeSAqIDEwMC4wLAotICAgICAgb3ZlcmxheS0+b3ZlcmxheV9oZWlnaHQsIG92ZXJsYXktPm92ZXJsYXlfd2lkdGgpOwotICBHU1RfREVCVUdfT0JKRUNUIChvdmVybGF5LCAib3ZlcmxheSByZW5kZXJlZDogJWQgeCAlZCBAICVkLCVkIChvbnRvICVkIHggJWQpIiwKLSAgICAgIHdpZHRoLCBoZWlnaHQsIHgsIHksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwotCi0gIHJlY3QgPSBnc3RfdmlkZW9fb3ZlcmxheV9yZWN0YW5nbGVfbmV3X3JhdyAob3ZlcmxheS0+cGl4ZWxzLAotICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgR1NUX1ZJREVPX09WRVJMQVlfRk9STUFUX0ZMQUdfTk9ORSk7Ci0KLSAgaWYgKG92ZXJsYXktPmFscGhhICE9IDEuMCkKLSAgICBnc3RfdmlkZW9fb3ZlcmxheV9yZWN0YW5nbGVfc2V0X2dsb2JhbF9hbHBoYSAocmVjdCwgb3ZlcmxheS0+YWxwaGEpOwotCi0gIGNvbXAgPSBnc3RfdmlkZW9fb3ZlcmxheV9jb21wb3NpdGlvbl9uZXcgKHJlY3QpOwotICBnc3RfdmlkZW9fb3ZlcmxheV9yZWN0YW5nbGVfdW5yZWYgKHJlY3QpOwotCi0gIG92ZXJsYXktPmNvbXAgPSBjb21wOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfb3ZlcmxheV9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogb3V0YnVmKQotewotICBHc3RDbG9ja1RpbWUgc3RyZWFtX3RpbWU7Ci0KLSAgc3RyZWFtX3RpbWUgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnRyYW5zLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAodHJhbnMpLCBzdHJlYW1fdGltZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X3RyYW5zZm9ybV9mcmFtZV9pcCAoR3N0VmlkZW9GaWx0ZXIgKiBmaWx0ZXIsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQotewotICBHc3RHZGtQaXhidWZPdmVybGF5ICpvdmVybGF5ID0gR1NUX0dES19QSVhCVUZfT1ZFUkxBWSAoZmlsdGVyKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG92ZXJsYXkpOwotCi0gIGlmIChHX1VOTElLRUxZIChvdmVybGF5LT51cGRhdGVfY29tcG9zaXRpb24pKSB7Ci0gICAgZ3N0X2dka19waXhidWZfb3ZlcmxheV91cGRhdGVfY29tcG9zaXRpb24gKG92ZXJsYXkpOwotICAgIG92ZXJsYXktPnVwZGF0ZV9jb21wb3NpdGlvbiA9IEZBTFNFOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG92ZXJsYXkpOwotCi0gIGlmIChvdmVybGF5LT5jb21wICE9IE5VTEwpCi0gICAgZ3N0X3ZpZGVvX292ZXJsYXlfY29tcG9zaXRpb25fYmxlbmQgKG92ZXJsYXktPmNvbXAsIGZyYW1lKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmggYi9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZvdmVybGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YjkxOWIuLjAwMDAwMDAKLS0tIGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmb3ZlcmxheS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyogR1N0cmVhbWVyIEdka1BpeGJ1ZiBvdmVybGF5Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX0dTVF9HREtfUElYQlVGX09WRVJMQVlfSF8KLSNkZWZpbmUgX0dTVF9HREtfUElYQlVGX09WRVJMQVlfSF8KLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby1vdmVybGF5LWNvbXBvc2l0aW9uLmg+Ci0KLSNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0dES19QSVhCVUZfT1ZFUkxBWSAgIChnc3RfZ2RrX3BpeGJ1Zl9vdmVybGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9HREtfUElYQlVGX09WRVJMQVkob2JqKSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9HREtfUElYQlVGX09WRVJMQVksR3N0R2RrUGl4YnVmT3ZlcmxheSkpCi0jZGVmaW5lIEdTVF9HREtfUElYQlVGX09WRVJMQVlfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfR0RLX1BJWEJVRl9PVkVSTEFZLEdzdEdka1BpeGJ1Zk92ZXJsYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19HREtfUElYQlVGX09WRVJMQVkob2JqKSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9HREtfUElYQlVGX09WRVJMQVkpKQotI2RlZmluZSBHU1RfSVNfR0RLX1BJWEJVRl9PVkVSTEFZX0NMQVNTKG9iaikgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9HREtfUElYQlVGX09WRVJMQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0R2RrUGl4YnVmT3ZlcmxheSBHc3RHZGtQaXhidWZPdmVybGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdka1BpeGJ1Zk92ZXJsYXlDbGFzcyBHc3RHZGtQaXhidWZPdmVybGF5Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9HREtfUElYQlVGX1BPU0lUSU9OSU5HX1BJWEVMU19SRUxBVElWRV9UT19FREdFUywKLSAgR1NUX0dES19QSVhCVUZfUE9TSVRJT05JTkdfUElYRUxTX0FCU09MVVRFCi19IEdzdEdka1BpeGJ1ZlBvc2l0aW9uaW5nTW9kZTsKLQotLyoqCi0gKiBHc3RHZGtQaXhidWZPdmVybGF5OgotICoKLSAqIFRoZSBvcGFxdWUgZWxlbWVudCBpbnN0YW5jZSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0R2RrUGl4YnVmT3ZlcmxheQotewotICBHc3RWaWRlb0ZpbHRlciAgICAgICAgICAgICAgIHZpZGVvZmlsdGVyOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2NoYXIgICAgICAgICAgICAgICAgICAgICAgKiBsb2NhdGlvbjsKLQotICAvKiBwaXhidWYgc2V0IHZpYSBwaXhidWYgcHJvcGVydHkgKi8KLSAgR2RrUGl4YnVmICAgICAgICAgICAgICAgICAgKiBwaXhidWY7Ci0KLSAgZ2ludCAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfeDsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfeTsKLQotICBnZG91YmxlICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlX3g7Ci0gIGdkb3VibGUgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVfeTsKLQotICBHc3RHZGtQaXhidWZQb3NpdGlvbmluZ01vZGUgIHBvc2l0aW9uaW5nX21vZGU7Ci0KLSAgZ2ludCAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5X3dpZHRoOwotICBnaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXlfaGVpZ2h0OwotCi0gIGdkb3VibGUgICAgICAgICAgICAgICAgICAgICAgYWxwaGE7Ci0KLSAgLyogdGhlIGxvYWRlZCBpbWFnZSwgYXMgQkdSQS9BUkdCIHBpeGVscywgd2l0aCBHc3RWaWRlb01ldGEgKi8KLSAgR3N0QnVmZmVyICAgICAgICAgICAgICAgICAgKiBwaXhlbHM7ICAgICAgICAgICAgICAgLyogT0JKRUNUX0xPQ0sgKi8KLQotICBHc3RWaWRlb092ZXJsYXlDb21wb3NpdGlvbiAqIGNvbXA7Ci0KLSAgLyogcmVuZGVyIHBvc2l0aW9uIG9yIGRpbWVuc2lvbiBoYXMgY2hhbmdlZCAqLwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9jb21wb3NpdGlvbjsKLX07Ci0KLXN0cnVjdCBfR3N0R2RrUGl4YnVmT3ZlcmxheUNsYXNzCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgIHZpZGVvZmlsdGVyX2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2dka19waXhidWZfb3ZlcmxheV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmcGx1Z2luLmMgYi9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZwbHVnaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY1OGI5ZC4uMDAwMDAwMAotLS0gYS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZwbHVnaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKiBHU3RyZWFtZXIgR2RrUGl4YnVmIHBsdWdpbgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RnZGtwaXhidWZkZWMuaCIKLSNpbmNsdWRlICJnc3RnZGtwaXhidWZvdmVybGF5LmgiCi0jaW5jbHVkZSAiZ3N0Z2RrcGl4YnVmc2luay5oIgotCi0KLSNpZiAwCi1zdGF0aWMgdm9pZCBnc3RfZ2RrX3BpeGJ1Zl90eXBlX2ZpbmQgKEdzdFR5cGVGaW5kICogdGYsIGdwb2ludGVyIGlnbm9yZSk7Ci0KLSNkZWZpbmUgR1NUX0dES19QSVhCVUZfVFlQRV9GSU5EX1NJWkUgMTAyNAotCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfdHlwZV9maW5kIChHc3RUeXBlRmluZCAqIHRmLCBncG9pbnRlciBpZ25vcmUpCi17Ci0gIGd1aW50OCAqZGF0YTsKLSAgR2RrUGl4YnVmTG9hZGVyICpwaXhidWZfbG9hZGVyOwotICBHZGtQaXhidWZGb3JtYXQgKmZvcm1hdDsKLQotICBkYXRhID0gZ3N0X3R5cGVfZmluZF9wZWVrICh0ZiwgMCwgR1NUX0dES19QSVhCVUZfVFlQRV9GSU5EX1NJWkUpOwotICBpZiAoZGF0YSA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUcgKCJjcmVhdGluZyBuZXcgbG9hZGVyIik7Ci0KLSAgcGl4YnVmX2xvYWRlciA9IGdka19waXhidWZfbG9hZGVyX25ldyAoKTsKLQotICBnZGtfcGl4YnVmX2xvYWRlcl93cml0ZSAocGl4YnVmX2xvYWRlciwgZGF0YSwgR1NUX0dES19QSVhCVUZfVFlQRV9GSU5EX1NJWkUsCi0gICAgICBOVUxMKTsKLQotICBmb3JtYXQgPSBnZGtfcGl4YnVmX2xvYWRlcl9nZXRfZm9ybWF0IChwaXhidWZfbG9hZGVyKTsKLQotICBpZiAoZm9ybWF0ICE9IE5VTEwpIHsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIGdjaGFyICoqcDsKLSAgICBnY2hhciAqKm1saXN0ID0gZ2RrX3BpeGJ1Zl9mb3JtYXRfZ2V0X21pbWVfdHlwZXMgKGZvcm1hdCk7Ci0KLSAgICBmb3IgKHAgPSBtbGlzdDsgKnA7ICsrcCkgewotICAgICAgR1NUX0RFQlVHICgic3VnZ2VzdGluZyBtaW1lIHR5cGUgJXMiLCAqcCk7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoKnAsIE5VTEwpOwotICAgICAgZ3N0X3R5cGVfZmluZF9zdWdnZXN0ICh0ZiwgR1NUX1RZUEVfRklORF9NSU5JTVVNLCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX2ZyZWUgKGNhcHMpOwotICAgIH0KLSAgICBnX3N0cmZyZWV2IChtbGlzdCk7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJjbG9zaW5nIHBpeGJ1ZiBsb2FkZXIsIGhvcGUgaXQgZG9lc24ndCBoYW5nIC4uLiIpOwotICAvKiBsaWJyc3ZnIDIuNC54IGhhcyBhIGJ1ZyB3aGVyZSBpdCB0cmlnZ2VycyBhbiBlbmRsZXNzIGxvb3AgaW4gdHJ5aW5nCi0gICAgIHRvIGNsb3NlIGEgZ3ppcCB0aGF0J3Mgbm90IGFuIHN2ZzsgZml4ZWQgdXBzdHJlYW0gYnV0IG5vIGdvb2Qgd2F5Ci0gICAgIHRvIHdvcmsgYXJvdW5kIGl0ICovCi0gIGdka19waXhidWZfbG9hZGVyX2Nsb3NlIChwaXhidWZfbG9hZGVyLCBOVUxMKTsKLSAgR1NUX0RFQlVHICgiY2xvc2VkIHBpeGJ1ZiBsb2FkZXIiKTsKLSAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChwaXhidWZfbG9hZGVyKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJnZGtwaXhidWZkZWMiLCBHU1RfUkFOS19TRUNPTkRBUlksCi0gICAgICAgICAgR1NUX1RZUEVfR0RLX1BJWEJVRl9ERUMpKQotICAgIHJldHVybiBGQUxTRTsKLQotI2lmIDAKLSAgZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAocGx1Z2luLCAiaW1hZ2UvKiIsIEdTVF9SQU5LX01BUkdJTkFMLAotICAgICAgZ3N0X2dka19waXhidWZfdHlwZV9maW5kLCBOVUxMLCBHU1RfQ0FQU19BTlksIE5VTEwpOwotI2VuZGlmCi0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2RrcGl4YnVmb3ZlcmxheSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfR0RLX1BJWEJVRl9PVkVSTEFZKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZ2RrcGl4YnVmc2luayIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfR0RLX1BJWEJVRl9TSU5LKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBnZGtwaXhidWYsCi0gICAgIkdka1BpeGJ1Zi1iYXNlZCBpbWFnZSBkZWNvZGVyLCBvdmVybGF5IGFuZCBzaW5rIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmMgYi9leHQvZ2RrX3BpeGJ1Zi9nc3RnZGtwaXhidWZzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhYmQ2YmYuLjAwMDAwMDAKLS0tIGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmc2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBHZGtQaXhidWYgc2luawotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZ2RrcGl4YnVmc2luawotICoKLSAqIFRoaXMgc2luayBlbGVtZW50IHRha2VzIFJHQiBvciBSR0JBIGltYWdlcyBhcyBpbnB1dCBhbmQgd3JhcHMgdGhlbSBpbnRvCi0gKiAjR2RrUGl4YnVmIG9iamVjdHMsIGZvciBlYXN5IHNhdmluZyB0byBmaWxlIHZpYSB0aGUKLSAqIEdka1BpeGJ1ZiBsaWJyYXJ5IEFQSSBvciBkaXNwbGF5aW5nIGluIEd0aysgYXBwbGljYXRpb25zIChlLmcuIHVzaW5nCi0gKiB0aGUgI0d0a0ltYWdlIHdpZGdldCkuCi0gKgotICogVGhlcmUgYXJlIHR3byB3YXlzIHRvIHVzZSB0aGlzIGVsZW1lbnQgYW5kIG9idGFpbiB0aGUgI0dka1BpeGJ1ZiBvYmplY3RzCi0gKiBjcmVhdGVkOgotICogPGl0ZW1pemVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqIFdhdGNoaW5nIGZvciBlbGVtZW50IG1lc3NhZ2VzIG5hbWVkIDxjbGFzc25hbWU+JnF1b3Q7cHJlcm9sbC1waXhidWYmcXVvdDsKLSAqIDwvY2xhc3NuYW1lPiBvciA8Y2xhc3NuYW1lPiZxdW90O3BpeGJ1ZiZxdW90OzwvY2xhc3NuYW1lPiBvbiB0aGUgYnVzLCB3aGljaAotICogd2lsbCBiZSBwb3N0ZWQgd2hlbmV2ZXIgYW4gaW1hZ2Ugd291bGQgdXN1YWxseSBiZSByZW5kZXJlZC4gU2VlIGJlbG93IGZvcgotICogbW9yZSBkZXRhaWxzIG9uIHRoZXNlIG1lc3NhZ2VzIGFuZCBob3cgdG8gZXh0cmFjdCB0aGUgcGl4YnVmIG9iamVjdAotICogY29udGFpbmVkIGluIHRoZW0uCi0gKiA8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPgotICogUmV0cmlldmluZyB0aGUgY3VycmVudCBwaXhidWYgdmlhIHRoZSAjR3N0R2RrUGl4YnVmU2luazpsYXN0LXBpeGJ1ZiBwcm9wZXJ0eQotICogd2hlbiBuZWVkZWQuIFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGdldCBhdCBwaXhidWZzIGZvciBzbmFwc2hvdHRpbmcKLSAqIHB1cnBvc2VzIC0ganVzdCB3YWl0IHVudGlsIHRoZSBwaXBlbGluZSBpcyBwcmVyb2xsZWQgKEFTWU5DX0RPTkUgbWVzc2FnZQotICogb24gdGhlIGJ1cyksIHRoZW4gcmVhZCB0aGUgcHJvcGVydHkuIElmIHlvdSB1c2UgdGhpcyBtZXRob2QsIHlvdSBtYXkgd2FudAotICogdG8gZGlzYWJsZSBtZXNzYWdlIHBvc3RpbmcgYnkgc2V0dGluZyB0aGUgI0dzdEdka1BpeGJ1ZlNpbms6cG9zdC1tZXNzYWdlcwotICogcHJvcGVydHkgdG8gI0ZBTFNFLiBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSBtZW1vcnkgb3ZlcmhlYWQuCi0gKiA8L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKgotICogVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIGVsZW1lbnQgaXMgdG8gYWJzdHJhY3QgYXdheSB0aGUgI0dzdEJ1ZmZlciB0bwotICogI0dka1BpeGJ1ZiBjb252ZXJzaW9uLiBPdGhlciB0aGFuIHRoYXQgaXQncyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIGZha2VzaW5rCi0gKiBlbGVtZW50LgotICoKLSAqIFRoaXMgZWxlbWVudCBpcyBtZWFudCBmb3IgZWFzeSBuby1oYXNzbGUgdmlkZW8gc25hcHNob3R0aW5nLiBJdCBpcyBub3QKLSAqIHN1aXRhYmxlIGZvciB2aWRlbyBwbGF5YmFjayBvciB2aWRlbyBkaXNwbGF5IGF0IGhpZ2ggZnJhbWVyYXRlcy4gVXNlCi0gKiB4aW1hZ2VzaW5rLCB4dmltYWdlc2luayBvciBzb21lIG90aGVyIHN1aXRhYmxlIHZpZGVvIHNpbmsgaW4gY29ubmVjdGlvbgotICogd2l0aCB0aGUgI0dzdFhPdmVybGF5IGludGVyZmFjZSBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvIGRvIHZpZGVvIHBsYXliYWNrLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5NZXNzYWdlIGRldGFpbHM8L3RpdGxlPgotICogQXMgbWVudGlvbmVkIGFib3ZlLCB0aGlzIGVsZW1lbnQgd2lsbCBieSBkZWZhdWx0IHBvc3QgZWxlbWVudCBtZXNzYWdlcwotICogY29udGFpbmluZyBzdHJ1Y3R1cmVzIG5hbWVkIDxjbGFzc25hbWU+JnF1b3Q7cHJlcm9sbC1waXhidWYmcXVvdDsKLSAqIDwvY2xhc3NuYW1lPiBvciA8Y2xhc3NuYW1lPiZxdW90O3BpeGJ1ZiZxdW90OzwvY2xhc3NuYW1lPiBvbiB0aGUgYnVzICh0aGlzCi0gKiBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgI0dzdEdka1BpeGJ1ZlNpbms6cG9zdC1tZXNzYWdlcyBwcm9wZXJ0eQotICogdG8gI0ZBTFNFIHRob3VnaCkuIFRoZSBlbGVtZW50IG1lc3NhZ2Ugc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7cGl4YnVmJnF1b3Q7PC9jbGFzc25hbWU+OiB0aGUgI0dka1BpeGJ1ZiBvYmplY3QKLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7cGl4ZWwtYXNwZWN0LXJhdGlvJnF1b3Q7PC9jbGFzc25hbWU+OiB0aGUgcGl4ZWwgYXNwZWN0Ci0gKiAgIHJhdGlvIChQQVIpIG9mIHRoZSBpbnB1dCBpbWFnZSAodGhpcyBmaWVsZCBjb250YWlucyBhICNHc3RGcmFjdGlvbik7IHRoZQotICogICBQQVIgaXMgdXN1YWxseSAxOjEgZm9yIGltYWdlcywgYnV0IGlzIG9mdGVuIHNvbWV0aGluZyBub24tMToxIGluIHRoZSBjYXNlCi0gKiAgIG9mIHZpZGVvIGlucHV0LiBJbiB0aGlzIGNhc2UgdGhlIGltYWdlIG1heSBiZSBkaXN0b3J0ZWQgYW5kIHlvdSBtYXkgbmVlZAotICogICB0byByZXNjYWxlIGl0IGFjY29yZGluZ2x5IGJlZm9yZSBzYXZpbmcgaXQgdG8gZmlsZSBvciBkaXNwbGF5aW5nIGl0LiBUaGlzCi0gKiAgIGNhbiBlYXNpbHkgYmUgZG9uZSB1c2luZyBnZGtfcGl4YnVmX3NjYWxlKCkgKHRoZSByZWFzb24gdGhpcyBpcyBub3QgZG9uZQotICogICBhdXRvbWF0aWNhbGx5IGlzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdpbGwgb2Z0ZW4gc2NhbGUgdGhlIGltYWdlIGFueXdheQotICogICBhY2NvcmRpbmcgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCB3aW5kb3csIGluIHdoaWNoIGNhc2UgaXQgaXMgbXVjaCBtb3JlCi0gKiAgIGVmZmljaWVudCB0byBvbmx5IHNjYWxlIG9uY2UgcmF0aGVyIHRoYW4gdHdpY2UpLiBZb3UgY2FuIHB1dCBhIHZpZGVvc2NhbGUKLSAqICAgZWxlbWVudCBhbmQgYSBjYXBzZmlsdGVyIGVsZW1lbnQgd2l0aAotICogICA8bGl0ZXJhbD52aWRlby94LXJhdy1yZ2IscGl4ZWwtYXNwZWN0LXJhdGlvPShmcmFjdGlvbikxLzE8L2xpdGVyYWw+IGNhcHMKLSAqICAgaW4gZnJvbnQgb2YgdGhpcyBlbGVtZW50IHRvIG1ha2Ugc3VyZSB0aGUgcGl4YnVmcyBhbHdheXMgaGF2ZSBhIDE6MSBQQVIuCi0gKiA8L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKiA8L3JlZnNlY3QyPgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtbSAtdiB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MSAhIGdka3BpeGJ1ZnNpbmsKLSAqIF18IFByb2Nlc3Mgb25lIHNpbmdsZSB0ZXN0IGltYWdlIGFzIHBpeGJ1ZiAobm90ZSB0aGF0IHRoZSBvdXRwdXQgeW91IHNlZSB3aWxsCi0gKiBiZSBzbGlnaHRseSBtaXNsZWFkaW5nLiBUaGUgbWVzc2FnZSBzdHJ1Y3R1cmUgZG9lcyBjb250YWluIGEgdmFsaWQgcGl4YnVmCi0gKiBvYmplY3QgZXZlbiBpZiB0aGUgc3RydWN0dXJlIHN0cmluZyBzYXlzICZhcG9zOyhOVUxMKSZhcG9zOykuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGdka3BpeGJ1ZnNpbmsuaCIKLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jZGVmaW5lIERFRkFVTFRfU0VORF9NRVNTQUdFUyBUUlVFCi0jZGVmaW5lIERFRkFVTFRfUE9TVF9NRVNTQUdFUyBUUlVFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1BPU1RfTUVTU0FHRVMsCi0gIFBST1BfTEFTVF9QSVhCVUYsCi0gIFBST1BfTEFTVAotfTsKLQotCi1HX0RFRklORV9UWVBFIChHc3RHZGtQaXhidWZTaW5rLCBnc3RfZ2RrX3BpeGJ1Zl9zaW5rLCBHU1RfVFlQRV9WSURFT19TSU5LKTsKLQotc3RhdGljIHZvaWQgZ3N0X2dka19waXhidWZfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZ2RrX3BpeGJ1Zl9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9nZGtfcGl4YnVmX3Npbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9nZGtfcGl4YnVmX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dka19waXhidWZfc2lua19zZXRfY2FwcyAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBic2luaywKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2dka19waXhidWZfc2lua19wcmVyb2xsIChHc3RCYXNlU2luayAqIGJzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgR2RrUGl4YnVmICpnc3RfZ2RrX3BpeGJ1Zl9zaW5rX2dldF9waXhidWZfZnJvbV9idWZmZXIgKEdzdEdka1BpeGJ1ZlNpbmsgKgotICAgIHNpbmssIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBwaXhidWZzaW5rX3NpbmtfZmFjdG9yeSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgiUkdCIikgIjsiCi0gICAgICAgIEdTVF9WSURFT19DQVBTX01BS0UgKCJSR0JBIikpCi0gICAgKTsKLQotc3RhdGljIHZvaWQKLWdzdF9nZGtfcGl4YnVmX3NpbmtfY2xhc3NfaW5pdCAoR3N0R2RrUGl4YnVmU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJhc2VzaW5rX2NsYXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJHZGtQaXhidWYgc2luayIsCi0gICAgICAiU2luay9WaWRlbyIsICJPdXRwdXQgaW1hZ2VzIGFzIEdka1BpeGJ1ZiBvYmplY3RzIGluIGJ1cyBtZXNzYWdlcyIsCi0gICAgICAiVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZwaXhidWZzaW5rX3NpbmtfZmFjdG9yeSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2dka19waXhidWZfc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9nZGtfcGl4YnVmX3NpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIC8qKgotICAgKiBHc3RHZGtQaXhidWY6cG9zdC1tZXNzYWdlczoKLSAgICoKLSAgICogUG9zdCBtZXNzYWdlcyBvbiB0aGUgYnVzIGNvbnRhaW5pbmcgcGl4YnVmcy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUE9TVF9NRVNTQUdFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicG9zdC1tZXNzYWdlcyIsICJQb3N0IE1lc3NhZ2VzIiwKLSAgICAgICAgICAiV2hldGhlciB0byBwb3N0IG1lc3NhZ2VzIGNvbnRhaW5pbmcgcGl4YnVmcyBvbiB0aGUgYnVzIiwKLSAgICAgICAgICBERUZBVUxUX1BPU1RfTUVTU0FHRVMsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFTVF9QSVhCVUYsCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgibGFzdC1waXhidWYiLCAiTGFzdCBQaXhidWYiLAotICAgICAgICAgICJMYXN0IEdka1BpeGJ1ZiBvYmplY3QgcmVuZGVyZWQiLCBHREtfVFlQRV9QSVhCVUYsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBiYXNlc2lua19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dka19waXhidWZfc2lua19zdGFydCk7Ci0gIGJhc2VzaW5rX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9nZGtfcGl4YnVmX3Npbmtfc3RvcCk7Ci0gIGJhc2VzaW5rX2NsYXNzLT5yZW5kZXIgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dka19waXhidWZfc2lua19yZW5kZXIpOwotICBiYXNlc2lua19jbGFzcy0+cHJlcm9sbCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ2RrX3BpeGJ1Zl9zaW5rX3ByZXJvbGwpOwotICBiYXNlc2lua19jbGFzcy0+c2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dka19waXhidWZfc2lua19zZXRfY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZ2RrX3BpeGJ1Zl9zaW5rX2luaXQgKEdzdEdka1BpeGJ1ZlNpbmsgKiBzaW5rKQotewotICBzaW5rLT5wYXJfbiA9IDA7Ci0gIHNpbmstPnBhcl9kID0gMDsKLSAgc2luay0+aGFzX2FscGhhID0gRkFMU0U7Ci0gIHNpbmstPmxhc3RfcGl4YnVmID0gTlVMTDsKLSAgc2luay0+cG9zdF9tZXNzYWdlcyA9IERFRkFVTFRfUE9TVF9NRVNTQUdFUzsKLQotICAvKiB3ZSdyZSBub3QgYSByZWFsIHZpZGVvIHNpbmssIHdlIGp1c3QgZGVyaXZlIGZyb20gR3N0VmlkZW9TaW5rIGluIGNhc2UKLSAgICogYW55dGhpbmcgaW50ZXJlc3RpbmcgaXMgYWRkZWQgdG8gaXQgaW4gZnV0dXJlICovCi0gIGdzdF9iYXNlX3Npbmtfc2V0X21heF9sYXRlbmVzcyAoR1NUX0JBU0VfU0lOSyAoc2luayksIC0xKTsKLSAgZ3N0X2Jhc2Vfc2lua19zZXRfcW9zX2VuYWJsZWQgKEdTVF9CQVNFX1NJTksgKHNpbmspLCBGQUxTRSk7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2RrX3BpeGJ1Zl9zaW5rX3N0YXJ0IChHc3RCYXNlU2luayAqIGJhc2VzaW5rKQotewotICBHU1RfTE9HX09CSkVDVCAoYmFzZXNpbmssICJzdGFydCIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9nZGtfcGl4YnVmX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0R2RrUGl4YnVmU2luayAqc2luayA9IEdTVF9HREtfUElYQlVGX1NJTksgKGJhc2VzaW5rKTsKLQotICBHU1RfVklERU9fU0lOS19XSURUSCAoc2luaykgPSAwOwotICBHU1RfVklERU9fU0lOS19IRUlHSFQgKHNpbmspID0gMDsKLQotICBzaW5rLT5wYXJfbiA9IDA7Ci0gIHNpbmstPnBhcl9kID0gMDsKLSAgc2luay0+aGFzX2FscGhhID0gRkFMU0U7Ci0KLSAgaWYgKHNpbmstPmxhc3RfcGl4YnVmKSB7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNpbmstPmxhc3RfcGl4YnVmKTsKLSAgICBzaW5rLT5sYXN0X3BpeGJ1ZiA9IE5VTEw7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoc2luaywgInN0b3AiKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2RrX3BpeGJ1Zl9zaW5rX3NldF9jYXBzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0R2RrUGl4YnVmU2luayAqc2luayA9IEdTVF9HREtfUElYQlVGX1NJTksgKGJhc2VzaW5rKTsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0gIEdzdFZpZGVvRm9ybWF0IGZtdDsKLSAgZ2ludCB3LCBoLCBwYXJfbiwgcGFyX2Q7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2luaywgInBhcnNlX2NhcHMgZmFpbGVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZm10ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUICgmaW5mbyk7Ci0gIHcgPSBHU1RfVklERU9fSU5GT19XSURUSCAoJmluZm8pOwotICBoID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmaW5mbyk7Ci0gIHBhcl9uID0gR1NUX1ZJREVPX0lORk9fUEFSX04gKCZpbmZvKTsKLSAgcGFyX2QgPSBHU1RfVklERU9fSU5GT19QQVJfTiAoJmluZm8pOwotCi0jaWZuZGVmIEdfRElTQUJMRV9BU1NFUlQKLSAgewotICAgIGdpbnQgczsKLSAgICBzID0gR1NUX1ZJREVPX0lORk9fQ09NUF9QU1RSSURFICgmaW5mbywgMCk7Ci0gICAgZ19hc3NlcnQgKChmbXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9SR0IgJiYgcyA9PSAzKSB8fAotICAgICAgICAoZm10ID09IEdTVF9WSURFT19GT1JNQVRfUkdCQSAmJiBzID09IDQpKTsKLSAgfQotI2VuZGlmCi0KLSAgR1NUX1ZJREVPX1NJTktfV0lEVEggKHNpbmspID0gdzsKLSAgR1NUX1ZJREVPX1NJTktfSEVJR0hUIChzaW5rKSA9IGg7Ci0KLSAgc2luay0+cGFyX24gPSBwYXJfbjsKLSAgc2luay0+cGFyX2QgPSBwYXJfZDsKLQotICBzaW5rLT5oYXNfYWxwaGEgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEgKCZpbmZvKTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHNpbmssICJmb3JtYXQgICAgICAgICAgICAgOiAlZCIsIGZtdCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoc2luaywgIndpZHRoIHggaGVpZ2h0ICAgICA6ICVkIHggJWQiLCB3LCBoKTsKLSAgR1NUX0lORk9fT0JKRUNUIChzaW5rLCAicGl4ZWwtYXNwZWN0LXJhdGlvIDogJWQvJWQiLCBwYXJfbiwgcGFyX2QpOwotCi0gIHNpbmstPmluZm8gPSBpbmZvOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfc2lua19waXhidWZfZGVzdHJveV9ub3RpZnkgKGd1Y2hhciAqIHBpeGVscywKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUpCi17Ci0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoZnJhbWUpOwotICBnc3RfYnVmZmVyX3VucmVmIChmcmFtZS0+YnVmZmVyKTsKLSAgZ19zbGljZV9mcmVlIChHc3RWaWRlb0ZyYW1lLCBmcmFtZSk7Ci19Ci0KLXN0YXRpYyBHZGtQaXhidWYgKgotZ3N0X2dka19waXhidWZfc2lua19nZXRfcGl4YnVmX2Zyb21fYnVmZmVyIChHc3RHZGtQaXhidWZTaW5rICogc2luaywKLSAgICBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdka1BpeGJ1ZiAqcGl4ID0gTlVMTDsKLSAgR3N0VmlkZW9GcmFtZSAqZnJhbWU7Ci0gIGdpbnQgbWluc2l6ZSwgYnl0ZXNfcGVyX3BpeGVsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVklERU9fU0lOS19XSURUSCAoc2luaykgPiAwLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WSURFT19TSU5LX0hFSUdIVCAoc2luaykgPiAwLCBOVUxMKTsKLQotICBmcmFtZSA9IGdfc2xpY2VfbmV3MCAoR3N0VmlkZW9GcmFtZSk7Ci0gIGdzdF92aWRlb19mcmFtZV9tYXAgKGZyYW1lLCAmc2luay0+aW5mbywgYnVmLCBHU1RfTUFQX1JFQUQpOwotCi0gIGJ5dGVzX3Blcl9waXhlbCA9IChzaW5rLT5oYXNfYWxwaGEpID8gNCA6IDM7Ci0KLSAgLyogbGFzdCByb3cgbmVlZG4ndCBoYXZlIHJvdyBwYWRkaW5nICovCi0gIG1pbnNpemUgPSAoR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCkgKgotICAgICAgKEdTVF9WSURFT19TSU5LX0hFSUdIVCAoc2luaykgLSAxKSkgKwotICAgICAgKGJ5dGVzX3Blcl9waXhlbCAqIEdTVF9WSURFT19TSU5LX1dJRFRIIChzaW5rKSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPj0gbWluc2l6ZSwgTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1Zik7Ci0gIHBpeCA9IGdka19waXhidWZfbmV3X2Zyb21fZGF0YSAoR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDApLAotICAgICAgR0RLX0NPTE9SU1BBQ0VfUkdCLCBzaW5rLT5oYXNfYWxwaGEsIDgsIEdTVF9WSURFT19TSU5LX1dJRFRIIChzaW5rKSwKLSAgICAgIEdTVF9WSURFT19TSU5LX0hFSUdIVCAoc2luayksIEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApLAotICAgICAgKEdka1BpeGJ1ZkRlc3Ryb3lOb3RpZnkpIGdzdF9nZGtfcGl4YnVmX3NpbmtfcGl4YnVmX2Rlc3Ryb3lfbm90aWZ5LAotICAgICAgZnJhbWUpOwotCi0gIHJldHVybiBwaXg7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZ2RrX3BpeGJ1Zl9zaW5rX2hhbmRsZV9idWZmZXIgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdEJ1ZmZlciAqIGJ1ZiwKLSAgICBjb25zdCBnY2hhciAqIG1zZ19uYW1lKQotewotICBHc3RHZGtQaXhidWZTaW5rICpzaW5rOwotICBHZGtQaXhidWYgKnBpeGJ1ZjsKLSAgZ2Jvb2xlYW4gZG9fcG9zdDsKLQotICBzaW5rID0gR1NUX0dES19QSVhCVUZfU0lOSyAoYmFzZXNpbmspOwotCi0gIHBpeGJ1ZiA9IGdzdF9nZGtfcGl4YnVmX3NpbmtfZ2V0X3BpeGJ1Zl9mcm9tX2J1ZmZlciAoc2luaywgYnVmKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotCi0gIGRvX3Bvc3QgPSBzaW5rLT5wb3N0X21lc3NhZ2VzOwotCi0gIGlmIChzaW5rLT5sYXN0X3BpeGJ1ZikKLSAgICBnX29iamVjdF91bnJlZiAoc2luay0+bGFzdF9waXhidWYpOwotCi0gIHNpbmstPmxhc3RfcGl4YnVmID0gcGl4YnVmOyAgIC8qIHRha2Ugb3duZXJzaGlwICovCi0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotCi0gIGlmIChHX1VOTElLRUxZIChwaXhidWYgPT0gTlVMTCkpCi0gICAgZ290byBlcnJvcjsKLQotICBpZiAoZG9fcG9zdCkgewotICAgIEdzdFN0cnVjdHVyZSAqczsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0gICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsIHN0cmVhbV90aW1lOwotCi0gICAgR3N0U2VnbWVudCAqc2VnbWVudCA9ICZiYXNlc2luay0+c2VnbWVudDsKLSAgICBmb3JtYXQgPSBzZWdtZW50LT5mb3JtYXQ7Ci0KLSAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgICBydW5uaW5nX3RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgdGltZXN0YW1wKTsKLSAgICBzdHJlYW1fdGltZSA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lIChzZWdtZW50LCBmb3JtYXQsIHRpbWVzdGFtcCk7Ci0KLSAgICAvKiBpdCdzIG9rYXkgdG8ga2VlcCB1c2luZyBwaXhidWYgaGVyZSwgd2UgY2FuIGJlIHN1cmUgbm8gb25lIGlzIGdvaW5nIHRvCi0gICAgICogdW5yZWYgb3IgY2hhbmdlIHNpbmstPmxhc3RfcGl4YnVmIGJlZm9yZSB3ZSByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgotICAgICAqIFRoZSBzdHJ1Y3R1cmUgd2lsbCB0YWtlIGl0cyBvd24gcmVmIHRvIHRoZSBwaXhidWYuICovCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3IChtc2dfbmFtZSwKLSAgICAgICAgInBpeGJ1ZiIsIEdES19UWVBFX1BJWEJVRiwgcGl4YnVmLAotICAgICAgICAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgR1NUX1RZUEVfRlJBQ1RJT04sIHNpbmstPnBhcl9uLCBzaW5rLT5wYXJfZCwKLSAgICAgICAgInRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgICAgInN0cmVhbS10aW1lIiwgR19UWVBFX1VJTlQ2NCwgc3RyZWFtX3RpbWUsCi0gICAgICAgICJydW5uaW5nLXRpbWUiLCBHX1RZUEVfVUlOVDY0LCBydW5uaW5nX3RpbWUsIE5VTEwpOwotCi0gICAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1RfQ0FTVCAoc2luayksIHMpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2luayksIG1zZyk7Ci0gIH0KLQotICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzaW5rKSwgImxhc3QtcGl4YnVmIik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0vKiBFUlJPUlMgKi8KLWVycm9yOgotICB7Ci0gICAgLyogVGhpcyBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiAqLwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBMSUJSQVJZLCBGQUlMRUQsCi0gICAgICAgICgiQ291bGRuJ3QgY3JlYXRlIHBpeGJ1ZiBmcm9tIFJHQiBpbWFnZS4iKSwKLSAgICAgICAgKCJQcm9iYWJseSBub3QgZW5vdWdoIGZyZWUgbWVtb3J5IikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2dka19waXhidWZfc2lua19wcmVyb2xsIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIHJldHVybiBnc3RfZ2RrX3BpeGJ1Zl9zaW5rX2hhbmRsZV9idWZmZXIgKGJhc2VzaW5rLCBidWYsICJwcmVyb2xsLXBpeGJ1ZiIpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2dka19waXhidWZfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgcmV0dXJuIGdzdF9nZGtfcGl4YnVmX3NpbmtfaGFuZGxlX2J1ZmZlciAoYmFzZXNpbmssIGJ1ZiwgInBpeGJ1ZiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0R2RrUGl4YnVmU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX0dES19QSVhCVUZfU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9TVF9NRVNTQUdFUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gICAgICBzaW5rLT5wb3N0X21lc3NhZ2VzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dka19waXhidWZfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0R2RrUGl4YnVmU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX0dES19QSVhCVUZfU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9TVF9NRVNTQUdFUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2luayk7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2luay0+cG9zdF9tZXNzYWdlcyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2luayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTEFTVF9QSVhCVUY6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNpbmspOwotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc2luay0+bGFzdF9waXhidWYpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNpbmspOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmc2luay5oIGIvZXh0L2dka19waXhidWYvZ3N0Z2RrcGl4YnVmc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ0MzdhLi4wMDAwMDAwCi0tLSBhL2V4dC9nZGtfcGl4YnVmL2dzdGdka3BpeGJ1ZnNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBHZGtQaXhidWYgc2luawotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEdTVF9HREtfUElYQlVGX1NJTktfSAotI2RlZmluZSBHU1RfR0RLX1BJWEJVRl9TSU5LX0gKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmg+Ci0KLSNpbmNsdWRlIDxnZGstcGl4YnVmL2dkay1waXhidWYuaD4KLQotI2RlZmluZSBHU1RfVFlQRV9HREtfUElYQlVGX1NJTksgICAgICAgICAgICAoZ3N0X2dka19waXhidWZfc2lua19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfR0RLX1BJWEJVRl9TSU5LKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfR0RLX1BJWEJVRl9TSU5LLEdzdEdka1BpeGJ1ZlNpbmspKQotI2RlZmluZSBHU1RfR0RLX1BJWEJVRl9TSU5LX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9HREtfUElYQlVGX1NJTkssR3N0R2RrUGl4YnVmU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0dES19QSVhCVUZfU0lOSyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0dES19QSVhCVUZfU0lOSykpCi0jZGVmaW5lIEdTVF9JU19HREtfUElYQlVGX1NJTktfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0dES19QSVhCVUZfU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RHZGtQaXhidWZTaW5rICAgICAgIEdzdEdka1BpeGJ1ZlNpbms7Ci10eXBlZGVmIHN0cnVjdCBfR3N0R2RrUGl4YnVmU2lua0NsYXNzICBHc3RHZGtQaXhidWZTaW5rQ2xhc3M7Ci0KLS8qKgotICogR3N0R2RrUGl4YnVmU2luazoKLSAqCi0gKiBPcGFxdWUgZWxlbWVudCBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0R2RrUGl4YnVmU2luawotewotICBHc3RWaWRlb1NpbmsgIGJhc2VzaW5rOwotCi0gIC8qPCBwcml2YXRlID4qLwotCi0gIC8qIGN1cnJlbnQgY2FwcyAqLwotICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgZ2ludCAgICAgICAgIHdpZHRoOwotICBnaW50ICAgICAgICAgaGVpZ2h0OwotICBnaW50ICAgICAgICAgcGFyX247Ci0gIGdpbnQgICAgICAgICBwYXJfZDsKLSAgZ2Jvb2xlYW4gICAgIGhhc19hbHBoYTsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdib29sZWFuICAgICBwb3N0X21lc3NhZ2VzOwotICBHZGtQaXhidWYgICogbGFzdF9waXhidWY7Ci19OwotCi0vKioKLSAqIEdzdEdka1BpeGJ1ZlNpbmtDbGFzczoKLSAqCi0gKiBPcGFxdWUgZWxlbWVudCBjbGFzcyBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0R2RrUGl4YnVmU2lua0NsYXNzIAotewotICBHc3RWaWRlb1NpbmtDbGFzcyAgYmFzZXNpbmtjbGFzczsKLX07Ci0KLUdUeXBlICAgZ3N0X2dka19waXhidWZfc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBHU1RfR0RLX1BJWEJVRl9TSU5LX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZXh0L2phY2svTWFrZWZpbGUuYW0gYi9leHQvamFjay9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTc4NmE4ZC4uMDAwMDAwMAotLS0gYS9leHQvamFjay9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0amFjay5sYQotCi1saWJnc3RqYWNrX2xhX1NPVVJDRVMgPSBnc3RqYWNrdXRpbC5jIGdzdGphY2suYyBnc3RqYWNrYXVkaW9zcmMuYyBnc3RqYWNrYXVkaW9zaW5rLmMgZ3N0amFja2F1ZGlvY2xpZW50LmMKLWxpYmdzdGphY2tfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEpBQ0tfQ0ZMQUdTKQotbGliZ3N0amFja19sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChKQUNLX0xJQlMpCi1saWJnc3RqYWNrX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGphY2tfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RqYWNrdXRpbC5oIGdzdGphY2thdWRpb3NyYy5oIGdzdGphY2thdWRpb3NpbmsuaCBnc3RqYWNrYXVkaW9jbGllbnQuaCBnc3RqYWNrLmggZ3N0amFja3JpbmdidWZmZXIuaApkaWZmIC0tZ2l0IGEvZXh0L2phY2svTWFrZWZpbGUuaW4gYi9leHQvamFjay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2NDg5Zi4uMDAwMDAwMAotLS0gYS9leHQvamFjay9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk0NCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBleHQvamFjawotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGphY2tfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGphY2tfbGFfT0JKRUNUUyA9IGxpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwubG8gXAotCWxpYmdzdGphY2tfbGEtZ3N0amFjay5sbyBsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5sbyBcCi0JbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zaW5rLmxvIFwKLQlsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb2NsaWVudC5sbwotbGliZ3N0amFja19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RqYWNrX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RqYWNrX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0amFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGphY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0amFja19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RqYWNrX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGphY2tfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0amFjay5sYQotbGliZ3N0amFja19sYV9TT1VSQ0VTID0gZ3N0amFja3V0aWwuYyBnc3RqYWNrLmMgZ3N0amFja2F1ZGlvc3JjLmMgZ3N0amFja2F1ZGlvc2luay5jIGdzdGphY2thdWRpb2NsaWVudC5jCi1saWJnc3RqYWNrX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChKQUNLX0NGTEFHUykKLWxpYmdzdGphY2tfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoSkFDS19MSUJTKQotbGliZ3N0amFja19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RqYWNrX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGphY2t1dGlsLmggZ3N0amFja2F1ZGlvc3JjLmggZ3N0amFja2F1ZGlvc2luay5oIGdzdGphY2thdWRpb2NsaWVudC5oIGdzdGphY2suaCBnc3RqYWNrcmluZ2J1ZmZlci5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvamFjay9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvamFjay9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGphY2subGE6ICQobGliZ3N0amFja19sYV9PQkpFQ1RTKSAkKGxpYmdzdGphY2tfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGphY2tfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGphY2tfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGphY2tfbGFfT0JKRUNUUykgJChsaWJnc3RqYWNrX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9jbGllbnQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NpbmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwubG86IGdzdGphY2t1dGlsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGphY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwuVHBvIC1jIC1vIGxpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwubG8gYHRlc3QgLWYgJ2dzdGphY2t1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2t1dGlsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGphY2tfbGEtZ3N0amFja3V0aWwuVHBvICQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2t1dGlsLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGphY2t1dGlsLmMnIG9iamVjdD0nbGliZ3N0amFja19sYS1nc3RqYWNrdXRpbC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGphY2tfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0amFja19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RqYWNrX2xhLWdzdGphY2t1dGlsLmxvIGB0ZXN0IC1mICdnc3RqYWNrdXRpbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RqYWNrdXRpbC5jCi0KLWxpYmdzdGphY2tfbGEtZ3N0amFjay5sbzogZ3N0amFjay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0amFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RqYWNrX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RqYWNrX2xhLWdzdGphY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGphY2tfbGEtZ3N0amFjay5UcG8gLWMgLW8gbGliZ3N0amFja19sYS1nc3RqYWNrLmxvIGB0ZXN0IC1mICdnc3RqYWNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrLlRwbyAkKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGphY2suYycgb2JqZWN0PSdsaWJnc3RqYWNrX2xhLWdzdGphY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGphY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0amFja19sYS1nc3RqYWNrLmxvIGB0ZXN0IC1mICdnc3RqYWNrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2suYwotCi1saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5sbzogZ3N0amFja2F1ZGlvc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGphY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGphY2tfbGEtZ3N0amFja2F1ZGlvc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5UcG8gLWMgLW8gbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zcmMubG8gYHRlc3QgLWYgJ2dzdGphY2thdWRpb3NyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RqYWNrYXVkaW9zcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zcmMuVHBvICQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RqYWNrYXVkaW9zcmMuYycgb2JqZWN0PSdsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGphY2tfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0amFja19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NyYy5sbyBgdGVzdCAtZiAnZ3N0amFja2F1ZGlvc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2thdWRpb3NyYy5jCi0KLWxpYmdzdGphY2tfbGEtZ3N0amFja2F1ZGlvc2luay5sbzogZ3N0amFja2F1ZGlvc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0amFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RqYWNrX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGphY2tfbGEtZ3N0amFja2F1ZGlvc2luay5UcG8gLWMgLW8gbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zaW5rLmxvIGB0ZXN0IC1mICdnc3RqYWNrYXVkaW9zaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2thdWRpb3NpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zaW5rLlRwbyAkKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGphY2thdWRpb3NpbmsuYycgb2JqZWN0PSdsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb3NpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGphY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9zaW5rLmxvIGB0ZXN0IC1mICdnc3RqYWNrYXVkaW9zaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2thdWRpb3NpbmsuYwotCi1saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb2NsaWVudC5sbzogZ3N0amFja2F1ZGlvY2xpZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGphY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGphY2tfbGEtZ3N0amFja2F1ZGlvY2xpZW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb2NsaWVudC5UcG8gLWMgLW8gbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9jbGllbnQubG8gYHRlc3QgLWYgJ2dzdGphY2thdWRpb2NsaWVudC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RqYWNrYXVkaW9jbGllbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0amFja19sYS1nc3RqYWNrYXVkaW9jbGllbnQuVHBvICQoREVQRElSKS9saWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb2NsaWVudC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RqYWNrYXVkaW9jbGllbnQuYycgb2JqZWN0PSdsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb2NsaWVudC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGphY2tfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0amFja19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RqYWNrX2xhLWdzdGphY2thdWRpb2NsaWVudC5sbyBgdGVzdCAtZiAnZ3N0amFja2F1ZGlvY2xpZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGphY2thdWRpb2NsaWVudC5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4dC9qYWNrL2dzdGphY2suYyBiL2V4dC9qYWNrL2dzdGphY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E5OGRjNC4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyogR1N0cmVhbWVyIEphY2sgcGx1Z2lucwotICogQ29weXJpZ2h0IChDKSAyMDA2IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0amFjay5oIgotI2luY2x1ZGUgImdzdGphY2thdWRpb3NyYy5oIgotI2luY2x1ZGUgImdzdGphY2thdWRpb3NpbmsuaCIKLQotR1R5cGUKLWdzdF9qYWNrX2Nvbm5lY3RfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBqYWNrX2Nvbm5lY3RfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmamFja19jb25uZWN0X3R5cGUpKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgamFja19jb25uZWN0X2VudW1zW10gPSB7Ci0gICAgICB7R1NUX0pBQ0tfQ09OTkVDVF9OT05FLAotICAgICAgICAgICJEb24ndCBhdXRvbWF0aWNhbGx5IGNvbm5lY3QgcG9ydHMgdG8gcGh5c2ljYWwgcG9ydHMiLCAibm9uZSJ9LAotICAgICAge0dTVF9KQUNLX0NPTk5FQ1RfQVVUTywKLSAgICAgICAgICAiQXV0b21hdGljYWxseSBjb25uZWN0IHBvcnRzIHRvIHBoeXNpY2FsIHBvcnRzIiwgImF1dG8ifSwKLSAgICAgIHtHU1RfSkFDS19DT05ORUNUX0FVVE9fRk9SQ0VELAotICAgICAgICAgICAgIkF1dG9tYXRpY2FsbHkgY29ubmVjdCBwb3J0cyB0byBhcyBtYW55IHBoeXNpY2FsIHBvcnRzIGFzIHBvc3NpYmxlIiwKLSAgICAgICAgICAiYXV0by1mb3JjZWQifSwKLSAgICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgICB9OwotICAgIEdUeXBlIHRtcCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RKYWNrQ29ubmVjdCIsIGphY2tfY29ubmVjdF9lbnVtcyk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZqYWNrX2Nvbm5lY3RfdHlwZSwgdG1wKTsKLSAgfQotICByZXR1cm4gKEdUeXBlKSBqYWNrX2Nvbm5lY3RfdHlwZTsKLX0KLQotR1R5cGUKLWdzdF9qYWNrX3RyYW5zcG9ydF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHR5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnR5cGUpKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIGZsYWdfdmFsdWVzW10gPSB7Ci0gICAgICB7R1NUX0pBQ0tfVFJBTlNQT1JUX01BU1RFUiwKLSAgICAgICAgICAiU3RhcnQgYW5kIHN0b3AgdHJhbnNwb3J0IHdpdGggc3RhdGUgY2hhbmdlcyIsICJtYXN0ZXIifSwKLSAgICAgIHtHU1RfSkFDS19UUkFOU1BPUlRfU0xBVkUsCi0gICAgICAgICAgIkZvbGxvdyB0cmFuc3BvcnQgc3RhdGUgY2hhbmdlcyIsICJzbGF2ZSJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9LAotICAgIH07Ci0gICAgR1R5cGUgdG1wID0gZ19mbGFnc19yZWdpc3Rlcl9zdGF0aWMgKCJHc3RKYWNrVHJhbnNwb3J0IiwgZmxhZ192YWx1ZXMpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmdHlwZSwgdG1wKTsKLSAgfQotICByZXR1cm4gKEdUeXBlKSB0eXBlOwotfQotCi0KLXN0YXRpYyBncG9pbnRlcgotZ3N0X2phY2tfY2xpZW50X2NvcHkgKGdwb2ludGVyIGpjbGllbnQpCi17Ci0gIHJldHVybiBqY2xpZW50OwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfamFja19jbGllbnRfZnJlZSAoZ3BvaW50ZXIgamNsaWVudCkKLXsKLSAgcmV0dXJuOwotfQotCi0KLUdUeXBlCi1nc3RfamFja19jbGllbnRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBqYWNrX2NsaWVudF90eXBlID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKCZqYWNrX2NsaWVudF90eXBlKSkgewotICAgIC8qIGhhY2tpc2gsIGJ1dCBtYWtlcyBpdCBzaG93IHVwIG5pY2VseSBpbiBnc3QtaW5zcGVjdCAqLwotICAgIEdUeXBlIHRtcCA9IGdfYm94ZWRfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKCJKYWNrQ2xpZW50IiwKLSAgICAgICAgKEdCb3hlZENvcHlGdW5jKSBnc3RfamFja19jbGllbnRfY29weSwKLSAgICAgICAgKEdCb3hlZEZyZWVGdW5jKSBnc3RfamFja19jbGllbnRfZnJlZSk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZqYWNrX2NsaWVudF90eXBlLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgamFja19jbGllbnRfdHlwZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJqYWNrYXVkaW9zcmMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImphY2thdWRpb3NpbmsiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0pBQ0tfQVVESU9fU0lOSykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgamFjaywKLSAgICAiSkFDSyBhdWRpbyBlbGVtZW50cyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvamFjay9nc3RqYWNrLmggYi9leHQvamFjay9nc3RqYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YjA0MGUuLjAwMDAwMDAKLS0tIGEvZXh0L2phY2svZ3N0amFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RqYWNrLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfR1NUX0pBQ0tfSF8KLSNkZWZpbmUgX0dTVF9KQUNLX0hfCi0KLSNpbmNsdWRlIDxqYWNrL2phY2suaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotLyoqCi0gKiBHc3RKYWNrQ29ubmVjdDoKLSAqIEBHU1RfSkFDS19DT05ORUNUX05PTkU6IERvbid0IGF1dG9tYXRpY2FsbHkgY29ubmVjdCB0byBwaHlzaWNhbCBwb3J0cy4KLSAqICAgICBJbiB0aGlzIG1vZGUsIHRoZSBlbGVtZW50IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMgYW5kIHdpbGwKLSAqICAgICBjcmVhdGUgKGJ1dCBub3QgY29ubmVjdCkgYW4gb3V0cHV0IHBvcnQgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIEBHU1RfSkFDS19DT05ORUNUX0FVVE86IEluIHRoaXMgbW9kZSwgdGhlIGVsZW1lbnQgd2lsbCB0cnkgdG8gY29ubmVjdCBlYWNoCi0gKiAgICAgb3V0cHV0IHBvcnQgdG8gYSByYW5kb20gcGh5c2ljYWwgamFjayBpbnB1dCBwaW4uIFRoZSBzaW5rIHdpbGwKLSAqICAgICBleHBvc2UgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBjaGFubmVscyBvbiBpdHMgcGFkIGNhcHMuCi0gKiBAR1NUX0pBQ0tfQ09OTkVDVF9BVVRPX0ZPUkNFRDogSW4gdGhpcyBtb2RlLCB0aGUgZWxlbWVudCB3aWxsIHRyeSB0byBjb25uZWN0IGVhY2gKLSAqICAgICBvdXRwdXQgcG9ydCB0byBhIHJhbmRvbSBwaHlzaWNhbCBqYWNrIGlucHV0IHBpbi4gVGhlICBlbGVtZW50IHdpbGwgYWNjZXB0IGFueSBudW1iZXIKLSAqICAgICBvZiBpbnB1dCBjaGFubmVscy4KLSAqCi0gKiBTcGVjaWZ5IGhvdyB0aGUgb3V0cHV0IHBvcnRzIHdpbGwgYmUgY29ubmVjdGVkLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfSkFDS19DT05ORUNUX05PTkUsCi0gIEdTVF9KQUNLX0NPTk5FQ1RfQVVUTywKLSAgR1NUX0pBQ0tfQ09OTkVDVF9BVVRPX0ZPUkNFRAotfSBHc3RKYWNrQ29ubmVjdDsKLQotLyoqCi0gKiBHc3RKYWNrVHJhbnNwb3J0OgotICogQEdTVF9KQUNLX1RSQU5TUE9SVF9BVVRPTk9NT1VTOiBubyB0cmFuc3BvcnQgc3VwcG9ydAotICogQEdTVF9KQUNLX1RSQU5TUE9SVF9NQVNURVI6IHN0YXJ0IGFuZCBzdG9wIHRyYW5zcG9ydCB3aXRoIHN0YXRlLWNoYW5nZXMKLSAqIEBHU1RfSkFDS19UUkFOU1BPUlRfU0xBVkU6IGZvbGxvdyB0cmFuc3BvcnQgc3RhdGUgY2hhbmdlcwotICoKLSAqIFRoZSBqYWNrIHRyYW5zcG9ydCBzdGF0ZSBhbGxvdyB0byBzeW5jIG11bHRpcGxlIGNsaWVudHMuIFRoaXMgZW51bSBkZWZpbmVzIGEKLSAqIGNsaWVudCBiZWhhdmlvdXIgcmVnYXJkaW5nIHRvIHRoZSB0cmFuc3BvcnQgbWVjaGFuaXNtLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfSkFDS19UUkFOU1BPUlRfQVVUT05PTU9VUyA9IDAsCi0gIEdTVF9KQUNLX1RSQU5TUE9SVF9NQVNURVIgPSAoMSA8PCAwKSwKLSAgR1NUX0pBQ0tfVFJBTlNQT1JUX1NMQVZFID0gKDEgPDwgMSksCi19IEdzdEphY2tUcmFuc3BvcnQ7Ci0KLXR5cGVkZWYgamFja19kZWZhdWx0X2F1ZGlvX3NhbXBsZV90IHNhbXBsZV90OwotCi0jZGVmaW5lIEdTVF9UWVBFX0pBQ0tfQ09OTkVDVCAgIChnc3RfamFja19jb25uZWN0X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVFlQRV9KQUNLX1RSQU5TUE9SVCAoZ3N0X2phY2tfdHJhbnNwb3J0X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVFlQRV9KQUNLX0NMSUVOVCAgICAoZ3N0X2phY2tfY2xpZW50X2dldF90eXBlICgpKQotCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBHU1RfSkFDS19GT1JNQVRfU1RSICJGMzJMRSIKLSNlbHNlCi0jZGVmaW5lIEdTVF9KQUNLX0ZPUk1BVF9TVFIgIkYzMkJFIgotI2VuZGlmCi0KLUdUeXBlIGdzdF9qYWNrX2NsaWVudF9nZXRfdHlwZSh2b2lkKTsKLUdUeXBlIGdzdF9qYWNrX2Nvbm5lY3RfZ2V0X3R5cGUodm9pZCk7Ci1HVHlwZSBnc3RfamFja190cmFuc3BvcnRfZ2V0X3R5cGUodm9pZCk7Ci0KLSNlbmRpZiAgLy8gX0dTVF9KQUNLX0hfCmRpZmYgLS1naXQgYS9leHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuYyBiL2V4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTAyMmMwLi4wMDAwMDAwCi0tLSBhL2V4dC9qYWNrL2dzdGphY2thdWRpb2NsaWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjM3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0amFja2F1ZGlvY2xpZW50LmM6IGphY2sgYXVkaW8gY2xpZW50IGltcGxlbWVudGF0aW9uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0amFja2F1ZGlvY2xpZW50LmgiCi0jaW5jbHVkZSAiZ3N0amFjay5oIgotCi0jaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0LXByaXZhdGUuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2phY2tfYXVkaW9fY2xpZW50X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9kZWJ1ZwotCi1zdGF0aWMgdm9pZAotamFja19sb2dfZXJyb3IgKGNvbnN0IGdjaGFyICogbXNnKQotewotICBHU1RfRVJST1IgKCIlcyIsIG1zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1qYWNrX2luZm9fZXJyb3IgKGNvbnN0IGdjaGFyICogbXNnKQotewotICBHU1RfSU5GTyAoIiVzIiwgbXNnKTsKLX0KLQotdm9pZAotZ3N0X2phY2tfYXVkaW9fY2xpZW50X2luaXQgKHZvaWQpCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfamFja19hdWRpb19jbGllbnRfZGVidWcsICJqYWNrY2xpZW50IiwgMCwKLSAgICAgICJqYWNrY2xpZW50IGhlbHBlcnMiKTsKLQotICBqYWNrX3NldF9lcnJvcl9mdW5jdGlvbiAoamFja19sb2dfZXJyb3IpOwotICBqYWNrX3NldF9pbmZvX2Z1bmN0aW9uIChqYWNrX2luZm9fZXJyb3IpOwotfQotCi0vKiBhIGxpc3Qgb2YgZ2xvYmFsIGNvbm5lY3Rpb25zIGluZGV4ZWQgYnkgaWQgYW5kIHNlcnZlci4gKi8KLUdfTE9DS19ERUZJTkVfU1RBVElDIChjb25uZWN0aW9uc19sb2NrKTsKLXN0YXRpYyBHTGlzdCAqY29ubmVjdGlvbnM7Ci0KLS8qIHRoZSBjb25uZWN0aW9uIHRvIGEgc2VydmVyICAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ2ludCByZWZjb3VudDsKLSAgR011dGV4IGxvY2s7Ci0gIEdDb25kIGZsdXNoX2NvbmQ7Ci0KLSAgLyogaWQvc2VydmVyIHBhaXIgYW5kIHRoZSBjb25uZWN0aW9uICovCi0gIGdjaGFyICppZDsKLSAgZ2NoYXIgKnNlcnZlcjsKLSAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gIC8qIGxpc3RzIG9mIEdzdEphY2tBdWRpb0NsaWVudHMgKi8KLSAgZ2ludCBuX2NsaWVudHM7Ci0gIEdMaXN0ICpzcmNfY2xpZW50czsKLSAgR0xpc3QgKnNpbmtfY2xpZW50czsKLQotICAvKiB0cmFuc3BvcnQgc3RhdGUgaGFuZGxpbmcgKi8KLSAgZ2ludCBjdXJfdHM7Ci0gIEdzdFN0YXRlIHRyYW5zcG9ydF9zdGF0ZTsKLX0gR3N0SmFja0F1ZGlvQ29ubmVjdGlvbjsKLQotLyogYW4gb2JqZWN0IHNoYXJpbmcgYSBqYWNrX2NsaWVudF90IGNvbm5lY3Rpb24uICovCi1zdHJ1Y3QgX0dzdEphY2tBdWRpb0NsaWVudAotewotICBHc3RKYWNrQXVkaW9Db25uZWN0aW9uICpjb25uOwotCi0gIEdzdEphY2tDbGllbnRUeXBlIHR5cGU7Ci0gIGdib29sZWFuIGFjdGl2ZTsKLSAgZ2Jvb2xlYW4gZGVhY3RpdmF0ZTsKLSAgZ2Jvb2xlYW4gc2VydmVyX2Rvd247Ci0KLSAgSmFja1NodXRkb3duQ2FsbGJhY2sgc2h1dGRvd247Ci0gIEphY2tQcm9jZXNzQ2FsbGJhY2sgcHJvY2VzczsKLSAgSmFja0J1ZmZlclNpemVDYWxsYmFjayBidWZmZXJfc2l6ZTsKLSAgSmFja1NhbXBsZVJhdGVDYWxsYmFjayBzYW1wbGVfcmF0ZTsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgamFja19uZnJhbWVzX3QgbmZyYW1lczsKLSAgZ3BvaW50ZXIgdXNlcl9kYXRhOwotfSBKYWNrQ0I7Ci0KLXN0YXRpYyBnYm9vbGVhbgotamFja19oYW5kbGVfdHJhbnNwb3J0X2NoYW5nZSAoR3N0SmFja0F1ZGlvQ2xpZW50ICogY2xpZW50LCBHc3RTdGF0ZSBzdGF0ZSkKLXsKLSAgR3N0T2JqZWN0ICpvYmogPSBHU1RfT0JKRUNUX1BBUkVOVCAoY2xpZW50LT51c2VyX2RhdGEpOwotICBndWludCBtb2RlOwotCi0gIGdfb2JqZWN0X2dldCAob2JqLCAidHJhbnNwb3J0IiwgJm1vZGUsIE5VTEwpOwotICBpZiAoKG1vZGUgJiBHU1RfSkFDS19UUkFOU1BPUlRfU0xBVkUpICYmIChHU1RfU1RBVEUgKG9iaikgIT0gc3RhdGUpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChvYmosICJyZXF1ZXN0aW5nIHN0YXRlIGNoYW5nZTogJXMiLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAoc3RhdGUpKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChvYmopLAotICAgICAgICBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSAob2JqLCBzdGF0ZSkpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGludAotamFja19wcm9jZXNzX2NiIChqYWNrX25mcmFtZXNfdCBuZnJhbWVzLCB2b2lkICphcmcpCi17Ci0gIEdzdEphY2tBdWRpb0Nvbm5lY3Rpb24gKmNvbm4gPSAoR3N0SmFja0F1ZGlvQ29ubmVjdGlvbiAqKSBhcmc7Ci0gIEdMaXN0ICp3YWxrOwotICBpbnQgcmVzID0gMDsKLSAgamFja190cmFuc3BvcnRfc3RhdGVfdCB0cyA9IGphY2tfdHJhbnNwb3J0X3F1ZXJ5IChjb25uLT5jbGllbnQsIE5VTEwpOwotCi0gIGlmICh0cyAhPSBjb25uLT5jdXJfdHMpIHsKLSAgICBjb25uLT5jdXJfdHMgPSB0czsKLSAgICBzd2l0Y2ggKHRzKSB7Ci0gICAgICBjYXNlIEphY2tUcmFuc3BvcnRTdG9wcGVkOgotICAgICAgICBHU1RfREVCVUcgKCJ0cmFuc3BvcnQgc3RhdGUgaXMgJ3N0b3BwZWQnIik7Ci0gICAgICAgIGNvbm4tPnRyYW5zcG9ydF9zdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBKYWNrVHJhbnNwb3J0U3RhcnRpbmc6Ci0gICAgICAgIEdTVF9ERUJVRyAoInRyYW5zcG9ydCBzdGF0ZSBpcyAnc3RhcnRpbmcnIik7Ci0gICAgICAgIGNvbm4tPnRyYW5zcG9ydF9zdGF0ZSA9IEdTVF9TVEFURV9SRUFEWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEphY2tUcmFuc3BvcnRSb2xsaW5nOgotICAgICAgICBHU1RfREVCVUcgKCJ0cmFuc3BvcnQgc3RhdGUgaXMgJ3JvbGxpbmcnIik7Ci0gICAgICAgIGNvbm4tPnRyYW5zcG9ydF9zdGF0ZSA9IEdTVF9TVEFURV9QTEFZSU5HOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBHU1RfREVCVUcgKCJudW0gb2YgY2xpZW50czogc3JjPSVkLCBzaW5rPSVkIiwKLSAgICAgICAgZ19saXN0X2xlbmd0aCAoY29ubi0+c3JjX2NsaWVudHMpLCBnX2xpc3RfbGVuZ3RoIChjb25uLT5zaW5rX2NsaWVudHMpKTsKLSAgfQotCi0gIGdfbXV0ZXhfbG9jayAoJmNvbm4tPmxvY2spOwotICAvKiBjYWxsIHNvdXJjZXMgZmlyc3QsIHRoZW4gc2lua3MuIFNvdXJjZXMgd2lsbCBlaXRoZXIgcHVzaCBkYXRhIGludG8gdGhlCi0gICAqIHJpbmdidWZmZXIgb2YgdGhlIHNpbmtzLCB3aGljaCB3aWxsIHRoZW4gcHVsbCB0aGUgZGF0YSBvdXQgb2YgaXQsIG9yCi0gICAqIHNpbmtzIHdpbGwgcHVsbCB0aGUgZGF0YSBmcm9tIHRoZSBzb3VyY2VzLiAqLwotICBmb3IgKHdhbGsgPSBjb25uLT5zcmNfY2xpZW50czsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdEphY2tBdWRpb0NsaWVudCAqY2xpZW50ID0gKEdzdEphY2tBdWRpb0NsaWVudCAqKSB3YWxrLT5kYXRhOwotCi0gICAgLyogb25seSBjYWxsIGFjdGl2ZSBjbGllbnRzICovCi0gICAgaWYgKChjbGllbnQtPmFjdGl2ZSB8fCBjbGllbnQtPmRlYWN0aXZhdGUpICYmIGNsaWVudC0+cHJvY2VzcykgewotICAgICAgcmVzID0gY2xpZW50LT5wcm9jZXNzIChuZnJhbWVzLCBjbGllbnQtPnVzZXJfZGF0YSk7Ci0gICAgICBpZiAoY2xpZW50LT5kZWFjdGl2YXRlKSB7Ci0gICAgICAgIGNsaWVudC0+ZGVhY3RpdmF0ZSA9IEZBTFNFOwotICAgICAgICBnX2NvbmRfc2lnbmFsICgmY29ubi0+Zmx1c2hfY29uZCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGZvciAod2FsayA9IGNvbm4tPnNpbmtfY2xpZW50czsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdEphY2tBdWRpb0NsaWVudCAqY2xpZW50ID0gKEdzdEphY2tBdWRpb0NsaWVudCAqKSB3YWxrLT5kYXRhOwotCi0gICAgLyogb25seSBjYWxsIGFjdGl2ZSBjbGllbnRzICovCi0gICAgaWYgKChjbGllbnQtPmFjdGl2ZSB8fCBjbGllbnQtPmRlYWN0aXZhdGUpICYmIGNsaWVudC0+cHJvY2VzcykgewotICAgICAgcmVzID0gY2xpZW50LT5wcm9jZXNzIChuZnJhbWVzLCBjbGllbnQtPnVzZXJfZGF0YSk7Ci0gICAgICBpZiAoY2xpZW50LT5kZWFjdGl2YXRlKSB7Ci0gICAgICAgIGNsaWVudC0+ZGVhY3RpdmF0ZSA9IEZBTFNFOwotICAgICAgICBnX2NvbmRfc2lnbmFsICgmY29ubi0+Zmx1c2hfY29uZCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogaGFuZGxlIHRyYW5zcG9ydCBzdGF0ZSByZXF1aXNpdGlvbiwgZG8gc2lua3MgZmlyc3QsIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0Ci0gICAqIGVsZW1lbnQgdGhhdCBoYW5kbGVkIGl0ICovCi0gIGlmIChjb25uLT50cmFuc3BvcnRfc3RhdGUgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgewotICAgIGZvciAod2FsayA9IGNvbm4tPnNpbmtfY2xpZW50czsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgICAgaWYgKGphY2tfaGFuZGxlX3RyYW5zcG9ydF9jaGFuZ2UgKChHc3RKYWNrQXVkaW9DbGllbnQgKikgd2Fsay0+ZGF0YSwKLSAgICAgICAgICAgICAgY29ubi0+dHJhbnNwb3J0X3N0YXRlKSkgewotICAgICAgICBjb25uLT50cmFuc3BvcnRfc3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKGNvbm4tPnRyYW5zcG9ydF9zdGF0ZSAhPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKSB7Ci0gICAgZm9yICh3YWxrID0gY29ubi0+c3JjX2NsaWVudHM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICAgIGlmIChqYWNrX2hhbmRsZV90cmFuc3BvcnRfY2hhbmdlICgoR3N0SmFja0F1ZGlvQ2xpZW50ICopIHdhbGstPmRhdGEsCi0gICAgICAgICAgICAgIGNvbm4tPnRyYW5zcG9ydF9zdGF0ZSkpIHsKLSAgICAgICAgY29ubi0+dHJhbnNwb3J0X3N0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmY29ubi0+bG9jayk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWphY2tfc2h1dGRvd25fY2IgKHZvaWQgKmFyZykKLXsKLSAgR3N0SmFja0F1ZGlvQ29ubmVjdGlvbiAqY29ubiA9IChHc3RKYWNrQXVkaW9Db25uZWN0aW9uICopIGFyZzsKLSAgR0xpc3QgKndhbGs7Ci0KLSAgR1NUX0RFQlVHICgiZGlzY29ubmVjdCBjbGllbnQgJXMgZnJvbSBzZXJ2ZXIgJXMiLCBjb25uLT5pZCwKLSAgICAgIEdTVF9TVFJfTlVMTCAoY29ubi0+c2VydmVyKSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmY29ubi0+bG9jayk7Ci0gIGZvciAod2FsayA9IGNvbm4tPnNyY19jbGllbnRzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0SmFja0F1ZGlvQ2xpZW50ICpjbGllbnQgPSAoR3N0SmFja0F1ZGlvQ2xpZW50ICopIHdhbGstPmRhdGE7Ci0KLSAgICBjbGllbnQtPnNlcnZlcl9kb3duID0gVFJVRTsKLSAgICBnX2NvbmRfc2lnbmFsICgmY29ubi0+Zmx1c2hfY29uZCk7Ci0gICAgaWYgKGNsaWVudC0+c2h1dGRvd24pCi0gICAgICBjbGllbnQtPnNodXRkb3duIChjbGllbnQtPnVzZXJfZGF0YSk7Ci0gIH0KLSAgZm9yICh3YWxrID0gY29ubi0+c2lua19jbGllbnRzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0SmFja0F1ZGlvQ2xpZW50ICpjbGllbnQgPSAoR3N0SmFja0F1ZGlvQ2xpZW50ICopIHdhbGstPmRhdGE7Ci0KLSAgICBjbGllbnQtPnNlcnZlcl9kb3duID0gVFJVRTsKLSAgICBnX2NvbmRfc2lnbmFsICgmY29ubi0+Zmx1c2hfY29uZCk7Ci0gICAgaWYgKGNsaWVudC0+c2h1dGRvd24pCi0gICAgICBjbGllbnQtPnNodXRkb3duIChjbGllbnQtPnVzZXJfZGF0YSk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZjb25uLT5sb2NrKTsKLX0KLQotLyogd2UgZXJyb3Igb3V0ICovCi1zdGF0aWMgaW50Ci1qYWNrX3NhbXBsZV9yYXRlX2NiIChqYWNrX25mcmFtZXNfdCBuZnJhbWVzLCB2b2lkICphcmcpCi17Ci0gIGphY2tfc2h1dGRvd25fY2IgKGFyZyk7Ci0gIHJldHVybiAwOwotfQotCi0vKiB3ZSBlcnJvciBvdXQgKi8KLXN0YXRpYyBpbnQKLWphY2tfYnVmZmVyX3NpemVfY2IgKGphY2tfbmZyYW1lc190IG5mcmFtZXMsIHZvaWQgKmFyZykKLXsKLSAgamFja19zaHV0ZG93bl9jYiAoYXJnKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdjaGFyICppZDsKLSAgY29uc3QgZ2NoYXIgKnNlcnZlcjsKLX0gRmluZERhdGE7Ci0KLXN0YXRpYyBnaW50Ci1jb25uZWN0aW9uX2ZpbmQgKEdzdEphY2tBdWRpb0Nvbm5lY3Rpb24gKiBjb25uLCBGaW5kRGF0YSAqIGRhdGEpCi17Ci0gIC8qIGlkJ3MgbXVzdCBtYXRjaCAqLwotICBpZiAoc3RyY21wIChjb25uLT5pZCwgZGF0YS0+aWQpKQotICAgIHJldHVybiAxOwotCi0gIC8qIGJvdGggdGhlIHNhbWUgb3IgTlVMTCAqLwotICBpZiAoY29ubi0+c2VydmVyID09IGRhdGEtPnNlcnZlcikKLSAgICByZXR1cm4gMDsKLQotICAvKiB3ZSBjYW5ub3QgY29tcGFyZSBOVUxMICovCi0gIGlmIChjb25uLT5zZXJ2ZXIgPT0gTlVMTCB8fCBkYXRhLT5zZXJ2ZXIgPT0gTlVMTCkKLSAgICByZXR1cm4gMTsKLQotICBpZiAoc3RyY21wIChjb25uLT5zZXJ2ZXIsIGRhdGEtPnNlcnZlcikpCi0gICAgcmV0dXJuIDE7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIG1ha2UgYSBjb25uZWN0aW9uIHdpdGggQGlkIGFuZCBAc2VydmVyLiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSB3aXRoIHRoZQotICogc3RhdHVzIHNldC4gKi8KLXN0YXRpYyBHc3RKYWNrQXVkaW9Db25uZWN0aW9uICoKLWdzdF9qYWNrX2F1ZGlvX21ha2VfY29ubmVjdGlvbiAoY29uc3QgZ2NoYXIgKiBpZCwgY29uc3QgZ2NoYXIgKiBzZXJ2ZXIsCi0gICAgamFja19jbGllbnRfdCAqIGpjbGllbnQsIGphY2tfc3RhdHVzX3QgKiBzdGF0dXMpCi17Ci0gIEdzdEphY2tBdWRpb0Nvbm5lY3Rpb24gKmNvbm47Ci0gIGphY2tfb3B0aW9uc190IG9wdGlvbnM7Ci0gIGdpbnQgcmVzOwotCi0gICpzdGF0dXMgPSAwOwotCi0gIEdTVF9ERUJVRyAoIm5ldyBjbGllbnQgJXMsIGNvbm5lY3RpbmcgdG8gc2VydmVyICVzIiwgaWQsCi0gICAgICBHU1RfU1RSX05VTEwgKHNlcnZlcikpOwotCi0gIC8qIG5ldmVyIHN0YXJ0IGEgc2VydmVyICovCi0gIG9wdGlvbnMgPSBKYWNrTm9TdGFydFNlcnZlcjsKLSAgLyogaWYgd2UgaGF2ZSBhIHNlcnZlcm5hbWUsIHVzZSBpdCAqLwotICBpZiAoc2VydmVyICE9IE5VTEwpCi0gICAgb3B0aW9ucyB8PSBKYWNrU2VydmVyTmFtZTsKLSAgLyogb3BlbiB0aGUgY2xpZW50ICovCi0gIGlmIChqY2xpZW50ID09IE5VTEwpCi0gICAgamNsaWVudCA9IGphY2tfY2xpZW50X29wZW4gKGlkLCBvcHRpb25zLCBzdGF0dXMsIHNlcnZlcik7Ci0gIGlmIChqY2xpZW50ID09IE5VTEwpCi0gICAgZ290byBjb3VsZF9ub3Rfb3BlbjsKLQotICAvKiBub3cgY3JlYXRlIG9iamVjdCAqLwotICBjb25uID0gZ19uZXcgKEdzdEphY2tBdWRpb0Nvbm5lY3Rpb24sIDEpOwotICBjb25uLT5yZWZjb3VudCA9IDE7Ci0gIGdfbXV0ZXhfaW5pdCAoJmNvbm4tPmxvY2spOwotICBnX2NvbmRfaW5pdCAoJmNvbm4tPmZsdXNoX2NvbmQpOwotICBjb25uLT5pZCA9IGdfc3RyZHVwIChpZCk7Ci0gIGNvbm4tPnNlcnZlciA9IGdfc3RyZHVwIChzZXJ2ZXIpOwotICBjb25uLT5jbGllbnQgPSBqY2xpZW50OwotICBjb25uLT5uX2NsaWVudHMgPSAwOwotICBjb25uLT5zcmNfY2xpZW50cyA9IE5VTEw7Ci0gIGNvbm4tPnNpbmtfY2xpZW50cyA9IE5VTEw7Ci0gIGNvbm4tPmN1cl90cyA9IC0xOwotICBjb25uLT50cmFuc3BvcnRfc3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOwotCi0gIC8qIHNldCBvdXIgY2FsbGJhY2tzICAqLwotICBqYWNrX3NldF9wcm9jZXNzX2NhbGxiYWNrIChqY2xpZW50LCBqYWNrX3Byb2Nlc3NfY2IsIGNvbm4pOwotICAvKiB0aGVzZSBjYWxsYmFja3MgY2F1c2UgdXMgdG8gZXJyb3IgKi8KLSAgamFja19zZXRfYnVmZmVyX3NpemVfY2FsbGJhY2sgKGpjbGllbnQsIGphY2tfYnVmZmVyX3NpemVfY2IsIGNvbm4pOwotICBqYWNrX3NldF9zYW1wbGVfcmF0ZV9jYWxsYmFjayAoamNsaWVudCwgamFja19zYW1wbGVfcmF0ZV9jYiwgY29ubik7Ci0gIGphY2tfb25fc2h1dGRvd24gKGpjbGllbnQsIGphY2tfc2h1dGRvd25fY2IsIGNvbm4pOwotCi0gIC8qIGFsbCBjYWxsYmFja3MgYXJlIHNldCwgYWN0aXZhdGUgdGhlIGNsaWVudCAqLwotICBHU1RfSU5GTyAoImFjdGl2YXRlIGphY2tfY2xpZW50ICVwIiwgamNsaWVudCk7Ci0gIGlmICgocmVzID0gamFja19hY3RpdmF0ZSAoamNsaWVudCkpKQotICAgIGdvdG8gY291bGRfbm90X2FjdGl2YXRlOwotCi0gIEdTVF9ERUJVRyAoIm9wZW5lZCBjb25uZWN0aW9uICVwIiwgY29ubik7Ci0KLSAgcmV0dXJuIGNvbm47Ci0KLSAgLyogRVJST1JTICovCi1jb3VsZF9ub3Rfb3BlbjoKLSAgewotICAgIEdTVF9ERUJVRyAoImZhaWxlZCB0byBvcGVuIGphY2sgY2xpZW50LCAlZCIsICpzdGF0dXMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1jb3VsZF9ub3RfYWN0aXZhdGU6Ci0gIHsKLSAgICBHU1RfRVJST1IgKCJDb3VsZCBub3QgYWN0aXZhdGUgY2xpZW50ICglZCkiLCByZXMpOwotICAgICpzdGF0dXMgPSBKYWNrRmFpbHVyZTsKLSAgICBnX211dGV4X2NsZWFyICgmY29ubi0+bG9jayk7Ci0gICAgZ19mcmVlIChjb25uLT5pZCk7Ci0gICAgZ19mcmVlIChjb25uLT5zZXJ2ZXIpOwotICAgIGdfZnJlZSAoY29ubik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEphY2tBdWRpb0Nvbm5lY3Rpb24gKgotZ3N0X2phY2tfYXVkaW9fZ2V0X2Nvbm5lY3Rpb24gKGNvbnN0IGdjaGFyICogaWQsIGNvbnN0IGdjaGFyICogc2VydmVyLAotICAgIGphY2tfY2xpZW50X3QgKiBqY2xpZW50LCBqYWNrX3N0YXR1c190ICogc3RhdHVzKQotewotICBHc3RKYWNrQXVkaW9Db25uZWN0aW9uICpjb25uOwotICBHTGlzdCAqZm91bmQ7Ci0gIEZpbmREYXRhIGRhdGE7Ci0KLSAgR1NUX0RFQlVHICgiZ2V0dGluZyBjb25uZWN0aW9uIGZvciBpZCAlcywgc2VydmVyICVzIiwgaWQsCi0gICAgICBHU1RfU1RSX05VTEwgKHNlcnZlcikpOwotCi0gIGRhdGEuaWQgPSBpZDsKLSAgZGF0YS5zZXJ2ZXIgPSBzZXJ2ZXI7Ci0KLSAgR19MT0NLIChjb25uZWN0aW9uc19sb2NrKTsKLSAgZm91bmQgPQotICAgICAgZ19saXN0X2ZpbmRfY3VzdG9tIChjb25uZWN0aW9ucywgJmRhdGEsIChHQ29tcGFyZUZ1bmMpIGNvbm5lY3Rpb25fZmluZCk7Ci0gIGlmIChmb3VuZCAhPSBOVUxMICYmIGpjbGllbnQgIT0gTlVMTCkgewotICAgIC8qIHdlIGZvdW5kIGl0LCBpbmNyZWFzZSByZWZjb3VudCBhbmQgcmV0dXJuIGl0ICovCi0gICAgY29ubiA9IChHc3RKYWNrQXVkaW9Db25uZWN0aW9uICopIGZvdW5kLT5kYXRhOwotICAgIGNvbm4tPnJlZmNvdW50Kys7Ci0KLSAgICBHU1RfREVCVUcgKCJmb3VuZCBjb25uZWN0aW9uICVwIiwgY29ubik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogbWFrZSBuZXcgY29ubmVjdGlvbiAqLwotICAgIGNvbm4gPSBnc3RfamFja19hdWRpb19tYWtlX2Nvbm5lY3Rpb24gKGlkLCBzZXJ2ZXIsIGpjbGllbnQsIHN0YXR1cyk7Ci0gICAgaWYgKGNvbm4gIT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHICgiY3JlYXRlZCBjb25uZWN0aW9uICVwIiwgY29ubik7Ci0gICAgICAvKiBhZGQgdG8gbGlzdCBvbiBzdWNjZXNzICovCi0gICAgICBjb25uZWN0aW9ucyA9IGdfbGlzdF9wcmVwZW5kIChjb25uZWN0aW9ucywgY29ubik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiY291bGQgbm90IGNyZWF0ZSBjb25uZWN0aW9uIik7Ci0gICAgfQotICB9Ci0gIEdfVU5MT0NLIChjb25uZWN0aW9uc19sb2NrKTsKLQotICByZXR1cm4gY29ubjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX2F1ZGlvX3VucmVmX2Nvbm5lY3Rpb24gKEdzdEphY2tBdWRpb0Nvbm5lY3Rpb24gKiBjb25uKQotewotICBnaW50IHJlczsKLSAgZ2Jvb2xlYW4gemVybzsKLQotICBHU1RfREVCVUcgKCJ1bnJlZiBjb25uZWN0aW9uICVwIHJlZmNudCAlZCIsIGNvbm4sIGNvbm4tPnJlZmNvdW50KTsKLQotICBHX0xPQ0sgKGNvbm5lY3Rpb25zX2xvY2spOwotICBjb25uLT5yZWZjb3VudC0tOwotICBpZiAoKHplcm8gPSAoY29ubi0+cmVmY291bnQgPT0gMCkpKSB7Ci0gICAgR1NUX0RFQlVHICgiY2xvc2luZyBjb25uZWN0aW9uICVwIiwgY29ubik7Ci0gICAgLyogcmVtb3ZlIGZyb20gbGlzdCwgd2UgY2FuIHJlbGVhc2UgdGhlIG11dGV4IGFmdGVyIHJlbW92aW5nIHRoZSBjb25uZWN0aW9uCi0gICAgICogZnJvbSB0aGUgbGlzdCBiZWNhdXNlIGFmdGVyIHRoYXQsIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBjb25uZWN0aW9uIGFueW1vcmUuICovCi0gICAgY29ubmVjdGlvbnMgPSBnX2xpc3RfcmVtb3ZlIChjb25uZWN0aW9ucywgY29ubik7Ci0gIH0KLSAgR19VTkxPQ0sgKGNvbm5lY3Rpb25zX2xvY2spOwotCi0gIC8qIGlmIHdlIGFyZSB6ZXJvLCBjbG9zZSBhbmQgY2xlYW51cCB0aGUgY29ubmVjdGlvbiAqLwotICBpZiAoemVybykgewotICAgIC8qIGRvbid0IHVzZSBjb25uLT5sb2NrIGhlcmUuIHR3byByZWFzb25zOgotICAgICAqCi0gICAgICogIDEpIGl0cyBub3QgbmVjZXNzYXJ5OiBqYWNrX2RlYWN0aXZhdGUoKSB3aWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIEpBQ0sgdGhyZWFkCi0gICAgICogICAgICBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25uZWN0aW9uIGlzIGNsZWFuZWQgdXAgYnkgYSB0aHJlYWQgam9pbiwgaGVuY2UgCi0gICAgICogICAgICBubyBtb3JlIGNhbGxiYWNrcyBjYW4gb2NjdXIgb3IgYmUgaW4gcHJvZ3Jlc3MuCi0gICAgICoKLSAgICAgKiAyKSBpdCB3b3VsZCBkZWFkbG9jayBhbnl3YXksIGJlY2F1c2UgamFja19kZWFjdGl2YXRlKCkgd2lsbCBzbGVlcAotICAgICAqICAgICAgd2FpdGluZyBmb3IgdGhlIEpBQ0sgdGhyZWFkLCBhbmQgY2FuIHRodXMgY2F1c2UgZGVhZGxvY2sgaW4gCi0gICAgICogICAgICBqYWNrX3Byb2Nlc3NfY2IoKQotICAgICAqLwotICAgIEdTVF9JTkZPICgiZGVhY3RpdmF0ZSBqYWNrX2NsaWVudCAlcCIsIGNvbm4tPmNsaWVudCk7Ci0gICAgaWYgKChyZXMgPSBqYWNrX2RlYWN0aXZhdGUgKGNvbm4tPmNsaWVudCkpKSB7Ci0gICAgICAvKiB3ZSBvbmx5IHdhcm4sIHRoaXMgbWVhbnMgdGhlIHNlcnZlciBpcyBwcm9iYWJseSBzaHV0IGRvd24gYW5kIHRoZSBjbGllbnQKLSAgICAgICAqIGlzIGdvbmUgYW55d2F5LiAqLwotICAgICAgR1NUX1dBUk5JTkcgKCJDb3VsZCBub3QgZGVhY3RpdmF0ZSBKYWNrIGNsaWVudCAoJWQpIiwgcmVzKTsKLSAgICB9Ci0gICAgLyogY2xvc2UgY29ubmVjdGlvbiAqLwotICAgIGlmICgocmVzID0gamFja19jbGllbnRfY2xvc2UgKGNvbm4tPmNsaWVudCkpKSB7Ci0gICAgICAvKiB3ZSBhc3N1bWUgdGhlIGNsaWVudCBpcyBnb25lLiAqLwotICAgICAgR1NUX1dBUk5JTkcgKCJjbG9zZSBmYWlsZWQgKCVkKSIsIHJlcyk7Ci0gICAgfQotCi0gICAgLyogZnJlZSByZXNvdXJjZXMgKi8KLSAgICBnX211dGV4X2NsZWFyICgmY29ubi0+bG9jayk7Ci0gICAgZ19jb25kX2NsZWFyICgmY29ubi0+Zmx1c2hfY29uZCk7Ci0gICAgZ19mcmVlIChjb25uLT5pZCk7Ci0gICAgZ19mcmVlIChjb25uLT5zZXJ2ZXIpOwotICAgIGdfZnJlZSAoY29ubik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX2F1ZGlvX2Nvbm5lY3Rpb25fYWRkX2NsaWVudCAoR3N0SmFja0F1ZGlvQ29ubmVjdGlvbiAqIGNvbm4sCi0gICAgR3N0SmFja0F1ZGlvQ2xpZW50ICogY2xpZW50KQotewotICBnX211dGV4X2xvY2sgKCZjb25uLT5sb2NrKTsKLSAgc3dpdGNoIChjbGllbnQtPnR5cGUpIHsKLSAgICBjYXNlIEdTVF9KQUNLX0NMSUVOVF9TT1VSQ0U6Ci0gICAgICBjb25uLT5zcmNfY2xpZW50cyA9IGdfbGlzdF9hcHBlbmQgKGNvbm4tPnNyY19jbGllbnRzLCBjbGllbnQpOwotICAgICAgY29ubi0+bl9jbGllbnRzKys7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9KQUNLX0NMSUVOVF9TSU5LOgotICAgICAgY29ubi0+c2lua19jbGllbnRzID0gZ19saXN0X2FwcGVuZCAoY29ubi0+c2lua19jbGllbnRzLCBjbGllbnQpOwotICAgICAgY29ubi0+bl9jbGllbnRzKys7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ193YXJuaW5nICgidHJ5aW5nIHRvIGFkZCB1bmtub3duIGNsaWVudCB0eXBlIik7Ci0gICAgICBicmVhazsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmNvbm4tPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fY29ubmVjdGlvbl9yZW1vdmVfY2xpZW50IChHc3RKYWNrQXVkaW9Db25uZWN0aW9uICogY29ubiwKLSAgICBHc3RKYWNrQXVkaW9DbGllbnQgKiBjbGllbnQpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJmNvbm4tPmxvY2spOwotICBzd2l0Y2ggKGNsaWVudC0+dHlwZSkgewotICAgIGNhc2UgR1NUX0pBQ0tfQ0xJRU5UX1NPVVJDRToKLSAgICAgIGNvbm4tPnNyY19jbGllbnRzID0gZ19saXN0X3JlbW92ZSAoY29ubi0+c3JjX2NsaWVudHMsIGNsaWVudCk7Ci0gICAgICBjb25uLT5uX2NsaWVudHMtLTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0pBQ0tfQ0xJRU5UX1NJTks6Ci0gICAgICBjb25uLT5zaW5rX2NsaWVudHMgPSBnX2xpc3RfcmVtb3ZlIChjb25uLT5zaW5rX2NsaWVudHMsIGNsaWVudCk7Ci0gICAgICBjb25uLT5uX2NsaWVudHMtLTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX3dhcm5pbmcgKCJ0cnlpbmcgdG8gcmVtb3ZlIHVua25vd24gY2xpZW50IHR5cGUiKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmY29ubi0+bG9jayk7Ci19Ci0KLS8qKgotICogZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldDoKLSAqIEBpZDogdGhlIGNsaWVudCBpZAotICogQHNlcnZlcjogdGhlIHNlcnZlciB0byBjb25uZWN0IHRvIG9yIE5VTEwgZm9yIHRoZSBkZWZhdWx0IHNlcnZlcgotICogQHR5cGU6IHRoZSBjbGllbnQgdHlwZQotICogQHNodXRkb3duOiBhIGNhbGxiYWNrIHdoZW4gdGhlIGphY2sgc2VydmVyIHNodXRzIGRvd24KLSAqIEBwcm9jZXNzOiBhIGNhbGxiYWNrIHdoZW4gc2FtcGxlcyBhcmUgYXZhaWxhYmxlCi0gKiBAYnVmZmVyX3NpemU6IGEgY2FsbGJhY2sgd2hlbiB0aGUgYnVmZmVyX3NpemUgY2hhbmdlcwotICogQHNhbXBsZV9yYXRlOiBhIGNhbGxiYWNrIHdoZW4gdGhlIHNhbXBsZV9yYXRlIGNoYW5nZXMKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrcwotICogQHN0YXR1czogcG9pbnRlciB0byBob2xkIHRoZSBqYWNrIHN0YXR1cyBjb2RlIGluIGNhc2Ugb2YgZXJyb3JzCi0gKgotICogR2V0IHRoZSBqYWNrIGNsaWVudCBjb25uZWN0aW9uIGZvciBAaWQgYW5kIEBzZXJ2ZXIuIENvbm5lY3Rpb25zIHRvIHRoZSBzYW1lCi0gKiBAaWQgYW5kIEBzZXJ2ZXIgd2lsbCByZWNlaXZlIHRoZSBzYW1lIHBoeXNpY2FsIEphY2sgY2xpZW50IGNvbm5lY3Rpb24gYW5kCi0gKiB3aWxsIHRoZXJlZm9yZSBiZSBzY2hlZHVsZWQgaW4gdGhlIHNhbWUgcHJvY2VzcyBjYWxsYmFjay4KLSAqIAotICogUmV0dXJuczogYSAjR3N0SmFja0F1ZGlvQ2xpZW50LgotICovCi1Hc3RKYWNrQXVkaW9DbGllbnQgKgotZ3N0X2phY2tfYXVkaW9fY2xpZW50X25ldyAoY29uc3QgZ2NoYXIgKiBpZCwgY29uc3QgZ2NoYXIgKiBzZXJ2ZXIsCi0gICAgamFja19jbGllbnRfdCAqIGpjbGllbnQsIEdzdEphY2tDbGllbnRUeXBlIHR5cGUsCi0gICAgdm9pZCAoKnNodXRkb3duKSAodm9pZCAqYXJnKSwgSmFja1Byb2Nlc3NDYWxsYmFjayBwcm9jZXNzLAotICAgIEphY2tCdWZmZXJTaXplQ2FsbGJhY2sgYnVmZmVyX3NpemUsIEphY2tTYW1wbGVSYXRlQ2FsbGJhY2sgc2FtcGxlX3JhdGUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhLCBqYWNrX3N0YXR1c190ICogc3RhdHVzKQotewotICBHc3RKYWNrQXVkaW9DbGllbnQgKmNsaWVudDsKLSAgR3N0SmFja0F1ZGlvQ29ubmVjdGlvbiAqY29ubjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWQgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdGF0dXMgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgLyogZmlyc3QgZ2V0IGEgY29ubmVjdGlvbiBmb3IgdGhlIGlkL3NlcnZlciBwYWlyICovCi0gIGNvbm4gPSBnc3RfamFja19hdWRpb19nZXRfY29ubmVjdGlvbiAoaWQsIHNlcnZlciwgamNsaWVudCwgc3RhdHVzKTsKLSAgaWYgKGNvbm4gPT0gTlVMTCkKLSAgICBnb3RvIG5vX2Nvbm5lY3Rpb247Ci0KLSAgR1NUX0lORk8gKCJuZXcgY2xpZW50ICVzIiwgaWQpOwotCi0gIC8qIG1ha2UgbmV3IGNsaWVudCB1c2luZyB0aGUgY29ubmVjdGlvbiAqLwotICBjbGllbnQgPSBnX25ldyAoR3N0SmFja0F1ZGlvQ2xpZW50LCAxKTsKLSAgY2xpZW50LT5hY3RpdmUgPSBjbGllbnQtPmRlYWN0aXZhdGUgPSBGQUxTRTsKLSAgY2xpZW50LT5jb25uID0gY29ubjsKLSAgY2xpZW50LT50eXBlID0gdHlwZTsKLSAgY2xpZW50LT5zaHV0ZG93biA9IHNodXRkb3duOwotICBjbGllbnQtPnByb2Nlc3MgPSBwcm9jZXNzOwotICBjbGllbnQtPmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemU7Ci0gIGNsaWVudC0+c2FtcGxlX3JhdGUgPSBzYW1wbGVfcmF0ZTsKLSAgY2xpZW50LT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIGNsaWVudC0+c2VydmVyX2Rvd24gPSBGQUxTRTsKLQotICAvKiBhZGQgdGhlIGNsaWVudCB0byB0aGUgY29ubmVjdGlvbiAqLwotICBnc3RfamFja19hdWRpb19jb25uZWN0aW9uX2FkZF9jbGllbnQgKGNvbm4sIGNsaWVudCk7Ci0KLSAgcmV0dXJuIGNsaWVudDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2Nvbm5lY3Rpb246Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJDb3VsZCBub3QgZ2V0IHNlcnZlciBjb25uZWN0aW9uICglZCkiLCAqc3RhdHVzKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9mcmVlOgotICogQGNsaWVudDogYSAjR3N0SmFja0F1ZGlvQ2xpZW50Ci0gKgotICogRnJlZSB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgQGNsaWVudC4KLSAqLwotdm9pZAotZ3N0X2phY2tfYXVkaW9fY2xpZW50X2ZyZWUgKEdzdEphY2tBdWRpb0NsaWVudCAqIGNsaWVudCkKLXsKLSAgR3N0SmFja0F1ZGlvQ29ubmVjdGlvbiAqY29ubjsKLQotICBnX3JldHVybl9pZl9mYWlsIChjbGllbnQgIT0gTlVMTCk7Ci0KLSAgR1NUX0lORk8gKCJmcmVlIGNsaWVudCIpOwotCi0gIGNvbm4gPSBjbGllbnQtPmNvbm47Ci0KLSAgLyogcmVtb3ZlIGZyb20gY29ubmVjdGlvbiBmaXJzdCBzbyB0aGF0IGl0J3Mgbm90IHNjaGVkdWxlZCBhbnltb3JlIGFmdGVyIHRoaXMKLSAgICogY2FsbCAqLwotICBnc3RfamFja19hdWRpb19jb25uZWN0aW9uX3JlbW92ZV9jbGllbnQgKGNvbm4sIGNsaWVudCk7Ci0gIGdzdF9qYWNrX2F1ZGlvX3VucmVmX2Nvbm5lY3Rpb24gKGNvbm4pOwotCi0gIGdfZnJlZSAoY2xpZW50KTsKLX0KLQotLyoqCi0gKiBnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudDoKLSAqIEBjbGllbnQ6IGEgI0dzdEphY2tBdWRpb0NsaWVudAotICoKLSAqIEdldCB0aGUgamFjayBhdWRpbyBjbGllbnQgZm9yIEBjbGllbnQuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwZXJmb3JtCi0gKiBvcGVyYXRpb25zIG9uIHRoZSBqYWNrIHNlcnZlciBmcm9tIHRoaXMgY2xpZW50LgotICoKLSAqIFJldHVybnM6IFRoZSBqYWNrIGF1ZGlvIGNsaWVudC4KLSAqLwotamFja19jbGllbnRfdCAqCi1nc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudCAoR3N0SmFja0F1ZGlvQ2xpZW50ICogY2xpZW50KQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2xpZW50ICE9IE5VTEwsIE5VTEwpOwotCi0gIC8qIG5vIGxvY2sgbmVlZGVkLCB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIGNsaWVudCBkb2VzIG5vdCBjaGFuZ2UgCi0gICAqIG9uY2UgdGhlIGNsaWVudCBpcyBjcmVhdGVkLiAqLwotICByZXR1cm4gY2xpZW50LT5jb25uLT5jbGllbnQ7Ci19Ci0KLS8qKgotICogZ3N0X2phY2tfYXVkaW9fY2xpZW50X3NldF9hY3RpdmU6Ci0gKiBAY2xpZW50OiBhICNHc3RKYWNrQXVkaW9DbGllbnQKLSAqIEBhY3RpdmU6IG5ldyBtb2RlIGZvciB0aGUgY2xpZW50Ci0gKgotICogQWN0aXZhdGUgb3IgZGVhY3RpdmUgQGNsaWVudC4gV2hlbiBhIGNsaWVudCBpcyBhY3RpdmF0ZWQgaXQgd2lsbCByZWNlaXZlCi0gKiBjYWxsYmFja3Mgd2hlbiBkYXRhIHNob3VsZCBiZSBwcm9jZXNzZWQuCi0gKgotICogUmV0dXJuczogMCBpZiBhbGwgb2suCi0gKi8KLWdpbnQKLWdzdF9qYWNrX2F1ZGlvX2NsaWVudF9zZXRfYWN0aXZlIChHc3RKYWNrQXVkaW9DbGllbnQgKiBjbGllbnQsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNsaWVudCAhPSBOVUxMLCAtMSk7Ci0KLSAgLyogbWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5vdCBkaXNwYXRjaGluZyB0aGUgY2xpZW50ICovCi0gIGdfbXV0ZXhfbG9jayAoJmNsaWVudC0+Y29ubi0+bG9jayk7Ci0gIGlmIChjbGllbnQtPmFjdGl2ZSAmJiAhYWN0aXZlKSB7Ci0gICAgLyogd2UgbmVlZCB0byBwcm9jZXNzIG9uY2UgbW9yZSB0byBmbHVzaCB0aGUgcG9ydCAqLwotICAgIGNsaWVudC0+ZGVhY3RpdmF0ZSA9IFRSVUU7Ci0KLSAgICAvKiBuZWVkIHRvIHdhaXQgZm9yIHByb2Nlc3NfY2IgcnVuIG9uY2UgbW9yZSAqLwotICAgIHdoaWxlIChjbGllbnQtPmRlYWN0aXZhdGUgJiYgIWNsaWVudC0+c2VydmVyX2Rvd24pCi0gICAgICBnX2NvbmRfd2FpdCAoJmNsaWVudC0+Y29ubi0+Zmx1c2hfY29uZCwgJmNsaWVudC0+Y29ubi0+bG9jayk7Ci0gIH0KLSAgY2xpZW50LT5hY3RpdmUgPSBhY3RpdmU7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmY2xpZW50LT5jb25uLT5sb2NrKTsKLQotICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X3RyYW5zcG9ydF9zdGF0ZToKLSAqIEBjbGllbnQ6IGEgI0dzdEphY2tBdWRpb0NsaWVudAotICoKLSAqIENoZWNrIHRoZSBjdXJyZW50IHRyYW5zcG9ydCBzdGF0ZS4gVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMgdG8gcmVxdWVzdCBhIHN0YXRlCi0gKiBjaGFuZ2UgZnJvbSB0aGUgYXBwbGljYXRpb24uCi0gKgotICogUmV0dXJuczogdGhlIHN0YXRlLCAlR1NUX1NUQVRFX1ZPSURfUEVORElORyBmb3Igbm8gY2hhbmdlIGluIHRoZSB0cmFuc3BvcnQKLSAqIHN0YXRlCi0gKi8KLUdzdFN0YXRlCi1nc3RfamFja19hdWRpb19jbGllbnRfZ2V0X3RyYW5zcG9ydF9zdGF0ZSAoR3N0SmFja0F1ZGlvQ2xpZW50ICogY2xpZW50KQotewotICBHc3RTdGF0ZSBzdGF0ZSA9IGNsaWVudC0+Y29ubi0+dHJhbnNwb3J0X3N0YXRlOwotCi0gIGNsaWVudC0+Y29ubi0+dHJhbnNwb3J0X3N0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKLSAgcmV0dXJuIHN0YXRlOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2phY2svZ3N0amFja2F1ZGlvY2xpZW50LmggYi9leHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjZDcwYy4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrYXVkaW9jbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0amFja2F1ZGlvY2xpZW50Lmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9KQUNLX0FVRElPX0NMSUVOVF9IX18KLSNkZWZpbmUgX19HU1RfSkFDS19BVURJT19DTElFTlRfSF9fCi0KLSNpbmNsdWRlIDxqYWNrL2phY2suaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIGVudW0gCi17Ci0gIEdTVF9KQUNLX0NMSUVOVF9TT1VSQ0UsCi0gIEdTVF9KQUNLX0NMSUVOVF9TSU5LCi19IEdzdEphY2tDbGllbnRUeXBlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0SmFja0F1ZGlvQ2xpZW50IEdzdEphY2tBdWRpb0NsaWVudDsKLQotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9pbml0ICAgICAgICAgICAodm9pZCk7Ci0KLQotR3N0SmFja0F1ZGlvQ2xpZW50ICogIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9uZXcgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKmlkLCBjb25zdCBnY2hhciAqc2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamFja19jbGllbnRfdCAqamNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEphY2tDbGllbnRUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqc2h1dGRvd24pICh2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmFja1Byb2Nlc3NDYWxsYmFjayAgICBwcm9jZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmFja0J1ZmZlclNpemVDYWxsYmFjayBidWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphY2tTYW1wbGVSYXRlQ2FsbGJhY2sgc2FtcGxlX3JhdGUsCi0JCQkJCQkJICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKLQkJCQkJCQkgICAgamFja19zdGF0dXNfdCAqc3RhdHVzKTsKLXZvaWQgICAgICAgICAgICAgICAgICBnc3RfamFja19hdWRpb19jbGllbnRfZnJlZSAgICAgICAgICAgKEdzdEphY2tBdWRpb0NsaWVudCAqY2xpZW50KTsKLQotamFja19jbGllbnRfdCAqICAgICAgIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50ICAgICAoR3N0SmFja0F1ZGlvQ2xpZW50ICpjbGllbnQpOwotCi1nYm9vbGVhbiAgICAgICAgICAgICAgZ3N0X2phY2tfYXVkaW9fY2xpZW50X3NldF9hY3RpdmUgICAgIChHc3RKYWNrQXVkaW9DbGllbnQgKmNsaWVudCwgZ2Jvb2xlYW4gYWN0aXZlKTsKLQotR3N0U3RhdGUgICAgICAgICAgICAgIGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfdHJhbnNwb3J0X3N0YXRlIChHc3RKYWNrQXVkaW9DbGllbnQgKmNsaWVudCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9KQUNLX0FVRElPX0NMSUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYyBiL2V4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0OWYyNS4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RqYWNrYXVkaW9zaW5rLmM6IGphY2sgYXVkaW8gc2luayBpbXBsZW1lbnRhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWphY2thdWRpb3NpbmsKLSAqIEBzZWVfYWxzbzogI0dzdEF1ZGlvQmFzZVNpbmssICNHc3RBdWRpb1JpbmdCdWZmZXIKLSAqCi0gKiBBIFNpbmsgdGhhdCBvdXRwdXRzIGRhdGEgdG8gSmFjayBwb3J0cy4KLSAqIAotICogSXQgd2lsbCBjcmVhdGUgTiBKYWNrIHBvcnRzIG5hbWVkIG91dF8mbHQ7bmFtZSZndDtfJmx0O251bSZndDsgd2hlcmUgCi0gKiAmbHQ7bmFtZSZndDsgaXMgdGhlIGVsZW1lbnQgbmFtZSBhbmQgJmx0O251bSZndDsgaXMgc3RhcnRpbmcgZnJvbSAxLgotICogRWFjaCBwb3J0IGNvcnJlc3BvbmRzIHRvIGEgZ3N0cmVhbWVyIGNoYW5uZWwuCi0gKiAKLSAqIFRoZSBzYW1wbGVyYXRlIGFzIGV4cG9zZWQgb24gdGhlIGNhcHMgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBzYW1wbGVyYXRlIG9mCi0gKiB0aGUgamFjayBzZXJ2ZXIuCi0gKiAKLSAqIFdoZW4gdGhlICNHc3RKYWNrQXVkaW9TaW5rOmNvbm5lY3QgcHJvcGVydHkgaXMgc2V0IHRvIGF1dG8sIHRoaXMgZWxlbWVudAotICogd2lsbCB0cnkgdG8gY29ubmVjdCBlYWNoIG91dHB1dCBwb3J0IHRvIGEgcmFuZG9tIHBoeXNpY2FsIGphY2sgaW5wdXQgcGluLiBJbgotICogdGhpcyBtb2RlLCB0aGUgc2luayB3aWxsIGV4cG9zZSB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIGNoYW5uZWxzIG9uIGl0cyBwYWQKLSAqIGNhcHMuCi0gKiAKLSAqIFdoZW4gdGhlICNHc3RKYWNrQXVkaW9TaW5rOmNvbm5lY3QgcHJvcGVydHkgaXMgc2V0IHRvIG5vbmUsIHRoZSBlbGVtZW50IHdpbGwKLSAqIGFjY2VwdCBhbnkgbnVtYmVyIG9mIGlucHV0IGNoYW5uZWxzIGFuZCB3aWxsIGNyZWF0ZSAoYnV0IG5vdCBjb25uZWN0KSBhbgotICogb3V0cHV0IHBvcnQgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIAotICogVGhlIGVsZW1lbnQgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIHRoZSBKYWNrIHNlcnZlciBpcyBzaHV0IGRvd24gd2hlbiBpdAotICogd2FzIFBBVVNFRCBvciBQTEFZSU5HLiBUaGlzIGVsZW1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHJhdGUgYW5kIGJ1ZmZlcgotICogc2l6ZSBjaGFuZ2VzIGF0IHJ1bnRpbWUuCi0gKiAKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgISBqYWNrYXVkaW9zaW5rCi0gKiBdfCBQbGF5IGEgc2luZSB3YXZlIHRvIHVzaW5nIGphY2suCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdGphY2thdWRpb3NpbmsuaCIKLSNpbmNsdWRlICJnc3RqYWNrcmluZ2J1ZmZlci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfamFja19hdWRpb19zaW5rX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9qYWNrX2F1ZGlvX3NpbmtfZGVidWcKLQotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19hdWRpb19zaW5rX2FsbG9jYXRlX2NoYW5uZWxzIChHc3RKYWNrQXVkaW9TaW5rICogc2luaywgZ2ludCBjaGFubmVscykKLXsKLSAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gIGNsaWVudCA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50IChzaW5rLT5jbGllbnQpOwotCi0gIC8qIHJlbW92ZSBwb3J0cyB3ZSBkb24ndCBuZWVkICovCi0gIHdoaWxlIChzaW5rLT5wb3J0X2NvdW50ID4gY2hhbm5lbHMpIHsKLSAgICBqYWNrX3BvcnRfdW5yZWdpc3RlciAoY2xpZW50LCBzaW5rLT5wb3J0c1stLXNpbmstPnBvcnRfY291bnRdKTsKLSAgfQotCi0gIC8qIGFsbG9jIGVub3VnaCBvdXRwdXQgcG9ydHMgKi8KLSAgc2luay0+cG9ydHMgPSBnX3JlYWxsb2MgKHNpbmstPnBvcnRzLCBzaXplb2YgKGphY2tfcG9ydF90ICopICogY2hhbm5lbHMpOwotICBzaW5rLT5idWZmZXJzID0gZ19yZWFsbG9jIChzaW5rLT5idWZmZXJzLCBzaXplb2YgKHNhbXBsZV90ICopICogY2hhbm5lbHMpOwotCi0gIC8qIGNyZWF0ZSBhbiBvdXRwdXQgcG9ydCBmb3IgZWFjaCBjaGFubmVsICovCi0gIHdoaWxlIChzaW5rLT5wb3J0X2NvdW50IDwgY2hhbm5lbHMpIHsKLSAgICBnY2hhciAqbmFtZTsKLQotICAgIC8qIHBvcnQgbmFtZXMgc3RhcnQgZnJvbSAxIGFuZCBhcmUgbG9jYWwgdG8gdGhlIGVsZW1lbnQgKi8KLSAgICBuYW1lID0KLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgib3V0XyVzXyVkIiwgR1NUX0VMRU1FTlRfTkFNRSAoc2luayksCi0gICAgICAgIHNpbmstPnBvcnRfY291bnQgKyAxKTsKLSAgICBzaW5rLT5wb3J0c1tzaW5rLT5wb3J0X2NvdW50XSA9Ci0gICAgICAgIGphY2tfcG9ydF9yZWdpc3RlciAoY2xpZW50LCBuYW1lLCBKQUNLX0RFRkFVTFRfQVVESU9fVFlQRSwKLSAgICAgICAgSmFja1BvcnRJc091dHB1dCwgMCk7Ci0gICAgaWYgKHNpbmstPnBvcnRzW3NpbmstPnBvcnRfY291bnRdID09IE5VTEwpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBzaW5rLT5wb3J0X2NvdW50Kys7Ci0KLSAgICBnX2ZyZWUgKG5hbWUpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fc2lua19mcmVlX2NoYW5uZWxzIChHc3RKYWNrQXVkaW9TaW5rICogc2luaykKLXsKLSAgZ2ludCByZXMsIGkgPSAwOwotICBqYWNrX2NsaWVudF90ICpjbGllbnQ7Ci0KLSAgY2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldF9jbGllbnQgKHNpbmstPmNsaWVudCk7Ci0KLSAgLyogZ2V0IHJpZCBvZiBhbGwgcG9ydHMgKi8KLSAgd2hpbGUgKHNpbmstPnBvcnRfY291bnQpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc2luaywgInVucmVnaXN0ZXIgcG9ydCAlZCIsIGkpOwotICAgIGlmICgocmVzID0gamFja19wb3J0X3VucmVnaXN0ZXIgKGNsaWVudCwgc2luay0+cG9ydHNbaSsrXSkpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAidW5yZWdpc3RlciBvZiBwb3J0IGZhaWxlZCAoJWQpIiwgcmVzKTsKLSAgICB9Ci0gICAgc2luay0+cG9ydF9jb3VudC0tOwotICB9Ci0gIGdfZnJlZSAoc2luay0+cG9ydHMpOwotICBzaW5rLT5wb3J0cyA9IE5VTEw7Ci0gIGdfZnJlZSAoc2luay0+YnVmZmVycyk7Ci0gIHNpbmstPmJ1ZmZlcnMgPSBOVUxMOwotfQotCi0vKiByaW5nYnVmZmVyIGFic3RyYWN0IGJhc2UgY2xhc3MgKi8KLXN0YXRpYyBHVHlwZQotZ3N0X2phY2tfcmluZ19idWZmZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSByaW5nYnVmZmVyX3R5cGUgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJnJpbmdidWZmZXJfdHlwZSkpIHsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIHJpbmdidWZmZXJfaW5mbyA9IHsKLSAgICAgIHNpemVvZiAoR3N0SmFja1JpbmdCdWZmZXJDbGFzcyksCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X2phY2tfcmluZ19idWZmZXJfY2xhc3NfaW5pdCwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgc2l6ZW9mIChHc3RKYWNrUmluZ0J1ZmZlciksCi0gICAgICAwLAotICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSBnc3RfamFja19yaW5nX2J1ZmZlcl9pbml0LAotICAgICAgTlVMTAotICAgIH07Ci0gICAgR1R5cGUgdG1wID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfQVVESU9fUklOR19CVUZGRVIsCi0gICAgICAgICJHc3RKYWNrQXVkaW9TaW5rUmluZ0J1ZmZlciIsICZyaW5nYnVmZmVyX2luZm8sIDApOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmcmluZ2J1ZmZlcl90eXBlLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgcmluZ2J1ZmZlcl90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfcmluZ19idWZmZXJfY2xhc3NfaW5pdCAoR3N0SmFja1JpbmdCdWZmZXJDbGFzcyAqIGtsYXNzKQotewotICBHc3RBdWRpb1JpbmdCdWZmZXJDbGFzcyAqZ3N0cmluZ2J1ZmZlcl9jbGFzczsKLQotICBnc3RyaW5nYnVmZmVyX2NsYXNzID0gKEdzdEF1ZGlvUmluZ0J1ZmZlckNsYXNzICopIGtsYXNzOwotCi0gIHJpbmdfcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+b3Blbl9kZXZpY2UgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+Y2xvc2VfZGV2aWNlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfamFja19yaW5nX2J1ZmZlcl9jbG9zZV9kZXZpY2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5hY3F1aXJlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfamFja19yaW5nX2J1ZmZlcl9hY3F1aXJlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+cmVsZWFzZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2phY2tfcmluZ19idWZmZXJfcmVsZWFzZSk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX3N0YXJ0KTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+cGF1c2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2phY2tfcmluZ19idWZmZXJfcGF1c2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5yZXN1bWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2phY2tfcmluZ19idWZmZXJfc3RhcnQpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX3N0b3ApOwotCi0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX2RlbGF5KTsKLX0KLQotLyogdGhpcyBpcyB0aGUgY2FsbGJhY2sgb2YgamFjay4gVGhpcyBzaG91bGQgUlQtc2FmZS4KLSAqLwotc3RhdGljIGludAotamFja19wcm9jZXNzX2NiIChqYWNrX25mcmFtZXNfdCBuZnJhbWVzLCB2b2lkICphcmcpCi17Ci0gIEdzdEphY2tBdWRpb1NpbmsgKnNpbms7Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciAqYnVmOwotICBnaW50IHJlYWRzZWcsIGxlbjsKLSAgZ3VpbnQ4ICpyZWFkcHRyOwotICBnaW50IGksIGosIGZsZW4sIGNoYW5uZWxzOwotICBzYW1wbGVfdCAqZGF0YTsKLQotICBidWYgPSBHU1RfQVVESU9fUklOR19CVUZGRVJfQ0FTVCAoYXJnKTsKLSAgc2luayA9IEdTVF9KQUNLX0FVRElPX1NJTksgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLQotICBjaGFubmVscyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTICgmYnVmLT5zcGVjLmluZm8pOwotCi0gIC8qIGdldCB0YXJnZXQgYnVmZmVycyAqLwotICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkrKykgewotICAgIHNpbmstPmJ1ZmZlcnNbaV0gPQotICAgICAgICAoc2FtcGxlX3QgKikgamFja19wb3J0X2dldF9idWZmZXIgKHNpbmstPnBvcnRzW2ldLCBuZnJhbWVzKTsKLSAgfQotCi0gIGlmIChnc3RfYXVkaW9fcmluZ19idWZmZXJfcHJlcGFyZV9yZWFkIChidWYsICZyZWFkc2VnLCAmcmVhZHB0ciwgJmxlbikpIHsKLSAgICBmbGVuID0gbGVuIC8gY2hhbm5lbHM7Ci0KLSAgICAvKiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgbXVzdCBiZSBleGFjdGx5IHRoZSBzZWdtZW50IHNpemUgKi8KLSAgICBpZiAobmZyYW1lcyAqIHNpemVvZiAoc2FtcGxlX3QpICE9IGZsZW4pCi0gICAgICBnb3RvIHdyb25nX3NpemU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY29weSAlZCBmcmFtZXM6ICVwLCAlZCBieXRlcywgJWQgY2hhbm5lbHMiLAotICAgICAgICBuZnJhbWVzLCByZWFkcHRyLCBmbGVuLCBjaGFubmVscyk7Ci0gICAgZGF0YSA9IChzYW1wbGVfdCAqKSByZWFkcHRyOwotCi0gICAgLyogdGhlIHNhbXBsZXMgaW4gdGhlIHJpbmdidWZmZXIgaGF2ZSB0aGUgY2hhbm5lbHMgaW50ZXJsZWF2ZWQsIHdlIG5lZWQgdG8KLSAgICAgKiBkZWludGVybGVhdmUgaW50byB0aGUgamFjayB0YXJnZXQgYnVmZmVycyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBuZnJhbWVzOyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCBjaGFubmVsczsgaisrKSB7Ci0gICAgICAgIHNpbmstPmJ1ZmZlcnNbal1baV0gPSAqZGF0YSsrOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIGNsZWFyIHdyaXR0ZW4gc2FtcGxlcyBpbiB0aGUgcmluZ2J1ZmZlciAqLwotICAgIGdzdF9hdWRpb19yaW5nX2J1ZmZlcl9jbGVhciAoYnVmLCByZWFkc2VnKTsKLQotICAgIC8qIHdlIHdyb3RlIG9uZSBzZWdtZW50ICovCi0gICAgZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX2FkdmFuY2UgKGJ1ZiwgMSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIndyaXRlICVkIGZyYW1lcyBzaWxlbmNlIiwgbmZyYW1lcyk7Ci0gICAgLyogV2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlYWQgZnJvbSB0aGUgcmluZ2J1ZmZlciwgd3JpdGUgc2lsZW5jZSB0byBhbGwKLSAgICAgKiBqYWNrIG91dHB1dCBidWZmZXJzICovCi0gICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHsKLSAgICAgIG1lbXNldCAoc2luay0+YnVmZmVyc1tpXSwgMCwgbmZyYW1lcyAqIHNpemVvZiAoc2FtcGxlX3QpKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19zaXplOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2luaywgIm5ieXRlcyAoJWQpICE9IGZsZW4gKCVkKSIsCi0gICAgICAgIChnaW50KSAobmZyYW1lcyAqIHNpemVvZiAoc2FtcGxlX3QpKSwgZmxlbik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLX0KLQotLyogd2UgZXJyb3Igb3V0ICovCi1zdGF0aWMgaW50Ci1qYWNrX3NhbXBsZV9yYXRlX2NiIChqYWNrX25mcmFtZXNfdCBuZnJhbWVzLCB2b2lkICphcmcpCi17Ci0gIEdzdEphY2tBdWRpb1NpbmsgKnNpbms7Ci0gIEdzdEphY2tSaW5nQnVmZmVyICphYnVmOwotCi0gIGFidWYgPSBHU1RfSkFDS19SSU5HX0JVRkZFUl9DQVNUIChhcmcpOwotICBzaW5rID0gR1NUX0pBQ0tfQVVESU9fU0lOSyAoR1NUX09CSkVDVF9QQVJFTlQgKGFyZykpOwotCi0gIGlmIChhYnVmLT5zYW1wbGVfcmF0ZSAhPSAtMSAmJiBhYnVmLT5zYW1wbGVfcmF0ZSAhPSBuZnJhbWVzKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLQotICByZXR1cm4gMDsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoTlVMTCksICgiSmFjayBjaGFuZ2VkIHRoZSBzYW1wbGUgcmF0ZSwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCIpKTsKLSAgICByZXR1cm4gMTsKLSAgfQotfQotCi0vKiB3ZSBlcnJvciBvdXQgKi8KLXN0YXRpYyBpbnQKLWphY2tfYnVmZmVyX3NpemVfY2IgKGphY2tfbmZyYW1lc190IG5mcmFtZXMsIHZvaWQgKmFyZykKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLSAgR3N0SmFja1JpbmdCdWZmZXIgKmFidWY7Ci0KLSAgYWJ1ZiA9IEdTVF9KQUNLX1JJTkdfQlVGRkVSX0NBU1QgKGFyZyk7Ci0gIHNpbmsgPSBHU1RfSkFDS19BVURJT19TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAoYXJnKSk7Ci0KLSAgaWYgKGFidWYtPmJ1ZmZlcl9zaXplICE9IC0xICYmIGFidWYtPmJ1ZmZlcl9zaXplICE9IG5mcmFtZXMpCi0gICAgZ290byBub3Rfc3VwcG9ydGVkOwotCi0gIHJldHVybiAwOwotCi0gIC8qIEVSUk9SUyAqLwotbm90X3N1cHBvcnRlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChOVUxMKSwgKCJKYWNrIGNoYW5nZWQgdGhlIGJ1ZmZlciBzaXplLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIikpOwotICAgIHJldHVybiAxOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1qYWNrX3NodXRkb3duX2NiICh2b2lkICphcmcpCi17Ci0gIEdzdEphY2tBdWRpb1NpbmsgKnNpbms7Ci0KLSAgc2luayA9IEdTVF9KQUNLX0FVRElPX1NJTksgKEdTVF9PQkpFQ1RfUEFSRU5UIChhcmcpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2h1dGRvd24iKTsKLQotICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgIChOVUxMKSwgKCJKYWNrIHNlcnZlciBzaHV0ZG93biIpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX3JpbmdfYnVmZmVyX2luaXQgKEdzdEphY2tSaW5nQnVmZmVyICogYnVmLAotICAgIEdzdEphY2tSaW5nQnVmZmVyQ2xhc3MgKiBnX2NsYXNzKQotewotICBidWYtPmNoYW5uZWxzID0gLTE7Ci0gIGJ1Zi0+YnVmZmVyX3NpemUgPSAtMTsKLSAgYnVmLT5zYW1wbGVfcmF0ZSA9IC0xOwotfQotCi0vKiB0aGUgX29wZW5fZGV2aWNlIG1ldGhvZCBzaG91bGQgbWFrZSBhIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2phY2tfcmluZ19idWZmZXJfb3Blbl9kZXZpY2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLSAgamFja19zdGF0dXNfdCBzdGF0dXMgPSAwOwotICBjb25zdCBnY2hhciAqbmFtZTsKLQotICBzaW5rID0gR1NUX0pBQ0tfQVVESU9fU0lOSyAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJvcGVuIik7Ci0KLSAgaWYgKHNpbmstPmNsaWVudF9uYW1lKSB7Ci0gICAgbmFtZSA9IHNpbmstPmNsaWVudF9uYW1lOwotICB9IGVsc2UgewotICAgIG5hbWUgPSBnX2dldF9hcHBsaWNhdGlvbl9uYW1lICgpOwotICB9Ci0gIGlmICghbmFtZSkKLSAgICBuYW1lID0gIkdTdHJlYW1lciI7Ci0KLSAgc2luay0+Y2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X25ldyAobmFtZSwgc2luay0+c2VydmVyLAotICAgICAgc2luay0+amNsaWVudCwKLSAgICAgIEdTVF9KQUNLX0NMSUVOVF9TSU5LLAotICAgICAgamFja19zaHV0ZG93bl9jYiwKLSAgICAgIGphY2tfcHJvY2Vzc19jYiwgamFja19idWZmZXJfc2l6ZV9jYiwgamFja19zYW1wbGVfcmF0ZV9jYiwgYnVmLCAmc3RhdHVzKTsKLSAgaWYgKHNpbmstPmNsaWVudCA9PSBOVUxMKQotICAgIGdvdG8gY291bGRfbm90X29wZW47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIm9wZW5lZCIpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotY291bGRfbm90X29wZW46Ci0gIHsKLSAgICBpZiAoc3RhdHVzICYgSmFja1NlcnZlckZhaWxlZCkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBOT1RfRk9VTkQsCi0gICAgICAgICAgKF8oIkphY2sgc2VydmVyIG5vdCBmb3VuZCIpKSwKLSAgICAgICAgICAoIkNhbm5vdCBjb25uZWN0IHRvIHRoZSBKYWNrIHNlcnZlciAoc3RhdHVzICVkKSIsIHN0YXR1cykpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsCi0gICAgICAgICAgKE5VTEwpLCAoIkphY2sgY2xpZW50IG9wZW4gZXJyb3IgKHN0YXR1cyAlZCkiLCBzdGF0dXMpKTsKLSAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIGNsb3NlIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNlcnZlcgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qYWNrX3JpbmdfYnVmZmVyX2Nsb3NlX2RldmljZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfSkFDS19BVURJT19TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNsb3NlIik7Ci0KLSAgZ3N0X2phY2tfYXVkaW9fc2lua19mcmVlX2NoYW5uZWxzIChzaW5rKTsKLSAgZ3N0X2phY2tfYXVkaW9fY2xpZW50X2ZyZWUgKHNpbmstPmNsaWVudCk7Ci0gIHNpbmstPmNsaWVudCA9IE5VTEw7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIGFsbG9jYXRlIGEgYnVmZmVyIGFuZCBzZXR1cCByZXNvdXJjZXMgdG8gcHJvY2VzcyB0aGUgYXVkaW8gc2FtcGxlcyBvZgotICogdGhlIGZvcm1hdCBhcyBzcGVjaWZpZWQgaW4gQHNwZWMuCi0gKgotICogV2UgYWxsb2NhdGUgTiBqYWNrIHBvcnRzLCBvbmUgZm9yIGVhY2ggY2hhbm5lbC4gSWYgd2UgYXJlIGFza2VkIHRvCi0gKiBhdXRvbWF0aWNhbGx5IG1ha2UgYSBjb25uZWN0aW9uIHdpdGggcGh5c2ljYWwgcG9ydHMsIHdlIGNvbm5lY3QgYXMgbWFueQotICogcG9ydHMgYXMgdGhlcmUgYXJlIHBoeXNpY2FsIHBvcnRzLCBsZWF2aW5nIGxlZnRvdmVyIHBvcnRzIHVuY29ubmVjdGVkLgotICoKLSAqIEl0IGlzIGFzc3VtZWQgdGhhdCBzYW1wbGVyYXRlIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMgYXJlIGFjY2VwdGFibGUgc2luY2Ugb3VyCi0gKiBnZXRjYXBzIG1ldGhvZCB3aWxsIGFsd2F5cyBwcm92aWRlIGNvcnJlY3QgdmFsdWVzLiBJZiB1bmFjY2VwdGFibGUgY2FwcyBhcmUKLSAqIHJlY2VpdmVkIGZvciBzb21lIHJlYXNvbiwgd2UgZmFpbCBoZXJlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qYWNrX3JpbmdfYnVmZmVyX2FjcXVpcmUgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZiwKLSAgICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYykKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLSAgR3N0SmFja1JpbmdCdWZmZXIgKmFidWY7Ci0gIGNvbnN0IGNoYXIgKipwb3J0czsKLSAgZ2ludCBzYW1wbGVfcmF0ZSwgYnVmZmVyX3NpemU7Ci0gIGdpbnQgaSwgcmF0ZSwgYnBmLCBjaGFubmVscywgcmVzOwotICBqYWNrX2NsaWVudF90ICpjbGllbnQ7Ci0KLSAgc2luayA9IEdTVF9KQUNLX0FVRElPX1NJTksgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLSAgYWJ1ZiA9IEdTVF9KQUNLX1JJTkdfQlVGRkVSX0NBU1QgKGJ1Zik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImFjcXVpcmUiKTsKLQotICBjbGllbnQgPSBnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudCAoc2luay0+Y2xpZW50KTsKLQotICByYXRlID0gR1NUX0FVRElPX0lORk9fUkFURSAoJnNwZWMtPmluZm8pOwotCi0gIC8qIHNhbXBsZSByYXRlIG11c3QgYmUgdGhhdCBvZiB0aGUgc2VydmVyICovCi0gIHNhbXBsZV9yYXRlID0gamFja19nZXRfc2FtcGxlX3JhdGUgKGNsaWVudCk7Ci0gIGlmIChzYW1wbGVfcmF0ZSAhPSByYXRlKQotICAgIGdvdG8gd3Jvbmdfc2FtcGxlcmF0ZTsKLQotICBjaGFubmVscyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTICgmc3BlYy0+aW5mbyk7Ci0gIGJwZiA9IEdTVF9BVURJT19JTkZPX0JQRiAoJnNwZWMtPmluZm8pOwotCi0gIGlmICghZ3N0X2phY2tfYXVkaW9fc2lua19hbGxvY2F0ZV9jaGFubmVscyAoc2luaywgY2hhbm5lbHMpKQotICAgIGdvdG8gb3V0X29mX3BvcnRzOwotCi0gIGJ1ZmZlcl9zaXplID0gamFja19nZXRfYnVmZmVyX3NpemUgKGNsaWVudCk7Ci0KLSAgLyogdGhlIHNlZ21lbnQgc2l6ZSBpbiBieXRlcywgdGhpcyBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGJ1ZmZlciBvZiAzMmJpdCBmbG9hdHMKLSAgICogZm9yIGFsbCBjaGFubmVscyAgKi8KLSAgc3BlYy0+c2Vnc2l6ZSA9IGJ1ZmZlcl9zaXplICogc2l6ZW9mIChnZmxvYXQpICogY2hhbm5lbHM7Ci0gIHNwZWMtPmxhdGVuY3lfdGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3BlYy0+c2Vnc2l6ZSwKLSAgICAgIChHU1RfU0VDT05EIC8gR1NUX1VTRUNPTkQpLCByYXRlICogYnBmKTsKLSAgLyogc2VndG90YWwgYmFzZWQgb24gYnVmZmVyLXRpbWUgbGF0ZW5jeSAqLwotICBzcGVjLT5zZWd0b3RhbCA9IHNwZWMtPmJ1ZmZlcl90aW1lIC8gc3BlYy0+bGF0ZW5jeV90aW1lOwotICBpZiAoc3BlYy0+c2VndG90YWwgPCAyKSB7Ci0gICAgc3BlYy0+c2VndG90YWwgPSAyOwotICAgIHNwZWMtPmJ1ZmZlcl90aW1lID0gc3BlYy0+bGF0ZW5jeV90aW1lICogc3BlYy0+c2VndG90YWw7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiYnVmZmVyIHRpbWU6ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIHVzZWMiLAotICAgICAgc3BlYy0+YnVmZmVyX3RpbWUpOwotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAibGF0ZW5jeSB0aW1lOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiB1c2VjIiwKLSAgICAgIHNwZWMtPmxhdGVuY3lfdGltZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJidWZmZXJfc2l6ZSAlZCwgc2Vnc2l6ZSAlZCwgc2VndG90YWwgJWQiLAotICAgICAgYnVmZmVyX3NpemUsIHNwZWMtPnNlZ3NpemUsIHNwZWMtPnNlZ3RvdGFsKTsKLQotICAvKiBhbGxvY2F0ZSB0aGUgcmluZ2J1ZmZlciBtZW1vcnkgbm93ICovCi0gIGJ1Zi0+c2l6ZSA9IHNwZWMtPnNlZ3RvdGFsICogc3BlYy0+c2Vnc2l6ZTsKLSAgYnVmLT5tZW1vcnkgPSBnX21hbGxvYzAgKGJ1Zi0+c2l6ZSk7Ci0KLSAgaWYgKChyZXMgPSBnc3RfamFja19hdWRpb19jbGllbnRfc2V0X2FjdGl2ZSAoc2luay0+Y2xpZW50LCBUUlVFKSkpCi0gICAgZ290byBjb3VsZF9ub3RfYWN0aXZhdGU7Ci0KLSAgLyogaWYgd2UgbmVlZCB0byBhdXRvbWF0aWNhbGx5IGNvbm5lY3QgdGhlIHBvcnRzLCBkbyBzbyBub3cuIFdlIG11c3QgZG8gdGhpcwotICAgKiBhZnRlciBhY3RpdmF0aW5nIHRoZSBjbGllbnQuICovCi0gIGlmIChzaW5rLT5jb25uZWN0ID09IEdTVF9KQUNLX0NPTk5FQ1RfQVVUTwotICAgICAgfHwgc2luay0+Y29ubmVjdCA9PSBHU1RfSkFDS19DT05ORUNUX0FVVE9fRk9SQ0VEKSB7Ci0gICAgLyogZmluZCBhbGwgdGhlIHBoeXNpY2FsIGlucHV0IHBvcnRzLiBBIHBoeXNpY2FsIGlucHV0IHBvcnQgaXMgYSBwb3J0Ci0gICAgICogYXNzb2NpYXRlZCB3aXRoIGEgaGFyZHdhcmUgZGV2aWNlLiBTb21lb25lIG5lZWRzIGNvbm5lY3QgdG8gYSBwaHlzaWNhbAotICAgICAqIHBvcnQgaW4gb3JkZXIgdG8gaGVhciBzb21ldGhpbmcuICovCi0gICAgaWYgKHNpbmstPnBvcnRfcGF0dGVybiA9PSBOVUxMKSB7Ci0gICAgICBwb3J0cyA9IGphY2tfZ2V0X3BvcnRzIChjbGllbnQsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgSmFja1BvcnRJc1BoeXNpY2FsIHwgSmFja1BvcnRJc0lucHV0KTsKLSAgICB9IGVsc2UgewotICAgICAgcG9ydHMgPSBqYWNrX2dldF9wb3J0cyAoY2xpZW50LCBzaW5rLT5wb3J0X3BhdHRlcm4sIE5VTEwsCi0gICAgICAgICAgSmFja1BvcnRJc0lucHV0KTsKLSAgICB9Ci0gICAgaWYgKHBvcnRzID09IE5VTEwpIHsKLSAgICAgIC8qIG5vIHBvcnRzPyBmaW5lIHRoZW4gd2UgZG9uJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGZvciBwb3N0aW5nIGEgd2FybmluZwotICAgICAgICogbWVzc2FnZS4gKi8KLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNpbmssIFJFU09VUkNFLCBOT1RfRk9VTkQsIChOVUxMKSwKLSAgICAgICAgICAoIk5vIHBoeXNpY2FsIGlucHV0IHBvcnRzIGZvdW5kLCBsZWF2aW5nIHBvcnRzIHVuY29ubmVjdGVkIikpOwotICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgaSsrKSB7Ci0gICAgICAvKiBzdG9wIHdoZW4gYWxsIGlucHV0IHBvcnRzIGFyZSBleGhhdXN0ZWQgKi8KLSAgICAgIGlmIChwb3J0c1tpXSA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIHBvc3QgYSB3YXJuaW5nIHRoYXQgd2UgY291bGQgbm90IGNvbm5lY3QgYWxsIHBvcnRzICovCi0gICAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNpbmssIFJFU09VUkNFLCBOT1RfRk9VTkQsIChOVUxMKSwKLSAgICAgICAgICAgICgiTm8gbW9yZSBwaHlzaWNhbCBwb3J0cywgbGVhdmluZyBzb21lIHBvcnRzIHVuY29ubmVjdGVkIikpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ0cnkgY29ubmVjdGluZyB0byAlcyIsCi0gICAgICAgICAgamFja19wb3J0X25hbWUgKHNpbmstPnBvcnRzW2ldKSk7Ci0gICAgICAvKiBjb25uZWN0IHRoZSBwb3J0IHRvIGEgcGh5c2ljYWwgcG9ydCAqLwotICAgICAgcmVzID0gamFja19jb25uZWN0IChjbGllbnQsIGphY2tfcG9ydF9uYW1lIChzaW5rLT5wb3J0c1tpXSksIHBvcnRzW2ldKTsKLSAgICAgIGlmIChyZXMgIT0gMCAmJiByZXMgIT0gRUVYSVNUKQotICAgICAgICBnb3RvIGNhbm5vdF9jb25uZWN0OwotICAgIH0KLSAgICBmcmVlIChwb3J0cyk7Ci0gIH0KLWRvbmU6Ci0KLSAgYWJ1Zi0+c2FtcGxlX3JhdGUgPSBzYW1wbGVfcmF0ZTsKLSAgYWJ1Zi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKLSAgYWJ1Zi0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3NhbXBsZXJhdGU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiV3Jvbmcgc2FtcGxlcmF0ZSwgc2VydmVyIGlzIHJ1bm5pbmcgYXQgJWQgYW5kIHdlIHJlY2VpdmVkICVkIiwKLSAgICAgICAgICAgIHNhbXBsZV9yYXRlLCByYXRlKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1vdXRfb2ZfcG9ydHM6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiQ2Fubm90IGFsbG9jYXRlIG1vcmUgSmFjayBwb3J0cyIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNvdWxkX25vdF9hY3RpdmF0ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgYWN0aXZhdGUgY2xpZW50ICglZDolcykiLCByZXMsIGdfc3RyZXJyb3IgKHJlcykpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNhbm5vdF9jb25uZWN0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBjb25uZWN0IG91dHB1dCBwb3J0cyB0byBwaHlzaWNhbCBwb3J0cyAoJWQ6JXMpIiwKLSAgICAgICAgICAgIHJlcywgZ19zdHJlcnJvciAocmVzKSkpOwotICAgIGZyZWUgKHBvcnRzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggTE9DSyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19yaW5nX2J1ZmZlcl9yZWxlYXNlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEphY2tBdWRpb1NpbmsgKnNpbms7Ci0gIEdzdEphY2tSaW5nQnVmZmVyICphYnVmOwotICBnaW50IHJlczsKLQotICBhYnVmID0gR1NUX0pBQ0tfUklOR19CVUZGRVJfQ0FTVCAoYnVmKTsKLSAgc2luayA9IEdTVF9KQUNLX0FVRElPX1NJTksgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAicmVsZWFzZSIpOwotCi0gIGlmICgocmVzID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X3NldF9hY3RpdmUgKHNpbmstPmNsaWVudCwgRkFMU0UpKSkgewotICAgIC8qIHdlIG9ubHkgd2FybiwgdGhpcyBtZWFucyB0aGUgc2VydmVyIGlzIHByb2JhYmx5IHNodXQgZG93biBhbmQgdGhlIGNsaWVudAotICAgICAqIGlzIGdvbmUgYW55d2F5LiAqLwotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNpbmssIFJFU09VUkNFLCBDTE9TRSwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBkZWFjdGl2YXRlIEphY2sgY2xpZW50ICglZCkiLCByZXMpKTsKLSAgfQotCi0gIGFidWYtPmNoYW5uZWxzID0gLTE7Ci0gIGFidWYtPmJ1ZmZlcl9zaXplID0gLTE7Ci0gIGFidWYtPnNhbXBsZV9yYXRlID0gLTE7Ci0KLSAgLyogZnJlZSB0aGUgYnVmZmVyICovCi0gIGdfZnJlZSAoYnVmLT5tZW1vcnkpOwotICBidWYtPm1lbW9yeSA9IE5VTEw7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2phY2tfcmluZ19idWZmZXJfc3RhcnQgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX0pBQ0tfQVVESU9fU0lOSyAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJzdGFydCIpOwotCi0gIGlmIChzaW5rLT50cmFuc3BvcnQgJiBHU1RfSkFDS19UUkFOU1BPUlRfTUFTVEVSKSB7Ci0gICAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gICAgY2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldF9jbGllbnQgKHNpbmstPmNsaWVudCk7Ci0gICAgamFja190cmFuc3BvcnRfc3RhcnQgKGNsaWVudCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19yaW5nX2J1ZmZlcl9wYXVzZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfSkFDS19BVURJT19TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInBhdXNlIik7Ci0KLSAgaWYgKHNpbmstPnRyYW5zcG9ydCAmIEdTVF9KQUNLX1RSQU5TUE9SVF9NQVNURVIpIHsKLSAgICBqYWNrX2NsaWVudF90ICpjbGllbnQ7Ci0KLSAgICBjbGllbnQgPSBnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudCAoc2luay0+Y2xpZW50KTsKLSAgICBqYWNrX3RyYW5zcG9ydF9zdG9wIChjbGllbnQpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2phY2tfcmluZ19idWZmZXJfc3RvcCAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfSkFDS19BVURJT19TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInN0b3AiKTsKLQotICBpZiAoc2luay0+dHJhbnNwb3J0ICYgR1NUX0pBQ0tfVFJBTlNQT1JUX01BU1RFUikgewotICAgIGphY2tfY2xpZW50X3QgKmNsaWVudDsKLQotICAgIGNsaWVudCA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50IChzaW5rLT5jbGllbnQpOwotICAgIGphY2tfdHJhbnNwb3J0X3N0b3AgKGNsaWVudCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotI2lmIGRlZmluZWQgKEhBVkVfSkFDS18wXzEyMF8xKSB8fCBkZWZpbmVkKEhBVkVfSkFDS18xXzlfNykKLXN0YXRpYyBndWludAotZ3N0X2phY2tfcmluZ19idWZmZXJfZGVsYXkgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLSAgZ3VpbnQgaSwgcmVzID0gMDsKLSAgamFja19sYXRlbmN5X3JhbmdlX3QgcmFuZ2U7Ci0KLSAgc2luayA9IEdTVF9KQUNLX0FVRElPX1NJTksgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgc2luay0+cG9ydF9jb3VudDsgaSsrKSB7Ci0gICAgamFja19wb3J0X2dldF9sYXRlbmN5X3JhbmdlIChzaW5rLT5wb3J0c1tpXSwgSmFja1BsYXliYWNrTGF0ZW5jeSwgJnJhbmdlKTsKLSAgICBpZiAocmFuZ2UubWF4ID4gcmVzKQotICAgICAgcmVzID0gcmFuZ2UubWF4OwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJkZWxheSAldSIsIHJlcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLSNlbHNlIC8qICEoZGVmaW5lZCAoSEFWRV9KQUNLXzBfMTIwXzEpIHx8IGRlZmluZWQoSEFWRV9KQUNLXzFfOV83KSkgKi8KLXN0YXRpYyBndWludAotZ3N0X2phY2tfcmluZ19idWZmZXJfZGVsYXkgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLSAgZ3VpbnQgaSwgcmVzID0gMDsKLSAgZ3VpbnQgbGF0ZW5jeTsKLSAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gIHNpbmsgPSBHU1RfSkFDS19BVURJT19TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0gIGNsaWVudCA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50IChzaW5rLT5jbGllbnQpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBzaW5rLT5wb3J0X2NvdW50OyBpKyspIHsKLSAgICBsYXRlbmN5ID0gamFja19wb3J0X2dldF90b3RhbF9sYXRlbmN5IChjbGllbnQsIHNpbmstPnBvcnRzW2ldKTsKLSAgICBpZiAobGF0ZW5jeSA+IHJlcykKLSAgICAgIHJlcyA9IGxhdGVuY3k7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoc2luaywgImRlbGF5ICV1IiwgcmVzKTsKLQotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBqYWNrYXVkaW9zaW5rX3NpbmtfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfSkFDS19GT1JNQVRfU1RSICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdIikKLSAgICApOwotCi0vKiBBdWRpb1Npbmsgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIFNJR05BTF9MQVNUCi19OwotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9DT05ORUNUIAkJR1NUX0pBQ0tfQ09OTkVDVF9BVVRPCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9TRVJWRVIgCQlOVUxMCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9DTElFTlRfTkFNRQlOVUxMCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9QT1JUX1BBVFRFUk4gICAgICAJTlVMTAotI2RlZmluZSBERUZBVUxUX1BST1BfVFJBTlNQT1JUCUdTVF9KQUNLX1RSQU5TUE9SVF9BVVRPTk9NT1VTCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0NPTk5FQ1QsCi0gIFBST1BfU0VSVkVSLAotICBQUk9QX0NMSUVOVCwKLSAgUFJPUF9DTElFTlRfTkFNRSwKLSAgUFJPUF9QT1JUX1BBVFRFUk4sCi0gIFBST1BfVFJBTlNQT1JULAotICBQUk9QX0xBU1QKLX07Ci0KLSNkZWZpbmUgZ3N0X2phY2tfYXVkaW9fc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RKYWNrQXVkaW9TaW5rLCBnc3RfamFja19hdWRpb19zaW5rLCBHU1RfVFlQRV9BVURJT19CQVNFX1NJTkspOwotCi1zdGF0aWMgdm9pZCBnc3RfamFja19hdWRpb19zaW5rX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2phY2tfYXVkaW9fc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfamFja19hdWRpb19zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9qYWNrX2F1ZGlvX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaywKLSAgICBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBHc3RBdWRpb1JpbmdCdWZmZXIKLSAgICAqIGdzdF9qYWNrX2F1ZGlvX3NpbmtfY3JlYXRlX3JpbmdidWZmZXIgKEdzdEF1ZGlvQmFzZVNpbmsgKiBzaW5rKTsKLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCAoR3N0SmFja0F1ZGlvU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU2lua0NsYXNzICpnc3RiYXNlc2lua19jbGFzczsKLSAgR3N0QXVkaW9CYXNlU2lua0NsYXNzICpnc3RhdWRpb2Jhc2VzaW5rX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfamFja19hdWRpb19zaW5rX2RlYnVnLCAiamFja3NpbmsiLCAwLAotICAgICAgImphY2tzaW5rIGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzID0gKEdzdEJhc2VTaW5rQ2xhc3MgKikga2xhc3M7Ci0gIGdzdGF1ZGlvYmFzZXNpbmtfY2xhc3MgPSAoR3N0QXVkaW9CYXNlU2lua0NsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfamFja19hdWRpb19zaW5rX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9qYWNrX2F1ZGlvX3NpbmtfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfamFja19hdWRpb19zaW5rX3NldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTk5FQ1QsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImNvbm5lY3QiLCAiQ29ubmVjdCIsCi0gICAgICAgICAgIlNwZWNpZnkgaG93IHRoZSBvdXRwdXQgcG9ydHMgd2lsbCBiZSBjb25uZWN0ZWQiLAotICAgICAgICAgIEdTVF9UWVBFX0pBQ0tfQ09OTkVDVCwgREVGQVVMVF9QUk9QX0NPTk5FQ1QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TRVJWRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic2VydmVyIiwgIlNlcnZlciIsCi0gICAgICAgICAgIlRoZSBKYWNrIHNlcnZlciB0byBjb25uZWN0IHRvIChOVUxMID0gZGVmYXVsdCkiLAotICAgICAgICAgIERFRkFVTFRfUFJPUF9TRVJWRVIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RKYWNrQXVkaW9TaW5rOmNsaWVudC1uYW1lOgotICAgKgotICAgKiBUaGUgY2xpZW50IG5hbWUgdG8gdXNlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DTElFTlRfTkFNRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjbGllbnQtbmFtZSIsICJDbGllbnQgbmFtZSIsCi0gICAgICAgICAgIlRoZSBjbGllbnQgbmFtZSBvZiB0aGUgSmFjayBpbnN0YW5jZSAoTlVMTCA9IGRlZmF1bHQpIiwKLSAgICAgICAgICBERUZBVUxUX1BST1BfQ0xJRU5UX05BTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DTElFTlQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJjbGllbnQiLCAiSmFja0NsaWVudCIsICJIYW5kbGUgZm9yIGphY2sgY2xpZW50IiwKLSAgICAgICAgICBHU1RfVFlQRV9KQUNLX0NMSUVOVCwKLSAgICAgICAgICBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSB8IEdfUEFSQU1fUkVBRFdSSVRFIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgIC8qKgotICAgKiBHc3RKYWNrQXVkaW9TaW5rOnBvcnQtcGF0dGVybgotICAgKgotICAgKiBhdXRvY29ubmVjdCB0byBwb3J0cyBtYXRjaGluZyBwYXR0ZXJuLCB3aGVuIE5VTEwgY29ubmVjdCB0byBwaHlzaWNhbCBwb3J0cwotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BPUlRfUEFUVEVSTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwb3J0LXBhdHRlcm4iLCAicG9ydCBwYXR0ZXJuIiwKLSAgICAgICAgICAiQSBwYXR0ZXJuIHRvIHNlbGVjdCB3aGljaCBwb3J0cyB0byBjb25uZWN0IHRvIChOVUxMID0gZmlyc3QgcGh5c2ljYWwgcG9ydHMpIiwKLSAgICAgICAgICBERUZBVUxUX1BST1BfUE9SVF9QQVRURVJOLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RKYWNrQXVkaW9TaW5rOnRyYW5zcG9ydDoKLSAgICoKLSAgICogVGhlIGphY2sgdHJhbnNwb3J0IGJlaGF2aW91ciBmb3IgdGhlIGNsaWVudC4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVFJBTlNQT1JULAotICAgICAgZ19wYXJhbV9zcGVjX2ZsYWdzICgidHJhbnNwb3J0IiwgIlRyYW5zcG9ydCBtb2RlIiwKLSAgICAgICAgICAiSmFjayB0cmFuc3BvcnQgYmVoYXZpb3VyIG9mIHRoZSBjbGllbnQiLAotICAgICAgICAgIEdTVF9UWVBFX0pBQ0tfVFJBTlNQT1JULCBERUZBVUxUX1BST1BfVFJBTlNQT1JULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBdWRpbyBTaW5rIChKYWNrKSIsCi0gICAgICAiU2luay9BdWRpbyIsICJPdXRwdXQgYXVkaW8gdG8gYSBKQUNLIHNlcnZlciIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZqYWNrYXVkaW9zaW5rX3NpbmtfZmFjdG9yeSk7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmdldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfZ2V0Y2Fwcyk7Ci0KLSAgZ3N0YXVkaW9iYXNlc2lua19jbGFzcy0+Y3JlYXRlX3JpbmdidWZmZXIgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfY3JlYXRlX3JpbmdidWZmZXIpOwotCi0gIC8qIHJlZiBjbGFzcyBmcm9tIGEgdGhyZWFkLXNhZmUgY29udGV4dCB0byB3b3JrIGFyb3VuZCBtaXNzaW5nIGJpdCBvZgotICAgKiB0aHJlYWQtc2FmZXR5IGluIEdPYmplY3QgKi8KLSAgZ190eXBlX2NsYXNzX3JlZiAoR1NUX1RZUEVfSkFDS19SSU5HX0JVRkZFUik7Ci0KLSAgZ3N0X2phY2tfYXVkaW9fY2xpZW50X2luaXQgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfamFja19hdWRpb19zaW5rX2luaXQgKEdzdEphY2tBdWRpb1NpbmsgKiBzaW5rKQotewotICBzaW5rLT5jb25uZWN0ID0gREVGQVVMVF9QUk9QX0NPTk5FQ1Q7Ci0gIHNpbmstPnNlcnZlciA9IGdfc3RyZHVwIChERUZBVUxUX1BST1BfU0VSVkVSKTsKLSAgc2luay0+amNsaWVudCA9IE5VTEw7Ci0gIHNpbmstPnBvcnRzID0gTlVMTDsKLSAgc2luay0+cG9ydF9jb3VudCA9IDA7Ci0gIHNpbmstPmJ1ZmZlcnMgPSBOVUxMOwotICBzaW5rLT5jbGllbnRfbmFtZSA9IGdfc3RyZHVwIChERUZBVUxUX1BST1BfQ0xJRU5UX05BTUUpOwotICBzaW5rLT50cmFuc3BvcnQgPSBERUZBVUxUX1BST1BfVFJBTlNQT1JUOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RKYWNrQXVkaW9TaW5rICpzaW5rID0gR1NUX0pBQ0tfQVVESU9fU0lOSyAob2JqZWN0KTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmc2luay0+Y2FwcywgTlVMTCk7Ci0KLSAgaWYgKHNpbmstPmNsaWVudF9uYW1lICE9IE5VTEwpIHsKLSAgICBnX2ZyZWUgKHNpbmstPmNsaWVudF9uYW1lKTsKLSAgICBzaW5rLT5jbGllbnRfbmFtZSA9IE5VTEw7Ci0gIH0KLQotICBpZiAoc2luay0+cG9ydF9wYXR0ZXJuICE9IE5VTEwpIHsKLSAgICBnX2ZyZWUgKHNpbmstPnBvcnRfcGF0dGVybik7Ci0gICAgc2luay0+cG9ydF9wYXR0ZXJuID0gTlVMTDsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX0pBQ0tfQVVESU9fU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ0xJRU5UX05BTUU6Ci0gICAgICBnX2ZyZWUgKHNpbmstPmNsaWVudF9uYW1lKTsKLSAgICAgIHNpbmstPmNsaWVudF9uYW1lID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9SVF9QQVRURVJOOgotICAgICAgZ19mcmVlIChzaW5rLT5wb3J0X3BhdHRlcm4pOwotICAgICAgc2luay0+cG9ydF9wYXR0ZXJuID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09OTkVDVDoKLSAgICAgIHNpbmstPmNvbm5lY3QgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VSVkVSOgotICAgICAgZ19mcmVlIChzaW5rLT5zZXJ2ZXIpOwotICAgICAgc2luay0+c2VydmVyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xJRU5UOgotICAgICAgaWYgKEdTVF9TVEFURSAoc2luaykgPT0gR1NUX1NUQVRFX05VTEwgfHwKLSAgICAgICAgICBHU1RfU1RBVEUgKHNpbmspID09IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICBzaW5rLT5qY2xpZW50ID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UUkFOU1BPUlQ6Ci0gICAgICBzaW5rLT50cmFuc3BvcnQgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX0pBQ0tfQVVESU9fU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ0xJRU5UX05BTUU6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzaW5rLT5jbGllbnRfbmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9SVF9QQVRURVJOOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2luay0+cG9ydF9wYXR0ZXJuKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ORUNUOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNpbmstPmNvbm5lY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NFUlZFUjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNpbmstPnNlcnZlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xJRU5UOgotICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCBzaW5rLT5qY2xpZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UUkFOU1BPUlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIHNpbmstPnRyYW5zcG9ydCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9qYWNrX2F1ZGlvX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0SmFja0F1ZGlvU2luayAqc2luayA9IEdTVF9KQUNLX0FVRElPX1NJTksgKGJzaW5rKTsKLSAgY29uc3QgY2hhciAqKnBvcnRzOwotICBnaW50IG1pbiwgbWF4OwotICBnaW50IHJhdGU7Ci0gIGphY2tfY2xpZW50X3QgKmNsaWVudDsKLQotICBpZiAoc2luay0+Y2xpZW50ID09IE5VTEwpCi0gICAgZ290byBub19jbGllbnQ7Ci0KLSAgY2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldF9jbGllbnQgKHNpbmstPmNsaWVudCk7Ci0KLSAgaWYgKHNpbmstPmNvbm5lY3QgPT0gR1NUX0pBQ0tfQ09OTkVDVF9BVVRPKSB7Ci0gICAgLyogZ2V0IGEgcG9ydCBjb3VudCwgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHdlIGNhbiBhdXRvbWF0aWNhbGx5Ci0gICAgICogY29ubmVjdC4gKi8KLSAgICBwb3J0cyA9IGphY2tfZ2V0X3BvcnRzIChjbGllbnQsIE5VTEwsIE5VTEwsCi0gICAgICAgIEphY2tQb3J0SXNQaHlzaWNhbCB8IEphY2tQb3J0SXNJbnB1dCk7Ci0gICAgbWF4ID0gMDsKLSAgICBpZiAocG9ydHMgIT0gTlVMTCkgewotICAgICAgZm9yICg7IHBvcnRzW21heF07IG1heCsrKTsKLSAgICAgIGZyZWUgKHBvcnRzKTsKLSAgICB9IGVsc2UKLSAgICAgIG1heCA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgLyogd2UgYWxsb3cgYW55IG51bWJlciBvZiBwYWRzLCBzb21ldGhpbmcgZWxzZSBpcyBnb2luZyB0byBjb25uZWN0IHRoZQotICAgICAqIHBhZHMuICovCi0gICAgbWF4ID0gR19NQVhJTlQ7Ci0gIH0KLSAgbWluID0gTUlOICgxLCBtYXgpOwotCi0gIHJhdGUgPSBqYWNrX2dldF9zYW1wbGVfcmF0ZSAoY2xpZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiZ290ICVkLSVkIHBvcnRzLCBzYW1wbGVyYXRlOiAlZCIsIG1pbiwgbWF4LCByYXRlKTsKLQotICBpZiAoIXNpbmstPmNhcHMpIHsKLSAgICBzaW5rLT5jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIEdTVF9KQUNLX0ZPUk1BVF9TVFIsCi0gICAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAiaW50ZXJsZWF2ZWQiLAotICAgICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIHJhdGUsCi0gICAgICAgICJjaGFubmVscyIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgbWluLCBtYXgsIE5VTEwpOwotICB9Ci0gIEdTVF9JTkZPX09CSkVDVCAoc2luaywgInJldHVybmluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBzaW5rLT5jYXBzKTsKLQotICByZXR1cm4gZ3N0X2NhcHNfcmVmIChzaW5rLT5jYXBzKTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2NsaWVudDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJkZXZpY2Ugbm90IG9wZW4sIHVzaW5nIHRlbXBsYXRlIGNhcHMiKTsKLSAgICAvKiBiYXNlIGNsYXNzIHdpbGwgZ2V0IHRlbXBsYXRlIGNhcHMgZm9yIHVzIHdoZW4gd2UgcmV0dXJuIE5VTEwgKi8KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0QXVkaW9SaW5nQnVmZmVyICoKLWdzdF9qYWNrX2F1ZGlvX3NpbmtfY3JlYXRlX3JpbmdidWZmZXIgKEdzdEF1ZGlvQmFzZVNpbmsgKiBzaW5rKQotewotICBHc3RBdWRpb1JpbmdCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0pBQ0tfUklOR19CVUZGRVIsIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiY3JlYXRlZCByaW5nYnVmZmVyIEAlcCIsIGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KZGlmZiAtLWdpdCBhL2V4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuaCBiL2V4dC9qYWNrL2dzdGphY2thdWRpb3NpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZjY2M4YS4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdGphY2tzaW5rLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9KQUNLX0FVRElPX1NJTktfSF9fCi0jZGVmaW5lIF9fR1NUX0pBQ0tfQVVESU9fU0lOS19IX18KLQotI2luY2x1ZGUgPGphY2svamFjay5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2Jhc2VzaW5rLmg+Ci0KLSNpbmNsdWRlICJnc3RqYWNrLmgiCi0jaW5jbHVkZSAiZ3N0amFja2F1ZGlvY2xpZW50LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9KQUNLX0FVRElPX1NJTksgICAgICAgICAgICAgKGdzdF9qYWNrX2F1ZGlvX3NpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0pBQ0tfQVVESU9fU0lOSyhvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9KQUNLX0FVRElPX1NJTkssR3N0SmFja0F1ZGlvU2luaykpCi0jZGVmaW5lIEdTVF9KQUNLX0FVRElPX1NJTktfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9KQUNLX0FVRElPX1NJTkssR3N0SmFja0F1ZGlvU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0pBQ0tfQVVESU9fU0lOS19HRVRfQ0xBU1Mob2JqKSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSxHU1RfVFlQRV9KQUNLX0FVRElPX1NJTkssR3N0SmFja0F1ZGlvU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0pBQ0tfQVVESU9fU0lOSyhvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9KQUNLX0FVRElPX1NJTkspKQotI2RlZmluZSBHU1RfSVNfSkFDS19BVURJT19TSU5LX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSkFDS19BVURJT19TSU5LKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEphY2tBdWRpb1NpbmsgR3N0SmFja0F1ZGlvU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RKYWNrQXVkaW9TaW5rQ2xhc3MgR3N0SmFja0F1ZGlvU2lua0NsYXNzOwotCi0vKioKLSAqIEdzdEphY2tBdWRpb1Npbms6Ci0gKiAKLSAqIE9wYXF1ZSAjR3N0SmFja0F1ZGlvU2luay4KLSAqLwotc3RydWN0IF9Hc3RKYWNrQXVkaW9TaW5rIHsKLSAgR3N0QXVkaW9CYXNlU2luayBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICAvKiBjYWNoZWQgY2FwcyAqLwotICBHc3RDYXBzICAgICAgICAgKmNhcHM7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBHc3RKYWNrQ29ubmVjdCAgIGNvbm5lY3Q7Ci0gIGdjaGFyICAgICAgICAgICAqc2VydmVyOwotICBqYWNrX2NsaWVudF90ICAgKmpjbGllbnQ7Ci0gIGdjaGFyICAgICAgICAgICAqY2xpZW50X25hbWU7Ci0gIGdjaGFyICAgICAgICAgICAqcG9ydF9wYXR0ZXJuOwotICBndWludCAgICAgICAgICAgIHRyYW5zcG9ydDsKLQotICAvKiBvdXIgY2xpZW50ICovCi0gIEdzdEphY2tBdWRpb0NsaWVudCAqY2xpZW50OwotCi0gIC8qIG91ciBwb3J0cyAqLwotICBqYWNrX3BvcnRfdCAgICAqKnBvcnRzOwotICBpbnQgICAgICAgICAgICAgIHBvcnRfY291bnQ7Ci0gIHNhbXBsZV90ICAgICAgICoqYnVmZmVyczsKLX07Ci0KLXN0cnVjdCBfR3N0SmFja0F1ZGlvU2lua0NsYXNzIHsKLSAgR3N0QXVkaW9CYXNlU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9qYWNrX2F1ZGlvX3NpbmtfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSkFDS19BVURJT19TSU5LX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmMgYi9leHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlYmVlNy4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDk5MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUcmlzdGFuIE1hdHRoZXdzIDx0cmlzdGFuQHNhdC5xYy5jYT4KLSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgKHRoZSAiTEdQTCIpLCBpbgotICogd2hpY2ggY2FzZSB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkgaW5zdGVhZCBvZiB0aGUgb25lcwotICogbWVudGlvbmVkIGFib3ZlOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWphY2thdWRpb3NyYwotICogQHNlZV9hbHNvOiAjR3N0QXVkaW9CYXNlU3JjLCAjR3N0QXVkaW9SaW5nQnVmZmVyCi0gKgotICogQSBTcmMgdGhhdCBpbnB1dHMgZGF0YSBmcm9tIEphY2sgcG9ydHMuCi0gKiAKLSAqIEl0IHdpbGwgY3JlYXRlIE4gSmFjayBwb3J0cyBuYW1lZCBpbl8mbHQ7bmFtZSZndDtfJmx0O251bSZndDsgd2hlcmUgCi0gKiAmbHQ7bmFtZSZndDsgaXMgdGhlIGVsZW1lbnQgbmFtZSBhbmQgJmx0O251bSZndDsgaXMgc3RhcnRpbmcgZnJvbSAxLgotICogRWFjaCBwb3J0IGNvcnJlc3BvbmRzIHRvIGEgZ3N0cmVhbWVyIGNoYW5uZWwuCi0gKiAKLSAqIFRoZSBzYW1wbGVyYXRlIGFzIGV4cG9zZWQgb24gdGhlIGNhcHMgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBzYW1wbGVyYXRlIG9mCi0gKiB0aGUgamFjayBzZXJ2ZXIuCi0gKiAKLSAqIFdoZW4gdGhlICNHc3RKYWNrQXVkaW9TcmM6Y29ubmVjdCBwcm9wZXJ0eSBpcyBzZXQgdG8gYXV0bywgdGhpcyBlbGVtZW50Ci0gKiB3aWxsIHRyeSB0byBjb25uZWN0IGVhY2ggaW5wdXQgcG9ydCB0byBhIHJhbmRvbSBwaHlzaWNhbCBqYWNrIG91dHB1dCBwaW4uIAotICogCi0gKiBXaGVuIHRoZSAjR3N0SmFja0F1ZGlvU3JjOmNvbm5lY3QgcHJvcGVydHkgaXMgc2V0IHRvIG5vbmUsIHRoZSBlbGVtZW50IHdpbGwKLSAqIGFjY2VwdCBhbnkgbnVtYmVyIG9mIG91dHB1dCBjaGFubmVscyBhbmQgd2lsbCBjcmVhdGUgKGJ1dCBub3QgY29ubmVjdCkgYW4KLSAqIGlucHV0IHBvcnQgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIAotICogVGhlIGVsZW1lbnQgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIHRoZSBKYWNrIHNlcnZlciBpcyBzaHV0IGRvd24gd2hlbiBpdAotICogd2FzIFBBVVNFRCBvciBQTEFZSU5HLiBUaGlzIGVsZW1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkeW5hbWljIHJhdGUgYW5kIGJ1ZmZlcgotICogc2l6ZSBjaGFuZ2VzIGF0IHJ1bnRpbWUuCi0gKiAKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBqYWNrYXVkaW9zcmMgY29ubmVjdD0wICEgamFja2F1ZGlvc2luayBjb25uZWN0PTAKLSAqIF18IEdldCBhdWRpbyBpbnB1dCBpbnRvIGdzdHJlYW1lciBmcm9tIGphY2suCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ3N0amFja2F1ZGlvc3JjLmgiCi0jaW5jbHVkZSAiZ3N0amFja3JpbmdidWZmZXIuaCIKLSNpbmNsdWRlICJnc3RqYWNrdXRpbC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfamFja19hdWRpb19zcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2phY2tfYXVkaW9fc3JjX2RlYnVnCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2phY2tfYXVkaW9fc3JjX2FsbG9jYXRlX2NoYW5uZWxzIChHc3RKYWNrQXVkaW9TcmMgKiBzcmMsIGdpbnQgY2hhbm5lbHMpCi17Ci0gIGphY2tfY2xpZW50X3QgKmNsaWVudDsKLQotICBjbGllbnQgPSBnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudCAoc3JjLT5jbGllbnQpOwotCi0gIC8qIHJlbW92ZSBwb3J0cyB3ZSBkb24ndCBuZWVkICovCi0gIHdoaWxlIChzcmMtPnBvcnRfY291bnQgPiBjaGFubmVscykKLSAgICBqYWNrX3BvcnRfdW5yZWdpc3RlciAoY2xpZW50LCBzcmMtPnBvcnRzWy0tc3JjLT5wb3J0X2NvdW50XSk7Ci0KLSAgLyogYWxsb2MgZW5vdWdoIGlucHV0IHBvcnRzICovCi0gIHNyYy0+cG9ydHMgPSBnX3JlYWxsb2MgKHNyYy0+cG9ydHMsIHNpemVvZiAoamFja19wb3J0X3QgKikgKiBjaGFubmVscyk7Ci0gIHNyYy0+YnVmZmVycyA9IGdfcmVhbGxvYyAoc3JjLT5idWZmZXJzLCBzaXplb2YgKHNhbXBsZV90ICopICogY2hhbm5lbHMpOwotCi0gIC8qIGNyZWF0ZSBhbiBpbnB1dCBwb3J0IGZvciBlYWNoIGNoYW5uZWwgKi8KLSAgd2hpbGUgKHNyYy0+cG9ydF9jb3VudCA8IGNoYW5uZWxzKSB7Ci0gICAgZ2NoYXIgKm5hbWU7Ci0KLSAgICAvKiBwb3J0IG5hbWVzIHN0YXJ0IGZyb20gMSBhbmQgYXJlIGxvY2FsIHRvIHRoZSBlbGVtZW50ICovCi0gICAgbmFtZSA9Ci0gICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoImluXyVzXyVkIiwgR1NUX0VMRU1FTlRfTkFNRSAoc3JjKSwKLSAgICAgICAgc3JjLT5wb3J0X2NvdW50ICsgMSk7Ci0gICAgc3JjLT5wb3J0c1tzcmMtPnBvcnRfY291bnRdID0KLSAgICAgICAgamFja19wb3J0X3JlZ2lzdGVyIChjbGllbnQsIG5hbWUsIEpBQ0tfREVGQVVMVF9BVURJT19UWVBFLAotICAgICAgICBKYWNrUG9ydElzSW5wdXQsIDApOwotICAgIGlmIChzcmMtPnBvcnRzW3NyYy0+cG9ydF9jb3VudF0gPT0gTlVMTCkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIHNyYy0+cG9ydF9jb3VudCsrOwotCi0gICAgZ19mcmVlIChuYW1lKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX2F1ZGlvX3NyY19mcmVlX2NoYW5uZWxzIChHc3RKYWNrQXVkaW9TcmMgKiBzcmMpCi17Ci0gIGdpbnQgcmVzLCBpID0gMDsKLSAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gIGNsaWVudCA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50IChzcmMtPmNsaWVudCk7Ci0KLSAgLyogZ2V0IHJpZCBvZiBhbGwgcG9ydHMgKi8KLSAgd2hpbGUgKHNyYy0+cG9ydF9jb3VudCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJ1bnJlZ2lzdGVyIHBvcnQgJWQiLCBpKTsKLSAgICBpZiAoKHJlcyA9IGphY2tfcG9ydF91bnJlZ2lzdGVyIChjbGllbnQsIHNyYy0+cG9ydHNbaSsrXSkpKQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAidW5yZWdpc3RlciBvZiBwb3J0IGZhaWxlZCAoJWQpIiwgcmVzKTsKLQotICAgIHNyYy0+cG9ydF9jb3VudC0tOwotICB9Ci0gIGdfZnJlZSAoc3JjLT5wb3J0cyk7Ci0gIHNyYy0+cG9ydHMgPSBOVUxMOwotICBnX2ZyZWUgKHNyYy0+YnVmZmVycyk7Ci0gIHNyYy0+YnVmZmVycyA9IE5VTEw7Ci19Ci0KLS8qIHJpbmdidWZmZXIgYWJzdHJhY3QgYmFzZSBjbGFzcyAqLwotc3RhdGljIEdUeXBlCi1nc3RfamFja19yaW5nX2J1ZmZlcl9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIHZvbGF0aWxlIGdzaXplIHJpbmdidWZmZXJfdHlwZSA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmcmluZ2J1ZmZlcl90eXBlKSkgewotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gcmluZ2J1ZmZlcl9pbmZvID0geyBzaXplb2YgKEdzdEphY2tSaW5nQnVmZmVyQ2xhc3MpLAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF9qYWNrX3JpbmdfYnVmZmVyX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0SmFja1JpbmdCdWZmZXIpLAotICAgICAgMCwKLSAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X2phY2tfcmluZ19idWZmZXJfaW5pdCwKLSAgICAgIE5VTEwKLSAgICB9OwotICAgIEdUeXBlIHRtcCA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0FVRElPX1JJTkdfQlVGRkVSLAotICAgICAgICAiR3N0SmFja0F1ZGlvU3JjUmluZ0J1ZmZlciIsICZyaW5nYnVmZmVyX2luZm8sIDApOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmcmluZ2J1ZmZlcl90eXBlLCB0bXApOwotICB9Ci0KLSAgcmV0dXJuIChHVHlwZSkgcmluZ2J1ZmZlcl90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfcmluZ19idWZmZXJfY2xhc3NfaW5pdCAoR3N0SmFja1JpbmdCdWZmZXJDbGFzcyAqIGtsYXNzKQotewotICBHc3RBdWRpb1JpbmdCdWZmZXJDbGFzcyAqZ3N0cmluZ2J1ZmZlcl9jbGFzczsKLQotICBnc3RyaW5nYnVmZmVyX2NsYXNzID0gKEdzdEF1ZGlvUmluZ0J1ZmZlckNsYXNzICopIGtsYXNzOwotCi0gIHJpbmdfcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+b3Blbl9kZXZpY2UgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+Y2xvc2VfZGV2aWNlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfamFja19yaW5nX2J1ZmZlcl9jbG9zZV9kZXZpY2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5hY3F1aXJlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfamFja19yaW5nX2J1ZmZlcl9hY3F1aXJlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+cmVsZWFzZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2phY2tfcmluZ19idWZmZXJfcmVsZWFzZSk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX3N0YXJ0KTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+cGF1c2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2phY2tfcmluZ19idWZmZXJfcGF1c2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5yZXN1bWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2phY2tfcmluZ19idWZmZXJfc3RhcnQpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX3N0b3ApOwotCi0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX3JpbmdfYnVmZmVyX2RlbGF5KTsKLX0KLQotLyogdGhpcyBpcyB0aGUgY2FsbGJhY2sgb2YgamFjay4gVGhpcyBzaG91bGQgYmUgUlQtc2FmZS4KLSAqIFdyaXRlcyBzYW1wbGVzIGZyb20gdGhlIGphY2sgaW5wdXQgcG9ydCdzIGJ1ZmZlciB0byB0aGUgZ3N0IHJpbmcgYnVmZmVyLgotICovCi1zdGF0aWMgaW50Ci1qYWNrX3Byb2Nlc3NfY2IgKGphY2tfbmZyYW1lc190IG5mcmFtZXMsIHZvaWQgKmFyZykKLXsKLSAgR3N0SmFja0F1ZGlvU3JjICpzcmM7Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciAqYnVmOwotICBnaW50IGxlbjsKLSAgZ3VpbnQ4ICp3cml0ZXB0cjsKLSAgZ2ludCB3cml0ZXNlZzsKLSAgZ2ludCBjaGFubmVscywgaSwgaiwgZmxlbjsKLSAgc2FtcGxlX3QgKmRhdGE7Ci0KLSAgYnVmID0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0NBU1QgKGFyZyk7Ci0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotCi0gIGNoYW5uZWxzID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZidWYtPnNwZWMuaW5mbyk7Ci0KLSAgLyogZ2V0IGlucHV0IGJ1ZmZlcnMgKi8KLSAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspCi0gICAgc3JjLT5idWZmZXJzW2ldID0KLSAgICAgICAgKHNhbXBsZV90ICopIGphY2tfcG9ydF9nZXRfYnVmZmVyIChzcmMtPnBvcnRzW2ldLCBuZnJhbWVzKTsKLQotICBpZiAoZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3ByZXBhcmVfcmVhZCAoYnVmLCAmd3JpdGVzZWcsICZ3cml0ZXB0ciwgJmxlbikpIHsKLSAgICBmbGVuID0gbGVuIC8gY2hhbm5lbHM7Ci0KLSAgICAvKiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgbXVzdCBiZSBleGFjdGx5IHRoZSBzZWdtZW50IHNpemUgKi8KLSAgICBpZiAobmZyYW1lcyAqIHNpemVvZiAoc2FtcGxlX3QpICE9IGZsZW4pCi0gICAgICBnb3RvIHdyb25nX3NpemU7Ci0KLSAgICAvKiB0aGUgc2FtcGxlcyBpbiB0aGUgamFjayBpbnB1dCBidWZmZXJzIGhhdmUgdG8gYmUgaW50ZXJsZWF2ZWQgaW50byB0aGUKLSAgICAgKiByaW5nYnVmZmVyICovCi0gICAgZGF0YSA9IChzYW1wbGVfdCAqKSB3cml0ZXB0cjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmZyYW1lczsgKytpKQotICAgICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyArK2opCi0gICAgICAgICpkYXRhKysgPSBzcmMtPmJ1ZmZlcnNbal1baV07Ci0KLSAgICBHU1RfREVCVUcgKCJjb3B5ICVkIGZyYW1lczogJXAsICVkIGJ5dGVzLCAlZCBjaGFubmVscyIsIG5mcmFtZXMsIHdyaXRlcHRyLAotICAgICAgICBsZW4gLyBjaGFubmVscywgY2hhbm5lbHMpOwotCi0gICAgLyogd2Ugd3JvdGUgb25lIHNlZ21lbnQgKi8KLSAgICBnc3RfYXVkaW9fcmluZ19idWZmZXJfYWR2YW5jZSAoYnVmLCAxKTsKLSAgfQotICByZXR1cm4gMDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3NpemU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJuYnl0ZXMgKCVkKSAhPSBmbGVuICglZCkiLAotICAgICAgICAoZ2ludCkgKG5mcmFtZXMgKiBzaXplb2YgKHNhbXBsZV90KSksIGZsZW4pOwotICAgIHJldHVybiAxOwotICB9Ci19Ci0KLS8qIHdlIGVycm9yIG91dCAqLwotc3RhdGljIGludAotamFja19zYW1wbGVfcmF0ZV9jYiAoamFja19uZnJhbWVzX3QgbmZyYW1lcywgdm9pZCAqYXJnKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLSAgR3N0SmFja1JpbmdCdWZmZXIgKmFidWY7Ci0KLSAgYWJ1ZiA9IEdTVF9KQUNLX1JJTkdfQlVGRkVSX0NBU1QgKGFyZyk7Ci0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGFyZykpOwotCi0gIGlmIChhYnVmLT5zYW1wbGVfcmF0ZSAhPSAtMSAmJiBhYnVmLT5zYW1wbGVfcmF0ZSAhPSBuZnJhbWVzKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLQotICByZXR1cm4gMDsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChOVUxMKSwgKCJKYWNrIGNoYW5nZWQgdGhlIHNhbXBsZSByYXRlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIikpOwotICAgIHJldHVybiAxOwotICB9Ci19Ci0KLS8qIHdlIGVycm9yIG91dCAqLwotc3RhdGljIGludAotamFja19idWZmZXJfc2l6ZV9jYiAoamFja19uZnJhbWVzX3QgbmZyYW1lcywgdm9pZCAqYXJnKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLSAgR3N0SmFja1JpbmdCdWZmZXIgKmFidWY7Ci0KLSAgYWJ1ZiA9IEdTVF9KQUNLX1JJTkdfQlVGRkVSX0NBU1QgKGFyZyk7Ci0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGFyZykpOwotCi0gIGlmIChhYnVmLT5idWZmZXJfc2l6ZSAhPSAtMSAmJiBhYnVmLT5idWZmZXJfc2l6ZSAhPSBuZnJhbWVzKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLQotICByZXR1cm4gMDsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChOVUxMKSwgKCJKYWNrIGNoYW5nZWQgdGhlIGJ1ZmZlciBzaXplLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIikpOwotICAgIHJldHVybiAxOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1qYWNrX3NodXRkb3duX2NiICh2b2lkICphcmcpCi17Ci0gIEdzdEphY2tBdWRpb1NyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGFyZykpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNodXRkb3duIik7Ci0KLSAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgIChOVUxMKSwgKCJKYWNrIHNlcnZlciBzaHV0ZG93biIpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX3JpbmdfYnVmZmVyX2luaXQgKEdzdEphY2tSaW5nQnVmZmVyICogYnVmLAotICAgIEdzdEphY2tSaW5nQnVmZmVyQ2xhc3MgKiBnX2NsYXNzKQotewotICBidWYtPmNoYW5uZWxzID0gLTE7Ci0gIGJ1Zi0+YnVmZmVyX3NpemUgPSAtMTsKLSAgYnVmLT5zYW1wbGVfcmF0ZSA9IC0xOwotfQotCi0vKiB0aGUgX29wZW5fZGV2aWNlIG1ldGhvZCBzaG91bGQgbWFrZSBhIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyCi0qLwotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19yaW5nX2J1ZmZlcl9vcGVuX2RldmljZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLSAgamFja19zdGF0dXNfdCBzdGF0dXMgPSAwOwotICBjb25zdCBnY2hhciAqbmFtZTsKLQotICBzcmMgPSBHU1RfSkFDS19BVURJT19TUkMgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJvcGVuIik7Ci0KLSAgaWYgKHNyYy0+Y2xpZW50X25hbWUpIHsKLSAgICBuYW1lID0gc3JjLT5jbGllbnRfbmFtZTsKLSAgfSBlbHNlIHsKLSAgICBuYW1lID0gZ19nZXRfYXBwbGljYXRpb25fbmFtZSAoKTsKLSAgfQotICBpZiAoIW5hbWUpCi0gICAgbmFtZSA9ICJHU3RyZWFtZXIiOwotCi0gIHNyYy0+Y2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X25ldyAobmFtZSwgc3JjLT5zZXJ2ZXIsCi0gICAgICBzcmMtPmpjbGllbnQsCi0gICAgICBHU1RfSkFDS19DTElFTlRfU09VUkNFLAotICAgICAgamFja19zaHV0ZG93bl9jYiwKLSAgICAgIGphY2tfcHJvY2Vzc19jYiwgamFja19idWZmZXJfc2l6ZV9jYiwgamFja19zYW1wbGVfcmF0ZV9jYiwgYnVmLCAmc3RhdHVzKTsKLSAgaWYgKHNyYy0+Y2xpZW50ID09IE5VTEwpCi0gICAgZ290byBjb3VsZF9ub3Rfb3BlbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJvcGVuZWQiKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWNvdWxkX25vdF9vcGVuOgotICB7Ci0gICAgaWYgKHN0YXR1cyAmIChKYWNrU2VydmVyRmFpbGVkIHwgSmFja0ZhaWx1cmUpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAotICAgICAgICAgIChfKCJKYWNrIHNlcnZlciBub3QgZm91bmQiKSksCi0gICAgICAgICAgKCJDYW5ub3QgY29ubmVjdCB0byB0aGUgSmFjayBzZXJ2ZXIgKHN0YXR1cyAlZCkiLCBzdGF0dXMpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgICAoTlVMTCksICgiSmFjayBjbGllbnQgb3BlbiBlcnJvciAoc3RhdHVzICVkKSIsIHN0YXR1cykpOwotICAgIH0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyCi0qLwotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19yaW5nX2J1ZmZlcl9jbG9zZV9kZXZpY2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SmFja0F1ZGlvU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX0pBQ0tfQVVESU9fU1JDIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2xvc2UiKTsKLQotICBnc3RfamFja19hdWRpb19zcmNfZnJlZV9jaGFubmVscyAoc3JjKTsKLSAgZ3N0X2phY2tfYXVkaW9fY2xpZW50X2ZyZWUgKHNyYy0+Y2xpZW50KTsKLSAgc3JjLT5jbGllbnQgPSBOVUxMOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qIGFsbG9jYXRlIGEgYnVmZmVyIGFuZCBzZXR1cCByZXNvdXJjZXMgdG8gcHJvY2VzcyB0aGUgYXVkaW8gc2FtcGxlcyBvZgotICogdGhlIGZvcm1hdCBhcyBzcGVjaWZpZWQgaW4gQHNwZWMuCi0gKgotICogV2UgYWxsb2NhdGUgTiBqYWNrIHBvcnRzLCBvbmUgZm9yIGVhY2ggY2hhbm5lbC4gSWYgd2UgYXJlIGFza2VkIHRvCi0gKiBhdXRvbWF0aWNhbGx5IG1ha2UgYSBjb25uZWN0aW9uIHdpdGggcGh5c2ljYWwgcG9ydHMsIHdlIGNvbm5lY3QgYXMgbWFueQotICogcG9ydHMgYXMgdGhlcmUgYXJlIHBoeXNpY2FsIHBvcnRzLCBsZWF2aW5nIGxlZnRvdmVyIHBvcnRzIHVuY29ubmVjdGVkLgotICoKLSAqIEl0IGlzIGFzc3VtZWQgdGhhdCBzYW1wbGVyYXRlIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMgYXJlIGFjY2VwdGFibGUgc2luY2Ugb3VyCi0gKiBnZXRjYXBzIG1ldGhvZCB3aWxsIGFsd2F5cyBwcm92aWRlIGNvcnJlY3QgdmFsdWVzLiBJZiB1bmFjY2VwdGFibGUgY2FwcyBhcmUKLSAqIHJlY2VpdmVkIGZvciBzb21lIHJlYXNvbiwgd2UgZmFpbCBoZXJlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qYWNrX3JpbmdfYnVmZmVyX2FjcXVpcmUgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZiwKLSAgICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYykKLXsKLSAgR3N0SmFja0F1ZGlvU3JjICpzcmM7Ci0gIEdzdEphY2tSaW5nQnVmZmVyICphYnVmOwotICBjb25zdCBjaGFyICoqcG9ydHM7Ci0gIGdpbnQgc2FtcGxlX3JhdGUsIGJ1ZmZlcl9zaXplOwotICBnaW50IGksIGJwZiwgcmF0ZSwgY2hhbm5lbHMsIHJlczsKLSAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotICBhYnVmID0gR1NUX0pBQ0tfUklOR19CVUZGRVJfQ0FTVCAoYnVmKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJhY3F1aXJlIik7Ci0KLSAgY2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldF9jbGllbnQgKHNyYy0+Y2xpZW50KTsKLQotICByYXRlID0gR1NUX0FVRElPX0lORk9fUkFURSAoJnNwZWMtPmluZm8pOwotCi0gIC8qIHNhbXBsZSByYXRlIG11c3QgYmUgdGhhdCBvZiB0aGUgc2VydmVyICovCi0gIHNhbXBsZV9yYXRlID0gamFja19nZXRfc2FtcGxlX3JhdGUgKGNsaWVudCk7Ci0gIGlmIChzYW1wbGVfcmF0ZSAhPSByYXRlKQotICAgIGdvdG8gd3Jvbmdfc2FtcGxlcmF0ZTsKLQotICBicGYgPSBHU1RfQVVESU9fSU5GT19CUEYgKCZzcGVjLT5pbmZvKTsKLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJnNwZWMtPmluZm8pOwotCi0gIGlmICghZ3N0X2phY2tfYXVkaW9fc3JjX2FsbG9jYXRlX2NoYW5uZWxzIChzcmMsIGNoYW5uZWxzKSkKLSAgICBnb3RvIG91dF9vZl9wb3J0czsKLQotICBnc3RfamFja19zZXRfbGF5b3V0IChidWYsIHNwZWMpOwotCi0gIGJ1ZmZlcl9zaXplID0gamFja19nZXRfYnVmZmVyX3NpemUgKGNsaWVudCk7Ci0KLSAgLyogdGhlIHNlZ21lbnQgc2l6ZSBpbiBieXRlcywgdGhpcyBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGJ1ZmZlciBvZiAzMmJpdCBmbG9hdHMKLSAgICogZm9yIGFsbCBjaGFubmVscyAgKi8KLSAgc3BlYy0+c2Vnc2l6ZSA9IGJ1ZmZlcl9zaXplICogc2l6ZW9mIChnZmxvYXQpICogY2hhbm5lbHM7Ci0gIHNwZWMtPmxhdGVuY3lfdGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3BlYy0+c2Vnc2l6ZSwKLSAgICAgIChHU1RfU0VDT05EIC8gR1NUX1VTRUNPTkQpLCByYXRlICogYnBmKTsKLSAgLyogc2VndG90YWwgYmFzZWQgb24gYnVmZmVyLXRpbWUgbGF0ZW5jeSAqLwotICBzcGVjLT5zZWd0b3RhbCA9IHNwZWMtPmJ1ZmZlcl90aW1lIC8gc3BlYy0+bGF0ZW5jeV90aW1lOwotICBpZiAoc3BlYy0+c2VndG90YWwgPCAyKSB7Ci0gICAgc3BlYy0+c2VndG90YWwgPSAyOwotICAgIHNwZWMtPmJ1ZmZlcl90aW1lID0gc3BlYy0+bGF0ZW5jeV90aW1lICogc3BlYy0+c2VndG90YWw7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJidWZmZXIgdGltZTogJSIgR19HSU5UNjRfRk9STUFUICIgdXNlYyIsCi0gICAgICBzcGVjLT5idWZmZXJfdGltZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImxhdGVuY3kgdGltZTogJSIgR19HSU5UNjRfRk9STUFUICIgdXNlYyIsCi0gICAgICBzcGVjLT5sYXRlbmN5X3RpbWUpOwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJidWZmZXJfc2l6ZSAlZCwgc2Vnc2l6ZSAlZCwgc2VndG90YWwgJWQiLAotICAgICAgYnVmZmVyX3NpemUsIHNwZWMtPnNlZ3NpemUsIHNwZWMtPnNlZ3RvdGFsKTsKLQotICAvKiBhbGxvY2F0ZSB0aGUgcmluZ2J1ZmZlciBtZW1vcnkgbm93ICovCi0gIGJ1Zi0+c2l6ZSA9IHNwZWMtPnNlZ3RvdGFsICogc3BlYy0+c2Vnc2l6ZTsKLSAgYnVmLT5tZW1vcnkgPSBnX21hbGxvYzAgKGJ1Zi0+c2l6ZSk7Ci0KLSAgaWYgKChyZXMgPSBnc3RfamFja19hdWRpb19jbGllbnRfc2V0X2FjdGl2ZSAoc3JjLT5jbGllbnQsIFRSVUUpKSkKLSAgICBnb3RvIGNvdWxkX25vdF9hY3RpdmF0ZTsKLQotICAvKiBpZiB3ZSBuZWVkIHRvIGF1dG9tYXRpY2FsbHkgY29ubmVjdCB0aGUgcG9ydHMsIGRvIHNvIG5vdy4gV2UgbXVzdCBkbyB0aGlzCi0gICAqIGFmdGVyIGFjdGl2YXRpbmcgdGhlIGNsaWVudC4gKi8KLSAgaWYgKHNyYy0+Y29ubmVjdCA9PSBHU1RfSkFDS19DT05ORUNUX0FVVE8KLSAgICAgIHx8IHNyYy0+Y29ubmVjdCA9PSBHU1RfSkFDS19DT05ORUNUX0FVVE9fRk9SQ0VEKSB7Ci0gICAgLyogZmluZCBhbGwgdGhlIHBoeXNpY2FsIG91dHB1dCBwb3J0cy4gQSBwaHlzaWNhbCBvdXRwdXQgcG9ydCBpcyBhIHBvcnQKLSAgICAgKiBhc3NvY2lhdGVkIHdpdGggYSBoYXJkd2FyZSBkZXZpY2UuIFNvbWVvbmUgbmVlZHMgY29ubmVjdCB0byBhIHBoeXNpY2FsCi0gICAgICogcG9ydCBpbiBvcmRlciB0byBjYXB0dXJlIHNvbWV0aGluZy4gKi8KLQotICAgIGlmIChzcmMtPnBvcnRfcGF0dGVybiA9PSBOVUxMKSB7Ci0gICAgICBwb3J0cyA9IGphY2tfZ2V0X3BvcnRzIChjbGllbnQsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgSmFja1BvcnRJc1BoeXNpY2FsIHwgSmFja1BvcnRJc091dHB1dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBvcnRzID0gamFja19nZXRfcG9ydHMgKGNsaWVudCwgc3JjLT5wb3J0X3BhdHRlcm4sIE5VTEwsCi0gICAgICAgICAgSmFja1BvcnRJc091dHB1dCk7Ci0gICAgfQotCi0gICAgaWYgKHBvcnRzID09IE5VTEwpIHsKLSAgICAgIC8qIG5vIHBvcnRzPyBmaW5lIHRoZW4gd2UgZG9uJ3QgZG8gYW55dGhpbmcgZXhjZXB0IGZvciBwb3N0aW5nIGEgd2FybmluZwotICAgICAgICogbWVzc2FnZS4gKi8KLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKE5VTEwpLAotICAgICAgICAgICgiTm8gcGh5c2ljYWwgb3V0cHV0IHBvcnRzIGZvdW5kLCBsZWF2aW5nIHBvcnRzIHVuY29ubmVjdGVkIikpOwotICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgaSsrKSB7Ci0gICAgICAvKiBzdG9wIHdoZW4gYWxsIG91dHB1dCBwb3J0cyBhcmUgZXhoYXVzdGVkICovCi0gICAgICBpZiAocG9ydHNbaV0gPT0gTlVMTCkgewotICAgICAgICAvKiBwb3N0IGEgd2FybmluZyB0aGF0IHdlIGNvdWxkIG5vdCBjb25uZWN0IGFsbCBwb3J0cyAqLwotICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChzcmMsIFJFU09VUkNFLCBOT1RfRk9VTkQsIChOVUxMKSwKLSAgICAgICAgICAgICgiTm8gbW9yZSBwaHlzaWNhbCBwb3J0cywgbGVhdmluZyBzb21lIHBvcnRzIHVuY29ubmVjdGVkIikpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInRyeSBjb25uZWN0aW5nIHRvICVzIiwKLSAgICAgICAgICBqYWNrX3BvcnRfbmFtZSAoc3JjLT5wb3J0c1tpXSkpOwotCi0gICAgICAvKiBjb25uZWN0IHRoZSBwaHlzaWNhbCBwb3J0IHRvIGEgcG9ydCAqLwotICAgICAgcmVzID0gamFja19jb25uZWN0IChjbGllbnQsIHBvcnRzW2ldLCBqYWNrX3BvcnRfbmFtZSAoc3JjLT5wb3J0c1tpXSkpOwotICAgICAgaWYgKHJlcyAhPSAwICYmIHJlcyAhPSBFRVhJU1QpCi0gICAgICAgIGdvdG8gY2Fubm90X2Nvbm5lY3Q7Ci0gICAgfQotICAgIGZyZWUgKHBvcnRzKTsKLSAgfQotZG9uZToKLQotICBhYnVmLT5zYW1wbGVfcmF0ZSA9IHNhbXBsZV9yYXRlOwotICBhYnVmLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOwotICBhYnVmLT5jaGFubmVscyA9IGNoYW5uZWxzOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotd3Jvbmdfc2FtcGxlcmF0ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIldyb25nIHNhbXBsZXJhdGUsIHNlcnZlciBpcyBydW5uaW5nIGF0ICVkIGFuZCB3ZSByZWNlaXZlZCAlZCIsCi0gICAgICAgICAgICBzYW1wbGVfcmF0ZSwgcmF0ZSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotb3V0X29mX3BvcnRzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiQ2Fubm90IGFsbG9jYXRlIG1vcmUgSmFjayBwb3J0cyIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNvdWxkX25vdF9hY3RpdmF0ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBhY3RpdmF0ZSBjbGllbnQgKCVkOiVzKSIsIHJlcywgZ19zdHJlcnJvciAocmVzKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotY2Fubm90X2Nvbm5lY3Q6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgY29ubmVjdCBpbnB1dCBwb3J0cyB0byBwaHlzaWNhbCBwb3J0cyAoJWQ6JXMpIiwKLSAgICAgICAgICAgIHJlcywgZ19zdHJlcnJvciAocmVzKSkpOwotICAgIGZyZWUgKHBvcnRzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggTE9DSyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19yaW5nX2J1ZmZlcl9yZWxlYXNlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEphY2tBdWRpb1NyYyAqc3JjOwotICBHc3RKYWNrUmluZ0J1ZmZlciAqYWJ1ZjsKLSAgZ2ludCByZXM7Ci0KLSAgYWJ1ZiA9IEdTVF9KQUNLX1JJTkdfQlVGRkVSX0NBU1QgKGJ1Zik7Ci0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInJlbGVhc2UiKTsKLQotICBpZiAoKHJlcyA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9zZXRfYWN0aXZlIChzcmMtPmNsaWVudCwgRkFMU0UpKSkgewotICAgIC8qIHdlIG9ubHkgd2FybiwgdGhpcyBtZWFucyB0aGUgc2VydmVyIGlzIHByb2JhYmx5IHNodXQgZG93biBhbmQgdGhlIGNsaWVudAotICAgICAqIGlzIGdvbmUgYW55d2F5LiAqLwotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNyYywgUkVTT1VSQ0UsIENMT1NFLCAoTlVMTCksCi0gICAgICAgICgiQ291bGQgbm90IGRlYWN0aXZhdGUgSmFjayBjbGllbnQgKCVkKSIsIHJlcykpOwotICB9Ci0KLSAgYWJ1Zi0+Y2hhbm5lbHMgPSAtMTsKLSAgYWJ1Zi0+YnVmZmVyX3NpemUgPSAtMTsKLSAgYWJ1Zi0+c2FtcGxlX3JhdGUgPSAtMTsKLQotICAvKiBmcmVlIHRoZSBidWZmZXIgKi8KLSAgZ19mcmVlIChidWYtPm1lbW9yeSk7Ci0gIGJ1Zi0+bWVtb3J5ID0gTlVMTDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfamFja19yaW5nX2J1ZmZlcl9zdGFydCAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLQotICBzcmMgPSBHU1RfSkFDS19BVURJT19TUkMgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdGFydCIpOwotCi0gIGlmIChzcmMtPnRyYW5zcG9ydCAmIEdTVF9KQUNLX1RSQU5TUE9SVF9NQVNURVIpIHsKLSAgICBqYWNrX2NsaWVudF90ICpjbGllbnQ7Ci0KLSAgICBjbGllbnQgPSBnc3RfamFja19hdWRpb19jbGllbnRfZ2V0X2NsaWVudCAoc3JjLT5jbGllbnQpOwotICAgIGphY2tfdHJhbnNwb3J0X3N0YXJ0IChjbGllbnQpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2phY2tfcmluZ19idWZmZXJfcGF1c2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SmFja0F1ZGlvU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX0pBQ0tfQVVESU9fU1JDIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicGF1c2UiKTsKLQotICBpZiAoc3JjLT50cmFuc3BvcnQgJiBHU1RfSkFDS19UUkFOU1BPUlRfTUFTVEVSKSB7Ci0gICAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gICAgY2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldF9jbGllbnQgKHNyYy0+Y2xpZW50KTsKLSAgICBqYWNrX3RyYW5zcG9ydF9zdG9wIChjbGllbnQpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2phY2tfcmluZ19idWZmZXJfc3RvcCAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLQotICBzcmMgPSBHU1RfSkFDS19BVURJT19TUkMgKEdTVF9PQkpFQ1RfUEFSRU5UIChidWYpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdG9wIik7Ci0KLSAgaWYgKHNyYy0+dHJhbnNwb3J0ICYgR1NUX0pBQ0tfVFJBTlNQT1JUX01BU1RFUikgewotICAgIGphY2tfY2xpZW50X3QgKmNsaWVudDsKLQotICAgIGNsaWVudCA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50IChzcmMtPmNsaWVudCk7Ci0gICAgamFja190cmFuc3BvcnRfc3RvcCAoY2xpZW50KTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0jaWYgZGVmaW5lZCAoSEFWRV9KQUNLXzBfMTIwXzEpIHx8IGRlZmluZWQoSEFWRV9KQUNLXzFfOV83KQotc3RhdGljIGd1aW50Ci1nc3RfamFja19yaW5nX2J1ZmZlcl9kZWxheSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLSAgZ3VpbnQgaSwgcmVzID0gMDsKLSAgamFja19sYXRlbmN5X3JhbmdlX3QgcmFuZ2U7Ci0KLSAgc3JjID0gR1NUX0pBQ0tfQVVESU9fU1JDIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHNyYy0+cG9ydF9jb3VudDsgaSsrKSB7Ci0gICAgamFja19wb3J0X2dldF9sYXRlbmN5X3JhbmdlIChzcmMtPnBvcnRzW2ldLCBKYWNrQ2FwdHVyZUxhdGVuY3ksICZyYW5nZSk7Ci0gICAgaWYgKHJhbmdlLm1heCA+IHJlcykKLSAgICAgIHJlcyA9IHJhbmdlLm1heDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImRlbGF5ICV1IiwgcmVzKTsKLQotICByZXR1cm4gcmVzOwotfQotI2Vsc2UgLyogIShkZWZpbmVkIChIQVZFX0pBQ0tfMF8xMjBfMSkgfHwgZGVmaW5lZChIQVZFX0pBQ0tfMV85XzcpKSAqLwotc3RhdGljIGd1aW50Ci1nc3RfamFja19yaW5nX2J1ZmZlcl9kZWxheSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYzsKLSAgZ3VpbnQgaSwgcmVzID0gMDsKLSAgZ3VpbnQgbGF0ZW5jeTsKLSAgamFja19jbGllbnRfdCAqY2xpZW50OwotCi0gIHNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotCi0gIGNsaWVudCA9IGdzdF9qYWNrX2F1ZGlvX2NsaWVudF9nZXRfY2xpZW50IChzcmMtPmNsaWVudCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHNyYy0+cG9ydF9jb3VudDsgaSsrKSB7Ci0gICAgbGF0ZW5jeSA9IGphY2tfcG9ydF9nZXRfdG90YWxfbGF0ZW5jeSAoY2xpZW50LCBzcmMtPnBvcnRzW2ldKTsKLSAgICBpZiAobGF0ZW5jeSA+IHJlcykKLSAgICAgIHJlcyA9IGxhdGVuY3k7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkZWxheSAldSIsIHJlcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZgotCi0vKiBBdWRpb3NyYyBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9QUk9QX0NPTk5FQ1QgCQlHU1RfSkFDS19DT05ORUNUX0FVVE8KLSNkZWZpbmUgREVGQVVMVF9QUk9QX1NFUlZFUiAJCU5VTEwKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0NMSUVOVF9OQU1FCU5VTEwKLSNkZWZpbmUgREVGQVVMVF9QUk9QX1RSQU5TUE9SVAlHU1RfSkFDS19UUkFOU1BPUlRfQVVUT05PTU9VUwotI2RlZmluZSBERUZBVUxUX1BST1BfUE9SVF9QQVRURVJOICAgICAJTlVMTAotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ09OTkVDVCwKLSAgUFJPUF9TRVJWRVIsCi0gIFBST1BfQ0xJRU5ULAotICBQUk9QX0NMSUVOVF9OQU1FLAotICBQUk9QX1BPUlRfUEFUVEVSTiwKLSAgUFJPUF9UUkFOU1BPUlQsCi0gIFBST1BfTEFTVAotfTsKLQotLyogdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzLgotICoKLSAqIGRlc2NyaWJlIHRoZSByZWFsIGZvcm1hdHMgaGVyZS4KLSAqLwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0pBQ0tfRk9STUFUX1NUUiAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSIpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfamFja19hdWRpb19zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0SmFja0F1ZGlvU3JjLCBnc3RfamFja19hdWRpb19zcmMsIEdTVF9UWVBFX0FVRElPX0JBU0VfU1JDKTsKLQotc3RhdGljIHZvaWQgZ3N0X2phY2tfYXVkaW9fc3JjX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X2phY2tfYXVkaW9fc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9qYWNrX2F1ZGlvX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfamFja19hdWRpb19zcmNfZ2V0Y2FwcyAoR3N0QmFzZVNyYyAqIGJzcmMsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgR3N0QXVkaW9SaW5nQnVmZmVyICpnc3RfamFja19hdWRpb19zcmNfY3JlYXRlX3JpbmdidWZmZXIgKEdzdEF1ZGlvQmFzZVNyYwotICAgICogc3JjKTsKLQotLyogR09iamVjdCB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi0vKiBpbml0aWFsaXplIHRoZSBqYWNrX2F1ZGlvX3NyYydzIGNsYXNzICovCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fc3JjX2NsYXNzX2luaXQgKEdzdEphY2tBdWRpb1NyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU3JjQ2xhc3MgKmdzdGJhc2VzcmNfY2xhc3M7Ci0gIEdzdEF1ZGlvQmFzZVNyY0NsYXNzICpnc3RhdWRpb2Jhc2VzcmNfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9qYWNrX2F1ZGlvX3NyY19kZWJ1ZywgImphY2tzcmMiLCAwLAotICAgICAgImphY2tzcmMgZWxlbWVudCIpOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7Ci0gIGdzdGF1ZGlvYmFzZXNyY19jbGFzcyA9IChHc3RBdWRpb0Jhc2VTcmNDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X2phY2tfYXVkaW9fc3JjX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9qYWNrX2F1ZGlvX3NyY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9qYWNrX2F1ZGlvX3NyY19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DT05ORUNULAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJjb25uZWN0IiwgIkNvbm5lY3QiLAotICAgICAgICAgICJTcGVjaWZ5IGhvdyB0aGUgaW5wdXQgcG9ydHMgd2lsbCBiZSBjb25uZWN0ZWQiLAotICAgICAgICAgIEdTVF9UWVBFX0pBQ0tfQ09OTkVDVCwgREVGQVVMVF9QUk9QX0NPTk5FQ1QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TRVJWRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic2VydmVyIiwgIlNlcnZlciIsCi0gICAgICAgICAgIlRoZSBKYWNrIHNlcnZlciB0byBjb25uZWN0IHRvIChOVUxMID0gZGVmYXVsdCkiLAotICAgICAgICAgIERFRkFVTFRfUFJPUF9TRVJWRVIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RKYWNrQXVkaW9TcmM6Y2xpZW50LW5hbWU6Ci0gICAqCi0gICAqIFRoZSBjbGllbnQgbmFtZSB0byB1c2UuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NMSUVOVF9OQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImNsaWVudC1uYW1lIiwgIkNsaWVudCBuYW1lIiwKLSAgICAgICAgICAiVGhlIGNsaWVudCBuYW1lIG9mIHRoZSBKYWNrIGluc3RhbmNlIChOVUxMID0gZGVmYXVsdCkiLAotICAgICAgICAgIERFRkFVTFRfUFJPUF9DTElFTlRfTkFNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NMSUVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNsaWVudCIsICJKYWNrQ2xpZW50IiwgIkhhbmRsZSBmb3IgamFjayBjbGllbnQiLAotICAgICAgICAgIEdTVF9UWVBFX0pBQ0tfQ0xJRU5ULAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZIHwgR19QQVJBTV9SRUFEV1JJVEUgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgIC8qKgotICAgICogR3N0SmFja0F1ZGlvU3JjOnBvcnQtcGF0dGVybgotICAgICoKLSAgICAqIGF1dG9jb25uZWN0IHRvIHBvcnRzIG1hdGNoaW5nIHBhdHRlcm4sIHdoZW4gTlVMTCBjb25uZWN0IHRvIHBoeXNpY2FsIHBvcnRzCi0gICAgKgotICAgICogU2luY2U6IDEuNgotICAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUE9SVF9QQVRURVJOLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInBvcnQtcGF0dGVybiIsICJwb3J0IHBhdHRlcm4iLAotICAgICAgICAgICJBIHBhdHRlcm4gdG8gc2VsZWN0IHdoaWNoIHBvcnRzIHRvIGNvbm5lY3QgdG8gKE5VTEwgPSBmaXJzdCBwaHlzaWNhbCBwb3J0cykiLAotICAgICAgICAgIERFRkFVTFRfUFJPUF9QT1JUX1BBVFRFUk4sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdEphY2tBdWRpb1Npbms6dHJhbnNwb3J0OgotICAgKgotICAgKiBUaGUgamFjayB0cmFuc3BvcnQgYmVoYXZpb3VyIGZvciB0aGUgY2xpZW50LgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UUkFOU1BPUlQsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxhZ3MgKCJ0cmFuc3BvcnQiLCAiVHJhbnNwb3J0IG1vZGUiLAotICAgICAgICAgICJKYWNrIHRyYW5zcG9ydCBiZWhhdmlvdXIgb2YgdGhlIGNsaWVudCIsCi0gICAgICAgICAgR1NUX1RZUEVfSkFDS19UUkFOU1BPUlQsIERFRkFVTFRfUFJPUF9UUkFOU1BPUlQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJBdWRpbyBTb3VyY2UgKEphY2spIiwgIlNvdXJjZS9BdWRpbyIsCi0gICAgICAiQ2FwdHVyZXMgYXVkaW8gZnJvbSBhIEpBQ0sgc2VydmVyIiwKLSAgICAgICJUcmlzdGFuIE1hdHRoZXdzIDx0cmlzdGFuQHNhdC5xYy5jYT4iKTsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5nZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfamFja19hdWRpb19zcmNfZ2V0Y2Fwcyk7Ci0gIGdzdGF1ZGlvYmFzZXNyY19jbGFzcy0+Y3JlYXRlX3JpbmdidWZmZXIgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9qYWNrX2F1ZGlvX3NyY19jcmVhdGVfcmluZ2J1ZmZlcik7Ci0KLSAgLyogcmVmIGNsYXNzIGZyb20gYSB0aHJlYWQtc2FmZSBjb250ZXh0IHRvIHdvcmsgYXJvdW5kIG1pc3NpbmcgYml0IG9mCi0gICAqIHRocmVhZC1zYWZldHkgaW4gR09iamVjdCAqLwotICBnX3R5cGVfY2xhc3NfcmVmIChHU1RfVFlQRV9KQUNLX1JJTkdfQlVGRkVSKTsKLQotICBnc3RfamFja19hdWRpb19jbGllbnRfaW5pdCAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX2F1ZGlvX3NyY19pbml0IChHc3RKYWNrQXVkaW9TcmMgKiBzcmMpCi17Ci0gIC8vZ3N0X2Jhc2Vfc3JjX3NldF9saXZlKEdTVF9CQVNFX1NSQyAoc3JjKSwgVFJVRSk7Ci0gIHNyYy0+Y29ubmVjdCA9IERFRkFVTFRfUFJPUF9DT05ORUNUOwotICBzcmMtPnNlcnZlciA9IGdfc3RyZHVwIChERUZBVUxUX1BST1BfU0VSVkVSKTsKLSAgc3JjLT5qY2xpZW50ID0gTlVMTDsKLSAgc3JjLT5wb3J0cyA9IE5VTEw7Ci0gIHNyYy0+cG9ydF9jb3VudCA9IDA7Ci0gIHNyYy0+YnVmZmVycyA9IE5VTEw7Ci0gIHNyYy0+Y2xpZW50X25hbWUgPSBnX3N0cmR1cCAoREVGQVVMVF9QUk9QX0NMSUVOVF9OQU1FKTsKLSAgc3JjLT50cmFuc3BvcnQgPSBERUZBVUxUX1BST1BfVFJBTlNQT1JUOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2phY2tfYXVkaW9fc3JjX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEphY2tBdWRpb1NyYyAqc3JjID0gR1NUX0pBQ0tfQVVESU9fU1JDIChvYmplY3QpOwotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzcmMtPmNhcHMsIE5VTEwpOwotCi0gIGlmIChzcmMtPmNsaWVudF9uYW1lICE9IE5VTEwpIHsKLSAgICBnX2ZyZWUgKHNyYy0+Y2xpZW50X25hbWUpOwotICAgIHNyYy0+Y2xpZW50X25hbWUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHNyYy0+cG9ydF9wYXR0ZXJuICE9IE5VTEwpIHsKLSAgICBnX2ZyZWUgKHNyYy0+cG9ydF9wYXR0ZXJuKTsKLSAgICBzcmMtPnBvcnRfcGF0dGVybiA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qYWNrX2F1ZGlvX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SmFja0F1ZGlvU3JjICpzcmMgPSBHU1RfSkFDS19BVURJT19TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NMSUVOVF9OQU1FOgotICAgICAgZ19mcmVlIChzcmMtPmNsaWVudF9uYW1lKTsKLSAgICAgIHNyYy0+Y2xpZW50X25hbWUgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1JUX1BBVFRFUk46Ci0gICAgICBnX2ZyZWUgKHNyYy0+cG9ydF9wYXR0ZXJuKTsKLSAgICAgIHNyYy0+cG9ydF9wYXR0ZXJuID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09OTkVDVDoKLSAgICAgIHNyYy0+Y29ubmVjdCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TRVJWRVI6Ci0gICAgICBnX2ZyZWUgKHNyYy0+c2VydmVyKTsKLSAgICAgIHNyYy0+c2VydmVyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xJRU5UOgotICAgICAgaWYgKEdTVF9TVEFURSAoc3JjKSA9PSBHU1RfU1RBVEVfTlVMTCB8fAotICAgICAgICAgIEdTVF9TVEFURSAoc3JjKSA9PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgc3JjLT5qY2xpZW50ID0gZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UUkFOU1BPUlQ6Ci0gICAgICBzcmMtPnRyYW5zcG9ydCA9IGdfdmFsdWVfZ2V0X2ZsYWdzICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfamFja19hdWRpb19zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEphY2tBdWRpb1NyYyAqc3JjID0gR1NUX0pBQ0tfQVVESU9fU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DTElFTlRfTkFNRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+Y2xpZW50X25hbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BPUlRfUEFUVEVSTjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+cG9ydF9wYXR0ZXJuKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ORUNUOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+Y29ubmVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VSVkVSOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3JjLT5zZXJ2ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMSUVOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgc3JjLT5qY2xpZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UUkFOU1BPUlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIHNyYy0+dHJhbnNwb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2phY2tfYXVkaW9fc3JjX2dldGNhcHMgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RKYWNrQXVkaW9TcmMgKnNyYyA9IEdTVF9KQUNLX0FVRElPX1NSQyAoYnNyYyk7Ci0gIGNvbnN0IGNoYXIgKipwb3J0czsKLSAgZ2ludCBtaW4sIG1heDsKLSAgZ2ludCByYXRlOwotICBqYWNrX2NsaWVudF90ICpjbGllbnQ7Ci0KLSAgaWYgKHNyYy0+Y2xpZW50ID09IE5VTEwpCi0gICAgZ290byBub19jbGllbnQ7Ci0KLSAgY2xpZW50ID0gZ3N0X2phY2tfYXVkaW9fY2xpZW50X2dldF9jbGllbnQgKHNyYy0+Y2xpZW50KTsKLQotICBpZiAoc3JjLT5jb25uZWN0ID09IEdTVF9KQUNLX0NPTk5FQ1RfQVVUTykgewotICAgIC8qIGdldCBhIHBvcnQgY291bnQsIHRoaXMgaXMgdGhlIG51bWJlciBvZiBjaGFubmVscyB3ZSBjYW4gYXV0b21hdGljYWxseQotICAgICAqIGNvbm5lY3QuICovCi0gICAgcG9ydHMgPSBqYWNrX2dldF9wb3J0cyAoY2xpZW50LCBOVUxMLCBOVUxMLAotICAgICAgICBKYWNrUG9ydElzUGh5c2ljYWwgfCBKYWNrUG9ydElzT3V0cHV0KTsKLSAgICBtYXggPSAwOwotICAgIGlmIChwb3J0cyAhPSBOVUxMKSB7Ci0gICAgICBmb3IgKDsgcG9ydHNbbWF4XTsgbWF4KyspOwotCi0gICAgICBmcmVlIChwb3J0cyk7Ci0gICAgfSBlbHNlCi0gICAgICBtYXggPSAwOwotICB9IGVsc2UgewotICAgIC8qIHdlIGFsbG93IGFueSBudW1iZXIgb2YgcGFkcywgc29tZXRoaW5nIGVsc2UgaXMgZ29pbmcgdG8gY29ubmVjdCB0aGUKLSAgICAgKiBwYWRzLiAqLwotICAgIG1heCA9IEdfTUFYSU5UOwotICB9Ci0gIG1pbiA9IE1JTiAoMSwgbWF4KTsKLQotICByYXRlID0gamFja19nZXRfc2FtcGxlX3JhdGUgKGNsaWVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290ICVkLSVkIHBvcnRzLCBzYW1wbGVyYXRlOiAlZCIsIG1pbiwgbWF4LCByYXRlKTsKLQotICBpZiAoIXNyYy0+Y2FwcykgewotICAgIHNyYy0+Y2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBHU1RfSkFDS19GT1JNQVRfU1RSLAotICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwKLSAgICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCByYXRlLAotICAgICAgICAiY2hhbm5lbHMiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIG1pbiwgbWF4LCBOVUxMKTsKLSAgfQotICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgInJldHVybmluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBzcmMtPmNhcHMpOwotCi0gIHJldHVybiBnc3RfY2Fwc19yZWYgKHNyYy0+Y2Fwcyk7Ci0KLSAgLyogRVJST1JTICovCi1ub19jbGllbnQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkZXZpY2Ugbm90IG9wZW4sIHVzaW5nIHRlbXBsYXRlIGNhcHMiKTsKLSAgICAvKiBiYXNlIGNsYXNzIHdpbGwgZ2V0IHRlbXBsYXRlIGNhcHMgZm9yIHVzIHdoZW4gd2UgcmV0dXJuIE5VTEwgKi8KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0QXVkaW9SaW5nQnVmZmVyICoKLWdzdF9qYWNrX2F1ZGlvX3NyY19jcmVhdGVfcmluZ2J1ZmZlciAoR3N0QXVkaW9CYXNlU3JjICogc3JjKQotewotICBHc3RBdWRpb1JpbmdCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0pBQ0tfUklOR19CVUZGRVIsIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjcmVhdGVkIHJpbmdidWZmZXIgQCVwIiwgYnVmZmVyKTsKLQotICByZXR1cm4gYnVmZmVyOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2phY2svZ3N0amFja2F1ZGlvc3JjLmggYi9leHQvamFjay9nc3RqYWNrYXVkaW9zcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmZmUzZi4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrYXVkaW9zcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUcmlzdGFuIE1hdHRoZXdzIDx0cmlzdGFuQHNhdC5xYy5jYT4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSAodGhlICJMR1BMIiksIGluCi0gKiB3aGljaCBjYXNlIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9ucyBhcHBseSBpbnN0ZWFkIG9mIHRoZSBvbmVzCi0gKiBtZW50aW9uZWQgYWJvdmU6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9KQUNLX0FVRElPX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfSkFDS19BVURJT19TUkNfSF9fCi0KLSNpbmNsdWRlIDxqYWNrL2phY2suaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9zcmMuaD4KLQotI2luY2x1ZGUgImdzdGphY2thdWRpb2NsaWVudC5oIgotI2luY2x1ZGUgImdzdGphY2suaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDICAgICAgICAgICAgIChnc3RfamFja19hdWRpb19zcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0pBQ0tfQVVESU9fU1JDKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDLEdzdEphY2tBdWRpb1NyYykpCi0jZGVmaW5lIEdTVF9KQUNLX0FVRElPX1NSQ19DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDLEdzdEphY2tBdWRpb1NyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0pBQ0tfQVVESU9fU1JDX0dFVF9DTEFTUyhvYmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLEdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDLEdzdEphY2tBdWRpb1NyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0pBQ0tfQVVESU9fU1JDKG9iaikgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0pBQ0tfQVVESU9fU1JDKSkKLSNkZWZpbmUgR1NUX0lTX0pBQ0tfQVVESU9fU1JDX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSkFDS19BVURJT19TUkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0SmFja0F1ZGlvU3JjIEdzdEphY2tBdWRpb1NyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RKYWNrQXVkaW9TcmNDbGFzcyBHc3RKYWNrQXVkaW9TcmNDbGFzczsKLQotc3RydWN0IF9Hc3RKYWNrQXVkaW9TcmMKLXsKLSAgICBHc3RBdWRpb0Jhc2VTcmMgc3JjOwotCi0gICAgLyo8IHByaXZhdGUgPiovCi0gICAgLyogY2FjaGVkIGNhcHMgKi8KLSAgICBHc3RDYXBzICAgICAgICAgKmNhcHM7Ci0KLSAgICAvKiBwcm9wZXJ0aWVzICovCi0gICAgR3N0SmFja0Nvbm5lY3QgICBjb25uZWN0OwotICAgIGdjaGFyICAgICAgICAgICAqc2VydmVyOwotICAgIGphY2tfY2xpZW50X3QgICAqamNsaWVudDsKLSAgICBnY2hhciAgICAgICAgICAgKmNsaWVudF9uYW1lOwotICAgIGdjaGFyICAgICAgICAgICAqcG9ydF9wYXR0ZXJuOwotICAgIGd1aW50ICAgICAgICAgICAgdHJhbnNwb3J0OwotCi0gICAgLyogb3VyIGNsaWVudCAqLwotICAgIEdzdEphY2tBdWRpb0NsaWVudCAqY2xpZW50OwotCi0gICAgLyogb3VyIHBvcnRzICovCi0gICAgamFja19wb3J0X3QgICAgKipwb3J0czsKLSAgICBpbnQgcG9ydF9jb3VudDsKLSAgICBzYW1wbGVfdCAqKmJ1ZmZlcnM7Ci19OwotCi1zdHJ1Y3QgX0dzdEphY2tBdWRpb1NyY0NsYXNzCi17Ci0gICAgR3N0QXVkaW9CYXNlU3JjQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2phY2tfYXVkaW9fc3JjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0pBQ0tfQVVESU9fU1JDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L2phY2svZ3N0amFja3JpbmdidWZmZXIuaCBiL2V4dC9qYWNrL2dzdGphY2tyaW5nYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZGU0YjguLjAwMDAwMDAKLS0tIGEvZXh0L2phY2svZ3N0amFja3JpbmdidWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xICh0aGUgIkxHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5IGluc3RlYWQgb2YgdGhlIG9uZXMKLSAqIG1lbnRpb25lZCBhYm92ZToKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0pBQ0tfUklOR19CVUZGRVJfSF9fCi0jZGVmaW5lIF9fR1NUX0pBQ0tfUklOR19CVUZGRVJfSF9fCi0KLSNkZWZpbmUgR1NUX1RZUEVfSkFDS19SSU5HX0JVRkZFUiAgICAgICAgICAgICAgIChnc3RfamFja19yaW5nX2J1ZmZlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSkFDS19SSU5HX0JVRkZFUihvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0pBQ0tfUklOR19CVUZGRVIsR3N0SmFja1JpbmdCdWZmZXIpKQotI2RlZmluZSBHU1RfSkFDS19SSU5HX0JVRkZFUl9DTEFTUyhrbGFzcykgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfSkFDS19SSU5HX0JVRkZFUixHc3RKYWNrUmluZ0J1ZmZlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0pBQ0tfUklOR19CVUZGRVJfR0VUX0NMQVNTKG9iaikgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfSkFDS19SSU5HX0JVRkZFUixHc3RKYWNrUmluZ0J1ZmZlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0pBQ0tfUklOR19CVUZGRVJfQ0FTVChvYmopICAgICAgICAgICgoR3N0SmFja1JpbmdCdWZmZXIgKilvYmopCi0jZGVmaW5lIEdTVF9JU19KQUNLX1JJTkdfQlVGRkVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfSkFDS19SSU5HX0JVRkZFUikpCi0jZGVmaW5lIEdTVF9JU19KQUNLX1JJTkdfQlVGRkVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9KQUNLX1JJTkdfQlVGRkVSKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEphY2tSaW5nQnVmZmVyIEdzdEphY2tSaW5nQnVmZmVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEphY2tSaW5nQnVmZmVyQ2xhc3MgR3N0SmFja1JpbmdCdWZmZXJDbGFzczsKLQotc3RydWN0IF9Hc3RKYWNrUmluZ0J1ZmZlcgotewotICBHc3RBdWRpb1JpbmdCdWZmZXIgb2JqZWN0OwotCi0gIGdpbnQgc2FtcGxlX3JhdGU7Ci0gIGdpbnQgYnVmZmVyX3NpemU7Ci0gIGdpbnQgY2hhbm5lbHM7Ci19OwotCi1zdHJ1Y3QgX0dzdEphY2tSaW5nQnVmZmVyQ2xhc3MKLXsKLSAgR3N0QXVkaW9SaW5nQnVmZmVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotc3RhdGljIHZvaWQgZ3N0X2phY2tfcmluZ19idWZmZXJfY2xhc3NfaW5pdChHc3RKYWNrUmluZ0J1ZmZlckNsYXNzICoga2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X2phY2tfcmluZ19idWZmZXJfaW5pdChHc3RKYWNrUmluZ0J1ZmZlciAqIHJpbmdidWZmZXIsCi0gICAgR3N0SmFja1JpbmdCdWZmZXJDbGFzcyAqIGtsYXNzKTsKLQotc3RhdGljIEdzdEF1ZGlvUmluZ0J1ZmZlckNsYXNzICpyaW5nX3BhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfamFja19yaW5nX2J1ZmZlcl9vcGVuX2RldmljZShHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9qYWNrX3JpbmdfYnVmZmVyX2Nsb3NlX2RldmljZShHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9qYWNrX3JpbmdfYnVmZmVyX2FjcXVpcmUoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmLEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfamFja19yaW5nX2J1ZmZlcl9yZWxlYXNlKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2phY2tfcmluZ19idWZmZXJfc3RhcnQoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfamFja19yaW5nX2J1ZmZlcl9wYXVzZShHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9qYWNrX3JpbmdfYnVmZmVyX3N0b3AoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLXN0YXRpYyBndWludCBnc3RfamFja19yaW5nX2J1ZmZlcl9kZWxheShHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpOwotCi0jZW5kaWYgCmRpZmYgLS1naXQgYS9leHQvamFjay9nc3RqYWNrdXRpbC5jIGIvZXh0L2phY2svZ3N0amFja3V0aWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwZTE0YS4uMDAwMDAwMAotLS0gYS9leHQvamFjay9nc3RqYWNrdXRpbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qIEdTdHJlYW1lciBKYWNrIHV0aWxpdHkgZnVuY3Rpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVHJpc3RhbiBNYXR0aGV3cyA8dHJpc3RhbkBzYXQucWMuY2E+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImdzdGphY2t1dGlsLmgiCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLXN0YXRpYyBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBkZWZhdWx0X3Bvc2l0aW9uc1s4XVs4XSA9IHsKLSAgLyogMSBjaGFubmVsICovCi0gIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTU9OTywKLSAgICAgIH0sCi0gIC8qIDIgY2hhbm5lbHMgKi8KLSAgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgIH0sCi0gIC8qIDMgY2hhbm5lbHMgKDIuMSkgKi8KLSAgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMSwgICAgICAgIC8qIG9yIEZST05UX0NFTlRFUiBmb3IgMy4wPyAqLwotICAgICAgfSwKLSAgLyogNCBjaGFubmVscyAoNC4wIG9yIDMuMT8pICovCi0gIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwKLSAgICAgIH0sCi0gIC8qIDUgY2hhbm5lbHMgKi8KLSAgewotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gICAgICB9LAotICAvKiA2IGNoYW5uZWxzICovCi0gIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLAotICAgICAgfSwKLSAgLyogNyBjaGFubmVscyAqLwotICB7Ci0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMSwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9DRU5URVIsCi0gICAgICB9LAotICAvKiA4IGNoYW5uZWxzICovCi0gIHsKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLAotICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX0xFRlQsCi0gICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfUklHSFQsCi0gICAgICB9Ci19OwotCi0KLS8qIGlmIGNoYW5uZWxzIGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOCwgd2Ugc2V0IGEgZGVmYXVsdCBsYXlvdXQsCi0gKiBvdGhlcndpc2Ugc2V0IGxheW91dCB0byBhbiBhcnJheSBvZiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FICovCi12b2lkCi1nc3RfamFja19zZXRfbGF5b3V0IChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWZmZXIsIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBnaW50IGk7Ci0KLSAgaWYgKHNwZWMtPmluZm8uY2hhbm5lbHMgPD0gOCkgewotICAgIGZvciAoaSA9IDA7IGkgPCBzcGVjLT5pbmZvLmNoYW5uZWxzOyBpKyspCi0gICAgICBzcGVjLT5pbmZvLnBvc2l0aW9uW2ldID0gZGVmYXVsdF9wb3NpdGlvbnNbc3BlYy0+aW5mby5jaGFubmVscyAtIDFdW2ldOwotICAgIGdzdF9hdWRpb19jaGFubmVsX3Bvc2l0aW9uc190b192YWxpZF9vcmRlciAoc3BlYy0+aW5mby5wb3NpdGlvbiwKLSAgICAgICAgc3BlYy0+aW5mby5jaGFubmVscyk7Ci0gICAgZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3NldF9jaGFubmVsX3Bvc2l0aW9ucyAoYnVmZmVyLAotICAgICAgICBkZWZhdWx0X3Bvc2l0aW9uc1tzcGVjLT5pbmZvLmNoYW5uZWxzIC0gMV0pOwotICB9IGVsc2UgewotICAgIHNwZWMtPmluZm8uZmxhZ3MgfD0gR1NUX0FVRElPX0ZMQUdfVU5QT1NJVElPTkVEOwotICAgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHNwZWMtPmluZm8ucG9zaXRpb24pOyBpKyspCi0gICAgICBzcGVjLT5pbmZvLnBvc2l0aW9uW2ldID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORTsKLSAgICBnc3RfYXVkaW9fcmluZ19idWZmZXJfc2V0X2NoYW5uZWxfcG9zaXRpb25zIChidWZmZXIsIHNwZWMtPmluZm8ucG9zaXRpb24pOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHNwZWMtPmNhcHMpOwotICBzcGVjLT5jYXBzID0gZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcyAoJnNwZWMtPmluZm8pOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2phY2svZ3N0amFja3V0aWwuaCBiL2V4dC9qYWNrL2dzdGphY2t1dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNGJjYzUuLjAwMDAwMDAKLS0tIGEvZXh0L2phY2svZ3N0amFja3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRyaXN0YW4gTWF0dGhld3MgPHRyaXN0YW5Ac2F0LnFjLmNhPgotICoKLSAqIGdzdGphY2t1dGlsLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfR1NUX0pBQ0tfVVRJTF9IXwotI2RlZmluZSBfR1NUX0pBQ0tfVVRJTF9IXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi12b2lkCi1nc3RfamFja19zZXRfbGF5b3V0IChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWZmZXIsIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKnNwZWMpOwotCi0jZW5kaWYgIC8vIF9HU1RfSkFDS19VVElMX0hfCmRpZmYgLS1naXQgYS9leHQvanBlZy9NYWtlZmlsZS5hbSBiL2V4dC9qcGVnL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzk0ZWZiLi4wMDAwMDAwCi0tLSBhL2V4dC9qcGVnL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0anBlZy5sYQotCi1saWJnc3RqcGVnX2xhX1NPVVJDRVMgPSBcCi0JZ3N0anBlZy5jIFwKLQlnc3RqcGVnZW5jLmMgXAotCWdzdGpwZWdkZWMuYwotIyBkZXByZWN0ZWQgZ3N0c21va2VlbmMuYyBzbW9rZWNvZGVjLmMgZ3N0c21va2VkZWMuYwotCi1saWJnc3RqcGVnX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RqcGVnX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEpQRUdfTElCUykgJChMSUJNKQotbGliZ3N0anBlZ19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RqcGVnX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWdzdGpwZWcuaCBcCi0JZ3N0anBlZ2RlYy5oIGdzdGpwZWdlbmMuaAotIyBkZXByZWNhdGVkIGdzdHNtb2tlZW5jLmggZ3N0c21va2VkZWMuaCBzbW9rZWNvZGVjLmggc21va2Vmb3JtYXQuaApkaWZmIC0tZ2l0IGEvZXh0L2pwZWcvTWFrZWZpbGUuaW4gYi9leHQvanBlZy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhZmQwMy4uMDAwMDAwMAotLS0gYS9leHQvanBlZy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkzOCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBleHQvanBlZwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGpwZWdfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RqcGVnX2xhX09CSkVDVFMgPSBsaWJnc3RqcGVnX2xhLWdzdGpwZWcubG8gXAotCWxpYmdzdGpwZWdfbGEtZ3N0anBlZ2VuYy5sbyBsaWJnc3RqcGVnX2xhLWdzdGpwZWdkZWMubG8KLWxpYmdzdGpwZWdfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0anBlZ19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0anBlZ19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGpwZWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RqcGVnX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGpwZWdfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0anBlZ19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RqcGVnX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAgUkVBRE1FCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RqcGVnLmxhCi1saWJnc3RqcGVnX2xhX1NPVVJDRVMgPSBcCi0JZ3N0anBlZy5jIFwKLQlnc3RqcGVnZW5jLmMgXAotCWdzdGpwZWdkZWMuYwotCi0jIGRlcHJlY3RlZCBnc3RzbW9rZWVuYy5jIHNtb2tlY29kZWMuYyBnc3RzbW9rZWRlYy5jCi1saWJnc3RqcGVnX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RqcGVnX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEpQRUdfTElCUykgJChMSUJNKQotCi1saWJnc3RqcGVnX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGpwZWdfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gXAotCWdzdGpwZWcuaCBcCi0JZ3N0anBlZ2RlYy5oIGdzdGpwZWdlbmMuaAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvanBlZy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvanBlZy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGpwZWcubGE6ICQobGliZ3N0anBlZ19sYV9PQkpFQ1RTKSAkKGxpYmdzdGpwZWdfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGpwZWdfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGpwZWdfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGpwZWdfbGFfT0JKRUNUUykgJChsaWJnc3RqcGVnX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0anBlZ19sYS1nc3RqcGVnLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0anBlZ19sYS1nc3RqcGVnZGVjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0anBlZ19sYS1nc3RqcGVnZW5jLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RqcGVnX2xhLWdzdGpwZWcubG86IGdzdGpwZWcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGpwZWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0anBlZ19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0anBlZ19sYS1nc3RqcGVnLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RqcGVnX2xhLWdzdGpwZWcuVHBvIC1jIC1vIGxpYmdzdGpwZWdfbGEtZ3N0anBlZy5sbyBgdGVzdCAtZiAnZ3N0anBlZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RqcGVnLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGpwZWdfbGEtZ3N0anBlZy5UcG8gJChERVBESVIpL2xpYmdzdGpwZWdfbGEtZ3N0anBlZy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RqcGVnLmMnIG9iamVjdD0nbGliZ3N0anBlZ19sYS1nc3RqcGVnLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0anBlZ19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RqcGVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGpwZWdfbGEtZ3N0anBlZy5sbyBgdGVzdCAtZiAnZ3N0anBlZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RqcGVnLmMKLQotbGliZ3N0anBlZ19sYS1nc3RqcGVnZW5jLmxvOiBnc3RqcGVnZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqcGVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGpwZWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGpwZWdfbGEtZ3N0anBlZ2VuYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0anBlZ19sYS1nc3RqcGVnZW5jLlRwbyAtYyAtbyBsaWJnc3RqcGVnX2xhLWdzdGpwZWdlbmMubG8gYHRlc3QgLWYgJ2dzdGpwZWdlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0anBlZ2VuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RqcGVnX2xhLWdzdGpwZWdlbmMuVHBvICQoREVQRElSKS9saWJnc3RqcGVnX2xhLWdzdGpwZWdlbmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0anBlZ2VuYy5jJyBvYmplY3Q9J2xpYmdzdGpwZWdfbGEtZ3N0anBlZ2VuYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGpwZWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0anBlZ19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RqcGVnX2xhLWdzdGpwZWdlbmMubG8gYHRlc3QgLWYgJ2dzdGpwZWdlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0anBlZ2VuYy5jCi0KLWxpYmdzdGpwZWdfbGEtZ3N0anBlZ2RlYy5sbzogZ3N0anBlZ2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0anBlZ19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RqcGVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RqcGVnX2xhLWdzdGpwZWdkZWMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGpwZWdfbGEtZ3N0anBlZ2RlYy5UcG8gLWMgLW8gbGliZ3N0anBlZ19sYS1nc3RqcGVnZGVjLmxvIGB0ZXN0IC1mICdnc3RqcGVnZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGpwZWdkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0anBlZ19sYS1nc3RqcGVnZGVjLlRwbyAkKERFUERJUikvbGliZ3N0anBlZ19sYS1nc3RqcGVnZGVjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGpwZWdkZWMuYycgb2JqZWN0PSdsaWJnc3RqcGVnX2xhLWdzdGpwZWdkZWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RqcGVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGpwZWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0anBlZ19sYS1nc3RqcGVnZGVjLmxvIGB0ZXN0IC1mICdnc3RqcGVnZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGpwZWdkZWMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotIyBkZXByZWNhdGVkIGdzdHNtb2tlZW5jLmggZ3N0c21va2VkZWMuaCBzbW9rZWNvZGVjLmggc21va2Vmb3JtYXQuaAotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9leHQvanBlZy9SRUFETUUgYi9leHQvanBlZy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYTFkMGMuLjAwMDAwMDAKLS0tIGEvZXh0L2pwZWcvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotVGhlIFNtb2tlIENvZGVjCi0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBJIHdhcyB0b3lpbmcgd2l0aCB3aGVuIGRvaW5nIGEKLUphdmEgYmFzZWQgcGxheWVyLiBEZWNvZGluZyBhIEpQRUcgaW4gSmF2YSBoYXMgYWNjZXB0YWJsZSBzcGVlZCBzbyB0aGlzIGNvZGVjCi10cmllcyB0byBleHBsb2l0IHRoYXQgZmVhdHVyZS4gVGhlIGFsZ29yaXRobSBmaXJzdCBjb21wYXJlcyB0aGUgbGFzdCBhbmQgdGhlIAotbmV3IGltYWdlIGFuZCBmaW5kcyBhbGwgMTZ4MTYgYmxvY2tzIHRoYXQgaGF2ZSBhIHNxdWFyZWQgZGlmZmVyZW5jZSBiaWdnZXIgdGhhbgotYSBjb25maWd1cmFibGUgdGhyZXNob2xkLiBUaGVuIGFsbCB0aGVzZSBibG9ja3MgYXJlIGNvbXByZXNzZWQgaW50byBhbiBOeE0gSlBFRy4KLVRoZSBxdWFsaXR5IG9mIHRoZSBKUEVHIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBibG9ja3MsIHRoaXMKLXdheSwgdGhlIHBpY3R1cmUgcXVhbGl0eSBkZWdyYWRlcyB3aXRoIGhlYXZ5IG1vdGlvbiBzY2VuZXMgYnV0IHRoZSBiaXRyYXRlIHN0YXlzCi1tb3JlIG9yIGxlc3MgY29uc3RhbnQuCi1EZWNvZGluZyBkZWNvbXByZXNzZXMgdGhlIEpQRUcgYW5kIHRoZW4gdXBkYXRlcyB0aGUgb2xkIHBpY3R1cmUgd2l0aCB0aGUgbmV3Ci1ibG9ja3MuCi0KLQotVE9ETzoKLS0tLS0KLS0gbWFrZSBmb3JtYXQgZXh0ZW5zaWJsZQotLSBtb3Rpb24gdmVjdG9ycwotLSBkbyBzb21lIHJlYWwgYml0cmF0ZSBjb250cm9sCmRpZmYgLS1naXQgYS9leHQvanBlZy9nc3RqcGVnLmMgYi9leHQvanBlZy9nc3RqcGVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllY2RkNWQuLjAwMDAwMDAKLS0tIGEvZXh0L2pwZWcvZ3N0anBlZy5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdGpwZWcuaCIKLSNpbmNsdWRlICJnc3RqcGVnZGVjLmgiCi0jaW5jbHVkZSAiZ3N0anBlZ2VuYy5oIgotI2lmIDAKLSNpbmNsdWRlICJnc3RzbW9rZWVuYy5oIgotI2luY2x1ZGUgImdzdHNtb2tlZGVjLmgiCi0jZW5kaWYKLQotR1R5cGUKLWdzdF9pZGN0X21ldGhvZF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGlkY3RfbWV0aG9kX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBpZGN0X21ldGhvZFtdID0gewotICAgIHtKRENUX0lTTE9XLCAiU2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0iLCAiaXNsb3cifSwKLSAgICB7SkRDVF9JRkFTVCwgIkZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZCIsICJpZmFzdCJ9LAotICAgIHtKRENUX0ZMT0FULCAiRmxvYXRpbmctcG9pbnQ6IGFjY3VyYXRlLCBmYXN0IG9uIGZhc3QgSFciLCAiZmxvYXQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFpZGN0X21ldGhvZF90eXBlKSB7Ci0gICAgaWRjdF9tZXRob2RfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RJRENUTWV0aG9kIiwgaWRjdF9tZXRob2QpOwotICB9Ci0gIHJldHVybiBpZGN0X21ldGhvZF90eXBlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAianBlZ2VuYyIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgR1NUX1RZUEVfSlBFR0VOQykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImpwZWdkZWMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0pQRUdfREVDKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSNpZiAwCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInNtb2tlZW5jIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9TTU9LRUVOQykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInNtb2tlZGVjIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9TTU9LRURFQykpCi0gICAgcmV0dXJuIEZBTFNFOwotI2VuZGlmCi0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBqcGVnLAotICAgICJKUGVnIHBsdWdpbiBsaWJyYXJ5IiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvanBlZy9nc3RqcGVnLmggYi9leHQvanBlZy9nc3RqcGVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTMwYTIuLjAwMDAwMDAKLS0tIGEvZXh0L2pwZWcvZ3N0anBlZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9KUEVHX0hfXwotI2RlZmluZSBfX0dTVF9KUEVHX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0KLSNkZWZpbmUgR1NUX1RZUEVfSURDVF9NRVRIT0QgKGdzdF9pZGN0X21ldGhvZF9nZXRfdHlwZSgpKQotR1R5cGUgZ3N0X2lkY3RfbWV0aG9kX2dldF90eXBlICh2b2lkKTsKLQotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSlBFR19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9qcGVnL2dzdGpwZWdkZWMuYyBiL2V4dC9qcGVnL2dzdGpwZWdkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4NmM2NC4uMDAwMDAwMAotLS0gYS9leHQvanBlZy9nc3RqcGVnZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCUF1dGhvciA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWpwZWdkZWMKLSAqCi0gKiBEZWNvZGVzIGpwZWcgaW1hZ2VzLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBmaWxlc3JjIGxvY2F0aW9uPW1qcGVnLmF2aSAhIGF2aWRlbXV4ICEgIHF1ZXVlICEganBlZ2RlYyAhIHZpZGVvY29udmVydCAhIHZpZGVvc2NhbGUgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGUgYWJvdmUgcGlwZWxpbmUgZGVjb2RlIHRoZSBtanBlZyBzdHJlYW0gYW5kIHJlbmRlcnMgaXQgdG8gdGhlIHNjcmVlbi4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0anBlZ2RlYy5oIgotI2luY2x1ZGUgImdzdGpwZWcuaCIKLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLSNpbmNsdWRlIDxqZXJyb3IuaD4KLQotI2RlZmluZSBNSU5fV0lEVEggIDEKLSNkZWZpbmUgTUFYX1dJRFRIICA2NTUzNQotI2RlZmluZSBNSU5fSEVJR0hUIDEKLSNkZWZpbmUgTUFYX0hFSUdIVCA2NTUzNQotCi0jZGVmaW5lIENJTkZPX0dFVF9KUEVHREVDKGNpbmZvX3B0cikgXAotICAgICAgICAoKChzdHJ1Y3QgR3N0SnBlZ0RlY1NvdXJjZU1nciopKChjaW5mb19wdHIpLT5zcmMpKS0+ZGVjKQotCi0jZGVmaW5lIEpQRUdfREVGQVVMVF9JRENUX01FVEhPRAlKRENUX0ZBU1RFU1QKLSNkZWZpbmUgSlBFR19ERUZBVUxUX01BWF9FUlJPUlMgCTAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfSURDVF9NRVRIT0QsCi0gIFBST1BfTUFYX0VSUk9SUwotfTsKLQotLyogKklOREVOVC1PRkYqICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2pwZWdfZGVjX3NyY19wYWRfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRQotICAgICAgICAoInsgSTQyMCwgUkdCLCBCR1IsIFJHQngsIHhSR0IsIEJHUngsIHhCR1IsIEdSQVk4IH0iKSkKLSAgICApOwotLyogKklOREVOVC1PTiogKi8KLQotLyogRklYTUU6IHNvZi1tYXJrZXIgaXMgZm9yIElKRyBsaWJqcGVnIDgsIHNob3VsZCBiZSBkaWZmZXJlbnQgZm9yIDYuMiAqLwotLyogRklYTUU6IGFkZCBiYWNrICJzb2YtbWFya2VyID0gKGludCkgeyAwLCAxLCAyLCA1LCA2LCA3LCA5LCAxMCwgMTMsIDE0IH0iCi0gKiBvbmNlIHdlIGhhdmUgYSBwYXJzZXIgYW5kL29yIGRlbXV4ZXIgc2V0IGNhcHMgcHJvcGVybHkgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfanBlZ19kZWNfc2lua19wYWRfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiaW1hZ2UvanBlZyIpCi0gICAgKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoanBlZ19kZWNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQganBlZ19kZWNfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfUEVSRk9STUFOQ0UpOwotCi1zdGF0aWMgdm9pZCBnc3RfanBlZ19kZWNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2pwZWdfZGVjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9qcGVnX2RlY19zZXRfZm9ybWF0IChHc3RWaWRlb0RlY29kZXIgKiBkZWMsCi0gICAgR3N0VmlkZW9Db2RlY1N0YXRlICogc3RhdGUpOwotc3RhdGljIGdib29sZWFuIGdzdF9qcGVnX2RlY19zdGFydCAoR3N0VmlkZW9EZWNvZGVyICogYmRlYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2pwZWdfZGVjX3N0b3AgKEdzdFZpZGVvRGVjb2RlciAqIGJkZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9qcGVnX2RlY19mbHVzaCAoR3N0VmlkZW9EZWNvZGVyICogYmRlYyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfanBlZ19kZWNfcGFyc2UgKEdzdFZpZGVvRGVjb2RlciAqIGJkZWMsCi0gICAgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUsIEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnYm9vbGVhbiBhdF9lb3MpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2pwZWdfZGVjX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9EZWNvZGVyICogYmRlYywKLSAgICBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2pwZWdfZGVjX2RlY2lkZV9hbGxvY2F0aW9uIChHc3RWaWRlb0RlY29kZXIgKiBiZGVjLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIGdib29sZWFuIGdzdF9qcGVnX2RlY19zaW5rX2V2ZW50IChHc3RWaWRlb0RlY29kZXIgKiBiZGVjLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi0jZGVmaW5lIGdzdF9qcGVnX2RlY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RKcGVnRGVjLCBnc3RfanBlZ19kZWMsIEdTVF9UWVBFX1ZJREVPX0RFQ09ERVIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdfZGVjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RKcGVnRGVjICpkZWMgPSBHU1RfSlBFR19ERUMgKG9iamVjdCk7Ci0KLSAganBlZ19kZXN0cm95X2RlY29tcHJlc3MgKCZkZWMtPmNpbmZvKTsKLSAgaWYgKGRlYy0+aW5wdXRfc3RhdGUpCi0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChkZWMtPmlucHV0X3N0YXRlKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ19kZWNfY2xhc3NfaW5pdCAoR3N0SnBlZ0RlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RWaWRlb0RlY29kZXJDbGFzcyAqdmRlY19jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIHZkZWNfY2xhc3MgPSAoR3N0VmlkZW9EZWNvZGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfanBlZ19kZWNfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9qcGVnX2RlY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9qcGVnX2RlY19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JRENUX01FVEhPRCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiaWRjdC1tZXRob2QiLCAiSURDVCBNZXRob2QiLAotICAgICAgICAgICJUaGUgSURDVCBhbGdvcml0aG0gdG8gdXNlIiwgR1NUX1RZUEVfSURDVF9NRVRIT0QsCi0gICAgICAgICAgSlBFR19ERUZBVUxUX0lEQ1RfTUVUSE9ELAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RKcGVnRGVjOm1heC1lcnJvcnM6Ci0gICAqCi0gICAqIEVycm9yIG91dCBhZnRlciByZWNlaXZpbmcgTiBjb25zZWN1dGl2ZSBkZWNvZGluZyBlcnJvcnMKLSAgICogKC0xID0gbmV2ZXIgZXJyb3Igb3V0LCAwID0gYXV0b21hdGljLCAxID0gZmFpbCBvbiBmaXJzdCBlcnJvciwgZXRjLikKLSAgICoKLSAgICogRGVwcmVjYXRlZDogMS4zLjE6IFByb3BlcnR5IHdhc24ndCB1c2VkIGludGVybmFsbHkKLSAgICovCi0jaWZuZGVmIEdTVF9SRU1PVkVfREVQUkVDQVRFRAotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9FUlJPUlMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibWF4LWVycm9ycyIsICJNYXhpbXVtIENvbnNlY3V0aXZlIERlY29kaW5nIEVycm9ycyIsCi0gICAgICAgICAgIihEZXByZWNhdGVkKSBFcnJvciBvdXQgYWZ0ZXIgcmVjZWl2aW5nIE4gY29uc2VjdXRpdmUgZGVjb2RpbmcgZXJyb3JzIgotICAgICAgICAgICIgKC0xID0gbmV2ZXIgZmFpbCwgMCA9IGF1dG9tYXRpYywgMSA9IGZhaWwgb24gZmlyc3QgZXJyb3IpIiwKLSAgICAgICAgICAtMSwgR19NQVhJTlQsIEpQRUdfREVGQVVMVF9NQVhfRVJST1JTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fREVQUkVDQVRFRCkpOwotI2VuZGlmCi0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2pwZWdfZGVjX3NyY19wYWRfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfanBlZ19kZWNfc2lua19wYWRfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiSlBFRyBpbWFnZSBkZWNvZGVyIiwKLSAgICAgICJDb2RlYy9EZWNvZGVyL0ltYWdlIiwgIkRlY29kZSBpbWFnZXMgZnJvbSBKUEVHIGZvcm1hdCIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLQotICB2ZGVjX2NsYXNzLT5zdGFydCA9IGdzdF9qcGVnX2RlY19zdGFydDsKLSAgdmRlY19jbGFzcy0+c3RvcCA9IGdzdF9qcGVnX2RlY19zdG9wOwotICB2ZGVjX2NsYXNzLT5mbHVzaCA9IGdzdF9qcGVnX2RlY19mbHVzaDsKLSAgdmRlY19jbGFzcy0+cGFyc2UgPSBnc3RfanBlZ19kZWNfcGFyc2U7Ci0gIHZkZWNfY2xhc3MtPnNldF9mb3JtYXQgPSBnc3RfanBlZ19kZWNfc2V0X2Zvcm1hdDsKLSAgdmRlY19jbGFzcy0+aGFuZGxlX2ZyYW1lID0gZ3N0X2pwZWdfZGVjX2hhbmRsZV9mcmFtZTsKLSAgdmRlY19jbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24gPSBnc3RfanBlZ19kZWNfZGVjaWRlX2FsbG9jYXRpb247Ci0gIHZkZWNfY2xhc3MtPnNpbmtfZXZlbnQgPSBnc3RfanBlZ19kZWNfc2lua19ldmVudDsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoanBlZ19kZWNfZGVidWcsICJqcGVnZGVjIiwgMCwgIkpQRUcgZGVjb2RlciIpOwotICBHU1RfREVCVUdfQ0FURUdPUllfR0VUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCAiR1NUX1BFUkZPUk1BTkNFIik7Ci19Ci0KLXN0YXRpYyBib29sZWFuCi1nc3RfanBlZ19kZWNfZmlsbF9pbnB1dF9idWZmZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCi17Ci0gIC8qIFdlIHBhc3MgaW4gZnVsbCBmcmFtZSBpbml0aWFsbHksIGlmIHRoaXMgZ2V0IGNhbGxlZCwgdGhlIGZyYW1lIGlzIG1vc3QgbGlrZWx5Ci0gICAqIGNvcnJ1cHRlZCAqLwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ19kZWNfaW5pdF9zb3VyY2UgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCi17Ci0gIEdTVF9MT0dfT0JKRUNUIChDSU5GT19HRVRfSlBFR0RFQyAoY2luZm8pLCAiaW5pdF9zb3VyY2UiKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdfZGVjX3NraXBfaW5wdXRfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgZ2xvbmcgbnVtX2J5dGVzKQotewotICBHc3RKcGVnRGVjICpkZWMgPSBDSU5GT19HRVRfSlBFR0RFQyAoY2luZm8pOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgInNraXAgJWxkIGJ5dGVzIiwgbnVtX2J5dGVzKTsKLQotICBpZiAobnVtX2J5dGVzID4gMCAmJiBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgPj0gbnVtX2J5dGVzKSB7Ci0gICAgY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlICs9IChzaXplX3QpIG51bV9ieXRlczsKLSAgICBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgLT0gKHNpemVfdCkgbnVtX2J5dGVzOwotICB9Ci19Ci0KLXN0YXRpYyBib29sZWFuCi1nc3RfanBlZ19kZWNfcmVzeW5jX3RvX3Jlc3RhcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGdpbnQgZGVzaXJlZCkKLXsKLSAgR1NUX0xPR19PQkpFQ1QgKENJTkZPX0dFVF9KUEVHREVDIChjaW5mbyksICJyZXN5bmNfdG9fc3RhcnQiKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ19kZWNfdGVybV9zb3VyY2UgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCi17Ci0gIEdTVF9MT0dfT0JKRUNUIChDSU5GT19HRVRfSlBFR0RFQyAoY2luZm8pLCAidGVybV9zb3VyY2UiKTsKLSAgcmV0dXJuOwotfQotCi1NRVRIT0RERUYgKHZvaWQpCi0gICAgZ3N0X2pwZWdfZGVjX215X291dHB1dF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8pCi17Ci0gIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KLX0KLQotTUVUSE9EREVGICh2b2lkKQotICAgIGdzdF9qcGVnX2RlY19teV9lbWl0X21lc3NhZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IG1zZ19sZXZlbCkKLXsKLSAgLyogR1NUX0xPR19PQkpFQ1QgKENJTkZPX0dFVF9KUEVHREVDICgmY2luZm8pLCAibXNnX2xldmVsPSVkIiwgbXNnX2xldmVsKTsgKi8KLSAgcmV0dXJuOwotfQotCi1NRVRIT0RERUYgKHZvaWQpCi0gICAgZ3N0X2pwZWdfZGVjX215X2Vycm9yX2V4aXQgKGpfY29tbW9uX3B0ciBjaW5mbykKLXsKLSAgc3RydWN0IEdzdEpwZWdEZWNFcnJvck1nciAqZXJyX21nciA9IChzdHJ1Y3QgR3N0SnBlZ0RlY0Vycm9yTWdyICopIGNpbmZvLT5lcnI7Ci0KLSAgKCpjaW5mby0+ZXJyLT5vdXRwdXRfbWVzc2FnZSkgKGNpbmZvKTsKLSAgbG9uZ2ptcCAoZXJyX21nci0+c2V0am1wX2J1ZmZlciwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ19kZWNfaW5pdCAoR3N0SnBlZ0RlYyAqIGRlYykKLXsKLSAgR1NUX0RFQlVHICgiaW5pdGlhbGl6aW5nIik7Ci0KLSAgLyogc2V0dXAganBlZ2xpYiAqLwotICBtZW1zZXQgKCZkZWMtPmNpbmZvLCAwLCBzaXplb2YgKGRlYy0+Y2luZm8pKTsKLSAgbWVtc2V0ICgmZGVjLT5qZXJyLCAwLCBzaXplb2YgKGRlYy0+amVycikpOwotICBkZWMtPmNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yICgmZGVjLT5qZXJyLnB1Yik7Ci0gIGRlYy0+amVyci5wdWIub3V0cHV0X21lc3NhZ2UgPSBnc3RfanBlZ19kZWNfbXlfb3V0cHV0X21lc3NhZ2U7Ci0gIGRlYy0+amVyci5wdWIuZW1pdF9tZXNzYWdlID0gZ3N0X2pwZWdfZGVjX215X2VtaXRfbWVzc2FnZTsKLSAgZGVjLT5qZXJyLnB1Yi5lcnJvcl9leGl0ID0gZ3N0X2pwZWdfZGVjX215X2Vycm9yX2V4aXQ7Ci0KLSAganBlZ19jcmVhdGVfZGVjb21wcmVzcyAoJmRlYy0+Y2luZm8pOwotCi0gIGRlYy0+Y2luZm8uc3JjID0gKHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKikgJmRlYy0+anNyYzsKLSAgZGVjLT5jaW5mby5zcmMtPmluaXRfc291cmNlID0gZ3N0X2pwZWdfZGVjX2luaXRfc291cmNlOwotICBkZWMtPmNpbmZvLnNyYy0+ZmlsbF9pbnB1dF9idWZmZXIgPSBnc3RfanBlZ19kZWNfZmlsbF9pbnB1dF9idWZmZXI7Ci0gIGRlYy0+Y2luZm8uc3JjLT5za2lwX2lucHV0X2RhdGEgPSBnc3RfanBlZ19kZWNfc2tpcF9pbnB1dF9kYXRhOwotICBkZWMtPmNpbmZvLnNyYy0+cmVzeW5jX3RvX3Jlc3RhcnQgPSBnc3RfanBlZ19kZWNfcmVzeW5jX3RvX3Jlc3RhcnQ7Ci0gIGRlYy0+Y2luZm8uc3JjLT50ZXJtX3NvdXJjZSA9IGdzdF9qcGVnX2RlY190ZXJtX3NvdXJjZTsKLSAgZGVjLT5qc3JjLmRlYyA9IGRlYzsKLQotICAvKiBpbml0IHByb3BlcnRpZXMgKi8KLSAgZGVjLT5pZGN0X21ldGhvZCA9IEpQRUdfREVGQVVMVF9JRENUX01FVEhPRDsKLSAgZGVjLT5tYXhfZXJyb3JzID0gSlBFR19ERUZBVUxUX01BWF9FUlJPUlM7Ci0KLSAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X3VzZV9kZWZhdWx0X3BhZF9hY2NlcHRjYXBzIChHU1RfVklERU9fREVDT0RFUl9DQVNUCi0gICAgICAoZGVjKSwgVFJVRSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX1ZJREVPX0RFQ09ERVJfU0lOS19QQUQgKGRlYykpOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfanBlZ19kZWNfcGFyc2VfdGFnX2hhc19lbnRyb3B5X3NlZ21lbnQgKGd1aW50OCB0YWcpCi17Ci0gIGlmICh0YWcgPT0gMHhkYSB8fCAodGFnID49IDB4ZDAgJiYgdGFnIDw9IDB4ZDcpKQotICAgIHJldHVybiBUUlVFOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfanBlZ19kZWNfcGFyc2UgKEdzdFZpZGVvRGVjb2RlciAqIGJkZWMsIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lLAotICAgIEdzdEFkYXB0ZXIgKiBhZGFwdGVyLCBnYm9vbGVhbiBhdF9lb3MpCi17Ci0gIGd1aW50IHNpemU7Ci0gIGdpbnQgdG9hZGQgPSAwOwotICBnYm9vbGVhbiByZXN5bmM7Ci0gIGdpbnQgb2Zmc2V0ID0gMCwgbm9mZnNldDsKLSAgR3N0SnBlZ0RlYyAqZGVjID0gKEdzdEpwZWdEZWMgKikgYmRlYzsKLQotICBHU1RfVklERU9fQ09ERUNfRlJBTUVfU0VUX1NZTkNfUE9JTlQgKGZyYW1lKTsKLQotICAvKiBGSVhNRSA6IFRoZSBvdmVyaGVhZCBvZiB1c2luZyBzY2FuX3VpbnQzMiBpcyBtYXNzaXZlICovCi0KLSAgc2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIEdTVF9ERUJVRyAoIlBhcnNpbmcganBlZyBpbWFnZSBkYXRhICgldSBieXRlcykiLCBzaXplKTsKLQotICBpZiAoYXRfZW9zKSB7Ci0gICAgR1NUX0RFQlVHICgiRmx1c2hpbmcgYWxsIGRhdGEgb3V0Iik7Ci0gICAgdG9hZGQgPSBzaXplOwotCi0gICAgLyogSWYgd2UgaGF2ZSBsZWZ0b3ZlciBkYXRhLCB0aHJvdyBpdCBhd2F5ICovCi0gICAgaWYgKCFkZWMtPnNhd19oZWFkZXIpCi0gICAgICBnb3RvIGRyb3BfZnJhbWU7Ci0gICAgZ290byBoYXZlX2Z1bGxfZnJhbWU7Ci0gIH0KLQotICBpZiAoc2l6ZSA8IDgpCi0gICAgZ290byBuZWVkX21vcmVfZGF0YTsKLQotICBpZiAoIWRlYy0+c2F3X2hlYWRlcikgewotICAgIGdpbnQgcmV0OwotICAgIC8qIHdlIGV4cGVjdCBhdCBsZWFzdCA0IGJ5dGVzLCBmaXJzdCBvZiB3aGljaCBzdGFydCBtYXJrZXIgKi8KLSAgICByZXQgPQotICAgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKGFkYXB0ZXIsIDB4ZmZmZjAwMDAsIDB4ZmZkODAwMDAsIDAsCi0gICAgICAgIHNpemUgLSA0KTsKLQotICAgIEdTVF9ERUJVRyAoInJldDolZCIsIHJldCk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotCi0gICAgaWYgKHJldCkgewotICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIHJldCk7Ci0gICAgICBzaXplIC09IHJldDsKLSAgICB9Ci0gICAgZGVjLT5zYXdfaGVhZGVyID0gVFJVRTsKLSAgfQotCi0gIHdoaWxlICgxKSB7Ci0gICAgZ3VpbnQgZnJhbWVfbGVuOwotICAgIGd1aW50MzIgdmFsdWU7Ci0KLSAgICBHU1RfREVCVUcgKCJvZmZzZXQ6JWQsIHNpemU6JWQiLCBvZmZzZXQsIHNpemUpOwotCi0gICAgbm9mZnNldCA9Ci0gICAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChhZGFwdGVyLCAweDAwMDBmZjAwLCAweDAwMDBmZjAwLAotICAgICAgICBvZmZzZXQsIHNpemUgLSBvZmZzZXQsICZ2YWx1ZSk7Ci0KLSAgICAvKiBsb3N0IHN5bmMgaWYgMHhmZiBtYXJrZXIgbm90IHdoZXJlIGV4cGVjdGVkICovCi0gICAgaWYgKChyZXN5bmMgPSAobm9mZnNldCAhPSBvZmZzZXQpKSkgewotICAgICAgR1NUX0RFQlVHICgiTG9zdCBzeW5jIGF0IDB4JTA4eCwgcmVzeW5jaW5nIiwgb2Zmc2V0ICsgMik7Ci0gICAgfQotICAgIC8qIG1heSBoYXZlIG1hcmtlciwgYnV0IGNvdWxkIGhhdmUgYmVlbiByZXN5bmNuZyAqLwotICAgIHJlc3luYyA9IHJlc3luYyB8fCBkZWMtPnBhcnNlX3Jlc3luYzsKLSAgICAvKiBTa2lwIG92ZXIgZXh0cmEgMHhmZiAqLwotICAgIHdoaWxlICgobm9mZnNldCA+PSAwKSAmJiAoKHZhbHVlICYgMHhmZikgPT0gMHhmZikpIHsKLSAgICAgIG5vZmZzZXQrKzsKLSAgICAgIG5vZmZzZXQgPQotICAgICAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChhZGFwdGVyLCAweDAwMDBmZjAwLCAweDAwMDBmZjAwLAotICAgICAgICAgIG5vZmZzZXQsIHNpemUgLSBub2Zmc2V0LCAmdmFsdWUpOwotICAgIH0KLSAgICAvKiBlbm91Z2ggYnl0ZXMgbGVmdCBmb3IgbWFya2VyPyAod2UgbmVlZCAweE5OIGFmdGVyIHRoZSAweGZmKSAqLwotICAgIGlmIChub2Zmc2V0IDwgMCkgewotICAgICAgR1NUX0RFQlVHICgiYXQgZW5kIG9mIGlucHV0IGFuZCBubyBFT0kgbWFya2VyIGZvdW5kLCBuZWVkIG1vcmUgZGF0YSIpOwotICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICB9Ci0KLSAgICAvKiBub3cgbG9jayBvbiB0aGUgbWFya2VyIHdlIGZvdW5kICovCi0gICAgb2Zmc2V0ID0gbm9mZnNldDsKLSAgICB2YWx1ZSA9IHZhbHVlICYgMHhmZjsKLSAgICBpZiAodmFsdWUgPT0gMHhkOSkgewotICAgICAgR1NUX0RFQlVHICgiMHglMDh4OiBFT0kgbWFya2VyIiwgb2Zmc2V0ICsgMik7Ci0gICAgICAvKiBjbGVhciBwYXJzZSBzdGF0ZSAqLwotICAgICAgZGVjLT5zYXdfaGVhZGVyID0gRkFMU0U7Ci0gICAgICBkZWMtPnBhcnNlX3Jlc3luYyA9IEZBTFNFOwotICAgICAgdG9hZGQgPSBvZmZzZXQgKyA0OwotICAgICAgZ290byBoYXZlX2Z1bGxfZnJhbWU7Ci0gICAgfQotICAgIGlmICh2YWx1ZSA9PSAweGQ4KSB7Ci0gICAgICAvKiBTa2lwIHRoaXMgZnJhbWUgaWYgd2UgZm91bmQgYW5vdGhlciBTT0kgbWFya2VyICovCi0gICAgICBHU1RfREVCVUcgKCIweCUwOHg6IFNPSSBtYXJrZXIgYmVmb3JlIEVPSSwgc2tpcHBpbmciLCBvZmZzZXQgKyAyKTsKLSAgICAgIGRlYy0+cGFyc2VfcmVzeW5jID0gRkFMU0U7Ci0gICAgICBzaXplID0gb2Zmc2V0ICsgMjsKLSAgICAgIGdvdG8gZHJvcF9mcmFtZTsKLSAgICB9Ci0KLQotICAgIGlmICh2YWx1ZSA+PSAweGQwICYmIHZhbHVlIDw9IDB4ZDcpCi0gICAgICBmcmFtZV9sZW4gPSAwOwotICAgIGVsc2UgewotICAgICAgLyogcGVlayB0YWcgYW5kIHN1YnNlcXVlbnQgbGVuZ3RoICovCi0gICAgICBpZiAob2Zmc2V0ICsgMiArIDQgPiBzaXplKQotICAgICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotICAgICAgZWxzZQotICAgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzJfcGVlayAoYWRhcHRlciwgMHgwLCAweDAsIG9mZnNldCArIDIsIDQsCi0gICAgICAgICAgICAmZnJhbWVfbGVuKTsKLSAgICAgIGZyYW1lX2xlbiA9IGZyYW1lX2xlbiAmIDB4ZmZmZjsKLSAgICB9Ci0gICAgR1NUX0RFQlVHICgiMHglMDh4OiB0YWcgJTAyeCwgZnJhbWVfbGVuPSV1Iiwgb2Zmc2V0ICsgMiwgdmFsdWUsIGZyYW1lX2xlbik7Ci0gICAgLyogdGhlIGZyYW1lIGxlbmd0aCBpbmNsdWRlcyB0aGUgMiBieXRlcyBmb3IgdGhlIGxlbmd0aDsgaGVyZSB3ZSB3YW50IGF0Ci0gICAgICogbGVhc3QgMiBtb3JlIGJ5dGVzIGF0IHRoZSBlbmQgZm9yIGFuIGVuZCBtYXJrZXIgKi8KLSAgICBpZiAob2Zmc2V0ICsgMiArIDIgKyBmcmFtZV9sZW4gKyAyID4gc2l6ZSkgewotICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoZ3N0X2pwZWdfZGVjX3BhcnNlX3RhZ19oYXNfZW50cm9weV9zZWdtZW50ICh2YWx1ZSkpIHsKLSAgICAgIGd1aW50IGVzZWdsZW4gPSBkZWMtPnBhcnNlX2VudHJvcHlfbGVuOwotCi0gICAgICBHU1RfREVCVUcgKCIweCUwOHg6IGZpbmRpbmcgZW50cm9weSBzZWdtZW50IGxlbmd0aCAoZXNlZ2xlbjolZCkiLAotICAgICAgICAgIG9mZnNldCArIDIsIGVzZWdsZW4pOwotICAgICAgaWYgKHNpemUgPCBvZmZzZXQgKyAyICsgZnJhbWVfbGVuICsgZXNlZ2xlbikKLSAgICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICAgIG5vZmZzZXQgPSBvZmZzZXQgKyAyICsgZnJhbWVfbGVuICsgZGVjLT5wYXJzZV9lbnRyb3B5X2xlbjsKLSAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIm5vZmZzZXQ6JWQsIHNpemU6JWQsIHNpemUgLSBub2Zmc2V0OiVkIiwKLSAgICAgICAgICAgIG5vZmZzZXQsIHNpemUsIHNpemUgLSBub2Zmc2V0KTsKLSAgICAgICAgbm9mZnNldCA9IGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMl9wZWVrIChhZGFwdGVyLCAweDAwMDBmZjAwLAotICAgICAgICAgICAgMHgwMDAwZmYwMCwgbm9mZnNldCwgc2l6ZSAtIG5vZmZzZXQsICZ2YWx1ZSk7Ci0gICAgICAgIGlmIChub2Zmc2V0IDwgMCkgewotICAgICAgICAgIC8qIG5lZWQgbW9yZSBkYXRhICovCi0gICAgICAgICAgZGVjLT5wYXJzZV9lbnRyb3B5X2xlbiA9IHNpemUgLSBvZmZzZXQgLSA0IC0gZnJhbWVfbGVuIC0gMjsKLSAgICAgICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotICAgICAgICB9Ci0gICAgICAgIGlmICgodmFsdWUgJiAweGZmKSAhPSAweDAwKSB7Ci0gICAgICAgICAgZXNlZ2xlbiA9IG5vZmZzZXQgLSBvZmZzZXQgLSBmcmFtZV9sZW4gLSAyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG5vZmZzZXQrKzsKLSAgICAgIH0KLSAgICAgIGRlYy0+cGFyc2VfZW50cm9weV9sZW4gPSAwOwotICAgICAgZnJhbWVfbGVuICs9IGVzZWdsZW47Ci0gICAgICBHU1RfREVCVUcgKCJlbnRyb3B5IHNlZ21lbnQgbGVuZ3RoPSV1ID0+IGZyYW1lX2xlbj0ldSIsIGVzZWdsZW4sCi0gICAgICAgICAgZnJhbWVfbGVuKTsKLSAgICB9Ci0gICAgaWYgKHJlc3luYykgewotICAgICAgLyogY2hlY2sgaWYgd2Ugd2lsbCBzdGlsbCBiZSBpbiBzeW5jIGlmIHdlIGludGVycHJldAotICAgICAgICogdGhpcyBhcyBhIHN5bmMgcG9pbnQgYW5kIHNraXAgdGhpcyBmcmFtZSAqLwotICAgICAgbm9mZnNldCA9IG9mZnNldCArIGZyYW1lX2xlbiArIDI7Ci0gICAgICBub2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfbWFza2VkX3NjYW5fdWludDMyIChhZGFwdGVyLCAweDAwMDBmZjAwLCAweDAwMDBmZjAwLAotICAgICAgICAgIG5vZmZzZXQsIDQpOwotICAgICAgaWYgKG5vZmZzZXQgPCAwKSB7Ci0gICAgICAgIC8qIGlnbm9yZSBhbmQgY29udGludWUgcmVzeW5jaW5nIHVudGlsIHdlIGhpdCB0aGUgZW5kCi0gICAgICAgICAqIG9mIG91ciBkYXRhIG9yIGZpbmQgYSBzeW5jIHBvaW50IHRoYXQgbG9va3Mgb2theSAqLwotICAgICAgICBvZmZzZXQrKzsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBHU1RfREVCVUcgKCJmb3VuZCBzeW5jIGF0IDB4JXgiLCBvZmZzZXQgKyAyKTsKLSAgICB9Ci0KLSAgICAvKiBBZGQgY3VycmVudCBkYXRhIHRvIG91dHB1dCBidWZmZXIgKi8KLSAgICB0b2FkZCArPSBmcmFtZV9sZW4gKyAyOwotICAgIG9mZnNldCArPSBmcmFtZV9sZW4gKyAyOwotICB9Ci0KLW5lZWRfbW9yZV9kYXRhOgotICBpZiAodG9hZGQpCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfYWRkX3RvX2ZyYW1lIChiZGVjLCB0b2FkZCk7Ci0gIHJldHVybiBHU1RfVklERU9fREVDT0RFUl9GTE9XX05FRURfREFUQTsKLQotaGF2ZV9mdWxsX2ZyYW1lOgotICBpZiAodG9hZGQpCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfYWRkX3RvX2ZyYW1lIChiZGVjLCB0b2FkZCk7Ci0gIEdTVF9WSURFT19DT0RFQ19GUkFNRV9TRVRfU1lOQ19QT0lOVCAoZnJhbWUpOwotICByZXR1cm4gZ3N0X3ZpZGVvX2RlY29kZXJfaGF2ZV9mcmFtZSAoYmRlYyk7Ci0KLWRyb3BfZnJhbWU6Ci0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCBzaXplKTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi0KLS8qIHNoYW1lbGVzc2x5IHJpcHBlZCBmcm9tIGpwZWd1dGlscy5jIGluIG1qcGVndG9vbHMgKi8KLXN0YXRpYyB2b2lkCi1hZGRfaHVmZl90YWJsZSAoal9kZWNvbXByZXNzX3B0ciBkaW5mbywKLSAgICBKSFVGRl9UQkwgKiogaHRibHB0ciwgY29uc3QgVUlOVDggKiBiaXRzLCBjb25zdCBVSU5UOCAqIHZhbCkKLS8qIERlZmluZSBhIEh1ZmZtYW4gdGFibGUgKi8KLXsKLSAgaW50IG5zeW1ib2xzLCBsZW47Ci0KLSAgaWYgKCpodGJscHRyID09IE5VTEwpCi0gICAgKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgKChqX2NvbW1vbl9wdHIpIGRpbmZvKTsKLQotICBnX2Fzc2VydCAoKmh0YmxwdHIpOwotCi0gIC8qIENvcHkgdGhlIG51bWJlci1vZi1zeW1ib2xzLW9mLWVhY2gtY29kZS1sZW5ndGggY291bnRzICovCi0gIG1lbWNweSAoKCpodGJscHRyKS0+Yml0cywgYml0cywgc2l6ZW9mICgoKmh0YmxwdHIpLT5iaXRzKSk7Ci0KLSAgLyogVmFsaWRhdGUgdGhlIGNvdW50cy4gIFdlIGRvIHRoaXMgaGVyZSBtYWlubHkgc28gd2UgY2FuIGNvcHkgdGhlIHJpZ2h0Ci0gICAqIG51bWJlciBvZiBzeW1ib2xzIGZyb20gdGhlIHZhbFtdIGFycmF5LCB3aXRob3V0IHJpc2tpbmcgbWFyY2hpbmcgb2ZmCi0gICAqIHRoZSBlbmQgb2YgbWVtb3J5LiAgamNodWZmLmMgd2lsbCBkbyBhIG1vcmUgdGhvcm91Z2ggdGVzdCBsYXRlci4KLSAgICovCi0gIG5zeW1ib2xzID0gMDsKLSAgZm9yIChsZW4gPSAxOyBsZW4gPD0gMTY7IGxlbisrKQotICAgIG5zeW1ib2xzICs9IGJpdHNbbGVuXTsKLSAgaWYgKG5zeW1ib2xzIDwgMSB8fCBuc3ltYm9scyA+IDI1NikKLSAgICBnX2Vycm9yICgianBlZ3V0aWxzLmM6ICBhZGRfaHVmZl90YWJsZSBmYWlsZWQgYmFkbHkuICIpOwotCi0gIG1lbWNweSAoKCpodGJscHRyKS0+aHVmZnZhbCwgdmFsLCBuc3ltYm9scyAqIHNpemVvZiAoVUlOVDgpKTsKLX0KLQotCi0KLXN0YXRpYyB2b2lkCi1zdGRfaHVmZl90YWJsZXMgKGpfZGVjb21wcmVzc19wdHIgZGluZm8pCi0vKiBTZXQgdXAgdGhlIHN0YW5kYXJkIEh1ZmZtYW4gdGFibGVzIChjZi4gSlBFRyBzdGFuZGFyZCBzZWN0aW9uIEsuMykgKi8KLS8qIElNUE9SVEFOVDogdGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIDgtYml0IGRhdGEgcHJlY2lzaW9uISAqLwotewotICBzdGF0aWMgY29uc3QgVUlOVDggYml0c19kY19sdW1pbmFuY2VbMTddID0KLSAgICAgIHsgLyogMC1iYXNlICovIDAsIDAsIDEsIDUsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLSAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9kY19sdW1pbmFuY2VbXSA9Ci0gICAgICB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSB9OwotCi0gIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2RjX2Nocm9taW5hbmNlWzE3XSA9Ci0gICAgICB7IC8qIDAtYmFzZSAqLyAwLCAwLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwIH07Ci0gIHN0YXRpYyBjb25zdCBVSU5UOCB2YWxfZGNfY2hyb21pbmFuY2VbXSA9Ci0gICAgICB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSB9OwotCi0gIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2FjX2x1bWluYW5jZVsxN10gPQotICAgICAgeyAvKiAwLWJhc2UgKi8gMCwgMCwgMiwgMSwgMywgMywgMiwgNCwgMywgNSwgNSwgNCwgNCwgMCwgMCwgMSwgMHg3ZCB9OwotICBzdGF0aWMgY29uc3QgVUlOVDggdmFsX2FjX2x1bWluYW5jZVtdID0KLSAgICAgIHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwMCwgMHgwNCwgMHgxMSwgMHgwNSwgMHgxMiwKLSAgICAweDIxLCAweDMxLCAweDQxLCAweDA2LCAweDEzLCAweDUxLCAweDYxLCAweDA3LAotICAgIDB4MjIsIDB4NzEsIDB4MTQsIDB4MzIsIDB4ODEsIDB4OTEsIDB4YTEsIDB4MDgsCi0gICAgMHgyMywgMHg0MiwgMHhiMSwgMHhjMSwgMHgxNSwgMHg1MiwgMHhkMSwgMHhmMCwKLSAgICAweDI0LCAweDMzLCAweDYyLCAweDcyLCAweDgyLCAweDA5LCAweDBhLCAweDE2LAotICAgIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCi0gICAgMHgyOSwgMHgyYSwgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwKLSAgICAweDNhLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LCAweDQ5LAotICAgIDB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksCi0gICAgMHg1YSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwKLSAgICAweDZhLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LCAweDc5LAotICAgIDB4N2EsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksCi0gICAgMHg4YSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwKLSAgICAweDk5LCAweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAotICAgIDB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsCi0gICAgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwKLSAgICAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLCAweGQzLCAweGQ0LAotICAgIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTEsIDB4ZTIsCi0gICAgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwgMHhlYSwKLSAgICAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LAotICAgIDB4ZjksIDB4ZmEKLSAgfTsKLQotICBzdGF0aWMgY29uc3QgVUlOVDggYml0c19hY19jaHJvbWluYW5jZVsxN10gPQotICAgICAgeyAvKiAwLWJhc2UgKi8gMCwgMCwgMiwgMSwgMiwgNCwgNCwgMywgNCwgNywgNSwgNCwgNCwgMCwgMSwgMiwgMHg3NyB9OwotICBzdGF0aWMgY29uc3QgVUlOVDggdmFsX2FjX2Nocm9taW5hbmNlW10gPQotICAgICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDExLCAweDA0LCAweDA1LCAweDIxLAotICAgIDB4MzEsIDB4MDYsIDB4MTIsIDB4NDEsIDB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsCi0gICAgMHgxMywgMHgyMiwgMHgzMiwgMHg4MSwgMHgwOCwgMHgxNCwgMHg0MiwgMHg5MSwKLSAgICAweGExLCAweGIxLCAweGMxLCAweDA5LCAweDIzLCAweDMzLCAweDUyLCAweGYwLAotICAgIDB4MTUsIDB4NjIsIDB4NzIsIDB4ZDEsIDB4MGEsIDB4MTYsIDB4MjQsIDB4MzQsCi0gICAgMHhlMSwgMHgyNSwgMHhmMSwgMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNiwKLSAgICAweDI3LCAweDI4LCAweDI5LCAweDJhLCAweDM1LCAweDM2LCAweDM3LCAweDM4LAotICAgIDB4MzksIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsCi0gICAgMHg0OSwgMHg0YSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKLSAgICAweDU5LCAweDVhLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LAotICAgIDB4NjksIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0gICAgMHg3OSwgMHg3YSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKLSAgICAweDg4LCAweDg5LCAweDhhLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LAotICAgIDB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsCi0gICAgMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwKLSAgICAweGI1LCAweGI2LCAweGI3LCAweGI4LCAweGI5LCAweGJhLCAweGMyLCAweGMzLAotICAgIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsCi0gICAgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwKLSAgICAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LCAweGU5LAotICAgIDB4ZWEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCi0gICAgMHhmOSwgMHhmYQotICB9OwotCi0gIGFkZF9odWZmX3RhYmxlIChkaW5mbywgJmRpbmZvLT5kY19odWZmX3RibF9wdHJzWzBdLAotICAgICAgYml0c19kY19sdW1pbmFuY2UsIHZhbF9kY19sdW1pbmFuY2UpOwotICBhZGRfaHVmZl90YWJsZSAoZGluZm8sICZkaW5mby0+YWNfaHVmZl90YmxfcHRyc1swXSwKLSAgICAgIGJpdHNfYWNfbHVtaW5hbmNlLCB2YWxfYWNfbHVtaW5hbmNlKTsKLSAgYWRkX2h1ZmZfdGFibGUgKGRpbmZvLCAmZGluZm8tPmRjX2h1ZmZfdGJsX3B0cnNbMV0sCi0gICAgICBiaXRzX2RjX2Nocm9taW5hbmNlLCB2YWxfZGNfY2hyb21pbmFuY2UpOwotICBhZGRfaHVmZl90YWJsZSAoZGluZm8sICZkaW5mby0+YWNfaHVmZl90YmxfcHRyc1sxXSwKLSAgICAgIGJpdHNfYWNfY2hyb21pbmFuY2UsIHZhbF9hY19jaHJvbWluYW5jZSk7Ci19Ci0KLQotCi1zdGF0aWMgdm9pZAotZ3VhcmFudGVlX2h1ZmZfdGFibGVzIChqX2RlY29tcHJlc3NfcHRyIGRpbmZvKQotewotICBpZiAoKGRpbmZvLT5kY19odWZmX3RibF9wdHJzWzBdID09IE5VTEwpICYmCi0gICAgICAoZGluZm8tPmRjX2h1ZmZfdGJsX3B0cnNbMV0gPT0gTlVMTCkgJiYKLSAgICAgIChkaW5mby0+YWNfaHVmZl90YmxfcHRyc1swXSA9PSBOVUxMKSAmJgotICAgICAgKGRpbmZvLT5hY19odWZmX3RibF9wdHJzWzFdID09IE5VTEwpKSB7Ci0gICAgR1NUX0RFQlVHICgiR2VuZXJhdGluZyBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyBmb3IgdGhpcyBmcmFtZS4iKTsKLSAgICBzdGRfaHVmZl90YWJsZXMgKGRpbmZvKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qcGVnX2RlY19zZXRfZm9ybWF0IChHc3RWaWRlb0RlY29kZXIgKiBkZWMsIEdzdFZpZGVvQ29kZWNTdGF0ZSAqIHN0YXRlKQotewotICBHc3RKcGVnRGVjICpqcGVnID0gR1NUX0pQRUdfREVDIChkZWMpOwotCi0gIGlmIChqcGVnLT5pbnB1dF9zdGF0ZSkKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKGpwZWctPmlucHV0X3N0YXRlKTsKLSAganBlZy0+aW5wdXRfc3RhdGUgPSBnc3RfdmlkZW9fY29kZWNfc3RhdGVfcmVmIChzdGF0ZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyogeXVrICovCi1zdGF0aWMgdm9pZAotaHJlc2FtcGxlY3B5MSAoZ3VpbnQ4ICogZGVzdCwgY29uc3QgZ3VpbnQ4ICogc3JjLCBndWludCBsZW4pCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAvKiBlcXVpdmFsZW50IHRvOiBkZXN0W2ldID0gc3JjW2kgPDwgMV0gKi8KLSAgICAqZGVzdCA9ICpzcmM7Ci0gICAgKytkZXN0OwotICAgICsrc3JjOwotICAgICsrc3JjOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ19kZWNfZnJlZV9idWZmZXJzIChHc3RKcGVnRGVjICogZGVjKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICBnX2ZyZWUgKGRlYy0+aWRyX3lbaV0pOwotICAgIGdfZnJlZSAoZGVjLT5pZHJfdVtpXSk7Ci0gICAgZ19mcmVlIChkZWMtPmlkcl92W2ldKTsKLSAgICBkZWMtPmlkcl95W2ldID0gTlVMTDsKLSAgICBkZWMtPmlkcl91W2ldID0gTlVMTDsKLSAgICBkZWMtPmlkcl92W2ldID0gTlVMTDsKLSAgfQotCi0gIGRlYy0+aWRyX3dpZHRoX2FsbG9jYXRlZCA9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9qcGVnX2RlY19lbnN1cmVfYnVmZmVycyAoR3N0SnBlZ0RlYyAqIGRlYywgZ3VpbnQgbWF4cm93Ynl0ZXMpCi17Ci0gIGdpbnQgaTsKLQotICBpZiAoR19MSUtFTFkgKGRlYy0+aWRyX3dpZHRoX2FsbG9jYXRlZCA9PSBtYXhyb3dieXRlcykpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRklYTUU6IG1heWJlIGp1c3QgYWxsb2Mgb25lIG9yIHRocmVlIGJsb2NrcyBhbHRvZ2V0aGVyPyAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgIGRlYy0+aWRyX3lbaV0gPSBnX3RyeV9yZWFsbG9jIChkZWMtPmlkcl95W2ldLCBtYXhyb3dieXRlcyk7Ci0gICAgZGVjLT5pZHJfdVtpXSA9IGdfdHJ5X3JlYWxsb2MgKGRlYy0+aWRyX3VbaV0sIG1heHJvd2J5dGVzKTsKLSAgICBkZWMtPmlkcl92W2ldID0gZ190cnlfcmVhbGxvYyAoZGVjLT5pZHJfdltpXSwgbWF4cm93Ynl0ZXMpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFkZWMtPmlkcl95W2ldIHx8ICFkZWMtPmlkcl91W2ldIHx8ICFkZWMtPmlkcl92W2ldKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZWMsICJvdXQgb2YgbWVtb3J5LCBpPSVkLCBieXRlcz0ldSIsIGksIG1heHJvd2J5dGVzKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBkZWMtPmlkcl93aWR0aF9hbGxvY2F0ZWQgPSBtYXhyb3dieXRlczsKLSAgR1NUX0xPR19PQkpFQ1QgKGRlYywgImFsbG9jYXRlZCB0ZW1wIG1lbW9yeSwgJXUgYnl0ZXMvcm93IiwgbWF4cm93Ynl0ZXMpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qcGVnX2RlY19kZWNvZGVfZ3JheXNjYWxlIChHc3RKcGVnRGVjICogZGVjLCBHc3RWaWRlb0ZyYW1lICogZnJhbWUpCi17Ci0gIGd1Y2hhciAqcm93c1sxNl07Ci0gIGd1Y2hhciAqKnNjYW5hcnJheVsxXSA9IHsgcm93cyB9OwotICBnaW50IGksIGosIGs7Ci0gIGdpbnQgbGluZXM7Ci0gIGd1aW50OCAqYmFzZVsxXTsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IHBzdHJpZGUsIHJzdHJpZGU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAiaW5kaXJlY3QgZGVjb2Rpbmcgb2YgZ3JheXNjYWxlIik7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZnJhbWUpOwotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X2pwZWdfZGVjX2Vuc3VyZV9idWZmZXJzIChkZWMsIEdTVF9ST1VORF9VUF8zMiAod2lkdGgpKSkpCi0gICAgcmV0dXJuOwotCi0gIGJhc2VbMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMCk7Ci0gIHBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFIChmcmFtZSwgMCk7Ci0gIHJzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCAwKTsKLQotICBtZW1jcHkgKHJvd3MsIGRlYy0+aWRyX3ksIDE2ICogc2l6ZW9mIChncG9pbnRlcikpOwotCi0gIGkgPSAwOwotICB3aGlsZSAoaSA8IGhlaWdodCkgewotICAgIGxpbmVzID0ganBlZ19yZWFkX3Jhd19kYXRhICgmZGVjLT5jaW5mbywgc2NhbmFycmF5LCBEQ1RTSVpFKTsKLSAgICBpZiAoR19MSUtFTFkgKGxpbmVzID4gMCkpIHsKLSAgICAgIGZvciAoaiA9IDA7IChqIDwgRENUU0laRSkgJiYgKGkgPCBoZWlnaHQpOyBqKyssIGkrKykgewotICAgICAgICBnaW50IHA7Ci0KLSAgICAgICAgcCA9IDA7Ci0gICAgICAgIGZvciAoayA9IDA7IGsgPCB3aWR0aDsgaysrKSB7Ci0gICAgICAgICAgYmFzZVswXVtwXSA9IHJvd3Nbal1ba107Ci0gICAgICAgICAgcCArPSBwc3RyaWRlOwotICAgICAgICB9Ci0gICAgICAgIGJhc2VbMF0gKz0gcnN0cmlkZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChkZWMsICJqcGVnX3JlYWRfcmF3X2RhdGEoKSByZXR1cm5lZCAwIik7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ19kZWNfZGVjb2RlX3JnYiAoR3N0SnBlZ0RlYyAqIGRlYywgR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQotewotICBndWNoYXIgKnJfcm93c1sxNl0sICpnX3Jvd3NbMTZdLCAqYl9yb3dzWzE2XTsKLSAgZ3VjaGFyICoqc2NhbmFycmF5WzNdID0geyByX3Jvd3MsIGdfcm93cywgYl9yb3dzIH07Ci0gIGdpbnQgaSwgaiwgazsKLSAgZ2ludCBsaW5lczsKLSAgZ3VpbnQ4ICpiYXNlWzNdOwotICBndWludCBwc3RyaWRlLCByc3RyaWRlOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAiaW5kaXJlY3QgZGVjb2Rpbmcgb2YgUkdCIik7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZnJhbWUpOwotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X2pwZWdfZGVjX2Vuc3VyZV9idWZmZXJzIChkZWMsIEdTVF9ST1VORF9VUF8zMiAod2lkdGgpKSkpCi0gICAgcmV0dXJuOwotCi0gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgYmFzZVtpXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCBpKTsKLQotICBwc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoZnJhbWUsIDApOwotICByc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCk7Ci0KLSAgbWVtY3B5IChyX3Jvd3MsIGRlYy0+aWRyX3ksIDE2ICogc2l6ZW9mIChncG9pbnRlcikpOwotICBtZW1jcHkgKGdfcm93cywgZGVjLT5pZHJfdSwgMTYgKiBzaXplb2YgKGdwb2ludGVyKSk7Ci0gIG1lbWNweSAoYl9yb3dzLCBkZWMtPmlkcl92LCAxNiAqIHNpemVvZiAoZ3BvaW50ZXIpKTsKLQotICBpID0gMDsKLSAgd2hpbGUgKGkgPCBoZWlnaHQpIHsKLSAgICBsaW5lcyA9IGpwZWdfcmVhZF9yYXdfZGF0YSAoJmRlYy0+Y2luZm8sIHNjYW5hcnJheSwgRENUU0laRSk7Ci0gICAgaWYgKEdfTElLRUxZIChsaW5lcyA+IDApKSB7Ci0gICAgICBmb3IgKGogPSAwOyAoaiA8IERDVFNJWkUpICYmIChpIDwgaGVpZ2h0KTsgaisrLCBpKyspIHsKLSAgICAgICAgZ2ludCBwOwotCi0gICAgICAgIHAgPSAwOwotICAgICAgICBmb3IgKGsgPSAwOyBrIDwgd2lkdGg7IGsrKykgewotICAgICAgICAgIGJhc2VbMF1bcF0gPSByX3Jvd3Nbal1ba107Ci0gICAgICAgICAgYmFzZVsxXVtwXSA9IGdfcm93c1tqXVtrXTsKLSAgICAgICAgICBiYXNlWzJdW3BdID0gYl9yb3dzW2pdW2tdOwotICAgICAgICAgIHAgKz0gcHN0cmlkZTsKLSAgICAgICAgfQotICAgICAgICBiYXNlWzBdICs9IHJzdHJpZGU7Ci0gICAgICAgIGJhc2VbMV0gKz0gcnN0cmlkZTsKLSAgICAgICAgYmFzZVsyXSArPSByc3RyaWRlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGRlYywgImpwZWdfcmVhZF9yYXdfZGF0YSgpIHJldHVybmVkIDAiKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qcGVnX2RlY19kZWNvZGVfaW5kaXJlY3QgKEdzdEpwZWdEZWMgKiBkZWMsIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgZ2ludCByX3YsCi0gICAgZ2ludCByX2gsIGdpbnQgY29tcCkKLXsKLSAgZ3VjaGFyICp5X3Jvd3NbMTZdLCAqdV9yb3dzWzE2XSwgKnZfcm93c1sxNl07Ci0gIGd1Y2hhciAqKnNjYW5hcnJheVszXSA9IHsgeV9yb3dzLCB1X3Jvd3MsIHZfcm93cyB9OwotICBnaW50IGksIGosIGs7Ci0gIGdpbnQgbGluZXM7Ci0gIGd1Y2hhciAqYmFzZVszXSwgKmxhc3RbM107Ci0gIGdpbnQgc3RyaWRlWzNdOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLAotICAgICAgInVuYWR2YW50YWdlb3VzIHdpZHRoIG9yIHJfaCwgdGFraW5nIHNsb3cgcm91dGUgaW52b2x2aW5nIG1lbWNweSIpOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9qcGVnX2RlY19lbnN1cmVfYnVmZmVycyAoZGVjLCBHU1RfUk9VTkRfVVBfMzIgKHdpZHRoKSkpKQotICAgIHJldHVybjsKLQotICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgYmFzZVtpXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCBpKTsKLSAgICBzdHJpZGVbaV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCBpKTsKLSAgICAvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgbWFrZSBqcGVnbGliIHdyaXRlIGJleW9uZCBvdXIgYnVmZmVyLAotICAgICAqIHdoaWNoIG1pZ2h0IGhhcHBlbiBpZiAoaGVpZ2h0ICUgKHJfdipEQ1RTSVpFKSkgIT0gMCAqLwotICAgIGxhc3RbaV0gPSBiYXNlW2ldICsgKEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIGkpICoKLSAgICAgICAgKEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIGkpIC0gMSkpOwotICB9Ci0KLSAgbWVtY3B5ICh5X3Jvd3MsIGRlYy0+aWRyX3ksIDE2ICogc2l6ZW9mIChncG9pbnRlcikpOwotICBtZW1jcHkgKHVfcm93cywgZGVjLT5pZHJfdSwgMTYgKiBzaXplb2YgKGdwb2ludGVyKSk7Ci0gIG1lbWNweSAodl9yb3dzLCBkZWMtPmlkcl92LCAxNiAqIHNpemVvZiAoZ3BvaW50ZXIpKTsKLQotICAvKiBmaWxsIGNocm9tYSBjb21wb25lbnRzIGZvciBncmF5c2NhbGUgKi8KLSAgaWYgKGNvbXAgPT0gMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImdyYXlzY2FsZSwgZmlsbGluZyBjaHJvbWEiKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgbWVtc2V0ICh1X3Jvd3NbaV0sIEdTVF9ST1VORF9VUF8zMiAod2lkdGgpLCAweDgwKTsKLSAgICAgIG1lbXNldCAodl9yb3dzW2ldLCBHU1RfUk9VTkRfVVBfMzIgKHdpZHRoKSwgMHg4MCk7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSArPSByX3YgKiBEQ1RTSVpFKSB7Ci0gICAgbGluZXMgPSBqcGVnX3JlYWRfcmF3X2RhdGEgKCZkZWMtPmNpbmZvLCBzY2FuYXJyYXksIHJfdiAqIERDVFNJWkUpOwotICAgIGlmIChHX0xJS0VMWSAobGluZXMgPiAwKSkgewotICAgICAgZm9yIChqID0gMCwgayA9IDA7IGogPCAocl92ICogRENUU0laRSk7IGogKz0gcl92LCBrKyspIHsKLSAgICAgICAgaWYgKEdfTElLRUxZIChiYXNlWzBdIDw9IGxhc3RbMF0pKSB7Ci0gICAgICAgICAgbWVtY3B5IChiYXNlWzBdLCB5X3Jvd3Nbal0sIHN0cmlkZVswXSk7Ci0gICAgICAgICAgYmFzZVswXSArPSBzdHJpZGVbMF07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJfdiA9PSAyKSB7Ci0gICAgICAgICAgaWYgKEdfTElLRUxZIChiYXNlWzBdIDw9IGxhc3RbMF0pKSB7Ci0gICAgICAgICAgICBtZW1jcHkgKGJhc2VbMF0sIHlfcm93c1tqICsgMV0sIHN0cmlkZVswXSk7Ci0gICAgICAgICAgICBiYXNlWzBdICs9IHN0cmlkZVswXTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKEdfTElLRUxZIChiYXNlWzFdIDw9IGxhc3RbMV0gJiYgYmFzZVsyXSA8PSBsYXN0WzJdKSkgewotICAgICAgICAgIGlmIChyX2ggPT0gMikgewotICAgICAgICAgICAgbWVtY3B5IChiYXNlWzFdLCB1X3Jvd3Nba10sIHN0cmlkZVsxXSk7Ci0gICAgICAgICAgICBtZW1jcHkgKGJhc2VbMl0sIHZfcm93c1trXSwgc3RyaWRlWzJdKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHJfaCA9PSAxKSB7Ci0gICAgICAgICAgICBocmVzYW1wbGVjcHkxIChiYXNlWzFdLCB1X3Jvd3Nba10sIHN0cmlkZVsxXSk7Ci0gICAgICAgICAgICBocmVzYW1wbGVjcHkxIChiYXNlWzJdLCB2X3Jvd3Nba10sIHN0cmlkZVsyXSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIEZJWE1FOiBpbXBsZW1lbnQgKGF0IGxlYXN0IHdlIGF2b2lkIGNyYXNoaW5nIGJ5IGRvaW5nIG5vdGhpbmcpICovCi0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJfdiA9PSAyIHx8IChrICYgMSkgIT0gMCkgewotICAgICAgICAgIGJhc2VbMV0gKz0gc3RyaWRlWzFdOwotICAgICAgICAgIGJhc2VbMl0gKz0gc3RyaWRlWzJdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZGVjLCAianBlZ19yZWFkX3Jhd19kYXRhKCkgcmV0dXJuZWQgMCIpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2pwZWdfZGVjX2RlY29kZV9kaXJlY3QgKEdzdEpwZWdEZWMgKiBkZWMsIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKLXsKLSAgZ3VjaGFyICoqbGluZVszXTsgICAgICAgICAgICAgLyogdGhlIGpwZWcgbGluZSBidWZmZXIgICAgICAgICAqLwotICBndWNoYXIgKnlbNCAqIERDVFNJWkVdID0geyBOVUxMLCB9OyAgIC8qIGFsbG9jIGVub3VnaCBmb3IgdGhlIGxpbmVzICAgKi8KLSAgZ3VjaGFyICp1WzQgKiBEQ1RTSVpFXSA9IHsgTlVMTCwgfTsgICAvKiByX3Ygd2lsbCBiZSA8NCAgICAgICAgICAgICAgICovCi0gIGd1Y2hhciAqdls0ICogRENUU0laRV0gPSB7IE5VTEwsIH07Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBsaW5lcywgdl9zYW1wWzNdOwotICBndWNoYXIgKmJhc2VbM10sICpsYXN0WzNdOwotICBnaW50IHN0cmlkZVszXTsKLSAgZ3VpbnQgaGVpZ2h0OwotCi0gIGxpbmVbMF0gPSB5OwotICBsaW5lWzFdID0gdTsKLSAgbGluZVsyXSA9IHY7Ci0KLSAgdl9zYW1wWzBdID0gZGVjLT5jaW5mby5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3RvcjsKLSAgdl9zYW1wWzFdID0gZGVjLT5jaW5mby5jb21wX2luZm9bMV0udl9zYW1wX2ZhY3RvcjsKLSAgdl9zYW1wWzJdID0gZGVjLT5jaW5mby5jb21wX2luZm9bMl0udl9zYW1wX2ZhY3RvcjsKLQotICBpZiAoR19VTkxJS0VMWSAodl9zYW1wWzBdID4gMiB8fCB2X3NhbXBbMV0gPiAyIHx8IHZfc2FtcFsyXSA+IDIpKQotICAgIGdvdG8gZm9ybWF0X25vdF9zdXBwb3J0ZWQ7Ci0KLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZnJhbWUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICBiYXNlW2ldID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIGkpOwotICAgIHN0cmlkZVtpXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIGkpOwotICAgIC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBtYWtlIGpwZWdsaWIgd3JpdGUgYmV5b25kIG91ciBidWZmZXIsCi0gICAgICogd2hpY2ggbWlnaHQgaGFwcGVuIGlmIChoZWlnaHQgJSAocl92KkRDVFNJWkUpKSAhPSAwICovCi0gICAgbGFzdFtpXSA9IGJhc2VbaV0gKyAoR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgaSkgKgotICAgICAgICAoR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgaSkgLSAxKSk7Ci0gIH0KLQotICAvKiBsZXQganBlZ2xpYiBkZWNvZGUgZGlyZWN0bHkgaW50byBvdXIgZmluYWwgYnVmZmVyICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImRlY29kaW5nIGRpcmVjdGx5IGludG8gb3V0cHV0IGJ1ZmZlciIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkgKz0gdl9zYW1wWzBdICogRENUU0laRSkgewotICAgIGZvciAoaiA9IDA7IGogPCAodl9zYW1wWzBdICogRENUU0laRSk7ICsraikgewotICAgICAgLyogWSAqLwotICAgICAgbGluZVswXVtqXSA9IGJhc2VbMF0gKyAoaSArIGopICogc3RyaWRlWzBdOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKGxpbmVbMF1bal0gPiBsYXN0WzBdKSkKLSAgICAgICAgbGluZVswXVtqXSA9IGxhc3RbMF07Ci0gICAgICAvKiBVICovCi0gICAgICBpZiAodl9zYW1wWzFdID09IHZfc2FtcFswXSkgewotICAgICAgICBsaW5lWzFdW2pdID0gYmFzZVsxXSArICgoaSArIGopIC8gMikgKiBzdHJpZGVbMV07Ci0gICAgICB9IGVsc2UgaWYgKGogPCAodl9zYW1wWzFdICogRENUU0laRSkpIHsKLSAgICAgICAgbGluZVsxXVtqXSA9IGJhc2VbMV0gKyAoKGkgLyAyKSArIGopICogc3RyaWRlWzFdOwotICAgICAgfQotICAgICAgaWYgKEdfVU5MSUtFTFkgKGxpbmVbMV1bal0gPiBsYXN0WzFdKSkKLSAgICAgICAgbGluZVsxXVtqXSA9IGxhc3RbMV07Ci0gICAgICAvKiBWICovCi0gICAgICBpZiAodl9zYW1wWzJdID09IHZfc2FtcFswXSkgewotICAgICAgICBsaW5lWzJdW2pdID0gYmFzZVsyXSArICgoaSArIGopIC8gMikgKiBzdHJpZGVbMl07Ci0gICAgICB9IGVsc2UgaWYgKGogPCAodl9zYW1wWzJdICogRENUU0laRSkpIHsKLSAgICAgICAgbGluZVsyXVtqXSA9IGJhc2VbMl0gKyAoKGkgLyAyKSArIGopICogc3RyaWRlWzJdOwotICAgICAgfQotICAgICAgaWYgKEdfVU5MSUtFTFkgKGxpbmVbMl1bal0gPiBsYXN0WzJdKSkKLSAgICAgICAgbGluZVsyXVtqXSA9IGxhc3RbMl07Ci0gICAgfQotCi0gICAgbGluZXMgPSBqcGVnX3JlYWRfcmF3X2RhdGEgKCZkZWMtPmNpbmZvLCBsaW5lLCB2X3NhbXBbMF0gKiBEQ1RTSVpFKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoIWxpbmVzKSkgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChkZWMsICJqcGVnX3JlYWRfcmF3X2RhdGEoKSByZXR1cm5lZCAwIik7Ci0gICAgfQotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotZm9ybWF0X25vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBnYm9vbGVhbiByZXQgPSBHU1RfRkxPV19PSzsKLQotICAgIEdTVF9WSURFT19ERUNPREVSX0VSUk9SIChkZWMsIDEsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoXygiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIikpLAotICAgICAgICAoIlVuc3VwcG9ydGVkIHN1YnNhbXBsaW5nIHNjaGVtYTogdl9zYW1wIGZhY3RvcnM6ICV1ICV1ICV1Iiwgdl9zYW1wWzBdLAotICAgICAgICAgICAgdl9zYW1wWzFdLCB2X3NhbXBbMl0pLCByZXQpOwotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdfZGVjX25lZ290aWF0ZSAoR3N0SnBlZ0RlYyAqIGRlYywgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsIGdpbnQgY2xyc3BjKQotewotICBHc3RWaWRlb0NvZGVjU3RhdGUgKm91dHN0YXRlOwotICBHc3RWaWRlb0luZm8gKmluZm87Ci0gIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLQotICBzd2l0Y2ggKGNscnNwYykgewotICAgIGNhc2UgSkNTX1JHQjoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfUkdCOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKQ1NfR1JBWVNDQUxFOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9HUkFZODsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0k0MjA7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIENvbXBhcmUgdG8gY3VycmVudGx5IGNvbmZpZ3VyZWQgb3V0cHV0IHN0YXRlICovCi0gIG91dHN0YXRlID0gZ3N0X3ZpZGVvX2RlY29kZXJfZ2V0X291dHB1dF9zdGF0ZSAoR1NUX1ZJREVPX0RFQ09ERVIgKGRlYykpOwotICBpZiAob3V0c3RhdGUpIHsKLSAgICBpbmZvID0gJm91dHN0YXRlLT5pbmZvOwotCi0gICAgaWYgKHdpZHRoID09IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKSAmJgotICAgICAgICBoZWlnaHQgPT0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbmZvKSAmJgotICAgICAgICBmb3JtYXQgPT0gR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChvdXRzdGF0ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAob3V0c3RhdGUpOwotICB9Ci0KLSAgb3V0c3RhdGUgPQotICAgICAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X291dHB1dF9zdGF0ZSAoR1NUX1ZJREVPX0RFQ09ERVIgKGRlYyksIGZvcm1hdCwKLSAgICAgIHdpZHRoLCBoZWlnaHQsIGRlYy0+aW5wdXRfc3RhdGUpOwotCi0gIHN3aXRjaCAoY2xyc3BjKSB7Ci0gICAgY2FzZSBKQ1NfUkdCOgotICAgIGNhc2UgSkNTX0dSQVlTQ0FMRToKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBvdXRzdGF0ZS0+aW5mby5jb2xvcmltZXRyeS5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8wXzI1NTsKLSAgICAgIG91dHN0YXRlLT5pbmZvLmNvbG9yaW1ldHJ5Lm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQ2MDE7Ci0gICAgICBvdXRzdGF0ZS0+aW5mby5jb2xvcmltZXRyeS50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9VTktOT1dOOwotICAgICAgb3V0c3RhdGUtPmluZm8uY29sb3JpbWV0cnkucHJpbWFyaWVzID0gR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19VTktOT1dOOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKG91dHN0YXRlKTsKLQotICBnc3RfdmlkZW9fZGVjb2Rlcl9uZWdvdGlhdGUgKEdTVF9WSURFT19ERUNPREVSIChkZWMpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJtYXhfdl9zYW1wX2ZhY3Rvcj0lZCIsIGRlYy0+Y2luZm8ubWF4X3Zfc2FtcF9mYWN0b3IpOwotICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJtYXhfaF9zYW1wX2ZhY3Rvcj0lZCIsIGRlYy0+Y2luZm8ubWF4X2hfc2FtcF9mYWN0b3IpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2pwZWdfZGVjX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9EZWNvZGVyICogYmRlYywgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEpwZWdEZWMgKmRlYyA9IChHc3RKcGVnRGVjICopIGJkZWM7Ci0gIEdzdFZpZGVvRnJhbWUgdmZyYW1lOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgcl9oLCByX3Y7Ci0gIGd1aW50IGNvZGUsIGhkcl9vazsKLSAgZ2Jvb2xlYW4gbmVlZF91bm1hcCA9IFRSVUU7Ci0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqc3RhdGUgPSBOVUxMOwotICBnYm9vbGVhbiByZWxlYXNlX2ZyYW1lID0gVFJVRTsKLQotICBkZWMtPmN1cnJlbnRfZnJhbWUgPSBmcmFtZTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGZyYW1lLT5pbnB1dF9idWZmZXIsICZkZWMtPmN1cnJlbnRfZnJhbWVfbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIGRlYy0+Y2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSBkZWMtPmN1cnJlbnRfZnJhbWVfbWFwLmRhdGE7Ci0gIGRlYy0+Y2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgPSBkZWMtPmN1cnJlbnRfZnJhbWVfbWFwLnNpemU7Ci0KLSAgaWYgKHNldGptcCAoZGVjLT5qZXJyLnNldGptcF9idWZmZXIpKSB7Ci0gICAgY29kZSA9IGRlYy0+amVyci5wdWIubXNnX2NvZGU7Ci0KLSAgICBpZiAoY29kZSA9PSBKRVJSX0lOUFVUX0VPRikgewotICAgICAgR1NUX0RFQlVHICgianBlZyBpbnB1dCBFT0YgZXJyb3IsIHdlIHByb2JhYmx5IG5lZWQgbW9yZSBkYXRhIik7Ci0gICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotICAgIH0KLSAgICBnb3RvIGRlY29kZV9lcnJvcjsKLSAgfQotCi0gIC8qIHJlYWQgaGVhZGVyICovCi0gIGhkcl9vayA9IGpwZWdfcmVhZF9oZWFkZXIgKCZkZWMtPmNpbmZvLCBUUlVFKTsKLSAgaWYgKEdfVU5MSUtFTFkgKGhkcl9vayAhPSBKUEVHX0hFQURFUl9PSykpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgInJlYWRpbmcgdGhlIGhlYWRlciBmYWlsZWQsICVkIiwgaGRyX29rKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZWMsICJudW1fY29tcG9uZW50cz0lZCIsIGRlYy0+Y2luZm8ubnVtX2NvbXBvbmVudHMpOwotICBHU1RfTE9HX09CSkVDVCAoZGVjLCAianBlZ19jb2xvcl9zcGFjZT0lZCIsIGRlYy0+Y2luZm8uanBlZ19jb2xvcl9zcGFjZSk7Ci0KLSAgaWYgKCFkZWMtPmNpbmZvLm51bV9jb21wb25lbnRzIHx8ICFkZWMtPmNpbmZvLmNvbXBfaW5mbykKLSAgICBnb3RvIGNvbXBvbmVudHNfbm90X3N1cHBvcnRlZDsKLQotICByX2ggPSBkZWMtPmNpbmZvLmNvbXBfaW5mb1swXS5oX3NhbXBfZmFjdG9yOwotICByX3YgPSBkZWMtPmNpbmZvLmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZWMsICJyX2ggPSAlZCwgcl92ID0gJWQiLCByX2gsIHJfdik7Ci0KLSAgaWYgKGRlYy0+Y2luZm8ubnVtX2NvbXBvbmVudHMgPiAzKQotICAgIGdvdG8gY29tcG9uZW50c19ub3Rfc3VwcG9ydGVkOwotCi0gIC8qIHZlcmlmeSBjb2xvciBzcGFjZSBleHBlY3RhdGlvbiB0byBhdm9pZCBnb2luZyAqYm9vbSogb3IgYm9ndXMgb3V0cHV0ICovCi0gIGlmIChkZWMtPmNpbmZvLmpwZWdfY29sb3Jfc3BhY2UgIT0gSkNTX1lDYkNyICYmCi0gICAgICBkZWMtPmNpbmZvLmpwZWdfY29sb3Jfc3BhY2UgIT0gSkNTX0dSQVlTQ0FMRSAmJgotICAgICAgZGVjLT5jaW5mby5qcGVnX2NvbG9yX3NwYWNlICE9IEpDU19SR0IpCi0gICAgZ290byB1bnN1cHBvcnRlZF9jb2xvcnNwYWNlOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICB7Ci0gICAgZ2ludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGRlYy0+Y2luZm8ubnVtX2NvbXBvbmVudHM7ICsraSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlYywgIlslZF0gaF9zYW1wX2ZhY3Rvcj0lZCwgdl9zYW1wX2ZhY3Rvcj0lZCwgY2lkPSVkIiwKLSAgICAgICAgICBpLCBkZWMtPmNpbmZvLmNvbXBfaW5mb1tpXS5oX3NhbXBfZmFjdG9yLAotICAgICAgICAgIGRlYy0+Y2luZm8uY29tcF9pbmZvW2ldLnZfc2FtcF9mYWN0b3IsCi0gICAgICAgICAgZGVjLT5jaW5mby5jb21wX2luZm9baV0uY29tcG9uZW50X2lkKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIC8qIHByZXBhcmUgZm9yIHJhdyBvdXRwdXQgKi8KLSAgZGVjLT5jaW5mby5kb19mYW5jeV91cHNhbXBsaW5nID0gRkFMU0U7Ci0gIGRlYy0+Y2luZm8uZG9fYmxvY2tfc21vb3RoaW5nID0gRkFMU0U7Ci0gIGRlYy0+Y2luZm8ub3V0X2NvbG9yX3NwYWNlID0gZGVjLT5jaW5mby5qcGVnX2NvbG9yX3NwYWNlOwotICBkZWMtPmNpbmZvLmRjdF9tZXRob2QgPSBkZWMtPmlkY3RfbWV0aG9kOwotICBkZWMtPmNpbmZvLnJhd19kYXRhX291dCA9IFRSVUU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlYywgInN0YXJ0aW5nIGRlY29tcHJlc3MiKTsKLSAgZ3VhcmFudGVlX2h1ZmZfdGFibGVzICgmZGVjLT5jaW5mbyk7Ci0gIGlmICghanBlZ19zdGFydF9kZWNvbXByZXNzICgmZGVjLT5jaW5mbykpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgImZhaWxlZCB0byBzdGFydCBkZWNvbXByZXNzaW9uIGN5Y2xlIik7Ci0gIH0KLQotICAvKiBzYW5pdHkgY2hlY2tzIHRvIGdldCBzYWZlIGFuZCByZWFzb25hYmxlIG91dHB1dCAqLwotICBzd2l0Y2ggKGRlYy0+Y2luZm8uanBlZ19jb2xvcl9zcGFjZSkgewotICAgIGNhc2UgSkNTX0dSQVlTQ0FMRToKLSAgICAgIGlmIChkZWMtPmNpbmZvLm51bV9jb21wb25lbnRzICE9IDEpCi0gICAgICAgIGdvdG8gaW52YWxpZF95dXZyZ2JncmF5c2NhbGU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEpDU19SR0I6Ci0gICAgICBpZiAoZGVjLT5jaW5mby5udW1fY29tcG9uZW50cyAhPSAzIHx8IGRlYy0+Y2luZm8ubWF4X3Zfc2FtcF9mYWN0b3IgPiAxIHx8Ci0gICAgICAgICAgZGVjLT5jaW5mby5tYXhfaF9zYW1wX2ZhY3RvciA+IDEpCi0gICAgICAgIGdvdG8gaW52YWxpZF95dXZyZ2JncmF5c2NhbGU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEpDU19ZQ2JDcjoKLSAgICAgIGlmIChkZWMtPmNpbmZvLm51bV9jb21wb25lbnRzICE9IDMgfHwKLSAgICAgICAgICByX3YgPiAyIHx8IHJfdiA8IGRlYy0+Y2luZm8uY29tcF9pbmZvWzBdLnZfc2FtcF9mYWN0b3IgfHwKLSAgICAgICAgICByX3YgPCBkZWMtPmNpbmZvLmNvbXBfaW5mb1sxXS52X3NhbXBfZmFjdG9yIHx8Ci0gICAgICAgICAgcl9oIDwgZGVjLT5jaW5mby5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciB8fAotICAgICAgICAgIHJfaCA8IGRlYy0+Y2luZm8uY29tcF9pbmZvWzFdLmhfc2FtcF9mYWN0b3IpCi0gICAgICAgIGdvdG8gaW52YWxpZF95dXZyZ2JncmF5c2NhbGU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHdpZHRoID0gZGVjLT5jaW5mby5vdXRwdXRfd2lkdGg7Ci0gIGhlaWdodCA9IGRlYy0+Y2luZm8ub3V0cHV0X2hlaWdodDsKLQotICBpZiAoR19VTkxJS0VMWSAod2lkdGggPCBNSU5fV0lEVEggfHwgd2lkdGggPiBNQVhfV0lEVEggfHwKLSAgICAgICAgICBoZWlnaHQgPCBNSU5fSEVJR0hUIHx8IGhlaWdodCA+IE1BWF9IRUlHSFQpKQotICAgIGdvdG8gd3Jvbmdfc2l6ZTsKLQotICBnc3RfanBlZ19kZWNfbmVnb3RpYXRlIChkZWMsIHdpZHRoLCBoZWlnaHQsIGRlYy0+Y2luZm8uanBlZ19jb2xvcl9zcGFjZSk7Ci0KLSAgc3RhdGUgPSBnc3RfdmlkZW9fZGVjb2Rlcl9nZXRfb3V0cHV0X3N0YXRlIChiZGVjKTsKLSAgcmV0ID0gZ3N0X3ZpZGVvX2RlY29kZXJfYWxsb2NhdGVfb3V0cHV0X2ZyYW1lIChiZGVjLCBmcmFtZSk7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gYWxsb2NfZmFpbGVkOwotCi0gIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJnZmcmFtZSwgJnN0YXRlLT5pbmZvLCBmcmFtZS0+b3V0cHV0X2J1ZmZlciwKLSAgICAgICAgICBHU1RfTUFQX1JFQURXUklURSkpCi0gICAgZ290byBhbGxvY19mYWlsZWQ7Ci0KLSAgaWYgKHNldGptcCAoZGVjLT5qZXJyLnNldGptcF9idWZmZXIpKSB7Ci0gICAgY29kZSA9IGRlYy0+amVyci5wdWIubXNnX2NvZGU7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmdmZyYW1lKTsKLSAgICBnb3RvIGRlY29kZV9lcnJvcjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZWMsICJ3aWR0aCAlZCwgaGVpZ2h0ICVkIiwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgaWYgKGRlYy0+Y2luZm8uanBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7Ci0gICAgZ3N0X2pwZWdfZGVjX2RlY29kZV9yZ2IgKGRlYywgJnZmcmFtZSk7Ci0gIH0gZWxzZSBpZiAoZGVjLT5jaW5mby5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpIHsKLSAgICBnc3RfanBlZ19kZWNfZGVjb2RlX2dyYXlzY2FsZSAoZGVjLCAmdmZyYW1lKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZGVjLCAiZGVjb21wcmVzc2luZyAocmVxaXJlZCBzY2FubGluZSBidWZmZXIgaGVpZ2h0ID0gJXUpIiwKLSAgICAgICAgZGVjLT5jaW5mby5yZWNfb3V0YnVmX2hlaWdodCk7Ci0KLSAgICAvKiBGb3Igc29tZSB3aWR0aHMganBlZ2xpYiByZXF1aXJlcyBtb3JlIGhvcml6b250YWwgcGFkZGluZyB0aGFuIEk0MjAgCi0gICAgICogcHJvdmlkZXMuIEluIHRob3NlIGNhc2VzIHdlIG5lZWQgdG8gZGVjb2RlIGludG8gc2VwYXJhdGUgYnVmZmVycyBhbmQgdGhlbgotICAgICAqIGNvcHkgb3ZlciB0aGUgZGF0YSBpbnRvIG91ciBmaW5hbCBwaWN0dXJlIGJ1ZmZlciwgb3RoZXJ3aXNlIGpwZWdsaWIgbWlnaHQKLSAgICAgKiB3cml0ZSBvdmVyIHRoZSBlbmQgb2YgYSBsaW5lIGludG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lLAotICAgICAqIHJlc3VsdGluZyBpbiBibG9ja3kgYXJ0aWZhY3RzIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHBpY3R1cmUuICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHdpZHRoICUgKGRlYy0+Y2luZm8ubWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSAhPSAwCi0gICAgICAgICAgICB8fCBkZWMtPmNpbmZvLmNvbXBfaW5mb1swXS5oX3NhbXBfZmFjdG9yICE9IDIKLSAgICAgICAgICAgIHx8IGRlYy0+Y2luZm8uY29tcF9pbmZvWzFdLmhfc2FtcF9mYWN0b3IgIT0gMQotICAgICAgICAgICAgfHwgZGVjLT5jaW5mby5jb21wX2luZm9bMl0uaF9zYW1wX2ZhY3RvciAhPSAxKSkgewotICAgICAgR1NUX0NBVF9MT0dfT0JKRUNUIChHU1RfQ0FUX1BFUkZPUk1BTkNFLCBkZWMsCi0gICAgICAgICAgImluZGlyZWN0IGRlY29kaW5nIHVzaW5nIGV4dHJhIGJ1ZmZlciBjb3B5Iik7Ci0gICAgICBnc3RfanBlZ19kZWNfZGVjb2RlX2luZGlyZWN0IChkZWMsICZ2ZnJhbWUsIHJfdiwgcl9oLAotICAgICAgICAgIGRlYy0+Y2luZm8ubnVtX2NvbXBvbmVudHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXQgPSBnc3RfanBlZ19kZWNfZGVjb2RlX2RpcmVjdCAoZGVjLCAmdmZyYW1lKTsKLQotICAgICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgICAgIGdvdG8gZGVjb2RlX2RpcmVjdF9mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmdmZyYW1lKTsKLQotICBpZiAoc2V0am1wIChkZWMtPmplcnIuc2V0am1wX2J1ZmZlcikpIHsKLSAgICBjb2RlID0gZGVjLT5qZXJyLnB1Yi5tc2dfY29kZTsKLSAgICBnb3RvIGRlY29kZV9lcnJvcjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZWMsICJkZWNvbXByZXNzaW5nIGZpbmlzaGVkIik7Ci0gIGpwZWdfZmluaXNoX2RlY29tcHJlc3MgKCZkZWMtPmNpbmZvKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChmcmFtZS0+aW5wdXRfYnVmZmVyLCAmZGVjLT5jdXJyZW50X2ZyYW1lX21hcCk7Ci0gIHJldCA9IGdzdF92aWRlb19kZWNvZGVyX2ZpbmlzaF9mcmFtZSAoYmRlYywgZnJhbWUpOwotICByZWxlYXNlX2ZyYW1lID0gRkFMU0U7Ci0gIG5lZWRfdW5tYXAgPSBGQUxTRTsKLQotZG9uZToKLQotZXhpdDoKLQotICBpZiAobmVlZF91bm1hcCkKLSAgICBnc3RfYnVmZmVyX3VubWFwIChmcmFtZS0+aW5wdXRfYnVmZmVyLCAmZGVjLT5jdXJyZW50X2ZyYW1lX21hcCk7Ci0KLSAgaWYgKHJlbGVhc2VfZnJhbWUpCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfcmVsZWFzZV9mcmFtZSAoYmRlYywgZnJhbWUpOwotCi0gIGlmIChzdGF0ZSkKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKHN0YXRlKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIHNwZWNpYWwgY2FzZXMgKi8KLW5lZWRfbW9yZV9kYXRhOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlYywgIndlIG5lZWQgbW9yZSBkYXRhIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBleGl0OwotICB9Ci0gIC8qIEVSUk9SUyAqLwotd3Jvbmdfc2l6ZToKLSAgewotICAgIEdTVF9WSURFT19ERUNPREVSX0VSUk9SIChkZWMsIDEsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoXygiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIikpLAotICAgICAgICAoIlBpY3R1cmUgaXMgdG9vIHNtYWxsIG9yIHRvbyBiaWcgKCV1eCV1KSIsIHdpZHRoLCBoZWlnaHQpLCByZXQpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZG9uZTsKLSAgfQotZGVjb2RlX2Vycm9yOgotICB7Ci0gICAgZ2NoYXIgZXJyX21zZ1tKTVNHX0xFTkdUSF9NQVhdOwotCi0gICAgZGVjLT5qZXJyLnB1Yi5mb3JtYXRfbWVzc2FnZSAoKGpfY29tbW9uX3B0cikgKCZkZWMtPmNpbmZvKSwgZXJyX21zZyk7Ci0KLSAgICBHU1RfVklERU9fREVDT0RFUl9FUlJPUiAoZGVjLCAxLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKF8oIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIpKSwgKCJEZWNvZGUgZXJyb3IgIyV1OiAlcyIsIGNvZGUsCi0gICAgICAgICAgICBlcnJfbXNnKSwgcmV0KTsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGZyYW1lLT5pbnB1dF9idWZmZXIsICZkZWMtPmN1cnJlbnRfZnJhbWVfbWFwKTsKLSAgICBnc3RfdmlkZW9fZGVjb2Rlcl9kcm9wX2ZyYW1lIChiZGVjLCBmcmFtZSk7Ci0gICAgcmVsZWFzZV9mcmFtZSA9IEZBTFNFOwotICAgIG5lZWRfdW5tYXAgPSBGQUxTRTsKLSAgICBqcGVnX2Fib3J0X2RlY29tcHJlc3MgKCZkZWMtPmNpbmZvKTsKLQotICAgIGdvdG8gZG9uZTsKLSAgfQotZGVjb2RlX2RpcmVjdF9mYWlsZWQ6Ci0gIHsKLSAgICAvKiBhbHJlYWR5IHBvc3RlZCBhbiBlcnJvciBtZXNzYWdlICovCi0gICAganBlZ19hYm9ydF9kZWNvbXByZXNzICgmZGVjLT5jaW5mbyk7Ci0gICAgZ290byBkb25lOwotICB9Ci1hbGxvY19mYWlsZWQ6Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqcmVhc29uOwotCi0gICAgcmVhc29uID0gZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJmYWlsZWQgdG8gYWxsb2MgYnVmZmVyLCByZWFzb24gJXMiLCByZWFzb24pOwotICAgIC8qIFJlc2V0IGZvciBuZXh0IHRpbWUgKi8KLSAgICBqcGVnX2Fib3J0X2RlY29tcHJlc3MgKCZkZWMtPmNpbmZvKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX0VPUyAmJiByZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcgJiYKLSAgICAgICAgcmV0ICE9IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICAgIEdTVF9WSURFT19ERUNPREVSX0VSUk9SIChkZWMsIDEsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAgIChfKCJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiKSksCi0gICAgICAgICAgKCJCdWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQsIHJlYXNvbjogJXMiLCByZWFzb24pLCByZXQpOwotICAgICAganBlZ19hYm9ydF9kZWNvbXByZXNzICgmZGVjLT5jaW5mbyk7Ci0gICAgfQotICAgIGdvdG8gZXhpdDsKLSAgfQotY29tcG9uZW50c19ub3Rfc3VwcG9ydGVkOgotICB7Ci0gICAgR1NUX1ZJREVPX0RFQ09ERVJfRVJST1IgKGRlYywgMSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiKSksCi0gICAgICAgICgibnVtYmVyIG9mIGNvbXBvbmVudHMgbm90IHN1cHBvcnRlZDogJWQgKG1heCAzKSIsCi0gICAgICAgICAgICBkZWMtPmNpbmZvLm51bV9jb21wb25lbnRzKSwgcmV0KTsKLSAgICBqcGVnX2Fib3J0X2RlY29tcHJlc3MgKCZkZWMtPmNpbmZvKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXVuc3VwcG9ydGVkX2NvbG9yc3BhY2U6Ci0gIHsKLSAgICBHU1RfVklERU9fREVDT0RFUl9FUlJPUiAoZGVjLCAxLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKF8oIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIpKSwKLSAgICAgICAgKCJQaWN0dXJlIGhhcyB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGNvbG91cnNwYWNlIiksIHJldCk7Ci0gICAganBlZ19hYm9ydF9kZWNvbXByZXNzICgmZGVjLT5jaW5mbyk7Ci0gICAgZ290byBkb25lOwotICB9Ci1pbnZhbGlkX3l1dnJnYmdyYXlzY2FsZToKLSAgewotICAgIEdTVF9WSURFT19ERUNPREVSX0VSUk9SIChkZWMsIDEsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoXygiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIikpLAotICAgICAgICAoIlBpY3R1cmUgaXMgY29ycnVwdCBvciB1bmhhbmRsZWQgWVVWL1JHQi9ncmF5c2NhbGUgbGF5b3V0IiksIHJldCk7Ci0gICAganBlZ19hYm9ydF9kZWNvbXByZXNzICgmZGVjLT5jaW5mbyk7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2pwZWdfZGVjX2RlY2lkZV9hbGxvY2F0aW9uIChHc3RWaWRlb0RlY29kZXIgKiBiZGVjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gTlVMTDsKLSAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0KLSAgaWYgKCFHU1RfVklERU9fREVDT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGVjaWRlX2FsbG9jYXRpb24gKGJkZWMsIHF1ZXJ5KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzIChxdWVyeSkgPiAwKQotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sIChxdWVyeSwgMCwgJnBvb2wsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIGlmIChwb29sID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgaWYgKGdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YSAocXVlcnksIEdTVF9WSURFT19NRVRBX0FQSV9UWVBFLCBOVUxMKSkgewotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICB9Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfanBlZ19kZWNfc2lua19ldmVudCAoR3N0VmlkZW9EZWNvZGVyICogYmRlYywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudDsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSAhPSBHU1RfRVZFTlRfU0VHTUVOVCkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7Ci0KLSAgaWYgKHNlZ21lbnQtPmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X3BhY2tldGl6ZWQgKGJkZWMsIFRSVUUpOwotICBlbHNlCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X3BhY2tldGl6ZWQgKGJkZWMsIEZBTFNFKTsKLQotZG9uZToKLSAgcmV0dXJuIEdTVF9WSURFT19ERUNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChiZGVjLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2pwZWdfZGVjX3N0YXJ0IChHc3RWaWRlb0RlY29kZXIgKiBiZGVjKQotewotICBHc3RKcGVnRGVjICpkZWMgPSAoR3N0SnBlZ0RlYyAqKSBiZGVjOwotCi0gIGRlYy0+c2F3X2hlYWRlciA9IEZBTFNFOwotICBkZWMtPnBhcnNlX2VudHJvcHlfbGVuID0gMDsKLSAgZGVjLT5wYXJzZV9yZXN5bmMgPSBGQUxTRTsKLQotICBnc3RfdmlkZW9fZGVjb2Rlcl9zZXRfcGFja2V0aXplZCAoYmRlYywgRkFMU0UpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qcGVnX2RlY19mbHVzaCAoR3N0VmlkZW9EZWNvZGVyICogYmRlYykKLXsKLSAgR3N0SnBlZ0RlYyAqZGVjID0gKEdzdEpwZWdEZWMgKikgYmRlYzsKLQotICBqcGVnX2Fib3J0X2RlY29tcHJlc3MgKCZkZWMtPmNpbmZvKTsKLSAgZGVjLT5wYXJzZV9lbnRyb3B5X2xlbiA9IDA7Ci0gIGRlYy0+cGFyc2VfcmVzeW5jID0gRkFMU0U7Ci0gIGRlYy0+c2F3X2hlYWRlciA9IEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdfZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RKcGVnRGVjICpkZWM7Ci0KLSAgZGVjID0gR1NUX0pQRUdfREVDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9JRENUX01FVEhPRDoKLSAgICAgIGRlYy0+aWRjdF9tZXRob2QgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0gICAgY2FzZSBQUk9QX01BWF9FUlJPUlM6Ci0gICAgICBnX2F0b21pY19pbnRfc2V0ICgmZGVjLT5tYXhfZXJyb3JzLCBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qcGVnX2RlY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SnBlZ0RlYyAqZGVjOwotCi0gIGRlYyA9IEdTVF9KUEVHX0RFQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfSURDVF9NRVRIT0Q6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZGVjLT5pZGN0X21ldGhvZCk7Ci0gICAgICBicmVhazsKLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0gICAgY2FzZSBQUk9QX01BWF9FUlJPUlM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnX2F0b21pY19pbnRfZ2V0ICgmZGVjLT5tYXhfZXJyb3JzKSk7Ci0gICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfanBlZ19kZWNfc3RvcCAoR3N0VmlkZW9EZWNvZGVyICogYmRlYykKLXsKLSAgR3N0SnBlZ0RlYyAqZGVjID0gKEdzdEpwZWdEZWMgKikgYmRlYzsKLQotICBnc3RfanBlZ19kZWNfZnJlZV9idWZmZXJzIChkZWMpOwotCi0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2pwZWcvZ3N0anBlZ2RlYy5oIGIvZXh0L2pwZWcvZ3N0anBlZ2RlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGZhMmZjLi4wMDAwMDAwCi0tLSBhL2V4dC9qcGVnL2dzdGpwZWdkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCUF1dGhvciA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9KUEVHX0RFQ19IX18KLSNkZWZpbmUgX19HU1RfSlBFR19ERUNfSF9fCi0KLQotI2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi0vKiB0aGlzIGlzIGEgaGFjayBoYWNrIGhhY2sgdG8gZ2V0IGFyb3VuZCBqcGVnbGliIGhlYWRlciBidWdzLi4uICovCi0jaWZkZWYgSEFWRV9TVERMSUJfSAotIyB1bmRlZiBIQVZFX1NURExJQl9ICi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGpwZWdsaWIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0pQRUdfREVDIFwKLSAgKGdzdF9qcGVnX2RlY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSlBFR19ERUMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9KUEVHX0RFQyxHc3RKcGVnRGVjKSkKLSNkZWZpbmUgR1NUX0pQRUdfREVDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0pQRUdfREVDLEdzdEpwZWdEZWNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19KUEVHX0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0pQRUdfREVDKSkKLSNkZWZpbmUgR1NUX0lTX0pQRUdfREVDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0pQRUdfREVDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEpwZWdEZWMgICAgICAgICAgIEdzdEpwZWdEZWM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SnBlZ0RlY0NsYXNzICAgICAgR3N0SnBlZ0RlY0NsYXNzOwotCi1zdHJ1Y3QgR3N0SnBlZ0RlY0Vycm9yTWdyIHsKLSAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICAgIHB1YjsgICAvKiBwdWJsaWMgZmllbGRzICovCi0gIGptcF9idWYgICAgICAgICAgICAgICAgICBzZXRqbXBfYnVmZmVyOwotfTsKLQotc3RydWN0IEdzdEpwZWdEZWNTb3VyY2VNZ3IgewotICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICAgcHViOyAgIC8qIHB1YmxpYyBmaWVsZHMgKi8KLSAgR3N0SnBlZ0RlYyAgICAgICAgICAgICAgKmRlYzsKLX07Ci0KLS8qIENhbid0IHVzZSBHc3RCYXNlVHJhbnNmb3JtLCBiZWNhdXNlIEdzdEJhc2VUcmFuc2Zvcm0KLSAqIGRvZXNuJ3QgaGFuZGxlIHRoZSBOIGJ1ZmZlcnMgaW4sIDEgYnVmZmVyIG91dCBjYXNlLAotICogYnV0IG9ubHkgdGhlIDEtaW4gMS1vdXQgY2FzZSAqLwotc3RydWN0IF9Hc3RKcGVnRGVjIHsKLSAgR3N0VmlkZW9EZWNvZGVyIGRlY29kZXI7Ci0KLSAgLyogbmVnb3RpYXRlZCBzdGF0ZSAqLwotICBHc3RWaWRlb0NvZGVjU3RhdGUgKmlucHV0X3N0YXRlOwotICBHc3RWaWRlb0NvZGVjRnJhbWUgKmN1cnJlbnRfZnJhbWU7Ci0gIEdzdE1hcEluZm8gY3VycmVudF9mcmFtZV9tYXA7Ci0KLSAgLyogcGFyc2Ugc3RhdGUgKi8KLSAgZ2Jvb2xlYW4gc2F3X2hlYWRlcjsKLSAgZ2ludCAgICAgcGFyc2VfZW50cm9weV9sZW47Ci0gIGdpbnQgICAgIHBhcnNlX3Jlc3luYzsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdpbnQgICAgIGlkY3RfbWV0aG9kOwotICBnaW50ICAgICBtYXhfZXJyb3JzOyAgLyogQVRPTUlDICovCi0KLSAgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgY2luZm87Ci0gIHN0cnVjdCBHc3RKcGVnRGVjRXJyb3JNZ3IgICAgIGplcnI7Ci0gIHN0cnVjdCBHc3RKcGVnRGVjU291cmNlTWdyICAgIGpzcmM7Ci0KLSAgLyogYXJyYXlzIGZvciBpbmRpcmVjdCBkZWNvZGluZyAqLwotICBnYm9vbGVhbiBpZHJfd2lkdGhfYWxsb2NhdGVkOwotICBndWNoYXIgKmlkcl95WzE2XSwqaWRyX3VbMTZdLCppZHJfdlsxNl07Ci0gIC8qIGN1cnJlbnQgKHBhcnNlZCkgaW1hZ2Ugc2l6ZSAqLwotICBndWludCAgICByZW1faW1nX2xlbjsKLX07Ci0KLXN0cnVjdCBfR3N0SnBlZ0RlY0NsYXNzIHsKLSAgR3N0VmlkZW9EZWNvZGVyQ2xhc3MgZGVjb2Rlcl9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9qcGVnX2RlY19nZXRfdHlwZSh2b2lkKTsKLQotCi1HX0VORF9ERUNMUwotCi0KLSNlbmRpZiAvKiBfX0dTVF9KUEVHX0RFQ19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9qcGVnL2dzdGpwZWdlbmMuYyBiL2V4dC9qcGVnL2dzdGpwZWdlbmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhZTZkYy4uMDAwMDAwMAotLS0gYS9leHQvanBlZy9nc3RqcGVnZW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbGxhYm9yYSBMdGQuCi0gKglBdXRob3IgOiBFZHdhcmQgSGVydmV5IDxlZHdhcmRAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtanBlZ2VuYwotICoKLSAqIEVuY29kZXMganBlZyBpbWFnZXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz01MCAhIHZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9JyhmcmFjdGlvbiknNS8xICEganBlZ2VuYyAhIGF2aW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPW1qcGVnLmF2aQotICogXXwgYSBwaXBlbGluZSB0byBtdXggNSBKUEVHIGZyYW1lcyBwZXIgc2Vjb25kIGludG8gYSAxMCBzZWMuIGxvbmcgbW90aW9uIGpwZWcKLSAqIGF2aS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0anBlZ2VuYy5oIgotI2luY2x1ZGUgImdzdGpwZWcuaCIKLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvYmFzZS5oPgotCi0vKiBleHBlcmltZW50YWwgKi8KLS8qIHNldHRpbmcgc21vb3RoaWcgc2VlbXMgdG8gaGF2ZSBubyBlZmZlY3QgaW4gbGliamVwZWcKLSNkZWZpbmUgRU5BQkxFX1NNT09USElORyAxCi0qLwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChqcGVnZW5jX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGpwZWdlbmNfZGVidWcKLQotI2RlZmluZSBKUEVHX0RFRkFVTFRfUVVBTElUWSA4NQotI2RlZmluZSBKUEVHX0RFRkFVTFRfU01PT1RISU5HIDAKLSNkZWZpbmUgSlBFR19ERUZBVUxUX0lEQ1RfTUVUSE9ECUpEQ1RfRkFTVEVTVAotCi0vKiBKcGVnRW5jIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUVVBTElUWSwKLSAgUFJPUF9TTU9PVEhJTkcsCi0gIFBST1BfSURDVF9NRVRIT0QKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9qcGVnZW5jX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2pwZWdlbmNfcmVzeW5jIChHc3RKcGVnRW5jICoganBlZ2VuYyk7Ci1zdGF0aWMgdm9pZCBnc3RfanBlZ2VuY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfanBlZ2VuY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfanBlZ2VuY19zdGFydCAoR3N0VmlkZW9FbmNvZGVyICogYmVuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2pwZWdlbmNfc3RvcCAoR3N0VmlkZW9FbmNvZGVyICogYmVuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2pwZWdlbmNfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjU3RhdGUgKiBzdGF0ZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfanBlZ2VuY19oYW5kbGVfZnJhbWUgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsCi0gICAgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpOwotc3RhdGljIGdib29sZWFuIGdzdF9qcGVnZW5jX3Byb3Bvc2VfYWxsb2NhdGlvbiAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotLyogc3RhdGljIGd1aW50IGdzdF9qcGVnZW5jX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07ICovCi0KLSNkZWZpbmUgZ3N0X2pwZWdlbmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0SnBlZ0VuYywgZ3N0X2pwZWdlbmMsIEdTVF9UWVBFX1ZJREVPX0VOQ09ERVIpOwotCi0vKiAqSU5ERU5ULU9GRiogKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfanBlZ2VuY19zaW5rX3BhZF90ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UKLSAgICAgICAgKCJ7IEk0MjAsIFlWMTIsIFlVWTIsIFVZVlksIFk0MUIsIFk0MkIsIFlWWVUsIFk0NDQsIE5WMjEsICIKLSAgICAgICAgICJOVjEyLCBSR0IsIEJHUiwgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgR1JBWTggfSIpKQotICAgICk7Ci0vKiAqSU5ERU5ULU9OKiAqLwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2pwZWdlbmNfc3JjX3BhZF90ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiaW1hZ2UvanBlZywgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDE2LCA2NTUzNSBdLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSBbIDE2LCA2NTUzNSBdLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMC8xLCBNQVggXSwgIgotICAgICAgICAic29mLW1hcmtlciA9IChpbnQpIHsgMCwgMSwgMiwgOSB9IikKLSAgICApOwotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdlbmNfY2xhc3NfaW5pdCAoR3N0SnBlZ0VuY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RWaWRlb0VuY29kZXJDbGFzcyAqdmVuY19jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIHZlbmNfY2xhc3MgPSAoR3N0VmlkZW9FbmNvZGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfanBlZ2VuY19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2pwZWdlbmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfanBlZ2VuY19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9RVUFMSVRZLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInF1YWxpdHkiLCAiUXVhbGl0eSIsICJRdWFsaXR5IG9mIGVuY29kaW5nIiwKLSAgICAgICAgICAwLCAxMDAsIEpQRUdfREVGQVVMVF9RVUFMSVRZLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0jaWZkZWYgRU5BQkxFX1NNT09USElORwotICAvKiBkaXNhYmxlZCwgc2luY2UgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TTU9PVEhJTkcsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgic21vb3RoaW5nIiwgIlNtb290aGluZyIsICJTbW9vdGhpbmcgZmFjdG9yIiwKLSAgICAgICAgICAwLCAxMDAsIEpQRUdfREVGQVVMVF9TTU9PVEhJTkcsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0jZW5kaWYKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lEQ1RfTUVUSE9ELAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJpZGN0LW1ldGhvZCIsICJJRENUIE1ldGhvZCIsCi0gICAgICAgICAgIlRoZSBJRENUIGFsZ29yaXRobSB0byB1c2UiLCBHU1RfVFlQRV9JRENUX01FVEhPRCwKLSAgICAgICAgICBKUEVHX0RFRkFVTFRfSURDVF9NRVRIT0QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2pwZWdlbmNfc2lua19wYWRfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfanBlZ2VuY19zcmNfcGFkX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIkpQRUcgaW1hZ2UgZW5jb2RlciIsCi0gICAgICAiQ29kZWMvRW5jb2Rlci9JbWFnZSIsICJFbmNvZGUgaW1hZ2VzIGluIEpQRUcgZm9ybWF0IiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAdHZkLmJlPiIpOwotCi0gIHZlbmNfY2xhc3MtPnN0YXJ0ID0gZ3N0X2pwZWdlbmNfc3RhcnQ7Ci0gIHZlbmNfY2xhc3MtPnN0b3AgPSBnc3RfanBlZ2VuY19zdG9wOwotICB2ZW5jX2NsYXNzLT5zZXRfZm9ybWF0ID0gZ3N0X2pwZWdlbmNfc2V0X2Zvcm1hdDsKLSAgdmVuY19jbGFzcy0+aGFuZGxlX2ZyYW1lID0gZ3N0X2pwZWdlbmNfaGFuZGxlX2ZyYW1lOwotICB2ZW5jX2NsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSBnc3RfanBlZ2VuY19wcm9wb3NlX2FsbG9jYXRpb247Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGpwZWdlbmNfZGVidWcsICJqcGVnZW5jIiwgMCwKLSAgICAgICJKUEVHIGVuY29kaW5nIGVsZW1lbnQiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qcGVnZW5jX2luaXRfZGVzdGluYXRpb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQotewotICBHU1RfREVCVUcgKCJnc3RfanBlZ2VuY19jaGFpbjogaW5pdF9kZXN0aW5hdGlvbiIpOwotfQotCi1zdGF0aWMgdm9pZAotZW5zdXJlX21lbW9yeSAoR3N0SnBlZ0VuYyAqIGpwZWdlbmMpCi17Ci0gIEdzdE1lbW9yeSAqbmV3X21lbW9yeTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdzaXplIG9sZF9zaXplLCBkZXNpcmVkX3NpemUsIG5ld19zaXplOwotICBndWludDggKm5ld19kYXRhOwotICBzdGF0aWMgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXMgPSB7IDAsIDMsIDAsIDAsIH07Ci0KLSAgb2xkX3NpemUgPSBqcGVnZW5jLT5vdXRwdXRfbWFwLnNpemU7Ci0gIGlmIChvbGRfc2l6ZSA9PSAwKQotICAgIGRlc2lyZWRfc2l6ZSA9IGpwZWdlbmMtPmJ1ZnNpemU7Ci0gIGVsc2UKLSAgICBkZXNpcmVkX3NpemUgPSBvbGRfc2l6ZSAqIDI7Ci0KLSAgLyogT3VyIG91dHB1dCBtZW1vcnkgd2Fzbid0IGJpZyBlbm91Z2guCi0gICAqIE1ha2UgYSBuZXcgbWVtb3J5IHRoYXQncyB0d2ljZSB0aGUgc2l6ZSwgKi8KLSAgbmV3X21lbW9yeSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIGRlc2lyZWRfc2l6ZSwgJnBhcmFtcyk7Ci0gIGdzdF9tZW1vcnlfbWFwIChuZXdfbWVtb3J5LCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gIG5ld19kYXRhID0gbWFwLmRhdGE7Ci0gIG5ld19zaXplID0gbWFwLnNpemU7Ci0KLSAgLyogY29weSBwcmV2aW91cyBkYXRhIGlmIGFueSAqLwotICBpZiAoanBlZ2VuYy0+b3V0cHV0X21lbSkgewotICAgIG1lbWNweSAobmV3X2RhdGEsIGpwZWdlbmMtPm91dHB1dF9tYXAuZGF0YSwgb2xkX3NpemUpOwotICAgIGdzdF9tZW1vcnlfdW5tYXAgKGpwZWdlbmMtPm91dHB1dF9tZW0sICZqcGVnZW5jLT5vdXRwdXRfbWFwKTsKLSAgICBnc3RfbWVtb3J5X3VucmVmIChqcGVnZW5jLT5vdXRwdXRfbWVtKTsKLSAgfQotCi0gIC8qIGRyb3AgaXQgaW50byBwbGFjZSwgKi8KLSAganBlZ2VuYy0+b3V0cHV0X21lbSA9IG5ld19tZW1vcnk7Ci0gIGpwZWdlbmMtPm91dHB1dF9tYXAgPSBtYXA7Ci0KLSAgLyogYW5kIGxhc3QsIHVwZGF0ZSBsaWJqcGVnIG9uIHdoZXJlIHRvIHdvcmsuICovCi0gIGpwZWdlbmMtPmpkZXN0Lm5leHRfb3V0cHV0X2J5dGUgPSBuZXdfZGF0YSArIG9sZF9zaXplOwotICBqcGVnZW5jLT5qZGVzdC5mcmVlX2luX2J1ZmZlciA9IG5ld19zaXplIC0gb2xkX3NpemU7Ci19Ci0KLXN0YXRpYyBib29sZWFuCi1nc3RfanBlZ2VuY19mbHVzaF9kZXN0aW5hdGlvbiAoal9jb21wcmVzc19wdHIgY2luZm8pCi17Ci0gIEdzdEpwZWdFbmMgKmpwZWdlbmMgPSAoR3N0SnBlZ0VuYyAqKSAoY2luZm8tPmNsaWVudF9kYXRhKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChqcGVnZW5jLAotICAgICAgImdzdF9qcGVnZW5jX2NoYWluOiBmbHVzaF9kZXN0aW5hdGlvbjogYnVmZmVyIHRvbyBzbWFsbCIpOwotCi0gIGVuc3VyZV9tZW1vcnkgKGpwZWdlbmMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdlbmNfdGVybV9kZXN0aW5hdGlvbiAoal9jb21wcmVzc19wdHIgY2luZm8pCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RKcGVnRW5jICpqcGVnZW5jID0gKEdzdEpwZWdFbmMgKikgKGNpbmZvLT5jbGllbnRfZGF0YSk7Ci0gIGdzaXplIG1lbW9yeV9zaXplID0ganBlZ2VuYy0+b3V0cHV0X21hcC5zaXplIC0ganBlZ2VuYy0+amRlc3QuZnJlZV9pbl9idWZmZXI7Ci0gIEdzdEJ5dGVSZWFkZXIgcmVhZGVyID0KLSAgICAgIEdTVF9CWVRFX1JFQURFUl9JTklUIChqcGVnZW5jLT5vdXRwdXRfbWFwLmRhdGEsIG1lbW9yeV9zaXplKTsKLSAgZ3VpbnQxNiBtYXJrZXI7Ci0gIGdpbnQgc29mX21hcmtlciA9IC0xOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGpwZWdlbmMsICJnc3RfanBlZ2VuY19jaGFpbjogdGVybV9zb3VyY2UiKTsKLQotICAvKiBGaW5kIHRoZSBTT0YgbWFya2VyICovCi0gIHdoaWxlIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnJlYWRlciwgJm1hcmtlcikpIHsKLSAgICAvKiBTT0YgbWFya2VyICovCi0gICAgaWYgKG1hcmtlciA+PiA0ID09IDB4MGZmYykgewotICAgICAgc29mX21hcmtlciA9IG1hcmtlciAmIDB4NDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGdzdF9tZW1vcnlfdW5tYXAgKGpwZWdlbmMtPm91dHB1dF9tZW0sICZqcGVnZW5jLT5vdXRwdXRfbWFwKTsKLSAgLyogVHJpbSB0aGUgYnVmZmVyIHNpemUuIHdlIHdpbGwgcHVzaCBpdCBpbiB0aGUgY2hhaW4gZnVuY3Rpb24gKi8KLSAgZ3N0X21lbW9yeV9yZXNpemUgKGpwZWdlbmMtPm91dHB1dF9tZW0sIDAsIG1lbW9yeV9zaXplKTsKLSAganBlZ2VuYy0+b3V0cHV0X21hcC5kYXRhID0gTlVMTDsKLSAganBlZ2VuYy0+b3V0cHV0X21hcC5zaXplID0gMDsKLQotICBpZiAoanBlZ2VuYy0+c29mX21hcmtlciAhPSBzb2ZfbWFya2VyKSB7Ci0gICAgR3N0VmlkZW9Db2RlY1N0YXRlICpvdXRwdXQ7Ci0gICAgb3V0cHV0ID0KLSAgICAgICAgZ3N0X3ZpZGVvX2VuY29kZXJfc2V0X291dHB1dF9zdGF0ZSAoR1NUX1ZJREVPX0VOQ09ERVIgKGpwZWdlbmMpLAotICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgiaW1hZ2UvanBlZyIsICJzb2YtbWFya2VyIiwgR19UWVBFX0lOVCwgc29mX21hcmtlciwKLSAgICAgICAgICAgIE5VTEwpLCBqcGVnZW5jLT5pbnB1dF9zdGF0ZSk7Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChvdXRwdXQpOwotICAgIGpwZWdlbmMtPnNvZl9tYXJrZXIgPSBzb2ZfbWFya2VyOwotICB9Ci0KLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGdzdF9idWZmZXJfY29weV9pbnRvIChvdXRidWYsIGpwZWdlbmMtPmN1cnJlbnRfZnJhbWUtPmlucHV0X2J1ZmZlciwKLSAgICAgIEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSwgMCwgLTEpOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKG91dGJ1ZiwganBlZ2VuYy0+b3V0cHV0X21lbSk7Ci0gIGpwZWdlbmMtPm91dHB1dF9tZW0gPSBOVUxMOwotCi0gIGpwZWdlbmMtPmN1cnJlbnRfZnJhbWUtPm91dHB1dF9idWZmZXIgPSBvdXRidWY7Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmanBlZ2VuYy0+Y3VycmVudF92ZnJhbWUpOwotCi0gIEdTVF9WSURFT19DT0RFQ19GUkFNRV9TRVRfU1lOQ19QT0lOVCAoanBlZ2VuYy0+Y3VycmVudF9mcmFtZSk7Ci0KLSAganBlZ2VuYy0+cmVzID0gZ3N0X3ZpZGVvX2VuY29kZXJfZmluaXNoX2ZyYW1lIChHU1RfVklERU9fRU5DT0RFUiAoanBlZ2VuYyksCi0gICAgICBqcGVnZW5jLT5jdXJyZW50X2ZyYW1lKTsKLSAganBlZ2VuYy0+Y3VycmVudF9mcmFtZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ2VuY19pbml0IChHc3RKcGVnRW5jICoganBlZ2VuYykKLXsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfVklERU9fRU5DT0RFUl9TSU5LX1BBRCAoanBlZ2VuYykpOwotCi0gIC8qIHNldHVwIGpwZWdsaWIgKi8KLSAgbWVtc2V0ICgmanBlZ2VuYy0+Y2luZm8sIDAsIHNpemVvZiAoanBlZ2VuYy0+Y2luZm8pKTsKLSAgbWVtc2V0ICgmanBlZ2VuYy0+amVyciwgMCwgc2l6ZW9mIChqcGVnZW5jLT5qZXJyKSk7Ci0gIGpwZWdlbmMtPmNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yICgmanBlZ2VuYy0+amVycik7Ci0gIGpwZWdfY3JlYXRlX2NvbXByZXNzICgmanBlZ2VuYy0+Y2luZm8pOwotCi0gIGpwZWdlbmMtPmpkZXN0LmluaXRfZGVzdGluYXRpb24gPSBnc3RfanBlZ2VuY19pbml0X2Rlc3RpbmF0aW9uOwotICBqcGVnZW5jLT5qZGVzdC5lbXB0eV9vdXRwdXRfYnVmZmVyID0gZ3N0X2pwZWdlbmNfZmx1c2hfZGVzdGluYXRpb247Ci0gIGpwZWdlbmMtPmpkZXN0LnRlcm1fZGVzdGluYXRpb24gPSBnc3RfanBlZ2VuY190ZXJtX2Rlc3RpbmF0aW9uOwotICBqcGVnZW5jLT5jaW5mby5kZXN0ID0gJmpwZWdlbmMtPmpkZXN0OwotICBqcGVnZW5jLT5jaW5mby5jbGllbnRfZGF0YSA9IGpwZWdlbmM7Ci0KLSAgLyogaW5pdCBwcm9wZXJ0aWVzICovCi0gIGpwZWdlbmMtPnF1YWxpdHkgPSBKUEVHX0RFRkFVTFRfUVVBTElUWTsKLSAganBlZ2VuYy0+c21vb3RoaW5nID0gSlBFR19ERUZBVUxUX1NNT09USElORzsKLSAganBlZ2VuYy0+aWRjdF9tZXRob2QgPSBKUEVHX0RFRkFVTFRfSURDVF9NRVRIT0Q7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfanBlZ2VuY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0SnBlZ0VuYyAqZmlsdGVyID0gR1NUX0pQRUdFTkMgKG9iamVjdCk7Ci0KLSAganBlZ19kZXN0cm95X2NvbXByZXNzICgmZmlsdGVyLT5jaW5mbyk7Ci0KLSAgaWYgKGZpbHRlci0+aW5wdXRfc3RhdGUpCi0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChmaWx0ZXItPmlucHV0X3N0YXRlKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2pwZWdlbmNfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwgR3N0VmlkZW9Db2RlY1N0YXRlICogc3RhdGUpCi17Ci0gIEdzdEpwZWdFbmMgKmVuYyA9IEdTVF9KUEVHRU5DIChlbmNvZGVyKTsKLSAgZ2ludCBpOwotICBHc3RWaWRlb0luZm8gKmluZm8gPSAmc3RhdGUtPmluZm87Ci0KLSAgaWYgKGVuYy0+aW5wdXRfc3RhdGUpCi0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChlbmMtPmlucHV0X3N0YXRlKTsKLSAgZW5jLT5pbnB1dF9zdGF0ZSA9IGdzdF92aWRlb19jb2RlY19zdGF0ZV9yZWYgKHN0YXRlKTsKLQotICAvKiBwcmVwYXJlIGEgY2FjaGVkIGltYWdlIGRlc2NyaXB0aW9uICAqLwotICBlbmMtPmNoYW5uZWxzID0gR1NUX1ZJREVPX0lORk9fTl9DT01QT05FTlRTIChpbmZvKTsKLQotICAvKiAuLi4gYnV0IGFueSBhbHBoYSBpcyBkaXNyZWdhcmRlZCBpbiBlbmNvZGluZyAqLwotICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfR1JBWSAoaW5mbykpCi0gICAgZW5jLT5jaGFubmVscyA9IDE7Ci0KLSAgZW5jLT5oX21heF9zYW1wID0gMDsKLSAgZW5jLT52X21heF9zYW1wID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IGVuYy0+Y2hhbm5lbHM7ICsraSkgewotICAgIGVuYy0+Y3dpZHRoW2ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9XSURUSCAoaW5mbywgaSk7Ci0gICAgZW5jLT5jaGVpZ2h0W2ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9IRUlHSFQgKGluZm8sIGkpOwotICAgIGVuYy0+aW5jW2ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9QU1RSSURFIChpbmZvLCBpKTsKLSAgICBlbmMtPmhfc2FtcFtpXSA9Ci0gICAgICAgIEdTVF9ST1VORF9VUF80IChHU1RfVklERU9fSU5GT19XSURUSCAoaW5mbykpIC8gZW5jLT5jd2lkdGhbaV07Ci0gICAgZW5jLT5oX21heF9zYW1wID0gTUFYIChlbmMtPmhfbWF4X3NhbXAsIGVuYy0+aF9zYW1wW2ldKTsKLSAgICBlbmMtPnZfc2FtcFtpXSA9Ci0gICAgICAgIEdTVF9ST1VORF9VUF80IChHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pKSAvIGVuYy0+Y2hlaWdodFtpXTsKLSAgICBlbmMtPnZfbWF4X3NhbXAgPSBNQVggKGVuYy0+dl9tYXhfc2FtcCwgZW5jLT52X3NhbXBbaV0pOwotICB9Ci0gIC8qIHNhbXAgc2hvdWxkIG9ubHkgYmUgMSwgMiBvciA0ICovCi0gIGdfYXNzZXJ0IChlbmMtPmhfbWF4X3NhbXAgPD0gNCk7Ci0gIGdfYXNzZXJ0IChlbmMtPnZfbWF4X3NhbXAgPD0gNCk7Ci0KLSAgLyogbm93IGludmVydCAqLwotICAvKiBtYXhpbXVtIGlzIGludmFyaWFudCwgYXMgb25lIG9mIHRoZSBjb21wb25lbnRzIHNob3VsZCBoYXZlIHNhbXAgMSAqLwotICBmb3IgKGkgPSAwOyBpIDwgZW5jLT5jaGFubmVsczsgKytpKSB7Ci0gICAgR1NUX0RFQlVHICgiJWQgJWQiLCBlbmMtPmhfc2FtcFtpXSwgZW5jLT5oX21heF9zYW1wKTsKLSAgICBlbmMtPmhfc2FtcFtpXSA9IGVuYy0+aF9tYXhfc2FtcCAvIGVuYy0+aF9zYW1wW2ldOwotICAgIGVuYy0+dl9zYW1wW2ldID0gZW5jLT52X21heF9zYW1wIC8gZW5jLT52X3NhbXBbaV07Ci0gIH0KLSAgZW5jLT5wbGFuYXIgPSAoZW5jLT5pbmNbMF0gPT0gMSAmJiBlbmMtPmluY1sxXSA9PSAxICYmIGVuYy0+aW5jWzJdID09IDEpOwotCi0gIGdzdF9qcGVnZW5jX3Jlc3luYyAoZW5jKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9qcGVnZW5jX3Jlc3luYyAoR3N0SnBlZ0VuYyAqIGpwZWdlbmMpCi17Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbzsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGksIGo7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoanBlZ2VuYywgInJlc3luYyIpOwotCi0gIGlmICghanBlZ2VuYy0+aW5wdXRfc3RhdGUpCi0gICAgcmV0dXJuOwotCi0gIGluZm8gPSAmanBlZ2VuYy0+aW5wdXRfc3RhdGUtPmluZm87Ci0KLSAganBlZ2VuYy0+Y2luZm8uaW1hZ2Vfd2lkdGggPSB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKTsKLSAganBlZ2VuYy0+Y2luZm8uaW1hZ2VfaGVpZ2h0ID0gaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbmZvKTsKLSAganBlZ2VuYy0+Y2luZm8uaW5wdXRfY29tcG9uZW50cyA9IGpwZWdlbmMtPmNoYW5uZWxzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGpwZWdlbmMsICJ3aWR0aCAlZCwgaGVpZ2h0ICVkIiwgd2lkdGgsIGhlaWdodCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGpwZWdlbmMsICJmb3JtYXQgJWQiLCBHU1RfVklERU9fSU5GT19GT1JNQVQgKGluZm8pKTsKLQotICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfUkdCIChpbmZvKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGpwZWdlbmMsICJSR0IiKTsKLSAgICBqcGVnZW5jLT5jaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19SR0I7Ci0gIH0gZWxzZSBpZiAoR1NUX1ZJREVPX0lORk9fSVNfR1JBWSAoaW5mbykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqcGVnZW5jLCAiZ3JheSIpOwotICAgIGpwZWdlbmMtPmNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqcGVnZW5jLCAiWVVWIik7Ci0gICAganBlZ2VuYy0+Y2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7Ci0gIH0KLQotICAvKiBpbnB1dCBidWZmZXIgc2l6ZSBhcyBtYXggb3V0cHV0ICovCi0gIGpwZWdlbmMtPmJ1ZnNpemUgPSBHU1RfVklERU9fSU5GT19TSVpFIChpbmZvKTsKLSAganBlZ19zZXRfZGVmYXVsdHMgKCZqcGVnZW5jLT5jaW5mbyk7Ci0gIGpwZWdlbmMtPmNpbmZvLnJhd19kYXRhX2luID0gVFJVRTsKLSAgLyogZHVoLCBsaWJqcGVnIG1hcHMgUkdCIHRvIFlVViAuLi4gYW5kIGRvbid0IGV4cGVjdCBzb21lIGNvbnZlcnNpb24gKi8KLSAgaWYgKGpwZWdlbmMtPmNpbmZvLmluX2NvbG9yX3NwYWNlID09IEpDU19SR0IpCi0gICAganBlZ19zZXRfY29sb3JzcGFjZSAoJmpwZWdlbmMtPmNpbmZvLCBKQ1NfUkdCKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChqcGVnZW5jLCAiaF9tYXhfc2FtcD0lZCwgdl9tYXhfc2FtcD0lZCIsCi0gICAgICBqcGVnZW5jLT5oX21heF9zYW1wLCBqcGVnZW5jLT52X21heF9zYW1wKTsKLSAgLyogaW1hZ2UgZGltZW5zaW9uIGluZm8gKi8KLSAgZm9yIChpID0gMDsgaSA8IGpwZWdlbmMtPmNoYW5uZWxzOyBpKyspIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqcGVnZW5jLCAiY29tcCAlaTogaF9zYW1wPSVkLCB2X3NhbXA9JWQiLCBpLAotICAgICAgICBqcGVnZW5jLT5oX3NhbXBbaV0sIGpwZWdlbmMtPnZfc2FtcFtpXSk7Ci0gICAganBlZ2VuYy0+Y2luZm8uY29tcF9pbmZvW2ldLmhfc2FtcF9mYWN0b3IgPSBqcGVnZW5jLT5oX3NhbXBbaV07Ci0gICAganBlZ2VuYy0+Y2luZm8uY29tcF9pbmZvW2ldLnZfc2FtcF9mYWN0b3IgPSBqcGVnZW5jLT52X3NhbXBbaV07Ci0gICAgZ19mcmVlIChqcGVnZW5jLT5saW5lW2ldKTsKLSAgICBqcGVnZW5jLT5saW5lW2ldID0gZ19uZXcgKGd1Y2hhciAqLCBqcGVnZW5jLT52X21heF9zYW1wICogRENUU0laRSk7Ci0gICAgaWYgKCFqcGVnZW5jLT5wbGFuYXIpIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCBqcGVnZW5jLT52X21heF9zYW1wICogRENUU0laRTsgaisrKSB7Ci0gICAgICAgIGdfZnJlZSAoanBlZ2VuYy0+cm93W2ldW2pdKTsKLSAgICAgICAganBlZ2VuYy0+cm93W2ldW2pdID0gZ19tYWxsb2MgKHdpZHRoKTsKLSAgICAgICAganBlZ2VuYy0+bGluZVtpXVtqXSA9IGpwZWdlbmMtPnJvd1tpXVtqXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBndWFyZCBhZ2FpbnN0IGEgcG90ZW50aWFsIGVycm9yIGluIGdzdF9qcGVnZW5jX3Rlcm1fZGVzdGluYXRpb24KLSAgICAgd2hpY2ggb2NjdXJzIGlmZiBidWZzaXplICUgNCA8IGZyZWVfc3BhY2VfcmVtYWluaW5nICovCi0gIGpwZWdlbmMtPmJ1ZnNpemUgPSBHU1RfUk9VTkRfVVBfNCAoanBlZ2VuYy0+YnVmc2l6ZSk7Ci0KLSAganBlZ19zdXBwcmVzc190YWJsZXMgKCZqcGVnZW5jLT5jaW5mbywgVFJVRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoanBlZ2VuYywgInJlc3luYyBkb25lIik7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfanBlZ2VuY19oYW5kbGVfZnJhbWUgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKQotewotICBHc3RKcGVnRW5jICpqcGVnZW5jOwotICBndWludCBoZWlnaHQ7Ci0gIGd1Y2hhciAqYmFzZVszXSwgKmVuZFszXTsKLSAgZ3VpbnQgc3RyaWRlWzNdOwotICBnaW50IGksIGosIGs7Ci0gIHN0YXRpYyBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtcyA9IHsgMCwgMCwgMCwgMywgfTsKLQotICBqcGVnZW5jID0gR1NUX0pQRUdFTkMgKGVuY29kZXIpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChqcGVnZW5jLCAiZ290IG5ldyBmcmFtZSIpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmpwZWdlbmMtPmN1cnJlbnRfdmZyYW1lLAotICAgICAgICAgICZqcGVnZW5jLT5pbnB1dF9zdGF0ZS0+aW5mbywgZnJhbWUtPmlucHV0X2J1ZmZlciwgR1NUX01BUF9SRUFEKSkKLSAgICBnb3RvIGludmFsaWRfZnJhbWU7Ci0KLSAganBlZ2VuYy0+Y3VycmVudF9mcmFtZSA9IGZyYW1lOwotCi0gIGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmpwZWdlbmMtPmlucHV0X3N0YXRlLT5pbmZvKTsKLQotICBmb3IgKGkgPSAwOyBpIDwganBlZ2VuYy0+Y2hhbm5lbHM7IGkrKykgewotICAgIGJhc2VbaV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBICgmanBlZ2VuYy0+Y3VycmVudF92ZnJhbWUsIGkpOwotICAgIHN0cmlkZVtpXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoJmpwZWdlbmMtPmN1cnJlbnRfdmZyYW1lLCBpKTsKLSAgICBlbmRbaV0gPQotICAgICAgICBiYXNlW2ldICsgR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUICgmanBlZ2VuYy0+Y3VycmVudF92ZnJhbWUsCi0gICAgICAgIGkpICogc3RyaWRlW2ldOwotICB9Ci0KLSAganBlZ2VuYy0+cmVzID0gR1NUX0ZMT1dfT0s7Ci0gIGpwZWdlbmMtPm91dHB1dF9tZW0gPSBnc3RfYWxsb2NhdG9yX2FsbG9jIChOVUxMLCBqcGVnZW5jLT5idWZzaXplLCAmcGFyYW1zKTsKLSAgZ3N0X21lbW9yeV9tYXAgKGpwZWdlbmMtPm91dHB1dF9tZW0sICZqcGVnZW5jLT5vdXRwdXRfbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0KLSAganBlZ2VuYy0+amRlc3QubmV4dF9vdXRwdXRfYnl0ZSA9IGpwZWdlbmMtPm91dHB1dF9tYXAuZGF0YTsKLSAganBlZ2VuYy0+amRlc3QuZnJlZV9pbl9idWZmZXIgPSBqcGVnZW5jLT5vdXRwdXRfbWFwLnNpemU7Ci0KLSAgLyogcHJlcGFyZSBmb3IgcmF3IGlucHV0ICovCi0jaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAotICBqcGVnZW5jLT5jaW5mby5kb19mYW5jeV9kb3duc2FtcGxpbmcgPSBGQUxTRTsKLSNlbmRpZgotICBqcGVnZW5jLT5jaW5mby5zbW9vdGhpbmdfZmFjdG9yID0ganBlZ2VuYy0+c21vb3RoaW5nOwotICBqcGVnZW5jLT5jaW5mby5kY3RfbWV0aG9kID0ganBlZ2VuYy0+aWRjdF9tZXRob2Q7Ci0gIGpwZWdfc2V0X3F1YWxpdHkgKCZqcGVnZW5jLT5jaW5mbywganBlZ2VuYy0+cXVhbGl0eSwgVFJVRSk7Ci0gIGpwZWdfc3RhcnRfY29tcHJlc3MgKCZqcGVnZW5jLT5jaW5mbywgVFJVRSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGpwZWdlbmMsICJjb21wcmVzc2luZyIpOwotCi0gIGlmIChqcGVnZW5jLT5wbGFuYXIpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpICs9IGpwZWdlbmMtPnZfbWF4X3NhbXAgKiBEQ1RTSVpFKSB7Ci0gICAgICBmb3IgKGsgPSAwOyBrIDwganBlZ2VuYy0+Y2hhbm5lbHM7IGsrKykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwganBlZ2VuYy0+dl9zYW1wW2tdICogRENUU0laRTsgaisrKSB7Ci0gICAgICAgICAganBlZ2VuYy0+bGluZVtrXVtqXSA9IGJhc2Vba107Ci0gICAgICAgICAgaWYgKGJhc2Vba10gKyBzdHJpZGVba10gPCBlbmRba10pCi0gICAgICAgICAgICBiYXNlW2tdICs9IHN0cmlkZVtrXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAganBlZ193cml0ZV9yYXdfZGF0YSAoJmpwZWdlbmMtPmNpbmZvLCBqcGVnZW5jLT5saW5lLAotICAgICAgICAgIGpwZWdlbmMtPnZfbWF4X3NhbXAgKiBEQ1RTSVpFKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSArPSBqcGVnZW5jLT52X21heF9zYW1wICogRENUU0laRSkgewotICAgICAgZm9yIChrID0gMDsgayA8IGpwZWdlbmMtPmNoYW5uZWxzOyBrKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IGpwZWdlbmMtPnZfc2FtcFtrXSAqIERDVFNJWkU7IGorKykgewotICAgICAgICAgIGd1Y2hhciAqc3JjLCAqZHN0OwotICAgICAgICAgIGdpbnQgbDsKLQotICAgICAgICAgIC8qIG91Y2gsIGNvcHkgbGluZSAqLwotICAgICAgICAgIHNyYyA9IGJhc2Vba107Ci0gICAgICAgICAgZHN0ID0ganBlZ2VuYy0+bGluZVtrXVtqXTsKLSAgICAgICAgICBmb3IgKGwgPSBqcGVnZW5jLT5jd2lkdGhba107IGwgPiAwOyBsLS0pIHsKLSAgICAgICAgICAgICpkc3QgPSAqc3JjOwotICAgICAgICAgICAgc3JjICs9IGpwZWdlbmMtPmluY1trXTsKLSAgICAgICAgICAgIGRzdCsrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoYmFzZVtrXSArIHN0cmlkZVtrXSA8IGVuZFtrXSkKLSAgICAgICAgICAgIGJhc2Vba10gKz0gc3RyaWRlW2tdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBqcGVnX3dyaXRlX3Jhd19kYXRhICgmanBlZ2VuYy0+Y2luZm8sIGpwZWdlbmMtPmxpbmUsCi0gICAgICAgICAganBlZ2VuYy0+dl9tYXhfc2FtcCAqIERDVFNJWkUpOwotICAgIH0KLSAgfQotCi0gIC8qIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBnc3RfanBlZ2VuY190ZXJtX2Rlc3RpbmF0aW9uIGlzIGNhbGxlZCAqLwotICBqcGVnX2ZpbmlzaF9jb21wcmVzcyAoJmpwZWdlbmMtPmNpbmZvKTsKLSAgR1NUX0xPR19PQkpFQ1QgKGpwZWdlbmMsICJjb21wcmVzc2luZyBkb25lIik7Ci0KLSAgcmV0dXJuIGpwZWdlbmMtPnJlczsKLQotaW52YWxpZF9mcmFtZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoanBlZ2VuYywgImludmFsaWQgZnJhbWUgcmVjZWl2ZWQiKTsKLSAgICByZXR1cm4gZ3N0X3ZpZGVvX2VuY29kZXJfZmluaXNoX2ZyYW1lIChlbmNvZGVyLCBmcmFtZSk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfanBlZ2VuY19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUsIE5VTEwpOwotCi0gIHJldHVybiBHU1RfVklERU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+cHJvcG9zZV9hbGxvY2F0aW9uIChlbmNvZGVyLAotICAgICAgcXVlcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdlbmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEpwZWdFbmMgKmpwZWdlbmMgPSBHU1RfSlBFR0VOQyAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGpwZWdlbmMpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9RVUFMSVRZOgotICAgICAganBlZ2VuYy0+cXVhbGl0eSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0jaWZkZWYgRU5BQkxFX1NNT09USElORwotICAgIGNhc2UgUFJPUF9TTU9PVEhJTkc6Ci0gICAgICBqcGVnZW5jLT5zbW9vdGhpbmcgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBQUk9QX0lEQ1RfTUVUSE9EOgotICAgICAganBlZ2VuYy0+aWRjdF9tZXRob2QgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGpwZWdlbmMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2pwZWdlbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEpwZWdFbmMgKmpwZWdlbmMgPSBHU1RfSlBFR0VOQyAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGpwZWdlbmMpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9RVUFMSVRZOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwganBlZ2VuYy0+cXVhbGl0eSk7Ci0gICAgICBicmVhazsKLSNpZmRlZiBFTkFCTEVfU01PT1RISU5HCi0gICAgY2FzZSBQUk9QX1NNT09USElORzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGpwZWdlbmMtPnNtb290aGluZyk7Ci0gICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgUFJPUF9JRENUX01FVEhPRDoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBqcGVnZW5jLT5pZGN0X21ldGhvZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGpwZWdlbmMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qcGVnZW5jX3N0YXJ0IChHc3RWaWRlb0VuY29kZXIgKiBiZW5jKQotewotICBHc3RKcGVnRW5jICplbmMgPSAoR3N0SnBlZ0VuYyAqKSBiZW5jOwotCi0gIGVuYy0+bGluZVswXSA9IE5VTEw7Ci0gIGVuYy0+bGluZVsxXSA9IE5VTEw7Ci0gIGVuYy0+bGluZVsyXSA9IE5VTEw7Ci0gIGVuYy0+c29mX21hcmtlciA9IC0xOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9qcGVnZW5jX3N0b3AgKEdzdFZpZGVvRW5jb2RlciAqIGJlbmMpCi17Ci0gIEdzdEpwZWdFbmMgKmVuYyA9IChHc3RKcGVnRW5jICopIGJlbmM7Ci0gIGdpbnQgaSwgajsKLQotICBnX2ZyZWUgKGVuYy0+bGluZVswXSk7Ci0gIGdfZnJlZSAoZW5jLT5saW5lWzFdKTsKLSAgZ19mcmVlIChlbmMtPmxpbmVbMl0pOwotICBlbmMtPmxpbmVbMF0gPSBOVUxMOwotICBlbmMtPmxpbmVbMV0gPSBOVUxMOwotICBlbmMtPmxpbmVbMl0gPSBOVUxMOwotICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IDQgKiBEQ1RTSVpFOyBqKyspIHsKLSAgICAgIGdfZnJlZSAoZW5jLT5yb3dbaV1bal0pOwotICAgICAgZW5jLT5yb3dbaV1bal0gPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZXh0L2pwZWcvZ3N0anBlZ2VuYy5oIGIvZXh0L2pwZWcvZ3N0anBlZ2VuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzYzNmQzLi4wMDAwMDAwCi0tLSBhL2V4dC9qcGVnL2dzdGpwZWdlbmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCUF1dGhvciA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9KUEVHRU5DX0hfXwotI2RlZmluZSBfX0dTVF9KUEVHRU5DX0hfXwotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5oPgotLyogdGhpcyBpcyBhIGhhY2sgaGFjayBoYWNrIHRvIGdldCBhcm91bmQganBlZ2xpYiBoZWFkZXIgYnVncy4uLiAqLwotI2lmZGVmIEhBVkVfU1RETElCX0gKLSMgdW5kZWYgSEFWRV9TVERMSUJfSAotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxqcGVnbGliLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfSlBFR0VOQyBcCi0gIChnc3RfanBlZ2VuY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSlBFR0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0pQRUdFTkMsR3N0SnBlZ0VuYykpCi0jZGVmaW5lIEdTVF9KUEVHRU5DX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0pQRUdFTkMsR3N0SnBlZ0VuY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0pQRUdFTkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9KUEVHRU5DKSkKLSNkZWZpbmUgR1NUX0lTX0pQRUdFTkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSlBFR0VOQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RKcGVnRW5jIEdzdEpwZWdFbmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SnBlZ0VuY0NsYXNzIEdzdEpwZWdFbmNDbGFzczsKLQotc3RydWN0IF9Hc3RKcGVnRW5jCi17Ci0gIEdzdFZpZGVvRW5jb2RlciBlbmNvZGVyOwotCi0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqaW5wdXRfc3RhdGU7Ci0gIEdzdFZpZGVvRnJhbWUgY3VycmVudF92ZnJhbWU7Ci0gIEdzdFZpZGVvQ29kZWNGcmFtZSAqY3VycmVudF9mcmFtZTsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0KLSAgZ3VpbnQgY2hhbm5lbHM7Ci0KLSAgZ2ludCBpbmNbR1NUX1ZJREVPX01BWF9DT01QT05FTlRTXTsKLSAgZ2ludCBjd2lkdGhbR1NUX1ZJREVPX01BWF9DT01QT05FTlRTXTsKLSAgZ2ludCBjaGVpZ2h0W0dTVF9WSURFT19NQVhfQ09NUE9ORU5UU107Ci0gIGdpbnQgaF9zYW1wW0dTVF9WSURFT19NQVhfQ09NUE9ORU5UU107Ci0gIGdpbnQgdl9zYW1wW0dTVF9WSURFT19NQVhfQ09NUE9ORU5UU107Ci0gIGdpbnQgaF9tYXhfc2FtcDsKLSAgZ2ludCB2X21heF9zYW1wOwotICBnYm9vbGVhbiBwbGFuYXI7Ci0gIGdpbnQgc29mX21hcmtlcjsKLSAgLyogdGhlIHZpZGVvIGJ1ZmZlciAqLwotICBnaW50IGJ1ZnNpemU7Ci0gIC8qIHRoZSBqcGVnIGxpbmUgYnVmZmVyICovCi0gIGd1Y2hhciAqKmxpbmVbM107Ci0gIC8qIGluZGlyZWN0IGVuY29kaW5nIGxpbmUgYnVmZmVycyAqLwotICBndWNoYXIgKnJvd1szXVs0ICogRENUU0laRV07Ci0KLSAgc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IGNpbmZvOwotICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgamVycjsKLSAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyIGpkZXN0OwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2ludCBxdWFsaXR5OwotICBnaW50IHNtb290aGluZzsKLSAgZ2ludCBpZGN0X21ldGhvZDsKLQotICBHc3RNZW1vcnkgKm91dHB1dF9tZW07Ci0gIEdzdE1hcEluZm8gb3V0cHV0X21hcDsKLX07Ci0KLXN0cnVjdCBfR3N0SnBlZ0VuY0NsYXNzCi17Ci0gIEdzdFZpZGVvRW5jb2RlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9qcGVnZW5jX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9KUEVHRU5DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L2xpYmNhY2EvTWFrZWZpbGUuYW0gYi9leHQvbGliY2FjYS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI5ZjUyOS4uMDAwMDAwMAotLS0gYS9leHQvbGliY2FjYS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGNhY2FzaW5rLmxhCi0KLWxpYmdzdGNhY2FzaW5rX2xhX1NPVVJDRVMgPSBnc3RjYWNhc2luay5jCi1saWJnc3RjYWNhc2lua19sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSBcCi0JJChMSUJDQUNBX0NGTEFHUykKLWxpYmdzdGNhY2FzaW5rX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChMSUJDQUNBX0xJQlMpCi1saWJnc3RjYWNhc2lua19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RjYWNhc2lua19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGNhY2FzaW5rLmgKZGlmZiAtLWdpdCBhL2V4dC9saWJjYWNhL01ha2VmaWxlLmluIGIvZXh0L2xpYmNhY2EvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MmViNGUuLjAwMDAwMDAKLS0tIGEvZXh0L2xpYmNhY2EvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MjEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L2xpYmNhY2EKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RjYWNhc2lua19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0Y2FjYXNpbmtfbGFfT0JKRUNUUyA9IGxpYmdzdGNhY2FzaW5rX2xhLWdzdGNhY2FzaW5rLmxvCi1saWJnc3RjYWNhc2lua19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RjYWNhc2lua19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0Y2FjYXNpbmtfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RjYWNhc2lua19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGNhY2FzaW5rX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGNhY2FzaW5rX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGNhY2FzaW5rX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGNhY2FzaW5rX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGNhY2FzaW5rLmxhCi1saWJnc3RjYWNhc2lua19sYV9TT1VSQ0VTID0gZ3N0Y2FjYXNpbmsuYwotbGliZ3N0Y2FjYXNpbmtfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgXAotCSQoTElCQ0FDQV9DRkxBR1MpCi0KLWxpYmdzdGNhY2FzaW5rX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChMSUJDQUNBX0xJQlMpCi0KLWxpYmdzdGNhY2FzaW5rX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGNhY2FzaW5rX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGNhY2FzaW5rLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGV4dC9saWJjYWNhL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGV4dC9saWJjYWNhL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0Y2FjYXNpbmsubGE6ICQobGliZ3N0Y2FjYXNpbmtfbGFfT0JKRUNUUykgJChsaWJnc3RjYWNhc2lua19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0Y2FjYXNpbmtfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGNhY2FzaW5rX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RjYWNhc2lua19sYV9PQkpFQ1RTKSAkKGxpYmdzdGNhY2FzaW5rX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Y2FjYXNpbmtfbGEtZ3N0Y2FjYXNpbmsuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGNhY2FzaW5rX2xhLWdzdGNhY2FzaW5rLmxvOiBnc3RjYWNhc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y2FjYXNpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Y2FjYXNpbmtfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGNhY2FzaW5rX2xhLWdzdGNhY2FzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RjYWNhc2lua19sYS1nc3RjYWNhc2luay5UcG8gLWMgLW8gbGliZ3N0Y2FjYXNpbmtfbGEtZ3N0Y2FjYXNpbmsubG8gYHRlc3QgLWYgJ2dzdGNhY2FzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGNhY2FzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGNhY2FzaW5rX2xhLWdzdGNhY2FzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0Y2FjYXNpbmtfbGEtZ3N0Y2FjYXNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Y2FjYXNpbmsuYycgb2JqZWN0PSdsaWJnc3RjYWNhc2lua19sYS1nc3RjYWNhc2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGNhY2FzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGNhY2FzaW5rX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGNhY2FzaW5rX2xhLWdzdGNhY2FzaW5rLmxvIGB0ZXN0IC1mICdnc3RjYWNhc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYWNhc2luay5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmMgYi9leHQvbGliY2FjYS9nc3RjYWNhc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTM1ZjA4Li4wMDAwMDAwCi0tLSBhL2V4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1jYWNhc2luawotICogQHNlZV9hbHNvOiAjR3N0QUFTaW5rCi0gKgotICogRGlzcGxheXMgdmlkZW8gYXMgY29sb3IgYXNjaWkgYXJ0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBDQUNBX0dFT01FVFJZPTE2MHg2MCBDQUNBX0ZPTlQ9NXg3IGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249dGVzdC5hdmkgISBkZWNvZGViaW4gISB2aWRlb2NvbnZlcnQgISBjYWNhc2luawotICogXXwgVGhpcyBwaXBlbGluZSByZW5kZXJzIGEgdmlkZW8gdG8gYXNjaWkgYXJ0IGludG8gYSBzZXBhcmF0ZSB3aW5kb3cgdXNpbmcgYQotICogc21hbGwgZm9udCBhbmQgc3BlY2lmeWluZyB0aGUgYXNjaWkgcmVzb2x1dGlvbi4KLSAqIHxbCi0gKiBDQUNBX0RSSVZFUj1uY3Vyc2VzIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249dGVzdC5hdmkgISBkZWNvZGViaW4gISB2aWRlb2NvbnZlcnQgISBjYWNhc2luawotICogXXwgVGhpcyBwaXBlbGluZSByZW5kZXJzIGEgdmlkZW8gdG8gYXNjaWkgYXJ0IGludG8gdGhlIGN1cnJlbnQgdGVybWluYWwuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlICJnc3RjYWNhc2luay5oIgotCi0KLS8vI2RlZmluZSBHU1RfQ0FDQV9ERUZBVUxUX1JFRF9NQVNLIFJfTUFTS18zMl9SRVZFUlNFX0lOVAotLy8jZGVmaW5lIEdTVF9DQUNBX0RFRkFVTFRfR1JFRU5fTUFTSyBHX01BU0tfMzJfUkVWRVJTRV9JTlQKLS8vI2RlZmluZSBHU1RfQ0FDQV9ERUZBVUxUX0JMVUVfTUFTSyBCX01BU0tfMzJfUkVWRVJTRV9JTlQKLQotLyogY2FjYXNpbmsgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBHU1RfQ0FDQV9ERUZBVUxUX1NDUkVFTl9XSURUSCA4MAotI2RlZmluZSBHU1RfQ0FDQV9ERUZBVUxUX1NDUkVFTl9IRUlHSFQgMjUKLSNkZWZpbmUgR1NUX0NBQ0FfREVGQVVMVF9ESVRIRVIgQ0FDQV9ESVRIRVJJTkdfTk9ORQotI2RlZmluZSBHU1RfQ0FDQV9ERUZBVUxUX0FOVElBTElBU0lORyBUUlVFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NDUkVFTl9XSURUSCwKLSAgUFJPUF9TQ1JFRU5fSEVJR0hULAotICBQUk9QX0RJVEhFUiwKLSAgUFJPUF9BTlRJQUxJQVNJTkcKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFCi0gICAgICAgICgieyBSR0IsIEJHUiwgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCMTYsIFJHQjE1IH0iKSkKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2NhY2FzaW5rX3NldGNhcHMgKEdzdEJhc2VTaW5rICogcGFkLCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfY2FjYXNpbmtfZ2V0X3RpbWVzIChHc3RCYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBHc3RDbG9ja1RpbWUgKiBzdGFydCwgR3N0Q2xvY2tUaW1lICogZW5kKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jYWNhc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotc3RhdGljIHZvaWQgZ3N0X2NhY2FzaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9jYWNhc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfY2FjYXNpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotI2RlZmluZSBnc3RfY2FjYXNpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0Q0FDQVNpbmssIGdzdF9jYWNhc2luaywgR1NUX1RZUEVfQkFTRV9TSU5LKTsKLQotI2RlZmluZSBHU1RfVFlQRV9DQUNBRElUSEVSIChnc3RfY2FjYXNpbmtfZGl0aGVyX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9jYWNhc2lua19kaXRoZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBkaXRoZXJfdHlwZSA9IDA7Ci0KLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZGl0aGVyX3R5cGVzW10gPSB7Ci0gICAge0NBQ0FfRElUSEVSSU5HX05PTkUsICJObyBkaXRoZXJpbmciLCAibm9uZSJ9LAotICAgIHtDQUNBX0RJVEhFUklOR19PUkRFUkVEMiwgIk9yZGVyZWQgMngyIEJheWVyIGRpdGhlcmluZyIsICIyeDIifSwKLSAgICB7Q0FDQV9ESVRIRVJJTkdfT1JERVJFRDQsICJPcmRlcmVkIDR4NCBCYXllciBkaXRoZXJpbmciLCAiNHg0In0sCi0gICAge0NBQ0FfRElUSEVSSU5HX09SREVSRUQ4LCAiT3JkZXJlZCA4eDggQmF5ZXIgZGl0aGVyaW5nIiwgIjh4OCJ9LAotICAgIHtDQUNBX0RJVEhFUklOR19SQU5ET00sICJSYW5kb20gZGl0aGVyaW5nIiwgInJhbmRvbSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIWRpdGhlcl90eXBlKSB7Ci0gICAgZGl0aGVyX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0Q0FDQVNpbmtEaXRoZXJpbmciLCBkaXRoZXJfdHlwZXMpOwotICB9Ci0gIHJldHVybiBkaXRoZXJfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYWNhc2lua19jbGFzc19pbml0IChHc3RDQUNBU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU2lua0NsYXNzICpnc3RiYXNlc2lua19jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzID0gKEdzdEJhc2VTaW5rQ2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2NhY2FzaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2NhY2FzaW5rX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1NDUkVFTl9XSURUSCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJzY3JlZW4td2lkdGgiLCAiU2NyZWVuIFdpZHRoIiwKLSAgICAgICAgICAiVGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4iLCAwLCBHX01BWElOVCwgR1NUX0NBQ0FfREVGQVVMVF9TQ1JFRU5fV0lEVEgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9TQ1JFRU5fSEVJR0hULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNjcmVlbi1oZWlnaHQiLCAiU2NyZWVuIEhlaWdodCIsCi0gICAgICAgICAgIlRoZSBoZWlnaHQgb2YgdGhlIHNjcmVlbiIsIDAsIEdfTUFYSU5ULAotICAgICAgICAgIEdTVF9DQUNBX0RFRkFVTFRfU0NSRUVOX0hFSUdIVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RJVEhFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiZGl0aGVyIiwgIkRpdGhlciBUeXBlIiwgIlNldCB0eXBlIG9mIERpdGhlciIsCi0gICAgICAgICAgR1NUX1RZUEVfQ0FDQURJVEhFUiwgR1NUX0NBQ0FfREVGQVVMVF9ESVRIRVIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQU5USUFMSUFTSU5HLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhbnRpLWFsaWFzaW5nIiwgIkFudGkgQWxpYXNpbmciLAotICAgICAgICAgICJFbmFibGVzIEFudGktQWxpYXNpbmciLCBHU1RfQ0FDQV9ERUZBVUxUX0FOVElBTElBU0lORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfY2FjYXNpbmtfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiQSBjb2xvcmVkIEFTQ0lJIGFydCB2aWRlbyBzaW5rIiwgIlNpbmsvVmlkZW8iLAotICAgICAgIkEgY29sb3JlZCBBU0NJSSBhcnQgdmlkZW9zaW5rIiwgIlplZXNoYW4gQWxpIDx6YWsxNDdAeWFob28uY29tPiIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotCi0gIGdzdGJhc2VzaW5rX2NsYXNzLT5zZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY2FjYXNpbmtfc2V0Y2Fwcyk7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT5nZXRfdGltZXMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhY2FzaW5rX2dldF90aW1lcyk7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT5wcmVyb2xsID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jYWNhc2lua19yZW5kZXIpOwotICBnc3RiYXNlc2lua19jbGFzcy0+cmVuZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jYWNhc2lua19yZW5kZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NhY2FzaW5rX2dldF90aW1lcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCkKLXsKLSAgKnN0YXJ0ID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gICplbmQgPSAqc3RhcnQgKyBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jYWNhc2lua19zZXRjYXBzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q0FDQVNpbmsgKmNhY2FzaW5rOwotICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgZ3VpbnQgYnBwLCByZWRfbWFzaywgZ3JlZW5fbWFzaywgYmx1ZV9tYXNrOwotCi0gIGNhY2FzaW5rID0gR1NUX0NBQ0FTSU5LIChiYXNlc2luayk7Ci0KLSAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGNhcHNfZXJyb3I7Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZpbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCeDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICAgIGJwcCA9IDggKiBpbmZvLmZpbmZvLT5waXhlbF9zdHJpZGVbMF07Ci0gICAgICByZWRfbWFzayA9IDB4ZmYgPDwgKDggKiBpbmZvLmZpbmZvLT5wb2Zmc2V0W0dTVF9WSURFT19DT01QX1JdKTsKLSAgICAgIGdyZWVuX21hc2sgPSAweGZmIDw8ICg4ICogaW5mby5maW5mby0+cG9mZnNldFtHU1RfVklERU9fQ09NUF9HXSk7Ci0gICAgICBibHVlX21hc2sgPSAweGZmIDw8ICg4ICogaW5mby5maW5mby0+cG9mZnNldFtHU1RfVklERU9fQ09NUF9CXSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCMTY6Ci0gICAgICBicHAgPSAxNjsKLSAgICAgIHJlZF9tYXNrID0gMHhmODAwOwotICAgICAgZ3JlZW5fbWFzayA9IDB4MDdlMDsKLSAgICAgIGJsdWVfbWFzayA9IDB4MDAxZjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0IxNToKLSAgICAgIGJwcCA9IDE2OwotICAgICAgcmVkX21hc2sgPSAweDdjMDA7Ci0gICAgICBncmVlbl9tYXNrID0gMHgwM2UwOwotICAgICAgYmx1ZV9tYXNrID0gMHgwMDFmOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdvdG8gaW52YWxpZF9mb3JtYXQ7Ci0gIH0KLQotICBpZiAoY2FjYXNpbmstPmJpdG1hcCkgewotICAgIGNhY2FfZnJlZV9iaXRtYXAgKGNhY2FzaW5rLT5iaXRtYXApOwotICB9Ci0gIGNhY2FzaW5rLT5iaXRtYXAgPSBjYWNhX2NyZWF0ZV9iaXRtYXAgKGJwcCwKLSAgICAgIEdTVF9WSURFT19JTkZPX1dJRFRIICgmaW5mbyksCi0gICAgICBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZpbmZvKSwKLSAgICAgIEdTVF9ST1VORF9VUF80IChHU1RfVklERU9fSU5GT19XSURUSCAoJmluZm8pICogYnBwIC8gOCksCi0gICAgICByZWRfbWFzaywgZ3JlZW5fbWFzaywgYmx1ZV9tYXNrLCAwKTsKLSAgaWYgKCFjYWNhc2luay0+Yml0bWFwKQotICAgIGdvdG8gbm9fYml0bWFwOwotCi0gIGNhY2FzaW5rLT5pbmZvID0gaW5mbzsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUyAqLwotY2Fwc19lcnJvcjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNhY2FzaW5rLCAiZXJyb3IgcGFyc2luZyBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX2Zvcm1hdDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNhY2FzaW5rLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2JpdG1hcDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNhY2FzaW5rLCAiY291bGQgbm90IGNyZWF0ZSBiaXRtYXAiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYWNhc2lua19pbml0IChHc3RDQUNBU2luayAqIGNhY2FzaW5rKQotewotICBjYWNhc2luay0+c2NyZWVuX3dpZHRoID0gR1NUX0NBQ0FfREVGQVVMVF9TQ1JFRU5fV0lEVEg7Ci0gIGNhY2FzaW5rLT5zY3JlZW5faGVpZ2h0ID0gR1NUX0NBQ0FfREVGQVVMVF9TQ1JFRU5fSEVJR0hUOwotCi0gIGNhY2FzaW5rLT5kaXRoZXIgPSBHU1RfQ0FDQV9ERUZBVUxUX0RJVEhFUjsKLSAgY2FjYXNpbmstPmFudGlhbGlhc2luZyA9IEdTVF9DQUNBX0RFRkFVTFRfQU5USUFMSUFTSU5HOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2NhY2FzaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RDQUNBU2luayAqY2FjYXNpbmsgPSBHU1RfQ0FDQVNJTksgKGJhc2VzaW5rKTsKLSAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLQotICBHU1RfREVCVUcgKCJyZW5kZXIiKTsKLQotICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJmNhY2FzaW5rLT5pbmZvLCBidWZmZXIsIEdTVF9NQVBfUkVBRCkpCi0gICAgZ290byBpbnZhbGlkX2ZyYW1lOwotCi0gIGNhY2FfY2xlYXIgKCk7Ci0gIGNhY2FfZHJhd19iaXRtYXAgKDAsIDAsIGNhY2FzaW5rLT5zY3JlZW5fd2lkdGggLSAxLAotICAgICAgY2FjYXNpbmstPnNjcmVlbl9oZWlnaHQgLSAxLCBjYWNhc2luay0+Yml0bWFwLAotICAgICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKCZmcmFtZSwgMCkpOwotICBjYWNhX3JlZnJlc2ggKCk7Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfZnJhbWU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjYWNhc2luaywgImludmFsaWQgZnJhbWUgcmVjZWl2ZWQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jYWNhc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q0FDQVNpbmsgKmNhY2FzaW5rOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19DQUNBU0lOSyAob2JqZWN0KSk7Ci0KLSAgY2FjYXNpbmsgPSBHU1RfQ0FDQVNJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RJVEhFUjp7Ci0gICAgICBjYWNhc2luay0+ZGl0aGVyID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgY2FjYV9zZXRfZGl0aGVyaW5nIChjYWNhc2luay0+ZGl0aGVyICsgQ0FDQV9ESVRIRVJJTkdfTk9ORSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FOVElBTElBU0lORzp7Ci0gICAgICBjYWNhc2luay0+YW50aWFsaWFzaW5nID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgaWYgKGNhY2FzaW5rLT5hbnRpYWxpYXNpbmcpIHsKLSAgICAgICAgY2FjYV9zZXRfZmVhdHVyZSAoQ0FDQV9BTlRJQUxJQVNJTkdfTUFYKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhY2Ffc2V0X2ZlYXR1cmUgKENBQ0FfQU5USUFMSUFTSU5HX01JTik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2FjYXNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdENBQ0FTaW5rICpjYWNhc2luazsKLQotICBjYWNhc2luayA9IEdTVF9DQUNBU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU0NSRUVOX1dJRFRIOnsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGNhY2FzaW5rLT5zY3JlZW5fd2lkdGgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TQ1JFRU5fSEVJR0hUOnsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGNhY2FzaW5rLT5zY3JlZW5faGVpZ2h0KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfRElUSEVSOnsKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBjYWNhc2luay0+ZGl0aGVyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQU5USUFMSUFTSU5HOnsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBjYWNhc2luay0+YW50aWFsaWFzaW5nKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OnsKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY2FjYXNpbmtfb3BlbiAoR3N0Q0FDQVNpbmsgKiBjYWNhc2luaykKLXsKLSAgY2FjYXNpbmstPmJpdG1hcCA9IE5VTEw7Ci0KLSAgaWYgKGNhY2FfaW5pdCAoKSA8IDApCi0gICAgZ290byBpbml0X2ZhaWxlZDsKLQotICBjYWNhc2luay0+c2NyZWVuX3dpZHRoID0gY2FjYV9nZXRfd2lkdGggKCk7Ci0gIGNhY2FzaW5rLT5zY3JlZW5faGVpZ2h0ID0gY2FjYV9nZXRfaGVpZ2h0ICgpOwotICBjYWNhc2luay0+YW50aWFsaWFzaW5nID0gVFJVRTsKLSAgY2FjYV9zZXRfZmVhdHVyZSAoQ0FDQV9BTlRJQUxJQVNJTkdfTUFYKTsKLSAgY2FjYXNpbmstPmRpdGhlciA9IDA7Ci0gIGNhY2Ffc2V0X2RpdGhlcmluZyAoQ0FDQV9ESVRIRVJJTkdfTk9ORSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1pbml0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChjYWNhc2luaywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsIChOVUxMKSwKLSAgICAgICAgKCJjYWNhX2luaXQoKSBmYWlsZWQiKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2FjYXNpbmtfY2xvc2UgKEdzdENBQ0FTaW5rICogY2FjYXNpbmspCi17Ci0gIGlmIChjYWNhc2luay0+Yml0bWFwKSB7Ci0gICAgY2FjYV9mcmVlX2JpdG1hcCAoY2FjYXNpbmstPmJpdG1hcCk7Ci0gICAgY2FjYXNpbmstPmJpdG1hcCA9IE5VTEw7Ci0gIH0KLSAgY2FjYV9lbmQgKCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2NhY2FzaW5rX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgaWYgKCFnc3RfY2FjYXNpbmtfb3BlbiAoR1NUX0NBQ0FTSU5LIChlbGVtZW50KSkpCi0gICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2NhY2FzaW5rX2Nsb3NlIChHU1RfQ0FDQVNJTksgKGVsZW1lbnQpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImNhY2FzaW5rIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9DQUNBU0lOSykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgY2FjYXNpbmssCi0gICAgIkNvbG9yZWQgQVNDSUkgQXJ0IHZpZGVvIHNpbmsiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaCBiL2V4dC9saWJjYWNhL2dzdGNhY2FzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2E2YTguLjAwMDAwMDAKLS0tIGEvZXh0L2xpYmNhY2EvZ3N0Y2FjYXNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfQ0FDQVNJTktfSF9fCi0jZGVmaW5lIF9fR1NUX0NBQ0FTSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpbmNsdWRlIDxjYWNhLmg+Ci0jaWZkZWYgQ0FDQV9BUElfVkVSU0lPTl8xCi0jICAgaW5jbHVkZSA8Y2FjYTAuaD4KLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQ0FDQVNJTksgXAotICAoZ3N0X2NhY2FzaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DQUNBU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0NBQ0FTSU5LLEdzdENBQ0FTaW5rKSkKLSNkZWZpbmUgR1NUX0NBQ0FTSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0NBQ0FTSU5LLEdzdENBQ0FTaW5rQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQ0FDQVNJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DQUNBU0lOSykpCi0jZGVmaW5lIEdTVF9JU19DQUNBU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9DQUNBU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDQUNBU2luayBHc3RDQUNBU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDQUNBU2lua0NsYXNzIEdzdENBQ0FTaW5rQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0Q0FDQVNpbmsgewotICBHc3RCYXNlU2luayBwYXJlbnQ7Ci0KLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0gIGdpbnQgc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0OwotCi0gIGd1aW50IGRpdGhlcjsKLSAgZ2Jvb2xlYW4gYW50aWFsaWFzaW5nOwotCi0gIHN0cnVjdCBjYWNhX2JpdG1hcCAqYml0bWFwOwotfTsKLQotc3RydWN0IF9Hc3RDQUNBU2lua0NsYXNzIHsKLSAgR3N0QmFzZVNpbmtDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotfTsKLQotR1R5cGUgZ3N0X2NhY2FzaW5rX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQ0FDQVNJTktfSF9fICovCmRpZmYgLS1naXQgYS9leHQvbGlicG5nL01ha2VmaWxlLmFtIGIvZXh0L2xpYnBuZy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyZGYwOS4uMDAwMDAwMAotLS0gYS9leHQvbGlicG5nL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0cG5nLmxhCi0KLWxpYmdzdHBuZ19sYV9TT1VSQ0VTID0gZ3N0cG5nLmMgZ3N0cG5nZW5jLmMgZ3N0cG5nZGVjLmMKLWxpYmdzdHBuZ19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKExJQlBOR19DRkxBR1MpCi1saWJnc3RwbmdfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJQTkdfTElCUykKLWxpYmdzdHBuZ19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RwbmdfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RwbmdkZWMuaCBnc3RwbmdlbmMuaApkaWZmIC0tZ2l0IGEvZXh0L2xpYnBuZy9NYWtlZmlsZS5pbiBiL2V4dC9saWJwbmcvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MDFlMTYuLjAwMDAwMDAKLS0tIGEvZXh0L2xpYnBuZy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkyOSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBleHQvbGlicG5nCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0cG5nX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RwbmdfbGFfT0JKRUNUUyA9IGxpYmdzdHBuZ19sYS1nc3RwbmcubG8gXAotCWxpYmdzdHBuZ19sYS1nc3RwbmdlbmMubG8gbGliZ3N0cG5nX2xhLWdzdHBuZ2RlYy5sbwotbGliZ3N0cG5nX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHBuZ19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0cG5nX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0cG5nX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0cG5nX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHBuZ19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RwbmdfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0cG5nX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHBuZy5sYQotbGliZ3N0cG5nX2xhX1NPVVJDRVMgPSBnc3RwbmcuYyBnc3RwbmdlbmMuYyBnc3RwbmdkZWMuYwotbGliZ3N0cG5nX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoTElCUE5HX0NGTEFHUykKLWxpYmdzdHBuZ19sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKExJQlBOR19MSUJTKQotCi1saWJnc3RwbmdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0cG5nX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdHBuZ2RlYy5oIGdzdHBuZ2VuYy5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvbGlicG5nL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGV4dC9saWJwbmcvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RwbmcubGE6ICQobGliZ3N0cG5nX2xhX09CSkVDVFMpICQobGliZ3N0cG5nX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RwbmdfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHBuZ19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0cG5nX2xhX09CSkVDVFMpICQobGliZ3N0cG5nX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cG5nX2xhLWdzdHBuZy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHBuZ19sYS1nc3RwbmdkZWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RwbmdfbGEtZ3N0cG5nZW5jLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RwbmdfbGEtZ3N0cG5nLmxvOiBnc3RwbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHBuZ19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwbmdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHBuZ19sYS1nc3RwbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHBuZ19sYS1nc3RwbmcuVHBvIC1jIC1vIGxpYmdzdHBuZ19sYS1nc3RwbmcubG8gYHRlc3QgLWYgJ2dzdHBuZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cG5nX2xhLWdzdHBuZy5UcG8gJChERVBESVIpL2xpYmdzdHBuZ19sYS1nc3RwbmcuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cG5nLmMnIG9iamVjdD0nbGliZ3N0cG5nX2xhLWdzdHBuZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHBuZ19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwbmdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cG5nX2xhLWdzdHBuZy5sbyBgdGVzdCAtZiAnZ3N0cG5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBuZy5jCi0KLWxpYmdzdHBuZ19sYS1nc3RwbmdlbmMubG86IGdzdHBuZ2VuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cG5nX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHBuZ19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cG5nX2xhLWdzdHBuZ2VuYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cG5nX2xhLWdzdHBuZ2VuYy5UcG8gLWMgLW8gbGliZ3N0cG5nX2xhLWdzdHBuZ2VuYy5sbyBgdGVzdCAtZiAnZ3N0cG5nZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHBuZ2VuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwbmdfbGEtZ3N0cG5nZW5jLlRwbyAkKERFUERJUikvbGliZ3N0cG5nX2xhLWdzdHBuZ2VuYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RwbmdlbmMuYycgb2JqZWN0PSdsaWJnc3RwbmdfbGEtZ3N0cG5nZW5jLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cG5nX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHBuZ19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RwbmdfbGEtZ3N0cG5nZW5jLmxvIGB0ZXN0IC1mICdnc3RwbmdlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cG5nZW5jLmMKLQotbGliZ3N0cG5nX2xhLWdzdHBuZ2RlYy5sbzogZ3N0cG5nZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RwbmdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cG5nX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RwbmdfbGEtZ3N0cG5nZGVjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RwbmdfbGEtZ3N0cG5nZGVjLlRwbyAtYyAtbyBsaWJnc3RwbmdfbGEtZ3N0cG5nZGVjLmxvIGB0ZXN0IC1mICdnc3RwbmdkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cG5nZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHBuZ19sYS1nc3RwbmdkZWMuVHBvICQoREVQRElSKS9saWJnc3RwbmdfbGEtZ3N0cG5nZGVjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHBuZ2RlYy5jJyBvYmplY3Q9J2xpYmdzdHBuZ19sYS1nc3RwbmdkZWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RwbmdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cG5nX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHBuZ19sYS1nc3RwbmdkZWMubG8gYHRlc3QgLWYgJ2dzdHBuZ2RlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwbmdkZWMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9leHQvbGlicG5nL2dzdHBuZy5jIGIvZXh0L2xpYnBuZy9nc3RwbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmZjQ3OS4uMDAwMDAwMAotLS0gYS9leHQvbGlicG5nL2dzdHBuZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEZpbHRlcjoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEb25hbGQgQS4gR3JhZnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RwbmdkZWMuaCIKLSNpbmNsdWRlICJnc3RwbmdlbmMuaCIKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJwbmdkZWMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX1BOR0RFQykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInBuZ2VuYyIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgR1NUX1RZUEVfUE5HRU5DKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBwbmcsCi0gICAgIlBORyBwbHVnaW4gbGlicmFyeSIsIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsCi0gICAgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZXh0L2xpYnBuZy9nc3RwbmdkZWMuYyBiL2V4dC9saWJwbmcvZ3N0cG5nZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzEwZmEuLjAwMDAwMDAKLS0tIGEvZXh0L2xpYnBuZy9nc3RwbmdkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDY2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCUF1dGhvciA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKglBdXRob3IgOiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCSAgICAgICAgIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcG5nZGVjCi0gKgotICogRGVjb2RlcyBwbmcgaW1hZ2VzLiBJZiB0aGVyZSBpcyBubyBmcmFtZXJhdGUgc2V0IG9uIHNpbmsgY2FwcywgaXQgc2VuZHMgRU9TCi0gKiBhZnRlciB0aGUgZmlyc3QgcGljdHVyZS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RwbmdkZWMuaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocG5nZGVjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHBuZ2RlY19kZWJ1ZwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BuZ2RlY19saWJwbmdfaW5pdCAoR3N0UG5nRGVjICogcG5nZGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3BuZ2RlY19jYXBzX2NyZWF0ZV9hbmRfc2V0IChHc3RQbmdEZWMgKiBwbmdkZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BuZ2RlY19zdGFydCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2Rlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BuZ2RlY19zdG9wIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcG5nZGVjX2ZsdXNoIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcG5nZGVjX3NldF9mb3JtYXQgKEdzdFZpZGVvRGVjb2RlciAqIERlY29kZXIsCi0gICAgR3N0VmlkZW9Db2RlY1N0YXRlICogc3RhdGUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3BuZ2RlY19wYXJzZSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSwgR3N0QWRhcHRlciAqIGFkYXB0ZXIsIGdib29sZWFuIGF0X2Vvcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcG5nZGVjX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BuZ2RlY19kZWNpZGVfYWxsb2NhdGlvbiAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcG5nZGVjX3NpbmtfZXZlbnQgKEdzdFZpZGVvRGVjb2RlciAqIGJkZWMsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgcGFyZW50X2NsYXNzIGdzdF9wbmdkZWNfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RQbmdEZWMsIGdzdF9wbmdkZWMsIEdTVF9UWVBFX1ZJREVPX0RFQ09ERVIpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3BuZ2RlY19zcmNfcGFkX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UKLSAgICAgICAgKCJ7IFJHQkEsIFJHQiwgQVJHQjY0LCBHUkFZOCwgR1JBWTE2X0JFIH0iKSkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3BuZ2RlY19zaW5rX3BhZF90ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJpbWFnZS9wbmciKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcG5nZGVjX2NsYXNzX2luaXQgKEdzdFBuZ0RlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRGVjb2RlckNsYXNzICp2ZGVjX2NsYXNzID0gKEdzdFZpZGVvRGVjb2RlckNsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9wbmdkZWNfc3JjX3BhZF90ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9wbmdkZWNfc2lua19wYWRfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiUE5HIGltYWdlIGRlY29kZXIiLAotICAgICAgIkNvZGVjL0RlY29kZXIvSW1hZ2UiLCAiRGVjb2RlIGEgcG5nIHZpZGVvIGZyYW1lIHRvIGEgcmF3IGltYWdlIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiIpOwotCi0gIHZkZWNfY2xhc3MtPnN0YXJ0ID0gZ3N0X3BuZ2RlY19zdGFydDsKLSAgdmRlY19jbGFzcy0+c3RvcCA9IGdzdF9wbmdkZWNfc3RvcDsKLSAgdmRlY19jbGFzcy0+Zmx1c2ggPSBnc3RfcG5nZGVjX2ZsdXNoOwotICB2ZGVjX2NsYXNzLT5zZXRfZm9ybWF0ID0gZ3N0X3BuZ2RlY19zZXRfZm9ybWF0OwotICB2ZGVjX2NsYXNzLT5wYXJzZSA9IGdzdF9wbmdkZWNfcGFyc2U7Ci0gIHZkZWNfY2xhc3MtPmhhbmRsZV9mcmFtZSA9IGdzdF9wbmdkZWNfaGFuZGxlX2ZyYW1lOwotICB2ZGVjX2NsYXNzLT5kZWNpZGVfYWxsb2NhdGlvbiA9IGdzdF9wbmdkZWNfZGVjaWRlX2FsbG9jYXRpb247Ci0gIHZkZWNfY2xhc3MtPnNpbmtfZXZlbnQgPSBnc3RfcG5nZGVjX3NpbmtfZXZlbnQ7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHBuZ2RlY19kZWJ1ZywgInBuZ2RlYyIsIDAsICJQTkcgaW1hZ2UgZGVjb2RlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BuZ2RlY19pbml0IChHc3RQbmdEZWMgKiBwbmdkZWMpCi17Ci0gIHBuZ2RlYy0+cG5nID0gTlVMTDsKLSAgcG5nZGVjLT5pbmZvID0gTlVMTDsKLSAgcG5nZGVjLT5lbmRpbmZvID0gTlVMTDsKLQotICBwbmdkZWMtPmNvbG9yX3R5cGUgPSAtMTsKLQotICBwbmdkZWMtPmltYWdlX3JlYWR5ID0gRkFMU0U7Ci0gIHBuZ2RlYy0+cmVhZF9kYXRhID0gMDsKLQotICBnc3RfdmlkZW9fZGVjb2Rlcl9zZXRfdXNlX2RlZmF1bHRfcGFkX2FjY2VwdGNhcHMgKEdTVF9WSURFT19ERUNPREVSX0NBU1QKLSAgICAgIChwbmdkZWMpLCBUUlVFKTsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfVklERU9fREVDT0RFUl9TSU5LX1BBRCAocG5nZGVjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11c2VyX2Vycm9yX2ZuIChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29uc3RfY2hhcnAgZXJyb3JfbXNnKQotewotICBHU1RfRVJST1IgKCIlcyIsIGVycm9yX21zZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11c2VyX3dhcm5pbmdfZm4gKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19jb25zdF9jaGFycCB3YXJuaW5nX21zZykKLXsKLSAgR1NUX1dBUk5JTkcgKCIlcyIsIHdhcm5pbmdfbXNnKTsKLX0KLQotc3RhdGljIHZvaWQKLXVzZXJfaW5mb19jYWxsYmFjayAocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm8pCi17Ci0gIEdzdFBuZ0RlYyAqcG5nZGVjID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgR1NUX0xPRyAoImluZm8gcmVhZHkiKTsKLQotICBwbmdkZWMgPSBHU1RfUE5HREVDIChwbmdfZ2V0X2lvX3B0ciAocG5nX3B0cikpOwotICAvKiBHZW5lcmF0ZSB0aGUgY2FwcyBhbmQgY29uZmlndXJlICovCi0gIHJldCA9IGdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCAocG5nZGVjKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICAvKiBBbGxvY2F0ZSBvdXRwdXQgYnVmZmVyICovCi0gIHJldCA9Ci0gICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9hbGxvY2F0ZV9vdXRwdXRfZnJhbWUgKEdTVF9WSURFT19ERUNPREVSIChwbmdkZWMpLAotICAgICAgcG5nZGVjLT5jdXJyZW50X2ZyYW1lKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocG5nZGVjLCAiZmFpbGVkIHRvIGFjcXVpcmUgYnVmZmVyIik7Ci0KLWJlYWNoOgotICBwbmdkZWMtPnJldCA9IHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcG5nZGVjX3NldF9mb3JtYXQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsIEdzdFZpZGVvQ29kZWNTdGF0ZSAqIHN0YXRlKQotewotICBHc3RQbmdEZWMgKnBuZ2RlYyA9IChHc3RQbmdEZWMgKikgZGVjb2RlcjsKLQotICBpZiAocG5nZGVjLT5pbnB1dF9zdGF0ZSkKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKHBuZ2RlYy0+aW5wdXRfc3RhdGUpOwotICBwbmdkZWMtPmlucHV0X3N0YXRlID0gZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3JlZiAoc3RhdGUpOwotCi0gIC8qIFdlJ2xsIHNldCBmb3JtYXQgbGF0ZXIgb24gKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXVzZXJfZW5kcm93X2NhbGxiYWNrIChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgbmV3X3JvdywKLSAgICBwbmdfdWludF8zMiByb3dfbnVtLCBpbnQgcGFzcykKLXsKLSAgR3N0UG5nRGVjICpwbmdkZWMgPSBOVUxMOwotCi0gIHBuZ2RlYyA9IEdTVF9QTkdERUMgKHBuZ19nZXRfaW9fcHRyIChwbmdfcHRyKSk7Ci0KLSAgLyogSWYgYnVmZmVyX291dCBkb2Vzbid0IGV4aXN0LCBpdCBtZWFucyBidWZmZXJfYWxsb2MgZmFpbGVkLCB3aGljaCAKLSAgICogd2lsbCBhbHJlYWR5IGhhdmUgc2V0IHRoZSByZXR1cm4gY29kZSAqLwotICBpZiAobmV3X3JvdyAmJiBHU1RfSVNfQlVGRkVSIChwbmdkZWMtPmN1cnJlbnRfZnJhbWUtPm91dHB1dF9idWZmZXIpKSB7Ci0gICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IHBuZ2RlYy0+Y3VycmVudF9mcmFtZS0+b3V0cHV0X2J1ZmZlcjsKLSAgICBzaXplX3Qgb2Zmc2V0OwotICAgIGd1aW50OCAqZGF0YTsKLQotICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJmZyYW1lLCAmcG5nZGVjLT5vdXRwdXRfc3RhdGUtPmluZm8sIGJ1ZmZlciwKLSAgICAgICAgICAgIEdTVF9NQVBfV1JJVEUpKSB7Ci0gICAgICBwbmdkZWMtPnJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRhdGEgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBICgmZnJhbWUsIDApOwotICAgIG9mZnNldCA9IHJvd19udW0gKiBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKCZmcmFtZSwgMCk7Ci0gICAgR1NUX0xPRyAoImdvdCByb3cgJXUgYXQgcGFzcyAlZCwgY29weWluZyBpbiBidWZmZXIgJXAgYXQgb2Zmc2V0ICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFULCAoZ3VpbnQpIHJvd19udW0sIHBhc3MsCi0gICAgICAgIHBuZ2RlYy0+Y3VycmVudF9mcmFtZS0+b3V0cHV0X2J1ZmZlciwgb2Zmc2V0KTsKLSAgICBwbmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3cgKHBuZ2RlYy0+cG5nLCBkYXRhICsgb2Zmc2V0LCBuZXdfcm93KTsKLSAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZSk7Ci0gICAgcG5nZGVjLT5yZXQgPSBHU1RfRkxPV19PSzsKLSAgfSBlbHNlCi0gICAgcG5nZGVjLT5yZXQgPSBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIHZvaWQKLXVzZXJfZW5kX2NhbGxiYWNrIChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mbykKLXsKLSAgR3N0UG5nRGVjICpwbmdkZWMgPSBOVUxMOwotCi0gIHBuZ2RlYyA9IEdTVF9QTkdERUMgKHBuZ19nZXRfaW9fcHRyIChwbmdfcHRyKSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBuZ2RlYywgImFuZCB3ZSBhcmUgZG9uZSByZWFkaW5nIHRoaXMgaW1hZ2UiKTsKLQotICBpZiAoIXBuZ2RlYy0+Y3VycmVudF9mcmFtZS0+b3V0cHV0X2J1ZmZlcikKLSAgICByZXR1cm47Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAocG5nZGVjLT5jdXJyZW50X2ZyYW1lLT5pbnB1dF9idWZmZXIsCi0gICAgICAmcG5nZGVjLT5jdXJyZW50X2ZyYW1lX21hcCk7Ci0KLSAgcG5nZGVjLT5yZXQgPQotICAgICAgZ3N0X3ZpZGVvX2RlY29kZXJfZmluaXNoX2ZyYW1lIChHU1RfVklERU9fREVDT0RFUiAocG5nZGVjKSwKLSAgICAgIHBuZ2RlYy0+Y3VycmVudF9mcmFtZSk7Ci0KLSAgcG5nZGVjLT5pbWFnZV9yZWFkeSA9IFRSVUU7Ci19Ci0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9wbmdkZWNfY2Fwc19jcmVhdGVfYW5kX3NldCAoR3N0UG5nRGVjICogcG5nZGVjKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBnaW50IGJwYyA9IDAsIGNvbG9yX3R5cGU7Ci0gIHBuZ191aW50XzMyIHdpZHRoLCBoZWlnaHQ7Ci0gIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BOR0RFQyAocG5nZGVjKSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIC8qIEdldCBiaXRzIHBlciBjaGFubmVsICovCi0gIGJwYyA9IHBuZ19nZXRfYml0X2RlcHRoIChwbmdkZWMtPnBuZywgcG5nZGVjLT5pbmZvKTsKLQotICAvKiBHZXQgQ29sb3IgdHlwZSAqLwotICBjb2xvcl90eXBlID0gcG5nX2dldF9jb2xvcl90eXBlIChwbmdkZWMtPnBuZywgcG5nZGVjLT5pbmZvKTsKLQotICAvKiBBZGQgYWxwaGEgY2hhbm5lbCBpZiAxNi1iaXQgZGVwdGgsIGJ1dCBub3QgZm9yIEdSQVkgaW1hZ2VzICovCi0gIGlmICgoYnBjID4gOCkgJiYgKGNvbG9yX3R5cGUgIT0gUE5HX0NPTE9SX1RZUEVfR1JBWSkpIHsKLSAgICBwbmdfc2V0X2FkZF9hbHBoYSAocG5nZGVjLT5wbmcsIDB4ZmZmZiwgUE5HX0ZJTExFUl9CRUZPUkUpOwotICAgIHBuZ19zZXRfc3dhcCAocG5nZGVjLT5wbmcpOwotICB9Ci0jaWYgMAotICAvKiBXZSB1c2VkIHRvIGhhdmUgdGhpcyBIQUNLIHRvIHJldmVyc2UgdGhlIG91dGdvaW5nIGJ5dGVzLCBidXQgdGhlIHByb2JsZW0KLSAgICogdGhhdCBvcmlnaW5hbGx5IHJlcXVpcmVkIHRoZSBoYWNrIHNlZW1zIHRvIGhhdmUgYmVlbiBpbiB2aWRlb2NvbnZlcnQncwotICAgKiBSR0JBIGRlc2NyaXB0aW9ucy4gSXQgZG9lc24ndCBzZWVtIG5lZWRlZCBub3cgdGhhdCdzIGZpeGVkLCBidXQgbWlnaHQKLSAgICogc3RpbGwgYmUgbmVlZGVkIG9uIGJpZy1lbmRpYW4gc3lzdGVtcywgSSdtIG5vdCBzdXJlLiBKLlMuIDYvNy8yMDA3ICovCi0gIGlmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSkKLSAgICBwbmdfc2V0X2JnciAocG5nZGVjLT5wbmcpOwotI2VuZGlmCi0KLSAgLyogR3JheSBzY2FsZSB3aXRoIGFscGhhIGNoYW5uZWwgY29udmVydGVkIHRvIFJHQiAqLwotICBpZiAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBuZ2RlYywKLSAgICAgICAgImNvbnZlcnRpbmcgZ3JheXNjYWxlIHBuZyB3aXRoIGFscGhhIGNoYW5uZWwgdG8gUkdCIik7Ci0gICAgcG5nX3NldF9ncmF5X3RvX3JnYiAocG5nZGVjLT5wbmcpOwotICB9Ci0KLSAgLyogR3JheSBzY2FsZSBjb252ZXJ0ZWQgdG8gdXBzY2FsZWQgdG8gOCBiaXRzICovCi0gIGlmICgoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKSB8fAotICAgICAgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSkpIHsKLSAgICBpZiAoYnBjIDwgOCkgeyAgICAgICAgICAgICAgLyogQ29udmVydCB0byA4IGJpdHMgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwbmdkZWMsICJjb252ZXJ0aW5nIGdyYXlzY2FsZSBpbWFnZSB0byA4IGJpdHMiKTsKLSNpZiBQTkdfTElCUE5HX1ZFUiA8IDEwNDAwCi0gICAgICBwbmdfc2V0X2dyYXlfMV8yXzRfdG9fOCAocG5nZGVjLT5wbmcpOwotI2Vsc2UKLSAgICAgIHBuZ19zZXRfZXhwYW5kX2dyYXlfMV8yXzRfdG9fOCAocG5nZGVjLT5wbmcpOwotI2VuZGlmCi0gICAgfQotICB9Ci0KLSAgLyogUGFsZXR0ZSBjb252ZXJ0ZWQgdG8gUkdCICovCi0gIGlmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocG5nZGVjLCAiY29udmVydGluZyBwYWxldHRlIHBuZyB0byBSR0IiKTsKLSAgICBwbmdfc2V0X3BhbGV0dGVfdG9fcmdiIChwbmdkZWMtPnBuZyk7Ci0gIH0KLQotICBwbmdfc2V0X2ludGVybGFjZV9oYW5kbGluZyAocG5nZGVjLT5wbmcpOwotCi0gIC8qIFVwZGF0ZSB0aGUgaW5mbyBzdHJ1Y3R1cmUgKi8KLSAgcG5nX3JlYWRfdXBkYXRlX2luZm8gKHBuZ2RlYy0+cG5nLCBwbmdkZWMtPmluZm8pOwotCi0gIC8qIEdldCBJSERSIGhlYWRlciBhZ2FpbiBhZnRlciB0cmFuc2Zvcm1hdGlvbiBzZXR0aW5ncyAqLwotICBwbmdfZ2V0X0lIRFIgKHBuZ2RlYy0+cG5nLCBwbmdkZWMtPmluZm8sICZ3aWR0aCwgJmhlaWdodCwKLSAgICAgICZicGMsICZwbmdkZWMtPmNvbG9yX3R5cGUsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwbmdkZWMsICJ0aGlzIGlzIGEgJWR4JWQgUE5HIGltYWdlIiwgKGdpbnQpIHdpZHRoLAotICAgICAgKGdpbnQpIGhlaWdodCk7Ci0KLSAgc3dpdGNoIChwbmdkZWMtPmNvbG9yX3R5cGUpIHsKLSAgICBjYXNlIFBOR19DT0xPUl9UWVBFX1JHQjoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwbmdkZWMsICJ3ZSBoYXZlIG5vIGFscGhhIGNoYW5uZWwsIGRlcHRoIGlzIDI0IGJpdHMiKTsKLSAgICAgIGlmIChicGMgPT0gOCkKLSAgICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9SR0I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQToKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwbmdkZWMsCi0gICAgICAgICAgIndlIGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgZGVwdGggaXMgMzIgb3IgNjQgYml0cyIpOwotICAgICAgaWYgKGJwYyA9PSA4KQotICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1JHQkE7Ci0gICAgICBlbHNlIGlmIChicGMgPT0gMTYpCi0gICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfQVJHQjY0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQTkdfQ09MT1JfVFlQRV9HUkFZOgotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBuZ2RlYywKLSAgICAgICAgICAiV2UgaGF2ZSBhbiBncmF5IGltYWdlLCBkZXB0aCBpcyA4IG9yIDE2IChiZSkgYml0cyIpOwotICAgICAgaWYgKGJwYyA9PSA4KQotICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0dSQVk4OwotICAgICAgZWxzZSBpZiAoYnBjID09IDE2KQotICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0dSQVkxNl9CRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBuZ2RlYywgU1RSRUFNLCBOT1RfSU1QTEVNRU5URUQsIChOVUxMKSwKLSAgICAgICAgKCJwbmdkZWMgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNvbG9yIHR5cGUiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfTk9UX1NVUFBPUlRFRDsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgLyogQ2hlY2sgaWYgb3V0cHV0IHN0YXRlIGNoYW5nZWQgKi8KLSAgaWYgKHBuZ2RlYy0+b3V0cHV0X3N0YXRlKSB7Ci0gICAgR3N0VmlkZW9JbmZvICppbmZvID0gJnBuZ2RlYy0+b3V0cHV0X3N0YXRlLT5pbmZvOwotCi0gICAgaWYgKHdpZHRoID09IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKSAmJgotICAgICAgICBoZWlnaHQgPT0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbmZvKSAmJgotICAgICAgICBHU1RfVklERU9fSU5GT19GT1JNQVQgKGluZm8pID09IGZvcm1hdCkgewotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChwbmdkZWMtPm91dHB1dF9zdGF0ZSk7Ci0gIH0KLQotICBwbmdkZWMtPm91dHB1dF9zdGF0ZSA9Ci0gICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9zZXRfb3V0cHV0X3N0YXRlIChHU1RfVklERU9fREVDT0RFUiAocG5nZGVjKSwgZm9ybWF0LAotICAgICAgd2lkdGgsIGhlaWdodCwgcG5nZGVjLT5pbnB1dF9zdGF0ZSk7Ci0gIGdzdF92aWRlb19kZWNvZGVyX25lZ290aWF0ZSAoR1NUX1ZJREVPX0RFQ09ERVIgKHBuZ2RlYykpOwotICBHU1RfREVCVUcgKCJGaW5hbCAlZCAlZCIsIEdTVF9WSURFT19JTkZPX1dJRFRIICgmcG5nZGVjLT5vdXRwdXRfc3RhdGUtPmluZm8pLAotICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmcG5nZGVjLT5vdXRwdXRfc3RhdGUtPmluZm8pKTsKLQotYmVhY2g6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcG5nZGVjX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpCi17Ci0gIEdzdFBuZ0RlYyAqcG5nZGVjID0gKEdzdFBuZ0RlYyAqKSBkZWNvZGVyOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwbmdkZWMsICJHb3QgYnVmZmVyLCBzaXplPSV1IiwKLSAgICAgIChndWludCkgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZnJhbWUtPmlucHV0X2J1ZmZlcikpOwotCi0gIC8qIExldCBsaWJwbmcgY29tZSBiYWNrIGhlcmUgb24gZXJyb3IgKi8KLSAgaWYgKHNldGptcCAocG5nX2ptcGJ1ZiAocG5nZGVjLT5wbmcpKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG5nZGVjLCAiZXJyb3IgZHVyaW5nIGRlY29kaW5nIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIHBuZ2RlYy0+Y3VycmVudF9mcmFtZSA9IGZyYW1lOwotCi0gIC8qIFByb2dyZXNzaXZlIGxvYWRpbmcgb2YgdGhlIFBORyBpbWFnZSAqLwotICBpZiAoIWdzdF9idWZmZXJfbWFwIChmcmFtZS0+aW5wdXRfYnVmZmVyLCAmcG5nZGVjLT5jdXJyZW50X2ZyYW1lX21hcCwKLSAgICAgICAgICBHU1RfTUFQX1JFQUQpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwbmdkZWMsICJGYWlsZWQgdG8gbWFwIGlucHV0IGJ1ZmZlciIpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICBwbmdfcHJvY2Vzc19kYXRhIChwbmdkZWMtPnBuZywgcG5nZGVjLT5pbmZvLAotICAgICAgcG5nZGVjLT5jdXJyZW50X2ZyYW1lX21hcC5kYXRhLCBwbmdkZWMtPmN1cnJlbnRfZnJhbWVfbWFwLnNpemUpOwotCi0gIGlmIChwbmdkZWMtPmltYWdlX3JlYWR5KSB7Ci0gICAgLyogUmVzZXQgb3Vyc2VsdmVzIGZvciB0aGUgbmV4dCBmcmFtZSAqLwotICAgIGdzdF9wbmdkZWNfZmx1c2ggKGRlY29kZXIpOwotICAgIEdTVF9MT0dfT0JKRUNUIChwbmdkZWMsICJzZXR0aW5nIHVwIGNhbGxiYWNrcyBmb3IgbmV4dCBmcmFtZSIpOwotICAgIHBuZ19zZXRfcHJvZ3Jlc3NpdmVfcmVhZF9mbiAocG5nZGVjLT5wbmcsIHBuZ2RlYywKLSAgICAgICAgdXNlcl9pbmZvX2NhbGxiYWNrLCB1c2VyX2VuZHJvd19jYWxsYmFjaywgdXNlcl9lbmRfY2FsbGJhY2spOwotICAgIHBuZ2RlYy0+aW1hZ2VfcmVhZHkgPSBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICAvKiBBbiBlcnJvciBoYXBwZW5lZCBhbmQgd2UgaGF2ZSB0byB1bm1hcCAqLwotICAgIGdzdF9idWZmZXJfdW5tYXAgKHBuZ2RlYy0+Y3VycmVudF9mcmFtZS0+aW5wdXRfYnVmZmVyLAotICAgICAgICAmcG5nZGVjLT5jdXJyZW50X2ZyYW1lX21hcCk7Ci0gIH0KLQotICByZXQgPSBwbmdkZWMtPnJldDsKLWJlYWNoOgotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIEJhc2VkIG9uIHBuZ3BhcnNlICovCi0jZGVmaW5lIFBOR19TSUdOQVRVUkUgR19HVUlOVDY0X0NPTlNUQU5UICgweDg5NTA0RTQ3MEQwQTFBMEEpCi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcG5nZGVjX3BhcnNlIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLCBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSwKLSAgICBHc3RBZGFwdGVyICogYWRhcHRlciwgZ2Jvb2xlYW4gYXRfZW9zKQotewotICBnc2l6ZSB0b2FkZCA9IDA7Ci0gIEdzdEJ5dGVSZWFkZXIgcmVhZGVyOwotICBnY29uc3Rwb2ludGVyIGRhdGE7Ci0gIGd1aW50NjQgc2lnbmF0dXJlOwotICBnc2l6ZSBzaXplOwotICBHc3RQbmdEZWMgKnBuZ2RlYyA9IChHc3RQbmdEZWMgKikgZGVjb2RlcjsKLQotICBHU1RfVklERU9fQ09ERUNfRlJBTUVfU0VUX1NZTkNfUE9JTlQgKGZyYW1lKTsKLQotICAvKiBGSVhNRSA6IFRoZSBvdmVyaGVhZCBvZiB1c2luZyBzY2FuX3VpbnQzMiBpcyBtYXNzaXZlICovCi0KLSAgc2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIEdTVF9ERUJVRyAoIlBhcnNpbmcgUE5HIGltYWdlIGRhdGEgKCUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMpIiwgc2l6ZSk7Ci0KLSAgaWYgKHNpemUgPCA4KQotICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgc2l6ZSk7Ci0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBkYXRhLCBzaXplKTsKLQotICBpZiAocG5nZGVjLT5yZWFkX2RhdGEgPT0gMCkgewotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDY0X2JlICgmcmVhZGVyLCAmc2lnbmF0dXJlKSkKLSAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgICBpZiAoc2lnbmF0dXJlICE9IFBOR19TSUdOQVRVUkUpIHsKLSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgZ3VpbnQgb2Zmc2V0OwotCi0gICAgICAgIG9mZnNldCA9IGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKCZyZWFkZXIsIDB4ZmZmZmZmZmYsCi0gICAgICAgICAgICAweDg5NTA0RTQ3LCAwLCBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlcikpOwotCi0gICAgICAgIGlmIChvZmZzZXQgPT0gLTEpIHsKLSAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwKLSAgICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpIC0gNCk7Ci0gICAgICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIG9mZnNldCkpCi0gICAgICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLQotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQ2NF9iZSAoJnJlYWRlciwgJnNpZ25hdHVyZSkpCi0gICAgICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLQotICAgICAgICBpZiAoc2lnbmF0dXJlID09IFBOR19TSUdOQVRVUkUpIHsKLSAgICAgICAgICAvKiBXZSdyZSBza2lwcGluZywgZ28gb3V0LCB3ZSdsbCBiZSBiYWNrICovCi0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGFkYXB0ZXIsIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSk7Ci0gICAgICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCA0KSkKLSAgICAgICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotICAgICAgfQotICAgIH0KLSAgICBwbmdkZWMtPnJlYWRfZGF0YSA9IDg7Ci0gIH0KLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCBwbmdkZWMtPnJlYWRfZGF0YSkpCi0gICAgZ290byBuZWVkX21vcmVfZGF0YTsKLQotICBmb3IgKDs7KSB7Ci0gICAgZ3VpbnQzMiBsZW5ndGg7Ci0gICAgZ3VpbnQzMiBjb2RlOwotCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnJlYWRlciwgJmxlbmd0aCkpCi0gICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKCZyZWFkZXIsICZjb2RlKSkKLSAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCBsZW5ndGggKyA0KSkKLSAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgICBpZiAoY29kZSA9PSBHU1RfTUFLRV9GT1VSQ0MgKCdJJywgJ0UnLCAnTicsICdEJykpIHsKLSAgICAgIC8qIEhhdmUgY29tcGxldGUgZnJhbWUgKi8KLSAgICAgIHRvYWRkID0gZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjb2RlciwgIkhhdmUgY29tcGxldGUgZnJhbWUgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICB0b2FkZCk7Ci0gICAgICBwbmdkZWMtPnJlYWRfZGF0YSA9IDA7Ci0gICAgICBnb3RvIGhhdmVfZnVsbF9mcmFtZTsKLSAgICB9IGVsc2UKLSAgICAgIHBuZ2RlYy0+cmVhZF9kYXRhICs9IGxlbmd0aCArIDEyOwotICB9Ci0KLSAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLQotbmVlZF9tb3JlX2RhdGE6Ci0gIHJldHVybiBHU1RfVklERU9fREVDT0RFUl9GTE9XX05FRURfREFUQTsKLQotaGF2ZV9mdWxsX2ZyYW1lOgotICBpZiAodG9hZGQpCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfYWRkX3RvX2ZyYW1lIChkZWNvZGVyLCB0b2FkZCk7Ci0gIHJldHVybiBnc3RfdmlkZW9fZGVjb2Rlcl9oYXZlX2ZyYW1lIChkZWNvZGVyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcG5nZGVjX2RlY2lkZV9hbGxvY2F0aW9uIChHc3RWaWRlb0RlY29kZXIgKiBiZGVjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RCdWZmZXJQb29sICpwb29sID0gTlVMTDsKLSAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0KLSAgaWYgKCFHU1RfVklERU9fREVDT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGVjaWRlX2FsbG9jYXRpb24gKGJkZWMsIHF1ZXJ5KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzIChxdWVyeSkgPiAwKQotICAgIGdzdF9xdWVyeV9wYXJzZV9udGhfYWxsb2NhdGlvbl9wb29sIChxdWVyeSwgMCwgJnBvb2wsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIGlmIChwb29sID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgaWYgKGdzdF9xdWVyeV9maW5kX2FsbG9jYXRpb25fbWV0YSAocXVlcnksIEdTVF9WSURFT19NRVRBX0FQSV9UWVBFLCBOVUxMKSkgewotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICB9Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcG5nZGVjX3NpbmtfZXZlbnQgKEdzdFZpZGVvRGVjb2RlciAqIGJkZWMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgIT0gR1NUX0VWRU5UX1NFR01FTlQpCi0gICAgZ290byBkb25lOwotCi0gIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotCi0gIGlmIChzZWdtZW50LT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQotICAgIGdzdF92aWRlb19kZWNvZGVyX3NldF9wYWNrZXRpemVkIChiZGVjLCBUUlVFKTsKLSAgZWxzZQotICAgIGdzdF92aWRlb19kZWNvZGVyX3NldF9wYWNrZXRpemVkIChiZGVjLCBGQUxTRSk7Ci0KLWRvbmU6Ci0gIHJldHVybiBHU1RfVklERU9fREVDT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoYmRlYywgZXZlbnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wbmdkZWNfbGlicG5nX2luaXQgKEdzdFBuZ0RlYyAqIHBuZ2RlYykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19QTkdERUMgKHBuZ2RlYyksIEZBTFNFKTsKLQotICBHU1RfTE9HICgiaW5pdCBsaWJwbmcgc3RydWN0dXJlcyIpOwotCi0gIC8qIGluaXRpYWxpemUgcG5nIHN0cnVjdCBzdHVmZiAqLwotICBwbmdkZWMtPnBuZyA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QgKFBOR19MSUJQTkdfVkVSX1NUUklORywKLSAgICAgIChwbmdfdm9pZHApIE5VTEwsIHVzZXJfZXJyb3JfZm4sIHVzZXJfd2FybmluZ19mbik7Ci0KLSAgaWYgKHBuZ2RlYy0+cG5nID09IE5VTEwpCi0gICAgZ290byBpbml0X2ZhaWxlZDsKLQotICBwbmdkZWMtPmluZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0IChwbmdkZWMtPnBuZyk7Ci0gIGlmIChwbmdkZWMtPmluZm8gPT0gTlVMTCkKLSAgICBnb3RvIGluZm9fZmFpbGVkOwotCi0gIHBuZ2RlYy0+ZW5kaW5mbyA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QgKHBuZ2RlYy0+cG5nKTsKLSAgaWYgKHBuZ2RlYy0+ZW5kaW5mbyA9PSBOVUxMKQotICAgIGdvdG8gZW5kaW5mb19mYWlsZWQ7Ci0KLSAgcG5nX3NldF9wcm9ncmVzc2l2ZV9yZWFkX2ZuIChwbmdkZWMtPnBuZywgcG5nZGVjLAotICAgICAgdXNlcl9pbmZvX2NhbGxiYWNrLCB1c2VyX2VuZHJvd19jYWxsYmFjaywgdXNlcl9lbmRfY2FsbGJhY2spOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW5pdF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocG5nZGVjLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIGluaXRpYWxpemUgcG5nIHN0cnVjdHVyZSIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWluZm9fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBuZ2RlYywgTElCUkFSWSwgSU5JVCwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBpbml0aWFsaXplIGluZm8gc3RydWN0dXJlIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZW5kaW5mb19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocG5nZGVjLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIGluaXRpYWxpemUgZW5kaW5mbyBzdHJ1Y3R1cmUiKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9wbmdkZWNfbGlicG5nX2NsZWFyIChHc3RQbmdEZWMgKiBwbmdkZWMpCi17Ci0gIHBuZ19pbmZvcHAgaW5mbyA9IE5VTEwsIGVuZGluZm8gPSBOVUxMOwotCi0gIEdTVF9MT0cgKCJjbGVhbmluZyB1cCBsaWJwbmcgc3RydWN0dXJlcyIpOwotCi0gIGlmIChwbmdkZWMtPmluZm8pIHsKLSAgICBpbmZvID0gJnBuZ2RlYy0+aW5mbzsKLSAgfQotCi0gIGlmIChwbmdkZWMtPmVuZGluZm8pIHsKLSAgICBlbmRpbmZvID0gJnBuZ2RlYy0+ZW5kaW5mbzsKLSAgfQotCi0gIGlmIChwbmdkZWMtPnBuZykgewotICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0ICgmKHBuZ2RlYy0+cG5nKSwgaW5mbywgZW5kaW5mbyk7Ci0gICAgcG5nZGVjLT5wbmcgPSBOVUxMOwotICAgIHBuZ2RlYy0+aW5mbyA9IE5VTEw7Ci0gICAgcG5nZGVjLT5lbmRpbmZvID0gTlVMTDsKLSAgfQotCi0gIHBuZ2RlYy0+Y29sb3JfdHlwZSA9IC0xOwotICBwbmdkZWMtPnJlYWRfZGF0YSA9IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BuZ2RlY19zdGFydCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlcikKLXsKLSAgR3N0UG5nRGVjICpwbmdkZWMgPSAoR3N0UG5nRGVjICopIGRlY29kZXI7Ci0KLSAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X3BhY2tldGl6ZWQgKEdTVF9WSURFT19ERUNPREVSIChwbmdkZWMpLCBGQUxTRSk7Ci0gIGdzdF9wbmdkZWNfbGlicG5nX2luaXQgKHBuZ2RlYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BuZ2RlY19zdG9wIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBHc3RQbmdEZWMgKnBuZ2RlYyA9IChHc3RQbmdEZWMgKikgZGVjb2RlcjsKLQotICBnc3RfcG5nZGVjX2xpYnBuZ19jbGVhciAocG5nZGVjKTsKLQotICBpZiAocG5nZGVjLT5pbnB1dF9zdGF0ZSkgewotICAgIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAocG5nZGVjLT5pbnB1dF9zdGF0ZSk7Ci0gICAgcG5nZGVjLT5pbnB1dF9zdGF0ZSA9IE5VTEw7Ci0gIH0KLSAgaWYgKHBuZ2RlYy0+b3V0cHV0X3N0YXRlKSB7Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChwbmdkZWMtPm91dHB1dF9zdGF0ZSk7Ci0gICAgcG5nZGVjLT5vdXRwdXRfc3RhdGUgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIENsZWFuIHVwIHRoZSBsaWJwbmcgc3RydWN0dXJlcyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcG5nZGVjX2ZsdXNoIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBnc3RfcG5nZGVjX2xpYnBuZ19jbGVhciAoKEdzdFBuZ0RlYyAqKSBkZWNvZGVyKTsKLSAgZ3N0X3BuZ2RlY19saWJwbmdfaW5pdCAoKEdzdFBuZ0RlYyAqKSBkZWNvZGVyKTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2V4dC9saWJwbmcvZ3N0cG5nZGVjLmggYi9leHQvbGlicG5nL2dzdHBuZ2RlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTk1ODUxLi4wMDAwMDAwCi0tLSBhL2V4dC9saWJwbmcvZ3N0cG5nZGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCUF1dGhvciA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9QTkdERUNfSF9fCi0jZGVmaW5lIF9fR1NUX1BOR0RFQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8cG5nLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9QTkdERUMgKGdzdF9wbmdkZWNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1BOR0RFQyhvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9QTkdERUMsR3N0UG5nRGVjKSkKLSNkZWZpbmUgR1NUX1BOR0RFQ19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUE5HREVDLEdzdFBuZ0RlY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1BOR0RFQyhvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9QTkdERUMpKQotI2RlZmluZSBHU1RfSVNfUE5HREVDX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9QTkdERUMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UG5nRGVjIEdzdFBuZ0RlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQbmdEZWNDbGFzcyBHc3RQbmdEZWNDbGFzczsKLQotc3RydWN0IF9Hc3RQbmdEZWMKLXsKLSAgR3N0VmlkZW9EZWNvZGVyIHBhcmVudDsKLQotICBHc3RWaWRlb0NvZGVjU3RhdGUgKmlucHV0X3N0YXRlOwotICBHc3RWaWRlb0NvZGVjU3RhdGUgKm91dHB1dF9zdGF0ZTsKLSAgR3N0TWFwSW5mbyBjdXJyZW50X2ZyYW1lX21hcDsKLSAgR3N0VmlkZW9Db2RlY0ZyYW1lICpjdXJyZW50X2ZyYW1lOwotCi0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHBuZ19zdHJ1Y3RwIHBuZzsKLSAgcG5nX2luZm9wIGluZm87Ci0gIHBuZ19pbmZvcCBlbmRpbmZvOwotCi0gIGdpbnQgY29sb3JfdHlwZTsKLQotICBnYm9vbGVhbiBpbWFnZV9yZWFkeTsKLSAgZ3NpemUgcmVhZF9kYXRhOwotfTsKLQotc3RydWN0IF9Hc3RQbmdEZWNDbGFzcwotewotICBHc3RWaWRlb0RlY29kZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcG5nZGVjX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUE5HREVDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L2xpYnBuZy9nc3RwbmdlbmMuYyBiL2V4dC9saWJwbmcvZ3N0cG5nZW5jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkM2UxMTYuLjAwMDAwMDAKLS0tIGEvZXh0L2xpYnBuZy9nc3RwbmdlbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogRmlsdGVyOgotICogQ29weXJpZ2h0IChDKSAyMDAwIERvbmFsZCBBLiBHcmFmdAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLgotICoJQXV0aG9yIDogRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNvbGxhYm9yYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXBuZ2VuYwotICoKLSAqIEVuY29kZXMgcG5nIGltYWdlcy4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KLSNpbmNsdWRlIDx6bGliLmg+Ci0KLSNpbmNsdWRlICJnc3RwbmdlbmMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocG5nZW5jX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHBuZ2VuY19kZWJ1ZwotCi0vKiBGaWx0ZXIgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfU05BUFNIT1QgICAgICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9DT01QUkVTU0lPTl9MRVZFTCAgICAgICA2Ci0KLWVudW0KLXsKLSAgQVJHXzAsCi0gIEFSR19TTkFQU0hPVCwKLSAgQVJHX0NPTVBSRVNTSU9OX0xFVkVMCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcG5nZW5jX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiaW1hZ2UvcG5nLCAiCi0gICAgICAgICJ3aWR0aCA9IChpbnQpIFsgMTYsIDEwMDAwMDAgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgMTAwMDAwMCBdLCAiICJmcmFtZXJhdGUgPSAiIEdTVF9WSURFT19GUFNfUkFOR0UpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHBuZ2VuY19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgUkdCQSwgUkdCLCBHUkFZOCwgR1JBWTE2X0JFIH0iKSkKLSAgICApOwotCi0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfcG5nZW5jX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UG5nRW5jLCBnc3RfcG5nZW5jLCBHU1RfVFlQRV9WSURFT19FTkNPREVSKTsKLQotc3RhdGljIHZvaWQgZ3N0X3BuZ2VuY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcG5nZW5jX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3BuZ2VuY19oYW5kbGVfZnJhbWUgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsCi0gICAgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpOwotc3RhdGljIGdib29sZWFuIGdzdF9wbmdlbmNfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjU3RhdGUgKiBzdGF0ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3BuZ2VuY19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9wbmdlbmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZAotdXNlcl9lcnJvcl9mbiAocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2NvbnN0X2NoYXJwIGVycm9yX21zZykKLXsKLSAgZ193YXJuaW5nICgiJXMiLCBlcnJvcl9tc2cpOwotfQotCi1zdGF0aWMgdm9pZAotdXNlcl93YXJuaW5nX2ZuIChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29uc3RfY2hhcnAgd2FybmluZ19tc2cpCi17Ci0gIGdfd2FybmluZyAoIiVzIiwgd2FybmluZ19tc2cpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BuZ2VuY19jbGFzc19pbml0IChHc3RQbmdFbmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR3N0VmlkZW9FbmNvZGVyQ2xhc3MgKnZlbmNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICB2ZW5jX2NsYXNzID0gKEdzdFZpZGVvRW5jb2RlckNsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9wbmdlbmNfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcG5nZW5jX3NldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfU05BUFNIT1QsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNuYXBzaG90IiwgIlNuYXBzaG90IiwKLSAgICAgICAgICAiU2VuZCBFT1MgYWZ0ZXIgZW5jb2RpbmcgYSBmcmFtZSwgdXNlZnVsIGZvciBzbmFwc2hvdHMiLAotICAgICAgICAgIERFRkFVTFRfU05BUFNIT1QsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19DT01QUkVTU0lPTl9MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiY29tcHJlc3Npb24tbGV2ZWwiLCAiY29tcHJlc3Npb24tbGV2ZWwiLAotICAgICAgICAgICJQTkcgY29tcHJlc3Npb24gbGV2ZWwiLAotICAgICAgICAgIFpfTk9fQ09NUFJFU1NJT04sIFpfQkVTVF9DT01QUkVTU0lPTiwKLSAgICAgICAgICBERUZBVUxUX0NPTVBSRVNTSU9OX0xFVkVMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlCi0gICAgICAoZWxlbWVudF9jbGFzcywgJnBuZ2VuY19zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUKLSAgICAgIChlbGVtZW50X2NsYXNzLCAmcG5nZW5jX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJQTkcgaW1hZ2UgZW5jb2RlciIsCi0gICAgICAiQ29kZWMvRW5jb2Rlci9JbWFnZSIsCi0gICAgICAiRW5jb2RlIGEgdmlkZW8gZnJhbWUgdG8gYSAucG5nIGltYWdlIiwKLSAgICAgICJKZXJlbXkgU0lNT04gPGpzaW1vbjEzQHlhaG9vLmZyPiIpOwotCi0gIHZlbmNfY2xhc3MtPnNldF9mb3JtYXQgPSBnc3RfcG5nZW5jX3NldF9mb3JtYXQ7Ci0gIHZlbmNfY2xhc3MtPmhhbmRsZV9mcmFtZSA9IGdzdF9wbmdlbmNfaGFuZGxlX2ZyYW1lOwotICB2ZW5jX2NsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSBnc3RfcG5nZW5jX3Byb3Bvc2VfYWxsb2NhdGlvbjsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcG5nZW5jX2ZpbmFsaXplOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChwbmdlbmNfZGVidWcsICJwbmdlbmMiLCAwLCAiUE5HIGltYWdlIGVuY29kZXIiKTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wbmdlbmNfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwgR3N0VmlkZW9Db2RlY1N0YXRlICogc3RhdGUpCi17Ci0gIEdzdFBuZ0VuYyAqcG5nZW5jOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3RWaWRlb0luZm8gKmluZm87Ci0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqb3V0cHV0X3N0YXRlOwotCi0gIHBuZ2VuYyA9IEdTVF9QTkdFTkMgKGVuY29kZXIpOwotICBpbmZvID0gJnN0YXRlLT5pbmZvOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgcG5nZW5jLT5wbmdfY29sb3JfdHlwZSA9IFBOR19DT0xPUl9UWVBFX1JHQkE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgICAgcG5nZW5jLT5wbmdfY29sb3JfdHlwZSA9IFBOR19DT0xPUl9UWVBFX1JHQjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9HUkFZODoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFOgotICAgICAgcG5nZW5jLT5wbmdfY29sb3JfdHlwZSA9IFBOR19DT0xPUl9UWVBFX0dSQVk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5mbykpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFOgotICAgICAgcG5nZW5jLT5kZXB0aCA9IDE2OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgLyogR1NUX1ZJREVPX0ZPUk1BVF9SR0IgYW5kIEdTVF9WSURFT19GT1JNQVRfR1JBWTggKi8KLSAgICAgIHBuZ2VuYy0+ZGVwdGggPSA4OwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAocG5nZW5jLT5pbnB1dF9zdGF0ZSkKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKHBuZ2VuYy0+aW5wdXRfc3RhdGUpOwotICBwbmdlbmMtPmlucHV0X3N0YXRlID0gZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3JlZiAoc3RhdGUpOwotCi0gIG91dHB1dF9zdGF0ZSA9Ci0gICAgICBnc3RfdmlkZW9fZW5jb2Rlcl9zZXRfb3V0cHV0X3N0YXRlIChlbmNvZGVyLAotICAgICAgZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImltYWdlL3BuZyIpLCBzdGF0ZSk7Ci0gIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAob3V0cHV0X3N0YXRlKTsKLQotZG9uZToKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BuZ2VuY19pbml0IChHc3RQbmdFbmMgKiBwbmdlbmMpCi17Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX1ZJREVPX0VOQ09ERVJfU0lOS19QQUQgKHBuZ2VuYykpOwotCi0gIC8qIGluaXQgc2V0dGluZ3MgKi8KLSAgcG5nZW5jLT5wbmdfc3RydWN0X3B0ciA9IE5VTEw7Ci0gIHBuZ2VuYy0+cG5nX2luZm9fcHRyID0gTlVMTDsKLQotICBwbmdlbmMtPnNuYXBzaG90ID0gREVGQVVMVF9TTkFQU0hPVDsKLSAgcG5nZW5jLT5jb21wcmVzc2lvbl9sZXZlbCA9IERFRkFVTFRfQ09NUFJFU1NJT05fTEVWRUw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcG5nZW5jX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RQbmdFbmMgKnBuZ2VuYyA9IEdTVF9QTkdFTkMgKG9iamVjdCk7Ci0KLSAgaWYgKHBuZ2VuYy0+aW5wdXRfc3RhdGUpCi0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChwbmdlbmMtPmlucHV0X3N0YXRlKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11c2VyX2ZsdXNoX2RhdGEgKHBuZ19zdHJ1Y3RwIHBuZ19wdHIgR19HTlVDX1VOVVNFRCkKLXsKLX0KLQotc3RhdGljIHZvaWQKLXVzZXJfd3JpdGVfZGF0YSAocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIGRhdGEsIHBuZ191aW50XzMyIGxlbmd0aCkKLXsKLSAgR3N0UG5nRW5jICpwbmdlbmM7Ci0gIEdzdE1lbW9yeSAqbWVtOwotICBHc3RNYXBJbmZvIG1pbmZvOwotCi0gIHBuZ2VuYyA9IChHc3RQbmdFbmMgKikgcG5nX2dldF9pb19wdHIgKHBuZ19wdHIpOwotCi0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIGxlbmd0aCwgTlVMTCk7Ci0gIGlmICghbWVtKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG5nZW5jLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIpOwotICAgIHBuZ19lcnJvciAocG5nX3B0ciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiKTsKLQotICAgIC8qIG5ldmVyIHJlYWNoZWQgKi8KLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoIWdzdF9tZW1vcnlfbWFwIChtZW0sICZtaW5mbywgR1NUX01BUF9XUklURSkpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwbmdlbmMsICJGYWlsZWQgdG8gbWFwIG1lbW9yeSIpOwotICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7Ci0KLSAgICBwbmdfZXJyb3IgKHBuZ19wdHIsICJGYWlsZWQgdG8gbWFwIG1lbW9yeSIpOwotCi0gICAgLyogbmV2ZXIgcmVhY2hlZCAqLwotICAgIHJldHVybjsKLSAgfQotCi0gIG1lbWNweSAobWluZm8uZGF0YSwgZGF0YSwgbGVuZ3RoKTsKLSAgZ3N0X21lbW9yeV91bm1hcCAobWVtLCAmbWluZm8pOwotCi0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAocG5nZW5jLT5idWZmZXJfb3V0LCBtZW0pOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3BuZ2VuY19oYW5kbGVfZnJhbWUgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKQotewotICBHc3RQbmdFbmMgKnBuZ2VuYzsKLSAgZ2ludCByb3dfaW5kZXg7Ci0gIHBuZ19ieXRlICoqcm93X3BvaW50ZXJzOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RWaWRlb0luZm8gKmluZm87Ci0gIEdzdFZpZGVvRnJhbWUgdmZyYW1lOwotCi0gIHBuZ2VuYyA9IEdTVF9QTkdFTkMgKGVuY29kZXIpOwotICBpbmZvID0gJnBuZ2VuYy0+aW5wdXRfc3RhdGUtPmluZm87Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG5nZW5jLCAiQkVHSU5OSU5HIik7Ci0KLSAgLyogaW5pdGlhbGl6ZSBwbmcgc3RydWN0IHN0dWZmICovCi0gIHBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdCAoUE5HX0xJQlBOR19WRVJfU1RSSU5HLAotICAgICAgKHBuZ192b2lkcCkgTlVMTCwgdXNlcl9lcnJvcl9mbiwgdXNlcl93YXJuaW5nX2ZuKTsKLSAgaWYgKHBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIgPT0gTlVMTCkKLSAgICBnb3RvIHN0cnVjdF9pbml0X2ZhaWw7Ci0KLSAgcG5nZW5jLT5wbmdfaW5mb19wdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0IChwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyKTsKLSAgaWYgKCFwbmdlbmMtPnBuZ19pbmZvX3B0cikKLSAgICBnb3RvIHBuZ19pbmZvX2ZhaWw7Ci0KLSAgLyogbm9uLTAgcmV0dXJuIGlzIGZyb20gYSBsb25nam1wIGluc2lkZSBvZiBsaWJwbmcgKi8KLSAgaWYgKHNldGptcCAocG5nX2ptcGJ1ZiAocG5nZW5jLT5wbmdfc3RydWN0X3B0cikpICE9IDApCi0gICAgZ290byBsb25nam1wX2ZhaWw7Ci0KLSAgcG5nX3NldF9maWx0ZXIgKHBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIsIDAsCi0gICAgICBQTkdfRklMVEVSX05PTkUgfCBQTkdfRklMVEVSX1ZBTFVFX05PTkUpOwotICBwbmdfc2V0X2NvbXByZXNzaW9uX2xldmVsIChwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyLCBwbmdlbmMtPmNvbXByZXNzaW9uX2xldmVsKTsKLQotICBwbmdfc2V0X0lIRFIgKHBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIsCi0gICAgICBwbmdlbmMtPnBuZ19pbmZvX3B0ciwKLSAgICAgIEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKSwKLSAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5mbyksCi0gICAgICBwbmdlbmMtPmRlcHRoLAotICAgICAgcG5nZW5jLT5wbmdfY29sb3JfdHlwZSwKLSAgICAgIFBOR19JTlRFUkxBQ0VfTk9ORSwKLSAgICAgIFBOR19DT01QUkVTU0lPTl9UWVBFX0RFRkFVTFQsIFBOR19GSUxURVJfVFlQRV9ERUZBVUxUKTsKLQotICBwbmdfc2V0X3dyaXRlX2ZuIChwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyLCBwbmdlbmMsCi0gICAgICAocG5nX3J3X3B0cikgdXNlcl93cml0ZV9kYXRhLCB1c2VyX2ZsdXNoX2RhdGEpOwotCi0gIHJvd19wb2ludGVycyA9IGdfbmV3IChwbmdfYnl0ZSAqLCBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pKTsKLSAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmdmZyYW1lLCAmcG5nZW5jLT5pbnB1dF9zdGF0ZS0+aW5mbywKLSAgICAgICAgICBmcmFtZS0+aW5wdXRfYnVmZmVyLCBHU1RfTUFQX1JFQUQpKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBuZ2VuYywgU1RSRUFNLCBGT1JNQVQsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gbWFwIHZpZGVvIGZyYW1lLCBjYXBzIHByb2JsZW0/IikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGZvciAocm93X2luZGV4ID0gMDsgcm93X2luZGV4IDwgR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbmZvKTsgcm93X2luZGV4KyspIHsKLSAgICByb3dfcG9pbnRlcnNbcm93X2luZGV4XSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKCZ2ZnJhbWUsIDApICsKLSAgICAgICAgKHJvd19pbmRleCAqIEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoJnZmcmFtZSwgMCkpOwotICB9Ci0KLSAgLyogYWxsb2NhdGUgdGhlIG91dHB1dCBidWZmZXIgKi8KLSAgcG5nZW5jLT5idWZmZXJfb3V0ID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgcG5nX3dyaXRlX2luZm8gKHBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIsIHBuZ2VuYy0+cG5nX2luZm9fcHRyKTsKLSAgcG5nX3dyaXRlX2ltYWdlIChwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyLCByb3dfcG9pbnRlcnMpOwotICBwbmdfd3JpdGVfZW5kIChwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyLCBOVUxMKTsKLQotICBnX2ZyZWUgKHJvd19wb2ludGVycyk7Ci0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJnZmcmFtZSk7Ci0KLSAgcG5nX2Rlc3Ryb3lfaW5mb19zdHJ1Y3QgKHBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIsICZwbmdlbmMtPnBuZ19pbmZvX3B0cik7Ci0gIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCAoJnBuZ2VuYy0+cG5nX3N0cnVjdF9wdHIsIChwbmdfaW5mb3BwKSBOVUxMKTsKLQotICAvKiBTZXQgZmluYWwgc2l6ZSBhbmQgc3RvcmUgKi8KLSAgZnJhbWUtPm91dHB1dF9idWZmZXIgPSBwbmdlbmMtPmJ1ZmZlcl9vdXQ7Ci0KLSAgcG5nZW5jLT5idWZmZXJfb3V0ID0gTlVMTDsKLQotICBpZiAoKHJldCA9IGdzdF92aWRlb19lbmNvZGVyX2ZpbmlzaF9mcmFtZSAoZW5jb2RlciwgZnJhbWUpKSAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGRvbmU7Ci0KLSAgaWYgKHBuZ2VuYy0+c25hcHNob3QpCi0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotCi1kb25lOgotICBHU1RfREVCVUdfT0JKRUNUIChwbmdlbmMsICJFTkQsIHJldDolZCIsIHJldCk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXN0cnVjdF9pbml0X2ZhaWw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocG5nZW5jLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIGluaXRpYWxpemUgcG5nIHN0cnVjdHVyZSIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotcG5nX2luZm9fZmFpbDoKLSAgewotICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCAoJihwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyKSwgKHBuZ19pbmZvcHApIE5VTEwpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwbmdlbmMsIExJQlJBUlksIElOSVQsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcG5nIGluZm8gc3RydWN0dXJlIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi1sb25nam1wX2ZhaWw6Ci0gIHsKLSAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QgKCZwbmdlbmMtPnBuZ19zdHJ1Y3RfcHRyLCAmcG5nZW5jLT5wbmdfaW5mb19wdHIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwbmdlbmMsIExJQlJBUlksIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoInJldHVybmluZyBmcm9tIGxvbmdqbXAiKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3BuZ2VuY19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUsIE5VTEwpOwotCi0gIHJldHVybiBHU1RfVklERU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+cHJvcG9zZV9hbGxvY2F0aW9uIChlbmNvZGVyLAotICAgICAgcXVlcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3BuZ2VuY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UG5nRW5jICpwbmdlbmM7Ci0KLSAgcG5nZW5jID0gR1NUX1BOR0VOQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19TTkFQU0hPVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwbmdlbmMtPnNuYXBzaG90KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0NPTVBSRVNTSU9OX0xFVkVMOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHBuZ2VuYy0+Y29tcHJlc3Npb25fbGV2ZWwpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcG5nZW5jX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RQbmdFbmMgKnBuZ2VuYzsKLQotICBwbmdlbmMgPSBHU1RfUE5HRU5DIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgQVJHX1NOQVBTSE9UOgotICAgICAgcG5nZW5jLT5zbmFwc2hvdCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0NPTVBSRVNTSU9OX0xFVkVMOgotICAgICAgcG5nZW5jLT5jb21wcmVzc2lvbl9sZXZlbCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2V4dC9saWJwbmcvZ3N0cG5nZW5jLmggYi9leHQvbGlicG5nL2dzdHBuZ2VuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzFkOTdjLi4wMDAwMDAwCi0tLSBhL2V4dC9saWJwbmcvZ3N0cG5nZW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4KLSAqCUF1dGhvciA6IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9QTkdFTkNfSF9fCi0jZGVmaW5lIF9fR1NUX1BOR0VOQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8cG5nLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KLQotCi0jZGVmaW5lIEdTVF9UWVBFX1BOR0VOQyAgICAgICAgICAgIChnc3RfcG5nZW5jX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9QTkdFTkMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9QTkdFTkMsR3N0UG5nRW5jKSkKLSNkZWZpbmUgR1NUX1BOR0VOQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUE5HRU5DLEdzdFBuZ0VuY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1BOR0VOQyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1BOR0VOQykpCi0jZGVmaW5lIEdTVF9JU19QTkdFTkNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1BOR0VOQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQbmdFbmMgR3N0UG5nRW5jOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFBuZ0VuY0NsYXNzIEdzdFBuZ0VuY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdFBuZ0VuYwotewotICBHc3RWaWRlb0VuY29kZXIgcGFyZW50OwotCi0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqaW5wdXRfc3RhdGU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyX291dDsKLQotICBwbmdfc3RydWN0cCBwbmdfc3RydWN0X3B0cjsKLSAgcG5nX2luZm9wIHBuZ19pbmZvX3B0cjsKLQotICBnaW50IHBuZ19jb2xvcl90eXBlOwotICBnaW50IGRlcHRoOwotICBndWludCBjb21wcmVzc2lvbl9sZXZlbDsKLQotICBnYm9vbGVhbiBzbmFwc2hvdDsKLSAgZ2Jvb2xlYW4gbmV3bWVkaWE7Ci19OwotCi1zdHJ1Y3QgX0dzdFBuZ0VuY0NsYXNzCi17Ci0gIEdzdFZpZGVvRW5jb2RlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9wbmdlbmNfZ2V0X3R5cGUodm9pZCk7Ci0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KLQotCi0jZW5kaWYgLyogX19HU1RfUE5HRU5DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3B1bHNlL01ha2VmaWxlLmFtIGIvZXh0L3B1bHNlL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEzY2I2Li4wMDAwMDAwCi0tLSBhL2V4dC9wdWxzZS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHB1bHNlLmxhCi0KLWxpYmdzdHB1bHNlX2xhX1NPVVJDRVMgPSBcCi0JcGx1Z2luLmMgXAotCXB1bHNlc2luay5jIFwKLQlwdWxzZXNyYy5jIFwKLQlwdWxzZWRldmljZXByb3ZpZGVyLmMgXAotCXB1bHNldXRpbC5jCi0KLWxpYmdzdHB1bHNlX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoUFVMU0VfQ0ZMQUdTKQotbGliZ3N0cHVsc2VfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQktbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoUFVMU0VfTElCUykKLWxpYmdzdHB1bHNlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHB1bHNlX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCXB1bHNlc2luay5oIFwKLQlwdWxzZXNyYy5oIFwKLQlwdWxzZWRldmljZXByb3ZpZGVyLmggXAotCXB1bHNldXRpbC5oCi0KZGlmZiAtLWdpdCBhL2V4dC9wdWxzZS9NYWtlZmlsZS5pbiBiL2V4dC9wdWxzZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1OTY2MS4uMDAwMDAwMAotLS0gYS9leHQvcHVsc2UvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NTkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L3B1bHNlCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0cHVsc2VfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHB1bHNlX2xhX09CSkVDVFMgPSBsaWJnc3RwdWxzZV9sYS1wbHVnaW4ubG8gXAotCWxpYmdzdHB1bHNlX2xhLXB1bHNlc2luay5sbyBsaWJnc3RwdWxzZV9sYS1wdWxzZXNyYy5sbyBcCi0JbGliZ3N0cHVsc2VfbGEtcHVsc2VkZXZpY2Vwcm92aWRlci5sbyBcCi0JbGliZ3N0cHVsc2VfbGEtcHVsc2V1dGlsLmxvCi1saWJnc3RwdWxzZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RwdWxzZV9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0cHVsc2VfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RwdWxzZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHB1bHNlX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHB1bHNlX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHB1bHNlX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHB1bHNlX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHB1bHNlLmxhCi1saWJnc3RwdWxzZV9sYV9TT1VSQ0VTID0gXAotCXBsdWdpbi5jIFwKLQlwdWxzZXNpbmsuYyBcCi0JcHVsc2VzcmMuYyBcCi0JcHVsc2VkZXZpY2Vwcm92aWRlci5jIFwKLQlwdWxzZXV0aWwuYwotCi1saWJnc3RwdWxzZV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKFBVTFNFX0NGTEFHUykKLWxpYmdzdHB1bHNlX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JLWxnc3RwYnV0aWxzLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKFBVTFNFX0xJQlMpCi0KLWxpYmdzdHB1bHNlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHB1bHNlX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IFwKLQlwdWxzZXNpbmsuaCBcCi0JcHVsc2VzcmMuaCBcCi0JcHVsc2VkZXZpY2Vwcm92aWRlci5oIFwKLQlwdWxzZXV0aWwuaAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvcHVsc2UvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3B1bHNlL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0cHVsc2UubGE6ICQobGliZ3N0cHVsc2VfbGFfT0JKRUNUUykgJChsaWJnc3RwdWxzZV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0cHVsc2VfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHB1bHNlX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RwdWxzZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHB1bHNlX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcGx1Z2luLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcHVsc2VkZXZpY2Vwcm92aWRlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHB1bHNlX2xhLXB1bHNlc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHB1bHNlX2xhLXB1bHNlc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcHVsc2V1dGlsLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RwdWxzZV9sYS1wbHVnaW4ubG86IHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cHVsc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHVsc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHB1bHNlX2xhLXBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcGx1Z2luLlRwbyAtYyAtbyBsaWJnc3RwdWxzZV9sYS1wbHVnaW4ubG8gYHRlc3QgLWYgJ3BsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbHVnaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcGx1Z2luLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3BsdWdpbi5jJyBvYmplY3Q9J2xpYmdzdHB1bHNlX2xhLXBsdWdpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHB1bHNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHB1bHNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHB1bHNlX2xhLXBsdWdpbi5sbyBgdGVzdCAtZiAncGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBsdWdpbi5jCi0KLWxpYmdzdHB1bHNlX2xhLXB1bHNlc2luay5sbzogcHVsc2VzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RwdWxzZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwdWxzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cHVsc2VfbGEtcHVsc2VzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXNpbmsuVHBvIC1jIC1vIGxpYmdzdHB1bHNlX2xhLXB1bHNlc2luay5sbyBgdGVzdCAtZiAncHVsc2VzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1bHNlc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXNpbmsuVHBvICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHVsc2VzaW5rLmMnIG9iamVjdD0nbGliZ3N0cHVsc2VfbGEtcHVsc2VzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cHVsc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHVsc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cHVsc2VfbGEtcHVsc2VzaW5rLmxvIGB0ZXN0IC1mICdwdWxzZXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHVsc2VzaW5rLmMKLQotbGliZ3N0cHVsc2VfbGEtcHVsc2VzcmMubG86IHB1bHNlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RwdWxzZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwdWxzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cHVsc2VfbGEtcHVsc2VzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHB1bHNlX2xhLXB1bHNlc3JjLlRwbyAtYyAtbyBsaWJnc3RwdWxzZV9sYS1wdWxzZXNyYy5sbyBgdGVzdCAtZiAncHVsc2VzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHVsc2VzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcHVsc2VzcmMuVHBvICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXNyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwdWxzZXNyYy5jJyBvYmplY3Q9J2xpYmdzdHB1bHNlX2xhLXB1bHNlc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cHVsc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHVsc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cHVsc2VfbGEtcHVsc2VzcmMubG8gYHRlc3QgLWYgJ3B1bHNlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1bHNlc3JjLmMKLQotbGliZ3N0cHVsc2VfbGEtcHVsc2VkZXZpY2Vwcm92aWRlci5sbzogcHVsc2VkZXZpY2Vwcm92aWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cHVsc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHVsc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHB1bHNlX2xhLXB1bHNlZGV2aWNlcHJvdmlkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHB1bHNlX2xhLXB1bHNlZGV2aWNlcHJvdmlkZXIuVHBvIC1jIC1vIGxpYmdzdHB1bHNlX2xhLXB1bHNlZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ3B1bHNlZGV2aWNlcHJvdmlkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHVsc2VkZXZpY2Vwcm92aWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZWRldmljZXByb3ZpZGVyLlRwbyAkKERFUERJUikvbGliZ3N0cHVsc2VfbGEtcHVsc2VkZXZpY2Vwcm92aWRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwdWxzZWRldmljZXByb3ZpZGVyLmMnIG9iamVjdD0nbGliZ3N0cHVsc2VfbGEtcHVsc2VkZXZpY2Vwcm92aWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHB1bHNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHB1bHNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHB1bHNlX2xhLXB1bHNlZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ3B1bHNlZGV2aWNlcHJvdmlkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHVsc2VkZXZpY2Vwcm92aWRlci5jCi0KLWxpYmdzdHB1bHNlX2xhLXB1bHNldXRpbC5sbzogcHVsc2V1dGlsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RwdWxzZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RwdWxzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cHVsc2VfbGEtcHVsc2V1dGlsLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXV0aWwuVHBvIC1jIC1vIGxpYmdzdHB1bHNlX2xhLXB1bHNldXRpbC5sbyBgdGVzdCAtZiAncHVsc2V1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1bHNldXRpbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXV0aWwuVHBvICQoREVQRElSKS9saWJnc3RwdWxzZV9sYS1wdWxzZXV0aWwuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHVsc2V1dGlsLmMnIG9iamVjdD0nbGliZ3N0cHVsc2VfbGEtcHVsc2V1dGlsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cHVsc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cHVsc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cHVsc2VfbGEtcHVsc2V1dGlsLmxvIGB0ZXN0IC1mICdwdWxzZXV0aWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHVsc2V1dGlsLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L3B1bHNlL3BsdWdpbi5jIGIvZXh0L3B1bHNlL3BsdWdpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmM4ZmU1Li4wMDAwMDAwCi0tLSBhL2V4dC9wdWxzZS9wbHVnaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiAgR1N0cmVhbWVyIHB1bHNlYXVkaW8gcGx1Z2luCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IExlbm5hcnQgUG9ldHRlcmluZwotICoKLSAqICBnc3QtcHVsc2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKLSAqICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBnc3QtcHVsc2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIGdzdC1wdWxzZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxCi0gKiAgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLQotI2luY2x1ZGUgInB1bHNlc2luay5oIgotI2luY2x1ZGUgInB1bHNlc3JjLmgiCi0jaW5jbHVkZSAicHVsc2VkZXZpY2Vwcm92aWRlci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKHB1bHNlX2RlYnVnKTsKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotI2lmZGVmIEVOQUJMRV9OTFMKLSAgR1NUX0RFQlVHICgiYmluZGluZyB0ZXh0IGRvbWFpbiAlcyB0byBsb2NhbGUgZGlyICVzIiwgR0VUVEVYVF9QQUNLQUdFLAotICAgICAgTE9DQUxFRElSKTsKLSAgYmluZHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSwgTE9DQUxFRElSKTsKLSAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7Ci0jZW5kaWYKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJwdWxzZXNpbmsiLCBHU1RfUkFOS19QUklNQVJZICsgMTAsCi0gICAgICAgICAgR1NUX1RZUEVfUFVMU0VTSU5LKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicHVsc2VzcmMiLCBHU1RfUkFOS19QUklNQVJZICsgMTAsCi0gICAgICAgICAgR1NUX1RZUEVfUFVMU0VTUkMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9kZXZpY2VfcHJvdmlkZXJfcmVnaXN0ZXIgKHBsdWdpbiwgInB1bHNlZGV2aWNlcHJvdmlkZXIiLAotICAgICAgICAgIEdTVF9SQU5LX1BSSU1BUlksIEdTVF9UWVBFX1BVTFNFX0RFVklDRV9QUk9WSURFUikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChwdWxzZV9kZWJ1ZywgInB1bHNlIiwgMCwgIlB1bHNlQXVkaW8gZWxlbWVudHMiKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBwdWxzZWF1ZGlvLAotICAgICJQdWxzZUF1ZGlvIHBsdWdpbiBsaWJyYXJ5IiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvcHVsc2UvcHVsc2VkZXZpY2Vwcm92aWRlci5jIGIvZXh0L3B1bHNlL3B1bHNlZGV2aWNlcHJvdmlkZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5NjRkYS4uMDAwMDAwMAotLS0gYS9leHQvcHVsc2UvcHVsc2VkZXZpY2Vwcm92aWRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjkwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyIE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4KLSAqCi0gKiBwdWxzZWRldmljZXByb3ZpZGVyLmM6IHB1bHNlYXVkaW8gZGV2aWNlIHByb2JpbmcgYW5kIG1vbml0b3JpbmcKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJwdWxzZWRldmljZXByb3ZpZGVyLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgInB1bHNlc3JjLmgiCi0jaW5jbHVkZSAicHVsc2VzaW5rLmgiCi0jaW5jbHVkZSAicHVsc2V1dGlsLmgiCi0KLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAocHVsc2VfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgcHVsc2VfZGVidWcKLQotCi1zdGF0aWMgR3N0RGV2aWNlICpnc3RfcHVsc2VfZGV2aWNlX25ldyAoZ3VpbnQgaWQsCi0gICAgY29uc3QgZ2NoYXIgKiBkZXZpY2VfbmFtZSwgR3N0Q2FwcyAqIGNhcHMsIGNvbnN0IGdjaGFyICogaW50ZXJuYWxfbmFtZSwKLSAgICBHc3RQdWxzZURldmljZVR5cGUgdHlwZSwgR3N0U3RydWN0dXJlICogcHJvcGVydGllcyk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFB1bHNlRGV2aWNlUHJvdmlkZXIsIGdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXIsCi0gICAgR1NUX1RZUEVfREVWSUNFX1BST1ZJREVSKTsKLQotc3RhdGljIHZvaWQgZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfcHVsc2VfZGV2aWNlX3Byb3ZpZGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0KLXN0YXRpYyBHTGlzdCAqZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9wcm9iZSAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9zdGFydCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcik7Ci1zdGF0aWMgdm9pZCBnc3RfcHVsc2VfZGV2aWNlX3Byb3ZpZGVyX3N0b3AgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9TRVJWRVIsCi0gIFBST1BfQ0xJRU5UX05BTUUsCi0gIFBST1BfTEFTVAotfTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9jbGFzc19pbml0IChHc3RQdWxzZURldmljZVByb3ZpZGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAqZG1fY2xhc3MgPSBHU1RfREVWSUNFX1BST1ZJREVSX0NMQVNTIChrbGFzcyk7Ci0gIGdjaGFyICpjbGllbnRfbmFtZTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcHVsc2VfZGV2aWNlX3Byb3ZpZGVyX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9maW5hbGl6ZTsKLQotICBkbV9jbGFzcy0+cHJvYmUgPSBnc3RfcHVsc2VfZGV2aWNlX3Byb3ZpZGVyX3Byb2JlOwotICBkbV9jbGFzcy0+c3RhcnQgPSBnc3RfcHVsc2VfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0OwotICBkbV9jbGFzcy0+c3RvcCA9IGdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXJfc3RvcDsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9TRVJWRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic2VydmVyIiwgIlNlcnZlciIsCi0gICAgICAgICAgIlRoZSBQdWxzZUF1ZGlvIHNlcnZlciB0byBjb25uZWN0IHRvIiwgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBjbGllbnRfbmFtZSA9IGdzdF9wdWxzZV9jbGllbnRfbmFtZSAoKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfQ0xJRU5UX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiY2xpZW50LW5hbWUiLCAiQ2xpZW50IE5hbWUiLAotICAgICAgICAgICJUaGUgUHVsc2VBdWRpbyBjbGllbnRfbmFtZV90b191c2UiLCBjbGllbnRfbmFtZSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZKSk7Ci0gIGdfZnJlZSAoY2xpZW50X25hbWUpOwotCi0gIGdzdF9kZXZpY2VfcHJvdmlkZXJfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZG1fY2xhc3MsCi0gICAgICAiUHVsc2VBdWRpbyBEZXZpY2UgUHJvdmlkZXIiLCAiU2luay9Tb3VyY2UvQXVkaW8iLAotICAgICAgIkxpc3QgYW5kIHByb3ZpZGVyIFB1bHNlQXVkaW8gc291cmNlIGFuZCBzaW5rIGRldmljZXMiLAotICAgICAgIk9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXJfaW5pdCAoR3N0UHVsc2VEZXZpY2VQcm92aWRlciAqIHNlbGYpCi17Ci0gIHNlbGYtPmNsaWVudF9uYW1lID0gZ3N0X3B1bHNlX2NsaWVudF9uYW1lICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UHVsc2VEZXZpY2VQcm92aWRlciAqc2VsZiA9IEdTVF9QVUxTRV9ERVZJQ0VfUFJPVklERVIgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChzZWxmLT5jbGllbnRfbmFtZSk7Ci0gIGdfZnJlZSAoc2VsZi0+c2VydmVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UHVsc2VEZXZpY2VQcm92aWRlciAqc2VsZiA9IEdTVF9QVUxTRV9ERVZJQ0VfUFJPVklERVIgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NFUlZFUjoKLSAgICAgIGdfZnJlZSAoc2VsZi0+c2VydmVyKTsKLSAgICAgIHNlbGYtPnNlcnZlciA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMSUVOVF9OQU1FOgotICAgICAgZ19mcmVlIChzZWxmLT5jbGllbnRfbmFtZSk7Ci0gICAgICBpZiAoIWdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwKLSAgICAgICAgICAgICJFbXB0eSBQdWxzZUF1ZGlvIGNsaWVudCBuYW1lIG5vdCBhbGxvd2VkLiAiCi0gICAgICAgICAgICAiUmVzZXR0aW5nIHRvIGRlZmF1bHQgdmFsdWUiKTsKLSAgICAgICAgc2VsZi0+Y2xpZW50X25hbWUgPSBnc3RfcHVsc2VfY2xpZW50X25hbWUgKCk7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgc2VsZi0+Y2xpZW50X25hbWUgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFB1bHNlRGV2aWNlUHJvdmlkZXIgKnNlbGYgPSBHU1RfUFVMU0VfREVWSUNFX1BST1ZJREVSIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TRVJWRVI6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzZWxmLT5zZXJ2ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMSUVOVF9OQU1FOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2VsZi0+Y2xpZW50X25hbWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29udGV4dF9zdGF0ZV9jYiAocGFfY29udGV4dCAqIGMsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZURldmljZVByb3ZpZGVyICpzZWxmID0gdXNlcmRhdGE7Ci0KLSAgc3dpdGNoIChwYV9jb250ZXh0X2dldF9zdGF0ZSAoYykpIHsKLSAgICBjYXNlIFBBX0NPTlRFWFRfUkVBRFk6Ci0gICAgY2FzZSBQQV9DT05URVhUX1RFUk1JTkFURUQ6Ci0gICAgY2FzZSBQQV9DT05URVhUX0ZBSUxFRDoKLSAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAoc2VsZi0+bWFpbmxvb3AsIDApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBBX0NPTlRFWFRfVU5DT05ORUNURUQ6Ci0gICAgY2FzZSBQQV9DT05URVhUX0NPTk5FQ1RJTkc6Ci0gICAgY2FzZSBQQV9DT05URVhUX0FVVEhPUklaSU5HOgotICAgIGNhc2UgUEFfQ09OVEVYVF9TRVRUSU5HX05BTUU6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0RGV2aWNlICoKLW5ld19zb3VyY2UgKGNvbnN0IHBhX3NvdXJjZV9pbmZvICogaW5mbykKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpwcm9wczsKLSAgZ3VpbnQgaTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5uX2Zvcm1hdHM7IGkrKykKLSAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMsIGdzdF9wdWxzZV9mb3JtYXRfaW5mb190b19jYXBzIChpbmZvLT5mb3JtYXRzW2ldKSk7Ci0KLSAgcHJvcHMgPSBnc3RfcHVsc2VfbWFrZV9zdHJ1Y3R1cmUgKGluZm8tPnByb3BsaXN0KTsKLQotICByZXR1cm4gZ3N0X3B1bHNlX2RldmljZV9uZXcgKGluZm8tPmluZGV4LCBpbmZvLT5kZXNjcmlwdGlvbiwKLSAgICAgIGNhcHMsIGluZm8tPm5hbWUsIEdTVF9QVUxTRV9ERVZJQ0VfVFlQRV9TT1VSQ0UsIHByb3BzKTsKLX0KLQotc3RhdGljIEdzdERldmljZSAqCi1uZXdfc2luayAoY29uc3QgcGFfc2lua19pbmZvICogaW5mbykKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpwcm9wczsKLSAgZ3VpbnQgaTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5uX2Zvcm1hdHM7IGkrKykKLSAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMsIGdzdF9wdWxzZV9mb3JtYXRfaW5mb190b19jYXBzIChpbmZvLT5mb3JtYXRzW2ldKSk7Ci0KLSAgcHJvcHMgPSBnc3RfcHVsc2VfbWFrZV9zdHJ1Y3R1cmUgKGluZm8tPnByb3BsaXN0KTsKLQotICByZXR1cm4gZ3N0X3B1bHNlX2RldmljZV9uZXcgKGluZm8tPmluZGV4LCBpbmZvLT5kZXNjcmlwdGlvbiwKLSAgICAgIGNhcHMsIGluZm8tPm5hbWUsIEdTVF9QVUxTRV9ERVZJQ0VfVFlQRV9TSU5LLCBwcm9wcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZXRfc291cmNlX2luZm9fY2IgKHBhX2NvbnRleHQgKiBjb250ZXh0LAotICAgIGNvbnN0IHBhX3NvdXJjZV9pbmZvICogaW5mbywgaW50IGVvbCwgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlRGV2aWNlUHJvdmlkZXIgKnNlbGYgPSB1c2VyZGF0YTsKLSAgR3N0RGV2aWNlICpkZXY7Ci0KLSAgaWYgKGVvbCkgewotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAoc2VsZi0+bWFpbmxvb3AsIDApOwotICAgIHJldHVybjsKLSAgfQotCi0gIGRldiA9IG5ld19zb3VyY2UgKGluZm8pOwotCi0gIGlmIChkZXYpCi0gICAgZ3N0X2RldmljZV9wcm92aWRlcl9kZXZpY2VfYWRkIChHU1RfREVWSUNFX1BST1ZJREVSIChzZWxmKSwgZGV2KTsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9zaW5rX2luZm9fY2IgKHBhX2NvbnRleHQgKiBjb250ZXh0LAotICAgIGNvbnN0IHBhX3NpbmtfaW5mbyAqIGluZm8sIGludCBlb2wsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZURldmljZVByb3ZpZGVyICpzZWxmID0gdXNlcmRhdGE7Ci0gIEdzdERldmljZSAqZGV2OwotCi0gIGlmIChlb2wpIHsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKHNlbGYtPm1haW5sb29wLCAwKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBkZXYgPSBuZXdfc2luayAoaW5mbyk7Ci0KLSAgaWYgKGRldikKLSAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9hZGQgKEdTVF9ERVZJQ0VfUFJPVklERVIgKHNlbGYpLCBkZXYpOwotfQotCi1zdGF0aWMgdm9pZAotY29udGV4dF9zdWJzY3JpYmVfY2IgKHBhX2NvbnRleHQgKiBjb250ZXh0LCBwYV9zdWJzY3JpcHRpb25fZXZlbnRfdHlwZV90IHR5cGUsCi0gICAgdWludDMyX3QgaWR4LCB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VEZXZpY2VQcm92aWRlciAqc2VsZiA9IHVzZXJkYXRhOwotICBHc3REZXZpY2VQcm92aWRlciAqcHJvdmlkZXIgPSB1c2VyZGF0YTsKLSAgcGFfc3Vic2NyaXB0aW9uX2V2ZW50X3R5cGVfdCBmYWNpbGl0eSA9Ci0gICAgICB0eXBlICYgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0ZBQ0lMSVRZX01BU0s7Ci0gIHBhX3N1YnNjcmlwdGlvbl9ldmVudF90eXBlX3QgZXZlbnRfdHlwZSA9Ci0gICAgICB0eXBlICYgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX1RZUEVfTUFTSzsKLQotICBpZiAoZmFjaWxpdHkgIT0gUEFfU1VCU0NSSVBUSU9OX0VWRU5UX1NPVVJDRSAmJgotICAgICAgZmFjaWxpdHkgIT0gUEFfU1VCU0NSSVBUSU9OX0VWRU5UX1NJTkspCi0gICAgcmV0dXJuOwotCi0gIGlmIChldmVudF90eXBlID09IFBBX1NVQlNDUklQVElPTl9FVkVOVF9ORVcpIHsKLSAgICAvKiBNaWNyb3Bob25lIGluIHRoZSBzb3VyY2Ugb3V0cHV0IGhhcyBjaGFuZ2VkICovCi0KLSAgICBpZiAoZmFjaWxpdHkgPT0gUEFfU1VCU0NSSVBUSU9OX0VWRU5UX1NPVVJDRSkKLSAgICAgIHBhX2NvbnRleHRfZ2V0X3NvdXJjZV9pbmZvX2J5X2luZGV4IChjb250ZXh0LCBpZHgsIGdldF9zb3VyY2VfaW5mb19jYiwKLSAgICAgICAgICBzZWxmKTsKLSAgICBlbHNlIGlmIChmYWNpbGl0eSA9PSBQQV9TVUJTQ1JJUFRJT05fRVZFTlRfU0lOSykKLSAgICAgIHBhX2NvbnRleHRfZ2V0X3NpbmtfaW5mb19ieV9pbmRleCAoY29udGV4dCwgaWR4LCBnZXRfc2lua19pbmZvX2NiLCBzZWxmKTsKLSAgfSBlbHNlIGlmIChldmVudF90eXBlID09IFBBX1NVQlNDUklQVElPTl9FVkVOVF9SRU1PVkUpIHsKLSAgICBHc3RQdWxzZURldmljZSAqZGV2ID0gTlVMTDsKLSAgICBHTGlzdCAqaXRlbTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgZm9yIChpdGVtID0gcHJvdmlkZXItPmRldmljZXM7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgICBkZXYgPSBpdGVtLT5kYXRhOwotCi0gICAgICBpZiAoKChmYWNpbGl0eSA9PSBQQV9TVUJTQ1JJUFRJT05fRVZFTlRfU09VUkNFICYmCi0gICAgICAgICAgICAgICAgICBkZXYtPnR5cGUgPT0gR1NUX1BVTFNFX0RFVklDRV9UWVBFX1NPVVJDRSkgfHwKLSAgICAgICAgICAgICAgKGZhY2lsaXR5ID09IFBBX1NVQlNDUklQVElPTl9FVkVOVF9TSU5LICYmCi0gICAgICAgICAgICAgICAgICBkZXYtPnR5cGUgPT0gR1NUX1BVTFNFX0RFVklDRV9UWVBFX1NJTkspKSAmJgotICAgICAgICAgIGRldi0+ZGV2aWNlX2luZGV4ID09IGlkeCkgewotICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoZGV2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZXYgPSBOVUxMOwotICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0KLSAgICBpZiAoZGV2KSB7Ci0gICAgICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2RldmljZV9yZW1vdmUgKEdTVF9ERVZJQ0VfUFJPVklERVIgKHNlbGYpLAotICAgICAgICAgIEdTVF9ERVZJQ0UgKGRldikpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGV2KTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdldF9zb3VyY2VfaW5mb19saXN0X2NiIChwYV9jb250ZXh0ICogY29udGV4dCwgY29uc3QgcGFfc291cmNlX2luZm8gKiBpbmZvLAotICAgIGludCBlb2wsIHZvaWQgKnVzZXJkYXRhKQotewotICBHTGlzdCAqKmRldmljZXMgPSB1c2VyZGF0YTsKLQotICBpZiAoZW9sKQotICAgIHJldHVybjsKLQotICAqZGV2aWNlcyA9IGdfbGlzdF9wcmVwZW5kICgqZGV2aWNlcywgZ3N0X29iamVjdF9yZWZfc2luayAobmV3X3NvdXJjZSAoaW5mbykpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9zaW5rX2luZm9fbGlzdF9jYiAocGFfY29udGV4dCAqIGNvbnRleHQsIGNvbnN0IHBhX3NpbmtfaW5mbyAqIGluZm8sCi0gICAgaW50IGVvbCwgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdMaXN0ICoqZGV2aWNlcyA9IHVzZXJkYXRhOwotCi0gIGlmIChlb2wpCi0gICAgcmV0dXJuOwotCi0gICpkZXZpY2VzID0gZ19saXN0X3ByZXBlbmQgKCpkZXZpY2VzLCBnc3Rfb2JqZWN0X3JlZl9zaW5rIChuZXdfc2luayAoaW5mbykpKTsKLX0KLQotc3RhdGljIEdMaXN0ICoKLWdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXJfcHJvYmUgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpCi17Ci0gIEdzdFB1bHNlRGV2aWNlUHJvdmlkZXIgKnNlbGYgPSBHU1RfUFVMU0VfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcik7Ci0gIEdMaXN0ICpkZXZpY2VzID0gTlVMTDsKLSAgcGFfbWFpbmxvb3AgKm0gPSBOVUxMOwotICBwYV9jb250ZXh0ICpjID0gTlVMTDsKLSAgcGFfb3BlcmF0aW9uICpvOwotCi0gIGlmICghKG0gPSBwYV9tYWlubG9vcF9uZXcgKCkpKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmICghKGMgPSBwYV9jb250ZXh0X25ldyAocGFfbWFpbmxvb3BfZ2V0X2FwaSAobSksIHNlbGYtPmNsaWVudF9uYW1lKSkpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiRmFpbGVkIHRvIGNyZWF0ZSBjb250ZXh0Iik7Ci0gICAgZ290byBmYWlsZWQ7Ci0gIH0KLQotICBpZiAocGFfY29udGV4dF9jb25uZWN0IChjLCBzZWxmLT5zZXJ2ZXIsIDAsIE5VTEwpIDwgMCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJGYWlsZWQgdG8gY29ubmVjdDogJXMiLAotICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAoc2VsZi0+Y29udGV4dCkpKTsKLSAgICBnb3RvIGZhaWxlZDsKLSAgfQotCi0gIGZvciAoOzspIHsKLSAgICBwYV9jb250ZXh0X3N0YXRlX3Qgc3RhdGU7Ci0KLSAgICBzdGF0ZSA9IHBhX2NvbnRleHRfZ2V0X3N0YXRlIChjKTsKLQotICAgIGlmICghUEFfQ09OVEVYVF9JU19HT09EIChzdGF0ZSkpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBSRVNPVVJDRSwgRkFJTEVELCAoIkZhaWxlZCB0byBjb25uZWN0OiAlcyIsCi0gICAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChjKSkpLCAoTlVMTCkpOwotICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlID09IFBBX0NPTlRFWFRfUkVBRFkpCi0gICAgICBicmVhazsKLQotICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbnRleHQgaXMgcmVhZHkgKi8KLSAgICBpZiAocGFfbWFpbmxvb3BfaXRlcmF0ZSAobSwgVFJVRSwgTlVMTCkgPCAwKQotICAgICAgZ290byBmYWlsZWQ7Ci0KLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiY29ubmVjdGVkIik7Ci0KLSAgbyA9IHBhX2NvbnRleHRfZ2V0X3NpbmtfaW5mb19saXN0IChjLCBnZXRfc2lua19pbmZvX2xpc3RfY2IsICZkZXZpY2VzKTsKLSAgd2hpbGUgKHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKG8pID09IFBBX09QRVJBVElPTl9SVU5OSU5HICYmCi0gICAgICBwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChvKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgIGlmIChwYV9tYWlubG9vcF9pdGVyYXRlIChtLCBUUlVFLCBOVUxMKSA8IDApCi0gICAgICBicmVhazsKLSAgfQotICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIG8gPSBwYV9jb250ZXh0X2dldF9zb3VyY2VfaW5mb19saXN0IChjLCBnZXRfc291cmNlX2luZm9fbGlzdF9jYiwgJmRldmljZXMpOwotICB3aGlsZSAocGFfb3BlcmF0aW9uX2dldF9zdGF0ZSAobykgPT0gUEFfT1BFUkFUSU9OX1JVTk5JTkcgJiYKLSAgICAgIHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKG8pID09IFBBX09QRVJBVElPTl9SVU5OSU5HKSB7Ci0gICAgaWYgKHBhX21haW5sb29wX2l0ZXJhdGUgKG0sIFRSVUUsIE5VTEwpIDwgMCkKLSAgICAgIGJyZWFrOwotICB9Ci0gIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0KLSAgcGFfY29udGV4dF9kaXNjb25uZWN0IChjKTsKLSAgcGFfbWFpbmxvb3BfZnJlZSAobSk7Ci0KLSAgcmV0dXJuIGRldmljZXM7Ci0KLWZhaWxlZDoKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0IChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotICBHc3RQdWxzZURldmljZVByb3ZpZGVyICpzZWxmID0gR1NUX1BVTFNFX0RFVklDRV9QUk9WSURFUiAocHJvdmlkZXIpOwotICBwYV9vcGVyYXRpb24gKmluaXRpYWxfb3BlcmF0aW9uOwotCi0gIGlmICghKHNlbGYtPm1haW5sb29wID0gcGFfdGhyZWFkZWRfbWFpbmxvb3BfbmV3ICgpKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJDb3VsZCBub3QgY3JlYXRlIHB1bHNlYXVkaW8gbWFpbmxvb3AiKTsKLSAgICBnb3RvIG1haW5sb29wX2ZhaWxlZDsKLSAgfQotICBpZiAocGFfdGhyZWFkZWRfbWFpbmxvb3Bfc3RhcnQgKHNlbGYtPm1haW5sb29wKSA8IDApIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiQ291bGQgbm90IHN0YXJ0IHB1bHNlYXVkaW8gbWFpbmxvb3AiKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9mcmVlIChzZWxmLT5tYWlubG9vcCk7Ci0gICAgc2VsZi0+bWFpbmxvb3AgPSBOVUxMOwotICAgIGdvdG8gbWFpbmxvb3BfZmFpbGVkOwotICB9Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAoc2VsZi0+bWFpbmxvb3ApOwotCi0gIGlmICghKHNlbGYtPmNvbnRleHQgPQotICAgICAgICAgIHBhX2NvbnRleHRfbmV3IChwYV90aHJlYWRlZF9tYWlubG9vcF9nZXRfYXBpIChzZWxmLT5tYWlubG9vcCksCi0gICAgICAgICAgICAgIHNlbGYtPmNsaWVudF9uYW1lKSkpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiRmFpbGVkIHRvIGNyZWF0ZSBjb250ZXh0Iik7Ci0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gIH0KLQotICBwYV9jb250ZXh0X3NldF9zdGF0ZV9jYWxsYmFjayAoc2VsZi0+Y29udGV4dCwgY29udGV4dF9zdGF0ZV9jYiwgc2VsZik7Ci0gIHBhX2NvbnRleHRfc2V0X3N1YnNjcmliZV9jYWxsYmFjayAoc2VsZi0+Y29udGV4dCwgY29udGV4dF9zdWJzY3JpYmVfY2IsIHNlbGYpOwotCi0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImNvbm5lY3QgdG8gc2VydmVyICVzIiwgR1NUX1NUUl9OVUxMIChzZWxmLT5zZXJ2ZXIpKTsKLQotICBpZiAocGFfY29udGV4dF9jb25uZWN0IChzZWxmLT5jb250ZXh0LCBzZWxmLT5zZXJ2ZXIsIDAsIE5VTEwpIDwgMCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJGYWlsZWQgdG8gY29ubmVjdDogJXMiLAotICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAoc2VsZi0+Y29udGV4dCkpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotCi0gIGZvciAoOzspIHsKLSAgICBwYV9jb250ZXh0X3N0YXRlX3Qgc3RhdGU7Ci0KLSAgICBzdGF0ZSA9IHBhX2NvbnRleHRfZ2V0X3N0YXRlIChzZWxmLT5jb250ZXh0KTsKLQotICAgIGlmICghUEFfQ09OVEVYVF9JU19HT09EIChzdGF0ZSkpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJGYWlsZWQgdG8gY29ubmVjdDogJXMiLAotICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChzZWxmLT5jb250ZXh0KSkpOwotICAgICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlID09IFBBX0NPTlRFWFRfUkVBRFkpCi0gICAgICBicmVhazsKLQotICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbnRleHQgaXMgcmVhZHkgKi8KLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChzZWxmLT5tYWlubG9vcCk7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImNvbm5lY3RlZCIpOwotCi0gIHBhX2NvbnRleHRfc3Vic2NyaWJlIChzZWxmLT5jb250ZXh0LAotICAgICAgUEFfU1VCU0NSSVBUSU9OX01BU0tfU09VUkNFIHwgUEFfU1VCU0NSSVBUSU9OX01BU0tfU0lOSywgTlVMTCwgTlVMTCk7Ci0KLSAgaW5pdGlhbF9vcGVyYXRpb24gPSBwYV9jb250ZXh0X2dldF9zb3VyY2VfaW5mb19saXN0IChzZWxmLT5jb250ZXh0LAotICAgICAgZ2V0X3NvdXJjZV9pbmZvX2NiLCBzZWxmKTsKLSAgd2hpbGUgKHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKGluaXRpYWxfb3BlcmF0aW9uKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgIGlmICghUEFfQ09OVEVYVF9JU19HT09EIChwYV9jb250ZXh0X2dldF9zdGF0ZSAoKHNlbGYtPmNvbnRleHQpKSkpCi0gICAgICBnb3RvIGNhbmNlbF9hbmRfZmFpbDsKLQotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKHNlbGYtPm1haW5sb29wKTsKLSAgfQotICBwYV9vcGVyYXRpb25fdW5yZWYgKGluaXRpYWxfb3BlcmF0aW9uKTsKLQotICBpbml0aWFsX29wZXJhdGlvbiA9IHBhX2NvbnRleHRfZ2V0X3NpbmtfaW5mb19saXN0IChzZWxmLT5jb250ZXh0LAotICAgICAgZ2V0X3NpbmtfaW5mb19jYiwgc2VsZik7Ci0gIGlmICghaW5pdGlhbF9vcGVyYXRpb24pCi0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gIHdoaWxlIChwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChpbml0aWFsX29wZXJhdGlvbikgPT0gUEFfT1BFUkFUSU9OX1JVTk5JTkcpIHsKLSAgICBpZiAoIVBBX0NPTlRFWFRfSVNfR09PRCAocGFfY29udGV4dF9nZXRfc3RhdGUgKChzZWxmLT5jb250ZXh0KSkpKQotICAgICAgZ290byBjYW5jZWxfYW5kX2ZhaWw7Ci0KLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChzZWxmLT5tYWlubG9vcCk7Ci0gIH0KLSAgcGFfb3BlcmF0aW9uX3VucmVmIChpbml0aWFsX29wZXJhdGlvbik7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChzZWxmLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLXVubG9ja19hbmRfZmFpbDoKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChzZWxmLT5tYWlubG9vcCk7Ci0gIGdzdF9wdWxzZV9kZXZpY2VfcHJvdmlkZXJfc3RvcCAocHJvdmlkZXIpOwotICByZXR1cm4gRkFMU0U7Ci0KLW1haW5sb29wX2ZhaWxlZDoKLSAgcmV0dXJuIEZBTFNFOwotCi1jYW5jZWxfYW5kX2ZhaWw6Ci0gIHBhX29wZXJhdGlvbl9jYW5jZWwgKGluaXRpYWxfb3BlcmF0aW9uKTsKLSAgcGFfb3BlcmF0aW9uX3VucmVmIChpbml0aWFsX29wZXJhdGlvbik7Ci0gIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9zdG9wIChHc3REZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotICBHc3RQdWxzZURldmljZVByb3ZpZGVyICpzZWxmID0gR1NUX1BVTFNFX0RFVklDRV9QUk9WSURFUiAocHJvdmlkZXIpOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3N0b3AgKHNlbGYtPm1haW5sb29wKTsKLQotICBpZiAoc2VsZi0+Y29udGV4dCkgewotICAgIHBhX2NvbnRleHRfZGlzY29ubmVjdCAoc2VsZi0+Y29udGV4dCk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBmdXJ0aGVyIGNhbGxiYWNrcyAqLwotICAgIHBhX2NvbnRleHRfc2V0X3N0YXRlX2NhbGxiYWNrIChzZWxmLT5jb250ZXh0LCBOVUxMLCBOVUxMKTsKLSAgICBwYV9jb250ZXh0X3NldF9zdWJzY3JpYmVfY2FsbGJhY2sgKHNlbGYtPmNvbnRleHQsIE5VTEwsIE5VTEwpOwotCi0gICAgcGFfY29udGV4dF91bnJlZiAoc2VsZi0+Y29udGV4dCk7Ci0gICAgc2VsZi0+Y29udGV4dCA9IE5VTEw7Ci0gIH0KLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9mcmVlIChzZWxmLT5tYWlubG9vcCk7Ci0gIHNlbGYtPm1haW5sb29wID0gTlVMTDsKLX0KLQotZW51bQotewotICBQUk9QX0lOVEVSTkFMX05BTUUgPSAxLAotfTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UHVsc2VEZXZpY2UsIGdzdF9wdWxzZV9kZXZpY2UsIEdTVF9UWVBFX0RFVklDRSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9wdWxzZV9kZXZpY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3B1bHNlX2RldmljZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcHVsc2VfZGV2aWNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyBHc3RFbGVtZW50ICpnc3RfcHVsc2VfZGV2aWNlX2NyZWF0ZV9lbGVtZW50IChHc3REZXZpY2UgKiBkZXZpY2UsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHVsc2VfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwKLSAgICBHc3RFbGVtZW50ICogZWxlbWVudCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VfZGV2aWNlX2NsYXNzX2luaXQgKEdzdFB1bHNlRGV2aWNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RGV2aWNlQ2xhc3MgKmRldl9jbGFzcyA9IEdTVF9ERVZJQ0VfQ0xBU1MgKGtsYXNzKTsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGRldl9jbGFzcy0+Y3JlYXRlX2VsZW1lbnQgPSBnc3RfcHVsc2VfZGV2aWNlX2NyZWF0ZV9lbGVtZW50OwotICBkZXZfY2xhc3MtPnJlY29uZmlndXJlX2VsZW1lbnQgPSBnc3RfcHVsc2VfZGV2aWNlX3JlY29uZmlndXJlX2VsZW1lbnQ7Ci0KLSAgb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcHVsc2VfZGV2aWNlX2dldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcHVsc2VfZGV2aWNlX3NldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9wdWxzZV9kZXZpY2VfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX0lOVEVSTkFMX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiaW50ZXJuYWwtbmFtZSIsICJJbnRlcm5hbCBQdWxzZUF1ZGlvIGRldmljZSBuYW1lIiwKLSAgICAgICAgICAiVGhlIGludGVybmFsIG5hbWUgb2YgdGhlIFB1bHNlQXVkaW8gZGV2aWNlIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlX2RldmljZV9pbml0IChHc3RQdWxzZURldmljZSAqIGRldmljZSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZV9kZXZpY2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFB1bHNlRGV2aWNlICpkZXZpY2UgPSBHU1RfUFVMU0VfREVWSUNFIChvYmplY3QpOwotCi0gIGdfZnJlZSAoZGV2aWNlLT5pbnRlcm5hbF9uYW1lKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3B1bHNlX2RldmljZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotZ3N0X3B1bHNlX2RldmljZV9jcmVhdGVfZWxlbWVudCAoR3N0RGV2aWNlICogZGV2aWNlLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdFB1bHNlRGV2aWNlICpwdWxzZV9kZXYgPSBHU1RfUFVMU0VfREVWSUNFIChkZXZpY2UpOwotICBHc3RFbGVtZW50ICplbGVtOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKHB1bHNlX2Rldi0+ZWxlbWVudCwgbmFtZSk7Ci0gIGdfb2JqZWN0X3NldCAoZWxlbSwgImRldmljZSIsIHB1bHNlX2Rldi0+aW50ZXJuYWxfbmFtZSwgTlVMTCk7Ci0KLSAgcmV0dXJuIGVsZW07Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlX2RldmljZV9yZWNvbmZpZ3VyZV9lbGVtZW50IChHc3REZXZpY2UgKiBkZXZpY2UsIEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RQdWxzZURldmljZSAqcHVsc2VfZGV2ID0gR1NUX1BVTFNFX0RFVklDRSAoZGV2aWNlKTsKLQotICBpZiAoIXN0cmNtcCAocHVsc2VfZGV2LT5lbGVtZW50LCAicHVsc2VzcmMiKSkgewotICAgIGlmICghR1NUX0lTX1BVTFNFU1JDIChlbGVtZW50KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChwdWxzZV9kZXYtPmVsZW1lbnQsICJwdWxzZXNpbmsiKSkgewotICAgIGlmICghR1NUX0lTX1BVTFNFU0lOSyAoZWxlbWVudCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIH0KLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJkZXZpY2UiLCBwdWxzZV9kZXYtPmludGVybmFsX25hbWUsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBUYWtlcyBvd25lcnNoaXAgb2YgQGNhcHMgYW5kIEBwcm9wcyAqLwotc3RhdGljIEdzdERldmljZSAqCi1nc3RfcHVsc2VfZGV2aWNlX25ldyAoZ3VpbnQgZGV2aWNlX2luZGV4LCBjb25zdCBnY2hhciAqIGRldmljZV9uYW1lLAotICAgIEdzdENhcHMgKiBjYXBzLCBjb25zdCBnY2hhciAqIGludGVybmFsX25hbWUsIEdzdFB1bHNlRGV2aWNlVHlwZSB0eXBlLAotICAgIEdzdFN0cnVjdHVyZSAqIHByb3BzKQotewotICBHc3RQdWxzZURldmljZSAqZ3N0ZGV2OwotICBjb25zdCBnY2hhciAqZWxlbWVudCA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICprbGFzcyA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRldmljZV9uYW1lLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGludGVybmFsX25hbWUsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcywgTlVMTCk7Ci0KLQotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdTVF9QVUxTRV9ERVZJQ0VfVFlQRV9TT1VSQ0U6Ci0gICAgICBlbGVtZW50ID0gInB1bHNlc3JjIjsKLSAgICAgIGtsYXNzID0gIkF1ZGlvL1NvdXJjZSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9QVUxTRV9ERVZJQ0VfVFlQRV9TSU5LOgotICAgICAgZWxlbWVudCA9ICJwdWxzZXNpbmsiOwotICAgICAga2xhc3MgPSAiQXVkaW8vU2luayI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0KLSAgZ3N0ZGV2ID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9QVUxTRV9ERVZJQ0UsCi0gICAgICAiZGlzcGxheS1uYW1lIiwgZGV2aWNlX25hbWUsICJjYXBzIiwgY2FwcywgImRldmljZS1jbGFzcyIsIGtsYXNzLAotICAgICAgImludGVybmFsLW5hbWUiLCBpbnRlcm5hbF9uYW1lLCAicHJvcGVydGllcyIsIHByb3BzLCBOVUxMKTsKLQotICBnc3RkZXYtPnR5cGUgPSB0eXBlOwotICBnc3RkZXYtPmRldmljZV9pbmRleCA9IGRldmljZV9pbmRleDsKLSAgZ3N0ZGV2LT5lbGVtZW50ID0gZWxlbWVudDsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHByb3BzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBHU1RfREVWSUNFIChnc3RkZXYpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VfZGV2aWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RQdWxzZURldmljZSAqZGV2aWNlOwotCi0gIGRldmljZSA9IEdTVF9QVUxTRV9ERVZJQ0VfQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfSU5URVJOQUxfTkFNRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIGRldmljZS0+aW50ZXJuYWxfbmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZV9kZXZpY2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFB1bHNlRGV2aWNlICpkZXZpY2U7Ci0KLSAgZGV2aWNlID0gR1NUX1BVTFNFX0RFVklDRV9DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9JTlRFUk5BTF9OQU1FOgotICAgICAgZGV2aWNlLT5pbnRlcm5hbF9uYW1lID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9leHQvcHVsc2UvcHVsc2VkZXZpY2Vwcm92aWRlci5oIGIvZXh0L3B1bHNlL3B1bHNlZGV2aWNlcHJvdmlkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg5MmFkNS4uMDAwMDAwMAotLS0gYS9leHQvcHVsc2UvcHVsc2VkZXZpY2Vwcm92aWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotICoKLSAqIHB1bHNlZGV2aWNlcHJvdmlkZXIuaDogRGV2aWNlIHByb2JpbmcgYW5kIG1vbml0b3JpbmcKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUFVMU0VfREVWSUNFX1BST1ZJREVSX0hfXwotI2RlZmluZSBfX0dTVF9QVUxTRV9ERVZJQ0VfUFJPVklERVJfSF9fCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHB1bHNlL3B1bHNlYXVkaW8uaD4KLSNpbmNsdWRlIDxwdWxzZS90aHJlYWQtbWFpbmxvb3AuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UHVsc2VEZXZpY2VQcm92aWRlciBHc3RQdWxzZURldmljZVByb3ZpZGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlRGV2aWNlUHJvdmlkZXJDbGFzcyBHc3RQdWxzZURldmljZVByb3ZpZGVyQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUFVMU0VfREVWSUNFX1BST1ZJREVSICAgICAgICAgICAgICAgICAoZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSVNfUFVMU0VfREVWSUNFX1BST1ZJREVSKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1BVTFNFX0RFVklDRV9QUk9WSURFUikpCi0jZGVmaW5lIEdTVF9JU19QVUxTRV9ERVZJQ0VfUFJPVklERVJfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9QVUxTRV9ERVZJQ0VfUFJPVklERVIpKQotI2RlZmluZSBHU1RfUFVMU0VfREVWSUNFX1BST1ZJREVSX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUFVMU0VfREVWSUNFX1BST1ZJREVSLCBHc3RQdWxzZURldmljZVByb3ZpZGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfUFVMU0VfREVWSUNFX1BST1ZJREVSKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BVTFNFX0RFVklDRV9QUk9WSURFUiwgR3N0UHVsc2VEZXZpY2VQcm92aWRlcikpCi0jZGVmaW5lIEdTVF9QVUxTRV9ERVZJQ0VfUFJPVklERVJfQ0xBU1Moa2xhc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIsIEdzdFB1bHNlRGV2aWNlUHJvdmlkZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9QVUxTRV9ERVZJQ0VfUFJPVklERVJfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RQdWxzZURldmljZVByb3ZpZGVyICopKG9iaikpCi0KLXN0cnVjdCBfR3N0UHVsc2VEZXZpY2VQcm92aWRlciB7Ci0gIEdzdERldmljZVByb3ZpZGVyICAgICAgICAgcGFyZW50OwotCi0gIGdjaGFyICpzZXJ2ZXI7Ci0gIGdjaGFyICpjbGllbnRfbmFtZTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcCAqbWFpbmxvb3A7Ci0gIHBhX2NvbnRleHQgKmNvbnRleHQ7Ci19OwotCi10eXBlZGVmIGVudW0gewotICBHU1RfUFVMU0VfREVWSUNFX1RZUEVfU09VUkNFLAotICBHU1RfUFVMU0VfREVWSUNFX1RZUEVfU0lOSwotfSBHc3RQdWxzZURldmljZVR5cGU7Ci0KLXN0cnVjdCBfR3N0UHVsc2VEZXZpY2VQcm92aWRlckNsYXNzIHsKLSAgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyAgICBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSAgICAgICAgZ3N0X3B1bHNlX2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlRGV2aWNlIEdzdFB1bHNlRGV2aWNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlRGV2aWNlQ2xhc3MgR3N0UHVsc2VEZXZpY2VDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9QVUxTRV9ERVZJQ0UgICAgICAgICAgICAgICAgIChnc3RfcHVsc2VfZGV2aWNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JU19QVUxTRV9ERVZJQ0Uob2JqKSAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfUFVMU0VfREVWSUNFKSkKLSNkZWZpbmUgR1NUX0lTX1BVTFNFX0RFVklDRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1BVTFNFX0RFVklDRSkpCi0jZGVmaW5lIEdTVF9QVUxTRV9ERVZJQ0VfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9QVUxTRV9ERVZJQ0UsIEdzdFB1bHNlRGV2aWNlQ2xhc3MpKQotI2RlZmluZSBHU1RfUFVMU0VfREVWSUNFKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1BVTFNFX0RFVklDRSwgR3N0UHVsc2VEZXZpY2UpKQotI2RlZmluZSBHU1RfUFVMU0VfREVWSUNFX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfREVWSUNFLCBHc3RQdWxzZURldmljZUNsYXNzKSkKLSNkZWZpbmUgR1NUX1BVTFNFX0RFVklDRV9DQVNUKG9iaikgICAgICAgICAgICAoKEdzdFB1bHNlRGV2aWNlICopKG9iaikpCi0KLXN0cnVjdCBfR3N0UHVsc2VEZXZpY2UgewotICBHc3REZXZpY2UgICAgICAgICBwYXJlbnQ7Ci0KLSAgR3N0UHVsc2VEZXZpY2VUeXBlIHR5cGU7Ci0gIGd1aW50ICAgICAgICAgICAgIGRldmljZV9pbmRleDsKLSAgZ2NoYXIgICAgICAgICAgICAqaW50ZXJuYWxfbmFtZTsKLSAgY29uc3QgZ2NoYXIgICAgICAqZWxlbWVudDsKLX07Ci0KLXN0cnVjdCBfR3N0UHVsc2VEZXZpY2VDbGFzcyB7Ci0gIEdzdERldmljZUNsYXNzICAgIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlICAgICAgICBnc3RfcHVsc2VfZGV2aWNlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1BVTFNFX0RFVklDRV9QUk9WSURFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9wdWxzZS9wdWxzZXNpbmsuYyBiL2V4dC9wdWxzZS9wdWxzZXNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxYzRhNi4uMDAwMDAwMAotLS0gYS9leHQvcHVsc2UvcHVsc2VzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzA3ICswLDAgQEAKLS8qLSotIE1vZGU6IEM7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSovCi0KLS8qICBHU3RyZWFtZXIgcHVsc2VhdWRpbyBwbHVnaW4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggTGVubmFydCBQb2V0dGVyaW5nCi0gKiAgICAgICAgICAgIChjKSAyMDA5ICAgICAgV2ltIFRheW1hbnMKLSAqCi0gKiAgZ3N0LXB1bHNlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gKiAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgZ3N0LXB1bHNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCBnc3QtcHVsc2U7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQotICogIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1wdWxzZXNpbmsKLSAqIEBzZWVfYWxzbzogcHVsc2VzcmMKLSAqCi0gKiBUaGlzIGVsZW1lbnQgb3V0cHV0cyBhdWRpbyB0byBhCi0gKiA8dWxpbmsgaHJlZj0iaHR0cDovL3d3dy5wdWxzZWF1ZGlvLm9yZyI+UHVsc2VBdWRpbyBzb3VuZCBzZXJ2ZXI8L3VsaW5rPi4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249c2luZS5vZ2cgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBwdWxzZXNpbmsKLSAqIF18IFBsYXkgYW4gT2dnL1ZvcmJpcyBmaWxlLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyAhIGF1ZGlvY29udmVydCAhIHZvbHVtZSB2b2x1bWU9MC40ICEgcHVsc2VzaW5rCi0gKiBdfCBQbGF5IGEgNDQwSHogc2luZSB3YXZlLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyAhIHB1bHNlc2luayBzdHJlYW0tcHJvcGVydGllcz0icHJvcHMsbWVkaWEudGl0bGU9dGVzdCIKLSAqIF18IFBsYXkgYSBzaW5lIHdhdmUgYW5kIHNldCBhIHN0cmVhbSBwcm9wZXJ0eS4gVGhlIHByb3BlcnR5IGNhbiBiZSBjaGVja2VkCi0gKiB3aXRoICJwYWN0bCBsaXN0Ii4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+ICAgICAgICAvKiBvbmx5IHVzZWQgZm9yIEdTVF9QTFVHSU5TX0JBU0VfVkVSU0lPTl8qICovCi0KLSNpbmNsdWRlIDxnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oPgotCi0jaW5jbHVkZSAicHVsc2VzaW5rLmgiCi0jaW5jbHVkZSAicHVsc2V1dGlsLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHB1bHNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHB1bHNlX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9TRVJWRVIgICAgICAgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX0RFVklDRSAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfQ1VSUkVOVF9ERVZJQ0UgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9ERVZJQ0VfTkFNRSAgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX1ZPTFVNRSAgICAgICAgICAxLjAKLSNkZWZpbmUgREVGQVVMVF9NVVRFICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgTUFYX1ZPTFVNRSAgICAgICAgICAgICAgMTAuMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9TRVJWRVIsCi0gIFBST1BfREVWSUNFLAotICBQUk9QX0NVUlJFTlRfREVWSUNFLAotICBQUk9QX0RFVklDRV9OQU1FLAotICBQUk9QX1ZPTFVNRSwKLSAgUFJPUF9NVVRFLAotICBQUk9QX0NMSUVOVF9OQU1FLAotICBQUk9QX1NUUkVBTV9QUk9QRVJUSUVTLAotICBQUk9QX0xBU1QKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUFVMU0VSSU5HX0JVRkZFUiAgICAgICAgXAotICAgICAgICAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUFVMU0VSSU5HX0JVRkZFUihvYmopICAgICAgICBcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9QVUxTRVJJTkdfQlVGRkVSLEdzdFB1bHNlUmluZ0J1ZmZlcikpCi0jZGVmaW5lIEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NMQVNTKGtsYXNzKSBcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1BVTFNFUklOR19CVUZGRVIsR3N0UHVsc2VSaW5nQnVmZmVyQ2xhc3MpKQotI2RlZmluZSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9HRVRfQ0xBU1Mob2JqKSBcCi0gICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUFVMU0VSSU5HX0JVRkZFUiwgR3N0UHVsc2VSaW5nQnVmZmVyQ2xhc3MpKQotI2RlZmluZSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUKG9iaikgICAgICAgIFwKLSAgICAgICAgKChHc3RQdWxzZVJpbmdCdWZmZXIgKilvYmopCi0jZGVmaW5lIEdTVF9JU19QVUxTRVJJTkdfQlVGRkVSKG9iaikgICAgIFwKLSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1BVTFNFUklOR19CVUZGRVIpKQotI2RlZmluZSBHU1RfSVNfUFVMU0VSSU5HX0JVRkZFUl9DTEFTUyhrbGFzcylcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1BVTFNFUklOR19CVUZGRVIpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UHVsc2VSaW5nQnVmZmVyIEdzdFB1bHNlUmluZ0J1ZmZlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RQdWxzZVJpbmdCdWZmZXJDbGFzcyBHc3RQdWxzZVJpbmdCdWZmZXJDbGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlQ29udGV4dCBHc3RQdWxzZUNvbnRleHQ7Ci0KLS8qIEEgbm90ZSBvbiB0aHJlYWRpbmcuCi0gKgotICogV2UgdXNlIGEgcGFfdGhyZWFkZWRfbWFpbmxvb3AgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgUHVsc2VBdWRpbyBzZXJ2ZXIuIFRoaXMKLSAqIHN0YXJ0cyB1cCBhIHNlcGFyYXRlIHRocmVhZCB0aGF0IHJ1bnMgYSBtYWlubG9vcCB0byBjYXJyeSBiYWNrIGV2ZW50cywKLSAqIG1lc3NhZ2VzIGFuZCB0aW1pbmcgdXBkYXRlcyBmcm9tIHRoZSBQdWxzZUF1ZGlvIHNlcnZlci4KLSAqCi0gKiBJbiBtb3N0IGNhc2VzLCB0aGUgUHVsc2VBdWRpbyBBUEkgd2UgdXNlIGNvbW11bmljYXRlcyB3aXRoIHRoZSBzZXJ2ZXIgYW5kCi0gKiBwcm9jZXNzZXMgcmVwbGllcyBhc3luY2hyb25vdXNseS4gT3BlcmF0aW9ucyBvbiBQQSBvYmplY3RzIHRoYXQgcmVzdWx0IGluCi0gKiBzdWNoIGNvbW11bmljYXRpb24gYXJlIHByb3RlY3RlZCB3aXRoIGEgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jaygpIGFuZAotICogcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrKCkuIFRoZXNlIGd1YXJhbnRlZSBtdXR1YWwgZXhjbHVzaW9uIHdpdGggdGhlCi0gKiBtYWlubG9vcCB0aHJlYWQgLS0gd2hlbiBhbiBpdGVyYXRpb24gb2YgdGhlIG1haW5sb29wIHRocmVhZCBiZWdpbnMsIGl0IGZpcnN0Ci0gKiB0cmllcyB0byBhY3F1aXJlIHRoaXMgbG9jaywgYW5kIGNhbm5vdCBkbyBzbyBpZiBvdXIgY29kZSBhbHNvIGhvbGRzIHRoYXQKLSAqIGxvY2suCi0gKgotICogV2hlbiB3ZSBuZWVkIHRvIGNvbXBsZXRlIGFuIG9wZXJhdGlvbiBzeW5jaHJvbm91c2x5LCB3ZSB1c2UKLSAqIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQoKSBhbmQgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsKCkuIFRoZXNlIHdvcmsKLSAqIG11Y2ggYXMgcHRocmVhZCBjb25kaXRpb25hbHMgZG8uIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQoKSBpcyBjYWxsZWQgd2l0aAotICogdGhlIG1haW5sb29wIGxvY2sgaGVsZC4gSXQgcmVsZWFzZXMgdGhlIGxvY2sgKHRoZXJlYnkgYWxsb3dpbmcgdGhlIG1haW5sb29wCi0gKiB0byBleGVjdXRlKSwgYW5kIHdhaXRzIHRpbGwgb25lIG9mIG91ciBjYWxsYmFja3MgdG8gYmUgZXhlY3V0ZWQgYnkgdGhlCi0gKiBtYWlubG9vcCB0aHJlYWQgY2FsbHMgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsKCkuIEF0IHRoZSBlbmQgb2YgdGhlCi0gKiBtYWlubG9vcCBpdGVyYXRpb24sIHRoZSBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0KCkgd2lsbCByZWFjcXVpcmUgdGhlCi0gKiBtYWlubG9vcCBsb2NrIGFuZCByZXR1cm4gY29udHJvbCB0byB0aGUgY2FsbGVyLgotICovCi0KLS8qIFN0b3JlIHRoZSBQQSBjb250ZXh0cyBpbiBhIGhhc2ggdGFibGUgdG8gYWxsb3cgZWFzeSBzaGFyaW5nIGFtb25nCi0gKiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNpbmsuIEtleXMgYXJlICRjb250ZXh0X25hbWVAJHNlcnZlcl9uYW1lCi0gKiAoc3RyaW5ncykgYW5kIHZhbHVlcyBzaG91bGQgYmUgR3N0UHVsc2VDb250ZXh0IHBvaW50ZXJzLgotICovCi1zdHJ1Y3QgX0dzdFB1bHNlQ29udGV4dAotewotICBwYV9jb250ZXh0ICpjb250ZXh0OwotICBHU0xpc3QgKnJpbmdfYnVmZmVyczsKLX07Ci0KLXN0YXRpYyBHSGFzaFRhYmxlICpnc3RfcHVsc2Vfc2hhcmVkX2NvbnRleHRzID0gTlVMTDsKLQotLyogdXNlIG9uZSBzdGF0aWMgbWFpbi1sb29wIGZvciBhbGwgaW5zdGFuY2VzCi0gKiB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBjb250ZXh0IHNoYXJpbmcgd29yayBhcyB0aGUgY29udGV4dHMgYXJlCi0gKiByZWxlYXNlZCB3aGVuIHJlbGVhc2luZyB0aGVpciBwYXJlbnQgbWFpbi1sb29wCi0gKi8KLXN0YXRpYyBwYV90aHJlYWRlZF9tYWlubG9vcCAqbWFpbmxvb3AgPSBOVUxMOwotc3RhdGljIGd1aW50IG1haW5sb29wX3JlZl9jdCA9IDA7Ci0KLS8qIGxvY2sgZm9yIGFjY2VzcyB0byBzaGFyZWQgcmVzb3VyY2VzICovCi1zdGF0aWMgR011dGV4IHBhX3NoYXJlZF9yZXNvdXJjZV9tdXRleDsKLQotLyogV2Uga2VlcCBhIGN1c3RvbSByaW5nYnVmZmVyIHRoYXQgaXMgYmFja2VkIHVwIGJ5IGRhdGEgYWxsb2NhdGVkIGJ5Ci0gKiBwdWxzZWF1ZGlvLiBXZSBtdXN0IGFsc28gb3ZlcmlkZSB0aGUgY29tbWl0IGZ1bmN0aW9uIHRvIHdyaXRlIGludG8KLSAqIHB1bHNlYXVkaW8gbWVtb3J5IGluc3RlYWQuICovCi1zdHJ1Y3QgX0dzdFB1bHNlUmluZ0J1ZmZlcgotewotICBHc3RBdWRpb1JpbmdCdWZmZXIgb2JqZWN0OwotCi0gIGdjaGFyICpjb250ZXh0X25hbWU7Ci0gIGdjaGFyICpzdHJlYW1fbmFtZTsKLQotICBwYV9jb250ZXh0ICpjb250ZXh0OwotICBwYV9zdHJlYW0gKnN0cmVhbTsKLSAgcGFfc3RyZWFtICpwcm9iZV9zdHJlYW07Ci0KLSAgcGFfZm9ybWF0X2luZm8gKmZvcm1hdDsKLSAgZ3VpbnQgY2hhbm5lbHM7Ci0gIGdib29sZWFuIGlzX3BjbTsKLQotICB2b2lkICptX2RhdGE7Ci0gIHNpemVfdCBtX3Rvd3JpdGU7Ci0gIHNpemVfdCBtX3dyaXRhYmxlOwotICBnaW50NjQgbV9vZmZzZXQ7Ci0gIGdpbnQ2NCBtX2xhc3RvZmZzZXQ7Ci0KLSAgZ2Jvb2xlYW4gY29ya2VkOjE7Ci0gIGdib29sZWFuIGluX2NvbW1pdDoxOwotICBnYm9vbGVhbiBwYXVzZWQ6MTsKLX07Ci1zdHJ1Y3QgX0dzdFB1bHNlUmluZ0J1ZmZlckNsYXNzCi17Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyBHVHlwZSBnc3RfcHVsc2VyaW5nYnVmZmVyX2dldF90eXBlICh2b2lkKTsKLXN0YXRpYyB2b2lkIGdzdF9wdWxzZXJpbmdidWZmZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0QXVkaW9SaW5nQnVmZmVyQ2xhc3MgKnJpbmdfcGFyZW50X2NsYXNzID0gTlVMTDsKLQotc3RhdGljIGdib29sZWFuIGdzdF9wdWxzZXJpbmdidWZmZXJfb3Blbl9kZXZpY2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlcmluZ2J1ZmZlcl9jbG9zZV9kZXZpY2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlcmluZ2J1ZmZlcl9hY3F1aXJlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9wdWxzZXJpbmdidWZmZXJfcmVsZWFzZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHVsc2VyaW5nYnVmZmVyX3N0YXJ0IChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9wdWxzZXJpbmdidWZmZXJfcGF1c2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlcmluZ2J1ZmZlcl9zdG9wIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpOwotc3RhdGljIHZvaWQgZ3N0X3B1bHNlcmluZ2J1ZmZlcl9jbGVhciAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLXN0YXRpYyBndWludCBnc3RfcHVsc2VyaW5nYnVmZmVyX2NvbW1pdCAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmLAotICAgIGd1aW50NjQgKiBzYW1wbGUsIGd1Y2hhciAqIGRhdGEsIGdpbnQgaW5fc2FtcGxlcywgZ2ludCBvdXRfc2FtcGxlcywKLSAgICBnaW50ICogYWNjdW0pOwotCi1HX0RFRklORV9UWVBFIChHc3RQdWxzZVJpbmdCdWZmZXIsIGdzdF9wdWxzZXJpbmdidWZmZXIsCi0gICAgR1NUX1RZUEVfQVVESU9fUklOR19CVUZGRVIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc2lua19pbml0X2NvbnRleHRzICh2b2lkKQotewotICBnX211dGV4X2luaXQgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICBnc3RfcHVsc2Vfc2hhcmVkX2NvbnRleHRzID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwKLSAgICAgIGdfZnJlZSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VyaW5nYnVmZmVyX2NsYXNzX2luaXQgKEdzdFB1bHNlUmluZ0J1ZmZlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0QXVkaW9SaW5nQnVmZmVyQ2xhc3MgKmdzdHJpbmdidWZmZXJfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MgPSAoR3N0QXVkaW9SaW5nQnVmZmVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgcmluZ19wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9wdWxzZXJpbmdidWZmZXJfZmluYWxpemU7Ci0KLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+b3Blbl9kZXZpY2UgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXJpbmdidWZmZXJfb3Blbl9kZXZpY2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5jbG9zZV9kZXZpY2UgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXJpbmdidWZmZXJfY2xvc2VfZGV2aWNlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+YWNxdWlyZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9hY3F1aXJlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+cmVsZWFzZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9yZWxlYXNlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9zdGFydCk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPnBhdXNlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXJpbmdidWZmZXJfcGF1c2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5yZXN1bWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9zdGFydCk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9zdG9wKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+Y2xlYXJfYWxsID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VyaW5nYnVmZmVyX2NsZWFyKTsKLQotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5jb21taXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlcmluZ2J1ZmZlcl9jb21taXQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ2J1ZmZlcl9pbml0IChHc3RQdWxzZVJpbmdCdWZmZXIgKiBwYnVmKQotewotICBwYnVmLT5zdHJlYW1fbmFtZSA9IE5VTEw7Ci0gIHBidWYtPmNvbnRleHQgPSBOVUxMOwotICBwYnVmLT5zdHJlYW0gPSBOVUxMOwotICBwYnVmLT5wcm9iZV9zdHJlYW0gPSBOVUxMOwotCi0gIHBidWYtPmZvcm1hdCA9IE5VTEw7Ci0gIHBidWYtPmNoYW5uZWxzID0gMDsKLSAgcGJ1Zi0+aXNfcGNtID0gRkFMU0U7Ci0KLSAgcGJ1Zi0+bV9kYXRhID0gTlVMTDsKLSAgcGJ1Zi0+bV90b3dyaXRlID0gMDsKLSAgcGJ1Zi0+bV93cml0YWJsZSA9IDA7Ci0gIHBidWYtPm1fb2Zmc2V0ID0gMDsKLSAgcGJ1Zi0+bV9sYXN0b2Zmc2V0ID0gMDsKLQotICBwYnVmLT5jb3JrZWQgPSBUUlVFOwotICBwYnVmLT5pbl9jb21taXQgPSBGQUxTRTsKLSAgcGJ1Zi0+cGF1c2VkID0gRkFMU0U7Ci19Ci0KLS8qIENhbGwgd2l0aCBtYWlubG9vcCBsb2NrIGhlbGQgaWYgd2FpdCA9PSBUUlVFKSAqLwotc3RhdGljIHZvaWQKLWdzdF9wdWxzZV9kZXN0cm95X3N0cmVhbSAocGFfc3RyZWFtICogc3RyZWFtLCBnYm9vbGVhbiB3YWl0KQotewotICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBmdXJ0aGVyIGNhbGxiYWNrcyAqLwotICBwYV9zdHJlYW1fc2V0X3dyaXRlX2NhbGxiYWNrIChzdHJlYW0sIE5VTEwsIE5VTEwpOwotICBwYV9zdHJlYW1fc2V0X3VuZGVyZmxvd19jYWxsYmFjayAoc3RyZWFtLCBOVUxMLCBOVUxMKTsKLSAgcGFfc3RyZWFtX3NldF9vdmVyZmxvd19jYWxsYmFjayAoc3RyZWFtLCBOVUxMLCBOVUxMKTsKLQotICBwYV9zdHJlYW1fZGlzY29ubmVjdCAoc3RyZWFtKTsKLQotICBpZiAod2FpdCkKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0KLSAgcGFfc3RyZWFtX3NldF9zdGF0ZV9jYWxsYmFjayAoc3RyZWFtLCBOVUxMLCBOVUxMKTsKLSAgcGFfc3RyZWFtX3VucmVmIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ19kZXN0cm95X3N0cmVhbSAoR3N0UHVsc2VSaW5nQnVmZmVyICogcGJ1ZikKLXsKLSAgaWYgKHBidWYtPnByb2JlX3N0cmVhbSkgewotICAgIGdzdF9wdWxzZV9kZXN0cm95X3N0cmVhbSAocGJ1Zi0+cHJvYmVfc3RyZWFtLCBGQUxTRSk7Ci0gICAgcGJ1Zi0+cHJvYmVfc3RyZWFtID0gTlVMTDsKLSAgfQotCi0gIGlmIChwYnVmLT5zdHJlYW0pIHsKLQotICAgIGlmIChwYnVmLT5tX2RhdGEpIHsKLSAgICAgIC8qIGRyb3Agc2htIG1lbW9yeSBidWZmZXIgKi8KLSAgICAgIHBhX3N0cmVhbV9jYW5jZWxfd3JpdGUgKHBidWYtPnN0cmVhbSk7Ci0KLSAgICAgIC8qIHJlc2V0IGludGVybmFsIHZhcmlhYmxlcyAqLwotICAgICAgcGJ1Zi0+bV9kYXRhID0gTlVMTDsKLSAgICAgIHBidWYtPm1fdG93cml0ZSA9IDA7Ci0gICAgICBwYnVmLT5tX3dyaXRhYmxlID0gMDsKLSAgICAgIHBidWYtPm1fb2Zmc2V0ID0gMDsKLSAgICAgIHBidWYtPm1fbGFzdG9mZnNldCA9IDA7Ci0gICAgfQotICAgIGlmIChwYnVmLT5mb3JtYXQpIHsKLSAgICAgIHBhX2Zvcm1hdF9pbmZvX2ZyZWUgKHBidWYtPmZvcm1hdCk7Ci0gICAgICBwYnVmLT5mb3JtYXQgPSBOVUxMOwotICAgICAgcGJ1Zi0+Y2hhbm5lbHMgPSAwOwotICAgICAgcGJ1Zi0+aXNfcGNtID0gRkFMU0U7Ci0gICAgfQotCi0gICAgcGFfc3RyZWFtX2Rpc2Nvbm5lY3QgKHBidWYtPnN0cmVhbSk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFueSBmdXJ0aGVyIGNhbGxiYWNrcyAqLwotICAgIHBhX3N0cmVhbV9zZXRfc3RhdGVfY2FsbGJhY2sgKHBidWYtPnN0cmVhbSwgTlVMTCwgTlVMTCk7Ci0gICAgcGFfc3RyZWFtX3NldF93cml0ZV9jYWxsYmFjayAocGJ1Zi0+c3RyZWFtLCBOVUxMLCBOVUxMKTsKLSAgICBwYV9zdHJlYW1fc2V0X3VuZGVyZmxvd19jYWxsYmFjayAocGJ1Zi0+c3RyZWFtLCBOVUxMLCBOVUxMKTsKLSAgICBwYV9zdHJlYW1fc2V0X292ZXJmbG93X2NhbGxiYWNrIChwYnVmLT5zdHJlYW0sIE5VTEwsIE5VTEwpOwotCi0gICAgcGFfc3RyZWFtX3VucmVmIChwYnVmLT5zdHJlYW0pOwotICAgIHBidWYtPnN0cmVhbSA9IE5VTEw7Ci0gIH0KLQotICBnX2ZyZWUgKHBidWYtPnN0cmVhbV9uYW1lKTsKLSAgcGJ1Zi0+c3RyZWFtX25hbWUgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ19kZXN0cm95X2NvbnRleHQgKEdzdFB1bHNlUmluZ0J1ZmZlciAqIHBidWYpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJnBhX3NoYXJlZF9yZXNvdXJjZV9tdXRleCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGJ1ZiwgImRlc3Ryb3lpbmcgcmluZ2J1ZmZlciAlcCIsIHBidWYpOwotCi0gIGdzdF9wdWxzZXJpbmdfZGVzdHJveV9zdHJlYW0gKHBidWYpOwotCi0gIGlmIChwYnVmLT5jb250ZXh0KSB7Ci0gICAgcGFfY29udGV4dF91bnJlZiAocGJ1Zi0+Y29udGV4dCk7Ci0gICAgcGJ1Zi0+Y29udGV4dCA9IE5VTEw7Ci0gIH0KLQotICBpZiAocGJ1Zi0+Y29udGV4dF9uYW1lKSB7Ci0gICAgR3N0UHVsc2VDb250ZXh0ICpwY3R4OwotCi0gICAgcGN0eCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGdzdF9wdWxzZV9zaGFyZWRfY29udGV4dHMsIHBidWYtPmNvbnRleHRfbmFtZSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYnVmLCAicmVsZWFzaW5nIGNvbnRleHQgd2l0aCBuYW1lICVzLCBwYnVmPSVwLCBwY3R4PSVwIiwKLSAgICAgICAgcGJ1Zi0+Y29udGV4dF9uYW1lLCBwYnVmLCBwY3R4KTsKLQotICAgIGlmIChwY3R4KSB7Ci0gICAgICBwY3R4LT5yaW5nX2J1ZmZlcnMgPSBnX3NsaXN0X3JlbW92ZSAocGN0eC0+cmluZ19idWZmZXJzLCBwYnVmKTsKLSAgICAgIGlmIChwY3R4LT5yaW5nX2J1ZmZlcnMgPT0gTlVMTCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYnVmLAotICAgICAgICAgICAgImRlc3Ryb3lpbmcgZmluYWwgY29udGV4dCB3aXRoIG5hbWUgJXMsIHBidWY9JXAsIHBjdHg9JXAiLAotICAgICAgICAgICAgcGJ1Zi0+Y29udGV4dF9uYW1lLCBwYnVmLCBwY3R4KTsKLQotICAgICAgICBwYV9jb250ZXh0X2Rpc2Nvbm5lY3QgKHBjdHgtPmNvbnRleHQpOwotCi0gICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGZ1cnRoZXIgY2FsbGJhY2tzICovCi0gICAgICAgIHBhX2NvbnRleHRfc2V0X3N0YXRlX2NhbGxiYWNrIChwY3R4LT5jb250ZXh0LCBOVUxMLCBOVUxMKTsKLSAgICAgICAgcGFfY29udGV4dF9zZXRfc3Vic2NyaWJlX2NhbGxiYWNrIChwY3R4LT5jb250ZXh0LCBOVUxMLCBOVUxMKTsKLQotICAgICAgICBnX2hhc2hfdGFibGVfcmVtb3ZlIChnc3RfcHVsc2Vfc2hhcmVkX2NvbnRleHRzLCBwYnVmLT5jb250ZXh0X25hbWUpOwotCi0gICAgICAgIHBhX2NvbnRleHRfdW5yZWYgKHBjdHgtPmNvbnRleHQpOwotICAgICAgICBnX3NsaWNlX2ZyZWUgKEdzdFB1bHNlQ29udGV4dCwgcGN0eCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGdfZnJlZSAocGJ1Zi0+Y29udGV4dF9uYW1lKTsKLSAgICBwYnVmLT5jb250ZXh0X25hbWUgPSBOVUxMOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmcGFfc2hhcmVkX3Jlc291cmNlX211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXJpbmdidWZmZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcmluZ2J1ZmZlcjsKLQotICByaW5nYnVmZmVyID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAob2JqZWN0KTsKLQotICBnc3RfcHVsc2VyaW5nX2Rlc3Ryb3lfY29udGV4dCAocmluZ2J1ZmZlcik7Ci0gIEdfT0JKRUNUX0NMQVNTIChyaW5nX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0KLSNkZWZpbmUgQ09OVEVYVF9PSyhjKSAoKGMpICYmIFBBX0NPTlRFWFRfSVNfR09PRCAocGFfY29udGV4dF9nZXRfc3RhdGUgKChjKSkpKQotI2RlZmluZSBTVFJFQU1fT0socykgKChzKSAmJiBQQV9TVFJFQU1fSVNfR09PRCAocGFfc3RyZWFtX2dldF9zdGF0ZSAoKHMpKSkpCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlcmluZ19pc19kZWFkIChHc3RQdWxzZVNpbmsgKiBwc2luaywgR3N0UHVsc2VSaW5nQnVmZmVyICogcGJ1ZiwKLSAgICBnYm9vbGVhbiBjaGVja19zdHJlYW0pCi17Ci0gIGlmICghQ09OVEVYVF9PSyAocGJ1Zi0+Y29udGV4dCkpCi0gICAgZ290byBlcnJvcjsKLQotICBpZiAoY2hlY2tfc3RyZWFtICYmICFTVFJFQU1fT0sgKHBidWYtPnN0cmVhbSkpCi0gICAgZ290byBlcnJvcjsKLQotICByZXR1cm4gRkFMU0U7Ci0KLWVycm9yOgotICB7Ci0gICAgY29uc3QgZ2NoYXIgKmVycl9zdHIgPQotICAgICAgICBwYnVmLT5jb250ZXh0ID8gcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHBidWYtPmNvbnRleHQpKSA6IE5VTEw7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELCAoIkRpc2Nvbm5lY3RlZDogJXMiLAotICAgICAgICAgICAgZXJyX3N0ciksIChOVUxMKSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXJpbmdfY29udGV4dF9zdGF0ZV9jYiAocGFfY29udGV4dCAqIGMsIHZvaWQgKnVzZXJkYXRhKQotewotICBwYV9jb250ZXh0X3N0YXRlX3Qgc3RhdGU7Ci0gIHBhX3RocmVhZGVkX21haW5sb29wICptYWlubG9vcCA9IChwYV90aHJlYWRlZF9tYWlubG9vcCAqKSB1c2VyZGF0YTsKLQotICBzdGF0ZSA9IHBhX2NvbnRleHRfZ2V0X3N0YXRlIChjKTsKLQotICBHU1RfTE9HICgiZ290IG5ldyBjb250ZXh0IHN0YXRlICVkIiwgc3RhdGUpOwotCi0gIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIFBBX0NPTlRFWFRfUkVBRFk6Ci0gICAgY2FzZSBQQV9DT05URVhUX1RFUk1JTkFURUQ6Ci0gICAgY2FzZSBQQV9DT05URVhUX0ZBSUxFRDoKLSAgICAgIEdTVF9MT0cgKCJzaWduYWxpbmciKTsKLSAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAobWFpbmxvb3AsIDApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBBX0NPTlRFWFRfVU5DT05ORUNURUQ6Ci0gICAgY2FzZSBQQV9DT05URVhUX0NPTk5FQ1RJTkc6Ci0gICAgY2FzZSBQQV9DT05URVhUX0FVVEhPUklaSU5HOgotICAgIGNhc2UgUEFfQ09OVEVYVF9TRVRUSU5HX05BTUU6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ19jb250ZXh0X3N1YnNjcmliZV9jYiAocGFfY29udGV4dCAqIGMsCi0gICAgcGFfc3Vic2NyaXB0aW9uX2V2ZW50X3R5cGVfdCB0LCB1aW50MzJfdCBpZHgsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZUNvbnRleHQgKnBjdHggPSAoR3N0UHVsc2VDb250ZXh0ICopIHVzZXJkYXRhOwotICBHU0xpc3QgKndhbGs7Ci0KLSAgaWYgKHQgIT0gKFBBX1NVQlNDUklQVElPTl9FVkVOVF9TSU5LX0lOUFVUIHwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX0NIQU5HRSkgJiYKLSAgICAgIHQgIT0gKFBBX1NVQlNDUklQVElPTl9FVkVOVF9TSU5LX0lOUFVUIHwgUEFfU1VCU0NSSVBUSU9OX0VWRU5UX05FVykpCi0gICAgcmV0dXJuOwotCi0gIGZvciAod2FsayA9IHBjdHgtPnJpbmdfYnVmZmVyczsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWYgPSAoR3N0UHVsc2VSaW5nQnVmZmVyICopIHdhbGstPmRhdGE7Ci0gICAgcHNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYnVmKSk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJ0eXBlICUwNHgsIGlkeCAldSIsIHQsIGlkeCk7Ci0KLSAgICBpZiAoIXBidWYtPnN0cmVhbSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKGlkeCAhPSBwYV9zdHJlYW1fZ2V0X2luZGV4IChwYnVmLT5zdHJlYW0pKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAocHNpbmstPmRldmljZSAmJiBwYnVmLT5pc19wY20gJiYKLSAgICAgICAgIWdfc3RyX2VxdWFsIChwc2luay0+ZGV2aWNlLAotICAgICAgICAgICAgcGFfc3RyZWFtX2dldF9kZXZpY2VfbmFtZSAocGJ1Zi0+c3RyZWFtKSkpIHsKLSAgICAgIC8qIFVuZGVybHlpbmcgc2luayBjaGFuZ2VkLiBBbmQgdGhpcyBpcyBub3QgYSBwYXNzdGhyb3VnaCBzdHJlYW0uIExldCdzCi0gICAgICAgKiBzZWUgaWYgc29tZW9uZSB1cHN0cmVhbSB3YW50cyB0byB0cnkgdG8gcmVuZWdvdGlhdGUuICovCi0gICAgICBHc3RFdmVudCAqcmVuZWdvOwotCi0gICAgICBnX2ZyZWUgKHBzaW5rLT5kZXZpY2UpOwotICAgICAgcHNpbmstPmRldmljZSA9IGdfc3RyZHVwIChwYV9zdHJlYW1fZ2V0X2RldmljZV9uYW1lIChwYnVmLT5zdHJlYW0pKTsKLQotICAgICAgR1NUX0lORk9fT0JKRUNUIChwc2luaywgImVtaXR0aW5nIHNpbmstY2hhbmdlZCIpOwotCi0gICAgICAvKiBGSVhNRTogc2VuZCByZWNvbmZpZ3VyZSBldmVudCBpbnN0ZWFkIGFuZCBsZXQgZGVjb2RlYmluL3BsYXliaW4KLSAgICAgICAqIGhhbmRsZSB0aGF0LiBBbHNvIHRha2UgY2FyZSBvZiBhYzMgYWxpZ25tZW50LiBTZWUgInB1bHNlLWZvcm1hdC1sb3N0IiAqLwotICAgICAgcmVuZWdvID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJwdWxzZS1zaW5rLWNoYW5nZWQiKSk7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFTRV9TSU5LIChwc2luayktPnNpbmtwYWQsIHJlbmVnbykpCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAiRW1pdHRlZCBzaW5rLWNoYW5nZWQgLSBub2JvZHkgd2FzIGxpc3RlbmluZyIpOwotICAgIH0KLQotICAgIC8qIEFjdHVhbGx5IHRoaXMgZXZlbnQgaXMgYWxzbyB0cmlnZ2VyZWQgd2hlbiBvdGhlciBwcm9wZXJ0aWVzIG9mCi0gICAgICogdGhlIHN0cmVhbSBjaGFuZ2UgdGhhdCBhcmUgdW5yZWxhdGVkIHRvIHRoZSB2b2x1bWUuIEhvd2V2ZXIgaXQgaXMKLSAgICAgKiBwcm9iYWJseSBjaGVhcGVyIHRvIHNpZ25hbCB0aGUgY2hhbmdlIGhlcmUgYW5kIGNoZWNrIGZvciB0aGUKLSAgICAgKiB2b2x1bWUgd2hlbiB0aGUgR09iamVjdCBwcm9wZXJ0eSBpcyByZWFkIGluc3RlYWQgb2YgcXVlcnlpbmcgaXQgYWx3YXlzLiAqLwotCi0gICAgLyogaW5mb3JtIHN0cmVhbWluZyB0aHJlYWQgdG8gbm90aWZ5ICovCi0gICAgZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcHNpbmstPm5vdGlmeSwgMCwgMSk7Ci0gIH0KLX0KLQotLyogd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHNob3VsZCBiZSBvcGVuZWQuIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGNvbm5lY3QKLSAqIHRvIHRoZSBzZXJ2ZXIuIFdlIHNob3VsZCBub3QgdHJ5IHRvIG9wZW4gYW55IHN0cmVhbXMgaW4gdGhpcyBzdGF0ZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlcmluZ2J1ZmZlcl9vcGVuX2RldmljZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIEdzdFB1bHNlQ29udGV4dCAqcGN0eDsKLSAgcGFfbWFpbmxvb3BfYXBpICphcGk7Ci0gIGdib29sZWFuIG5lZWRfdW5sb2NrX3NoYXJlZDsKLQotICBwc2luayA9IEdTVF9QVUxTRVNJTktfQ0FTVCAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoYnVmKTsKLQotICBnX2Fzc2VydCAoIXBidWYtPnN0cmVhbSk7Ci0gIGdfYXNzZXJ0IChwc2luay0+Y2xpZW50X25hbWUpOwotCi0gIGlmIChwc2luay0+c2VydmVyKQotICAgIHBidWYtPmNvbnRleHRfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzQCVzIiwgcHNpbmstPmNsaWVudF9uYW1lLAotICAgICAgICBwc2luay0+c2VydmVyKTsKLSAgZWxzZQotICAgIHBidWYtPmNvbnRleHRfbmFtZSA9IGdfc3RyZHVwIChwc2luay0+Y2xpZW50X25hbWUpOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLQotICBnX211dGV4X2xvY2sgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICBuZWVkX3VubG9ja19zaGFyZWQgPSBUUlVFOwotCi0gIHBjdHggPSBnX2hhc2hfdGFibGVfbG9va3VwIChnc3RfcHVsc2Vfc2hhcmVkX2NvbnRleHRzLCBwYnVmLT5jb250ZXh0X25hbWUpOwotICBpZiAocGN0eCA9PSBOVUxMKSB7Ci0gICAgcGN0eCA9IGdfc2xpY2VfbmV3MCAoR3N0UHVsc2VDb250ZXh0KTsKLQotICAgIC8qIGdldCB0aGUgbWFpbmxvb3AgYXBpIGFuZCBjcmVhdGUgYSBjb250ZXh0ICovCi0gICAgR1NUX0lORk9fT0JKRUNUIChwc2luaywgIm5ldyBjb250ZXh0IHdpdGggbmFtZSAlcywgcGJ1Zj0lcCwgcGN0eD0lcCIsCi0gICAgICAgIHBidWYtPmNvbnRleHRfbmFtZSwgcGJ1ZiwgcGN0eCk7Ci0gICAgYXBpID0gcGFfdGhyZWFkZWRfbWFpbmxvb3BfZ2V0X2FwaSAobWFpbmxvb3ApOwotICAgIGlmICghKHBjdHgtPmNvbnRleHQgPSBwYV9jb250ZXh0X25ldyAoYXBpLCBwYnVmLT5jb250ZXh0X25hbWUpKSkKLSAgICAgIGdvdG8gY3JlYXRlX2ZhaWxlZDsKLQotICAgIHBjdHgtPnJpbmdfYnVmZmVycyA9IGdfc2xpc3RfcHJlcGVuZCAocGN0eC0+cmluZ19idWZmZXJzLCBwYnVmKTsKLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChnc3RfcHVsc2Vfc2hhcmVkX2NvbnRleHRzLAotICAgICAgICBnX3N0cmR1cCAocGJ1Zi0+Y29udGV4dF9uYW1lKSwgKGdwb2ludGVyKSBwY3R4KTsKLSAgICAvKiByZWdpc3RlciBzb21lIGVzc2VudGlhbCBjYWxsYmFja3MgKi8KLSAgICBwYV9jb250ZXh0X3NldF9zdGF0ZV9jYWxsYmFjayAocGN0eC0+Y29udGV4dCwKLSAgICAgICAgZ3N0X3B1bHNlcmluZ19jb250ZXh0X3N0YXRlX2NiLCBtYWlubG9vcCk7Ci0gICAgcGFfY29udGV4dF9zZXRfc3Vic2NyaWJlX2NhbGxiYWNrIChwY3R4LT5jb250ZXh0LAotICAgICAgICBnc3RfcHVsc2VyaW5nX2NvbnRleHRfc3Vic2NyaWJlX2NiLCBwY3R4KTsKLQotICAgIC8qIHRyeSB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb24sIHdlIGRvbid0IHdhbnQgdG8KLSAgICAgKiBhdXRvc3Bhd24gYSBkZWFtb24gKi8KLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJjb25uZWN0IHRvIHNlcnZlciAlcyIsCi0gICAgICAgIEdTVF9TVFJfTlVMTCAocHNpbmstPnNlcnZlcikpOwotICAgIGlmIChwYV9jb250ZXh0X2Nvbm5lY3QgKHBjdHgtPmNvbnRleHQsIHBzaW5rLT5zZXJ2ZXIsCi0gICAgICAgICAgICBQQV9DT05URVhUX05PQVVUT1NQQVdOLCBOVUxMKSA8IDApCi0gICAgICBnb3RvIGNvbm5lY3RfZmFpbGVkOwotICB9IGVsc2UgewotICAgIEdTVF9JTkZPX09CSkVDVCAocHNpbmssCi0gICAgICAgICJyZXVzaW5nIHNoYXJlZCBjb250ZXh0IHdpdGggbmFtZSAlcywgcGJ1Zj0lcCwgcGN0eD0lcCIsCi0gICAgICAgIHBidWYtPmNvbnRleHRfbmFtZSwgcGJ1ZiwgcGN0eCk7Ci0gICAgcGN0eC0+cmluZ19idWZmZXJzID0gZ19zbGlzdF9wcmVwZW5kIChwY3R4LT5yaW5nX2J1ZmZlcnMsIHBidWYpOwotICB9Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICBuZWVkX3VubG9ja19zaGFyZWQgPSBGQUxTRTsKLQotICAvKiBjb250ZXh0IGNyZWF0ZWQgb3Igc2hhcmVkIG9rYXkgKi8KLSAgcGJ1Zi0+Y29udGV4dCA9IHBhX2NvbnRleHRfcmVmIChwY3R4LT5jb250ZXh0KTsKLQotICBmb3IgKDs7KSB7Ci0gICAgcGFfY29udGV4dF9zdGF0ZV90IHN0YXRlOwotCi0gICAgc3RhdGUgPSBwYV9jb250ZXh0X2dldF9zdGF0ZSAocGJ1Zi0+Y29udGV4dCk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJjb250ZXh0IHN0YXRlIGlzIG5vdyAlZCIsIHN0YXRlKTsKLQotICAgIGlmICghUEFfQ09OVEVYVF9JU19HT09EIChzdGF0ZSkpCi0gICAgICBnb3RvIGNvbm5lY3RfZmFpbGVkOwotCi0gICAgaWYgKHN0YXRlID09IFBBX0NPTlRFWFRfUkVBRFkpCi0gICAgICBicmVhazsKLQotICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbnRleHQgaXMgcmVhZHkgKi8KLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJ3YWl0aW5nLi4iKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0gIH0KLQotICBpZiAocGFfY29udGV4dF9nZXRfc2VydmVyX3Byb3RvY29sX3ZlcnNpb24gKHBidWYtPmNvbnRleHQpIDwgMjIpIHsKLSAgICAvKiBXZSBuZWVkIFB1bHNlQXVkaW8gPj0gMS4wIG9uIHRoZSBzZXJ2ZXIgc2lkZSBmb3IgdGhlIGV4dGVuZGVkIEFQSSAqLwotICAgIGdvdG8gYmFkX3NlcnZlcl92ZXJzaW9uOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAib3BlbmVkIHRoZSBkZXZpY2UiKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXVubG9ja19hbmRfZmFpbDoKLSAgewotICAgIGlmIChuZWVkX3VubG9ja19zaGFyZWQpCi0gICAgICBnX211dGV4X3VubG9jayAoJnBhX3NoYXJlZF9yZXNvdXJjZV9tdXRleCk7Ci0gICAgZ3N0X3B1bHNlcmluZ19kZXN0cm95X2NvbnRleHQgKHBidWYpOwotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotY3JlYXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJGYWlsZWQgdG8gY3JlYXRlIGNvbnRleHQiKSwgKE5VTEwpKTsKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdFB1bHNlQ29udGV4dCwgcGN0eCk7Ci0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gIH0KLWNvbm5lY3RfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELCAoIkZhaWxlZCB0byBjb25uZWN0OiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocGN0eC0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotYmFkX3NlcnZlcl92ZXJzaW9uOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELCAoIlB1bHNlQXVkaW8gc2VydmVyIHZlcnNpb24gIgotICAgICAgICAgICAgImlzIHRvbyBvbGQuIiksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gIH0KLX0KLQotLyogY2xvc2UgdGhlIGRldmljZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VyaW5nYnVmZmVyX2Nsb3NlX2RldmljZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKGJ1Zik7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAiY2xvc2luZyBkZXZpY2UiKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0gIGdzdF9wdWxzZXJpbmdfZGVzdHJveV9jb250ZXh0IChwYnVmKTsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAiY2xvc2VkIGRldmljZSIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ19zdHJlYW1fc3RhdGVfY2IgKHBhX3N0cmVhbSAqIHMsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIHBhX3N0cmVhbV9zdGF0ZV90IHN0YXRlOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUICh1c2VyZGF0YSk7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIHN0YXRlID0gcGFfc3RyZWFtX2dldF9zdGF0ZSAocyk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwc2luaywgImdvdCBuZXcgc3RyZWFtIHN0YXRlICVkIiwgc3RhdGUpOwotCi0gIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIFBBX1NUUkVBTV9SRUFEWToKLSAgICBjYXNlIFBBX1NUUkVBTV9GQUlMRUQ6Ci0gICAgY2FzZSBQQV9TVFJFQU1fVEVSTUlOQVRFRDoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwc2luaywgInNpZ25hbGluZyIpOwotICAgICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsIChtYWlubG9vcCwgMCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBBX1NUUkVBTV9VTkNPTk5FQ1RFRDoKLSAgICBjYXNlIFBBX1NUUkVBTV9DUkVBVElORzoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VyaW5nX3N0cmVhbV9yZXF1ZXN0X2NiIChwYV9zdHJlYW0gKiBzLCBzaXplX3QgbGVuZ3RoLCB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VTaW5rICpwc2luazsKLSAgR3N0QXVkaW9SaW5nQnVmZmVyICpyYnVmOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0KLSAgcmJ1ZiA9IEdTVF9BVURJT19SSU5HX0JVRkZFUl9DQVNUICh1c2VyZGF0YSk7Ci0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUICh1c2VyZGF0YSk7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwc2luaywgImdvdCByZXF1ZXN0IGZvciBsZW5ndGggJSIgR19HU0laRV9GT1JNQVQsIGxlbmd0aCk7Ci0KLSAgaWYgKHBidWYtPmluX2NvbW1pdCAmJiAobGVuZ3RoID49IHJidWYtPnNwZWMuc2Vnc2l6ZSkpIHsKLSAgICAvKiBvbmx5IHNpZ25hbCB3aGVuIHdlIGFyZSB3YWl0aW5nIGluIHRoZSBjb21taXQgdGhyZWFkCi0gICAgICogYW5kIGdvdCByZXF1ZXN0IGZvciBhdGxlYXN0IGEgc2VnbWVudCAqLwotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAobWFpbmxvb3AsIDApOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VyaW5nX3N0cmVhbV91bmRlcmZsb3dfY2IgKHBhX3N0cmVhbSAqIHMsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKHVzZXJkYXRhKTsKLSAgcHNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYnVmKSk7Ci0KLSAgR1NUX1dBUk5JTkdfT0JKRUNUIChwc2luaywgIkdvdCB1bmRlcmZsb3ciKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXJpbmdfc3RyZWFtX292ZXJmbG93X2NiIChwYV9zdHJlYW0gKiBzLCB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VTaW5rICpwc2luazsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUICh1c2VyZGF0YSk7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIEdTVF9XQVJOSU5HX09CSkVDVCAocHNpbmssICJHb3Qgb3ZlcmZsb3ciKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXJpbmdfc3RyZWFtX2xhdGVuY3lfY2IgKHBhX3N0cmVhbSAqIHMsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciAqcmluZ2J1ZjsKLSAgY29uc3QgcGFfdGltaW5nX2luZm8gKmluZm87Ci0gIHBhX3VzZWNfdCBzaW5rX3VzZWM7Ci0KLSAgaW5mbyA9IHBhX3N0cmVhbV9nZXRfdGltaW5nX2luZm8gKHMpOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUICh1c2VyZGF0YSk7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotICByaW5nYnVmID0gR1NUX0FVRElPX1JJTkdfQlVGRkVSIChwYnVmKTsKLQotICBpZiAoIWluZm8pIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJsYXRlbmN5IHVwZGF0ZSAoaW5mb3JtYXRpb24gdW5rbm93bikiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoIWluZm8tPnJlYWRfaW5kZXhfY29ycnVwdCkgewotICAgIC8qIFVwZGF0ZSBzZWdkb25lIGJhc2VkIG9uIHRoZSByZWFkIGluZGV4LiBzZWdkb25lIGlzIG9mIHNlZ21lbnQKLSAgICAgKiBncmFudWxhcml0eSwgd2hpbGUgdGhlIHJlYWQgaW5kZXggaXMgYXQgYnl0ZSBncmFudWxhcml0eS4gV2UgdGFrZSB0aGUKLSAgICAgKiBjZWlsaW5nIHdoaWxlIGNvbnZlcnRpbmcgdGhlIGxhdHRlciB0byB0aGUgZm9ybWVyIHNpbmNlIGl0IGlzIG1vcmUKLSAgICAgKiBjb25zZXJ2YXRpdmUgdG8gcmVwb3J0IHRoYXQgd2UndmUgcmVhZCBtb3JlIHRoYW4gd2UgaGF2ZSB0aGFuIHRvIHJlcG9ydAotICAgICAqIGxlc3MuIE9uZSBjb25jZXJuIGhlcmUgaXMgdGhhdCBsYXRlbmN5IHVwZGF0ZXMgaGFwcGVuIGV2ZXJ5IDEwMG1zLCB3aGljaAotICAgICAqIG1lYW5zIHNlZ2RvbmUgaXMgbm90IHVwZGF0ZWQgdmVyeSBvZnRlbiwgYnV0IGluY3JlYXNpbmcgdGhlIHVwZGF0ZQotICAgICAqIGZyZXF1ZW5jeSB3b3VsZCBtZWFuIG1vcmUgY29tbXVuaWNhdGlvbiBvdmVyaGVhZC4gKi8KLSAgICBnX2F0b21pY19pbnRfc2V0ICgmcmluZ2J1Zi0+c2VnZG9uZSwKLSAgICAgICAgKGludCkgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKGluZm8tPnJlYWRfaW5kZXgsIDEsCi0gICAgICAgICAgICByaW5nYnVmLT5zcGVjLnNlZ3NpemUpKTsKLSAgfQotCi0gIHNpbmtfdXNlYyA9IGluZm8tPmNvbmZpZ3VyZWRfc2lua191c2VjOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwc2luaywKLSAgICAgICJsYXRlbmN5X3VwZGF0ZSwgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCAlZDolIiBHX0dJTlQ2NF9GT1JNQVQgIiwgJWQ6JSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiwgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgR1NUX1RJTUVWQUxfVE9fVElNRSAoaW5mby0+dGltZXN0YW1wKSwgaW5mby0+d3JpdGVfaW5kZXhfY29ycnVwdCwKLSAgICAgIGluZm8tPndyaXRlX2luZGV4LCBpbmZvLT5yZWFkX2luZGV4X2NvcnJ1cHQsIGluZm8tPnJlYWRfaW5kZXgsCi0gICAgICBpbmZvLT5zaW5rX3VzZWMsIHNpbmtfdXNlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VyaW5nX3N0cmVhbV9zdXNwZW5kZWRfY2IgKHBhX3N0cmVhbSAqIHAsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKHVzZXJkYXRhKTsKLSAgcHNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYnVmKSk7Ci0KLSAgaWYgKHBhX3N0cmVhbV9pc19zdXNwZW5kZWQgKHApKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAic3RyZWFtIHN1c3BlbmRlZCIpOwotICBlbHNlCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJzdHJlYW0gcmVzdW1lZCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ19zdHJlYW1fc3RhcnRlZF9jYiAocGFfc3RyZWFtICogcCwgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlU2luayAqcHNpbms7Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLQotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAodXNlcmRhdGEpOwotICBwc2luayA9IEdTVF9QVUxTRVNJTktfQ0FTVCAoR1NUX09CSkVDVF9QQVJFTlQgKHBidWYpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInN0cmVhbSBzdGFydGVkIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VyaW5nX3N0cmVhbV9ldmVudF9jYiAocGFfc3RyZWFtICogcCwgY29uc3QgY2hhciAqbmFtZSwKLSAgICBwYV9wcm9wbGlzdCAqIHBsLCB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VTaW5rICpwc2luazsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUICh1c2VyZGF0YSk7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIGlmICghc3RyY21wIChuYW1lLCBQQV9TVFJFQU1fRVZFTlRfUkVRVUVTVF9DT1JLKSkgewotICAgIC8qIHRoZSBzdHJlYW0gd2FudHMgdG8gUEFVU0UsIHBvc3QgYSBtZXNzYWdlIGZvciB0aGUgYXBwbGljYXRpb24uICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJnb3QgcmVxdWVzdCBmb3IgQ09SSyIpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAocHNpbmspLAotICAgICAgICBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZSAoR1NUX09CSkVDVF9DQVNUIChwc2luayksCi0gICAgICAgICAgICBHU1RfU1RBVEVfUEFVU0VEKSk7Ci0KLSAgfSBlbHNlIGlmICghc3RyY21wIChuYW1lLCBQQV9TVFJFQU1fRVZFTlRfUkVRVUVTVF9VTkNPUkspKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJnb3QgcmVxdWVzdCBmb3IgVU5DT1JLIik7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChwc2luayksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlIChHU1RfT0JKRUNUX0NBU1QgKHBzaW5rKSwKLSAgICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSk7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobmFtZSwgUEFfU1RSRUFNX0VWRU5UX0ZPUk1BVF9MT1NUKSkgewotICAgIEdzdEV2ZW50ICpyZW5lZ287Ci0KLSAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnBzaW5rLT5mb3JtYXRfbG9zdCkpIHsKLSAgICAgIC8qIER1cGxpY2F0ZSBldmVudCBiZWZvcmUgd2UncmUgZG9uZSByZWNvbmZpZ3VyaW5nLCBkaXNjYXJkICovCi0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJnb3QgRk9STUFUIExPU1QiKTsKLSAgICBnX2F0b21pY19pbnRfc2V0ICgmcHNpbmstPmZvcm1hdF9sb3N0LCAxKTsKLSAgICBwc2luay0+Zm9ybWF0X2xvc3RfdGltZSA9IGdfYXNjaWlfc3RydG91bGwgKHBhX3Byb3BsaXN0X2dldHMgKHBsLAotICAgICAgICAgICAgInN0cmVhbS10aW1lIiksIE5VTEwsIDApICogMTAwMDsKLQotICAgIGdfZnJlZSAocHNpbmstPmRldmljZSk7Ci0gICAgcHNpbmstPmRldmljZSA9IGdfc3RyZHVwIChwYV9wcm9wbGlzdF9nZXRzIChwbCwgImRldmljZSIpKTsKLQotICAgIC8qIEZJWE1FOiBzZW5kIHJlY29uZmlndXJlIGV2ZW50IGluc3RlYWQgYW5kIGxldCBkZWNvZGViaW4vcGxheWJpbgotICAgICAqIGhhbmRsZSB0aGF0LiBBbHNvIHRha2UgY2FyZSBvZiBhYzMgYWxpZ25tZW50ICovCi0gICAgcmVuZWdvID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgicHVsc2UtZm9ybWF0LWxvc3QiKSk7Ci0KLSNpZiAwCi0gICAgaWYgKGdfc3RyX2VxdWFsIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdCksICJhdWRpby94LWVhYzMiKSkgewotICAgICAgR3N0U3RydWN0dXJlICpldmVudF9zdCA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYWMzcGFyc2Utc2V0LWFsaWdubWVudCIsCi0gICAgICAgICAgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsIHBiaW4tPmRiaW4gPyAiZnJhbWUiIDogImllYzYxOTM3IiwgTlVMTCk7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChwYmluLT5zaW5rcGFkLAotICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgZXZlbnRfc3QpKSkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYmluLT5zaW5rcGFkLCAiQ291bGQgbm90IHVwZGF0ZSBhbGlnbm1lbnQiKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFTRV9TSU5LIChwc2luayktPnNpbmtwYWQsIHJlbmVnbykpIHsKLSAgICAgIC8qIE5vYm9keSBoYW5kbGVkIHRoZSBmb3JtYXQgY2hhbmdlIC0gZW1pdCBhbiBlcnJvciAqLwotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBTVFJFQU0sIEZPUk1BVCwgKCJTaW5rIGZvcm1hdCBjaGFuZ2VkIiksCi0gICAgICAgICAgKCJTaW5rIGZvcm1hdCBjaGFuZ2VkIikpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgImdvdCB1bmtub3duIGV2ZW50ICVzIiwgbmFtZSk7Ci0gIH0KLX0KLQotLyogQ2FsbGVkIHdpdGggdGhlIG1haW5sb29wIGxvY2tlZCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VyaW5nX3dhaXRfZm9yX3N0cmVhbV9yZWFkeSAoR3N0UHVsc2VTaW5rICogcHNpbmssIHBhX3N0cmVhbSAqIHN0cmVhbSkKLXsKLSAgcGFfc3RyZWFtX3N0YXRlX3Qgc3RhdGU7Ci0KLSAgZm9yICg7OykgewotICAgIHN0YXRlID0gcGFfc3RyZWFtX2dldF9zdGF0ZSAoc3RyZWFtKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChwc2luaywgInN0cmVhbSBzdGF0ZSBpcyBub3cgJWQiLCBzdGF0ZSk7Ci0KLSAgICBpZiAoIVBBX1NUUkVBTV9JU19HT09EIChzdGF0ZSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAoc3RhdGUgPT0gUEFfU1RSRUFNX1JFQURZKQotICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICAvKiBXYWl0IHVudGlsIHRoZSBzdHJlYW0gaXMgcmVhZHkgKi8KLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0gIH0KLX0KLQotCi0vKiBUaGlzIG1ldGhvZCBzaG91bGQgY3JlYXRlIGEgbmV3IHN0cmVhbSBvZiB0aGUgZ2l2ZW4gQHNwZWMuIE5vIHBsYXliYWNrIHNob3VsZAotICogc3RhcnQgeWV0IHNvIHdlIHN0YXJ0IGluIHRoZSBjb3JrZWQgc3RhdGUuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZXJpbmdidWZmZXJfYWNxdWlyZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmLAotICAgIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIHBhX2J1ZmZlcl9hdHRyIHdhbnRlZDsKLSAgY29uc3QgcGFfYnVmZmVyX2F0dHIgKmFjdHVhbDsKLSAgcGFfY2hhbm5lbF9tYXAgY2hhbm5lbF9tYXA7Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIHBhX2N2b2x1bWUgdjsKLSAgcGFfY3ZvbHVtZSAqcHYgPSBOVUxMOwotICBwYV9zdHJlYW1fZmxhZ3NfdCBmbGFnczsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIEdzdEF1ZGlvQ2xvY2sgKmNsb2NrOwotICBwYV9mb3JtYXRfaW5mbyAqZm9ybWF0c1sxXTsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIGdjaGFyIHByaW50X2J1ZltQQV9GT1JNQVRfSU5GT19TTlBSSU5UX01BWF07Ci0jZW5kaWYKLQotICBwc2luayA9IEdTVF9QVUxTRVNJTktfQ0FTVCAoR1NUX09CSkVDVF9QQVJFTlQgKGJ1ZikpOwotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoYnVmKTsKLQotICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJjcmVhdGluZyBzYW1wbGUgc3BlYyIpOwotICAvKiBjb252ZXJ0IHRoZSBnc3RyZWFtZXIgc2FtcGxlIHNwZWMgdG8gdGhlIHB1bHNlYXVkaW8gZm9ybWF0ICovCi0gIGlmICghZ3N0X3B1bHNlX2ZpbGxfZm9ybWF0X2luZm8gKHNwZWMsICZwYnVmLT5mb3JtYXQsICZwYnVmLT5jaGFubmVscykpCi0gICAgZ290byBpbnZhbGlkX3NwZWM7Ci0gIHBidWYtPmlzX3BjbSA9IHBhX2Zvcm1hdF9pbmZvX2lzX3BjbSAocGJ1Zi0+Zm9ybWF0KTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0KLSAgLyogd2UgbmVlZCBhIGNvbnRleHQgYW5kIGEgbm8gc3RyZWFtICovCi0gIGdfYXNzZXJ0IChwYnVmLT5jb250ZXh0KTsKLSAgZ19hc3NlcnQgKCFwYnVmLT5zdHJlYW0pOwotCi0gIC8qIGlmIHdlIGhhdmUgYSBwcm9iZSwgZGlzY29ubmVjdCBpdCBmaXJzdCBzbyB0aGF0IGlmIHdlJ3JlIGNyZWF0aW5nIGEKLSAgICogY29tcHJlc3NlZCBzdHJlYW0sIGl0IGRvZXNuJ3QgZ2V0IGJsb2NrZWQgYnkgYSBQQ00gc3RyZWFtICovCi0gIGlmIChwYnVmLT5wcm9iZV9zdHJlYW0pIHsKLSAgICBnc3RfcHVsc2VfZGVzdHJveV9zdHJlYW0gKHBidWYtPnByb2JlX3N0cmVhbSwgVFJVRSk7Ci0gICAgcGJ1Zi0+cHJvYmVfc3RyZWFtID0gTlVMTDsKLSAgfQotCi0gIC8qIGVuYWJsZSBldmVudCBub3RpZmljYXRpb25zICovCi0gIEdTVF9MT0dfT0JKRUNUIChwc2luaywgInN1YnNjcmliaW5nIHRvIGNvbnRleHQgZXZlbnRzIik7Ci0gIGlmICghKG8gPSBwYV9jb250ZXh0X3N1YnNjcmliZSAocGJ1Zi0+Y29udGV4dCwKLSAgICAgICAgICAgICAgUEFfU1VCU0NSSVBUSU9OX01BU0tfU0lOS19JTlBVVCwgTlVMTCwgTlVMTCkpKQotICAgIGdvdG8gc3Vic2NyaWJlX2ZhaWxlZDsKLQotICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIC8qIGluaXRpYWxpemUgdGhlIGNoYW5uZWwgbWFwICovCi0gIGlmIChwYnVmLT5pc19wY20gJiYgZ3N0X3B1bHNlX2dzdF90b19jaGFubmVsX21hcCAoJmNoYW5uZWxfbWFwLCBzcGVjKSkKLSAgICBwYV9mb3JtYXRfaW5mb19zZXRfY2hhbm5lbF9tYXAgKHBidWYtPmZvcm1hdCwgJmNoYW5uZWxfbWFwKTsKLQotICAvKiBmaW5kIGEgZ29vZCBuYW1lIGZvciB0aGUgc3RyZWFtICovCi0gIGlmIChwc2luay0+c3RyZWFtX25hbWUpCi0gICAgbmFtZSA9IHBzaW5rLT5zdHJlYW1fbmFtZTsKLSAgZWxzZQotICAgIG5hbWUgPSAiUGxheWJhY2sgU3RyZWFtIjsKLQotICAvKiBjcmVhdGUgYSBzdHJlYW0gKi8KLSAgZm9ybWF0c1swXSA9IHBidWYtPmZvcm1hdDsKLSAgaWYgKCEocGJ1Zi0+c3RyZWFtID0gcGFfc3RyZWFtX25ld19leHRlbmRlZCAocGJ1Zi0+Y29udGV4dCwgbmFtZSwgZm9ybWF0cywgMSwKLSAgICAgICAgICAgICAgcHNpbmstPnByb3BsaXN0KSkpCi0gICAgZ290byBzdHJlYW1fZmFpbGVkOwotCi0gIC8qIGluc3RhbGwgZXNzZW50aWFsIGNhbGxiYWNrcyAqLwotICBwYV9zdHJlYW1fc2V0X3N0YXRlX2NhbGxiYWNrIChwYnVmLT5zdHJlYW0sCi0gICAgICBnc3RfcHVsc2VyaW5nX3N0cmVhbV9zdGF0ZV9jYiwgcGJ1Zik7Ci0gIHBhX3N0cmVhbV9zZXRfd3JpdGVfY2FsbGJhY2sgKHBidWYtPnN0cmVhbSwKLSAgICAgIGdzdF9wdWxzZXJpbmdfc3RyZWFtX3JlcXVlc3RfY2IsIHBidWYpOwotICBwYV9zdHJlYW1fc2V0X3VuZGVyZmxvd19jYWxsYmFjayAocGJ1Zi0+c3RyZWFtLAotICAgICAgZ3N0X3B1bHNlcmluZ19zdHJlYW1fdW5kZXJmbG93X2NiLCBwYnVmKTsKLSAgcGFfc3RyZWFtX3NldF9vdmVyZmxvd19jYWxsYmFjayAocGJ1Zi0+c3RyZWFtLAotICAgICAgZ3N0X3B1bHNlcmluZ19zdHJlYW1fb3ZlcmZsb3dfY2IsIHBidWYpOwotICBwYV9zdHJlYW1fc2V0X2xhdGVuY3lfdXBkYXRlX2NhbGxiYWNrIChwYnVmLT5zdHJlYW0sCi0gICAgICBnc3RfcHVsc2VyaW5nX3N0cmVhbV9sYXRlbmN5X2NiLCBwYnVmKTsKLSAgcGFfc3RyZWFtX3NldF9zdXNwZW5kZWRfY2FsbGJhY2sgKHBidWYtPnN0cmVhbSwKLSAgICAgIGdzdF9wdWxzZXJpbmdfc3RyZWFtX3N1c3BlbmRlZF9jYiwgcGJ1Zik7Ci0gIHBhX3N0cmVhbV9zZXRfc3RhcnRlZF9jYWxsYmFjayAocGJ1Zi0+c3RyZWFtLAotICAgICAgZ3N0X3B1bHNlcmluZ19zdHJlYW1fc3RhcnRlZF9jYiwgcGJ1Zik7Ci0gIHBhX3N0cmVhbV9zZXRfZXZlbnRfY2FsbGJhY2sgKHBidWYtPnN0cmVhbSwKLSAgICAgIGdzdF9wdWxzZXJpbmdfc3RyZWFtX2V2ZW50X2NiLCBwYnVmKTsKLQotICAvKiBidWZmZXJpbmcgcmVxdWlyZW1lbnRzLiBXaGVuIHNldHRpbmcgcHJlYnVmIHRvIDAsIHRoZSBzdHJlYW0gd2lsbCBub3QgcGF1c2UKLSAgICogd2hlbiB3ZSBjYXVzZSBhbiB1bmRlcnJ1biwgd2hpY2ggY2F1c2VzIHRpbWUgdG8gY29udGludWUuICovCi0gIG1lbXNldCAoJndhbnRlZCwgMCwgc2l6ZW9mICh3YW50ZWQpKTsKLSAgd2FudGVkLnRsZW5ndGggPSBzcGVjLT5zZWd0b3RhbCAqIHNwZWMtPnNlZ3NpemU7Ci0gIHdhbnRlZC5tYXhsZW5ndGggPSAtMTsKLSAgd2FudGVkLnByZWJ1ZiA9IDA7Ci0gIHdhbnRlZC5taW5yZXEgPSBzcGVjLT5zZWdzaXplOwotCi0gIEdTVF9JTkZPX09CSkVDVCAocHNpbmssICJ0bGVuZ3RoOiAgICVkIiwgd2FudGVkLnRsZW5ndGgpOwotICBHU1RfSU5GT19PQkpFQ1QgKHBzaW5rLCAibWF4bGVuZ3RoOiAlZCIsIHdhbnRlZC5tYXhsZW5ndGgpOwotICBHU1RfSU5GT19PQkpFQ1QgKHBzaW5rLCAicHJlYnVmOiAgICAlZCIsIHdhbnRlZC5wcmVidWYpOwotICBHU1RfSU5GT19PQkpFQ1QgKHBzaW5rLCAibWlucmVxOiAgICAlZCIsIHdhbnRlZC5taW5yZXEpOwotCi0gIC8qIGNvbmZpZ3VyZSB2b2x1bWUgd2hlbiB3ZSBjaGFuZ2VkIGl0LCBlbHNlIHdlIGxlYXZlIHRoZSBkZWZhdWx0ICovCi0gIGlmIChwc2luay0+dm9sdW1lX3NldCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChwc2luaywgImhhdmUgdm9sdW1lIG9mICVmIiwgcHNpbmstPnZvbHVtZSk7Ci0gICAgcHYgPSAmdjsKLSAgICBpZiAocGJ1Zi0+aXNfcGNtKQotICAgICAgZ3N0X3B1bHNlX2N2b2x1bWVfZnJvbV9saW5lYXIgKHB2LCBwYnVmLT5jaGFubmVscywgcHNpbmstPnZvbHVtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInBhc3N0aHJvdWdoIHN0cmVhbSwgbm90IHNldHRpbmcgdm9sdW1lIik7Ci0gICAgICBwdiA9IE5VTEw7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHB2ID0gTlVMTDsKLSAgfQotCi0gIC8qIGNvbnN0cnVjdCB0aGUgZmxhZ3MgKi8KLSAgZmxhZ3MgPSBQQV9TVFJFQU1fSU5URVJQT0xBVEVfVElNSU5HIHwgUEFfU1RSRUFNX0FVVE9fVElNSU5HX1VQREFURSB8Ci0gICAgICBQQV9TVFJFQU1fQURKVVNUX0xBVEVOQ1kgfCBQQV9TVFJFQU1fU1RBUlRfQ09SS0VEOwotCi0gIGlmIChwc2luay0+bXV0ZV9zZXQpIHsKLSAgICBpZiAocHNpbmstPm11dGUpCi0gICAgICBmbGFncyB8PSBQQV9TVFJFQU1fU1RBUlRfTVVURUQ7Ci0gICAgZWxzZQotICAgICAgZmxhZ3MgfD0gUEFfU1RSRUFNX1NUQVJUX1VOTVVURUQ7Ci0gIH0KLQotICAvKiB3ZSBhbHdheXMgc3RhcnQgY29ya2VkIChzZWUgZmxhZ3MgYWJvdmUpICovCi0gIHBidWYtPmNvcmtlZCA9IFRSVUU7Ci0KLSAgLyogdHJ5IHRvIGNvbm5lY3Qgbm93ICovCi0gIEdTVF9MT0dfT0JKRUNUIChwc2luaywgImNvbm5lY3QgZm9yIHBsYXliYWNrIHRvIGRldmljZSAlcyIsCi0gICAgICBHU1RfU1RSX05VTEwgKHBzaW5rLT5kZXZpY2UpKTsKLSAgaWYgKHBhX3N0cmVhbV9jb25uZWN0X3BsYXliYWNrIChwYnVmLT5zdHJlYW0sIHBzaW5rLT5kZXZpY2UsCi0gICAgICAgICAgJndhbnRlZCwgZmxhZ3MsIHB2LCBOVUxMKSA8IDApCi0gICAgZ290byBjb25uZWN0X2ZhaWxlZDsKLQotICAvKiBvdXIgY2xvY2sgd2lsbCBub3cgc3RhcnQgZnJvbSAwIGFnYWluICovCi0gIGNsb2NrID0gR1NUX0FVRElPX0NMT0NLIChHU1RfQVVESU9fQkFTRV9TSU5LIChwc2luayktPnByb3ZpZGVkX2Nsb2NrKTsKLSAgZ3N0X2F1ZGlvX2Nsb2NrX3Jlc2V0IChjbG9jaywgMCk7Ci0KLSAgaWYgKCFnc3RfcHVsc2VyaW5nX3dhaXRfZm9yX3N0cmVhbV9yZWFkeSAocHNpbmssIHBidWYtPnN0cmVhbSkpCi0gICAgZ290byBjb25uZWN0X2ZhaWxlZDsKLQotICBnX2ZyZWUgKHBzaW5rLT5kZXZpY2UpOwotICBwc2luay0+ZGV2aWNlID0gZ19zdHJkdXAgKHBhX3N0cmVhbV9nZXRfZGV2aWNlX25hbWUgKHBidWYtPnN0cmVhbSkpOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBwYV9mb3JtYXRfaW5mb19zbnByaW50IChwcmludF9idWYsIHNpemVvZiAocHJpbnRfYnVmKSwKLSAgICAgIHBhX3N0cmVhbV9nZXRfZm9ybWF0X2luZm8gKHBidWYtPnN0cmVhbSkpOwotICBHU1RfSU5GT19PQkpFQ1QgKHBzaW5rLCAibmVnb3RpYXRlZCB0bzogJXMiLCBwcmludF9idWYpOwotI2VuZGlmCi0KLSAgLyogQWZ0ZXIgd2UgcGFzc2VkIHRoZSB2b2x1bWUgb2ZmIG9mIHRvIFBBIHdlIG5ldmVyIHdhbnQgdG8gc2V0IGl0Ci0gICAgIGFnYWluLCBzaW5jZSBpdCBpcyBQQSdzIGpvYiB0byBzYXZlL3Jlc3RvcmUgdm9sdW1lcy4gICovCi0gIHBzaW5rLT52b2x1bWVfc2V0ID0gcHNpbmstPm11dGVfc2V0ID0gRkFMU0U7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAic3RyZWFtIGlzIGFjcXVpcmVkIG5vdyIpOwotCi0gIC8qIGdldCB0aGUgYWN0dWFsIGJ1ZmZlcmluZyBwcm9wZXJ0aWVzIG5vdyAqLwotICBhY3R1YWwgPSBwYV9zdHJlYW1fZ2V0X2J1ZmZlcl9hdHRyIChwYnVmLT5zdHJlYW0pOwotCi0gIEdTVF9JTkZPX09CSkVDVCAocHNpbmssICJ0bGVuZ3RoOiAgICVkICh3YW50ZWQ6ICVkKSIsIGFjdHVhbC0+dGxlbmd0aCwKLSAgICAgIHdhbnRlZC50bGVuZ3RoKTsKLSAgR1NUX0lORk9fT0JKRUNUIChwc2luaywgIm1heGxlbmd0aDogJWQiLCBhY3R1YWwtPm1heGxlbmd0aCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAocHNpbmssICJwcmVidWY6ICAgICVkIiwgYWN0dWFsLT5wcmVidWYpOwotICBHU1RfSU5GT19PQkpFQ1QgKHBzaW5rLCAibWlucmVxOiAgICAlZCAod2FudGVkICVkKSIsIGFjdHVhbC0+bWlucmVxLAotICAgICAgd2FudGVkLm1pbnJlcSk7Ci0KLSAgc3BlYy0+c2Vnc2l6ZSA9IGFjdHVhbC0+bWlucmVxOwotICBzcGVjLT5zZWd0b3RhbCA9IGFjdHVhbC0+dGxlbmd0aCAvIHNwZWMtPnNlZ3NpemU7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi11bmxvY2tfYW5kX2ZhaWw6Ci0gIHsKLSAgICBnc3RfcHVsc2VyaW5nX2Rlc3Ryb3lfc3RyZWFtIChwYnVmKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9zcGVjOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICgiSW52YWxpZCBzYW1wbGUgc3BlY2lmaWNhdGlvbi4iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXN1YnNjcmliZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfY29udGV4dF9zdWJzY3JpYmUoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci1zdHJlYW1fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoIkZhaWxlZCB0byBjcmVhdGUgc3RyZWFtOiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocGJ1Zi0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotY29ubmVjdF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgiRmFpbGVkIHRvIGNvbm5lY3Qgc3RyZWFtOiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocGJ1Zi0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotfQotCi0vKiBmcmVlIHRoZSBzdHJlYW0gdGhhdCB3ZSBhY3F1aXJlZCBiZWZvcmUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlcmluZ2J1ZmZlcl9yZWxlYXNlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLQotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoYnVmKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0gIGdzdF9wdWxzZXJpbmdfZGVzdHJveV9zdHJlYW0gKHBidWYpOwotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLQotICB7Ci0gICAgR3N0UHVsc2VTaW5rICpwc2luazsKLQotICAgIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotICAgIGdfYXRvbWljX2ludF9zZXQgKCZwc2luay0+Zm9ybWF0X2xvc3QsIEZBTFNFKTsKLSAgICBwc2luay0+Zm9ybWF0X2xvc3RfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXJpbmdfc3VjY2Vzc19jYiAocGFfc3RyZWFtICogcywgaW50IHN1Y2Nlc3MsIHZvaWQgKnVzZXJkYXRhKQotewotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKG1haW5sb29wLCAwKTsKLX0KLQotLyogdXBkYXRlIHRoZSBjb3JrZWQgc3RhdGUgb2YgYSBzdHJlYW0sIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG1haW5sb29wCi0gKiBsb2NrICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZXJpbmdfc2V0X2NvcmtlZCAoR3N0UHVsc2VSaW5nQnVmZmVyICogcGJ1ZiwgZ2Jvb2xlYW4gY29ya2VkLAotICAgIGdib29sZWFuIHdhaXQpCi17Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIEdzdFB1bHNlU2luayAqcHNpbms7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmcHNpbmstPmZvcm1hdF9sb3N0KSkgewotICAgIC8qIFNpbmsgZm9ybWF0IGNoYW5nZWQsIHN0cmVhbSdzIGdvbmUgc28gZmFrZSBiZWluZyBwYXVzZWQgKi8KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAic2V0dGluZyBjb3JrZWQgc3RhdGUgdG8gJWQiLCBjb3JrZWQpOwotICBpZiAocGJ1Zi0+Y29ya2VkICE9IGNvcmtlZCkgewotICAgIGlmICghKG8gPSBwYV9zdHJlYW1fY29yayAocGJ1Zi0+c3RyZWFtLCBjb3JrZWQsCi0gICAgICAgICAgICAgICAgZ3N0X3B1bHNlcmluZ19zdWNjZXNzX2NiLCBwYnVmKSkpCi0gICAgICBnb3RvIGNvcmtfZmFpbGVkOwotCi0gICAgd2hpbGUgKHdhaXQgJiYgcGFfb3BlcmF0aW9uX2dldF9zdGF0ZSAobykgPT0gUEFfT1BFUkFUSU9OX1JVTk5JTkcpIHsKLSAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKG1haW5sb29wKTsKLSAgICAgIGlmIChnc3RfcHVsc2VyaW5nX2lzX2RlYWQgKHBzaW5rLCBwYnVmLCBUUlVFKSkKLSAgICAgICAgZ290byBzZXJ2ZXJfZGVhZDsKLSAgICB9Ci0gICAgcGJ1Zi0+Y29ya2VkID0gY29ya2VkOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAic2tpcHBpbmcsIGFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlIik7Ci0gIH0KLSAgcmVzID0gVFJVRTsKLQotY2xlYW51cDoKLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotc2VydmVyX2RlYWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInRoZSBzZXJ2ZXIgaXMgZGVhZCIpOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotY29ya19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfc3RyZWFtX2NvcmsoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlcmluZ2J1ZmZlcl9jbGVhciAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKGJ1Zik7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJjbGVhcmluZyIpOwotICBpZiAocGJ1Zi0+c3RyZWFtKSB7Ci0gICAgLyogZG9uJ3Qgd2FpdCBmb3IgdGhlIGZsdXNoIHRvIGNvbXBsZXRlICovCi0gICAgaWYgKChvID0gcGFfc3RyZWFtX2ZsdXNoIChwYnVmLT5zdHJlYW0sIE5VTEwsIHBidWYpKSkKLSAgICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0gIH0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci19Ci0KLSNpZiAwCi0vKiBjYWxsZWQgZnJvbSBwdWxzZSB0aHJlYWQgd2l0aCB0aGUgbWFpbmxvb3AgbG9jayAqLwotc3RhdGljIHZvaWQKLW1haW5sb29wX2VudGVyX2RlZmVyX2NiIChwYV9tYWlubG9vcF9hcGkgKiBhcGksIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnB1bHNlc2luayA9IEdTVF9QVUxTRVNJTksgKHVzZXJkYXRhKTsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR1ZhbHVlIHZhbCA9IHsgMCB9OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc2luaywgInBvc3RpbmcgRU5URVIgc3RyZWFtIHN0YXR1cyIpOwotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3N0cmVhbV9zdGF0dXMgKEdTVF9PQkpFQ1QgKHB1bHNlc2luayksCi0gICAgICBHU1RfU1RSRUFNX1NUQVRVU19UWVBFX0VOVEVSLCBHU1RfRUxFTUVOVCAocHVsc2VzaW5rKSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfR19USFJFQUQpOwotICBnX3ZhbHVlX3NldF9ib3hlZCAoJnZhbCwgZ190aHJlYWRfc2VsZiAoKSk7Ci0gIGdzdF9tZXNzYWdlX3NldF9zdHJlYW1fc3RhdHVzX29iamVjdCAobWVzc2FnZSwgJnZhbCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHB1bHNlc2luayksIG1lc3NhZ2UpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHB1bHNlc2luay0+ZGVmZXJfcGVuZGluZyk7Ci0gIHB1bHNlc2luay0+ZGVmZXJfcGVuZGluZy0tOwotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKG1haW5sb29wLCAwKTsKLX0KLSNlbmRpZgotCi0vKiBzdGFydC9yZXN1bWUgcGxheWJhY2sgQVNBUCwgd2UgZG9uJ3QgdW5jb3JrIGhlcmUgYnV0IGluIHRoZSBjb21taXQgbWV0aG9kICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZXJpbmdidWZmZXJfc3RhcnQgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0UHVsc2VTaW5rICpwc2luazsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUIChidWYpOwotICBwc2luayA9IEdTVF9QVUxTRVNJTktfQ0FTVCAoR1NUX09CSkVDVF9QQVJFTlQgKHBidWYpKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJzdGFydGluZyIpOwotICBwYnVmLT5wYXVzZWQgPSBGQUxTRTsKLQotICAvKiBFT1MgbmVlZHMgcnVubmluZyBjbG9jayAqLwotICBpZiAoR1NUX0JBU0VfU0lOS19DQVNUIChwc2luayktPmVvcyB8fAotICAgICAgZ19hdG9taWNfaW50X2dldCAoJkdTVF9BVURJT19CQVNFX1NJTksgKHBzaW5rKS0+ZW9zX3JlbmRlcmluZykpCi0gICAgZ3N0X3B1bHNlcmluZ19zZXRfY29ya2VkIChwYnVmLCBGQUxTRSwgRkFMU0UpOwotCi0jaWYgMAotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInNjaGVkdWxpbmcgc3RyZWFtIHN0YXR1cyIpOwotICBwc2luay0+ZGVmZXJfcGVuZGluZysrOwotICBwYV9tYWlubG9vcF9hcGlfb25jZSAocGFfdGhyZWFkZWRfbWFpbmxvb3BfZ2V0X2FwaSAobWFpbmxvb3ApLAotICAgICAgbWFpbmxvb3BfZW50ZXJfZGVmZXJfY2IsIHBzaW5rKTsKLQotICAvKiBXYWl0IGZvciB0aGUgc3RyZWFtIHN0YXR1cyBtZXNzYWdlIHRvIGJlIHBvc3RlZC4gVGhpcyBuZWVkcyB0byBiZSBkb25lCi0gICAqIHN5bmNocm9ub3VzbHkgYmVjYXVzZSB0aGUgY2FsbGJhY2sgd2lsbCB0YWtlIHRoZSBtYWlubG9vcCBsb2NrCi0gICAqIChpbXBsaWNpdGx5KSBhbmQgdGhlbiB0YWtlIHRoZSBHU1RfT0JKRUNUX0xPQ0suIEV2ZXJ5d2hlcmUgZWxzZSwgd2UgdGFrZQotICAgKiB0aGUgbG9ja3MgaW4gdGhlIHJldmVyc2Ugb3JkZXIsIHNvIG5vdCBkb2luZyB0aGlzIHN5bmNocm9ub3VzbHkgY291bGQKLSAgICogY2F1c2UgYSBkZWFkbG9jay4gKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ3YWl0aW5nIGZvciBzdHJlYW0gc3RhdHVzIChFTlRFUikgdG8gYmUgcG9zdGVkIik7Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKG1haW5sb29wKTsKLSNlbmRpZgotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBwYXVzZS9zdG9wIHBsYXliYWNrIEFTQVAgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlcmluZ2J1ZmZlcl9wYXVzZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIGdib29sZWFuIHJlczsKLQotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoYnVmKTsKLSAgcHNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYnVmKSk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAobWFpbmxvb3ApOwotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInBhdXNpbmcgYW5kIGNvcmtpbmciKTsKLSAgLyogbWFrZSBzdXJlIHRoZSBjb21taXQgbWV0aG9kIHN0b3BzIHdyaXRpbmcgKi8KLSAgcGJ1Zi0+cGF1c2VkID0gVFJVRTsKLSAgcmVzID0gZ3N0X3B1bHNlcmluZ19zZXRfY29ya2VkIChwYnVmLCBUUlVFLCBUUlVFKTsKLSAgaWYgKHBidWYtPmluX2NvbW1pdCkgewotICAgIC8qIHdlIGFyZSB3YWl0aW5nIGluIGEgY29tbWl0LCBzaWduYWwgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInNpZ25hbCBjb21taXQiKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKG1haW5sb29wLCAwKTsKLSAgfQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0jaWYgMAotLyogY2FsbGVkIGZyb20gcHVsc2UgdGhyZWFkIHdpdGggdGhlIG1haW5sb29wIGxvY2sgKi8KLXN0YXRpYyB2b2lkCi1tYWlubG9vcF9sZWF2ZV9kZWZlcl9jYiAocGFfbWFpbmxvb3BfYXBpICogYXBpLCB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VTaW5rICpwdWxzZXNpbmsgPSBHU1RfUFVMU0VTSU5LICh1c2VyZGF0YSk7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdWYWx1ZSB2YWwgPSB7IDAgfTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNpbmssICJwb3N0aW5nIExFQVZFIHN0cmVhbSBzdGF0dXMiKTsKLSAgbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19zdHJlYW1fc3RhdHVzIChHU1RfT0JKRUNUIChwdWxzZXNpbmspLAotICAgICAgR1NUX1NUUkVBTV9TVEFUVVNfVFlQRV9MRUFWRSwgR1NUX0VMRU1FTlQgKHB1bHNlc2luaykpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0dfVEhSRUFEKTsKLSAgZ192YWx1ZV9zZXRfYm94ZWQgKCZ2YWwsIGdfdGhyZWFkX3NlbGYgKCkpOwotICBnc3RfbWVzc2FnZV9zZXRfc3RyZWFtX3N0YXR1c19vYmplY3QgKG1lc3NhZ2UsICZ2YWwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwdWxzZXNpbmspLCBtZXNzYWdlKTsKLQotICBnX3JldHVybl9pZl9mYWlsIChwdWxzZXNpbmstPmRlZmVyX3BlbmRpbmcpOwotICBwdWxzZXNpbmstPmRlZmVyX3BlbmRpbmctLTsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsIChtYWlubG9vcCwgMCk7Ci19Ci0jZW5kaWYKLQotLyogc3RvcCBwbGF5YmFjaywgd2UgZmx1c2ggZXZlcnl0aGluZy4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlcmluZ2J1ZmZlcl9zdG9wIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFB1bHNlU2luayAqcHNpbms7Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKGJ1Zik7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLQotICBwYnVmLT5wYXVzZWQgPSBUUlVFOwotICByZXMgPSBnc3RfcHVsc2VyaW5nX3NldF9jb3JrZWQgKHBidWYsIFRSVUUsIFRSVUUpOwotCi0gIC8qIEluZm9ybSBhbnlvbmUgd2FpdGluZyBpbiBfY29tbWl0KCkgY2FsbCB0aGF0IGl0IHNoYWxsIHdha2V1cCAqLwotICBpZiAocGJ1Zi0+aW5fY29tbWl0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJzaWduYWwgY29tbWl0IHRocmVhZCIpOwotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAobWFpbmxvb3AsIDApOwotICB9Ci0gIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmcHNpbmstPmZvcm1hdF9sb3N0KSkgewotICAgIC8qIERvbid0IHRyeSB0byBmbHVzaCwgdGhlIHN0cmVhbSdzIHByb2JhYmx5IGdvbmUgYnkgbm93ICovCi0gICAgcmVzID0gVFJVRTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICAvKiB0aGVuIHRyeSB0byBmbHVzaCwgaXQncyBub3QgZmF0YWwgd2hlbiB0aGlzIGZhaWxzICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAiZmx1c2hpbmciKTsKLSAgaWYgKChvID0gcGFfc3RyZWFtX2ZsdXNoIChwYnVmLT5zdHJlYW0sIGdzdF9wdWxzZXJpbmdfc3VjY2Vzc19jYiwgcGJ1ZikpKSB7Ci0gICAgd2hpbGUgKHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKG8pID09IFBBX09QRVJBVElPTl9SVU5OSU5HKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndhaXQgZm9yIGNvbXBsZXRpb24iKTsKLSAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKG1haW5sb29wKTsKLSAgICAgIGlmIChnc3RfcHVsc2VyaW5nX2lzX2RlYWQgKHBzaW5rLCBwYnVmLCBUUlVFKSkKLSAgICAgICAgZ290byBzZXJ2ZXJfZGVhZDsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJmbHVzaCBjb21wbGV0ZWQiKTsKLSAgfQotICByZXMgPSBUUlVFOwotCi1jbGVhbnVwOgotICBpZiAobykgewotICAgIHBhX29wZXJhdGlvbl9jYW5jZWwgKG8pOwotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0gIH0KLSNpZiAwCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAic2NoZWR1bGluZyBzdHJlYW0gc3RhdHVzIik7Ci0gIHBzaW5rLT5kZWZlcl9wZW5kaW5nKys7Ci0gIHBhX21haW5sb29wX2FwaV9vbmNlIChwYV90aHJlYWRlZF9tYWlubG9vcF9nZXRfYXBpIChtYWlubG9vcCksCi0gICAgICBtYWlubG9vcF9sZWF2ZV9kZWZlcl9jYiwgcHNpbmspOwotCi0gIC8qIFdhaXQgZm9yIHRoZSBzdHJlYW0gc3RhdHVzIG1lc3NhZ2UgdG8gYmUgcG9zdGVkLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUKLSAgICogc3luY2hyb25vdXNseSBiZWNhdXNlIHRoZSBjYWxsYmFjayB3aWxsIHRha2UgdGhlIG1haW5sb29wIGxvY2sKLSAgICogKGltcGxpY2l0bHkpIGFuZCB0aGVuIHRha2UgdGhlIEdTVF9PQkpFQ1RfTE9DSy4gRXZlcnl3aGVyZSBlbHNlLCB3ZSB0YWtlCi0gICAqIHRoZSBsb2NrcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciwgc28gbm90IGRvaW5nIHRoaXMgc3luY2hyb25vdXNseSBjb3VsZAotICAgKiBjYXVzZSBhIGRlYWRsb2NrLiAqLwotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndhaXRpbmcgZm9yIHN0cmVhbSBzdGF0dXMgKExFQVZFKSB0byBiZSBwb3N0ZWQiKTsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdCAobWFpbmxvb3ApOwotI2VuZGlmCi0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXNlcnZlcl9kZWFkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ0aGUgc2VydmVyIGlzIGRlYWQiKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLX0KLQotLyogaW5fc2FtcGxlcyA+PSBvdXRfc2FtcGxlcywgcmF0ZSA+IDEuMCAqLwotI2RlZmluZSBGV0RfVVBfU0FNUExFUyhzLHNlLGQsZGUpICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludDggKnNiID0gcywgKmRiID0gZDsgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAocyA8PSBzZSAmJiBkIDwgZGUpIHsgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbWNweSAoZCwgcywgYnBmKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHMgKz0gYnBmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICphY2N1bSArPSBvdXRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoKmFjY3VtIDw8IDEpID49IGlucikgeyAgICAgICAgICAgICAgICAgXAotICAgICAgKmFjY3VtIC09IGlucjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZCArPSBicGY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbl9zYW1wbGVzIC09IChzIC0gc2IpL2JwZjsgICAgICAgICAgICAgICAgICAgXAotICBvdXRfc2FtcGxlcyAtPSAoZCAtIGRiKS9icGY7ICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJmd2RfdXAgZW5kICVkLyVkIiwqYWNjdW0sKnRvcHJvY2Vzcyk7ICAgICBcCi19IEdfU1RNVF9FTkQKLQotLyogb3V0X3NhbXBsZXMgPiBpbl9zYW1wbGVzLCBmb3IgcmF0ZXMgc21hbGxlciB0aGFuIDEuMCAqLwotI2RlZmluZSBGV0RfRE9XTl9TQU1QTEVTKHMsc2UsZCxkZSkgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludDggKnNiID0gcywgKmRiID0gZDsgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAocyA8PSBzZSAmJiBkIDwgZGUpIHsgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbWNweSAoZCwgcywgYnBmKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGQgKz0gYnBmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICphY2N1bSArPSBpbnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoKmFjY3VtIDw8IDEpID49IG91dHIpIHsgICAgICAgICAgICAgICAgXAotICAgICAgKmFjY3VtIC09IG91dHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcyArPSBicGY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbl9zYW1wbGVzIC09IChzIC0gc2IpL2JwZjsgICAgICAgICAgICAgICAgICAgXAotICBvdXRfc2FtcGxlcyAtPSAoZCAtIGRiKS9icGY7ICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJmd2RfZG93biBlbmQgJWQvJWQiLCphY2N1bSwqdG9wcm9jZXNzKTsgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBSRVZfVVBfU0FNUExFUyhzLHNlLGQsZGUpICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludDggKnNiID0gc2UsICpkYiA9IGQ7ICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAocyA8PSBzZSAmJiBkIDwgZGUpIHsgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbWNweSAoZCwgc2UsIGJwZik7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNlIC09IGJwZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICphY2N1bSArPSBvdXRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChkIDwgZGUgJiYgKCphY2N1bSA8PCAxKSA+PSBpbnIpIHsgICAgXAotICAgICAgKmFjY3VtIC09IGlucjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZCArPSBicGY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbl9zYW1wbGVzIC09IChzYiAtIHNlKS9icGY7ICAgICAgICAgICAgICAgICAgXAotICBvdXRfc2FtcGxlcyAtPSAoZCAtIGRiKS9icGY7ICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJyZXZfdXAgZW5kICVkLyVkIiwqYWNjdW0sKnRvcHJvY2Vzcyk7ICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBSRVZfRE9XTl9TQU1QTEVTKHMsc2UsZCxkZSkgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludDggKnNiID0gc2UsICpkYiA9IGQ7ICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAocyA8PSBzZSAmJiBkIDwgZGUpIHsgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbWNweSAoZCwgc2UsIGJwZik7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGQgKz0gYnBmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICphY2N1bSArPSBpbnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlIChzIDw9IHNlICYmICgqYWNjdW0gPDwgMSkgPj0gb3V0cikgeyAgXAotICAgICAgKmFjY3VtIC09IG91dHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgc2UgLT0gYnBmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbl9zYW1wbGVzIC09IChzYiAtIHNlKS9icGY7ICAgICAgICAgICAgICAgICAgXAotICBvdXRfc2FtcGxlcyAtPSAoZCAtIGRiKS9icGY7ICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJyZXZfZG93biBlbmQgJWQvJWQiLCphY2N1bSwqdG9wcm9jZXNzKTsgICBcCi19IEdfU1RNVF9FTkQKLQotLyogb3VyIGN1c3RvbSBjb21taXQgZnVuY3Rpb24gYmVjYXVzZSB3ZSB3cml0ZSBpbnRvIHRoZSBidWZmZXIgb2YgcHVsc2VhdWRpbwotICogaW5zdGVhZCBvZiBrZWVwaW5nIG91ciBvd24gYnVmZmVyICovCi1zdGF0aWMgZ3VpbnQKLWdzdF9wdWxzZXJpbmdidWZmZXJfY29tbWl0IChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYsIGd1aW50NjQgKiBzYW1wbGUsCi0gICAgZ3VjaGFyICogZGF0YSwgZ2ludCBpbl9zYW1wbGVzLCBnaW50IG91dF9zYW1wbGVzLCBnaW50ICogYWNjdW0pCi17Ci0gIEdzdFB1bHNlU2luayAqcHNpbms7Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLSAgZ3VpbnQgcmVzdWx0OwotICBndWludDggKmRhdGFfZW5kOwotICBnYm9vbGVhbiByZXZlcnNlOwotICBnaW50ICp0b3Byb2Nlc3M7Ci0gIGdpbnQgaW5yLCBvdXRyLCBicGY7Ci0gIGdpbnQ2NCBvZmZzZXQ7Ci0gIGd1aW50IGJ1ZnNpemU7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKGJ1Zik7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIC8qIEZJWE1FIHBvc3QgbWVzc2FnZSByYXRoZXIgdGhhbiB1c2luZyBhIHNpZ25hbCAoYXMgbWl4ZXIgaW50ZXJmYWNlKSAqLwotICBpZiAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcHNpbmstPm5vdGlmeSwgMSwgMCkpIHsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChwc2luayksICJ2b2x1bWUiKTsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChwc2luayksICJtdXRlIik7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAocHNpbmspLCAiY3VycmVudC1kZXZpY2UiKTsKLSAgfQotCi0gIC8qIG1ha2Ugc3VyZSB0aGUgcmluZ2J1ZmZlciBpcyBzdGFydGVkICovCi0gIGlmIChHX1VOTElLRUxZIChnX2F0b21pY19pbnRfZ2V0ICgmYnVmLT5zdGF0ZSkgIT0KLSAgICAgICAgICBHU1RfQVVESU9fUklOR19CVUZGRVJfU1RBVEVfU1RBUlRFRCkpIHsKLSAgICAvKiBzZWUgaWYgd2UgYXJlIGFsbG93ZWQgdG8gc3RhcnQgaXQgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoZ19hdG9taWNfaW50X2dldCAoJmJ1Zi0+bWF5X3N0YXJ0KSA9PSBGQUxTRSkpCi0gICAgICBnb3RvIG5vX3N0YXJ0OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYnVmLCAic3RhcnQhIik7Ci0gICAgaWYgKCFnc3RfYXVkaW9fcmluZ19idWZmZXJfc3RhcnQgKGJ1ZikpCi0gICAgICBnb3RvIHN0YXJ0X2ZhaWxlZDsKLSAgfQotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgImVudGVyaW5nIGNvbW1pdCIpOwotICBwYnVmLT5pbl9jb21taXQgPSBUUlVFOwotCi0gIGJwZiA9IEdTVF9BVURJT19JTkZPX0JQRiAoJmJ1Zi0+c3BlYy5pbmZvKTsKLSAgYnVmc2l6ZSA9IGJ1Zi0+c3BlYy5zZWdzaXplICogYnVmLT5zcGVjLnNlZ3RvdGFsOwotCi0gIC8qIG91ciB0b3kgcmVzYW1wbGVyIGZvciB0cmljayBtb2RlcyAqLwotICByZXZlcnNlID0gb3V0X3NhbXBsZXMgPCAwOwotICBvdXRfc2FtcGxlcyA9IEFCUyAob3V0X3NhbXBsZXMpOwotCi0gIGlmIChpbl9zYW1wbGVzID49IG91dF9zYW1wbGVzKQotICAgIHRvcHJvY2VzcyA9ICZpbl9zYW1wbGVzOwotICBlbHNlCi0gICAgdG9wcm9jZXNzID0gJm91dF9zYW1wbGVzOwotCi0gIGluciA9IGluX3NhbXBsZXMgLSAxOwotICBvdXRyID0gb3V0X3NhbXBsZXMgLSAxOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAiaW4gJWQsIG91dCAlZCIsIGluciwgb3V0cik7Ci0KLSAgLyogZGF0YV9lbmQgcG9pbnRzIHRvIHRoZSBsYXN0IHNhbXBsZSB3ZSBoYXZlIHRvIHdyaXRlLCBub3QgcGFzdCBpdC4gVGhpcyBpcwotICAgKiBuZWVkZWQgdG8gcHJvcGVybHkgaGFuZGxlIHJldmVyc2UgcGxheWJhY2s6IGl0IHBvaW50cyB0byB0aGUgbGFzdCBzYW1wbGUuICovCi0gIGRhdGFfZW5kID0gZGF0YSArIChicGYgKiBpbnIpOwotCi0gIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmcHNpbmstPmZvcm1hdF9sb3N0KSkgewotICAgIC8qIFNpbmsgZm9ybWF0IGNoYW5nZWQsIGRyb3AgdGhlIGRhdGEgYW5kIGhvcGUgdXBzdHJlYW0gcmVuZWdvdGlhdGVzICovCi0gICAgZ290byBmYWtlX2RvbmU7Ci0gIH0KLQotICBpZiAocGJ1Zi0+cGF1c2VkKQotICAgIGdvdG8gd2FzX3BhdXNlZDsKLQotICAvKiBvZmZzZXQgaXMgaW4gYnl0ZXMgKi8KLSAgb2Zmc2V0ID0gKnNhbXBsZSAqIGJwZjsKLQotICB3aGlsZSAoKnRvcHJvY2VzcyA+IDApIHsKLSAgICBzaXplX3QgYXZhaWw7Ci0gICAgZ3VpbnQgdG93cml0ZTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChwc2luaywKLSAgICAgICAgIm5lZWQgdG8gd3JpdGUgJWQgc2FtcGxlcyBhdCBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULCAqdG9wcm9jZXNzLAotICAgICAgICBvZmZzZXQpOwotCi0gICAgaWYgKG9mZnNldCAhPSBwYnVmLT5tX2xhc3RvZmZzZXQpCi0gICAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJkaXNjb250aW51aXR5LCBvZmZzZXQgaXMgJSIgR19HSU5UNjRfRk9STUFUICIsICIKLSAgICAgICAgICAibGFzdCBvZmZzZXQgd2FzICUiIEdfR0lOVDY0X0ZPUk1BVCwgb2Zmc2V0LCBwYnVmLT5tX2xhc3RvZmZzZXQpOwotCi0gICAgdG93cml0ZSA9IG91dF9zYW1wbGVzICogYnBmOwotCi0gICAgLyogV2FpdCBmb3IgYXQgbGVhc3Qgc2Vnc2l6ZSBieXRlcyB0byBiZWNvbWUgYXZhaWxhYmxlICovCi0gICAgaWYgKHRvd3JpdGUgPiBidWYtPnNwZWMuc2Vnc2l6ZSkKLSAgICAgIHRvd3JpdGUgPSBidWYtPnNwZWMuc2Vnc2l6ZTsKLQotICAgIGlmICgocGJ1Zi0+bV93cml0YWJsZSA8IHRvd3JpdGUpIHx8IChvZmZzZXQgIT0gcGJ1Zi0+bV9sYXN0b2Zmc2V0KSkgewotICAgICAgLyogaWYgbm8gcm9vbSBsZWZ0IG9yIGRpc2NvbnRpbnVpdHkgaW4gb2Zmc2V0LAotICAgICAgICAgd2UgbmVlZCB0byBmbHVzaCBkYXRhIGFuZCBnZXQgYSBuZXcgYnVmZmVyICovCi0KLSAgICAgIC8qIGZsdXNoIHRoZSBidWZmZXIgaWYgcG9zc2libGUgKi8KLSAgICAgIGlmICgocGJ1Zi0+bV9kYXRhICE9IE5VTEwpICYmIChwYnVmLT5tX3Rvd3JpdGUgPiAwKSkgewotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwc2luaywKLSAgICAgICAgICAgICJmbHVzaGluZyAldSBzYW1wbGVzIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAoZ3VpbnQpIHBidWYtPm1fdG93cml0ZSAvIGJwZiwgcGJ1Zi0+bV9vZmZzZXQpOwotCi0gICAgICAgIGlmIChwYV9zdHJlYW1fd3JpdGUgKHBidWYtPnN0cmVhbSwgKHVpbnQ4X3QgKikgcGJ1Zi0+bV9kYXRhLAotICAgICAgICAgICAgICAgIHBidWYtPm1fdG93cml0ZSwgTlVMTCwgcGJ1Zi0+bV9vZmZzZXQsIFBBX1NFRUtfQUJTT0xVVEUpIDwgMCkgewotICAgICAgICAgIGdvdG8gd3JpdGVfZmFpbGVkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwYnVmLT5tX3Rvd3JpdGUgPSAwOwotICAgICAgcGJ1Zi0+bV9vZmZzZXQgPSBvZmZzZXQ7ICAvKiBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgb2Zmc2V0ICovCi0KLSAgICAgIC8qIGdldCBhIGJ1ZmZlciB0byB3cml0ZSBpbiBmb3Igbm93IG9uICovCi0gICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHBidWYtPm1fd3JpdGFibGUgPSBwYV9zdHJlYW1fd3JpdGFibGVfc2l6ZSAocGJ1Zi0+c3RyZWFtKTsKLQotICAgICAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnBzaW5rLT5mb3JtYXRfbG9zdCkpIHsKLSAgICAgICAgICAvKiBTaW5rIGZvcm1hdCBjaGFuZ2VkLCBnaXZlIHVwIGFuZCBob3BlIHVwc3RyZWFtIHJlbmVnb3RpYXRlcyAqLwotICAgICAgICAgIGdvdG8gZmFrZV9kb25lOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBidWYtPm1fd3JpdGFibGUgPT0gKHNpemVfdCkgLSAxKQotICAgICAgICAgIGdvdG8gd3JpdGFibGVfc2l6ZV9mYWlsZWQ7Ci0KLSAgICAgICAgcGJ1Zi0+bV93cml0YWJsZSAvPSBicGY7Ci0gICAgICAgIHBidWYtPm1fd3JpdGFibGUgKj0gYnBmOyAgICAgICAgLyogaGFuZGxlIG9ubHkgY29tcGxldGUgc2FtcGxlcyAqLwotCi0gICAgICAgIGlmIChwYnVmLT5tX3dyaXRhYmxlID49IHRvd3JpdGUpCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyogc2VlIGlmIHdlIG5lZWQgdG8gdW5jb3JrIGJlY2F1c2Ugd2UgaGF2ZSBubyBmcmVlIHNwYWNlICovCi0gICAgICAgIGlmIChwYnVmLT5jb3JrZWQpIHsKLSAgICAgICAgICBpZiAoIWdzdF9wdWxzZXJpbmdfc2V0X2NvcmtlZCAocGJ1ZiwgRkFMU0UsIEZBTFNFKSkKLSAgICAgICAgICAgIGdvdG8gdW5jb3JrX2ZhaWxlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdlIGNhbid0IHdyaXRlIHNlZ3NpemUgYnl0ZXMsIHdhaXQgYSBiaXQgKi8KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAid2FpdGluZyBmb3IgZnJlZSBzcGFjZSIpOwotICAgICAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0KLSAgICAgICAgaWYgKHBidWYtPnBhdXNlZCkKLSAgICAgICAgICBnb3RvIHdhc19wYXVzZWQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFJlY2FsY3VsYXRlIHdoYXQgd2UgY2FuIHdyaXRlIGluIHRoZSBuZXh0IGNodW5rICovCi0gICAgICB0b3dyaXRlID0gb3V0X3NhbXBsZXMgKiBicGY7Ci0gICAgICBpZiAocGJ1Zi0+bV93cml0YWJsZSA+IHRvd3JpdGUpCi0gICAgICAgIHBidWYtPm1fd3JpdGFibGUgPSB0b3dyaXRlOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJyZXF1ZXN0aW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgb2YgIgotICAgICAgICAgICJzaGFyZWQgbWVtb3J5IiwgcGJ1Zi0+bV93cml0YWJsZSk7Ci0KLSAgICAgIGlmIChwYV9zdHJlYW1fYmVnaW5fd3JpdGUgKHBidWYtPnN0cmVhbSwgJnBidWYtPm1fZGF0YSwKLSAgICAgICAgICAgICAgJnBidWYtPm1fd3JpdGFibGUpIDwgMCkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJwYV9zdHJlYW1fYmVnaW5fd3JpdGUoKSBmYWlsZWQiKTsKLSAgICAgICAgZ290byB3cml0YWJsZV9zaXplX2ZhaWxlZDsKLSAgICAgIH0KLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAiZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgb2Ygc2hhcmVkIG1lbW9yeSIsCi0gICAgICAgICAgcGJ1Zi0+bV93cml0YWJsZSk7Ci0KLSAgICB9Ci0KLSAgICBpZiAodG93cml0ZSA+IHBidWYtPm1fd3JpdGFibGUpCi0gICAgICB0b3dyaXRlID0gcGJ1Zi0+bV93cml0YWJsZTsKLSAgICBhdmFpbCA9IHRvd3JpdGUgLyBicGY7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJ3cml0aW5nICV1IHNhbXBsZXMgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIChndWludCkgYXZhaWwsIG9mZnNldCk7Ci0KLSAgICAvKiBObyB0cmljayBtb2RlcyBmb3IgcGFzc3Rocm91Z2ggc3RyZWFtcyAqLwotICAgIGlmIChHX1VOTElLRUxZICghcGJ1Zi0+aXNfcGNtICYmIChpbnIgIT0gb3V0ciB8fCByZXZlcnNlKSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHNpbmssICJQYXNzdGhyb3VnaCBzdHJlYW0gY2FuJ3QgcnVuIGluIHRyaWNrIG1vZGUiKTsKLSAgICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICAgIH0KLQotICAgIGlmIChHX0xJS0VMWSAoaW5yID09IG91dHIgJiYgIXJldmVyc2UpKSB7Ci0gICAgICAvKiBubyByYXRlIGNvbnZlcnNpb24sIHNpbXBseSB3cml0ZSBvdXQgdGhlIHNhbXBsZXMgKi8KLSAgICAgIC8qIGNvcHkgdGhlIGRhdGEgaW50byBpbnRlcm5hbCBidWZmZXIgKi8KLQotICAgICAgbWVtY3B5ICgoZ3VpbnQ4ICopIHBidWYtPm1fZGF0YSArIHBidWYtPm1fdG93cml0ZSwgZGF0YSwgdG93cml0ZSk7Ci0gICAgICBwYnVmLT5tX3Rvd3JpdGUgKz0gdG93cml0ZTsKLSAgICAgIHBidWYtPm1fd3JpdGFibGUgLT0gdG93cml0ZTsKLQotICAgICAgZGF0YSArPSB0b3dyaXRlOwotICAgICAgaW5fc2FtcGxlcyAtPSBhdmFpbDsKLSAgICAgIG91dF9zYW1wbGVzIC09IGF2YWlsOwotICAgIH0gZWxzZSB7Ci0gICAgICBndWludDggKmRlc3QsICpkLCAqZF9lbmQ7Ci0KLSAgICAgIC8qIHdyaXRlIGludG8gdGhlIFB1bHNlQXVkaW8gc2htIGJ1ZmZlciAqLwotICAgICAgZGVzdCA9IGQgPSAoZ3VpbnQ4ICopIHBidWYtPm1fZGF0YSArIHBidWYtPm1fdG93cml0ZTsKLSAgICAgIGRfZW5kID0gZCArIHRvd3JpdGU7Ci0KLSAgICAgIGlmICghcmV2ZXJzZSkgewotICAgICAgICBpZiAoaW5yID49IG91dHIpCi0gICAgICAgICAgLyogZm9yd2FyZCBzcGVlZCB1cCAqLwotICAgICAgICAgIEZXRF9VUF9TQU1QTEVTIChkYXRhLCBkYXRhX2VuZCwgZCwgZF9lbmQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgLyogZm9yd2FyZCBzbG93IGRvd24gKi8KLSAgICAgICAgICBGV0RfRE9XTl9TQU1QTEVTIChkYXRhLCBkYXRhX2VuZCwgZCwgZF9lbmQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGluciA+PSBvdXRyKQotICAgICAgICAgIC8qIHJldmVyc2Ugc3BlZWQgdXAgKi8KLSAgICAgICAgICBSRVZfVVBfU0FNUExFUyAoZGF0YSwgZGF0YV9lbmQsIGQsIGRfZW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIC8qIHJldmVyc2Ugc2xvdyBkb3duICovCi0gICAgICAgICAgUkVWX0RPV05fU0FNUExFUyAoZGF0YSwgZGF0YV9lbmQsIGQsIGRfZW5kKTsKLSAgICAgIH0KLSAgICAgIC8qIHNlZSB3aGF0IHdlIGhhdmUgbGVmdCB0byB3cml0ZSAqLwotICAgICAgdG93cml0ZSA9IChkIC0gZGVzdCk7Ci0gICAgICBwYnVmLT5tX3Rvd3JpdGUgKz0gdG93cml0ZTsKLSAgICAgIHBidWYtPm1fd3JpdGFibGUgLT0gdG93cml0ZTsKLQotICAgICAgYXZhaWwgPSB0b3dyaXRlIC8gYnBmOwotICAgIH0KLQotICAgIC8qIGZsdXNoIHRoZSBidWZmZXIgaWYgaXQncyBmdWxsICovCi0gICAgaWYgKChwYnVmLT5tX2RhdGEgIT0gTlVMTCkgJiYgKHBidWYtPm1fdG93cml0ZSA+IDApCi0gICAgICAgICYmIChwYnVmLT5tX3dyaXRhYmxlID09IDApKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJmbHVzaGluZyAldSBzYW1wbGVzIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgKGd1aW50KSBwYnVmLT5tX3Rvd3JpdGUgLyBicGYsIHBidWYtPm1fb2Zmc2V0KTsKLQotICAgICAgaWYgKHBhX3N0cmVhbV93cml0ZSAocGJ1Zi0+c3RyZWFtLCAodWludDhfdCAqKSBwYnVmLT5tX2RhdGEsCi0gICAgICAgICAgICAgIHBidWYtPm1fdG93cml0ZSwgTlVMTCwgcGJ1Zi0+bV9vZmZzZXQsIFBBX1NFRUtfQUJTT0xVVEUpIDwgMCkgewotICAgICAgICBnb3RvIHdyaXRlX2ZhaWxlZDsKLSAgICAgIH0KLSAgICAgIHBidWYtPm1fdG93cml0ZSA9IDA7Ci0gICAgICBwYnVmLT5tX29mZnNldCA9IG9mZnNldCArIHRvd3JpdGU7ICAgICAgICAvKiBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgb2Zmc2V0ICovCi0gICAgfQotCi0gICAgKnNhbXBsZSArPSBhdmFpbDsKLSAgICBvZmZzZXQgKz0gYXZhaWwgKiBicGY7Ci0gICAgcGJ1Zi0+bV9sYXN0b2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgLyogY2hlY2sgaWYgd2UgbmVlZCB0byB1bmNvcmsgYWZ0ZXIgd3JpdGluZyB0aGUgc2FtcGxlcyAqLwotICAgIGlmIChwYnVmLT5jb3JrZWQpIHsKLSAgICAgIGNvbnN0IHBhX3RpbWluZ19pbmZvICppbmZvOwotCi0gICAgICBpZiAoKGluZm8gPSBwYV9zdHJlYW1fZ2V0X3RpbWluZ19pbmZvIChwYnVmLT5zdHJlYW0pKSkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssCi0gICAgICAgICAgICAicmVhZF9pbmRleCBhdCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICBpbmZvLT5yZWFkX2luZGV4LCBvZmZzZXQpOwotCi0gICAgICAgIC8qIHdlIHVuY29yayB3aGVuIHRoZSByZWFkX2luZGV4IGlzIHRvbyBmYXIgYmVoaW5kIHRoZSBvZmZzZXQgd2UgbmVlZAotICAgICAgICAgKiB0byB3cml0ZSB0by4gKi8KLSAgICAgICAgaWYgKGluZm8tPnJlYWRfaW5kZXggKyBidWZzaXplIDw9IG9mZnNldCkgewotICAgICAgICAgIGlmICghZ3N0X3B1bHNlcmluZ19zZXRfY29ya2VkIChwYnVmLCBGQUxTRSwgRkFMU0UpKQotICAgICAgICAgICAgZ290byB1bmNvcmtfZmFpbGVkOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJubyB0aW1pbmcgaW5mbyBhdmFpbGFibGUgeWV0Iik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLWZha2VfZG9uZToKLSAgLyogd2UgY29uc3VtZWQgYWxsIHNhbXBsZXMgaGVyZSAqLwotICBkYXRhID0gZGF0YV9lbmQgKyBicGY7Ci0KLSAgcGJ1Zi0+aW5fY29tbWl0ID0gRkFMU0U7Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotCi1kb25lOgotICByZXN1bHQgPSBpbnIgLSAoKGRhdGFfZW5kIC0gZGF0YSkgLyBicGYpOwotICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJ3cm90ZSAlZCBzYW1wbGVzIiwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotdW5sb2NrX2FuZF9mYWlsOgotICB7Ci0gICAgcGJ1Zi0+aW5fY29tbWl0ID0gRkFMU0U7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAid2UgYXJlIHJlc2V0Iik7Ci0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0gICAgZ290byBkb25lOwotICB9Ci1ub19zdGFydDoKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChwc2luaywgIndlIGNhbiBub3Qgc3RhcnQiKTsKLSAgICByZXR1cm4gMDsKLSAgfQotc3RhcnRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBzaW5rLCAiZmFpbGVkIHRvIHN0YXJ0IHRoZSByaW5nYnVmZmVyIik7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLXVuY29ya19mYWlsZWQ6Ci0gIHsKLSAgICBwYnVmLT5pbl9jb21taXQgPSBGQUxTRTsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwc2luaywgInVuY29yayBmYWlsZWQiKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXdhc19wYXVzZWQ6Ci0gIHsKLSAgICBwYnVmLT5pbl9jb21taXQgPSBGQUxTRTsKLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJ3ZSBhcmUgcGF1c2VkIik7Ci0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0gICAgZ290byBkb25lOwotICB9Ci13cml0YWJsZV9zaXplX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fd3JpdGFibGVfc2l6ZSgpIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHBidWYtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gIH0KLXdyaXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fd3JpdGUoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci19Ci0KLS8qIHdyaXRlIHBlbmRpbmcgbG9jYWwgc2FtcGxlcywgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbWFpbmxvb3AgbG9jayAqLwotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXJpbmdfZmx1c2ggKEdzdFB1bHNlUmluZ0J1ZmZlciAqIHBidWYpCi17Ci0gIEdzdFB1bHNlU2luayAqcHNpbms7Ci0KLSAgcHNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKEdTVF9PQkpFQ1RfUEFSRU5UIChwYnVmKSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAiZW50ZXJpbmcgZmx1c2giKTsKLQotICAvKiBmbHVzaCB0aGUgYnVmZmVyIGlmIHBvc3NpYmxlICovCi0gIGlmIChwYnVmLT5zdHJlYW0gJiYgKHBidWYtPm1fZGF0YSAhPSBOVUxMKSAmJiAocGJ1Zi0+bV90b3dyaXRlID4gMCkpIHsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgZ2ludCBicGY7Ci0KLSAgICBicGYgPSAoR1NUX0FVRElPX1JJTkdfQlVGRkVSX0NBU1QgKHBidWYpKS0+c3BlYy5pbmZvLmJwZjsKLSAgICBHU1RfTE9HX09CSkVDVCAocHNpbmssCi0gICAgICAgICJmbHVzaGluZyAldSBzYW1wbGVzIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgIChndWludCkgcGJ1Zi0+bV90b3dyaXRlIC8gYnBmLCBwYnVmLT5tX29mZnNldCk7Ci0jZW5kaWYKLQotICAgIGlmIChwYV9zdHJlYW1fd3JpdGUgKHBidWYtPnN0cmVhbSwgKHVpbnQ4X3QgKikgcGJ1Zi0+bV9kYXRhLAotICAgICAgICAgICAgcGJ1Zi0+bV90b3dyaXRlLCBOVUxMLCBwYnVmLT5tX29mZnNldCwgUEFfU0VFS19BQlNPTFVURSkgPCAwKSB7Ci0gICAgICBnb3RvIHdyaXRlX2ZhaWxlZDsKLSAgICB9Ci0KLSAgICBwYnVmLT5tX3Rvd3JpdGUgPSAwOwotICAgIHBidWYtPm1fb2Zmc2V0ICs9IHBidWYtPm1fdG93cml0ZTsgIC8qIGtlZXAgdHJhY2sgb2YgY3VycmVudCBvZmZzZXQgKi8KLSAgfQotCi1kb25lOgotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi13cml0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfc3RyZWFtX3dyaXRlKCkgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocGJ1Zi0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgZ3N0X3B1bHNlc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcHVsc2VzaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9wdWxzZXNpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlc2lua19ldmVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHVsc2VzaW5rX3F1ZXJ5IChHc3RCYXNlU2luayAqIHNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3B1bHNlc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcGFkX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChQVUxTRV9TSU5LX1RFTVBMQVRFX0NBUFMpKTsKLQotI2RlZmluZSBnc3RfcHVsc2VzaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RQdWxzZVNpbmssIGdzdF9wdWxzZXNpbmssIEdTVF9UWVBFX0FVRElPX0JBU0VfU0lOSywKLSAgICBnc3RfcHVsc2VzaW5rX2luaXRfY29udGV4dHMgKCk7Ci0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9TVFJFQU1fVk9MVU1FLCBOVUxMKQotICAgICk7Ci0KLXN0YXRpYyBHc3RBdWRpb1JpbmdCdWZmZXIgKgotZ3N0X3B1bHNlc2lua19jcmVhdGVfcmluZ2J1ZmZlciAoR3N0QXVkaW9CYXNlU2luayAqIHNpbmspCi17Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciAqYnVmZmVyOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjcmVhdGluZyByaW5nYnVmZmVyIik7Ci0gIGJ1ZmZlciA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfUFVMU0VSSU5HX0JVRkZFUiwgTlVMTCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjcmVhdGVkIHJpbmdidWZmZXIgQCVwIiwgYnVmZmVyKTsKLQotICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9wdWxzZXNpbmtfcGF5bG9hZCAoR3N0QXVkaW9CYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgc3dpdGNoIChzaW5rLT5yaW5nYnVmZmVyLT5zcGVjLnR5cGUpIHsKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9BQzM6Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfRUFDMzoKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9EVFM6Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVBFRzoKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9NUEVHMl9BQUM6Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVBFRzRfQUFDOgotICAgIHsKLSAgICAgIC8qIEZJWE1FOiBhbGxvYyBtZW1vcnkgZnJvbSBQQSBpZiBwb3NzaWJsZSAqLwotICAgICAgZ2ludCBmcmFtZXNpemUgPSBnc3RfYXVkaW9faWVjNjE5MzdfZnJhbWVfc2l6ZSAoJnNpbmstPnJpbmdidWZmZXItPnNwZWMpOwotICAgICAgR3N0QnVmZmVyICpvdXQ7Ci0gICAgICBHc3RNYXBJbmZvIGlubWFwLCBvdXRtYXA7Ci0gICAgICBnYm9vbGVhbiByZXM7Ci0KLSAgICAgIGlmIChmcmFtZXNpemUgPD0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgIG91dCA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoZnJhbWVzaXplKTsKLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmlubWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKG91dCwgJm91dG1hcCwgR1NUX01BUF9XUklURSk7Ci0KLSAgICAgIHJlcyA9IGdzdF9hdWRpb19pZWM2MTkzN19wYXlsb2FkIChpbm1hcC5kYXRhLCBpbm1hcC5zaXplLAotICAgICAgICAgIG91dG1hcC5kYXRhLCBvdXRtYXAuc2l6ZSwgJnNpbmstPnJpbmdidWZmZXItPnNwZWMsIEdfQklHX0VORElBTik7Ci0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmlubWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dCwgJm91dG1hcCk7Ci0KLSAgICAgIGlmICghcmVzKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotCi0gICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAob3V0LCBidWYsIEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSwgMCwgLTEpOwotICAgICAgcmV0dXJuIG91dDsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGdzdF9idWZmZXJfcmVmIChidWYpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzaW5rX2NsYXNzX2luaXQgKEdzdFB1bHNlU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmdzdGJhc2VzaW5rX2NsYXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyAoa2xhc3MpOwotICBHc3RCYXNlU2lua0NsYXNzICpiYzsKLSAgR3N0QXVkaW9CYXNlU2lua0NsYXNzICpnc3RhdWRpb3NpbmtfY2xhc3MgPSBHU1RfQVVESU9fQkFTRV9TSU5LX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIGdjaGFyICpjbGllbnRuYW1lOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3B1bHNlc2lua19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3B1bHNlc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9wdWxzZXNpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIGdzdGJhc2VzaW5rX2NsYXNzLT5ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzaW5rX2V2ZW50KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXNpbmtfcXVlcnkpOwotCi0gIC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJhc2VzaW5rIHB1bGwgbWV0aG9kcyAqLwotICBiYyA9IGdfdHlwZV9jbGFzc19wZWVrIChHU1RfVFlQRV9CQVNFX1NJTkspOwotICBnc3RiYXNlc2lua19jbGFzcy0+YWN0aXZhdGVfcHVsbCA9IEdTVF9ERUJVR19GVU5DUFRSIChiYy0+YWN0aXZhdGVfcHVsbCk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzaW5rX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5jcmVhdGVfcmluZ2J1ZmZlciA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlc2lua19jcmVhdGVfcmluZ2J1ZmZlcik7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+cGF5bG9hZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzaW5rX3BheWxvYWQpOwotCi0gIC8qIE92ZXJ3cml0ZSBHT2JqZWN0IGZpZWxkcyAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9TRVJWRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic2VydmVyIiwgIlNlcnZlciIsCi0gICAgICAgICAgIlRoZSBQdWxzZUF1ZGlvIHNlcnZlciB0byBjb25uZWN0IHRvIiwgREVGQVVMVF9TRVJWRVIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERVZJQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlIiwgIkRldmljZSIsCi0gICAgICAgICAgIlRoZSBQdWxzZUF1ZGlvIHNpbmsgZGV2aWNlIHRvIGNvbm5lY3QgdG8iLCBERUZBVUxUX0RFVklDRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NVUlJFTlRfREVWSUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImN1cnJlbnQtZGV2aWNlIiwgIkN1cnJlbnQgRGV2aWNlIiwKLSAgICAgICAgICAiVGhlIGN1cnJlbnQgUHVsc2VBdWRpbyBzaW5rIGRldmljZSIsIERFRkFVTFRfQ1VSUkVOVF9ERVZJQ0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9ERVZJQ0VfTkFNRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJkZXZpY2UtbmFtZSIsICJEZXZpY2UgbmFtZSIsCi0gICAgICAgICAgIkh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhlIHNvdW5kIGRldmljZSIsIERFRkFVTFRfREVWSUNFX05BTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9WT0xVTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgidm9sdW1lIiwgIlZvbHVtZSIsCi0gICAgICAgICAgIkxpbmVhciB2b2x1bWUgb2YgdGhpcyBzdHJlYW0sIDEuMD0xMDAlIiwgMC4wLCBNQVhfVk9MVU1FLAotICAgICAgICAgIERFRkFVTFRfVk9MVU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfTVVURSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibXV0ZSIsICJNdXRlIiwKLSAgICAgICAgICAiTXV0ZSBzdGF0ZSBvZiB0aGlzIHN0cmVhbSIsIERFRkFVTFRfTVVURSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UHVsc2VTaW5rOmNsaWVudC1uYW1lOgotICAgKgotICAgKiBUaGUgUHVsc2VBdWRpbyBjbGllbnQgbmFtZSB0byB1c2UuCi0gICAqLwotICBjbGllbnRuYW1lID0gZ3N0X3B1bHNlX2NsaWVudF9uYW1lICgpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9DTElFTlRfTkFNRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjbGllbnQtbmFtZSIsICJDbGllbnQgTmFtZSIsCi0gICAgICAgICAgIlRoZSBQdWxzZUF1ZGlvIGNsaWVudCBuYW1lIHRvIHVzZSIsIGNsaWVudG5hbWUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwKLSAgICAgICAgICBHU1RfUEFSQU1fTVVUQUJMRV9SRUFEWSkpOwotICBnX2ZyZWUgKGNsaWVudG5hbWUpOwotCi0gIC8qKgotICAgKiBHc3RQdWxzZVNpbms6c3RyZWFtLXByb3BlcnRpZXM6Ci0gICAqCi0gICAqIExpc3Qgb2YgcHVsc2VhdWRpbyBzdHJlYW0gcHJvcGVydGllcy4gQSBsaXN0IG9mIGRlZmluZWQgcHJvcGVydGllcyBjYW4gYmUKLSAgICogZm91bmQgaW4gdGhlIDx1bGluayB1cmw9Imh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL3B1bHNlYXVkaW8vZG94eWdlbi9wcm9wbGlzdF84aC5odG1sIj5wdWxzZWF1ZGlvIGFwaSBkb2NzPC91bGluaz4uCi0gICAqCi0gICAqIEJlbG93IGlzIGFuIGV4YW1wbGUgZm9yIHJlZ2lzdGVyaW5nIGFzIGEgbXVzaWMgYXBwbGljYXRpb24gdG8gcHVsc2VhdWRpby4KLSAgICogfFsKLSAgICogR3N0U3RydWN0dXJlICpwcm9wczsKLSAgICoKLSAgICogcHJvcHMgPSBnc3Rfc3RydWN0dXJlX2Zyb21fc3RyaW5nICgicHJvcHMsbWVkaWEucm9sZT1tdXNpYyIsIE5VTEwpOwotICAgKiBnX29iamVjdF9zZXQgKHB1bHNlLCAic3RyZWFtLXByb3BlcnRpZXMiLCBwcm9wcywgTlVMTCk7Ci0gICAqIGdzdF9zdHJ1Y3R1cmVfZnJlZQotICAgKiBdfAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfU1RSRUFNX1BST1BFUlRJRVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJzdHJlYW0tcHJvcGVydGllcyIsICJzdHJlYW0gcHJvcGVydGllcyIsCi0gICAgICAgICAgImxpc3Qgb2YgcHVsc2VhdWRpbyBzdHJlYW0gcHJvcGVydGllcyIsCi0gICAgICAgICAgR1NUX1RZUEVfU1RSVUNUVVJFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlB1bHNlQXVkaW8gQXVkaW8gU2luayIsCi0gICAgICAiU2luay9BdWRpbyIsICJQbGF5cyBhdWRpbyB0byBhIFB1bHNlQXVkaW8gc2VydmVyIiwgIkxlbm5hcnQgUG9ldHRlcmluZyIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnBhZF90ZW1wbGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2RldmljZV9pbmZvIChHc3RQdWxzZURldmljZUluZm8gKiBkZXZpY2VfaW5mbykKLXsKLSAgR0xpc3QgKmw7Ci0KLSAgZ19mcmVlIChkZXZpY2VfaW5mby0+ZGVzY3JpcHRpb24pOwotCi0gIGZvciAobCA9IGdfbGlzdF9maXJzdCAoZGV2aWNlX2luZm8tPmZvcm1hdHMpOyBsOyBsID0gZ19saXN0X25leHQgKGwpKQotICAgIHBhX2Zvcm1hdF9pbmZvX2ZyZWUgKChwYV9mb3JtYXRfaW5mbyAqKSBsLT5kYXRhKTsKLQotICBnX2xpc3RfZnJlZSAoZGV2aWNlX2luZm8tPmZvcm1hdHMpOwotfQotCi0vKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIHNpbmsgcmluZ2J1ZmZlci4gVGhlIHRpbWluZ19pbmZvIGlzIHVwZGF0ZWQKLSAqIG9uIGV2ZXJ5IGRhdGEgd3JpdGUvZmx1c2ggYW5kIGV2ZXJ5IDEwMG1zIChQQV9TVFJFQU1fQVVUT19USU1JTkdfVVBEQVRFKS4KLSAqLwotc3RhdGljIEdzdENsb2NrVGltZQotZ3N0X3B1bHNlc2lua19nZXRfdGltZSAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0QXVkaW9CYXNlU2luayAqIHNpbmspCi17Ci0gIEdzdFB1bHNlU2luayAqcHNpbms7Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLSAgcGFfdXNlY190IHRpbWU7Ci0KLSAgaWYgKCFzaW5rLT5yaW5nYnVmZmVyIHx8ICFzaW5rLT5yaW5nYnVmZmVyLT5hY3F1aXJlZCkKLSAgICByZXR1cm4gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoc2luay0+cmluZ2J1ZmZlcik7Ci0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChHU1RfT0JKRUNUX1BBUkVOVCAocGJ1ZikpOwotCi0gIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmcHNpbmstPmZvcm1hdF9sb3N0KSkgewotICAgIC8qIFN0cmVhbSB3YXMgbG9zdCBpbiBhIGZvcm1hdCBjaGFuZ2UsIGl0J2xsIGdldCBzZXQgdXAgYWdhaW4gb25jZQotICAgICAqIHVwc3RyZWFtIHJlbmVnb3RpYXRlcyAqLwotICAgIHJldHVybiBwc2luay0+Zm9ybWF0X2xvc3RfdGltZTsKLSAgfQotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLSAgaWYgKGdzdF9wdWxzZXJpbmdfaXNfZGVhZCAocHNpbmssIHBidWYsIFRSVUUpKQotICAgIGdvdG8gc2VydmVyX2RlYWQ7Ci0KLSAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSB0byBnZXQgYSB0aW1lc3RhbXAsIGp1c3QgcmV0dXJuIE5PTkUsIHdoaWNoCi0gICAqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IHJlcG9ydGVkIHRpbWUgKi8KLSAgaWYgKHBhX3N0cmVhbV9nZXRfdGltZSAocGJ1Zi0+c3RyZWFtLCAmdGltZSkgPCAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJjb3VsZCBub3QgZ2V0IHRpbWUiKTsKLSAgICB0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfSBlbHNlCi0gICAgdGltZSAqPSAxMDAwOwotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLQotICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJjdXJyZW50IHRpbWUgaXMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotCi0gIHJldHVybiB0aW1lOwotCi0gIC8qIEVSUk9SUyAqLwotc2VydmVyX2RlYWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInRoZSBzZXJ2ZXIgaXMgZGVhZCIpOwotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotCi0gICAgcmV0dXJuIEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfc2lua19pbmZvX2NiIChwYV9jb250ZXh0ICogYywgY29uc3QgcGFfc2lua19pbmZvICogaSwgaW50IGVvbCwKLSAgICB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VEZXZpY2VJbmZvICpkZXZpY2VfaW5mbyA9IChHc3RQdWxzZURldmljZUluZm8gKikgdXNlcmRhdGE7Ci0gIGd1aW50OCBqOwotCi0gIGlmICghaSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgZGV2aWNlX2luZm8tPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAgKGktPmRlc2NyaXB0aW9uKTsKLQotICBkZXZpY2VfaW5mby0+Zm9ybWF0cyA9IE5VTEw7Ci0gIGZvciAoaiA9IDA7IGogPCBpLT5uX2Zvcm1hdHM7IGorKykKLSAgICBkZXZpY2VfaW5mby0+Zm9ybWF0cyA9IGdfbGlzdF9wcmVwZW5kIChkZXZpY2VfaW5mby0+Zm9ybWF0cywKLSAgICAgICAgcGFfZm9ybWF0X2luZm9fY29weSAoaS0+Zm9ybWF0c1tqXSkpOwotCi1kb25lOgotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKG1haW5sb29wLCAwKTsKLX0KLQotLyogQ2FsbCB3aXRoIG1haW5sb29wIGxvY2sgaGVsZCAqLwotc3RhdGljIHBhX3N0cmVhbSAqCi1nc3RfcHVsc2VzaW5rX2NyZWF0ZV9wcm9iZV9zdHJlYW0gKEdzdFB1bHNlU2luayAqIHBzaW5rLAotICAgIEdzdFB1bHNlUmluZ0J1ZmZlciAqIHBidWYsIHBhX2Zvcm1hdF9pbmZvICogZm9ybWF0KQotewotICBwYV9mb3JtYXRfaW5mbyAqZm9ybWF0c1sxXSA9IHsgZm9ybWF0IH07Ci0gIHBhX3N0cmVhbSAqc3RyZWFtOwotICBwYV9zdHJlYW1fZmxhZ3NfdCBmbGFnczsKLQotICBHU1RfTE9HX09CSkVDVCAocHNpbmssICJDcmVhdGluZyBwcm9iZSBzdHJlYW0iKTsKLQotICBpZiAoIShzdHJlYW0gPSBwYV9zdHJlYW1fbmV3X2V4dGVuZGVkIChwYnVmLT5jb250ZXh0LCAicHVsc2VzaW5rIHByb2JlIiwKLSAgICAgICAgICAgICAgZm9ybWF0cywgMSwgcHNpbmstPnByb3BsaXN0KSkpCi0gICAgZ290byBlcnJvcjsKLQotICAvKiBjb25zdHJ1Y3QgdGhlIGZsYWdzICovCi0gIGZsYWdzID0gUEFfU1RSRUFNX0lOVEVSUE9MQVRFX1RJTUlORyB8IFBBX1NUUkVBTV9BVVRPX1RJTUlOR19VUERBVEUgfAotICAgICAgUEFfU1RSRUFNX0FESlVTVF9MQVRFTkNZIHwgUEFfU1RSRUFNX1NUQVJUX0NPUktFRDsKLQotICBwYV9zdHJlYW1fc2V0X3N0YXRlX2NhbGxiYWNrIChzdHJlYW0sIGdzdF9wdWxzZXJpbmdfc3RyZWFtX3N0YXRlX2NiLCBwYnVmKTsKLQotICBpZiAocGFfc3RyZWFtX2Nvbm5lY3RfcGxheWJhY2sgKHN0cmVhbSwgcHNpbmstPmRldmljZSwgTlVMTCwgZmxhZ3MsIE5VTEwsCi0gICAgICAgICAgTlVMTCkgPCAwKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKCFnc3RfcHVsc2VyaW5nX3dhaXRfZm9yX3N0cmVhbV9yZWFkeSAocHNpbmssIHN0cmVhbSkpCi0gICAgZ290byBlcnJvcjsKLQotICByZXR1cm4gc3RyZWFtOwotCi1lcnJvcjoKLSAgaWYgKHN0cmVhbSkKLSAgICBwYV9zdHJlYW1fdW5yZWYgKHN0cmVhbSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcHVsc2VzaW5rX3F1ZXJ5X2dldGNhcHMgKEdzdFB1bHNlU2luayAqIHBzaW5rLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWYgPSBOVUxMOwotICBHc3RQdWxzZURldmljZUluZm8gZGV2aWNlX2luZm8gPSB7IE5VTEwsIE5VTEwgfTsKLSAgR3N0Q2FwcyAqcmV0ID0gTlVMTDsKLSAgR0xpc3QgKmk7Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIHBhX3N0cmVhbSAqc3RyZWFtOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocHNpbmspOwotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoR1NUX0FVRElPX0JBU0VfU0lOSyAocHNpbmspLT5yaW5nYnVmZmVyKTsKLSAgaWYgKHBidWYgIT0gTlVMTCkKLSAgICBnc3Rfb2JqZWN0X3JlZiAocGJ1Zik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwc2luayk7Ci0KLSAgaWYgKCFwYnVmKSB7Ci0gICAgcmV0ID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9BVURJT19CQVNFX1NJTktfUEFEIChwc2luaykpOwotICAgIGdvdG8gb3V0OwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYnVmKTsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAobWFpbmxvb3ApOwotCi0gIGlmICghcGJ1Zi0+Y29udGV4dCkgewotICAgIHJldCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfQVVESU9fQkFTRV9TSU5LX1BBRCAocHNpbmspKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotCi0gIHJldCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICBpZiAocGJ1Zi0+c3RyZWFtKSB7Ci0gICAgLyogV2UncmUgaW4gUEFVU0VEIG9yIGhpZ2hlciAqLwotICAgIHN0cmVhbSA9IHBidWYtPnN0cmVhbTsKLQotICB9IGVsc2UgaWYgKHBidWYtPnByb2JlX3N0cmVhbSkgewotICAgIC8qIFdlJ3JlIG5vdCBwYXVzZWQsIGJ1dCBoYXZlIGEgY2FjaGVkIHByb2JlIHN0cmVhbSAqLwotICAgIHN0cmVhbSA9IHBidWYtPnByb2JlX3N0cmVhbTsKLQotICB9IGVsc2UgewotICAgIC8qIFdlJ3JlIG5vdCB5ZXQgaW4gUEFVU0VEIGFuZCBzdGlsbCBuZWVkIHRvIGNyZWF0ZSBhIHByb2JlIHN0cmVhbS4KLSAgICAgKgotICAgICAqIEZJWE1FOiBQQSBkb2Vzbid0IGFjY2VwdCAiYW55IiBmb3JtYXQuIFdlIGZpeCBzb21ldGhpbmcgcmVhc29uYWJsZSBzaW5jZQotICAgICAqIHRoaXMgaXMgbWVyZWx5IGEgcHJvYmUuIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgZml4ZWQgaW4gUEEgYW5kCi0gICAgICogaGFyZC1jb2RpbmcgdGhlIGZvcm1hdCBzaG91bGQgYmUgZHJvcHBlZC4gKi8KLSAgICBwYV9mb3JtYXRfaW5mbyAqZm9ybWF0ID0gcGFfZm9ybWF0X2luZm9fbmV3ICgpOwotICAgIGZvcm1hdC0+ZW5jb2RpbmcgPSBQQV9FTkNPRElOR19QQ007Ci0gICAgcGFfZm9ybWF0X2luZm9fc2V0X3NhbXBsZV9mb3JtYXQgKGZvcm1hdCwgUEFfU0FNUExFX1MxNkxFKTsKLSAgICBwYV9mb3JtYXRfaW5mb19zZXRfcmF0ZSAoZm9ybWF0LCBHU1RfQVVESU9fREVGX1JBVEUpOwotICAgIHBhX2Zvcm1hdF9pbmZvX3NldF9jaGFubmVscyAoZm9ybWF0LCBHU1RfQVVESU9fREVGX0NIQU5ORUxTKTsKLQotICAgIHBidWYtPnByb2JlX3N0cmVhbSA9IGdzdF9wdWxzZXNpbmtfY3JlYXRlX3Byb2JlX3N0cmVhbSAocHNpbmssIHBidWYsCi0gICAgICAgIGZvcm1hdCk7Ci0KLSAgICBwYV9mb3JtYXRfaW5mb19mcmVlIChmb3JtYXQpOwotCi0gICAgaWYgKCFwYnVmLT5wcm9iZV9zdHJlYW0pIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHNpbmssICJDb3VsZCBub3QgY3JlYXRlIHByb2JlIHN0cmVhbSIpOwotICAgICAgZ290byB1bmxvY2s7Ci0gICAgfQotCi0gICAgc3RyZWFtID0gcGJ1Zi0+cHJvYmVfc3RyZWFtOwotICB9Ci0KLSAgaWYgKCEobyA9IHBhX2NvbnRleHRfZ2V0X3NpbmtfaW5mb19ieV9uYW1lIChwYnVmLT5jb250ZXh0LAotICAgICAgICAgICAgICBwYV9zdHJlYW1fZ2V0X2RldmljZV9uYW1lIChzdHJlYW0pLCBnc3RfcHVsc2VzaW5rX3NpbmtfaW5mb19jYiwKLSAgICAgICAgICAgICAgJmRldmljZV9pbmZvKSkpCi0gICAgZ290byBpbmZvX2ZhaWxlZDsKLQotICB3aGlsZSAocGFfb3BlcmF0aW9uX2dldF9zdGF0ZSAobykgPT0gUEFfT1BFUkFUSU9OX1JVTk5JTkcpIHsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0gICAgaWYgKGdzdF9wdWxzZXJpbmdfaXNfZGVhZCAocHNpbmssIHBidWYsIEZBTFNFKSkKLSAgICAgIGdvdG8gdW5sb2NrOwotICB9Ci0KLSAgZm9yIChpID0gZ19saXN0X2ZpcnN0IChkZXZpY2VfaW5mby5mb3JtYXRzKTsgaTsgaSA9IGdfbGlzdF9uZXh0IChpKSkgewotICAgIGdzdF9jYXBzX2FwcGVuZCAocmV0LAotICAgICAgICBnc3RfcHVsc2VfZm9ybWF0X2luZm9fdG9fY2FwcyAoKHBhX2Zvcm1hdF9pbmZvICopIGktPmRhdGEpKTsKLSAgfQotCi11bmxvY2s6Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotICAvKiBGSVhNRTogdGhpcyBjb3VsZCBiZSBmcmVlZCBhZnRlciBkZXZpY2VfbmFtZSBpcyBnb3QgKi8KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBidWYpOwotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0bXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsCi0gICAgICAgIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gdG1wOwotICB9Ci0KLW91dDoKLSAgZnJlZV9kZXZpY2VfaW5mbyAoJmRldmljZV9pbmZvKTsKLQotICBpZiAobykKLSAgICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIGlmIChwYnVmKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBidWYpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAiY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLQotICByZXR1cm4gcmV0OwotCi1pbmZvX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9jb250ZXh0X2dldF9zaW5rX2lucHV0X2luZm8oKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlc2lua19xdWVyeV9hY2NlcHRjYXBzIChHc3RQdWxzZVNpbmsgKiBwc2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZiA9IE5VTEw7Ci0gIEdzdFB1bHNlRGV2aWNlSW5mbyBkZXZpY2VfaW5mbyA9IHsgTlVMTCwgTlVMTCB9OwotICBHc3RDYXBzICpwYWRfY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyBzcGVjID0geyAwIH07Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIHBhX2NoYW5uZWxfbWFwIGNoYW5uZWxfbWFwOwotICBwYV9mb3JtYXRfaW5mbyAqZm9ybWF0ID0gTlVMTDsKLSAgZ3VpbnQgY2hhbm5lbHM7Ci0KLSAgcGFkX2NhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX0JBU0VfU0lOS19QQUQgKHBzaW5rKSk7Ci0gIHJldCA9IGdzdF9jYXBzX2lzX3N1YnNldCAoY2FwcywgcGFkX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAocGFkX2NhcHMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAiY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgLyogVGVtcGxhdGUgY2FwcyBkaWRuJ3QgbWF0Y2ggKi8KLSAgaWYgKCFyZXQpCi0gICAgZ290byBkb25lOwotCi0gIC8qIElmIHdlJ3ZlIG5vdCBnb3QgZml4ZWQgY2FwcywgY3JlYXRpbmcgYSBzdHJlYW0gbWlnaHQgZmFpbCwgc28gbGV0J3MganVzdAotICAgKiByZXR1cm4gZnJvbSBoZXJlIHdpdGggZGVmYXVsdCBhY2NlcHRjYXBzIGJlaGF2aW91ciAqLwotICBpZiAoIWdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwc2luayk7Ci0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUIChHU1RfQVVESU9fQkFTRV9TSU5LIChwc2luayktPnJpbmdidWZmZXIpOwotICBpZiAocGJ1ZiAhPSBOVUxMKQotICAgIGdzdF9vYmplY3RfcmVmIChwYnVmKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBzaW5rKTsKLQotICAvKiBXZSdyZSBzdGlsbCBpbiBOVUxMIHN0YXRlICovCi0gIGlmIChwYnVmID09IE5VTEwpCi0gICAgZ290byBkb25lOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGJ1Zik7Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLQotICBpZiAocGJ1Zi0+Y29udGV4dCA9PSBOVUxMKQotICAgIGdvdG8gb3V0OwotCi0gIHJldCA9IEZBTFNFOwotCi0gIHNwZWMubGF0ZW5jeV90aW1lID0gR1NUX0FVRElPX0JBU0VfU0lOSyAocHNpbmspLT5sYXRlbmN5X3RpbWU7Ci0gIGlmICghZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3BhcnNlX2NhcHMgKCZzcGVjLCBjYXBzKSkKLSAgICBnb3RvIG91dDsKLQotICBpZiAoIWdzdF9wdWxzZV9maWxsX2Zvcm1hdF9pbmZvICgmc3BlYywgJmZvcm1hdCwgJmNoYW5uZWxzKSkKLSAgICBnb3RvIG91dDsKLQotICAvKiBNYWtlIHN1cmUgaW5wdXQgaXMgZnJhbWVkIChvbmUgZnJhbWUgcGVyIGJ1ZmZlcikgYW5kIGNhbiBiZSBwYXlsb2FkZWQgKi8KLSAgaWYgKCFwYV9mb3JtYXRfaW5mb19pc19wY20gKGZvcm1hdCkpIHsKLSAgICBnYm9vbGVhbiBmcmFtZWQgPSBGQUxTRSwgcGFyc2VkID0gRkFMU0U7Ci0gICAgc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKHN0LCAiZnJhbWVkIiwgJmZyYW1lZCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbiAoc3QsICJwYXJzZWQiLCAmcGFyc2VkKTsKLSAgICBpZiAoKCFmcmFtZWQgJiYgIXBhcnNlZCkgfHwgZ3N0X2F1ZGlvX2llYzYxOTM3X2ZyYW1lX3NpemUgKCZzcGVjKSA8PSAwKQotICAgICAgZ290byBvdXQ7Ci0gIH0KLQotICAvKiBpbml0aWFsaXplIHRoZSBjaGFubmVsIG1hcCAqLwotICBpZiAocGFfZm9ybWF0X2luZm9faXNfcGNtIChmb3JtYXQpICYmCi0gICAgICBnc3RfcHVsc2VfZ3N0X3RvX2NoYW5uZWxfbWFwICgmY2hhbm5lbF9tYXAsICZzcGVjKSkKLSAgICBwYV9mb3JtYXRfaW5mb19zZXRfY2hhbm5lbF9tYXAgKGZvcm1hdCwgJmNoYW5uZWxfbWFwKTsKLQotICBpZiAocGJ1Zi0+c3RyZWFtIHx8IHBidWYtPnByb2JlX3N0cmVhbSkgewotICAgIC8qIFdlJ3JlIGFscmVhZHkgaW4gUEFVU0VEIG9yIGFib3ZlLCBzbyBqdXN0IHJldXNlIHRoaXMgc3RyZWFtIHRvIHF1ZXJ5Ci0gICAgICogc2luayBmb3JtYXRzIGFuZCB1c2UgdGhvc2UuICovCi0gICAgR0xpc3QgKmk7Ci0gICAgY29uc3QgY2hhciAqZGV2aWNlX25hbWUgPSBwYV9zdHJlYW1fZ2V0X2RldmljZV9uYW1lIChwYnVmLT5zdHJlYW0gPwotICAgICAgICBwYnVmLT5zdHJlYW0gOiBwYnVmLT5wcm9iZV9zdHJlYW0pOwotCi0gICAgaWYgKCEobyA9IHBhX2NvbnRleHRfZ2V0X3NpbmtfaW5mb19ieV9uYW1lIChwYnVmLT5jb250ZXh0LCBkZXZpY2VfbmFtZSwKLSAgICAgICAgICAgICAgICBnc3RfcHVsc2VzaW5rX3NpbmtfaW5mb19jYiwgJmRldmljZV9pbmZvKSkpCi0gICAgICBnb3RvIGluZm9fZmFpbGVkOwotCi0gICAgd2hpbGUgKHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKG8pID09IFBBX09QRVJBVElPTl9SVU5OSU5HKSB7Ci0gICAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0gICAgICBpZiAoZ3N0X3B1bHNlcmluZ19pc19kZWFkIChwc2luaywgcGJ1ZiwgRkFMU0UpKQotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSBnX2xpc3RfZmlyc3QgKGRldmljZV9pbmZvLmZvcm1hdHMpOyBpOyBpID0gZ19saXN0X25leHQgKGkpKSB7Ci0gICAgICBpZiAocGFfZm9ybWF0X2luZm9faXNfY29tcGF0aWJsZSAoKHBhX2Zvcm1hdF9pbmZvICopIGktPmRhdGEsIGZvcm1hdCkpIHsKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIFdlJ3JlIGluIFJFQURZLCBsZXQncyBjb25uZWN0IGEgc3RyZWFtIHRvIHNlZSBpZiB0aGUgZm9ybWF0IGlzCi0gICAgICogYWNjZXB0ZWQgYnkgd2hhdGV2ZXIgc2luayB3ZSdyZSByb3V0ZWQgdG8gKi8KLSAgICBwYnVmLT5wcm9iZV9zdHJlYW0gPSBnc3RfcHVsc2VzaW5rX2NyZWF0ZV9wcm9iZV9zdHJlYW0gKHBzaW5rLCBwYnVmLAotICAgICAgICBmb3JtYXQpOwotICAgIGlmIChwYnVmLT5wcm9iZV9zdHJlYW0pCi0gICAgICByZXQgPSBUUlVFOwotICB9Ci0KLW91dDoKLSAgaWYgKGZvcm1hdCkKLSAgICBwYV9mb3JtYXRfaW5mb19mcmVlIChmb3JtYXQpOwotCi0gIGZyZWVfZGV2aWNlX2luZm8gKCZkZXZpY2VfaW5mbyk7Ci0KLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBidWYpOwotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzcGVjLmNhcHMsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYnVmKTsKLQotZG9uZToKLQotICByZXR1cm4gcmV0OwotCi1pbmZvX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9jb250ZXh0X2dldF9zaW5rX2lucHV0X2luZm8oKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gb3V0OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzaW5rX2luaXQgKEdzdFB1bHNlU2luayAqIHB1bHNlc2luaykKLXsKLSAgcHVsc2VzaW5rLT5zZXJ2ZXIgPSBOVUxMOwotICBwdWxzZXNpbmstPmRldmljZSA9IE5VTEw7Ci0gIHB1bHNlc2luay0+ZGV2aWNlX2luZm8uZGVzY3JpcHRpb24gPSBOVUxMOwotICBwdWxzZXNpbmstPmNsaWVudF9uYW1lID0gZ3N0X3B1bHNlX2NsaWVudF9uYW1lICgpOwotCi0gIHB1bHNlc2luay0+ZGV2aWNlX2luZm8uZm9ybWF0cyA9IE5VTEw7Ci0KLSAgcHVsc2VzaW5rLT52b2x1bWUgPSBERUZBVUxUX1ZPTFVNRTsKLSAgcHVsc2VzaW5rLT52b2x1bWVfc2V0ID0gRkFMU0U7Ci0KLSAgcHVsc2VzaW5rLT5tdXRlID0gREVGQVVMVF9NVVRFOwotICBwdWxzZXNpbmstPm11dGVfc2V0ID0gRkFMU0U7Ci0KLSAgcHVsc2VzaW5rLT5ub3RpZnkgPSAwOwotCi0gIGdfYXRvbWljX2ludF9zZXQgKCZwdWxzZXNpbmstPmZvcm1hdF9sb3N0LCBGQUxTRSk7Ci0gIHB1bHNlc2luay0+Zm9ybWF0X2xvc3RfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgcHVsc2VzaW5rLT5wcm9wZXJ0aWVzID0gTlVMTDsKLSAgcHVsc2VzaW5rLT5wcm9wbGlzdCA9IE5VTEw7Ci0KLSAgLyogb3ZlcnJpZGUgd2l0aCBhIGN1c3RvbSBjbG9jayAqLwotICBpZiAoR1NUX0FVRElPX0JBU0VfU0lOSyAocHVsc2VzaW5rKS0+cHJvdmlkZWRfY2xvY2spCi0gICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX0FVRElPX0JBU0VfU0lOSyAocHVsc2VzaW5rKS0+cHJvdmlkZWRfY2xvY2spOwotCi0gIEdTVF9BVURJT19CQVNFX1NJTksgKHB1bHNlc2luayktPnByb3ZpZGVkX2Nsb2NrID0KLSAgICAgIGdzdF9hdWRpb19jbG9ja19uZXcgKCJHc3RQdWxzZVNpbmtDbG9jayIsCi0gICAgICAoR3N0QXVkaW9DbG9ja0dldFRpbWVGdW5jKSBnc3RfcHVsc2VzaW5rX2dldF90aW1lLCBwdWxzZXNpbmssIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UHVsc2VTaW5rICpwdWxzZXNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChwdWxzZXNpbmstPnNlcnZlcik7Ci0gIGdfZnJlZSAocHVsc2VzaW5rLT5kZXZpY2UpOwotICBnX2ZyZWUgKHB1bHNlc2luay0+Y2xpZW50X25hbWUpOwotICBnX2ZyZWUgKHB1bHNlc2luay0+Y3VycmVudF9zaW5rX25hbWUpOwotCi0gIGZyZWVfZGV2aWNlX2luZm8gKCZwdWxzZXNpbmstPmRldmljZV9pbmZvKTsKLQotICBpZiAocHVsc2VzaW5rLT5wcm9wZXJ0aWVzKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHVsc2VzaW5rLT5wcm9wZXJ0aWVzKTsKLSAgaWYgKHB1bHNlc2luay0+cHJvcGxpc3QpCi0gICAgcGFfcHJvcGxpc3RfZnJlZSAocHVsc2VzaW5rLT5wcm9wbGlzdCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc2lua19zZXRfdm9sdW1lIChHc3RQdWxzZVNpbmsgKiBwc2luaywgZ2RvdWJsZSB2b2x1bWUpCi17Ci0gIHBhX2N2b2x1bWUgdjsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotICB1aW50MzJfdCBpZHg7Ci0KLSAgaWYgKCFtYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInNldHRpbmcgdm9sdW1lIHRvICVmIiwgdm9sdW1lKTsKLQotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoR1NUX0FVRElPX0JBU0VfU0lOSyAocHNpbmspLT5yaW5nYnVmZmVyKTsKLSAgaWYgKHBidWYgPT0gTlVMTCB8fCBwYnVmLT5zdHJlYW0gPT0gTlVMTCkKLSAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICBpZiAoKGlkeCA9IHBhX3N0cmVhbV9nZXRfaW5kZXggKHBidWYtPnN0cmVhbSkpID09IFBBX0lOVkFMSURfSU5ERVgpCi0gICAgZ290byBub19pbmRleDsKLQotICBpZiAocGJ1Zi0+aXNfcGNtKQotICAgIGdzdF9wdWxzZV9jdm9sdW1lX2Zyb21fbGluZWFyICgmdiwgcGJ1Zi0+Y2hhbm5lbHMsIHZvbHVtZSk7Ci0gIGVsc2UKLSAgICAvKiBGSVhNRTogdGhpcyB3aWxsIGV2ZW50dWFsbHkgYmUgc3VwZXJjZWRlZCBieSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2b2x1bWUKLSAgICAgKiBpcyByZWFkYWJsZS93cml0YWJsZSAqLwotICAgIGdvdG8gdW5sb2NrOwotCi0gIGlmICghKG8gPSBwYV9jb250ZXh0X3NldF9zaW5rX2lucHV0X3ZvbHVtZSAocGJ1Zi0+Y29udGV4dCwgaWR4LAotICAgICAgICAgICAgICAmdiwgTlVMTCwgTlVMTCkpKQotICAgIGdvdG8gdm9sdW1lX2ZhaWxlZDsKLQotICAvKiBXZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbCAqLwotdW5sb2NrOgotCi0gIGlmIChvKQotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbWFpbmxvb3A6Ci0gIHsKLSAgICBwc2luay0+dm9sdW1lID0gdm9sdW1lOwotICAgIHBzaW5rLT52b2x1bWVfc2V0ID0gVFJVRTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgaGF2ZSBubyBtYWlubG9vcCIpOwotICAgIHJldHVybjsKLSAgfQotbm9fYnVmZmVyOgotICB7Ci0gICAgcHNpbmstPnZvbHVtZSA9IHZvbHVtZTsKLSAgICBwc2luay0+dm9sdW1lX3NldCA9IFRSVUU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndlIGhhdmUgbm8gcmluZ2J1ZmZlciIpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci1ub19pbmRleDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgZG9uJ3QgaGF2ZSBhIHN0cmVhbSBpbmRleCIpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci12b2x1bWVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoInBhX3N0cmVhbV9zZXRfc2lua19pbnB1dF92b2x1bWUoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzaW5rX3NldF9tdXRlIChHc3RQdWxzZVNpbmsgKiBwc2luaywgZ2Jvb2xlYW4gbXV0ZSkKLXsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotICB1aW50MzJfdCBpZHg7Ci0KLSAgaWYgKCFtYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInNldHRpbmcgbXV0ZSBzdGF0ZSB0byAlZCIsIG11dGUpOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUIChHU1RfQVVESU9fQkFTRV9TSU5LIChwc2luayktPnJpbmdidWZmZXIpOwotICBpZiAocGJ1ZiA9PSBOVUxMIHx8IHBidWYtPnN0cmVhbSA9PSBOVUxMKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIGlmICgoaWR4ID0gcGFfc3RyZWFtX2dldF9pbmRleCAocGJ1Zi0+c3RyZWFtKSkgPT0gUEFfSU5WQUxJRF9JTkRFWCkKLSAgICBnb3RvIG5vX2luZGV4OwotCi0gIGlmICghKG8gPSBwYV9jb250ZXh0X3NldF9zaW5rX2lucHV0X211dGUgKHBidWYtPmNvbnRleHQsIGlkeCwKLSAgICAgICAgICAgICAgbXV0ZSwgTlVMTCwgTlVMTCkpKQotICAgIGdvdG8gbXV0ZV9mYWlsZWQ7Ci0KLSAgLyogV2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIHJlc3VsdCBvZiB0aGlzIGNhbGwgKi8KLXVubG9jazoKLQotICBpZiAobykKLSAgICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLW5vX21haW5sb29wOgotICB7Ci0gICAgcHNpbmstPm11dGUgPSBtdXRlOwotICAgIHBzaW5rLT5tdXRlX3NldCA9IFRSVUU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm47Ci0gIH0KLW5vX2J1ZmZlcjoKLSAgewotICAgIHBzaW5rLT5tdXRlID0gbXV0ZTsKLSAgICBwc2luay0+bXV0ZV9zZXQgPSBUUlVFOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ3ZSBoYXZlIG5vIHJpbmdidWZmZXIiKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotbm9faW5kZXg6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndlIGRvbid0IGhhdmUgYSBzdHJlYW0gaW5kZXgiKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotbXV0ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfc3RyZWFtX3NldF9zaW5rX2lucHV0X211dGUoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzaW5rX3NpbmtfaW5wdXRfaW5mb19jYiAocGFfY29udGV4dCAqIGMsIGNvbnN0IHBhX3NpbmtfaW5wdXRfaW5mbyAqIGksCi0gICAgaW50IGVvbCwgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLSAgR3N0UHVsc2VTaW5rICpwc2luazsKLQotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAodXNlcmRhdGEpOwotICBwc2luayA9IEdTVF9QVUxTRVNJTktfQ0FTVCAoR1NUX09CSkVDVF9QQVJFTlQgKHBidWYpKTsKLQotICBpZiAoIWkpCi0gICAgZ290byBkb25lOwotCi0gIGlmICghcGJ1Zi0+c3RyZWFtKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBJZiB0aGUgaW5kZXggZG9lc24ndCBtYXRjaCBvdXIgY3VycmVudCBzdHJlYW0sCi0gICAqIGl0IGltcGxpZXMgd2UganVzdCByZWNyZWF0ZWQgdGhlIHN0cmVhbSAoY2FwcyBjaGFuZ2UpCi0gICAqLwotICBpZiAoaS0+aW5kZXggPT0gcGFfc3RyZWFtX2dldF9pbmRleCAocGJ1Zi0+c3RyZWFtKSkgewotICAgIHBzaW5rLT52b2x1bWUgPSBwYV9zd192b2x1bWVfdG9fbGluZWFyIChwYV9jdm9sdW1lX21heCAoJmktPnZvbHVtZSkpOwotICAgIHBzaW5rLT5tdXRlID0gaS0+bXV0ZTsKLSAgICBwc2luay0+Y3VycmVudF9zaW5rX2lkeCA9IGktPnNpbms7Ci0KLSAgICBpZiAocHNpbmstPnZvbHVtZSA+IE1BWF9WT0xVTUUpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHNpbmssICJDbGlwcGVkIHZvbHVtZSBmcm9tICVmIHRvICVmIiwgcHNpbmstPnZvbHVtZSwKLSAgICAgICAgICBNQVhfVk9MVU1FKTsKLSAgICAgIHBzaW5rLT52b2x1bWUgPSBNQVhfVk9MVU1FOwotICAgIH0KLSAgfQotCi1kb25lOgotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKG1haW5sb29wLCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfZ2V0X3NpbmtfaW5wdXRfaW5mbyAoR3N0UHVsc2VTaW5rICogcHNpbmssIGdkb3VibGUgKiB2b2x1bWUsCi0gICAgZ2Jvb2xlYW4gKiBtdXRlKQotewotICBHc3RQdWxzZVJpbmdCdWZmZXIgKnBidWY7Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIHVpbnQzMl90IGlkeDsKLQotICBpZiAoIW1haW5sb29wKQotICAgIGdvdG8gbm9fbWFpbmxvb3A7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAobWFpbmxvb3ApOwotCi0gIHBidWYgPSBHU1RfUFVMU0VSSU5HX0JVRkZFUl9DQVNUIChHU1RfQVVESU9fQkFTRV9TSU5LIChwc2luayktPnJpbmdidWZmZXIpOwotICBpZiAocGJ1ZiA9PSBOVUxMIHx8IHBidWYtPnN0cmVhbSA9PSBOVUxMKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIGlmICgoaWR4ID0gcGFfc3RyZWFtX2dldF9pbmRleCAocGJ1Zi0+c3RyZWFtKSkgPT0gUEFfSU5WQUxJRF9JTkRFWCkKLSAgICBnb3RvIG5vX2luZGV4OwotCi0gIGlmICghKG8gPSBwYV9jb250ZXh0X2dldF9zaW5rX2lucHV0X2luZm8gKHBidWYtPmNvbnRleHQsIGlkeCwKLSAgICAgICAgICAgICAgZ3N0X3B1bHNlc2lua19zaW5rX2lucHV0X2luZm9fY2IsIHBidWYpKSkKLSAgICBnb3RvIGluZm9fZmFpbGVkOwotCi0gIHdoaWxlIChwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChvKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKG1haW5sb29wKTsKLSAgICBpZiAoZ3N0X3B1bHNlcmluZ19pc19kZWFkIChwc2luaywgcGJ1ZiwgVFJVRSkpCi0gICAgICBnb3RvIHVubG9jazsKLSAgfQotCi11bmxvY2s6Ci0gIGlmICh2b2x1bWUpCi0gICAgKnZvbHVtZSA9IHBzaW5rLT52b2x1bWU7Ci0gIGlmIChtdXRlKQotICAgICptdXRlID0gcHNpbmstPm11dGU7Ci0KLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKG1haW5sb29wKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1ub19tYWlubG9vcDoKLSAgewotICAgIGlmICh2b2x1bWUpCi0gICAgICAqdm9sdW1lID0gcHNpbmstPnZvbHVtZTsKLSAgICBpZiAobXV0ZSkKLSAgICAgICptdXRlID0gcHNpbmstPm11dGU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm47Ci0gIH0KLW5vX2J1ZmZlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgaGF2ZSBubyByaW5nYnVmZmVyIik7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLW5vX2luZGV4OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ3ZSBkb24ndCBoYXZlIGEgc3RyZWFtIGluZGV4Iik7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLWluZm9fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoInBhX2NvbnRleHRfZ2V0X3NpbmtfaW5wdXRfaW5mbygpIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHBidWYtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfY3VycmVudF9zaW5rX2luZm9fY2IgKHBhX2NvbnRleHQgKiBjLCBjb25zdCBwYV9zaW5rX2luZm8gKiBpLAotICAgIGludCBlb2wsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNpbmsgKnBzaW5rOwotCi0gIHBzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUICh1c2VyZGF0YSk7Ci0KLSAgaWYgKCFpKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBJZiB0aGUgaW5kZXggZG9lc24ndCBtYXRjaCBvdXIgY3VycmVudCBzdHJlYW0sCi0gICAqIGl0IGltcGxpZXMgd2UganVzdCByZWNyZWF0ZWQgdGhlIHN0cmVhbSAoY2FwcyBjaGFuZ2UpCi0gICAqLwotICBpZiAoaS0+aW5kZXggPT0gcHNpbmstPmN1cnJlbnRfc2lua19pZHgpIHsKLSAgICBnX2ZyZWUgKHBzaW5rLT5jdXJyZW50X3NpbmtfbmFtZSk7Ci0gICAgcHNpbmstPmN1cnJlbnRfc2lua19uYW1lID0gZ19zdHJkdXAgKGktPm5hbWUpOwotICB9Ci0KLWRvbmU6Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAobWFpbmxvb3AsIDApOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3B1bHNlc2lua19nZXRfY3VycmVudF9kZXZpY2UgKEdzdFB1bHNlU2luayAqIHB1bHNlc2luaykKLXsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotICBnY2hhciAqY3VycmVudF9zaW5rOwotCi0gIGlmICghbWFpbmxvb3ApCi0gICAgZ290byBub19tYWlubG9vcDsKLQotICBwYnVmID0KLSAgICAgIEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKEdTVF9BVURJT19CQVNFX1NJTksgKHB1bHNlc2luayktPnJpbmdidWZmZXIpOwotICBpZiAocGJ1ZiA9PSBOVUxMIHx8IHBidWYtPnN0cmVhbSA9PSBOVUxMKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIGdzdF9wdWxzZXNpbmtfZ2V0X3NpbmtfaW5wdXRfaW5mbyAocHVsc2VzaW5rLCBOVUxMLCBOVUxMKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0KLSAgaWYgKCEobyA9IHBhX2NvbnRleHRfZ2V0X3NpbmtfaW5mb19ieV9pbmRleCAocGJ1Zi0+Y29udGV4dCwKLSAgICAgICAgICAgICAgcHVsc2VzaW5rLT5jdXJyZW50X3NpbmtfaWR4LCBnc3RfcHVsc2VzaW5rX2N1cnJlbnRfc2lua19pbmZvX2NiLAotICAgICAgICAgICAgICBwdWxzZXNpbmspKSkKLSAgICBnb3RvIGluZm9fZmFpbGVkOwotCi0gIHdoaWxlIChwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChvKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKG1haW5sb29wKTsKLSAgICBpZiAoZ3N0X3B1bHNlcmluZ19pc19kZWFkIChwdWxzZXNpbmssIHBidWYsIFRSVUUpKQotICAgICAgZ290byB1bmxvY2s7Ci0gIH0KLQotdW5sb2NrOgotCi0gIGN1cnJlbnRfc2luayA9IGdfc3RyZHVwIChwdWxzZXNpbmstPmN1cnJlbnRfc2lua19uYW1lKTsKLQotICBpZiAobykKLSAgICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotCi0gIHJldHVybiBjdXJyZW50X3Npbms7Ci0KLSAgLyogRVJST1JTICovCi1ub19tYWlubG9vcDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc2luaywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbm9fYnVmZmVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHVsc2VzaW5rLCAid2UgaGF2ZSBubyByaW5nYnVmZmVyIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWluZm9fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9jb250ZXh0X2dldF9zaW5rX2lucHV0X2luZm8oKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfcHVsc2VzaW5rX2RldmljZV9kZXNjcmlwdGlvbiAoR3N0UHVsc2VTaW5rICogcHNpbmspCi17Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLSAgZ2NoYXIgKnQ7Ci0KLSAgaWYgKCFtYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKEdTVF9BVURJT19CQVNFX1NJTksgKHBzaW5rKS0+cmluZ2J1ZmZlcik7Ci0gIGlmIChwYnVmID09IE5VTEwpCi0gICAgZ290byBub19idWZmZXI7Ci0KLSAgZnJlZV9kZXZpY2VfaW5mbyAoJnBzaW5rLT5kZXZpY2VfaW5mbyk7Ci0gIGlmICghKG8gPSBwYV9jb250ZXh0X2dldF9zaW5rX2luZm9fYnlfbmFtZSAocGJ1Zi0+Y29udGV4dCwKLSAgICAgICAgICAgICAgcHNpbmstPmRldmljZSwgZ3N0X3B1bHNlc2lua19zaW5rX2luZm9fY2IsICZwc2luay0+ZGV2aWNlX2luZm8pKSkKLSAgICBnb3RvIGluZm9fZmFpbGVkOwotCi0gIHdoaWxlIChwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChvKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKG1haW5sb29wKTsKLSAgICBpZiAoZ3N0X3B1bHNlcmluZ19pc19kZWFkIChwc2luaywgcGJ1ZiwgRkFMU0UpKQotICAgICAgZ290byB1bmxvY2s7Ci0gIH0KLQotdW5sb2NrOgotICBpZiAobykKLSAgICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIHQgPSBnX3N0cmR1cCAocHNpbmstPmRldmljZV9pbmZvLmRlc2NyaXB0aW9uKTsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgcmV0dXJuIHQ7Ci0KLSAgLyogRVJST1JTICovCi1ub19tYWlubG9vcDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgaGF2ZSBubyBtYWlubG9vcCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19idWZmZXI6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndlIGhhdmUgbm8gcmluZ2J1ZmZlciIpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci1pbmZvX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9jb250ZXh0X2dldF9zaW5rX2luZm9fYnlfaW5kZXgoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwYnVmLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzaW5rX3NldF9zdHJlYW1fZGV2aWNlIChHc3RQdWxzZVNpbmsgKiBwc2luaywgY29uc3QgZ2NoYXIgKiBkZXZpY2UpCi17Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLSAgdWludDMyX3QgaWR4OwotCi0gIGlmICghbWFpbmxvb3ApCi0gICAgZ290byBub19tYWlubG9vcDsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKEdTVF9BVURJT19CQVNFX1NJTksgKHBzaW5rKS0+cmluZ2J1ZmZlcik7Ci0gIGlmIChwYnVmID09IE5VTEwgfHwgcGJ1Zi0+c3RyZWFtID09IE5VTEwpCi0gICAgZ290byBub19idWZmZXI7Ci0KLSAgaWYgKChpZHggPSBwYV9zdHJlYW1fZ2V0X2luZGV4IChwYnVmLT5zdHJlYW0pKSA9PSBQQV9JTlZBTElEX0lOREVYKQotICAgIGdvdG8gbm9faW5kZXg7Ci0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgInNldHRpbmcgc3RyZWFtIGRldmljZSB0byAlcyIsIGRldmljZSk7Ci0KLSAgaWYgKCEobyA9IHBhX2NvbnRleHRfbW92ZV9zaW5rX2lucHV0X2J5X25hbWUgKHBidWYtPmNvbnRleHQsIGlkeCwgZGV2aWNlLAotICAgICAgICAgICAgICBOVUxMLCBOVUxMKSkpCi0gICAgZ290byBtb3ZlX2ZhaWxlZDsKLQotdW5sb2NrOgotCi0gIGlmIChvKQotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbWFpbmxvb3A6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwc2luaywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm47Ci0gIH0KLW5vX2J1ZmZlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgaGF2ZSBubyByaW5nYnVmZmVyIik7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLW5vX2luZGV4OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ3ZSBkb24ndCBoYXZlIGEgc3RyZWFtIGluZGV4Iik7Ci0gICAgcmV0dXJuOwotICB9Ci1tb3ZlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9jb250ZXh0X21vdmVfc2lua19pbnB1dF9ieV9uYW1lKCVzKSBmYWlsZWQ6ICVzIiwgZGV2aWNlLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHBidWYtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UHVsc2VTaW5rICpwdWxzZXNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NFUlZFUjoKLSAgICAgIGdfZnJlZSAocHVsc2VzaW5rLT5zZXJ2ZXIpOwotICAgICAgcHVsc2VzaW5rLT5zZXJ2ZXIgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBnX2ZyZWUgKHB1bHNlc2luay0+ZGV2aWNlKTsKLSAgICAgIHB1bHNlc2luay0+ZGV2aWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBnc3RfcHVsc2VzaW5rX3NldF9zdHJlYW1fZGV2aWNlIChwdWxzZXNpbmssIHB1bHNlc2luay0+ZGV2aWNlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9WT0xVTUU6Ci0gICAgICBnc3RfcHVsc2VzaW5rX3NldF92b2x1bWUgKHB1bHNlc2luaywgZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VVEU6Ci0gICAgICBnc3RfcHVsc2VzaW5rX3NldF9tdXRlIChwdWxzZXNpbmssIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xJRU5UX05BTUU6Ci0gICAgICBnX2ZyZWUgKHB1bHNlc2luay0+Y2xpZW50X25hbWUpOwotICAgICAgaWYgKCFnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHB1bHNlc2luaywKLSAgICAgICAgICAgICJFbXB0eSBQdWxzZUF1ZGlvIGNsaWVudCBuYW1lIG5vdCBhbGxvd2VkLiBSZXNldHRpbmcgdG8gZGVmYXVsdCB2YWx1ZSIpOwotICAgICAgICBwdWxzZXNpbmstPmNsaWVudF9uYW1lID0gZ3N0X3B1bHNlX2NsaWVudF9uYW1lICgpOwotICAgICAgfSBlbHNlCi0gICAgICAgIHB1bHNlc2luay0+Y2xpZW50X25hbWUgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJFQU1fUFJPUEVSVElFUzoKLSAgICAgIGlmIChwdWxzZXNpbmstPnByb3BlcnRpZXMpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHVsc2VzaW5rLT5wcm9wZXJ0aWVzKTsKLSAgICAgIHB1bHNlc2luay0+cHJvcGVydGllcyA9Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9jb3B5IChnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSAodmFsdWUpKTsKLSAgICAgIGlmIChwdWxzZXNpbmstPnByb3BsaXN0KQotICAgICAgICBwYV9wcm9wbGlzdF9mcmVlIChwdWxzZXNpbmstPnByb3BsaXN0KTsKLSAgICAgIHB1bHNlc2luay0+cHJvcGxpc3QgPSBnc3RfcHVsc2VfbWFrZV9wcm9wbGlzdCAocHVsc2VzaW5rLT5wcm9wZXJ0aWVzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0KLSAgR3N0UHVsc2VTaW5rICpwdWxzZXNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NFUlZFUjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHB1bHNlc2luay0+c2VydmVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwdWxzZXNpbmstPmRldmljZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1VSUkVOVF9ERVZJQ0U6Ci0gICAgewotICAgICAgZ2NoYXIgKmN1cnJlbnRfZGV2aWNlID0gZ3N0X3B1bHNlc2lua19nZXRfY3VycmVudF9kZXZpY2UgKHB1bHNlc2luayk7Ci0gICAgICBpZiAoY3VycmVudF9kZXZpY2UpCi0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKHZhbHVlLCBjdXJyZW50X2RldmljZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsICIiKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfREVWSUNFX05BTUU6Ci0gICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgZ3N0X3B1bHNlc2lua19kZXZpY2VfZGVzY3JpcHRpb24gKHB1bHNlc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1ZPTFVNRToKLSAgICB7Ci0gICAgICBnZG91YmxlIHZvbHVtZTsKLQotICAgICAgZ3N0X3B1bHNlc2lua19nZXRfc2lua19pbnB1dF9pbmZvIChwdWxzZXNpbmssICZ2b2x1bWUsIE5VTEwpOwotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgdm9sdW1lKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfTVVURToKLSAgICB7Ci0gICAgICBnYm9vbGVhbiBtdXRlOwotCi0gICAgICBnc3RfcHVsc2VzaW5rX2dldF9zaW5rX2lucHV0X2luZm8gKHB1bHNlc2luaywgTlVMTCwgJm11dGUpOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIG11dGUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9DTElFTlRfTkFNRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHB1bHNlc2luay0+Y2xpZW50X25hbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUkVBTV9QUk9QRVJUSUVTOgotICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUgKHZhbHVlLCBwdWxzZXNpbmstPnByb3BlcnRpZXMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc2lua19jaGFuZ2VfdGl0bGUgKEdzdFB1bHNlU2luayAqIHBzaW5rLCBjb25zdCBnY2hhciAqIHQpCi17Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKEdTVF9BVURJT19CQVNFX1NJTksgKHBzaW5rKS0+cmluZ2J1ZmZlcik7Ci0KLSAgaWYgKHBidWYgPT0gTlVMTCB8fCBwYnVmLT5zdHJlYW0gPT0gTlVMTCkKLSAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICBnX2ZyZWUgKHBidWYtPnN0cmVhbV9uYW1lKTsKLSAgcGJ1Zi0+c3RyZWFtX25hbWUgPSBnX3N0cmR1cCAodCk7Ci0KLSAgaWYgKCEobyA9IHBhX3N0cmVhbV9zZXRfbmFtZSAocGJ1Zi0+c3RyZWFtLCBwYnVmLT5zdHJlYW1fbmFtZSwgTlVMTCwgTlVMTCkpKQotICAgIGdvdG8gbmFtZV9mYWlsZWQ7Ci0KLSAgLyogV2UncmUgbm90IGludGVyZXN0ZWQgaWYgdGhpcyBvcGVyYXRpb24gZmFpbGVkIG9yIG5vdCAqLwotdW5sb2NrOgotCi0gIGlmIChvKQotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAobWFpbmxvb3ApOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2J1ZmZlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgaGF2ZSBubyByaW5nYnVmZmVyIik7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLW5hbWVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoInBhX3N0cmVhbV9zZXRfbmFtZSgpIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHBidWYtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfY2hhbmdlX3Byb3BzIChHc3RQdWxzZVNpbmsgKiBwc2luaywgR3N0VGFnTGlzdCAqIGwpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqY29uc3QgbWFwW10gPSB7Ci0gICAgR1NUX1RBR19USVRMRSwgUEFfUFJPUF9NRURJQV9USVRMRSwKLQotICAgIC8qIG1pZ2h0IGdldCBvdmVycmlkZW4gaW4gdGhlIG5leHQgaXRlcmF0aW9uIGJ5IEdTVF9UQUdfQVJUSVNUICovCi0gICAgR1NUX1RBR19QRVJGT1JNRVIsIFBBX1BST1BfTUVESUFfQVJUSVNULAotCi0gICAgR1NUX1RBR19BUlRJU1QsIFBBX1BST1BfTUVESUFfQVJUSVNULAotICAgIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSwgUEFfUFJPUF9NRURJQV9MQU5HVUFHRSwKLSAgICBHU1RfVEFHX0xPQ0FUSU9OLCBQQV9QUk9QX01FRElBX0ZJTEVOQU1FLAotICAgIC8qIFdlIG1pZ2h0IGFkZCBtb3JlIGhlcmUgbGF0ZXIgb24gLi4uICovCi0gICAgTlVMTAotICB9OwotICBwYV9wcm9wbGlzdCAqcGwgPSBOVUxMOwotICBjb25zdCBnY2hhciAqY29uc3QgKnQ7Ci0gIGdib29sZWFuIGVtcHR5ID0gVFJVRTsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLSAgR3N0UHVsc2VSaW5nQnVmZmVyICpwYnVmOwotCi0gIHBsID0gcGFfcHJvcGxpc3RfbmV3ICgpOwotCi0gIGZvciAodCA9IG1hcDsgKnQ7IHQgKz0gMikgewotICAgIGdjaGFyICpuID0gTlVMTDsKLQotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAobCwgKnQsICZuKSkgewotCi0gICAgICBpZiAobiAmJiAqbikgewotICAgICAgICBwYV9wcm9wbGlzdF9zZXRzIChwbCwgKih0ICsgMSksIG4pOwotICAgICAgICBlbXB0eSA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBnX2ZyZWUgKG4pOwotICAgIH0KLSAgfQotICBpZiAoZW1wdHkpCi0gICAgZ290byBmaW5pc2g7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAobWFpbmxvb3ApOwotICBwYnVmID0gR1NUX1BVTFNFUklOR19CVUZGRVJfQ0FTVCAoR1NUX0FVRElPX0JBU0VfU0lOSyAocHNpbmspLT5yaW5nYnVmZmVyKTsKLSAgaWYgKHBidWYgPT0gTlVMTCB8fCBwYnVmLT5zdHJlYW0gPT0gTlVMTCkKLSAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICAvKiBXZSdyZSBub3QgaW50ZXJlc3RlZCBpZiB0aGlzIG9wZXJhdGlvbiBmYWlsZWQgb3Igbm90ICovCi0gIGlmICghKG8gPSBwYV9zdHJlYW1fcHJvcGxpc3RfdXBkYXRlIChwYnVmLT5zdHJlYW0sIFBBX1VQREFURV9SRVBMQUNFLAotICAgICAgICAgICAgICBwbCwgTlVMTCwgTlVMTCkpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJwYV9zdHJlYW1fcHJvcGxpc3RfdXBkYXRlKCkgZmFpbGVkIik7Ci0gIH0KLQotdW5sb2NrOgotCi0gIGlmIChvKQotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLWZpbmlzaDoKLQotICBpZiAocGwpCi0gICAgcGFfcHJvcGxpc3RfZnJlZSAocGwpOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2J1ZmZlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzaW5rLCAid2UgaGF2ZSBubyByaW5nYnVmZmVyIik7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfZmx1c2hfcmluZ2J1ZmZlciAoR3N0UHVsc2VTaW5rICogcHNpbmspCi17Ci0gIEdzdFB1bHNlUmluZ0J1ZmZlciAqcGJ1ZjsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChtYWlubG9vcCk7Ci0KLSAgcGJ1ZiA9IEdTVF9QVUxTRVJJTkdfQlVGRkVSX0NBU1QgKEdTVF9BVURJT19CQVNFX1NJTksgKHBzaW5rKS0+cmluZ2J1ZmZlcik7Ci0KLSAgaWYgKHBidWYgPT0gTlVMTCB8fCBwYnVmLT5zdHJlYW0gPT0gTlVMTCkKLSAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICBnc3RfcHVsc2VyaW5nX2ZsdXNoIChwYnVmKTsKLQotICAvKiBVbmNvcmsgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IChoYXBwZW5zIHdoZW4gd2FpdGluZyB0byBnZXQgZW5vdWdoIGRhdGEKLSAgICogdG8gc2VuZCBvdXQgdGhlIGZpcnN0IHRpbWUpICovCi0gIGlmIChwYnVmLT5jb3JrZWQpCi0gICAgZ3N0X3B1bHNlcmluZ19zZXRfY29ya2VkIChwYnVmLCBGQUxTRSwgRkFMU0UpOwotCi0gIC8qIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGlmIHRoaXMgb3BlcmF0aW9uIGZhaWxlZCBvciBub3QgKi8KLXVubG9jazoKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fYnVmZmVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ3ZSBoYXZlIG5vIHJpbmdidWZmZXIiKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZXNpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UHVsc2VTaW5rICpwdWxzZXNpbmsgPSBHU1RfUFVMU0VTSU5LX0NBU1QgKHNpbmspOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzp7Ci0gICAgICBnY2hhciAqdGl0bGUgPSBOVUxMLCAqYXJ0aXN0ID0gTlVMTCwgKmxvY2F0aW9uID0gTlVMTCwgKmRlc2NyaXB0aW9uID0KLSAgICAgICAgICBOVUxMLCAqdCA9IE5VTEwsICpidWYgPSBOVUxMOwotICAgICAgR3N0VGFnTGlzdCAqbDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZsKTsKLQotICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGwsIEdTVF9UQUdfVElUTEUsICZ0aXRsZSk7Ci0gICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAobCwgR1NUX1RBR19BUlRJU1QsICZhcnRpc3QpOwotICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGwsIEdTVF9UQUdfTE9DQVRJT04sICZsb2NhdGlvbik7Ci0gICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAobCwgR1NUX1RBR19ERVNDUklQVElPTiwgJmRlc2NyaXB0aW9uKTsKLQotICAgICAgaWYgKCFhcnRpc3QpCi0gICAgICAgIGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nIChsLCBHU1RfVEFHX1BFUkZPUk1FUiwgJmFydGlzdCk7Ci0KLSAgICAgIGlmICh0aXRsZSAmJiBhcnRpc3QpCi0gICAgICAgIC8qIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJyAqLwotICAgICAgICB0ID0gYnVmID0gZ19zdHJkdXBfcHJpbnRmIChfKCInJXMnIGJ5ICclcyciKSwgZ19zdHJzdHJpcCAodGl0bGUpLAotICAgICAgICAgICAgZ19zdHJzdHJpcCAoYXJ0aXN0KSk7Ci0gICAgICBlbHNlIGlmICh0aXRsZSkKLSAgICAgICAgdCA9IGdfc3Ryc3RyaXAgKHRpdGxlKTsKLSAgICAgIGVsc2UgaWYgKGRlc2NyaXB0aW9uKQotICAgICAgICB0ID0gZ19zdHJzdHJpcCAoZGVzY3JpcHRpb24pOwotICAgICAgZWxzZSBpZiAobG9jYXRpb24pCi0gICAgICAgIHQgPSBnX3N0cnN0cmlwIChsb2NhdGlvbik7Ci0KLSAgICAgIGlmICh0KQotICAgICAgICBnc3RfcHVsc2VzaW5rX2NoYW5nZV90aXRsZSAocHVsc2VzaW5rLCB0KTsKLQotICAgICAgZ19mcmVlICh0aXRsZSk7Ci0gICAgICBnX2ZyZWUgKGFydGlzdCk7Ci0gICAgICBnX2ZyZWUgKGxvY2F0aW9uKTsKLSAgICAgIGdfZnJlZSAoZGVzY3JpcHRpb24pOwotICAgICAgZ19mcmVlIChidWYpOwotCi0gICAgICBnc3RfcHVsc2VzaW5rX2NoYW5nZV9wcm9wcyAocHVsc2VzaW5rLCBsKTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0dBUDp7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2dhcCAoZXZlbnQsICZ0aW1lc3RhbXAsICZkdXJhdGlvbik7Ci0gICAgICBpZiAoZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgZ3N0X3B1bHNlc2lua19mbHVzaF9yaW5nYnVmZmVyIChwdWxzZXNpbmspOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIGdzdF9wdWxzZXNpbmtfZmx1c2hfcmluZ2J1ZmZlciAocHVsc2VzaW5rKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICA7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZXZlbnQgKHNpbmssIGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzaW5rX3F1ZXJ5IChHc3RCYXNlU2luayAqIHNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFB1bHNlU2luayAqcHVsc2VzaW5rID0gR1NUX1BVTFNFU0lOS19DQVNUIChzaW5rKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzLCAqZmlsdGVyOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotICAgICAgY2FwcyA9IGdzdF9wdWxzZXNpbmtfcXVlcnlfZ2V0Y2FwcyAocHVsc2VzaW5rLCBmaWx0ZXIpOwotCi0gICAgICBpZiAoY2FwcykgewotICAgICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHMgKHF1ZXJ5LCAmY2Fwcyk7Ci0gICAgICByZXQgPSBnc3RfcHVsc2VzaW5rX3F1ZXJ5X2FjY2VwdGNhcHMgKHB1bHNlc2luaywgY2Fwcyk7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksIHJldCk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoc2luaywgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNpbmtfcmVsZWFzZV9tYWlubG9vcCAoR3N0UHVsc2VTaW5rICogcHNpbmspCi17Ci0gIGlmICghbWFpbmxvb3ApCi0gICAgcmV0dXJuOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKG1haW5sb29wKTsKLSAgd2hpbGUgKHBzaW5rLT5kZWZlcl9wZW5kaW5nKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNpbmssICJ3YWl0aW5nIGZvciBzdHJlYW0gc3RhdHVzIG1lc3NhZ2UgZW1pc3Npb24iKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChtYWlubG9vcCk7Ci0gIH0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChtYWlubG9vcCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmcGFfc2hhcmVkX3Jlc291cmNlX211dGV4KTsKLSAgbWFpbmxvb3BfcmVmX2N0LS07Ci0gIGlmICghbWFpbmxvb3BfcmVmX2N0KSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChwc2luaywgInRlcm1pbmF0aW5nIHBhIG1haW4gbG9vcCB0aHJlYWQiKTsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9zdG9wIChtYWlubG9vcCk7Ci0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfZnJlZSAobWFpbmxvb3ApOwotICAgIG1haW5sb29wID0gTlVMTDsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnBhX3NoYXJlZF9yZXNvdXJjZV9tdXRleCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3B1bHNlc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RQdWxzZVNpbmsgKnB1bHNlc2luayA9IEdTVF9QVUxTRVNJTksgKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBnX211dGV4X2xvY2sgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICAgICAgaWYgKCFtYWlubG9vcF9yZWZfY3QpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAibmV3IHBhIG1haW4gbG9vcCB0aHJlYWQiKTsKLSAgICAgICAgaWYgKCEobWFpbmxvb3AgPSBwYV90aHJlYWRlZF9tYWlubG9vcF9uZXcgKCkpKQotICAgICAgICAgIGdvdG8gbWFpbmxvb3BfZmFpbGVkOwotICAgICAgICBpZiAocGFfdGhyZWFkZWRfbWFpbmxvb3Bfc3RhcnQgKG1haW5sb29wKSA8IDApIHsKLSAgICAgICAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9mcmVlIChtYWlubG9vcCk7Ci0gICAgICAgICAgZ290byBtYWlubG9vcF9zdGFydF9mYWlsZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgbWFpbmxvb3BfcmVmX2N0ID0gMTsKLSAgICAgICAgZ19tdXRleF91bmxvY2sgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAicmV1c2luZyBwYSBtYWluIGxvb3AgdGhyZWFkIik7Ci0gICAgICAgIG1haW5sb29wX3JlZl9jdCsrOwotICAgICAgICBnX211dGV4X3VubG9jayAoJnBhX3NoYXJlZF9yZXNvdXJjZV9tdXRleCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLAotICAgICAgICAgICAgICBHU1RfQVVESU9fQkFTRV9TSU5LIChwdWxzZXNpbmspLT5wcm92aWRlZF9jbG9jaywgVFJVRSkpOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBzdGF0ZV9mYWlsdXJlOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICAvKiBmb3JtYXRfbG9zdCBpcyByZXNldCBpbiByZWxlYXNlKCkgaW4gYXVkaW9iYXNlc2luayAqLwotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19sb3N0IChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLAotICAgICAgICAgICAgICBHU1RfQVVESU9fQkFTRV9TSU5LIChwdWxzZXNpbmspLT5wcm92aWRlZF9jbG9jaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBnc3RfcHVsc2VzaW5rX3JlbGVhc2VfbWFpbmxvb3AgKHB1bHNlc2luayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbWFpbmxvb3BfZmFpbGVkOgotICB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfdGhyZWFkZWRfbWFpbmxvb3BfbmV3KCkgZmFpbGVkIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgfQotbWFpbmxvb3Bfc3RhcnRfZmFpbGVkOgotICB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZwYV9zaGFyZWRfcmVzb3VyY2VfbXV0ZXgpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNpbmssIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfdGhyZWFkZWRfbWFpbmxvb3Bfc3RhcnQoKSBmYWlsZWQiKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci1zdGF0ZV9mYWlsdXJlOgotICB7Ci0gICAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZKSB7Ci0gICAgICAvKiBDbGVhciB0aGUgUEEgbWFpbmxvb3AgaWYgYXVkaW9iYXNlc2luayBmYWlsZWQgdG8gb3BlbiB0aGUgcmluZ19idWZmZXIgKi8KLSAgICAgIGdfYXNzZXJ0IChtYWlubG9vcCk7Ci0gICAgICBnc3RfcHVsc2VzaW5rX3JlbGVhc2VfbWFpbmxvb3AgKHB1bHNlc2luayk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2V4dC9wdWxzZS9wdWxzZXNpbmsuaCBiL2V4dC9wdWxzZS9wdWxzZXNpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUzYjkzMi4uMDAwMDAwMAotLS0gYS9leHQvcHVsc2UvcHVsc2VzaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyotKi0gTW9kZTogQzsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotKi8KLQotLyoKLSAqICBHU3RyZWFtZXIgcHVsc2VhdWRpbyBwbHVnaW4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggTGVubmFydCBQb2V0dGVyaW5nCi0gKgotICogIGdzdC1wdWxzZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQotICogIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIGdzdC1wdWxzZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggZ3N0LXB1bHNlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKLSAqICBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9QVUxTRVNJTktfSF9fCi0jZGVmaW5lIF9fR1NUX1BVTFNFU0lOS19IX18KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb3NpbmsuaD4KLQotI2luY2x1ZGUgPHB1bHNlL3B1bHNlYXVkaW8uaD4KLSNpbmNsdWRlIDxwdWxzZS90aHJlYWQtbWFpbmxvb3AuaD4KLQotI2luY2x1ZGUgInB1bHNldXRpbC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUFVMU0VTSU5LIFwKLSAgKGdzdF9wdWxzZXNpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1BVTFNFU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1BVTFNFU0lOSyxHc3RQdWxzZVNpbmspKQotI2RlZmluZSBHU1RfUFVMU0VTSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1BVTFNFU0lOSyxHc3RQdWxzZVNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QVUxTRVNJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9QVUxTRVNJTkspKQotI2RlZmluZSBHU1RfSVNfUFVMU0VTSU5LX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9QVUxTRVNJTkspKQotI2RlZmluZSBHU1RfUFVMU0VTSU5LX0NBU1Qob2JqKSBcCi0gICgoR3N0UHVsc2VTaW5rICopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RQdWxzZVNpbmsgR3N0UHVsc2VTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlU2lua0NsYXNzIEdzdFB1bHNlU2lua0NsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UHVsc2VEZXZpY2VJbmZvIHsKLSAgZ2NoYXIgKmRlc2NyaXB0aW9uOwotICBHTGlzdCAqZm9ybWF0czsKLX0gR3N0UHVsc2VEZXZpY2VJbmZvOwotCi1zdHJ1Y3QgX0dzdFB1bHNlU2luawotewotICBHc3RBdWRpb0Jhc2VTaW5rIHNpbms7Ci0KLSAgZ2NoYXIgKnNlcnZlciwgKmRldmljZSwgKnN0cmVhbV9uYW1lLCAqY2xpZW50X25hbWU7Ci0gIEdzdFB1bHNlRGV2aWNlSW5mbyBkZXZpY2VfaW5mbzsKLQotICBnZG91YmxlIHZvbHVtZTsKLSAgZ2Jvb2xlYW4gdm9sdW1lX3NldDoxOwotICBnYm9vbGVhbiBtdXRlOjE7Ci0gIGdib29sZWFuIG11dGVfc2V0OjE7Ci0gIGd1aW50MzIgY3VycmVudF9zaW5rX2lkeDsKLSAgZ2NoYXIgKmN1cnJlbnRfc2lua19uYW1lOwotCi0gIGd1aW50IGRlZmVyX3BlbmRpbmc7Ci0KLSAgZ2ludCBub3RpZnk7IC8qIGF0b21pYyAqLwotCi0gIGNvbnN0IGdjaGFyICpwYV92ZXJzaW9uOwotCi0gIEdzdFN0cnVjdHVyZSAqcHJvcGVydGllczsKLSAgcGFfcHJvcGxpc3QgKnByb3BsaXN0OwotCi0gIHZvbGF0aWxlIGdpbnQgZm9ybWF0X2xvc3Q7Ci0gIEdzdENsb2NrVGltZSBmb3JtYXRfbG9zdF90aW1lOwotfTsKLQotc3RydWN0IF9Hc3RQdWxzZVNpbmtDbGFzcwotewotICBHc3RBdWRpb0Jhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3B1bHNlc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgUFVMU0VfU0lOS19URU1QTEFURV9DQVBTIFwKLSAgX1BVTFNFX0NBUFNfUENNIFwKLSAgX1BVTFNFX0NBUFNfQUMzIFwKLSAgX1BVTFNFX0NBUFNfRUFDMyBcCi0gIF9QVUxTRV9DQVBTX0RUUyBcCi0gIF9QVUxTRV9DQVBTX01QMyBcCi0gIF9QVUxTRV9DQVBTX0FBQwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUFVMU0VTSU5LX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3B1bHNlL3B1bHNlc3JjLmMgYi9leHQvcHVsc2UvcHVsc2VzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FmNzRlZS4uMDAwMDAwMAotLS0gYS9leHQvcHVsc2UvcHVsc2VzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE4ODQgKzAsMCBAQAotLyoKLSAqICBHU3RyZWFtZXIgcHVsc2VhdWRpbyBwbHVnaW4KLSAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggTGVubmFydCBQb2V0dGVyaW5nCi0gKgotICogIGdzdC1wdWxzZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQotICogIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIGdzdC1wdWxzZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggZ3N0LXB1bHNlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKLSAqICBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcHVsc2VzcmMKLSAqIEBzZWVfYWxzbzogcHVsc2VzaW5rCi0gKgotICogVGhpcyBlbGVtZW50IGNhcHR1cmVzIGF1ZGlvIGZyb20gYQotICogPHVsaW5rIGhyZWY9Imh0dHA6Ly93d3cucHVsc2VhdWRpby5vcmciPlB1bHNlQXVkaW8gc291bmQgc2VydmVyPC91bGluaz4uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBwdWxzZXNyYyAhIGF1ZGlvY29udmVydCAhIHZvcmJpc2VuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWFsc2FzcmMub2dnCi0gKiBdfCBSZWNvcmQgZnJvbSBhIHNvdW5kIGNhcmQgdXNpbmcgcHVsc2VhdWRpbyBhbmQgZW5jb2RlIHRvIE9nZy9Wb3JiaXMuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc3JjLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdHRhZ2xpc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgInB1bHNlc3JjLmgiCi0jaW5jbHVkZSAicHVsc2V1dGlsLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHB1bHNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHB1bHNlX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9TRVJWRVIgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfREVWSUNFICAgICAgICAgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX0NVUlJFTlRfREVWSUNFICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9ERVZJQ0VfTkFNRSAgICAgICBOVUxMCi0KLSNkZWZpbmUgREVGQVVMVF9WT0xVTUUgICAgICAgICAgMS4wCi0jZGVmaW5lIERFRkFVTFRfTVVURSAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIE1BWF9WT0xVTUUgICAgICAgICAgICAgIDEwLjAKLQotLyogU2VlIHRoZSBwdWxzZXNpbmsgY29kZSBmb3Igbm90ZXMgb24gaG93IHdlIGludGVyYWN0IHdpdGggdGhlIFBBIG1haW5sb29wCi0gKiB0aHJlYWQuICovCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NFUlZFUiwKLSAgUFJPUF9ERVZJQ0UsCi0gIFBST1BfREVWSUNFX05BTUUsCi0gIFBST1BfQ1VSUkVOVF9ERVZJQ0UsCi0gIFBST1BfQ0xJRU5UX05BTUUsCi0gIFBST1BfU1RSRUFNX1BST1BFUlRJRVMsCi0gIFBST1BfU09VUkNFX09VVFBVVF9JTkRFWCwKLSAgUFJPUF9WT0xVTUUsCi0gIFBST1BfTVVURSwKLSAgUFJPUF9MQVNUCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfcHVsc2VzcmNfZGVzdHJveV9zdHJlYW0gKEdzdFB1bHNlU3JjICogcHVsc2VzcmMpOwotc3RhdGljIHZvaWQgZ3N0X3B1bHNlc3JjX2Rlc3Ryb3lfY29udGV4dCAoR3N0UHVsc2VTcmMgKiBwdWxzZXNyYyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9wdWxzZXNyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcHVsc2VzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3B1bHNlc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9wdWxzZXNyY19zZXRfY29ya2VkIChHc3RQdWxzZVNyYyAqIHBzcmMsIGdib29sZWFuIGNvcmtlZCwKLSAgICBnYm9vbGVhbiB3YWl0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHVsc2VzcmNfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9wdWxzZXNyY19jbG9zZSAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9wdWxzZXNyY19wcmVwYXJlIChHc3RBdWRpb1NyYyAqIGFzcmMsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlc3JjX3VucHJlcGFyZSAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLQotc3RhdGljIGd1aW50IGdzdF9wdWxzZXNyY19yZWFkIChHc3RBdWRpb1NyYyAqIGFzcmMsIGdwb2ludGVyIGRhdGEsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RDbG9ja1RpbWUgKiB0aW1lc3RhbXApOwotc3RhdGljIGd1aW50IGdzdF9wdWxzZXNyY19kZWxheSAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLQotc3RhdGljIHZvaWQgZ3N0X3B1bHNlc3JjX3Jlc2V0IChHc3RBdWRpb1NyYyAqIHNyYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHVsc2VzcmNfbmVnb3RpYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3B1bHNlc3JjX2V2ZW50IChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcHVsc2VzcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdENsb2NrVGltZSBnc3RfcHVsc2VzcmNfZ2V0X3RpbWUgKEdzdENsb2NrICogY2xvY2ssIEdzdFB1bHNlU3JjICogc3JjKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHBhZF90ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKF9QVUxTRV9DQVBTX1BDTSkKLSAgICApOwotCi0jZGVmaW5lIGdzdF9wdWxzZXNyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0UHVsc2VTcmMsIGdzdF9wdWxzZXNyYywgR1NUX1RZUEVfQVVESU9fU1JDLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfU1RSRUFNX1ZPTFVNRSwgTlVMTCkpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX2NsYXNzX2luaXQgKEdzdFB1bHNlU3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QXVkaW9TcmNDbGFzcyAqZ3N0YXVkaW9zcmNfY2xhc3MgPSBHU1RfQVVESU9fU1JDX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzcyA9IEdTVF9CQVNFX1NSQ19DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBnY2hhciAqY2xpZW50bmFtZTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9wdWxzZXNyY19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3B1bHNlc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3B1bHNlc3JjX2dldF9wcm9wZXJ0eTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXNyY19jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdGJhc2VzcmNfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXNyY19ldmVudCk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPm5lZ290aWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzcmNfbmVnb3RpYXRlKTsKLQotICBnc3RhdWRpb3NyY19jbGFzcy0+b3BlbiA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzcmNfb3Blbik7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5jbG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzcmNfY2xvc2UpOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cHJlcGFyZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzcmNfcHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT51bnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3B1bHNlc3JjX3VucHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5yZWFkID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXNyY19yZWFkKTsKLSAgZ3N0YXVkaW9zcmNfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdWxzZXNyY19kZWxheSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5yZXNldCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVsc2VzcmNfcmVzZXQpOwotCi0gIC8qIE92ZXJ3cml0ZSBHT2JqZWN0IGZpZWxkcyAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9TRVJWRVIsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic2VydmVyIiwgIlNlcnZlciIsCi0gICAgICAgICAgIlRoZSBQdWxzZUF1ZGlvIHNlcnZlciB0byBjb25uZWN0IHRvIiwgREVGQVVMVF9TRVJWRVIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERVZJQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlIiwgIkRldmljZSIsCi0gICAgICAgICAgIlRoZSBQdWxzZUF1ZGlvIHNvdXJjZSBkZXZpY2UgdG8gY29ubmVjdCB0byIsIERFRkFVTFRfREVWSUNFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VSUkVOVF9ERVZJQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiY3VycmVudC1kZXZpY2UiLCAiQ3VycmVudCBEZXZpY2UiLAotICAgICAgICAgICJUaGUgY3VycmVudCBQdWxzZUF1ZGlvIHNvdXJjZSBkZXZpY2UiLCBERUZBVUxUX0NVUlJFTlRfREVWSUNFLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfREVWSUNFX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlLW5hbWUiLCAiRGV2aWNlIG5hbWUiLAotICAgICAgICAgICJIdW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoZSBzb3VuZCBkZXZpY2UiLCBERUZBVUxUX0RFVklDRV9OQU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgY2xpZW50bmFtZSA9IGdzdF9wdWxzZV9jbGllbnRfbmFtZSAoKTsKLSAgLyoqCi0gICAqIEdzdFB1bHNlU3JjOmNsaWVudC1uYW1lCi0gICAqCi0gICAqIFRoZSBQdWxzZUF1ZGlvIGNsaWVudCBuYW1lIHRvIHVzZS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX0NMSUVOVF9OQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImNsaWVudC1uYW1lIiwgIkNsaWVudCBOYW1lIiwKLSAgICAgICAgICAiVGhlIFB1bHNlQXVkaW8gY2xpZW50X25hbWVfdG9fdXNlIiwgY2xpZW50bmFtZSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZKSk7Ci0gIGdfZnJlZSAoY2xpZW50bmFtZSk7Ci0KLSAgLyoqCi0gICAqIEdzdFB1bHNlU3JjOnN0cmVhbS1wcm9wZXJ0aWVzOgotICAgKgotICAgKiBMaXN0IG9mIHB1bHNlYXVkaW8gc3RyZWFtIHByb3BlcnRpZXMuIEEgbGlzdCBvZiBkZWZpbmVkIHByb3BlcnRpZXMgY2FuIGJlCi0gICAqIGZvdW5kIGluIHRoZSA8dWxpbmsgaHJlZj0iaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvcHVsc2VhdWRpby9kb3h5Z2VuL3Byb3BsaXN0XzhoLmh0bWwiPnB1bHNlYXVkaW8gYXBpIGRvY3M8L3VsaW5rPi4KLSAgICoKLSAgICogQmVsb3cgaXMgYW4gZXhhbXBsZSBmb3IgcmVnaXN0ZXJpbmcgYXMgYSBtdXNpYyBhcHBsaWNhdGlvbiB0byBwdWxzZWF1ZGlvLgotICAgKiB8WwotICAgKiBHc3RTdHJ1Y3R1cmUgKnByb3BzOwotICAgKgotICAgKiBwcm9wcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCJwcm9wcyxtZWRpYS5yb2xlPW11c2ljIiwgTlVMTCk7Ci0gICAqIGdfb2JqZWN0X3NldCAocHVsc2UsICJzdHJlYW0tcHJvcGVydGllcyIsIHByb3BzLCBOVUxMKTsKLSAgICogZ3N0X3N0cnVjdHVyZV9mcmVlIChwcm9wcyk7Ci0gICAqIF18Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9TVFJFQU1fUFJPUEVSVElFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoInN0cmVhbS1wcm9wZXJ0aWVzIiwgInN0cmVhbSBwcm9wZXJ0aWVzIiwKLSAgICAgICAgICAibGlzdCBvZiBwdWxzZWF1ZGlvIHN0cmVhbSBwcm9wZXJ0aWVzIiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0UHVsc2VTcmM6c291cmNlLW91dHB1dC1pbmRleDoKLSAgICoKLSAgICogVGhlIGluZGV4IG9mIHRoZSBQdWxzZUF1ZGlvIHNvdXJjZSBvdXRwdXQgY29ycmVzcG9uZGluZyB0byB0aGlzIGVsZW1lbnQuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9TT1VSQ0VfT1VUUFVUX0lOREVYLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJzb3VyY2Utb3V0cHV0LWluZGV4IiwgInNvdXJjZSBvdXRwdXQgaW5kZXgiLAotICAgICAgICAgICJUaGUgaW5kZXggb2YgdGhlIFB1bHNlQXVkaW8gc291cmNlIG91dHB1dCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgIgotICAgICAgICAgICJyZWNvcmQgc3RyZWFtIiwgMCwgR19NQVhVSU5ULCBQQV9JTlZBTElEX0lOREVYLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJQdWxzZUF1ZGlvIEF1ZGlvIFNvdXJjZSIsCi0gICAgICAiU291cmNlL0F1ZGlvIiwKLSAgICAgICJDYXB0dXJlcyBhdWRpbyBmcm9tIGEgUHVsc2VBdWRpbyBzZXJ2ZXIiLCAiTGVubmFydCBQb2V0dGVyaW5nIik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmcGFkX3RlbXBsYXRlKTsKLQotICAvKioKLSAgICogR3N0UHVsc2VTcmM6dm9sdW1lOgotICAgKgotICAgKiBUaGUgdm9sdW1lIG9mIHRoZSByZWNvcmQgc3RyZWFtLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfVk9MVU1FLCBnX3BhcmFtX3NwZWNfZG91YmxlICgidm9sdW1lIiwgIlZvbHVtZSIsCi0gICAgICAgICAgIkxpbmVhciB2b2x1bWUgb2YgdGhpcyBzdHJlYW0sIDEuMD0xMDAlIiwKLSAgICAgICAgICAwLjAsIE1BWF9WT0xVTUUsIERFRkFVTFRfVk9MVU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RQdWxzZVNyYzptdXRlOgotICAgKgotICAgKiBXaGV0aGVyIHRoZSBzdHJlYW0gaXMgbXV0ZWQgb3Igbm90LgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfTVVURSwgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJtdXRlIiwgIk11dGUiLAotICAgICAgICAgICJNdXRlIHN0YXRlIG9mIHRoaXMgc3RyZWFtIiwKLSAgICAgICAgICBERUZBVUxUX01VVEUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX2luaXQgKEdzdFB1bHNlU3JjICogcHVsc2VzcmMpCi17Ci0gIHB1bHNlc3JjLT5zZXJ2ZXIgPSBOVUxMOwotICBwdWxzZXNyYy0+ZGV2aWNlID0gTlVMTDsKLSAgcHVsc2VzcmMtPmNsaWVudF9uYW1lID0gZ3N0X3B1bHNlX2NsaWVudF9uYW1lICgpOwotICBwdWxzZXNyYy0+ZGV2aWNlX2Rlc2NyaXB0aW9uID0gTlVMTDsKLQotICBwdWxzZXNyYy0+Y29udGV4dCA9IE5VTEw7Ci0gIHB1bHNlc3JjLT5zdHJlYW0gPSBOVUxMOwotICBwdWxzZXNyYy0+c3RyZWFtX2Nvbm5lY3RlZCA9IEZBTFNFOwotICBwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHggPSBQQV9JTlZBTElEX0lOREVYOwotCi0gIHB1bHNlc3JjLT5yZWFkX2J1ZmZlciA9IE5VTEw7Ci0gIHB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGggPSAwOwotCi0gIHBhX3NhbXBsZV9zcGVjX2luaXQgKCZwdWxzZXNyYy0+c2FtcGxlX3NwZWMpOwotCi0gIHB1bHNlc3JjLT5vcGVyYXRpb25fc3VjY2VzcyA9IEZBTFNFOwotICBwdWxzZXNyYy0+cGF1c2VkID0gVFJVRTsKLSAgcHVsc2VzcmMtPmluX3JlYWQgPSBGQUxTRTsKLQotICBwdWxzZXNyYy0+dm9sdW1lID0gREVGQVVMVF9WT0xVTUU7Ci0gIHB1bHNlc3JjLT52b2x1bWVfc2V0ID0gRkFMU0U7Ci0KLSAgcHVsc2VzcmMtPm11dGUgPSBERUZBVUxUX01VVEU7Ci0gIHB1bHNlc3JjLT5tdXRlX3NldCA9IEZBTFNFOwotCi0gIHB1bHNlc3JjLT5ub3RpZnkgPSAwOwotCi0gIHB1bHNlc3JjLT5wcm9wZXJ0aWVzID0gTlVMTDsKLSAgcHVsc2VzcmMtPnByb3BsaXN0ID0gTlVMTDsKLQotICAvKiB0aGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBidXQgaXQgaXNuJ3QgeWV0ICovCi0gIGdzdF9hdWRpb19iYXNlX3NyY19zZXRfc2xhdmVfbWV0aG9kIChHU1RfQVVESU9fQkFTRV9TUkMgKHB1bHNlc3JjKSwKLSAgICAgIEdTVF9BVURJT19CQVNFX1NSQ19TTEFWRV9TS0VXKTsKLQotICAvKiBvdmVycmlkZSB3aXRoIGEgY3VzdG9tIGNsb2NrICovCi0gIGlmIChHU1RfQVVESU9fQkFTRV9TUkMgKHB1bHNlc3JjKS0+Y2xvY2spCi0gICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX0FVRElPX0JBU0VfU1JDIChwdWxzZXNyYyktPmNsb2NrKTsKLQotICBHU1RfQVVESU9fQkFTRV9TUkMgKHB1bHNlc3JjKS0+Y2xvY2sgPQotICAgICAgZ3N0X2F1ZGlvX2Nsb2NrX25ldyAoIkdzdFB1bHNlU3JjQ2xvY2siLAotICAgICAgKEdzdEF1ZGlvQ2xvY2tHZXRUaW1lRnVuYykgZ3N0X3B1bHNlc3JjX2dldF90aW1lLCBwdWxzZXNyYywgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzcmNfZGVzdHJveV9zdHJlYW0gKEdzdFB1bHNlU3JjICogcHVsc2VzcmMpCi17Ci0gIGlmIChwdWxzZXNyYy0+c3RyZWFtKSB7Ci0gICAgcGFfc3RyZWFtX2Rpc2Nvbm5lY3QgKHB1bHNlc3JjLT5zdHJlYW0pOwotICAgIHBhX3N0cmVhbV91bnJlZiAocHVsc2VzcmMtPnN0cmVhbSk7Ci0gICAgcHVsc2VzcmMtPnN0cmVhbSA9IE5VTEw7Ci0gICAgcHVsc2VzcmMtPnN0cmVhbV9jb25uZWN0ZWQgPSBGQUxTRTsKLSAgICBwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHggPSBQQV9JTlZBTElEX0lOREVYOwotICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHB1bHNlc3JjKSwgInNvdXJjZS1vdXRwdXQtaW5kZXgiKTsKLSAgfQotCi0gIGdfZnJlZSAocHVsc2VzcmMtPmRldmljZV9kZXNjcmlwdGlvbik7Ci0gIHB1bHNlc3JjLT5kZXZpY2VfZGVzY3JpcHRpb24gPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX2Rlc3Ryb3lfY29udGV4dCAoR3N0UHVsc2VTcmMgKiBwdWxzZXNyYykKLXsKLQotICBnc3RfcHVsc2VzcmNfZGVzdHJveV9zdHJlYW0gKHB1bHNlc3JjKTsKLQotICBpZiAocHVsc2VzcmMtPmNvbnRleHQpIHsKLSAgICBwYV9jb250ZXh0X2Rpc2Nvbm5lY3QgKHB1bHNlc3JjLT5jb250ZXh0KTsKLQotICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYW55IGZ1cnRoZXIgY2FsbGJhY2tzICovCi0gICAgcGFfY29udGV4dF9zZXRfc3RhdGVfY2FsbGJhY2sgKHB1bHNlc3JjLT5jb250ZXh0LCBOVUxMLCBOVUxMKTsKLSAgICBwYV9jb250ZXh0X3NldF9zdWJzY3JpYmVfY2FsbGJhY2sgKHB1bHNlc3JjLT5jb250ZXh0LCBOVUxMLCBOVUxMKTsKLQotICAgIHBhX2NvbnRleHRfdW5yZWYgKHB1bHNlc3JjLT5jb250ZXh0KTsKLQotICAgIHB1bHNlc3JjLT5jb250ZXh0ID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RQdWxzZVNyYyAqcHVsc2VzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAob2JqZWN0KTsKLQotICBnX2ZyZWUgKHB1bHNlc3JjLT5zZXJ2ZXIpOwotICBnX2ZyZWUgKHB1bHNlc3JjLT5kZXZpY2UpOwotICBnX2ZyZWUgKHB1bHNlc3JjLT5jbGllbnRfbmFtZSk7Ci0gIGdfZnJlZSAocHVsc2VzcmMtPmN1cnJlbnRfc291cmNlX25hbWUpOwotCi0gIGlmIChwdWxzZXNyYy0+cHJvcGVydGllcykKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHB1bHNlc3JjLT5wcm9wZXJ0aWVzKTsKLSAgaWYgKHB1bHNlc3JjLT5wcm9wbGlzdCkKLSAgICBwYV9wcm9wbGlzdF9mcmVlIChwdWxzZXNyYy0+cHJvcGxpc3QpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotI2RlZmluZSBDT05URVhUX09LKGMpICgoYykgJiYgUEFfQ09OVEVYVF9JU19HT09EIChwYV9jb250ZXh0X2dldF9zdGF0ZSAoKGMpKSkpCi0jZGVmaW5lIFNUUkVBTV9PSyhzKSAoKHMpICYmIFBBX1NUUkVBTV9JU19HT09EIChwYV9zdHJlYW1fZ2V0X3N0YXRlICgocykpKSkKLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzcmNfaXNfZGVhZCAoR3N0UHVsc2VTcmMgKiBwdWxzZXNyYywgZ2Jvb2xlYW4gY2hlY2tfc3RyZWFtKQotewotICBpZiAoIXB1bHNlc3JjLT5zdHJlYW1fY29ubmVjdGVkKQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmICghQ09OVEVYVF9PSyAocHVsc2VzcmMtPmNvbnRleHQpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKGNoZWNrX3N0cmVhbSAmJiAhU1RSRUFNX09LIChwdWxzZXNyYy0+c3RyZWFtKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIHJldHVybiBGQUxTRTsKLQotZXJyb3I6Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqZXJyX3N0ciA9IHB1bHNlc3JjLT5jb250ZXh0ID8KLSAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkgOiBOVUxMOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SICgocHVsc2VzcmMpLCBSRVNPVVJDRSwgRkFJTEVELCAoIkRpc2Nvbm5lY3RlZDogJXMiLAotICAgICAgICAgICAgZXJyX3N0ciksIChOVUxMKSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19zb3VyY2VfaW5mb19jYiAocGFfY29udGV4dCAqIGMsIGNvbnN0IHBhX3NvdXJjZV9pbmZvICogaSwgaW50IGVvbCwKLSAgICB2b2lkICp1c2VyZGF0YSkKLXsKLSAgR3N0UHVsc2VTcmMgKnB1bHNlc3JjID0gR1NUX1BVTFNFU1JDX0NBU1QgKHVzZXJkYXRhKTsKLQotICBpZiAoIWkpCi0gICAgZ290byBkb25lOwotCi0gIGdfZnJlZSAocHVsc2VzcmMtPmRldmljZV9kZXNjcmlwdGlvbik7Ci0gIHB1bHNlc3JjLT5kZXZpY2VfZGVzY3JpcHRpb24gPSBnX3N0cmR1cCAoaS0+ZGVzY3JpcHRpb24pOwotCi1kb25lOgotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKHB1bHNlc3JjLT5tYWlubG9vcCwgMCk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfcHVsc2VzcmNfZGV2aWNlX2Rlc2NyaXB0aW9uIChHc3RQdWxzZVNyYyAqIHB1bHNlc3JjKQotewotICBwYV9vcGVyYXRpb24gKm8gPSBOVUxMOwotICBnY2hhciAqdDsKLQotICBpZiAoIXB1bHNlc3JjLT5tYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgaWYgKCEobyA9IHBhX2NvbnRleHRfZ2V0X3NvdXJjZV9pbmZvX2J5X25hbWUgKHB1bHNlc3JjLT5jb250ZXh0LAotICAgICAgICAgICAgICBwdWxzZXNyYy0+ZGV2aWNlLCBnc3RfcHVsc2VzcmNfc291cmNlX2luZm9fY2IsIHB1bHNlc3JjKSkpIHsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fZ2V0X3NvdXJjZV9pbmZvKCkgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocHVsc2VzcmMtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLQotICB3aGlsZSAocGFfb3BlcmF0aW9uX2dldF9zdGF0ZSAobykgPT0gUEFfT1BFUkFUSU9OX1JVTk5JTkcpIHsKLQotICAgIGlmIChnc3RfcHVsc2VzcmNfaXNfZGVhZCAocHVsc2VzcmMsIEZBTFNFKSkKLSAgICAgIGdvdG8gdW5sb2NrOwotCi0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdCAocHVsc2VzcmMtPm1haW5sb29wKTsKLSAgfQotCi11bmxvY2s6Ci0KLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICB0ID0gZ19zdHJkdXAgKHB1bHNlc3JjLT5kZXZpY2VfZGVzY3JpcHRpb24pOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICByZXR1cm4gdDsKLQotbm9fbWFpbmxvb3A6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgImhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX3NvdXJjZV9vdXRwdXRfaW5mb19jYiAocGFfY29udGV4dCAqIGMsCi0gICAgY29uc3QgcGFfc291cmNlX291dHB1dF9pbmZvICogaSwgaW50IGVvbCwgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlU3JjICpwc3JjOwotCi0gIHBzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAodXNlcmRhdGEpOwotCi0gIGlmICghaSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogSWYgdGhlIGluZGV4IGRvZXNuJ3QgbWF0Y2ggb3VyIGN1cnJlbnQgc3RyZWFtLAotICAgKiBpdCBpbXBsaWVzIHdlIGp1c3QgcmVjcmVhdGVkIHRoZSBzdHJlYW0gKGNhcHMgY2hhbmdlKQotICAgKi8KLSAgaWYgKGktPmluZGV4ID09IHBzcmMtPnNvdXJjZV9vdXRwdXRfaWR4KSB7Ci0gICAgcHNyYy0+dm9sdW1lID0gcGFfc3dfdm9sdW1lX3RvX2xpbmVhciAocGFfY3ZvbHVtZV9tYXggKCZpLT52b2x1bWUpKTsKLSAgICBwc3JjLT5tdXRlID0gaS0+bXV0ZTsKLSAgICBwc3JjLT5jdXJyZW50X3NvdXJjZV9pZHggPSBpLT5zb3VyY2U7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAocHNyYy0+dm9sdW1lID4gTUFYX1ZPTFVNRSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocHNyYywgIkNsaXBwZWQgdm9sdW1lIGZyb20gJWYgdG8gJWYiLAotICAgICAgICAgIHBzcmMtPnZvbHVtZSwgTUFYX1ZPTFVNRSk7Ci0gICAgICBwc3JjLT52b2x1bWUgPSBNQVhfVk9MVU1FOwotICAgIH0KLSAgfQotCi1kb25lOgotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKHBzcmMtPm1haW5sb29wLCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19nZXRfc291cmNlX291dHB1dF9pbmZvIChHc3RQdWxzZVNyYyAqIHB1bHNlc3JjLCBnZG91YmxlICogdm9sdW1lLAotICAgIGdib29sZWFuICogbXV0ZSkKLXsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLQotICBpZiAoIXB1bHNlc3JjLT5tYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIGlmIChwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHggPT0gUEFfSU5WQUxJRF9JTkRFWCkKLSAgICBnb3RvIG5vX2luZGV4OwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgaWYgKCEobyA9IHBhX2NvbnRleHRfZ2V0X3NvdXJjZV9vdXRwdXRfaW5mbyAocHVsc2VzcmMtPmNvbnRleHQsCi0gICAgICAgICAgICAgIHB1bHNlc3JjLT5zb3VyY2Vfb3V0cHV0X2lkeCwgZ3N0X3B1bHNlc3JjX3NvdXJjZV9vdXRwdXRfaW5mb19jYiwKLSAgICAgICAgICAgICAgcHVsc2VzcmMpKSkKLSAgICBnb3RvIGluZm9fZmFpbGVkOwotCi0gIHdoaWxlIChwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChvKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3dhaXQgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0gICAgaWYgKGdzdF9wdWxzZXNyY19pc19kZWFkIChwdWxzZXNyYywgVFJVRSkpCi0gICAgICBnb3RvIHVubG9jazsKLSAgfQotCi11bmxvY2s6Ci0KLSAgaWYgKHZvbHVtZSkKLSAgICAqdm9sdW1lID0gcHVsc2VzcmMtPnZvbHVtZTsKLSAgaWYgKG11dGUpCi0gICAgKm11dGUgPSBwdWxzZXNyYy0+bXV0ZTsKLQotICBpZiAobykKLSAgICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1ub19tYWlubG9vcDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc3JjLCAid2UgaGF2ZSBubyBtYWlubG9vcCIpOwotICAgIGlmICh2b2x1bWUpCi0gICAgICAqdm9sdW1lID0gcHVsc2VzcmMtPnZvbHVtZTsKLSAgICBpZiAobXV0ZSkKLSAgICAgICptdXRlID0gcHVsc2VzcmMtPm11dGU7Ci0gICAgcmV0dXJuOwotICB9Ci1ub19pbmRleDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc3JjLCAid2UgZG9uJ3QgaGF2ZSBhIHN0cmVhbSBpbmRleCIpOwotICAgIGlmICh2b2x1bWUpCi0gICAgICAqdm9sdW1lID0gcHVsc2VzcmMtPnZvbHVtZTsKLSAgICBpZiAobXV0ZSkKLSAgICAgICptdXRlID0gcHVsc2VzcmMtPm11dGU7Ci0gICAgcmV0dXJuOwotICB9Ci1pbmZvX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9jb250ZXh0X2dldF9zb3VyY2Vfb3V0cHV0X2luZm8oKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwdWxzZXNyYy0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX2N1cnJlbnRfc291cmNlX2luZm9fY2IgKHBhX2NvbnRleHQgKiBjLCBjb25zdCBwYV9zb3VyY2VfaW5mbyAqIGksCi0gICAgaW50IGVvbCwgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlU3JjICpwc3JjOwotCi0gIHBzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAodXNlcmRhdGEpOwotCi0gIGlmICghaSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogSWYgdGhlIGluZGV4IGRvZXNuJ3QgbWF0Y2ggb3VyIGN1cnJlbnQgc3RyZWFtLAotICAgKiBpdCBpbXBsaWVzIHdlIGp1c3QgcmVjcmVhdGVkIHRoZSBzdHJlYW0gKGNhcHMgY2hhbmdlKQotICAgKi8KLSAgaWYgKGktPmluZGV4ID09IHBzcmMtPmN1cnJlbnRfc291cmNlX2lkeCkgewotICAgIGdfZnJlZSAocHNyYy0+Y3VycmVudF9zb3VyY2VfbmFtZSk7Ci0gICAgcHNyYy0+Y3VycmVudF9zb3VyY2VfbmFtZSA9IGdfc3RyZHVwIChpLT5uYW1lKTsKLSAgfQotCi1kb25lOgotICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKHBzcmMtPm1haW5sb29wLCAwKTsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9wdWxzZXNyY19nZXRfY3VycmVudF9kZXZpY2UgKEdzdFB1bHNlU3JjICogcHVsc2VzcmMpCi17Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIGdjaGFyICpjdXJyZW50X3NyYzsKLQotICBpZiAoIXB1bHNlc3JjLT5tYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIGlmIChwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHggPT0gUEFfSU5WQUxJRF9JTkRFWCkKLSAgICBnb3RvIG5vX2luZGV4OwotCi0gIGdzdF9wdWxzZXNyY19nZXRfc291cmNlX291dHB1dF9pbmZvIChwdWxzZXNyYywgTlVMTCwgTlVMTCk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotCi0gIGlmICghKG8gPSBwYV9jb250ZXh0X2dldF9zb3VyY2VfaW5mb19ieV9pbmRleCAocHVsc2VzcmMtPmNvbnRleHQsCi0gICAgICAgICAgICAgIHB1bHNlc3JjLT5jdXJyZW50X3NvdXJjZV9pZHgsIGdzdF9wdWxzZXNyY19jdXJyZW50X3NvdXJjZV9pbmZvX2NiLAotICAgICAgICAgICAgICBwdWxzZXNyYykpKQotICAgIGdvdG8gaW5mb19mYWlsZWQ7Ci0KLSAgd2hpbGUgKHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKG8pID09IFBBX09QRVJBVElPTl9SVU5OSU5HKSB7Ci0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdCAocHVsc2VzcmMtPm1haW5sb29wKTsKLSAgICBpZiAoZ3N0X3B1bHNlc3JjX2lzX2RlYWQgKHB1bHNlc3JjLCBUUlVFKSkKLSAgICAgIGdvdG8gdW5sb2NrOwotICB9Ci0KLXVubG9jazoKLQotICBjdXJyZW50X3NyYyA9IGdfc3RyZHVwIChwdWxzZXNyYy0+Y3VycmVudF9zb3VyY2VfbmFtZSk7Ci0KLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuIGN1cnJlbnRfc3JjOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbWFpbmxvb3A6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbm9faW5kZXg6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgIndlIGRvbid0IGhhdmUgYSBzdHJlYW0gaW5kZXgiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotaW5mb19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHVsc2VzcmMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfY29udGV4dF9nZXRfc291cmNlX291dHB1dF9pbmZvKCkgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocHVsc2VzcmMtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2s7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19zZXRfc3RyZWFtX3ZvbHVtZSAoR3N0UHVsc2VTcmMgKiBwdWxzZXNyYywgZ2RvdWJsZSB2b2x1bWUpCi17Ci0gIHBhX2N2b2x1bWUgdjsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLQotICBpZiAoIXB1bHNlc3JjLT5tYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIGlmICghcHVsc2VzcmMtPnNvdXJjZV9vdXRwdXRfaWR4KQotICAgIGdvdG8gbm9faW5kZXg7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgInNldHRpbmcgdm9sdW1lIHRvICVmIiwgdm9sdW1lKTsKLQotICBnc3RfcHVsc2VfY3ZvbHVtZV9mcm9tX2xpbmVhciAoJnYsIHB1bHNlc3JjLT5zYW1wbGVfc3BlYy5jaGFubmVscywgdm9sdW1lKTsKLQotICBpZiAoIShvID0gcGFfY29udGV4dF9zZXRfc291cmNlX291dHB1dF92b2x1bWUgKHB1bHNlc3JjLT5jb250ZXh0LAotICAgICAgICAgICAgICBwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHgsICZ2LCBOVUxMLCBOVUxMKSkpCi0gICAgZ290byB2b2x1bWVfZmFpbGVkOwotCi0gIC8qIFdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSByZXN1bHQgb2YgdGhpcyBjYWxsICovCi11bmxvY2s6Ci0KLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbWFpbmxvb3A6Ci0gIHsKLSAgICBwdWxzZXNyYy0+dm9sdW1lID0gdm9sdW1lOwotICAgIHB1bHNlc3JjLT52b2x1bWVfc2V0ID0gVFJVRTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm47Ci0gIH0KLW5vX2luZGV4OgotICB7Ci0gICAgcHVsc2VzcmMtPnZvbHVtZSA9IHZvbHVtZTsKLSAgICBwdWxzZXNyYy0+dm9sdW1lX3NldCA9IFRSVUU7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHVsc2VzcmMsICJ3ZSBkb24ndCBoYXZlIGEgc3RyZWFtIGluZGV4Iik7Ci0gICAgcmV0dXJuOwotICB9Ci12b2x1bWVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc3JjLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoInBhX3N0cmVhbV9zZXRfc291cmNlX291dHB1dF92b2x1bWUoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwdWxzZXNyYy0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX3NldF9zdHJlYW1fbXV0ZSAoR3N0UHVsc2VTcmMgKiBwdWxzZXNyYywgZ2Jvb2xlYW4gbXV0ZSkKLXsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLQotICBpZiAoIXB1bHNlc3JjLT5tYWlubG9vcCkKLSAgICBnb3RvIG5vX21haW5sb29wOwotCi0gIGlmICghcHVsc2VzcmMtPnNvdXJjZV9vdXRwdXRfaWR4KQotICAgIGdvdG8gbm9faW5kZXg7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgInNldHRpbmcgbXV0ZSBzdGF0ZSB0byAlZCIsIG11dGUpOwotCi0gIGlmICghKG8gPSBwYV9jb250ZXh0X3NldF9zb3VyY2Vfb3V0cHV0X211dGUgKHB1bHNlc3JjLT5jb250ZXh0LAotICAgICAgICAgICAgICBwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHgsIG11dGUsIE5VTEwsIE5VTEwpKSkKLSAgICBnb3RvIG11dGVfZmFpbGVkOwotCi0gIC8qIFdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSByZXN1bHQgb2YgdGhpcyBjYWxsICovCi11bmxvY2s6Ci0KLSAgaWYgKG8pCi0gICAgcGFfb3BlcmF0aW9uX3VucmVmIChvKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbWFpbmxvb3A6Ci0gIHsKLSAgICBwdWxzZXNyYy0+bXV0ZSA9IG11dGU7Ci0gICAgcHVsc2VzcmMtPm11dGVfc2V0ID0gVFJVRTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgIndlIGhhdmUgbm8gbWFpbmxvb3AiKTsKLSAgICByZXR1cm47Ci0gIH0KLW5vX2luZGV4OgotICB7Ci0gICAgcHVsc2VzcmMtPm11dGUgPSBtdXRlOwotICAgIHB1bHNlc3JjLT5tdXRlX3NldCA9IFRSVUU7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHVsc2VzcmMsICJ3ZSBkb24ndCBoYXZlIGEgc3RyZWFtIGluZGV4Iik7Ci0gICAgcmV0dXJuOwotICB9Ci1tdXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fc2V0X3NvdXJjZV9vdXRwdXRfbXV0ZSgpIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzcmNfc2V0X3N0cmVhbV9kZXZpY2UgKEdzdFB1bHNlU3JjICogcHVsc2VzcmMsIGNvbnN0IGdjaGFyICogZGV2aWNlKQotewotICBwYV9vcGVyYXRpb24gKm8gPSBOVUxMOwotCi0gIGlmICghcHVsc2VzcmMtPm1haW5sb29wKQotICAgIGdvdG8gbm9fbWFpbmxvb3A7Ci0KLSAgaWYgKCFwdWxzZXNyYy0+c291cmNlX291dHB1dF9pZHgpCi0gICAgZ290byBub19pbmRleDsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc3JjLCAic2V0dGluZyBzdHJlYW0gZGV2aWNlIHRvICVzIiwgZGV2aWNlKTsKLQotICBpZiAoIShvID0gcGFfY29udGV4dF9tb3ZlX3NvdXJjZV9vdXRwdXRfYnlfbmFtZSAocHVsc2VzcmMtPmNvbnRleHQsCi0gICAgICAgICAgICAgIHB1bHNlc3JjLT5zb3VyY2Vfb3V0cHV0X2lkeCwgZGV2aWNlLCBOVUxMLCBOVUxMKSkpCi0gICAgZ290byBtb3ZlX2ZhaWxlZDsKLQotdW5sb2NrOgotCi0gIGlmIChvKQotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLW5vX21haW5sb29wOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocHVsc2VzcmMsICJ3ZSBoYXZlIG5vIG1haW5sb29wIik7Ci0gICAgcmV0dXJuOwotICB9Ci1ub19pbmRleDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc3JjLCAid2UgZG9uJ3QgaGF2ZSBhIHN0cmVhbSBpbmRleCIpOwotICAgIHJldHVybjsKLSAgfQotbW92ZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHVsc2VzcmMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfY29udGV4dF9tb3ZlX3NvdXJjZV9vdXRwdXRfYnlfbmFtZSglcykgZmFpbGVkOiAlcyIsCi0gICAgICAgICAgICBkZXZpY2UsIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwdWxzZXNyYy0+Y29udGV4dCkpKSwKLSAgICAgICAgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9jazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotCi0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TRVJWRVI6Ci0gICAgICBnX2ZyZWUgKHB1bHNlc3JjLT5zZXJ2ZXIpOwotICAgICAgcHVsc2VzcmMtPnNlcnZlciA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFVklDRToKLSAgICAgIGdfZnJlZSAocHVsc2VzcmMtPmRldmljZSk7Ci0gICAgICBwdWxzZXNyYy0+ZGV2aWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBnc3RfcHVsc2VzcmNfc2V0X3N0cmVhbV9kZXZpY2UgKHB1bHNlc3JjLCBwdWxzZXNyYy0+ZGV2aWNlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTElFTlRfTkFNRToKLSAgICAgIGdfZnJlZSAocHVsc2VzcmMtPmNsaWVudF9uYW1lKTsKLSAgICAgIGlmICghZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwdWxzZXNyYywKLSAgICAgICAgICAgICJFbXB0eSBQdWxzZUF1ZGlvIGNsaWVudCBuYW1lIG5vdCBhbGxvd2VkLiBSZXNldHRpbmcgdG8gZGVmYXVsdCB2YWx1ZSIpOwotICAgICAgICBwdWxzZXNyYy0+Y2xpZW50X25hbWUgPSBnc3RfcHVsc2VfY2xpZW50X25hbWUgKCk7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgcHVsc2VzcmMtPmNsaWVudF9uYW1lID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSRUFNX1BST1BFUlRJRVM6Ci0gICAgICBpZiAocHVsc2VzcmMtPnByb3BlcnRpZXMpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHVsc2VzcmMtPnByb3BlcnRpZXMpOwotICAgICAgcHVsc2VzcmMtPnByb3BlcnRpZXMgPQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAoZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUgKHZhbHVlKSk7Ci0gICAgICBpZiAocHVsc2VzcmMtPnByb3BsaXN0KQotICAgICAgICBwYV9wcm9wbGlzdF9mcmVlIChwdWxzZXNyYy0+cHJvcGxpc3QpOwotICAgICAgcHVsc2VzcmMtPnByb3BsaXN0ID0gZ3N0X3B1bHNlX21ha2VfcHJvcGxpc3QgKHB1bHNlc3JjLT5wcm9wZXJ0aWVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9WT0xVTUU6Ci0gICAgICBnc3RfcHVsc2VzcmNfc2V0X3N0cmVhbV92b2x1bWUgKHB1bHNlc3JjLCBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVURToKLSAgICAgIGdzdF9wdWxzZXNyY19zZXRfc3RyZWFtX211dGUgKHB1bHNlc3JjLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotCi0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TRVJWRVI6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwdWxzZXNyYy0+c2VydmVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwdWxzZXNyYy0+ZGV2aWNlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DVVJSRU5UX0RFVklDRToKLSAgICB7Ci0gICAgICBnY2hhciAqY3VycmVudF9kZXZpY2UgPSBnc3RfcHVsc2VzcmNfZ2V0X2N1cnJlbnRfZGV2aWNlIChwdWxzZXNyYyk7Ci0gICAgICBpZiAoY3VycmVudF9kZXZpY2UpCi0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKHZhbHVlLCBjdXJyZW50X2RldmljZSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsICIiKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfREVWSUNFX05BTUU6Ci0gICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgZ3N0X3B1bHNlc3JjX2RldmljZV9kZXNjcmlwdGlvbiAocHVsc2VzcmMpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTElFTlRfTkFNRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHB1bHNlc3JjLT5jbGllbnRfbmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSRUFNX1BST1BFUlRJRVM6Ci0gICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSAodmFsdWUsIHB1bHNlc3JjLT5wcm9wZXJ0aWVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TT1VSQ0VfT1VUUFVUX0lOREVYOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHB1bHNlc3JjLT5zb3VyY2Vfb3V0cHV0X2lkeCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVk9MVU1FOgotICAgIHsKLSAgICAgIGdkb3VibGUgdm9sdW1lOwotICAgICAgZ3N0X3B1bHNlc3JjX2dldF9zb3VyY2Vfb3V0cHV0X2luZm8gKHB1bHNlc3JjLCAmdm9sdW1lLCBOVUxMKTsKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHZvbHVtZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX01VVEU6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gbXV0ZTsKLSAgICAgIGdzdF9wdWxzZXNyY19nZXRfc291cmNlX291dHB1dF9pbmZvIChwdWxzZXNyYywgTlVMTCwgJm11dGUpOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIG11dGUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19jb250ZXh0X3N0YXRlX2NiIChwYV9jb250ZXh0ICogYywgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUICh1c2VyZGF0YSk7Ci0KLSAgc3dpdGNoIChwYV9jb250ZXh0X2dldF9zdGF0ZSAoYykpIHsKLSAgICBjYXNlIFBBX0NPTlRFWFRfUkVBRFk6Ci0gICAgY2FzZSBQQV9DT05URVhUX1RFUk1JTkFURUQ6Ci0gICAgY2FzZSBQQV9DT05URVhUX0ZBSUxFRDoKLSAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX3NpZ25hbCAocHVsc2VzcmMtPm1haW5sb29wLCAwKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBQQV9DT05URVhUX1VOQ09OTkVDVEVEOgotICAgIGNhc2UgUEFfQ09OVEVYVF9DT05ORUNUSU5HOgotICAgIGNhc2UgUEFfQ09OVEVYVF9BVVRIT1JJWklORzoKLSAgICBjYXNlIFBBX0NPTlRFWFRfU0VUVElOR19OQU1FOgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19zdHJlYW1fc3RhdGVfY2IgKHBhX3N0cmVhbSAqIHMsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNyYyAqcHVsc2VzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAodXNlcmRhdGEpOwotCi0gIHN3aXRjaCAocGFfc3RyZWFtX2dldF9zdGF0ZSAocykpIHsKLQotICAgIGNhc2UgUEFfU1RSRUFNX1JFQURZOgotICAgIGNhc2UgUEFfU1RSRUFNX0ZBSUxFRDoKLSAgICBjYXNlIFBBX1NUUkVBTV9URVJNSU5BVEVEOgotICAgICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsIChwdWxzZXNyYy0+bWFpbmxvb3AsIDApOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBBX1NUUkVBTV9VTkNPTk5FQ1RFRDoKLSAgICBjYXNlIFBBX1NUUkVBTV9DUkVBVElORzoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzcmNfc3RyZWFtX3JlcXVlc3RfY2IgKHBhX3N0cmVhbSAqIHMsIHNpemVfdCBsZW5ndGgsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNyYyAqcHVsc2VzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAodXNlcmRhdGEpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwdWxzZXNyYywgImdvdCByZXF1ZXN0IGZvciBsZW5ndGggJSIgR19HU0laRV9GT1JNQVQsIGxlbmd0aCk7Ci0KLSAgaWYgKHB1bHNlc3JjLT5pbl9yZWFkKSB7Ci0gICAgLyogb25seSBzaWduYWwgd2hlbiByZWFkaW5nICovCi0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsIChwdWxzZXNyYy0+bWFpbmxvb3AsIDApOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzcmNfc3RyZWFtX2xhdGVuY3lfdXBkYXRlX2NiIChwYV9zdHJlYW0gKiBzLCB2b2lkICp1c2VyZGF0YSkKLXsKLSAgY29uc3QgcGFfdGltaW5nX2luZm8gKmluZm87Ci0gIHBhX3VzZWNfdCBzb3VyY2VfdXNlYzsKLQotICBpbmZvID0gcGFfc3RyZWFtX2dldF90aW1pbmdfaW5mbyAocyk7Ci0KLSAgaWYgKCFpbmZvKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKEdTVF9QVUxTRVNSQ19DQVNUICh1c2VyZGF0YSksCi0gICAgICAgICJsYXRlbmN5IHVwZGF0ZSAoaW5mb3JtYXRpb24gdW5rbm93bikiKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgc291cmNlX3VzZWMgPSBpbmZvLT5jb25maWd1cmVkX3NvdXJjZV91c2VjOwotCi0gIEdTVF9MT0dfT0JKRUNUIChHU1RfUFVMU0VTUkNfQ0FTVCAodXNlcmRhdGEpLAotICAgICAgImxhdGVuY3lfdXBkYXRlLCAlIiBHX0dVSU5UNjRfRk9STUFUICIsICVkOiUiIEdfR0lOVDY0X0ZPUk1BVCAiLCAlZDolIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLCAlIiBHX0dVSU5UNjRfRk9STUFUICIsICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBHU1RfVElNRVZBTF9UT19USU1FIChpbmZvLT50aW1lc3RhbXApLCBpbmZvLT53cml0ZV9pbmRleF9jb3JydXB0LAotICAgICAgaW5mby0+d3JpdGVfaW5kZXgsIGluZm8tPnJlYWRfaW5kZXhfY29ycnVwdCwgaW5mby0+cmVhZF9pbmRleCwKLSAgICAgIGluZm8tPnNvdXJjZV91c2VjLCBzb3VyY2VfdXNlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVsc2VzcmNfc3RyZWFtX3VuZGVyZmxvd19jYiAocGFfc3RyZWFtICogcywgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdTVF9XQVJOSU5HX09CSkVDVCAoR1NUX1BVTFNFU1JDX0NBU1QgKHVzZXJkYXRhKSwgIkdvdCB1bmRlcmZsb3ciKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19zdHJlYW1fb3ZlcmZsb3dfY2IgKHBhX3N0cmVhbSAqIHMsIHZvaWQgKnVzZXJkYXRhKQotewotICBHU1RfV0FSTklOR19PQkpFQ1QgKEdTVF9QVUxTRVNSQ19DQVNUICh1c2VyZGF0YSksICJHb3Qgb3ZlcmZsb3ciKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19jb250ZXh0X3N1YnNjcmliZV9jYiAocGFfY29udGV4dCAqIGMsCi0gICAgcGFfc3Vic2NyaXB0aW9uX2V2ZW50X3R5cGVfdCB0LCB1aW50MzJfdCBpZHgsIHZvaWQgKnVzZXJkYXRhKQotewotICBHc3RQdWxzZVNyYyAqcHNyYyA9IEdTVF9QVUxTRVNSQyAodXNlcmRhdGEpOwotCi0gIGlmICh0ICE9IChQQV9TVUJTQ1JJUFRJT05fRVZFTlRfU09VUkNFX09VVFBVVCB8IFBBX1NVQlNDUklQVElPTl9FVkVOVF9DSEFOR0UpCi0gICAgICAmJiB0ICE9IChQQV9TVUJTQ1JJUFRJT05fRVZFTlRfU09VUkNFX09VVFBVVCB8IFBBX1NVQlNDUklQVElPTl9FVkVOVF9ORVcpKQotICAgIHJldHVybjsKLQotICBpZiAoaWR4ICE9IHBzcmMtPnNvdXJjZV9vdXRwdXRfaWR4KQotICAgIHJldHVybjsKLQotICAvKiBBY3R1YWxseSB0aGlzIGV2ZW50IGlzIGFsc28gdHJpZ2dlcmVkIHdoZW4gb3RoZXIgcHJvcGVydGllcyBvZiB0aGUgc3RyZWFtCi0gICAqIGNoYW5nZSB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8gdGhlIHZvbHVtZS4gSG93ZXZlciBpdCBpcyBwcm9iYWJseSBjaGVhcGVyIHRvCi0gICAqIHNpZ25hbCB0aGUgY2hhbmdlIGhlcmUgYW5kIGNoZWNrIGZvciB0aGUgdm9sdW1lIHdoZW4gdGhlIEdPYmplY3QgcHJvcGVydHkKLSAgICogaXMgcmVhZCBpbnN0ZWFkIG9mIHF1ZXJ5aW5nIGl0IGFsd2F5cy4gKi8KLQotICAvKiBpbmZvcm0gc3RyZWFtaW5nIHRocmVhZCB0byBub3RpZnkgKi8KLSAgZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcHNyYy0+bm90aWZ5LCAwLCAxKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzcmNfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjKQotewotICBHc3RQdWxzZVNyYyAqcHVsc2VzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAoYXNyYyk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICBnX2Fzc2VydCAoIXB1bHNlc3JjLT5jb250ZXh0KTsKLSAgZ19hc3NlcnQgKCFwdWxzZXNyYy0+c3RyZWFtKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgIm9wZW5pbmcgZGV2aWNlIik7Ci0KLSAgaWYgKCEocHVsc2VzcmMtPmNvbnRleHQgPQotICAgICAgICAgIHBhX2NvbnRleHRfbmV3IChwYV90aHJlYWRlZF9tYWlubG9vcF9nZXRfYXBpIChwdWxzZXNyYy0+bWFpbmxvb3ApLAotICAgICAgICAgICAgICBwdWxzZXNyYy0+Y2xpZW50X25hbWUpKSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCJGYWlsZWQgdG8gY3JlYXRlIGNvbnRleHQiKSwKLSAgICAgICAgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotCi0gIHBhX2NvbnRleHRfc2V0X3N0YXRlX2NhbGxiYWNrIChwdWxzZXNyYy0+Y29udGV4dCwKLSAgICAgIGdzdF9wdWxzZXNyY19jb250ZXh0X3N0YXRlX2NiLCBwdWxzZXNyYyk7Ci0gIHBhX2NvbnRleHRfc2V0X3N1YnNjcmliZV9jYWxsYmFjayAocHVsc2VzcmMtPmNvbnRleHQsCi0gICAgICBnc3RfcHVsc2VzcmNfY29udGV4dF9zdWJzY3JpYmVfY2IsIHB1bHNlc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgImNvbm5lY3QgdG8gc2VydmVyICVzIiwKLSAgICAgIEdTVF9TVFJfTlVMTCAocHVsc2VzcmMtPnNlcnZlcikpOwotCi0gIGlmIChwYV9jb250ZXh0X2Nvbm5lY3QgKHB1bHNlc3JjLT5jb250ZXh0LCBwdWxzZXNyYy0+c2VydmVyLCAwLCBOVUxMKSA8IDApIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHVsc2VzcmMsIFJFU09VUkNFLCBGQUlMRUQsICgiRmFpbGVkIHRvIGNvbm5lY3Q6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwdWxzZXNyYy0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotCi0gIGZvciAoOzspIHsKLSAgICBwYV9jb250ZXh0X3N0YXRlX3Qgc3RhdGU7Ci0KLSAgICBzdGF0ZSA9IHBhX2NvbnRleHRfZ2V0X3N0YXRlIChwdWxzZXNyYy0+Y29udGV4dCk7Ci0KLSAgICBpZiAoIVBBX0NPTlRFWFRfSVNfR09PRCAoc3RhdGUpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHVsc2VzcmMsIFJFU09VUkNFLCBGQUlMRUQsICgiRmFpbGVkIHRvIGNvbm5lY3Q6ICVzIiwKLSAgICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlID09IFBBX0NPTlRFWFRfUkVBRFkpCi0gICAgICBicmVhazsKLQotICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbnRleHQgaXMgcmVhZHkgKi8KLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChwdWxzZXNyYy0+bWFpbmxvb3ApOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc3JjLCAiY29ubmVjdGVkIik7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdW5sb2NrX2FuZF9mYWlsOgotICB7Ci0gICAgZ3N0X3B1bHNlc3JjX2Rlc3Ryb3lfY29udGV4dCAocHVsc2VzcmMpOwotCi0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlc3JjX2Nsb3NlIChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUIChhc3JjKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotICBnc3RfcHVsc2VzcmNfZGVzdHJveV9jb250ZXh0IChwdWxzZXNyYyk7Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzcmNfdW5wcmVwYXJlIChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUIChhc3JjKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotICBnc3RfcHVsc2VzcmNfZGVzdHJveV9zdHJlYW0gKHB1bHNlc3JjKTsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgcHVsc2VzcmMtPnJlYWRfYnVmZmVyID0gTlVMTDsKLSAgcHVsc2VzcmMtPnJlYWRfYnVmZmVyX2xlbmd0aCA9IDA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X3B1bHNlc3JjX3JlYWQgKEdzdEF1ZGlvU3JjICogYXNyYywgZ3BvaW50ZXIgZGF0YSwgZ3VpbnQgbGVuZ3RoLAotICAgIEdzdENsb2NrVGltZSAqIHRpbWVzdGFtcCkKLXsKLSAgR3N0UHVsc2VTcmMgKnB1bHNlc3JjID0gR1NUX1BVTFNFU1JDX0NBU1QgKGFzcmMpOwotICBzaXplX3Qgc3VtID0gMDsKLQotICBpZiAoZ19hdG9taWNfaW50X2NvbXBhcmVfYW5kX2V4Y2hhbmdlICgmcHVsc2VzcmMtPm5vdGlmeSwgMSwgMCkpIHsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChwdWxzZXNyYyksICJ2b2x1bWUiKTsKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChwdWxzZXNyYyksICJtdXRlIik7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAocHVsc2VzcmMpLCAiY3VycmVudC1kZXZpY2UiKTsKLSAgfQotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0gIHB1bHNlc3JjLT5pbl9yZWFkID0gVFJVRTsKLQotICBpZiAoIXB1bHNlc3JjLT5zdHJlYW1fY29ubmVjdGVkKQotICAgIGdvdG8gbm90X2Nvbm5lY3RlZDsKLQotICBpZiAocHVsc2VzcmMtPnBhdXNlZCkKLSAgICBnb3RvIHdhc19wYXVzZWQ7Ci0KLSAgd2hpbGUgKGxlbmd0aCA+IDApIHsKLSAgICBzaXplX3QgbDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChwdWxzZXNyYywgInJlYWRpbmcgJXUgYnl0ZXMiLCBsZW5ndGgpOwotCi0gICAgLypjaGVjayBpZiB3ZSBoYXZlIGEgbGVmdG92ZXIgYnVmZmVyICovCi0gICAgaWYgKCFwdWxzZXNyYy0+cmVhZF9idWZmZXIpIHsKLSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKGdzdF9wdWxzZXNyY19pc19kZWFkIChwdWxzZXNyYywgVFJVRSkpCi0gICAgICAgICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0KLSAgICAgICAgLyogcmVhZCBhbGwgYXZhaWxhYmxlIGRhdGEsIHdlIGtlZXAgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGFuZCB0aGUgbGVuZ3RoCi0gICAgICAgICAqIGFuZCB0YWtlIGZyb20gaXQgd2hhdCB3ZSBuZWVkLiAqLwotICAgICAgICBpZiAocGFfc3RyZWFtX3BlZWsgKHB1bHNlc3JjLT5zdHJlYW0sICZwdWxzZXNyYy0+cmVhZF9idWZmZXIsCi0gICAgICAgICAgICAgICAgJnB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGgpIDwgMCkKLSAgICAgICAgICBnb3RvIHBlZWtfZmFpbGVkOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwdWxzZXNyYywgImhhdmUgZGF0YSBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwKLSAgICAgICAgICAgIHB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGgpOwotCi0gICAgICAgIC8qIGlmIHdlIGhhdmUgZGF0YSwgcHJvY2VzcyBpZiAqLwotICAgICAgICBpZiAocHVsc2VzcmMtPnJlYWRfYnVmZmVyICYmIHB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGgpCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyogbm93IHdhaXQgZm9yIG1vcmUgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlICovCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwdWxzZXNyYywgIndhaXRpbmcgZm9yIGRhdGEiKTsKLSAgICAgICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdCAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICAgICAgICBpZiAocHVsc2VzcmMtPnBhdXNlZCkKLSAgICAgICAgICBnb3RvIHdhc19wYXVzZWQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgbCA9IHB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGggPgotICAgICAgICBsZW5ndGggPyBsZW5ndGggOiBwdWxzZXNyYy0+cmVhZF9idWZmZXJfbGVuZ3RoOwotCi0gICAgbWVtY3B5IChkYXRhLCBwdWxzZXNyYy0+cmVhZF9idWZmZXIsIGwpOwotCi0gICAgcHVsc2VzcmMtPnJlYWRfYnVmZmVyID0gKGNvbnN0IGd1aW50OCAqKSBwdWxzZXNyYy0+cmVhZF9idWZmZXIgKyBsOwotICAgIHB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGggLT0gbDsKLQotICAgIGRhdGEgPSAoZ3VpbnQ4ICopIGRhdGEgKyBsOwotICAgIGxlbmd0aCAtPSBsOwotICAgIHN1bSArPSBsOwotCi0gICAgaWYgKHB1bHNlc3JjLT5yZWFkX2J1ZmZlcl9sZW5ndGggPD0gMCkgewotICAgICAgLyogd2UgY29waWVkIGFsbCBvZiB0aGUgZGF0YSwgZHJvcCBpdCBub3cgKi8KLSAgICAgIGlmIChwYV9zdHJlYW1fZHJvcCAocHVsc2VzcmMtPnN0cmVhbSkgPCAwKQotICAgICAgICBnb3RvIGRyb3BfZmFpbGVkOwotCi0gICAgICAvKiByZXNldCBwb2ludGVyIHRvIGRhdGEgKi8KLSAgICAgIHB1bHNlc3JjLT5yZWFkX2J1ZmZlciA9IE5VTEw7Ci0gICAgICBwdWxzZXNyYy0+cmVhZF9idWZmZXJfbGVuZ3RoID0gMDsKLSAgICB9Ci0gIH0KLQotICBwdWxzZXNyYy0+aW5fcmVhZCA9IEZBTFNFOwotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuIHN1bTsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9jb25uZWN0ZWQ6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocHVsc2VzcmMsICJ3ZSBhcmUgbm90IGNvbm5lY3RlZCIpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci13YXNfcGF1c2VkOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHB1bHNlc3JjLCAid2UgYXJlIHBhdXNlZCIpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci1wZWVrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fcGVlaygpIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci1kcm9wX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fZHJvcCgpIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci11bmxvY2tfYW5kX2ZhaWw6Ci0gIHsKLSAgICBwdWxzZXNyYy0+aW5fcmVhZCA9IEZBTFNFOwotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICAgIHJldHVybiAoZ3VpbnQpIC0gMTsKLSAgfQotfQotCi0vKiByZXR1cm4gdGhlIGRlbGF5IGluIHNhbXBsZXMgKi8KLXN0YXRpYyBndWludAotZ3N0X3B1bHNlc3JjX2RlbGF5IChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUIChhc3JjKTsKLSAgcGFfdXNlY190IHQ7Ci0gIGludCBuZWdhdGl2ZSwgcmVzOwotICBndWludCByZXN1bHQ7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLSAgaWYgKGdzdF9wdWxzZXNyY19pc19kZWFkIChwdWxzZXNyYywgVFJVRSkpCi0gICAgZ290byBzZXJ2ZXJfZGVhZDsKLQotICAvKiBnZXQgdGhlIGxhdGVuY3ksIHRoaXMgY2FuIGZhaWwgd2hlbiB3ZSBkb24ndCBoYXZlIGEgbGF0ZW5jeSB1cGRhdGUgeWV0LgotICAgKiBXZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIGxhdGVuY3kgdXBkYXRlcyBoZXJlIGJ1dCB3ZSBqdXN0IHJldHVybiAwLiAqLwotICByZXMgPSBwYV9zdHJlYW1fZ2V0X2xhdGVuY3kgKHB1bHNlc3JjLT5zdHJlYW0sICZ0LCAmbmVnYXRpdmUpOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICBpZiAocmVzIDwgMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHB1bHNlc3JjLCAiY291bGQgbm90IGdldCBsYXRlbmN5Iik7Ci0gICAgcmVzdWx0ID0gMDsKLSAgfSBlbHNlIHsKLSAgICBpZiAobmVnYXRpdmUpCi0gICAgICByZXN1bHQgPSAwOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IChndWludCkgKCh0ICogcHVsc2VzcmMtPnNhbXBsZV9zcGVjLnJhdGUpIC8gMTAwMDAwMExMKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotc2VydmVyX2RlYWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgInRoZSBzZXJ2ZXIgaXMgZGVhZCIpOwotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLSAgICByZXR1cm4gMDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZXNyY19jcmVhdGVfc3RyZWFtIChHc3RQdWxzZVNyYyAqIHB1bHNlc3JjLCBHc3RDYXBzICoqIGNhcHMsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHJzcGVjKQotewotICBwYV9jaGFubmVsX21hcCBjaGFubmVsX21hcDsKLSAgY29uc3QgcGFfY2hhbm5lbF9tYXAgKm07Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2Jvb2xlYW4gbmVlZF9jaGFubmVsX2xheW91dCA9IEZBTFNFOwotICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjIG5ld19zcGVjLCAqc3BlYyA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBpbnQgaTsKLQotICAvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBzdHJlYW0gKHJlbmVnb3RpYXRpb24pLCBmcmVlIGl0IGZpcnN0ICovCi0gIGlmIChwdWxzZXNyYy0+c3RyZWFtKQotICAgIGdzdF9wdWxzZXNyY19kZXN0cm95X3N0cmVhbSAocHVsc2VzcmMpOwotCi0gIGlmIChyc3BlYykgewotICAgIC8qIFBvc3QtbmVnb3RpYXRpb24sIHdlIGFscmVhZHkgaGF2ZSBhIHJpbmdidWZmZXIgc3BlYywgc28gd2UganVzdCBuZWVkIHRvCi0gICAgICogdXNlIGl0IHRvIGNyZWF0ZSBhIHN0cmVhbS4gKi8KLSAgICBzcGVjID0gcnNwZWM7Ci0KLSAgICAvKiBBdCB0aGlzIHBvaW50LCB3ZSBleHBlY3QgdGhlIGNoYW5uZWwtbWFzayB0byBiZSBzZXQgaW4gY2Fwcywgc28gd2UganVzdAotICAgICAqIHVzZSB0aGF0ICovCi0gICAgaWYgKCFnc3RfcHVsc2VfZ3N0X3RvX2NoYW5uZWxfbWFwICgmY2hhbm5lbF9tYXAsIHNwZWMpKQotICAgICAgZ290byBpbnZhbGlkX3NwZWM7Ci0KLSAgfSBlbHNlIGlmIChjYXBzKSB7Ci0gICAgLyogQXQgbmVnb3RpYXRpb24gdGltZSwgd2UgZ2V0IGEgZml4ZWQgY2FwcyBhbmQgdXNlIGl0IHRvIHNldCB1cCBhIHN0cmVhbSAqLwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlICgqY2FwcywgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAiY2hhbm5lbHMiLCAmbmV3X3NwZWMuaW5mby5jaGFubmVscyk7Ci0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgImNoYW5uZWwtbWFzayIpKSB7Ci0gICAgICBpZiAobmV3X3NwZWMuaW5mby5jaGFubmVscyA9PSAxKSB7Ci0gICAgICAgIHBhX2NoYW5uZWxfbWFwX2luaXRfbW9ubyAoJmNoYW5uZWxfbWFwKTsKLSAgICAgIH0gZWxzZSBpZiAobmV3X3NwZWMuaW5mby5jaGFubmVscyA9PSAyKSB7Ci0gICAgICAgIHBhX2NoYW5uZWxfbWFwX2luaXRfc3RlcmVvICgmY2hhbm5lbF9tYXApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmVlZF9jaGFubmVsX2xheW91dCA9IFRSVUU7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMCksIE5VTEwpOwotICAgICAgfQotICAgIH0KLQotICAgIG1lbXNldCAoJm5ld19zcGVjLCAwLCBzaXplb2YgKEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMpKTsKLSAgICBuZXdfc3BlYy5sYXRlbmN5X3RpbWUgPSBHU1RfU0VDT05EOwotICAgIGlmICghZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3BhcnNlX2NhcHMgKCZuZXdfc3BlYywgKmNhcHMpKQotICAgICAgZ290byBpbnZhbGlkX2NhcHM7Ci0KLSAgICAvKiBLZWVwIHRoZSByZWZjb3VudCBvZiB0aGUgY2FwcyBhdCAxIHRvIG1ha2UgdGhlbSB3cml0YWJsZSAqLwotICAgIGdzdF9jYXBzX3VucmVmIChuZXdfc3BlYy5jYXBzKTsKLQotICAgIGlmICghbmVlZF9jaGFubmVsX2xheW91dAotICAgICAgICAmJiAhZ3N0X3B1bHNlX2dzdF90b19jaGFubmVsX21hcCAoJmNoYW5uZWxfbWFwLCAmbmV3X3NwZWMpKSB7Ci0gICAgICBuZWVkX2NoYW5uZWxfbGF5b3V0ID0gVFJVRTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywKLSAgICAgICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDApLCBOVUxMKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKG5ld19zcGVjLmluZm8ucG9zaXRpb24pOyBpKyspCi0gICAgICAgIG5ld19zcGVjLmluZm8ucG9zaXRpb25baV0gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9JTlZBTElEOwotICAgIH0KLQotICAgIHNwZWMgPSAmbmV3X3NwZWM7Ci0gIH0gZWxzZSB7Ci0gICAgLyogIXJzcGVjICYmICFjYXBzICovCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIH0KLQotICBpZiAoIWdzdF9wdWxzZV9maWxsX3NhbXBsZV9zcGVjIChzcGVjLCAmcHVsc2VzcmMtPnNhbXBsZV9zcGVjKSkKLSAgICBnb3RvIGludmFsaWRfc3BlYzsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIGlmICghcHVsc2VzcmMtPmNvbnRleHQpCi0gICAgZ290byBiYWRfY29udGV4dDsKLQotICBuYW1lID0gIlJlY29yZCBTdHJlYW0iOwotICBpZiAocHVsc2VzcmMtPnByb3BsaXN0KSB7Ci0gICAgaWYgKCEocHVsc2VzcmMtPnN0cmVhbSA9IHBhX3N0cmVhbV9uZXdfd2l0aF9wcm9wbGlzdCAocHVsc2VzcmMtPmNvbnRleHQsCi0gICAgICAgICAgICAgICAgbmFtZSwgJnB1bHNlc3JjLT5zYW1wbGVfc3BlYywKLSAgICAgICAgICAgICAgICAobmVlZF9jaGFubmVsX2xheW91dCkgPyBOVUxMIDogJmNoYW5uZWxfbWFwLAotICAgICAgICAgICAgICAgIHB1bHNlc3JjLT5wcm9wbGlzdCkpKQotICAgICAgZ290byBjcmVhdGVfZmFpbGVkOwotCi0gIH0gZWxzZSBpZiAoIShwdWxzZXNyYy0+c3RyZWFtID0gcGFfc3RyZWFtX25ldyAocHVsc2VzcmMtPmNvbnRleHQsCi0gICAgICAgICAgICAgIG5hbWUsICZwdWxzZXNyYy0+c2FtcGxlX3NwZWMsCi0gICAgICAgICAgICAgIChuZWVkX2NoYW5uZWxfbGF5b3V0KSA/IE5VTEwgOiAmY2hhbm5lbF9tYXApKSkKLSAgICBnb3RvIGNyZWF0ZV9mYWlsZWQ7Ci0KLSAgaWYgKGNhcHMpIHsKLSAgICBtID0gcGFfc3RyZWFtX2dldF9jaGFubmVsX21hcCAocHVsc2VzcmMtPnN0cmVhbSk7Ci0gICAgZ3N0X3B1bHNlX2NoYW5uZWxfbWFwX3RvX2dzdCAobSwgJm5ld19zcGVjKTsKLSAgICBnc3RfYXVkaW9fY2hhbm5lbF9wb3NpdGlvbnNfdG9fdmFsaWRfb3JkZXIgKG5ld19zcGVjLmluZm8ucG9zaXRpb24sCi0gICAgICAgIG5ld19zcGVjLmluZm8uY2hhbm5lbHMpOwotICAgIGdzdF9jYXBzX3VucmVmICgqY2Fwcyk7Ci0gICAgKmNhcHMgPSBnc3RfYXVkaW9faW5mb190b19jYXBzICgmbmV3X3NwZWMuaW5mbyk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgIkNhcHMgYXJlICUiIEdTVF9QVFJfRk9STUFULCAqY2Fwcyk7Ci0gIH0KLQotCi0gIHBhX3N0cmVhbV9zZXRfc3RhdGVfY2FsbGJhY2sgKHB1bHNlc3JjLT5zdHJlYW0sIGdzdF9wdWxzZXNyY19zdHJlYW1fc3RhdGVfY2IsCi0gICAgICBwdWxzZXNyYyk7Ci0gIHBhX3N0cmVhbV9zZXRfcmVhZF9jYWxsYmFjayAocHVsc2VzcmMtPnN0cmVhbSwgZ3N0X3B1bHNlc3JjX3N0cmVhbV9yZXF1ZXN0X2NiLAotICAgICAgcHVsc2VzcmMpOwotICBwYV9zdHJlYW1fc2V0X3VuZGVyZmxvd19jYWxsYmFjayAocHVsc2VzcmMtPnN0cmVhbSwKLSAgICAgIGdzdF9wdWxzZXNyY19zdHJlYW1fdW5kZXJmbG93X2NiLCBwdWxzZXNyYyk7Ci0gIHBhX3N0cmVhbV9zZXRfb3ZlcmZsb3dfY2FsbGJhY2sgKHB1bHNlc3JjLT5zdHJlYW0sCi0gICAgICBnc3RfcHVsc2VzcmNfc3RyZWFtX292ZXJmbG93X2NiLCBwdWxzZXNyYyk7Ci0gIHBhX3N0cmVhbV9zZXRfbGF0ZW5jeV91cGRhdGVfY2FsbGJhY2sgKHB1bHNlc3JjLT5zdHJlYW0sCi0gICAgICBnc3RfcHVsc2VzcmNfc3RyZWFtX2xhdGVuY3lfdXBkYXRlX2NiLCBwdWxzZXNyYyk7Ci0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9jYXBzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICgiQ2FuJ3QgcGFyc2UgY2Fwcy4iKSwgKE5VTEwpKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLWludmFsaWRfc3BlYzoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoIkludmFsaWQgc2FtcGxlIHNwZWNpZmljYXRpb24uIiksIChOVUxMKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci1iYWRfY29udGV4dDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCJCYWQgY29udGV4dCIpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci1jcmVhdGVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc3JjLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoIkZhaWxlZCB0byBjcmVhdGUgc3RyZWFtOiAlcyIsCi0gICAgICAgICAgICBwYV9zdHJlcnJvciAocGFfY29udGV4dF9lcnJubyAocHVsc2VzcmMtPmNvbnRleHQpKSksIChOVUxMKSk7Ci0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0gIH0KLXVubG9ja19hbmRfZmFpbDoKLSAgewotICAgIGdzdF9wdWxzZXNyY19kZXN0cm95X3N0cmVhbSAocHVsc2VzcmMpOwotCi0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIGZhaWw6Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlc3JjX2V2ZW50IChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImhhbmRsZSBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1JFQ09ORklHVVJFOgotICAgICAgZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYykpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmV2ZW50IChiYXNlc3JjLCBldmVudCk7Ci19Ci0KLS8qIFRoaXMgaXMgZXNzZW50aWFsbHkgZ3N0X2Jhc2Vfc3JjX25lZ290aWF0ZV9kZWZhdWx0KCkgYnV0IHRoZSBjYXBzCi0gKiBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGEgY2hhbm5lbCBsYXlvdXQgZm9yID4gMiBjaGFubmVscwotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZXNyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICBHc3RQdWxzZVNyYyAqcHVsc2VzcmMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAoYmFzZXNyYyk7Ci0gIEdzdENhcHMgKnRoaXNjYXBzOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMgPSBOVUxMOwotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLQotICAvKiBmaXJzdCBzZWUgd2hhdCBpcyBwb3NzaWJsZSBvbiBvdXIgc291cmNlIHBhZCAqLwotICB0aGlzY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiY2FwcyBvZiBzcmM6ICUiIEdTVF9QVFJfRk9STUFULCB0aGlzY2Fwcyk7Ci0gIC8qIG5vdGhpbmcgb3IgYW55dGhpbmcgaXMgYWxsb3dlZCwgd2UncmUgZG9uZSAqLwotICBpZiAodGhpc2NhcHMgPT0gTlVMTCB8fCBnc3RfY2Fwc19pc19hbnkgKHRoaXNjYXBzKSkKLSAgICBnb3RvIG5vX25lZ29fbmVlZGVkOwotCi0gIC8qIGdldCB0aGUgcGVlciBjYXBzICovCi0gIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKGJhc2VzcmMpLCBOVUxMKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImNhcHMgb2YgcGVlcjogJSIgR1NUX1BUUl9GT1JNQVQsIHBlZXJjYXBzKTsKLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgLyogZ2V0IGludGVyc2VjdGlvbiAqLwotICAgIGNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRoaXNjYXBzLCBwZWVyY2Fwcyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImludGVyc2VjdDogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmICh0aGlzY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBubyBwZWVyLCB3b3JrIHdpdGggb3VyIG93biBjYXBzIHRoZW4gKi8KLSAgICBjYXBzID0gdGhpc2NhcHM7Ci0gIH0KLSAgaWYgKGNhcHMpIHsKLSAgICAvKiB0YWtlIGZpcnN0IChhbmQgYmVzdCwgc2luY2UgdGhleSBhcmUgc29ydGVkKSBwb3NzaWJpbGl0eSAqLwotICAgIGNhcHMgPSBnc3RfY2Fwc190cnVuY2F0ZSAoY2Fwcyk7Ci0KLSAgICAvKiBub3cgZml4YXRlICovCi0gICAgaWYgKCFnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAgIGNhcHMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpeGF0ZSAoYmFzZXNyYywgY2Fwcyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiZml4YXRlZCB0bzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gICAgICBpZiAoZ3N0X2NhcHNfaXNfYW55IChjYXBzKSkgewotICAgICAgICAvKiBobW0sIHN0aWxsIGFueXRoaW5nLCBzbyBlbGVtZW50IGNhbiBkbyBhbnl0aGluZyBhbmQKLSAgICAgICAgICogbmVnbyBpcyBub3QgbmVlZGVkICovCi0gICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSkgewotICAgICAgICAvKiB5YXksIGZpeGVkIGNhcHMsIHVzZSB0aG9zZSB0aGVuICovCi0gICAgICAgIHJlc3VsdCA9IGdzdF9wdWxzZXNyY19jcmVhdGVfc3RyZWFtIChwdWxzZXNyYywgJmNhcHMsIE5VTEwpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgIHJlc3VsdCA9IGdzdF9iYXNlX3NyY19zZXRfY2FwcyAoYmFzZXNyYywgY2Fwcyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotCi1ub19uZWdvX25lZWRlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJubyBuZWdvdGlhdGlvbiBuZWVkZWQiKTsKLSAgICBpZiAodGhpc2NhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAodGhpc2NhcHMpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3B1bHNlc3JjX3ByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYywgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIHBhX2J1ZmZlcl9hdHRyIHdhbnRlZDsKLSAgY29uc3QgcGFfYnVmZmVyX2F0dHIgKmFjdHVhbDsKLSAgR3N0UHVsc2VTcmMgKnB1bHNlc3JjID0gR1NUX1BVTFNFU1JDX0NBU1QgKGFzcmMpOwotICBwYV9zdHJlYW1fZmxhZ3NfdCBmbGFnczsKLSAgcGFfb3BlcmF0aW9uICpvOwotICBHc3RBdWRpb0Nsb2NrICpjbG9jazsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotCi0gIGlmICghcHVsc2VzcmMtPnN0cmVhbSkKLSAgICBnc3RfcHVsc2VzcmNfY3JlYXRlX3N0cmVhbSAocHVsc2VzcmMsIE5VTEwsIHNwZWMpOwotCi0gIHsKLSAgICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjIHMgPSAqc3BlYzsKLSAgICBjb25zdCBwYV9jaGFubmVsX21hcCAqbTsKLQotICAgIG0gPSBwYV9zdHJlYW1fZ2V0X2NoYW5uZWxfbWFwIChwdWxzZXNyYy0+c3RyZWFtKTsKLSAgICBnc3RfcHVsc2VfY2hhbm5lbF9tYXBfdG9fZ3N0IChtLCAmcyk7Ci0gICAgZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3NldF9jaGFubmVsX3Bvc2l0aW9ucyAoR1NUX0FVRElPX0JBU0VfU1JDCi0gICAgICAgIChwdWxzZXNyYyktPnJpbmdidWZmZXIsIHMuaW5mby5wb3NpdGlvbik7Ci0gIH0KLQotICAvKiBlbmFibGUgZXZlbnQgbm90aWZpY2F0aW9ucyAqLwotICBHU1RfTE9HX09CSkVDVCAocHVsc2VzcmMsICJzdWJzY3JpYmluZyB0byBjb250ZXh0IGV2ZW50cyIpOwotICBpZiAoIShvID0gcGFfY29udGV4dF9zdWJzY3JpYmUgKHB1bHNlc3JjLT5jb250ZXh0LAotICAgICAgICAgICAgICBQQV9TVUJTQ1JJUFRJT05fTUFTS19TT1VSQ0VfT1VUUFVULCBOVUxMLCBOVUxMKSkpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocHVsc2VzcmMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfY29udGV4dF9zdWJzY3JpYmUoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwdWxzZXNyYy0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotCi0gIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0KLSAgLyogVGhlcmUncyBhIGJpdCBvZiBhIGRpc2Nvbm5lY3QgaGVyZSBiZXR3ZWVuIHRoZSBhdWRpbyByaW5nYnVmZmVyIGFuZCB3aGF0Ci0gICAqIFB1bHNlQXVkaW8gcHJvdmlkZXMuIFRoZSBhdWRpbyByaW5nYnVmZmVyIHByb3ZpZGUgYSB0b3RhbCBvZiBidWZmZXJfdGltZQotICAgKiB3b3J0aCBvZiBidWZmZXJpbmcsIGRpdmlkZWQgaW50byBzZWdtZW50cyBvZiBsYXRlbmN5X3RpbWUgc2l6ZS4gV2UncmUKLSAgICogYXNraW5nIFB1bHNlQXVkaW8gdG8gcHJvdmlkZSBhIHRvdGFsIGxhdGVuY3kgb2YgbGF0ZW5jeV90aW1lLCB3aGljaCwgd2l0aAotICAgKiBQQV9TVFJFQU1fQURKVVNUX0xBVEVOQ1ksIGVmZmVjdGl2ZWx5IHNldHMgaXRzZWxmIHVwIGFzIGEgcmluZ2J1ZmZlciB3aXRoCi0gICAqIG9uZSBzZWdtZW50IGJlaW5nIHRoZSBoYXJkd2FyZSBidWZmZXIsIGFuZCB0aGUgb3RoZXIgdGhlIHNvZnR3YXJlIGJ1ZmZlci4KLSAgICogVGhpcyBzZWdtZW50IHNpemUgaXMgcmV0dXJuZWQgYXMgdGhlIGZyYWdzaXplLgotICAgKgotICAgKiBTaW5jZSB0aGUgdHdvIGNvbmNlcHRzIGRvbid0IG1hcCB2ZXJ5IHdlbGwsIHdoYXQgd2UgZG8gaXMga2VlcCBzZWdzaXplIGFzCi0gICAqIGl0IGlzICh1bmxlc3MgZnJhZ3NpemUgaXMgZXZlbiBsYXJnZXIsIGluIHdoaWNoIGNhc2Ugd2UgdXNlIHRoYXQpLiBXZSdsbAotICAgKiBnZXQgZGF0YSBmcm9tIFB1bHNlQXVkaW8gaW4gc21hbGxlciBjaHVua3MgdGhhbiB3ZSB3YW50IHRvIHBhc3Mgb24gYXMgYW4KLSAgICogZWxlbWVudCwgYW5kIHdlIGNvYWxlc2NlIHRob3NlIGNodW5rcyBpbiB0aGUgcmluZ2J1ZmZlciBtZW1vcnkgYW5kIHBhc3MgaXQKLSAgICogb24gaW4gdGhlIGV4cGVjdGVkIGNodW5rIHNpemUuICovCi0gIHdhbnRlZC5tYXhsZW5ndGggPSBzcGVjLT5zZWdzaXplICogc3BlYy0+c2VndG90YWw7Ci0gIHdhbnRlZC50bGVuZ3RoID0gLTE7Ci0gIHdhbnRlZC5wcmVidWYgPSAwOwotICB3YW50ZWQubWlucmVxID0gLTE7Ci0gIHdhbnRlZC5mcmFnc2l6ZSA9IHNwZWMtPnNlZ3NpemU7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChwdWxzZXNyYywgIm1heGxlbmd0aDogJWQiLCB3YW50ZWQubWF4bGVuZ3RoKTsKLSAgR1NUX0lORk9fT0JKRUNUIChwdWxzZXNyYywgInRsZW5ndGg6ICAgJWQiLCB3YW50ZWQudGxlbmd0aCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAocHVsc2VzcmMsICJwcmVidWY6ICAgICVkIiwgd2FudGVkLnByZWJ1Zik7Ci0gIEdTVF9JTkZPX09CSkVDVCAocHVsc2VzcmMsICJtaW5yZXE6ICAgICVkIiwgd2FudGVkLm1pbnJlcSk7Ci0gIEdTVF9JTkZPX09CSkVDVCAocHVsc2VzcmMsICJmcmFnc2l6ZTogICVkIiwgd2FudGVkLmZyYWdzaXplKTsKLQotICBmbGFncyA9IFBBX1NUUkVBTV9JTlRFUlBPTEFURV9USU1JTkcgfCBQQV9TVFJFQU1fQVVUT19USU1JTkdfVVBEQVRFIHwKLSAgICAgIFBBX1NUUkVBTV9OT1RfTU9OT1RPTklDIHwgUEFfU1RSRUFNX0FESlVTVF9MQVRFTkNZIHwKLSAgICAgIFBBX1NUUkVBTV9TVEFSVF9DT1JLRUQ7Ci0KLSAgaWYgKHBhX3N0cmVhbV9jb25uZWN0X3JlY29yZCAocHVsc2VzcmMtPnN0cmVhbSwgcHVsc2VzcmMtPmRldmljZSwgJndhbnRlZCwKLSAgICAgICAgICBmbGFncykgPCAwKSB7Ci0gICAgZ290byBjb25uZWN0X2ZhaWxlZDsKLSAgfQotCi0gIC8qIG91ciBjbG9jayB3aWxsIG5vdyBzdGFydCBmcm9tIDAgYWdhaW4gKi8KLSAgY2xvY2sgPSBHU1RfQVVESU9fQ0xPQ0sgKEdTVF9BVURJT19CQVNFX1NSQyAocHVsc2VzcmMpLT5jbG9jayk7Ci0gIGdzdF9hdWRpb19jbG9ja19yZXNldCAoY2xvY2ssIDApOwotCi0gIHB1bHNlc3JjLT5jb3JrZWQgPSBUUlVFOwotCi0gIGZvciAoOzspIHsKLSAgICBwYV9zdHJlYW1fc3RhdGVfdCBzdGF0ZTsKLQotICAgIHN0YXRlID0gcGFfc3RyZWFtX2dldF9zdGF0ZSAocHVsc2VzcmMtPnN0cmVhbSk7Ci0KLSAgICBpZiAoIVBBX1NUUkVBTV9JU19HT09EIChzdGF0ZSkpCi0gICAgICBnb3RvIHN0cmVhbV9pc19iYWQ7Ci0KLSAgICBpZiAoc3RhdGUgPT0gUEFfU1RSRUFNX1JFQURZKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBXYWl0IHVudGlsIHRoZSBzdHJlYW0gaXMgcmVhZHkgKi8KLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF93YWl0IChwdWxzZXNyYy0+bWFpbmxvb3ApOwotICB9Ci0gIHB1bHNlc3JjLT5zdHJlYW1fY29ubmVjdGVkID0gVFJVRTsKLQotICAvKiBzdG9yZSB0aGUgc291cmNlIG91dHB1dCBpbmRleCBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgdmlhIGEgcHJvcGVydHkgKi8KLSAgcHVsc2VzcmMtPnNvdXJjZV9vdXRwdXRfaWR4ID0gcGFfc3RyZWFtX2dldF9pbmRleCAocHVsc2VzcmMtPnN0cmVhbSk7Ci0gIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHB1bHNlc3JjKSwgInNvdXJjZS1vdXRwdXQtaW5kZXgiKTsKLQotICAvKiBBbHRob3VnaCBzb3VyY2Ugb3V0cHV0IHN0cmVhbSBtdXRpbmcgaXMgc3VwcG9ydGVkLCB0aGVyZSBpcyBhIGJ1ZyBpbgotICAgKiBQdWxzZUF1ZGlvIHRoYXQgZG9lc24ndCBhbGxvdyB1cyB0byBkbyB0aGlzIGF0IHN0YXJ0dXAsIHNvIHdlIG11dGUKLSAgICogbWFudWFsbHkgcG9zdC1jb25uZWN0LiBUaGlzIHNob3VsZCBiZSBtb3ZlZCBiYWNrIHByZS1jb25uZWN0IG9uY2UgdGhpbmdzCi0gICAqIGFyZSBmaXhlZCBvbiB0aGUgUHVsc2VBdWRpbyBzaWRlLiAqLwotICBpZiAocHVsc2VzcmMtPm11dGVfc2V0ICYmIHB1bHNlc3JjLT5tdXRlKSB7Ci0gICAgZ3N0X3B1bHNlc3JjX3NldF9zdHJlYW1fbXV0ZSAocHVsc2VzcmMsIHB1bHNlc3JjLT5tdXRlKTsKLSAgICBwdWxzZXNyYy0+bXV0ZV9zZXQgPSBGQUxTRTsKLSAgfQotCi0gIGlmIChwdWxzZXNyYy0+dm9sdW1lX3NldCkgewotICAgIGdzdF9wdWxzZXNyY19zZXRfc3RyZWFtX3ZvbHVtZSAocHVsc2VzcmMsIHB1bHNlc3JjLT52b2x1bWUpOwotICAgIHB1bHNlc3JjLT52b2x1bWVfc2V0ID0gRkFMU0U7Ci0gIH0KLQotICAvKiBnZXQgdGhlIGFjdHVhbCBidWZmZXJpbmcgcHJvcGVydGllcyBub3cgKi8KLSAgYWN0dWFsID0gcGFfc3RyZWFtX2dldF9idWZmZXJfYXR0ciAocHVsc2VzcmMtPnN0cmVhbSk7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChwdWxzZXNyYywgIm1heGxlbmd0aDogJWQiLCBhY3R1YWwtPm1heGxlbmd0aCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAocHVsc2VzcmMsICJ0bGVuZ3RoOiAgICVkICh3YW50ZWQ6ICVkKSIsCi0gICAgICBhY3R1YWwtPnRsZW5ndGgsIHdhbnRlZC50bGVuZ3RoKTsKLSAgR1NUX0lORk9fT0JKRUNUIChwdWxzZXNyYywgInByZWJ1ZjogICAgJWQiLCBhY3R1YWwtPnByZWJ1Zik7Ci0gIEdTVF9JTkZPX09CSkVDVCAocHVsc2VzcmMsICJtaW5yZXE6ICAgICVkICh3YW50ZWQgJWQpIiwgYWN0dWFsLT5taW5yZXEsCi0gICAgICB3YW50ZWQubWlucmVxKTsKLSAgR1NUX0lORk9fT0JKRUNUIChwdWxzZXNyYywgImZyYWdzaXplOiAgJWQgKHdhbnRlZCAlZCkiLAotICAgICAgYWN0dWFsLT5mcmFnc2l6ZSwgd2FudGVkLmZyYWdzaXplKTsKLQotICBpZiAoYWN0dWFsLT5mcmFnc2l6ZSA+PSBzcGVjLT5zZWdzaXplKSB7Ci0gICAgc3BlYy0+c2Vnc2l6ZSA9IGFjdHVhbC0+ZnJhZ3NpemU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZnJhZ3NpemUgaXMgc21hbGxlciB0aGFuIHdoYXQgd2Ugd2FudGVkLCBzbyBsZXQgdGhlIHJlYWQgZnVuY3Rpb24KLSAgICAgKiBjb2FsZXNjZSB0aGUgc21hbGxlciBjaHVua3MgYXMgdGhleSBjb21lIGluICovCi0gIH0KLQotICAvKiBGaXggdXAgdGhlIHRvdGFsIHJpbmdidWZmZXIgc2l6ZSBiYXNlZCBvbiB3aGF0IHdlIGFjdHVhbGx5IGdvdCAqLwotICBzcGVjLT5zZWd0b3RhbCA9IGFjdHVhbC0+bWF4bGVuZ3RoIC8gc3BlYy0+c2Vnc2l6ZTsKLSAgLyogRG9uJ3QgYnVmZmVyIGxlc3MgdGhhbiAyIHNlZ21lbnRzIGFzIHRoZSByaW5nYnVmZmVyIGNhbid0IGRlYWwgd2l0aCBpdCAqLwotICBpZiAoc3BlYy0+c2VndG90YWwgPCAyKQotICAgIHNwZWMtPnNlZ3RvdGFsID0gMjsKLQotICBpZiAoIXB1bHNlc3JjLT5wYXVzZWQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgInVuY29ya2luZyBiZWNhdXNlIHdlIGFyZSBwbGF5aW5nIik7Ci0gICAgZ3N0X3B1bHNlc3JjX3NldF9jb3JrZWQgKHB1bHNlc3JjLCBGQUxTRSwgRkFMU0UpOwotICB9Ci0gIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWNvbm5lY3RfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc3JjLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoIkZhaWxlZCB0byBjb25uZWN0IHN0cmVhbTogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci1zdHJlYW1faXNfYmFkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc3JjLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoIkZhaWxlZCB0byBjb25uZWN0IHN0cmVhbTogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci11bmxvY2tfYW5kX2ZhaWw6Ci0gIHsKLSAgICBnc3RfcHVsc2VzcmNfZGVzdHJveV9zdHJlYW0gKHB1bHNlc3JjKTsKLQotICAgIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAocHVsc2VzcmMtPm1haW5sb29wKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wdWxzZXNyY19zdWNjZXNzX2NiIChwYV9zdHJlYW0gKiBzLCBpbnQgc3VjY2Vzcywgdm9pZCAqdXNlcmRhdGEpCi17Ci0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUICh1c2VyZGF0YSk7Ci0KLSAgcHVsc2VzcmMtPm9wZXJhdGlvbl9zdWNjZXNzID0gISAhc3VjY2VzczsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsIChwdWxzZXNyYy0+bWFpbmxvb3AsIDApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3B1bHNlc3JjX3Jlc2V0IChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdFB1bHNlU3JjICpwdWxzZXNyYyA9IEdTVF9QVUxTRVNSQ19DQVNUIChhc3JjKTsKLSAgcGFfb3BlcmF0aW9uICpvID0gTlVMTDsKLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwdWxzZXNyYy0+bWFpbmxvb3ApOwotICBHU1RfREVCVUdfT0JKRUNUIChwdWxzZXNyYywgInJlc2V0Iik7Ci0KLSAgaWYgKGdzdF9wdWxzZXNyY19pc19kZWFkIChwdWxzZXNyYywgVFJVRSkpCi0gICAgZ290byB1bmxvY2tfYW5kX2ZhaWw7Ci0KLSAgaWYgKCEobyA9Ci0gICAgICAgICAgcGFfc3RyZWFtX2ZsdXNoIChwdWxzZXNyYy0+c3RyZWFtLCBnc3RfcHVsc2VzcmNfc3VjY2Vzc19jYiwKLSAgICAgICAgICAgICAgcHVsc2VzcmMpKSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwdWxzZXNyYywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKCJwYV9zdHJlYW1fZmx1c2goKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwdWxzZXNyYy0+Y29udGV4dCkpKSwgKE5VTEwpKTsKLSAgICBnb3RvIHVubG9ja19hbmRfZmFpbDsKLSAgfQotCi0gIHB1bHNlc3JjLT5wYXVzZWQgPSBUUlVFOwotICAvKiBJbmZvcm0gYW55b25lIHdhaXRpbmcgaW4gX3dyaXRlKCkgY2FsbCB0aGF0IGl0IHNoYWxsIHdha2V1cCAqLwotICBpZiAocHVsc2VzcmMtPmluX3JlYWQpIHsKLSAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9zaWduYWwgKHB1bHNlc3JjLT5tYWlubG9vcCwgMCk7Ci0gIH0KLQotICBwdWxzZXNyYy0+b3BlcmF0aW9uX3N1Y2Nlc3MgPSBGQUxTRTsKLSAgd2hpbGUgKHBhX29wZXJhdGlvbl9nZXRfc3RhdGUgKG8pID09IFBBX09QRVJBVElPTl9SVU5OSU5HKSB7Ci0KLSAgICBpZiAoZ3N0X3B1bHNlc3JjX2lzX2RlYWQgKHB1bHNlc3JjLCBUUlVFKSkKLSAgICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotCi0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdCAocHVsc2VzcmMtPm1haW5sb29wKTsKLSAgfQotCi0gIGlmICghcHVsc2VzcmMtPm9wZXJhdGlvbl9zdWNjZXNzKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHB1bHNlc3JjLCBSRVNPVVJDRSwgRkFJTEVELCAoIkZsdXNoIGZhaWxlZDogJXMiLAotICAgICAgICAgICAgcGFfc3RyZXJyb3IgKHBhX2NvbnRleHRfZXJybm8gKHB1bHNlc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gdW5sb2NrX2FuZF9mYWlsOwotICB9Ci0KLXVubG9ja19hbmRfZmFpbDoKLQotICBpZiAobykgewotICAgIHBhX29wZXJhdGlvbl9jYW5jZWwgKG8pOwotICAgIHBhX29wZXJhdGlvbl91bnJlZiAobyk7Ci0gIH0KLQotICBwYV90aHJlYWRlZF9tYWlubG9vcF91bmxvY2sgKHB1bHNlc3JjLT5tYWlubG9vcCk7Ci19Ci0KLS8qIHVwZGF0ZSB0aGUgY29ya2VkIHN0YXRlIG9mIGEgc3RyZWFtLCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtYWlubG9vcAotICogbG9jayAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzcmNfc2V0X2NvcmtlZCAoR3N0UHVsc2VTcmMgKiBwc3JjLCBnYm9vbGVhbiBjb3JrZWQsIGdib29sZWFuIHdhaXQpCi17Ci0gIHBhX29wZXJhdGlvbiAqbyA9IE5VTEw7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzcmMsICJzZXR0aW5nIGNvcmtlZCBzdGF0ZSB0byAlZCIsIGNvcmtlZCk7Ci0gIGlmICghcHNyYy0+c3RyZWFtX2Nvbm5lY3RlZCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAocHNyYy0+Y29ya2VkICE9IGNvcmtlZCkgewotICAgIGlmICghKG8gPSBwYV9zdHJlYW1fY29yayAocHNyYy0+c3RyZWFtLCBjb3JrZWQsCi0gICAgICAgICAgICAgICAgZ3N0X3B1bHNlc3JjX3N1Y2Nlc3NfY2IsIHBzcmMpKSkKLSAgICAgIGdvdG8gY29ya19mYWlsZWQ7Ci0KLSAgICB3aGlsZSAod2FpdCAmJiBwYV9vcGVyYXRpb25fZ2V0X3N0YXRlIChvKSA9PSBQQV9PUEVSQVRJT05fUlVOTklORykgewotICAgICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfd2FpdCAocHNyYy0+bWFpbmxvb3ApOwotICAgICAgaWYgKGdzdF9wdWxzZXNyY19pc19kZWFkIChwc3JjLCBUUlVFKSkKLSAgICAgICAgZ290byBzZXJ2ZXJfZGVhZDsKLSAgICB9Ci0gICAgcHNyYy0+Y29ya2VkID0gY29ya2VkOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzcmMsICJza2lwcGluZywgYWxyZWFkeSBpbiByZXF1ZXN0ZWQgc3RhdGUiKTsKLSAgfQotICByZXMgPSBUUlVFOwotCi1jbGVhbnVwOgotICBpZiAobykKLSAgICBwYV9vcGVyYXRpb25fdW5yZWYgKG8pOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1zZXJ2ZXJfZGVhZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBzcmMsICJ0aGUgc2VydmVyIGlzIGRlYWQiKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLWNvcmtfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBzcmMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfc3RyZWFtX2NvcmsoKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHBhX3N0cmVycm9yIChwYV9jb250ZXh0X2Vycm5vIChwc3JjLT5jb250ZXh0KSkpLCAoTlVMTCkpOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotfQotCi0vKiBzdGFydC9yZXN1bWUgcGxheWJhY2sgQVNBUCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzcmNfcGxheSAoR3N0UHVsc2VTcmMgKiBwc3JjKQotewotICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrIChwc3JjLT5tYWlubG9vcCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBzcmMsICJwbGF5aW5nIik7Ci0gIHBzcmMtPnBhdXNlZCA9IEZBTFNFOwotICBnc3RfcHVsc2VzcmNfc2V0X2NvcmtlZCAocHNyYywgRkFMU0UsIEZBTFNFKTsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwc3JjLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHBhdXNlL3N0b3AgcGxheWJhY2sgQVNBUCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcHVsc2VzcmNfcGF1c2UgKEdzdFB1bHNlU3JjICogcHNyYykKLXsKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfbG9jayAocHNyYy0+bWFpbmxvb3ApOwotICBHU1RfREVCVUdfT0JKRUNUIChwc3JjLCAicGF1c2luZyIpOwotICAvKiBtYWtlIHN1cmUgdGhlIGNvbW1pdCBtZXRob2Qgc3RvcHMgd3JpdGluZyAqLwotICBwc3JjLT5wYXVzZWQgPSBUUlVFOwotICBpZiAocHNyYy0+aW5fcmVhZCkgewotICAgIC8qIHdlIGFyZSB3YWl0aW5nIGluIGEgcmVhZCwgc2lnbmFsICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocHNyYywgInNpZ25hbCByZWFkIik7Ci0gICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc2lnbmFsIChwc3JjLT5tYWlubG9vcCwgMCk7Ci0gIH0KLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChwc3JjLT5tYWlubG9vcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3B1bHNlc3JjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UHVsc2VTcmMgKnRoaXMgPSBHU1RfUFVMU0VTUkNfQ0FTVCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBpZiAoISh0aGlzLT5tYWlubG9vcCA9IHBhX3RocmVhZGVkX21haW5sb29wX25ldyAoKSkpCi0gICAgICAgIGdvdG8gbWFpbmxvb3BfZmFpbGVkOwotICAgICAgaWYgKHBhX3RocmVhZGVkX21haW5sb29wX3N0YXJ0ICh0aGlzLT5tYWlubG9vcCkgPCAwKSB7Ci0gICAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX2ZyZWUgKHRoaXMtPm1haW5sb29wKTsKLSAgICAgICAgdGhpcy0+bWFpbmxvb3AgPSBOVUxMOwotICAgICAgICBnb3RvIG1haW5sb29wX3N0YXJ0X2ZhaWxlZDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKGVsZW1lbnQsCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCi0gICAgICAgICAgICAgIEdTVF9BVURJT19CQVNFX1NSQyAodGhpcyktPmNsb2NrLCBUUlVFKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICAvKiB1bmNvcmsgYW5kIHN0YXJ0IHJlY29yZGluZyAqLwotICAgICAgZ3N0X3B1bHNlc3JjX3BsYXkgKHRoaXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgLyogc3RvcCByZWNvcmRpbmcgQVNBUCBieSBjb3JraW5nICovCi0gICAgICBwYV90aHJlYWRlZF9tYWlubG9vcF9sb2NrICh0aGlzLT5tYWlubG9vcCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0aGlzLCAiY29ya2luZyIpOwotICAgICAgZ3N0X3B1bHNlc3JjX3NldF9jb3JrZWQgKHRoaXMsIFRSVUUsIEZBTFNFKTsKLSAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX3VubG9jayAodGhpcy0+bWFpbmxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgLyogbm93IG1ha2Ugc3VyZSB3ZSBnZXQgb3V0IG9mIHRoZSBfcmVhZCBtZXRob2QgKi8KLSAgICAgIGdzdF9wdWxzZXNyY19wYXVzZSAodGhpcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGlmICh0aGlzLT5tYWlubG9vcCkKLSAgICAgICAgcGFfdGhyZWFkZWRfbWFpbmxvb3Bfc3RvcCAodGhpcy0+bWFpbmxvb3ApOwotCi0gICAgICBnc3RfcHVsc2VzcmNfZGVzdHJveV9jb250ZXh0ICh0aGlzKTsKLQotICAgICAgaWYgKHRoaXMtPm1haW5sb29wKSB7Ci0gICAgICAgIHBhX3RocmVhZGVkX21haW5sb29wX2ZyZWUgKHRoaXMtPm1haW5sb29wKTsKLSAgICAgICAgdGhpcy0+bWFpbmxvb3AgPSBOVUxMOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIC8qIGZvcm1hdF9sb3N0IGlzIHJlc2V0IGluIHJlbGVhc2UoKSBpbiBiYXNlYXVkaW9zaW5rICovCi0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKGVsZW1lbnQsCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCi0gICAgICAgICAgICAgIEdTVF9BVURJT19CQVNFX1NSQyAodGhpcyktPmNsb2NrKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbWFpbmxvb3BfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHRoaXMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfdGhyZWFkZWRfbWFpbmxvb3BfbmV3KCkgZmFpbGVkIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgfQotbWFpbmxvb3Bfc3RhcnRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHRoaXMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgICgicGFfdGhyZWFkZWRfbWFpbmxvb3Bfc3RhcnQoKSBmYWlsZWQiKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdzdF9wdWxzZXNyY19nZXRfdGltZSAoR3N0Q2xvY2sgKiBjbG9jaywgR3N0UHVsc2VTcmMgKiBzcmMpCi17Ci0gIHBhX3VzZWNfdCB0aW1lID0gMDsKLQotICBpZiAoc3JjLT5tYWlubG9vcCA9PSBOVUxMKQotICAgIGdvdG8gb3V0OwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wX2xvY2sgKHNyYy0+bWFpbmxvb3ApOwotICBpZiAoIXNyYy0+c3RyZWFtKQotICAgIGdvdG8gdW5sb2NrX2FuZF9vdXQ7Ci0KLSAgaWYgKGdzdF9wdWxzZXNyY19pc19kZWFkIChzcmMsIFRSVUUpKQotICAgIGdvdG8gdW5sb2NrX2FuZF9vdXQ7Ci0KLSAgaWYgKHBhX3N0cmVhbV9nZXRfdGltZSAoc3JjLT5zdHJlYW0sICZ0aW1lKSA8IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb3VsZCBub3QgZ2V0IHRpbWUiKTsKLSAgICB0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfSBlbHNlIHsKLSAgICB0aW1lICo9IDEwMDA7Ci0gIH0KLQotCi11bmxvY2tfYW5kX291dDoKLSAgcGFfdGhyZWFkZWRfbWFpbmxvb3BfdW5sb2NrIChzcmMtPm1haW5sb29wKTsKLQotb3V0OgotICByZXR1cm4gdGltZTsKLX0KZGlmZiAtLWdpdCBhL2V4dC9wdWxzZS9wdWxzZXNyYy5oIGIvZXh0L3B1bHNlL3B1bHNlc3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYTdkOTcuLjAwMDAwMDAKLS0tIGEvZXh0L3B1bHNlL3B1bHNlc3JjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKi0qLSBNb2RlOiBDOyBjLWJhc2ljLW9mZnNldDogMiAtKi0qLwotCi0vKgotICogIEdTdHJlYW1lciBwdWxzZWF1ZGlvIHBsdWdpbgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBMZW5uYXJ0IFBvZXR0ZXJpbmcKLSAqCi0gKiAgZ3N0LXB1bHNlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gKiAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgZ3N0LXB1bHNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCBnc3QtcHVsc2U7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQotICogIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1BVTFNFU1JDX0hfXwotI2RlZmluZSBfX0dTVF9QVUxTRVNSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9zcmMuaD4KLQotI2luY2x1ZGUgPHB1bHNlL3B1bHNlYXVkaW8uaD4KLSNpbmNsdWRlIDxwdWxzZS90aHJlYWQtbWFpbmxvb3AuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1BVTFNFU1JDIFwKLSAgKGdzdF9wdWxzZXNyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUFVMU0VTUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9QVUxTRVNSQyxHc3RQdWxzZVNyYykpCi0jZGVmaW5lIEdTVF9QVUxTRVNSQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9QVUxTRVNSQyxHc3RQdWxzZVNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1BVTFNFU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUFVMU0VTUkMpKQotI2RlZmluZSBHU1RfSVNfUFVMU0VTUkNfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1BVTFNFU1JDKSkKLSNkZWZpbmUgR1NUX1BVTFNFU1JDX0NBU1Qob2JqKSBcCi0gICgoR3N0UHVsc2VTcmMgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlU3JjIEdzdFB1bHNlU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1bHNlU3JjQ2xhc3MgR3N0UHVsc2VTcmNDbGFzczsKLQotc3RydWN0IF9Hc3RQdWxzZVNyYwotewotICBHc3RBdWRpb1NyYyBzcmM7Ci0KLSAgZ2NoYXIgKnNlcnZlciwgKmRldmljZSwgKmNsaWVudF9uYW1lOwotCi0gIHBhX3RocmVhZGVkX21haW5sb29wICptYWlubG9vcDsKLQotICBwYV9jb250ZXh0ICpjb250ZXh0OwotICBwYV9zdHJlYW0gKnN0cmVhbTsKLSAgZ3VpbnQzMiBzb3VyY2Vfb3V0cHV0X2lkeDsKLQotICBwYV9zYW1wbGVfc3BlYyBzYW1wbGVfc3BlYzsKLQotICBjb25zdCB2b2lkICpyZWFkX2J1ZmZlcjsKLSAgc2l6ZV90IHJlYWRfYnVmZmVyX2xlbmd0aDsKLQotICBnY2hhciAqZGV2aWNlX2Rlc2NyaXB0aW9uOwotCi0gIGdkb3VibGUgdm9sdW1lOwotICBnYm9vbGVhbiB2b2x1bWVfc2V0OjE7Ci0gIGdib29sZWFuIG11dGU6MTsKLSAgZ2Jvb2xlYW4gbXV0ZV9zZXQ6MTsKLSAgZ3VpbnQzMiBjdXJyZW50X3NvdXJjZV9pZHg7Ci0gIGdjaGFyICpjdXJyZW50X3NvdXJjZV9uYW1lOwotCi0gIGdpbnQgbm90aWZ5OyAvKiBhdG9taWMgKi8KLQotICBnYm9vbGVhbiBjb3JrZWQ6MTsKLSAgZ2Jvb2xlYW4gc3RyZWFtX2Nvbm5lY3RlZDoxOwotICBnYm9vbGVhbiBvcGVyYXRpb25fc3VjY2VzczoxOwotICBnYm9vbGVhbiBwYXVzZWQ6MTsKLSAgZ2Jvb2xlYW4gaW5fcmVhZDoxOwotCi0gIEdzdFN0cnVjdHVyZSAqcHJvcGVydGllczsKLSAgcGFfcHJvcGxpc3QgKnByb3BsaXN0OwotfTsKLQotc3RydWN0IF9Hc3RQdWxzZVNyY0NsYXNzCi17Ci0gIEdzdEF1ZGlvU3JjQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3B1bHNlc3JjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1BVTFNFU1JDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3B1bHNlL3B1bHNldXRpbC5jIGIvZXh0L3B1bHNlL3B1bHNldXRpbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2FhNGI2Li4wMDAwMDAwCi0tLSBhL2V4dC9wdWxzZS9wdWxzZXV0aWwuYworKysgL2Rldi9udWxsCkBAIC0xLDUwOSArMCwwIEBACi0vKgotICogIEdTdHJlYW1lciBwdWxzZWF1ZGlvIHBsdWdpbgotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBMZW5uYXJ0IFBvZXR0ZXJpbmcKLSAqCi0gKiAgZ3N0LXB1bHNlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gKiAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgZ3N0LXB1bHNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCBnc3QtcHVsc2U7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQotICogIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgInB1bHNldXRpbC5oIgotCi0jaWZkZWYgSEFWRV9VTklTVERfSAotIyBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgICAvKiBnZXRwaWQgb24gVU5JWCAqLwotI2VuZGlmCi0jaWZkZWYgSEFWRV9QUk9DRVNTX0gKLSMgaW5jbHVkZSA8cHJvY2Vzcy5oPiAgICAgICAgICAgLyogZ2V0cGlkIG9uIHdpbjMyICovCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHN0cnVjdAotewotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBnc3RfcG9zOwotICBwYV9jaGFubmVsX3Bvc2l0aW9uX3QgcGFfcG9zOwotfSBnc3RfcGFfcG9zX3RhYmxlW10gPSB7Ci0gIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTU9OTywgUEFfQ0hBTk5FTF9QT1NJVElPTl9NT05PfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULCBQQV9DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlR9LCB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULCBQQV9DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0NFTlRFUiwgUEFfQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0NFTlRFUn0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZULCBQQV9DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVH0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwgUEFfQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLCBQQV9DSEFOTkVMX1BPU0lUSU9OX0xGRX0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLCBQQV9DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUn0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVF9PRl9DRU5URVIsCi0gICAgICAgIFBBX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVF9PRl9DRU5URVJ9LCB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUX09GX0NFTlRFUiwKLSAgICAgICAgUEFfQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVF9PRl9DRU5URVJ9LCB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCwgUEFfQ0hBTk5FTF9QT1NJVElPTl9TSURFX0xFRlR9LCB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfUklHSFQsIFBBX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVH0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0NFTlRFUiwgUEFfQ0hBTk5FTF9QT1NJVElPTl9UT1BfQ0VOVEVSfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfTEVGVCwKLSAgICAgICAgUEFfQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfTEVGVH0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX1JJR0hULAotICAgICAgICBQQV9DSEFOTkVMX1BPU0lUSU9OX1RPUF9GUk9OVF9SSUdIVH0sIHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0NFTlRFUiwKLSAgICAgICAgUEFfQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfQ0VOVEVSfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9MRUZULCBQQV9DSEFOTkVMX1BPU0lUSU9OX1RPUF9SRUFSX0xFRlR9LCB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9SRUFSX1JJR0hULAotICAgICAgICBQQV9DSEFOTkVMX1BPU0lUSU9OX1RPUF9SRUFSX1JJR0hUfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9DRU5URVIsCi0gICAgICAgIFBBX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfQ0VOVEVSfSwgewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FLCBQQV9DSEFOTkVMX1BPU0lUSU9OX0lOVkFMSUR9Ci19OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdGF1ZGlvZm9ybWF0X3RvX3Bhc2FtcGxlZm9ybWF0IChHc3RBdWRpb0Zvcm1hdCBmb3JtYXQsCi0gICAgcGFfc2FtcGxlX2Zvcm1hdF90ICogc2YpCi17Ci0gIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1U4OgotICAgICAgKnNmID0gUEFfU0FNUExFX1U4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNkxFOgotICAgICAgKnNmID0gUEFfU0FNUExFX1MxNkxFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNkJFOgotICAgICAgKnNmID0gUEFfU0FNUExFX1MxNkJFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0YzMkxFOgotICAgICAgKnNmID0gUEFfU0FNUExFX0ZMT0FUMzJMRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzJCRToKLSAgICAgICpzZiA9IFBBX1NBTVBMRV9GTE9BVDMyQkU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyTEU6Ci0gICAgICAqc2YgPSBQQV9TQU1QTEVfUzMyTEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyQkU6Ci0gICAgICAqc2YgPSBQQV9TQU1QTEVfUzMyQkU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzI0TEU6Ci0gICAgICAqc2YgPSBQQV9TQU1QTEVfUzI0TEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzI0QkU6Ci0gICAgICAqc2YgPSBQQV9TQU1QTEVfUzI0QkU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzI0XzMyTEU6Ci0gICAgICAqc2YgPSBQQV9TQU1QTEVfUzI0XzMyTEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzI0XzMyQkU6Ci0gICAgICAqc2YgPSBQQV9TQU1QTEVfUzI0XzMyQkU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotZ3N0X3B1bHNlX2ZpbGxfc2FtcGxlX3NwZWMgKEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjLCBwYV9zYW1wbGVfc3BlYyAqIHNzKQotewotICBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfUkFXKSB7Ci0gICAgaWYgKCFnc3RhdWRpb2Zvcm1hdF90b19wYXNhbXBsZWZvcm1hdCAoR1NUX0FVRElPX0lORk9fRk9STUFUICgmc3BlYy0+aW5mbyksCi0gICAgICAgICAgICAmc3MtPmZvcm1hdCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVVfTEFXKSB7Ci0gICAgc3MtPmZvcm1hdCA9IFBBX1NBTVBMRV9VTEFXOwotICB9IGVsc2UgaWYgKHNwZWMtPnR5cGUgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0FfTEFXKSB7Ci0gICAgc3MtPmZvcm1hdCA9IFBBX1NBTVBMRV9BTEFXOwotICB9IGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgc3MtPmNoYW5uZWxzID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzcGVjLT5pbmZvKTsKLSAgc3MtPnJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmc3BlYy0+aW5mbyk7Ci0KLSAgaWYgKCFwYV9zYW1wbGVfc3BlY192YWxpZCAoc3MpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9wdWxzZV9maWxsX2Zvcm1hdF9pbmZvIChHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYywgcGFfZm9ybWF0X2luZm8gKiogZiwKLSAgICBndWludCAqIGNoYW5uZWxzKQotewotICBwYV9mb3JtYXRfaW5mbyAqZm9ybWF0OwotICBwYV9zYW1wbGVfZm9ybWF0X3Qgc2YgPSBQQV9TQU1QTEVfSU5WQUxJRDsKLSAgR3N0QXVkaW9JbmZvICphaW5mbyA9ICZzcGVjLT5pbmZvOwotCi0gIGZvcm1hdCA9IHBhX2Zvcm1hdF9pbmZvX25ldyAoKTsKLQotICBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVVfTEFXKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX1BDTTsKLSAgICBzZiA9IFBBX1NBTVBMRV9VTEFXOwotICB9IGVsc2UgaWYgKHNwZWMtPnR5cGUgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0FfTEFXKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX1BDTTsKLSAgICBzZiA9IFBBX1NBTVBMRV9BTEFXOwotICB9IGVsc2UgaWYgKHNwZWMtPnR5cGUgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX1JBVykgewotICAgIGZvcm1hdC0+ZW5jb2RpbmcgPSBQQV9FTkNPRElOR19QQ007Ci0gICAgaWYgKCFnc3RhdWRpb2Zvcm1hdF90b19wYXNhbXBsZWZvcm1hdCAoR1NUX0FVRElPX0lORk9fRk9STUFUIChhaW5mbyksICZzZikpCi0gICAgICBnb3RvIGZhaWw7Ci0gIH0gZWxzZSBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfQUMzKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX0FDM19JRUM2MTkzNzsKLSAgfSBlbHNlIGlmIChzcGVjLT50eXBlID09IEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9FQUMzKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX0VBQzNfSUVDNjE5Mzc7Ci0gIH0gZWxzZSBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfRFRTKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX0RUU19JRUM2MTkzNzsKLSAgfSBlbHNlIGlmIChzcGVjLT50eXBlID09IEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9NUEVHKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX01QRUdfSUVDNjE5Mzc7Ci0jaWYgUEFfQ0hFQ0tfVkVSU0lPTigzLDk5LDApCi0gIH0gZWxzZSBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVBFRzJfQUFDKSB7Ci0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX01QRUcyX0FBQ19JRUM2MTkzNzsKLSAgfSBlbHNlIGlmIChzcGVjLT50eXBlID09IEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9NUEVHNF9BQUMpIHsKLSAgICAvKiBIQUNLLiB0cmVhdCBNUEVHNCBBQUMgYXMgTVBFRzIgQUFDIGZvciB0aGUgbW9tZW50ICovCi0gICAgZm9ybWF0LT5lbmNvZGluZyA9IFBBX0VOQ09ESU5HX01QRUcyX0FBQ19JRUM2MTkzNzsKLSNlbmRpZgotICB9IGVsc2UgewotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIGlmIChmb3JtYXQtPmVuY29kaW5nID09IFBBX0VOQ09ESU5HX1BDTSkgewotICAgIHBhX2Zvcm1hdF9pbmZvX3NldF9zYW1wbGVfZm9ybWF0IChmb3JtYXQsIHNmKTsKLSAgICBwYV9mb3JtYXRfaW5mb19zZXRfY2hhbm5lbHMgKGZvcm1hdCwgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGFpbmZvKSk7Ci0gIH0KLQotICBwYV9mb3JtYXRfaW5mb19zZXRfcmF0ZSAoZm9ybWF0LCBHU1RfQVVESU9fSU5GT19SQVRFIChhaW5mbykpOwotCi0gIGlmICghcGFfZm9ybWF0X2luZm9fdmFsaWQgKGZvcm1hdCkpCi0gICAgZ290byBmYWlsOwotCi0gICpmID0gZm9ybWF0OwotICAqY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoYWluZm8pOwotCi0gIHJldHVybiBUUlVFOwotCi1mYWlsOgotICBpZiAoZm9ybWF0KQotICAgIHBhX2Zvcm1hdF9pbmZvX2ZyZWUgKGZvcm1hdCk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotY29uc3QgY2hhciAqCi1nc3RfcHVsc2Vfc2FtcGxlX2Zvcm1hdF90b19jYXBzX2Zvcm1hdCAocGFfc2FtcGxlX2Zvcm1hdF90IHNmKQotewotICBzd2l0Y2ggKHNmKSB7Ci0gICAgY2FzZSBQQV9TQU1QTEVfVTg6Ci0gICAgICByZXR1cm4gIlU4IjsKLQotICAgIGNhc2UgUEFfU0FNUExFX1MxNkxFOgotICAgICAgcmV0dXJuICJTMTZMRSI7Ci0KLSAgICBjYXNlIFBBX1NBTVBMRV9TMTZCRToKLSAgICAgIHJldHVybiAiUzE2QkUiOwotCi0gICAgY2FzZSBQQV9TQU1QTEVfRkxPQVQzMkxFOgotICAgICAgcmV0dXJuICJGMzJMRSI7Ci0KLSAgICBjYXNlIFBBX1NBTVBMRV9GTE9BVDMyQkU6Ci0gICAgICByZXR1cm4gIkYzMkJFIjsKLQotICAgIGNhc2UgUEFfU0FNUExFX1MzMkxFOgotICAgICAgcmV0dXJuICJTMzJMRSI7Ci0KLSAgICBjYXNlIFBBX1NBTVBMRV9TMzJCRToKLSAgICAgIHJldHVybiAiUzMyQkUiOwotCi0gICAgY2FzZSBQQV9TQU1QTEVfUzI0TEU6Ci0gICAgICByZXR1cm4gIlMyNExFIjsKLQotICAgIGNhc2UgUEFfU0FNUExFX1MyNEJFOgotICAgICAgcmV0dXJuICJTMjRCRSI7Ci0KLSAgICBjYXNlIFBBX1NBTVBMRV9TMjRfMzJMRToKLSAgICAgIHJldHVybiAiUzI0XzMyTEUiOwotCi0gICAgY2FzZSBQQV9TQU1QTEVfUzI0XzMyQkU6Ci0gICAgICByZXR1cm4gIlMyNF8zMkJFIjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKiBQQVRIX01BWCBpcyBub3QgZGVmaW5lZCBldmVyeXdoZXJlLCBlLmcuIG9uIEdOVSBIdXJkICovCi0jaWZuZGVmIFBBVEhfTUFYCi0jZGVmaW5lIFBBVEhfTUFYIDQwOTYKLSNlbmRpZgotCi1nY2hhciAqCi1nc3RfcHVsc2VfY2xpZW50X25hbWUgKHZvaWQpCi17Ci0gIGdjaGFyIGJ1ZltQQVRIX01BWF07Ci0KLSAgY29uc3QgY2hhciAqYzsKLQotICBpZiAoKGMgPSBnX2dldF9hcHBsaWNhdGlvbl9uYW1lICgpKSkKLSAgICByZXR1cm4gZ19zdHJkdXAgKGMpOwotICBlbHNlIGlmIChwYV9nZXRfYmluYXJ5X25hbWUgKGJ1Ziwgc2l6ZW9mIChidWYpKSkKLSAgICByZXR1cm4gZ19zdHJkdXAgKGJ1Zik7Ci0gIGVsc2UKLSAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmICgiR1N0cmVhbWVyLXBpZC0lbHUiLCAoZ3Vsb25nKSBnZXRwaWQgKCkpOwotfQotCi1wYV9jaGFubmVsX21hcCAqCi1nc3RfcHVsc2VfZ3N0X3RvX2NoYW5uZWxfbWFwIChwYV9jaGFubmVsX21hcCAqIG1hcCwKLSAgICBjb25zdCBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYykKLXsKLSAgZ2ludCBpLCBqOwotICBnaW50IGNoYW5uZWxzOwotICBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqcG9zOwotCi0gIHBhX2NoYW5uZWxfbWFwX2luaXQgKG1hcCk7Ci0KLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJnNwZWMtPmluZm8pOwotICBwb3MgPSBzcGVjLT5pbmZvLnBvc2l0aW9uOwotCi0gIGZvciAoaiA9IDA7IGogPCBjaGFubmVsczsgaisrKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZ3N0X3BhX3Bvc190YWJsZSk7IGkrKykgewotICAgICAgaWYgKHBvc1tqXSA9PSBnc3RfcGFfcG9zX3RhYmxlW2ldLmdzdF9wb3MpIHsKLSAgICAgICAgbWFwLT5tYXBbal0gPSBnc3RfcGFfcG9zX3RhYmxlW2ldLnBhX3BvczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChpID09IEdfTl9FTEVNRU5UUyAoZ3N0X3BhX3Bvc190YWJsZSkpCi0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGlmIChqICE9IHNwZWMtPmluZm8uY2hhbm5lbHMpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIG1hcC0+Y2hhbm5lbHMgPSBzcGVjLT5pbmZvLmNoYW5uZWxzOwotCi0gIGlmICghcGFfY2hhbm5lbF9tYXBfdmFsaWQgKG1hcCkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBtYXA7Ci19Ci0KLUdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKgotZ3N0X3B1bHNlX2NoYW5uZWxfbWFwX3RvX2dzdCAoY29uc3QgcGFfY2hhbm5lbF9tYXAgKiBtYXAsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ2Jvb2xlYW4gaW52YWxpZCA9IEZBTFNFOwotICBnaW50IGNoYW5uZWxzOwotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqcG9zOwotCi0gIGNoYW5uZWxzID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzcGVjLT5pbmZvKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobWFwLT5jaGFubmVscyA9PSBjaGFubmVscywgTlVMTCk7Ci0KLSAgcG9zID0gc3BlYy0+aW5mby5wb3NpdGlvbjsKLQotICBmb3IgKGogPSAwOyBqIDwgY2hhbm5lbHM7IGorKykgewotICAgIGZvciAoaSA9IDA7IGogPCBjaGFubmVscyAmJiBpIDwgR19OX0VMRU1FTlRTIChnc3RfcGFfcG9zX3RhYmxlKTsgaSsrKSB7Ci0gICAgICBpZiAobWFwLT5tYXBbal0gPT0gZ3N0X3BhX3Bvc190YWJsZVtpXS5wYV9wb3MpIHsKLSAgICAgICAgcG9zW2pdID0gZ3N0X3BhX3Bvc190YWJsZVtpXS5nc3RfcG9zOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPT0gR19OX0VMRU1FTlRTIChnc3RfcGFfcG9zX3RhYmxlKSkKLSAgICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKCFpbnZhbGlkCi0gICAgICAmJiAhZ3N0X2F1ZGlvX2NoZWNrX3ZhbGlkX2NoYW5uZWxfcG9zaXRpb25zIChwb3MsIGNoYW5uZWxzLCBGQUxTRSkpCi0gICAgaW52YWxpZCA9IFRSVUU7Ci0KLSAgaWYgKGludmFsaWQpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkrKykKLSAgICAgIHBvc1tpXSA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkU7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKHBvc1swXSAhPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FKQotICAgICAgc3BlYy0+aW5mby5mbGFncyAmPSB+R1NUX0FVRElPX0ZMQUdfVU5QT1NJVElPTkVEOwotICB9Ci0KLSAgcmV0dXJuIHNwZWM7Ci19Ci0KLXZvaWQKLWdzdF9wdWxzZV9jdm9sdW1lX2Zyb21fbGluZWFyIChwYV9jdm9sdW1lICogdiwgdW5zaWduZWQgY2hhbm5lbHMsCi0gICAgZ2RvdWJsZSB2b2x1bWUpCi17Ci0gIHBhX2N2b2x1bWVfc2V0ICh2LCBjaGFubmVscywgcGFfc3dfdm9sdW1lX2Zyb21fbGluZWFyICh2b2x1bWUpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tYWtlX3Byb3BsaXN0X2l0ZW0gKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcGFfcHJvcGxpc3QgKnAgPSAocGFfcHJvcGxpc3QgKikgdXNlcl9kYXRhOwotICBnY2hhciAqcHJvcF9pZCA9IChnY2hhciAqKSBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpOwotCi0gIC8qIGh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL3B1bHNlYXVkaW8vZG94eWdlbi9wcm9wbGlzdF84aC5odG1sICovCi0KLSAgLyogbWF0Y2ggcHJvcCBpZCAqLwotCi0gIC8qIGNoZWNrIHR5cGUgKi8KLSAgc3dpdGNoIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSkgewotICAgIGNhc2UgR19UWVBFX1NUUklORzoKLSAgICAgIHBhX3Byb3BsaXN0X3NldHMgKHAsIHByb3BfaWQsIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklORyAoInVubWFwcGVkIHByb3BlcnR5IHR5cGUgJXMiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXBhX3Byb3BsaXN0ICoKLWdzdF9wdWxzZV9tYWtlX3Byb3BsaXN0IChjb25zdCBHc3RTdHJ1Y3R1cmUgKiBwcm9wZXJ0aWVzKQotewotICBwYV9wcm9wbGlzdCAqcHJvcGxpc3QgPSBwYV9wcm9wbGlzdF9uZXcgKCk7Ci0KLSAgLyogaXRlcmF0ZSB0aGUgc3RydWN0dXJlIGFuZCBmaWxsIHRoZSBwcm9wbGlzdCAqLwotICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2ggKHByb3BlcnRpZXMsIG1ha2VfcHJvcGxpc3RfaXRlbSwgcHJvcGxpc3QpOwotICByZXR1cm4gcHJvcGxpc3Q7Ci19Ci0KLUdzdFN0cnVjdHVyZSAqCi1nc3RfcHVsc2VfbWFrZV9zdHJ1Y3R1cmUgKHBhX3Byb3BsaXN0ICogcHJvcGVydGllcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHI7Ci0gIHZvaWQgKnN0YXRlID0gTlVMTDsKLQotICBzdHIgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoInB1bHNlLXByb3BsaXN0Iik7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBjb25zdCBjaGFyICprZXksICp2YWw7Ci0KLSAgICBrZXkgPSBwYV9wcm9wbGlzdF9pdGVyYXRlIChwcm9wZXJ0aWVzLCAmc3RhdGUpOwotICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICAgIGJyZWFrOwotCi0gICAgdmFsID0gcGFfcHJvcGxpc3RfZ2V0cyAocHJvcGVydGllcywga2V5KTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHIsIGtleSwgR19UWVBFX1NUUklORywgdmFsLCBOVUxMKTsKLSAgfQotICByZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdWxzZV9mb3JtYXRfaW5mb19pbnRfcHJvcF90b192YWx1ZSAocGFfZm9ybWF0X2luZm8gKiBmb3JtYXQsCi0gICAgY29uc3QgY2hhciAqa2V5LCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIGludCBpOwotICBpbnQgKmEsIG47Ci0gIGludCBtaW4sIG1heDsKLQotICBpZiAocGFfZm9ybWF0X2luZm9fZ2V0X3Byb3BfaW50IChmb3JtYXQsIGtleSwgJmkpID09IDApIHsKLSAgICBnX3ZhbHVlX2luaXQgKHZhbHVlLCBHX1RZUEVfSU5UKTsKLSAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBpKTsKLQotICB9IGVsc2UgaWYgKHBhX2Zvcm1hdF9pbmZvX2dldF9wcm9wX2ludF9hcnJheSAoZm9ybWF0LCBrZXksICZhLCAmbikgPT0gMCkgewotICAgIGdfdmFsdWVfaW5pdCAodmFsdWUsIEdTVF9UWVBFX0xJU1QpOwotICAgIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9JTlQpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgZ192YWx1ZV9zZXRfaW50ICgmdiwgYVtpXSk7Ci0gICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKHZhbHVlLCAmdik7Ci0gICAgfQotCi0gICAgcGFfeGZyZWUgKGEpOwotCi0gIH0gZWxzZSBpZiAocGFfZm9ybWF0X2luZm9fZ2V0X3Byb3BfaW50X3JhbmdlIChmb3JtYXQsIGtleSwgJm1pbiwgJm1heCkgPT0gMCkgewotICAgIGdfdmFsdWVfaW5pdCAodmFsdWUsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKHZhbHVlLCBtaW4sIG1heCk7Ci0KLSAgfSBlbHNlIHsKLSAgICAvKiBQcm9wZXJ0eSBub3QgYXZhaWxhYmxlIG9yIGlzIG5vdCBhbiBpbnQgdHlwZSAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1Hc3RDYXBzICoKLWdzdF9wdWxzZV9mb3JtYXRfaW5mb190b19jYXBzIChwYV9mb3JtYXRfaW5mbyAqIGZvcm1hdCkKLXsKLSAgR3N0Q2FwcyAqcmV0ID0gTlVMTDsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIHBhX3NhbXBsZV9zcGVjIHNzOwotCi0gIHN3aXRjaCAoZm9ybWF0LT5lbmNvZGluZykgewotICAgIGNhc2UgUEFfRU5DT0RJTkdfUENNOnsKLSAgICAgIGNoYXIgKnRtcCA9IE5VTEw7Ci0KLSAgICAgIHBhX2Zvcm1hdF9pbmZvX3RvX3NhbXBsZV9zcGVjIChmb3JtYXQsICZzcywgTlVMTCk7Ci0KLSAgICAgIGlmIChwYV9mb3JtYXRfaW5mb19nZXRfcHJvcF9zdHJpbmcgKGZvcm1hdCwKLSAgICAgICAgICAgICAgUEFfUFJPUF9GT1JNQVRfU0FNUExFX0ZPUk1BVCwgJnRtcCkpIHsKLSAgICAgICAgLyogTm8gc3BlY2lmaWMgc2FtcGxlIGZvcm1hdCBtZWFucyBhbnkgc2FtcGxlIGZvcm1hdCAqLwotICAgICAgICByZXQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoX1BVTFNFX0NBUFNfUENNKTsKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIH0gZWxzZSBpZiAoc3MuZm9ybWF0ID09IFBBX1NBTVBMRV9BTEFXKSB7Ci0gICAgICAgIHJldCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChfUFVMU0VfQ0FQU19BTEFXKTsKLQotICAgICAgfSBlbHNlIGlmIChzcy5mb3JtYXQgPT0gUEFfU0FNUExFX1VMQVcpIHsKLSAgICAgICAgcmV0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKF9QVUxTRV9DQVBTX01VTEFXKTsKLQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogTGluZWFyIFBDTSBmb3JtYXQgKi8KLSAgICAgICAgY29uc3QgY2hhciAqc2Zvcm1hdCA9Ci0gICAgICAgICAgICBnc3RfcHVsc2Vfc2FtcGxlX2Zvcm1hdF90b19jYXBzX2Zvcm1hdCAoc3MuZm9ybWF0KTsKLQotICAgICAgICByZXQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoX1BVTFNFX0NBUFNfTElORUFSKTsKLQotICAgICAgICBpZiAoc2Zvcm1hdCkKLSAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChyZXQsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgcGFfeGZyZWUgKHRtcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFBBX0VOQ09ESU5HX0FDM19JRUM2MTkzNzoKLSAgICAgIHJldCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChfUFVMU0VfQ0FQU19BQzMpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBBX0VOQ09ESU5HX0VBQzNfSUVDNjE5Mzc6Ci0gICAgICByZXQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoX1BVTFNFX0NBUFNfRUFDMyk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgUEFfRU5DT0RJTkdfRFRTX0lFQzYxOTM3OgotICAgICAgcmV0ID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKF9QVUxTRV9DQVBTX0RUUyk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgUEFfRU5DT0RJTkdfTVBFR19JRUM2MTkzNzoKLSAgICAgIHJldCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChfUFVMU0VfQ0FQU19NUDMpOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgR1NUX1dBUk5JTkcgKCJGb3VuZCBhIFBBIGZvcm1hdCB0aGF0IHdlIGRvbid0IHN1cHBvcnQgeWV0Iik7Ci0gICAgICBnb3RvIG91dDsKLSAgfQotCi0gIGlmIChnc3RfcHVsc2VfZm9ybWF0X2luZm9faW50X3Byb3BfdG9fdmFsdWUgKGZvcm1hdCwgUEFfUFJPUF9GT1JNQVRfUkFURSwgJnYpKQotICAgIGdzdF9jYXBzX3NldF92YWx1ZSAocmV0LCAicmF0ZSIsICZ2KTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0KLSAgaWYgKGdzdF9wdWxzZV9mb3JtYXRfaW5mb19pbnRfcHJvcF90b192YWx1ZSAoZm9ybWF0LCBQQV9QUk9QX0ZPUk1BVF9DSEFOTkVMUywKLSAgICAgICAgICAmdikpCi0gICAgZ3N0X2NhcHNfc2V0X3ZhbHVlIChyZXQsICJjaGFubmVscyIsICZ2KTsKLQotb3V0OgotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZXh0L3B1bHNlL3B1bHNldXRpbC5oIGIvZXh0L3B1bHNlL3B1bHNldXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTJjNDJkLi4wMDAwMDAwCi0tLSBhL2V4dC9wdWxzZS9wdWxzZXV0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiAgR1N0cmVhbWVyIHB1bHNlYXVkaW8gcGx1Z2luCi0gKgotICogIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IExlbm5hcnQgUG9ldHRlcmluZwotICoKLSAqICBnc3QtcHVsc2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKLSAqICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBnc3QtcHVsc2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIGdzdC1wdWxzZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxCi0gKiAgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUFVMU0VVVElMX0hfXwotI2RlZmluZSBfX0dTVF9QVUxTRVVUSUxfSF9fCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxwdWxzZS9wdWxzZWF1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvcmluZ2J1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb3NpbmsuaD4KLQotCi0jaWYgKEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4pCi0jIGRlZmluZSBfUFVMU0VfRk9STUFUUyAgICJ7IFMxNkxFLCBTMTZCRSwgRjMyTEUsIEYzMkJFLCBTMzJMRSwgUzMyQkUsICIgXAotICAgICAgICAgICAgICAgICAgICAgIlMyNExFLCBTMjRCRSwgUzI0XzMyTEUsIFMyNF8zMkJFLCBVOCB9IgotI2Vsc2UKLSMgZGVmaW5lIF9QVUxTRV9GT1JNQVRTICAgInsgUzE2QkUsIFMxNkxFLCBGMzJCRSwgRjMyTEUsIFMzMkJFLCBTMzJMRSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAiUzI0QkUsIFMyNExFLCBTMjRfMzJCRSwgUzI0XzMyTEUsIFU4IH0iCi0jZW5kaWYKLQotI2RlZmluZSBfUFVMU0VfQ0FQU19MSU5FQVIgXAotICAgICJhdWRpby94LXJhdywgIiBcCi0gICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBfUFVMU0VfRk9STUFUUyAiLCAiIFwKLSAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgXAotICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAzMiBdOyAiCi0jZGVmaW5lIF9QVUxTRV9DQVBTX0FMQVcgXAotICAgICJhdWRpby94LWFsYXcsICIgXAotICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWF0sICIgXAotICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAzMiBdOyAiCi0jZGVmaW5lIF9QVUxTRV9DQVBTX01VTEFXIFwKLSAgICAiYXVkaW8veC1tdWxhdywgIiBcCi0gICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYXSwgIiBcCi0gICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDMyIF07ICIKLQotI2RlZmluZSBfUFVMU0VfQ0FQU19BQzMgImF1ZGlvL3gtYWMzLCBmcmFtZWQgPSAoYm9vbGVhbikgdHJ1ZTsgIgotI2RlZmluZSBfUFVMU0VfQ0FQU19FQUMzICJhdWRpby94LWVhYzMsIGZyYW1lZCA9IChib29sZWFuKSB0cnVlOyAiCi0jZGVmaW5lIF9QVUxTRV9DQVBTX0RUUyAiYXVkaW8veC1kdHMsIGZyYW1lZCA9IChib29sZWFuKSB0cnVlLCAiIFwKLSAgICAiYmxvY2stc2l6ZSA9IChpbnQpIHsgNTEyLCAxMDI0LCAyMDQ4IH07ICIKLSNkZWZpbmUgX1BVTFNFX0NBUFNfTVAzICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbiA9IChpbnQpIDEsICIgXAotICAgICJtcGVnYXVkaW92ZXJzaW9uID0gKGludCkgWyAxLCAyIF0sIHBhcnNlZCA9IChib29sZWFuKSB0cnVlOyIKLSNkZWZpbmUgX1BVTFNFX0NBUFNfQUFDICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbiA9IChpbnQpIHsgMiwgNCB9LCAiIFwKLSAgICAiZnJhbWVkID0gKGJvb2xlYW4pIHRydWUsIHN0cmVhbS1mb3JtYXQgPSAoc3RyaW5nKSBhZHRzOyIKLQotI2RlZmluZSBfUFVMU0VfQ0FQU19QQ00gXAotICBfUFVMU0VfQ0FQU19MSU5FQVIgXAotICBfUFVMU0VfQ0FQU19BTEFXIFwKLSAgX1BVTFNFX0NBUFNfTVVMQVcKLQotCi1nYm9vbGVhbiBnc3RfcHVsc2VfZmlsbF9zYW1wbGVfc3BlYyAoR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMsCi0gICAgcGFfc2FtcGxlX3NwZWMgKiBzcyk7Ci1nYm9vbGVhbiBnc3RfcHVsc2VfZmlsbF9mb3JtYXRfaW5mbyAoR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMsCi0gICAgcGFfZm9ybWF0X2luZm8gKiogZiwgZ3VpbnQgKiBjaGFubmVscyk7Ci1jb25zdCBjaGFyICogZ3N0X3B1bHNlX3NhbXBsZV9mb3JtYXRfdG9fY2Fwc19mb3JtYXQgKHBhX3NhbXBsZV9mb3JtYXRfdCBzZik7Ci0KLWdjaGFyICpnc3RfcHVsc2VfY2xpZW50X25hbWUgKHZvaWQpOwotCi1wYV9jaGFubmVsX21hcCAqZ3N0X3B1bHNlX2dzdF90b19jaGFubmVsX21hcCAocGFfY2hhbm5lbF9tYXAgKiBtYXAsCi0gICAgY29uc3QgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotCi1Hc3RBdWRpb1JpbmdCdWZmZXJTcGVjICpnc3RfcHVsc2VfY2hhbm5lbF9tYXBfdG9fZ3N0IChjb25zdCBwYV9jaGFubmVsX21hcCAqIG1hcCwKLSAgICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYyk7Ci0KLXZvaWQgZ3N0X3B1bHNlX2N2b2x1bWVfZnJvbV9saW5lYXIgKHBhX2N2b2x1bWUgKnYsIHVuc2lnbmVkIGNoYW5uZWxzLCBnZG91YmxlIHZvbHVtZSk7Ci0KLXBhX3Byb3BsaXN0ICpnc3RfcHVsc2VfbWFrZV9wcm9wbGlzdCAoY29uc3QgR3N0U3RydWN0dXJlICpwcm9wZXJ0aWVzKTsKLUdzdFN0cnVjdHVyZSAqZ3N0X3B1bHNlX21ha2Vfc3RydWN0dXJlIChwYV9wcm9wbGlzdCAqcHJvcGVydGllcyk7Ci0KLUdzdENhcHMgKiBnc3RfcHVsc2VfZm9ybWF0X2luZm9fdG9fY2FwcyAocGFfZm9ybWF0X2luZm8gKiBmb3JtYXQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L01ha2VmaWxlLmFtIGIvZXh0L3JhdzEzOTQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZjQxMmEuLjAwMDAwMDAKLS0tIGEvZXh0L3JhdzEzOTQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3QxMzk0LmxhCi0KLWlmIFVTRV9MSUJJRUM2MTg4MwotaGR2c291cmNlID0gZ3N0aGR2MTM5NHNyYy5jCi1oZHZoZWFkZXJzID0gZ3N0aGR2MTM5NHNyYy5oCi1lbHNlCi1oZHZzb3VyY2UgPSAKLWhkdmhlYWRlcnMgPSAKLWVuZGlmCi0KLWxpYmdzdDEzOTRfbGFfU09VUkNFUyA9IFwKLQlnc3QxMzk0LmMgZ3N0MTM5NHByb2JlLmMgZ3N0ZHYxMzk0c3JjLmMgJChoZHZzb3VyY2UpIFwKLQlnc3QxMzk0Y2xvY2suYwotbGliZ3N0MTM5NF9sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSBcCi0JJChEVjEzOTRfQ0ZMQUdTKQotbGliZ3N0MTM5NF9sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChEVjEzOTRfTElCUykKLWxpYmdzdDEzOTRfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0MTM5NF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGR2MTM5NHNyYy5oIGdzdDEzOTRwcm9iZS5oICQoaGR2aGVhZGVycykgXAotCWdzdDEzOTRjbG9jay5oCi0KZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L01ha2VmaWxlLmluIGIvZXh0L3JhdzEzOTQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYTkwYmQuLjAwMDAwMDAKLS0tIGEvZXh0L3JhdzEzOTQvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NjggKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L3JhdzEzOTQKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ub2luc3RfSEVBREVSU19ESVNUKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3QxMzk0X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9fbGliZ3N0MTM5NF9sYV9TT1VSQ0VTX0RJU1QgPSBnc3QxMzk0LmMgZ3N0MTM5NHByb2JlLmMgXAotCWdzdGR2MTM5NHNyYy5jIGdzdGhkdjEzOTRzcmMuYyBnc3QxMzk0Y2xvY2suYwotQFVTRV9MSUJJRUM2MTg4M19UUlVFQGFtX19vYmplY3RzXzEgPSBsaWJnc3QxMzk0X2xhLWdzdGhkdjEzOTRzcmMubG8KLWFtX2xpYmdzdDEzOTRfbGFfT0JKRUNUUyA9IGxpYmdzdDEzOTRfbGEtZ3N0MTM5NC5sbyBcCi0JbGliZ3N0MTM5NF9sYS1nc3QxMzk0cHJvYmUubG8gbGliZ3N0MTM5NF9sYS1nc3RkdjEzOTRzcmMubG8gXAotCSQoYW1fX29iamVjdHNfMSkgbGliZ3N0MTM5NF9sYS1nc3QxMzk0Y2xvY2subG8KLWxpYmdzdDEzOTRfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0MTM5NF9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0MTM5NF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdDEzOTRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3QxMzk0X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdDEzOTRfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0MTM5NF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChhbV9fbGliZ3N0MTM5NF9sYV9TT1VSQ0VTX0RJU1QpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX25vaW5zdF9IRUFERVJTX0RJU1QgPSBnc3RkdjEzOTRzcmMuaCBnc3QxMzk0cHJvYmUuaCBcCi0JZ3N0aGR2MTM5NHNyYy5oIGdzdDEzOTRjbG9jay5oCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0MTM5NC5sYQotQFVTRV9MSUJJRUM2MTg4M19GQUxTRUBoZHZzb3VyY2UgPSAKLUBVU0VfTElCSUVDNjE4ODNfVFJVRUBoZHZzb3VyY2UgPSBnc3RoZHYxMzk0c3JjLmMKLUBVU0VfTElCSUVDNjE4ODNfRkFMU0VAaGR2aGVhZGVycyA9IAotQFVTRV9MSUJJRUM2MTg4M19UUlVFQGhkdmhlYWRlcnMgPSBnc3RoZHYxMzk0c3JjLmgKLWxpYmdzdDEzOTRfbGFfU09VUkNFUyA9IFwKLQlnc3QxMzk0LmMgZ3N0MTM5NHByb2JlLmMgZ3N0ZHYxMzk0c3JjLmMgJChoZHZzb3VyY2UpIFwKLQlnc3QxMzk0Y2xvY2suYwotCi1saWJnc3QxMzk0X2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpIFwKLQkkKERWMTM5NF9DRkxBR1MpCi0KLWxpYmdzdDEzOTRfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCSQoRFYxMzk0X0xJQlMpCi0KLWxpYmdzdDEzOTRfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0MTM5NF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RkdjEzOTRzcmMuaCBnc3QxMzk0cHJvYmUuaCAkKGhkdmhlYWRlcnMpIFwKLQlnc3QxMzk0Y2xvY2suaAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvcmF3MTM5NC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvcmF3MTM5NC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdDEzOTQubGE6ICQobGliZ3N0MTM5NF9sYV9PQkpFQ1RTKSAkKGxpYmdzdDEzOTRfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdDEzOTRfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdDEzOTRfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdDEzOTRfbGFfT0JKRUNUUykgJChsaWJnc3QxMzk0X2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3QxMzk0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3QxMzk0Y2xvY2suUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3QxMzk0X2xhLWdzdDEzOTRwcm9iZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdDEzOTRfbGEtZ3N0ZHYxMzk0c3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3RoZHYxMzk0c3JjLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3QxMzk0X2xhLWdzdDEzOTQubG86IGdzdDEzOTQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdDEzOTRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0MTM5NF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0MTM5NF9sYS1nc3QxMzk0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3QxMzk0X2xhLWdzdDEzOTQuVHBvIC1jIC1vIGxpYmdzdDEzOTRfbGEtZ3N0MTM5NC5sbyBgdGVzdCAtZiAnZ3N0MTM5NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QxMzk0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdDEzOTRfbGEtZ3N0MTM5NC5UcG8gJChERVBESVIpL2xpYmdzdDEzOTRfbGEtZ3N0MTM5NC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3QxMzk0LmMnIG9iamVjdD0nbGliZ3N0MTM5NF9sYS1nc3QxMzk0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0MTM5NF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3QxMzk0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdDEzOTRfbGEtZ3N0MTM5NC5sbyBgdGVzdCAtZiAnZ3N0MTM5NC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QxMzk0LmMKLQotbGliZ3N0MTM5NF9sYS1nc3QxMzk0cHJvYmUubG86IGdzdDEzOTRwcm9iZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0MTM5NF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3QxMzk0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3QxMzk0X2xhLWdzdDEzOTRwcm9iZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3QxMzk0cHJvYmUuVHBvIC1jIC1vIGxpYmdzdDEzOTRfbGEtZ3N0MTM5NHByb2JlLmxvIGB0ZXN0IC1mICdnc3QxMzk0cHJvYmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0MTM5NHByb2JlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdDEzOTRfbGEtZ3N0MTM5NHByb2JlLlRwbyAkKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3QxMzk0cHJvYmUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0MTM5NHByb2JlLmMnIG9iamVjdD0nbGliZ3N0MTM5NF9sYS1nc3QxMzk0cHJvYmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3QxMzk0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdDEzOTRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0MTM5NF9sYS1nc3QxMzk0cHJvYmUubG8gYHRlc3QgLWYgJ2dzdDEzOTRwcm9iZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QxMzk0cHJvYmUuYwotCi1saWJnc3QxMzk0X2xhLWdzdGR2MTM5NHNyYy5sbzogZ3N0ZHYxMzk0c3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3QxMzk0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdDEzOTRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdDEzOTRfbGEtZ3N0ZHYxMzk0c3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3QxMzk0X2xhLWdzdGR2MTM5NHNyYy5UcG8gLWMgLW8gbGliZ3N0MTM5NF9sYS1nc3RkdjEzOTRzcmMubG8gYHRlc3QgLWYgJ2dzdGR2MTM5NHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkdjEzOTRzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3RkdjEzOTRzcmMuVHBvICQoREVQRElSKS9saWJnc3QxMzk0X2xhLWdzdGR2MTM5NHNyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RkdjEzOTRzcmMuYycgb2JqZWN0PSdsaWJnc3QxMzk0X2xhLWdzdGR2MTM5NHNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdDEzOTRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0MTM5NF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3QxMzk0X2xhLWdzdGR2MTM5NHNyYy5sbyBgdGVzdCAtZiAnZ3N0ZHYxMzk0c3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGR2MTM5NHNyYy5jCi0KLWxpYmdzdDEzOTRfbGEtZ3N0aGR2MTM5NHNyYy5sbzogZ3N0aGR2MTM5NHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0MTM5NF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3QxMzk0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3QxMzk0X2xhLWdzdGhkdjEzOTRzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdDEzOTRfbGEtZ3N0aGR2MTM5NHNyYy5UcG8gLWMgLW8gbGliZ3N0MTM5NF9sYS1nc3RoZHYxMzk0c3JjLmxvIGB0ZXN0IC1mICdnc3RoZHYxMzk0c3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGhkdjEzOTRzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3RoZHYxMzk0c3JjLlRwbyAkKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3RoZHYxMzk0c3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGhkdjEzOTRzcmMuYycgb2JqZWN0PSdsaWJnc3QxMzk0X2xhLWdzdGhkdjEzOTRzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3QxMzk0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdDEzOTRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0MTM5NF9sYS1nc3RoZHYxMzk0c3JjLmxvIGB0ZXN0IC1mICdnc3RoZHYxMzk0c3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGhkdjEzOTRzcmMuYwotCi1saWJnc3QxMzk0X2xhLWdzdDEzOTRjbG9jay5sbzogZ3N0MTM5NGNsb2NrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3QxMzk0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdDEzOTRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdDEzOTRfbGEtZ3N0MTM5NGNsb2NrLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3QxMzk0X2xhLWdzdDEzOTRjbG9jay5UcG8gLWMgLW8gbGliZ3N0MTM5NF9sYS1nc3QxMzk0Y2xvY2subG8gYHRlc3QgLWYgJ2dzdDEzOTRjbG9jay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3QxMzk0Y2xvY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0MTM5NF9sYS1nc3QxMzk0Y2xvY2suVHBvICQoREVQRElSKS9saWJnc3QxMzk0X2xhLWdzdDEzOTRjbG9jay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3QxMzk0Y2xvY2suYycgb2JqZWN0PSdsaWJnc3QxMzk0X2xhLWdzdDEzOTRjbG9jay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdDEzOTRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0MTM5NF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3QxMzk0X2xhLWdzdDEzOTRjbG9jay5sbyBgdGVzdCAtZiAnZ3N0MTM5NGNsb2NrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdDEzOTRjbG9jay5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L2dzdDEzOTQuYyBiL2V4dC9yYXcxMzk0L2dzdDEzOTQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhOWU5My4uMDAwMDAwMAotLS0gYS9leHQvcmF3MTM5NC9nc3QxMzk0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0KLSNpbmNsdWRlICJnc3RkdjEzOTRzcmMuaCIKLSNpZmRlZiBIQVZFX0xJQklFQzYxODgzCi0jaW5jbHVkZSAiZ3N0aGR2MTM5NHNyYy5oIgotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZHYxMzk0c3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9EVjEzOTRTUkMpKQotICAgIHJldHVybiBGQUxTRTsKLSNpZmRlZiBIQVZFX0xJQklFQzYxODgzCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImhkdjEzOTRzcmMiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX0hEVjEzOTRTUkMpKQotICAgIHJldHVybiBGQUxTRTsKLSNlbmRpZgotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgMTM5NCwKLSAgICAiU291cmNlIGZvciB2aWRlbyBkYXRhIHZpYSBJRUVFMTM5NCBpbnRlcmZhY2UiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7CmRpZmYgLS1naXQgYS9leHQvcmF3MTM5NC9nc3QxMzk0Y2xvY2suYyBiL2V4dC9yYXcxMzk0L2dzdDEzOTRjbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzdiYTAwLi4wMDAwMDAwCi0tLSBhL2V4dC9yYXcxMzk0L2dzdDEzOTRjbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSAgICAgIERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIGdzdDEzOTRjbG9jay5jOiBDbG9jayBmb3IgdXNlIGJ5IElFRUUgMTM5NCBwbHVnaW5zCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0MTM5NGNsb2NrLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF8xMzk0X2Nsb2NrX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF8xMzk0X2Nsb2NrX2RlYnVnCi0KLXN0YXRpYyB2b2lkIGdzdF8xMzk0X2Nsb2NrX2NsYXNzX2luaXQgKEdzdDEzOTRDbG9ja0NsYXNzICoga2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0XzEzOTRfY2xvY2tfaW5pdCAoR3N0MTM5NENsb2NrICogY2xvY2spOwotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lIGdzdF8xMzk0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKTsKLQotc3RhdGljIEdzdFN5c3RlbUNsb2NrQ2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLS8qIHN0YXRpYyBndWludCBnc3RfMTM5NF9jbG9ja19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLwotCi1HVHlwZQotZ3N0XzEzOTRfY2xvY2tfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBjbG9ja190eXBlID0gMDsKLQotICBpZiAoIWNsb2NrX3R5cGUpIHsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGNsb2NrX2luZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdDEzOTRDbG9ja0NsYXNzKSwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgKEdDbGFzc0luaXRGdW5jKSBnc3RfMTM5NF9jbG9ja19jbGFzc19pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBzaXplb2YgKEdzdDEzOTRDbG9jayksCi0gICAgICA0LAotICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSBnc3RfMTM5NF9jbG9ja19pbml0LAotICAgICAgTlVMTAotICAgIH07Ci0KLSAgICBjbG9ja190eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfU1lTVEVNX0NMT0NLLCAiR3N0MTM5NENsb2NrIiwKLSAgICAgICAgJmNsb2NrX2luZm8sIDApOwotICB9Ci0gIHJldHVybiBjbG9ja190eXBlOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfMTM5NF9jbG9ja19jbGFzc19pbml0IChHc3QxMzk0Q2xvY2tDbGFzcyAqIGtsYXNzKQotewotICBHc3RDbG9ja0NsYXNzICpnc3RjbG9ja19jbGFzczsKLQotICBnc3RjbG9ja19jbGFzcyA9IChHc3RDbG9ja0NsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdzdGNsb2NrX2NsYXNzLT5nZXRfaW50ZXJuYWxfdGltZSA9IGdzdF8xMzk0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfMTM5NF9jbG9ja19kZWJ1ZywgIjEzOTRjbG9jayIsIDAsICIxMzk0Y2xvY2siKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF8xMzk0X2Nsb2NrX2luaXQgKEdzdDEzOTRDbG9jayAqIGNsb2NrKQotewotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChjbG9jaywgR1NUX0NMT0NLX0ZMQUdfQ0FOX1NFVF9NQVNURVIpOwotfQotCi0vKioKLSAqIGdzdF8xMzk0X2Nsb2NrX25ldzoKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgY2xvY2sKLSAqCi0gKiBDcmVhdGUgYSBuZXcgI0dzdDEzOTRDbG9jayBpbnN0YW5jZS4KLSAqCi0gKiBSZXR1cm5zOiBhIG5ldyAjR3N0MTM5NENsb2NrCi0gKi8KLUdzdDEzOTRDbG9jayAqCi1nc3RfMTM5NF9jbG9ja19uZXcgKGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0MTM5NENsb2NrICpfMTM5NGNsb2NrID0KLSAgICAgIEdTVF8xMzk0X0NMT0NLIChnX29iamVjdF9uZXcgKEdTVF9UWVBFXzEzOTRfQ0xPQ0ssICJuYW1lIiwgbmFtZSwKLSAgICAgICAgICAiY2xvY2stdHlwZSIsIEdTVF9DTE9DS19UWVBFX09USEVSLCBOVUxMKSk7Ci0KLSAgcmV0dXJuIF8xMzk0Y2xvY2s7Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdzdF8xMzk0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3QxMzk0Q2xvY2sgKl8xMzk0Y2xvY2s7Ci0gIEdzdENsb2NrVGltZSByZXN1bHQ7Ci0gIGd1aW50MzIgY3ljbGVfdGltZXI7Ci0gIGd1aW50NjQgbG9jYWxfdGltZTsKLQotICBfMTM5NGNsb2NrID0gR1NUXzEzOTRfQ0xPQ0tfQ0FTVCAoY2xvY2spOwotCi0gIGlmIChfMTM5NGNsb2NrLT5oYW5kbGUgIT0gTlVMTCkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoY2xvY2spOwotICAgIHJhdzEzOTRfcmVhZF9jeWNsZV90aW1lciAoXzEzOTRjbG9jay0+aGFuZGxlLCAmY3ljbGVfdGltZXIsICZsb2NhbF90aW1lKTsKLQotICAgIGlmIChjeWNsZV90aW1lciA8IF8xMzk0Y2xvY2stPmN5Y2xlX3RpbWVyX2xvKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoY2xvY2ssICJvdmVyZmxvdyAldSB0byAldSIsCi0gICAgICAgICAgXzEzOTRjbG9jay0+Y3ljbGVfdGltZXJfbG8sIGN5Y2xlX3RpbWVyKTsKLQotICAgICAgXzEzOTRjbG9jay0+Y3ljbGVfdGltZXJfaGkrKzsKLSAgICB9Ci0gICAgXzEzOTRjbG9jay0+Y3ljbGVfdGltZXJfbG8gPSBjeWNsZV90aW1lcjsKLQotICAgIC8qIGdldCB0aGUgc2Vjb25kcyBmcm9tIHRoZSBjeWNsZVNlY29uZHMgY291bnRlciAqLwotICAgIHJlc3VsdCA9ICgoKCgoZ3VpbnQ2NCkgXzEzOTRjbG9jay0+Y3ljbGVfdGltZXJfaGkpIDw8IDMyKSB8Ci0gICAgICAgICAgICBjeWNsZV90aW1lcikgPj4gMjUpICogR1NUX1NFQ09ORDsKLSAgICAvKiBhZGQgdGhlIG1pY3Jvc2Vjb25kcyBmcm9tIHRoZSBjeWNsZUNvdW50IGNvdW50ZXIgKi8KLSAgICByZXN1bHQgKz0gKCgoY3ljbGVfdGltZXIgPj4gMTIpICYgMHgxZmZmKSAqIDEyNSkgKiBHU1RfVVNFQ09ORDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChjbG9jaywgInJlc3VsdCAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHJlc3VsdCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChjbG9jayk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLWdzdF8xMzk0X2Nsb2NrX3NldF9oYW5kbGUgKEdzdDEzOTRDbG9jayAqIGNsb2NrLCByYXcxMzk0aGFuZGxlX3QgaGFuZGxlKQotewotICBjbG9jay0+aGFuZGxlID0gaGFuZGxlOwotICBjbG9jay0+Y3ljbGVfdGltZXJfbG8gPSAwOwotICBjbG9jay0+Y3ljbGVfdGltZXJfaGkgPSAwOwotfQotCi12b2lkCi1nc3RfMTM5NF9jbG9ja191bnNldF9oYW5kbGUgKEdzdDEzOTRDbG9jayAqIGNsb2NrKQotewotICBjbG9jay0+aGFuZGxlID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L2dzdDEzOTRjbG9jay5oIGIvZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMTI1MWUuLjAwMDAwMDAKLS0tIGEvZXh0L3JhdzEzOTQvZ3N0MTM5NGNsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5ICAgICAgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogZ3N0MTM5NGNsb2NrLmg6IENsb2NrIGZvciB1c2UgYnkgdGhlIElFRUUgMTM5NAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfMTM5NF9DTE9DS19IX18KLSNkZWZpbmUgX19HU1RfMTM5NF9DTE9DS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0c3lzdGVtY2xvY2suaD4KLQotI2luY2x1ZGUgPGxpYnJhdzEzOTQvcmF3MTM5NC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfMTM5NF9DTE9DSyBcCi0gIChnc3RfMTM5NF9jbG9ja19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfMTM5NF9DTE9DSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFXzEzOTRfQ0xPQ0ssR3N0MTM5NENsb2NrKSkKLSNkZWZpbmUgR1NUXzEzOTRfQ0xPQ0tfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfMTM5NF9DTE9DSyxHc3QxMzk0Q2xvY2tDbGFzcykpCi0jZGVmaW5lIEdTVF9JU18xMzk0X0NMT0NLKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfMTM5NF9DTE9DSykpCi0jZGVmaW5lIEdTVF9JU18xMzk0X0NMT0NLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFXzEzOTRfQ0xPQ0spKQotI2RlZmluZSBHU1RfMTM5NF9DTE9DS19DQVNUKG9iaikgXAotICAoKEdzdDEzOTRDbG9jayopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3QxMzk0Q2xvY2sgR3N0MTM5NENsb2NrOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdDEzOTRDbG9ja0NsYXNzIEdzdDEzOTRDbG9ja0NsYXNzOwotCi0vKioKLSAqIEdzdDEzOTRDbG9jazoKLSAqIEBjbG9jazogcGFyZW50ICNHc3RTeXN0ZW1DbG9jawotICoKLSAqIE9wYXF1ZSAjR3N0MTM5NENsb2NrLgotICovCi1zdHJ1Y3QgX0dzdDEzOTRDbG9jayB7Ci0gIEdzdFN5c3RlbUNsb2NrIGNsb2NrOwotCi0gIHJhdzEzOTRoYW5kbGVfdCBoYW5kbGU7Ci0KLSAgZ3VpbnQzMiBjeWNsZV90aW1lcl9sbzsKLSAgZ3VpbnQzMiBjeWNsZV90aW1lcl9oaTsKLX07Ci0KLXN0cnVjdCBfR3N0MTM5NENsb2NrQ2xhc3MgewotICBHc3RTeXN0ZW1DbG9ja0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlICAgICAgICAgICBnc3RfMTM5NF9jbG9ja19nZXRfdHlwZSAgICAgICAgKHZvaWQpOwotR3N0MTM5NENsb2NrKiAgIGdzdF8xMzk0X2Nsb2NrX25ldyAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgKm5hbWUpOwotdm9pZCAgICAgICAgICAgIGdzdF8xMzk0X2Nsb2NrX3NldF9oYW5kbGUgICAgICAoR3N0MTM5NENsb2NrICpjbG9jaywKLSAgICByYXcxMzk0aGFuZGxlX3QgaGFuZGxlKTsKLXZvaWQgICAgICAgICAgICBnc3RfMTM5NF9jbG9ja191bnNldF9oYW5kbGUgICAgICAoR3N0MTM5NENsb2NrICpjbG9jayk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF8xMzk0X0NMT0NLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3JhdzEzOTQvZ3N0MTM5NHByb2JlLmMgYi9leHQvcmF3MTM5NC9nc3QxMzk0cHJvYmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQxMWEwMS4uMDAwMDAwMAotLS0gYS9leHQvcmF3MTM5NC9nc3QxMzk0cHJvYmUuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdWxpZW4gUHV5ZHQgPGpwdXlkdEBmcmVlLmZyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaWJhdmMxMzk0L2F2YzEzOTQuaD4KLSNpbmNsdWRlIDxsaWJhdmMxMzk0L2F2YzEzOTRfdmNyLmg+Ci0jaW5jbHVkZSA8bGliYXZjMTM5NC9yb20xMzk0Lmg+Ci0jaW5jbHVkZSA8bGlicmF3MTM5NC9yYXcxMzk0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3QxMzk0cHJvYmUuaCIKLQotI2lmIDAKLQotc3RhdGljIEdWYWx1ZUFycmF5ICoKLWdzdF8xMzk0X2dldF9ndWlkX2FycmF5ICh2b2lkKQotewotICBHVmFsdWVBcnJheSAqcmVzdWx0ID0gTlVMTDsKLSAgcmF3MTM5NGhhbmRsZV90IGhhbmRsZSA9IE5VTEw7Ci0gIGludCBudW1fcG9ydHMgPSAwOwotICBpbnQgcG9ydCA9IDA7Ci0gIGludCBudW1fbm9kZXMgPSAwOwotICBpbnQgbm9kZSA9IDA7Ci0gIHJvbTEzOTRfZGlyZWN0b3J5IGRpcmVjdG9yeTsKLSAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OwotCi0gIGhhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZSAoKTsKLQotICBpZiAoaGFuZGxlID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgbnVtX3BvcnRzID0gcmF3MTM5NF9nZXRfcG9ydF9pbmZvIChoYW5kbGUsIE5VTEwsIDApOwotICBmb3IgKHBvcnQgPSAwOyBwb3J0IDwgbnVtX3BvcnRzOyBwb3J0KyspIHsKLSAgICBpZiAocmF3MTM5NF9zZXRfcG9ydCAoaGFuZGxlLCBwb3J0KSA+PSAwKSB7Ci0gICAgICBudW1fbm9kZXMgPSByYXcxMzk0X2dldF9ub2RlY291bnQgKGhhbmRsZSk7Ci0gICAgICBmb3IgKG5vZGUgPSAwOyBub2RlIDwgbnVtX25vZGVzOyBub2RlKyspIHsKLSAgICAgICAgcm9tMTM5NF9nZXRfZGlyZWN0b3J5IChoYW5kbGUsIG5vZGUsICZkaXJlY3RvcnkpOwotICAgICAgICBpZiAocm9tMTM5NF9nZXRfbm9kZV90eXBlICgmZGlyZWN0b3J5KSA9PSBST00xMzk0X05PREVfVFlQRV9BVkMgJiYKLSAgICAgICAgICAgIGF2YzEzOTRfY2hlY2tfc3VidW5pdF90eXBlIChoYW5kbGUsIG5vZGUsCi0gICAgICAgICAgICAgICAgQVZDMTM5NF9TVUJVTklUX1RZUEVfVkNSKSkgewotICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgICAgIHJlc3VsdCA9IGdfdmFsdWVfYXJyYXlfbmV3ICgzKTsgICAgIC8qIGxvb2tzIGxpa2UgYSBzZW5zaWJsZSBkZWZhdWx0ICovCi0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9VSU5UNjQpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAoJnZhbHVlLCByb20xMzk0X2dldF9ndWlkIChoYW5kbGUsIG5vZGUpKTsKLSAgICAgICAgICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAocmVzdWx0LCAmdmFsdWUpOwotICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgY29uc3QgR0xpc3QgKgotZ3N0XzEzOTRfcHJvcGVydHlfcHJvYmVfZ2V0X3Byb3BlcnRpZXMgKEdzdFByb3BlcnR5UHJvYmUgKiBwcm9iZSkKLXsKLSAgc3RhdGljIEdMaXN0ICpyZXN1bHQgPSBOVUxMOwotICBHT2JqZWN0Q2xhc3MgKmtsYXNzID0gTlVMTDsKLSAgR1BhcmFtU3BlYyAqc3BlYyA9IE5VTEw7Ci0KLSAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAga2xhc3MgPSBHX09CSkVDVF9HRVRfQ0xBU1MgKHByb2JlKTsKLSAgICBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoa2xhc3MsICJndWlkIik7Ci0gICAgcmVzdWx0ID0gZ19saXN0X2FwcGVuZCAocmVzdWx0LCBzcGVjKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfMTM5NF9wcm9wZXJ0eV9wcm9iZV9wcm9iZV9wcm9wZXJ0eSAoR3N0UHJvcGVydHlQcm9iZSAqIHByb2JlLCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgaWYgKCFnX3N0cl9lcXVhbCAocHNwZWMtPm5hbWUsICJndWlkIikpCi0gICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChwcm9iZSwgcHJvcF9pZCwgcHNwZWMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF8xMzk0X3Byb3BlcnR5X3Byb2JlX25lZWRzX3Byb2JlIChHc3RQcm9wZXJ0eVByb2JlICogcHJvYmUsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdWYWx1ZUFycmF5ICoKLWdzdF8xMzk0X3Byb3BlcnR5X3Byb2JlX2dldF92YWx1ZXMgKEdzdFByb3BlcnR5UHJvYmUgKiBwcm9iZSwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdWYWx1ZUFycmF5ICpyZXN1bHQgPSBOVUxMOwotCi0gIGlmICghZ19zdHJfZXF1YWwgKHBzcGVjLT5uYW1lLCAiZ3VpZCIpKSB7Ci0gICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChwcm9iZSwgcHJvcF9pZCwgcHNwZWMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgcmVzdWx0ID0gZ3N0XzEzOTRfZ2V0X2d1aWRfYXJyYXkgKCk7Ci0KLSAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgIEdTVF9MT0dfT0JKRUNUIChwcm9iZSwgIk5vIGd1aWQgZm91bmQiKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0XzEzOTRfcHJvcGVydHlfcHJvYmVfaW50ZXJmYWNlX2luaXQgKEdzdFByb3BlcnR5UHJvYmVJbnRlcmZhY2UgKiBpZmFjZSkKLXsKLSAgaWZhY2UtPmdldF9wcm9wZXJ0aWVzID0gZ3N0XzEzOTRfcHJvcGVydHlfcHJvYmVfZ2V0X3Byb3BlcnRpZXM7Ci0gIGlmYWNlLT5wcm9iZV9wcm9wZXJ0eSA9IGdzdF8xMzk0X3Byb3BlcnR5X3Byb2JlX3Byb2JlX3Byb3BlcnR5OwotICBpZmFjZS0+bmVlZHNfcHJvYmUgPSBnc3RfMTM5NF9wcm9wZXJ0eV9wcm9iZV9uZWVkc19wcm9iZTsKLSAgaWZhY2UtPmdldF92YWx1ZXMgPSBnc3RfMTM5NF9wcm9wZXJ0eV9wcm9iZV9nZXRfdmFsdWVzOwotfQotCi12b2lkCi1nc3RfMTM5NF90eXBlX2FkZF9wcm9wZXJ0eV9wcm9iZV9pbnRlcmZhY2UgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBwcm9iZV9pZmFjZV9pbmZvID0gewotICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGdzdF8xMzk0X3Byb3BlcnR5X3Byb2JlX2ludGVyZmFjZV9pbml0LAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgfTsKLQotICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKHR5cGUsIEdTVF9UWVBFX1BST1BFUlRZX1BST0JFLAotICAgICAgJnByb2JlX2lmYWNlX2luZm8pOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L2dzdDEzOTRwcm9iZS5oIGIvZXh0L3JhdzEzOTQvZ3N0MTM5NHByb2JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YTMyMzIuLjAwMDAwMDAKLS0tIGEvZXh0L3JhdzEzOTQvZ3N0MTM5NHByb2JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdWxpZW4gUHV5ZHQgPGpwdXlkdEBmcmVlLmZyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1NUXzEzOTRfUFJPQkVfSAotI2RlZmluZSBHU1RfMTM5NF9QUk9CRV9ICi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2lmIDAKLXZvaWQgZ3N0XzEzOTRfdHlwZV9hZGRfcHJvcGVydHlfcHJvYmVfaW50ZXJmYWNlIChHVHlwZSB0eXBlKTsKLSNlbmRpZgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfMTM5NF9QUk9CRV9IICovCi0KZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L2dzdGR2MTM5NHNyYy5jIGIvZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZTFhZjEuLjAwMDAwMDAKLS0tIGEvZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgPDIwMDA+IERhbmllbCBGaXNjaGVyIDxkYW5AZjNjLmNvbT4KLSAqICAgICAgICAgICAgICAgPDIwMDQ+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgIDwyMDA2PiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZHYxMzk0c3JjCi0gKgotICogUmVhZCBEViAoZGlnaXRhbCB2aWRlbykgZGF0YSBmcm9tIGZpcmV3aXJlIHBvcnQuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGR2MTM5NHNyYyAhIHF1ZXVlICEgZHZkZW11eCBuYW1lPWQgISBxdWV1ZSAhIGR2ZGVjICEgeHZpbWFnZXNpbmsgZC4gISBxdWV1ZSAhIGFsc2FzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGNhcHR1cmVzIGZyb20gdGhlIGZpcmV3aXJlIHBvcnQgYW5kIGRpc3BsYXlzIGl0IChtaWdodCBuZWVkCi0gKiBmb3JtYXQgY29udmVydGVycyBmb3IgYXVkaW8vdmlkZW8pLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8bGliYXZjMTM5NC9hdmMxMzk0Lmg+Ci0jaW5jbHVkZSA8bGliYXZjMTM5NC9hdmMxMzk0X3Zjci5oPgotI2luY2x1ZGUgPGxpYmF2YzEzOTQvcm9tMTM5NC5oPgotI2luY2x1ZGUgPGxpYnJhdzEzOTQvcmF3MTM5NC5oPgotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLSNpbmNsdWRlIDxsaWJpZWM2MTg4My9pZWM2MTg4My5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RkdjEzOTRzcmMuaCIKLSNpbmNsdWRlICJnc3QxMzk0cHJvYmUuaCIKLSNpbmNsdWRlICJnc3QxMzk0Y2xvY2suaCIKLQotCi0jZGVmaW5lIENPTlRST0xfU1RPUCAgICAgICAgICAgICdTJyAgICAgLyogc3RvcCB0aGUgc2VsZWN0IGNhbGwgKi8KLSNkZWZpbmUgQ09OVFJPTF9TT0NLRVRTKHNyYykgICBzcmMtPmNvbnRyb2xfc29jawotI2RlZmluZSBXUklURV9TT0NLRVQoc3JjKSAgICAgIHNyYy0+Y29udHJvbF9zb2NrWzFdCi0jZGVmaW5lIFJFQURfU09DS0VUKHNyYykgICAgICAgc3JjLT5jb250cm9sX3NvY2tbMF0KLQotI2RlZmluZSBTRU5EX0NPTU1BTkQoc3JjLCBjb21tYW5kKSAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50IEdfR05VQ19VTlVTRUQgX3JlczsgdW5zaWduZWQgY2hhciBjOyBjID0gY29tbWFuZDsgICBcCi0gIF9yZXMgPSB3cml0ZSAoV1JJVEVfU09DS0VUKHNyYyksICZjLCAxKTsgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIFJFQURfQ09NTUFORChzcmMsIGNvbW1hbmQsIHJlcykgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXMgPSByZWFkKFJFQURfU09DS0VUKHNyYyksICZjb21tYW5kLCAxKTsgICBcCi19IEdfU1RNVF9FTkQKLQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChkdjEzOTRzcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKGR2MTM5NHNyY19kZWJ1ZykKLQotI2RlZmluZSBQQUxfRlJBTUVTSVpFIDE0NDAwMAotI2RlZmluZSBQQUxfRlJBTUVSQVRFIDI1Ci0KLSNkZWZpbmUgTlRTQ19GUkFNRVNJWkUgMTIwMDAwCi0jZGVmaW5lIE5UU0NfRlJBTUVSQVRFIDMwCi0KLWVudW0KLXsKLSAgU0lHTkFMX0ZSQU1FX0RST1BQRUQsCi0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9QT1JUICAgIC0xCi0jZGVmaW5lIERFRkFVTFRfQ0hBTk5FTCAgIDYzCi0jZGVmaW5lIERFRkFVTFRfQ09OU0VDVVRJVkUgMQotI2RlZmluZSBERUZBVUxUX1NLSVAgICAgMAotI2RlZmluZSBERUZBVUxUX0RST1BfSU5DT01QTEVURSBUUlVFCi0jZGVmaW5lIERFRkFVTFRfVVNFX0FWQyAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9HVUlEICAgIDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUE9SVCwKLSAgUFJPUF9DSEFOTkVMLAotICBQUk9QX0NPTlNFQ1VUSVZFLAotICBQUk9QX1NLSVAsCi0gIFBST1BfRFJPUF9JTkNPTVBMRVRFLAotICBQUk9QX1VTRV9BVkMsCi0gIFBST1BfR1VJRCwKLSAgUFJPUF9ERVZJQ0VfTkFNRQotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtZHYsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgTlRTQywgUEFMIH0sICIgInN5c3RlbXN0cmVhbSA9IChib29sZWFuKSB0cnVlIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfZHYxMzk0c3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9kdjEzOTRzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2R2MTM5NHNyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZHYxMzk0c3JjX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0Q2xvY2sgKmdzdF9kdjEzOTRzcmNfcHJvdmlkZV9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9kdjEzOTRfc3JjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHYxMzk0c3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYnNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R2MTM5NHNyY19zdG9wIChHc3RCYXNlU3JjICogYnNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R2MTM5NHNyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2R2MTM5NHNyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBwc3JjLCBHc3RCdWZmZXIgKiogYnVmKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9kdjEzOTRzcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIHZvaWQgZ3N0X2R2MTM5NHNyY191cGRhdGVfZGV2aWNlX25hbWUgKEdzdERWMTM5NFNyYyAqIHNyYyk7Ci0KLSNkZWZpbmUgZ3N0X2R2MTM5NHNyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0RFYxMzk0U3JjLCBnc3RfZHYxMzk0c3JjLCBHU1RfVFlQRV9QVVNIX1NSQywKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1VSSV9IQU5ETEVSLAotICAgICAgICBnc3RfZHYxMzk0c3JjX3VyaV9oYW5kbGVyX2luaXQpKTsKLQotc3RhdGljIGd1aW50IGdzdF9kdjEzOTRzcmNfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotc3RhdGljIHZvaWQKLWdzdF9kdjEzOTRzcmNfY2xhc3NfaW5pdCAoR3N0RFYxMzk0U3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzczsKLSAgR3N0UHVzaFNyY0NsYXNzICpnc3RwdXNoc3JjX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7Ci0gIGdzdHB1c2hzcmNfY2xhc3MgPSAoR3N0UHVzaFNyY0NsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kdjEzOTRzcmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZHYxMzk0c3JjX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9kdjEzOTRzcmNfZGlzcG9zZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5wcm92aWRlX2Nsb2NrID0gZ3N0X2R2MTM5NHNyY19wcm92aWRlX2Nsb2NrOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfZHYxMzk0X3NyY19jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2R2MTM5NHNyY19zaWduYWxzW1NJR05BTF9GUkFNRV9EUk9QUEVEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJmcmFtZS1kcm9wcGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdERWMTM5NFNyY0NsYXNzLCBmcmFtZV9kcm9wcGVkKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9QT1JULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInBvcnQiLCAiUG9ydCIsICJQb3J0IG51bWJlciAoLTEgYXV0b21hdGljKSIsCi0gICAgICAgICAgLTEsIDE2LCBERUZBVUxUX1BPUlQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0NIQU5ORUwsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY2hhbm5lbCIsICJDaGFubmVsIiwgIkNoYW5uZWwgbnVtYmVyIGZvciBsaXN0ZW5pbmciLAotICAgICAgICAgIDAsIDY0LCBERUZBVUxUX0NIQU5ORUwsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0NPTlNFQ1VUSVZFLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImNvbnNlY3V0aXZlIiwgImNvbnNlY3V0aXZlIGZyYW1lcyIsCi0gICAgICAgICAgInNlbmQgbiBjb25zZWN1dGl2ZSBmcmFtZXMgYWZ0ZXIgc2tpcHBpbmciLCAxLCBHX01BWElOVCwKLSAgICAgICAgICBERUZBVUxUX0NPTlNFQ1VUSVZFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9TS0lQLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNraXAiLCAic2tpcCBmcmFtZXMiLCAic2tpcCBuIGZyYW1lcyIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIERFRkFVTFRfU0tJUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9EUk9QX0lOQ09NUExFVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRyb3AtaW5jb21wbGV0ZSIsICJkcm9wIGluY29tcGxldGUiLAotICAgICAgICAgICJkcm9wIGluY29tcGxldGUgZnJhbWVzIiwgREVGQVVMVF9EUk9QX0lOQ09NUExFVEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfVVNFX0FWQywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidXNlLWF2YyIsICJVc2UgQVYvQyIsICJVc2UgQVYvQyBWVFIgY29udHJvbCIsCi0gICAgICAgICAgREVGQVVMVF9VU0VfQVZDLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9HVUlELAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImd1aWQiLCAiR1VJRCIsCi0gICAgICAgICAgInNlbGVjdCBvbmUgb2YgbXVsdGlwbGUgRFYgZGV2aWNlcyBieSBpdHMgR1VJRC4gdXNlIGEgaGV4YWRlY2ltYWwgIgotICAgICAgICAgICJsaWtlIDB4aGhoaGhoaGhoaGhoaGhoaC4gKDAgPSBubyBndWlkKSIsIDAsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIERFRkFVTFRfR1VJRCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3REVjEzOTRTcmM6ZGV2aWNlLW5hbWU6Ci0gICAqCi0gICAqIERlc2NyaXB0aXZlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGV2aWNlCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RFVklDRV9OQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZS1uYW1lIiwgImRldmljZSBuYW1lIiwKLSAgICAgICAgICAidXNlci1mcmllbmRseSBuYW1lIG9mIHRoZSBkZXZpY2UiLCAiRGVmYXVsdCIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5uZWdvdGlhdGUgPSBOVUxMOwotICBnc3RiYXNlc3JjX2NsYXNzLT5zdGFydCA9IGdzdF9kdjEzOTRzcmNfc3RhcnQ7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnN0b3AgPSBnc3RfZHYxMzk0c3JjX3N0b3A7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnVubG9jayA9IGdzdF9kdjEzOTRzcmNfdW5sb2NrOwotICBnc3RiYXNlc3JjX2NsYXNzLT5xdWVyeSA9IGdzdF9kdjEzOTRzcmNfcXVlcnk7Ci0KLSAgZ3N0cHVzaHNyY19jbGFzcy0+Y3JlYXRlID0gZ3N0X2R2MTM5NHNyY19jcmVhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJGaXJld2lyZSAoMTM5NCkgRFYgdmlkZW8gc291cmNlIiwgIlNvdXJjZS9WaWRlbyIsCi0gICAgICAiU291cmNlIGZvciBEViB2aWRlbyBkYXRhIGZyb20gZmlyZXdpcmUgcG9ydCIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUB0ZW1wbGUtYmFwdGlzdC5jb20+LCAiCi0gICAgICAiRGFuaWVsIEZpc2NoZXIgPGRhbkBmM2MuY29tPiwgIiAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4sICIKLSAgICAgICJaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZHYxMzk0c3JjX2RlYnVnLCAiZHYxMzk0c3JjIiwgMCwKLSAgICAgICJEViBmaXJld2lyZSBzb3VyY2UiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdjEzOTRzcmNfaW5pdCAoR3N0RFYxMzk0U3JjICogZHYxMzk0c3JjKQotewotICBHc3RQYWQgKnNyY3BhZCA9IEdTVF9CQVNFX1NSQ19QQUQgKGR2MTM5NHNyYyk7Ci0KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9saXZlIChHU1RfQkFTRV9TUkMgKGR2MTM5NHNyYyksIFRSVUUpOwotICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoR1NUX0JBU0VfU1JDIChkdjEzOTRzcmMpLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfYmFzZV9zcmNfc2V0X2RvX3RpbWVzdGFtcCAoR1NUX0JBU0VfU1JDIChkdjEzOTRzcmMpLCBUUlVFKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoc3JjcGFkKTsKLQotICBkdjEzOTRzcmMtPnBvcnQgPSBERUZBVUxUX1BPUlQ7Ci0gIGR2MTM5NHNyYy0+Y2hhbm5lbCA9IERFRkFVTFRfQ0hBTk5FTDsKLQotICBkdjEzOTRzcmMtPmNvbnNlY3V0aXZlID0gREVGQVVMVF9DT05TRUNVVElWRTsKLSAgZHYxMzk0c3JjLT5za2lwID0gREVGQVVMVF9TS0lQOwotICBkdjEzOTRzcmMtPmRyb3BfaW5jb21wbGV0ZSA9IERFRkFVTFRfRFJPUF9JTkNPTVBMRVRFOwotICBkdjEzOTRzcmMtPnVzZV9hdmMgPSBERUZBVUxUX1VTRV9BVkM7Ci0gIGR2MTM5NHNyYy0+Z3VpZCA9IERFRkFVTFRfR1VJRDsKLSAgZHYxMzk0c3JjLT51cmkgPSBnX3N0cmR1cF9wcmludGYgKCJkdjovLyVkIiwgZHYxMzk0c3JjLT5wb3J0KTsKLSAgZHYxMzk0c3JjLT5kZXZpY2VfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIkRlZmF1bHQiKTsKLQotICBSRUFEX1NPQ0tFVCAoZHYxMzk0c3JjKSA9IC0xOwotICBXUklURV9TT0NLRVQgKGR2MTM5NHNyYykgPSAtMTsKLQotICAvKiBpbml0aWFsaXplZCB3aGVuIGZpcnN0IGhlYWRlciByZWNlaXZlZCAqLwotICBkdjEzOTRzcmMtPmZyYW1lX3NpemUgPSAwOwotCi0gIGR2MTM5NHNyYy0+YnVmID0gTlVMTDsKLSAgZHYxMzk0c3JjLT5mcmFtZSA9IE5VTEw7Ci0gIGR2MTM5NHNyYy0+ZnJhbWVfc2VxdWVuY2UgPSAwOwotCi0gIGR2MTM5NHNyYy0+cHJvdmlkZWRfY2xvY2sgPSBnc3RfMTM5NF9jbG9ja19uZXcgKCJkdjEzOTRjbG9jayIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R2MTM5NHNyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3REVjEzOTRTcmMgKnNyYyA9IEdTVF9EVjEzOTRTUkMgKG9iamVjdCk7Ci0KLSAgaWYgKHNyYy0+cHJvdmlkZWRfY2xvY2spIHsKLSAgICBnX29iamVjdF91bnJlZiAoc3JjLT5wcm92aWRlZF9jbG9jayk7Ci0gIH0KLQotICBnX2ZyZWUgKHNyYy0+dXJpKTsKLSAgc3JjLT51cmkgPSBOVUxMOwotCi0gIGdfZnJlZSAoc3JjLT5kZXZpY2VfbmFtZSk7Ci0gIHNyYy0+ZGV2aWNlX25hbWUgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R2MTM5NHNyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RFYxMzk0U3JjICpmaWx0ZXIgPSBHU1RfRFYxMzk0U1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QT1JUOgotICAgICAgZmlsdGVyLT5wb3J0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnX2ZyZWUgKGZpbHRlci0+dXJpKTsKLSAgICAgIGZpbHRlci0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiZHY6Ly8lZCIsIGZpbHRlci0+cG9ydCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0hBTk5FTDoKLSAgICAgIGZpbHRlci0+Y2hhbm5lbCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NLSVA6Ci0gICAgICBmaWx0ZXItPnNraXAgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05TRUNVVElWRToKLSAgICAgIGZpbHRlci0+Y29uc2VjdXRpdmUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EUk9QX0lOQ09NUExFVEU6Ci0gICAgICBmaWx0ZXItPmRyb3BfaW5jb21wbGV0ZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfQVZDOgotICAgICAgZmlsdGVyLT51c2VfYXZjID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0dVSUQ6Ci0gICAgICBmaWx0ZXItPmd1aWQgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGdzdF9kdjEzOTRzcmNfdXBkYXRlX2RldmljZV9uYW1lIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHYxMzk0c3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REVjEzOTRTcmMgKmZpbHRlciA9IEdTVF9EVjEzOTRTUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BPUlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPnBvcnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NIQU5ORUw6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPmNoYW5uZWwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NLSVA6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPnNraXApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTlNFQ1VUSVZFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZmlsdGVyLT5jb25zZWN1dGl2ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFJPUF9JTkNPTVBMRVRFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+ZHJvcF9pbmNvbXBsZXRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfQVZDOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+dXNlX2F2Yyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfR1VJRDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGZpbHRlci0+Z3VpZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVWSUNFX05BTUU6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBmaWx0ZXItPmRldmljZV9uYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENsb2NrICoKLWdzdF9kdjEzOTRzcmNfcHJvdmlkZV9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdERWMTM5NFNyYyAqZHYxMzk0c3JjID0gR1NUX0RWMTM5NFNSQyAoZWxlbWVudCk7Ci0KLSAgcmV0dXJuIEdTVF9DTE9DS19DQVNUIChnc3Rfb2JqZWN0X3JlZiAoZHYxMzk0c3JjLT5wcm92aWRlZF9jbG9jaykpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9kdjEzOTRfc3JjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgR3N0RFYxMzk0U3JjICpzcmMgPSBHU1RfRFYxMzk0U1JDIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKGVsZW1lbnQsCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX2xvc3QgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbWVudCksCi0gICAgICAgICAgICAgIEdTVF9DTE9DS19DQVNUIChzcmMtPnByb3ZpZGVkX2Nsb2NrKSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIHJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChlbGVtZW50LAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19jbG9ja19wcm92aWRlIChHU1RfT0JKRUNUX0NBU1QgKGVsZW1lbnQpLAotICAgICAgICAgICAgICBHU1RfQ0xPQ0tfQ0FTVCAoc3JjLT5wcm92aWRlZF9jbG9jayksIFRSVUUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLSNpZmRlZiBIQVZFX0xJQklFQzYxODgzCi1zdGF0aWMgR3N0RFYxMzk0U3JjICoKLWdzdF9kdjEzOTRzcmNfZnJvbV9yYXcxMzk0aGFuZGxlIChyYXcxMzk0aGFuZGxlX3QgaGFuZGxlKQotewotICBpZWM2MTg4M19kdl90IGR2ID0gKGllYzYxODgzX2R2X3QpIHJhdzEzOTRfZ2V0X3VzZXJkYXRhIChoYW5kbGUpOwotICBpZWM2MTg4M19kdl9mYl90IGR2X2ZiID0KLSAgICAgIChpZWM2MTg4M19kdl9mYl90KSBpZWM2MTg4M19kdl9nZXRfY2FsbGJhY2tfZGF0YSAoZHYpOwotICByZXR1cm4gR1NUX0RWMTM5NFNSQyAoaWVjNjE4ODNfZHZfZmJfZ2V0X2NhbGxiYWNrX2RhdGEgKGR2X2ZiKSk7Ci19Ci0jZWxzZSAvKiBIQVZFX0xJQklFQzYxODgzICovCi1zdGF0aWMgR3N0RFYxMzk0U3JjICoKLWdzdF9kdjEzOTRzcmNfZnJvbV9yYXcxMzk0aGFuZGxlIChyYXcxMzk0aGFuZGxlX3QgaGFuZGxlKQotewotICByZXR1cm4gR1NUX0RWMTM5NFNSQyAocmF3MTM5NF9nZXRfdXNlcmRhdGEgKGhhbmRsZSkpOwotfQotI2VuZGlmIC8qIEhBVkVfTElCSUVDNjE4ODMgKi8KLQotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLXN0YXRpYyBpbnQKLWdzdF9kdjEzOTRzcmNfaWVjNjE4ODNfcmVjZWl2ZSAodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwKLSAgICBpbnQgY29tcGxldGUsIHZvaWQgKmNiZGF0YSkKLXsKLSAgR3N0RFYxMzk0U3JjICpkdjEzOTRzcmMgPSBHU1RfRFYxMzk0U1JDIChjYmRhdGEpOwotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChHU1RfQkFTRV9TUkNfUEFEIChkdjEzOTRzcmMpKSkpIHsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBkYXRhOwotCi0gICAgLy8gZmlndXJlIGZvcm1hdCAoTlRTQy9QQUwpCi0gICAgaWYgKHBbM10gJiAweDgwKSB7Ci0gICAgICAvLyBQQUwKLSAgICAgIGR2MTM5NHNyYy0+ZnJhbWVfc2l6ZSA9IFBBTF9GUkFNRVNJWkU7Ci0gICAgICBkdjEzOTRzcmMtPmZyYW1lX3JhdGUgPSBQQUxfRlJBTUVSQVRFOwotICAgICAgR1NUX0RFQlVHICgiUEFMIGRhdGEiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1kdiIsCi0gICAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJQQUwiLAotICAgICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE5UU0MgKHVudGVzdGVkKQotICAgICAgZHYxMzk0c3JjLT5mcmFtZV9zaXplID0gTlRTQ19GUkFNRVNJWkU7Ci0gICAgICBkdjEzOTRzcmMtPmZyYW1lX3JhdGUgPSBOVFNDX0ZSQU1FUkFURTsKLSAgICAgIEdTVF9ERUJVRwotICAgICAgICAgICgiTlRTQyBkYXRhIFt1bnRlc3RlZF0gLSBwbGVhc2UgcmVwb3J0IHN1Y2Nlc3MvZmFpbHVyZSB0byA8ZGFuQGYzYy5jb20+Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZHYiLAotICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiTlRTQyIsCi0gICAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgICB9Ci0gICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoZHYxMzk0c3JjKSwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgZHYxMzk0c3JjLT5mcmFtZSA9IE5VTEw7Ci0gIGlmIChHX0xJS0VMWSAoKGR2MTM5NHNyYy0+ZnJhbWVfc2VxdWVuY2UgKyAxKSAlIChkdjEzOTRzcmMtPnNraXAgKwotICAgICAgICAgICAgICBkdjEzOTRzcmMtPmNvbnNlY3V0aXZlKSA8IGR2MTM5NHNyYy0+Y29uc2VjdXRpdmUpKSB7Ci0gICAgaWYgKGNvbXBsZXRlICYmIGxlbiA9PSBkdjEzOTRzcmMtPmZyYW1lX3NpemUpIHsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGR2MTM5NHNyYy0+ZnJhbWVfc2l6ZSk7Ci0KLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZTsKLSAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBkYXRhLCBsZW4pOwotICAgICAgZHYxMzk0c3JjLT5idWYgPSBidWY7Ci0gICAgfQotICB9Ci0gIGR2MTM5NHNyYy0+ZnJhbWVfc2VxdWVuY2UrKzsKLSAgcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW50Ci1nc3RfZHYxMzk0c3JjX2lzb19yZWNlaXZlIChyYXcxMzk0aGFuZGxlX3QgaGFuZGxlLCBpbnQgY2hhbm5lbCwgc2l6ZV90IGxlbiwKLSAgICBxdWFkbGV0X3QgKiBkYXRhKQotewotICBHc3REVjEzOTRTcmMgKmR2MTM5NHNyYyA9IGdzdF9kdjEzOTRzcmNfZnJvbV9yYXcxMzk0aGFuZGxlIChoYW5kbGUpOwotCi0gIGlmIChsZW4gPiAxNikgewotICAgIC8qCi0gICAgICAgdGhlIGZvbGxvd2luZyBjb2RlIHRha2VuIGZyb20ga2luby0wLjUxIChEYW4gRGVubmVkeS9DaGFybGVzIFlhdGVzKQotICAgICAgIEtpbmRseSByZWxpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMLiBTZWUgdGhlIGNvbW1pdCBsb2cgZm9yIHZlcnNpb24gMS42IG9mCi0gICAgICAgdGhpcyBmaWxlIGluIENWUy4KLSAgICAgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikgJmRhdGFbM107Ci0KLSAgICBpbnQgc2VjdGlvbl90eXBlID0gcFswXSA+PiA1OyAgICAgICAvKiBzZWN0aW9uIHR5cGUgaXMgaW4gYml0cyA1IC0gNyAqLwotICAgIGludCBkaWZfc2VxdWVuY2UgPSBwWzFdID4+IDQ7ICAgICAgIC8qIGRpZiBzZXF1ZW5jZSBudW1iZXIgaXMgaW4gYml0cyA0IC0gNyAqLwotICAgIGludCBkaWZfYmxvY2sgPSBwWzJdOwotCi0gICAgLyogaWYgd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmcmFtZSwgCi0gICAgICAgd2Ugc2V0IGJ1Zj1mcmFtZSwgYW5kIGFsbG9jIGEgbmV3IGJ1ZmZlciBmb3IgZnJhbWUKLSAgICAgKi8KLSAgICBpZiAoc2VjdGlvbl90eXBlID09IDAgJiYgZGlmX3NlcXVlbmNlID09IDApIHsgICAgICAgLy8gZGlmIGhlYWRlcgotICAgICAgaWYgKCFHU1RfUEFEX0NBUFMgKEdTVF9CQVNFX1NSQ19QQUQgKGR2MTM5NHNyYykpKSB7Ci0gICAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgICAgLy8gZmlndXJlIGZvcm1hdCAoTlRTQy9QQUwpCi0gICAgICAgIGlmIChwWzNdICYgMHg4MCkgewotICAgICAgICAgIC8vIFBBTAotICAgICAgICAgIGR2MTM5NHNyYy0+ZnJhbWVfc2l6ZSA9IFBBTF9GUkFNRVNJWkU7Ci0gICAgICAgICAgZHYxMzk0c3JjLT5mcmFtZV9yYXRlID0gUEFMX0ZSQU1FUkFURTsKLSAgICAgICAgICBHU1RfREVCVUcgKCJQQUwgZGF0YSIpOwotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1kdiIsCi0gICAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiUEFMIiwKLSAgICAgICAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBOVFNDICh1bnRlc3RlZCkKLSAgICAgICAgICBkdjEzOTRzcmMtPmZyYW1lX3NpemUgPSBOVFNDX0ZSQU1FU0laRTsKLSAgICAgICAgICBkdjEzOTRzcmMtPmZyYW1lX3JhdGUgPSBOVFNDX0ZSQU1FUkFURTsKLSAgICAgICAgICBHU1RfREVCVUcKLSAgICAgICAgICAgICAgKCJOVFNDIGRhdGEgW3VudGVzdGVkXSAtIHBsZWFzZSByZXBvcnQgc3VjY2Vzcy9mYWlsdXJlIHRvIDxkYW5AZjNjLmNvbT4iKTsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZHYiLAotICAgICAgICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIk5UU0MiLAotICAgICAgICAgICAgICAic3lzdGVtc3RyZWFtIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKGR2MTM5NHNyYyksIGNhcHMpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICB9Ci0gICAgICAvLyBkcm9wIGxhc3QgZnJhbWUgd2hlbiBub3QgY29tcGxldGUKLSAgICAgIGlmICghZHYxMzk0c3JjLT5kcm9wX2luY29tcGxldGUKLSAgICAgICAgICB8fCBkdjEzOTRzcmMtPmJ5dGVzX2luX2ZyYW1lID09IGR2MTM5NHNyYy0+ZnJhbWVfc2l6ZSkgewotICAgICAgICBkdjEzOTRzcmMtPmJ1ZiA9IGR2MTM5NHNyYy0+ZnJhbWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKEdTVF9FTEVNRU5UIChkdjEzOTRzcmMpLCAiaW5jb21wbGV0ZSBmcmFtZSBkcm9wcGVkIik7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChkdjEzOTRzcmMpLAotICAgICAgICAgICAgZ3N0X2R2MTM5NHNyY19zaWduYWxzW1NJR05BTF9GUkFNRV9EUk9QUEVEXSwgMCk7Ci0gICAgICAgIGlmIChkdjEzOTRzcmMtPmZyYW1lKSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZHYxMzk0c3JjLT5mcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICgoZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZSArIDEpICUgKGR2MTM5NHNyYy0+c2tpcCArCi0gICAgICAgICAgICAgIGR2MTM5NHNyYy0+Y29uc2VjdXRpdmUpIDwgZHYxMzk0c3JjLT5jb25zZWN1dGl2ZSkgewotICAgICAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICAgICAgZ2ludDY0IGk2NDsKLQotICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGR2MTM5NHNyYy0+ZnJhbWVfc2l6ZSk7Ci0KLSAgICAgICAgLyogZmlsbCBpbiBvZmZzZXQsIGR1cmF0aW9uLCB0aW1lc3RhbXAgKi8KLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBkdjEzOTRzcmMtPmZyYW1lX3NlcXVlbmNlOwotICAgICAgICBkdjEzOTRzcmMtPmZyYW1lID0gYnVmOwotICAgICAgfQotICAgICAgZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZSsrOwotICAgICAgZHYxMzk0c3JjLT5ieXRlc19pbl9mcmFtZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGR2MTM5NHNyYy0+ZnJhbWUgIT0gTlVMTCkgewotICAgICAgZ3VpbnQ4ICpkYXRhID0gR1NUX0JVRkZFUl9EQVRBIChkdjEzOTRzcmMtPmZyYW1lKTsKLQotICAgICAgc3dpdGNoIChzZWN0aW9uX3R5cGUpIHsKLSAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiAxIEhlYWRlciBibG9jayAqLwotICAgICAgICAgIC8qIHBbM10gfD0gMHg4MDsgLy8gaGFjayB0byBmb3JjZSBQQUwgZGF0YSAqLwotICAgICAgICAgIG1lbWNweSAoZGF0YSArIGRpZl9zZXF1ZW5jZSAqIDE1MCAqIDgwLCBwLCA0ODApOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgLyogMiBTdWJjb2RlIGJsb2NrcyAqLwotICAgICAgICAgIG1lbWNweSAoZGF0YSArIGRpZl9zZXF1ZW5jZSAqIDE1MCAqIDgwICsgKDEgKyBkaWZfYmxvY2spICogODAsIHAsCi0gICAgICAgICAgICAgIDQ4MCk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiAzIFZBVVggYmxvY2tzICovCi0gICAgICAgICAgbWVtY3B5IChkYXRhICsgZGlmX3NlcXVlbmNlICogMTUwICogODAgKyAoMyArIGRpZl9ibG9jaykgKiA4MCwgcCwKLSAgICAgICAgICAgICAgNDgwKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIDkgQXVkaW8gYmxvY2tzIGludGVybGVhdmVkIHdpdGggdmlkZW8gKi8KLSAgICAgICAgICBtZW1jcHkgKGRhdGEgKyBkaWZfc2VxdWVuY2UgKiAxNTAgKiA4MCArICg2ICsgZGlmX2Jsb2NrICogMTYpICogODAsIHAsCi0gICAgICAgICAgICAgIDQ4MCk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiAxMzUgVmlkZW8gYmxvY2tzIGludGVybGVhdmVkIHdpdGggYXVkaW8gKi8KLSAgICAgICAgICBtZW1jcHkgKGRhdGEgKyBkaWZfc2VxdWVuY2UgKiAxNTAgKiA4MCArICg3ICsgKGRpZl9ibG9jayAvIDE1KSArCi0gICAgICAgICAgICAgICAgICBkaWZfYmxvY2spICogODAsIHAsIDQ4MCk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvKiB3ZSBjYW4ndCBoYW5kbGUgYW55IG90aGVyIGRhdGEgKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGR2MTM5NHNyYy0+Ynl0ZXNfaW5fZnJhbWUgKz0gNDgwOwotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwotfQotI2VuZGlmCi0vKgotICogV2hlbiBhbiBpZWVlMTM5NCBidXMgcmVzZXQgaGFwcGVucywgdXN1YWxseSBhIGRldmljZSBoYXMgYmVlbiByZW1vdmVkCi0gKiBvciBhZGRlZC4gIFdlIHNlbmQgYSBtZXNzYWdlIG9uIHRoZSBtZXNzYWdlIGJ1cyB3aXRoIHRoZSBub2RlIGNvdW50IAotICogYW5kIHdoZXRoZXIgdGhlIGNhcHR1cmUgZGV2aWNlIHVzZWQgaW4gdGhpcyBlbGVtZW50IGNvbm5lY3RlZCwgZGlzY29ubmVjdGVkIAotICogb3Igd2FzIHVuY2hhbmdlZAotICogTWVzc2FnZSBzdHJ1Y3R1cmU6Ci0gKiBub2RlY291bnQgLSBpbnRlZ2VyIHdpdGggbnVtYmVyIG9mIG5vZGVzIG9uIGJ1cwotICogY3VycmVudC1kZXZpY2UtY2hhbmdlIC0gaW50ZWdlciAoMSBpZiBkZXZpY2UgY29ubmVjdGVkLCAwIGlmIG5vIGNoYW5nZSB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBkZXZpY2Ugc3RhdHVzLCAtMSBpZiBkZXZpY2UgZGlzY29ubmVjdGVkKQotICovCi1zdGF0aWMgaW50Ci1nc3RfZHYxMzk0c3JjX2J1c19yZXNldCAocmF3MTM5NGhhbmRsZV90IGhhbmRsZSwgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCi17Ci0gIEdzdERWMTM5NFNyYyAqc3JjOwotICBnaW50IG5vZGVjb3VudDsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgY3VycmVudF9kZXZpY2VfY2hhbmdlOwotICBnaW50IGk7Ci0KLSAgc3JjID0gZ3N0X2R2MTM5NHNyY19mcm9tX3JhdzEzOTRoYW5kbGUgKGhhbmRsZSk7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJoYXZlIGJ1cyByZXNldCIpOwotCi0gIC8qIHVwZGF0ZSBnZW5lcmF0aW9uIC0gdG9sZCB0byBkbyBzbyBieSBkb2NzICovCi0gIHJhdzEzOTRfdXBkYXRlX2dlbmVyYXRpb24gKGhhbmRsZSwgZ2VuZXJhdGlvbik7Ci0gIG5vZGVjb3VudCA9IHJhdzEzOTRfZ2V0X25vZGVjb3VudCAoaGFuZGxlKTsKLSAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBwb3J0aW5mbyAqLwotCi0gIC8qIGN1cnJlbnRfZGV2aWNlX2NoYW5nZSBpcyAtMSBpZiBjYW1lcmEgZGlzY29ubmVjdGVkLCAwIGlmIG90aGVyIGRldmljZQotICAgKiBjb25uZWN0ZWQgb3IgMSBpZiBjYW1lcmEgaGFzIG5vdyBjb25uZWN0ZWQgKi8KLSAgY3VycmVudF9kZXZpY2VfY2hhbmdlID0gLTE7Ci0gIGZvciAoaSA9IDA7IGkgPCBub2RlY291bnQ7IGkrKykgewotICAgIGlmIChzcmMtPmd1aWQgPT0gcm9tMTM5NF9nZXRfZ3VpZCAoaGFuZGxlLCBpKSkgewotICAgICAgLyogQ2FtZXJhIGlzIHdpdGggdXMgKi8KLSAgICAgIEdTVF9ERUJVRyAoIkNhbWVyYSBpcyB3aXRoIHVzIik7Ci0gICAgICBpZiAoIXNyYy0+Y29ubmVjdGVkKSB7Ci0gICAgICAgIGN1cnJlbnRfZGV2aWNlX2NoYW5nZSA9IDE7Ci0gICAgICAgIHNyYy0+Y29ubmVjdGVkID0gVFJVRTsKLSAgICAgIH0gZWxzZQotICAgICAgICBjdXJyZW50X2RldmljZV9jaGFuZ2UgPSAwOwotICAgIH0KLSAgfQotICBpZiAoc3JjLT5jb25uZWN0ZWQgJiYgY3VycmVudF9kZXZpY2VfY2hhbmdlID09IC0xKSB7Ci0gICAgR1NUX0RFQlVHICgiQ2FtZXJhIGhhcyBkaXNjb25uZWN0ZWQiKTsKLSAgICBzcmMtPmNvbm5lY3RlZCA9IEZBTFNFOwotICB9IGVsc2UgaWYgKCFzcmMtPmNvbm5lY3RlZCAmJiBjdXJyZW50X2RldmljZV9jaGFuZ2UgPT0gLTEpIHsKLSAgICBHU1RfREVCVUcgKCJDYW1lcmEgaXMgc3RpbGwgbm90IHdpdGggdXMiKTsKLSAgICBjdXJyZW50X2RldmljZV9jaGFuZ2UgPSAwOwotICB9Ci0KLSAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJpZWVlMTM5NC1idXMtcmVzZXQiLCAibm9kZWNvdW50IiwgR19UWVBFX0lOVCwKLSAgICAgIG5vZGVjb3VudCwgImN1cnJlbnQtZGV2aWNlLWNoYW5nZSIsIEdfVFlQRV9JTlQsIGN1cnJlbnRfZGV2aWNlX2NoYW5nZSwKLSAgICAgIE5VTEwpOwotICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKHNyYyksIHN0cnVjdHVyZSk7Ci0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNyYyksIG1lc3NhZ2UpOwotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2R2MTM5NHNyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBwc3JjLCBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3REVjEzOTRTcmMgKmR2MTM5NHNyYyA9IEdTVF9EVjEzOTRTUkMgKHBzcmMpOwotICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZHNbMl07Ci0KLSAgcG9sbGZkc1swXS5mZCA9IHJhdzEzOTRfZ2V0X2ZkIChkdjEzOTRzcmMtPmhhbmRsZSk7Ci0gIHBvbGxmZHNbMF0uZXZlbnRzID0gUE9MTElOIHwgUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUFJJOwotICBwb2xsZmRzWzFdLmZkID0gUkVBRF9TT0NLRVQgKGR2MTM5NHNyYyk7Ci0gIHBvbGxmZHNbMV0uZXZlbnRzID0gUE9MTElOIHwgUE9MTEVSUiB8IFBPTExIVVAgfCBQT0xMUFJJOwotCi0gIGlmIChHX1VOTElLRUxZIChkdjEzOTRzcmMtPmJ1ZikpIHsKLSAgICAvKiBtYXliZSB3ZSBoYWQgYW4gZXJyb3IgYmVmb3JlLCBhbmQgdGhlcmUncyBhIHN0YWxlIGJ1ZmZlcj8gKi8KLSAgICBnc3RfYnVmZmVyX3VucmVmIChkdjEzOTRzcmMtPmJ1Zik7Ci0gICAgZHYxMzk0c3JjLT5idWYgPSBOVUxMOwotICB9Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBpbnQgcmVzID0gcG9sbCAocG9sbGZkcywgMiwgLTEpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA8IDApKSB7Ci0gICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ290byBlcnJvcl93aGlsZV9wb2xsaW5nOwotICAgIH0KLQotICAgIGlmIChHX1VOTElLRUxZIChwb2xsZmRzWzFdLnJldmVudHMpKSB7Ci0gICAgICBjaGFyIGNvbW1hbmQ7Ci0KLSAgICAgIGlmIChwb2xsZmRzWzFdLnJldmVudHMgJiBQT0xMSU4pCi0gICAgICAgIFJFQURfQ09NTUFORCAoZHYxMzk0c3JjLCBjb21tYW5kLCByZXMpOwotCi0gICAgICBnb3RvIHRvbGRfdG9fc3RvcDsKLSAgICB9IGVsc2UgaWYgKEdfTElLRUxZIChwb2xsZmRzWzBdLnJldmVudHMgJiBQT0xMSU4pKSB7Ci0gICAgICAvKiBzaG91bGRuJ3QgYmxvY2sgaW4gdGhlb3J5ICovCi0gICAgICByYXcxMzk0X2xvb3BfaXRlcmF0ZSAoZHYxMzk0c3JjLT5oYW5kbGUpOwotCi0gICAgICBpZiAoZHYxMzk0c3JjLT5idWYpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGdfYXNzZXJ0IChkdjEzOTRzcmMtPmJ1Zik7Ci0KLSAgKmJ1ZiA9IGR2MTM5NHNyYy0+YnVmOwotICBkdjEzOTRzcmMtPmJ1ZiA9IE5VTEw7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotZXJyb3Jfd2hpbGVfcG9sbGluZzoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkdjEzOTRzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLXRvbGRfdG9fc3RvcDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2MTM5NHNyYywgInRvbGQgdG8gc3RvcCwgc2h1dHRpbmcgZG93biIpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotfQotCi1zdGF0aWMgaW50Ci1nc3RfZHYxMzk0c3JjX2Rpc2NvdmVyX2F2Y19ub2RlIChHc3REVjEzOTRTcmMgKiBzcmMpCi17Ci0gIGludCBub2RlID0gLTE7Ci0gIGludCBpLCBqID0gMDsKLSAgaW50IG0gPSBzcmMtPm51bV9wb3J0czsKLQotICBpZiAoc3JjLT5wb3J0ID49IDApIHsKLSAgICAvKiBzZWFyY2ggb24gZXhwbGljaXQgcG9ydCAqLwotICAgIGogPSBzcmMtPnBvcnQ7Ci0gICAgbSA9IGogKyAxOwotICB9Ci0KLSAgLyogbG9vcCBvdmVyIGFsbCBvdXIgcG9ydHMgKi8KLSAgZm9yICg7IGogPCBtICYmIG5vZGUgPT0gLTE7IGorKykgewotICAgIHJhdzEzOTRoYW5kbGVfdCBoYW5kbGU7Ci0gICAgc3RydWN0IHJhdzEzOTRfcG9ydGluZm8gcGluZlsxNl07Ci0KLSAgICAvKiBvcGVuIHRoZSBwb3J0ICovCi0gICAgaGFuZGxlID0gcmF3MTM5NF9uZXdfaGFuZGxlICgpOwotICAgIGlmICghaGFuZGxlKSB7Ci0gICAgICBHU1RfV0FSTklORyAoInJhdzEzOTQgLSBmYWlsZWQgdG8gZ2V0IGhhbmRsZTogJXMuXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAocmF3MTM5NF9nZXRfcG9ydF9pbmZvIChoYW5kbGUsIHBpbmYsIDE2KSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HICgicmF3MTM5NCAtIGZhaWxlZCB0byBnZXQgcG9ydCBpbmZvOiAlcy5cbiIsCi0gICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICBnb3RvIG5leHQ7Ci0gICAgfQotCi0gICAgLyogdGVsbCByYXcxMzk0IHdoaWNoIGhvc3QgYWRhcHRlciB0byB1c2UgKi8KLSAgICBpZiAocmF3MTM5NF9zZXRfcG9ydCAoaGFuZGxlLCBqKSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HICgicmF3MTM5NCAtIGZhaWxlZCB0byBzZXQgc2V0IHBvcnQ6ICVzLlxuIiwgc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICBnb3RvIG5leHQ7Ci0gICAgfQotCi0gICAgLyogbm93IGxvb3Agb3ZlciBhbGwgdGhlIG5vZGVzICovCi0gICAgZm9yIChpID0gMDsgaSA8IHJhdzEzOTRfZ2V0X25vZGVjb3VudCAoaGFuZGxlKTsgaSsrKSB7Ci0gICAgICAvKiBhcmUgd2UgbG9va2luZyBmb3IgYW4gZXhwbGljaXQgR1VJRCA/ICovCi0gICAgICBpZiAoc3JjLT5ndWlkICE9IDApIHsKLSAgICAgICAgaWYgKHNyYy0+Z3VpZCA9PSByb20xMzk0X2dldF9ndWlkIChoYW5kbGUsIGkpKSB7Ci0gICAgICAgICAgbm9kZSA9IGk7Ci0gICAgICAgICAgc3JjLT5wb3J0ID0gajsKLSAgICAgICAgICBnX2ZyZWUgKHNyYy0+dXJpKTsKLSAgICAgICAgICBzcmMtPnVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoImR2Oi8vJWQiLCBzcmMtPnBvcnQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByb20xMzk0X2RpcmVjdG9yeSByb21fZGlyOwotCi0gICAgICAgIC8qIHNlbGVjdCBmaXJzdCBBVi9DIFRhcGUgUmVjb3JkZXIgUGxheWVyIG5vZGUgKi8KLSAgICAgICAgaWYgKHJvbTEzOTRfZ2V0X2RpcmVjdG9yeSAoaGFuZGxlLCBpLCAmcm9tX2RpcikgPCAwKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkcgKCJlcnJvciByZWFkaW5nIGNvbmZpZyByb20gZGlyZWN0b3J5IGZvciBub2RlICVkXG4iLCBpKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHJvbTEzOTRfZ2V0X25vZGVfdHlwZSAoJnJvbV9kaXIpID09IFJPTTEzOTRfTk9ERV9UWVBFX0FWQykgJiYKLSAgICAgICAgICAgIGF2YzEzOTRfY2hlY2tfc3VidW5pdF90eXBlIChoYW5kbGUsIGksIEFWQzEzOTRfU1VCVU5JVF9UWVBFX1ZDUikpIHsKLSAgICAgICAgICBub2RlID0gaTsKLSAgICAgICAgICBzcmMtPnBvcnQgPSBqOwotICAgICAgICAgIHNyYy0+Z3VpZCA9IHJvbTEzOTRfZ2V0X2d1aWQgKGhhbmRsZSwgaSk7Ci0gICAgICAgICAgZ19mcmVlIChzcmMtPnVyaSk7Ci0gICAgICAgICAgc3JjLT51cmkgPSBnX3N0cmR1cF9wcmludGYgKCJkdjovLyVkIiwgc3JjLT5wb3J0KTsKLSAgICAgICAgICBnX2ZyZWUgKHNyYy0+ZGV2aWNlX25hbWUpOwotICAgICAgICAgIHNyYy0+ZGV2aWNlX25hbWUgPSBnX3N0cmR1cCAocm9tX2Rpci5sYWJlbCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcm9tMTM5NF9mcmVlX2RpcmVjdG9yeSAoJnJvbV9kaXIpOwotICAgICAgfQotICAgIH0KLSAgbmV4dDoKLSAgICByYXcxMzk0X2Rlc3Ryb3lfaGFuZGxlIChoYW5kbGUpOwotICB9Ci0gIHJldHVybiBub2RlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdjEzOTRzcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3REVjEzOTRTcmMgKnNyYyA9IEdTVF9EVjEzOTRTUkMgKGJzcmMpOwotICBpbnQgY29udHJvbF9zb2NrWzJdOwotCi0gIHNyYy0+Y29ubmVjdGVkID0gRkFMU0U7Ci0KLSAgaWYgKHNvY2tldHBhaXIgKFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBjb250cm9sX3NvY2spIDwgMCkKLSAgICBnb3RvIHNvY2tldF9wYWlyOwotCi0gIFJFQURfU09DS0VUIChzcmMpID0gY29udHJvbF9zb2NrWzBdOwotICBXUklURV9TT0NLRVQgKHNyYykgPSBjb250cm9sX3NvY2tbMV07Ci0KLSAgaWYgKGZjbnRsIChSRUFEX1NPQ0tFVCAoc3JjKSwgRl9TRVRGTCwgT19OT05CTE9DSykgPCAwKQotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBtYWtlIHJlYWQgc29ja2V0IG5vbi1ibG9ja2luZzogJXMiLAotICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICBpZiAoZmNudGwgKFdSSVRFX1NPQ0tFVCAoc3JjKSwgRl9TRVRGTCwgT19OT05CTE9DSykgPCAwKQotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBtYWtlIHdyaXRlIHNvY2tldCBub24tYmxvY2tpbmc6ICVzIiwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLQotICBzcmMtPmhhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZSAoKTsKLQotICBpZiAoIXNyYy0+aGFuZGxlKSB7Ci0gICAgaWYgKGVycm5vID09IEVBQ0NFUykKLSAgICAgIGdvdG8gcGVybWlzc2lvbl9kZW5pZWQ7Ci0gICAgZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKQotICAgICAgZ290byBub3RfZm91bmQ7Ci0gICAgZWxzZQotICAgICAgZ290byBub19oYW5kbGU7Ci0gIH0KLQotICBzcmMtPm51bV9wb3J0cyA9IHJhdzEzOTRfZ2V0X3BvcnRfaW5mbyAoc3JjLT5oYW5kbGUsIHNyYy0+cGluZm8sIDE2KTsKLQotICBpZiAoc3JjLT5udW1fcG9ydHMgPT0gMCkKLSAgICBnb3RvIG5vX3BvcnRzOwotCi0gIGlmIChzcmMtPnVzZV9hdmMgfHwgc3JjLT5wb3J0ID09IC0xKQotICAgIHNyYy0+YXZjX25vZGUgPSBnc3RfZHYxMzk0c3JjX2Rpc2NvdmVyX2F2Y19ub2RlIChzcmMpOwotCi0gIC8qIGxldHMgZGVzdHJveSBoYW5kbGUgYW5kIGNyZWF0ZSBvbmUgb24gcG9ydAotICAgICB0aGlzIGlzIG1vcmUgcmVsaWFibGUgdGhhbiBzZXR0aW5nIHBvcnQgb24KLSAgICAgdGhlIGV4aXN0aW5nIGhhbmRsZSAqLwotICByYXcxMzk0X2Rlc3Ryb3lfaGFuZGxlIChzcmMtPmhhbmRsZSk7Ci0gIHNyYy0+aGFuZGxlID0gcmF3MTM5NF9uZXdfaGFuZGxlX29uX3BvcnQgKHNyYy0+cG9ydCk7Ci0gIGlmICghc3JjLT5oYW5kbGUpCi0gICAgZ290byBjYW5ub3Rfc2V0X3BvcnQ7Ci0KLSAgcmF3MTM5NF9zZXRfdXNlcmRhdGEgKHNyYy0+aGFuZGxlLCBzcmMpOwotICByYXcxMzk0X3NldF9idXNfcmVzZXRfaGFuZGxlciAoc3JjLT5oYW5kbGUsIGdzdF9kdjEzOTRzcmNfYnVzX3Jlc2V0KTsKLQotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLSAgaWYgKChzcmMtPmllYzYxODgzZHYgPQotICAgICAgICAgIGllYzYxODgzX2R2X2ZiX2luaXQgKHNyYy0+aGFuZGxlLAotICAgICAgICAgICAgICBnc3RfZHYxMzk0c3JjX2llYzYxODgzX3JlY2VpdmUsIHNyYykpID09IE5VTEwpCi0gICAgZ290byBjYW5ub3RfaW5pdGlhbGlzZV9kdjsKLQotI2Vsc2UKLSAgcmF3MTM5NF9zZXRfaXNvX2hhbmRsZXIgKHNyYy0+aGFuZGxlLCBzcmMtPmNoYW5uZWwsCi0gICAgICBnc3RfZHYxMzk0c3JjX2lzb19yZWNlaXZlKTsKLSNlbmRpZgotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN1Y2Nlc3NmdWxseSBvcGVuZWQgdXAgMTM5NCBjb25uZWN0aW9uIik7Ci0gIHNyYy0+Y29ubmVjdGVkID0gVFJVRTsKLQotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLSAgaWYgKGllYzYxODgzX2R2X2ZiX3N0YXJ0IChzcmMtPmllYzYxODgzZHYsIHNyYy0+Y2hhbm5lbCkgIT0gMCkKLSAgICBnb3RvIGNhbm5vdF9zdGFydDsKLSNlbHNlCi0gIGlmIChyYXcxMzk0X3N0YXJ0X2lzb19yY3YgKHNyYy0+aGFuZGxlLCBzcmMtPmNoYW5uZWwpIDwgMCkKLSAgICBnb3RvIGNhbm5vdF9zdGFydDsKLSNlbmRpZgotCi0gIGlmIChzcmMtPnVzZV9hdmMpIHsKLSAgICByYXcxMzk0aGFuZGxlX3QgYXZjX2hhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZV9vbl9wb3J0IChzcmMtPnBvcnQpOwotCi0gICAgLyogc3RhcnQgdGhlIFZDUiAqLwotICAgIGlmIChhdmNfaGFuZGxlKSB7Ci0gICAgICBpZiAoIWF2YzEzOTRfdmNyX2lzX3JlY29yZGluZyAoYXZjX2hhbmRsZSwgc3JjLT5hdmNfbm9kZSkKLSAgICAgICAgICAmJiBhdmMxMzk0X3Zjcl9pc19wbGF5aW5nIChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKQotICAgICAgICAgICE9IEFWQzEzOTRfVkNSX09QRVJBTkRfUExBWV9GT1JXQVJEKQotICAgICAgICBhdmMxMzk0X3Zjcl9wbGF5IChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKTsKLSAgICAgIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKGF2Y19oYW5kbGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIlN0YXJ0aW5nIFZDUiB2aWEgYXZjMTM5NCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIH0KLSAgfQotCi0gIGdzdF8xMzk0X2Nsb2NrX3NldF9oYW5kbGUgKHNyYy0+cHJvdmlkZWRfY2xvY2ssIHNyYy0+aGFuZGxlKTsKLQotICByZXR1cm4gVFJVRTsKLQotc29ja2V0X3BhaXI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFEX1dSSVRFLCAoTlVMTCksCi0gICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotcGVybWlzc2lvbl9kZW5pZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoTlVMTCksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm90X2ZvdW5kOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKE5VTEwpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2hhbmRsZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChOVUxMKSwKLSAgICAgICAgKCJjYW4ndCBnZXQgcmF3MTM5NCBoYW5kbGUgKCVzKSIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fcG9ydHM6Ci0gIHsKLSAgICByYXcxMzk0X2Rlc3Ryb3lfaGFuZGxlIChzcmMtPmhhbmRsZSk7Ci0gICAgc3JjLT5oYW5kbGUgPSBOVUxMOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBOT1RfRk9VTkQsIChOVUxMKSwKLSAgICAgICAgKCJubyBwb3J0cyBhdmFpbGFibGUgZm9yIHJhdzEzOTQiKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jYW5ub3Rfc2V0X3BvcnQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgKCJjYW4ndCBzZXQgMTM5NCBwb3J0ICVkIiwgc3JjLT5wb3J0KSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jYW5ub3Rfc3RhcnQ6Ci0gIHsKLSAgICByYXcxMzk0X2Rlc3Ryb3lfaGFuZGxlIChzcmMtPmhhbmRsZSk7Ci0gICAgc3JjLT5oYW5kbGUgPSBOVUxMOwotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLSAgICBpZWM2MTg4M19kdl9mYl9jbG9zZSAoc3JjLT5pZWM2MTg4M2R2KTsKLSAgICBzcmMtPmllYzYxODgzZHYgPSBOVUxMOwotI2VuZGlmCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJjYW4ndCBzdGFydCAxMzk0IGlzbyByZWNlaXZlIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLWNhbm5vdF9pbml0aWFsaXNlX2R2OgotICB7Ci0gICAgcmF3MTM5NF9kZXN0cm95X2hhbmRsZSAoc3JjLT5oYW5kbGUpOwotICAgIHNyYy0+aGFuZGxlID0gTlVMTDsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoImNhbid0IGluaXRpYWxpc2UgaWVjNjE4ODMgZHYiKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0jZW5kaWYKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHYxMzk0c3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3REVjEzOTRTcmMgKnNyYyA9IEdTVF9EVjEzOTRTUkMgKGJzcmMpOwotCi0gIGNsb3NlIChSRUFEX1NPQ0tFVCAoc3JjKSk7Ci0gIGNsb3NlIChXUklURV9TT0NLRVQgKHNyYykpOwotICBSRUFEX1NPQ0tFVCAoc3JjKSA9IC0xOwotICBXUklURV9TT0NLRVQgKHNyYykgPSAtMTsKLSNpZmRlZiBIQVZFX0xJQklFQzYxODgzCi0gIGllYzYxODgzX2R2X2ZiX2Nsb3NlIChzcmMtPmllYzYxODgzZHYpOwotI2Vsc2UKLSAgcmF3MTM5NF9zdG9wX2lzb19yY3YgKHNyYy0+aGFuZGxlLCBzcmMtPmNoYW5uZWwpOwotI2VuZGlmCi0KLSAgaWYgKHNyYy0+dXNlX2F2YykgewotICAgIHJhdzEzOTRoYW5kbGVfdCBhdmNfaGFuZGxlID0gcmF3MTM5NF9uZXdfaGFuZGxlX29uX3BvcnQgKHNyYy0+cG9ydCk7Ci0KLSAgICAvKiBwYXVzZSBhbmQgc3RvcCB0aGUgVkNSICovCi0gICAgaWYgKGF2Y19oYW5kbGUpIHsKLSAgICAgIGlmICghYXZjMTM5NF92Y3JfaXNfcmVjb3JkaW5nIChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKQotICAgICAgICAgICYmIChhdmMxMzk0X3Zjcl9pc19wbGF5aW5nIChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKQotICAgICAgICAgICAgICAhPSBBVkMxMzk0X1ZDUl9PUEVSQU5EX1BMQVlfRk9SV0FSRF9QQVVTRSkpCi0gICAgICAgIGF2YzEzOTRfdmNyX3BhdXNlIChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKTsKLSAgICAgIGF2YzEzOTRfdmNyX3N0b3AgKGF2Y19oYW5kbGUsIHNyYy0+YXZjX25vZGUpOwotICAgICAgcmF3MTM5NF9kZXN0cm95X2hhbmRsZSAoYXZjX2hhbmRsZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiU3RhcnRpbmcgVkNSIHZpYSBhdmMxMzk0IGZhaWxlZDogJXMiLAotICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgfQotICB9Ci0KLSAgZ3N0XzEzOTRfY2xvY2tfdW5zZXRfaGFuZGxlIChzcmMtPnByb3ZpZGVkX2Nsb2NrKTsKLQotICByYXcxMzk0X2Rlc3Ryb3lfaGFuZGxlIChzcmMtPmhhbmRsZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R2MTM5NHNyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3REVjEzOTRTcmMgKnNyYyA9IEdTVF9EVjEzOTRTUkMgKGJzcmMpOwotCi0gIFNFTkRfQ09NTUFORCAoc3JjLCBDT05UUk9MX1NUT1ApOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdjEzOTRzcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIFRSVUUsIEdTVF9TRUNPTkQgLyAyNSwgR1NUX1NFQ09ORCAvIDI1KTsKLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byBub3Rfc3VwcG9ydGVkOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLW5vdF9zdXBwb3J0ZWQ6Ci0gIHJldHVybiBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChiYXNlc3JjLCBxdWVyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHYxMzk0c3JjX3VwZGF0ZV9kZXZpY2VfbmFtZSAoR3N0RFYxMzk0U3JjICogc3JjKQotewotICByYXcxMzk0aGFuZGxlX3QgaGFuZGxlOwotICBnaW50IHBvcnRjb3VudCwgcG9ydCwgbm9kZWNvdW50LCBub2RlOwotICByb20xMzk0X2RpcmVjdG9yeSBkaXJlY3Rvcnk7Ci0KLSAgZ19mcmVlIChzcmMtPmRldmljZV9uYW1lKTsKLSAgc3JjLT5kZXZpY2VfbmFtZSA9IE5VTEw7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNyYywgInVwZGF0aW5nIGRldmljZSBuYW1lIGZvciBjdXJyZW50IEdVSUQiKTsKLQotICBoYW5kbGUgPSByYXcxMzk0X25ld19oYW5kbGUgKCk7Ci0KLSAgaWYgKGhhbmRsZSA9PSBOVUxMKQotICAgIGdvdG8gZ2V0aGFuZGxlX2ZhaWxlZDsKLQotICBwb3J0Y291bnQgPSByYXcxMzk0X2dldF9wb3J0X2luZm8gKGhhbmRsZSwgTlVMTCwgMCk7Ci0gIGZvciAocG9ydCA9IDA7IHBvcnQgPCBwb3J0Y291bnQ7IHBvcnQrKykgewotICAgIGlmIChyYXcxMzk0X3NldF9wb3J0IChoYW5kbGUsIHBvcnQpID49IDApIHsKLSAgICAgIG5vZGVjb3VudCA9IHJhdzEzOTRfZ2V0X25vZGVjb3VudCAoaGFuZGxlKTsKLSAgICAgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBub2RlY291bnQ7IG5vZGUrKykgewotICAgICAgICBpZiAoc3JjLT5ndWlkID09IHJvbTEzOTRfZ2V0X2d1aWQgKGhhbmRsZSwgbm9kZSkpIHsKLSAgICAgICAgICBpZiAocm9tMTM5NF9nZXRfZGlyZWN0b3J5IChoYW5kbGUsIG5vZGUsICZkaXJlY3RvcnkpID49IDApIHsKLSAgICAgICAgICAgIGdfZnJlZSAoc3JjLT5kZXZpY2VfbmFtZSk7Ci0gICAgICAgICAgICBzcmMtPmRldmljZV9uYW1lID0gZ19zdHJkdXAgKGRpcmVjdG9yeS5sYWJlbCk7Ci0gICAgICAgICAgICByb20xMzk0X2ZyZWVfZGlyZWN0b3J5ICgmZGlyZWN0b3J5KTsKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX1dBUk5JTkcgKCJlcnJvciByZWFkaW5nIHJvbSBkaXJlY3RvcnkgZm9yIG5vZGUgJWQiLCBub2RlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzcmMtPmRldmljZV9uYW1lID0gZ19zdHJkdXAgKCJVbmtub3duIik7ICAgICAgLyogRklYTUU6IHRyYW5zbGF0ZT8gKi8KLQotZG9uZToKLQotICByYXcxMzk0X2Rlc3Ryb3lfaGFuZGxlIChoYW5kbGUpOwotICByZXR1cm47Ci0KLS8qIEVSUk9SUyAqLwotZ2V0aGFuZGxlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HICgiZmFpbGVkIHRvIGdldCByYXcxMzk0IGhhbmRsZTogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIHNyYy0+ZGV2aWNlX25hbWUgPSBnX3N0cmR1cCAoIlVua25vd24iKTsgICAgLyogRklYTUU6IHRyYW5zbGF0ZT8gKi8KLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoqKiBHU1RVUklIQU5ETEVSIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgR3N0VVJJVHlwZQotZ3N0X2R2MTM5NHNyY191cmlfZ2V0X3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIHJldHVybiBHU1RfVVJJX1NSQzsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICpjb25zdCAqCi1nc3RfZHYxMzk0c3JjX3VyaV9nZXRfcHJvdG9jb2xzIChHVHlwZSB0eXBlKQotewotICBzdGF0aWMgY29uc3QgZ2NoYXIgKnByb3RvY29sc1tdID0geyAoY2hhciAqKSAiZHYiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9kdjEzOTRzcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3REVjEzOTRTcmMgKmdzdF9kdjEzOTRzcmMgPSBHU1RfRFYxMzk0U1JDIChoYW5kbGVyKTsKLQotICByZXR1cm4gZ3N0X2R2MTM5NHNyYy0+dXJpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdjEzOTRzcmNfdXJpX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIGdjaGFyICpwcm90b2NvbCwgKmxvY2F0aW9uOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3REVjEzOTRTcmMgKmdzdF9kdjEzOTRzcmMgPSBHU1RfRFYxMzk0U1JDIChoYW5kbGVyKTsKLQotICBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sICh1cmkpOwotICBpZiAoc3RyY21wIChwcm90b2NvbCwgImR2IikgIT0gMCkgewotICAgIGdfZnJlZSAocHJvdG9jb2wpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLCAiSW52YWxpZCBEViBVUkkiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgZ19mcmVlIChwcm90b2NvbCk7Ci0KLSAgbG9jYXRpb24gPSBnc3RfdXJpX2dldF9sb2NhdGlvbiAodXJpKTsKLSAgaWYgKGxvY2F0aW9uICYmICpsb2NhdGlvbiAhPSAnXDAnKQotICAgIGdzdF9kdjEzOTRzcmMtPnBvcnQgPSBzdHJ0b2wgKGxvY2F0aW9uLCBOVUxMLCAxMCk7Ci0gIGVsc2UKLSAgICBnc3RfZHYxMzk0c3JjLT5wb3J0ID0gREVGQVVMVF9QT1JUOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLSAgZ19mcmVlIChnc3RfZHYxMzk0c3JjLT51cmkpOwotICBnc3RfZHYxMzk0c3JjLT51cmkgPSBnX3N0cmR1cF9wcmludGYgKCJkdjovLyVkIiwgZ3N0X2R2MTM5NHNyYy0+cG9ydCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdjEzOTRzcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKLXsKLSAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2UgPSAoR3N0VVJJSGFuZGxlckludGVyZmFjZSAqKSBnX2lmYWNlOwotCi0gIGlmYWNlLT5nZXRfdHlwZSA9IGdzdF9kdjEzOTRzcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9kdjEzOTRzcmNfdXJpX2dldF9wcm90b2NvbHM7Ci0gIGlmYWNlLT5nZXRfdXJpID0gZ3N0X2R2MTM5NHNyY191cmlfZ2V0X3VyaTsKLSAgaWZhY2UtPnNldF91cmkgPSBnc3RfZHYxMzk0c3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvZXh0L3JhdzEzOTQvZ3N0ZHYxMzk0c3JjLmggYi9leHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmMzMwOC4uMDAwMDAwMAotLS0gYS9leHQvcmF3MTM5NC9nc3RkdjEzOTRzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0dTVDEzOTRfSF9fCi0jZGVmaW5lIF9fR1NUX0dTVDEzOTRfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+Ci0jaW5jbHVkZSAiZ3N0MTM5NGNsb2NrLmgiCi0KLSNpbmNsdWRlIDxsaWJyYXcxMzk0L3JhdzEzOTQuaD4KLSNpZmRlZiBIQVZFX0xJQklFQzYxODgzCi0jaW5jbHVkZSA8bGliaWVjNjE4ODMvaWVjNjE4ODMuaD4KLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRFYxMzk0U1JDIFwKLSAgKGdzdF9kdjEzOTRzcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0RWMTM5NFNSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0RWMTM5NFNSQyxHc3REVjEzOTRTcmMpKQotI2RlZmluZSBHU1RfRFYxMzk0U1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0RWMTM5NFNSQyxHc3REVjEzOTRTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19EVjEzOTRTUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9EVjEzOTRTUkMpKQotI2RlZmluZSBHU1RfSVNfRFYxMzk0U1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0RWMTM5NFNSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3REVjEzOTRTcmMgR3N0RFYxMzk0U3JjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERWMTM5NFNyY0NsYXNzIEdzdERWMTM5NFNyY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdERWMTM5NFNyYyB7Ci0gIEdzdFB1c2hTcmMgZWxlbWVudDsKLQotICAvLyBjb25zZWN1dGl2ZT0yLCBza2lwPTQgd2lsbCBza2lwIDQgZnJhbWVzLCB0aGVuIGxldCAyIGNvbnNlY3V0aXZlIG9uZXMgdGhydQotICBnaW50IGNvbnNlY3V0aXZlOwotICBnaW50IHNraXA7Ci0gIGdib29sZWFuIGRyb3BfaW5jb21wbGV0ZTsKLQotICBnaW50IG51bV9wb3J0czsKLSAgZ2ludCBwb3J0OwotICBnaW50IGNoYW5uZWw7Ci0gIG9jdGxldF90IGd1aWQ7Ci0gIGdpbnQgYXZjX25vZGU7Ci0gIGdib29sZWFuIHVzZV9hdmM7Ci0KLSAgc3RydWN0IHJhdzEzOTRfcG9ydGluZm8gcGluZm9bMTZdOwotICByYXcxMzk0aGFuZGxlX3QgaGFuZGxlOwotCi0gIEdzdEJ1ZmZlciAqYnVmOwotICAKLSAgR3N0QnVmZmVyICpmcmFtZTsKLSAgZ3VpbnQgZnJhbWVfc2l6ZTsKLSAgZ3VpbnQgZnJhbWVfcmF0ZTsKLSAgZ3VpbnQgYnl0ZXNfaW5fZnJhbWU7Ci0gIGd1aW50IGZyYW1lX3NlcXVlbmNlOwotCi0gIGludCBjb250cm9sX3NvY2tbMl07Ci0KLSAgZ2NoYXIgKnVyaTsKLQotICBnY2hhciAqZGV2aWNlX25hbWU7Ci0KLSAgZ2Jvb2xlYW4gY29ubmVjdGVkOwotICAjaWZkZWYgSEFWRV9MSUJJRUM2MTg4MwotICBpZWM2MTg4M19kdl9mYl90IGllYzYxODgzZHY7Ci0gICNlbmRpZgotCi0gIEdzdDEzOTRDbG9jayAqcHJvdmlkZWRfY2xvY2s7Ci19OwotCi1zdHJ1Y3QgX0dzdERWMTM5NFNyY0NsYXNzIHsKLSAgR3N0UHVzaFNyY0NsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWwgKi8KLSAgdm9pZCAoKmZyYW1lX2Ryb3BwZWQpICAoR3N0RWxlbWVudCAqZWxlbSk7Ci19OwotCi1HVHlwZSBnc3RfZHYxMzk0c3JjX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfR1NUMTM5NF9IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYyBiL2V4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRjZWI0Zi4uMDAwMDAwMAotLS0gYS9leHQvcmF3MTM5NC9nc3RoZHYxMzk0c3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1oZHYxMzk0c3JjCi0gKgotICogUmVhZCBNUEVHLVRTIGRhdGEgZnJvbSBmaXJld2lyZSBwb3J0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBoZHYxMzk0c3JjICEgcXVldWUgISBkZWNvZGViaW4gbmFtZT1kICEgcXVldWUgISB4dmltYWdlc2luayBkLiAhIHF1ZXVlICEgYWxzYXNpbmsKLSAqIF18IGNhcHR1cmVzIGZyb20gdGhlIGZpcmV3aXJlIHBvcnQgYW5kIHBsYXlzIHRoZSBzdHJlYW1zLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGhkdjEzOTRzcmMgISBxdWV1ZSAhIGZpbGVzaW5rIGxvY2F0aW9uPW15ZHVtcC50cwotICogXXwgY2FwdHVyZSB0byBhIGRpc2sgZmlsZQotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3BvbGwuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8bGliYXZjMTM5NC9hdmMxMzk0Lmg+Ci0jaW5jbHVkZSA8bGliYXZjMTM5NC9hdmMxMzk0X3Zjci5oPgotI2luY2x1ZGUgPGxpYmF2YzEzOTQvcm9tMTM5NC5oPgotI2luY2x1ZGUgPGxpYnJhdzEzOTQvcmF3MTM5NC5oPgotI2luY2x1ZGUgPGxpYmllYzYxODgzL2llYzYxODgzLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RoZHYxMzk0c3JjLmgiCi0jaW5jbHVkZSAiZ3N0MTM5NHByb2JlLmgiCi0KLQotI2RlZmluZSBDT05UUk9MX1NUT1AgICAgICAgICAgICAnUycgICAgIC8qIHN0b3AgdGhlIHNlbGVjdCBjYWxsICovCi0jZGVmaW5lIENPTlRST0xfU09DS0VUUyhzcmMpICAgc3JjLT5jb250cm9sX3NvY2sKLSNkZWZpbmUgV1JJVEVfU09DS0VUKHNyYykgICAgICBzcmMtPmNvbnRyb2xfc29ja1sxXQotI2RlZmluZSBSRUFEX1NPQ0tFVChzcmMpICAgICAgIHNyYy0+Y29udHJvbF9zb2NrWzBdCi0KLSNkZWZpbmUgU0VORF9DT01NQU5EKHNyYywgY29tbWFuZCkgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludCBHX0dOVUNfVU5VU0VEIF9yZXM7IHVuc2lnbmVkIGNoYXIgYzsgYyA9IGNvbW1hbmQ7ICAgXAotICBfcmVzID0gd3JpdGUgKFdSSVRFX1NPQ0tFVChzcmMpLCAmYywgMSk7ICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBSRUFEX0NPTU1BTkQoc3JjLCBjb21tYW5kLCByZXMpICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmVzID0gcmVhZChSRUFEX1NPQ0tFVChzcmMpLCAmY29tbWFuZCwgMSk7ICAgXAotfSBHX1NUTVRfRU5ECi0KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoaGR2MTM5NHNyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAoaGR2MTM5NHNyY19kZWJ1ZykKLQotI2RlZmluZSBERUZBVUxUX1BPUlQgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9DSEFOTkVMICAgNjMKLSNkZWZpbmUgREVGQVVMVF9VU0VfQVZDICAgVFJVRQotI2RlZmluZSBERUZBVUxUX0dVSUQgICAgMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9QT1JULAotICBQUk9QX0NIQU5ORUwsCi0gIFBST1BfVVNFX0FWQywKLSAgUFJPUF9HVUlELAotICBQUk9QX0RFVklDRV9OQU1FCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTCi0gICAgKCJ2aWRlby9tcGVndHMsc3lzdGVtc3RyZWFtPShib29sZWFuKXRydWUscGFja2V0c2l6ZT0oaW50KTE4OCIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X2hkdjEzOTRzcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLQotc3RhdGljIHZvaWQgZ3N0X2hkdjEzOTRzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2hkdjEzOTRzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2hkdjEzOTRzcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfaGR2MTM5NHNyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9oZHYxMzk0c3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBic3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaGR2MTM5NHNyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2hkdjEzOTRzcmNfY3JlYXRlIChHc3RQdXNoU3JjICogcHNyYywKLSAgICBHc3RCdWZmZXIgKiogYnVmKTsKLQotc3RhdGljIHZvaWQgZ3N0X2hkdjEzOTRzcmNfdXBkYXRlX2RldmljZV9uYW1lIChHc3RIRFYxMzk0U3JjICogc3JjKTsKLQotI2RlZmluZSBnc3RfaGR2MTM5NHNyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0SERWMTM5NFNyYywgZ3N0X2hkdjEzOTRzcmMsIEdTVF9UWVBFX1BVU0hfU1JDLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsCi0gICAgICAgIGdzdF9oZHYxMzk0c3JjX3VyaV9oYW5kbGVyX2luaXQpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9oZHYxMzk0c3JjX2NsYXNzX2luaXQgKEdzdEhEVjEzOTRTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzOwotICBHc3RQdXNoU3JjQ2xhc3MgKmdzdHB1c2hzcmNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc3JjX2NsYXNzID0gKEdzdEJhc2VTcmNDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cHVzaHNyY19jbGFzcyA9IChHc3RQdXNoU3JjQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2hkdjEzOTRzcmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaGR2MTM5NHNyY19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfaGR2MTM5NHNyY19kaXNwb3NlOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfUE9SVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwb3J0IiwgIlBvcnQiLCAiUG9ydCBudW1iZXIgKC0xIGF1dG9tYXRpYykiLAotICAgICAgICAgIC0xLCAxNiwgREVGQVVMVF9QT1JULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9DSEFOTkVMLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImNoYW5uZWwiLCAiQ2hhbm5lbCIsICJDaGFubmVsIG51bWJlciBmb3IgbGlzdGVuaW5nIiwKLSAgICAgICAgICAwLCA2NCwgREVGQVVMVF9DSEFOTkVMLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9VU0VfQVZDLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ1c2UtYXZjIiwgIlVzZSBBVi9DIiwgIlVzZSBBVi9DIFZUUiBjb250cm9sIiwKLSAgICAgICAgICBERUZBVUxUX1VTRV9BVkMsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0dVSUQsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiZ3VpZCIsICJHVUlEIiwKLSAgICAgICAgICAic2VsZWN0IG9uZSBvZiBtdWx0aXBsZSBEViBkZXZpY2VzIGJ5IGl0cyBHVUlELiB1c2UgYSBoZXhhZGVjaW1hbCAiCi0gICAgICAgICAgImxpa2UgMHhoaGhoaGhoaGhoaGhoaGhoLiAoMCA9IG5vIGd1aWQpIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9HVUlELCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdEhEVjEzOTRTcmM6ZGV2aWNlLW5hbWU6Ci0gICAqCi0gICAqIERlc2NyaXB0aXZlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBvcGVuZWQgZGV2aWNlCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RFVklDRV9OQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZS1uYW1lIiwgImRldmljZSBuYW1lIiwKLSAgICAgICAgICAidXNlci1mcmllbmRseSBuYW1lIG9mIHRoZSBkZXZpY2UiLCAiRGVmYXVsdCIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5uZWdvdGlhdGUgPSBOVUxMOwotICBnc3RiYXNlc3JjX2NsYXNzLT5zdGFydCA9IGdzdF9oZHYxMzk0c3JjX3N0YXJ0OwotICBnc3RiYXNlc3JjX2NsYXNzLT5zdG9wID0gZ3N0X2hkdjEzOTRzcmNfc3RvcDsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+dW5sb2NrID0gZ3N0X2hkdjEzOTRzcmNfdW5sb2NrOwotCi0gIGdzdHB1c2hzcmNfY2xhc3MtPmNyZWF0ZSA9IGdzdF9oZHYxMzk0c3JjX2NyZWF0ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkZpcmV3aXJlICgxMzk0KSBIRFYgdmlkZW8gc291cmNlIiwgIlNvdXJjZS9WaWRlbyIsCi0gICAgICAiU291cmNlIGZvciBNUEVHLVRTIHZpZGVvIGRhdGEgZnJvbSBmaXJld2lyZSBwb3J0IiwKLSAgICAgICJFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChoZHYxMzk0c3JjX2RlYnVnLCAiaGR2MTM5NHNyYyIsIDAsCi0gICAgICAiTVBFRy1UUyBmaXJld2lyZSBzb3VyY2UiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oZHYxMzk0c3JjX2luaXQgKEdzdEhEVjEzOTRTcmMgKiBkdjEzOTRzcmMpCi17Ci0gIEdzdFBhZCAqc3JjcGFkID0gR1NUX0JBU0VfU1JDX1BBRCAoZHYxMzk0c3JjKTsKLQotICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdTVF9CQVNFX1NSQyAoZHYxMzk0c3JjKSwgVFJVRSk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHNyY3BhZCk7Ci0KLSAgZHYxMzk0c3JjLT5wb3J0ID0gREVGQVVMVF9QT1JUOwotICBkdjEzOTRzcmMtPmNoYW5uZWwgPSBERUZBVUxUX0NIQU5ORUw7Ci0KLSAgZHYxMzk0c3JjLT51c2VfYXZjID0gREVGQVVMVF9VU0VfQVZDOwotICBkdjEzOTRzcmMtPmd1aWQgPSBERUZBVUxUX0dVSUQ7Ci0gIGR2MTM5NHNyYy0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiaGR2Oi8vJWQiLCBkdjEzOTRzcmMtPnBvcnQpOwotICBkdjEzOTRzcmMtPmRldmljZV9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiRGVmYXVsdCIpOwotCi0gIFJFQURfU09DS0VUIChkdjEzOTRzcmMpID0gLTE7Ci0gIFdSSVRFX1NPQ0tFVCAoZHYxMzk0c3JjKSA9IC0xOwotCi0gIGR2MTM5NHNyYy0+ZnJhbWVfc2VxdWVuY2UgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2hkdjEzOTRzcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0SERWMTM5NFNyYyAqc3JjID0gR1NUX0hEVjEzOTRTUkMgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChzcmMtPnVyaSk7Ci0gIHNyYy0+dXJpID0gTlVMTDsKLQotICBnX2ZyZWUgKHNyYy0+ZGV2aWNlX25hbWUpOwotICBzcmMtPmRldmljZV9uYW1lID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oZHYxMzk0c3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RIRFYxMzk0U3JjICpmaWx0ZXIgPSBHU1RfSERWMTM5NFNSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIGZpbHRlci0+cG9ydCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ19mcmVlIChmaWx0ZXItPnVyaSk7Ci0gICAgICBmaWx0ZXItPnVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoImhkdjovLyVkIiwgZmlsdGVyLT5wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DSEFOTkVMOgotICAgICAgZmlsdGVyLT5jaGFubmVsID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFX0FWQzoKLSAgICAgIGZpbHRlci0+dXNlX2F2YyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9HVUlEOgotICAgICAgZmlsdGVyLT5ndWlkID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBnc3RfaGR2MTM5NHNyY191cGRhdGVfZGV2aWNlX25hbWUgKGZpbHRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9oZHYxMzk0c3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RIRFYxMzk0U3JjICpmaWx0ZXIgPSBHU1RfSERWMTM5NFNSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+cG9ydCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0hBTk5FTDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+Y2hhbm5lbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFX0FWQzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPnVzZV9hdmMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0dVSUQ6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBmaWx0ZXItPmd1aWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFVklDRV9OQU1FOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgZmlsdGVyLT5kZXZpY2VfbmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RIRFYxMzk0U3JjICoKLWdzdF9oZHYxMzk0c3JjX2Zyb21fcmF3MTM5NGhhbmRsZSAocmF3MTM5NGhhbmRsZV90IGhhbmRsZSkKLXsKLSAgaWVjNjE4ODNfbXBlZzJfdCBtcGVnMiA9IChpZWM2MTg4M19tcGVnMl90KSByYXcxMzk0X2dldF91c2VyZGF0YSAoaGFuZGxlKTsKLSAgcmV0dXJuIEdTVF9IRFYxMzk0U1JDIChpZWM2MTg4M19tcGVnMl9nZXRfY2FsbGJhY2tfZGF0YSAobXBlZzIpKTsKLX0KLQotLyogV2l0aGluIG9uZSBsb29wIGl0ZXJhdGlvbiAod2hpY2ggbWF5IGNhbGwgX3JlY2VpdmUoKSBtYW55IHRpbWVzKSwgaXQgc2VlbXMKLSAqIGFzIHRob3VnaCAnKmRhdGEnIHdpbGwgYWx3YXlzIGJlIGRpZmZlcmVudC4KLSAqCi0gKiBXZSBjYW4gdGhlcmVmb3JlIGFzc3VtZSB0aGF0IGFueSAnKmRhdGEnIGdpdmVuIHRvIHVzIHdpbGwgc3RheSBhbGxvY2F0ZWQgdW50aWwKLSAqIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotICovCi0KLXN0YXRpYyBpbnQKLWdzdF9oZHYxMzk0c3JjX2llYzYxODgzX3JlY2VpdmUgKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sCi0gICAgdW5zaWduZWQgaW50IGRyb3BwZWQsIHZvaWQgKmNiZGF0YSkKLXsKLSAgR3N0SERWMTM5NFNyYyAqZHYxMzk0c3JjID0gR1NUX0hEVjEzOTRTUkMgKGNiZGF0YSk7Ci0KLSAgR1NUX0xPRyAoImRhdGE6JXAsIGxlbjolZCwgZHJvcHBlZDolZCIsIGRhdGEsIGxlbiwgZHJvcHBlZCk7Ci0KLSAgLyogZXJyb3Igb3V0IGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIHJvb20gISAqLwotICBpZiAoR19VTkxJS0VMWSAoZHYxMzk0c3JjLT5vdXRvZmZzZXQgPiAoMjA0OCAqIDE4OCAtIGxlbikpKQotICAgIHJldHVybiAtMTsKLQotICBpZiAoR19MSUtFTFkgKGxlbiA9PSBJRUM2MTg4M19NUEVHMl9UU1BfU0laRSkpIHsKLSAgICBtZW1jcHkgKChndWludDggKikgZHYxMzk0c3JjLT5vdXRkYXRhICsgZHYxMzk0c3JjLT5vdXRvZmZzZXQsIGRhdGEsIGxlbik7Ci0gICAgZHYxMzk0c3JjLT5vdXRvZmZzZXQgKz0gbGVuOwotICB9Ci0gIGR2MTM5NHNyYy0+ZnJhbWVfc2VxdWVuY2UrKzsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBXaGVuIGFuIGllZWUxMzk0IGJ1cyByZXNldCBoYXBwZW5zLCB1c3VhbGx5IGEgZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQKLSAqIG9yIGFkZGVkLiAgV2Ugc2VuZCBhIG1lc3NhZ2Ugb24gdGhlIG1lc3NhZ2UgYnVzIHdpdGggdGhlIG5vZGUgY291bnQgCi0gKiBhbmQgd2hldGhlciB0aGUgY2FwdHVyZSBkZXZpY2UgdXNlZCBpbiB0aGlzIGVsZW1lbnQgY29ubmVjdGVkLCBkaXNjb25uZWN0ZWQgCi0gKiBvciB3YXMgdW5jaGFuZ2VkCi0gKiBNZXNzYWdlIHN0cnVjdHVyZToKLSAqIG5vZGVjb3VudCAtIGludGVnZXIgd2l0aCBudW1iZXIgb2Ygbm9kZXMgb24gYnVzCi0gKiBjdXJyZW50LWRldmljZS1jaGFuZ2UgLSBpbnRlZ2VyICgxIGlmIGRldmljZSBjb25uZWN0ZWQsIDAgaWYgbm8gY2hhbmdlIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IGRldmljZSBzdGF0dXMsIC0xIGlmIGRldmljZSBkaXNjb25uZWN0ZWQpCi0gKi8KLXN0YXRpYyBpbnQKLWdzdF9oZHYxMzk0c3JjX2J1c19yZXNldCAocmF3MTM5NGhhbmRsZV90IGhhbmRsZSwgdW5zaWduZWQgaW50IGdlbmVyYXRpb24pCi17Ci0gIEdzdEhEVjEzOTRTcmMgKnNyYzsKLSAgZ2ludCBub2RlY291bnQ7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IGN1cnJlbnRfZGV2aWNlX2NoYW5nZTsKLSAgZ2ludCBpOwotCi0gIHNyYyA9IGdzdF9oZHYxMzk0c3JjX2Zyb21fcmF3MTM5NGhhbmRsZSAoaGFuZGxlKTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgImhhdmUgYnVzIHJlc2V0Iik7Ci0KLSAgLyogdXBkYXRlIGdlbmVyYXRpb24gLSB0b2xkIHRvIGRvIHNvIGJ5IGRvY3MgKi8KLSAgcmF3MTM5NF91cGRhdGVfZ2VuZXJhdGlvbiAoaGFuZGxlLCBnZW5lcmF0aW9uKTsKLSAgbm9kZWNvdW50ID0gcmF3MTM5NF9nZXRfbm9kZWNvdW50IChoYW5kbGUpOwotICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBvcnRpbmZvICovCi0KLSAgLyogY3VycmVudF9kZXZpY2VfY2hhbmdlIGlzIC0xIGlmIGNhbWVyYSBkaXNjb25uZWN0ZWQsIDAgaWYgb3RoZXIgZGV2aWNlCi0gICAqIGNvbm5lY3RlZCBvciAxIGlmIGNhbWVyYSBoYXMgbm93IGNvbm5lY3RlZCAqLwotICBjdXJyZW50X2RldmljZV9jaGFuZ2UgPSAtMTsKLSAgZm9yIChpID0gMDsgaSA8IG5vZGVjb3VudDsgaSsrKSB7Ci0gICAgaWYgKHNyYy0+Z3VpZCA9PSByb20xMzk0X2dldF9ndWlkIChoYW5kbGUsIGkpKSB7Ci0gICAgICAvKiBDYW1lcmEgaXMgd2l0aCB1cyAqLwotICAgICAgR1NUX0RFQlVHICgiQ2FtZXJhIGlzIHdpdGggdXMiKTsKLSAgICAgIGlmICghc3JjLT5jb25uZWN0ZWQpIHsKLSAgICAgICAgY3VycmVudF9kZXZpY2VfY2hhbmdlID0gMTsKLSAgICAgICAgc3JjLT5jb25uZWN0ZWQgPSBUUlVFOwotICAgICAgfSBlbHNlCi0gICAgICAgIGN1cnJlbnRfZGV2aWNlX2NoYW5nZSA9IDA7Ci0gICAgfQotICB9Ci0gIGlmIChzcmMtPmNvbm5lY3RlZCAmJiBjdXJyZW50X2RldmljZV9jaGFuZ2UgPT0gLTEpIHsKLSAgICBHU1RfREVCVUcgKCJDYW1lcmEgaGFzIGRpc2Nvbm5lY3RlZCIpOwotICAgIHNyYy0+Y29ubmVjdGVkID0gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoIXNyYy0+Y29ubmVjdGVkICYmIGN1cnJlbnRfZGV2aWNlX2NoYW5nZSA9PSAtMSkgewotICAgIEdTVF9ERUJVRyAoIkNhbWVyYSBpcyBzdGlsbCBub3Qgd2l0aCB1cyIpOwotICAgIGN1cnJlbnRfZGV2aWNlX2NoYW5nZSA9IDA7Ci0gIH0KLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoImllZWUxMzk0LWJ1cy1yZXNldCIsICJub2RlY291bnQiLCBHX1RZUEVfSU5ULAotICAgICAgbm9kZWNvdW50LCAiY3VycmVudC1kZXZpY2UtY2hhbmdlIiwgR19UWVBFX0lOVCwgY3VycmVudF9kZXZpY2VfY2hhbmdlLAotICAgICAgTlVMTCk7Ci0gIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVCAoc3JjKSwgc3RydWN0dXJlKTsKLSAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoc3JjKSwgbWVzc2FnZSk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfaGR2MTM5NHNyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBwc3JjLCBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RIRFYxMzk0U3JjICpkdjEzOTRzcmMgPSBHU1RfSERWMTM5NFNSQyAocHNyYyk7Ci0gIHN0cnVjdCBwb2xsZmQgcG9sbGZkc1syXTsKLQotICBwb2xsZmRzWzBdLmZkID0gcmF3MTM5NF9nZXRfZmQgKGR2MTM5NHNyYy0+aGFuZGxlKTsKLSAgcG9sbGZkc1swXS5ldmVudHMgPSBQT0xMSU4gfCBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExQUkk7Ci0gIHBvbGxmZHNbMV0uZmQgPSBSRUFEX1NPQ0tFVCAoZHYxMzk0c3JjKTsKLSAgcG9sbGZkc1sxXS5ldmVudHMgPSBQT0xMSU4gfCBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExQUkk7Ci0KLSAgLyogYWxsb2NhdGUgYSAyMDQ4IHNhbXBsZXMgYnVmZmVyICovCi0gIGR2MTM5NHNyYy0+b3V0ZGF0YSA9IGdfbWFsbG9jICgyMDQ4ICogMTg4KTsKLSAgZHYxMzk0c3JjLT5vdXRvZmZzZXQgPSAwOwotCi0gIEdTVF9ERUJVRyAoIkNyZWF0ZS4uLiIpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgaW50IHJlcyA9IHBvbGwgKHBvbGxmZHMsIDIsIC0xKTsKLQotICAgIEdTVF9MT0cgKCJyZXM6JWQiLCByZXMpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJlcyA8IDApKSB7Ci0gICAgICBpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ290byBlcnJvcl93aGlsZV9wb2xsaW5nOwotICAgIH0KLQotICAgIGlmIChHX1VOTElLRUxZIChwb2xsZmRzWzFdLnJldmVudHMpKSB7Ci0gICAgICBjaGFyIGNvbW1hbmQ7Ci0KLSAgICAgIGlmIChwb2xsZmRzWzFdLnJldmVudHMgJiBQT0xMSU4pCi0gICAgICAgIFJFQURfQ09NTUFORCAoZHYxMzk0c3JjLCBjb21tYW5kLCByZXMpOwotCi0gICAgICBnb3RvIHRvbGRfdG9fc3RvcDsKLSAgICB9IGVsc2UgaWYgKEdfTElLRUxZIChwb2xsZmRzWzBdLnJldmVudHMgJiBQT0xMSU4pKSB7Ci0gICAgICBpbnQgcHQ7Ci0KLSAgICAgIHB0ID0gZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZTsKLSAgICAgIC8qIHNob3VsZG4ndCBibG9jayBpbiB0aGVvcnkgKi8KLSAgICAgIEdTVF9MT0cgKCJJdGVyYXRpbmcgISAoJWQpIiwgZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZSk7Ci0gICAgICByYXcxMzk0X2xvb3BfaXRlcmF0ZSAoZHYxMzk0c3JjLT5oYW5kbGUpOwotICAgICAgR1NUX0xPRyAoIkFmdGVyIGl0ZXJhdGlvbiA6ICVkIChkaWZmOiVkKSIsCi0gICAgICAgICAgZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZSwgZHYxMzk0c3JjLT5mcmFtZV9zZXF1ZW5jZSAtIHB0KTsKLSAgICAgIGlmIChkdjEzOTRzcmMtPm91dG9mZnNldCkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgZ19hc3NlcnQgKGR2MTM5NHNyYy0+b3V0b2Zmc2V0KTsKLQotICBHU1RfTE9HICgiV2UgaGF2ZSBzb21lIGZyYW1lcyAoJXUgYnl0ZXMpIiwgKGd1aW50KSBkdjEzOTRzcmMtPm91dG9mZnNldCk7Ci0KLSAgLyogQ3JlYXRlIHRoZSBidWZmZXIgKi8KLSAgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGR2MTM5NHNyYy0+b3V0ZGF0YSwgZHYxMzk0c3JjLT5vdXRvZmZzZXQpOwotICBkdjEzOTRzcmMtPm91dGRhdGEgPSBOVUxMOwotICBkdjEzOTRzcmMtPm91dG9mZnNldCA9IDA7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1lcnJvcl93aGlsZV9wb2xsaW5nOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGR2MTM5NHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotdG9sZF90b19zdG9wOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHYxMzk0c3JjLCAidG9sZCB0byBzdG9wLCBzaHV0dGluZyBkb3duIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWdzdF9oZHYxMzk0c3JjX2Rpc2NvdmVyX2F2Y19ub2RlIChHc3RIRFYxMzk0U3JjICogc3JjKQotewotICBpbnQgbm9kZSA9IC0xOwotICBpbnQgaSwgaiA9IDA7Ci0gIGludCBtID0gc3JjLT5udW1fcG9ydHM7Ci0KLSAgaWYgKHNyYy0+cG9ydCA+PSAwKSB7Ci0gICAgLyogc2VhcmNoIG9uIGV4cGxpY2l0IHBvcnQgKi8KLSAgICBqID0gc3JjLT5wb3J0OwotICAgIG0gPSBqICsgMTsKLSAgfQotCi0gIC8qIGxvb3Agb3ZlciBhbGwgb3VyIHBvcnRzICovCi0gIGZvciAoOyBqIDwgbSAmJiBub2RlID09IC0xOyBqKyspIHsKLSAgICByYXcxMzk0aGFuZGxlX3QgaGFuZGxlOwotICAgIHN0cnVjdCByYXcxMzk0X3BvcnRpbmZvIHBpbmZbMTZdOwotCi0gICAgLyogb3BlbiB0aGUgcG9ydCAqLwotICAgIGhhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZSAoKTsKLSAgICBpZiAoIWhhbmRsZSkgewotICAgICAgR1NUX1dBUk5JTkcgKCJyYXcxMzk0IC0gZmFpbGVkIHRvIGdldCBoYW5kbGU6ICVzLlxuIiwgc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKHJhdzEzOTRfZ2V0X3BvcnRfaW5mbyAoaGFuZGxlLCBwaW5mLCAxNikgPCAwKSB7Ci0gICAgICBHU1RfV0FSTklORyAoInJhdzEzOTQgLSBmYWlsZWQgdG8gZ2V0IHBvcnQgaW5mbzogJXMuXG4iLAotICAgICAgICAgIHN0cmVycm9yIChlcnJubykpOwotICAgICAgZ290byBuZXh0OwotICAgIH0KLQotICAgIC8qIHRlbGwgcmF3MTM5NCB3aGljaCBob3N0IGFkYXB0ZXIgdG8gdXNlICovCi0gICAgaWYgKHJhdzEzOTRfc2V0X3BvcnQgKGhhbmRsZSwgaikgPCAwKSB7Ci0gICAgICBHU1RfV0FSTklORyAoInJhdzEzOTQgLSBmYWlsZWQgdG8gc2V0IHNldCBwb3J0OiAlcy5cbiIsIHN0cmVycm9yIChlcnJubykpOwotICAgICAgZ290byBuZXh0OwotICAgIH0KLQotICAgIC8qIG5vdyBsb29wIG92ZXIgYWxsIHRoZSBub2RlcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCByYXcxMzk0X2dldF9ub2RlY291bnQgKGhhbmRsZSk7IGkrKykgewotICAgICAgLyogYXJlIHdlIGxvb2tpbmcgZm9yIGFuIGV4cGxpY2l0IEdVSUQgPyAqLwotICAgICAgaWYgKHNyYy0+Z3VpZCAhPSAwKSB7Ci0gICAgICAgIGlmIChzcmMtPmd1aWQgPT0gcm9tMTM5NF9nZXRfZ3VpZCAoaGFuZGxlLCBpKSkgewotICAgICAgICAgIG5vZGUgPSBpOwotICAgICAgICAgIHNyYy0+cG9ydCA9IGo7Ci0gICAgICAgICAgZ19mcmVlIChzcmMtPnVyaSk7Ci0gICAgICAgICAgc3JjLT51cmkgPSBnX3N0cmR1cF9wcmludGYgKCJkdjovLyVkIiwgc3JjLT5wb3J0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcm9tMTM5NF9kaXJlY3Rvcnkgcm9tX2RpcjsKLQotICAgICAgICAvKiBzZWxlY3QgZmlyc3QgQVYvQyBUYXBlIFJlY29yZGVyIFBsYXllciBub2RlICovCi0gICAgICAgIGlmIChyb20xMzk0X2dldF9kaXJlY3RvcnkgKGhhbmRsZSwgaSwgJnJvbV9kaXIpIDwgMCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HICgiZXJyb3IgcmVhZGluZyBjb25maWcgcm9tIGRpcmVjdG9yeSBmb3Igbm9kZSAlZFxuIiwgaSk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChyb20xMzk0X2dldF9ub2RlX3R5cGUgKCZyb21fZGlyKSA9PSBST00xMzk0X05PREVfVFlQRV9BVkMpICYmCi0gICAgICAgICAgICBhdmMxMzk0X2NoZWNrX3N1YnVuaXRfdHlwZSAoaGFuZGxlLCBpLCBBVkMxMzk0X1NVQlVOSVRfVFlQRV9WQ1IpKSB7Ci0gICAgICAgICAgbm9kZSA9IGk7Ci0gICAgICAgICAgc3JjLT5wb3J0ID0gajsKLSAgICAgICAgICBzcmMtPmd1aWQgPSByb20xMzk0X2dldF9ndWlkIChoYW5kbGUsIGkpOwotICAgICAgICAgIGdfZnJlZSAoc3JjLT51cmkpOwotICAgICAgICAgIHNyYy0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgiZHY6Ly8lZCIsIHNyYy0+cG9ydCk7Ci0gICAgICAgICAgZ19mcmVlIChzcmMtPmRldmljZV9uYW1lKTsKLSAgICAgICAgICBzcmMtPmRldmljZV9uYW1lID0gZ19zdHJkdXAgKHJvbV9kaXIubGFiZWwpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJvbTEzOTRfZnJlZV9kaXJlY3RvcnkgKCZyb21fZGlyKTsKLSAgICAgIH0KLSAgICB9Ci0gIG5leHQ6Ci0gICAgcmF3MTM5NF9kZXN0cm95X2hhbmRsZSAoaGFuZGxlKTsKLSAgfQotICByZXR1cm4gbm9kZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaGR2MTM5NHNyY19zdGFydCAoR3N0QmFzZVNyYyAqIGJzcmMpCi17Ci0gIEdzdEhEVjEzOTRTcmMgKnNyYyA9IEdTVF9IRFYxMzk0U1JDIChic3JjKTsKLSAgaW50IGNvbnRyb2xfc29ja1syXTsKLQotICBzcmMtPmNvbm5lY3RlZCA9IEZBTFNFOwotCi0gIGlmIChzb2NrZXRwYWlyIChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgY29udHJvbF9zb2NrKSA8IDApCi0gICAgZ290byBzb2NrZXRfcGFpcjsKLQotICBSRUFEX1NPQ0tFVCAoc3JjKSA9IGNvbnRyb2xfc29ja1swXTsKLSAgV1JJVEVfU09DS0VUIChzcmMpID0gY29udHJvbF9zb2NrWzFdOwotCi0gIGlmIChmY250bCAoUkVBRF9TT0NLRVQgKHNyYyksIEZfU0VURkwsIE9fTk9OQkxPQ0spIDwgMCkKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJmYWlsZWQgdG8gbWFrZSByZWFkIHNvY2tldCBub24tYmxvY2tpbmc6ICVzIiwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgaWYgKGZjbnRsIChXUklURV9TT0NLRVQgKHNyYyksIEZfU0VURkwsIE9fTk9OQkxPQ0spIDwgMCkKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJmYWlsZWQgdG8gbWFrZSB3cml0ZSBzb2NrZXQgbm9uLWJsb2NraW5nOiAlcyIsCi0gICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0KLSAgc3JjLT5oYW5kbGUgPSByYXcxMzk0X25ld19oYW5kbGUgKCk7Ci0KLSAgaWYgKCFzcmMtPmhhbmRsZSkgewotICAgIGlmIChlcnJubyA9PSBFQUNDRVMpCi0gICAgICBnb3RvIHBlcm1pc3Npb25fZGVuaWVkOwotICAgIGVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkKLSAgICAgIGdvdG8gbm90X2ZvdW5kOwotICAgIGVsc2UKLSAgICAgIGdvdG8gbm9faGFuZGxlOwotICB9Ci0KLSAgc3JjLT5udW1fcG9ydHMgPSByYXcxMzk0X2dldF9wb3J0X2luZm8gKHNyYy0+aGFuZGxlLCBzcmMtPnBpbmZvLCAxNik7Ci0KLSAgaWYgKHNyYy0+bnVtX3BvcnRzID09IDApCi0gICAgZ290byBub19wb3J0czsKLQotICBpZiAoc3JjLT51c2VfYXZjIHx8IHNyYy0+cG9ydCA9PSAtMSkKLSAgICBzcmMtPmF2Y19ub2RlID0gZ3N0X2hkdjEzOTRzcmNfZGlzY292ZXJfYXZjX25vZGUgKHNyYyk7Ci0KLSAgLyogbGV0cyBkZXN0cm95IGhhbmRsZSBhbmQgY3JlYXRlIG9uZSBvbiBwb3J0Ci0gICAgIHRoaXMgaXMgbW9yZSByZWxpYWJsZSB0aGFuIHNldHRpbmcgcG9ydCBvbgotICAgICB0aGUgZXhpc3RpbmcgaGFuZGxlICovCi0gIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKHNyYy0+aGFuZGxlKTsKLSAgc3JjLT5oYW5kbGUgPSByYXcxMzk0X25ld19oYW5kbGVfb25fcG9ydCAoc3JjLT5wb3J0KTsKLSAgaWYgKCFzcmMtPmhhbmRsZSkKLSAgICBnb3RvIGNhbm5vdF9zZXRfcG9ydDsKLQotICByYXcxMzk0X3NldF91c2VyZGF0YSAoc3JjLT5oYW5kbGUsIHNyYyk7Ci0gIHJhdzEzOTRfc2V0X2J1c19yZXNldF9oYW5kbGVyIChzcmMtPmhhbmRsZSwgZ3N0X2hkdjEzOTRzcmNfYnVzX3Jlc2V0KTsKLQotICB7Ci0gICAgbm9kZWlkX3QgbV9ub2RlID0gKHNyYy0+YXZjX25vZGUgfCAweGZmYzApOwotICAgIGludCBtX2NoYW5uZWwgPSAtMTsKLSAgICBpbnQgbV9iYW5kd2lkdGggPSAwOwotICAgIGludCBtX291dHB1dFBvcnQgPSAtMTsKLSAgICBpbnQgbV9pbnB1dFBvcnQgPSAtMTsKLQotICAgIG1fY2hhbm5lbCA9IGllYzYxODgzX2NtcF9jb25uZWN0IChzcmMtPmhhbmRsZSwgbV9ub2RlLCAmbV9vdXRwdXRQb3J0LAotICAgICAgICByYXcxMzk0X2dldF9sb2NhbF9pZCAoc3JjLT5oYW5kbGUpLCAmbV9pbnB1dFBvcnQsICZtX2JhbmR3aWR0aCk7Ci0KLSAgICBpZiAobV9jaGFubmVsID49IDApIHsKLSAgICAgIHNyYy0+Y2hhbm5lbCA9IG1fY2hhbm5lbDsKLSAgICB9Ci0gIH0KLQotCi0gIGlmICgoc3JjLT5pZWM2MTg4M21wZWcyID0KLSAgICAgICAgICBpZWM2MTg4M19tcGVnMl9yZWN2X2luaXQgKHNyYy0+aGFuZGxlLAotICAgICAgICAgICAgICBnc3RfaGR2MTM5NHNyY19pZWM2MTg4M19yZWNlaXZlLCBzcmMpKSA9PSBOVUxMKQotICAgIGdvdG8gY2Fubm90X2luaXRpYWxpc2VfZHY7Ci0KLSNpZiAwCi0gIHJhdzEzOTRfc2V0X2lzb19oYW5kbGVyIChzcmMtPmhhbmRsZSwgc3JjLT5jaGFubmVsLAotICAgICAgZ3N0X2hkdjEzOTRzcmNfaXNvX3JlY2VpdmUpOwotI2VuZGlmCi0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3VjY2Vzc2Z1bGx5IG9wZW5lZCB1cCAxMzk0IGNvbm5lY3Rpb24iKTsKLSAgc3JjLT5jb25uZWN0ZWQgPSBUUlVFOwotCi0gIGlmIChpZWM2MTg4M19tcGVnMl9yZWN2X3N0YXJ0IChzcmMtPmllYzYxODgzbXBlZzIsIHNyYy0+Y2hhbm5lbCkgIT0gMCkKLSAgICBnb3RvIGNhbm5vdF9zdGFydDsKLSNpZiAwCi0gIGlmIChyYXcxMzk0X3N0YXJ0X2lzb19yY3YgKHNyYy0+aGFuZGxlLCBzcmMtPmNoYW5uZWwpIDwgMCkKLSAgICBnb3RvIGNhbm5vdF9zdGFydDsKLSNlbmRpZgotCi0gIGlmIChzcmMtPnVzZV9hdmMpIHsKLSAgICByYXcxMzk0aGFuZGxlX3QgYXZjX2hhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZV9vbl9wb3J0IChzcmMtPnBvcnQpOwotCi0gICAgR1NUX0xPRyAoIldlIGhhdmUgYW4gYXZjX2hhbmRsZSIpOwotCi0gICAgLyogc3RhcnQgdGhlIFZDUiAqLwotICAgIGlmIChhdmNfaGFuZGxlKSB7Ci0gICAgICBpZiAoIWF2YzEzOTRfdmNyX2lzX3JlY29yZGluZyAoYXZjX2hhbmRsZSwgc3JjLT5hdmNfbm9kZSkKLSAgICAgICAgICAmJiBhdmMxMzk0X3Zjcl9pc19wbGF5aW5nIChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKQotICAgICAgICAgICE9IEFWQzEzOTRfVkNSX09QRVJBTkRfUExBWV9GT1JXQVJEKSB7Ci0gICAgICAgIEdTVF9MT0cgKCJDYWxsaW5nIGF2YzEzOTRfdmNyX3BsYXkoKSIpOwotICAgICAgICBhdmMxMzk0X3Zjcl9wbGF5IChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKTsKLSAgICAgIH0KLSAgICAgIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKGF2Y19oYW5kbGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIlN0YXJ0aW5nIFZDUiB2aWEgYXZjMTM5NCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi1zb2NrZXRfcGFpcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQURfV1JJVEUsIChOVUxMKSwKLSAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1wZXJtaXNzaW9uX2RlbmllZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChOVUxMKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub3RfZm91bmQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELCAoTlVMTCksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9faGFuZGxlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKE5VTEwpLAotICAgICAgICAoImNhbid0IGdldCByYXcxMzk0IGhhbmRsZSAoJXMpIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19wb3J0czoKLSAgewotICAgIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKHNyYy0+aGFuZGxlKTsKLSAgICBzcmMtPmhhbmRsZSA9IE5VTEw7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKE5VTEwpLAotICAgICAgICAoIm5vIHBvcnRzIGF2YWlsYWJsZSBmb3IgcmF3MTM5NCIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNhbm5vdF9zZXRfcG9ydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoImNhbid0IHNldCAxMzk0IHBvcnQgJWQiLCBzcmMtPnBvcnQpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNhbm5vdF9zdGFydDoKLSAgewotICAgIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKHNyYy0+aGFuZGxlKTsKLSAgICBzcmMtPmhhbmRsZSA9IE5VTEw7Ci0gICAgaWVjNjE4ODNfbXBlZzJfY2xvc2UgKHNyYy0+aWVjNjE4ODNtcGVnMik7Ci0gICAgc3JjLT5pZWM2MTg4M21wZWcyID0gTlVMTDsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoImNhbid0IHN0YXJ0IDEzOTQgaXNvIHJlY2VpdmUiKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jYW5ub3RfaW5pdGlhbGlzZV9kdjoKLSAgewotICAgIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKHNyYy0+aGFuZGxlKTsKLSAgICBzcmMtPmhhbmRsZSA9IE5VTEw7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJjYW4ndCBpbml0aWFsaXNlIGllYzYxODgzIGhkdiIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaGR2MTM5NHNyY19zdG9wIChHc3RCYXNlU3JjICogYnNyYykKLXsKLSAgR3N0SERWMTM5NFNyYyAqc3JjID0gR1NUX0hEVjEzOTRTUkMgKGJzcmMpOwotCi0gIGNsb3NlIChSRUFEX1NPQ0tFVCAoc3JjKSk7Ci0gIGNsb3NlIChXUklURV9TT0NLRVQgKHNyYykpOwotICBSRUFEX1NPQ0tFVCAoc3JjKSA9IC0xOwotICBXUklURV9TT0NLRVQgKHNyYykgPSAtMTsKLQotICBpZWM2MTg4M19tcGVnMl9jbG9zZSAoc3JjLT5pZWM2MTg4M21wZWcyKTsKLSNpZiAwCi0gIHJhdzEzOTRfc3RvcF9pc29fcmN2IChzcmMtPmhhbmRsZSwgc3JjLT5jaGFubmVsKTsKLSNlbmRpZgotCi0gIGlmIChzcmMtPnVzZV9hdmMpIHsKLSAgICByYXcxMzk0aGFuZGxlX3QgYXZjX2hhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZV9vbl9wb3J0IChzcmMtPnBvcnQpOwotCi0gICAgLyogcGF1c2UgYW5kIHN0b3AgdGhlIFZDUiAqLwotICAgIGlmIChhdmNfaGFuZGxlKSB7Ci0gICAgICBpZiAoIWF2YzEzOTRfdmNyX2lzX3JlY29yZGluZyAoYXZjX2hhbmRsZSwgc3JjLT5hdmNfbm9kZSkKLSAgICAgICAgICAmJiAoYXZjMTM5NF92Y3JfaXNfcGxheWluZyAoYXZjX2hhbmRsZSwgc3JjLT5hdmNfbm9kZSkKLSAgICAgICAgICAgICAgIT0gQVZDMTM5NF9WQ1JfT1BFUkFORF9QTEFZX0ZPUldBUkRfUEFVU0UpKQotICAgICAgICBhdmMxMzk0X3Zjcl9wYXVzZSAoYXZjX2hhbmRsZSwgc3JjLT5hdmNfbm9kZSk7Ci0gICAgICBhdmMxMzk0X3Zjcl9zdG9wIChhdmNfaGFuZGxlLCBzcmMtPmF2Y19ub2RlKTsKLSAgICAgIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKGF2Y19oYW5kbGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIlN0YXJ0aW5nIFZDUiB2aWEgYXZjMTM5NCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIH0KLSAgfQotCi0gIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKHNyYy0+aGFuZGxlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaGR2MTM5NHNyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3RIRFYxMzk0U3JjICpzcmMgPSBHU1RfSERWMTM5NFNSQyAoYnNyYyk7Ci0KLSAgU0VORF9DT01NQU5EIChzcmMsIENPTlRST0xfU1RPUCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGR2MTM5NHNyY191cGRhdGVfZGV2aWNlX25hbWUgKEdzdEhEVjEzOTRTcmMgKiBzcmMpCi17Ci0gIHJhdzEzOTRoYW5kbGVfdCBoYW5kbGU7Ci0gIGdpbnQgcG9ydGNvdW50LCBwb3J0LCBub2RlY291bnQsIG5vZGU7Ci0gIHJvbTEzOTRfZGlyZWN0b3J5IGRpcmVjdG9yeTsKLQotICBnX2ZyZWUgKHNyYy0+ZGV2aWNlX25hbWUpOwotICBzcmMtPmRldmljZV9uYW1lID0gTlVMTDsKLQotICBHU1RfTE9HX09CSkVDVCAoc3JjLCAidXBkYXRpbmcgZGV2aWNlIG5hbWUgZm9yIGN1cnJlbnQgR1VJRCIpOwotCi0gIGhhbmRsZSA9IHJhdzEzOTRfbmV3X2hhbmRsZSAoKTsKLQotICBpZiAoaGFuZGxlID09IE5VTEwpCi0gICAgZ290byBnZXRoYW5kbGVfZmFpbGVkOwotCi0gIHBvcnRjb3VudCA9IHJhdzEzOTRfZ2V0X3BvcnRfaW5mbyAoaGFuZGxlLCBOVUxMLCAwKTsKLSAgZm9yIChwb3J0ID0gMDsgcG9ydCA8IHBvcnRjb3VudDsgcG9ydCsrKSB7Ci0gICAgaWYgKHJhdzEzOTRfc2V0X3BvcnQgKGhhbmRsZSwgcG9ydCkgPj0gMCkgewotICAgICAgbm9kZWNvdW50ID0gcmF3MTM5NF9nZXRfbm9kZWNvdW50IChoYW5kbGUpOwotICAgICAgZm9yIChub2RlID0gMDsgbm9kZSA8IG5vZGVjb3VudDsgbm9kZSsrKSB7Ci0gICAgICAgIGlmIChzcmMtPmd1aWQgPT0gcm9tMTM5NF9nZXRfZ3VpZCAoaGFuZGxlLCBub2RlKSkgewotICAgICAgICAgIGlmIChyb20xMzk0X2dldF9kaXJlY3RvcnkgKGhhbmRsZSwgbm9kZSwgJmRpcmVjdG9yeSkgPj0gMCkgewotICAgICAgICAgICAgZ19mcmVlIChzcmMtPmRldmljZV9uYW1lKTsKLSAgICAgICAgICAgIHNyYy0+ZGV2aWNlX25hbWUgPSBnX3N0cmR1cCAoZGlyZWN0b3J5LmxhYmVsKTsKLSAgICAgICAgICAgIHJvbTEzOTRfZnJlZV9kaXJlY3RvcnkgKCZkaXJlY3RvcnkpOwotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklORyAoImVycm9yIHJlYWRpbmcgcm9tIGRpcmVjdG9yeSBmb3Igbm9kZSAlZCIsIG5vZGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHNyYy0+ZGV2aWNlX25hbWUgPSBnX3N0cmR1cCAoIlVua25vd24iKTsgICAgICAvKiBGSVhNRTogdHJhbnNsYXRlPyAqLwotCi1kb25lOgotCi0gIHJhdzEzOTRfZGVzdHJveV9oYW5kbGUgKGhhbmRsZSk7Ci0gIHJldHVybjsKLQotLyogRVJST1JTICovCi1nZXRoYW5kbGVfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgdG8gZ2V0IHJhdzEzOTQgaGFuZGxlOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgc3JjLT5kZXZpY2VfbmFtZSA9IGdfc3RyZHVwICgiVW5rbm93biIpOyAgICAvKiBGSVhNRTogdHJhbnNsYXRlPyAqLwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKioqIEdTVFVSSUhBTkRMRVIgSU5URVJGQUNFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBHc3RVUklUeXBlCi1nc3RfaGR2MTM5NHNyY191cmlfZ2V0X3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIHJldHVybiBHU1RfVVJJX1NSQzsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICpjb25zdCAqCi1nc3RfaGR2MTM5NHNyY191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKLXsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpwcm90b2NvbHNbXSA9IHsgKGNoYXIgKikgImhkdiIsIE5VTEwgfTsKLQotICByZXR1cm4gcHJvdG9jb2xzOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X2hkdjEzOTRzcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RIRFYxMzk0U3JjICpnc3RfaGR2MTM5NHNyYyA9IEdTVF9IRFYxMzk0U1JDIChoYW5kbGVyKTsKLQotICByZXR1cm4gZ3N0X2hkdjEzOTRzcmMtPnVyaTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaGR2MTM5NHNyY191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpLAotICAgIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ2NoYXIgKnByb3RvY29sLCAqbG9jYXRpb247Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIEdzdEhEVjEzOTRTcmMgKmdzdF9oZHYxMzk0c3JjID0gR1NUX0hEVjEzOTRTUkMgKGhhbmRsZXIpOwotCi0gIHByb3RvY29sID0gZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKHVyaSk7Ci0gIGlmIChzdHJjbXAgKHByb3RvY29sLCAiaGR2IikgIT0gMCkgewotICAgIGdfZnJlZSAocHJvdG9jb2wpOwotICAgIGdfc2V0X2Vycm9yIChlcnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLAotICAgICAgICAiSW52YWxpZCBIRFYgVVJJIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGdfZnJlZSAocHJvdG9jb2wpOwotCi0gIGxvY2F0aW9uID0gZ3N0X3VyaV9nZXRfbG9jYXRpb24gKHVyaSk7Ci0gIGlmIChsb2NhdGlvbiAmJiAqbG9jYXRpb24gIT0gJ1wwJykKLSAgICBnc3RfaGR2MTM5NHNyYy0+cG9ydCA9IHN0cnRvbCAobG9jYXRpb24sIE5VTEwsIDEwKTsKLSAgZWxzZQotICAgIGdzdF9oZHYxMzk0c3JjLT5wb3J0ID0gREVGQVVMVF9QT1JUOwotICBnX2ZyZWUgKGxvY2F0aW9uKTsKLSAgZ19mcmVlIChnc3RfaGR2MTM5NHNyYy0+dXJpKTsKLSAgZ3N0X2hkdjEzOTRzcmMtPnVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoImhkdjovLyVkIiwgZ3N0X2hkdjEzOTRzcmMtPnBvcnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaGR2MTM5NHNyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X2hkdjEzOTRzcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9oZHYxMzk0c3JjX3VyaV9nZXRfcHJvdG9jb2xzOwotICBpZmFjZS0+Z2V0X3VyaSA9IGdzdF9oZHYxMzk0c3JjX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9oZHYxMzk0c3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5oIGIvZXh0L3JhdzEzOTQvZ3N0aGR2MTM5NHNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWU4NjNjLi4wMDAwMDAwCi0tLSBhL2V4dC9yYXcxMzk0L2dzdGhkdjEzOTRzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfR1NUSERWMTM5NF9IX18KLSNkZWZpbmUgX19HU1RfR1NUSERWMTM5NF9IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHB1c2hzcmMuaD4KLQotI2luY2x1ZGUgPGxpYnJhdzEzOTQvcmF3MTM5NC5oPgotI2lmZGVmIEhBVkVfTElCSUVDNjE4ODMKLSNpbmNsdWRlIDxsaWJpZWM2MTg4My9pZWM2MTg4My5oPgotI2VuZGlmCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9IRFYxMzk0U1JDIFwKLSAgKGdzdF9oZHYxMzk0c3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9IRFYxMzk0U1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSERWMTM5NFNSQyxHc3RIRFYxMzk0U3JjKSkKLSNkZWZpbmUgR1NUX0hEVjEzOTRTUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfSERWMTM5NFNSQyxHc3RIRFYxMzk0U3JjQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSERWMTM5NFNSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0hEVjEzOTRTUkMpKQotI2RlZmluZSBHU1RfSVNfSERWMTM5NFNSQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9IRFYxMzk0U1JDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEhEVjEzOTRTcmMgR3N0SERWMTM5NFNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RIRFYxMzk0U3JjQ2xhc3MgR3N0SERWMTM5NFNyY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdEhEVjEzOTRTcmMgewotICBHc3RQdXNoU3JjIGVsZW1lbnQ7Ci0KLSAgZ2ludCBudW1fcG9ydHM7Ci0gIGdpbnQgcG9ydDsKLSAgZ2ludCBjaGFubmVsOwotICBvY3RsZXRfdCBndWlkOwotICBnaW50IGF2Y19ub2RlOwotICBnYm9vbGVhbiB1c2VfYXZjOwotCi0gIHN0cnVjdCByYXcxMzk0X3BvcnRpbmZvIHBpbmZvWzE2XTsKLSAgcmF3MTM5NGhhbmRsZV90IGhhbmRsZTsKLQotICBncG9pbnRlciBvdXRkYXRhOwotICBnc2l6ZSBvdXRvZmZzZXQ7Ci0gIGd1aW50IGZyYW1lX3NpemU7Ci0gIGd1aW50IGZyYW1lX3NlcXVlbmNlOwotCi0gIGludCBjb250cm9sX3NvY2tbMl07Ci0KLSAgZ2NoYXIgKnVyaTsKLQotICBnY2hhciAqZGV2aWNlX25hbWU7Ci0KLSAgZ2Jvb2xlYW4gY29ubmVjdGVkOwotICBpZWM2MTg4M19tcGVnMl90IGllYzYxODgzbXBlZzI7Ci19OwotCi1zdHJ1Y3QgX0dzdEhEVjEzOTRTcmNDbGFzcyB7Ci0gIEdzdFB1c2hTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfaGR2MTM5NHNyY19nZXRfdHlwZSh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0dTVDEzOTRfSF9fICovCmRpZmYgLS1naXQgYS9leHQvc2hvdXQyL01ha2VmaWxlLmFtIGIvZXh0L3Nob3V0Mi9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlMTJjOS4uMDAwMDAwMAotLS0gYS9leHQvc2hvdXQyL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RzaG91dDIubGEKLQotbGliZ3N0c2hvdXQyX2xhX1NPVVJDRVMgPSBnc3RzaG91dDIuYyAKLWxpYmdzdHNob3V0Ml9sYV9DRkxBR1MgPSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKFNIT1VUMl9DRkxBR1MpCi1saWJnc3RzaG91dDJfbGFfTElCQUREID0gJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKFNIT1VUMl9MSUJTKQotbGliZ3N0c2hvdXQyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHNob3V0Ml9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHNob3V0Mi5oCmRpZmYgLS1naXQgYS9leHQvc2hvdXQyL01ha2VmaWxlLmluIGIvZXh0L3Nob3V0Mi9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjNzUxZS4uMDAwMDAwMAotLS0gYS9leHQvc2hvdXQyL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTA5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGV4dC9zaG91dDIKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RzaG91dDJfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RzaG91dDJfbGFfT0JKRUNUUyA9IGxpYmdzdHNob3V0Ml9sYS1nc3RzaG91dDIubG8KLWxpYmdzdHNob3V0Ml9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RzaG91dDJfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHNob3V0Ml9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdHNob3V0Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHNob3V0Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RzaG91dDJfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0c2hvdXQyX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHNob3V0Ml9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RzaG91dDIubGEKLWxpYmdzdHNob3V0Ml9sYV9TT1VSQ0VTID0gZ3N0c2hvdXQyLmMgCi1saWJnc3RzaG91dDJfbGFfQ0ZMQUdTID0gJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChTSE9VVDJfQ0ZMQUdTKQotbGliZ3N0c2hvdXQyX2xhX0xJQkFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChTSE9VVDJfTElCUykKLWxpYmdzdHNob3V0Ml9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RzaG91dDJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0c2hvdXQyLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGV4dC9zaG91dDIvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3Nob3V0Mi9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHNob3V0Mi5sYTogJChsaWJnc3RzaG91dDJfbGFfT0JKRUNUUykgJChsaWJnc3RzaG91dDJfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHNob3V0Ml9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0c2hvdXQyX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RzaG91dDJfbGFfT0JKRUNUUykgJChsaWJnc3RzaG91dDJfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzaG91dDJfbGEtZ3N0c2hvdXQyLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RzaG91dDJfbGEtZ3N0c2hvdXQyLmxvOiBnc3RzaG91dDIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNob3V0Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzaG91dDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHNob3V0Ml9sYS1nc3RzaG91dDIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNob3V0Ml9sYS1nc3RzaG91dDIuVHBvIC1jIC1vIGxpYmdzdHNob3V0Ml9sYS1nc3RzaG91dDIubG8gYHRlc3QgLWYgJ2dzdHNob3V0Mi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzaG91dDIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c2hvdXQyX2xhLWdzdHNob3V0Mi5UcG8gJChERVBESVIpL2xpYmdzdHNob3V0Ml9sYS1nc3RzaG91dDIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c2hvdXQyLmMnIG9iamVjdD0nbGliZ3N0c2hvdXQyX2xhLWdzdHNob3V0Mi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNob3V0Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzaG91dDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c2hvdXQyX2xhLWdzdHNob3V0Mi5sbyBgdGVzdCAtZiAnZ3N0c2hvdXQyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNob3V0Mi5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4dC9zaG91dDIvZ3N0c2hvdXQyLmMgYi9leHQvc2hvdXQyL2dzdHNob3V0Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTU4ZTM0Li4wMDAwMDAwCi0tLSBhL2V4dC9zaG91dDIvZ3N0c2hvdXQyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgPDIwMTI+IFJhbHBoIEdpbGVzIDxnaWxlc0Btb3ppbGxhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zaG91dDJzZW5kCi0gKgotICogc2hvdXQyc2VuZCBwdXNoZXMgYSBtZWRpYSBzdHJlYW0gdG8gYW4gSWNlY2FzdCBzZXJ2ZXIKLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdXJpZGVjb2RlYmluIHVyaT1maWxlOi8vL3BhdGgvdG8vYXVkaW9maWxlICEgYXVkaW9jb252ZXJ0ICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgc2hvdXQyc2VuZCBtb3VudD0vc3RyZWFtLm9nZyBwb3J0PTgwMDAgdXNlcm5hbWU9c291cmNlIHBhc3N3b3JkPXNvbWVwYXNzd29yZCBpcD1zZXJ2ZXJfSVBfYWRkcmVzc19vcl9ob3N0bmFtZQotICogXXwgVGhpcyBwaXBlbGluZSBkZW11eGVzLCBkZWNvZGVzLCByZS1lbmNvZGVzIGFuZCByZS1tdXhlcyBhbiBhdWRpbwotICogbWVkaWEgZmlsZSBpbnRvIG9nZ3ZvcmJpcyBhbmQgc2VuZHMgdGhlIHJlc3VsdGluZyBzdHJlYW0gdG8gYW4gSWNlY2FzdAotICogc2VydmVyLiBQcm9wZXJ0aWVzIG1vdW50LCBwb3J0LCB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIGFsbCBzZXJ2ZXItY29uZmlnCi0gKiBkZXBlbmRlbnQuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHNob3V0Mi5oIgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChzaG91dDJfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc2hvdXQyX2RlYnVnCi0KLQotZW51bQotewotICBTSUdOQUxfQ09OTkVDVElPTl9QUk9CTEVNLCAgICAvKiBGSVhNRSAyLjA6IHJlbW92ZSB0aGlzICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIEFSR18wLAotICBBUkdfSVAsICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgSVAgYWRkcmVzcyBvciBob3N0bmFtZSBvZiB0aGUgc2VydmVyICovCi0gIEFSR19QT1JULCAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBlbmNvZGVyIHBvcnQgbnVtYmVyIG9uIHRoZSBzZXJ2ZXIgKi8KLSAgQVJHX1BBU1NXT1JELCAgICAgICAgICAgICAgICAgLyogdGhlIGVuY29kZXIgcGFzc3dvcmQgb24gdGhlIHNlcnZlciAqLwotICBBUkdfVVNFUk5BTUUsICAgICAgICAgICAgICAgICAvKiB0aGUgZW5jb2RlciB1c2VybmFtZSBvbiB0aGUgc2VydmVyICovCi0gIEFSR19QVUJMSUMsICAgICAgICAgICAgICAgICAgIC8qIGlzIHRoaXMgc3RyZWFtIHB1YmxpYz8gKi8KLSAgQVJHX1NUUkVBTU5BTUUsICAgICAgICAgICAgICAgLyogTmFtZSBvZiB0aGUgc3RyZWFtICovCi0gIEFSR19ERVNDUklQVElPTiwgICAgICAgICAgICAgIC8qIERlc2NyaXB0aW9uIG9mIHRoZSBzdHJlYW0gKi8KLSAgQVJHX0dFTlJFLCAgICAgICAgICAgICAgICAgICAgLyogR2VucmUgb2YgdGhlIHN0cmVhbSAqLwotCi0gIEFSR19QUk9UT0NPTCwgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHRvIGNvbm5lY3Qgd2l0aCAqLwotCi0gIEFSR19NT1VOVCwgICAgICAgICAgICAgICAgICAgIC8qIG1vdW50cG9pbnQgb2Ygc3RyZWFtIChpY2VjYXN0IG9ubHkpICovCi0gIEFSR19VUkwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBzdHJlYW0ncyBob21lcGFnZSBVUkwgKi8KLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9JUCAgICAgICAgICAgIjEyNy4wLjAuMSIKLSNkZWZpbmUgREVGQVVMVF9QT1JUICAgICAgICAgODAwMAotI2RlZmluZSBERUZBVUxUX1BBU1NXT1JEICAgICAiaGFja21lIgotI2RlZmluZSBERUZBVUxUX1VTRVJOQU1FICAgICAic291cmNlIgotI2RlZmluZSBERUZBVUxUX1BVQkxJQyAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9TVFJFQU1OQU1FICAgIiIKLSNkZWZpbmUgREVGQVVMVF9ERVNDUklQVElPTiAgIiIKLSNkZWZpbmUgREVGQVVMVF9HRU5SRSAgICAgICAgIiIKLSNkZWZpbmUgREVGQVVMVF9NT1VOVCAgICAgICAgIiIKLSNkZWZpbmUgREVGQVVMVF9VUkwgICAgICAgICAgIiIKLSNkZWZpbmUgREVGQVVMVF9QUk9UT0NPTCAgICAgU0hPVVQyU0VORF9QUk9UT0NPTF9IVFRQCi0KLSNpZmRlZiBTSE9VVF9GT1JNQVRfV0VCTQotI2RlZmluZSBXRUJNX0NBUFMgIjsgdmlkZW8vd2VibTsgYXVkaW8vd2VibSIKLSNlbHNlCi0jZGVmaW5lIFdFQk1fQ0FQUyAiIgotI2VuZGlmCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL29nZzsgYXVkaW8vb2dnOyB2aWRlby9vZ2c7ICIKLSAgICAgICAgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uID0gKGludCkgMSwgbGF5ZXIgPSAoaW50KSBbIDEsIDMgXSIgV0VCTV9DQVBTKSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9zaG91dDJzZW5kX2ZpbmFsaXplIChHc3RTaG91dDJzZW5kICogc2hvdXQyc2VuZCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2hvdXQyc2VuZF9ldmVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2hvdXQyc2VuZF91bmxvY2sgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9zaG91dDJzZW5kX3VubG9ja19zdG9wIChHc3RCYXNlU2luayAqIGJhc2VzaW5rKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9zaG91dDJzZW5kX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3Nob3V0MnNlbmRfc3RhcnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9zaG91dDJzZW5kX3N0b3AgKEdzdEJhc2VTaW5rICogYmFzZXNpbmspOwotCi1zdGF0aWMgdm9pZCBnc3Rfc2hvdXQyc2VuZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc2hvdXQyc2VuZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2hvdXQyc2VuZF9zZXRjYXBzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RDYXBzICogY2Fwcyk7Ci0KLXN0YXRpYyBndWludCBnc3Rfc2hvdXQyc2VuZF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi0jZGVmaW5lIEdTVF9UWVBFX1NIT1VUX1BST1RPQ09MIChnc3Rfc2hvdXQyc2VuZF9wcm90b2NvbF9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3Rfc2hvdXQyc2VuZF9wcm90b2NvbF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHNob3V0MnNlbmRfcHJvdG9jb2xfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHNob3V0MnNlbmRfcHJvdG9jb2xbXSA9IHsKLSAgICB7U0hPVVQyU0VORF9QUk9UT0NPTF9YQVVESU9DQVNULAotICAgICAgICAiWGF1ZGlvY2FzdCBQcm90b2NvbCAoaWNlY2FzdCAxLjMueCkiLCAieGF1ZGlvY2FzdCJ9LAotICAgIHtTSE9VVDJTRU5EX1BST1RPQ09MX0lDWSwgIkljeSBQcm90b2NvbCAoU2hvdXRDYXN0KSIsICJpY3kifSwKLSAgICB7U0hPVVQyU0VORF9QUk9UT0NPTF9IVFRQLCAiSHR0cCBQcm90b2NvbCAoaWNlY2FzdCAyLngpIiwgImh0dHAifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFzaG91dDJzZW5kX3Byb3RvY29sX3R5cGUpIHsKLSAgICBzaG91dDJzZW5kX3Byb3RvY29sX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0U2hvdXQyU2VuZFByb3RvY29sIiwgc2hvdXQyc2VuZF9wcm90b2NvbCk7Ci0gIH0KLQotCi0gIHJldHVybiBzaG91dDJzZW5kX3Byb3RvY29sX3R5cGU7Ci19Ci0KLSNkZWZpbmUgZ3N0X3Nob3V0MnNlbmRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFNob3V0MnNlbmQsIGdzdF9zaG91dDJzZW5kLCBHU1RfVFlQRV9CQVNFX1NJTkssCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UQUdfU0VUVEVSLCBOVUxMKSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hvdXQyc2VuZF9jbGFzc19pbml0IChHc3RTaG91dDJzZW5kQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmdzdGJhc2VzaW5rX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MgPSAoR3N0QmFzZVNpbmtDbGFzcyAqKSBrbGFzczsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc2hvdXQyc2VuZF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9zaG91dDJzZW5kX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSAoR09iamVjdEZpbmFsaXplRnVuYykgZ3N0X3Nob3V0MnNlbmRfZmluYWxpemU7Ci0KLSAgLyogRklYTUU6IDIuMCBTaG91bGQgcHJvYmFibHkgY2hhbmdlIHRoaXMgcHJvcCBuYW1lIHRvICJzZXJ2ZXIiICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIEFSR19JUCwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJpcCIsICJpcCIsICJJUCBhZGRyZXNzIG9yIGhvc3RuYW1lIiwgREVGQVVMVF9JUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX1BPUlQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicG9ydCIsICJwb3J0IiwgInBvcnQiLCAxLCBHX01BWFVTSE9SVCwgREVGQVVMVF9QT1JULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIEFSR19QQVNTV09SRCwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwYXNzd29yZCIsICJwYXNzd29yZCIsICJwYXNzd29yZCIsIERFRkFVTFRfUEFTU1dPUkQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX1VTRVJOQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVzZXJuYW1lIiwgInVzZXJuYW1lIiwgInVzZXJuYW1lIiwgREVGQVVMVF9VU0VSTkFNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKiBtZXRhZGF0YSAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBBUkdfUFVCTElDLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJwdWJsaWMiLCAicHVibGljIiwKLSAgICAgICAgICAiSWYgdGhlIHN0cmVhbSBzaG91bGQgYmUgbGlzdGVkIG9uIHRoZSBzZXJ2ZXIncyBzdHJlYW0gZGlyZWN0b3J5IiwKLSAgICAgICAgICBERUZBVUxUX1BVQkxJQywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX1NUUkVBTU5BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic3RyZWFtbmFtZSIsICJzdHJlYW1uYW1lIiwgIm5hbWUgb2YgdGhlIHN0cmVhbSIsCi0gICAgICAgICAgREVGQVVMVF9TVFJFQU1OQU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBBUkdfREVTQ1JJUFRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iLAotICAgICAgICAgIERFRkFVTFRfREVTQ1JJUFRJT04sIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIEFSR19HRU5SRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJnZW5yZSIsICJnZW5yZSIsICJnZW5yZSIsIERFRkFVTFRfR0VOUkUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX1BST1RPQ09MLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwcm90b2NvbCIsICJwcm90b2NvbCIsICJDb25uZWN0aW9uIFByb3RvY29sIHRvIHVzZSIsCi0gICAgICAgICAgR1NUX1RZUEVfU0hPVVRfUFJPVE9DT0wsIERFRkFVTFRfUFJPVE9DT0wsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLQotICAvKiBpY2VjYXN0IG9ubHkgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX01PVU5ULAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoIm1vdW50IiwgIm1vdW50IiwgIm1vdW50IiwgREVGQVVMVF9NT1VOVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBBUkdfVVJMLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVybCIsICJ1cmwiLCAidGhlIHN0cmVhbSdzIGhvbWVwYWdlIFVSTCIsCi0gICAgICAgICAgREVGQVVMVF9VUkwsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qIHNpZ25hbHMgKi8KLSAgZ3N0X3Nob3V0MnNlbmRfc2lnbmFsc1tTSUdOQUxfQ09OTkVDVElPTl9QUk9CTEVNXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJjb25uZWN0aW9uLXByb2JsZW0iLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0NMRUFOVVAsIEdfU1RSVUNUX09GRlNFVCAoR3N0U2hvdXQyc2VuZENsYXNzLAotICAgICAgICAgIGNvbm5lY3Rpb25fcHJvYmxlbSksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19JTlQsCi0gICAgICBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zaG91dDJzZW5kX3N0YXJ0KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Nob3V0MnNlbmRfc3RvcCk7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Nob3V0MnNlbmRfdW5sb2NrKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnVubG9ja19zdG9wID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2hvdXQyc2VuZF91bmxvY2tfc3RvcCk7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT5yZW5kZXIgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Nob3V0MnNlbmRfcmVuZGVyKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zaG91dDJzZW5kX2V2ZW50KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnNldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zaG91dDJzZW5kX3NldGNhcHMpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJJY2VjYXN0IG5ldHdvcmsgc2luayIsCi0gICAgICAiU2luay9OZXR3b3JrIiwgIlNlbmRzIGRhdGEgdG8gYW4gaWNlY2FzdCBzZXJ2ZXIiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+LCAiCi0gICAgICAiUGVkcm8gQ29ydGUtUmVhbCA8dHlwb0BuZXRjYWJvLnB0PiwgIgotICAgICAgIlphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChzaG91dDJfZGVidWcsICJzaG91dDIiLCAwLCAic2hvdXQyc2VuZCBlbGVtZW50Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hvdXQyc2VuZF9pbml0IChHc3RTaG91dDJzZW5kICogc2hvdXQyc2VuZCkKLXsKLSAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyAoR1NUX0JBU0VfU0lOSyAoc2hvdXQyc2VuZCksIEZBTFNFKTsKLQotICBzaG91dDJzZW5kLT50aW1lciA9IGdzdF9wb2xsX25ldyAoVFJVRSk7Ci0KLSAgc2hvdXQyc2VuZC0+aXAgPSBnX3N0cmR1cCAoREVGQVVMVF9JUCk7Ci0gIHNob3V0MnNlbmQtPnBvcnQgPSBERUZBVUxUX1BPUlQ7Ci0gIHNob3V0MnNlbmQtPnBhc3N3b3JkID0gZ19zdHJkdXAgKERFRkFVTFRfUEFTU1dPUkQpOwotICBzaG91dDJzZW5kLT51c2VybmFtZSA9IGdfc3RyZHVwIChERUZBVUxUX1VTRVJOQU1FKTsKLSAgc2hvdXQyc2VuZC0+c3RyZWFtbmFtZSA9IGdfc3RyZHVwIChERUZBVUxUX1NUUkVBTU5BTUUpOwotICBzaG91dDJzZW5kLT5kZXNjcmlwdGlvbiA9IGdfc3RyZHVwIChERUZBVUxUX0RFU0NSSVBUSU9OKTsKLSAgc2hvdXQyc2VuZC0+Z2VucmUgPSBnX3N0cmR1cCAoREVGQVVMVF9HRU5SRSk7Ci0gIHNob3V0MnNlbmQtPm1vdW50ID0gZ19zdHJkdXAgKERFRkFVTFRfTU9VTlQpOwotICBzaG91dDJzZW5kLT51cmwgPSBnX3N0cmR1cCAoREVGQVVMVF9VUkwpOwotICBzaG91dDJzZW5kLT5wcm90b2NvbCA9IERFRkFVTFRfUFJPVE9DT0w7Ci0gIHNob3V0MnNlbmQtPmlzcHVibGljID0gREVGQVVMVF9QVUJMSUM7Ci0KLSAgc2hvdXQyc2VuZC0+Zm9ybWF0ID0gLTE7Ci0gIHNob3V0MnNlbmQtPnRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBzaG91dDJzZW5kLT5jb25uID0gTlVMTDsKLSAgc2hvdXQyc2VuZC0+Y29ubmVjdGVkID0gRkFMU0U7Ci0gIHNob3V0MnNlbmQtPnNvbmdtZXRhZGF0YSA9IE5VTEw7Ci0gIHNob3V0MnNlbmQtPnNvbmdhcnRpc3QgPSBOVUxMOwotICBzaG91dDJzZW5kLT5zb25ndGl0bGUgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Nob3V0MnNlbmRfZmluYWxpemUgKEdzdFNob3V0MnNlbmQgKiBzaG91dDJzZW5kKQotewotICBnX2ZyZWUgKHNob3V0MnNlbmQtPmlwKTsKLSAgZ19mcmVlIChzaG91dDJzZW5kLT5wYXNzd29yZCk7Ci0gIGdfZnJlZSAoc2hvdXQyc2VuZC0+dXNlcm5hbWUpOwotICBnX2ZyZWUgKHNob3V0MnNlbmQtPnN0cmVhbW5hbWUpOwotICBnX2ZyZWUgKHNob3V0MnNlbmQtPmRlc2NyaXB0aW9uKTsKLSAgZ19mcmVlIChzaG91dDJzZW5kLT5nZW5yZSk7Ci0gIGdfZnJlZSAoc2hvdXQyc2VuZC0+bW91bnQpOwotICBnX2ZyZWUgKHNob3V0MnNlbmQtPnVybCk7Ci0KLSAgZ3N0X3RhZ19saXN0X3VucmVmIChzaG91dDJzZW5kLT50YWdzKTsKLQotICBnc3RfcG9sbF9mcmVlIChzaG91dDJzZW5kLT50aW1lcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplICgoR09iamVjdCAqKSAoc2hvdXQyc2VuZCkpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X3Nob3V0X21ldGFkYXRhIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RTaG91dDJzZW5kICpzaG91dDJzZW5kID0gKEdzdFNob3V0MnNlbmQgKikgdXNlcl9kYXRhOwotICBjaGFyICoqc2hvdXRfbWV0YWRhdGEgPSAmKHNob3V0MnNlbmQtPnNvbmdtZXRhZGF0YSk7Ci0gIGNoYXIgKipzb25nX2FydGlzdCA9ICYoc2hvdXQyc2VuZC0+c29uZ2FydGlzdCk7Ci0gIGNoYXIgKipzb25nX3RpdGxlID0gJihzaG91dDJzZW5kLT5zb25ndGl0bGUpOwotCi0gIGdjaGFyICp2YWx1ZTsKLQotICBHU1RfREVCVUcgKCJ0YWc6ICVzIGJlaW5nIGFkZGVkIiwgdGFnKTsKLSAgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0FSVElTVCkgPT0gMCkgewotICAgIGlmIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdfVFlQRV9TVFJJTkcpIHsKLSAgICAgIGlmICghZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIHRhZywgJnZhbHVlKSkgewotICAgICAgICBHU1RfREVCVUcgKCJFcnJvciByZWFkaW5nIFwiJXNcIiB0YWcgdmFsdWUiLCB0YWcpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICgqc29uZ19hcnRpc3QgIT0gTlVMTCkKLSAgICAgICAgZ19mcmVlICgqc29uZ19hcnRpc3QpOwotCi0gICAgICAqc29uZ19hcnRpc3QgPSBnX3N0cmR1cCAodmFsdWUpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19USVRMRSkgPT0gMCkgewotICAgIGlmIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdfVFlQRV9TVFJJTkcpIHsKLSAgICAgIGlmICghZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIHRhZywgJnZhbHVlKSkgewotICAgICAgICBHU1RfREVCVUcgKCJFcnJvciByZWFkaW5nIFwiJXNcIiB0YWcgdmFsdWUiLCB0YWcpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICgqc29uZ190aXRsZSAhPSBOVUxMKQotICAgICAgICBnX2ZyZWUgKCpzb25nX3RpdGxlKTsKLQotICAgICAgKnNvbmdfdGl0bGUgPSBnX3N0cmR1cCAodmFsdWUpOwotICAgIH0KLSAgfQotCi0gIGlmICgqc2hvdXRfbWV0YWRhdGEgIT0gTlVMTCkKLSAgICBnX2ZyZWUgKCpzaG91dF9tZXRhZGF0YSk7Ci0KLQotICBpZiAoKnNvbmdfdGl0bGUgJiYgKnNvbmdfYXJ0aXN0KSB7Ci0gICAgKnNob3V0X21ldGFkYXRhID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgLSAlcyIsICpzb25nX2FydGlzdCwgKnNvbmdfdGl0bGUpOwotICB9IGVsc2UgaWYgKCpzb25nX3RpdGxlICYmICpzb25nX2FydGlzdCA9PSBOVUxMKSB7Ci0gICAgKnNob3V0X21ldGFkYXRhID0gZ19zdHJkdXBfcHJpbnRmICgiVW5rbm93biAtICVzIiwgKnNvbmdfdGl0bGUpOwotICB9IGVsc2UgaWYgKCpzb25nX3RpdGxlID09IE5VTEwgJiYgKnNvbmdfYXJ0aXN0KSB7Ci0gICAgKnNob3V0X21ldGFkYXRhID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgLSBVbmtub3duIiwgKnNvbmdfYXJ0aXN0KTsKLSAgfSBlbHNlIHsKLSAgICAqc2hvdXRfbWV0YWRhdGEgPSBnX3N0cmR1cF9wcmludGYgKCJVbmtub3duIC0gVW5rbm93biIpOwotICB9Ci0KLSAgR1NUX0xPRyAoInNob3V0IG1ldGFkYXRhIGlzIG5vdzogJXMiLCAqc2hvdXRfbWV0YWRhdGEpOwotfQotCi0jaWYgMAotc3RhdGljIHZvaWQKLWdzdF9zaG91dDJzZW5kX3NldF9tZXRhZGF0YSAoR3N0U2hvdXQyc2VuZCAqIHNob3V0MnNlbmQpCi17Ci0gIGNvbnN0IEdzdFRhZ0xpc3QgKnVzZXJfdGFnczsKLSAgR3N0VGFnTGlzdCAqY29weTsKLSAgY2hhciAqdGVtcG1ldGFkYXRhOwotICBzaG91dF9tZXRhZGF0YV90ICpwbWV0YWRhdGE7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoc2hvdXQyc2VuZCAhPSBOVUxMKTsKLSAgdXNlcl90YWdzID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0IChHU1RfVEFHX1NFVFRFUiAoc2hvdXQyc2VuZCkpOwotICBpZiAoKHNob3V0MnNlbmQtPnRhZ3MgPT0gTlVMTCkgJiYgKHVzZXJfdGFncyA9PSBOVUxMKSkgewotICAgIHJldHVybjsKLSAgfQotICBjb3B5ID0gZ3N0X3RhZ19saXN0X21lcmdlICh1c2VyX3RhZ3MsIHNob3V0MnNlbmQtPnRhZ3MsCi0gICAgICBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKEdTVF9UQUdfU0VUVEVSIChzaG91dDJzZW5kKSkpOwotICAvKiBsZXRzIGdldCB0aGUgYXJ0aXN0IGFuZCBzb25nIHRhZ3MgKi8KLSAgdGVtcG1ldGFkYXRhID0gTlVMTDsKLSAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKChHc3RUYWdMaXN0ICopIGNvcHksIHNldF9zaG91dF9tZXRhZGF0YSwKLSAgICAgIChncG9pbnRlcikgJiB0ZW1wbWV0YWRhdGEpOwotICBpZiAodGVtcG1ldGFkYXRhKSB7Ci0gICAgcG1ldGFkYXRhID0gc2hvdXRfbWV0YWRhdGFfbmV3ICgpOwotICAgIHNob3V0X21ldGFkYXRhX2FkZCAocG1ldGFkYXRhLCAic29uZyIsIHRlbXBtZXRhZGF0YSk7Ci0gICAgc2hvdXRfc2V0X21ldGFkYXRhIChzaG91dDJzZW5kLT5jb25uLCBwbWV0YWRhdGEpOwotICAgIHNob3V0X21ldGFkYXRhX2ZyZWUgKHBtZXRhZGF0YSk7Ci0gIH0KLQotICBnc3RfdGFnX2xpc3RfdW5yZWYgKGNvcHkpOwotfQotI2VuZGlmCi0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2hvdXQyc2VuZF9ldmVudCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RTaG91dDJzZW5kICpzaG91dDJzZW5kOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHNob3V0MnNlbmQgPSBHU1RfU0hPVVQyU0VORCAoc2luayk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNob3V0MnNlbmQsICJnb3QgJXMgZXZlbnQiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzp7Ci0gICAgICAvKiB2b3JiaXMgYXVkaW8gZG9lc24ndCBuZWVkIG1ldGFkYXRhIHNldHRpbmcgb24gdGhlIGljZWNhc3QgbGV2ZWwsIG9ubHkgbXAzICovCi0gICAgICBpZiAoc2hvdXQyc2VuZC0+dGFncyAmJiBzaG91dDJzZW5kLT5mb3JtYXQgPT0gU0hPVVRfRk9STUFUX01QMykgewotICAgICAgICBHc3RUYWdMaXN0ICpsaXN0OwotCi0gICAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmbGlzdCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNob3V0MnNlbmQsICJ0YWdzPSUiIEdTVF9QVFJfRk9STUFULCBsaXN0KTsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoc2hvdXQyc2VuZC0+dGFncywKLSAgICAgICAgICAgIGxpc3QsCi0gICAgICAgICAgICBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKEdTVF9UQUdfU0VUVEVSIChzaG91dDJzZW5kKSkpOwotICAgICAgICAvKiBsZXRzIGdldCB0aGUgYXJ0aXN0IGFuZCBzb25nIHRhZ3MgKi8KLSAgICAgICAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKChHc3RUYWdMaXN0ICopIGxpc3QsCi0gICAgICAgICAgICBzZXRfc2hvdXRfbWV0YWRhdGEsIHNob3V0MnNlbmQpOwotICAgICAgICBpZiAoc2hvdXQyc2VuZC0+c29uZ21ldGFkYXRhICYmIHNob3V0MnNlbmQtPmNvbm5lY3RlZCkgewotICAgICAgICAgIHNob3V0X21ldGFkYXRhX3QgKnBtZXRhZGF0YTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNob3V0MnNlbmQsICJtZXRhZGF0YSBub3c6ICVzIiwKLSAgICAgICAgICAgICAgc2hvdXQyc2VuZC0+c29uZ21ldGFkYXRhKTsKLQotICAgICAgICAgIHBtZXRhZGF0YSA9IHNob3V0X21ldGFkYXRhX25ldyAoKTsKLSAgICAgICAgICBzaG91dF9tZXRhZGF0YV9hZGQgKHBtZXRhZGF0YSwgInNvbmciLCBzaG91dDJzZW5kLT5zb25nbWV0YWRhdGEpOwotICAgICAgICAgIHNob3V0X3NldF9tZXRhZGF0YSAoc2hvdXQyc2VuZC0+Y29ubiwgcG1ldGFkYXRhKTsKLSAgICAgICAgICBzaG91dF9tZXRhZGF0YV9mcmVlIChwbWV0YWRhdGEpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDp7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc2hvdXQyc2VuZCwgImxldCBiYXNlIGNsYXNzIGhhbmRsZSBldmVudCIpOwotICAgICAgaWYgKEdTVF9CQVNFX1NJTktfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmV2ZW50KSB7Ci0gICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgICAgICByZXQgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5ldmVudCAoc2luaywgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2hvdXQyc2VuZF9zdGFydCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0U2hvdXQyc2VuZCAqc2luayA9IEdTVF9TSE9VVDJTRU5EIChiYXNlc2luayk7Ci0gIGNvbnN0IGdjaGFyICpjdXJfcHJvcDsKLSAgZ3Nob3J0IHByb3RvID0gMzsKLSAgZ2NoYXIgKnZlcnNpb25fc3RyaW5nOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJzdGFydGluZyIpOwotCi0gIHNpbmstPmNvbm4gPSBzaG91dF9uZXcgKCk7Ci0KLSAgc3dpdGNoIChzaW5rLT5wcm90b2NvbCkgewotICAgIGNhc2UgU0hPVVQyU0VORF9QUk9UT0NPTF9YQVVESU9DQVNUOgotICAgICAgcHJvdG8gPSBTSE9VVF9QUk9UT0NPTF9YQVVESU9DQVNUOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSE9VVDJTRU5EX1BST1RPQ09MX0lDWToKLSAgICAgIHByb3RvID0gU0hPVVRfUFJPVE9DT0xfSUNZOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSE9VVDJTRU5EX1BST1RPQ09MX0hUVFA6Ci0gICAgICBwcm90byA9IFNIT1VUX1BST1RPQ09MX0hUVFA7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGN1cl9wcm9wID0gInByb3RvY29sIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgcHJvdG9jb2w6ICVkIiwgc2luay0+cHJvdG9jb2wpOwotICBpZiAoc2hvdXRfc2V0X3Byb3RvY29sIChzaW5rLT5jb25uLCBwcm90bykgIT0gU0hPVVRFUlJfU1VDQ0VTUykKLSAgICBnb3RvIHNldF9mYWlsZWQ7Ci0KLSAgY3VyX3Byb3AgPSAiaXAiOwotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2V0dGluZyBJUC9ob3N0bmFtZTogJXMiLCBzaW5rLT5pcCk7Ci0gIGlmIChzaG91dF9zZXRfaG9zdCAoc2luay0+Y29ubiwgc2luay0+aXApICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZXRfZmFpbGVkOwotCi0gIGN1cl9wcm9wID0gInBvcnQiOwotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2V0dGluZyBwb3J0OiAldSIsIHNpbmstPnBvcnQpOwotICBpZiAoc2hvdXRfc2V0X3BvcnQgKHNpbmstPmNvbm4sIHNpbmstPnBvcnQpICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZXRfZmFpbGVkOwotCi0gIGN1cl9wcm9wID0gInBhc3N3b3JkIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgcGFzc3dvcmQ6ICVzIiwgc2luay0+cGFzc3dvcmQpOwotICBpZiAoc2hvdXRfc2V0X3Bhc3N3b3JkIChzaW5rLT5jb25uLCBzaW5rLT5wYXNzd29yZCkgIT0gU0hPVVRFUlJfU1VDQ0VTUykKLSAgICBnb3RvIHNldF9mYWlsZWQ7Ci0KLSAgY3VyX3Byb3AgPSAicHVibGljIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICV1IiwgY3VyX3Byb3AsIHNpbmstPmlzcHVibGljKTsKLSAgaWYgKHNob3V0X3NldF9wdWJsaWMgKHNpbmstPmNvbm4sCi0gICAgICAgICAgKHNpbmstPmlzcHVibGljID8gMSA6IDApKSAhPSBTSE9VVEVSUl9TVUNDRVNTKQotICAgIGdvdG8gc2V0X2ZhaWxlZDsKLQotICBjdXJfcHJvcCA9ICJzdHJlYW1uYW1lIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICVzIiwgY3VyX3Byb3AsIHNpbmstPnN0cmVhbW5hbWUpOwotICBpZiAoc2hvdXRfc2V0X25hbWUgKHNpbmstPmNvbm4sIHNpbmstPnN0cmVhbW5hbWUpICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZXRfZmFpbGVkOwotCi0gIGN1cl9wcm9wID0gImRlc2NyaXB0aW9uIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICVzIiwgY3VyX3Byb3AsIHNpbmstPmRlc2NyaXB0aW9uKTsKLSAgaWYgKHNob3V0X3NldF9kZXNjcmlwdGlvbiAoc2luay0+Y29ubiwgc2luay0+ZGVzY3JpcHRpb24pICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZXRfZmFpbGVkOwotCi0gIGN1cl9wcm9wID0gImdlbnJlIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICVzIiwgY3VyX3Byb3AsIHNpbmstPmdlbnJlKTsKLSAgaWYgKHNob3V0X3NldF9nZW5yZSAoc2luay0+Y29ubiwgc2luay0+Z2VucmUpICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZXRfZmFpbGVkOwotCi0gIGN1cl9wcm9wID0gIm1vdW50IjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICVzIiwgY3VyX3Byb3AsIHNpbmstPm1vdW50KTsKLSAgaWYgKHNob3V0X3NldF9tb3VudCAoc2luay0+Y29ubiwgc2luay0+bW91bnQpICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZXRfZmFpbGVkOwotCi0gIGN1cl9wcm9wID0gInVzZXJuYW1lIjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICVzIiwgY3VyX3Byb3AsICJzb3VyY2UiKTsKLSAgaWYgKHNob3V0X3NldF91c2VyIChzaW5rLT5jb25uLCBzaW5rLT51c2VybmFtZSkgIT0gU0hPVVRFUlJfU1VDQ0VTUykKLSAgICBnb3RvIHNldF9mYWlsZWQ7Ci0KLSAgdmVyc2lvbl9zdHJpbmcgPSBnc3RfdmVyc2lvbl9zdHJpbmcgKCk7Ci0gIGN1cl9wcm9wID0gImFnZW50IjsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgJXM6ICVzIiwgY3VyX3Byb3AsIHZlcnNpb25fc3RyaW5nKTsKLSAgaWYgKHNob3V0X3NldF9hZ2VudCAoc2luay0+Y29ubiwgdmVyc2lvbl9zdHJpbmcpICE9IFNIT1VURVJSX1NVQ0NFU1MpIHsKLSAgICBnX2ZyZWUgKHZlcnNpb25fc3RyaW5nKTsKLSAgICBnb3RvIHNldF9mYWlsZWQ7Ci0gIH0KLQotICBnX2ZyZWUgKHZlcnNpb25fc3RyaW5nKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLS8qIEVSUk9SICovCi1zZXRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIExJQlJBUlksIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiRXJyb3Igc2V0dGluZyAlczogJXMiLCBjdXJfcHJvcCwgc2hvdXRfZ2V0X2Vycm9yIChzaW5rLT5jb25uKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Nob3V0MnNlbmRfY29ubmVjdCAoR3N0U2hvdXQyc2VuZCAqIHNpbmspCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJDb25uZWN0aW9uIGZvcm1hdCBpczogJWQiLCBzaW5rLT5mb3JtYXQpOwotCi0gIGlmIChzaW5rLT5mb3JtYXQgPT0gLTEpCi0gICAgZ290byBub19jYXBzOwotCi0gIGlmIChzaG91dF9zZXRfZm9ybWF0IChzaW5rLT5jb25uLCBzaW5rLT5mb3JtYXQpICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBjb3VsZF9ub3Rfc2V0X2Zvcm1hdDsKLQotICBpZiAoc2hvdXRfb3BlbiAoc2luay0+Y29ubikgIT0gU0hPVVRFUlJfU1VDQ0VTUykKLSAgICBnb3RvIGNvdWxkX25vdF9jb25uZWN0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjb25uZWN0ZWQgdG8gc2VydmVyIik7Ci0gIHNpbmstPmNvbm5lY3RlZCA9IFRSVUU7Ci0KLSAgLyogbGV0J3Mgc2V0IG1ldGFkYXRhICovCi0gIGlmIChzaW5rLT5zb25nbWV0YWRhdGEpIHsKLSAgICBzaG91dF9tZXRhZGF0YV90ICpwbWV0YWRhdGE7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2hvdXQgbWV0YWRhdGEgbm93OiAlcyIsIHNpbmstPnNvbmdtZXRhZGF0YSk7Ci0gICAgcG1ldGFkYXRhID0gc2hvdXRfbWV0YWRhdGFfbmV3ICgpOwotICAgIHNob3V0X21ldGFkYXRhX2FkZCAocG1ldGFkYXRhLCAic29uZyIsIHNpbmstPnNvbmdtZXRhZGF0YSk7Ci0gICAgc2hvdXRfc2V0X21ldGFkYXRhIChzaW5rLT5jb25uLCBwbWV0YWRhdGEpOwotICAgIHNob3V0X21ldGFkYXRhX2ZyZWUgKHBtZXRhZGF0YSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLS8qIEVSUk9SUyAqLwotbm9fY2FwczoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAotICAgICAgICAoIk5vIGlucHV0IGNhcHMgcmVjZWl2ZWQuIikpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgfQotCi1jb3VsZF9ub3Rfc2V0X2Zvcm1hdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBMSUJSQVJZLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkVycm9yIHNldHRpbmcgY29ubmVjdGlvbiBmb3JtYXQ6ICVzIiwgc2hvdXRfZ2V0X2Vycm9yIChzaW5rLT5jb25uKSkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi1jb3VsZF9ub3RfY29ubmVjdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgT1BFTl9XUklURSwKLSAgICAgICAgKF8oIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIpKSwKLSAgICAgICAgKCJzaG91dF9vcGVuKCkgZmFpbGVkOiBlcnI9JXMiLCBzaG91dF9nZXRfZXJyb3IgKHNpbmstPmNvbm4pKSk7Ci0gICAgZ19zaWduYWxfZW1pdCAoc2luaywgZ3N0X3Nob3V0MnNlbmRfc2lnbmFsc1tTSUdOQUxfQ09OTkVDVElPTl9QUk9CTEVNXSwgMCwKLSAgICAgICAgc2hvdXRfZ2V0X2Vycm5vIChzaW5rLT5jb25uKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Nob3V0MnNlbmRfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0U2hvdXQyc2VuZCAqc2luayA9IEdTVF9TSE9VVDJTRU5EIChiYXNlc2luayk7Ci0KLSAgaWYgKHNpbmstPmNvbm4pIHsKLSAgICBpZiAoc2luay0+Y29ubmVjdGVkKQotICAgICAgc2hvdXRfY2xvc2UgKHNpbmstPmNvbm4pOwotICAgIHNob3V0X2ZyZWUgKHNpbmstPmNvbm4pOwotICAgIHNpbmstPmNvbm4gPSBOVUxMOwotICB9Ci0KLSAgaWYgKHNpbmstPnNvbmdtZXRhZGF0YSkgewotICAgIGdfZnJlZSAoc2luay0+c29uZ21ldGFkYXRhKTsKLSAgICBzaW5rLT5zb25nbWV0YWRhdGEgPSBOVUxMOwotICB9Ci0KLSAgc2luay0+Y29ubmVjdGVkID0gRkFMU0U7Ci0gIHNpbmstPmZvcm1hdCA9IC0xOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zaG91dDJzZW5kX3VubG9jayAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0U2hvdXQyc2VuZCAqc2luazsKLQotICBzaW5rID0gR1NUX1NIT1VUMlNFTkQgKGJhc2VzaW5rKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVubG9jayIpOwotICBnc3RfcG9sbF9zZXRfZmx1c2hpbmcgKHNpbmstPnRpbWVyLCBUUlVFKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2hvdXQyc2VuZF91bmxvY2tfc3RvcCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaykKLXsKLSAgR3N0U2hvdXQyc2VuZCAqc2luazsKLQotICBzaW5rID0gR1NUX1NIT1VUMlNFTkQgKGJhc2VzaW5rKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc2luaywgInVubG9ja19zdG9wIik7Ci0gIGdzdF9wb2xsX3NldF9mbHVzaGluZyAoc2luay0+dGltZXIsIEZBTFNFKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zaG91dDJzZW5kX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RTaG91dDJzZW5kICpzaW5rOwotICBnbG9uZyByZXQ7Ci0gIGdpbnQgZGVsYXk7Ci0gIEdzdEZsb3dSZXR1cm4gZnJldCA9IEdTVF9GTE9XX09LOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBzaW5rID0gR1NUX1NIT1VUMlNFTkQgKGJhc2VzaW5rKTsKLQotICAvKiB3ZSBjb25uZWN0IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cgdGhlIGZvcm1hdCBiZWZvcmUgd2UgY2FuIHNldCB1cAotICAgKiB0aGUgY29ubmVjdGlvbiwgd2hpY2ggd2UgZG9uJ3Qga25vdyB5ZXQgaW4gX3N0YXJ0KCksIGFuZCBhbHNvIGJlY2F1c2Ugd2UKLSAgICogZG9uJ3Qgd2FudCB0byBibG9jayB0aGUgYXBwbGljYXRpb24gdGhyZWFkICovCi0gIGlmICghc2luay0+Y29ubmVjdGVkKSB7Ci0gICAgZnJldCA9IGdzdF9zaG91dDJzZW5kX2Nvbm5lY3QgKHNpbmspOwotICAgIGlmIChmcmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBkb25lOwotICB9Ci0KLSAgZGVsYXkgPSBzaG91dF9kZWxheSAoc2luay0+Y29ubik7Ci0KLSAgaWYgKGRlbGF5ID4gMCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAid2FpdGluZyAlZCBtc2VjIiwgZGVsYXkpOwotICAgIGlmIChnc3RfcG9sbF93YWl0IChzaW5rLT50aW1lciwgR1NUX01TRUNPTkQgKiBkZWxheSkgPT0gLTEpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAidW5sb2NrZWQiKTsKLQotICAgICAgZnJldCA9IGdzdF9iYXNlX3Npbmtfd2FpdF9wcmVyb2xsIChiYXNlc2luayk7Ci0gICAgICBpZiAoZnJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc2luaywgIndlJ3JlICVkIG1zZWMgbGF0ZSIsIC1kZWxheSk7Ci0gIH0KLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBHU1RfTE9HX09CSkVDVCAoc2luaywgInNlbmRpbmcgJXUgYnl0ZXMgb2YgZGF0YSIsIChndWludCkgbWFwLnNpemUpOwotICByZXQgPSBzaG91dF9zZW5kIChzaW5rLT5jb25uLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBpZiAocmV0ICE9IFNIT1VURVJSX1NVQ0NFU1MpCi0gICAgZ290byBzZW5kX2Vycm9yOwotCi1kb25lOgotCi0gIHJldHVybiBmcmV0OwotCi0vKiBFUlJPUlMgKi8KLXNlbmRfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIFdSSVRFLCAoTlVMTCksCi0gICAgICAgICgic2hvdXRfc2VuZCgpIGZhaWxlZDogJXMiLCBzaG91dF9nZXRfZXJyb3IgKHNpbmstPmNvbm4pKSk7Ci0gICAgZ19zaWduYWxfZW1pdCAoc2luaywgZ3N0X3Nob3V0MnNlbmRfc2lnbmFsc1tTSUdOQUxfQ09OTkVDVElPTl9QUk9CTEVNXSwgMCwKLSAgICAgICAgc2hvdXRfZ2V0X2Vycm5vIChzaW5rLT5jb25uKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hvdXQyc2VuZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U2hvdXQyc2VuZCAqc2hvdXQyc2VuZDsKLQotICBzaG91dDJzZW5kID0gR1NUX1NIT1VUMlNFTkQgKG9iamVjdCk7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotCi0gICAgY2FzZSBBUkdfSVA6Ci0gICAgICBnX2ZyZWUgKHNob3V0MnNlbmQtPmlwKTsKLSAgICAgIHNob3V0MnNlbmQtPmlwID0gZ19zdHJkdXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX1BPUlQ6Ci0gICAgICBzaG91dDJzZW5kLT5wb3J0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19QQVNTV09SRDoKLSAgICAgIGdfZnJlZSAoc2hvdXQyc2VuZC0+cGFzc3dvcmQpOwotICAgICAgc2hvdXQyc2VuZC0+cGFzc3dvcmQgPSBnX3N0cmR1cCAoZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfVVNFUk5BTUU6Ci0gICAgICBnX2ZyZWUgKHNob3V0MnNlbmQtPnVzZXJuYW1lKTsKLSAgICAgIHNob3V0MnNlbmQtPnVzZXJuYW1lID0gZ19zdHJkdXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX1BVQkxJQzoKLSAgICAgIHNob3V0MnNlbmQtPmlzcHVibGljID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfU1RSRUFNTkFNRTogICAgICAgLyogTmFtZSBvZiB0aGUgc3RyZWFtICovCi0gICAgICBnX2ZyZWUgKHNob3V0MnNlbmQtPnN0cmVhbW5hbWUpOwotICAgICAgc2hvdXQyc2VuZC0+c3RyZWFtbmFtZSA9IGdfc3RyZHVwIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19ERVNDUklQVElPTjogICAgICAvKiBEZXNjcmlwdGlvbiBvZiB0aGUgc3RyZWFtICovCi0gICAgICBnX2ZyZWUgKHNob3V0MnNlbmQtPmRlc2NyaXB0aW9uKTsKLSAgICAgIHNob3V0MnNlbmQtPmRlc2NyaXB0aW9uID0gZ19zdHJkdXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0dFTlJFOiAgICAgICAgICAgIC8qIEdlbnJlIG9mIHRoZSBzdHJlYW0gKi8KLSAgICAgIGdfZnJlZSAoc2hvdXQyc2VuZC0+Z2VucmUpOwotICAgICAgc2hvdXQyc2VuZC0+Z2VucmUgPSBnX3N0cmR1cCAoZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfUFJPVE9DT0w6ICAgICAgICAgLyogcHJvdG9jb2wgdG8gY29ubmVjdCB3aXRoICovCi0gICAgICBzaG91dDJzZW5kLT5wcm90b2NvbCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX01PVU5UOiAgICAgICAgICAgIC8qIG1vdW50cG9pbnQgb2Ygc3RyZWFtIChpY2VjYXN0IG9ubHkpICovCi0gICAgICBnX2ZyZWUgKHNob3V0MnNlbmQtPm1vdW50KTsKLSAgICAgIHNob3V0MnNlbmQtPm1vdW50ID0gZ19zdHJkdXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX1VSTDogICAgICAgICAgICAgIC8qIHRoZSBzdHJlYW0ncyBob21lcGFnZSBVUkwgKi8KLSAgICAgIGdfZnJlZSAoc2hvdXQyc2VuZC0+dXJsKTsKLSAgICAgIHNob3V0MnNlbmQtPnVybCA9IGdfc3RyZHVwIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hvdXQyc2VuZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U2hvdXQyc2VuZCAqc2hvdXQyc2VuZDsKLQotICBzaG91dDJzZW5kID0gR1NUX1NIT1VUMlNFTkQgKG9iamVjdCk7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotCi0gICAgY2FzZSBBUkdfSVA6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzaG91dDJzZW5kLT5pcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19QT1JUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2hvdXQyc2VuZC0+cG9ydCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19QQVNTV09SRDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNob3V0MnNlbmQtPnBhc3N3b3JkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX1VTRVJOQU1FOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2hvdXQyc2VuZC0+dXNlcm5hbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfUFVCTElDOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNob3V0MnNlbmQtPmlzcHVibGljKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX1NUUkVBTU5BTUU6ICAgICAgIC8qIE5hbWUgb2YgdGhlIHN0cmVhbSAqLwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2hvdXQyc2VuZC0+c3RyZWFtbmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19ERVNDUklQVElPTjogICAgICAvKiBEZXNjcmlwdGlvbiBvZiB0aGUgc3RyZWFtICovCi0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzaG91dDJzZW5kLT5kZXNjcmlwdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19HRU5SRTogICAgICAgICAgICAvKiBHZW5yZSBvZiB0aGUgc3RyZWFtICovCi0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzaG91dDJzZW5kLT5nZW5yZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19QUk9UT0NPTDogICAgICAgICAvKiBwcm90b2NvbCB0byBjb25uZWN0IHdpdGggKi8KLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzaG91dDJzZW5kLT5wcm90b2NvbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19NT1VOVDogICAgICAgICAgICAvKiBtb3VudHBvaW50IG9mIHN0cmVhbSAoaWNlY2FzdCBvbmx5KSAqLwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2hvdXQyc2VuZC0+bW91bnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfVVJMOiAgICAgICAgICAgICAgLyogdGhlIHN0cmVhbSdzIGhvbWVwYWdlIFVSTCAqLwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2hvdXQyc2VuZC0+dXJsKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2hvdXQyc2VuZF9zZXRjYXBzIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RDYXBzICogY2FwcykKLXsKLSAgY29uc3QgZ2NoYXIgKm1pbWV0eXBlOwotICBHc3RTaG91dDJzZW5kICpzaG91dDJzZW5kOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHNob3V0MnNlbmQgPSBHU1RfU0hPVVQyU0VORCAoYmFzZXNpbmspOwotCi0gIG1pbWV0eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNob3V0MnNlbmQsICJtaW1ldHlwZSBvZiBjYXBzIGdpdmVuIGlzOiAlcyIsIG1pbWV0eXBlKTsKLQotICBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby9tcGVnIikpIHsKLSAgICBzaG91dDJzZW5kLT5mb3JtYXQgPSBTSE9VVF9GT1JNQVRfTVAzOwotICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXggKG1pbWV0eXBlLCAiL29nZyIpKSB7Ci0gICAgc2hvdXQyc2VuZC0+Zm9ybWF0ID0gU0hPVVRfRk9STUFUX09HRzsKLSNpZmRlZiBTSE9VVF9GT1JNQVRfV0VCTQotICB9IGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXggKG1pbWV0eXBlLCAiL3dlYm0iKSkgewotICAgIHNob3V0MnNlbmQtPmZvcm1hdCA9IFNIT1VUX0ZPUk1BVF9XRUJNOwotI2VuZGlmCi0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0jaWZkZWYgRU5BQkxFX05MUwotICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOwotICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKLSNlbmRpZiAvKiBFTkFCTEVfTkxTICovCi0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJzaG91dDJzZW5kIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1NIT1VUMlNFTkQpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgc2hvdXQyc2VuZCwKLSAgICAiU2VuZHMgZGF0YSB0byBhbiBpY2VjYXN0IHNlcnZlciB1c2luZyBsaWJzaG91dDIiLAotICAgIHBsdWdpbl9pbml0LAotICAgIFZFUlNJT04sICJMR1BMIiwgImxpYnNob3V0MiIsICJodHRwOi8vd3d3LmljZWNhc3Qub3JnL2Rvd25sb2FkLmh0bWwiKQpkaWZmIC0tZ2l0IGEvZXh0L3Nob3V0Mi9nc3RzaG91dDIuaCBiL2V4dC9zaG91dDIvZ3N0c2hvdXQyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMjJiYWMuLjAwMDAwMDAKLS0tIGEvZXh0L3Nob3V0Mi9nc3RzaG91dDIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfU0hPVVQyU0VORF9IX18KLSNkZWZpbmUgX19HU1RfU0hPVVQyU0VORF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotI2luY2x1ZGUgPHNob3V0L3Nob3V0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotICAvKiBQcm90b2NvbCB0eXBlIGVudW0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIFNIT1VUMlNFTkRfUFJPVE9DT0xfWEFVRElPQ0FTVCA9IDEsCi0gIFNIT1VUMlNFTkRfUFJPVE9DT0xfSUNZLAotICBTSE9VVDJTRU5EX1BST1RPQ09MX0hUVFAKLX0gR3N0U2hvdXQyU2VuZFByb3RvY29sOwotCi0KLS8qIERlZmluaXRpb24gb2Ygc3RydWN0dXJlIHN0b3JpbmcgZGF0YSBmb3IgdGhpcyBlbGVtZW50LiAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNob3V0MnNlbmQgR3N0U2hvdXQyc2VuZDsKLXN0cnVjdCBfR3N0U2hvdXQyc2VuZCB7Ci0gIEdzdEJhc2VTaW5rIHBhcmVudDsKLQotICBHc3RTaG91dDJTZW5kUHJvdG9jb2wgcHJvdG9jb2w7Ci0KLSAgR3N0UG9sbCAqdGltZXI7Ci0KLSAgc2hvdXRfdCAqY29ubjsKLQotICBnY2hhciAqaXA7Ci0gIGd1aW50IHBvcnQ7Ci0gIGdjaGFyICpwYXNzd29yZDsKLSAgZ2NoYXIgKnVzZXJuYW1lOwotICBnY2hhciAqc3RyZWFtbmFtZTsKLSAgZ2NoYXIgKmRlc2NyaXB0aW9uOwotICBnY2hhciAqZ2VucmU7Ci0gIGdjaGFyICptb3VudDsKLSAgZ2NoYXIgKnVybDsKLSAgZ2Jvb2xlYW4gY29ubmVjdGVkOwotICBnYm9vbGVhbiBpc3B1YmxpYzsKLSAgZ2NoYXIgKnNvbmdtZXRhZGF0YTsKLSAgZ2NoYXIgKnNvbmdhcnRpc3Q7Ci0gIGdjaGFyICpzb25ndGl0bGU7Ci0gIGludCAgICBmb3JtYXQ7Ci0KLSAgR3N0VGFnTGlzdCogdGFnczsKLX07Ci0KLQotCi0vKiBTdGFuZGFyZCBkZWZpbml0aW9uIGRlZmluaW5nIGEgY2xhc3MgZm9yIHRoaXMgZWxlbWVudC4gKi8KLXR5cGVkZWYgc3RydWN0IF9Hc3RTaG91dDJzZW5kQ2xhc3MgR3N0U2hvdXQyc2VuZENsYXNzOwotc3RydWN0IF9Hc3RTaG91dDJzZW5kQ2xhc3MgewotICBHc3RCYXNlU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWwgY2FsbGJhY2tzICovCi0gIHZvaWQgKCpjb25uZWN0aW9uX3Byb2JsZW0pIChHc3RFbGVtZW50ICplbGVtZW50LGd1aW50IGVycm5vKTsKLX07Ci0KLS8qIFN0YW5kYXJkIG1hY3JvcyBmb3IgZGVmaW5pbmcgdHlwZXMgZm9yIHRoaXMgZWxlbWVudC4gICovCi0jZGVmaW5lIEdTVF9UWVBFX1NIT1VUMlNFTkQgXAotICAoZ3N0X3Nob3V0MnNlbmRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1NIT1VUMlNFTkQob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TSE9VVDJTRU5ELEdzdFNob3V0MnNlbmQpKQotI2RlZmluZSBHU1RfU0hPVVQyU0VORF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TSE9VVDJTRU5ELEdzdFNob3V0MnNlbmRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TSE9VVDJTRU5EKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU0hPVVQyU0VORCkpCi0jZGVmaW5lIEdTVF9JU19TSE9VVDJTRU5EX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NIT1VUMlNFTkQpKQotCi0vKiBTdGFuZGFyZCBmdW5jdGlvbiByZXR1cm5pbmcgdHlwZSBpbmZvcm1hdGlvbi4gKi8KLUdUeXBlIGdzdF9zaG91dDJzZW5kX2dldF90eXBlKHZvaWQpOwotCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TSE9VVDJTRU5EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3NvdXAvTWFrZWZpbGUuYW0gYi9leHQvc291cC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlNWZlYy4uMDAwMDAwMAotLS0gYS9leHQvc291cC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHNvdXBodHRwc3JjLmxhCi0KLWxpYmdzdHNvdXBodHRwc3JjX2xhX1NPVVJDRVMgPSBnc3Rzb3VwaHR0cHNyYy5jIGdzdHNvdXBodHRwY2xpZW50c2luay5jIGdzdHNvdXB1dGlscy5jIGdzdHNvdXAuYwotCi1saWJnc3Rzb3VwaHR0cHNyY19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgJChTT1VQX0NGTEFHUykgXAotCS1EU09VUF9WRVJTSU9OX01JTl9SRVFVSVJFRD1TT1VQX1ZFUlNJT05fMl80OCBcCi0JLURTT1VQX1ZFUlNJT05fTUFYX0FMTE9XRUQ9U09VUF9ERVBSRUNBVEVEX0lOXzJfNDgKLWxpYmdzdHNvdXBodHRwc3JjX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHRhZy1AR1NUX0FQSV9WRVJTSU9OQCAkKEdTVF9CQVNFX0xJQlMpICQoU09VUF9MSUJTKQotbGliZ3N0c291cGh0dHBzcmNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0c291cGh0dHBzcmNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3Rzb3VwaHR0cHNyYy5oIGdzdHNvdXBodHRwY2xpZW50c2luay5oIGdzdHNvdXB1dGlscy5oCmRpZmYgLS1naXQgYS9leHQvc291cC9NYWtlZmlsZS5pbiBiL2V4dC9zb3VwL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmJmMWQ1Li4wMDAwMDAwCi0tLSBhL2V4dC9zb3VwL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTQxICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGV4dC9zb3VwCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0c291cGh0dHBzcmNfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3Rzb3VwaHR0cHNyY19sYV9PQkpFQ1RTID0gIFwKLQlsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwaHR0cHNyYy5sbyBcCi0JbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBjbGllbnRzaW5rLmxvIFwKLQlsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwdXRpbHMubG8gXAotCWxpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXAubG8KLWxpYmdzdHNvdXBodHRwc3JjX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHNvdXBodHRwc3JjX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3Rzb3VwaHR0cHNyY19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdHNvdXBodHRwc3JjX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0c291cGh0dHBzcmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0c291cGh0dHBzcmNfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0c291cGh0dHBzcmNfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0c291cGh0dHBzcmNfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0c291cGh0dHBzcmMubGEKLWxpYmdzdHNvdXBodHRwc3JjX2xhX1NPVVJDRVMgPSBnc3Rzb3VwaHR0cHNyYy5jIGdzdHNvdXBodHRwY2xpZW50c2luay5jIGdzdHNvdXB1dGlscy5jIGdzdHNvdXAuYwotbGliZ3N0c291cGh0dHBzcmNfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpICQoU09VUF9DRkxBR1MpIFwKLQktRFNPVVBfVkVSU0lPTl9NSU5fUkVRVUlSRUQ9U09VUF9WRVJTSU9OXzJfNDggXAotCS1EU09VUF9WRVJTSU9OX01BWF9BTExPV0VEPVNPVVBfREVQUkVDQVRFRF9JTl8yXzQ4Ci0KLWxpYmdzdHNvdXBodHRwc3JjX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHRhZy1AR1NUX0FQSV9WRVJTSU9OQCAkKEdTVF9CQVNFX0xJQlMpICQoU09VUF9MSUJTKQotbGliZ3N0c291cGh0dHBzcmNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0c291cGh0dHBzcmNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0c291cGh0dHBzcmMuaCBnc3Rzb3VwaHR0cGNsaWVudHNpbmsuaCBnc3Rzb3VwdXRpbHMuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3NvdXAvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3NvdXAvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3Rzb3VwaHR0cHNyYy5sYTogJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9PQkpFQ1RTKSAkKGxpYmdzdHNvdXBodHRwc3JjX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3Rzb3VwaHR0cHNyY19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0c291cGh0dHBzcmNfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHNvdXBodHRwc3JjX2xhX09CSkVDVFMpICQobGliZ3N0c291cGh0dHBzcmNfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBjbGllbnRzaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBzcmMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwdXRpbHMuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXBodHRwc3JjLmxvOiBnc3Rzb3VwaHR0cHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c291cGh0dHBzcmNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c291cGh0dHBzcmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXBodHRwc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwaHR0cHNyYy5UcG8gLWMgLW8gbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBzcmMubG8gYHRlc3QgLWYgJ2dzdHNvdXBodHRwc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNvdXBodHRwc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXBodHRwc3JjLlRwbyAkKERFUERJUikvbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c291cGh0dHBzcmMuYycgb2JqZWN0PSdsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwaHR0cHNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNvdXBodHRwc3JjX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNvdXBodHRwc3JjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXBodHRwc3JjLmxvIGB0ZXN0IC1mICdnc3Rzb3VwaHR0cHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rzb3VwaHR0cHNyYy5jCi0KLWxpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXBodHRwY2xpZW50c2luay5sbzogZ3N0c291cGh0dHBjbGllbnRzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBjbGllbnRzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwaHR0cGNsaWVudHNpbmsuVHBvIC1jIC1vIGxpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXBodHRwY2xpZW50c2luay5sbyBgdGVzdCAtZiAnZ3N0c291cGh0dHBjbGllbnRzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNvdXBodHRwY2xpZW50c2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwaHR0cGNsaWVudHNpbmsuVHBvICQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwaHR0cGNsaWVudHNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c291cGh0dHBjbGllbnRzaW5rLmMnIG9iamVjdD0nbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBjbGllbnRzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c291cGh0dHBzcmNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c291cGh0dHBzcmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cGh0dHBjbGllbnRzaW5rLmxvIGB0ZXN0IC1mICdnc3Rzb3VwaHR0cGNsaWVudHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c291cGh0dHBjbGllbnRzaW5rLmMKLQotbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cHV0aWxzLmxvOiBnc3Rzb3VwdXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNvdXBodHRwc3JjX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNvdXBodHRwc3JjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwdXRpbHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXB1dGlscy5UcG8gLWMgLW8gbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cHV0aWxzLmxvIGB0ZXN0IC1mICdnc3Rzb3VwdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c291cHV0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXB1dGlscy5UcG8gJChERVBESVIpL2xpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXB1dGlscy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rzb3VwdXRpbHMuYycgb2JqZWN0PSdsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwdXRpbHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwdXRpbHMubG8gYHRlc3QgLWYgJ2dzdHNvdXB1dGlscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rzb3VwdXRpbHMuYwotCi1saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwLmxvOiBnc3Rzb3VwLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rzb3VwaHR0cHNyY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cC5UcG8gLWMgLW8gbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cC5sbyBgdGVzdCAtZiAnZ3N0c291cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rzb3VwLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHNvdXBodHRwc3JjX2xhLWdzdHNvdXAuVHBvICQoREVQRElSKS9saWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNvdXAuYycgb2JqZWN0PSdsaWJnc3Rzb3VwaHR0cHNyY19sYS1nc3Rzb3VwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c291cGh0dHBzcmNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c291cGh0dHBzcmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c291cGh0dHBzcmNfbGEtZ3N0c291cC5sbyBgdGVzdCAtZiAnZ3N0c291cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rzb3VwLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L3NvdXAvZ3N0c291cC5jIGIvZXh0L3NvdXAvZ3N0c291cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmU0OTFkLi4wMDAwMDAwCi0tLSBhL2V4dC9zb3VwL2dzdHNvdXAuYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLQotI2luY2x1ZGUgImdzdHNvdXBodHRwc3JjLmgiCi0jaW5jbHVkZSAiZ3N0c291cGh0dHBjbGllbnRzaW5rLmgiCi0jaW5jbHVkZSAiZ3N0c291cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWSAoc291cF91dGlsc19kZWJ1Zyk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSNpZmRlZiBFTkFCTEVfTkxTCi0gIEdTVF9ERUJVRyAoImJpbmRpbmcgdGV4dCBkb21haW4gJXMgdG8gbG9jYWxlIGRpciAlcyIsIEdFVFRFWFRfUEFDS0FHRSwKLSAgICAgIExPQ0FMRURJUik7Ci0gIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7Ci0gIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOwotI2VuZGlmCi0KLSAgLyogc2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02NzQ4ODUgKi8KLSAgZ190eXBlX2Vuc3VyZSAoR19UWVBFX1NPQ0tFVCk7Ci0gIGdfdHlwZV9lbnN1cmUgKEdfVFlQRV9TT0NLRVRfQUREUkVTUyk7Ci0gIGdfdHlwZV9lbnN1cmUgKEdfVFlQRV9TT0NLRVRfU0VSVklDRSk7Ci0gIGdfdHlwZV9lbnN1cmUgKEdfVFlQRV9TT0NLRVRfRkFNSUxZKTsKLSAgZ190eXBlX2Vuc3VyZSAoR19UWVBFX1NPQ0tFVF9DTElFTlQpOwotICBnX3R5cGVfZW5zdXJlIChHX1RZUEVfUkVTT0xWRVIpOwotICBnX3R5cGVfZW5zdXJlIChHX1RZUEVfUFJPWFlfUkVTT0xWRVIpOwotICBnX3R5cGVfZW5zdXJlIChHX1RZUEVfUFJPWFlfQUREUkVTUyk7Ci0gIGdfdHlwZV9lbnN1cmUgKEdfVFlQRV9UTFNfQ0VSVElGSUNBVEUpOwotICBnX3R5cGVfZW5zdXJlIChHX1RZUEVfVExTX0NPTk5FQ1RJT04pOwotICBnX3R5cGVfZW5zdXJlIChHX1RZUEVfVExTX0RBVEFCQVNFKTsKLSAgZ190eXBlX2Vuc3VyZSAoR19UWVBFX1RMU19JTlRFUkFDVElPTik7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInNvdXBodHRwc3JjIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIEdTVF9UWVBFX1NPVVBfSFRUUF9TUkMpOwotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic291cGh0dHBjbGllbnRzaW5rIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1NPVVBfSFRUUF9DTElFTlRfU0lOSyk7Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChzb3VwX3V0aWxzX2RlYnVnLCAic291cHV0aWxzIiwgMCwgIlNvdXAgdXRpbHMiKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIHNvdXAsCi0gICAgImxpYnNvdXAgSFRUUCBjbGllbnQgc3JjL3NpbmsiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZXh0L3NvdXAvZ3N0c291cGh0dHBjbGllbnRzaW5rLmMgYi9leHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgxMjQ4OC4uMDAwMDAwMAotLS0gYS9leHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDkyMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMSBEYXZpZCBTY2hsZWVmIDxkc0BlbnRyb3B5d2F2ZS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBTdWl0ZSA1MDAsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMzUsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZ3N0c291cGh0dHBjbGllbnRzaW5rCi0gKgotICogVGhlIHNvdXBodHRwY2xpZW50c2luayBlbGVtZW50IHNlbmRzIHBpcGVsaW5lIGRhdGEgdG8gYW4gSFRUUCBzZXJ2ZXIKLSAqIHVzaW5nIEhUVFAgUFVUIGNvbW1hbmRzLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MzAwICEgdGhlb3JhZW5jICEgb2dnbXV4ICEKLSAqICAgc291cGh0dHBjbGllbnRzaW5rIGxvY2F0aW9uPWh0dHA6Ly9zZXJ2ZXIvZmlsZW5hbWUub2d2Ci0gKiBdfAotICogCi0gKiBUaGlzIGV4YW1wbGUgZW5jb2RlcyAxMCBzZWNvbmRzIG9mIHZpZGVvIGFuZCBzZW5kcyBpdCB0byB0aGUgSFRUUAotICogc2VydmVyICJzZXJ2ZXIiIHVzaW5nIEhUVFAgUFVUIGNvbW1hbmRzLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNpbmsuaD4KLSNpbmNsdWRlICJnc3Rzb3VwaHR0cGNsaWVudHNpbmsuaCIKLSNpbmNsdWRlICJnc3Rzb3VwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoc291cGh0dHBjbGllbnRzaW5rX2RiZyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzb3VwaHR0cGNsaWVudHNpbmtfZGJnCi0KLS8qIHByb3RvdHlwZXMgKi8KLQotCi1zdGF0aWMgdm9pZCBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wZXJ0eV9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9jYXBzIChHc3RCYXNlU2luayAqIHNpbmssCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19nZXRfdGltZXMgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdENsb2NrVGltZSAqIHN0YXJ0LCBHc3RDbG9ja1RpbWUgKiBlbmQpOwotc3RhdGljIGdib29sZWFuIGdzdF9zb3VwX2h0dHBfY2xpZW50X3Npbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19zdG9wIChHc3RCYXNlU2luayAqIHNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfdW5sb2NrIChHc3RCYXNlU2luayAqIHNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfcHJlcm9sbCAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfcmVzZXQgKEdzdFNvdXBIdHRwQ2xpZW50U2luayAqCi0gICAgc291cGh0dHBzaW5rKTsKLXN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZSAoU291cFNlc3Npb24gKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSAqIG1zZywKLSAgICBTb3VwQXV0aCAqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIHZvaWQgY2FsbGJhY2sgKFNvdXBTZXNzaW9uICogc2Vzc2lvbiwgU291cE1lc3NhZ2UgKiBtc2csCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9wcm94eSAoR3N0U291cEh0dHBDbGllbnRTaW5rICoKLSAgICBzb3VwaHR0cHNpbmssIGNvbnN0IGdjaGFyICogdXJpKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTE9DQVRJT04sCi0gIFBST1BfVVNFUl9BR0VOVCwKLSAgUFJPUF9BVVRPTUFUSUNfUkVESVJFQ1QsCi0gIFBST1BfUFJPWFksCi0gIFBST1BfVVNFUl9JRCwKLSAgUFJPUF9VU0VSX1BXLAotICBQUk9QX1BST1hZX0lELAotICBQUk9QX1BST1hZX1BXLAotICBQUk9QX0NPT0tJRVMsCi0gIFBST1BfU0VTU0lPTiwKLSAgUFJPUF9TT1VQX0xPR19MRVZFTCwKLSAgUFJPUF9SRVRSWV9ERUxBWSwKLSAgUFJPUF9SRVRSSUVTCi19OwotCi0jZGVmaW5lIERFRkFVTFRfVVNFUl9BR0VOVCAgICAgICAgICAgIkdTdHJlYW1lciBzb3VwaHR0cGNsaWVudHNpbmsgIgotI2RlZmluZSBERUZBVUxUX1NPVVBfTE9HX0xFVkVMICAgICAgIFNPVVBfTE9HR0VSX0xPR19OT05FCi0KLS8qIHBhZCB0ZW1wbGF0ZXMgKi8KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9zb3VwX2h0dHBfY2xpZW50X3Npbmtfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotCi0vKiBjbGFzcyBpbml0aWFsaXphdGlvbiAqLwotCi0jZGVmaW5lIGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0U291cEh0dHBDbGllbnRTaW5rLCBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rLAotICAgIEdTVF9UWVBFX0JBU0VfU0lOSyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2NsYXNzX2luaXQgKEdzdFNvdXBIdHRwQ2xpZW50U2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJhc2Vfc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJMb2NhdGlvbiIsCi0gICAgICAgICAgIlVSSSB0byBzZW5kIHRvIiwgIiIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9VU0VSX0FHRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVzZXItYWdlbnQiLCAiVXNlci1BZ2VudCIsCi0gICAgICAgICAgIlZhbHVlIG9mIHRoZSBVc2VyLUFnZW50IEhUVFAgcmVxdWVzdCBoZWFkZXIgZmllbGQiLAotICAgICAgICAgIERFRkFVTFRfVVNFUl9BR0VOVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX0FVVE9NQVRJQ19SRURJUkVDVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXV0b21hdGljLXJlZGlyZWN0IiwgImF1dG9tYXRpYy1yZWRpcmVjdCIsCi0gICAgICAgICAgIkF1dG9tYXRpY2FsbHkgZm9sbG93IEhUVFAgcmVkaXJlY3RzIChIVFRQIFN0YXR1cyBDb2RlIDN4eCkiLAotICAgICAgICAgIFRSVUUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9QUk9YWSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwcm94eSIsICJQcm94eSIsCi0gICAgICAgICAgIkhUVFAgcHJveHkgc2VydmVyIFVSSSIsICIiLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9VU0VSX0lELAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVzZXItaWQiLCAidXNlci1pZCIsCi0gICAgICAgICAgInVzZXIgaWQgZm9yIGF1dGhlbnRpY2F0aW9uIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVNFUl9QVywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJ1c2VyLXB3IiwgInVzZXItcHciLAotICAgICAgICAgICJ1c2VyIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbiIsICIiLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BST1hZX0lELAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInByb3h5LWlkIiwgInByb3h5LWlkIiwKLSAgICAgICAgICAidXNlciBpZCBmb3IgcHJveHkgYXV0aGVudGljYXRpb24iLCAiIiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QUk9YWV9QVywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwcm94eS1wdyIsICJwcm94eS1wdyIsCi0gICAgICAgICAgInVzZXIgcGFzc3dvcmQgZm9yIHByb3h5IGF1dGhlbnRpY2F0aW9uIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0VTU0lPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJzZXNzaW9uIiwgInNlc3Npb24iLAotICAgICAgICAgICJTb3VwU2Vzc2lvbiBvYmplY3QgdG8gdXNlIGZvciBjb21tdW5pY2F0aW9uIiwKLSAgICAgICAgICBTT1VQX1RZUEVfU0VTU0lPTiwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ09PS0lFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNvb2tpZXMiLCAiQ29va2llcyIsICJIVFRQIHJlcXVlc3QgY29va2llcyIsCi0gICAgICAgICAgR19UWVBFX1NUUlYsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JFVFJZX0RFTEFZLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInJldHJ5LWRlbGF5IiwgIlJldHJ5IERlbGF5IiwKLSAgICAgICAgICAiRGVsYXkgaW4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMgYWZ0ZXIgYSBmYWlsdXJlIiwgMSwgR19NQVhJTlQsIDUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVUUklFUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJyZXRyaWVzIiwgIlJldHJpZXMiLAotICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLCB6ZXJvIHRvIGRpc2FibGUsIC0xIHRvIHJldHJ5IGZvcmV2ZXIiLAotICAgICAgICAgIC0xLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gLyoqCi0gICAqIEdzdFNvdXBIdHRwQ2xpZW50U2luazo6aHR0cC1sb2ctbGV2ZWw6Ci0gICAqCi0gICAqIElmIHNldCBhbmQgPiAwLCBjYXB0dXJlcyBhbmQgZHVtcHMgSFRUUCBzZXNzaW9uIGRhdGEgYXMKLSAgICogbG9nIG1lc3NhZ2VzIGlmIGxvZyBsZXZlbCA+PSBHU1RfTEVWRUxfVFJBQ0UKLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TT1VQX0xPR19MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiaHR0cC1sb2ctbGV2ZWwiLCAiSFRUUCBsb2cgbGV2ZWwiLAotICAgICAgICAgICJTZXQgbG9nIGxldmVsIGZvciBzb3VwJ3MgSFRUUCBzZXNzaW9uIGxvZyIsCi0gICAgICAgICAgU09VUF9UWVBFX0xPR0dFUl9MT0dfTEVWRUwsIERFRkFVTFRfU09VUF9MT0dfTEVWRUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiSFRUUCBjbGllbnQgc2luayIsCi0gICAgICAiR2VuZXJpYyIsICJTZW5kcyBzdHJlYW1zIHRvIEhUVFAgc2VydmVyIHZpYSBQVVQiLAotICAgICAgIkRhdmlkIFNjaGxlZWYgPGRzQGVudHJvcHl3YXZlLmNvbT4iKTsKLQotICBiYXNlX3NpbmtfY2xhc3MtPnNldF9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9jYXBzKTsKLSAgaWYgKDApCi0gICAgYmFzZV9zaW5rX2NsYXNzLT5nZXRfdGltZXMgPQotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19nZXRfdGltZXMpOwotICBiYXNlX3NpbmtfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfY2xpZW50X3Npbmtfc3RhcnQpOwotICBiYXNlX3NpbmtfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19zdG9wKTsKLSAgYmFzZV9zaW5rX2NsYXNzLT51bmxvY2sgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfdW5sb2NrKTsKLSAgYmFzZV9zaW5rX2NsYXNzLT5ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2V2ZW50KTsKLSAgaWYgKDApCi0gICAgYmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xsID0KLSAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfcHJlcm9sbCk7Ci0gIGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3JlbmRlcik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHNvdXBodHRwY2xpZW50c2lua19kYmcsICJzb3VwaHR0cGNsaWVudHNpbmsiLCAwLAotICAgICAgInNvdXBodHRwY2xpZW50c2luayBlbGVtZW50Iik7Ci0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfaW5pdCAoR3N0U291cEh0dHBDbGllbnRTaW5rICogc291cGh0dHBzaW5rKQotewotICBjb25zdCBjaGFyICpwcm94eTsKLQotICBnX211dGV4X2luaXQgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLSAgZ19jb25kX2luaXQgKCZzb3VwaHR0cHNpbmstPmNvbmQpOwotCi0gIHNvdXBodHRwc2luay0+bG9jYXRpb24gPSBOVUxMOwotICBzb3VwaHR0cHNpbmstPmF1dG9tYXRpY19yZWRpcmVjdCA9IFRSVUU7Ci0gIHNvdXBodHRwc2luay0+dXNlcl9hZ2VudCA9IGdfc3RyZHVwIChERUZBVUxUX1VTRVJfQUdFTlQpOwotICBzb3VwaHR0cHNpbmstPnVzZXJfaWQgPSBOVUxMOwotICBzb3VwaHR0cHNpbmstPnVzZXJfcHcgPSBOVUxMOwotICBzb3VwaHR0cHNpbmstPnByb3h5X2lkID0gTlVMTDsKLSAgc291cGh0dHBzaW5rLT5wcm94eV9wdyA9IE5VTEw7Ci0gIHNvdXBodHRwc2luay0+cHJvcF9zZXNzaW9uID0gTlVMTDsKLSAgc291cGh0dHBzaW5rLT50aW1lb3V0ID0gMTsKLSAgc291cGh0dHBzaW5rLT5sb2dfbGV2ZWwgPSBERUZBVUxUX1NPVVBfTE9HX0xFVkVMOwotICBzb3VwaHR0cHNpbmstPnJldHJ5X2RlbGF5ID0gNTsKLSAgc291cGh0dHBzaW5rLT5yZXRyaWVzID0gMDsKLSAgcHJveHkgPSBnX2dldGVudiAoImh0dHBfcHJveHkiKTsKLSAgaWYgKHByb3h5ICYmICFnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9wcm94eSAoc291cGh0dHBzaW5rLCBwcm94eSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNvdXBodHRwc2luaywKLSAgICAgICAgIlRoZSBwcm94eSBpbiB0aGUgaHR0cF9wcm94eSBlbnYgdmFyIChcIiVzXCIpIGNhbm5vdCBiZSBwYXJzZWQuIiwKLSAgICAgICAgcHJveHkpOwotICB9Ci0KLSAgZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19yZXNldCAoc291cGh0dHBzaW5rKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfcmVzZXQgKEdzdFNvdXBIdHRwQ2xpZW50U2luayAqIHNvdXBodHRwc2luaykKLXsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoc291cGh0dHBzaW5rLT5xdWV1ZWRfYnVmZmVycywKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnMgPSBOVUxMOwotICBnX2ZyZWUgKHNvdXBodHRwc2luay0+cmVhc29uX3BocmFzZSk7Ci0gIHNvdXBodHRwc2luay0+cmVhc29uX3BocmFzZSA9IE5VTEw7Ci0gIHNvdXBodHRwc2luay0+c3RhdHVzX2NvZGUgPSAwOwotICBzb3VwaHR0cHNpbmstPm9mZnNldCA9IDA7Ci0gIHNvdXBodHRwc2luay0+ZmFpbHVyZXMgPSAwOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHNvdXBodHRwc2luay0+c3RyZWFtaGVhZGVyX2J1ZmZlcnMsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBzb3VwaHR0cHNpbmstPnN0cmVhbWhlYWRlcl9idWZmZXJzID0gTlVMTDsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoc291cGh0dHBzaW5rLT5zZW50X2J1ZmZlcnMsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBzb3VwaHR0cHNpbmstPnNlbnRfYnVmZmVycyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19zZXRfcHJveHkgKEdzdFNvdXBIdHRwQ2xpZW50U2luayAqIHNvdXBodHRwc2luaywKLSAgICBjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgaWYgKHNvdXBodHRwc2luay0+cHJveHkpIHsKLSAgICBzb3VwX3VyaV9mcmVlIChzb3VwaHR0cHNpbmstPnByb3h5KTsKLSAgICBzb3VwaHR0cHNpbmstPnByb3h5ID0gTlVMTDsKLSAgfQotICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAodXJpLCAiaHR0cDovLyIpKSB7Ci0gICAgc291cGh0dHBzaW5rLT5wcm94eSA9IHNvdXBfdXJpX25ldyAodXJpKTsKLSAgfSBlbHNlIHsKLSAgICBnY2hhciAqbmV3X3VyaSA9IGdfc3RyY29uY2F0ICgiaHR0cDovLyIsIHVyaSwgTlVMTCk7Ci0KLSAgICBzb3VwaHR0cHNpbmstPnByb3h5ID0gc291cF91cmlfbmV3IChuZXdfdXJpKTsKLSAgICBnX2ZyZWUgKG5ld191cmkpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQKLWdzdF9zb3VwX2h0dHBfY2xpZW50X3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wZXJ0eV9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTb3VwSHR0cENsaWVudFNpbmsgKnNvdXBodHRwc2luayA9IEdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTksgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0gIHN3aXRjaCAocHJvcGVydHlfaWQpIHsKLSAgICBjYXNlIFBST1BfU0VTU0lPTjoKLSAgICAgIGlmIChzb3VwaHR0cHNpbmstPnByb3Bfc2Vzc2lvbikgewotICAgICAgICBnX29iamVjdF91bnJlZiAoc291cGh0dHBzaW5rLT5wcm9wX3Nlc3Npb24pOwotICAgICAgfQotICAgICAgc291cGh0dHBzaW5rLT5wcm9wX3Nlc3Npb24gPSBnX3ZhbHVlX2R1cF9vYmplY3QgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIGdfZnJlZSAoc291cGh0dHBzaW5rLT5sb2NhdGlvbik7Ci0gICAgICBzb3VwaHR0cHNpbmstPmxvY2F0aW9uID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBzb3VwaHR0cHNpbmstPm9mZnNldCA9IDA7Ci0gICAgICBpZiAoKHNvdXBodHRwc2luay0+bG9jYXRpb24gPT0gTlVMTCkKLSAgICAgICAgICB8fCAhZ3N0X3VyaV9pc192YWxpZCAoc291cGh0dHBzaW5rLT5sb2NhdGlvbikpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzb3VwaHR0cHNpbmssCi0gICAgICAgICAgICAiVGhlIGxvY2F0aW9uIChcIiVzXCIpIHNldCwgaXMgbm90IGEgdmFsaWQgdXJpLiIsCi0gICAgICAgICAgICBzb3VwaHR0cHNpbmstPmxvY2F0aW9uKTsKLSAgICAgICAgZ19mcmVlIChzb3VwaHR0cHNpbmstPmxvY2F0aW9uKTsKLSAgICAgICAgc291cGh0dHBzaW5rLT5sb2NhdGlvbiA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9BR0VOVDoKLSAgICAgIGdfZnJlZSAoc291cGh0dHBzaW5rLT51c2VyX2FnZW50KTsKLSAgICAgIHNvdXBodHRwc2luay0+dXNlcl9hZ2VudCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FVVE9NQVRJQ19SRURJUkVDVDoKLSAgICAgIHNvdXBodHRwc2luay0+YXV0b21hdGljX3JlZGlyZWN0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRVJfSUQ6Ci0gICAgICBnX2ZyZWUgKHNvdXBodHRwc2luay0+dXNlcl9pZCk7Ci0gICAgICBzb3VwaHR0cHNpbmstPnVzZXJfaWQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VSX1BXOgotICAgICAgZ19mcmVlIChzb3VwaHR0cHNpbmstPnVzZXJfcHcpOwotICAgICAgc291cGh0dHBzaW5rLT51c2VyX3B3ID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPWFlfSUQ6Ci0gICAgICBnX2ZyZWUgKHNvdXBodHRwc2luay0+cHJveHlfaWQpOwotICAgICAgc291cGh0dHBzaW5rLT5wcm94eV9pZCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST1hZX1BXOgotICAgICAgZ19mcmVlIChzb3VwaHR0cHNpbmstPnByb3h5X3B3KTsKLSAgICAgIHNvdXBodHRwc2luay0+cHJveHlfcHcgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWToKLSAgICB7Ci0gICAgICBjb25zdCBnY2hhciAqcHJveHk7Ci0KLSAgICAgIHByb3h5ID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChwcm94eSA9PSBOVUxMKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgicHJveHkgcHJvcGVydHkgY2Fubm90IGJlIE5VTEwiKTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgICAgaWYgKCFnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3NldF9wcm94eSAoc291cGh0dHBzaW5rLCBwcm94eSkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJiYWRseSBmb3JtYXR0ZWQgcHJveHkgVVJJIik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQ09PS0lFUzoKLSAgICAgIGdfc3RyZnJlZXYgKHNvdXBodHRwc2luay0+Y29va2llcyk7Ci0gICAgICBzb3VwaHR0cHNpbmstPmNvb2tpZXMgPSBnX3N0cmR1cHYgKGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPVVBfTE9HX0xFVkVMOgotICAgICAgc291cGh0dHBzaW5rLT5sb2dfbGV2ZWwgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVUUllfREVMQVk6Ci0gICAgICBzb3VwaHR0cHNpbmstPnJldHJ5X2RlbGF5ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVUUklFUzoKLSAgICAgIHNvdXBodHRwc2luay0+cmV0cmllcyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLWRvbmU6Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci19Ci0KLXZvaWQKLWdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wZXJ0eV9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTb3VwSHR0cENsaWVudFNpbmsgKnNvdXBodHRwc2luayA9IEdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgewotICAgIGNhc2UgUFJPUF9TRVNTSU9OOgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgc291cGh0dHBzaW5rLT5wcm9wX3Nlc3Npb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc291cGh0dHBzaW5rLT5sb2NhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT01BVElDX1JFRElSRUNUOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNvdXBodHRwc2luay0+YXV0b21hdGljX3JlZGlyZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VSX0FHRU5UOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc291cGh0dHBzaW5rLT51c2VyX2FnZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VSX0lEOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc291cGh0dHBzaW5rLT51c2VyX2lkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VSX1BXOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc291cGh0dHBzaW5rLT51c2VyX3B3KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWV9JRDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNvdXBodHRwc2luay0+cHJveHlfaWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST1hZX1BXOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc291cGh0dHBzaW5rLT5wcm94eV9wdyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPWFk6Ci0gICAgICBpZiAoc291cGh0dHBzaW5rLT5wcm94eSA9PSBOVUxMKQotICAgICAgICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICh2YWx1ZSwgIiIpOwotICAgICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKnByb3h5ID0gc291cF91cmlfdG9fc3RyaW5nIChzb3VwaHR0cHNpbmstPnByb3h5LCBGQUxTRSk7Ci0KLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgcHJveHkpOwotICAgICAgICBnX2ZyZWUgKHByb3h5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT09LSUVTOgotICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCBnX3N0cmR1cHYgKHNvdXBodHRwc2luay0+Y29va2llcykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPVVBfTE9HX0xFVkVMOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNvdXBodHRwc2luay0+bG9nX2xldmVsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVRSWV9ERUxBWToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNvdXBodHRwc2luay0+cmV0cnlfZGVsYXkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFVFJJRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzb3VwaHR0cHNpbmstPnJldHJpZXMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotdm9pZAotZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RTb3VwSHR0cENsaWVudFNpbmsgKnNvdXBodHRwc2luayA9IEdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTksgKG9iamVjdCk7Ci0KLSAgLyogY2xlYW4gdXAgYXMgcG9zc2libGUuICBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzICovCi0gIGlmIChzb3VwaHR0cHNpbmstPnByb3Bfc2Vzc2lvbikKLSAgICBnX29iamVjdF91bnJlZiAoc291cGh0dHBzaW5rLT5wcm9wX3Nlc3Npb24pOwotICBzb3VwaHR0cHNpbmstPnByb3Bfc2Vzc2lvbiA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXZvaWQKLWdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNvdXBIdHRwQ2xpZW50U2luayAqc291cGh0dHBzaW5rID0gR1NUX1NPVVBfSFRUUF9DTElFTlRfU0lOSyAob2JqZWN0KTsKLQotICAvKiBjbGVhbiB1cCBvYmplY3QgaGVyZSAqLwotCi0gIGdfZnJlZSAoc291cGh0dHBzaW5rLT51c2VyX2FnZW50KTsKLSAgZ19mcmVlIChzb3VwaHR0cHNpbmstPnVzZXJfaWQpOwotICBnX2ZyZWUgKHNvdXBodHRwc2luay0+dXNlcl9wdyk7Ci0gIGdfZnJlZSAoc291cGh0dHBzaW5rLT5wcm94eV9pZCk7Ci0gIGdfZnJlZSAoc291cGh0dHBzaW5rLT5wcm94eV9wdyk7Ci0gIGlmIChzb3VwaHR0cHNpbmstPnByb3h5KQotICAgIHNvdXBfdXJpX2ZyZWUgKHNvdXBodHRwc2luay0+cHJveHkpOwotICBnX2ZyZWUgKHNvdXBodHRwc2luay0+bG9jYXRpb24pOwotICBnX3N0cmZyZWV2IChzb3VwaHR0cHNpbmstPmNvb2tpZXMpOwotCi0gIGdfY29uZF9jbGVhciAoJnNvdXBodHRwc2luay0+Y29uZCk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zb3VwX2h0dHBfY2xpZW50X3Npbmtfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFNvdXBIdHRwQ2xpZW50U2luayAqc291cGh0dHBzaW5rID0gR1NUX1NPVVBfSFRUUF9DTElFTlRfU0lOSyAoc2luayk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBHVmFsdWUgKnZhbHVlX2FycmF5OwotICBpbnQgaSwgbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzb3VwaHR0cHNpbmssICJuZXcgc3RyZWFtIGhlYWRlcnMgc2V0Iik7Ci0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICB2YWx1ZV9hcnJheSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJzdHJlYW1oZWFkZXIiKTsKLSAgaWYgKHZhbHVlX2FycmF5KSB7Ci0gICAgZ19saXN0X2ZyZWVfZnVsbCAoc291cGh0dHBzaW5rLT5zdHJlYW1oZWFkZXJfYnVmZmVycywKLSAgICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgICBzb3VwaHR0cHNpbmstPnN0cmVhbWhlYWRlcl9idWZmZXJzID0gTlVMTDsKLQotICAgIG4gPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlX2FycmF5KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKnZhbHVlOwotICAgICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gICAgICB2YWx1ZSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHZhbHVlX2FycmF5LCBpKTsKLSAgICAgIGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSkpOwotICAgICAgc291cGh0dHBzaW5rLT5zdHJlYW1oZWFkZXJfYnVmZmVycyA9Ci0gICAgICAgICAgZ19saXN0X2FwcGVuZCAoc291cGh0dHBzaW5rLT5zdHJlYW1oZWFkZXJfYnVmZmVycywKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2dldF90aW1lcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Q2xvY2tUaW1lICogc3RhcnQsIEdzdENsb2NrVGltZSAqIGVuZCkKLXsKLQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRocmVhZF9yZWFkeV9pZGxlX2NiIChncG9pbnRlciBkYXRhKQotewotICBHc3RTb3VwSHR0cENsaWVudFNpbmsgKnNvdXBodHRwc2luayA9IEdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTksgKGRhdGEpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzb3VwaHR0cHNpbmssICJ0aHJlYWQgcmVhZHkiKTsKLQotICBnX211dGV4X2xvY2sgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLSAgZ19jb25kX3NpZ25hbCAoJnNvdXBodHRwc2luay0+Y29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0KLSAgcmV0dXJuIEZBTFNFOyAgICAgICAgICAgICAgICAgLyogb25seSBydW4gb25jZSAqLwotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXRocmVhZF9mdW5jIChncG9pbnRlciBwdHIpCi17Ci0gIEdzdFNvdXBIdHRwQ2xpZW50U2luayAqc291cGh0dHBzaW5rID0gR1NUX1NPVVBfSFRUUF9DTElFTlRfU0lOSyAocHRyKTsKLQotICBHU1RfREVCVUcgKCJ0aHJlYWQgc3RhcnQiKTsKLQotICBnX21haW5fbG9vcF9ydW4gKHNvdXBodHRwc2luay0+bG9vcCk7Ci0KLSAgR1NUX0RFQlVHICgidGhyZWFkIHF1aXQiKTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3N0YXJ0IChHc3RCYXNlU2luayAqIHNpbmspCi17Ci0gIEdzdFNvdXBIdHRwQ2xpZW50U2luayAqc291cGh0dHBzaW5rID0gR1NUX1NPVVBfSFRUUF9DTElFTlRfU0lOSyAoc2luayk7Ci0KLSAgaWYgKHNvdXBodHRwc2luay0+cHJvcF9zZXNzaW9uKSB7Ci0gICAgc291cGh0dHBzaW5rLT5zZXNzaW9uID0gc291cGh0dHBzaW5rLT5wcm9wX3Nlc3Npb247Ci0gIH0gZWxzZSB7Ci0gICAgR1NvdXJjZSAqc291cmNlOwotICAgIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0gICAgc291cGh0dHBzaW5rLT5jb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3ICgpOwotCi0gICAgLyogc2V0IHVwIGlkbGUgc291cmNlIHRvIHNpZ25hbCB3aGVuIHRoZSBtYWluIGxvb3AgaXMgcnVubmluZyBhbmQKLSAgICAgKiBpdCdzIHNhZmUgZm9yIDo6c3RvcCgpIHRvIGNhbGwgZ19tYWluX2xvb3BfcXVpdCgpICovCi0gICAgc291cmNlID0gZ19pZGxlX3NvdXJjZV9uZXcgKCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrIChzb3VyY2UsIHRocmVhZF9yZWFkeV9pZGxlX2NiLCBzaW5rLCBOVUxMKTsKLSAgICBnX3NvdXJjZV9hdHRhY2ggKHNvdXJjZSwgc291cGh0dHBzaW5rLT5jb250ZXh0KTsKLSAgICBnX3NvdXJjZV91bnJlZiAoc291cmNlKTsKLQotICAgIHNvdXBodHRwc2luay0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyAoc291cGh0dHBzaW5rLT5jb250ZXh0LCBUUlVFKTsKLQotICAgIGdfbXV0ZXhfbG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotCi0gICAgc291cGh0dHBzaW5rLT50aHJlYWQgPSBnX3RocmVhZF90cnlfbmV3ICgic291cGh0dHBjbGllbnRzaW5rLXRocmVhZCIsCi0gICAgICAgIHRocmVhZF9mdW5jLCBzb3VwaHR0cHNpbmssICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IgIT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAiZmFpbGVkIHRvIHN0YXJ0IHRocmVhZCwgJXMiLAotICAgICAgICAgIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc291cGh0dHBzaW5rLCAid2FpdGluZyBmb3IgbWFpbiBsb29wIHRocmVhZCB0byBzdGFydCB1cCIpOwotICAgIGdfY29uZF93YWl0ICgmc291cGh0dHBzaW5rLT5jb25kLCAmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLSAgICBHU1RfTE9HX09CSkVDVCAoc291cGh0dHBzaW5rLCAibWFpbiBsb29wIHRocmVhZCBydW5uaW5nIik7Ci0KLSAgICBpZiAoc291cGh0dHBzaW5rLT5wcm94eSA9PSBOVUxMKSB7Ci0gICAgICBzb3VwaHR0cHNpbmstPnNlc3Npb24gPQotICAgICAgICAgIHNvdXBfc2Vzc2lvbl9hc3luY19uZXdfd2l0aF9vcHRpb25zIChTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCwKLSAgICAgICAgICBzb3VwaHR0cHNpbmstPmNvbnRleHQsIFNPVVBfU0VTU0lPTl9VU0VSX0FHRU5ULAotICAgICAgICAgIHNvdXBodHRwc2luay0+dXNlcl9hZ2VudCwgU09VUF9TRVNTSU9OX1RJTUVPVVQsIHNvdXBodHRwc2luay0+dGltZW91dCwKLSAgICAgICAgICBTT1VQX1NFU1NJT05fQUREX0ZFQVRVUkVfQllfVFlQRSwgU09VUF9UWVBFX1BST1hZX1JFU09MVkVSX0RFRkFVTFQsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNvdXBodHRwc2luay0+c2Vzc2lvbiA9Ci0gICAgICAgICAgc291cF9zZXNzaW9uX2FzeW5jX25ld193aXRoX29wdGlvbnMgKFNPVVBfU0VTU0lPTl9BU1lOQ19DT05URVhULAotICAgICAgICAgIHNvdXBodHRwc2luay0+Y29udGV4dCwgU09VUF9TRVNTSU9OX1VTRVJfQUdFTlQsCi0gICAgICAgICAgc291cGh0dHBzaW5rLT51c2VyX2FnZW50LCBTT1VQX1NFU1NJT05fVElNRU9VVCwgc291cGh0dHBzaW5rLT50aW1lb3V0LAotICAgICAgICAgIFNPVVBfU0VTU0lPTl9QUk9YWV9VUkksIHNvdXBodHRwc2luay0+cHJveHksIE5VTEwpOwotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHNvdXBodHRwc2luay0+c2Vzc2lvbiwgImF1dGhlbnRpY2F0ZSIsCi0gICAgICAgIEdfQ0FMTEJBQ0sgKGF1dGhlbnRpY2F0ZSksIHNvdXBodHRwc2luayk7Ci0gIH0KLQotICAvKiBTZXQgdXAgbG9nZ2luZyAqLwotICBnc3Rfc291cF91dGlsX2xvZ19zZXR1cCAoc291cGh0dHBzaW5rLT5zZXNzaW9uLCBzb3VwaHR0cHNpbmstPmxvZ19sZXZlbCwKLSAgICAgIEdTVF9FTEVNRU5UIChzb3VwaHR0cHNpbmspKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0U291cEh0dHBDbGllbnRTaW5rICpzb3VwaHR0cHNpbmsgPSBHU1RfU09VUF9IVFRQX0NMSUVOVF9TSU5LIChzaW5rKTsKLQotICBHU1RfREVCVUcgKCJzdG9wIik7Ci0KLSAgaWYgKHNvdXBodHRwc2luay0+cHJvcF9zZXNzaW9uID09IE5VTEwpIHsKLSAgICBzb3VwX3Nlc3Npb25fYWJvcnQgKHNvdXBodHRwc2luay0+c2Vzc2lvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNvdXBodHRwc2luay0+c2Vzc2lvbik7Ci0gIH0KLQotICBnX211dGV4X2xvY2sgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLSAgaWYgKHNvdXBodHRwc2luay0+dGltZXIpIHsKLSAgICBnX3NvdXJjZV9kZXN0cm95IChzb3VwaHR0cHNpbmstPnRpbWVyKTsKLSAgICBnX3NvdXJjZV91bnJlZiAoc291cGh0dHBzaW5rLT50aW1lcik7Ci0gICAgc291cGh0dHBzaW5rLT50aW1lciA9IE5VTEw7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLQotICBpZiAoc291cGh0dHBzaW5rLT5sb29wKSB7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCAoc291cGh0dHBzaW5rLT5sb29wKTsKLSAgICBnX211dGV4X2xvY2sgKCZzb3VwaHR0cHNpbmstPm11dGV4KTsKLSAgICBnX2NvbmRfc2lnbmFsICgmc291cGh0dHBzaW5rLT5jb25kKTsKLSAgICBnX211dGV4X3VubG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotICAgIGdfdGhyZWFkX2pvaW4gKHNvdXBodHRwc2luay0+dGhyZWFkKTsKLSAgICBnX21haW5fbG9vcF91bnJlZiAoc291cGh0dHBzaW5rLT5sb29wKTsKLSAgICBzb3VwaHR0cHNpbmstPmxvb3AgPSBOVUxMOwotICB9Ci0gIGlmIChzb3VwaHR0cHNpbmstPmNvbnRleHQpIHsKLSAgICBnX21haW5fY29udGV4dF91bnJlZiAoc291cGh0dHBzaW5rLT5jb250ZXh0KTsKLSAgICBzb3VwaHR0cHNpbmstPmNvbnRleHQgPSBOVUxMOwotICB9Ci0KLSAgZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19yZXNldCAoc291cGh0dHBzaW5rKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX3VubG9jayAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBHU1RfREVCVUcgKCJ1bmxvY2siKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2V2ZW50IChHc3RCYXNlU2luayAqIHNpbmssIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFNvdXBIdHRwQ2xpZW50U2luayAqc291cGh0dHBzaW5rID0gR1NUX1NPVVBfSFRUUF9DTElFTlRfU0lOSyAoc2luayk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAiZXZlbnQiKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAiZ290IGVvcyIpOwotICAgIGdfbXV0ZXhfbG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotICAgIHdoaWxlIChzb3VwaHR0cHNpbmstPm1lc3NhZ2UpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNvdXBodHRwc2luaywgIndhaXRpbmciKTsKLSAgICAgIGdfY29uZF93YWl0ICgmc291cGh0dHBzaW5rLT5jb25kLCAmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0gICAgfQotICAgIGdfbXV0ZXhfdW5sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAiZmluaXNoZWQgZW9zIik7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZXZlbnQgKHNpbmssIGV2ZW50KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zb3VwX2h0dHBfY2xpZW50X3NpbmtfcHJlcm9sbCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdTVF9ERUJVRyAoInByZXJvbGwiKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX21lc3NhZ2VfbG9ja2VkIChHc3RTb3VwSHR0cENsaWVudFNpbmsgKiBzb3VwaHR0cHNpbmspCi17Ci0gIEdMaXN0ICpnOwotICBndWludDY0IG47Ci0KLSAgaWYgKHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnMgPT0gTlVMTCB8fCBzb3VwaHR0cHNpbmstPm1lc3NhZ2UpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBJZiB0aGUgVVJJIHdlbnQgYXdheSwgZHJvcCBhbGwgdGhlc2UgYnVmZmVycyAqLwotICBpZiAoc291cGh0dHBzaW5rLT5sb2NhdGlvbiA9PSBOVUxMKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAiVVJJIHdlbnQgYXdheSwgZHJvcHBpbmcgcXVldWVkIGJ1ZmZlcnMiKTsKLSAgICBnX2xpc3RfZnJlZV9mdWxsIChzb3VwaHR0cHNpbmstPnF1ZXVlZF9idWZmZXJzLAotICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICAgIHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnMgPSBOVUxMOwotICAgIHJldHVybjsKLSAgfQotCi0gIHNvdXBodHRwc2luay0+bWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcgKCJQVVQiLCBzb3VwaHR0cHNpbmstPmxvY2F0aW9uKTsKLSAgaWYgKHNvdXBodHRwc2luay0+bWVzc2FnZSA9PSBOVUxMKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzb3VwaHR0cHNpbmssCi0gICAgICAgICJVUkkgY291bGQgbm90IGJlIHBhcnNlZCB3aGlsZSBjcmVhdGluZyBtZXNzYWdlLiIpOwotICAgIGdfbGlzdF9mcmVlX2Z1bGwgKHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnMsCi0gICAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gICAgc291cGh0dHBzaW5rLT5xdWV1ZWRfYnVmZmVycyA9IE5VTEw7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc291cF9tZXNzYWdlX3NldF9mbGFncyAoc291cGh0dHBzaW5rLT5tZXNzYWdlLAotICAgICAgKHNvdXBodHRwc2luay0+YXV0b21hdGljX3JlZGlyZWN0ID8gMCA6IFNPVVBfTUVTU0FHRV9OT19SRURJUkVDVCkpOwotCi0gIGlmIChzb3VwaHR0cHNpbmstPmNvb2tpZXMpIHsKLSAgICBnY2hhciAqKmNvb2tpZTsKLQotICAgIGZvciAoY29va2llID0gc291cGh0dHBzaW5rLT5jb29raWVzOyAqY29va2llICE9IE5VTEw7IGNvb2tpZSsrKSB7Ci0gICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKHNvdXBodHRwc2luay0+bWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLAotICAgICAgICAgICJDb29raWUiLCAqY29va2llKTsKLSAgICB9Ci0gIH0KLQotICBuID0gMDsKLSAgaWYgKHNvdXBodHRwc2luay0+b2Zmc2V0ID09IDApIHsKLSAgICBmb3IgKGcgPSBzb3VwaHR0cHNpbmstPnN0cmVhbWhlYWRlcl9idWZmZXJzOyBnOyBnID0gZ19saXN0X25leHQgKGcpKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGctPmRhdGE7Ci0gICAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAicXVldWVpbmcgc3RyZWFtIGhlYWRlcnMiKTsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAvKiBTdHJlYW0gaGVhZGVycyBhcmUgdXBkYXRlZCB3aGVuZXZlciA6OnNldF9jYXBzIGlzIGNhbGxlZCwgc28gdGhlcmUncwotICAgICAgICogbm8gZ3VhcmFudGVlcyBhYm91dCB0aGVpciBsaWZldGltZSBhbmQgd2UgYXNrIGxpYnNvdXAgdG8gY29weSB0aGVtIAotICAgICAgICogaW50byB0aGUgbWVzc2FnZSBib2R5IHdpdGggU09VUF9NRU1PUllfQ09QWS4gKi8KLSAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCAoc291cGh0dHBzaW5rLT5tZXNzYWdlLT5yZXF1ZXN0X2JvZHksCi0gICAgICAgICAgU09VUF9NRU1PUllfQ09QWSwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgIG4gKz0gbWFwLnNpemU7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIH0KLSAgfQotCi0gIGZvciAoZyA9IHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnM7IGc7IGcgPSBnX2xpc3RfbmV4dCAoZykpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGctPmRhdGE7Ci0gICAgaWYgKCFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpKSB7Ci0gICAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIC8qIFF1ZXVlZCBidWZmZXJzIGFyZSBvbmx5IGZyZWVkIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWFpbmxvb3AKLSAgICAgICAqIGFmdGVyIHRoZSBtZXNzYWdlIGJvZHkgaGFzIGJlZW4gd3JpdHRlbiBvdXQsIHNvIHdlIGRvbid0IG5lZWQgbGlic291cAotICAgICAgICogdG8gY29weSB0aG9zZSB3aGlsZSBhcHBlbmRpbmcgdG8gdGhlIGJvZHkuIEhvd2V2ZXIsIGlmIHRoZSBidWZmZXIgaXMKLSAgICAgICAqIHVzZWQgZWxzZXdoZXJlLCBpdCBzaG91bGQgYmUgY29waWVkLiBIZW5jZSwgU09VUF9NRU1PUllfVEVNUE9SQVJZLiAqLwotICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kIChzb3VwaHR0cHNpbmstPm1lc3NhZ2UtPnJlcXVlc3RfYm9keSwKLSAgICAgICAgICBTT1VQX01FTU9SWV9URU1QT1JBUlksIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgICBuICs9IG1hcC5zaXplOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoc291cGh0dHBzaW5rLT5vZmZzZXQgIT0gMCkgewotICAgIGNoYXIgKnM7Ci0gICAgcyA9IGdfc3RyZHVwX3ByaW50ZiAoImJ5dGVzICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUICIvKiIsCi0gICAgICAgIHNvdXBodHRwc2luay0+b2Zmc2V0LCBzb3VwaHR0cHNpbmstPm9mZnNldCArIG4gLSAxKTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKHNvdXBodHRwc2luay0+bWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLAotICAgICAgICAiQ29udGVudC1SYW5nZSIsIHMpOwotICAgIGdfZnJlZSAocyk7Ci0gIH0KLQotICBpZiAobiA9PSAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLAotICAgICAgICAidG90YWwgc2l6ZSBvZiBidWZmZXJzIHF1ZXVlZCBpcyAwLCBmcmVlaW5nIGV2ZXJ5dGhpbmciKTsKLSAgICBnX2xpc3RfZnJlZV9mdWxsIChzb3VwaHR0cHNpbmstPnF1ZXVlZF9idWZmZXJzLAotICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICAgIHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnMgPSBOVUxMOwotICAgIGdfb2JqZWN0X3VucmVmIChzb3VwaHR0cHNpbmstPm1lc3NhZ2UpOwotICAgIHNvdXBodHRwc2luay0+bWVzc2FnZSA9IE5VTEw7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc291cGh0dHBzaW5rLT5zZW50X2J1ZmZlcnMgPSBzb3VwaHR0cHNpbmstPnF1ZXVlZF9idWZmZXJzOwotICBzb3VwaHR0cHNpbmstPnF1ZXVlZF9idWZmZXJzID0gTlVMTDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzb3VwaHR0cHNpbmssCi0gICAgICAicXVldWUgbWVzc2FnZSAlIiBHX0dVSU5UNjRfRk9STUFUICIgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIHNvdXBodHRwc2luay0+b2Zmc2V0LCBuKTsKLSAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHNvdXBodHRwc2luay0+c2Vzc2lvbiwgc291cGh0dHBzaW5rLT5tZXNzYWdlLAotICAgICAgY2FsbGJhY2ssIHNvdXBodHRwc2luayk7Ci0KLSAgc291cGh0dHBzaW5rLT5vZmZzZXQgKz0gbjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zZW5kX21lc3NhZ2UgKEdzdFNvdXBIdHRwQ2xpZW50U2luayAqIHNvdXBodHRwc2luaykKLXsKLSAgZ19tdXRleF9sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0gIHNlbmRfbWVzc2FnZV9sb2NrZWQgKHNvdXBodHRwc2luayk7Ci0gIGlmIChzb3VwaHR0cHNpbmstPnRpbWVyKSB7Ci0gICAgZ19zb3VyY2VfZGVzdHJveSAoc291cGh0dHBzaW5rLT50aW1lcik7Ci0gICAgZ19zb3VyY2VfdW5yZWYgKHNvdXBodHRwc2luay0+dGltZXIpOwotICAgIHNvdXBodHRwc2luay0+dGltZXIgPSBOVUxMOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotY2FsbGJhY2sgKFNvdXBTZXNzaW9uICogc2Vzc2lvbiwgU291cE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0U291cEh0dHBDbGllbnRTaW5rICpzb3VwaHR0cHNpbmsgPSBHU1RfU09VUF9IVFRQX0NMSUVOVF9TSU5LICh1c2VyX2RhdGEpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNvdXBodHRwc2luaywgImNhbGxiYWNrIHN0YXR1cz0lZCAlcyIsCi0gICAgICBtc2ctPnN0YXR1c19jb2RlLCBtc2ctPnJlYXNvbl9waHJhc2UpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotICBnX2NvbmRfc2lnbmFsICgmc291cGh0dHBzaW5rLT5jb25kKTsKLSAgc291cGh0dHBzaW5rLT5tZXNzYWdlID0gTlVMTDsKLQotICBpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgc291cGh0dHBzaW5rLT5mYWlsdXJlcysrOwotICAgIGlmIChzb3VwaHR0cHNpbmstPnJldHJpZXMgJiYKLSAgICAgICAgKHNvdXBodHRwc2luay0+cmV0cmllcyA8IDAgfHwKLSAgICAgICAgICAgIHNvdXBodHRwc2luay0+cmV0cmllcyA+PSBzb3VwaHR0cHNpbmstPmZhaWx1cmVzKSkgewotICAgICAgZ3VpbnQ2NCByZXRyeV9kZWxheTsKLSAgICAgIGNvbnN0IGNoYXIgKnJldHJ5X2FmdGVyID0KLSAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCi0gICAgICAgICAgIlJldHJ5LUFmdGVyIik7Ci0gICAgICBpZiAocmV0cnlfYWZ0ZXIpIHsKLSAgICAgICAgZ2NoYXIgKmVuZCA9IE5VTEw7Ci0gICAgICAgIHJldHJ5X2RlbGF5ID0gZ19hc2NpaV9zdHJ0b3VsbCAocmV0cnlfYWZ0ZXIsICZlbmQsIDEwKTsKLSAgICAgICAgaWYgKGVuZCB8fCBlcnJubykgewotICAgICAgICAgIHJldHJ5X2RlbGF5ID0gc291cGh0dHBzaW5rLT5yZXRyeV9kZWxheTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXRyeV9kZWxheSA9IE1BWCAocmV0cnlfZGVsYXksIHNvdXBodHRwc2luay0+cmV0cnlfZGVsYXkpOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc291cGh0dHBzaW5rLCAiQ291bGQgbm90IHdyaXRlIHRvIEhUVFAgVVJJOiAiCi0gICAgICAgICAgICAic3RhdHVzOiAlZCAlcyAocmV0cnlpbmcgUFVUIGFmdGVyICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICAgIiBzZWNvbmRzIHdpdGggUmV0cnktQWZ0ZXI6ICVzKSIsIG1zZy0+c3RhdHVzX2NvZGUsCi0gICAgICAgICAgICBtc2ctPnJlYXNvbl9waHJhc2UsIHJldHJ5X2RlbGF5LCByZXRyeV9hZnRlcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXRyeV9kZWxheSA9IHNvdXBodHRwc2luay0+cmV0cnlfZGVsYXk7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc291cGh0dHBzaW5rLCAiQ291bGQgbm90IHdyaXRlIHRvIEhUVFAgVVJJOiAiCi0gICAgICAgICAgICAic3RhdHVzOiAlZCAlcyAocmV0cnlpbmcgUFVUIGFmdGVyICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICAgIiBzZWNvbmRzKSIsIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+cmVhc29uX3BocmFzZSwgcmV0cnlfZGVsYXkpOwotICAgICAgfQotICAgICAgc291cGh0dHBzaW5rLT50aW1lciA9IGdfdGltZW91dF9zb3VyY2VfbmV3X3NlY29uZHMgKHJldHJ5X2RlbGF5KTsKLSAgICAgIGdfc291cmNlX3NldF9jYWxsYmFjayAoc291cGh0dHBzaW5rLT50aW1lciwgKEdTb3VyY2VGdW5jKSAoc2VuZF9tZXNzYWdlKSwKLSAgICAgICAgICBzb3VwaHR0cHNpbmssIE5VTEwpOwotICAgICAgZ19zb3VyY2VfYXR0YWNoIChzb3VwaHR0cHNpbmstPnRpbWVyLCBzb3VwaHR0cHNpbmstPmNvbnRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzb3VwaHR0cHNpbmstPnN0YXR1c19jb2RlID0gbXNnLT5zdGF0dXNfY29kZTsKLSAgICAgIHNvdXBodHRwc2luay0+cmVhc29uX3BocmFzZSA9IGdfc3RyZHVwIChtc2ctPnJlYXNvbl9waHJhc2UpOwotICAgIH0KLSAgICBnX211dGV4X3VubG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHNvdXBodHRwc2luay0+c2VudF9idWZmZXJzLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgc291cGh0dHBzaW5rLT5zZW50X2J1ZmZlcnMgPSBOVUxMOwotICBzb3VwaHR0cHNpbmstPmZhaWx1cmVzID0gMDsKLQotICBzZW5kX21lc3NhZ2VfbG9ja2VkIChzb3VwaHR0cHNpbmspOwotICBnX211dGV4X3VubG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogc2luaywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RTb3VwSHR0cENsaWVudFNpbmsgKnNvdXBodHRwc2luayA9IEdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTksgKHNpbmspOwotICBHU291cmNlICpzb3VyY2U7Ci0gIGdib29sZWFuIHdha2U7Ci0KLSAgaWYgKHNvdXBodHRwc2luay0+c3RhdHVzX2NvZGUgIT0gMCkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzb3VwaHR0cHNpbmssIFJFU09VUkNFLCBXUklURSwKLSAgICAgICAgKCJDb3VsZCBub3Qgd3JpdGUgdG8gSFRUUCBVUkkiKSwKLSAgICAgICAgKCJzdGF0dXM6ICVkICVzIiwgc291cGh0dHBzaW5rLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgIHNvdXBodHRwc2luay0+cmVhc29uX3BocmFzZSkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGdfbXV0ZXhfbG9jayAoJnNvdXBodHRwc2luay0+bXV0ZXgpOwotICBpZiAoc291cGh0dHBzaW5rLT5sb2NhdGlvbiAhPSBOVUxMKSB7Ci0gICAgd2FrZSA9IChzb3VwaHR0cHNpbmstPnF1ZXVlZF9idWZmZXJzID09IE5VTEwpOwotICAgIHNvdXBodHRwc2luay0+cXVldWVkX2J1ZmZlcnMgPQotICAgICAgICBnX2xpc3RfYXBwZW5kIChzb3VwaHR0cHNpbmstPnF1ZXVlZF9idWZmZXJzLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci0KLSAgICBpZiAod2FrZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc291cGh0dHBzaW5rLCAic2V0dGluZyBjYWxsYmFjayBmb3IgbmV3IGJ1ZmZlcnMiKTsKLSAgICAgIHNvdXJjZSA9IGdfaWRsZV9zb3VyY2VfbmV3ICgpOwotICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrIChzb3VyY2UsIChHU291cmNlRnVuYykgKHNlbmRfbWVzc2FnZSksCi0gICAgICAgICAgc291cGh0dHBzaW5rLCBOVUxMKTsKLSAgICAgIGdfc291cmNlX2F0dGFjaCAoc291cmNlLCBzb3VwaHR0cHNpbmstPmNvbnRleHQpOwotICAgICAgZ19zb3VyY2VfdW5yZWYgKHNvdXJjZSk7Ci0gICAgfQotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc291cGh0dHBzaW5rLT5tdXRleCk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotYXV0aGVudGljYXRlIChTb3VwU2Vzc2lvbiAqIHNlc3Npb24sIFNvdXBNZXNzYWdlICogbXNnLAotICAgIFNvdXBBdXRoICogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0U291cEh0dHBDbGllbnRTaW5rICpzb3VwaHR0cHNpbmsgPSBHU1RfU09VUF9IVFRQX0NMSUVOVF9TSU5LICh1c2VyX2RhdGEpOwotCi0gIGlmICghcmV0cnlpbmcpIHsKLSAgICAvKiBGaXJzdCB0aW1lIGF1dGhlbnRpY2F0aW9uIG9ubHksIGlmIHdlIGZhaWwgYW5kIGFyZSBjYWxsZWQgYWdhaW4gd2l0aCByZXRyeSB0cnVlIGZhbGwgdGhyb3VnaCAqLwotICAgIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgewotICAgICAgaWYgKHNvdXBodHRwc2luay0+dXNlcl9pZCAmJiBzb3VwaHR0cHNpbmstPnVzZXJfcHcpCi0gICAgICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUgKGF1dGgsIHNvdXBodHRwc2luay0+dXNlcl9pZCwKLSAgICAgICAgICAgIHNvdXBodHRwc2luay0+dXNlcl9wdyk7Ci0gICAgfSBlbHNlIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSB7Ci0gICAgICBpZiAoc291cGh0dHBzaW5rLT5wcm94eV9pZCAmJiBzb3VwaHR0cHNpbmstPnByb3h5X3B3KQotICAgICAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlIChhdXRoLCBzb3VwaHR0cHNpbmstPnByb3h5X2lkLAotICAgICAgICAgICAgc291cGh0dHBzaW5rLT5wcm94eV9wdyk7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9leHQvc291cC9nc3Rzb3VwaHR0cGNsaWVudHNpbmsuaCBiL2V4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWM0NTAwLi4wMDAwMDAwCi0tLSBhL2V4dC9zb3VwL2dzdHNvdXBodHRwY2xpZW50c2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGF2aWQgU2NobGVlZiA8ZHNAZW50cm9weXdhdmUuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX0dTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTktfSF8KLSNkZWZpbmUgX0dTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTktfSF8KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TT1VQX0hUVFBfQ0xJRU5UX1NJTksgICAgICAgICAgIChnc3Rfc291cF9odHRwX2NsaWVudF9zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TT1VQX0hUVFBfQ0xJRU5UX1NJTksob2JqKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NPVVBfSFRUUF9DTElFTlRfU0lOSyxHc3RTb3VwSHR0cENsaWVudFNpbmspKQotI2RlZmluZSBHU1RfU09VUF9IVFRQX0NMSUVOVF9TSU5LX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NPVVBfSFRUUF9DTElFTlRfU0lOSyxHc3RTb3VwSHR0cENsaWVudFNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TT1VQX0hUVFBfQ0xJRU5UX1NJTksob2JqKSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1NPVVBfSFRUUF9DTElFTlRfU0lOSykpCi0jZGVmaW5lIEdTVF9JU19TT1VQX0hUVFBfQ0xJRU5UX1NJTktfQ0xBU1Mob2JqKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU09VUF9IVFRQX0NMSUVOVF9TSU5LKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNvdXBIdHRwQ2xpZW50U2luayBHc3RTb3VwSHR0cENsaWVudFNpbms7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U291cEh0dHBDbGllbnRTaW5rQ2xhc3MgR3N0U291cEh0dHBDbGllbnRTaW5rQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0U291cEh0dHBDbGllbnRTaW5rCi17Ci0gIEdzdEJhc2VTaW5rIGJhc2Vfc291cGh0dHBzaW5rOwotCi0gIEdNdXRleCBtdXRleDsKLSAgR0NvbmQgY29uZDsKLSAgR01haW5Db250ZXh0ICpjb250ZXh0OwotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdUaHJlYWQgKnRocmVhZDsKLSAgR1NvdXJjZSAqdGltZXI7Ci0gIFNvdXBNZXNzYWdlICptZXNzYWdlOwotICBTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKLSAgR0xpc3QgKnF1ZXVlZF9idWZmZXJzOwotICBHTGlzdCAqc2VudF9idWZmZXJzOwotICBHTGlzdCAqc3RyZWFtaGVhZGVyX2J1ZmZlcnM7Ci0KLSAgaW50IHN0YXR1c19jb2RlOwotICBjaGFyICpyZWFzb25fcGhyYXNlOwotCi0gIGd1aW50NjQgb2Zmc2V0OwotICBpbnQgdGltZW91dDsKLSAgZ2ludCBmYWlsdXJlczsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIFNvdXBTZXNzaW9uICpwcm9wX3Nlc3Npb247Ci0gIGNoYXIgKmxvY2F0aW9uOwotICBjaGFyICp1c2VyX2lkOwotICBjaGFyICp1c2VyX3B3OwotICBTb3VwVVJJICpwcm94eTsKLSAgY2hhciAqcHJveHlfaWQ7Ci0gIGNoYXIgKnByb3h5X3B3OwotICBjaGFyICp1c2VyX2FnZW50OwotICBnYm9vbGVhbiBhdXRvbWF0aWNfcmVkaXJlY3Q7Ci0gIGdjaGFyICoqY29va2llczsKLSAgU291cExvZ2dlckxvZ0xldmVsIGxvZ19sZXZlbDsKLSAgZ2ludCByZXRyeV9kZWxheTsKLSAgZ2ludCByZXRyaWVzOwotfTsKLQotc3RydWN0IF9Hc3RTb3VwSHR0cENsaWVudFNpbmtDbGFzcwotewotICBHc3RCYXNlU2lua0NsYXNzIGJhc2Vfc291cGh0dHBzaW5rX2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3NvdXBfaHR0cF9jbGllbnRfc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYyBiL2V4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTU2MDguLjAwMDAwMDAKLS0tIGEvZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDIwMzkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtc291cGh0dHBzcmMKLSAqCi0gKiBUaGlzIHBsdWdpbiByZWFkcyBkYXRhIGZyb20gYSByZW1vdGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IGEgVVJJLgotICogU3VwcG9ydGVkIHByb3RvY29scyBhcmUgJ2h0dHAnLCAnaHR0cHMnLgotICoKLSAqIEFuIEhUVFAgcHJveHkgbXVzdCBiZSBzcGVjaWZpZWQgYnkgaXRzIFVSTC4KLSAqIElmIHRoZSAiaHR0cF9wcm94eSIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBpdHMgdmFsdWUgaXMgdXNlZC4KLSAqIElmIGJ1aWx0IHdpdGggbGlic291cCdzIEdOT01FIGludGVncmF0aW9uIGZlYXR1cmVzLCB0aGUgR05PTUUgcHJveHkKLSAqIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkLCBvciBmYWlsaW5nIHRoYXQsIHByb3h5IGF1dG9kZXRlY3Rpb24uCi0gKiBUaGUgI0dzdFNvdXBIVFRQU3JjOnByb3h5IHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgotICoKLSAqIEluIGNhc2UgdGhlICNHc3RTb3VwSFRUUFNyYzppcmFkaW8tbW9kZSBwcm9wZXJ0eSBpcyBzZXQgYW5kIHRoZSBsb2NhdGlvbiBpcwotICogYW4gSFRUUCByZXNvdXJjZSwgc291cGh0dHBzcmMgd2lsbCBzZW5kIHNwZWNpYWwgSWNlY2FzdCBIVFRQIGhlYWRlcnMgdG8gdGhlCi0gKiBzZXJ2ZXIgdG8gcmVxdWVzdCBhZGRpdGlvbmFsIEljZWNhc3QgbWV0YS1pbmZvcm1hdGlvbi4KLSAqIElmIHRoZSBzZXJ2ZXIgaXMgbm90IGFuIEljZWNhc3Qgc2VydmVyLCBpdCB3aWxsIGJlaGF2ZSBhcyBpZiB0aGUKLSAqICNHc3RTb3VwSFRUUFNyYzppcmFkaW8tbW9kZSBwcm9wZXJ0eSB3ZXJlIG5vdCBzZXQuIElmIGl0IGlzLCBzb3VwaHR0cHNyYyB3aWxsCi0gKiBvdXRwdXQgZGF0YSB3aXRoIGEgbWVkaWEgdHlwZSBvZiBhcHBsaWNhdGlvbi94LWljeSwgaW4gd2hpY2ggY2FzZSB5b3Ugd2lsbAotICogbmVlZCB0byB1c2UgdGhlICNJQ1lEZW11eCBlbGVtZW50IGFzIGZvbGxvdy11cCBlbGVtZW50IHRvIGV4dHJhY3QgdGhlIEljZWNhc3QKLSAqIG1ldGFkYXRhIGFuZCB0byBkZXRlcm1pbmUgdGhlIHVuZGVybHlpbmcgbWVkaWEgdHlwZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgc291cGh0dHBzcmMgbG9jYXRpb249aHR0cHM6Ly9zb21lLnNlcnZlci5vcmcvaW5kZXguaHRtbAotICogICAgICEgZmlsZXNpbmsgbG9jYXRpb249L2hvbWUvam9lL3NlcnZlci5odG1sCi0gKiBdfCBUaGUgYWJvdmUgcGlwZWxpbmUgcmVhZHMgYSB3ZWIgcGFnZSBmcm9tIGEgc2VydmVyIHVzaW5nIHRoZSBIVFRQUyBwcm90b2NvbAotICogYW5kIHdyaXRlcyBpdCB0byBhIGxvY2FsIGZpbGUuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgc291cGh0dHBzcmMgdXNlci1hZ2VudD0iRm9vUGxheWVyIDAuOTkgYmV0YSIKLSAqICAgICBhdXRvbWF0aWMtcmVkaXJlY3Q9ZmFsc2UgcHJveHk9aHR0cDovL3Byb3h5LmludHJhbmV0LmxvY2FsOjgwODAKLSAqICAgICBsb2NhdGlvbj1odHRwOi8vbXVzaWMuZm9vYmFyLmNvbS9kZW1vLm1wMyAhIG1hZCAhIGF1ZGlvY29udmVydAotICogICAgICEgYXVkaW9yZXNhbXBsZSAhIGFsc2FzaW5rCi0gKiBdfCBUaGUgYWJvdmUgcGlwZWxpbmUgd2lsbCByZWFkIGFuZCBkZWNvZGUgYW5kIHBsYXkgYW4gbXAzIGZpbGUgZnJvbSBhCi0gKiB3ZWIgc2VydmVyIHVzaW5nIHRoZSBIVFRQIHByb3RvY29sLiBJZiB0aGUgc2VydmVyIHNlbmRzIHJlZGlyZWN0cywKLSAqIHRoZSByZXF1ZXN0IGZhaWxzIGluc3RlYWQgb2YgZm9sbG93aW5nIHRoZSByZWRpcmVjdC4gVGhlIHNwZWNpZmllZAotICogSFRUUCBwcm94eSBzZXJ2ZXIgaXMgdXNlZC4gVGhlIFVzZXItQWdlbnQgSFRUUCByZXF1ZXN0IGhlYWRlcgotICogaXMgc2V0IHRvIGEgY3VzdG9tIHN0cmluZyBpbnN0ZWFkIG9mICJHU3RyZWFtZXIgc291cGh0dHBzcmMuIgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHNvdXBodHRwc3JjIGxvY2F0aW9uPWh0dHA6Ly8xMC4xMS4xMi4xMy9tanBlZwotICogICAgIGRvLXRpbWVzdGFtcD10cnVlICEgbXVsdGlwYXJ0ZGVtdXgKLSAqICAgICAhIGltYWdlL2pwZWcsd2lkdGg9NjQwLGhlaWdodD00ODAgISBtYXRyb3NrYW11eAotICogICAgICEgZmlsZXNpbmsgbG9jYXRpb249bWpwZWcubWt2Ci0gKiBdfCBUaGUgYWJvdmUgcGlwZWxpbmUgcmVhZHMgYSBtb3Rpb24gSlBFRyBzdHJlYW0gZnJvbSBhbiBJUCBjYW1lcmEKLSAqIHVzaW5nIHRoZSBIVFRQIHByb3RvY29sLCBlbmNvZGVkIGFzIG1pbWUvbXVsdGlwYXJ0IGltYWdlL2pwZWcKLSAqIHBhcnRzLCBhbmQgd3JpdGVzIGEgTWF0cm9za2EgbW90aW9uIEpQRUcgZmlsZS4gVGhlIHdpZHRoIGFuZAotICogaGVpZ2h0IHByb3BlcnRpZXMgYXJlIHNldCBpbiB0aGUgY2FwcyB0byBwcm92aWRlIHRoZSBNYXRyb3NrYQotICogbXVsdGlwbGV4ZXIgd2l0aCB0aGUgaW5mb3JtYXRpb24gdG8gc2V0IHRoaXMgaW4gdGhlIGhlYWRlci4KLSAqIFRpbWVzdGFtcHMgYXJlIHNldCBvbiB0aGUgYnVmZmVycyBhcyB0aGV5IGFycml2ZSBmcm9tIHRoZSBjYW1lcmEuCi0gKiBUaGVzZSBhcmUgdXNlZCBieSB0aGUgbWltZS9tdWx0aXBhcnQgZGVtdWx0aXBsZXhlciB0byBlbWl0IHRpbWVzdGFtcHMKLSAqIG9uIHRoZSBKUEVHLWVuY29kZWQgdmlkZW8gZnJhbWUgYnVmZmVycy4gVGhpcyBhbGxvd3MgdGhlIE1hdHJvc2thCi0gKiBtdWx0aXBsZXhlciB0byB0aW1lc3RhbXAgdGhlIGZyYW1lcyBpbiB0aGUgcmVzdWx0aW5nIGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmZGVmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAgICAgICAgLyogYXRvaSgpICovCi0jZW5kaWYKLSNpbmNsdWRlIDxnc3QvZ3N0ZWxlbWVudC5oPgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlICJnc3Rzb3VwaHR0cHNyYy5oIgotI2luY2x1ZGUgImdzdHNvdXB1dGlscy5oIgotCi0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoc291cGh0dHBzcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc291cGh0dHBzcmNfZGVidWcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MT0NBVElPTiwKLSAgUFJPUF9JU19MSVZFLAotICBQUk9QX1VTRVJfQUdFTlQsCi0gIFBST1BfQVVUT01BVElDX1JFRElSRUNULAotICBQUk9QX1BST1hZLAotICBQUk9QX1VTRVJfSUQsCi0gIFBST1BfVVNFUl9QVywKLSAgUFJPUF9QUk9YWV9JRCwKLSAgUFJPUF9QUk9YWV9QVywKLSAgUFJPUF9DT09LSUVTLAotICBQUk9QX0lSQURJT19NT0RFLAotICBQUk9QX1RJTUVPVVQsCi0gIFBST1BfRVhUUkFfSEVBREVSUywKLSAgUFJPUF9TT1VQX0xPR19MRVZFTCwKLSAgUFJPUF9DT01QUkVTUywKLSAgUFJPUF9LRUVQX0FMSVZFLAotICBQUk9QX1NTTF9TVFJJQ1QsCi0gIFBST1BfU1NMX0NBX0ZJTEUsCi0gIFBST1BfU1NMX1VTRV9TWVNURU1fQ0FfRklMRSwKLSAgUFJPUF9UTFNfREFUQUJBU0UsCi0gIFBST1BfUkVUUklFUywKLSAgUFJPUF9NRVRIT0QsCi0gIFBST1BfVExTX0lOVEVSQUNUSU9OLAotfTsKLQotI2RlZmluZSBERUZBVUxUX1VTRVJfQUdFTlQgICAgICAgICAgICJHU3RyZWFtZXIgc291cGh0dHBzcmMgIgotI2RlZmluZSBERUZBVUxUX0lSQURJT19NT0RFICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9TT1VQX0xPR19MRVZFTCAgICAgICBTT1VQX0xPR0dFUl9MT0dfSEVBREVSUwotI2RlZmluZSBERUZBVUxUX0NPTVBSRVNTICAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfS0VFUF9BTElWRSAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9TU0xfU1RSSUNUICAgICAgICAgICBUUlVFCi0jZGVmaW5lIERFRkFVTFRfU1NMX0NBX0ZJTEUgICAgICAgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX1NTTF9VU0VfU1lTVEVNX0NBX0ZJTEUgVFJVRQotI2RlZmluZSBERUZBVUxUX1RMU19EQVRBQkFTRSAgICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9UTFNfSU5URVJBQ1RJT04gICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgICAgICAgMTUKLSNkZWZpbmUgREVGQVVMVF9SRVRSSUVTICAgICAgICAgICAgICAzCi0jZGVmaW5lIERFRkFVTFRfU09VUF9NRVRIT0QgICAgICAgICAgTlVMTAotCi0jZGVmaW5lIEdST1dfQkxPQ0tTSVpFX0xJTUlUIDEKLSNkZWZpbmUgR1JPV19CTE9DS1NJWkVfQ09VTlQgMQotI2RlZmluZSBHUk9XX0JMT0NLU0laRV9GQUNUT1IgMgotI2RlZmluZSBSRURVQ0VfQkxPQ0tTSVpFX0xJTUlUIDAuMjAKLSNkZWZpbmUgUkVEVUNFX0JMT0NLU0laRV9DT1VOVCAyCi0jZGVmaW5lIFJFRFVDRV9CTE9DS1NJWkVfRkFDVE9SIDAuNQotCi1zdGF0aWMgdm9pZCBnc3Rfc291cF9odHRwX3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLAotICAgIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBnb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9zb3VwX2h0dHBfc3JjX2Rpc3Bvc2UgKEdPYmplY3QgKiBnb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3NvdXBfaHR0cF9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9zb3VwX2h0dHBfc3JjX2NyZWF0ZSAoR3N0UHVzaFNyYyAqIHBzcmMsCi0gICAgR3N0QnVmZmVyICoqIG91dGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBic3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc291cF9odHRwX3NyY19zdG9wIChHc3RCYXNlU3JjICogYnNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3NpemUgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0ICogc2l6ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBic3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc291cF9odHRwX3NyY19kb19zZWVrIChHc3RCYXNlU3JjICogYnNyYywKLSAgICBHc3RTZWdtZW50ICogc2VnbWVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc291cF9odHRwX3NyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc291cF9odHRwX3NyY191bmxvY2tfc3RvcCAoR3N0QmFzZVNyYyAqIGJzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9zb3VwX2h0dHBfc3JjX3NldF9sb2NhdGlvbiAoR3N0U291cEhUVFBTcmMgKiBzcmMsCi0gICAgY29uc3QgZ2NoYXIgKiB1cmksIEdFcnJvciAqKiBlcnJvcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9zcmNfc2V0X3Byb3h5IChHc3RTb3VwSFRUUFNyYyAqIHNyYywKLSAgICBjb25zdCBnY2hhciAqIHVyaSk7Ci1zdGF0aWMgY2hhciAqZ3N0X3NvdXBfaHR0cF9zcmNfdW5pY29kaWZ5IChjb25zdCBjaGFyICpzdHIpOwotc3RhdGljIGdib29sZWFuIGdzdF9zb3VwX2h0dHBfc3JjX2J1aWxkX21lc3NhZ2UgKEdzdFNvdXBIVFRQU3JjICogc3JjLAotICAgIGNvbnN0IGdjaGFyICogbWV0aG9kKTsKLXN0YXRpYyB2b2lkIGdzdF9zb3VwX2h0dHBfc3JjX2NhbmNlbF9tZXNzYWdlIChHc3RTb3VwSFRUUFNyYyAqIHNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NvdXBfaHR0cF9zcmNfYWRkX3JhbmdlX2hlYWRlciAoR3N0U291cEhUVFBTcmMgKiBzcmMsCi0gICAgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50NjQgc3RvcF9vZmZzZXQpOwotc3RhdGljIGdib29sZWFuIGdzdF9zb3VwX2h0dHBfc3JjX3Nlc3Npb25fb3BlbiAoR3N0U291cEhUVFBTcmMgKiBzcmMpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9zcmNfc2Vzc2lvbl9jbG9zZSAoR3N0U291cEhUVFBTcmMgKiBzcmMpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9zcmNfcGFyc2Vfc3RhdHVzIChTb3VwTWVzc2FnZSAqIG1zZywKLSAgICBHc3RTb3VwSFRUUFNyYyAqIHNyYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc291cF9odHRwX3NyY19nb3RfaGVhZGVycyAoR3N0U291cEhUVFBTcmMgKiBzcmMsCi0gICAgU291cE1lc3NhZ2UgKiBtc2cpOwotc3RhdGljIHZvaWQgZ3N0X3NvdXBfaHR0cF9zcmNfYXV0aGVudGljYXRlX2NiIChTb3VwU2Vzc2lvbiAqIHNlc3Npb24sCi0gICAgU291cE1lc3NhZ2UgKiBtc2csIFNvdXBBdXRoICogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsCi0gICAgR3N0U291cEhUVFBTcmMgKiBzcmMpOwotCi0jZGVmaW5lIGdzdF9zb3VwX2h0dHBfc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RTb3VwSFRUUFNyYywgZ3N0X3NvdXBfaHR0cF9zcmMsIEdTVF9UWVBFX1BVU0hfU1JDLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsCi0gICAgICAgIGdzdF9zb3VwX2h0dHBfc3JjX3VyaV9oYW5kbGVyX2luaXQpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX2NsYXNzX2luaXQgKEdzdFNvdXBIVFRQU3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzczsKLSAgR3N0UHVzaFNyY0NsYXNzICpnc3RwdXNoc3JjX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7Ci0gIGdzdHB1c2hzcmNfY2xhc3MgPSAoR3N0UHVzaFNyY0NsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9zb3VwX2h0dHBfc3JjX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3NvdXBfaHR0cF9zcmNfZGlzcG9zZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJMb2NhdGlvbiIsCi0gICAgICAgICAgIkxvY2F0aW9uIHRvIHJlYWQgZnJvbSIsICIiLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9VU0VSX0FHRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVzZXItYWdlbnQiLCAiVXNlci1BZ2VudCIsCi0gICAgICAgICAgIlZhbHVlIG9mIHRoZSBVc2VyLUFnZW50IEhUVFAgcmVxdWVzdCBoZWFkZXIgZmllbGQiLAotICAgICAgICAgIERFRkFVTFRfVVNFUl9BR0VOVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX0FVVE9NQVRJQ19SRURJUkVDVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXV0b21hdGljLXJlZGlyZWN0IiwgImF1dG9tYXRpYy1yZWRpcmVjdCIsCi0gICAgICAgICAgIkF1dG9tYXRpY2FsbHkgZm9sbG93IEhUVFAgcmVkaXJlY3RzIChIVFRQIFN0YXR1cyBDb2RlIDN4eCkiLAotICAgICAgICAgIFRSVUUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9QUk9YWSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwcm94eSIsICJQcm94eSIsCi0gICAgICAgICAgIkhUVFAgcHJveHkgc2VydmVyIFVSSSIsICIiLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9VU0VSX0lELAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVzZXItaWQiLCAidXNlci1pZCIsCi0gICAgICAgICAgIkhUVFAgbG9jYXRpb24gVVJJIHVzZXIgaWQgZm9yIGF1dGhlbnRpY2F0aW9uIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVNFUl9QVywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJ1c2VyLXB3IiwgInVzZXItcHciLAotICAgICAgICAgICJIVFRQIGxvY2F0aW9uIFVSSSB1c2VyIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbiIsICIiLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BST1hZX0lELAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInByb3h5LWlkIiwgInByb3h5LWlkIiwKLSAgICAgICAgICAiSFRUUCBwcm94eSBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24iLCAiIiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QUk9YWV9QVywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwcm94eS1wdyIsICJwcm94eS1wdyIsCi0gICAgICAgICAgIkhUVFAgcHJveHkgVVJJIHVzZXIgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ09PS0lFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImNvb2tpZXMiLCAiQ29va2llcyIsICJIVFRQIHJlcXVlc3QgY29va2llcyIsCi0gICAgICAgICAgR19UWVBFX1NUUlYsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lTX0xJVkUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImlzLWxpdmUiLCAiaXMtbGl2ZSIsICJBY3QgbGlrZSBhIGxpdmUgc291cmNlIiwKLSAgICAgICAgICBGQUxTRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVElNRU9VVCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgidGltZW91dCIsICJ0aW1lb3V0IiwKLSAgICAgICAgICAiVmFsdWUgaW4gc2Vjb25kcyB0byB0aW1lb3V0IGEgYmxvY2tpbmcgSS9PICgwID0gTm8gdGltZW91dCkuIiwgMCwKLSAgICAgICAgICAzNjAwLCBERUZBVUxUX1RJTUVPVVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0VYVFJBX0hFQURFUlMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJleHRyYS1oZWFkZXJzIiwgIkV4dHJhIEhlYWRlcnMiLAotICAgICAgICAgICJFeHRyYSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgSFRUUCByZXF1ZXN0IiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lSQURJT19NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJpcmFkaW8tbW9kZSIsICJpcmFkaW8tbW9kZSIsCi0gICAgICAgICAgIkVuYWJsZSBpbnRlcm5ldCByYWRpbyBtb2RlIChhc2sgc2VydmVyIHRvIHNlbmQgc2hvdXRjYXN0L2ljZWNhc3QgIgotICAgICAgICAgICJtZXRhZGF0YSBpbnRlcmxlYXZlZCB3aXRoIHRoZSBhY3R1YWwgc3RyZWFtIGRhdGEpIiwKLSAgICAgICAgICBERUZBVUxUX0lSQURJT19NT0RFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotIC8qKgotICAgKiBHc3RTb3VwSFRUUFNyYzo6aHR0cC1sb2ctbGV2ZWw6Ci0gICAqCi0gICAqIElmIHNldCBhbmQgPiAwLCBjYXB0dXJlcyBhbmQgZHVtcHMgSFRUUCBzZXNzaW9uIGRhdGEgYXMKLSAgICogbG9nIG1lc3NhZ2VzIGlmIGxvZyBsZXZlbCA+PSBHU1RfTEVWRUxfVFJBQ0UKLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TT1VQX0xPR19MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiaHR0cC1sb2ctbGV2ZWwiLCAiSFRUUCBsb2cgbGV2ZWwiLAotICAgICAgICAgICJTZXQgbG9nIGxldmVsIGZvciBzb3VwJ3MgSFRUUCBzZXNzaW9uIGxvZyIsCi0gICAgICAgICAgU09VUF9UWVBFX0xPR0dFUl9MT0dfTEVWRUwsIERFRkFVTFRfU09VUF9MT0dfTEVWRUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAvKioKLSAgICogR3N0U291cEhUVFBTcmM6OmNvbXByZXNzOgotICAgKgotICAgKiBJZiBzZXQgdG8gJVRSVUUsIHNvdXBodHRwc3JjIHdpbGwgYXV0b21hdGljYWxseSBoYW5kbGUgZ3ppcAotICAgKiBhbmQgZGVmbGF0ZSBDb250ZW50LUVuY29kaW5ncy4gVGhpcyBkb2VzIG5vdCBtYWtlIG11Y2ggZGlmZmVyZW5jZQotICAgKiBhbmQgY2F1c2VzIG1vcmUgbG9hZCBmb3Igbm9ybWFsIG1lZGlhIGZpbGVzLCBidXQgbWFrZXMgYSByZWFsCi0gICAqIGRpZmZlcmVuY2UgaW4gc2l6ZSBmb3IgcGxhaW50ZXh0IGZpbGVzLgotICAgKgotICAgKiBTaW5jZTogMS40Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTVBSRVNTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjb21wcmVzcyIsICJDb21wcmVzcyIsCi0gICAgICAgICAgIkFsbG93IGNvbXByZXNzZWQgY29udGVudCBlbmNvZGluZ3MiLAotICAgICAgICAgIERFRkFVTFRfQ09NUFJFU1MsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gLyoqCi0gICAqIEdzdFNvdXBIVFRQU3JjOjprZWVwLWFsaXZlOgotICAgKgotICAgKiBJZiBzZXQgdG8gJVRSVUUsIHNvdXBodHRwc3JjIHdpbGwga2VlcCBhbGl2ZSBjb25uZWN0aW9ucyB3aGVuIGJlaW5nCi0gICAqIHNldCB0byBSRUFEWSBzdGF0ZSBhbmQgb25seSB3aWxsIGNsb3NlIGNvbm5lY3Rpb25zIHdoZW4gY29ubmVjdGluZwotICAgKiB0byBhIGRpZmZlcmVudCBzZXJ2ZXIgb3Igd2hlbiBnb2luZyB0byBOVUxMIHN0YXRlLi4KLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9LRUVQX0FMSVZFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJrZWVwLWFsaXZlIiwgImtlZXAtYWxpdmUiLAotICAgICAgICAgICJVc2UgSFRUUCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIiwgREVGQVVMVF9LRUVQX0FMSVZFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gLyoqCi0gICAqIEdzdFNvdXBIVFRQU3JjOjpzc2wtc3RyaWN0OgotICAgKgotICAgKiBJZiBzZXQgdG8gJVRSVUUsIHNvdXBodHRwc3JjIHdpbGwgcmVqZWN0IGFsbCBTU0wgY2VydGlmaWNhdGVzIHRoYXQKLSAgICogYXJlIGNvbnNpZGVyZWQgaW52YWxpZC4KLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TU0xfU1RSSUNULAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzc2wtc3RyaWN0IiwgIlNTTCBTdHJpY3QiLAotICAgICAgICAgICJTdHJpY3QgU1NMIGNlcnRpZmljYXRlIGNoZWNraW5nIiwgREVGQVVMVF9TU0xfU1RSSUNULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gLyoqCi0gICAqIEdzdFNvdXBIVFRQU3JjOjpzc2wtY2EtZmlsZToKLSAgICoKLSAgICogQSBTU0wgYW5jaG9yIENBIGZpbGUgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgY2hlY2tpbmcgY2VydGlmaWNhdGVzCi0gICAqIGluc3RlYWQgb2YgdGhlIHN5c3RlbSBDQSBmaWxlLgotICAgKgotICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vbi0lTlVMTCwgI0dzdFNvdXBIVFRQU3JjOjpzc2wtdXNlLXN5c3RlbS1jYS1maWxlCi0gICAqIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4KLSAgICoKLSAgICogRGVwcmVjYXRlZDogVXNlICNHc3RTb3VwSFRUUFNyYzo6dGxzLWRhdGFiYXNlIHByb3BlcnR5IGluc3RlYWQuCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1NMX0NBX0ZJTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgic3NsLWNhLWZpbGUiLCAiU1NMIENBIEZpbGUiLAotICAgICAgICAgICJMb2NhdGlvbiBvZiBhIFNTTCBhbmNob3IgQ0EgZmlsZSB0byB1c2UiLCBERUZBVUxUX1NTTF9DQV9GSUxFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gLyoqCi0gICAqIEdzdFNvdXBIVFRQU3JjOjpzc2wtdXNlLXN5c3RlbS1jYS1maWxlOgotICAgKgotICAgKiBJZiBzZXQgdG8gJVRSVUUsIHNvdXBodHRwc3JjIHdpbGwgdXNlIHRoZSBzeXN0ZW0ncyBDQSBmaWxlIGZvcgotICAgKiBjaGVja2luZyBjZXJ0aWZpY2F0ZXMsIHVubGVzcyAjR3N0U291cEhUVFBTcmM6OnNzbC1jYS1maWxlIG9yCi0gICAqICNHc3RTb3VwSFRUUFNyYzo6dGxzLWRhdGFiYXNlIGFyZSBub24tJU5VTEwuCi0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1NMX1VTRV9TWVNURU1fQ0FfRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic3NsLXVzZS1zeXN0ZW0tY2EtZmlsZSIsICJVc2UgU3lzdGVtIENBIEZpbGUiLAotICAgICAgICAgICJVc2Ugc3lzdGVtIENBIGZpbGUiLCBERUZBVUxUX1NTTF9VU0VfU1lTVEVNX0NBX0ZJTEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFNvdXBIVFRQU3JjOjp0bHMtZGF0YWJhc2U6Ci0gICAqCi0gICAqIFRMUyBkYXRhYmFzZSB3aXRoIGFuY2hvciBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB1c2VkIHRvIHZhbGlkYXRlCi0gICAqIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuCi0gICAqCi0gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgbm9uLSVOVUxMLCAjR3N0U291cEhUVFBTcmM6OnNzbC11c2Utc3lzdGVtLWNhLWZpbGUKLSAgICogYW5kICNHc3RTb3VwSFRUUFNyYzo6c3NsLWNhLWZpbGUgdmFsdWVzIHdpbGwgYmUgaWdub3JlZC4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UTFNfREFUQUJBU0UsCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgidGxzLWRhdGFiYXNlIiwgIlRMUyBkYXRhYmFzZSIsCi0gICAgICAgICAgIlRMUyBkYXRhYmFzZSB3aXRoIGFuY2hvciBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUiLAotICAgICAgICAgIEdfVFlQRV9UTFNfREFUQUJBU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RTb3VwSFRUUFNyYzo6dGxzLWludGVyYWN0aW9uOgotICAgKgotICAgKiBBICNHVGxzSW50ZXJhY3Rpb24gb2JqZWN0IHRvIGJlIHVzZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBvciBjZXJ0aWZpY2F0ZQotICAgKiBkYXRhYmFzZSBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlIHVzZXIuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByb21wdCB0aGUKLSAgICogdXNlciBmb3IgcGFzc3dvcmRzIG9yIGNlcnRpZmljYXRlIHdoZXJlIG5lY2Vzc2FyeS4KLSAgICoKLSAgICogU2luY2U6IDEuOAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UTFNfSU5URVJBQ1RJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgidGxzLWludGVyYWN0aW9uIiwgIlRMUyBpbnRlcmFjdGlvbiIsCi0gICAgICAgICAgIkEgR1Rsc0ludGVyYWN0aW9uIG9iamVjdCB0byBiZSB1c2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24gb3IgY2VydGlmaWNhdGUgZGF0YWJhc2UgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZSB1c2VyLiIsCi0gICAgICAgICAgR19UWVBFX1RMU19JTlRFUkFDVElPTiwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAvKioKLSAgICogR3N0U291cEhUVFBTcmM6OnJldHJpZXM6Ci0gICAqCi0gICAqIE1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgdW50aWwgZ2l2aW5nIHVwLgotICAgKgotICAgKiBTaW5jZTogMS40Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JFVFJJRVMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicmV0cmllcyIsICJSZXRyaWVzIiwKLSAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyB1bnRpbCBnaXZpbmcgdXAgKC0xPWluZmluaXRlKSIsIC0xLAotICAgICAgICAgIEdfTUFYSU5ULCBERUZBVUxUX1JFVFJJRVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAvKioKLSAgICogR3N0U291cEhUVFBTcmM6Om1ldGhvZAotICAgKgotICAgKiBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIHdoZW4gbWFraW5nIGEgcmVxdWVzdAotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01FVEhPRCwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJtZXRob2QiLCAiSFRUUCBtZXRob2QiLAotICAgICAgICAgICJUaGUgSFRUUCBtZXRob2QgdG8gdXNlIChHRVQsIEhFQUQsIE9QVElPTlMsIGV0YykiLAotICAgICAgICAgIERFRkFVTFRfU09VUF9NRVRIT0QsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJIVFRQIGNsaWVudCBzb3VyY2UiLAotICAgICAgIlNvdXJjZS9OZXR3b3JrIiwKLSAgICAgICJSZWNlaXZlIGRhdGEgYXMgYSBjbGllbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgSFRUUCB1c2luZyBTT1VQIiwKLSAgICAgICJXb3V0ZXIgQ2xvZXRlbnMgPHdvdXRlckBtaW5kLmJlPiIpOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfc3JjX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0YmFzZXNyY19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NvdXBfaHR0cF9zcmNfc3RhcnQpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfc3JjX3N0b3ApOwotICBnc3RiYXNlc3JjX2NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NvdXBfaHR0cF9zcmNfdW5sb2NrKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+dW5sb2NrX3N0b3AgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfc3JjX3VubG9ja19zdG9wKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+Z2V0X3NpemUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3NpemUpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5pc19zZWVrYWJsZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NvdXBfaHR0cF9zcmNfaXNfc2Vla2FibGUpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5kb19zZWVrID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfc3JjX2RvX3NlZWspOwotICBnc3RiYXNlc3JjX2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc291cF9odHRwX3NyY19xdWVyeSk7Ci0KLSAgZ3N0cHVzaHNyY19jbGFzcy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zb3VwX2h0dHBfc3JjX2NyZWF0ZSk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHNvdXBodHRwc3JjX2RlYnVnLCAic291cGh0dHBzcmMiLCAwLAotICAgICAgIlNPVVAgSFRUUCBzcmMiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX3Jlc2V0IChHc3RTb3VwSFRUUFNyYyAqIHNyYykKLXsKLSAgc3JjLT5yZXRyeV9jb3VudCA9IDA7Ci0gIHNyYy0+aGF2ZV9zaXplID0gRkFMU0U7Ci0gIHNyYy0+Z290X2hlYWRlcnMgPSBGQUxTRTsKLSAgc3JjLT5zZWVrYWJsZSA9IEZBTFNFOwotICBzcmMtPnJlYWRfcG9zaXRpb24gPSAwOwotICBzcmMtPnJlcXVlc3RfcG9zaXRpb24gPSAwOwotICBzcmMtPnN0b3BfcG9zaXRpb24gPSAtMTsKLSAgc3JjLT5jb250ZW50X3NpemUgPSAwOwotICBzcmMtPmhhdmVfYm9keSA9IEZBTFNFOwotCi0gIHNyYy0+cmVkdWNlX2Jsb2Nrc2l6ZV9jb3VudCA9IDA7Ci0gIHNyYy0+aW5jcmVhc2VfYmxvY2tzaXplX2NvdW50ID0gMDsKLQotICBzcmMtPnJldCA9IEdTVF9GTE9XX09LOwotICBnX2NhbmNlbGxhYmxlX3Jlc2V0IChzcmMtPmNhbmNlbGxhYmxlKTsKLSAgaWYgKHNyYy0+aW5wdXRfc3RyZWFtKSB7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNyYy0+aW5wdXRfc3RyZWFtKTsKLSAgICBzcmMtPmlucHV0X3N0cmVhbSA9IE5VTEw7Ci0gIH0KLQotICBnc3RfY2Fwc19yZXBsYWNlICgmc3JjLT5zcmNfY2FwcywgTlVMTCk7Ci0gIGdfZnJlZSAoc3JjLT5pcmFkaW9fbmFtZSk7Ci0gIHNyYy0+aXJhZGlvX25hbWUgPSBOVUxMOwotICBnX2ZyZWUgKHNyYy0+aXJhZGlvX2dlbnJlKTsKLSAgc3JjLT5pcmFkaW9fZ2VucmUgPSBOVUxMOwotICBnX2ZyZWUgKHNyYy0+aXJhZGlvX3VybCk7Ci0gIHNyYy0+aXJhZGlvX3VybCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX3NyY19pbml0IChHc3RTb3VwSFRUUFNyYyAqIHNyYykKLXsKLSAgY29uc3QgZ2NoYXIgKnByb3h5OwotCi0gIGdfbXV0ZXhfaW5pdCAoJnNyYy0+bXV0ZXgpOwotICBnX2NvbmRfaW5pdCAoJnNyYy0+aGF2ZV9oZWFkZXJzX2NvbmQpOwotICBzcmMtPmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcgKCk7Ci0gIHNyYy0+bG9jYXRpb24gPSBOVUxMOwotICBzcmMtPnJlZGlyZWN0aW9uX3VyaSA9IE5VTEw7Ci0gIHNyYy0+YXV0b21hdGljX3JlZGlyZWN0ID0gVFJVRTsKLSAgc3JjLT51c2VyX2FnZW50ID0gZ19zdHJkdXAgKERFRkFVTFRfVVNFUl9BR0VOVCk7Ci0gIHNyYy0+dXNlcl9pZCA9IE5VTEw7Ci0gIHNyYy0+dXNlcl9wdyA9IE5VTEw7Ci0gIHNyYy0+cHJveHlfaWQgPSBOVUxMOwotICBzcmMtPnByb3h5X3B3ID0gTlVMTDsKLSAgc3JjLT5jb29raWVzID0gTlVMTDsKLSAgc3JjLT5pcmFkaW9fbW9kZSA9IERFRkFVTFRfSVJBRElPX01PREU7Ci0gIHNyYy0+c2Vzc2lvbiA9IE5VTEw7Ci0gIHNyYy0+bXNnID0gTlVMTDsKLSAgc3JjLT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwotICBzcmMtPmxvZ19sZXZlbCA9IERFRkFVTFRfU09VUF9MT0dfTEVWRUw7Ci0gIHNyYy0+c3NsX3N0cmljdCA9IERFRkFVTFRfU1NMX1NUUklDVDsKLSAgc3JjLT5zc2xfdXNlX3N5c3RlbV9jYV9maWxlID0gREVGQVVMVF9TU0xfVVNFX1NZU1RFTV9DQV9GSUxFOwotICBzcmMtPnRsc19kYXRhYmFzZSA9IERFRkFVTFRfVExTX0RBVEFCQVNFOwotICBzcmMtPnRsc19pbnRlcmFjdGlvbiA9IERFRkFVTFRfVExTX0lOVEVSQUNUSU9OOwotICBzcmMtPm1heF9yZXRyaWVzID0gREVGQVVMVF9SRVRSSUVTOwotICBzcmMtPm1ldGhvZCA9IERFRkFVTFRfU09VUF9NRVRIT0Q7Ci0gIHNyYy0+bWluaW11bV9ibG9ja3NpemUgPSBnc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZSAoR1NUX0JBU0VfU1JDX0NBU1QgKHNyYykpOwotICBwcm94eSA9IGdfZ2V0ZW52ICgiaHR0cF9wcm94eSIpOwotICBpZiAoIWdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm94eSAoc3JjLCBwcm94eSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywKLSAgICAgICAgIlRoZSBwcm94eSBpbiB0aGUgaHR0cF9wcm94eSBlbnYgdmFyIChcIiVzXCIpIGNhbm5vdCBiZSBwYXJzZWQuIiwKLSAgICAgICAgcHJveHkpOwotICB9Ci0KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9hdXRvbWF0aWNfZW9zIChHU1RfQkFTRV9TUkMgKHNyYyksIEZBTFNFKTsKLQotICBnc3Rfc291cF9odHRwX3NyY19yZXNldCAoc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX2Rpc3Bvc2UgKEdPYmplY3QgKiBnb2JqZWN0KQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKGdvYmplY3QpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImRpc3Bvc2UiKTsKLQotICBnc3Rfc291cF9odHRwX3NyY19zZXNzaW9uX2Nsb3NlIChzcmMpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChnb2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogZ29iamVjdCkKLXsKLSAgR3N0U291cEhUVFBTcmMgKnNyYyA9IEdTVF9TT1VQX0hUVFBfU1JDIChnb2JqZWN0KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmaW5hbGl6ZSIpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZzcmMtPm11dGV4KTsKLSAgZ19jb25kX2NsZWFyICgmc3JjLT5oYXZlX2hlYWRlcnNfY29uZCk7Ci0gIGdfb2JqZWN0X3VucmVmIChzcmMtPmNhbmNlbGxhYmxlKTsKLSAgZ19mcmVlIChzcmMtPmxvY2F0aW9uKTsKLSAgZ19mcmVlIChzcmMtPnJlZGlyZWN0aW9uX3VyaSk7Ci0gIGdfZnJlZSAoc3JjLT51c2VyX2FnZW50KTsKLSAgaWYgKHNyYy0+cHJveHkgIT0gTlVMTCkgewotICAgIHNvdXBfdXJpX2ZyZWUgKHNyYy0+cHJveHkpOwotICB9Ci0gIGdfZnJlZSAoc3JjLT51c2VyX2lkKTsKLSAgZ19mcmVlIChzcmMtPnVzZXJfcHcpOwotICBnX2ZyZWUgKHNyYy0+cHJveHlfaWQpOwotICBnX2ZyZWUgKHNyYy0+cHJveHlfcHcpOwotICBnX3N0cmZyZWV2IChzcmMtPmNvb2tpZXMpOwotCi0gIGlmIChzcmMtPmV4dHJhX2hlYWRlcnMpIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHNyYy0+ZXh0cmFfaGVhZGVycyk7Ci0gICAgc3JjLT5leHRyYV9oZWFkZXJzID0gTlVMTDsKLSAgfQotCi0gIGdfZnJlZSAoc3JjLT5zc2xfY2FfZmlsZSk7Ci0KLSAgaWYgKHNyYy0+dGxzX2RhdGFiYXNlKQotICAgIGdfb2JqZWN0X3VucmVmIChzcmMtPnRsc19kYXRhYmFzZSk7Ci0gIGdfZnJlZSAoc3JjLT5tZXRob2QpOwotCi0gIGlmIChzcmMtPnRsc19pbnRlcmFjdGlvbikKLSAgICBnX29iamVjdF91bnJlZiAoc3JjLT50bHNfaW50ZXJhY3Rpb24pOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAoZ29iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U291cEhUVFBTcmMgKnNyYyA9IEdTVF9TT1VQX0hUVFBfU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICB7Ci0gICAgICBjb25zdCBnY2hhciAqbG9jYXRpb247Ci0KLSAgICAgIGxvY2F0aW9uID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChsb2NhdGlvbiA9PSBOVUxMKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgibG9jYXRpb24gcHJvcGVydHkgY2Fubm90IGJlIE5VTEwiKTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgICAgaWYgKCFnc3Rfc291cF9odHRwX3NyY19zZXRfbG9jYXRpb24gKHNyYywgbG9jYXRpb24sIE5VTEwpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiYmFkbHkgZm9ybWF0dGVkIGxvY2F0aW9uIik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfVVNFUl9BR0VOVDoKLSAgICAgIGdfZnJlZSAoc3JjLT51c2VyX2FnZW50KTsKLSAgICAgIHNyYy0+dXNlcl9hZ2VudCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgotICAgICAgc3JjLT5pcmFkaW9fbW9kZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVVRPTUFUSUNfUkVESVJFQ1Q6Ci0gICAgICBzcmMtPmF1dG9tYXRpY19yZWRpcmVjdCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWToKLSAgICB7Ci0gICAgICBjb25zdCBnY2hhciAqcHJveHk7Ci0KLSAgICAgIHByb3h5ID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBpZiAoIWdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm94eSAoc3JjLCBwcm94eSkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJiYWRseSBmb3JtYXR0ZWQgcHJveHkgVVJJIik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQ09PS0lFUzoKLSAgICAgIGdfc3RyZnJlZXYgKHNyYy0+Y29va2llcyk7Ci0gICAgICBzcmMtPmNvb2tpZXMgPSBnX3N0cmR1cHYgKGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lTX0xJVkU6Ci0gICAgICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdTVF9CQVNFX1NSQyAoc3JjKSwgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VSX0lEOgotICAgICAgZ19mcmVlIChzcmMtPnVzZXJfaWQpOwotICAgICAgc3JjLT51c2VyX2lkID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9QVzoKLSAgICAgIGdfZnJlZSAoc3JjLT51c2VyX3B3KTsKLSAgICAgIHNyYy0+dXNlcl9wdyA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST1hZX0lEOgotICAgICAgZ19mcmVlIChzcmMtPnByb3h5X2lkKTsKLSAgICAgIHNyYy0+cHJveHlfaWQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWV9QVzoKLSAgICAgIGdfZnJlZSAoc3JjLT5wcm94eV9wdyk7Ci0gICAgICBzcmMtPnByb3h5X3B3ID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVElNRU9VVDoKLSAgICAgIHNyYy0+dGltZW91dCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FWFRSQV9IRUFERVJTOnsKLSAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChzcmMtPmV4dHJhX2hlYWRlcnMpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3JjLT5leHRyYV9oZWFkZXJzKTsKLQotICAgICAgc3JjLT5leHRyYV9oZWFkZXJzID0gcyA/IGdzdF9zdHJ1Y3R1cmVfY29weSAocykgOiBOVUxMOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TT1VQX0xPR19MRVZFTDoKLSAgICAgIHNyYy0+bG9nX2xldmVsID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTVBSRVNTOgotICAgICAgc3JjLT5jb21wcmVzcyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9LRUVQX0FMSVZFOgotICAgICAgc3JjLT5rZWVwX2FsaXZlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NTTF9TVFJJQ1Q6Ci0gICAgICBzcmMtPnNzbF9zdHJpY3QgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1NMX0NBX0ZJTEU6Ci0gICAgICBnX2ZyZWUgKHNyYy0+c3NsX2NhX2ZpbGUpOwotICAgICAgc3JjLT5zc2xfY2FfZmlsZSA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NTTF9VU0VfU1lTVEVNX0NBX0ZJTEU6Ci0gICAgICBzcmMtPnNzbF91c2Vfc3lzdGVtX2NhX2ZpbGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVExTX0RBVEFCQVNFOgotICAgICAgZ19jbGVhcl9vYmplY3QgKCZzcmMtPnRsc19kYXRhYmFzZSk7Ci0gICAgICBzcmMtPnRsc19kYXRhYmFzZSA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RMU19JTlRFUkFDVElPTjoKLSAgICAgIGdfY2xlYXJfb2JqZWN0ICgmc3JjLT50bHNfaW50ZXJhY3Rpb24pOwotICAgICAgc3JjLT50bHNfaW50ZXJhY3Rpb24gPSBnX3ZhbHVlX2R1cF9vYmplY3QgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVRSSUVTOgotICAgICAgc3JjLT5tYXhfcmV0cmllcyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01FVEhPRDoKLSAgICAgIGdfZnJlZSAoc3JjLT5tZXRob2QpOwotICAgICAgc3JjLT5tZXRob2QgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLWRvbmU6Ci0gIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3JjLT5sb2NhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9BR0VOVDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+dXNlcl9hZ2VudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT01BVElDX1JFRElSRUNUOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+YXV0b21hdGljX3JlZGlyZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWToKLSAgICAgIGlmIChzcmMtPnByb3h5ID09IE5VTEwpCi0gICAgICAgIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKHZhbHVlLCAiIik7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgY2hhciAqcHJveHkgPSBzb3VwX3VyaV90b19zdHJpbmcgKHNyYy0+cHJveHksIEZBTFNFKTsKLQotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcm94eSk7Ci0gICAgICAgIGdfZnJlZSAocHJveHkpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPT0tJRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIGdfc3RyZHVwdiAoc3JjLT5jb29raWVzKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSVNfTElWRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfYmFzZV9zcmNfaXNfbGl2ZSAoR1NUX0JBU0VfU1JDIChzcmMpKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSVJBRElPX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3JjLT5pcmFkaW9fbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9JRDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+dXNlcl9pZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9QVzoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+dXNlcl9wdyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPWFlfSUQ6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPnByb3h5X2lkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWV9QVzoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+cHJveHlfcHcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RJTUVPVVQ6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc3JjLT50aW1lb3V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FWFRSQV9IRUFERVJTOgotICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUgKHZhbHVlLCBzcmMtPmV4dHJhX2hlYWRlcnMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPVVBfTE9HX0xFVkVMOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNyYy0+bG9nX2xldmVsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT01QUkVTUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPmNvbXByZXNzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9LRUVQX0FMSVZFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNyYy0+a2VlcF9hbGl2ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1NMX1NUUklDVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnNzbF9zdHJpY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NTTF9DQV9GSUxFOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3JjLT5zc2xfY2FfZmlsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1NMX1VTRV9TWVNURU1fQ0FfRklMRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnNzbF91c2Vfc3lzdGVtX2NhX2ZpbGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RMU19EQVRBQkFTRToKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHNyYy0+dGxzX2RhdGFiYXNlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UTFNfSU5URVJBQ1RJT046Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBzcmMtPnRsc19pbnRlcmFjdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVUUklFUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+bWF4X3JldHJpZXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01FVEhPRDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+bWV0aG9kKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9zb3VwX2h0dHBfc3JjX3VuaWNvZGlmeSAoY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci0gIGNvbnN0IGdjaGFyICplbnZfdmFyc1tdID0geyAiR1NUX0lDWV9UQUdfRU5DT0RJTkciLAotICAgICJHU1RfVEFHX0VOQ09ESU5HIiwgTlVMTAotICB9OwotCi0gIHJldHVybiBnc3RfdGFnX2ZyZWVmb3JtX3N0cmluZ190b191dGY4IChzdHIsIC0xLCBlbnZfdmFycyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX3NyY19jYW5jZWxfbWVzc2FnZSAoR3N0U291cEhUVFBTcmMgKiBzcmMpCi17Ci0gIGdfY2FuY2VsbGFibGVfY2FuY2VsIChzcmMtPmNhbmNlbGxhYmxlKTsKLSAgZ19jb25kX3NpZ25hbCAoJnNyYy0+aGF2ZV9oZWFkZXJzX2NvbmQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zb3VwX2h0dHBfc3JjX2FkZF9yYW5nZV9oZWFkZXIgKEdzdFNvdXBIVFRQU3JjICogc3JjLCBndWludDY0IG9mZnNldCwKLSAgICBndWludDY0IHN0b3Bfb2Zmc2V0KQotewotICBnY2hhciBidWZbNjRdOwotICBnaW50IHJjOwotCi0gIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92ZSAoc3JjLT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7Ci0gIGlmIChvZmZzZXQgfHwgc3RvcF9vZmZzZXQgIT0gLTEpIHsKLSAgICBpZiAoc3RvcF9vZmZzZXQgIT0gLTEpIHsKLSAgICAgIGdfYXNzZXJ0IChvZmZzZXQgIT0gc3RvcF9vZmZzZXQpOwotCi0gICAgICByYyA9IGdfc25wcmludGYgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiYnl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSUiCi0gICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0LCAoc3RvcF9vZmZzZXQgPiAwKSA/IHN0b3Bfb2Zmc2V0IC0gMSA6Ci0gICAgICAgICAgc3RvcF9vZmZzZXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICByYyA9IGdfc25wcmludGYgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiYnl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsCi0gICAgICAgICAgb2Zmc2V0KTsKLSAgICB9Ci0gICAgaWYgKHJjID4gc2l6ZW9mIChidWYpIHx8IHJjIDwgMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKHNyYy0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIsIGJ1Zik7Ci0gIH0KLSAgc3JjLT5yZWFkX3Bvc2l0aW9uID0gb2Zmc2V0OwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fYXBwZW5kX2V4dHJhX2hlYWRlciAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKHVzZXJfZGF0YSk7Ci0gIGNvbnN0IGdjaGFyICpmaWVsZF9uYW1lID0gZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKTsKLSAgZ2NoYXIgKmZpZWxkX2NvbnRlbnQgPSBOVUxMOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHX1RZUEVfU1RSSU5HKSB7Ci0gICAgZmllbGRfY29udGVudCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICB9IGVsc2UgewotICAgIEdWYWx1ZSBkZXN0ID0geyAwLCB9OwotCi0gICAgZ192YWx1ZV9pbml0ICgmZGVzdCwgR19UWVBFX1NUUklORyk7Ci0gICAgaWYgKGdfdmFsdWVfdHJhbnNmb3JtICh2YWx1ZSwgJmRlc3QpKSB7Ci0gICAgICBmaWVsZF9jb250ZW50ID0gZ192YWx1ZV9kdXBfc3RyaW5nICgmZGVzdCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGZpZWxkX2NvbnRlbnQgPT0gTlVMTCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgImV4dHJhLWhlYWRlcnMgZmllbGQgJyVzJyBjb250YWlucyBubyB2YWx1ZSAiCi0gICAgICAgICJvciBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmciLCBmaWVsZF9uYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJBcHBlbmRpbmcgZXh0cmEgaGVhZGVyOiBcIiVzOiAlc1wiIiwgZmllbGRfbmFtZSwKLSAgICAgIGZpZWxkX2NvbnRlbnQpOwotICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKHNyYy0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsIGZpZWxkX25hbWUsCi0gICAgICBmaWVsZF9jb250ZW50KTsKLQotICBnX2ZyZWUgKGZpZWxkX2NvbnRlbnQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9hcHBlbmRfZXh0cmFfaGVhZGVycyAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9BUlJBWSkgewotICAgIGd1aW50IG4gPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHZhbHVlKTsKLSAgICBndWludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgY29uc3QgR1ZhbHVlICp2ID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAodmFsdWUsIGkpOwotCi0gICAgICBpZiAoIV9hcHBlbmRfZXh0cmFfaGVhZGVyIChmaWVsZF9pZCwgdiwgdXNlcl9kYXRhKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbHVlKSA9PSBHU1RfVFlQRV9MSVNUKSB7Ci0gICAgZ3VpbnQgbiA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWx1ZSk7Ci0gICAgZ3VpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqdiA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsdWUsIGkpOwotCi0gICAgICBpZiAoIV9hcHBlbmRfZXh0cmFfaGVhZGVyIChmaWVsZF9pZCwgdiwgdXNlcl9kYXRhKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gX2FwcGVuZF9leHRyYV9oZWFkZXIgKGZpZWxkX2lkLCB2YWx1ZSwgdXNlcl9kYXRhKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfYWRkX2V4dHJhX2hlYWRlcnMgKEdzdFNvdXBIVFRQU3JjICogc3JjKQotewotICBpZiAoIXNyYy0+ZXh0cmFfaGVhZGVycykKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzcmMtPmV4dHJhX2hlYWRlcnMsIF9hcHBlbmRfZXh0cmFfaGVhZGVycywgc3JjKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX3NyY19zZXNzaW9uX29wZW4gKEdzdFNvdXBIVFRQU3JjICogc3JjKQotewotICBpZiAoc3JjLT5zZXNzaW9uKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiU2Vzc2lvbiBpcyBhbHJlYWR5IG9wZW4iKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmICghc3JjLT5sb2NhdGlvbikgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChfKCJObyBVUkwgc2V0LiIpKSwKLSAgICAgICAgKCJNaXNzaW5nIGxvY2F0aW9uIHByb3BlcnR5IikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICghc3JjLT5zZXNzaW9uKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiQ3JlYXRpbmcgc2Vzc2lvbiIpOwotICAgIGlmIChzcmMtPnByb3h5ID09IE5VTEwpIHsKLSAgICAgIHNyYy0+c2Vzc2lvbiA9Ci0gICAgICAgICAgc291cF9zZXNzaW9uX25ld193aXRoX29wdGlvbnMgKFNPVVBfU0VTU0lPTl9VU0VSX0FHRU5ULAotICAgICAgICAgIHNyYy0+dXNlcl9hZ2VudCwgU09VUF9TRVNTSU9OX1RJTUVPVVQsIHNyYy0+dGltZW91dCwKLSAgICAgICAgICBTT1VQX1NFU1NJT05fU1NMX1NUUklDVCwgc3JjLT5zc2xfc3RyaWN0LAotICAgICAgICAgIFNPVVBfU0VTU0lPTl9UTFNfSU5URVJBQ1RJT04sIHNyYy0+dGxzX2ludGVyYWN0aW9uLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgc3JjLT5zZXNzaW9uID0KLSAgICAgICAgICBzb3VwX3Nlc3Npb25fbmV3X3dpdGhfb3B0aW9ucyAoU09VUF9TRVNTSU9OX1BST1hZX1VSSSwgc3JjLT5wcm94eSwKLSAgICAgICAgICBTT1VQX1NFU1NJT05fVElNRU9VVCwgc3JjLT50aW1lb3V0LAotICAgICAgICAgIFNPVVBfU0VTU0lPTl9TU0xfU1RSSUNULCBzcmMtPnNzbF9zdHJpY3QsCi0gICAgICAgICAgU09VUF9TRVNTSU9OX1VTRVJfQUdFTlQsIHNyYy0+dXNlcl9hZ2VudCwKLSAgICAgICAgICBTT1VQX1NFU1NJT05fVExTX0lOVEVSQUNUSU9OLCBzcmMtPnRsc19pbnRlcmFjdGlvbiwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKCFzcmMtPnNlc3Npb24pIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIExJQlJBUlksIElOSVQsCi0gICAgICAgICAgKE5VTEwpLCAoIkZhaWxlZCB0byBjcmVhdGUgYXN5bmMgc2Vzc2lvbiIpKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0IChzcmMtPnNlc3Npb24sICJhdXRoZW50aWNhdGUiLAotICAgICAgICBHX0NBTExCQUNLIChnc3Rfc291cF9odHRwX3NyY19hdXRoZW50aWNhdGVfY2IpLCBzcmMpOwotCi0gICAgLyogU2V0IHVwIGxvZ2dpbmcgKi8KLSAgICBnc3Rfc291cF91dGlsX2xvZ19zZXR1cCAoc3JjLT5zZXNzaW9uLCBzcmMtPmxvZ19sZXZlbCwgR1NUX0VMRU1FTlQgKHNyYykpOwotICAgIGlmIChzcmMtPnRsc19kYXRhYmFzZSkKLSAgICAgIGdfb2JqZWN0X3NldCAoc3JjLT5zZXNzaW9uLCAidGxzLWRhdGFiYXNlIiwgc3JjLT50bHNfZGF0YWJhc2UsIE5VTEwpOwotICAgIGVsc2UgaWYgKHNyYy0+c3NsX2NhX2ZpbGUpCi0gICAgICBnX29iamVjdF9zZXQgKHNyYy0+c2Vzc2lvbiwgInNzbC1jYS1maWxlIiwgc3JjLT5zc2xfY2FfZmlsZSwgTlVMTCk7Ci0gICAgZWxzZQotICAgICAgZ19vYmplY3Rfc2V0IChzcmMtPnNlc3Npb24sICJzc2wtdXNlLXN5c3RlbS1jYS1maWxlIiwKLSAgICAgICAgICBzcmMtPnNzbF91c2Vfc3lzdGVtX2NhX2ZpbGUsIE5VTEwpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlJlLXVzaW5nIHNlc3Npb24iKTsKLSAgfQotCi0gIGlmIChzcmMtPmNvbXByZXNzKQotICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZV9ieV90eXBlIChzcmMtPnNlc3Npb24sIFNPVVBfVFlQRV9DT05URU5UX0RFQ09ERVIpOwotICBlbHNlCi0gICAgc291cF9zZXNzaW9uX3JlbW92ZV9mZWF0dXJlX2J5X3R5cGUgKHNyYy0+c2Vzc2lvbiwKLSAgICAgICAgU09VUF9UWVBFX0NPTlRFTlRfREVDT0RFUik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX3NyY19zZXNzaW9uX2Nsb3NlIChHc3RTb3VwSFRUUFNyYyAqIHNyYykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiQ2xvc2luZyBzZXNzaW9uIik7Ci0KLSAgZ19tdXRleF9sb2NrICgmc3JjLT5tdXRleCk7Ci0gIGlmIChzcmMtPm1zZykgewotICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAoc3JjLT5zZXNzaW9uLCBzcmMtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKLSAgICBnX29iamVjdF91bnJlZiAoc3JjLT5tc2cpOwotICAgIHNyYy0+bXNnID0gTlVMTDsKLSAgfQotCi0gIGlmIChzcmMtPnNlc3Npb24pIHsKLSAgICBzb3VwX3Nlc3Npb25fYWJvcnQgKHNyYy0+c2Vzc2lvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNyYy0+c2Vzc2lvbik7Ci0gICAgc3JjLT5zZXNzaW9uID0gTlVMTDsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnNyYy0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NvdXBfaHR0cF9zcmNfYXV0aGVudGljYXRlX2NiIChTb3VwU2Vzc2lvbiAqIHNlc3Npb24sIFNvdXBNZXNzYWdlICogbXNnLAotICAgIFNvdXBBdXRoICogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIEdzdFNvdXBIVFRQU3JjICogc3JjKQotewotICBpZiAoIXJldHJ5aW5nKSB7Ci0gICAgLyogRmlyc3QgdGltZSBhdXRoZW50aWNhdGlvbiBvbmx5LCBpZiB3ZSBmYWlsIGFuZCBhcmUgY2FsbGVkIGFnYWluIHdpdGggcmV0cnkgdHJ1ZSBmYWxsIHRocm91Z2ggKi8KLSAgICBpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpIHsKLSAgICAgIGlmIChzcmMtPnVzZXJfaWQgJiYgc3JjLT51c2VyX3B3KQotICAgICAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlIChhdXRoLCBzcmMtPnVzZXJfaWQsIHNyYy0+dXNlcl9wdyk7Ci0gICAgfSBlbHNlIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSB7Ci0gICAgICBpZiAoc3JjLT5wcm94eV9pZCAmJiBzcmMtPnByb3h5X3B3KQotICAgICAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlIChhdXRoLCBzcmMtPnByb3h5X2lkLCBzcmMtPnByb3h5X3B3KTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWluc2VydF9odHRwX2hlYWRlciAoY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBnY2hhciAqIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFN0cnVjdHVyZSAqaGVhZGVycyA9IHVzZXJfZGF0YTsKLSAgY29uc3QgR1ZhbHVlICpndjsKLQotICBpZiAoIWdfdXRmOF92YWxpZGF0ZSAobmFtZSwgLTEsIE5VTEwpIHx8ICFnX3V0ZjhfdmFsaWRhdGUgKHZhbHVlLCAtMSwgTlVMTCkpCi0gICAgcmV0dXJuOwotCi0gIGd2ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGhlYWRlcnMsIG5hbWUpOwotICBpZiAoZ3YgJiYgR1NUX1ZBTFVFX0hPTERTX0FSUkFZIChndikpIHsKLSAgICBHVmFsdWUgdiA9IEdfVkFMVUVfSU5JVDsKLQotICAgIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9TVFJJTkcpOwotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIHZhbHVlKTsKLSAgICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgoR1ZhbHVlICopIGd2LCAmdik7Ci0gICAgZ192YWx1ZV91bnNldCAoJnYpOwotICB9IGVsc2UgaWYgKGd2ICYmIEdfVkFMVUVfSE9MRFNfU1RSSU5HIChndikpIHsKLSAgICBHVmFsdWUgYXJyID0gR19WQUxVRV9JTklUOwotICAgIEdWYWx1ZSB2ID0gR19WQUxVRV9JTklUOwotICAgIGNvbnN0IGdjaGFyICpvbGRfdmFsdWUgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKGd2KTsKLQotICAgIGdfdmFsdWVfaW5pdCAoJmFyciwgR1NUX1RZUEVfQVJSQVkpOwotICAgIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9TVFJJTkcpOwotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIG9sZF92YWx1ZSk7Ci0gICAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJmFyciwgJnYpOwotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnYsIHZhbHVlKTsKLSAgICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmYXJyLCAmdik7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoaGVhZGVycywgbmFtZSwgJmFycik7Ci0gICAgZ192YWx1ZV91bnNldCAoJnYpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZhcnIpOwotICB9IGVsc2UgewotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChoZWFkZXJzLCBuYW1lLCBHX1RZUEVfU1RSSU5HLCB2YWx1ZSwgTlVMTCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX2dvdF9oZWFkZXJzIChHc3RTb3VwSFRUUFNyYyAqIHNyYywgU291cE1lc3NhZ2UgKiBtc2cpCi17Ci0gIGNvbnN0IGNoYXIgKnZhbHVlOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLSAgR3N0QmFzZVNyYyAqYmFzZXNyYzsKLSAgZ3VpbnQ2NCBuZXdzaXplOwotICBHSGFzaFRhYmxlICpwYXJhbXMgPSBOVUxMOwotICBHc3RFdmVudCAqaHR0cF9oZWFkZXJzX2V2ZW50OwotICBHc3RTdHJ1Y3R1cmUgKmh0dHBfaGVhZGVycywgKmhlYWRlcnM7Ci0gIGNvbnN0IGdjaGFyICphY2NlcHRfcmFuZ2VzOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiZ290IGhlYWRlcnMiKTsKLQotICBpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCAmJgotICAgICAgc3JjLT5wcm94eV9pZCAmJiBzcmMtPnByb3h5X3B3KQotICAgIHJldHVybjsKLQotICBpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpIHsKLSAgICAvKiBmb3JjZSBhbiBlcnJvciAqLwotICAgIGdzdF9zb3VwX2h0dHBfc3JjX3BhcnNlX3N0YXR1cyAobXNnLCBzcmMpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHNyYy0+Z290X2hlYWRlcnMgPSBUUlVFOwotICBnX2NvbmRfYnJvYWRjYXN0ICgmc3JjLT5oYXZlX2hlYWRlcnNfY29uZCk7Ci0KLSAgaHR0cF9oZWFkZXJzID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJodHRwLWhlYWRlcnMiKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKGh0dHBfaGVhZGVycywgInVyaSIsIEdfVFlQRV9TVFJJTkcsIHNyYy0+bG9jYXRpb24sIE5VTEwpOwotICBpZiAoc3JjLT5yZWRpcmVjdGlvbl91cmkpCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKGh0dHBfaGVhZGVycywgInJlZGlyZWN0aW9uLXVyaSIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgIHNyYy0+cmVkaXJlY3Rpb25fdXJpLCBOVUxMKTsKLSAgaGVhZGVycyA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgicmVxdWVzdC1oZWFkZXJzIik7Ci0gIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+cmVxdWVzdF9oZWFkZXJzLCBpbnNlcnRfaHR0cF9oZWFkZXIsCi0gICAgICBoZWFkZXJzKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKGh0dHBfaGVhZGVycywgInJlcXVlc3QtaGVhZGVycyIsIEdTVF9UWVBFX1NUUlVDVFVSRSwKLSAgICAgIGhlYWRlcnMsIE5VTEwpOwotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGhlYWRlcnMpOwotICBoZWFkZXJzID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJyZXNwb25zZS1oZWFkZXJzIik7Ci0gIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgaW5zZXJ0X2h0dHBfaGVhZGVyLAotICAgICAgaGVhZGVycyk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChodHRwX2hlYWRlcnMsICJyZXNwb25zZS1oZWFkZXJzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLAotICAgICAgaGVhZGVycywgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoaGVhZGVycyk7Ci0KLSAgaHR0cF9oZWFkZXJzX2V2ZW50ID0KLSAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fU1RJQ0tZLCBodHRwX2hlYWRlcnMpOwotICBnc3RfZXZlbnRfcmVwbGFjZSAoJnNyYy0+aHR0cF9oZWFkZXJzX2V2ZW50LCBodHRwX2hlYWRlcnNfZXZlbnQpOwotICBnc3RfZXZlbnRfdW5yZWYgKGh0dHBfaGVhZGVyc19ldmVudCk7Ci0KLSAgLyogUGFyc2UgQ29udGVudC1MZW5ndGguICovCi0gIGlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKG1zZy0+cmVzcG9uc2VfaGVhZGVycykgPT0KLSAgICAgIFNPVVBfRU5DT0RJTkdfQ09OVEVOVF9MRU5HVEgpIHsKLSAgICBuZXdzaXplID0gc3JjLT5yZXF1ZXN0X3Bvc2l0aW9uICsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMpOwotICAgIGlmICghc3JjLT5oYXZlX3NpemUgfHwgKHNyYy0+Y29udGVudF9zaXplICE9IG5ld3NpemUpKSB7Ci0gICAgICBzcmMtPmNvbnRlbnRfc2l6ZSA9IG5ld3NpemU7Ci0gICAgICBzcmMtPmhhdmVfc2l6ZSA9IFRSVUU7Ci0gICAgICBzcmMtPnNlZWthYmxlID0gVFJVRTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNpemUgPSAlIiBHX0dVSU5UNjRfRk9STUFULCBzcmMtPmNvbnRlbnRfc2l6ZSk7Ci0KLSAgICAgIGJhc2VzcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVCAoc3JjKTsKLSAgICAgIGJhc2VzcmMtPnNlZ21lbnQuZHVyYXRpb24gPSBzcmMtPmNvbnRlbnRfc2l6ZTsKLSAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNyYyksCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2R1cmF0aW9uX2NoYW5nZWQgKEdTVF9PQkpFQ1QgKHNyYykpKTsKLSAgICB9Ci0gIH0KLQotICAvKiBJZiB0aGUgc2VydmVyIHJlcG9ydHMgQWNjZXB0LVJhbmdlczogbm9uZSB3ZSBkb24ndCBoYXZlIHRvIHRyeQotICAgKiBkb2luZyByYW5nZSByZXF1ZXN0cyBhdCBhbGwKLSAgICovCi0gIGlmICgoYWNjZXB0X3JhbmdlcyA9Ci0gICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAotICAgICAgICAgICAgICAiQWNjZXB0LVJhbmdlcyIpKSkgewotICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKGFjY2VwdF9yYW5nZXMsICJub25lIikgPT0gMCkKLSAgICAgIHNyYy0+c2Vla2FibGUgPSBGQUxTRTsKLSAgfQotCi0gIC8qIEljZWNhc3Qgc3R1ZmYgKi8KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGlmICgodmFsdWUgPQotICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKLSAgICAgICAgICAgICAgImljeS1tZXRhaW50IikpICE9IE5VTEwpIHsKLSAgICBnaW50IGljeV9tZXRhaW50OwotCi0gICAgaWYgKGdfdXRmOF92YWxpZGF0ZSAodmFsdWUsIC0xLCBOVUxMKSkgewotICAgICAgaWN5X21ldGFpbnQgPSBhdG9pICh2YWx1ZSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImljeS1tZXRhaW50OiAlcyAocGFyc2VkOiAlZCkiLCB2YWx1ZSwKLSAgICAgICAgICBpY3lfbWV0YWludCk7Ci0gICAgICBpZiAoaWN5X21ldGFpbnQgPiAwKSB7Ci0gICAgICAgIGlmIChzcmMtPnNyY19jYXBzKQotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChzcmMtPnNyY19jYXBzKTsKLQotICAgICAgICBzcmMtPnNyY19jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtaWN5IiwKLSAgICAgICAgICAgICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIGljeV9tZXRhaW50LCBOVUxMKTsKLQotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKEdTVF9CQVNFX1NSQyAoc3JjKSwgc3JjLT5zcmNfY2Fwcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmICgodmFsdWUgPQotICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKLSAgICAgICAgICAgICAgJnBhcmFtcykpICE9IE5VTEwpIHsKLSAgICBpZiAoIWdfdXRmOF92YWxpZGF0ZSAodmFsdWUsIC0xLCBOVUxMKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJDb250ZW50LVR5cGUgaXMgaW52YWxpZCBVVEYtOCIpOwotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wICh2YWx1ZSwgImF1ZGlvL0wxNiIpID09IDApIHsKLSAgICAgIGdpbnQgY2hhbm5lbHMgPSAyOwotICAgICAgZ2ludCByYXRlID0gNDQxMDA7Ci0gICAgICBjaGFyICpwYXJhbTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiQ29udGVudC1UeXBlOiAlcyIsIHZhbHVlKTsKLQotICAgICAgaWYgKHNyYy0+c3JjX2NhcHMpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNyYy0+c3JjX2NhcHMpOwotICAgICAgICBzcmMtPnNyY19jYXBzID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgcGFyYW0gPSBnX2hhc2hfdGFibGVfbG9va3VwIChwYXJhbXMsICJjaGFubmVscyIpOwotICAgICAgaWYgKHBhcmFtICE9IE5VTEwpIHsKLSAgICAgICAgZ3VpbnQ2NCB2YWwgPSBnX2FzY2lpX3N0cnRvdWxsIChwYXJhbSwgTlVMTCwgMTApOwotICAgICAgICBpZiAodmFsIDwgNjQpCi0gICAgICAgICAgY2hhbm5lbHMgPSB2YWw7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjaGFubmVscyA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIHBhcmFtID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAocGFyYW1zLCAicmF0ZSIpOwotICAgICAgaWYgKHBhcmFtICE9IE5VTEwpIHsKLSAgICAgICAgZ3VpbnQ2NCB2YWwgPSBnX2FzY2lpX3N0cnRvdWxsIChwYXJhbSwgTlVMTCwgMTApOwotICAgICAgICBpZiAodmFsIDwgR19NQVhJTlQpCi0gICAgICAgICAgcmF0ZSA9IHZhbDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJhdGUgPSAwOwotICAgICAgfQotCi0gICAgICBpZiAocmF0ZSA+IDAgJiYgY2hhbm5lbHMgPiAwKSB7Ci0gICAgICAgIHNyYy0+c3JjX2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC11bmFsaWduZWQtcmF3IiwKLSAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiUzE2QkUiLAotICAgICAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJpbnRlcmxlYXZlZCIsCi0gICAgICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBjaGFubmVscywgInJhdGUiLCBHX1RZUEVfSU5ULCByYXRlLCBOVUxMKTsKLQotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKEdTVF9CQVNFX1NSQyAoc3JjKSwgc3JjLT5zcmNfY2Fwcyk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkNvbnRlbnQtVHlwZTogJXMiLCB2YWx1ZSk7Ci0KLSAgICAgIC8qIFNldCB0aGUgQ29udGVudC1UeXBlIGZpZWxkIG9uIHRoZSBjYXBzICovCi0gICAgICBpZiAoc3JjLT5zcmNfY2FwcykgewotICAgICAgICBzcmMtPnNyY19jYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoc3JjLT5zcmNfY2Fwcyk7Ci0gICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyYy0+c3JjX2NhcHMsICJjb250ZW50LXR5cGUiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgdmFsdWUsIE5VTEwpOwotICAgICAgICBnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKEdTVF9CQVNFX1NSQyAoc3JjKSwgc3JjLT5zcmNfY2Fwcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKHBhcmFtcyAhPSBOVUxMKQotICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChwYXJhbXMpOwotCi0gIGlmICgodmFsdWUgPQotICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKLSAgICAgICAgICAgICAgImljeS1uYW1lIikpICE9IE5VTEwpIHsKLSAgICBpZiAoZ191dGY4X3ZhbGlkYXRlICh2YWx1ZSwgLTEsIE5VTEwpKSB7Ci0gICAgICBnX2ZyZWUgKHNyYy0+aXJhZGlvX25hbWUpOwotICAgICAgc3JjLT5pcmFkaW9fbmFtZSA9IGdzdF9zb3VwX2h0dHBfc3JjX3VuaWNvZGlmeSAodmFsdWUpOwotICAgICAgaWYgKHNyYy0+aXJhZGlvX25hbWUpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19PUkdBTklaQVRJT04sCi0gICAgICAgICAgICBzcmMtPmlyYWRpb19uYW1lLCBOVUxMKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKCh2YWx1ZSA9Ci0gICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAotICAgICAgICAgICAgICAiaWN5LWdlbnJlIikpICE9IE5VTEwpIHsKLSAgICBpZiAoZ191dGY4X3ZhbGlkYXRlICh2YWx1ZSwgLTEsIE5VTEwpKSB7Ci0gICAgICBnX2ZyZWUgKHNyYy0+aXJhZGlvX2dlbnJlKTsKLSAgICAgIHNyYy0+aXJhZGlvX2dlbnJlID0gZ3N0X3NvdXBfaHR0cF9zcmNfdW5pY29kaWZ5ICh2YWx1ZSk7Ci0gICAgICBpZiAoc3JjLT5pcmFkaW9fZ2VucmUpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19HRU5SRSwKLSAgICAgICAgICAgIHNyYy0+aXJhZGlvX2dlbnJlLCBOVUxMKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKCh2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgImljeS11cmwiKSkKLSAgICAgICE9IE5VTEwpIHsKLSAgICBpZiAoZ191dGY4X3ZhbGlkYXRlICh2YWx1ZSwgLTEsIE5VTEwpKSB7Ci0gICAgICBnX2ZyZWUgKHNyYy0+aXJhZGlvX3VybCk7Ci0gICAgICBzcmMtPmlyYWRpb191cmwgPSBnc3Rfc291cF9odHRwX3NyY191bmljb2RpZnkgKHZhbHVlKTsKLSAgICAgIGlmIChzcmMtPmlyYWRpb191cmwpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19MT0NBVElPTiwKLSAgICAgICAgICAgIHNyYy0+aXJhZGlvX3VybCwgTlVMTCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmICghZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdfbGlzdCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAgICJjYWxsaW5nIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3Mgd2l0aCAlIiBHU1RfUFRSX0ZPUk1BVCwgdGFnX2xpc3QpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0JBU0VfU1JDX1BBRCAoc3JjKSwgZ3N0X2V2ZW50X25ld190YWcgKHRhZ19saXN0KSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIH0KLQotICAvKiBIYW5kbGUgSFRUUCBlcnJvcnMuICovCi0gIGdzdF9zb3VwX2h0dHBfc3JjX3BhcnNlX3N0YXR1cyAobXNnLCBzcmMpOwotCi0gIC8qIENoZWNrIGlmIFJhbmdlIGhlYWRlciB3YXMgcmVzcGVjdGVkLiAqLwotICBpZiAoc3JjLT5yZXQgPT0gR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SICYmCi0gICAgICBzcmMtPnJlYWRfcG9zaXRpb24gJiYgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQpIHsKLSAgICBzcmMtPnNlZWthYmxlID0gRkFMU0U7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTIChzcmMsIFJFU09VUkNFLCBTRUVLLAotICAgICAgICAoXygiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iKSksCi0gICAgICAgICgiU2VydmVyIGRvZXMgbm90IGFjY2VwdCBSYW5nZSBIVFRQIGhlYWRlciwgVVJMOiAlcywgUmVkaXJlY3QgdG86ICVzIiwKLSAgICAgICAgICAgIHNyYy0+bG9jYXRpb24sIEdTVF9TVFJfTlVMTCAoc3JjLT5yZWRpcmVjdGlvbl91cmkpKSwKLSAgICAgICAgKCJodHRwLXN0YXR1cy1jb2RlIiwgR19UWVBFX1VJTlQsIG1zZy0+c3RhdHVzX2NvZGUsCi0gICAgICAgICAgICAiaHR0cC1yZWRpcmVjdGlvbi11cmkiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChzcmMtPnJlZGlyZWN0aW9uX3VyaSksIE5VTEwpKTsKLSAgICBzcmMtPnJldCA9IEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgLyogSWYgd2UgYXJlIGdvaW5nIHRvIGVycm9yIG91dCwgc3RvcCBhbGwgcHJvY2Vzc2luZyByaWdodCBoZXJlLCBzbyB3ZQotICAgKiBkb24ndCBvdXRwdXQgYW55IGRhdGEgKHN1Y2ggYXMgYW4gZXJyb3IgaHRtbCBwYWdlKSwgYW5kIHJldHVybgotICAgKiBHU1RfRkxPV19FUlJPUiBmcm9tIHRoZSBjcmVhdGUgZnVuY3Rpb24gaW5zdGVhZCBvZiBoYXZpbmcKLSAgICogZ290X2NodW5rX2NiIG92ZXJ3cml0ZSBzcmMtPnJldCB3aXRoIEZMT1dfT0sgYWdhaW4uICovCi0gIGlmIChzcmMtPnJldCA9PSBHU1RfRkxPV19FUlJPUiB8fCBzcmMtPnJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9zb3VwX2h0dHBfc3JjX2FsbG9jX2J1ZmZlciAoR3N0U291cEhUVFBTcmMgKiBzcmMpCi17Ci0gIEdzdEJhc2VTcmMgKmJhc2VzcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVCAoc3JjKTsKLSAgR3N0Rmxvd1JldHVybiByYzsKLSAgR3N0QnVmZmVyICpnc3RidWY7Ci0KLSAgcmMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmFsbG9jIChiYXNlc3JjLCAtMSwKLSAgICAgIGJhc2VzcmMtPmJsb2Nrc2l6ZSwgJmdzdGJ1Zik7Ci0gIGlmIChHX1VOTElLRUxZIChyYyAhPSBHU1RfRkxPV19PSykpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBnc3RidWY7Ci19Ci0KLSNkZWZpbmUgU09VUF9IVFRQX1NSQ19FUlJPUihzcmMsc291cF9tc2csY2F0LGNvZGUsZXJyb3JfbWVzc2FnZSkgICAgIFwKLSAgZG8geyBcCi0gICAgR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTICgoc3JjKSwgY2F0LCBjb2RlLCAoIiVzIiwgZXJyb3JfbWVzc2FnZSksIFwKLSAgICAgICAgKCIlcyAoJWQpLCBVUkw6ICVzLCBSZWRpcmVjdCB0bzogJXMiLCAoc291cF9tc2cpLT5yZWFzb25fcGhyYXNlLCBcCi0gICAgICAgICAgICAoc291cF9tc2cpLT5zdGF0dXNfY29kZSwgKHNyYyktPmxvY2F0aW9uLCBHU1RfU1RSX05VTEwgKChzcmMpLT5yZWRpcmVjdGlvbl91cmkpKSwgXAotICAgICAgICAgICAgKCJodHRwLXN0YXR1cy1jb2RlIiwgR19UWVBFX1VJTlQsIG1zZy0+c3RhdHVzX2NvZGUsIFwKLSAgICAgICAgICAgICAiaHR0cC1yZWRpcmVjdC11cmkiLCBHX1RZUEVfU1RSSU5HLCBHU1RfU1RSX05VTEwgKChzcmMpLT5yZWRpcmVjdGlvbl91cmkpLCBOVUxMKSk7IFwKLSAgfSB3aGlsZSgwKQotCi1zdGF0aWMgdm9pZAotZ3N0X3NvdXBfaHR0cF9zcmNfcGFyc2Vfc3RhdHVzIChTb3VwTWVzc2FnZSAqIG1zZywgR3N0U291cEhUVFBTcmMgKiBzcmMpCi17Ci0gIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEKSB7Ci0gICAgaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIklnbm9yaW5nIGVycm9yICVkIGR1cmluZyBIRUFEIHJlcXVlc3QiLAotICAgICAgICAgIG1zZy0+c3RhdHVzX2NvZGUpOwotICB9IGVsc2UgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUiAobXNnLT5zdGF0dXNfY29kZSkpIHsKLSAgICBzd2l0Y2ggKG1zZy0+c3RhdHVzX2NvZGUpIHsKLSAgICAgIGNhc2UgU09VUF9TVEFUVVNfQ0FOVF9SRVNPTFZFOgotICAgICAgY2FzZSBTT1VQX1NUQVRVU19DQU5UX1JFU09MVkVfUFJPWFk6Ci0gICAgICAgIFNPVVBfSFRUUF9TUkNfRVJST1IgKHNyYywgbXNnLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAotICAgICAgICAgICAgXygiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIikpOwotICAgICAgICBzcmMtPnJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUOgotICAgICAgY2FzZSBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1RfUFJPWFk6Ci0gICAgICAgIFNPVVBfSFRUUF9TUkNfRVJST1IgKHNyYywgbXNnLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAgICAgXygiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iKSk7Ci0gICAgICAgIHNyYy0+cmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTT1VQX1NUQVRVU19TU0xfRkFJTEVEOgotICAgICAgICBTT1VQX0hUVFBfU1JDX0VSUk9SIChzcmMsIG1zZywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgICAgIF8oIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iKSk7Ci0gICAgICAgIHNyYy0+cmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTT1VQX1NUQVRVU19JT19FUlJPUjoKLSAgICAgICAgaWYgKHNyYy0+bWF4X3JldHJpZXMgPT0gLTEgfHwgc3JjLT5yZXRyeV9jb3VudCA8IHNyYy0+bWF4X3JldHJpZXMpIHsKLSAgICAgICAgICBzcmMtPnJldCA9IEdTVF9GTE9XX0NVU1RPTV9FUlJPUjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBTT1VQX0hUVFBfU1JDX0VSUk9SIChzcmMsIG1zZywgUkVTT1VSQ0UsIFJFQUQsCi0gICAgICAgICAgICAgIF8oIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gIgotICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWRseS4iKSk7Ci0gICAgICAgICAgc3JjLT5yZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU09VUF9TVEFUVVNfTUFMRk9STUVEOgotICAgICAgICBTT1VQX0hUVFBfU1JDX0VSUk9SIChzcmMsIG1zZywgUkVTT1VSQ0UsIFJFQUQsCi0gICAgICAgICAgICBfKCJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iKSk7Ci0gICAgICAgIHNyYy0+cmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTT1VQX1NUQVRVU19DQU5DRUxMRUQ6Ci0gICAgICAgIC8qIE5vIGVycm9yIG1lc3NhZ2Ugd2hlbiBpbnRlcnJ1cHRlZCBieSBwcm9ncmFtLiAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoU09VUF9TVEFUVVNfSVNfQ0xJRU5UX0VSUk9SIChtc2ctPnN0YXR1c19jb2RlKSB8fAotICAgICAgU09VUF9TVEFUVVNfSVNfUkVESVJFQ1RJT04gKG1zZy0+c3RhdHVzX2NvZGUpIHx8Ci0gICAgICBTT1VQX1NUQVRVU19JU19TRVJWRVJfRVJST1IgKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgY29uc3QgZ2NoYXIgKnJlYXNvbl9waHJhc2U7Ci0KLSAgICByZWFzb25fcGhyYXNlID0gbXNnLT5yZWFzb25fcGhyYXNlOwotICAgIGlmIChyZWFzb25fcGhyYXNlICYmICFnX3V0ZjhfdmFsaWRhdGUgKHJlYXNvbl9waHJhc2UsIC0xLCBOVUxMKSkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoc3JjLCAiSW52YWxpZCBVVEYtOCBpbiByZWFzb24iKTsKLSAgICAgIHJlYXNvbl9waHJhc2UgPSAiKGludmFsaWQpIjsKLSAgICB9Ci0KLSAgICAvKiBSZXBvcnQgSFRUUCBlcnJvci4gKi8KLQotICAgIC8qIHdoZW4gY29udGVudF9zaXplIGlzIHVua25vd24gYW5kIHdlIGhhdmUganVzdCBmaW5pc2hlZCByZWNlaXZpbmcKLSAgICAgKiBhIGJvZHkgbWVzc2FnZSwgcmVxdWVzdHMgdGhhdCBnbyBiZXlvbmQgdGhlIGNvbnRlbnQgbGltaXRzIHdpbGwgcmVzdWx0Ci0gICAgICogaW4gYW4gZXJyb3IuIEhlcmUgd2UgY29udmVydCB0aG9zZSB0byBFT1MgKi8KLSAgICBpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19SRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFICYmCi0gICAgICAgIHNyYy0+aGF2ZV9ib2R5ICYmICFzcmMtPmhhdmVfc2l6ZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUmVxdWVzdGVkIHJhbmdlIG91dCBvZiBsaW1pdHMgYW5kIHJlY2VpdmVkIGZ1bGwgIgotICAgICAgICAgICJib2R5LCByZXR1cm5pbmcgRU9TIik7Ci0gICAgICBzcmMtPnJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBGSVhNRTogcmVhc29uX3BocmFzZSBpcyBub3QgdHJhbnNsYXRlZCBhbmQgbm90IHN1aXRhYmxlIGZvciB1c2VyCi0gICAgICogZXJyb3IgZGlhbG9nIGFjY29yZGluZyB0byBsaWJzb3VwIGRvY3VtZW50YXRpb24uCi0gICAgICovCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfTk9UX0ZPVU5EKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUl9XSVRIX0RFVEFJTFMgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgICAoIiVzIiwgcmVhc29uX3BocmFzZSksCi0gICAgICAgICAgKCIlcyAoJWQpLCBVUkw6ICVzLCBSZWRpcmVjdCB0bzogJXMiLCByZWFzb25fcGhyYXNlLAotICAgICAgICAgICAgICBtc2ctPnN0YXR1c19jb2RlLCBzcmMtPmxvY2F0aW9uLAotICAgICAgICAgICAgICBHU1RfU1RSX05VTEwgKHNyYy0+cmVkaXJlY3Rpb25fdXJpKSksCi0gICAgICAgICAgKCJodHRwLXN0YXR1cy1jb2RlIiwgR19UWVBFX1VJTlQsIG1zZy0+c3RhdHVzX2NvZGUsCi0gICAgICAgICAgICAgICJodHRwLXJlZGlyZWN0LXVyaSIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoc3JjLT5yZWRpcmVjdGlvbl91cmkpLCBOVUxMKSk7Ci0gICAgfSBlbHNlIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRAotICAgICAgICB8fCBtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1BBWU1FTlRfUkVRVUlSRUQKLSAgICAgICAgfHwgbXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19GT1JCSURERU4KLSAgICAgICAgfHwgbXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1JfV0lUSF9ERVRBSUxTIChzcmMsIFJFU09VUkNFLCBOT1RfQVVUSE9SSVpFRCwgKCIlcyIsCi0gICAgICAgICAgICAgIHJlYXNvbl9waHJhc2UpLCAoIiVzICglZCksIFVSTDogJXMsIFJlZGlyZWN0IHRvOiAlcyIsCi0gICAgICAgICAgICAgIHJlYXNvbl9waHJhc2UsIG1zZy0+c3RhdHVzX2NvZGUsIHNyYy0+bG9jYXRpb24sCi0gICAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoc3JjLT5yZWRpcmVjdGlvbl91cmkpKSwgKCJodHRwLXN0YXR1cy1jb2RlIiwKLSAgICAgICAgICAgICAgR19UWVBFX1VJTlQsIG1zZy0+c3RhdHVzX2NvZGUsICJodHRwLXJlZGlyZWN0LXVyaSIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoc3JjLT5yZWRpcmVjdGlvbl91cmkpLCBOVUxMKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SX1dJVEhfREVUQUlMUyAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAgICgiJXMiLCByZWFzb25fcGhyYXNlKSwKLSAgICAgICAgICAoIiVzICglZCksIFVSTDogJXMsIFJlZGlyZWN0IHRvOiAlcyIsIHJlYXNvbl9waHJhc2UsCi0gICAgICAgICAgICAgIG1zZy0+c3RhdHVzX2NvZGUsIHNyYy0+bG9jYXRpb24sCi0gICAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoc3JjLT5yZWRpcmVjdGlvbl91cmkpKSwKLSAgICAgICAgICAoImh0dHAtc3RhdHVzLWNvZGUiLCBHX1RZUEVfVUlOVCwgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgICAgImh0dHAtcmVkaXJlY3QtdXJpIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChzcmMtPnJlZGlyZWN0aW9uX3VyaSksIE5VTEwpKTsKLSAgICB9Ci0gICAgc3JjLT5yZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NvdXBfaHR0cF9zcmNfcmVzdGFydGVkX2NiIChTb3VwTWVzc2FnZSAqIG1zZywgR3N0U291cEhUVFBTcmMgKiBzcmMpCi17Ci0gIGlmIChzb3VwX3Nlc3Npb25fd291bGRfcmVkaXJlY3QgKHNyYy0+c2Vzc2lvbiwgbXNnKSkgewotICAgIHNyYy0+cmVkaXJlY3Rpb25fdXJpID0KLSAgICAgICAgc291cF91cmlfdG9fc3RyaW5nIChzb3VwX21lc3NhZ2VfZ2V0X3VyaSAobXNnKSwgRkFMU0UpOwotICAgIHNyYy0+cmVkaXJlY3Rpb25fcGVybWFuZW50ID0KLSAgICAgICAgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIiV1IHJlZGlyZWN0IHRvIFwiJXNcIiAocGVybWFuZW50ICVkKSIsCi0gICAgICAgIG1zZy0+c3RhdHVzX2NvZGUsIHNyYy0+cmVkaXJlY3Rpb25fdXJpLCBzcmMtPnJlZGlyZWN0aW9uX3Blcm1hbmVudCk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX3NyY19idWlsZF9tZXNzYWdlIChHc3RTb3VwSFRUUFNyYyAqIHNyYywgY29uc3QgZ2NoYXIgKiBtZXRob2QpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzcmMtPm1zZyA9PSBOVUxMLCBGQUxTRSk7Ci0KLSAgc3JjLT5tc2cgPSBzb3VwX21lc3NhZ2VfbmV3IChtZXRob2QsIHNyYy0+bG9jYXRpb24pOwotICBpZiAoIXNyYy0+bXNnKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgKCJFcnJvciBwYXJzaW5nIFVSTC4iKSwgKCJVUkw6ICVzIiwgc3JjLT5sb2NhdGlvbikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAoIXNyYy0+a2VlcF9hbGl2ZSkgewotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoc3JjLT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIkNvbm5lY3Rpb24iLAotICAgICAgICAiY2xvc2UiKTsKLSAgfQotICBpZiAoc3JjLT5pcmFkaW9fbW9kZSkgewotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoc3JjLT5tc2ctPnJlcXVlc3RfaGVhZGVycywgImljeS1tZXRhZGF0YSIsCi0gICAgICAgICIxIik7Ci0gIH0KLSAgaWYgKHNyYy0+Y29va2llcykgewotICAgIGdjaGFyICoqY29va2llOwotCi0gICAgZm9yIChjb29raWUgPSBzcmMtPmNvb2tpZXM7ICpjb29raWUgIT0gTlVMTDsgY29va2llKyspIHsKLSAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoc3JjLT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIkNvb2tpZSIsCi0gICAgICAgICAgKmNvb2tpZSk7Ci0gICAgfQotICB9Ci0KLSAgc291cF9tZXNzYWdlX3NldF9mbGFncyAoc3JjLT5tc2csIFNPVVBfTUVTU0FHRV9PVkVSV1JJVEVfQ0hVTktTIHwKLSAgICAgIChzcmMtPmF1dG9tYXRpY19yZWRpcmVjdCA/IDAgOiBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1QpKTsKLQotICBpZiAoc3JjLT5hdXRvbWF0aWNfcmVkaXJlY3QpIHsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChzcmMtPm1zZywgInJlc3RhcnRlZCIsCi0gICAgICAgIEdfQ0FMTEJBQ0sgKGdzdF9zb3VwX2h0dHBfc3JjX3Jlc3RhcnRlZF9jYiksIHNyYyk7Ci0gIH0KLQotICBnc3Rfc291cF9odHRwX3NyY19hZGRfcmFuZ2VfaGVhZGVyIChzcmMsIHNyYy0+cmVxdWVzdF9wb3NpdGlvbiwKLSAgICAgIHNyYy0+c3RvcF9wb3NpdGlvbik7Ci0KLSAgZ3N0X3NvdXBfaHR0cF9zcmNfYWRkX2V4dHJhX2hlYWRlcnMgKHNyYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc291cF9odHRwX3NyY19zZW5kX21lc3NhZ2UgKEdzdFNvdXBIVFRQU3JjICogc3JjKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3JjLT5tc2cgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIC8qIEZJWE1FIFdlIGFyZSBpZ25vcmluZyB0aGUgR0Vycm9yIGhlcmUsIG1pZ2h0IGJlIHVzZWZ1bCB0byBkZWJ1ZyAqLwotICBzcmMtPmlucHV0X3N0cmVhbSA9Ci0gICAgICBzb3VwX3Nlc3Npb25fc2VuZCAoc3JjLT5zZXNzaW9uLCBzcmMtPm1zZywgc3JjLT5jYW5jZWxsYWJsZSwgTlVMTCk7Ci0KLSAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChzcmMtPmNhbmNlbGxhYmxlKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0KLSAgc3JjLT5yZXQgPSBHU1RfRkxPV19PSzsKLQotICBnc3Rfc291cF9odHRwX3NyY19nb3RfaGVhZGVycyAoc3JjLCBzcmMtPm1zZyk7Ci0gIGlmIChzcmMtPnJldCAhPSBHU1RfRkxPV19PSykgewotICAgIHJldHVybiBzcmMtPnJldDsKLSAgfQotCi0gIGlmICghc3JjLT5pbnB1dF9zdHJlYW0pIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJEaWRuJ3QgZ2V0IGFuIGlucHV0IHN0cmVhbSIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGlmIChTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChzcmMtPm1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiU3VjY2Vzc2Z1bGx5IGdvdCBhIHJlcGx5Iik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogRklYTUUgLSBiZSBtb3JlIGhlbHBmdWwgdG8gcGVvcGxlIGRlYnVnZ2luZyAqLwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zb3VwX2h0dHBfc3JjX2RvX3JlcXVlc3QgKEdzdFNvdXBIVFRQU3JjICogc3JjLCBjb25zdCBnY2hhciAqIG1ldGhvZCkKLXsKLSAgaWYgKHNyYy0+bWF4X3JldHJpZXMgIT0gLTEgJiYgc3JjLT5yZXRyeV9jb3VudCA+IHNyYy0+bWF4X3JldHJpZXMpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJNYXggcmV0cmllcyByZWFjaGVkIik7Ci0gICAgc3JjLT5yZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICByZXR1cm4gc3JjLT5yZXQ7Ci0gIH0KLQotICBzcmMtPnJldHJ5X2NvdW50Kys7Ci0gIC8qIEVPUyBpbW1lZGlhdGVseSBpZiB3ZSBoYXZlIGFuIGVtcHR5IHNlZ21lbnQgKi8KLSAgaWYgKHNyYy0+cmVxdWVzdF9wb3NpdGlvbiA9PSBzcmMtPnN0b3BfcG9zaXRpb24pCi0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLQotICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiUnVubmluZyByZXF1ZXN0IGZvciBtZXRob2Q6ICVzIiwgbWV0aG9kKTsKLQotICAvKiBVcGRhdGUgdGhlIHBvc2l0aW9uIGlmIHdlIGFyZSByZXRyeWluZyAqLwotICBpZiAoc3JjLT5tc2cgJiYgc3JjLT5yZXF1ZXN0X3Bvc2l0aW9uID4gMCkgewotICAgIGdzdF9zb3VwX2h0dHBfc3JjX2FkZF9yYW5nZV9oZWFkZXIgKHNyYywgc3JjLT5yZXF1ZXN0X3Bvc2l0aW9uLAotICAgICAgICBzcmMtPnN0b3BfcG9zaXRpb24pOwotICB9Ci0KLSAgaWYgKCFzcmMtPm1zZykgewotICAgIGlmICghZ3N0X3NvdXBfaHR0cF9zcmNfYnVpbGRfbWVzc2FnZSAoc3JjLCBtZXRob2QpKSB7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChzcmMtPmNhbmNlbGxhYmxlKSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAiaW50ZXJydXB0ZWQiKTsKLSAgICBzcmMtPnJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIGdvdG8gZG9uZTsKLSAgfQotICBzcmMtPnJldCA9IGdzdF9zb3VwX2h0dHBfc3JjX3NlbmRfbWVzc2FnZSAoc3JjKTsKLQotZG9uZToKLSAgcmV0dXJuIHNyYy0+cmV0OwotfQotCi0vKgotICogQ2hlY2sgaWYgdGhlIGJ5dGVzX3JlYWQgaXMgYWJvdmUgYSBjZXJ0YWluIHRocmVzaG9sZCBvZiB0aGUgYmxvY2tzaXplLCBpZgotICogdGhhdCBoYXBwZW5zIGEgZmV3IHRpbWVzIGluIGEgcm93LCBpbmNyZWFzZSB0aGUgYmxvY2tzaXplOyBEbyB0aGUgc2FtZSBpbgotICogdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byByZWR1Y2UgdGhlIGJsb2Nrc2l6ZS4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX2NoZWNrX3VwZGF0ZV9ibG9ja3NpemUgKEdzdFNvdXBIVFRQU3JjICogc3JjLAotICAgIGdpbnQ2NCBieXRlc19yZWFkKQotewotICBndWludCBibG9ja3NpemUgPSBnc3RfYmFzZV9zcmNfZ2V0X2Jsb2Nrc2l6ZSAoR1NUX0JBU0VfU1JDX0NBU1QgKHNyYykpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzcmMsICJDaGVja2luZyB0byB1cGRhdGUgYmxvY2tzaXplLiBSZWFkOiUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgIiBibG9ja3NpemU6JXUiLCBieXRlc19yZWFkLCBibG9ja3NpemUpOwotCi0gIGlmIChieXRlc19yZWFkID49IGJsb2Nrc2l6ZSAqIEdST1dfQkxPQ0tTSVpFX0xJTUlUKSB7Ci0gICAgc3JjLT5yZWR1Y2VfYmxvY2tzaXplX2NvdW50ID0gMDsKLSAgICBzcmMtPmluY3JlYXNlX2Jsb2Nrc2l6ZV9jb3VudCsrOwotCi0gICAgaWYgKHNyYy0+aW5jcmVhc2VfYmxvY2tzaXplX2NvdW50ID49IEdST1dfQkxPQ0tTSVpFX0NPVU5UKSB7Ci0gICAgICBibG9ja3NpemUgKj0gR1JPV19CTE9DS1NJWkVfRkFDVE9SOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiSW5jcmVhc2VkIGJsb2Nrc2l6ZSB0byAldSIsIGJsb2Nrc2l6ZSk7Ci0gICAgICBnc3RfYmFzZV9zcmNfc2V0X2Jsb2Nrc2l6ZSAoR1NUX0JBU0VfU1JDX0NBU1QgKHNyYyksIGJsb2Nrc2l6ZSk7Ci0gICAgICBzcmMtPmluY3JlYXNlX2Jsb2Nrc2l6ZV9jb3VudCA9IDA7Ci0gICAgfQotICB9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPCBibG9ja3NpemUgKiBSRURVQ0VfQkxPQ0tTSVpFX0xJTUlUKSB7Ci0gICAgc3JjLT5yZWR1Y2VfYmxvY2tzaXplX2NvdW50Kys7Ci0gICAgc3JjLT5pbmNyZWFzZV9ibG9ja3NpemVfY291bnQgPSAwOwotCi0gICAgaWYgKHNyYy0+cmVkdWNlX2Jsb2Nrc2l6ZV9jb3VudCA+PSBSRURVQ0VfQkxPQ0tTSVpFX0NPVU5UKSB7Ci0gICAgICBibG9ja3NpemUgKj0gUkVEVUNFX0JMT0NLU0laRV9GQUNUT1I7Ci0gICAgICBibG9ja3NpemUgPSBNQVggKGJsb2Nrc2l6ZSwgc3JjLT5taW5pbXVtX2Jsb2Nrc2l6ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJEZWNyZWFzZWQgYmxvY2tzaXplIHRvICV1IiwgYmxvY2tzaXplKTsKLSAgICAgIGdzdF9iYXNlX3NyY19zZXRfYmxvY2tzaXplIChHU1RfQkFTRV9TUkNfQ0FTVCAoc3JjKSwgYmxvY2tzaXplKTsKLSAgICAgIHNyYy0+cmVkdWNlX2Jsb2Nrc2l6ZV9jb3VudCA9IDA7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHNyYy0+cmVkdWNlX2Jsb2Nrc2l6ZV9jb3VudCA9IHNyYy0+aW5jcmVhc2VfYmxvY2tzaXplX2NvdW50ID0gMDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NvdXBfaHR0cF9zcmNfdXBkYXRlX3Bvc2l0aW9uIChHc3RTb3VwSFRUUFNyYyAqIHNyYywgZ2ludDY0IGJ5dGVzX3JlYWQpCi17Ci0gIEdzdEJhc2VTcmMgKmJhc2VzcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVCAoc3JjKTsKLSAgZ3VpbnQ2NCBuZXdfcG9zaXRpb247Ci0KLSAgbmV3X3Bvc2l0aW9uID0gc3JjLT5yZWFkX3Bvc2l0aW9uICsgYnl0ZXNfcmVhZDsKLSAgaWYgKEdfTElLRUxZIChzcmMtPnJlcXVlc3RfcG9zaXRpb24gPT0gc3JjLT5yZWFkX3Bvc2l0aW9uKSkKLSAgICBzcmMtPnJlcXVlc3RfcG9zaXRpb24gPSBuZXdfcG9zaXRpb247Ci0gIHNyYy0+cmVhZF9wb3NpdGlvbiA9IG5ld19wb3NpdGlvbjsKLQotICBpZiAoc3JjLT5oYXZlX3NpemUpIHsKLSAgICBpZiAobmV3X3Bvc2l0aW9uID4gc3JjLT5jb250ZW50X3NpemUpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkdvdCBwb3NpdGlvbiBwcmV2aW91cyBlc3RpbWF0ZWQgY29udGVudCBzaXplICIKLSAgICAgICAgICAiKCUiIEdfR0lOVDY0X0ZPUk1BVCAiID4gJSIgR19HSU5UNjRfRk9STUFUICIpIiwgbmV3X3Bvc2l0aW9uLAotICAgICAgICAgIHNyYy0+Y29udGVudF9zaXplKTsKLSAgICAgIHNyYy0+Y29udGVudF9zaXplID0gbmV3X3Bvc2l0aW9uOwotICAgICAgYmFzZXNyYy0+c2VnbWVudC5kdXJhdGlvbiA9IHNyYy0+Y29udGVudF9zaXplOwotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoc3JjKSwKLSAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb25fY2hhbmdlZCAoR1NUX09CSkVDVCAoc3JjKSkpOwotICAgIH0gZWxzZSBpZiAobmV3X3Bvc2l0aW9uID09IHNyYy0+Y29udGVudF9zaXplKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJXZSdyZSBFT1Mgbm93Iik7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc291cF9odHRwX3NyY19yZWFkX2J1ZmZlciAoR3N0U291cEhUVFBTcmMgKiBzcmMsIEdzdEJ1ZmZlciAqKiBvdXRidWYpCi17Ci0gIGdzc2l6ZSByZWFkX2J5dGVzOwotICBHc3RNYXBJbmZvIG1hcGluZm87Ci0gIEdzdEJhc2VTcmMgKmJzcmM7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIGJzcmMgPSBHU1RfQkFTRV9TUkNfQ0FTVCAoc3JjKTsKLQotICAqb3V0YnVmID0gZ3N0X3NvdXBfaHR0cF9zcmNfYWxsb2NfYnVmZmVyIChzcmMpOwotICBpZiAoISpvdXRidWYpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBpZiAoIWdzdF9idWZmZXJfbWFwICgqb3V0YnVmLCAmbWFwaW5mbywgR1NUX01BUF9XUklURSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBtYXAgYnVmZmVyIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgcmVhZF9ieXRlcyA9Ci0gICAgICBnX2lucHV0X3N0cmVhbV9yZWFkIChzcmMtPmlucHV0X3N0cmVhbSwgbWFwaW5mby5kYXRhLCBtYXBpbmZvLnNpemUsCi0gICAgICBzcmMtPmNhbmNlbGxhYmxlLCBOVUxMKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUmVhZCAlIiBHX0dTU0laRV9GT1JNQVQgIiBieXRlcyBmcm9tIGh0dHAgaW5wdXQiLAotICAgICAgcmVhZF9ieXRlcyk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc3JjLT5tdXRleCk7Ci0gIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoc3JjLT5jYW5jZWxsYWJsZSkpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwICgqb3V0YnVmLCAmbWFwaW5mbyk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoKm91dGJ1Zik7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZzcmMtPm11dGV4KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwICgqb3V0YnVmLCAmbWFwaW5mbyk7Ci0gIGlmIChyZWFkX2J5dGVzID4gMCkgewotICAgIGdzdF9idWZmZXJfc2V0X3NpemUgKCpvdXRidWYsIHJlYWRfYnl0ZXMpOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUICgqb3V0YnVmKSA9IGJzcmMtPnNlZ21lbnQucG9zaXRpb247Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ3N0X3NvdXBfaHR0cF9zcmNfdXBkYXRlX3Bvc2l0aW9uIChzcmMsIHJlYWRfYnl0ZXMpOwotCi0gICAgLyogR290IHNvbWUgZGF0YSwgcmVzZXQgcmV0cnkgY291bnRlciAqLwotICAgIHNyYy0+cmV0cnlfY291bnQgPSAwOwotCi0gICAgZ3N0X3NvdXBfaHR0cF9zcmNfY2hlY2tfdXBkYXRlX2Jsb2Nrc2l6ZSAoc3JjLCByZWFkX2J5dGVzKTsKLQotICAgIC8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgYSByYW5nZSByZXF1ZXN0LCByZWFkIGFnYWluIHRvIGxldCBsaWJzb3VwCi0gICAgICogZmluYWxpemUgdGhlIHJlcXVlc3QuIFRoaXMgYWxsb3dzIHRvIHJldXNlIHRoZSBjb25uZWN0aW9uIGFnYWluIGxhdGVyLAotICAgICAqIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIGNhbmNlbCB0aGUgbWVzc2FnZSBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24KLSAgICAgKi8KLSAgICBpZiAoYnNyYy0+c2VnbWVudC5zdG9wICE9IC0xCi0gICAgICAgICYmIGJzcmMtPnNlZ21lbnQucG9zaXRpb24gKyByZWFkX2J5dGVzID49IGJzcmMtPnNlZ21lbnQuc3RvcCkgewotICAgICAgZ3VpbnQ4IHRtcFsxMjhdOwotCi0gICAgICBnX29iamVjdF91bnJlZiAoc3JjLT5tc2cpOwotICAgICAgc3JjLT5tc2cgPSBOVUxMOwotICAgICAgc3JjLT5oYXZlX2JvZHkgPSBUUlVFOwotCi0gICAgICAvKiBUaGlzIHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHkgYXMgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKi8KLSAgICAgIHJlYWRfYnl0ZXMgPQotICAgICAgICAgIGdfaW5wdXRfc3RyZWFtX3JlYWQgKHNyYy0+aW5wdXRfc3RyZWFtLCB0bXAsIHNpemVvZiAodG1wKSwKLSAgICAgICAgICBzcmMtPmNhbmNlbGxhYmxlLCBOVUxMKTsKLSAgICAgIGlmIChyZWFkX2J5dGVzID4gMCkKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoc3JjLAotICAgICAgICAgICAgIlJlYWQgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBhZnRlciBlbmQgb2YgcmFuZ2UiLCByZWFkX2J5dGVzKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoKm91dGJ1Zik7Ci0gICAgaWYgKHJlYWRfYnl0ZXMgPCAwIHx8Ci0gICAgICAgIChzcmMtPmhhdmVfc2l6ZSAmJiBzcmMtPnJlYWRfcG9zaXRpb24gPCBzcmMtPmNvbnRlbnRfc2l6ZSkpIHsKLSAgICAgIC8qIE1heWJlIHRoZSBzZXJ2ZXIgZGlzY29ubmVjdGVkLCByZXRyeSAqLwotICAgICAgcmV0ID0gR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX29iamVjdF91bnJlZiAoc3JjLT5tc2cpOwotICAgICAgc3JjLT5tc2cgPSBOVUxMOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgICAgc3JjLT5oYXZlX2JvZHkgPSBUUlVFOwotICAgIH0KLSAgfQotICBnX211dGV4X3VubG9jayAoJnNyYy0+bXV0ZXgpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc291cF9odHRwX3NyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBwc3JjLCBHc3RCdWZmZXIgKiogb3V0YnVmKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RFdmVudCAqaHR0cF9oZWFkZXJzX2V2ZW50ID0gTlVMTDsKLQotICBzcmMgPSBHU1RfU09VUF9IVFRQX1NSQyAocHNyYyk7Ci0KLXJldHJ5OgotICBnX211dGV4X2xvY2sgKCZzcmMtPm11dGV4KTsKLQotICAvKiBDaGVjayBmb3IgcGVuZGluZyBwb3NpdGlvbiBjaGFuZ2UgKi8KLSAgaWYgKHNyYy0+cmVxdWVzdF9wb3NpdGlvbiAhPSBzcmMtPnJlYWRfcG9zaXRpb24pIHsKLSAgICBpZiAoc3JjLT5pbnB1dF9zdHJlYW0pIHsKLSAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlIChzcmMtPmlucHV0X3N0cmVhbSwgc3JjLT5jYW5jZWxsYWJsZSwgTlVMTCk7Ci0gICAgICBnX29iamVjdF91bnJlZiAoc3JjLT5pbnB1dF9zdHJlYW0pOwotICAgICAgc3JjLT5pbnB1dF9zdHJlYW0gPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoc3JjLT5jYW5jZWxsYWJsZSkpIHsKLSAgICByZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBnX211dGV4X3VubG9jayAoJnNyYy0+bXV0ZXgpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIElmIHdlIGhhdmUgbm8gb3BlbiBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIsIHN0YXJ0IG9uZSAqLwotICBpZiAoIXNyYy0+aW5wdXRfc3RyZWFtKSB7Ci0gICAgKm91dGJ1ZiA9IE5VTEw7Ci0gICAgcmV0ID0KLSAgICAgICAgZ3N0X3NvdXBfaHR0cF9zcmNfZG9fcmVxdWVzdCAoc3JjLAotICAgICAgICBzcmMtPm1ldGhvZCA/IHNyYy0+bWV0aG9kIDogU09VUF9NRVRIT0RfR0VUKTsKLSAgICBodHRwX2hlYWRlcnNfZXZlbnQgPSBzcmMtPmh0dHBfaGVhZGVyc19ldmVudDsKLSAgICBzcmMtPmh0dHBfaGVhZGVyc19ldmVudCA9IE5VTEw7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzcmMtPm11dGV4KTsKLQotICBpZiAocmV0ID09IEdTVF9GTE9XX09LIHx8IHJldCA9PSBHU1RfRkxPV19DVVNUT01fRVJST1IpIHsKLSAgICBpZiAoaHR0cF9oZWFkZXJzX2V2ZW50KSB7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9CQVNFX1NSQ19QQUQgKHNyYyksIGh0dHBfaGVhZGVyc19ldmVudCk7Ci0gICAgICBodHRwX2hlYWRlcnNfZXZlbnQgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0ID0gZ3N0X3NvdXBfaHR0cF9zcmNfcmVhZF9idWZmZXIgKHNyYywgb3V0YnVmKTsKLQotZG9uZToKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUmV0dXJuaW5nICVkICVzIiwgcmV0LCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBpZiAoaHR0cF9oZWFkZXJzX2V2ZW50KQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChodHRwX2hlYWRlcnNfZXZlbnQpOwotCi0gICAgZ19tdXRleF9sb2NrICgmc3JjLT5tdXRleCk7Ci0gICAgaWYgKHNyYy0+aW5wdXRfc3RyZWFtKSB7Ci0gICAgICBnX29iamVjdF91bnJlZiAoc3JjLT5pbnB1dF9zdHJlYW0pOwotICAgICAgc3JjLT5pbnB1dF9zdHJlYW0gPSBOVUxMOwotICAgIH0KLSAgICBnX211dGV4X3VubG9jayAoJnNyYy0+bXV0ZXgpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfQ1VTVE9NX0VSUk9SKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgIGdvdG8gcmV0cnk7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKGJzcmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN0YXJ0KFwiJXNcIikiLCBzcmMtPmxvY2F0aW9uKTsKLQotICByZXR1cm4gZ3N0X3NvdXBfaHR0cF9zcmNfc2Vzc2lvbl9vcGVuIChzcmMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zb3VwX2h0dHBfc3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9TT1VQX0hUVFBfU1JDIChic3JjKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RvcCgpIik7Ci0gIGlmIChzcmMtPmtlZXBfYWxpdmUgJiYgIXNyYy0+bXNnKQotICAgIGdzdF9zb3VwX2h0dHBfc3JjX2NhbmNlbF9tZXNzYWdlIChzcmMpOwotICBlbHNlCi0gICAgZ3N0X3NvdXBfaHR0cF9zcmNfc2Vzc2lvbl9jbG9zZSAoc3JjKTsKLQotICBnc3Rfc291cF9odHRwX3NyY19yZXNldCAoc3JjKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3NvdXBfaHR0cF9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RTb3VwSFRUUFNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9TT1VQX0hUVFBfU1JDIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGdzdF9zb3VwX2h0dHBfc3JjX3Nlc3Npb25fY2xvc2UgKHNyYyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBJbnRlcnJ1cHQgYSBibG9ja2luZyByZXF1ZXN0LiAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfc291cF9odHRwX3NyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9TT1VQX0hUVFBfU1JDIChic3JjKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAidW5sb2NrKCkiKTsKLQotICBzcmMtPnJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICBnc3Rfc291cF9odHRwX3NyY19jYW5jZWxfbWVzc2FnZSAoc3JjKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIEludGVycnVwdCBpbnRlcnJ1cHQuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zb3VwX2h0dHBfc3JjX3VubG9ja19zdG9wIChHc3RCYXNlU3JjICogYnNyYykKLXsKLSAgR3N0U291cEhUVFBTcmMgKnNyYzsKLQotICBzcmMgPSBHU1RfU09VUF9IVFRQX1NSQyAoYnNyYyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVubG9ja19zdG9wKCkiKTsKLQotICBzcmMtPnJldCA9IEdTVF9GTE9XX09LOwotICBnX2NhbmNlbGxhYmxlX3Jlc2V0IChzcmMtPmNhbmNlbGxhYmxlKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfZ2V0X3NpemUgKEdzdEJhc2VTcmMgKiBic3JjLCBndWludDY0ICogc2l6ZSkKLXsKLSAgR3N0U291cEhUVFBTcmMgKnNyYzsKLQotICBzcmMgPSBHU1RfU09VUF9IVFRQX1NSQyAoYnNyYyk7Ci0KLSAgaWYgKHNyYy0+aGF2ZV9zaXplKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ2V0X3NpemUoKSA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIHNyYy0+Y29udGVudF9zaXplKTsKLSAgICAqc2l6ZSA9IHNyYy0+Y29udGVudF9zaXplOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImdldF9zaXplKCkgPSBGQUxTRSIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc291cF9odHRwX3NyY19jaGVja19zZWVrYWJsZSAoR3N0U291cEhUVFBTcmMgKiBzcmMpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogU3BlY2lhbCBjYXNlIHRvIGNoZWNrIGlmIHRoZSBzZXJ2ZXIgYWxsb3dzIHJhbmdlIHJlcXVlc3RzCi0gICAqIGJlZm9yZSByZWFsbHkgc3RhcnRpbmcgdG8gZ2V0IGRhdGEgaW4gdGhlIGJ1ZmZlciBjcmVhdGlvbgotICAgKiBsb29wcy4KLSAgICovCi0gIGlmICghc3JjLT5nb3RfaGVhZGVycyAmJiBHU1RfU1RBVEUgKHNyYykgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgIGdfbXV0ZXhfbG9jayAoJnNyYy0+bXV0ZXgpOwotICAgIHdoaWxlICghc3JjLT5nb3RfaGVhZGVycyAmJiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKHNyYy0+Y2FuY2VsbGFibGUpCi0gICAgICAgICYmIHJldCA9PSBHU1RfRkxPV19PSykgewotICAgICAgaWYgKChzcmMtPm1zZyAmJiBzcmMtPm1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0hFQUQpKSB7Ci0gICAgICAgIC8qIHdhaXQgZm9yIHRoZSBjdXJyZW50IHJlcXVlc3QgdG8gZmluaXNoICovCi0gICAgICAgIGdfY29uZF93YWl0ICgmc3JjLT5oYXZlX2hlYWRlcnNfY29uZCwgJnNyYy0+bXV0ZXgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGdzdF9zb3VwX2h0dHBfc3JjX3Nlc3Npb25fb3BlbiAoc3JjKSkgewotICAgICAgICAgIHJldCA9IGdzdF9zb3VwX2h0dHBfc3JjX2RvX3JlcXVlc3QgKHNyYywgU09VUF9NRVRIT0RfSEVBRCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNyYy0+cmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogQSBIRUFEIHJlcXVlc3Qgc2hvdWxkbid0IGxlYWQgdG8gRU9TICovCi0gICAgICBzcmMtPnJldCA9IEdTVF9GTE9XX09LOwotICAgIH0KLSAgICBnX211dGV4X3VubG9jayAoJnNyYy0+bXV0ZXgpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfaXNfc2Vla2FibGUgKEdzdEJhc2VTcmMgKiBic3JjKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKGJzcmMpOwotCi0gIGdzdF9zb3VwX2h0dHBfc3JjX2NoZWNrX3NlZWthYmxlIChzcmMpOwotCi0gIHJldHVybiBzcmMtPnNlZWthYmxlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zb3VwX2h0dHBfc3JjX2RvX3NlZWsgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgR3N0U291cEhUVFBTcmMgKnNyYyA9IEdTVF9TT1VQX0hUVFBfU1JDIChic3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkb19zZWVrKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0lIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiKSIsIHNlZ21lbnQtPnN0YXJ0LCBzZWdtZW50LT5zdG9wKTsKLSAgaWYgKHNyYy0+cmVhZF9wb3NpdGlvbiA9PSBzZWdtZW50LT5zdGFydCAmJgotICAgICAgc3JjLT5yZXF1ZXN0X3Bvc2l0aW9uID09IHNyYy0+cmVhZF9wb3NpdGlvbiAmJgotICAgICAgc3JjLT5zdG9wX3Bvc2l0aW9uID09IHNlZ21lbnQtPnN0b3ApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAgICJTZWVrIHRvIGN1cnJlbnQgcmVhZC9lbmQgcG9zaXRpb24gYW5kIG5vIHNlZWsgcGVuZGluZyIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgZ3N0X3NvdXBfaHR0cF9zcmNfY2hlY2tfc2Vla2FibGUgKHNyYyk7Ci0KLSAgLyogSWYgd2UgaGF2ZSBubyBoZWFkZXJzIHdlIGRvbid0IGtub3cgeWV0IGlmIGl0IGlzIHNlZWthYmxlIG9yIG5vdC4KLSAgICogU3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCBlcnJvciBvdXQgbGF0ZXIgaWYgaXQgaXNuJ3QgKi8KLSAgaWYgKHNyYy0+Z290X2hlYWRlcnMgJiYgIXNyYy0+c2Vla2FibGUpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIk5vdCBzZWVrYWJsZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChzZWdtZW50LT5yYXRlIDwgMC4wIHx8IHNlZ21lbnQtPmZvcm1hdCAhPSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJJbnZhbGlkIHNlZWsgc2VnbWVudCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChzcmMtPmhhdmVfc2l6ZSAmJiBzZWdtZW50LT5zdGFydCA+PSBzcmMtPmNvbnRlbnRfc2l6ZSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLAotICAgICAgICAiUG90ZW50aWFsbHkgc2Vla2luZyBiZWhpbmQgZW5kIG9mIGZpbGUsIG1pZ2h0IEVPUyBpbW1lZGlhdGVseSIpOwotICB9Ci0KLSAgLyogV2FpdCBmb3IgY3JlYXRlKCkgdG8gaGFuZGxlIHRoZSBqdW1wIGluIG9mZnNldC4gKi8KLSAgc3JjLT5yZXF1ZXN0X3Bvc2l0aW9uID0gc2VnbWVudC0+c3RhcnQ7Ci0gIHNyYy0+c3RvcF9wb3NpdGlvbiA9IHNlZ21lbnQtPnN0b3A7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKGJzcmMpOwotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFNjaGVkdWxpbmdGbGFncyBmbGFnczsKLSAgZ2ludCBtaW5zaXplLCBtYXhzaXplLCBhbGlnbjsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9VUkk6Ci0gICAgICBnc3RfcXVlcnlfc2V0X3VyaSAocXVlcnksIHNyYy0+bG9jYXRpb24pOwotICAgICAgaWYgKHNyYy0+cmVkaXJlY3Rpb25fdXJpICE9IE5VTEwpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmlfcmVkaXJlY3Rpb24gKHF1ZXJ5LCBzcmMtPnJlZGlyZWN0aW9uX3VyaSk7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpX3JlZGlyZWN0aW9uX3Blcm1hbmVudCAocXVlcnksCi0gICAgICAgICAgICBzcmMtPnJlZGlyZWN0aW9uX3Blcm1hbmVudCk7Ci0gICAgICB9Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoIXJldCkKLSAgICByZXQgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChic3JjLCBxdWVyeSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfU0NIRURVTElORzoKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zY2hlZHVsaW5nIChxdWVyeSwgJmZsYWdzLCAmbWluc2l6ZSwgJm1heHNpemUsICZhbGlnbik7Ci0gICAgICBmbGFncyB8PSBHU1RfU0NIRURVTElOR19GTEFHX0JBTkRXSURUSF9MSU1JVEVEOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nIChxdWVyeSwgZmxhZ3MsIG1pbnNpemUsIG1heHNpemUsIGFsaWduKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfc2V0X2xvY2F0aW9uIChHc3RTb3VwSFRUUFNyYyAqIHNyYywgY29uc3QgZ2NoYXIgKiB1cmksCi0gICAgR0Vycm9yICoqIGVycm9yKQotewotICBjb25zdCBjaGFyICphbHRfc2NoZW1lc1tdID0geyAiaWN5Oi8vIiwgImljeXg6Ly8iIH07Ci0gIGd1aW50IGk7Ci0KLSAgaWYgKHNyYy0+bG9jYXRpb24pIHsKLSAgICBnX2ZyZWUgKHNyYy0+bG9jYXRpb24pOwotICAgIHNyYy0+bG9jYXRpb24gPSBOVUxMOwotICB9Ci0KLSAgaWYgKHVyaSA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChhbHRfc2NoZW1lcyk7IGkrKykgewotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4ICh1cmksIGFsdF9zY2hlbWVzW2ldKSkgewotICAgICAgc3JjLT5sb2NhdGlvbiA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiaHR0cDovLyVzIiwgdXJpICsgc3RybGVuIChhbHRfc2NoZW1lc1tpXSkpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHNyYy0+cmVkaXJlY3Rpb25fdXJpKSB7Ci0gICAgZ19mcmVlIChzcmMtPnJlZGlyZWN0aW9uX3VyaSk7Ci0gICAgc3JjLT5yZWRpcmVjdGlvbl91cmkgPSBOVUxMOwotICB9Ci0KLSAgc3JjLT5sb2NhdGlvbiA9IGdfc3RyZHVwICh1cmkpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zb3VwX2h0dHBfc3JjX3NldF9wcm94eSAoR3N0U291cEhUVFBTcmMgKiBzcmMsIGNvbnN0IGdjaGFyICogdXJpKQotewotICBpZiAoc3JjLT5wcm94eSkgewotICAgIHNvdXBfdXJpX2ZyZWUgKHNyYy0+cHJveHkpOwotICAgIHNyYy0+cHJveHkgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHVyaSA9PSBOVUxMIHx8ICp1cmkgPT0gJ1wwJykKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAodXJpLCAiaHR0cDovLyIpKSB7Ci0gICAgc3JjLT5wcm94eSA9IHNvdXBfdXJpX25ldyAodXJpKTsKLSAgfSBlbHNlIHsKLSAgICBnY2hhciAqbmV3X3VyaSA9IGdfc3RyY29uY2F0ICgiaHR0cDovLyIsIHVyaSwgTlVMTCk7Ci0KLSAgICBzcmMtPnByb3h5ID0gc291cF91cmlfbmV3IChuZXdfdXJpKTsKLSAgICBnX2ZyZWUgKG5ld191cmkpOwotICB9Ci0KLSAgcmV0dXJuIChzcmMtPnByb3h5ICE9IE5VTEwpOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9zb3VwX2h0dHBfc3JjX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfU1JDOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF9zb3VwX2h0dHBfc3JjX3VyaV9nZXRfcHJvdG9jb2xzIChHVHlwZSB0eXBlKQotewotICBzdGF0aWMgY29uc3QgZ2NoYXIgKnByb3RvY29sc1tdID0geyAiaHR0cCIsICJodHRwcyIsICJpY3kiLCAiaWN5eCIsIE5VTEwgfTsKLQotICByZXR1cm4gcHJvdG9jb2xzOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RTb3VwSFRUUFNyYyAqc3JjID0gR1NUX1NPVVBfSFRUUF9TUkMgKGhhbmRsZXIpOwotCi0gIC8qIEZJWE1FOiBtYWtlIHRocmVhZC1zYWZlICovCi0gIHJldHVybiBnX3N0cmR1cCAoc3JjLT5sb2NhdGlvbik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdzdFNvdXBIVFRQU3JjICpzcmMgPSBHU1RfU09VUF9IVFRQX1NSQyAoaGFuZGxlcik7Ci0KLSAgcmV0dXJuIGdzdF9zb3VwX2h0dHBfc3JjX3NldF9sb2NhdGlvbiAoc3JjLCB1cmksIGVycm9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zb3VwX2h0dHBfc3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCi17Ci0gIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKikgZ19pZmFjZTsKLQotICBpZmFjZS0+Z2V0X3R5cGUgPSBnc3Rfc291cF9odHRwX3NyY191cmlfZ2V0X3R5cGU7Ci0gIGlmYWNlLT5nZXRfcHJvdG9jb2xzID0gZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX2dldF9wcm90b2NvbHM7Ci0gIGlmYWNlLT5nZXRfdXJpID0gZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX2dldF91cmk7Ci0gIGlmYWNlLT5zZXRfdXJpID0gZ3N0X3NvdXBfaHR0cF9zcmNfdXJpX3NldF91cmk7Ci19CmRpZmYgLS1naXQgYS9leHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oIGIvZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQwMTY1Ni4uMDAwMDAwMAotLS0gYS9leHQvc291cC9nc3Rzb3VwaHR0cHNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggV291dGVyIENsb2V0ZW5zIDx3b3V0ZXJAbWluZC5iZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1NPVVBfSFRUUF9TUkNfSF9fCi0jZGVmaW5lIF9fR1NUX1NPVVBfSFRUUF9TUkNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfU09VUF9IVFRQX1NSQyBcCi0gIChnc3Rfc291cF9odHRwX3NyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU09VUF9IVFRQX1NSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NPVVBfSFRUUF9TUkMsR3N0U291cEhUVFBTcmMpKQotI2RlZmluZSBHU1RfU09VUF9IVFRQX1NSQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgXAotICAgICAgR1NUX1RZUEVfU09VUF9IVFRQX1NSQyxHc3RTb3VwSFRUUFNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NPVVBfSFRUUF9TUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TT1VQX0hUVFBfU1JDKSkKLSNkZWZpbmUgR1NUX0lTX1NPVVBfSFRUUF9TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU09VUF9IVFRQX1NSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTb3VwSFRUUFNyYyBHc3RTb3VwSFRUUFNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTb3VwSFRUUFNyY0NsYXNzIEdzdFNvdXBIVFRQU3JjQ2xhc3M7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9TT1VQX0hUVFBfU1JDX1NFU1NJT05fSU9fU1RBVFVTX0lETEUsCi0gIEdTVF9TT1VQX0hUVFBfU1JDX1NFU1NJT05fSU9fU1RBVFVTX1FVRVVFRCwKLSAgR1NUX1NPVVBfSFRUUF9TUkNfU0VTU0lPTl9JT19TVEFUVVNfUlVOTklORywKLSAgR1NUX1NPVVBfSFRUUF9TUkNfU0VTU0lPTl9JT19TVEFUVVNfQ0FOQ0VMTEVELAotfSBHc3RTb3VwSFRUUFNyY1Nlc3Npb25JT1N0YXR1czsKLQotc3RydWN0IF9Hc3RTb3VwSFRUUFNyYyB7Ci0gIEdzdFB1c2hTcmMgZWxlbWVudDsKLQotICBnY2hhciAqbG9jYXRpb247ICAgICAgICAgICAgIC8qIEZ1bGwgVVJJLiAqLwotICBnY2hhciAqcmVkaXJlY3Rpb25fdXJpOyAgICAgIC8qIEZ1bGwgVVJJIGFmdGVyIHJlZGlyZWN0aW9ucy4gKi8KLSAgZ2Jvb2xlYW4gcmVkaXJlY3Rpb25fcGVybWFuZW50OyAvKiBQZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IHJlZGlyZWN0PyAqLwotICBnY2hhciAqdXNlcl9hZ2VudDsgICAgICAgICAgIC8qIFVzZXItQWdlbnQgSFRUUCBoZWFkZXIuICovCi0gIGdib29sZWFuIGF1dG9tYXRpY19yZWRpcmVjdDsgLyogRm9sbG93IHJlZGlyZWN0cy4gKi8KLSAgU291cFVSSSAqcHJveHk7ICAgICAgICAgICAgICAvKiBIVFRQIHByb3h5IFVSSS4gKi8KLSAgZ2NoYXIgKnVzZXJfaWQ7ICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiB1c2VyIGlkIGZvciBsb2NhdGlvbiBVUkkuICovCi0gIGdjaGFyICp1c2VyX3B3OyAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gdXNlciBwYXNzd29yZCBmb3IgbG9jYXRpb24gVVJJLiAqLwotICBnY2hhciAqcHJveHlfaWQ7ICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIHVzZXIgaWQgZm9yIHByb3h5IFVSSS4gKi8KLSAgZ2NoYXIgKnByb3h5X3B3OyAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiB1c2VyIHBhc3N3b3JkIGZvciBwcm94eSBVUkkuICovCi0gIGdjaGFyICoqY29va2llczsgICAgICAgICAgICAgLyogSFRUUCByZXF1ZXN0IGNvb2tpZXMuICovCi0gIFNvdXBTZXNzaW9uICpzZXNzaW9uOyAgICAgICAgLyogQXN5bmMgY29udGV4dC4gKi8KLSAgU291cE1lc3NhZ2UgKm1zZzsgICAgICAgICAgICAvKiBSZXF1ZXN0IG1lc3NhZ2UuICovCi0gIEdzdEZsb3dSZXR1cm4gcmV0OyAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgZnJvbSBjYWxsYmFjay4gKi8KLSAgZ2ludCByZXRyeV9jb3VudDsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgcmV0cmllcyBzaW5jZSB3ZSByZWNlaXZlZCBkYXRhICovCi0gIGdpbnQgbWF4X3JldHJpZXM7ICAgICAgICAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyAqLwotICBnY2hhciAqbWV0aG9kOyAgICAgICAgICAgICAgIC8qIEhUVFAgbWV0aG9kICovCi0KLSAgZ2Jvb2xlYW4gZ290X2hlYWRlcnM7ICAgICAgICAvKiBBbHJlYWR5IHJlY2VpdmVkIGhlYWRlcnMgZnJvbSB0aGUgc2VydmVyICovCi0gIGdib29sZWFuIGhhdmVfc2l6ZTsgICAgICAgICAgLyogUmVjZWl2ZWQgYW5kIHBhcnNlZCBDb250ZW50LUxlbmd0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci4gKi8KLSAgZ3VpbnQ2NCBjb250ZW50X3NpemU7ICAgICAgICAvKiBWYWx1ZSBvZiBDb250ZW50LUxlbmd0aCBoZWFkZXIuICovCi0gIGd1aW50NjQgcmVhZF9wb3NpdGlvbjsgICAgICAgLyogQ3VycmVudCBwb3NpdGlvbi4gKi8KLSAgZ2Jvb2xlYW4gc2Vla2FibGU7ICAgICAgICAgICAvKiBGQUxTRSBpZiB0aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZS4gKi8KLSAgZ3VpbnQ2NCByZXF1ZXN0X3Bvc2l0aW9uOyAgICAvKiBTZWVrIHRvIHRoaXMgcG9zaXRpb24uICovCi0gIGd1aW50NjQgc3RvcF9wb3NpdGlvbjsgICAgICAgLyogU3RvcCBhdCB0aGlzIHBvc2l0aW9uLiAqLwotICBnYm9vbGVhbiBoYXZlX2JvZHk7ICAgICAgICAgIC8qIEluZGljYXRlcyBpZiBpdCBoYXMganVzdCBiZWVuIHNpZ25hbGVkIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVuZCBvZiB0aGUgbWVzc2FnZSBib2R5LiBUaGlzIGlzIHVzZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWNpZGUgaWYgYW4gb3V0IG9mIHJhbmdlIHJlcXVlc3Qgc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGFuZGxlZCBhcyBhbiBlcnJvciBvciBFT1Mgd2hlbiB0aGUgY29udGVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemUgaXMgdW5rbm93biAqLwotICBnYm9vbGVhbiBrZWVwX2FsaXZlOyAgICAgICAgIC8qIFVzZSBrZWVwLWFsaXZlIHNlc3Npb25zICovCi0gIGdib29sZWFuIHNzbF9zdHJpY3Q7Ci0gIGdjaGFyICpzc2xfY2FfZmlsZTsKLSAgZ2Jvb2xlYW4gc3NsX3VzZV9zeXN0ZW1fY2FfZmlsZTsKLSAgR1Rsc0RhdGFiYXNlICp0bHNfZGF0YWJhc2U7Ci0gIEdUbHNJbnRlcmFjdGlvbiAqdGxzX2ludGVyYWN0aW9uOwotCi0gIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7Ci0gIEdJbnB1dFN0cmVhbSAqaW5wdXRfc3RyZWFtOwotCi0gIGdpbnQgcmVkdWNlX2Jsb2Nrc2l6ZV9jb3VudDsKLSAgZ2ludCBpbmNyZWFzZV9ibG9ja3NpemVfY291bnQ7Ci0gIGd1aW50IG1pbmltdW1fYmxvY2tzaXplOwotCi0gIC8qIFNob3V0Y2FzdC9pY2VjYXN0IG1ldGFkYXRhIGV4dHJhY3Rpb24gaGFuZGxpbmcuICovCi0gIGdib29sZWFuIGlyYWRpb19tb2RlOwotICBHc3RDYXBzICpzcmNfY2FwczsKLSAgZ2NoYXIgKmlyYWRpb19uYW1lOwotICBnY2hhciAqaXJhZGlvX2dlbnJlOwotICBnY2hhciAqaXJhZGlvX3VybDsKLQotICBHc3RTdHJ1Y3R1cmUgKmV4dHJhX2hlYWRlcnM7Ci0KLSAgU291cExvZ2dlckxvZ0xldmVsIGxvZ19sZXZlbDsvKiBTb3VwIEhUVFAgc2Vzc2lvbiBsb2dnZXIgbGV2ZWwgKi8KLQotICBnYm9vbGVhbiBjb21wcmVzczsKLQotICBndWludCB0aW1lb3V0OwotCi0gIEdNdXRleCBtdXRleDsKLSAgR0NvbmQgaGF2ZV9oZWFkZXJzX2NvbmQ7Ci0KLSAgR3N0RXZlbnQgKmh0dHBfaGVhZGVyc19ldmVudDsKLX07Ci0KLXN0cnVjdCBfR3N0U291cEhUVFBTcmNDbGFzcyB7Ci0gIEdzdFB1c2hTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfc291cF9odHRwX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TT1VQX0hUVFBfU1JDX0hfXyAqLwotCmRpZmYgLS1naXQgYS9leHQvc291cC9nc3Rzb3VwdXRpbHMuYyBiL2V4dC9zb3VwL2dzdHNvdXB1dGlscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmMxZWYxLi4wMDAwMDAwCi0tLSBhL2V4dC9zb3VwL2dzdHNvdXB1dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgQEF1dGhvcjogUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqLwotCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgImdzdHNvdXB1dGlscy5oIgotCi0vKioKLSAqIFNvdXAgbG9nZ2VyIGZ1bmNzCi0gKi8KLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoc291cF91dGlsc19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzb3VwX3V0aWxzX2RlYnVnCi0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIKLWdzdF9zb3VwX3V0aWxfbG9nX21ha2VfbGV2ZWxfdGFnIChTb3VwTG9nZ2VyTG9nTGV2ZWwgbGV2ZWwpCi17Ci0gIGdjaGFyIGM7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKChnaW50KSBsZXZlbCA+IDkpKQotICAgIHJldHVybiAnPyc7Ci0KLSAgc3dpdGNoIChsZXZlbCkgewotICAgIGNhc2UgU09VUF9MT0dHRVJfTE9HX01JTklNQUw6Ci0gICAgICBjID0gJ00nOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTT1VQX0xPR0dFUl9MT0dfSEVBREVSUzoKLSAgICAgIGMgPSAnSCc7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNPVVBfTE9HR0VSX0xPR19CT0RZOgotICAgICAgYyA9ICdCJzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBVbmtub3duIGxldmVsLiBJZiB0aGlzIGlzIGhpdCBsaWJzb3VwIGxpa2VseSBhZGRlZCBhIG5ldwotICAgICAgICogbG9nIGxldmVsIHRvIFNvdXBMb2dnZXJMb2dMZXZlbCBhbmQgaXQgc2hvdWxkIGJlIGFkZGVkCi0gICAgICAgKiBhcyBhIGNhc2UgKi8KLSAgICAgIGMgPSBsZXZlbCArICcwJzsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBjOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NvdXBfdXRpbF9sb2dfcHJpbnRlcl9jYiAoU291cExvZ2dlciBHX0dOVUNfVU5VU0VEICogbG9nZ2VyLAotICAgIFNvdXBMb2dnZXJMb2dMZXZlbCBsZXZlbCwgY2hhciBkaXJlY3Rpb24sIGNvbnN0IGNoYXIgKmRhdGEsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnY2hhciBjOwotICBjID0gZ3N0X3NvdXBfdXRpbF9sb2dfbWFrZV9sZXZlbF90YWcgKGxldmVsKTsKLSAgR1NUX1RSQUNFX09CSkVDVCAoR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSksICJIVFRQX1NFU1NJT04oJWMpOiAlYyAlcyIsIGMsCi0gICAgICBkaXJlY3Rpb24sIGRhdGEpOwotfQotCi12b2lkCi1nc3Rfc291cF91dGlsX2xvZ19zZXR1cCAoU291cFNlc3Npb24gKiBzZXNzaW9uLCBTb3VwTG9nZ2VyTG9nTGV2ZWwgbGV2ZWwsCi0gICAgR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIFNvdXBMb2dnZXIgKmxvZ2dlcjsKLQotICBpZiAoIWxldmVsKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAiTm90IGF0dGFjaGluZyBhIGxvZ2dlciB3aXRoIGxldmVsIDAiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnX2Fzc2VydCAoc2Vzc2lvbiAmJiBlbGVtZW50KTsKLQotICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkKLSAgICAgIDwgR1NUX0xFVkVMX1RSQUNFKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAiTm90IHNldHRpbmcgdXAgSFRUUCBzZXNzaW9uIGxvZ2dlci4gIgotICAgICAgICAiTmVlZCBhdCBsZWFzdCBHU1RfTEVWRUxfVFJBQ0UiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDcmVhdGUgYSBuZXcgbG9nZ2VyIGFuZCBzZXQgYm9keV9zaXplX2xpbWl0IHRvIC0xIChubyBsaW1pdCkgKi8KLSAgbG9nZ2VyID0gc291cF9sb2dnZXJfbmV3IChsZXZlbCwgLTEpOwotICBzb3VwX2xvZ2dlcl9zZXRfcHJpbnRlciAobG9nZ2VyLCBnc3Rfc291cF91dGlsX2xvZ19wcmludGVyX2NiLAotICAgICAgZ3N0X29iamVjdF9yZWYgKGVsZW1lbnQpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotCi0gIC8qIEF0dGFjaCBsb2dnZXIgdG8gc2Vzc2lvbiAqLwotICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUgKHNlc3Npb24sIFNPVVBfU0VTU0lPTl9GRUFUVVJFIChsb2dnZXIpKTsKLSAgZ19vYmplY3RfdW5yZWYgKGxvZ2dlcik7Ci19CmRpZmYgLS1naXQgYS9leHQvc291cC9nc3Rzb3VwdXRpbHMuaCBiL2V4dC9zb3VwL2dzdHNvdXB1dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzM1MjVkLi4wMDAwMDAwCi0tLSBhL2V4dC9zb3VwL2dzdHNvdXB1dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgQEF1dGhvcjogUmV5bmFsZG8gSC4gVmVyZGVqbyBQaW5vY2hldCA8ci52ZXJkZWpvQHNpc2Euc2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1NPVVBfVVRJTFNfSF9fCi0jZGVmaW5lIF9fR1NUX1NPVVBfVVRJTFNfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXZvaWQgZ3N0X3NvdXBfdXRpbF9sb2dfc2V0dXAgKFNvdXBTZXNzaW9uICogc2Vzc2lvbiwgU291cExvZ2dlckxvZ0xldmVsIGxldmVsLAotICAgIEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9leHQvc3BlZXgvTWFrZWZpbGUuYW0gYi9leHQvc3BlZXgvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2YzhjNGEuLjAwMDAwMDAKLS0tIGEvZXh0L3NwZWV4L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0c3BlZXgubGEKLQotbGliZ3N0c3BlZXhfbGFfU09VUkNFUyA9IGdzdHNwZWV4LmMgZ3N0c3BlZXhkZWMuYyBnc3RzcGVleGVuYy5jCi1saWJnc3RzcGVleF9sYV9DRkxBR1MgPSAtREdTVF9VU0VfVU5TVEFCTEVfQVBJIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpIFwKLQkkKFNQRUVYX0NGTEFHUykKLWxpYmdzdHNwZWV4X2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0dGFnLSQoR1NUX0FQSV9WRVJTSU9OKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCSQoU1BFRVhfTElCUykKLWxpYmdzdHNwZWV4X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgJChMSUJNKQotbGliZ3N0c3BlZXhfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RzcGVleGVuYy5oIGdzdHNwZWV4ZGVjLmggCmRpZmYgLS1naXQgYS9leHQvc3BlZXgvTWFrZWZpbGUuaW4gYi9leHQvc3BlZXgvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYjNjMjcuLjAwMDAwMDAKLS0tIGEvZXh0L3NwZWV4L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTM4ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGV4dC9zcGVleAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHNwZWV4X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RzcGVleF9sYV9PQkpFQ1RTID0gbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXgubG8gXAotCWxpYmdzdHNwZWV4X2xhLWdzdHNwZWV4ZGVjLmxvIGxpYmdzdHNwZWV4X2xhLWdzdHNwZWV4ZW5jLmxvCi1saWJnc3RzcGVleF9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RzcGVleF9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0c3BlZXhfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RzcGVleF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHNwZWV4X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHNwZWV4X2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHNwZWV4X2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHNwZWV4X2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHNwZWV4LmxhCi1saWJnc3RzcGVleF9sYV9TT1VSQ0VTID0gZ3N0c3BlZXguYyBnc3RzcGVleGRlYy5jIGdzdHNwZWV4ZW5jLmMKLWxpYmdzdHNwZWV4X2xhX0NGTEFHUyA9IC1ER1NUX1VTRV9VTlNUQUJMRV9BUEkgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgXAotCSQoU1BFRVhfQ0ZMQUdTKQotCi1saWJnc3RzcGVleF9sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdHRhZy0kKEdTVF9BUElfVkVSU0lPTikgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpIFwKLQkkKFNQRUVYX0xJQlMpCi0KLWxpYmdzdHNwZWV4X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgJChMSUJNKQotbGliZ3N0c3BlZXhfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0c3BlZXhlbmMuaCBnc3RzcGVleGRlYy5oIAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3NwZWV4L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGV4dC9zcGVleC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHNwZWV4LmxhOiAkKGxpYmdzdHNwZWV4X2xhX09CSkVDVFMpICQobGliZ3N0c3BlZXhfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHNwZWV4X2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RzcGVleF9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0c3BlZXhfbGFfT0JKRUNUUykgJChsaWJnc3RzcGVleF9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhkZWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzcGVleF9sYS1nc3RzcGVleGVuYy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXgubG86IGdzdHNwZWV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzcGVleF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzcGVleF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4LlRwbyAtYyAtbyBsaWJnc3RzcGVleF9sYS1nc3RzcGVleC5sbyBgdGVzdCAtZiAnZ3N0c3BlZXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BlZXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXguVHBvICQoREVQRElSKS9saWJnc3RzcGVleF9sYS1nc3RzcGVleC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzcGVleC5jJyBvYmplY3Q9J2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c3BlZXhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c3BlZXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXgubG8gYHRlc3QgLWYgJ2dzdHNwZWV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwZWV4LmMKLQotbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhkZWMubG86IGdzdHNwZWV4ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzcGVleF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzcGVleF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhkZWMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4ZGVjLlRwbyAtYyAtbyBsaWJnc3RzcGVleF9sYS1nc3RzcGVleGRlYy5sbyBgdGVzdCAtZiAnZ3N0c3BlZXhkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BlZXhkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhkZWMuVHBvICQoREVQRElSKS9saWJnc3RzcGVleF9sYS1nc3RzcGVleGRlYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzcGVleGRlYy5jJyBvYmplY3Q9J2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4ZGVjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c3BlZXhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c3BlZXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhkZWMubG8gYHRlc3QgLWYgJ2dzdHNwZWV4ZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwZWV4ZGVjLmMKLQotbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhlbmMubG86IGdzdHNwZWV4ZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzcGVleF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzcGVleF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhlbmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4ZW5jLlRwbyAtYyAtbyBsaWJnc3RzcGVleF9sYS1nc3RzcGVleGVuYy5sbyBgdGVzdCAtZiAnZ3N0c3BlZXhlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BlZXhlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhlbmMuVHBvICQoREVQRElSKS9saWJnc3RzcGVleF9sYS1nc3RzcGVleGVuYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzcGVleGVuYy5jJyBvYmplY3Q9J2xpYmdzdHNwZWV4X2xhLWdzdHNwZWV4ZW5jLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c3BlZXhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c3BlZXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c3BlZXhfbGEtZ3N0c3BlZXhlbmMubG8gYHRlc3QgLWYgJ2dzdHNwZWV4ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwZWV4ZW5jLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZXh0L3NwZWV4L2dzdHNwZWV4LmMgYi9leHQvc3BlZXgvZ3N0c3BlZXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4OGNkNS4uMDAwMDAwMAotLS0gYS9leHQvc3BlZXgvZ3N0c3BlZXguYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0c3BlZXhkZWMuaCIKLSNpbmNsdWRlICJnc3RzcGVleGVuYy5oIgotCi0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInNwZWV4ZW5jIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9TUEVFWF9FTkMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJzcGVleGRlYyIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgR1NUX1RZUEVfU1BFRVhfREVDKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ3N0X3RhZ19yZWdpc3Rlcl9tdXNpY2JyYWluel90YWdzICgpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgc3BlZXgsCi0gICAgIlNwZWV4IHBsdWdpbiBsaWJyYXJ5IiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvc3BlZXgvZ3N0c3BlZXhkZWMuYyBiL2V4dC9zcGVleC9nc3RzcGVleGRlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzEyM2NlLi4wMDAwMDAwCi0tLSBhL2V4dC9zcGVleC9nc3RzcGVleGRlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTc0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zcGVleGRlYwotICogQHNlZV9hbHNvOiBzcGVleGVuYywgb2dnZGVtdXgKLSAqCi0gKiBUaGlzIGVsZW1lbnQgZGVjb2RlcyBhIFNwZWV4IHN0cmVhbSB0byByYXcgaW50ZWdlciBhdWRpby4KLSAqIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuc3BlZXgub3JnLyI+U3BlZXg8L3VsaW5rPiBpcyBhIHJveWFsdHktZnJlZQotICogYXVkaW8gY29kZWMgbWFpbnRhaW5lZCBieSB0aGUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy54aXBoLm9yZy8iPlhpcGgub3JnCi0gKiBGb3VuZGF0aW9uPC91bGluaz4uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBmaWxlc3JjIGxvY2F0aW9uPXNwZWV4Lm9nZyAhIG9nZ2RlbXV4ICEgc3BlZXhkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYWxzYXNpbmsKLSAqIF18IERlY29kZSBhbiBPZ2cvU3BlZXggZmlsZS4gVG8gY3JlYXRlIGFuIE9nZy9TcGVleCBmaWxlIHJlZmVyIHRvIHRoZQotICogZG9jdW1lbnRhdGlvbiBvZiBzcGVleGVuYy4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RzcGVleGRlYy5oIgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHNwZWV4ZGVjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHNwZWV4ZGVjX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9FTkggICBUUlVFCi0KLWVudW0KLXsKLSAgQVJHXzAsCi0gIEFSR19FTkgKLX07Ci0KLSNkZWZpbmUgRk9STUFUX1NUUiBHU1RfQVVESU9fTkUoUzE2KQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3BlZXhfZGVjX3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBGT1JNQVRfU1RSICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA2MDAwLCA0ODAwMCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3BlZXhfZGVjX3NpbmtfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXNwZWV4IikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9zcGVleF9kZWNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0U3BlZXhEZWMsIGdzdF9zcGVleF9kZWMsIEdTVF9UWVBFX0FVRElPX0RFQ09ERVIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwZWV4X2RlY19zdGFydCAoR3N0QXVkaW9EZWNvZGVyICogZGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BlZXhfZGVjX3N0b3AgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwZWV4X2RlY19zZXRfZm9ybWF0IChHc3RBdWRpb0RlY29kZXIgKiBiZGVjLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9zcGVleF9kZWNfaGFuZGxlX2ZyYW1lIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotc3RhdGljIHZvaWQgZ3N0X3NwZWV4X2RlY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BlZXhfZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIHZvaWQKLWdzdF9zcGVleF9kZWNfY2xhc3NfaW5pdCAoR3N0U3BlZXhEZWNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QXVkaW9EZWNvZGVyQ2xhc3MgKmJhc2VfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBiYXNlX2NsYXNzID0gKEdzdEF1ZGlvRGVjb2RlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zcGVleF9kZWNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfc3BlZXhfZGVjX2dldF9wcm9wZXJ0eTsKLQotICBiYXNlX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BlZXhfZGVjX3N0YXJ0KTsKLSAgYmFzZV9jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BlZXhfZGVjX3N0b3ApOwotICBiYXNlX2NsYXNzLT5zZXRfZm9ybWF0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGVleF9kZWNfc2V0X2Zvcm1hdCk7Ci0gIGJhc2VfY2xhc3MtPmhhbmRsZV9mcmFtZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BlZXhfZGVjX2hhbmRsZV9mcmFtZSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgQVJHX0VOSCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZW5oIiwgIkVuaCIsICJFbmFibGUgcGVyY2VwdHVhbCBlbmhhbmNlbWVudCIsCi0gICAgICAgICAgREVGQVVMVF9FTkgsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnNwZWV4X2RlY19zcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnNwZWV4X2RlY19zaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlNwZWV4IGF1ZGlvIGRlY29kZXIiLCAiQ29kZWMvRGVjb2Rlci9BdWRpbyIsCi0gICAgICAiZGVjb2RlIHNwZWV4IHN0cmVhbXMgdG8gYXVkaW8iLCAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoc3BlZXhkZWNfZGVidWcsICJzcGVleGRlYyIsIDAsCi0gICAgICAic3BlZXggZGVjb2RpbmcgZWxlbWVudCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWV4X2RlY19yZXNldCAoR3N0U3BlZXhEZWMgKiBkZWMpCi17Ci0gIGRlYy0+cGFja2V0bm8gPSAwOwotICBkZWMtPmZyYW1lX3NpemUgPSAwOwotICBkZWMtPmZyYW1lX2R1cmF0aW9uID0gMDsKLSAgZGVjLT5tb2RlID0gTlVMTDsKLSAgZnJlZSAoZGVjLT5oZWFkZXIpOwotICBkZWMtPmhlYWRlciA9IE5VTEw7Ci0gIHNwZWV4X2JpdHNfZGVzdHJveSAoJmRlYy0+Yml0cyk7Ci0gIHNwZWV4X2JpdHNfc2V0X2JpdF9idWZmZXIgKCZkZWMtPmJpdHMsIE5VTEwsIDApOwotCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJmRlYy0+c3RyZWFtaGVhZGVyLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmZGVjLT52b3JiaXNjb21tZW50LCBOVUxMKTsKLQotICBpZiAoZGVjLT5zdGVyZW8pIHsKLSAgICBzcGVleF9zdGVyZW9fc3RhdGVfZGVzdHJveSAoZGVjLT5zdGVyZW8pOwotICAgIGRlYy0+c3RlcmVvID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZWMtPnN0YXRlKSB7Ci0gICAgc3BlZXhfZGVjb2Rlcl9kZXN0cm95IChkZWMtPnN0YXRlKTsKLSAgICBkZWMtPnN0YXRlID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWV4X2RlY19pbml0IChHc3RTcGVleERlYyAqIGRlYykKLXsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X25lZWRzX2Zvcm1hdCAoR1NUX0FVRElPX0RFQ09ERVIgKGRlYyksIFRSVUUpOwotICBnc3RfYXVkaW9fZGVjb2Rlcl9zZXRfdXNlX2RlZmF1bHRfcGFkX2FjY2VwdGNhcHMgKEdTVF9BVURJT19ERUNPREVSX0NBU1QKLSAgICAgIChkZWMpLCBUUlVFKTsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfQVVESU9fREVDT0RFUl9TSU5LX1BBRCAoZGVjKSk7Ci0KLSAgZGVjLT5lbmggPSBERUZBVUxUX0VOSDsKLQotICBnc3Rfc3BlZXhfZGVjX3Jlc2V0IChkZWMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGVleF9kZWNfc3RhcnQgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYykKLXsKLSAgR3N0U3BlZXhEZWMgKnNkID0gR1NUX1NQRUVYX0RFQyAoZGVjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJzdGFydCIpOwotICBnc3Rfc3BlZXhfZGVjX3Jlc2V0IChzZCk7Ci0KLSAgLyogd2Uga25vdyBhYm91dCBjb25jZWFsbWVudCAqLwotICBnc3RfYXVkaW9fZGVjb2Rlcl9zZXRfcGxjX2F3YXJlIChkZWMsIFRSVUUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGVleF9kZWNfc3RvcCAoR3N0QXVkaW9EZWNvZGVyICogZGVjKQotewotICBHc3RTcGVleERlYyAqc2QgPSBHU1RfU1BFRVhfREVDIChkZWMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgInN0b3AiKTsKLSAgZ3N0X3NwZWV4X2RlY19yZXNldCAoc2QpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NwZWV4X2RlY19wYXJzZV9oZWFkZXIgKEdzdFNwZWV4RGVjICogZGVjLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGNoYW5fcG9zWzJdWzJdID0gewotICAgIHtHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05PfSwKLSAgICB7R1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFR9Ci0gIH07Ci0KLSAgLyogZ2V0IHRoZSBoZWFkZXIgKi8KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZGVjLT5oZWFkZXIgPSBzcGVleF9wYWNrZXRfdG9faGVhZGVyICgoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBpZiAoIWRlYy0+aGVhZGVyKQotICAgIGdvdG8gbm9faGVhZGVyOwotCi0gIGlmIChkZWMtPmhlYWRlci0+bW9kZSA+PSBTUEVFWF9OQl9NT0RFUyB8fCBkZWMtPmhlYWRlci0+bW9kZSA8IDApCi0gICAgZ290byBtb2RlX3Rvb19vbGQ7Ci0KLSAgZGVjLT5tb2RlID0gc3BlZXhfbGliX2dldF9tb2RlIChkZWMtPmhlYWRlci0+bW9kZSk7Ci0KLSAgLyogaW5pdGlhbGl6ZSB0aGUgZGVjb2RlciAqLwotICBkZWMtPnN0YXRlID0gc3BlZXhfZGVjb2Rlcl9pbml0IChkZWMtPm1vZGUpOwotICBpZiAoIWRlYy0+c3RhdGUpCi0gICAgZ290byBpbml0X2ZhaWxlZDsKLQotICBzcGVleF9kZWNvZGVyX2N0bCAoZGVjLT5zdGF0ZSwgU1BFRVhfU0VUX0VOSCwgJmRlYy0+ZW5oKTsKLSAgc3BlZXhfZGVjb2Rlcl9jdGwgKGRlYy0+c3RhdGUsIFNQRUVYX0dFVF9GUkFNRV9TSVpFLCAmZGVjLT5mcmFtZV9zaXplKTsKLQotICBpZiAoZGVjLT5oZWFkZXItPm5iX2NoYW5uZWxzICE9IDEpIHsKLSAgICBkZWMtPnN0ZXJlbyA9IHNwZWV4X3N0ZXJlb19zdGF0ZV9pbml0ICgpOwotICAgIGRlYy0+Y2FsbGJhY2suY2FsbGJhY2tfaWQgPSBTUEVFWF9JTkJBTkRfU1RFUkVPOwotICAgIGRlYy0+Y2FsbGJhY2suZnVuYyA9IHNwZWV4X3N0ZF9zdGVyZW9fcmVxdWVzdF9oYW5kbGVyOwotICAgIGRlYy0+Y2FsbGJhY2suZGF0YSA9IGRlYy0+c3RlcmVvOwotICAgIHNwZWV4X2RlY29kZXJfY3RsIChkZWMtPnN0YXRlLCBTUEVFWF9TRVRfSEFORExFUiwgJmRlYy0+Y2FsbGJhY2spOwotICB9Ci0KLSAgc3BlZXhfZGVjb2Rlcl9jdGwgKGRlYy0+c3RhdGUsIFNQRUVYX1NFVF9TQU1QTElOR19SQVRFLCAmZGVjLT5oZWFkZXItPnJhdGUpOwotCi0gIGRlYy0+ZnJhbWVfZHVyYXRpb24gPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChkZWMtPmZyYW1lX3NpemUsCi0gICAgICBHU1RfU0VDT05ELCBkZWMtPmhlYWRlci0+cmF0ZSk7Ci0KLSAgc3BlZXhfYml0c19pbml0ICgmZGVjLT5iaXRzKTsKLQotICAvKiBzZXQgY2FwcyAqLwotICBnc3RfYXVkaW9faW5mb19pbml0ICgmaW5mbyk7Ci0gIGdzdF9hdWRpb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLAotICAgICAgR1NUX0FVRElPX0ZPUk1BVF9TMTYsCi0gICAgICBkZWMtPmhlYWRlci0+cmF0ZSwKLSAgICAgIGRlYy0+aGVhZGVyLT5uYl9jaGFubmVscywgY2hhbl9wb3NbZGVjLT5oZWFkZXItPm5iX2NoYW5uZWxzIC0gMV0pOwotCi0gIGlmICghZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X291dHB1dF9mb3JtYXQgKEdTVF9BVURJT19ERUNPREVSIChkZWMpLCAmaW5mbykpCi0gICAgZ290byBuZWdvX2ZhaWxlZDsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1ub19oZWFkZXI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoR1NUX0VMRU1FTlQgKGRlYyksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiY291bGRuJ3QgcmVhZCBoZWFkZXIiKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1tb2RlX3Rvb19vbGQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoR1NUX0VMRU1FTlQgKGRlYyksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksCi0gICAgICAgICgiTW9kZSBudW1iZXIgJWQgZG9lcyBub3QgKHlldC9hbnkgbG9uZ2VyKSBleGlzdCBpbiB0aGlzIHZlcnNpb24iLAotICAgICAgICAgICAgZGVjLT5oZWFkZXItPm1vZGUpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWluaXRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKEdTVF9FTEVNRU5UIChkZWMpLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoImNvdWxkbid0IGluaXRpYWxpemUgZGVjb2RlciIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLW5lZ29fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKEdTVF9FTEVNRU5UIChkZWMpLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoImNvdWxkbid0IG5lZ290aWF0ZSBmb3JtYXQiKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc3BlZXhfZGVjX3BhcnNlX2NvbW1lbnRzIChHc3RTcGVleERlYyAqIGRlYywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RUYWdMaXN0ICpsaXN0OwotICBnY2hhciAqdmVyLCAqZW5jb2RlciA9IE5VTEw7Ci0KLSAgbGlzdCA9IGdzdF90YWdfbGlzdF9mcm9tX3ZvcmJpc2NvbW1lbnRfYnVmZmVyIChidWYsIE5VTEwsIDAsICZlbmNvZGVyKTsKLQotICBpZiAoIWxpc3QpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgImNvdWxkbid0IGRlY29kZSBjb21tZW50cyIpOwotICAgIGxpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICB9Ci0KLSAgaWYgKGVuY29kZXIpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgIEdTVF9UQUdfRU5DT0RFUiwgZW5jb2RlciwgTlVMTCk7Ci0gIH0KLQotICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX0FVRElPX0NPREVDLCAiU3BlZXgiLCBOVUxMKTsKLQotICB2ZXIgPSBnX3N0cm5kdXAgKGRlYy0+aGVhZGVyLT5zcGVleF92ZXJzaW9uLCBTUEVFWF9IRUFERVJfVkVSU0lPTl9MRU5HVEgpOwotICBnX3N0cnN0cmlwICh2ZXIpOwotCi0gIGlmICh2ZXIgIT0gTlVMTCAmJiAqdmVyICE9ICdcMCcpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkIChsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgIEdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OLCB2ZXIsIE5VTEwpOwotICB9Ci0KLSAgaWYgKGRlYy0+aGVhZGVyLT5iaXRyYXRlID4gMCkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgR1NUX1RBR19CSVRSQVRFLCAoZ3VpbnQpIGRlYy0+aGVhZGVyLT5iaXRyYXRlLCBOVUxMKTsKLSAgfQotCi0gIEdTVF9JTkZPX09CSkVDVCAoZGVjLCAidGFnczogJSIgR1NUX1BUUl9GT1JNQVQsIGxpc3QpOwotCi0gIGdzdF9hdWRpb19kZWNvZGVyX21lcmdlX3RhZ3MgKEdTVF9BVURJT19ERUNPREVSIChkZWMpLCBsaXN0LAotICAgICAgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmIChsaXN0KTsKLQotICBnX2ZyZWUgKGVuY29kZXIpOwotICBnX2ZyZWUgKHZlcik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGVleF9kZWNfc2V0X2Zvcm1hdCAoR3N0QXVkaW9EZWNvZGVyICogYmRlYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFNwZWV4RGVjICpkZWMgPSBHU1RfU1BFRVhfREVDIChiZGVjKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0U3RydWN0dXJlICpzOwotICBjb25zdCBHVmFsdWUgKnN0cmVhbWhlYWRlcjsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGlmICgoc3RyZWFtaGVhZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJzdHJlYW1oZWFkZXIiKSkgJiYKLSAgICAgIEdfVkFMVUVfSE9MRFMgKHN0cmVhbWhlYWRlciwgR1NUX1RZUEVfQVJSQVkpICYmCi0gICAgICBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKHN0cmVhbWhlYWRlcikgPj0gMikgewotICAgIGNvbnN0IEdWYWx1ZSAqaGVhZGVyLCAqdm9yYmlzY29tbWVudDsKLSAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX09LOwotCi0gICAgaGVhZGVyID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoc3RyZWFtaGVhZGVyLCAwKTsKLSAgICBpZiAoaGVhZGVyICYmIEdfVkFMVUVfSE9MRFMgKGhlYWRlciwgR1NUX1RZUEVfQlVGRkVSKSkgewotICAgICAgYnVmID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGhlYWRlcik7Ci0gICAgICByZXMgPSBnc3Rfc3BlZXhfZGVjX3BhcnNlX2hlYWRlciAoZGVjLCBidWYpOwotICAgICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBkb25lOwotICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmZGVjLT5zdHJlYW1oZWFkZXIsIGJ1Zik7Ci0gICAgfQotCi0gICAgdm9yYmlzY29tbWVudCA9IGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKHN0cmVhbWhlYWRlciwgMSk7Ci0gICAgaWYgKHZvcmJpc2NvbW1lbnQgJiYgR19WQUxVRV9IT0xEUyAodm9yYmlzY29tbWVudCwgR1NUX1RZUEVfQlVGRkVSKSkgewotICAgICAgYnVmID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZvcmJpc2NvbW1lbnQpOwotICAgICAgcmVzID0gZ3N0X3NwZWV4X2RlY19wYXJzZV9jb21tZW50cyAoZGVjLCBidWYpOwotICAgICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBkb25lOwotICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmZGVjLT52b3JiaXNjb21tZW50LCBidWYpOwotICAgIH0KLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NwZWV4X2RlY19wYXJzZV9kYXRhIChHc3RTcGVleERlYyAqIGRlYywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX09LOwotICBnaW50IGksIGZwcDsKLSAgU3BlZXhCaXRzICpiaXRzOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBpZiAoIWRlYy0+ZnJhbWVfZHVyYXRpb24pCi0gICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICBpZiAoR19MSUtFTFkgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpKSB7Ci0gICAgLyogc2VuZCBkYXRhIHRvIHRoZSBiaXRzdHJlYW0gKi8KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHNwZWV4X2JpdHNfcmVhZF9mcm9tICgmZGVjLT5iaXRzLCAoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gICAgZnBwID0gZGVjLT5oZWFkZXItPmZyYW1lc19wZXJfcGFja2V0OwotICAgIGJpdHMgPSAmZGVjLT5iaXRzOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAicmVjZWl2ZWQgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQKLSAgICAgICAgIiwgZnBwICVkLCAlZCBiaXRzIiwgbWFwLnNpemUsIGZwcCwgc3BlZXhfYml0c19yZW1haW5pbmcgKGJpdHMpKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBGSVhNRSA/IGFjdHVhbGx5IGNvbnNpZGVyIGhvdyBtdWNoIGNvbmNlYWxtZW50IGlzIG5lZWRlZCAqLwotICAgIC8qIGNvbmNlYWxtZW50IGRhdGEsIHBhc3MgTlVMTCBhcyB0aGUgYml0cyBwYXJhbWV0ZXJzICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAiY3JlYXRpbmcgY29uY2VhbG1lbnQgZGF0YSIpOwotICAgIGZwcCA9IGRlYy0+aGVhZGVyLT5mcmFtZXNfcGVyX3BhY2tldDsKLSAgICBiaXRzID0gTlVMTDsKLSAgfQotCi0gIC8qIG5vdyBkZWNvZGUgZWFjaCBmcmFtZSwgY2F0ZXJpbmcgZm9yIHVua25vd24gbnVtYmVyIG9mIHRoZW0gKGUuZy4gcnRwKSAqLwotICBmb3IgKGkgPSAwOyBpIDwgZnBwOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgICBnYm9vbGVhbiBjb3JydXB0ZWQgPSBGQUxTRTsKLSAgICBnaW50IHJldDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChkZWMsICJkZWNvZGluZyBmcmFtZSAlZC8lZCwgJWQgYml0cyByZW1haW5pbmciLCBpLCBmcHAsCi0gICAgICAgIGJpdHMgPyBzcGVleF9iaXRzX3JlbWFpbmluZyAoYml0cykgOiAtMSk7Ci0jaWYgMAotICAgIHJlcyA9Ci0gICAgICAgIGdzdF9wYWRfYWxsb2NfYnVmZmVyX2FuZF9zZXRfY2FwcyAoR1NUX0FVRElPX0RFQ09ERVJfU1JDX1BBRCAoZGVjKSwKLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSwgZGVjLT5mcmFtZV9zaXplICogZGVjLT5oZWFkZXItPm5iX2NoYW5uZWxzICogMiwKLSAgICAgICAgR1NUX1BBRF9DQVBTIChHU1RfQVVESU9fREVDT0RFUl9TUkNfUEFEIChkZWMpKSwgJm91dGJ1Zik7Ci0KLSAgICBpZiAocmVzICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJidWYgYWxsb2MgZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgICByZXR1cm4gcmVzOwotICAgIH0KLSNlbmRpZgotICAgIC8qIEZJWE1FLCB3ZSBjYW4gdXNlIGEgYnVmZmVycG9vbCBiZWNhdXNlIHdlIGhhdmUgZml4ZWQgc2l6ZSBidWZmZXJzLiBXZQotICAgICAqIGNvdWxkIGFsc28gdXNlIGFuIGFsbG9jYXRvciAqLwotICAgIG91dGJ1ZiA9Ci0gICAgICAgIGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLAotICAgICAgICBkZWMtPmZyYW1lX3NpemUgKiBkZWMtPmhlYWRlci0+bmJfY2hhbm5lbHMgKiAyLCBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIHJldCA9IHNwZWV4X2RlY29kZV9pbnQgKGRlYy0+c3RhdGUsIGJpdHMsIChzcHhfaW50MTZfdCAqKSBtYXAuZGF0YSk7Ci0KLSAgICBpZiAocmV0ID09IC0xKSB7Ci0gICAgICAvKiB1aD8gZW5kIG9mIHN0cmVhbSAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZWMsICJVbmV4cGVjdGVkIGVuZCBvZiBzdHJlYW0gZm91bmQiKTsKLSAgICAgIGNvcnJ1cHRlZCA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gLTIpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjLCAiRGVjb2RpbmcgZXJyb3I6IGNvcnJ1cHRlZCBzdHJlYW0/Iik7Ci0gICAgICBjb3JydXB0ZWQgPSBUUlVFOwotICAgIH0KLQotICAgIGlmIChiaXRzICYmIHNwZWV4X2JpdHNfcmVtYWluaW5nIChiaXRzKSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjLCAiRGVjb2Rpbmcgb3ZlcmZsb3c6IGNvcnJ1cHRlZCBzdHJlYW0/Iik7Ci0gICAgICBjb3JydXB0ZWQgPSBUUlVFOwotICAgIH0KLSAgICBpZiAoZGVjLT5oZWFkZXItPm5iX2NoYW5uZWxzID09IDIpCi0gICAgICBzcGVleF9kZWNvZGVfc3RlcmVvX2ludCAoKHNweF9pbnQxNl90ICopIG1hcC5kYXRhLCBkZWMtPmZyYW1lX3NpemUsCi0gICAgICAgICAgZGVjLT5zdGVyZW8pOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLQotICAgIGlmICghY29ycnVwdGVkKSB7Ci0gICAgICByZXMgPSBnc3RfYXVkaW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKEdTVF9BVURJT19ERUNPREVSIChkZWMpLCBvdXRidWYsIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXMgPSBnc3RfYXVkaW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKEdTVF9BVURJT19ERUNPREVSIChkZWMpLCBOVUxMLCAxKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci0gICAgfQotCi0gICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAiZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm90X25lZ290aWF0ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAotICAgICAgICAoImRlY29kZXIgbm90IGluaXRpYWxpemVkIikpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW1lbWNtcF9idWZmZXJzIChHc3RCdWZmZXIgKiBidWYxLCBHc3RCdWZmZXIgKiBidWYyKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3NpemUgc2l6ZTEsIHNpemUyOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc2l6ZTEgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYxKTsKLSAgc2l6ZTIgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYyKTsKLQotICBpZiAoc2l6ZTEgIT0gc2l6ZTIpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYxLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSBnc3RfYnVmZmVyX21lbWNtcCAoYnVmMiwgMCwgbWFwLmRhdGEsIG1hcC5zaXplKSA9PSAwOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYxLCAmbWFwKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NwZWV4X2RlY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRGVjb2RlciAqIGJkZWMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdFNwZWV4RGVjICpkZWM7Ci0KLSAgLyogbm8gZmFuY3kgZHJhaW5pbmcgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFidWYpKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBkZWMgPSBHU1RfU1BFRVhfREVDIChiZGVjKTsKLQotICAvKiBJZiB3ZSBoYXZlIHRoZSBzdHJlYW1oZWFkZXIgYW5kIHZvcmJpc2NvbW1lbnQgZnJvbSB0aGUgY2FwcyBhbHJlYWR5Ci0gICAqIGlnbm9yZSB0aGVtIGhlcmUgKi8KLSAgaWYgKGRlYy0+c3RyZWFtaGVhZGVyICYmIGRlYy0+dm9yYmlzY29tbWVudCkgewotICAgIGlmIChtZW1jbXBfYnVmZmVycyAoZGVjLT5zdHJlYW1oZWFkZXIsIGJ1ZikpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImZvdW5kIHN0cmVhbWhlYWRlciIpOwotICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfZmluaXNoX2ZyYW1lIChiZGVjLCBOVUxMLCAxKTsKLSAgICAgIHJlcyA9IEdTVF9GTE9XX09LOwotICAgIH0gZWxzZSBpZiAobWVtY21wX2J1ZmZlcnMgKGRlYy0+dm9yYmlzY29tbWVudCwgYnVmKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAiZm91bmQgdm9yYmlzY29tbWVudHMiKTsKLSAgICAgIGdzdF9hdWRpb19kZWNvZGVyX2ZpbmlzaF9mcmFtZSAoYmRlYywgTlVMTCwgMSk7Ci0gICAgICByZXMgPSBHU1RfRkxPV19PSzsKLSAgICB9IGVsc2UgewotICAgICAgcmVzID0gZ3N0X3NwZWV4X2RlY19wYXJzZV9kYXRhIChkZWMsIGJ1Zik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcGFja2V0IGNvdW50aW5nIGFuZCBhc3N1bWUgdGhhdCB0aGUKLSAgICAgKiBmaXJzdCB0d28gcGFja2V0cyBhcmUgdGhlIGhlYWRlcnMuICovCi0gICAgc3dpdGNoIChkZWMtPnBhY2tldG5vKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImNvdW50ZWQgc3RyZWFtaGVhZGVyIik7Ci0gICAgICAgIHJlcyA9IGdzdF9zcGVleF9kZWNfcGFyc2VfaGVhZGVyIChkZWMsIGJ1Zik7Ci0gICAgICAgIGdzdF9hdWRpb19kZWNvZGVyX2ZpbmlzaF9mcmFtZSAoYmRlYywgTlVMTCwgMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAxOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZWMsICJjb3VudGVkIHZvcmJpc2NvbW1lbnRzIik7Ci0gICAgICAgIHJlcyA9IGdzdF9zcGVleF9kZWNfcGFyc2VfY29tbWVudHMgKGRlYywgYnVmKTsKLSAgICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfZmluaXNoX2ZyYW1lIChiZGVjLCBOVUxMLCAxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgewotICAgICAgICByZXMgPSBnc3Rfc3BlZXhfZGVjX3BhcnNlX2RhdGEgKGRlYywgYnVmKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZGVjLT5wYWNrZXRubysrOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlZXhfZGVjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTcGVleERlYyAqc3BlZXhkZWM7Ci0KLSAgc3BlZXhkZWMgPSBHU1RfU1BFRVhfREVDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgQVJHX0VOSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcGVleGRlYy0+ZW5oKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVleF9kZWNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwZWV4RGVjICpzcGVleGRlYzsKLQotICBzcGVleGRlYyA9IEdTVF9TUEVFWF9ERUMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBBUkdfRU5IOgotICAgICAgc3BlZXhkZWMtPmVuaCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2V4dC9zcGVleC9nc3RzcGVleGRlYy5oIGIvZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMWUxNzEuLjAwMDAwMDAKLS0tIGEvZXh0L3NwZWV4L2dzdHNwZWV4ZGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1NQRUVYX0RFQ19IX18KLSNkZWZpbmUgX19HU1RfU1BFRVhfREVDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuaD4KLQotI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+Ci0jaW5jbHVkZSA8c3BlZXgvc3BlZXhfY2FsbGJhY2tzLmg+Ci0jaW5jbHVkZSA8c3BlZXgvc3BlZXhfaGVhZGVyLmg+Ci0jaW5jbHVkZSA8c3BlZXgvc3BlZXhfc3RlcmVvLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TUEVFWF9ERUMgXAotICAoZ3N0X3NwZWV4X2RlY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1BFRVhfREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfU1BFRVhfREVDLEdzdFNwZWV4RGVjKSkKLSNkZWZpbmUgR1NUX1NQRUVYX0RFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TUEVFWF9ERUMsR3N0U3BlZXhEZWNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TUEVFWF9ERUMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TUEVFWF9ERUMpKQotI2RlZmluZSBHU1RfSVNfU1BFRVhfREVDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NQRUVYX0RFQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGVleERlYyBHc3RTcGVleERlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGVleERlY0NsYXNzIEdzdFNwZWV4RGVjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0U3BlZXhEZWMgewotICBHc3RBdWRpb0RlY29kZXIgICBlbGVtZW50OwotCi0gIHZvaWQgICAgICAgICAgICAgICAgICAqc3RhdGU7Ci0gIFNwZWV4U3RlcmVvU3RhdGUgICAgICAqc3RlcmVvOwotICBjb25zdCBTcGVleE1vZGUgICAgICAgKm1vZGU7Ci0gIFNwZWV4SGVhZGVyICAgICAgICAgICAqaGVhZGVyOwotICBTcGVleENhbGxiYWNrICAgICAgICAgY2FsbGJhY2s7Ci0gIFNwZWV4Qml0cyAgICAgICAgICAgICBiaXRzOwotCi0gIGdib29sZWFuICAgICAgICAgICAgICBlbmg7Ci0KLSAgZ2ludCAgICAgICAgICAgICAgICAgIGZyYW1lX3NpemU7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgICBmcmFtZV9kdXJhdGlvbjsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgIHBhY2tldG5vOwotCi0gIEdzdEJ1ZmZlciAgICAgICAgICAgICAqc3RyZWFtaGVhZGVyOwotICBHc3RCdWZmZXIgICAgICAgICAgICAgKnZvcmJpc2NvbW1lbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFNwZWV4RGVjQ2xhc3MgewotICBHc3RBdWRpb0RlY29kZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfc3BlZXhfZGVjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NQRUVYX0RFQ19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC9zcGVleC9nc3RzcGVleGVuYy5jIGIvZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNjZhZjYuLjAwMDAwMDAKLS0tIGEvZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NDQgKzAsMCBAQAotLyogR1N0cmVhbWVyIFNwZWV4IEVuY29kZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtc3BlZXhlbmMKLSAqIEBzZWVfYWxzbzogc3BlZXhkZWMsIG9nZ211eAotICoKLSAqIFRoaXMgZWxlbWVudCBlbmNvZGVzIGF1ZGlvIGFzIGEgU3BlZXggc3RyZWFtLgotICogPHVsaW5rIHVybD0iaHR0cDovL3d3dy5zcGVleC5vcmcvIj5TcGVleDwvdWxpbms+IGlzIGEgcm95YWx0eS1mcmVlCi0gKiBhdWRpbyBjb2RlYyBtYWludGFpbmVkIGJ5IHRoZSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LnhpcGgub3JnLyI+WGlwaC5vcmcKLSAqIEZvdW5kYXRpb248L3VsaW5rPi4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMDAgISBzcGVleGVuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWJlZXAub2dnCi0gKiBdfCBFbmNvZGUgYW4gT2dnL1NwZWV4IGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+Ci0jaW5jbHVkZSA8c3BlZXgvc3BlZXhfc3RlcmVvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0dGFnc2V0dGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlICJnc3RzcGVleGVuYy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChzcGVleGVuY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzcGVleGVuY19kZWJ1ZwotCi0jZGVmaW5lIEZPUk1BVF9TVFIgR1NUX0FVRElPX05FKFMxNikKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEZPUk1BVF9TVFIgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDYwMDAsIDQ4MDAwIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMTsgIgotICAgICAgICAiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUX1NUUiAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgNjAwMCwgNDgwMDAgXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAyLCAiICJjaGFubmVsLW1hc2sgPSAoYml0bWFzaykgMHgzIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1zcGVleCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgNjAwMCwgNDgwMDAgXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDJdIikKLSAgICApOwotCi0jZGVmaW5lIERFRkFVTFRfUVVBTElUWSAgICAgICAgIDguMAotI2RlZmluZSBERUZBVUxUX0JJVFJBVEUgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfTU9ERSAgICAgICAgICAgIEdTVF9TUEVFWF9FTkNfTU9ERV9BVVRPCi0jZGVmaW5lIERFRkFVTFRfVkJSICAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfQUJSICAgICAgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9WQUQgICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9EVFggICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9DT01QTEVYSVRZICAgICAgMwotI2RlZmluZSBERUZBVUxUX05GUkFNRVMgICAgICAgICAxCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1FVQUxJVFksCi0gIFBST1BfQklUUkFURSwKLSAgUFJPUF9NT0RFLAotICBQUk9QX1ZCUiwKLSAgUFJPUF9BQlIsCi0gIFBST1BfVkFELAotICBQUk9QX0RUWCwKLSAgUFJPUF9DT01QTEVYSVRZLAotICBQUk9QX05GUkFNRVMsCi0gIFBST1BfTEFTVF9NRVNTQUdFCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX1NQRUVYX0VOQ19NT0RFIChnc3Rfc3BlZXhfZW5jX21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3NwZWV4X2VuY19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgc3BlZXhfZW5jX21vZGVfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHNwZWV4X2VuY19tb2Rlc1tdID0gewotICAgIHtHU1RfU1BFRVhfRU5DX01PREVfQVVUTywgIkF1dG8iLCAiYXV0byJ9LAotICAgIHtHU1RfU1BFRVhfRU5DX01PREVfVVdCLCAiVWx0cmEgV2lkZSBCYW5kIiwgInV3YiJ9LAotICAgIHtHU1RfU1BFRVhfRU5DX01PREVfV0IsICJXaWRlIEJhbmQiLCAid2IifSwKLSAgICB7R1NUX1NQRUVYX0VOQ19NT0RFX05CLCAiTmFycm93IEJhbmQiLCAibmIifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0gIGlmIChHX1VOTElLRUxZIChzcGVleF9lbmNfbW9kZV90eXBlID09IDApKSB7Ci0gICAgc3BlZXhfZW5jX21vZGVfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTcGVleEVuY01vZGUiLAotICAgICAgICBzcGVleF9lbmNfbW9kZXMpOwotICB9Ci0gIHJldHVybiBzcGVleF9lbmNfbW9kZV90eXBlOwotfQotCi1zdGF0aWMgdm9pZCBnc3Rfc3BlZXhfZW5jX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9zcGVleF9lbmNfc2V0dXAgKEdzdFNwZWV4RW5jICogZW5jKTsKLQotc3RhdGljIHZvaWQgZ3N0X3NwZWV4X2VuY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BlZXhfZW5jX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3NwZWV4X2VuY19lbmNvZGUgKEdzdFNwZWV4RW5jICogZW5jLCBHc3RCdWZmZXIgKiBidWYpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwZWV4X2VuY19zdGFydCAoR3N0QXVkaW9FbmNvZGVyICogZW5jKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BlZXhfZW5jX3N0b3AgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwZWV4X2VuY19zZXRfZm9ybWF0IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsCi0gICAgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc3BlZXhfZW5jX2hhbmRsZV9mcmFtZSAoR3N0QXVkaW9FbmNvZGVyICogZW5jLAotICAgIEdzdEJ1ZmZlciAqIGluX2J1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwZWV4X2VuY19zaW5rX2V2ZW50IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgZ3N0X3NwZWV4X2VuY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0U3BlZXhFbmMsIGdzdF9zcGVleF9lbmMsIEdTVF9UWVBFX0FVRElPX0VOQ09ERVIsCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UQUdfU0VUVEVSLCBOVUxMKTsKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1BSRVNFVCwgTlVMTCkpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWV4X2VuY19jbGFzc19pbml0IChHc3RTcGVleEVuY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RBdWRpb0VuY29kZXJDbGFzcyAqYmFzZV9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGJhc2VfY2xhc3MgPSAoR3N0QXVkaW9FbmNvZGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfc3BlZXhfZW5jX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc3BlZXhfZW5jX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NwZWV4X2VuY19nZXRfcHJvcGVydHk7Ci0KLSAgYmFzZV9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwZWV4X2VuY19zdGFydCk7Ci0gIGJhc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwZWV4X2VuY19zdG9wKTsKLSAgYmFzZV9jbGFzcy0+c2V0X2Zvcm1hdCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BlZXhfZW5jX3NldF9mb3JtYXQpOwotICBiYXNlX2NsYXNzLT5oYW5kbGVfZnJhbWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwZWV4X2VuY19oYW5kbGVfZnJhbWUpOwotICBiYXNlX2NsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGVleF9lbmNfc2lua19ldmVudCk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9RVUFMSVRZLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgicXVhbGl0eSIsICJRdWFsaXR5IiwgIkVuY29kaW5nIHF1YWxpdHkiLAotICAgICAgICAgIDAuMCwgMTAuMCwgREVGQVVMVF9RVUFMSVRZLAotICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQklUUkFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJiaXRyYXRlIiwgIkVuY29kaW5nIEJpdC1yYXRlIiwKLSAgICAgICAgICAiU3BlY2lmeSBhbiBlbmNvZGluZyBiaXQtcmF0ZSAoaW4gYnBzKS4gKDAgPSBhdXRvbWF0aWMpIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9CSVRSQVRFLAotICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJNb2RlIiwgIlRoZSBlbmNvZGluZyBtb2RlIiwKLSAgICAgICAgICBHU1RfVFlQRV9TUEVFWF9FTkNfTU9ERSwgR1NUX1NQRUVYX0VOQ19NT0RFX0FVVE8sCi0gICAgICAgICAgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9WQlIsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInZiciIsICJWQlIiLAotICAgICAgICAgICJFbmFibGUgdmFyaWFibGUgYml0LXJhdGUiLCBERUZBVUxUX1ZCUiwKLSAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0FCUiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJhYnIiLCAiQUJSIiwKLSAgICAgICAgICAiRW5hYmxlIGF2ZXJhZ2UgYml0LXJhdGUgKDAgPSBkaXNhYmxlZCkiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCBERUZBVUxUX0FCUiwKLSAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1ZBRCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidmFkIiwgIlZBRCIsCi0gICAgICAgICAgIkVuYWJsZSB2b2ljZSBhY3Rpdml0eSBkZXRlY3Rpb24iLCBERUZBVUxUX1ZBRCwKLSAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RUWCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHR4IiwgIkRUWCIsCi0gICAgICAgICAgIkVuYWJsZSBkaXNjb250aW51b3VzIHRyYW5zbWlzc2lvbiIsIERFRkFVTFRfRFRYLAotICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQ09NUExFWElUWSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJjb21wbGV4aXR5IiwgIkNvbXBsZXhpdHkiLAotICAgICAgICAgICJTZXQgZW5jb2RpbmcgY29tcGxleGl0eSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIERFRkFVTFRfQ09NUExFWElUWSwKLSAgICAgICAgICBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX05GUkFNRVMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibmZyYW1lcyIsICJORnJhbWVzIiwKLSAgICAgICAgICAiTnVtYmVyIG9mIGZyYW1lcyBwZXIgYnVmZmVyIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9ORlJBTUVTLAotICAgICAgICAgIEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfTEFTVF9NRVNTQUdFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImxhc3QtbWVzc2FnZSIsICJsYXN0LW1lc3NhZ2UiLAotICAgICAgICAgICJUaGUgbGFzdCBzdGF0dXMgbWVzc2FnZSIsIE5VTEwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlNwZWV4IGF1ZGlvIGVuY29kZXIiLCAiQ29kZWMvRW5jb2Rlci9BdWRpbyIsCi0gICAgICAiRW5jb2RlcyBhdWRpbyBpbiBTcGVleCBmb3JtYXQiLCAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoc3BlZXhlbmNfZGVidWcsICJzcGVleGVuYyIsIDAsICJTcGVleCBlbmNvZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlZXhfZW5jX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RTcGVleEVuYyAqZW5jOwotCi0gIGVuYyA9IEdTVF9TUEVFWF9FTkMgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChlbmMtPmxhc3RfbWVzc2FnZSk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWV4X2VuY19pbml0IChHc3RTcGVleEVuYyAqIGVuYykKLXsKLSAgR3N0QXVkaW9FbmNvZGVyICpiZW5jID0gR1NUX0FVRElPX0VOQ09ERVIgKGVuYyk7Ci0KLSAgLyogYXJyYW5nZSBncmFudWxlcG9zIG1hcmtpbmcgKGFuZCByZXF1aXJlZCBwZXJmZWN0IHRzKSAqLwotICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfbWFya19ncmFudWxlIChiZW5jLCBUUlVFKTsKLSAgZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X3BlcmZlY3RfdGltZXN0YW1wIChiZW5jLCBUUlVFKTsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfQVVESU9fRU5DT0RFUl9TSU5LX1BBRCAoZW5jKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NwZWV4X2VuY19zdGFydCAoR3N0QXVkaW9FbmNvZGVyICogYmVuYykKLXsKLSAgR3N0U3BlZXhFbmMgKmVuYyA9IEdTVF9TUEVFWF9FTkMgKGJlbmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVuYywgInN0YXJ0Iik7Ci0gIHNwZWV4X2JpdHNfaW5pdCAoJmVuYy0+Yml0cyk7Ci0gIGVuYy0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGVuYy0+aGVhZGVyX3NlbnQgPSBGQUxTRTsKLSAgZW5jLT5lbmNvZGVkX3NhbXBsZXMgPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGVleF9lbmNfc3RvcCAoR3N0QXVkaW9FbmNvZGVyICogYmVuYykKLXsKLSAgR3N0U3BlZXhFbmMgKmVuYyA9IEdTVF9TUEVFWF9FTkMgKGJlbmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVuYywgInN0b3AiKTsKLSAgZW5jLT5oZWFkZXJfc2VudCA9IEZBTFNFOwotICBpZiAoZW5jLT5zdGF0ZSkgewotICAgIHNwZWV4X2VuY29kZXJfZGVzdHJveSAoZW5jLT5zdGF0ZSk7Ci0gICAgZW5jLT5zdGF0ZSA9IE5VTEw7Ci0gIH0KLSAgc3BlZXhfYml0c19kZXN0cm95ICgmZW5jLT5iaXRzKTsKLSAgc3BlZXhfYml0c19zZXRfYml0X2J1ZmZlciAoJmVuYy0+Yml0cywgTlVMTCwgMCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAoZW5jLT50YWdzKTsKLSAgZW5jLT50YWdzID0gTlVMTDsKLQotICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIChHU1RfVEFHX1NFVFRFUiAoZW5jKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50NjQKLWdzdF9zcGVleF9lbmNfZ2V0X2xhdGVuY3kgKEdzdFNwZWV4RW5jICogZW5jKQotewotICAvKiBTZWUgdGhlIFNwZWV4IG1hbnVhbCBzZWN0aW9uICJMYXRlbmN5IGFuZCBhbGdvcml0aG1pYyBkZWxheSIgKi8KLSAgaWYgKGVuYy0+cmF0ZSA9PSA4MDAwKQotICAgIHJldHVybiAzMCAqIEdTVF9NU0VDT05EOwotICBlbHNlCi0gICAgcmV0dXJuIDM0ICogR1NUX01TRUNPTkQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NwZWV4X2VuY19zZXRfZm9ybWF0IChHc3RBdWRpb0VuY29kZXIgKiBiZW5jLCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RTcGVleEVuYyAqZW5jOwotCi0gIGVuYyA9IEdTVF9TUEVFWF9FTkMgKGJlbmMpOwotCi0gIGVuYy0+Y2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbyk7Ci0gIGVuYy0+cmF0ZSA9IEdTVF9BVURJT19JTkZPX1JBVEUgKGluZm8pOwotCi0gIC8qIGhhbmRsZSByZWNvbmZpZ3VyZSAqLwotICBpZiAoZW5jLT5zdGF0ZSkgewotICAgIHNwZWV4X2VuY29kZXJfZGVzdHJveSAoZW5jLT5zdGF0ZSk7Ci0gICAgZW5jLT5zdGF0ZSA9IE5VTEw7Ci0gIH0KLQotICBpZiAoIWdzdF9zcGVleF9lbmNfc2V0dXAgKGVuYykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGZlZWRiYWNrIHRvIGJhc2UgY2xhc3MgKi8KLSAgZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X2xhdGVuY3kgKGJlbmMsCi0gICAgICBnc3Rfc3BlZXhfZW5jX2dldF9sYXRlbmN5IChlbmMpLCBnc3Rfc3BlZXhfZW5jX2dldF9sYXRlbmN5IChlbmMpKTsKLSAgZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X2xvb2thaGVhZCAoYmVuYywgZW5jLT5sb29rYWhlYWQpOwotCi0gIGlmIChlbmMtPm5mcmFtZXMgPT0gMCkgewotICAgIC8qIGFzIG1hbnkgZnJhbWVzIGFzIGF2YWlsYWJsZSBpbnB1dCBhbGxvd3MgKi8KLSAgICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfZnJhbWVfc2FtcGxlc19taW4gKGJlbmMsIGVuYy0+ZnJhbWVfc2l6ZSk7Ci0gICAgZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X2ZyYW1lX3NhbXBsZXNfbWF4IChiZW5jLCBlbmMtPmZyYW1lX3NpemUpOwotICAgIGdzdF9hdWRpb19lbmNvZGVyX3NldF9mcmFtZV9tYXggKGJlbmMsIDApOwotICB9IGVsc2UgewotICAgIC8qIGV4YWN0bHkgYXMgbWFueSBmcmFtZXMgYXMgY29uZmlndXJlZCAqLwotICAgIGdzdF9hdWRpb19lbmNvZGVyX3NldF9mcmFtZV9zYW1wbGVzX21pbiAoYmVuYywKLSAgICAgICAgZW5jLT5mcmFtZV9zaXplICogZW5jLT5uZnJhbWVzKTsKLSAgICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfZnJhbWVfc2FtcGxlc19tYXggKGJlbmMsCi0gICAgICAgIGVuYy0+ZnJhbWVfc2l6ZSAqIGVuYy0+bmZyYW1lcyk7Ci0gICAgZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X2ZyYW1lX21heCAoYmVuYywgMSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3Rfc3BlZXhfZW5jX2NyZWF0ZV9tZXRhZGF0YV9idWZmZXIgKEdzdFNwZWV4RW5jICogZW5jKQotewotICBjb25zdCBHc3RUYWdMaXN0ICp1c2VyX3RhZ3M7Ci0gIEdzdFRhZ0xpc3QgKm1lcmdlZF90YWdzOwotICBHc3RCdWZmZXIgKmNvbW1lbnRzID0gTlVMTDsKLQotICB1c2VyX3RhZ3MgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKEdTVF9UQUdfU0VUVEVSIChlbmMpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJ1cHN0cmVhbSB0YWdzID0gJSIgR1NUX1BUUl9GT1JNQVQsIGVuYy0+dGFncyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGVuYywgInVzZXItc2V0IHRhZ3MgPSAlIiBHU1RfUFRSX0ZPUk1BVCwgdXNlcl90YWdzKTsKLQotICAvKiBnc3RfdGFnX2xpc3RfbWVyZ2UoKSB3aWxsIGhhbmRsZSBOVUxMIGZvciBlaXRoZXIgb3IgYm90aCBsaXN0cyBmaW5lICovCi0gIG1lcmdlZF90YWdzID0gZ3N0X3RhZ19saXN0X21lcmdlICh1c2VyX3RhZ3MsIGVuYy0+dGFncywKLSAgICAgIGdzdF90YWdfc2V0dGVyX2dldF90YWdfbWVyZ2VfbW9kZSAoR1NUX1RBR19TRVRURVIgKGVuYykpKTsKLQotICBpZiAobWVyZ2VkX3RhZ3MgPT0gTlVMTCkKLSAgICBtZXJnZWRfdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAibWVyZ2VkICAgdGFncyA9ICUiIEdTVF9QVFJfRk9STUFULCBtZXJnZWRfdGFncyk7Ci0gIGNvbW1lbnRzID0gZ3N0X3RhZ19saXN0X3RvX3ZvcmJpc2NvbW1lbnRfYnVmZmVyIChtZXJnZWRfdGFncywgTlVMTCwKLSAgICAgIDAsICJFbmNvZGVkIHdpdGggR1N0cmVhbWVyIFNwZWV4ZW5jIik7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAobWVyZ2VkX3RhZ3MpOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChjb21tZW50cykgPSAwOwotICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGNvbW1lbnRzKSA9IDA7Ci0KLSAgcmV0dXJuIGNvbW1lbnRzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWV4X2VuY19zZXRfbGFzdF9tc2cgKEdzdFNwZWV4RW5jICogZW5jLCBjb25zdCBnY2hhciAqIG1zZykKLXsKLSAgZ19mcmVlIChlbmMtPmxhc3RfbWVzc2FnZSk7Ci0gIGVuYy0+bGFzdF9tZXNzYWdlID0gZ19zdHJkdXAgKG1zZyk7Ci0gIEdTVF9XQVJOSU5HX09CSkVDVCAoZW5jLCAiJXMiLCBtc2cpOwotICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChlbmMpLCAibGFzdC1tZXNzYWdlIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NwZWV4X2VuY19zZXR1cCAoR3N0U3BlZXhFbmMgKiBlbmMpCi17Ci0gIHN3aXRjaCAoZW5jLT5tb2RlKSB7Ci0gICAgY2FzZSBHU1RfU1BFRVhfRU5DX01PREVfVVdCOgotICAgICAgR1NUX0xPR19PQkpFQ1QgKGVuYywgImNvbmZpZ3VyaW5nIGZvciByZXF1ZXN0ZWQgVVdCIG1vZGUiKTsKLSAgICAgIGVuYy0+c3BlZXhfbW9kZSA9IHNwZWV4X2xpYl9nZXRfbW9kZSAoU1BFRVhfTU9ERUlEX1VXQik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TUEVFWF9FTkNfTU9ERV9XQjoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChlbmMsICJjb25maWd1cmluZyBmb3IgcmVxdWVzdGVkIFdCIG1vZGUiKTsKLSAgICAgIGVuYy0+c3BlZXhfbW9kZSA9IHNwZWV4X2xpYl9nZXRfbW9kZSAoU1BFRVhfTU9ERUlEX1dCKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NQRUVYX0VOQ19NT0RFX05COgotICAgICAgR1NUX0xPR19PQkpFQ1QgKGVuYywgImNvbmZpZ3VyaW5nIGZvciByZXF1ZXN0ZWQgTkIgbW9kZSIpOwotICAgICAgZW5jLT5zcGVleF9tb2RlID0gc3BlZXhfbGliX2dldF9tb2RlIChTUEVFWF9NT0RFSURfTkIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1BFRVhfRU5DX01PREVfQVVUTzoKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGVuYywgImZpbmRpbmcgYmVzdCBtb2RlIik7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGVuYy0+cmF0ZSA+IDI1MDAwKSB7Ci0gICAgaWYgKGVuYy0+bW9kZSA9PSBHU1RfU1BFRVhfRU5DX01PREVfQVVUTykgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGVuYywgInNlbGVjdGVkIFVXQiBtb2RlIGZvciBzYW1wbGVyYXRlICVkIiwgZW5jLT5yYXRlKTsKLSAgICAgIGVuYy0+c3BlZXhfbW9kZSA9IHNwZWV4X2xpYl9nZXRfbW9kZSAoU1BFRVhfTU9ERUlEX1VXQik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChlbmMtPnNwZWV4X21vZGUgIT0gc3BlZXhfbGliX2dldF9tb2RlIChTUEVFWF9NT0RFSURfVVdCKSkgewotICAgICAgICBnc3Rfc3BlZXhfZW5jX3NldF9sYXN0X21zZyAoZW5jLAotICAgICAgICAgICAgIldhcm5pbmc6IHN1Z2dlc3QgdG8gdXNlIHVsdHJhIHdpZGUgYmFuZCBtb2RlIGZvciB0aGlzIHJhdGUiKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSBpZiAoZW5jLT5yYXRlID4gMTI1MDApIHsKLSAgICBpZiAoZW5jLT5tb2RlID09IEdTVF9TUEVFWF9FTkNfTU9ERV9BVVRPKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZW5jLCAic2VsZWN0ZWQgV0IgbW9kZSBmb3Igc2FtcGxlcmF0ZSAlZCIsIGVuYy0+cmF0ZSk7Ci0gICAgICBlbmMtPnNwZWV4X21vZGUgPSBzcGVleF9saWJfZ2V0X21vZGUgKFNQRUVYX01PREVJRF9XQik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChlbmMtPnNwZWV4X21vZGUgIT0gc3BlZXhfbGliX2dldF9tb2RlIChTUEVFWF9NT0RFSURfV0IpKSB7Ci0gICAgICAgIGdzdF9zcGVleF9lbmNfc2V0X2xhc3RfbXNnIChlbmMsCi0gICAgICAgICAgICAiV2FybmluZzogc3VnZ2VzdCB0byB1c2Ugd2lkZSBiYW5kIG1vZGUgZm9yIHRoaXMgcmF0ZSIpOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoZW5jLT5tb2RlID09IEdTVF9TUEVFWF9FTkNfTU9ERV9BVVRPKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZW5jLCAic2VsZWN0ZWQgTkIgbW9kZSBmb3Igc2FtcGxlcmF0ZSAlZCIsIGVuYy0+cmF0ZSk7Ci0gICAgICBlbmMtPnNwZWV4X21vZGUgPSBzcGVleF9saWJfZ2V0X21vZGUgKFNQRUVYX01PREVJRF9OQik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChlbmMtPnNwZWV4X21vZGUgIT0gc3BlZXhfbGliX2dldF9tb2RlIChTUEVFWF9NT0RFSURfTkIpKSB7Ci0gICAgICAgIGdzdF9zcGVleF9lbmNfc2V0X2xhc3RfbXNnIChlbmMsCi0gICAgICAgICAgICAiV2FybmluZzogc3VnZ2VzdCB0byB1c2UgbmFycm93IGJhbmQgbW9kZSBmb3IgdGhpcyByYXRlIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGVuYy0+cmF0ZSAhPSA4MDAwICYmIGVuYy0+cmF0ZSAhPSAxNjAwMCAmJiBlbmMtPnJhdGUgIT0gMzIwMDApIHsKLSAgICBnc3Rfc3BlZXhfZW5jX3NldF9sYXN0X21zZyAoZW5jLAotICAgICAgICAiV2FybmluZzogc3BlZXggaXMgb3B0aW1pemVkIGZvciA4LCAxNiBhbmQgMzIgS0h6Iik7Ci0gIH0KLQotICBzcGVleF9pbml0X2hlYWRlciAoJmVuYy0+aGVhZGVyLCBlbmMtPnJhdGUsIDEsIGVuYy0+c3BlZXhfbW9kZSk7Ci0gIGVuYy0+aGVhZGVyLmZyYW1lc19wZXJfcGFja2V0ID0gZW5jLT5uZnJhbWVzOwotICBlbmMtPmhlYWRlci52YnIgPSBlbmMtPnZicjsKLSAgZW5jLT5oZWFkZXIubmJfY2hhbm5lbHMgPSBlbmMtPmNoYW5uZWxzOwotCi0gIC8qSW5pdGlhbGl6ZSBTcGVleCBlbmNvZGVyICovCi0gIGVuYy0+c3RhdGUgPSBzcGVleF9lbmNvZGVyX2luaXQgKGVuYy0+c3BlZXhfbW9kZSk7Ci0KLSAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX0dFVF9GUkFNRV9TSVpFLCAmZW5jLT5mcmFtZV9zaXplKTsKLSAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9DT01QTEVYSVRZLCAmZW5jLT5jb21wbGV4aXR5KTsKLSAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9TQU1QTElOR19SQVRFLCAmZW5jLT5yYXRlKTsKLQotICBpZiAoZW5jLT52YnIpCi0gICAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9WQlJfUVVBTElUWSwgJmVuYy0+cXVhbGl0eSk7Ci0gIGVsc2UgewotICAgIGdpbnQgdG1wID0gZmxvb3IgKGVuYy0+cXVhbGl0eSk7Ci0KLSAgICBzcGVleF9lbmNvZGVyX2N0bCAoZW5jLT5zdGF0ZSwgU1BFRVhfU0VUX1FVQUxJVFksICZ0bXApOwotICB9Ci0gIGlmIChlbmMtPmJpdHJhdGUpIHsKLSAgICBpZiAoZW5jLT5xdWFsaXR5ID49IDAuMCAmJiBlbmMtPnZicikgewotICAgICAgZ3N0X3NwZWV4X2VuY19zZXRfbGFzdF9tc2cgKGVuYywKLSAgICAgICAgICAiV2FybmluZzogYml0cmF0ZSBvcHRpb24gaXMgb3ZlcnJpZGluZyBxdWFsaXR5Iik7Ci0gICAgfQotICAgIHNwZWV4X2VuY29kZXJfY3RsIChlbmMtPnN0YXRlLCBTUEVFWF9TRVRfQklUUkFURSwgJmVuYy0+Yml0cmF0ZSk7Ci0gIH0KLSAgaWYgKGVuYy0+dmJyKSB7Ci0gICAgZ2ludCB0bXAgPSAxOwotCi0gICAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9WQlIsICZ0bXApOwotICB9IGVsc2UgaWYgKGVuYy0+dmFkKSB7Ci0gICAgZ2ludCB0bXAgPSAxOwotCi0gICAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9WQUQsICZ0bXApOwotICB9Ci0KLSAgaWYgKGVuYy0+ZHR4KSB7Ci0gICAgZ2ludCB0bXAgPSAxOwotCi0gICAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9EVFgsICZ0bXApOwotICB9Ci0KLSAgaWYgKGVuYy0+ZHR4ICYmICEoZW5jLT52YnIgfHwgZW5jLT5hYnIgfHwgZW5jLT52YWQpKSB7Ci0gICAgZ3N0X3NwZWV4X2VuY19zZXRfbGFzdF9tc2cgKGVuYywKLSAgICAgICAgIldhcm5pbmc6IGR0eCBpcyB1c2VsZXNzIHdpdGhvdXQgdmFkLCB2YnIgb3IgYWJyIik7Ci0gIH0gZWxzZSBpZiAoKGVuYy0+dmJyIHx8IGVuYy0+YWJyKSAmJiAoZW5jLT52YWQpKSB7Ci0gICAgZ3N0X3NwZWV4X2VuY19zZXRfbGFzdF9tc2cgKGVuYywKLSAgICAgICAgIldhcm5pbmc6IHZhZCBpcyBhbHJlYWR5IGltcGxpZWQgYnkgdmJyIG9yIGFiciIpOwotICB9Ci0KLSAgaWYgKGVuYy0+YWJyKSB7Ci0gICAgc3BlZXhfZW5jb2Rlcl9jdGwgKGVuYy0+c3RhdGUsIFNQRUVYX1NFVF9BQlIsICZlbmMtPmFicik7Ci0gIH0KLQotICBzcGVleF9lbmNvZGVyX2N0bCAoZW5jLT5zdGF0ZSwgU1BFRVhfR0VUX0xPT0tBSEVBRCwgJmVuYy0+bG9va2FoZWFkKTsKLQotICBHU1RfTE9HX09CSkVDVCAoZW5jLCAid2UgaGF2ZSBmcmFtZSBzaXplICVkLCBsb29rYWhlYWQgJWQiLCBlbmMtPmZyYW1lX3NpemUsCi0gICAgICBlbmMtPmxvb2thaGVhZCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NwZWV4X2VuY19zaW5rX2V2ZW50IChHc3RBdWRpb0VuY29kZXIgKiBiZW5jLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RTcGVleEVuYyAqZW5jOwotCi0gIGVuYyA9IEdTVF9TUEVFWF9FTkMgKGJlbmMpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKLSAgICB7Ci0gICAgICBpZiAoZW5jLT50YWdzKSB7Ci0gICAgICAgIEdzdFRhZ0xpc3QgKmxpc3Q7Ci0KLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZsaXN0KTsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoZW5jLT50YWdzLCBsaXN0LAotICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChHU1RfVEFHX1NFVFRFUiAoZW5jKSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICAgIGVuYy0+ZW5jb2RlZF9zYW1wbGVzID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIHdlIG9ubHkgcGVla2VkLCBsZXQgYmFzZSBjbGFzcyBoYW5kbGUgaXQgKi8KLSAgcmV0dXJuIEdTVF9BVURJT19FTkNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChiZW5jLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc3BlZXhfZW5jX2VuY29kZSAoR3N0U3BlZXhFbmMgKiBlbmMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ2ludCBmcmFtZV9zaXplID0gZW5jLT5mcmFtZV9zaXplOwotICBnaW50IGJ5dGVzID0gZnJhbWVfc2l6ZSAqIDIgKiBlbmMtPmNoYW5uZWxzLCBzYW1wbGVzOwotICBnaW50IG91dHNpemUsIHdyaXR0ZW4sIGR0eF9yZXQgPSAwOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhLCAqZGF0YTAgPSBOVUxMLCAqYmRhdGE7Ci0gIGdzaXplIGJzaXplLCBzaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0U2VnbWVudCAqc2VnbWVudDsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotCi0gIGlmIChHX0xJS0VMWSAoYnVmKSkgewotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgYmRhdGEgPSBtYXAuZGF0YTsKLSAgICBic2l6ZSA9IG1hcC5zaXplOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGJzaXplICUgYnl0ZXMpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJkcmFpbmluZzsgYWRkaW5nIHNpbGVuY2Ugc2FtcGxlcyIpOwotCi0gICAgICAvKiBJZiBlbmNvZGluZyBwYXJ0IG9mIGEgZnJhbWUsIGFuZCB3ZSBoYXZlIG5vIHNldCBzdG9wIHRpbWUgb24KLSAgICAgICAqIHRoZSBvdXRwdXQgc2VnbWVudCwgd2UgdXBkYXRlIHRoZSBzZWdtZW50IHN0b3AgdGltZSB0byByZWZsZWN0Ci0gICAgICAgKiB0aGUgbGFzdCBzYW1wbGUuIFRoaXMgd2lsbCBsZXQgb2dnbXV4IHNldCB0aGUgbGFzdCBwYWdlJ3MKLSAgICAgICAqIGdyYW5wb3MgdG8gdGVsbCBhIGRlY29kZXIgdGhlIGR1bW15IHNhbXBsZXMgc2hvdWxkIGJlIGNsaXBwZWQuCi0gICAgICAgKi8KLSAgICAgIHNlZ21lbnQgPSAmR1NUX0FVRElPX0VOQ09ERVJfT1VUUFVUX1NFR01FTlQgKGVuYyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJleGlzdGluZyBvdXRwdXQgc2VnbWVudCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgICAgc2VnbWVudCk7Ci0gICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZWdtZW50LT5zdG9wKSkgewotICAgICAgICBpbnQgaW5wdXRfc2FtcGxlcyA9IGJzaXplIC8gKGVuYy0+Y2hhbm5lbHMgKiAyKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLAotICAgICAgICAgICAgIk5vIHN0b3AgdGltZSBhbmQgcGFydGlhbCBmcmFtZSwgdXBkYXRpbmcgc2VnbWVudCIpOwotICAgICAgICBkdXJhdGlvbiA9Ci0gICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGVuYy0+ZW5jb2RlZF9zYW1wbGVzICsgaW5wdXRfc2FtcGxlcywKLSAgICAgICAgICAgIEdTVF9TRUNPTkQsIGVuYy0+cmF0ZSk7Ci0gICAgICAgIHNlZ21lbnQtPnN0b3AgPSBzZWdtZW50LT5zdGFydCArIGR1cmF0aW9uOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJuZXcgb3V0cHV0IHNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgICAgICAgc2VnbWVudCk7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0FVRElPX0VOQ09ERVJfU1JDX1BBRCAoZW5jKSwKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoc2VnbWVudCkpOwotICAgICAgfQotCi0gICAgICBzaXplID0gKChic2l6ZSAvIGJ5dGVzKSArIDEpICogYnl0ZXM7Ci0gICAgICBkYXRhMCA9IGRhdGEgPSBnX21hbGxvYzAgKHNpemUpOwotICAgICAgbWVtY3B5IChkYXRhLCBiZGF0YSwgYnNpemUpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgIGJkYXRhID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgZGF0YSA9IGJkYXRhOwotICAgICAgc2l6ZSA9IGJzaXplOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJub3RoaW5nIHRvIGRyYWluIik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgc2FtcGxlcyA9IHNpemUgLyAoMiAqIGVuYy0+Y2hhbm5lbHMpOwotICBzcGVleF9iaXRzX3Jlc2V0ICgmZW5jLT5iaXRzKTsKLQotICAvKiBGSVhNRSB3aGF0IGFib3V0IGRyb3BwZWQgc2FtcGxlcyBpZiBEVFMgZW5hYmxlZCA/PyAqLwotCi0gIHdoaWxlIChzaXplKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAiZW5jb2RpbmcgJWQgc2FtcGxlcyAoJWQgYnl0ZXMpIiwgZnJhbWVfc2l6ZSwgYnl0ZXMpOwotCi0gICAgaWYgKGVuYy0+Y2hhbm5lbHMgPT0gMikgewotICAgICAgc3BlZXhfZW5jb2RlX3N0ZXJlb19pbnQgKChnaW50MTYgKikgZGF0YSwgZnJhbWVfc2l6ZSwgJmVuYy0+Yml0cyk7Ci0gICAgfQotICAgIGR0eF9yZXQgKz0gc3BlZXhfZW5jb2RlX2ludCAoZW5jLT5zdGF0ZSwgKGdpbnQxNiAqKSBkYXRhLCAmZW5jLT5iaXRzKTsKLQotICAgIGRhdGEgKz0gYnl0ZXM7Ci0gICAgc2l6ZSAtPSBieXRlczsKLSAgfQotCi0gIHNwZWV4X2JpdHNfaW5zZXJ0X3Rlcm1pbmF0b3IgKCZlbmMtPmJpdHMpOwotICBvdXRzaXplID0gc3BlZXhfYml0c19uYnl0ZXMgKCZlbmMtPmJpdHMpOwotCi0gIGlmIChiZGF0YSkKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0jaWYgMAotICByZXQgPSBnc3RfcGFkX2FsbG9jX2J1ZmZlcl9hbmRfc2V0X2NhcHMgKEdTVF9BVURJT19FTkNPREVSX1NSQ19QQUQgKGVuYyksCi0gICAgICBHU1RfQlVGRkVSX09GRlNFVF9OT05FLCBvdXRzaXplLAotICAgICAgR1NUX1BBRF9DQVBTIChHU1RfQVVESU9fRU5DT0RFUl9TUkNfUEFEIChlbmMpKSwgJm91dGJ1Zik7Ci0KLSAgaWYgKChHU1RfRkxPV19PSyAhPSByZXQpKQotICAgIGdvdG8gZG9uZTsKLSNlbmRpZgotICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgb3V0c2l6ZSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gIHdyaXR0ZW4gPSBzcGVleF9iaXRzX3dyaXRlICgmZW5jLT5iaXRzLCAoZ2NoYXIgKikgbWFwLmRhdGEsIG91dHNpemUpOwotCi0gIGlmIChHX1VOTElLRUxZICh3cml0dGVuIDwgb3V0c2l6ZSkpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChlbmMsICJzaG9ydCB3cml0ZTogJWQgPCAlZCBieXRlcyIsIHdyaXR0ZW4sIG91dHNpemUpOwotICB9IGVsc2UgaWYgKEdfVU5MSUtFTFkgKHdyaXR0ZW4gPiBvdXRzaXplKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGVuYywgIm92ZXJydW46ICVkID4gJWQgYnl0ZXMiLCB3cml0dGVuLCBvdXRzaXplKTsKLSAgICB3cml0dGVuID0gb3V0c2l6ZTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotICBnc3RfYnVmZmVyX3Jlc2l6ZSAob3V0YnVmLCAwLCB3cml0dGVuKTsKLQotICBpZiAoIWR0eF9yZXQpCi0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKTsKLQotICByZXQgPSBnc3RfYXVkaW9fZW5jb2Rlcl9maW5pc2hfZnJhbWUgKEdTVF9BVURJT19FTkNPREVSIChlbmMpLAotICAgICAgb3V0YnVmLCBzYW1wbGVzKTsKLSAgZW5jLT5lbmNvZGVkX3NhbXBsZXMgKz0gZnJhbWVfc2l6ZTsKLQotZG9uZToKLSAgZ19mcmVlIChkYXRhMCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiAocmVhbGx5IHJlYWxseSkgRklYTUU6IG1vdmUgaW50byBjb3JlIChkaXhpdCB0cG0pCi0gKi8KLS8qCi0gKiBfZ3N0X2NhcHNfc2V0X2J1ZmZlcl9hcnJheToKLSAqIEBjYXBzOiAodHJhbnNmZXIgZnVsbCk6IGEgI0dzdENhcHMKLSAqIEBmaWVsZDogZmllbGQgaW4gY2FwcyB0byBzZXQKLSAqIEBidWY6IGhlYWRlciBidWZmZXJzCi0gKgotICogQWRkcyBnaXZlbiBidWZmZXJzIHRvIGFuIGFycmF5IG9mIGJ1ZmZlcnMgc2V0IGFzIHRoZSBnaXZlbiBAZmllbGQKLSAqIG9uIHRoZSBnaXZlbiBAY2Fwcy4gIExpc3Qgb2YgYnVmZmVyIGFyZ3VtZW50cyBtdXN0IGJlIE5VTEwtdGVybWluYXRlZC4KLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGlucHV0IGNhcHMgd2l0aCBhIHN0cmVhbWhlYWRlciBmaWVsZCBhZGRlZCwgb3IgTlVMTAotICogICAgIGlmIHNvbWUgZXJyb3Igb2NjdXJyZWQKLSAqLwotc3RhdGljIEdzdENhcHMgKgotX2dzdF9jYXBzX3NldF9idWZmZXJfYXJyYXkgKEdzdENhcHMgKiBjYXBzLCBjb25zdCBnY2hhciAqIGZpZWxkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZiwgLi4uKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IE5VTEw7Ci0gIHZhX2xpc3QgdmE7Ci0gIEdWYWx1ZSBhcnJheSA9IHsgMCB9OwotICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcyAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWVsZCAhPSBOVUxMLCBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIGdfdmFsdWVfaW5pdCAoJmFycmF5LCBHU1RfVFlQRV9BUlJBWSk7Ci0KLSAgdmFfc3RhcnQgKHZhLCBidWYpOwotICAvKiBwdXQgYnVmZmVycyBpbiBhIGZpeGVkIGxpc3QgKi8KLSAgd2hpbGUgKGJ1ZikgewotICAgIGdfYXNzZXJ0IChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWYpKTsKLQotICAgIC8qIG1hcmsgYnVmZmVyICovCi0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLQotICAgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOwotICAgIGJ1ZiA9IGdzdF9idWZmZXJfY29weSAoYnVmKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICAgIGdzdF92YWx1ZV9zZXRfYnVmZmVyICgmdmFsdWUsIGJ1Zik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmYXJyYXksICZ2YWx1ZSk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLQotICAgIGJ1ZiA9IHZhX2FyZyAodmEsIEdzdEJ1ZmZlciAqKTsKLSAgfQotICB2YV9lbmQgKHZhKTsKLQotICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZCwgJmFycmF5KTsKLSAgZ192YWx1ZV91bnNldCAoJmFycmF5KTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zcGVleF9lbmNfaGFuZGxlX2ZyYW1lIChHc3RBdWRpb0VuY29kZXIgKiBiZW5jLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFNwZWV4RW5jICplbmM7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgZW5jID0gR1NUX1NQRUVYX0VOQyAoYmVuYyk7Ci0KLSAgaWYgKCFlbmMtPmhlYWRlcl9zZW50KSB7Ci0gICAgLyogU3BlZXggc3RyZWFtcyBiZWdpbiB3aXRoIHR3byBoZWFkZXJzOyB0aGUgaW5pdGlhbCBoZWFkZXIgKHdpdGgKLSAgICAgICBtb3N0IG9mIHRoZSBjb2RlYyBzZXR1cCBwYXJhbWV0ZXJzKSB3aGljaCBpcyBtYW5kYXRlZCBieSB0aGUgT2dnCi0gICAgICAgYml0c3RyZWFtIHNwZWMuICBUaGUgc2Vjb25kIGhlYWRlciBob2xkcyBhbnkgY29tbWVudCBmaWVsZHMuCi0gICAgICAgV2UgbWVyZWx5IG5lZWQgdG8gbWFrZSB0aGUgaGVhZGVycywgdGhlbiBwYXNzIHRoZW0gdG8gbGlic3BlZXggCi0gICAgICAgb25lIGF0IGEgdGltZTsgbGlic3BlZXggaGFuZGxlcyB0aGUgYWRkaXRpb25hbCBPZ2cgYml0c3RyZWFtIAotICAgICAgIGNvbnN0cmFpbnRzICovCi0gICAgR3N0QnVmZmVyICpidWYxLCAqYnVmMjsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIGd1Y2hhciAqZGF0YTsKLSAgICBnaW50IGRhdGFfbGVuOwotICAgIEdMaXN0ICpoZWFkZXJzOwotCi0gICAgLyogY3JlYXRlIGhlYWRlciBidWZmZXIgKi8KLSAgICBkYXRhID0gKGd1aW50OCAqKSBzcGVleF9oZWFkZXJfdG9fcGFja2V0ICgmZW5jLT5oZWFkZXIsICZkYXRhX2xlbik7Ci0gICAgYnVmMSA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGRhdGEsIGRhdGFfbGVuKTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZjEpID0gMDsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmMSkgPSAwOwotCi0gICAgLyogY3JlYXRlIGNvbW1lbnQgYnVmZmVyICovCi0gICAgYnVmMiA9IGdzdF9zcGVleF9lbmNfY3JlYXRlX21ldGFkYXRhX2J1ZmZlciAoZW5jKTsKLQotICAgIC8qIG1hcmsgYW5kIHB1dCBvbiBjYXBzICovCi0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXNwZWV4IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBlbmMtPnJhdGUsCi0gICAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGVuYy0+Y2hhbm5lbHMsIE5VTEwpOwotICAgIGNhcHMgPSBfZ3N0X2NhcHNfc2V0X2J1ZmZlcl9hcnJheSAoY2FwcywgInN0cmVhbWhlYWRlciIsIGJ1ZjEsIGJ1ZjIsIE5VTEwpOwotCi0gICAgLyogbmVnb3RpYXRlIHdpdGggdGhlc2UgY2FwcyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVuYywgImhlcmUgYXJlIHRoZSBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfb3V0cHV0X2Zvcm1hdCAoR1NUX0FVRElPX0VOQ09ERVIgKGVuYyksIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIC8qIHB1c2ggb3V0IGJ1ZmZlcnMgKi8KLSAgICAvKiBzdG9yZSBidWZmZXJzIGZvciBsYXRlciBwcmVfcHVzaCBzZW5kaW5nICovCi0gICAgaGVhZGVycyA9IE5VTEw7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAic3RvcmluZyBoZWFkZXIgYnVmZmVycyIpOwotICAgIGhlYWRlcnMgPSBnX2xpc3RfcHJlcGVuZCAoaGVhZGVycywgYnVmMik7Ci0gICAgaGVhZGVycyA9IGdfbGlzdF9wcmVwZW5kIChoZWFkZXJzLCBidWYxKTsKLSAgICBnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfaGVhZGVycyAoYmVuYywgaGVhZGVycyk7Ci0KLSAgICBlbmMtPmhlYWRlcl9zZW50ID0gVFJVRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVuYywgInJlY2VpdmVkIGJ1ZmZlciAlcCBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgYnVmLAotICAgICAgYnVmID8gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSA6IDApOwotCi0gIHJldCA9IGdzdF9zcGVleF9lbmNfZW5jb2RlIChlbmMsIGJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVleF9lbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwZWV4RW5jICplbmM7Ci0KLSAgZW5jID0gR1NUX1NQRUVYX0VOQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUVVBTElUWToKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgZW5jLT5xdWFsaXR5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSVRSQVRFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZW5jLT5iaXRyYXRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGVuYy0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVkJSOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGVuYy0+dmJyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BQlI6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBlbmMtPmFicik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVkFEOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGVuYy0+dmFkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EVFg6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZW5jLT5kdHgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTVBMRVhJVFk6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBlbmMtPmNvbXBsZXhpdHkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05GUkFNRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBlbmMtPm5mcmFtZXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xBU1RfTUVTU0FHRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIGVuYy0+bGFzdF9tZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVleF9lbmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwZWV4RW5jICplbmM7Ci0KLSAgZW5jID0gR1NUX1NQRUVYX0VOQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUVVBTElUWToKLSAgICAgIGVuYy0+cXVhbGl0eSA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQklUUkFURToKLSAgICAgIGVuYy0+Yml0cmF0ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBlbmMtPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVkJSOgotICAgICAgZW5jLT52YnIgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQUJSOgotICAgICAgZW5jLT5hYnIgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9WQUQ6Ci0gICAgICBlbmMtPnZhZCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EVFg6Ci0gICAgICBlbmMtPmR0eCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT01QTEVYSVRZOgotICAgICAgZW5jLT5jb21wbGV4aXR5ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTkZSQU1FUzoKLSAgICAgIGVuYy0+bmZyYW1lcyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZXh0L3NwZWV4L2dzdHNwZWV4ZW5jLmggYi9leHQvc3BlZXgvZ3N0c3BlZXhlbmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlmY2M3Mi4uMDAwMDAwMAotLS0gYS9leHQvc3BlZXgvZ3N0c3BlZXhlbmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBTcGVleCBFbmNvZGVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9TUEVFWF9FTkNfSF9fCi0jZGVmaW5lIF9fR1NUX1NQRUVYX0VOQ19IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2VuY29kZXIuaD4KLQotI2luY2x1ZGUgPHNwZWV4L3NwZWV4Lmg+Ci0jaW5jbHVkZSA8c3BlZXgvc3BlZXhfaGVhZGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TUEVFWF9FTkMgXAotICAoZ3N0X3NwZWV4X2VuY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1BFRVhfRU5DKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfU1BFRVhfRU5DLEdzdFNwZWV4RW5jKSkKLSNkZWZpbmUgR1NUX1NQRUVYX0VOQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TUEVFWF9FTkMsR3N0U3BlZXhFbmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TUEVFWF9FTkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TUEVFWF9FTkMpKQotI2RlZmluZSBHU1RfSVNfU1BFRVhfRU5DX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NQRUVYX0VOQykpCi0KLXR5cGVkZWYgZW51bQotewotICBHU1RfU1BFRVhfRU5DX01PREVfQVVUTywKLSAgR1NUX1NQRUVYX0VOQ19NT0RFX1VXQiwKLSAgR1NUX1NQRUVYX0VOQ19NT0RFX1dCLAotICBHU1RfU1BFRVhfRU5DX01PREVfTkIKLX0gR3N0U3BlZXhNb2RlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3BlZXhFbmMgR3N0U3BlZXhFbmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3BlZXhFbmNDbGFzcyBHc3RTcGVleEVuY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdFNwZWV4RW5jIHsKLSAgR3N0QXVkaW9FbmNvZGVyICAgZWxlbWVudDsKLQotICBTcGVleEJpdHMgICAgICAgICAgICAgYml0czsKLSAgU3BlZXhIZWFkZXIgICAgICAgICAgIGhlYWRlcjsKLSAgY29uc3QgU3BlZXhNb2RlICAgICAgICpzcGVleF9tb2RlOwotICB2b2lkICAgICAgICAgICAgICAgICAgKnN0YXRlOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgR3N0U3BlZXhNb2RlICAgICAgICAgIG1vZGU7Ci0gIGdmbG9hdCAgICAgICAgICAgICAgICBxdWFsaXR5OwotICBnaW50ICAgICAgICAgICAgICAgICAgYml0cmF0ZTsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgIHZicjsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIGFicjsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgIHZhZDsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGR0eDsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIGNvbXBsZXhpdHk7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICBuZnJhbWVzOwotICBnY2hhciAgICAgICAgICAgICAgICAgKmxhc3RfbWVzc2FnZTsKLQotICBnaW50ICAgICAgICAgICAgICAgICAgY2hhbm5lbHM7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICByYXRlOwotCi0gIGdib29sZWFuICAgICAgICAgICAgICBoZWFkZXJfc2VudDsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgIGVuY29kZWRfc2FtcGxlczsKLQotICBHc3RUYWdMaXN0ICAgICAgICAgICAgKnRhZ3M7Ci0KLSAgZ2ludCAgICAgICAgICAgICAgICAgIGZyYW1lX3NpemU7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICBsb29rYWhlYWQ7Ci0KLSAgZ3VpbnQ4ICAgICAgICAgICAgICAgICpjb21tZW50czsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIGNvbW1lbnRfbGVuOwotfTsKLQotc3RydWN0IF9Hc3RTcGVleEVuY0NsYXNzIHsKLSAgR3N0QXVkaW9FbmNvZGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3NwZWV4X2VuY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TUEVFWEVOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC90YWdsaWIvTWFrZWZpbGUuYW0gYi9leHQvdGFnbGliL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTU5YzBhLi4wMDAwMDAwCi0tLSBhL2V4dC90YWdsaWIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R0YWdsaWIubGEKLQotbGliZ3N0dGFnbGliX2xhX1NPVVJDRVMgPSBnc3R0YWdsaWJwbHVnaW4uYyBnc3RpZDN2Mm11eC5jYyBnc3RhcGV2Mm11eC5jYwotbGliZ3N0dGFnbGliX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSBcCi0JJChUQUdMSUJfQ0ZMQUdTKQotbGliZ3N0dGFnbGliX2xhX0NYWEZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DWFhGTEFHUykgXAotCSQoVEFHTElCX0NYWEZMQUdTKQotbGliZ3N0dGFnbGliX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChUQUdMSUJfTElCUykKLWxpYmdzdHRhZ2xpYl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R0YWdsaWJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RpZDN2Mm11eC5oIGdzdGFwZXYybXV4LmgKZGlmZiAtLWdpdCBhL2V4dC90YWdsaWIvTWFrZWZpbGUuaW4gYi9leHQvdGFnbGliL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTlkOGJkLi4wMDAwMDAwCi0tLSBhL2V4dC90YWdsaWIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5ODEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L3RhZ2xpYgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHRhZ2xpYl9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHRhZ2xpYl9sYV9PQkpFQ1RTID0gbGliZ3N0dGFnbGliX2xhLWdzdHRhZ2xpYnBsdWdpbi5sbyBcCi0JbGliZ3N0dGFnbGliX2xhLWdzdGlkM3YybXV4LmxvIGxpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5sbwotbGliZ3N0dGFnbGliX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHRhZ2xpYl9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0dGFnbGliX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYIFwKLQkkKGxpYmdzdHRhZ2xpYl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDWFhMRCkgJChsaWJnc3R0YWdsaWJfbGFfQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIFwKLQkkKGxpYmdzdHRhZ2xpYl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1DWFhDT01QSUxFID0gJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DWFhGTEFHUykgJChDWFhGTEFHUykKLUxUQ1hYQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCi1BTV9WX0NYWCA9ICQoYW1fX3ZfQ1hYX0BBTV9WQCkKLWFtX192X0NYWF8gPSAkKGFtX192X0NYWF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NYWF8wID0gQGVjaG8gIiAgQ1hYICAgICAiICRAOwotYW1fX3ZfQ1hYXzEgPSAKLUNYWExEID0gJChDWFgpCi1DWFhMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNYWCAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENYWExEKSAkKEFNX0NYWEZMQUdTKSBcCi0JJChDWFhGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NYWExEID0gJChhbV9fdl9DWFhMRF9AQU1fVkApCi1hbV9fdl9DWFhMRF8gPSAkKGFtX192X0NYWExEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ1hYTERfMCA9IEBlY2hvICIgIENYWExEICAgIiAkQDsKLWFtX192X0NYWExEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHRhZ2xpYl9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R0YWdsaWJfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0dGFnbGliLmxhCi1saWJnc3R0YWdsaWJfbGFfU09VUkNFUyA9IGdzdHRhZ2xpYnBsdWdpbi5jIGdzdGlkM3YybXV4LmNjIGdzdGFwZXYybXV4LmNjCi1saWJnc3R0YWdsaWJfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpIFwKLQkkKFRBR0xJQl9DRkxBR1MpCi0KLWxpYmdzdHRhZ2xpYl9sYV9DWFhGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ1hYRkxBR1MpIFwKLQkkKFRBR0xJQl9DWFhGTEFHUykKLQotbGliZ3N0dGFnbGliX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChUQUdMSUJfTElCUykKLQotbGliZ3N0dGFnbGliX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHRhZ2xpYl9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RpZDN2Mm11eC5oIGdzdGFwZXYybXV4LmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmNjIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBleHQvdGFnbGliL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGV4dC90YWdsaWIvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R0YWdsaWIubGE6ICQobGliZ3N0dGFnbGliX2xhX09CSkVDVFMpICQobGliZ3N0dGFnbGliX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R0YWdsaWJfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ1hYTEQpJChsaWJnc3R0YWdsaWJfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHRhZ2xpYl9sYV9PQkpFQ1RTKSAkKGxpYmdzdHRhZ2xpYl9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3R0YWdsaWJwbHVnaW4uUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHRhZ2xpYl9sYS1nc3R0YWdsaWJwbHVnaW4ubG86IGdzdHRhZ2xpYnBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dGFnbGliX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHRhZ2xpYl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dGFnbGliX2xhLWdzdHRhZ2xpYnBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dGFnbGliX2xhLWdzdHRhZ2xpYnBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0dGFnbGliX2xhLWdzdHRhZ2xpYnBsdWdpbi5sbyBgdGVzdCAtZiAnZ3N0dGFnbGlicGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRhZ2xpYnBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R0YWdsaWJfbGEtZ3N0dGFnbGlicGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0dGFnbGliX2xhLWdzdHRhZ2xpYnBsdWdpbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R0YWdsaWJwbHVnaW4uYycgb2JqZWN0PSdsaWJnc3R0YWdsaWJfbGEtZ3N0dGFnbGlicGx1Z2luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dGFnbGliX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHRhZ2xpYl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R0YWdsaWJfbGEtZ3N0dGFnbGlicGx1Z2luLmxvIGB0ZXN0IC1mICdnc3R0YWdsaWJwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGFnbGlicGx1Z2luLmMKLQotLmNjLm86Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWClkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKENYWENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKENYWENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChBTV9WX0NYWClkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChDWFhDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jYy5sbzoKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKExUQ1hYQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDWFhfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENYWERFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAkkKEFNX1ZfQ1hYQGFtX19ub2RlcEApJChMVENYWENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5sbzogZ3N0aWQzdjJtdXguY2MKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChsaWJnc3R0YWdsaWJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHRhZ2xpYl9sYV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGxpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dGFnbGliX2xhLWdzdGlkM3YybXV4LlRwbyAtYyAtbyBsaWJnc3R0YWdsaWJfbGEtZ3N0aWQzdjJtdXgubG8gYHRlc3QgLWYgJ2dzdGlkM3YybXV4LmNjJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpZDN2Mm11eC5jYwotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5UcG8gJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J2dzdGlkM3YybXV4LmNjJyBvYmplY3Q9J2xpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQobGliZ3N0dGFnbGliX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R0YWdsaWJfbGFfQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIGxpYmdzdHRhZ2xpYl9sYS1nc3RpZDN2Mm11eC5sbyBgdGVzdCAtZiAnZ3N0aWQzdjJtdXguY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGlkM3YybXV4LmNjCi0KLWxpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5sbzogZ3N0YXBldjJtdXguY2MKLUBhbV9fZmFzdGRlcENYWF9UUlVFQAkkKEFNX1ZfQ1hYKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DWFggJChsaWJnc3R0YWdsaWJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHRhZ2xpYl9sYV9DWFhGTEFHUykgJChDWFhGTEFHUykgLU1UIGxpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dGFnbGliX2xhLWdzdGFwZXYybXV4LlRwbyAtYyAtbyBsaWJnc3R0YWdsaWJfbGEtZ3N0YXBldjJtdXgubG8gYHRlc3QgLWYgJ2dzdGFwZXYybXV4LmNjJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhcGV2Mm11eC5jYwotQGFtX19mYXN0ZGVwQ1hYX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5UcG8gJChERVBESVIpL2xpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENYWF9GQUxTRUAJJChBTV9WX0NYWClzb3VyY2U9J2dzdGFwZXYybXV4LmNjJyBvYmplY3Q9J2xpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ1hYREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDWFhfRkFMU0VACSQoQU1fVl9DWFhAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q1hYICQobGliZ3N0dGFnbGliX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R0YWdsaWJfbGFfQ1hYRkxBR1MpICQoQ1hYRkxBR1MpIC1jIC1vIGxpYmdzdHRhZ2xpYl9sYS1nc3RhcGV2Mm11eC5sbyBgdGVzdCAtZiAnZ3N0YXBldjJtdXguY2MnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFwZXYybXV4LmNjCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2V4dC90YWdsaWIvZ3N0YXBldjJtdXguY2MgYi9leHQvdGFnbGliL2dzdGFwZXYybXV4LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjU5ZGFmLi4wMDAwMDAwCi0tLSBhL2V4dC90YWdsaWIvZ3N0YXBldjJtdXguY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0MDggKzAsMCBAQAotLyogR1N0cmVhbWVyIHRhZ2xpYi1iYXNlZCBBUEV2MiBtdXhlcgotICogQ29weXJpZ2h0IChDKSAyMDA2IENocmlzdG9waGUgRmVyZ2VhdSA8dGV1ZkBnbm9tZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXBldjJtdXgKLSAqIEBzZWVfYWxzbzogI0dzdFRhZ1NldHRlcgotICoKLSAqIFRoaXMgZWxlbWVudCBhZGRzIEFQRXYyIHRhZ3MgdG8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmVhbSB1c2luZyB0aGUgdGFnbGliCi0gKiBsaWJyYXJ5LgotICoKLSAqIEFwcGxpY2F0aW9ucyBjYW4gc2V0IHRoZSB0YWdzIHRvIHdyaXRlIHVzaW5nIHRoZSAjR3N0VGFnU2V0dGVyIGludGVyZmFjZS4KLSAqIFRhZ3Mgc2VudCBieSB1cHN0cmVhbSBlbGVtZW50cyB3aWxsIGJlIHBpY2tlZCB1cCBhdXRvbWF0aWNhbGx5IChhbmQgbWVyZ2VkCi0gKiBhY2NvcmRpbmcgdG8gdGhlIG1lcmdlIG1vZGUgc2V0IHZpYSB0aGUgdGFnIHNldHRlciBpbnRlcmZhY2UpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmlsZXNyYyBsb2NhdGlvbj1mb28ub2dnICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgbGFtZSAhIGFwZXYybXV4ICEgZmlsZXNpbmsgbG9jYXRpb249Zm9vLm1wMwotICogXXwgQSBwaXBlbGluZSB0aGF0IHRyYW5zY29kZXMgYSBmaWxlIGZyb20gT2dnL1ZvcmJpcyB0byBtcDMgZm9ybWF0IHdpdGggYW4KLSAqIEFQRXYyIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgYXMgdGhlIHRoZSBPZ2cvVm9yYmlzIGZpbGUuIE1ha2Ugc3VyZSB0aGUKLSAqIE9nZy9Wb3JiaXMgZmlsZSBhY3R1YWxseSBoYXMgY29tbWVudHMgdG8gcHJlc2VydmUuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLW0gZmlsZXNyYyBsb2NhdGlvbj1mb28ubXAzICEgYXBlZGVtdXggISBmYWtlc2luayBzaWxlbnQ9VFJVRSAyJmd0OyAvZGV2L251bGwgfCBncmVwIHRhZ2xpc3QKLSAqIF18IFZlcmlmeSB0aGF0IHRhZ3MgaGF2ZSBiZWVuIHdyaXR0ZW4uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGFwZXYybXV4LmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGFwZXRhZy5oPgotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBUYWdMaWI7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9hcGV2Ml9tdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2FwZXYyX211eF9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtYXBldGFnIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0QXBldjJNdXgsIGdzdF9hcGV2Ml9tdXgsIEdTVF9UWVBFX1RBR19NVVgpOwotCi1zdGF0aWMgR3N0QnVmZmVyICpnc3RfYXBldjJfbXV4X3JlbmRlcl9zdGFydF90YWcgKEdzdFRhZ011eCAqIG11eCwKLSAgICBjb25zdCBHc3RUYWdMaXN0ICogdGFnbGlzdCk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfYXBldjJfbXV4X3JlbmRlcl9lbmRfdGFnIChHc3RUYWdNdXggKiBtdXgsCi0gICAgY29uc3QgR3N0VGFnTGlzdCAqIHRhZ2xpc3QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2FwZXYyX211eF9jbGFzc19pbml0IChHc3RBcGV2Mk11eENsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX1RBR19NVVhfQ0xBU1MgKGtsYXNzKS0+cmVuZGVyX3N0YXJ0X3RhZyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FwZXYyX211eF9yZW5kZXJfc3RhcnRfdGFnKTsKLSAgR1NUX1RBR19NVVhfQ0xBU1MgKGtsYXNzKS0+cmVuZGVyX2VuZF90YWcgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hcGV2Ml9tdXhfcmVuZGVyX2VuZF90YWcpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIlRhZ0xpYi1iYXNlZCBBUEV2MiBNdXhlciIsICJGb3JtYXR0ZXIvTWV0YWRhdGEiLAotICAgICAgIkFkZHMgYW4gQVBFdjIgaGVhZGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgZmlsZXMgdXNpbmcgdGFnbGliIiwKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9hcGV2Ml9tdXhfZGVidWcsICJhcGV2Mm11eCIsIDAsCi0gICAgICAidGFnbGliLWJhc2VkIEFQRXYyIHRhZyBtdXhlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FwZXYyX211eF9pbml0IChHc3RBcGV2Mk11eCAqIGFwZXYybXV4KQotewotICAvKiBub3RoaW5nIHRvIGRvICovCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FwZXYyX211eF9oYXZlX3dhdnBhY2sgKEdzdEFwZXYyTXV4ICogYXBldjJtdXgpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RDYXBzICpjYXBzOwotICBHc3RQYWQgKnNpbms7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChhcGV2Mm11eCksICJzaW5rIik7Ci0gIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHNpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLQotICBpZiAoY2FwcyA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby94LXdhdnBhY2siKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChhcGV2Mm11eCwgImdvdCB3YXZwYWNrIGlucHV0OiAlcyIsIHJldCA/ICJ5ZXMiIDogIm5vIik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfb25lX3RhZyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEFQRTo6VGFnICogYXBldjJ0YWcgPSAoQVBFOjpUYWcgKikgdXNlcl9kYXRhOwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgLyogRklYTUU6IGlmIHRoZXJlIGFyZSBzZXZlcmFsIHZhbHVlcyBzZXQgZm9yIHRoZSBzYW1lIHRhZywgdGhpcyB3b24ndAotICAgKiB3b3JrLCBvbmx5IHRoZSBmaXJzdCB2YWx1ZSB3aWxsIGJlIHRha2VuIGludG8gYWNjb3VudAotICAgKi8KLSAgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX1RJVExFKSA9PSAwKSB7Ci0gICAgY29uc3QgY2hhciAqdGl0bGU7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgMCwgJnRpdGxlKTsKLSAgICBpZiAocmVzdWx0ICE9IEZBTFNFKSB7Ci0gICAgICBHU1RfREVCVUcgKCJTZXR0aW5nIHRpdGxlIHRvICVzIiwgdGl0bGUpOwotICAgICAgYXBldjJ0YWctPnNldFRpdGxlIChTdHJpbmcgKHRpdGxlLCBTdHJpbmc6OlVURjgpKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfQUxCVU0pID09IDApIHsKLSAgICBjb25zdCBjaGFyICphbGJ1bTsKLQotICAgIHJlc3VsdCA9IGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCAwLCAmYWxidW0pOwotICAgIGlmIChyZXN1bHQgIT0gRkFMU0UpIHsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgYWxidW0gdG8gJXMiLCBhbGJ1bSk7Ci0gICAgICBhcGV2MnRhZy0+c2V0QWxidW0gKFN0cmluZyAoYWxidW0sIFN0cmluZzo6VVRGOCkpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19BUlRJU1QpID09IDApIHsKLSAgICBjb25zdCBjaGFyICphcnRpc3Q7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgMCwgJmFydGlzdCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyBhcnRpc3QgdG8gJXMiLCBhcnRpc3QpOwotICAgICAgYXBldjJ0YWctPnNldEFydGlzdCAoU3RyaW5nIChhcnRpc3QsIFN0cmluZzo6VVRGOCkpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19DT01QT1NFUikgPT0gMCkgewotICAgIGNvbnN0IGNoYXIgKmNvbXBvc2VyOwotCi0gICAgcmVzdWx0ID0gZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIDAsICZjb21wb3Nlcik7Ci0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyBjb21wb3NlciB0byAlcyIsIGNvbXBvc2VyKTsKLSAgICAgIGFwZXYydGFnLT5hZGRWYWx1ZSAoU3RyaW5nICgiQ09NUE9TRVIiLCBTdHJpbmc6OlVURjgpLAotICAgICAgICAgIFN0cmluZyAoY29tcG9zZXIsIFN0cmluZzo6VVRGOCkpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19HRU5SRSkgPT0gMCkgewotICAgIGNvbnN0IGNoYXIgKmdlbnJlOwotCi0gICAgcmVzdWx0ID0gZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIDAsICZnZW5yZSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyBnZW5yZSB0byAlcyIsIGdlbnJlKTsKLSAgICAgIGFwZXYydGFnLT5zZXRHZW5yZSAoU3RyaW5nIChnZW5yZSwgU3RyaW5nOjpVVEY4KSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0NPTU1FTlQpID09IDApIHsKLSAgICBjb25zdCBjaGFyICpjb21tZW50OwotCi0gICAgcmVzdWx0ID0gZ3N0X3RhZ19saXN0X3BlZWtfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIDAsICZjb21tZW50KTsKLSAgICBpZiAocmVzdWx0ICE9IEZBTFNFKSB7Ci0gICAgICBHU1RfREVCVUcgKCJTZXR0aW5nIGNvbW1lbnQgdG8gJXMiLCBjb21tZW50KTsKLSAgICAgIGFwZXYydGFnLT5zZXRDb21tZW50IChTdHJpbmcgKGNvbW1lbnQsIFN0cmluZzo6VVRGOCkpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19EQVRFKSA9PSAwKSB7Ci0gICAgR0RhdGUgKmRhdGU7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X2RhdGVfaW5kZXggKGxpc3QsIHRhZywgMCwgJmRhdGUpOwotICAgIGlmIChyZXN1bHQgIT0gRkFMU0UpIHsKLSAgICAgIEdEYXRlWWVhciB5ZWFyOwotCi0gICAgICB5ZWFyID0gZ19kYXRlX2dldF95ZWFyIChkYXRlKTsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgdHJhY2sgeWVhciB0byAlZCIsIHllYXIpOwotICAgICAgYXBldjJ0YWctPnNldFllYXIgKHllYXIpOwotICAgICAgZ19kYXRlX2ZyZWUgKGRhdGUpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19UUkFDS19OVU1CRVIpID09IDApIHsKLSAgICBndWludCB0cmFja19udW1iZXI7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKGxpc3QsIHRhZywgMCwgJnRyYWNrX251bWJlcik7Ci0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgZ3VpbnQgdG90YWxfdHJhY2tzOwotCi0gICAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKGxpc3QsIEdTVF9UQUdfVFJBQ0tfQ09VTlQsCi0gICAgICAgICAgMCwgJnRvdGFsX3RyYWNrcyk7Ci0gICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIGdjaGFyICp0YWdfc3RyOwotCi0gICAgICAgIHRhZ19zdHIgPSBnX3N0cmR1cF9wcmludGYgKCIlZC8lZCIsIHRyYWNrX251bWJlciwgdG90YWxfdHJhY2tzKTsKLSAgICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyB0cmFjayBudW1iZXIgdG8gJXMiLCB0YWdfc3RyKTsKLSAgICAgICAgYXBldjJ0YWctPmFkZFZhbHVlIChTdHJpbmcgKCJUUkFDSyIsIFN0cmluZzo6VVRGOCksCi0gICAgICAgICAgICBTdHJpbmcgKHRhZ19zdHIsIFN0cmluZzo6VVRGOCksIHRydWUpOwotICAgICAgICBnX2ZyZWUgKHRhZ19zdHIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyB0cmFjayBudW1iZXIgdG8gJWQiLCB0cmFja19udW1iZXIpOwotICAgICAgICBhcGV2MnRhZy0+c2V0VHJhY2sgKHRyYWNrX251bWJlcik7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX1RSQUNLX0NPVU5UKSA9PSAwKSB7Ci0gICAgZ3VpbnQgbjsKLQotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKGxpc3QsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSLCAwLCAmbikpIHsKLSAgICAgIEdTVF9ERUJVRyAoInRyYWNrLWNvdW50IGhhbmRsZWQgd2l0aCB0cmFjay1udW1iZXIsIHNraXBwaW5nIik7Ci0gICAgfSBlbHNlIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKGxpc3QsIEdTVF9UQUdfVFJBQ0tfQ09VTlQsIDAsICZuKSkgewotICAgICAgZ2NoYXIgKnRhZ19zdHI7Ci0KLSAgICAgIHRhZ19zdHIgPSBnX3N0cmR1cF9wcmludGYgKCIwLyVkIiwgbik7Ci0gICAgICBHU1RfREVCVUcgKCJTZXR0aW5nIHRyYWNrIG51bWJlciB0byAlcyIsIHRhZ19zdHIpOwotICAgICAgYXBldjJ0YWctPmFkZFZhbHVlIChTdHJpbmcgKCJUUkFDSyIsIFN0cmluZzo6VVRGOCksCi0gICAgICAgICAgU3RyaW5nICh0YWdfc3RyLCBTdHJpbmc6OlVURjgpLCB0cnVlKTsKLSAgICAgIGdfZnJlZSAodGFnX3N0cik7Ci0gICAgfQotI2lmIDAKLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSKSA9PSAwKSB7Ci0gICAgZ3VpbnQgdm9sdW1lX251bWJlcjsKLQotICAgIHJlc3VsdCA9IGdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAobGlzdCwgdGFnLCAwLCAmdm9sdW1lX251bWJlcik7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEZBTFNFKSB7Ci0gICAgICBndWludCB2b2x1bWVfY291bnQ7Ci0gICAgICBnY2hhciAqdGFnX3N0cjsKLQotICAgICAgcmVzdWx0ID0gZ3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4IChsaXN0LCBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCwKLSAgICAgICAgICAwLCAmdm9sdW1lX2NvdW50KTsKLQotICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICB0YWdfc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiQ0QgJWQvJWQiLCB2b2x1bWVfbnVtYmVyLCB2b2x1bWVfY291bnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGFnX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIkNEICVkIiwgdm9sdW1lX251bWJlcik7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgYWxidW0gbnVtYmVyIHRvICVzIiwgdGFnX3N0cik7Ci0KLSAgICAgIGFwZXYydGFnLT5hZGRWYWx1ZSAoU3RyaW5nICgiTUVESUEiLCBTdHJpbmc6OlVURjgpLAotICAgICAgICAgIFN0cmluZyAodGFnX3N0ciwgU3RyaW5nOjpVVEY4KSwgdHJ1ZSk7Ci0gICAgICBnX2ZyZWUgKHRhZ19zdHIpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQpID09IDApIHsKLSAgICBndWludCBuOwotCi0gICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAobGlzdCwgR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSLCAwLCAmbikpIHsKLSAgICAgIEdTVF9ERUJVRyAoInZvbHVtZS1jb3VudCBoYW5kbGVkIHdpdGggdm9sdW1lLW51bWJlciwgc2tpcHBpbmciKTsKLSAgICB9IGVsc2UgaWYgKGdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAobGlzdCwgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQsCi0gICAgICAgICAgICAwLCAmbikpIHsKLSAgICAgIGdjaGFyICp0YWdfc3RyOwotCi0gICAgICB0YWdfc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiQ0QgMC8ldSIsIG4pOwotICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyBhbGJ1bSB2b2x1bWUgbnVtYmVyL2NvdW50IHRvICVzIiwgdGFnX3N0cik7Ci0KLSAgICAgIGFwZXYydGFnLT5hZGRWYWx1ZSAoU3RyaW5nICgiTUVESUEiLCBTdHJpbmc6OlVURjgpLAotICAgICAgICAgIFN0cmluZyAodGFnX3N0ciwgU3RyaW5nOjpVVEY4KSwgdHJ1ZSk7Ci0gICAgICBnX2ZyZWUgKHRhZ19zdHIpOwotICAgIH0KLSNlbmRpZgotICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0NPUFlSSUdIVCkgPT0gMCkgewotICAgIGNvbnN0IGdjaGFyICpjb3B5cmlnaHQ7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfcGVla19zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgMCwgJmNvcHlyaWdodCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEZBTFNFKSB7Ci0gICAgICBHU1RfREVCVUcgKCJTZXR0aW5nIGNvcHlyaWdodCB0byAlcyIsIGNvcHlyaWdodCk7Ci0gICAgICBhcGV2MnRhZy0+YWRkVmFsdWUgKFN0cmluZyAoIkNPUFlSSUdIVCIsIFN0cmluZzo6VVRGOCksCi0gICAgICAgICAgU3RyaW5nIChjb3B5cmlnaHQsIFN0cmluZzo6VVRGOCksIHRydWUpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19MT0NBVElPTikgPT0gMCkgewotICAgIGNvbnN0IGdjaGFyICpsb2NhdGlvbjsKLQotICAgIHJlc3VsdCA9IGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCAwLCAmbG9jYXRpb24pOwotCi0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgR1NUX0RFQlVHICgiU2V0dGluZyBsb2NhdGlvbiB0byAlcyIsIGxvY2F0aW9uKTsKLSAgICAgIGFwZXYydGFnLT5hZGRWYWx1ZSAoU3RyaW5nICgiRklMRSIsIFN0cmluZzo6VVRGOCksCi0gICAgICAgICAgU3RyaW5nIChsb2NhdGlvbiwgU3RyaW5nOjpVVEY4KSwgdHJ1ZSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0lTUkMpID09IDApIHsKLSAgICBjb25zdCBnY2hhciAqaXNyYzsKLQotICAgIHJlc3VsdCA9IGdzdF90YWdfbGlzdF9wZWVrX3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCAwLCAmaXNyYyk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEZBTFNFKSB7Ci0gICAgICBHU1RfREVCVUcgKCJTZXR0aW5nIElTUkMgdG8gJXMiLCBpc3JjKTsKLSAgICAgIGFwZXYydGFnLT5hZGRWYWx1ZSAoU3RyaW5nICgiSVNSQyIsIFN0cmluZzo6VVRGOCksCi0gICAgICAgICAgU3RyaW5nIChpc3JjLCBTdHJpbmc6OlVURjgpLCB0cnVlKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfVFJBQ0tfR0FJTikgPT0gMCkgewotICAgIGdkb3VibGUgdmFsdWU7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAobGlzdCwgdGFnLCAwLCAmdmFsdWUpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgZ2NoYXIgKnRyYWNrX2dhaW4gPSAoZ2NoYXIgKikgZ19tYWxsb2MwIChHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSk7Ci0KLSAgICAgIHRyYWNrX2dhaW4gPSBnX2FzY2lpX2R0b3N0ciAodHJhY2tfZ2FpbiwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgdHJhY2sgZ2FpbiB0byAlcyIsIHRyYWNrX2dhaW4pOwotICAgICAgYXBldjJ0YWctPmFkZFZhbHVlIChTdHJpbmcgKCJSRVBMQVlHQUlOX1RSQUNLX0dBSU4iLAotICAgICAgICAgICAgICBTdHJpbmc6OlVURjgpLCBTdHJpbmcgKHRyYWNrX2dhaW4sIFN0cmluZzo6VVRGOCksIHRydWUpOwotICAgICAgZ19mcmVlICh0cmFja19nYWluKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfVFJBQ0tfUEVBSykgPT0gMCkgewotICAgIGdkb3VibGUgdmFsdWU7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAobGlzdCwgdGFnLCAwLCAmdmFsdWUpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgZ2NoYXIgKnRyYWNrX3BlYWsgPSAoZ2NoYXIgKikgZ19tYWxsb2MwIChHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSk7Ci0KLSAgICAgIHRyYWNrX3BlYWsgPSBnX2FzY2lpX2R0b3N0ciAodHJhY2tfcGVhaywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgdHJhY2sgcGVhayB0byAlcyIsIHRyYWNrX3BlYWspOwotICAgICAgYXBldjJ0YWctPmFkZFZhbHVlIChTdHJpbmcgKCJSRVBMQVlHQUlOX1RSQUNLX1BFQUsiLAotICAgICAgICAgICAgICBTdHJpbmc6OlVURjgpLCBTdHJpbmcgKHRyYWNrX3BlYWssIFN0cmluZzo6VVRGOCksIHRydWUpOwotICAgICAgZ19mcmVlICh0cmFja19wZWFrKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfQUxCVU1fR0FJTikgPT0gMCkgewotICAgIGdkb3VibGUgdmFsdWU7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAobGlzdCwgdGFnLCAwLCAmdmFsdWUpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgZ2NoYXIgKmFsYnVtX2dhaW4gPSAoZ2NoYXIgKikgZ19tYWxsb2MwIChHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSk7Ci0KLSAgICAgIGFsYnVtX2dhaW4gPSBnX2FzY2lpX2R0b3N0ciAoYWxidW1fZ2FpbiwgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgYWxidW0gZ2FpbiB0byAlcyIsIGFsYnVtX2dhaW4pOwotICAgICAgYXBldjJ0YWctPmFkZFZhbHVlIChTdHJpbmcgKCJSRVBMQVlHQUlOX0FMQlVNX0dBSU4iLAotICAgICAgICAgICAgICBTdHJpbmc6OlVURjgpLCBTdHJpbmcgKGFsYnVtX2dhaW4sIFN0cmluZzo6VVRGOCksIHRydWUpOwotICAgICAgZ19mcmVlIChhbGJ1bV9nYWluKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfQUxCVU1fUEVBSykgPT0gMCkgewotICAgIGdkb3VibGUgdmFsdWU7Ci0KLSAgICByZXN1bHQgPSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAobGlzdCwgdGFnLCAwLCAmdmFsdWUpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBGQUxTRSkgewotICAgICAgZ2NoYXIgKmFsYnVtX3BlYWsgPSAoZ2NoYXIgKikgZ19tYWxsb2MwIChHX0FTQ0lJX0RUT1NUUl9CVUZfU0laRSk7Ci0KLSAgICAgIGFsYnVtX3BlYWsgPSBnX2FzY2lpX2R0b3N0ciAoYWxidW1fcGVhaywgR19BU0NJSV9EVE9TVFJfQlVGX1NJWkUsIHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgYWxidW0gcGVhayB0byAlcyIsIGFsYnVtX3BlYWspOwotICAgICAgYXBldjJ0YWctPmFkZFZhbHVlIChTdHJpbmcgKCJSRVBMQVlHQUlOX0FMQlVNX1BFQUsiLAotICAgICAgICAgICAgICBTdHJpbmc6OlVURjgpLCBTdHJpbmcgKGFsYnVtX3BlYWssIFN0cmluZzo6VVRGOCksIHRydWUpOwotICAgICAgZ19mcmVlIChhbGJ1bV9wZWFrKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJVbnN1cHBvcnRlZCB0YWc6ICVzIiwgdGFnKTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9hcGV2Ml9tdXhfcmVuZGVyX3RhZyAoR3N0VGFnTXV4ICogbXV4LCBjb25zdCBHc3RUYWdMaXN0ICogdGFnbGlzdCkKLXsKLSAgQVBFOjpUYWcgYXBldjJ0YWc7Ci0gIEJ5dGVWZWN0b3IgcmVuZGVyZWRfdGFnOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQgdGFnX3NpemU7Ci0KLSAgLyogUmVuZGVyIHRoZSB0YWcgKi8KLSAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKHRhZ2xpc3QsIGFkZF9vbmVfdGFnLCAmYXBldjJ0YWcpOwotCi0gIHJlbmRlcmVkX3RhZyA9IGFwZXYydGFnLnJlbmRlciAoKTsKLSAgdGFnX3NpemUgPSByZW5kZXJlZF90YWcuc2l6ZSAoKTsKLQotICBHU1RfTE9HX09CSkVDVCAobXV4LCAidGFnIHNpemUgPSAlZCBieXRlcyIsIHRhZ19zaXplKTsKLQotICAvKiBDcmVhdGUgYnVmZmVyIHdpdGggdGFnICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAodGFnX3NpemUpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgcmVuZGVyZWRfdGFnLmRhdGEgKCksIHRhZ19zaXplKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9hcGV2Ml9tdXhfcmVuZGVyX3N0YXJ0X3RhZyAoR3N0VGFnTXV4ICogbXV4LCBjb25zdCBHc3RUYWdMaXN0ICogdGFnbGlzdCkKLXsKLSAgaWYgKGdzdF9hcGV2Ml9tdXhfaGF2ZV93YXZwYWNrIChHU1RfQVBFVjJfTVVYIChtdXgpKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gZ3N0X2FwZXYyX211eF9yZW5kZXJfdGFnIChtdXgsIHRhZ2xpc3QpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9hcGV2Ml9tdXhfcmVuZGVyX2VuZF90YWcgKEdzdFRhZ011eCAqIG11eCwgY29uc3QgR3N0VGFnTGlzdCAqIHRhZ2xpc3QpCi17Ci0gIGlmIChnc3RfYXBldjJfbXV4X2hhdmVfd2F2cGFjayAoR1NUX0FQRVYyX01VWCAobXV4KSkpCi0gICAgcmV0dXJuIGdzdF9hcGV2Ml9tdXhfcmVuZGVyX3RhZyAobXV4LCB0YWdsaXN0KTsKLQotICByZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2V4dC90YWdsaWIvZ3N0YXBldjJtdXguaCBiL2V4dC90YWdsaWIvZ3N0YXBldjJtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVjZWI1Ny4uMDAwMDAwMAotLS0gYS9leHQvdGFnbGliL2dzdGFwZXYybXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdGFnbGliLWJhc2VkIEFQRXYyIG11eGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hyaXN0b3BoZSBGZXJnZWF1IDx0ZXVmQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEdTVF9BUEVWMl9NVVhfSAotI2RlZmluZSBHU1RfQVBFVjJfTVVYX0gKLQotI2luY2x1ZGUgPGdzdC90YWcvZ3N0dGFnbXV4Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFwZXYyTXV4IEdzdEFwZXYyTXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFwZXYyTXV4Q2xhc3MgR3N0QXBldjJNdXhDbGFzczsKLQotc3RydWN0IF9Hc3RBcGV2Mk11eCB7Ci0gIEdzdFRhZ011eCAgdGFnbXV4OwotfTsKLQotc3RydWN0IF9Hc3RBcGV2Mk11eENsYXNzIHsKLSAgR3N0VGFnTXV4Q2xhc3MgIHRhZ211eF9jbGFzczsKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQVBFVjJfTVVYIFwKLSAgKGdzdF9hcGV2Ml9tdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FQRVYyX01VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FQRVYyX01VWCxHc3RBcGV2Mk11eCkpCi0jZGVmaW5lIEdTVF9BUEVWMl9NVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQVBFVjJfTVVYLEdzdEFwZXYyTXV4Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVBFVjJfTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVBFVjJfTVVYKSkKLSNkZWZpbmUgR1NUX0lTX0FQRVYyX01VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9BUEVWMl9NVVgpKQotCi1HVHlwZSBnc3RfYXBldjJfbXV4X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIEdTVF9BUEVWMl9NVVhfSCAqLwpkaWZmIC0tZ2l0IGEvZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYyBiL2V4dC90YWdsaWIvZ3N0aWQzdjJtdXguY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYzkxMTYuLjAwMDAwMDAKLS0tIGEvZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5jYworKysgL2Rldi9udWxsCkBAIC0xLDgwNCArMCwwIEBACi0vKiBHU3RyZWFtZXIgdGFnbGliLWJhc2VkIElEM3YyIG11eGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hyaXN0b3BoZSBGZXJnZWF1IDx0ZXVmQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWlkM3YybXV4Ci0gKiBAc2VlX2Fsc286ICNHc3RJRDNEZW11eCwgI0dzdFRhZ1NldHRlcgotICoKLSAqIFRoaXMgZWxlbWVudCBhZGRzIElEM3YyIHRhZ3MgdG8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmVhbSB1c2luZyB0aGUgdGFnbGliCi0gKiBsaWJyYXJ5LiBNb3JlIHByZWNpc2VseSwgdGhlIHRhZ3Mgd3JpdHRlbiBhcmUgSUQzIHZlcnNpb24gMi40LjAgdGFncyAod2hpY2gKLSAqIG1lYW5zIGluIHByYWN0aWNlIHRoYXQgc29tZSBoYXJkd2FyZSBwbGF5ZXJzIG9yIG91dGRhdGVkIHByb2dyYW1zIG1pZ2h0IG5vdAotICogYmUgYWJsZSB0byByZWFkIHRoZW0gcHJvcGVybHkpLgotICoKLSAqIEFwcGxpY2F0aW9ucyBjYW4gc2V0IHRoZSB0YWdzIHRvIHdyaXRlIHVzaW5nIHRoZSAjR3N0VGFnU2V0dGVyIGludGVyZmFjZS4KLSAqIFRhZ3Mgc2VudCBieSB1cHN0cmVhbSBlbGVtZW50cyB3aWxsIGJlIHBpY2tlZCB1cCBhdXRvbWF0aWNhbGx5IChhbmQgbWVyZ2VkCi0gKiBhY2NvcmRpbmcgdG8gdGhlIG1lcmdlIG1vZGUgc2V0IHZpYSB0aGUgdGFnIHNldHRlciBpbnRlcmZhY2UpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmlsZXNyYyBsb2NhdGlvbj1mb28ub2dnICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgbGFtZSAhIGlkM3YybXV4ICEgZmlsZXNpbmsgbG9jYXRpb249Zm9vLm1wMwotICogXXwgQSBwaXBlbGluZSB0aGF0IHRyYW5zY29kZXMgYSBmaWxlIGZyb20gT2dnL1ZvcmJpcyB0byBtcDMgZm9ybWF0IHdpdGggYW4KLSAqIElEM3YyIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgYXMgdGhlIHRoZSBPZ2cvVm9yYmlzIGZpbGUuIE1ha2Ugc3VyZSB0aGUKLSAqIE9nZy9Wb3JiaXMgZmlsZSBhY3R1YWxseSBoYXMgY29tbWVudHMgdG8gcHJlc2VydmUuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLW0gZmlsZXNyYyBsb2NhdGlvbj1mb28ubXAzICEgaWQzZGVtdXggISBmYWtlc2luayBzaWxlbnQ9VFJVRSAyJmd0OyAvZGV2L251bGwgfCBncmVwIHRhZ2xpc3QKLSAqIF18IFZlcmlmeSB0aGF0IHRhZ3MgaGF2ZSBiZWVuIHdyaXR0ZW4uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGlkM3YybXV4LmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPHRleHRpZGVudGlmaWNhdGlvbmZyYW1lLmg+Ci0jaW5jbHVkZSA8dW5pcXVlZmlsZWlkZW50aWZpZXJmcmFtZS5oPgotI2luY2x1ZGUgPGF0dGFjaGVkcGljdHVyZWZyYW1lLmg+Ci0jaW5jbHVkZSA8cmVsYXRpdmV2b2x1bWVmcmFtZS5oPgotI2luY2x1ZGUgPGNvbW1lbnRzZnJhbWUuaD4KLSNpbmNsdWRlIDx1bmtub3duZnJhbWUuaD4KLSNpbmNsdWRlIDxpZDN2MnN5bmNoZGF0YS5oPgotI2luY2x1ZGUgPGlkM3YydGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFRhZ0xpYjsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2lkM3YyX211eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfaWQzdjJfbXV4X2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1pZDMiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiQU5ZIikpOwotCi1HX0RFRklORV9UWVBFIChHc3RJZDN2Mk11eCwgZ3N0X2lkM3YyX211eCwgR1NUX1RZUEVfVEFHX01VWCk7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9pZDN2Ml9tdXhfcmVuZGVyX3RhZyAoR3N0VGFnTXV4ICogbXV4LAotICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdsaXN0KTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9pZDN2Ml9tdXhfcmVuZGVyX2VuZF90YWcgKEdzdFRhZ011eCAqIG11eCwKLSAgICBjb25zdCBHc3RUYWdMaXN0ICogdGFnbGlzdCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWQzdjJfbXV4X2NsYXNzX2luaXQgKEdzdElkM3YyTXV4Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBHU1RfVEFHX01VWF9DTEFTUyAoa2xhc3MpLT5yZW5kZXJfc3RhcnRfdGFnID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWQzdjJfbXV4X3JlbmRlcl90YWcpOwotICBHU1RfVEFHX01VWF9DTEFTUyAoa2xhc3MpLT5yZW5kZXJfZW5kX3RhZyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2lkM3YyX211eF9yZW5kZXJfZW5kX3RhZyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiVGFnTGliLWJhc2VkIElEM3YyIE11eGVyIiwgIkZvcm1hdHRlci9NZXRhZGF0YSIsCi0gICAgICAiQWRkcyBhbiBJRDN2MiBoZWFkZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBNUDMgZmlsZXMgdXNpbmcgdGFnbGliIiwKLSAgICAgICJDaHJpc3RvcGhlIEZlcmdlYXUgPHRldWZAZ25vbWUub3JnPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfaWQzdjJfbXV4X2RlYnVnLCAiaWQzdjJtdXgiLCAwLAotICAgICAgInRhZ2xpYi1iYXNlZCBJRDN2MiB0YWcgbXV4ZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pZDN2Ml9tdXhfaW5pdCAoR3N0SWQzdjJNdXggKiBpZDN2Mm11eCkKLXsKLSAgLyogbm90aGluZyB0byBkbyAqLwotfQotCi0jaWYgMAotc3RhdGljIHZvaWQKLWFkZF9vbmVfdHh4eF90YWcgKElEM3YyOjpUYWcgKiBpZDN2MnRhZywgY29uc3QgZ2NoYXIgKiBrZXksIGNvbnN0IGdjaGFyICogdmFsKQotewotICBJRDN2Mjo6VXNlclRleHRJZGVudGlmaWNhdGlvbkZyYW1lICogZnJhbWU7Ci0KLSAgaWYgKHZhbCA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUcgKCJTZXR0aW5nICVzIHRvICVzIiwga2V5LCB2YWwpOwotICBmcmFtZSA9IG5ldyBJRDN2Mjo6VXNlclRleHRJZGVudGlmaWNhdGlvbkZyYW1lIChTdHJpbmc6OlVURjgpOwotICBpZDN2MnRhZy0+YWRkRnJhbWUgKGZyYW1lKTsKLSAgZnJhbWUtPnNldERlc2NyaXB0aW9uIChrZXkpOwotICBmcmFtZS0+c2V0VGV4dCAodmFsKTsKLX0KLSNlbmRpZgotCi10eXBlZGVmIHZvaWQgKCpHc3RJZDN2Mk11eEFkZFRhZ0Z1bmMpIChJRDN2Mjo6VGFnICogaWQzdjJ0YWcsCi0gICAgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IG51bV90YWdzLCBjb25zdCBnY2hhciAqIGRhdGEpOwotCi1zdGF0aWMgdm9pZAotYWRkX2VuY29kZXJfdGFnIChJRDN2Mjo6VGFnICogaWQzdjJ0YWcsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBndWludCBudW1fdGFncywgY29uc3QgZ2NoYXIgKiB1bnVzZWQpCi17Ci0gIFRhZ0xpYjo6U3RyaW5nTGlzdCBzdHJpbmdfbGlzdDsKLSAgZ3VpbnQgbjsKLQotICAvKiBFTkNPREVSX1ZFUlNJT04gaXMgZWl0aGVyIGhhbmRsZWQgd2l0aCB0aGUgRU5DT0RFUiB0YWcgb3Igbm90IGF0IGFsbCAqLwotICBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OKSA9PSAwKQotICAgIHJldHVybjsKLQotICBmb3IgKG4gPSAwOyBuIDwgbnVtX3RhZ3M7ICsrbikgewotICAgIGdjaGFyICplbmNvZGVyID0gTlVMTDsKLQotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCBuLCAmZW5jb2RlcikgJiYgZW5jb2RlcikgewotICAgICAgZ3VpbnQgZW5jb2Rlcl92ZXJzaW9uOwotICAgICAgZ2NoYXIgKnM7Ci0KLSAgICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKGxpc3QsIEdTVF9UQUdfRU5DT0RFUl9WRVJTSU9OLCBuLAotICAgICAgICAgICAgICAmZW5jb2Rlcl92ZXJzaW9uKSAmJiBlbmNvZGVyX3ZlcnNpb24gPiAwKSB7Ci0gICAgICAgIHMgPSBnX3N0cmR1cF9wcmludGYgKCIlcyAldSIsIGVuY29kZXIsIGVuY29kZXJfdmVyc2lvbik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzID0gZ19zdHJkdXAgKGVuY29kZXIpOwotICAgICAgfQotCi0gICAgICBHU1RfTE9HICgiZW5jb2RlclsldV0gPSAnJXMnIiwgbiwgcyk7Ci0gICAgICBzdHJpbmdfbGlzdC5hcHBlbmQgKFN0cmluZyAocywgU3RyaW5nOjpVVEY4KSk7Ci0gICAgICBnX2ZyZWUgKHMpOwotICAgICAgZ19mcmVlIChlbmNvZGVyKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXN0cmluZ19saXN0LmlzRW1wdHkgKCkpIHsKLSAgICBJRDN2Mjo6VGV4dElkZW50aWZpY2F0aW9uRnJhbWUgKiBmOwotCi0gICAgZiA9IG5ldyBJRDN2Mjo6VGV4dElkZW50aWZpY2F0aW9uRnJhbWUgKCJUU1NFIiwgU3RyaW5nOjpVVEY4KTsKLSAgICBpZDN2MnRhZy0+YWRkRnJhbWUgKGYpOwotICAgIGYtPnNldFRleHQgKHN0cmluZ19saXN0KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklORyAoIkVtcHR5IGxpc3QgZm9yIHRhZyAlcywgc2tpcHBpbmciLCB0YWcpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfZGF0ZV90YWcgKElEM3YyOjpUYWcgKiBpZDN2MnRhZywgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IG51bV90YWdzLCBjb25zdCBnY2hhciAqIHVudXNlZCkKLXsKLSAgVGFnTGliOjpTdHJpbmdMaXN0IHN0cmluZ19saXN0OwotICBndWludCBuOwotCi0gIEdTVF9MT0cgKCJBZGRpbmcgZGF0ZSBmcmFtZSIpOwotCi0gIGZvciAobiA9IDA7IG4gPCBudW1fdGFnczsgKytuKSB7Ci0gICAgR0RhdGUgKmRhdGUgPSBOVUxMOwotCi0gICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfZGF0ZV9pbmRleCAobGlzdCwgdGFnLCBuLCAmZGF0ZSkgJiYgZGF0ZSAhPSBOVUxMKSB7Ci0gICAgICBHRGF0ZVllYXIgeWVhcjsKLSAgICAgIGdjaGFyICpzOwotCi0gICAgICB5ZWFyID0gZ19kYXRlX2dldF95ZWFyIChkYXRlKTsKLSAgICAgIGlmICh5ZWFyID4gNTAwICYmIHllYXIgPCAyMTAwKSB7Ci0gICAgICAgIHMgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIHllYXIpOwotICAgICAgICBHU1RfTE9HICgiJXNbJXVdID0gJyVzJyIsIHRhZywgbiwgcyk7Ci0gICAgICAgIHN0cmluZ19saXN0LmFwcGVuZCAoU3RyaW5nIChzLCBTdHJpbmc6OlVURjgpKTsKLSAgICAgICAgZ19mcmVlIChzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiaW52YWxpZCB5ZWFyICV1LCBza2lwcGluZyIsIHllYXIpOwotICAgICAgfQotCi0gICAgICBnX2RhdGVfZnJlZSAoZGF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFzdHJpbmdfbGlzdC5pc0VtcHR5ICgpKSB7Ci0gICAgSUQzdjI6OlRleHRJZGVudGlmaWNhdGlvbkZyYW1lICogZjsKLQotICAgIGYgPSBuZXcgSUQzdjI6OlRleHRJZGVudGlmaWNhdGlvbkZyYW1lICgiVERSQyIsIFN0cmluZzo6VVRGOCk7Ci0gICAgaWQzdjJ0YWctPmFkZEZyYW1lIChmKTsKLSAgICBmLT5zZXRUZXh0IChzdHJpbmdfbGlzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJFbXB0eSBsaXN0IGZvciB0YWcgJXMsIHNraXBwaW5nIiwgdGFnKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYWRkX2NvdW50X29yX251bV90YWcgKElEM3YyOjpUYWcgKiBpZDN2MnRhZywgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IG51bV90YWdzLCBjb25zdCBnY2hhciAqIGZyYW1lX2lkKQotewotICBzdGF0aWMgY29uc3Qgc3RydWN0Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqZ3N0X3RhZzsKLSAgICBjb25zdCBnY2hhciAqY29ycl9jb3VudDsgICAgLyogY29ycmVzcG9uZGluZyBDT1VOVCB0YWcgKGlmIG51bWJlcikgKi8KLSAgICBjb25zdCBnY2hhciAqY29ycl9udW07ICAgICAgLyogY29ycmVzcG9uZGluZyBOVU1CRVIgdGFnIChpZiBjb3VudCkgKi8KLSAgfSBjb3JyW10gPSB7Ci0gICAgewotICAgIEdTVF9UQUdfVFJBQ0tfTlVNQkVSLCBHU1RfVEFHX1RSQUNLX0NPVU5ULCBOVUxMfSwgewotICAgIEdTVF9UQUdfVFJBQ0tfQ09VTlQsIE5VTEwsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSfSwgewotICAgIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUiwgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQsIE5VTEx9LCB7Ci0gICAgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQsIE5VTEwsIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUn0KLSAgfTsKLSAgZ3VpbnQgaWR4OwotCi0gIGZvciAoaWR4ID0gMDsgaWR4IDwgR19OX0VMRU1FTlRTIChjb3JyKTsgKytpZHgpIHsKLSAgICBpZiAoc3RyY21wIChjb3JyW2lkeF0uZ3N0X3RhZywgdGFnKSA9PSAwKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnX2Fzc2VydCAoaWR4IDwgR19OX0VMRU1FTlRTIChjb3JyKSk7Ci0gIGdfYXNzZXJ0IChmcmFtZV9pZCAmJiBzdHJsZW4gKGZyYW1lX2lkKSA9PSA0KTsKLQotICBpZiAoY29ycltpZHhdLmNvcnJfbnVtID09IE5VTEwpIHsKLSAgICBndWludCBudW1iZXI7Ci0KLSAgICAvKiBudW1iZXIgdGFnICovCi0gICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfdWludF9pbmRleCAobGlzdCwgdGFnLCAwLCAmbnVtYmVyKSkgewotICAgICAgSUQzdjI6OlRleHRJZGVudGlmaWNhdGlvbkZyYW1lICogZnJhbWU7Ci0gICAgICBnY2hhciAqdGFnX3N0cjsKLSAgICAgIGd1aW50IGNvdW50OwotCi0gICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4IChsaXN0LCBjb3JyW2lkeF0uY29ycl9jb3VudCwgMCwgJmNvdW50KSkKLSAgICAgICAgdGFnX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1LyV1IiwgbnVtYmVyLCBjb3VudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHRhZ19zdHIgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIG51bWJlcik7Ci0KLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgJXMgdG8gJXMgKGZyYW1lX2lkID0gJXMpIiwgdGFnLCB0YWdfc3RyLCBmcmFtZV9pZCk7Ci0gICAgICBmcmFtZSA9IG5ldyBJRDN2Mjo6VGV4dElkZW50aWZpY2F0aW9uRnJhbWUgKGZyYW1lX2lkLCBTdHJpbmc6OlVURjgpOwotICAgICAgaWQzdjJ0YWctPmFkZEZyYW1lIChmcmFtZSk7Ci0gICAgICBmcmFtZS0+c2V0VGV4dCAodGFnX3N0cik7Ci0gICAgICBnX2ZyZWUgKHRhZ19zdHIpOwotICAgIH0KLSAgfSBlbHNlIGlmIChjb3JyW2lkeF0uY29ycl9jb3VudCA9PSBOVUxMKSB7Ci0gICAgZ3VpbnQgY291bnQ7Ci0KLSAgICAvKiBjb3VudCB0YWcgKi8KLSAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50X2luZGV4IChsaXN0LCBjb3JyW2lkeF0uY29ycl9udW0sIDAsICZjb3VudCkpIHsKLSAgICAgIEdTVF9ERUJVRyAoIiVzIGhhbmRsZWQgd2l0aCAlcywgc2tpcHBpbmciLCB0YWcsIGNvcnJbaWR4XS5jb3JyX251bSk7Ci0gICAgfSBlbHNlIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnRfaW5kZXggKGxpc3QsIHRhZywgMCwgJmNvdW50KSkgewotICAgICAgSUQzdjI6OlRleHRJZGVudGlmaWNhdGlvbkZyYW1lICogZnJhbWU7Ci0gICAgICBnY2hhciAqdGFnX3N0cjsKLQotICAgICAgdGFnX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIjAvJXUiLCBjb3VudCk7Ci0gICAgICBHU1RfREVCVUcgKCJTZXR0aW5nICVzIHRvICVzIChmcmFtZV9pZCA9ICVzKSIsIHRhZywgdGFnX3N0ciwgZnJhbWVfaWQpOwotICAgICAgZnJhbWUgPSBuZXcgSUQzdjI6OlRleHRJZGVudGlmaWNhdGlvbkZyYW1lIChmcmFtZV9pZCwgU3RyaW5nOjpVVEY4KTsKLSAgICAgIGlkM3YydGFnLT5hZGRGcmFtZSAoZnJhbWUpOwotICAgICAgZnJhbWUtPnNldFRleHQgKHRhZ19zdHIpOwotICAgICAgZ19mcmVlICh0YWdfc3RyKTsKLSAgICB9Ci0gIH0KLQotICBpZiAobnVtX3RhZ3MgPiAxKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJtb3JlIHRoYW4gb25lICVzLCBjYW4gb25seSBoYW5kbGUgb25lIiwgdGFnKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYWRkX3VuaXF1ZV9maWxlX2lkX3RhZyAoSUQzdjI6OlRhZyAqIGlkM3YydGFnLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgbnVtX3RhZ3MsIGNvbnN0IGdjaGFyICogdW51c2VkKQotewotICBjb25zdCBnY2hhciAqb3JpZ2luID0gImh0dHA6Ly9tdXNpY2JyYWluei5vcmciOwotICBnY2hhciAqaWRfc3RyID0gTlVMTDsKLQotICBpZiAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKGxpc3QsIHRhZywgMCwgJmlkX3N0cikgJiYgaWRfc3RyKSB7Ci0gICAgSUQzdjI6OlVuaXF1ZUZpbGVJZGVudGlmaWVyRnJhbWUgKiBmcmFtZTsKLQotICAgIEdTVF9MT0cgKCJBZGRpbmcgJXMgKCVzKTogJXMiLCB0YWcsIG9yaWdpbiwgaWRfc3RyKTsKLSAgICBmcmFtZSA9IG5ldyBJRDN2Mjo6VW5pcXVlRmlsZUlkZW50aWZpZXJGcmFtZSAob3JpZ2luLCBpZF9zdHIpOwotICAgIGlkM3YydGFnLT5hZGRGcmFtZSAoZnJhbWUpOwotICAgIGdfZnJlZSAoaWRfc3RyKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYWRkX211c2ljYnJhaW56X3RhZyAoSUQzdjI6OlRhZyAqIGlkM3YydGFnLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgbnVtX3RhZ3MsIGNvbnN0IGdjaGFyICogZGF0YSkKLXsKLSAgc3RhdGljIGNvbnN0IHN0cnVjdAotICB7Ci0gICAgY29uc3QgZ2NoYXIgZ3N0X3RhZ1syOF07Ci0gICAgY29uc3QgZ2NoYXIgc3BlY19pZFsyOF07Ci0gICAgY29uc3QgZ2NoYXIgcmVhbHdvcmxkX2lkWzI4XTsKLSAgfSBtYl9pZHNbXSA9IHsKLSAgICB7Ci0gICAgR1NUX1RBR19NVVNJQ0JSQUlOWl9BUlRJU1RJRCwgIk11c2ljQnJhaW56IEFydGlzdCBJZCIsCi0gICAgICAgICAgIm11c2ljYnJhaW56X2FydGlzdGlkIn0sIHsKLSAgICBHU1RfVEFHX01VU0lDQlJBSU5aX0FMQlVNSUQsICJNdXNpY0JyYWlueiBBbGJ1bSBJZCIsICJtdXNpY2JyYWluel9hbGJ1bWlkIn0sIHsKLSAgICBHU1RfVEFHX01VU0lDQlJBSU5aX0FMQlVNQVJUSVNUSUQsICJNdXNpY0JyYWlueiBBbGJ1bSBBcnRpc3QgSWQiLAotICAgICAgICAgICJtdXNpY2JyYWluel9hbGJ1bWFydGlzdGlkIn0sIHsKLSAgICBHU1RfVEFHX01VU0lDQlJBSU5aX1RSTUlELCAiTXVzaWNCcmFpbnogVFJNIElkIiwgIm11c2ljYnJhaW56X3RybWlkIn0sIHsKLSAgICBHU1RfVEFHX0NEREFfTVVTSUNCUkFJTlpfRElTQ0lELCAiTXVzaWNCcmFpbnogRGlzY0lEIiwKLSAgICAgICAgICAibXVzaWNicmFpbnpfZGlzY2lkIn0sIHsKLSAgICAgIC8qIHRoZSBmb2xsb3dpbmcgb25lIGlzIG1vcmUgb3IgbGVzcyBtYWRlIHVwLCB0aGVyZSBzZWVtcyB0byBiZSBsaXR0bGUKLSAgICAgICAqIGV2aWRlbmNlIHRoYXQgYW55IHBvcHVsYXIgYXBwbGljYXRpb24gaXMgYWN0dWFsbHkgcHV0dGluZyB0aGlzIGluZm8KLSAgICAgICAqIGludG8gVFhYWCBmcmFtZXM7IHRoZSBmaXJzdCBvbmUgY29tZXMgZnJvbSBhIG11c2ljYnJhaW56IHdpa2kgJ3Byb3Bvc2VkCi0gICAgICAgKiB0YWdzJyBwYWdlLCB0aGUgc2Vjb25kIG9uZSBpcyBhbmFsb2d1ZSB0byB0aGUgdm9yYmlzL2FwZS9mbGFjIHRhZy4gKi8KLSAgICBHU1RfVEFHX0NEREFfQ0REQl9ESVNDSUQsICJDRERCIERpc2NJRCIsICJkaXNjaWQifQotICB9OwotICBndWludCBpLCBpZHg7Ci0KLSAgaWR4ID0gKGd1aW50OCkgZGF0YVswXTsKLSAgZ19hc3NlcnQgKGlkeCA8IEdfTl9FTEVNRU5UUyAobWJfaWRzKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV90YWdzOyArK2kpIHsKLSAgICBJRDN2Mjo6VXNlclRleHRJZGVudGlmaWNhdGlvbkZyYW1lICogZnJhbWU7Ci0gICAgZ2NoYXIgKmlkX3N0cjsKLQotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCAwLCAmaWRfc3RyKSAmJiBpZF9zdHIpIHsKLSAgICAgIEdTVF9ERUJVRyAoIlNldHRpbmcgJyVzJyB0byAnJXMnIiwgbWJfaWRzW2lkeF0uc3BlY19pZCwgaWRfc3RyKTsKLQotICAgICAgLyogYWRkIHR3byBmcmFtZXMsIG9uZSB3aXRoIHRoZSBJRCB0aGUgbXVzaWNicmFpbnoub3JnIHNwZWMgbWVudGlvbnMKLSAgICAgICAqIGFuZCBvbmUgd2l0aCB0aGUgSUQgdGhhdCBhcHBsaWNhdGlvbnMgdXNlIGluIHRoZSByZWFsIHdvcmxkICovCi0gICAgICBmcmFtZSA9IG5ldyBJRDN2Mjo6VXNlclRleHRJZGVudGlmaWNhdGlvbkZyYW1lIChTdHJpbmc6OkxhdGluMSk7Ci0gICAgICBpZDN2MnRhZy0+YWRkRnJhbWUgKGZyYW1lKTsKLSAgICAgIGZyYW1lLT5zZXREZXNjcmlwdGlvbiAobWJfaWRzW2lkeF0uc3BlY19pZCk7Ci0gICAgICBmcmFtZS0+c2V0VGV4dCAoaWRfc3RyKTsKLQotICAgICAgZnJhbWUgPSBuZXcgSUQzdjI6OlVzZXJUZXh0SWRlbnRpZmljYXRpb25GcmFtZSAoU3RyaW5nOjpMYXRpbjEpOwotICAgICAgaWQzdjJ0YWctPmFkZEZyYW1lIChmcmFtZSk7Ci0gICAgICBmcmFtZS0+c2V0RGVzY3JpcHRpb24gKG1iX2lkc1tpZHhdLnJlYWx3b3JsZF9pZCk7Ci0gICAgICBmcmFtZS0+c2V0VGV4dCAoaWRfc3RyKTsKLQotICAgICAgZ19mcmVlIChpZF9zdHIpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYWRkX2lkM3YyZnJhbWVfdGFnIChJRDN2Mjo6VGFnICogaWQzdjJ0YWcsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBndWludCBudW1fdGFncywgY29uc3QgZ2NoYXIgKiBmcmFtZV9pZCkKLXsKLSAgSUQzdjI6OkZyYW1lRmFjdG9yeSAqIGZhY3RvcnkgPSBJRDN2Mjo6RnJhbWVGYWN0b3J5OjppbnN0YW5jZSAoKTsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX3RhZ3M7ICsraSkgewotICAgIElEM3YyOjpGcmFtZSAqIGZyYW1lOwotICAgIGNvbnN0IEdWYWx1ZSAqdmFsOwotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIEdzdFNhbXBsZSAqc2FtcGxlOwotCi0gICAgdmFsID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpKTsKLSAgICBzYW1wbGUgPSAoR3N0U2FtcGxlICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWwpOwotCi0gICAgaWYgKHNhbXBsZSAmJiAoYnVmID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzYW1wbGUpKSAmJgotICAgICAgICBnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgICBnaW50IHZlcnNpb24gPSAwOwotCi0gICAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoZ3N0X3NhbXBsZV9nZXRfY2FwcyAoc2FtcGxlKSwgMCk7Ci0gICAgICBpZiAocyAmJiBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJ2ZXJzaW9uIiwgJnZlcnNpb24pICYmIHZlcnNpb24gPiAwKSB7Ci0gICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIEdTVF9ERUJVRyAoIkluamVjdGluZyBJRDN2Mi4ldSBmcmFtZSAldS8ldSBvZiBsZW5ndGggJSIgR19HU0laRV9GT1JNQVQgIiBhbmQgdHlwZSAlIgotICAgICAgICAgICAgR1NUX1BUUl9GT1JNQVQsIHZlcnNpb24sIGksIG51bV90YWdzLCBtYXAuc2l6ZSwgcyk7Ci0KLSAgICAgICAgZnJhbWUgPSBmYWN0b3J5LT5jcmVhdGVGcmFtZSAoQnl0ZVZlY3RvciAoKGNvbnN0IGNoYXIgKikgbWFwLmRhdGEsCi0gICAgICAgICAgICAgICAgbWFwLnNpemUpLCAoVGFnTGliOjp1aW50KSB2ZXJzaW9uKTsKLSAgICAgICAgaWYgKGZyYW1lKQotICAgICAgICAgIGlkM3YydGFnLT5hZGRGcmFtZSAoZnJhbWUpOwotCi0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfaW1hZ2VfdGFnIChJRDN2Mjo6VGFnICogaWQzdjJ0YWcsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBndWludCBudW1fdGFncywgY29uc3QgZ2NoYXIgKiB1bnVzZWQpCi17Ci0gIGd1aW50IG47Ci0KLSAgZm9yIChuID0gMDsgbiA8IG51bV90YWdzOyArK24pIHsKLSAgICBjb25zdCBHVmFsdWUgKnZhbDsKLSAgICBHc3RTYW1wbGUgKnNhbXBsZTsKLSAgICBHc3RCdWZmZXIgKmltYWdlOwotCi0gICAgR1NUX0RFQlVHICgiaW1hZ2UgJXUvJXUiLCBuICsgMSwgbnVtX3RhZ3MpOwotCi0gICAgdmFsID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBuKTsKLSAgICBzYW1wbGUgPSAoR3N0U2FtcGxlICopIGdfdmFsdWVfZ2V0X2JveGVkICh2YWwpOwotCi0gICAgaWYgKEdTVF9JU19TQU1QTEUgKHNhbXBsZSkgJiYgKGltYWdlID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzYW1wbGUpKSAmJgotICAgICAgICBHU1RfSVNfQlVGRkVSIChpbWFnZSkgJiYgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW1hZ2UpID4gMCAmJgotICAgICAgICBnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpICE9IE5VTEwgJiYKLSAgICAgICAgIWdzdF9jYXBzX2lzX2VtcHR5IChnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpKSkgewotICAgICAgY29uc3QgZ2NoYXIgKm1pbWVfdHlwZTsKLSAgICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGdzdF9zYW1wbGVfZ2V0X2NhcHMgKHNhbXBsZSksIDApOwotICAgICAgbWltZV90eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyk7Ci0gICAgICBpZiAobWltZV90eXBlICE9IE5VTEwpIHsKLSAgICAgICAgSUQzdjI6OkF0dGFjaGVkUGljdHVyZUZyYW1lICogZnJhbWU7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpkZXNjID0gTlVMTDsKLSAgICAgICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqaW5mb19zdHJ1Y3Q7Ci0KLSAgICAgICAgaW5mb19zdHJ1Y3QgPSBnc3Rfc2FtcGxlX2dldF9pbmZvIChzYW1wbGUpOwotICAgICAgICBpZiAoIWluZm9fc3RydWN0Ci0gICAgICAgICAgICB8fCAhZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoaW5mb19zdHJ1Y3QsICJHc3RUYWdJbWFnZUluZm8iKSkKLSAgICAgICAgICBpbmZvX3N0cnVjdCA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKHN0cmNtcCAobWltZV90eXBlLCAidGV4dC91cmktbGlzdCIpID09IDApCi0gICAgICAgICAgbWltZV90eXBlID0gIi0tPiI7Ci0KLSAgICAgICAgZnJhbWUgPSBuZXcgSUQzdjI6OkF0dGFjaGVkUGljdHVyZUZyYW1lICgpOwotCi0gICAgICAgIGdzdF9idWZmZXJfbWFwIChpbWFnZSwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAgICAgICBHU1RfREVCVUcgKCJBdHRhY2hpbmcgcGljdHVyZSBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIGFuZCBtaW1lIHR5cGUgJXMiLAotICAgICAgICAgICAgbWFwLnNpemUsIG1pbWVfdHlwZSk7Ci0KLSAgICAgICAgaWQzdjJ0YWctPmFkZEZyYW1lIChmcmFtZSk7Ci0gICAgICAgIGZyYW1lLT5zZXRQaWN0dXJlIChCeXRlVmVjdG9yICgoY29uc3QgY2hhciAqKSBtYXAuZGF0YSwgbWFwLnNpemUpKTsKLSAgICAgICAgZnJhbWUtPnNldFRleHRFbmNvZGluZyAoU3RyaW5nOjpVVEY4KTsKLSAgICAgICAgZnJhbWUtPnNldE1pbWVUeXBlIChtaW1lX3R5cGUpOwotCi0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGltYWdlLCAmbWFwKTsKLQotICAgICAgICBpZiAoaW5mb19zdHJ1Y3QpCi0gICAgICAgICAgZGVzYyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoaW5mb19zdHJ1Y3QsICJpbWFnZS1kZXNjcmlwdGlvbiIpOwotCi0gICAgICAgIGZyYW1lLT5zZXREZXNjcmlwdGlvbiAoKGRlc2MpID8gZGVzYyA6ICIiKTsKLQotICAgICAgICBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfUFJFVklFV19JTUFHRSkgPT0gMCkgewotICAgICAgICAgIGZyYW1lLT5zZXRUeXBlIChJRDN2Mjo6QXR0YWNoZWRQaWN0dXJlRnJhbWU6OkZpbGVJY29uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpbnQgaW1hZ2VfdHlwZSA9IElEM3YyOjpBdHRhY2hlZFBpY3R1cmVGcmFtZTo6T3RoZXI7Ci0KLSAgICAgICAgICBpZiAoaW5mb19zdHJ1Y3QpIHsKLSAgICAgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldCAoaW5mb19zdHJ1Y3QsICJpbWFnZS10eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgR1NUX1RZUEVfVEFHX0lNQUdFX1RZUEUsICZpbWFnZV90eXBlLCBOVUxMKSkgewotICAgICAgICAgICAgICBpZiAoaW1hZ2VfdHlwZSA+IDAgJiYgaW1hZ2VfdHlwZSA8PSAxOCkgewotICAgICAgICAgICAgICAgIGltYWdlX3R5cGUgKz0gMjsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbWFnZV90eXBlID0gSUQzdjI6OkF0dGFjaGVkUGljdHVyZUZyYW1lOjpPdGhlcjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGZyYW1lLT5zZXRUeXBlICgoVGFnTGliOjpJRDN2Mjo6QXR0YWNoZWRQaWN0dXJlRnJhbWU6OlR5cGUpIGltYWdlX3R5cGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiTlVMTCBpbWFnZSBvciBubyBjYXBzIG9uIGltYWdlIHNhbXBsZSAoJXAsIGNhcHM9JSIKLSAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCAiKSIsIHNhbXBsZSwKLSAgICAgICAgICAoc2FtcGxlKSA/IGdzdF9zYW1wbGVfZ2V0X2NhcHMgKHNhbXBsZSkgOiBOVUxMKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWFkZF9jb21tZW50X3RhZyAoSUQzdjI6OlRhZyAqIGlkM3YydGFnLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgbnVtX3RhZ3MsIGNvbnN0IGdjaGFyICogdW51c2VkKQotewotICBUYWdMaWI6OlN0cmluZ0xpc3Qgc3RyaW5nX2xpc3Q7Ci0gIGd1aW50IG47Ci0KLSAgR1NUX0xPRyAoIkFkZGluZyBjb21tZW50IGZyYW1lcyIpOwotICBmb3IgKG4gPSAwOyBuIDwgbnVtX3RhZ3M7ICsrbikgewotICAgIGdjaGFyICpzID0gTlVMTDsKLQotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZ19pbmRleCAobGlzdCwgdGFnLCBuLCAmcykgJiYgcyAhPSBOVUxMKSB7Ci0gICAgICBJRDN2Mjo6Q29tbWVudHNGcmFtZSAqIGY7Ci0gICAgICBnY2hhciAqZGVzYyA9IE5VTEwsICp2YWwgPSBOVUxMLCAqbGFuZyA9IE5VTEw7Ci0KLSAgICAgIGYgPSBuZXcgSUQzdjI6OkNvbW1lbnRzRnJhbWUgKFN0cmluZzo6VVRGOCk7Ci0KLSAgICAgIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19DT01NRU5UKSA9PSAwIHx8Ci0gICAgICAgICAgIWdzdF90YWdfcGFyc2VfZXh0ZW5kZWRfY29tbWVudCAocywgJmRlc2MsICZsYW5nLCAmdmFsLCBUUlVFKSkgewotICAgICAgICAvKiBjcmVhdGUgZHVtbXkgZGVzY3JpcHRpb24gdG8gYWxsb3cgZm9yIG11bHRpcGxlIGNvbW1lbnQgZnJhbWVzCi0gICAgICAgICAqICh0YWdsaWIgd2lsbCBkcm9wIGNvbW1lbnQgZnJhbWVzIGlmIGRlc2NyaXB0aW9ucyBhcmUgbm90IHVuaXF1ZSkgKi8KLSAgICAgICAgZGVzYyA9IGdfc3RyZHVwX3ByaW50ZiAoImMldSIsIG4pOwotICAgICAgICB2YWwgPSBnX3N0cmR1cCAocyk7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9MT0cgKCIlc1sldV0gPSAnJXMnICglc3wlc3wlcykiLCB0YWcsIG4sIHMsIEdTVF9TVFJfTlVMTCAoZGVzYyksCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChsYW5nKSwgR1NUX1NUUl9OVUxMICh2YWwpKTsKLQotICAgICAgZi0+c2V0RGVzY3JpcHRpb24gKGRlc2MpOwotICAgICAgZi0+c2V0VGV4dCAodmFsKTsKLSAgICAgIGlmIChsYW5nKSB7Ci0gICAgICAgIGYtPnNldExhbmd1YWdlIChsYW5nKTsKLSAgICAgIH0KLQotICAgICAgZ19mcmVlIChsYW5nKTsKLSAgICAgIGdfZnJlZSAoZGVzYyk7Ci0gICAgICBnX2ZyZWUgKHZhbCk7Ci0KLSAgICAgIGlkM3YydGFnLT5hZGRGcmFtZSAoZik7Ci0gICAgfQotICAgIGdfZnJlZSAocyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWFkZF90ZXh0X3RhZyAoSUQzdjI6OlRhZyAqIGlkM3YydGFnLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgbnVtX3RhZ3MsIGNvbnN0IGdjaGFyICogZnJhbWVfaWQpCi17Ci0gIElEM3YyOjpUZXh0SWRlbnRpZmljYXRpb25GcmFtZSAqIGY7Ci0gIFRhZ0xpYjo6U3RyaW5nTGlzdCBzdHJpbmdfbGlzdDsKLSAgZ3VpbnQgbjsKLQotICBHU1RfTE9HICgiQWRkaW5nICclcycgZnJhbWUiLCBmcmFtZV9pZCk7Ci0gIGZvciAobiA9IDA7IG4gPCBudW1fdGFnczsgKytuKSB7Ci0gICAgZ2NoYXIgKnMgPSBOVUxMOwotCi0gICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIG4sICZzKSAmJiBzICE9IE5VTEwpIHsKLSAgICAgIEdTVF9MT0cgKCIlczogJXNbJXVdID0gJyVzJyIsIGZyYW1lX2lkLCB0YWcsIG4sIHMpOwotICAgICAgc3RyaW5nX2xpc3QuYXBwZW5kIChTdHJpbmcgKHMsIFN0cmluZzo6VVRGOCkpOwotICAgICAgZ19mcmVlIChzKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXN0cmluZ19saXN0LmlzRW1wdHkgKCkpIHsKLSAgICBmID0gbmV3IElEM3YyOjpUZXh0SWRlbnRpZmljYXRpb25GcmFtZSAoZnJhbWVfaWQsIFN0cmluZzo6VVRGOCk7Ci0gICAgaWQzdjJ0YWctPmFkZEZyYW1lIChmKTsKLSAgICBmLT5zZXRUZXh0IChzdHJpbmdfbGlzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJFbXB0eSBsaXN0IGZvciB0YWcgJXMsIHNraXBwaW5nIiwgdGFnKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYWRkX3VyaV90YWcgKElEM3YyOjpUYWcgKiBpZDN2MnRhZywgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50IG51bV90YWdzLCBjb25zdCBnY2hhciAqIGZyYW1lX2lkKQotewotICBnY2hhciAqdXJsID0gTlVMTDsKLQotICBnX2Fzc2VydCAoZnJhbWVfaWQgIT0gTlVMTCk7Ci0KLSAgLyogVVJJIHRhZ3MgYXJlIGxpbWl0ZWQgdG8gb25lIG9mIGVhY2ggcGVyIHRhZ2xpc3QgKi8KLSAgaWYgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IChsaXN0LCB0YWcsIDAsICZ1cmwpICYmIHVybCAhPSBOVUxMKSB7Ci0gICAgZ3VpbnQgdXJsX2xlbjsKLQotICAgIHVybF9sZW4gPSBzdHJsZW4gKHVybCk7Ci0gICAgaWYgKHVybF9sZW4gPiAwICYmIGdzdF91cmlfaXNfdmFsaWQgKHVybCkpIHsKLSAgICAgIElEM3YyOjpGcmFtZUZhY3RvcnkgKiBmYWN0b3J5ID0gSUQzdjI6OkZyYW1lRmFjdG9yeTo6aW5zdGFuY2UgKCk7Ci0gICAgICBJRDN2Mjo6RnJhbWUgKiBmcmFtZTsKLSAgICAgIGNoYXIgKmRhdGE7Ci0KLSAgICAgIGRhdGEgPSBnX25ldzAgKGNoYXIsIDEwICsgdXJsX2xlbik7Ci0KLSAgICAgIG1lbWNweSAoZGF0YSwgZnJhbWVfaWQsIDQpOwotICAgICAgbWVtY3B5IChkYXRhICsgNCwgSUQzdjI6OlN5bmNoRGF0YTo6ZnJvbVVJbnQgKHVybF9sZW4pLmRhdGEgKCksIDQpOwotICAgICAgbWVtY3B5IChkYXRhICsgMTAsIHVybCwgdXJsX2xlbik7Ci0gICAgICBCeXRlVmVjdG9yIGJ5dGVzIChkYXRhLCAxMCArIHVybF9sZW4pOwotCi0gICAgICBnX2ZyZWUgKGRhdGEpOwotCi0gICAgICBmcmFtZSA9IGZhY3RvcnktPmNyZWF0ZUZyYW1lIChieXRlcywgKFRhZ0xpYjo6dWludCkgNCk7Ci0gICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWQzdjJ0YWctPmFkZEZyYW1lIChmcmFtZSk7Ci0KLSAgICAgICAgR1NUX0xPRyAoIiVzOiAlcyA9ICclcyciLCBmcmFtZV9pZCwgdGFnLCB1cmwpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklORyAoIlRhZyAlcyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgVVJJICglcykiLCB0YWcsIHVybCk7Ci0gICAgfQotCi0gICAgZ19mcmVlICh1cmwpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfcmVsYXRpdmVfdm9sdW1lX3RhZyAoSUQzdjI6OlRhZyAqIGlkM3YydGFnLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgbnVtX3RhZ3MsIGNvbnN0IGdjaGFyICogZnJhbWVfaWQpCi17Ci0gIGNvbnN0IGNoYXIgKmdhaW5fdGFnX25hbWU7Ci0gIGNvbnN0IGNoYXIgKnBlYWtfdGFnX25hbWU7Ci0gIGdkb3VibGUgcGVha192YWw7Ci0gIGdkb3VibGUgZ2Fpbl92YWw7Ci0gIElEM3YyOjpSZWxhdGl2ZVZvbHVtZUZyYW1lICogZnJhbWU7Ci0KLSAgZnJhbWUgPSBuZXcgSUQzdjI6OlJlbGF0aXZlVm9sdW1lRnJhbWUgKCk7Ci0KLSAgLyogZmlndXJlIG91dCB0YWcgbmFtZXMgYW5kIHRoZSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgdG8gdXNlICovCi0gIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19UUkFDS19QRUFLKSA9PSAwIHx8Ci0gICAgICBzdHJjbXAgKHRhZywgR1NUX1RBR19UUkFDS19HQUlOKSA9PSAwKSB7Ci0gICAgZ2Fpbl90YWdfbmFtZSA9IEdTVF9UQUdfVFJBQ0tfR0FJTjsKLSAgICBwZWFrX3RhZ19uYW1lID0gR1NUX1RBR19UUkFDS19QRUFLOwotICAgIGZyYW1lLT5zZXRJZGVudGlmaWNhdGlvbiAoInRyYWNrIik7Ci0gICAgR1NUX0RFQlVHICgiYWRkaW5nIHRyYWNrIHJlbGF0aXZlLXZvbHVtZSBmcmFtZSIpOwotICB9IGVsc2UgewotICAgIGdhaW5fdGFnX25hbWUgPSBHU1RfVEFHX0FMQlVNX0dBSU47Ci0gICAgcGVha190YWdfbmFtZSA9IEdTVF9UQUdfQUxCVU1fUEVBSzsKLSAgICBmcmFtZS0+c2V0SWRlbnRpZmljYXRpb24gKCJhbGJ1bSIpOwotICAgIEdTVF9ERUJVRyAoImFkZGluZyBhbGJ1bSByZWxhdGl2ZS12b2x1bWUgZnJhbWUiKTsKLSAgfQotCi0gIC8qIGZpbmQgdGhlIHZhbHVlIGZvciB0aGUgcGFpcmVkIHRhZyAoZ2FpbiwgaWYgdGhpcyBpcyBwZWFrLCBhbmQKLSAgICogdmljZSB2ZXJzYSkuICBpZiBib3RoIHRhZ3MgZXhpc3QsIG9ubHkgd3JpdGUgdGhlIGZyYW1lIHdoZW4KLSAgICogd2UncmUgcHJvY2Vzc2luZyB0aGUgcGVhayB0YWcuCi0gICAqLwotICBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfVFJBQ0tfUEVBSykgPT0gMCB8fAotICAgICAgc3RyY21wICh0YWcsIEdTVF9UQUdfQUxCVU1fUEVBSykgPT0gMCkgewotICAgIElEM3YyOjpSZWxhdGl2ZVZvbHVtZUZyYW1lOjpQZWFrVm9sdW1lIGVuY29kZWRfcGVhazsKLSAgICBzaG9ydCBwZWFrX2ludDsKLQotICAgIGdzdF90YWdfbGlzdF9nZXRfZG91YmxlIChsaXN0LCB0YWcsICZwZWFrX3ZhbCk7Ci0KLSAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAobGlzdCwgZ2Fpbl90YWdfbmFtZSkgPiAwKSB7Ci0gICAgICBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAobGlzdCwgZ2Fpbl90YWdfbmFtZSwgJmdhaW5fdmFsKTsKLSAgICAgIEdTVF9ERUJVRyAoInNldHRpbmcgdm9sdW1lIGFkanVzdG1lbnQgJWciLCBnYWluX3ZhbCk7Ci0gICAgICBmcmFtZS0+c2V0Vm9sdW1lQWRqdXN0bWVudCAoZ2Fpbl92YWwpOwotICAgIH0KLQotICAgIC8qIGNvcHlpbmcgbXV0YWdlbjogYWx3YXlzIHdyaXRlIGFzIDE2IGJpdHMgZm9yIHNhbml0eS4gKi8KLSAgICBwZWFrX2ludCA9IChzaG9ydCkocGVha192YWwgKiBHX01BWFNIT1JUKTsKLSAgICBlbmNvZGVkX3BlYWsuYml0c1JlcHJlc2VudGluZ1BlYWsgPSAxNjsKLSAgICBlbmNvZGVkX3BlYWsucGVha1ZvbHVtZSA9IEJ5dGVWZWN0b3I6OmZyb21TaG9ydChwZWFrX2ludCwgdHJ1ZSk7Ci0gICAgR1NUX0RFQlVHICgic2V0dGluZyBwZWFrIHZhbHVlICVnIiwgcGVha192YWwpOwotICAgIGZyYW1lLT5zZXRQZWFrVm9sdW1lKGVuY29kZWRfcGVhayk7Ci0KLSAgfSBlbHNlIHsKLSAgICBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAobGlzdCwgdGFnLCAmZ2Fpbl92YWwpOwotICAgIEdTVF9ERUJVRyAoInNldHRpbmcgdm9sdW1lIGFkanVzdG1lbnQgJWciLCBnYWluX3ZhbCk7Ci0gICAgZnJhbWUtPnNldFZvbHVtZUFkanVzdG1lbnQgKGdhaW5fdmFsKTsKLQotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChsaXN0LCBwZWFrX3RhZ19uYW1lKSAhPSAwKSB7Ci0gICAgICBHU1RfREVCVUcgKCJib3RoIGdhaW4gYW5kIHBlYWsgdGFncyBleGlzdCwgbm90IGFkZGluZyBmcmFtZSB0aGlzIHRpbWUgYXJvdW5kIik7Ci0gICAgICBkZWxldGUgZnJhbWU7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgaWQzdjJ0YWctPmFkZEZyYW1lIChmcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfYnBtX3RhZyAoSUQzdjI6OlRhZyAqIGlkM3YydGFnLCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBjb25zdCBnY2hhciAqIHRhZywgZ3VpbnQgbnVtX3RhZ3MsIGNvbnN0IGdjaGFyICogZnJhbWVfaWQpCi17Ci0gIGdkb3VibGUgYnBtOwotCi0gIGlmIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZV9pbmRleCAobGlzdCwgdGFnLCAwLCAmYnBtKSkgewotICAgIElEM3YyOjpUZXh0SWRlbnRpZmljYXRpb25GcmFtZSAqIGZyYW1lOwotICAgIGdjaGFyICp0YWdfc3RyOwotCi0gICAgdGFnX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiV1IiwgKGd1aW50KWJwbSk7Ci0KLSAgICBHU1RfREVCVUcgKCJTZXR0aW5nICVzIHRvICVzIiwgdGFnLCB0YWdfc3RyKTsKLSAgICBmcmFtZSA9IG5ldyBJRDN2Mjo6VGV4dElkZW50aWZpY2F0aW9uRnJhbWUgKCJUQlBNIiwgU3RyaW5nOjpVVEY4KTsKLSAgICBpZDN2MnRhZy0+YWRkRnJhbWUgKGZyYW1lKTsKLSAgICBmcmFtZS0+c2V0VGV4dCAodGFnX3N0cik7Ci0gICAgZ19mcmVlICh0YWdfc3RyKTsKLSAgfQotfQotCi0vKiBpZDNkZW11eCBwcm9kdWNlcyB0aGVzZSBmb3IgZnJhbWVzIGl0IGNhbm5vdCBwYXJzZSAqLwotI2RlZmluZSBHU1RfSUQzX0RFTVVYX1RBR19JRDNWMl9GUkFNRSAicHJpdmF0ZS1pZDN2Mi1mcmFtZSIKLQotc3RhdGljIGNvbnN0IHN0cnVjdAotewotICBjb25zdCBnY2hhciAqZ3N0X3RhZzsKLSAgY29uc3QgR3N0SWQzdjJNdXhBZGRUYWdGdW5jIGZ1bmM7Ci0gIGNvbnN0IGdjaGFyIGRhdGFbNV07Ci19IGFkZF9mdW5jc1tdID0gewotICB7Ci0gIEdTVF9UQUdfQVJUSVNULCBhZGRfdGV4dF90YWcsICJUUEUxIn0sIHsKLSAgR1NUX1RBR19BTEJVTV9BUlRJU1QsIGFkZF90ZXh0X3RhZywgIlRQRTIifSwgewotICBHU1RfVEFHX1RJVExFLCBhZGRfdGV4dF90YWcsICJUSVQyIn0sIHsKLSAgR1NUX1RBR19BTEJVTSwgYWRkX3RleHRfdGFnLCAiVEFMQiJ9LCB7Ci0gIEdTVF9UQUdfQ09QWVJJR0hULCBhZGRfdGV4dF90YWcsICJUQ09QIn0sIHsKLSAgR1NUX1RBR19DT01QT1NFUiwgYWRkX3RleHRfdGFnLCAiVENPTSJ9LCB7Ci0gIEdTVF9UQUdfR0VOUkUsIGFkZF90ZXh0X3RhZywgIlRDT04ifSwgewotICBHU1RfVEFHX0NPTU1FTlQsIGFkZF9jb21tZW50X3RhZywgIiJ9LCB7Ci0gIEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCwgYWRkX2NvbW1lbnRfdGFnLCAiIn0sIHsKLSAgR1NUX1RBR19EQVRFLCBhZGRfZGF0ZV90YWcsICIifSwgewotICBHU1RfVEFHX0lNQUdFLCBhZGRfaW1hZ2VfdGFnLCAiIn0sIHsKLSAgR1NUX1RBR19QUkVWSUVXX0lNQUdFLCBhZGRfaW1hZ2VfdGFnLCAiIn0sIHsKLSAgR1NUX0lEM19ERU1VWF9UQUdfSUQzVjJfRlJBTUUsIGFkZF9pZDN2MmZyYW1lX3RhZywgIiJ9LCB7Ci0gIEdTVF9UQUdfTVVTSUNCUkFJTlpfQVJUSVNUSUQsIGFkZF9tdXNpY2JyYWluel90YWcsICJcMDAwIn0sIHsKLSAgR1NUX1RBR19NVVNJQ0JSQUlOWl9BTEJVTUlELCBhZGRfbXVzaWNicmFpbnpfdGFnLCAiXDAwMSJ9LCB7Ci0gIEdTVF9UQUdfTVVTSUNCUkFJTlpfQUxCVU1BUlRJU1RJRCwgYWRkX211c2ljYnJhaW56X3RhZywgIlwwMDIifSwgewotICBHU1RfVEFHX01VU0lDQlJBSU5aX1RSTUlELCBhZGRfbXVzaWNicmFpbnpfdGFnLCAiXDAwMyJ9LCB7Ci0gIEdTVF9UQUdfQ0REQV9NVVNJQ0JSQUlOWl9ESVNDSUQsIGFkZF9tdXNpY2JyYWluel90YWcsICJcMDA0In0sIHsKLSAgR1NUX1RBR19DRERBX0NEREJfRElTQ0lELCBhZGRfbXVzaWNicmFpbnpfdGFnLCAiXDAwNSJ9LCB7Ci0gIEdTVF9UQUdfTVVTSUNCUkFJTlpfVFJBQ0tJRCwgYWRkX3VuaXF1ZV9maWxlX2lkX3RhZywgIiJ9LCB7Ci0gIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FLCBhZGRfdGV4dF90YWcsICJUU09QIn0sIHsKLSAgR1NUX1RBR19BTEJVTV9TT1JUTkFNRSwgYWRkX3RleHRfdGFnLCAiVFNPQSJ9LCB7Ci0gIEdTVF9UQUdfVElUTEVfU09SVE5BTUUsIGFkZF90ZXh0X3RhZywgIlRTT1QifSwgewotICBHU1RfVEFHX1RSQUNLX05VTUJFUiwgYWRkX2NvdW50X29yX251bV90YWcsICJUUkNLIn0sIHsKLSAgR1NUX1RBR19UUkFDS19DT1VOVCwgYWRkX2NvdW50X29yX251bV90YWcsICJUUkNLIn0sIHsKLSAgR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSLCBhZGRfY291bnRfb3JfbnVtX3RhZywgIlRQT1MifSwgewotICBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCwgYWRkX2NvdW50X29yX251bV90YWcsICJUUE9TIn0sIHsKLSAgR1NUX1RBR19FTkNPREVSLCBhZGRfZW5jb2Rlcl90YWcsICIifSwgewotICBHU1RfVEFHX0VOQ09ERVJfVkVSU0lPTiwgYWRkX2VuY29kZXJfdGFnLCAiIn0sIHsKLSAgR1NUX1RBR19DT1BZUklHSFRfVVJJLCBhZGRfdXJpX3RhZywgIldDT1AifSwgewotICBHU1RfVEFHX0xJQ0VOU0VfVVJJLCBhZGRfdXJpX3RhZywgIldDT1AifSwgewotICBHU1RfVEFHX1RSQUNLX1BFQUssIGFkZF9yZWxhdGl2ZV92b2x1bWVfdGFnLCAiIn0sIHsKLSAgR1NUX1RBR19UUkFDS19HQUlOLCBhZGRfcmVsYXRpdmVfdm9sdW1lX3RhZywgIiJ9LCB7Ci0gIEdTVF9UQUdfQUxCVU1fUEVBSywgYWRkX3JlbGF0aXZlX3ZvbHVtZV90YWcsICIifSwgewotICBHU1RfVEFHX0FMQlVNX0dBSU4sIGFkZF9yZWxhdGl2ZV92b2x1bWVfdGFnLCAiIn0sIHsKLSAgR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFLCBhZGRfYnBtX3RhZywgIiJ9Ci19OwotCi0KLXN0YXRpYyB2b2lkCi1mb3JlYWNoX2FkZF90YWcgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBjb25zdCBnY2hhciAqIHRhZywgZ3BvaW50ZXIgdXNlcmRhdGEpCi17Ci0gIElEM3YyOjpUYWcgKiBpZDN2MnRhZyA9IChJRDN2Mjo6VGFnICopIHVzZXJkYXRhOwotICBUYWdMaWI6OlN0cmluZ0xpc3Qgc3RyaW5nX2xpc3Q7Ci0gIGd1aW50IG51bV90YWdzLCBpOwotCi0gIG51bV90YWdzID0gZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAobGlzdCwgdGFnKTsKLQotICBHU1RfTE9HICgiUHJvY2Vzc2luZyB0YWcgJXMgKG51bT0ldSkiLCB0YWcsIG51bV90YWdzKTsKLQotICBpZiAobnVtX3RhZ3MgPiAxICYmIGdzdF90YWdfaXNfZml4ZWQgKHRhZykpIHsKLSAgICBHU1RfV0FSTklORyAoIk11bHRpcGxlIG9jY3VyZW5jZXMgb2YgZml4ZWQgdGFnICclcycsIGlnbm9yaW5nIHNvbWUiLCB0YWcpOwotICAgIG51bV90YWdzID0gMTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGFkZF9mdW5jcyk7ICsraSkgewotICAgIGlmIChzdHJjbXAgKGFkZF9mdW5jc1tpXS5nc3RfdGFnLCB0YWcpID09IDApIHsKLSAgICAgIGFkZF9mdW5jc1tpXS5mdW5jIChpZDN2MnRhZywgbGlzdCwgdGFnLCBudW1fdGFncywgYWRkX2Z1bmNzW2ldLmRhdGEpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGkgPT0gR19OX0VMRU1FTlRTIChhZGRfZnVuY3MpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJVbnN1cHBvcnRlZCB0YWcgJyVzJyAtIG5vdCB3cml0dGVuIiwgdGFnKTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9pZDN2Ml9tdXhfcmVuZGVyX3RhZyAoR3N0VGFnTXV4ICogbXV4LCBjb25zdCBHc3RUYWdMaXN0ICogdGFnbGlzdCkKLXsKLSAgSUQzdjI6OlRhZyBpZDN2MnRhZzsKLSAgQnl0ZVZlY3RvciByZW5kZXJlZF90YWc7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludCB0YWdfc2l6ZTsKLQotICAvKiB3cml0ZSBhbGwgc3RyaW5ncyBhcyBVVEYtOCBieSBkZWZhdWx0ICovCi0gIFRhZ0xpYjo6SUQzdjI6OkZyYW1lRmFjdG9yeTo6aW5zdGFuY2UgKCktPgotICAgICAgc2V0RGVmYXVsdFRleHRFbmNvZGluZyAoVGFnTGliOjpTdHJpbmc6OlVURjgpOwotCi0gIC8qIFJlbmRlciB0aGUgdGFnICovCi0gIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0YWdsaXN0LCBmb3JlYWNoX2FkZF90YWcsICZpZDN2MnRhZyk7Ci0KLSNpZiAwCi0gIC8qIERvIHdlIHdhbnQgdG8gYWRkIG91ciBvd24gc2lnbmF0dXJlIHRvIHRoZSB0YWcgc29tZXdoZXJlPyAqLwotICB7Ci0gICAgZ2NoYXIgKnRhZ19wcm9kdWNlcl9zdHI7Ci0KLSAgICB0YWdfcHJvZHVjZXJfc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiKEdTdHJlYW1lciBpZDN2Mm11eCAlcywgdXNpbmcgIgotICAgICAgICAidGFnbGliICV1LiV1KSIsIFZFUlNJT04sIFRBR0xJQl9NQUpPUl9WRVJTSU9OLCBUQUdMSUJfTUlOT1JfVkVSU0lPTik7Ci0gICAgYWRkX29uZV90eHh4X3RhZyAoaWQzdjJ0YWcsICJ0YWdfZW5jb2RlciIsIHRhZ19wcm9kdWNlcl9zdHIpOwotICAgIGdfZnJlZSAodGFnX3Byb2R1Y2VyX3N0cik7Ci0gIH0KLSNlbmRpZgotCi0gIHJlbmRlcmVkX3RhZyA9IGlkM3YydGFnLnJlbmRlciAoKTsKLSAgdGFnX3NpemUgPSByZW5kZXJlZF90YWcuc2l6ZSAoKTsKLQotICBHU1RfTE9HX09CSkVDVCAobXV4LCAidGFnIHNpemUgPSAlZCBieXRlcyIsIHRhZ19zaXplKTsKLQotICAvKiBDcmVhdGUgYnVmZmVyIHdpdGggdGFnICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAodGFnX3NpemUpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgcmVuZGVyZWRfdGFnLmRhdGEgKCksIHRhZ19zaXplKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9pZDN2Ml9tdXhfcmVuZGVyX2VuZF90YWcgKEdzdFRhZ011eCAqIG11eCwgY29uc3QgR3N0VGFnTGlzdCAqIHRhZ2xpc3QpCi17Ci0gIHJldHVybiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5oIGIvZXh0L3RhZ2xpYi9nc3RpZDN2Mm11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmM3NDhmLi4wMDAwMDAwCi0tLSBhL2V4dC90YWdsaWIvZ3N0aWQzdjJtdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIEdTdHJlYW1lciB0YWdsaWItYmFzZWQgSUQzdjIgbXV4ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RvcGhlIEZlcmdlYXUgPHRldWZAZ25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBHU1RfSUQzVjJfTVVYX0gKLSNkZWZpbmUgR1NUX0lEM1YyX01VWF9ICi0KLSNpbmNsdWRlIDxnc3QvdGFnL2dzdHRhZ211eC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJZDN2Mk11eCBHc3RJZDN2Mk11eDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RJZDN2Mk11eENsYXNzIEdzdElkM3YyTXV4Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0SWQzdjJNdXggewotICBHc3RUYWdNdXggIHRhZ211eDsKLX07Ci0KLXN0cnVjdCBfR3N0SWQzdjJNdXhDbGFzcyB7Ci0gIEdzdFRhZ011eENsYXNzICB0YWdtdXhfY2xhc3M7Ci19OwotCi0jZGVmaW5lIEdTVF9UWVBFX0lEM1YyX01VWCBcCi0gIChnc3RfaWQzdjJfbXV4X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JRDNWMl9NVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9JRDNWMl9NVVgsR3N0SWQzdjJNdXgpKQotI2RlZmluZSBHU1RfSUQzVjJfTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0lEM1YyX01VWCxHc3RJZDN2Mk11eENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lEM1YyX01VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0lEM1YyX01VWCkpCi0jZGVmaW5lIEdTVF9JU19JRDNWMl9NVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSUQzVjJfTVVYKSkKLQotR1R5cGUgZ3N0X2lkM3YyX211eF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBHU1RfSUQzVjJfTVVYX0ggKi8KZGlmZiAtLWdpdCBhL2V4dC90YWdsaWIvZ3N0dGFnbGlicGx1Z2luLmMgYi9leHQvdGFnbGliL2dzdHRhZ2xpYnBsdWdpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2U2YmY2Li4wMDAwMDAwCi0tLSBhL2V4dC90YWdsaWIvZ3N0dGFnbGlicGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdGFnbGliLWJhc2VkIG11eGVyIGJhc2UgY2xhc3MKLSAqIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RvcGhlIEZlcmdlYXUgIDx0ZXVmQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLQotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YXBldjJtdXguaCIKLSNpbmNsdWRlICJnc3RpZDN2Mm11eC5oIgotCi0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJpZDN2Mm11eCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfSUQzVjJfTVVYKSB8fAotICAgICAgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhcGV2Mm11eCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfQVBFVjJfTVVYKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ3N0X3RhZ19yZWdpc3Rlcl9tdXNpY2JyYWluel90YWdzICgpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgdGFnbGliLAotICAgICJUYWcgd3JpdGluZyBwbHVnLWluIGJhc2VkIG9uIHRhZ2xpYiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2V4dC92cHgvR3N0VlA4RW5jLnBycyBiL2V4dC92cHgvR3N0VlA4RW5jLnBycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxMzk1OS4uMDAwMDAwMAotLS0gYS9leHQvdnB4L0dzdFZQOEVuYy5wcnMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLVtfcHJlc2V0c19dCi12ZXJzaW9uPTAuMTAKLWVsZW1lbnQtbmFtZT1Hc3RWUDhFbmMKLQotW1Byb2ZpbGUgUmVhbHRpbWVdCi1kZWFkbGluZT0xCi1jcHUtdXNlZD00Ci1sYWctaW4tZnJhbWVzPTAKZGlmZiAtLWdpdCBhL2V4dC92cHgvTWFrZWZpbGUuYW0gYi9leHQvdnB4L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDUzZmMwLi4wMDAwMDAwCi0tLSBhL2V4dC92cHgvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBcCi0JbGliZ3N0dnB4LmxhCi0KLWxpYmdzdHZweF9sYV9TT1VSQ0VTID0gXAotICAgIGdzdHZweGRlYy5jIFwKLSAgICBnc3R2cHhlbmMuYyBcCi0JZ3N0dnA4ZGVjLmMgXAotCWdzdHZwOGVuYy5jIFwKLQlnc3R2cDh1dGlscy5jIFwKLQlnc3R2cDlkZWMuYyBcCi0JZ3N0dnA5ZW5jLmMgXAotCXBsdWdpbi5jCi0KLWxpYmdzdHZweF9sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSBcCi0JJChWUFhfQ0ZMQUdTKSBcCi0JLURHU1RfVVNFX1VOU1RBQkxFX0FQSQotbGliZ3N0dnB4X2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKFZQWF9MSUJTKQotbGliZ3N0dnB4X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHZweF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IFwKLSAgICBnc3R2cHhkZWMuaCBcCi0gICAgZ3N0dnB4ZW5jLmggXAotCWdzdHZwOGRlYy5oIFwKLQlnc3R2cDhlbmMuaCBcCi0JZ3N0dnA5ZGVjLmggXAotCWdzdHZwOWVuYy5oIFwKLQlnc3R2cDh1dGlscy5oCi0KLXByZXNldGRpciA9ICQoZGF0YWRpcikvZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9wcmVzZXRzCi1wcmVzZXRfREFUQSA9IEdzdFZQOEVuYy5wcnMKLQotRVhUUkFfRElTVCA9ICQocHJlc2V0X0RBVEEpCmRpZmYgLS1naXQgYS9leHQvdnB4L01ha2VmaWxlLmluIGIvZXh0L3ZweC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU4YzZlZi4uMDAwMDAwMAotLS0gYS9leHQvdnB4L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTAyNCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGV4dC92cHgKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiAiJChERVNURElSKSQocHJlc2V0ZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0dnB4X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3R2cHhfbGFfT0JKRUNUUyA9IGxpYmdzdHZweF9sYS1nc3R2cHhkZWMubG8gXAotCWxpYmdzdHZweF9sYS1nc3R2cHhlbmMubG8gbGliZ3N0dnB4X2xhLWdzdHZwOGRlYy5sbyBcCi0JbGliZ3N0dnB4X2xhLWdzdHZwOGVuYy5sbyBsaWJnc3R2cHhfbGEtZ3N0dnA4dXRpbHMubG8gXAotCWxpYmdzdHZweF9sYS1nc3R2cDlkZWMubG8gbGliZ3N0dnB4X2xhLWdzdHZwOWVuYy5sbyBcCi0JbGliZ3N0dnB4X2xhLXBsdWdpbi5sbwotbGliZ3N0dnB4X2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHZweF9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0dnB4X2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0dnB4X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHZweF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R2cHhfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0dnB4X2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotREFUQSA9ICQocHJlc2V0X0RBVEEpCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gXAotCWxpYmdzdHZweC5sYQotCi1saWJnc3R2cHhfbGFfU09VUkNFUyA9IFwKLSAgICBnc3R2cHhkZWMuYyBcCi0gICAgZ3N0dnB4ZW5jLmMgXAotCWdzdHZwOGRlYy5jIFwKLQlnc3R2cDhlbmMuYyBcCi0JZ3N0dnA4dXRpbHMuYyBcCi0JZ3N0dnA5ZGVjLmMgXAotCWdzdHZwOWVuYy5jIFwKLQlwbHVnaW4uYwotCi1saWJnc3R2cHhfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgXAotCSQoVlBYX0NGTEFHUykgXAotCS1ER1NUX1VTRV9VTlNUQUJMRV9BUEkKLQotbGliZ3N0dnB4X2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKFZQWF9MSUJTKQotCi1saWJnc3R2cHhfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IFwKLSAgICBnc3R2cHhkZWMuaCBcCi0gICAgZ3N0dnB4ZW5jLmggXAotCWdzdHZwOGRlYy5oIFwKLQlnc3R2cDhlbmMuaCBcCi0JZ3N0dnA5ZGVjLmggXAotCWdzdHZwOWVuYy5oIFwKLQlnc3R2cDh1dGlscy5oCi0KLXByZXNldGRpciA9ICQoZGF0YWRpcikvZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9wcmVzZXRzCi1wcmVzZXRfREFUQSA9IEdzdFZQOEVuYy5wcnMKLUVYVFJBX0RJU1QgPSAkKHByZXNldF9EQVRBKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3ZweC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBleHQvdnB4L01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0dnB4LmxhOiAkKGxpYmdzdHZweF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHZweF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0dnB4X2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3R2cHhfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHZweF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHZweF9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDhkZWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnA4ZW5jLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOHV0aWxzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOWRlYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDllbmMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnB4ZGVjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZweGVuYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZweF9sYS1wbHVnaW4uUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHZweF9sYS1nc3R2cHhkZWMubG86IGdzdHZweGRlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dnB4X2xhLWdzdHZweGRlYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZweGRlYy5UcG8gLWMgLW8gbGliZ3N0dnB4X2xhLWdzdHZweGRlYy5sbyBgdGVzdCAtZiAnZ3N0dnB4ZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZweGRlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnB4ZGVjLlRwbyAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZweGRlYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2cHhkZWMuYycgb2JqZWN0PSdsaWJnc3R2cHhfbGEtZ3N0dnB4ZGVjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2cHhfbGEtZ3N0dnB4ZGVjLmxvIGB0ZXN0IC1mICdnc3R2cHhkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dnB4ZGVjLmMKLQotbGliZ3N0dnB4X2xhLWdzdHZweGVuYy5sbzogZ3N0dnB4ZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2cHhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dnB4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2cHhfbGEtZ3N0dnB4ZW5jLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnB4ZW5jLlRwbyAtYyAtbyBsaWJnc3R2cHhfbGEtZ3N0dnB4ZW5jLmxvIGB0ZXN0IC1mICdnc3R2cHhlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dnB4ZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cHhlbmMuVHBvICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnB4ZW5jLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHZweGVuYy5jJyBvYmplY3Q9J2xpYmdzdHZweF9sYS1nc3R2cHhlbmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2cHhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dnB4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZweF9sYS1nc3R2cHhlbmMubG8gYHRlc3QgLWYgJ2dzdHZweGVuYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2cHhlbmMuYwotCi1saWJnc3R2cHhfbGEtZ3N0dnA4ZGVjLmxvOiBnc3R2cDhkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZweF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2cHhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZweF9sYS1nc3R2cDhkZWMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDhkZWMuVHBvIC1jIC1vIGxpYmdzdHZweF9sYS1nc3R2cDhkZWMubG8gYHRlc3QgLWYgJ2dzdHZwOGRlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2cDhkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOGRlYy5UcG8gJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDhkZWMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dnA4ZGVjLmMnIG9iamVjdD0nbGliZ3N0dnB4X2xhLWdzdHZwOGRlYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZweF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2cHhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dnB4X2xhLWdzdHZwOGRlYy5sbyBgdGVzdCAtZiAnZ3N0dnA4ZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZwOGRlYy5jCi0KLWxpYmdzdHZweF9sYS1nc3R2cDhlbmMubG86IGdzdHZwOGVuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dnB4X2xhLWdzdHZwOGVuYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOGVuYy5UcG8gLWMgLW8gbGliZ3N0dnB4X2xhLWdzdHZwOGVuYy5sbyBgdGVzdCAtZiAnZ3N0dnA4ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZwOGVuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnA4ZW5jLlRwbyAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOGVuYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2cDhlbmMuYycgb2JqZWN0PSdsaWJnc3R2cHhfbGEtZ3N0dnA4ZW5jLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2cHhfbGEtZ3N0dnA4ZW5jLmxvIGB0ZXN0IC1mICdnc3R2cDhlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dnA4ZW5jLmMKLQotbGliZ3N0dnB4X2xhLWdzdHZwOHV0aWxzLmxvOiBnc3R2cDh1dGlscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dnB4X2xhLWdzdHZwOHV0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnA4dXRpbHMuVHBvIC1jIC1vIGxpYmdzdHZweF9sYS1nc3R2cDh1dGlscy5sbyBgdGVzdCAtZiAnZ3N0dnA4dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dnA4dXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOHV0aWxzLlRwbyAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOHV0aWxzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHZwOHV0aWxzLmMnIG9iamVjdD0nbGliZ3N0dnB4X2xhLWdzdHZwOHV0aWxzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2cHhfbGEtZ3N0dnA4dXRpbHMubG8gYHRlc3QgLWYgJ2dzdHZwOHV0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZwOHV0aWxzLmMKLQotbGliZ3N0dnB4X2xhLWdzdHZwOWRlYy5sbzogZ3N0dnA5ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2cHhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dnB4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2cHhfbGEtZ3N0dnA5ZGVjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnA5ZGVjLlRwbyAtYyAtbyBsaWJnc3R2cHhfbGEtZ3N0dnA5ZGVjLmxvIGB0ZXN0IC1mICdnc3R2cDlkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dnA5ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDlkZWMuVHBvICQoREVQRElSKS9saWJnc3R2cHhfbGEtZ3N0dnA5ZGVjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHZwOWRlYy5jJyBvYmplY3Q9J2xpYmdzdHZweF9sYS1nc3R2cDlkZWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2cHhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dnB4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZweF9sYS1nc3R2cDlkZWMubG8gYHRlc3QgLWYgJ2dzdHZwOWRlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2cDlkZWMuYwotCi1saWJnc3R2cHhfbGEtZ3N0dnA5ZW5jLmxvOiBnc3R2cDllbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZweF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2cHhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZweF9sYS1nc3R2cDllbmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDllbmMuVHBvIC1jIC1vIGxpYmdzdHZweF9sYS1nc3R2cDllbmMubG8gYHRlc3QgLWYgJ2dzdHZwOWVuYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2cDllbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dnB4X2xhLWdzdHZwOWVuYy5UcG8gJChERVBESVIpL2xpYmdzdHZweF9sYS1nc3R2cDllbmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dnA5ZW5jLmMnIG9iamVjdD0nbGliZ3N0dnB4X2xhLWdzdHZwOWVuYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZweF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2cHhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dnB4X2xhLWdzdHZwOWVuYy5sbyBgdGVzdCAtZiAnZ3N0dnA5ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZwOWVuYy5jCi0KLWxpYmdzdHZweF9sYS1wbHVnaW4ubG86IHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dnB4X2xhLXBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dnB4X2xhLXBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0dnB4X2xhLXBsdWdpbi5sbyBgdGVzdCAtZiAncGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2cHhfbGEtcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0dnB4X2xhLXBsdWdpbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwbHVnaW4uYycgb2JqZWN0PSdsaWJnc3R2cHhfbGEtcGx1Z2luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dnB4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZweF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2cHhfbGEtcGx1Z2luLmxvIGB0ZXN0IC1mICdwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGx1Z2luLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtcHJlc2V0REFUQTogJChwcmVzZXRfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwcmVzZXRfREFUQSknOyB0ZXN0IC1uICIkKHByZXNldGRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocHJlc2V0ZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwcmVzZXRkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHByZXNldGRpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHByZXNldGRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtcHJlc2V0REFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHByZXNldF9EQVRBKSc7IHRlc3QgLW4gIiQocHJlc2V0ZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQocHJlc2V0ZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoREFUQSkgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSIgIiQoREVTVERJUikkKHByZXNldGRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXByZXNldERBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wcmVzZXREQVRBCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXByZXNldERBVEEgaW5zdGFsbC1wcyBcCi0JaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAotCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wcmVzZXREQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9leHQvdnB4L2dzdHZwOGRlYy5jIGIvZXh0L3ZweC9nc3R2cDhkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE5NjI1Yy4uMDAwMDAwMAotLS0gYS9leHQvdnB4L2dzdHZwOGRlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qIFZQOAotICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDksMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXZwOGRlYwotICogQHNlZV9hbHNvOiB2cDhlbmMsIG1hdHJvc2thZGVtdXgKLSAqCi0gKiBUaGlzIGVsZW1lbnQgZGVjb2RlcyBWUDggc3RyZWFtcyBpbnRvIHJhdyB2aWRlby4KLSAqIDx1bGluayB1cmw9Imh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnIj5WUDg8L3VsaW5rPiBpcyBhIHJveWFsdHktZnJlZQotICogdmlkZW8gY29kZWMgbWFpbnRhaW5lZCBieSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIj5Hb29nbGUKLSAqIDwvdWxpbms+LiBJdCdzIHRoZSBzdWNjZXNzb3Igb2YgT24yIFZQMywgd2hpY2ggd2FzIHRoZSBiYXNlIG9mIHRoZQotICogVGhlb3JhIHZpZGVvIGNvZGVjLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBmaWxlc3JjIGxvY2F0aW9uPXZpZGVvdGVzdHNyYy53ZWJtICEgbWF0cm9za2FkZW11eCAhIHZwOGRlYyAhIHZpZGVvY29udmVydCAhIHZpZGVvc2NhbGUgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZWNvZGUgYSBXZWJNIHN0cmVhbSBhbmQgZGVjb2RlcyB0aGUgVlA4IHZpZGVvLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1ZQOF9ERUNPREVSCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdHZwOGRlYy5oIgotI2luY2x1ZGUgImdzdHZwOHV0aWxzLmgiCi0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfdnA4ZGVjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF92cDhkZWNfZGVidWcKLQotI2RlZmluZSBWUDhfREVDT0RFUl9WSURFT19UQUcgIlZQOCB2aWRlbyIKLQotc3RhdGljIHZvaWQgZ3N0X3ZwOF9kZWNfc2V0X2RlZmF1bHRfZm9ybWF0IChHc3RWUFhEZWMgKiBkZWMsIEdzdFZpZGVvRm9ybWF0IGZtdCwKLSAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotc3RhdGljIHZvaWQgZ3N0X3ZwOF9kZWNfaGFuZGxlX3Jlc29sdXRpb25fY2hhbmdlIChHc3RWUFhEZWMgKiBkZWMsCi0gICAgdnB4X2ltYWdlX3QgKiBpbWcsIEdzdFZpZGVvRm9ybWF0IGZtdCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdnA4X2RlY19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtdnA4IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZwOF9kZWNfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJJNDIwIikpCi0gICAgKTsKLQotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X3ZwOF9kZWNfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RWUDhEZWMsIGdzdF92cDhfZGVjLCBHU1RfVFlQRV9WUFhfREVDKTsKLQotc3RhdGljIHZvaWQKLWdzdF92cDhfZGVjX2NsYXNzX2luaXQgKEdzdFZQOERlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR3N0VlBYRGVjQ2xhc3MgKnZweF9jbGFzczsKLQotICBlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgdnB4X2NsYXNzID0gR1NUX1ZQWF9ERUNfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfdnA4X2RlY19zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZwOF9kZWNfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIk9uMiBWUDggRGVjb2RlciIsCi0gICAgICAiQ29kZWMvRGVjb2Rlci9WaWRlbyIsCi0gICAgICAiRGVjb2RlIFZQOCB2aWRlbyBzdHJlYW1zIiwgIkRhdmlkIFNjaGxlZWYgPGRzQGVudHJvcHl3YXZlLmNvbT4sICIKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4iKTsKLQotICB2cHhfY2xhc3MtPnZpZGVvX2NvZGVjX3RhZyA9IFZQOF9ERUNPREVSX1ZJREVPX1RBRzsKLSAgdnB4X2NsYXNzLT5jb2RlY19hbGdvID0gJnZweF9jb2RlY192cDhfZHhfYWxnbzsKLSAgdnB4X2NsYXNzLT5zZXRfZGVmYXVsdF9mb3JtYXQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92cDhfZGVjX3NldF9kZWZhdWx0X2Zvcm1hdCk7Ci0gIHZweF9jbGFzcy0+aGFuZGxlX3Jlc29sdXRpb25fY2hhbmdlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdnA4X2RlY19oYW5kbGVfcmVzb2x1dGlvbl9jaGFuZ2UpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdnA4ZGVjX2RlYnVnLCAidnA4ZGVjIiwgMCwgIlZQOCBEZWNvZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnA4X2RlY19pbml0IChHc3RWUDhEZWMgKiBnc3RfdnA4X2RlYykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZ3N0X3ZwOF9kZWMsICJnc3RfdnA4X2RlY19pbml0Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnA4X2RlY19zZXRfZGVmYXVsdF9mb3JtYXQgKEdzdFZQWERlYyAqIGRlYywgR3N0VmlkZW9Gb3JtYXQgZm10LCBpbnQgd2lkdGgsCi0gICAgaW50IGhlaWdodCkKLXsKLSAgR3N0VlBYRGVjQ2xhc3MgKnZweGNsYXNzID0gR1NUX1ZQWF9ERUNfR0VUX0NMQVNTIChkZWMpOwotICBnX2Fzc2VydCAoZGVjLT5vdXRwdXRfc3RhdGUgPT0gTlVMTCk7Ci0gIGRlYy0+b3V0cHV0X3N0YXRlID0KLSAgICAgIGdzdF92aWRlb19kZWNvZGVyX3NldF9vdXRwdXRfc3RhdGUgKEdTVF9WSURFT19ERUNPREVSIChkZWMpLAotICAgICAgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwLCB3aWR0aCwgaGVpZ2h0LCBkZWMtPmlucHV0X3N0YXRlKTsKLSAgZ3N0X3ZpZGVvX2RlY29kZXJfbmVnb3RpYXRlIChHU1RfVklERU9fREVDT0RFUiAoZGVjKSk7Ci0gIHZweGNsYXNzLT5zZW5kX3RhZ3MgKGRlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnA4X2RlY19oYW5kbGVfcmVzb2x1dGlvbl9jaGFuZ2UgKEdzdFZQWERlYyAqIGRlYywgdnB4X2ltYWdlX3QgKiBpbWcsCi0gICAgR3N0VmlkZW9Gb3JtYXQgZm10KQotewotICBHc3RWaWRlb0luZm8gKmluZm87Ci0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqbmV3X291dHB1dF9zdGF0ZTsKLQotICBpbmZvID0gJmRlYy0+b3V0cHV0X3N0YXRlLT5pbmZvOwotICBpZiAoR1NUX1ZJREVPX0lORk9fV0lEVEggKGluZm8pICE9IGltZy0+ZF93Ci0gICAgICB8fCBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pICE9IGltZy0+ZF9oKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLAotICAgICAgICAiQ2hhbmdlZCBvdXRwdXQgcmVzb2x1dGlvbiB3YXMgJWQgeCAlZCBub3cgaXMgZ290ICV1IHggJXUgKGRpc3BsYXkgJXUgeCAldSkiLAotICAgICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoaW5mbyksIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5mbyksIGltZy0+dywKLSAgICAgICAgaW1nLT5oLCBpbWctPmRfdywgaW1nLT5kX2gpOwotCi0gICAgbmV3X291dHB1dF9zdGF0ZSA9Ci0gICAgICAgIGdzdF92aWRlb19kZWNvZGVyX3NldF9vdXRwdXRfc3RhdGUgKEdTVF9WSURFT19ERUNPREVSIChkZWMpLAotICAgICAgICBHU1RfVklERU9fRk9STUFUX0k0MjAsIGltZy0+ZF93LCBpbWctPmRfaCwgZGVjLT5vdXRwdXRfc3RhdGUpOwotICAgIGlmIChkZWMtPm91dHB1dF9zdGF0ZSkgewotICAgICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChkZWMtPm91dHB1dF9zdGF0ZSk7Ci0gICAgfQotICAgIGRlYy0+b3V0cHV0X3N0YXRlID0gbmV3X291dHB1dF9zdGF0ZTsKLSAgICAvKiBObyBuZWVkIHRvIGNhbGwgbmVnb3RpYXRlKCkgaGVyZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGxlZAotICAgICAqIGJ5IGFsbG9jYXRlX291dHB1dF9mcmFtZSgpKi8KLSAgfQotfQotCi0jZW5kaWYgLyogSEFWRV9WUDhfREVDT0RFUiAqLwpkaWZmIC0tZ2l0IGEvZXh0L3ZweC9nc3R2cDhkZWMuaCBiL2V4dC92cHgvZ3N0dnA4ZGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjM2IxNjEuLjAwMDAwMDAKLS0tIGEvZXh0L3ZweC9nc3R2cDhkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qIFZQOAotICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDksMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgX19HU1RfVlA4X0RFQ19IX18KLSNkZWZpbmUgX19HU1RfVlA4X0RFQ19IX18KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WUDhfREVDT0RFUgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuaD4KLSNpbmNsdWRlIDxnc3R2cHhkZWMuaD4KLQotLyogRklYTUU6IFVuZGVmIEhBVkVfQ09ORklHX0ggYmVjYXVzZSB2cHhfY29kZWMuaCB1c2VzIGl0LAotICogd2hpY2ggY2F1c2VzIGNvbXBpbGF0aW9uIGZhaWx1cmVzICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI3VuZGVmIEhBVkVfQ09ORklHX0gKLSNlbmRpZgotCi0jaW5jbHVkZSA8dnB4L3ZweF9kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8dnB4L3ZwOGR4Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9WUDhfREVDIFwKLSAgKGdzdF92cDhfZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WUDhfREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVlA4X0RFQyxHc3RWUDhEZWMpKQotI2RlZmluZSBHU1RfVlA4X0RFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WUDhfREVDLEdzdFZQOERlY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1ZQOF9ERUMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WUDhfREVDKSkKLSNkZWZpbmUgR1NUX0lTX1ZQOF9ERUNfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1ZQOF9ERUMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VlA4RGVjIEdzdFZQOERlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWUDhEZWNDbGFzcyBHc3RWUDhEZWNDbGFzczsKLQotc3RydWN0IF9Hc3RWUDhEZWMKLXsKLSAgR3N0VlBYRGVjIGJhc2VfdnB4X2RlY29kZXI7Ci19OwotCi1zdHJ1Y3QgX0dzdFZQOERlY0NsYXNzCi17Ci0gIEdzdFZQWERlY0NsYXNzIGJhc2VfdnB4X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3ZwOF9kZWNfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fR1NUX1ZQOF9ERUNfSF9fICovCmRpZmYgLS1naXQgYS9leHQvdnB4L2dzdHZwOGVuYy5jIGIvZXh0L3ZweC9nc3R2cDhlbmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5YjM4OC4uMDAwMDAwMAotLS0gYS9leHQvdnB4L2dzdHZwOGVuYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qIFZQOAotICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIEVudHJvcHkgV2F2ZSBJbmMKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdnA4ZW5jCi0gKiBAc2VlX2Fsc286IHZwOGRlYywgd2VibW11eCwgb2dnbXV4Ci0gKgotICogVGhpcyBlbGVtZW50IGVuY29kZXMgcmF3IHZpZGVvIGludG8gYSBWUDggc3RyZWFtLgotICogPHVsaW5rIHVybD0iaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmciPlZQODwvdWxpbms+IGlzIGEgcm95YWx0eS1mcmVlCi0gKiB2aWRlbyBjb2RlYyBtYWludGFpbmVkIGJ5IDx1bGluayB1cmw9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iPkdvb2dsZQotICogPC91bGluaz4uIEl0J3MgdGhlIHN1Y2Nlc3NvciBvZiBPbjIgVlAzLCB3aGljaCB3YXMgdGhlIGJhc2Ugb2YgdGhlCi0gKiBUaGVvcmEgdmlkZW8gY29kZWMuCi0gKgotICogVG8gY29udHJvbCB0aGUgcXVhbGl0eSBvZiB0aGUgZW5jb2RpbmcsIHRoZSAjR3N0VlA4RW5jOjp0YXJnZXQtYml0cmF0ZSwKLSAqICNHc3RWUDhFbmM6Om1pbi1xdWFudGl6ZXIsICNHc3RWUDhFbmM6Om1heC1xdWFudGl6ZXIgb3IgI0dzdFZQOEVuYzo6Y3EtbGV2ZWwKLSAqIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQuIFdoaWNoIG9uZSBpcyB1c2VkIGRlcGVuZHMgb24gdGhlIG1vZGUgc2VsZWN0ZWQgYnkKLSAqIHRoZSAjR3N0VlA4RW5jOjplbmQtdXNhZ2UgcHJvcGVydHkuCi0gKiBTZWUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvZG9jcy9lbmNvZGVyLXBhcmFtZXRlcnMvIj5FbmNvZGVyIFBhcmFtZXRlcnM8L3VsaW5rPgotICogZm9yIGV4cGxhbmF0aW9uLCBleGFtcGxlcyBmb3IgdXNlZnVsIGVuY29kaW5nIHBhcmFtZXRlcnMgYW5kIG1vcmUgZGV0YWlscwotICogb24gdGhlIGVuY29kaW5nIHBhcmFtZXRlcnMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0xMDAwICEgdnA4ZW5jICEgd2VibW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXZpZGVvdGVzdHNyYy53ZWJtCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBlbmNvZGUgYSB0ZXN0IHZpZGVvIHNvdXJjZSB0byBWUDggbXV4ZWQgaW4gYW4KLSAqIFdlYk0gY29udGFpbmVyLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1ZQOF9FTkNPREVSCi0KLS8qIGdsaWIgZGVjaWRlZCBpbiAyLjMyIGl0IHdvdWxkIGJlIGEgZ3JlYXQgaWRlYSB0byBkZXByZWNhdGVkIEdWYWx1ZUFycmF5IHdpdGhvdXQKLSAqIHByb3ZpZGluZyBhbiBhbHRlcm5hdGl2ZQotICoKLSAqIFNlZSBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY3MjI4Ci0gKiAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3R2cDh1dGlscy5oIgotI2luY2x1ZGUgImdzdHZwOGVuYy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfdnA4ZW5jX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF92cDhlbmNfZGVidWcKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgdnB4X2ltYWdlX3QgKmltYWdlOwotICBHTGlzdCAqaW52aXNpYmxlOwotfSBHc3RWUDhFbmNVc2VyRGF0YTsKLQotc3RhdGljIHZvaWQKLV9nc3RfbWluaV9vYmplY3RfdW5yZWYwIChHc3RNaW5pT2JqZWN0ICogb2JqKQotewotICBpZiAob2JqKQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAob2JqKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cDhfZW5jX3VzZXJfZGF0YV9mcmVlIChHc3RWUDhFbmNVc2VyRGF0YSAqIHVzZXJfZGF0YSkKLXsKLSAgaWYgKHVzZXJfZGF0YS0+aW1hZ2UpCi0gICAgZ19zbGljZV9mcmVlICh2cHhfaW1hZ2VfdCwgdXNlcl9kYXRhLT5pbWFnZSk7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHVzZXJfZGF0YS0+aW52aXNpYmxlLCAoR0Z1bmMpIF9nc3RfbWluaV9vYmplY3RfdW5yZWYwLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKHVzZXJfZGF0YS0+aW52aXNpYmxlKTsKLSAgZ19zbGljZV9mcmVlIChHc3RWUDhFbmNVc2VyRGF0YSwgdXNlcl9kYXRhKTsKLX0KLQotc3RhdGljIHZweF9jb2RlY19pZmFjZV90ICpnc3RfdnA4X2VuY19nZXRfYWxnbyAoR3N0VlBYRW5jICogZW5jKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnA4X2VuY19lbmFibGVfc2NhbGluZyAoR3N0VlBYRW5jICogZW5jKTsKLXN0YXRpYyB2b2lkIGdzdF92cDhfZW5jX3NldF9pbWFnZV9mb3JtYXQgKEdzdFZQWEVuYyAqIGVuYywgdnB4X2ltYWdlX3QgKiBpbWFnZSk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3ZwOF9lbmNfZ2V0X25ld19zaW1wbGVfY2FwcyAoR3N0VlBYRW5jICogZW5jKTsKLXN0YXRpYyB2b2lkIGdzdF92cDhfZW5jX3NldF9zdHJlYW1faW5mbyAoR3N0VlBYRW5jICogZW5jLCBHc3RDYXBzICogY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbmZvKTsKLXN0YXRpYyB2b2lkICpnc3RfdnA4X2VuY19wcm9jZXNzX2ZyYW1lX3VzZXJfZGF0YSAoR3N0VlBYRW5jICogZW5jLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92cDhfZW5jX2hhbmRsZV9pbnZpc2libGVfZnJhbWVfYnVmZmVyIChHc3RWUFhFbmMgKiBlbmMsCi0gICAgdm9pZCAqdXNlcl9kYXRhLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIHZvaWQgZ3N0X3ZwOF9lbmNfc2V0X2ZyYW1lX3VzZXJfZGF0YSAoR3N0VlBYRW5jICogZW5jLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lLCB2cHhfaW1hZ2VfdCAqIGltYWdlKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3ZwOF9lbmNfcHJlX3B1c2ggKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsCi0gICAgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZwOF9lbmNfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgXCJJNDIwXCIsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWzEsIDE2MzgzXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWzEsIDE2MzgzXSwgZnJhbWVyYXRlID0gKGZyYWN0aW9uKSBbIDAvMSwgTUFYIF0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdnA4X2VuY19zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtdnA4LCAiICJwcm9maWxlID0gKHN0cmluZykgezAsIDEsIDIsIDN9IikKLSAgICApOwotCi0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfdnA4X2VuY19wYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFZQOEVuYywgZ3N0X3ZwOF9lbmMsIEdTVF9UWVBFX1ZQWF9FTkMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOF9lbmNfY2xhc3NfaW5pdCAoR3N0VlA4RW5jQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RWaWRlb0VuY29kZXJDbGFzcyAqdmlkZW9fZW5jb2Rlcl9jbGFzczsKLSAgR3N0VlBYRW5jQ2xhc3MgKnZweF9lbmNvZGVyX2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICB2aWRlb19lbmNvZGVyX2NsYXNzID0gR1NUX1ZJREVPX0VOQ09ERVJfQ0xBU1MgKGtsYXNzKTsKLSAgdnB4X2VuY29kZXJfY2xhc3MgPSBHU1RfVlBYX0VOQ19DTEFTUyAoa2xhc3MpOwotCi0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZwOF9lbmNfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZwOF9lbmNfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJPbjIgVlA4IEVuY29kZXIiLAotICAgICAgIkNvZGVjL0VuY29kZXIvVmlkZW8iLAotICAgICAgIkVuY29kZSBWUDggdmlkZW8gc3RyZWFtcyIsICJEYXZpZCBTY2hsZWVmIDxkc0BlbnRyb3B5d2F2ZS5jb20+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgdmlkZW9fZW5jb2Rlcl9jbGFzcy0+cHJlX3B1c2ggPSBnc3RfdnA4X2VuY19wcmVfcHVzaDsKLQotICB2cHhfZW5jb2Rlcl9jbGFzcy0+Z2V0X2FsZ28gPSBnc3RfdnA4X2VuY19nZXRfYWxnbzsKLSAgdnB4X2VuY29kZXJfY2xhc3MtPmVuYWJsZV9zY2FsaW5nID0gZ3N0X3ZwOF9lbmNfZW5hYmxlX3NjYWxpbmc7Ci0gIHZweF9lbmNvZGVyX2NsYXNzLT5zZXRfaW1hZ2VfZm9ybWF0ID0gZ3N0X3ZwOF9lbmNfc2V0X2ltYWdlX2Zvcm1hdDsKLSAgdnB4X2VuY29kZXJfY2xhc3MtPmdldF9uZXdfdnB4X2NhcHMgPSBnc3RfdnA4X2VuY19nZXRfbmV3X3NpbXBsZV9jYXBzOwotICB2cHhfZW5jb2Rlcl9jbGFzcy0+c2V0X3N0cmVhbV9pbmZvID0gZ3N0X3ZwOF9lbmNfc2V0X3N0cmVhbV9pbmZvOwotICB2cHhfZW5jb2Rlcl9jbGFzcy0+cHJvY2Vzc19mcmFtZV91c2VyX2RhdGEgPQotICAgICAgZ3N0X3ZwOF9lbmNfcHJvY2Vzc19mcmFtZV91c2VyX2RhdGE7Ci0gIHZweF9lbmNvZGVyX2NsYXNzLT5oYW5kbGVfaW52aXNpYmxlX2ZyYW1lX2J1ZmZlciA9Ci0gICAgICBnc3RfdnA4X2VuY19oYW5kbGVfaW52aXNpYmxlX2ZyYW1lX2J1ZmZlcjsKLSAgdnB4X2VuY29kZXJfY2xhc3MtPnNldF9mcmFtZV91c2VyX2RhdGEgPSBnc3RfdnA4X2VuY19zZXRfZnJhbWVfdXNlcl9kYXRhOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdnA4ZW5jX2RlYnVnLCAidnA4ZW5jIiwgMCwgIlZQOCBFbmNvZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnA4X2VuY19pbml0IChHc3RWUDhFbmMgKiBnc3RfdnA4X2VuYykKLXsKLSAgdnB4X2NvZGVjX2Vycl90IHN0YXR1czsKLSAgR3N0VlBYRW5jICpnc3RfdnB4X2VuYyA9IEdTVF9WUFhfRU5DIChnc3RfdnA4X2VuYyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGdzdF92cDhfZW5jLCAiZ3N0X3ZwOF9lbmNfaW5pdCIpOwotICBzdGF0dXMgPQotICAgICAgdnB4X2NvZGVjX2VuY19jb25maWdfZGVmYXVsdCAoZ3N0X3ZwOF9lbmNfZ2V0X2FsZ28gKGdzdF92cHhfZW5jKSwKLSAgICAgICZnc3RfdnB4X2VuYy0+Y2ZnLCAwKTsKLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChnc3RfdnB4X2VuYywKLSAgICAgICAgIkZhaWxlZCB0byBnZXQgZGVmYXVsdCBlbmNvZGVyIGNvbmZpZ3VyYXRpb246ICVzIiwKLSAgICAgICAgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKTsKLSAgICBnc3RfdnB4X2VuYy0+aGF2ZV9kZWZhdWx0X2NvbmZpZyA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIGdzdF92cHhfZW5jLT5oYXZlX2RlZmF1bHRfY29uZmlnID0gVFJVRTsKLSAgfQotfQotCi1zdGF0aWMgdnB4X2NvZGVjX2lmYWNlX3QgKgotZ3N0X3ZwOF9lbmNfZ2V0X2FsZ28gKEdzdFZQWEVuYyAqIGVuYykKLXsKLSAgcmV0dXJuICZ2cHhfY29kZWNfdnA4X2N4X2FsZ287Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZwOF9lbmNfZW5hYmxlX3NjYWxpbmcgKEdzdFZQWEVuYyAqIGVuYykKLXsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnA4X2VuY19zZXRfaW1hZ2VfZm9ybWF0IChHc3RWUFhFbmMgKiBlbmMsIHZweF9pbWFnZV90ICogaW1hZ2UpCi17Ci0gIGltYWdlLT5mbXQgPSBWUFhfSU1HX0ZNVF9JNDIwOwotICBpbWFnZS0+YnBzID0gMTI7Ci0gIGltYWdlLT54X2Nocm9tYV9zaGlmdCA9IGltYWdlLT55X2Nocm9tYV9zaGlmdCA9IDE7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92cDhfZW5jX2dldF9uZXdfc2ltcGxlX2NhcHMgKEdzdFZQWEVuYyAqIGVuYykKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2NoYXIgKnByb2ZpbGVfc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBlbmMtPmNmZy5nX3Byb2ZpbGUpOwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtdnA4IiwKLSAgICAgICJwcm9maWxlIiwgR19UWVBFX1NUUklORywgcHJvZmlsZV9zdHIsIE5VTEwpOwotICBnX2ZyZWUgKHByb2ZpbGVfc3RyKTsKLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnA4X2VuY19zZXRfc3RyZWFtX2luZm8gKEdzdFZQWEVuYyAqIGVuYywgR3N0Q2FwcyAqIGNhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogaW5mbykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RWaWRlb0VuY29kZXIgKnZpZGVvX2VuY29kZXI7Ci0gIEdzdEJ1ZmZlciAqc3RyZWFtX2hkciwgKnZvcmJpc2NvbW1lbnQ7Ci0gIGNvbnN0IEdzdFRhZ0xpc3QgKmlmYWNlX3RhZ3M7Ci0gIEdWYWx1ZSBhcnJheSA9IHsgMCwgfTsKLSAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OwotICBndWludDggKmRhdGEgPSBOVUxMOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICB2aWRlb19lbmNvZGVyID0gR1NUX1ZJREVPX0VOQ09ERVIgKGVuYyk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAvKiBwdXQgYnVmZmVycyBpbiBhIGZpeGVkIGxpc3QgKi8KLSAgZ192YWx1ZV9pbml0ICgmYXJyYXksIEdTVF9UWVBFX0FSUkFZKTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdTVF9UWVBFX0JVRkZFUik7Ci0KLSAgLyogQ3JlYXRlIE9nZyBzdHJlYW0taW5mbyAqLwotICBzdHJlYW1faGRyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyNik7Ci0gIGdzdF9idWZmZXJfbWFwIChzdHJlYW1faGRyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotCi0gIEdTVF9XUklURV9VSU5UOCAoZGF0YSwgMHg0Rik7Ci0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyAxLCAweDU2NTAzODMwKTsgICAvKiAiVlA4MCIgKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgNSwgMHgwMSk7ICAgICAvKiBzdHJlYW0gaW5mbyBoZWFkZXIgKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgNiwgMSk7ICAgICAgICAvKiBNYWpvciB2ZXJzaW9uIDEgKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgNywgMCk7ICAgICAgICAvKiBNaW5vciB2ZXJzaW9uIDAgKi8KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSArIDgsIEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKSk7Ci0gIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEgKyAxMCwgR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbmZvKSk7Ci0gIEdTVF9XUklURV9VSU5UMjRfQkUgKGRhdGEgKyAxMiwgR1NUX1ZJREVPX0lORk9fUEFSX04gKGluZm8pKTsKLSAgR1NUX1dSSVRFX1VJTlQyNF9CRSAoZGF0YSArIDE1LCBHU1RfVklERU9fSU5GT19QQVJfRCAoaW5mbykpOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgMTgsIEdTVF9WSURFT19JTkZPX0ZQU19OIChpbmZvKSk7Ci0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyAyMiwgR1NUX1ZJREVPX0lORk9fRlBTX0QgKGluZm8pKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChzdHJlYW1faGRyLCAmbWFwKTsKLQotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChzdHJlYW1faGRyLCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLSAgZ3N0X3ZhbHVlX3NldF9idWZmZXIgKCZ2YWx1ZSwgc3RyZWFtX2hkcik7Ci0gIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZhcnJheSwgJnZhbHVlKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoc3RyZWFtX2hkcik7Ci0KLSAgaWZhY2VfdGFncyA9IGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAoR1NUX1RBR19TRVRURVIgKHZpZGVvX2VuY29kZXIpKTsKLSAgaWYgKGlmYWNlX3RhZ3MpIHsKLSAgICB2b3JiaXNjb21tZW50ID0KLSAgICAgICAgZ3N0X3RhZ19saXN0X3RvX3ZvcmJpc2NvbW1lbnRfYnVmZmVyIChpZmFjZV90YWdzLAotICAgICAgICAoY29uc3QgZ3VpbnQ4ICopICJPVlA4MFwyICIsIDcsCi0gICAgICAgICJFbmNvZGVkIHdpdGggR1N0cmVhbWVyIHZwOGVuYyAiIFBBQ0tBR0VfVkVSU0lPTik7Ci0KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUICh2b3JiaXNjb21tZW50LCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLQotICAgIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9CVUZGRVIpOwotICAgIGdzdF92YWx1ZV9zZXRfYnVmZmVyICgmdmFsdWUsIHZvcmJpc2NvbW1lbnQpOwotICAgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZhcnJheSwgJnZhbHVlKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKHZvcmJpc2NvbW1lbnQpOwotICB9Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHMsICJzdHJlYW1oZWFkZXIiLCAmYXJyYXkpOwotICBnX3ZhbHVlX3Vuc2V0ICgmYXJyYXkpOwotCi19Ci0KLXN0YXRpYyB2b2lkICoKLWdzdF92cDhfZW5jX3Byb2Nlc3NfZnJhbWVfdXNlcl9kYXRhIChHc3RWUFhFbmMgKiBlbmMsCi0gICAgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpCi17Ci0gIEdzdFZQOEVuY1VzZXJEYXRhICp1c2VyX2RhdGE7Ci0KLSAgdXNlcl9kYXRhID0gZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX2dldF91c2VyX2RhdGEgKGZyYW1lKTsKLQotICBpZiAoIXVzZXJfZGF0YSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGVuYywgIkhhdmUgbm8gZnJhbWUgdXNlciBkYXRhIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAodXNlcl9kYXRhLT5pbWFnZSkKLSAgICBnX3NsaWNlX2ZyZWUgKHZweF9pbWFnZV90LCB1c2VyX2RhdGEtPmltYWdlKTsKLSAgdXNlcl9kYXRhLT5pbWFnZSA9IE5VTEw7Ci0gIHJldHVybiB1c2VyX2RhdGE7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdnA4X2VuY19oYW5kbGVfaW52aXNpYmxlX2ZyYW1lX2J1ZmZlciAoR3N0VlBYRW5jICogZW5jLCB2b2lkICp1c2VyX2RhdGEsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RWUDhFbmNVc2VyRGF0YSAqdnA4X3VzZXJfZGF0YSA9IChHc3RWUDhFbmNVc2VyRGF0YSAqKSB1c2VyX2RhdGE7Ci0KLSAgaWYgKCF2cDhfdXNlcl9kYXRhKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZW5jLCAiSGF2ZSBubyBmcmFtZSB1c2VyIGRhdGEiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICB2cDhfdXNlcl9kYXRhLT5pbnZpc2libGUgPSBnX2xpc3RfYXBwZW5kICh2cDhfdXNlcl9kYXRhLT5pbnZpc2libGUsIGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOF9lbmNfc2V0X2ZyYW1lX3VzZXJfZGF0YSAoR3N0VlBYRW5jICogZW5jLCBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSwKLSAgICB2cHhfaW1hZ2VfdCAqIGltYWdlKQotewotICBHc3RWUDhFbmNVc2VyRGF0YSAqdXNlcl9kYXRhOwotICB1c2VyX2RhdGEgPSBnX3NsaWNlX25ldzAgKEdzdFZQOEVuY1VzZXJEYXRhKTsKLSAgdXNlcl9kYXRhLT5pbWFnZSA9IGltYWdlOwotICBnc3RfdmlkZW9fY29kZWNfZnJhbWVfc2V0X3VzZXJfZGF0YSAoZnJhbWUsIHVzZXJfZGF0YSwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X3ZwOF9lbmNfdXNlcl9kYXRhX2ZyZWUpOwotICByZXR1cm47Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1fdG9fZ3JhbnVsZXBvcyAoZ3VpbnQ2NCBmcmFtZV9lbmRfbnVtYmVyLCBndWludCBpbnZfY291bnQsIGd1aW50IGtleWZyYW1lX2Rpc3QpCi17Ci0gIGd1aW50NjQgZ3JhbnVsZXBvczsKLSAgZ3VpbnQgaW52OwotCi0gIGludiA9IChpbnZfY291bnQgPT0gMCkgPyAweDMgOiBpbnZfY291bnQgLSAxOwotCi0gIGdyYW51bGVwb3MgPSAoZnJhbWVfZW5kX251bWJlciA8PCAzMikgfCAoaW52IDw8IDMwKSB8IChrZXlmcmFtZV9kaXN0IDw8IDMpOwotICByZXR1cm4gZ3JhbnVsZXBvczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92cDhfZW5jX3ByZV9wdXNoIChHc3RWaWRlb0VuY29kZXIgKiB2aWRlb19lbmNvZGVyLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKQotewotICBHc3RWUDhFbmMgKmVuY29kZXI7Ci0gIEdzdFZQWEVuYyAqdnB4X2VuYzsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdFZQOEVuY1VzZXJEYXRhICp1c2VyX2RhdGEgPSBnc3RfdmlkZW9fY29kZWNfZnJhbWVfZ2V0X3VzZXJfZGF0YSAoZnJhbWUpOwotICBHTGlzdCAqbDsKLSAgZ2ludCBpbnZfY291bnQ7Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbzsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb19lbmNvZGVyLCAicHJlX3B1c2giKTsKLQotICBlbmNvZGVyID0gR1NUX1ZQOF9FTkMgKHZpZGVvX2VuY29kZXIpOwotICB2cHhfZW5jID0gR1NUX1ZQWF9FTkMgKGVuY29kZXIpOwotCi0gIGluZm8gPSAmdnB4X2VuYy0+aW5wdXRfc3RhdGUtPmluZm87Ci0KLSAgZ19hc3NlcnQgKHVzZXJfZGF0YSAhPSBOVUxMKTsKLQotICBmb3IgKGludl9jb3VudCA9IDAsIGwgPSB1c2VyX2RhdGEtPmludmlzaWJsZTsgbDsgaW52X2NvdW50KyssIGwgPSBsLT5uZXh0KSB7Ci0gICAgYnVmID0gbC0+ZGF0YTsKLSAgICBsLT5kYXRhID0gTlVMTDsKLQotICAgIC8qIEZJWE1FIDogQWxsIG9mIHRoaXMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQgYnkgYmFzZSBjbGFzc2VzLCBubyA/ICovCi0gICAgaWYgKGwgPT0gdXNlcl9kYXRhLT5pbnZpc2libGUKLSAgICAgICAgJiYgR1NUX1ZJREVPX0NPREVDX0ZSQU1FX0lTX1NZTkNfUE9JTlQgKGZyYW1lKSkgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICAgIGVuY29kZXItPmtleWZyYW1lX2Rpc3RhbmNlID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCk7Ci0gICAgICBlbmNvZGVyLT5rZXlmcmFtZV9kaXN0YW5jZSsrOwotICAgIH0KLQotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZKTsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChmcmFtZS0+b3V0cHV0X2J1ZmZlcik7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IDA7Ci0gICAgaWYgKEdTVF9WSURFT19JTkZPX0ZQU19EIChpbmZvKSA9PSAwIHx8IEdTVF9WSURFT19JTkZPX0ZQU19OIChpbmZvKSA9PSAwKSB7Ci0gICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPQotICAgICAgICAgIF90b19ncmFudWxlcG9zIChmcmFtZS0+cHJlc2VudGF0aW9uX2ZyYW1lX251bWJlciArIDEsCi0gICAgICAgICAgaW52X2NvdW50LCBlbmNvZGVyLT5rZXlmcmFtZV9kaXN0YW5jZSk7Ci0gICAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9Ci0gICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChmcmFtZS0+cHJlc2VudGF0aW9uX2ZyYW1lX251bWJlciArIDEsCi0gICAgICAgICAgR1NUX1NFQ09ORCAqIEdTVF9WSURFT19JTkZPX0ZQU19EIChpbmZvKSwKLSAgICAgICAgICBHU1RfVklERU9fSU5GT19GUFNfTiAoaW5mbykpOwotICAgIH0KLQotICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoR1NUX1ZJREVPX0VOQ09ERVJfU1JDX1BBRCAodmlkZW9fZW5jb2RlciksIGJ1Zik7Ci0KLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuY29kZXIsICJmbG93IGVycm9yICVkIiwgcmV0KTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gIH0KLQotICBidWYgPSBmcmFtZS0+b3V0cHV0X2J1ZmZlcjsKLQotICAvKiBGSVhNRSA6IEFsbCBvZiB0aGlzIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBoYW5kbGVkIGJ5IGJhc2UgY2xhc3Nlcywgbm8gPyAqLwotICBpZiAoIXVzZXJfZGF0YS0+aW52aXNpYmxlICYmIEdTVF9WSURFT19DT0RFQ19GUkFNRV9JU19TWU5DX1BPSU5UIChmcmFtZSkpIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgIGVuY29kZXItPmtleWZyYW1lX2Rpc3RhbmNlID0gMDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICBlbmNvZGVyLT5rZXlmcmFtZV9kaXN0YW5jZSsrOwotICB9Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0ZQU19EIChpbmZvKSA9PSAwIHx8IEdTVF9WSURFT19JTkZPX0ZQU19OIChpbmZvKSA9PSAwKSB7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0KLSAgICAgICAgX3RvX2dyYW51bGVwb3MgKGZyYW1lLT5wcmVzZW50YXRpb25fZnJhbWVfbnVtYmVyICsgMSwgMCwKLSAgICAgICAgZW5jb2Rlci0+a2V5ZnJhbWVfZGlzdGFuY2UpOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChmcmFtZS0+cHJlc2VudGF0aW9uX2ZyYW1lX251bWJlciArIDEsCi0gICAgICAgIEdTVF9TRUNPTkQgKiBHU1RfVklERU9fSU5GT19GUFNfRCAoaW5mbyksIEdTVF9WSURFT19JTkZPX0ZQU19OIChpbmZvKSk7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAodmlkZW9fZW5jb2RlciwgInNyYyB0czogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpKTsKLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotI2VuZGlmIC8qIEhBVkVfVlA4X0VOQ09ERVIgKi8KZGlmZiAtLWdpdCBhL2V4dC92cHgvZ3N0dnA4ZW5jLmggYi9leHQvdnB4L2dzdHZwOGVuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzMxOWUyLi4wMDAwMDAwCi0tLSBhL2V4dC92cHgvZ3N0dnA4ZW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKiBWUDgKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0jaWZuZGVmIF9fR1NUX1ZQOF9FTkNfSF9fCi0jZGVmaW5lIF9fR1NUX1ZQOF9FTkNfSF9fCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfVlA4X0VOQ09ERVIKLQotI2luY2x1ZGUgPGdzdHZweGVuYy5oPgotCi0vKiBGSVhNRTogVW5kZWYgSEFWRV9DT05GSUdfSCBiZWNhdXNlIHZweF9jb2RlYy5oIHVzZXMgaXQsCi0gKiB3aGljaCBjYXVzZXMgY29tcGlsYXRpb24gZmFpbHVyZXMgKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jdW5kZWYgSEFWRV9DT05GSUdfSAotI2VuZGlmCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9WUDhfRU5DIFwKLSAgKGdzdF92cDhfZW5jX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WUDhfRU5DKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVlA4X0VOQyxHc3RWUDhFbmMpKQotI2RlZmluZSBHU1RfVlA4X0VOQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WUDhfRU5DLEdzdFZQOEVuY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1ZQOF9FTkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WUDhfRU5DKSkKLSNkZWZpbmUgR1NUX0lTX1ZQOF9FTkNfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1ZQOF9FTkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VlA4RW5jIEdzdFZQOEVuYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWUDhFbmNDbGFzcyBHc3RWUDhFbmNDbGFzczsKLQotc3RydWN0IF9Hc3RWUDhFbmMKLXsKLSAgR3N0VlBYRW5jIGJhc2VfdnB4X2VuY29kZXI7Ci0KLSAgaW50IGtleWZyYW1lX2Rpc3RhbmNlOwotfTsKLQotc3RydWN0IF9Hc3RWUDhFbmNDbGFzcwotewotICBHc3RWUFhFbmNDbGFzcyAgYmFzZV92cHhlbmNfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfdnA4X2VuY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19HU1RfVlA4X0VOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC92cHgvZ3N0dnA4dXRpbHMuYyBiL2V4dC92cHgvZ3N0dnA4dXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyMTk0NS4uMDAwMDAwMAotLS0gYS9leHQvdnB4L2dzdHZwOHV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBWUDgKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotLyogRklYTUU6IFVuZGVmIEhBVkVfQ09ORklHX0ggYmVjYXVzZSB2cHhfY29kZWMuaCB1c2VzIGl0LAotICogd2hpY2ggY2F1c2VzIGNvbXBpbGF0aW9uIGZhaWx1cmVzICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI3VuZGVmIEhBVkVfQ09ORklHX0gKLSNlbmRpZgotCi0jaW5jbHVkZSA8dnB4L3ZweF9jb2RlYy5oPgotCi0jaW5jbHVkZSAiZ3N0dnA4dXRpbHMuaCIKLQotY29uc3QgY2hhciAqCi1nc3RfdnB4X2Vycm9yX25hbWUgKHZweF9jb2RlY19lcnJfdCBzdGF0dXMpCi17Ci0gIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBWUFhfQ09ERUNfT0s6Ci0gICAgICByZXR1cm4gIk9LIjsKLSAgICBjYXNlIFZQWF9DT0RFQ19FUlJPUjoKLSAgICAgIHJldHVybiAiZXJyb3IiOwotICAgIGNhc2UgVlBYX0NPREVDX01FTV9FUlJPUjoKLSAgICAgIHJldHVybiAibWVtIGVycm9yIjsKLSAgICBjYXNlIFZQWF9DT0RFQ19BQklfTUlTTUFUQ0g6Ci0gICAgICByZXR1cm4gImFiaSBtaXNtYXRjaCI7Ci0gICAgY2FzZSBWUFhfQ09ERUNfSU5DQVBBQkxFOgotICAgICAgcmV0dXJuICJpbmNhcGFibGUiOwotICAgIGNhc2UgVlBYX0NPREVDX1VOU1VQX0JJVFNUUkVBTToKLSAgICAgIHJldHVybiAidW5zdXBwb3J0ZWQgYml0c3RyZWFtIjsKLSAgICBjYXNlIFZQWF9DT0RFQ19VTlNVUF9GRUFUVVJFOgotICAgICAgcmV0dXJuICJ1bnN1cHBvcnRlZCBmZWF0dXJlIjsKLSAgICBjYXNlIFZQWF9DT0RFQ19DT1JSVVBUX0ZSQU1FOgotICAgICAgcmV0dXJuICJjb3JydXB0IGZyYW1lIjsKLSAgICBjYXNlIFZQWF9DT0RFQ19JTlZBTElEX1BBUkFNOgotICAgICAgcmV0dXJuICJpbnZhbGlkIHBhcmFtZXRlciI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAidW5rbm93biI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2V4dC92cHgvZ3N0dnA4dXRpbHMuaCBiL2V4dC92cHgvZ3N0dnA4dXRpbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE0NWRmMS4uMDAwMDAwMAotLS0gYS9leHQvdnB4L2dzdHZwOHV0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKiBWUDgKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8dnB4L3ZweF9jb2RlYy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLWNvbnN0IGNoYXIgKiBnc3RfdnB4X2Vycm9yX25hbWUgKHZweF9jb2RlY19lcnJfdCBzdGF0dXMpOwotCi1HX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvZXh0L3ZweC9nc3R2cDlkZWMuYyBiL2V4dC92cHgvZ3N0dnA5ZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZDc1MGIuLjAwMDAwMDAKLS0tIGEvZXh0L3ZweC9nc3R2cDlkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vKiBWUDkKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5LDIwMTAgRW50cm9weSBXYXZlIEluYwotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdnA5ZGVjCi0gKiBAc2VlX2Fsc286IHZwOWVuYywgbWF0cm9za2FkZW11eAotICoKLSAqIFRoaXMgZWxlbWVudCBkZWNvZGVzIFZQOSBzdHJlYW1zIGludG8gcmF3IHZpZGVvLgotICogPHVsaW5rIHVybD0iaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmciPlZQOTwvdWxpbms+IGlzIGEgcm95YWx0eS1mcmVlCi0gKiB2aWRlbyBjb2RlYyBtYWludGFpbmVkIGJ5IDx1bGluayB1cmw9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iPkdvb2dsZQotICogPC91bGluaz4uIEl0J3MgdGhlIHN1Y2Nlc3NvciBvZiBPbjIgVlAzLCB3aGljaCB3YXMgdGhlIGJhc2Ugb2YgdGhlCi0gKiBUaGVvcmEgdmlkZW8gY29kZWMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249dmlkZW90ZXN0c3JjLndlYm0gISBtYXRyb3NrYWRlbXV4ICEgdnA5ZGVjICEgdmlkZW9jb252ZXJ0ICEgdmlkZW9zY2FsZSAhIGF1dG92aWRlb3NpbmsKLSAqIF18IFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIGRlY29kZSBhIFdlYk0gc3RyZWFtIGFuZCBkZWNvZGVzIHRoZSBWUDkgdmlkZW8uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfVlA5X0RFQ09ERVIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0dnA4dXRpbHMuaCIKLSNpbmNsdWRlICJnc3R2cDlkZWMuaCIKLQotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF92cDlkZWNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3ZwOWRlY19kZWJ1ZwotCi0jZGVmaW5lIFZQOV9ERUNPREVSX1ZJREVPX1RBRyAiVlA5IHZpZGVvIgotCi1zdGF0aWMgdm9pZCBnc3RfdnA5X2RlY19zZXRfc3RyZWFtX2luZm8gKEdzdFZQWERlYyAqIGRlYywKLSAgICB2cHhfY29kZWNfc3RyZWFtX2luZm9fdCAqIHN0cmVhbV9pbmZvKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnA5X2RlY19nZXRfdmFsaWRfZm9ybWF0IChHc3RWUFhEZWMgKiBkZWMsCi0gICAgdnB4X2ltYWdlX3QgKiBpbWcsIEdzdFZpZGVvRm9ybWF0ICogZm10KTsKLXN0YXRpYyB2b2lkIGdzdF92cDlfZGVjX2hhbmRsZV9yZXNvbHV0aW9uX2NoYW5nZSAoR3N0VlBYRGVjICogZGVjLAotICAgIHZweF9pbWFnZV90ICogaW1nLCBHc3RWaWRlb0Zvcm1hdCBmbXQpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZwOV9kZWNfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXZwOSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF92cDlfZGVjX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBJNDIwLCBZVjEyLCBZNDJCLCBZNDQ0IH0iKSkKLSAgICApOwotCi0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfdnA5X2RlY19wYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFZQOURlYywgZ3N0X3ZwOV9kZWMsIEdTVF9UWVBFX1ZQWF9ERUMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOV9kZWNfY2xhc3NfaW5pdCAoR3N0VlA5RGVjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RWUFhEZWNDbGFzcyAqdnB4X2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICB2cHhfY2xhc3MgPSBHU1RfVlBYX0RFQ19DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF92cDlfZGVjX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF92cDlfZGVjX3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiT24yIFZQOSBEZWNvZGVyIiwKLSAgICAgICJDb2RlYy9EZWNvZGVyL1ZpZGVvIiwKLSAgICAgICJEZWNvZGUgVlA5IHZpZGVvIHN0cmVhbXMiLCAiRGF2aWQgU2NobGVlZiA8ZHNAZW50cm9weXdhdmUuY29tPiwgIgotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIHZweF9jbGFzcy0+dmlkZW9fY29kZWNfdGFnID0gVlA5X0RFQ09ERVJfVklERU9fVEFHOwotICB2cHhfY2xhc3MtPmNvZGVjX2FsZ28gPSAmdnB4X2NvZGVjX3ZwOV9keF9hbGdvOwotICB2cHhfY2xhc3MtPnNldF9zdHJlYW1faW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdnA5X2RlY19zZXRfc3RyZWFtX2luZm8pOwotICB2cHhfY2xhc3MtPmdldF9mcmFtZV9mb3JtYXQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92cDlfZGVjX2dldF92YWxpZF9mb3JtYXQpOwotICB2cHhfY2xhc3MtPmhhbmRsZV9yZXNvbHV0aW9uX2NoYW5nZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZwOV9kZWNfaGFuZGxlX3Jlc29sdXRpb25fY2hhbmdlKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3ZwOWRlY19kZWJ1ZywgInZwOWRlYyIsIDAsICJWUDkgRGVjb2RlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOV9kZWNfaW5pdCAoR3N0VlA5RGVjICogZ3N0X3ZwOV9kZWMpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGdzdF92cDlfZGVjLCAiZ3N0X3ZwOV9kZWNfaW5pdCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOV9kZWNfc2V0X3N0cmVhbV9pbmZvIChHc3RWUFhEZWMgKiBkZWMsCi0gICAgdnB4X2NvZGVjX3N0cmVhbV9pbmZvX3QgKiBzdHJlYW1faW5mbykKLXsKLSAgLyogRklYTUU6IHBlZWtfc3RyZWFtX2luZm8oKSBkb2VzIG5vdCByZXR1cm4gdmFsaWQgdmFsdWVzLCB0YWtlIGlucHV0IGNhcHMgKi8KLSAgc3RyZWFtX2luZm8tPncgPSBkZWMtPmlucHV0X3N0YXRlLT5pbmZvLndpZHRoOwotICBzdHJlYW1faW5mby0+aCA9IGRlYy0+aW5wdXRfc3RhdGUtPmluZm8uaGVpZ2h0OwotICByZXR1cm47Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZwOV9kZWNfZ2V0X3ZhbGlkX2Zvcm1hdCAoR3N0VlBYRGVjICogZGVjLCB2cHhfaW1hZ2VfdCAqIGltZywKLSAgICBHc3RWaWRlb0Zvcm1hdCAqIGZtdCkKLXsKLSAgc3dpdGNoIChpbWctPmZtdCkgewotICAgIGNhc2UgVlBYX0lNR19GTVRfSTQyMDoKLSAgICAgICpmbXQgPSBHU1RfVklERU9fRk9STUFUX0k0MjA7Ci0gICAgICByZXR1cm4gVFJVRTsKLQotICAgIGNhc2UgVlBYX0lNR19GTVRfWVYxMjoKLSAgICAgICpmbXQgPSBHU1RfVklERU9fRk9STUFUX1lWMTI7Ci0gICAgICByZXR1cm4gVFJVRTsKLQotICAgIGNhc2UgVlBYX0lNR19GTVRfSTQyMjoKLSAgICAgICpmbXQgPSBHU1RfVklERU9fRk9STUFUX1k0MkI7Ci0gICAgICByZXR1cm4gVFJVRTsKLQotICAgIGNhc2UgVlBYX0lNR19GTVRfSTQ0NDoKLSAgICAgICpmbXQgPSBHU1RfVklERU9fRk9STUFUX1k0NDQ7Ci0gICAgICByZXR1cm4gVFJVRTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cDlfZGVjX2hhbmRsZV9yZXNvbHV0aW9uX2NoYW5nZSAoR3N0VlBYRGVjICogZGVjLCB2cHhfaW1hZ2VfdCAqIGltZywKLSAgICBHc3RWaWRlb0Zvcm1hdCBmbXQpCi17Ci0gIEdzdFZQWERlY0NsYXNzICp2cHhjbGFzcyA9IEdTVF9WUFhfREVDX0dFVF9DTEFTUyAoZGVjKTsKLQotICBpZiAoIWRlYy0+b3V0cHV0X3N0YXRlIHx8IGRlYy0+b3V0cHV0X3N0YXRlLT5pbmZvLmZpbmZvLT5mb3JtYXQgIT0gZm10IHx8Ci0gICAgICBkZWMtPm91dHB1dF9zdGF0ZS0+aW5mby53aWR0aCAhPSBpbWctPmRfdyB8fAotICAgICAgZGVjLT5vdXRwdXRfc3RhdGUtPmluZm8uaGVpZ2h0ICE9IGltZy0+ZF9oKSB7Ci0gICAgZ2Jvb2xlYW4gc2VuZF90YWdzID0gIWRlYy0+b3V0cHV0X3N0YXRlOwotCi0gICAgaWYgKGRlYy0+b3V0cHV0X3N0YXRlKQotICAgICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChkZWMtPm91dHB1dF9zdGF0ZSk7Ci0KLSAgICBkZWMtPm91dHB1dF9zdGF0ZSA9Ci0gICAgICAgIGdzdF92aWRlb19kZWNvZGVyX3NldF9vdXRwdXRfc3RhdGUgKEdTVF9WSURFT19ERUNPREVSIChkZWMpLAotICAgICAgICBmbXQsIGltZy0+ZF93LCBpbWctPmRfaCwgZGVjLT5pbnB1dF9zdGF0ZSk7Ci0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfbmVnb3RpYXRlIChHU1RfVklERU9fREVDT0RFUiAoZGVjKSk7Ci0KLSAgICBpZiAoc2VuZF90YWdzKQotICAgICAgdnB4Y2xhc3MtPnNlbmRfdGFncyAoZGVjKTsKLSAgfQotfQotCi0jZW5kaWYgLyogSEFWRV9WUDlfREVDT0RFUiAqLwpkaWZmIC0tZ2l0IGEvZXh0L3ZweC9nc3R2cDlkZWMuaCBiL2V4dC92cHgvZ3N0dnA5ZGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMzMyZjMuLjAwMDAwMDAKLS0tIGEvZXh0L3ZweC9nc3R2cDlkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qIFZQOQotICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDksMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgX19HU1RfVlA5X0RFQ19IX18KLSNkZWZpbmUgX19HU1RfVlA5X0RFQ19IX18KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WUDlfREVDT0RFUgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuaD4KLSNpbmNsdWRlIDxnc3R2cHhkZWMuaD4KLQotLyogRklYTUU6IFVuZGVmIEhBVkVfQ09ORklHX0ggYmVjYXVzZSB2cHhfY29kZWMuaCB1c2VzIGl0LAotICogd2hpY2ggY2F1c2VzIGNvbXBpbGF0aW9uIGZhaWx1cmVzICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI3VuZGVmIEhBVkVfQ09ORklHX0gKLSNlbmRpZgotCi0jaW5jbHVkZSA8dnB4L3ZweF9kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8dnB4L3ZwOGR4Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9WUDlfREVDIFwKLSAgKGdzdF92cDlfZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WUDlfREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVlA5X0RFQyxHc3RWUDlEZWMpKQotI2RlZmluZSBHU1RfVlA5X0RFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WUDlfREVDLEdzdFZQOURlY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1ZQOV9ERUMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WUDlfREVDKSkKLSNkZWZpbmUgR1NUX0lTX1ZQOV9ERUNfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1ZQOV9ERUMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VlA5RGVjIEdzdFZQOURlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWUDlEZWNDbGFzcyBHc3RWUDlEZWNDbGFzczsKLQotc3RydWN0IF9Hc3RWUDlEZWMKLXsKLSAgR3N0VlBYRGVjIGJhc2VfdnB4X2RlY29kZXI7Ci19OwotCi1zdHJ1Y3QgX0dzdFZQOURlY0NsYXNzCi17Ci0gIEdzdFZQWERlY0NsYXNzIGJhc2VfdnB4X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3ZwOV9kZWNfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fR1NUX1ZQOV9ERUNfSF9fICovCmRpZmYgLS1naXQgYS9leHQvdnB4L2dzdHZwOWVuYy5jIGIvZXh0L3ZweC9nc3R2cDllbmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4ZjlhMi4uMDAwMDAwMAotLS0gYS9leHQvdnB4L2dzdHZwOWVuYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qIFZQOQotICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIEVudHJvcHkgV2F2ZSBJbmMKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXZwOWVuYwotICogQHNlZV9hbHNvOiB2cDlkZWMsIHdlYm1tdXgsIG9nZ211eAotICoKLSAqIFRoaXMgZWxlbWVudCBlbmNvZGVzIHJhdyB2aWRlbyBpbnRvIGEgVlA5IHN0cmVhbS4KLSAqIDx1bGluayB1cmw9Imh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnIj5WUDk8L3VsaW5rPiBpcyBhIHJveWFsdHktZnJlZQotICogdmlkZW8gY29kZWMgbWFpbnRhaW5lZCBieSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIj5Hb29nbGUKLSAqIDwvdWxpbms+LiBJdCdzIHRoZSBzdWNjZXNzb3Igb2YgT24yIFZQMywgd2hpY2ggd2FzIHRoZSBiYXNlIG9mIHRoZQotICogVGhlb3JhIHZpZGVvIGNvZGVjLgotICoKLSAqIFRvIGNvbnRyb2wgdGhlIHF1YWxpdHkgb2YgdGhlIGVuY29kaW5nLCB0aGUgI0dzdFZQOUVuYzo6dGFyZ2V0LWJpdHJhdGUsCi0gKiAjR3N0VlA5RW5jOjptaW4tcXVhbnRpemVyLCAjR3N0VlA5RW5jOjptYXgtcXVhbnRpemVyIG9yICNHc3RWUDlFbmM6OmNxLWxldmVsCi0gKiBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkLiBXaGljaCBvbmUgaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSBtb2RlIHNlbGVjdGVkIGJ5Ci0gKiB0aGUgI0dzdFZQOUVuYzo6ZW5kLXVzYWdlIHByb3BlcnR5LgotICogU2VlIDx1bGluayB1cmw9Imh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnL2RvY3MvZW5jb2Rlci1wYXJhbWV0ZXJzLyI+RW5jb2RlciBQYXJhbWV0ZXJzPC91bGluaz4KLSAqIGZvciBleHBsYW5hdGlvbiwgZXhhbXBsZXMgZm9yIHVzZWZ1bCBlbmNvZGluZyBwYXJhbWV0ZXJzIGFuZCBtb3JlIGRldGFpbHMKLSAqIG9uIHRoZSBlbmNvZGluZyBwYXJhbWV0ZXJzLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAwMCAhIHZwOWVuYyAhIHdlYm1tdXggISBmaWxlc2luayBsb2NhdGlvbj12aWRlb3Rlc3RzcmMud2VibQotICogXXwgVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZW5jb2RlIGEgdGVzdCB2aWRlbyBzb3VyY2UgdG8gVlA5IG11eGVkIGluIGFuCi0gKiBXZWJNIGNvbnRhaW5lci4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WUDlfRU5DT0RFUgotCi0vKiBnbGliIGRlY2lkZWQgaW4gMi4zMiBpdCB3b3VsZCBiZSBhIGdyZWF0IGlkZWEgdG8gZGVwcmVjYXRlZCBHVmFsdWVBcnJheSB3aXRob3V0Ci0gKiBwcm92aWRpbmcgYW4gYWx0ZXJuYXRpdmUKLSAqCi0gKiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzIyOAotICogKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0dnA4dXRpbHMuaCIKLSNpbmNsdWRlICJnc3R2cDllbmMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3ZwOWVuY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfdnA5ZW5jX2RlYnVnCi0KLQotLyogRklYTUU6IFk0MkIgYW5kIFk0NDQgZG8gbm90IHdvcmsgeWV0IGl0IHNlZW1zICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZwOV9lbmNfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICAvKkdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgSTQyMCwgWVYxMiwgWTQyQiwgWTQ0NCB9IikpICovCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBJNDIwLCBZVjEyIH0iKSkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZwOV9lbmNfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXZwOSwgIiAicHJvZmlsZSA9IChzdHJpbmcpIHswLCAxLCAyLCAzfSIpCi0gICAgKTsKLQotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X3ZwOV9lbmNfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RWUDlFbmMsIGdzdF92cDlfZW5jLCBHU1RfVFlQRV9WUFhfRU5DKTsKLQotc3RhdGljIHZweF9jb2RlY19pZmFjZV90ICpnc3RfdnA5X2VuY19nZXRfYWxnbyAoR3N0VlBYRW5jICogZW5jKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnA5X2VuY19lbmFibGVfc2NhbGluZyAoR3N0VlBYRW5jICogZW5jKTsKLXN0YXRpYyB2b2lkIGdzdF92cDlfZW5jX3NldF9pbWFnZV9mb3JtYXQgKEdzdFZQWEVuYyAqIGVuYywgdnB4X2ltYWdlX3QgKiBpbWFnZSk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3ZwOV9lbmNfZ2V0X25ld19zaW1wbGVfY2FwcyAoR3N0VlBYRW5jICogZW5jKTsKLXN0YXRpYyB2b2lkIGdzdF92cDlfZW5jX3NldF9zdHJlYW1faW5mbyAoR3N0VlBYRW5jICogZW5jLCBHc3RDYXBzICogY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbmZvKTsKLXN0YXRpYyB2b2lkICpnc3RfdnA5X2VuY19wcm9jZXNzX2ZyYW1lX3VzZXJfZGF0YSAoR3N0VlBYRW5jICogZW5jLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92cDlfZW5jX2hhbmRsZV9pbnZpc2libGVfZnJhbWVfYnVmZmVyIChHc3RWUFhFbmMgKiBlbmMsCi0gICAgdm9pZCAqdXNlcl9kYXRhLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIHZvaWQgZ3N0X3ZwOV9lbmNfc2V0X2ZyYW1lX3VzZXJfZGF0YSAoR3N0VlBYRW5jICogZW5jLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lLCB2cHhfaW1hZ2VfdCAqIGltYWdlKTsKLQotc3RhdGljIHZvaWQKLWdzdF92cDlfZW5jX2NsYXNzX2luaXQgKEdzdFZQOUVuY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR3N0VlBYRW5jQ2xhc3MgKnZweF9lbmNvZGVyX2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICB2cHhfZW5jb2Rlcl9jbGFzcyA9IEdTVF9WUFhfRU5DX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZwOV9lbmNfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZwOV9lbmNfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJPbjIgVlA5IEVuY29kZXIiLAotICAgICAgIkNvZGVjL0VuY29kZXIvVmlkZW8iLAotICAgICAgIkVuY29kZSBWUDkgdmlkZW8gc3RyZWFtcyIsICJEYXZpZCBTY2hsZWVmIDxkc0BlbnRyb3B5d2F2ZS5jb20+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgdnB4X2VuY29kZXJfY2xhc3MtPmdldF9hbGdvID0gZ3N0X3ZwOV9lbmNfZ2V0X2FsZ287Ci0gIHZweF9lbmNvZGVyX2NsYXNzLT5lbmFibGVfc2NhbGluZyA9IGdzdF92cDlfZW5jX2VuYWJsZV9zY2FsaW5nOwotICB2cHhfZW5jb2Rlcl9jbGFzcy0+c2V0X2ltYWdlX2Zvcm1hdCA9IGdzdF92cDlfZW5jX3NldF9pbWFnZV9mb3JtYXQ7Ci0gIHZweF9lbmNvZGVyX2NsYXNzLT5nZXRfbmV3X3ZweF9jYXBzID0gZ3N0X3ZwOV9lbmNfZ2V0X25ld19zaW1wbGVfY2FwczsKLSAgdnB4X2VuY29kZXJfY2xhc3MtPnNldF9zdHJlYW1faW5mbyA9IGdzdF92cDlfZW5jX3NldF9zdHJlYW1faW5mbzsKLSAgdnB4X2VuY29kZXJfY2xhc3MtPnByb2Nlc3NfZnJhbWVfdXNlcl9kYXRhID0KLSAgICAgIGdzdF92cDlfZW5jX3Byb2Nlc3NfZnJhbWVfdXNlcl9kYXRhOwotICB2cHhfZW5jb2Rlcl9jbGFzcy0+aGFuZGxlX2ludmlzaWJsZV9mcmFtZV9idWZmZXIgPQotICAgICAgZ3N0X3ZwOV9lbmNfaGFuZGxlX2ludmlzaWJsZV9mcmFtZV9idWZmZXI7Ci0gIHZweF9lbmNvZGVyX2NsYXNzLT5zZXRfZnJhbWVfdXNlcl9kYXRhID0gZ3N0X3ZwOV9lbmNfc2V0X2ZyYW1lX3VzZXJfZGF0YTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3ZwOWVuY19kZWJ1ZywgInZwOWVuYyIsIDAsICJWUDkgRW5jb2RlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOV9lbmNfaW5pdCAoR3N0VlA5RW5jICogZ3N0X3ZwOV9lbmMpCi17Ci0gIHZweF9jb2RlY19lcnJfdCBzdGF0dXM7Ci0gIEdzdFZQWEVuYyAqZ3N0X3ZweF9lbmMgPSBHU1RfVlBYX0VOQyAoZ3N0X3ZwOV9lbmMpOwotICBHU1RfREVCVUdfT0JKRUNUIChnc3RfdnA5X2VuYywgImdzdF92cDlfZW5jX2luaXQiKTsKLSAgc3RhdHVzID0KLSAgICAgIHZweF9jb2RlY19lbmNfY29uZmlnX2RlZmF1bHQgKGdzdF92cDlfZW5jX2dldF9hbGdvIChnc3RfdnB4X2VuYyksCi0gICAgICAmZ3N0X3ZweF9lbmMtPmNmZywgMCk7Ci0gIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZ3N0X3ZweF9lbmMsCi0gICAgICAgICJGYWlsZWQgdG8gZ2V0IGRlZmF1bHQgZW5jb2RlciBjb25maWd1cmF0aW9uOiAlcyIsCi0gICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gICAgZ3N0X3ZweF9lbmMtPmhhdmVfZGVmYXVsdF9jb25maWcgPSBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfdnB4X2VuYy0+aGF2ZV9kZWZhdWx0X2NvbmZpZyA9IFRSVUU7Ci0gIH0KLX0KLQotc3RhdGljIHZweF9jb2RlY19pZmFjZV90ICoKLWdzdF92cDlfZW5jX2dldF9hbGdvIChHc3RWUFhFbmMgKiBlbmMpCi17Ci0gIHJldHVybiAmdnB4X2NvZGVjX3ZwOV9jeF9hbGdvOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92cDlfZW5jX2VuYWJsZV9zY2FsaW5nIChHc3RWUFhFbmMgKiBlbmMpCi17Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cDlfZW5jX3NldF9pbWFnZV9mb3JtYXQgKEdzdFZQWEVuYyAqIGVuYywgdnB4X2ltYWdlX3QgKiBpbWFnZSkKLXsKLSAgc3dpdGNoIChlbmMtPmlucHV0X3N0YXRlLT5pbmZvLmZpbmZvLT5mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICAgIGltYWdlLT5mbXQgPSBWUFhfSU1HX0ZNVF9JNDIwOwotICAgICAgaW1hZ2UtPmJwcyA9IDEyOwotICAgICAgaW1hZ2UtPnhfY2hyb21hX3NoaWZ0ID0gaW1hZ2UtPnlfY2hyb21hX3NoaWZ0ID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgaW1hZ2UtPmZtdCA9IFZQWF9JTUdfRk1UX1lWMTI7Ci0gICAgICBpbWFnZS0+YnBzID0gMTI7Ci0gICAgICBpbWFnZS0+eF9jaHJvbWFfc2hpZnQgPSBpbWFnZS0+eV9jaHJvbWFfc2hpZnQgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgICBpbWFnZS0+Zm10ID0gVlBYX0lNR19GTVRfSTQyMjsKLSAgICAgIGltYWdlLT5icHMgPSAxNjsKLSAgICAgIGltYWdlLT54X2Nocm9tYV9zaGlmdCA9IDE7Ci0gICAgICBpbWFnZS0+eV9jaHJvbWFfc2hpZnQgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgICBpbWFnZS0+Zm10ID0gVlBYX0lNR19GTVRfSTQ0NDsKLSAgICAgIGltYWdlLT5icHMgPSAyNDsKLSAgICAgIGltYWdlLT54X2Nocm9tYV9zaGlmdCA9IGltYWdlLT55X2Nocm9tYV9zaGlmdCA9IDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfdnA5X2VuY19nZXRfbmV3X3NpbXBsZV9jYXBzIChHc3RWUFhFbmMgKiBlbmMpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdjaGFyICpwcm9maWxlX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgZW5jLT5jZmcuZ19wcm9maWxlKTsKLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXZwOSIsCi0gICAgICAicHJvZmlsZSIsIEdfVFlQRV9TVFJJTkcsIHByb2ZpbGVfc3RyLCBOVUxMKTsKLSAgZ19mcmVlIChwcm9maWxlX3N0cik7Ci0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOV9lbmNfc2V0X3N0cmVhbV9pbmZvIChHc3RWUFhFbmMgKiBlbmMsIEdzdENhcHMgKiBjYXBzLAotICAgIEdzdFZpZGVvSW5mbyAqIGluZm8pCi17Ci0gIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgKgotZ3N0X3ZwOV9lbmNfcHJvY2Vzc19mcmFtZV91c2VyX2RhdGEgKEdzdFZQWEVuYyAqIGVuYywKLSAgICBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSkKLXsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdnA5X2VuY19oYW5kbGVfaW52aXNpYmxlX2ZyYW1lX2J1ZmZlciAoR3N0VlBYRW5jICogZW5jLCB2b2lkICp1c2VyX2RhdGEsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ19tdXRleF91bmxvY2sgKCZlbmMtPmVuY29kZXJfbG9jayk7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaCAoR1NUX1ZJREVPX0VOQ09ERVJfU1JDX1BBRCAoZW5jKSwgYnVmZmVyKTsKLSAgZ19tdXRleF9sb2NrICgmZW5jLT5lbmNvZGVyX2xvY2spOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZwOV9lbmNfdXNlcl9kYXRhX2ZyZWUgKHZweF9pbWFnZV90ICogaW1hZ2UpCi17Ci0gIGdfc2xpY2VfZnJlZSAodnB4X2ltYWdlX3QsIGltYWdlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cDlfZW5jX3NldF9mcmFtZV91c2VyX2RhdGEgKEdzdFZQWEVuYyAqIGVuYywgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUsCi0gICAgdnB4X2ltYWdlX3QgKiBpbWFnZSkKLXsKLSAgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3NldF91c2VyX2RhdGEgKGZyYW1lLCBpbWFnZSwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X3ZwOV9lbmNfdXNlcl9kYXRhX2ZyZWUpOwotICByZXR1cm47Ci19Ci0KLSNlbmRpZiAvKiBIQVZFX1ZQOV9FTkNPREVSICovCmRpZmYgLS1naXQgYS9leHQvdnB4L2dzdHZwOWVuYy5oIGIvZXh0L3ZweC9nc3R2cDllbmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzMzcyYi4uMDAwMDAwMAotLS0gYS9leHQvdnB4L2dzdHZwOWVuYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyogVlA5Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRW50cm9weSBXYXZlIEluYwotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfX0dTVF9WUDlfRU5DX0hfXwotI2RlZmluZSBfX0dTVF9WUDlfRU5DX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1ZQOV9FTkNPREVSCi0KLSNpbmNsdWRlIDxnc3R2cHhlbmMuaD4KLQotLyogRklYTUU6IFVuZGVmIEhBVkVfQ09ORklHX0ggYmVjYXVzZSB2cHhfY29kZWMuaCB1c2VzIGl0LAotICogd2hpY2ggY2F1c2VzIGNvbXBpbGF0aW9uIGZhaWx1cmVzICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI3VuZGVmIEhBVkVfQ09ORklHX0gKLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVlA5X0VOQyBcCi0gIChnc3RfdnA5X2VuY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVlA5X0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1ZQOV9FTkMsR3N0VlA5RW5jKSkKLSNkZWZpbmUgR1NUX1ZQOV9FTkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVlA5X0VOQyxHc3RWUDlFbmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WUDlfRU5DKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVlA5X0VOQykpCi0jZGVmaW5lIEdTVF9JU19WUDlfRU5DX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WUDlfRU5DKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZQOUVuYyBHc3RWUDlFbmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VlA5RW5jQ2xhc3MgR3N0VlA5RW5jQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VlA5RW5jCi17Ci0JR3N0VlBYRW5jIGJhc2VfdnB4X2VuY29kZXI7Ci19OwotCi1zdHJ1Y3QgX0dzdFZQOUVuY0NsYXNzCi17Ci0gIEdzdFZQWEVuY0NsYXNzICBiYXNlX3ZweGVuY19jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF92cDlfZW5jX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0dTVF9WUDlfRU5DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3ZweC9nc3R2cHhkZWMuYyBiL2V4dC92cHgvZ3N0dnB4ZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MDFjNGEuLjAwMDAwMDAKLS0tIGEvZXh0L3ZweC9nc3R2cHhkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDgwNyArMCwwIEBACi0vKiBWUFgKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5LDIwMTAgRW50cm9weSBXYXZlIEluYwotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoSEFWRV9WUDhfREVDT0RFUikgfHwgZGVmaW5lZChIQVZFX1ZQOV9ERUNPREVSKQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3R2cHhkZWMuaCIKLSNpbmNsdWRlICJnc3R2cDh1dGlscy5oIgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3ZweGRlY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfdnB4ZGVjX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9QT1NUX1BST0NFU1NJTkcgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9QT1NUX1BST0NFU1NJTkdfRkxBR1MgKFZQOF9ERUJMT0NLIHwgVlA4X0RFTUFDUk9CTE9DSyB8IFZQOF9NRlFFKQotI2RlZmluZSBERUZBVUxUX0RFQkxPQ0tJTkdfTEVWRUwgNAotI2RlZmluZSBERUZBVUxUX05PSVNFX0xFVkVMIDAKLSNkZWZpbmUgREVGQVVMVF9USFJFQURTIDAKLSNkZWZpbmUgREVGQVVMVF9WSURFT19DT0RFQ19UQUcgTlVMTAotI2RlZmluZSBERUZBVUxUX0NPREVDX0FMR08gTlVMTAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9QT1NUX1BST0NFU1NJTkcsCi0gIFBST1BfUE9TVF9QUk9DRVNTSU5HX0ZMQUdTLAotICBQUk9QX0RFQkxPQ0tJTkdfTEVWRUwsCi0gIFBST1BfTk9JU0VfTEVWRUwsCi0gIFBST1BfVEhSRUFEUwotfTsKLQotI2RlZmluZSBDX0ZMQUdTKHYpICgoZ3VpbnQpIHYpCi0jZGVmaW5lIEdTVF9WUFhfREVDX1RZUEVfUE9TVF9QUk9DRVNTSU5HX0ZMQUdTIChnc3RfdnB4X2RlY19wb3N0X3Byb2Nlc3NpbmdfZmxhZ3NfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3ZweF9kZWNfcG9zdF9wcm9jZXNzaW5nX2ZsYWdzX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgR0ZsYWdzVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge0NfRkxBR1MgKFZQOF9ERUJMT0NLKSwgIkRlYmxvY2siLCAiZGVibG9jayJ9LAotICAgIHtDX0ZMQUdTIChWUDhfREVNQUNST0JMT0NLKSwgIkRlbWFjcm9ibG9jayIsICJkZW1hY3JvYmxvY2sifSwKLSAgICB7Q19GTEFHUyAoVlA4X0FERE5PSVNFKSwgIkFkZCBub2lzZSIsICJhZGRub2lzZSJ9LAotICAgIHtDX0ZMQUdTIChWUDhfTUZRRSksICJNdWx0aS1mcmFtZSBxdWFsaXR5IGVuaGFuY2VtZW50IiwgIm1mcWUifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLSAgc3RhdGljIHZvbGF0aWxlIEdUeXBlIGlkID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKChnc2l6ZSAqKSAmIGlkKSkgewotICAgIEdUeXBlIF9pZDsKLQotICAgIF9pZCA9IGdfZmxhZ3NfcmVnaXN0ZXJfc3RhdGljICgiR3N0VlBYRGVjUG9zdFByb2Nlc3NpbmdGbGFncyIsIHZhbHVlcyk7Ci0KLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoKGdzaXplICopICYgaWQsIF9pZCk7Ci0gIH0KLQotICByZXR1cm4gaWQ7Ci19Ci0KLSN1bmRlZiBDX0ZMQUdTCi0KLXN0YXRpYyB2b2lkIGdzdF92cHhfZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF92cHhfZGVjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF92cHhfZGVjX3N0YXJ0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2RlY19zdG9wIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2RlY19zZXRfZm9ybWF0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAotICAgIEdzdFZpZGVvQ29kZWNTdGF0ZSAqIHN0YXRlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2RlY19mbHVzaCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2Rlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZweF9kZWNfaGFuZGxlX2ZyYW1lIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2RlY19kZWNpZGVfYWxsb2NhdGlvbiAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIHZvaWQgZ3N0X3ZweF9kZWNfaW1hZ2VfdG9fYnVmZmVyIChHc3RWUFhEZWMgKiBkZWMsCi0gICAgY29uc3QgdnB4X2ltYWdlX3QgKiBpbWcsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdnB4X2RlY19vcGVuX2NvZGVjIChHc3RWUFhEZWMgKiBkZWMsCi0gICAgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpOwotc3RhdGljIHZvaWQgZ3N0X3ZweF9kZWNfZGVmYXVsdF9zZW5kX3RhZ3MgKEdzdFZQWERlYyAqIGRlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdnB4X2RlY19zZXRfc3RyZWFtX2luZm8gKEdzdFZQWERlYyAqIGRlYywKLSAgICB2cHhfY29kZWNfc3RyZWFtX2luZm9fdCAqIHN0cmVhbV9pbmZvKTsKLXN0YXRpYyB2b2lkIGdzdF92cHhfZGVjX3NldF9kZWZhdWx0X2Zvcm1hdCAoR3N0VlBYRGVjICogZGVjLCBHc3RWaWRlb0Zvcm1hdCBmbXQsCi0gICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2RlY19kZWZhdWx0X2ZyYW1lX2Zvcm1hdCAoR3N0VlBYRGVjICogZGVjLAotICAgIHZweF9pbWFnZV90ICogaW1nLCBHc3RWaWRlb0Zvcm1hdCAqIGZtdCk7Ci1zdGF0aWMgdm9pZCBnc3RfdnB4X2RlY19oYW5kbGVfcmVzb2x1dGlvbl9jaGFuZ2UgKEdzdFZQWERlYyAqIGRlYywKLSAgICB2cHhfaW1hZ2VfdCAqIGltZywgR3N0VmlkZW9Gb3JtYXQgZm10KTsKLQotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X3ZweF9kZWNfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RWUFhEZWMsIGdzdF92cHhfZGVjLCBHU1RfVFlQRV9WSURFT19ERUNPREVSKTsKLQotc3RhdGljIHZvaWQKLWdzdF92cHhfZGVjX2NsYXNzX2luaXQgKEdzdFZQWERlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0VmlkZW9EZWNvZGVyQ2xhc3MgKmJhc2VfdmlkZW9fZGVjb2Rlcl9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgYmFzZV92aWRlb19kZWNvZGVyX2NsYXNzID0gR1NUX1ZJREVPX0RFQ09ERVJfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdnB4X2RlY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF92cHhfZGVjX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BPU1RfUFJPQ0VTU0lORywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicG9zdC1wcm9jZXNzaW5nIiwgIlBvc3QgUHJvY2Vzc2luZyIsCi0gICAgICAgICAgIkVuYWJsZSBwb3N0IHByb2Nlc3NpbmciLCBERUZBVUxUX1BPU1RfUFJPQ0VTU0lORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BPU1RfUFJPQ0VTU0lOR19GTEFHUywKLSAgICAgIGdfcGFyYW1fc3BlY19mbGFncyAoInBvc3QtcHJvY2Vzc2luZy1mbGFncyIsICJQb3N0IFByb2Nlc3NpbmcgRmxhZ3MiLAotICAgICAgICAgICJGbGFncyB0byBjb250cm9sIHBvc3QgcHJvY2Vzc2luZyIsCi0gICAgICAgICAgR1NUX1ZQWF9ERUNfVFlQRV9QT1NUX1BST0NFU1NJTkdfRkxBR1MsIERFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0ZMQUdTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVCTE9DS0lOR19MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiZGVibG9ja2luZy1sZXZlbCIsICJEZWJsb2NraW5nIExldmVsIiwKLSAgICAgICAgICAiRGVibG9ja2luZyBsZXZlbCIsCi0gICAgICAgICAgMCwgMTYsIERFRkFVTFRfREVCTE9DS0lOR19MRVZFTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05PSVNFX0xFVkVMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJub2lzZS1sZXZlbCIsICJOb2lzZSBMZXZlbCIsCi0gICAgICAgICAgIk5vaXNlIGxldmVsIiwKLSAgICAgICAgICAwLCAxNiwgREVGQVVMVF9OT0lTRV9MRVZFTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RIUkVBRFMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInRocmVhZHMiLCAiTWF4IFRocmVhZHMiLAotICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBkZWNvZGluZyB0aHJlYWRzIiwKLSAgICAgICAgICAwLCAxNiwgREVGQVVMVF9USFJFQURTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBiYXNlX3ZpZGVvX2RlY29kZXJfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92cHhfZGVjX3N0YXJ0KTsKLSAgYmFzZV92aWRlb19kZWNvZGVyX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92cHhfZGVjX3N0b3ApOwotICBiYXNlX3ZpZGVvX2RlY29kZXJfY2xhc3MtPmZsdXNoID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92cHhfZGVjX2ZsdXNoKTsKLSAgYmFzZV92aWRlb19kZWNvZGVyX2NsYXNzLT5zZXRfZm9ybWF0ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdnB4X2RlY19zZXRfZm9ybWF0KTsKLSAgYmFzZV92aWRlb19kZWNvZGVyX2NsYXNzLT5oYW5kbGVfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92cHhfZGVjX2hhbmRsZV9mcmFtZSk7OwotICBiYXNlX3ZpZGVvX2RlY29kZXJfY2xhc3MtPmRlY2lkZV9hbGxvY2F0aW9uID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdnB4X2RlY19kZWNpZGVfYWxsb2NhdGlvbik7Ci0KLSAga2xhc3MtPnZpZGVvX2NvZGVjX3RhZyA9IERFRkFVTFRfVklERU9fQ09ERUNfVEFHOwotICBrbGFzcy0+Y29kZWNfYWxnbyA9IERFRkFVTFRfQ09ERUNfQUxHTzsKLSAga2xhc3MtPm9wZW5fY29kZWMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZweF9kZWNfb3Blbl9jb2RlYyk7Ci0gIGtsYXNzLT5zZW5kX3RhZ3MgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZweF9kZWNfZGVmYXVsdF9zZW5kX3RhZ3MpOwotICBrbGFzcy0+c2V0X3N0cmVhbV9pbmZvID0gTlVMTDsKLSAga2xhc3MtPnNldF9kZWZhdWx0X2Zvcm1hdCA9IE5VTEw7Ci0gIGtsYXNzLT5oYW5kbGVfcmVzb2x1dGlvbl9jaGFuZ2UgPSBOVUxMOwotICBrbGFzcy0+Z2V0X2ZyYW1lX2Zvcm1hdCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZweF9kZWNfZGVmYXVsdF9mcmFtZV9mb3JtYXQpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdnB4ZGVjX2RlYnVnLCAidnB4ZGVjIiwgMCwgIlZQWCBEZWNvZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnB4X2RlY19pbml0IChHc3RWUFhEZWMgKiBnc3RfdnB4X2RlYykKLXsKLSAgR3N0VmlkZW9EZWNvZGVyICpkZWNvZGVyID0gKEdzdFZpZGVvRGVjb2RlciAqKSBnc3RfdnB4X2RlYzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChnc3RfdnB4X2RlYywgImdzdF92cHhfZGVjX2luaXQiKTsKLSAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X3BhY2tldGl6ZWQgKGRlY29kZXIsIFRSVUUpOwotICBnc3RfdnB4X2RlYy0+cG9zdF9wcm9jZXNzaW5nID0gREVGQVVMVF9QT1NUX1BST0NFU1NJTkc7Ci0gIGdzdF92cHhfZGVjLT5wb3N0X3Byb2Nlc3NpbmdfZmxhZ3MgPSBERUZBVUxUX1BPU1RfUFJPQ0VTU0lOR19GTEFHUzsKLSAgZ3N0X3ZweF9kZWMtPmRlYmxvY2tpbmdfbGV2ZWwgPSBERUZBVUxUX0RFQkxPQ0tJTkdfTEVWRUw7Ci0gIGdzdF92cHhfZGVjLT5ub2lzZV9sZXZlbCA9IERFRkFVTFRfTk9JU0VfTEVWRUw7Ci0KLSAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X25lZWRzX2Zvcm1hdCAoZGVjb2RlciwgVFJVRSk7Ci0gIGdzdF92aWRlb19kZWNvZGVyX3NldF91c2VfZGVmYXVsdF9wYWRfYWNjZXB0Y2FwcyAoZGVjb2RlciwgVFJVRSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX1ZJREVPX0RFQ09ERVJfU0lOS19QQUQgKGRlY29kZXIpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cHhfZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWUFhEZWMgKmRlYzsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVlBYX0RFQyAob2JqZWN0KSk7Ci0gIGRlYyA9IEdTVF9WUFhfREVDIChvYmplY3QpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG9iamVjdCwgImdzdF92cHhfZGVjX3NldF9wcm9wZXJ0eSIpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9TVF9QUk9DRVNTSU5HOgotICAgICAgZGVjLT5wb3N0X3Byb2Nlc3NpbmcgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9TVF9QUk9DRVNTSU5HX0ZMQUdTOgotICAgICAgZGVjLT5wb3N0X3Byb2Nlc3NpbmdfZmxhZ3MgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFQkxPQ0tJTkdfTEVWRUw6Ci0gICAgICBkZWMtPmRlYmxvY2tpbmdfbGV2ZWwgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9JU0VfTEVWRUw6Ci0gICAgICBkZWMtPm5vaXNlX2xldmVsID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RIUkVBRFM6Ci0gICAgICBkZWMtPnRocmVhZHMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnB4X2RlY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VlBYRGVjICpkZWM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1ZQWF9ERUMgKG9iamVjdCkpOwotICBkZWMgPSBHU1RfVlBYX0RFQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9TVF9QUk9DRVNTSU5HOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGRlYy0+cG9zdF9wcm9jZXNzaW5nKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1NUX1BST0NFU1NJTkdfRkxBR1M6Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIGRlYy0+cG9zdF9wcm9jZXNzaW5nX2ZsYWdzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ERUJMT0NLSU5HX0xFVkVMOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGRlYy0+ZGVibG9ja2luZ19sZXZlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9JU0VfTEVWRUw6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgZGVjLT5ub2lzZV9sZXZlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEhSRUFEUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBkZWMtPnRocmVhZHMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92cHhfZGVjX3N0YXJ0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBHc3RWUFhEZWMgKmdzdF92cHhfZGVjID0gR1NUX1ZQWF9ERUMgKGRlY29kZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGdzdF92cHhfZGVjLCAic3RhcnQiKTsKLSAgZ3N0X3ZweF9kZWMtPmRlY29kZXJfaW5pdGVkID0gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZweF9kZWNfc3RvcCAoR3N0VmlkZW9EZWNvZGVyICogYmFzZV92aWRlb19kZWNvZGVyKQotewotICBHc3RWUFhEZWMgKmdzdF92cHhfZGVjID0gR1NUX1ZQWF9ERUMgKGJhc2VfdmlkZW9fZGVjb2Rlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZ3N0X3ZweF9kZWMsICJzdG9wIik7Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5vdXRwdXRfc3RhdGUpIHsKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKGdzdF92cHhfZGVjLT5vdXRwdXRfc3RhdGUpOwotICAgIGdzdF92cHhfZGVjLT5vdXRwdXRfc3RhdGUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5pbnB1dF9zdGF0ZSkgewotICAgIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAoZ3N0X3ZweF9kZWMtPmlucHV0X3N0YXRlKTsKLSAgICBnc3RfdnB4X2RlYy0+aW5wdXRfc3RhdGUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5kZWNvZGVyX2luaXRlZCkKLSAgICB2cHhfY29kZWNfZGVzdHJveSAoJmdzdF92cHhfZGVjLT5kZWNvZGVyKTsKLSAgZ3N0X3ZweF9kZWMtPmRlY29kZXJfaW5pdGVkID0gRkFMU0U7Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5wb29sKSB7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKGdzdF92cHhfZGVjLT5wb29sLCBGQUxTRSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZ3N0X3ZweF9kZWMtPnBvb2wpOwotICAgIGdzdF92cHhfZGVjLT5wb29sID0gTlVMTDsKLSAgICBnc3RfdnB4X2RlYy0+YnVmX3NpemUgPSAwOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZweF9kZWNfc2V0X2Zvcm1hdCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwgR3N0VmlkZW9Db2RlY1N0YXRlICogc3RhdGUpCi17Ci0gIEdzdFZQWERlYyAqZ3N0X3ZweF9kZWMgPSBHU1RfVlBYX0RFQyAoZGVjb2Rlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZ3N0X3ZweF9kZWMsICJzZXRfZm9ybWF0Iik7Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5kZWNvZGVyX2luaXRlZCkKLSAgICB2cHhfY29kZWNfZGVzdHJveSAoJmdzdF92cHhfZGVjLT5kZWNvZGVyKTsKLSAgZ3N0X3ZweF9kZWMtPmRlY29kZXJfaW5pdGVkID0gRkFMU0U7Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5vdXRwdXRfc3RhdGUpIHsKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKGdzdF92cHhfZGVjLT5vdXRwdXRfc3RhdGUpOwotICAgIGdzdF92cHhfZGVjLT5vdXRwdXRfc3RhdGUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGdzdF92cHhfZGVjLT5pbnB1dF9zdGF0ZSkgewotICAgIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAoZ3N0X3ZweF9kZWMtPmlucHV0X3N0YXRlKTsKLSAgfQotCi0gIGdzdF92cHhfZGVjLT5pbnB1dF9zdGF0ZSA9IGdzdF92aWRlb19jb2RlY19zdGF0ZV9yZWYgKHN0YXRlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdnB4X2RlY19mbHVzaCAoR3N0VmlkZW9EZWNvZGVyICogYmFzZV92aWRlb19kZWNvZGVyKQotewotICBHc3RWUFhEZWMgKmRlY29kZXI7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZV92aWRlb19kZWNvZGVyLCAiZmx1c2giKTsKLQotICBkZWNvZGVyID0gR1NUX1ZQWF9ERUMgKGJhc2VfdmlkZW9fZGVjb2Rlcik7Ci0KLSAgaWYgKGRlY29kZXItPm91dHB1dF9zdGF0ZSkgewotICAgIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAoZGVjb2Rlci0+b3V0cHV0X3N0YXRlKTsKLSAgICBkZWNvZGVyLT5vdXRwdXRfc3RhdGUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGRlY29kZXItPmRlY29kZXJfaW5pdGVkKQotICAgIHZweF9jb2RlY19kZXN0cm95ICgmZGVjb2Rlci0+ZGVjb2Rlcik7Ci0gIGRlY29kZXItPmRlY29kZXJfaW5pdGVkID0gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnB4X2RlY19kZWZhdWx0X3NlbmRfdGFncyAoR3N0VlBYRGVjICogZGVjKQotewotICBHc3RUYWdMaXN0ICpsaXN0OwotICBHc3RWUFhEZWNDbGFzcyAqdnB4Y2xhc3MgPSBHU1RfVlBYX0RFQ19HRVRfQ0xBU1MgKGRlYyk7Ci0KLSAgaWYgKHZweGNsYXNzLT52aWRlb19jb2RlY190YWcgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgIEdTVF9UQUdfVklERU9fQ09ERUMsIHZweGNsYXNzLT52aWRlb19jb2RlY190YWcsIE5VTEwpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX1ZJREVPX0RFQ09ERVJfU1JDX1BBRCAoZGVjKSwKLSAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChsaXN0KSk7Ci19Ci0KLSNpZmRlZiBIQVZFX1ZQWF8xXzQKLXN0cnVjdCBGcmFtZQotewotICBHc3RNYXBJbmZvIGluZm87Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotfTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfdnB4X2RlY19wcmVwYXJlX2ltYWdlIChHc3RWUFhEZWMgKiBkZWMsIGNvbnN0IHZweF9pbWFnZV90ICogaW1nKQotewotICBnaW50IGNvbXA7Ci0gIEdzdFZpZGVvTWV0YSAqdm1ldGE7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBzdHJ1Y3QgRnJhbWUgKmZyYW1lID0gaW1nLT5mYl9wcml2OwotICBHc3RWaWRlb0luZm8gKmluZm8gPSAmZGVjLT5vdXRwdXRfc3RhdGUtPmluZm87Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYgKGZyYW1lLT5idWZmZXIpOwotCi0gIHZtZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fbWV0YSAoYnVmZmVyKTsKLSAgdm1ldGEtPmZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5mbyk7Ci0gIHZtZXRhLT53aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKTsKLSAgdm1ldGEtPmhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5mbyk7Ci0gIHZtZXRhLT5uX3BsYW5lcyA9IEdTVF9WSURFT19JTkZPX05fUExBTkVTIChpbmZvKTsKLQotICBmb3IgKGNvbXAgPSAwOyBjb21wIDwgNDsgY29tcCsrKSB7Ci0gICAgdm1ldGEtPnN0cmlkZVtjb21wXSA9IGltZy0+c3RyaWRlW2NvbXBdOwotICAgIHZtZXRhLT5vZmZzZXRbY29tcF0gPQotICAgICAgICBpbWctPnBsYW5lc1tjb21wXSA/IGltZy0+cGxhbmVzW2NvbXBdIC0gZnJhbWUtPmluZm8uZGF0YSA6IDA7Ci0gIH0KLQotICAvKiBGSVhNRSBUaGlzIGlzIGEgUkVBRC9XUklURSBtYXBwZWQgYnVmZmVyIHNlZSBidWcgIzc1NDgyNiAqLwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0YXRpYyBpbnQKLWdzdF92cHhfZGVjX2dldF9idWZmZXJfY2IgKGdwb2ludGVyIHByaXYsIGdzaXplIG1pbl9zaXplLAotICAgIHZweF9jb2RlY19mcmFtZV9idWZmZXJfdCAqIGZiKQotewotICBHc3RWUFhEZWMgKmRlYyA9IHByaXY7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLSAgc3RydWN0IEZyYW1lICpmcmFtZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgaWYgKCFkZWMtPnBvb2wgfHwgZGVjLT5idWZfc2l6ZSAhPSBtaW5fc2l6ZSkgewotICAgIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gICAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLSAgICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLQotICAgIGlmIChkZWMtPnBvb2wpIHsKLSAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChkZWMtPnBvb2wsIEZBTFNFKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlYy0+cG9vbCk7Ci0gICAgICBkZWMtPnBvb2wgPSBOVUxMOwotICAgICAgZGVjLT5idWZfc2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfZ2V0X2FsbG9jYXRvciAoR1NUX1ZJREVPX0RFQ09ERVIgKGRlYyksICZhbGxvY2F0b3IsCi0gICAgICAgICZwYXJhbXMpOwotCi0gICAgaWYgKGFsbG9jYXRvciAmJgotICAgICAgICBHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChhbGxvY2F0b3IsIEdTVF9BTExPQ0FUT1JfRkxBR19DVVNUT01fQUxMT0MpKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChhbGxvY2F0b3IpOwotICAgICAgYWxsb2NhdG9yID0gTlVMTDsKLSAgICB9Ci0KLSAgICBwb29sID0gZ3N0X2J1ZmZlcl9wb29sX25ldyAoKTsKLSAgICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8vaW50ZXJuYWwiKTsKLSAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgY2FwcywgbWluX3NpemUsIDIsIDApOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKTsKLQotICAgIGlmIChhbGxvY2F0b3IpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChhbGxvY2F0b3IpOwotCi0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGNyZWF0ZSBpbnRlcm5hbCBwb29sIik7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBkZWMtPnBvb2wgPSBwb29sOwotICAgIGRlYy0+YnVmX3NpemUgPSBtaW5fc2l6ZTsKLSAgfQotCi0gIHJldCA9IGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoZGVjLT5wb29sLCAmYnVmZmVyLCBOVUxMKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIGFjcXVpcmUgYnVmZmVyIGZyb20gaW50ZXJuYWwgcG9vbC4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBBZGQgaXQgbm93LCB3aGlsZSB0aGUgYnVmZmVyIGlzIHdyaXRhYmxlICovCi0gIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21ldGEgKGJ1ZmZlciwgR1NUX1ZJREVPX0ZSQU1FX0ZMQUdfTk9ORSwKLSAgICAgIEdTVF9WSURFT19GT1JNQVRfRU5DT0RFRCwgMCwgMCk7Ci0KLSAgZnJhbWUgPSBnX25ldzAgKHN0cnVjdCBGcmFtZSwgMSk7Ci0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmZyYW1lLT5pbmZvLCBHU1RfTUFQX1JFQURXUklURSkpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGdfZnJlZSAoZnJhbWUpOwotICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIG1hcCBidWZmZXIgZnJvbSBpbnRlcm5hbCBwb29sLiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGZiLT5zaXplID0gZnJhbWUtPmluZm8uc2l6ZTsKLSAgZmItPmRhdGEgPSBmcmFtZS0+aW5mby5kYXRhOwotICBmcmFtZS0+YnVmZmVyID0gYnVmZmVyOwotICBmYi0+cHJpdiA9IGZyYW1lOwotCi0gIEdTVF9UUkFDRV9PQkpFQ1QgKHByaXYsICJBbGxvY2F0ZWQgYnVmZmVyICVwIiwgZnJhbWUtPmJ1ZmZlcik7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWdzdF92cHhfZGVjX3JlbGVhc2VfYnVmZmVyX2NiIChncG9pbnRlciBwcml2LCB2cHhfY29kZWNfZnJhbWVfYnVmZmVyX3QgKiBmYikKLXsKLSAgc3RydWN0IEZyYW1lICpmcmFtZSA9IGZiLT5wcml2OwotCi0gIC8qIFdlJ3JlIHNvbWV0aW1lcyBjYWxsZWQgd2l0aG91dCBhIGZyYW1lICovCi0gIGlmICghZnJhbWUpCi0gICAgcmV0dXJuIDA7Ci0KLSAgR1NUX1RSQUNFX09CSkVDVCAocHJpdiwgIlJlbGVhc2UgYnVmZmVyICVwIiwgZnJhbWUtPmJ1ZmZlcik7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoZnJhbWUtPmJ1ZmZlciwgJmZyYW1lLT5pbmZvKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPmJ1ZmZlcik7Ci0gIGdfZnJlZSAoZnJhbWUpOwotCi0gIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1nc3RfdnB4X2RlY19pbWFnZV90b19idWZmZXIgKEdzdFZQWERlYyAqIGRlYywgY29uc3QgdnB4X2ltYWdlX3QgKiBpbWcsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBpbnQgZGVzdHN0cmlkZSwgc3Jjc3RyaWRlLCBoZWlnaHQsIHdpZHRoLCBsaW5lLCBjb21wOwotICBndWludDggKmRlc3QsICpzcmM7Ci0gIEdzdFZpZGVvRnJhbWUgZnJhbWU7Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbyA9ICZkZWMtPm91dHB1dF9zdGF0ZS0+aW5mbzsKLQotICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgaW5mbywgYnVmZmVyLCBHU1RfTUFQX1dSSVRFKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlYywgIkNvdWxkIG5vdCBtYXAgdmlkZW8gYnVmZmVyIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZm9yIChjb21wID0gMDsgY29tcCA8IDM7IGNvbXArKykgewotICAgIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBICgmZnJhbWUsIGNvbXApOwotICAgIHNyYyA9IGltZy0+cGxhbmVzW2NvbXBdOwotICAgIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKCZmcmFtZSwgY29tcCkKLSAgICAgICAgKiBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFICgmZnJhbWUsIGNvbXApOwotICAgIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoJmZyYW1lLCBjb21wKTsKLSAgICBkZXN0c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFICgmZnJhbWUsIGNvbXApOwotICAgIHNyY3N0cmlkZSA9IGltZy0+c3RyaWRlW2NvbXBdOwotCi0gICAgaWYgKHNyY3N0cmlkZSA9PSBkZXN0c3RyaWRlKSB7Ci0gICAgICBHU1RfVFJBQ0VfT0JKRUNUIChkZWMsICJTdHJpZGUgbWF0Y2hlcy4gQ29tcCAlZDogJWQsIGNvcHlpbmcgZnVsbCBwbGFuZSIsCi0gICAgICAgICAgY29tcCwgc3Jjc3RyaWRlKTsKLSAgICAgIG1lbWNweSAoZGVzdCwgc3JjLCBzcmNzdHJpZGUgKiBoZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfVFJBQ0VfT0JKRUNUIChkZWMsICJTdHJpZGUgbWlzbWF0Y2guIENvbXAgJWQ6ICVkICE9ICVkLCBjb3B5aW5nICIKLSAgICAgICAgICAibGluZSBieSBsaW5lLiIsIGNvbXAsIHNyY3N0cmlkZSwgZGVzdHN0cmlkZSk7Ci0gICAgICBmb3IgKGxpbmUgPSAwOyBsaW5lIDwgaGVpZ2h0OyBsaW5lKyspIHsKLSAgICAgICAgbWVtY3B5IChkZXN0LCBzcmMsIHdpZHRoKTsKLSAgICAgICAgZGVzdCArPSBkZXN0c3RyaWRlOwotICAgICAgICBzcmMgKz0gc3Jjc3RyaWRlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92cHhfZGVjX29wZW5fY29kZWMgKEdzdFZQWERlYyAqIGRlYywgR3N0VmlkZW9Db2RlY0ZyYW1lICogZnJhbWUpCi17Ci0gIGludCBmbGFncyA9IDA7Ci0gIHZweF9jb2RlY19zdHJlYW1faW5mb190IHN0cmVhbV9pbmZvOwotICB2cHhfY29kZWNfY2Fwc190IGNhcHM7Ci0gIHZweF9jb2RlY19kZWNfY2ZnX3QgY2ZnOwotICB2cHhfY29kZWNfZXJyX3Qgc3RhdHVzOwotICBHc3RNYXBJbmZvIG1pbmZvOwotICBHc3RWUFhEZWNDbGFzcyAqdnB4Y2xhc3MgPSBHU1RfVlBYX0RFQ19HRVRfQ0xBU1MgKGRlYyk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZweGNsYXNzLT5jb2RlY19hbGdvICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBtZW1zZXQgKCZzdHJlYW1faW5mbywgMCwgc2l6ZW9mIChzdHJlYW1faW5mbykpOwotICBtZW1zZXQgKCZjZmcsIDAsIHNpemVvZiAoY2ZnKSk7Ci0gIHN0cmVhbV9pbmZvLnN6ID0gc2l6ZW9mIChzdHJlYW1faW5mbyk7Ci0KLSAgaWYgKCFnc3RfYnVmZmVyX21hcCAoZnJhbWUtPmlucHV0X2J1ZmZlciwgJm1pbmZvLCBHU1RfTUFQX1JFQUQpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVjLCAiRmFpbGVkIHRvIG1hcCBpbnB1dCBidWZmZXIiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBzdGF0dXMgPSB2cHhfY29kZWNfcGVla19zdHJlYW1faW5mbyAodnB4Y2xhc3MtPmNvZGVjX2FsZ28sCi0gICAgICBtaW5mby5kYXRhLCBtaW5mby5zaXplLCAmc3RyZWFtX2luZm8pOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGZyYW1lLT5pbnB1dF9idWZmZXIsICZtaW5mbyk7Ci0KLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgIlZQWCBwcmVwcm9jZXNzaW5nIGVycm9yOiAlcyIsCi0gICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE7Ci0gIH0KLSAgaWYgKCFzdHJlYW1faW5mby5pc19rZikgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjLCAiTm8ga2V5ZnJhbWUsIHNraXBwaW5nIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzE7Ci0gIH0KLQotICBnc3RfdnB4X2RlY19zZXRfc3RyZWFtX2luZm8gKGRlYywgJnN0cmVhbV9pbmZvKTsKLSAgZ3N0X3ZweF9kZWNfc2V0X2RlZmF1bHRfZm9ybWF0IChkZWMsIEdTVF9WSURFT19GT1JNQVRfSTQyMCwgc3RyZWFtX2luZm8udywKLSAgICAgIHN0cmVhbV9pbmZvLmgpOwotCi0gIGNmZy53ID0gc3RyZWFtX2luZm8udzsKLSAgY2ZnLmggPSBzdHJlYW1faW5mby5oOwotCi0gIGlmIChkZWMtPnRocmVhZHMgPiAwKQotICAgIGNmZy50aHJlYWRzID0gZGVjLT50aHJlYWRzOwotICBlbHNlCi0gICAgY2ZnLnRocmVhZHMgPSBnX2dldF9udW1fcHJvY2Vzc29ycyAoKTsKLQotICBjYXBzID0gdnB4X2NvZGVjX2dldF9jYXBzICh2cHhjbGFzcy0+Y29kZWNfYWxnbyk7Ci0KLSAgaWYgKGRlYy0+cG9zdF9wcm9jZXNzaW5nKSB7Ci0gICAgaWYgKCEoY2FwcyAmIFZQWF9DT0RFQ19DQVBfUE9TVFBST0MpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgIkRlY29kZXIgZG9lcyBub3Qgc3VwcG9ydCBwb3N0IHByb2Nlc3NpbmciKTsKLSAgICB9IGVsc2UgewotICAgICAgZmxhZ3MgfD0gVlBYX0NPREVDX1VTRV9QT1NUUFJPQzsKLSAgICB9Ci0gIH0KLQotICBzdGF0dXMgPQotICAgICAgdnB4X2NvZGVjX2RlY19pbml0ICgmZGVjLT5kZWNvZGVyLCB2cHhjbGFzcy0+Y29kZWNfYWxnbywgJmNmZywgZmxhZ3MpOwotICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWMsIExJQlJBUlksIElOSVQsCi0gICAgICAgICgiRmFpbGVkIHRvIGluaXRpYWxpemUgVlA4IGRlY29kZXIiKSwgKCIlcyIsCi0gICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBpZiAoKGNhcHMgJiBWUFhfQ09ERUNfQ0FQX1BPU1RQUk9DKSAmJiBkZWMtPnBvc3RfcHJvY2Vzc2luZykgewotICAgIHZwOF9wb3N0cHJvY19jZmdfdCBwcF9jZmcgPSB7IDAsIH07Ci0KLSAgICBwcF9jZmcucG9zdF9wcm9jX2ZsYWcgPSBkZWMtPnBvc3RfcHJvY2Vzc2luZ19mbGFnczsKLSAgICBwcF9jZmcuZGVibG9ja2luZ19sZXZlbCA9IGRlYy0+ZGVibG9ja2luZ19sZXZlbDsKLSAgICBwcF9jZmcubm9pc2VfbGV2ZWwgPSBkZWMtPm5vaXNlX2xldmVsOwotCi0gICAgc3RhdHVzID0gdnB4X2NvZGVjX2NvbnRyb2wgKCZkZWMtPmRlY29kZXIsIFZQOF9TRVRfUE9TVFBST0MsICZwcF9jZmcpOwotICAgIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgIkNvdWxkbid0IHNldCBwb3N0cHJvY2Vzc2luZyBzZXR0aW5nczogJXMiLAotICAgICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gICAgfQotICB9Ci0jaWZkZWYgSEFWRV9WUFhfMV80Ci0gIHZweF9jb2RlY19zZXRfZnJhbWVfYnVmZmVyX2Z1bmN0aW9ucyAoJmRlYy0+ZGVjb2RlciwKLSAgICAgIGdzdF92cHhfZGVjX2dldF9idWZmZXJfY2IsIGdzdF92cHhfZGVjX3JlbGVhc2VfYnVmZmVyX2NiLCBkZWMpOwotI2VuZGlmCi0KLSAgZGVjLT5kZWNvZGVyX2luaXRlZCA9IFRSVUU7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZweF9kZWNfaGFuZGxlX2ZyYW1lIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLCBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0VlBYRGVjICpkZWM7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIHZweF9jb2RlY19lcnJfdCBzdGF0dXM7Ci0gIHZweF9jb2RlY19pdGVyX3QgaXRlciA9IE5VTEw7Ci0gIHZweF9pbWFnZV90ICppbWc7Ci0gIGxvbmcgZGVjb2Rlcl9kZWFkbGluZSA9IDA7Ci0gIEdzdENsb2NrVGltZURpZmYgZGVhZGxpbmU7Ci0gIEdzdE1hcEluZm8gbWluZm87Ci0gIEdzdFZQWERlY0NsYXNzICp2cHhjbGFzczsKLSAgR3N0VmlkZW9Gb3JtYXQgZm10OwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZWNvZGVyLCAiaGFuZGxlX2ZyYW1lIik7Ci0KLSAgZGVjID0gR1NUX1ZQWF9ERUMgKGRlY29kZXIpOwotICB2cHhjbGFzcyA9IEdTVF9WUFhfREVDX0dFVF9DTEFTUyAoZGVjKTsKLQotICBpZiAoIWRlYy0+ZGVjb2Rlcl9pbml0ZWQpIHsKLSAgICByZXQgPSB2cHhjbGFzcy0+b3Blbl9jb2RlYyAoZGVjLCBmcmFtZSk7Ci0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19DVVNUT01fU1VDQ0VTU18xKSB7Ci0gICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9kcm9wX2ZyYW1lIChkZWNvZGVyLCBmcmFtZSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfSBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiAoZnJhbWUpOwotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gIH0KLQotICBkZWFkbGluZSA9IGdzdF92aWRlb19kZWNvZGVyX2dldF9tYXhfZGVjb2RlX3RpbWUgKGRlY29kZXIsIGZyYW1lKTsKLSAgaWYgKGRlYWRsaW5lIDwgMCkgewotICAgIGRlY29kZXJfZGVhZGxpbmUgPSAxOwotICB9IGVsc2UgaWYgKGRlYWRsaW5lID09IEdfTUFYSU5UNjQpIHsKLSAgICBkZWNvZGVyX2RlYWRsaW5lID0gMDsKLSAgfSBlbHNlIHsKLSAgICBkZWNvZGVyX2RlYWRsaW5lID0gTUFYICgxLCBkZWFkbGluZSAvIEdTVF9NU0VDT05EKTsKLSAgfQotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGZyYW1lLT5pbnB1dF9idWZmZXIsICZtaW5mbywgR1NUX01BUF9SRUFEKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlYywgIkZhaWxlZCB0byBtYXAgaW5wdXQgYnVmZmVyIik7Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3VucmVmIChmcmFtZSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgc3RhdHVzID0gdnB4X2NvZGVjX2RlY29kZSAoJmRlYy0+ZGVjb2RlciwKLSAgICAgIG1pbmZvLmRhdGEsIG1pbmZvLnNpemUsIE5VTEwsIGRlY29kZXJfZGVhZGxpbmUpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGZyYW1lLT5pbnB1dF9idWZmZXIsICZtaW5mbyk7Ci0KLSAgaWYgKHN0YXR1cykgewotICAgIEdTVF9WSURFT19ERUNPREVSX0VSUk9SIChkZWNvZGVyLCAxLCBMSUJSQVJZLCBFTkNPREUsCi0gICAgICAgICgiRmFpbGVkIHRvIGRlY29kZSBmcmFtZSIpLCAoIiVzIiwgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKSwgcmV0KTsKLSAgICBnc3RfdmlkZW9fY29kZWNfZnJhbWVfdW5yZWYgKGZyYW1lKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgaW1nID0gdnB4X2NvZGVjX2dldF9mcmFtZSAoJmRlYy0+ZGVjb2RlciwgJml0ZXIpOwotICBpZiAoaW1nKSB7Ci0gICAgaWYgKHZweGNsYXNzLT5nZXRfZnJhbWVfZm9ybWF0IChkZWMsIGltZywgJmZtdCkgPT0gRkFMU0UpIHsKLSAgICAgIHZweF9pbWdfZnJlZSAoaW1nKTsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZWNvZGVyLCBMSUJSQVJZLCBFTkNPREUsCi0gICAgICAgICAgKCJGYWlsZWQgdG8gZGVjb2RlIGZyYW1lIiksICgiVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0ICVkIiwKLSAgICAgICAgICAgICAgaW1nLT5mbXQpKTsKLSAgICAgIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiAoZnJhbWUpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChkZWFkbGluZSA8IDApIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkZWMsICJTa2lwcGluZyBsYXRlIGZyYW1lICglZiBzIHBhc3QgZGVhZGxpbmUpIiwKLSAgICAgICAgICAoZG91YmxlKSAtZGVhZGxpbmUgLyBHU1RfU0VDT05EKTsKLSAgICAgIGdzdF92aWRlb19kZWNvZGVyX2Ryb3BfZnJhbWUgKGRlY29kZXIsIGZyYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X3ZweF9kZWNfaGFuZGxlX3Jlc29sdXRpb25fY2hhbmdlIChkZWMsIGltZywgZm10KTsKLSNpZmRlZiBIQVZFX1ZQWF8xXzQKLSAgICAgIGlmIChpbWctPmZiX3ByaXYgJiYgZGVjLT5oYXZlX3ZpZGVvX21ldGEpIHsKLSAgICAgICAgZnJhbWUtPm91dHB1dF9idWZmZXIgPSBnc3RfdnB4X2RlY19wcmVwYXJlX2ltYWdlIChkZWMsIGltZyk7Ci0gICAgICAgIHJldCA9IGdzdF92aWRlb19kZWNvZGVyX2ZpbmlzaF9mcmFtZSAoZGVjb2RlciwgZnJhbWUpOwotICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgIHsKLSAgICAgICAgcmV0ID0gZ3N0X3ZpZGVvX2RlY29kZXJfYWxsb2NhdGVfb3V0cHV0X2ZyYW1lIChkZWNvZGVyLCBmcmFtZSk7Ci0KLSAgICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykgewotICAgICAgICAgIGdzdF92cHhfZGVjX2ltYWdlX3RvX2J1ZmZlciAoZGVjLCBpbWcsIGZyYW1lLT5vdXRwdXRfYnVmZmVyKTsKLSAgICAgICAgICByZXQgPSBnc3RfdmlkZW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKGRlY29kZXIsIGZyYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfdmlkZW9fZGVjb2Rlcl9kcm9wX2ZyYW1lIChkZWNvZGVyLCBmcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2cHhfaW1nX2ZyZWUgKGltZyk7Ci0KLSAgICB3aGlsZSAoKGltZyA9IHZweF9jb2RlY19nZXRfZnJhbWUgKCZkZWMtPmRlY29kZXIsICZpdGVyKSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjb2RlciwgIk11bHRpcGxlIGRlY29kZWQgZnJhbWVzLi4uIGRyb3BwaW5nIik7Ci0gICAgICB2cHhfaW1nX2ZyZWUgKGltZyk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIEludmlzaWJsZSBmcmFtZSAqLwotICAgIEdTVF9WSURFT19DT0RFQ19GUkFNRV9TRVRfREVDT0RFX09OTFkgKGZyYW1lKTsKLSAgICBnc3RfdmlkZW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKGRlY29kZXIsIGZyYW1lKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZweF9kZWNfZGVjaWRlX2FsbG9jYXRpb24gKEdzdFZpZGVvRGVjb2RlciAqIGJkZWMsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFZQWERlYyAqZGVjID0gR1NUX1ZQWF9ERUMgKGJkZWMpOwotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLQotICBpZiAoIUdTVF9WSURFT19ERUNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kZWNpZGVfYWxsb2NhdGlvbiAoYmRlYywgcXVlcnkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnX2Fzc2VydCAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KSA+IDApOwotICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsICZwb29sLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgZ19hc3NlcnQgKHBvb2wgIT0gTlVMTCk7Ci0KLSAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKHBvb2wpOwotICBpZiAoZ3N0X3F1ZXJ5X2ZpbmRfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUsIE5VTEwpKSB7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19hZGRfb3B0aW9uIChjb25maWcsCi0gICAgICAgIEdTVF9CVUZGRVJfUE9PTF9PUFRJT05fVklERU9fTUVUQSk7Ci0gICAgZGVjLT5oYXZlX3ZpZGVvX21ldGEgPSBUUlVFOwotICB9Ci0gIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cHhfZGVjX3NldF9zdHJlYW1faW5mbyAoR3N0VlBYRGVjICogZGVjLAotICAgIHZweF9jb2RlY19zdHJlYW1faW5mb190ICogc3RyZWFtX2luZm8pCi17Ci0gIEdzdFZQWERlY0NsYXNzICp2cHhjbGFzcyA9IEdTVF9WUFhfREVDX0dFVF9DTEFTUyAoZGVjKTsKLSAgaWYgKHZweGNsYXNzLT5zZXRfc3RyZWFtX2luZm8gIT0gTlVMTCkgewotICAgIHZweGNsYXNzLT5zZXRfc3RyZWFtX2luZm8gKGRlYywgc3RyZWFtX2luZm8pOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdnB4X2RlY19zZXRfZGVmYXVsdF9mb3JtYXQgKEdzdFZQWERlYyAqIGRlYywgR3N0VmlkZW9Gb3JtYXQgZm10LCBpbnQgd2lkdGgsCi0gICAgaW50IGhlaWdodCkKLXsKLSAgR3N0VlBYRGVjQ2xhc3MgKnZweGNsYXNzID0gR1NUX1ZQWF9ERUNfR0VUX0NMQVNTIChkZWMpOwotICBpZiAodnB4Y2xhc3MtPnNldF9kZWZhdWx0X2Zvcm1hdCAhPSBOVUxMKSB7Ci0gICAgdnB4Y2xhc3MtPnNldF9kZWZhdWx0X2Zvcm1hdCAoZGVjLCBmbXQsIHdpZHRoLCBoZWlnaHQpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZweF9kZWNfZGVmYXVsdF9mcmFtZV9mb3JtYXQgKEdzdFZQWERlYyAqIGRlYywgdnB4X2ltYWdlX3QgKiBpbWcsCi0gICAgR3N0VmlkZW9Gb3JtYXQgKiBmbXQpCi17Ci0gIGlmIChpbWctPmZtdCA9PSBWUFhfSU1HX0ZNVF9JNDIwKSB7Ci0gICAgKmZtdCA9IEdTVF9WSURFT19GT1JNQVRfSTQyMDsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZweF9kZWNfaGFuZGxlX3Jlc29sdXRpb25fY2hhbmdlIChHc3RWUFhEZWMgKiBkZWMsIHZweF9pbWFnZV90ICogaW1nLAotICAgIEdzdFZpZGVvRm9ybWF0IGZtdCkKLXsKLSAgR3N0VlBYRGVjQ2xhc3MgKnZweGNsYXNzID0gR1NUX1ZQWF9ERUNfR0VUX0NMQVNTIChkZWMpOwotICBpZiAodnB4Y2xhc3MtPmhhbmRsZV9yZXNvbHV0aW9uX2NoYW5nZSAhPSBOVUxMKSB7Ci0gICAgdnB4Y2xhc3MtPmhhbmRsZV9yZXNvbHV0aW9uX2NoYW5nZSAoZGVjLCBpbWcsIGZtdCk7Ci0gIH0KLX0KLQotI2VuZGlmIC8qIEhBVkVfVlA4X0RFQ09ERVIgfHwgIEhBVkVfVlA5X0RFQ09ERVIgKi8KZGlmZiAtLWdpdCBhL2V4dC92cHgvZ3N0dnB4ZGVjLmggYi9leHQvdnB4L2dzdHZweGRlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODUyZjg2Li4wMDAwMDAwCi0tLSBhL2V4dC92cHgvZ3N0dnB4ZGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyogVlBYCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSwyMDEwIEVudHJvcHkgV2F2ZSBJbmMKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WUFhfREVDX0hfXwotI2RlZmluZSBfX0dTVF9WUFhfREVDX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfVlA4X0RFQ09ERVIpIHx8IGRlZmluZWQoSEFWRV9WUDlfREVDT0RFUikKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmg+Ci0KLS8qIEZJWE1FOiBVbmRlZiBIQVZFX0NPTkZJR19IIGJlY2F1c2UgdnB4X2NvZGVjLmggdXNlcyBpdCwKLSAqIHdoaWNoIGNhdXNlcyBjb21waWxhdGlvbiBmYWlsdXJlcyAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSN1bmRlZiBIQVZFX0NPTkZJR19ICi0jZW5kaWYKLQotI2luY2x1ZGUgPHZweC92cHhfZGVjb2Rlci5oPgotI2luY2x1ZGUgPHZweC92cDhkeC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVlBYX0RFQyBcCi0gIChnc3RfdnB4X2RlY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVlBYX0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1ZQWF9ERUMsR3N0VlBYRGVjKSkKLSNkZWZpbmUgR1NUX1ZQWF9ERUNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVlBYX0RFQyxHc3RWUFhEZWNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WUFhfREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVlBYX0RFQykpCi0jZGVmaW5lIEdTVF9JU19WUFhfREVDX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WUFhfREVDKSkKLSNkZWZpbmUgR1NUX1ZQWF9ERUNfR0VUX0NMQVNTKG9iaikgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfVlBYX0RFQywgR3N0VlBYRGVjQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VlBYRGVjIEdzdFZQWERlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWUFhEZWNDbGFzcyBHc3RWUFhEZWNDbGFzczsKLQotc3RydWN0IF9Hc3RWUFhEZWMKLXsKLSAgR3N0VmlkZW9EZWNvZGVyIGJhc2VfdmlkZW9fZGVjb2RlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICB2cHhfY29kZWNfY3R4X3QgZGVjb2RlcjsKLQotICAvKiBzdGF0ZSAqLwotICBnYm9vbGVhbiBkZWNvZGVyX2luaXRlZDsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdib29sZWFuIHBvc3RfcHJvY2Vzc2luZzsKLSAgZW51bSB2cDhfcG9zdHByb2NfbGV2ZWwgcG9zdF9wcm9jZXNzaW5nX2ZsYWdzOwotICBnaW50IGRlYmxvY2tpbmdfbGV2ZWw7Ci0gIGdpbnQgbm9pc2VfbGV2ZWw7Ci0gIGdpbnQgdGhyZWFkczsKLQotICBHc3RWaWRlb0NvZGVjU3RhdGUgKmlucHV0X3N0YXRlOwotICBHc3RWaWRlb0NvZGVjU3RhdGUgKm91dHB1dF9zdGF0ZTsKLQotICAvKiBhbGxvY2F0aW9uICovCi0gIGdib29sZWFuIGhhdmVfdmlkZW9fbWV0YTsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgZ3NpemUgYnVmX3NpemU7Ci19OwotCi1zdHJ1Y3QgX0dzdFZQWERlY0NsYXNzCi17Ci0gIEdzdFZpZGVvRGVjb2RlckNsYXNzIGJhc2VfdmlkZW9fZGVjb2Rlcl9jbGFzczsKLSAgY29uc3QgY2hhciogdmlkZW9fY29kZWNfdGFnOwotICAvKnN1cHBvcnRlZCB2cHggYWxnbyovCi0gIHZweF9jb2RlY19pZmFjZV90KiBjb2RlY19hbGdvOwotICAvKnZpcnR1YWwgZnVuY3Rpb24gdG8gb3Blbl9jb2RlYyovCi0gIEdzdEZsb3dSZXR1cm4gKCpvcGVuX2NvZGVjKSAoR3N0VlBYRGVjICogZGVjLCBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSk7Ci0gIC8qdmlydHVhbCBmdW5jdGlvbiB0byBzZW5kIHRhZ3MqLwotICB2b2lkICgqc2VuZF90YWdzKSAoR3N0VlBYRGVjKiBkZWMpOwotICAvKnZpcnR1YWwgZnVuY3Rpb24gdG8gc2V0L2NvcnJlY3QgdGhlIHN0cmVhbSBpbmZvKi8KLSAgdm9pZCAoKnNldF9zdHJlYW1faW5mbykgKEdzdFZQWERlYyAqZGVjLCB2cHhfY29kZWNfc3RyZWFtX2luZm9fdCAqc3RyZWFtX2luZm8pOwotICAvKnZpcnR1YWwgZnVuY3Rpb24gdG8gc2V0IGRlZmF1bHQgZm9ybWF0IHdoaWxlIG9wZW5pbmcgY29kZWMqLwotICB2b2lkICgqc2V0X2RlZmF1bHRfZm9ybWF0KSAoR3N0VlBYRGVjICpkZWMsIEdzdFZpZGVvRm9ybWF0IGZtdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgLyp2aXJ0dWFsIGZ1bmN0aW9uIHRvIG5lZ290aWF0ZSBmb3JtYXQgd2hpbGUgaGFuZGxpbmcgZnJhbWUqLwotICB2b2lkICgqaGFuZGxlX3Jlc29sdXRpb25fY2hhbmdlKSAoR3N0VlBYRGVjICpkZWMsIHZweF9pbWFnZV90ICppbWcsIEdzdFZpZGVvRm9ybWF0IGZtdCk7Ci0gIC8qdmlydHVhbCBmdW5jdGlvbiB0byBjaGVjayB2YWxpZCBmb3JtYXQqLwotICBnYm9vbGVhbiAoKmdldF9mcmFtZV9mb3JtYXQpKEdzdFZQWERlYyAqZGVjLCB2cHhfaW1hZ2VfdCAqaW1nLCBHc3RWaWRlb0Zvcm1hdCogZm10KTsKLX07Ci0KLUdUeXBlIGdzdF92cHhfZGVjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0dTVF9WUDhfREVDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3ZweC9nc3R2cHhlbmMuYyBiL2V4dC92cHgvZ3N0dnB4ZW5jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwM2Q0NjQuLjAwMDAwMDAKLS0tIGEvZXh0L3ZweC9nc3R2cHhlbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE5NTMgKzAsMCBAQAotLyogVlBYCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRW50cm9weSBXYXZlIEluYwotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoSEFWRV9WUDhfRU5DT0RFUikgfHwgZGVmaW5lZChIQVZFX1ZQOV9FTkNPREVSKQotCi0vKiBnbGliIGRlY2lkZWQgaW4gMi4zMiBpdCB3b3VsZCBiZSBhIGdyZWF0IGlkZWEgdG8gZGVwcmVjYXRlZCBHVmFsdWVBcnJheSB3aXRob3V0Ci0gKiBwcm92aWRpbmcgYW4gYWx0ZXJuYXRpdmUKLSAqCi0gKiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2NzIyOAotICogKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0dnA4dXRpbHMuaCIKLSNpbmNsdWRlICJnc3R2cHhlbmMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3ZweGVuY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfdnB4ZW5jX2RlYnVnCi0KLS8qIEZyb20gdnA4L3ZwOF9jeF9pZmFjZS5jIGFuZCB2cDkvdnA5X2N4X2lmYWNlLmMgKi8KLSNkZWZpbmUgREVGQVVMVF9QUk9GSUxFIDAKLQotI2RlZmluZSBERUZBVUxUX1JDX0VORF9VU0FHRSBWUFhfVkJSCi0jZGVmaW5lIERFRkFVTFRfUkNfVEFSR0VUX0JJVFJBVEUgMjU2MDAwCi0jZGVmaW5lIERFRkFVTFRfUkNfTUlOX1FVQU5USVpFUiA0Ci0jZGVmaW5lIERFRkFVTFRfUkNfTUFYX1FVQU5USVpFUiA2MwotCi0jZGVmaW5lIERFRkFVTFRfUkNfRFJPUEZSQU1FX1RIUkVTSCAwCi0jZGVmaW5lIERFRkFVTFRfUkNfUkVTSVpFX0FMTE9XRUQgMAotI2RlZmluZSBERUZBVUxUX1JDX1JFU0laRV9VUF9USFJFU0ggMzAKLSNkZWZpbmUgREVGQVVMVF9SQ19SRVNJWkVfRE9XTl9USFJFU0ggNjAKLSNkZWZpbmUgREVGQVVMVF9SQ19VTkRFUlNIT09UX1BDVCAxMDAKLSNkZWZpbmUgREVGQVVMVF9SQ19PVkVSU0hPT1RfUENUIDEwMAotI2RlZmluZSBERUZBVUxUX1JDX0JVRl9TWiA2MDAwCi0jZGVmaW5lIERFRkFVTFRfUkNfQlVGX0lOSVRJQUxfU1ogNDAwMAotI2RlZmluZSBERUZBVUxUX1JDX0JVRl9PUFRJTUFMX1NaIDUwMDAKLSNkZWZpbmUgREVGQVVMVF9SQ18yUEFTU19WQlJfQklBU19QQ1QgNTAKLSNkZWZpbmUgREVGQVVMVF9SQ18yUEFTU19WQlJfTUlOU0VDVElPTl9QQ1QgMAotI2RlZmluZSBERUZBVUxUX1JDXzJQQVNTX1ZCUl9NQVhTRUNUSU9OX1BDVCA0MDAKLQotI2RlZmluZSBERUZBVUxUX0tGX01PREUgVlBYX0tGX0FVVE8KLSNkZWZpbmUgREVGQVVMVF9LRl9NQVhfRElTVCAxMjgKLQotI2RlZmluZSBERUZBVUxUX01VTFRJUEFTU19NT0RFIFZQWF9SQ19PTkVfUEFTUwotI2RlZmluZSBERUZBVUxUX01VTFRJUEFTU19DQUNIRV9GSUxFICJtdWx0aXBhc3MuY2FjaGUiCi0KLSNkZWZpbmUgREVGQVVMVF9UU19OVU1CRVJfTEFZRVJTIDEKLSNkZWZpbmUgREVGQVVMVF9UU19UQVJHRVRfQklUUkFURSBOVUxMCi0jZGVmaW5lIERFRkFVTFRfVFNfUkFURV9ERUNJTUFUT1IgTlVMTAotI2RlZmluZSBERUZBVUxUX1RTX1BFUklPRElDSVRZIDAKLSNkZWZpbmUgREVGQVVMVF9UU19MQVlFUl9JRCBOVUxMCi0KLSNkZWZpbmUgREVGQVVMVF9FUlJPUl9SRVNJTElFTlQgMAotI2RlZmluZSBERUZBVUxUX0xBR19JTl9GUkFNRVMgMAotCi0jZGVmaW5lIERFRkFVTFRfVEhSRUFEUyAwCi0KLSNkZWZpbmUgREVGQVVMVF9IX1NDQUxJTkdfTU9ERSBWUDhFX05PUk1BTAotI2RlZmluZSBERUZBVUxUX1ZfU0NBTElOR19NT0RFIFZQOEVfTk9STUFMCi0jZGVmaW5lIERFRkFVTFRfQ1BVX1VTRUQgMAotI2RlZmluZSBERUZBVUxUX0VOQUJMRV9BVVRPX0FMVF9SRUYgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9ERUFETElORSBWUFhfRExfQkVTVF9RVUFMSVRZCi0jZGVmaW5lIERFRkFVTFRfTk9JU0VfU0VOU0lUSVZJVFkgMAotI2RlZmluZSBERUZBVUxUX1NIQVJQTkVTUyAwCi0jZGVmaW5lIERFRkFVTFRfU1RBVElDX1RIUkVTSE9MRCAwCi0jZGVmaW5lIERFRkFVTFRfVE9LRU5fUEFSVElUSU9OUyAwCi0jZGVmaW5lIERFRkFVTFRfQVJOUl9NQVhGUkFNRVMgMAotI2RlZmluZSBERUZBVUxUX0FSTlJfU1RSRU5HVEggMwotI2RlZmluZSBERUZBVUxUX0FSTlJfVFlQRSAzCi0jZGVmaW5lIERFRkFVTFRfVFVOSU5HIFZQOF9UVU5FX1BTTlIKLSNkZWZpbmUgREVGQVVMVF9DUV9MRVZFTCAxMAotI2RlZmluZSBERUZBVUxUX01BWF9JTlRSQV9CSVRSQVRFX1BDVCAwCi0jZGVmaW5lIERFRkFVTFRfVElNRUJBU0VfTiAwCi0jZGVmaW5lIERFRkFVTFRfVElNRUJBU0VfRCAxCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1JDX0VORF9VU0FHRSwKLSAgUFJPUF9SQ19UQVJHRVRfQklUUkFURSwKLSAgUFJPUF9SQ19NSU5fUVVBTlRJWkVSLAotICBQUk9QX1JDX01BWF9RVUFOVElaRVIsCi0gIFBST1BfUkNfRFJPUEZSQU1FX1RIUkVTSCwKLSAgUFJPUF9SQ19SRVNJWkVfQUxMT1dFRCwKLSAgUFJPUF9SQ19SRVNJWkVfVVBfVEhSRVNILAotICBQUk9QX1JDX1JFU0laRV9ET1dOX1RIUkVTSCwKLSAgUFJPUF9SQ19VTkRFUlNIT09UX1BDVCwKLSAgUFJPUF9SQ19PVkVSU0hPT1RfUENULAotICBQUk9QX1JDX0JVRl9TWiwKLSAgUFJPUF9SQ19CVUZfSU5JVElBTF9TWiwKLSAgUFJPUF9SQ19CVUZfT1BUSU1BTF9TWiwKLSAgUFJPUF9SQ18yUEFTU19WQlJfQklBU19QQ1QsCi0gIFBST1BfUkNfMlBBU1NfVkJSX01JTlNFQ1RJT05fUENULAotICBQUk9QX1JDXzJQQVNTX1ZCUl9NQVhTRUNUSU9OX1BDVCwKLSAgUFJPUF9LRl9NT0RFLAotICBQUk9QX0tGX01BWF9ESVNULAotICBQUk9QX1RTX05VTUJFUl9MQVlFUlMsCi0gIFBST1BfVFNfVEFSR0VUX0JJVFJBVEUsCi0gIFBST1BfVFNfUkFURV9ERUNJTUFUT1IsCi0gIFBST1BfVFNfUEVSSU9ESUNJVFksCi0gIFBST1BfVFNfTEFZRVJfSUQsCi0gIFBST1BfTVVMVElQQVNTX01PREUsCi0gIFBST1BfTVVMVElQQVNTX0NBQ0hFX0ZJTEUsCi0gIFBST1BfRVJST1JfUkVTSUxJRU5ULAotICBQUk9QX0xBR19JTl9GUkFNRVMsCi0gIFBST1BfVEhSRUFEUywKLSAgUFJPUF9ERUFETElORSwKLSAgUFJPUF9IX1NDQUxJTkdfTU9ERSwKLSAgUFJPUF9WX1NDQUxJTkdfTU9ERSwKLSAgUFJPUF9DUFVfVVNFRCwKLSAgUFJPUF9FTkFCTEVfQVVUT19BTFRfUkVGLAotICBQUk9QX05PSVNFX1NFTlNJVElWSVRZLAotICBQUk9QX1NIQVJQTkVTUywKLSAgUFJPUF9TVEFUSUNfVEhSRVNIT0xELAotICBQUk9QX1RPS0VOX1BBUlRJVElPTlMsCi0gIFBST1BfQVJOUl9NQVhGUkFNRVMsCi0gIFBST1BfQVJOUl9TVFJFTkdUSCwKLSAgUFJPUF9BUk5SX1RZUEUsCi0gIFBST1BfVFVOSU5HLAotICBQUk9QX0NRX0xFVkVMLAotICBQUk9QX01BWF9JTlRSQV9CSVRSQVRFX1BDVCwKLSAgUFJPUF9USU1FQkFTRQotfTsKLQotCi0jZGVmaW5lIEdTVF9WUFhfRU5DX0VORF9VU0FHRV9UWVBFIChnc3RfdnB4X2VuY19lbmRfdXNhZ2VfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3ZweF9lbmNfZW5kX3VzYWdlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7VlBYX1ZCUiwgIlZhcmlhYmxlIEJpdCBSYXRlIChWQlIpIG1vZGUiLCAidmJyIn0sCi0gICAge1ZQWF9DQlIsICJDb25zdGFudCBCaXQgUmF0ZSAoQ0JSKSBtb2RlIiwgImNiciJ9LAotICAgIHtWUFhfQ1EsICJDb25zdGFudCBRdWFsaXR5IE1vZGUgKENRKSBtb2RlIiwgImNxIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0gIHN0YXRpYyB2b2xhdGlsZSBHVHlwZSBpZCA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgoZ3NpemUgKikgJiBpZCkpIHsKLSAgICBHVHlwZSBfaWQ7Ci0KLSAgICBfaWQgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VlBYRW5jRW5kVXNhZ2UiLCB2YWx1ZXMpOwotCi0gICAgZ19vbmNlX2luaXRfbGVhdmUgKChnc2l6ZSAqKSAmIGlkLCBfaWQpOwotICB9Ci0KLSAgcmV0dXJuIGlkOwotfQotCi0jZGVmaW5lIEdTVF9WUFhfRU5DX01VTFRJUEFTU19NT0RFX1RZUEUgKGdzdF92cHhfZW5jX211bHRpcGFzc19tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF92cHhfZW5jX211bHRpcGFzc19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7VlBYX1JDX09ORV9QQVNTLCAiT25lIHBhc3MgZW5jb2RpbmcgKGRlZmF1bHQpIiwgIm9uZS1wYXNzIn0sCi0gICAge1ZQWF9SQ19GSVJTVF9QQVNTLCAiRmlyc3QgcGFzcyBvZiBtdWx0aXBhc3MgZW5jb2RpbmciLCAiZmlyc3QtcGFzcyJ9LAotICAgIHtWUFhfUkNfTEFTVF9QQVNTLCAiTGFzdCBwYXNzIG9mIG11bHRpcGFzcyBlbmNvZGluZyIsICJsYXN0LXBhc3MifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLSAgc3RhdGljIHZvbGF0aWxlIEdUeXBlIGlkID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKChnc2l6ZSAqKSAmIGlkKSkgewotICAgIEdUeXBlIF9pZDsKLQotICAgIF9pZCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RWUFhFbmNNdWx0aXBhc3NNb2RlIiwgdmFsdWVzKTsKLQotICAgIGdfb25jZV9pbml0X2xlYXZlICgoZ3NpemUgKikgJiBpZCwgX2lkKTsKLSAgfQotCi0gIHJldHVybiBpZDsKLX0KLQotI2RlZmluZSBHU1RfVlBYX0VOQ19LRl9NT0RFX1RZUEUgKGdzdF92cHhfZW5jX2tmX21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3ZweF9lbmNfa2ZfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAge1ZQWF9LRl9BVVRPLCAiRGV0ZXJtaW5lIG9wdGltYWwgcGxhY2VtZW50IGF1dG9tYXRpY2FsbHkiLCAiYXV0byJ9LAotICAgIHtWUFhfS0ZfRElTQUJMRUQsICJEb24ndCBhdXRvbWF0aWNhbGx5IHBsYWNlIGtleWZyYW1lcyIsICJkaXNhYmxlZCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfQotICB9OwotICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgaWQgPSAwOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoKGdzaXplICopICYgaWQpKSB7Ci0gICAgR1R5cGUgX2lkOwotCi0gICAgX2lkID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFZQWEVuY0tmTW9kZSIsIHZhbHVlcyk7Ci0KLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoKGdzaXplICopICYgaWQsIF9pZCk7Ci0gIH0KLQotICByZXR1cm4gaWQ7Ci19Ci0KLSNkZWZpbmUgR1NUX1ZQWF9FTkNfVFVOSU5HX1RZUEUgKGdzdF92cHhfZW5jX3R1bmluZ19nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfdnB4X2VuY190dW5pbmdfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtWUDhfVFVORV9QU05SLCAiVHVuZSBmb3IgUFNOUiIsICJwc25yIn0sCi0gICAge1ZQOF9UVU5FX1NTSU0sICJUdW5lIGZvciBTU0lNIiwgInNzaW0ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLSAgc3RhdGljIHZvbGF0aWxlIEdUeXBlIGlkID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKChnc2l6ZSAqKSAmIGlkKSkgewotICAgIEdUeXBlIF9pZDsKLQotICAgIF9pZCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RWUFhFbmNUdW5pbmciLCB2YWx1ZXMpOwotCi0gICAgZ19vbmNlX2luaXRfbGVhdmUgKChnc2l6ZSAqKSAmIGlkLCBfaWQpOwotICB9Ci0KLSAgcmV0dXJuIGlkOwotfQotCi0jZGVmaW5lIEdTVF9WUFhfRU5DX1NDQUxJTkdfTU9ERV9UWVBFIChnc3RfdnB4X2VuY19zY2FsaW5nX21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3ZweF9lbmNfc2NhbGluZ19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7VlA4RV9OT1JNQUwsICJOb3JtYWwiLCAibm9ybWFsIn0sCi0gICAge1ZQOEVfRk9VUkZJVkUsICI0OjUiLCAiNDo1In0sCi0gICAge1ZQOEVfVEhSRUVGSVZFLCAiMzo1IiwgIjM6NSJ9LAotICAgIHtWUDhFX09ORVRXTywgIjE6MiIsICIxOjIifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0KLSAgfTsKLSAgc3RhdGljIHZvbGF0aWxlIEdUeXBlIGlkID0gMDsKLQotICBpZiAoZ19vbmNlX2luaXRfZW50ZXIgKChnc2l6ZSAqKSAmIGlkKSkgewotICAgIEdUeXBlIF9pZDsKLQotICAgIF9pZCA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RWUFhFbmNTY2FsaW5nTW9kZSIsIHZhbHVlcyk7Ci0KLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoKGdzaXplICopICYgaWQsIF9pZCk7Ci0gIH0KLQotICByZXR1cm4gaWQ7Ci19Ci0KLSNkZWZpbmUgR1NUX1ZQWF9FTkNfVE9LRU5fUEFSVElUSU9OU19UWVBFIChnc3RfdnB4X2VuY190b2tlbl9wYXJ0aXRpb25zX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF92cHhfZW5jX3Rva2VuX3BhcnRpdGlvbnNfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgIHtWUDhfT05FX1RPS0VOUEFSVElUSU9OLCAiT25lIHRva2VuIHBhcnRpdGlvbiIsICIxIn0sCi0gICAge1ZQOF9UV09fVE9LRU5QQVJUSVRJT04sICJUd28gdG9rZW4gcGFydGl0aW9ucyIsICIyIn0sCi0gICAge1ZQOF9GT1VSX1RPS0VOUEFSVElUSU9OLCAiRm91ciB0b2tlbiBwYXJ0aXRpb25zIiwgIjQifSwKLSAgICB7VlA4X0VJR0hUX1RPS0VOUEFSVElUSU9OLCAiRWlnaHQgdG9rZW4gcGFydGl0aW9ucyIsICI4In0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0gIHN0YXRpYyB2b2xhdGlsZSBHVHlwZSBpZCA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgoZ3NpemUgKikgJiBpZCkpIHsKLSAgICBHVHlwZSBfaWQ7Ci0KLSAgICBfaWQgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VlBYRW5jVG9rZW5QYXJ0aXRpb25zIiwgdmFsdWVzKTsKLQotICAgIGdfb25jZV9pbml0X2xlYXZlICgoZ3NpemUgKikgJiBpZCwgX2lkKTsKLSAgfQotCi0gIHJldHVybiBpZDsKLX0KLQotI2RlZmluZSBHU1RfVlBYX0VOQ19FUl9GTEFHU19UWVBFIChnc3RfdnB4X2VuY19lcl9mbGFnc19nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfdnB4X2VuY19lcl9mbGFnc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIGNvbnN0IEdGbGFnc1ZhbHVlIHZhbHVlc1tdID0gewotICAgIHtWUFhfRVJST1JfUkVTSUxJRU5UX0RFRkFVTFQsICJEZWZhdWx0IGVycm9yIHJlc2lsaWVuY2UiLCAiZGVmYXVsdCJ9LAotICAgIHtWUFhfRVJST1JfUkVTSUxJRU5UX1BBUlRJVElPTlMsCi0gICAgICAgICJBbGxvdyBwYXJ0aXRpb25zIHRvIGJlIGRlY29kZWQgaW5kZXBlbmRlbnRseSIsICJwYXJ0aXRpb25zIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0gIHN0YXRpYyB2b2xhdGlsZSBHVHlwZSBpZCA9IDA7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgoZ3NpemUgKikgJiBpZCkpIHsKLSAgICBHVHlwZSBfaWQ7Ci0KLSAgICBfaWQgPSBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFZQWEVuY0VyRmxhZ3MiLCB2YWx1ZXMpOwotCi0gICAgZ19vbmNlX2luaXRfbGVhdmUgKChnc2l6ZSAqKSAmIGlkLCBfaWQpOwotICB9Ci0KLSAgcmV0dXJuIGlkOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfdnB4X2VuY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfdnB4X2VuY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdnB4X2VuY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2VuY19zdGFydCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2Rlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZweF9lbmNfc3RvcCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2Rlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZweF9lbmNfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICoKLSAgICB2aWRlb19lbmNvZGVyLCBHc3RWaWRlb0NvZGVjU3RhdGUgKiBzdGF0ZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdnB4X2VuY19maW5pc2ggKEdzdFZpZGVvRW5jb2RlciAqIHZpZGVvX2VuY29kZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF92cHhfZW5jX2ZsdXNoIChHc3RWaWRlb0VuY29kZXIgKiB2aWRlb19lbmNvZGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92cHhfZW5jX2RyYWluIChHc3RWaWRlb0VuY29kZXIgKiB2aWRlb19lbmNvZGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92cHhfZW5jX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9FbmNvZGVyICoKLSAgICB2aWRlb19lbmNvZGVyLCBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZweF9lbmNfc2lua19ldmVudCAoR3N0VmlkZW9FbmNvZGVyICoKLSAgICB2aWRlb19lbmNvZGVyLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdnB4X2VuY19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLSNkZWZpbmUgcGFyZW50X2NsYXNzIGdzdF92cHhfZW5jX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFZQWEVuYywgZ3N0X3ZweF9lbmMsIEdTVF9UWVBFX1ZJREVPX0VOQ09ERVIsCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UQUdfU0VUVEVSLCBOVUxMKTsKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1BSRVNFVCwgTlVMTCk7KTsKLQotc3RhdGljIHZvaWQKLWdzdF92cHhfZW5jX2NsYXNzX2luaXQgKEdzdFZQWEVuY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0VmlkZW9FbmNvZGVyQ2xhc3MgKnZpZGVvX2VuY29kZXJfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIHZpZGVvX2VuY29kZXJfY2xhc3MgPSBHU1RfVklERU9fRU5DT0RFUl9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF92cHhfZW5jX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3ZweF9lbmNfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF92cHhfZW5jX2ZpbmFsaXplOwotCi0gIHZpZGVvX2VuY29kZXJfY2xhc3MtPnN0YXJ0ID0gZ3N0X3ZweF9lbmNfc3RhcnQ7Ci0gIHZpZGVvX2VuY29kZXJfY2xhc3MtPnN0b3AgPSBnc3RfdnB4X2VuY19zdG9wOwotICB2aWRlb19lbmNvZGVyX2NsYXNzLT5oYW5kbGVfZnJhbWUgPSBnc3RfdnB4X2VuY19oYW5kbGVfZnJhbWU7Ci0gIHZpZGVvX2VuY29kZXJfY2xhc3MtPnNldF9mb3JtYXQgPSBnc3RfdnB4X2VuY19zZXRfZm9ybWF0OwotICB2aWRlb19lbmNvZGVyX2NsYXNzLT5mbHVzaCA9IGdzdF92cHhfZW5jX2ZsdXNoOwotICB2aWRlb19lbmNvZGVyX2NsYXNzLT5maW5pc2ggPSBnc3RfdnB4X2VuY19maW5pc2g7Ci0gIHZpZGVvX2VuY29kZXJfY2xhc3MtPnNpbmtfZXZlbnQgPSBnc3RfdnB4X2VuY19zaW5rX2V2ZW50OwotICB2aWRlb19lbmNvZGVyX2NsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSBnc3RfdnB4X2VuY19wcm9wb3NlX2FsbG9jYXRpb247Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SQ19FTkRfVVNBR0UsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImVuZC11c2FnZSIsICJSYXRlIGNvbnRyb2wgbW9kZSIsCi0gICAgICAgICAgIlJhdGUgY29udHJvbCBtb2RlIiwKLSAgICAgICAgICBHU1RfVlBYX0VOQ19FTkRfVVNBR0VfVFlQRSwgREVGQVVMVF9SQ19FTkRfVVNBR0UsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkNfVEFSR0VUX0JJVFJBVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgidGFyZ2V0LWJpdHJhdGUiLCAiVGFyZ2V0IGJpdHJhdGUiLAotICAgICAgICAgICJUYXJnZXQgYml0cmF0ZSAoaW4gYml0cy9zZWMpIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9SQ19UQVJHRVRfQklUUkFURSwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SQ19NSU5fUVVBTlRJWkVSLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm1pbi1xdWFudGl6ZXIiLCAiTWluaW11bSBRdWFudGl6ZXIiLAotICAgICAgICAgICJNaW5pbXVtIFF1YW50aXplciAoYmVzdCkiLAotICAgICAgICAgIDAsIDYzLCBERUZBVUxUX1JDX01JTl9RVUFOVElaRVIsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkNfTUFYX1FVQU5USVpFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJtYXgtcXVhbnRpemVyIiwgIk1heGltdW0gUXVhbnRpemVyIiwKLSAgICAgICAgICAiTWF4aW11bSBRdWFudGl6ZXIgKHdvcnN0KSIsCi0gICAgICAgICAgMCwgNjMsIERFRkFVTFRfUkNfTUFYX1FVQU5USVpFUiwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SQ19EUk9QRlJBTUVfVEhSRVNILAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImRyb3BmcmFtZS10aHJlc2hvbGQiLCAiRHJvcCBGcmFtZSBUaHJlc2hvbGQiLAotICAgICAgICAgICJUZW1wb3JhbCByZXNhbXBsaW5nIHRocmVzaG9sZCAoYnVmICUpIiwKLSAgICAgICAgICAwLCAxMDAsIERFRkFVTFRfUkNfRFJPUEZSQU1FX1RIUkVTSCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SQ19SRVNJWkVfQUxMT1dFRCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicmVzaXplLWFsbG93ZWQiLCAiUmVzaXplIEFsbG93ZWQiLAotICAgICAgICAgICJBbGxvdyBzcGF0aWFsIHJlc2FtcGxpbmciLAotICAgICAgICAgIERFRkFVTFRfUkNfUkVTSVpFX0FMTE9XRUQsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkNfUkVTSVpFX1VQX1RIUkVTSCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJyZXNpemUtdXAtdGhyZXNob2xkIiwgIlJlc2l6ZSBVcCBUaHJlc2hvbGQiLAotICAgICAgICAgICJVcHNjYWxlIHRocmVzaG9sZCAoYnVmICUpIiwKLSAgICAgICAgICAwLCAxMDAsIERFRkFVTFRfUkNfUkVTSVpFX1VQX1RIUkVTSCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SQ19SRVNJWkVfRE9XTl9USFJFU0gsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicmVzaXplLWRvd24tdGhyZXNob2xkIiwgIlJlc2l6ZSBEb3duIFRocmVzaG9sZCIsCi0gICAgICAgICAgIkRvd25zY2FsZSB0aHJlc2hvbGQgKGJ1ZiAlKSIsCi0gICAgICAgICAgMCwgMTAwLCBERUZBVUxUX1JDX1JFU0laRV9ET1dOX1RIUkVTSCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SQ19VTkRFUlNIT09UX1BDVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ1bmRlcnNob290IiwgIlVuZGVyc2hvb3QgUENUIiwKLSAgICAgICAgICAiRGF0YXJhdGUgdW5kZXJzaG9vdCAobWluKSB0YXJnZXQgKCUpIiwKLSAgICAgICAgICAwLCAxMDAwLCBERUZBVUxUX1JDX1VOREVSU0hPT1RfUENULAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JDX09WRVJTSE9PVF9QQ1QsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgib3ZlcnNob290IiwgIk92ZXJzaG9vdCBQQ1QiLAotICAgICAgICAgICJEYXRhcmF0ZSBvdmVyc2hvb3QgKG1heCkgdGFyZ2V0ICglKSIsCi0gICAgICAgICAgMCwgMTAwMCwgREVGQVVMVF9SQ19PVkVSU0hPT1RfUENULAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JDX0JVRl9TWiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJidWZmZXItc2l6ZSIsICJCdWZmZXIgc2l6ZSIsCi0gICAgICAgICAgIkNsaWVudCBidWZmZXIgc2l6ZSAobXMpIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9SQ19CVUZfU1osCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkNfQlVGX0lOSVRJQUxfU1osCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiYnVmZmVyLWluaXRpYWwtc2l6ZSIsICJCdWZmZXIgaW5pdGlhbCBzaXplIiwKLSAgICAgICAgICAiSW5pdGlhbCBjbGllbnQgYnVmZmVyIHNpemUgKG1zKSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIERFRkFVTFRfUkNfQlVGX0lOSVRJQUxfU1osCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkNfQlVGX09QVElNQUxfU1osCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiYnVmZmVyLW9wdGltYWwtc2l6ZSIsICJCdWZmZXIgb3B0aW1hbCBzaXplIiwKLSAgICAgICAgICAiT3B0aW1hbCBjbGllbnQgYnVmZmVyIHNpemUgKG1zKSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIERFRkFVTFRfUkNfQlVGX09QVElNQUxfU1osCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkNfMlBBU1NfVkJSX0JJQVNfUENULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInR3b3Bhc3MtdmJyLWJpYXMiLCAiMi1wYXNzIFZCUiBiaWFzIiwKLSAgICAgICAgICAiQ0JSL1ZCUiBiaWFzICgwPUNCUiwgMTAwPVZCUikiLAotICAgICAgICAgIDAsIDEwMCwgREVGQVVMVF9SQ18yUEFTU19WQlJfQklBU19QQ1QsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX1JDXzJQQVNTX1ZCUl9NSU5TRUNUSU9OX1BDVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ0d29wYXNzLXZici1taW5zZWN0aW9uIiwgIjItcGFzcyBHT1AgbWluIGJpdHJhdGUiLAotICAgICAgICAgICJHT1AgbWluaW11bSBiaXRyYXRlICglIHRhcmdldCkiLCAwLCBHX01BWElOVCwKLSAgICAgICAgICBERUZBVUxUX1JDXzJQQVNTX1ZCUl9NSU5TRUNUSU9OX1BDVCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfUkNfMlBBU1NfVkJSX01BWFNFQ1RJT05fUENULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInR3b3Bhc3MtdmJyLW1heHNlY3Rpb24iLCAiMi1wYXNzIEdPUCBtYXggYml0cmF0ZSIsCi0gICAgICAgICAgIkdPUCBtYXhpbXVtIGJpdHJhdGUgKCUgdGFyZ2V0KSIsIDAsIEdfTUFYSU5ULAotICAgICAgICAgIERFRkFVTFRfUkNfMlBBU1NfVkJSX01JTlNFQ1RJT05fUENULAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0tGX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImtleWZyYW1lLW1vZGUiLCAiS2V5ZnJhbWUgTW9kZSIsCi0gICAgICAgICAgIktleWZyYW1lIHBsYWNlbWVudCIsCi0gICAgICAgICAgR1NUX1ZQWF9FTkNfS0ZfTU9ERV9UWVBFLCBERUZBVUxUX0tGX01PREUsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfS0ZfTUFYX0RJU1QsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgia2V5ZnJhbWUtbWF4LWRpc3QiLCAiS2V5ZnJhbWUgbWF4IGRpc3RhbmNlIiwKLSAgICAgICAgICAiTWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIGtleWZyYW1lcyAobnVtYmVyIG9mIGZyYW1lcykiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCBERUZBVUxUX0tGX01BWF9ESVNULAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01VTFRJUEFTU19NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtdWx0aXBhc3MtbW9kZSIsICJNdWx0aXBhc3MgTW9kZSIsCi0gICAgICAgICAgIk11bHRpcGFzcyBlbmNvZGUgbW9kZSIsCi0gICAgICAgICAgR1NUX1ZQWF9FTkNfTVVMVElQQVNTX01PREVfVFlQRSwgREVGQVVMVF9NVUxUSVBBU1NfTU9ERSwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NVUxUSVBBU1NfQ0FDSEVfRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJtdWx0aXBhc3MtY2FjaGUtZmlsZSIsICJNdWx0aXBhc3MgQ2FjaGUgRmlsZSIsCi0gICAgICAgICAgIk11bHRpcGFzcyBjYWNoZSBmaWxlLiAiCi0gICAgICAgICAgIklmIHN0cmVhbSBjYXBzIHJlaW5pdGVkLCBtdWx0aXBsZSBmaWxlcyB3aWxsIGJlIGNyZWF0ZWQ6ICIKLSAgICAgICAgICAiZmlsZSwgZmlsZS4xLCBmaWxlLjIsIC4uLiBhbmQgc28gb24uIiwKLSAgICAgICAgICBERUZBVUxUX01VTFRJUEFTU19DQUNIRV9GSUxFLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RTX05VTUJFUl9MQVlFUlMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgidGVtcG9yYWwtc2NhbGFiaWxpdHktbnVtYmVyLWxheWVycyIsCi0gICAgICAgICAgIk51bWJlciBvZiBjb2RpbmcgbGF5ZXJzIiwgIk51bWJlciBvZiBjb2RpbmcgbGF5ZXJzIHRvIHVzZSIsIDEsIDUsCi0gICAgICAgICAgREVGQVVMVF9UU19OVU1CRVJfTEFZRVJTLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RTX1RBUkdFVF9CSVRSQVRFLAotICAgICAgZ19wYXJhbV9zcGVjX3ZhbHVlX2FycmF5ICgidGVtcG9yYWwtc2NhbGFiaWxpdHktdGFyZ2V0LWJpdHJhdGUiLAotICAgICAgICAgICJDb2RpbmcgbGF5ZXIgdGFyZ2V0IGJpdHJhdGVzIiwKLSAgICAgICAgICAiVGFyZ2V0IGJpdHJhdGVzIGZvciBjb2RpbmcgbGF5ZXJzIChvbmUgcGVyIGxheWVyLCBkZWNyZWFzaW5nKSIsCi0gICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInRhcmdldC1iaXRyYXRlIiwgIlRhcmdldCBiaXRyYXRlIiwKLSAgICAgICAgICAgICAgIlRhcmdldCBiaXRyYXRlIiwgMCwgR19NQVhJTlQsIERFRkFVTFRfUkNfVEFSR0VUX0JJVFJBVEUsCi0gICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UU19SQVRFX0RFQ0lNQVRPUiwKLSAgICAgIGdfcGFyYW1fc3BlY192YWx1ZV9hcnJheSAoInRlbXBvcmFsLXNjYWxhYmlsaXR5LXJhdGUtZGVjaW1hdG9yIiwKLSAgICAgICAgICAiQ29kaW5nIGxheWVyIHJhdGUgZGVjaW1hdG9yIiwKLSAgICAgICAgICAiUmF0ZSBkZWNpbWF0aW9uIGZhY3RvcnMgZm9yIGVhY2ggbGF5ZXIiLAotICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJyYXRlLWRlY2ltYXRvciIsICJSYXRlIGRlY2ltYXRvciIsCi0gICAgICAgICAgICAgICJSYXRlIGRlY2ltYXRvciIsIDAsIDEwMDAwMDAwMDAsIDAsCi0gICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UU19QRVJJT0RJQ0lUWSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ0ZW1wb3JhbC1zY2FsYWJpbGl0eS1wZXJpb2RpY2l0eSIsCi0gICAgICAgICAgIkNvZGluZyBsYXllciBwZXJpb2RpY2l0eSIsCi0gICAgICAgICAgIkxlbmd0aCBvZiBzZXF1ZW5jZSB0aGF0IGRlZmluZXMgbGF5ZXIgbWVtYmVyc2hpcCBwZXJpb2RpY2l0eSIsIDAsIDE2LAotICAgICAgICAgIERFRkFVTFRfVFNfUEVSSU9ESUNJVFksCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVFNfTEFZRVJfSUQsCi0gICAgICBnX3BhcmFtX3NwZWNfdmFsdWVfYXJyYXkgKCJ0ZW1wb3JhbC1zY2FsYWJpbGl0eS1sYXllci1pZCIsCi0gICAgICAgICAgIkNvZGluZyBsYXllciBpZGVudGlmaWNhdGlvbiIsCi0gICAgICAgICAgIlNlcXVlbmNlIGRlZmluaW5nIGNvZGluZyBsYXllciBtZW1iZXJzaGlwIiwKLSAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50ICgibGF5ZXItaWQiLCAiTGF5ZXIgSUQiLCAiTGF5ZXIgSUQiLCAwLCA0LCAwLAotICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFHX0lOX0ZSQU1FUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJsYWctaW4tZnJhbWVzIiwgIkxhZyBpbiBmcmFtZXMiLAotICAgICAgICAgICJNYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8gbGFnIiwKLSAgICAgICAgICAwLCAyNSwgREVGQVVMVF9MQUdfSU5fRlJBTUVTLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0VSUk9SX1JFU0lMSUVOVCwKLSAgICAgIGdfcGFyYW1fc3BlY19mbGFncyAoImVycm9yLXJlc2lsaWVudCIsICJFcnJvciByZXNpbGllbnQiLAotICAgICAgICAgICJFcnJvciByZXNpbGllbmNlIGZsYWdzIiwKLSAgICAgICAgICBHU1RfVlBYX0VOQ19FUl9GTEFHU19UWVBFLCBERUZBVUxUX0VSUk9SX1JFU0lMSUVOVCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USFJFQURTLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInRocmVhZHMiLCAiVGhyZWFkcyIsCi0gICAgICAgICAgIk51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSIsCi0gICAgICAgICAgMCwgNjQsIERFRkFVTFRfVEhSRUFEUywKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERUFETElORSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCAoImRlYWRsaW5lIiwgIkRlYWRsaW5lIiwKLSAgICAgICAgICAiRGVhZGxpbmUgcGVyIGZyYW1lICh1c2VjLCAwPWRpc2FibGVkKSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQ2NCwgREVGQVVMVF9ERUFETElORSwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9IX1NDQUxJTkdfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiaG9yaXpvbnRhbC1zY2FsaW5nLW1vZGUiLCAiSG9yaXpvbnRhbCBzY2FsaW5nIG1vZGUiLAotICAgICAgICAgICJIb3Jpem9udGFsIHNjYWxpbmcgbW9kZSIsCi0gICAgICAgICAgR1NUX1ZQWF9FTkNfU0NBTElOR19NT0RFX1RZUEUsIERFRkFVTFRfSF9TQ0FMSU5HX01PREUsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVl9TQ0FMSU5HX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInZlcnRpY2FsLXNjYWxpbmctbW9kZSIsICJWZXJ0aWNhbCBzY2FsaW5nIG1vZGUiLAotICAgICAgICAgICJWZXJ0aWNhbCBzY2FsaW5nIG1vZGUiLAotICAgICAgICAgIEdTVF9WUFhfRU5DX1NDQUxJTkdfTU9ERV9UWVBFLCBERUZBVUxUX1ZfU0NBTElOR19NT0RFLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NQVV9VU0VELAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImNwdS11c2VkIiwgIkNQVSB1c2VkIiwKLSAgICAgICAgICAiQ1BVIHVzZWQiLAotICAgICAgICAgIC0xNiwgMTYsIERFRkFVTFRfQ1BVX1VTRUQsCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRU5BQkxFX0FVVE9fQUxUX1JFRiwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXV0by1hbHQtcmVmIiwgIkF1dG8gYWx0IHJlZmVyZW5jZSBmcmFtZXMiLAotICAgICAgICAgICJBdXRvbWF0aWNhbGx5IGdlbmVyYXRlIEFsdFJlZiBmcmFtZXMiLAotICAgICAgICAgIERFRkFVTFRfRU5BQkxFX0FVVE9fQUxUX1JFRiwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OT0lTRV9TRU5TSVRJVklUWSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJub2lzZS1zZW5zaXRpdml0eSIsICJOb2lzZSBzZW5zaXRpdml0eSIsCi0gICAgICAgICAgIk5vaXNlIHNlbnNpc2l2aXR5IChmcmFtZXMgdG8gYmx1cikiLAotICAgICAgICAgIDAsIDYsIERFRkFVTFRfTk9JU0VfU0VOU0lUSVZJVFksCi0gICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0hBUlBORVNTLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNoYXJwbmVzcyIsICJTaGFycG5lc3MiLAotICAgICAgICAgICJGaWx0ZXIgc2hhcnBuZXNzIiwKLSAgICAgICAgICAwLCA3LCBERUZBVUxUX1NIQVJQTkVTUywKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVEFUSUNfVEhSRVNIT0xELAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInN0YXRpYy10aHJlc2hvbGQiLCAiU3RhdGljIFRocmVzaG9sZCIsCi0gICAgICAgICAgIk1vdGlvbiBkZXRlY3Rpb24gdGhyZXNob2xkIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9TVEFUSUNfVEhSRVNIT0xELAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RPS0VOX1BBUlRJVElPTlMsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInRva2VuLXBhcnRpdGlvbnMiLCAiVG9rZW4gcGFydGl0aW9ucyIsCi0gICAgICAgICAgIk51bWJlciBvZiB0b2tlbiBwYXJ0aXRpb25zIiwKLSAgICAgICAgICBHU1RfVlBYX0VOQ19UT0tFTl9QQVJUSVRJT05TX1RZUEUsIERFRkFVTFRfVE9LRU5fUEFSVElUSU9OUywKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BUk5SX01BWEZSQU1FUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJhcm5yLW1heGZyYW1lcyIsICJBbHRSZWYgbWF4IGZyYW1lcyIsCi0gICAgICAgICAgIkFsdFJlZiBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMiLAotICAgICAgICAgIDAsIDE1LCBERUZBVUxUX0FSTlJfTUFYRlJBTUVTLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FSTlJfU1RSRU5HVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiYXJuci1zdHJlbmd0aCIsICJBbHRSZWYgc3RyZW5ndGgiLAotICAgICAgICAgICJBbHRSZWYgc3RyZW5ndGgiLAotICAgICAgICAgIDAsIDYsIERFRkFVTFRfQVJOUl9TVFJFTkdUSCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BUk5SX1RZUEUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiYXJuci10eXBlIiwgIkFsdFJlZiB0eXBlIiwKLSAgICAgICAgICAiQWx0UmVmIHR5cGUiLAotICAgICAgICAgIDEsIDMsIERFRkFVTFRfQVJOUl9UWVBFLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8Ci0gICAgICAgICAgICAgIEdfUEFSQU1fREVQUkVDQVRFRCkpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RVTklORywKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgidHVuaW5nIiwgIlR1bmluZyIsCi0gICAgICAgICAgIlR1bmluZyIsCi0gICAgICAgICAgR1NUX1ZQWF9FTkNfVFVOSU5HX1RZUEUsIERFRkFVTFRfVFVOSU5HLAotICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NRX0xFVkVMLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImNxLWxldmVsIiwgIkNvbnN0cmFpbmVkIHF1YWxpdHkgbGV2ZWwiLAotICAgICAgICAgICJDb25zdHJhaW5lZCBxdWFsaXR5IGxldmVsIiwKLSAgICAgICAgICAwLCA2MywgREVGQVVMVF9DUV9MRVZFTCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfSU5UUkFfQklUUkFURV9QQ1QsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibWF4LWludHJhLWJpdHJhdGUiLCAiTWF4IEludHJhIGJpdHJhdGUiLAotICAgICAgICAgICJNYXhpbXVtIEludHJhIGZyYW1lIGJpdHJhdGUiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCBERUZBVUxUX01BWF9JTlRSQV9CSVRSQVRFX1BDVCwKLSAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USU1FQkFTRSwKLSAgICAgIGdzdF9wYXJhbV9zcGVjX2ZyYWN0aW9uICgidGltZWJhc2UiLCAiU2hvcnRlc3QgaW50ZXJmcmFtZSB0aW1lIiwKLSAgICAgICAgICAiRnJhY3Rpb24gb2Ygb25lIHNlY29uZCB0aGF0IGlzIHRoZSBzaG9ydGVzdCBpbnRlcmZyYW1lIHRpbWUgLSBub3JtYWxseSBsZWZ0IGFzIHplcm8gd2hpY2ggd2lsbCBkZWZhdWx0IHRvIHRoZSBmcmFtZXJhdGUiLAotICAgICAgICAgIDAsIDEsIEdfTUFYSU5ULCAxLCBERUZBVUxUX1RJTUVCQVNFX04sIERFRkFVTFRfVElNRUJBU0VfRCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3ZweGVuY19kZWJ1ZywgInZweGVuYyIsIDAsICJWUFggRW5jb2RlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZweF9lbmNfaW5pdCAoR3N0VlBYRW5jICogZ3N0X3ZweF9lbmMpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGdzdF92cHhfZW5jLCAiaW5pdCIpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKEdTVF9WSURFT19FTkNPREVSX1NJTktfUEFEIChnc3RfdnB4X2VuYykpOwotCi0gIGdzdF92cHhfZW5jLT5jZmcucmNfZW5kX3VzYWdlID0gREVGQVVMVF9SQ19FTkRfVVNBR0U7Ci0gIGdzdF92cHhfZW5jLT5jZmcucmNfdGFyZ2V0X2JpdHJhdGUgPSBERUZBVUxUX1JDX1RBUkdFVF9CSVRSQVRFIC8gMTAwMDsKLSAgZ3N0X3ZweF9lbmMtPnJjX3RhcmdldF9iaXRyYXRlX3NldCA9IEZBTFNFOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX21pbl9xdWFudGl6ZXIgPSBERUZBVUxUX1JDX01JTl9RVUFOVElaRVI7Ci0gIGdzdF92cHhfZW5jLT5jZmcucmNfbWF4X3F1YW50aXplciA9IERFRkFVTFRfUkNfTUFYX1FVQU5USVpFUjsKLSAgZ3N0X3ZweF9lbmMtPmNmZy5yY19kcm9wZnJhbWVfdGhyZXNoID0gREVGQVVMVF9SQ19EUk9QRlJBTUVfVEhSRVNIOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3Jlc2l6ZV9hbGxvd2VkID0gREVGQVVMVF9SQ19SRVNJWkVfQUxMT1dFRDsKLSAgZ3N0X3ZweF9lbmMtPmNmZy5yY19yZXNpemVfdXBfdGhyZXNoID0gREVGQVVMVF9SQ19SRVNJWkVfVVBfVEhSRVNIOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3Jlc2l6ZV9kb3duX3RocmVzaCA9IERFRkFVTFRfUkNfUkVTSVpFX0RPV05fVEhSRVNIOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3VuZGVyc2hvb3RfcGN0ID0gREVGQVVMVF9SQ19VTkRFUlNIT09UX1BDVDsKLSAgZ3N0X3ZweF9lbmMtPmNmZy5yY19vdmVyc2hvb3RfcGN0ID0gREVGQVVMVF9SQ19PVkVSU0hPT1RfUENUOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX2J1Zl9zeiA9IERFRkFVTFRfUkNfQlVGX1NaOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX2J1Zl9pbml0aWFsX3N6ID0gREVGQVVMVF9SQ19CVUZfSU5JVElBTF9TWjsKLSAgZ3N0X3ZweF9lbmMtPmNmZy5yY19idWZfb3B0aW1hbF9zeiA9IERFRkFVTFRfUkNfQlVGX09QVElNQUxfU1o7Ci0gIGdzdF92cHhfZW5jLT5jZmcucmNfMnBhc3NfdmJyX2JpYXNfcGN0ID0gREVGQVVMVF9SQ18yUEFTU19WQlJfQklBU19QQ1Q7Ci0gIGdzdF92cHhfZW5jLT5jZmcucmNfMnBhc3NfdmJyX21pbnNlY3Rpb25fcGN0ID0KLSAgICAgIERFRkFVTFRfUkNfMlBBU1NfVkJSX01JTlNFQ1RJT05fUENUOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnJjXzJwYXNzX3Zicl9tYXhzZWN0aW9uX3BjdCA9Ci0gICAgICBERUZBVUxUX1JDXzJQQVNTX1ZCUl9NQVhTRUNUSU9OX1BDVDsKLSAgZ3N0X3ZweF9lbmMtPmNmZy5rZl9tb2RlID0gREVGQVVMVF9LRl9NT0RFOwotICBnc3RfdnB4X2VuYy0+Y2ZnLmtmX21heF9kaXN0ID0gREVGQVVMVF9LRl9NQVhfRElTVDsKLSAgZ3N0X3ZweF9lbmMtPmNmZy5nX3Bhc3MgPSBERUZBVUxUX01VTFRJUEFTU19NT0RFOwotICBnc3RfdnB4X2VuYy0+bXVsdGlwYXNzX2NhY2hlX3ByZWZpeCA9IGdfc3RyZHVwIChERUZBVUxUX01VTFRJUEFTU19DQUNIRV9GSUxFKTsKLSAgZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9maWxlID0gTlVMTDsKLSAgZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9pZHggPSAwOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnRzX251bWJlcl9sYXllcnMgPSBERUZBVUxUX1RTX05VTUJFUl9MQVlFUlM7Ci0gIGdzdF92cHhfZW5jLT5uX3RzX3RhcmdldF9iaXRyYXRlID0gMDsKLSAgZ3N0X3ZweF9lbmMtPm5fdHNfcmF0ZV9kZWNpbWF0b3IgPSAwOwotICBnc3RfdnB4X2VuYy0+Y2ZnLnRzX3BlcmlvZGljaXR5ID0gREVGQVVMVF9UU19QRVJJT0RJQ0lUWTsKLSAgZ3N0X3ZweF9lbmMtPm5fdHNfbGF5ZXJfaWQgPSAwOwotICBnc3RfdnB4X2VuYy0+Y2ZnLmdfZXJyb3JfcmVzaWxpZW50ID0gREVGQVVMVF9FUlJPUl9SRVNJTElFTlQ7Ci0gIGdzdF92cHhfZW5jLT5jZmcuZ19sYWdfaW5fZnJhbWVzID0gREVGQVVMVF9MQUdfSU5fRlJBTUVTOwotICBnc3RfdnB4X2VuYy0+Y2ZnLmdfdGhyZWFkcyA9IERFRkFVTFRfVEhSRUFEUzsKLSAgZ3N0X3ZweF9lbmMtPmRlYWRsaW5lID0gREVGQVVMVF9ERUFETElORTsKLSAgZ3N0X3ZweF9lbmMtPmhfc2NhbGluZ19tb2RlID0gREVGQVVMVF9IX1NDQUxJTkdfTU9ERTsKLSAgZ3N0X3ZweF9lbmMtPnZfc2NhbGluZ19tb2RlID0gREVGQVVMVF9WX1NDQUxJTkdfTU9ERTsKLSAgZ3N0X3ZweF9lbmMtPmNwdV91c2VkID0gREVGQVVMVF9DUFVfVVNFRDsKLSAgZ3N0X3ZweF9lbmMtPmVuYWJsZV9hdXRvX2FsdF9yZWYgPSBERUZBVUxUX0VOQUJMRV9BVVRPX0FMVF9SRUY7Ci0gIGdzdF92cHhfZW5jLT5ub2lzZV9zZW5zaXRpdml0eSA9IERFRkFVTFRfTk9JU0VfU0VOU0lUSVZJVFk7Ci0gIGdzdF92cHhfZW5jLT5zaGFycG5lc3MgPSBERUZBVUxUX1NIQVJQTkVTUzsKLSAgZ3N0X3ZweF9lbmMtPnN0YXRpY190aHJlc2hvbGQgPSBERUZBVUxUX1NUQVRJQ19USFJFU0hPTEQ7Ci0gIGdzdF92cHhfZW5jLT50b2tlbl9wYXJ0aXRpb25zID0gREVGQVVMVF9UT0tFTl9QQVJUSVRJT05TOwotICBnc3RfdnB4X2VuYy0+YXJucl9tYXhmcmFtZXMgPSBERUZBVUxUX0FSTlJfTUFYRlJBTUVTOwotICBnc3RfdnB4X2VuYy0+YXJucl9zdHJlbmd0aCA9IERFRkFVTFRfQVJOUl9TVFJFTkdUSDsKLSAgZ3N0X3ZweF9lbmMtPmFybnJfdHlwZSA9IERFRkFVTFRfQVJOUl9UWVBFOwotICBnc3RfdnB4X2VuYy0+dHVuaW5nID0gREVGQVVMVF9UVU5JTkc7Ci0gIGdzdF92cHhfZW5jLT5jcV9sZXZlbCA9IERFRkFVTFRfQ1FfTEVWRUw7Ci0gIGdzdF92cHhfZW5jLT5tYXhfaW50cmFfYml0cmF0ZV9wY3QgPSBERUZBVUxUX01BWF9JTlRSQV9CSVRSQVRFX1BDVDsKLSAgZ3N0X3ZweF9lbmMtPnRpbWViYXNlX24gPSBERUZBVUxUX1RJTUVCQVNFX047Ci0gIGdzdF92cHhfZW5jLT50aW1lYmFzZV9kID0gREVGQVVMVF9USU1FQkFTRV9EOwotCi0gIGdzdF92cHhfZW5jLT5jZmcuZ19wcm9maWxlID0gREVGQVVMVF9QUk9GSUxFOwotCi0gIGdfbXV0ZXhfaW5pdCAoJmdzdF92cHhfZW5jLT5lbmNvZGVyX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZweF9lbmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFZQWEVuYyAqZ3N0X3ZweF9lbmM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqZWN0LCAiZmluYWxpemUiKTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVlBYX0VOQyAob2JqZWN0KSk7Ci0gIGdzdF92cHhfZW5jID0gR1NUX1ZQWF9FTkMgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChnc3RfdnB4X2VuYy0+bXVsdGlwYXNzX2NhY2hlX3ByZWZpeCk7Ci0gIGdfZnJlZSAoZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9maWxlKTsKLSAgZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9pZHggPSAwOwotCi0KLSAgaWYgKGdzdF92cHhfZW5jLT5pbnB1dF9zdGF0ZSkKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKGdzdF92cHhfZW5jLT5pbnB1dF9zdGF0ZSk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJmdzdF92cHhfZW5jLT5lbmNvZGVyX2xvY2spOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cHhfZW5jX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWUFhFbmMgKmdzdF92cHhfZW5jOwotICBnYm9vbGVhbiBnbG9iYWwgPSBGQUxTRTsKLSAgdnB4X2NvZGVjX2Vycl90IHN0YXR1czsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVlBYX0VOQyAob2JqZWN0KSk7Ci0gIGdzdF92cHhfZW5jID0gR1NUX1ZQWF9FTkMgKG9iamVjdCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqZWN0LCAiZ3N0X3ZweF9lbmNfc2V0X3Byb3BlcnR5Iik7Ci0gIGdfbXV0ZXhfbG9jayAoJmdzdF92cHhfZW5jLT5lbmNvZGVyX2xvY2spOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUkNfRU5EX1VTQUdFOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5yY19lbmRfdXNhZ2UgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JDX1RBUkdFVF9CSVRSQVRFOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5yY190YXJnZXRfYml0cmF0ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpIC8gMTAwMDsKLSAgICAgIGdzdF92cHhfZW5jLT5yY190YXJnZXRfYml0cmF0ZV9zZXQgPSBUUlVFOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19NSU5fUVVBTlRJWkVSOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5yY19taW5fcXVhbnRpemVyID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JDX01BWF9RVUFOVElaRVI6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX21heF9xdWFudGl6ZXIgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfRFJPUEZSQU1FX1RIUkVTSDoKLSAgICAgIGdzdF92cHhfZW5jLT5jZmcucmNfZHJvcGZyYW1lX3RocmVzaCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19SRVNJWkVfQUxMT1dFRDoKLSAgICAgIGdzdF92cHhfZW5jLT5jZmcucmNfcmVzaXplX2FsbG93ZWQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JDX1JFU0laRV9VUF9USFJFU0g6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3Jlc2l6ZV91cF90aHJlc2ggPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfUkVTSVpFX0RPV05fVEhSRVNIOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5yY19yZXNpemVfZG93bl90aHJlc2ggPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfVU5ERVJTSE9PVF9QQ1Q6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3VuZGVyc2hvb3RfcGN0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JDX09WRVJTSE9PVF9QQ1Q6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX292ZXJzaG9vdF9wY3QgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfQlVGX1NaOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5yY19idWZfc3ogPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfQlVGX0lOSVRJQUxfU1o6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjX2J1Zl9pbml0aWFsX3N6ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JDX0JVRl9PUFRJTUFMX1NaOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5yY19idWZfb3B0aW1hbF9zeiA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ18yUEFTU19WQlJfQklBU19QQ1Q6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjXzJwYXNzX3Zicl9iaWFzX3BjdCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ18yUEFTU19WQlJfTUlOU0VDVElPTl9QQ1Q6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjXzJwYXNzX3Zicl9taW5zZWN0aW9uX3BjdCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ18yUEFTU19WQlJfTUFYU0VDVElPTl9QQ1Q6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnJjXzJwYXNzX3Zicl9tYXhzZWN0aW9uX3BjdCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9LRl9NT0RFOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5rZl9tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9LRl9NQVhfRElTVDoKLSAgICAgIGdzdF92cHhfZW5jLT5jZmcua2ZfbWF4X2Rpc3QgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVMVElQQVNTX01PREU6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLmdfcGFzcyA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVMVElQQVNTX0NBQ0hFX0ZJTEU6Ci0gICAgICBpZiAoZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9wcmVmaXgpCi0gICAgICAgIGdfZnJlZSAoZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9wcmVmaXgpOwotICAgICAgZ3N0X3ZweF9lbmMtPm11bHRpcGFzc19jYWNoZV9wcmVmaXggPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UU19OVU1CRVJfTEFZRVJTOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy50c19udW1iZXJfbGF5ZXJzID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RTX1RBUkdFVF9CSVRSQVRFOnsKLSAgICAgIEdWYWx1ZUFycmF5ICp2YSA9IGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7Ci0KLSAgICAgIG1lbXNldCAoJmdzdF92cHhfZW5jLT5jZmcudHNfdGFyZ2V0X2JpdHJhdGUsIDAsCi0gICAgICAgICAgc2l6ZW9mIChnc3RfdnB4X2VuYy0+Y2ZnLnRzX3RhcmdldF9iaXRyYXRlKSk7Ci0gICAgICBpZiAodmEgPT0gTlVMTCkgewotICAgICAgICBnc3RfdnB4X2VuYy0+bl90c190YXJnZXRfYml0cmF0ZSA9IDA7Ci0gICAgICB9IGVsc2UgaWYgKHZhLT5uX3ZhbHVlcyA+IFZQWF9UU19NQVhfTEFZRVJTKSB7Ci0gICAgICAgIGdfd2FybmluZyAoIiVzOiBPbmx5ICVkIGxheWVycyBhbGxvd2VkIGF0IG1heGltdW0iLAotICAgICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZ3N0X3ZweF9lbmMpLCBWUFhfVFNfTUFYX0xBWUVSUyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnaW50IGk7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhLT5uX3ZhbHVlczsgaSsrKQotICAgICAgICAgIGdzdF92cHhfZW5jLT5jZmcudHNfdGFyZ2V0X2JpdHJhdGVbaV0gPQotICAgICAgICAgICAgICBnX3ZhbHVlX2dldF9pbnQgKGdfdmFsdWVfYXJyYXlfZ2V0X250aCAodmEsIGkpKTsKLSAgICAgICAgZ3N0X3ZweF9lbmMtPm5fdHNfdGFyZ2V0X2JpdHJhdGUgPSB2YS0+bl92YWx1ZXM7Ci0gICAgICB9Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9UU19SQVRFX0RFQ0lNQVRPUjp7Ci0gICAgICBHVmFsdWVBcnJheSAqdmEgPSBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpOwotCi0gICAgICBtZW1zZXQgKCZnc3RfdnB4X2VuYy0+Y2ZnLnRzX3JhdGVfZGVjaW1hdG9yLCAwLAotICAgICAgICAgIHNpemVvZiAoZ3N0X3ZweF9lbmMtPmNmZy50c19yYXRlX2RlY2ltYXRvcikpOwotICAgICAgaWYgKHZhID09IE5VTEwpIHsKLSAgICAgICAgZ3N0X3ZweF9lbmMtPm5fdHNfcmF0ZV9kZWNpbWF0b3IgPSAwOwotICAgICAgfSBlbHNlIGlmICh2YS0+bl92YWx1ZXMgPiBWUFhfVFNfTUFYX0xBWUVSUykgewotICAgICAgICBnX3dhcm5pbmcgKCIlczogT25seSAlZCBsYXllcnMgYWxsb3dlZCBhdCBtYXhpbXVtIiwKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGdzdF92cHhfZW5jKSwgVlBYX1RTX01BWF9MQVlFUlMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2ludCBpOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YS0+bl92YWx1ZXM7IGkrKykKLSAgICAgICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnRzX3JhdGVfZGVjaW1hdG9yW2ldID0KLSAgICAgICAgICAgICAgZ192YWx1ZV9nZXRfaW50IChnX3ZhbHVlX2FycmF5X2dldF9udGggKHZhLCBpKSk7Ci0gICAgICAgIGdzdF92cHhfZW5jLT5uX3RzX3JhdGVfZGVjaW1hdG9yID0gdmEtPm5fdmFsdWVzOwotICAgICAgfQotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfVFNfUEVSSU9ESUNJVFk6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y2ZnLnRzX3BlcmlvZGljaXR5ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RTX0xBWUVSX0lEOnsKLSAgICAgIEdWYWx1ZUFycmF5ICp2YSA9IGdfdmFsdWVfZ2V0X2JveGVkICh2YWx1ZSk7Ci0KLSAgICAgIG1lbXNldCAoJmdzdF92cHhfZW5jLT5jZmcudHNfbGF5ZXJfaWQsIDAsCi0gICAgICAgICAgc2l6ZW9mIChnc3RfdnB4X2VuYy0+Y2ZnLnRzX2xheWVyX2lkKSk7Ci0gICAgICBpZiAodmEgJiYgdmEtPm5fdmFsdWVzID4gVlBYX1RTX01BWF9QRVJJT0RJQ0lUWSkgewotICAgICAgICBnX3dhcm5pbmcgKCIlczogT25seSAlZCBzaXplZCBsYXllciBzZXF1ZW5jZXMgYWxsb3dlZCBhdCBtYXhpbXVtIiwKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGdzdF92cHhfZW5jKSwgVlBYX1RTX01BWF9QRVJJT0RJQ0lUWSk7Ci0gICAgICB9IGVsc2UgaWYgKHZhKSB7Ci0gICAgICAgIGdpbnQgaTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmEtPm5fdmFsdWVzOyBpKyspCi0gICAgICAgICAgZ3N0X3ZweF9lbmMtPmNmZy50c19sYXllcl9pZFtpXSA9Ci0gICAgICAgICAgICAgIGdfdmFsdWVfZ2V0X2ludCAoZ192YWx1ZV9hcnJheV9nZXRfbnRoICh2YSwgaSkpOwotICAgICAgICBnc3RfdnB4X2VuYy0+bl90c19sYXllcl9pZCA9IHZhLT5uX3ZhbHVlczsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF92cHhfZW5jLT5uX3RzX2xheWVyX2lkID0gMDsKLSAgICAgIH0KLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0VSUk9SX1JFU0lMSUVOVDoKLSAgICAgIGdzdF92cHhfZW5jLT5jZmcuZ19lcnJvcl9yZXNpbGllbnQgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUpOwotICAgICAgZ2xvYmFsID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MQUdfSU5fRlJBTUVTOgotICAgICAgZ3N0X3ZweF9lbmMtPmNmZy5nX2xhZ19pbl9mcmFtZXMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdsb2JhbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEhSRUFEUzoKLSAgICAgIGdzdF92cHhfZW5jLT5jZmcuZ190aHJlYWRzID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnbG9iYWwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFQURMSU5FOgotICAgICAgZ3N0X3ZweF9lbmMtPmRlYWRsaW5lID0gZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9IX1NDQUxJTkdfTU9ERToKLSAgICAgIGdzdF92cHhfZW5jLT5oX3NjYWxpbmdfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHZweF9zY2FsaW5nX21vZGVfdCBzbTsKLQotICAgICAgICBzbS5oX3NjYWxpbmdfbW9kZSA9IGdzdF92cHhfZW5jLT5oX3NjYWxpbmdfbW9kZTsKLSAgICAgICAgc20udl9zY2FsaW5nX21vZGUgPSBnc3RfdnB4X2VuYy0+dl9zY2FsaW5nX21vZGU7Ci0KLSAgICAgICAgc3RhdHVzID0KLSAgICAgICAgICAgIHZweF9jb2RlY19jb250cm9sICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsIFZQOEVfU0VUX1NDQUxFTU9ERSwgJnNtKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGdzdF92cHhfZW5jLAotICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9TQ0FMRU1PREU6ICVzIiwKLSAgICAgICAgICAgICAgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1ZfU0NBTElOR19NT0RFOgotICAgICAgZ3N0X3ZweF9lbmMtPnZfc2NhbGluZ19tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgaWYgKGdzdF92cHhfZW5jLT5pbml0ZWQpIHsKLSAgICAgICAgdnB4X3NjYWxpbmdfbW9kZV90IHNtOwotCi0gICAgICAgIHNtLmhfc2NhbGluZ19tb2RlID0gZ3N0X3ZweF9lbmMtPmhfc2NhbGluZ19tb2RlOwotICAgICAgICBzbS52X3NjYWxpbmdfbW9kZSA9IGdzdF92cHhfZW5jLT52X3NjYWxpbmdfbW9kZTsKLQotICAgICAgICBzdGF0dXMgPQotICAgICAgICAgICAgdnB4X2NvZGVjX2NvbnRyb2wgKCZnc3RfdnB4X2VuYy0+ZW5jb2RlciwgVlA4RV9TRVRfU0NBTEVNT0RFLCAmc20pOwotICAgICAgICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZ3N0X3ZweF9lbmMsCi0gICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX1NDQUxFTU9ERTogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1BVX1VTRUQ6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y3B1X3VzZWQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9Ci0gICAgICAgICAgICB2cHhfY29kZWNfY29udHJvbCAoJmdzdF92cHhfZW5jLT5lbmNvZGVyLCBWUDhFX1NFVF9DUFVVU0VELAotICAgICAgICAgICAgZ3N0X3ZweF9lbmMtPmNwdV91c2VkKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGdzdF92cHhfZW5jLCAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9DUFVVU0VEOiAlcyIsCi0gICAgICAgICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkFCTEVfQVVUT19BTFRfUkVGOgotICAgICAgZ3N0X3ZweF9lbmMtPmVuYWJsZV9hdXRvX2FsdF9yZWYgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBpZiAoZ3N0X3ZweF9lbmMtPmluaXRlZCkgewotICAgICAgICBzdGF0dXMgPQotICAgICAgICAgICAgdnB4X2NvZGVjX2NvbnRyb2wgKCZnc3RfdnB4X2VuYy0+ZW5jb2RlciwgVlA4RV9TRVRfRU5BQkxFQVVUT0FMVFJFRiwKLSAgICAgICAgICAgIChnc3RfdnB4X2VuYy0+ZW5hYmxlX2F1dG9fYWx0X3JlZiA/IDEgOiAwKSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChnc3RfdnB4X2VuYywKLSAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZXQgVlA4RV9TRVRfRU5BQkxFQVVUT0FMVFJFRjogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9JU0VfU0VOU0lUSVZJVFk6Ci0gICAgICBnc3RfdnB4X2VuYy0+bm9pc2Vfc2Vuc2l0aXZpdHkgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9Ci0gICAgICAgICAgICB2cHhfY29kZWNfY29udHJvbCAoJmdzdF92cHhfZW5jLT5lbmNvZGVyLAotICAgICAgICAgICAgVlA4RV9TRVRfTk9JU0VfU0VOU0lUSVZJVFksIGdzdF92cHhfZW5jLT5ub2lzZV9zZW5zaXRpdml0eSk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChnc3RfdnB4X2VuYywKLSAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZXQgVlA4RV9TRVRfTk9JU0VfU0VOU0lUSVZJVFk6ICVzIiwKLSAgICAgICAgICAgICAgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NIQVJQTkVTUzoKLSAgICAgIGdzdF92cHhfZW5jLT5zaGFycG5lc3MgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsIFZQOEVfU0VUX1NIQVJQTkVTUywKLSAgICAgICAgICAgIGdzdF92cHhfZW5jLT5zaGFycG5lc3MpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZ3N0X3ZweF9lbmMsCi0gICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX1NIQVJQTkVTUzogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RBVElDX1RIUkVTSE9MRDoKLSAgICAgIGdzdF92cHhfZW5jLT5zdGF0aWNfdGhyZXNob2xkID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBpZiAoZ3N0X3ZweF9lbmMtPmluaXRlZCkgewotICAgICAgICBzdGF0dXMgPQotICAgICAgICAgICAgdnB4X2NvZGVjX2NvbnRyb2wgKCZnc3RfdnB4X2VuYy0+ZW5jb2RlciwgVlA4RV9TRVRfU1RBVElDX1RIUkVTSE9MRCwKLSAgICAgICAgICAgIGdzdF92cHhfZW5jLT5zdGF0aWNfdGhyZXNob2xkKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGdzdF92cHhfZW5jLAotICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9TVEFUSUNfVEhSRVNIT0xEOiAlcyIsCi0gICAgICAgICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UT0tFTl9QQVJUSVRJT05TOgotICAgICAgZ3N0X3ZweF9lbmMtPnRva2VuX3BhcnRpdGlvbnMgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBpZiAoZ3N0X3ZweF9lbmMtPmluaXRlZCkgewotICAgICAgICBzdGF0dXMgPQotICAgICAgICAgICAgdnB4X2NvZGVjX2NvbnRyb2wgKCZnc3RfdnB4X2VuYy0+ZW5jb2RlciwgVlA4RV9TRVRfVE9LRU5fUEFSVElUSU9OUywKLSAgICAgICAgICAgIGdzdF92cHhfZW5jLT50b2tlbl9wYXJ0aXRpb25zKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGdzdF92cHhfZW5jLAotICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9UT0tFTl9QQVJUSU9OUzogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVJOUl9NQVhGUkFNRVM6Ci0gICAgICBnc3RfdnB4X2VuYy0+YXJucl9tYXhmcmFtZXMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9Ci0gICAgICAgICAgICB2cHhfY29kZWNfY29udHJvbCAoJmdzdF92cHhfZW5jLT5lbmNvZGVyLCBWUDhFX1NFVF9BUk5SX01BWEZSQU1FUywKLSAgICAgICAgICAgIGdzdF92cHhfZW5jLT5hcm5yX21heGZyYW1lcyk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChnc3RfdnB4X2VuYywKLSAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZXQgVlA4RV9TRVRfQVJOUl9NQVhGUkFNRVM6ICVzIiwKLSAgICAgICAgICAgICAgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FSTlJfU1RSRU5HVEg6Ci0gICAgICBnc3RfdnB4X2VuYy0+YXJucl9zdHJlbmd0aCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgaWYgKGdzdF92cHhfZW5jLT5pbml0ZWQpIHsKLSAgICAgICAgc3RhdHVzID0KLSAgICAgICAgICAgIHZweF9jb2RlY19jb250cm9sICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsIFZQOEVfU0VUX0FSTlJfU1RSRU5HVEgsCi0gICAgICAgICAgICBnc3RfdnB4X2VuYy0+YXJucl9zdHJlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChnc3RfdnB4X2VuYywKLSAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZXQgVlA4RV9TRVRfQVJOUl9TVFJFTkdUSDogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVJOUl9UWVBFOgotICAgICAgZ3N0X3ZweF9lbmMtPmFybnJfdHlwZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ193YXJuaW5nICgiYXJuci10eXBlIGlzIGEgbm8tb3Agc2luY2UgY29udHJvbCBoYXMgYmVlbiBkZXByZWNhdGVkICIKLSAgICAgICAgICAiaW4gbGlidnB4Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFVOSU5HOgotICAgICAgZ3N0X3ZweF9lbmMtPnR1bmluZyA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsIFZQOEVfU0VUX1RVTklORywKLSAgICAgICAgICAgIGdzdF92cHhfZW5jLT50dW5pbmcpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZ3N0X3ZweF9lbmMsCi0gICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX1RVTklORzogJXMiLCBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1FfTEVWRUw6Ci0gICAgICBnc3RfdnB4X2VuYy0+Y3FfbGV2ZWwgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgICAgIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsIFZQOEVfU0VUX0NRX0xFVkVMLAotICAgICAgICAgICAgZ3N0X3ZweF9lbmMtPmNxX2xldmVsKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGdzdF92cHhfZW5jLAotICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9DUV9MRVZFTDogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0lOVFJBX0JJVFJBVEVfUENUOgotICAgICAgZ3N0X3ZweF9lbmMtPm1heF9pbnRyYV9iaXRyYXRlX3BjdCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgaWYgKGdzdF92cHhfZW5jLT5pbml0ZWQpIHsKLSAgICAgICAgc3RhdHVzID0KLSAgICAgICAgICAgIHZweF9jb2RlY19jb250cm9sICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsCi0gICAgICAgICAgICBWUDhFX1NFVF9NQVhfSU5UUkFfQklUUkFURV9QQ1QsIGdzdF92cHhfZW5jLT5tYXhfaW50cmFfYml0cmF0ZV9wY3QpOwotICAgICAgICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZ3N0X3ZweF9lbmMsCi0gICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX01BWF9JTlRSQV9CSVRSQVRFX1BDVDogJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVElNRUJBU0U6Ci0gICAgICBnc3RfdnB4X2VuYy0+dGltZWJhc2VfbiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICh2YWx1ZSk7Ci0gICAgICBnc3RfdnB4X2VuYy0+dGltZWJhc2VfZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChnbG9iYWwgJiZnc3RfdnB4X2VuYy0+aW5pdGVkKSB7Ci0gICAgc3RhdHVzID0KLSAgICAgICAgdnB4X2NvZGVjX2VuY19jb25maWdfc2V0ICgmZ3N0X3ZweF9lbmMtPmVuY29kZXIsICZnc3RfdnB4X2VuYy0+Y2ZnKTsKLSAgICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgICAgZ19tdXRleF91bmxvY2sgKCZnc3RfdnB4X2VuYy0+ZW5jb2Rlcl9sb2NrKTsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChnc3RfdnB4X2VuYywgTElCUkFSWSwgSU5JVCwKLSAgICAgICAgICAoIkZhaWxlZCB0byBzZXQgZW5jb2RlciBjb25maWd1cmF0aW9uIiksICgiJXMiLAotICAgICAgICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19tdXRleF91bmxvY2sgKCZnc3RfdnB4X2VuYy0+ZW5jb2Rlcl9sb2NrKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZnc3RfdnB4X2VuYy0+ZW5jb2Rlcl9sb2NrKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZweF9lbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFZQWEVuYyAqZ3N0X3ZweF9lbmM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1ZQWF9FTkMgKG9iamVjdCkpOwotICBnc3RfdnB4X2VuYyA9IEdTVF9WUFhfRU5DIChvYmplY3QpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmdzdF92cHhfZW5jLT5lbmNvZGVyX2xvY2spOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUkNfRU5EX1VTQUdFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcucmNfZW5kX3VzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19UQVJHRVRfQklUUkFURToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcucmNfdGFyZ2V0X2JpdHJhdGUgKiAxMDAwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19NSU5fUVVBTlRJWkVSOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5yY19taW5fcXVhbnRpemVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19NQVhfUVVBTlRJWkVSOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5yY19tYXhfcXVhbnRpemVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19EUk9QRlJBTUVfVEhSRVNIOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5yY19kcm9wZnJhbWVfdGhyZXNoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19SRVNJWkVfQUxMT1dFRDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3Jlc2l6ZV9hbGxvd2VkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19SRVNJWkVfVVBfVEhSRVNIOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5yY19yZXNpemVfdXBfdGhyZXNoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19SRVNJWkVfRE9XTl9USFJFU0g6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3Jlc2l6ZV9kb3duX3RocmVzaCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfVU5ERVJTSE9PVF9QQ1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+Y2ZnLnJjX3VuZGVyc2hvb3RfcGN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19PVkVSU0hPT1RfUENUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5yY19vdmVyc2hvb3RfcGN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19CVUZfU1o6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+Y2ZnLnJjX2J1Zl9zeik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfQlVGX0lOSVRJQUxfU1o6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+Y2ZnLnJjX2J1Zl9pbml0aWFsX3N6KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ19CVUZfT1BUSU1BTF9TWjoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcucmNfYnVmX29wdGltYWxfc3opOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JDXzJQQVNTX1ZCUl9CSUFTX1BDVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcucmNfMnBhc3NfdmJyX2JpYXNfcGN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQ18yUEFTU19WQlJfTUlOU0VDVElPTl9QQ1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+Y2ZnLnJjXzJwYXNzX3Zicl9taW5zZWN0aW9uX3BjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkNfMlBBU1NfVkJSX01BWFNFQ1RJT05fUENUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5yY18ycGFzc192YnJfbWF4c2VjdGlvbl9wY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0tGX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5rZl9tb2RlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9LRl9NQVhfRElTVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcua2ZfbWF4X2Rpc3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VTFRJUEFTU19NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcuZ19wYXNzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NVUxUSVBBU1NfQ0FDSEVfRklMRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIGdzdF92cHhfZW5jLT5tdWx0aXBhc3NfY2FjaGVfcHJlZml4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UU19OVU1CRVJfTEFZRVJTOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy50c19udW1iZXJfbGF5ZXJzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UU19UQVJHRVRfQklUUkFURTp7Ci0gICAgICBHVmFsdWVBcnJheSAqdmE7Ci0KLSAgICAgIGlmIChnc3RfdnB4X2VuYy0+bl90c190YXJnZXRfYml0cmF0ZSA9PSAwKSB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgTlVMTCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnaW50IGk7Ci0KLSAgICAgICAgdmEgPSBnX3ZhbHVlX2FycmF5X25ldyAoZ3N0X3ZweF9lbmMtPm5fdHNfdGFyZ2V0X2JpdHJhdGUpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ3N0X3ZweF9lbmMtPm5fdHNfdGFyZ2V0X2JpdHJhdGU7IGkrKykgewotICAgICAgICAgIEdWYWx1ZSB2ID0geyAwLCB9OwotCi0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0lOVCk7Ci0gICAgICAgICAgZ192YWx1ZV9zZXRfaW50ICgmdiwgZ3N0X3ZweF9lbmMtPmNmZy50c190YXJnZXRfYml0cmF0ZVtpXSk7Ci0gICAgICAgICAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKHZhLCAmdik7Ci0gICAgICAgICAgZ192YWx1ZV91bnNldCAoJnYpOwotICAgICAgICB9Ci0gICAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgdmEpOwotICAgICAgICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHZhKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfVFNfUkFURV9ERUNJTUFUT1I6ewotICAgICAgR1ZhbHVlQXJyYXkgKnZhOwotCi0gICAgICBpZiAoZ3N0X3ZweF9lbmMtPm5fdHNfcmF0ZV9kZWNpbWF0b3IgPT0gMCkgewotICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIE5VTEwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2ludCBpOwotCi0gICAgICAgIHZhID0gZ192YWx1ZV9hcnJheV9uZXcgKGdzdF92cHhfZW5jLT5uX3RzX3JhdGVfZGVjaW1hdG9yKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGdzdF92cHhfZW5jLT5uX3RzX3JhdGVfZGVjaW1hdG9yOyBpKyspIHsKLSAgICAgICAgICBHVmFsdWUgdiA9IHsgMCwgfTsKLQotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9JTlQpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X2ludCAoJnYsIGdzdF92cHhfZW5jLT5jZmcudHNfcmF0ZV9kZWNpbWF0b3JbaV0pOwotICAgICAgICAgIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLSAgICAgICAgfQotICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHZhKTsKLSAgICAgICAgZ192YWx1ZV9hcnJheV9mcmVlICh2YSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1RTX1BFUklPRElDSVRZOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy50c19wZXJpb2RpY2l0eSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFNfTEFZRVJfSUQ6ewotICAgICAgR1ZhbHVlQXJyYXkgKnZhOwotCi0gICAgICBpZiAoZ3N0X3ZweF9lbmMtPm5fdHNfbGF5ZXJfaWQgPT0gMCkgewotICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIE5VTEwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2ludCBpOwotCi0gICAgICAgIHZhID0gZ192YWx1ZV9hcnJheV9uZXcgKGdzdF92cHhfZW5jLT5uX3RzX2xheWVyX2lkKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGdzdF92cHhfZW5jLT5uX3RzX2xheWVyX2lkOyBpKyspIHsKLSAgICAgICAgICBHVmFsdWUgdiA9IHsgMCwgfTsKLQotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9JTlQpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X2ludCAoJnYsIGdzdF92cHhfZW5jLT5jZmcudHNfbGF5ZXJfaWRbaV0pOwotICAgICAgICAgIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLSAgICAgICAgfQotICAgICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHZhKTsKLSAgICAgICAgZ192YWx1ZV9hcnJheV9mcmVlICh2YSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0VSUk9SX1JFU0lMSUVOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ZsYWdzICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5nX2Vycm9yX3Jlc2lsaWVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTEFHX0lOX0ZSQU1FUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5jZmcuZ19sYWdfaW5fZnJhbWVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USFJFQURTOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNmZy5nX3RocmVhZHMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFQURMSU5FOgotICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+ZGVhZGxpbmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0hfU0NBTElOR19NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGdzdF92cHhfZW5jLT5oX3NjYWxpbmdfbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVl9TQ0FMSU5HX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPnZfc2NhbGluZ19tb2RlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DUFVfVVNFRDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5jcHVfdXNlZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRU5BQkxFX0FVVE9fQUxUX1JFRjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3RfdnB4X2VuYy0+ZW5hYmxlX2F1dG9fYWx0X3JlZik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTk9JU0VfU0VOU0lUSVZJVFk6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+bm9pc2Vfc2Vuc2l0aXZpdHkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NIQVJQTkVTUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGdzdF92cHhfZW5jLT5zaGFycG5lc3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUQVRJQ19USFJFU0hPTEQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+c3RhdGljX3RocmVzaG9sZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVE9LRU5fUEFSVElUSU9OUzoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBnc3RfdnB4X2VuYy0+dG9rZW5fcGFydGl0aW9ucyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVJOUl9NQVhGUkFNRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+YXJucl9tYXhmcmFtZXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FSTlJfU1RSRU5HVEg6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+YXJucl9zdHJlbmd0aCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVJOUl9UWVBFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmFybnJfdHlwZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFVOSU5HOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGdzdF92cHhfZW5jLT50dW5pbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NRX0xFVkVMOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZ3N0X3ZweF9lbmMtPmNxX2xldmVsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfSU5UUkFfQklUUkFURV9QQ1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBnc3RfdnB4X2VuYy0+bWF4X2ludHJhX2JpdHJhdGVfcGN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FQkFTRToKLSAgICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKHZhbHVlLCBnc3RfdnB4X2VuYy0+dGltZWJhc2VfbiwKLSAgICAgICAgICBnc3RfdnB4X2VuYy0+dGltZWJhc2VfZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZnc3RfdnB4X2VuYy0+ZW5jb2Rlcl9sb2NrKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdnB4X2VuY19zdGFydCAoR3N0VmlkZW9FbmNvZGVyICogdmlkZW9fZW5jb2RlcikKLXsKLSAgR3N0VlBYRW5jICplbmNvZGVyID0gR1NUX1ZQWF9FTkMgKHZpZGVvX2VuY29kZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvX2VuY29kZXIsICJzdGFydCIpOwotCi0gIGlmICghZW5jb2Rlci0+aGF2ZV9kZWZhdWx0X2NvbmZpZykgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChlbmNvZGVyLCBMSUJSQVJZLCBJTklULAotICAgICAgICAoIkZhaWxlZCB0byBnZXQgZGVmYXVsdCBlbmNvZGVyIGNvbmZpZ3VyYXRpb24iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92cHhfZW5jX2Rlc3Ryb3lfZW5jb2RlciAoR3N0VlBYRW5jICogZW5jb2RlcikKLXsKLSAgZ19tdXRleF9sb2NrICgmZW5jb2Rlci0+ZW5jb2Rlcl9sb2NrKTsKLSAgaWYgKGVuY29kZXItPmluaXRlZCkgewotICAgIHZweF9jb2RlY19kZXN0cm95ICgmZW5jb2Rlci0+ZW5jb2Rlcik7Ci0gICAgZW5jb2Rlci0+aW5pdGVkID0gRkFMU0U7Ci0gIH0KLQotICBpZiAoZW5jb2Rlci0+Zmlyc3RfcGFzc19jYWNoZV9jb250ZW50KSB7Ci0gICAgZ19ieXRlX2FycmF5X2ZyZWUgKGVuY29kZXItPmZpcnN0X3Bhc3NfY2FjaGVfY29udGVudCwgVFJVRSk7Ci0gICAgZW5jb2Rlci0+Zmlyc3RfcGFzc19jYWNoZV9jb250ZW50ID0gTlVMTDsKLSAgfQotCi0gIGlmIChlbmNvZGVyLT5jZmcucmNfdHdvcGFzc19zdGF0c19pbi5idWYpIHsKLSAgICBnX2ZyZWUgKGVuY29kZXItPmNmZy5yY190d29wYXNzX3N0YXRzX2luLmJ1Zik7Ci0gICAgZW5jb2Rlci0+Y2ZnLnJjX3R3b3Bhc3Nfc3RhdHNfaW4uYnVmID0gTlVMTDsKLSAgICBlbmNvZGVyLT5jZmcucmNfdHdvcGFzc19zdGF0c19pbi5zeiA9IDA7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92cHhfZW5jX3N0b3AgKEdzdFZpZGVvRW5jb2RlciAqIHZpZGVvX2VuY29kZXIpCi17Ci0gIEdzdFZQWEVuYyAqZW5jb2RlcjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb19lbmNvZGVyLCAic3RvcCIpOwotCi0gIGVuY29kZXIgPSBHU1RfVlBYX0VOQyAodmlkZW9fZW5jb2Rlcik7Ci0KLSAgZ3N0X3ZweF9lbmNfZGVzdHJveV9lbmNvZGVyIChlbmNvZGVyKTsKLQotICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIChHU1RfVEFHX1NFVFRFUiAoZW5jb2RlcikpOwotCi0gIGdfZnJlZSAoZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX2ZpbGUpOwotICBlbmNvZGVyLT5tdWx0aXBhc3NfY2FjaGVfZmlsZSA9IE5VTEw7Ci0gIGVuY29kZXItPm11bHRpcGFzc19jYWNoZV9pZHggPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3ZweF9lbmNfZ2V0X2Rvd25zdHJlYW1fcHJvZmlsZSAoR3N0VlBYRW5jICogZW5jb2RlcikKLXsKLSAgR3N0Q2FwcyAqYWxsb3dlZDsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnaW50IHByb2ZpbGUgPSBERUZBVUxUX1BST0ZJTEU7Ci0KLSAgYWxsb3dlZCA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoR1NUX1ZJREVPX0VOQ09ERVJfU1JDX1BBRCAoZW5jb2RlcikpOwotICBpZiAoYWxsb3dlZCkgewotICAgIGFsbG93ZWQgPSBnc3RfY2Fwc190cnVuY2F0ZSAoYWxsb3dlZCk7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFsbG93ZWQsIDApOwotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgInByb2ZpbGUiKSkgewotICAgICAgY29uc3QgR1ZhbHVlICp2ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJwcm9maWxlIik7Ci0gICAgICBjb25zdCBnY2hhciAqcHJvZmlsZV9zdHIgPSBOVUxMOwotCi0gICAgICBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHYpICYmIGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2KSA+IDApIHsKLSAgICAgICAgcHJvZmlsZV9zdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodiwgMCkpOwotICAgICAgfSBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX1NUUklORyAodikpIHsKLSAgICAgICAgcHJvZmlsZV9zdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKHYpOwotICAgICAgfQotCi0gICAgICBpZiAocHJvZmlsZV9zdHIpIHsKLSAgICAgICAgZ2NoYXIgKmVuZHB0ciA9IE5VTEw7Ci0KLSAgICAgICAgcHJvZmlsZSA9IGdfYXNjaWlfc3RydG91bGwgKHByb2ZpbGVfc3RyLCAmZW5kcHRyLCAxMCk7Ci0gICAgICAgIGlmICgqZW5kcHRyICE9ICdcMCcgfHwgcHJvZmlsZSA8IDAgfHwgcHJvZmlsZSA+IDMpIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChlbmNvZGVyLCAiSW52YWxpZCBwcm9maWxlICclcyciLCBwcm9maWxlX3N0cik7Ci0gICAgICAgICAgcHJvZmlsZSA9IERFRkFVTFRfUFJPRklMRTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAoYWxsb3dlZCk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChlbmNvZGVyLCAiVXNpbmcgcHJvZmlsZSAlZCIsIHByb2ZpbGUpOwotCi0gIHJldHVybiBwcm9maWxlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92cHhfZW5jX3NldF9mb3JtYXQgKEdzdFZpZGVvRW5jb2RlciAqIHZpZGVvX2VuY29kZXIsCi0gICAgR3N0VmlkZW9Db2RlY1N0YXRlICogc3RhdGUpCi17Ci0gIEdzdFZQWEVuYyAqZW5jb2RlcjsKLSAgdnB4X2NvZGVjX2Vycl90IHN0YXR1czsKLSAgdnB4X2ltYWdlX3QgKmltYWdlOwotICBHc3RDYXBzICpjYXBzOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3RWaWRlb0luZm8gKmluZm8gPSAmc3RhdGUtPmluZm87Ci0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqb3V0cHV0X3N0YXRlOwotICBHc3RDbG9ja1RpbWUgbGF0ZW5jeTsKLSAgR3N0VlBYRW5jQ2xhc3MgKnZweF9lbmNfY2xhc3M7Ci0KLSAgZW5jb2RlciA9IEdTVF9WUFhfRU5DICh2aWRlb19lbmNvZGVyKTsKLSAgdnB4X2VuY19jbGFzcyA9IEdTVF9WUFhfRU5DX0dFVF9DTEFTUyAoZW5jb2Rlcik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvX2VuY29kZXIsICJzZXRfZm9ybWF0Iik7Ci0KLSAgaWYgKGVuY29kZXItPmluaXRlZCkgewotICAgIGdzdF92cHhfZW5jX2RyYWluICh2aWRlb19lbmNvZGVyKTsKLSAgICBnX211dGV4X2xvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotICAgIHZweF9jb2RlY19kZXN0cm95ICgmZW5jb2Rlci0+ZW5jb2Rlcik7Ci0gICAgZW5jb2Rlci0+aW5pdGVkID0gRkFMU0U7Ci0gICAgZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX2lkeCsrOwotICB9IGVsc2UgewotICAgIGdfbXV0ZXhfbG9jayAoJmVuY29kZXItPmVuY29kZXJfbG9jayk7Ci0gIH0KLQotICBlbmNvZGVyLT5jZmcuZ19wcm9maWxlID0gZ3N0X3ZweF9lbmNfZ2V0X2Rvd25zdHJlYW1fcHJvZmlsZSAoZW5jb2Rlcik7Ci0KLSAgLyogU2NhbGUgZGVmYXVsdCBiaXRyYXRlIHRvIG91ciBzaXplICovCi0gIGlmICghZW5jb2Rlci0+cmNfdGFyZ2V0X2JpdHJhdGVfc2V0KQotICAgIGVuY29kZXItPmNmZy5yY190YXJnZXRfYml0cmF0ZSA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoREVGQVVMVF9SQ19UQVJHRVRfQklUUkFURSwKLSAgICAgICAgR1NUX1ZJREVPX0lORk9fV0lEVEggKGluZm8pICogR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbmZvKSwKLSAgICAgICAgMzIwICogMjQwICogMTAwMCk7Ci0KLSAgZW5jb2Rlci0+Y2ZnLmdfdyA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbmZvKTsKLSAgZW5jb2Rlci0+Y2ZnLmdfaCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5mbyk7Ci0KLSAgaWYgKGVuY29kZXItPnRpbWViYXNlX24gIT0gMCAmJiBlbmNvZGVyLT50aW1lYmFzZV9kICE9IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb19lbmNvZGVyLCAiVXNpbmcgdGltZWJhc2UgY29uZmlndXJhdGlvbiIpOwotICAgIGVuY29kZXItPmNmZy5nX3RpbWViYXNlLm51bSA9IGVuY29kZXItPnRpbWViYXNlX247Ci0gICAgZW5jb2Rlci0+Y2ZnLmdfdGltZWJhc2UuZGVuID0gZW5jb2Rlci0+dGltZWJhc2VfZDsKLSAgfSBlbHNlIHsKLSAgICAvKiBaZXJvIGZyYW1lcmF0ZSBhbmQgbWF4LWZyYW1lcmF0ZSBidXQgc3RpbGwgbmVlZCB0byBzZXR1cCB0aGUgdGltZWJhc2UgdG8gYXZvaWQKLSAgICAgKiBhIGRpdmlkZSBieSB6ZXJvIGVycm9yLiBQcmVzdW1pbmcgdGhlIGxvd2VzdCBjb21tb24gZGVub21pbmF0b3Igd2lsbCBiZSBSVFAgLQotICAgICAqIFZQOCBwYXlsb2FkIGRyYWZ0IHN0YXRlcyBjbG9jayByYXRlIG9mIDkwMDAwIHdoaWNoIHNob3VsZCB3b3JrIGZvciBhbnlvbmUgd2hlcmUKLSAgICAgKiBGUFMgPCA5MDAwMCAoc2hvdWxkbid0IGJlIHRvbyBtYW55IGNhc2VzIHdoZXJlIGl0J3MgaGlnaGVyKSB0aG91Z2ggd291bGRuJ3QgYmUgb3B0aW1hbC4gUlRQIHNwZWNpZmljYXRpb24KLSAgICAgKiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXBheWxvYWQtdnA4LTAxIHNlY3Rpb24gNi4zLjEgKi8KLSAgICBlbmNvZGVyLT5jZmcuZ190aW1lYmFzZS5udW0gPSAxOwotICAgIGVuY29kZXItPmNmZy5nX3RpbWViYXNlLmRlbiA9IDkwMDAwOwotICB9Ci0KLSAgaWYgKGVuY29kZXItPmNmZy5nX3Bhc3MgPT0gVlBYX1JDX0ZJUlNUX1BBU1MgfHwKLSAgICAgIGVuY29kZXItPmNmZy5nX3Bhc3MgPT0gVlBYX1JDX0xBU1RfUEFTUykgewotICAgIGlmICghZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX3ByZWZpeCkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGVuY29kZXIsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICAgKCJObyBtdWx0aXBhc3MgY2FjaGUgZmlsZSBwcm92aWRlZCIpLCAoTlVMTCkpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIGdfZnJlZSAoZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX2ZpbGUpOwotCi0gICAgaWYgKGVuY29kZXItPm11bHRpcGFzc19jYWNoZV9pZHggPiAwKQotICAgICAgZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX2ZpbGUgPSBnX3N0cmR1cF9wcmludGYgKCIlcy4ldSIsCi0gICAgICAgICAgZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX3ByZWZpeCwgZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX2lkeCk7Ci0gICAgZWxzZQotICAgICAgZW5jb2Rlci0+bXVsdGlwYXNzX2NhY2hlX2ZpbGUgPQotICAgICAgICAgIGdfc3RyZHVwIChlbmNvZGVyLT5tdWx0aXBhc3NfY2FjaGVfcHJlZml4KTsKLSAgfQotCi0gIGlmIChlbmNvZGVyLT5jZmcuZ19wYXNzID09IFZQWF9SQ19GSVJTVF9QQVNTKSB7Ci0gICAgaWYgKGVuY29kZXItPmZpcnN0X3Bhc3NfY2FjaGVfY29udGVudCAhPSBOVUxMKQotICAgICAgZ19ieXRlX2FycmF5X2ZyZWUgKGVuY29kZXItPmZpcnN0X3Bhc3NfY2FjaGVfY29udGVudCwgVFJVRSk7Ci0KLSAgICBlbmNvZGVyLT5maXJzdF9wYXNzX2NhY2hlX2NvbnRlbnQgPSBnX2J5dGVfYXJyYXlfc2l6ZWRfbmV3ICg0MDk2KTsKLQotICB9IGVsc2UgaWYgKGVuY29kZXItPmNmZy5nX3Bhc3MgPT0gVlBYX1JDX0xBU1RfUEFTUykgewotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgIGlmIChlbmNvZGVyLT5jZmcucmNfdHdvcGFzc19zdGF0c19pbi5idWYgIT0gTlVMTCkgewotICAgICAgZ19mcmVlIChlbmNvZGVyLT5jZmcucmNfdHdvcGFzc19zdGF0c19pbi5idWYpOwotICAgICAgZW5jb2Rlci0+Y2ZnLnJjX3R3b3Bhc3Nfc3RhdHNfaW4uYnVmID0gTlVMTDsKLSAgICAgIGVuY29kZXItPmNmZy5yY190d29wYXNzX3N0YXRzX2luLnN6ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMgKGVuY29kZXItPm11bHRpcGFzc19jYWNoZV9maWxlLAotICAgICAgICAgICAgKGdjaGFyICoqKSAmIGVuY29kZXItPmNmZy5yY190d29wYXNzX3N0YXRzX2luLmJ1ZiwKLSAgICAgICAgICAgICZlbmNvZGVyLT5jZmcucmNfdHdvcGFzc19zdGF0c19pbi5zeiwgJmVycikpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChlbmNvZGVyLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAgICgiRmFpbGVkIHRvIHJlYWQgbXVsdGlwYXNzIGNhY2hlIGZpbGUgcHJvdmlkZWQiKSwgKCIlcyIsCi0gICAgICAgICAgICAgIGVyci0+bWVzc2FnZSkpOwotICAgICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIHN0YXR1cyA9Ci0gICAgICB2cHhfY29kZWNfZW5jX2luaXQgKCZlbmNvZGVyLT5lbmNvZGVyLCB2cHhfZW5jX2NsYXNzLT5nZXRfYWxnbyAoZW5jb2RlciksCi0gICAgICAmZW5jb2Rlci0+Y2ZnLCAwKTsKLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZW5jb2RlciwgTElCUkFSWSwgSU5JVCwKLSAgICAgICAgKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIiksICgiJXMiLCBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpKTsKLSAgICBnX211dGV4X3VubG9jayAoJmVuY29kZXItPmVuY29kZXJfbG9jayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKHZweF9lbmNfY2xhc3MtPmVuYWJsZV9zY2FsaW5nIChlbmNvZGVyKSkgewotICAgIHZweF9zY2FsaW5nX21vZGVfdCBzbTsKLQotICAgIHNtLmhfc2NhbGluZ19tb2RlID0gZW5jb2Rlci0+aF9zY2FsaW5nX21vZGU7Ci0gICAgc20udl9zY2FsaW5nX21vZGUgPSBlbmNvZGVyLT52X3NjYWxpbmdfbW9kZTsKLQotICAgIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfU0NBTEVNT0RFLCAmc20pOwotICAgIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuY29kZXIsICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX1NDQUxFTU9ERTogJXMiLAotICAgICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gICAgfQotICB9Ci0KLSAgc3RhdHVzID0KLSAgICAgIHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfQ1BVVVNFRCwKLSAgICAgIGVuY29kZXItPmNwdV91c2VkKTsKLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuY29kZXIsICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX0NQVVVTRUQ6ICVzIiwKLSAgICAgICAgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKTsKLSAgfQotCi0gIHN0YXR1cyA9Ci0gICAgICB2cHhfY29kZWNfY29udHJvbCAoJmVuY29kZXItPmVuY29kZXIsIFZQOEVfU0VUX0VOQUJMRUFVVE9BTFRSRUYsCi0gICAgICAoZW5jb2Rlci0+ZW5hYmxlX2F1dG9fYWx0X3JlZiA/IDEgOiAwKSk7Ci0gIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmNvZGVyLAotICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9FTkFCTEVBVVRPQUxUUkVGOiAlcyIsCi0gICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gIH0KLSAgc3RhdHVzID0gdnB4X2NvZGVjX2NvbnRyb2wgKCZlbmNvZGVyLT5lbmNvZGVyLCBWUDhFX1NFVF9OT0lTRV9TRU5TSVRJVklUWSwKLSAgICAgIGVuY29kZXItPm5vaXNlX3NlbnNpdGl2aXR5KTsKLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuY29kZXIsCi0gICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX05PSVNFX1NFTlNJVElWSVRZOiAlcyIsCi0gICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gIH0KLSAgc3RhdHVzID0gdnB4X2NvZGVjX2NvbnRyb2wgKCZlbmNvZGVyLT5lbmNvZGVyLCBWUDhFX1NFVF9TSEFSUE5FU1MsCi0gICAgICBlbmNvZGVyLT5zaGFycG5lc3MpOwotICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZW5jb2RlciwKLSAgICAgICAgIkZhaWxlZCB0byBzZXQgVlA4RV9TRVRfU0hBUlBORVNTOiAlcyIsIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gIH0KLSAgc3RhdHVzID0gdnB4X2NvZGVjX2NvbnRyb2wgKCZlbmNvZGVyLT5lbmNvZGVyLCBWUDhFX1NFVF9TVEFUSUNfVEhSRVNIT0xELAotICAgICAgZW5jb2Rlci0+c3RhdGljX3RocmVzaG9sZCk7Ci0gIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmNvZGVyLAotICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9TVEFUSUNfVEhSRVNIT0xEOiAlcyIsCi0gICAgICAgIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSk7Ci0gIH0KLSAgc3RhdHVzID0gdnB4X2NvZGVjX2NvbnRyb2wgKCZlbmNvZGVyLT5lbmNvZGVyLCBWUDhFX1NFVF9UT0tFTl9QQVJUSVRJT05TLAotICAgICAgZW5jb2Rlci0+dG9rZW5fcGFydGl0aW9ucyk7Ci0gIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmNvZGVyLAotICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9UT0tFTl9QQVJUSU9OUzogJXMiLAotICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICB9Ci0gIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfQVJOUl9NQVhGUkFNRVMsCi0gICAgICBlbmNvZGVyLT5hcm5yX21heGZyYW1lcyk7Ci0gIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmNvZGVyLAotICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9BUk5SX01BWEZSQU1FUzogJXMiLAotICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICB9Ci0gIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfQVJOUl9TVFJFTkdUSCwKLSAgICAgIGVuY29kZXItPmFybnJfc3RyZW5ndGgpOwotICBpZiAoc3RhdHVzICE9IFZQWF9DT0RFQ19PSykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZW5jb2RlciwKLSAgICAgICAgIkZhaWxlZCB0byBzZXQgVlA4RV9TRVRfQVJOUl9TVFJFTkdUSDogJXMiLAotICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICB9Ci0gIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfVFVOSU5HLAotICAgICAgZW5jb2Rlci0+dHVuaW5nKTsKLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuY29kZXIsCi0gICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX1RVTklORzogJXMiLCBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICB9Ci0gIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfQ1FfTEVWRUwsCi0gICAgICBlbmNvZGVyLT5jcV9sZXZlbCk7Ci0gIGlmIChzdGF0dXMgIT0gVlBYX0NPREVDX09LKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmNvZGVyLAotICAgICAgICAiRmFpbGVkIHRvIHNldCBWUDhFX1NFVF9DUV9MRVZFTDogJXMiLCBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICB9Ci0gIHN0YXR1cyA9IHZweF9jb2RlY19jb250cm9sICgmZW5jb2Rlci0+ZW5jb2RlciwgVlA4RV9TRVRfTUFYX0lOVFJBX0JJVFJBVEVfUENULAotICAgICAgZW5jb2Rlci0+bWF4X2ludHJhX2JpdHJhdGVfcGN0KTsKLSAgaWYgKHN0YXR1cyAhPSBWUFhfQ09ERUNfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuY29kZXIsCi0gICAgICAgICJGYWlsZWQgdG8gc2V0IFZQOEVfU0VUX01BWF9JTlRSQV9CSVRSQVRFX1BDVDogJXMiLAotICAgICAgICBnc3RfdnB4X2Vycm9yX25hbWUgKHN0YXR1cykpOwotICB9Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0ZQU19EIChpbmZvKSA9PSAwIHx8IEdTVF9WSURFT19JTkZPX0ZQU19OIChpbmZvKSA9PSAwKSB7Ci0gICAgLyogRklYTUU6IEFzc3VtZSAyNWZwcyBmb3IgdW5rbm93biBmcmFtZXJhdGVzLiBCZXR0ZXIgdGhhbiByZXBvcnRpbmcKLSAgICAgKiB0aGF0IHdlIGludHJvZHVjZSBubyBsYXRlbmN5IHdoaWxlIHdlIGFjdHVhbGx5IGRvCi0gICAgICovCi0gICAgbGF0ZW5jeSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZW5jb2Rlci0+Y2ZnLmdfbGFnX2luX2ZyYW1lcywKLSAgICAgICAgMSAqIEdTVF9TRUNPTkQsIDI1KTsKLSAgfSBlbHNlIHsKLSAgICBsYXRlbmN5ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChlbmNvZGVyLT5jZmcuZ19sYWdfaW5fZnJhbWVzLAotICAgICAgICBHU1RfVklERU9fSU5GT19GUFNfRCAoaW5mbykgKiBHU1RfU0VDT05ELCBHU1RfVklERU9fSU5GT19GUFNfTiAoaW5mbykpOwotICB9Ci0gIGdzdF92aWRlb19lbmNvZGVyX3NldF9sYXRlbmN5ICh2aWRlb19lbmNvZGVyLCBsYXRlbmN5LCBsYXRlbmN5KTsKLSAgZW5jb2Rlci0+aW5pdGVkID0gVFJVRTsKLQotICAvKiBTdG9yZSBpbnB1dCBzdGF0ZSAqLwotICBpZiAoZW5jb2Rlci0+aW5wdXRfc3RhdGUpCi0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChlbmNvZGVyLT5pbnB1dF9zdGF0ZSk7Ci0gIGVuY29kZXItPmlucHV0X3N0YXRlID0gZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3JlZiAoc3RhdGUpOwotCi0gIC8qIHByZXBhcmUgY2FjaGVkIGltYWdlIGJ1ZmZlciBzZXR1cCAqLwotICBpbWFnZSA9ICZlbmNvZGVyLT5pbWFnZTsKLSAgbWVtc2V0IChpbWFnZSwgMCwgc2l6ZW9mICgqaW1hZ2UpKTsKLQotICB2cHhfZW5jX2NsYXNzLT5zZXRfaW1hZ2VfZm9ybWF0IChlbmNvZGVyLCBpbWFnZSk7Ci0KLSAgaW1hZ2UtPncgPSBpbWFnZS0+ZF93ID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluZm8pOwotICBpbWFnZS0+aCA9IGltYWdlLT5kX2ggPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pOwotCi0gIGltYWdlLT5zdHJpZGVbVlBYX1BMQU5FX1ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9TVFJJREUgKGluZm8sIDApOwotICBpbWFnZS0+c3RyaWRlW1ZQWF9QTEFORV9VXSA9IEdTVF9WSURFT19JTkZPX0NPTVBfU1RSSURFIChpbmZvLCAxKTsKLSAgaW1hZ2UtPnN0cmlkZVtWUFhfUExBTkVfVl0gPSBHU1RfVklERU9fSU5GT19DT01QX1NUUklERSAoaW5mbywgMik7Ci0KLSAgY2FwcyA9IHZweF9lbmNfY2xhc3MtPmdldF9uZXdfdnB4X2NhcHMgKGVuY29kZXIpOwotCi0gIHZweF9lbmNfY2xhc3MtPnNldF9zdHJlYW1faW5mbyAoZW5jb2RlciwgY2FwcywgaW5mbyk7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotCi0gIG91dHB1dF9zdGF0ZSA9Ci0gICAgICBnc3RfdmlkZW9fZW5jb2Rlcl9zZXRfb3V0cHV0X3N0YXRlICh2aWRlb19lbmNvZGVyLCBjYXBzLCBzdGF0ZSk7Ci0gIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAob3V0cHV0X3N0YXRlKTsKLQotICBnc3RfdmlkZW9fZW5jb2Rlcl9uZWdvdGlhdGUgKEdTVF9WSURFT19FTkNPREVSIChlbmNvZGVyKSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92cHhfZW5jX3Byb2Nlc3MgKEdzdFZQWEVuYyAqIGVuY29kZXIpCi17Ci0gIHZweF9jb2RlY19pdGVyX3QgaXRlciA9IE5VTEw7Ci0gIGNvbnN0IHZweF9jb2RlY19jeF9wa3RfdCAqcGt0OwotICBHc3RWaWRlb0VuY29kZXIgKnZpZGVvX2VuY29kZXI7Ci0gIHZvaWQgKnVzZXJfZGF0YTsKLSAgR3N0VmlkZW9Db2RlY0ZyYW1lICpmcmFtZTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0VlBYRW5jQ2xhc3MgKnZweF9lbmNfY2xhc3M7Ci0KLSAgdmlkZW9fZW5jb2RlciA9IEdTVF9WSURFT19FTkNPREVSIChlbmNvZGVyKTsKLSAgdnB4X2VuY19jbGFzcyA9IEdTVF9WUFhfRU5DX0dFVF9DTEFTUyAoZW5jb2Rlcik7Ci0KLSAgZ19tdXRleF9sb2NrICgmZW5jb2Rlci0+ZW5jb2Rlcl9sb2NrKTsKLSAgcGt0ID0gdnB4X2NvZGVjX2dldF9jeF9kYXRhICgmZW5jb2Rlci0+ZW5jb2RlciwgJml0ZXIpOwotICB3aGlsZSAocGt0ICE9IE5VTEwpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICBnYm9vbGVhbiBpbnZpc2libGU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmNvZGVyLCAicGFja2V0ICV1IHR5cGUgJWQiLCAoZ3VpbnQpIHBrdC0+ZGF0YS5mcmFtZS5zeiwKLSAgICAgICAgcGt0LT5raW5kKTsKLQotICAgIGlmIChwa3QtPmtpbmQgPT0gVlBYX0NPREVDX1NUQVRTX1BLVAotICAgICAgICAmJiBlbmNvZGVyLT5jZmcuZ19wYXNzID09IFZQWF9SQ19GSVJTVF9QQVNTKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZW5jb2RlciwgImhhbmRsaW5nIFNUQVRTIHBhY2tldCIpOwotCi0gICAgICBnX2J5dGVfYXJyYXlfYXBwZW5kIChlbmNvZGVyLT5maXJzdF9wYXNzX2NhY2hlX2NvbnRlbnQsCi0gICAgICAgICAgcGt0LT5kYXRhLnR3b3Bhc3Nfc3RhdHMuYnVmLCBwa3QtPmRhdGEudHdvcGFzc19zdGF0cy5zeik7Ci0KLSAgICAgIGZyYW1lID0gZ3N0X3ZpZGVvX2VuY29kZXJfZ2V0X29sZGVzdF9mcmFtZSAodmlkZW9fZW5jb2Rlcik7Ci0gICAgICBpZiAoZnJhbWUgIT0gTlVMTCkgewotICAgICAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfTElWRSk7Ci0gICAgICAgIGZyYW1lLT5vdXRwdXRfYnVmZmVyID0gYnVmZmVyOwotICAgICAgICBnX211dGV4X3VubG9jayAoJmVuY29kZXItPmVuY29kZXJfbG9jayk7Ci0gICAgICAgIHJldCA9IGdzdF92aWRlb19lbmNvZGVyX2ZpbmlzaF9mcmFtZSAodmlkZW9fZW5jb2RlciwgZnJhbWUpOwotICAgICAgICBnX211dGV4X2xvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotICAgICAgfQotCi0gICAgICBwa3QgPSB2cHhfY29kZWNfZ2V0X2N4X2RhdGEgKCZlbmNvZGVyLT5lbmNvZGVyLCAmaXRlcik7Ci0gICAgICBjb250aW51ZTsKLSAgICB9IGVsc2UgaWYgKHBrdC0+a2luZCAhPSBWUFhfQ09ERUNfQ1hfRlJBTUVfUEtUKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZW5jb2RlciwgIm5vbiBmcmFtZSBwa3Q6ICVkIiwgcGt0LT5raW5kKTsKLSAgICAgIHBrdCA9IHZweF9jb2RlY19nZXRfY3hfZGF0YSAoJmVuY29kZXItPmVuY29kZXIsICZpdGVyKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGludmlzaWJsZSA9IChwa3QtPmRhdGEuZnJhbWUuZmxhZ3MgJiBWUFhfRlJBTUVfSVNfSU5WSVNJQkxFKSAhPSAwOwotICAgIGZyYW1lID0gZ3N0X3ZpZGVvX2VuY29kZXJfZ2V0X29sZGVzdF9mcmFtZSAodmlkZW9fZW5jb2Rlcik7Ci0gICAgZ19hc3NlcnQgKGZyYW1lICE9IE5VTEwpOwotICAgIGlmICgocGt0LT5kYXRhLmZyYW1lLmZsYWdzICYgVlBYX0ZSQU1FX0lTX0tFWSkgIT0gMCkKLSAgICAgIEdTVF9WSURFT19DT0RFQ19GUkFNRV9TRVRfU1lOQ19QT0lOVCAoZnJhbWUpOwotICAgIGVsc2UKLSAgICAgIEdTVF9WSURFT19DT0RFQ19GUkFNRV9VTlNFVF9TWU5DX1BPSU5UIChmcmFtZSk7Ci0KLSAgICAvKiBGSVhNRSA6IEl0IHdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgdGhlIG1lbW9yeSBjb3B5IC4uLiAqLwotICAgIGJ1ZmZlciA9Ci0gICAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChwa3QtPmRhdGEuZnJhbWUuYnVmLAotICAgICAgICAgICAgcGt0LT5kYXRhLmZyYW1lLnN6KSwgcGt0LT5kYXRhLmZyYW1lLnN6KTsKLQotICAgIHVzZXJfZGF0YSA9IHZweF9lbmNfY2xhc3MtPnByb2Nlc3NfZnJhbWVfdXNlcl9kYXRhIChlbmNvZGVyLCBmcmFtZSk7Ci0KLSAgICBpZiAoaW52aXNpYmxlKSB7Ci0gICAgICByZXQgPQotICAgICAgICAgIHZweF9lbmNfY2xhc3MtPmhhbmRsZV9pbnZpc2libGVfZnJhbWVfYnVmZmVyIChlbmNvZGVyLCB1c2VyX2RhdGEsCi0gICAgICAgICAgYnVmZmVyKTsKLSAgICAgIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiAoZnJhbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmcmFtZS0+b3V0cHV0X2J1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZW5jb2Rlci0+ZW5jb2Rlcl9sb2NrKTsKLSAgICAgIHJldCA9IGdzdF92aWRlb19lbmNvZGVyX2ZpbmlzaF9mcmFtZSAodmlkZW9fZW5jb2RlciwgZnJhbWUpOwotICAgICAgZ19tdXRleF9sb2NrICgmZW5jb2Rlci0+ZW5jb2Rlcl9sb2NrKTsKLSAgICB9Ci0KLSAgICBwa3QgPSB2cHhfY29kZWNfZ2V0X2N4X2RhdGEgKCZlbmNvZGVyLT5lbmNvZGVyLCAmaXRlcik7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBob2xkaW5nIHRoZW4gc3RyZWFtIGxvY2sqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92cHhfZW5jX2RyYWluIChHc3RWaWRlb0VuY29kZXIgKiB2aWRlb19lbmNvZGVyKQotewotICBHc3RWUFhFbmMgKmVuY29kZXI7Ci0gIGludCBmbGFncyA9IDA7Ci0gIHZweF9jb2RlY19lcnJfdCBzdGF0dXM7Ci0gIGdpbnQ2NCBkZWFkbGluZTsKLSAgdnB4X2NvZGVjX3B0c190IHB0czsKLQotICBlbmNvZGVyID0gR1NUX1ZQWF9FTkMgKHZpZGVvX2VuY29kZXIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmVuY29kZXItPmVuY29kZXJfbG9jayk7Ci0gIGRlYWRsaW5lID0gZW5jb2Rlci0+ZGVhZGxpbmU7Ci0KLSAgcHRzID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZW5jb2Rlci0+bGFzdF9wdHMsCi0gICAgICBlbmNvZGVyLT5jZmcuZ190aW1lYmFzZS5kZW4sCi0gICAgICBlbmNvZGVyLT5jZmcuZ190aW1lYmFzZS5udW0gKiAoR3N0Q2xvY2tUaW1lKSBHU1RfU0VDT05EKTsKLQotICBzdGF0dXMgPSB2cHhfY29kZWNfZW5jb2RlICgmZW5jb2Rlci0+ZW5jb2RlciwgTlVMTCwgcHRzLCAwLCBmbGFncywgZGVhZGxpbmUpOwotICBnX211dGV4X3VubG9jayAoJmVuY29kZXItPmVuY29kZXJfbG9jayk7Ci0KLSAgaWYgKHN0YXR1cyAhPSAwKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZW5jb2RlciwgImVuY29kZSByZXR1cm5lZCAlZCAlcyIsIHN0YXR1cywKLSAgICAgICAgZ3N0X3ZweF9lcnJvcl9uYW1lIChzdGF0dXMpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICAvKiBkaXNwYXRjaCByZW1haW5pbmcgZnJhbWVzICovCi0gIGdzdF92cHhfZW5jX3Byb2Nlc3MgKGVuY29kZXIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmVuY29kZXItPmVuY29kZXJfbG9jayk7Ci0gIGlmIChlbmNvZGVyLT5jZmcuZ19wYXNzID09IFZQWF9SQ19GSVJTVF9QQVNTICYmIGVuY29kZXItPm11bHRpcGFzc19jYWNoZV9maWxlKSB7Ci0gICAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gICAgaWYgKCFnX2ZpbGVfc2V0X2NvbnRlbnRzIChlbmNvZGVyLT5tdWx0aXBhc3NfY2FjaGVfZmlsZSwKLSAgICAgICAgICAgIChjb25zdCBnY2hhciAqKSBlbmNvZGVyLT5maXJzdF9wYXNzX2NhY2hlX2NvbnRlbnQtPmRhdGEsCi0gICAgICAgICAgICBlbmNvZGVyLT5maXJzdF9wYXNzX2NhY2hlX2NvbnRlbnQtPmxlbiwgJmVycikpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChlbmNvZGVyLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgICAoIkZhaWxlZCB0byB3cml0ZSBtdWx0aXBhc3MgY2FjaGUgZmlsZTogJXMiLCBlcnItPm1lc3NhZ2UpKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICB9Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZlbmNvZGVyLT5lbmNvZGVyX2xvY2spOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdnB4X2VuY19mbHVzaCAoR3N0VmlkZW9FbmNvZGVyICogdmlkZW9fZW5jb2RlcikKLXsKLSAgR3N0VlBYRW5jICplbmNvZGVyOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvX2VuY29kZXIsICJmbHVzaCIpOwotCi0gIGVuY29kZXIgPSBHU1RfVlBYX0VOQyAodmlkZW9fZW5jb2Rlcik7Ci0KLSAgZ3N0X3ZweF9lbmNfZGVzdHJveV9lbmNvZGVyIChlbmNvZGVyKTsKLSAgaWYgKGVuY29kZXItPmlucHV0X3N0YXRlKSB7Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3JlZiAoZW5jb2Rlci0+aW5wdXRfc3RhdGUpOwotICAgIGdzdF92cHhfZW5jX3NldF9mb3JtYXQgKHZpZGVvX2VuY29kZXIsIGVuY29kZXItPmlucHV0X3N0YXRlKTsKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKGVuY29kZXItPmlucHV0X3N0YXRlKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZweF9lbmNfZmluaXNoIChHc3RWaWRlb0VuY29kZXIgKiB2aWRlb19lbmNvZGVyKQotewotICBHc3RWUFhFbmMgKmVuY29kZXI7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvX2VuY29kZXIsICJmaW5pc2giKTsKLQotICBlbmNvZGVyID0gR1NUX1ZQWF9FTkMgKHZpZGVvX2VuY29kZXIpOwotCi0gIGlmIChlbmNvZGVyLT5pbml0ZWQpIHsKLSAgICByZXQgPSBnc3RfdnB4X2VuY19kcmFpbiAodmlkZW9fZW5jb2Rlcik7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdnB4X2ltYWdlX3QgKgotZ3N0X3ZweF9lbmNfYnVmZmVyX3RvX2ltYWdlIChHc3RWUFhFbmMgKiBlbmMsIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKLXsKLSAgdnB4X2ltYWdlX3QgKmltYWdlID0gZ19zbGljZV9uZXcgKHZweF9pbWFnZV90KTsKLQotICBtZW1jcHkgKGltYWdlLCAmZW5jLT5pbWFnZSwgc2l6ZW9mICgqaW1hZ2UpKTsKLQotICBpbWFnZS0+cGxhbmVzW1ZQWF9QTEFORV9ZXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAwKTsKLSAgaW1hZ2UtPnBsYW5lc1tWUFhfUExBTkVfVV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMSk7Ci0gIGltYWdlLT5wbGFuZXNbVlBYX1BMQU5FX1ZdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDIpOwotCi0gIGltYWdlLT5zdHJpZGVbVlBYX1BMQU5FX1ldID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCk7Ci0gIGltYWdlLT5zdHJpZGVbVlBYX1BMQU5FX1VdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMSk7Ci0gIGltYWdlLT5zdHJpZGVbVlBYX1BMQU5FX1ZdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMik7Ci0KLSAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZweF9lbmNfaGFuZGxlX2ZyYW1lIChHc3RWaWRlb0VuY29kZXIgKiB2aWRlb19lbmNvZGVyLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKQotewotICBHc3RWUFhFbmMgKmVuY29kZXI7Ci0gIHZweF9jb2RlY19lcnJfdCBzdGF0dXM7Ci0gIGludCBmbGFncyA9IDA7Ci0gIHZweF9pbWFnZV90ICppbWFnZTsKLSAgR3N0VmlkZW9GcmFtZSB2ZnJhbWU7Ci0gIHZweF9jb2RlY19wdHNfdCBwdHM7Ci0gIHVuc2lnbmVkIGxvbmcgZHVyYXRpb247Ci0gIEdzdFZQWEVuY0NsYXNzICp2cHhfZW5jX2NsYXNzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvX2VuY29kZXIsICJoYW5kbGVfZnJhbWUiKTsKLQotICBlbmNvZGVyID0gR1NUX1ZQWF9FTkMgKHZpZGVvX2VuY29kZXIpOwotICB2cHhfZW5jX2NsYXNzID0gR1NUX1ZQWF9FTkNfR0VUX0NMQVNTIChlbmNvZGVyKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb19lbmNvZGVyLCAic2l6ZSAlZCAlZCIsCi0gICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoJmVuY29kZXItPmlucHV0X3N0YXRlLT5pbmZvKSwKLSAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmVuY29kZXItPmlucHV0X3N0YXRlLT5pbmZvKSk7Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJnZmcmFtZSwgJmVuY29kZXItPmlucHV0X3N0YXRlLT5pbmZvLAotICAgICAgZnJhbWUtPmlucHV0X2J1ZmZlciwgR1NUX01BUF9SRUFEKTsKLSAgaW1hZ2UgPSBnc3RfdnB4X2VuY19idWZmZXJfdG9faW1hZ2UgKGVuY29kZXIsICZ2ZnJhbWUpOwotCi0gIHZweF9lbmNfY2xhc3MtPnNldF9mcmFtZV91c2VyX2RhdGEgKGVuY29kZXIsIGZyYW1lLCBpbWFnZSk7Ci0KLSAgaWYgKEdTVF9WSURFT19DT0RFQ19GUkFNRV9JU19GT1JDRV9LRVlGUkFNRSAoZnJhbWUpKSB7Ci0gICAgZmxhZ3MgfD0gVlBYX0VGTEFHX0ZPUkNFX0tGOwotICB9Ci0KLSAgZ19tdXRleF9sb2NrICgmZW5jb2Rlci0+ZW5jb2Rlcl9sb2NrKTsKLSAgcHRzID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZnJhbWUtPnB0cywKLSAgICAgIGVuY29kZXItPmNmZy5nX3RpbWViYXNlLmRlbiwKLSAgICAgIGVuY29kZXItPmNmZy5nX3RpbWViYXNlLm51bSAqIChHc3RDbG9ja1RpbWUpIEdTVF9TRUNPTkQpOwotICBlbmNvZGVyLT5sYXN0X3B0cyA9IGZyYW1lLT5wdHM7Ci0KLSAgaWYgKGZyYW1lLT5kdXJhdGlvbiAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgZHVyYXRpb24gPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGZyYW1lLT5kdXJhdGlvbiwgZW5jb2Rlci0+Y2ZnLmdfdGltZWJhc2UuZGVuLAotICAgICAgICBlbmNvZGVyLT5jZmcuZ190aW1lYmFzZS5udW0gKiAoR3N0Q2xvY2tUaW1lKSBHU1RfU0VDT05EKTsKLQotICAgIGlmIChkdXJhdGlvbiA+IDApIHsKLSAgICAgIGVuY29kZXItPmxhc3RfcHRzICs9IGZyYW1lLT5kdXJhdGlvbjsKLSAgICB9IGVsc2UgewotICAgICAgLyogV2UgZm9yY2UgdGhlIHBhdGggaWdub3JpbmcgdGhlIGR1cmF0aW9uIGlmIHdlIGVuZCB1cCB3aXRoIGEgemVybwotICAgICAgICogdmFsdWUgZm9yIGR1cmF0aW9uIGFmdGVyIHNjYWxpbmcgKGUuZy4gZHVyYXRpb24gdmFsdWUgdG9vIHNtYWxsKSAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlbmNvZGVyLAotICAgICAgICAgICJJZ25vcmluZyB0b28gc21hbGwgZnJhbWUgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGZyYW1lLT5kdXJhdGlvbikpOwotICAgICAgZHVyYXRpb24gPSAxOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBkdXJhdGlvbiA9IDE7Ci0gIH0KLQotICBzdGF0dXMgPSB2cHhfY29kZWNfZW5jb2RlICgmZW5jb2Rlci0+ZW5jb2RlciwgaW1hZ2UsCi0gICAgICBwdHMsIGR1cmF0aW9uLCBmbGFncywgZW5jb2Rlci0+ZGVhZGxpbmUpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmZW5jb2Rlci0+ZW5jb2Rlcl9sb2NrKTsKLSAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmdmZyYW1lKTsKLQotICBpZiAoc3RhdHVzICE9IDApIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZW5jb2RlciwgTElCUkFSWSwgRU5DT0RFLAotICAgICAgICAoIkZhaWxlZCB0byBlbmNvZGUgZnJhbWUiKSwgKCIlcyIsIGdzdF92cHhfZXJyb3JfbmFtZSAoc3RhdHVzKSkpOwotICAgIGdzdF92aWRlb19jb2RlY19mcmFtZV9zZXRfdXNlcl9kYXRhIChmcmFtZSwgTlVMTCwgTlVMTCk7Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3VucmVmIChmcmFtZSk7Ci0KLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLSAgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3VucmVmIChmcmFtZSk7Ci0gIHJldHVybiBnc3RfdnB4X2VuY19wcm9jZXNzIChlbmNvZGVyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdnB4X2VuY19zaW5rX2V2ZW50IChHc3RWaWRlb0VuY29kZXIgKiBiZW5jLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RWUFhFbmMgKmVuYyA9IEdTVF9WUFhfRU5DIChiZW5jKTsKLQotICAvKiBGSVhNRSA6IE1vdmUgdGhpcyB0byBiYXNlIGVuY29kZXIgY2xhc3MgKi8KLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfVEFHKSB7Ci0gICAgR3N0VGFnTGlzdCAqbGlzdDsKLSAgICBHc3RUYWdTZXR0ZXIgKnNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChlbmMpOwotICAgIGNvbnN0IEdzdFRhZ01lcmdlTW9kZSBtb2RlID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChzZXR0ZXIpOwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZsaXN0KTsKLSAgICBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzIChzZXR0ZXIsIGxpc3QsIG1vZGUpOwotICB9Ci0KLSAgLyoganVzdCBwZWVrZWQsIGJhc2VjbGFzcyBoYW5kbGVzIHRoZSByZXN0ICovCi0gIHJldHVybiBHU1RfVklERU9fRU5DT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoYmVuYywgZXZlbnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92cHhfZW5jX3Byb3Bvc2VfYWxsb2NhdGlvbiAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEgKHF1ZXJ5LCBHU1RfVklERU9fTUVUQV9BUElfVFlQRSwgTlVMTCk7Ci0KLSAgcmV0dXJuIEdTVF9WSURFT19FTkNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5wcm9wb3NlX2FsbG9jYXRpb24gKGVuY29kZXIsCi0gICAgICBxdWVyeSk7Ci19Ci0KLSNlbmRpZiAvKiBIQVZFX1ZQOF9FTkNPREVSIHx8IEhBVkVfVlA5X0VOQ09ERVIgKi8KZGlmZiAtLWdpdCBhL2V4dC92cHgvZ3N0dnB4ZW5jLmggYi9leHQvdnB4L2dzdHZweGVuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjAxOTI3Li4wMDAwMDAwCi0tLSBhL2V4dC92cHgvZ3N0dnB4ZW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyogVlA4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRW50cm9weSBXYXZlIEluYwotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfX0dTVF9WUFhfRU5DX0hfXwotI2RlZmluZSBfX0dTVF9WUFhfRU5DX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfVlA4X0VOQ09ERVIpIHx8IGRlZmluZWQoSEFWRV9WUDlfRU5DT0RFUikKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmg+Ci0KLS8qIEZJWE1FOiBVbmRlZiBIQVZFX0NPTkZJR19IIGJlY2F1c2UgdnB4X2NvZGVjLmggdXNlcyBpdCwKLSAqIHdoaWNoIGNhdXNlcyBjb21waWxhdGlvbiBmYWlsdXJlcyAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSN1bmRlZiBIQVZFX0NPTkZJR19ICi0jZW5kaWYKLQotI2luY2x1ZGUgPHZweC92cHhfZW5jb2Rlci5oPgotI2luY2x1ZGUgPHZweC92cDhjeC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVlBYX0VOQyBcCi0gIChnc3RfdnB4X2VuY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVlBYX0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1ZQWF9FTkMsR3N0VlBYRW5jKSkKLSNkZWZpbmUgR1NUX1ZQWF9FTkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVlBYX0VOQyxHc3RWUFhFbmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WUFhfRU5DKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVlBYX0VOQykpCi0jZGVmaW5lIEdTVF9JU19WUFhfRU5DX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WUFhfRU5DKSkKLSNkZWZpbmUgR1NUX1ZQWF9FTkNfR0VUX0NMQVNTKG9iaikgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfVlBYX0VOQywgR3N0VlBYRW5jQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VlBYRW5jIEdzdFZQWEVuYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWUFhFbmNDbGFzcyBHc3RWUFhFbmNDbGFzczsKLQotc3RydWN0IF9Hc3RWUFhFbmMKLXsKLSAgR3N0VmlkZW9FbmNvZGVyIGJhc2VfdmlkZW9fZW5jb2RlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICB2cHhfY29kZWNfY3R4X3QgZW5jb2RlcjsKLSAgR011dGV4IGVuY29kZXJfbG9jazsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIHZweF9jb2RlY19lbmNfY2ZnX3QgY2ZnOwotICBnYm9vbGVhbiBoYXZlX2RlZmF1bHRfY29uZmlnOwotICBnYm9vbGVhbiByY190YXJnZXRfYml0cmF0ZV9zZXQ7Ci0gIGdpbnQgbl90c190YXJnZXRfYml0cmF0ZTsKLSAgZ2ludCBuX3RzX3JhdGVfZGVjaW1hdG9yOwotICBnaW50IG5fdHNfbGF5ZXJfaWQ7Ci0gIC8qIEdsb2JhbCB0d28tcGFzcyBvcHRpb25zICovCi0gIGdjaGFyICptdWx0aXBhc3NfY2FjaGVfZmlsZTsKLSAgZ2NoYXIgKm11bHRpcGFzc19jYWNoZV9wcmVmaXg7Ci0gIGd1aW50IG11bHRpcGFzc19jYWNoZV9pZHg7Ci0gIEdCeXRlQXJyYXkgKmZpcnN0X3Bhc3NfY2FjaGVfY29udGVudDsKLQotICAvKiBFbmNvZGUgcGFyYW1ldGVyICovCi0gIGdpbnQ2NCBkZWFkbGluZTsKLQotICAvKiBDb250cm9scyAqLwotICBWUFhfU0NBTElOR19NT0RFIGhfc2NhbGluZ19tb2RlOwotICBWUFhfU0NBTElOR19NT0RFIHZfc2NhbGluZ19tb2RlOwotICBpbnQgY3B1X3VzZWQ7Ci0gIGdib29sZWFuIGVuYWJsZV9hdXRvX2FsdF9yZWY7Ci0gIHVuc2lnbmVkIGludCBub2lzZV9zZW5zaXRpdml0eTsKLSAgdW5zaWduZWQgaW50IHNoYXJwbmVzczsKLSAgdW5zaWduZWQgaW50IHN0YXRpY190aHJlc2hvbGQ7Ci0gIHZwOGVfdG9rZW5fcGFydGl0aW9ucyB0b2tlbl9wYXJ0aXRpb25zOwotICB1bnNpZ25lZCBpbnQgYXJucl9tYXhmcmFtZXM7Ci0gIHVuc2lnbmVkIGludCBhcm5yX3N0cmVuZ3RoOwotICB1bnNpZ25lZCBpbnQgYXJucl90eXBlOwotICB2cDhlX3R1bmluZyB0dW5pbmc7Ci0gIHVuc2lnbmVkIGludCBjcV9sZXZlbDsKLSAgdW5zaWduZWQgaW50IG1heF9pbnRyYV9iaXRyYXRlX3BjdDsKLSAgLyogVGltZWJhc2UgLSBhIHZhbHVlIG9mIDAgd2lsbCB1c2UgdGhlIGZyYW1lcmF0ZSAqLwotICB1bnNpZ25lZCBpbnQgdGltZWJhc2VfbjsKLSAgdW5zaWduZWQgaW50IHRpbWViYXNlX2Q7Ci0KLSAgLyogc3RhdGUgKi8KLSAgZ2Jvb2xlYW4gaW5pdGVkOwotCi0gIHZweF9pbWFnZV90IGltYWdlOwotCi0gIEdzdENsb2NrVGltZSBsYXN0X3B0czsKLQotICBHc3RWaWRlb0NvZGVjU3RhdGUgKmlucHV0X3N0YXRlOwotfTsKLQotc3RydWN0IF9Hc3RWUFhFbmNDbGFzcwotewotICBHc3RWaWRlb0VuY29kZXJDbGFzcyBiYXNlX3ZpZGVvX2VuY29kZXJfY2xhc3M7Ci0gIC8qdmlydHVhbCBmdW5jdGlvbiB0byBnZXQgc3VwcG9ydGVkIGFsZ28qLwotICB2cHhfY29kZWNfaWZhY2VfdCogKCpnZXRfYWxnbykgKEdzdFZQWEVuYyAqZW5jKTsKLSAgLyplbmFibGVkIHNjYWxpbmcqLwotICBnYm9vbGVhbiAoKmVuYWJsZV9zY2FsaW5nKSAoR3N0VlBYRW5jICplbmMpOwotICAvKnNldCBpbWFnZSBmb3JtYXQgaW5mbyovCi0gIHZvaWQgKCpzZXRfaW1hZ2VfZm9ybWF0KSAoR3N0VlBYRW5jICplbmMsIHZweF9pbWFnZV90ICppbWFnZSk7Ci0gIC8qZ2V0IG5ldyBzaW1wbGUgY2FwcyovCi0gIEdzdENhcHMqICgqZ2V0X25ld192cHhfY2FwcykgKEdzdFZQWEVuYyAqZW5jKTsKLSAgLypzZXQgc3RyZWFtIGluZm8qLwotICB2b2lkICgqc2V0X3N0cmVhbV9pbmZvKSAoR3N0VlBYRW5jICplbmMsIEdzdENhcHMgKmNhcHMsIEdzdFZpZGVvSW5mbyAqaW5mbyk7Ci0gIC8qcHJvY2VzcyB1c2VyIGRhdGEqLwotICB2b2lkKiAoKnByb2Nlc3NfZnJhbWVfdXNlcl9kYXRhKSAoR3N0VlBYRW5jICplbmMsIEdzdFZpZGVvQ29kZWNGcmFtZSogZnJhbWUpOwotICAvKnNldCBmcmFtZSB1c2VyIGRhdGEqLwotICB2b2lkICgqc2V0X2ZyYW1lX3VzZXJfZGF0YSkgKEdzdFZQWEVuYyAqZW5jLCBHc3RWaWRlb0NvZGVjRnJhbWUqIGZyYW1lLCB2cHhfaW1hZ2VfdCAqaW1hZ2UpOwotICAvKkhhbmRsZSBpbnZpc2libGUgZnJhbWUqLwotICBHc3RGbG93UmV0dXJuICgqaGFuZGxlX2ludmlzaWJsZV9mcmFtZV9idWZmZXIpIChHc3RWUFhFbmMgKmVuYywgdm9pZCogdXNlcl9kYXRhLCBHc3RCdWZmZXIqIGJ1ZmZlcik7Ci19OwotCi1HVHlwZSBnc3RfdnB4X2VuY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX19HU1RfVlBYX0VOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2V4dC92cHgvcGx1Z2luLmMgYi9leHQvdnB4L3BsdWdpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjA0ZWZhLi4wMDAwMDAwCi0tLSBhL2V4dC92cHgvcGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBWUDgKLSAqIENvcHlyaWdodCAoQykgMjAwNiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBFbnRyb3B5IFdhdmUgSW5jCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdHZwOGRlYy5oIgotI2luY2x1ZGUgImdzdHZwOGVuYy5oIgotI2luY2x1ZGUgImdzdHZwOWRlYy5oIgotI2luY2x1ZGUgImdzdHZwOWVuYy5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0jaWZkZWYgSEFWRV9WUDhfREVDT0RFUgotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidnA4ZGVjIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIGdzdF92cDhfZGVjX2dldF90eXBlICgpKTsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WUDhfRU5DT0RFUgotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidnA4ZW5jIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIGdzdF92cDhfZW5jX2dldF90eXBlICgpKTsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WUDlfREVDT0RFUgotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidnA5ZGVjIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIGdzdF92cDlfZGVjX2dldF90eXBlICgpKTsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WUDlfRU5DT0RFUgotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidnA5ZW5jIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIGdzdF92cDlfZW5jX2dldF90eXBlICgpKTsKLSNlbmRpZgotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgdnB4LAotICAgICJWUDggcGx1Z2luIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvd2F2cGFjay9NYWtlZmlsZS5hbSBiL2V4dC93YXZwYWNrL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzE2M2ZjLi4wMDAwMDAwCi0tLSBhL2V4dC93YXZwYWNrL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0d2F2cGFjay5sYQotCi1saWJnc3R3YXZwYWNrX2xhX1NPVVJDRVMgPSBcCi0JCQkJZ3N0d2F2cGFjay5jIFwKLQkJCQlnc3R3YXZwYWNrY29tbW9uLmMgXAotCQkJCWdzdHdhdnBhY2tkZWMuYyBcCi0JCQkJZ3N0d2F2cGFja2VuYy5jIFwKLQkJCQlnc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmMKLQotbGliZ3N0d2F2cGFja19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JCQkJJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChXQVZQQUNLX0NGTEFHUykKLWxpYmdzdHdhdnBhY2tfbGFfTElCQUREID0gICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JCQkJJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKFdBVlBBQ0tfTElCUykKLWxpYmdzdHdhdnBhY2tfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0d2F2cGFja19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IFwKLQkJZ3N0d2F2cGFja2RlYy5oIFwKLQkJZ3N0d2F2cGFja2VuYy5oIFwKLQkJZ3N0d2F2cGFja2NvbW1vbi5oIFwKLQkJZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5oCi0KZGlmZiAtLWdpdCBhL2V4dC93YXZwYWNrL01ha2VmaWxlLmluIGIvZXh0L3dhdnBhY2svTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTBmMWQuLjAwMDAwMDAKLS0tIGEvZXh0L3dhdnBhY2svTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NjEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZXh0L3dhdnBhY2sKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3R3YXZwYWNrX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3R3YXZwYWNrX2xhX09CSkVDVFMgPSBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2subG8gXAotCWxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2NvbW1vbi5sbyBcCi0JbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrZGVjLmxvIFwKLQlsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tlbmMubG8gXAotCWxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5sbwotbGliZ3N0d2F2cGFja19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3R3YXZwYWNrX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3R3YXZwYWNrX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0d2F2cGFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHdhdnBhY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0d2F2cGFja19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R3YXZwYWNrX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHdhdnBhY2tfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0d2F2cGFjay5sYQotbGliZ3N0d2F2cGFja19sYV9TT1VSQ0VTID0gXAotCQkJCWdzdHdhdnBhY2suYyBcCi0JCQkJZ3N0d2F2cGFja2NvbW1vbi5jIFwKLQkJCQlnc3R3YXZwYWNrZGVjLmMgXAotCQkJCWdzdHdhdnBhY2tlbmMuYyBcCi0JCQkJZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jCi0KLWxpYmdzdHdhdnBhY2tfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCQkJCSQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoV0FWUEFDS19DRkxBR1MpCi0KLWxpYmdzdHdhdnBhY2tfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkJCQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoV0FWUEFDS19MSUJTKQotCi1saWJnc3R3YXZwYWNrX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHdhdnBhY2tfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gXAotCQlnc3R3YXZwYWNrZGVjLmggXAotCQlnc3R3YXZwYWNrZW5jLmggXAotCQlnc3R3YXZwYWNrY29tbW9uLmggXAotCQlnc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3dhdnBhY2svTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZXh0L3dhdnBhY2svTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R3YXZwYWNrLmxhOiAkKGxpYmdzdHdhdnBhY2tfbGFfT0JKRUNUUykgJChsaWJnc3R3YXZwYWNrX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R3YXZwYWNrX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3R3YXZwYWNrX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3R3YXZwYWNrX2xhX09CSkVDVFMpICQobGliZ3N0d2F2cGFja19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFjay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2NvbW1vbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2RlYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2VuYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrLmxvOiBnc3R3YXZwYWNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZwYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHdhdnBhY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFjay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrLlRwbyAtYyAtbyBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2subG8gYHRlc3QgLWYgJ2dzdHdhdnBhY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2cGFjay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2suVHBvICQoREVQRElSKS9saWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2suUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0d2F2cGFjay5jJyBvYmplY3Q9J2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFjay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHdhdnBhY2tfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2cGFja19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2subG8gYHRlc3QgLWYgJ2dzdHdhdnBhY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2cGFjay5jCi0KLWxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2NvbW1vbi5sbzogZ3N0d2F2cGFja2NvbW1vbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0d2F2cGFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R3YXZwYWNrX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tjb21tb24ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2NvbW1vbi5UcG8gLWMgLW8gbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrY29tbW9uLmxvIGB0ZXN0IC1mICdnc3R3YXZwYWNrY29tbW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhdnBhY2tjb21tb24uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrY29tbW9uLlRwbyAkKERFUERJUikvbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrY29tbW9uLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHdhdnBhY2tjb21tb24uYycgb2JqZWN0PSdsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tjb21tb24ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZwYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHdhdnBhY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrY29tbW9uLmxvIGB0ZXN0IC1mICdnc3R3YXZwYWNrY29tbW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhdnBhY2tjb21tb24uYwotCi1saWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tkZWMubG86IGdzdHdhdnBhY2tkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHdhdnBhY2tfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2cGFja19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrZGVjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tkZWMuVHBvIC1jIC1vIGxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2RlYy5sbyBgdGVzdCAtZiAnZ3N0d2F2cGFja2RlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZwYWNrZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2RlYy5UcG8gJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2RlYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R3YXZwYWNrZGVjLmMnIG9iamVjdD0nbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrZGVjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0d2F2cGFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R3YXZwYWNrX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2RlYy5sbyBgdGVzdCAtZiAnZ3N0d2F2cGFja2RlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZwYWNrZGVjLmMKLQotbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrZW5jLmxvOiBnc3R3YXZwYWNrZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZwYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHdhdnBhY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2VuYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrZW5jLlRwbyAtYyAtbyBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tlbmMubG8gYHRlc3QgLWYgJ2dzdHdhdnBhY2tlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2cGFja2VuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tlbmMuVHBvICQoREVQRElSKS9saWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tlbmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0d2F2cGFja2VuYy5jJyBvYmplY3Q9J2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja2VuYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHdhdnBhY2tfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2cGFja19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tlbmMubG8gYHRlc3QgLWYgJ2dzdHdhdnBhY2tlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2cGFja2VuYy5jCi0KLWxpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5sbzogZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0d2F2cGFja19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R3YXZwYWNrX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tzdHJlYW1yZWFkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHdhdnBhY2tfbGEtZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5UcG8gLWMgLW8gbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmxvIGB0ZXN0IC1mICdnc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLlRwbyAkKERFUERJUikvbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYycgb2JqZWN0PSdsaWJnc3R3YXZwYWNrX2xhLWdzdHdhdnBhY2tzdHJlYW1yZWFkZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZwYWNrX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHdhdnBhY2tfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0d2F2cGFja19sYS1nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmxvIGB0ZXN0IC1mICdnc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9leHQvd2F2cGFjay9nc3R3YXZwYWNrLmMgYi9leHQvd2F2cGFjay9nc3R3YXZwYWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MDlhYTIuLjAwMDAwMDAKLS0tIGEvZXh0L3dhdnBhY2svZ3N0d2F2cGFjay5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogR1N0cmVhbWVyIHdhdnBhY2sgcGx1Z2luCi0gKiAoYykgMjAwNCBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLSAqCi0gKiBnc3R3YXZwYWNrLmM6IHBsdWdpbiBsb2FkZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLSNpbmNsdWRlICJnc3R3YXZwYWNrZGVjLmgiCi0jaW5jbHVkZSAiZ3N0d2F2cGFja2VuYy5oIgotCi0vKiBkZWJ1ZyBjYXRlZ29yeSBmb3IgY29tbW9uIGNvZGUgKi8KLUdTVF9ERUJVR19DQVRFR09SWSAod2F2cGFja19kZWJ1Zyk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHdhdnBhY2tfZGVidWcsICJ3YXZwYWNrIiwgMCwgIldhdnBhY2sgZWxlbWVudHMiKTsKLQotI2lmZGVmIEVOQUJMRV9OTFMKLSAgR1NUX0RFQlVHICgiYmluZGluZyB0ZXh0IGRvbWFpbiAlcyB0byBsb2NhbGUgZGlyICVzIiwgR0VUVEVYVF9QQUNLQUdFLAotICAgICAgTE9DQUxFRElSKTsKLSAgYmluZHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSwgTE9DQUxFRElSKTsKLSAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7Ci0jZW5kaWYKLQotICByZXR1cm4gKGdzdF93YXZwYWNrX2RlY19wbHVnaW5faW5pdCAocGx1Z2luKQotICAgICAgJiYgZ3N0X3dhdnBhY2tfZW5jX3BsdWdpbl9pbml0IChwbHVnaW4pKTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIHdhdnBhY2ssCi0gICAgIldhdnBhY2sgbG9zc2xlc3MvbG9zc3kgYXVkaW8gZm9ybWF0IGhhbmRsaW5nIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9leHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmMgYi9leHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExN2M5YjIuLjAwMDAwMDAKLS0tIGEvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2NvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY0ICswLDAgQEAKLS8qIEdTdHJlYW1lciBXYXZwYWNrIHBsdWdpbgotICogQ29weXJpZ2h0IChjKSAyMDA1IEFyd2VkIHYuIE1lcmthdHogPHYubWVya2F0ekBnbXgubmV0PgotICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNSBDb25pZmVyIFNvZnR3YXJlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGdzdHdhdnBhY2tjb21tb24uYzogY29tbW9uIGhlbHBlciBmdW5jdGlvbnMKLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0d2F2cGFja2NvbW1vbi5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh3YXZwYWNrX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdhdnBhY2tfZGVidWcKLQotZ2Jvb2xlYW4KLWdzdF93YXZwYWNrX3JlYWRfaGVhZGVyIChXYXZwYWNrSGVhZGVyICogaGVhZGVyLCBndWludDggKiBidWYpCi17Ci0gIG1lbW1vdmUgKGhlYWRlciwgYnVmLCBzaXplb2YgKFdhdnBhY2tIZWFkZXIpKTsKLQotICBXYXZwYWNrTGl0dGxlRW5kaWFuVG9OYXRpdmUgKGhlYWRlciwgKGNoYXIgKikgV2F2cGFja0hlYWRlckZvcm1hdCk7Ci0KLSAgcmV0dXJuIChtZW1jbXAgKGhlYWRlci0+Y2tJRCwgInd2cGsiLCA0KSA9PSAwKTsKLX0KLQotLyogaW5zcGlyZWQgYnkgdGhlIG9yaWdpbmFsIG9uZSBpbiB3YXZwYWNrICovCi1nYm9vbGVhbgotZ3N0X3dhdnBhY2tfcmVhZF9tZXRhZGF0YSAoR3N0V2F2cGFja01ldGFkYXRhICogd3BtZCwgZ3VpbnQ4ICogaGVhZGVyX2RhdGEsCi0gICAgZ3VpbnQ4ICoqIHBfZGF0YSkKLXsKLSAgV2F2cGFja0hlYWRlciBoZHI7Ci0gIGd1aW50OCAqZW5kOwotCi0gIGdzdF93YXZwYWNrX3JlYWRfaGVhZGVyICgmaGRyLCBoZWFkZXJfZGF0YSk7Ci0gIGVuZCA9IGhlYWRlcl9kYXRhICsgaGRyLmNrU2l6ZSArIDg7Ci0KLSAgaWYgKGVuZCAtICpwX2RhdGEgPCAyKQotICAgIHJldHVybiBGQUxTRTsKLQotICB3cG1kLT5pZCA9IEdTVF9SRUFEX1VJTlQ4ICgqcF9kYXRhKTsKLSAgd3BtZC0+Ynl0ZV9sZW5ndGggPSAyICogKGd1aW50KSBHU1RfUkVBRF9VSU5UOCAoKnBfZGF0YSArIDEpOwotCi0gICpwX2RhdGEgKz0gMjsKLQotICBpZiAoKHdwbWQtPmlkICYgSURfTEFSR0UpID09IElEX0xBUkdFKSB7Ci0gICAgZ3VpbnQgZXh0cmE7Ci0KLSAgICB3cG1kLT5pZCAmPSB+SURfTEFSR0U7Ci0KLSAgICBpZiAoZW5kIC0gKnBfZGF0YSA8IDIpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBleHRyYSA9IEdTVF9SRUFEX1VJTlQxNl9MRSAoKnBfZGF0YSk7Ci0gICAgd3BtZC0+Ynl0ZV9sZW5ndGggKz0gKGV4dHJhIDw8IDkpOwotICAgICpwX2RhdGEgKz0gMjsKLSAgfQotCi0gIGlmICgod3BtZC0+aWQgJiBJRF9PRERfU0laRSkgPT0gSURfT0REX1NJWkUpIHsKLSAgICB3cG1kLT5pZCAmPSB+SURfT0REX1NJWkU7Ci0gICAgLS13cG1kLT5ieXRlX2xlbmd0aDsKLSAgfQotCi0gIGlmICh3cG1kLT5ieXRlX2xlbmd0aCA+IDApIHsKLSAgICBpZiAoZW5kIC0gKnBfZGF0YSA8IHdwbWQtPmJ5dGVfbGVuZ3RoICsgKHdwbWQtPmJ5dGVfbGVuZ3RoICYgMSkpIHsKLSAgICAgIHdwbWQtPmRhdGEgPSBOVUxMOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHdwbWQtPmRhdGEgPSAqcF9kYXRhOwotICAgICpwX2RhdGEgKz0gd3BtZC0+Ynl0ZV9sZW5ndGggKyAod3BtZC0+Ynl0ZV9sZW5ndGggJiAxKTsKLSAgfSBlbHNlIHsKLSAgICB3cG1kLT5kYXRhID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1naW50Ci1nc3Rfd2F2cGFja19nZXRfZGVmYXVsdF9jaGFubmVsX21hc2sgKGdpbnQgbmNoYW5uZWxzKQotewotICBnaW50IGNoYW5uZWxfbWFzayA9IDA7Ci0KLSAgLyogU2V0IHRoZSBkZWZhdWx0IGNoYW5uZWwgbWFzayBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBjaGFubmVscy4KLSAgICogSXQncyB0aGUgc2FtZSBhcyBmb3IgV0FWRV9GT1JNQVRfRVhURU5ERUQ6Ci0gICAqIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2RldmljZS9hdWRpby9tdWx0aWNoYXVkLm1zcHgKLSAgICovCi0gIHN3aXRjaCAobmNoYW5uZWxzKSB7Ci0gICAgY2FzZSAxMToKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwNDAwOwotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAyMDA7Ci0gICAgY2FzZSA5OgotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAxMDA7Ci0gICAgY2FzZSA4OgotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAwODA7Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDA0MDsKLSAgICBjYXNlIDY6Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDAyMDsKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMDEwOwotICAgIGNhc2UgNDoKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMDA4OwotICAgIGNhc2UgMzoKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMDA0OwotICAgIGNhc2UgMjoKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMDAyOwotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAwMDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAvKiBGb3IgbW9ubyB1c2UgZnJvbnQgY2VudGVyICovCi0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDAwNDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIGNoYW5uZWxfbWFzazsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdAotewotICBjb25zdCBndWludDMyIG1zX21hc2s7Ci0gIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGdzdF9wb3M7Ci19IGxheW91dF9tYXBwaW5nW10gPSB7Ci0gIHsKLSAgMHgwMDAwMSwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVH0sIHsKLSAgMHgwMDAwMiwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFR9LCB7Ci0gIDB4MDAwMDQsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUn0sIHsKLSAgMHgwMDAwOCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMX0sIHsKLSAgMHgwMDAxMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZUfSwgewotICAweDAwMDIwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUfSwgewotICAweDAwMDQwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUX09GX0NFTlRFUn0sIHsKLSAgMHgwMDA4MCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFRfT0ZfQ0VOVEVSfSwgewotICAweDAwMTAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0NFTlRFUn0sIHsKLSAgMHgwMDIwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZUfSwgewotICAweDAwNDAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hUfSwgewotICAweDAwODAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfQ0VOVEVSfSwgewotICAweDAxMDAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfTEVGVH0sIHsKLSAgMHgwMjAwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0NFTlRFUn0sIHsKLSAgMHgwNDAwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX1JJR0hUfSwgewotICAweDA4MDAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9MRUZUfSwgewotICAweDEwMDAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9DRU5URVJ9LCB7Ci0gIDB4MjAwMDAsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9SRUFSX1JJR0hUfQotfTsKLQotI2RlZmluZSBNQVhfQ0hBTk5FTF9QT1NJVElPTlMgR19OX0VMRU1FTlRTIChsYXlvdXRfbWFwcGluZykKLQotZ2Jvb2xlYW4KLWdzdF93YXZwYWNrX2dldF9jaGFubmVsX3Bvc2l0aW9ucyAoZ2ludCBudW1fY2hhbm5lbHMsIGdpbnQgbGF5b3V0LAotICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICogcG9zKQotewotICBnaW50IGksIHA7Ci0KLSAgaWYgKG51bV9jaGFubmVscyA9PSAxICYmIGxheW91dCA9PSAweDAwMDA0KSB7Ci0gICAgcG9zWzBdID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTU9OTzsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHAgPSAwOwotICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxfUE9TSVRJT05TOyArK2kpIHsKLSAgICBpZiAoKGxheW91dCAmIGxheW91dF9tYXBwaW5nW2ldLm1zX21hc2spICE9IDApIHsKLSAgICAgIGlmIChwID49IG51bV9jaGFubmVscykgewotICAgICAgICBHU1RfV0FSTklORyAoIk1vcmUgYml0cyBzZXQgaW4gdGhlIGNoYW5uZWwgbGF5b3V0IG1hcCB0aGFuIHRoZXJlICIKLSAgICAgICAgICAgICJhcmUgY2hhbm5lbHMhIEJyb2tlbiBmaWxlIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGlmIChsYXlvdXRfbWFwcGluZ1tpXS5nc3RfcG9zID09IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0lOVkFMSUQpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJVbnN1cHBvcnRlZCBjaGFubmVsIHBvc2l0aW9uIChtYXNrIDB4JTA4eCkgaW4gY2hhbm5lbCAiCi0gICAgICAgICAgICAibGF5b3V0IG1hcCAtIGlnbm9yaW5nIHRob3NlIGNoYW5uZWxzIiwgbGF5b3V0X21hcHBpbmdbaV0ubXNfbWFzayk7Ci0gICAgICAgIC8qIHdoYXQgdG8gZG8/IGp1c3QgaWdub3JlIGl0IGFuZCBsZXQgZG93bnN0cmVhbSBkZWFsIHdpdGggYSBjaGFubmVsCi0gICAgICAgICAqIGxheW91dCB0aGF0IGhhcyBJTlZBTElEIHBvc2l0aW9ucyBpbiBpdCBmb3Igbm93IC4uLiAqLwotICAgICAgfQotICAgICAgcG9zW3BdID0gbGF5b3V0X21hcHBpbmdbaV0uZ3N0X3BvczsKLSAgICAgICsrcDsKLSAgICB9Ci0gIH0KLQotICBpZiAocCAhPSBudW1fY2hhbm5lbHMpIHsKLSAgICBHU1RfV0FSTklORyAoIk9ubHkgJWQgYml0cyBzZXQgaW4gdGhlIGNoYW5uZWwgbGF5b3V0IG1hcCwgYnV0IHRoZXJlIGFyZSAiCi0gICAgICAgICJzdXBwb3NlZCB0byBiZSAlZCBjaGFubmVscyEgQnJva2VuIGZpbGUiLCBwLCBudW1fY2hhbm5lbHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1Hc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqCi1nc3Rfd2F2cGFja19nZXRfZGVmYXVsdF9jaGFubmVsX3Bvc2l0aW9ucyAoZ2ludCBuY2hhbm5lbHMpCi17Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICpwb3MgPSBnX25ldyAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24sIG5jaGFubmVscyk7Ci0gIGdpbnQgaTsKLQotICBpZiAobmNoYW5uZWxzID09IDEpIHsKLSAgICBwb3NbMF0gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVI7Ci0gICAgcmV0dXJuIHBvczsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBuY2hhbm5lbHM7IGkrKykKLSAgICBwb3NbaV0gPSBsYXlvdXRfbWFwcGluZ1tpXS5nc3RfcG9zOwotCi0gIHJldHVybiBwb3M7Ci19Ci0KLWdpbnQKLWdzdF93YXZwYWNrX2dldF9jaGFubmVsX21hc2tfZnJvbV9wb3NpdGlvbnMgKEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICogcG9zLAotICAgIGdpbnQgbmNoYW5uZWxzKQotewotICBnaW50IGNoYW5uZWxfbWFzayA9IDA7Ci0gIGdpbnQgaSwgajsKLQotICBpZiAobmNoYW5uZWxzID09IDEgJiYgcG9zWzBdID09IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX01PTk8pIHsKLSAgICBjaGFubmVsX21hc2sgPSAweDAwMDAwMDA0OwotICAgIHJldHVybiBjaGFubmVsX21hc2s7Ci0gIH0KLQotICAvKiBGSVhNRTogbm90IGV4YWN0bHkgZWZmaWNpZW50IGJ1dCBvdGhlcndpc2Ugd2UgbmVlZCBhbiBpbnZlcnNlCi0gICAqIG1hcHBpbmcgdGFibGUgdG9vICovCi0gIGZvciAoaSA9IDA7IGkgPCBuY2hhbm5lbHM7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCBNQVhfQ0hBTk5FTF9QT1NJVElPTlM7IGorKykgewotICAgICAgaWYgKHBvc1tpXSA9PSBsYXlvdXRfbWFwcGluZ1tqXS5nc3RfcG9zKSB7Ci0gICAgICAgIGNoYW5uZWxfbWFzayB8PSBsYXlvdXRfbWFwcGluZ1tqXS5tc19tYXNrOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gY2hhbm5lbF9tYXNrOwotfQotCi1nYm9vbGVhbgotZ3N0X3dhdnBhY2tfc2V0X2NoYW5uZWxfbWFwcGluZyAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKiBwb3MsIGdpbnQgbmNoYW5uZWxzLAotICAgIGdpbnQ4ICogY2hhbm5lbF9tYXBwaW5nKQotewotICBnaW50IGksIGo7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5jaGFubmVsczsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IE1BWF9DSEFOTkVMX1BPU0lUSU9OUzsgaisrKSB7Ci0gICAgICBpZiAocG9zW2ldID09IGxheW91dF9tYXBwaW5nW2pdLmdzdF9wb3MpIHsKLSAgICAgICAgY2hhbm5lbF9tYXBwaW5nW2ldID0gajsKLSAgICAgICAgcmV0ICY9IChpID09IGopOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gIXJldDsKLX0KZGlmZiAtLWdpdCBhL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uaCBiL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tjb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRhODFiZi4uMDAwMDAwMAotLS0gYS9leHQvd2F2cGFjay9nc3R3YXZwYWNrY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIgV2F2cGFjayBwbHVnaW4KLSAqIENvcHlyaWdodCAoYykgMjAwNSBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogZ3N0d2F2cGFja2NvbW1vbi5oOiBjb21tb24gaGVscGVyIGZ1bmN0aW9ucwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfV0FWUEFDS19DT01NT05fSF9fCi0jZGVmaW5lIF9fR1NUX1dBVlBBQ0tfQ09NTU9OX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPHdhdnBhY2svd2F2cGFjay5oPgotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDMyIGJ5dGVfbGVuZ3RoOwotICBndWludDggKmRhdGE7Ci0gIGd1aW50OCBpZDsKLX0gR3N0V2F2cGFja01ldGFkYXRhOwotCi0jZGVmaW5lIElEX1VOSVFVRSAgICAgICAgICAgICAgIDB4M2YKLSNkZWZpbmUgSURfT1BUSU9OQUxfREFUQSAgICAgICAgMHgyMAotI2RlZmluZSBJRF9PRERfU0laRSAgICAgICAgICAgICAweDQwCi0jZGVmaW5lIElEX0xBUkdFICAgICAgICAgICAgICAgIDB4ODAKLQotI2RlZmluZSBJRF9EVU1NWSAgICAgICAgICAgICAgICAweDAKLSNkZWZpbmUgSURfRU5DT0RFUl9JTkZPICAgICAgICAgMHgxCi0jZGVmaW5lIElEX0RFQ09SUl9URVJNUyAgICAgICAgIDB4MgotI2RlZmluZSBJRF9ERUNPUlJfV0VJR0hUUyAgICAgICAweDMKLSNkZWZpbmUgSURfREVDT1JSX1NBTVBMRVMgICAgICAgMHg0Ci0jZGVmaW5lIElEX0VOVFJPUFlfVkFSUyAgICAgICAgIDB4NQotI2RlZmluZSBJRF9IWUJSSURfUFJPRklMRSAgICAgICAweDYKLSNkZWZpbmUgSURfU0hBUElOR19XRUlHSFRTICAgICAgMHg3Ci0jZGVmaW5lIElEX0ZMT0FUX0lORk8gICAgICAgICAgIDB4OAotI2RlZmluZSBJRF9JTlQzMl9JTkZPICAgICAgICAgICAweDkKLSNkZWZpbmUgSURfV1ZfQklUU1RSRUFNICAgICAgICAgMHhhCi0jZGVmaW5lIElEX1dWQ19CSVRTVFJFQU0gICAgICAgIDB4YgotI2RlZmluZSBJRF9XVlhfQklUU1RSRUFNICAgICAgICAweGMKLSNkZWZpbmUgSURfQ0hBTk5FTF9JTkZPICAgICAgICAgMHhkCi0KLSNkZWZpbmUgSURfUklGRl9IRUFERVIgICAgICAgICAgKElEX09QVElPTkFMX0RBVEEgfCAweDEpCi0jZGVmaW5lIElEX1JJRkZfVFJBSUxFUiAgICAgICAgIChJRF9PUFRJT05BTF9EQVRBIHwgMHgyKQotI2RlZmluZSBJRF9SRVBMQVlfR0FJTiAgICAgICAgICAoSURfT1BUSU9OQUxfREFUQSB8IDB4MykKLSNkZWZpbmUgSURfQ1VFU0hFRVQgICAgICAgICAgICAgKElEX09QVElPTkFMX0RBVEEgfCAweDQpCi0jZGVmaW5lIElEX0NPTkZJR19CTE9DSyAgICAgICAgIChJRF9PUFRJT05BTF9EQVRBIHwgMHg1KQotI2RlZmluZSBJRF9NRDVfQ0hFQ0tTVU0gICAgICAgICAoSURfT1BUSU9OQUxfREFUQSB8IDB4NikKLSNkZWZpbmUgSURfU0FNUExFX1JBVEUgICAgICAgICAgKElEX09QVElPTkFMX0RBVEEgfCAweDcpCi0KLQotZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfcmVhZF9oZWFkZXIgKFdhdnBhY2tIZWFkZXIgKiBoZWFkZXIsIGd1aW50OCAqIGJ1Zik7Ci1nYm9vbGVhbiBnc3Rfd2F2cGFja19yZWFkX21ldGFkYXRhIChHc3RXYXZwYWNrTWV0YWRhdGEgKiBtZXRhLAotICAgIGd1aW50OCAqIGhlYWRlcl9kYXRhLCBndWludDggKiogcF9kYXRhKTsKLWdpbnQgZ3N0X3dhdnBhY2tfZ2V0X2RlZmF1bHRfY2hhbm5lbF9tYXNrIChnaW50IG5jaGFubmVscyk7Ci1nYm9vbGVhbiBnc3Rfd2F2cGFja19nZXRfY2hhbm5lbF9wb3NpdGlvbnMgKGdpbnQgbmNoYW5uZWxzLCBnaW50IGxheW91dCwgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKnBvcyk7Ci1Hc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqZ3N0X3dhdnBhY2tfZ2V0X2RlZmF1bHRfY2hhbm5lbF9wb3NpdGlvbnMgKGdpbnQgbmNoYW5uZWxzKTsKLWdpbnQgZ3N0X3dhdnBhY2tfZ2V0X2NoYW5uZWxfbWFza19mcm9tX3Bvc2l0aW9ucyAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKnBvcywgZ2ludCBuY2hhbm5lbHMpOwotZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfc2V0X2NoYW5uZWxfbWFwcGluZyAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKnBvcywgZ2ludCBuY2hhbm5lbHMsIGdpbnQ4ICpjaGFubmVsX21hcHBpbmcpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYyBiL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjZTU0My4uMDAwMDAwMAotLS0gYS9leHQvd2F2cGFjay9nc3R3YXZwYWNrZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyogR1N0cmVhbWVyIFdhdnBhY2sgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgQXJ3ZWQgdi4gTWVya2F0eiA8di5tZXJrYXR6QGdteC5uZXQ+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGdzdHdhdnBhY2tkZWMuYzogcmF3IFdhdnBhY2sgYml0c3RyZWFtIGRlY29kZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC13YXZwYWNrZGVjCi0gKgotICogV2F2cGFja0RlYyBkZWNvZGVzIGZyYW1lZCAoZm9yIGV4YW1wbGUgYnkgdGhlIFdhdnBhY2tQYXJzZSBlbGVtZW50KQotICogV2F2cGFjayBzdHJlYW1zIGFuZCBkZWNvZGVzIHRoZW0gdG8gcmF3IGF1ZGlvLgotICogPHVsaW5rIHVybD0iaHR0cDovL3d3dy53YXZwYWNrLmNvbS8iPldhdnBhY2s8L3VsaW5rPiBpcyBhbiBvcGVuLXNvdXJjZQotICogYXVkaW8gY29kZWMgdGhhdCBmZWF0dXJlcyBib3RoIGxvc3NsZXNzIGFuZCBsb3NzeSBlbmNvZGluZy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj10ZXN0Lnd2ICEgd2F2cGFja3BhcnNlICEgd2F2cGFja2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGRlY29kZXMgdGhlIFdhdnBhY2sgZmlsZSB0ZXN0Lnd2IGludG8gcmF3IGF1ZGlvIGJ1ZmZlcnMgYW5kCi0gKiB0cmllcyB0byBwbGF5IGl0IGJhY2sgdXNpbmcgYW4gYXV0b21hdGljYWxseSBmb3VuZCBhdWRpbyBzaW5rLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDx3YXZwYWNrL3dhdnBhY2suaD4KLSNpbmNsdWRlICJnc3R3YXZwYWNrZGVjLmgiCi0jaW5jbHVkZSAiZ3N0d2F2cGFja2NvbW1vbi5oIgotI2luY2x1ZGUgImdzdHdhdnBhY2tzdHJlYW1yZWFkZXIuaCIKLQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3Rfd2F2cGFja19kZWNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3dhdnBhY2tfZGVjX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXdhdnBhY2ssICIKLSAgICAgICAgImRlcHRoID0gKGludCkgWyAxLCAzMiBdLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgOCBdLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA2MDAwLCAxOTIwMDAgXSwgIiAiZnJhbWVkID0gKGJvb2xlYW4pIHRydWUiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgUzgsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgOCBdLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA2MDAwLCAxOTIwMDAgXTsgIgotICAgICAgICAiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgOCBdLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA2MDAwLCAxOTIwMDAgXTsgIgotICAgICAgICAiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMzIpICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgOCBdLCAiICJyYXRlID0gKGludCkgWyA2MDAwLCAxOTIwMDAgXSIpCi0gICAgKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF93YXZwYWNrX2RlY19zdGFydCAoR3N0QXVkaW9EZWNvZGVyICogZGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2cGFja19kZWNfc3RvcCAoR3N0QXVkaW9EZWNvZGVyICogZGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2cGFja19kZWNfc2V0X2Zvcm1hdCAoR3N0QXVkaW9EZWNvZGVyICogZGVjLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF93YXZwYWNrX2RlY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgdm9pZCBnc3Rfd2F2cGFja19kZWNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3dhdnBhY2tfZGVjX3Bvc3RfdGFncyAoR3N0V2F2cGFja0RlYyAqIGRlYyk7Ci0KLSNkZWZpbmUgZ3N0X3dhdnBhY2tfZGVjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFdhdnBhY2tEZWMsIGdzdF93YXZwYWNrX2RlYywgR1NUX1RZUEVfQVVESU9fREVDT0RFUik7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFja19kZWNfY2xhc3NfaW5pdCAoR3N0V2F2cGFja0RlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikgKGtsYXNzKTsKLSAgR3N0QXVkaW9EZWNvZGVyQ2xhc3MgKmJhc2VfY2xhc3MgPSAoR3N0QXVkaW9EZWNvZGVyQ2xhc3MgKikgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiV2F2cGFjayBhdWRpbyBkZWNvZGVyIiwKLSAgICAgICJDb2RlYy9EZWNvZGVyL0F1ZGlvIiwKLSAgICAgICJEZWNvZGVzIFdhdnBhY2sgYXVkaW8gZGF0YSIsCi0gICAgICAiQXJ3ZWQgdi4gTWVya2F0eiA8di5tZXJrYXR6QGdteC5uZXQ+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPiIpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3dhdnBhY2tfZGVjX2ZpbmFsaXplOwotCi0gIGJhc2VfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYWNrX2RlY19zdGFydCk7Ci0gIGJhc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdnBhY2tfZGVjX3N0b3ApOwotICBiYXNlX2NsYXNzLT5zZXRfZm9ybWF0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYWNrX2RlY19zZXRfZm9ybWF0KTsKLSAgYmFzZV9jbGFzcy0+aGFuZGxlX2ZyYW1lID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYWNrX2RlY19oYW5kbGVfZnJhbWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZGVjX3Jlc2V0IChHc3RXYXZwYWNrRGVjICogZGVjKQotewotICBkZWMtPnd2X2lkLmJ1ZmZlciA9IE5VTEw7Ci0gIGRlYy0+d3ZfaWQucG9zaXRpb24gPSBkZWMtPnd2X2lkLmxlbmd0aCA9IDA7Ci0KLSAgZGVjLT5jaGFubmVscyA9IDA7Ci0gIGRlYy0+Y2hhbm5lbF9tYXNrID0gMDsKLSAgZGVjLT5zYW1wbGVfcmF0ZSA9IDA7Ci0gIGRlYy0+ZGVwdGggPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZGVjX2luaXQgKEdzdFdhdnBhY2tEZWMgKiBkZWMpCi17Ci0gIGRlYy0+Y29udGV4dCA9IE5VTEw7Ci0gIGRlYy0+c3RyZWFtX3JlYWRlciA9IGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfbmV3ICgpOwotCi0gIGdzdF9hdWRpb19kZWNvZGVyX3NldF9uZWVkc19mb3JtYXQgKEdTVF9BVURJT19ERUNPREVSIChkZWMpLCBUUlVFKTsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X3VzZV9kZWZhdWx0X3BhZF9hY2NlcHRjYXBzIChHU1RfQVVESU9fREVDT0RFUl9DQVNUCi0gICAgICAoZGVjKSwgVFJVRSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX0FVRElPX0RFQ09ERVJfU0lOS19QQUQgKGRlYykpOwotCi0gIGdzdF93YXZwYWNrX2RlY19yZXNldCAoZGVjKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYWNrX2RlY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0V2F2cGFja0RlYyAqZGVjID0gR1NUX1dBVlBBQ0tfREVDIChvYmplY3QpOwotCi0gIGdfZnJlZSAoZGVjLT5zdHJlYW1fcmVhZGVyKTsKLSAgZGVjLT5zdHJlYW1fcmVhZGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhY2tfZGVjX3N0YXJ0IChHc3RBdWRpb0RlY29kZXIgKiBkZWMpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgInN0YXJ0Iik7Ci0KLSAgLyogbmV2ZXIgbWluZCBhIGZldyBlcnJvcnMgKi8KLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X21heF9lcnJvcnMgKGRlYywgMTYpOwotICAvKiBkb24ndCBib3RoZXIgdXMgd2l0aCBmbHVzaGluZyAqLwotICBnc3RfYXVkaW9fZGVjb2Rlcl9zZXRfZHJhaW5hYmxlIChkZWMsIEZBTFNFKTsKLSAgLyogYWltIGZvciBzb21lIHBlcmZlY3QgdGltZXN0YW1waW5nICovCi0gIGdzdF9hdWRpb19kZWNvZGVyX3NldF90b2xlcmFuY2UgKGRlYywgMTAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhY2tfZGVjX3N0b3AgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYykKLXsKLSAgR3N0V2F2cGFja0RlYyAqd3BkZWMgPSBHU1RfV0FWUEFDS19ERUMgKGRlYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVjLCAic3RvcCIpOwotCi0gIGlmICh3cGRlYy0+Y29udGV4dCkgewotICAgIFdhdnBhY2tDbG9zZUZpbGUgKHdwZGVjLT5jb250ZXh0KTsKLSAgICB3cGRlYy0+Y29udGV4dCA9IE5VTEw7Ci0gIH0KLQotICBnc3Rfd2F2cGFja19kZWNfcmVzZXQgKHdwZGVjKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYWNrX2RlY19uZWdvdGlhdGUgKEdzdFdhdnBhY2tEZWMgKiBkZWMpCi17Ci0gIEdzdEF1ZGlvSW5mbyBpbmZvOwotICBHc3RBdWRpb0Zvcm1hdCBmbXQ7Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc1s2NF0gPSB7IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0lOVkFMSUQsIH07Ci0KLSAgLyogYXJyYW5nZSBmb3IgMSwgMiBvciA0LWJ5dGUgd2lkdGggPT0gZGVwdGggb3V0cHV0ICovCi0gIGRlYy0+d2lkdGggPSBkZWMtPmRlcHRoOwotICBzd2l0Y2ggKGRlYy0+ZGVwdGgpIHsKLSAgICBjYXNlIDg6Ci0gICAgICBmbXQgPSBHU1RfQVVESU9fRk9STUFUX1M4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNjoKLSAgICAgIGZtdCA9IF9HU1RfQVVESU9fRk9STUFUX05FIChTMTYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyNDoKLSAgICBjYXNlIDMyOgotICAgICAgZm10ID0gX0dTVF9BVURJT19GT1JNQVRfTkUgKFMzMik7Ci0gICAgICBkZWMtPndpZHRoID0gMzI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZm10ID0gR1NUX0FVRElPX0ZPUk1BVF9VTktOT1dOOwotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdfYXNzZXJ0IChkZWMtPmNoYW5uZWxfbWFzayAhPSAwKTsKLQotICBpZiAoIWdzdF93YXZwYWNrX2dldF9jaGFubmVsX3Bvc2l0aW9ucyAoZGVjLT5jaGFubmVscywKLSAgICAgICAgICBkZWMtPmNoYW5uZWxfbWFzaywgcG9zKSkKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlYywgIkZhaWxlZCB0byBzZXQgY2hhbm5lbCBsYXlvdXQiKTsKLQotICBnc3RfYXVkaW9faW5mb19pbml0ICgmaW5mbyk7Ci0gIGdzdF9hdWRpb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLCBmbXQsIGRlYy0+c2FtcGxlX3JhdGUsIGRlYy0+Y2hhbm5lbHMsIHBvcyk7Ci0KLSAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX3ZhbGlkX29yZGVyIChpbmZvLnBvc2l0aW9uLCBpbmZvLmNoYW5uZWxzKTsKLSAgZ3N0X2F1ZGlvX2dldF9jaGFubmVsX3Jlb3JkZXJfbWFwIChpbmZvLmNoYW5uZWxzLAotICAgICAgaW5mby5wb3NpdGlvbiwgcG9zLCBkZWMtPmNoYW5uZWxfcmVvcmRlcl9tYXApOwotCi0gIC8qIHNob3VsZCBhbHdheXMgc3VjY2VlZCAqLwotICBnc3RfYXVkaW9fZGVjb2Rlcl9zZXRfb3V0cHV0X2Zvcm1hdCAoR1NUX0FVRElPX0RFQ09ERVIgKGRlYyksICZpbmZvKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFja19kZWNfc2V0X2Zvcm1hdCAoR3N0QXVkaW9EZWNvZGVyICogYmRlYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIC8qIHByZXR0eSBtdWNoIG5vdGhpbmcgdG8gZG8gaGVyZSwKLSAgICogd2UnbGwgcGFyc2UgaXQgYWxsIGZyb20gdGhlIHN0cmVhbSBhbmQgc2V0dXAgdGhlbiAqLwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZGVjX3Bvc3RfdGFncyAoR3N0V2F2cGFja0RlYyAqIGRlYykKLXsKLSAgR3N0VGFnTGlzdCAqbGlzdDsKLSAgR3N0Rm9ybWF0IGZvcm1hdF90aW1lID0gR1NUX0ZPUk1BVF9USU1FLCBmb3JtYXRfYnl0ZXMgPSBHU1RfRk9STUFUX0JZVEVTOwotICBnaW50NjQgZHVyYXRpb24sIHNpemU7Ci0KLSAgLyogdHJ5IHRvIGVzdGltYXRlIHRoZSBhdmVyYWdlIGJpdHJhdGUgKi8KLSAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoR1NUX0FVRElPX0RFQ09ERVJfU0lOS19QQUQgKGRlYyksCi0gICAgICAgICAgZm9ybWF0X2J5dGVzLCAmc2l6ZSkgJiYKLSAgICAgIGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoR1NUX0FVRElPX0RFQ09ERVJfU0lOS19QQUQgKGRlYyksCi0gICAgICAgICAgZm9ybWF0X3RpbWUsICZkdXJhdGlvbikgJiYgc2l6ZSA+IDAgJiYgZHVyYXRpb24gPiAwKSB7Ci0gICAgZ3VpbnQ2NCBiaXRyYXRlOwotCi0gICAgbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgICBiaXRyYXRlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzaXplLCA4ICogR1NUX1NFQ09ORCwgZHVyYXRpb24pOwotICAgIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19CSVRSQVRFLAotICAgICAgICAoZ3VpbnQpIGJpdHJhdGUsIE5VTEwpOwotICAgIGdzdF9hdWRpb19kZWNvZGVyX21lcmdlX3RhZ3MgKEdTVF9BVURJT19ERUNPREVSIChkZWMpLCBsaXN0LAotICAgICAgICBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF93YXZwYWNrX2RlY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRGVjb2RlciAqIGJkZWMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0V2F2cGFja0RlYyAqZGVjOwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIFdhdnBhY2tIZWFkZXIgd3BoOwotICBpbnQzMl90IGRlY29kZWQsIHVucGFja2VkX3NpemU7Ci0gIGdib29sZWFuIGZvcm1hdF9jaGFuZ2VkOwotICBnaW50IHdpZHRoLCBkZXB0aCwgaSwgaiwgbWF4OwotICBnaW50MzIgKmRlY19kYXRhID0gTlVMTDsKLSAgZ3VpbnQ4ICpvdXRfZGF0YTsKLSAgR3N0TWFwSW5mbyBtYXAsIG9tYXA7Ci0KLSAgZGVjID0gR1NUX1dBVlBBQ0tfREVDIChiZGVjKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnVmICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIC8qIGNoZWNrIGlucHV0LCB3ZSBvbmx5IGFjY2VwdCBmcmFtZWQgaW5wdXQgd2l0aCBjb21wbGV0ZSBjaHVua3MgKi8KLSAgaWYgKG1hcC5zaXplIDwgc2l6ZW9mIChXYXZwYWNrSGVhZGVyKSkKLSAgICBnb3RvIGlucHV0X25vdF9mcmFtZWQ7Ci0KLSAgaWYgKCFnc3Rfd2F2cGFja19yZWFkX2hlYWRlciAoJndwaCwgbWFwLmRhdGEpKQotICAgIGdvdG8gaW52YWxpZF9oZWFkZXI7Ci0KLSAgaWYgKG1hcC5zaXplIDwgd3BoLmNrU2l6ZSArIDQgKiAxICsgNCkKLSAgICBnb3RvIGlucHV0X25vdF9mcmFtZWQ7Ci0KLSAgaWYgKCEod3BoLmZsYWdzICYgSU5JVElBTF9CTE9DSykpCi0gICAgZ290byBpbnB1dF9ub3RfZnJhbWVkOwotCi0gIGRlYy0+d3ZfaWQuYnVmZmVyID0gbWFwLmRhdGE7Ci0gIGRlYy0+d3ZfaWQubGVuZ3RoID0gbWFwLnNpemU7Ci0gIGRlYy0+d3ZfaWQucG9zaXRpb24gPSAwOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyB3YXZwYWNrIGNvbnRleHQgaWYgdGhlcmUgaXMgbm9uZSB5ZXQgYnV0IGlmIHRoZXJlCi0gICAqIHdhcyBhbHJlYWR5IG9uZSAoaS5lLiBjYXBzIHdlcmUgc2V0IG9uIHRoZSBzcmNwYWQpIGNoZWNrIHdoZXRoZXIKLSAgICogdGhlIG5ldyBvbmUgaGFzIHRoZSBzYW1lIGNhcHMgKi8KLSAgaWYgKCFkZWMtPmNvbnRleHQpIHsKLSAgICBnY2hhciBlcnJvcl9tc2dbODBdOwotCi0gICAgZGVjLT5jb250ZXh0ID0gV2F2cGFja09wZW5GaWxlSW5wdXRFeCAoZGVjLT5zdHJlYW1fcmVhZGVyLAotICAgICAgICAmZGVjLT53dl9pZCwgTlVMTCwgZXJyb3JfbXNnLCBPUEVOX1NUUkVBTUlORywgMCk7Ci0KLSAgICAvKiBleHBlY3QgdGhpcyB0byB3b3JrICovCi0gICAgaWYgKCFkZWMtPmNvbnRleHQpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjLCAiQ291bGRuJ3QgZGVjb2RlIGJ1ZmZlcjogJXMiLCBlcnJvcl9tc2cpOwotICAgICAgZ290byBjb250ZXh0X2ZhaWxlZDsKLSAgICB9Ci0gIH0KLQotICBnX2Fzc2VydCAoZGVjLT5jb250ZXh0ICE9IE5VTEwpOwotCi0gIGZvcm1hdF9jaGFuZ2VkID0KLSAgICAgIChkZWMtPnNhbXBsZV9yYXRlICE9IFdhdnBhY2tHZXRTYW1wbGVSYXRlIChkZWMtPmNvbnRleHQpKSB8fAotICAgICAgKGRlYy0+Y2hhbm5lbHMgIT0gV2F2cGFja0dldE51bUNoYW5uZWxzIChkZWMtPmNvbnRleHQpKSB8fAotICAgICAgKGRlYy0+ZGVwdGggIT0gV2F2cGFja0dldEJ5dGVzUGVyU2FtcGxlIChkZWMtPmNvbnRleHQpICogOCkgfHwKLSAgICAgIChkZWMtPmNoYW5uZWxfbWFzayAhPSBXYXZwYWNrR2V0Q2hhbm5lbE1hc2sgKGRlYy0+Y29udGV4dCkpOwotCi0gIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChHU1RfQVVESU9fREVDT0RFUl9TUkNfUEFEIChkZWMpKSB8fAotICAgICAgZm9ybWF0X2NoYW5nZWQpIHsKLSAgICBnaW50IGNoYW5uZWxfbWFzazsKLQotICAgIGRlYy0+c2FtcGxlX3JhdGUgPSBXYXZwYWNrR2V0U2FtcGxlUmF0ZSAoZGVjLT5jb250ZXh0KTsKLSAgICBkZWMtPmNoYW5uZWxzID0gV2F2cGFja0dldE51bUNoYW5uZWxzIChkZWMtPmNvbnRleHQpOwotICAgIGRlYy0+ZGVwdGggPSBXYXZwYWNrR2V0Qnl0ZXNQZXJTYW1wbGUgKGRlYy0+Y29udGV4dCkgKiA4OwotCi0gICAgY2hhbm5lbF9tYXNrID0gV2F2cGFja0dldENoYW5uZWxNYXNrIChkZWMtPmNvbnRleHQpOwotICAgIGlmIChjaGFubmVsX21hc2sgPT0gMCkKLSAgICAgIGNoYW5uZWxfbWFzayA9IGdzdF93YXZwYWNrX2dldF9kZWZhdWx0X2NoYW5uZWxfbWFzayAoZGVjLT5jaGFubmVscyk7Ci0KLSAgICBkZWMtPmNoYW5uZWxfbWFzayA9IGNoYW5uZWxfbWFzazsKLQotICAgIGdzdF93YXZwYWNrX2RlY19uZWdvdGlhdGUgKGRlYyk7Ci0KLSAgICAvKiBzZW5kIEdTVF9UQUdfQVVESU9fQ09ERUMgYW5kIEdTVF9UQUdfQklUUkFURSB0YWdzIGJlZm9yZSBzb21ldGhpbmcKLSAgICAgKiBpcyBkZWNvZGVkIG9yIGFmdGVyIHRoZSBmb3JtYXQgaGFzIGNoYW5nZWQgKi8KLSAgICBnc3Rfd2F2cGFja19kZWNfcG9zdF90YWdzIChkZWMpOwotICB9Ci0KLSAgLyogYWxsb2Mgb3V0cHV0IGJ1ZmZlciAqLwotICBkZWNfZGF0YSA9IGdfbWFsbG9jICg0ICogd3BoLmJsb2NrX3NhbXBsZXMgKiBkZWMtPmNoYW5uZWxzKTsKLQotICAvKiBkZWNvZGUgKi8KLSAgZGVjb2RlZCA9IFdhdnBhY2tVbnBhY2tTYW1wbGVzIChkZWMtPmNvbnRleHQsIGRlY19kYXRhLCB3cGguYmxvY2tfc2FtcGxlcyk7Ci0gIGlmIChkZWNvZGVkICE9IHdwaC5ibG9ja19zYW1wbGVzKQotICAgIGdvdG8gZGVjb2RlX2Vycm9yOwotCi0gIHVucGFja2VkX3NpemUgPSAoZGVjLT53aWR0aCAvIDgpICogd3BoLmJsb2NrX3NhbXBsZXMgKiBkZWMtPmNoYW5uZWxzOwotICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHVucGFja2VkX3NpemUpOwotCi0gIC8qIGxlZ2FjeTsgcGFzcyBhbG9uZyBvZmZzZXQsIHdoYXRldmVyIHRoYXQgbWlnaHQgZW50YWlsICovCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1Zik7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm9tYXAsIEdTVF9NQVBfV1JJVEUpOwotICBvdXRfZGF0YSA9IG9tYXAuZGF0YTsKLQotICB3aWR0aCA9IGRlYy0+d2lkdGg7Ci0gIGRlcHRoID0gZGVjLT5kZXB0aDsKLSAgbWF4ID0gZGVjLT5jaGFubmVscyAqIHdwaC5ibG9ja19zYW1wbGVzOwotICBpZiAod2lkdGggPT0gOCkgewotICAgIGdpbnQ4ICpvdXRidWZmZXIgPSAoZ2ludDggKikgb3V0X2RhdGE7Ci0gICAgZ2ludCAqcmVvcmRlcl9tYXAgPSBkZWMtPmNoYW5uZWxfcmVvcmRlcl9tYXA7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpICs9IGRlYy0+Y2hhbm5lbHMpIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCBkZWMtPmNoYW5uZWxzOyBqKyspCi0gICAgICAgICpvdXRidWZmZXIrKyA9IChnaW50OCkgKGRlY19kYXRhW2kgKyByZW9yZGVyX21hcFtqXV0pOwotICAgIH0KLSAgfSBlbHNlIGlmICh3aWR0aCA9PSAxNikgewotICAgIGdpbnQxNiAqb3V0YnVmZmVyID0gKGdpbnQxNiAqKSBvdXRfZGF0YTsKLSAgICBnaW50ICpyZW9yZGVyX21hcCA9IGRlYy0+Y2hhbm5lbF9yZW9yZGVyX21hcDsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBtYXg7IGkgKz0gZGVjLT5jaGFubmVscykgewotICAgICAgZm9yIChqID0gMDsgaiA8IGRlYy0+Y2hhbm5lbHM7IGorKykKLSAgICAgICAgKm91dGJ1ZmZlcisrID0gKGdpbnQxNikgKGRlY19kYXRhW2kgKyByZW9yZGVyX21hcFtqXV0pOwotICAgIH0KLSAgfSBlbHNlIGlmIChkZWMtPndpZHRoID09IDMyKSB7Ci0gICAgZ2ludDMyICpvdXRidWZmZXIgPSAoZ2ludDMyICopIG91dF9kYXRhOwotICAgIGdpbnQgKnJlb3JkZXJfbWFwID0gZGVjLT5jaGFubmVsX3Jlb3JkZXJfbWFwOwotCi0gICAgaWYgKHdpZHRoICE9IGRlcHRoKSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpICs9IGRlYy0+Y2hhbm5lbHMpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IGRlYy0+Y2hhbm5lbHM7IGorKykKLSAgICAgICAgICAqb3V0YnVmZmVyKysgPQotICAgICAgICAgICAgICAoZ2ludDMyKSAoZGVjX2RhdGFbaSArIHJlb3JkZXJfbWFwW2pdXSA8PCAod2lkdGggLSBkZXB0aCkpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpICs9IGRlYy0+Y2hhbm5lbHMpIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IGRlYy0+Y2hhbm5lbHM7IGorKykKLSAgICAgICAgICAqb3V0YnVmZmVyKysgPSAoZ2ludDMyKSAoZGVjX2RhdGFbaSArIHJlb3JkZXJfbWFwW2pdXSk7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmb21hcCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGJ1ZiA9IE5VTEw7Ci0KLSAgZ19mcmVlIChkZWNfZGF0YSk7Ci0KLSAgcmV0ID0gZ3N0X2F1ZGlvX2RlY29kZXJfZmluaXNoX2ZyYW1lIChiZGVjLCBvdXRidWYsIDEpOwotCi1vdXQ6Ci0gIGlmIChidWYpCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImZsb3c6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotLyogRVJST1JTICovCi1pbnB1dF9ub3RfZnJhbWVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlYywgU1RSRUFNLCBERUNPREUsIChOVUxMKSwgKCJFeHBlY3RlZCBmcmFtZWQgaW5wdXQiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLWludmFsaWRfaGVhZGVyOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlYywgU1RSRUFNLCBERUNPREUsIChOVUxMKSwgKCJJbnZhbGlkIHdhdnBhY2sgaGVhZGVyIikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gb3V0OwotICB9Ci1jb250ZXh0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9BVURJT19ERUNPREVSX0VSUk9SIChiZGVjLCAxLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiZXJyb3IgY3JlYXRpbmcgV2F2cGFjayBjb250ZXh0IiksIHJldCk7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLWRlY29kZV9lcnJvcjoKLSAgewotICAgIGNvbnN0IGdjaGFyICpyZWFzb24gPSAidW5rbm93biI7Ci0KLSAgICBpZiAoZGVjLT5jb250ZXh0KSB7Ci0gICAgICByZWFzb24gPSBXYXZwYWNrR2V0RXJyb3JNZXNzYWdlIChkZWMtPmNvbnRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZWFzb24gPSAiY291bGRuJ3QgY3JlYXRlIGRlY29kZXIgY29udGV4dCI7Ci0gICAgfQotICAgIEdTVF9BVURJT19ERUNPREVSX0VSUk9SIChiZGVjLCAxLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoImRlY29kaW5nIGVycm9yOiAlcyIsIHJlYXNvbiksIHJldCk7Ci0gICAgZ19mcmVlIChkZWNfZGF0YSk7Ci0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICAgIGdzdF9hdWRpb19kZWNvZGVyX2ZpbmlzaF9mcmFtZSAoYmRlYywgTlVMTCwgMSk7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF93YXZwYWNrX2RlY19wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ3YXZwYWNrZGVjIiwKLSAgICAgICAgICBHU1RfUkFOS19QUklNQVJZLCBHU1RfVFlQRV9XQVZQQUNLX0RFQykpCi0gICAgcmV0dXJuIEZBTFNFOwotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3dhdnBhY2tfZGVjX2RlYnVnLCAid2F2cGFja2RlYyIsIDAsCi0gICAgICAiV2F2cGFjayBkZWNvZGVyIik7Ci0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oIGIvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2RlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTAwMmI0Li4wMDAwMDAwCi0tLSBhL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBXYXZwYWNrIHBsdWdpbgotICogQ29weXJpZ2h0IChjKSAyMDA0IEFyd2VkIHYuIE1lcmthdHogPHYubWVya2F0ekBnbXgubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBnc3R3YXZwYWNrZGVjLmg6IHJhdyBXYXZwYWNrIGJpdHN0cmVhbSBkZWNvZGVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9XQVZQQUNLX0RFQ19IX18KLSNkZWZpbmUgX19HU1RfV0FWUEFDS19ERUNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5oPgotCi0jaW5jbHVkZSA8d2F2cGFjay93YXZwYWNrLmg+Ci0KLSNpbmNsdWRlICJnc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmgiCi0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfV0FWUEFDS19ERUMgXAotICAoZ3N0X3dhdnBhY2tfZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9XQVZQQUNLX0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1dBVlBBQ0tfREVDLEdzdFdhdnBhY2tEZWMpKQotI2RlZmluZSBHU1RfV0FWUEFDS19ERUNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfV0FWUEFDS19ERUMsR3N0V2F2cGFja0RlY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1dBVlBBQ0tfREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfV0FWUEFDS19ERUMpKQotI2RlZmluZSBHU1RfSVNfV0FWUEFDS19ERUNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfV0FWUEFDS19ERUMpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdhdnBhY2tEZWMgR3N0V2F2cGFja0RlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RXYXZwYWNrRGVjQ2xhc3MgR3N0V2F2cGFja0RlY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdFdhdnBhY2tEZWMKLXsKLSAgR3N0QXVkaW9EZWNvZGVyIGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiAqLwotCi0gIFdhdnBhY2tDb250ZXh0ICpjb250ZXh0OwotICBXYXZwYWNrU3RyZWFtUmVhZGVyICpzdHJlYW1fcmVhZGVyOwotCi0gIHJlYWRfaWQgd3ZfaWQ7Ci0KLSAgZ2ludCBzYW1wbGVfcmF0ZTsKLSAgZ2ludCBkZXB0aDsKLSAgZ2ludCB3aWR0aDsKLSAgZ2ludCBjaGFubmVsczsKLSAgZ2ludCBjaGFubmVsX21hc2s7Ci0KLSAgZ2ludCBjaGFubmVsX3Jlb3JkZXJfbWFwWzY0XTsKLQotfTsKLQotc3RydWN0IF9Hc3RXYXZwYWNrRGVjQ2xhc3MKLXsKLSAgR3N0QXVkaW9EZWNvZGVyQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X3dhdnBhY2tfZGVjX2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfZGVjX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1dBVlBBQ0tfREVDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jIGIvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDYyMDVjLi4wMDAwMDAwCi0tLSBhL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tlbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMDUgKzAsMCBAQAotLyogR1N0cmVhbWVyIFdhdnBhY2sgZW5jb2RlciBwbHVnaW4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogZ3N0d2F2cGFja2RlYy5jOiBXYXZwYWNrIGF1ZGlvIGVuY29kZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC13YXZwYWNrZW5jCi0gKgotICogV2F2cGFja0VuYyBlbmNvZGVzIHJhdyBhdWRpbyBpbnRvIGEgZnJhbWVkIFdhdnBhY2sgc3RyZWFtLgotICogPHVsaW5rIHVybD0iaHR0cDovL3d3dy53YXZwYWNrLmNvbS8iPldhdnBhY2s8L3VsaW5rPiBpcyBhbiBvcGVuLXNvdXJjZQotICogYXVkaW8gY29kZWMgdGhhdCBmZWF0dXJlcyBib3RoIGxvc3NsZXNzIGFuZCBsb3NzeSBlbmNvZGluZy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTUwMCAhIGF1ZGlvY29udmVydCAhIHdhdnBhY2tlbmMgISBmaWxlc2luayBsb2NhdGlvbj1zaW5ld2F2ZS53dgotICogXXwgVGhpcyBwaXBlbGluZSBlbmNvZGVzIGF1ZGlvIGZyb20gYXVkaW90ZXN0c3JjIGludG8gYSBXYXZwYWNrIGZpbGUuIFRoZSBhdWRpb2NvbnZlcnQgZWxlbWVudCBpcyBuZWVkZWQKLSAqIGFzIHRoZSBXYXZwYWNrIGVuY29kZXIgb25seSBhY2NlcHRzIGlucHV0IHdpdGggMzIgYml0IHdpZHRoLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGNkZGE6Ly8xICEgYXVkaW9jb252ZXJ0ICEgd2F2cGFja2VuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPXRyYWNrMS53dgotICogXXwgVGhpcyBwaXBlbGluZSBlbmNvZGVzIGF1ZGlvIGZyb20gYW4gYXVkaW8gQ0QgaW50byBhIFdhdnBhY2sgZmlsZSB1c2luZwotICogbG9zc2xlc3MgZW5jb2RpbmcgKHRoZSBmaWxlIG91dHB1dCB3aWxsIGJlIGZhaXJseSBsYXJnZSkuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgY2RkYTovLzEgISBhdWRpb2NvbnZlcnQgISB3YXZwYWNrZW5jIGJpdHJhdGU9MTI4MDAwICEgZmlsZXNpbmsgbG9jYXRpb249dHJhY2sxLnd2Ci0gKiBdfCBUaGlzIHBpcGVsaW5lIGVuY29kZXMgYXVkaW8gZnJvbSBhbiBhdWRpbyBDRCBpbnRvIGEgV2F2cGFjayBmaWxlIHVzaW5nCi0gKiBsb3NzeSBlbmNvZGluZyBhdCBhIGNlcnRhaW4gYml0cmF0ZSAodGhlIGZpbGUgd2lsbCBiZSBmYWlybHkgc21hbGwpLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKgotICogVE9ETzogLSBhZGQgMzIgYml0IGZsb2F0IG1vZGUuIENPTkZJR19GTE9BVF9EQVRBCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4KLQotI2luY2x1ZGUgPHdhdnBhY2svd2F2cGFjay5oPgotI2luY2x1ZGUgImdzdHdhdnBhY2tlbmMuaCIKLSNpbmNsdWRlICJnc3R3YXZwYWNrY29tbW9uLmgiCi0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2cGFja19lbmNfc3RhcnQgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfZW5jX3N0b3AgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfZW5jX3NldF9mb3JtYXQgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywKLSAgICBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF93YXZwYWNrX2VuY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywKLSAgICBHc3RCdWZmZXIgKiBpbl9idWYpOwotc3RhdGljIGdib29sZWFuIGdzdF93YXZwYWNrX2VuY19zaW5rX2V2ZW50IChHc3RBdWRpb0VuY29kZXIgKiBlbmMsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBpbnQgZ3N0X3dhdnBhY2tfZW5jX3B1c2hfYmxvY2sgKHZvaWQgKmlkLCB2b2lkICpkYXRhLCBpbnQzMl90IGNvdW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF93YXZwYWNrX2VuY19kcmFpbiAoR3N0V2F2cGFja0VuYyAqIGVuYyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF93YXZwYWNrX2VuY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfd2F2cGFja19lbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1lbnVtCi17Ci0gIEFSR18wLAotICBBUkdfTU9ERSwKLSAgQVJHX0JJVFJBVEUsCi0gIEFSR19CSVRTUEVSU0FNUExFLAotICBBUkdfQ09SUkVDVElPTl9NT0RFLAotICBBUkdfTUQ1LAotICBBUkdfRVhUUkFfUFJPQ0VTU0lORywKLSAgQVJHX0pPSU5UX1NURVJFT19NT0RFCi19OwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3Rfd2F2cGFja19lbmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3dhdnBhY2tfZW5jX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMzMikgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCA4IF0sICIgInJhdGUgPSAoaW50KSBbIDYwMDAsIDE5MjAwMCBdIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC13YXZwYWNrLCAiCi0gICAgICAgICJkZXB0aCA9IChpbnQpIFsgMSwgMzIgXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDggXSwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgNjAwMCwgMTkyMDAwIF0sICIgImZyYW1lZCA9IChib29sZWFuKSBUUlVFIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgd3Zjc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInd2Y3NyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC13YXZwYWNrLWNvcnJlY3Rpb24sICIgImZyYW1lZCA9IChib29sZWFuKSBUUlVFIikKLSAgICApOwotCi1lbnVtCi17Ci0gIEdTVF9XQVZQQUNLX0VOQ19NT0RFX1ZFUllfRkFTVCA9IDAsCi0gIEdTVF9XQVZQQUNLX0VOQ19NT0RFX0ZBU1QsCi0gIEdTVF9XQVZQQUNLX0VOQ19NT0RFX0RFRkFVTFQsCi0gIEdTVF9XQVZQQUNLX0VOQ19NT0RFX0hJR0gsCi0gIEdTVF9XQVZQQUNLX0VOQ19NT0RFX1ZFUllfSElHSAotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9XQVZQQUNLX0VOQ19NT0RFIChnc3Rfd2F2cGFja19lbmNfbW9kZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3dhdnBhY2tfZW5jX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBxdHlwZSA9IDA7Ci0KLSAgaWYgKHF0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSNpZiAwCi0gICAgICAvKiBWZXJ5IEZhc3QgQ29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCB5ZXQsIGJ1dCB3aWxsIGJlIHN1cHBvcnRlZAotICAgICAgICogaW4gZnV0dXJlIHdhdnBhY2sgdmVyc2lvbnMgKi8KLSAgICAgIHtHU1RfV0FWUEFDS19FTkNfTU9ERV9WRVJZX0ZBU1QsICJWZXJ5IEZhc3QgQ29tcHJlc3Npb24iLCAidmVyeWZhc3QifSwKLSNlbmRpZgotICAgICAge0dTVF9XQVZQQUNLX0VOQ19NT0RFX0ZBU1QsICJGYXN0IENvbXByZXNzaW9uIiwgImZhc3QifSwKLSAgICAgIHtHU1RfV0FWUEFDS19FTkNfTU9ERV9ERUZBVUxULCAiTm9ybWFsIENvbXByZXNzaW9uIiwgIm5vcm1hbCJ9LAotICAgICAge0dTVF9XQVZQQUNLX0VOQ19NT0RFX0hJR0gsICJIaWdoIENvbXByZXNzaW9uIiwgImhpZ2gifSwKLSAgICAgIHtHU1RfV0FWUEFDS19FTkNfTU9ERV9WRVJZX0hJR0gsICJWZXJ5IEhpZ2ggQ29tcHJlc3Npb24iLCAidmVyeWhpZ2gifSwKLSAgICAgIHswLCBOVUxMLCBOVUxMfQotICAgIH07Ci0KLSAgICBxdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RXYXZwYWNrRW5jTW9kZSIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIHF0eXBlOwotfQotCi1lbnVtCi17Ci0gIEdTVF9XQVZQQUNLX0NPUlJFQ1RJT05fTU9ERV9PRkYgPSAwLAotICBHU1RfV0FWUEFDS19DT1JSRUNUSU9OX01PREVfT04sCi0gIEdTVF9XQVZQQUNLX0NPUlJFQ1RJT05fTU9ERV9PUFRJTUlaRUQKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfV0FWUEFDS19FTkNfQ09SUkVDVElPTl9NT0RFIChnc3Rfd2F2cGFja19lbmNfY29ycmVjdGlvbl9tb2RlX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3Rfd2F2cGFja19lbmNfY29ycmVjdGlvbl9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgcXR5cGUgPSAwOwotCi0gIGlmIChxdHlwZSA9PSAwKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAgICB7R1NUX1dBVlBBQ0tfQ09SUkVDVElPTl9NT0RFX09GRiwgIkNyZWF0ZSBubyBjb3JyZWN0aW9uIGZpbGUiLCAib2ZmIn0sCi0gICAgICB7R1NUX1dBVlBBQ0tfQ09SUkVDVElPTl9NT0RFX09OLCAiQ3JlYXRlIGNvcnJlY3Rpb24gZmlsZSIsICJvbiJ9LAotICAgICAge0dTVF9XQVZQQUNLX0NPUlJFQ1RJT05fTU9ERV9PUFRJTUlaRUQsCi0gICAgICAgICAgIkNyZWF0ZSBvcHRpbWl6ZWQgY29ycmVjdGlvbiBmaWxlIiwgIm9wdGltaXplZCJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9Ci0gICAgfTsKLQotICAgIHF0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFdhdnBhY2tFbmNDb3JyZWN0aW9uTW9kZSIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIHF0eXBlOwotfQotCi1lbnVtCi17Ci0gIEdTVF9XQVZQQUNLX0pTX01PREVfQVVUTyA9IDAsCi0gIEdTVF9XQVZQQUNLX0pTX01PREVfTEVGVF9SSUdIVCwKLSAgR1NUX1dBVlBBQ0tfSlNfTU9ERV9NSURfU0lERQotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9XQVZQQUNLX0VOQ19KT0lOVF9TVEVSRU9fTU9ERSAoZ3N0X3dhdnBhY2tfZW5jX2pvaW50X3N0ZXJlb19tb2RlX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3Rfd2F2cGFja19lbmNfam9pbnRfc3RlcmVvX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBxdHlwZSA9IDA7Ci0KLSAgaWYgKHF0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHtHU1RfV0FWUEFDS19KU19NT0RFX0FVVE8sICJhdXRvIiwgImF1dG8ifSwKLSAgICAgIHtHU1RfV0FWUEFDS19KU19NT0RFX0xFRlRfUklHSFQsICJsZWZ0L3JpZ2h0IiwgImxlZnRyaWdodCJ9LAotICAgICAge0dTVF9XQVZQQUNLX0pTX01PREVfTUlEX1NJREUsICJtaWQvc2lkZSIsICJtaWRzaWRlIn0sCi0gICAgICB7MCwgTlVMTCwgTlVMTH0KLSAgICB9OwotCi0gICAgcXR5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0V2F2cGFja0VuY0pTTW9kZSIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIHF0eXBlOwotfQotCi0jZGVmaW5lIGdzdF93YXZwYWNrX2VuY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RXYXZwYWNrRW5jLCBnc3Rfd2F2cGFja19lbmMsIEdTVF9UWVBFX0FVRElPX0VOQ09ERVIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZW5jX2NsYXNzX2luaXQgKEdzdFdhdnBhY2tFbmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIChrbGFzcyk7Ci0gIEdzdEF1ZGlvRW5jb2RlckNsYXNzICpiYXNlX2NsYXNzID0gKEdzdEF1ZGlvRW5jb2RlckNsYXNzICopIChrbGFzcyk7Ci0KLSAgLyogYWRkIHBhZCB0ZW1wbGF0ZXMgKi8KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZ3dmNzcmNfZmFjdG9yeSk7Ci0KLSAgLyogc2V0IGVsZW1lbnQgZGV0YWlscyAqLwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiV2F2cGFjayBhdWRpbyBlbmNvZGVyIiwKLSAgICAgICJDb2RlYy9FbmNvZGVyL0F1ZGlvIiwKLSAgICAgICJFbmNvZGVzIGF1ZGlvIHdpdGggdGhlIFdhdnBhY2sgbG9zc2xlc3MvbG9zc3kgYXVkaW8gY29kZWMiLAotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4iKTsKLQotICAvKiBzZXQgcHJvcGVydHkgaGFuZGxlcnMgKi8KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3dhdnBhY2tfZW5jX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3dhdnBhY2tfZW5jX2dldF9wcm9wZXJ0eTsKLQotICBiYXNlX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFja19lbmNfc3RhcnQpOwotICBiYXNlX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYWNrX2VuY19zdG9wKTsKLSAgYmFzZV9jbGFzcy0+c2V0X2Zvcm1hdCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFja19lbmNfc2V0X2Zvcm1hdCk7Ci0gIGJhc2VfY2xhc3MtPmhhbmRsZV9mcmFtZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFja19lbmNfaGFuZGxlX2ZyYW1lKTsKLSAgYmFzZV9jbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFja19lbmNfc2lua19ldmVudCk7Ci0KLSAgLyogaW5zdGFsbCBhbGwgcHJvcGVydGllcyAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJFbmNvZGluZyBtb2RlIiwKLSAgICAgICAgICAiU3BlZWQgdmVyc3VzIGNvbXByZXNzaW9uIHRyYWRlb2ZmLiIsCi0gICAgICAgICAgR1NUX1RZUEVfV0FWUEFDS19FTkNfTU9ERSwgR1NUX1dBVlBBQ0tfRU5DX01PREVfREVGQVVMVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0JJVFJBVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImJpdHJhdGUiLCAiQml0cmF0ZSIsCi0gICAgICAgICAgIlRyeSB0byBlbmNvZGUgd2l0aCB0aGlzIGF2ZXJhZ2UgYml0cmF0ZSAoYml0cy9zZWMpLiAiCi0gICAgICAgICAgIlRoaXMgZW5hYmxlcyBsb3NzeSBlbmNvZGluZywgdmFsdWVzIHNtYWxsZXIgdGhhbiAyNDAwMCBkaXNhYmxlIGl0IGFnYWluLiIsCi0gICAgICAgICAgMCwgOTYwMDAwMCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19CSVRTUEVSU0FNUExFLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJpdHMtcGVyLXNhbXBsZSIsICJCaXRzIHBlciBzYW1wbGUiLAotICAgICAgICAgICJUcnkgdG8gZW5jb2RlIHdpdGggdGhpcyBhbW91bnQgb2YgYml0cyBwZXIgc2FtcGxlLiAiCi0gICAgICAgICAgIlRoaXMgZW5hYmxlcyBsb3NzeSBlbmNvZGluZywgdmFsdWVzIHNtYWxsZXIgdGhhbiAyLjAgZGlzYWJsZSBpdCBhZ2Fpbi4iLAotICAgICAgICAgIDAuMCwgMjQuMCwgMC4wLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0NPUlJFQ1RJT05fTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiY29ycmVjdGlvbi1tb2RlIiwgIkNvcnJlY3Rpb24gc3RyZWFtIG1vZGUiLAotICAgICAgICAgICJVc2UgdGhpcyBtb2RlIGZvciB0aGUgY29ycmVjdGlvbiBzdHJlYW0uIE9ubHkgd29ya3MgaW4gbG9zc3kgbW9kZSEiLAotICAgICAgICAgIEdTVF9UWVBFX1dBVlBBQ0tfRU5DX0NPUlJFQ1RJT05fTU9ERSwgR1NUX1dBVlBBQ0tfQ09SUkVDVElPTl9NT0RFX09GRiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX01ENSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibWQ1IiwgIk1ENSIsCi0gICAgICAgICAgIlN0b3JlIE1ENSBoYXNoIG9mIHJhdyBzYW1wbGVzIHdpdGhpbiB0aGUgZmlsZS4iLCBGQUxTRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0VYVFJBX1BST0NFU1NJTkcsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImV4dHJhLXByb2Nlc3NpbmciLCAiRXh0cmEgcHJvY2Vzc2luZyIsCi0gICAgICAgICAgIlVzZSBiZXR0ZXIgYnV0IHNsb3dlciBmaWx0ZXJzIGZvciBiZXR0ZXIgY29tcHJlc3Npb24vcXVhbGl0eS4iLAotICAgICAgICAgIDAsIDYsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfSk9JTlRfU1RFUkVPX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImpvaW50LXN0ZXJlby1tb2RlIiwgIkpvaW50LVN0ZXJlbyBtb2RlIiwKLSAgICAgICAgICAiVXNlIHRoaXMgam9pbnQtc3RlcmVvIG1vZGUuIiwgR1NUX1RZUEVfV0FWUEFDS19FTkNfSk9JTlRfU1RFUkVPX01PREUsCi0gICAgICAgICAgR1NUX1dBVlBBQ0tfSlNfTU9ERV9BVVRPLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZW5jX3Jlc2V0IChHc3RXYXZwYWNrRW5jICogZW5jKQotewotICAvKiBjbG9zZSBhbmQgZnJlZSBldmVyeXRoaW5nIHN0cmVhbSByZWxhdGVkIGlmIHdlIGFscmVhZHkgZGlkIHNvbWV0aGluZyAqLwotICBpZiAoZW5jLT53cF9jb250ZXh0KSB7Ci0gICAgV2F2cGFja0Nsb3NlRmlsZSAoZW5jLT53cF9jb250ZXh0KTsKLSAgICBlbmMtPndwX2NvbnRleHQgPSBOVUxMOwotICB9Ci0gIGlmIChlbmMtPndwX2NvbmZpZykgewotICAgIGdfZnJlZSAoZW5jLT53cF9jb25maWcpOwotICAgIGVuYy0+d3BfY29uZmlnID0gTlVMTDsKLSAgfQotICBpZiAoZW5jLT5maXJzdF9ibG9jaykgewotICAgIGdfZnJlZSAoZW5jLT5maXJzdF9ibG9jayk7Ci0gICAgZW5jLT5maXJzdF9ibG9jayA9IE5VTEw7Ci0gIH0KLSAgZW5jLT5maXJzdF9ibG9ja19zaXplID0gMDsKLSAgaWYgKGVuYy0+bWQ1X2NvbnRleHQpIHsKLSAgICBnX2NoZWNrc3VtX2ZyZWUgKGVuYy0+bWQ1X2NvbnRleHQpOwotICAgIGVuYy0+bWQ1X2NvbnRleHQgPSBOVUxMOwotICB9Ci0gIGlmIChlbmMtPnBlbmRpbmdfc2VnbWVudCkKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGVuYy0+cGVuZGluZ19zZWdtZW50KTsKLSAgZW5jLT5wZW5kaW5nX3NlZ21lbnQgPSBOVUxMOwotCi0gIGlmIChlbmMtPnBlbmRpbmdfYnVmZmVyKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoZW5jLT5wZW5kaW5nX2J1ZmZlcik7Ci0gICAgZW5jLT5wZW5kaW5nX2J1ZmZlciA9IE5VTEw7Ci0gICAgZW5jLT5wZW5kaW5nX29mZnNldCA9IDA7Ci0gIH0KLQotICAvKiByZXNldCB0aGUgbGFzdCByZXR1cm5zIHRvIEdTVF9GTE9XX09LLiBUaGlzIGlzIG9ubHkgc2V0IHRvIHNvbWV0aGluZyBlbHNlCi0gICAqIHdoaWxlIFdhdnBhY2tQYWNrU2FtcGxlcygpIG9yIG1vcmUgc3BlY2lmaWMgZ3N0X3dhdnBhY2tfZW5jX3B1c2hfYmxvY2soKQotICAgKiBzbyBub3QgdmFsaWQgYW55bW9yZSAqLwotICBlbmMtPnNyY3BhZF9sYXN0X3JldHVybiA9IGVuYy0+d3Zjc3JjcGFkX2xhc3RfcmV0dXJuID0gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogcmVzZXQgc3RyZWFtIGluZm9ybWF0aW9uICovCi0gIGVuYy0+c2FtcGxlcmF0ZSA9IDA7Ci0gIGVuYy0+ZGVwdGggPSAwOwotICBlbmMtPmNoYW5uZWxzID0gMDsKLSAgZW5jLT5jaGFubmVsX21hc2sgPSAwOwotICBlbmMtPm5lZWRfY2hhbm5lbF9yZW1hcCA9IEZBTFNFOwotCi0gIGVuYy0+dGltZXN0YW1wX29mZnNldCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGVuYy0+bmV4dF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFja19lbmNfaW5pdCAoR3N0V2F2cGFja0VuYyAqIGVuYykKLXsKLSAgR3N0QXVkaW9FbmNvZGVyICpiZW5jID0gR1NUX0FVRElPX0VOQ09ERVIgKGVuYyk7Ci0KLSAgLyogaW5pdGlhbGl6ZSBvYmplY3QgYXR0cmlidXRlcyAqLwotICBlbmMtPndwX2NvbmZpZyA9IE5VTEw7Ci0gIGVuYy0+d3BfY29udGV4dCA9IE5VTEw7Ci0gIGVuYy0+Zmlyc3RfYmxvY2sgPSBOVUxMOwotICBlbmMtPm1kNV9jb250ZXh0ID0gTlVMTDsKLSAgZ3N0X3dhdnBhY2tfZW5jX3Jlc2V0IChlbmMpOwotCi0gIGVuYy0+d3ZfaWQuY29ycmVjdGlvbiA9IEZBTFNFOwotICBlbmMtPnd2X2lkLndhdnBhY2tfZW5jID0gZW5jOwotICBlbmMtPnd2X2lkLnBhc3N0aHJvdWdoID0gRkFMU0U7Ci0gIGVuYy0+d3ZjX2lkLmNvcnJlY3Rpb24gPSBUUlVFOwotICBlbmMtPnd2Y19pZC53YXZwYWNrX2VuYyA9IGVuYzsKLSAgZW5jLT53dmNfaWQucGFzc3Rocm91Z2ggPSBGQUxTRTsKLQotICAvKiBzZXQgZGVmYXVsdCB2YWx1ZXMgb2YgcGFyYW1zICovCi0gIGVuYy0+bW9kZSA9IEdTVF9XQVZQQUNLX0VOQ19NT0RFX0RFRkFVTFQ7Ci0gIGVuYy0+Yml0cmF0ZSA9IDA7Ci0gIGVuYy0+YnBzID0gMC4wOwotICBlbmMtPmNvcnJlY3Rpb25fbW9kZSA9IEdTVF9XQVZQQUNLX0NPUlJFQ1RJT05fTU9ERV9PRkY7Ci0gIGVuYy0+bWQ1ID0gRkFMU0U7Ci0gIGVuYy0+ZXh0cmFfcHJvY2Vzc2luZyA9IDA7Ci0gIGVuYy0+am9pbnRfc3RlcmVvX21vZGUgPSBHU1RfV0FWUEFDS19KU19NT0RFX0FVVE87Ci0KLSAgLyogcmVxdWlyZSBwZXJmZWN0IHRzICovCi0gIGdzdF9hdWRpb19lbmNvZGVyX3NldF9wZXJmZWN0X3RpbWVzdGFtcCAoYmVuYywgVFJVRSk7Ci0KLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfQVVESU9fRU5DT0RFUl9TSU5LX1BBRCAoZW5jKSk7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFja19lbmNfc3RhcnQgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAic3RhcnQiKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFja19lbmNfc3RvcCAoR3N0QXVkaW9FbmNvZGVyICogZW5jKQotewotICBHc3RXYXZwYWNrRW5jICp3cGVuYyA9IEdTVF9XQVZQQUNLX0VOQyAoZW5jKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJzdG9wIik7Ci0gIGdzdF93YXZwYWNrX2VuY19yZXNldCAod3BlbmMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYWNrX2VuY19zZXRfZm9ybWF0IChHc3RBdWRpb0VuY29kZXIgKiBiZW5jLCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RXYXZwYWNrRW5jICplbmMgPSBHU1RfV0FWUEFDS19FTkMgKGJlbmMpOwotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqcG9zOwotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBvcG9zWzY0XSA9IHsgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fSU5WQUxJRCwgfTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQ2NCBtYXNrID0gMDsKLQotICAvKiB3ZSBtYXkgYmUgY29uZmlndXJlZCBhZ2FpbiwgYnV0IHRoYXQgY2hhbmdlIHNob3VsZCBoYXZlIGNsZWFudXAgY29udGV4dCAqLwotICBnX2Fzc2VydCAoZW5jLT53cF9jb250ZXh0ID09IE5VTEwpOwotCi0gIGVuYy0+Y2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbyk7Ci0gIGVuYy0+ZGVwdGggPSBHU1RfQVVESU9fSU5GT19ERVBUSCAoaW5mbyk7Ci0gIGVuYy0+c2FtcGxlcmF0ZSA9IEdTVF9BVURJT19JTkZPX1JBVEUgKGluZm8pOwotCi0gIHBvcyA9IGluZm8tPnBvc2l0aW9uOwotICBnX2Fzc2VydCAocG9zKTsKLQotICAvKiBJZiBvbmUgY2hhbm5lbCBpcyBOT05FIHRoZXknbGwgYmUgYWxsIHVuZGVmaW5lZCAqLwotICBpZiAocG9zICE9IE5VTEwgJiYgcG9zWzBdID09IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUpIHsKLSAgICBnb3RvIGludmFsaWRfY2hhbm5lbHM7Ci0gIH0KLQotICBlbmMtPmNoYW5uZWxfbWFzayA9Ci0gICAgICBnc3Rfd2F2cGFja19nZXRfY2hhbm5lbF9tYXNrX2Zyb21fcG9zaXRpb25zIChwb3MsIGVuYy0+Y2hhbm5lbHMpOwotICBlbmMtPm5lZWRfY2hhbm5lbF9yZW1hcCA9Ci0gICAgICBnc3Rfd2F2cGFja19zZXRfY2hhbm5lbF9tYXBwaW5nIChwb3MsIGVuYy0+Y2hhbm5lbHMsCi0gICAgICBlbmMtPmNoYW5uZWxfbWFwcGluZyk7Ci0KLSAgLyogd2F2cGFjayBjYXBzIGhvbGQgZ3N0IG1hc2ssIG5vdCB3YXZwYWNrIG1hc2sgKi8KLSAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX21hc2sgKG9wb3MsIGVuYy0+Y2hhbm5lbHMsIEZBTFNFLCAmbWFzayk7Ci0KLSAgLyogc2V0IGZpeGVkIHNyYyBwYWQgY2FwcyBub3cgdGhhdCB3ZSBrbm93IHdoYXQgd2Ugd2lsbCBnZXQgKi8KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXdhdnBhY2siLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgZW5jLT5jaGFubmVscywKLSAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgZW5jLT5zYW1wbGVyYXRlLAotICAgICAgImRlcHRoIiwgR19UWVBFX0lOVCwgZW5jLT5kZXB0aCwgImZyYW1lZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLQotICBpZiAobWFzaykKLSAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgbWFzaywgTlVMTCk7Ci0KLSAgaWYgKCFnc3RfYXVkaW9fZW5jb2Rlcl9zZXRfb3V0cHV0X2Zvcm1hdCAoYmVuYywgY2FwcykpCi0gICAgZ290byBzZXR0aW5nX3NyY19jYXBzX2ZhaWxlZDsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogbm8gc3BlY2lhbCBmZWVkYmFjayB0byBiYXNlIGNsYXNzOyBzaG91bGQgcHJvdmlkZSBhbGwgYXZhaWxhYmxlIHNhbXBsZXMgKi8KLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXNldHRpbmdfc3JjX2NhcHNfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLAotICAgICAgICAiQ291bGRuJ3Qgc2V0IGNhcHMgb24gc291cmNlIHBhZDogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfY2hhbm5lbHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJpbnB1dCBoYXMgaW52YWxpZCBjaGFubmVsIGxheW91dCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcgKEdzdFdhdnBhY2tFbmMgKiBlbmMpCi17Ci0gIGVuYy0+d3BfY29uZmlnID0gZ19uZXcwIChXYXZwYWNrQ29uZmlnLCAxKTsKLSAgLyogc2V0IGdlbmVyYWwgc3RyZWFtIGluZm9ybWF0aW9ucyBpbiB0aGUgV2F2cGFja0NvbmZpZyAqLwotICBlbmMtPndwX2NvbmZpZy0+Ynl0ZXNfcGVyX3NhbXBsZSA9IEdTVF9ST1VORF9VUF84IChlbmMtPmRlcHRoKSAvIDg7Ci0gIGVuYy0+d3BfY29uZmlnLT5iaXRzX3Blcl9zYW1wbGUgPSBlbmMtPmRlcHRoOwotICBlbmMtPndwX2NvbmZpZy0+bnVtX2NoYW5uZWxzID0gZW5jLT5jaGFubmVsczsKLSAgZW5jLT53cF9jb25maWctPmNoYW5uZWxfbWFzayA9IGVuYy0+Y2hhbm5lbF9tYXNrOwotICBlbmMtPndwX2NvbmZpZy0+c2FtcGxlX3JhdGUgPSBlbmMtPnNhbXBsZXJhdGU7Ci0KLSAgLyoKLSAgICogU2V0IHBhcmFtZXRlcnMgaW4gV2F2cGFja0NvbmZpZwotICAgKi8KLQotICAvKiBFbmNvZGluZyBtb2RlICovCi0gIHN3aXRjaCAoZW5jLT5tb2RlKSB7Ci0jaWYgMAotICAgIGNhc2UgR1NUX1dBVlBBQ0tfRU5DX01PREVfVkVSWV9GQVNUOgotICAgICAgZW5jLT53cF9jb25maWctPmZsYWdzIHw9IENPTkZJR19WRVJZX0ZBU1RfRkxBRzsKLSAgICAgIGVuYy0+d3BfY29uZmlnLT5mbGFncyB8PSBDT05GSUdfRkFTVF9GTEFHOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEdTVF9XQVZQQUNLX0VOQ19NT0RFX0ZBU1Q6Ci0gICAgICBlbmMtPndwX2NvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0ZBU1RfRkxBRzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1dBVlBBQ0tfRU5DX01PREVfREVGQVVMVDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1dBVlBBQ0tfRU5DX01PREVfSElHSDoKLSAgICAgIGVuYy0+d3BfY29uZmlnLT5mbGFncyB8PSBDT05GSUdfSElHSF9GTEFHOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfV0FWUEFDS19FTkNfTU9ERV9WRVJZX0hJR0g6Ci0gICAgICBlbmMtPndwX2NvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0hJR0hfRkxBRzsKLSAgICAgIGVuYy0+d3BfY29uZmlnLT5mbGFncyB8PSBDT05GSUdfVkVSWV9ISUdIX0ZMQUc7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIEJpdHJhdGUsIGVuYWJsZXMgbG9zc3kgbW9kZSAqLwotICBpZiAoZW5jLT5iaXRyYXRlKSB7Ci0gICAgZW5jLT53cF9jb25maWctPmZsYWdzIHw9IENPTkZJR19IWUJSSURfRkxBRzsKLSAgICBlbmMtPndwX2NvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0JJVFJBVEVfS0JQUzsKLSAgICBlbmMtPndwX2NvbmZpZy0+Yml0cmF0ZSA9IGVuYy0+Yml0cmF0ZSAvIDEwMDAuMDsKLSAgfSBlbHNlIGlmIChlbmMtPmJwcykgewotICAgIGVuYy0+d3BfY29uZmlnLT5mbGFncyB8PSBDT05GSUdfSFlCUklEX0ZMQUc7Ci0gICAgZW5jLT53cF9jb25maWctPmJpdHJhdGUgPSBlbmMtPmJwczsKLSAgfQotCi0gIC8qIENvcnJlY3Rpb24gTW9kZSwgb25seSBpbiBsb3NzeSBtb2RlICovCi0gIGlmIChlbmMtPndwX2NvbmZpZy0+ZmxhZ3MgJiBDT05GSUdfSFlCUklEX0ZMQUcpIHsKLSAgICBpZiAoZW5jLT5jb3JyZWN0aW9uX21vZGUgPiBHU1RfV0FWUEFDS19DT1JSRUNUSU9OX01PREVfT0ZGKSB7Ci0gICAgICBHc3RDYXBzICpjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtd2F2cGFjay1jb3JyZWN0aW9uIiwKLSAgICAgICAgICAiZnJhbWVkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotCi0gICAgICBlbmMtPnd2Y3NyY3BhZCA9Ci0gICAgICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZ3dmNzcmNfZmFjdG9yeSwgInd2Y3NyYyIpOwotCi0gICAgICAvKiB0cnkgdG8gYWRkIGNvcnJlY3Rpb24gc3JjIHBhZCwgZG9uJ3Qgc2V0IGNvcnJlY3Rpb24gbW9kZSBvbiBmYWlsdXJlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJBZGRpbmcgY29ycmVjdGlvbiBwYWQgd2l0aCBjYXBzICUiCi0gICAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgICAgaWYgKCFnc3RfcGFkX3NldF9jYXBzIChlbmMtPnd2Y3NyY3BhZCwgY2FwcykpIHsKLSAgICAgICAgZW5jLT5jb3JyZWN0aW9uX21vZGUgPSAwOwotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuYywgInNldHRpbmcgY29ycmVjdGlvbiBjYXBzIGZhaWxlZCIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoZW5jLT53dmNzcmNwYWQpOwotICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGVuYy0+d3Zjc3JjcGFkLCBUUlVFKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGVuYyksIGVuYy0+d3Zjc3JjcGFkKTsKLSAgICAgICAgZW5jLT53cF9jb25maWctPmZsYWdzIHw9IENPTkZJR19DUkVBVEVfV1ZDOwotICAgICAgICBpZiAoZW5jLT5jb3JyZWN0aW9uX21vZGUgPT0gR1NUX1dBVlBBQ0tfQ09SUkVDVElPTl9NT0RFX09QVElNSVpFRCkgewotICAgICAgICAgIGVuYy0+d3BfY29uZmlnLT5mbGFncyB8PSBDT05GSUdfT1BUSU1JWkVfV1ZDOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChlbmMtPmNvcnJlY3Rpb25fbW9kZSA+IEdTVF9XQVZQQUNLX0NPUlJFQ1RJT05fTU9ERV9PRkYpIHsKLSAgICAgIGVuYy0+Y29ycmVjdGlvbl9tb2RlID0gMDsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZW5jLCAic2V0dGluZyBjb3JyZWN0aW9uIG1vZGUgb25seSBoYXMgIgotICAgICAgICAgICJhbnkgZWZmZWN0IGlmIGEgYml0cmF0ZSBpcyBwcm92aWRlZC4iKTsKLSAgICB9Ci0gIH0KLSAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzIChHU1RfRUxFTUVOVCAoZW5jKSk7Ci0KLSAgLyogTUQ1LCBzZXR1cCBNRDUgY29udGV4dCAqLwotICBpZiAoKGVuYy0+bWQ1KSAmJiAhKGVuYy0+bWQ1X2NvbnRleHQpKSB7Ci0gICAgZW5jLT53cF9jb25maWctPmZsYWdzIHw9IENPTkZJR19NRDVfQ0hFQ0tTVU07Ci0gICAgZW5jLT5tZDVfY29udGV4dCA9IGdfY2hlY2tzdW1fbmV3IChHX0NIRUNLU1VNX01ENSk7Ci0gIH0KLQotICAvKiBFeHRyYSBlbmNvZGUgcHJvY2Vzc2luZyAqLwotICBpZiAoZW5jLT5leHRyYV9wcm9jZXNzaW5nKSB7Ci0gICAgZW5jLT53cF9jb25maWctPmZsYWdzIHw9IENPTkZJR19FWFRSQV9NT0RFOwotICAgIGVuYy0+d3BfY29uZmlnLT54bW9kZSA9IGVuYy0+ZXh0cmFfcHJvY2Vzc2luZzsKLSAgfQotCi0gIC8qIEpvaW50IHN0ZXJlbyBtb2RlICovCi0gIHN3aXRjaCAoZW5jLT5qb2ludF9zdGVyZW9fbW9kZSkgewotICAgIGNhc2UgR1NUX1dBVlBBQ0tfSlNfTU9ERV9BVVRPOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfV0FWUEFDS19KU19NT0RFX0xFRlRfUklHSFQ6Ci0gICAgICBlbmMtPndwX2NvbmZpZy0+ZmxhZ3MgfD0gQ09ORklHX0pPSU5UX09WRVJSSURFOwotICAgICAgZW5jLT53cF9jb25maWctPmZsYWdzICY9IH5DT05GSUdfSk9JTlRfU1RFUkVPOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfV0FWUEFDS19KU19NT0RFX01JRF9TSURFOgotICAgICAgZW5jLT53cF9jb25maWctPmZsYWdzIHw9IChDT05GSUdfSk9JTlRfT1ZFUlJJREUgfCBDT05GSUdfSk9JTlRfU1RFUkVPKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBpbnQKLWdzdF93YXZwYWNrX2VuY19wdXNoX2Jsb2NrICh2b2lkICppZCwgdm9pZCAqZGF0YSwgaW50MzJfdCBjb3VudCkKLXsKLSAgR3N0V2F2cGFja0VuY1dyaXRlSUQgKndpZCA9IChHc3RXYXZwYWNrRW5jV3JpdGVJRCAqKSBpZDsKLSAgR3N0V2F2cGFja0VuYyAqZW5jID0gR1NUX1dBVlBBQ0tfRU5DICh3aWQtPndhdnBhY2tfZW5jKTsKLSAgR3N0Rmxvd1JldHVybiAqZmxvdzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdFBhZCAqcGFkOwotICBndWNoYXIgKmJsb2NrID0gKGd1Y2hhciAqKSBkYXRhOwotICBnaW50IHNhbXBsZXMgPSAwOwotCi0gIHBhZCA9ICh3aWQtPmNvcnJlY3Rpb24pID8gZW5jLT53dmNzcmNwYWQgOiBHU1RfQVVESU9fRU5DT0RFUl9TUkNfUEFEIChlbmMpOwotICBmbG93ID0KLSAgICAgICh3aWQtPmNvcnJlY3Rpb24pID8gJmVuYy0+Ci0gICAgICB3dmNzcmNwYWRfbGFzdF9yZXR1cm4gOiAmZW5jLT5zcmNwYWRfbGFzdF9yZXR1cm47Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChjb3VudCk7Ci0gIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyLCAwLCBkYXRhLCBjb3VudCk7Ci0KLSAgaWYgKGNvdW50ID4gc2l6ZW9mIChXYXZwYWNrSGVhZGVyKSAmJiBtZW1jbXAgKGJsb2NrLCAid3ZwayIsIDQpID09IDApIHsKLSAgICAvKiBpZiBpdCdzIGEgV2F2cGFjayBibG9jayBzZXQgYnVmZmVyIHRpbWVzdGFtcCBhbmQgZHVyYXRpb24sIGV0YyAqLwotICAgIFdhdnBhY2tIZWFkZXIgd3BoOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGVuYywgImdvdCAlZCBieXRlcyBvZiBlbmNvZGVkIHdhdnBhY2sgJXNkYXRhIiwKLSAgICAgICAgY291bnQsICh3aWQtPmNvcnJlY3Rpb24pID8gImNvcnJlY3Rpb24gIiA6ICIiKTsKLQotICAgIGdzdF93YXZwYWNrX3JlYWRfaGVhZGVyICgmd3BoLCBibG9jayk7Ci0KLSAgICAvKiBPbmx5IHNldCB3aGVuIHB1c2hpbmcgdGhlIGZpcnN0IGJ1ZmZlciBhZ2FpbiwgaW4gdGhhdCBjYXNlCi0gICAgICogd2UgZG9uJ3Qgd2FudCB0byBkZWxheSB0aGUgYnVmZmVyIG9yIHB1c2ggbmV3c2VnbWVudCBldmVudHMKLSAgICAgKi8KLSAgICBpZiAoIXdpZC0+cGFzc3Rocm91Z2gpIHsKLSAgICAgIC8qIE9ubHkgcHVzaCBjb21wbGV0ZSBibG9ja3MgKi8KLSAgICAgIGlmIChlbmMtPnBlbmRpbmdfYnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgZW5jLT5wZW5kaW5nX2J1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgICAgZW5jLT5wZW5kaW5nX29mZnNldCA9IHdwaC5ibG9ja19pbmRleDsKLSAgICAgIH0gZWxzZSBpZiAoZW5jLT5wZW5kaW5nX29mZnNldCA9PSB3cGguYmxvY2tfaW5kZXgpIHsKLSAgICAgICAgZW5jLT5wZW5kaW5nX2J1ZmZlciA9IGdzdF9idWZmZXJfYXBwZW5kIChlbmMtPnBlbmRpbmdfYnVmZmVyLCBidWZmZXIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0VSUk9SICgiR290IGluY29tcGxldGUgYmxvY2ssIGRyb3BwaW5nIik7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGVuYy0+cGVuZGluZ19idWZmZXIpOwotICAgICAgICBlbmMtPnBlbmRpbmdfYnVmZmVyID0gYnVmZmVyOwotICAgICAgICBlbmMtPnBlbmRpbmdfb2Zmc2V0ID0gd3BoLmJsb2NrX2luZGV4OwotICAgICAgfQotCi0gICAgICAvKiBJcyB0aGlzIHRoZSBub3QtZmluYWwgYmxvY2sgb2YgbXVsdGktY2hhbm5lbCBkYXRhPyBJZiBzbywganVzdAotICAgICAgICogYWNjdW11bGF0ZSBhbmQgcmV0dXJuIGhlcmUuICovCi0gICAgICBpZiAoISh3cGguZmxhZ3MgJiBGSU5BTF9CTE9DSykgJiYgKChibG9ja1szMl0gJiBJRF9PUFRJT05BTF9EQVRBKSA9PSAwKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICAgIGJ1ZmZlciA9IGVuYy0+cGVuZGluZ19idWZmZXI7Ci0gICAgICBlbmMtPnBlbmRpbmdfYnVmZmVyID0gTlVMTDsKLSAgICAgIGVuYy0+cGVuZGluZ19vZmZzZXQgPSAwOwotCi0gICAgICAvKiBvbmx5IHNlbmQgc2VnbWVudCBvbiBjb3JyZWN0aW9uIHBhZCwKLSAgICAgICAqIHJlZ3VsYXIgcGFkIGlzIGhhbmRsZWQgbm9ybWFsbHkgYnkgYmFzZWNsYXNzICovCi0gICAgICBpZiAod2lkLT5jb3JyZWN0aW9uICYmIGVuYy0+cGVuZGluZ19zZWdtZW50KSB7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBlbmMtPnBlbmRpbmdfc2VnbWVudCk7Ci0gICAgICAgIGVuYy0+cGVuZGluZ19zZWdtZW50ID0gTlVMTDsKLSAgICAgIH0KLQotICAgICAgaWYgKHdwaC5ibG9ja19pbmRleCA9PSAwKSB7Ci0gICAgICAgIC8qIHNhdmUgaGVhZGVyIGZvciBsYXRlciByZWZlcmVuY2UsIHNvIHdlIGNhbiByZS1zZW5kIGl0IGxhdGVyIG9uCi0gICAgICAgICAqIEVPUyB3aXRoIGZpeGVkIHVwIHZhbHVlcyBmb3IgdG90YWwgc2FtcGxlIGNvdW50IGV0Yy4gKi8KLSAgICAgICAgaWYgKGVuYy0+Zmlyc3RfYmxvY2sgPT0gTlVMTCAmJiAhd2lkLT5jb3JyZWN0aW9uKSB7Ci0gICAgICAgICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICAgIGVuYy0+Zmlyc3RfYmxvY2sgPSBnX21lbWR1cCAobWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgICAgICBlbmMtPmZpcnN0X2Jsb2NrX3NpemUgPSBtYXAuc2l6ZTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNhbXBsZXMgPSB3cGguYmxvY2tfc2FtcGxlczsKLQotICAgIC8qIGRlY29yYXRlIGJ1ZmZlciAqLwotICAgIC8qIE5PVEU6IHRoaXMgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gYnkgYmFzZWNsYXNzLCBidXQgc3RheSBmb3IgdGhvc2UKLSAgICAgKiB0aGF0IGFyZSBwdXNoZWQgZGlyZWN0bHkKLSAgICAgKiBGSVhNRTogYWRkIHNldHRpbmcgdG8gYmFzZWNsYXNzIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGl0ID8/ICovCi0gICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPSB3cGguYmxvY2tfaW5kZXg7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpID0gd3BoLmJsb2NrX2luZGV4ICsgd3BoLmJsb2NrX3NhbXBsZXM7Ci0gIH0gZWxzZSB7Ci0gICAgLyogaWYgaXQncyBzb21ldGhpbmcgZWxzZSBzZXQgbm8gdGltZXN0YW1wIGFuZCBkdXJhdGlvbiBvbiB0aGUgYnVmZmVyICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAiZ290ICVkIGJ5dGVzIG9mIHVua25vd24gZGF0YSIsIGNvdW50KTsKLSAgfQotCi0gIGlmICh3aWQtPmNvcnJlY3Rpb24gfHwgd2lkLT5wYXNzdGhyb3VnaCkgewotICAgIC8qIHB1c2ggdGhlIGJ1ZmZlciBhbmQgZm9yd2FyZCBlcnJvcnMgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJwdXNoaW5nIGJ1ZmZlciB3aXRoICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpKTsKLSAgICAqZmxvdyA9IGdzdF9wYWRfcHVzaCAocGFkLCBidWZmZXIpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVuYywgImhhbmRpbmcgZnJhbWUgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikpOwotICAgICpmbG93ID0gZ3N0X2F1ZGlvX2VuY29kZXJfZmluaXNoX2ZyYW1lIChHU1RfQVVESU9fRU5DT0RFUiAoZW5jKSwgYnVmZmVyLAotICAgICAgICBzYW1wbGVzKTsKLSAgfQotCi0gIGlmICgqZmxvdyAhPSBHU1RfRkxPV19PSykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZW5jLCAiZmxvdyBvbiAlczolcyA9ICVzIiwKLSAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBnc3RfZmxvd19nZXRfbmFtZSAoKmZsb3cpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYWNrX2VuY19maXhfY2hhbm5lbF9vcmRlciAoR3N0V2F2cGFja0VuYyAqIGVuYywgZ2ludDMyICogZGF0YSwKLSAgICBnaW50IG5zYW1wbGVzKQotewotICBnaW50IGksIGo7Ci0gIGdpbnQzMiB0bXBbOF07Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5zYW1wbGVzIC8gZW5jLT5jaGFubmVsczsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IGVuYy0+Y2hhbm5lbHM7IGorKykgewotICAgICAgdG1wW2VuYy0+Y2hhbm5lbF9tYXBwaW5nW2pdXSA9IGRhdGFbal07Ci0gICAgfQotICAgIGZvciAoaiA9IDA7IGogPCBlbmMtPmNoYW5uZWxzOyBqKyspIHsKLSAgICAgIGRhdGFbal0gPSB0bXBbal07Ci0gICAgfQotICAgIGRhdGEgKz0gZW5jLT5jaGFubmVsczsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3dhdnBhY2tfZW5jX2hhbmRsZV9mcmFtZSAoR3N0QXVkaW9FbmNvZGVyICogYmVuYywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RXYXZwYWNrRW5jICplbmMgPSBHU1RfV0FWUEFDS19FTkMgKGJlbmMpOwotICB1aW50MzJfdCBzYW1wbGVfY291bnQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RNYXBJbmZvIG1hcDsKLQotICAvKiBiYXNlIGNsYXNzIGVuc3VyZXMgY29uZmlndXJhdGlvbiAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW5jLT5kZXB0aCAhPSAwLCBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0KLSAgLyogcmVzZXQgdGhlIGxhc3QgcmV0dXJucyB0byBHU1RfRkxPV19PSy4gVGhpcyBpcyBvbmx5IHNldCB0byBzb21ldGhpbmcgZWxzZQotICAgKiB3aGlsZSBXYXZwYWNrUGFja1NhbXBsZXMoKSBvciBtb3JlIHNwZWNpZmljIGdzdF93YXZwYWNrX2VuY19wdXNoX2Jsb2NrKCkKLSAgICogc28gbm90IHZhbGlkIGFueW1vcmUgKi8KLSAgZW5jLT5zcmNwYWRfbGFzdF9yZXR1cm4gPSBlbmMtPnd2Y3NyY3BhZF9sYXN0X3JldHVybiA9IEdTVF9GTE9XX09LOwotCi0gIGlmIChHX1VOTElLRUxZICghYnVmKSkKLSAgICByZXR1cm4gZ3N0X3dhdnBhY2tfZW5jX2RyYWluIChlbmMpOwotCi0gIHNhbXBsZV9jb3VudCA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgLyA0OwotICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJnb3QgJXUgcmF3IHNhbXBsZXMiLCBzYW1wbGVfY291bnQpOwotCi0gIC8qIGNoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHZhbGlkIFdhdnBhY2tDb250ZXh0LCBvdGhlcndpc2UgbWFrZSBvbmUgKi8KLSAgaWYgKCFlbmMtPndwX2NvbnRleHQpIHsKLSAgICAvKiBjcmVhdGUgcmF3IGNvbnRleHQgKi8KLSAgICBlbmMtPndwX2NvbnRleHQgPQotICAgICAgICBXYXZwYWNrT3BlbkZpbGVPdXRwdXQgKGdzdF93YXZwYWNrX2VuY19wdXNoX2Jsb2NrLCAmZW5jLT53dl9pZCwKLSAgICAgICAgKGVuYy0+Y29ycmVjdGlvbl9tb2RlID4gMCkgPyAmZW5jLT53dmNfaWQgOiBOVUxMKTsKLSAgICBpZiAoIWVuYy0+d3BfY29udGV4dCkKLSAgICAgIGdvdG8gY29udGV4dF9mYWlsZWQ7Ci0KLSAgICAvKiBzZXQgdGhlIFdhdnBhY2tDb25maWcgYWNjb3JkaW5nIHRvIG91ciBwYXJhbWV0ZXJzICovCi0gICAgZ3N0X3dhdnBhY2tfZW5jX3NldF93cF9jb25maWcgKGVuYyk7Ci0KLSAgICAvKiBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGNvbnRleHQgbm93IHRoYXQgd2Uga25vdyBldmVyeXRoaW5nCi0gICAgICogYW5kIGluaXRpYWxpemUgdGhlIGVuY29kZXIgKi8KLSAgICBpZiAoIVdhdnBhY2tTZXRDb25maWd1cmF0aW9uIChlbmMtPndwX2NvbnRleHQsCi0gICAgICAgICAgICBlbmMtPndwX2NvbmZpZywgKHVpbnQzMl90KSAoLTEpKQotICAgICAgICB8fCAhV2F2cGFja1BhY2tJbml0IChlbmMtPndwX2NvbnRleHQpKSB7Ci0gICAgICBXYXZwYWNrQ2xvc2VGaWxlIChlbmMtPndwX2NvbnRleHQpOwotICAgICAgZ290byBjb25maWdfZmFpbGVkOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJzZXR1cCBvZiBlbmNvZGluZyBjb250ZXh0IHN1Y2Nlc3NmdWxsIik7Ci0gIH0KLQotICBpZiAoZW5jLT5uZWVkX2NoYW5uZWxfcmVtYXApIHsKLSAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgZ3N0X3dhdnBhY2tfZW5jX2ZpeF9jaGFubmVsX29yZGVyIChlbmMsIChnaW50MzIgKikgbWFwLmRhdGEsIHNhbXBsZV9jb3VudCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgLyogaWYgd2Ugd2FudCB0byBhcHBlbmQgdGhlIE1ENSBzdW0gdG8gdGhlIHN0cmVhbSB1cGRhdGUgaXQgaGVyZQotICAgKiB3aXRoIHRoZSBjdXJyZW50IHJhdyBzYW1wbGVzICovCi0gIGlmIChlbmMtPm1kNSkgewotICAgIGdfY2hlY2tzdW1fdXBkYXRlIChlbmMtPm1kNV9jb250ZXh0LCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICB9Ci0KLSAgLyogZW5jb2RlIGFuZCBoYW5kbGUgcmV0dXJuIHZhbHVlcyBmcm9tIGVuY29kaW5nICovCi0gIGlmIChXYXZwYWNrUGFja1NhbXBsZXMgKGVuYy0+d3BfY29udGV4dCwgKGludDMyX3QgKikgbWFwLmRhdGEsCi0gICAgICAgICAgc2FtcGxlX2NvdW50IC8gZW5jLT5jaGFubmVscykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJlbmNvZGluZyBzYW1wbGVzIHN1Y2Nlc3NmdWwiKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9IGVsc2UgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgaWYgKChlbmMtPnNyY3BhZF9sYXN0X3JldHVybiA9PSBHU1RfRkxPV19PSykgfHwKLSAgICAgICAgKGVuYy0+d3Zjc3JjcGFkX2xhc3RfcmV0dXJuID09IEdTVF9GTE9XX09LKSkgewotICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgfSBlbHNlIGlmICgoZW5jLT5zcmNwYWRfbGFzdF9yZXR1cm4gPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkgJiYKLSAgICAgICAgKGVuYy0+d3Zjc3JjcGFkX2xhc3RfcmV0dXJuID09IEdTVF9GTE9XX05PVF9MSU5LRUQpKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotICAgIH0gZWxzZSBpZiAoKGVuYy0+c3JjcGFkX2xhc3RfcmV0dXJuID09IEdTVF9GTE9XX0ZMVVNISU5HKSAmJgotICAgICAgICAoZW5jLT53dmNzcmNwYWRfbGFzdF9yZXR1cm4gPT0gR1NUX0ZMT1dfRkxVU0hJTkcpKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICB9IGVsc2UgewotICAgICAgZ290byBlbmNvZGluZ19mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLWV4aXQ6Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1lbmNvZGluZ19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZW5jLCBMSUJSQVJZLCBFTkNPREUsIChOVUxMKSwKLSAgICAgICAgKCJlbmNvZGluZyBzYW1wbGVzIGZhaWxlZCIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLWNvbmZpZ19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZW5jLCBMSUJSQVJZLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoImVycm9yIHNldHRpbmcgdXAgd2F2cGFjayBlbmNvZGluZyBjb250ZXh0IikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotY29udGV4dF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZW5jLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiZXJyb3IgY3JlYXRpbmcgV2F2cGFjayBjb250ZXh0IikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfZW5jX3Jld3JpdGVfZmlyc3RfYmxvY2sgKEdzdFdhdnBhY2tFbmMgKiBlbmMpCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHNlZWthYmxlID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZW5jKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZW5jLT5maXJzdF9ibG9jayk7Ci0KLSAgLyogdXBkYXRlIHRoZSBzYW1wbGUgY291bnQgaW4gdGhlIGZpcnN0IGJsb2NrICovCi0gIFdhdnBhY2tVcGRhdGVOdW1TYW1wbGVzIChlbmMtPndwX2NvbnRleHQsIGVuYy0+Zmlyc3RfYmxvY2spOwotCi0gIC8qIHRyeSB0byBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dCAqLwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGlmIChnc3RfcGFkX3BlZXJfcXVlcnkgKEdTVF9BVURJT19FTkNPREVSX1NSQ19QQUQgKGVuYyksIHF1ZXJ5KSkgewotICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmb3JtYXQsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7Ci0gICAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX0JZVEVTKQotICAgICAgc2Vla2FibGUgPSBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZW5jLCAiU0VFS0lORyBxdWVyeSBub3QgaGFuZGxlZCIpOwotICB9Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmICghc2Vla2FibGUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJkb3duc3RyZWFtIG5vdCBzZWVrYWJsZTsgbm90IHJld3JpdGluZyIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQVVESU9fRU5DT0RFUl9TUkNfUEFEIChlbmMpLAotICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICBpZiAocmV0KSB7Ci0gICAgLyogdHJ5IHRvIHJld3JpdGUgdGhlIGZpcnN0IGJsb2NrICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAicmV3cml0aW5nIGZpcnN0IGJsb2NrIC4uLiIpOwotICAgIGVuYy0+d3ZfaWQucGFzc3Rocm91Z2ggPSBUUlVFOwotICAgIHJldCA9IGdzdF93YXZwYWNrX2VuY19wdXNoX2Jsb2NrICgmZW5jLT53dl9pZCwKLSAgICAgICAgZW5jLT5maXJzdF9ibG9jaywgZW5jLT5maXJzdF9ibG9ja19zaXplKTsKLSAgICBlbmMtPnd2X2lkLnBhc3N0aHJvdWdoID0gRkFMU0U7Ci0gICAgZ19mcmVlIChlbmMtPmZpcnN0X2Jsb2NrKTsKLSAgICBlbmMtPmZpcnN0X2Jsb2NrID0gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuYywgInJld3JpdGluZyBvZiBmaXJzdCBibG9jayBmYWlsZWQuICIKLSAgICAgICAgIlNlZWtpbmcgdG8gZmlyc3QgYmxvY2sgZmFpbGVkISIpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfd2F2cGFja19lbmNfZHJhaW4gKEdzdFdhdnBhY2tFbmMgKiBlbmMpCi17Ci0gIGlmICghZW5jLT53cF9jb250ZXh0KQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJkcmFpbmluZyIpOwotCi0gIC8qIEVuY29kZSBhbGwgcmVtYWluaW5nIHNhbXBsZXMgYW5kIGZsdXNoIHRoZW0gdG8gdGhlIHNyYyBwYWRzICovCi0gIFdhdnBhY2tGbHVzaFNhbXBsZXMgKGVuYy0+d3BfY29udGV4dCk7Ci0KLSAgLyogRHJvcCBhbGwgcmVtYWluaW5nIGRhdGEsIHRoaXMgaXMgbm8gY29tcGxldGUgYmxvY2sgb3RoZXJ3aXNlCi0gICAqIGl0IHdvdWxkJ3ZlIGJlZW4gcHVzaGVkIGFscmVhZHkgKi8KLSAgaWYgKGVuYy0+cGVuZGluZ19idWZmZXIpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChlbmMtPnBlbmRpbmdfYnVmZmVyKTsKLSAgICBlbmMtPnBlbmRpbmdfYnVmZmVyID0gTlVMTDsKLSAgICBlbmMtPnBlbmRpbmdfb2Zmc2V0ID0gMDsKLSAgfQotCi0gIC8qIHdyaXRlIHRoZSBNRDUgc3VtIGlmIHdlIGhhdmUgdG8gd3JpdGUgb25lICovCi0gIGlmICgoZW5jLT5tZDUpICYmIChlbmMtPm1kNV9jb250ZXh0KSkgewotICAgIGd1aW50OCBtZDVfZGlnZXN0WzE2XTsKLSAgICBnc2l6ZSBkaWdlc3RfbGVuID0gc2l6ZW9mIChtZDVfZGlnZXN0KTsKLQotICAgIGdfY2hlY2tzdW1fZ2V0X2RpZ2VzdCAoZW5jLT5tZDVfY29udGV4dCwgbWQ1X2RpZ2VzdCwgJmRpZ2VzdF9sZW4pOwotICAgIGlmIChkaWdlc3RfbGVuID09IHNpemVvZiAobWQ1X2RpZ2VzdCkpIHsKLSAgICAgIFdhdnBhY2tTdG9yZU1ENVN1bSAoZW5jLT53cF9jb250ZXh0LCBtZDVfZGlnZXN0KTsKLSAgICAgIFdhdnBhY2tGbHVzaFNhbXBsZXMgKGVuYy0+d3BfY29udGV4dCk7Ci0gICAgfSBlbHNlCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVuYywgIkNhbGN1bGF0aW5nIE1ENSBkaWdlc3QgZmFpbGVkIik7Ci0gIH0KLQotICAvKiBUcnkgdG8gcmV3cml0ZSB0aGUgZmlyc3QgZnJhbWUgd2l0aCB0aGUgY29ycmVjdCBzYW1wbGUgbnVtYmVyICovCi0gIGlmIChlbmMtPmZpcnN0X2Jsb2NrKQotICAgIGdzdF93YXZwYWNrX2VuY19yZXdyaXRlX2ZpcnN0X2Jsb2NrIChlbmMpOwotCi0gIC8qIGNsb3NlIHRoZSBjb250ZXh0IGlmIG5vdCBhbHJlYWR5IGhhcHBlbmVkICovCi0gIGlmIChlbmMtPndwX2NvbnRleHQpIHsKLSAgICBXYXZwYWNrQ2xvc2VGaWxlIChlbmMtPndwX2NvbnRleHQpOwotICAgIGVuYy0+d3BfY29udGV4dCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhY2tfZW5jX3NpbmtfZXZlbnQgKEdzdEF1ZGlvRW5jb2RlciAqIGJlbmMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFdhdnBhY2tFbmMgKmVuYyA9IEdTVF9XQVZQQUNLX0VOQyAoYmVuYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAiUmVjZWl2ZWQgJXMgZXZlbnQgb24gc2lua3BhZCIsCi0gICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICBpZiAoZW5jLT53cF9jb250ZXh0KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZW5jLCAiZ290IE5FV1NFR01FTlQgYWZ0ZXIgZW5jb2RpbmcgIgotICAgICAgICAgICAgImFscmVhZHkgc3RhcnRlZCIpOwotICAgICAgfQotICAgICAgLyogcGVlayBhbmQgaG9sZCBORVdTRUdNRU5UIGV2ZW50cyBmb3Igc2VuZGluZyBvbiBjb3JyZWN0aW9uIHBhZCAqLwotICAgICAgaWYgKGVuYy0+cGVuZGluZ19zZWdtZW50KQotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGVuYy0+cGVuZGluZ19zZWdtZW50KTsKLSAgICAgIGVuYy0+cGVuZGluZ19zZWdtZW50ID0gZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogYmFzZWNsYXNzIGhhbmRsZXMgcmVzdCAqLwotICByZXR1cm4gR1NUX0FVRElPX0VOQ09ERVJfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKGJlbmMsIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYWNrX2VuY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0V2F2cGFja0VuYyAqZW5jID0gR1NUX1dBVlBBQ0tfRU5DIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgQVJHX01PREU6Ci0gICAgICBlbmMtPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19CSVRSQVRFOnsKLSAgICAgIGd1aW50IHZhbCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLQotICAgICAgaWYgKCh2YWwgPj0gMjQwMDApICYmICh2YWwgPD0gOTYwMDAwMCkpIHsKLSAgICAgICAgZW5jLT5iaXRyYXRlID0gdmFsOwotICAgICAgICBlbmMtPmJwcyA9IDAuMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuYy0+Yml0cmF0ZSA9IDA7Ci0gICAgICAgIGVuYy0+YnBzID0gMC4wOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQVJHX0JJVFNQRVJTQU1QTEU6ewotICAgICAgZ2RvdWJsZSB2YWwgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLQotICAgICAgaWYgKCh2YWwgPj0gMi4wKSAmJiAodmFsIDw9IDI0LjApKSB7Ci0gICAgICAgIGVuYy0+YnBzID0gdmFsOwotICAgICAgICBlbmMtPmJpdHJhdGUgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZW5jLT5icHMgPSAwLjA7Ci0gICAgICAgIGVuYy0+Yml0cmF0ZSA9IDA7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBBUkdfQ09SUkVDVElPTl9NT0RFOgotICAgICAgZW5jLT5jb3JyZWN0aW9uX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19NRDU6Ci0gICAgICBlbmMtPm1kNSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0VYVFJBX1BST0NFU1NJTkc6Ci0gICAgICBlbmMtPmV4dHJhX3Byb2Nlc3NpbmcgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19KT0lOVF9TVEVSRU9fTU9ERToKLSAgICAgIGVuYy0+am9pbnRfc3RlcmVvX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFja19lbmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFdhdnBhY2tFbmMgKmVuYyA9IEdTVF9XQVZQQUNLX0VOQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGVuYy0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19CSVRSQVRFOgotICAgICAgaWYgKGVuYy0+YnBzID09IDAuMCkgewotICAgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgZW5jLT5iaXRyYXRlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCAwKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0JJVFNQRVJTQU1QTEU6Ci0gICAgICBpZiAoZW5jLT5iaXRyYXRlID09IDApIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgZW5jLT5icHMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgMC4wKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0NPUlJFQ1RJT05fTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBlbmMtPmNvcnJlY3Rpb25fbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19NRDU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZW5jLT5tZDUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfRVhUUkFfUFJPQ0VTU0lORzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBlbmMtPmV4dHJhX3Byb2Nlc3NpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfSk9JTlRfU1RFUkVPX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZW5jLT5qb2ludF9zdGVyZW9fbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3Rfd2F2cGFja19lbmNfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAid2F2cGFja2VuYyIsCi0gICAgICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfV0FWUEFDS19FTkMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3dhdnBhY2tfZW5jX2RlYnVnLCAid2F2cGFja2VuYyIsIDAsCi0gICAgICAiV2F2cGFjayBlbmNvZGVyIik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9leHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmggYi9leHQvd2F2cGFjay9nc3R3YXZwYWNrZW5jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YTViMTEuLjAwMDAwMDAKLS0tIGEvZXh0L3dhdnBhY2svZ3N0d2F2cGFja2VuYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBXYXZwYWNrIGVuY29kZXIgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGdzdHdhdnBhY2tlbmMuaDogV2F2cGFjayBhdWRpbyBlbmNvZGVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9XQVZQQUNLX0VOQ19IX18KLSNkZWZpbmUgX19HU1RfV0FWUEFDS19FTkNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZW5jb2Rlci5oPgotCi0jaW5jbHVkZSA8d2F2cGFjay93YXZwYWNrLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfV0FWUEFDS19FTkMgXAotICAoZ3N0X3dhdnBhY2tfZW5jX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9XQVZQQUNLX0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1dBVlBBQ0tfRU5DLEdzdFdhdnBhY2tFbmMpKQotI2RlZmluZSBHU1RfV0FWUEFDS19FTkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfV0FWUEFDS19FTkMsR3N0V2F2cGFja0VuYykpCi0jZGVmaW5lIEdTVF9JU19XQVZQQUNLX0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1dBVlBBQ0tfRU5DKSkKLSNkZWZpbmUgR1NUX0lTX1dBVlBBQ0tfRU5DX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1dBVlBBQ0tfRU5DKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RXYXZwYWNrRW5jIEdzdFdhdnBhY2tFbmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0V2F2cGFja0VuY0NsYXNzIEdzdFdhdnBhY2tFbmNDbGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ2Jvb2xlYW4gY29ycmVjdGlvbjsKLSAgR3N0V2F2cGFja0VuYyAqd2F2cGFja19lbmM7Ci0gIGdib29sZWFuIHBhc3N0aHJvdWdoOwotfSBHc3RXYXZwYWNrRW5jV3JpdGVJRDsKLQotCi1zdHJ1Y3QgX0dzdFdhdnBhY2tFbmMKLXsKLSAgR3N0QXVkaW9FbmNvZGVyIGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiAqLwotICBHc3RQYWQgKnd2Y3NyY3BhZDsKLQotICBHc3RGbG93UmV0dXJuIHNyY3BhZF9sYXN0X3JldHVybjsKLSAgR3N0Rmxvd1JldHVybiB3dmNzcmNwYWRfbGFzdF9yZXR1cm47Ci0KLSAgV2F2cGFja0NvbmZpZyAqd3BfY29uZmlnOwotICBXYXZwYWNrQ29udGV4dCAqd3BfY29udGV4dDsKLQotICBnaW50IHNhbXBsZXJhdGU7Ci0gIGdpbnQgY2hhbm5lbHM7Ci0gIGdpbnQgY2hhbm5lbF9tYXNrOwotICBnaW50OCBjaGFubmVsX21hcHBpbmdbOF07Ci0gIGdib29sZWFuIG5lZWRfY2hhbm5lbF9yZW1hcDsKLSAgZ2ludCBkZXB0aDsKLQotICBHc3RXYXZwYWNrRW5jV3JpdGVJRCB3dl9pZDsKLSAgR3N0V2F2cGFja0VuY1dyaXRlSUQgd3ZjX2lkOwotCi0gIGd1aW50IG1vZGU7Ci0gIGd1aW50IGJpdHJhdGU7Ci0gIGdkb3VibGUgYnBzOwotICBndWludCBjb3JyZWN0aW9uX21vZGU7Ci0gIGdib29sZWFuIG1kNTsKLSAgR0NoZWNrc3VtICptZDVfY29udGV4dDsKLSAgZ3VpbnQgZXh0cmFfcHJvY2Vzc2luZzsKLSAgZ3VpbnQgam9pbnRfc3RlcmVvX21vZGU7Ci0KLSAgdm9pZCAqZmlyc3RfYmxvY2s7Ci0gIGludDMyX3QgZmlyc3RfYmxvY2tfc2l6ZTsKLQotICBHc3RCdWZmZXIgKnBlbmRpbmdfYnVmZmVyOwotICBnaW50MzIgcGVuZGluZ19vZmZzZXQ7Ci0gIEdzdEV2ZW50ICpwZW5kaW5nX3NlZ21lbnQ7Ci0KLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcF9vZmZzZXQ7Ci0gIEdzdENsb2NrVGltZSBuZXh0X3RzOwotfTsKLQotc3RydWN0IF9Hc3RXYXZwYWNrRW5jQ2xhc3MKLXsKLSAgR3N0QXVkaW9FbmNvZGVyQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X3dhdnBhY2tfZW5jX2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfZW5jX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1dBVlBBQ0tfRU5DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jIGIvZXh0L3dhdnBhY2svZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDI5YTM3Li4wMDAwMDAwCi0tLSBhL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKiBHU3RyZWFtZXIgV2F2cGFjayBwbHVnaW4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5jOiBzdHJlYW0gcmVhZGVyIHVzZWQgZm9yIGRlY29kaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHdhdnBhY2tfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2F2cGFja19kZWJ1ZwotCi1zdGF0aWMgaW50MzJfdAotZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9yZWFkX2J5dGVzICh2b2lkICppZCwgdm9pZCAqZGF0YSwgaW50MzJfdCBiY291bnQpCi17Ci0gIHJlYWRfaWQgKnJpZCA9IChyZWFkX2lkICopIGlkOwotICB1aW50MzJfdCBsZWZ0ID0gcmlkLT5sZW5ndGggLSByaWQtPnBvc2l0aW9uOwotICB1aW50MzJfdCB0b19yZWFkID0gTUlOIChsZWZ0LCBiY291bnQpOwotCi0gIEdTVF9ERUJVRyAoIlRyeWluZyB0byByZWFkICVkIG9mICVkIGJ5dGVzIGZyb20gcG9zaXRpb24gJWQiLCBiY291bnQsCi0gICAgICByaWQtPmxlbmd0aCwgcmlkLT5wb3NpdGlvbik7Ci0KLSAgaWYgKHRvX3JlYWQgPiAwKSB7Ci0gICAgbWVtbW92ZSAoZGF0YSwgcmlkLT5idWZmZXIgKyByaWQtPnBvc2l0aW9uLCB0b19yZWFkKTsKLSAgICByaWQtPnBvc2l0aW9uICs9IHRvX3JlYWQ7Ci0gICAgcmV0dXJuIHRvX3JlYWQ7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJDb3VsZG4ndCByZWFkICVkIGJ5dGVzIiwgYmNvdW50KTsKLSAgICByZXR1cm4gMDsKLSAgfQotfQotCi1zdGF0aWMgdWludDMyX3QKLWdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfZ2V0X3BvcyAodm9pZCAqaWQpCi17Ci0gIEdTVF9ERUJVRyAoIlJldHVybmluZyBwb3NpdGlvbiAlZCIsICgocmVhZF9pZCAqKSBpZCktPnBvc2l0aW9uKTsKLSAgcmV0dXJuICgocmVhZF9pZCAqKSBpZCktPnBvc2l0aW9uOwotfQotCi1zdGF0aWMgaW50Ci1nc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX3NldF9wb3NfYWJzICh2b2lkICppZCwgdWludDMyX3QgcG9zKQotewotICBHU1RfV0FSTklORyAoIlNob3VsZCBub3QgYmUgY2FsbGVkOiB0cmllZCB0byBzZXQgYWJzb2x1dGUgcG9zaXRpb24gdG8gJWQiLAotICAgICAgcG9zKTsKLSAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50Ci1nc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX3NldF9wb3NfcmVsICh2b2lkICppZCwgaW50MzJfdCBkZWx0YSwgaW50IG1vZGUpCi17Ci0gIEdTVF9XQVJOSU5HICgiU2hvdWxkIG5vdCBiZSBjYWxsZWQ6IHRyaWVkIHRvIHNldCByZWxhdGl2ZSBwb3NpdGlvbiB0byAlZCIKLSAgICAgICIgd2l0aCBtb2RlICVkIiwgZGVsdGEsIG1vZGUpOwotICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQKLWdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfcHVzaF9iYWNrX2J5dGUgKHZvaWQgKmlkLCBpbnQgYykKLXsKLSAgcmVhZF9pZCAqcmlkID0gKHJlYWRfaWQgKikgaWQ7Ci0KLSAgR1NUX0RFQlVHICgiUHVzaGluZyBiYWNrIG9uZSBieXRlOiAweCV4IiwgYyk7Ci0KLSAgaWYgKHJpZC0+cG9zaXRpb24gPT0gMCkKLSAgICByZXR1cm4gcmlkLT5wb3NpdGlvbjsKLQotICByaWQtPnBvc2l0aW9uIC09IDE7Ci0gIHJldHVybiByaWQtPnBvc2l0aW9uOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfZ2V0X2xlbmd0aCAodm9pZCAqaWQpCi17Ci0gIEdTVF9ERUJVRyAoIlJldHVybmluZyBsZW5ndGggJWQiLCAoKHJlYWRfaWQgKikgaWQpLT5sZW5ndGgpOwotCi0gIHJldHVybiAoKHJlYWRfaWQgKikgaWQpLT5sZW5ndGg7Ci19Ci0KLXN0YXRpYyBpbnQKLWdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfY2FuX3NlZWsgKHZvaWQgKmlkKQotewotICBHU1RfREVCVUcgKCJDYW4ndCBzZWVrIik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGludDMyX3QKLWdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfd3JpdGVfYnl0ZXMgKHZvaWQgKmlkLCB2b2lkICpkYXRhLCBpbnQzMl90IGJjb3VudCkKLXsKLSAgR1NUX1dBUk5JTkcgKCJTaG91bGQgbm90IGJlIGNhbGxlZCwgdHJpZWQgdG8gd3JpdGUgJWQgYnl0ZXMiLCBiY291bnQpOwotICByZXR1cm4gMDsKLX0KLQotV2F2cGFja1N0cmVhbVJlYWRlciAqCi1nc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX25ldyAodm9pZCkKLXsKLSAgV2F2cGFja1N0cmVhbVJlYWRlciAqc3RyZWFtX3JlYWRlciA9Ci0gICAgICAoV2F2cGFja1N0cmVhbVJlYWRlciAqKSBnX21hbGxvYzAgKHNpemVvZiAoV2F2cGFja1N0cmVhbVJlYWRlcikpOwotICBzdHJlYW1fcmVhZGVyLT5yZWFkX2J5dGVzID0gZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9yZWFkX2J5dGVzOwotICBzdHJlYW1fcmVhZGVyLT5nZXRfcG9zID0gZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9nZXRfcG9zOwotICBzdHJlYW1fcmVhZGVyLT5zZXRfcG9zX2FicyA9IGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfc2V0X3Bvc19hYnM7Ci0gIHN0cmVhbV9yZWFkZXItPnNldF9wb3NfcmVsID0gZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9zZXRfcG9zX3JlbDsKLSAgc3RyZWFtX3JlYWRlci0+cHVzaF9iYWNrX2J5dGUgPSBnc3Rfd2F2cGFja19zdHJlYW1fcmVhZGVyX3B1c2hfYmFja19ieXRlOwotICBzdHJlYW1fcmVhZGVyLT5nZXRfbGVuZ3RoID0gZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9nZXRfbGVuZ3RoOwotICBzdHJlYW1fcmVhZGVyLT5jYW5fc2VlayA9IGdzdF93YXZwYWNrX3N0cmVhbV9yZWFkZXJfY2FuX3NlZWs7Ci0gIHN0cmVhbV9yZWFkZXItPndyaXRlX2J5dGVzID0gZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl93cml0ZV9ieXRlczsKLQotICByZXR1cm4gc3RyZWFtX3JlYWRlcjsKLX0KZGlmZiAtLWdpdCBhL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuaCBiL2V4dC93YXZwYWNrL2dzdHdhdnBhY2tzdHJlYW1yZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0MTJjYy4uMDAwMDAwMAotLS0gYS9leHQvd2F2cGFjay9nc3R3YXZwYWNrc3RyZWFtcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKiBHU3RyZWFtZXIgV2F2cGFjayBwbHVnaW4KLSAqIENvcHlyaWdodCAoYykgMjAwNiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogZ3N0d2F2cGFja3N0cmVhbXJlYWRlci5oOiBzdHJlYW0gcmVhZGVyIHVzZWQgZm9yIGRlY29kaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9XQVZQQUNLX1NUUkVBTV9SRUFERVJfSF9fCi0jZGVmaW5lIF9fR1NUX1dBVlBBQ0tfU1RSRUFNX1JFQURFUl9IX18KLQotI2luY2x1ZGUgPHdhdnBhY2svd2F2cGFjay5oPgotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDggKmJ1ZmZlcjsKLSAgdWludDMyX3QgbGVuZ3RoOwotICB1aW50MzJfdCBwb3NpdGlvbjsKLX0gcmVhZF9pZDsKLQotV2F2cGFja1N0cmVhbVJlYWRlciAqZ3N0X3dhdnBhY2tfc3RyZWFtX3JlYWRlcl9uZXcgKHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9nZXR0ZXh0LmggYi9nc3QtbGlicy9nc3QvZ2V0dGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzcwYWI3Li4wMDAwMDAwCi0tLSBhL2dzdC1saWJzL2dzdC9nZXR0ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBDb252ZW5pZW5jZSBoZWFkZXIgZm9yIGNvbmRpdGlvbmFsIHVzZSBvZiBHTlUgPGxpYmludGwuaD4uCi0gICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAotICAgVVNBLiAgKi8KLQotI2lmbmRlZiBfTElCR0VUVEVYVF9ICi0jZGVmaW5lIF9MSUJHRVRURVhUX0ggMQotCi0vKiBOTFMgY2FuIGJlIGRpc2FibGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyZSAtLWRpc2FibGUtbmxzIG9wdGlvbi4gICovCi0jaWZkZWYgRU5BQkxFX05MUwotCi0vKiBHZXQgZGVjbGFyYXRpb25zIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZnVuY3Rpb25zLiAgKi8KLSMgaW5jbHVkZSA8bGliaW50bC5oPgotCi0jZWxzZQotCi0vKiBTb2xhcmlzIC91c3IvaW5jbHVkZS9sb2NhbGUuaCBpbmNsdWRlcyAvdXNyL2luY2x1ZGUvbGliaW50bC5oLCB3aGljaAotICAgY2hva2VzIGlmIGRjZ2V0dGV4dCBpcyBkZWZpbmVkIGFzIGEgbWFjcm8uICBTbyBpbmNsdWRlIGl0IG5vdywgdG8gbWFrZQotICAgbGF0ZXIgaW5jbHVzaW9ucyBvZiA8bG9jYWxlLmg+IGEgTk9QLiAgV2UgZG9uJ3QgaW5jbHVkZSA8bGliaW50bC5oPgotICAgYXMgd2VsbCBiZWNhdXNlIHBlb3BsZSB1c2luZyAiZ2V0dGV4dC5oIiB3aWxsIG5vdCBpbmNsdWRlIDxsaWJpbnRsLmg+LAotICAgYW5kIGFsc28gaW5jbHVkaW5nIDxsaWJpbnRsLmg+IHdvdWxkIGZhaWwgb24gU3VuT1MgNCwgd2hlcmVhcyA8bG9jYWxlLmg+Ci0gICBpcyBPSy4gICovCi0jaWYgZGVmaW5lZChfX3N1bikKLSMgaW5jbHVkZSA8bG9jYWxlLmg+Ci0jZW5kaWYKLQotLyogRGlzYWJsZWQgTkxTLgotICAgVGhlIGNhc3RzIHRvICdjb25zdCBjaGFyIConIHNlcnZlIHRoZSBwdXJwb3NlIG9mIHByb2R1Y2luZyB3YXJuaW5ncwotICAgZm9yIGludmFsaWQgdXNlcyBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGVzZSBmdW5jdGlvbnMuCi0gICBPbiBwcmUtQU5TSSBzeXN0ZW1zIHdpdGhvdXQgJ2NvbnN0JywgdGhlIGNvbmZpZy5oIGZpbGUgaXMgc3VwcG9zZWQgdG8KLSAgIGNvbnRhaW4gIiNkZWZpbmUgY29uc3QiLiAgKi8KLSMgZGVmaW5lIGdldHRleHQoTXNnaWQpICgoY29uc3QgY2hhciAqKSAoTXNnaWQpKQotIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpICgoY29uc3QgY2hhciAqKSAoTXNnaWQpKQotIyBkZWZpbmUgZGNnZXR0ZXh0KERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSkgKChjb25zdCBjaGFyICopIChNc2dpZCkpCi0jIGRlZmluZSBuZ2V0dGV4dChNc2dpZDEsIE1zZ2lkMiwgTikgXAotICAgICgoTikgPT0gMSA/IChjb25zdCBjaGFyICopIChNc2dpZDEpIDogKGNvbnN0IGNoYXIgKikgKE1zZ2lkMikpCi0jIGRlZmluZSBkbmdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQxLCBNc2dpZDIsIE4pIFwKLSAgICAoKE4pID09IDEgPyAoY29uc3QgY2hhciAqKSAoTXNnaWQxKSA6IChjb25zdCBjaGFyICopIChNc2dpZDIpKQotIyBkZWZpbmUgZGNuZ2V0dGV4dChEb21haW5uYW1lLCBNc2dpZDEsIE1zZ2lkMiwgTiwgQ2F0ZWdvcnkpIFwKLSAgICAoKE4pID09IDEgPyAoY29uc3QgY2hhciAqKSAoTXNnaWQxKSA6IChjb25zdCBjaGFyICopIChNc2dpZDIpKQotIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSAoKGNvbnN0IGNoYXIgKikgKERvbWFpbm5hbWUpKQotIyBkZWZpbmUgYmluZHRleHRkb21haW4oRG9tYWlubmFtZSwgRGlybmFtZSkgKChjb25zdCBjaGFyICopIChEaXJuYW1lKSkKLSMgZGVmaW5lIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KERvbWFpbm5hbWUsIENvZGVzZXQpICgoY29uc3QgY2hhciAqKSAoQ29kZXNldCkpCi0KLSNlbmRpZgotCi0vKiBBIHBzZXVkbyBmdW5jdGlvbiBjYWxsIHRoYXQgc2VydmVzIGFzIGEgbWFya2VyIGZvciB0aGUgYXV0b21hdGVkCi0gICBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzLCBidXQgZG9lcyBub3QgY2FsbCBnZXR0ZXh0KCkuICBUaGUgcnVuLXRpbWUKLSAgIHRyYW5zbGF0aW9uIGlzIGRvbmUgYXQgYSBkaWZmZXJlbnQgcGxhY2UgaW4gdGhlIGNvZGUuCi0gICBUaGUgYXJndW1lbnQsIFN0cmluZywgc2hvdWxkIGJlIGEgbGl0ZXJhbCBzdHJpbmcuICBDb25jYXRlbmF0ZWQgc3RyaW5ncwotICAgYW5kIG90aGVyIHN0cmluZyBleHByZXNzaW9ucyB3b24ndCB3b3JrLgotICAgVGhlIG1hY3JvJ3MgZXhwYW5zaW9uIGlzIG5vdCBwYXJlbnRoZXNpemVkLCBzbyB0aGF0IGl0IGlzIHN1aXRhYmxlIGFzCi0gICBpbml0aWFsaXplciBmb3Igc3RhdGljICdjaGFyW10nIG9yICdjb25zdCBjaGFyW10nIHZhcmlhYmxlcy4gICovCi0jZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZwotCi0jZW5kaWYgLyogX0xJQkdFVFRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCBiL2dzdC1saWJzL2dzdC9nbGliLWNvbXBhdC1wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMzdkZTIuLjAwMDAwMDAKLS0tIGEvZ3N0LWxpYnMvZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBnbGliLWNvbXBhdC5jCi0gKiBGdW5jdGlvbnMgY29waWVkIGZyb20gZ2xpYiAyLjEwCi0gKgotICogQ29weXJpZ2h0IDIwMDUgRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dMSUJfQ09NUEFUX1BSSVZBVEVfSF9fCi0jZGVmaW5lIF9fR0xJQl9DT01QQVRfUFJJVkFURV9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKiBjb3BpZXMgKi8KLQotLyogYWRhcHRhdGlvbnMgKi8KLQotR19FTkRfREVDTFMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvZ3N0LWkxOG4tcGx1Z2luLmggYi9nc3QtbGlicy9nc3QvZ3N0LWkxOG4tcGx1Z2luLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDBjZTIuLjAwMDAwMDAKLS0tIGEvZ3N0LWxpYnMvZ3N0L2dzdC1pMThuLXBsdWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzQGFwZXN0YWFydC5vcmc+Ci0gKgotICogZ3N0LWkxOG4tcGx1Z2lucy5oOiBpbnRlcm5hdGlvbmFsaXphdGlvbiBtYWNyb3MgZm9yIHRoZSBHU3RyZWFtZXIgcGx1Z2lucwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfSTE4Tl9QTFVHSU5fSF9fCi0jZGVmaW5lIF9fR1NUX0kxOE5fUExVR0lOX0hfXwotCi0jaWZuZGVmIEdFVFRFWFRfUEFDS0FHRQotI2Vycm9yIFlvdSBtdXN0IGRlZmluZSBHRVRURVhUX1BBQ0tBR0UgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGhlYWRlci4KLSNlbmRpZgotCi0jaWZkZWYgRU5BQkxFX05MUwotCi0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0KLSNpbmNsdWRlICJnZXR0ZXh0LmgiIC8qIGluY2x1ZGVkIHdpdGggZ2V0dGV4dCBkaXN0cmlidXRpb24gYW5kIGNvcGllZCAqLwotCi0vKiB3ZSB3YW50IHRvIHVzZSBzaG9ydGhhbmQgXygpIGZvciB0cmFuc2xhdGluZyBhbmQgTl8oKSBmb3IgbWFya2luZyAqLwotI2RlZmluZSBfKFN0cmluZykgZGdldHRleHQgKEdFVFRFWFRfUEFDS0FHRSwgU3RyaW5nKQotI2RlZmluZSBOXyhTdHJpbmcpIGdldHRleHRfbm9vcCAoU3RyaW5nKQotLyogRklYTUU6IGlmIHdlIG5lZWQgaXQsIHdlIGNhbiBhZGQgUV8gYXMgd2VsbCwgbGlrZSBpbiBnbGliICovCi0KLSNlbHNlCi0jZGVmaW5lIF8oU3RyaW5nKSBTdHJpbmcKLSNkZWZpbmUgTl8oU3RyaW5nKSBTdHJpbmcKLSNkZWZpbmUgbmdldHRleHQoU2luZ3VsYXIsUGx1cmFsLENvdW50KSAoKENvdW50PjEpP1BsdXJhbDpTaW5ndWxhcikKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0dTVF9JMThOX1BMVUdJTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC1wbHVnaW5zLWdvb2QuZG9hcCBiL2dzdC1wbHVnaW5zLWdvb2QuZG9hcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTIwZDhlYy4uMDAwMDAwMAotLS0gYS9nc3QtcGx1Z2lucy1nb29kLmRvYXAKKysrIC9kZXYvbnVsbApAQCAtMSw4MTYgKzAsMCBAQAotPFByb2plY3QKLSAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgotICB4bWxuczpyZGZzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjIgotICB4bWxucz0iaHR0cDovL3VzZWZ1bGluYy5jb20vbnMvZG9hcCMiCi0gIHhtbG5zOmZvYWY9Imh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvIgotICB4bWxuczphZG1pbj0iaHR0cDovL3dlYm5zLm5ldC9tdmNiLyI+Ci0KLSA8bmFtZT5HU3RyZWFtZXIgR29vZCBQbHVnLWluczwvbmFtZT4KLSA8c2hvcnRuYW1lPmdzdC1wbHVnaW5zLWdvb2Q8L3Nob3J0bmFtZT4KLSA8aG9tZXBhZ2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9tb2R1bGVzL2dzdC1wbHVnaW5zLWdvb2QuaHRtbCIgLz4KLSA8Y3JlYXRlZD4yMDA1LTA5LTA2PC9jcmVhdGVkPgotIDxzaG9ydGRlc2MgeG1sOmxhbmc9ImVuIj4KLWEgc2V0IG9mIGdvb2QtcXVhbGl0eSBwbHVnLWlucyB1bmRlciBvdXIgcHJlZmVycmVkIGxpY2Vuc2UsIExHUEwKLTwvc2hvcnRkZXNjPgotIDxkZXNjcmlwdGlvbiB4bWw6bGFuZz0iZW4iPgotR1N0cmVhbWVyIEdvb2QgUGx1Zy1pbnMgaXMgYSBzZXQgb2YgcGx1Zy1pbnMgdGhhdCB3ZSBjb25zaWRlciB0byBoYXZlIGdvb2QKLXF1YWxpdHkgY29kZSBhbmQgY29ycmVjdCBmdW5jdGlvbmFsaXR5LCB1bmRlciBvdXIgcHJlZmVycmVkIGxpY2Vuc2UgKExHUEwgZm9yCi10aGUgcGx1Zy1pbiBjb2RlLCBMR1BMIG9yIExHUEwtY29tcGF0aWJsZSBmb3IgdGhlIHN1cHBvcnRpbmcgbGlicmFyeSkuCi08L2Rlc2NyaXB0aW9uPgotIDxjYXRlZ29yeT48L2NhdGVnb3J5PgotIDxidWctZGF0YWJhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1HU3RyZWFtZXImYW1wO2NvbXBvbmVudD1nc3QtcGx1Z2lucy1nb29kIiAvPgotIDxzY3JlZW5zaG90cz48L3NjcmVlbnNob3RzPgotIDxtYWlsaW5nLWxpc3QgcmRmOnJlc291cmNlPSJodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZ3N0cmVhbWVyLWRldmVsIiAvPgotIDxwcm9ncmFtbWluZy1sYW5ndWFnZT5DPC9wcm9ncmFtbWluZy1sYW5ndWFnZT4KLSA8bGljZW5zZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly91c2VmdWxpbmMuY29tL2RvYXAvbGljZW5zZXMvbGdwbCIvPgotIDxkb3dubG9hZC1wYWdlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvIiAvPgotCi0gPHJlcG9zaXRvcnk+Ci0gICA8R2l0UmVwb3NpdG9yeT4KLSAgICAgPGxvY2F0aW9uIHJkZjpyZXNvdXJjZT0iZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QiLz4KLSAgICAgPGJyb3dzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtZ29vZCIvPgotICAgPC9HaXRSZXBvc2l0b3J5PgotIDwvcmVwb3NpdG9yeT4gCi0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC40PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xMDwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNy0wMi0yMzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuMTAuNC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC4zPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xMDwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNy0wMS0zMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuMTAuMy50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC4yPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xMDwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNi0xMS0yOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuMTAuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4xMDwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNi0xMS0xNzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuMTAuMS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xMC4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTExLTAxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS4xMC4wLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjkuOTA8L3JldmlzaW9uPgotICAgPGJyYW5jaD5tYXN0ZXI8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTYtMDktMzA8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjkuOTAudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuOS4yPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTA5LTAxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS45LjIudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuOS4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTA2LTA2PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS45LjEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuOC4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTAzLTI0PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS44LjAudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuNy45MTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPm1hc3RlcjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNi0wMy0xNTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNy45MS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS43LjkwPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+bWFzdGVyPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE2LTAzLTAxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS43LjkwLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjcuMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPm1hc3RlcjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNi0wMi0xOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNy4yLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjcuMTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPm1hc3RlcjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0xMi0yNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNy4xLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjYuMjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuNjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0xMi0xNDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNi4yLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjYuMTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuNjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0xMC0zMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNi4xLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjYuMDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuNjwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0wOS0yNTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNi4wLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjUuOTE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjU8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMDktMTg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjUuOTEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuNS45MDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuNTwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxNS0wOC0xOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuNS45MC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS41LjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjU8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMDYtMjQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjUuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS41LjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjU8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTUtMDYtMDc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjUuMS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS40LjA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjQ8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTQtMDctMTk8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjQuMC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4zLjkxPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4zPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE0LTA3LTExPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS4zLjkxLnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4xLjMuOTA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjM8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTQtMDYtMjg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjMuOTAudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMy4zPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4zPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE0LTA2LTIyPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS4zLjMudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMy4yPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4zPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE0LTA1LTIxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS4zLjIudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMy4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4zPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDE0LTA1LTAzPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS4zLjEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMi4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MS4yPC9icmFuY2g+Ci0gICA8bmFtZT48L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEzLTA5LTI0PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMS4yLjAudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjEuMS45MDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjEuMTwvYnJhbmNoPgotICAgPG5hbWU+PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMy0wOS0xOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTEuMS45MC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xLjQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjE8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTMtMDgtMjg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjEuNC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xLjM8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjE8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTMtMDctMjk8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjEuMy50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xLjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjE8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTMtMDctMTE8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjEuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4xLjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjE8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTMtMDYtMDU8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjEuMS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4wLjI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjA8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMTAtMjQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjAuMi50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4wLjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjA8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMTAtMDc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjAuMS50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MS4wLjA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4xLjA8L2JyYW5jaD4KLSAgIDxuYW1lPjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDktMjQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0xLjAuMC50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS45OTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPkJlZW4gQXJvdW5kIGZvciBhIExvbmcgTG9uZyBZZWFyPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0wOS0xNzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTEuOTkudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuOTQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjExPC9icmFuY2g+Ci0gICA8bmFtZT5CZWF0aWZ1bCBUYW5nbzwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDktMTQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjExLjk0LnRhci54eiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjExLjkzPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMTwvYnJhbmNoPgotICAgPG5hbWU+UG9ldGljIFBpdGJ1bGwgUmV2b2x1dGlvbnM8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEyLTA4LTA4PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMS45My50YXIueHoiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS45MjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTE8L2JyYW5jaD4KLSAgIDxuYW1lPk1vbmV5PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0wNi0wNzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTEuOTIudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuOTE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjExPC9icmFuY2g+Ci0gICA8bmFtZT5JIHNtZWxsIHRoZSBibG9vZCBvZiBhbiBFbmdsaXNobWFuPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0wNS0xMzwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTEuOTEudGFyLnh6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTEuOTA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjExPC9icmFuY2g+Ci0gICA8bmFtZT5Gcm9tIGdyaWVmIGFuZCBtb2FuIHRvIGEgZ29sZCB0aHJvbmU8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDEyLTA0LTEyPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMS45MC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMS45MC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS4yPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMTwvYnJhbmNoPgotICAgPG5hbWU+Uml0ZSBvZiBEZXZhc3RhdGlvbjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTItMDMtMjI8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjExLjIudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTEuMi50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMS4xPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMTwvYnJhbmNoPgotICAgPG5hbWU+VGhlIExlcGVyIEFmZmluaXR5PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMi0wMi0xNjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTEuMS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMS4xLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjMwPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+QWRhZ2lvPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wNi0xNTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMzAudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMzAudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjk8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5Tb2Z0IENoZWVzZSBFbnRodXNpYXN0PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wNS0xMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjkudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjkudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjg8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5JbmNvbnZlbmllbmNlZCBieSB0aGUgU29sYXIgU3lzdGVtPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMS0wMy0wODwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjgudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjgudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjc8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5Tb21lIEtpbmQgb2YgVGVtcG9yYWwgQmxlbmQ8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDExLTAxLTIxPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4yNy50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4yNy50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4yNjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPkVzY2FwYWRlczwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTAtMTItMDE8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjI2LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjI2LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjI1PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+V29lIHRvIFlvdSBPaCBFYXJ0aCBhbmQgU2VhPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMC0wOS0wMjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjUudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjUudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5UYWtpbmcgTGliZXJ0aWVzPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMC0wNy0xNTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjQudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjQudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjM8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5TdHlsaXNoIEtpZHMgaW4gUmlvdDwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTAtMDUtMzA8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjIzLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjIzLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjIyPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+U3F1YXJlIE9uZTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTAtMDQtMjc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjIyLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjIyLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjIxPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+TGVtb25zPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMC0wMy0wODwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjEudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMjEudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMjA8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5MZW1vbmFkZTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMTAtMDMtMDg8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjIwLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjIwLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjE5PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+Q2xvc2VyIHRvIHRoZSBFZGl0PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMC0wMy0wNjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTkudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTkudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTg8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5TaG9ydCBDaXJjdWl0PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAxMC0wMi0xMDwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTgudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTgudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTc8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5UaGV5IHVzZWQgdG8gc3BhcmtsZTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDktMTEtMTc8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjE3LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjE3LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjE2PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+U2VjcmV0IEhhbmRzaGFrZXM8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA5LTA4LTI4PC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4xNi50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4xNi50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4xNTwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPkkndmUgYmVlbiB1cCBhbGwgbmlnaHQ8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA5LTA1LTIwPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4xNS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4xNS50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4xNDwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPkRpc2FmZmVjdGVkIEFmZmVjdGF0aW9uPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwOS0wMi0xOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTQudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTQudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTM8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5CbGF0YW50IERpc2NvdXJhZ2VtZW50PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwOS0wMS0yMjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTMudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTMudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTI8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5UYWtlbiBVbmRlciBBZHZpc2VtZW50PC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwOS0wMS0yMjwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTIudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMTIudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuMTE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5TZWNvbmRhcnkgQ29uc2lkZXJhdGlvbjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDgtMTAtMjQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjExLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjExLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjEwPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+QmFyZWx5IE1vdmluZzwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDgtMDgtMjY8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjEwLnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjEwLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjk8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5TdGVhbSBUcmFpbiBSb2xsaW5nPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwOC0wNy0zMTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuOS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC45LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjg8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5PbmUgRm9yIFRoZSBNb25leTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDgtMDQtMjQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjgudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuOC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC43PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+UmVkIERvb3IgQmxhY2s8L25hbWU+Ci0gICA8Y3JlYXRlZD4yMDA4LTAxLTIwPC9jcmVhdGVkPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC43LnRhci5iejIiIC8+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjcudGFyLmd6IiAvPgotICA8L1ZlcnNpb24+Ci0gPC9yZWxlYXNlPgotCi0gPHJlbGVhc2U+Ci0gIDxWZXJzaW9uPgotICAgPHJldmlzaW9uPjAuMTAuNjwvcmV2aXNpb24+Ci0gICA8YnJhbmNoPjAuMTA8L2JyYW5jaD4KLSAgIDxuYW1lPldvYmJsZSBCb2FyZDwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDctMDYtMTk8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjYudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuNi50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC41PC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+VGhlIFBhdGggb2YgVGhvcm5zPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0xMi0yMTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuNS50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC41LnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjQ8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5EZWFyIExlYWRlcjwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDYtMDgtMTQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjQudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuNC50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4zPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+RGVzcGxhemFkbzwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDYtMDUtMDQ8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjMudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMy50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4yPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+UGFwYSB3YXMgYSByb2xsaW5nIHN0b25lPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNi0wMi0wOTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMi50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4yLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxyZWxlYXNlPgotICA8VmVyc2lvbj4KLSAgIDxyZXZpc2lvbj4wLjEwLjE8L3JldmlzaW9uPgotICAgPGJyYW5jaD4wLjEwPC9icmFuY2g+Ci0gICA8bmFtZT5MaTwvbmFtZT4KLSAgIDxjcmVhdGVkPjIwMDYtMDEtMTM8L2NyZWF0ZWQ+Ci0gICA8ZmlsZS1yZWxlYXNlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL2dzdC1wbHVnaW5zLWdvb2QvZ3N0LXBsdWdpbnMtZ29vZC0wLjEwLjEudGFyLmJ6MiIgLz4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMS50YXIuZ3oiIC8+Ci0gIDwvVmVyc2lvbj4KLSA8L3JlbGVhc2U+Ci0KLSA8cmVsZWFzZT4KLSAgPFZlcnNpb24+Ci0gICA8cmV2aXNpb24+MC4xMC4wPC9yZXZpc2lvbj4KLSAgIDxicmFuY2g+MC4xMDwvYnJhbmNoPgotICAgPG5hbWU+QWJvbmRhbmNlPC9uYW1lPgotICAgPGNyZWF0ZWQ+MjAwNS0xMi0wNTwvY3JlYXRlZD4KLSAgIDxmaWxlLXJlbGVhc2UgcmRmOnJlc291cmNlPSJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLTAuMTAuMC50YXIuYnoyIiAvPgotICAgPGZpbGUtcmVsZWFzZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtMC4xMC4wLnRhci5neiIgLz4KLSAgPC9WZXJzaW9uPgotIDwvcmVsZWFzZT4KLQotIDxtYWludGFpbmVyPgotICA8Zm9hZjpQZXJzb24+Ci0gICAgIDxmb2FmOm5hbWU+V2ltIFRheW1hbnM8L2ZvYWY6bmFtZT4KLSAgICAgPGZvYWY6bWJveF9zaGExc3VtPjBkOTNmZGUwNTI4MTJkNTFhMDVmZDg2ZGU5YmRiZjY3NDQyM2RhYTI8L2ZvYWY6bWJveF9zaGExc3VtPgotICA8L2ZvYWY6UGVyc29uPgotIDwvbWFpbnRhaW5lcj4KLQotPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZ3N0LXBsdWdpbnMtZ29vZC5zcGVjIGIvZ3N0LXBsdWdpbnMtZ29vZC5zcGVjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDgzZDMzLi4wMDAwMDAwCi0tLSBhL2dzdC1wbHVnaW5zLWdvb2Quc3BlYworKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0lZGVmaW5lIG1ham9ybWlub3IgIDEuMAotJWRlZmluZSBnc3RyZWFtZXIgICBnc3RyZWFtZXIxCi0KLSVkZWZpbmUgZ3N0X21pbnZlciAgIDAuMTEuMAotCi1OYW1lOiAJCSV7Z3N0cmVhbWVyfS1wbHVnaW5zLWdvb2QKLVZlcnNpb246IAkxLjEwLjQKLVJlbGVhc2U6IAkxLmdzdAotU3VtbWFyeTogCUdTdHJlYW1lciBwbHVnLWlucyB3aXRoIGdvb2QgY29kZSBhbmQgbGljZW5zaW5nCi0KLUdyb3VwOiAJCUFwcGxpY2F0aW9ucy9NdWx0aW1lZGlhCi1MaWNlbnNlOiAJTEdQTAotVVJMOgkJaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvCi1WZW5kb3I6ICAgICAgICAgR1N0cmVhbWVyIEJhY2twYWNrZXJzIFRlYW0gPHBhY2thZ2VAZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZz4KLVNvdXJjZTogICAgICAgICBodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LXBsdWdpbnMtZ29vZC9nc3QtcGx1Z2lucy1nb29kLSV7dmVyc2lvbn0udGFyLnh6Ci1CdWlsZFJvb3Q6ICAgICAgJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKLQotUmVxdWlyZXM6IAkgICV7Z3N0cmVhbWVyfSA+PSAle2dzdF9taW52ZXJ9Ci1CdWlsZFJlcXVpcmVzOiAJICAle2dzdHJlYW1lcn0tZGV2ZWwgPj0gJXtnc3RfbWludmVyfQotCi1CdWlsZFJlcXVpcmVzOiAgZ2NjLWMrKwotCi1CdWlsZFJlcXVpcmVzOiBmbGFjLWRldmVsID49IDEuMC4zCi1CdWlsZFJlcXVpcmVzOiBsaWJqcGVnLWRldmVsCi1CdWlsZFJlcXVpcmVzOiBsaWJjYWNhLWRldmVsCi1CdWlsZFJlcXVpcmVzOiBsaWJkdi1kZXZlbAotQnVpbGRSZXF1aXJlczogbGlicG5nLWRldmVsID49IDEuMi4wCi1CdWlsZFJlcXVpcmVzOiBnbGliYy1kZXZlbAotQnVpbGRSZXF1aXJlczoJc3BlZXgtZGV2ZWwKLUJ1aWxkUmVxdWlyZXM6IGxpYnNob3V0LWRldmVsID49IDIuMAotQnVpbGRSZXF1aXJlczogIGFhbGliLWRldmVsID49IDEuMwotUHJvdmlkZXM6ICAgICAgIGdzdHJlYW1lci1hYXNpbmsgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KLUJ1aWxkUmVxdWlyZXM6IHB1bHNlYXVkaW8tbGlicy1kZXZlbAotQnVpbGRSZXF1aXJlczogbGliYXZjMTM5NC1kZXZlbAotQnVpbGRSZXF1aXJlczogbGliZGMxMzk0LWRldmVsCi1CdWlsZFJlcXVpcmVzOiBsaWJpZWM2MTg4My1kZXZlbCAgCi1CdWlsZFJlcXVpcmVzOiBsaWJyYXcxMzk0LWRldmVsCi0KLSVkZXNjcmlwdGlvbgotR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgYmFzZWQgb24gZ3JhcGhzIG9mIGZpbHRlcnMgd2hpY2gKLW9wZXJhdGUgb24gbWVkaWEgZGF0YS4gQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgbGlicmFyeSBjYW4gZG8gYW55dGhpbmcKLWZyb20gcmVhbC10aW1lIHNvdW5kIHByb2Nlc3NpbmcgdG8gcGxheWluZyB2aWRlb3MsIGFuZCBqdXN0IGFib3V0IGFueXRoaW5nCi1lbHNlIG1lZGlhLXJlbGF0ZWQuICBJdHMgcGx1Z2luLWJhc2VkIGFyY2hpdGVjdHVyZSBtZWFucyB0aGF0IG5ldyBkYXRhCi10eXBlcyBvciBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcyBjYW4gYmUgYWRkZWQgc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3Ci1wbHVnLWlucy4KLQotJXByZXAKLSVzZXR1cCAtcSAtbiBnc3QtcGx1Z2lucy1nb29kLSV7dmVyc2lvbn0KLSVidWlsZAotJWNvbmZpZ3VyZSBcCi0gIC0tZW5hYmxlLWRlYnVnIFwKLSAgLS1lbmFibGUtREVCVUcgCi0KLW1ha2UgJXs/X3NtcF9tZmxhZ3N9IENGTEFHUys9Ii1Xbm8tZXJyb3IiIENYWEZMQUdTKz0iLVduby1lcnJvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0laW5zdGFsbAotcm0gLXJmICRSUE1fQlVJTERfUk9PVAotCi0lbWFrZWluc3RhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0jIENsZWFuIG91dCBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGUgcnBtLgotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS8qLmxhCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9LyouYQotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8qLmEKLXJtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5sYQotCi0lZmluZF9sYW5nIGdzdC1wbHVnaW5zLWdvb2QtJXttYWpvcm1pbm9yfQotCi0lY2xlYW4KLXJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKLQotJXBvc3QKLQotJWZpbGVzIC1mIGdzdC1wbHVnaW5zLWdvb2QtJXttYWpvcm1pbm9yfS5sYW5nCi0lZGVmYXR0cigtLCByb290LCByb290KQotJWRvYyBBVVRIT1JTIENPUFlJTkcgUkVBRE1FIFJFUVVJUkVNRU5UUyBnc3QtcGx1Z2lucy1nb29kLmRvYXAKLSV7X2RhdGFkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L3ByZXNldHMvR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnMKLSV7X2RhdGFkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L3ByZXNldHMvR3N0SWlyRXF1YWxpemVyM0JhbmRzLnBycwotJXtfZGF0YWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vcHJlc2V0cy9Hc3RWUDhFbmMucHJzCi0KLSV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtJXttYWpvcm1pbm9yfS8qCi0KLSMgbm9uLWNvcmUgcGx1Z2lucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RhbGF3LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGFscGhhLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGF1dG9kZXRlY3Quc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YXZpLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGVmZmVjdHYuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Z29vbS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RsZXZlbC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RtdWxhdy5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rpc29tcDQuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cnRwLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHJ0cG1hbmFnZXIuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cnRzcC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RzbXB0ZS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3R1ZHAuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0dmlkZW9ib3guc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0d2F2ZW5jLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHdhdnBhcnNlLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGF1cGFyc2Uuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0ZGVidWcuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0bmF2aWdhdGlvbnRlc3Quc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YWxwaGFjb2xvci5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RjYWlyby5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RmbHhkZWMuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0bWF0cm9za2Euc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0dmlkZW9taXhlci5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RjdXR0ZXIuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0bXVsdGlwYXJ0LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGlkM2RlbXV4LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGdka3BpeGJ1Zi5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RhcGV0YWcuc28KLSMgJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rhbm5vZGV4LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHZpZGVvY3JvcC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RpY3lkZW11eC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3R0YWdsaWIuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0eGltYWdlc3JjLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGF1ZGlvZnguc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0ZXF1YWxpemVyLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdG11bHRpZmlsZS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RzcGVjdHJ1bS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rnb29tMmsxLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGludGVybGVhdmUuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cmVwbGF5Z2Fpbi5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RkZWludGVybGFjZS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RmbHYuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0eTRtZW5jLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdG9zczRhdWRpby5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RpbWFnZWZyZWV6ZS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RzaGFwZXdpcGUuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0dmlkZW9maWx0ZXIuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YXVkaW9wYXJzZXJzLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGR0bWYuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0dmlkZW80bGludXgyLnNvCi0KLSMgZ3N0cmVhbWVyLXBsdWdpbnMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMgYnV0IGluIHRoZSBtYWluIHBhY2thZ2UKLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Y2FjYXNpbmsuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0ZmxhYy5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RqYWNrLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGpwZWcuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cG5nLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdG9zc2F1ZGlvLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHNwZWV4LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHNob3V0Mi5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RhYXNpbmsuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0ZHYuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0MTM5NC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3R3YXZwYWNrLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHNvdXBodHRwc3JjLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHB1bHNlLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHZweC5zbwotCi0KLSVjaGFuZ2Vsb2cKLSogVHVlIEp1biAxMiAyMDA3IEphbiBTY2htaWR0IDxqYW4gYXQgZmx1ZW5kbyBkb3QgY29tPgotLSB3YXZwYWNrIGFuZCBxdGRlbXV4IGhhdmUgbW92ZWQgZnJvbSBiYWQKLQotKiBGcmkgU2VwIDAyIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBjbGVhbiB1cCBmb3Igc3BsaXR1cApkaWZmIC0tZ2l0IGEvZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluIGIvZ3N0LXBsdWdpbnMtZ29vZC5zcGVjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDI0MGZjLi4wMDAwMDAwCi0tLSBhL2dzdC1wbHVnaW5zLWdvb2Quc3BlYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0lZGVmaW5lIG1ham9ybWlub3IgIEBHU1RfQVBJX1ZFUlNJT05ACi0lZGVmaW5lIGdzdHJlYW1lciAgIGdzdHJlYW1lcjEKLQotJWRlZmluZSBnc3RfbWludmVyICAgMC4xMS4wCi0KLU5hbWU6IAkJJXtnc3RyZWFtZXJ9LXBsdWdpbnMtZ29vZAotVmVyc2lvbjogCUBWRVJTSU9OQAotUmVsZWFzZTogCUBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAuZ3N0Ci1TdW1tYXJ5OiAJR1N0cmVhbWVyIHBsdWctaW5zIHdpdGggZ29vZCBjb2RlIGFuZCBsaWNlbnNpbmcKLQotR3JvdXA6IAkJQXBwbGljYXRpb25zL011bHRpbWVkaWEKLUxpY2Vuc2U6IAlMR1BMCi1VUkw6CQlodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8KLVZlbmRvcjogICAgICAgICBHU3RyZWFtZXIgQmFja3BhY2tlcnMgVGVhbSA8cGFja2FnZUBnc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnPgotU291cmNlOiAgICAgICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtcGx1Z2lucy1nb29kL2dzdC1wbHVnaW5zLWdvb2QtJXt2ZXJzaW9ufS50YXIueHoKLUJ1aWxkUm9vdDogICAgICAle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQotCi1SZXF1aXJlczogCSAgJXtnc3RyZWFtZXJ9ID49ICV7Z3N0X21pbnZlcn0KLUJ1aWxkUmVxdWlyZXM6IAkgICV7Z3N0cmVhbWVyfS1kZXZlbCA+PSAle2dzdF9taW52ZXJ9Ci0KLUJ1aWxkUmVxdWlyZXM6ICBnY2MtYysrCi0KLUBVU0VfRkxBQ19UUlVFQEJ1aWxkUmVxdWlyZXM6IGZsYWMtZGV2ZWwgPj0gMS4wLjMKLUBVU0VfSlBFR19UUlVFQEJ1aWxkUmVxdWlyZXM6IGxpYmpwZWctZGV2ZWwKLUBVU0VfTElCQ0FDQV9UUlVFQEJ1aWxkUmVxdWlyZXM6IGxpYmNhY2EtZGV2ZWwKLUBVU0VfTElCRFZfVFJVRUBCdWlsZFJlcXVpcmVzOiBsaWJkdi1kZXZlbAotQFVTRV9MSUJQTkdfVFJVRUBCdWlsZFJlcXVpcmVzOiBsaWJwbmctZGV2ZWwgPj0gMS4yLjAKLUBVU0VfT1NTX1RSVUVAQnVpbGRSZXF1aXJlczogZ2xpYmMtZGV2ZWwKLUBVU0VfU1BFRVhfVFJVRUBCdWlsZFJlcXVpcmVzOglzcGVleC1kZXZlbAotQFVTRV9TSE9VVDJfVFJVRUBCdWlsZFJlcXVpcmVzOiBsaWJzaG91dC1kZXZlbCA+PSAyLjAKLUBVU0VfQUFMSUJfVFJVRUBCdWlsZFJlcXVpcmVzOiAgYWFsaWItZGV2ZWwgPj0gMS4zCi1AVVNFX0FBTElCX1RSVUVAUHJvdmlkZXM6ICAgICAgIGdzdHJlYW1lci1hYXNpbmsgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KLUBVU0VfUFVMU0VfVFJVRUBCdWlsZFJlcXVpcmVzOiBwdWxzZWF1ZGlvLWxpYnMtZGV2ZWwKLUBVU0VfRFYxMzk0X1RSVUVAQnVpbGRSZXF1aXJlczogbGliYXZjMTM5NC1kZXZlbAotQFVTRV9EVjEzOTRfVFJVRUBCdWlsZFJlcXVpcmVzOiBsaWJkYzEzOTQtZGV2ZWwKLUBVU0VfRFYxMzk0X1RSVUVAQnVpbGRSZXF1aXJlczogbGliaWVjNjE4ODMtZGV2ZWwgIAotQFVTRV9EVjEzOTRfVFJVRUBCdWlsZFJlcXVpcmVzOiBsaWJyYXcxMzk0LWRldmVsCi0KLSVkZXNjcmlwdGlvbgotR1N0cmVhbWVyIGlzIGEgc3RyZWFtaW5nIG1lZGlhIGZyYW1ld29yaywgYmFzZWQgb24gZ3JhcGhzIG9mIGZpbHRlcnMgd2hpY2gKLW9wZXJhdGUgb24gbWVkaWEgZGF0YS4gQXBwbGljYXRpb25zIHVzaW5nIHRoaXMgbGlicmFyeSBjYW4gZG8gYW55dGhpbmcKLWZyb20gcmVhbC10aW1lIHNvdW5kIHByb2Nlc3NpbmcgdG8gcGxheWluZyB2aWRlb3MsIGFuZCBqdXN0IGFib3V0IGFueXRoaW5nCi1lbHNlIG1lZGlhLXJlbGF0ZWQuICBJdHMgcGx1Z2luLWJhc2VkIGFyY2hpdGVjdHVyZSBtZWFucyB0aGF0IG5ldyBkYXRhCi10eXBlcyBvciBwcm9jZXNzaW5nIGNhcGFiaWxpdGllcyBjYW4gYmUgYWRkZWQgc2ltcGx5IGJ5IGluc3RhbGxpbmcgbmV3Ci1wbHVnLWlucy4KLQotJXByZXAKLSVzZXR1cCAtcSAtbiBnc3QtcGx1Z2lucy1nb29kLSV7dmVyc2lvbn0KLSVidWlsZAotJWNvbmZpZ3VyZSBcCi0gIC0tZW5hYmxlLWRlYnVnIFwKLSAgLS1lbmFibGUtREVCVUcgCi0KLW1ha2UgJXs/X3NtcF9tZmxhZ3N9IENGTEFHUys9Ii1Xbm8tZXJyb3IiIENYWEZMQUdTKz0iLVduby1lcnJvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0laW5zdGFsbAotcm0gLXJmICRSUE1fQlVJTERfUk9PVAotCi0lbWFrZWluc3RhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0jIENsZWFuIG91dCBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgcGFydCBvZiB0aGUgcnBtLgotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS8qLmxhCi1ybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9LyouYQotcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8qLmEKLXJtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5sYQotCi0lZmluZF9sYW5nIGdzdC1wbHVnaW5zLWdvb2QtJXttYWpvcm1pbm9yfQotCi0lY2xlYW4KLXJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKLQotJXBvc3QKLQotJWZpbGVzIC1mIGdzdC1wbHVnaW5zLWdvb2QtJXttYWpvcm1pbm9yfS5sYW5nCi0lZGVmYXR0cigtLCByb290LCByb290KQotJWRvYyBBVVRIT1JTIENPUFlJTkcgUkVBRE1FIFJFUVVJUkVNRU5UUyBnc3QtcGx1Z2lucy1nb29kLmRvYXAKLSV7X2RhdGFkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L3ByZXNldHMvR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnMKLSV7X2RhdGFkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L3ByZXNldHMvR3N0SWlyRXF1YWxpemVyM0JhbmRzLnBycwotJXtfZGF0YWRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vcHJlc2V0cy9Hc3RWUDhFbmMucHJzCi0KLSV7X2RhdGFkaXJ9L2d0ay1kb2MvaHRtbC9nc3QtcGx1Z2lucy1nb29kLXBsdWdpbnMtJXttYWpvcm1pbm9yfS8qCi0KLSMgbm9uLWNvcmUgcGx1Z2lucyB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RhbGF3LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGFscGhhLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGF1dG9kZXRlY3Quc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YXZpLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGVmZmVjdHYuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Z29vbS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RsZXZlbC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RtdWxhdy5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rpc29tcDQuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cnRwLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHJ0cG1hbmFnZXIuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cnRzcC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RzbXB0ZS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3R1ZHAuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0dmlkZW9ib3guc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0d2F2ZW5jLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHdhdnBhcnNlLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGF1cGFyc2Uuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0ZGVidWcuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0bmF2aWdhdGlvbnRlc3Quc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YWxwaGFjb2xvci5zbwotQFVTRV9DQUlST19UUlVFQCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Y2Fpcm8uc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Zmx4ZGVjLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdG1hdHJvc2thLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHZpZGVvbWl4ZXIuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Y3V0dGVyLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdG11bHRpcGFydC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RpZDNkZW11eC5zbwotQFVTRV9HREtfUElYQlVGX1RSVUVAJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RnZGtwaXhidWYuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YXBldGFnLnNvCi0jICV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0YW5ub2RleC5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3R2aWRlb2Nyb3Auc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0aWN5ZGVtdXguc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0dGFnbGliLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHhpbWFnZXNyYy5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RhdWRpb2Z4LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGVxdWFsaXplci5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RtdWx0aWZpbGUuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0c3BlY3RydW0uc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Z29vbTJrMS5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RpbnRlcmxlYXZlLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHJlcGxheWdhaW4uc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0ZGVpbnRlcmxhY2Uuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0Zmx2LnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHk0bWVuYy5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3Rvc3M0YXVkaW8uc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0aW1hZ2VmcmVlemUuc28KLSV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0c2hhcGV3aXBlLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHZpZGVvZmlsdGVyLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGF1ZGlvcGFyc2Vycy5zbwotJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RkdG1mLnNvCi0le19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHZpZGVvNGxpbnV4Mi5zbwotCi0jIGdzdHJlYW1lci1wbHVnaW5zIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGJ1dCBpbiB0aGUgbWFpbiBwYWNrYWdlCi1AVVNFX0xJQkNBQ0FfVFJVRUAle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGNhY2FzaW5rLnNvCi1AVVNFX0ZMQUNfVFJVRUAle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGZsYWMuc28KLUBVU0VfSkFDS19UUlVFQCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0amFjay5zbwotQFVTRV9KUEVHX1RSVUVAJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RqcGVnLnNvCi1AVVNFX0xJQlBOR19UUlVFQCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0cG5nLnNvCi1AVVNFX09TU19UUlVFQCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0b3NzYXVkaW8uc28KLUBVU0VfU1BFRVhfVFJVRUAle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHNwZWV4LnNvCi1AVVNFX1NIT1VUMl9UUlVFQCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0c2hvdXQyLnNvCi1AVVNFX0FBTElCX1RSVUVAJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RhYXNpbmsuc28KLUBVU0VfTElCRFZfVFJVRUAle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdGR2LnNvCi1AVVNFX0RWMTM5NF9UUlVFQCV7X2xpYmRpcn0vZ3N0cmVhbWVyLSV7bWFqb3JtaW5vcn0vbGliZ3N0MTM5NC5zbwotQFVTRV9XQVZQQUNLX1RSVUVAJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3R3YXZwYWNrLnNvCi1AVVNFX1NPVVBfVFJVRUAle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHNvdXBodHRwc3JjLnNvCi1AVVNFX1BVTFNFX1RSVUVAJXtfbGliZGlyfS9nc3RyZWFtZXItJXttYWpvcm1pbm9yfS9saWJnc3RwdWxzZS5zbwotQFVTRV9WUFhfVFJVRUAle19saWJkaXJ9L2dzdHJlYW1lci0le21ham9ybWlub3J9L2xpYmdzdHZweC5zbwotCi0KLSVjaGFuZ2Vsb2cKLSogVHVlIEp1biAxMiAyMDA3IEphbiBTY2htaWR0IDxqYW4gYXQgZmx1ZW5kbyBkb3QgY29tPgotLSB3YXZwYWNrIGFuZCBxdGRlbXV4IGhhdmUgbW92ZWQgZnJvbSBiYWQKLQotKiBGcmkgU2VwIDAyIDIwMDUgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotLSBjbGVhbiB1cCBmb3Igc3BsaXR1cApkaWZmIC0tZ2l0IGEvZ3N0L01ha2VmaWxlLmFtIGIvZ3N0L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVhNTZkLi4wMDAwMDAwCi0tLSBhL2dzdC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotU1VCRElSUyA9ICQoR1NUX1BMVUdJTlNfU0VMRUNURUQpCi1ESVNUX1NVQkRJUlMgPSAkKEdTVF9QTFVHSU5TX0FMTCkKLQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hawpkaWZmIC0tZ2l0IGEvZ3N0L01ha2VmaWxlLmluIGIvZ3N0L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGU0MmYyLi4wMDAwMDAwCi0tLSBhL2dzdC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg3OCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotIyBpbmNsdWRlIHRoaXMgYXQgdGhlIGVuZCBvZiAkTU9EVUxFL2V4dC9NYWtlZmlsZS5hbSB0byBmb3JjZSBtYWtlIHRvCi0jIGJ1aWxkIHN1YmRpcmVjdG9yaWVzIGluIHBhcmFsbGVsIHdoZW4gbWFrZSAtak4gaXMgdXNlZC4gV2Ugd2lsbCBlbmQgdXAKLSMgZGVzY2VuZGluZyBpbnRvIGFsbCBzdWJkaXJlY3RvcmllcyBhIHNlY29uZCB0aW1lLCBidXQgb25seSBhZnRlciB0aGUgZmlyc3QKLSMgKHBhcmFsbGVsKSBydW4gaGFzIGZpbmlzaGVkLCBzbyBpdCBzaG91bGQgZ28gcmlnaHQgdGhyb3VnaCB0aGUgc2Vjb25kIHRpbWUuCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCi0JY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAotCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKLQlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1SRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAotICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi1hbV9fcmVjdXJzaXZlX3RhcmdldHMgPSBcCi0gICQoUkVDVVJTSVZFX1RBUkdFVFMpIFwKLSAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgXAotICAkKGFtX19leHRyYV9yZWN1cnNpdmVfdGFyZ2V0cykKLUFNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChhbV9fcmVjdXJzaXZlX3RhcmdldHM6LXJlY3Vyc2l2ZT0pIFRBR1MgQ1RBR1MgXAotCWRpc3RkaXIKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hawotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1TVUJESVJTID0gJChHU1RfUExVR0lOU19TRUxFQ1RFRCkKLURJU1RfU1VCRElSUyA9ICQoR1NUX1BMVUdJTlNfQUxMKQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0uUEhPTlk6IGluZGVwZW5kZW50LXN1YmRpcnMgJChTVUJESVJTKQotCi1pbmRlcGVuZGVudC1zdWJkaXJzOiAkKFNVQkRJUlMpCi0KLSQoU1VCRElSUyk6Ci0JJChNQUtFKSAtQyAkQAotCi1hbGwtcmVjdXJzaXZlOiBpbmRlcGVuZGVudC1zdWJkaXJzCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9hbHBoYS9NYWtlZmlsZS5hbSBiL2dzdC9hbHBoYS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJhZGZmZS4uMDAwMDAwMAotLS0gYS9nc3QvYWxwaGEvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RhbHBoYS5sYSBsaWJnc3RhbHBoYWNvbG9yLmxhCi0KLWxpYmdzdGFscGhhX2xhX1NPVVJDRVMgPSBnc3RhbHBoYS5jCi1saWJnc3RhbHBoYV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGFscGhhX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKExJQk0pCi1saWJnc3RhbHBoYV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhbHBoYV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1saWJnc3RhbHBoYWNvbG9yX2xhX1NPVVJDRVMgPSBnc3RhbHBoYWNvbG9yLmMKLWxpYmdzdGFscGhhY29sb3JfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RhbHBoYWNvbG9yX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotbGliZ3N0YWxwaGFjb2xvcl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhbHBoYWNvbG9yX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0YWxwaGEuaCBnc3RhbHBoYWNvbG9yLmgKZGlmZiAtLWdpdCBhL2dzdC9hbHBoYS9NYWtlZmlsZS5pbiBiL2dzdC9hbHBoYS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJjNjNkYy4uMDAwMDAwMAotLS0gYS9nc3QvYWxwaGEvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NDMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2FscGhhCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0YWxwaGFfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGFscGhhX2xhX09CSkVDVFMgPSBsaWJnc3RhbHBoYV9sYS1nc3RhbHBoYS5sbwotbGliZ3N0YWxwaGFfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0YWxwaGFfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGFscGhhX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0YWxwaGFfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RhbHBoYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RhbHBoYV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1saWJnc3RhbHBoYWNvbG9yX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0YWxwaGFjb2xvcl9sYV9PQkpFQ1RTID0gbGliZ3N0YWxwaGFjb2xvcl9sYS1nc3RhbHBoYWNvbG9yLmxvCi1saWJnc3RhbHBoYWNvbG9yX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGFscGhhY29sb3JfbGFfT0JKRUNUUykKLWxpYmdzdGFscGhhY29sb3JfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RhbHBoYWNvbG9yX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0YWxwaGFjb2xvcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RhbHBoYWNvbG9yX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGFscGhhX2xhX1NPVVJDRVMpICQobGliZ3N0YWxwaGFjb2xvcl9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RhbHBoYV9sYV9TT1VSQ0VTKSBcCi0JJChsaWJnc3RhbHBoYWNvbG9yX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGFscGhhLmxhIGxpYmdzdGFscGhhY29sb3IubGEKLWxpYmdzdGFscGhhX2xhX1NPVVJDRVMgPSBnc3RhbHBoYS5jCi1saWJnc3RhbHBoYV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLQotbGliZ3N0YWxwaGFfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoTElCTSkKLQotbGliZ3N0YWxwaGFfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YWxwaGFfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWxpYmdzdGFscGhhY29sb3JfbGFfU09VUkNFUyA9IGdzdGFscGhhY29sb3IuYwotbGliZ3N0YWxwaGFjb2xvcl9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLQotbGliZ3N0YWxwaGFjb2xvcl9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLQotbGliZ3N0YWxwaGFjb2xvcl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhbHBoYWNvbG9yX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGFscGhhLmggZ3N0YWxwaGFjb2xvci5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvYWxwaGEvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2FscGhhL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0YWxwaGEubGE6ICQobGliZ3N0YWxwaGFfbGFfT0JKRUNUUykgJChsaWJnc3RhbHBoYV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0YWxwaGFfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGFscGhhX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RhbHBoYV9sYV9PQkpFQ1RTKSAkKGxpYmdzdGFscGhhX2xhX0xJQkFERCkgJChMSUJTKQotCi1saWJnc3RhbHBoYWNvbG9yLmxhOiAkKGxpYmdzdGFscGhhY29sb3JfbGFfT0JKRUNUUykgJChsaWJnc3RhbHBoYWNvbG9yX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RhbHBoYWNvbG9yX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RhbHBoYWNvbG9yX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RhbHBoYWNvbG9yX2xhX09CSkVDVFMpICQobGliZ3N0YWxwaGFjb2xvcl9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGFscGhhX2xhLWdzdGFscGhhLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YWxwaGFjb2xvcl9sYS1nc3RhbHBoYWNvbG9yLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RhbHBoYV9sYS1nc3RhbHBoYS5sbzogZ3N0YWxwaGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGFscGhhX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGFscGhhX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhbHBoYV9sYS1nc3RhbHBoYS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YWxwaGFfbGEtZ3N0YWxwaGEuVHBvIC1jIC1vIGxpYmdzdGFscGhhX2xhLWdzdGFscGhhLmxvIGB0ZXN0IC1mICdnc3RhbHBoYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhbHBoYS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhbHBoYV9sYS1nc3RhbHBoYS5UcG8gJChERVBESVIpL2xpYmdzdGFscGhhX2xhLWdzdGFscGhhLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFscGhhLmMnIG9iamVjdD0nbGliZ3N0YWxwaGFfbGEtZ3N0YWxwaGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhbHBoYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhbHBoYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhbHBoYV9sYS1nc3RhbHBoYS5sbyBgdGVzdCAtZiAnZ3N0YWxwaGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWxwaGEuYwotCi1saWJnc3RhbHBoYWNvbG9yX2xhLWdzdGFscGhhY29sb3IubG86IGdzdGFscGhhY29sb3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGFscGhhY29sb3JfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YWxwaGFjb2xvcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YWxwaGFjb2xvcl9sYS1nc3RhbHBoYWNvbG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhbHBoYWNvbG9yX2xhLWdzdGFscGhhY29sb3IuVHBvIC1jIC1vIGxpYmdzdGFscGhhY29sb3JfbGEtZ3N0YWxwaGFjb2xvci5sbyBgdGVzdCAtZiAnZ3N0YWxwaGFjb2xvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhbHBoYWNvbG9yLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGFscGhhY29sb3JfbGEtZ3N0YWxwaGFjb2xvci5UcG8gJChERVBESVIpL2xpYmdzdGFscGhhY29sb3JfbGEtZ3N0YWxwaGFjb2xvci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RhbHBoYWNvbG9yLmMnIG9iamVjdD0nbGliZ3N0YWxwaGFjb2xvcl9sYS1nc3RhbHBoYWNvbG9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YWxwaGFjb2xvcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhbHBoYWNvbG9yX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGFscGhhY29sb3JfbGEtZ3N0YWxwaGFjb2xvci5sbyBgdGVzdCAtZiAnZ3N0YWxwaGFjb2xvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhbHBoYWNvbG9yLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2FscGhhL2dzdGFscGhhLmMgYi9nc3QvYWxwaGEvZ3N0YWxwaGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhZDk4MS4uMDAwMDAwMAotLS0gYS9nc3QvYWxwaGEvZ3N0YWxwaGEuYworKysgL2Rldi9udWxsCkBAIC0xLDI2MTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWFscGhhCi0gKiAKLSAqIFRoZSBhbHBoYSBlbGVtZW50IGFkZHMgYW4gYWxwaGEgY2hhbm5lbCB0byBhIHZpZGVvIHN0cmVhbS4gVGhlIHZhbHVlcwotICogb2YgdGhlIGFscGhhIGNoYW5uZWwgY2FuIGJlIGVpdGhlciBiZSBzZXQgdG8gYSBjb25zdGFudCBvciBjYW4gYmUKLSAqIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgdmlhIGNocm9tYSBrZXlpbmcsIGUuZy4gYmx1ZSBjYW4gYmUgc2V0IGFzCi0gKiB0aGUgdHJhbnNwYXJlbnQgY29sb3IuCi0gKgotICogU2FtcGxlIHBpcGVsaW5lOgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBwYXR0ZXJuPXNub3cgISBtaXhlci5zaW5rXzAgXAotICogICB2aWRlb3Rlc3RzcmMgcGF0dGVybj1zbXB0ZTc1ICEgYWxwaGEgbWV0aG9kPWdyZWVuICEgbWl4ZXIuc2lua18xIFwKLSAqICAgdmlkZW9taXhlciBuYW1lPW1peGVyIHNpbmtfMDo6em9yZGVyPTAgc2lua18xOjp6b3JkZXI9MSAhIFwKLSAqICAgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBwaXBlbGluZSBhZGRzIGEgYWxwaGEgY2hhbm5lbCB0byB0aGUgU01QVEUgY29sb3IgYmFycwotICogd2l0aCBncmVlbiBhcyB0aGUgdHJhbnNwYXJlbnQgY29sb3IgYW5kIG92ZXJsYXlzIHRoZSBvdXRwdXQgb24KLSAqIHRvcCBvZiBhIHNub3cgdmlkZW8gc3RyZWFtLgotICovCi0KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YWxwaGEuaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2lmbmRlZiBNX1BJCi0jZGVmaW5lIE1fUEkgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKLSNlbmRpZgotCi0vKiBHZW5lcmF0ZWQgYnkgLWJhZC9leHQvY29nL2dlbmVyYXRlX3RhYmxlcyAqLwotc3RhdGljIGNvbnN0IGludCBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHZbXSA9IHsKLSAgMjk4LCAwLCA0NTksIC02MzUxNCwKLSAgMjk4LCAtNTUsIC0xMzYsIDE5NjgxLAotICAyOTgsIDU0MSwgMCwgLTczOTg4LAotfTsKLQotc3RhdGljIGNvbnN0IGludCBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHZbXSA9IHsKLSAgMjk4LCAwLCA0MDksIC01NzA2OCwKLSAgMjk4LCAtMTAwLCAtMjA4LCAzNDcwNywKLSAgMjk4LCA1MTYsIDAsIC03MDg3MCwKLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfaGR0dltdID0gewotICA0NywgMTU3LCAxNiwgNDA5NiwKLSAgLTI2LCAtODcsIDExMiwgMzI3NjgsCi0gIDExMiwgLTEwMiwgLTEwLCAzMjc2OCwKLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0dltdID0gewotICA2NiwgMTI5LCAyNSwgNDA5NiwKLSAgLTM4LCAtNzQsIDExMiwgMzI3NjgsCi0gIDExMiwgLTk0LCAtMTgsIDMyNzY4LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgY29nX3ljYmNyX3NkdHZfdG9feWNiY3JfaGR0dl9tYXRyaXhfOGJpdFtdID0gewotICAyNTYsIC0zMCwgLTUzLCAxMDYwMCwKLSAgMCwgMjYxLCAyOSwgLTQzNjcsCi0gIDAsIDE5LCAyNjIsIC0zMjg5LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdFtdID0gewotICAyNTYsIDI1LCA0OSwgLTk1MzYsCi0gIDAsIDI1MywgLTI4LCAzOTU4LAotICAwLCAtMTksIDI1MiwgMjkxOCwKLX07Ci0KLS8qIEFscGhhIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX01FVEhPRCBBTFBIQV9NRVRIT0RfU0VUCi0jZGVmaW5lIERFRkFVTFRfQUxQSEEgMS4wCi0jZGVmaW5lIERFRkFVTFRfVEFSR0VUX1IgMAotI2RlZmluZSBERUZBVUxUX1RBUkdFVF9HIDI1NQotI2RlZmluZSBERUZBVUxUX1RBUkdFVF9CIDAKLSNkZWZpbmUgREVGQVVMVF9BTkdMRSAyMC4wCi0jZGVmaW5lIERFRkFVTFRfTk9JU0VfTEVWRUwgMi4wCi0jZGVmaW5lIERFRkFVTFRfQkxBQ0tfU0VOU0lUSVZJVFkgMTAwCi0jZGVmaW5lIERFRkFVTFRfV0hJVEVfU0VOU0lUSVZJVFkgMTAwCi0jZGVmaW5lIERFRkFVTFRfUFJFRkVSX1BBU1NUSFJPVUdIIEZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX01FVEhPRCwKLSAgUFJPUF9BTFBIQSwKLSAgUFJPUF9UQVJHRVRfUiwKLSAgUFJPUF9UQVJHRVRfRywKLSAgUFJPUF9UQVJHRVRfQiwKLSAgUFJPUF9BTkdMRSwKLSAgUFJPUF9OT0lTRV9MRVZFTCwKLSAgUFJPUF9CTEFDS19TRU5TSVRJVklUWSwKLSAgUFJPUF9XSElURV9TRU5TSVRJVklUWSwKLSAgUFJPUF9QUkVGRVJfUEFTU1RIUk9VR0gKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfYWxwaGFfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEFZVVYsICIKLSAgICAgICAgICAgICJBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBCR1J4LCB4QkdSLCAiCi0gICAgICAgICAgICAiUkdCeCwgUkdCLCBCR1IsIFk0MkIsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFk0MUIgfSAiKSkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2FscGhhX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBBWVVWLCAiCi0gICAgICAgICAgICAiQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgQkdSeCwgeEJHUiwgIgotICAgICAgICAgICAgIlJHQngsIFJHQiwgQkdSLCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCAiICJZNDFCIH0gIikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY0NhcHMgZ3N0X2FscGhhX2FscGhhX2NhcHMgPQotR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBBWVVWLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0JBIH0iKSk7Ci0KLS8qIEZJWE1FOiB3aHkgZG8gd2UgbmVlZCBvdXIgb3duIGxvY2sgZm9yIHRoaXM/ICovCi0jZGVmaW5lIEdTVF9BTFBIQV9MT0NLKGFscGhhKSBHX1NUTVRfU1RBUlQgeyBcCi0gIEdTVF9MT0dfT0JKRUNUIChhbHBoYSwgIkxvY2tpbmcgYWxwaGEgZnJvbSB0aHJlYWQgJXAiLCBnX3RocmVhZF9zZWxmICgpKTsgXAotICBnX211dGV4X2xvY2sgKCZhbHBoYS0+bG9jayk7IFwKLSAgR1NUX0xPR19PQkpFQ1QgKGFscGhhLCAiTG9ja2VkIGFscGhhIGZyb20gdGhyZWFkICVwIiwgZ190aHJlYWRfc2VsZiAoKSk7IFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdTVF9BTFBIQV9VTkxPQ0soYWxwaGEpIEdfU1RNVF9TVEFSVCB7IFwKLSAgR1NUX0xPR19PQkpFQ1QgKGFscGhhLCAiVW5sb2NraW5nIGFscGhhIGZyb20gdGhyZWFkICVwIiwgZ190aHJlYWRfc2VsZiAoKSk7IFwKLSAgZ19tdXRleF91bmxvY2sgKCZhbHBoYS0+bG9jayk7IFwKLX0gR19TVE1UX0VORAotCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2FscGhhX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYnRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyB2b2lkIGdzdF9hbHBoYV9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogYnRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYWxwaGFfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLAotICAgIEdzdENhcHMgKiBpbmNhcHMsIEdzdFZpZGVvSW5mbyAqIGluX2luZm8sIEdzdENhcHMgKiBvdXRjYXBzLAotICAgIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hbHBoYV90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hbHBoYV9pbml0X3BhcmFtc19mdWxsIChHc3RBbHBoYSAqIGFscGhhLAotICAgIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqIGluX2luZm8sIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqIG91dF9pbmZvKTsKLXN0YXRpYyB2b2lkIGdzdF9hbHBoYV9pbml0X3BhcmFtcyAoR3N0QWxwaGEgKiBhbHBoYSk7Ci1zdGF0aWMgdm9pZCBnc3RfYWxwaGFfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKEdzdEFscGhhICogYWxwaGEpOwotc3RhdGljIGdib29sZWFuIGdzdF9hbHBoYV9zZXRfcHJvY2Vzc19mdW5jdGlvbl9mdWxsIChHc3RBbHBoYSAqIGFscGhhLAotICAgIEdzdFZpZGVvSW5mbyAqIGluX2luZm8sIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKTsKLQotc3RhdGljIHZvaWQgZ3N0X2FscGhhX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hbHBoYV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYWxwaGFfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi0jZGVmaW5lIGdzdF9hbHBoYV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RBbHBoYSwgZ3N0X2FscGhhLCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi0jZGVmaW5lIEdTVF9UWVBFX0FMUEhBX01FVEhPRCAoZ3N0X2FscGhhX21ldGhvZF9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfYWxwaGFfbWV0aG9kX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgYWxwaGFfbWV0aG9kX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBhbHBoYV9tZXRob2RbXSA9IHsKLSAgICB7QUxQSEFfTUVUSE9EX1NFVCwgIlNldC9hZGp1c3QgYWxwaGEgY2hhbm5lbCIsICJzZXQifSwKLSAgICB7QUxQSEFfTUVUSE9EX0dSRUVOLCAiQ2hyb21hIEtleSBvbiBwdXJlIGdyZWVuIiwgImdyZWVuIn0sCi0gICAge0FMUEhBX01FVEhPRF9CTFVFLCAiQ2hyb21hIEtleSBvbiBwdXJlIGJsdWUiLCAiYmx1ZSJ9LAotICAgIHtBTFBIQV9NRVRIT0RfQ1VTVE9NLCAiQ2hyb21hIEtleSBvbiBjdXN0b20gUkdCIHZhbHVlcyIsICJjdXN0b20ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFhbHBoYV9tZXRob2RfdHlwZSkgewotICAgIGFscGhhX21ldGhvZF90eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEFscGhhTWV0aG9kIiwgYWxwaGFfbWV0aG9kKTsKLSAgfQotICByZXR1cm4gYWxwaGFfbWV0aG9kX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY2xhc3NfaW5pdCAoR3N0QWxwaGFDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKmJ0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2FscGhhX2RlYnVnLCAiYWxwaGEiLCAwLAotICAgICAgImFscGhhIC0gRWxlbWVudCBmb3IgYWRkaW5nIGFscGhhIGNoYW5uZWwgdG8gc3RyZWFtcyIpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hbHBoYV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hbHBoYV9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2FscGhhX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfTUVUSE9ELAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtZXRob2QiLCAiTWV0aG9kIiwKLSAgICAgICAgICAiSG93IHRoZSBhbHBoYSBjaGFubmVscyBzaG91bGQgYmUgY3JlYXRlZCIsIEdTVF9UWVBFX0FMUEhBX01FVEhPRCwKLSAgICAgICAgICBERUZBVUxUX01FVEhPRCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQUxQSEEsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYWxwaGEiLCAiQWxwaGEiLCAiVGhlIHZhbHVlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCIsCi0gICAgICAgICAgMC4wLCAxLjAsIERFRkFVTFRfQUxQSEEsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1RBUkdFVF9SLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJ0YXJnZXQtciIsICJUYXJnZXQgUmVkIiwKLSAgICAgICAgICAiVGhlIHJlZCBjb2xvciB2YWx1ZSBmb3IgY3VzdG9tIFJHQiBjaHJvbWEga2V5aW5nIiwgMCwgMjU1LAotICAgICAgICAgIERFRkFVTFRfVEFSR0VUX1IsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1RBUkdFVF9HLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJ0YXJnZXQtZyIsICJUYXJnZXQgR3JlZW4iLAotICAgICAgICAgICJUaGUgZ3JlZW4gY29sb3IgdmFsdWUgZm9yIGN1c3RvbSBSR0IgY2hyb21hIGtleWluZyIsIDAsIDI1NSwKLSAgICAgICAgICBERUZBVUxUX1RBUkdFVF9HLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9UQVJHRVRfQiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgidGFyZ2V0LWIiLCAiVGFyZ2V0IEJsdWUiLAotICAgICAgICAgICJUaGUgYmx1ZSBjb2xvciB2YWx1ZSBmb3IgY3VzdG9tIFJHQiBjaHJvbWEga2V5aW5nIiwgMCwgMjU1LAotICAgICAgICAgIERFRkFVTFRfVEFSR0VUX0IsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0FOR0xFLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgiYW5nbGUiLCAiQW5nbGUiLCAiU2l6ZSBvZiB0aGUgY29sb3JjdWJlIHRvIGNoYW5nZSIsCi0gICAgICAgICAgMC4wLCA5MC4wLCBERUZBVUxUX0FOR0xFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9OT0lTRV9MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoIm5vaXNlLWxldmVsIiwgIk5vaXNlIExldmVsIiwgIlNpemUgb2Ygbm9pc2UgcmFkaXVzIiwKLSAgICAgICAgICAwLjAsIDY0LjAsIERFRkFVTFRfTk9JU0VfTEVWRUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9CTEFDS19TRU5TSVRJVklUWSwgZ19wYXJhbV9zcGVjX3VpbnQgKCJibGFjay1zZW5zaXRpdml0eSIsCi0gICAgICAgICAgIkJsYWNrIFNlbnNpdGl2aXR5IiwgIlNlbnNpdGl2aXR5IHRvIGRhcmsgY29sb3JzIiwgMCwgMTI4LAotICAgICAgICAgIERFRkFVTFRfQkxBQ0tfU0VOU0lUSVZJVFksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9XSElURV9TRU5TSVRJVklUWSwgZ19wYXJhbV9zcGVjX3VpbnQgKCJ3aGl0ZS1zZW5zaXRpdml0eSIsCi0gICAgICAgICAgIldoaXRlIFNlbnNpdGl2aXR5IiwgIlNlbnNpdGl2aXR5IHRvIGJyaWdodCBjb2xvcnMiLCAwLCAxMjgsCi0gICAgICAgICAgREVGQVVMVF9XSElURV9TRU5TSVRJVklUWSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX1BSRUZFUl9QQVNTVEhST1VHSCwgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJwcmVmZXItcGFzc3Rocm91Z2giLAotICAgICAgICAgICJQcmVmZXIgUGFzc3Rocm91Z2giLAotICAgICAgICAgICJEb24ndCBkbyBhbnkgcHJvY2Vzc2luZyBmb3IgYWxwaGE9MS4wIGlmIHBvc3NpYmxlIiwKLSAgICAgICAgICBERUZBVUxUX1BSRUZFUl9QQVNTVEhST1VHSCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkFscGhhIGZpbHRlciIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAiQWRkcyBhbiBhbHBoYSBjaGFubmVsIHRvIHZpZGVvIC0gdW5pZm9ybSBvciB2aWEgY2hyb21hLWtleWluZyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT5cbiIKLSAgICAgICJFZHdhcmQgSGVydmV5IDxlZHdhcmQuaGVydmV5QGNvbGxhYm9yYS5jby51az5cbiIKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2FscGhhX3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfYWxwaGFfc3JjX3RlbXBsYXRlKTsKLQotICBidHJhbnNfY2xhc3MtPmJlZm9yZV90cmFuc2Zvcm0gPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbHBoYV9iZWZvcmVfdHJhbnNmb3JtKTsKLSAgYnRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWxwaGFfdHJhbnNmb3JtX2NhcHMpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbHBoYV9zZXRfaW5mbyk7Ci0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FscGhhX3RyYW5zZm9ybV9mcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfaW5pdCAoR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgYWxwaGEtPmFscGhhID0gREVGQVVMVF9BTFBIQTsKLSAgYWxwaGEtPm1ldGhvZCA9IERFRkFVTFRfTUVUSE9EOwotICBhbHBoYS0+dGFyZ2V0X3IgPSBERUZBVUxUX1RBUkdFVF9SOwotICBhbHBoYS0+dGFyZ2V0X2cgPSBERUZBVUxUX1RBUkdFVF9HOwotICBhbHBoYS0+dGFyZ2V0X2IgPSBERUZBVUxUX1RBUkdFVF9COwotICBhbHBoYS0+YW5nbGUgPSBERUZBVUxUX0FOR0xFOwotICBhbHBoYS0+bm9pc2VfbGV2ZWwgPSBERUZBVUxUX05PSVNFX0xFVkVMOwotICBhbHBoYS0+YmxhY2tfc2Vuc2l0aXZpdHkgPSBERUZBVUxUX0JMQUNLX1NFTlNJVElWSVRZOwotICBhbHBoYS0+d2hpdGVfc2Vuc2l0aXZpdHkgPSBERUZBVUxUX1dISVRFX1NFTlNJVElWSVRZOwotCi0gIGdfbXV0ZXhfaW5pdCAoJmFscGhhLT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QWxwaGEgKmFscGhhID0gR1NUX0FMUEhBIChvYmplY3QpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZhbHBoYS0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FscGhhX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBbHBoYSAqYWxwaGEgPSBHU1RfQUxQSEEgKG9iamVjdCk7Ci0gIGdib29sZWFuIHJlY29uZmlndXJlID0gRkFMU0U7Ci0KLSAgR1NUX0FMUEhBX0xPQ0sgKGFscGhhKTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01FVEhPRDp7Ci0gICAgICBnaW50IG1ldGhvZCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLQotICAgICAgcmVjb25maWd1cmUgPSAobWV0aG9kICE9IGFscGhhLT5tZXRob2QpICYmIChtZXRob2QgPT0gQUxQSEFfTUVUSE9EX1NFVAotICAgICAgICAgIHx8IGFscGhhLT5tZXRob2QgPT0gQUxQSEFfTUVUSE9EX1NFVCkgJiYgKGFscGhhLT5hbHBoYSA9PSAxLjApCi0gICAgICAgICAgJiYgKGFscGhhLT5wcmVmZXJfcGFzc3Rocm91Z2gpOwotICAgICAgYWxwaGEtPm1ldGhvZCA9IG1ldGhvZDsKLQotICAgICAgZ3N0X2FscGhhX3NldF9wcm9jZXNzX2Z1bmN0aW9uIChhbHBoYSk7Ci0gICAgICBnc3RfYWxwaGFfaW5pdF9wYXJhbXMgKGFscGhhKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQUxQSEE6ewotICAgICAgZ2RvdWJsZSBhID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0KLSAgICAgIHJlY29uZmlndXJlID0gKGEgIT0gYWxwaGEtPmFscGhhKSAmJiAoYSA9PSAxLjAgfHwgYWxwaGEtPmFscGhhID09IDEuMCkKLSAgICAgICAgICAmJiAoYWxwaGEtPm1ldGhvZCA9PSBBTFBIQV9NRVRIT0RfU0VUKSAmJiAoYWxwaGEtPnByZWZlcl9wYXNzdGhyb3VnaCk7Ci0gICAgICBhbHBoYS0+YWxwaGEgPSBhOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9UQVJHRVRfUjoKLSAgICAgIGFscGhhLT50YXJnZXRfciA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGdzdF9hbHBoYV9pbml0X3BhcmFtcyAoYWxwaGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RBUkdFVF9HOgotICAgICAgYWxwaGEtPnRhcmdldF9nID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgZ3N0X2FscGhhX2luaXRfcGFyYW1zIChhbHBoYSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEFSR0VUX0I6Ci0gICAgICBhbHBoYS0+dGFyZ2V0X2IgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBnc3RfYWxwaGFfaW5pdF9wYXJhbXMgKGFscGhhKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BTkdMRToKLSAgICAgIGFscGhhLT5hbmdsZSA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBnc3RfYWxwaGFfaW5pdF9wYXJhbXMgKGFscGhhKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OT0lTRV9MRVZFTDoKLSAgICAgIGFscGhhLT5ub2lzZV9sZXZlbCA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBnc3RfYWxwaGFfaW5pdF9wYXJhbXMgKGFscGhhKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CTEFDS19TRU5TSVRJVklUWToKLSAgICAgIGFscGhhLT5ibGFja19zZW5zaXRpdml0eSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9XSElURV9TRU5TSVRJVklUWToKLSAgICAgIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUkVGRVJfUEFTU1RIUk9VR0g6ewotICAgICAgZ2Jvb2xlYW4gcHJlZmVyX3Bhc3N0aHJvdWdoID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotCi0gICAgICByZWNvbmZpZ3VyZSA9ICgoISAhcHJlZmVyX3Bhc3N0aHJvdWdoKSAhPSAoISAhYWxwaGEtPnByZWZlcl9wYXNzdGhyb3VnaCkpCi0gICAgICAgICAgJiYgKGFscGhhLT5tZXRob2QgPT0gQUxQSEFfTUVUSE9EX1NFVCkgJiYgKGFscGhhLT5hbHBoYSA9PSAxLjApOwotICAgICAgYWxwaGEtPnByZWZlcl9wYXNzdGhyb3VnaCA9IHByZWZlcl9wYXNzdGhyb3VnaDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKHJlY29uZmlndXJlKQotICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zcmMgKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChhbHBoYSkpOwotCi0gIEdTVF9BTFBIQV9VTkxPQ0sgKGFscGhhKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QWxwaGEgKmFscGhhID0gR1NUX0FMUEhBIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NRVRIT0Q6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgYWxwaGEtPm1ldGhvZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQUxQSEE6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBhbHBoYS0+YWxwaGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RBUkdFVF9SOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGFscGhhLT50YXJnZXRfcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEFSR0VUX0c6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgYWxwaGEtPnRhcmdldF9nKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UQVJHRVRfQjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBhbHBoYS0+dGFyZ2V0X2IpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FOR0xFOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBhbHBoYS0+YW5nbGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05PSVNFX0xFVkVMOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBhbHBoYS0+bm9pc2VfbGV2ZWwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JMQUNLX1NFTlNJVElWSVRZOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGFscGhhLT5ibGFja19zZW5zaXRpdml0eSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfV0hJVEVfU0VOU0lUSVZJVFk6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgYWxwaGEtPndoaXRlX3NlbnNpdGl2aXR5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUkVGRVJfUEFTU1RIUk9VR0g6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgYWxwaGEtPnByZWZlcl9wYXNzdGhyb3VnaCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9hbHBoYV90cmFuc2Zvcm1fY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIGJ0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0QWxwaGEgKmFscGhhID0gR1NUX0FMUEhBIChidHJhbnMpOwotICBHc3RDYXBzICpyZXQsICp0bXAsICp0bXAyOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBpOwotCi0gIHRtcCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICBHU1RfQUxQSEFfTE9DSyAoYWxwaGEpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOyBpKyspIHsKLSAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJmb3JtYXQiKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoc3RydWN0dXJlLCAiY29sb3JpbWV0cnkiKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoc3RydWN0dXJlLCAiY2hyb21hLXNpdGUiKTsKLQotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKHRtcCwgc3RydWN0dXJlKTsKLSAgfQotCi0gIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKSB7Ci0gICAgdG1wMiA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZnc3RfYWxwaGFfYWxwaGFfY2Fwcyk7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0bXAsIHRtcDIpOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXAyKTsKLSAgICB0bXAgPSByZXQ7Ci0gICAgcmV0ID0gTlVMTDsKLQotICAgIGlmIChhbHBoYS0+cHJlZmVyX3Bhc3N0aHJvdWdoICYmIGFscGhhLT5tZXRob2QgPT0gQUxQSEFfTUVUSE9EX1NFVAotICAgICAgICAmJiBhbHBoYS0+YWxwaGEgPT0gMS4wKSB7Ci0gICAgICByZXQgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAocmV0LCB0bXApOwotICAgICAgdG1wID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0ID0gdG1wOwotICAgICAgdG1wID0gTlVMTDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gdG1wOwotICAgIHRtcCA9IE5VTEw7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChhbHBoYSwKLSAgICAgICJUcmFuc2Zvcm1lZCAlIiBHU1RfUFRSX0ZPUk1BVCAiIC0+ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLCByZXQpOwotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChhbHBoYSwgIlVzaW5nIGZpbHRlciBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOwotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJldCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmV0KTsKLSAgICByZXQgPSBpbnRlcnNlY3Rpb247Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWxwaGEsICJJbnRlcnNlY3Rpb24gJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0gIH0KLQotCi0gIEdTVF9BTFBIQV9VTkxPQ0sgKGFscGhhKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbHBoYV9zZXRfaW5mbyAoR3N0VmlkZW9GaWx0ZXIgKiBmaWx0ZXIsCi0gICAgR3N0Q2FwcyAqIGluY2FwcywgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dGNhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdEFscGhhICphbHBoYSA9IEdTVF9BTFBIQSAoZmlsdGVyKTsKLSAgZ2Jvb2xlYW4gcGFzc3Rocm91Z2g7Ci0KLSAgR1NUX0FMUEhBX0xPQ0sgKGFscGhhKTsKLQotICBhbHBoYS0+aW5fc2R0diA9IGluX2luZm8tPmNvbG9yaW1ldHJ5Lm1hdHJpeCA9PSBHU1RfVklERU9fQ09MT1JfTUFUUklYX0JUNjAxOwotICBhbHBoYS0+b3V0X3NkdHYgPQotICAgICAgb3V0X2luZm8tPmNvbG9yaW1ldHJ5Lm1hdHJpeCA9PSBHU1RfVklERU9fQ09MT1JfTUFUUklYX0JUNjAxOwotCi0gIHBhc3N0aHJvdWdoID0gYWxwaGEtPnByZWZlcl9wYXNzdGhyb3VnaCAmJgotICAgICAgR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbl9pbmZvKSA9PSBHU1RfVklERU9fSU5GT19GT1JNQVQgKG91dF9pbmZvKQotICAgICAgJiYgYWxwaGEtPmluX3NkdHYgPT0gYWxwaGEtPm91dF9zZHR2ICYmIGFscGhhLT5tZXRob2QgPT0gQUxQSEFfTUVUSE9EX1NFVAotICAgICAgJiYgYWxwaGEtPmFscGhhID09IDEuMDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhbHBoYSwKLSAgICAgICJTZXR0aW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiAtPiAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiAocGFzc3Rocm91Z2g6ICVkKSIsIGluY2Fwcywgb3V0Y2FwcywgcGFzc3Rocm91Z2gpOwotICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAoZmlsdGVyKSwKLSAgICAgIHBhc3N0aHJvdWdoKTsKLQotICBpZiAoIWdzdF9hbHBoYV9zZXRfcHJvY2Vzc19mdW5jdGlvbl9mdWxsIChhbHBoYSwgaW5faW5mbywgb3V0X2luZm8pCi0gICAgICAmJiAhcGFzc3Rocm91Z2gpCi0gICAgZ290byBub19wcm9jZXNzOwotCi0gIGdzdF9hbHBoYV9pbml0X3BhcmFtc19mdWxsIChhbHBoYSwgaW5faW5mby0+ZmluZm8sIG91dF9pbmZvLT5maW5mbyk7Ci0KLSAgR1NUX0FMUEhBX1VOTE9DSyAoYWxwaGEpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcHJvY2VzczoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYWxwaGEsCi0gICAgICAgICJObyBwcm9jZXNzaW5nIGZ1bmN0aW9uIGZvciB0aGlzIGNhcHMgYW5kIG5vIHBhc3N0aHJvdWdoIG1vZGUiKTsKLSAgICBHU1RfQUxQSEFfVU5MT0NLIChhbHBoYSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIGJhc2VkIG9uIGh0dHA6Ly93d3cuY3MudXRhaC5lZHUvfm1pY2hhZWwvY2hyb21hLwotICovCi1zdGF0aWMgaW5saW5lIGdpbnQKLWNocm9tYV9rZXlpbmdfeXV2IChnaW50IGEsIGdpbnQgKiB5LCBnaW50ICogdSwKLSAgICBnaW50ICogdiwgZ2ludCBjciwgZ2ludCBjYiwgZ2ludCBzbWluLCBnaW50IHNtYXgsIGd1aW50OCBhY2NlcHRfYW5nbGVfdGcsCi0gICAgZ3VpbnQ4IGFjY2VwdF9hbmdsZV9jdGcsIGd1aW50OCBvbmVfb3Zlcl9rYywgZ3VpbnQ4IGtmZ3lfc2NhbGUsIGdpbnQ4IGtnLAotICAgIGd1aW50IG5vaXNlX2xldmVsMikKLXsKLSAgZ2ludCB0bXAsIHRtcDE7Ci0gIGdpbnQgeDEsIHkxOwotICBnaW50IHgsIHo7Ci0gIGdpbnQgYl9hbHBoYTsKLQotICAvKiB0b28gZGFyayBvciB0b28gYnJpZ2h0LCBrZWVwIGFscGhhICovCi0gIGlmICgqeSA8IHNtaW4gfHwgKnkgPiBzbWF4KQotICAgIHJldHVybiBhOwotCi0gIC8qIENvbnZlcnQgZm9yZWdyb3VuZCB0byBYWiBjb29yZHMgd2hlcmUgWCBkaXJlY3Rpb24gaXMgZGVmaW5lZCBieQotICAgICB0aGUga2V5IGNvbG9yICovCi0gIHRtcCA9ICgoKnUpICogY2IgKyAoKnYpICogY3IpID4+IDc7Ci0gIHggPSBDTEFNUCAodG1wLCAtMTI4LCAxMjcpOwotICB0bXAgPSAoKCp2KSAqIGNiIC0gKCp1KSAqIGNyKSA+PiA3OwotICB6ID0gQ0xBTVAgKHRtcCwgLTEyOCwgMTI3KTsKLQotICAvKiBXQVJOSU5HOiBhY2NlcHQgYW5nbGUgc2hvdWxkIG5ldmVyIGJlIHNldCBncmVhdGVyIHRoYW4gInNvbWV3aGF0IGxlc3MKLSAgICAgdGhhbiA5MCBkZWdyZWVzIiB0byBhdm9pZCBkZWFsaW5nIHdpdGggbmVnYXRpdmUvaW5maW5pdGUgdGcuIEluIHJlYWxpdHksCi0gICAgIDgwIGRlZ3JlZXMgc2hvdWxkIGJlIGVub3VnaCBpZiBmb3JlZ3JvdW5kIGlzIHJlYXNvbmFibGUuIElmIHRoaXMgc2VlbXMKLSAgICAgdG8gYmUgYSBwcm9ibGVtLCBnbyB0byBhbHRlcm5hdGl2ZSB3YXlzIG9mIGNoZWNraW5nIHBvaW50IHBvc2l0aW9uCi0gICAgIChzY2FsYXIgcHJvZHVjdCBvciBsaW5lIGVxdWF0aW9ucykuIFRoaXMgYW5nbGUgc2hvdWxkIG5vdCBiZSB0b28gc21hbGwKLSAgICAgZWl0aGVyIHRvIGF2b2lkIGluZmluaXRlIGN0ZyAodXNlZCB0byBzdXBwcmVzcyBmb3JlZ3JvdW5kIHdpdGhvdXQgdXNlIG9mCi0gICAgIGRpdmlzaW9uKSAqLwotCi0gIHRtcCA9ICh4ICogYWNjZXB0X2FuZ2xlX3RnKSA+PiA0OwotICB0bXAgPSBNSU4gKHRtcCwgMTI3KTsKLQotICBpZiAoYWJzICh6KSA+IHRtcCkgewotICAgIC8qIGtlZXAgZm9yZWdyb3VuZCBLZmcgPSAwICovCi0gICAgcmV0dXJuIGE7Ci0gIH0KLSAgLyogQ29tcHV0ZSBLZmcgKGltcGxpY2l0bHkpIGFuZCBLYmcsIHN1cHByZXNzIGZvcmVncm91bmQgaW4gWFogY29vcmQKLSAgICAgYWNjb3JkaW5nIHRvIEtmZyAqLwotICB0bXAgPSAoeiAqIGFjY2VwdF9hbmdsZV9jdGcpID4+IDQ7Ci0gIHRtcCA9IENMQU1QICh0bXAsIC0xMjgsIDEyNyk7Ci0gIHgxID0gYWJzICh0bXApOwotICB5MSA9IHo7Ci0KLSAgdG1wMSA9IHggLSB4MTsKLSAgdG1wMSA9IE1BWCAodG1wMSwgMCk7Ci0gIGJfYWxwaGEgPSAodG1wMSAqIG9uZV9vdmVyX2tjKSAvIDI7Ci0gIGJfYWxwaGEgPSAyNTUgLSBDTEFNUCAoYl9hbHBoYSwgMCwgMjU1KTsKLSAgYl9hbHBoYSA9IChhICogYl9hbHBoYSkgPj4gODsKLQotICB0bXAgPSAodG1wMSAqIGtmZ3lfc2NhbGUpID4+IDQ7Ci0gIHRtcDEgPSBNSU4gKHRtcCwgMjU1KTsKLQotICAqeSA9ICgqeSA8IHRtcDEpID8gMCA6ICp5IC0gdG1wMTsKLQotICAvKiBDb252ZXJ0IHN1cHByZXNzZWQgZm9yZWdyb3VuZCBiYWNrIHRvIENiQ3IgKi8KLSAgdG1wID0gKHgxICogY2IgLSB5MSAqIGNyKSA+PiA3OwotICAqdSA9IENMQU1QICh0bXAsIC0xMjgsIDEyNyk7Ci0KLSAgdG1wID0gKHgxICogY3IgKyB5MSAqIGNiKSA+PiA3OwotICAqdiA9IENMQU1QICh0bXAsIC0xMjgsIDEyNyk7Ci0KLSAgLyogRGVhbCB3aXRoIG5vaXNlLiBGb3Igbm93LCBhIGNpcmNsZSBhcm91bmQgdGhlIGtleSBjb2xvciB3aXRoCi0gICAgIHJhZGl1cyBvZiBub2lzZV9sZXZlbCB0cmVhdGVkIGFzIGV4YWN0IGtleSBjb2xvci4gSW50cm9kdWNlcwotICAgICBzaGFycCB0cmFuc2l0aW9ucy4KLSAgICovCi0gIHRtcCA9IHogKiB6ICsgKHggLSBrZykgKiAoeCAtIGtnKTsKLSAgdG1wID0gTUlOICh0bXAsIDB4ZmZmZik7Ci0KLSAgaWYgKHRtcCA8IG5vaXNlX2xldmVsMikKLSAgICBiX2FscGhhID0gMDsKLQotICByZXR1cm4gYl9hbHBoYTsKLX0KLQotI2RlZmluZSBBUFBMWV9NQVRSSVgobSxvLHYxLHYyLHYzKSAoKG1bbyo0XSAqIHYxICsgbVtvKjQrMV0gKiB2MiArIG1bbyo0KzJdICogdjMgKyBtW28qNCszXSkgPj4gOCkKLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9zZXRfYXJnYl9heXV2IChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgZ2ludCBzX2FscGhhID0gQ0xBTVAgKChnaW50KSAoYWxwaGEtPmFscGhhICogMjU2KSwgMCwgMjU2KTsKLSAgY29uc3QgZ3VpbnQ4ICpzcmM7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGksIGo7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCB5LCB1LCB2OwotICBnaW50IG9bNF07Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKTsKLQotICBvWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDMpOwotICBvWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBvWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDEpOwotICBvWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDIpOwotCi0gIG1lbWNweSAobWF0cml4LAotICAgICAgYWxwaGEtPm91dF9zZHR2ID8gY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgIGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfaGR0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgZGVzdFswXSA9IChzcmNbb1swXV0gKiBzX2FscGhhKSA+PiA4OwotCi0gICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1tvWzFdXSwgc3JjW29bMl1dLCBzcmNbb1szXV0pOwotICAgICAgdSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCBzcmNbb1sxXV0sIHNyY1tvWzJdXSwgc3JjW29bM11dKTsKLSAgICAgIHYgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgc3JjW29bMV1dLCBzcmNbb1syXV0sIHNyY1tvWzNdXSk7Ci0KLSAgICAgIGRlc3RbMV0gPSB5OwotICAgICAgZGVzdFsyXSA9IHU7Ci0gICAgICBkZXN0WzNdID0gdjsKLQotICAgICAgZGVzdCArPSA0OwotICAgICAgc3JjICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY2hyb21hX2tleV9hcmdiX2F5dXYgKGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RBbHBoYSAqIGFscGhhKQotewotICBjb25zdCBndWludDggKnNyYzsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHIsIGcsIGI7Ci0gIGdpbnQgc21pbiwgc21heDsKLSAgZ2ludCBwYSA9IENMQU1QICgoZ2ludCkgKGFscGhhLT5hbHBoYSAqIDI1NiksIDAsIDI1Nik7Ci0gIGdpbnQ4IGNiID0gYWxwaGEtPmNiLCBjciA9IGFscGhhLT5jcjsKLSAgZ2ludDgga2cgPSBhbHBoYS0+a2c7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX3RnOwotICBndWludDggYWNjZXB0X2FuZ2xlX2N0ZyA9IGFscGhhLT5hY2NlcHRfYW5nbGVfY3RnOwotICBndWludDggb25lX292ZXJfa2MgPSBhbHBoYS0+b25lX292ZXJfa2M7Ci0gIGd1aW50OCBrZmd5X3NjYWxlID0gYWxwaGEtPmtmZ3lfc2NhbGU7Ci0gIGd1aW50IG5vaXNlX2xldmVsMiA9IGFscGhhLT5ub2lzZV9sZXZlbDI7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCBvWzRdOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgb1swXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAzKTsKLSAgb1sxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAwKTsKLSAgb1syXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAxKTsKLSAgb1szXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAyKTsKLQotICBzbWluID0gMTI4IC0gYWxwaGEtPmJsYWNrX3NlbnNpdGl2aXR5OwotICBzbWF4ID0gMTI4ICsgYWxwaGEtPndoaXRlX3NlbnNpdGl2aXR5OwotCi0gIG1lbWNweSAobWF0cml4LAotICAgICAgYWxwaGEtPm91dF9zZHR2ID8gY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgIGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfaGR0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgYSA9IChzcmNbb1swXV0gKiBwYSkgPj4gODsKLSAgICAgIHIgPSBzcmNbb1sxXV07Ci0gICAgICBnID0gc3JjW29bMl1dOwotICAgICAgYiA9IHNyY1tvWzNdXTsKLQotICAgICAgeSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCByLCBnLCBiKTsKLSAgICAgIHUgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgciwgZywgYikgLSAxMjg7Ci0gICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHIsIGcsIGIpIC0gMTI4OwotCi0gICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKGEsICZ5LCAmdSwgJnYsIGNyLCBjYiwKLSAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgb25lX292ZXJfa2MsIGtmZ3lfc2NhbGUsIGtnLCBub2lzZV9sZXZlbDIpOwotCi0gICAgICB1ICs9IDEyODsKLSAgICAgIHYgKz0gMTI4OwotCi0gICAgICBkZXN0WzBdID0gYTsKLSAgICAgIGRlc3RbMV0gPSB5OwotICAgICAgZGVzdFsyXSA9IHU7Ci0gICAgICBkZXN0WzNdID0gdjsKLQotICAgICAgc3JjICs9IDQ7Ci0gICAgICBkZXN0ICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X2FyZ2JfYXJnYiAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGNvbnN0IGd1aW50OCAqc3JjOwotICBndWludDggKmRlc3Q7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCBzX2FscGhhID0gQ0xBTVAgKChnaW50KSAoYWxwaGEtPmFscGhhICogMjU2KSwgMCwgMjU2KTsKLSAgZ2ludCBpLCBqOwotICBnaW50IHBbNF0sIG9bNF07Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKTsKLQotICBwWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAzKTsKLSAgcFsxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMCk7Ci0gIHBbMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDEpOwotICBwWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAyKTsKLQotICBvWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDMpOwotICBvWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBvWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDEpOwotICBvWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICBkZXN0W3BbMF1dID0gKHNyY1tvWzBdXSAqIHNfYWxwaGEpID4+IDg7Ci0KLSAgICAgIGRlc3RbcFsxXV0gPSBzcmNbb1sxXV07Ci0gICAgICBkZXN0W3BbMl1dID0gc3JjW29bMl1dOwotICAgICAgZGVzdFtwWzNdXSA9IHNyY1tvWzNdXTsKLQotICAgICAgZGVzdCArPSA0OwotICAgICAgc3JjICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY2hyb21hX2tleV9hcmdiX2FyZ2IgKGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RBbHBoYSAqIGFscGhhKQotewotICBjb25zdCBndWludDggKnNyYzsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHIsIGcsIGI7Ci0gIGdpbnQgc21pbiwgc21heDsKLSAgZ2ludCBwYSA9IENMQU1QICgoZ2ludCkgKGFscGhhLT5hbHBoYSAqIDI1NiksIDAsIDI1Nik7Ci0gIGdpbnQ4IGNiID0gYWxwaGEtPmNiLCBjciA9IGFscGhhLT5jcjsKLSAgZ2ludDgga2cgPSBhbHBoYS0+a2c7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX3RnOwotICBndWludDggYWNjZXB0X2FuZ2xlX2N0ZyA9IGFscGhhLT5hY2NlcHRfYW5nbGVfY3RnOwotICBndWludDggb25lX292ZXJfa2MgPSBhbHBoYS0+b25lX292ZXJfa2M7Ci0gIGd1aW50OCBrZmd5X3NjYWxlID0gYWxwaGEtPmtmZ3lfc2NhbGU7Ci0gIGd1aW50IG5vaXNlX2xldmVsMiA9IGFscGhhLT5ub2lzZV9sZXZlbDI7Ci0gIGdpbnQgbWF0cml4WzEyXSwgbWF0cml4MlsxMl07Ci0gIGdpbnQgcFs0XSwgb1s0XTsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIHBbMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDMpOwotICBwWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAwKTsKLSAgcFsyXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMSk7Ci0gIHBbM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDIpOwotCi0gIG9bMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMyk7Ci0gIG9bMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMCk7Ci0gIG9bMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMSk7Ci0gIG9bM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMik7Ci0KLSAgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgc21heCA9IDEyOCArIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eTsKLQotICBtZW1jcHkgKG1hdHJpeCwgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotICBtZW1jcHkgKG1hdHJpeDIsIGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgYSA9IChzcmNbb1swXV0gKiBwYSkgPj4gODsKLSAgICAgIHIgPSBzcmNbb1sxXV07Ci0gICAgICBnID0gc3JjW29bMl1dOwotICAgICAgYiA9IHNyY1tvWzNdXTsKLQotICAgICAgeSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCByLCBnLCBiKTsKLSAgICAgIHUgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgciwgZywgYikgLSAxMjg7Ci0gICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHIsIGcsIGIpIC0gMTI4OwotCi0gICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKGEsICZ5LCAmdSwgJnYsIGNyLCBjYiwKLSAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgb25lX292ZXJfa2MsIGtmZ3lfc2NhbGUsIGtnLCBub2lzZV9sZXZlbDIpOwotCi0gICAgICB1ICs9IDEyODsKLSAgICAgIHYgKz0gMTI4OwotCi0gICAgICByID0gQVBQTFlfTUFUUklYIChtYXRyaXgyLCAwLCB5LCB1LCB2KTsKLSAgICAgIGcgPSBBUFBMWV9NQVRSSVggKG1hdHJpeDIsIDEsIHksIHUsIHYpOwotICAgICAgYiA9IEFQUExZX01BVFJJWCAobWF0cml4MiwgMiwgeSwgdSwgdik7Ci0KLSAgICAgIGRlc3RbcFswXV0gPSBhOwotICAgICAgZGVzdFtwWzFdXSA9IENMQU1QIChyLCAwLCAyNTUpOwotICAgICAgZGVzdFtwWzJdXSA9IENMQU1QIChnLCAwLCAyNTUpOwotICAgICAgZGVzdFtwWzNdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotCi0gICAgICBzcmMgKz0gNDsKLSAgICAgIGRlc3QgKz0gNDsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9zZXRfYXl1dl9hcmdiIChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpzcmM7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IHNfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTYpLCAwLCAyNTYpOwotICBnaW50IHksIHg7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCByLCBnLCBiOwotICBnaW50IHBbNF07Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKTsKLQotICBwWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAzKTsKLSAgcFsxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMCk7Ci0gIHBbMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDEpOwotICBwWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAyKTsKLQotICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgIGFscGhhLT5pbl9zZHR2ID8gY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgIGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfaGR0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgZGVzdFtwWzBdXSA9IChzcmNbMF0gKiBzX2FscGhhKSA+PiA4OwotCi0gICAgICByID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pOwotICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCBzcmNbMV0sIHNyY1syXSwgc3JjWzNdKTsKLSAgICAgIGIgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7Ci0KLSAgICAgIGRlc3RbcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFszXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLQotICAgICAgZGVzdCArPSA0OwotICAgICAgc3JjICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY2hyb21hX2tleV9heXV2X2FyZ2IgKGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RBbHBoYSAqIGFscGhhKQotewotICBjb25zdCBndWludDggKnNyYzsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHIsIGcsIGI7Ci0gIGdpbnQgc21pbiwgc21heDsKLSAgZ2ludCBwYSA9IENMQU1QICgoZ2ludCkgKGFscGhhLT5hbHBoYSAqIDI1NiksIDAsIDI1Nik7Ci0gIGdpbnQ4IGNiID0gYWxwaGEtPmNiLCBjciA9IGFscGhhLT5jcjsKLSAgZ2ludDgga2cgPSBhbHBoYS0+a2c7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX3RnOwotICBndWludDggYWNjZXB0X2FuZ2xlX2N0ZyA9IGFscGhhLT5hY2NlcHRfYW5nbGVfY3RnOwotICBndWludDggb25lX292ZXJfa2MgPSBhbHBoYS0+b25lX292ZXJfa2M7Ci0gIGd1aW50OCBrZmd5X3NjYWxlID0gYWxwaGEtPmtmZ3lfc2NhbGU7Ci0gIGd1aW50IG5vaXNlX2xldmVsMiA9IGFscGhhLT5ub2lzZV9sZXZlbDI7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCBwWzRdOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgcFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMyk7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDApOwotICBwWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAxKTsKLSAgcFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMik7Ci0KLSAgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgc21heCA9IDEyOCArIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eTsKLQotICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgIGFscGhhLT5pbl9zZHR2ID8gY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgIGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfaGR0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgYSA9IChzcmNbMF0gKiBwYSkgPj4gODsKLSAgICAgIHkgPSBzcmNbMV07Ci0gICAgICB1ID0gc3JjWzJdIC0gMTI4OwotICAgICAgdiA9IHNyY1szXSAtIDEyODsKLQotICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgc21pbiwgc21heCwgYWNjZXB0X2FuZ2xlX3RnLCBhY2NlcHRfYW5nbGVfY3RnLAotICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLQotICAgICAgdSArPSAxMjg7Ci0gICAgICB2ICs9IDEyODsKLQotICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5LCB1LCB2KTsKLSAgICAgIGcgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeSwgdSwgdik7Ci0gICAgICBiID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHksIHUsIHYpOwotCi0gICAgICBkZXN0W3BbMF1dID0gYTsKLSAgICAgIGRlc3RbcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFszXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLQotICAgICAgc3JjICs9IDQ7Ci0gICAgICBkZXN0ICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X2F5dXZfYXl1diAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGNvbnN0IGd1aW50OCAqc3JjOwotICBndWludDggKmRlc3Q7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCBzX2FscGhhID0gQ0xBTVAgKChnaW50KSAoYWxwaGEtPmFscGhhICogMjU2KSwgMCwgMjU2KTsKLSAgZ2ludCB5LCB4OwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgaWYgKGFscGhhLT5pbl9zZHR2ID09IGFscGhhLT5vdXRfc2R0dikgewotICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgZGVzdFswXSA9IChzcmNbMF0gKiBzX2FscGhhKSA+PiA4OwotICAgICAgICBkZXN0WzFdID0gc3JjWzFdOwotICAgICAgICBkZXN0WzJdID0gc3JjWzJdOwotICAgICAgICBkZXN0WzNdID0gc3JjWzNdOwotCi0gICAgICAgIGRlc3QgKz0gNDsKLSAgICAgICAgc3JjICs9IDQ7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdpbnQgbWF0cml4WzEyXTsKLQotICAgIG1lbWNweSAobWF0cml4LAotICAgICAgICBhbHBoYS0+b3V0X3NkdHYgPyBjb2dfeWNiY3JfaGR0dl90b195Y2Jjcl9zZHR2X21hdHJpeF84Yml0IDoKLSAgICAgICAgY29nX3ljYmNyX3NkdHZfdG9feWNiY3JfaGR0dl9tYXRyaXhfOGJpdCwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgZGVzdFswXSA9IChzcmNbMF0gKiBzX2FscGhhKSA+PiA4OwotICAgICAgICBkZXN0WzFdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pOwotICAgICAgICBkZXN0WzJdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pOwotICAgICAgICBkZXN0WzNdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1sxXSwgc3JjWzJdLCBzcmNbM10pOwotCi0gICAgICAgIGRlc3QgKz0gNDsKLSAgICAgICAgc3JjICs9IDQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY2hyb21hX2tleV9heXV2X2F5dXYgKGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RBbHBoYSAqIGFscGhhKQotewotICBjb25zdCBndWludDggKnNyYzsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHNtaW4sIHNtYXg7Ci0gIGdpbnQgcGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTYpLCAwLCAyNTYpOwotICBnaW50OCBjYiA9IGFscGhhLT5jYiwgY3IgPSBhbHBoYS0+Y3I7Ci0gIGdpbnQ4IGtnID0gYWxwaGEtPmtnOwotICBndWludDggYWNjZXB0X2FuZ2xlX3RnID0gYWxwaGEtPmFjY2VwdF9hbmdsZV90ZzsKLSAgZ3VpbnQ4IGFjY2VwdF9hbmdsZV9jdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX2N0ZzsKLSAgZ3VpbnQ4IG9uZV9vdmVyX2tjID0gYWxwaGEtPm9uZV9vdmVyX2tjOwotICBndWludDgga2ZneV9zY2FsZSA9IGFscGhhLT5rZmd5X3NjYWxlOwotICBndWludCBub2lzZV9sZXZlbDIgPSBhbHBoYS0+bm9pc2VfbGV2ZWwyOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgc21heCA9IDEyOCArIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eTsKLQotICBpZiAoYWxwaGEtPmluX3NkdHYgPT0gYWxwaGEtPm91dF9zZHR2KSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgICBhID0gKHNyY1swXSAqIHBhKSA+PiA4OwotICAgICAgICB5ID0gc3JjWzFdOwotICAgICAgICB1ID0gc3JjWzJdIC0gMTI4OwotICAgICAgICB2ID0gc3JjWzNdIC0gMTI4OwotCi0gICAgICAgIGEgPSBjaHJvbWFfa2V5aW5nX3l1diAoYSwgJnksICZ1LCAmdiwgY3IsIGNiLAotICAgICAgICAgICAgc21pbiwgc21heCwgYWNjZXB0X2FuZ2xlX3RnLCBhY2NlcHRfYW5nbGVfY3RnLAotICAgICAgICAgICAgb25lX292ZXJfa2MsIGtmZ3lfc2NhbGUsIGtnLCBub2lzZV9sZXZlbDIpOwotCi0gICAgICAgIHUgKz0gMTI4OwotICAgICAgICB2ICs9IDEyODsKLQotICAgICAgICBkZXN0WzBdID0gYTsKLSAgICAgICAgZGVzdFsxXSA9IHk7Ci0gICAgICAgIGRlc3RbMl0gPSB1OwotICAgICAgICBkZXN0WzNdID0gdjsKLQotICAgICAgICBzcmMgKz0gNDsKLSAgICAgICAgZGVzdCArPSA0OwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBnaW50IG1hdHJpeFsxMl07Ci0KLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgYWxwaGEtPm91dF9zZHR2ID8gY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9zZHR2X3RvX3ljYmNyX2hkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICAgIGEgPSAoc3JjWzBdICogcGEpID4+IDg7Ci0gICAgICAgIHkgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7Ci0gICAgICAgIHUgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSkgLSAxMjg7Ci0gICAgICAgIHYgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSkgLSAxMjg7Ci0KLSAgICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0KLSAgICAgICAgdSArPSAxMjg7Ci0gICAgICAgIHYgKz0gMTI4OwotCi0gICAgICAgIGRlc3RbMF0gPSBhOwotICAgICAgICBkZXN0WzFdID0geTsKLSAgICAgICAgZGVzdFsyXSA9IHU7Ci0gICAgICAgIGRlc3RbM10gPSB2OwotCi0gICAgICAgIHNyYyArPSA0OwotICAgICAgICBkZXN0ICs9IDQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3JnYl9heXV2IChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpzcmM7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IHNfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTUpLCAwLCAyNTUpOwotICBnaW50IGksIGo7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCB5LCB1LCB2OwotICBnaW50IG9bM107Ci0gIGdpbnQgYnBwOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgYnBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoaW5fZnJhbWUsIDApOwotICBvWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBvWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDEpOwotICBvWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDIpOwotCi0gIG1lbWNweSAobWF0cml4LAotICAgICAgYWxwaGEtPm91dF9zZHR2ID8gY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgIGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfaGR0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgZGVzdFswXSA9IHNfYWxwaGE7Ci0KLSAgICAgIHkgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgc3JjW29bMF1dLCBzcmNbb1sxXV0sIHNyY1tvWzJdXSk7Ci0gICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1tvWzBdXSwgc3JjW29bMV1dLCBzcmNbb1syXV0pOwotICAgICAgdiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCBzcmNbb1swXV0sIHNyY1tvWzFdXSwgc3JjW29bMl1dKTsKLQotICAgICAgZGVzdFsxXSA9IHk7Ci0gICAgICBkZXN0WzJdID0gdTsKLSAgICAgIGRlc3RbM10gPSB2OwotCi0gICAgICBkZXN0ICs9IDQ7Ci0gICAgICBzcmMgKz0gYnBwOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FscGhhX2Nocm9tYV9rZXlfcmdiX2F5dXYgKGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RBbHBoYSAqIGFscGhhKQotewotICBjb25zdCBndWludDggKnNyYzsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHIsIGcsIGI7Ci0gIGdpbnQgc21pbiwgc21heDsKLSAgZ2ludCBwYSA9IENMQU1QICgoZ2ludCkgKGFscGhhLT5hbHBoYSAqIDI1NSksIDAsIDI1NSk7Ci0gIGdpbnQ4IGNiID0gYWxwaGEtPmNiLCBjciA9IGFscGhhLT5jcjsKLSAgZ2ludDgga2cgPSBhbHBoYS0+a2c7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX3RnOwotICBndWludDggYWNjZXB0X2FuZ2xlX2N0ZyA9IGFscGhhLT5hY2NlcHRfYW5nbGVfY3RnOwotICBndWludDggb25lX292ZXJfa2MgPSBhbHBoYS0+b25lX292ZXJfa2M7Ci0gIGd1aW50OCBrZmd5X3NjYWxlID0gYWxwaGEtPmtmZ3lfc2NhbGU7Ci0gIGd1aW50IG5vaXNlX2xldmVsMiA9IGFscGhhLT5ub2lzZV9sZXZlbDI7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCBvWzNdOwotICBnaW50IGJwcDsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIGJwcCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGluX2ZyYW1lLCAwKTsKLQotICBvWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBvWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDEpOwotICBvWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDIpOwotCi0gIHNtaW4gPSAxMjggLSBhbHBoYS0+YmxhY2tfc2Vuc2l0aXZpdHk7Ci0gIHNtYXggPSAxMjggKyBhbHBoYS0+d2hpdGVfc2Vuc2l0aXZpdHk7Ci0KLSAgbWVtY3B5IChtYXRyaXgsCi0gICAgICBhbHBoYS0+b3V0X3NkdHYgPyBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9oZHR2LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICBhID0gcGE7Ci0gICAgICByID0gc3JjW29bMF1dOwotICAgICAgZyA9IHNyY1tvWzFdXTsKLSAgICAgIGIgPSBzcmNbb1syXV07Ci0KLSAgICAgIHkgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgciwgZywgYik7Ci0gICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHIsIGcsIGIpIC0gMTI4OwotICAgICAgdiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCByLCBnLCBiKSAtIDEyODsKLQotICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgc21pbiwgc21heCwgYWNjZXB0X2FuZ2xlX3RnLCBhY2NlcHRfYW5nbGVfY3RnLAotICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLQotICAgICAgdSArPSAxMjg7Ci0gICAgICB2ICs9IDEyODsKLQotICAgICAgZGVzdFswXSA9IGE7Ci0gICAgICBkZXN0WzFdID0geTsKLSAgICAgIGRlc3RbMl0gPSB1OwotICAgICAgZGVzdFszXSA9IHY7Ci0KLSAgICAgIHNyYyArPSBicHA7Ci0gICAgICBkZXN0ICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3JnYl9hcmdiIChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpzcmM7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IHNfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTUpLCAwLCAyNTUpOwotICBnaW50IGksIGo7Ci0gIGdpbnQgcFs0XSwgb1szXTsKLSAgZ2ludCBicHA7Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKTsKLQotICBicHAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0KLSAgb1swXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAwKTsKLSAgb1sxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAxKTsKLSAgb1syXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAyKTsKLQotICBwWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAzKTsKLSAgcFsxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMCk7Ci0gIHBbMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDEpOwotICBwWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAyKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgZGVzdFtwWzBdXSA9IHNfYWxwaGE7Ci0KLSAgICAgIGRlc3RbcFsxXV0gPSBzcmNbb1swXV07Ci0gICAgICBkZXN0W3BbMl1dID0gc3JjW29bMV1dOwotICAgICAgZGVzdFtwWzNdXSA9IHNyY1tvWzJdXTsKLQotICAgICAgZGVzdCArPSA0OwotICAgICAgc3JjICs9IGJwcDsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9jaHJvbWFfa2V5X3JnYl9hcmdiIChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpzcmM7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGksIGo7Ci0gIGdpbnQgYSwgeSwgdSwgdjsKLSAgZ2ludCByLCBnLCBiOwotICBnaW50IHNtaW4sIHNtYXg7Ci0gIGdpbnQgcGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTUpLCAwLCAyNTUpOwotICBnaW50OCBjYiA9IGFscGhhLT5jYiwgY3IgPSBhbHBoYS0+Y3I7Ci0gIGdpbnQ4IGtnID0gYWxwaGEtPmtnOwotICBndWludDggYWNjZXB0X2FuZ2xlX3RnID0gYWxwaGEtPmFjY2VwdF9hbmdsZV90ZzsKLSAgZ3VpbnQ4IGFjY2VwdF9hbmdsZV9jdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX2N0ZzsKLSAgZ3VpbnQ4IG9uZV9vdmVyX2tjID0gYWxwaGEtPm9uZV9vdmVyX2tjOwotICBndWludDgga2ZneV9zY2FsZSA9IGFscGhhLT5rZmd5X3NjYWxlOwotICBndWludCBub2lzZV9sZXZlbDIgPSBhbHBoYS0+bm9pc2VfbGV2ZWwyOwotICBnaW50IG1hdHJpeFsxMl0sIG1hdHJpeDJbMTJdOwotICBnaW50IHBbNF0sIG9bM107Ci0gIGdpbnQgYnBwOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgYnBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoaW5fZnJhbWUsIDApOwotCi0gIG9bMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMCk7Ci0gIG9bMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMSk7Ci0gIG9bMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMik7Ci0KLSAgcFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMyk7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDApOwotICBwWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAxKTsKLSAgcFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMik7Ci0KLSAgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgc21heCA9IDEyOCArIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eTsKLQotICBtZW1jcHkgKG1hdHJpeCwgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotICBtZW1jcHkgKG1hdHJpeDIsIGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgYSA9IHBhOwotICAgICAgciA9IHNyY1tvWzBdXTsKLSAgICAgIGcgPSBzcmNbb1sxXV07Ci0gICAgICBiID0gc3JjW29bMl1dOwotCi0gICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHIsIGcsIGIpOwotICAgICAgdSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCByLCBnLCBiKSAtIDEyODsKLSAgICAgIHYgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgciwgZywgYikgLSAxMjg7Ci0KLSAgICAgIGEgPSBjaHJvbWFfa2V5aW5nX3l1diAoYSwgJnksICZ1LCAmdiwgY3IsIGNiLAotICAgICAgICAgIHNtaW4sIHNtYXgsIGFjY2VwdF9hbmdsZV90ZywgYWNjZXB0X2FuZ2xlX2N0ZywKLSAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0KLSAgICAgIHUgKz0gMTI4OwotICAgICAgdiArPSAxMjg7Ci0KLSAgICAgIHIgPSBBUFBMWV9NQVRSSVggKG1hdHJpeDIsIDAsIHksIHUsIHYpOwotICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4MiwgMSwgeSwgdSwgdik7Ci0gICAgICBiID0gQVBQTFlfTUFUUklYIChtYXRyaXgyLCAyLCB5LCB1LCB2KTsKLQotICAgICAgZGVzdFtwWzBdXSA9IGE7Ci0gICAgICBkZXN0W3BbMV1dID0gQ0xBTVAgKHIsIDAsIDI1NSk7Ci0gICAgICBkZXN0W3BbMl1dID0gQ0xBTVAgKGcsIDAsIDI1NSk7Ci0gICAgICBkZXN0W3BbM11dID0gQ0xBTVAgKGIsIDAsIDI1NSk7Ci0KLSAgICAgIHNyYyArPSBicHA7Ci0gICAgICBkZXN0ICs9IDQ7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3BsYW5hcl95dXZfYXl1diAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGJfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTUpLCAwLCAyNTUpOwotICBjb25zdCBndWludDggKnNyY1ksICpzcmNZX3RtcDsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNVLCAqc3JjVV90bXA7Ci0gIGNvbnN0IGd1aW50OCAqc3JjViwgKnNyY1ZfdG1wOwotICBnaW50IGksIGo7Ci0gIGdpbnQgeV9zdHJpZGUsIHV2X3N0cmlkZTsKLSAgZ2ludCB2X3N1YnMsIGhfc3ViczsKLQotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIHlfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0gIHV2X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoaW5fZnJhbWUsIDEpOwotCi0gIHNyY1lfdG1wID0gc3JjWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgc3JjVV90bXAgPSBzcmNVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaW5fZnJhbWUsIDEpOwotICBzcmNWX3RtcCA9IHNyY1YgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMik7Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fRlJBTUVfRk9STUFUIChpbl9mcmFtZSkpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICAgIHZfc3VicyA9IGhfc3VicyA9IDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQ0NDoKLSAgICAgIHZfc3VicyA9IGhfc3VicyA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICAgIHZfc3VicyA9IDE7Ci0gICAgICBoX3N1YnMgPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICB2X3N1YnMgPSAxOwotICAgICAgaF9zdWJzID0gNDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChhbHBoYS0+aW5fc2R0diA9PSBhbHBoYS0+b3V0X3NkdHYpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICAgIGRlc3RbMF0gPSBiX2FscGhhOwotICAgICAgICBkZXN0WzFdID0gc3JjWVswXTsKLSAgICAgICAgZGVzdFsyXSA9IHNyY1VbMF07Ci0gICAgICAgIGRlc3RbM10gPSBzcmNWWzBdOwotCi0gICAgICAgIGRlc3QgKz0gNDsKLSAgICAgICAgc3JjWSsrOwotICAgICAgICBpZiAoKGogKyAxKSAlIGhfc3VicyA9PSAwKSB7Ci0gICAgICAgICAgc3JjVSsrOwotICAgICAgICAgIHNyY1YrKzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzcmNZX3RtcCA9IHNyY1kgPSBzcmNZX3RtcCArIHlfc3RyaWRlOwotICAgICAgaWYgKChpICsgMSkgJSB2X3N1YnMgPT0gMCkgewotICAgICAgICBzcmNVX3RtcCA9IHNyY1UgPSBzcmNVX3RtcCArIHV2X3N0cmlkZTsKLSAgICAgICAgc3JjVl90bXAgPSBzcmNWID0gc3JjVl90bXAgKyB1dl9zdHJpZGU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzcmNVID0gc3JjVV90bXA7Ci0gICAgICAgIHNyY1YgPSBzcmNWX3RtcDsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ2ludCBtYXRyaXhbMTJdOwotICAgIGdpbnQgYSwgeSwgdSwgdjsKLQotICAgIG1lbWNweSAobWF0cml4LAotICAgICAgICBhbHBoYS0+b3V0X3NkdHYgPyBjb2dfeWNiY3JfaGR0dl90b195Y2Jjcl9zZHR2X21hdHJpeF84Yml0IDoKLSAgICAgICAgY29nX3ljYmNyX3NkdHZfdG9feWNiY3JfaGR0dl9tYXRyaXhfOGJpdCwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLSAgICAgICAgYSA9IGJfYWxwaGE7Ci0gICAgICAgIHkgPSBzcmNZWzBdOwotICAgICAgICB1ID0gc3JjVVswXTsKLSAgICAgICAgdiA9IHNyY1ZbMF07Ci0KLSAgICAgICAgZGVzdFswXSA9IGE7Ci0gICAgICAgIGRlc3RbMV0gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeSwgdSwgdik7Ci0gICAgICAgIGRlc3RbMl0gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeSwgdSwgdik7Ci0gICAgICAgIGRlc3RbM10gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeSwgdSwgdik7Ci0KLSAgICAgICAgZGVzdCArPSA0OwotICAgICAgICBzcmNZKys7Ci0gICAgICAgIGlmICgoaiArIDEpICUgaF9zdWJzID09IDApIHsKLSAgICAgICAgICBzcmNVKys7Ci0gICAgICAgICAgc3JjVisrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHNyY1lfdG1wID0gc3JjWSA9IHNyY1lfdG1wICsgeV9zdHJpZGU7Ci0gICAgICBpZiAoKGkgKyAxKSAlIHZfc3VicyA9PSAwKSB7Ci0gICAgICAgIHNyY1VfdG1wID0gc3JjVSA9IHNyY1VfdG1wICsgdXZfc3RyaWRlOwotICAgICAgICBzcmNWX3RtcCA9IHNyY1YgPSBzcmNWX3RtcCArIHV2X3N0cmlkZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNyY1UgPSBzcmNVX3RtcDsKLSAgICAgICAgc3JjViA9IHNyY1ZfdG1wOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FscGhhX2Nocm9tYV9rZXlfcGxhbmFyX3l1dl9heXV2IChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgYl9hbHBoYSA9IENMQU1QICgoZ2ludCkgKGFscGhhLT5hbHBoYSAqIDI1NSksIDAsIDI1NSk7Ci0gIGNvbnN0IGd1aW50OCAqc3JjWSwgKnNyY1lfdG1wOwotICBjb25zdCBndWludDggKnNyY1UsICpzcmNVX3RtcDsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNWLCAqc3JjVl90bXA7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHlfc3RyaWRlLCB1dl9zdHJpZGU7Ci0gIGdpbnQgdl9zdWJzLCBoX3N1YnM7Ci0gIGdpbnQgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgZ2ludCBzbWF4ID0gMTI4ICsgYWxwaGEtPndoaXRlX3NlbnNpdGl2aXR5OwotICBnaW50OCBjYiA9IGFscGhhLT5jYiwgY3IgPSBhbHBoYS0+Y3I7Ci0gIGdpbnQ4IGtnID0gYWxwaGEtPmtnOwotICBndWludDggYWNjZXB0X2FuZ2xlX3RnID0gYWxwaGEtPmFjY2VwdF9hbmdsZV90ZzsKLSAgZ3VpbnQ4IGFjY2VwdF9hbmdsZV9jdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX2N0ZzsKLSAgZ3VpbnQ4IG9uZV9vdmVyX2tjID0gYWxwaGEtPm9uZV9vdmVyX2tjOwotICBndWludDgga2ZneV9zY2FsZSA9IGFscGhhLT5rZmd5X3NjYWxlOwotICBndWludCBub2lzZV9sZXZlbDIgPSBhbHBoYS0+bm9pc2VfbGV2ZWwyOwotCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgeV9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLSAgdXZfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChpbl9mcmFtZSwgMSk7Ci0KLSAgc3JjWV90bXAgPSBzcmNZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaW5fZnJhbWUsIDApOwotICBzcmNVX3RtcCA9IHNyY1UgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMSk7Ci0gIHNyY1ZfdG1wID0gc3JjViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGluX2ZyYW1lLCAyKTsKLQotICBzd2l0Y2ggKEdTVF9WSURFT19GUkFNRV9GT1JNQVQgKGluX2ZyYW1lKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgdl9zdWJzID0gaF9zdWJzID0gMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgdl9zdWJzID0gaF9zdWJzID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCOgotICAgICAgdl9zdWJzID0gMTsKLSAgICAgIGhfc3VicyA9IDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQxQjoKLSAgICAgIHZfc3VicyA9IDE7Ci0gICAgICBoX3N1YnMgPSA0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGFscGhhLT5pbl9zZHR2ID09IGFscGhhLT5vdXRfc2R0dikgewotICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLSAgICAgICAgYSA9IGJfYWxwaGE7Ci0gICAgICAgIHkgPSBzcmNZWzBdOwotICAgICAgICB1ID0gc3JjVVswXSAtIDEyODsKLSAgICAgICAgdiA9IHNyY1ZbMF0gLSAxMjg7Ci0KLSAgICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChhLCAmeSwgJnUsICZ2LCBjciwgY2IsIHNtaW4sCi0gICAgICAgICAgICBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0KLSAgICAgICAgdSArPSAxMjg7Ci0gICAgICAgIHYgKz0gMTI4OwotCi0gICAgICAgIGRlc3RbMF0gPSBhOwotICAgICAgICBkZXN0WzFdID0geTsKLSAgICAgICAgZGVzdFsyXSA9IHU7Ci0gICAgICAgIGRlc3RbM10gPSB2OwotCi0gICAgICAgIGRlc3QgKz0gNDsKLSAgICAgICAgc3JjWSsrOwotICAgICAgICBpZiAoKGogKyAxKSAlIGhfc3VicyA9PSAwKSB7Ci0gICAgICAgICAgc3JjVSsrOwotICAgICAgICAgIHNyY1YrKzsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzcmNZX3RtcCA9IHNyY1kgPSBzcmNZX3RtcCArIHlfc3RyaWRlOwotICAgICAgaWYgKChpICsgMSkgJSB2X3N1YnMgPT0gMCkgewotICAgICAgICBzcmNVX3RtcCA9IHNyY1UgPSBzcmNVX3RtcCArIHV2X3N0cmlkZTsKLSAgICAgICAgc3JjVl90bXAgPSBzcmNWID0gc3JjVl90bXAgKyB1dl9zdHJpZGU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzcmNVID0gc3JjVV90bXA7Ci0gICAgICAgIHNyY1YgPSBzcmNWX3RtcDsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ2ludCBtYXRyaXhbMTJdOwotCi0gICAgbWVtY3B5IChtYXRyaXgsCi0gICAgICAgIGFscGhhLT5vdXRfc2R0diA/IGNvZ195Y2Jjcl9oZHR2X3RvX3ljYmNyX3NkdHZfbWF0cml4XzhiaXQgOgotICAgICAgICBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgICBhID0gYl9hbHBoYTsKLSAgICAgICAgeSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCBzcmNZWzBdLCBzcmNVWzBdLCBzcmNWWzBdKTsKLSAgICAgICAgdSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCBzcmNZWzBdLCBzcmNVWzBdLCBzcmNWWzBdKSAtIDEyODsKLSAgICAgICAgdiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCBzcmNZWzBdLCBzcmNVWzBdLCBzcmNWWzBdKSAtIDEyODsKLQotICAgICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKGEsICZ5LCAmdSwgJnYsIGNyLCBjYiwgc21pbiwKLSAgICAgICAgICAgIHNtYXgsIGFjY2VwdF9hbmdsZV90ZywgYWNjZXB0X2FuZ2xlX2N0ZywKLSAgICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLQotICAgICAgICBkZXN0WzBdID0gYTsKLSAgICAgICAgZGVzdFsxXSA9IHk7Ci0gICAgICAgIGRlc3RbMl0gPSB1ICsgMTI4OwotICAgICAgICBkZXN0WzNdID0gdiArIDEyODsKLQotICAgICAgICBkZXN0ICs9IDQ7Ci0gICAgICAgIHNyY1krKzsKLSAgICAgICAgaWYgKChqICsgMSkgJSBoX3N1YnMgPT0gMCkgewotICAgICAgICAgIHNyY1UrKzsKLSAgICAgICAgICBzcmNWKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc3JjWV90bXAgPSBzcmNZID0gc3JjWV90bXAgKyB5X3N0cmlkZTsKLSAgICAgIGlmICgoaSArIDEpICUgdl9zdWJzID09IDApIHsKLSAgICAgICAgc3JjVV90bXAgPSBzcmNVID0gc3JjVV90bXAgKyB1dl9zdHJpZGU7Ci0gICAgICAgIHNyY1ZfdG1wID0gc3JjViA9IHNyY1ZfdG1wICsgdXZfc3RyaWRlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3JjVSA9IHNyY1VfdG1wOwotICAgICAgICBzcmNWID0gc3JjVl90bXA7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3BsYW5hcl95dXZfYXJnYiAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGJfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTUpLCAwLCAyNTUpOwotICBjb25zdCBndWludDggKnNyY1ksICpzcmNZX3RtcDsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNVLCAqc3JjVV90bXA7Ci0gIGNvbnN0IGd1aW50OCAqc3JjViwgKnNyY1ZfdG1wOwotICBnaW50IGksIGo7Ci0gIGdpbnQgeV9zdHJpZGUsIHV2X3N0cmlkZTsKLSAgZ2ludCB2X3N1YnMsIGhfc3ViczsKLSAgZ2ludCBtYXRyaXhbMTJdOwotICBnaW50IGEsIHksIHUsIHY7Ci0gIGdpbnQgciwgZywgYjsKLSAgZ2ludCBwWzRdOwotCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgcFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMyk7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDApOwotICBwWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAxKTsKLSAgcFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMik7Ci0KLSAgeV9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLSAgdXZfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChpbl9mcmFtZSwgMSk7Ci0KLSAgc3JjWV90bXAgPSBzcmNZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaW5fZnJhbWUsIDApOwotICBzcmNVX3RtcCA9IHNyY1UgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMSk7Ci0gIHNyY1ZfdG1wID0gc3JjViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGluX2ZyYW1lLCAyKTsKLQotICBzd2l0Y2ggKEdTVF9WSURFT19GUkFNRV9GT1JNQVQgKGluX2ZyYW1lKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgdl9zdWJzID0gaF9zdWJzID0gMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgdl9zdWJzID0gaF9zdWJzID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCOgotICAgICAgdl9zdWJzID0gMTsKLSAgICAgIGhfc3VicyA9IDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQxQjoKLSAgICAgIHZfc3VicyA9IDE7Ci0gICAgICBoX3N1YnMgPSA0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgbWVtY3B5IChtYXRyaXgsCi0gICAgICBhbHBoYS0+aW5fc2R0diA/IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diA6Ci0gICAgICBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHYsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLSAgICAgIGEgPSBiX2FscGhhOwotICAgICAgeSA9IHNyY1lbMF07Ci0gICAgICB1ID0gc3JjVVswXTsKLSAgICAgIHYgPSBzcmNWWzBdOwotCi0gICAgICBkZXN0W3BbMF1dID0gYTsKLSAgICAgIHIgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeSwgdSwgdik7Ci0gICAgICBnID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHksIHUsIHYpOwotICAgICAgYiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5LCB1LCB2KTsKLSAgICAgIGRlc3RbcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFszXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLQotICAgICAgZGVzdCArPSA0OwotICAgICAgc3JjWSsrOwotICAgICAgaWYgKChqICsgMSkgJSBoX3N1YnMgPT0gMCkgewotICAgICAgICBzcmNVKys7Ci0gICAgICAgIHNyY1YrKzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzcmNZX3RtcCA9IHNyY1kgPSBzcmNZX3RtcCArIHlfc3RyaWRlOwotICAgIGlmICgoaSArIDEpICUgdl9zdWJzID09IDApIHsKLSAgICAgIHNyY1VfdG1wID0gc3JjVSA9IHNyY1VfdG1wICsgdXZfc3RyaWRlOwotICAgICAgc3JjVl90bXAgPSBzcmNWID0gc3JjVl90bXAgKyB1dl9zdHJpZGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNyY1UgPSBzcmNVX3RtcDsKLSAgICAgIHNyY1YgPSBzcmNWX3RtcDsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9jaHJvbWFfa2V5X3BsYW5hcl95dXZfYXJnYiAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGJfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChhbHBoYS0+YWxwaGEgKiAyNTUpLCAwLCAyNTUpOwotICBjb25zdCBndWludDggKnNyY1ksICpzcmNZX3RtcDsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNVLCAqc3JjVV90bXA7Ci0gIGNvbnN0IGd1aW50OCAqc3JjViwgKnNyY1ZfdG1wOwotICBnaW50IGksIGo7Ci0gIGdpbnQgYSwgeSwgdSwgdjsKLSAgZ2ludCByLCBnLCBiOwotICBnaW50IHlfc3RyaWRlLCB1dl9zdHJpZGU7Ci0gIGdpbnQgdl9zdWJzLCBoX3N1YnM7Ci0gIGdpbnQgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgZ2ludCBzbWF4ID0gMTI4ICsgYWxwaGEtPndoaXRlX3NlbnNpdGl2aXR5OwotICBnaW50OCBjYiA9IGFscGhhLT5jYiwgY3IgPSBhbHBoYS0+Y3I7Ci0gIGdpbnQ4IGtnID0gYWxwaGEtPmtnOwotICBndWludDggYWNjZXB0X2FuZ2xlX3RnID0gYWxwaGEtPmFjY2VwdF9hbmdsZV90ZzsKLSAgZ3VpbnQ4IGFjY2VwdF9hbmdsZV9jdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX2N0ZzsKLSAgZ3VpbnQ4IG9uZV9vdmVyX2tjID0gYWxwaGEtPm9uZV9vdmVyX2tjOwotICBndWludDgga2ZneV9zY2FsZSA9IGFscGhhLT5rZmd5X3NjYWxlOwotICBndWludCBub2lzZV9sZXZlbDIgPSBhbHBoYS0+bm9pc2VfbGV2ZWwyOwotICBnaW50IG1hdHJpeFsxMl07Ci0gIGdpbnQgcFs0XTsKLQotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIHBbMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDMpOwotICBwWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAwKTsKLSAgcFsyXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMSk7Ci0gIHBbM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDIpOwotCi0gIHlfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0gIHV2X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoaW5fZnJhbWUsIDEpOwotCi0gIHNyY1lfdG1wID0gc3JjWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgc3JjVV90bXAgPSBzcmNVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaW5fZnJhbWUsIDEpOwotICBzcmNWX3RtcCA9IHNyY1YgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMik7Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fRlJBTUVfRk9STUFUIChpbl9mcmFtZSkpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICAgIHZfc3VicyA9IGhfc3VicyA9IDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQ0NDoKLSAgICAgIHZfc3VicyA9IGhfc3VicyA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICAgIHZfc3VicyA9IDE7Ci0gICAgICBoX3N1YnMgPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICB2X3N1YnMgPSAxOwotICAgICAgaF9zdWJzID0gNDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIHJldHVybjsKLSAgfQotCi0gIG1lbWNweSAobWF0cml4LAotICAgICAgYWxwaGEtPmluX3NkdHYgPyBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9oZHR2LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICBhID0gYl9hbHBoYTsKLSAgICAgIHkgPSBzcmNZWzBdOwotICAgICAgdSA9IHNyY1VbMF0gLSAxMjg7Ci0gICAgICB2ID0gc3JjVlswXSAtIDEyODsKLQotICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChhLCAmeSwgJnUsICZ2LCBjciwgY2IsIHNtaW4sCi0gICAgICAgICAgc21heCwgYWNjZXB0X2FuZ2xlX3RnLCBhY2NlcHRfYW5nbGVfY3RnLAotICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLQotICAgICAgdSArPSAxMjg7Ci0gICAgICB2ICs9IDEyODsKLQotICAgICAgZGVzdFtwWzBdXSA9IGE7Ci0gICAgICByID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHksIHUsIHYpOwotICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5LCB1LCB2KTsKLSAgICAgIGIgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeSwgdSwgdik7Ci0gICAgICBkZXN0W3BbMV1dID0gQ0xBTVAgKHIsIDAsIDI1NSk7Ci0gICAgICBkZXN0W3BbMl1dID0gQ0xBTVAgKGcsIDAsIDI1NSk7Ci0gICAgICBkZXN0W3BbM11dID0gQ0xBTVAgKGIsIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3QgKz0gNDsKLSAgICAgIHNyY1krKzsKLSAgICAgIGlmICgoaiArIDEpICUgaF9zdWJzID09IDApIHsKLSAgICAgICAgc3JjVSsrOwotICAgICAgICBzcmNWKys7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3JjWV90bXAgPSBzcmNZID0gc3JjWV90bXAgKyB5X3N0cmlkZTsKLSAgICBpZiAoKGkgKyAxKSAlIHZfc3VicyA9PSAwKSB7Ci0gICAgICBzcmNVX3RtcCA9IHNyY1UgPSBzcmNVX3RtcCArIHV2X3N0cmlkZTsKLSAgICAgIHNyY1ZfdG1wID0gc3JjViA9IHNyY1ZfdG1wICsgdXZfc3RyaWRlOwotICAgIH0gZWxzZSB7Ci0gICAgICBzcmNVID0gc3JjVV90bXA7Ci0gICAgICBzcmNWID0gc3JjVl90bXA7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3BhY2tlZF80MjJfYXl1diAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGNvbnN0IGd1aW50OCAqc3JjOwotICBndWludDggKmRlc3Q7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCBzX2FscGhhID0gQ0xBTVAgKChnaW50KSAoYWxwaGEtPmFscGhhICogMjU1KSwgMCwgMjU1KTsKLSAgZ2ludCBpLCBqOwotICBnaW50IHksIHUsIHY7Ci0gIGdpbnQgcFs0XTsgICAgICAgICAgICAgICAgICAgIC8qIFkgVSBZIFYgKi8KLSAgZ2ludCBzcmNfc3RyaWRlOwotICBjb25zdCBndWludDggKnNyY190bXA7Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKTsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0KLSAgcFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKGluX2ZyYW1lLCAwKTsKLSAgcFsyXSA9IHBbMF0gKyAyOwotICBwWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDEpOwotICBwWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDIpOwotCi0gIGlmIChhbHBoYS0+aW5fc2R0diAhPSBhbHBoYS0+b3V0X3NkdHYpIHsKLSAgICBnaW50IG1hdHJpeFsxMl07Ci0KLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgYWxwaGEtPmluX3NkdHYgPyBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0IDoKLSAgICAgICAgY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgc3JjX3RtcCA9IHNyYzsKLQotICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoIC0gMTsgaiArPSAyKSB7Ci0gICAgICAgIGRlc3RbMF0gPSBzX2FscGhhOwotICAgICAgICBkZXN0WzRdID0gc19hbHBoYTsKLQotICAgICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotICAgICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotICAgICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotCi0gICAgICAgIGRlc3RbMV0gPSB5OwotICAgICAgICBkZXN0WzJdID0gdTsKLSAgICAgICAgZGVzdFszXSA9IHY7Ci0KLSAgICAgICAgeSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCBzcmNbcFsyXV0sIHNyY1twWzFdXSwgc3JjW3BbM11dKTsKLSAgICAgICAgdSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCBzcmNbcFsyXV0sIHNyY1twWzFdXSwgc3JjW3BbM11dKTsKLSAgICAgICAgdiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCBzcmNbcFsyXV0sIHNyY1twWzFdXSwgc3JjW3BbM11dKTsKLQotICAgICAgICBkZXN0WzVdID0geTsKLSAgICAgICAgZGVzdFs2XSA9IHU7Ci0gICAgICAgIGRlc3RbN10gPSB2OwotCi0gICAgICAgIGRlc3QgKz0gODsKLSAgICAgICAgc3JjICs9IDQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChqID09IHdpZHRoIC0gMSkgewotICAgICAgICBkZXN0WzBdID0gc19hbHBoYTsKLQotICAgICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotICAgICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotICAgICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotCi0gICAgICAgIGRlc3RbMV0gPSB5OwotICAgICAgICBkZXN0WzJdID0gdTsKLSAgICAgICAgZGVzdFszXSA9IHY7Ci0KLSAgICAgICAgZGVzdCArPSA0OwotICAgICAgfQotCi0gICAgICBzcmMgPSBzcmNfdG1wICsgc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBzcmNfdG1wID0gc3JjOwotCi0gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGggLSAxOyBqICs9IDIpIHsKLSAgICAgICAgZGVzdFswXSA9IHNfYWxwaGE7Ci0gICAgICAgIGRlc3RbNF0gPSBzX2FscGhhOwotCi0gICAgICAgIHkgPSBzcmNbcFswXV07Ci0gICAgICAgIHUgPSBzcmNbcFsxXV07Ci0gICAgICAgIHYgPSBzcmNbcFszXV07Ci0KLSAgICAgICAgZGVzdFsxXSA9IHk7Ci0gICAgICAgIGRlc3RbMl0gPSB1OwotICAgICAgICBkZXN0WzNdID0gdjsKLQotICAgICAgICB5ID0gc3JjW3BbMl1dOwotCi0gICAgICAgIGRlc3RbNV0gPSB5OwotICAgICAgICBkZXN0WzZdID0gdTsKLSAgICAgICAgZGVzdFs3XSA9IHY7Ci0KLSAgICAgICAgZGVzdCArPSA4OwotICAgICAgICBzcmMgKz0gNDsKLSAgICAgIH0KLQotICAgICAgaWYgKGogPT0gd2lkdGggLSAxKSB7Ci0gICAgICAgIGRlc3RbMF0gPSBzX2FscGhhOwotCi0gICAgICAgIHkgPSBzcmNbcFswXV07Ci0gICAgICAgIHUgPSBzcmNbcFsxXV07Ci0gICAgICAgIHYgPSBzcmNbcFszXV07Ci0KLSAgICAgICAgZGVzdFsxXSA9IHk7Ci0gICAgICAgIGRlc3RbMl0gPSB1OwotICAgICAgICBkZXN0WzNdID0gdjsKLQotICAgICAgICBkZXN0ICs9IDQ7Ci0gICAgICB9Ci0KLSAgICAgIHNyYyA9IHNyY190bXAgKyBzcmNfc3RyaWRlOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FscGhhX2Nocm9tYV9rZXlfcGFja2VkXzQyMl9heXV2IChjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSwgR3N0QWxwaGEgKiBhbHBoYSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpzcmM7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGksIGo7Ci0gIGdpbnQgYSwgeSwgdSwgdjsKLSAgZ2ludCBzbWluLCBzbWF4OwotICBnaW50IHBhID0gQ0xBTVAgKChnaW50KSAoYWxwaGEtPmFscGhhICogMjU1KSwgMCwgMjU1KTsKLSAgZ2ludDggY2IgPSBhbHBoYS0+Y2IsIGNyID0gYWxwaGEtPmNyOwotICBnaW50OCBrZyA9IGFscGhhLT5rZzsKLSAgZ3VpbnQ4IGFjY2VwdF9hbmdsZV90ZyA9IGFscGhhLT5hY2NlcHRfYW5nbGVfdGc7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfY3RnID0gYWxwaGEtPmFjY2VwdF9hbmdsZV9jdGc7Ci0gIGd1aW50OCBvbmVfb3Zlcl9rYyA9IGFscGhhLT5vbmVfb3Zlcl9rYzsKLSAgZ3VpbnQ4IGtmZ3lfc2NhbGUgPSBhbHBoYS0+a2ZneV9zY2FsZTsKLSAgZ3VpbnQgbm9pc2VfbGV2ZWwyID0gYWxwaGEtPm5vaXNlX2xldmVsMjsKLSAgZ2ludCBwWzRdOyAgICAgICAgICAgICAgICAgICAgLyogWSBVIFkgViAqLwotICBnaW50IHNyY19zdHJpZGU7Ci0gIGNvbnN0IGd1aW50OCAqc3JjX3RtcDsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIHNyY19zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLQotICBwWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBwWzJdID0gcFswXSArIDI7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMSk7Ci0gIHBbM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMik7Ci0KLSAgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgc21heCA9IDEyOCArIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eTsKLQotICBpZiAoYWxwaGEtPmluX3NkdHYgIT0gYWxwaGEtPm91dF9zZHR2KSB7Ci0gICAgZ2ludCBtYXRyaXhbMTJdOwotCi0gICAgbWVtY3B5IChtYXRyaXgsCi0gICAgICAgIGFscGhhLT5pbl9zZHR2ID8gY29nX3ljYmNyX3NkdHZfdG9feWNiY3JfaGR0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9oZHR2X3RvX3ljYmNyX3NkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICAgIHNyY190bXAgPSBzcmM7Ci0KLSAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aCAtIDE7IGogKz0gMikgewotICAgICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotICAgICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pIC0gMTI4OwotICAgICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1twWzBdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pIC0gMTI4OwotCi0gICAgICAgIGEgPSBjaHJvbWFfa2V5aW5nX3l1diAocGEsICZ5LCAmdSwgJnYsIGNyLCBjYiwKLSAgICAgICAgICAgIHNtaW4sIHNtYXgsIGFjY2VwdF9hbmdsZV90ZywgYWNjZXB0X2FuZ2xlX2N0ZywKLSAgICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLQotICAgICAgICBkZXN0WzBdID0gYTsKLSAgICAgICAgZGVzdFsxXSA9IHk7Ci0gICAgICAgIGRlc3RbMl0gPSB1ICsgMTI4OwotICAgICAgICBkZXN0WzNdID0gdiArIDEyODsKLQotICAgICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1twWzJdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pOwotICAgICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1twWzJdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pIC0gMTI4OwotICAgICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1twWzJdXSwgc3JjW3BbMV1dLCBzcmNbcFszXV0pIC0gMTI4OwotCi0gICAgICAgIGEgPSBjaHJvbWFfa2V5aW5nX3l1diAocGEsICZ5LCAmdSwgJnYsIGNyLCBjYiwKLSAgICAgICAgICAgIHNtaW4sIHNtYXgsIGFjY2VwdF9hbmdsZV90ZywgYWNjZXB0X2FuZ2xlX2N0ZywKLSAgICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLQotICAgICAgICBkZXN0WzRdID0gYTsKLSAgICAgICAgZGVzdFs1XSA9IHk7Ci0gICAgICAgIGRlc3RbNl0gPSB1ICsgMTI4OwotICAgICAgICBkZXN0WzddID0gdiArIDEyODsKLQotICAgICAgICBkZXN0ICs9IDg7Ci0gICAgICAgIHNyYyArPSA0OwotICAgICAgfQotCi0gICAgICBpZiAoaiA9PSB3aWR0aCAtIDEpIHsKLSAgICAgICAgeSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCBzcmNbcFswXV0sIHNyY1twWzFdXSwgc3JjW3BbM11dKTsKLSAgICAgICAgdSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCBzcmNbcFswXV0sIHNyY1twWzFdXSwgc3JjW3BbM11dKSAtIDEyODsKLSAgICAgICAgdiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCBzcmNbcFswXV0sIHNyY1twWzFdXSwgc3JjW3BbM11dKSAtIDEyODsKLQotICAgICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKHBhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0KLSAgICAgICAgZGVzdFswXSA9IGE7Ci0gICAgICAgIGRlc3RbMV0gPSB5OwotICAgICAgICBkZXN0WzJdID0gdSArIDEyODsKLSAgICAgICAgZGVzdFszXSA9IHYgKyAxMjg7Ci0KLSAgICAgICAgZGVzdCArPSA0OwotICAgICAgfQotCi0gICAgICBzcmMgPSBzcmNfdG1wICsgc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBzcmNfdG1wID0gc3JjOwotCi0gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGggLSAxOyBqICs9IDIpIHsKLSAgICAgICAgeSA9IHNyY1twWzBdXTsKLSAgICAgICAgdSA9IHNyY1twWzFdXSAtIDEyODsKLSAgICAgICAgdiA9IHNyY1twWzNdXSAtIDEyODsKLQotICAgICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKHBhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0KLSAgICAgICAgZGVzdFswXSA9IGE7Ci0gICAgICAgIGRlc3RbMV0gPSB5OwotICAgICAgICBkZXN0WzJdID0gdSArIDEyODsKLSAgICAgICAgZGVzdFszXSA9IHYgKyAxMjg7Ci0KLSAgICAgICAgeSA9IHNyY1twWzJdXTsKLSAgICAgICAgdSA9IHNyY1twWzFdXSAtIDEyODsKLSAgICAgICAgdiA9IHNyY1twWzNdXSAtIDEyODsKLQotICAgICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKHBhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0KLSAgICAgICAgZGVzdFs0XSA9IGE7Ci0gICAgICAgIGRlc3RbNV0gPSB5OwotICAgICAgICBkZXN0WzZdID0gdSArIDEyODsKLSAgICAgICAgZGVzdFs3XSA9IHYgKyAxMjg7Ci0KLSAgICAgICAgZGVzdCArPSA4OwotICAgICAgICBzcmMgKz0gNDsKLSAgICAgIH0KLQotICAgICAgaWYgKGogPT0gd2lkdGggLSAxKSB7Ci0gICAgICAgIHkgPSBzcmNbcFswXV07Ci0gICAgICAgIHUgPSBzcmNbcFsxXV0gLSAxMjg7Ci0gICAgICAgIHYgPSBzcmNbcFszXV0gLSAxMjg7Ci0KLSAgICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChwYSwgJnksICZ1LCAmdiwgY3IsIGNiLAotICAgICAgICAgICAgc21pbiwgc21heCwgYWNjZXB0X2FuZ2xlX3RnLCBhY2NlcHRfYW5nbGVfY3RnLAotICAgICAgICAgICAgb25lX292ZXJfa2MsIGtmZ3lfc2NhbGUsIGtnLCBub2lzZV9sZXZlbDIpOwotCi0gICAgICAgIGRlc3RbMF0gPSBhOwotICAgICAgICBkZXN0WzFdID0geTsKLSAgICAgICAgZGVzdFsyXSA9IHUgKyAxMjg7Ci0gICAgICAgIGRlc3RbM10gPSB2ICsgMTI4OwotCi0gICAgICAgIGRlc3QgKz0gNDsKLSAgICAgIH0KLQotICAgICAgc3JjID0gc3JjX3RtcCArIHNyY19zdHJpZGU7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3BhY2tlZF80MjJfYXJnYiAoY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGNvbnN0IGd1aW50OCAqc3JjOwotICBndWludDggKmRlc3Q7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCBzX2FscGhhID0gQ0xBTVAgKChnaW50KSAoYWxwaGEtPmFscGhhICogMjU1KSwgMCwgMjU1KTsKLSAgZ2ludCBpLCBqOwotICBnaW50IHBbNF0sIG9bNF07Ci0gIGdpbnQgc3JjX3N0cmlkZTsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNfdG1wOwotICBnaW50IG1hdHJpeFsxMl07Ci0gIGdpbnQgciwgZywgYjsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIHNyY19zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLQotICBvWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBvWzJdID0gb1swXSArIDI7Ci0gIG9bMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMSk7Ci0gIG9bM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMik7Ci0KLSAgcFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMyk7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDApOwotICBwWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAxKTsKLSAgcFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMik7Ci0KLSAgbWVtY3B5IChtYXRyaXgsCi0gICAgICBhbHBoYS0+aW5fc2R0diA/IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diA6Ci0gICAgICBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHYsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgc3JjX3RtcCA9IHNyYzsKLQotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aCAtIDE7IGogKz0gMikgewotICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCBzcmNbb1swXV0sIHNyY1tvWzFdXSwgc3JjW29bM11dKTsKLSAgICAgIGcgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgc3JjW29bMF1dLCBzcmNbb1sxXV0sIHNyY1tvWzNdXSk7Ci0gICAgICBiID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1tvWzBdXSwgc3JjW29bMV1dLCBzcmNbb1szXV0pOwotCi0gICAgICBkZXN0W3BbMF1dID0gc19hbHBoYTsKLSAgICAgIGRlc3RbcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFszXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLQotICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCBzcmNbb1syXV0sIHNyY1tvWzFdXSwgc3JjW29bM11dKTsKLSAgICAgIGcgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgc3JjW29bMl1dLCBzcmNbb1sxXV0sIHNyY1tvWzNdXSk7Ci0gICAgICBiID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1tvWzJdXSwgc3JjW29bMV1dLCBzcmNbb1szXV0pOwotCi0gICAgICBkZXN0WzQgKyBwWzBdXSA9IHNfYWxwaGE7Ci0gICAgICBkZXN0WzQgKyBwWzFdXSA9IENMQU1QIChyLCAwLCAyNTUpOwotICAgICAgZGVzdFs0ICsgcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbNCArIHBbM11dID0gQ0xBTVAgKGIsIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3QgKz0gODsKLSAgICAgIHNyYyArPSA0OwotICAgIH0KLQotICAgIGlmIChqID09IHdpZHRoIC0gMSkgewotICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCBzcmNbb1swXV0sIHNyY1tvWzFdXSwgc3JjW29bM11dKTsKLSAgICAgIGcgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgc3JjW29bMF1dLCBzcmNbb1sxXV0sIHNyY1tvWzNdXSk7Ci0gICAgICBiID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1tvWzBdXSwgc3JjW29bMV1dLCBzcmNbb1szXV0pOwotCi0gICAgICBkZXN0W3BbMF1dID0gc19hbHBoYTsKLSAgICAgIGRlc3RbcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFszXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLQotICAgICAgZGVzdCArPSA0OwotICAgIH0KLQotICAgIHNyYyA9IHNyY190bXAgKyBzcmNfc3RyaWRlOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY2hyb21hX2tleV9wYWNrZWRfNDIyX2FyZ2IgKGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RBbHBoYSAqIGFscGhhKQotewotICBjb25zdCBndWludDggKnNyYzsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBhLCB5LCB1LCB2OwotICBnaW50IHIsIGcsIGI7Ci0gIGdpbnQgc21pbiwgc21heDsKLSAgZ2ludCBwYSA9IENMQU1QICgoZ2ludCkgKGFscGhhLT5hbHBoYSAqIDI1NSksIDAsIDI1NSk7Ci0gIGdpbnQ4IGNiID0gYWxwaGEtPmNiLCBjciA9IGFscGhhLT5jcjsKLSAgZ2ludDgga2cgPSBhbHBoYS0+a2c7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfdGcgPSBhbHBoYS0+YWNjZXB0X2FuZ2xlX3RnOwotICBndWludDggYWNjZXB0X2FuZ2xlX2N0ZyA9IGFscGhhLT5hY2NlcHRfYW5nbGVfY3RnOwotICBndWludDggb25lX292ZXJfa2MgPSBhbHBoYS0+b25lX292ZXJfa2M7Ci0gIGd1aW50OCBrZmd5X3NjYWxlID0gYWxwaGEtPmtmZ3lfc2NhbGU7Ci0gIGd1aW50IG5vaXNlX2xldmVsMiA9IGFscGhhLT5ub2lzZV9sZXZlbDI7Ci0gIGdpbnQgcFs0XSwgb1s0XTsKLSAgZ2ludCBzcmNfc3RyaWRlOwotICBjb25zdCBndWludDggKnNyY190bXA7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIHNyY19zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLQotICBvWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAoaW5fZnJhbWUsIDApOwotICBvWzJdID0gb1swXSArIDI7Ci0gIG9bMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMSk7Ci0gIG9bM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChpbl9mcmFtZSwgMik7Ci0KLSAgcFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMyk7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QT0ZGU0VUIChvdXRfZnJhbWUsIDApOwotICBwWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUE9GRlNFVCAob3V0X2ZyYW1lLCAxKTsKLSAgcFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BPRkZTRVQgKG91dF9mcmFtZSwgMik7Ci0KLSAgbWVtY3B5IChtYXRyaXgsCi0gICAgICBhbHBoYS0+aW5fc2R0diA/IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diA6Ci0gICAgICBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHYsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgc21pbiA9IDEyOCAtIGFscGhhLT5ibGFja19zZW5zaXRpdml0eTsKLSAgc21heCA9IDEyOCArIGFscGhhLT53aGl0ZV9zZW5zaXRpdml0eTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBzcmNfdG1wID0gc3JjOwotCi0gICAgZm9yIChqID0gMDsgaiA8IHdpZHRoIC0gMTsgaiArPSAyKSB7Ci0gICAgICB5ID0gc3JjW29bMF1dOwotICAgICAgdSA9IHNyY1tvWzFdXSAtIDEyODsKLSAgICAgIHYgPSBzcmNbb1szXV0gLSAxMjg7Ci0KLSAgICAgIGEgPSBjaHJvbWFfa2V5aW5nX3l1diAocGEsICZ5LCAmdSwgJnYsIGNyLCBjYiwKLSAgICAgICAgICBzbWluLCBzbWF4LCBhY2NlcHRfYW5nbGVfdGcsIGFjY2VwdF9hbmdsZV9jdGcsCi0gICAgICAgICAgb25lX292ZXJfa2MsIGtmZ3lfc2NhbGUsIGtnLCBub2lzZV9sZXZlbDIpOwotICAgICAgdSArPSAxMjg7Ci0gICAgICB2ICs9IDEyODsKLQotICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5LCB1LCB2KTsKLSAgICAgIGcgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeSwgdSwgdik7Ci0gICAgICBiID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHksIHUsIHYpOwotCi0gICAgICBkZXN0W3BbMF1dID0gYTsKLSAgICAgIGRlc3RbcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRlc3RbcFszXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLQotICAgICAgeSA9IHNyY1tvWzJdXTsKLSAgICAgIHUgPSBzcmNbb1sxXV0gLSAxMjg7Ci0gICAgICB2ID0gc3JjW29bM11dIC0gMTI4OwotCi0gICAgICBhID0gY2hyb21hX2tleWluZ195dXYgKHBhLCAmeSwgJnUsICZ2LCBjciwgY2IsCi0gICAgICAgICAgc21pbiwgc21heCwgYWNjZXB0X2FuZ2xlX3RnLCBhY2NlcHRfYW5nbGVfY3RnLAotICAgICAgICAgIG9uZV9vdmVyX2tjLCBrZmd5X3NjYWxlLCBrZywgbm9pc2VfbGV2ZWwyKTsKLSAgICAgIHUgKz0gMTI4OwotICAgICAgdiArPSAxMjg7Ci0KLSAgICAgIHIgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeSwgdSwgdik7Ci0gICAgICBnID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHksIHUsIHYpOwotICAgICAgYiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5LCB1LCB2KTsKLQotICAgICAgZGVzdFs0ICsgcFswXV0gPSBhOwotICAgICAgZGVzdFs0ICsgcFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRlc3RbNCArIHBbMl1dID0gQ0xBTVAgKGcsIDAsIDI1NSk7Ci0gICAgICBkZXN0WzQgKyBwWzNdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotCi0gICAgICBkZXN0ICs9IDg7Ci0gICAgICBzcmMgKz0gNDsKLSAgICB9Ci0KLSAgICBpZiAoaiA9PSB3aWR0aCAtIDEpIHsKLSAgICAgIHkgPSBzcmNbb1swXV07Ci0gICAgICB1ID0gc3JjW29bMV1dIC0gMTI4OwotICAgICAgdiA9IHNyY1tvWzNdXSAtIDEyODsKLQotICAgICAgYSA9IGNocm9tYV9rZXlpbmdfeXV2IChwYSwgJnksICZ1LCAmdiwgY3IsIGNiLAotICAgICAgICAgIHNtaW4sIHNtYXgsIGFjY2VwdF9hbmdsZV90ZywgYWNjZXB0X2FuZ2xlX2N0ZywKLSAgICAgICAgICBvbmVfb3Zlcl9rYywga2ZneV9zY2FsZSwga2csIG5vaXNlX2xldmVsMik7Ci0gICAgICB1ICs9IDEyODsKLSAgICAgIHYgKz0gMTI4OwotCi0gICAgICByID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHksIHUsIHYpOwotICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5LCB1LCB2KTsKLSAgICAgIGIgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeSwgdSwgdik7Ci0KLSAgICAgIGRlc3RbcFswXV0gPSBhOwotICAgICAgZGVzdFtwWzFdXSA9IENMQU1QIChyLCAwLCAyNTUpOwotICAgICAgZGVzdFtwWzJdXSA9IENMQU1QIChnLCAwLCAyNTUpOwotICAgICAgZGVzdFtwWzNdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotCi0gICAgICBkZXN0ICs9IDQ7Ci0gICAgfQotCi0gICAgc3JjID0gc3JjX3RtcCArIHNyY19zdHJpZGU7Ci0gIH0KLX0KLQotLyogUHJvdGVjdGVkIHdpdGggdGhlIGFscGhhIGxvY2sgKi8KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfaW5pdF9wYXJhbXNfZnVsbCAoR3N0QWxwaGEgKiBhbHBoYSwKLSAgICBjb25zdCBHc3RWaWRlb0Zvcm1hdEluZm8gKiBpbl9pbmZvLCBjb25zdCBHc3RWaWRlb0Zvcm1hdEluZm8gKiBvdXRfaW5mbykKLXsKLSAgZ2Zsb2F0IGtnbDsKLSAgZ2Zsb2F0IHRtcDsKLSAgZ2Zsb2F0IHRtcDEsIHRtcDI7Ci0gIGdmbG9hdCB5OwotICBndWludCB0YXJnZXRfciA9IGFscGhhLT50YXJnZXRfcjsKLSAgZ3VpbnQgdGFyZ2V0X2cgPSBhbHBoYS0+dGFyZ2V0X2c7Ci0gIGd1aW50IHRhcmdldF9iID0gYWxwaGEtPnRhcmdldF9iOwotICBjb25zdCBnaW50ICptYXRyaXg7Ci0KLSAgc3dpdGNoIChhbHBoYS0+bWV0aG9kKSB7Ci0gICAgY2FzZSBBTFBIQV9NRVRIT0RfR1JFRU46Ci0gICAgICB0YXJnZXRfciA9IDA7Ci0gICAgICB0YXJnZXRfZyA9IDI1NTsKLSAgICAgIHRhcmdldF9iID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxQSEFfTUVUSE9EX0JMVUU6Ci0gICAgICB0YXJnZXRfciA9IDA7Ci0gICAgICB0YXJnZXRfZyA9IDA7Ci0gICAgICB0YXJnZXRfYiA9IDI1NTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIFJHQi0+UkdCOiBjb252ZXJ0IHRvIFNEVFYgWVVWLCBjaHJvbWEga2V5aW5nLCBjb252ZXJ0IGJhY2sKLSAgICogWVVWLT5SR0I6IGNocm9tYSBrZXlpbmcsIGNvbnZlcnQgdG8gUkdCCi0gICAqIFJHQi0+WVVWOiBjb252ZXJ0IHRvIFlVViwgY2hyb21hIGtleWluZwotICAgKiBZVVYtPllVVjogY29udmVydCBtYXRyaXgsIGNocm9tYSBrZXlpbmcKLSAgICovCi0gIGlmIChHU1RfVklERU9fRk9STUFUX0lORk9fSVNfUkdCIChpbl9pbmZvKQotICAgICAgJiYgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0lTX1JHQiAob3V0X2luZm8pKQotICAgIG1hdHJpeCA9IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0djsKLSAgZWxzZSBpZiAoR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0lTX1lVViAoaW5faW5mbykKLSAgICAgICYmIEdTVF9WSURFT19GT1JNQVRfSU5GT19JU19SR0IgKG91dF9pbmZvKSkKLSAgICBtYXRyaXggPQotICAgICAgICAoYWxwaGEtPmluX3NkdHYpID8gY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgICAgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9oZHR2OwotICBlbHNlIGlmIChHU1RfVklERU9fRk9STUFUX0lORk9fSVNfUkdCIChpbl9pbmZvKQotICAgICAgJiYgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0lTX1lVViAob3V0X2luZm8pKQotICAgIG1hdHJpeCA9Ci0gICAgICAgIChhbHBoYS0+b3V0X3NkdHYpID8gY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgICAgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9oZHR2OwotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB5dXYgLT4geXV2ICovCi0gICAgbWF0cml4ID0KLSAgICAgICAgKGFscGhhLT5vdXRfc2R0dikgPyBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgICBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X2hkdHY7Ci0KLSAgeSA9IChtYXRyaXhbMF0gKiAoKGdpbnQpIHRhcmdldF9yKSArCi0gICAgICBtYXRyaXhbMV0gKiAoKGdpbnQpIHRhcmdldF9nKSArCi0gICAgICBtYXRyaXhbMl0gKiAoKGdpbnQpIHRhcmdldF9iKSArIG1hdHJpeFszXSkgPj4gODsKLSAgLyogQ2IsQ3Igd2l0aG91dCBvZmZzZXQgaGVyZSBiZWNhdXNlIHRoZSBjaHJvbWEga2V5aW5nCi0gICAqIHdvcmtzIHdpdGggdGhlbSBiZWluZyBpbiByYW5nZSBbLTEyOCwxMjddCi0gICAqLwotICB0bXAxID0KLSAgICAgIChtYXRyaXhbNF0gKiAoKGdpbnQpIHRhcmdldF9yKSArCi0gICAgICBtYXRyaXhbNV0gKiAoKGdpbnQpIHRhcmdldF9nKSArIG1hdHJpeFs2XSAqICgoZ2ludCkgdGFyZ2V0X2IpKSA+PiA4OwotICB0bXAyID0KLSAgICAgIChtYXRyaXhbOF0gKiAoKGdpbnQpIHRhcmdldF9yKSArCi0gICAgICBtYXRyaXhbOV0gKiAoKGdpbnQpIHRhcmdldF9nKSArIG1hdHJpeFsxMF0gKiAoKGdpbnQpIHRhcmdldF9iKSkgPj4gODsKLQotICBrZ2wgPSBzcXJ0ICh0bXAxICogdG1wMSArIHRtcDIgKiB0bXAyKTsKLSAgYWxwaGEtPmNiID0gMTI3ICogKHRtcDEgLyBrZ2wpOwotICBhbHBoYS0+Y3IgPSAxMjcgKiAodG1wMiAvIGtnbCk7Ci0KLSAgdG1wID0gMTUgKiB0YW4gKE1fUEkgKiBhbHBoYS0+YW5nbGUgLyAxODApOwotICB0bXAgPSBNSU4gKHRtcCwgMjU1KTsKLSAgYWxwaGEtPmFjY2VwdF9hbmdsZV90ZyA9IHRtcDsKLSAgdG1wID0gMTUgLyB0YW4gKE1fUEkgKiBhbHBoYS0+YW5nbGUgLyAxODApOwotICB0bXAgPSBNSU4gKHRtcCwgMjU1KTsKLSAgYWxwaGEtPmFjY2VwdF9hbmdsZV9jdGcgPSB0bXA7Ci0gIHRtcCA9IDEgLyAoa2dsKTsKLSAgYWxwaGEtPm9uZV9vdmVyX2tjID0gMjU1ICogMiAqIHRtcCAtIDI1NTsKLSAgdG1wID0gMTUgKiB5IC8ga2dsOwotICB0bXAgPSBNSU4gKHRtcCwgMjU1KTsKLSAgYWxwaGEtPmtmZ3lfc2NhbGUgPSB0bXA7Ci0gIGFscGhhLT5rZyA9IE1JTiAoa2dsLCAxMjcpOwotCi0gIGFscGhhLT5ub2lzZV9sZXZlbDIgPSBhbHBoYS0+bm9pc2VfbGV2ZWwgKiBhbHBoYS0+bm9pc2VfbGV2ZWw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfaW5pdF9wYXJhbXMgKEdzdEFscGhhICogYWxwaGEpCi17Ci0gIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqZmluZm9faW4sICpmaW5mb19vdXQ7Ci0KLSAgZmluZm9faW4gPSBHU1RfVklERU9fRklMVEVSIChhbHBoYSktPmluX2luZm8uZmluZm87Ci0gIGZpbmZvX291dCA9IEdTVF9WSURFT19GSUxURVIgKGFscGhhKS0+b3V0X2luZm8uZmluZm87Ci0KLSAgaWYgKGZpbmZvX2luICE9IE5VTEwgJiYgZmluZm9fb3V0ICE9IE5VTEwpIHsKLSAgICBnc3RfYWxwaGFfaW5pdF9wYXJhbXNfZnVsbCAoYWxwaGEsIGZpbmZvX2luLCBmaW5mb19vdXQpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFscGhhLCAidmlkZW8gZm9ybWF0cyBub3Qgc2V0IHlldCIpOwotICB9Ci19Ci0KLS8qIFByb3RlY3RlZCB3aXRoIHRoZSBhbHBoYSBsb2NrICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbHBoYV9zZXRfcHJvY2Vzc19mdW5jdGlvbl9mdWxsIChHc3RBbHBoYSAqIGFscGhhLCBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLAotICAgIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKQotewotICBhbHBoYS0+cHJvY2VzcyA9IE5VTEw7Ci0KLSAgc3dpdGNoIChhbHBoYS0+bWV0aG9kKSB7Ci0gICAgY2FzZSBBTFBIQV9NRVRIT0RfU0VUOgotICAgICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKG91dF9pbmZvKSkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgICAgICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbykpIHsKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9zZXRfYXl1dl9heXV2OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gZ3N0X2FscGhhX3NldF9wbGFuYXJfeXV2X2F5dXY7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lVWTI6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVZZVToKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9zZXRfcGFja2VkXzQyMl9heXV2OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9zZXRfYXJnYl9heXV2OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94UkdCOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hCR1I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCeDoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1J4OgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1I6Ci0gICAgICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gZ3N0X2FscGhhX3NldF9yZ2JfYXl1djsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICAgIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbl9pbmZvKSkgewotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gZ3N0X2FscGhhX3NldF9heXV2X2FyZ2I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWMTI6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQxQjoKLSAgICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBnc3RfYWxwaGFfc2V0X3BsYW5hcl95dXZfYXJnYjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVVZMjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gZ3N0X2FscGhhX3NldF9wYWNrZWRfNDIyX2FyZ2I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gZ3N0X2FscGhhX3NldF9hcmdiX2FyZ2I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0J4OgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUjoKLSAgICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBnc3RfYWxwaGFfc2V0X3JnYl9hcmdiOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxQSEFfTUVUSE9EX0dSRUVOOgotICAgIGNhc2UgQUxQSEFfTUVUSE9EX0JMVUU6Ci0gICAgY2FzZSBBTFBIQV9NRVRIT0RfQ1VTVE9NOgotICAgICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKG91dF9pbmZvKSkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgICAgICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbykpIHsKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9jaHJvbWFfa2V5X2F5dXZfYXl1djsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQ0NDoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9jaHJvbWFfa2V5X3BsYW5hcl95dXZfYXl1djsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVVZMjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gZ3N0X2FscGhhX2Nocm9tYV9rZXlfcGFja2VkXzQyMl9heXV2OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9jaHJvbWFfa2V5X2FyZ2JfYXl1djsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94QkdSOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9jaHJvbWFfa2V5X3JnYl9heXV2OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICAgICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKGluX2luZm8pKSB7Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBnc3RfYWxwaGFfY2hyb21hX2tleV9heXV2X2FyZ2I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWMTI6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQxQjoKLSAgICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBnc3RfYWxwaGFfY2hyb21hX2tleV9wbGFuYXJfeXV2X2FyZ2I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lVWTI6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVZZVToKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IGdzdF9hbHBoYV9jaHJvbWFfa2V5X3BhY2tlZF80MjJfYXJnYjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBnc3RfYWxwaGFfY2hyb21hX2tleV9hcmdiX2FyZ2I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0J4OgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUjoKLSAgICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBnc3RfYWxwaGFfY2hyb21hX2tleV9yZ2JfYXJnYjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIGFscGhhLT5wcm9jZXNzICE9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKEdzdEFscGhhICogYWxwaGEpCi17Ci0gIEdzdFZpZGVvSW5mbyAqaW5mb19pbiwgKmluZm9fb3V0OwotCi0gIGluZm9faW4gPSAmR1NUX1ZJREVPX0ZJTFRFUiAoYWxwaGEpLT5pbl9pbmZvOwotICBpbmZvX291dCA9ICZHU1RfVklERU9fRklMVEVSIChhbHBoYSktPm91dF9pbmZvOwotCi0gIGlmIChpbmZvX2luLT5maW5mbyAhPSBOVUxMICYmIGluZm9fb3V0LT5maW5mbyAhPSBOVUxMKSB7Ci0gICAgZ3N0X2FscGhhX3NldF9wcm9jZXNzX2Z1bmN0aW9uX2Z1bGwgKGFscGhhLCBpbmZvX2luLCBpbmZvX291dCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWxwaGEsICJ2aWRlbyBmb3JtYXRzIG5vdCBzZXQgeWV0Iik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbHBoYV9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogYnRyYW5zLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEFscGhhICphbHBoYSA9IEdTVF9BTFBIQSAoYnRyYW5zKTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICB0aW1lc3RhbXAgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpOwotICBHU1RfTE9HICgiR290IHN0cmVhbSB0aW1lIG9mICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChhbHBoYSksIHRpbWVzdGFtcCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYWxwaGFfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIGZpbHRlciwgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIEdzdEFscGhhICphbHBoYSA9IEdTVF9BTFBIQSAoZmlsdGVyKTsKLQotICBHU1RfQUxQSEFfTE9DSyAoYWxwaGEpOwotCi0gIGlmIChHX1VOTElLRUxZICghYWxwaGEtPnByb2Nlc3MpKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgYWxwaGEtPnByb2Nlc3MgKGluX2ZyYW1lLCBvdXRfZnJhbWUsIGFscGhhKTsKLQotICBHU1RfQUxQSEFfVU5MT0NLIChhbHBoYSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotbm90X25lZ290aWF0ZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhbHBoYSwgIk5vdCBuZWdvdGlhdGVkIHlldCIpOwotICAgIEdTVF9BTFBIQV9VTkxPQ0sgKGFscGhhKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImFscGhhIiwgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfQUxQSEEpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgYWxwaGEsCi0gICAgImFkZHMgYW4gYWxwaGEgY2hhbm5lbCB0byB2aWRlbyAtIGNvbnN0YW50IG9yIHZpYSBjaHJvbWEta2V5aW5nIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9hbHBoYS9nc3RhbHBoYS5oIGIvZ3N0L2FscGhhL2dzdGFscGhhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OGZiNzguLjAwMDAwMDAKLS0tIGEvZ3N0L2FscGhhL2dzdGFscGhhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZC5oZXJ2ZXlAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQUxQSEFfSF9fCi0jZGVmaW5lIF9fR1NUX0FMUEhBX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQUxQSEEgXAotICAoZ3N0X2FscGhhX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BTFBIQShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FMUEhBLEdzdEFscGhhKSkKLSNkZWZpbmUgR1NUX0FMUEhBX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FMUEhBLEdzdEFscGhhQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQUxQSEEob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BTFBIQSkpCi0jZGVmaW5lIEdTVF9JU19BTFBIQV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9BTFBIQSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBbHBoYSBHc3RBbHBoYTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBbHBoYUNsYXNzIEdzdEFscGhhQ2xhc3M7Ci0KLS8qKiAKLSAqIEdzdEFscGhhTWV0aG9kOgotICogQEFMUEhBX01FVEhPRF9TRVQ6IFNldC9hZGp1c3QgYWxwaGEgY2hhbm5lbAotICogQEFMUEhBX01FVEhPRF9HUkVFTjogQ2hyb21hIEtleSBncmVlbgotICogQEFMUEhBX01FVEhPRF9CTFVFOiBDaHJvbWEgS2V5IGJsdWUKLSAqIEBBTFBIQV9NRVRIT0RfQ1VTVE9NOiBDaHJvbWEgS2V5IG9uIHRhcmdldF9yL2cvYgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgQUxQSEFfTUVUSE9EX1NFVCwKLSAgQUxQSEFfTUVUSE9EX0dSRUVOLAotICBBTFBIQV9NRVRIT0RfQkxVRSwKLSAgQUxQSEFfTUVUSE9EX0NVU1RPTSwKLX0KLUdzdEFscGhhTWV0aG9kOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfYWxwaGFfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2FscGhhX2RlYnVnCi0KLXN0cnVjdCBfR3N0QWxwaGEKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgcGFyZW50OwotCi0gIC8qIDxwcml2YXRlPiAqLwotCi0gIC8qIGNhcHMgKi8KLSAgR011dGV4IGxvY2s7Ci0KLSAgZ2Jvb2xlYW4gaW5fc2R0diwgb3V0X3NkdHY7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBnZG91YmxlIGFscGhhOwotCi0gIGd1aW50IHRhcmdldF9yOwotICBndWludCB0YXJnZXRfZzsKLSAgZ3VpbnQgdGFyZ2V0X2I7Ci0KLSAgR3N0QWxwaGFNZXRob2QgbWV0aG9kOwotCi0gIGdmbG9hdCBhbmdsZTsKLSAgZ2Zsb2F0IG5vaXNlX2xldmVsOwotICBndWludCBibGFja19zZW5zaXRpdml0eTsKLSAgZ3VpbnQgd2hpdGVfc2Vuc2l0aXZpdHk7Ci0KLSAgZ2Jvb2xlYW4gcHJlZmVyX3Bhc3N0aHJvdWdoOwotCi0gIC8qIHByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgdm9pZCAoKnByb2Nlc3MpIChjb25zdCBHc3RWaWRlb0ZyYW1lICppbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqb3V0X2ZyYW1lLCBHc3RBbHBoYSAqYWxwaGEpOwotCi0gIC8qIHByZWNhbGN1bGF0ZWQgdmFsdWVzIGZvciBjaHJvbWEga2V5aW5nICovCi0gIGdpbnQ4IGNiLCBjcjsKLSAgZ2ludDgga2c7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfdGc7Ci0gIGd1aW50OCBhY2NlcHRfYW5nbGVfY3RnOwotICBndWludDggb25lX292ZXJfa2M7Ci0gIGd1aW50OCBrZmd5X3NjYWxlOwotICBndWludCBub2lzZV9sZXZlbDI7Ci19OwotCi1zdHJ1Y3QgX0dzdEFscGhhQ2xhc3MKLXsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfYWxwaGFfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQUxQSEFfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jIGIvZ3N0L2FscGhhL2dzdGFscGhhY29sb3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4MmU3NC4uMDAwMDAwMAotLS0gYS9nc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hbHBoYWNvbG9yCi0gKgotICogVGhlIGFscGhhY29sb3IgZWxlbWVudCBkb2VzIG1lbW9yeS1lZmZpY2llbnQgKGluLXBsYWNlKSBjb2xvdXJzcGFjZQotICogY29udmVyc2lvbiBmcm9tIFJHQkEgdG8gQVlVViBvciBBWVVWIHRvIFJHQkEgd2hpbGUgcHJlc2VydmluZyB0aGUKLSAqIGFscGhhIGNoYW5uZWwuCi0gKgotICogU2FtcGxlIHBpcGVsaW5lOgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhICJ2aWRlby94LXJhdyxmb3JtYXQ9KGZvdXJjYylBWVVWIiAhIFwKLSAqICAgYWxwaGFjb2xvciAhIHZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsKLSAqIF18Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YWxwaGFjb2xvci5oIgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGFscGhhX2NvbG9yX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGFscGhhX2NvbG9yX2RlYnVnCi0KLS8qIGVsZW1lbnRmYWN0b3J5IGluZm9ybWF0aW9uICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgUkdCQSwgQkdSQSwgQVJHQiwgQUJHUiwgQVlVViB9IikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IFJHQkEsIEJHUkEsIEFSR0IsIEFCR1IsIEFZVVYgfSIpKQotICAgICk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdEFscGhhQ29sb3IsIGdzdF9hbHBoYV9jb2xvciwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9hbHBoYV9jb2xvcl90cmFuc2Zvcm1fY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIGJ0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYWxwaGFfY29sb3Jfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLAotICAgIEdzdENhcHMgKiBpbmNhcHMsIEdzdFZpZGVvSW5mbyAqIGluX2luZm8sIEdzdENhcHMgKiBvdXRjYXBzLAotICAgIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hbHBoYV9jb2xvcl90cmFuc2Zvcm1fZnJhbWVfaXAgKEdzdFZpZGVvRmlsdGVyICoKLSAgICBmaWx0ZXIsIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxwaGFfY29sb3JfY2xhc3NfaW5pdCAoR3N0QWxwaGFDb2xvckNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqZ3N0YmFzZXRyYW5zZm9ybV9jbGFzcyA9Ci0gICAgICAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICpnc3R2aWRlb2ZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChhbHBoYV9jb2xvcl9kZWJ1ZywgImFscGhhY29sb3IiLCAwLAotICAgICAgIkFSR0I8LT5BWVVWIGNvbG9yc3BhY2UgY29udmVyc2lvbiBwcmVzZXJ2aW5nIHRoZSBhbHBoYSBjaGFubmVscyIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBbHBoYSBjb2xvciBmaWx0ZXIiLAotICAgICAgIkZpbHRlci9Db252ZXJ0ZXIvVmlkZW8iLAotICAgICAgIkFSR0IgZnJvbS90byBBWVVWIGNvbG9yc3BhY2UgY29udmVyc2lvbiBwcmVzZXJ2aW5nIHRoZSBhbHBoYSBjaGFubmVsIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RiYXNldHJhbnNmb3JtX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzKTsKLSAgZ3N0YmFzZXRyYW5zZm9ybV9jbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7Ci0KLSAgZ3N0dmlkZW9maWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbHBoYV9jb2xvcl9zZXRfaW5mbyk7Ci0gIGdzdHZpZGVvZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWVfaXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbHBoYV9jb2xvcl90cmFuc2Zvcm1fZnJhbWVfaXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FscGhhX2NvbG9yX2luaXQgKEdzdEFscGhhQ29sb3IgKiBhbHBoYSkKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSAqYnRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChhbHBoYSk7Ci0KLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoYnRyYW5zLCBUUlVFKTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2FscGhhX2NvbG9yX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYnRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICp0bXBsX2NhcHMgPSBOVUxMOwotICBHc3RDYXBzICpyZXN1bHQgPSBOVUxMLCAqbG9jYWxfY2FwcyA9IE5VTEw7Ci0gIGd1aW50IGk7Ci0KLSAgbG9jYWxfY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSkpOwotCi0gICAgLyogUmVtb3ZlIGFueSBzcGVjaWZpYyBwYXJhbWV0ZXIgZnJvbSB0aGUgc3RydWN0dXJlICovCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHN0cnVjdHVyZSwgImZvcm1hdCIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJjb2xvcmltZXRyeSIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJjaHJvbWEtc2l0ZSIpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAidmlkZW8veC1yYXciKTsKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChsb2NhbF9jYXBzLCBzdHJ1Y3R1cmUpOwotICB9Ci0KLSAgLyogR2V0IHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSAqLwotICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykgewotICAgIHRtcGxfY2FwcyA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgmc3JjX3RlbXBsYXRlKTsKLSAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpIHsKLSAgICB0bXBsX2NhcHMgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoJnNpbmtfdGVtcGxhdGUpOwotICB9Ci0KLSAgLyogSW50ZXJzZWN0IHdpdGggb3VyIHRlbXBsYXRlIGNhcHMgKi8KLSAgcmVzdWx0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChsb2NhbF9jYXBzLCB0bXBsX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAodG1wbF9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGxvY2FsX2NhcHMpOwotCi0gIHJlc3VsdCA9IGdzdF9jYXBzX3NpbXBsaWZ5IChyZXN1bHQpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChidHJhbnMsICJ0cmFuc2Zvcm1lZCAlIiBHU1RfUFRSX0ZPUk1BVCAiIHRvICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgY2FwcywgcmVzdWx0KTsKLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYnRyYW5zLCAiVXNpbmcgZmlsdGVyIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGZpbHRlcik7Ci0gICAgaW50ZXJzZWN0aW9uID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzdWx0LCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOwotICAgIHJlc3VsdCA9IGludGVyc2VjdGlvbjsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChidHJhbnMsICJJbnRlcnNlY3Rpb24gJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0gIH0KLQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIEdlbmVyYXRlZCBieSAtYmFkL2V4dC9jb2cvZ2VuZXJhdGVfdGFibGVzICovCi1zdGF0aWMgY29uc3QgaW50IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfaGR0dltdID0gewotICAyOTgsIDAsIDQ1OSwgLTYzNTE0LAotICAyOTgsIC01NSwgLTEzNiwgMTk2ODEsCi0gIDI5OCwgNTQxLCAwLCAtNzM5ODgsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0dltdID0gewotICAyOTgsIDAsIDQwOSwgLTU3MDY4LAotICAyOTgsIC0xMDAsIC0yMDgsIDM0NzA3LAotICAyOTgsIDUxNiwgMCwgLTcwODcwLAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9oZHR2W10gPSB7Ci0gIDQ3LCAxNTcsIDE2LCA0MDk2LAotICAtMjYsIC04NywgMTEyLCAzMjc2OCwKLSAgMTEyLCAtMTAyLCAtMTAsIDMyNzY4LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2W10gPSB7Ci0gIDY2LCAxMjksIDI1LCA0MDk2LAotICAtMzgsIC03NCwgMTEyLCAzMjc2OCwKLSAgMTEyLCAtOTQsIC0xOCwgMzI3NjgsCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0W10gPSB7Ci0gIDI1NiwgLTMwLCAtNTMsIDEwNjAwLAotICAwLCAyNjEsIDI5LCAtNDM2NywKLSAgMCwgMTksIDI2MiwgLTMyODksCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCBjb2dfeWNiY3JfaGR0dl90b195Y2Jjcl9zZHR2X21hdHJpeF84Yml0W10gPSB7Ci0gIDI1NiwgMjUsIDQ5LCAtOTUzNiwKLSAgMCwgMjUzLCAtMjgsIDM5NTgsCi0gIDAsIC0xOSwgMjUyLCAyOTE4LAotfTsKLQotI2RlZmluZSBERUZJTkVfQVJHQl9BWVVWX0ZVTkNUSU9OUyhuYW1lLCBBLCBSLCBHLCBCKSBcCi1zdGF0aWMgdm9pZCBcCi10cmFuc2Zvcm1fIyNuYW1lIyNfYXl1diAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBjb25zdCBnaW50ICptYXRyaXgpIFwKLXsgXAotICBndWludDggKmRhdGE7IFwKLSAgZ3NpemUgc2l6ZTsgXAotICBnaW50IHksIHUsIHY7IFwKLSAgZ2ludCB5Y1s0XTsgXAotICBnaW50IHVjWzRdOyBcCi0gIGdpbnQgdmNbNF07IFwKLSAgXAotICBkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTtcCi0gIHNpemUgPSBHU1RfVklERU9fRlJBTUVfU0laRSAoZnJhbWUpO1wKLSAgXAotICBtZW1jcHkgKHljLCBtYXRyaXgsIDQgKiBzaXplb2YgKGdpbnQpKTsgXAotICBtZW1jcHkgKHVjLCBtYXRyaXggKyA0LCA0ICogc2l6ZW9mIChnaW50KSk7IFwKLSAgbWVtY3B5ICh2YywgbWF0cml4ICsgOCwgNCAqIHNpemVvZiAoZ2ludCkpOyBcCi0gIFwKLSAgd2hpbGUgKHNpemUgPiAwKSB7IFwKLSAgICB5ID0gKGRhdGFbUl0gKiB5Y1swXSArIGRhdGFbR10gKiB5Y1sxXSArIGRhdGFbQl0gKiB5Y1syXSArIHljWzNdKSA+PiA4OyBcCi0gICAgdSA9IChkYXRhW1JdICogdWNbMF0gKyBkYXRhW0ddICogdWNbMV0gKyBkYXRhW0JdICogdWNbMl0gKyB1Y1szXSkgPj4gODsgXAotICAgIHYgPSAoZGF0YVtSXSAqIHZjWzBdICsgZGF0YVtHXSAqIHZjWzFdICsgZGF0YVtCXSAqIHZjWzJdICsgdmNbM10pID4+IDg7IFwKLSAgICBcCi0gICAgZGF0YVswXSA9IGRhdGFbQV07IFwKLSAgICBkYXRhWzFdID0geTsgXAotICAgIGRhdGFbMl0gPSB1OyBcCi0gICAgZGF0YVszXSA9IHY7IFwKLSAgICBcCi0gICAgZGF0YSArPSA0OyBcCi0gICAgc2l6ZSAtPSA0OyBcCi0gIH0gXAotfSBcCi1cCi1zdGF0aWMgdm9pZCBcCi10cmFuc2Zvcm1fYXl1dl8jI25hbWUgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgY29uc3QgZ2ludCAqbWF0cml4KSBcCi17IFwKLSAgZ3VpbnQ4ICpkYXRhOyBcCi0gIGdzaXplIHNpemU7IFwKLSAgZ2ludCByLCBnLCBiOyBcCi0gIGdpbnQgcmNbNF07IFwKLSAgZ2ludCBnY1s0XTsgXAotICBnaW50IGJjWzRdOyBcCi0gIFwKLSAgZGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMCk7XAotICBzaXplID0gR1NUX1ZJREVPX0ZSQU1FX1NJWkUgKGZyYW1lKTtcCi0gIFwKLSAgbWVtY3B5IChyYywgbWF0cml4LCA0ICogc2l6ZW9mIChnaW50KSk7IFwKLSAgbWVtY3B5IChnYywgbWF0cml4ICsgNCwgNCAqIHNpemVvZiAoZ2ludCkpOyBcCi0gIG1lbWNweSAoYmMsIG1hdHJpeCArIDgsIDQgKiBzaXplb2YgKGdpbnQpKTsgXAotICBcCi0gIHdoaWxlIChzaXplID4gMCkgeyBcCi0gICAgciA9IChkYXRhWzFdICogcmNbMF0gKyBkYXRhWzJdICogcmNbMV0gKyBkYXRhWzNdICogcmNbMl0gKyByY1szXSkgPj4gODsgXAotICAgIGcgPSAoZGF0YVsxXSAqIGdjWzBdICsgZGF0YVsyXSAqIGdjWzFdICsgZGF0YVszXSAqIGdjWzJdICsgZ2NbM10pID4+IDg7IFwKLSAgICBiID0gKGRhdGFbMV0gKiBiY1swXSArIGRhdGFbMl0gKiBiY1sxXSArIGRhdGFbM10gKiBiY1syXSArIGJjWzNdKSA+PiA4OyBcCi0gICAgXAotICAgIGRhdGFbQV0gPSBkYXRhWzBdOyBcCi0gICAgZGF0YVtSXSA9IENMQU1QIChyLCAwLCAyNTUpOyBcCi0gICAgZGF0YVtHXSA9IENMQU1QIChnLCAwLCAyNTUpOyBcCi0gICAgZGF0YVtCXSA9IENMQU1QIChiLCAwLCAyNTUpOyBcCi0gICAgXAotICAgIGRhdGEgKz0gNDsgXAotICAgIHNpemUgLT0gNDsgXAotICB9IFwKLX0KLQotREVGSU5FX0FSR0JfQVlVVl9GVU5DVElPTlMgKHJnYmEsIDMsIDAsIDEsIDIpOwotREVGSU5FX0FSR0JfQVlVVl9GVU5DVElPTlMgKGJncmEsIDMsIDIsIDEsIDApOwotREVGSU5FX0FSR0JfQVlVVl9GVU5DVElPTlMgKGFyZ2IsIDAsIDEsIDIsIDMpOwotREVGSU5FX0FSR0JfQVlVVl9GVU5DVElPTlMgKGFiZ3IsIDAsIDMsIDIsIDEpOwotCi1zdGF0aWMgdm9pZAotdHJhbnNmb3JtX2F5dXZfYXl1diAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBjb25zdCBnaW50ICogbWF0cml4KQotewotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIGdpbnQgeSwgdSwgdjsKLSAgZ2ludCB5Y1s0XTsKLSAgZ2ludCB1Y1s0XTsKLSAgZ2ludCB2Y1s0XTsKLQotICBpZiAobWF0cml4ID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIGRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICBzaXplID0gR1NUX1ZJREVPX0ZSQU1FX1NJWkUgKGZyYW1lKTsKLQotICBtZW1jcHkgKHljLCBtYXRyaXgsIDQgKiBzaXplb2YgKGdpbnQpKTsKLSAgbWVtY3B5ICh1YywgbWF0cml4ICsgNCwgNCAqIHNpemVvZiAoZ2ludCkpOwotICBtZW1jcHkgKHZjLCBtYXRyaXggKyA4LCA0ICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgeSA9IChkYXRhWzFdICogeWNbMF0gKyBkYXRhWzJdICogeWNbMV0gKyBkYXRhWzNdICogeWNbMl0gKyB5Y1szXSkgPj4gODsKLSAgICB1ID0gKGRhdGFbMV0gKiB1Y1swXSArIGRhdGFbMl0gKiB1Y1sxXSArIGRhdGFbM10gKiB1Y1syXSArIHVjWzNdKSA+PiA4OwotICAgIHYgPSAoZGF0YVsxXSAqIHZjWzBdICsgZGF0YVsyXSAqIHZjWzFdICsgZGF0YVszXSAqIHZjWzJdICsgdmNbM10pID4+IDg7Ci0KLSAgICBkYXRhWzFdID0geTsKLSAgICBkYXRhWzJdID0gdTsKLSAgICBkYXRhWzNdID0gdjsKLQotICAgIGRhdGEgKz0gNDsKLSAgICBzaXplIC09IDQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXRyYW5zZm9ybV9hcmdiX2JncmEgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgY29uc3QgZ2ludCAqIG1hdHJpeCkKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnc2l6ZSBzaXplOwotICBnaW50IHIsIGcsIGI7Ci0KLSAgZGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMCk7Ci0gIHNpemUgPSBHU1RfVklERU9fRlJBTUVfU0laRSAoZnJhbWUpOwotCi0gIHdoaWxlIChzaXplID4gMCkgewotICAgIHIgPSBkYXRhWzFdOwotICAgIGcgPSBkYXRhWzJdOwotICAgIGIgPSBkYXRhWzNdOwotCi0gICAgZGF0YVszXSA9IGRhdGFbMF07Ci0gICAgZGF0YVswXSA9IGI7Ci0gICAgZGF0YVsxXSA9IGc7Ci0gICAgZGF0YVsyXSA9IHI7Ci0KLSAgICBkYXRhICs9IDQ7Ci0gICAgc2l6ZSAtPSA0OwotICB9Ci19Ci0KLSNkZWZpbmUgdHJhbnNmb3JtX2FiZ3JfcmdiYSB0cmFuc2Zvcm1fYXJnYl9iZ3JhCi0KLXN0YXRpYyB2b2lkCi10cmFuc2Zvcm1fYXJnYl9hYmdyIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIGNvbnN0IGdpbnQgKiBtYXRyaXgpCi17Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ2ludCByLCBnLCBiOwotCi0gIGRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICBzaXplID0gR1NUX1ZJREVPX0ZSQU1FX1NJWkUgKGZyYW1lKTsKLQotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICByID0gZGF0YVsxXTsKLSAgICBnID0gZGF0YVsyXTsKLSAgICBiID0gZGF0YVszXTsKLQotICAgIC8qIGRhdGFbMF0gPSBkYXRhWzBdOyAqLwotICAgIGRhdGFbMV0gPSBiOwotICAgIGRhdGFbMl0gPSBnOwotICAgIGRhdGFbM10gPSByOwotCi0gICAgZGF0YSArPSA0OwotICAgIHNpemUgLT0gNDsKLSAgfQotfQotCi0jZGVmaW5lIHRyYW5zZm9ybV9hYmdyX2FyZ2IgdHJhbnNmb3JtX2FyZ2JfYWJncgotCi1zdGF0aWMgdm9pZAotdHJhbnNmb3JtX3JnYmFfYmdyYSAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBjb25zdCBnaW50ICogbWF0cml4KQotewotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIGdpbnQgciwgZywgYjsKLQotICBkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsKLSAgc2l6ZSA9IEdTVF9WSURFT19GUkFNRV9TSVpFIChmcmFtZSk7Ci0KLSAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgciA9IGRhdGFbMF07Ci0gICAgZyA9IGRhdGFbMV07Ci0gICAgYiA9IGRhdGFbMl07Ci0KLSAgICAvKiBkYXRhWzNdID0gZGF0YVszXSAqLyA7Ci0gICAgZGF0YVswXSA9IGI7Ci0gICAgZGF0YVsxXSA9IGc7Ci0gICAgZGF0YVsyXSA9IHI7Ci0KLSAgICBkYXRhICs9IDQ7Ci0gICAgc2l6ZSAtPSA0OwotICB9Ci19Ci0KLSNkZWZpbmUgdHJhbnNmb3JtX2JncmFfcmdiYSB0cmFuc2Zvcm1fcmdiYV9iZ3JhCi0KLXN0YXRpYyB2b2lkCi10cmFuc2Zvcm1fYXJnYl9yZ2JhIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIGNvbnN0IGdpbnQgKiBtYXRyaXgpCi17Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ2ludCByLCBnLCBiOwotCi0gIGRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICBzaXplID0gR1NUX1ZJREVPX0ZSQU1FX1NJWkUgKGZyYW1lKTsKLQotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICByID0gZGF0YVsxXTsKLSAgICBnID0gZGF0YVsyXTsKLSAgICBiID0gZGF0YVszXTsKLQotICAgIGRhdGFbM10gPSBkYXRhWzBdOwotICAgIGRhdGFbMF0gPSByOwotICAgIGRhdGFbMV0gPSBnOwotICAgIGRhdGFbMl0gPSBiOwotCi0gICAgZGF0YSArPSA0OwotICAgIHNpemUgLT0gNDsKLSAgfQotfQotCi0jZGVmaW5lIHRyYW5zZm9ybV9hYmdyX2JncmEgdHJhbnNmb3JtX2FyZ2JfcmdiYQotCi1zdGF0aWMgdm9pZAotdHJhbnNmb3JtX2JncmFfYXJnYiAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBjb25zdCBnaW50ICogbWF0cml4KQotewotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIGdpbnQgciwgZywgYjsKLQotICBkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsKLSAgc2l6ZSA9IEdTVF9WSURFT19GUkFNRV9TSVpFIChmcmFtZSk7Ci0KLSAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgciA9IGRhdGFbMl07Ci0gICAgZyA9IGRhdGFbMV07Ci0gICAgYiA9IGRhdGFbMF07Ci0KLSAgICBkYXRhWzBdID0gZGF0YVszXTsKLSAgICBkYXRhWzFdID0gcjsKLSAgICBkYXRhWzJdID0gZzsKLSAgICBkYXRhWzNdID0gYjsKLQotICAgIGRhdGEgKz0gNDsKLSAgICBzaXplIC09IDQ7Ci0gIH0KLX0KLQotI2RlZmluZSB0cmFuc2Zvcm1fcmdiYV9hYmdyIHRyYW5zZm9ybV9iZ3JhX2FyZ2IKLQotc3RhdGljIHZvaWQKLXRyYW5zZm9ybV9yZ2JhX2FyZ2IgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgY29uc3QgZ2ludCAqIG1hdHJpeCkKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnc2l6ZSBzaXplOwotICBnaW50IHIsIGcsIGI7Ci0KLSAgZGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMCk7Ci0gIHNpemUgPSBHU1RfVklERU9fRlJBTUVfU0laRSAoZnJhbWUpOwotCi0gIHdoaWxlIChzaXplID4gMCkgewotICAgIHIgPSBkYXRhWzBdOwotICAgIGcgPSBkYXRhWzFdOwotICAgIGIgPSBkYXRhWzJdOwotCi0gICAgZGF0YVswXSA9IGRhdGFbM107Ci0gICAgZGF0YVsxXSA9IHI7Ci0gICAgZGF0YVsyXSA9IGc7Ci0gICAgZGF0YVszXSA9IGI7Ci0KLSAgICBkYXRhICs9IDQ7Ci0gICAgc2l6ZSAtPSA0OwotICB9Ci19Ci0KLSNkZWZpbmUgdHJhbnNmb3JtX2JncmFfYWJnciB0cmFuc2Zvcm1fcmdiYV9hcmdiCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FscGhhX2NvbG9yX3NldF9pbmZvIChHc3RWaWRlb0ZpbHRlciAqIGZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdEFscGhhQ29sb3IgKmFscGhhID0gR1NUX0FMUEhBX0NPTE9SIChmaWx0ZXIpOwotICBnYm9vbGVhbiBpbl9zZHR2LCBvdXRfc2R0djsKLQotICBhbHBoYS0+cHJvY2VzcyA9IE5VTEw7Ci0gIGFscGhhLT5tYXRyaXggPSBOVUxMOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19XSURUSCAoaW5faW5mbykgIT0gR1NUX1ZJREVPX0lORk9fV0lEVEggKG91dF9pbmZvKSB8fAotICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKSAhPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKG91dF9pbmZvKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBpbl9zZHR2ID0gaW5faW5mby0+Y29sb3JpbWV0cnkubWF0cml4ID09IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQ2MDE7Ci0gIG91dF9zZHR2ID0gb3V0X2luZm8tPmNvbG9yaW1ldHJ5Lm1hdHJpeCA9PSBHU1RfVklERU9fQ09MT1JfTUFUUklYX0JUNjAxOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbl9pbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKG91dF9pbmZvKSkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IE5VTEw7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX2FyZ2JfYmdyYTsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYXJnYl9hYmdyOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9hcmdiX3JnYmE7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX2FyZ2JfYXl1djsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0KLSAgICAgICAgICAgICAgb3V0X3NkdHYgPyBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgICAgICAgICBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X2hkdHY7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBOVUxMOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAob3V0X2luZm8pKSB7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gTlVMTDsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYmdyYV9hcmdiOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9iZ3JhX2FiZ3I7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX2JncmFfcmdiYTsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYmdyYV9heXV2OwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPQotICAgICAgICAgICAgICBvdXRfc2R0diA/IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0diA6Ci0gICAgICAgICAgICAgIGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfaGR0djsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IE5VTEw7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKLSAgICAgIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChvdXRfaW5mbykpIHsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBOVUxMOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9hYmdyX3JnYmE7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX2FiZ3JfYXJnYjsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYWJncl9iZ3JhOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9hYmdyX2F5dXY7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9Ci0gICAgICAgICAgICAgIG91dF9zZHR2ID8gY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgICAgICAgICAgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9oZHR2OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gTlVMTDsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKG91dF9pbmZvKSkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IE5VTEw7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX3JnYmFfYXJnYjsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fcmdiYV9hYmdyOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9yZ2JhX2JncmE7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9IE5VTEw7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX3JnYmFfYXl1djsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0KLSAgICAgICAgICAgICAgb3V0X3NkdHYgPyBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgICAgICAgICBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X2hkdHY7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSBOVUxMOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPSBOVUxMOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAob3V0X2luZm8pKSB7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgICAgIGlmIChpbl9zZHR2ID09IG91dF9zZHR2KSB7Ci0gICAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9heXV2X2F5dXY7Ci0gICAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYXl1dl9heXV2OwotICAgICAgICAgICAgYWxwaGEtPm1hdHJpeCA9Ci0gICAgICAgICAgICAgICAgb3V0X3NkdHYgPyBjb2dfeWNiY3JfaGR0dl90b195Y2Jjcl9zZHR2X21hdHJpeF84Yml0IDoKLSAgICAgICAgICAgICAgICBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0OwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYXl1dl9hcmdiOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPQotICAgICAgICAgICAgICBpbl9zZHR2ID8gY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgICAgICAgICAgY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9oZHR2OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgICAgICBhbHBoYS0+cHJvY2VzcyA9IHRyYW5zZm9ybV9heXV2X2JncmE7Ci0gICAgICAgICAgYWxwaGEtPm1hdHJpeCA9Ci0gICAgICAgICAgICAgIGluX3NkdHYgPyBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgICAgICAgICBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHY7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gdHJhbnNmb3JtX2F5dXZfYWJncjsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0KLSAgICAgICAgICAgICAgaW5fc2R0diA/IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diA6Ci0gICAgICAgICAgICAgIGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfaGR0djsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgICAgICAgYWxwaGEtPnByb2Nlc3MgPSB0cmFuc2Zvcm1fYXl1dl9yZ2JhOwotICAgICAgICAgIGFscGhhLT5tYXRyaXggPQotICAgICAgICAgICAgICBpbl9zZHR2ID8gY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2IDoKLSAgICAgICAgICAgICAgY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9oZHR2OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGFscGhhLT5wcm9jZXNzID0gTlVMTDsKLSAgICAgICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBhbHBoYS0+cHJvY2VzcyA9IE5VTEw7Ci0gICAgICBhbHBoYS0+bWF0cml4ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbykgPT0gR1NUX1ZJREVPX0lORk9fRk9STUFUIChvdXRfaW5mbykKLSAgICAgICYmIGluX3NkdHYgPT0gb3V0X3NkdHYpCi0gICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpLCBUUlVFKTsKLSAgZWxzZSBpZiAoIWFscGhhLT5wcm9jZXNzKQotICAgIGdvdG8gbm9fcHJvY2VzczsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfY2FwczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFscGhhLCAiaW5jb21wbGV0ZSBvciBpbnZhbGlkIGNhcHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3Byb2Nlc3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhbHBoYSwgImNvdWxkIG5vdCBmaW5kIHByb2Nlc3MgZnVuY3Rpb24iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hbHBoYV9jb2xvcl90cmFuc2Zvcm1fZnJhbWVfaXAgKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0QWxwaGFDb2xvciAqYWxwaGEgPSBHU1RfQUxQSEFfQ09MT1IgKGZpbHRlcik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFhbHBoYS0+cHJvY2VzcykpCi0gICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICAvKiBUcmFuc2Zvcm0gaW4gcGxhY2UgKi8KLSAgYWxwaGEtPnByb2Nlc3MgKGZyYW1lLCBhbHBoYS0+bWF0cml4KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFscGhhLCAiTm90IG5lZ290aWF0ZWQgeWV0Iik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhbHBoYWNvbG9yIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX0FMUEhBX0NPTE9SKTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGFscGhhY29sb3IsCi0gICAgIlJHQkEgZnJvbS90byBBWVVWIGNvbG9yc3BhY2UgY29udmVyc2lvbiBwcmVzZXJ2aW5nIHRoZSBhbHBoYSBjaGFubmVsIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmggYi9nc3QvYWxwaGEvZ3N0YWxwaGFjb2xvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDBmNjIxLi4wMDAwMDAwCi0tLSBhL2dzdC9hbHBoYS9nc3RhbHBoYWNvbG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKiBHU3RyZWFtZXIgYWxwaGFjb2xvciBlbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9HU1RfQUxQSEFfQ09MT1JfSF8KLSNkZWZpbmUgX0dTVF9BTFBIQV9DT0xPUl9IXwotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQUxQSEFfQ09MT1IgXAotICAoZ3N0X2FscGhhX2NvbG9yX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BTFBIQV9DT0xPUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FMUEhBX0NPTE9SLEdzdEFscGhhQ29sb3IpKQotI2RlZmluZSBHU1RfQUxQSEFfQ09MT1JfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQUxQSEFfQ09MT1IsR3N0QWxwaGFDb2xvckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FMUEhBX0NPTE9SKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQUxQSEFfQ09MT1IpKQotI2RlZmluZSBHU1RfSVNfQUxQSEFfQ09MT1JfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQUxQSEFfQ09MT1IpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QWxwaGFDb2xvciBHc3RBbHBoYUNvbG9yOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFscGhhQ29sb3JDbGFzcyBHc3RBbHBoYUNvbG9yQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QWxwaGFDb2xvcgotewotICBHc3RWaWRlb0ZpbHRlciBwYXJlbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIHZvaWQgKCpwcm9jZXNzKSAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBjb25zdCBnaW50ICogbWF0cml4KTsKLQotICBjb25zdCBnaW50ICptYXRyaXg7Ci19OwotCi1zdHJ1Y3QgX0dzdEFscGhhQ29sb3JDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9hbHBoYV9jb2xvcl9nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBfR1NUX0FMUEhBX0NPTE9SX0hfICovCmRpZmYgLS1naXQgYS9nc3QvYXBldGFnL01ha2VmaWxlLmFtIGIvZ3N0L2FwZXRhZy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIwNjc3MS4uMDAwMDAwMAotLS0gYS9nc3QvYXBldGFnL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YXBldGFnLmxhCi0KLWxpYmdzdGFwZXRhZ19sYV9TT1VSQ0VTID0gZ3N0YXBlZGVtdXguYwotbGliZ3N0YXBldGFnX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi1saWJnc3RhcGV0YWdfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHRhZy1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3RwYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05AXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpCi1saWJnc3RhcGV0YWdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YXBldGFnX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0YXBlZGVtdXguaApkaWZmIC0tZ2l0IGEvZ3N0L2FwZXRhZy9NYWtlZmlsZS5pbiBiL2dzdC9hcGV0YWcvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4Y2MxODkuLjAwMDAwMDAKLS0tIGEvZ3N0L2FwZXRhZy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkxOCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvYXBldGFnCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0YXBldGFnX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0YXBldGFnX2xhX09CSkVDVFMgPSBsaWJnc3RhcGV0YWdfbGEtZ3N0YXBlZGVtdXgubG8KLWxpYmdzdGFwZXRhZ19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RhcGV0YWdfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGFwZXRhZ19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGFwZXRhZ19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGFwZXRhZ19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RhcGV0YWdfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0YXBldGFnX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGFwZXRhZ19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RhcGV0YWcubGEKLWxpYmdzdGFwZXRhZ19sYV9TT1VSQ0VTID0gZ3N0YXBlZGVtdXguYwotbGliZ3N0YXBldGFnX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi0KLWxpYmdzdGFwZXRhZ19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykKLQotbGliZ3N0YXBldGFnX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGFwZXRhZ19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RhcGVkZW11eC5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvYXBldGFnL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9hcGV0YWcvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RhcGV0YWcubGE6ICQobGliZ3N0YXBldGFnX2xhX09CSkVDVFMpICQobGliZ3N0YXBldGFnX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RhcGV0YWdfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGFwZXRhZ19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0YXBldGFnX2xhX09CSkVDVFMpICQobGliZ3N0YXBldGFnX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXBldGFnX2xhLWdzdGFwZWRlbXV4LlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RhcGV0YWdfbGEtZ3N0YXBlZGVtdXgubG86IGdzdGFwZWRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhcGV0YWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXBldGFnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhcGV0YWdfbGEtZ3N0YXBlZGVtdXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGFwZXRhZ19sYS1nc3RhcGVkZW11eC5UcG8gLWMgLW8gbGliZ3N0YXBldGFnX2xhLWdzdGFwZWRlbXV4LmxvIGB0ZXN0IC1mICdnc3RhcGVkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhcGVkZW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhcGV0YWdfbGEtZ3N0YXBlZGVtdXguVHBvICQoREVQRElSKS9saWJnc3RhcGV0YWdfbGEtZ3N0YXBlZGVtdXguUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YXBlZGVtdXguYycgb2JqZWN0PSdsaWJnc3RhcGV0YWdfbGEtZ3N0YXBlZGVtdXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhcGV0YWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXBldGFnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGFwZXRhZ19sYS1nc3RhcGVkZW11eC5sbyBgdGVzdCAtZiAnZ3N0YXBlZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXBlZGVtdXguYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvYXBldGFnL2dzdGFwZWRlbXV4LmMgYi9nc3QvYXBldGFnL2dzdGFwZWRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzZTYyODkuLjAwMDAwMDAKLS0tIGEvZ3N0L2FwZXRhZy9nc3RhcGVkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBBUEV2MS8yIHRhZyByZWFkZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hcGVkZW11eAotICoKLSAqIGFwZWRlbXV4IGFjY2VwdHMgZGF0YSBzdHJlYW1zIHdpdGggQVBFIHRhZ3MgYXQgdGhlIHN0YXJ0IG9yIGF0IHRoZSBlbmQKLSAqIChvciBib3RoKS4gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZGF0YSBiZXR3ZWVuIHRoZSB0YWcgYmxvY2tzIGlzIGRldGVjdGVkCi0gKiB1c2luZyB0eXBlZmluZCBmdW5jdGlvbnMsIGFuZCB0aGUgYXBwcm9wcmlhdGUgb3V0cHV0IG1pbWUgdHlwZSBzZXQgb24KLSAqIG91dGdvaW5nIGJ1ZmZlcnMuCi0gKgotICogVGhlIGVsZW1lbnQgaXMgb25seSBhYmxlIHRvIHJlYWQgQVBFIHRhZ3MgYXQgdGhlIGVuZCBvZiBhIHN0cmVhbSBmcm9tCi0gKiBhIHNlZWthYmxlIHN0cmVhbSwgaWUuIHdoZW4gZ2V0X3JhbmdlIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSB1cHN0cmVhbQotICogZWxlbWVudHMuIElmIGdldF9yYW5nZSBvcGVyYXRpb24gaXMgYXZhaWxhYmxlLCBhcGVkZW11eCBtYWtlcyBpdCBhdmFpbGFibGUKLSAqIGRvd25zdHJlYW0uIFRoaXMgbWVhbnMgdGhhdCBlbGVtZW50cyB3aGljaCByZXF1aXJlIGdldF9yYW5nZSBtb2RlLCBzdWNoIGFzCi0gKiB3YXZwYXJzZSBvciBtdXNlcGFja2RlYywgY2FuIG9wZXJhdGUgb24gZmlsZXMgY29udGFpbmluZyBBUEUgdGFnCi0gKiBpbmZvcm1hdGlvbi4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXQgZmlsZXNyYyBsb2NhdGlvbj1maWxlLm1wYyAhIGFwZWRlbXV4ICEgZmFrZXNpbmsKLSAqIF18IFRoaXMgcGlwZWxpbmUgc2hvdWxkIHJlYWQgYW55IGF2YWlsYWJsZSBBUEUgdGFnIGluZm9ybWF0aW9uIGFuZCBvdXRwdXQgaXQuCi0gKiBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zaWRlIHRoZSBBUEUgdGFnIHJlZ2lvbnMgc2hvdWxkIGJlIGRldGVjdGVkLCBhbmQKLSAqIHRoZSBhcHByb3ByaWF0ZSBtaW1lIHR5cGUgc2V0IG9uIGJ1ZmZlcnMgcHJvZHVjZWQgZnJvbSBhcGVkZW11eC4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi0jaW5jbHVkZSAiZ3N0YXBlZGVtdXguaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgQVBFX1ZFUlNJT05fTUFKT1IodmVyKSAgKCh2ZXIpLzEwMDApCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGFwZWRlbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChhcGVkZW11eF9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtYXBldGFnIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FwZV9kZW11eF9pZGVudGlmeV90YWcgKEdzdFRhZ0RlbXV4ICogZGVtdXgsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBnYm9vbGVhbiBzdGFydF90YWcsIGd1aW50ICogdGFnX3NpemUpOwotc3RhdGljIEdzdFRhZ0RlbXV4UmVzdWx0IGdzdF9hcGVfZGVtdXhfcGFyc2VfdGFnIChHc3RUYWdEZW11eCAqIGRlbXV4LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ2Jvb2xlYW4gc3RhcnRfdGFnLCBndWludCAqIHRhZ19zaXplLAotICAgIEdzdFRhZ0xpc3QgKiogdGFncyk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdEFwZURlbXV4LCBnc3RfYXBlX2RlbXV4LCBHU1RfVFlQRV9UQUdfREVNVVgpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2FwZV9kZW11eF9jbGFzc19pbml0IChHc3RBcGVEZW11eENsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR3N0VGFnRGVtdXhDbGFzcyAqdGFnZGVtdXhfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGFwZWRlbXV4X2RlYnVnLCAiYXBlZGVtdXgiLCAwLAotICAgICAgIkdTdHJlYW1lciBBUEUgdGFnIGRlbXV4ZXIiKTsKLQotICB0YWdkZW11eF9jbGFzcyA9IEdTVF9UQUdfREVNVVhfQ0xBU1MgKGtsYXNzKTsKLSAgZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIkFQRSB0YWcgZGVtdXhlciIsCi0gICAgICAiQ29kZWMvRGVtdXhlci9NZXRhZGF0YSIsCi0gICAgICAiUmVhZCBhbmQgb3V0cHV0IEFQRSB0YWdzIHdoaWxlIGRlbXV4aW5nIHRoZSBjb250ZW50cyIsCi0gICAgICAiVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfZmFjdG9yeSk7Ci0KLSAgdGFnZGVtdXhfY2xhc3MtPmlkZW50aWZ5X3RhZyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXBlX2RlbXV4X2lkZW50aWZ5X3RhZyk7Ci0gIHRhZ2RlbXV4X2NsYXNzLT5wYXJzZV90YWcgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FwZV9kZW11eF9wYXJzZV90YWcpOwotCi0gIC8qIG5vIG5lZWQgZm9yIGEgbWVyZ2UgZnVuY3Rpb24sIHRoZSBkZWZhdWx0IGJlaGF2aW91ciB0byBwcmVmZXIgc3RhcnQKLSAgICogdGFncyAoQVBFdjIpIG92ZXIgZW5kIHRhZ3MgKHVzdWFsbHkgQVBFdjEsIGJ1dCBjb3VsZCB0aGVvcmV0aWNhbGx5IGFsc28KLSAgICogYmUgQVBFdjIpIGlzIGZpbmUgKi8KLQotICB0YWdkZW11eF9jbGFzcy0+bWluX3N0YXJ0X3NpemUgPSAzMjsKLSAgdGFnZGVtdXhfY2xhc3MtPm1pbl9lbmRfc2l6ZSA9IDMyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FwZV9kZW11eF9pbml0IChHc3RBcGVEZW11eCAqIGFwZWRlbXV4KQotewotICAvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBfR3N0QXBlRGVtdXhUYWdUYWJsZUVudHJ5Ci17Ci0gIGNvbnN0IGdjaGFyICphcGVfdGFnOwotICBjb25zdCBnY2hhciAqZ3N0X3RhZzsKLX0gdGFnX3RhYmxlW10gPSB7Ci0gIHsKLSAgInJlcGxheWdhaW5fdHJhY2tfZ2FpbiIsIEdTVF9UQUdfVFJBQ0tfR0FJTn0sIHsKLSAgInJlcGxheWdhaW5fdHJhY2tfcGVhayIsIEdTVF9UQUdfVFJBQ0tfUEVBS30sIHsKLSAgInJlcGxheWdhaW5fYWxidW1fZ2FpbiIsIEdTVF9UQUdfQUxCVU1fR0FJTn0sIHsKLSAgInJlcGxheWdhaW5fYWxidW1fcGVhayIsIEdTVF9UQUdfQUxCVU1fUEVBS30sIHsKLSAgInRpdGxlIiwgR1NUX1RBR19USVRMRX0sIHsKLSAgImFydGlzdCIsIEdTVF9UQUdfQVJUSVNUfSwgewotICAiYWxidW0iLCBHU1RfVEFHX0FMQlVNfSwgewotICAiY29tcG9zZXIiLCBHU1RfVEFHX0NPTVBPU0VSfSwgewotICAiY29tbWVudCIsIEdTVF9UQUdfQ09NTUVOVH0sIHsKLSAgImNvbW1lbnRzIiwgR1NUX1RBR19DT01NRU5UfSwgewotICAiY29weXJpZ2h0IiwgR1NUX1RBR19DT1BZUklHSFR9LCB7Ci0gICJnZW5yZSIsIEdTVF9UQUdfR0VOUkV9LCB7Ci0gICJpc3JjIiwgR1NUX1RBR19JU1JDfSwgewotICAiZGlzYyIsIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUn0sIHsKLSAgImRpc2siLCBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVJ9LCB7Ci0gICJkaXNjbnVtYmVyIiwgR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSfSwgewotICAiZGlza251bWJlciIsIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUn0sIHsKLSAgInRyYWNrIiwgR1NUX1RBR19UUkFDS19OVU1CRVJ9LCB7Ci0gICJ0cmFja251bWJlciIsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSfSwgewotICAieWVhciIsIEdTVF9UQUdfREFURX0sIHsKLSAgImZpbGUiLCBHU1RfVEFHX0xPQ0FUSU9OfQotfTsKLQotc3RhdGljIGdib29sZWFuCi1hcGVfZGVtdXhfZ2V0X2dzdF90YWdfZnJvbV90YWcgKGNvbnN0IGdjaGFyICogYXBlX3RhZywKLSAgICBjb25zdCBnY2hhciAqKiBnc3RfdGFnLCBHVHlwZSAqIGdzdF90YWdfdHlwZSkKLXsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRhZ190YWJsZSk7ICsraSkgewotICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKHRhZ190YWJsZVtpXS5hcGVfdGFnLCBhcGVfdGFnKSA9PSAwKSB7Ci0gICAgICAqZ3N0X3RhZyA9IHRhZ190YWJsZVtpXS5nc3RfdGFnOwotICAgICAgKmdzdF90YWdfdHlwZSA9IGdzdF90YWdfZ2V0X3R5cGUgKHRhZ190YWJsZVtpXS5nc3RfdGFnKTsKLSAgICAgIEdTVF9MT0cgKCJNYXBwZWQgQVBFIHRhZyAnJXMnIHRvIEdTdHJlYW1lciB0YWcgJyVzJyIsIGFwZV90YWcsICpnc3RfdGFnKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIEdTVF9XQVJOSU5HICgiQ291bGQgbm90IG1hcCBBUEUgdGFnICclcycgdG8gYSBHU3RyZWFtZXIgdGFnIiwgYXBlX3RhZyk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIEdzdFRhZ0xpc3QgKgotYXBlX2RlbXV4X3BhcnNlX3RhZ3MgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGdpbnQgc2l6ZSkKLXsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgR1NUX0xPRyAoIlJlYWRpbmcgdGFncyBmcm9tIGNodW5rIG9mIHNpemUgJXUgYnl0ZXMiLCBzaXplKTsKLQotICAvKiBnZXQgcmlkIG9mIGhlYWRlci9mb290ZXIgKi8KLSAgaWYgKHNpemUgPj0gMzIgJiYgbWVtY21wIChkYXRhLCAiQVBFVEFHRVgiLCA4KSA9PSAwKSB7Ci0gICAgZGF0YSArPSAzMjsKLSAgICBzaXplIC09IDMyOwotICB9Ci0gIGlmIChzaXplID4gMzIgJiYgbWVtY21wIChkYXRhICsgc2l6ZSAtIDMyLCAiQVBFVEFHRVgiLCA4KSA9PSAwKSB7Ci0gICAgc2l6ZSAtPSAzMjsKLSAgfQotCi0gIC8qIHJlYWQgYWN0dWFsIHRhZ3MgLSBhdCBsZWFzdCAxMCBieXRlcyBmb3IgdGFnIGhlYWRlciAqLwotICB3aGlsZSAoc2l6ZSA+PSAxMCkgewotICAgIGd1aW50IGxlbiwgbiA9IDg7Ci0gICAgZ2NoYXIgKnRhZywgKnZhbDsKLSAgICBjb25zdCBnY2hhciAqZ3N0X3RhZzsKLSAgICBHVHlwZSBnc3RfdGFnX3R5cGU7Ci0KLSAgICAvKiBmaW5kIHRhZyB0eXBlIGFuZCBzaXplICovCi0gICAgbGVuID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgICB3aGlsZSAobiA8IHNpemUgJiYgZGF0YVtuXSAhPSAweDApCi0gICAgICBuKys7Ci0gICAgaWYgKG4gPT0gc2l6ZSkKLSAgICAgIGJyZWFrOwotICAgIGdfYXNzZXJ0IChkYXRhW25dID09IDB4MCk7Ci0gICAgbisrOwotICAgIGlmIChzaXplIC0gbiA8IGxlbikKLSAgICAgIGJyZWFrOwotCi0gICAgLyogSWYgdGhlIHRhZyBpcyBlbXB0eSwgc2tpcCB0byB0aGUgbmV4dCBvbmUgKi8KLSAgICBpZiAobGVuID09IDApCi0gICAgICBnb3RvIG5leHRfdGFnOwotCi0gICAgLyogcmVhZCAqLwotICAgIHRhZyA9IGdfc3RybmR1cCAoKGdjaGFyICopIGRhdGEgKyA4LCBuIC0gOSk7Ci0gICAgdmFsID0gZ19zdHJuZHVwICgoZ2NoYXIgKikgZGF0YSArIG4sIGxlbik7Ci0KLSAgICBHU1RfTE9HICgidGFnIFslc10sIHZhbFslc10iLCB0YWcsIHZhbCk7Ci0KLSAgICAvKiBzcGVjaWFsLWNhc2UgJ21lZGlhJyB0YWcsIGNvdWxkIGJlIGUuZy4gIkNEIDEvMiIgKi8KLSAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wICh0YWcsICJtZWRpYSIpID09IDApIHsKLSAgICAgIGdjaGFyICpzcCwgKnNwMjsKLQotICAgICAgZ19mcmVlICh0YWcpOwotICAgICAgdGFnID0gZ19zdHJkdXAgKCJkaXNjbnVtYmVyIik7Ci0gICAgICAvKiBnZXQgcmlkIG9mIHRoZSBtZWRpdW0gaW4gZnJvbnQgKi8KLSAgICAgIHNwID0gc3RyY2hyICh2YWwsICcgJyk7Ci0gICAgICB3aGlsZSAoc3AgIT0gTlVMTCAmJiAoc3AyID0gc3RyY2hyIChzcCArIDEsICcgJykpICE9IE5VTEwpCi0gICAgICAgIHNwID0gc3AyOwotICAgICAgaWYgKHNwKSB7Ci0gICAgICAgIG1lbW1vdmUgKHZhbCwgc3AgKyAxLCBzdHJsZW4gKHNwICsgMSkgKyAxKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXBlX2RlbXV4X2dldF9nc3RfdGFnX2Zyb21fdGFnICh0YWcsICZnc3RfdGFnLCAmZ3N0X3RhZ190eXBlKSkgewotICAgICAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0KLSAgICAgIHN3aXRjaCAoZ3N0X3RhZ190eXBlKSB7Ci0gICAgICAgIGNhc2UgR19UWVBFX0lOVDp7Ci0gICAgICAgICAgZ2ludCB2X2ludDsKLQotICAgICAgICAgIGlmIChzc2NhbmYgKHZhbCwgIiVkIiwgJnZfaW50KSA9PSAxKSB7Ci0gICAgICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHX1RZUEVfSU5UKTsKLSAgICAgICAgICAgIGdfdmFsdWVfc2V0X2ludCAoJnYsIHZfaW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHX1RZUEVfVUlOVDp7Ci0gICAgICAgICAgZ3VpbnQgdl91aW50LCBjb3VudDsKLQotICAgICAgICAgIGlmIChzdHJjbXAgKGdzdF90YWcsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSKSA9PSAwKSB7Ci0gICAgICAgICAgICBnaW50IGR1bW15OwotCi0gICAgICAgICAgICBpZiAoc3NjYW5mICh2YWwsICIldSIsICZ2X3VpbnQpID09IDEgJiYgdl91aW50ID4gMCkgewotICAgICAgICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHX1RZUEVfVUlOVCk7Ci0gICAgICAgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKCZ2LCB2X3VpbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgR1NUX0xPRyAoImNoZWNraW5nIGZvciB0cmFjayBjb3VudDogJXMiLCB2YWwpOwotICAgICAgICAgICAgLyogbWlnaHQgYmUgMC9OIG9yIC0xL04gdG8gc3BlY2lmeSB0aGF0IHRoZXJlIGlzIG9ubHkgYSBjb3VudCAqLwotICAgICAgICAgICAgaWYgKHNzY2FuZiAodmFsLCAiJWQvJXUiLCAmZHVtbXksICZjb3VudCkgPT0gMiAmJiBjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICAgICAgICBHU1RfVEFHX1RSQUNLX0NPVU5ULCBjb3VudCwgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKGdzdF90YWcsIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUikgPT0gMCkgewotICAgICAgICAgICAgZ2ludCBkdW1teTsKLQotICAgICAgICAgICAgaWYgKHNzY2FuZiAodmFsLCAiJXUiLCAmdl91aW50KSA9PSAxICYmIHZfdWludCA+IDApIHsKLSAgICAgICAgICAgICAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1VJTlQpOwotICAgICAgICAgICAgICBnX3ZhbHVlX3NldF91aW50ICgmdiwgdl91aW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdTVF9MT0cgKCJjaGVja2luZyBmb3Igdm9sdW1lIGNvdW50OiAlcyIsIHZhbCk7Ci0gICAgICAgICAgICAvKiBtaWdodCBiZSAwL04gb3IgLTEvTiB0byBzcGVjaWZ5IHRoYXQgdGhlcmUgaXMgb25seSBhIGNvdW50ICovCi0gICAgICAgICAgICBpZiAoc3NjYW5mICh2YWwsICIlZC8ldSIsICZkdW1teSwgJmNvdW50KSA9PSAyICYmIGNvdW50ID4gMCkgewotICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICAgICAgICAgIEdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5ULCBjb3VudCwgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIGlmIChzc2NhbmYgKHZhbCwgIiV1IiwgJnZfdWludCkgPT0gMSkgewotICAgICAgICAgICAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1VJTlQpOwotICAgICAgICAgICAgZ192YWx1ZV9zZXRfdWludCAoJnYsIHZfdWludCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR19UWVBFX1NUUklORzp7Ci0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1NUUklORyk7Ci0gICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdiwgdmFsKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdfVFlQRV9ET1VCTEU6ewotICAgICAgICAgIGdkb3VibGUgdl9kb3VibGU7Ci0gICAgICAgICAgZ2NoYXIgKmVuZHB0cjsKLQotICAgICAgICAgIC8qIGZsb2F0aW5nIHBvaW50IHN0cmluZ3MgY2FuIGJlICI0LDEyMyIgb3IgIjQuMTIzIiBkZXBlbmRpbmcgb24KLSAgICAgICAgICAgKiB0aGUgbG9jYWxlLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcGFyc2UgYW5kIHJlYWQgZWl0aGVyIHZlcnNpb24KLSAgICAgICAgICAgKiBubyBtYXR0ZXIgd2hhdCBvdXIgY3VycmVudCBsb2NhbGUgaXMgKi8KLSAgICAgICAgICBnX3N0cmRlbGltaXQgKHZhbCwgIiwiLCAnLicpOwotICAgICAgICAgIHZfZG91YmxlID0gZ19hc2NpaV9zdHJ0b2QgKHZhbCwgJmVuZHB0cik7Ci0gICAgICAgICAgaWYgKGVuZHB0ciAhPSB2YWwpIHsKLSAgICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9ET1VCTEUpOwotICAgICAgICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICgmdiwgdl9kb3VibGUpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6ewotICAgICAgICAgIGlmIChnc3RfdGFnX3R5cGUgPT0gR19UWVBFX0RBVEUpIHsKLSAgICAgICAgICAgIGdpbnQgdl9pbnQ7Ci0KLSAgICAgICAgICAgIGlmIChzc2NhbmYgKHZhbCwgIiVkIiwgJnZfaW50KSA9PSAxKSB7Ci0gICAgICAgICAgICAgIEdEYXRlICpkYXRlID0gZ19kYXRlX25ld19kbXkgKDEsIDEsIHZfaW50KTsKLQotICAgICAgICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHX1RZUEVfREFURSk7Ci0gICAgICAgICAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnYsIGRhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklORyAoIlVuaGFuZGxlZCB0YWcgdHlwZSAnJXMnIGZvciB0YWcgJyVzJyIsCi0gICAgICAgICAgICAgICAgZ190eXBlX25hbWUgKGdzdF90YWdfdHlwZSksIGdzdF90YWcpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKEdfVkFMVUVfVFlQRSAoJnYpICE9IDApIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZXMgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICAgICAgZ3N0X3RhZywgJnYsIE5VTEwpOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0gICAgICB9Ci0gICAgfQotICAgIEdTVF9ERUJVRyAoIlJlYWQgdGFnICVzOiAlcyIsIHRhZywgdmFsKTsKLSAgICBnX2ZyZWUgKHRhZyk7Ci0gICAgZ19mcmVlICh2YWwpOwotCi0gICAgLyogbW92ZSBkYXRhIHBvaW50ZXIgKi8KLSAgbmV4dF90YWc6Ci0gICAgc2l6ZSAtPSBsZW4gKyBuOwotICAgIGRhdGEgKz0gbGVuICsgbjsKLSAgfQotCi0gIEdTVF9ERUJVRyAoIlRhZ2xpc3Q6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdsaXN0KTsKLSAgcmV0dXJuIHRhZ2xpc3Q7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FwZV9kZW11eF9pZGVudGlmeV90YWcgKEdzdFRhZ0RlbXV4ICogZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBnYm9vbGVhbiBzdGFydF90YWcsIGd1aW50ICogdGFnX3NpemUpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG1lbWNtcCAobWFwLmRhdGEsICJBUEVUQUdFWCIsIDgpICE9IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIk5vIEFQRVRBR0VYIG1hcmtlciBhdCAlcyAtIG5vdCBhbiBBUEUgZmlsZSIsCi0gICAgICAgIChzdGFydF90YWcpID8gInN0YXJ0IiA6ICJlbmQiKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gICp0YWdfc2l6ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAobWFwLmRhdGEgKyAxMik7Ci0KLSAgLyogc2l6ZSBpcyB3aXRob3V0IGhlYWRlciwgc28gYWRkIDMyIHRvIGFjY291bnQgZm9yIHRoYXQgKi8KLSAgKnRhZ19zaXplICs9IDMyOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RUYWdEZW11eFJlc3VsdAotZ3N0X2FwZV9kZW11eF9wYXJzZV90YWcgKEdzdFRhZ0RlbXV4ICogZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBnYm9vbGVhbiBzdGFydF90YWcsIGd1aW50ICogdGFnX3NpemUsIEdzdFRhZ0xpc3QgKiogdGFncykKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludDggKmZvb3RlcjsKLSAgZ2Jvb2xlYW4gaGF2ZV9oZWFkZXI7Ci0gIGdib29sZWFuIGVuZF90YWcgPSAhc3RhcnRfdGFnOwotICBHc3RDYXBzICpzaW5rX2NhcHM7Ci0gIGd1aW50IHZlcnNpb24sIGZvb3Rlcl9zaXplOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3NpemUgc2l6ZTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJQYXJzaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULCBzaXplKTsKLQotICBmb290ZXIgPSBkYXRhICsgc2l6ZSAtIDMyOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIkNoZWNraW5nIGZvciBmb290ZXIgYXQgb2Zmc2V0IDB4JTA0eCIsCi0gICAgICAoZ3VpbnQpIChmb290ZXIgLSBkYXRhKSk7Ci0gIGlmIChmb290ZXIgPiBkYXRhICYmIG1lbWNtcCAoZm9vdGVyLCAiQVBFVEFHRVgiLCA4KSA9PSAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJGb3VuZCBmb290ZXIiKTsKLSAgICBmb290ZXJfc2l6ZSA9IDMyOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiTm8gZm9vdGVyIik7Ci0gICAgZm9vdGVyX3NpemUgPSAwOwotICB9Ci0KLSAgLyogQVBFIHRhZ3MgYXQgdGhlIGVuZCBtdXN0IGhhdmUgYSBmb290ZXIgKi8KLSAgaWYgKGVuZF90YWcgJiYgZm9vdGVyX3NpemUgPT0gMCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJUYWcgYXQgZW5kIG9mIGZpbGUgd2l0aG91dCBmb290ZXIhIik7Ci0gICAgcmV0dXJuIEdTVF9UQUdfREVNVVhfUkVTVUxUX0JST0tFTl9UQUc7Ci0gIH0KLQotICAvKiBkb24ndCB0cnVzdCB0aGUgaGVhZGVyL2Zvb3RlciBmbGFncywgYmV0dGVyIGRldGVjdCB0aGVtIG91cnNlbHZlcyAqLwotICBoYXZlX2hlYWRlciA9IChtZW1jbXAgKGRhdGEsICJBUEVUQUdFWCIsIDgpID09IDApOwotCi0gIGlmIChzdGFydF90YWcgJiYgIWhhdmVfaGVhZGVyKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJUYWcgYXQgYmVnaW5uaW5nIG9mIGZpbGUgd2l0aG91dCBoZWFkZXIhIik7Ci0gICAgcmV0dXJuIEdTVF9UQUdfREVNVVhfUkVTVUxUX0JST0tFTl9UQUc7Ci0gIH0KLQotICBpZiAoZW5kX3RhZyAmJiAhaGF2ZV9oZWFkZXIpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRhZyBhdCBlbmQgb2YgZmlsZSBoYXMgbm8gaGVhZGVyIChBUEV2MSkiKTsKLSAgICAqdGFnX3NpemUgLT0gMzI7ICAgICAgICAgICAgLyogYWRqdXN0IHRhZyBzaXplICovCi0gIH0KLQotICBpZiAoaGF2ZV9oZWFkZXIpIHsKLSAgICB2ZXJzaW9uID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgOCk7Ci0gIH0gZWxzZSB7Ci0gICAgdmVyc2lvbiA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZm9vdGVyICsgOCk7Ci0gIH0KLQotICAvKiBza2lwIGhlYWRlciAqLwotICBpZiAoaGF2ZV9oZWFkZXIpIHsKLSAgICBkYXRhICs9IDMyOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJBUEUgdGFnIHdpdGggdmVyc2lvbiAldSwgc2l6ZSAldSBhdCBvZmZzZXQgMHglMDgiCi0gICAgICBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIHZlcnNpb24sICp0YWdfc2l6ZSwKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpICsgKChoYXZlX2hlYWRlcikgPyAwIDogMzIpKTsKLQotICBpZiAoQVBFX1ZFUlNJT05fTUFKT1IgKHZlcnNpb24pICE9IDEgJiYgQVBFX1ZFUlNJT05fTUFKT1IgKHZlcnNpb24pICE9IDIpIHsKLSAgICBHU1RfV0FSTklORyAoIkFQRSB0YWcgaXMgdmVyc2lvbiAldS4lMDN1LCBidXQgZGVjb2RlciBvbmx5IHN1cHBvcnRzICIKLSAgICAgICAgInYxIG9yIHYyLiBJZ25vcmluZy4iLCBBUEVfVkVSU0lPTl9NQUpPUiAodmVyc2lvbiksIHZlcnNpb24gJSAxMDAwKTsKLSAgICByZXR1cm4gR1NUX1RBR19ERU1VWF9SRVNVTFRfT0s7Ci0gIH0KLQotICAqdGFncyA9IGFwZV9kZW11eF9wYXJzZV90YWdzIChkYXRhLCAqdGFnX3NpemUgLSBmb290ZXJfc2l6ZSk7Ci0KLSAgc2lua19jYXBzID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZzaW5rX2ZhY3RvcnkpOwotICBnc3RfcGJfdXRpbHNfYWRkX2NvZGVjX2Rlc2NyaXB0aW9uX3RvX3RhZ19saXN0ICgqdGFncywKLSAgICAgIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCwgc2lua19jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtfY2Fwcyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX1RBR19ERU1VWF9SRVNVTFRfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhcGVkZW11eCIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZLCBHU1RfVFlQRV9BUEVfREVNVVgpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgYXBldGFnLAotICAgICJBUEV2MS8yIHRhZyByZWFkZXIiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaCBiL2dzdC9hcGV0YWcvZ3N0YXBlZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM0MDU0Ny4uMDAwMDAwMAotLS0gYS9nc3QvYXBldGFnL2dzdGFwZWRlbXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgQVBFdjEvMiB0YWcgcmVhZGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BUEVfREVNVVhfSF9fCi0jZGVmaW5lIF9fR1NUX0FQRV9ERU1VWF9IX18KLQotI2luY2x1ZGUgPGdzdC90YWcvZ3N0dGFnZGVtdXguaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FQRV9ERU1VWCAgICAgICAgICAgICAoZ3N0X2FwZV9kZW11eF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVBFX0RFTVVYKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FQRV9ERU1VWCxHc3RBcGVEZW11eCkpCi0jZGVmaW5lIEdTVF9BUEVfREVNVVhfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9BUEVfREVNVVgsR3N0QXBlRGVtdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BUEVfREVNVVgob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVBFX0RFTVVYKSkKLSNkZWZpbmUgR1NUX0lTX0FQRV9ERU1VWF9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FQRV9ERU1VWCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBcGVEZW11eCAgICAgIEdzdEFwZURlbXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFwZURlbXV4Q2xhc3MgR3N0QXBlRGVtdXhDbGFzczsKLQotc3RydWN0IF9Hc3RBcGVEZW11eAotewotICBHc3RUYWdEZW11eCB0YWdkZW11eDsKLX07Ci0KLXN0cnVjdCBfR3N0QXBlRGVtdXhDbGFzcyAKLXsKLSAgR3N0VGFnRGVtdXhDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfYXBlX2RlbXV4X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FQRV9ERU1VWF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvTWFrZWZpbGUuYW0gYi9nc3QvYXVkaW9meC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNkZDE3NC4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSMgcGx1Z2luZGlyIGlzIHNldCBpbiBjb25maWd1cmUKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YXVkaW9meC5sYQotCi0jIEZJWE1FIDAuMTE6IGlnbm9yZSBHVmFsdWVBcnJheSB3YXJuaW5ncyBmb3Igbm93IHVudGlsIHRoaXMgaXMgc29ydGVkCi1FUlJPUl9DRkxBR1M9Ci0KLU9SQ19TT1VSQ0U9YXVkaW9wYW5vcmFtYW9yYwotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrCi0KLSMgc291cmNlcyB1c2VkIHRvIGNvbXBpbGUgdGhpcyBwbHVnLWluCi1saWJnc3RhdWRpb2Z4X2xhX1NPVVJDRVMgPSBhdWRpb2Z4LmNcCi0JYXVkaW9wYW5vcmFtYS5jIFwKLQlhdWRpb2ludmVydC5jIFwKLQlhdWRpb2FtcGxpZnkuYyBcCi0JYXVkaW9keW5hbWljLmMgXAotCWF1ZGlva2FyYW9rZS5jIFwKLQlhdWRpb2Z4YmFzZWlpcmZpbHRlci5jIFwKLQlhdWRpb2NoZWJsaW1pdC5jIFwKLQlhdWRpb2NoZWJiYW5kLmMgXAotCWF1ZGlvaWlyZmlsdGVyLmMgXAotCWF1ZGlvZnhiYXNlZmlyZmlsdGVyLmMgXAotCWF1ZGlvd3NpbmNiYW5kLmMgXAotCWF1ZGlvd3NpbmNsaW1pdC5jIFwKLQlhdWRpb2ZpcmZpbHRlci5jIFwKLQlhdWRpb2VjaG8uYyBcCi0JZ3N0c2NhbGV0ZW1wby5jCi1ub2Rpc3RfbGliZ3N0YXVkaW9meF9sYV9TT1VSQ0VTID0gJChPUkNfTk9ESVNUX1NPVVJDRVMpCi0KLSMgZmxhZ3MgdXNlZCB0byBjb21waWxlIHRoaXMgcGx1Z2luCi1saWJnc3RhdWRpb2Z4X2xhX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoT1JDX0NGTEFHUykKLWxpYmdzdGF1ZGlvZnhfbGFfTElCQUREID0gJChHU1RfTElCUykgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgXAotCS1sZ3N0ZmZ0LSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChPUkNfTElCUykgXAotCSQoTElCTSkKLWxpYmdzdGF1ZGlvZnhfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi0jIGhlYWRlcnMgd2UgbmVlZCBidXQgZG9uJ3Qgd2FudCBpbnN0YWxsZWQKLW5vaW5zdF9IRUFERVJTID0gYXVkaW9wYW5vcmFtYS5oIFwKLQlhdWRpb2ludmVydC5oIFwKLQlhdWRpb2FtcGxpZnkuaCBcCi0JYXVkaW9keW5hbWljLmggXAotCWF1ZGlva2FyYW9rZS5oIFwKLQlhdWRpb2Z4YmFzZWlpcmZpbHRlci5oIFwKLQlhdWRpb2NoZWJsaW1pdC5oIFwKLQlhdWRpb2NoZWJiYW5kLmggXAotCWF1ZGlvaWlyZmlsdGVyLmggXAotCWF1ZGlvZnhiYXNlZmlyZmlsdGVyLmggXAotCWF1ZGlvd3NpbmNiYW5kLmggXAotICAgICAgICBhdWRpb3dzaW5jbGltaXQuaCBcCi0JYXVkaW9maXJmaWx0ZXIuaCBcCi0JYXVkaW9lY2hvLmggXAotCWdzdHNjYWxldGVtcG8uaCBcCi0JbWF0aF9jb21wYXQuaApkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvTWFrZWZpbGUuaW4gYi9nc3QvYXVkaW9meC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmNDI1Zi4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDExODkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLSMgcGx1Z2luZGlyIGlzIHNldCBpbiBjb25maWd1cmUKLQotIwotIyBUaGlzIGlzIGEgbWFrZWZpbGUuYW0gZnJhZ21lbnQgdG8gYnVpbGQgT3JjIGNvZGUuCi0jCi0jIERlZmluZSBPUkNfU09VUkNFIGFuZCB0aGVuIGluY2x1ZGUgdGhpcyBmaWxlLCBzdWNoIGFzOgotIwotIyAgT1JDX1NPVVJDRT1nc3RhZGRlcm9yYwotIyAgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrCi0jCi0jIFRoaXMgZnJhZ21lbnQgd2lsbCBjcmVhdGUgdG1wLW9yYy5jIGFuZCBnc3RhZGRlcm9yYy5oIGZyb20KLSMgZ3N0YWRkZXJvcmMub3JjLgotIwotIyBXaGVuICdtYWtlIGRpc3QnIGlzIHJ1biBhdCB0aGUgdG9wIGxldmVsLCBvciAnbWFrZSBvcmMtdXBkYXRlJwotIyBpbiBhIGRpcmVjdG9yeSBpbmNsdWRpbmcgdGhpcyBmcmFnbWVudCwgdGhlIGdlbmVyYXRlZCBzb3VyY2UgCi0jIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvICQoT1JDX1NPVVJDRSktZGlzdC5bY2hdLiAgVGhlc2UgZmlsZXMKLSMgc2hvdWxkIGJlIGNoZWNrZWQgaW4gdG8gZ2l0LCBzaW5jZSB0aGV5IGFyZSB1c2VkIGlmIE9yYyBpcwotIyBkaXNhYmxlZC4KLSMgCi0jIE5vdGUgdGhhdCB0aGlzIGZpbGUgZGVmaW5lcyBCVUlMVF9TT1VSQ0VTLCBzbyBhbnkgbGF0ZXIgdXNhZ2UKLSMgb2YgQlVJTFRfU09VUkNFUyBpbiB0aGUgTWFrZWZpbGUuYW0gdGhhdCBpbmNsdWRlcyB0aGlzIGZpbGUKLSMgbXVzdCB1c2UgJys9Jy4KLSMKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvYXVkaW9meAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGF1ZGlvZnhfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RhdWRpb2Z4X2xhX09CSkVDVFMgPSBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZngubG8gXAotCWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9wYW5vcmFtYS5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ludmVydC5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkubG8gXAotCWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9keW5hbWljLmxvIFwKLQlsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlva2FyYW9rZS5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJsaW1pdC5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJiYW5kLmxvIFwKLQlsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvaWlyZmlsdGVyLmxvIFwKLQlsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZnhiYXNlZmlyZmlsdGVyLmxvIFwKLQlsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNiYW5kLmxvIFwKLQlsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNsaW1pdC5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ZpcmZpbHRlci5sbyBcCi0JbGliZ3N0YXVkaW9meF9sYS1hdWRpb2VjaG8ubG8gXAotCWxpYmdzdGF1ZGlvZnhfbGEtZ3N0c2NhbGV0ZW1wby5sbwotYW1fX29iamVjdHNfMSA9IGxpYmdzdGF1ZGlvZnhfbGEtdG1wLW9yYy5sbwotbm9kaXN0X2xpYmdzdGF1ZGlvZnhfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkKLWxpYmdzdGF1ZGlvZnhfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0YXVkaW9meF9sYV9PQkpFQ1RTKSBcCi0JJChub2Rpc3RfbGliZ3N0YXVkaW9meF9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0YXVkaW9meF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGF1ZGlvZnhfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0YXVkaW9meF9sYV9TT1VSQ0VTKSBcCi0JJChub2Rpc3RfbGliZ3N0YXVkaW9meF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RhdWRpb2Z4X2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrIFwKLQkkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotCi0jIEZJWE1FIDAuMTE6IGlnbm9yZSBHVmFsdWVBcnJheSB3YXJuaW5ncyBmb3Igbm93IHVudGlsIHRoaXMgaXMgc29ydGVkCi1FUlJPUl9DRkxBR1MgPSAKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGF1ZGlvZngubGEKLU9SQ19TT1VSQ0UgPSBhdWRpb3Bhbm9yYW1hb3JjCi1FWFRSQV9ESVNUID0gJChPUkNfU09VUkNFKS5vcmMKLU9SQ19OT0RJU1RfU09VUkNFUyA9IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLUJVSUxUX1NPVVJDRVMgPSB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi1vcmNjX3ZfZ2VuID0gJChvcmNjX3ZfZ2VuXyQoVikpCi1vcmNjX3ZfZ2VuXyA9ICQob3JjY192X2dlbl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKLW9yY2Nfdl9nZW5fMCA9IEBlY2hvICIgIE9SQ0MgICAkQCI7Ci1jcF92X2dlbiA9ICQoY3Bfdl9nZW5fJChWKSkKLWNwX3ZfZ2VuXyA9ICQoY3Bfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1jcF92X2dlbl8wID0gQGVjaG8gIiAgQ1AgICAgICRAIjsKLQotIyBzb3VyY2VzIHVzZWQgdG8gY29tcGlsZSB0aGlzIHBsdWctaW4KLWxpYmdzdGF1ZGlvZnhfbGFfU09VUkNFUyA9IGF1ZGlvZnguY1wKLQlhdWRpb3Bhbm9yYW1hLmMgXAotCWF1ZGlvaW52ZXJ0LmMgXAotCWF1ZGlvYW1wbGlmeS5jIFwKLQlhdWRpb2R5bmFtaWMuYyBcCi0JYXVkaW9rYXJhb2tlLmMgXAotCWF1ZGlvZnhiYXNlaWlyZmlsdGVyLmMgXAotCWF1ZGlvY2hlYmxpbWl0LmMgXAotCWF1ZGlvY2hlYmJhbmQuYyBcCi0JYXVkaW9paXJmaWx0ZXIuYyBcCi0JYXVkaW9meGJhc2VmaXJmaWx0ZXIuYyBcCi0JYXVkaW93c2luY2JhbmQuYyBcCi0JYXVkaW93c2luY2xpbWl0LmMgXAotCWF1ZGlvZmlyZmlsdGVyLmMgXAotCWF1ZGlvZWNoby5jIFwKLQlnc3RzY2FsZXRlbXBvLmMKLQotbm9kaXN0X2xpYmdzdGF1ZGlvZnhfbGFfU09VUkNFUyA9ICQoT1JDX05PRElTVF9TT1VSQ0VTKQotCi0jIGZsYWdzIHVzZWQgdG8gY29tcGlsZSB0aGlzIHBsdWdpbgotbGliZ3N0YXVkaW9meF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKE9SQ19DRkxBR1MpCi0KLWxpYmdzdGF1ZGlvZnhfbGFfTElCQUREID0gJChHU1RfTElCUykgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgXAotCS1sZ3N0ZmZ0LSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChPUkNfTElCUykgXAotCSQoTElCTSkKLQotbGliZ3N0YXVkaW9meF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLSMgaGVhZGVycyB3ZSBuZWVkIGJ1dCBkb24ndCB3YW50IGluc3RhbGxlZAotbm9pbnN0X0hFQURFUlMgPSBhdWRpb3Bhbm9yYW1hLmggXAotCWF1ZGlvaW52ZXJ0LmggXAotCWF1ZGlvYW1wbGlmeS5oIFwKLQlhdWRpb2R5bmFtaWMuaCBcCi0JYXVkaW9rYXJhb2tlLmggXAotCWF1ZGlvZnhiYXNlaWlyZmlsdGVyLmggXAotCWF1ZGlvY2hlYmxpbWl0LmggXAotCWF1ZGlvY2hlYmJhbmQuaCBcCi0JYXVkaW9paXJmaWx0ZXIuaCBcCi0JYXVkaW9meGJhc2VmaXJmaWx0ZXIuaCBcCi0JYXVkaW93c2luY2JhbmQuaCBcCi0gICAgICAgIGF1ZGlvd3NpbmNsaW1pdC5oIFwKLQlhdWRpb2ZpcmZpbHRlci5oIFwKLQlhdWRpb2VjaG8uaCBcCi0JZ3N0c2NhbGV0ZW1wby5oIFwKLQltYXRoX2NvbXBhdC5oCi0KLWFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1ZGlvZngvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1ZGlvZngvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotJCh0b3Bfc3JjZGlyKS9jb21tb24vb3JjLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGF1ZGlvZngubGE6ICQobGliZ3N0YXVkaW9meF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGF1ZGlvZnhfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGF1ZGlvZnhfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGF1ZGlvZnhfbGFfT0JKRUNUUykgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmJhbmQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmxpbWl0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2R5bmFtaWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZWNoby5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9maXJmaWx0ZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZnguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZnhiYXNlZmlyZmlsdGVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9paXJmaWx0ZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvaW52ZXJ0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2thcmFva2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvcGFub3JhbWEuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNiYW5kLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb3dzaW5jbGltaXQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWdzdHNjYWxldGVtcG8uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLXRtcC1vcmMuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meC5sbzogYXVkaW9meC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZngubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meC5UcG8gLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4LmxvIGB0ZXN0IC1mICdhdWRpb2Z4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvZnguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4LlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F1ZGlvZnguYycgb2JqZWN0PSdsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZngubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4LmxvIGB0ZXN0IC1mICdhdWRpb2Z4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvZnguYwotCi1saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvcGFub3JhbWEubG86IGF1ZGlvcGFub3JhbWEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb3Bhbm9yYW1hLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvcGFub3JhbWEuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9wYW5vcmFtYS5sbyBgdGVzdCAtZiAnYXVkaW9wYW5vcmFtYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb3Bhbm9yYW1hLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9wYW5vcmFtYS5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9wYW5vcmFtYS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdWRpb3Bhbm9yYW1hLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1hdWRpb3Bhbm9yYW1hLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9wYW5vcmFtYS5sbyBgdGVzdCAtZiAnYXVkaW9wYW5vcmFtYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb3Bhbm9yYW1hLmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ludmVydC5sbzogYXVkaW9pbnZlcnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ludmVydC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ludmVydC5UcG8gLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ludmVydC5sbyBgdGVzdCAtZiAnYXVkaW9pbnZlcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9pbnZlcnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ludmVydC5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9pbnZlcnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9pbnZlcnQuYycgb2JqZWN0PSdsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvaW52ZXJ0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9pbnZlcnQubG8gYHRlc3QgLWYgJ2F1ZGlvaW52ZXJ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvaW52ZXJ0LmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkubG86IGF1ZGlvYW1wbGlmeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvYW1wbGlmeS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9hbXBsaWZ5LmxvIGB0ZXN0IC1mICdhdWRpb2FtcGxpZnkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9hbXBsaWZ5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9hbXBsaWZ5LlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9hbXBsaWZ5LmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2FtcGxpZnkubG8gYHRlc3QgLWYgJ2F1ZGlvYW1wbGlmeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb2FtcGxpZnkuYwotCi1saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZHluYW1pYy5sbzogYXVkaW9keW5hbWljLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9keW5hbWljLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZHluYW1pYy5UcG8gLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2R5bmFtaWMubG8gYHRlc3QgLWYgJ2F1ZGlvZHluYW1pYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb2R5bmFtaWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2R5bmFtaWMuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZHluYW1pYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhdWRpb2R5bmFtaWMuYycgb2JqZWN0PSdsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZHluYW1pYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZHluYW1pYy5sbyBgdGVzdCAtZiAnYXVkaW9keW5hbWljLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvZHluYW1pYy5jCi0KLWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9rYXJhb2tlLmxvOiBhdWRpb2thcmFva2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb2thcmFva2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9rYXJhb2tlLlRwbyAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlva2FyYW9rZS5sbyBgdGVzdCAtZiAnYXVkaW9rYXJhb2tlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlva2FyYW9rZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlva2FyYW9rZS5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9rYXJhb2tlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F1ZGlva2FyYW9rZS5jJyBvYmplY3Q9J2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9rYXJhb2tlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9rYXJhb2tlLmxvIGB0ZXN0IC1mICdhdWRpb2thcmFva2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9rYXJhb2tlLmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5sbzogYXVkaW9meGJhc2VpaXJmaWx0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5UcG8gLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5sbyBgdGVzdCAtZiAnYXVkaW9meGJhc2VpaXJmaWx0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9meGJhc2VpaXJmaWx0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWlpcmZpbHRlci5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VpaXJmaWx0ZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9meGJhc2VpaXJmaWx0ZXIuYycgb2JqZWN0PSdsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZnhiYXNlaWlyZmlsdGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VpaXJmaWx0ZXIubG8gYHRlc3QgLWYgJ2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvZnhiYXNlaWlyZmlsdGVyLmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJsaW1pdC5sbzogYXVkaW9jaGVibGltaXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJsaW1pdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJsaW1pdC5UcG8gLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJsaW1pdC5sbyBgdGVzdCAtZiAnYXVkaW9jaGVibGltaXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9jaGVibGltaXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJsaW1pdC5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9jaGVibGltaXQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9jaGVibGltaXQuYycgb2JqZWN0PSdsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmxpbWl0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9jaGVibGltaXQubG8gYHRlc3QgLWYgJ2F1ZGlvY2hlYmxpbWl0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvY2hlYmxpbWl0LmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJiYW5kLmxvOiBhdWRpb2NoZWJiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9jaGViYmFuZC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2NoZWJiYW5kLlRwbyAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmJhbmQubG8gYHRlc3QgLWYgJ2F1ZGlvY2hlYmJhbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9jaGViYmFuZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmJhbmQuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmJhbmQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9jaGViYmFuZC5jJyBvYmplY3Q9J2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9jaGViYmFuZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvY2hlYmJhbmQubG8gYHRlc3QgLWYgJ2F1ZGlvY2hlYmJhbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9jaGViYmFuZC5jCi0KLWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9paXJmaWx0ZXIubG86IGF1ZGlvaWlyZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9paXJmaWx0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9paXJmaWx0ZXIuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9paXJmaWx0ZXIubG8gYHRlc3QgLWYgJ2F1ZGlvaWlyZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvaWlyZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9paXJmaWx0ZXIuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvaWlyZmlsdGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F1ZGlvaWlyZmlsdGVyLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1hdWRpb2lpcmZpbHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvaWlyZmlsdGVyLmxvIGB0ZXN0IC1mICdhdWRpb2lpcmZpbHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb2lpcmZpbHRlci5jCi0KLWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VmaXJmaWx0ZXIubG86IGF1ZGlvZnhiYXNlZmlyZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VmaXJmaWx0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VmaXJmaWx0ZXIuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VmaXJmaWx0ZXIubG8gYHRlc3QgLWYgJ2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvZnhiYXNlZmlyZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9meGJhc2VmaXJmaWx0ZXIuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZnhiYXNlZmlyZmlsdGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1hdWRpb2Z4YmFzZWZpcmZpbHRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZnhiYXNlZmlyZmlsdGVyLmxvIGB0ZXN0IC1mICdhdWRpb2Z4YmFzZWZpcmZpbHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb2Z4YmFzZWZpcmZpbHRlci5jCi0KLWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2JhbmQubG86IGF1ZGlvd3NpbmNiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2JhbmQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2JhbmQuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2JhbmQubG8gYHRlc3QgLWYgJ2F1ZGlvd3NpbmNiYW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvd3NpbmNiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2JhbmQuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNiYW5kLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F1ZGlvd3NpbmNiYW5kLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1hdWRpb3dzaW5jYmFuZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNiYW5kLmxvIGB0ZXN0IC1mICdhdWRpb3dzaW5jYmFuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb3dzaW5jYmFuZC5jCi0KLWxpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2xpbWl0LmxvOiBhdWRpb3dzaW5jbGltaXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb3dzaW5jbGltaXQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2xpbWl0LlRwbyAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNsaW1pdC5sbyBgdGVzdCAtZiAnYXVkaW93c2luY2xpbWl0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvd3NpbmNsaW1pdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWF1ZGlvd3NpbmNsaW1pdC5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2xpbWl0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2F1ZGlvd3NpbmNsaW1pdC5jJyBvYmplY3Q9J2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2xpbWl0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW93c2luY2xpbWl0LmxvIGB0ZXN0IC1mICdhdWRpb3dzaW5jbGltaXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW93c2luY2xpbWl0LmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ZpcmZpbHRlci5sbzogYXVkaW9maXJmaWx0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ZpcmZpbHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ZpcmZpbHRlci5UcG8gLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ZpcmZpbHRlci5sbyBgdGVzdCAtZiAnYXVkaW9maXJmaWx0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9maXJmaWx0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2ZpcmZpbHRlci5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9maXJmaWx0ZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9maXJmaWx0ZXIuYycgb2JqZWN0PSdsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZmlyZmlsdGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9maXJmaWx0ZXIubG8gYHRlc3QgLWYgJ2F1ZGlvZmlyZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGF1ZGlvZmlyZmlsdGVyLmMKLQotbGliZ3N0YXVkaW9meF9sYS1hdWRpb2VjaG8ubG86IGF1ZGlvZWNoby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdWRpb2Z4X2xhLWF1ZGlvZWNoby5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2VjaG8uVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtYXVkaW9lY2hvLmxvIGB0ZXN0IC1mICdhdWRpb2VjaG8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXVkaW9lY2hvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtYXVkaW9lY2hvLlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS1hdWRpb2VjaG8uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXVkaW9lY2hvLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1hdWRpb2VjaG8ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXVkaW9meF9sYS1hdWRpb2VjaG8ubG8gYHRlc3QgLWYgJ2F1ZGlvZWNoby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdWRpb2VjaG8uYwotCi1saWJnc3RhdWRpb2Z4X2xhLWdzdHNjYWxldGVtcG8ubG86IGdzdHNjYWxldGVtcG8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9meF9sYS1nc3RzY2FsZXRlbXBvLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLWdzdHNjYWxldGVtcG8uVHBvIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtZ3N0c2NhbGV0ZW1wby5sbyBgdGVzdCAtZiAnZ3N0c2NhbGV0ZW1wby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzY2FsZXRlbXBvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtZ3N0c2NhbGV0ZW1wby5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvZnhfbGEtZ3N0c2NhbGV0ZW1wby5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzY2FsZXRlbXBvLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9meF9sYS1nc3RzY2FsZXRlbXBvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9meF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb2Z4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvZnhfbGEtZ3N0c2NhbGV0ZW1wby5sbyBgdGVzdCAtZiAnZ3N0c2NhbGV0ZW1wby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzY2FsZXRlbXBvLmMKLQotbGliZ3N0YXVkaW9meF9sYS10bXAtb3JjLmxvOiB0bXAtb3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb2Z4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvZnhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvZnhfbGEtdG1wLW9yYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9meF9sYS10bXAtb3JjLlRwbyAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLXRtcC1vcmMubG8gYHRlc3QgLWYgJ3RtcC1vcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdG1wLW9yYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLXRtcC1vcmMuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb2Z4X2xhLXRtcC1vcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndG1wLW9yYy5jJyBvYmplY3Q9J2xpYmdzdGF1ZGlvZnhfbGEtdG1wLW9yYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvZnhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9meF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb2Z4X2xhLXRtcC1vcmMubG8gYHRlc3QgLWYgJ3RtcC1vcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdG1wLW9yYy5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKLQkgIGRpc3QtaG9vawotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotCS10ZXN0IC16ICIkKEJVSUxUX1NPVVJDRVMpIiB8fCBybSAtZiAkKEJVSUxUX1NPVVJDRVMpCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCi0JY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBhbGwgY2hlY2sgaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0LWhvb2sgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotb3JjLXVwZGF0ZTogdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1pbmRlbnQgdG1wLW9yYy5jCi0JY3AgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCWNwICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmgKLQotQEhBVkVfT1JDQ19UUlVFQHRtcC1vcmMuYzogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi1ASEFWRV9PUkNDX1RSVUVACSQob3JjY192X2dlbikkKE9SQ0MpICQoT1JDQ19GTEFHUykgLS1pbXBsZW1lbnRhdGlvbiAtLWluY2x1ZGUgZ2xpYi5oIC1vIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLQotQEhBVkVfT1JDQ19UUlVFQCQoT1JDX1NPVVJDRSkuaDogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi1ASEFWRV9PUkNDX1RSVUVACSQob3JjY192X2dlbikkKE9SQ0MpICQoT1JDQ19GTEFHUykgLS1oZWFkZXIgLS1pbmNsdWRlIGdsaWIuaCAtbyAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi1ASEFWRV9PUkNDX0ZBTFNFQHRtcC1vcmMuYzogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotQEhBVkVfT1JDQ19GQUxTRUAJJChjcF92X2dlbiljcCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgdG1wLW9yYy5jCi0KLUBIQVZFX09SQ0NfRkFMU0VAJChPUkNfU09VUkNFKS5oOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi1ASEFWRV9PUkNDX0ZBTFNFQAkkKGNwX3ZfZ2VuKWNwICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCAkKE9SQ19TT1VSQ0UpLmgKLQotY2xlYW4tbG9jYWw6IGNsZWFuLW9yYwotLlBIT05ZOiBjbGVhbi1vcmMKLWNsZWFuLW9yYzoKLQlybSAtZiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0KLWRpc3QtaG9vazogZGlzdC1ob29rLW9yYwotLlBIT05ZOiBkaXN0LWhvb2stb3JjCi0KLSMgd2UgdHJ5IGFuZCBjb3B5IHVwZGF0ZWQgb3JjIC1kaXN0IGZpbGVzIGJlbG93LCBidXQgZG9uJ3QgZmFpbCBpZiBpdAotIyBkb2Vzbid0IHdvcmsgYXMgdGhlIHNyY2RpciBtaWdodCBub3QgYmUgd3JpdGFibGUKLWRpc3QtaG9vay1vcmM6IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtaW5kZW50IHRtcC1vcmMuYwotCXJtIC1mIHRtcC1vcmMuY34KLQljbXAgLXMgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB8fCBcCi0JICBjcCB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHx8IHRydWUKLQljbXAgLXMgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCB8fCBcCi0JICBjcCAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oIHx8IHRydWUKLQljcCAtcCB0bXAtb3JjLmMgJChkaXN0ZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCWNwIC1wICQoT1JDX1NPVVJDRSkuaCAkKGRpc3RkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5jIGIvZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNmNlMGUuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9hbXBsaWZ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzYgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWF1ZGlvYW1wbGlmeQotICoKLSAqIEFtcGxpZmllcyBhbiBhdWRpbyBzdHJlYW0gYnkgYSBnaXZlbiBmYWN0b3IgYW5kIGFsbG93cyB0aGUgc2VsZWN0aW9uIG9mIGRpZmZlcmVudCBjbGlwcGluZyBtb2Rlcy4KLSAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNsaXBwaW5nIG1vZGVzIGlzIGJlc3QgZXZhbHVhdGVkIGJ5IHRlc3RpbmcuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyB3YXZlPXNhdyAhIGF1ZGlvYW1wbGlmeSBhbXBsaWZpY2F0aW9uPTEuNSAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPSJtZWxvMS5vZ2ciICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb2FtcGxpZnkgYW1wbGlmaWNhdGlvbj0xLjUgY2xpcHBpbmctbWV0aG9kPXdyYXAtbmVnYXRpdmUgISBhbHNhc2luawotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIHdhdmU9c2F3ICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9hbXBsaWZ5IGFtcGxpZmljYXRpb249MS41IGNsaXBwaW5nLW1ldGhvZD13cmFwLXBvc2l0aXZlICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2FtcGxpZnkuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2F1ZGlvX2FtcGxpZnlfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLS8qIEZpbHRlciBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0FNUExJRklDQVRJT04sCi0gIFBST1BfQ0xJUFBJTkdfTUVUSE9ECi19OwotCi1lbnVtCi17Ci0gIE1FVEhPRF9DTElQID0gMCwKLSAgTUVUSE9EX1dSQVBfTkVHQVRJVkUsCi0gIE1FVEhPRF9XUkFQX1BPU0lUSVZFLAotICBNRVRIT0RfTk9DTElQLAotICBOVU1fTUVUSE9EUwotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9BVURJT19BTVBMSUZZX0NMSVBQSU5HX01FVEhPRCAoZ3N0X2F1ZGlvX2FtcGxpZnlfY2xpcHBpbmdfbWV0aG9kX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfYXVkaW9fYW1wbGlmeV9jbGlwcGluZ19tZXRob2RfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBndHlwZSA9IDA7Ci0KLSAgaWYgKGd0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHtNRVRIT0RfQ0xJUCwgIk5vcm1hbCBjbGlwcGluZyAoZGVmYXVsdCkiLCAiY2xpcCJ9LAotICAgICAge01FVEhPRF9XUkFQX05FR0FUSVZFLAotICAgICAgICAgICAgIlB1c2ggb3ZlcmRyaXZlbiB2YWx1ZXMgYmFjayBmcm9tIHRoZSBvcHBvc2l0ZSBzaWRlIiwKLSAgICAgICAgICAid3JhcC1uZWdhdGl2ZSJ9LAotICAgICAge01FVEhPRF9XUkFQX1BPU0lUSVZFLCAiUHVzaCBvdmVyZHJpdmVuIHZhbHVlcyBiYWNrIGZyb20gdGhlIHNhbWUgc2lkZSIsCi0gICAgICAgICAgIndyYXAtcG9zaXRpdmUifSwKLSAgICAgIHtNRVRIT0RfTk9DTElQLCAiTm8gY2xpcHBpbmciLCAibm9uZSJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9Ci0gICAgfTsKLSAgICBndHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RBdWRpb0FtcGxpZnlDbGlwcGluZ01ldGhvZCIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIGd0eXBlOwotfQotCi0jZGVmaW5lIEFMTE9XRURfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJhdWRpby94LXJhdywiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGZvcm1hdD0oc3RyaW5nKSB7UzgsIkdTVF9BVURJT19ORShTMTYpIiwiR1NUX0FVRElPX05FKFMzMikiLCIgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfQVVESU9fTkUoRjMyKSIsIkdTVF9BVURJT19ORShGNjQpIn0sIiAgXAotICAgICIgcmF0ZT0oaW50KVsxLE1BWF0sIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWxzPShpbnQpWzEsTUFYXSwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBsYXlvdXQ9KHN0cmluZykge2ludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWR9IgotCi1HX0RFRklORV9UWVBFIChHc3RBdWRpb0FtcGxpZnksIGdzdF9hdWRpb19hbXBsaWZ5LCBHU1RfVFlQRV9BVURJT19GSUxURVIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKEdzdEF1ZGlvQW1wbGlmeSAqCi0gICAgZmlsdGVyLCBnaW50IGNsaXBwaW5nLCBHc3RBdWRpb0Zvcm1hdCBmb3JtYXQpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2FtcGxpZnlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogZmlsdGVyLAotICAgIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotCi0jZGVmaW5lIE1JTl9naW50OCBHX01JTklOVDgKLSNkZWZpbmUgTUFYX2dpbnQ4IEdfTUFYSU5UOAotI2RlZmluZSBNSU5fZ2ludDE2IEdfTUlOSU5UMTYKLSNkZWZpbmUgTUFYX2dpbnQxNiBHX01BWElOVDE2Ci0jZGVmaW5lIE1JTl9naW50MzIgR19NSU5JTlQzMgotI2RlZmluZSBNQVhfZ2ludDMyIEdfTUFYSU5UMzIKLQotI2RlZmluZSBNQUtFX0lOVF9GVU5DUyh0eXBlLGxhcmdldHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtXyMjdHlwZSMjX2NsaXAgKEdzdEF1ZGlvQW1wbGlmeSAqIGZpbHRlciwgICAgICAgICAgXAotICAgIHZvaWQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0eXBlICpkID0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAobnVtX3NhbXBsZXMtLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGxhcmdldHlwZSB2YWwgPSAqZCAqIGZpbHRlci0+YW1wbGlmaWNhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpkKysgPSAgQ0xBTVAgKHZhbCwgTUlOXyMjdHlwZSwgTUFYXyMjdHlwZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtXyMjdHlwZSMjX3dyYXBfbmVnYXRpdmUgKEdzdEF1ZGlvQW1wbGlmeSAqIGZpbHRlciwgXAotICAgIHZvaWQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0eXBlICpkID0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAobnVtX3NhbXBsZXMtLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGxhcmdldHlwZSB2YWwgPSAqZCAqIGZpbHRlci0+YW1wbGlmaWNhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICh2YWwgPiBNQVhfIyN0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdmFsID0gTUlOXyMjdHlwZSArICh2YWwgLSBNSU5fIyN0eXBlKSAlICgobGFyZ2V0eXBlKSBNQVhfIyN0eXBlICsgMSAtICAgXAotICAgICAgICAgIE1JTl8jI3R5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKHZhbCA8IE1JTl8jI3R5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdmFsID0gTUFYXyMjdHlwZSAtIChNQVhfIyN0eXBlIC0gdmFsKSAlICgobGFyZ2V0eXBlKSBNQVhfIyN0eXBlICsgMSAtICAgXAotICAgICAgICAgIE1JTl8jI3R5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpkKysgPSB2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtXyMjdHlwZSMjX3dyYXBfcG9zaXRpdmUgKEdzdEF1ZGlvQW1wbGlmeSAqIGZpbHRlciwgXAotICAgIHZvaWQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0eXBlICpkID0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAobnVtX3NhbXBsZXMtLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGxhcmdldHlwZSB2YWwgPSAqZCAqIGZpbHRlci0+YW1wbGlmaWNhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKHZhbCA+IE1BWF8jI3R5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB2YWwgPSBNQVhfIyN0eXBlIC0gKHZhbCAtIE1BWF8jI3R5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSBpZiAodmFsIDwgTUlOXyMjdHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB2YWwgPSBNSU5fIyN0eXBlICsgKE1JTl8jI3R5cGUgLSB2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpkKysgPSB2YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtXyMjdHlwZSMjX25vY2xpcCAoR3N0QXVkaW9BbXBsaWZ5ICogZmlsdGVyLCAgICAgICAgXAotICAgIHZvaWQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0eXBlICpkID0gZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB3aGlsZSAobnVtX3NhbXBsZXMtLSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpkKysgKj0gZmlsdGVyLT5hbXBsaWZpY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIE1BS0VfRkxPQVRfRlVOQ1ModHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fIyN0eXBlIyNfY2xpcCAoR3N0QXVkaW9BbXBsaWZ5ICogZmlsdGVyLCAgICAgICAgICBcCi0gICAgdm9pZCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHR5cGUgKmQgPSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHdoaWxlIChudW1fc2FtcGxlcy0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdHlwZSB2YWwgPSAqZCogZmlsdGVyLT5hbXBsaWZpY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKmQrKyA9IENMQU1QICh2YWwsIC0xLjAsICsxLjApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fIyN0eXBlIyNfd3JhcF9uZWdhdGl2ZSAoR3N0QXVkaW9BbXBsaWZ5ICogICAgICAgICBcCi0gICAgZmlsdGVyLCB2b2lkICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHR5cGUgKmQgPSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHdoaWxlIChudW1fc2FtcGxlcy0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdHlwZSB2YWwgPSAqZCAqIGZpbHRlci0+YW1wbGlmaWNhdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAodmFsID4gMS4wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZhbCA9IC0xLjAgKyAodmFsIC0gMS4wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlIGlmICh2YWwgPCAtMS4wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZhbCA9IDEuMCAtICgxLjAgLSB2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKmQrKyA9IHZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fIyN0eXBlIyNfd3JhcF9wb3NpdGl2ZSAoR3N0QXVkaW9BbXBsaWZ5ICogZmlsdGVyLCBcCi0gICAgdm9pZCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHR5cGUgKmQgPSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHdoaWxlIChudW1fc2FtcGxlcy0tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdHlwZSB2YWwgPSAqZCogZmlsdGVyLT5hbXBsaWZpY2F0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAodmFsID4gMS4wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZhbCA9IDEuMCAtICh2YWwgLSAxLjApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlIGlmICh2YWwgPCAtMS4wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHZhbCA9IC0xLjAgKyAoLTEuMCAtIHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKmQrKyA9IHZhbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fIyN0eXBlIyNfbm9jbGlwIChHc3RBdWRpb0FtcGxpZnkgKiBmaWx0ZXIsICAgICAgICBcCi0gICAgdm9pZCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHR5cGUgKmQgPSBkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHdoaWxlIChudW1fc2FtcGxlcy0tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKmQrKyAqPSBmaWx0ZXItPmFtcGxpZmljYXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLS8qICpJTkRFTlQtT0ZGKiAqLwotTUFLRV9JTlRfRlVOQ1MgKGdpbnQ4LGdpbnQpCi1NQUtFX0lOVF9GVU5DUyAoZ2ludDE2LGdpbnQpCi1NQUtFX0lOVF9GVU5DUyAoZ2ludDMyLGdpbnQ2NCkKLU1BS0VfRkxPQVRfRlVOQ1MgKGdmbG9hdCkKLU1BS0VfRkxPQVRfRlVOQ1MgKGdkb3VibGUpCi0vKiAqSU5ERU5ULU9OKiAqLwotCi0vKiBHT2JqZWN0IHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fYW1wbGlmeV9jbGFzc19pbml0IChHc3RBdWRpb0FtcGxpZnlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2FtcGxpZnlfZGVidWcsICJhdWRpb2FtcGxpZnkiLCAwLAotICAgICAgImF1ZGlvYW1wbGlmeSBlbGVtZW50Iik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19hbXBsaWZ5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2F1ZGlvX2FtcGxpZnlfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQU1QTElGSUNBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImFtcGxpZmljYXRpb24iLCAiQW1wbGlmaWNhdGlvbiIsCi0gICAgICAgICAgIkZhY3RvciBvZiBhbXBsaWZpY2F0aW9uIiwgLUdfTUFYRkxPQVQsIEdfTUFYRkxPQVQsCi0gICAgICAgICAgMS4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0QXVkaW9BbXBsaWZ5OmNsaXBwaW5nLW1ldGhvZAotICAgKgotICAgKiBDbGlwcGluZyBtZXRob2Q6IGNsaXAgbW9kZSBzZXQgdmFsdWVzIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtIHRvIHRoZQotICAgKiBtYXhpbXVtLiBUaGUgd3JhcC1uZWdhdGl2ZSBtb2RlIHB1c2hlcyB0aG9zZSB2YWx1ZXMgYmFjayBmcm9tIHRoZQotICAgKiBvcHBvc2l0ZSBzaWRlLCB3cmFwLXBvc2l0aXZlIHB1c2hlcyB0aGVtIGJhY2sgZnJvbSB0aGUgc2FtZSBzaWRlLgotICAgKgotICAgKiovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0xJUFBJTkdfTUVUSE9ELAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJjbGlwcGluZy1tZXRob2QiLCAiQ2xpcHBpbmcgbWV0aG9kIiwKLSAgICAgICAgICAiU2VsZWN0cyBob3cgdG8gaGFuZGxlIHZhbHVlcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSIsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fQU1QTElGWV9DTElQUElOR19NRVRIT0QsIE1FVEhPRF9DTElQLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBdWRpbyBhbXBsaWZpZXIiLAotICAgICAgIkZpbHRlci9FZmZlY3QvQXVkaW8iLAotICAgICAgIkFtcGxpZmllcyBhbiBhdWRpbyBzdHJlYW0gYnkgYSBnaXZlbiBmYWN0b3IiLAotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4iKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFMTE9XRURfQ0FQUyk7Ci0gIGdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMgKEdTVF9BVURJT19GSUxURVJfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnRyYW5zZm9ybV9pcCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2lwKTsKLSAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZBTFNFOwotCi0gIEdTVF9BVURJT19GSUxURVJfQ0xBU1MgKGtsYXNzKS0+c2V0dXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19hbXBsaWZ5X3NldHVwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19hbXBsaWZ5X2luaXQgKEdzdEF1ZGlvQW1wbGlmeSAqIGZpbHRlcikKLXsKLSAgZmlsdGVyLT5hbXBsaWZpY2F0aW9uID0gMS4wOwotICBnc3RfYXVkaW9fYW1wbGlmeV9zZXRfcHJvY2Vzc19mdW5jdGlvbiAoZmlsdGVyLCBNRVRIT0RfQ0xJUCwKLSAgICAgIEdTVF9BVURJT19GT1JNQVRfUzE2KTsKLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpLCBUUlVFKTsKLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgKEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKSwgVFJVRSk7Ci19Ci0KLXN0YXRpYyBHc3RBdWRpb0FtcGxpZnlQcm9jZXNzRnVuYwotZ3N0X2F1ZGlvX2FtcGxpZnlfcHJvY2Vzc19mdW5jdGlvbiAoZ2ludCBjbGlwcGluZywgR3N0QXVkaW9Gb3JtYXQgZm9ybWF0KQotewotICBzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nlc3MKLSAgewotICAgIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdDsKLSAgICBnaW50IGNsaXBwaW5nOwotICAgIEdzdEF1ZGlvQW1wbGlmeVByb2Nlc3NGdW5jIGZ1bmM7Ci0gIH0gcHJvY2Vzc1tdID0gewotICAgIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX0YzMiwgTUVUSE9EX0NMSVAsIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9nZmxvYXRfY2xpcH0sIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX0YzMiwgTUVUSE9EX1dSQVBfTkVHQVRJVkUsCi0gICAgICAgICAgZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2dmbG9hdF93cmFwX25lZ2F0aXZlfSwgewotICAgIEdTVF9BVURJT19GT1JNQVRfRjMyLCBNRVRIT0RfV1JBUF9QT1NJVElWRSwKLSAgICAgICAgICBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2Zsb2F0X3dyYXBfcG9zaXRpdmV9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9GMzIsIE1FVEhPRF9OT0NMSVAsCi0gICAgICAgICAgZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2dmbG9hdF9ub2NsaXB9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9GNjQsIE1FVEhPRF9DTElQLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9nZG91YmxlX2NsaXB9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9GNjQsIE1FVEhPRF9XUkFQX05FR0FUSVZFLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9nZG91YmxlX3dyYXBfbmVnYXRpdmV9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9GNjQsIE1FVEhPRF9XUkFQX1BPU0lUSVZFLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9nZG91YmxlX3dyYXBfcG9zaXRpdmV9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9GNjQsIE1FVEhPRF9OT0NMSVAsCi0gICAgICAgICAgZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2dkb3VibGVfbm9jbGlwfSwgewotICAgIEdTVF9BVURJT19GT1JNQVRfUzgsIE1FVEhPRF9DTElQLCBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2ludDhfY2xpcH0sIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX1M4LCBNRVRIT0RfV1JBUF9ORUdBVElWRSwKLSAgICAgICAgICBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2ludDhfd3JhcF9uZWdhdGl2ZX0sIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX1M4LCBNRVRIT0RfV1JBUF9QT1NJVElWRSwKLSAgICAgICAgICBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2ludDhfd3JhcF9wb3NpdGl2ZX0sIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX1M4LCBNRVRIT0RfTk9DTElQLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9naW50OF9ub2NsaXB9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9TMTYsIE1FVEhPRF9DTElQLCBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2ludDE2X2NsaXB9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9TMTYsIE1FVEhPRF9XUkFQX05FR0FUSVZFLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9naW50MTZfd3JhcF9uZWdhdGl2ZX0sIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX1MxNiwgTUVUSE9EX1dSQVBfUE9TSVRJVkUsCi0gICAgICAgICAgZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2dpbnQxNl93cmFwX3Bvc2l0aXZlfSwgewotICAgIEdTVF9BVURJT19GT1JNQVRfUzE2LCBNRVRIT0RfTk9DTElQLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9naW50MTZfbm9jbGlwfSwgewotICAgIEdTVF9BVURJT19GT1JNQVRfUzMyLCBNRVRIT0RfQ0xJUCwgZ3N0X2F1ZGlvX2FtcGxpZnlfdHJhbnNmb3JtX2dpbnQzMl9jbGlwfSwgewotICAgIEdTVF9BVURJT19GT1JNQVRfUzMyLCBNRVRIT0RfV1JBUF9ORUdBVElWRSwKLSAgICAgICAgICBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2ludDMyX3dyYXBfbmVnYXRpdmV9LCB7Ci0gICAgR1NUX0FVRElPX0ZPUk1BVF9TMzIsIE1FVEhPRF9XUkFQX1BPU0lUSVZFLAotICAgICAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9naW50MzJfd3JhcF9wb3NpdGl2ZX0sIHsKLSAgICBHU1RfQVVESU9fRk9STUFUX1MzMiwgTUVUSE9EX05PQ0xJUCwKLSAgICAgICAgICBnc3RfYXVkaW9fYW1wbGlmeV90cmFuc2Zvcm1fZ2ludDMyX25vY2xpcH0sIHsKLSAgICAwLCAwLCBOVUxMfQotICB9OwotICBjb25zdCBzdHJ1Y3QgcHJvY2VzcyAqcDsKLQotICBmb3IgKHAgPSBwcm9jZXNzOyBwLT5mdW5jOyBwKyspCi0gICAgaWYgKHAtPmZvcm1hdCA9PSBmb3JtYXQgJiYgcC0+Y2xpcHBpbmcgPT0gY2xpcHBpbmcpCi0gICAgICByZXR1cm4gcC0+ZnVuYzsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKEdzdEF1ZGlvQW1wbGlmeSAqIGZpbHRlciwgZ2ludAotICAgIGNsaXBwaW5nX21ldGhvZCwgR3N0QXVkaW9Gb3JtYXQgZm9ybWF0KQotewotICBHc3RBdWRpb0FtcGxpZnlQcm9jZXNzRnVuYyBwcm9jZXNzOwotCi0gIC8qIHNldCBwcm9jZXNzaW5nIGZ1bmN0aW9uICovCi0KLSAgcHJvY2VzcyA9IGdzdF9hdWRpb19hbXBsaWZ5X3Byb2Nlc3NfZnVuY3Rpb24gKGNsaXBwaW5nX21ldGhvZCwgZm9ybWF0KTsKLSAgaWYgKCFwcm9jZXNzKSB7Ci0gICAgR1NUX0RFQlVHICgid3JvbmcgZm9ybWF0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZmlsdGVyLT5wcm9jZXNzID0gcHJvY2VzczsKLSAgZmlsdGVyLT5jbGlwcGluZ19tZXRob2QgPSBjbGlwcGluZ19tZXRob2Q7Ci0gIGZpbHRlci0+Zm9ybWF0ID0gZm9ybWF0OwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvQW1wbGlmeSAqZmlsdGVyID0gR1NUX0FVRElPX0FNUExJRlkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FNUExJRklDQVRJT046Ci0gICAgICBmaWx0ZXItPmFtcGxpZmljYXRpb24gPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpLAotICAgICAgICAgIGZpbHRlci0+YW1wbGlmaWNhdGlvbiA9PSAxLjApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMSVBQSU5HX01FVEhPRDoKLSAgICAgIGdzdF9hdWRpb19hbXBsaWZ5X3NldF9wcm9jZXNzX2Z1bmN0aW9uIChmaWx0ZXIsIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKSwKLSAgICAgICAgICBmaWx0ZXItPmZvcm1hdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fYW1wbGlmeV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9BbXBsaWZ5ICpmaWx0ZXIgPSBHU1RfQVVESU9fQU1QTElGWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQU1QTElGSUNBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgZmlsdGVyLT5hbXBsaWZpY2F0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTElQUElOR19NRVRIT0Q6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZmlsdGVyLT5jbGlwcGluZ19tZXRob2QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXVkaW9fYW1wbGlmeV9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBiYXNlLCBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RBdWRpb0FtcGxpZnkgKmZpbHRlciA9IEdTVF9BVURJT19BTVBMSUZZIChiYXNlKTsKLQotICByZXR1cm4gZ3N0X2F1ZGlvX2FtcGxpZnlfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKGZpbHRlciwKLSAgICAgIGZpbHRlci0+Y2xpcHBpbmdfbWV0aG9kLCBHU1RfQVVESU9fSU5GT19GT1JNQVQgKGluZm8pKTsKLX0KLQotLyogR3N0QmFzZVRyYW5zZm9ybSB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdWRpb19hbXBsaWZ5X3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0QXVkaW9BbXBsaWZ5ICpmaWx0ZXIgPSBHU1RfQVVESU9fQU1QTElGWSAoYmFzZSk7Ci0gIGd1aW50IG51bV9zYW1wbGVzOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBzdHJlYW1fdGltZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmYmFzZS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyKSwgc3RyZWFtX3RpbWUpOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19HQVApKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICBudW1fc2FtcGxlcyA9IG1hcC5zaXplIC8gR1NUX0FVRElPX0ZJTFRFUl9CUFMgKGZpbHRlcik7Ci0KLSAgZmlsdGVyLT5wcm9jZXNzIChmaWx0ZXIsIG1hcC5kYXRhLCBudW1fc2FtcGxlcyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2FtcGxpZnkuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzNlZWQxLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlvYW1wbGlmeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQVVESU9fQU1QTElGWV9IX18KLSNkZWZpbmUgX19HU1RfQVVESU9fQU1QTElGWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fQU1QTElGWSAgICAgICAgICAgIChnc3RfYXVkaW9fYW1wbGlmeV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fQU1QTElGWShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FVRElPX0FNUExJRlksR3N0QXVkaW9BbXBsaWZ5KSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0FNUExJRlkob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BVURJT19BTVBMSUZZKSkKLSNkZWZpbmUgR1NUX0FVRElPX0FNUExJRllfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19BTVBMSUZZLEdzdEF1ZGlvQW1wbGlmeUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0FNUExJRllfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19BTVBMSUZZKSkKLSNkZWZpbmUgR1NUX0FVRElPX0FNUExJRllfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopICxHU1RfVFlQRV9BVURJT19BTVBMSUZZLEdzdEF1ZGlvQW1wbGlmeUNsYXNzKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0FtcGxpZnkgR3N0QXVkaW9BbXBsaWZ5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvQW1wbGlmeUNsYXNzIEdzdEF1ZGlvQW1wbGlmeUNsYXNzOwotCi10eXBlZGVmIHZvaWQgKCpHc3RBdWRpb0FtcGxpZnlQcm9jZXNzRnVuYykgKEdzdEF1ZGlvQW1wbGlmeSAqLCB2b2lkICosIGd1aW50KTsKLQotc3RydWN0IF9Hc3RBdWRpb0FtcGxpZnkKLXsKLSAgR3N0QXVkaW9GaWx0ZXIgYXVkaW9maWx0ZXI7Ci0KLSAgZ2Zsb2F0IGFtcGxpZmljYXRpb247Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgR3N0QXVkaW9BbXBsaWZ5UHJvY2Vzc0Z1bmMgcHJvY2VzczsKLSAgZ2ludCBjbGlwcGluZ19tZXRob2Q7Ci0gIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdDsKLX07Ci0KLXN0cnVjdCBfR3N0QXVkaW9BbXBsaWZ5Q2xhc3MKLXsKLSAgR3N0QXVkaW9GaWx0ZXJDbGFzcyBwYXJlbnQ7Ci19OwotCi1HVHlwZSBnc3RfYXVkaW9fYW1wbGlmeV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfQVVESU9fQU1QTElGWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYyBiL2dzdC9hdWRpb2Z4L2F1ZGlvY2hlYmJhbmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhmZWJlOS4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIAotICogQ2hlYnlzaGV2IHR5cGUgMSBmaWx0ZXIgZGVzaWduIGJhc2VkIG9uCi0gKiAiVGhlIFNjaWVudGlzdCBhbmQgRW5naW5lZXIncyBHdWlkZSB0byBEU1AiLCBDaGFwdGVyIDIwLgotICogaHR0cDovL3d3dy5kc3BndWlkZS5jb20vCi0gKgotICogRm9yIHR5cGUgMiBhbmQgQ2hlYnlzaGV2IGZpbHRlcnMgaW4gZ2VuZXJhbCByZWFkCi0gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NoZWJ5c2hldl9maWx0ZXIKLSAqCi0gKiBUcmFuc2Zvcm1hdGlvbiBmcm9tIGxvd3Bhc3MgdG8gYmFuZHBhc3MvYmFuZHJlamVjdDoKLSAqIGh0dHA6Ly9kb2NzLmRld3Jlc2VhcmNoLmNvbS9Ec3BIZWxwL2h0bWwvSURIX0xpbmVhclN5c3RlbXNfTG93cGFzc1RvQmFuZFBhc3NaLmh0bQotICogaHR0cDovL2RvY3MuZGV3cmVzZWFyY2guY29tL0RzcEhlbHAvaHRtbC9JREhfTGluZWFyU3lzdGVtc19Mb3dwYXNzVG9CYW5kU3RvcFouaHRtCi0gKiAKLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdWRpb2NoZWJiYW5kCi0gKgotICogQXR0ZW51YXRlcyBhbGwgZnJlcXVlbmNpZXMgb3V0c2lkZSAoYmFuZHBhc3MpIG9yIGluc2lkZSAoYmFuZHJlamVjdCkgb2YgYSBmcmVxdWVuY3kKLSAqIGJhbmQuIFRoZSBudW1iZXIgb2YgcG9sZXMgYW5kIHRoZSByaXBwbGUgcGFyYW1ldGVyIGNvbnRyb2wgdGhlIHJvbGxvZmYuCi0gKgotICogVGhpcyBlbGVtZW50IGhhcyB0aGUgYWR2YW50YWdlIG92ZXIgdGhlIHdpbmRvd2VkIHNpbmMgYmFuZHBhc3MgYW5kIGJhbmRyZWplY3QgZmlsdGVyIHRoYXQgaXQgaXMKLSAqIG11Y2ggZmFzdGVyIGFuZCBwcm9kdWNlcyBhbG1vc3QgYXMgZ29vZCByZXN1bHRzLiBJdCdzIG9ubHkgZGlzYWR2YW50YWdlcyBhcmUgdGhlIGhpZ2hseQotICogbm9uLWxpbmVhciBwaGFzZSBhbmQgdGhlIHNsb3dlciByb2xsb2ZmIGNvbXBhcmVkIHRvIGEgd2luZG93ZWQgc2luYyBmaWx0ZXIgd2l0aCBhIGxhcmdlIGtlcm5lbC4KLSAqCi0gKiBGb3IgdHlwZSAxIHRoZSByaXBwbGUgcGFyYW1ldGVyIHNwZWNpZmllcyBob3cgbXVjaCByaXBwbGUgaW4gZEIgaXMgYWxsb3dlZCBpbiB0aGUgcGFzc2JhbmQsIGkuZS4KLSAqIHNvbWUgZnJlcXVlbmNpZXMgaW4gdGhlIHBhc3NiYW5kIHdpbGwgYmUgYW1wbGlmaWVkIGJ5IHRoYXQgdmFsdWUuIEEgaGlnaGVyIHJpcHBsZSB2YWx1ZSB3aWxsIGFsbG93Ci0gKiBhIGZhc3RlciByb2xsb2ZmLgotICoKLSAqIEZvciB0eXBlIDIgdGhlIHJpcHBsZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBzdG9wYmFuZCBhdHRlbnVhdGlvbi4gSW4gdGhlIHN0b3BiYW5kIHRoZSBnYWluIHdpbGwKLSAqIGJlIGF0IG1vc3QgdGhpcyB2YWx1ZS4gQSBsb3dlciByaXBwbGUgdmFsdWUgd2lsbCBhbGxvdyBhIGZhc3RlciByb2xsb2ZmLgotICoKLSAqIEFzIGEgc3BlY2lhbCBjYXNlLCBhIENoZWJ5c2hldiB0eXBlIDEgZmlsdGVyIHdpdGggbm8gcmlwcGxlIGlzIGEgQnV0dGVyd29ydGggZmlsdGVyLgotICoKLSAqIDxub3RlPgotICogQmUgd2FybmVkIHRoYXQgYSB0b28gbGFyZ2UgbnVtYmVyIG9mIHBvbGVzIGNhbiBwcm9kdWNlIG5vaXNlLiBUaGUgbW9zdCBwb2xlcyBhcmUgcG9zc2libGUgd2l0aAotICogYSBjdXRvZmYgZnJlcXVlbmN5IGF0IGEgcXVhcnRlciBvZiB0aGUgc2FtcGxpbmcgcmF0ZS4KLSAqIDwvbm90ZT4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIGZyZXE9MTUwMCAhIGF1ZGlvY29udmVydCAhIGF1ZGlvY2hlYmJhbmQgbW9kZT1iYW5kLXBhc3MgbG93ZXItZnJlcXVlbmN5PTEwMDAgdXBwZXItZnJlcXVlbmN5PTYwMDAgcG9sZXM9NCAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPSJtZWxvMS5vZ2ciICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb2NoZWJiYW5kIG1vZGU9YmFuZC1yZWplY3QgbG93ZXItZnJlcXVlbmN5PTEwMDAgdXBwZXItZnJlcXVlbmN5PTQwMDAgcmlwcGxlPTAuMiAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgd2F2ZT13aGl0ZS1ub2lzZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvY2hlYmJhbmQgbW9kZT1iYW5kLXBhc3MgbG93ZXItZnJlcXVlbmN5PTEwMDAgdXBwZXItZnJlcXVlbmN5PTQwMDAgdHlwZT0yICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgIm1hdGhfY29tcGF0LmgiCi0KLSNpbmNsdWRlICJhdWRpb2NoZWJiYW5kLmgiCi0KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYXVkaW9fY2hlYl9iYW5kX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9NT0RFLAotICBQUk9QX1RZUEUsCi0gIFBST1BfTE9XRVJfRlJFUVVFTkNZLAotICBQUk9QX1VQUEVSX0ZSRVFVRU5DWSwKLSAgUFJPUF9SSVBQTEUsCi0gIFBST1BfUE9MRVMKLX07Ci0KLSNkZWZpbmUgZ3N0X2F1ZGlvX2NoZWJfYmFuZF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RBdWRpb0NoZWJCYW5kLCBnc3RfYXVkaW9fY2hlYl9iYW5kLAotICAgIEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19jaGViX2JhbmRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2NoZWJfYmFuZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fY2hlYl9iYW5kX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hdWRpb19jaGViX2JhbmRfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogZmlsdGVyLAotICAgIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pOwotCi1lbnVtCi17Ci0gIE1PREVfQkFORF9QQVNTID0gMCwKLSAgTU9ERV9CQU5EX1JFSkVDVAotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9BVURJT19DSEVCWVNIRVZfRlJFUV9CQU5EX01PREUgKGdzdF9hdWRpb19jaGViX2JhbmRfbW9kZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2F1ZGlvX2NoZWJfYmFuZF9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZ3R5cGUgPSAwOwotCi0gIGlmIChndHlwZSA9PSAwKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAgICB7TU9ERV9CQU5EX1BBU1MsICJCYW5kIHBhc3MgKGRlZmF1bHQpIiwKLSAgICAgICAgICAiYmFuZC1wYXNzIn0sCi0gICAgICB7TU9ERV9CQU5EX1JFSkVDVCwgIkJhbmQgcmVqZWN0IiwKLSAgICAgICAgICAiYmFuZC1yZWplY3QifSwKLSAgICAgIHswLCBOVUxMLCBOVUxMfQotICAgIH07Ci0KLSAgICBndHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RBdWRpb0NoZWJCYW5kTW9kZSIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIGd0eXBlOwotfQotCi0vKiBHT2JqZWN0IHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fY2hlYl9iYW5kX2NsYXNzX2luaXQgKEdzdEF1ZGlvQ2hlYkJhbmRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RBdWRpb0ZpbHRlckNsYXNzICpmaWx0ZXJfY2xhc3MgPSAoR3N0QXVkaW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2NoZWJfYmFuZF9kZWJ1ZywgImF1ZGlvY2hlYmJhbmQiLCAwLAotICAgICAgImF1ZGlvY2hlYmJhbmQgZWxlbWVudCIpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19jaGViX2JhbmRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fY2hlYl9iYW5kX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYXVkaW9fY2hlYl9iYW5kX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJNb2RlIiwKLSAgICAgICAgICAiTG93IHBhc3Mgb3IgaGlnaCBwYXNzIG1vZGUiLCBHU1RfVFlQRV9BVURJT19DSEVCWVNIRVZfRlJFUV9CQU5EX01PREUsCi0gICAgICAgICAgTU9ERV9CQU5EX1BBU1MsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RZUEUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgidHlwZSIsICJUeXBlIiwgIlR5cGUgb2YgdGhlIGNoZWJ5Y2hldiBmaWx0ZXIiLCAxLCAyLCAxLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKiBGSVhNRTogRG9uJ3QgdXNlIHRoZSBjb21wbGV0ZSBwb3NzaWJsZSByYW5nZSBidXQgcmVzdHJpY3QgdGhlIHVwcGVyIGJvdW5kYXJ5Ci0gICAqIHNvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFVJcyBjYW4gdXNlIGEgc2xpZGVyIHdpdGhvdXQgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT1dFUl9GUkVRVUVOQ1ksCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJsb3dlci1mcmVxdWVuY3kiLCAiTG93ZXIgZnJlcXVlbmN5IiwKLSAgICAgICAgICAiU3RhcnQgZnJlcXVlbmN5IG9mIHRoZSBiYW5kIChIeikiLCAwLjAsIDEwMDAwMC4wLAotICAgICAgICAgIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVBQRVJfRlJFUVVFTkNZLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgidXBwZXItZnJlcXVlbmN5IiwgIlVwcGVyIGZyZXF1ZW5jeSIsCi0gICAgICAgICAgIlN0b3AgZnJlcXVlbmN5IG9mIHRoZSBiYW5kIChIeikiLCAwLjAsIDEwMDAwMC4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JJUFBMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoInJpcHBsZSIsICJSaXBwbGUiLCAiQW1vdW50IG9mIHJpcHBsZSAoZEIpIiwgMC4wLAotICAgICAgICAgIDIwMC4wLCAwLjI1LAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyogRklYTUU6IFdoYXQgdG8gZG8gYWJvdXQgdGhpcyB1cHBlciBib3VuZGFyeT8gV2l0aCBhIGZyZXF1ZW5jaWVzIG5lYXIKLSAgICogcmF0ZS80IDMyIHBvbGVzIGFyZSBjb21wbGV0ZWx5IHBvc3NpYmxlLCB3aXRoIGZyZXF1ZW5jaWVzIHZlcnkgbG93Ci0gICAqIG9yIHZlcnkgaGlnaCAxNiBwb2xlcyBhbHJlYWR5IHByb2R1Y2VzIG9ubHkgbm9pc2UgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT0xFUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwb2xlcyIsICJQb2xlcyIsCi0gICAgICAgICAgIk51bWJlciBvZiBwb2xlcyB0byB1c2UsIHdpbGwgYmUgcm91bmRlZCB1cCB0byB0aGUgbmV4dCBtdWx0aXBseSBvZiBmb3VyIiwKLSAgICAgICAgICA0LCAzMiwgNCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJCYW5kIHBhc3MgJiBiYW5kIHJlamVjdCBmaWx0ZXIiLCAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiQ2hlYnlzaGV2IGJhbmQgcGFzcyBhbmQgYmFuZCByZWplY3QgZmlsdGVyIiwKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBmaWx0ZXJfY2xhc3MtPnNldHVwID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19jaGViX2JhbmRfc2V0dXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2NoZWJfYmFuZF9pbml0IChHc3RBdWRpb0NoZWJCYW5kICogZmlsdGVyKQotewotICBmaWx0ZXItPmxvd2VyX2ZyZXF1ZW5jeSA9IGZpbHRlci0+dXBwZXJfZnJlcXVlbmN5ID0gMC4wOwotICBmaWx0ZXItPm1vZGUgPSBNT0RFX0JBTkRfUEFTUzsKLSAgZmlsdGVyLT50eXBlID0gMTsKLSAgZmlsdGVyLT5wb2xlcyA9IDQ7Ci0gIGZpbHRlci0+cmlwcGxlID0gMC4yNTsKLQotICBnX211dGV4X2luaXQgKCZmaWx0ZXItPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfYmlxdWFkX2NvZWZmaWNpZW50cyAoR3N0QXVkaW9DaGViQmFuZCAqIGZpbHRlciwKLSAgICBnaW50IHAsIGdpbnQgcmF0ZSwgZ2RvdWJsZSAqIGIwLCBnZG91YmxlICogYjEsIGdkb3VibGUgKiBiMiwgZ2RvdWJsZSAqIGIzLAotICAgIGdkb3VibGUgKiBiNCwgZ2RvdWJsZSAqIGExLCBnZG91YmxlICogYTIsIGdkb3VibGUgKiBhMywgZ2RvdWJsZSAqIGE0KQotewotICBnaW50IG5wID0gZmlsdGVyLT5wb2xlcyAvIDI7Ci0gIGdkb3VibGUgcmlwcGxlID0gZmlsdGVyLT5yaXBwbGU7Ci0KLSAgLyogcG9sZSBsb2NhdGlvbiBpbiBzLXBsYW5lICovCi0gIGdkb3VibGUgcnAsIGlwOwotCi0gIC8qIHplcm8gbG9jYXRpb24gaW4gcy1wbGFuZSAqLwotICBnZG91YmxlIGl6ID0gMC4wOwotCi0gIC8qIHRyYW5zZmVyIGZ1bmN0aW9uIGNvZWZmaWNpZW50cyBmb3IgdGhlIHotcGxhbmUgKi8KLSAgZ2RvdWJsZSB4MCwgeDEsIHgyLCB5MSwgeTI7Ci0gIGdpbnQgdHlwZSA9IGZpbHRlci0+dHlwZTsKLQotICAvKiBDYWxjdWxhdGUgcG9sZSBsb2NhdGlvbiBmb3IgbG93cGFzcyBhdCBmcmVxdWVuY3kgMSAqLwotICB7Ci0gICAgZ2RvdWJsZSBhbmdsZSA9IChHX1BJIC8gMi4wKSAqICgyLjAgKiBwIC0gMSkgLyBucDsKLQotICAgIHJwID0gLXNpbiAoYW5nbGUpOwotICAgIGlwID0gY29zIChhbmdsZSk7Ci0gIH0KLQotICAvKiBJZiB3ZSBhbGxvdyByaXBwbGUsIG1vdmUgdGhlIHBvbGUgZnJvbSB0aGUgdW5pdAotICAgKiBjaXJjbGUgdG8gYW4gZWxsaXBzZSBhbmQga2VlcCBjdXRvZmYgYXQgZnJlcXVlbmN5IDEgKi8KLSAgaWYgKHJpcHBsZSA+IDAgJiYgdHlwZSA9PSAxKSB7Ci0gICAgZ2RvdWJsZSBlcywgdng7Ci0KLSAgICBlcyA9IHNxcnQgKHBvdyAoMTAuMCwgcmlwcGxlIC8gMTAuMCkgLSAxLjApOwotCi0gICAgdnggPSAoMS4wIC8gbnApICogYXNpbmggKDEuMCAvIGVzKTsKLSAgICBycCA9IHJwICogc2luaCAodngpOwotICAgIGlwID0gaXAgKiBjb3NoICh2eCk7Ci0gIH0gZWxzZSBpZiAodHlwZSA9PSAyKSB7Ci0gICAgZ2RvdWJsZSBlcywgdng7Ci0KLSAgICBlcyA9IHNxcnQgKHBvdyAoMTAuMCwgcmlwcGxlIC8gMTAuMCkgLSAxLjApOwotICAgIHZ4ID0gKDEuMCAvIG5wKSAqIGFzaW5oIChlcyk7Ci0gICAgcnAgPSBycCAqIHNpbmggKHZ4KTsKLSAgICBpcCA9IGlwICogY29zaCAodngpOwotICB9Ci0KLSAgLyogQ2FsY3VsYXRlIGludmVyc2Ugb2YgdGhlIHBvbGUgbG9jYXRpb24gdG8gbW92ZSBmcm9tCi0gICAqIHR5cGUgSSB0byB0eXBlIElJICovCi0gIGlmICh0eXBlID09IDIpIHsKLSAgICBnZG91YmxlIG1hZzIgPSBycCAqIHJwICsgaXAgKiBpcDsKLQotICAgIHJwIC89IG1hZzI7Ci0gICAgaXAgLz0gbWFnMjsKLSAgfQotCi0gIC8qIENhbGN1bGF0ZSB6ZXJvIGxvY2F0aW9uIGZvciBmcmVxdWVuY3kgMSBvbiB0aGUKLSAgICogdW5pdCBjaXJjbGUgZm9yIHR5cGUgMiAqLwotICBpZiAodHlwZSA9PSAyKSB7Ci0gICAgZ2RvdWJsZSBhbmdsZSA9IEdfUEkgLyAobnAgKiAyLjApICsgKChwIC0gMSkgKiBHX1BJKSAvIChucCk7Ci0gICAgZ2RvdWJsZSBtYWcyOwotCi0gICAgaXogPSBjb3MgKGFuZ2xlKTsKLSAgICBtYWcyID0gaXogKiBpejsKLSAgICBpeiAvPSBtYWcyOwotICB9Ci0KLSAgLyogQ29udmVydCBmcm9tIHMtZG9tYWluIHRvIHotZG9tYWluIGJ5Ci0gICAqIHVzaW5nIHRoZSBiaWxpbmVhciBaLXRyYW5zZm9ybSwgaS5lLgotICAgKiBzdWJzdGl0dXRlIHMgYnkgKDIvdCkqKCh6LTEpLyh6KzEpKQotICAgKiB3aXRoIHQgPSAyICogdGFuKDAuNSkuCi0gICAqLwotICBpZiAodHlwZSA9PSAxKSB7Ci0gICAgZ2RvdWJsZSB0LCBtLCBkOwotCi0gICAgdCA9IDIuMCAqIHRhbiAoMC41KTsKLSAgICBtID0gcnAgKiBycCArIGlwICogaXA7Ci0gICAgZCA9IDQuMCAtIDQuMCAqIHJwICogdCArIG0gKiB0ICogdDsKLQotICAgIHgwID0gKHQgKiB0KSAvIGQ7Ci0gICAgeDEgPSAyLjAgKiB4MDsKLSAgICB4MiA9IHgwOwotICAgIHkxID0gKDguMCAtIDIuMCAqIG0gKiB0ICogdCkgLyBkOwotICAgIHkyID0gKC00LjAgLSA0LjAgKiBycCAqIHQgLSBtICogdCAqIHQpIC8gZDsKLSAgfSBlbHNlIHsKLSAgICBnZG91YmxlIHQsIG0sIGQ7Ci0KLSAgICB0ID0gMi4wICogdGFuICgwLjUpOwotICAgIG0gPSBycCAqIHJwICsgaXAgKiBpcDsKLSAgICBkID0gNC4wIC0gNC4wICogcnAgKiB0ICsgbSAqIHQgKiB0OwotCi0gICAgeDAgPSAodCAqIHQgKiBpeiAqIGl6ICsgNC4wKSAvIGQ7Ci0gICAgeDEgPSAoLTguMCArIDIuMCAqIGl6ICogaXogKiB0ICogdCkgLyBkOwotICAgIHgyID0geDA7Ci0gICAgeTEgPSAoOC4wIC0gMi4wICogbSAqIHQgKiB0KSAvIGQ7Ci0gICAgeTIgPSAoLTQuMCAtIDQuMCAqIHJwICogdCAtIG0gKiB0ICogdCkgLyBkOwotICB9Ci0KLSAgLyogQ29udmVydCBmcm9tIGxvd3Bhc3MgYXQgZnJlcXVlbmN5IDEgdG8gZWl0aGVyIGJhbmRwYXNzCi0gICAqIG9yIGJhbmQgcmVqZWN0LgotICAgKgotICAgKiBGb3IgYmFuZHBhc3Mgc3Vic3RpdHV0ZSB6XigtMSkgd2l0aDoKLSAgICoKLSAgICogICAtMiAgICAgICAgICAgIC0xCi0gICAqIC16ICAgKyBhbHBoYSAqIHogICAtIGJldGEKLSAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgKiAgICAgICAgIC0yICAgICAgICAgICAgLTEKLSAgICogYmV0YSAqIHogICAtIGFscGhhICogeiAgICsgMQotICAgKgotICAgKiBhbHBoYSA9ICgyKmEqYikvKDErYikKLSAgICogYmV0YSA9IChiLTEpLyhiKzEpCi0gICAqIGEgPSBjb3MoKHcxICsgdzApLzIpIC8gY29zKCh3MSAtIHcwKS8yKQotICAgKiBiID0gdGFuKDEvMikgKiBjb3QoKHcxIC0gdzApLzIpCi0gICAqCi0gICAqIEZvciBiYW5kcmVqZWN0IHN1YnN0aXR1dGUgel4oLTEpIHdpdGg6Ci0gICAqIAotICAgKiAgLTIgICAgICAgICAgICAtMQotICAgKiB6ICAgLSBhbHBoYSAqIHogICArIGJldGEKLSAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgKiAgICAgICAgIC0yICAgICAgICAgICAgLTEKLSAgICogYmV0YSAqIHogICAtIGFscGhhICogeiAgICsgMQotICAgKgotICAgKiBhbHBoYSA9ICgyKmEpLygxK2IpCi0gICAqIGJldGEgPSAoMS1iKS8oMStiKQotICAgKiBhID0gY29zKCh3MSArIHcwKS8yKSAvIGNvcygodzEgLSB3MCkvMikKLSAgICogYiA9IHRhbigxLzIpICogdGFuKCh3MSAtIHcwKS8yKQotICAgKgotICAgKi8KLSAgewotICAgIGdkb3VibGUgYSwgYiwgZDsKLSAgICBnZG91YmxlIGFscGhhLCBiZXRhOwotICAgIGdkb3VibGUgdzAgPSAyLjAgKiBHX1BJICogKGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5IC8gcmF0ZSk7Ci0gICAgZ2RvdWJsZSB3MSA9IDIuMCAqIEdfUEkgKiAoZmlsdGVyLT51cHBlcl9mcmVxdWVuY3kgLyByYXRlKTsKLQotICAgIGlmIChmaWx0ZXItPm1vZGUgPT0gTU9ERV9CQU5EX1BBU1MpIHsKLSAgICAgIGEgPSBjb3MgKCh3MSArIHcwKSAvIDIuMCkgLyBjb3MgKCh3MSAtIHcwKSAvIDIuMCk7Ci0gICAgICBiID0gdGFuICgxLjAgLyAyLjApIC8gdGFuICgodzEgLSB3MCkgLyAyLjApOwotCi0gICAgICBhbHBoYSA9ICgyLjAgKiBhICogYikgLyAoMS4wICsgYik7Ci0gICAgICBiZXRhID0gKGIgLSAxLjApIC8gKGIgKyAxLjApOwotCi0gICAgICBkID0gMS4wICsgYmV0YSAqICh5MSAtIGJldGEgKiB5Mik7Ci0KLSAgICAgICpiMCA9ICh4MCArIGJldGEgKiAoLXgxICsgYmV0YSAqIHgyKSkgLyBkOwotICAgICAgKmIxID0gKGFscGhhICogKC0yLjAgKiB4MCArIHgxICsgYmV0YSAqIHgxIC0gMi4wICogYmV0YSAqIHgyKSkgLyBkOwotICAgICAgKmIyID0KLSAgICAgICAgICAoLXgxIC0gYmV0YSAqIGJldGEgKiB4MSArIDIuMCAqIGJldGEgKiAoeDAgKyB4MikgKwotICAgICAgICAgIGFscGhhICogYWxwaGEgKiAoeDAgLSB4MSArIHgyKSkgLyBkOwotICAgICAgKmIzID0gKGFscGhhICogKHgxICsgYmV0YSAqICgtMi4wICogeDAgKyB4MSkgLSAyLjAgKiB4MikpIC8gZDsKLSAgICAgICpiNCA9IChiZXRhICogKGJldGEgKiB4MCAtIHgxKSArIHgyKSAvIGQ7Ci0gICAgICAqYTEgPSAoYWxwaGEgKiAoMi4wICsgeTEgKyBiZXRhICogeTEgLSAyLjAgKiBiZXRhICogeTIpKSAvIGQ7Ci0gICAgICAqYTIgPQotICAgICAgICAgICgteTEgLSBiZXRhICogYmV0YSAqIHkxIC0gYWxwaGEgKiBhbHBoYSAqICgxLjAgKyB5MSAtIHkyKSArCi0gICAgICAgICAgMi4wICogYmV0YSAqICgtMS4wICsgeTIpKSAvIGQ7Ci0gICAgICAqYTMgPSAoYWxwaGEgKiAoeTEgKyBiZXRhICogKDIuMCArIHkxKSAtIDIuMCAqIHkyKSkgLyBkOwotICAgICAgKmE0ID0gKC1iZXRhICogYmV0YSAtIGJldGEgKiB5MSArIHkyKSAvIGQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGEgPSBjb3MgKCh3MSArIHcwKSAvIDIuMCkgLyBjb3MgKCh3MSAtIHcwKSAvIDIuMCk7Ci0gICAgICBiID0gdGFuICgxLjAgLyAyLjApICogdGFuICgodzEgLSB3MCkgLyAyLjApOwotCi0gICAgICBhbHBoYSA9ICgyLjAgKiBhKSAvICgxLjAgKyBiKTsKLSAgICAgIGJldGEgPSAoMS4wIC0gYikgLyAoMS4wICsgYik7Ci0KLSAgICAgIGQgPSAtMS4wICsgYmV0YSAqIChiZXRhICogeTIgKyB5MSk7Ci0KLSAgICAgICpiMCA9ICgteDAgLSBiZXRhICogeDEgLSBiZXRhICogYmV0YSAqIHgyKSAvIGQ7Ci0gICAgICAqYjEgPSAoYWxwaGEgKiAoMi4wICogeDAgKyB4MSArIGJldGEgKiB4MSArIDIuMCAqIGJldGEgKiB4MikpIC8gZDsKLSAgICAgICpiMiA9Ci0gICAgICAgICAgKC14MSAtIGJldGEgKiBiZXRhICogeDEgLSAyLjAgKiBiZXRhICogKHgwICsgeDIpIC0KLSAgICAgICAgICBhbHBoYSAqIGFscGhhICogKHgwICsgeDEgKyB4MikpIC8gZDsKLSAgICAgICpiMyA9IChhbHBoYSAqICh4MSArIGJldGEgKiAoMi4wICogeDAgKyB4MSkgKyAyLjAgKiB4MikpIC8gZDsKLSAgICAgICpiNCA9ICgtYmV0YSAqIGJldGEgKiB4MCAtIGJldGEgKiB4MSAtIHgyKSAvIGQ7Ci0gICAgICAqYTEgPSAoYWxwaGEgKiAoLTIuMCArIHkxICsgYmV0YSAqIHkxICsgMi4wICogYmV0YSAqIHkyKSkgLyBkOwotICAgICAgKmEyID0KLSAgICAgICAgICAtKHkxICsgYmV0YSAqIGJldGEgKiB5MSArIDIuMCAqIGJldGEgKiAoLTEuMCArIHkyKSArCi0gICAgICAgICAgYWxwaGEgKiBhbHBoYSAqICgtMS4wICsgeTEgKyB5MikpIC8gZDsKLSAgICAgICphMyA9IChhbHBoYSAqIChiZXRhICogKC0yLjAgKyB5MSkgKyB5MSArIDIuMCAqIHkyKSkgLyBkOwotICAgICAgKmE0ID0gLSgtYmV0YSAqIGJldGEgKyBiZXRhICogeTEgKyB5MikgLyBkOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfY29lZmZpY2llbnRzIChHc3RBdWRpb0NoZWJCYW5kICogZmlsdGVyLCBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBnaW50IHJhdGU7Ci0KLSAgaWYgKGluZm8pIHsKLSAgICByYXRlID0gR1NUX0FVRElPX0lORk9fUkFURSAoaW5mbyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmF0ZSA9IEdTVF9BVURJT19GSUxURVJfUkFURSAoZmlsdGVyKTsKLSAgfQotCi0gIGlmIChyYXRlID09IDApIHsKLSAgICBnZG91YmxlICphID0gZ19uZXcwIChnZG91YmxlLCAxKTsKLSAgICBnZG91YmxlICpiID0gZ19uZXcwIChnZG91YmxlLCAxKTsKLQotICAgIGFbMF0gPSAxLjA7Ci0gICAgYlswXSA9IDEuMDsKLSAgICBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3NldF9jb2VmZmljaWVudHMgKEdTVF9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIKLSAgICAgICAgKGZpbHRlciksIGEsIDEsIGIsIDEpOwotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJyYXRlIHdhcyBub3Qgc2V0IHlldCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChmaWx0ZXItPnVwcGVyX2ZyZXF1ZW5jeSA8PSBmaWx0ZXItPmxvd2VyX2ZyZXF1ZW5jeSkgewotICAgIGdkb3VibGUgKmEgPSBnX25ldzAgKGdkb3VibGUsIDEpOwotICAgIGdkb3VibGUgKmIgPSBnX25ldzAgKGdkb3VibGUsIDEpOwotCi0gICAgYVswXSA9IDEuMDsKLSAgICBiWzBdID0gKGZpbHRlci0+bW9kZSA9PSBNT0RFX0JBTkRfUEFTUykgPyAwLjAgOiAxLjA7Ci0gICAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zZXRfY29lZmZpY2llbnRzIChHU1RfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSCi0gICAgICAgIChmaWx0ZXIpLCBhLCAxLCBiLCAxKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJmcmVxdWVuY3kgYmFuZCBoYWQgbm8gb3IgbmVnYXRpdmUgZGltZW5zaW9uIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGZpbHRlci0+dXBwZXJfZnJlcXVlbmN5ID4gcmF0ZSAvIDIpIHsKLSAgICBmaWx0ZXItPnVwcGVyX2ZyZXF1ZW5jeSA9IHJhdGUgLyAyOwotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJjbGlwcGVkIHVwcGVyIGZyZXF1ZW5jeSB0byBueXF1aXN0IGZyZXF1ZW5jeSIpOwotICB9Ci0KLSAgaWYgKGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5IDwgMC4wKSB7Ci0gICAgZmlsdGVyLT5sb3dlcl9mcmVxdWVuY3kgPSAwLjA7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgImNsaXBwZWQgbG93ZXIgZnJlcXVlbmN5IHRvIDAuMCIpOwotICB9Ci0KLSAgLyogQ2FsY3VsYXRlIGNvZWZmaWNpZW50cyBmb3IgdGhlIGNoZWJ5c2hldiBmaWx0ZXIgKi8KLSAgewotICAgIGdpbnQgbnAgPSBmaWx0ZXItPnBvbGVzOwotICAgIGdkb3VibGUgKmEsICpiOwotICAgIGdpbnQgaSwgcDsKLQotICAgIGEgPSBnX25ldzAgKGdkb3VibGUsIG5wICsgNSk7Ci0gICAgYiA9IGdfbmV3MCAoZ2RvdWJsZSwgbnAgKyA1KTsKLQotICAgIC8qIENhbGN1bGF0ZSB0cmFuc2ZlciBmdW5jdGlvbiBjb2VmZmljaWVudHMgKi8KLSAgICBhWzRdID0gMS4wOwotICAgIGJbNF0gPSAxLjA7Ci0KLSAgICBmb3IgKHAgPSAxOyBwIDw9IG5wIC8gNDsgcCsrKSB7Ci0gICAgICBnZG91YmxlIGIwLCBiMSwgYjIsIGIzLCBiNCwgYTEsIGEyLCBhMywgYTQ7Ci0gICAgICBnZG91YmxlICp0YSA9IGdfbmV3MCAoZ2RvdWJsZSwgbnAgKyA1KTsKLSAgICAgIGdkb3VibGUgKnRiID0gZ19uZXcwIChnZG91YmxlLCBucCArIDUpOwotCi0gICAgICBnZW5lcmF0ZV9iaXF1YWRfY29lZmZpY2llbnRzIChmaWx0ZXIsIHAsIHJhdGUsCi0gICAgICAgICAgJmIwLCAmYjEsICZiMiwgJmIzLCAmYjQsICZhMSwgJmEyLCAmYTMsICZhNCk7Ci0KLSAgICAgIG1lbWNweSAodGEsIGEsIHNpemVvZiAoZ2RvdWJsZSkgKiAobnAgKyA1KSk7Ci0gICAgICBtZW1jcHkgKHRiLCBiLCBzaXplb2YgKGdkb3VibGUpICogKG5wICsgNSkpOwotCi0gICAgICAvKiBhZGQgdGhlIG5ldyBjb2VmZmljaWVudHMgZm9yIHRoZSBuZXcgdHdvIHBvbGVzCi0gICAgICAgKiB0byB0aGUgY2FzY2FkZSBieSBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgdHJhbnNmZXIKLSAgICAgICAqIGZ1bmN0aW9ucyAqLwotICAgICAgZm9yIChpID0gNDsgaSA8IG5wICsgNTsgaSsrKSB7Ci0gICAgICAgIGJbaV0gPQotICAgICAgICAgICAgYjAgKiB0YltpXSArIGIxICogdGJbaSAtIDFdICsgYjIgKiB0YltpIC0gMl0gKyBiMyAqIHRiW2kgLSAzXSArCi0gICAgICAgICAgICBiNCAqIHRiW2kgLSA0XTsKLSAgICAgICAgYVtpXSA9Ci0gICAgICAgICAgICB0YVtpXSAtIGExICogdGFbaSAtIDFdIC0gYTIgKiB0YVtpIC0gMl0gLSBhMyAqIHRhW2kgLSAzXSAtCi0gICAgICAgICAgICBhNCAqIHRhW2kgLSA0XTsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAodGEpOwotICAgICAgZ19mcmVlICh0Yik7Ci0gICAgfQotCi0gICAgLyogTW92ZSBjb2VmZmljaWVudHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkgdG8gbW92ZSBmcm9tCi0gICAgICogdGhlIHRyYW5zZmVyIGZ1bmN0aW9uJ3MgY29lZmZpY2llbnRzIHRvIHRoZSBkaWZmZXJlbmNlCi0gICAgICogZXF1YXRpb24ncyBjb2VmZmljaWVudHMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDw9IG5wOyBpKyspIHsKLSAgICAgIGFbaV0gPSBhW2kgKyA0XTsKLSAgICAgIGJbaV0gPSBiW2kgKyA0XTsKLSAgICB9Ci0KLSAgICAvKiBOb3JtYWxpemUgdG8gdW5pdHkgZ2FpbiBhdCBmcmVxdWVuY3kgMCBhbmQgZnJlcXVlbmN5Ci0gICAgICogMC41IGZvciBiYW5kcmVqZWN0IGFuZCB1bml0eSBnYWluIGF0IGJhbmQgY2VudGVyIGZyZXF1ZW5jeQotICAgICAqIGZvciBiYW5kcGFzcyAqLwotICAgIGlmIChmaWx0ZXItPm1vZGUgPT0gTU9ERV9CQU5EX1JFSkVDVCkgewotICAgICAgLyogZ2FpbiBpcyBzcXJ0KEgoMCkqSCgwLjUpKSAqLwotCi0gICAgICBnZG91YmxlIGdhaW4xID0KLSAgICAgICAgICBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2NhbGN1bGF0ZV9nYWluIChhLCBucCArIDEsIGIsIG5wICsgMSwKLSAgICAgICAgICAxLjAsIDAuMCk7Ci0gICAgICBnZG91YmxlIGdhaW4yID0KLSAgICAgICAgICBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2NhbGN1bGF0ZV9nYWluIChhLCBucCArIDEsIGIsIG5wICsgMSwKLSAgICAgICAgICAtMS4wLCAwLjApOwotCi0gICAgICBnYWluMSA9IHNxcnQgKGdhaW4xICogZ2FpbjIpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDw9IG5wOyBpKyspIHsKLSAgICAgICAgYltpXSAvPSBnYWluMTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogZ2FpbiBpcyBIKHdjKSwgd2MgPSBjZW50ZXIgZnJlcXVlbmN5ICovCi0KLSAgICAgIGdkb3VibGUgdzEgPSAyLjAgKiBHX1BJICogKGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5IC8gcmF0ZSk7Ci0gICAgICBnZG91YmxlIHcyID0gMi4wICogR19QSSAqIChmaWx0ZXItPnVwcGVyX2ZyZXF1ZW5jeSAvIHJhdGUpOwotICAgICAgZ2RvdWJsZSB3MCA9ICh3MiArIHcxKSAvIDIuMDsKLSAgICAgIGdkb3VibGUgenIgPSBjb3MgKHcwKSwgemkgPSBzaW4gKHcwKTsKLSAgICAgIGdkb3VibGUgZ2FpbiA9Ci0gICAgICAgICAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9jYWxjdWxhdGVfZ2FpbiAoYSwgbnAgKyAxLCBiLCBucCArIDEsIHpyLAotICAgICAgICAgIHppKTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8PSBucDsgaSsrKSB7Ci0gICAgICAgIGJbaV0gLz0gZ2FpbjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3NldF9jb2VmZmljaWVudHMgKEdTVF9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIKLSAgICAgICAgKGZpbHRlciksIGEsIG5wICsgMSwgYiwgbnAgKyAxKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsCi0gICAgICAgICJHZW5lcmF0ZWQgSUlSIGNvZWZmaWNpZW50cyBmb3IgdGhlIENoZWJ5c2hldiBmaWx0ZXIiKTsKLSAgICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAibW9kZTogJXMsIHR5cGU6ICVkLCBwb2xlczogJWQsIGxvd2VyLWZyZXF1ZW5jeTogJS4yZiBIeiwgdXBwZXItZnJlcXVlbmN5OiAlLjJmIEh6LCByaXBwbGU6ICUuMmYgZEIiLAotICAgICAgICAoZmlsdGVyLT5tb2RlID09IE1PREVfQkFORF9QQVNTKSA/ICJiYW5kLXBhc3MiIDogImJhbmQtcmVqZWN0IiwKLSAgICAgICAgZmlsdGVyLT50eXBlLCBmaWx0ZXItPnBvbGVzLCBmaWx0ZXItPmxvd2VyX2ZyZXF1ZW5jeSwKLSAgICAgICAgZmlsdGVyLT51cHBlcl9mcmVxdWVuY3ksIGZpbHRlci0+cmlwcGxlKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICIlLjJmIGRCIGdhaW4gQCAwSHoiLAotICAgICAgICAyMC4wICogbG9nMTAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4gKGEsIG5wICsgMSwgYiwKLSAgICAgICAgICAgICAgICBucCArIDEsIDEuMCwgMC4wKSkpOwotICAgIHsKLSAgICAgIGdkb3VibGUgdzEgPSAyLjAgKiBHX1BJICogKGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5IC8gcmF0ZSk7Ci0gICAgICBnZG91YmxlIHcyID0gMi4wICogR19QSSAqIChmaWx0ZXItPnVwcGVyX2ZyZXF1ZW5jeSAvIHJhdGUpOwotICAgICAgZ2RvdWJsZSB3MCA9ICh3MiArIHcxKSAvIDIuMDsKLSAgICAgIGdkb3VibGUgenIsIHppOwotCi0gICAgICB6ciA9IGNvcyAodzEpOwotICAgICAgemkgPSBzaW4gKHcxKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICIlLjJmIGRCIGdhaW4gQCAlZEh6IiwKLSAgICAgICAgICAyMC4wICogbG9nMTAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4gKGEsIG5wICsgMSwKLSAgICAgICAgICAgICAgICAgIGIsIG5wICsgMSwgenIsIHppKSksIChpbnQpIGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5KTsKLSAgICAgIHpyID0gY29zICh3MCk7Ci0gICAgICB6aSA9IHNpbiAodzApOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgIiUuMmYgZEIgZ2FpbiBAICVkSHoiLAotICAgICAgICAgIDIwLjAgKiBsb2cxMCAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9jYWxjdWxhdGVfZ2FpbiAoYSwgbnAgKyAxLAotICAgICAgICAgICAgICAgICAgYiwgbnAgKyAxLCB6ciwgemkpKSwKLSAgICAgICAgICAoaW50KSAoKGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5ICsgZmlsdGVyLT51cHBlcl9mcmVxdWVuY3kpIC8gMi4wKSk7Ci0gICAgICB6ciA9IGNvcyAodzIpOwotICAgICAgemkgPSBzaW4gKHcyKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICIlLjJmIGRCIGdhaW4gQCAlZEh6IiwKLSAgICAgICAgICAyMC4wICogbG9nMTAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4gKGEsIG5wICsgMSwKLSAgICAgICAgICAgICAgICAgIGIsIG5wICsgMSwgenIsIHppKSksIChpbnQpIGZpbHRlci0+dXBwZXJfZnJlcXVlbmN5KTsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgIiUuMmYgZEIgZ2FpbiBAICVkSHoiLAotICAgICAgICAyMC4wICogbG9nMTAgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4gKGEsIG5wICsgMSwgYiwKLSAgICAgICAgICAgICAgICBucCArIDEsIC0xLjAsIDAuMCkpLCByYXRlIC8gMik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19jaGViX2JhbmRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEF1ZGlvQ2hlYkJhbmQgKmZpbHRlciA9IEdTVF9BVURJT19DSEVCX0JBTkQgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJmZpbHRlci0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2NoZWJfYmFuZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9DaGViQmFuZCAqZmlsdGVyID0gR1NUX0FVRElPX0NIRUJfQkFORCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBnZW5lcmF0ZV9jb2VmZmljaWVudHMgKGZpbHRlciwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFlQRToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPnR5cGUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdlbmVyYXRlX2NvZWZmaWNpZW50cyAoZmlsdGVyLCBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dFUl9GUkVRVUVOQ1k6Ci0gICAgICBnX211dGV4X2xvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgZmlsdGVyLT5sb3dlcl9mcmVxdWVuY3kgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgZ2VuZXJhdGVfY29lZmZpY2llbnRzIChmaWx0ZXIsIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VQUEVSX0ZSRVFVRU5DWToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPnVwcGVyX2ZyZXF1ZW5jeSA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBnZW5lcmF0ZV9jb2VmZmljaWVudHMgKGZpbHRlciwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUklQUExFOgotICAgICAgZ19tdXRleF9sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGZpbHRlci0+cmlwcGxlID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGdlbmVyYXRlX2NvZWZmaWNpZW50cyAoZmlsdGVyLCBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT0xFUzoKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPnBvbGVzID0gR1NUX1JPVU5EX1VQXzQgKGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpKTsKLSAgICAgIGdlbmVyYXRlX2NvZWZmaWNpZW50cyAoZmlsdGVyLCBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19jaGViX2JhbmRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvQ2hlYkJhbmQgKmZpbHRlciA9IEdTVF9BVURJT19DSEVCX0JBTkQgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZmlsdGVyLT5tb2RlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UWVBFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZmlsdGVyLT50eXBlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dFUl9GUkVRVUVOQ1k6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+bG93ZXJfZnJlcXVlbmN5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VUFBFUl9GUkVRVUVOQ1k6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+dXBwZXJfZnJlcXVlbmN5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SSVBQTEU6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+cmlwcGxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT0xFUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+cG9sZXMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19jaGViX2JhbmRfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0QXVkaW9DaGViQmFuZCAqZmlsdGVyID0gR1NUX0FVRElPX0NIRUJfQkFORCAoYmFzZSk7Ci0KLSAgZ2VuZXJhdGVfY29lZmZpY2llbnRzIChmaWx0ZXIsIGluZm8pOwotCi0gIHJldHVybiBHU1RfQVVESU9fRklMVEVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zZXR1cCAoYmFzZSwgaW5mbyk7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmggYi9nc3QvYXVkaW9meC9hdWRpb2NoZWJiYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4YmRhZjAuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9jaGViYmFuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQVVESU9fQ0hFQl9CQU5EX0hfXwotI2RlZmluZSBfX0dTVF9BVURJT19DSEVCX0JBTkRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi0jaW5jbHVkZSAiYXVkaW9meGJhc2VpaXJmaWx0ZXIuaCIKLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9BVURJT19DSEVCX0JBTkQgICAgICAgICAgICAoZ3N0X2F1ZGlvX2NoZWJfYmFuZF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fQ0hFQl9CQU5EKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQVVESU9fQ0hFQl9CQU5ELEdzdEF1ZGlvQ2hlYkJhbmQpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fQ0hFQl9CQU5EKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVVESU9fQ0hFQl9CQU5EKSkKLSNkZWZpbmUgR1NUX0FVRElPX0NIRUJfQkFORF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcykgLEdTVF9UWVBFX0FVRElPX0NIRUJfQkFORCxHc3RBdWRpb0NoZWJCYW5kQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fQ0hFQl9CQU5EX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSAsR1NUX1RZUEVfQVVESU9fQ0hFQl9CQU5EKSkKLSNkZWZpbmUgR1NUX0FVRElPX0NIRUJfQkFORF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaikgLEdTVF9UWVBFX0FVRElPX0NIRUJfQkFORCxHc3RBdWRpb0NoZWJCYW5kQ2xhc3MpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvQ2hlYkJhbmQgR3N0QXVkaW9DaGViQmFuZDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0NoZWJCYW5kQ2xhc3MgR3N0QXVkaW9DaGViQmFuZENsYXNzOwotCi1zdHJ1Y3QgX0dzdEF1ZGlvQ2hlYkJhbmQKLXsKLSAgR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIgcGFyZW50OwotCi0gIGdpbnQgbW9kZTsKLSAgZ2ludCB0eXBlOwotICBnaW50IHBvbGVzOwotICBnZmxvYXQgbG93ZXJfZnJlcXVlbmN5OwotICBnZmxvYXQgdXBwZXJfZnJlcXVlbmN5OwotICBnZmxvYXQgcmlwcGxlOwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIEdNdXRleCBsb2NrOwotfTsKLQotc3RydWN0IF9Hc3RBdWRpb0NoZWJCYW5kQ2xhc3MKLXsKLSAgR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXJDbGFzcyBwYXJlbnQ7Ci19OwotCi1HVHlwZSBnc3RfYXVkaW9fY2hlYl9iYW5kX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9BVURJT19DSEVCX0JBTkRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jIGIvZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI3ODg4Ni4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb2NoZWJsaW1pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTc0ICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiAKLSAqIENoZWJ5c2hldiB0eXBlIDEgZmlsdGVyIGRlc2lnbiBiYXNlZCBvbgotICogIlRoZSBTY2llbnRpc3QgYW5kIEVuZ2luZWVyJ3MgR3VpZGUgdG8gRFNQIiwgQ2hhcHRlciAyMC4KLSAqIGh0dHA6Ly93d3cuZHNwZ3VpZGUuY29tLwotICoKLSAqIEZvciB0eXBlIDIgYW5kIENoZWJ5c2hldiBmaWx0ZXJzIGluIGdlbmVyYWwgcmVhZAotICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DaGVieXNoZXZfZmlsdGVyCi0gKgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWF1ZGlvY2hlYmxpbWl0Ci0gKgotICogQXR0ZW51YXRlcyBhbGwgZnJlcXVlbmNpZXMgYWJvdmUgdGhlIGN1dG9mZiBmcmVxdWVuY3kgKGxvdy1wYXNzKSBvciBhbGwgZnJlcXVlbmNpZXMgYmVsb3cgdGhlCi0gKiBjdXRvZmYgZnJlcXVlbmN5IChoaWdoLXBhc3MpLiBUaGUgbnVtYmVyIG9mIHBvbGVzIGFuZCB0aGUgcmlwcGxlIHBhcmFtZXRlciBjb250cm9sIHRoZSByb2xsb2ZmLgotICoKLSAqIFRoaXMgZWxlbWVudCBoYXMgdGhlIGFkdmFudGFnZSBvdmVyIHRoZSB3aW5kb3dlZCBzaW5jIGxvd3Bhc3MgYW5kIGhpZ2hwYXNzIGZpbHRlciB0aGF0IGl0IGlzCi0gKiBtdWNoIGZhc3RlciBhbmQgcHJvZHVjZXMgYWxtb3N0IGFzIGdvb2QgcmVzdWx0cy4gSXQncyBvbmx5IGRpc2FkdmFudGFnZXMgYXJlIHRoZSBoaWdobHkKLSAqIG5vbi1saW5lYXIgcGhhc2UgYW5kIHRoZSBzbG93ZXIgcm9sbG9mZiBjb21wYXJlZCB0byBhIHdpbmRvd2VkIHNpbmMgZmlsdGVyIHdpdGggYSBsYXJnZSBrZXJuZWwuCi0gKgotICogRm9yIHR5cGUgMSB0aGUgcmlwcGxlIHBhcmFtZXRlciBzcGVjaWZpZXMgaG93IG11Y2ggcmlwcGxlIGluIGRCIGlzIGFsbG93ZWQgaW4gdGhlIHBhc3NiYW5kLCBpLmUuCi0gKiBzb21lIGZyZXF1ZW5jaWVzIGluIHRoZSBwYXNzYmFuZCB3aWxsIGJlIGFtcGxpZmllZCBieSB0aGF0IHZhbHVlLiBBIGhpZ2hlciByaXBwbGUgdmFsdWUgd2lsbCBhbGxvdwotICogYSBmYXN0ZXIgcm9sbG9mZi4KLSAqCi0gKiBGb3IgdHlwZSAyIHRoZSByaXBwbGUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgc3RvcGJhbmQgYXR0ZW51YXRpb24uIEluIHRoZSBzdG9wYmFuZCB0aGUgZ2FpbiB3aWxsCi0gKiBiZSBhdCBtb3N0IHRoaXMgdmFsdWUuIEEgbG93ZXIgcmlwcGxlIHZhbHVlIHdpbGwgYWxsb3cgYSBmYXN0ZXIgcm9sbG9mZi4KLSAqCi0gKiBBcyBhIHNwZWNpYWwgY2FzZSwgYSBDaGVieXNoZXYgdHlwZSAxIGZpbHRlciB3aXRoIG5vIHJpcHBsZSBpcyBhIEJ1dHRlcndvcnRoIGZpbHRlci4KLSAqCi0gKiA8bm90ZT48cGFyYT4KLSAqIEJlIHdhcm5lZCB0aGF0IGEgdG9vIGxhcmdlIG51bWJlciBvZiBwb2xlcyBjYW4gcHJvZHVjZSBub2lzZS4gVGhlIG1vc3QgcG9sZXMgYXJlIHBvc3NpYmxlIHdpdGgKLSAqIGEgY3V0b2ZmIGZyZXF1ZW5jeSBhdCBhIHF1YXJ0ZXIgb2YgdGhlIHNhbXBsaW5nIHJhdGUuCi0gKiA8L3BhcmE+PC9ub3RlPgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgZnJlcT0xNTAwICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9jaGVibGltaXQgbW9kZT1sb3ctcGFzcyBjdXRvZmY9MTAwMCBwb2xlcz00ICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249Im1lbG8xLm9nZyIgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvY2hlYmxpbWl0IG1vZGU9aGlnaC1wYXNzIGN1dG9mZj00MDAgcmlwcGxlPTAuMiAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgd2F2ZT13aGl0ZS1ub2lzZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvY2hlYmxpbWl0IG1vZGU9bG93LXBhc3MgY3V0b2ZmPTgwMCB0eXBlPTIgISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAibWF0aF9jb21wYXQuaCIKLQotI2luY2x1ZGUgImF1ZGlvY2hlYmxpbWl0LmgiCi0KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYXVkaW9fY2hlYl9saW1pdF9kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTU9ERSwKLSAgUFJPUF9UWVBFLAotICBQUk9QX0NVVE9GRiwKLSAgUFJPUF9SSVBQTEUsCi0gIFBST1BfUE9MRVMKLX07Ci0KLSNkZWZpbmUgZ3N0X2F1ZGlvX2NoZWJfbGltaXRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXVkaW9DaGViTGltaXQsCi0gICAgZ3N0X2F1ZGlvX2NoZWJfbGltaXQsIEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19jaGViX2xpbWl0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19jaGViX2xpbWl0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19jaGViX2xpbWl0X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hdWRpb19jaGViX2xpbWl0X3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGZpbHRlciwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLQotZW51bQotewotICBNT0RFX0xPV19QQVNTID0gMCwKLSAgTU9ERV9ISUdIX1BBU1MKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fQ0hFQllTSEVWX0ZSRVFfTElNSVRfTU9ERSAoZ3N0X2F1ZGlvX2NoZWJfbGltaXRfbW9kZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2F1ZGlvX2NoZWJfbGltaXRfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGd0eXBlID0gMDsKLQotICBpZiAoZ3R5cGUgPT0gMCkgewotICAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgICAge01PREVfTE9XX1BBU1MsICJMb3cgcGFzcyAoZGVmYXVsdCkiLAotICAgICAgICAgICJsb3ctcGFzcyJ9LAotICAgICAge01PREVfSElHSF9QQVNTLCAiSGlnaCBwYXNzIiwKLSAgICAgICAgICAiaGlnaC1wYXNzIn0sCi0gICAgICB7MCwgTlVMTCwgTlVMTH0KLSAgICB9OwotCi0gICAgZ3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QXVkaW9DaGViTGltaXRNb2RlIiwgdmFsdWVzKTsKLSAgfQotICByZXR1cm4gZ3R5cGU7Ci19Ci0KLS8qIEdPYmplY3Qgdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19jaGViX2xpbWl0X2NsYXNzX2luaXQgKEdzdEF1ZGlvQ2hlYkxpbWl0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QXVkaW9GaWx0ZXJDbGFzcyAqZmlsdGVyX2NsYXNzID0gKEdzdEF1ZGlvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9hdWRpb19jaGViX2xpbWl0X2RlYnVnLCAiYXVkaW9jaGVibGltaXQiLCAwLAotICAgICAgImF1ZGlvY2hlYmxpbWl0IGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fY2hlYl9saW1pdF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19jaGViX2xpbWl0X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYXVkaW9fY2hlYl9saW1pdF9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm1vZGUiLCAiTW9kZSIsCi0gICAgICAgICAgIkxvdyBwYXNzIG9yIGhpZ2ggcGFzcyBtb2RlIiwKLSAgICAgICAgICBHU1RfVFlQRV9BVURJT19DSEVCWVNIRVZfRlJFUV9MSU1JVF9NT0RFLCBNT0RFX0xPV19QQVNTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UWVBFLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInR5cGUiLCAiVHlwZSIsICJUeXBlIG9mIHRoZSBjaGVieWNoZXYgZmlsdGVyIiwgMSwgMiwgMSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyogRklYTUU6IERvbid0IHVzZSB0aGUgY29tcGxldGUgcG9zc2libGUgcmFuZ2UgYnV0IHJlc3RyaWN0IHRoZSB1cHBlciBib3VuZGFyeQotICAgKiBzbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBVSXMgY2FuIHVzZSBhIHNsaWRlciB3aXRob3V0ICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1VUT0ZGLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgiY3V0b2ZmIiwgIkN1dG9mZiIsICJDdXQgb2ZmIGZyZXF1ZW5jeSAoSHopIiwgMC4wLAotICAgICAgICAgIDEwMDAwMC4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JJUFBMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoInJpcHBsZSIsICJSaXBwbGUiLCAiQW1vdW50IG9mIHJpcHBsZSAoZEIpIiwgMC4wLAotICAgICAgICAgIDIwMC4wLCAwLjI1LAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKiBGSVhNRTogV2hhdCB0byBkbyBhYm91dCB0aGlzIHVwcGVyIGJvdW5kYXJ5PyBXaXRoIGEgY3V0b2ZmIGZyZXF1ZW5jeSBvZgotICAgKiByYXRlLzQgMzIgcG9sZXMgYXJlIGNvbXBsZXRlbHkgcG9zc2libGUsIHdpdGggYSBjdXRvZmYgZnJlcXVlbmN5IHZlcnkgbG93Ci0gICAqIG9yIHZlcnkgaGlnaCAxNiBwb2xlcyBhbHJlYWR5IHByb2R1Y2VzIG9ubHkgbm9pc2UgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT0xFUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwb2xlcyIsICJQb2xlcyIsCi0gICAgICAgICAgIk51bWJlciBvZiBwb2xlcyB0byB1c2UsIHdpbGwgYmUgcm91bmRlZCB1cCB0byB0aGUgbmV4dCBldmVuIG51bWJlciIsCi0gICAgICAgICAgMiwgMzIsIDQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiTG93IHBhc3MgJiBoaWdoIHBhc3MgZmlsdGVyIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L0F1ZGlvIiwKLSAgICAgICJDaGVieXNoZXYgbG93IHBhc3MgYW5kIGhpZ2ggcGFzcyBmaWx0ZXIiLAotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGZpbHRlcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2NoZWJfbGltaXRfc2V0dXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2NoZWJfbGltaXRfaW5pdCAoR3N0QXVkaW9DaGViTGltaXQgKiBmaWx0ZXIpCi17Ci0gIGZpbHRlci0+Y3V0b2ZmID0gMC4wOwotICBmaWx0ZXItPm1vZGUgPSBNT0RFX0xPV19QQVNTOwotICBmaWx0ZXItPnR5cGUgPSAxOwotICBmaWx0ZXItPnBvbGVzID0gNDsKLSAgZmlsdGVyLT5yaXBwbGUgPSAwLjI1OwotCi0gIGdfbXV0ZXhfaW5pdCAoJmZpbHRlci0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZV9iaXF1YWRfY29lZmZpY2llbnRzIChHc3RBdWRpb0NoZWJMaW1pdCAqIGZpbHRlciwKLSAgICBnaW50IHAsIGdpbnQgcmF0ZSwgZ2RvdWJsZSAqIGIwLCBnZG91YmxlICogYjEsIGdkb3VibGUgKiBiMiwKLSAgICBnZG91YmxlICogYTEsIGdkb3VibGUgKiBhMikKLXsKLSAgZ2ludCBucCA9IGZpbHRlci0+cG9sZXM7Ci0gIGdkb3VibGUgcmlwcGxlID0gZmlsdGVyLT5yaXBwbGU7Ci0KLSAgLyogcG9sZSBsb2NhdGlvbiBpbiBzLXBsYW5lICovCi0gIGdkb3VibGUgcnAsIGlwOwotCi0gIC8qIHplcm8gbG9jYXRpb24gaW4gcy1wbGFuZSAqLwotICBnZG91YmxlIGl6ID0gMC4wOwotCi0gIC8qIHRyYW5zZmVyIGZ1bmN0aW9uIGNvZWZmaWNpZW50cyBmb3IgdGhlIHotcGxhbmUgKi8KLSAgZ2RvdWJsZSB4MCwgeDEsIHgyLCB5MSwgeTI7Ci0gIGdpbnQgdHlwZSA9IGZpbHRlci0+dHlwZTsKLQotICAvKiBDYWxjdWxhdGUgcG9sZSBsb2NhdGlvbiBmb3IgbG93cGFzcyBhdCBmcmVxdWVuY3kgMSAqLwotICB7Ci0gICAgZ2RvdWJsZSBhbmdsZSA9IChHX1BJIC8gMi4wKSAqICgyLjAgKiBwIC0gMSkgLyBucDsKLQotICAgIHJwID0gLXNpbiAoYW5nbGUpOwotICAgIGlwID0gY29zIChhbmdsZSk7Ci0gIH0KLQotICAvKiBJZiB3ZSBhbGxvdyByaXBwbGUsIG1vdmUgdGhlIHBvbGUgZnJvbSB0aGUgdW5pdAotICAgKiBjaXJjbGUgdG8gYW4gZWxsaXBzZSBhbmQga2VlcCBjdXRvZmYgYXQgZnJlcXVlbmN5IDEgKi8KLSAgaWYgKHJpcHBsZSA+IDAgJiYgdHlwZSA9PSAxKSB7Ci0gICAgZ2RvdWJsZSBlcywgdng7Ci0KLSAgICBlcyA9IHNxcnQgKHBvdyAoMTAuMCwgcmlwcGxlIC8gMTAuMCkgLSAxLjApOwotCi0gICAgdnggPSAoMS4wIC8gbnApICogYXNpbmggKDEuMCAvIGVzKTsKLSAgICBycCA9IHJwICogc2luaCAodngpOwotICAgIGlwID0gaXAgKiBjb3NoICh2eCk7Ci0gIH0gZWxzZSBpZiAodHlwZSA9PSAyKSB7Ci0gICAgZ2RvdWJsZSBlcywgdng7Ci0KLSAgICBlcyA9IHNxcnQgKHBvdyAoMTAuMCwgcmlwcGxlIC8gMTAuMCkgLSAxLjApOwotICAgIHZ4ID0gKDEuMCAvIG5wKSAqIGFzaW5oIChlcyk7Ci0gICAgcnAgPSBycCAqIHNpbmggKHZ4KTsKLSAgICBpcCA9IGlwICogY29zaCAodngpOwotICB9Ci0KLSAgLyogQ2FsY3VsYXRlIGludmVyc2Ugb2YgdGhlIHBvbGUgbG9jYXRpb24gdG8gY29udmVydCBmcm9tCi0gICAqIHR5cGUgSSB0byB0eXBlIElJICovCi0gIGlmICh0eXBlID09IDIpIHsKLSAgICBnZG91YmxlIG1hZzIgPSBycCAqIHJwICsgaXAgKiBpcDsKLQotICAgIHJwIC89IG1hZzI7Ci0gICAgaXAgLz0gbWFnMjsKLSAgfQotCi0gIC8qIENhbGN1bGF0ZSB6ZXJvIGxvY2F0aW9uIGZvciBmcmVxdWVuY3kgMSBvbiB0aGUKLSAgICogdW5pdCBjaXJjbGUgZm9yIHR5cGUgMiAqLwotICBpZiAodHlwZSA9PSAyKSB7Ci0gICAgZ2RvdWJsZSBhbmdsZSA9IEdfUEkgLyAobnAgKiAyLjApICsgKChwIC0gMSkgKiBHX1BJKSAvIChucCk7Ci0gICAgZ2RvdWJsZSBtYWcyOwotCi0gICAgaXogPSBjb3MgKGFuZ2xlKTsKLSAgICBtYWcyID0gaXogKiBpejsKLSAgICBpeiAvPSBtYWcyOwotICB9Ci0KLSAgLyogQ29udmVydCBmcm9tIHMtZG9tYWluIHRvIHotZG9tYWluIGJ5Ci0gICAqIHVzaW5nIHRoZSBiaWxpbmVhciBaLXRyYW5zZm9ybSwgaS5lLgotICAgKiBzdWJzdGl0dXRlIHMgYnkgKDIvdCkqKCh6LTEpLyh6KzEpKQotICAgKiB3aXRoIHQgPSAyICogdGFuKDAuNSkuCi0gICAqLwotICBpZiAodHlwZSA9PSAxKSB7Ci0gICAgZ2RvdWJsZSB0LCBtLCBkOwotCi0gICAgdCA9IDIuMCAqIHRhbiAoMC41KTsKLSAgICBtID0gcnAgKiBycCArIGlwICogaXA7Ci0gICAgZCA9IDQuMCAtIDQuMCAqIHJwICogdCArIG0gKiB0ICogdDsKLQotICAgIHgwID0gKHQgKiB0KSAvIGQ7Ci0gICAgeDEgPSAyLjAgKiB4MDsKLSAgICB4MiA9IHgwOwotICAgIHkxID0gKDguMCAtIDIuMCAqIG0gKiB0ICogdCkgLyBkOwotICAgIHkyID0gKC00LjAgLSA0LjAgKiBycCAqIHQgLSBtICogdCAqIHQpIC8gZDsKLSAgfSBlbHNlIHsKLSAgICBnZG91YmxlIHQsIG0sIGQ7Ci0KLSAgICB0ID0gMi4wICogdGFuICgwLjUpOwotICAgIG0gPSBycCAqIHJwICsgaXAgKiBpcDsKLSAgICBkID0gNC4wIC0gNC4wICogcnAgKiB0ICsgbSAqIHQgKiB0OwotCi0gICAgeDAgPSAodCAqIHQgKiBpeiAqIGl6ICsgNC4wKSAvIGQ7Ci0gICAgeDEgPSAoLTguMCArIDIuMCAqIGl6ICogaXogKiB0ICogdCkgLyBkOwotICAgIHgyID0geDA7Ci0gICAgeTEgPSAoOC4wIC0gMi4wICogbSAqIHQgKiB0KSAvIGQ7Ci0gICAgeTIgPSAoLTQuMCAtIDQuMCAqIHJwICogdCAtIG0gKiB0ICogdCkgLyBkOwotICB9Ci0KLSAgLyogQ29udmVydCBmcm9tIGxvd3Bhc3MgYXQgZnJlcXVlbmN5IDEgdG8gZWl0aGVyIGxvd3Bhc3MKLSAgICogb3IgaGlnaHBhc3MuCi0gICAqCi0gICAqIEZvciBsb3dwYXNzIHN1YnN0aXR1dGUgel4oLTEpIHdpdGg6Ci0gICAqICAtMQotICAgKiB6ICAgLSBrCi0gICAqIC0tLS0tLS0tLS0tLQotICAgKiAgICAgICAgICAtMQotICAgKiAxIC0gayAqIHoKLSAgICoKLSAgICogayA9IHNpbigoMS13KS8yKSAvIHNpbigoMSt3KS8yKQotICAgKgotICAgKiBGb3IgaGlnaHBhc3Mgc3Vic3RpdHV0ZSB6XigtMSkgd2l0aDoKLSAgICoKLSAgICogICAtMQotICAgKiAteiAgIC0gawotICAgKiAtLS0tLS0tLS0tLS0KLSAgICogICAgICAgICAgLTEKLSAgICogMSArIGsgKiB6Ci0gICAqCi0gICAqIGsgPSAtY29zKCgxK3cpLzIpIC8gY29zKCgxLXcpLzIpCi0gICAqCi0gICAqLwotICB7Ci0gICAgZ2RvdWJsZSBrLCBkOwotICAgIGdkb3VibGUgb21lZ2EgPSAyLjAgKiBHX1BJICogKGZpbHRlci0+Y3V0b2ZmIC8gcmF0ZSk7Ci0KLSAgICBpZiAoZmlsdGVyLT5tb2RlID09IE1PREVfTE9XX1BBU1MpCi0gICAgICBrID0gc2luICgoMS4wIC0gb21lZ2EpIC8gMi4wKSAvIHNpbiAoKDEuMCArIG9tZWdhKSAvIDIuMCk7Ci0gICAgZWxzZQotICAgICAgayA9IC1jb3MgKChvbWVnYSArIDEuMCkgLyAyLjApIC8gY29zICgob21lZ2EgLSAxLjApIC8gMi4wKTsKLQotICAgIGQgPSAxLjAgKyB5MSAqIGsgLSB5MiAqIGsgKiBrOwotICAgICpiMCA9ICh4MCArIGsgKiAoLXgxICsgayAqIHgyKSkgLyBkOwotICAgICpiMSA9ICh4MSArIGsgKiBrICogeDEgLSAyLjAgKiBrICogKHgwICsgeDIpKSAvIGQ7Ci0gICAgKmIyID0gKHgwICogayAqIGsgLSB4MSAqIGsgKyB4MikgLyBkOwotICAgICphMSA9ICgyLjAgKiBrICsgeTEgKyB5MSAqIGsgKiBrIC0gMi4wICogeTIgKiBrKSAvIGQ7Ci0gICAgKmEyID0gKC1rICogayAtIHkxICogayArIHkyKSAvIGQ7Ci0KLSAgICBpZiAoZmlsdGVyLT5tb2RlID09IE1PREVfSElHSF9QQVNTKSB7Ci0gICAgICAqYTEgPSAtKmExOwotICAgICAgKmIxID0gLSpiMTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX2NvZWZmaWNpZW50cyAoR3N0QXVkaW9DaGViTGltaXQgKiBmaWx0ZXIsIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIGdpbnQgcmF0ZTsKLQotICBpZiAoaW5mbykgewotICAgIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKTsKLSAgfSBlbHNlIHsKLSAgICByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChmaWx0ZXIpOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgImN1dG9mZiAlZiIsIGZpbHRlci0+Y3V0b2ZmKTsKLQotICBpZiAocmF0ZSA9PSAwKSB7Ci0gICAgZ2RvdWJsZSAqYSA9IGdfbmV3MCAoZ2RvdWJsZSwgMSk7Ci0gICAgZ2RvdWJsZSAqYiA9IGdfbmV3MCAoZ2RvdWJsZSwgMSk7Ci0KLSAgICBhWzBdID0gMS4wOwotICAgIGJbMF0gPSAxLjA7Ci0gICAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zZXRfY29lZmZpY2llbnRzIChHU1RfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSCi0gICAgICAgIChmaWx0ZXIpLCBhLCAxLCBiLCAxKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJyYXRlIHdhcyBub3Qgc2V0IHlldCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChmaWx0ZXItPmN1dG9mZiA+PSByYXRlIC8gMi4wKSB7Ci0gICAgZ2RvdWJsZSAqYSA9IGdfbmV3MCAoZ2RvdWJsZSwgMSk7Ci0gICAgZ2RvdWJsZSAqYiA9IGdfbmV3MCAoZ2RvdWJsZSwgMSk7Ci0KLSAgICBhWzBdID0gMS4wOwotICAgIGJbMF0gPSAoZmlsdGVyLT5tb2RlID09IE1PREVfTE9XX1BBU1MpID8gMS4wIDogMC4wOwotICAgIGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfc2V0X2NvZWZmaWNpZW50cyAoR1NUX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUgotICAgICAgICAoZmlsdGVyKSwgYSwgMSwgYiwgMSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgImN1dG9mZiB3YXMgaGlnaGVyIHRoYW4gbnlxdWlzdCBmcmVxdWVuY3kiKTsKLSAgICByZXR1cm47Ci0gIH0gZWxzZSBpZiAoZmlsdGVyLT5jdXRvZmYgPD0gMC4wKSB7Ci0gICAgZ2RvdWJsZSAqYSA9IGdfbmV3MCAoZ2RvdWJsZSwgMSk7Ci0gICAgZ2RvdWJsZSAqYiA9IGdfbmV3MCAoZ2RvdWJsZSwgMSk7Ci0KLSAgICBhWzBdID0gMS4wOwotICAgIGJbMF0gPSAoZmlsdGVyLT5tb2RlID09IE1PREVfTE9XX1BBU1MpID8gMC4wIDogMS4wOwotICAgIGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfc2V0X2NvZWZmaWNpZW50cyAoR1NUX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUgotICAgICAgICAoZmlsdGVyKSwgYSwgMSwgYiwgMSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgImN1dG9mZiBpcyBsb3dlciB0aGFuIHplcm8iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDYWxjdWxhdGUgY29lZmZpY2llbnRzIGZvciB0aGUgY2hlYnlzaGV2IGZpbHRlciAqLwotICB7Ci0gICAgZ2ludCBucCA9IGZpbHRlci0+cG9sZXM7Ci0gICAgZ2RvdWJsZSAqYSwgKmI7Ci0gICAgZ2ludCBpLCBwOwotCi0gICAgYSA9IGdfbmV3MCAoZ2RvdWJsZSwgbnAgKyAzKTsKLSAgICBiID0gZ19uZXcwIChnZG91YmxlLCBucCArIDMpOwotCi0gICAgLyogQ2FsY3VsYXRlIHRyYW5zZmVyIGZ1bmN0aW9uIGNvZWZmaWNpZW50cyAqLwotICAgIGFbMl0gPSAxLjA7Ci0gICAgYlsyXSA9IDEuMDsKLQotICAgIGZvciAocCA9IDE7IHAgPD0gbnAgLyAyOyBwKyspIHsKLSAgICAgIGdkb3VibGUgYjAsIGIxLCBiMiwgYTEsIGEyOwotICAgICAgZ2RvdWJsZSAqdGEgPSBnX25ldzAgKGdkb3VibGUsIG5wICsgMyk7Ci0gICAgICBnZG91YmxlICp0YiA9IGdfbmV3MCAoZ2RvdWJsZSwgbnAgKyAzKTsKLQotICAgICAgZ2VuZXJhdGVfYmlxdWFkX2NvZWZmaWNpZW50cyAoZmlsdGVyLCBwLCByYXRlLCAmYjAsICZiMSwgJmIyLCAmYTEsICZhMik7Ci0KLSAgICAgIG1lbWNweSAodGEsIGEsIHNpemVvZiAoZ2RvdWJsZSkgKiAobnAgKyAzKSk7Ci0gICAgICBtZW1jcHkgKHRiLCBiLCBzaXplb2YgKGdkb3VibGUpICogKG5wICsgMykpOwotCi0gICAgICAvKiBhZGQgdGhlIG5ldyBjb2VmZmljaWVudHMgZm9yIHRoZSBuZXcgdHdvIHBvbGVzCi0gICAgICAgKiB0byB0aGUgY2FzY2FkZSBieSBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgdHJhbnNmZXIKLSAgICAgICAqIGZ1bmN0aW9ucyAqLwotICAgICAgZm9yIChpID0gMjsgaSA8IG5wICsgMzsgaSsrKSB7Ci0gICAgICAgIGJbaV0gPSBiMCAqIHRiW2ldICsgYjEgKiB0YltpIC0gMV0gKyBiMiAqIHRiW2kgLSAyXTsKLSAgICAgICAgYVtpXSA9IHRhW2ldIC0gYTEgKiB0YVtpIC0gMV0gLSBhMiAqIHRhW2kgLSAyXTsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAodGEpOwotICAgICAgZ19mcmVlICh0Yik7Ci0gICAgfQotCi0gICAgLyogTW92ZSBjb2VmZmljaWVudHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkgdG8gbW92ZSBmcm9tCi0gICAgICogdGhlIHRyYW5zZmVyIGZ1bmN0aW9uJ3MgY29lZmZpY2llbnRzIHRvIHRoZSBkaWZmZXJlbmNlCi0gICAgICogZXF1YXRpb24ncyBjb2VmZmljaWVudHMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDw9IG5wOyBpKyspIHsKLSAgICAgIGFbaV0gPSBhW2kgKyAyXTsKLSAgICAgIGJbaV0gPSBiW2kgKyAyXTsKLSAgICB9Ci0KLSAgICAvKiBOb3JtYWxpemUgdG8gdW5pdHkgZ2FpbiBhdCBmcmVxdWVuY3kgMCBmb3IgbG93cGFzcwotICAgICAqIGFuZCBmcmVxdWVuY3kgMC41IGZvciBoaWdocGFzcyAqLwotICAgIHsKLSAgICAgIGdkb3VibGUgZ2FpbjsKLQotICAgICAgaWYgKGZpbHRlci0+bW9kZSA9PSBNT0RFX0xPV19QQVNTKQotICAgICAgICBnYWluID0KLSAgICAgICAgICAgIGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4gKGEsIG5wICsgMSwgYiwgbnAgKyAxLAotICAgICAgICAgICAgMS4wLCAwLjApOwotICAgICAgZWxzZQotICAgICAgICBnYWluID0KLSAgICAgICAgICAgIGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfY2FsY3VsYXRlX2dhaW4gKGEsIG5wICsgMSwgYiwgbnAgKyAxLAotICAgICAgICAgICAgLTEuMCwgMC4wKTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8PSBucDsgaSsrKSB7Ci0gICAgICAgIGJbaV0gLz0gZ2FpbjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3NldF9jb2VmZmljaWVudHMgKEdTVF9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIKLSAgICAgICAgKGZpbHRlciksIGEsIG5wICsgMSwgYiwgbnAgKyAxKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsCi0gICAgICAgICJHZW5lcmF0ZWQgSUlSIGNvZWZmaWNpZW50cyBmb3IgdGhlIENoZWJ5c2hldiBmaWx0ZXIiKTsKLSAgICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAibW9kZTogJXMsIHR5cGU6ICVkLCBwb2xlczogJWQsIGN1dG9mZjogJS4yZiBIeiwgcmlwcGxlOiAlLjJmIGRCIiwKLSAgICAgICAgKGZpbHRlci0+bW9kZSA9PSBNT0RFX0xPV19QQVNTKSA/ICJsb3ctcGFzcyIgOiAiaGlnaC1wYXNzIiwKLSAgICAgICAgZmlsdGVyLT50eXBlLCBmaWx0ZXItPnBvbGVzLCBmaWx0ZXItPmN1dG9mZiwgZmlsdGVyLT5yaXBwbGUpOwotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICIlLjJmIGRCIGdhaW4gQCAwIEh6IiwKLSAgICAgICAgMjAuMCAqIGxvZzEwIChnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2NhbGN1bGF0ZV9nYWluIChhLCBucCArIDEsIGIsCi0gICAgICAgICAgICAgICAgbnAgKyAxLCAxLjAsIDAuMCkpKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICB7Ci0gICAgICBnZG91YmxlIHdjID0gMi4wICogR19QSSAqIChmaWx0ZXItPmN1dG9mZiAvIHJhdGUpOwotICAgICAgZ2RvdWJsZSB6ciA9IGNvcyAod2MpLCB6aSA9IHNpbiAod2MpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLCAiJS4yZiBkQiBnYWluIEAgJWQgSHoiLAotICAgICAgICAgIDIwLjAgKiBsb2cxMCAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9jYWxjdWxhdGVfZ2FpbiAoYSwgbnAgKyAxLAotICAgICAgICAgICAgICAgICAgYiwgbnAgKyAxLCB6ciwgemkpKSwgKGludCkgZmlsdGVyLT5jdXRvZmYpOwotICAgIH0KLSNlbmRpZgotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgIiUuMmYgZEIgZ2FpbiBAICVkIEh6IiwKLSAgICAgICAgMjAuMCAqIGxvZzEwIChnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2NhbGN1bGF0ZV9nYWluIChhLCBucCArIDEsIGIsCi0gICAgICAgICAgICAgICAgbnAgKyAxLCAtMS4wLCAwLjApKSwgcmF0ZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19jaGViX2xpbWl0X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBdWRpb0NoZWJMaW1pdCAqZmlsdGVyID0gR1NUX0FVRElPX0NIRUJfTElNSVQgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJmZpbHRlci0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2NoZWJfbGltaXRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvQ2hlYkxpbWl0ICpmaWx0ZXIgPSBHU1RfQVVESU9fQ0hFQl9MSU1JVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBnZW5lcmF0ZV9jb2VmZmljaWVudHMgKGZpbHRlciwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFlQRToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPnR5cGUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdlbmVyYXRlX2NvZWZmaWNpZW50cyAoZmlsdGVyLCBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DVVRPRkY6Ci0gICAgICBnX211dGV4X2xvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgZmlsdGVyLT5jdXRvZmYgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgZ2VuZXJhdGVfY29lZmZpY2llbnRzIChmaWx0ZXIsIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JJUFBMRToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBmaWx0ZXItPnJpcHBsZSA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBnZW5lcmF0ZV9jb2VmZmljaWVudHMgKGZpbHRlciwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9MRVM6Ci0gICAgICBnX211dGV4X2xvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgZmlsdGVyLT5wb2xlcyA9IEdTVF9ST1VORF9VUF8yIChnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKSk7Ci0gICAgICBnZW5lcmF0ZV9jb2VmZmljaWVudHMgKGZpbHRlciwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fY2hlYl9saW1pdF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9DaGViTGltaXQgKmZpbHRlciA9IEdTVF9BVURJT19DSEVCX0xJTUlUIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGZpbHRlci0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFlQRToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+dHlwZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ1VUT0ZGOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBmaWx0ZXItPmN1dG9mZik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUklQUExFOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBmaWx0ZXItPnJpcHBsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9MRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPnBvbGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyogR3N0QXVkaW9GaWx0ZXIgdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXVkaW9fY2hlYl9saW1pdF9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBiYXNlLCBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RBdWRpb0NoZWJMaW1pdCAqZmlsdGVyID0gR1NUX0FVRElPX0NIRUJfTElNSVQgKGJhc2UpOwotCi0gIGdlbmVyYXRlX2NvZWZmaWNpZW50cyAoZmlsdGVyLCBpbmZvKTsKLQotICByZXR1cm4gR1NUX0FVRElPX0ZJTFRFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2V0dXAgKGJhc2UsIGluZm8pOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvY2hlYmxpbWl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MzA5NjAuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9jaGVibGltaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FVRElPX0NIRUJfTElNSVRfSF9fCi0jZGVmaW5lIF9fR1NUX0FVRElPX0NIRUJfTElNSVRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi0jaW5jbHVkZSAiYXVkaW9meGJhc2VpaXJmaWx0ZXIuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX0NIRUJfTElNSVQgICAgICAgICAgICAoZ3N0X2F1ZGlvX2NoZWJfbGltaXRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FVRElPX0NIRUJfTElNSVQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9BVURJT19DSEVCX0xJTUlULEdzdEF1ZGlvQ2hlYkxpbWl0KSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0NIRUJfTElNSVQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BVURJT19DSEVCX0xJTUlUKSkKLSNkZWZpbmUgR1NUX0FVRElPX0NIRUJfTElNSVRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19DSEVCX0xJTUlULEdzdEF1ZGlvQ2hlYkxpbWl0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fQ0hFQl9MSU1JVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcykgLEdTVF9UWVBFX0FVRElPX0NIRUJfTElNSVQpKQotI2RlZmluZSBHU1RfQVVESU9fQ0hFQl9MSU1JVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaikgLEdTVF9UWVBFX0FVRElPX0NIRUJfTElNSVQsR3N0QXVkaW9DaGViTGltaXRDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0NoZWJMaW1pdCBHc3RBdWRpb0NoZWJMaW1pdDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0NoZWJMaW1pdENsYXNzIEdzdEF1ZGlvQ2hlYkxpbWl0Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0QXVkaW9DaGViTGltaXQKLXsKLSAgR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIgcGFyZW50OwotCi0gIGdpbnQgbW9kZTsKLSAgZ2ludCB0eXBlOwotICBnaW50IHBvbGVzOwotICBnZmxvYXQgY3V0b2ZmOwotICBnZmxvYXQgcmlwcGxlOwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIEdNdXRleCBsb2NrOwotfTsKLQotc3RydWN0IF9Hc3RBdWRpb0NoZWJMaW1pdENsYXNzCi17Ci0gIEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X2F1ZGlvX2NoZWJfbGltaXRfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVVESU9fQ0hFQl9MSU1JVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5jIGIvZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliM2E2MmMuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTMgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXVkaW9keW5hbWljCi0gKgotICogVGhpcyBlbGVtZW50IGNhbiBhY3QgYXMgYSBjb21wcmVzc29yIG9yIGV4cGFuZGVyLiBBIGNvbXByZXNzb3IgY2hhbmdlcyB0aGUKLSAqIGFtcGxpdHVkZSBvZiBhbGwgc2FtcGxlcyBhYm92ZSBhIHNwZWNpZmljIHRocmVzaG9sZCB3aXRoIGEgc3BlY2lmaWMgcmF0aW8sCi0gKiBhIGV4cGFuZGVyIGRvZXMgdGhlIHNhbWUgZm9yIGFsbCBzYW1wbGVzIGJlbG93IGEgc3BlY2lmaWMgdGhyZXNob2xkLiBJZgotICogc29mdC1rbmVlIG1vZGUgaXMgc2VsZWN0ZWQgdGhlIHJhdGlvIGlzIGFwcGxpZWQgc21vb3RobHkuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyB3YXZlPXNhdyAhIGF1ZGlvZHluYW1pYyBjaGFyYWN0ZXJpc3RpY3M9c29mdC1rbmVlIG1vZGU9Y29tcHJlc3NvciB0aHJlc2hvbGQ9MC41IHJhdGlvPTAuNSAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPSJtZWxvMS5vZ2ciICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb2R5bmFtaWMgY2hhcmFjdGVyaXN0aWNzPWhhcmQta25lZSBtb2RlPWV4cGFuZGVyIHRocmVzaG9sZD0wLjIgcmF0aW89NC4wICEgYWxzYXNpbmsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyB3YXZlPXNhdyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvZHluYW1pYyAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBUT0RPOiBJbXBsZW1lbnQgYXR0YWNrIGFuZCByZWxlYXNlIHBhcmFtZXRlcnMgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotI2luY2x1ZGUgImF1ZGlvZHluYW1pYy5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYXVkaW9fZHluYW1pY19kZWJ1ZwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoR1NUX0NBVF9ERUZBVUxUKTsKLQotLyogRmlsdGVyIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ0hBUkFDVEVSSVNUSUNTLAotICBQUk9QX01PREUsCi0gIFBST1BfVEhSRVNIT0xELAotICBQUk9QX1JBVElPCi19OwotCi0jZGVmaW5lIEFMTE9XRURfQ0FQUyBcCi0gICAgImF1ZGlvL3gtcmF3LCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBmb3JtYXQ9KHN0cmluZykgeyJHU1RfQVVESU9fTkUoUzE2KSIsIkdTVF9BVURJT19ORShGMzIpIn0sIiBcCi0gICAgIiByYXRlPShpbnQpWzEsTUFYXSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBjaGFubmVscz0oaW50KVsxLE1BWF0sIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBsYXlvdXQ9KHN0cmluZykge2ludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWR9IgotCi1HX0RFRklORV9UWVBFIChHc3RBdWRpb0R5bmFtaWMsIGdzdF9hdWRpb19keW5hbWljLCBHU1RfVFlQRV9BVURJT19GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fZHluYW1pY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fZHluYW1pY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZHluYW1pY19zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBmaWx0ZXIsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faGFyZF9rbmVlX2NvbXByZXNzb3JfaW50IChHc3RBdWRpb0R5bmFtaWMgKiBmaWx0ZXIsCi0gICAgZ2ludDE2ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9oYXJkX2tuZWVfY29tcHJlc3Nvcl9mbG9hdCAoR3N0QXVkaW9EeW5hbWljICoKLSAgICBmaWx0ZXIsIGdmbG9hdCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2NvbXByZXNzb3JfaW50IChHc3RBdWRpb0R5bmFtaWMgKiBmaWx0ZXIsCi0gICAgZ2ludDE2ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9zb2Z0X2tuZWVfY29tcHJlc3Nvcl9mbG9hdCAoR3N0QXVkaW9EeW5hbWljICoKLSAgICBmaWx0ZXIsIGdmbG9hdCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9oYXJkX2tuZWVfZXhwYW5kZXJfaW50IChHc3RBdWRpb0R5bmFtaWMKLSAgICAqIGZpbHRlciwgZ2ludDE2ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9oYXJkX2tuZWVfZXhwYW5kZXJfZmxvYXQgKEdzdEF1ZGlvRHluYW1pYyAqIGZpbHRlciwKLSAgICBnZmxvYXQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2V4cGFuZGVyX2ludCAoR3N0QXVkaW9EeW5hbWljCi0gICAgKiBmaWx0ZXIsIGdpbnQxNiAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2V4cGFuZGVyX2Zsb2F0IChHc3RBdWRpb0R5bmFtaWMgKiBmaWx0ZXIsCi0gICAgZ2Zsb2F0ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotCi1zdGF0aWMgY29uc3QgR3N0QXVkaW9EeW5hbWljUHJvY2Vzc0Z1bmMgcHJvY2Vzc19mdW5jdGlvbnNbXSA9IHsKLSAgKEdzdEF1ZGlvRHluYW1pY1Byb2Nlc3NGdW5jKQotICAgICAgZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2hhcmRfa25lZV9jb21wcmVzc29yX2ludCwKLSAgKEdzdEF1ZGlvRHluYW1pY1Byb2Nlc3NGdW5jKQotICAgICAgZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2hhcmRfa25lZV9jb21wcmVzc29yX2Zsb2F0LAotICAoR3N0QXVkaW9EeW5hbWljUHJvY2Vzc0Z1bmMpCi0gICAgICBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2NvbXByZXNzb3JfaW50LAotICAoR3N0QXVkaW9EeW5hbWljUHJvY2Vzc0Z1bmMpCi0gICAgICBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2NvbXByZXNzb3JfZmxvYXQsCi0gIChHc3RBdWRpb0R5bmFtaWNQcm9jZXNzRnVuYykKLSAgICAgIGdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9oYXJkX2tuZWVfZXhwYW5kZXJfaW50LAotICAoR3N0QXVkaW9EeW5hbWljUHJvY2Vzc0Z1bmMpCi0gICAgICBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faGFyZF9rbmVlX2V4cGFuZGVyX2Zsb2F0LAotICAoR3N0QXVkaW9EeW5hbWljUHJvY2Vzc0Z1bmMpCi0gICAgICBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2V4cGFuZGVyX2ludCwKLSAgKEdzdEF1ZGlvRHluYW1pY1Byb2Nlc3NGdW5jKQotICBnc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2V4cGFuZGVyX2Zsb2F0Ci19OwotCi1lbnVtCi17Ci0gIENIQVJBQ1RFUklTVElDU19IQVJEX0tORUUgPSAwLAotICBDSEFSQUNURVJJU1RJQ1NfU09GVF9LTkVFCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX0RZTkFNSUNfQ0hBUkFDVEVSSVNUSUNTIChnc3RfYXVkaW9fZHluYW1pY19jaGFyYWN0ZXJpc3RpY3NfZ2V0X3R5cGUgKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9hdWRpb19keW5hbWljX2NoYXJhY3RlcmlzdGljc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGd0eXBlID0gMDsKLQotICBpZiAoZ3R5cGUgPT0gMCkgewotICAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgICAge0NIQVJBQ1RFUklTVElDU19IQVJEX0tORUUsICJIYXJkIEtuZWUgKGRlZmF1bHQpIiwKLSAgICAgICAgICAiaGFyZC1rbmVlIn0sCi0gICAgICB7Q0hBUkFDVEVSSVNUSUNTX1NPRlRfS05FRSwgIlNvZnQgS25lZSAoc21vb3RoKSIsCi0gICAgICAgICAgInNvZnQta25lZSJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9Ci0gICAgfTsKLQotICAgIGd0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEF1ZGlvRHluYW1pY0NoYXJhY3RlcmlzdGljcyIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIGd0eXBlOwotfQotCi1lbnVtCi17Ci0gIE1PREVfQ09NUFJFU1NPUiA9IDAsCi0gIE1PREVfRVhQQU5ERVIKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fRFlOQU1JQ19NT0RFIChnc3RfYXVkaW9fZHluYW1pY19tb2RlX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfYXVkaW9fZHluYW1pY19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZ3R5cGUgPSAwOwotCi0gIGlmIChndHlwZSA9PSAwKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAgICB7TU9ERV9DT01QUkVTU09SLCAiQ29tcHJlc3NvciAoZGVmYXVsdCkiLAotICAgICAgICAgICJjb21wcmVzc29yIn0sCi0gICAgICB7TU9ERV9FWFBBTkRFUiwgIkV4cGFuZGVyIiwgImV4cGFuZGVyIn0sCi0gICAgICB7MCwgTlVMTCwgTlVMTH0KLSAgICB9OwotCi0gICAgZ3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QXVkaW9EeW5hbWljTW9kZSIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIGd0eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2R5bmFtaWNfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKEdzdEF1ZGlvRHluYW1pYyAqIGZpbHRlciwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBnaW50IGZ1bmNfaW5kZXg7Ci0KLSAgZnVuY19pbmRleCA9IChmaWx0ZXItPm1vZGUgPT0gTU9ERV9DT01QUkVTU09SKSA/IDAgOiA0OwotICBmdW5jX2luZGV4ICs9IChmaWx0ZXItPmNoYXJhY3RlcmlzdGljcyA9PSBDSEFSQUNURVJJU1RJQ1NfSEFSRF9LTkVFKSA/IDAgOiAyOwotICBmdW5jX2luZGV4ICs9IChHU1RfQVVESU9fSU5GT19GT1JNQVQgKGluZm8pID09IEdTVF9BVURJT19GT1JNQVRfRjMyKSA/IDEgOiAwOwotCi0gIGdfYXNzZXJ0IChmdW5jX2luZGV4ID49IDAgJiYgZnVuY19pbmRleCA8IEdfTl9FTEVNRU5UUyAocHJvY2Vzc19mdW5jdGlvbnMpKTsKLQotICBmaWx0ZXItPnByb2Nlc3MgPSBwcm9jZXNzX2Z1bmN0aW9uc1tmdW5jX2luZGV4XTsKLX0KLQotLyogR09iamVjdCB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2R5bmFtaWNfY2xhc3NfaW5pdCAoR3N0QXVkaW9EeW5hbWljQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9hdWRpb19keW5hbWljX2RlYnVnLCAiYXVkaW9keW5hbWljIiwgMCwKLSAgICAgICJhdWRpb2R5bmFtaWMgZWxlbWVudCIpOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fZHluYW1pY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19keW5hbWljX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NIQVJBQ1RFUklTVElDUywKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiY2hhcmFjdGVyaXN0aWNzIiwgIkNoYXJhY3RlcmlzdGljcyIsCi0gICAgICAgICAgIlNlbGVjdHMgd2hldGhlciB0aGUgcmF0aW8gc2hvdWxkIGJlIGFwcGxpZWQgc21vb3RoIChzb2Z0LWtuZWUpICIKLSAgICAgICAgICAib3IgaGFyZCAoaGFyZC1rbmVlKS4iLAotICAgICAgICAgIEdTVF9UWVBFX0FVRElPX0RZTkFNSUNfQ0hBUkFDVEVSSVNUSUNTLCBDSEFSQUNURVJJU1RJQ1NfSEFSRF9LTkVFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJNb2RlIiwKLSAgICAgICAgICAiU2VsZWN0cyB3aGV0aGVyIHRoZSBmaWx0ZXIgc2hvdWxkIHdvcmsgb24gbG91ZCBzYW1wbGVzIChjb21wcmVzc29yKSBvciIKLSAgICAgICAgICAicXVpZXQgc2FtcGxlcyAoZXhwYW5kZXIpLiIsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fRFlOQU1JQ19NT0RFLCBNT0RFX0NPTVBSRVNTT1IsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USFJFU0hPTEQsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJ0aHJlc2hvbGQiLCAiVGhyZXNob2xkIiwKLSAgICAgICAgICAiVGhyZXNob2xkIHVudGlsIHRoZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIiwgMC4wLCAxLjAsCi0gICAgICAgICAgMC4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JBVElPLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgicmF0aW8iLCAiUmF0aW8iLAotICAgICAgICAgICJSYXRpbyB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIiwgMC4wLCBHX01BWEZMT0FULAotICAgICAgICAgIDEuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJEeW5hbWljIHJhbmdlIGNvbnRyb2xsZXIiLCAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiQ29tcHJlc3NvciBhbmQgRXhwYW5kZXIiLCAiU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPiIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQUxMT1dFRF9DQVBTKTsKLSAgZ3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcyAoR1NUX0FVRElPX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLAotICAgICAgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBHU1RfQVVESU9fRklMVEVSX0NMQVNTIChrbGFzcyktPnNldHVwID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXVkaW9fZHluYW1pY19zZXR1cCk7Ci0KLSAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnRyYW5zZm9ybV9pcCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2lwKTsKLSAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2R5bmFtaWNfaW5pdCAoR3N0QXVkaW9EeW5hbWljICogZmlsdGVyKQotewotICBmaWx0ZXItPnJhdGlvID0gMS4wOwotICBmaWx0ZXItPnRocmVzaG9sZCA9IDAuMDsKLSAgZmlsdGVyLT5jaGFyYWN0ZXJpc3RpY3MgPSBDSEFSQUNURVJJU1RJQ1NfSEFSRF9LTkVFOwotICBmaWx0ZXItPm1vZGUgPSBNT0RFX0NPTVBSRVNTT1I7Ci0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2UgKEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKSwgVFJVRSk7Ci0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGZpbHRlciksIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2R5bmFtaWNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvRHluYW1pYyAqZmlsdGVyID0gR1NUX0FVRElPX0RZTkFNSUMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NIQVJBQ1RFUklTVElDUzoKLSAgICAgIGZpbHRlci0+Y2hhcmFjdGVyaXN0aWNzID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgZ3N0X2F1ZGlvX2R5bmFtaWNfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKGZpbHRlciwKLSAgICAgICAgICBHU1RfQVVESU9fRklMVEVSX0lORk8gKGZpbHRlcikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBmaWx0ZXItPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBnc3RfYXVkaW9fZHluYW1pY19zZXRfcHJvY2Vzc19mdW5jdGlvbiAoZmlsdGVyLAotICAgICAgICAgIEdTVF9BVURJT19GSUxURVJfSU5GTyAoZmlsdGVyKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEhSRVNIT0xEOgotICAgICAgZmlsdGVyLT50aHJlc2hvbGQgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JBVElPOgotICAgICAgZmlsdGVyLT5yYXRpbyA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9EeW5hbWljICpmaWx0ZXIgPSBHU1RfQVVESU9fRFlOQU1JQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ0hBUkFDVEVSSVNUSUNTOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGZpbHRlci0+Y2hhcmFjdGVyaXN0aWNzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGZpbHRlci0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEhSRVNIT0xEOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBmaWx0ZXItPnRocmVzaG9sZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkFUSU86Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+cmF0aW8pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19keW5hbWljX3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIEdzdEF1ZGlvRHluYW1pYyAqZmlsdGVyID0gR1NUX0FVRElPX0RZTkFNSUMgKGJhc2UpOwotCi0gIGdzdF9hdWRpb19keW5hbWljX3NldF9wcm9jZXNzX2Z1bmN0aW9uIChmaWx0ZXIsIGluZm8pOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9oYXJkX2tuZWVfY29tcHJlc3Nvcl9pbnQgKEdzdEF1ZGlvRHluYW1pYyAqIGZpbHRlciwKLSAgICBnaW50MTYgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykKLXsKLSAgZ2xvbmcgdmFsOwotICBnbG9uZyB0aHJfcCA9IGZpbHRlci0+dGhyZXNob2xkICogR19NQVhJTlQxNjsKLSAgZ2xvbmcgdGhyX24gPSBmaWx0ZXItPnRocmVzaG9sZCAqIEdfTUlOSU5UMTY7Ci0KLSAgLyogTm90aGluZyB0byBkbyBmb3IgdXMgaWYgcmF0aW8gaXMgMS4wIG9yIGlmIHRoZSB0aHJlc2hvbGQKLSAgICogZXF1YWxzIDEuMC4gKi8KLSAgaWYgKGZpbHRlci0+dGhyZXNob2xkID09IDEuMCB8fCBmaWx0ZXItPnJhdGlvID09IDEuMCkKLSAgICByZXR1cm47Ci0KLSAgZm9yICg7IG51bV9zYW1wbGVzOyBudW1fc2FtcGxlcy0tKSB7Ci0gICAgdmFsID0gKmRhdGE7Ci0KLSAgICBpZiAodmFsID4gdGhyX3ApIHsKLSAgICAgIHZhbCA9IHRocl9wICsgKHZhbCAtIHRocl9wKSAqIGZpbHRlci0+cmF0aW87Ci0gICAgfSBlbHNlIGlmICh2YWwgPCB0aHJfbikgewotICAgICAgdmFsID0gdGhyX24gKyAodmFsIC0gdGhyX24pICogZmlsdGVyLT5yYXRpbzsKLSAgICB9Ci0gICAgKmRhdGErKyA9IChnaW50MTYpIENMQU1QICh2YWwsIEdfTUlOSU5UMTYsIEdfTUFYSU5UMTYpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faGFyZF9rbmVlX2NvbXByZXNzb3JfZmxvYXQgKEdzdEF1ZGlvRHluYW1pYyAqCi0gICAgZmlsdGVyLCBnZmxvYXQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykKLXsKLSAgZ2RvdWJsZSB2YWwsIHRocmVzaG9sZCA9IGZpbHRlci0+dGhyZXNob2xkOwotCi0gIC8qIE5vdGhpbmcgdG8gZG8gZm9yIHVzIGlmIHJhdGlvID09IDEuMC4KLSAgICogQXMgZmxvYXQgdmFsdWVzIGNhbiBiZSBhYm92ZSAxLjAgd2UgaGF2ZSB0byBkbyBzb21ldGhpbmcKLSAgICogaWYgdGhyZXNob2xkIGlzIGdyZWF0ZXIgdGhhbiAxLjAuICovCi0gIGlmIChmaWx0ZXItPnJhdGlvID09IDEuMCkKLSAgICByZXR1cm47Ci0KLSAgZm9yICg7IG51bV9zYW1wbGVzOyBudW1fc2FtcGxlcy0tKSB7Ci0gICAgdmFsID0gKmRhdGE7Ci0KLSAgICBpZiAodmFsID4gdGhyZXNob2xkKSB7Ci0gICAgICB2YWwgPSB0aHJlc2hvbGQgKyAodmFsIC0gdGhyZXNob2xkKSAqIGZpbHRlci0+cmF0aW87Ci0gICAgfSBlbHNlIGlmICh2YWwgPCAtdGhyZXNob2xkKSB7Ci0gICAgICB2YWwgPSAtdGhyZXNob2xkICsgKHZhbCArIHRocmVzaG9sZCkgKiBmaWx0ZXItPnJhdGlvOwotICAgIH0KLSAgICAqZGF0YSsrID0gKGdmbG9hdCkgdmFsOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2NvbXByZXNzb3JfaW50IChHc3RBdWRpb0R5bmFtaWMgKiBmaWx0ZXIsCi0gICAgZ2ludDE2ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpCi17Ci0gIGdsb25nIHZhbDsKLSAgZ2xvbmcgdGhyX3AgPSBmaWx0ZXItPnRocmVzaG9sZCAqIEdfTUFYSU5UMTY7Ci0gIGdsb25nIHRocl9uID0gZmlsdGVyLT50aHJlc2hvbGQgKiBHX01JTklOVDE2OwotICBnZG91YmxlIGFfcCwgYl9wLCBjX3A7Ci0gIGdkb3VibGUgYV9uLCBiX24sIGNfbjsKLQotICAvKiBOb3RoaW5nIHRvIGRvIGZvciB1cyBpZiByYXRpbyBpcyAxLjAgb3IgaWYgdGhlIHRocmVzaG9sZAotICAgKiBlcXVhbHMgMS4wLiAqLwotICBpZiAoZmlsdGVyLT50aHJlc2hvbGQgPT0gMS4wIHx8IGZpbHRlci0+cmF0aW8gPT0gMS4wKQotICAgIHJldHVybjsKLQotICAvKiBXZSBidWlsZCBhIDJuZCBkZWdyZWUgcG9seW5vbWlhbCBoZXJlIGZvcgotICAgKiB2YWx1ZXMgZ3JlYXRlciB0aGFuIHRocmVzaG9sZCBvciBzbWFsbCB0aGFuCi0gICAqIC10aHJlc2hvbGQgd2l0aDoKLSAgICogZih0KSA9IHQsIGYnKHQpID0gMSwgZicobSkgPSByCi0gICAqID0+Ci0gICAqIGEgPSAoMS1yKS8oMioodC1tKSkKLSAgICogYiA9IChyKnQgLSBtKS8odC1tKQotICAgKiBjID0gdCAqICgxIC0gYiAtIGEqdCkKLSAgICogZih4KSA9IGF4XjIgKyBieCArIGMKLSAgICovCi0KLSAgLyogc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIHRoaXMgd291bGQgb25seSBiZSB0aGUgY2FzZQotICAgKiBmb3IgdGhyZXNob2xkID09IDEuMCB3aGljaCB3ZSBjYXRjaCBhYm92ZSAqLwotICBnX2Fzc2VydCAodGhyX3AgLSBHX01BWElOVDE2ICE9IDApOwotICBnX2Fzc2VydCAodGhyX24gLSBHX01JTklOVCAhPSAwKTsKLQotICBhX3AgPSAoMSAtIGZpbHRlci0+cmF0aW8pIC8gKDIgKiAodGhyX3AgLSBHX01BWElOVDE2KSk7Ci0gIGJfcCA9IChmaWx0ZXItPnJhdGlvICogdGhyX3AgLSBHX01BWElOVDE2KSAvICh0aHJfcCAtIEdfTUFYSU5UMTYpOwotICBjX3AgPSB0aHJfcCAqICgxIC0gYl9wIC0gYV9wICogdGhyX3ApOwotICBhX24gPSAoMSAtIGZpbHRlci0+cmF0aW8pIC8gKDIgKiAodGhyX24gLSBHX01JTklOVDE2KSk7Ci0gIGJfbiA9IChmaWx0ZXItPnJhdGlvICogdGhyX24gLSBHX01JTklOVDE2KSAvICh0aHJfbiAtIEdfTUlOSU5UMTYpOwotICBjX24gPSB0aHJfbiAqICgxIC0gYl9uIC0gYV9uICogdGhyX24pOwotCi0gIGZvciAoOyBudW1fc2FtcGxlczsgbnVtX3NhbXBsZXMtLSkgewotICAgIHZhbCA9ICpkYXRhOwotCi0gICAgaWYgKHZhbCA+IHRocl9wKSB7Ci0gICAgICB2YWwgPSBhX3AgKiB2YWwgKiB2YWwgKyBiX3AgKiB2YWwgKyBjX3A7Ci0gICAgfSBlbHNlIGlmICh2YWwgPCB0aHJfbikgewotICAgICAgdmFsID0gYV9uICogdmFsICogdmFsICsgYl9uICogdmFsICsgY19uOwotICAgIH0KLSAgICAqZGF0YSsrID0gKGdpbnQxNikgQ0xBTVAgKHZhbCwgR19NSU5JTlQxNiwgR19NQVhJTlQxNik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9zb2Z0X2tuZWVfY29tcHJlc3Nvcl9mbG9hdCAoR3N0QXVkaW9EeW5hbWljICoKLSAgICBmaWx0ZXIsIGdmbG9hdCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKQotewotICBnZG91YmxlIHZhbDsKLSAgZ2RvdWJsZSB0aHJlc2hvbGQgPSBmaWx0ZXItPnRocmVzaG9sZDsKLSAgZ2RvdWJsZSBhX3AsIGJfcCwgY19wOwotICBnZG91YmxlIGFfbiwgYl9uLCBjX247Ci0KLSAgLyogTm90aGluZyB0byBkbyBmb3IgdXMgaWYgcmF0aW8gPT0gMS4wLgotICAgKiBBcyBmbG9hdCB2YWx1ZXMgY2FuIGJlIGFib3ZlIDEuMCB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZwotICAgKiBpZiB0aHJlc2hvbGQgaXMgZ3JlYXRlciB0aGFuIDEuMC4gKi8KLSAgaWYgKGZpbHRlci0+cmF0aW8gPT0gMS4wKQotICAgIHJldHVybjsKLQotICAvKiBXZSBidWlsZCBhIDJuZCBkZWdyZWUgcG9seW5vbWlhbCBoZXJlIGZvcgotICAgKiB2YWx1ZXMgZ3JlYXRlciB0aGFuIHRocmVzaG9sZCBvciBzbWFsbCB0aGFuCi0gICAqIC10aHJlc2hvbGQgd2l0aDoKLSAgICogZih0KSA9IHQsIGYnKHQpID0gMSwgZicobSkgPSByCi0gICAqID0+Ci0gICAqIGEgPSAoMS1yKS8oMioodC1tKSkKLSAgICogYiA9IChyKnQgLSBtKS8odC1tKQotICAgKiBjID0gdCAqICgxIC0gYiAtIGEqdCkKLSAgICogZih4KSA9IGF4XjIgKyBieCArIGMKLSAgICovCi0KLSAgLyogRklYTUU6IElmIHRyZXNob2xkIGlzIHRoZSBzYW1lIGFzIHRoZSBtYXhpbXVtCi0gICAqIHdlIG5lZWQgdG8gcmFpc2UgaXQgYSBiaXQgdG8gcHJldmVudAotICAgKiBkaXZpc2lvbiBieSB6ZXJvLiAqLwotICBpZiAodGhyZXNob2xkID09IDEuMCkKLSAgICB0aHJlc2hvbGQgPSAxLjAgKyAwLjAwMDAxOwotCi0gIGFfcCA9ICgxLjAgLSBmaWx0ZXItPnJhdGlvKSAvICgyLjAgKiAodGhyZXNob2xkIC0gMS4wKSk7Ci0gIGJfcCA9IChmaWx0ZXItPnJhdGlvICogdGhyZXNob2xkIC0gMS4wKSAvICh0aHJlc2hvbGQgLSAxLjApOwotICBjX3AgPSB0aHJlc2hvbGQgKiAoMS4wIC0gYl9wIC0gYV9wICogdGhyZXNob2xkKTsKLSAgYV9uID0gKDEuMCAtIGZpbHRlci0+cmF0aW8pIC8gKDIuMCAqICgtdGhyZXNob2xkICsgMS4wKSk7Ci0gIGJfbiA9ICgtZmlsdGVyLT5yYXRpbyAqIHRocmVzaG9sZCArIDEuMCkgLyAoLXRocmVzaG9sZCArIDEuMCk7Ci0gIGNfbiA9IC10aHJlc2hvbGQgKiAoMS4wIC0gYl9uICsgYV9uICogdGhyZXNob2xkKTsKLQotICBmb3IgKDsgbnVtX3NhbXBsZXM7IG51bV9zYW1wbGVzLS0pIHsKLSAgICB2YWwgPSAqZGF0YTsKLQotICAgIGlmICh2YWwgPiAxLjApIHsKLSAgICAgIHZhbCA9IDEuMCArICh2YWwgLSAxLjApICogZmlsdGVyLT5yYXRpbzsKLSAgICB9IGVsc2UgaWYgKHZhbCA+IHRocmVzaG9sZCkgewotICAgICAgdmFsID0gYV9wICogdmFsICogdmFsICsgYl9wICogdmFsICsgY19wOwotICAgIH0gZWxzZSBpZiAodmFsIDwgLTEuMCkgewotICAgICAgdmFsID0gLTEuMCArICh2YWwgKyAxLjApICogZmlsdGVyLT5yYXRpbzsKLSAgICB9IGVsc2UgaWYgKHZhbCA8IC10aHJlc2hvbGQpIHsKLSAgICAgIHZhbCA9IGFfbiAqIHZhbCAqIHZhbCArIGJfbiAqIHZhbCArIGNfbjsKLSAgICB9Ci0gICAgKmRhdGErKyA9IChnZmxvYXQpIHZhbDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2hhcmRfa25lZV9leHBhbmRlcl9pbnQgKEdzdEF1ZGlvRHluYW1pYyAqIGZpbHRlciwKLSAgICBnaW50MTYgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykKLXsKLSAgZ2xvbmcgdmFsOwotICBnbG9uZyB0aHJfcCA9IGZpbHRlci0+dGhyZXNob2xkICogR19NQVhJTlQxNjsKLSAgZ2xvbmcgdGhyX24gPSBmaWx0ZXItPnRocmVzaG9sZCAqIEdfTUlOSU5UMTY7Ci0gIGdkb3VibGUgemVyb19wLCB6ZXJvX247Ci0KLSAgLyogTm90aGluZyB0byBkbyBmb3IgdXMgaGVyZSBpZiB0aHJlc2hvbGQgZXF1YWxzIDAuMAotICAgKiBvciByYXRpbyBlcXVhbHMgMS4wICovCi0gIGlmIChmaWx0ZXItPnRocmVzaG9sZCA9PSAwLjAgfHwgZmlsdGVyLT5yYXRpbyA9PSAxLjApCi0gICAgcmV0dXJuOwotCi0gIC8qIHplcm8gY3Jvc3Npbmcgb2Ygb3VyIGZ1bmN0aW9uICovCi0gIGlmIChmaWx0ZXItPnJhdGlvICE9IDAuMCkgewotICAgIHplcm9fcCA9IHRocl9wIC0gdGhyX3AgLyBmaWx0ZXItPnJhdGlvOwotICAgIHplcm9fbiA9IHRocl9uIC0gdGhyX24gLyBmaWx0ZXItPnJhdGlvOwotICB9IGVsc2UgewotICAgIHplcm9fcCA9IHplcm9fbiA9IDAuMDsKLSAgfQotCi0gIGlmICh6ZXJvX3AgPCAwLjApCi0gICAgemVyb19wID0gMC4wOwotICBpZiAoemVyb19uID4gMC4wKQotICAgIHplcm9fbiA9IDAuMDsKLQotICBmb3IgKDsgbnVtX3NhbXBsZXM7IG51bV9zYW1wbGVzLS0pIHsKLSAgICB2YWwgPSAqZGF0YTsKLQotICAgIGlmICh2YWwgPCB0aHJfcCAmJiB2YWwgPiB6ZXJvX3ApIHsKLSAgICAgIHZhbCA9IGZpbHRlci0+cmF0aW8gKiB2YWwgKyB0aHJfcCAqICgxIC0gZmlsdGVyLT5yYXRpbyk7Ci0gICAgfSBlbHNlIGlmICgodmFsIDw9IHplcm9fcCAmJiB2YWwgPiAwKSB8fCAodmFsID49IHplcm9fbiAmJiB2YWwgPCAwKSkgewotICAgICAgdmFsID0gMDsKLSAgICB9IGVsc2UgaWYgKHZhbCA+IHRocl9uICYmIHZhbCA8IHplcm9fbikgewotICAgICAgdmFsID0gZmlsdGVyLT5yYXRpbyAqIHZhbCArIHRocl9uICogKDEgLSBmaWx0ZXItPnJhdGlvKTsKLSAgICB9Ci0gICAgKmRhdGErKyA9IChnaW50MTYpIENMQU1QICh2YWwsIEdfTUlOSU5UMTYsIEdfTUFYSU5UMTYpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1faGFyZF9rbmVlX2V4cGFuZGVyX2Zsb2F0IChHc3RBdWRpb0R5bmFtaWMgKiBmaWx0ZXIsCi0gICAgZ2Zsb2F0ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpCi17Ci0gIGdkb3VibGUgdmFsLCB0aHJlc2hvbGQgPSBmaWx0ZXItPnRocmVzaG9sZCwgemVybzsKLQotICAvKiBOb3RoaW5nIHRvIGRvIGZvciB1cyBoZXJlIGlmIHRocmVzaG9sZCBlcXVhbHMgMC4wCi0gICAqIG9yIHJhdGlvIGVxdWFscyAxLjAgKi8KLSAgaWYgKGZpbHRlci0+dGhyZXNob2xkID09IDAuMCB8fCBmaWx0ZXItPnJhdGlvID09IDEuMCkKLSAgICByZXR1cm47Ci0KLSAgLyogemVybyBjcm9zc2luZyBvZiBvdXIgZnVuY3Rpb24gKi8KLSAgaWYgKGZpbHRlci0+cmF0aW8gIT0gMC4wKQotICAgIHplcm8gPSB0aHJlc2hvbGQgLSB0aHJlc2hvbGQgLyBmaWx0ZXItPnJhdGlvOwotICBlbHNlCi0gICAgemVybyA9IDAuMDsKLQotICBpZiAoemVybyA8IDAuMCkKLSAgICB6ZXJvID0gMC4wOwotCi0gIGZvciAoOyBudW1fc2FtcGxlczsgbnVtX3NhbXBsZXMtLSkgewotICAgIHZhbCA9ICpkYXRhOwotCi0gICAgaWYgKHZhbCA8IHRocmVzaG9sZCAmJiB2YWwgPiB6ZXJvKSB7Ci0gICAgICB2YWwgPSBmaWx0ZXItPnJhdGlvICogdmFsICsgdGhyZXNob2xkICogKDEuMCAtIGZpbHRlci0+cmF0aW8pOwotICAgIH0gZWxzZSBpZiAoKHZhbCA8PSB6ZXJvICYmIHZhbCA+IDAuMCkgfHwgKHZhbCA+PSAtemVybyAmJiB2YWwgPCAwLjApKSB7Ci0gICAgICB2YWwgPSAwLjA7Ci0gICAgfSBlbHNlIGlmICh2YWwgPiAtdGhyZXNob2xkICYmIHZhbCA8IC16ZXJvKSB7Ci0gICAgICB2YWwgPSBmaWx0ZXItPnJhdGlvICogdmFsIC0gdGhyZXNob2xkICogKDEuMCAtIGZpbHRlci0+cmF0aW8pOwotICAgIH0KLSAgICAqZGF0YSsrID0gKGdmbG9hdCkgdmFsOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZHluYW1pY190cmFuc2Zvcm1fc29mdF9rbmVlX2V4cGFuZGVyX2ludCAoR3N0QXVkaW9EeW5hbWljICogZmlsdGVyLAotICAgIGdpbnQxNiAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKQotewotICBnbG9uZyB2YWw7Ci0gIGdsb25nIHRocl9wID0gZmlsdGVyLT50aHJlc2hvbGQgKiBHX01BWElOVDE2OwotICBnbG9uZyB0aHJfbiA9IGZpbHRlci0+dGhyZXNob2xkICogR19NSU5JTlQxNjsKLSAgZ2RvdWJsZSB6ZXJvX3AsIHplcm9fbjsKLSAgZ2RvdWJsZSBhX3AsIGJfcCwgY19wOwotICBnZG91YmxlIGFfbiwgYl9uLCBjX247Ci0gIGdkb3VibGUgcjI7Ci0KLSAgLyogTm90aGluZyB0byBkbyBmb3IgdXMgaGVyZSBpZiB0aHJlc2hvbGQgZXF1YWxzIDAuMAotICAgKiBvciByYXRpbyBlcXVhbHMgMS4wICovCi0gIGlmIChmaWx0ZXItPnRocmVzaG9sZCA9PSAwLjAgfHwgZmlsdGVyLT5yYXRpbyA9PSAxLjApCi0gICAgcmV0dXJuOwotCi0gIC8qIHplcm8gY3Jvc3Npbmcgb2Ygb3VyIGZ1bmN0aW9uICovCi0gIHplcm9fcCA9ICh0aHJfcCAqIChmaWx0ZXItPnJhdGlvIC0gMS4wKSkgLyAoMS4wICsgZmlsdGVyLT5yYXRpbyk7Ci0gIHplcm9fbiA9ICh0aHJfbiAqIChmaWx0ZXItPnJhdGlvIC0gMS4wKSkgLyAoMS4wICsgZmlsdGVyLT5yYXRpbyk7Ci0KLSAgaWYgKHplcm9fcCA8IDAuMCkKLSAgICB6ZXJvX3AgPSAwLjA7Ci0gIGlmICh6ZXJvX24gPiAwLjApCi0gICAgemVyb19uID0gMC4wOwotCi0gIC8qIHNob3VsZG4ndCBoYXBwZW4gYXMgdGhpcyB3b3VsZCBvbmx5IGhhcHBlbgotICAgKiB3aXRoIHRocmVzaG9sZCA9PSAwLjAgKi8KLSAgZ19hc3NlcnQgKHRocl9wICE9IDApOwotICBnX2Fzc2VydCAodGhyX24gIT0gMCk7Ci0KLSAgLyogV2UgYnVpbGQgYSAybiBkZWdyZWUgcG9seW5vbWlhbCBoZXJlIGZvciB2YWx1ZXMgYmV0d2VlbgotICAgKiAwIGFuZCB0aHJlc2hvbGQgb3IgMCBhbmQgLXRocmVzaG9sZCB3aXRoOgotICAgKiBmKHQpID0gdCwgZicodCkgPSAxLCBmKHopID0gMCwgZicoeikgPSByCi0gICAqIHogYmV0d2VlbiAwIGFuZCB0Ci0gICAqID0+Ci0gICAqIGEgPSAoMSAtIHJeMikgLyAoNCAqIHQpCi0gICAqIGIgPSAoMSArIHJeMikgLyAyCi0gICAqIGMgPSB0ICogKDEuMCAtIGIgLSBhKnQpCi0gICAqIGYoeCkgPSBheF4yICsgYnggKyBjICovCi0gIHIyID0gZmlsdGVyLT5yYXRpbyAqIGZpbHRlci0+cmF0aW87Ci0gIGFfcCA9ICgxLjAgLSByMikgLyAoNC4wICogdGhyX3ApOwotICBiX3AgPSAoMS4wICsgcjIpIC8gMi4wOwotICBjX3AgPSB0aHJfcCAqICgxLjAgLSBiX3AgLSBhX3AgKiB0aHJfcCk7Ci0gIGFfbiA9ICgxLjAgLSByMikgLyAoNC4wICogdGhyX24pOwotICBiX24gPSAoMS4wICsgcjIpIC8gMi4wOwotICBjX24gPSB0aHJfbiAqICgxLjAgLSBiX24gLSBhX24gKiB0aHJfbik7Ci0KLSAgZm9yICg7IG51bV9zYW1wbGVzOyBudW1fc2FtcGxlcy0tKSB7Ci0gICAgdmFsID0gKmRhdGE7Ci0KLSAgICBpZiAodmFsIDwgdGhyX3AgJiYgdmFsID4gemVyb19wKSB7Ci0gICAgICB2YWwgPSBhX3AgKiB2YWwgKiB2YWwgKyBiX3AgKiB2YWwgKyBjX3A7Ci0gICAgfSBlbHNlIGlmICgodmFsIDw9IHplcm9fcCAmJiB2YWwgPiAwKSB8fCAodmFsID49IHplcm9fbiAmJiB2YWwgPCAwKSkgewotICAgICAgdmFsID0gMDsKLSAgICB9IGVsc2UgaWYgKHZhbCA+IHRocl9uICYmIHZhbCA8IHplcm9fbikgewotICAgICAgdmFsID0gYV9uICogdmFsICogdmFsICsgYl9uICogdmFsICsgY19uOwotICAgIH0KLSAgICAqZGF0YSsrID0gKGdpbnQxNikgQ0xBTVAgKHZhbCwgR19NSU5JTlQxNiwgR19NQVhJTlQxNik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19keW5hbWljX3RyYW5zZm9ybV9zb2Z0X2tuZWVfZXhwYW5kZXJfZmxvYXQgKEdzdEF1ZGlvRHluYW1pYyAqIGZpbHRlciwKLSAgICBnZmxvYXQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykKLXsKLSAgZ2RvdWJsZSB2YWw7Ci0gIGdkb3VibGUgdGhyZXNob2xkID0gZmlsdGVyLT50aHJlc2hvbGQ7Ci0gIGdkb3VibGUgemVybzsKLSAgZ2RvdWJsZSBhX3AsIGJfcCwgY19wOwotICBnZG91YmxlIGFfbiwgYl9uLCBjX247Ci0gIGdkb3VibGUgcjI7Ci0KLSAgLyogTm90aGluZyB0byBkbyBmb3IgdXMgaGVyZSBpZiB0aHJlc2hvbGQgZXF1YWxzIDAuMAotICAgKiBvciByYXRpbyBlcXVhbHMgMS4wICovCi0gIGlmIChmaWx0ZXItPnRocmVzaG9sZCA9PSAwLjAgfHwgZmlsdGVyLT5yYXRpbyA9PSAxLjApCi0gICAgcmV0dXJuOwotCi0gIC8qIHplcm8gY3Jvc3Npbmcgb2Ygb3VyIGZ1bmN0aW9uICovCi0gIHplcm8gPSAodGhyZXNob2xkICogKGZpbHRlci0+cmF0aW8gLSAxLjApKSAvICgxLjAgKyBmaWx0ZXItPnJhdGlvKTsKLQotICBpZiAoemVybyA8IDAuMCkKLSAgICB6ZXJvID0gMC4wOwotCi0gIC8qIHNob3VsZG4ndCBoYXBwZW4gYXMgdGhpcyBvbmx5IGhhcHBlbnMgd2l0aAotICAgKiB0aHJlc2hvbGQgPT0gMC4wICovCi0gIGdfYXNzZXJ0ICh0aHJlc2hvbGQgIT0gMC4wKTsKLQotICAvKiBXZSBidWlsZCBhIDJuIGRlZ3JlZSBwb2x5bm9taWFsIGhlcmUgZm9yIHZhbHVlcyBiZXR3ZWVuCi0gICAqIDAgYW5kIHRocmVzaG9sZCBvciAwIGFuZCAtdGhyZXNob2xkIHdpdGg6Ci0gICAqIGYodCkgPSB0LCBmJyh0KSA9IDEsIGYoeikgPSAwLCBmJyh6KSA9IHIKLSAgICogeiBiZXR3ZWVuIDAgYW5kIHQKLSAgICogPT4KLSAgICogYSA9ICgxIC0gcl4yKSAvICg0ICogdCkKLSAgICogYiA9ICgxICsgcl4yKSAvIDIKLSAgICogYyA9IHQgKiAoMS4wIC0gYiAtIGEqdCkKLSAgICogZih4KSA9IGF4XjIgKyBieCArIGMgKi8KLSAgcjIgPSBmaWx0ZXItPnJhdGlvICogZmlsdGVyLT5yYXRpbzsKLSAgYV9wID0gKDEuMCAtIHIyKSAvICg0LjAgKiB0aHJlc2hvbGQpOwotICBiX3AgPSAoMS4wICsgcjIpIC8gMi4wOwotICBjX3AgPSB0aHJlc2hvbGQgKiAoMS4wIC0gYl9wIC0gYV9wICogdGhyZXNob2xkKTsKLSAgYV9uID0gKDEuMCAtIHIyKSAvICgtNC4wICogdGhyZXNob2xkKTsKLSAgYl9uID0gKDEuMCArIHIyKSAvIDIuMDsKLSAgY19uID0gLXRocmVzaG9sZCAqICgxLjAgLSBiX24gKyBhX24gKiB0aHJlc2hvbGQpOwotCi0gIGZvciAoOyBudW1fc2FtcGxlczsgbnVtX3NhbXBsZXMtLSkgewotICAgIHZhbCA9ICpkYXRhOwotCi0gICAgaWYgKHZhbCA8IHRocmVzaG9sZCAmJiB2YWwgPiB6ZXJvKSB7Ci0gICAgICB2YWwgPSBhX3AgKiB2YWwgKiB2YWwgKyBiX3AgKiB2YWwgKyBjX3A7Ci0gICAgfSBlbHNlIGlmICgodmFsIDw9IHplcm8gJiYgdmFsID4gMC4wKSB8fCAodmFsID49IC16ZXJvICYmIHZhbCA8IDAuMCkpIHsKLSAgICAgIHZhbCA9IDAuMDsKLSAgICB9IGVsc2UgaWYgKHZhbCA+IC10aHJlc2hvbGQgJiYgdmFsIDwgLXplcm8pIHsKLSAgICAgIHZhbCA9IGFfbiAqIHZhbCAqIHZhbCArIGJfbiAqIHZhbCArIGNfbjsKLSAgICB9Ci0gICAgKmRhdGErKyA9IChnZmxvYXQpIHZhbDsKLSAgfQotfQotCi0vKiBHc3RCYXNlVHJhbnNmb3JtIHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F1ZGlvX2R5bmFtaWNfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RBdWRpb0R5bmFtaWMgKmZpbHRlciA9IEdTVF9BVURJT19EWU5BTUlDIChiYXNlKTsKLSAgZ3VpbnQgbnVtX3NhbXBsZXM7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKLSAgc3RyZWFtX3RpbWUgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZiYXNlLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAic3luYyB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbV90aW1lKSkKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChmaWx0ZXIpLCBzdHJlYW1fdGltZSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0dBUCkpKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gIG51bV9zYW1wbGVzID0gbWFwLnNpemUgLyBHU1RfQVVESU9fRklMVEVSX0JQUyAoZmlsdGVyKTsKLQotICBmaWx0ZXItPnByb2Nlc3MgKGZpbHRlciwgbWFwLmRhdGEsIG51bV9zYW1wbGVzKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvZHluYW1pYy5oIGIvZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMWU0ZmIuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9keW5hbWljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FVRElPX0RZTkFNSUNfSF9fCi0jZGVmaW5lIF9fR1NUX0FVRElPX0RZTkFNSUNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fRFlOQU1JQyAgICAgICAgICAgIChnc3RfYXVkaW9fZHluYW1pY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fRFlOQU1JQyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FVRElPX0RZTkFNSUMsR3N0QXVkaW9EeW5hbWljKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0RZTkFNSUMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BVURJT19EWU5BTUlDKSkKLSNkZWZpbmUgR1NUX0FVRElPX0RZTkFNSUNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19EWU5BTUlDLEdzdEF1ZGlvRHluYW1pY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0RZTkFNSUNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19EWU5BTUlDKSkKLSNkZWZpbmUgR1NUX0FVRElPX0RZTkFNSUNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopICxHU1RfVFlQRV9BVURJT19EWU5BTUlDLEdzdEF1ZGlvRHluYW1pY0NsYXNzKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0R5bmFtaWMgR3N0QXVkaW9EeW5hbWljOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRHluYW1pY0NsYXNzIEdzdEF1ZGlvRHluYW1pY0NsYXNzOwotCi10eXBlZGVmIHZvaWQgKCpHc3RBdWRpb0R5bmFtaWNQcm9jZXNzRnVuYykgKEdzdEF1ZGlvRHluYW1pYyAqLCBndWludDggKiwgZ3VpbnQpOwotCi1zdHJ1Y3QgX0dzdEF1ZGlvRHluYW1pYwotewotICBHc3RBdWRpb0ZpbHRlciBhdWRpb2ZpbHRlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHc3RBdWRpb0R5bmFtaWNQcm9jZXNzRnVuYyBwcm9jZXNzOwotICBnaW50IGNoYXJhY3RlcmlzdGljczsKLSAgZ2ludCBtb2RlOwotICBnZmxvYXQgdGhyZXNob2xkOwotICBnZmxvYXQgcmF0aW87Ci19OwotCi1zdHJ1Y3QgX0dzdEF1ZGlvRHluYW1pY0NsYXNzCi17Ci0gIEdzdEF1ZGlvRmlsdGVyQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X2F1ZGlvX2R5bmFtaWNfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVVESU9fRFlOQU1JQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvZWNoby5jIGIvZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OTk5NGIuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTkgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdWRpb2VjaG8KLSAqCi0gKiBhdWRpb2VjaG8gYWRkcyBhbiBlY2hvIG9yIChzaW1wbGUpIHJldmVyYiBlZmZlY3QgdG8gYW4gYXVkaW8gc3RyZWFtLiBUaGUgZWNobwotICogZGVsYXksIGludGVuc2l0eSBhbmQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmVlZGJhY2sgY2FuIGJlIGNvbmZpZ3VyZWQuCi0gKgotICogRm9yIGdldHRpbmcgYW4gZWNobyBlZmZlY3QgeW91IGhhdmUgdG8gc2V0IHRoZSBkZWxheSB0byBhIGxhcmdlciB2YWx1ZSwKLSAqIGZvciBleGFtcGxlIDIwMG1zIGFuZCBtb3JlLiBFdmVyeXRoaW5nIGJlbG93IHdpbGwgcmVzdWx0IGluIGEgc2ltcGxlCi0gKiByZXZlcmIgZWZmZWN0LCB3aGljaCByZXN1bHRzIGluIGEgc2xpZ2h0bHkgbWV0YWxsaWMgc291bmQuCi0gKgotICogVXNlIHRoZSBtYXgtZGVsYXkgcHJvcGVydHkgdG8gc2V0IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkZWxheSB0aGF0Ci0gKiB3aWxsIGJlIHVzZWQuIFRoaXMgY2FuIG9ubHkgYmUgc2V0IGJlZm9yZSBnb2luZyB0byB0aGUgUEFVU0VEIG9yIFBMQVlJTkcKLSAqIHN0YXRlIGFuZCB3aWxsIGJlIHNldCB0byB0aGUgY3VycmVudCBkZWxheSBieSBkZWZhdWx0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBhdXRvYXVkaW9zcmMgISBhdWRpb2NvbnZlcnQgISBhdWRpb2VjaG8gZGVsYXk9NTAwMDAwMDAwIGludGVuc2l0eT0wLjYgZmVlZGJhY2s9MC40ICEgYXVkaW9jb252ZXJ0ICEgYXV0b2F1ZGlvc2luawotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj0ibWVsbzEub2dnIiAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCAhIGF1ZGlvZWNobyBkZWxheT01MDAwMDAwMCBpbnRlbnNpdHk9MC42IGZlZWRiYWNrPTAuNCAhIGF1ZGlvY29udmVydCAhIGF1dG9hdWRpb3NpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2VjaG8uaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2F1ZGlvX2VjaG9fZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0RFTEFZLAotICBQUk9QX01BWF9ERUxBWSwKLSAgUFJPUF9JTlRFTlNJVFksCi0gIFBST1BfRkVFREJBQ0sKLX07Ci0KLSNkZWZpbmUgQUxMT1dFRF9DQVBTIFwKLSAgICAiYXVkaW8veC1yYXcsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBmb3JtYXQ9KHN0cmluZykgeyJHU1RfQVVESU9fTkUoRjMyKSIsIkdTVF9BVURJT19ORShGNjQpIn0sICIgXAotICAgICIgcmF0ZT0oaW50KVsxLE1BWF0sIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWxzPShpbnQpWzEsTUFYXSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBsYXlvdXQ9KHN0cmluZykgaW50ZXJsZWF2ZWQiCi0KLSNkZWZpbmUgZ3N0X2F1ZGlvX2VjaG9fcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXVkaW9FY2hvLCBnc3RfYXVkaW9fZWNobywgR1NUX1RZUEVfQVVESU9fRklMVEVSKTsKLQotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2VjaG9fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2VjaG9fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2VjaG9fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1ZGlvX2VjaG9fc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogc2VsZiwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZWNob19zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYXVkaW9fZWNob190cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19lY2hvX3RyYW5zZm9ybV9mbG9hdCAoR3N0QXVkaW9FY2hvICogc2VsZiwKLSAgICBnZmxvYXQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fZWNob190cmFuc2Zvcm1fZG91YmxlIChHc3RBdWRpb0VjaG8gKiBzZWxmLAotICAgIGdkb3VibGUgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcyk7Ci0KLS8qIEdPYmplY3Qgdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19lY2hvX2NsYXNzX2luaXQgKEdzdEF1ZGlvRWNob0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmFzZXRyYW5zZm9ybV9jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIEdzdEF1ZGlvRmlsdGVyQ2xhc3MgKmF1ZGlvc2VsZl9jbGFzcyA9IChHc3RBdWRpb0ZpbHRlckNsYXNzICopIGtsYXNzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYXVkaW9fZWNob19kZWJ1ZywgImF1ZGlvZWNobyIsIDAsCi0gICAgICAiYXVkaW9lY2hvIGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fZWNob19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19lY2hvX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYXVkaW9fZWNob19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFTEFZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImRlbGF5IiwgIkRlbGF5IiwKLSAgICAgICAgICAiRGVsYXkgb2YgdGhlIGVjaG8gaW4gbmFub3NlY29uZHMiLCAxLCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICAxLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MKLSAgICAgICAgICB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9ERUxBWSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtZGVsYXkiLCAiTWF4aW11bSBEZWxheSIsCi0gICAgICAgICAgIk1heGltdW0gZGVsYXkgb2YgdGhlIGVjaG8gaW4gbmFub3NlY29uZHMiCi0gICAgICAgICAgIiAoY2FuJ3QgYmUgY2hhbmdlZCBpbiBQTEFZSU5HIG9yIFBBVVNFRCBzdGF0ZSkiLAotICAgICAgICAgIDEsIEdfTUFYVUlOVDY0LCAxLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8Ci0gICAgICAgICAgR1NUX1BBUkFNX01VVEFCTEVfUkVBRFkpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOVEVOU0lUWSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImludGVuc2l0eSIsICJJbnRlbnNpdHkiLAotICAgICAgICAgICJJbnRlbnNpdHkgb2YgdGhlIGVjaG8iLCAwLjAsIDEuMCwKLSAgICAgICAgICAwLjAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUwotICAgICAgICAgIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkVFREJBQ0ssCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJmZWVkYmFjayIsICJGZWVkYmFjayIsCi0gICAgICAgICAgIkFtb3VudCBvZiBmZWVkYmFjayIsIDAuMCwgMS4wLAotICAgICAgICAgIDAuMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTCi0gICAgICAgICAgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkF1ZGlvIGVjaG8iLAotICAgICAgIkZpbHRlci9FZmZlY3QvQXVkaW8iLAotICAgICAgIkFkZHMgYW4gZWNobyBvciByZXZlcmIgZWZmZWN0IHRvIGFuIGF1ZGlvIHN0cmVhbSIsCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBTExPV0VEX0NBUFMpOwotICBnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzIChHU1RfQVVESU9fRklMVEVSX0NMQVNTIChrbGFzcyksCi0gICAgICBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGF1ZGlvc2VsZl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2VjaG9fc2V0dXApOwotICBiYXNldHJhbnNmb3JtX2NsYXNzLT50cmFuc2Zvcm1faXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19lY2hvX3RyYW5zZm9ybV9pcCk7Ci0gIGJhc2V0cmFuc2Zvcm1fY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2VjaG9fc3RvcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZWNob19pbml0IChHc3RBdWRpb0VjaG8gKiBzZWxmKQotewotICBzZWxmLT5kZWxheSA9IDE7Ci0gIHNlbGYtPm1heF9kZWxheSA9IDE7Ci0gIHNlbGYtPmludGVuc2l0eSA9IDAuMDsKLSAgc2VsZi0+ZmVlZGJhY2sgPSAwLjA7Ci0KLSAgZ19tdXRleF9pbml0ICgmc2VsZi0+bG9jayk7Ci0KLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoR1NUX0JBU0VfVFJBTlNGT1JNIChzZWxmKSwgVFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZWNob19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QXVkaW9FY2hvICpzZWxmID0gR1NUX0FVRElPX0VDSE8gKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChzZWxmLT5idWZmZXIpOwotICBzZWxmLT5idWZmZXIgPSBOVUxMOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZzZWxmLT5sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZWNob19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9FY2hvICpzZWxmID0gR1NUX0FVRElPX0VDSE8gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFTEFZOnsKLSAgICAgIGd1aW50NjQgbWF4X2RlbGF5LCBkZWxheTsKLSAgICAgIGd1aW50IHJhdGU7Ci0KLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZGVsYXkgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIG1heF9kZWxheSA9IHNlbGYtPm1heF9kZWxheTsKLQotICAgICAgaWYgKGRlbGF5ID4gbWF4X2RlbGF5ICYmIEdTVF9TVEFURSAoc2VsZikgPiBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAiTmV3IGRlbGF5ICglIiBHU1RfVElNRV9GT1JNQVQgIikgIgotICAgICAgICAgICAgImlzIGxhcmdlciB0aGFuIG1heGltdW0gZGVsYXkgKCUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChkZWxheSksIEdTVF9USU1FX0FSR1MgKG1heF9kZWxheSkpOwotICAgICAgICBzZWxmLT5kZWxheSA9IG1heF9kZWxheTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlbGYtPmRlbGF5ID0gZGVsYXk7Ci0gICAgICAgIHNlbGYtPm1heF9kZWxheSA9IE1BWCAoZGVsYXksIG1heF9kZWxheSk7Ci0gICAgICAgIGlmIChkZWxheSA+IG1heF9kZWxheSkgewotICAgICAgICAgIGdfZnJlZSAoc2VsZi0+YnVmZmVyKTsKLSAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChzZWxmKTsKLSAgICAgIGlmIChyYXRlID4gMCkKLSAgICAgICAgc2VsZi0+ZGVsYXlfZnJhbWVzID0KLSAgICAgICAgICAgIE1BWCAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzZWxmLT5kZWxheSwgcmF0ZSwgR1NUX1NFQ09ORCksIDEpOwotCi0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9NQVhfREVMQVk6ewotICAgICAgZ3VpbnQ2NCBtYXhfZGVsYXk7Ci0KLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgbWF4X2RlbGF5ID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChHU1RfU1RBVEUgKHNlbGYpID4gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJDYW4ndCBjaGFuZ2UgbWF4aW11bSBkZWxheSBpbiIKLSAgICAgICAgICAgICIgUExBWUlORyBvciBQQVVTRUQgc3RhdGUiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlbGYtPm1heF9kZWxheSA9IG1heF9kZWxheTsKLSAgICAgICAgZ19mcmVlIChzZWxmLT5idWZmZXIpOwotICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwotICAgICAgfQotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSU5URU5TSVRZOnsKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgc2VsZi0+aW50ZW5zaXR5ID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0ZFRURCQUNLOnsKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgc2VsZi0+ZmVlZGJhY2sgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZWNob19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9FY2hvICpzZWxmID0gR1NUX0FVRElPX0VDSE8gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFTEFZOgotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzZWxmLT5kZWxheSk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9ERUxBWToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgc2VsZi0+bWF4X2RlbGF5KTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URU5TSVRZOgotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIHNlbGYtPmludGVuc2l0eSk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZFRURCQUNLOgotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIHNlbGYtPmZlZWRiYWNrKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qIEdzdEF1ZGlvRmlsdGVyIHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F1ZGlvX2VjaG9fc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0QXVkaW9FY2hvICpzZWxmID0gR1NUX0FVRElPX0VDSE8gKGJhc2UpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHN3aXRjaCAoR1NUX0FVRElPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzI6Ci0gICAgICBzZWxmLT5wcm9jZXNzID0gKEdzdEF1ZGlvRWNob1Byb2Nlc3NGdW5jKQotICAgICAgICAgIGdzdF9hdWRpb19lY2hvX3RyYW5zZm9ybV9mbG9hdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GNjQ6Ci0gICAgICBzZWxmLT5wcm9jZXNzID0gKEdzdEF1ZGlvRWNob1Byb2Nlc3NGdW5jKQotICAgICAgICAgIGdzdF9hdWRpb19lY2hvX3RyYW5zZm9ybV9kb3VibGU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdfZnJlZSAoc2VsZi0+YnVmZmVyKTsKLSAgc2VsZi0+YnVmZmVyID0gTlVMTDsKLSAgc2VsZi0+YnVmZmVyX3BvcyA9IDA7Ci0gIHNlbGYtPmJ1ZmZlcl9zaXplID0gMDsKLSAgc2VsZi0+YnVmZmVyX3NpemVfZnJhbWVzID0gMDsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19lY2hvX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlKQotewotICBHc3RBdWRpb0VjaG8gKnNlbGYgPSBHU1RfQVVESU9fRUNITyAoYmFzZSk7Ci0KLSAgZ19mcmVlIChzZWxmLT5idWZmZXIpOwotICBzZWxmLT5idWZmZXIgPSBOVUxMOwotICBzZWxmLT5idWZmZXJfcG9zID0gMDsKLSAgc2VsZi0+YnVmZmVyX3NpemUgPSAwOwotICBzZWxmLT5idWZmZXJfc2l6ZV9mcmFtZXMgPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0jZGVmaW5lIFRSQU5TRk9STV9GVU5DKG5hbWUsIHR5cGUpIFwKLXN0YXRpYyB2b2lkIFwKLWdzdF9hdWRpb19lY2hvX3RyYW5zZm9ybV8jI25hbWUgKEdzdEF1ZGlvRWNobyAqIHNlbGYsIFwKLSAgICB0eXBlICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpIFwKLXsgXAotICB0eXBlICpidWZmZXIgPSAodHlwZSAqKSBzZWxmLT5idWZmZXI7IFwKLSAgZ3VpbnQgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChzZWxmKTsgXAotICBndWludCByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChzZWxmKTsgXAotICBndWludCBpLCBqOyBcCi0gIGd1aW50IGVjaG9faW5kZXggPSBzZWxmLT5idWZmZXJfc2l6ZV9mcmFtZXMgLSBzZWxmLT5kZWxheV9mcmFtZXM7IFwKLSAgZ2RvdWJsZSBlY2hvX29mZiA9ICgoKChnZG91YmxlKSBzZWxmLT5kZWxheSkgKiByYXRlKSAvIEdTVF9TRUNPTkQpIC0gc2VsZi0+ZGVsYXlfZnJhbWVzOyBcCi0gIFwKLSAgaWYgKGVjaG9fb2ZmIDwgMC4wKSBcCi0gICAgZWNob19vZmYgPSAwLjA7IFwKLSAgXAotICBudW1fc2FtcGxlcyAvPSBjaGFubmVsczsgXAotICBcCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7IFwKLSAgICBndWludCBlY2hvMF9pbmRleCA9ICgoZWNob19pbmRleCArIHNlbGYtPmJ1ZmZlcl9wb3MpICUgc2VsZi0+YnVmZmVyX3NpemVfZnJhbWVzKSAqIGNoYW5uZWxzOyBcCi0gICAgZ3VpbnQgZWNobzFfaW5kZXggPSAoKGVjaG9faW5kZXggKyBzZWxmLT5idWZmZXJfcG9zICsxKSAlIHNlbGYtPmJ1ZmZlcl9zaXplX2ZyYW1lcykgKiBjaGFubmVsczsgXAotICAgIGd1aW50IHJib3V0X2luZGV4ID0gKHNlbGYtPmJ1ZmZlcl9wb3MgJSBzZWxmLT5idWZmZXJfc2l6ZV9mcmFtZXMpICogY2hhbm5lbHM7IFwKLSAgICBmb3IgKGogPSAwOyBqIDwgY2hhbm5lbHM7IGorKykgeyBcCi0gICAgICBnZG91YmxlIGluID0gZGF0YVtpKmNoYW5uZWxzICsgal07IFwKLSAgICAgIGdkb3VibGUgZWNobzAgPSBidWZmZXJbZWNobzBfaW5kZXggKyBqXTsgXAotICAgICAgZ2RvdWJsZSBlY2hvMSA9IGJ1ZmZlcltlY2hvMV9pbmRleCArIGpdOyBcCi0gICAgICBnZG91YmxlIGVjaG8gPSBlY2hvMCArIChlY2hvMS1lY2hvMCkqZWNob19vZmY7IFwKLSAgICAgIHR5cGUgb3V0ID0gaW4gKyBzZWxmLT5pbnRlbnNpdHkgKiBlY2hvOyBcCi0gICAgICBcCi0gICAgICBkYXRhW2kqY2hhbm5lbHMgKyBqXSA9IG91dDsgXAotICAgICAgXAotICAgICAgYnVmZmVyW3Jib3V0X2luZGV4ICsgal0gPSBpbiArIHNlbGYtPmZlZWRiYWNrICogZWNobzsgXAotICAgIH0gXAotICAgIHNlbGYtPmJ1ZmZlcl9wb3MgPSAoc2VsZi0+YnVmZmVyX3BvcyArIDEpICUgc2VsZi0+YnVmZmVyX3NpemVfZnJhbWVzOyBcCi0gIH0gXAotfQotCi1UUkFOU0ZPUk1fRlVOQyAoZmxvYXQsIGdmbG9hdCk7Ci1UUkFOU0ZPUk1fRlVOQyAoZG91YmxlLCBnZG91YmxlKTsKLQotLyogR3N0QmFzZVRyYW5zZm9ybSB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdWRpb19lY2hvX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0QXVkaW9FY2hvICpzZWxmID0gR1NUX0FVRElPX0VDSE8gKGJhc2UpOwotICBndWludCBudW1fc2FtcGxlczsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgc3RyZWFtX3RpbWU7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKLSAgc3RyZWFtX3RpbWUgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZiYXNlLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoc2VsZiksIHN0cmVhbV90aW1lKTsKLQotICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKLSAgICBndWludCBicGYsIHJhdGU7Ci0KLSAgICBicGYgPSBHU1RfQVVESU9fRklMVEVSX0JQRiAoc2VsZik7Ci0gICAgcmF0ZSA9IEdTVF9BVURJT19GSUxURVJfUkFURSAoc2VsZik7Ci0KLSAgICBzZWxmLT5kZWxheV9mcmFtZXMgPQotICAgICAgICBNQVggKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc2VsZi0+ZGVsYXksIHJhdGUsIEdTVF9TRUNPTkQpLCAxKTsKLSAgICBzZWxmLT5idWZmZXJfc2l6ZV9mcmFtZXMgPQotICAgICAgICBNQVggKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc2VsZi0+bWF4X2RlbGF5LCByYXRlLCBHU1RfU0VDT05EKSwgMSk7Ci0KLSAgICBzZWxmLT5idWZmZXJfc2l6ZSA9IHNlbGYtPmJ1ZmZlcl9zaXplX2ZyYW1lcyAqIGJwZjsKLSAgICBzZWxmLT5idWZmZXIgPSBnX3RyeV9tYWxsb2MwIChzZWxmLT5idWZmZXJfc2l6ZSk7Ci0gICAgc2VsZi0+YnVmZmVyX3BvcyA9IDA7Ci0KLSAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiRmFpbGVkIHRvIGFsbG9jYXRlICV1IGJ5dGVzIiwgc2VsZi0+YnVmZmVyX3NpemUpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLSAgfQotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgbnVtX3NhbXBsZXMgPSBtYXAuc2l6ZSAvIEdTVF9BVURJT19GSUxURVJfQlBTIChzZWxmKTsKLQotICBzZWxmLT5wcm9jZXNzIChzZWxmLCBtYXAuZGF0YSwgbnVtX3NhbXBsZXMpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9lY2hvLmggYi9nc3QvYXVkaW9meC9hdWRpb2VjaG8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNhM2RlMy4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb2VjaG8uaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BVURJT19FQ0hPX0hfXwotI2RlZmluZSBfX0dTVF9BVURJT19FQ0hPX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX0VDSE8gICAgICAgICAgICAoZ3N0X2F1ZGlvX2VjaG9fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FVRElPX0VDSE8ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9BVURJT19FQ0hPLEdzdEF1ZGlvRWNobykpCi0jZGVmaW5lIEdTVF9JU19BVURJT19FQ0hPKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVVESU9fRUNITykpCi0jZGVmaW5lIEdTVF9BVURJT19FQ0hPX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSAsR1NUX1RZUEVfQVVESU9fRUNITyxHc3RBdWRpb0VjaG9DbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVURJT19FQ0hPX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSAsR1NUX1RZUEVfQVVESU9fRUNITykpCi0jZGVmaW5lIEdTVF9BVURJT19FQ0hPX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSAsR1NUX1RZUEVfQVVESU9fRUNITyxHc3RBdWRpb0VjaG9DbGFzcykpCi10eXBlZGVmIHN0cnVjdCBfR3N0QXVkaW9FY2hvIEdzdEF1ZGlvRWNobzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0VjaG9DbGFzcyBHc3RBdWRpb0VjaG9DbGFzczsKLQotdHlwZWRlZiB2b2lkICgqR3N0QXVkaW9FY2hvUHJvY2Vzc0Z1bmMpIChHc3RBdWRpb0VjaG8gKiwgZ3VpbnQ4ICosIGd1aW50KTsKLQotc3RydWN0IF9Hc3RBdWRpb0VjaG8KLXsKLSAgR3N0QXVkaW9GaWx0ZXIgYXVkaW9maWx0ZXI7Ci0KLSAgZ3VpbnQ2NCBkZWxheTsKLSAgZ3VpbnQ2NCBtYXhfZGVsYXk7Ci0gIGdmbG9hdCBpbnRlbnNpdHk7Ci0gIGdmbG9hdCBmZWVkYmFjazsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHc3RBdWRpb0VjaG9Qcm9jZXNzRnVuYyBwcm9jZXNzOwotICBndWludCBkZWxheV9mcmFtZXM7Ci0gIGd1aW50OCAqYnVmZmVyOwotICBndWludCBidWZmZXJfcG9zOwotICBndWludCBidWZmZXJfc2l6ZTsKLSAgZ3VpbnQgYnVmZmVyX3NpemVfZnJhbWVzOwotCi0gIEdNdXRleCBsb2NrOwotfTsKLQotc3RydWN0IF9Hc3RBdWRpb0VjaG9DbGFzcwotewotICBHc3RBdWRpb0ZpbHRlckNsYXNzIHBhcmVudDsKLX07Ci0KLUdUeXBlIGdzdF9hdWRpb19lY2hvX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FVRElPX0VDSE9fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2ZpcmZpbHRlci5jIGIvZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiMzJmMy4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb2ZpcmZpbHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKiAKLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdWRpb2ZpcmZpbHRlcgotICoKLSAqIGF1ZGlvZmlyZmlsdGVyIGltcGxlbWVudHMgYSBnZW5lcmljIGF1ZGlvIDx1bGluayB1cmw9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmluaXRlX2ltcHVsc2VfcmVzcG9uc2UiPkZJUiBmaWx0ZXI8L3VsaW5rPi4gQmVmb3JlIHVzYWdlIHRoZQotICogImtlcm5lbCIgcHJvcGVydHkgaGFzIHRvIGJlIHNldCB0byB0aGUgZmlsdGVyIGtlcm5lbCB0aGF0IHNob3VsZCBiZQotICogdXNlZCBhbmQgdGhlICJsYXRlbmN5IiBwcm9wZXJ0eSBoYXMgdG8gYmUgc2V0IHRvIHRoZSBsYXRlbmN5IChpbiBzYW1wbGVzKQotICogdGhhdCBpcyBpbnRyb2R1Y2VkIGJ5IHRoZSBmaWx0ZXIga2VybmVsLiBTZXR0aW5nIGEgbGF0ZW5jeSBvZiBuIHNhbXBsZXMKLSAqIHdpbGwgbGVhZCB0byB0aGUgZmlyc3QgbiBzYW1wbGVzIGJlaW5nIGRyb3BwZWQgZnJvbSB0aGUgb3V0cHV0IGFuZAotICogbiBzYW1wbGVzIGFkZGVkIHRvIHRoZSBlbmQuCi0gKgotICogVGhlIGZpbHRlciBrZXJuZWwgZGVzY3JpYmVzIHRoZSBpbXB1bHNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIuIFRvCi0gKiBjYWxjdWxhdGUgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSBvZiB0aGUgZmlsdGVyIHlvdSBoYXZlIHRvIGNhbGN1bGF0ZQotICogdGhlIEZvdXJpZXIgVHJhbnNmb3JtIG9mIHRoZSBpbXB1bHNlIHJlc3BvbnNlLgotICoKLSAqIFRvIGNoYW5nZSB0aGUgZmlsdGVyIGtlcm5lbCB3aGVuZXZlciB0aGUgc2FtcGxpbmcgcmF0ZSBjaGFuZ2VzIHRoZQotICogInJhdGUtY2hhbmdlZCIgc2lnbmFsIGNhbiBiZSB1c2VkLiBUaGlzIHNob3VsZCBiZSBkb25lIGZvciBtb3N0Ci0gKiBGSVIgZmlsdGVycyBhcyB0aGV5J3JlIGRlcGVuZGluZyBvbiB0aGUgc2FtcGxpbmcgcmF0ZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBhcHBsaWNhdGlvbjwvdGl0bGU+Ci0gKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iQyI+Ci0gKiA8eGk6aW5jbHVkZSB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgcGFyc2U9InRleHQiIGhyZWY9Ii4uLy4uLy4uLy4uL3Rlc3RzL2V4YW1wbGVzL2F1ZGlvZngvZmlyZmlsdGVyLWV4YW1wbGUuYyIgLz4KLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2ZpcmZpbHRlci5oIgotCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLWVudW0KLXsKLSAgU0lHTkFMX1JBVEVfQ0hBTkdFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0tFUk5FTCwKLSAgUFJPUF9MQVRFTkNZCi19OwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07Ci0KLSNkZWZpbmUgZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXVkaW9GSVJGaWx0ZXIsIGdzdF9hdWRpb19maXJfZmlsdGVyLAotICAgIEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19maXJfZmlsdGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19maXJfZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19maXJfZmlsdGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hdWRpb19maXJfZmlsdGVyX3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19maXJfZmlsdGVyX2NsYXNzX2luaXQgKEdzdEF1ZGlvRklSRmlsdGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QXVkaW9GaWx0ZXJDbGFzcyAqZmlsdGVyX2NsYXNzID0gKEdzdEF1ZGlvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9hdWRpb19maXJfZmlsdGVyX2RlYnVnLCAiYXVkaW9maXJmaWx0ZXIiLCAwLAotICAgICAgIkdlbmVyaWMgYXVkaW8gRklSIGZpbHRlciBwbHVnaW4iKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fZmlyX2ZpbHRlcl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19maXJfZmlsdGVyX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYXVkaW9fZmlyX2ZpbHRlcl9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0tFUk5FTCwKLSAgICAgIGdfcGFyYW1fc3BlY192YWx1ZV9hcnJheSAoImtlcm5lbCIsICJGaWx0ZXIgS2VybmVsIiwKLSAgICAgICAgICAiRmlsdGVyIGtlcm5lbCBmb3IgdGhlIEZJUiBmaWx0ZXIiLAotICAgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJFbGVtZW50IiwgIkZpbHRlciBLZXJuZWwgRWxlbWVudCIsCi0gICAgICAgICAgICAgICJFbGVtZW50IG9mIHRoZSBmaWx0ZXIga2VybmVsIiwgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMC4wLAotICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xBVEVOQ1ksCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibGF0ZW5jeSIsICJMYXRlY3kiLAotICAgICAgICAgICJGaWx0ZXIgbGF0ZW5jeSBpbiBzYW1wbGVzIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZmlsdGVyX2NsYXNzLT5zZXR1cCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXVkaW9fZmlyX2ZpbHRlcl9zZXR1cCk7Ci0KLSAgLyoqCi0gICAqIEdzdEF1ZGlvRklSRmlsdGVyOjpyYXRlLWNoYW5nZWQ6Ci0gICAqIEBmaWx0ZXI6IHRoZSBmaWx0ZXIgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAqIEByYXRlOiB0aGUgbmV3IHNhbXBsaW5nIHJhdGUKLSAgICoKLSAgICogV2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIHNhbXBsaW5nIHJhdGUgY2hhbmdlcy4gVGhlIGNhbGxiYWNrcwotICAgKiB3aWxsIGJlIGNhbGxlZCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCBwcm9jZXNzaW5nIHdpbGwKLSAgICogc3RvcCB1bnRpbCB0aGUgZXZlbnQgaXMgaGFuZGxlZC4KLSAgICovCi0gIGdzdF9hdWRpb19maXJfZmlsdGVyX3NpZ25hbHNbU0lHTkFMX1JBVEVfQ0hBTkdFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicmF0ZS1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdEF1ZGlvRklSRmlsdGVyQ2xhc3MsIHJhdGVfY2hhbmdlZCksCi0gICAgICBOVUxMLCBOVUxMLCBOVUxMLCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX0lOVCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJBdWRpbyBGSVIgZmlsdGVyIiwgIkZpbHRlci9FZmZlY3QvQXVkaW8iLAotICAgICAgIkdlbmVyaWMgYXVkaW8gRklSIGZpbHRlciB3aXRoIGN1c3RvbSBmaWx0ZXIga2VybmVsIiwKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19maXJfZmlsdGVyX3VwZGF0ZV9rZXJuZWwgKEdzdEF1ZGlvRklSRmlsdGVyICogc2VsZiwgR1ZhbHVlQXJyYXkgKiB2YSkKLXsKLSAgZ2RvdWJsZSAqa2VybmVsOwotICBndWludCBpOwotCi0gIGlmICh2YSkgewotICAgIGlmIChzZWxmLT5rZXJuZWwpCi0gICAgICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHNlbGYtPmtlcm5lbCk7Ci0KLSAgICBzZWxmLT5rZXJuZWwgPSB2YTsKLSAgfQotCi0gIGtlcm5lbCA9IGdfbmV3IChnZG91YmxlLCBzZWxmLT5rZXJuZWwtPm5fdmFsdWVzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+a2VybmVsLT5uX3ZhbHVlczsgaSsrKSB7Ci0gICAgR1ZhbHVlICp2ID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChzZWxmLT5rZXJuZWwsIGkpOwotICAgIGtlcm5lbFtpXSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodik7Ci0gIH0KLQotICBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3NldF9rZXJuZWwgKEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIgKHNlbGYpLAotICAgICAga2VybmVsLCBzZWxmLT5rZXJuZWwtPm5fdmFsdWVzLCBzZWxmLT5sYXRlbmN5LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19maXJfZmlsdGVyX2luaXQgKEdzdEF1ZGlvRklSRmlsdGVyICogc2VsZikKLXsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIEdWYWx1ZUFycmF5ICp2YTsKLQotICBzZWxmLT5sYXRlbmN5ID0gMDsKLSAgdmEgPSBnX3ZhbHVlX2FycmF5X25ldyAoMSk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDEuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0gIGdzdF9hdWRpb19maXJfZmlsdGVyX3VwZGF0ZV9rZXJuZWwgKHNlbGYsIHZhKTsKLQotICBnX211dGV4X2luaXQgKCZzZWxmLT5sb2NrKTsKLX0KLQotLyogR3N0QXVkaW9GaWx0ZXIgdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLQotLyogZ2V0IG5vdGlmaWVkIG9mIGNhcHMgYW5kIHBsdWcgaW4gdGhlIGNvcnJlY3QgcHJvY2VzcyBmdW5jdGlvbiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXVkaW9fZmlyX2ZpbHRlcl9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBiYXNlLCBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RBdWRpb0ZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GSVJfRklMVEVSIChiYXNlKTsKLSAgZ2ludCBuZXdfcmF0ZSA9IEdTVF9BVURJT19JTkZPX1JBVEUgKGluZm8pOwotCi0gIGlmIChHU1RfQVVESU9fRklMVEVSX1JBVEUgKHNlbGYpICE9IG5ld19yYXRlKSB7Ci0gICAgZ19zaWduYWxfZW1pdCAoR19PQkpFQ1QgKHNlbGYpLAotICAgICAgICBnc3RfYXVkaW9fZmlyX2ZpbHRlcl9zaWduYWxzW1NJR05BTF9SQVRFX0NIQU5HRURdLCAwLCBuZXdfcmF0ZSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0FVRElPX0ZJTFRFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2V0dXAgKGJhc2UsIGluZm8pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEF1ZGlvRklSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0ZJUl9GSUxURVIgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnNlbGYtPmxvY2spOwotCi0gIGlmIChzZWxmLT5rZXJuZWwpCi0gICAgZ192YWx1ZV9hcnJheV9mcmVlIChzZWxmLT5rZXJuZWwpOwotICBzZWxmLT5rZXJuZWwgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19maXJfZmlsdGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdWRpb0ZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GSVJfRklMVEVSIChvYmplY3QpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BVURJT19GSVJfRklMVEVSIChzZWxmKSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0tFUk5FTDoKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgLyogdXBkYXRlIGtlcm5lbCBhbHJlYWR5IHB1c2hlcyByZXNpZHVlcyAqLwotICAgICAgZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfdXBkYXRlX2tlcm5lbCAoc2VsZiwgZ192YWx1ZV9kdXBfYm94ZWQgKHZhbHVlKSk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xBVEVOQ1k6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPmxhdGVuY3kgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGdzdF9hdWRpb19maXJfZmlsdGVyX3VwZGF0ZV9rZXJuZWwgKHNlbGYsIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19maXJfZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdWRpb0ZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GSVJfRklMVEVSIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9LRVJORUw6Ci0gICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHNlbGYtPmtlcm5lbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTEFURU5DWToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHNlbGYtPmxhdGVuY3kpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvZmlyZmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYjM0NzUuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9maXJmaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKiAKLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FVRElPX0ZJUl9GSUxURVJfSF9fCi0jZGVmaW5lIF9fR1NUX0FVRElPX0ZJUl9GSUxURVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2Z4YmFzZWZpcmZpbHRlci5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fRklSX0ZJTFRFUiBcCi0gIChnc3RfYXVkaW9fZmlyX2ZpbHRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fRklSX0ZJTFRFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FVRElPX0ZJUl9GSUxURVIsR3N0QXVkaW9GSVJGaWx0ZXIpKQotI2RlZmluZSBHU1RfQVVESU9fRklSX0ZJTFRFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9BVURJT19GSVJfRklMVEVSLEdzdEF1ZGlvRklSRmlsdGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fRklSX0ZJTFRFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FVRElPX0ZJUl9GSUxURVIpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fRklSX0ZJTFRFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9BVURJT19GSVJfRklMVEVSKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRklSRmlsdGVyIEdzdEF1ZGlvRklSRmlsdGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRklSRmlsdGVyQ2xhc3MgR3N0QXVkaW9GSVJGaWx0ZXJDbGFzczsKLQotLyoqCi0gKiBHc3RBdWRpb0ZJUkZpbHRlcjoKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0QXVkaW9GSVJGaWx0ZXIgewotICBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciBwYXJlbnQ7Ci0KLSAgR1ZhbHVlQXJyYXkgKmtlcm5lbDsKLSAgZ3VpbnQ2NCBsYXRlbmN5OwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIEdNdXRleCBsb2NrOwotfTsKLQotc3RydWN0IF9Hc3RBdWRpb0ZJUkZpbHRlckNsYXNzIHsKLSAgR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJDbGFzcyBwYXJlbnQ7Ci0KLSAgdm9pZCAoKnJhdGVfY2hhbmdlZCkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBnaW50IHJhdGUpOwotfTsKLQotR1R5cGUgZ3N0X2F1ZGlvX2Zpcl9maWx0ZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVVESU9fRklSX0ZJTFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvZnguYyBiL2dzdC9hdWRpb2Z4L2F1ZGlvZnguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJkZGFiZS4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb2Z4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImF1ZGlvcGFub3JhbWEuaCIKLSNpbmNsdWRlICJhdWRpb2ludmVydC5oIgotI2luY2x1ZGUgImF1ZGlva2FyYW9rZS5oIgotI2luY2x1ZGUgImF1ZGlvYW1wbGlmeS5oIgotI2luY2x1ZGUgImF1ZGlvZHluYW1pYy5oIgotI2luY2x1ZGUgImF1ZGlvY2hlYmxpbWl0LmgiCi0jaW5jbHVkZSAiYXVkaW9jaGViYmFuZC5oIgotI2luY2x1ZGUgImF1ZGlvaWlyZmlsdGVyLmgiCi0jaW5jbHVkZSAiYXVkaW93c2luY2JhbmQuaCIKLSNpbmNsdWRlICJhdWRpb3dzaW5jbGltaXQuaCIKLSNpbmNsdWRlICJhdWRpb2ZpcmZpbHRlci5oIgotI2luY2x1ZGUgImF1ZGlvZWNoby5oIgotI2luY2x1ZGUgImdzdHNjYWxldGVtcG8uaCIKLQotLyogZW50cnkgcG9pbnQgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Zy1pbgotICogaW5pdGlhbGl6ZSB0aGUgcGx1Zy1pbiBpdHNlbGYKLSAqIHJlZ2lzdGVyIHRoZSBlbGVtZW50IGZhY3RvcmllcyBhbmQgcGFkIHRlbXBsYXRlcwotICogcmVnaXN0ZXIgdGhlIGZlYXR1cmVzCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIChnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXVkaW9wYW5vcmFtYSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fUEFOT1JBTUEpICYmCi0gICAgICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXVkaW9pbnZlcnQiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX0FVRElPX0lOVkVSVCkgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdWRpb2thcmFva2UiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX0FVRElPX0tBUkFPS0UpICYmCi0gICAgICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXVkaW9hbXBsaWZ5IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9BVURJT19BTVBMSUZZKSAmJgotICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImF1ZGlvZHluYW1pYyIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fRFlOQU1JQykgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdWRpb2NoZWJsaW1pdCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fQ0hFQl9MSU1JVCkgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdWRpb2NoZWJiYW5kIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9BVURJT19DSEVCX0JBTkQpICYmCi0gICAgICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXVkaW9paXJmaWx0ZXIiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX0FVRElPX0lJUl9GSUxURVIpICYmCi0gICAgICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXVkaW93c2luY2xpbWl0IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9BVURJT19XU0lOQ19MSU1JVCkgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdWRpb3dzaW5jYmFuZCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fV1NJTkNfQkFORCkgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdWRpb2ZpcmZpbHRlciIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fRklSX0ZJTFRFUikgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdWRpb2VjaG8iLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX0FVRElPX0VDSE8pICYmCi0gICAgICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic2NhbGV0ZW1wbyIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfU0NBTEVURU1QTykpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgYXVkaW9meCwKLSAgICAiQXVkaW8gZWZmZWN0cyBwbHVnaW4iLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYyBiL2dzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYWZiMGEuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyogLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotICogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDYgRHJlYW1sYWIgVGVjaG5vbG9naWVzIEx0ZC4gPG1hdGhpcy5ob2ZlckBkcmVhbWxhYi5uZXQ+Ci0gKiAgICAgICAgICAgICAgIDIwMDctMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqIAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2Z4YmFzZWZpcmZpbHRlci5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi0jZGVmaW5lIEFMTE9XRURfQ0FQUyBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBmb3JtYXQ9KHN0cmluZyl7IkdTVF9BVURJT19ORShGMzIpIiwiR1NUX0FVRElPX05FKEY2NCkifSwgIiBcCi0gICAgIiByYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0sICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBsYXlvdXQ9KHN0cmluZykgaW50ZXJsZWF2ZWQiCi0KLS8qIFN3aXRjaCBmcm9tIHRpbWUtZG9tYWluIHRvIEZGVCBjb252b2x1dGlvbiBmb3Iga2VybmVscyA+PSB0aGlzICovCi0jZGVmaW5lIEZGVF9USFJFU0hPTEQgMzIKLQotZW51bQotewotICBQUk9QXzAgPSAwLAotICBQUk9QX0xPV19MQVRFTkNZLAotICBQUk9QX0RSQUlOX09OX0NIQU5HRVMKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9MT1dfTEFURU5DWSBGQUxTRQotI2RlZmluZSBERUZBVUxUX0RSQUlOX09OX0NIQU5HRVMgVFJVRQotCi0jZGVmaW5lIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIsIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXIsCi0gICAgR1NUX1RZUEVfQVVESU9fRklMVEVSKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKgotICAgIGJhc2UsIEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RCdWZmZXIgKiBvdXRidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKgotICAgIGJhc2UsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfdHJhbnNmb3JtX3NpemUgKEdzdEJhc2VUcmFuc2Zvcm0gKgotICAgIGJhc2UsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLAotICAgIEdzdENhcHMgKiBvdGhlcmNhcHMsIGdzaXplICogb3RoZXJzaXplKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3F1ZXJ5IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkgKiBxdWVyKTsKLQotLyoKLSAqIFRoZSBjb2RlIGJlbG93IGNhbGN1bGF0ZXMgdGhlIGxpbmVhciBjb252b2x1dGlvbjoKLSAqCi0gKiB5W3RdID0gXHN1bV97dT0wfV57TS0xfSB4W3QgLSB1XSAqIGhbdV0KLSAqCi0gKiB3aGVyZSB5IGlzIHRoZSBvdXRwdXQsIHggaXMgdGhlIGlucHV0LCBNIGlzIHRoZSBsZW5ndGgKLSAqIG9mIHRoZSBmaWx0ZXIga2VybmVsIGFuZCBoIGlzIHRoZSBmaWx0ZXIga2VybmVsLiBGb3IgeAotICogaG9sZHM6IHhbdF0gPT0gMCBcZm9yYWxsIHQgPCAwLgotICoKLSAqIFRoZSBydW50aW1lIGNvbXBsZXhpdHkgb2YgdGhpcyBpcyBPIChNKSBwZXIgc2FtcGxlLgotICoKLSAqLwotI2RlZmluZSBERUZJTkVfUFJPQ0VTU19GVU5DKHdpZHRoLGN0eXBlKSBcCi1zdGF0aWMgZ3VpbnQgXAotcHJvY2Vzc18jI3dpZHRoIChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqIHNlbGYsIGNvbnN0IGcjI2N0eXBlICogc3JjLCBnIyNjdHlwZSAqIGRzdCwgZ3VpbnQgaW5wdXRfc2FtcGxlcykgXAoteyBcCi0gIGdpbnQgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChzZWxmKTsgXAotICBUSU1FX0RPTUFJTl9DT05WT0xVVElPTl9CT0RZIChjaGFubmVscyk7IFwKLX0KLQotI2RlZmluZSBERUZJTkVfUFJPQ0VTU19GVU5DX0ZJWEVEX0NIQU5ORUxTKHdpZHRoLGNoYW5uZWxzLGN0eXBlKSBcCi1zdGF0aWMgZ3VpbnQgXAotcHJvY2Vzc18jI2NoYW5uZWxzIyNfIyN3aWR0aCAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgKiBzZWxmLCBjb25zdCBnIyNjdHlwZSAqIHNyYywgZyMjY3R5cGUgKiBkc3QsIGd1aW50IGlucHV0X3NhbXBsZXMpIFwKLXsgXAotICBUSU1FX0RPTUFJTl9DT05WT0xVVElPTl9CT0RZIChjaGFubmVscyk7IFwKLX0KLQotI2RlZmluZSBUSU1FX0RPTUFJTl9DT05WT0xVVElPTl9CT0RZKGNoYW5uZWxzKSBHX1NUTVRfU1RBUlQgeyBcCi0gIGdpbnQga2VybmVsX2xlbmd0aCA9IHNlbGYtPmtlcm5lbF9sZW5ndGg7IFwKLSAgZ2ludCBpLCBqLCBrLCBsOyBcCi0gIGdpbnQgcmVzX3N0YXJ0OyBcCi0gIGdpbnQgZnJvbV9pbnB1dDsgXAotICBnaW50IG9mZjsgXAotICBnZG91YmxlICpidWZmZXIgPSBzZWxmLT5idWZmZXI7IFwKLSAgZ2RvdWJsZSAqa2VybmVsID0gc2VsZi0+a2VybmVsOyBcCi0gIFwKLSAgaWYgKCFidWZmZXIpIHsgXAotICAgIHNlbGYtPmJ1ZmZlcl9sZW5ndGggPSBrZXJuZWxfbGVuZ3RoICogY2hhbm5lbHM7IFwKLSAgICBzZWxmLT5idWZmZXIgPSBidWZmZXIgPSBnX25ldzAgKGdkb3VibGUsIHNlbGYtPmJ1ZmZlcl9sZW5ndGgpOyBcCi0gIH0gXAotICBcCi0gIGlucHV0X3NhbXBsZXMgKj0gY2hhbm5lbHM7IFwKLSAgLyogY29udm9sdXRpb24gKi8gXAotICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfc2FtcGxlczsgaSsrKSB7IFwKLSAgICBkc3RbaV0gPSAwLjA7IFwKLSAgICBrID0gaSAlIGNoYW5uZWxzOyBcCi0gICAgbCA9IGkgLyBjaGFubmVsczsgXAotICAgIGZyb21faW5wdXQgPSBNSU4gKGwsIGtlcm5lbF9sZW5ndGgtMSk7IFwKLSAgICBvZmYgPSBsICogY2hhbm5lbHMgKyBrOyBcCi0gICAgZm9yIChqID0gMDsgaiA8PSBmcm9tX2lucHV0OyBqKyspIHsgXAotICAgICAgZHN0W2ldICs9IHNyY1tvZmZdICoga2VybmVsW2pdOyBcCi0gICAgICBvZmYgLT0gY2hhbm5lbHM7IFwKLSAgICB9IFwKLSAgICAvKiBqID09IGZyb21faW5wdXQgJiYgb2ZmID09IChsIC0gaikgKiBjaGFubmVscyArIGsgKi8gXAotICAgIG9mZiArPSBrZXJuZWxfbGVuZ3RoICogY2hhbm5lbHM7IFwKLSAgICBmb3IgKDsgaiA8IGtlcm5lbF9sZW5ndGg7IGorKykgeyBcCi0gICAgICBkc3RbaV0gKz0gYnVmZmVyW29mZl0gKiBrZXJuZWxbal07IFwKLSAgICAgIG9mZiAtPSBjaGFubmVsczsgXAotICAgIH0gXAotICB9IFwKLSAgXAotICAvKiBjb3B5IHRoZSB0YWlsIG9mIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlciB0byB0aGUgcmVzaWR1ZSwgd2hpbGUgXAotICAgKiBrZWVwaW5nIHBhcnRzIG9mIHRoZSByZXNpZHVlIGlmIHRoZSBpbnB1dCBidWZmZXIgaXMgc21hbGxlciB0aGFuIFwKLSAgICogdGhlIGtlcm5lbCBsZW5ndGggKi8gXAotICAvKiBmcm9tIG5vdyBvbiB0YWtlIGtlcm5lbCBsZW5ndGggYXMgbGVuZ3RoIG92ZXIgYWxsIGNoYW5uZWxzICovIFwKLSAga2VybmVsX2xlbmd0aCAqPSBjaGFubmVsczsgXAotICBpZiAoaW5wdXRfc2FtcGxlcyA8IGtlcm5lbF9sZW5ndGgpIFwKLSAgICByZXNfc3RhcnQgPSBrZXJuZWxfbGVuZ3RoIC0gaW5wdXRfc2FtcGxlczsgXAotICBlbHNlIFwKLSAgICByZXNfc3RhcnQgPSAwOyBcCi0gIFwKLSAgZm9yIChpID0gMDsgaSA8IHJlc19zdGFydDsgaSsrKSBcCi0gICAgYnVmZmVyW2ldID0gYnVmZmVyW2kgKyBpbnB1dF9zYW1wbGVzXTsgXAotICAvKiBpID09IHJlc19zdGFydCAqLyBcCi0gIGZvciAoOyBpIDwga2VybmVsX2xlbmd0aDsgaSsrKSBcCi0gICAgYnVmZmVyW2ldID0gc3JjW2lucHV0X3NhbXBsZXMgLSBrZXJuZWxfbGVuZ3RoICsgaV07IFwKLSAgXAotICBzZWxmLT5idWZmZXJfZmlsbCArPSBrZXJuZWxfbGVuZ3RoIC0gcmVzX3N0YXJ0OyBcCi0gIGlmIChzZWxmLT5idWZmZXJfZmlsbCA+IGtlcm5lbF9sZW5ndGgpIFwKLSAgICBzZWxmLT5idWZmZXJfZmlsbCA9IGtlcm5lbF9sZW5ndGg7IFwKLSAgXAotICByZXR1cm4gaW5wdXRfc2FtcGxlcyAvIGNoYW5uZWxzOyBcCi19IEdfU1RNVF9FTkQKLQotREVGSU5FX1BST0NFU1NfRlVOQyAoMzIsIGZsb2F0KTsKLURFRklORV9QUk9DRVNTX0ZVTkMgKDY0LCBkb3VibGUpOwotCi1ERUZJTkVfUFJPQ0VTU19GVU5DX0ZJWEVEX0NIQU5ORUxTICgzMiwgMSwgZmxvYXQpOwotREVGSU5FX1BST0NFU1NfRlVOQ19GSVhFRF9DSEFOTkVMUyAoNjQsIDEsIGRvdWJsZSk7Ci0KLURFRklORV9QUk9DRVNTX0ZVTkNfRklYRURfQ0hBTk5FTFMgKDMyLCAyLCBmbG9hdCk7Ci1ERUZJTkVfUFJPQ0VTU19GVU5DX0ZJWEVEX0NIQU5ORUxTICg2NCwgMiwgZG91YmxlKTsKLQotI3VuZGVmIFRJTUVfRE9NQUlOX0NPTlZPTFVUSU9OX0JPRFkKLSN1bmRlZiBERUZJTkVfUFJPQ0VTU19GVU5DCi0jdW5kZWYgREVGSU5FX1BST0NFU1NfRlVOQ19GSVhFRF9DSEFOTkVMUwotCi0vKiBUaGlzIGltcGxlbWVudHMgRkZUIGNvbnZvbHV0aW9uIGFuZCB1c2VzIHRoZSBvdmVybGFwLXNhdmUgYWxnb3JpdGhtLgotICogU2VlIGh0dHA6Ly9jbngub3JnL2NvbnRlbnQvbTEyMDIyL2xhdGVzdC8gb3IgeW91ciBmYXZvcml0ZQotICogZGlnaXRhbCBzaWduYWwgcHJvY2Vzc2luZyBib29rIGZvciBkZXRhaWxzLgotICoKLSAqIEluIGV2ZXJ5IHBhc3MgdGhlIGZvbGxvd2luZyBpcyBjYWxjdWxhdGVkOgotICoKLSAqIHkgPSBJRkZUIChGRlQoeCkgKiBGRlQoaCkpCi0gKgotICogd2hlcmUgeSBpcyB0aGUgb3V0cHV0IGluIHRoZSB0aW1lIGRvbWFpbiwgeCB0aGUKLSAqIGlucHV0IGFuZCBoIHRoZSBmaWx0ZXIga2VybmVsLiAqIGlzIHRoZSBtdWx0aXBsaWNhdGlvbgotICogb2YgY29tcGxleCBudW1iZXJzLgotICoKLSAqIER1ZSB0byB0aGUgY2lyY3VsYXIgY29udm9sdXRpb24gdGhlb3JlbSB0aGlzCi0gKiBnaXZlcyBpbiB0aGUgdGltZSBkb21haW46Ci0gKgotICogeVt0XSA9IFxzdW1fe3U9MH1ee00tMX0geFt0IC0gdV0gKiBoW3VdCi0gKgotICogd2hlcmUgeSBpcyB0aGUgb3V0cHV0LCBNIGlzIHRoZSBrZXJuZWwgbGVuZ3RoLAotICogeCB0aGUgcGVyaW9kaWNhbGx5IGV4dGVuZGVkWzBdIGlucHV0IGFuZCBoIHRoZQotICogZmlsdGVyIGtlcm5lbC4KLSAqCi0gKiAoWzBdIFBlcmlvZGljYWxseSBleHRlbmRlZCBtZWFuczogICAgKQotICogKCAgICB4W3RdID0geFt0K2tOXSBcZm9yYWxsIGsgXGluIFogICkKLSAqICggICAgd2hlcmUgTiBpcyB0aGUgbGVuZ3RoIG9mIHggICAgICApCi0gKgotICogVGhpcyBtZWFuczoKLSAqIC0gT2J2aW91c2x5IHggYW5kIGggbmVlZCB0byBiZSBvZiB0aGUgc2FtZSBzaXplIGZvciB0aGUgRkZUCi0gKiAtIFRoZSBmaXJzdCBNLTEgb3V0cHV0IHZhbHVlcyBhcmUgdXNlbGVzcyBiZWNhdXNlIHRoZXkncmUKLSAqICAgYnVpbHQgZnJvbSAxIHVwIHRvIE0tMSB2YWx1ZXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBpbnB1dAotICogICAoY2lyY3VsYXIgY29udm9sdXNpb24hKS4KLSAqIC0gVGhlIGxhc3QgTS0xIGlucHV0IHZhbHVlcyBhcmUgb25seSB1c2VkIGZvciAxIHVwIHRvIE0tMQotICogICBvdXRwdXQgdmFsdWVzLCBpLmUuIHRoZXkgbmVlZCB0byBiZSB1c2VkIGFnYWluIGluIHRoZQotICogICBuZXh0IHBhc3MgZm9yIHRoZSBmaXJzdCBNLTEgaW5wdXQgdmFsdWVzLgotICoKLSAqID0+IFRoZSBmaXJzdCBwYXNzIG5lZWRzIE0tMSB6ZXJvZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAqIGlucHV0IGFuZCB0aGUgbGFzdCBNLTEgaW5wdXQgdmFsdWVzIG9mIGV2ZXJ5IHBhc3MgbmVlZCB0bwotICogYmUgdXNlZCBhcyB0aGUgZmlyc3QgTS0xIGlucHV0IHZhbHVlcyBvZiB0aGUgbmV4dCBwYXNzLgotICoKLSAqID0+IHggbXVzdCBiZSBsYXJnZXIgdGhhbiBoIHRvIGdpdmUgYSB1c2VmdWwgbnVtYmVyIG9mIG91dHB1dAotICogc2FtcGxlcyBhbmQgaCBuZWVkcyB0byBiZSBwYWRkZWQgYnkgemVyb2VzIGF0IHRoZSBlbmQgdG8gZ2l2ZQotICogaXQgdmlydHVhbGx5IHRoZSBzYW1lIHNpemUgYXMgeCAoYnkgTSB3ZSBkZW5vdGUgdGhlIG51bWJlciBvZgotICogbm9uLXBhZGRpbmcgc2FtcGxlcyBvZiBoKS4gSWYgbGVuKHgpPT1sZW4oaCk9PU0gb25seSAxIG91dHB1dAotICogc2FtcGxlIHdvdWxkIGJlIGNhbGN1bGF0ZWQgcGVyIHBhc3MsIGxlbih4KT09MipsZW4oaCkgd291bGQKLSAqIGdpdmUgTSsxIG91dHB1dCBzYW1wbGVzLCBldGMuIFVzdWFsbHkgYSBmYWN0b3IgYmV0d2VlbiA0IGFuZCA4Ci0gKiBnaXZlcyBhIGxvdyBudW1iZXIgb2Ygb3BlcmF0aW9ucyBwZXIgb3V0cHV0IHNhbXBsZXMgKHNlZSB3ZWJzaXRlCi0gKiBnaXZlbiBhYm92ZSkuCi0gKgotICogT3ZlcmFsbCB0aGlzIGdpdmVzIGEgcnVudGltZSBjb21wbGV4aXR5IHBlciBzYW1wbGUgb2YKLSAqCi0gKiAgICggIE4gbG9nIE4gICkKLSAqIE8gKCAtLS0tLS0tLS0gKSBjb21wYXJlZCB0byBPIChNKSBmb3IgdGhlIGRpcmVjdCBjYWxjdWxhdGlvbi4KLSAqICAgKCBOIC0gTSArIDEgKQotICovCi0jZGVmaW5lIERFRklORV9GRlRfUFJPQ0VTU19GVU5DKHdpZHRoLGN0eXBlKSBcCi1zdGF0aWMgZ3VpbnQgXAotcHJvY2Vzc19mZnRfIyN3aWR0aCAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgKiBzZWxmLCBjb25zdCBnIyNjdHlwZSAqIHNyYywgXAotICAgIGcjI2N0eXBlICogZHN0LCBndWludCBpbnB1dF9zYW1wbGVzKSBcCi17IFwKLSAgZ2ludCBjaGFubmVscyA9IEdTVF9BVURJT19GSUxURVJfQ0hBTk5FTFMgKHNlbGYpOyBcCi0gIEZGVF9DT05WT0xVVElPTl9CT0RZIChjaGFubmVscyk7IFwKLX0KLQotI2RlZmluZSBERUZJTkVfRkZUX1BST0NFU1NfRlVOQ19GSVhFRF9DSEFOTkVMUyh3aWR0aCxjaGFubmVscyxjdHlwZSkgXAotc3RhdGljIGd1aW50IFwKLXByb2Nlc3NfZmZ0XyMjY2hhbm5lbHMjI18jI3dpZHRoIChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqIHNlbGYsIGNvbnN0IGcjI2N0eXBlICogc3JjLCBcCi0gICAgZyMjY3R5cGUgKiBkc3QsIGd1aW50IGlucHV0X3NhbXBsZXMpIFwKLXsgXAotICBGRlRfQ09OVk9MVVRJT05fQk9EWSAoY2hhbm5lbHMpOyBcCi19Ci0KLSNkZWZpbmUgRkZUX0NPTlZPTFVUSU9OX0JPRFkoY2hhbm5lbHMpIEdfU1RNVF9TVEFSVCB7IFwKLSAgZ2ludCBpLCBqOyBcCi0gIGd1aW50IHBhc3M7IFwKLSAgZ3VpbnQga2VybmVsX2xlbmd0aCA9IHNlbGYtPmtlcm5lbF9sZW5ndGg7IFwKLSAgZ3VpbnQgYmxvY2tfbGVuZ3RoID0gc2VsZi0+YmxvY2tfbGVuZ3RoOyBcCi0gIGd1aW50IGJ1ZmZlcl9sZW5ndGggPSBzZWxmLT5idWZmZXJfbGVuZ3RoOyBcCi0gIGd1aW50IHJlYWxfYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGggKyBrZXJuZWxfbGVuZ3RoIC0gMTsgXAotICBndWludCBidWZmZXJfZmlsbCA9IHNlbGYtPmJ1ZmZlcl9maWxsOyBcCi0gIEdzdEZGVEY2NCAqZmZ0ID0gc2VsZi0+ZmZ0OyBcCi0gIEdzdEZGVEY2NCAqaWZmdCA9IHNlbGYtPmlmZnQ7IFwKLSAgR3N0RkZURjY0Q29tcGxleCAqZnJlcXVlbmN5X3Jlc3BvbnNlID0gc2VsZi0+ZnJlcXVlbmN5X3Jlc3BvbnNlOyBcCi0gIEdzdEZGVEY2NENvbXBsZXggKmZmdF9idWZmZXIgPSBzZWxmLT5mZnRfYnVmZmVyOyBcCi0gIGd1aW50IGZyZXF1ZW5jeV9yZXNwb25zZV9sZW5ndGggPSBzZWxmLT5mcmVxdWVuY3lfcmVzcG9uc2VfbGVuZ3RoOyBcCi0gIGdkb3VibGUgKmJ1ZmZlciA9IHNlbGYtPmJ1ZmZlcjsgXAotICBndWludCBnZW5lcmF0ZWQgPSAwOyBcCi0gIGdkb3VibGUgcmUsIGltOyBcCi0gIFwKLSAgaWYgKCFmZnRfYnVmZmVyKSBcCi0gICAgc2VsZi0+ZmZ0X2J1ZmZlciA9IGZmdF9idWZmZXIgPSBcCi0gICAgICAgIGdfbmV3IChHc3RGRlRGNjRDb21wbGV4LCBmcmVxdWVuY3lfcmVzcG9uc2VfbGVuZ3RoKTsgXAotICBcCi0gIC8qIEJ1ZmZlciBjb250YWlucyB0aGUgdGltZSBkb21haW4gc2FtcGxlcyBvZiBpbnB1dCBkYXRhIGZvciBvbmUgY2h1bmsgXAotICAgKiBwbHVzIHNvbWUgbW9yZSBzcGFjZSBmb3IgdGhlIGludmVyc2UgRkZUIGJlbG93LiBcCi0gICAqIFwKLSAgICogVGhlIHNhbXBsZXMgYXJlIHB1dCBhdCBvZmZzZXQga2VybmVsX2xlbmd0aCwgdGhlIGludmVyc2UgRkZUIFwKLSAgICogb3ZlcndyaXRlcyBldmVydGhpbmcgZnJvbSBvZmZzZXQgMCB0byBsZW5ndGgta2VybmVsX2xlbmd0aCsxLCBrZWVwaW5nIFwKLSAgICogdGhlIGxhc3Qga2VybmVsX2xlbmd0aC0xIHNhbXBsZXMgZm9yIGNvcHlpbmcgdG8gdGhlIG5leHQgcHJvY2Vzc2luZyBcCi0gICAqIHN0ZXAuIFwKLSAgICovIFwKLSAgaWYgKCFidWZmZXIpIHsgXAotICAgIHNlbGYtPmJ1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoID0gYmxvY2tfbGVuZ3RoOyBcCi0gICAgcmVhbF9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aCArIGtlcm5lbF9sZW5ndGggLSAxOyBcCi0gICAgXAotICAgIHNlbGYtPmJ1ZmZlciA9IGJ1ZmZlciA9IGdfbmV3MCAoZ2RvdWJsZSwgcmVhbF9idWZmZXJfbGVuZ3RoICogY2hhbm5lbHMpOyBcCi0gICAgXAotICAgIC8qIEJlZ2lubmluZyBoYXMga2VybmVsX2xlbmd0aC0xIHplcm9lcyBhdCB0aGUgYmVnaW5uaW5nICovIFwKLSAgICBzZWxmLT5idWZmZXJfZmlsbCA9IGJ1ZmZlcl9maWxsID0ga2VybmVsX2xlbmd0aCAtIDE7IFwKLSAgfSBcCi0gIFwKLSAgZ19hc3NlcnQgKHNlbGYtPmJ1ZmZlcl9sZW5ndGggPT0gYmxvY2tfbGVuZ3RoKTsgXAotICBcCi0gIHdoaWxlIChpbnB1dF9zYW1wbGVzKSB7IFwKLSAgICBwYXNzID0gTUlOIChidWZmZXJfbGVuZ3RoIC0gYnVmZmVyX2ZpbGwsIGlucHV0X3NhbXBsZXMpOyBcCi0gICAgXAotICAgIC8qIERlaW50ZXJsZWF2ZSBjaGFubmVscyAqLyBcCi0gICAgZm9yIChpID0gMDsgaSA8IHBhc3M7IGkrKykgeyBcCi0gICAgICBmb3IgKGogPSAwOyBqIDwgY2hhbm5lbHM7IGorKykgeyBcCi0gICAgICAgIGJ1ZmZlcltyZWFsX2J1ZmZlcl9sZW5ndGggKiBqICsgYnVmZmVyX2ZpbGwgKyBrZXJuZWxfbGVuZ3RoIC0gMSArIGldID0gXAotICAgICAgICAgICAgc3JjW2kgKiBjaGFubmVscyArIGpdOyBcCi0gICAgICB9IFwKLSAgICB9IFwKLSAgICBidWZmZXJfZmlsbCArPSBwYXNzOyBcCi0gICAgc3JjICs9IGNoYW5uZWxzICogcGFzczsgXAotICAgIGlucHV0X3NhbXBsZXMgLT0gcGFzczsgXAotICAgIFwKLSAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGEgY29tcGxldGUgYnVmZmVyIGdvIG91dCAqLyBcCi0gICAgaWYgKGJ1ZmZlcl9maWxsIDwgYnVmZmVyX2xlbmd0aCkgXAotICAgICAgYnJlYWs7IFwKLSAgICBcCi0gICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspIHsgXAotICAgICAgLyogQ2FsY3VsYXRlIEZGVCBvZiBpbnB1dCBibG9jayAqLyBcCi0gICAgICBnc3RfZmZ0X2Y2NF9mZnQgKGZmdCwgXAotICAgICAgICAgIGJ1ZmZlciArIHJlYWxfYnVmZmVyX2xlbmd0aCAqIGogKyBrZXJuZWxfbGVuZ3RoIC0gMSwgZmZ0X2J1ZmZlcik7IFwKLSAgICAgIFwKLSAgICAgIC8qIENvbXBsZXggbXVsdGlwbGljYXRpb24gb2YgaW5wdXQgYW5kIGZpbHRlciBzcGVjdHJ1bSAqLyBcCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgZnJlcXVlbmN5X3Jlc3BvbnNlX2xlbmd0aDsgaSsrKSB7IFwKLQlyZSA9IGZmdF9idWZmZXJbaV0ucjsgXAotCWltID0gZmZ0X2J1ZmZlcltpXS5pOyBcCi0gICAgICAgIFwKLSAgICAgICAgZmZ0X2J1ZmZlcltpXS5yID0gXAotICAgICAgICAgICAgcmUgKiBmcmVxdWVuY3lfcmVzcG9uc2VbaV0uciAtIFwKLSAgICAgICAgICAgIGltICogZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLmk7IFwKLSAgICAgICAgZmZ0X2J1ZmZlcltpXS5pID0gXAotICAgICAgICAgICAgcmUgKiBmcmVxdWVuY3lfcmVzcG9uc2VbaV0uaSArIFwKLSAgICAgICAgICAgIGltICogZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLnI7IFwKLSAgICAgIH0gXAotICAgICAgXAotICAgICAgLyogQ2FsY3VsYXRlIGludmVyc2UgRkZUIG9mIHRoZSByZXN1bHQgKi8gXAotICAgICAgZ3N0X2ZmdF9mNjRfaW52ZXJzZV9mZnQgKGlmZnQsIGZmdF9idWZmZXIsIFwKLSAgICAgICAgICBidWZmZXIgKyByZWFsX2J1ZmZlcl9sZW5ndGggKiBqKTsgXAotICAgICAgXAotICAgICAgLyogQ29weSBhbGwgZXhjZXB0IHRoZSBmaXJzdCBrZXJuZWxfbGVuZ3RoLTEgc2FtcGxlcyB0byB0aGUgb3V0cHV0ICovIFwKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoIC0ga2VybmVsX2xlbmd0aCArIDE7IGkrKykgeyBcCi0gICAgICAgIGRzdFtpICogY2hhbm5lbHMgKyBqXSA9IFwKLSAgICAgICAgICAgIGJ1ZmZlcltyZWFsX2J1ZmZlcl9sZW5ndGggKiBqICsga2VybmVsX2xlbmd0aCAtIDEgKyBpXTsgXAotICAgICAgfSBcCi0gICAgICBcCi0gICAgICAvKiBDb3B5IHRoZSBsYXN0IGtlcm5lbF9sZW5ndGgtMSBzYW1wbGVzIHRvIHRoZSBiZWdpbm5pbmcgZm9yIHRoZSBuZXh0IGJsb2NrICovIFwKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXJuZWxfbGVuZ3RoIC0gMTsgaSsrKSB7IFwKLSAgICAgICAgYnVmZmVyW3JlYWxfYnVmZmVyX2xlbmd0aCAqIGogKyBrZXJuZWxfbGVuZ3RoIC0gMSArIGldID0gXAotICAgICAgICAgICAgYnVmZmVyW3JlYWxfYnVmZmVyX2xlbmd0aCAqIGogKyBidWZmZXJfbGVuZ3RoICsgaV07IFwKLSAgICAgIH0gXAotICAgIH0gXAotICAgIFwKLSAgICBnZW5lcmF0ZWQgKz0gYnVmZmVyX2xlbmd0aCAtIGtlcm5lbF9sZW5ndGggKyAxOyBcCi0gICAgZHN0ICs9IGNoYW5uZWxzICogKGJ1ZmZlcl9sZW5ndGggLSBrZXJuZWxfbGVuZ3RoICsgMSk7IFwKLSAgICBcCi0gICAgLyogVGhlIHRoZSBmaXJzdCBrZXJuZWxfbGVuZ3RoLTEgc2FtcGxlcyBhcmUgdGhlcmUgYWxyZWFkeSAqLyBcCi0gICAgYnVmZmVyX2ZpbGwgPSBrZXJuZWxfbGVuZ3RoIC0gMTsgXAotICB9IFwKLSAgXAotICAvKiBXcml0ZSBiYWNrIGNhY2hlZCBidWZmZXJfZmlsbCB2YWx1ZSAqLyBcCi0gIHNlbGYtPmJ1ZmZlcl9maWxsID0gYnVmZmVyX2ZpbGw7IFwKLSAgXAotICByZXR1cm4gZ2VuZXJhdGVkOyBcCi19IEdfU1RNVF9FTkQKLQotREVGSU5FX0ZGVF9QUk9DRVNTX0ZVTkMgKDMyLCBmbG9hdCk7Ci1ERUZJTkVfRkZUX1BST0NFU1NfRlVOQyAoNjQsIGRvdWJsZSk7Ci0KLURFRklORV9GRlRfUFJPQ0VTU19GVU5DX0ZJWEVEX0NIQU5ORUxTICgzMiwgMSwgZmxvYXQpOwotREVGSU5FX0ZGVF9QUk9DRVNTX0ZVTkNfRklYRURfQ0hBTk5FTFMgKDY0LCAxLCBkb3VibGUpOwotCi1ERUZJTkVfRkZUX1BST0NFU1NfRlVOQ19GSVhFRF9DSEFOTkVMUyAoMzIsIDIsIGZsb2F0KTsKLURFRklORV9GRlRfUFJPQ0VTU19GVU5DX0ZJWEVEX0NIQU5ORUxTICg2NCwgMiwgZG91YmxlKTsKLQotI3VuZGVmIEZGVF9DT05WT0xVVElPTl9CT0RZCi0jdW5kZWYgREVGSU5FX0ZGVF9QUk9DRVNTX0ZVTkMKLSN1bmRlZiBERUZJTkVfRkZUX1BST0NFU1NfRlVOQ19GSVhFRF9DSEFOTkVMUwotCi0vKiBFbGVtZW50IGNsYXNzICovCi1zdGF0aWMgdm9pZAotICAgIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfY2FsY3VsYXRlX2ZyZXF1ZW5jeV9yZXNwb25zZQotICAgIChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqIHNlbGYpCi17Ci0gIGdzdF9mZnRfZjY0X2ZyZWUgKHNlbGYtPmZmdCk7Ci0gIHNlbGYtPmZmdCA9IE5VTEw7Ci0gIGdzdF9mZnRfZjY0X2ZyZWUgKHNlbGYtPmlmZnQpOwotICBzZWxmLT5pZmZ0ID0gTlVMTDsKLSAgZ19mcmVlIChzZWxmLT5mcmVxdWVuY3lfcmVzcG9uc2UpOwotICBzZWxmLT5mcmVxdWVuY3lfcmVzcG9uc2VfbGVuZ3RoID0gMDsKLSAgZ19mcmVlIChzZWxmLT5mZnRfYnVmZmVyKTsKLSAgc2VsZi0+ZmZ0X2J1ZmZlciA9IE5VTEw7Ci0KLSAgaWYgKHNlbGYtPmtlcm5lbCAmJiBzZWxmLT5rZXJuZWxfbGVuZ3RoID49IEZGVF9USFJFU0hPTEQKLSAgICAgICYmICFzZWxmLT5sb3dfbGF0ZW5jeSkgewotICAgIGd1aW50IGJsb2NrX2xlbmd0aCwgaTsKLSAgICBnZG91YmxlICprZXJuZWxfdG1wLCAqa2VybmVsID0gc2VsZi0+a2VybmVsOwotCi0gICAgLyogV2UgcHJvY2VzcyA0ICoga2VybmVsX2xlbmd0aCBzYW1wbGVzIHBlciBwYXNzIGluIEZGVCBtb2RlICovCi0gICAgYmxvY2tfbGVuZ3RoID0gNCAqIHNlbGYtPmtlcm5lbF9sZW5ndGg7Ci0gICAgYmxvY2tfbGVuZ3RoID0gZ3N0X2ZmdF9uZXh0X2Zhc3RfbGVuZ3RoIChibG9ja19sZW5ndGgpOwotICAgIHNlbGYtPmJsb2NrX2xlbmd0aCA9IGJsb2NrX2xlbmd0aDsKLQotICAgIGtlcm5lbF90bXAgPSBnX25ldzAgKGdkb3VibGUsIGJsb2NrX2xlbmd0aCk7Ci0gICAgbWVtY3B5IChrZXJuZWxfdG1wLCBrZXJuZWwsIHNlbGYtPmtlcm5lbF9sZW5ndGggKiBzaXplb2YgKGdkb3VibGUpKTsKLQotICAgIHNlbGYtPmZmdCA9IGdzdF9mZnRfZjY0X25ldyAoYmxvY2tfbGVuZ3RoLCBGQUxTRSk7Ci0gICAgc2VsZi0+aWZmdCA9IGdzdF9mZnRfZjY0X25ldyAoYmxvY2tfbGVuZ3RoLCBUUlVFKTsKLSAgICBzZWxmLT5mcmVxdWVuY3lfcmVzcG9uc2VfbGVuZ3RoID0gYmxvY2tfbGVuZ3RoIC8gMiArIDE7Ci0gICAgc2VsZi0+ZnJlcXVlbmN5X3Jlc3BvbnNlID0KLSAgICAgICAgZ19uZXcgKEdzdEZGVEY2NENvbXBsZXgsIHNlbGYtPmZyZXF1ZW5jeV9yZXNwb25zZV9sZW5ndGgpOwotICAgIGdzdF9mZnRfZjY0X2ZmdCAoc2VsZi0+ZmZ0LCBrZXJuZWxfdG1wLCBzZWxmLT5mcmVxdWVuY3lfcmVzcG9uc2UpOwotICAgIGdfZnJlZSAoa2VybmVsX3RtcCk7Ci0KLSAgICAvKiBOb3JtYWxpemUgdG8gbWFrZSBzdXJlIElGRlQoRkZUKHgpKSA9PSB4ICovCi0gICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmZyZXF1ZW5jeV9yZXNwb25zZV9sZW5ndGg7IGkrKykgewotICAgICAgc2VsZi0+ZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLnIgLz0gYmxvY2tfbGVuZ3RoOwotICAgICAgc2VsZi0+ZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLmkgLz0gYmxvY2tfbGVuZ3RoOwotICAgIH0KLSAgfQotfQotCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGJhc2UgdHJhbnNmb3JtIGxvY2shICovCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9zZWxlY3RfcHJvY2Vzc19mdW5jdGlvbiAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgKgotICAgIHNlbGYsIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdCwgZ2ludCBjaGFubmVscykKLXsKLSAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyOgotICAgICAgaWYgKHNlbGYtPmZmdCAmJiAhc2VsZi0+bG93X2xhdGVuY3kpIHsKLSAgICAgICAgaWYgKGNoYW5uZWxzID09IDEpCi0gICAgICAgICAgc2VsZi0+cHJvY2VzcyA9IChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlclByb2Nlc3NGdW5jKSBwcm9jZXNzX2ZmdF8xXzMyOwotICAgICAgICBlbHNlIGlmIChjaGFubmVscyA9PSAyKQotICAgICAgICAgIHNlbGYtPnByb2Nlc3MgPSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJQcm9jZXNzRnVuYykgcHJvY2Vzc19mZnRfMl8zMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlbGYtPnByb2Nlc3MgPSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJQcm9jZXNzRnVuYykgcHJvY2Vzc19mZnRfMzI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoY2hhbm5lbHMgPT0gMSkKLSAgICAgICAgICBzZWxmLT5wcm9jZXNzID0gKEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyUHJvY2Vzc0Z1bmMpIHByb2Nlc3NfMV8zMjsKLSAgICAgICAgZWxzZSBpZiAoY2hhbm5lbHMgPT0gMikKLSAgICAgICAgICBzZWxmLT5wcm9jZXNzID0gKEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyUHJvY2Vzc0Z1bmMpIHByb2Nlc3NfMl8zMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlbGYtPnByb2Nlc3MgPSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJQcm9jZXNzRnVuYykgcHJvY2Vzc18zMjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GNjQ6Ci0gICAgICBpZiAoc2VsZi0+ZmZ0ICYmICFzZWxmLT5sb3dfbGF0ZW5jeSkgewotICAgICAgICBpZiAoY2hhbm5lbHMgPT0gMSkKLSAgICAgICAgICBzZWxmLT5wcm9jZXNzID0gKEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyUHJvY2Vzc0Z1bmMpIHByb2Nlc3NfZmZ0XzFfNjQ7Ci0gICAgICAgIGVsc2UgaWYgKGNoYW5uZWxzID09IDIpCi0gICAgICAgICAgc2VsZi0+cHJvY2VzcyA9IChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlclByb2Nlc3NGdW5jKSBwcm9jZXNzX2ZmdF8yXzY0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgc2VsZi0+cHJvY2VzcyA9IChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlclByb2Nlc3NGdW5jKSBwcm9jZXNzX2ZmdF82NDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjaGFubmVscyA9PSAxKQotICAgICAgICAgIHNlbGYtPnByb2Nlc3MgPSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJQcm9jZXNzRnVuYykgcHJvY2Vzc18xXzY0OwotICAgICAgICBlbHNlIGlmIChjaGFubmVscyA9PSAyKQotICAgICAgICAgIHNlbGYtPnByb2Nlc3MgPSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJQcm9jZXNzRnVuYykgcHJvY2Vzc18yXzY0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgc2VsZi0+cHJvY2VzcyA9IChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlclByb2Nlc3NGdW5jKSBwcm9jZXNzXzY0OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHNlbGYtPnByb2Nlc3MgPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAob2JqZWN0KTsKLQotICBnX2ZyZWUgKHNlbGYtPmJ1ZmZlcik7Ci0gIGdfZnJlZSAoc2VsZi0+a2VybmVsKTsKLSAgZ3N0X2ZmdF9mNjRfZnJlZSAoc2VsZi0+ZmZ0KTsKLSAgZ3N0X2ZmdF9mNjRfZnJlZSAoc2VsZi0+aWZmdCk7Ci0gIGdfZnJlZSAoc2VsZi0+ZnJlcXVlbmN5X3Jlc3BvbnNlKTsKLSAgZ19mcmVlIChzZWxmLT5mZnRfYnVmZmVyKTsKLSAgZ19tdXRleF9jbGVhciAoJnNlbGYtPmxvY2spOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTE9XX0xBVEVOQ1k6ewotICAgICAgZ2Jvb2xlYW4gbG93X2xhdGVuY3k7Ci0KLSAgICAgIGlmIChHU1RfU1RBVEUgKHNlbGYpID49IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgZ193YXJuaW5nICgiQ2hhbmdpbmcgdGhlIFwibG93LWxhdGVuY3lcIiBwcm9wZXJ0eSAiCi0gICAgICAgICAgICAiaXMgb25seSBhbGxvd2VkIGluIHN0YXRlcyA8IFBBVVNFRCIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLQotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBsb3dfbGF0ZW5jeSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLQotICAgICAgaWYgKHNlbGYtPmxvd19sYXRlbmN5ICE9IGxvd19sYXRlbmN5KSB7Ci0gICAgICAgIHNlbGYtPmxvd19sYXRlbmN5ID0gbG93X2xhdGVuY3k7Ci0gICAgICAgIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfY2FsY3VsYXRlX2ZyZXF1ZW5jeV9yZXNwb25zZSAoc2VsZik7Ci0gICAgICAgIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2VsZWN0X3Byb2Nlc3NfZnVuY3Rpb24gKHNlbGYsCi0gICAgICAgICAgICBHU1RfQVVESU9fRklMVEVSX0ZPUk1BVCAoc2VsZiksIEdTVF9BVURJT19GSUxURVJfQ0hBTk5FTFMgKHNlbGYpKTsKLSAgICAgIH0KLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0RSQUlOX09OX0NIQU5HRVM6ewotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBzZWxmLT5kcmFpbl9vbl9jaGFuZ2VzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPV19MQVRFTkNZOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbGYtPmxvd19sYXRlbmN5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EUkFJTl9PTl9DSEFOR0VTOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNlbGYtPmRyYWluX29uX2NoYW5nZXMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9jbGFzc19pbml0IChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICBHc3RBdWRpb0ZpbHRlckNsYXNzICpmaWx0ZXJfY2xhc3MgPSAoR3N0QXVkaW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9kZWJ1ZywKLSAgICAgICJhdWRpb2Z4YmFzZWZpcmZpbHRlciIsIDAsICJGSVIgZmlsdGVyIGJhc2UgY2xhc3MiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2dldF9wcm9wZXJ0eTsKLQotICAvKioKLSAgICogR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXI6bG93LWxhdGVuY3k6Ci0gICAqCi0gICAqIFdvcmsgaW4gbG93LWxhdGVuY3kgbW9kZS4gVGhpcyBtb2RlIGlzIG11Y2ggc2xvd2VyIGZvciBsYXJnZSBmaWx0ZXIgc2l6ZXMKLSAgICogYnV0IHRoZSBsYXRlbmN5IGlzIGFsd2F5cyBvbmx5IHRoZSBwcmUtbGF0ZW5jeSBvZiB0aGUgZmlsdGVyLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT1dfTEFURU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibG93LWxhdGVuY3kiLCAiTG93IGxhdGVuY3kiLAotICAgICAgICAgICJPcGVyYXRlIGluIGxvdyBsYXRlbmN5IG1vZGUuIFRoaXMgbW9kZSBpcyBzbG93ZXIgYnV0IHRoZSAiCi0gICAgICAgICAgImxhdGVuY3kgd2lsbCBvbmx5IGJlIHRoZSBmaWx0ZXIgcHJlLWxhdGVuY3kuICIKLSAgICAgICAgICAiQ2FuIG9ubHkgYmUgY2hhbmdlZCBpbiBzdGF0ZXMgPCBQQVVTRUQhIiwgREVGQVVMVF9MT1dfTEFURU5DWSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXI6ZHJhaW4tb24tY2hhbmdlczoKLSAgICoKLSAgICogV2hldGhlciB0aGUgZmlsdGVyIHNob3VsZCBiZSBkcmFpbmVkIHdoZW4gaXRzIGNvZWZpY2llbnRzIGNoYW5nZQotICAgKgotICAgKiBOb3RlOiBDdXJyZW50bHkgdGhpcyBvbmx5IHdvcmtzIGlmIHRoZSBrZXJuZWwgc2l6ZSBpcyBub3QgY2hhbmdlZCEKLSAgICogU3VwcG9ydCBmb3IgZHJhaW5sZXNzIGtlcm5lbCBzaXplIGNoYW5nZXMgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9EUkFJTl9PTl9DSEFOR0VTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJkcmFpbi1vbi1jaGFuZ2VzIiwgIkRyYWluIG9uIGNoYW5nZXMiLAotICAgICAgICAgICJEcmFpbnMgdGhlIGZpbHRlciB3aGVuIGl0cyBjb2VmaWNpZW50cyBjaGFuZ2UiLAotICAgICAgICAgIERFRkFVTFRfRFJBSU5fT05fQ0hBTkdFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFMTE9XRURfQ0FQUyk7Ci0gIGdzdF9hdWRpb19maWx0ZXJfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZXMgKEdTVF9BVURJT19GSUxURVJfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl90cmFuc2Zvcm0pOwotICB0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9zdGFydCk7Ci0gIHRyYW5zX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc3RvcCk7Ci0gIHRyYW5zX2NsYXNzLT5zaW5rX2V2ZW50ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3NpbmtfZXZlbnQpOwotICB0cmFuc19jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9xdWVyeSk7Ci0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fc2l6ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl90cmFuc2Zvcm1fc2l6ZSk7Ci0gIGZpbHRlcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9zZXR1cCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2luaXQgKEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICogc2VsZikKLXsKLSAgc2VsZi0+a2VybmVsID0gTlVMTDsKLSAgc2VsZi0+YnVmZmVyID0gTlVMTDsKLSAgc2VsZi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0KLSAgc2VsZi0+c3RhcnRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBzZWxmLT5zdGFydF9vZmYgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBzZWxmLT5uc2FtcGxlc19vdXQgPSAwOwotICBzZWxmLT5uc2FtcGxlc19pbiA9IDA7Ci0KLSAgc2VsZi0+bG93X2xhdGVuY3kgPSBERUZBVUxUX0xPV19MQVRFTkNZOwotICBzZWxmLT5kcmFpbl9vbl9jaGFuZ2VzID0gREVGQVVMVF9EUkFJTl9PTl9DSEFOR0VTOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnNlbGYtPmxvY2spOwotfQotCi12b2lkCi1nc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3B1c2hfcmVzaWR1ZSAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgKiBzZWxmKQotewotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIGdpbnQgcmF0ZSA9IEdTVF9BVURJT19GSUxURVJfUkFURSAoc2VsZik7Ci0gIGdpbnQgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChzZWxmKTsKLSAgZ2ludCBicHMgPSBHU1RfQVVESU9fRklMVEVSX0JQUyAoc2VsZik7Ci0gIGdpbnQgb3V0c2l6ZSwgb3V0c2FtcGxlczsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqaW4sICpvdXQ7Ci0KLSAgaWYgKGNoYW5uZWxzID09IDAgfHwgcmF0ZSA9PSAwIHx8IHNlbGYtPm5zYW1wbGVzX2luID09IDApIHsKLSAgICBzZWxmLT5idWZmZXJfZmlsbCA9IDA7Ci0gICAgZ19mcmVlIChzZWxmLT5idWZmZXIpOwotICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBhbmQgdGhlaXIgbWVtb3J5IHNpemUgdGhhdAotICAgKiBzaG91bGQgYmUgcHVzaGVkIGZyb20gdGhlIHJlc2lkdWUgKi8KLSAgb3V0c2FtcGxlcyA9IHNlbGYtPm5zYW1wbGVzX2luIC0gKHNlbGYtPm5zYW1wbGVzX291dCAtIHNlbGYtPmxhdGVuY3kpOwotICBpZiAob3V0c2FtcGxlcyA8PSAwKSB7Ci0gICAgc2VsZi0+YnVmZmVyX2ZpbGwgPSAwOwotICAgIGdfZnJlZSAoc2VsZi0+YnVmZmVyKTsKLSAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwotICAgIHJldHVybjsKLSAgfQotICBvdXRzaXplID0gb3V0c2FtcGxlcyAqIGNoYW5uZWxzICogYnBzOwotCi0gIGlmICghc2VsZi0+ZmZ0IHx8IHNlbGYtPmxvd19sYXRlbmN5KSB7Ci0gICAgZ2ludDY0IGRpZmZzaXplLCBkaWZmc2FtcGxlczsKLQotICAgIC8qIFByb2Nlc3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsYXRlbmN5IGFuZCByZXNpZHVlIGxlbmd0aCBzYW1wbGVzCi0gICAgICogdG8gc3RhcnQgYXQgdGhlIGFjdHVhbCBkYXRhIGluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgdGhlIHplcm9zIGJlZm9yZQotICAgICAqIHdoZW4gd2Ugb25seSBnb3Qgb25lIGJ1ZmZlciBzbWFsbGVyIHRoYW4gbGF0ZW5jeSAqLwotICAgIGRpZmZzYW1wbGVzID0KLSAgICAgICAgKChnaW50NjQpIHNlbGYtPmxhdGVuY3kpIC0gKChnaW50NjQpIHNlbGYtPmJ1ZmZlcl9maWxsKSAvIGNoYW5uZWxzOwotICAgIGlmIChkaWZmc2FtcGxlcyA+IDApIHsKLSAgICAgIGRpZmZzaXplID0gZGlmZnNhbXBsZXMgKiBjaGFubmVscyAqIGJwczsKLSAgICAgIGluID0gZ19uZXcwIChndWludDgsIGRpZmZzaXplKTsKLSAgICAgIG91dCA9IGdfbmV3MCAoZ3VpbnQ4LCBkaWZmc2l6ZSk7Ci0gICAgICBzZWxmLT5uc2FtcGxlc19vdXQgKz0gc2VsZi0+cHJvY2VzcyAoc2VsZiwgaW4sIG91dCwgZGlmZnNhbXBsZXMpOwotICAgICAgZ19mcmVlIChpbik7Ci0gICAgICBnX2ZyZWUgKG91dCk7Ci0gICAgfQotCi0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChvdXRzaXplKTsKLQotICAgIC8qIENvbnZvbHZlIHRoZSByZXNpZHVlIHdpdGggemVyb3MgdG8gZ2V0IHRoZSBhY3R1YWwgcmVtYWluaW5nIGRhdGEgKi8KLSAgICBpbiA9IGdfbmV3MCAoZ3VpbnQ4LCBvdXRzaXplKTsKLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gICAgc2VsZi0+bnNhbXBsZXNfb3V0ICs9IHNlbGYtPnByb2Nlc3MgKHNlbGYsIGluLCBtYXAuZGF0YSwgb3V0c2FtcGxlcyk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLQotICAgIGdfZnJlZSAoaW4pOwotICB9IGVsc2UgewotICAgIGd1aW50IGdlbnNhbXBsZXMgPSAwOwotCi0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChvdXRzaXplKTsKLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0KLSAgICB3aGlsZSAoZ2Vuc2FtcGxlcyA8IG91dHNhbXBsZXMpIHsKLSAgICAgIGd1aW50IHN0ZXBfaW5zYW1wbGVzID0gc2VsZi0+YmxvY2tfbGVuZ3RoIC0gc2VsZi0+YnVmZmVyX2ZpbGw7Ci0gICAgICBndWludDggKnplcm9lcyA9IGdfbmV3MCAoZ3VpbnQ4LCBzdGVwX2luc2FtcGxlcyAqIGNoYW5uZWxzICogYnBzKTsKLSAgICAgIGd1aW50OCAqb3V0ID0gZ19uZXcgKGd1aW50OCwgc2VsZi0+YmxvY2tfbGVuZ3RoICogY2hhbm5lbHMgKiBicHMpOwotICAgICAgZ3VpbnQgc3RlcF9nZW5zYW1wbGVzOwotCi0gICAgICBzdGVwX2dlbnNhbXBsZXMgPSBzZWxmLT5wcm9jZXNzIChzZWxmLCB6ZXJvZXMsIG91dCwgc3RlcF9pbnNhbXBsZXMpOwotICAgICAgZ19mcmVlICh6ZXJvZXMpOwotCi0gICAgICBtZW1jcHkgKG1hcC5kYXRhICsgZ2Vuc2FtcGxlcyAqIGJwcywgb3V0LCBNSU4gKHN0ZXBfZ2Vuc2FtcGxlcywKLSAgICAgICAgICAgICAgb3V0c2FtcGxlcyAtIGdlbnNhbXBsZXMpICogYnBzKTsKLSAgICAgIGdlbnNhbXBsZXMgKz0gTUlOIChzdGVwX2dlbnNhbXBsZXMsIG91dHNhbXBsZXMgLSBnZW5zYW1wbGVzKTsKLQotICAgICAgZ19mcmVlIChvdXQpOwotICAgIH0KLSAgICBzZWxmLT5uc2FtcGxlc19vdXQgKz0gZ2Vuc2FtcGxlczsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0gIH0KLQotICAvKiBTZXQgdGltZXN0YW1wLCBvZmZzZXQsIGV0YyBmcm9tIHRoZSB2YWx1ZXMgd2UKLSAgICogc2F2ZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSByZWd1bGFyIGJ1ZmZlcnMgKi8KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZWxmLT5zdGFydF90cykpCi0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPSBzZWxmLT5zdGFydF90czsKLSAgZWxzZQotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gMDsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgKz0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNlbGYtPm5zYW1wbGVzX291dCAtIG91dHNhbXBsZXMgLQotICAgICAgc2VsZi0+bGF0ZW5jeSwgR1NUX1NFQ09ORCwgcmF0ZSk7Ci0KLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChvdXRzYW1wbGVzLCBHU1RfU0VDT05ELCByYXRlKTsKLQotICBpZiAoc2VsZi0+c3RhcnRfb2ZmICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpIHsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9Ci0gICAgICAgIHNlbGYtPnN0YXJ0X29mZiArIHNlbGYtPm5zYW1wbGVzX291dCAtIG91dHNhbXBsZXMgLSBzZWxmLT5sYXRlbmN5OwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAob3V0YnVmKSA9IEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpICsgb3V0c2FtcGxlczsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAiUHVzaGluZyByZXNpZHVlIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgd2l0aCB0aW1lc3RhbXA6ICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiwgZHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBvZmZzZXQ6ICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIsIG9mZnNldF9lbmQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgbnNhbXBsZXNfb3V0OiAlZCIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSksIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpLAotICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChvdXRidWYpLCBvdXRzYW1wbGVzKTsKLQotICByZXMgPSBnc3RfcGFkX3B1c2ggKEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChzZWxmKS0+c3JjcGFkLCBvdXRidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChyZXMgIT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAiZmFpbGVkIHRvIHB1c2ggcmVzaWR1ZSIpOwotICB9Ci0KLSAgc2VsZi0+YnVmZmVyX2ZpbGwgPSAwOwotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi0vKiBnZXQgbm90aWZpZWQgb2YgY2FwcyBhbmQgcGx1ZyBpbiB0aGUgY29ycmVjdCBwcm9jZXNzIGZ1bmN0aW9uICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIgKGJhc2UpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICBpZiAoc2VsZi0+YnVmZmVyKSB7Ci0gICAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9wdXNoX3Jlc2lkdWUgKHNlbGYpOwotICAgIGdfZnJlZSAoc2VsZi0+YnVmZmVyKTsKLSAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwotICAgIHNlbGYtPmJ1ZmZlcl9maWxsID0gMDsKLSAgICBzZWxmLT5idWZmZXJfbGVuZ3RoID0gMDsKLSAgICBzZWxmLT5zdGFydF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgc2VsZi0+c3RhcnRfb2ZmID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICBzZWxmLT5uc2FtcGxlc19vdXQgPSAwOwotICAgIHNlbGYtPm5zYW1wbGVzX2luID0gMDsKLSAgfQotCi0gIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2VsZWN0X3Byb2Nlc3NfZnVuY3Rpb24gKHNlbGYsCi0gICAgICBHU1RfQVVESU9fSU5GT19GT1JNQVQgKGluZm8pLCBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbykpOwotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotCi0gIHJldHVybiAoc2VsZi0+cHJvY2VzcyAhPSBOVUxMKTsKLX0KLQotLyogR3N0QmFzZVRyYW5zZm9ybSB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfdHJhbnNmb3JtX3NpemUgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBnc2l6ZSBzaXplLCBHc3RDYXBzICogb3RoZXJjYXBzLAotICAgIGdzaXplICogb3RoZXJzaXplKQotewotICBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIgKGJhc2UpOwotICBndWludCBibG9ja2xlbjsKLSAgR3N0QXVkaW9JbmZvIGluZm87Ci0gIGdpbnQgYnBmOwotCi0gIGlmICghc2VsZi0+ZmZ0IHx8IHNlbGYtPmxvd19sYXRlbmN5IHx8IGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgewotICAgICpvdGhlcnNpemUgPSBzaXplOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKCFnc3RfYXVkaW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgYnBmID0gR1NUX0FVRElPX0lORk9fQlBGICgmaW5mbyk7Ci0KLSAgc2l6ZSAvPSBicGY7Ci0gIGJsb2NrbGVuID0gc2VsZi0+YmxvY2tfbGVuZ3RoIC0gc2VsZi0+a2VybmVsX2xlbmd0aCArIDE7Ci0gICpvdGhlcnNpemUgPSAoKHNpemUgKyBibG9ja2xlbiAtIDEpIC8gYmxvY2tsZW4pICogYmxvY2tsZW47Ci0gICpvdGhlcnNpemUgKj0gYnBmOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RCdWZmZXIgKiBvdXRidWYpCi17Ci0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAoYmFzZSk7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGV4cGVjdGVkX3RpbWVzdGFtcDsKLSAgZ2ludCBjaGFubmVscyA9IEdTVF9BVURJT19GSUxURVJfQ0hBTk5FTFMgKHNlbGYpOwotICBnaW50IHJhdGUgPSBHU1RfQVVESU9fRklMVEVSX1JBVEUgKHNlbGYpOwotICBnaW50IGJwcyA9IEdTVF9BVURJT19GSUxURVJfQlBTIChzZWxmKTsKLSAgR3N0TWFwSW5mbyBpbm1hcCwgb3V0bWFwOwotICBndWludCBpbnB1dF9zYW1wbGVzOwotICBndWludCBvdXRwdXRfc2FtcGxlczsKLSAgZ3VpbnQgZ2VuZXJhdGVkX3NhbXBsZXM7Ci0gIGd1aW50NjQgb3V0cHV0X29mZnNldDsKLSAgZ2ludDY0IGRpZmYgPSAwOwotICBHc3RDbG9ja1RpbWUgc3RyZWFtX3RpbWU7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1Zik7Ci0KLSAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKQotICAgICAgJiYgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZWxmLT5zdGFydF90cykpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiSW52YWxpZCB0aW1lc3RhbXAiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgc3RyZWFtX3RpbWUgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZiYXNlLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoc2VsZiksIHN0cmVhbV90aW1lKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZi0+a2VybmVsICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNoYW5uZWxzICE9IDAsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNlbGYtPnN0YXJ0X3RzKSkKLSAgICBleHBlY3RlZF90aW1lc3RhbXAgPQotICAgICAgICBzZWxmLT5zdGFydF90cyArIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNlbGYtPm5zYW1wbGVzX2luLAotICAgICAgICBHU1RfU0VDT05ELCByYXRlKTsKLSAgZWxzZQotICAgIGV4cGVjdGVkX3RpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgLyogUmVzZXQgdGhlIHJlc2lkdWUgaWYgYWxyZWFkeSBleGlzdGluZyBvbiBkaXNjb250IGJ1ZmZlcnMgKi8KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoaW5idWYpCi0gICAgICB8fCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGV4cGVjdGVkX3RpbWVzdGFtcCkKLSAgICAgICAgICAmJiAoQUJTIChHU1RfQ0xPQ0tfRElGRiAodGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RpbWVzdGFtcCkpID4gNSAqIEdTVF9NU0VDT05EKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiRGlzY29udGludWl0eSBkZXRlY3RlZCAtIGZsdXNoaW5nIik7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChleHBlY3RlZF90aW1lc3RhbXApKQotICAgICAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9wdXNoX3Jlc2lkdWUgKHNlbGYpOwotICAgIHNlbGYtPmJ1ZmZlcl9maWxsID0gMDsKLSAgICBnX2ZyZWUgKHNlbGYtPmJ1ZmZlcik7Ci0gICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKLSAgICBzZWxmLT5zdGFydF90cyA9IHRpbWVzdGFtcDsKLSAgICBzZWxmLT5zdGFydF9vZmYgPSBHU1RfQlVGRkVSX09GRlNFVCAoaW5idWYpOwotICAgIHNlbGYtPm5zYW1wbGVzX291dCA9IDA7Ci0gICAgc2VsZi0+bnNhbXBsZXNfaW4gPSAwOwotICB9IGVsc2UgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc2VsZi0+c3RhcnRfdHMpKSB7Ci0gICAgc2VsZi0+c3RhcnRfdHMgPSB0aW1lc3RhbXA7Ci0gICAgc2VsZi0+c3RhcnRfb2ZmID0gR1NUX0JVRkZFUl9PRkZTRVQgKGluYnVmKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJmlubWFwLCBHU1RfTUFQX1JFQUQpOwotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmb3V0bWFwLCBHU1RfTUFQX1dSSVRFKTsKLQotICBpbnB1dF9zYW1wbGVzID0gKGlubWFwLnNpemUgLyBicHMpIC8gY2hhbm5lbHM7Ci0gIG91dHB1dF9zYW1wbGVzID0gKG91dG1hcC5zaXplIC8gYnBzKSAvIGNoYW5uZWxzOwotCi0gIHNlbGYtPm5zYW1wbGVzX2luICs9IGlucHV0X3NhbXBsZXM7Ci0KLSAgZ2VuZXJhdGVkX3NhbXBsZXMgPQotICAgICAgc2VsZi0+cHJvY2VzcyAoc2VsZiwgaW5tYXAuZGF0YSwgb3V0bWFwLmRhdGEsIGlucHV0X3NhbXBsZXMpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmaW5tYXApOwotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZvdXRtYXApOwotCi0gIGdfYXNzZXJ0IChnZW5lcmF0ZWRfc2FtcGxlcyA8PSBvdXRwdXRfc2FtcGxlcyk7Ci0gIHNlbGYtPm5zYW1wbGVzX291dCArPSBnZW5lcmF0ZWRfc2FtcGxlczsKLSAgaWYgKGdlbmVyYXRlZF9zYW1wbGVzID09IDApCi0gICAgZ290byBub19zYW1wbGVzOwotCi0gIC8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgd2UgY2FuIHB1c2ggb3V0IG5vdyB3aXRob3V0IG91dHB1dHRpbmcKLSAgICogbGF0ZW5jeSB6ZXJvcyBpbiB0aGUgYmVnaW5uaW5nICovCi0gIGRpZmYgPSAoKGdpbnQ2NCkgc2VsZi0+bnNhbXBsZXNfb3V0KSAtICgoZ2ludDY0KSBzZWxmLT5sYXRlbmN5KTsKLSAgaWYgKGRpZmYgPCAwKQotICAgIGdvdG8gbm9fc2FtcGxlczsKLQotICBpZiAoZGlmZiA8IGdlbmVyYXRlZF9zYW1wbGVzKSB7Ci0gICAgZ2ludDY0IHRtcCA9IGRpZmY7Ci0gICAgZGlmZiA9IGdlbmVyYXRlZF9zYW1wbGVzIC0gZGlmZjsKLSAgICBnZW5lcmF0ZWRfc2FtcGxlcyA9IHRtcDsKLSAgfSBlbHNlIHsKLSAgICBkaWZmID0gMDsKLSAgfQotCi0gIGdzdF9idWZmZXJfcmVzaXplIChvdXRidWYsIGRpZmYgKiBicHMgKiBjaGFubmVscywKLSAgICAgIGdlbmVyYXRlZF9zYW1wbGVzICogYnBzICogY2hhbm5lbHMpOwotCi0gIG91dHB1dF9vZmZzZXQgPSBzZWxmLT5uc2FtcGxlc19vdXQgLSBzZWxmLT5sYXRlbmN5IC0gZ2VuZXJhdGVkX3NhbXBsZXM7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0KLSAgICAgIHNlbGYtPnN0YXJ0X3RzICsgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAob3V0cHV0X29mZnNldCwgR1NUX1NFQ09ORCwKLSAgICAgIHJhdGUpOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKG91dHB1dF9zYW1wbGVzLCBHU1RfU0VDT05ELCByYXRlKTsKLSAgaWYgKHNlbGYtPnN0YXJ0X29mZiAhPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FKSB7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZikgPSBzZWxmLT5zdGFydF9vZmYgKyBvdXRwdXRfb2Zmc2V0OwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAob3V0YnVmKSA9Ci0gICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpICsgZ2VuZXJhdGVkX3NhbXBsZXM7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAob3V0YnVmKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgIlB1c2hpbmcgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiB3aXRoIHRpbWVzdGFtcDogJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFUICIsIG9mZnNldDogJSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiwgb2Zmc2V0X2VuZDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBuc2FtcGxlc19vdXQ6ICVkIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dGJ1ZiksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpKSwgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZiksCi0gICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKG91dGJ1ZiksIGdlbmVyYXRlZF9zYW1wbGVzKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLW5vX3NhbXBsZXM6Ci0gIHsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fRkxPV19EUk9QUEVEOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UpCi17Ci0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAoYmFzZSk7Ci0KLSAgc2VsZi0+YnVmZmVyX2ZpbGwgPSAwOwotICBnX2ZyZWUgKHNlbGYtPmJ1ZmZlcik7Ci0gIHNlbGYtPmJ1ZmZlciA9IE5VTEw7Ci0gIHNlbGYtPnN0YXJ0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc2VsZi0+c3RhcnRfb2ZmID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgc2VsZi0+bnNhbXBsZXNfb3V0ID0gMDsKLSAgc2VsZi0+bnNhbXBsZXNfaW4gPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc3RvcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UpCi17Ci0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAoYmFzZSk7Ci0KLSAgZ19mcmVlIChzZWxmLT5idWZmZXIpOwotICBzZWxmLT5idWZmZXIgPSBOVUxMOwotICBzZWxmLT5idWZmZXJfbGVuZ3RoID0gMDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3F1ZXJ5IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgKnNlbGYgPSBHU1RfQVVESU9fRlhfQkFTRV9GSVJfRklMVEVSICh0cmFucyk7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWToKLSAgICB7Ci0gICAgICBHc3RDbG9ja1RpbWUgbWluLCBtYXg7Ci0gICAgICBnYm9vbGVhbiBsaXZlOwotICAgICAgZ3VpbnQ2NCBsYXRlbmN5OwotICAgICAgZ2ludCByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChzZWxmKTsKLQotICAgICAgaWYgKHJhdGUgPT0gMCkgewotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSBpZiAoKHJlcyA9Ci0gICAgICAgICAgICAgIGdzdF9wYWRfcGVlcl9xdWVyeSAoR1NUX0JBU0VfVFJBTlNGT1JNIChzZWxmKS0+c2lua3BhZCwgcXVlcnkpKSkgewotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAocXVlcnksICZsaXZlLCAmbWluLCAmbWF4KTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUGVlciBsYXRlbmN5OiBtaW4gJSIKLSAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIG1heCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW4pLCBHU1RfVElNRV9BUkdTIChtYXgpKTsKLQotICAgICAgICBpZiAoc2VsZi0+ZmZ0ICYmICFzZWxmLT5sb3dfbGF0ZW5jeSkKLSAgICAgICAgICBsYXRlbmN5ID0gc2VsZi0+YmxvY2tfbGVuZ3RoIC0gc2VsZi0+a2VybmVsX2xlbmd0aCArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBsYXRlbmN5ID0gc2VsZi0+bGF0ZW5jeTsKLQotICAgICAgICAvKiBhZGQgb3VyIG93biBsYXRlbmN5ICovCi0gICAgICAgIGxhdGVuY3kgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKGxhdGVuY3ksIEdTVF9TRUNPTkQsIHJhdGUpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPdXIgbGF0ZW5jeTogJSIKLSAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOwotCi0gICAgICAgIG1pbiArPSBsYXRlbmN5OwotICAgICAgICBpZiAobWF4ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgICAgbWF4ICs9IGxhdGVuY3k7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkNhbGN1bGF0ZWQgdG90YWwgbGF0ZW5jeSA6IG1pbiAlIgotICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1pbiksIEdTVF9USU1FX0FSR1MgKG1heCkpOwotCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbiwgbWF4KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0KLSAgICAgICAgICBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5ICh0cmFucywgZGlyZWN0aW9uLAotICAgICAgICAgIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9zaW5rX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIgKGJhc2UpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfcHVzaF9yZXNpZHVlIChzZWxmKTsKLSAgICAgIHNlbGYtPnN0YXJ0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHNlbGYtPnN0YXJ0X29mZiA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gICAgICBzZWxmLT5uc2FtcGxlc19vdXQgPSAwOwotICAgICAgc2VsZi0+bnNhbXBsZXNfaW4gPSAwOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAoYmFzZSwgZXZlbnQpOwotfQotCi12b2lkCi1nc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3NldF9rZXJuZWwgKEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyICogc2VsZiwKLSAgICBnZG91YmxlICoga2VybmVsLCBndWludCBrZXJuZWxfbGVuZ3RoLCBndWludDY0IGxhdGVuY3ksCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgZ2Jvb2xlYW4gbGF0ZW5jeV9jaGFuZ2VkOwotICBHc3RBdWRpb0Zvcm1hdCBmb3JtYXQ7Ci0gIGdpbnQgY2hhbm5lbHM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoa2VybmVsICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotCi0gIGxhdGVuY3lfY2hhbmdlZCA9IChzZWxmLT5sYXRlbmN5ICE9IGxhdGVuY3kKLSAgICAgIHx8ICghc2VsZi0+bG93X2xhdGVuY3kgJiYgc2VsZi0+a2VybmVsX2xlbmd0aCA8IEZGVF9USFJFU0hPTEQKLSAgICAgICAgICAmJiBrZXJuZWxfbGVuZ3RoID49IEZGVF9USFJFU0hPTEQpCi0gICAgICB8fCAoIXNlbGYtPmxvd19sYXRlbmN5ICYmIHNlbGYtPmtlcm5lbF9sZW5ndGggPj0gRkZUX1RIUkVTSE9MRAotICAgICAgICAgICYmIGtlcm5lbF9sZW5ndGggPCBGRlRfVEhSRVNIT0xEKSk7Ci0KLSAgLyogRklYTUU6IElmIHRoZSBsYXRlbmN5IGNoYW5nZXMsIHRoZSBidWZmZXIgc2l6ZSBjaGFuZ2VzIHRvbyBhbmQgd2UKLSAgICogaGF2ZSB0byBkcmFpbiBpbiBhbnkgY2FzZSB1bnRpbCB0aGlzIGlzIGZpeGVkIGluIHRoZSBmdXR1cmUgKi8KLSAgaWYgKHNlbGYtPmJ1ZmZlciAmJiAoIXNlbGYtPmRyYWluX29uX2NoYW5nZXMgfHwgbGF0ZW5jeV9jaGFuZ2VkKSkgewotICAgIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfcHVzaF9yZXNpZHVlIChzZWxmKTsKLSAgICBzZWxmLT5zdGFydF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgc2VsZi0+c3RhcnRfb2ZmID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICBzZWxmLT5uc2FtcGxlc19vdXQgPSAwOwotICAgIHNlbGYtPm5zYW1wbGVzX2luID0gMDsKLSAgICBzZWxmLT5idWZmZXJfZmlsbCA9IDA7Ci0gIH0KLQotICBnX2ZyZWUgKHNlbGYtPmtlcm5lbCk7Ci0gIGlmICghc2VsZi0+ZHJhaW5fb25fY2hhbmdlcyB8fCBsYXRlbmN5X2NoYW5nZWQpIHsKLSAgICBnX2ZyZWUgKHNlbGYtPmJ1ZmZlcik7Ci0gICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKLSAgICBzZWxmLT5idWZmZXJfZmlsbCA9IDA7Ci0gICAgc2VsZi0+YnVmZmVyX2xlbmd0aCA9IDA7Ci0gIH0KLQotICBzZWxmLT5rZXJuZWwgPSBrZXJuZWw7Ci0gIHNlbGYtPmtlcm5lbF9sZW5ndGggPSBrZXJuZWxfbGVuZ3RoOwotCi0gIGlmIChpbmZvKSB7Ci0gICAgZm9ybWF0ID0gR1NUX0FVRElPX0lORk9fRk9STUFUIChpbmZvKTsKLSAgICBjaGFubmVscyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTIChpbmZvKTsKLSAgfSBlbHNlIHsKLSAgICBmb3JtYXQgPSBHU1RfQVVESU9fRklMVEVSX0ZPUk1BVCAoc2VsZik7Ci0gICAgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChzZWxmKTsKLSAgfQotCi0gIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfY2FsY3VsYXRlX2ZyZXF1ZW5jeV9yZXNwb25zZSAoc2VsZik7Ci0gIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2VsZWN0X3Byb2Nlc3NfZnVuY3Rpb24gKHNlbGYsIGZvcm1hdCwgY2hhbm5lbHMpOwotCi0gIGlmIChsYXRlbmN5X2NoYW5nZWQpIHsKLSAgICBzZWxmLT5sYXRlbmN5ID0gbGF0ZW5jeTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChzZWxmKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kgKEdTVF9PQkpFQ1QgKHNlbGYpKSk7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlZmlyZmlsdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZDU1NjEuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9meGJhc2VmaXJmaWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKiAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0gKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwNiBEcmVhbWxhYiBUZWNobm9sb2dpZXMgTHRkLiA8bWF0aGlzLmhvZmVyQGRyZWFtbGFiLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqIAotICovCi0KLSNpZm5kZWYgX19HU1RfQVVESU9fRlhfQkFTRV9GSVJfRklMVEVSX0hfXwotI2RlZmluZSBfX0dTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2ZmdC9nc3RmZnRmNjQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiBcCi0gIChnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIsR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIpKQotI2RlZmluZSBHU1RfQVVESU9fRlhfQkFTRV9GSVJfRklMVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUixHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUikpCi0jZGVmaW5lIEdTVF9JU19BVURJT19GWF9CQVNFX0ZJUl9GSUxURVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQVVESU9fRlhfQkFTRV9GSVJfRklMVEVSKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRlhCYXNlRklSRmlsdGVyIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRlhCYXNlRklSRmlsdGVyQ2xhc3MgR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJDbGFzczsKLQotdHlwZWRlZiBndWludCAoKkdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyUHJvY2Vzc0Z1bmMpIChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqLCBjb25zdCBndWludDggKiwgZ3VpbnQ4ICosIGd1aW50KTsKLQotLyoqCi0gKiBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlcjoKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgewotICBHc3RBdWRpb0ZpbHRlciBlbGVtZW50OwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2RvdWJsZSAqa2VybmVsOyAgICAgICAgICAgICAgLyogZmlsdGVyIGtlcm5lbCAtLSB0aW1lIGRvbWFpbiAqLwotICBndWludCBrZXJuZWxfbGVuZ3RoOyAgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIGZpbHRlciBrZXJuZWwgLS0gdGltZSBkb21haW4gKi8KLQotICBndWludDY0IGxhdGVuY3k7ICAgICAgICAgICAgICAvKiBwcmUtbGF0ZW5jeSBvZiB0aGUgZmlsdGVyIGtlcm5lbCAqLwotICBnYm9vbGVhbiBsb3dfbGF0ZW5jeTsgICAgICAgICAvKiB3b3JrIGluIHNsb3dlciBsb3cgbGF0ZW5jeSBtb2RlICovCi0KLSAgZ2Jvb2xlYW4gZHJhaW5fb25fY2hhbmdlczsgICAgLyogSWYgdGhlIGZpbHRlciBzaG91bGQgYmUgZHJhaW5lZCB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNvZWZpY2llbnRzIGNoYW5nZSAqLwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyUHJvY2Vzc0Z1bmMgcHJvY2VzczsKLQotICBnZG91YmxlICpidWZmZXI7ICAgICAgICAgICAgICAvKiBidWZmZXIgZm9yIHN0b3Jpbmcgc2FtcGxlcyBvZiBwcmV2aW91cyBidWZmZXJzICovCi0gIGd1aW50IGJ1ZmZlcl9maWxsOyAgICAgICAgICAgIC8qIGZpbGwgbGV2ZWwgb2YgYnVmZmVyICovCi0gIGd1aW50IGJ1ZmZlcl9sZW5ndGg7ICAgICAgICAgIC8qIGxlbmd0aCBvZiB0aGUgYnVmZmVyIC0tIG1lYW5pbmcgZGVwZW5kcyBvbiBwcm9jZXNzaW5nIG1vZGUgKi8KLQotICAvKiBGRlQgY29udm9sdXRpb24gc3BlY2lmaWMgZGF0YSAqLwotICBHc3RGRlRGNjQgKmZmdDsKLSAgR3N0RkZURjY0ICppZmZ0OwotICBHc3RGRlRGNjRDb21wbGV4ICpmcmVxdWVuY3lfcmVzcG9uc2U7ICAvKiBmaWx0ZXIga2VybmVsIC0tIGZyZXF1ZW5jeSBkb21haW4gKi8KLSAgZ3VpbnQgZnJlcXVlbmN5X3Jlc3BvbnNlX2xlbmd0aDsgICAgICAgLyogbGVuZ3RoIG9mIGZpbHRlciBrZXJuZWwgLS0gZnJlcXVlbmN5IGRvbWFpbiAqLwotICBHc3RGRlRGNjRDb21wbGV4ICpmZnRfYnVmZmVyOyAgICAgICAgICAvKiBGRlQgYnVmZmVyLCBoYXMgdGhlIGxlbmd0aCBvZiB0aGUgZnJlcXVlbmN5IHJlc3BvbnNlICovCi0gIGd1aW50IGJsb2NrX2xlbmd0aDsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgcHJvY2Vzc2luZyBibG9ja3MgLS0gdGltZSBkb21haW4gKi8KLQotICBHc3RDbG9ja1RpbWUgc3RhcnRfdHM7ICAgICAgICAvKiBzdGFydCB0aW1lc3RhbXAgYWZ0ZXIgYSBkaXNjb250ICovCi0gIGd1aW50NjQgc3RhcnRfb2ZmOyAgICAgICAgICAgIC8qIHN0YXJ0IG9mZnNldCBhZnRlciBhIGRpc2NvbnQgKi8KLSAgZ3VpbnQ2NCBuc2FtcGxlc19vdXQ7ICAgICAgICAgLyogbnVtYmVyIG9mIG91dHB1dCBzYW1wbGVzIHNpbmNlIGxhc3QgZGlzY29udCAqLwotICBndWludDY0IG5zYW1wbGVzX2luOyAgICAgICAgICAvKiBudW1iZXIgb2YgaW5wdXQgc2FtcGxlcyBzaW5jZSBsYXN0IGRpc2NvbnQgKi8KLQotICBHTXV0ZXggbG9jazsKLX07Ci0KLXN0cnVjdCBfR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJDbGFzcyB7Ci0gIEdzdEF1ZGlvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9nZXRfdHlwZSAodm9pZCk7Ci12b2lkIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0X2tlcm5lbCAoR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXIgKmZpbHRlciwgZ2RvdWJsZSAqa2VybmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGtlcm5lbF9sZW5ndGgsIGd1aW50NjQgbGF0ZW5jeSwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci12b2lkIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfcHVzaF9yZXNpZHVlIChHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciAqZmlsdGVyKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmMgYi9nc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzU1M2U4Li4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImF1ZGlvZnhiYXNlaWlyZmlsdGVyLmgiCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLSNkZWZpbmUgQUxMT1dFRF9DQVBTIFwKLSAgICAiYXVkaW8veC1yYXcsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGZvcm1hdD0oc3RyaW5nKXsiR1NUX0FVRElPX05FKEYzMikiLCJHU1RfQVVESU9fTkUoRjY0KSJ9LCIgIFwKLSAgICAiIHJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGxheW91dD0oc3RyaW5nKSBpbnRlcmxlYXZlZCIKLQotI2RlZmluZSBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyLAotICAgIGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXIsIEdTVF9UWVBFX0FVRElPX0ZJTFRFUik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGZpbHRlciwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlKTsKLQotc3RhdGljIHZvaWQgcHJvY2Vzc182NCAoR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIgKiBmaWx0ZXIsCi0gICAgZ2RvdWJsZSAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLXN0YXRpYyB2b2lkIHByb2Nlc3NfMzIgKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyICogZmlsdGVyLAotICAgIGdmbG9hdCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLQotLyogR09iamVjdCB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIgKmZpbHRlciA9IEdTVF9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIgKG9iamVjdCk7Ci0KLSAgaWYgKGZpbHRlci0+YSkgewotICAgIGdfZnJlZSAoZmlsdGVyLT5hKTsKLSAgICBmaWx0ZXItPmEgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGZpbHRlci0+YikgewotICAgIGdfZnJlZSAoZmlsdGVyLT5iKTsKLSAgICBmaWx0ZXItPmIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGZpbHRlci0+Y2hhbm5lbHMpIHsKLSAgICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNoYW5uZWxDdHggKmN0eDsKLSAgICBndWludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGZpbHRlci0+bmNoYW5uZWxzOyBpKyspIHsKLSAgICAgIGN0eCA9ICZmaWx0ZXItPmNoYW5uZWxzW2ldOwotICAgICAgZ19mcmVlIChjdHgtPngpOwotICAgICAgZ19mcmVlIChjdHgtPnkpOwotICAgIH0KLQotICAgIGdfZnJlZSAoZmlsdGVyLT5jaGFubmVscyk7Ci0gICAgZmlsdGVyLT5jaGFubmVscyA9IE5VTEw7Ci0gIH0KLSAgZ19tdXRleF9jbGVhciAoJmZpbHRlci0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9jbGFzc19pbml0IChHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICBHc3RBdWRpb0ZpbHRlckNsYXNzICpmaWx0ZXJfY2xhc3MgPSAoR3N0QXVkaW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9kZWJ1ZywKLSAgICAgICJhdWRpb2Z4YmFzZWlpcmZpbHRlciIsIDAsICJBdWRpbyBJSVIgRmlsdGVyIEJhc2UgQ2xhc3MiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfZmluYWxpemU7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBTExPV0VEX0NBUFMpOwotICBnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzIChHU1RfQVVESU9fRklMVEVSX0NMQVNTIChrbGFzcyksCi0gICAgICBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGZpbHRlcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zZXR1cCk7Ci0KLSAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl90cmFuc2Zvcm1faXApOwotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7Ci0gIHRyYW5zX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfc3RvcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2luaXQgKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyICogZmlsdGVyKQotewotICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGZpbHRlciksIFRSVUUpOwotCi0gIGZpbHRlci0+YSA9IE5VTEw7Ci0gIGZpbHRlci0+bmEgPSAwOwotICBmaWx0ZXItPmIgPSBOVUxMOwotICBmaWx0ZXItPm5iID0gMDsKLSAgZmlsdGVyLT5jaGFubmVscyA9IE5VTEw7Ci0gIGZpbHRlci0+bmNoYW5uZWxzID0gMDsKLQotICBnX211dGV4X2luaXQgKCZmaWx0ZXItPmxvY2spOwotfQotCi0vKiBFdmFsdWF0ZSB0aGUgdHJhbnNmZXIgZnVuY3Rpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUlSCi0gKiBjb2VmZmljaWVudHMgYXQgKHpyICsgemkqSSleLTEgYW5kIHJldHVybiB0aGUgbWFnbml0dWRlICovCi1nZG91YmxlCi1nc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2NhbGN1bGF0ZV9nYWluIChnZG91YmxlICogYSwgZ3VpbnQgbmEsIGdkb3VibGUgKiBiLAotICAgIGd1aW50IG5iLCBnZG91YmxlIHpyLCBnZG91YmxlIHppKQotewotICBnZG91YmxlIHN1bV9hciwgc3VtX2FpOwotICBnZG91YmxlIHN1bV9iciwgc3VtX2JpOwotICBnZG91YmxlIGdhaW5fciwgZ2Fpbl9pOwotCi0gIGdkb3VibGUgc3VtX3Jfb2xkOwotICBnZG91YmxlIHN1bV9pX29sZDsKLQotICBnaW50IGk7Ci0KLSAgc3VtX2FyID0gYVtuYSAtIDFdOwotICBzdW1fYWkgPSAwLjA7Ci0gIGZvciAoaSA9IG5hIC0gMjsgaSA+PSAwOyBpLS0pIHsKLSAgICBzdW1fcl9vbGQgPSBzdW1fYXI7Ci0gICAgc3VtX2lfb2xkID0gc3VtX2FpOwotCi0gICAgc3VtX2FyID0gKHN1bV9yX29sZCAqIHpyIC0gc3VtX2lfb2xkICogemkpICsgYVtpXTsKLSAgICBzdW1fYWkgPSAoc3VtX3Jfb2xkICogemkgKyBzdW1faV9vbGQgKiB6cikgKyAwLjA7Ci0gIH0KLQotICBzdW1fYnIgPSBiW25iIC0gMV07Ci0gIHN1bV9iaSA9IDAuMDsKLSAgZm9yIChpID0gbmIgLSAyOyBpID49IDA7IGktLSkgewotICAgIHN1bV9yX29sZCA9IHN1bV9icjsKLSAgICBzdW1faV9vbGQgPSBzdW1fYmk7Ci0KLSAgICBzdW1fYnIgPSAoc3VtX3Jfb2xkICogenIgLSBzdW1faV9vbGQgKiB6aSkgKyBiW2ldOwotICAgIHN1bV9iaSA9IChzdW1fcl9vbGQgKiB6aSArIHN1bV9pX29sZCAqIHpyKSArIDAuMDsKLSAgfQotCi0gIGdhaW5fciA9Ci0gICAgICAoc3VtX2JyICogc3VtX2FyICsgc3VtX2JpICogc3VtX2FpKSAvIChzdW1fYXIgKiBzdW1fYXIgKyBzdW1fYWkgKiBzdW1fYWkpOwotICBnYWluX2kgPQotICAgICAgKHN1bV9iaSAqIHN1bV9hciAtIHN1bV9iciAqIHN1bV9haSkgLyAoc3VtX2FyICogc3VtX2FyICsgc3VtX2FpICogc3VtX2FpKTsKLQotICByZXR1cm4gKHNxcnQgKGdhaW5fciAqIGdhaW5fciArIGdhaW5faSAqIGdhaW5faSkpOwotfQotCi12b2lkCi1nc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3NldF9jb2VmZmljaWVudHMgKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyICogZmlsdGVyLAotICAgIGdkb3VibGUgKiBhLCBndWludCBuYSwgZ2RvdWJsZSAqIGIsIGd1aW50IG5iKQotewotICBndWludCBpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BVURJT19GWF9CQVNFX0lJUl9GSUxURVIgKGZpbHRlcikpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmEpOwotICBnX2ZyZWUgKGZpbHRlci0+Yik7Ci0KLSAgZmlsdGVyLT5hID0gZmlsdGVyLT5iID0gTlVMTDsKLQotICBpZiAoZmlsdGVyLT5jaGFubmVscykgewotICAgIEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2hhbm5lbEN0eCAqY3R4OwotICAgIGdib29sZWFuIGZyZWUgPSAobmEgIT0gZmlsdGVyLT5uYSB8fCBuYiAhPSBmaWx0ZXItPm5iKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXItPm5jaGFubmVsczsgaSsrKSB7Ci0gICAgICBjdHggPSAmZmlsdGVyLT5jaGFubmVsc1tpXTsKLQotICAgICAgaWYgKGZyZWUpCi0gICAgICAgIGdfZnJlZSAoY3R4LT54KTsKLSAgICAgIGVsc2UKLSAgICAgICAgbWVtc2V0IChjdHgtPngsIDAsIGZpbHRlci0+bmIgKiBzaXplb2YgKGdkb3VibGUpKTsKLQotICAgICAgaWYgKGZyZWUpCi0gICAgICAgIGdfZnJlZSAoY3R4LT55KTsKLSAgICAgIGVsc2UKLSAgICAgICAgbWVtc2V0IChjdHgtPnksIDAsIGZpbHRlci0+bmEgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgICB9Ci0KLSAgICBnX2ZyZWUgKGZpbHRlci0+Y2hhbm5lbHMpOwotICAgIGZpbHRlci0+Y2hhbm5lbHMgPSBOVUxMOwotICB9Ci0KLSAgZmlsdGVyLT5uYSA9IG5hOwotICBmaWx0ZXItPm5iID0gbmI7Ci0KLSAgZmlsdGVyLT5hID0gYTsKLSAgZmlsdGVyLT5iID0gYjsKLQotICBpZiAoZmlsdGVyLT5uY2hhbm5lbHMgJiYgIWZpbHRlci0+Y2hhbm5lbHMpIHsKLSAgICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNoYW5uZWxDdHggKmN0eDsKLQotICAgIGZpbHRlci0+Y2hhbm5lbHMgPQotICAgICAgICBnX25ldzAgKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2hhbm5lbEN0eCwgZmlsdGVyLT5uY2hhbm5lbHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXItPm5jaGFubmVsczsgaSsrKSB7Ci0gICAgICBjdHggPSAmZmlsdGVyLT5jaGFubmVsc1tpXTsKLQotICAgICAgY3R4LT54ID0gZ19uZXcwIChnZG91YmxlLCBmaWx0ZXItPm5iKTsKLSAgICAgIGN0eC0+eSA9IGdfbmV3MCAoZ2RvdWJsZSwgZmlsdGVyLT5uYSk7Ci0gICAgfQotICB9Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZmaWx0ZXItPmxvY2spOwotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19meF9iYXNlX2lpcl9maWx0ZXJfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlciAqZmlsdGVyID0gR1NUX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUiAoYmFzZSk7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIGdpbnQgY2hhbm5lbHM7Ci0KLSAgZ19tdXRleF9sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgc3dpdGNoIChHU1RfQVVESU9fSU5GT19GT1JNQVQgKGluZm8pKSB7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0YzMjoKLSAgICAgIGZpbHRlci0+cHJvY2VzcyA9IChHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlclByb2Nlc3NGdW5jKQotICAgICAgICAgIHByb2Nlc3NfMzI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjY0OgotICAgICAgZmlsdGVyLT5wcm9jZXNzID0gKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyUHJvY2Vzc0Z1bmMpCi0gICAgICAgICAgcHJvY2Vzc182NDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbyk7Ci0KLSAgaWYgKGNoYW5uZWxzICE9IGZpbHRlci0+bmNoYW5uZWxzKSB7Ci0gICAgZ3VpbnQgaTsKLSAgICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNoYW5uZWxDdHggKmN0eDsKLQotICAgIGlmIChmaWx0ZXItPmNoYW5uZWxzKSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsdGVyLT5uY2hhbm5lbHM7IGkrKykgewotICAgICAgICBjdHggPSAmZmlsdGVyLT5jaGFubmVsc1tpXTsKLQotICAgICAgICBnX2ZyZWUgKGN0eC0+eCk7Ci0gICAgICAgIGdfZnJlZSAoY3R4LT55KTsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAoZmlsdGVyLT5jaGFubmVscyk7Ci0gICAgfQotCi0gICAgZmlsdGVyLT5jaGFubmVscyA9IGdfbmV3MCAoR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXJDaGFubmVsQ3R4LCBjaGFubmVscyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHsKLSAgICAgIGN0eCA9ICZmaWx0ZXItPmNoYW5uZWxzW2ldOwotCi0gICAgICBjdHgtPnggPSBnX25ldzAgKGdkb3VibGUsIGZpbHRlci0+bmIpOwotICAgICAgY3R4LT55ID0gZ19uZXcwIChnZG91YmxlLCBmaWx0ZXItPm5hKTsKLSAgICB9Ci0gICAgZmlsdGVyLT5uY2hhbm5lbHMgPSBjaGFubmVsczsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBnZG91YmxlCi1wcm9jZXNzIChHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlciAqIGZpbHRlciwKLSAgICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNoYW5uZWxDdHggKiBjdHgsIGdkb3VibGUgeDApCi17Ci0gIGdkb3VibGUgdmFsID0gZmlsdGVyLT5iWzBdICogeDA7Ci0gIGdpbnQgaSwgajsKLQotICBmb3IgKGkgPSAxLCBqID0gY3R4LT54X3BvczsgaSA8IGZpbHRlci0+bmI7IGkrKykgewotICAgIHZhbCArPSBmaWx0ZXItPmJbaV0gKiBjdHgtPnhbal07Ci0gICAgai0tOwotICAgIGlmIChqIDwgMCkKLSAgICAgIGogPSBmaWx0ZXItPm5iIC0gMTsKLSAgfQotCi0gIGZvciAoaSA9IDEsIGogPSBjdHgtPnlfcG9zOyBpIDwgZmlsdGVyLT5uYTsgaSsrKSB7Ci0gICAgdmFsIC09IGZpbHRlci0+YVtpXSAqIGN0eC0+eVtqXTsKLSAgICBqLS07Ci0gICAgaWYgKGogPCAwKQotICAgICAgaiA9IGZpbHRlci0+bmEgLSAxOwotICB9Ci0gIHZhbCAvPSBmaWx0ZXItPmFbMF07Ci0KLSAgaWYgKGN0eC0+eCkgewotICAgIGN0eC0+eF9wb3MrKzsKLSAgICBpZiAoY3R4LT54X3BvcyA+PSBmaWx0ZXItPm5iKQotICAgICAgY3R4LT54X3BvcyA9IDA7Ci0gICAgY3R4LT54W2N0eC0+eF9wb3NdID0geDA7Ci0gIH0KLSAgaWYgKGN0eC0+eSkgewotICAgIGN0eC0+eV9wb3MrKzsKLSAgICBpZiAoY3R4LT55X3BvcyA+PSBmaWx0ZXItPm5hKQotICAgICAgY3R4LT55X3BvcyA9IDA7Ci0KLSAgICBjdHgtPnlbY3R4LT55X3Bvc10gPSB2YWw7Ci0gIH0KLQotICByZXR1cm4gdmFsOwotfQotCi0jZGVmaW5lIERFRklORV9QUk9DRVNTX0ZVTkMod2lkdGgsY3R5cGUpIFwKLXN0YXRpYyB2b2lkIFwKLXByb2Nlc3NfIyN3aWR0aCAoR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXIgKiBmaWx0ZXIsIFwKLSAgICBnIyNjdHlwZSAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKSBcCi17IFwKLSAgZ2ludCBpLCBqLCBjaGFubmVscyA9IGZpbHRlci0+bmNoYW5uZWxzOyBcCi0gIGdkb3VibGUgdmFsOyBcCi0gIFwKLSAgZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzIC8gY2hhbm5lbHM7IGkrKykgeyBcCi0gICAgZm9yIChqID0gMDsgaiA8IGNoYW5uZWxzOyBqKyspIHsgXAotICAgICAgdmFsID0gcHJvY2VzcyAoZmlsdGVyLCAmZmlsdGVyLT5jaGFubmVsc1tqXSwgKmRhdGEpOyBcCi0gICAgICAqZGF0YSsrID0gdmFsOyBcCi0gICAgfSBcCi0gIH0gXAotfQotCi1ERUZJTkVfUFJPQ0VTU19GVU5DICgzMiwgZmxvYXQpOwotREVGSU5FX1BST0NFU1NfRlVOQyAoNjQsIGRvdWJsZSk7Ci0KLSN1bmRlZiBERUZJTkVfUFJPQ0VTU19GVU5DCi0KLS8qIEdzdEJhc2VUcmFuc2Zvcm0gdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCi0gICAgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlciAqZmlsdGVyID0gR1NUX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUiAoYmFzZSk7Ci0gIGd1aW50IG51bV9zYW1wbGVzOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBzdHJlYW1fdGltZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmYmFzZS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyKSwgc3RyZWFtX3RpbWUpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgbnVtX3NhbXBsZXMgPSBtYXAuc2l6ZSAvIEdTVF9BVURJT19GSUxURVJfQlBTIChmaWx0ZXIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gIGlmIChmaWx0ZXItPmEgPT0gTlVMTCB8fCBmaWx0ZXItPmIgPT0gTlVMTCkgewotICAgIGdfd2Fybl9pZl9mYWlsIChmaWx0ZXItPmEgIT0gTlVMTCAmJiBmaWx0ZXItPmIgIT0gTlVMTCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0gIGZpbHRlci0+cHJvY2VzcyAoZmlsdGVyLCBtYXAuZGF0YSwgbnVtX3NhbXBsZXMpOwotICBnX211dGV4X3VubG9jayAoJmZpbHRlci0+bG9jayk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlKQotewotICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlciAqZmlsdGVyID0gR1NUX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUiAoYmFzZSk7Ci0gIGd1aW50IGNoYW5uZWxzID0gZmlsdGVyLT5uY2hhbm5lbHM7Ci0gIEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2hhbm5lbEN0eCAqY3R4OwotICBndWludCBpOwotCi0gIC8qIFJlc2V0IHRoZSBoaXN0b3J5IG9mIGlucHV0IGFuZCBvdXRwdXQgdmFsdWVzIGlmCi0gICAqIGFscmVhZHkgZXhpc3RpbmcgKi8KLSAgaWYgKGNoYW5uZWxzICYmIGZpbHRlci0+Y2hhbm5lbHMpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkrKykgewotICAgICAgY3R4ID0gJmZpbHRlci0+Y2hhbm5lbHNbaV07Ci0gICAgICBnX2ZyZWUgKGN0eC0+eCk7Ci0gICAgICBnX2ZyZWUgKGN0eC0+eSk7Ci0gICAgfQotICAgIGdfZnJlZSAoZmlsdGVyLT5jaGFubmVscyk7Ci0gIH0KLSAgZmlsdGVyLT5jaGFubmVscyA9IE5VTEw7Ci0gIGZpbHRlci0+bmNoYW5uZWxzID0gMDsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmggYi9nc3QvYXVkaW9meC9hdWRpb2Z4YmFzZWlpcmZpbHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzhhZTMxLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlvZnhiYXNlaWlyZmlsdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BVURJT19GWF9CQVNFX0lJUl9GSUxURVJfSF9fCi0jZGVmaW5lIF9fR1NUX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIgICAgICAgICAgICAoZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSLEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfSUlSX0ZJTFRFUikpCi0jZGVmaW5lIEdTVF9BVURJT19GWF9CQVNFX0lJUl9GSUxURVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIsR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVURJT19GWF9CQVNFX0lJUl9GSUxURVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIpKQotI2RlZmluZSBHU1RfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSAsR1NUX1RZUEVfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSLEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2xhc3MpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyIEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2xhc3MgR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXJDbGFzczsKLQotdHlwZWRlZiB2b2lkICgqR3N0QXVkaW9GWEJhc2VJSVJGaWx0ZXJQcm9jZXNzRnVuYykgKEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyICosIGd1aW50OCAqLCBndWludCk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdkb3VibGUgKng7Ci0gIGdpbnQgeF9wb3M7Ci0gIGdkb3VibGUgKnk7Ci0gIGdpbnQgeV9wb3M7Ci19IEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2hhbm5lbEN0eDsKLQotc3RydWN0IF9Hc3RBdWRpb0ZYQmFzZUlJUkZpbHRlcgotewotICBHc3RBdWRpb0ZpbHRlciBhdWRpb2ZpbHRlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlclByb2Nlc3NGdW5jIHByb2Nlc3M7Ci0KLSAgZ2RvdWJsZSAqYTsKLSAgZ3VpbnQgbmE7Ci0gIGdkb3VibGUgKmI7Ci0gIGd1aW50IG5iOwotICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNoYW5uZWxDdHggKmNoYW5uZWxzOwotICBndWludCBuY2hhbm5lbHM7Ci0KLSAgR011dGV4IGxvY2s7Ci19OwotCi1zdHJ1Y3QgX0dzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyQ2xhc3MKLXsKLSAgR3N0QXVkaW9GaWx0ZXJDbGFzcyBwYXJlbnQ7Ci19OwotCi1HVHlwZSBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2dldF90eXBlICh2b2lkKTsKLXZvaWQgZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zZXRfY29lZmZpY2llbnRzIChHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlciAqZmlsdGVyLCBnZG91YmxlICphLCBndWludCBuYSwgZ2RvdWJsZSAqYiwgZ3VpbnQgbmIpOwotZ2RvdWJsZSBnc3RfYXVkaW9fZnhfYmFzZV9paXJfZmlsdGVyX2NhbGN1bGF0ZV9nYWluIChnZG91YmxlICphLCBndWludCBuYSwgZ2RvdWJsZSAqYiwgZ3VpbnQgbmIsIGdkb3VibGUgenIsIGdkb3VibGUgemkpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYyBiL2dzdC9hdWRpb2Z4L2F1ZGlvaWlyZmlsdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNGYyMGMuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICogCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXVkaW9paXJmaWx0ZXIKLSAqCi0gKiBhdWRpb2lpcmZpbHRlciBpbXBsZW1lbnRzIGEgZ2VuZXJpYyBhdWRpbyA8dWxpbmsgdXJsPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0luZmluaXRlX2ltcHVsc2VfcmVzcG9uc2UiPklJUiBmaWx0ZXI8L3VsaW5rPi4gQmVmb3JlIHVzYWdlIHRoZQotICogImEiIGFuZCAiYiIgcHJvcGVydGllcyBoYXZlIHRvIGJlIHNldCB0byB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyB0aGF0Ci0gKiBzaG91bGQgYmUgdXNlZC4KLSAqCi0gKiBUaGUgZmlsdGVyIGNvZWZmaWNpZW50cyBkZXNjcmliZSB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBvZiB0aGUKLSAqIHRyYW5zZmVyIGZ1bmN0aW9uLgotICoKLSAqIFRvIGNoYW5nZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyB3aGVuZXZlciB0aGUgc2FtcGxpbmcgcmF0ZSBjaGFuZ2VzIHRoZQotICogInJhdGUtY2hhbmdlZCIgc2lnbmFsIGNhbiBiZSB1c2VkLiBUaGlzIHNob3VsZCBiZSBkb25lIGZvciBtb3N0Ci0gKiBJSVIgZmlsdGVycyBhcyB0aGV5J3JlIGRlcGVuZGluZyBvbiB0aGUgc2FtcGxpbmcgcmF0ZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBhcHBsaWNhdGlvbjwvdGl0bGU+Ci0gKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iQyI+Ci0gKiA8eGk6aW5jbHVkZSB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgcGFyc2U9InRleHQiIGhyZWY9Ii4uLy4uLy4uLy4uL3Rlc3RzL2V4YW1wbGVzL2F1ZGlvZngvaWlyZmlsdGVyLWV4YW1wbGUuYyIgLz4KLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2lpcmZpbHRlci5oIgotCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLWVudW0KLXsKLSAgU0lHTkFMX1JBVEVfQ0hBTkdFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0EsCi0gIFBST1BfQgotfTsKLQotc3RhdGljIGd1aW50IGdzdF9hdWRpb19paXJfZmlsdGVyX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwotCi0jZGVmaW5lIGdzdF9hdWRpb19paXJfZmlsdGVyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEF1ZGlvSUlSRmlsdGVyLCBnc3RfYXVkaW9faWlyX2ZpbHRlciwKLSAgICBHU1RfVFlQRV9BVURJT19GWF9CQVNFX0lJUl9GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfYXVkaW9faWlyX2ZpbHRlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9faWlyX2ZpbHRlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9faWlyX2ZpbHRlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9faWlyX2ZpbHRlcl9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBiYXNlLAotICAgIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pOwotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfY2xhc3NfaW5pdCAoR3N0QXVkaW9JSVJGaWx0ZXJDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RBdWRpb0ZpbHRlckNsYXNzICpmaWx0ZXJfY2xhc3MgPSAoR3N0QXVkaW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfZGVidWcsICJhdWRpb2lpcmZpbHRlciIsIDAsCi0gICAgICAiR2VuZXJpYyBhdWRpbyBJSVIgZmlsdGVyIHBsdWdpbiIpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19paXJfZmlsdGVyX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hdWRpb19paXJfZmlsdGVyX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQSwKLSAgICAgIGdfcGFyYW1fc3BlY192YWx1ZV9hcnJheSAoImEiLCAiQSIsCi0gICAgICAgICAgIkZpbHRlciBjb2VmZmljaWVudHMgKGRlbm9taW5hdG9yIG9mIHRyYW5zZmVyIGZ1bmN0aW9uKSIsCi0gICAgICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoIkNvZWZmaWNpZW50IiwgIkZpbHRlciBDb2VmZmljaWVudCIsCi0gICAgICAgICAgICAgICJGaWx0ZXIgY29lZmZpY2llbnQiLCAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLjAsCi0gICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQiwKLSAgICAgIGdfcGFyYW1fc3BlY192YWx1ZV9hcnJheSAoImIiLCAiQiIsCi0gICAgICAgICAgIkZpbHRlciBjb2VmZmljaWVudHMgKG51bWVyYXRvciBvZiB0cmFuc2ZlciBmdW5jdGlvbikiLAotICAgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJDb2VmZmljaWVudCIsICJGaWx0ZXIgQ29lZmZpY2llbnQiLAotICAgICAgICAgICAgICAiRmlsdGVyIGNvZWZmaWNpZW50IiwgLUdfTUFYRE9VQkxFLCBHX01BWERPVUJMRSwgMC4wLAotICAgICAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGZpbHRlcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfc2V0dXApOwotCi0gIC8qKgotICAgKiBHc3RBdWRpb0lJUkZpbHRlcjo6cmF0ZS1jaGFuZ2VkOgotICAgKiBAZmlsdGVyOiB0aGUgZmlsdGVyIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgKiBAcmF0ZTogdGhlIG5ldyBzYW1wbGluZyByYXRlCi0gICAqCi0gICAqIFdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBzYW1wbGluZyByYXRlIGNoYW5nZXMuIFRoZSBjYWxsYmFja3MKLSAgICogd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCBhbmQgcHJvY2Vzc2luZyB3aWxsCi0gICAqIHN0b3AgdW50aWwgdGhlIGV2ZW50IGlzIGhhbmRsZWQuCi0gICAqLwotICBnc3RfYXVkaW9faWlyX2ZpbHRlcl9zaWduYWxzW1NJR05BTF9SQVRFX0NIQU5HRURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJhdGUtY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RBdWRpb0lJUkZpbHRlckNsYXNzLCByYXRlX2NoYW5nZWQpLAotICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9JTlQpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiQXVkaW8gSUlSIGZpbHRlciIsICJGaWx0ZXIvRWZmZWN0L0F1ZGlvIiwKLSAgICAgICJHZW5lcmljIGF1ZGlvIElJUiBmaWx0ZXIgd2l0aCBjdXN0b20gZmlsdGVyIGtlcm5lbCIsCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9faWlyX2ZpbHRlcl91cGRhdGVfY29lZmZpY2llbnRzIChHc3RBdWRpb0lJUkZpbHRlciAqIHNlbGYsCi0gICAgR1ZhbHVlQXJyYXkgKiB2YSwgR1ZhbHVlQXJyYXkgKiB2YikKLXsKLSAgZ2RvdWJsZSAqYSA9IE5VTEwsICpiID0gTlVMTDsKLSAgZ3VpbnQgaTsKLQotICBpZiAodmEpIHsKLSAgICBpZiAoc2VsZi0+YSkKLSAgICAgIGdfdmFsdWVfYXJyYXlfZnJlZSAoc2VsZi0+YSk7Ci0KLSAgICBzZWxmLT5hID0gdmE7Ci0gIH0KLSAgaWYgKHZiKSB7Ci0gICAgaWYgKHNlbGYtPmIpCi0gICAgICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHNlbGYtPmIpOwotCi0gICAgc2VsZi0+YiA9IHZiOwotICB9Ci0KLSAgaWYgKHNlbGYtPmEgJiYgc2VsZi0+YS0+bl92YWx1ZXMgPiAwKSB7Ci0gICAgYSA9IGdfbmV3IChnZG91YmxlLCBzZWxmLT5hLT5uX3ZhbHVlcyk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+YS0+bl92YWx1ZXM7IGkrKykgewotICAgICAgR1ZhbHVlICp2ID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChzZWxmLT5hLCBpKTsKLSAgICAgIGFbaV0gPSBnX3ZhbHVlX2dldF9kb3VibGUgKHYpOwotICAgIH0KLSAgfQotCi0gIGlmIChzZWxmLT5iICYmIHNlbGYtPmItPm5fdmFsdWVzID4gMCkgewotICAgIGIgPSBnX25ldyAoZ2RvdWJsZSwgc2VsZi0+Yi0+bl92YWx1ZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5iLT5uX3ZhbHVlczsgaSsrKSB7Ci0gICAgICBHVmFsdWUgKnYgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKHNlbGYtPmIsIGkpOwotICAgICAgYltpXSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodik7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfaWlyX2ZpbHRlcl9zZXRfY29lZmZpY2llbnRzIChHU1RfQVVESU9fRlhfQkFTRV9JSVJfRklMVEVSCi0gICAgICAoc2VsZiksIGEsIChzZWxmLT5hKSA/IHNlbGYtPmEtPm5fdmFsdWVzIDogMCwgYiwKLSAgICAgIChzZWxmLT5iKSA/IHNlbGYtPmItPm5fdmFsdWVzIDogMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9faWlyX2ZpbHRlcl9pbml0IChHc3RBdWRpb0lJUkZpbHRlciAqIHNlbGYpCi17Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotICBHVmFsdWVBcnJheSAqYTsKLQotICBhID0gZ192YWx1ZV9hcnJheV9uZXcgKDEpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9ET1VCTEUpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2LCAxLjApOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYSwgJnYpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0KLSAgZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfdXBkYXRlX2NvZWZmaWNpZW50cyAoc2VsZiwgYSwgZ192YWx1ZV9hcnJheV9jb3B5IChhKSk7Ci0KLSAgZ19tdXRleF9pbml0ICgmc2VsZi0+bG9jayk7Ci19Ci0KLS8qIEdzdEF1ZGlvRmlsdGVyIHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi0KLS8qIGdldCBub3RpZmllZCBvZiBjYXBzIGFuZCBwbHVnIGluIHRoZSBjb3JyZWN0IHByb2Nlc3MgZnVuY3Rpb24gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0QXVkaW9JSVJGaWx0ZXIgKnNlbGYgPSBHU1RfQVVESU9fSUlSX0ZJTFRFUiAoYmFzZSk7Ci0gIGdpbnQgbmV3X3JhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKTsKLQotICBpZiAoR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChzZWxmKSAhPSBuZXdfcmF0ZSkgewotICAgIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChzZWxmKSwKLSAgICAgICAgZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfc2lnbmFsc1tTSUdOQUxfUkFURV9DSEFOR0VEXSwgMCwgbmV3X3JhdGUpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9BVURJT19GSUxURVJfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNldHVwIChiYXNlLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19paXJfZmlsdGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBdWRpb0lJUkZpbHRlciAqc2VsZiA9IEdTVF9BVURJT19JSVJfRklMVEVSIChvYmplY3QpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZzZWxmLT5sb2NrKTsKLQotICBpZiAoc2VsZi0+YSkKLSAgICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHNlbGYtPmEpOwotICBzZWxmLT5hID0gTlVMTDsKLSAgaWYgKHNlbGYtPmIpCi0gICAgZ192YWx1ZV9hcnJheV9mcmVlIChzZWxmLT5iKTsKLSAgc2VsZi0+YiA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvSUlSRmlsdGVyICpzZWxmID0gR1NUX0FVRElPX0lJUl9GSUxURVIgKG9iamVjdCk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0FVRElPX0lJUl9GSUxURVIgKHNlbGYpKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfdXBkYXRlX2NvZWZmaWNpZW50cyAoc2VsZiwgZ192YWx1ZV9kdXBfYm94ZWQgKHZhbHVlKSwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQjoKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgZ3N0X2F1ZGlvX2lpcl9maWx0ZXJfdXBkYXRlX2NvZWZmaWNpZW50cyAoc2VsZiwgTlVMTCwKLSAgICAgICAgICBnX3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9faWlyX2ZpbHRlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9JSVJGaWx0ZXIgKnNlbGYgPSBHU1RfQVVESU9fSUlSX0ZJTFRFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQToKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgc2VsZi0+YSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQjoKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgc2VsZi0+Yik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5oIGIvZ3N0L2F1ZGlvZngvYXVkaW9paXJmaWx0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzOWM1Yi4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb2lpcmZpbHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqIAotICovCi0KLSNpZm5kZWYgX19HU1RfQVVESU9fSUlSX0ZJTFRFUl9IX18KLSNkZWZpbmUgX19HU1RfQVVESU9fSUlSX0ZJTFRFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotI2luY2x1ZGUgImF1ZGlvZnhiYXNlaWlyZmlsdGVyLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9BVURJT19JSVJfRklMVEVSIFwKLSAgKGdzdF9hdWRpb19paXJfZmlsdGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BVURJT19JSVJfRklMVEVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQVVESU9fSUlSX0ZJTFRFUixHc3RBdWRpb0lJUkZpbHRlcikpCi0jZGVmaW5lIEdTVF9BVURJT19JSVJfRklMVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FVRElPX0lJUl9GSUxURVIsR3N0QXVkaW9JSVJGaWx0ZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVURJT19JSVJfRklMVEVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVVESU9fSUlSX0ZJTFRFUikpCi0jZGVmaW5lIEdTVF9JU19BVURJT19JSVJfRklMVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FVRElPX0lJUl9GSUxURVIpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXVkaW9JSVJGaWx0ZXIgR3N0QXVkaW9JSVJGaWx0ZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QXVkaW9JSVJGaWx0ZXJDbGFzcyBHc3RBdWRpb0lJUkZpbHRlckNsYXNzOwotCi0vKioKLSAqIEdzdEF1ZGlvSUlSRmlsdGVyOgotICoKLSAqIE9wYXF1ZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RBdWRpb0lJUkZpbHRlciB7Ci0gIEdzdEF1ZGlvRlhCYXNlSUlSRmlsdGVyIHBhcmVudDsKLQotICBHVmFsdWVBcnJheSAqYSwgKmI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgR011dGV4IGxvY2s7Ci19OwotCi1zdHJ1Y3QgX0dzdEF1ZGlvSUlSRmlsdGVyQ2xhc3MgewotICBHc3RBdWRpb0ZYQmFzZUlJUkZpbHRlckNsYXNzIHBhcmVudDsKLQotICB2b2lkICgqcmF0ZV9jaGFuZ2VkKSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdpbnQgcmF0ZSk7Ci19OwotCi1HVHlwZSBnc3RfYXVkaW9faWlyX2ZpbHRlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BVURJT19JSVJfRklMVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYyBiL2dzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OGRkMTAuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXVkaW9pbnZlcnQKLSAqCi0gKiBTd2FwcyB1cHBlciBhbmQgbG93ZXIgaGFsZiBvZiBhdWRpbyBzYW1wbGVzLiBNaXhpbmcgYW4gaW52ZXJ0ZWQgc2FtcGxlIG9uIHRvcCBvZgotICogdGhlIG9yaWdpbmFsIHdpdGggYSBzbGlnaHQgZGVsYXkgY2FuIHByb2R1Y2UgZWZmZWN0cyB0aGF0IHNvdW5kIGxpa2UgcmVzb25hbmNlLgotICogQ3JlYXRpbmcgYSBzdGVyZW8gc2FtcGxlIGZyb20gYSBtb25vIHNvdXJjZSwgd2l0aCBvbmUgY2hhbm5lbCBpbnZlcnRlZCBwcm9kdWNlcyB3aWRlLXN0ZXJlbyBzb3VuZHMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyB3YXZlPXNhdyAhIGF1ZGlvaW52ZXJ0IGRlZ3JlZT0wLjQgISBhbHNhc2luawotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj0ibWVsbzEub2dnIiAhIG9nZ2RlbXV4ICEgdm9yYmlzZGVjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9pbnZlcnQgZGVncmVlPTAuNCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgd2F2ZT1zYXcgISBhdWRpb2NvbnZlcnQgISBhdWRpb2ludmVydCBkZWdyZWU9MC40ICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2ludmVydC5oIgotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfYXVkaW9faW52ZXJ0X2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi0vKiBGaWx0ZXIgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9ERUdSRUUKLX07Ci0KLSNkZWZpbmUgQUxMT1dFRF9DQVBTIFwKLSAgICAiYXVkaW8veC1yYXcsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgZm9ybWF0PShzdHJpbmcpIHsiR1NUX0FVRElPX05FKFMxNikiLCJHU1RfQVVESU9fTkUoRjMyKSJ9LCIgICAgICBcCi0gICAgIiByYXRlPShpbnQpWzEsTUFYXSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWxzPShpbnQpWzEsTUFYXSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgbGF5b3V0PShzdHJpbmcpIHtpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkfSIKLQotR19ERUZJTkVfVFlQRSAoR3N0QXVkaW9JbnZlcnQsIGdzdF9hdWRpb19pbnZlcnQsIEdTVF9UWVBFX0FVRElPX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19pbnZlcnRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2ludmVydF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9faW52ZXJ0X3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGZpbHRlciwKLSAgICBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotCi1zdGF0aWMgdm9pZCBnc3RfYXVkaW9faW52ZXJ0X3RyYW5zZm9ybV9pbnQgKEdzdEF1ZGlvSW52ZXJ0ICogZmlsdGVyLAotICAgIGdpbnQxNiAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2Zsb2F0IChHc3RBdWRpb0ludmVydCAqIGZpbHRlciwKLSAgICBnZmxvYXQgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcyk7Ci0KLS8qIEdPYmplY3Qgdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19pbnZlcnRfY2xhc3NfaW5pdCAoR3N0QXVkaW9JbnZlcnRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2ludmVydF9kZWJ1ZywgImF1ZGlvaW52ZXJ0IiwgMCwKLSAgICAgICJhdWRpb2ludmVydCBlbGVtZW50Iik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19pbnZlcnRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9faW52ZXJ0X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFR1JFRSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImRlZ3JlZSIsICJEZWdyZWUiLAotICAgICAgICAgICJEZWdyZWUgb2YgaW52ZXJzaW9uIiwgMC4wLCAxLjAsCi0gICAgICAgICAgMC4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiQXVkaW8gaW52ZXJzaW9uIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L0F1ZGlvIiwKLSAgICAgICJTd2FwcyB1cHBlciBhbmQgbG93ZXIgaGFsZiBvZiBhdWRpbyBzYW1wbGVzIiwKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Iik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBTExPV0VEX0NBUFMpOwotICBnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzIChHU1RfQVVESU9fRklMVEVSX0NMQVNTIChrbGFzcyksCi0gICAgICBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpLT50cmFuc2Zvcm1faXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19pbnZlcnRfdHJhbnNmb3JtX2lwKTsKLSAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZBTFNFOwotCi0gIEdTVF9BVURJT19GSUxURVJfQ0xBU1MgKGtsYXNzKS0+c2V0dXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19pbnZlcnRfc2V0dXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2ludmVydF9pbml0IChHc3RBdWRpb0ludmVydCAqIGZpbHRlcikKLXsKLSAgZmlsdGVyLT5kZWdyZWUgPSAwLjA7Ci0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfaW5fcGxhY2UgKEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKSwgVFJVRSk7Ci0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGZpbHRlciksIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2ludmVydF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9JbnZlcnQgKmZpbHRlciA9IEdTVF9BVURJT19JTlZFUlQgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFR1JFRToKLSAgICAgIGZpbHRlci0+ZGVncmVlID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKSwKLSAgICAgICAgICBmaWx0ZXItPmRlZ3JlZSA9PSAwLjApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2ludmVydF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9JbnZlcnQgKmZpbHRlciA9IEdTVF9BVURJT19JTlZFUlQgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFR1JFRToKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgZmlsdGVyLT5kZWdyZWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19pbnZlcnRfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0QXVkaW9JbnZlcnQgKmZpbHRlciA9IEdTVF9BVURJT19JTlZFUlQgKGJhc2UpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHN3aXRjaCAoR1NUX0FVRElPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTY6Ci0gICAgICBmaWx0ZXItPnByb2Nlc3MgPSAoR3N0QXVkaW9JbnZlcnRQcm9jZXNzRnVuYykKLSAgICAgICAgICBnc3RfYXVkaW9faW52ZXJ0X3RyYW5zZm9ybV9pbnQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyOgotICAgICAgZmlsdGVyLT5wcm9jZXNzID0gKEdzdEF1ZGlvSW52ZXJ0UHJvY2Vzc0Z1bmMpCi0gICAgICAgICAgZ3N0X2F1ZGlvX2ludmVydF90cmFuc2Zvcm1fZmxvYXQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2ludmVydF90cmFuc2Zvcm1faW50IChHc3RBdWRpb0ludmVydCAqIGZpbHRlciwKLSAgICBnaW50MTYgKiBkYXRhLCBndWludCBudW1fc2FtcGxlcykKLXsKLSAgZ2ludCBpOwotICBnZmxvYXQgZHJ5ID0gMS4wIC0gZmlsdGVyLT5kZWdyZWU7Ci0gIGdsb25nIHZhbDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgewotICAgIHZhbCA9ICgqZGF0YSkgKiBkcnkgKyAoLTEgLSAoKmRhdGEpKSAqIGZpbHRlci0+ZGVncmVlOwotICAgICpkYXRhKysgPSAoZ2ludDE2KSBDTEFNUCAodmFsLCBHX01JTklOVDE2LCBHX01BWElOVDE2KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2ludmVydF90cmFuc2Zvcm1fZmxvYXQgKEdzdEF1ZGlvSW52ZXJ0ICogZmlsdGVyLAotICAgIGdmbG9hdCAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKQotewotICBnaW50IGk7Ci0gIGdmbG9hdCBkcnkgPSAxLjAgLSBmaWx0ZXItPmRlZ3JlZTsKLSAgZ2xvbmcgdmFsOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7Ci0gICAgdmFsID0gKCpkYXRhKSAqIGRyeSAtICgqZGF0YSkgKiBmaWx0ZXItPmRlZ3JlZTsKLSAgICAqZGF0YSsrID0gdmFsOwotICB9Ci19Ci0KLS8qIEdzdEJhc2VUcmFuc2Zvcm0gdm1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXVkaW9faW52ZXJ0X3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0QXVkaW9JbnZlcnQgKmZpbHRlciA9IEdTVF9BVURJT19JTlZFUlQgKGJhc2UpOwotICBndWludCBudW1fc2FtcGxlczsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgc3RyZWFtX3RpbWU7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotICBzdHJlYW1fdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJhc2UtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJzeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtX3RpbWUpKQotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGZpbHRlciksIHN0cmVhbV90aW1lKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKSkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgbnVtX3NhbXBsZXMgPSBtYXAuc2l6ZSAvIEdTVF9BVURJT19GSUxURVJfQlBTIChmaWx0ZXIpOwotCi0gIGZpbHRlci0+cHJvY2VzcyAoZmlsdGVyLCBtYXAuZGF0YSwgbnVtX3NhbXBsZXMpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvaW52ZXJ0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjViM2YuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9pbnZlcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FVRElPX0lOVkVSVF9IX18KLSNkZWZpbmUgX19HU1RfQVVESU9fSU5WRVJUX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9BVURJT19JTlZFUlQgICAgICAgICAgICAoZ3N0X2F1ZGlvX2ludmVydF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fSU5WRVJUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQVVESU9fSU5WRVJULEdzdEF1ZGlvSW52ZXJ0KSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0lOVkVSVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FVRElPX0lOVkVSVCkpCi0jZGVmaW5lIEdTVF9BVURJT19JTlZFUlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19JTlZFUlQsR3N0QXVkaW9JbnZlcnRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVURJT19JTlZFUlRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19JTlZFUlQpKQotI2RlZmluZSBHU1RfQVVESU9fSU5WRVJUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSAsR1NUX1RZUEVfQVVESU9fSU5WRVJULEdzdEF1ZGlvSW52ZXJ0Q2xhc3MpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvSW52ZXJ0IEdzdEF1ZGlvSW52ZXJ0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvSW52ZXJ0Q2xhc3MgR3N0QXVkaW9JbnZlcnRDbGFzczsKLQotdHlwZWRlZiB2b2lkICgqR3N0QXVkaW9JbnZlcnRQcm9jZXNzRnVuYykgKEdzdEF1ZGlvSW52ZXJ0ICosIGd1aW50OCAqLCBndWludCk7Ci0KLXN0cnVjdCBfR3N0QXVkaW9JbnZlcnQKLXsKLSAgR3N0QXVkaW9GaWx0ZXIgYXVkaW9maWx0ZXI7Ci0KLSAgZ2Zsb2F0IGRlZ3JlZTsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHc3RBdWRpb0ludmVydFByb2Nlc3NGdW5jIHByb2Nlc3M7Ci19OwotCi1zdHJ1Y3QgX0dzdEF1ZGlvSW52ZXJ0Q2xhc3MKLXsKLSAgR3N0QXVkaW9GaWx0ZXJDbGFzcyBwYXJlbnQ7Ci19OwotCi1HVHlwZSBnc3RfYXVkaW9faW52ZXJ0X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9BVURJT19JTlZFUlRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2thcmFva2UuYyBiL2dzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjY5N2NhLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYzICswLDAgQEAKLS8qIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdWRpb2thcmFva2UKLSAqCi0gKiBSZW1vdmUgdGhlIHZvaWNlIGZyb20gYXVkaW8gYnkgZmlsdGVyaW5nIHRoZSBjZW50ZXIgY2hhbm5lbC4KLSAqIFRoaXMgcGx1Z2luIGlzIHVzZWZ1bCBmb3Iga2FyYW9rZSBhcHBsaWNhdGlvbnMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249c29uZy5vZ2cgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlva2FyYW9rZSAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi0jaW5jbHVkZSAiYXVkaW9rYXJhb2tlLmgiCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9hdWRpb19rYXJhb2tlX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi0vKiBGaWx0ZXIgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfTEVWRUwJCTEuMAotI2RlZmluZSBERUZBVUxUX01PTk9fTEVWRUwJMS4wCi0jZGVmaW5lIERFRkFVTFRfRklMVEVSX0JBTkQJMjIwLjAKLSNkZWZpbmUgREVGQVVMVF9GSUxURVJfV0lEVEgJMTAwLjAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTEVWRUwsCi0gIFBST1BfTU9OT19MRVZFTCwKLSAgUFJPUF9GSUxURVJfQkFORCwKLSAgUFJPUF9GSUxURVJfV0lEVEgKLX07Ci0KLSNkZWZpbmUgQUxMT1dFRF9DQVBTIFwKLSAgICAiYXVkaW8veC1yYXcsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGZvcm1hdD0oc3RyaW5nKXsiR1NUX0FVRElPX05FKFMxNikiLCJHU1RfQVVESU9fTkUoRjMyKSJ9LCIgIFwKLSAgICAiIHJhdGU9KGludClbMSxNQVhdLCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWxzPShpbnQpMiwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDMsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGxheW91dD0oc3RyaW5nKSBpbnRlcmxlYXZlZCIKLQotR19ERUZJTkVfVFlQRSAoR3N0QXVkaW9LYXJhb2tlLCBnc3RfYXVkaW9fa2FyYW9rZSwgR1NUX1RZUEVfQVVESU9fRklMVEVSKTsKLQotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2thcmFva2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2thcmFva2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1ZGlvX2thcmFva2Vfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogZmlsdGVyLAotICAgIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F1ZGlvX2thcmFva2VfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotCi1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fa2FyYW9rZV90cmFuc2Zvcm1faW50IChHc3RBdWRpb0thcmFva2UgKiBmaWx0ZXIsCi0gICAgZ2ludDE2ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX2thcmFva2VfdHJhbnNmb3JtX2Zsb2F0IChHc3RBdWRpb0thcmFva2UgKiBmaWx0ZXIsCi0gICAgZ2Zsb2F0ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotCi0vKiBHT2JqZWN0IHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fa2FyYW9rZV9jbGFzc19pbml0IChHc3RBdWRpb0thcmFva2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX2thcmFva2VfZGVidWcsICJhdWRpb2thcmFva2UiLCAwLAotICAgICAgImF1ZGlva2FyYW9rZSBlbGVtZW50Iik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb19rYXJhb2tlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2F1ZGlvX2thcmFva2VfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEVWRUwsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJsZXZlbCIsICJMZXZlbCIsCi0gICAgICAgICAgIkxldmVsIG9mIHRoZSBlZmZlY3QgKDEuMCA9IGZ1bGwpIiwgMC4wLCAxLjAsIERFRkFVTFRfTEVWRUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9OT19MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoIm1vbm8tbGV2ZWwiLCAiTW9ubyBMZXZlbCIsCi0gICAgICAgICAgIkxldmVsIG9mIHRoZSBtb25vIGNoYW5uZWwgKDEuMCA9IGZ1bGwpIiwgMC4wLCAxLjAsIERFRkFVTFRfTEVWRUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRklMVEVSX0JBTkQsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJmaWx0ZXItYmFuZCIsICJGaWx0ZXIgQmFuZCIsCi0gICAgICAgICAgIlRoZSBGcmVxdWVuY3kgYmFuZCBvZiB0aGUgZmlsdGVyIiwgMC4wLCA0NDEuMCwgREVGQVVMVF9GSUxURVJfQkFORCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GSUxURVJfV0lEVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJmaWx0ZXItd2lkdGgiLCAiRmlsdGVyIFdpZHRoIiwKLSAgICAgICAgICAiVGhlIEZyZXF1ZW5jeSB3aWR0aCBvZiB0aGUgZmlsdGVyIiwgMC4wLCAxMDAuMCwgREVGQVVMVF9GSUxURVJfV0lEVEgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBdWRpb0thcmFva2UiLAotICAgICAgIkZpbHRlci9FZmZlY3QvQXVkaW8iLAotICAgICAgIlJlbW92ZXMgdm9pY2UgZnJvbSBzb3VuZCIsICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQUxMT1dFRF9DQVBTKTsKLSAgZ3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcyAoR1NUX0FVRElPX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLAotICAgICAgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGtsYXNzKS0+dHJhbnNmb3JtX2lwID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXVkaW9fa2FyYW9rZV90cmFuc2Zvcm1faXApOwotICBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGtsYXNzKS0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7Ci0KLSAgR1NUX0FVRElPX0ZJTFRFUl9DTEFTUyAoa2xhc3MpLT5zZXR1cCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX2thcmFva2Vfc2V0dXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2thcmFva2VfaW5pdCAoR3N0QXVkaW9LYXJhb2tlICogZmlsdGVyKQotewotICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2luX3BsYWNlIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGZpbHRlciksIFRSVUUpOwotICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAoR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpLCBUUlVFKTsKLQotICBmaWx0ZXItPmxldmVsID0gREVGQVVMVF9MRVZFTDsKLSAgZmlsdGVyLT5tb25vX2xldmVsID0gREVGQVVMVF9NT05PX0xFVkVMOwotICBmaWx0ZXItPmZpbHRlcl9iYW5kID0gREVGQVVMVF9GSUxURVJfQkFORDsKLSAgZmlsdGVyLT5maWx0ZXJfd2lkdGggPSBERUZBVUxUX0ZJTFRFUl9XSURUSDsKLX0KLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9maWx0ZXIgKEdzdEF1ZGlvS2FyYW9rZSAqIGZpbHRlciwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgZ2Zsb2F0IEEsIEIsIEM7Ci0gIGdpbnQgcmF0ZTsKLQotICBpZiAoaW5mbykgewotICAgIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKTsKLSAgfSBlbHNlIHsKLSAgICByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChmaWx0ZXIpOwotICB9Ci0KLSAgaWYgKHJhdGUgPT0gMCkKLSAgICByZXR1cm47Ci0KLSAgQyA9IGV4cCAoLTIgKiBHX1BJICogZmlsdGVyLT5maWx0ZXJfd2lkdGggLyByYXRlKTsKLSAgQiA9IC00ICogQyAvICgxICsgQykgKiBjb3MgKDIgKiBHX1BJICogZmlsdGVyLT5maWx0ZXJfYmFuZCAvIHJhdGUpOwotICBBID0gc3FydCAoMSAtIEIgKiBCIC8gKDQgKiBDKSkgKiAoMSAtIEMpOwotCi0gIGZpbHRlci0+QSA9IEE7Ci0gIGZpbHRlci0+QiA9IEI7Ci0gIGZpbHRlci0+QyA9IEM7Ci0gIGZpbHRlci0+eTEgPSAwLjA7Ci0gIGZpbHRlci0+eTIgPSAwLjA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fa2FyYW9rZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9LYXJhb2tlICpmaWx0ZXI7Ci0KLSAgZmlsdGVyID0gR1NUX0FVRElPX0tBUkFPS0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xFVkVMOgotICAgICAgZmlsdGVyLT5sZXZlbCA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTU9OT19MRVZFTDoKLSAgICAgIGZpbHRlci0+bW9ub19sZXZlbCA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRklMVEVSX0JBTkQ6Ci0gICAgICBmaWx0ZXItPmZpbHRlcl9iYW5kID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIHVwZGF0ZV9maWx0ZXIgKGZpbHRlciwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRklMVEVSX1dJRFRIOgotICAgICAgZmlsdGVyLT5maWx0ZXJfd2lkdGggPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgdXBkYXRlX2ZpbHRlciAoZmlsdGVyLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19rYXJhb2tlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdWRpb0thcmFva2UgKmZpbHRlcjsKLQotICBmaWx0ZXIgPSBHU1RfQVVESU9fS0FSQU9LRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEVWRUw6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+bGV2ZWwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PTk9fTEVWRUw6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+bW9ub19sZXZlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRklMVEVSX0JBTkQ6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIGZpbHRlci0+ZmlsdGVyX2JhbmQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZJTFRFUl9XSURUSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgZmlsdGVyLT5maWx0ZXJfd2lkdGgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19rYXJhb2tlX3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIEdzdEF1ZGlvS2FyYW9rZSAqZmlsdGVyID0gR1NUX0FVRElPX0tBUkFPS0UgKGJhc2UpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHN3aXRjaCAoR1NUX0FVRElPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTY6Ci0gICAgICBmaWx0ZXItPnByb2Nlc3MgPSAoR3N0QXVkaW9LYXJhb2tlUHJvY2Vzc0Z1bmMpCi0gICAgICAgICAgZ3N0X2F1ZGlvX2thcmFva2VfdHJhbnNmb3JtX2ludDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzI6Ci0gICAgICBmaWx0ZXItPnByb2Nlc3MgPSAoR3N0QXVkaW9LYXJhb2tlUHJvY2Vzc0Z1bmMpCi0gICAgICAgICAgZ3N0X2F1ZGlvX2thcmFva2VfdHJhbnNmb3JtX2Zsb2F0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgdXBkYXRlX2ZpbHRlciAoZmlsdGVyLCBpbmZvKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2thcmFva2VfdHJhbnNmb3JtX2ludCAoR3N0QXVkaW9LYXJhb2tlICogZmlsdGVyLAotICAgIGdpbnQxNiAqIGRhdGEsIGd1aW50IG51bV9zYW1wbGVzKQotewotICBnaW50IGksIGwsIHIsIG8sIHg7Ci0gIGdpbnQgY2hhbm5lbHM7Ci0gIGdkb3VibGUgeTsKLSAgZ2ludCBsZXZlbDsKLQotICBjaGFubmVscyA9IEdTVF9BVURJT19GSUxURVJfQ0hBTk5FTFMgKGZpbHRlcik7Ci0gIGxldmVsID0gZmlsdGVyLT5sZXZlbCAqIDI1NjsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkgKz0gY2hhbm5lbHMpIHsKLSAgICAvKiBnZXQgbGVmdCBhbmQgcmlnaHQgaW5wdXRzICovCi0gICAgbCA9IGRhdGFbaV07Ci0gICAgciA9IGRhdGFbaSArIDFdOwotICAgIC8qIGRvIGZpbHRlcmluZyAqLwotICAgIHggPSAobCArIHIpIC8gMjsKLSAgICB5ID0gKGZpbHRlci0+QSAqIHggLSBmaWx0ZXItPkIgKiBmaWx0ZXItPnkxKSAtIGZpbHRlci0+QyAqIGZpbHRlci0+eTI7Ci0gICAgZmlsdGVyLT55MiA9IGZpbHRlci0+eTE7Ci0gICAgZmlsdGVyLT55MSA9IHk7Ci0gICAgLyogZmlsdGVyIG1vbm8gc2lnbmFsICovCi0gICAgbyA9IChpbnQpICh5ICogZmlsdGVyLT5tb25vX2xldmVsKTsKLSAgICBvID0gQ0xBTVAgKG8sIEdfTUlOSU5UMTYsIEdfTUFYSU5UMTYpOwotICAgIG8gPSAobyAqIGxldmVsKSA+PiA4OwotICAgIC8qIG5vdyBjdXQgdGhlIGNlbnRlciAqLwotICAgIHggPSBsIC0gKChyICogbGV2ZWwpID4+IDgpICsgbzsKLSAgICByID0gciAtICgobCAqIGxldmVsKSA+PiA4KSArIG87Ci0gICAgZGF0YVtpXSA9IENMQU1QICh4LCBHX01JTklOVDE2LCBHX01BWElOVDE2KTsKLSAgICBkYXRhW2kgKyAxXSA9IENMQU1QIChyLCBHX01JTklOVDE2LCBHX01BWElOVDE2KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX2thcmFva2VfdHJhbnNmb3JtX2Zsb2F0IChHc3RBdWRpb0thcmFva2UgKiBmaWx0ZXIsCi0gICAgZ2Zsb2F0ICogZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpCi17Ci0gIGdpbnQgaTsKLSAgZ2ludCBjaGFubmVsczsKLSAgZ2RvdWJsZSBsLCByLCBvOwotICBnZG91YmxlIHk7Ci0KLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChmaWx0ZXIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSArPSBjaGFubmVscykgewotICAgIC8qIGdldCBsZWZ0IGFuZCByaWdodCBpbnB1dHMgKi8KLSAgICBsID0gZGF0YVtpXTsKLSAgICByID0gZGF0YVtpICsgMV07Ci0gICAgLyogZG8gZmlsdGVyaW5nICovCi0gICAgeSA9IChmaWx0ZXItPkEgKiAoKGwgKyByKSAvIDIuMCkgLSBmaWx0ZXItPkIgKiBmaWx0ZXItPnkxKSAtCi0gICAgICAgIGZpbHRlci0+QyAqIGZpbHRlci0+eTI7Ci0gICAgZmlsdGVyLT55MiA9IGZpbHRlci0+eTE7Ci0gICAgZmlsdGVyLT55MSA9IHk7Ci0gICAgLyogZmlsdGVyIG1vbm8gc2lnbmFsICovCi0gICAgbyA9IHkgKiBmaWx0ZXItPm1vbm9fbGV2ZWwgKiBmaWx0ZXItPmxldmVsOwotICAgIC8qIG5vdyBjdXQgdGhlIGNlbnRlciAqLwotICAgIGRhdGFbaV0gPSBsIC0gKHIgKiBmaWx0ZXItPmxldmVsKSArIG87Ci0gICAgZGF0YVtpICsgMV0gPSByIC0gKGwgKiBmaWx0ZXItPmxldmVsKSArIG87Ci0gIH0KLX0KLQotLyogR3N0QmFzZVRyYW5zZm9ybSB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdWRpb19rYXJhb2tlX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0QXVkaW9LYXJhb2tlICpmaWx0ZXIgPSBHU1RfQVVESU9fS0FSQU9LRSAoYmFzZSk7Ci0gIGd1aW50IG51bV9zYW1wbGVzOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBzdHJlYW1fdGltZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmYmFzZS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyKSwgc3RyZWFtX3RpbWUpOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19HQVApKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICBudW1fc2FtcGxlcyA9IG1hcC5zaXplIC8gR1NUX0FVRElPX0ZJTFRFUl9CUFMgKGZpbHRlcik7Ci0KLSAgZmlsdGVyLT5wcm9jZXNzIChmaWx0ZXIsIG1hcC5kYXRhLCBudW1fc2FtcGxlcyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb2thcmFva2UuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzkxZWZjLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlva2FyYW9rZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQVVESU9fS0FSQU9LRV9IX18KLSNkZWZpbmUgX19HU1RfQVVESU9fS0FSQU9LRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fS0FSQU9LRSAgICAgICAgICAgIChnc3RfYXVkaW9fa2FyYW9rZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fS0FSQU9LRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FVRElPX0tBUkFPS0UsR3N0QXVkaW9LYXJhb2tlKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0tBUkFPS0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BVURJT19LQVJBT0tFKSkKLSNkZWZpbmUgR1NUX0FVRElPX0tBUkFPS0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19LQVJBT0tFLEdzdEF1ZGlvS2FyYW9rZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX0tBUkFPS0VfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpICxHU1RfVFlQRV9BVURJT19LQVJBT0tFKSkKLSNkZWZpbmUgR1NUX0FVRElPX0tBUkFPS0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopICxHU1RfVFlQRV9BVURJT19LQVJBT0tFLEdzdEF1ZGlvS2FyYW9rZUNsYXNzKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb0thcmFva2UgR3N0QXVkaW9LYXJhb2tlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvS2FyYW9rZUNsYXNzIEdzdEF1ZGlvS2FyYW9rZUNsYXNzOwotCi10eXBlZGVmIHZvaWQgKCpHc3RBdWRpb0thcmFva2VQcm9jZXNzRnVuYykgKEdzdEF1ZGlvS2FyYW9rZSAqLCBndWludDggKiwgZ3VpbnQpOwotCi1zdHJ1Y3QgX0dzdEF1ZGlvS2FyYW9rZQotewotICBHc3RBdWRpb0ZpbHRlciBhdWRpb2ZpbHRlcjsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdmbG9hdCBsZXZlbDsKLSAgZ2Zsb2F0IG1vbm9fbGV2ZWw7Ci0gIGdmbG9hdCBmaWx0ZXJfYmFuZDsKLSAgZ2Zsb2F0IGZpbHRlcl93aWR0aDsKLQotICAvKiBmaWx0ZXIgY29lZiAqLwotICBnZmxvYXQgQSwgQiwgQzsKLSAgZ2Zsb2F0IHkxLCB5MjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHc3RBdWRpb0thcmFva2VQcm9jZXNzRnVuYyBwcm9jZXNzOwotfTsKLQotc3RydWN0IF9Hc3RBdWRpb0thcmFva2VDbGFzcwotewotICBHc3RBdWRpb0ZpbHRlckNsYXNzIHBhcmVudDsKLX07Ci0KLUdUeXBlIGdzdF9hdWRpb19rYXJhb2tlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9BVURJT19LQVJBT0tFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jIGIvZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTAxNDY0Li4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuYworKysgL2Rldi9udWxsCkBAIC0xLDUzMyArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdWRpb3Bhbm9yYW1hCi0gKgotICogU3RlcmVvIHBhbm9yYW1hIGVmZmVjdCB3aXRoIGNvbnRyb2xsYWJsZSBwYW4gcG9zaXRpb24uIE9uZSBjYW4gY2hvb3NlIGJldHdlZW4gdGhlIGRlZmF1bHQgcHN5Y2hvYWNvdXN0aWMgcGFubmluZyBtZXRob2QsCi0gKiB3aGljaCBrZWVwcyB0aGUgc2FtZSBwZXJjZWl2ZWQgbG91ZG5lc3MsIGFuZCBhIHNpbXBsZSBwYW5uaW5nIG1ldGhvZCB0aGF0IGp1c3QgY29udHJvbHMgdGhlIHZvbHVtZSBvbiBvbmUgY2hhbm5lbC4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIHdhdmU9c2F3ICEgYXVkaW9wYW5vcmFtYSBwYW5vcmFtYT0tMS4wMCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPSJtZWxvMS5vZ2ciICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Bhbm9yYW1hIHBhbm9yYW1hPS0xLjAwICEgYWxzYXNpbmsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyB3YXZlPXNhdyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcGFub3JhbWEgcGFub3JhbWE9LTEuMDAgISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIHdhdmU9c2F3ICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9wYW5vcmFtYSBtZXRob2Q9c2ltcGxlIHBhbm9yYW1hPS0wLjUwICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotI2lmZGVmIEhBVkVfT1JDCi0jaW5jbHVkZSA8b3JjL29yY2Z1bmN0aW9ucy5oPgotI2Vsc2UKLSNkZWZpbmUgb3JjX21lbXNldCBtZW1zZXQKLSNlbmRpZgotCi0jaW5jbHVkZSAiYXVkaW9wYW5vcmFtYS5oIgotI2luY2x1ZGUgImF1ZGlvcGFub3JhbWFvcmMuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi0vKiBGaWx0ZXIgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUEFOT1JBTUEsCi0gIFBST1BfTUVUSE9ECi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX1BBTk9SQU1BX01FVEhPRCAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX21ldGhvZF9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2F1ZGlvX3Bhbm9yYW1hX21ldGhvZF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGd0eXBlID0gMDsKLQotICBpZiAoZ3R5cGUgPT0gMCkgewotICAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZhbHVlc1tdID0gewotICAgICAge01FVEhPRF9QU1lDSE9BQ09VU1RJQywgIlBzeWNob2Fjb3VzdGljIFBhbm5pbmcgKGRlZmF1bHQpIiwKLSAgICAgICAgICAicHN5Y2hvYWNvdXN0aWMifSwKLSAgICAgIHtNRVRIT0RfU0lNUExFLCAiU2ltcGxlIFBhbm5pbmciLCAic2ltcGxlIn0sCi0gICAgICB7MCwgTlVMTCwgTlVMTH0KLSAgICB9OwotCi0gICAgZ3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCIsIHZhbHVlcyk7Ci0gIH0KLSAgcmV0dXJuIGd0eXBlOwotfQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7ICIgR1NUX0FVRElPX05FIChGMzIpICIsICIgR1NUX0FVRElPX05FIChTMTYpICJ9LCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXSwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgIiBHU1RfQVVESU9fTkUgKEYzMikgIiwgIiBHU1RfQVVESU9fTkUgKFMxNikgIn0sICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiICJjaGFubmVscyA9IChpbnQpIDIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkIikKLSAgICApOwotCi1HX0RFRklORV9UWVBFIChHc3RBdWRpb1Bhbm9yYW1hLCBnc3RfYXVkaW9fcGFub3JhbWEsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKLQotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19wYW5vcmFtYV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fcGFub3JhbWFfZ2V0X3VuaXRfc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCi0gICAgR3N0Q2FwcyAqIGNhcHMsIGdzaXplICogc2l6ZSk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RDYXBzICogaW5jYXBzLCBHc3RDYXBzICogb3V0Y2Fwcyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb19wYW5vcmFtYV9tMnNfaW50IChnZmxvYXQgcGFuLAotICAgIGdpbnQxNiAqIGlkYXRhLCBnaW50MTYgKiBvZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX3Myc19pbnQgKGdmbG9hdCBwYW4sCi0gICAgZ2ludDE2ICogaWRhdGEsIGdpbnQxNiAqIG9kYXRhLCBndWludCBudW1fc2FtcGxlcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fcGFub3JhbWFfbTJzX2Zsb2F0IChnZmxvYXQgcGFuLAotICAgIGdmbG9hdCAqIGlkYXRhLCBnZmxvYXQgKiBvZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX3Myc19mbG9hdCAoZ2Zsb2F0IHBhbiwKLSAgICBnZmxvYXQgKiBpZGF0YSwgZ2Zsb2F0ICogb2RhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLQotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX20yc19pbnRfc2ltcGxlIChnZmxvYXQgcGFuLAotICAgIGdpbnQxNiAqIGlkYXRhLCBnaW50MTYgKiBvZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX3Myc19pbnRfc2ltcGxlIChnZmxvYXQgcGFuLAotICAgIGdpbnQxNiAqIGlkYXRhLCBnaW50MTYgKiBvZGF0YSwgZ3VpbnQgbnVtX3NhbXBsZXMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3Bhbm9yYW1hX20yc19mbG9hdF9zaW1wbGUgKGdmbG9hdCBwYW4sCi0gICAgZ2Zsb2F0ICogaWRhdGEsIGdmbG9hdCAqIG9kYXRhLCBndWludCBudW1fc2FtcGxlcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fcGFub3JhbWFfczJzX2Zsb2F0X3NpbXBsZSAoZ2Zsb2F0IHBhbiwKLSAgICBnZmxvYXQgKiBpZGF0YSwgZ2Zsb2F0ICogb2RhdGEsIGd1aW50IG51bV9zYW1wbGVzKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsCi0gICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqIG91dGJ1Zik7Ci0KLQotLyogVGFibGUgd2l0aCBwcm9jZXNzaW5nIGZ1bmN0aW9uczogW2NoYW5uZWxzXVtmb3JtYXRdW21ldGhvZF0gKi8KLXN0YXRpYyBjb25zdCBHc3RBdWRpb1Bhbm9yYW1hUHJvY2Vzc0Z1bmMgcGFub3JhbWFfcHJvY2Vzc19mdW5jdGlvbnNbMl1bMl1bMl0gPSB7Ci0gIHsKLSAgICAgICAgewotICAgICAgICAgICAgICAoR3N0QXVkaW9QYW5vcmFtYVByb2Nlc3NGdW5jKSBnc3RfYXVkaW9fcGFub3JhbWFfbTJzX2ludCwKLSAgICAgICAgICAgIChHc3RBdWRpb1Bhbm9yYW1hUHJvY2Vzc0Z1bmMpIGdzdF9hdWRpb19wYW5vcmFtYV9tMnNfaW50X3NpbXBsZX0sCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgKEdzdEF1ZGlvUGFub3JhbWFQcm9jZXNzRnVuYykgZ3N0X2F1ZGlvX3Bhbm9yYW1hX20yc19mbG9hdCwKLSAgICAgICAgICAgIChHc3RBdWRpb1Bhbm9yYW1hUHJvY2Vzc0Z1bmMpIGdzdF9hdWRpb19wYW5vcmFtYV9tMnNfZmxvYXRfc2ltcGxlfQotICAgICAgfSwKLSAgewotICAgICAgICB7Ci0gICAgICAgICAgICAgIChHc3RBdWRpb1Bhbm9yYW1hUHJvY2Vzc0Z1bmMpIGdzdF9hdWRpb19wYW5vcmFtYV9zMnNfaW50LAotICAgICAgICAgICAgKEdzdEF1ZGlvUGFub3JhbWFQcm9jZXNzRnVuYykgZ3N0X2F1ZGlvX3Bhbm9yYW1hX3Myc19pbnRfc2ltcGxlfSwKLSAgICAgICAgewotICAgICAgICAgICAgICAoR3N0QXVkaW9QYW5vcmFtYVByb2Nlc3NGdW5jKSBnc3RfYXVkaW9fcGFub3JhbWFfczJzX2Zsb2F0LAotICAgICAgICAgICAgKEdzdEF1ZGlvUGFub3JhbWFQcm9jZXNzRnVuYykgZ3N0X2F1ZGlvX3Bhbm9yYW1hX3Myc19mbG9hdF9zaW1wbGV9Ci0gICAgICB9Ci19OwotCi0vKiBHT2JqZWN0IHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fcGFub3JhbWFfY2xhc3NfaW5pdCAoR3N0QXVkaW9QYW5vcmFtYUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYXVkaW9fcGFub3JhbWFfZGVidWcsICJhdWRpb3Bhbm9yYW1hIiwgMCwKLSAgICAgICJhdWRpb3Bhbm9yYW1hIGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBTk9SQU1BLAotICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0ICgicGFub3JhbWEiLCAiUGFub3JhbWEiLAotICAgICAgICAgICJQb3NpdGlvbiBpbiBzdGVyZW8gcGFub3JhbWEgKC0xLjAgbGVmdCAtPiAxLjAgcmlnaHQpIiwgLTEuMCwgMS4wLAotICAgICAgICAgIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RBdWRpb1Bhbm9yYW1hOm1ldGhvZDoKLSAgICoKLSAgICogUGFubmluZyBtZXRob2Q6IHBzeWNob2Fjb3VzdGljIG1vZGUga2VlcHMgdGhlIHNhbWUgcGVyY2VpdmVkIGxvdWRuZXNzLAotICAgKiB3aGlsZSBzaW1wbGUgbW9kZSBqdXN0IGNvbnRyb2xzIHRoZSB2b2x1bWUgb2Ygb25lIGNoYW5uZWwuIEl0J3MgbWVyZWx5Ci0gICAqIGEgbWF0dGVyIG9mIHRhc3RlIHdoaWNoIG1ldGhvZCBzaG91bGQgYmUgY2hvc2VuLiAKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUVUSE9ELAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtZXRob2QiLCAiUGFubmluZyBtZXRob2QiLAotICAgICAgICAgICJQc3ljaG9hY291c3RpYyBtb2RlIGtlZXBzIHNhbWUgcGVyY2VpdmVkIGxvdWRuZXNzLCAiCi0gICAgICAgICAgInNpbXBsZSBtb2RlIGp1c3QgY29udHJvbHMgdm9sdW1lIG9mIG9uZSBjaGFubmVsLiIsCi0gICAgICAgICAgR1NUX1RZUEVfQVVESU9fUEFOT1JBTUFfTUVUSE9ELCBNRVRIT0RfUFNZQ0hPQUNPVVNUSUMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlN0ZXJlbyBwb3NpdGlvbmluZyIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiUG9zaXRpb25zIGF1ZGlvIHN0cmVhbXMgaW4gdGhlIHN0ZXJlbyBwYW5vcmFtYSIsCi0gICAgICAiU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLQotICBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGtsYXNzKS0+Z2V0X3VuaXRfc2l6ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF91bml0X3NpemUpOwotICBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGtsYXNzKS0+dHJhbnNmb3JtX2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm1fY2Fwcyk7Ci0gIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpLT5zZXRfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3NldF9jYXBzKTsKLSAgR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyktPnRyYW5zZm9ybSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fcGFub3JhbWFfaW5pdCAoR3N0QXVkaW9QYW5vcmFtYSAqIGZpbHRlcikKLXsKLQotICBmaWx0ZXItPnBhbm9yYW1hID0gMDsKLSAgZmlsdGVyLT5tZXRob2QgPSBNRVRIT0RfUFNZQ0hPQUNPVVNUSUM7Ci0gIGdzdF9hdWRpb19pbmZvX2luaXQgKCZmaWx0ZXItPmluZm8pOwotICBmaWx0ZXItPnByb2Nlc3MgPSBOVUxMOwotCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGZpbHRlciksIFRSVUUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19wYW5vcmFtYV9zZXRfcHJvY2Vzc19mdW5jdGlvbiAoR3N0QXVkaW9QYW5vcmFtYSAqIGZpbHRlciwKLSAgICBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBnaW50IGNoYW5uZWxfaW5kZXgsIGZvcm1hdF9pbmRleCwgbWV0aG9kX2luZGV4OwotICBjb25zdCBHc3RBdWRpb0Zvcm1hdEluZm8gKmZpbmZvID0gaW5mby0+ZmluZm87Ci0KLSAgLyogc2V0IHByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgY2hhbm5lbF9pbmRleCA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTIChpbmZvKSAtIDE7Ci0gIGlmIChjaGFubmVsX2luZGV4ID4gMSB8fCBjaGFubmVsX2luZGV4IDwgMCkgewotICAgIGZpbHRlci0+cHJvY2VzcyA9IE5VTEw7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZm9ybWF0X2luZGV4ID0gR1NUX0FVRElPX0ZPUk1BVF9JTkZPX0lTX0ZMT0FUIChmaW5mbykgPyAxIDogMDsKLSAgbWV0aG9kX2luZGV4ID0gZmlsdGVyLT5tZXRob2Q7Ci0KLSAgZmlsdGVyLT5wcm9jZXNzID0KLSAgICAgIHBhbm9yYW1hX3Byb2Nlc3NfZnVuY3Rpb25zW2NoYW5uZWxfaW5kZXhdW2Zvcm1hdF9pbmRleF1bbWV0aG9kX2luZGV4XTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fcGFub3JhbWFfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvUGFub3JhbWEgKmZpbHRlciA9IEdTVF9BVURJT19QQU5PUkFNQSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUEFOT1JBTUE6Ci0gICAgICBmaWx0ZXItPnBhbm9yYW1hID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NRVRIT0Q6Ci0gICAgICBmaWx0ZXItPm1ldGhvZCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGdzdF9hdWRpb19wYW5vcmFtYV9zZXRfcHJvY2Vzc19mdW5jdGlvbiAoZmlsdGVyLCAmZmlsdGVyLT5pbmZvKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19wYW5vcmFtYV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXVkaW9QYW5vcmFtYSAqZmlsdGVyID0gR1NUX0FVRElPX1BBTk9SQU1BIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQU5PUkFNQToKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgZmlsdGVyLT5wYW5vcmFtYSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUVUSE9EOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGZpbHRlci0+bWV0aG9kKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyogR3N0QmFzZVRyYW5zZm9ybSB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19wYW5vcmFtYV9nZXRfdW5pdF9zaXplIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwgR3N0Q2FwcyAqIGNhcHMsCi0gICAgZ3NpemUgKiBzaXplKQotewotICBHc3RBdWRpb0luZm8gaW5mbzsKLQotICBnX2Fzc2VydCAoc2l6ZSk7Ci0KLSAgaWYgKCFnc3RfYXVkaW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKnNpemUgPSBHU1RfQVVESU9fSU5GT19CUEYgKCZpbmZvKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2F1ZGlvX3Bhbm9yYW1hX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmVzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBpOwotCi0gIC8qIHJlcGxhY2UgdGhlIGNoYW5uZWwgcHJvcGVydHkgd2l0aCBvdXIgcmFuZ2UuICovCi0gIHJlcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKHJlcyk7IGkrKykgewotICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHJlcywgaSk7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChiYXNlLCAiWyVkXSBhbGxvdyAxLTIgY2hhbm5lbHMiLCBpKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMiwgTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoYmFzZSwgIlslZF0gYWxsb3cgMiBjaGFubmVscyIsIGkpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMiwgTlVMTCk7Ci0gICAgfQotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJjaGFubmVsLW1hc2siKTsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlLCAidHJhbnNmb3JtZWQgJSIgR1NUX1BUUl9GT1JNQVQsIHJlcyk7Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2UsICJVc2luZyBmaWx0ZXIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7Ci0gICAgcmVzID0gaW50ZXJzZWN0aW9uOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2UsICJJbnRlcnNlY3Rpb24gJSIgR1NUX1BUUl9GT1JNQVQsIHJlcyk7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb19wYW5vcmFtYV9zZXRfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdENhcHMgKiBpbmNhcHMsCi0gICAgR3N0Q2FwcyAqIG91dGNhcHMpCi17Ci0gIEdzdEF1ZGlvUGFub3JhbWEgKmZpbHRlciA9IEdTVF9BVURJT19QQU5PUkFNQSAoYmFzZSk7Ci0gIEdzdEF1ZGlvSW5mbyBpbmZvOwotCi0gIC8qR1NUX0lORk8gKCJpbmNhcHMgYXJlICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOyAqLwotICBpZiAoIWdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGluY2FwcykpCi0gICAgZ290byBub19mb3JtYXQ7Ci0KLSAgR1NUX0RFQlVHICgidHJ5IHRvIHByb2Nlc3MgJWQgaW5wdXQgd2l0aCAlZCBjaGFubmVscyIsCi0gICAgICBHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZpbmZvKSwgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZpbmZvKSk7Ci0KLSAgaWYgKCFnc3RfYXVkaW9fcGFub3JhbWFfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKGZpbHRlciwgJmluZm8pKQotICAgIGdvdG8gbm9fZm9ybWF0OwotCi0gIGZpbHRlci0+aW5mbyA9IGluZm87Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLW5vX2Zvcm1hdDoKLSAgewotICAgIEdTVF9ERUJVRyAoImludmFsaWQgY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBwc3ljaG9hY291c3RpYyBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAqLwotCi0vKiBtb25vIHRvIHN0ZXJlbyBwYW5uaW5nCi0gKiBwYW46IC0xLjAgIDAuMCAgMS4wCi0gKiBsOiAgICAxLjAgIDAuNSAgMC4wICAKLSAqIHI6ICAgIDAuMCAgMC41ICAxLjAKLSAqCi0gKiBGSVhNRTogd2Ugc2hvdWxkIHVzZSAtM2RiICgxL3NxdHIoMikpIGZvciA1MDo1MAotICovCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3Bhbm9yYW1hX20yc19pbnQgKGdmbG9hdCBwYW4sIGdpbnQxNiAqIGlkYXRhLCBnaW50MTYgKiBvZGF0YSwgZ3VpbnQgbikKLXsKLSAgZ2Zsb2F0IHIgPSAocGFuICsgMS4wKSAvIDIuMDsKLSAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9wc3kgKG9kYXRhLCBpZGF0YSwgMS4wIC0gciwgciwgbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fcGFub3JhbWFfbTJzX2Zsb2F0IChnZmxvYXQgcGFuLCBnZmxvYXQgKiBpZGF0YSwKLSAgICBnZmxvYXQgKiBvZGF0YSwgZ3VpbnQgbikKLXsKLSAgZ2Zsb2F0IHIgPSAocGFuICsgMS4wKSAvIDIuMDsKLSAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9wc3kgKG9kYXRhLCBpZGF0YSwgMS4wIC0gciwgciwgbik7Ci19Ci0KLS8qIHN0ZXJlbyBiYWxhbmNlCi0gKiBwYW46IC0xLjAgIDAuMCAgMS4wCi0gKiBsbDogICAxLjAgIDEuMCAgMC4wCi0gKiBscjogICAxLjAgIDAuMCAgMC4wCi0gKiBycjogICAwLjAgIDEuMCAgMS4wCi0gKiBybDogICAwLjAgIDAuMCAgMS4wCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fcGFub3JhbWFfczJzX2ludCAoZ2Zsb2F0IHBhbiwgZ2ludDE2ICogaWRhdGEsIGdpbnQxNiAqIG9kYXRhLCBndWludCBuKQotewotICBpZiAocGFuID09IDAuMCkgewotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfbm9uZSAob2RhdGEsIGlkYXRhLCBuKTsKLSAgfSBlbHNlIGlmIChwYW4gPiAwLjApIHsKLSAgICBnZmxvYXQgcmwgPSBwYW47Ci0gICAgZ2Zsb2F0IGxsID0gMS4wIC0gcmw7Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfcmlnaHQgKG9kYXRhLCBpZGF0YSwgbGwsIHJsLCBuKTsKLSAgfSBlbHNlIHsKLSAgICBnZmxvYXQgcnIgPSAxLjAgKyBwYW47Ci0gICAgZ2Zsb2F0IGxyID0gMS4wIC0gcnI7Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfbGVmdCAob2RhdGEsIGlkYXRhLCBsciwgcnIsIG4pOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fcGFub3JhbWFfczJzX2Zsb2F0IChnZmxvYXQgcGFuLCBnZmxvYXQgKiBpZGF0YSwKLSAgICBnZmxvYXQgKiBvZGF0YSwgZ3VpbnQgbikKLXsKLSAgaWYgKHBhbiA9PSAwLjApIHsKLSAgICBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX25vbmUgKG9kYXRhLCBpZGF0YSwgbik7Ci0gIH0gZWxzZSBpZiAocGFuID4gMC4wKSB7Ci0gICAgZ2Zsb2F0IHJsID0gcGFuOwotICAgIGdmbG9hdCBsbCA9IDEuMCAtIHJsOwotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0IChvZGF0YSwgaWRhdGEsIGxsLCBybCwgbik7Ci0gIH0gZWxzZSB7Ci0gICAgZ2Zsb2F0IHJyID0gMS4wICsgcGFuOwotICAgIGdmbG9hdCBsciA9IDEuMCAtIHJyOwotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X2xlZnQgKG9kYXRhLCBpZGF0YSwgbHIsIHJyLCBuKTsKLSAgfQotfQotCi0vKiBzaW1wbGUgcHJvY2Vzc2luZyBmdW5jdGlvbnMgKi8KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19wYW5vcmFtYV9tMnNfaW50X3NpbXBsZSAoZ2Zsb2F0IHBhbiwgZ2ludDE2ICogaWRhdGEsCi0gICAgZ2ludDE2ICogb2RhdGEsIGd1aW50IG4pCi17Ci0gIGlmIChwYW4gPT0gMC4wKSB7Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9ub25lIChvZGF0YSwgaWRhdGEsIG4pOwotICB9IGVsc2UgaWYgKHBhbiA+IDAuMCkgewotICAgIGdmbG9hdCBscGFuID0gMS4wIC0gcGFuOwotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfc2ltX2xlZnQgKG9kYXRhLCBpZGF0YSwgbHBhbiwgbik7Ci0gIH0gZWxzZSB7Ci0gICAgZ2Zsb2F0IHJwYW4gPSAxLjAgKyBwYW47Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fcmlnaHQgKG9kYXRhLCBpZGF0YSwgcnBhbiwgbik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19wYW5vcmFtYV9zMnNfaW50X3NpbXBsZSAoZ2Zsb2F0IHBhbiwgZ2ludDE2ICogaWRhdGEsCi0gICAgZ2ludDE2ICogb2RhdGEsIGd1aW50IG4pCi17Ci0gIGlmIChwYW4gPT0gMC4wKSB7Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9ub25lIChvZGF0YSwgaWRhdGEsIG4pOwotICB9IGVsc2UgaWYgKHBhbiA+IDAuMCkgewotICAgIGdmbG9hdCBscGFuID0gMS4wIC0gcGFuOwotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX2xlZnQgKG9kYXRhLCBpZGF0YSwgbHBhbiwgbik7Ci0gIH0gZWxzZSB7Ci0gICAgZ2Zsb2F0IHJwYW4gPSAxLjAgKyBwYW47Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9zaW1fcmlnaHQgKG9kYXRhLCBpZGF0YSwgcnBhbiwgbik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdWRpb19wYW5vcmFtYV9tMnNfZmxvYXRfc2ltcGxlIChnZmxvYXQgcGFuLCBnZmxvYXQgKiBpZGF0YSwKLSAgICBnZmxvYXQgKiBvZGF0YSwgZ3VpbnQgbikKLXsKLSAgaWYgKHBhbiA9PSAwLjApIHsKLSAgICBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX25vbmUgKG9kYXRhLCBpZGF0YSwgbik7Ci0gIH0gZWxzZSBpZiAocGFuID4gMC4wKSB7Ci0gICAgZ2Zsb2F0IGxwYW4gPSAxLjAgLSBwYW47Ci0gICAgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fbGVmdCAob2RhdGEsIGlkYXRhLCBscGFuLCBuKTsKLSAgfSBlbHNlIHsKLSAgICBnZmxvYXQgcnBhbiA9IDEuMCArIHBhbjsKLSAgICBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9yaWdodCAob2RhdGEsIGlkYXRhLCBycGFuLCBuKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3Bhbm9yYW1hX3Myc19mbG9hdF9zaW1wbGUgKGdmbG9hdCBwYW4sIGdmbG9hdCAqIGlkYXRhLAotICAgIGdmbG9hdCAqIG9kYXRhLCBndWludCBuKQotewotICBpZiAocGFuID09IDAuMCkgewotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfbm9uZSAob2RhdGEsIGlkYXRhLCBuKTsKLSAgfSBlbHNlIGlmIChwYW4gPiAwLjApIHsKLSAgICBnZmxvYXQgbHBhbiA9IDEuMCAtIHBhbjsKLSAgICBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9sZWZ0IChvZGF0YSwgaWRhdGEsIGxwYW4sIG4pOwotICB9IGVsc2UgewotICAgIGdmbG9hdCBycGFuID0gMS4wICsgcGFuOwotICAgIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0IChvZGF0YSwgaWRhdGEsIHJwYW4sIG4pOwotICB9Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYWN0dWFsIHByb2Nlc3NpbmcKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdWRpb19wYW5vcmFtYV90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLCBHc3RCdWZmZXIgKiBpbmJ1ZiwKLSAgICBHc3RCdWZmZXIgKiBvdXRidWYpCi17Ci0gIEdzdEF1ZGlvUGFub3JhbWEgKmZpbHRlciA9IEdTVF9BVURJT19QQU5PUkFNQSAoYmFzZSk7Ci0gIEdzdENsb2NrVGltZSB0czsKLSAgR3N0TWFwSW5mbyBpbm1hcCwgb3V0bWFwOwotCi0gIHRzID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZiYXNlLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWYpKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRzKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0cykpOwotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGZpbHRlciksIHRzKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZvdXRtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChpbmJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0dBUCkpKSB7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKTsKLSAgICBvcmNfbWVtc2V0IChvdXRtYXAuZGF0YSwgMCwgb3V0bWFwLnNpemUpOwotICB9IGVsc2UgewotICAgIC8qIG91dHB1dCBpcyBhbHdheXMgc3RlcmVvLCBpbnB1dCBpcyBtb25vIG9yIHN0ZXJlbywKLSAgICAgKiBhbmQgaW5mbyBkZXNjcmliZXMgaW5wdXQgZm9ybWF0ICovCi0gICAgZ3VpbnQgbnVtX3NhbXBsZXMgPSBvdXRtYXAuc2l6ZSAvICgyICogR1NUX0FVRElPX0lORk9fQlBTICgmZmlsdGVyLT5pbmZvKSk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoaW5idWYsICZpbm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBmaWx0ZXItPnByb2Nlc3MgKGZpbHRlci0+cGFub3JhbWEsIGlubWFwLmRhdGEsIG91dG1hcC5kYXRhLCBudW1fc2FtcGxlcyk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWYsICZpbm1hcCk7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZvdXRtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRkMWNlYy4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotIAotI2lmbmRlZiBfX0dTVF9BVURJT19QQU5PUkFNQV9IX18KLSNkZWZpbmUgX19HU1RfQVVESU9fUEFOT1JBTUFfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fUEFOT1JBTUEgICAgICAgICAgICAoZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BVURJT19QQU5PUkFNQShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FVRElPX1BBTk9SQU1BLEdzdEF1ZGlvUGFub3JhbWEpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fUEFOT1JBTUEob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9BVURJT19QQU5PUkFNQSkpCi0jZGVmaW5lIEdTVF9BVURJT19QQU5PUkFNQV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcykgLEdTVF9UWVBFX0FVRElPX1BBTk9SQU1BLEdzdEF1ZGlvUGFub3JhbWFDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVURJT19QQU5PUkFNQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcykgLEdTVF9UWVBFX0FVRElPX1BBTk9SQU1BKSkKLSNkZWZpbmUgR1NUX0FVRElPX1BBTk9SQU1BX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSAsR1NUX1RZUEVfQVVESU9fUEFOT1JBTUEsR3N0QXVkaW9QYW5vcmFtYUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvUGFub3JhbWEgICAgICBHc3RBdWRpb1Bhbm9yYW1hOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvUGFub3JhbWFDbGFzcyBHc3RBdWRpb1Bhbm9yYW1hQ2xhc3M7Ci0KLXR5cGVkZWYgdm9pZCAoKkdzdEF1ZGlvUGFub3JhbWFQcm9jZXNzRnVuYykoZ2Zsb2F0LCBndWludDgqLCBndWludDgqLCBndWludCk7Ci0KLXR5cGVkZWYgZW51bQotewotICBNRVRIT0RfUFNZQ0hPQUNPVVNUSUMgPSAwLAotICBNRVRIT0RfU0lNUExFCi19IEdzdEF1ZGlvUGFub3JhbWFNZXRob2Q7Ci0KLXN0cnVjdCBfR3N0QXVkaW9QYW5vcmFtYSB7Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gZWxlbWVudDsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdmbG9hdCBwYW5vcmFtYTsKLSAgR3N0QXVkaW9QYW5vcmFtYU1ldGhvZCBtZXRob2Q7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgR3N0QXVkaW9QYW5vcmFtYVByb2Nlc3NGdW5jIHByb2Nlc3M7Ci0gIEdzdEF1ZGlvSW5mbyBpbmZvOwotfTsKLQotc3RydWN0IF9Hc3RBdWRpb1Bhbm9yYW1hQ2xhc3MgewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2F1ZGlvX3Bhbm9yYW1hX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FVRElPX1BBTk9SQU1BX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYW9yYy1kaXN0LmMgYi9nc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hb3JjLWRpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJkNmFhMC4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hb3JjLWRpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDM5NzcgKzAsMCBAQAotCi0vKiBhdXRvZ2VuZXJhdGVkIGZyb20gYXVkaW9wYW5vcmFtYW9yYy5vcmMgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmbmRlZiBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jZGVmaW5lIF9PUkNfSU5URUdFUl9UWVBFREVGU18KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2luY2x1ZGUgPHN0ZGludC5oPgotdHlwZWRlZiBpbnQ4X3Qgb3JjX2ludDg7Ci10eXBlZGVmIGludDE2X3Qgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQzMl90IG9yY19pbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVpbnQ4X3Qgb3JjX3VpbnQ4OwotdHlwZWRlZiB1aW50MTZfdCBvcmNfdWludDE2OwotdHlwZWRlZiB1aW50MzJfdCBvcmNfdWludDMyOwotdHlwZWRlZiB1aW50NjRfdCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgVUlOVDY0X0MoeCkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBfX2ludDggb3JjX2ludDg7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDE2IG9yY19pbnQxNjsKLXR5cGVkZWYgc2lnbmVkIF9faW50MzIgb3JjX2ludDMyOwotdHlwZWRlZiBzaWduZWQgX19pbnQ2NCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50OCBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiBvcmNfdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVWk2NCkKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotdHlwZWRlZiBzaWduZWQgY2hhciBvcmNfaW50ODsKLXR5cGVkZWYgc2hvcnQgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQgb3JjX2ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG9yY191aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IG9yY191aW50MzI7Ci0jaWYgSU5UX01BWCA9PSBMT05HX01BWAotdHlwZWRlZiBsb25nIGxvbmcgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTEwpCi0jZWxzZQotdHlwZWRlZiBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VMKQotI2VuZGlmCi0jZW5kaWYKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDE2IGk7Ci0gIG9yY19pbnQ4IHgyWzJdOwotfSBvcmNfdW5pb24xNjsKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDMyIGk7Ci0gIGZsb2F0IGY7Ci0gIG9yY19pbnQxNiB4MlsyXTsKLSAgb3JjX2ludDggeDRbNF07Ci19IG9yY191bmlvbjMyOwotdHlwZWRlZiB1bmlvbgotewotICBvcmNfaW50NjQgaTsKLSAgZG91YmxlIGY7Ci0gIG9yY19pbnQzMiB4MlsyXTsKLSAgZmxvYXQgeDJmWzJdOwotICBvcmNfaW50MTYgeDRbNF07Ci19IG9yY191bmlvbjY0OwotI2VuZGlmCi0jaWZuZGVmIE9SQ19SRVNUUklDVAotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIE9SQ19SRVNUUklDVCByZXN0cmljdAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgX19yZXN0cmljdF9fCi0jZWxzZQotI2RlZmluZSBPUkNfUkVTVFJJQ1QKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgT1JDX0lOVEVSTkFMCi0jaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU5MCkKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1NTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2hpZGRlbgotI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxzZQotI2RlZmluZSBPUkNfSU5URVJOQUwKLSNlbmRpZgotI2VuZGlmCi0KLQotI2lmbmRlZiBESVNBQkxFX09SQwotI2luY2x1ZGUgPG9yYy9vcmMuaD4KLSNlbmRpZgotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX25vbmUgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9ub25lIChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfbm9uZSAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX25vbmUgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9wc3kgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3BzeSAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X3JpZ2h0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfbGVmdCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9wc3lfbGVmdCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfc2ltX3JpZ2h0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9yaWdodCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9zaW1fbGVmdCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fcmlnaHQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfc2ltX2xlZnQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9sZWZ0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotCi0KLS8qIGJlZ2luIE9yYyBDIHRhcmdldCBwcmVhbWJsZSAqLwotI2RlZmluZSBPUkNfQ0xBTVAoeCxhLGIpICgoeCk8KGEpID8gKGEpIDogKCh4KT4oYikgPyAoYikgOiAoeCkpKQotI2RlZmluZSBPUkNfQUJTKGEpICgoYSk8MCA/IC0oYSkgOiAoYSkpCi0jZGVmaW5lIE9SQ19NSU4oYSxiKSAoKGEpPChiKSA/IChhKSA6IChiKSkKLSNkZWZpbmUgT1JDX01BWChhLGIpICgoYSk+KGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBPUkNfU0JfTUFYIDEyNwotI2RlZmluZSBPUkNfU0JfTUlOICgtMS1PUkNfU0JfTUFYKQotI2RlZmluZSBPUkNfVUJfTUFYIDI1NQotI2RlZmluZSBPUkNfVUJfTUlOIDAKLSNkZWZpbmUgT1JDX1NXX01BWCAzMjc2NwotI2RlZmluZSBPUkNfU1dfTUlOICgtMS1PUkNfU1dfTUFYKQotI2RlZmluZSBPUkNfVVdfTUFYIDY1NTM1Ci0jZGVmaW5lIE9SQ19VV19NSU4gMAotI2RlZmluZSBPUkNfU0xfTUFYIDIxNDc0ODM2NDcKLSNkZWZpbmUgT1JDX1NMX01JTiAoLTEtT1JDX1NMX01BWCkKLSNkZWZpbmUgT1JDX1VMX01BWCA0Mjk0OTY3Mjk1VQotI2RlZmluZSBPUkNfVUxfTUlOIDAKLSNkZWZpbmUgT1JDX0NMQU1QX1NCKHgpIE9SQ19DTEFNUCh4LE9SQ19TQl9NSU4sT1JDX1NCX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VCKHgpIE9SQ19DTEFNUCh4LE9SQ19VQl9NSU4sT1JDX1VCX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1NXKHgpIE9SQ19DTEFNUCh4LE9SQ19TV19NSU4sT1JDX1NXX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VXKHgpIE9SQ19DTEFNUCh4LE9SQ19VV19NSU4sT1JDX1VXX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1NMKHgpIE9SQ19DTEFNUCh4LE9SQ19TTF9NSU4sT1JDX1NMX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VMKHgpIE9SQ19DTEFNUCh4LE9SQ19VTF9NSU4sT1JDX1VMX01BWCkKLSNkZWZpbmUgT1JDX1NXQVBfVyh4KSAoKCgoeCkmMHhmZlUpPDw4KSB8ICgoKHgpJjB4ZmYwMFUpPj44KSkKLSNkZWZpbmUgT1JDX1NXQVBfTCh4KSAoKCgoeCkmMHhmZlUpPDwyNCkgfCAoKCh4KSYweGZmMDBVKTw8OCkgfCAoKCh4KSYweGZmMDAwMFUpPj44KSB8ICgoKHgpJjB4ZmYwMDAwMDBVKT4+MjQpKQotI2RlZmluZSBPUkNfU1dBUF9RKHgpICgoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZikpPDw1NikgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwKSk8PDQwKSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMCkpPDwyNCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMCkpPDw4KSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMDAwMDApKT4+OCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMDAwMDApKT4+MjQpIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMDAwMDApKT4+NDApIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMDAwMDAwMCkpPj41NikpCi0jZGVmaW5lIE9SQ19QVFJfT0ZGU0VUKHB0cixvZmZzZXQpICgodm9pZCAqKSgoKHVuc2lnbmVkIGNoYXIgKikocHRyKSkgKyAob2Zmc2V0KSkpCi0jZGVmaW5lIE9SQ19ERU5PUk1BTCh4KSAoKHgpICYgKCgoKHgpJjB4N2Y4MDAwMDApID09IDApID8gMHhmZjgwMDAwMCA6IDB4ZmZmZmZmZmYpKQotI2RlZmluZSBPUkNfSVNOQU4oeCkgKCgoKHgpJjB4N2Y4MDAwMDApID09IDB4N2Y4MDAwMDApICYmICgoKHgpJjB4MDA3ZmZmZmYpICE9IDApKQotI2RlZmluZSBPUkNfREVOT1JNQUxfRE9VQkxFKHgpICgoeCkgJiAoKCgoeCkmT1JDX1VJTlQ2NF9DKDB4N2ZmMDAwMDAwMDAwMDAwMCkpID09IDApID8gT1JDX1VJTlQ2NF9DKDB4ZmZmMDAwMDAwMDAwMDAwMCkgOiBPUkNfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSkpCi0jZGVmaW5lIE9SQ19JU05BTl9ET1VCTEUoeCkgKCgoKHgpJk9SQ19VSU5UNjRfQygweDdmZjAwMDAwMDAwMDAwMDApKSA9PSBPUkNfVUlOVDY0X0MoMHg3ZmYwMDAwMDAwMDAwMDAwKSkgJiYgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4MDAwZmZmZmZmZmZmZmZmZikpICE9IDApKQotI2lmbmRlZiBPUkNfUkVTVFJJQ1QKLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgcmVzdHJpY3QKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKLSNkZWZpbmUgT1JDX1JFU1RSSUNUIF9fcmVzdHJpY3RfXwotI2Vsc2UKLSNkZWZpbmUgT1JDX1JFU1RSSUNUCi0jZW5kaWYKLSNlbmRpZgotLyogZW5kIE9yYyBDIHRhcmdldCBwcmVhbWJsZSAqLwotCi0KLQotLyogYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9ub25lICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfbm9uZSAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjE2ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMTYgdmFyMzI7Ci0gIG9yY191bmlvbjE2IHZhcjMzOwotICBvcmNfdW5pb24zMiB2YXIzNDsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjE2ICopIHMxOwotCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWR3ICovCi0gICAgdmFyMzIgPSBwdHI0W2ldOwotICAgIC8qIDE6IGxvYWR3ICovCi0gICAgdmFyMzMgPSBwdHI0W2ldOwotICAgIC8qIDI6IG1lcmdld2wgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyMzIuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyMzMuaTsKLSAgICAgIHZhcjM0LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiAzOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzQ7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9ub25lIChPcmNFeGVjdXRvciAqIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMTYgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24xNiB2YXIzMjsKLSAgb3JjX3VuaW9uMTYgdmFyMzM7Ci0gIG9yY191bmlvbjMyIHZhcjM0OwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb24xNiAqKSBleC0+YXJyYXlzWzRdOwotCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWR3ICovCi0gICAgdmFyMzIgPSBwdHI0W2ldOwotICAgIC8qIDE6IGxvYWR3ICovCi0gICAgdmFyMzMgPSBwdHI0W2ldOwotICAgIC8qIDI6IG1lcmdld2wgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyMzIuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyMzMuaTsKLSAgICAgIHZhcjM0LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiAzOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzQ7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX25vbmUgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgMzksIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDExNSwKLSAgICAgICAgICAgIDQ5LAotICAgICAgICA1NCwgOTUsIDk5LCAxMDQsIDQ5LCA5NSwgMTEwLCAxMTEsIDExMCwgMTAxLCAxMSwgNCwgNCwgMTIsIDIsIDIsCi0gICAgICAgIDE5NSwgMCwgNCwgNCwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9ub25lKTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX25vbmUiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX25vbmUpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDIsICJzMSIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1lcmdld2wiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX1MxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfbm9uZSAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX25vbmUgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGludCBuKQotewotICBpbnQgaTsKLSAgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjMyIHZhcjMyOwotICBvcmNfdW5pb24zMiB2YXIzMzsKLSAgb3JjX3VuaW9uNjQgdmFyMzQ7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBzMTsKLQotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjMyID0gcHRyNFtpXTsKLSAgICAvKiAxOiBsb2FkbCAqLwotICAgIHZhcjMzID0gcHRyNFtpXTsKLSAgICAvKiAyOiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjMyLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjMzLmk7Ci0gICAgICB2YXIzNC5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogMzogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM0OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfbm9uZSAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzI7Ci0gIG9yY191bmlvbjMyIHZhcjMzOwotICBvcmNfdW5pb242NCB2YXIzNDsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1s0XTsKLQotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjMyID0gcHRyNFtpXTsKLSAgICAvKiAxOiBsb2FkbCAqLwotICAgIHZhcjMzID0gcHRyNFtpXTsKLSAgICAvKiAyOiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjMyLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjMzLmk7Ci0gICAgICB2YXIzNC5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogMzogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM0OwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9ub25lIChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDM5LCA5NywgMTE3LCAxMDAsIDEwNSwgMTExLCAxMTIsIDk3LCAxMTAsIDExMSwgMTE0LCA5NywgMTA5LCA5NywKLSAgICAgICAgMTA5LCA5NSwgMTExLCAxMTQsIDk5LCA5NSwgMTEyLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDk1LCAxMDIsCi0gICAgICAgICAgICA1MSwKLSAgICAgICAgNTAsIDk1LCA5OSwgMTA0LCA0OSwgOTUsIDExMCwgMTExLCAxMTAsIDEwMSwgMTEsIDgsIDgsIDEyLCA0LCA0LAotICAgICAgICAxOTQsIDAsIDQsIDQsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfbm9uZSk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9ub25lIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9ub25lKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgOCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtZXJnZWxxIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9TMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX25vbmUgKi8KLSNpZmRlZiBESVNBQkxFX09SQwotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9ub25lIChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzMjsKLSAgb3JjX3VuaW9uMzIgdmFyMzM7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBzMTsKLQotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjMyID0gcHRyNFtpXTsKLSAgICAvKiAxOiBjb3B5dyAqLwotICAgIHZhcjMzLngyWzBdID0gdmFyMzIueDJbMF07Ci0gICAgdmFyMzMueDJbMV0gPSB2YXIzMi54MlsxXTsKLSAgICAvKiAyOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzM7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9ub25lIChPcmNFeGVjdXRvciAqIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzMjsKLSAgb3JjX3VuaW9uMzIgdmFyMzM7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIGV4LT5hcnJheXNbNF07Ci0KLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGwgKi8KLSAgICB2YXIzMiA9IHB0cjRbaV07Ci0gICAgLyogMTogY29weXcgKi8KLSAgICB2YXIzMy54MlswXSA9IHZhcjMyLngyWzBdOwotICAgIHZhcjMzLngyWzFdID0gdmFyMzIueDJbMV07Ci0gICAgLyogMjogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjMzOwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9ub25lIChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDM5LCA5NywgMTE3LCAxMDAsIDEwNSwgMTExLCAxMTIsIDk3LCAxMTAsIDExMSwgMTE0LCA5NywgMTA5LCA5NywKLSAgICAgICAgMTA5LCA5NSwgMTExLCAxMTQsIDk5LCA5NSwgMTEyLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDk1LCAxMTUsCi0gICAgICAgICAgICA0OSwKLSAgICAgICAgNTQsIDk1LCA5OSwgMTA0LCA1MCwgOTUsIDExMCwgMTExLCAxMTAsIDEwMSwgMTEsIDQsIDQsIDEyLCA0LCA0LAotICAgICAgICAyMSwgMSwgNzksIDAsIDQsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfbm9uZSk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9ub25lIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9ub25lKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgNCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb3B5dyIsIDEsIE9SQ19WQVJfRDEsIE9SQ19WQVJfUzEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCi0KLQotLyogYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9ub25lICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfbm9uZSAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzI7Ci0gIG9yY191bmlvbjY0IHZhcjMzOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uNjQgKikgZDE7Ci0gIHB0cjQgPSAob3JjX3VuaW9uNjQgKikgczE7Ci0KLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZHEgKi8KLSAgICB2YXIzMiA9IHB0cjRbaV07Ci0gICAgLyogMTogY29weWwgKi8KLSAgICB2YXIzMy54MlswXSA9IHZhcjMyLngyWzBdOwotICAgIHZhcjMzLngyWzFdID0gdmFyMzIueDJbMV07Ci0gICAgLyogMjogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjMzOwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfbm9uZSAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzI7Ci0gIG9yY191bmlvbjY0IHZhcjMzOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uNjQgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb242NCAqKSBleC0+YXJyYXlzWzRdOwotCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRxICovCi0gICAgdmFyMzIgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvcHlsICovCi0gICAgdmFyMzMueDJbMF0gPSB2YXIzMi54MlswXTsKLSAgICB2YXIzMy54MlsxXSA9IHZhcjMyLngyWzFdOwotICAgIC8qIDI6IHN0b3JlcSAqLwotICAgIHB0cjBbaV0gPSB2YXIzMzsKLSAgfQotCi19Ci0KLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfbm9uZSAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCAzOSwgOTcsIDExNywgMTAwLCAxMDUsIDExMSwgMTEyLCA5NywgMTEwLCAxMTEsIDExNCwgOTcsIDEwOSwgOTcsCi0gICAgICAgIDEwOSwgOTUsIDExMSwgMTE0LCA5OSwgOTUsIDExMiwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCA5NSwgMTAyLAotICAgICAgICAgICAgNTEsCi0gICAgICAgIDUwLCA5NSwgOTksIDEwNCwgNTAsIDk1LCAxMTAsIDExMSwgMTEwLCAxMDEsIDExLCA4LCA4LCAxMiwgOCwgOCwKLSAgICAgICAgMjEsIDEsIDExMiwgMCwgNCwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9ub25lKTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX25vbmUiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX25vbmUpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA4LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDgsICJzMSIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvcHlsIiwgMSwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3BzeSAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3BzeSAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMTYgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24xNiB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uMzIgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotICBvcmNfdW5pb24zMiB2YXI0MTsKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjY0IHZhcjQzOwotICBvcmNfdW5pb242NCB2YXI0NDsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjE2ICopIHMxOwotCi0gIC8qIDM6IGxvYWRwbCAqLwotICB2YXIzNi5mID0gcDI7Ci0gIC8qIDU6IGxvYWRwbCAqLwotICB2YXIzNy5mID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWR3ICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXIzOS5pID0gdmFyMzUuaTsKLSAgICAvKiAyOiBjb252bGYgKi8KLSAgICB2YXI0MC5mID0gdmFyMzkuaTsKLSAgICAvKiA0OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDEuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA2OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDIuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA3OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQyLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0My5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogODogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQzLngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQzLngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0NC54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQzLngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQzLngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0NC54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogOTogY29udnNzc2x3ICovCi0gICAgdmFyMzgueDJbMF0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ0LngyWzBdKTsKLSAgICB2YXIzOC54MlsxXSA9IE9SQ19DTEFNUF9TVyAodmFyNDQueDJbMV0pOwotICAgIC8qIDEwOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzg7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9wc3kgKE9yY0V4ZWN1dG9yICogT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IG4gPSBleC0+bjsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24xNiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjE2IHZhcjM1OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uMzIgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLSAgb3JjX3VuaW9uMzIgdmFyNDA7Ci0gIG9yY191bmlvbjMyIHZhcjQxOwotICBvcmNfdW5pb24zMiB2YXI0MjsKLSAgb3JjX3VuaW9uNjQgdmFyNDM7Ci0gIG9yY191bmlvbjY0IHZhcjQ0OwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb24xNiAqKSBleC0+YXJyYXlzWzRdOwotCi0gIC8qIDM6IGxvYWRwbCAqLwotICB2YXIzNi5pID0gZXgtPnBhcmFtc1syNV07Ci0gIC8qIDU6IGxvYWRwbCAqLwotICB2YXIzNy5pID0gZXgtPnBhcmFtc1syNF07Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWR3ICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXIzOS5pID0gdmFyMzUuaTsKLSAgICAvKiAyOiBjb252bGYgKi8KLSAgICB2YXI0MC5mID0gdmFyMzkuaTsKLSAgICAvKiA0OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDEuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA2OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDIuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA3OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQyLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0My5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogODogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQzLngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQzLngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0NC54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQzLngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQzLngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0NC54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogOTogY29udnNzc2x3ICovCi0gICAgdmFyMzgueDJbMF0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ0LngyWzBdKTsKLSAgICB2YXIzOC54MlsxXSA9IE9SQ19DTEFNUF9TVyAodmFyNDQueDJbMV0pOwotICAgIC8qIDEwOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzg7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3BzeSAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDM4LCA5NywgMTE3LCAxMDAsIDEwNSwgMTExLCAxMTIsIDk3LCAxMTAsIDExMSwgMTE0LCA5NywgMTA5LCA5NywKLSAgICAgICAgMTA5LCA5NSwgMTExLCAxMTQsIDk5LCA5NSwgMTEyLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDk1LCAxMTUsCi0gICAgICAgICAgICA0OSwKLSAgICAgICAgNTQsIDk1LCA5OSwgMTA0LCA0OSwgOTUsIDExMiwgMTE1LCAxMjEsIDExLCA0LCA0LCAxMiwgMiwgMiwgMTcsCi0gICAgICAgIDQsIDE3LCA0LCAyMCwgOCwgMjAsIDQsIDIwLCA0LCAxNTMsIDMzLCA0LCAyMTEsIDMzLCAzMywgMjAyLAotICAgICAgICAzNCwgMzMsIDI1LCAyMDIsIDMzLCAzMywgMjQsIDE5NCwgMzIsIDMzLCAzNCwgMjEsIDEsIDIxMCwgMzIsIDMyLAotICAgICAgICAyMSwgMSwgMTY1LCAwLCAzMiwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9wc3kpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfbmFtZSAocCwgImF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfcHN5Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9wc3kpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDIsICJzMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlcl9mbG9hdCAocCwgNCwgInAxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyX2Zsb2F0IChwLCA0LCAicDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDMiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252c3dsIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmxmIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDIsIE9SQ19WQVJfUDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGYiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtZXJnZWxxIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmZsIiwgMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnNzc2x3IiwgMSwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICB7Ci0gICAgb3JjX3VuaW9uMzIgdG1wOwotICAgIHRtcC5mID0gcDE7Ci0gICAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHRtcC5pOwotICB9Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMjsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDJdID0gdG1wLmk7Ci0gIH0KLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCi0KLQotLyogYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9wc3kgKi8KLSNpZmRlZiBESVNBQkxFX09SQwotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9wc3kgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzQ7Ci0gIG9yY191bmlvbjMyIHZhcjM1OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uMzIgdmFyMzc7Ci0gIG9yY191bmlvbjY0IHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLSAgb3JjX3VuaW9uMzIgdmFyNDA7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBzMTsKLQotICAvKiAxOiBsb2FkcGwgKi8KLSAgdmFyMzUuZiA9IHAyOwotICAvKiA0OiBsb2FkcGwgKi8KLSAgdmFyMzcuZiA9IHAxOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjM0ID0gcHRyNFtpXTsKLSAgICAvKiAyOiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM0LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzUuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyMzkuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiAzOiBsb2FkbCAqLwotICAgIHZhcjM2ID0gcHRyNFtpXTsKLSAgICAvKiA1OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM2LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDAuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA2OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQwLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjM5Lmk7Ci0gICAgICB2YXIzOC5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNzogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM4OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfcHN5IChPcmNFeGVjdXRvciAqIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uNjQgdmFyMzg7Ci0gIG9yY191bmlvbjMyIHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1s0XTsKLQotICAvKiAxOiBsb2FkcGwgKi8KLSAgdmFyMzUuaSA9IGV4LT5wYXJhbXNbMjVdOwotICAvKiA0OiBsb2FkcGwgKi8KLSAgdmFyMzcuaSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjM0ID0gcHRyNFtpXTsKLSAgICAvKiAyOiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM0LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzUuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyMzkuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiAzOiBsb2FkbCAqLwotICAgIHZhcjM2ID0gcHRyNFtpXTsKLSAgICAvKiA1OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM2LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDAuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA2OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQwLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjM5Lmk7Ci0gICAgICB2YXIzOC5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNzogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM4OwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9wc3kgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCAzOCwgOTcsIDExNywgMTAwLCAxMDUsIDExMSwgMTEyLCA5NywgMTEwLCAxMTEsIDExNCwgOTcsIDEwOSwgOTcsCi0gICAgICAgIDEwOSwgOTUsIDExMSwgMTE0LCA5OSwgOTUsIDExMiwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCA5NSwgMTAyLAotICAgICAgICAgICAgNTEsCi0gICAgICAgIDUwLCA5NSwgOTksIDEwNCwgNDksIDk1LCAxMTIsIDExNSwgMTIxLCAxMSwgOCwgOCwgMTIsIDQsIDQsIDE3LAotICAgICAgICA0LCAxNywgNCwgMjAsIDQsIDIwLCA0LCAyMDIsIDMzLCA0LCAyNSwgMjAyLCAzMiwgNCwgMjQsIDE5NCwKLSAgICAgICAgMCwgMzIsIDMzLCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3BzeSk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9wc3kiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3BzeSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDgsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgNCwgInMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyX2Zsb2F0IChwLCA0LCAicDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9QMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfUzEsIE9SQ19WQVJfUDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1lcmdlbHEiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMTsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gdG1wLmk7Ci0gIH0KLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAyOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMl0gPSB0bXAuaTsKLSAgfQotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9yaWdodCAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9yaWdodCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uMzIgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLSAgb3JjX3VuaW9uNjQgdmFyNDA7Ci0gIG9yY191bmlvbjY0IHZhcjQxOwotICBvcmNfdW5pb24zMiB2YXI0MjsKLSAgb3JjX3VuaW9uMzIgdmFyNDM7Ci0gIG9yY191bmlvbjMyIHZhcjQ0OwotICBvcmNfdW5pb24zMiB2YXI0NTsKLSAgb3JjX3VuaW9uMzIgdmFyNDY7Ci0gIG9yY191bmlvbjY0IHZhcjQ3OwotICBvcmNfdW5pb242NCB2YXI0ODsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIHMxOwotCi0gIC8qIDU6IGxvYWRwbCAqLwotICB2YXIzNy5mID0gcDI7Ci0gIC8qIDc6IGxvYWRwbCAqLwotICB2YXIzOC5mID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRsICovCi0gICAgdmFyMzYgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXI0MC54MlswXSA9IHZhcjM2LngyWzBdOwotICAgIHZhcjQwLngyWzFdID0gdmFyMzYueDJbMV07Ci0gICAgLyogMjogY29udmxmICovCi0gICAgdmFyNDEueDJmWzBdID0gdmFyNDAueDJbMF07Ci0gICAgdmFyNDEueDJmWzFdID0gdmFyNDAueDJbMV07Ci0gICAgLyogMzogc2VsZWN0MHFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0Mi5pID0gX3NyYy54MlswXTsKLSAgICB9Ci0gICAgLyogNDogc2VsZWN0MXFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0My5pID0gX3NyYy54MlsxXTsKLSAgICB9Ci0gICAgLyogNjogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0Mi5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM3LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQ0LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogODogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0Mi5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM4LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQ1LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogOTogYWRkZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0NC5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQzLmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICsgX3NyYzIuZjsKLSAgICAgIHZhcjQ2LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogMTA6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDUuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDYuaTsKLSAgICAgIHZhcjQ3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiAxMTogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQ3LngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQ3LngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0OC54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQ3LngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQ3LngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0OC54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogMTI6IGNvbnZzc3NsdyAqLwotICAgIHZhcjM5LngyWzBdID0gT1JDX0NMQU1QX1NXICh2YXI0OC54MlswXSk7Ci0gICAgdmFyMzkueDJbMV0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ4LngyWzFdKTsKLSAgICAvKiAxMzogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjM5OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X3JpZ2h0IChPcmNFeGVjdXRvciAqCi0gICAgT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IG4gPSBleC0+bjsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjMyIHZhcjM5OwotICBvcmNfdW5pb242NCB2YXI0MDsKLSAgb3JjX3VuaW9uNjQgdmFyNDE7Ci0gIG9yY191bmlvbjMyIHZhcjQyOwotICBvcmNfdW5pb24zMiB2YXI0MzsKLSAgb3JjX3VuaW9uMzIgdmFyNDQ7Ci0gIG9yY191bmlvbjMyIHZhcjQ1OwotICBvcmNfdW5pb24zMiB2YXI0NjsKLSAgb3JjX3VuaW9uNjQgdmFyNDc7Ci0gIG9yY191bmlvbjY0IHZhcjQ4OwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzRdOwotCi0gIC8qIDU6IGxvYWRwbCAqLwotICB2YXIzNy5pID0gZXgtPnBhcmFtc1syNV07Ci0gIC8qIDc6IGxvYWRwbCAqLwotICB2YXIzOC5pID0gZXgtPnBhcmFtc1syNF07Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRsICovCi0gICAgdmFyMzYgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXI0MC54MlswXSA9IHZhcjM2LngyWzBdOwotICAgIHZhcjQwLngyWzFdID0gdmFyMzYueDJbMV07Ci0gICAgLyogMjogY29udmxmICovCi0gICAgdmFyNDEueDJmWzBdID0gdmFyNDAueDJbMF07Ci0gICAgdmFyNDEueDJmWzFdID0gdmFyNDAueDJbMV07Ci0gICAgLyogMzogc2VsZWN0MHFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0Mi5pID0gX3NyYy54MlswXTsKLSAgICB9Ci0gICAgLyogNDogc2VsZWN0MXFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0My5pID0gX3NyYy54MlsxXTsKLSAgICB9Ci0gICAgLyogNjogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0Mi5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM3LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQ0LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogODogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0Mi5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM4LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQ1LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogOTogYWRkZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0NC5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQzLmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICsgX3NyYzIuZjsKLSAgICAgIHZhcjQ2LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogMTA6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDUuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDYuaTsKLSAgICAgIHZhcjQ3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiAxMTogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQ3LngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQ3LngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0OC54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQ3LngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQ3LngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0OC54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogMTI6IGNvbnZzc3NsdyAqLwotICAgIHZhcjM5LngyWzBdID0gT1JDX0NMQU1QX1NXICh2YXI0OC54MlswXSk7Ci0gICAgdmFyMzkueDJbMV0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ4LngyWzFdKTsKLSAgICAvKiAxMzogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjM5OwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfcmlnaHQgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCA0NCwgOTcsIDExNywgMTAwLCAxMDUsIDExMSwgMTEyLCA5NywgMTEwLCAxMTEsIDExNCwgOTcsIDEwOSwgOTcsCi0gICAgICAgIDEwOSwgOTUsIDExMSwgMTE0LCA5OSwgOTUsIDExMiwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCA5NSwgMTE1LAotICAgICAgICAgICAgNDksCi0gICAgICAgIDU0LCA5NSwgOTksIDEwNCwgNTAsIDk1LCAxMTIsIDExNSwgMTIxLCA5NSwgMTE0LCAxMDUsIDEwMywgMTA0LCAxMTYsIDExLAotICAgICAgICA0LCA0LCAxMiwgNCwgNCwgMTcsIDQsIDE3LCA0LCAyMCwgOCwgMjAsIDQsIDIwLCA0LCAyMCwKLSAgICAgICAgNCwgMjEsIDEsIDE1MywgMzIsIDQsIDIxLCAxLCAyMTEsIDMyLCAzMiwgMTkyLCAzMywgMzIsIDE5MywgMzQsCi0gICAgICAgIDMyLCAyMDIsIDM1LCAzMywgMjUsIDIwMiwgMzMsIDMzLCAyNCwgMjAwLCAzNCwgMzUsIDM0LCAxOTQsIDMyLCAzMywKLSAgICAgICAgMzQsIDIxLCAxLCAyMTAsIDMyLCAzMiwgMjEsIDEsIDE2NSwgMCwgMzIsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X3JpZ2h0KTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9yaWdodCIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X3JpZ2h0KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgNCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlcl9mbG9hdCAocCwgNCwgInAyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQzIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDQiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252c3dsIiwgMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmxmIiwgMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2VsZWN0MHFsIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2VsZWN0MXFsIiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDIsIE9SQ19WQVJfUDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGYiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhZGRmIiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9UMywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibWVyZ2VscSIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZmbCIsIDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzc3NsdyIsIDEsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAxOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSB0bXAuaTsKLSAgfQotICB7Ci0gICAgb3JjX3VuaW9uMzIgdG1wOwotICAgIHRtcC5mID0gcDI7Ci0gICAgZXgtPnBhcmFtc1tPUkNfVkFSX1AyXSA9IHRtcC5pOwotICB9Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X2xlZnQgKi8KLSNpZmRlZiBESVNBQkxFX09SQwotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfbGVmdCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uMzIgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLSAgb3JjX3VuaW9uNjQgdmFyNDA7Ci0gIG9yY191bmlvbjY0IHZhcjQxOwotICBvcmNfdW5pb24zMiB2YXI0MjsKLSAgb3JjX3VuaW9uMzIgdmFyNDM7Ci0gIG9yY191bmlvbjMyIHZhcjQ0OwotICBvcmNfdW5pb24zMiB2YXI0NTsKLSAgb3JjX3VuaW9uMzIgdmFyNDY7Ci0gIG9yY191bmlvbjY0IHZhcjQ3OwotICBvcmNfdW5pb242NCB2YXI0ODsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIHMxOwotCi0gIC8qIDU6IGxvYWRwbCAqLwotICB2YXIzNy5mID0gcDE7Ci0gIC8qIDc6IGxvYWRwbCAqLwotICB2YXIzOC5mID0gcDI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRsICovCi0gICAgdmFyMzYgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXI0MC54MlswXSA9IHZhcjM2LngyWzBdOwotICAgIHZhcjQwLngyWzFdID0gdmFyMzYueDJbMV07Ci0gICAgLyogMjogY29udmxmICovCi0gICAgdmFyNDEueDJmWzBdID0gdmFyNDAueDJbMF07Ci0gICAgdmFyNDEueDJmWzFdID0gdmFyNDAueDJbMV07Ci0gICAgLyogMzogc2VsZWN0MHFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0Mi5pID0gX3NyYy54MlswXTsKLSAgICB9Ci0gICAgLyogNDogc2VsZWN0MXFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0My5pID0gX3NyYy54MlsxXTsKLSAgICB9Ci0gICAgLyogNjogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0My5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM3LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQ0LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogODogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0My5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM4LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQ1LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogOTogYWRkZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0NC5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQyLmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICsgX3NyYzIuZjsKLSAgICAgIHZhcjQ2LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogMTA6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDYuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDUuaTsKLSAgICAgIHZhcjQ3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiAxMTogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQ3LngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQ3LngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0OC54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQ3LngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQ3LngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0OC54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogMTI6IGNvbnZzc3NsdyAqLwotICAgIHZhcjM5LngyWzBdID0gT1JDX0NMQU1QX1NXICh2YXI0OC54MlswXSk7Ci0gICAgdmFyMzkueDJbMV0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ4LngyWzFdKTsKLSAgICAvKiAxMzogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjM5OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X2xlZnQgKE9yY0V4ZWN1dG9yICoKLSAgICBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uMzIgdmFyMzk7Ci0gIG9yY191bmlvbjY0IHZhcjQwOwotICBvcmNfdW5pb242NCB2YXI0MTsKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjMyIHZhcjQzOwotICBvcmNfdW5pb24zMiB2YXI0NDsKLSAgb3JjX3VuaW9uMzIgdmFyNDU7Ci0gIG9yY191bmlvbjMyIHZhcjQ2OwotICBvcmNfdW5pb242NCB2YXI0NzsKLSAgb3JjX3VuaW9uNjQgdmFyNDg7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIGV4LT5hcnJheXNbNF07Ci0KLSAgLyogNTogbG9hZHBsICovCi0gIHZhcjM3LmkgPSBleC0+cGFyYW1zWzI0XTsKLSAgLyogNzogbG9hZHBsICovCi0gIHZhcjM4LmkgPSBleC0+cGFyYW1zWzI1XTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGwgKi8KLSAgICB2YXIzNiA9IHB0cjRbaV07Ci0gICAgLyogMTogY29udnN3bCAqLwotICAgIHZhcjQwLngyWzBdID0gdmFyMzYueDJbMF07Ci0gICAgdmFyNDAueDJbMV0gPSB2YXIzNi54MlsxXTsKLSAgICAvKiAyOiBjb252bGYgKi8KLSAgICB2YXI0MS54MmZbMF0gPSB2YXI0MC54MlswXTsKLSAgICB2YXI0MS54MmZbMV0gPSB2YXI0MC54MlsxXTsKLSAgICAvKiAzOiBzZWxlY3QwcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyNDEuaTsKLSAgICAgIHZhcjQyLmkgPSBfc3JjLngyWzBdOwotICAgIH0KLSAgICAvKiA0OiBzZWxlY3QxcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyNDEuaTsKLSAgICAgIHZhcjQzLmkgPSBfc3JjLngyWzFdOwotICAgIH0KLSAgICAvKiA2OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQzLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDQuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA4OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQzLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzguaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDUuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA5OiBhZGRmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQ0LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDIuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKyBfc3JjMi5mOwotICAgICAgdmFyNDYuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiAxMDogbWVyZ2VscSAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9kZXN0OwotICAgICAgX2Rlc3QueDJbMF0gPSB2YXI0Ni5pOwotICAgICAgX2Rlc3QueDJbMV0gPSB2YXI0NS5pOwotICAgICAgdmFyNDcuaSA9IF9kZXN0Lmk7Ci0gICAgfQotICAgIC8qIDExOiBjb252ZmwgKi8KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDcueDJmWzBdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDcueDJbMF0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQ4LngyWzBdID0gdG1wOwotICAgIH0KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDcueDJmWzFdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDcueDJbMV0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQ4LngyWzFdID0gdG1wOwotICAgIH0KLSAgICAvKiAxMjogY29udnNzc2x3ICovCi0gICAgdmFyMzkueDJbMF0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ4LngyWzBdKTsKLSAgICB2YXIzOS54MlsxXSA9IE9SQ19DTEFNUF9TVyAodmFyNDgueDJbMV0pOwotICAgIC8qIDEzOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzk7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDMsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDExNSwKLSAgICAgICAgICAgIDQ5LAotICAgICAgICA1NCwgOTUsIDk5LCAxMDQsIDUwLCA5NSwgMTEyLCAxMTUsIDEyMSwgOTUsIDEwOCwgMTAxLCAxMDIsIDExNiwgMTEsIDQsCi0gICAgICAgIDQsIDEyLCA0LCA0LCAxNywgNCwgMTcsIDQsIDIwLCA4LCAyMCwgNCwgMjAsIDQsIDIwLCA0LAotICAgICAgICAyMSwgMSwgMTUzLCAzMiwgNCwgMjEsIDEsIDIxMSwgMzIsIDMyLCAxOTIsIDMzLCAzMiwgMTkzLCAzNSwgMzIsCi0gICAgICAgIDIwMiwgMzQsIDM1LCAyNCwgMjAyLCAzNSwgMzUsIDI1LCAyMDAsIDMzLCAzNCwgMzMsIDE5NCwgMzIsIDMzLCAzNSwKLSAgICAgICAgMjEsIDEsIDIxMCwgMzIsIDMyLCAyMSwgMSwgMTY1LCAwLCAzMiwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfbGVmdCk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfbGVmdCIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfcHN5X2xlZnQpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDQsICJzMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlcl9mbG9hdCAocCwgNCwgInAxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyX2Zsb2F0IChwLCA0LCAicDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDMiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0NCIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzd2wiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252bGYiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QwcWwiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QxcWwiLCAwLCBPUkNfVkFSX1Q0LCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9QMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDQsIE9SQ19WQVJfUDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZGYiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1QyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtZXJnZWxxIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UNCwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmZsIiwgMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnNzc2x3IiwgMSwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICB7Ci0gICAgb3JjX3VuaW9uMzIgdG1wOwotICAgIHRtcC5mID0gcDE7Ci0gICAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHRtcC5pOwotICB9Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMjsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDJdID0gdG1wLmk7Ci0gIH0KLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCi0KLQotLyogYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9wc3lfcmlnaHQgKi8KLSNpZmRlZiBESVNBQkxFX09SQwotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9wc3lfcmlnaHQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzU7Ci0gIG9yY191bmlvbjY0IHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjY0IHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLSAgb3JjX3VuaW9uMzIgdmFyNDE7Ci0gIG9yY191bmlvbjMyIHZhcjQyOwotICBvcmNfdW5pb24zMiB2YXI0MzsKLSAgb3JjX3VuaW9uMzIgdmFyNDQ7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb242NCAqKSBzMTsKLQotICAvKiA0OiBsb2FkcGwgKi8KLSAgdmFyMzcuZiA9IHAyOwotICAvKiA2OiBsb2FkcGwgKi8KLSAgdmFyMzguZiA9IHAxOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkcSAqLwotICAgIHZhcjM1ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBzZWxlY3QwcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzUuaTsKLSAgICAgIHZhcjQwLmkgPSBfc3JjLngyWzBdOwotICAgIH0KLSAgICAvKiAyOiBsb2FkcSAqLwotICAgIHZhcjM2ID0gcHRyNFtpXTsKLSAgICAvKiAzOiBzZWxlY3QxcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzYuaTsKLSAgICAgIHZhcjQxLmkgPSBfc3JjLngyWzFdOwotICAgIH0KLSAgICAvKiA1OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDIuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA3OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzguaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDMuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA4OiBhZGRmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQyLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDEuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKyBfc3JjMi5mOwotICAgICAgdmFyNDQuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA5OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQzLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQ0Lmk7Ci0gICAgICB2YXIzOS5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogMTA6IHN0b3JlcSAqLwotICAgIHB0cjBbaV0gPSB2YXIzOTsKLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3BzeV9yaWdodCAoT3JjRXhlY3V0b3IgKgotICAgIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb242NCB2YXIzNTsKLSAgb3JjX3VuaW9uNjQgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uNjQgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotICBvcmNfdW5pb24zMiB2YXI0MTsKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjMyIHZhcjQzOwotICBvcmNfdW5pb24zMiB2YXI0NDsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX3VuaW9uNjQgKikgZXgtPmFycmF5c1s0XTsKLQotICAvKiA0OiBsb2FkcGwgKi8KLSAgdmFyMzcuaSA9IGV4LT5wYXJhbXNbMjVdOwotICAvKiA2OiBsb2FkcGwgKi8KLSAgdmFyMzguaSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkcSAqLwotICAgIHZhcjM1ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBzZWxlY3QwcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzUuaTsKLSAgICAgIHZhcjQwLmkgPSBfc3JjLngyWzBdOwotICAgIH0KLSAgICAvKiAyOiBsb2FkcSAqLwotICAgIHZhcjM2ID0gcHRyNFtpXTsKLSAgICAvKiAzOiBzZWxlY3QxcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzYuaTsKLSAgICAgIHZhcjQxLmkgPSBfc3JjLngyWzFdOwotICAgIH0KLSAgICAvKiA1OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzcuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDIuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA3OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzguaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDMuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA4OiBhZGRmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQyLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDEuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKyBfc3JjMi5mOwotICAgICAgdmFyNDQuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA5OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQzLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQ0Lmk7Ci0gICAgICB2YXIzOS5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogMTA6IHN0b3JlcSAqLwotICAgIHB0cjBbaV0gPSB2YXIzOTsKLSAgfQotCi19Ci0KLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDQsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDEwMiwKLSAgICAgICAgICAgIDUxLAotICAgICAgICA1MCwgOTUsIDk5LCAxMDQsIDUwLCA5NSwgMTEyLCAxMTUsIDEyMSwgOTUsIDExNCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMSwKLSAgICAgICAgOCwgOCwgMTIsIDgsIDgsIDE3LCA0LCAxNywgNCwgMjAsIDQsIDIwLCA0LCAyMCwgNCwgMTkyLAotICAgICAgICAzMiwgNCwgMTkzLCAzMywgNCwgMjAyLCAzNCwgMzIsIDI1LCAyMDIsIDMyLCAzMiwgMjQsIDIwMCwgMzMsIDM0LAotICAgICAgICAzMywgMTk0LCAwLCAzMiwgMzMsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0KTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3BzeV9yaWdodCIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgOCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA4LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlcl9mbG9hdCAocCwgNCwgInAyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQzIik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2VsZWN0MHFsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2VsZWN0MXFsIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9TMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDEsIE9SQ19WQVJfUDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGYiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhZGRmIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibWVyZ2VscSIsIDAsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAxOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSB0bXAuaTsKLSAgfQotICB7Ci0gICAgb3JjX3VuaW9uMzIgdG1wOwotICAgIHRtcC5mID0gcDI7Ci0gICAgZXgtPnBhcmFtc1tPUkNfVkFSX1AyXSA9IHRtcC5pOwotICB9Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X2xlZnQgKi8KLSNpZmRlZiBESVNBQkxFX09SQwotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9wc3lfbGVmdCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb242NCB2YXIzNTsKLSAgb3JjX3VuaW9uNjQgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uNjQgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotICBvcmNfdW5pb24zMiB2YXI0MTsKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjMyIHZhcjQzOwotICBvcmNfdW5pb24zMiB2YXI0NDsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjY0ICopIHMxOwotCi0gIC8qIDQ6IGxvYWRwbCAqLwotICB2YXIzNy5mID0gcDE7Ci0gIC8qIDY6IGxvYWRwbCAqLwotICB2YXIzOC5mID0gcDI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRxICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IHNlbGVjdDBxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzNS5pOwotICAgICAgdmFyNDAuaSA9IF9zcmMueDJbMF07Ci0gICAgfQotICAgIC8qIDI6IGxvYWRxICovCi0gICAgdmFyMzYgPSBwdHI0W2ldOwotICAgIC8qIDM6IHNlbGVjdDFxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzNi5pOwotICAgICAgdmFyNDEuaSA9IF9zcmMueDJbMV07Ci0gICAgfQotICAgIC8qIDU6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDEuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNy5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0Mi5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDc6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDEuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzOC5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0My5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDg6IGFkZGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDIuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXI0MC5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiArIF9zcmMyLmY7Ci0gICAgICB2YXI0NC5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDk6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDQuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDMuaTsKLSAgICAgIHZhcjM5LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiAxMDogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM5OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X2xlZnQgKE9yY0V4ZWN1dG9yICoKLSAgICBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzU7Ci0gIG9yY191bmlvbjY0IHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjY0IHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLSAgb3JjX3VuaW9uMzIgdmFyNDE7Ci0gIG9yY191bmlvbjMyIHZhcjQyOwotICBvcmNfdW5pb24zMiB2YXI0MzsKLSAgb3JjX3VuaW9uMzIgdmFyNDQ7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY191bmlvbjY0ICopIGV4LT5hcnJheXNbNF07Ci0KLSAgLyogNDogbG9hZHBsICovCi0gIHZhcjM3LmkgPSBleC0+cGFyYW1zWzI0XTsKLSAgLyogNjogbG9hZHBsICovCi0gIHZhcjM4LmkgPSBleC0+cGFyYW1zWzI1XTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZHEgKi8KLSAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgLyogMTogc2VsZWN0MHFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjM1Lmk7Ci0gICAgICB2YXI0MC5pID0gX3NyYy54MlswXTsKLSAgICB9Ci0gICAgLyogMjogbG9hZHEgKi8KLSAgICB2YXIzNiA9IHB0cjRbaV07Ci0gICAgLyogMzogc2VsZWN0MXFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjM2Lmk7Ci0gICAgICB2YXI0MS5pID0gX3NyYy54MlsxXTsKLSAgICB9Ci0gICAgLyogNTogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0MS5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM3LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQyLmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogNzogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0MS5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM4LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQzLmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogODogYWRkZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0Mi5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICsgX3NyYzIuZjsKLSAgICAgIHZhcjQ0LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogOTogbWVyZ2VscSAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9kZXN0OwotICAgICAgX2Rlc3QueDJbMF0gPSB2YXI0NC5pOwotICAgICAgX2Rlc3QueDJbMV0gPSB2YXI0My5pOwotICAgICAgdmFyMzkuaSA9IF9kZXN0Lmk7Ci0gICAgfQotICAgIC8qIDEwOiBzdG9yZXEgKi8KLSAgICBwdHIwW2ldID0gdmFyMzk7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3BzeV9sZWZ0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDMsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDEwMiwKLSAgICAgICAgICAgIDUxLAotICAgICAgICA1MCwgOTUsIDk5LCAxMDQsIDUwLCA5NSwgMTEyLCAxMTUsIDEyMSwgOTUsIDEwOCwgMTAxLCAxMDIsIDExNiwgMTEsIDgsCi0gICAgICAgIDgsIDEyLCA4LCA4LCAxNywgNCwgMTcsIDQsIDIwLCA0LCAyMCwgNCwgMjAsIDQsIDE5MiwgMzIsCi0gICAgICAgIDQsIDE5MywgMzQsIDQsIDIwMiwgMzMsIDM0LCAyNCwgMjAyLCAzNCwgMzQsIDI1LCAyMDAsIDMyLCAzMywgMzIsCi0gICAgICAgIDE5NCwgMCwgMzIsIDM0LCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3BzeV9sZWZ0KTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3BzeV9sZWZ0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9wc3lfbGVmdCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDgsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgOCwgInMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyX2Zsb2F0IChwLCA0LCAicDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MyIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNlbGVjdDBxbCIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfUzEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNlbGVjdDFxbCIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfUzEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGYiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UMywgT1JDX1ZBUl9QMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYWRkZiIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1lcmdlbHEiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QzLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMTsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gdG1wLmk7Ci0gIH0KLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAyOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMl0gPSB0bXAuaTsKLSAgfQotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9yaWdodCAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9yaWdodCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKQotewotICBpbnQgaTsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24xNiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjE2IHZhcjM1OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uMzIgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLSAgb3JjX3VuaW9uMzIgdmFyNDA7Ci0gIG9yY191bmlvbjY0IHZhcjQxOwotICBvcmNfdW5pb242NCB2YXI0MjsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjE2ICopIHMxOwotCi0gIC8qIDM6IGxvYWRwbCAqLwotICB2YXIzNi5mID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWR3ICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXIzOC5pID0gdmFyMzUuaTsKLSAgICAvKiAyOiBjb252bGYgKi8KLSAgICB2YXIzOS5mID0gdmFyMzguaTsKLSAgICAvKiA0OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM5LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDAuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA1OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjM5Lmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQwLmk7Ci0gICAgICB2YXI0MS5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNjogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQxLngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQxLngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0Mi54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQxLngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQxLngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0Mi54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogNzogY29udnNzc2x3ICovCi0gICAgdmFyMzcueDJbMF0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQyLngyWzBdKTsKLSAgICB2YXIzNy54MlsxXSA9IE9SQ19DTEFNUF9TVyAodmFyNDIueDJbMV0pOwotICAgIC8qIDg6IHN0b3JlbCAqLwotICAgIHB0cjBbaV0gPSB2YXIzNzsKLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9yaWdodCAoT3JjRXhlY3V0b3IgKgotICAgIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMTYgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24xNiB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uMzIgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotICBvcmNfdW5pb242NCB2YXI0MTsKLSAgb3JjX3VuaW9uNjQgdmFyNDI7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY191bmlvbjE2ICopIGV4LT5hcnJheXNbNF07Ci0KLSAgLyogMzogbG9hZHBsICovCi0gIHZhcjM2LmkgPSBleC0+cGFyYW1zWzI0XTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZHcgKi8KLSAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgLyogMTogY29udnN3bCAqLwotICAgIHZhcjM4LmkgPSB2YXIzNS5pOwotICAgIC8qIDI6IGNvbnZsZiAqLwotICAgIHZhcjM5LmYgPSB2YXIzOC5pOwotICAgIC8qIDQ6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzkuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0MC5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDU6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyMzkuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDAuaTsKLSAgICAgIHZhcjQxLmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA2OiBjb252ZmwgKi8KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDEueDJmWzBdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDEueDJbMF0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQyLngyWzBdID0gdG1wOwotICAgIH0KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDEueDJmWzFdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDEueDJbMV0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQyLngyWzFdID0gdG1wOwotICAgIH0KLSAgICAvKiA3OiBjb252c3NzbHcgKi8KLSAgICB2YXIzNy54MlswXSA9IE9SQ19DTEFNUF9TVyAodmFyNDIueDJbMF0pOwotICAgIHZhcjM3LngyWzFdID0gT1JDX0NMQU1QX1NXICh2YXI0Mi54MlsxXSk7Ci0gICAgLyogODogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjM3OwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fcmlnaHQgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDQ0LCA5NywgMTE3LCAxMDAsIDEwNSwgMTExLCAxMTIsIDk3LCAxMTAsIDExMSwgMTE0LCA5NywgMTA5LCA5NywKLSAgICAgICAgMTA5LCA5NSwgMTExLCAxMTQsIDk5LCA5NSwgMTEyLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDk1LCAxMTUsCi0gICAgICAgICAgICA0OSwKLSAgICAgICAgNTQsIDk1LCA5OSwgMTA0LCA0OSwgOTUsIDExNSwgMTA1LCAxMDksIDk1LCAxMTQsIDEwNSwgMTAzLCAxMDQsIDExNiwgMTEsCi0gICAgICAgIDQsIDQsIDEyLCAyLCAyLCAxNywgNCwgMjAsIDgsIDIwLCA0LCAyMCwgNCwgMTUzLCAzMywgNCwKLSAgICAgICAgMjExLCAzMywgMzMsIDIwMiwgMzQsIDMzLCAyNCwgMTk0LCAzMiwgMzMsIDM0LCAyMSwgMSwgMjEwLCAzMiwgMzIsCi0gICAgICAgIDIxLCAxLCAxNjUsIDAsIDMyLCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9yaWdodCk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fcmlnaHQiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9yaWdodCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDQsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgMiwgInMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyX2Zsb2F0IChwLCA0LCAicDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDMiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252c3dsIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmxmIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDIsIE9SQ19WQVJfUDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1lcmdlbHEiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QzLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252ZmwiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252c3NzbHciLCAxLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMTsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gdG1wLmk7Ci0gIH0KLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCi0KLQotLyogYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fbGVmdCAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjE2ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMTYgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjMyIHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLSAgb3JjX3VuaW9uNjQgdmFyNDE7Ci0gIG9yY191bmlvbjY0IHZhcjQyOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZDE7Ci0gIHB0cjQgPSAob3JjX3VuaW9uMTYgKikgczE7Ci0KLSAgLyogMzogbG9hZHBsICovCi0gIHZhcjM2LmYgPSBwMTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZHcgKi8KLSAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgLyogMTogY29udnN3bCAqLwotICAgIHZhcjM4LmkgPSB2YXIzNS5pOwotICAgIC8qIDI6IGNvbnZsZiAqLwotICAgIHZhcjM5LmYgPSB2YXIzOC5pOwotICAgIC8qIDQ6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzkuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0MC5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDU6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDAuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyMzkuaTsKLSAgICAgIHZhcjQxLmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA2OiBjb252ZmwgKi8KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDEueDJmWzBdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDEueDJbMF0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQyLngyWzBdID0gdG1wOwotICAgIH0KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDEueDJmWzFdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDEueDJbMV0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQyLngyWzFdID0gdG1wOwotICAgIH0KLSAgICAvKiA3OiBjb252c3NzbHcgKi8KLSAgICB2YXIzNy54MlswXSA9IE9SQ19DTEFNUF9TVyAodmFyNDIueDJbMF0pOwotICAgIHZhcjM3LngyWzFdID0gT1JDX0NMQU1QX1NXICh2YXI0Mi54MlsxXSk7Ci0gICAgLyogODogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjM3OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfc2ltX2xlZnQgKE9yY0V4ZWN1dG9yICoKLSAgICBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjE2ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMTYgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjMyIHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLSAgb3JjX3VuaW9uNjQgdmFyNDE7Ci0gIG9yY191bmlvbjY0IHZhcjQyOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb24xNiAqKSBleC0+YXJyYXlzWzRdOwotCi0gIC8qIDM6IGxvYWRwbCAqLwotICB2YXIzNi5pID0gZXgtPnBhcmFtc1syNF07Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWR3ICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXIzOC5pID0gdmFyMzUuaTsKLSAgICAvKiAyOiBjb252bGYgKi8KLSAgICB2YXIzOS5mID0gdmFyMzguaTsKLSAgICAvKiA0OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM5LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDAuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA1OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQwLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjM5Lmk7Ci0gICAgICB2YXI0MS5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNjogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQxLngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQxLngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0Mi54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQxLngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQxLngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0Mi54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogNzogY29udnNzc2x3ICovCi0gICAgdmFyMzcueDJbMF0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQyLngyWzBdKTsKLSAgICB2YXIzNy54MlsxXSA9IE9SQ19DTEFNUF9TVyAodmFyNDIueDJbMV0pOwotICAgIC8qIDg6IHN0b3JlbCAqLwotICAgIHB0cjBbaV0gPSB2YXIzNzsKLSAgfQotCi19Ci0KLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfc2ltX2xlZnQgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDQzLCA5NywgMTE3LCAxMDAsIDEwNSwgMTExLCAxMTIsIDk3LCAxMTAsIDExMSwgMTE0LCA5NywgMTA5LCA5NywKLSAgICAgICAgMTA5LCA5NSwgMTExLCAxMTQsIDk5LCA5NSwgMTEyLCAxMTQsIDExMSwgOTksIDEwMSwgMTE1LCAxMTUsIDk1LCAxMTUsCi0gICAgICAgICAgICA0OSwKLSAgICAgICAgNTQsIDk1LCA5OSwgMTA0LCA0OSwgOTUsIDExNSwgMTA1LCAxMDksIDk1LCAxMDgsIDEwMSwgMTAyLCAxMTYsIDExLCA0LAotICAgICAgICA0LCAxMiwgMiwgMiwgMTcsIDQsIDIwLCA4LCAyMCwgNCwgMjAsIDQsIDE1MywgMzQsIDQsIDIxMSwKLSAgICAgICAgMzQsIDM0LCAyMDIsIDMzLCAzNCwgMjQsIDE5NCwgMzIsIDMzLCAzNCwgMjEsIDEsIDIxMCwgMzIsIDMyLCAyMSwKLSAgICAgICAgMSwgMTY1LCAwLCAzMiwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fbGVmdCk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fbGVmdCIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfc2ltX2xlZnQpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDIsICJzMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlcl9mbG9hdCAocCwgNCwgInAxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQzIik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnN3bCIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfUzEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZsZiIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDMsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGYiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtZXJnZWxxIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmZsIiwgMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnNzc2x3IiwgMSwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICB7Ci0gICAgb3JjX3VuaW9uMzIgdG1wOwotICAgIHRtcC5mID0gcDE7Ci0gICAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHRtcC5pOwotICB9Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX3JpZ2h0ICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX3JpZ2h0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uNjQgdmFyMzg7Ci0gIG9yY191bmlvbjY0IHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLSAgb3JjX3VuaW9uMzIgdmFyNDE7Ci0gIG9yY191bmlvbjMyIHZhcjQyOwotICBvcmNfdW5pb242NCB2YXI0MzsKLSAgb3JjX3VuaW9uNjQgdmFyNDQ7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBzMTsKLQotICAvKiA1OiBsb2FkcGwgKi8KLSAgdmFyMzYuZiA9IHAxOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjM1ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBjb252c3dsICovCi0gICAgdmFyMzgueDJbMF0gPSB2YXIzNS54MlswXTsKLSAgICB2YXIzOC54MlsxXSA9IHZhcjM1LngyWzFdOwotICAgIC8qIDI6IGNvbnZsZiAqLwotICAgIHZhcjM5LngyZlswXSA9IHZhcjM4LngyWzBdOwotICAgIHZhcjM5LngyZlsxXSA9IHZhcjM4LngyWzFdOwotICAgIC8qIDM6IHNlbGVjdDBxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzOS5pOwotICAgICAgdmFyNDAuaSA9IF9zcmMueDJbMF07Ci0gICAgfQotICAgIC8qIDQ6IHNlbGVjdDFxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzOS5pOwotICAgICAgdmFyNDEuaSA9IF9zcmMueDJbMV07Ci0gICAgfQotICAgIC8qIDY6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDEuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0Mi5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDc6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDAuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDIuaTsKLSAgICAgIHZhcjQzLmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA4OiBjb252ZmwgKi8KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDMueDJmWzBdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDMueDJbMF0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQ0LngyWzBdID0gdG1wOwotICAgIH0KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDMueDJmWzFdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDMueDJbMV0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQ0LngyWzFdID0gdG1wOwotICAgIH0KLSAgICAvKiA5OiBjb252c3NzbHcgKi8KLSAgICB2YXIzNy54MlswXSA9IE9SQ19DTEFNUF9TVyAodmFyNDQueDJbMF0pOwotICAgIHZhcjM3LngyWzFdID0gT1JDX0NMQU1QX1NXICh2YXI0NC54MlsxXSk7Ci0gICAgLyogMTA6IHN0b3JlbCAqLwotICAgIHB0cjBbaV0gPSB2YXIzNzsKLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9yaWdodCAoT3JjRXhlY3V0b3IgKgotICAgIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb242NCB2YXIzODsKLSAgb3JjX3VuaW9uNjQgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotICBvcmNfdW5pb24zMiB2YXI0MTsKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjY0IHZhcjQzOwotICBvcmNfdW5pb242NCB2YXI0NDsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1s0XTsKLQotICAvKiA1OiBsb2FkcGwgKi8KLSAgdmFyMzYuaSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjM1ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBjb252c3dsICovCi0gICAgdmFyMzgueDJbMF0gPSB2YXIzNS54MlswXTsKLSAgICB2YXIzOC54MlsxXSA9IHZhcjM1LngyWzFdOwotICAgIC8qIDI6IGNvbnZsZiAqLwotICAgIHZhcjM5LngyZlswXSA9IHZhcjM4LngyWzBdOwotICAgIHZhcjM5LngyZlsxXSA9IHZhcjM4LngyWzFdOwotICAgIC8qIDM6IHNlbGVjdDBxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzOS5pOwotICAgICAgdmFyNDAuaSA9IF9zcmMueDJbMF07Ci0gICAgfQotICAgIC8qIDQ6IHNlbGVjdDFxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzOS5pOwotICAgICAgdmFyNDEuaSA9IF9zcmMueDJbMV07Ci0gICAgfQotICAgIC8qIDY6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyNDEuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0Mi5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDc6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDAuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDIuaTsKLSAgICAgIHZhcjQzLmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA4OiBjb252ZmwgKi8KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDMueDJmWzBdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDMueDJbMF0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQ0LngyWzBdID0gdG1wOwotICAgIH0KLSAgICB7Ci0gICAgICBpbnQgdG1wOwotICAgICAgdG1wID0gKGludCkgdmFyNDMueDJmWzFdOwotICAgICAgaWYgKHRtcCA9PSAweDgwMDAwMDAwICYmICEodmFyNDMueDJbMV0gJiAweDgwMDAwMDAwKSkKLSAgICAgICAgdG1wID0gMHg3ZmZmZmZmZjsKLSAgICAgIHZhcjQ0LngyWzFdID0gdG1wOwotICAgIH0KLSAgICAvKiA5OiBjb252c3NzbHcgKi8KLSAgICB2YXIzNy54MlswXSA9IE9SQ19DTEFNUF9TVyAodmFyNDQueDJbMF0pOwotICAgIHZhcjM3LngyWzFdID0gT1JDX0NMQU1QX1NXICh2YXI0NC54MlsxXSk7Ci0gICAgLyogMTA6IHN0b3JlbCAqLwotICAgIHB0cjBbaV0gPSB2YXIzNzsKLSAgfQotCi19Ci0KLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX3JpZ2h0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCA0NCwgOTcsIDExNywgMTAwLCAxMDUsIDExMSwgMTEyLCA5NywgMTEwLCAxMTEsIDExNCwgOTcsIDEwOSwgOTcsCi0gICAgICAgIDEwOSwgOTUsIDExMSwgMTE0LCA5OSwgOTUsIDExMiwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCA5NSwgMTE1LAotICAgICAgICAgICAgNDksCi0gICAgICAgIDU0LCA5NSwgOTksIDEwNCwgNTAsIDk1LCAxMTUsIDEwNSwgMTA5LCA5NSwgMTE0LCAxMDUsIDEwMywgMTA0LCAxMTYsIDExLAotICAgICAgICA0LCA0LCAxMiwgNCwgNCwgMTcsIDQsIDIwLCA4LCAyMCwgNCwgMjAsIDQsIDIxLCAxLCAxNTMsCi0gICAgICAgIDMyLCA0LCAyMSwgMSwgMjExLCAzMiwgMzIsIDE5MiwgMzMsIDMyLCAxOTMsIDM0LCAzMiwgMjAyLCAzNCwgMzQsCi0gICAgICAgIDI0LCAxOTQsIDMyLCAzMywgMzQsIDIxLCAxLCAyMTAsIDMyLCAzMiwgMjEsIDEsIDE2NSwgMCwgMzIsIDIsCi0gICAgICAgIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX3JpZ2h0KTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9yaWdodCIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX3JpZ2h0KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgNCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MyIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzd2wiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252bGYiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QwcWwiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QxcWwiLCAwLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UMywgT1JDX1ZBUl9QMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibWVyZ2VscSIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZmbCIsIDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzc3NsdyIsIDEsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAxOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSB0bXAuaTsKLSAgfQotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9sZWZ0ICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX2xlZnQgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjMyIHZhcjM3OwotICBvcmNfdW5pb242NCB2YXIzODsKLSAgb3JjX3VuaW9uNjQgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotICBvcmNfdW5pb24zMiB2YXI0MTsKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjY0IHZhcjQzOwotICBvcmNfdW5pb242NCB2YXI0NDsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIHMxOwotCi0gIC8qIDU6IGxvYWRwbCAqLwotICB2YXIzNi5mID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRsICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZzd2wgKi8KLSAgICB2YXIzOC54MlswXSA9IHZhcjM1LngyWzBdOwotICAgIHZhcjM4LngyWzFdID0gdmFyMzUueDJbMV07Ci0gICAgLyogMjogY29udmxmICovCi0gICAgdmFyMzkueDJmWzBdID0gdmFyMzgueDJbMF07Ci0gICAgdmFyMzkueDJmWzFdID0gdmFyMzgueDJbMV07Ci0gICAgLyogMzogc2VsZWN0MHFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjM5Lmk7Ci0gICAgICB2YXI0MC5pID0gX3NyYy54MlswXTsKLSAgICB9Ci0gICAgLyogNDogc2VsZWN0MXFsICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX3NyYzsKLSAgICAgIF9zcmMuaSA9IHZhcjM5Lmk7Ci0gICAgICB2YXI0MS5pID0gX3NyYy54MlsxXTsKLSAgICB9Ci0gICAgLyogNjogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXI0MC5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM2LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjQyLmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogNzogbWVyZ2VscSAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9kZXN0OwotICAgICAgX2Rlc3QueDJbMF0gPSB2YXI0Mi5pOwotICAgICAgX2Rlc3QueDJbMV0gPSB2YXI0MS5pOwotICAgICAgdmFyNDMuaSA9IF9kZXN0Lmk7Ci0gICAgfQotICAgIC8qIDg6IGNvbnZmbCAqLwotICAgIHsKLSAgICAgIGludCB0bXA7Ci0gICAgICB0bXAgPSAoaW50KSB2YXI0My54MmZbMF07Ci0gICAgICBpZiAodG1wID09IDB4ODAwMDAwMDAgJiYgISh2YXI0My54MlswXSAmIDB4ODAwMDAwMDApKQotICAgICAgICB0bXAgPSAweDdmZmZmZmZmOwotICAgICAgdmFyNDQueDJbMF0gPSB0bXA7Ci0gICAgfQotICAgIHsKLSAgICAgIGludCB0bXA7Ci0gICAgICB0bXAgPSAoaW50KSB2YXI0My54MmZbMV07Ci0gICAgICBpZiAodG1wID09IDB4ODAwMDAwMDAgJiYgISh2YXI0My54MlsxXSAmIDB4ODAwMDAwMDApKQotICAgICAgICB0bXAgPSAweDdmZmZmZmZmOwotICAgICAgdmFyNDQueDJbMV0gPSB0bXA7Ci0gICAgfQotICAgIC8qIDk6IGNvbnZzc3NsdyAqLwotICAgIHZhcjM3LngyWzBdID0gT1JDX0NMQU1QX1NXICh2YXI0NC54MlswXSk7Ci0gICAgdmFyMzcueDJbMV0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ0LngyWzFdKTsKLSAgICAvKiAxMDogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjM3OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX2xlZnQgKE9yY0V4ZWN1dG9yICoKLSAgICBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb24zMiB2YXIzNzsKLSAgb3JjX3VuaW9uNjQgdmFyMzg7Ci0gIG9yY191bmlvbjY0IHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLSAgb3JjX3VuaW9uMzIgdmFyNDE7Ci0gIG9yY191bmlvbjMyIHZhcjQyOwotICBvcmNfdW5pb242NCB2YXI0MzsKLSAgb3JjX3VuaW9uNjQgdmFyNDQ7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIGV4LT5hcnJheXNbNF07Ci0KLSAgLyogNTogbG9hZHBsICovCi0gIHZhcjM2LmkgPSBleC0+cGFyYW1zWzI0XTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGwgKi8KLSAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgLyogMTogY29udnN3bCAqLwotICAgIHZhcjM4LngyWzBdID0gdmFyMzUueDJbMF07Ci0gICAgdmFyMzgueDJbMV0gPSB2YXIzNS54MlsxXTsKLSAgICAvKiAyOiBjb252bGYgKi8KLSAgICB2YXIzOS54MmZbMF0gPSB2YXIzOC54MlswXTsKLSAgICB2YXIzOS54MmZbMV0gPSB2YXIzOC54MlsxXTsKLSAgICAvKiAzOiBzZWxlY3QwcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzkuaTsKLSAgICAgIHZhcjQwLmkgPSBfc3JjLngyWzBdOwotICAgIH0KLSAgICAvKiA0OiBzZWxlY3QxcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzkuaTsKLSAgICAgIHZhcjQxLmkgPSBfc3JjLngyWzFdOwotICAgIH0KLSAgICAvKiA2OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjQwLmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDIuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA3OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQyLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQxLmk7Ci0gICAgICB2YXI0My5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogODogY29udmZsICovCi0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQzLngyZlswXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQzLngyWzBdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0NC54MlswXSA9IHRtcDsKLSAgICB9Ci0gICAgewotICAgICAgaW50IHRtcDsKLSAgICAgIHRtcCA9IChpbnQpIHZhcjQzLngyZlsxXTsKLSAgICAgIGlmICh0bXAgPT0gMHg4MDAwMDAwMCAmJiAhKHZhcjQzLngyWzFdICYgMHg4MDAwMDAwMCkpCi0gICAgICAgIHRtcCA9IDB4N2ZmZmZmZmY7Ci0gICAgICB2YXI0NC54MlsxXSA9IHRtcDsKLSAgICB9Ci0gICAgLyogOTogY29udnNzc2x3ICovCi0gICAgdmFyMzcueDJbMF0gPSBPUkNfQ0xBTVBfU1cgKHZhcjQ0LngyWzBdKTsKLSAgICB2YXIzNy54MlsxXSA9IE9SQ19DTEFNUF9TVyAodmFyNDQueDJbMV0pOwotICAgIC8qIDEwOiBzdG9yZWwgKi8KLSAgICBwdHIwW2ldID0gdmFyMzc7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCA0MywgOTcsIDExNywgMTAwLCAxMDUsIDExMSwgMTEyLCA5NywgMTEwLCAxMTEsIDExNCwgOTcsIDEwOSwgOTcsCi0gICAgICAgIDEwOSwgOTUsIDExMSwgMTE0LCA5OSwgOTUsIDExMiwgMTE0LCAxMTEsIDk5LCAxMDEsIDExNSwgMTE1LCA5NSwgMTE1LAotICAgICAgICAgICAgNDksCi0gICAgICAgIDU0LCA5NSwgOTksIDEwNCwgNTAsIDk1LCAxMTUsIDEwNSwgMTA5LCA5NSwgMTA4LCAxMDEsIDEwMiwgMTE2LCAxMSwgNCwKLSAgICAgICAgNCwgMTIsIDQsIDQsIDE3LCA0LCAyMCwgOCwgMjAsIDQsIDIwLCA0LCAyMSwgMSwgMTUzLCAzMiwKLSAgICAgICAgNCwgMjEsIDEsIDIxMSwgMzIsIDMyLCAxOTIsIDMzLCAzMiwgMTkzLCAzNCwgMzIsIDIwMiwgMzMsIDMzLCAyNCwKLSAgICAgICAgMTk0LCAzMiwgMzMsIDM0LCAyMSwgMSwgMjEwLCAzMiwgMzIsIDIxLCAxLCAxNjUsIDAsIDMyLCAyLCAwLAotCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX2xlZnQpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfbmFtZSAocCwgImF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX2xlZnQiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9sZWZ0KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgNCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MyIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzd2wiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252bGYiLCAxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QwcWwiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QxcWwiLCAwLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9QMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibWVyZ2VscSIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZmbCIsIDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzc3NsdyIsIDEsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAxOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSB0bXAuaTsKLSAgfQotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9yaWdodCAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9yaWdodCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKQotewotICBpbnQgaTsKLSAgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjMyIHZhcjM0OwotICBvcmNfdW5pb24zMiB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjY0IHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uMzIgdmFyMzk7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBzMTsKLQotICAvKiAzOiBsb2FkcGwgKi8KLSAgdmFyMzYuZiA9IHAxOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjM0ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBjb3B5bCAqLwotICAgIHZhcjM4LmkgPSB2YXIzNC5pOwotICAgIC8qIDI6IGxvYWRsICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDQ6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzUuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXIzOS5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDU6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyMzguaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyMzkuaTsKLSAgICAgIHZhcjM3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA2OiBzdG9yZXEgKi8KLSAgICBwdHIwW2ldID0gdmFyMzc7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fcmlnaHQgKE9yY0V4ZWN1dG9yICoKLSAgICBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzQ7Ci0gIG9yY191bmlvbjMyIHZhcjM1OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uNjQgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1s0XTsKLQotICAvKiAzOiBsb2FkcGwgKi8KLSAgdmFyMzYuaSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjM0ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBjb3B5bCAqLwotICAgIHZhcjM4LmkgPSB2YXIzNC5pOwotICAgIC8qIDI6IGxvYWRsICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDQ6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzUuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXIzOS5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDU6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyMzguaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyMzkuaTsKLSAgICAgIHZhcjM3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA2OiBzdG9yZXEgKi8KLSAgICBwdHIwW2ldID0gdmFyMzc7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9yaWdodCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDQsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDEwMiwKLSAgICAgICAgICAgIDUxLAotICAgICAgICA1MCwgOTUsIDk5LCAxMDQsIDQ5LCA5NSwgMTE1LCAxMDUsIDEwOSwgOTUsIDExNCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMSwKLSAgICAgICAgOCwgOCwgMTIsIDQsIDQsIDE3LCA0LCAyMCwgNCwgMjAsIDQsIDExMiwgMzIsIDQsIDIwMiwgMzMsCi0gICAgICAgIDQsIDI0LCAxOTQsIDAsIDMyLCAzMywgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fcmlnaHQpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfbmFtZSAocCwgImF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfc2ltX3JpZ2h0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fcmlnaHQpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA4LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDQsICJzMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlcl9mbG9hdCAocCwgNCwgInAxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MiIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvcHlsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfUzEsIE9SQ19WQVJfUDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1lcmdlbHEiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMTsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gdG1wLmk7Ci0gIH0KLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCi0KLQotLyogYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fbGVmdCAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9sZWZ0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzQ7Ci0gIG9yY191bmlvbjMyIHZhcjM1OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uNjQgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIHMxOwotCi0gIC8qIDE6IGxvYWRwbCAqLwotICB2YXIzNS5mID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRsICovCi0gICAgdmFyMzQgPSBwdHI0W2ldOwotICAgIC8qIDI6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzQuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNS5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXIzOC5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDM6IGxvYWRsICovCi0gICAgdmFyMzYgPSBwdHI0W2ldOwotICAgIC8qIDQ6IGNvcHlsICovCi0gICAgdmFyMzkuaSA9IHZhcjM2Lmk7Ci0gICAgLyogNTogbWVyZ2VscSAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9kZXN0OwotICAgICAgX2Rlc3QueDJbMF0gPSB2YXIzOC5pOwotICAgICAgX2Rlc3QueDJbMV0gPSB2YXIzOS5pOwotICAgICAgdmFyMzcuaSA9IF9kZXN0Lmk7Ci0gICAgfQotICAgIC8qIDY6IHN0b3JlcSAqLwotICAgIHB0cjBbaV0gPSB2YXIzNzsKLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9sZWZ0IChPcmNFeGVjdXRvciAqCi0gICAgT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IG4gPSBleC0+bjsKLSAgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjMyIHZhcjM0OwotICBvcmNfdW5pb24zMiB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjY0IHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uMzIgdmFyMzk7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY191bmlvbjMyICopIGV4LT5hcnJheXNbNF07Ci0KLSAgLyogMTogbG9hZHBsICovCi0gIHZhcjM1LmkgPSBleC0+cGFyYW1zWzI0XTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGwgKi8KLSAgICB2YXIzNCA9IHB0cjRbaV07Ci0gICAgLyogMjogbXVsZiAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMxOwotICAgICAgb3JjX3VuaW9uMzIgX3NyYzI7Ci0gICAgICBvcmNfdW5pb24zMiBfZGVzdDE7Ci0gICAgICBfc3JjMS5pID0gT1JDX0RFTk9STUFMICh2YXIzNC5pKTsKLSAgICAgIF9zcmMyLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM1LmkpOwotICAgICAgX2Rlc3QxLmYgPSBfc3JjMS5mICogX3NyYzIuZjsKLSAgICAgIHZhcjM4LmkgPSBPUkNfREVOT1JNQUwgKF9kZXN0MS5pKTsKLSAgICB9Ci0gICAgLyogMzogbG9hZGwgKi8KLSAgICB2YXIzNiA9IHB0cjRbaV07Ci0gICAgLyogNDogY29weWwgKi8KLSAgICB2YXIzOS5pID0gdmFyMzYuaTsKLSAgICAvKiA1OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjM4Lmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjM5Lmk7Ci0gICAgICB2YXIzNy5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNjogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM3OwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fbGVmdCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDMsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDEwMiwKLSAgICAgICAgICAgIDUxLAotICAgICAgICA1MCwgOTUsIDk5LCAxMDQsIDQ5LCA5NSwgMTE1LCAxMDUsIDEwOSwgOTUsIDEwOCwgMTAxLCAxMDIsIDExNiwgMTEsIDgsCi0gICAgICAgIDgsIDEyLCA0LCA0LCAxNywgNCwgMjAsIDQsIDIwLCA0LCAyMDIsIDMyLCA0LCAyNCwgMTEyLCAzMywKLSAgICAgICAgNCwgMTk0LCAwLCAzMiwgMzMsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfc2ltX2xlZnQpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfbmFtZSAocCwgImF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDFfc2ltX2xlZnQiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9sZWZ0KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgOCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9QMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29weWwiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtZXJnZWxxIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICB7Ci0gICAgb3JjX3VuaW9uMzIgdG1wOwotICAgIHRtcC5mID0gcDE7Ci0gICAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHRtcC5pOwotICB9Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0ICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzQ7Ci0gIG9yY191bmlvbjY0IHZhcjM1OwotICBvcmNfdW5pb24zMiB2YXIzNjsKLSAgb3JjX3VuaW9uNjQgdmFyMzc7Ci0gIG9yY191bmlvbjMyIHZhcjM4OwotICBvcmNfdW5pb24zMiB2YXIzOTsKLSAgb3JjX3VuaW9uMzIgdmFyNDA7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb242NCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb242NCAqKSBzMTsKLQotICAvKiA0OiBsb2FkcGwgKi8KLSAgdmFyMzYuZiA9IHAxOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkcSAqLwotICAgIHZhcjM0ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBzZWxlY3QwcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzQuaTsKLSAgICAgIHZhcjM4LmkgPSBfc3JjLngyWzBdOwotICAgIH0KLSAgICAvKiAyOiBsb2FkcSAqLwotICAgIHZhcjM1ID0gcHRyNFtpXTsKLSAgICAvKiAzOiBzZWxlY3QxcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzUuaTsKLSAgICAgIHZhcjM5LmkgPSBfc3JjLngyWzFdOwotICAgIH0KLSAgICAvKiA1OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM5LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDAuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA2OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjM4Lmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjQwLmk7Ci0gICAgICB2YXIzNy5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNzogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM3OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0IChPcmNFeGVjdXRvciAqCi0gICAgT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IG4gPSBleC0+bjsKLSAgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb242NCAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjY0IHZhcjM0OwotICBvcmNfdW5pb242NCB2YXIzNTsKLSAgb3JjX3VuaW9uMzIgdmFyMzY7Ci0gIG9yY191bmlvbjY0IHZhcjM3OwotICBvcmNfdW5pb24zMiB2YXIzODsKLSAgb3JjX3VuaW9uMzIgdmFyMzk7Ci0gIG9yY191bmlvbjMyIHZhcjQwOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uNjQgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb242NCAqKSBleC0+YXJyYXlzWzRdOwotCi0gIC8qIDQ6IGxvYWRwbCAqLwotICB2YXIzNi5pID0gZXgtPnBhcmFtc1syNF07Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRxICovCi0gICAgdmFyMzQgPSBwdHI0W2ldOwotICAgIC8qIDE6IHNlbGVjdDBxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzNC5pOwotICAgICAgdmFyMzguaSA9IF9zcmMueDJbMF07Ci0gICAgfQotICAgIC8qIDI6IGxvYWRxICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDM6IHNlbGVjdDFxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzNS5pOwotICAgICAgdmFyMzkuaSA9IF9zcmMueDJbMV07Ci0gICAgfQotICAgIC8qIDU6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzkuaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0MC5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDY6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyMzguaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyNDAuaTsKLSAgICAgIHZhcjM3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA3OiBzdG9yZXEgKi8KLSAgICBwdHIwW2ldID0gdmFyMzc7Ci0gIH0KLQotfQotCi12b2lkCi1hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9yaWdodCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDQsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDEwMiwKLSAgICAgICAgICAgIDUxLAotICAgICAgICA1MCwgOTUsIDk5LCAxMDQsIDUwLCA5NSwgMTE1LCAxMDUsIDEwOSwgOTUsIDExNCwgMTA1LCAxMDMsIDEwNCwgMTE2LCAxMSwKLSAgICAgICAgOCwgOCwgMTIsIDgsIDgsIDE3LCA0LCAyMCwgNCwgMjAsIDQsIDE5MiwgMzIsIDQsIDE5MywgMzMsCi0gICAgICAgIDQsIDIwMiwgMzMsIDMzLCAyNCwgMTk0LCAwLCAzMiwgMzMsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0KTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9yaWdodCIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwKLSAgICAgICAgICBfYmFja3VwX2F1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX3JpZ2h0KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgOCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA4LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXJfZmxvYXQgKHAsIDQsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QwcWwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1MxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzZWxlY3QxcWwiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1MxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxmIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9QMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibWVyZ2VscSIsIDAsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgewotICAgIG9yY191bmlvbjMyIHRtcDsKLSAgICB0bXAuZiA9IHAxOwotICAgIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSB0bXAuaTsKLSAgfQotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9sZWZ0ICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfc2ltX2xlZnQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb242NCB2YXIzNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb242NCB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjMyIHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGQxOwotICBwdHI0ID0gKG9yY191bmlvbjY0ICopIHMxOwotCi0gIC8qIDQ6IGxvYWRwbCAqLwotICB2YXIzNi5mID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRxICovCi0gICAgdmFyMzQgPSBwdHI0W2ldOwotICAgIC8qIDE6IHNlbGVjdDBxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzNC5pOwotICAgICAgdmFyMzguaSA9IF9zcmMueDJbMF07Ci0gICAgfQotICAgIC8qIDI6IGxvYWRxICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDM6IHNlbGVjdDFxbCAqLwotICAgIHsKLSAgICAgIG9yY191bmlvbjY0IF9zcmM7Ci0gICAgICBfc3JjLmkgPSB2YXIzNS5pOwotICAgICAgdmFyMzkuaSA9IF9zcmMueDJbMV07Ci0gICAgfQotICAgIC8qIDU6IG11bGYgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMTsKLSAgICAgIG9yY191bmlvbjMyIF9zcmMyOwotICAgICAgb3JjX3VuaW9uMzIgX2Rlc3QxOwotICAgICAgX3NyYzEuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzguaSk7Ci0gICAgICBfc3JjMi5pID0gT1JDX0RFTk9STUFMICh2YXIzNi5pKTsKLSAgICAgIF9kZXN0MS5mID0gX3NyYzEuZiAqIF9zcmMyLmY7Ci0gICAgICB2YXI0MC5pID0gT1JDX0RFTk9STUFMIChfZGVzdDEuaSk7Ci0gICAgfQotICAgIC8qIDY6IG1lcmdlbHEgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfZGVzdDsKLSAgICAgIF9kZXN0LngyWzBdID0gdmFyNDAuaTsKLSAgICAgIF9kZXN0LngyWzFdID0gdmFyMzkuaTsKLSAgICAgIHZhcjM3LmkgPSBfZGVzdC5pOwotICAgIH0KLSAgICAvKiA3OiBzdG9yZXEgKi8KLSAgICBwdHIwW2ldID0gdmFyMzc7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9zaW1fbGVmdCAoT3JjRXhlY3V0b3IgKgotICAgIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjY0ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uNjQgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb242NCB2YXIzNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzU7Ci0gIG9yY191bmlvbjMyIHZhcjM2OwotICBvcmNfdW5pb242NCB2YXIzNzsKLSAgb3JjX3VuaW9uMzIgdmFyMzg7Ci0gIG9yY191bmlvbjMyIHZhcjM5OwotICBvcmNfdW5pb24zMiB2YXI0MDsKLQotICBwdHIwID0gKG9yY191bmlvbjY0ICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX3VuaW9uNjQgKikgZXgtPmFycmF5c1s0XTsKLQotICAvKiA0OiBsb2FkcGwgKi8KLSAgdmFyMzYuaSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkcSAqLwotICAgIHZhcjM0ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBzZWxlY3QwcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzQuaTsKLSAgICAgIHZhcjM4LmkgPSBfc3JjLngyWzBdOwotICAgIH0KLSAgICAvKiAyOiBsb2FkcSAqLwotICAgIHZhcjM1ID0gcHRyNFtpXTsKLSAgICAvKiAzOiBzZWxlY3QxcWwgKi8KLSAgICB7Ci0gICAgICBvcmNfdW5pb242NCBfc3JjOwotICAgICAgX3NyYy5pID0gdmFyMzUuaTsKLSAgICAgIHZhcjM5LmkgPSBfc3JjLngyWzFdOwotICAgIH0KLSAgICAvKiA1OiBtdWxmICovCi0gICAgewotICAgICAgb3JjX3VuaW9uMzIgX3NyYzE7Ci0gICAgICBvcmNfdW5pb24zMiBfc3JjMjsKLSAgICAgIG9yY191bmlvbjMyIF9kZXN0MTsKLSAgICAgIF9zcmMxLmkgPSBPUkNfREVOT1JNQUwgKHZhcjM4LmkpOwotICAgICAgX3NyYzIuaSA9IE9SQ19ERU5PUk1BTCAodmFyMzYuaSk7Ci0gICAgICBfZGVzdDEuZiA9IF9zcmMxLmYgKiBfc3JjMi5mOwotICAgICAgdmFyNDAuaSA9IE9SQ19ERU5PUk1BTCAoX2Rlc3QxLmkpOwotICAgIH0KLSAgICAvKiA2OiBtZXJnZWxxICovCi0gICAgewotICAgICAgb3JjX3VuaW9uNjQgX2Rlc3Q7Ci0gICAgICBfZGVzdC54MlswXSA9IHZhcjQwLmk7Ci0gICAgICBfZGVzdC54MlsxXSA9IHZhcjM5Lmk7Ci0gICAgICB2YXIzNy5pID0gX2Rlc3QuaTsKLSAgICB9Ci0gICAgLyogNzogc3RvcmVxICovCi0gICAgcHRyMFtpXSA9IHZhcjM3OwotICB9Ci0KLX0KLQotdm9pZAotYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9zaW1fbGVmdCAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgNDMsIDk3LCAxMTcsIDEwMCwgMTA1LCAxMTEsIDExMiwgOTcsIDExMCwgMTExLCAxMTQsIDk3LCAxMDksIDk3LAotICAgICAgICAxMDksIDk1LCAxMTEsIDExNCwgOTksIDk1LCAxMTIsIDExNCwgMTExLCA5OSwgMTAxLCAxMTUsIDExNSwgOTUsIDEwMiwKLSAgICAgICAgICAgIDUxLAotICAgICAgICA1MCwgOTUsIDk5LCAxMDQsIDUwLCA5NSwgMTE1LCAxMDUsIDEwOSwgOTUsIDEwOCwgMTAxLCAxMDIsIDExNiwgMTEsIDgsCi0gICAgICAgIDgsIDEyLCA4LCA4LCAxNywgNCwgMjAsIDQsIDIwLCA0LCAxOTIsIDMyLCA0LCAxOTMsIDMzLCA0LAotICAgICAgICAyMDIsIDMyLCAzMiwgMjQsIDE5NCwgMCwgMzIsIDMzLCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9hdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9sZWZ0KTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9sZWZ0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLAotICAgICAgICAgIF9iYWNrdXBfYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9zaW1fbGVmdCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDgsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgOCwgInMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyX2Zsb2F0IChwLCA0LCAicDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQyIik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2VsZWN0MHFsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2VsZWN0MXFsIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9TMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsZiIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfUDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1lcmdlbHEiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIHsKLSAgICBvcmNfdW5pb24zMiB0bXA7Ci0gICAgdG1wLmYgPSBwMTsKLSAgICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gdG1wLmk7Ci0gIH0KLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb3Bhbm9yYW1hb3JjLWRpc3QuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWFvcmMtZGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjExZmJhLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWFvcmMtZGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLQotLyogYXV0b2dlbmVyYXRlZCBmcm9tIGF1ZGlvcGFub3JhbWFvcmMub3JjICovCi0KLSNpZm5kZWYgX0FVRElPUEFOT1JBTUFPUkNfSF8KLSNkZWZpbmUgX0FVRElPUEFOT1JBTUFPUkNfSF8KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0KLQotI2lmbmRlZiBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jZGVmaW5lIF9PUkNfSU5URUdFUl9UWVBFREVGU18KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2luY2x1ZGUgPHN0ZGludC5oPgotdHlwZWRlZiBpbnQ4X3Qgb3JjX2ludDg7Ci10eXBlZGVmIGludDE2X3Qgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQzMl90IG9yY19pbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVpbnQ4X3Qgb3JjX3VpbnQ4OwotdHlwZWRlZiB1aW50MTZfdCBvcmNfdWludDE2OwotdHlwZWRlZiB1aW50MzJfdCBvcmNfdWludDMyOwotdHlwZWRlZiB1aW50NjRfdCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgVUlOVDY0X0MoeCkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBfX2ludDggb3JjX2ludDg7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDE2IG9yY19pbnQxNjsKLXR5cGVkZWYgc2lnbmVkIF9faW50MzIgb3JjX2ludDMyOwotdHlwZWRlZiBzaWduZWQgX19pbnQ2NCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50OCBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiBvcmNfdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVWk2NCkKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotdHlwZWRlZiBzaWduZWQgY2hhciBvcmNfaW50ODsKLXR5cGVkZWYgc2hvcnQgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQgb3JjX2ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG9yY191aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IG9yY191aW50MzI7Ci0jaWYgSU5UX01BWCA9PSBMT05HX01BWAotdHlwZWRlZiBsb25nIGxvbmcgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTEwpCi0jZWxzZQotdHlwZWRlZiBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VMKQotI2VuZGlmCi0jZW5kaWYKLXR5cGVkZWYgdW5pb24geyBvcmNfaW50MTYgaTsgb3JjX2ludDggeDJbMl07IH0gb3JjX3VuaW9uMTY7Ci10eXBlZGVmIHVuaW9uIHsgb3JjX2ludDMyIGk7IGZsb2F0IGY7IG9yY19pbnQxNiB4MlsyXTsgb3JjX2ludDggeDRbNF07IH0gb3JjX3VuaW9uMzI7Ci10eXBlZGVmIHVuaW9uIHsgb3JjX2ludDY0IGk7IGRvdWJsZSBmOyBvcmNfaW50MzIgeDJbMl07IGZsb2F0IHgyZlsyXTsgb3JjX2ludDE2IHg0WzRdOyB9IG9yY191bmlvbjY0OwotI2VuZGlmCi0jaWZuZGVmIE9SQ19SRVNUUklDVAotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIE9SQ19SRVNUUklDVCByZXN0cmljdAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgX19yZXN0cmljdF9fCi0jZWxzZQotI2RlZmluZSBPUkNfUkVTVFJJQ1QKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgT1JDX0lOVEVSTkFMCi0jaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU5MCkKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1NTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2hpZGRlbgotI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxzZQotI2RlZmluZSBPUkNfSU5URVJOQUwKLSNlbmRpZgotI2VuZGlmCi0KLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9ub25lIChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX25vbmUgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfbm9uZSAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9ub25lIChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3BzeSAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3BzeSAoZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9yaWdodCAoZ2ludDE2ICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBnaW50MTYgKiBPUkNfUkVTVFJJQ1QgczEsIGZsb2F0IHAxLCBmbG9hdCBwMiwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGZsb2F0IHAyLCBpbnQgbik7Ci12b2lkIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X2xlZnQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9zaW1fcmlnaHQgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9zaW1fcmlnaHQgKGdpbnQxNiAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ2ludDE2ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9sZWZ0IChnaW50MTYgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdpbnQxNiAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fcmlnaHQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9sZWZ0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKTsKLXZvaWQgYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9zaW1fcmlnaHQgKGdmbG9hdCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ2Zsb2F0ICogT1JDX1JFU1RSSUNUIHMxLCBmbG9hdCBwMSwgaW50IG4pOwotdm9pZCBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3NpbV9sZWZ0IChnZmxvYXQgKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGdmbG9hdCAqIE9SQ19SRVNUUklDVCBzMSwgZmxvYXQgcDEsIGludCBuKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2F1ZGlvcGFub3JhbWFvcmMub3JjIGIvZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYW9yYy5vcmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MTQwMTEuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvZngvYXVkaW9wYW5vcmFtYW9yYy5vcmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotIyBwYXNzIHRocm91Z2ggZnVuY3Rpb25zCi0KLS5mdW5jdGlvbiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX25vbmUKLS5zb3VyY2UgMiBzMSBnaW50MTYKLS5kZXN0IDQgZDEgZ2ludDE2Ci0KLW1lcmdld2wgZDEgczEgczEKLQotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9ub25lCi0uc291cmNlIDQgczEgZ2Zsb2F0Ci0uZGVzdCA4IGQxIGdmbG9hdAotCi1tZXJnZWxxIGQxIHMxIHMxCi0KLQotLmZ1bmN0aW9uIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfbm9uZQotLnNvdXJjZSA0IHMxIGdpbnQxNgotLmRlc3QgNCBkMSBnaW50MTYKLQoteDIgY29weXcgZDEgczEKLQotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9ub25lCi0uc291cmNlIDggczEgZ2Zsb2F0Ci0uZGVzdCA4IGQxIGdmbG9hdAotCi14MiBjb3B5bCBkMSBzMQotCi0KLSMgcHN5Y2hvYWNvdXN0aWMgcHJvY2Vzc2luZyBmdW5jdGlvbgotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMV9wc3kKLS5zb3VyY2UgMiBzMSBnaW50MTYKLS5kZXN0IDQgZDEgZ2ludDE2Ci0uZmxvYXRwYXJhbSA0IGxwYW4KLS5mbG9hdHBhcmFtIDQgcnBhbgotLnRlbXAgOCB0MQotLnRlbXAgNCBsZWZ0Ci0udGVtcCA0IHJpZ2h0Ci0KLWNvbnZzd2wgbGVmdCBzMQotY29udmxmIGxlZnQgbGVmdAotbXVsZiByaWdodCBsZWZ0IHJwYW4KLW11bGYgbGVmdCBsZWZ0IGxwYW4KLW1lcmdlbHEgdDEgbGVmdCByaWdodAoteDIgY29udmZsIHQxIHQxCi14MiBjb252c3NzbHcgZDEgdDEKLQotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9wc3kKLS5zb3VyY2UgNCBzMSBnZmxvYXQKLS5kZXN0IDggZDEgZ2Zsb2F0Ci0uZmxvYXRwYXJhbSA0IGxwYW4KLS5mbG9hdHBhcmFtIDQgcnBhbgotLnRlbXAgNCBsZWZ0Ci0udGVtcCA0IHJpZ2h0Ci0KLW11bGYgcmlnaHQgczEgcnBhbgotbXVsZiBsZWZ0IHMxIGxwYW4KLW1lcmdlbHEgZDEgbGVmdCByaWdodAotCi0KLS5mdW5jdGlvbiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3BzeV9yaWdodAotLnNvdXJjZSA0IHMxIGdpbnQxNgotLmRlc3QgNCBkMSBnaW50MTYKLS5mbG9hdHBhcmFtIDQgbGxwYW4KLS5mbG9hdHBhcmFtIDQgcmxwYW4KLS50ZW1wIDggdDEKLS50ZW1wIDQgbGVmdAotLnRlbXAgNCByaWdodAotLnRlbXAgNCByaWdodDEKLQoteDIgY29udnN3bCB0MSBzMQoteDIgY29udmxmIHQxIHQxCi1zZWxlY3QwcWwgbGVmdCB0MQotc2VsZWN0MXFsIHJpZ2h0IHQxCi1tdWxmIHJpZ2h0MSBsZWZ0IHJscGFuCi1tdWxmIGxlZnQgbGVmdCBsbHBhbgotYWRkZiByaWdodCByaWdodDEgcmlnaHQKLW1lcmdlbHEgdDEgbGVmdCByaWdodAoteDIgY29udmZsIHQxIHQxCi14MiBjb252c3NzbHcgZDEgdDEKLQotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfczE2X2NoMl9wc3lfbGVmdAotLnNvdXJjZSA0IHMxIGdpbnQxNgotLmRlc3QgNCBkMSBnaW50MTYKLS5mbG9hdHBhcmFtIDQgbHJwYW4KLS5mbG9hdHBhcmFtIDQgcnJwYW4KLS50ZW1wIDggdDEKLS50ZW1wIDQgbGVmdAotLnRlbXAgNCBsZWZ0MQotLnRlbXAgNCByaWdodAotCi14MiBjb252c3dsIHQxIHMxCi14MiBjb252bGYgdDEgdDEKLXNlbGVjdDBxbCBsZWZ0IHQxCi1zZWxlY3QxcWwgcmlnaHQgdDEKLW11bGYgbGVmdDEgcmlnaHQgbHJwYW4KLW11bGYgcmlnaHQgcmlnaHQgcnJwYW4KLWFkZGYgbGVmdCBsZWZ0MSBsZWZ0Ci1tZXJnZWxxIHQxIGxlZnQgcmlnaHQKLXgyIGNvbnZmbCB0MSB0MQoteDIgY29udnNzc2x3IGQxIHQxCi0KLQotLmZ1bmN0aW9uIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX2YzMl9jaDJfcHN5X3JpZ2h0Ci0uc291cmNlIDggczEgZ2Zsb2F0Ci0uZGVzdCA4IGQxIGdmbG9hdAotLmZsb2F0cGFyYW0gNCBsbHBhbgotLmZsb2F0cGFyYW0gNCBybHBhbgotLnRlbXAgNCBsZWZ0Ci0udGVtcCA0IHJpZ2h0Ci0udGVtcCA0IHJpZ2h0MQotCi1zZWxlY3QwcWwgbGVmdCBzMQotc2VsZWN0MXFsIHJpZ2h0IHMxCi1tdWxmIHJpZ2h0MSBsZWZ0IHJscGFuCi1tdWxmIGxlZnQgbGVmdCBsbHBhbgotYWRkZiByaWdodCByaWdodDEgcmlnaHQKLW1lcmdlbHEgZDEgbGVmdCByaWdodAotCi0KLS5mdW5jdGlvbiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gyX3BzeV9sZWZ0Ci0uc291cmNlIDggczEgZ2Zsb2F0Ci0uZGVzdCA4IGQxIGdmbG9hdAotLmZsb2F0cGFyYW0gNCBscnBhbgotLmZsb2F0cGFyYW0gNCBycnBhbgotLnRlbXAgNCBsZWZ0Ci0udGVtcCA0IGxlZnQxCi0udGVtcCA0IHJpZ2h0Ci0KLXNlbGVjdDBxbCBsZWZ0IHMxCi1zZWxlY3QxcWwgcmlnaHQgczEKLW11bGYgbGVmdDEgcmlnaHQgbHJwYW4KLW11bGYgcmlnaHQgcmlnaHQgcnJwYW4KLWFkZGYgbGVmdCBsZWZ0MSBsZWZ0Ci1tZXJnZWxxIGQxIGxlZnQgcmlnaHQKLQotIyBzaW1wbGUgcHJvY2Vzc2luZyBmdW5jdGlvbnMKLQotLmZ1bmN0aW9uIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDFfc2ltX3JpZ2h0Ci0uc291cmNlIDIgczEgZ2ludDE2Ci0uZGVzdCA0IGQxIGdpbnQxNgotLmZsb2F0cGFyYW0gNCBycGFuCi0udGVtcCA4IHQxCi0udGVtcCA0IGxlZnQKLS50ZW1wIDQgcmlnaHQKLQotY29udnN3bCBsZWZ0IHMxCi1jb252bGYgbGVmdCBsZWZ0Ci1tdWxmIHJpZ2h0IGxlZnQgcnBhbgotbWVyZ2VscSB0MSBsZWZ0IHJpZ2h0Ci14MiBjb252ZmwgdDEgdDEKLXgyIGNvbnZzc3NsdyBkMSB0MQotCi0KLS5mdW5jdGlvbiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gxX3NpbV9sZWZ0Ci0uc291cmNlIDIgczEgZ2ludDE2Ci0uZGVzdCA0IGQxIGdpbnQxNgotLmZsb2F0cGFyYW0gNCBscGFuCi0udGVtcCA4IHQxCi0udGVtcCA0IGxlZnQKLS50ZW1wIDQgcmlnaHQKLQotY29udnN3bCByaWdodCBzMQotY29udmxmIHJpZ2h0IHJpZ2h0Ci1tdWxmIGxlZnQgcmlnaHQgbHBhbgotbWVyZ2VscSB0MSBsZWZ0IHJpZ2h0Ci14MiBjb252ZmwgdDEgdDEKLXgyIGNvbnZzc3NsdyBkMSB0MQotCi0KLS5mdW5jdGlvbiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19zMTZfY2gyX3NpbV9yaWdodAotLnNvdXJjZSA0IHMxIGdpbnQxNgotLmRlc3QgNCBkMSBnaW50MTYKLS5mbG9hdHBhcmFtIDQgcnBhbgotLnRlbXAgOCB0MQotLnRlbXAgNCBsZWZ0Ci0udGVtcCA0IHJpZ2h0Ci0KLXgyIGNvbnZzd2wgdDEgczEKLXgyIGNvbnZsZiB0MSB0MQotc2VsZWN0MHFsIGxlZnQgdDEKLXNlbGVjdDFxbCByaWdodCB0MQotbXVsZiByaWdodCByaWdodCBycGFuCi1tZXJnZWxxIHQxIGxlZnQgcmlnaHQKLXgyIGNvbnZmbCB0MSB0MQoteDIgY29udnNzc2x3IGQxIHQxCi0KLQotLmZ1bmN0aW9uIGF1ZGlvcGFub3JhbWFtX29yY19wcm9jZXNzX3MxNl9jaDJfc2ltX2xlZnQKLS5zb3VyY2UgNCBzMSBnaW50MTYKLS5kZXN0IDQgZDEgZ2ludDE2Ci0uZmxvYXRwYXJhbSA0IGxwYW4KLS50ZW1wIDggdDEKLS50ZW1wIDQgbGVmdAotLnRlbXAgNCByaWdodAotCi14MiBjb252c3dsIHQxIHMxCi14MiBjb252bGYgdDEgdDEKLXNlbGVjdDBxbCBsZWZ0IHQxCi1zZWxlY3QxcWwgcmlnaHQgdDEKLW11bGYgbGVmdCBsZWZ0IGxwYW4KLW1lcmdlbHEgdDEgbGVmdCByaWdodAoteDIgY29udmZsIHQxIHQxCi14MiBjb252c3NzbHcgZDEgdDEKLQotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMV9zaW1fcmlnaHQKLS5zb3VyY2UgNCBzMSBnZmxvYXQKLS5kZXN0IDggZDEgZ2Zsb2F0Ci0uZmxvYXRwYXJhbSA0IHJwYW4KLS50ZW1wIDQgbGVmdAotLnRlbXAgNCByaWdodAotCi1jb3B5bCBsZWZ0IHMxCi1tdWxmIHJpZ2h0IHMxIHJwYW4KLW1lcmdlbHEgZDEgbGVmdCByaWdodAotCi0KLS5mdW5jdGlvbiBhdWRpb3Bhbm9yYW1hbV9vcmNfcHJvY2Vzc19mMzJfY2gxX3NpbV9sZWZ0Ci0uc291cmNlIDQgczEgZ2Zsb2F0Ci0uZGVzdCA4IGQxIGdmbG9hdAotLmZsb2F0cGFyYW0gNCBscGFuCi0udGVtcCA0IGxlZnQKLS50ZW1wIDQgcmlnaHQKLQotbXVsZiBsZWZ0IHMxIGxwYW4KLWNvcHlsIHJpZ2h0IHMxCi1tZXJnZWxxIGQxIGxlZnQgcmlnaHQKLQotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9zaW1fcmlnaHQKLS5zb3VyY2UgOCBzMSBnZmxvYXQKLS5kZXN0IDggZDEgZ2Zsb2F0Ci0uZmxvYXRwYXJhbSA0IHJwYW4KLS50ZW1wIDQgbGVmdAotLnRlbXAgNCByaWdodAotCi1zZWxlY3QwcWwgbGVmdCBzMQotc2VsZWN0MXFsIHJpZ2h0IHMxCi1tdWxmIHJpZ2h0IHJpZ2h0IHJwYW4KLW1lcmdlbHEgZDEgbGVmdCByaWdodAotCi0uZnVuY3Rpb24gYXVkaW9wYW5vcmFtYW1fb3JjX3Byb2Nlc3NfZjMyX2NoMl9zaW1fbGVmdAotLnNvdXJjZSA4IHMxIGdmbG9hdAotLmRlc3QgOCBkMSBnZmxvYXQKLS5mbG9hdHBhcmFtIDQgbHBhbgotLnRlbXAgNCBsZWZ0Ci0udGVtcCA0IHJpZ2h0Ci0KLXNlbGVjdDBxbCBsZWZ0IHMxCi1zZWxlY3QxcWwgcmlnaHQgczEKLW11bGYgbGVmdCBsZWZ0IGxwYW4KLW1lcmdlbHEgZDEgbGVmdCByaWdodAotCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jIGIvZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E2NmQ0MS4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLS8qIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KLSAqIAotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDA2IERyZWFtbGFiIFRlY2hub2xvZ2llcyBMdGQuIDxtYXRoaXMuaG9mZXJAZHJlYW1sYWIubmV0PgotICogICAgICAgICAgICAgICAyMDA3LTIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKiAKLSAqIAotICogdGhpcyB3aW5kb3dlZCBzaW5jIGZpbHRlciBpcyB0YWtlbiBmcm9tIHRoZSBmcmVlbHkgZG93bmxvYWRhYmxlIERTUCBib29rLAotICogIlRoZSBTY2llbnRpc3QgYW5kIEVuZ2luZWVyJ3MgR3VpZGUgdG8gRGlnaXRhbCBTaWduYWwgUHJvY2Vzc2luZyIsCi0gKiBjaGFwdGVyIDE2Ci0gKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5kc3BndWlkZS5jb20vCi0gKgotICogRm9yIHRoZSB3aW5kb3cgZnVuY3Rpb25zIHNlZQotICogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XaW5kb3dfZnVuY3Rpb24KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdWRpb3dzaW5jYmFuZAotICoKLSAqIEF0dGVudWF0ZXMgYWxsIGZyZXF1ZW5jaWVzIG91dHNpZGUgKGJhbmRwYXNzKSBvciBpbnNpZGUgKGJhbmRyZWplY3QpIG9mIGEgZnJlcXVlbmN5Ci0gKiBiYW5kLiBUaGUgbGVuZ3RoIHBhcmFtZXRlciBjb250cm9scyB0aGUgcm9sbG9mZiwgdGhlIHdpbmRvdyBwYXJhbWV0ZXIKLSAqIGNvbnRyb2xzIHJvbGxvZmYgYW5kIHN0b3BiYW5kIGF0dGVudWF0aW9uLiBUaGUgSGFtbWluZyB3aW5kb3cgcHJvdmlkZXMgYSBmYXN0ZXIgcm9sbG9mZiBidXQgYSBiaXQKLSAqIHdvcnNlIHN0b3BiYW5kIGF0dGVudWF0aW9uLCB0aGUgb3RoZXIgd2F5IGFyb3VuZCBmb3IgdGhlIEJsYWNrbWFuIHdpbmRvdy4KLSAqCi0gKiBUaGlzIGVsZW1lbnQgaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciB0aGUgQ2hlYnlzaGV2IGJhbmRwYXNzIGFuZCBiYW5kcmVqZWN0IGZpbHRlciB0aGF0IGl0IGhhcwotICogYSBtdWNoIGJldHRlciByb2xsb2ZmIHdoZW4gdXNpbmcgYSBsYXJnZXIga2VybmVsIHNpemUgYW5kIGFsbW9zdCBsaW5lYXIgcGhhc2UuIFRoZSBvbmx5Ci0gKiBkaXNhZHZhbnRhZ2UgaXMgdGhlIG11Y2ggc2xvd2VyIGV4ZWN1dGlvbiB0aW1lIHdpdGggbGFyZ2VyIGtlcm5lbHMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyBmcmVxPTE1MDAgISBhdWRpb2NvbnZlcnQgISBhdWRpb3dzaW5jYmFuZCBtb2RlPWJhbmQtcGFzcyBsb3dlci1mcmVxdWVuY3k9MzAwMCB1cHBlci1mcmVxdWVuY3k9MTAwMDAgbGVuZ3RoPTUwMSB3aW5kb3c9YmxhY2ttYW4gISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj0ibWVsbzEub2dnIiAhIG9nZ2RlbXV4ICEgdm9yYmlzZGVjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW93c2luY2JhbmQgbW9kZT1iYW5kLXJlamVjdCBsb3dlci1mcmVxdWVuY3k9NTkgdXBwZXItZnJlcXVlbmN5PTYxIGxlbmd0aD0xMDAwMSB3aW5kb3c9aGFtbWluZyAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgd2F2ZT13aGl0ZS1ub2lzZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvd3NpbmNiYW5kIG1vZGU9YmFuZC1wYXNzIGxvd2VyLWZyZXF1ZW5jeT0xMDAwIHVwcGVyLWZyZXF1ZW5jeT0yMDAwIGxlbmd0aD0zMSAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi0jaW5jbHVkZSAiYXVkaW93c2luY2JhbmQuaCIKLQotI2luY2x1ZGUgImdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmgiCi0KLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9nc3RfYXVkaW9fd3NpbmNiYW5kX2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MRU5HVEgsCi0gIFBST1BfTE9XRVJfRlJFUVVFTkNZLAotICBQUk9QX1VQUEVSX0ZSRVFVRU5DWSwKLSAgUFJPUF9NT0RFLAotICBQUk9QX1dJTkRPVwotfTsKLQotZW51bQotewotICBNT0RFX0JBTkRfUEFTUyA9IDAsCi0gIE1PREVfQkFORF9SRUpFQ1QKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fV1NJTkNfQkFORF9NT0RFIChnc3RfZ3N0X2F1ZGlvX3dzaW5jYmFuZF9tb2RlX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfZ3N0X2F1ZGlvX3dzaW5jYmFuZF9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZ3R5cGUgPSAwOwotCi0gIGlmIChndHlwZSA9PSAwKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAgICB7TU9ERV9CQU5EX1BBU1MsICJCYW5kIHBhc3MgKGRlZmF1bHQpIiwKLSAgICAgICAgICAiYmFuZC1wYXNzIn0sCi0gICAgICB7TU9ERV9CQU5EX1JFSkVDVCwgIkJhbmQgcmVqZWN0IiwKLSAgICAgICAgICAiYmFuZC1yZWplY3QifSwKLSAgICAgIHswLCBOVUxMLCBOVUxMfQotICAgIH07Ci0KLSAgICBndHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RBdWRpb1dTaW5jQmFuZE1vZGUiLCB2YWx1ZXMpOwotICB9Ci0gIHJldHVybiBndHlwZTsKLX0KLQotZW51bQotewotICBXSU5ET1dfSEFNTUlORyA9IDAsCi0gIFdJTkRPV19CTEFDS01BTiwKLSAgV0lORE9XX0dBVVNTSUFOLAotICBXSU5ET1dfQ09TSU5FLAotICBXSU5ET1dfSEFOTgotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9BVURJT19XU0lOQ19CQU5EX1dJTkRPVyAoZ3N0X2dzdF9hdWRpb193c2luY2JhbmRfd2luZG93X2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfZ3N0X2F1ZGlvX3dzaW5jYmFuZF93aW5kb3dfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBndHlwZSA9IDA7Ci0KLSAgaWYgKGd0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHtXSU5ET1dfSEFNTUlORywgIkhhbW1pbmcgd2luZG93IChkZWZhdWx0KSIsCi0gICAgICAgICAgImhhbW1pbmcifSwKLSAgICAgIHtXSU5ET1dfQkxBQ0tNQU4sICJCbGFja21hbiB3aW5kb3ciLAotICAgICAgICAgICJibGFja21hbiJ9LAotICAgICAge1dJTkRPV19HQVVTU0lBTiwgIkdhdXNzaWFuIHdpbmRvdyIsCi0gICAgICAgICAgImdhdXNzaWFuIn0sCi0gICAgICB7V0lORE9XX0NPU0lORSwgIkNvc2luZSB3aW5kb3ciLAotICAgICAgICAgICJjb3NpbmUifSwKLSAgICAgIHtXSU5ET1dfSEFOTiwgIkhhbm4gd2luZG93IiwKLSAgICAgICAgICAiaGFubiJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9Ci0gICAgfTsKLQotICAgIGd0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEF1ZGlvV1NpbmNCYW5kV2luZG93IiwgdmFsdWVzKTsKLSAgfQotICByZXR1cm4gZ3R5cGU7Ci19Ci0KLSNkZWZpbmUgZ3N0X2F1ZGlvX3dzaW5jYmFuZF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RBdWRpb1dTaW5jQmFuZCwgZ3N0X2F1ZGlvX3dzaW5jYmFuZCwKLSAgICBHU1RfVFlQRV9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfYXVkaW9fd3NpbmNiYW5kX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb193c2luY2JhbmRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1ZGlvX3dzaW5jYmFuZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXVkaW9fd3NpbmNiYW5kX3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci0KLSNkZWZpbmUgUE9XMih4KSAgKHgpKih4KQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3dzaW5jYmFuZF9jbGFzc19pbml0IChHc3RBdWRpb1dTaW5jQmFuZENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEF1ZGlvRmlsdGVyQ2xhc3MgKmZpbHRlcl9jbGFzcyA9IChHc3RBdWRpb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfZ3N0X2F1ZGlvX3dzaW5jYmFuZF9kZWJ1ZywgImF1ZGlvd3NpbmNiYW5kIiwgMCwKLSAgICAgICJCYW5kLXBhc3MgYW5kIEJhbmQtcmVqZWN0IFdpbmRvd2VkIHNpbmMgZmlsdGVyIHBsdWdpbiIpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hdWRpb193c2luY2JhbmRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fd3NpbmNiYW5kX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYXVkaW9fd3NpbmNiYW5kX2ZpbmFsaXplOwotCi0gIC8qIEZJWE1FOiBEb24ndCB1c2UgdGhlIGNvbXBsZXRlIHBvc3NpYmxlIHJhbmdlIGJ1dCByZXN0cmljdCB0aGUgdXBwZXIgYm91bmRhcnkKLSAgICogc28gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgVUlzIGNhbiB1c2UgYSBzbGlkZXIgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT1dFUl9GUkVRVUVOQ1ksCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJsb3dlci1mcmVxdWVuY3kiLCAiTG93ZXIgRnJlcXVlbmN5IiwKLSAgICAgICAgICAiQ3V0LW9mZiBsb3dlciBmcmVxdWVuY3kgKEh6KSIsIDAuMCwgMTAwMDAwLjAsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VQUEVSX0ZSRVFVRU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoInVwcGVyLWZyZXF1ZW5jeSIsICJVcHBlciBGcmVxdWVuY3kiLAotICAgICAgICAgICJDdXQtb2ZmIHVwcGVyIGZyZXF1ZW5jeSAoSHopIiwgMC4wLCAxMDAwMDAuMCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEVOR1RILAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImxlbmd0aCIsICJMZW5ndGgiLAotICAgICAgICAgICJGaWx0ZXIga2VybmVsIGxlbmd0aCwgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBuZXh0IG9kZCBudW1iZXIiLCAzLAotICAgICAgICAgIDI1NjAwMCwgMTAxLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm1vZGUiLCAiTW9kZSIsCi0gICAgICAgICAgIkJhbmQgcGFzcyBvciBiYW5kIHJlamVjdCBtb2RlIiwgR1NUX1RZUEVfQVVESU9fV1NJTkNfQkFORF9NT0RFLAotICAgICAgICAgIE1PREVfQkFORF9QQVNTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1dJTkRPVywKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgid2luZG93IiwgIldpbmRvdyIsCi0gICAgICAgICAgIldpbmRvdyBmdW5jdGlvbiB0byB1c2UiLCBHU1RfVFlQRV9BVURJT19XU0lOQ19CQU5EX1dJTkRPVywKLSAgICAgICAgICBXSU5ET1dfSEFNTUlORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJCYW5kIHBhc3MgJiBiYW5kIHJlamVjdCBmaWx0ZXIiLCAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiQmFuZCBwYXNzIGFuZCBiYW5kIHJlamVjdCB3aW5kb3dlZCBzaW5jIGZpbHRlciIsCi0gICAgICAiVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPiwgIgotICAgICAgIlN0ZXZlbiBXLiBTbWl0aCwgIgotICAgICAgIkRyZWFtbGFiIFRlY2hub2xvZ2llcyBMdGQuIDxtYXRoaXMuaG9mZXJAZHJlYW1sYWIubmV0PiwgIgotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGZpbHRlcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX3dzaW5jYmFuZF9zZXR1cCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNiYW5kX2luaXQgKEdzdEF1ZGlvV1NpbmNCYW5kICogc2VsZikKLXsKLSAgc2VsZi0+a2VybmVsX2xlbmd0aCA9IDEwMTsKLSAgc2VsZi0+bG93ZXJfZnJlcXVlbmN5ID0gMC4wOwotICBzZWxmLT51cHBlcl9mcmVxdWVuY3kgPSAwLjA7Ci0gIHNlbGYtPm1vZGUgPSBNT0RFX0JBTkRfUEFTUzsKLSAgc2VsZi0+d2luZG93ID0gV0lORE9XX0hBTU1JTkc7Ci0KLSAgZ19tdXRleF9pbml0ICgmc2VsZi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNiYW5kX2J1aWxkX2tlcm5lbCAoR3N0QXVkaW9XU2luY0JhbmQgKiBzZWxmLAotICAgIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIGdpbnQgaSA9IDA7Ci0gIGdkb3VibGUgc3VtID0gMC4wOwotICBnaW50IGxlbiA9IDA7Ci0gIGdkb3VibGUgKmtlcm5lbF9scCwgKmtlcm5lbF9ocDsKLSAgZ2RvdWJsZSB3OwotICBnZG91YmxlICprZXJuZWw7Ci0gIGdpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0KLSAgbGVuID0gc2VsZi0+a2VybmVsX2xlbmd0aDsKLQotICBpZiAoaW5mbykgewotICAgIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKTsKLSAgICBjaGFubmVscyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTIChpbmZvKTsKLSAgfSBlbHNlIHsKLSAgICByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChzZWxmKTsKLSAgICBjaGFubmVscyA9IEdTVF9BVURJT19GSUxURVJfQ0hBTk5FTFMgKHNlbGYpOwotICB9Ci0KLSAgaWYgKHJhdGUgPT0gMCkgewotICAgIEdTVF9ERUJVRyAoInJhdGUgbm90IHNldCB5ZXQiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoY2hhbm5lbHMgPT0gMCkgewotICAgIEdTVF9ERUJVRyAoImNoYW5uZWxzIG5vdCBzZXQgeWV0Iik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogQ2xhbXAgZnJlcXVlbmNpZXMgKi8KLSAgc2VsZi0+bG93ZXJfZnJlcXVlbmN5ID0gQ0xBTVAgKHNlbGYtPmxvd2VyX2ZyZXF1ZW5jeSwgMC4wLCByYXRlIC8gMik7Ci0gIHNlbGYtPnVwcGVyX2ZyZXF1ZW5jeSA9IENMQU1QIChzZWxmLT51cHBlcl9mcmVxdWVuY3ksIDAuMCwgcmF0ZSAvIDIpOwotCi0gIGlmIChzZWxmLT5sb3dlcl9mcmVxdWVuY3kgPiBzZWxmLT51cHBlcl9mcmVxdWVuY3kpIHsKLSAgICBnaW50IHRtcCA9IHNlbGYtPmxvd2VyX2ZyZXF1ZW5jeTsKLQotICAgIHNlbGYtPmxvd2VyX2ZyZXF1ZW5jeSA9IHNlbGYtPnVwcGVyX2ZyZXF1ZW5jeTsKLSAgICBzZWxmLT51cHBlcl9mcmVxdWVuY3kgPSB0bXA7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJnc3RfYXVkaW9fd3NpbmNiYW5kOiBpbml0aWFsaXppbmcgZmlsdGVyIGtlcm5lbCBvZiBsZW5ndGggJWQgIgotICAgICAgIndpdGggbG93ZXIgZnJlcXVlbmN5ICUuMmxmIEh6ICIKLSAgICAgICIsIHVwcGVyIGZyZXF1ZW5jeSAlLjJsZiBIeiBmb3IgbW9kZSAlcyIsCi0gICAgICBsZW4sIHNlbGYtPmxvd2VyX2ZyZXF1ZW5jeSwgc2VsZi0+dXBwZXJfZnJlcXVlbmN5LAotICAgICAgKHNlbGYtPm1vZGUgPT0gTU9ERV9CQU5EX1BBU1MpID8gImJhbmQtcGFzcyIgOiAiYmFuZC1yZWplY3QiKTsKLQotICAvKiBmaWxsIHRoZSBscCBrZXJuZWwgKi8KLSAgdyA9IDIgKiBHX1BJICogKHNlbGYtPmxvd2VyX2ZyZXF1ZW5jeSAvIHJhdGUpOwotICBrZXJuZWxfbHAgPSBnX25ldyAoZ2RvdWJsZSwgbGVuKTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgaWYgKGkgPT0gKGxlbiAtIDEpIC8gMi4wKQotICAgICAga2VybmVsX2xwW2ldID0gdzsKLSAgICBlbHNlCi0gICAgICBrZXJuZWxfbHBbaV0gPSBzaW4gKHcgKiAoaSAtIChsZW4gLSAxKSAvIDIuMCkpIC8gKGkgLSAobGVuIC0gMSkgLyAyLjApOwotCi0gICAgLyogd2luZG93aW5nICovCi0gICAgc3dpdGNoIChzZWxmLT53aW5kb3cpIHsKLSAgICAgIGNhc2UgV0lORE9XX0hBTU1JTkc6Ci0gICAgICAgIGtlcm5lbF9scFtpXSAqPSAoMC41NCAtIDAuNDYgKiBjb3MgKDIgKiBHX1BJICogaSAvIChsZW4gLSAxKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0lORE9XX0JMQUNLTUFOOgotICAgICAgICBrZXJuZWxfbHBbaV0gKj0gKDAuNDIgLSAwLjUgKiBjb3MgKDIgKiBHX1BJICogaSAvIChsZW4gLSAxKSkgKwotICAgICAgICAgICAgMC4wOCAqIGNvcyAoNCAqIEdfUEkgKiBpIC8gKGxlbiAtIDEpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXSU5ET1dfR0FVU1NJQU46Ci0gICAgICAgIGtlcm5lbF9scFtpXSAqPSBleHAgKC0wLjUgKiBQT1cyICgzLjAgLyBsZW4gKiAoMiAqIGkgLSAobGVuIC0gMSkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXSU5ET1dfQ09TSU5FOgotICAgICAgICBrZXJuZWxfbHBbaV0gKj0gY29zIChHX1BJICogaSAvIChsZW4gLSAxKSAtIEdfUEkgLyAyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdJTkRPV19IQU5OOgotICAgICAgICBrZXJuZWxfbHBbaV0gKj0gMC41ICogKDEgLSBjb3MgKDIgKiBHX1BJICogaSAvIChsZW4gLSAxKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiBub3JtYWxpemUgZm9yIHVuaXR5IGdhaW4gYXQgREMgKi8KLSAgc3VtID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgc3VtICs9IGtlcm5lbF9scFtpXTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotICAgIGtlcm5lbF9scFtpXSAvPSBzdW07Ci0KLSAgLyogZmlsbCB0aGUgaHAga2VybmVsICovCi0gIHcgPSAyICogR19QSSAqIChzZWxmLT51cHBlcl9mcmVxdWVuY3kgLyByYXRlKTsKLSAga2VybmVsX2hwID0gZ19uZXcgKGdkb3VibGUsIGxlbik7Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgIGlmIChpID09IChsZW4gLSAxKSAvIDIuMCkKLSAgICAgIGtlcm5lbF9ocFtpXSA9IHc7Ci0gICAgZWxzZQotICAgICAga2VybmVsX2hwW2ldID0gc2luICh3ICogKGkgLSAobGVuIC0gMSkgLyAyLjApKSAvIChpIC0gKGxlbiAtIDEpIC8gMi4wKTsKLQotICAgIC8qIFdpbmRvd2luZyAqLwotICAgIHN3aXRjaCAoc2VsZi0+d2luZG93KSB7Ci0gICAgICBjYXNlIFdJTkRPV19IQU1NSU5HOgotICAgICAgICBrZXJuZWxfaHBbaV0gKj0gKDAuNTQgLSAwLjQ2ICogY29zICgyICogR19QSSAqIGkgLyAobGVuIC0gMSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdJTkRPV19CTEFDS01BTjoKLSAgICAgICAga2VybmVsX2hwW2ldICo9ICgwLjQyIC0gMC41ICogY29zICgyICogR19QSSAqIGkgLyAobGVuIC0gMSkpICsKLSAgICAgICAgICAgIDAuMDggKiBjb3MgKDQgKiBHX1BJICogaSAvIChsZW4gLSAxKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0lORE9XX0dBVVNTSUFOOgotICAgICAgICBrZXJuZWxfaHBbaV0gKj0gZXhwICgtMC41ICogUE9XMiAoMy4wIC8gbGVuICogKDIgKiBpIC0gKGxlbiAtIDEpKSkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0lORE9XX0NPU0lORToKLSAgICAgICAga2VybmVsX2hwW2ldICo9IGNvcyAoR19QSSAqIGkgLyAobGVuIC0gMSkgLSBHX1BJIC8gMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXSU5ET1dfSEFOTjoKLSAgICAgICAga2VybmVsX2hwW2ldICo9IDAuNSAqICgxIC0gY29zICgyICogR19QSSAqIGkgLyAobGVuIC0gMSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogbm9ybWFsaXplIGZvciB1bml0eSBnYWluIGF0IERDICovCi0gIHN1bSA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotICAgIHN1bSArPSBrZXJuZWxfaHBbaV07Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKLSAgICBrZXJuZWxfaHBbaV0gLz0gc3VtOwotCi0gIC8qIGRvIHNwZWN0cmFsIGludmVyc2lvbiB0byBnbyBmcm9tIGxvd3Bhc3MgdG8gaGlnaHBhc3MgKi8KLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotICAgIGtlcm5lbF9ocFtpXSA9IC1rZXJuZWxfaHBbaV07Ci0gIGlmIChsZW4gJSAyID09IDEpIHsKLSAgICBrZXJuZWxfaHBbKGxlbiAtIDEpIC8gMl0gKz0gMS4wOwotICB9IGVsc2UgewotICAgIGtlcm5lbF9ocFtsZW4gLyAyIC0gMV0gKz0gMC41OwotICAgIGtlcm5lbF9ocFtsZW4gLyAyXSArPSAwLjU7Ci0gIH0KLQotICAvKiBjb21iaW5lIHRoZSB0d28ga2VybmVscyAqLwotICBrZXJuZWwgPSBnX25ldyAoZ2RvdWJsZSwgbGVuKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAga2VybmVsW2ldID0ga2VybmVsX2xwW2ldICsga2VybmVsX2hwW2ldOwotCi0gIC8qIGZyZWUgdGhlIGhlbHBlciBrZXJuZWxzICovCi0gIGdfZnJlZSAoa2VybmVsX2xwKTsKLSAgZ19mcmVlIChrZXJuZWxfaHApOwotCi0gIC8qIGRvIHNwZWN0cmFsIGludmVyc2lvbiB0byBnbyBmcm9tIGJhbmRyZWplY3QgdG8gYmFuZHBhc3MKLSAgICogaWYgc3BlY2lmaWVkICovCi0gIGlmIChzZWxmLT5tb2RlID09IE1PREVfQkFORF9QQVNTKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAga2VybmVsW2ldID0gLWtlcm5lbFtpXTsKLSAgICBrZXJuZWxbbGVuIC8gMl0gKz0gMTsKLSAgfQotCi0gIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0X2tlcm5lbCAoR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAoc2VsZiksCi0gICAgICBrZXJuZWwsIHNlbGYtPmtlcm5lbF9sZW5ndGgsIChsZW4gLSAxKSAvIDIsIGluZm8pOwotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi0vKiBnZXQgbm90aWZpZWQgb2YgY2FwcyBhbmQgcGx1ZyBpbiB0aGUgY29ycmVjdCBwcm9jZXNzIGZ1bmN0aW9uICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb193c2luY2JhbmRfc2V0dXAgKEdzdEF1ZGlvRmlsdGVyICogYmFzZSwgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0QXVkaW9XU2luY0JhbmQgKnNlbGYgPSBHU1RfQVVESU9fV1NJTkNfQkFORCAoYmFzZSk7Ci0KLSAgZ3N0X2F1ZGlvX3dzaW5jYmFuZF9idWlsZF9rZXJuZWwgKHNlbGYsIGluZm8pOwotCi0gIHJldHVybiBHU1RfQVVESU9fRklMVEVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zZXR1cCAoYmFzZSwgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNiYW5kX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBdWRpb1dTaW5jQmFuZCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19CQU5EIChvYmplY3QpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZzZWxmLT5sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNiYW5kX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdWRpb1dTaW5jQmFuZCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19CQU5EIChvYmplY3QpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19BVURJT19XU0lOQ19CQU5EIChzZWxmKSk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xFTkdUSDp7Ci0gICAgICBnaW50IHZhbDsKLQotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICB2YWwgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmICh2YWwgJSAyID09IDApCi0gICAgICAgIHZhbCsrOwotCi0gICAgICBpZiAodmFsICE9IHNlbGYtPmtlcm5lbF9sZW5ndGgpIHsKLSAgICAgICAgZ3N0X2F1ZGlvX2Z4X2Jhc2VfZmlyX2ZpbHRlcl9wdXNoX3Jlc2lkdWUgKEdTVF9BVURJT19GWF9CQVNFX0ZJUl9GSUxURVIKLSAgICAgICAgICAgIChzZWxmKSk7Ci0gICAgICAgIHNlbGYtPmtlcm5lbF9sZW5ndGggPSB2YWw7Ci0gICAgICAgIGdzdF9hdWRpb193c2luY2JhbmRfYnVpbGRfa2VybmVsIChzZWxmLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0xPV0VSX0ZSRVFVRU5DWToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgc2VsZi0+bG93ZXJfZnJlcXVlbmN5ID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGdzdF9hdWRpb193c2luY2JhbmRfYnVpbGRfa2VybmVsIChzZWxmLCBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVBQRVJfRlJFUVVFTkNZOgotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBzZWxmLT51cHBlcl9mcmVxdWVuY3kgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgICAgZ3N0X2F1ZGlvX3dzaW5jYmFuZF9idWlsZF9rZXJuZWwgKHNlbGYsIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBzZWxmLT5tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgZ3N0X2F1ZGlvX3dzaW5jYmFuZF9idWlsZF9rZXJuZWwgKHNlbGYsIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9XSU5ET1c6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPndpbmRvdyA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGdzdF9hdWRpb193c2luY2JhbmRfYnVpbGRfa2VybmVsIChzZWxmLCBOVUxMKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNiYW5kX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdWRpb1dTaW5jQmFuZCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19CQU5EIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MRU5HVEg6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzZWxmLT5rZXJuZWxfbGVuZ3RoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT1dFUl9GUkVRVUVOQ1k6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIHNlbGYtPmxvd2VyX2ZyZXF1ZW5jeSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVBQRVJfRlJFUVVFTkNZOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBzZWxmLT51cHBlcl9mcmVxdWVuY3kpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc2VsZi0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfV0lORE9XOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNlbGYtPndpbmRvdyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5oIGIvZ3N0L2F1ZGlvZngvYXVkaW93c2luY2JhbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdjMmJkNC4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb3dzaW5jYmFuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyogLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotICoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwNiBEcmVhbWxhYiBUZWNobm9sb2dpZXMgTHRkLiA8bWF0aGlzLmhvZmVyQGRyZWFtbGFiLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNy0yMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqCi0gKiB0aGlzIHdpbmRvd2VkIHNpbmMgZmlsdGVyIGlzIHRha2VuIGZyb20gdGhlIGZyZWVseSBkb3dubG9hZGFibGUgRFNQIGJvb2ssCi0gKiAiVGhlIFNjaWVudGlzdCBhbmQgRW5naW5lZXIncyBHdWlkZSB0byBEaWdpdGFsIFNpZ25hbCBQcm9jZXNzaW5nIiwKLSAqIGNoYXB0ZXIgMTYKLSAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmRzcGd1aWRlLmNvbS8KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BVURJT19XU0lOQ19CQU5EX0hfXwotI2RlZmluZSBfX0dTVF9BVURJT19XU0lOQ19CQU5EX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2ZpbHRlci5oPgotCi0jaW5jbHVkZSAiYXVkaW9meGJhc2VmaXJmaWx0ZXIuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX1dTSU5DX0JBTkQgXAotICAoZ3N0X2F1ZGlvX3dzaW5jYmFuZF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVESU9fV1NJTkNfQkFORChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FVRElPX1dTSU5DX0JBTkQsR3N0QXVkaW9XU2luY0JhbmQpKQotI2RlZmluZSBHU1RfQVVESU9fV1NJTkNfQkFORF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9BVURJT19XU0lOQ19CQU5ELEdzdEF1ZGlvV1NpbmNCYW5kQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fV1NJTkNfQkFORChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FVRElPX1dTSU5DX0JBTkQpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fV1NJTkNfQkFORF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9BVURJT19XU0lOQ19CQU5EKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvV1NpbmNCYW5kIEdzdEF1ZGlvV1NpbmNCYW5kOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1ZGlvV1NpbmNCYW5kQ2xhc3MgR3N0QXVkaW9XU2luY0JhbmRDbGFzczsKLQotLyoqCi0gKiBHc3RBdWRpb1dTaW5jQmFuZDoKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0QXVkaW9XU2luY0JhbmQgewotICBHc3RBdWRpb0ZYQmFzZUZJUkZpbHRlciBwYXJlbnQ7Ci0KLSAgZ2ludCBtb2RlOwotICBnaW50IHdpbmRvdzsKLSAgZ2Zsb2F0IGxvd2VyX2ZyZXF1ZW5jeSwgdXBwZXJfZnJlcXVlbmN5OwotICBnaW50IGtlcm5lbF9sZW5ndGg7ICAgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIGZpbHRlciBrZXJuZWwgKi8KLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHTXV0ZXggbG9jazsKLX07Ci0KLXN0cnVjdCBfR3N0QXVkaW9XU2luY0JhbmRDbGFzcyB7Ci0gIEdzdEF1ZGlvRmlsdGVyQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X2F1ZGlvX3dzaW5jYmFuZF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BVURJT19XU0lOQ19CQU5EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvYXVkaW93c2luY2xpbWl0LmMgYi9nc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhlYjAwNy4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDQwOCArMCwwIEBACi0vKiAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0gKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwNiBEcmVhbWxhYiBUZWNobm9sb2dpZXMgTHRkLiA8bWF0aGlzLmhvZmVyQGRyZWFtbGFiLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNy0yMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICogCi0gKiAKLSAqIHRoaXMgd2luZG93ZWQgc2luYyBmaWx0ZXIgaXMgdGFrZW4gZnJvbSB0aGUgZnJlZWx5IGRvd25sb2FkYWJsZSBEU1AgYm9vaywKLSAqICJUaGUgU2NpZW50aXN0IGFuZCBFbmdpbmVlcidzIEd1aWRlIHRvIERpZ2l0YWwgU2lnbmFsIFByb2Nlc3NpbmciLAotICogY2hhcHRlciAxNgotICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZHNwZ3VpZGUuY29tLwotICoKLSAqIEZvciB0aGUgd2luZG93IGZ1bmN0aW9ucyBzZWUKLSAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2luZG93X2Z1bmN0aW9uCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXVkaW93c2luY2xpbWl0Ci0gKgotICogQXR0ZW51YXRlcyBhbGwgZnJlcXVlbmNpZXMgYWJvdmUgdGhlIGN1dG9mZiBmcmVxdWVuY3kgKGxvdy1wYXNzKSBvciBhbGwgZnJlcXVlbmNpZXMgYmVsb3cgdGhlCi0gKiBjdXRvZmYgZnJlcXVlbmN5IChoaWdoLXBhc3MpLiBUaGUgbGVuZ3RoIHBhcmFtZXRlciBjb250cm9scyB0aGUgcm9sbG9mZiwgdGhlIHdpbmRvdyBwYXJhbWV0ZXIKLSAqIGNvbnRyb2xzIHJvbGxvZmYgYW5kIHN0b3BiYW5kIGF0dGVudWF0aW9uLiBUaGUgSGFtbWluZyB3aW5kb3cgcHJvdmlkZXMgYSBmYXN0ZXIgcm9sbG9mZiBidXQgYSBiaXQKLSAqIHdvcnNlIHN0b3BiYW5kIGF0dGVudWF0aW9uLCB0aGUgb3RoZXIgd2F5IGFyb3VuZCBmb3IgdGhlIEJsYWNrbWFuIHdpbmRvdy4KLSAqCi0gKiBUaGlzIGVsZW1lbnQgaGFzIHRoZSBhZHZhbnRhZ2Ugb3ZlciB0aGUgQ2hlYnlzaGV2IGxvd3Bhc3MgYW5kIGhpZ2hwYXNzIGZpbHRlciB0aGF0IGl0IGhhcwotICogYSBtdWNoIGJldHRlciByb2xsb2ZmIHdoZW4gdXNpbmcgYSBsYXJnZXIga2VybmVsIHNpemUgYW5kIGFsbW9zdCBsaW5lYXIgcGhhc2UuIFRoZSBvbmx5Ci0gKiBkaXNhZHZhbnRhZ2UgaXMgdGhlIG11Y2ggc2xvd2VyIGV4ZWN1dGlvbiB0aW1lIHdpdGggbGFyZ2VyIGtlcm5lbHMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyBmcmVxPTE1MDAgISBhdWRpb2NvbnZlcnQgISBhdWRpb3dzaW5jbGltaXQgbW9kZT1sb3ctcGFzcyBjdXRvZmY9MTAwMCBsZW5ndGg9NTAxICEgYXVkaW9jb252ZXJ0ICEgYWxzYXNpbmsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249Im1lbG8xLm9nZyIgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvd3NpbmNsaW1pdCBtb2RlPWhpZ2gtcGFzcyBjdXRvZmY9MTUwMDAgbGVuZ3RoPTUwMSAhIGF1ZGlvY29udmVydCAhIGFsc2FzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgd2F2ZT13aGl0ZS1ub2lzZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvd3NpbmNsaW1pdCBtb2RlPWxvdy1wYXNzIGN1dG9mZj0xMDAwIGxlbmd0aD0xMDAwMSB3aW5kb3c9YmxhY2ttYW4gISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9maWx0ZXIuaD4KLQotI2luY2x1ZGUgImF1ZGlvd3NpbmNsaW1pdC5oIgotCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZGVidWcKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKEdTVF9DQVRfREVGQVVMVCk7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0xFTkdUSCwKLSAgUFJPUF9GUkVRVUVOQ1ksCi0gIFBST1BfTU9ERSwKLSAgUFJPUF9XSU5ET1cKLX07Ci0KLWVudW0KLXsKLSAgTU9ERV9MT1dfUEFTUyA9IDAsCi0gIE1PREVfSElHSF9QQVNTCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVRElPX1dTSU5DX0xJTUlUX01PREUgKGdzdF9hdWRpb193c2luY2xpbWl0X21vZGVfZ2V0X3R5cGUgKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9hdWRpb193c2luY2xpbWl0X21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBndHlwZSA9IDA7Ci0KLSAgaWYgKGd0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHtNT0RFX0xPV19QQVNTLCAiTG93IHBhc3MgKGRlZmF1bHQpIiwKLSAgICAgICAgICAibG93LXBhc3MifSwKLSAgICAgIHtNT0RFX0hJR0hfUEFTUywgIkhpZ2ggcGFzcyIsCi0gICAgICAgICAgImhpZ2gtcGFzcyJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9Ci0gICAgfTsKLQotICAgIGd0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEF1ZGlvV1NpbmNMaW1pdE1vZGUiLCB2YWx1ZXMpOwotICB9Ci0gIHJldHVybiBndHlwZTsKLX0KLQotZW51bQotewotICBXSU5ET1dfSEFNTUlORyA9IDAsCi0gIFdJTkRPV19CTEFDS01BTiwKLSAgV0lORE9XX0dBVVNTSUFOLAotICBXSU5ET1dfQ09TSU5FLAotICBXSU5ET1dfSEFOTgotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9BVURJT19XU0lOQ19MSU1JVF9XSU5ET1cgKGdzdF9hdWRpb193c2luY2xpbWl0X3dpbmRvd19nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2F1ZGlvX3dzaW5jbGltaXRfd2luZG93X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZ3R5cGUgPSAwOwotCi0gIGlmIChndHlwZSA9PSAwKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmFsdWVzW10gPSB7Ci0gICAgICB7V0lORE9XX0hBTU1JTkcsICJIYW1taW5nIHdpbmRvdyAoZGVmYXVsdCkiLAotICAgICAgICAgICJoYW1taW5nIn0sCi0gICAgICB7V0lORE9XX0JMQUNLTUFOLCAiQmxhY2ttYW4gd2luZG93IiwKLSAgICAgICAgICAiYmxhY2ttYW4ifSwKLSAgICAgIHtXSU5ET1dfR0FVU1NJQU4sICJHYXVzc2lhbiB3aW5kb3ciLAotICAgICAgICAgICJnYXVzc2lhbiJ9LAotICAgICAge1dJTkRPV19DT1NJTkUsICJDb3NpbmUgd2luZG93IiwKLSAgICAgICAgICAiY29zaW5lIn0sCi0gICAgICB7V0lORE9XX0hBTk4sICJIYW5uIHdpbmRvdyIsCi0gICAgICAgICAgImhhbm4ifSwKLSAgICAgIHswLCBOVUxMLCBOVUxMfQotICAgIH07Ci0KLSAgICBndHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RBdWRpb1dTaW5jTGltaXRXaW5kb3ciLCB2YWx1ZXMpOwotICB9Ci0gIHJldHVybiBndHlwZTsKLX0KLQotI2RlZmluZSBnc3RfYXVkaW9fd3NpbmNsaW1pdF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RBdWRpb1dTaW5jTGltaXQsIGdzdF9hdWRpb193c2luY2xpbWl0LAotICAgIEdTVF9UWVBFX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdWRpb193c2luY2xpbWl0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb193c2luY2xpbWl0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdWRpb193c2luY2xpbWl0X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hdWRpb193c2luY2xpbWl0X3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci0KLQotI2RlZmluZSBQT1cyKHgpICAoeCkqKHgpCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNsaW1pdF9jbGFzc19pbml0IChHc3RBdWRpb1dTaW5jTGltaXRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RBdWRpb0ZpbHRlckNsYXNzICpmaWx0ZXJfY2xhc3MgPSAoR3N0QXVkaW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZGVidWcsICJhdWRpb3dzaW5jbGltaXQiLCAwLAotICAgICAgIkxvdy1wYXNzIGFuZCBIaWdoLXBhc3MgV2luZG93ZWQgc2luYyBmaWx0ZXIgcGx1Z2luIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2F1ZGlvX3dzaW5jbGltaXRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXVkaW9fd3NpbmNsaW1pdF9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZmluYWxpemU7Ci0KLSAgLyogRklYTUU6IERvbid0IHVzZSB0aGUgY29tcGxldGUgcG9zc2libGUgcmFuZ2UgYnV0IHJlc3RyaWN0IHRoZSB1cHBlciBib3VuZGFyeQotICAgKiBzbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBVSXMgY2FuIHVzZSBhIHNsaWRlciAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZSRVFVRU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImN1dG9mZiIsICJDdXRvZmYiLAotICAgICAgICAgICJDdXQtb2ZmIEZyZXF1ZW5jeSAoSHopIiwgMC4wLCAxMDAwMDAuMCwgMC4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MRU5HVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibGVuZ3RoIiwgIkxlbmd0aCIsCi0gICAgICAgICAgIkZpbHRlciBrZXJuZWwgbGVuZ3RoLCB3aWxsIGJlIHJvdW5kZWQgdG8gdGhlIG5leHQgb2RkIG51bWJlciIsCi0gICAgICAgICAgMywgMjU2MDAwLCAxMDEsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJNb2RlIiwKLSAgICAgICAgICAiTG93IHBhc3Mgb3IgaGlnaCBwYXNzIG1vZGUiLCBHU1RfVFlQRV9BVURJT19XU0lOQ19MSU1JVF9NT0RFLAotICAgICAgICAgIE1PREVfTE9XX1BBU1MsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfV0lORE9XLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJ3aW5kb3ciLCAiV2luZG93IiwKLSAgICAgICAgICAiV2luZG93IGZ1bmN0aW9uIHRvIHVzZSIsIEdTVF9UWVBFX0FVRElPX1dTSU5DX0xJTUlUX1dJTkRPVywKLSAgICAgICAgICBXSU5ET1dfSEFNTUlORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJMb3cgcGFzcyAmIGhpZ2ggcGFzcyBmaWx0ZXIiLCAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiTG93IHBhc3MgYW5kIGhpZ2ggcGFzcyB3aW5kb3dlZCBzaW5jIGZpbHRlciIsCi0gICAgICAiVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPiwgIgotICAgICAgIlN0ZXZlbiBXLiBTbWl0aCwgIgotICAgICAgIkRyZWFtbGFiIFRlY2hub2xvZ2llcyBMdGQuIDxtYXRoaXMuaG9mZXJAZHJlYW1sYWIubmV0PiwgIgotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGZpbHRlcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfc2V0dXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3dzaW5jbGltaXRfaW5pdCAoR3N0QXVkaW9XU2luY0xpbWl0ICogc2VsZikKLXsKLSAgc2VsZi0+bW9kZSA9IE1PREVfTE9XX1BBU1M7Ci0gIHNlbGYtPndpbmRvdyA9IFdJTkRPV19IQU1NSU5HOwotICBzZWxmLT5rZXJuZWxfbGVuZ3RoID0gMTAxOwotICBzZWxmLT5jdXRvZmYgPSAwLjA7Ci0KLSAgZ19tdXRleF9pbml0ICgmc2VsZi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXVkaW9fd3NpbmNsaW1pdF9idWlsZF9rZXJuZWwgKEdzdEF1ZGlvV1NpbmNMaW1pdCAqIHNlbGYsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgZ2ludCBpID0gMDsKLSAgZ2RvdWJsZSBzdW0gPSAwLjA7Ci0gIGdpbnQgbGVuID0gMDsKLSAgZ2RvdWJsZSB3OwotICBnZG91YmxlICprZXJuZWwgPSBOVUxMOwotICBnaW50IHJhdGUsIGNoYW5uZWxzOwotCi0gIGxlbiA9IHNlbGYtPmtlcm5lbF9sZW5ndGg7Ci0KLSAgaWYgKGluZm8pIHsKLSAgICByYXRlID0gR1NUX0FVRElPX0lORk9fUkFURSAoaW5mbyk7Ci0gICAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoaW5mbyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmF0ZSA9IEdTVF9BVURJT19GSUxURVJfUkFURSAoc2VsZik7Ci0gICAgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChzZWxmKTsKLSAgfQotCi0gIGlmIChyYXRlID09IDApIHsKLSAgICBHU1RfREVCVUcgKCJyYXRlIG5vdCBzZXQgeWV0Iik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGNoYW5uZWxzID09IDApIHsKLSAgICBHU1RfREVCVUcgKCJjaGFubmVscyBub3Qgc2V0IHlldCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIENsYW1wIGN1dG9mZiBmcmVxdWVuY3kgYmV0d2VlbiAwIGFuZCB0aGUgbnlxdWlzdCBmcmVxdWVuY3kgKi8KLSAgc2VsZi0+Y3V0b2ZmID0gQ0xBTVAgKHNlbGYtPmN1dG9mZiwgMC4wLCByYXRlIC8gMik7Ci0KLSAgR1NUX0RFQlVHICgiZ3N0X2F1ZGlvX3dzaW5jbGltaXRfOiBpbml0aWFsaXppbmcgZmlsdGVyIGtlcm5lbCBvZiBsZW5ndGggJWQgIgotICAgICAgIndpdGggY3V0b2ZmICUuMmxmIEh6ICIKLSAgICAgICJmb3IgbW9kZSAlcyIsCi0gICAgICBsZW4sIHNlbGYtPmN1dG9mZiwKLSAgICAgIChzZWxmLT5tb2RlID09IE1PREVfTE9XX1BBU1MpID8gImxvdy1wYXNzIiA6ICJoaWdoLXBhc3MiKTsKLQotICAvKiBmaWxsIHRoZSBrZXJuZWwgKi8KLSAgdyA9IDIgKiBHX1BJICogKHNlbGYtPmN1dG9mZiAvIHJhdGUpOwotCi0gIGtlcm5lbCA9IGdfbmV3IChnZG91YmxlLCBsZW4pOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgIGlmIChpID09IChsZW4gLSAxKSAvIDIuMCkKLSAgICAgIGtlcm5lbFtpXSA9IHc7Ci0gICAgZWxzZQotICAgICAga2VybmVsW2ldID0gc2luICh3ICogKGkgLSAobGVuIC0gMSkgLyAyKSkgLyAoaSAtIChsZW4gLSAxKSAvIDIuMCk7Ci0KLSAgICAvKiB3aW5kb3dpbmcgKi8KLSAgICBzd2l0Y2ggKHNlbGYtPndpbmRvdykgewotICAgICAgY2FzZSBXSU5ET1dfSEFNTUlORzoKLSAgICAgICAga2VybmVsW2ldICo9ICgwLjU0IC0gMC40NiAqIGNvcyAoMiAqIEdfUEkgKiBpIC8gKGxlbiAtIDEpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXSU5ET1dfQkxBQ0tNQU46Ci0gICAgICAgIGtlcm5lbFtpXSAqPSAoMC40MiAtIDAuNSAqIGNvcyAoMiAqIEdfUEkgKiBpIC8gKGxlbiAtIDEpKSArCi0gICAgICAgICAgICAwLjA4ICogY29zICg0ICogR19QSSAqIGkgLyAobGVuIC0gMSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdJTkRPV19HQVVTU0lBTjoKLSAgICAgICAga2VybmVsW2ldICo9IGV4cCAoLTAuNSAqIFBPVzIgKDMuMCAvIGxlbiAqICgyICogaSAtIChsZW4gLSAxKSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdJTkRPV19DT1NJTkU6Ci0gICAgICAgIGtlcm5lbFtpXSAqPSBjb3MgKEdfUEkgKiBpIC8gKGxlbiAtIDEpIC0gR19QSSAvIDIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgV0lORE9XX0hBTk46Ci0gICAgICAgIGtlcm5lbFtpXSAqPSAwLjUgKiAoMSAtIGNvcyAoMiAqIEdfUEkgKiBpIC8gKGxlbiAtIDEpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIG5vcm1hbGl6ZSBmb3IgdW5pdHkgZ2FpbiBhdCBEQyAqLwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgc3VtICs9IGtlcm5lbFtpXTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKQotICAgIGtlcm5lbFtpXSAvPSBzdW07Ci0KLSAgLyogY29udmVydCB0byBoaWdocGFzcyBpZiBzcGVjaWZpZWQgKi8KLSAgaWYgKHNlbGYtPm1vZGUgPT0gTU9ERV9ISUdIX1BBU1MpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICBrZXJuZWxbaV0gPSAta2VybmVsW2ldOwotCi0gICAgaWYgKGxlbiAlIDIgPT0gMSkgewotICAgICAga2VybmVsWyhsZW4gLSAxKSAvIDJdICs9IDEuMDsKLSAgICB9IGVsc2UgewotICAgICAga2VybmVsW2xlbiAvIDIgLSAxXSArPSAwLjU7Ci0gICAgICBrZXJuZWxbbGVuIC8gMl0gKz0gMC41OwotICAgIH0KLSAgfQotCi0gIGdzdF9hdWRpb19meF9iYXNlX2Zpcl9maWx0ZXJfc2V0X2tlcm5lbCAoR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUiAoc2VsZiksCi0gICAgICBrZXJuZWwsIHNlbGYtPmtlcm5lbF9sZW5ndGgsIChsZW4gLSAxKSAvIDIsIGluZm8pOwotfQotCi0vKiBHc3RBdWRpb0ZpbHRlciB2bWV0aG9kIGltcGxlbWVudGF0aW9ucyAqLwotCi0vKiBnZXQgbm90aWZpZWQgb2YgY2FwcyBhbmQgcGx1ZyBpbiB0aGUgY29ycmVjdCBwcm9jZXNzIGZ1bmN0aW9uICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdWRpb193c2luY2xpbWl0X3NldHVwIChHc3RBdWRpb0ZpbHRlciAqIGJhc2UsIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIEdzdEF1ZGlvV1NpbmNMaW1pdCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19MSU1JVCAoYmFzZSk7Ci0KLSAgZ3N0X2F1ZGlvX3dzaW5jbGltaXRfYnVpbGRfa2VybmVsIChzZWxmLCBpbmZvKTsKLQotICByZXR1cm4gR1NUX0FVRElPX0ZJTFRFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2V0dXAgKGJhc2UsIGluZm8pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEF1ZGlvV1NpbmNMaW1pdCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19MSU1JVCAob2JqZWN0KTsKLQotICBnX211dGV4X2NsZWFyICgmc2VsZi0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3dzaW5jbGltaXRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvV1NpbmNMaW1pdCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19MSU1JVCAob2JqZWN0KTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQVVESU9fV1NJTkNfTElNSVQgKHNlbGYpKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEVOR1RIOnsKLSAgICAgIGdpbnQgdmFsOwotCi0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHZhbCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgaWYgKHZhbCAlIDIgPT0gMCkKLSAgICAgICAgdmFsKys7Ci0KLSAgICAgIGlmICh2YWwgIT0gc2VsZi0+a2VybmVsX2xlbmd0aCkgewotICAgICAgICBnc3RfYXVkaW9fZnhfYmFzZV9maXJfZmlsdGVyX3B1c2hfcmVzaWR1ZSAoR1NUX0FVRElPX0ZYX0JBU0VfRklSX0ZJTFRFUgotICAgICAgICAgICAgKHNlbGYpKTsKLSAgICAgICAgc2VsZi0+a2VybmVsX2xlbmd0aCA9IHZhbDsKLSAgICAgICAgZ3N0X2F1ZGlvX3dzaW5jbGltaXRfYnVpbGRfa2VybmVsIChzZWxmLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0ZSRVFVRU5DWToKLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgc2VsZi0+Y3V0b2ZmID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGdzdF9hdWRpb193c2luY2xpbWl0X2J1aWxkX2tlcm5lbCAoc2VsZiwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBnc3RfYXVkaW9fd3NpbmNsaW1pdF9idWlsZF9rZXJuZWwgKHNlbGYsIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9XSU5ET1c6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgIHNlbGYtPndpbmRvdyA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGdzdF9hdWRpb193c2luY2xpbWl0X2J1aWxkX2tlcm5lbCAoc2VsZiwgTlVMTCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1ZGlvV1NpbmNMaW1pdCAqc2VsZiA9IEdTVF9BVURJT19XU0lOQ19MSU1JVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEVOR1RIOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2VsZi0+a2VybmVsX2xlbmd0aCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRlJFUVVFTkNZOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBzZWxmLT5jdXRvZmYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc2VsZi0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfV0lORE9XOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNlbGYtPndpbmRvdyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9hdWRpb3dzaW5jbGltaXQuaCBiL2dzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZhOTE1Li4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2F1ZGlvd3NpbmNsaW1pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyogLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotICogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDYgRHJlYW1sYWIgVGVjaG5vbG9naWVzIEx0ZC4gPG1hdGhpcy5ob2ZlckBkcmVhbWxhYi5uZXQ+Ci0gKiAgICAgICAgICAgICAgIDIwMDctMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqIAotICogCi0gKiB0aGlzIHdpbmRvd2VkIHNpbmMgZmlsdGVyIGlzIHRha2VuIGZyb20gdGhlIGZyZWVseSBkb3dubG9hZGFibGUgRFNQIGJvb2ssCi0gKiAiVGhlIFNjaWVudGlzdCBhbmQgRW5naW5lZXIncyBHdWlkZSB0byBEaWdpdGFsIFNpZ25hbCBQcm9jZXNzaW5nIiwKLSAqIGNoYXB0ZXIgMTYKLSAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmRzcGd1aWRlLmNvbS8KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BVURJT19XU0lOQ19MSU1JVF9IX18KLSNkZWZpbmUgX19HU1RfQVVESU9fV1NJTkNfTElNSVRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLSNpbmNsdWRlICJhdWRpb2Z4YmFzZWZpcmZpbHRlci5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVESU9fV1NJTkNfTElNSVQgXAotICAoZ3N0X2F1ZGlvX3dzaW5jbGltaXRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FVRElPX1dTSU5DX0xJTUlUKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQVVESU9fV1NJTkNfTElNSVQsR3N0QXVkaW9XU2luY0xpbWl0KSkKLSNkZWZpbmUgR1NUX0FVRElPX1dTSU5DX0xJTUlUX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FVRElPX1dTSU5DX0xJTUlULEdzdEF1ZGlvV1NpbmNMaW1pdENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVRElPX1dTSU5DX0xJTUlUKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVVESU9fV1NJTkNfTElNSVQpKQotI2RlZmluZSBHU1RfSVNfQVVESU9fV1NJTkNfTElNSVRfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQVVESU9fV1NJTkNfTElNSVQpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXVkaW9XU2luY0xpbWl0IEdzdEF1ZGlvV1NpbmNMaW1pdDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdWRpb1dTaW5jTGltaXRDbGFzcyBHc3RBdWRpb1dTaW5jTGltaXRDbGFzczsKLQotLyoqCi0gKiBHc3RBdWRpb1dTaW5jTGltaXQ6Ci0gKgotICogT3BhcXVlIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEF1ZGlvV1NpbmNMaW1pdCB7Ci0gIEdzdEF1ZGlvRlhCYXNlRklSRmlsdGVyIHBhcmVudDsKLQotICBnaW50IG1vZGU7Ci0gIGdpbnQgd2luZG93OwotICBnZmxvYXQgY3V0b2ZmOwotICBnaW50IGtlcm5lbF9sZW5ndGg7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgR011dGV4IGxvY2s7Ci19OwotCi1zdHJ1Y3QgX0dzdEF1ZGlvV1NpbmNMaW1pdENsYXNzIHsKLSAgR3N0QXVkaW9GWEJhc2VGSVJGaWx0ZXJDbGFzcyBwYXJlbnQ7Ci19OwotCi1HVHlwZSBnc3RfYXVkaW9fd3NpbmNsaW1pdF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BVURJT19XU0lOQ19MSU1JVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYyBiL2dzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRmMDhlNy4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9nc3RzY2FsZXRlbXBvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MDYgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJvdiBKdXZhbm8gPHJvdmp1dmFub0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtc2NhbGV0ZW1wbwotICoKLSAqIFNjYWxlIHRlbXBvIHdoaWxlIG1haW50YWluaW5nIHBpdGNoCi0gKiAoV1NPTEEtbGlrZSB0ZWNobmlxdWUgd2l0aCBjcm9zcyBjb3JyZWxhdGlvbikKLSAqIEluc3BpcmVkIGJ5IFNvdW5kVG91Y2ggbGlicmFyeSBieSBPbGxpIFBhcnZpYWluZW4KLSAqCi0gKiBVc2UgU2NlbGV0ZW1wbyB0byBhcHBseSBwbGF5YmFjayByYXRlcyB3aXRob3V0IHRoZSBjaGlwbXVuayBlZmZlY3QuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIDxwYXJhPgotICogfFsKLSAqIGZpbGVzcmMgbG9jYXRpb249bWVkaWEuZXh0ICEgZGVjb2RlYmluIG5hbWU9ZCBcCi0gKiAgICAgZC4gISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBzY2FsZXRlbXBvICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsgXAotICogICAgIGQuICEgcXVldWUgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfAotICogT1IKLSAqIHxbCi0gKiBwbGF5YmluIHVyaT0uLi4gYXVkaW9fc2luaz0ic2NhbGV0ZW1wbyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rIgotICogXXwKLSAqIFdoZW4gYW4gYXBwbGljYXRpb24gc2VuZHMgYSBzZWVrIGV2ZW50IHdpdGggcmF0ZSAhPSAxLjAsIFNjYWxldGVtcG8gYXBwbGllcwotICogdGhlIHJhdGUgY2hhbmdlIGJ5IHNjYWxpbmcgdGhlIHRlbXBvIHdpdGhvdXQgc2NhbGluZyB0aGUgcGl0Y2guCi0gKgotICogU2NhbGV0ZW1wbyB3b3JrcyBieSBwcm9kdWNpbmcgYXVkaW8gaW4gY29uc3RhbnQgc2l6ZWQgY2h1bmtzCi0gKiAoI0dzdFNjYWxldGVtcG86c3RyaWRlKSBidXQgY29uc3VtaW5nIGNodW5rcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHBsYXliYWNrCi0gKiByYXRlLgotICoKLSAqIFNjYWxldGVtcG8gdGhlbiBzbW9vdGhzIHRoZSBvdXRwdXQgYnkgYmxlbmRpbmcgdGhlIGVuZCBvZiBvbmUgc3RyaWRlIHdpdGgKLSAqIHRoZSBuZXh0ICgjR3N0U2NhbGV0ZW1wbzpvdmVybGFwKS4KLSAqCi0gKiBTY2FsZXRlbXBvIHNtb290aHMgdGhlIG92ZXJsYXAgZnVydGhlciBieSBzZWFyY2hpbmcgd2l0aGluIHRoZSBpbnB1dCBidWZmZXIKLSAqIGZvciB0aGUgYmVzdCBvdmVybGFwIHBvc2l0aW9uLiAgU2NhbGV0ZW1wbyB1c2VzIGEgc3RhdGlzdGljYWwgY3Jvc3MKLSAqIGNvcnJlbGF0aW9uIChyb3VnaGx5IGEgZG90LXByb2R1Y3QpLiAgU2NhbGV0ZW1wbyBjb25zdW1lcyBtb3N0IG9mIGl0cyBDUFUKLSAqIGN5Y2xlcyBoZXJlLiBPbmUgY2FuIHVzZSB0aGUgI0dzdFNjYWxldGVtcG86c2VhcmNoIHByb3BlcnkgdG8gdHVuZSBob3cgZmFyCi0gKiB0aGUgYWxnb3JpdG0gbG9va3MuCi0gKiA8L3BhcmE+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qCi0gKiBOb3RlOiBmcmFtZSA9IGF1ZGlvIGtleSB1bml0IChpLmUuIG9uZSBzYW1wbGUgZm9yIGVhY2ggY2hhbm5lbCkKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAvKiBmb3IgbWVtc2V0ICovCi0KLSNpbmNsdWRlICJnc3RzY2FsZXRlbXBvLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9zY2FsZXRlbXBvX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9zY2FsZXRlbXBvX2RlYnVnCi0KLS8qIEZpbHRlciBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9SQVRFLAotICBQUk9QX1NUUklERSwKLSAgUFJPUF9PVkVSTEFQLAotICBQUk9QX1NFQVJDSCwKLX07Ci0KLSNkZWZpbmUgU1VQUE9SVEVEX0NBUFMgXAotR1NUX1NUQVRJQ19DQVBTICggXAotICAgIEdTVF9BVURJT19DQVBTX01BS0UgKEdTVF9BVURJT19ORSAoRjMyKSkgIjsgIiBcCi0gICAgR1NUX0FVRElPX0NBUFNfTUFLRSAoR1NUX0FVRElPX05FIChGNjQpKSAiOyAiIFwKLSAgICBHU1RfQVVESU9fQ0FQU19NQUtFIChHU1RfQVVESU9fTkUgKFMxNikpIFwKLSkKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBTVVBQT1JURURfQ0FQUyk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgU1VQUE9SVEVEX0NBUFMpOwotCi0jZGVmaW5lIERFQlVHX0lOSVQoYmxhKSBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3NjYWxldGVtcG9fZGVidWcsICJzY2FsZXRlbXBvIiwgMCwgInNjYWxldGVtcG8gZWxlbWVudCIpOwotCi0jZGVmaW5lIGdzdF9zY2FsZXRlbXBvX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RTY2FsZXRlbXBvLCBnc3Rfc2NhbGV0ZW1wbywKLSAgICBHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSwgREVCVUdfSU5JVCAoMCkpOwotCi0jZGVmaW5lIENSRUFURV9CRVNUX09WRVJMQVBfT0ZGU0VUX0ZMT0FUX0ZVTkModHlwZSkgXAotc3RhdGljIGd1aW50IFwKLWJlc3Rfb3ZlcmxhcF9vZmZzZXRfIyN0eXBlIChHc3RTY2FsZXRlbXBvICogc3QpIFwKLXsgXAotICBnIyN0eXBlICpwdywgKnBvLCAqcHBjLCAqc2VhcmNoX3N0YXJ0OyBcCi0gIGcjI3R5cGUgYmVzdF9jb3JyID0gR19NSU5JTlQ7IFwKLSAgZ3VpbnQgYmVzdF9vZmYgPSAwOyBcCi0gIGdpbnQgaSwgb2ZmOyBcCi0gIFwKLSAgcHcgPSBzdC0+dGFibGVfd2luZG93OyBcCi0gIHBvID0gc3QtPmJ1Zl9vdmVybGFwOyBcCi0gIHBvICs9IHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsgXAotICBwcGMgPSBzdC0+YnVmX3ByZV9jb3JyOyBcCi0gIGZvciAoaSA9IHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsgaSA8IHN0LT5zYW1wbGVzX292ZXJsYXA7IGkrKykgeyBcCi0gICAgKnBwYysrID0gKnB3KysgKiAqcG8rKzsgXAotICB9IFwKLSAgXAotICBzZWFyY2hfc3RhcnQgPSAoZyMjdHlwZSAqKSBzdC0+YnVmX3F1ZXVlICsgc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOyBcCi0gIGZvciAob2ZmID0gMDsgb2ZmIDwgc3QtPmZyYW1lc19zZWFyY2g7IG9mZisrKSB7IFwKLSAgICBnIyN0eXBlIGNvcnIgPSAwOyBcCi0gICAgZyMjdHlwZSAqcHMgPSBzZWFyY2hfc3RhcnQ7IFwKLSAgICBwcGMgPSBzdC0+YnVmX3ByZV9jb3JyOyBcCi0gICAgZm9yIChpID0gc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOyBpIDwgc3QtPnNhbXBsZXNfb3ZlcmxhcDsgaSsrKSB7IFwKLSAgICAgIGNvcnIgKz0gKnBwYysrICogKnBzKys7IFwKLSAgICB9IFwKLSAgICBpZiAoY29yciA+IGJlc3RfY29ycikgeyBcCi0gICAgICBiZXN0X2NvcnIgPSBjb3JyOyBcCi0gICAgICBiZXN0X29mZiA9IG9mZjsgXAotICAgIH0gXAotICAgIHNlYXJjaF9zdGFydCArPSBzdC0+c2FtcGxlc19wZXJfZnJhbWU7IFwKLSAgfSBcCi0gIFwKLSAgcmV0dXJuIGJlc3Rfb2ZmICogc3QtPmJ5dGVzX3Blcl9mcmFtZTsgXAotfQotCi1DUkVBVEVfQkVTVF9PVkVSTEFQX09GRlNFVF9GTE9BVF9GVU5DIChmbG9hdCk7Ci1DUkVBVEVfQkVTVF9PVkVSTEFQX09GRlNFVF9GTE9BVF9GVU5DIChkb3VibGUpOwotCi0vKiBidWZmZXIgcGFkZGluZyBmb3IgbG9vcCBvcHRpbWl6YXRpb246IHNpemVvZihnaW50MzIpICogKGxvb3Bfc2l6ZSAtIDEpICovCi0jZGVmaW5lIFVOUk9MTF9QQURESU5HICg0KjMpCi1zdGF0aWMgZ3VpbnQKLWJlc3Rfb3ZlcmxhcF9vZmZzZXRfczE2IChHc3RTY2FsZXRlbXBvICogc3QpCi17Ci0gIGdpbnQzMiAqcHcsICpwcGM7Ci0gIGdpbnQxNiAqcG8sICpzZWFyY2hfc3RhcnQ7Ci0gIGdpbnQ2NCBiZXN0X2NvcnIgPSBHX01JTklOVDY0OwotICBndWludCBiZXN0X29mZiA9IDA7Ci0gIGd1aW50IG9mZjsKLSAgZ2xvbmcgaTsKLQotICBwdyA9IHN0LT50YWJsZV93aW5kb3c7Ci0gIHBvID0gc3QtPmJ1Zl9vdmVybGFwOwotICBwbyArPSBzdC0+c2FtcGxlc19wZXJfZnJhbWU7Ci0gIHBwYyA9IHN0LT5idWZfcHJlX2NvcnI7Ci0gIGZvciAoaSA9IHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsgaSA8IHN0LT5zYW1wbGVzX292ZXJsYXA7IGkrKykgewotICAgICpwcGMrKyA9ICgqcHcrKyAqICpwbysrKSA+PiAxNTsKLSAgfQotCi0gIHNlYXJjaF9zdGFydCA9IChnaW50MTYgKikgc3QtPmJ1Zl9xdWV1ZSArIHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsKLSAgZm9yIChvZmYgPSAwOyBvZmYgPCBzdC0+ZnJhbWVzX3NlYXJjaDsgb2ZmKyspIHsKLSAgICBnaW50NjQgY29yciA9IDA7Ci0gICAgZ2ludDE2ICpwcyA9IHNlYXJjaF9zdGFydDsKLSAgICBwcGMgPSBzdC0+YnVmX3ByZV9jb3JyOwotICAgIHBwYyArPSBzdC0+c2FtcGxlc19vdmVybGFwIC0gc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOwotICAgIHBzICs9IHN0LT5zYW1wbGVzX292ZXJsYXAgLSBzdC0+c2FtcGxlc19wZXJfZnJhbWU7Ci0gICAgaSA9IC0oKGdsb25nKSBzdC0+c2FtcGxlc19vdmVybGFwIC0gKGdsb25nKSBzdC0+c2FtcGxlc19wZXJfZnJhbWUpOwotICAgIGRvIHsKLSAgICAgIGNvcnIgKz0gcHBjW2kgKyAwXSAqIHBzW2kgKyAwXTsKLSAgICAgIGNvcnIgKz0gcHBjW2kgKyAxXSAqIHBzW2kgKyAxXTsKLSAgICAgIGNvcnIgKz0gcHBjW2kgKyAyXSAqIHBzW2kgKyAyXTsKLSAgICAgIGNvcnIgKz0gcHBjW2kgKyAzXSAqIHBzW2kgKyAzXTsKLSAgICAgIGkgKz0gNDsKLSAgICB9IHdoaWxlIChpIDwgMCk7Ci0gICAgaWYgKGNvcnIgPiBiZXN0X2NvcnIpIHsKLSAgICAgIGJlc3RfY29yciA9IGNvcnI7Ci0gICAgICBiZXN0X29mZiA9IG9mZjsKLSAgICB9Ci0gICAgc2VhcmNoX3N0YXJ0ICs9IHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsKLSAgfQotCi0gIHJldHVybiBiZXN0X29mZiAqIHN0LT5ieXRlc19wZXJfZnJhbWU7Ci19Ci0KLSNkZWZpbmUgQ1JFQVRFX09VVFBVVF9PVkVSTEFQX0ZMT0FUX0ZVTkModHlwZSkgXAotc3RhdGljIHZvaWQgXAotb3V0cHV0X292ZXJsYXBfIyN0eXBlIChHc3RTY2FsZXRlbXBvICogc3QsIGdwb2ludGVyIGJ1Zl9vdXQsIGd1aW50IGJ5dGVzX29mZikgXAoteyBcCi0gIGcjI3R5cGUgKnBvdXQgPSBidWZfb3V0OyBcCi0gIGcjI3R5cGUgKnBiID0gc3QtPnRhYmxlX2JsZW5kOyBcCi0gIGcjI3R5cGUgKnBvID0gc3QtPmJ1Zl9vdmVybGFwOyBcCi0gIGcjI3R5cGUgKnBpbiA9IChnIyN0eXBlICopIChzdC0+YnVmX3F1ZXVlICsgYnl0ZXNfb2ZmKTsgXAotICBnaW50IGk7IFwKLSAgZm9yIChpID0gMDsgaSA8IHN0LT5zYW1wbGVzX292ZXJsYXA7IGkrKykgeyBcCi0gICAgKnBvdXQrKyA9ICpwbyAtICpwYisrICogKCpwbyAtICpwaW4rKyk7IFwKLSAgICBwbysrOyBcCi0gIH0gXAotfQotCi1DUkVBVEVfT1VUUFVUX09WRVJMQVBfRkxPQVRfRlVOQyAoZmxvYXQpOwotQ1JFQVRFX09VVFBVVF9PVkVSTEFQX0ZMT0FUX0ZVTkMgKGRvdWJsZSk7Ci0KLXN0YXRpYyB2b2lkCi1vdXRwdXRfb3ZlcmxhcF9zMTYgKEdzdFNjYWxldGVtcG8gKiBzdCwgZ3BvaW50ZXIgYnVmX291dCwgZ3VpbnQgYnl0ZXNfb2ZmKQotewotICBnaW50MTYgKnBvdXQgPSBidWZfb3V0OwotICBnaW50MzIgKnBiID0gc3QtPnRhYmxlX2JsZW5kOwotICBnaW50MTYgKnBvID0gc3QtPmJ1Zl9vdmVybGFwOwotICBnaW50MTYgKnBpbiA9IChnaW50MTYgKikgKHN0LT5idWZfcXVldWUgKyBieXRlc19vZmYpOwotICBnaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBzdC0+c2FtcGxlc19vdmVybGFwOyBpKyspIHsKLSAgICAqcG91dCsrID0gKnBvIC0gKCgqcGIrKyAqICgqcG8gLSAqcGluKyspKSA+PiAxNik7Ci0gICAgcG8rKzsKLSAgfQotfQotCi1zdGF0aWMgZ3VpbnQKLWZpbGxfcXVldWUgKEdzdFNjYWxldGVtcG8gKiBzdCwgR3N0QnVmZmVyICogYnVmX2luLCBndWludCBvZmZzZXQpCi17Ci0gIGd1aW50IGJ5dGVzX2luID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmX2luKSAtIG9mZnNldDsKLSAgZ3VpbnQgb2Zmc2V0X3VuY2hhbmdlZCA9IG9mZnNldDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1Zl9pbiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgaWYgKHN0LT5ieXRlc190b19zbGlkZSA+IDApIHsKLSAgICBpZiAoc3QtPmJ5dGVzX3RvX3NsaWRlIDwgc3QtPmJ5dGVzX3F1ZXVlZCkgewotICAgICAgZ3VpbnQgYnl0ZXNfaW5fbW92ZSA9IHN0LT5ieXRlc19xdWV1ZWQgLSBzdC0+Ynl0ZXNfdG9fc2xpZGU7Ci0gICAgICBtZW1tb3ZlIChzdC0+YnVmX3F1ZXVlLCBzdC0+YnVmX3F1ZXVlICsgc3QtPmJ5dGVzX3RvX3NsaWRlLAotICAgICAgICAgIGJ5dGVzX2luX21vdmUpOwotICAgICAgc3QtPmJ5dGVzX3RvX3NsaWRlID0gMDsKLSAgICAgIHN0LT5ieXRlc19xdWV1ZWQgPSBieXRlc19pbl9tb3ZlOwotICAgIH0gZWxzZSB7Ci0gICAgICBndWludCBieXRlc19pbl9za2lwOwotICAgICAgc3QtPmJ5dGVzX3RvX3NsaWRlIC09IHN0LT5ieXRlc19xdWV1ZWQ7Ci0gICAgICBieXRlc19pbl9za2lwID0gTUlOIChzdC0+Ynl0ZXNfdG9fc2xpZGUsIGJ5dGVzX2luKTsKLSAgICAgIHN0LT5ieXRlc19xdWV1ZWQgPSAwOwotICAgICAgc3QtPmJ5dGVzX3RvX3NsaWRlIC09IGJ5dGVzX2luX3NraXA7Ci0gICAgICBvZmZzZXQgKz0gYnl0ZXNfaW5fc2tpcDsKLSAgICAgIGJ5dGVzX2luIC09IGJ5dGVzX2luX3NraXA7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGJ5dGVzX2luID4gMCkgewotICAgIGd1aW50IGJ5dGVzX2luX2NvcHkgPQotICAgICAgICBNSU4gKHN0LT5ieXRlc19xdWV1ZV9tYXggLSBzdC0+Ynl0ZXNfcXVldWVkLCBieXRlc19pbik7Ci0gICAgbWVtY3B5IChzdC0+YnVmX3F1ZXVlICsgc3QtPmJ5dGVzX3F1ZXVlZCwgbWFwLmRhdGEgKyBvZmZzZXQsIGJ5dGVzX2luX2NvcHkpOwotICAgIHN0LT5ieXRlc19xdWV1ZWQgKz0gYnl0ZXNfaW5fY29weTsKLSAgICBvZmZzZXQgKz0gYnl0ZXNfaW5fY29weTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWZfaW4sICZtYXApOwotCi0gIHJldHVybiBvZmZzZXQgLSBvZmZzZXRfdW5jaGFuZ2VkOwotfQotCi1zdGF0aWMgdm9pZAotcmVpbml0X2J1ZmZlcnMgKEdzdFNjYWxldGVtcG8gKiBzdCkKLXsKLSAgZ2ludCBpLCBqOwotICBndWludCBmcmFtZXNfb3ZlcmxhcDsKLSAgZ3VpbnQgbmV3X3NpemU7Ci0gIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gIGd1aW50IGZyYW1lc19zdHJpZGUgPSBzdC0+bXNfc3RyaWRlICogc3QtPnNhbXBsZV9yYXRlIC8gMTAwMC4wOwotICBzdC0+Ynl0ZXNfc3RyaWRlID0gZnJhbWVzX3N0cmlkZSAqIHN0LT5ieXRlc19wZXJfZnJhbWU7Ci0KLSAgLyogb3ZlcmxhcCAqLwotICBmcmFtZXNfb3ZlcmxhcCA9IGZyYW1lc19zdHJpZGUgKiBzdC0+cGVyY2VudF9vdmVybGFwOwotICBpZiAoZnJhbWVzX292ZXJsYXAgPCAxKSB7ICAgICAvKiBpZiBubyBvdmVybGFwICovCi0gICAgc3QtPmJ5dGVzX292ZXJsYXAgPSAwOwotICAgIHN0LT5ieXRlc19zdGFuZGluZyA9IHN0LT5ieXRlc19zdHJpZGU7Ci0gICAgc3QtPnNhbXBsZXNfc3RhbmRpbmcgPSBzdC0+Ynl0ZXNfc3RhbmRpbmcgLyBzdC0+Ynl0ZXNfcGVyX3NhbXBsZTsKLSAgICBzdC0+b3V0cHV0X292ZXJsYXAgPSBOVUxMOwotICB9IGVsc2UgewotICAgIGd1aW50IHByZXZfb3ZlcmxhcCA9IHN0LT5ieXRlc19vdmVybGFwOwotICAgIHN0LT5ieXRlc19vdmVybGFwID0gZnJhbWVzX292ZXJsYXAgKiBzdC0+Ynl0ZXNfcGVyX2ZyYW1lOwotICAgIHN0LT5zYW1wbGVzX292ZXJsYXAgPSBmcmFtZXNfb3ZlcmxhcCAqIHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsKLSAgICBzdC0+Ynl0ZXNfc3RhbmRpbmcgPSBzdC0+Ynl0ZXNfc3RyaWRlIC0gc3QtPmJ5dGVzX292ZXJsYXA7Ci0gICAgc3QtPnNhbXBsZXNfc3RhbmRpbmcgPSBzdC0+Ynl0ZXNfc3RhbmRpbmcgLyBzdC0+Ynl0ZXNfcGVyX3NhbXBsZTsKLSAgICBzdC0+YnVmX292ZXJsYXAgPSBnX3JlYWxsb2MgKHN0LT5idWZfb3ZlcmxhcCwgc3QtPmJ5dGVzX292ZXJsYXApOwotICAgIC8qIFMxNiB1c2VzIGdpbnQzMiBibGVuZCB0YWJsZSwgZmxvYXRzL2RvdWJsZXMgdXNlIHRoZWlyIHJlc3BlY3RpdmUgdHlwZSAqLwotICAgIHN0LT50YWJsZV9ibGVuZCA9Ci0gICAgICAgIGdfcmVhbGxvYyAoc3QtPnRhYmxlX2JsZW5kLAotICAgICAgICBzdC0+c2FtcGxlc19vdmVybGFwICogKHN0LT5mb3JtYXQgPT0KLSAgICAgICAgICAgIEdTVF9BVURJT19GT1JNQVRfUzE2ID8gNCA6IHN0LT5ieXRlc19wZXJfc2FtcGxlKSk7Ci0gICAgaWYgKHN0LT5ieXRlc19vdmVybGFwID4gcHJldl9vdmVybGFwKSB7Ci0gICAgICBtZW1zZXQgKChndWludDggKikgc3QtPmJ1Zl9vdmVybGFwICsgcHJldl9vdmVybGFwLCAwLAotICAgICAgICAgIHN0LT5ieXRlc19vdmVybGFwIC0gcHJldl9vdmVybGFwKTsKLSAgICB9Ci0gICAgaWYgKHN0LT5mb3JtYXQgPT0gR1NUX0FVRElPX0ZPUk1BVF9TMTYpIHsKLSAgICAgIGdpbnQzMiAqcGIgPSBzdC0+dGFibGVfYmxlbmQ7Ci0gICAgICBnaW50NjQgYmxlbmQgPSAwOwotICAgICAgZm9yIChpID0gMDsgaSA8IGZyYW1lc19vdmVybGFwOyBpKyspIHsKLSAgICAgICAgZ2ludDMyIHYgPSBibGVuZCAvIGZyYW1lc19vdmVybGFwOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOyBqKyspIHsKLSAgICAgICAgICAqcGIrKyA9IHY7Ci0gICAgICAgIH0KLSAgICAgICAgYmxlbmQgKz0gNjU1MzU7ICAgICAgICAgLyogMl4xNiAqLwotICAgICAgfQotICAgICAgc3QtPm91dHB1dF9vdmVybGFwID0gb3V0cHV0X292ZXJsYXBfczE2OwotICAgIH0gZWxzZSBpZiAoc3QtPmZvcm1hdCA9PSBHU1RfQVVESU9fRk9STUFUX0YzMikgewotICAgICAgZ2Zsb2F0ICpwYiA9IHN0LT50YWJsZV9ibGVuZDsKLSAgICAgIGdmbG9hdCB0ID0gKGdmbG9hdCkgZnJhbWVzX292ZXJsYXA7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVzX292ZXJsYXA7IGkrKykgewotICAgICAgICBnZmxvYXQgdiA9IGkgLyB0OwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOyBqKyspIHsKLSAgICAgICAgICAqcGIrKyA9IHY7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0LT5vdXRwdXRfb3ZlcmxhcCA9IG91dHB1dF9vdmVybGFwX2Zsb2F0OwotICAgIH0gZWxzZSB7Ci0gICAgICBnZG91YmxlICpwYiA9IHN0LT50YWJsZV9ibGVuZDsKLSAgICAgIGdkb3VibGUgdCA9IChnZG91YmxlKSBmcmFtZXNfb3ZlcmxhcDsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZXNfb3ZlcmxhcDsgaSsrKSB7Ci0gICAgICAgIGdkb3VibGUgdiA9IGkgLyB0OwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOyBqKyspIHsKLSAgICAgICAgICAqcGIrKyA9IHY7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN0LT5vdXRwdXRfb3ZlcmxhcCA9IG91dHB1dF9vdmVybGFwX2RvdWJsZTsKLSAgICB9Ci0gIH0KLQotICAvKiBiZXN0IG92ZXJsYXAgKi8KLSAgc3QtPmZyYW1lc19zZWFyY2ggPQotICAgICAgKGZyYW1lc19vdmVybGFwIDw9IDEpID8gMCA6IHN0LT5tc19zZWFyY2ggKiBzdC0+c2FtcGxlX3JhdGUgLyAxMDAwLjA7Ci0gIGlmIChzdC0+ZnJhbWVzX3NlYXJjaCA8IDEpIHsgIC8qIGlmIG5vIHNlYXJjaCAqLwotICAgIHN0LT5iZXN0X292ZXJsYXBfb2Zmc2V0ID0gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICAvKiBTMTYgdXNlcyBnaW50MzIgYnVmZmVyLCBmbG9hdHMvZG91YmxlcyB1c2UgdGhlaXIgcmVzcGVjdGl2ZSB0eXBlICovCi0gICAgZ3VpbnQgYnl0ZXNfcHJlX2NvcnIgPQotICAgICAgICAoc3QtPnNhbXBsZXNfb3ZlcmxhcCAtIHN0LT5zYW1wbGVzX3Blcl9mcmFtZSkgKiAoc3QtPmZvcm1hdCA9PQotICAgICAgICBHU1RfQVVESU9fRk9STUFUX1MxNiA/IDQgOiBzdC0+Ynl0ZXNfcGVyX3NhbXBsZSk7Ci0gICAgc3QtPmJ1Zl9wcmVfY29yciA9Ci0gICAgICAgIGdfcmVhbGxvYyAoc3QtPmJ1Zl9wcmVfY29yciwgYnl0ZXNfcHJlX2NvcnIgKyBVTlJPTExfUEFERElORyk7Ci0gICAgc3QtPnRhYmxlX3dpbmRvdyA9IGdfcmVhbGxvYyAoc3QtPnRhYmxlX3dpbmRvdywgYnl0ZXNfcHJlX2NvcnIpOwotICAgIGlmIChzdC0+Zm9ybWF0ID09IEdTVF9BVURJT19GT1JNQVRfUzE2KSB7Ci0gICAgICBnaW50NjQgdCA9IGZyYW1lc19vdmVybGFwOwotICAgICAgZ2ludDMyIG4gPSA4NTg5OTM0NTg4TEwgLyAodCAqIHQpOyAgICAgICAgLyogNCAqICgyXjMxIC0gMSkgLyB0XjIgKi8KLSAgICAgIGdpbnQzMiAqcHc7Ci0KLSAgICAgIG1lbXNldCAoKGd1aW50OCAqKSBzdC0+YnVmX3ByZV9jb3JyICsgYnl0ZXNfcHJlX2NvcnIsIDAsIFVOUk9MTF9QQURESU5HKTsKLSAgICAgIHB3ID0gc3QtPnRhYmxlX3dpbmRvdzsKLSAgICAgIGZvciAoaSA9IDE7IGkgPCBmcmFtZXNfb3ZlcmxhcDsgaSsrKSB7Ci0gICAgICAgIGdpbnQzMiB2ID0gKGkgKiAodCAtIGkpICogbikgPj4gMTU7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBzdC0+c2FtcGxlc19wZXJfZnJhbWU7IGorKykgewotICAgICAgICAgICpwdysrID0gdjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3QtPmJlc3Rfb3ZlcmxhcF9vZmZzZXQgPSBiZXN0X292ZXJsYXBfb2Zmc2V0X3MxNjsKLSAgICB9IGVsc2UgaWYgKHN0LT5mb3JtYXQgPT0gR1NUX0FVRElPX0ZPUk1BVF9GMzIpIHsKLSAgICAgIGdmbG9hdCAqcHcgPSBzdC0+dGFibGVfd2luZG93OwotICAgICAgZm9yIChpID0gMTsgaSA8IGZyYW1lc19vdmVybGFwOyBpKyspIHsKLSAgICAgICAgZ2Zsb2F0IHYgPSBpICogKGZyYW1lc19vdmVybGFwIC0gaSk7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBzdC0+c2FtcGxlc19wZXJfZnJhbWU7IGorKykgewotICAgICAgICAgICpwdysrID0gdjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3QtPmJlc3Rfb3ZlcmxhcF9vZmZzZXQgPSBiZXN0X292ZXJsYXBfb2Zmc2V0X2Zsb2F0OwotICAgIH0gZWxzZSB7Ci0gICAgICBnZG91YmxlICpwdyA9IHN0LT50YWJsZV93aW5kb3c7Ci0gICAgICBmb3IgKGkgPSAxOyBpIDwgZnJhbWVzX292ZXJsYXA7IGkrKykgewotICAgICAgICBnZG91YmxlIHYgPSBpICogKGZyYW1lc19vdmVybGFwIC0gaSk7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBzdC0+c2FtcGxlc19wZXJfZnJhbWU7IGorKykgewotICAgICAgICAgICpwdysrID0gdjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3QtPmJlc3Rfb3ZlcmxhcF9vZmZzZXQgPSBiZXN0X292ZXJsYXBfb2Zmc2V0X2RvdWJsZTsKLSAgICB9Ci0gIH0KLQotICBuZXdfc2l6ZSA9Ci0gICAgICAoc3QtPmZyYW1lc19zZWFyY2ggKyBmcmFtZXNfc3RyaWRlICsKLSAgICAgIGZyYW1lc19vdmVybGFwKSAqIHN0LT5ieXRlc19wZXJfZnJhbWU7Ci0gIGlmIChzdC0+Ynl0ZXNfcXVldWVkID4gbmV3X3NpemUpIHsKLSAgICBpZiAoc3QtPmJ5dGVzX3RvX3NsaWRlID4gc3QtPmJ5dGVzX3F1ZXVlZCkgewotICAgICAgc3QtPmJ5dGVzX3RvX3NsaWRlIC09IHN0LT5ieXRlc19xdWV1ZWQ7Ci0gICAgICBzdC0+Ynl0ZXNfcXVldWVkID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgZ3VpbnQgbmV3X3F1ZXVlZCA9IE1JTiAoc3QtPmJ5dGVzX3F1ZXVlZCAtIHN0LT5ieXRlc190b19zbGlkZSwgbmV3X3NpemUpOwotICAgICAgbWVtbW92ZSAoc3QtPmJ1Zl9xdWV1ZSwKLSAgICAgICAgICBzdC0+YnVmX3F1ZXVlICsgc3QtPmJ5dGVzX3F1ZXVlZCAtIG5ld19xdWV1ZWQsIG5ld19xdWV1ZWQpOwotICAgICAgc3QtPmJ5dGVzX3RvX3NsaWRlID0gMDsKLSAgICAgIHN0LT5ieXRlc19xdWV1ZWQgPSBuZXdfcXVldWVkOwotICAgIH0KLSAgfQotCi0gIHN0LT5ieXRlc19xdWV1ZV9tYXggPSBuZXdfc2l6ZTsKLSAgc3QtPmJ1Zl9xdWV1ZSA9IGdfcmVhbGxvYyAoc3QtPmJ1Zl9xdWV1ZSwgc3QtPmJ5dGVzX3F1ZXVlX21heCk7Ci0KLSAgbGF0ZW5jeSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHN0LT5ieXRlc19xdWV1ZV9tYXgsIEdTVF9TRUNPTkQsCi0gICAgICBzdC0+Ynl0ZXNfcGVyX2ZyYW1lICogc3QtPnNhbXBsZV9yYXRlKTsKLSAgaWYgKHN0LT5sYXRlbmN5ICE9IGxhdGVuY3kpIHsKLSAgICBzdC0+bGF0ZW5jeSA9IGxhdGVuY3k7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoc3QpLAotICAgICAgICBnc3RfbWVzc2FnZV9uZXdfbGF0ZW5jeSAoR1NUX09CSkVDVCAoc3QpKSk7Ci0gIH0KLQotICBzdC0+Ynl0ZXNfc3RyaWRlX3NjYWxlZCA9IHN0LT5ieXRlc19zdHJpZGUgKiBzdC0+c2NhbGU7Ci0gIHN0LT5mcmFtZXNfc3RyaWRlX3NjYWxlZCA9IHN0LT5ieXRlc19zdHJpZGVfc2NhbGVkIC8gc3QtPmJ5dGVzX3Blcl9mcmFtZTsKLQotICBHU1RfREVCVUcKLSAgICAgICgiJS4zZiBzY2FsZSwgJS4zZiBzdHJpZGVfaW4sICVpIHN0cmlkZV9vdXQsICVpIHN0YW5kaW5nLCAlaSBvdmVybGFwLCAlaSBzZWFyY2gsICVpIHF1ZXVlLCAlcyBtb2RlIiwKLSAgICAgIHN0LT5zY2FsZSwgc3QtPmZyYW1lc19zdHJpZGVfc2NhbGVkLAotICAgICAgKGdpbnQpIChzdC0+Ynl0ZXNfc3RyaWRlIC8gc3QtPmJ5dGVzX3Blcl9mcmFtZSksCi0gICAgICAoZ2ludCkgKHN0LT5ieXRlc19zdGFuZGluZyAvIHN0LT5ieXRlc19wZXJfZnJhbWUpLAotICAgICAgKGdpbnQpIChzdC0+Ynl0ZXNfb3ZlcmxhcCAvIHN0LT5ieXRlc19wZXJfZnJhbWUpLCBzdC0+ZnJhbWVzX3NlYXJjaCwKLSAgICAgIChnaW50KSAoc3QtPmJ5dGVzX3F1ZXVlX21heCAvIHN0LT5ieXRlc19wZXJfZnJhbWUpLAotICAgICAgZ3N0X2F1ZGlvX2Zvcm1hdF90b19zdHJpbmcgKHN0LT5mb3JtYXQpKTsKLQotICBzdC0+cmVpbml0X2J1ZmZlcnMgPSBGQUxTRTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1yZXZlcnNlX2J1ZmZlciAoR3N0U2NhbGV0ZW1wbyAqIHN0LCBHc3RCdWZmZXIgKiBpbmJ1ZikKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdE1hcEluZm8gaW1hcCwgb21hcDsKLQotICBnc3RfYnVmZmVyX21hcCAoaW5idWYsICZpbWFwLCBHU1RfTUFQX1JFQUQpOwotICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGltYXAuc2l6ZSk7Ci0gIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZvbWFwLCBHU1RfTUFQX1dSSVRFKTsKLQotICBpZiAoc3QtPmZvcm1hdCA9PSBHU1RfQVVESU9fRk9STUFUX0Y2NCkgewotICAgIGNvbnN0IGdpbnQ2NCAqaXAgPSAoY29uc3QgZ2ludDY0ICopIGltYXAuZGF0YTsKLSAgICBnaW50NjQgKm9wID0gKGdpbnQ2NCAqKSAob21hcC5kYXRhICsgb21hcC5zaXplIC0gOCAqIHN0LT5zYW1wbGVzX3Blcl9mcmFtZSk7Ci0gICAgZ3VpbnQgaSwgbiA9IGltYXAuc2l6ZSAvICg4ICogc3QtPnNhbXBsZXNfcGVyX2ZyYW1lKTsKLSAgICBndWludCBqLCBjID0gc3QtPnNhbXBsZXNfcGVyX2ZyYW1lOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IGM7IGorKykKLSAgICAgICAgb3Bbal0gPSBpcFtqXTsKLSAgICAgIG9wIC09IGM7Ci0gICAgICBpcCArPSBjOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBjb25zdCBnaW50MzIgKmlwID0gKGNvbnN0IGdpbnQzMiAqKSBpbWFwLmRhdGE7Ci0gICAgZ2ludDMyICpvcCA9IChnaW50MzIgKikgKG9tYXAuZGF0YSArIG9tYXAuc2l6ZSAtIDQgKiBzdC0+c2FtcGxlc19wZXJfZnJhbWUpOwotICAgIGd1aW50IGksIG4gPSBpbWFwLnNpemUgLyAoNCAqIHN0LT5zYW1wbGVzX3Blcl9mcmFtZSk7Ci0gICAgZ3VpbnQgaiwgYyA9IHN0LT5zYW1wbGVzX3Blcl9mcmFtZTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCBjOyBqKyspCi0gICAgICAgIG9wW2pdID0gaXBbal07Ci0gICAgICBvcCAtPSBjOwotICAgICAgaXAgKz0gYzsKLSAgICB9Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZiwgJmltYXApOwotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZvbWFwKTsKLQotICByZXR1cm4gb3V0YnVmOwotfQotCi0vKiBHc3RCYXNlVHJhbnNmb3JtIHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NjYWxldGVtcG9fdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqIG91dGJ1ZikKLXsKLSAgR3N0U2NhbGV0ZW1wbyAqc3QgPSBHU1RfU0NBTEVURU1QTyAodHJhbnMpOwotICBnaW50OCAqcG91dDsKLSAgZ3VpbnQgb2Zmc2V0X2luLCBieXRlc19vdXQ7Ci0gIEdzdE1hcEluZm8gb21hcDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0QnVmZmVyICp0bXBidWYgPSBOVUxMOwotCi0gIGlmIChzdC0+cmV2ZXJzZSkKLSAgICB0bXBidWYgPSByZXZlcnNlX2J1ZmZlciAoc3QsIGluYnVmKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmb21hcCwgR1NUX01BUF9XUklURSk7Ci0gIHBvdXQgPSAoZ2ludDggKikgb21hcC5kYXRhOwotICBieXRlc19vdXQgPSBvbWFwLnNpemU7Ci0KLSAgb2Zmc2V0X2luID0gZmlsbF9xdWV1ZSAoc3QsIHRtcGJ1ZiA/IHRtcGJ1ZiA6IGluYnVmLCAwKTsKLSAgYnl0ZXNfb3V0ID0gMDsKLSAgd2hpbGUgKHN0LT5ieXRlc19xdWV1ZWQgPj0gc3QtPmJ5dGVzX3F1ZXVlX21heCkgewotICAgIGd1aW50IGJ5dGVzX29mZiA9IDA7Ci0gICAgZ2RvdWJsZSBmcmFtZXNfdG9fc2xpZGU7Ci0gICAgZ3VpbnQgZnJhbWVzX3RvX3N0cmlkZV93aG9sZTsKLQotICAgIC8qIG91dHB1dCBzdHJpZGUgKi8KLSAgICBpZiAoc3QtPm91dHB1dF9vdmVybGFwKSB7Ci0gICAgICBpZiAoc3QtPmJlc3Rfb3ZlcmxhcF9vZmZzZXQpIHsKLSAgICAgICAgYnl0ZXNfb2ZmID0gc3QtPmJlc3Rfb3ZlcmxhcF9vZmZzZXQgKHN0KTsKLSAgICAgIH0KLSAgICAgIHN0LT5vdXRwdXRfb3ZlcmxhcCAoc3QsIHBvdXQsIGJ5dGVzX29mZik7Ci0gICAgfQotICAgIG1lbWNweSAocG91dCArIHN0LT5ieXRlc19vdmVybGFwLAotICAgICAgICBzdC0+YnVmX3F1ZXVlICsgYnl0ZXNfb2ZmICsgc3QtPmJ5dGVzX292ZXJsYXAsIHN0LT5ieXRlc19zdGFuZGluZyk7Ci0gICAgcG91dCArPSBzdC0+Ynl0ZXNfc3RyaWRlOwotICAgIGJ5dGVzX291dCArPSBzdC0+Ynl0ZXNfc3RyaWRlOwotCi0gICAgLyogaW5wdXQgc3RyaWRlICovCi0gICAgbWVtY3B5IChzdC0+YnVmX292ZXJsYXAsCi0gICAgICAgIHN0LT5idWZfcXVldWUgKyBieXRlc19vZmYgKyBzdC0+Ynl0ZXNfc3RyaWRlLCBzdC0+Ynl0ZXNfb3ZlcmxhcCk7Ci0gICAgZnJhbWVzX3RvX3NsaWRlID0gc3QtPmZyYW1lc19zdHJpZGVfc2NhbGVkICsgc3QtPmZyYW1lc19zdHJpZGVfZXJyb3I7Ci0gICAgZnJhbWVzX3RvX3N0cmlkZV93aG9sZSA9IChnaW50KSBmcmFtZXNfdG9fc2xpZGU7Ci0gICAgc3QtPmJ5dGVzX3RvX3NsaWRlID0gZnJhbWVzX3RvX3N0cmlkZV93aG9sZSAqIHN0LT5ieXRlc19wZXJfZnJhbWU7Ci0gICAgc3QtPmZyYW1lc19zdHJpZGVfZXJyb3IgPSBmcmFtZXNfdG9fc2xpZGUgLSBmcmFtZXNfdG9fc3RyaWRlX3dob2xlOwotCi0gICAgb2Zmc2V0X2luICs9IGZpbGxfcXVldWUgKHN0LCB0bXBidWYgPyB0bXBidWYgOiBpbmJ1Ziwgb2Zmc2V0X2luKTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZvbWFwKTsKLQotICBpZiAoc3QtPnJldmVyc2UpIHsKLSAgICB0aW1lc3RhbXAgPSBzdC0+aW5fc2VnbWVudC5zdG9wIC0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmKTsKLSAgICBpZiAodGltZXN0YW1wIDwgc3QtPmxhdGVuY3kpCi0gICAgICB0aW1lc3RhbXAgPSAwOwotICAgIGVsc2UKLSAgICAgIHRpbWVzdGFtcCAtPSBzdC0+bGF0ZW5jeTsKLSAgfSBlbHNlIHsKLSAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWYpIC0gc3QtPmluX3NlZ21lbnQuc3RhcnQ7Ci0gICAgaWYgKHRpbWVzdGFtcCA8IHN0LT5sYXRlbmN5KQotICAgICAgdGltZXN0YW1wID0gMDsKLSAgICBlbHNlCi0gICAgICB0aW1lc3RhbXAgLT0gc3QtPmxhdGVuY3k7Ci0gIH0KLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPSB0aW1lc3RhbXAgLyBzdC0+c2NhbGUgKyBzdC0+aW5fc2VnbWVudC5zdGFydDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGJ5dGVzX291dCwgR1NUX1NFQ09ORCwKLSAgICAgIHN0LT5ieXRlc19wZXJfZnJhbWUgKiBzdC0+c2FtcGxlX3JhdGUpOwotICBnc3RfYnVmZmVyX3NldF9zaXplIChvdXRidWYsIGJ5dGVzX291dCk7Ci0KLSAgaWYgKHRtcGJ1ZikKLSAgICBnc3RfYnVmZmVyX3VucmVmICh0bXBidWYpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zY2FsZXRlbXBvX3N1Ym1pdF9pbnB1dF9idWZmZXIgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBnYm9vbGVhbiBpc19kaXNjb250LCBHc3RCdWZmZXIgKiBpbnB1dCkKLXsKLSAgR3N0U2NhbGV0ZW1wbyAqc2NhbGV0ZW1wbyA9IEdTVF9TQ0FMRVRFTVBPICh0cmFucyk7Ci0KLSAgaWYgKHNjYWxldGVtcG8tPmluX3NlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgIGlucHV0ID0KLSAgICAgICAgZ3N0X2F1ZGlvX2J1ZmZlcl9jbGlwIChpbnB1dCwgJnNjYWxldGVtcG8tPmluX3NlZ21lbnQsCi0gICAgICAgIHNjYWxldGVtcG8tPnNhbXBsZV9yYXRlLCBzY2FsZXRlbXBvLT5ieXRlc19wZXJfZnJhbWUpOwotICAgIGlmICghaW5wdXQpCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zdWJtaXRfaW5wdXRfYnVmZmVyICh0cmFucywKLSAgICAgIGlzX2Rpc2NvbnQsIGlucHV0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2NhbGV0ZW1wb190cmFuc2Zvcm1fc2l6ZSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgR3N0Q2FwcyAqIGNhcHMsIGdzaXplIHNpemUsIEdzdENhcHMgKiBvdGhlcmNhcHMsIGdzaXplICogb3RoZXJzaXplKQotewotICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykgewotICAgIEdzdFNjYWxldGVtcG8gKnNjYWxldGVtcG8gPSBHU1RfU0NBTEVURU1QTyAodHJhbnMpOwotICAgIGdpbnQgYnl0ZXNfdG9fb3V0OwotCi0gICAgaWYgKHNjYWxldGVtcG8tPnJlaW5pdF9idWZmZXJzKQotICAgICAgcmVpbml0X2J1ZmZlcnMgKHNjYWxldGVtcG8pOwotCi0gICAgYnl0ZXNfdG9fb3V0ID0gc2l6ZSArIHNjYWxldGVtcG8tPmJ5dGVzX3F1ZXVlZCAtIHNjYWxldGVtcG8tPmJ5dGVzX3RvX3NsaWRlOwotICAgIGlmIChieXRlc190b19vdXQgPCAoZ2ludCkgc2NhbGV0ZW1wby0+Ynl0ZXNfcXVldWVfbWF4KSB7Ci0gICAgICAqb3RoZXJzaXplID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgLyogd2hpbGUgKHRvdGFsX2J1ZmZlcmVkIC0gc3RyaWRlX2xlbmd0aCAqIG4gPj0gcXVldWVfbWF4KSBuKysgKi8KLSAgICAgICpvdGhlcnNpemUgPSBzY2FsZXRlbXBvLT5ieXRlc19zdHJpZGUgKiAoKGd1aW50KSAoCi0gICAgICAgICAgICAgIChieXRlc190b19vdXQgLSBzY2FsZXRlbXBvLT5ieXRlc19xdWV1ZV9tYXggKwotICAgICAgICAgICAgICAgICAgLyogcm91bmRpbmcgcHJvdGVjdGlvbiAqLyBzY2FsZXRlbXBvLT5ieXRlc19wZXJfZnJhbWUpCi0gICAgICAgICAgICAgIC8gc2NhbGV0ZW1wby0+Ynl0ZXNfc3RyaWRlX3NjYWxlZCkgKyAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NjYWxldGVtcG9fc2lua19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RTY2FsZXRlbXBvICpzY2FsZXRlbXBvID0gR1NUX1NDQUxFVEVNUE8gKHRyYW5zKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VHTUVOVCkgewotICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7Ci0KLSAgICBpZiAoc2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FCi0gICAgICAgIHx8IHNjYWxldGVtcG8tPnNjYWxlICE9IEFCUyAoc2VnbWVudC5yYXRlKQotICAgICAgICB8fCAhICFzY2FsZXRlbXBvLT5yZXZlcnNlICE9ICEgIShzZWdtZW50LnJhdGUgPCAwLjApKSB7Ci0gICAgICBpZiAoc2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FIHx8IEFCUyAoc2VnbWVudC5yYXRlIC0gMS4wKSA8IDFlLTEwKSB7Ci0gICAgICAgIHNjYWxldGVtcG8tPnNjYWxlID0gMS4wOwotICAgICAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9UUkFOU0ZPUk0gKHNjYWxldGVtcG8pLAotICAgICAgICAgICAgVFJVRSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9UUkFOU0ZPUk0gKHNjYWxldGVtcG8pLAotICAgICAgICAgICAgRkFMU0UpOwotICAgICAgICBzY2FsZXRlbXBvLT5zY2FsZSA9IEFCUyAoc2VnbWVudC5yYXRlKTsKLSAgICAgICAgc2NhbGV0ZW1wby0+cmV2ZXJzZSA9IHNlZ21lbnQucmF0ZSA8IDAuMDsKLSAgICAgICAgc2NhbGV0ZW1wby0+Ynl0ZXNfc3RyaWRlX3NjYWxlZCA9Ci0gICAgICAgICAgICBzY2FsZXRlbXBvLT5ieXRlc19zdHJpZGUgKiBzY2FsZXRlbXBvLT5zY2FsZTsKLSAgICAgICAgc2NhbGV0ZW1wby0+ZnJhbWVzX3N0cmlkZV9zY2FsZWQgPQotICAgICAgICAgICAgc2NhbGV0ZW1wby0+Ynl0ZXNfc3RyaWRlX3NjYWxlZCAvIHNjYWxldGVtcG8tPmJ5dGVzX3Blcl9mcmFtZTsKLSAgICAgICAgR1NUX0RFQlVHICgiJS4zZiBzY2FsZSwgJS4zZiBzdHJpZGVfaW4sICVpIHN0cmlkZV9vdXQiLAotICAgICAgICAgICAgc2NhbGV0ZW1wby0+c2NhbGUsIHNjYWxldGVtcG8tPmZyYW1lc19zdHJpZGVfc2NhbGVkLAotICAgICAgICAgICAgKGdpbnQpIChzY2FsZXRlbXBvLT5ieXRlc19zdHJpZGUgLyBzY2FsZXRlbXBvLT5ieXRlc19wZXJfZnJhbWUpKTsKLQotICAgICAgICBzY2FsZXRlbXBvLT5ieXRlc190b19zbGlkZSA9IDA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc2NhbGV0ZW1wby0+aW5fc2VnbWVudCA9IHNlZ21lbnQ7Ci0gICAgc2NhbGV0ZW1wby0+b3V0X3NlZ21lbnQgPSBzZWdtZW50OwotCi0gICAgaWYgKHNjYWxldGVtcG8tPnNjYWxlICE9IDEuMCB8fCBzY2FsZXRlbXBvLT5yZXZlcnNlKSB7Ci0gICAgICBndWludDMyIHNlcW51bTsKLQotICAgICAgc2VnbWVudC5hcHBsaWVkX3JhdGUgPSBzZWdtZW50LnJhdGU7Ci0gICAgICBzZWdtZW50LnJhdGUgPSAxLjA7Ci0KLSAgICAgIGlmIChzZWdtZW50LnN0b3AgIT0gLTEpIHsKLSAgICAgICAgc2VnbWVudC5zdG9wID0KLSAgICAgICAgICAgIChzZWdtZW50LnN0b3AgLSBzZWdtZW50LnN0YXJ0KSAvIEFCUyAoc2VnbWVudC5hcHBsaWVkX3JhdGUpICsKLSAgICAgICAgICAgIHNlZ21lbnQuc3RhcnQ7Ci0gICAgICB9Ci0KLSAgICAgIHNjYWxldGVtcG8tPm91dF9zZWdtZW50ID0gc2VnbWVudDsKLQotICAgICAgc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBzZXFudW0pOwotCi0gICAgICByZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFTRV9UUkFOU0ZPUk1fU1JDX1BBRCAodHJhbnMpLCBldmVudCk7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0ZMVVNIX1NUT1ApIHsKLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2NhbGV0ZW1wby0+aW5fc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzY2FsZXRlbXBvLT5vdXRfc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAodHJhbnMsIGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2NhbGV0ZW1wb19zZXRfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdENhcHMgKiBpbmNhcHMsIEdzdENhcHMgKiBvdXRjYXBzKQotewotICBHc3RTY2FsZXRlbXBvICpzY2FsZXRlbXBvID0gR1NUX1NDQUxFVEVNUE8gKHRyYW5zKTsKLQotICBnaW50IHdpZHRoLCBicHMsIG5jaCwgcmF0ZTsKLSAgR3N0QXVkaW9JbmZvIGluZm87Ci0gIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdDsKLQotICBpZiAoIWdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGluY2FwcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG5jaCA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTICgmaW5mbyk7Ci0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmaW5mbyk7Ci0gIHdpZHRoID0gR1NUX0FVRElPX0lORk9fV0lEVEggKCZpbmZvKTsKLSAgZm9ybWF0ID0gR1NUX0FVRElPX0lORk9fRk9STUFUICgmaW5mbyk7Ci0KLSAgYnBzID0gd2lkdGggLyA4OwotCi0gIEdTVF9ERUJVRyAoImNhcHM6ICUiIEdTVF9QVFJfRk9STUFUICIsICVkIGJwcyIsIGluY2FwcywgYnBzKTsKLQotICBpZiAocmF0ZSAhPSBzY2FsZXRlbXBvLT5zYW1wbGVfcmF0ZQotICAgICAgfHwgbmNoICE9IHNjYWxldGVtcG8tPnNhbXBsZXNfcGVyX2ZyYW1lCi0gICAgICB8fCBicHMgIT0gc2NhbGV0ZW1wby0+Ynl0ZXNfcGVyX3NhbXBsZSB8fCBmb3JtYXQgIT0gc2NhbGV0ZW1wby0+Zm9ybWF0KSB7Ci0gICAgc2NhbGV0ZW1wby0+c2FtcGxlX3JhdGUgPSByYXRlOwotICAgIHNjYWxldGVtcG8tPnNhbXBsZXNfcGVyX2ZyYW1lID0gbmNoOwotICAgIHNjYWxldGVtcG8tPmJ5dGVzX3Blcl9zYW1wbGUgPSBicHM7Ci0gICAgc2NhbGV0ZW1wby0+Ynl0ZXNfcGVyX2ZyYW1lID0gbmNoICogYnBzOwotICAgIHNjYWxldGVtcG8tPmZvcm1hdCA9IGZvcm1hdDsKLSAgICBzY2FsZXRlbXBvLT5yZWluaXRfYnVmZmVycyA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2NhbGV0ZW1wb19zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RTY2FsZXRlbXBvICpzY2FsZXRlbXBvID0gR1NUX1NDQUxFVEVNUE8gKHRyYW5zKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2NhbGV0ZW1wby0+aW5fc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2NhbGV0ZW1wby0+b3V0X3NlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgc2NhbGV0ZW1wby0+cmVpbml0X2J1ZmZlcnMgPSBUUlVFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zY2FsZXRlbXBvX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0U2NhbGV0ZW1wbyAqc2NhbGV0ZW1wbyA9IEdTVF9TQ0FMRVRFTVBPICh0cmFucyk7Ci0KLSAgZ19mcmVlIChzY2FsZXRlbXBvLT5idWZfcXVldWUpOwotICBzY2FsZXRlbXBvLT5idWZfcXVldWUgPSBOVUxMOwotICBnX2ZyZWUgKHNjYWxldGVtcG8tPmJ1Zl9vdmVybGFwKTsKLSAgc2NhbGV0ZW1wby0+YnVmX292ZXJsYXAgPSBOVUxMOwotICBnX2ZyZWUgKHNjYWxldGVtcG8tPnRhYmxlX2JsZW5kKTsKLSAgc2NhbGV0ZW1wby0+dGFibGVfYmxlbmQgPSBOVUxMOwotICBnX2ZyZWUgKHNjYWxldGVtcG8tPmJ1Zl9wcmVfY29ycik7Ci0gIHNjYWxldGVtcG8tPmJ1Zl9wcmVfY29yciA9IE5VTEw7Ci0gIGdfZnJlZSAoc2NhbGV0ZW1wby0+dGFibGVfd2luZG93KTsKLSAgc2NhbGV0ZW1wby0+dGFibGVfd2luZG93ID0gTlVMTDsKLSAgc2NhbGV0ZW1wby0+cmVpbml0X2J1ZmZlcnMgPSBUUlVFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zY2FsZXRlbXBvX3F1ZXJ5IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0U2NhbGV0ZW1wbyAqc2NhbGV0ZW1wbyA9IEdTVF9TQ0FMRVRFTVBPICh0cmFucyk7Ci0KLSAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgewotICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWTp7Ci0gICAgICAgIEdzdFBhZCAqcGVlcjsKLQotICAgICAgICBpZiAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQgKHRyYW5zKSkpKSB7Ci0gICAgICAgICAgaWYgKChnc3RfcGFkX3F1ZXJ5IChwZWVyLCBxdWVyeSkpKSB7Ci0gICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWluLCBtYXg7Ci0gICAgICAgICAgICBnYm9vbGVhbiBsaXZlOwotCi0gICAgICAgICAgICBnc3RfcXVlcnlfcGFyc2VfbGF0ZW5jeSAocXVlcnksICZsaXZlLCAmbWluLCAmbWF4KTsKLQotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2NhbGV0ZW1wbywgIlBlZXIgbGF0ZW5jeTogbWluICUiCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW4pLCBHU1RfVElNRV9BUkdTIChtYXgpKTsKLQotICAgICAgICAgICAgLyogYWRkIG91ciBvd24gbGF0ZW5jeSAqLwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2NhbGV0ZW1wbywgIk91ciBsYXRlbmN5OiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2NhbGV0ZW1wby0+bGF0ZW5jeSkpOwotICAgICAgICAgICAgbWluICs9IHNjYWxldGVtcG8tPmxhdGVuY3k7Ci0gICAgICAgICAgICBpZiAobWF4ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgICAgICAgIG1heCArPSBzY2FsZXRlbXBvLT5sYXRlbmN5OwotCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzY2FsZXRlbXBvLCAiQ2FsY3VsYXRlZCB0b3RhbCBsYXRlbmN5IDogbWluICUiCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW4pLCBHU1RfVElNRV9BUkdTIChtYXgpKTsKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbiwgbWF4KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6ewotICAgICAgICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAodHJhbnMsIGRpcmVjdGlvbiwKLSAgICAgICAgICAgIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKHRyYW5zLCBkaXJlY3Rpb24sCi0gICAgICAgIHF1ZXJ5KTsKLSAgfQotfQotCi0vKiBHT2JqZWN0IHZtZXRob2QgaW1wbGVtZW50YXRpb25zICovCi1zdGF0aWMgdm9pZAotZ3N0X3NjYWxldGVtcG9fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNjYWxldGVtcG8gKnNjYWxldGVtcG8gPSBHU1RfU0NBTEVURU1QTyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUkFURToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNjYWxldGVtcG8tPnNjYWxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJJREU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2NhbGV0ZW1wby0+bXNfc3RyaWRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9PVkVSTEFQOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgc2NhbGV0ZW1wby0+cGVyY2VudF9vdmVybGFwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TRUFSQ0g6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2NhbGV0ZW1wby0+bXNfc2VhcmNoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zY2FsZXRlbXBvX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTY2FsZXRlbXBvICpzY2FsZXRlbXBvID0gR1NUX1NDQUxFVEVNUE8gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NUUklERTp7Ci0gICAgICBndWludCBuZXdfdmFsdWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBpZiAoc2NhbGV0ZW1wby0+bXNfc3RyaWRlICE9IG5ld192YWx1ZSkgewotICAgICAgICBzY2FsZXRlbXBvLT5tc19zdHJpZGUgPSBuZXdfdmFsdWU7Ci0gICAgICAgIHNjYWxldGVtcG8tPnJlaW5pdF9idWZmZXJzID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfT1ZFUkxBUDp7Ci0gICAgICBnZG91YmxlIG5ld192YWx1ZSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgaWYgKHNjYWxldGVtcG8tPnBlcmNlbnRfb3ZlcmxhcCAhPSBuZXdfdmFsdWUpIHsKLSAgICAgICAgc2NhbGV0ZW1wby0+cGVyY2VudF9vdmVybGFwID0gbmV3X3ZhbHVlOwotICAgICAgICBzY2FsZXRlbXBvLT5yZWluaXRfYnVmZmVycyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NFQVJDSDp7Ci0gICAgICBndWludCBuZXdfdmFsdWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBpZiAoc2NhbGV0ZW1wby0+bXNfc2VhcmNoICE9IG5ld192YWx1ZSkgewotICAgICAgICBzY2FsZXRlbXBvLT5tc19zZWFyY2ggPSBuZXdfdmFsdWU7Ci0gICAgICAgIHNjYWxldGVtcG8tPnJlaW5pdF9idWZmZXJzID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2NhbGV0ZW1wb19jbGFzc19pbml0IChHc3RTY2FsZXRlbXBvQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpiYXNldHJhbnNmb3JtX2NsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zY2FsZXRlbXBvX2dldF9wcm9wZXJ0eSk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2NhbGV0ZW1wb19zZXRfcHJvcGVydHkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJyYXRlIiwgIlBsYXliYWNrIFJhdGUiLCAiQ3VycmVudCBwbGF5YmFjayByYXRlIiwKLSAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIDEuMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUUklERSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgic3RyaWRlIiwgIlN0cmlkZSBMZW5ndGgiLAotICAgICAgICAgICJMZW5ndGggaW4gbWlsbGlzZWNvbmRzIHRvIG91dHB1dCBlYWNoIHN0cmlkZSIsIDEsIDUwMDAsIDMwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfT1ZFUkxBUCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJvdmVybGFwIiwgIk92ZXJsYXAgTGVuZ3RoIiwKLSAgICAgICAgICAiUGVyY2VudGFnZSBvZiBzdHJpZGUgdG8gb3ZlcmxhcCIsIDAsIDEsIC4yLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0VBUkNILAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJzZWFyY2giLCAiU2VhcmNoIExlbmd0aCIsCi0gICAgICAgICAgIkxlbmd0aCBpbiBtaWxsaXNlY29uZHMgdG8gc2VhcmNoIGZvciBiZXN0IG92ZXJsYXAgcG9zaXRpb24iLCAwLCA1MDAsCi0gICAgICAgICAgMTQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlNjYWxldGVtcG8iLAotICAgICAgIkZpbHRlci9FZmZlY3QvUmF0ZSIsCi0gICAgICAiU3luYyBhdWRpbyB0ZW1wbyB3aXRoIHBsYXliYWNrIHJhdGUiLAotICAgICAgIlJvdiBKdXZhbm8gPHJvdmp1dmFub0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7Ci0KLSAgYmFzZXRyYW5zZm9ybV9jbGFzcy0+c2lua19ldmVudCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NjYWxldGVtcG9fc2lua19ldmVudCk7Ci0gIGJhc2V0cmFuc2Zvcm1fY2xhc3MtPnNldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zY2FsZXRlbXBvX3NldF9jYXBzKTsKLSAgYmFzZXRyYW5zZm9ybV9jbGFzcy0+dHJhbnNmb3JtX3NpemUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zY2FsZXRlbXBvX3RyYW5zZm9ybV9zaXplKTsKLSAgYmFzZXRyYW5zZm9ybV9jbGFzcy0+dHJhbnNmb3JtID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zY2FsZXRlbXBvX3RyYW5zZm9ybSk7Ci0gIGJhc2V0cmFuc2Zvcm1fY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zY2FsZXRlbXBvX3F1ZXJ5KTsKLSAgYmFzZXRyYW5zZm9ybV9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NjYWxldGVtcG9fc3RhcnQpOwotICBiYXNldHJhbnNmb3JtX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zY2FsZXRlbXBvX3N0b3ApOwotICBiYXNldHJhbnNmb3JtX2NsYXNzLT5zdWJtaXRfaW5wdXRfYnVmZmVyID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2NhbGV0ZW1wb19zdWJtaXRfaW5wdXRfYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zY2FsZXRlbXBvX2luaXQgKEdzdFNjYWxldGVtcG8gKiBzY2FsZXRlbXBvKQotewotICAvKiBkZWZhdWx0cyAqLwotICBzY2FsZXRlbXBvLT5tc19zdHJpZGUgPSAzMDsKLSAgc2NhbGV0ZW1wby0+cGVyY2VudF9vdmVybGFwID0gLjI7Ci0gIHNjYWxldGVtcG8tPm1zX3NlYXJjaCA9IDE0OwotCi0gIC8qIHVuaW5pdGlhbGl6ZWQgKi8KLSAgc2NhbGV0ZW1wby0+c2NhbGUgPSAwOwotICBzY2FsZXRlbXBvLT5zYW1wbGVfcmF0ZSA9IDA7Ci0gIHNjYWxldGVtcG8tPmZyYW1lc19zdHJpZGVfZXJyb3IgPSAwOwotICBzY2FsZXRlbXBvLT5ieXRlc19zdHJpZGUgPSAwOwotICBzY2FsZXRlbXBvLT5ieXRlc19xdWV1ZWQgPSAwOwotICBzY2FsZXRlbXBvLT5ieXRlc190b19zbGlkZSA9IDA7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzY2FsZXRlbXBvLT5pbl9zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzY2FsZXRlbXBvLT5vdXRfc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5oIGIvZ3N0L2F1ZGlvZngvZ3N0c2NhbGV0ZW1wby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTE4ODFkLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb2Z4L2dzdHNjYWxldGVtcG8uaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSb3YgSnV2YW5vIDxyb3ZqdXZhbm9AdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfU0NBTEVURU1QT19IX18KLSNkZWZpbmUgX19HU1RfU0NBTEVURU1QT19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TQ0FMRVRFTVBPICAgICAgICAgICAgKGdzdF9zY2FsZXRlbXBvX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TQ0FMRVRFTVBPKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdTVF9UWVBFX1NDQUxFVEVNUE8sIEdzdFNjYWxldGVtcG8pKQotI2RlZmluZSBHU1RfU0NBTEVURU1QT19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBHU1RfVFlQRV9TQ0FMRVRFTVBPLCBHc3RTY2FsZXRlbXBvQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU0NBTEVURU1QTyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHU1RfVFlQRV9TQ0FMRVRFTVBPKSkKLSNkZWZpbmUgR1NUX0lTX1NDQUxFVEVNUE9fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgR1NUX1RZUEVfU0NBTEVURU1QTykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTY2FsZXRlbXBvIEdzdFNjYWxldGVtcG87Ci10eXBlZGVmIHN0cnVjdCBfR3N0U2NhbGV0ZW1wb0NsYXNzIEdzdFNjYWxldGVtcG9DbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTY2FsZXRlbXBvUHJpdmF0ZSBHc3RTY2FsZXRlbXBvUHJpdmF0ZTsKLQotc3RydWN0IF9Hc3RTY2FsZXRlbXBvCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gZWxlbWVudDsKLQotICBnZG91YmxlIHNjYWxlOwotICBnYm9vbGVhbiByZXZlcnNlOwotCi0gIC8qIHBhcmFtZXRlcnMgKi8KLSAgZ3VpbnQgbXNfc3RyaWRlOwotICBnZG91YmxlIHBlcmNlbnRfb3ZlcmxhcDsKLSAgZ3VpbnQgbXNfc2VhcmNoOwotCi0gIC8qIGNhcHMgKi8KLSAgR3N0QXVkaW9Gb3JtYXQgZm9ybWF0OwotICBndWludCBzYW1wbGVzX3Blcl9mcmFtZTsgICAgICAvKiBBS0EgbnVtYmVyIG9mIGNoYW5uZWxzICovCi0gIGd1aW50IGJ5dGVzX3Blcl9zYW1wbGU7Ci0gIGd1aW50IGJ5dGVzX3Blcl9mcmFtZTsKLSAgZ3VpbnQgc2FtcGxlX3JhdGU7Ci0KLSAgLyogc3RyaWRlICovCi0gIGdkb3VibGUgZnJhbWVzX3N0cmlkZV9zY2FsZWQ7Ci0gIGdkb3VibGUgZnJhbWVzX3N0cmlkZV9lcnJvcjsKLSAgZ3VpbnQgYnl0ZXNfc3RyaWRlOwotICBnZG91YmxlIGJ5dGVzX3N0cmlkZV9zY2FsZWQ7Ci0gIGd1aW50IGJ5dGVzX3F1ZXVlX21heDsKLSAgZ3VpbnQgYnl0ZXNfcXVldWVkOwotICBndWludCBieXRlc190b19zbGlkZTsKLSAgZ2ludDggKmJ1Zl9xdWV1ZTsKLQotICAvKiBvdmVybGFwICovCi0gIGd1aW50IHNhbXBsZXNfb3ZlcmxhcDsKLSAgZ3VpbnQgc2FtcGxlc19zdGFuZGluZzsKLSAgZ3VpbnQgYnl0ZXNfb3ZlcmxhcDsKLSAgZ3VpbnQgYnl0ZXNfc3RhbmRpbmc7Ci0gIGdwb2ludGVyIGJ1Zl9vdmVybGFwOwotICBncG9pbnRlciB0YWJsZV9ibGVuZDsKLSAgdm9pZCAoKm91dHB1dF9vdmVybGFwKSAoR3N0U2NhbGV0ZW1wbyAqIHNjYWxldGVtcG8sIGdwb2ludGVyIG91dF9idWYsIGd1aW50IGJ5dGVzX29mZik7Ci0KLSAgLyogYmVzdCBvdmVybGFwICovCi0gIGd1aW50IGZyYW1lc19zZWFyY2g7Ci0gIGdwb2ludGVyIGJ1Zl9wcmVfY29ycjsKLSAgZ3BvaW50ZXIgdGFibGVfd2luZG93OwotICBndWludCAoKmJlc3Rfb3ZlcmxhcF9vZmZzZXQpIChHc3RTY2FsZXRlbXBvICogc2NhbGV0ZW1wbyk7Ci0KLSAgLyogZ3N0cmVhbWVyICovCi0gIEdzdFNlZ21lbnQgaW5fc2VnbWVudCwgb3V0X3NlZ21lbnQ7Ci0gIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gIC8qIHRocmVhZHMgKi8KLSAgZ2Jvb2xlYW4gcmVpbml0X2J1ZmZlcnM7Ci19OwotCi1zdHJ1Y3QgX0dzdFNjYWxldGVtcG9DbGFzcwotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3NjYWxldGVtcG9fZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1NDQUxFVEVNUE9fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9meC9tYXRoX2NvbXBhdC5oIGIvZ3N0L2F1ZGlvZngvbWF0aF9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyMzcwYy4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9meC9tYXRoX2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyogCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX01BVEhfQ09NUEFUX0hfXwotI2RlZmluZSBfX01BVEhfQ09NUEFUX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaWZuZGVmIEhBVkVfQVNJTkgKLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotYXNpbmggKGdkb3VibGUgeCkKLXsKLSAgcmV0dXJuIGxvZyh4ICsgc3FydCAoeCAqIHggKyAxKSk7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX1NJTkgKLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotc2luaCAoZ2RvdWJsZSB4KQotewotICByZXR1cm4gMC41ICogKGV4cCAoeCkgLSBleHAgKC14KSk7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0NPU0gKLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotY29zaCAoZ2RvdWJsZSB4KQotewotICByZXR1cm4gMC41ICogKGV4cCAoeCkgKyBleHAgKC14KSk7Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fTUFUSF9DT01QQVRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmFtIGIvZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJiMmE0ZC4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YXVkaW9wYXJzZXJzLmxhCi0KLWxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9TT1VSQ0VTID0gXAotCWdzdGFhY3BhcnNlLmMgZ3N0YW1ycGFyc2UuYyBnc3RhYzNwYXJzZS5jIFwKLQlnc3RkY2FwYXJzZS5jIGdzdGZsYWNwYXJzZS5jIGdzdG1wZWdhdWRpb3BhcnNlLmMgXAotCWdzdHNiY3BhcnNlLmMgZ3N0d2F2cGFja3BhcnNlLmMgcGx1Z2luLmMKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQkFERCA9IFwKLQktbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctJChHU1RfQVBJX1ZFUlNJT04pIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGFhY3BhcnNlLmggZ3N0YW1ycGFyc2UuaCBnc3RhYzNwYXJzZS5oIFwKLQlnc3RkY2FwYXJzZS5oIGdzdGZsYWNwYXJzZS5oIGdzdG1wZWdhdWRpb3BhcnNlLmggZ3N0c2JjcGFyc2UuaCBcCi0JZ3N0d2F2cGFja3BhcnNlLmgKZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuaW4gYi9nc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2U3NWM1Li4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5OTYgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2F1ZGlvcGFyc2VycwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGF1ZGlvcGFyc2Vyc19sYV9PQkpFQ1RTID0gIFwKLQlsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YWFjcGFyc2UubG8gXAotCWxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhbXJwYXJzZS5sbyBcCi0JbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFjM3BhcnNlLmxvIFwKLQlsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZGNhcGFyc2UubG8gXAotCWxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RmbGFjcGFyc2UubG8gXAotCWxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RtcGVnYXVkaW9wYXJzZS5sbyBcCi0JbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdHNiY3BhcnNlLmxvIFwKLQlsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0d2F2cGFja3BhcnNlLmxvIFwKLQlsaWJnc3RhdWRpb3BhcnNlcnNfbGEtcGx1Z2luLmxvCi1saWJnc3RhdWRpb3BhcnNlcnNfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0YXVkaW9wYXJzZXJzX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RhdWRpb3BhcnNlcnNfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YXVkaW9wYXJzZXJzLmxhCi1saWJnc3RhdWRpb3BhcnNlcnNfbGFfU09VUkNFUyA9IFwKLQlnc3RhYWNwYXJzZS5jIGdzdGFtcnBhcnNlLmMgZ3N0YWMzcGFyc2UuYyBcCi0JZ3N0ZGNhcGFyc2UuYyBnc3RmbGFjcGFyc2UuYyBnc3RtcGVnYXVkaW9wYXJzZS5jIFwKLQlnc3RzYmNwYXJzZS5jIGdzdHdhdnBhY2twYXJzZS5jIHBsdWdpbi5jCi0KLWxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQkFERCA9IFwKLQktbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctJChHU1RfQVBJX1ZFUlNJT04pIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotCi1saWJnc3RhdWRpb3BhcnNlcnNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGFhY3BhcnNlLmggZ3N0YW1ycGFyc2UuaCBnc3RhYzNwYXJzZS5oIFwKLQlnc3RkY2FwYXJzZS5oIGdzdGZsYWNwYXJzZS5oIGdzdG1wZWdhdWRpb3BhcnNlLmggZ3N0c2JjcGFyc2UuaCBcCi0JZ3N0d2F2cGFja3BhcnNlLmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1ZGlvcGFyc2Vycy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvYXVkaW9wYXJzZXJzL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0YXVkaW9wYXJzZXJzLmxhOiAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9PQkpFQ1RTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0YXVkaW9wYXJzZXJzX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9PQkpFQ1RTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhYWNwYXJzZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhYzNwYXJzZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhbXJwYXJzZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RkY2FwYXJzZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RmbGFjcGFyc2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0bXBlZ2F1ZGlvcGFyc2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0c2JjcGFyc2UuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0d2F2cGFja3BhcnNlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLXBsdWdpbi5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFhY3BhcnNlLmxvOiBnc3RhYWNwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFhY3BhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YWFjcGFyc2UuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhYWNwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0YWFjcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWFjcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFhY3BhcnNlLlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFhY3BhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFhY3BhcnNlLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFhY3BhcnNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YWFjcGFyc2UubG8gYHRlc3QgLWYgJ2dzdGFhY3BhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFhY3BhcnNlLmMKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFtcnBhcnNlLmxvOiBnc3RhbXJwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFtcnBhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YW1ycGFyc2UuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhbXJwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0YW1ycGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YW1ycGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFtcnBhcnNlLlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFtcnBhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFtcnBhcnNlLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFtcnBhcnNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YW1ycGFyc2UubG8gYHRlc3QgLWYgJ2dzdGFtcnBhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFtcnBhcnNlLmMKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFjM3BhcnNlLmxvOiBnc3RhYzNwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFjM3BhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YWMzcGFyc2UuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RhYzNwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0YWMzcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWMzcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFjM3BhcnNlLlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFjM3BhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFjM3BhcnNlLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGFjM3BhcnNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0YWMzcGFyc2UubG8gYHRlc3QgLWYgJ2dzdGFjM3BhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFjM3BhcnNlLmMKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGRjYXBhcnNlLmxvOiBnc3RkY2FwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGRjYXBhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZGNhcGFyc2UuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RkY2FwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0ZGNhcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGNhcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGRjYXBhcnNlLlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGRjYXBhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGRjYXBhcnNlLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGRjYXBhcnNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZGNhcGFyc2UubG8gYHRlc3QgLWYgJ2dzdGRjYXBhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRjYXBhcnNlLmMKLQotbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdGZsYWNwYXJzZS5sbzogZ3N0ZmxhY3BhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZmxhY3BhcnNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZmxhY3BhcnNlLlRwbyAtYyAtbyBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZmxhY3BhcnNlLmxvIGB0ZXN0IC1mICdnc3RmbGFjcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZmxhY3BhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RmbGFjcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0ZmxhY3BhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZsYWNwYXJzZS5jJyBvYmplY3Q9J2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RmbGFjcGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RmbGFjcGFyc2UubG8gYHRlc3QgLWYgJ2dzdGZsYWNwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbGFjcGFyc2UuYwotCi1saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0bXBlZ2F1ZGlvcGFyc2UubG86IGdzdG1wZWdhdWRpb3BhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0bXBlZ2F1ZGlvcGFyc2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RtcGVnYXVkaW9wYXJzZS5UcG8gLWMgLW8gbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdG1wZWdhdWRpb3BhcnNlLmxvIGB0ZXN0IC1mICdnc3RtcGVnYXVkaW9wYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtcGVnYXVkaW9wYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0bXBlZ2F1ZGlvcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0bXBlZ2F1ZGlvcGFyc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bXBlZ2F1ZGlvcGFyc2UuYycgb2JqZWN0PSdsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0bXBlZ2F1ZGlvcGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RtcGVnYXVkaW9wYXJzZS5sbyBgdGVzdCAtZiAnZ3N0bXBlZ2F1ZGlvcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bXBlZ2F1ZGlvcGFyc2UuYwotCi1saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0c2JjcGFyc2UubG86IGdzdHNiY3BhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0c2JjcGFyc2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RzYmNwYXJzZS5UcG8gLWMgLW8gbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdHNiY3BhcnNlLmxvIGB0ZXN0IC1mICdnc3RzYmNwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzYmNwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0c2JjcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0c2JjcGFyc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c2JjcGFyc2UuYycgb2JqZWN0PSdsaWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0c2JjcGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3RzYmNwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0c2JjcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c2JjcGFyc2UuYwotCi1saWJnc3RhdWRpb3BhcnNlcnNfbGEtZ3N0d2F2cGFja3BhcnNlLmxvOiBnc3R3YXZwYWNrcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3R3YXZwYWNrcGFyc2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3R3YXZwYWNrcGFyc2UuVHBvIC1jIC1vIGxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3R3YXZwYWNrcGFyc2UubG8gYHRlc3QgLWYgJ2dzdHdhdnBhY2twYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZwYWNrcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdHdhdnBhY2twYXJzZS5UcG8gJChERVBESVIpL2xpYmdzdGF1ZGlvcGFyc2Vyc19sYS1nc3R3YXZwYWNrcGFyc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0d2F2cGFja3BhcnNlLmMnIG9iamVjdD0nbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdHdhdnBhY2twYXJzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdWRpb3BhcnNlcnNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXVkaW9wYXJzZXJzX2xhLWdzdHdhdnBhY2twYXJzZS5sbyBgdGVzdCAtZiAnZ3N0d2F2cGFja3BhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhdnBhY2twYXJzZS5jCi0KLWxpYmdzdGF1ZGlvcGFyc2Vyc19sYS1wbHVnaW4ubG86IHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXVkaW9wYXJzZXJzX2xhLXBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLXBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0YXVkaW9wYXJzZXJzX2xhLXBsdWdpbi5sbyBgdGVzdCAtZiAncGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdWRpb3BhcnNlcnNfbGEtcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0YXVkaW9wYXJzZXJzX2xhLXBsdWdpbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwbHVnaW4uYycgb2JqZWN0PSdsaWJnc3RhdWRpb3BhcnNlcnNfbGEtcGx1Z2luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXVkaW9wYXJzZXJzX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1ZGlvcGFyc2Vyc19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdWRpb3BhcnNlcnNfbGEtcGx1Z2luLmxvIGB0ZXN0IC1mICdwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGx1Z2luLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jIGIvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzU2MTZhLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0YWFjcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NDYgKzAsMCBAQAotLyogR1N0cmVhbWVyIEFBQyBwYXJzZXIgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hYWNwYXJzZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBQUMgcGFyc2VyCi0gKiBAc2VlX2Fsc286ICNHc3RBbXJQYXJzZQotICoKLSAqIFRoaXMgaXMgYW4gQUFDIHBhcnNlciB3aGljaCBoYW5kbGVzIGJvdGggQURJRiBhbmQgQURUUyBzdHJlYW0gZm9ybWF0cy4KLSAqCi0gKiBBcyBBRElGIGZvcm1hdCBpcyBub3QgZnJhbWVkLCBpdCBpcyBub3Qgc2Vla2FibGUgYW5kIHN0cmVhbSBkdXJhdGlvbiBjYW5ub3QKLSAqIGJlIGRldGVybWluZWQgZWl0aGVyLiBIb3dldmVyLCBBRFRTIGZvcm1hdCBBQUMgY2xpcHMgY2FuIGJlIHNlZWtlZCwgYW5kIHBhcnNlcgotICogY2FuIGFsc28gZXN0aW1hdGUgcGxheWJhY2sgcG9zaXRpb24gYW5kIGNsaXAgZHVyYXRpb24uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249YWJjLmFhYyAhIGFhY3BhcnNlICEgZmFhZCAhIGF1ZGlvcmVzYW1wbGUgISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+Ci0jaW5jbHVkZSAiZ3N0YWFjcGFyc2UuaCIKLQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL21wZWcsICIKLSAgICAgICAgImZyYW1lZCA9IChib29sZWFuKSB0cnVlLCAiICJtcGVndmVyc2lvbiA9IChpbnQpIHsgMiwgNCB9LCAiCi0gICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgeyByYXcsIGFkdHMsIGFkaWYsIGxvYXMgfTsiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb24gPSAoaW50KSB7IDIsIDQgfTsiKSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGFhY3BhcnNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGFhY3BhcnNlX2RlYnVnCi0KLQotI2RlZmluZSBBRElGX01BWF9TSVpFIDQwICAgICAgICAvKiBTaG91bGQgYmUgZW5vdWdoICovCi0jZGVmaW5lIEFEVFNfTUFYX1NJWkUgMTAgICAgICAgIC8qIFNob3VsZCBiZSBlbm91Z2ggKi8KLSNkZWZpbmUgTE9BU19NQVhfU0laRSAzICAgICAgICAgLyogU2hvdWxkIGJlIGVub3VnaCAqLwotCi0jZGVmaW5lIEFEVFNfSEVBREVSU19MRU5HVEggN1VMIC8qIFRvdGFsIGJ5dGUtbGVuZ3RoIG9mIGZpeGVkIGFuZCB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIHByZXBlbmRlZCBkdXJpbmcgcmF3IHRvIEFEVFMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbiAqLwotCi0jZGVmaW5lIEFBQ19GUkFNRV9EVVJBVElPTihwYXJzZSkgKEdTVF9TRUNPTkQvcGFyc2UtPmZyYW1lc19wZXJfc2VjKQotCi1zdGF0aWMgY29uc3QgZ2ludCBsb2FzX3NhbXBsZV9yYXRlX3RhYmxlWzE2XSA9IHsKLSAgOTYwMDAsIDg4MjAwLCA2NDAwMCwgNDgwMDAsIDQ0MTAwLCAzMjAwMCwgMjQwMDAsIDIyMDUwLAotICAxNjAwMCwgMTIwMDAsIDExMDI1LCA4MDAwLCA3MzUwLCAwLCAwLCAwCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCBsb2FzX2NoYW5uZWxzX3RhYmxlWzE2XSA9IHsKLSAgMCwgMSwgMiwgMywgNCwgNSwgNiwgOCwKLSAgMCwgMCwgMCwgNywgOCwgMCwgOCwgMAotfTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hYWNfcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYWFjX3BhcnNlX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hYWNfcGFyc2Vfc2lua19zZXRjYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2FhY19wYXJzZV9zaW5rX2dldGNhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfYWFjX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hYWNfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpOwotc3RhdGljIGdib29sZWFuIGdzdF9hYWNfcGFyc2Vfc3JjX2V2ZW50IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotI2RlZmluZSBnc3RfYWFjX3BhcnNlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEFhY1BhcnNlLCBnc3RfYWFjX3BhcnNlLCBHU1RfVFlQRV9CQVNFX1BBUlNFKTsKLQotLyoqCi0gKiBnc3RfYWFjX3BhcnNlX2NsYXNzX2luaXQ6Ci0gKiBAa2xhc3M6ICNHc3RBYWNQYXJzZUNsYXNzLgotICoKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9hYWNfcGFyc2VfY2xhc3NfaW5pdCAoR3N0QWFjUGFyc2VDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHc3RCYXNlUGFyc2VDbGFzcyAqcGFyc2VfY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChhYWNwYXJzZV9kZWJ1ZywgImFhY3BhcnNlIiwgMCwKLSAgICAgICJBQUMgYXVkaW8gc3RyZWFtIHBhcnNlciIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIkFBQyBhdWRpbyBzdHJlYW0gcGFyc2VyIiwgIkNvZGVjL1BhcnNlci9BdWRpbyIsCi0gICAgICAiQWR2YW5jZWQgQXVkaW8gQ29kaW5nIHBhcnNlciIsICJTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPiIpOwotCi0gIHBhcnNlX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWFjX3BhcnNlX3N0YXJ0KTsKLSAgcGFyc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FhY19wYXJzZV9zdG9wKTsKLSAgcGFyc2VfY2xhc3MtPnNldF9zaW5rX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FhY19wYXJzZV9zaW5rX3NldGNhcHMpOwotICBwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWFjX3BhcnNlX3NpbmtfZ2V0Y2Fwcyk7Ci0gIHBhcnNlX2NsYXNzLT5oYW5kbGVfZnJhbWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FhY19wYXJzZV9oYW5kbGVfZnJhbWUpOwotICBwYXJzZV9jbGFzcy0+cHJlX3B1c2hfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYWNfcGFyc2VfcHJlX3B1c2hfZnJhbWUpOwotICBwYXJzZV9jbGFzcy0+c3JjX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYWNfcGFyc2Vfc3JjX2V2ZW50KTsKLX0KLQotCi0vKioKLSAqIGdzdF9hYWNfcGFyc2VfaW5pdDoKLSAqIEBhYWNwYXJzZTogI0dzdEFhY1BhcnNlLgotICogQGtsYXNzOiAjR3N0QWFjUGFyc2VDbGFzcy4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYWFjX3BhcnNlX2luaXQgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UpCi17Ci0gIEdTVF9ERUJVRyAoImluaXRpYWxpemVkIik7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChhYWNwYXJzZSkpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChhYWNwYXJzZSkpOwotCi0gIGFhY3BhcnNlLT5sYXN0X3BhcnNlZF9zYW1wbGVfcmF0ZSA9IDA7Ci0gIGFhY3BhcnNlLT5sYXN0X3BhcnNlZF9jaGFubmVscyA9IDA7Ci19Ci0KLQotLyoqCi0gKiBnc3RfYWFjX3BhcnNlX3NldF9zcmNfY2FwczoKLSAqIEBhYWNwYXJzZTogI0dzdEFhY1BhcnNlLgotICogQHNpbmtfY2FwczogKHByb3Bvc2VkKSBjYXBzIG9mIHNpbmsgcGFkCi0gKgotICogU2V0IHNvdXJjZSBwYWQgY2FwcyBhY2NvcmRpbmcgdG8gY3VycmVudCBrbm93bGVkZ2UgYWJvdXQgdGhlCi0gKiBhdWRpbyBzdHJlYW0uCi0gKgotICogUmV0dXJuczogVFJVRSBpZiBjYXBzIHdlcmUgc3VjY2Vzc2Z1bGx5IHNldC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYWFjX3BhcnNlX3NldF9zcmNfY2FwcyAoR3N0QWFjUGFyc2UgKiBhYWNwYXJzZSwgR3N0Q2FwcyAqIHNpbmtfY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RDYXBzICpzcmNfY2FwcyA9IE5VTEwsICphbGxvd2VkOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgY29uc3QgZ2NoYXIgKnN0cmVhbV9mb3JtYXQ7Ci0gIGd1aW50OCBjb2RlY19kYXRhWzJdOwotICBndWludDE2IGNvZGVjX2RhdGFfZGF0YTsKLSAgZ2ludCBzYW1wbGVfcmF0ZV9pZHg7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYWFjcGFyc2UsICJzaW5rIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBzaW5rX2NhcHMpOwotICBpZiAoc2lua19jYXBzKQotICAgIHNyY19jYXBzID0gZ3N0X2NhcHNfY29weSAoc2lua19jYXBzKTsKLSAgZWxzZQotICAgIHNyY19jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL21wZWciKTsKLQotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzcmNfY2FwcywgImZyYW1lZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgYWFjcGFyc2UtPm1wZWd2ZXJzaW9uLCBOVUxMKTsKLQotICBhYWNwYXJzZS0+b3V0cHV0X2hlYWRlcl90eXBlID0gYWFjcGFyc2UtPmhlYWRlcl90eXBlOwotICBzd2l0Y2ggKGFhY3BhcnNlLT5oZWFkZXJfdHlwZSkgewotICAgIGNhc2UgRFNQQUFDX0hFQURFUl9OT05FOgotICAgICAgc3RyZWFtX2Zvcm1hdCA9ICJyYXciOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEU1BBQUNfSEVBREVSX0FEVFM6Ci0gICAgICBzdHJlYW1fZm9ybWF0ID0gImFkdHMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEU1BBQUNfSEVBREVSX0FESUY6Ci0gICAgICBzdHJlYW1fZm9ybWF0ID0gImFkaWYiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEU1BBQUNfSEVBREVSX0xPQVM6Ci0gICAgICBzdHJlYW1fZm9ybWF0ID0gImxvYXMiOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHN0cmVhbV9mb3JtYXQgPSBOVUxMOwotICB9Ci0KLSAgLyogR2VuZXJhdGUgY29kZWMgZGF0YSB0byBiZSBhYmxlIHRvIHNldCBwcm9maWxlL2xldmVsIG9uIHRoZSBjYXBzICovCi0gIHNhbXBsZV9yYXRlX2lkeCA9Ci0gICAgICBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9pbmRleF9mcm9tX3NhbXBsZV9yYXRlIChhYWNwYXJzZS0+c2FtcGxlX3JhdGUpOwotICBpZiAoc2FtcGxlX3JhdGVfaWR4IDwgMCkKLSAgICBnb3RvIG5vdF9hX2tub3duX3JhdGU7Ci0gIGNvZGVjX2RhdGFfZGF0YSA9Ci0gICAgICAoYWFjcGFyc2UtPm9iamVjdF90eXBlIDw8IDExKSB8Ci0gICAgICAoc2FtcGxlX3JhdGVfaWR4IDw8IDcpIHwgKGFhY3BhcnNlLT5jaGFubmVscyA8PCAzKTsKLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoY29kZWNfZGF0YSwgY29kZWNfZGF0YV9kYXRhKTsKLSAgZ3N0X2NvZGVjX3V0aWxzX2FhY19jYXBzX3NldF9sZXZlbF9hbmRfcHJvZmlsZSAoc3JjX2NhcHMsIGNvZGVjX2RhdGEsIDIpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNfY2FwcywgMCk7Ci0gIGlmIChhYWNwYXJzZS0+c2FtcGxlX3JhdGUgPiAwKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAicmF0ZSIsIEdfVFlQRV9JTlQsIGFhY3BhcnNlLT5zYW1wbGVfcmF0ZSwgTlVMTCk7Ci0gIGlmIChhYWNwYXJzZS0+Y2hhbm5lbHMgPiAwKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBhYWNwYXJzZS0+Y2hhbm5lbHMsIE5VTEwpOwotICBpZiAoc3RyZWFtX2Zvcm1hdCkKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBzdHJlYW1fZm9ybWF0LCBOVUxMKTsKLQotICBhbGxvd2VkID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChHU1RfQkFTRV9QQVJTRSAoYWFjcGFyc2UpLT5zcmNwYWQpOwotICBpZiAoYWxsb3dlZCAmJiAhZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoc3JjX2NhcHMsIGFsbG93ZWQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKS0+c3JjcGFkLAotICAgICAgICAiQ2FwcyBjYW4gbm90IGludGVyc2VjdCIpOwotICAgIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9BRFRTKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChHU1RfQkFTRV9QQVJTRSAoYWFjcGFyc2UpLT5zcmNwYWQsCi0gICAgICAgICAgIklucHV0IGlzIEFEVFMsIHRyeWluZyByYXciKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY19jYXBzLCAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJyYXciLAotICAgICAgICAgIE5VTEwpOwotICAgICAgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKHNyY19jYXBzLCBhbGxvd2VkKSkgewotICAgICAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGFfYnVmZmVyOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKEdTVF9CQVNFX1BBUlNFIChhYWNwYXJzZSktPnNyY3BhZCwKLSAgICAgICAgICAgICJDYXBzIGNhbiBpbnRlcnNlY3QsIHdlIHdpbGwgZHJvcCB0aGUgQURUUyBsYXllciIpOwotICAgICAgICBhYWNwYXJzZS0+b3V0cHV0X2hlYWRlcl90eXBlID0gRFNQQUFDX0hFQURFUl9OT05FOwotCi0gICAgICAgIC8qIFRoZSBjb2RlY19kYXRhIGRhdGEgaXMgYWNjb3JkaW5nIHRvIEF1ZGlvU3BlY2lmaWNDb25maWcsCi0gICAgICAgICAgIElTTy9JRUMgMTQ0OTYtMywgMS42LjIuMSAqLwotICAgICAgICBjb2RlY19kYXRhX2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMik7Ci0gICAgICAgIGdzdF9idWZmZXJfZmlsbCAoY29kZWNfZGF0YV9idWZmZXIsIDAsIGNvZGVjX2RhdGEsIDIpOwotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzcmNfY2FwcywgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsCi0gICAgICAgICAgICBjb2RlY19kYXRhX2J1ZmZlciwgTlVMTCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9OT05FKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChHU1RfQkFTRV9QQVJTRSAoYWFjcGFyc2UpLT5zcmNwYWQsCi0gICAgICAgICAgIklucHV0IGlzIHJhdywgdHJ5aW5nIEFEVFMiKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY19jYXBzLCAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJhZHRzIiwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGlmIChnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChzcmNfY2FwcywgYWxsb3dlZCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKS0+c3JjcGFkLAotICAgICAgICAgICAgIkNhcHMgY2FuIGludGVyc2VjdCwgd2Ugd2lsbCBwcmVwZW5kIEFEVFMgaGVhZGVycyIpOwotICAgICAgICBhYWNwYXJzZS0+b3V0cHV0X2hlYWRlcl90eXBlID0gRFNQQUFDX0hFQURFUl9BRFRTOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAoYWxsb3dlZCkKLSAgICBnc3RfY2Fwc191bnJlZiAoYWxsb3dlZCk7Ci0KLSAgYWFjcGFyc2UtPmxhc3RfcGFyc2VkX2NoYW5uZWxzID0gMDsKLSAgYWFjcGFyc2UtPmxhc3RfcGFyc2VkX3NhbXBsZV9yYXRlID0gMDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwgInNldHRpbmcgc3JjIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBzcmNfY2Fwcyk7Ci0KLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKS0+c3JjcGFkLCBzcmNfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNfY2Fwcyk7Ci0gIHJldHVybiByZXM7Ci0KLW5vdF9hX2tub3duX3JhdGU6Ci0gIEdTVF9FUlJPUl9PQkpFQ1QgKGFhY3BhcnNlLCAiTm90IGEga25vd24gc2FtcGxlIHJhdGU6ICVkIiwKLSAgICAgIGFhY3BhcnNlLT5zYW1wbGVfcmF0ZSk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNfY2Fwcyk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotCi0vKioKLSAqIGdzdF9hYWNfcGFyc2Vfc2lua19zZXRjYXBzOgotICogQHNpbmtwYWQ6IEdzdFBhZAotICogQGNhcHM6IEdzdENhcHMKLSAqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiAic2V0X3NpbmtfY2FwcyIgdm1ldGhvZCBpbiAjR3N0QmFzZVBhcnNlIGNsYXNzLgotICoKLSAqIFJldHVybnM6IFRSVUUgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYWFjX3BhcnNlX3Npbmtfc2V0Y2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RBYWNQYXJzZSAqYWFjcGFyc2U7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnY2hhciAqY2Fwc19zdHI7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgYWFjcGFyc2UgPSBHU1RfQUFDX1BBUlNFIChwYXJzZSk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBjYXBzX3N0ciA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYWFjcGFyc2UsICJzZXRjYXBzOiAlcyIsIGNhcHNfc3RyKTsKLSAgZ19mcmVlIChjYXBzX3N0cik7Ci0KLSAgLyogVGhpcyBpcyBuZWVkZWQgYXQgbGVhc3QgaW4gY2FzZSBvZiBSVFAKLSAgICogUGFyc2VzIHRoZSBjb2RlY19kYXRhIGluZm9ybWF0aW9uIHRvIGdldCBPYmplY3RUeXBlLAotICAgKiBudW1iZXIgb2YgY2hhbm5lbHMgYW5kIHNhbXBsZXJhdGUgKi8KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAiY29kZWNfZGF0YSIpOwotICBpZiAodmFsdWUpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0KLSAgICBpZiAoYnVmICYmIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPj0gMikgewotICAgICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgICBndWludCBzcl9pZHg7Ci0KLSAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICBzcl9pZHggPSAoKG1hcC5kYXRhWzBdICYgMHgwNykgPDwgMSkgfCAoKG1hcC5kYXRhWzFdICYgMHg4MCkgPj4gNyk7Ci0gICAgICBhYWNwYXJzZS0+b2JqZWN0X3R5cGUgPSAobWFwLmRhdGFbMF0gJiAweGY4KSA+PiAzOwotICAgICAgYWFjcGFyc2UtPnNhbXBsZV9yYXRlID0KLSAgICAgICAgICBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9zYW1wbGVfcmF0ZV9mcm9tX2luZGV4IChzcl9pZHgpOwotICAgICAgYWFjcGFyc2UtPmNoYW5uZWxzID0gKG1hcC5kYXRhWzFdICYgMHg3OCkgPj4gMzsKLSAgICAgIGlmIChhYWNwYXJzZS0+Y2hhbm5lbHMgPT0gNykKLSAgICAgICAgYWFjcGFyc2UtPmNoYW5uZWxzID0gODsKLSAgICAgIGVsc2UgaWYgKGFhY3BhcnNlLT5jaGFubmVscyA9PSAxMSkKLSAgICAgICAgYWFjcGFyc2UtPmNoYW5uZWxzID0gNzsKLSAgICAgIGVsc2UgaWYgKGFhY3BhcnNlLT5jaGFubmVscyA9PSAxMiB8fCBhYWNwYXJzZS0+Y2hhbm5lbHMgPT0gMTQpCi0gICAgICAgIGFhY3BhcnNlLT5jaGFubmVscyA9IDg7Ci0gICAgICBhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPSBEU1BBQUNfSEVBREVSX05PTkU7Ci0gICAgICBhYWNwYXJzZS0+bXBlZ3ZlcnNpb24gPSA0OwotICAgICAgYWFjcGFyc2UtPmZyYW1lX3NhbXBsZXMgPSAobWFwLmRhdGFbMV0gJiA0KSA/IDk2MCA6IDEwMjQ7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gICAgICBHU1RfREVCVUcgKCJjb2RlY19kYXRhOiBvYmplY3RfdHlwZT0lZCwgc2FtcGxlX3JhdGU9JWQsIGNoYW5uZWxzPSVkLCAiCi0gICAgICAgICAgInNhbXBsZXM9JWQiLCBhYWNwYXJzZS0+b2JqZWN0X3R5cGUsIGFhY3BhcnNlLT5zYW1wbGVfcmF0ZSwKLSAgICAgICAgICBhYWNwYXJzZS0+Y2hhbm5lbHMsIGFhY3BhcnNlLT5mcmFtZV9zYW1wbGVzKTsKLQotICAgICAgLyogYXJyYW5nZSBmb3IgbWV0YWRhdGEgYW5kIGdldCBvdXQgb2YgdGhlIHdheSAqLwotICAgICAgZ3N0X2FhY19wYXJzZV9zZXRfc3JjX2NhcHMgKGFhY3BhcnNlLCBjYXBzKTsKLSAgICAgIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gYWFjcGFyc2UtPm91dHB1dF9oZWFkZXJfdHlwZSkKLSAgICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3Bhc3N0aHJvdWdoIChwYXJzZSwgVFJVRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBjYXBzIGluZm8gb3ZlcnJpZGVzICovCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJyYXRlIiwgJmFhY3BhcnNlLT5zYW1wbGVfcmF0ZSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsICZhYWNwYXJzZS0+Y2hhbm5lbHMpOwotICB9IGVsc2UgewotICAgIGNvbnN0IGdjaGFyICpzdHJlYW1fZm9ybWF0ID0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzdHJlYW0tZm9ybWF0Iik7Ci0KLSAgICBpZiAoZ19zdHJjbXAwIChzdHJlYW1fZm9ybWF0LCAicmF3IikgPT0gMCkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAocGFyc2UsICJOZWVkIGNvZGVjX2RhdGEgZm9yIHJhdyBBQUMiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9IGVsc2UgewotICAgICAgYWFjcGFyc2UtPnNhbXBsZV9yYXRlID0gMDsKLSAgICAgIGFhY3BhcnNlLT5jaGFubmVscyA9IDA7Ci0gICAgICBhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPSBEU1BBQUNfSEVBREVSX05PVF9QQVJTRUQ7Ci0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfcGFzc3Rocm91Z2ggKHBhcnNlLCBGQUxTRSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qKgotICogZ3N0X2FhY19wYXJzZV9hZHRzX2dldF9mcmFtZV9sZW46Ci0gKiBAZGF0YTogYmxvY2sgb2YgZGF0YSBjb250YWluaW5nIGFuIEFEVFMgaGVhZGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBBRFRTIGZyYW1lIGxlbmd0aCBmcm9tIHRoZSBnaXZlbiBoZWFkZXIuCi0gKgotICogUmV0dXJuczogc2l6ZSBvZiB0aGUgQURUUyBmcmFtZS4KLSAqLwotc3RhdGljIGlubGluZSBndWludAotZ3N0X2FhY19wYXJzZV9hZHRzX2dldF9mcmFtZV9sZW4gKGNvbnN0IGd1aW50OCAqIGRhdGEpCi17Ci0gIHJldHVybiAoKGRhdGFbM10gJiAweDAzKSA8PCAxMSkgfCAoZGF0YVs0XSA8PCAzKSB8ICgoZGF0YVs1XSAmIDB4ZTApID4+IDUpOwotfQotCi0KLS8qKgotICogZ3N0X2FhY19wYXJzZV9jaGVja19hZHRzX2ZyYW1lOgotICogQGFhY3BhcnNlOiAjR3N0QWFjUGFyc2UuCi0gKiBAZGF0YTogRGF0YSB0byBiZSBjaGVja2VkLgotICogQGF2YWlsOiBBbW91bnQgb2YgZGF0YSBwYXNzZWQuCi0gKiBAZnJhbWVzaXplOiBJZiB2YWxpZCBBRFRTIGZyYW1lIHdhcyBmb3VuZCwgdGhpcyB3aWxsIGJlIHNldCB0byB0ZWxsIHRoZQotICogICAgICAgICAgICAgZm91bmQgZnJhbWUgc2l6ZSBpbiBieXRlcy4KLSAqIEBuZWVkZWRfZGF0YTogSWYgZnJhbWUgd2FzIG5vdCBmb3VuZCwgdGhpcyBtYXkgYmUgc2V0IHRvIHRlbGwgaG93IG11Y2gKLSAqICAgICAgICAgICAgICAgbW9yZSBkYXRhIGlzIG5lZWRlZCBpbiB0aGUgbmV4dCByb3VuZCB0byBkZXRlY3QgdGhlIGZyYW1lCi0gKiAgICAgICAgICAgICAgIHJlbGlhYmx5LiBUaGlzIG1heSBoYXBwZW4gd2hlbiBhIGZyYW1lIGhlYWRlciBjYW5kaWRhdGUKLSAqICAgICAgICAgICAgICAgaXMgZm91bmQgYnV0IGl0IGNhbm5vdCBiZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBoZWFkZXIgd2l0aG91dAotICogICAgICAgICAgICAgICBwZWVraW5nIHRoZSBmb2xsb3dpbmcgZGF0YS4KLSAqCi0gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZGF0YSBjb250YWlucyBjb250YWlucyBBRFRTIGZyYW1lLiBUaGUgYWxnb3JpdGhtCi0gKiB3aWxsIGV4YW1pbmUgQURUUyBmcmFtZSBoZWFkZXIgYW5kIGNhbGN1bGF0ZSB0aGUgZnJhbWUgc2l6ZS4gQWxzbywgYW5vdGhlcgotICogY29uc2VjdXRpdmUgQURUUyBmcmFtZSBoZWFkZXIgbmVlZCB0byBiZSBwcmVzZW50IGFmdGVyIHRoZSBmb3VuZCBmcmFtZS4KLSAqIE90aGVyd2lzZSB0aGUgZGF0YSBpcyBub3QgY29uc2lkZXJlZCBhcyBhIHZhbGlkIEFEVFMgZnJhbWUuIEhvd2V2ZXIsIHRoaXMKLSAqICJleHRyYSBjaGVjayIgaXMgb21pdHRlZCB3aGVuIEVPUyBoYXMgYmVlbiByZWNlaXZlZC4gSW4gdGhpcyBjYXNlIGl0IGlzCi0gKiBlbm91Z2ggd2hlbiBkYXRhWzBdIGNvbnRhaW5zIGEgdmFsaWQgQURUUyBoZWFkZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBtYXkgc2V0IHRoZSAjbmVlZGVkX2RhdGEgdG8gaW5kaWNhdGUgdGhhdCBhIHBvc3NpYmxlIGZyYW1lCi0gKiBjYW5kaWRhdGUgaGFzIGJlZW4gZm91bmQsIGJ1dCBtb3JlIGRhdGEgKCNuZWVkZWRfZGF0YSBieXRlcykgaXMgbmVlZGVkIHRvCi0gKiBiZSBhYnNvbHV0ZWx5IHN1cmUuIFdoZW4gdGhpcyBzaXR1YXRpb24gb2NjdXJzLCBGQUxTRSB3aWxsIGJlIHJldHVybmVkLgotICoKLSAqIFdoZW4gYSB2YWxpZCBmcmFtZSBpcyBkZXRlY3RlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHVzZQotICogZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplKCkgZnVuY3Rpb24gZnJvbSAjR3N0QmFzZVBhcnNlIGNsYXNzCi0gKiB0byBzZXQgdGhlIG5lZWRlZCBieXRlcyBmb3IgbmV4dCBmcmFtZS5UaGlzIHdheSBuZXh0IGRhdGEgY2h1bmsgaXMgYWxyZWFkeQotICogb2YgY29ycmVjdCBzaXplLgotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGdpdmVuIGRhdGEgY29udGFpbnMgYSB2YWxpZCBBRFRTIGhlYWRlci4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYWFjX3BhcnNlX2NoZWNrX2FkdHNfZnJhbWUgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UsCi0gICAgY29uc3QgZ3VpbnQ4ICogZGF0YSwgY29uc3QgZ3VpbnQgYXZhaWwsIGdib29sZWFuIGRyYWluLAotICAgIGd1aW50ICogZnJhbWVzaXplLCBndWludCAqIG5lZWRlZF9kYXRhKQotewotICBndWludCBjcmNfc2l6ZTsKLQotICAqbmVlZGVkX2RhdGEgPSAwOwotCi0gIC8qIEFic29sdXRlIG1pbmltdW0gdG8gcGVyZm9ybSB0aGUgQURUUyBzeW5jd29yZCwKLSAgICAgbGF5ZXIgYW5kIHNhbXBsaW5nIGZyZXF1ZW5jeSB0ZXN0cyAqLwotICBpZiAoR19VTkxJS0VMWSAoYXZhaWwgPCAzKSkgewotICAgICpuZWVkZWRfZGF0YSA9IDM7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogU3luY3dvcmQgYW5kIGxheWVyIHRlc3RzICovCi0gIGlmICgoZGF0YVswXSA9PSAweGZmKSAmJiAoKGRhdGFbMV0gJiAweGY2KSA9PSAweGYwKSkgewotCi0gICAgLyogU2FtcGxpbmcgZnJlcXVlbmN5IHRlc3QgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoKGRhdGFbMl0gJiAweDNDKSA+PiAyID09IDE1KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8qIFRoaXMgbG9va3MgbGlrZSBhbiBBRFRTIGZyYW1lIGhlYWRlciBidXQKLSAgICAgICB3ZSBuZWVkIGF0IGxlYXN0IDYgYnl0ZXMgdG8gcHJvY2VlZCAqLwotICAgIGlmIChHX1VOTElLRUxZIChhdmFpbCA8IDYpKSB7Ci0gICAgICAqbmVlZGVkX2RhdGEgPSA2OwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgICpmcmFtZXNpemUgPSBnc3RfYWFjX3BhcnNlX2FkdHNfZ2V0X2ZyYW1lX2xlbiAoZGF0YSk7Ci0KLSAgICAvKiBJZiBmcmFtZSBoYXMgQ1JDLCBpdCBuZWVkcyAyIGJ5dGVzCi0gICAgICAgZm9yIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlciAqLwotICAgIGNyY19zaXplID0gKGRhdGFbMV0gJiAweDAxKSA/IDAgOiAyOwotCi0gICAgLyogQ1JDIHNpemUgdGVzdCAqLwotICAgIGlmICgqZnJhbWVzaXplIDwgNyArIGNyY19zaXplKSB7Ci0gICAgICAqbmVlZGVkX2RhdGEgPSA3ICsgY3JjX3NpemU7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgLyogSW4gRU9TIG1vZGUgdGhpcyBpcyBlbm91Z2guIE5vIG5lZWQgdG8gZXhhbWluZSB0aGUgZGF0YSBmdXJ0aGVyLgotICAgICAgIFdlIGFsc28gcmVsYXggdGhlIGNoZWNrIHdoZW4gd2UgaGF2ZSBzeW5jLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0gICAgICAgaWYgd2UncmUgbm90IGxvb2tpbmcgYXQgcmFuZG9tIGRhdGEsIHdlIGhhdmUgYSBtdWNoIGhpZ2hlciBjaGFuY2UKLSAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc3luYywgYW5kIHRoaXMgYXZvaWRzIGxvc2luZyB0d28gZnJhbWVzIHdoZW4KLSAgICAgICBhIHNpbmdsZSBiaXQgY29ycnVwdGlvbiBoYXBwZW5zLiAqLwotICAgIGlmIChkcmFpbiB8fCAhR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DIChhYWNwYXJzZSkpIHsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIGlmICgqZnJhbWVzaXplICsgQURUU19NQVhfU0laRSA+IGF2YWlsKSB7Ci0gICAgICAvKiBXZSBoYXZlIGZvdW5kIGEgcG9zc2libGUgZnJhbWUgaGVhZGVyIGNhbmRpZGF0ZSwgYnV0IGNhbid0IGJlCi0gICAgICAgICBzdXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEgdG8gY2hlY2sgdGhlIG5leHQgZnJhbWUgKi8KLSAgICAgIEdTVF9ERUJVRyAoIk5FRUQgTU9SRSBEQVRBOiB3ZSBuZWVkICVkLCBhdmFpbGFibGUgJWQiLAotICAgICAgICAgICpmcmFtZXNpemUgKyBBRFRTX01BWF9TSVpFLCBhdmFpbCk7Ci0gICAgICAqbmVlZGVkX2RhdGEgPSAqZnJhbWVzaXplICsgQURUU19NQVhfU0laRTsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgICAqZnJhbWVzaXplICsgQURUU19NQVhfU0laRSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKChkYXRhWypmcmFtZXNpemVdID09IDB4ZmYpICYmICgoZGF0YVsqZnJhbWVzaXplICsgMV0gJiAweGY2KSA9PSAweGYwKSkgewotICAgICAgZ3VpbnQgbmV4dGxlbiA9IGdzdF9hYWNfcGFyc2VfYWR0c19nZXRfZnJhbWVfbGVuIChkYXRhICsgKCpmcmFtZXNpemUpKTsKLQotICAgICAgR1NUX0xPRyAoIkFEVFMgZnJhbWUgZm91bmQsIGxlbjogJWQgYnl0ZXMiLCAqZnJhbWVzaXplKTsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgICBuZXh0bGVuICsgQURUU19NQVhfU0laRSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYWNfcGFyc2VfbGF0bV9nZXRfdmFsdWUgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UsIEdzdEJpdFJlYWRlciAqIGJyLAotICAgIGd1aW50MzIgKiB2YWx1ZSkKLXsKLSAgZ3VpbnQ4IGJ5dGVzLCBpLCBieXRlOwotCi0gICp2YWx1ZSA9IDA7Ci0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKGJyLCAmYnl0ZXMsIDIpKQotICAgIHJldHVybiBGQUxTRTsKLSAgZm9yIChpID0gMDsgaSA8PSBieXRlczsgKytpKSB7Ci0gICAgKnZhbHVlIDw8PSA4OwotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKGJyLCAmYnl0ZSwgOCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgKnZhbHVlICs9IGJ5dGU7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fb2JqZWN0X3R5cGUgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UsIEdzdEJpdFJlYWRlciAqIGJyLAotICAgIGd1aW50OCAqIGF1ZGlvX29iamVjdF90eXBlKQotewotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4IChiciwgYXVkaW9fb2JqZWN0X3R5cGUsIDUpKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKCphdWRpb19vYmplY3RfdHlwZSA9PSAzMSkgewotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKGJyLCBhdWRpb19vYmplY3RfdHlwZSwgNikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgKmF1ZGlvX29iamVjdF90eXBlICs9IDMyOwotICB9Ci0gIEdTVF9MT0dfT0JKRUNUIChhYWNwYXJzZSwgImF1ZGlvIG9iamVjdCB0eXBlICV1IiwgKmF1ZGlvX29iamVjdF90eXBlKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fc2FtcGxlX3JhdGUgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UsIEdzdEJpdFJlYWRlciAqIGJyLAotICAgIGdpbnQgKiBzYW1wbGVfcmF0ZSkKLXsKLSAgZ3VpbnQ4IHNhbXBsaW5nX2ZyZXF1ZW5jeV9pbmRleDsKLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoYnIsICZzYW1wbGluZ19mcmVxdWVuY3lfaW5kZXgsIDQpKQotICAgIHJldHVybiBGQUxTRTsKLSAgR1NUX0xPR19PQkpFQ1QgKGFhY3BhcnNlLCAic2FtcGxpbmdfZnJlcXVlbmN5X2luZGV4OiAldSIsCi0gICAgICBzYW1wbGluZ19mcmVxdWVuY3lfaW5kZXgpOwotICBpZiAoc2FtcGxpbmdfZnJlcXVlbmN5X2luZGV4ID09IDB4ZikgewotICAgIGd1aW50MzIgc2FtcGxpbmdfcmF0ZTsKLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoYnIsICZzYW1wbGluZ19yYXRlLCAyNCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgKnNhbXBsZV9yYXRlID0gc2FtcGxpbmdfcmF0ZTsKLSAgfSBlbHNlIHsKLSAgICAqc2FtcGxlX3JhdGUgPSBsb2FzX3NhbXBsZV9yYXRlX3RhYmxlW3NhbXBsaW5nX2ZyZXF1ZW5jeV9pbmRleF07Ci0gICAgaWYgKCEqc2FtcGxlX3JhdGUpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgYWFjcGFyc2UtPmxhc3RfcGFyc2VkX3NhbXBsZV9yYXRlID0gKnNhbXBsZV9yYXRlOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyogU2VlIHRhYmxlIDEuMTMgaW4gSVNPL0lFQyAxNDQ5Ni0zICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYWNfcGFyc2VfcmVhZF9sb2FzX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyAoR3N0QWFjUGFyc2UgKiBhYWNwYXJzZSwKLSAgICBHc3RCaXRSZWFkZXIgKiBiciwgZ2ludCAqIHNhbXBsZV9yYXRlLCBnaW50ICogY2hhbm5lbHMsIGd1aW50MzIgKiBiaXRzKQotewotICBndWludDggYXVkaW9fb2JqZWN0X3R5cGU7Ci0gIGd1aW50OCBHX0dOVUNfVU5VU0VEIGV4dGVuc2lvbl9hdWRpb19vYmplY3RfdHlwZTsKLSAgZ3VpbnQ4IGNoYW5uZWxfY29uZmlndXJhdGlvbiwgZXh0ZW5zaW9uX2NoYW5uZWxfY29uZmlndXJhdGlvbjsKLSAgZ2Jvb2xlYW4gR19HTlVDX1VOVVNFRCBzYnIgPSBGQUxTRSwgcHMgPSBGQUxTRTsKLQotICBpZiAoIWdzdF9hYWNfcGFyc2VfZ2V0X2F1ZGlvX29iamVjdF90eXBlIChhYWNwYXJzZSwgYnIsICZhdWRpb19vYmplY3RfdHlwZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fc2FtcGxlX3JhdGUgKGFhY3BhcnNlLCBiciwgc2FtcGxlX3JhdGUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4IChiciwgJmNoYW5uZWxfY29uZmlndXJhdGlvbiwgNCkpCi0gICAgcmV0dXJuIEZBTFNFOwotICAqY2hhbm5lbHMgPSBsb2FzX2NoYW5uZWxzX3RhYmxlW2NoYW5uZWxfY29uZmlndXJhdGlvbl07Ci0gIEdTVF9MT0dfT0JKRUNUIChhYWNwYXJzZSwgImNoYW5uZWxfY29uZmlndXJhdGlvbjogJWQiLCBjaGFubmVsX2NvbmZpZ3VyYXRpb24pOwotICBpZiAoISpjaGFubmVscykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGF1ZGlvX29iamVjdF90eXBlID09IDUgfHwgYXVkaW9fb2JqZWN0X3R5cGUgPT0gMjkpIHsKLSAgICBleHRlbnNpb25fYXVkaW9fb2JqZWN0X3R5cGUgPSA1OwotICAgIHNiciA9IFRSVUU7Ci0gICAgaWYgKGF1ZGlvX29iamVjdF90eXBlID09IDI5KQotICAgICAgcHMgPSBUUlVFOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGFhY3BhcnNlLAotICAgICAgICAiQXVkaW8gb2JqZWN0IHR5cGUgNSBvciAyOSwgc28gcmVyZWFkaW5nIHNhbXBsaW5nIHJhdGUuLi4iKTsKLSAgICBpZiAoIWdzdF9hYWNfcGFyc2VfZ2V0X2F1ZGlvX3NhbXBsZV9yYXRlIChhYWNwYXJzZSwgYnIsIHNhbXBsZV9yYXRlKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmICghZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fb2JqZWN0X3R5cGUgKGFhY3BhcnNlLCBiciwgJmF1ZGlvX29iamVjdF90eXBlKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmIChhdWRpb19vYmplY3RfdHlwZSA9PSAyMikgewotICAgICAgLyogZXh0ZW5zaW9uIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLwotICAgICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoYnIsICZleHRlbnNpb25fY2hhbm5lbF9jb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICA0KSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGFhY3BhcnNlLCAiZXh0ZW5zaW9uIGNoYW5uZWxfY29uZmlndXJhdGlvbjogJWQiLAotICAgICAgICAgIGV4dGVuc2lvbl9jaGFubmVsX2NvbmZpZ3VyYXRpb24pOwotICAgICAgKmNoYW5uZWxzID0gbG9hc19jaGFubmVsc190YWJsZVtleHRlbnNpb25fY2hhbm5lbF9jb25maWd1cmF0aW9uXTsKLSAgICAgIGlmICghKmNoYW5uZWxzKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGV4dGVuc2lvbl9hdWRpb19vYmplY3RfdHlwZSA9IDA7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKGFhY3BhcnNlLCAiRm91bmQgTE9BUyBjb25maWc6ICVkIEh6LCAlZCBjaGFubmVscyIsCi0gICAgICAqc2FtcGxlX3JhdGUsICpjaGFubmVscyk7Ci0KLSAgLyogVGhlcmUncyBMT1RTIG9mIHN0dWZmIG5leHQsIGJ1dCB3ZSBpZ25vcmUgaXQgZm9yIG5vdyBhcyB3ZSBoYXZlCi0gICAgIHdoYXQgd2Ugd2FudCAoc2FtcGxlIHJhdGUgYW5kIG51bWJlciBvZiBjaGFubmVscyAqLwotICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwKLSAgICAgICJOZWVkIG1vcmUgY29kZSB0byBwYXJzZSBodW1vbmdvdXMgTE9BUyBkYXRhLCBjdXJyZW50bHkgaWdub3JlZCIpOwotICBpZiAoYml0cykKLSAgICAqYml0cyA9IDA7Ci0gIGFhY3BhcnNlLT5sYXN0X3BhcnNlZF9jaGFubmVscyA9ICpjaGFubmVsczsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYWFjX3BhcnNlX3JlYWRfbG9hc19jb25maWcgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UsIGNvbnN0IGd1aW50OCAqIGRhdGEsCi0gICAgZ3VpbnQgYXZhaWwsIGdpbnQgKiBzYW1wbGVfcmF0ZSwgZ2ludCAqIGNoYW5uZWxzLCBnaW50ICogdmVyc2lvbikKLXsKLSAgR3N0Qml0UmVhZGVyIGJyOwotICBndWludDggdTgsIHYsIHZBOwotCi0gIC8qIE5vIHZlcnNpb24gaW4gdGhlIGJpdHN0cmVhbSwgYnV0IHRoZSBzcGVjIGhhcyBMT0FTIGluIHRoZSBNUEVHLTQgc2VjdGlvbiAqLwotICBpZiAodmVyc2lvbikKLSAgICAqdmVyc2lvbiA9IDQ7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJmJyLCBkYXRhLCBhdmFpbCk7Ci0KLSAgLyogc2tpcCBzeW5jIHdvcmQgKDExIGJpdHMpIGFuZCBzaXplICgxMyBiaXRzKSAqLwotICBpZiAoIWdzdF9iaXRfcmVhZGVyX3NraXAgKCZiciwgMTEgKyAxMykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIEZpcnN0IGJpdCBpcyAidXNlIGxhc3QgY29uZmlnIiAqLwotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZ1OCwgMSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAodTgpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoYWFjcGFyc2UsICJGcmFtZSB1c2VzIHByZXZpb3VzIGNvbmZpZyIpOwotICAgIGlmICghYWFjcGFyc2UtPmxhc3RfcGFyc2VkX3NhbXBsZV9yYXRlIHx8ICFhYWNwYXJzZS0+bGFzdF9wYXJzZWRfY2hhbm5lbHMpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFhY3BhcnNlLAotICAgICAgICAgICJObyBwcmV2aW91cyBjb25maWcgdG8gdXNlLiBXZSdsbCBsb29rIGZvciBtb3JlIGRhdGEuIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgICpzYW1wbGVfcmF0ZSA9IGFhY3BhcnNlLT5sYXN0X3BhcnNlZF9zYW1wbGVfcmF0ZTsKLSAgICAqY2hhbm5lbHMgPSBhYWNwYXJzZS0+bGFzdF9wYXJzZWRfY2hhbm5lbHM7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwgIkZyYW1lIGNvbnRhaW5zIG5ldyBjb25maWciKTsKLQotICAvKiBhdWRpb011eFZlcnNpb24gKi8KLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJmJyLCAmdiwgMSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAodikgewotICAgIC8qIGF1ZGlvTXV4VmVyc2lvbkEgKi8KLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZ2QSwgMSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZQotICAgIHZBID0gMDsKLQotICBHU1RfTE9HX09CSkVDVCAoYWFjcGFyc2UsICJ2ICVkLCB2QSAlZCIsIHYsIHZBKTsKLSAgaWYgKHZBID09IDApIHsKLSAgICBndWludDggc2FtZV90aW1lLCBzdWJmcmFtZXMsIG51bV9wcm9ncmFtLCBwcm9nOwotICAgIGlmICh2ID09IDEpIHsKLSAgICAgIGd1aW50MzIgdmFsdWU7Ci0gICAgICAvKiB0YXJhQnVmZmVyRnVsbG5lc3MgKi8KLSAgICAgIGlmICghZ3N0X2FhY19wYXJzZV9sYXRtX2dldF92YWx1ZSAoYWFjcGFyc2UsICZiciwgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZzYW1lX3RpbWUsIDEpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZiciwgJnN1YmZyYW1lcywgNikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJmJyLCAmbnVtX3Byb2dyYW0sIDQpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIEdTVF9MT0dfT0JKRUNUIChhYWNwYXJzZSwgInNhbWVfdGltZSAlZCwgc3ViZnJhbWVzICVkLCBudW1fcHJvZ3JhbSAlZCIsCi0gICAgICAgIHNhbWVfdGltZSwgc3ViZnJhbWVzLCBudW1fcHJvZ3JhbSk7Ci0KLSAgICBmb3IgKHByb2cgPSAwOyBwcm9nIDw9IG51bV9wcm9ncmFtOyArK3Byb2cpIHsKLSAgICAgIGd1aW50OCBudW1fbGF5ZXIsIGxheWVyOwotICAgICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJmJyLCAmbnVtX2xheWVyLCAzKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGFhY3BhcnNlLCAiUHJvZ3JhbSAlZDogJWQgbGF5ZXJzIiwgcHJvZywgbnVtX2xheWVyKTsKLQotICAgICAgZm9yIChsYXllciA9IDA7IGxheWVyIDw9IG51bV9sYXllcjsgKytsYXllcikgewotICAgICAgICBndWludDggdXNlX3NhbWVfY29uZmlnOwotICAgICAgICBpZiAocHJvZyA9PSAwICYmIGxheWVyID09IDApIHsKLSAgICAgICAgICB1c2Vfc2FtZV9jb25maWcgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZiciwgJnVzZV9zYW1lX2NvbmZpZywgMSkpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF1c2Vfc2FtZV9jb25maWcpIHsKLSAgICAgICAgICBpZiAodiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoIWdzdF9hYWNfcGFyc2VfcmVhZF9sb2FzX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyAoYWFjcGFyc2UsICZiciwKLSAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGUsIGNoYW5uZWxzLCBOVUxMKSkKLSAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBndWludDMyIGJpdHMsIGFzY19sZW47Ci0gICAgICAgICAgICBpZiAoIWdzdF9hYWNfcGFyc2VfbGF0bV9nZXRfdmFsdWUgKGFhY3BhcnNlLCAmYnIsICZhc2NfbGVuKSkKLSAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgaWYgKCFnc3RfYWFjX3BhcnNlX3JlYWRfbG9hc19hdWRpb19zcGVjaWZpY19jb25maWcgKGFhY3BhcnNlLCAmYnIsCi0gICAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlLCBjaGFubmVscywgJmJpdHMpKQotICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgICBhc2NfbGVuIC09IGJpdHM7Ci0gICAgICAgICAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX3NraXAgKCZiciwgYXNjX2xlbikpCi0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGFhY3BhcnNlLCAiTW9yZSBkYXRhIGlnbm9yZWQiKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGFhY3BhcnNlLCAiU3BlYyBzYXlzIFwiVEJEXCIuLi4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2FhY19wYXJzZV9sb2FzX2dldF9mcmFtZV9sZW46Ci0gKiBAZGF0YTogYmxvY2sgb2YgZGF0YSBjb250YWluaW5nIGEgTE9BUyBoZWFkZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIExPQVMgZnJhbWUgbGVuZ3RoIGZyb20gdGhlIGdpdmVuIGhlYWRlci4KLSAqCi0gKiBSZXR1cm5zOiBzaXplIG9mIHRoZSBMT0FTIGZyYW1lLgotICovCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1nc3RfYWFjX3BhcnNlX2xvYXNfZ2V0X2ZyYW1lX2xlbiAoY29uc3QgZ3VpbnQ4ICogZGF0YSkKLXsKLSAgcmV0dXJuICgoKGRhdGFbMV0gJiAweDFmKSA8PCA4KSB8IGRhdGFbMl0pICsgMzsKLX0KLQotCi0vKioKLSAqIGdzdF9hYWNfcGFyc2VfY2hlY2tfbG9hc19mcmFtZToKLSAqIEBhYWNwYXJzZTogI0dzdEFhY1BhcnNlLgotICogQGRhdGE6IERhdGEgdG8gYmUgY2hlY2tlZC4KLSAqIEBhdmFpbDogQW1vdW50IG9mIGRhdGEgcGFzc2VkLgotICogQGZyYW1lc2l6ZTogSWYgdmFsaWQgTE9BUyBmcmFtZSB3YXMgZm91bmQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gdGVsbCB0aGUKLSAqICAgICAgICAgICAgIGZvdW5kIGZyYW1lIHNpemUgaW4gYnl0ZXMuCi0gKiBAbmVlZGVkX2RhdGE6IElmIGZyYW1lIHdhcyBub3QgZm91bmQsIHRoaXMgbWF5IGJlIHNldCB0byB0ZWxsIGhvdyBtdWNoCi0gKiAgICAgICAgICAgICAgIG1vcmUgZGF0YSBpcyBuZWVkZWQgaW4gdGhlIG5leHQgcm91bmQgdG8gZGV0ZWN0IHRoZSBmcmFtZQotICogICAgICAgICAgICAgICByZWxpYWJseS4gVGhpcyBtYXkgaGFwcGVuIHdoZW4gYSBmcmFtZSBoZWFkZXIgY2FuZGlkYXRlCi0gKiAgICAgICAgICAgICAgIGlzIGZvdW5kIGJ1dCBpdCBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgaGVhZGVyIHdpdGhvdXQKLSAqICAgICAgICAgICAgICAgcGVla2luZyB0aGUgZm9sbG93aW5nIGRhdGEuCi0gKgotICogQ2hlY2sgaWYgdGhlIGdpdmVuIGRhdGEgY29udGFpbnMgY29udGFpbnMgTE9BUyBmcmFtZS4gVGhlIGFsZ29yaXRobQotICogd2lsbCBleGFtaW5lIExPQVMgZnJhbWUgaGVhZGVyIGFuZCBjYWxjdWxhdGUgdGhlIGZyYW1lIHNpemUuIEFsc28sIGFub3RoZXIKLSAqIGNvbnNlY3V0aXZlIExPQVMgZnJhbWUgaGVhZGVyIG5lZWQgdG8gYmUgcHJlc2VudCBhZnRlciB0aGUgZm91bmQgZnJhbWUuCi0gKiBPdGhlcndpc2UgdGhlIGRhdGEgaXMgbm90IGNvbnNpZGVyZWQgYXMgYSB2YWxpZCBMT0FTIGZyYW1lLiBIb3dldmVyLCB0aGlzCi0gKiAiZXh0cmEgY2hlY2siIGlzIG9taXR0ZWQgd2hlbiBFT1MgaGFzIGJlZW4gcmVjZWl2ZWQuIEluIHRoaXMgY2FzZSBpdCBpcwotICogZW5vdWdoIHdoZW4gZGF0YVswXSBjb250YWlucyBhIHZhbGlkIExPQVMgaGVhZGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWF5IHNldCB0aGUgI25lZWRlZF9kYXRhIHRvIGluZGljYXRlIHRoYXQgYSBwb3NzaWJsZSBmcmFtZQotICogY2FuZGlkYXRlIGhhcyBiZWVuIGZvdW5kLCBidXQgbW9yZSBkYXRhICgjbmVlZGVkX2RhdGEgYnl0ZXMpIGlzIG5lZWRlZCB0bwotICogYmUgYWJzb2x1dGVseSBzdXJlLiBXaGVuIHRoaXMgc2l0dWF0aW9uIG9jY3VycywgRkFMU0Ugd2lsbCBiZSByZXR1cm5lZC4KLSAqCi0gKiBXaGVuIGEgdmFsaWQgZnJhbWUgaXMgZGV0ZWN0ZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCB1c2UKLSAqIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSgpIGZ1bmN0aW9uIGZyb20gI0dzdEJhc2VQYXJzZSBjbGFzcwotICogdG8gc2V0IHRoZSBuZWVkZWQgYnl0ZXMgZm9yIG5leHQgZnJhbWUuVGhpcyB3YXkgbmV4dCBkYXRhIGNodW5rIGlzIGFscmVhZHkKLSAqIG9mIGNvcnJlY3Qgc2l6ZS4KLSAqCi0gKiBMT0FTIGNhbiBoYXZlIHRocmVlIGRpZmZlcmVudCBmb3JtYXRzLCBpZiBJIHJlYWQgdGhlIHNwZWMgY29ycmVjdGx5LiBPbmx5Ci0gKiBvbmUgb2YgdGhlbSBpcyBzdXBwb3J0ZWQgaGVyZSwgYXMgdGhlIHR3byBzYW1wbGVzIEkgaGF2ZSB1c2UgdGhpcyBvbmUuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiB0aGUgZ2l2ZW4gZGF0YSBjb250YWlucyBhIHZhbGlkIExPQVMgaGVhZGVyLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYWNfcGFyc2VfY2hlY2tfbG9hc19mcmFtZSAoR3N0QWFjUGFyc2UgKiBhYWNwYXJzZSwKLSAgICBjb25zdCBndWludDggKiBkYXRhLCBjb25zdCBndWludCBhdmFpbCwgZ2Jvb2xlYW4gZHJhaW4sCi0gICAgZ3VpbnQgKiBmcmFtZXNpemUsIGd1aW50ICogbmVlZGVkX2RhdGEpCi17Ci0gICpuZWVkZWRfZGF0YSA9IDA7Ci0KLSAgLyogMyBieXRlIGhlYWRlciAqLwotICBpZiAoR19VTkxJS0VMWSAoYXZhaWwgPCAzKSkgewotICAgICpuZWVkZWRfZGF0YSA9IDM7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKChkYXRhWzBdID09IDB4NTYpICYmICgoZGF0YVsxXSAmIDB4ZTApID09IDB4ZTApKSB7Ci0gICAgKmZyYW1lc2l6ZSA9IGdzdF9hYWNfcGFyc2VfbG9hc19nZXRfZnJhbWVfbGVuIChkYXRhKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwgIkZvdW5kIHBvc3NpYmxlICV1IGJ5dGUgTE9BUyBmcmFtZSIsCi0gICAgICAgICpmcmFtZXNpemUpOwotCi0gICAgLyogSW4gRU9TIG1vZGUgdGhpcyBpcyBlbm91Z2guIE5vIG5lZWQgdG8gZXhhbWluZSB0aGUgZGF0YSBmdXJ0aGVyLgotICAgICAgIFdlIGFsc28gcmVsYXggdGhlIGNoZWNrIHdoZW4gd2UgaGF2ZSBzeW5jLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0gICAgICAgaWYgd2UncmUgbm90IGxvb2tpbmcgYXQgcmFuZG9tIGRhdGEsIHdlIGhhdmUgYSBtdWNoIGhpZ2hlciBjaGFuY2UKLSAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc3luYywgYW5kIHRoaXMgYXZvaWRzIGxvc2luZyB0d28gZnJhbWVzIHdoZW4KLSAgICAgICBhIHNpbmdsZSBiaXQgY29ycnVwdGlvbiBoYXBwZW5zLiAqLwotICAgIGlmIChkcmFpbiB8fCAhR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DIChhYWNwYXJzZSkpIHsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIGlmICgqZnJhbWVzaXplICsgTE9BU19NQVhfU0laRSA+IGF2YWlsKSB7Ci0gICAgICAvKiBXZSBoYXZlIGZvdW5kIGEgcG9zc2libGUgZnJhbWUgaGVhZGVyIGNhbmRpZGF0ZSwgYnV0IGNhbid0IGJlCi0gICAgICAgICBzdXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgZW5vdWdoIGRhdGEgdG8gY2hlY2sgdGhlIG5leHQgZnJhbWUgKi8KLSAgICAgIEdTVF9ERUJVRyAoIk5FRUQgTU9SRSBEQVRBOiB3ZSBuZWVkICVkLCBhdmFpbGFibGUgJWQiLAotICAgICAgICAgICpmcmFtZXNpemUgKyBMT0FTX01BWF9TSVpFLCBhdmFpbCk7Ci0gICAgICAqbmVlZGVkX2RhdGEgPSAqZnJhbWVzaXplICsgTE9BU19NQVhfU0laRTsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgICAqZnJhbWVzaXplICsgTE9BU19NQVhfU0laRSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKChkYXRhWypmcmFtZXNpemVdID09IDB4NTYpICYmICgoZGF0YVsqZnJhbWVzaXplICsgMV0gJiAweGUwKSA9PSAweGUwKSkgewotICAgICAgZ3VpbnQgbmV4dGxlbiA9IGdzdF9hYWNfcGFyc2VfbG9hc19nZXRfZnJhbWVfbGVuIChkYXRhICsgKCpmcmFtZXNpemUpKTsKLQotICAgICAgR1NUX0xPRyAoIkxPQVMgZnJhbWUgZm91bmQsIGxlbjogJWQgYnl0ZXMiLCAqZnJhbWVzaXplKTsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgICBuZXh0bGVuICsgTE9BU19NQVhfU0laRSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYWFjcGFyc2UsICJUaGF0IHdhcyBhIGZhbHNlIHBvc2l0aXZlIik7Ci0gICAgfQotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyogY2FsbGVyIGVuc3VyZSBzdWZmaWNpZW50IGRhdGEgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X2FhY19wYXJzZV9wYXJzZV9hZHRzX2hlYWRlciAoR3N0QWFjUGFyc2UgKiBhYWNwYXJzZSwgY29uc3QgZ3VpbnQ4ICogZGF0YSwKLSAgICBnaW50ICogcmF0ZSwgZ2ludCAqIGNoYW5uZWxzLCBnaW50ICogb2JqZWN0LCBnaW50ICogdmVyc2lvbikKLXsKLQotICBpZiAocmF0ZSkgewotICAgIGdpbnQgc3JfaWR4ID0gKGRhdGFbMl0gJiAweDNjKSA+PiAyOwotCi0gICAgKnJhdGUgPSBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9zYW1wbGVfcmF0ZV9mcm9tX2luZGV4IChzcl9pZHgpOwotICB9Ci0gIGlmIChjaGFubmVscykgewotICAgICpjaGFubmVscyA9ICgoZGF0YVsyXSAmIDB4MDEpIDw8IDIpIHwgKChkYXRhWzNdICYgMHhjMCkgPj4gNik7Ci0gICAgaWYgKCpjaGFubmVscyA9PSA3KQotICAgICAgKmNoYW5uZWxzID0gODsKLSAgfQotCi0gIGlmICh2ZXJzaW9uKQotICAgICp2ZXJzaW9uID0gKGRhdGFbMV0gJiAweDA4KSA/IDIgOiA0OwotICBpZiAob2JqZWN0KQotICAgICpvYmplY3QgPSAoKGRhdGFbMl0gJiAweGMwKSA+PiA2KSArIDE7Ci19Ci0KLS8qKgotICogZ3N0X2FhY19wYXJzZV9kZXRlY3Rfc3RyZWFtOgotICogQGFhY3BhcnNlOiAjR3N0QWFjUGFyc2UuCi0gKiBAZGF0YTogQSBibG9jayBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgZXhhbWluZWQgZm9yIHN0cmVhbSBjaGFyYWN0ZXJpc3RpY3MuCi0gKiBAYXZhaWw6IFNpemUgb2YgdGhlIGdpdmVuIGRhdGFibG9jay4KLSAqIEBmcmFtZXNpemU6IElmIHZhbGlkIHN0cmVhbSB3YXMgZm91bmQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gdGVsbCB0aGUKLSAqICAgICAgICAgICAgIGZpcnN0IGZyYW1lIHNpemUgaW4gYnl0ZXMuCi0gKiBAc2tpcHNpemU6IElmIHZhbGlkIHN0cmVhbSB3YXMgZm91bmQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gdGVsbCB0aGUgZmlyc3QKLSAqICAgICAgICAgICAgYXVkaW8gZnJhbWUgcG9zaXRpb24gd2l0aGluIHRoZSBnaXZlbiBkYXRhLgotICoKLSAqIEV4YW1pbmVzIHRoZSBnaXZlbiBwaWVjZSBvZiBkYXRhIGFuZCB0cnkgdG8gZGV0ZWN0IHRoZSBmb3JtYXQgb2YgaXQuIEl0Ci0gKiBjaGVja3MgZm9yICJBRElGIiBoZWFkZXIgKGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNsaXApIGFuZCBBRFRTIGZyYW1lCi0gKiBoZWFkZXIuIElmIHRoZSBzdHJlYW0gaXMgZGV0ZWN0ZWQsIFRSVUUgd2lsbCBiZSByZXR1cm5lZCBhbmQgI2ZyYW1lc2l6ZQotICogaXMgc2V0IHRvIGluZGljYXRlIHRoZSBmb3VuZCBmcmFtZSBzaXplLiBBZGRpdGlvbmFsbHksICNza2lwc2l6ZSBtaWdodAotICogYmUgc2V0IHRvIGluZGljYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIHNraXBwZWQsIGEuay5hLiB0aGUKLSAqIHBvc2l0aW9uIG9mIHRoZSBmcmFtZSBpbnNpZGUgZ2l2ZW4gZGF0YSBjaHVuay4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FhY19wYXJzZV9kZXRlY3Rfc3RyZWFtIChHc3RBYWNQYXJzZSAqIGFhY3BhcnNlLAotICAgIGNvbnN0IGd1aW50OCAqIGRhdGEsIGNvbnN0IGd1aW50IGF2YWlsLCBnYm9vbGVhbiBkcmFpbiwKLSAgICBndWludCAqIGZyYW1lc2l6ZSwgZ2ludCAqIHNraXBzaXplKQotewotICBnYm9vbGVhbiBmb3VuZCA9IEZBTFNFOwotICBndWludCBuZWVkX2RhdGFfYWR0cyA9IDAsIG5lZWRfZGF0YV9sb2FzOwotICBndWludCBpID0gMDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwgIlBhcnNpbmcgaGVhZGVyIGRhdGEiKTsKLQotICAvKiBGSVhNRTogTm8gbmVlZCB0byBjaGVjayBmb3IgQURJRiBpZiB3ZSBhcmUgbm90IGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gICAgIHN0cmVhbSAqLwotCi0gIC8qIENhbiB3ZSBldmVuIHBhcnNlIHRoZSBoZWFkZXI/ICovCi0gIGlmIChhdmFpbCA8IE1BWCAoQURUU19NQVhfU0laRSwgTE9BU19NQVhfU0laRSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwgIk5vdCBlbm91Z2ggZGF0YSB0byBjaGVjayIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBhdmFpbCAtIDQ7IGkrKykgewotICAgIGlmICgoKGRhdGFbaV0gPT0gMHhmZikgJiYgKChkYXRhW2kgKyAxXSAmIDB4ZjYpID09IDB4ZjApKSB8fAotICAgICAgICAoKGRhdGFbaV0gPT0gMHg1NikgJiYgKChkYXRhW2kgKyAxXSAmIDB4ZTApID09IDB4ZTApKSB8fAotICAgICAgICBzdHJuY21wICgoY2hhciAqKSBkYXRhICsgaSwgIkFESUYiLCA0KSA9PSAwKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhYWNwYXJzZSwgIkZvdW5kIHNpZ25hdHVyZSBhdCBvZmZzZXQgJXUiLCBpKTsKLSAgICAgIGZvdW5kID0gVFJVRTsKLQotICAgICAgaWYgKGkpIHsKLSAgICAgICAgLyogVHJpY2s6IHRlbGwgdGhlIHBhcmVudCBjbGFzcyB0aGF0IHdlIGRpZG4ndCBmaW5kIHRoZSBmcmFtZSB5ZXQsCi0gICAgICAgICAgIGJ1dCBtYWtlIGl0IHNraXAgJ2knIGFtb3VudCBvZiBieXRlcy4gTmV4dCB0aW1lIHdlIGFycml2ZQotICAgICAgICAgICBoZXJlIHdlIGhhdmUgZnVsbCBmcmFtZSBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAqLwotICAgICAgICAqc2tpcHNpemUgPSBpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKCFmb3VuZCkgewotICAgIGlmIChpKQotICAgICAgKnNraXBzaXplID0gaTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoZ3N0X2FhY19wYXJzZV9jaGVja19hZHRzX2ZyYW1lIChhYWNwYXJzZSwgZGF0YSwgYXZhaWwsIGRyYWluLAotICAgICAgICAgIGZyYW1lc2l6ZSwgJm5lZWRfZGF0YV9hZHRzKSkgewotICAgIGdpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0KLSAgICBHU1RfSU5GTyAoIkFEVFMgSUQ6ICVkLCBmcmFtZXNpemU6ICVkIiwgKGRhdGFbMV0gJiAweDA4KSA+PiAzLCAqZnJhbWVzaXplKTsKLQotICAgIGdzdF9hYWNfcGFyc2VfcGFyc2VfYWR0c19oZWFkZXIgKGFhY3BhcnNlLCBkYXRhLCAmcmF0ZSwgJmNoYW5uZWxzLAotICAgICAgICAmYWFjcGFyc2UtPm9iamVjdF90eXBlLCAmYWFjcGFyc2UtPm1wZWd2ZXJzaW9uKTsKLQotICAgIGlmICghY2hhbm5lbHMgfHwgIWZyYW1lc2l6ZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYWFjcGFyc2UsICJpbXBvc3NpYmxlIEFEVFMgY29uZmlndXJhdGlvbiIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIGFhY3BhcnNlLT5oZWFkZXJfdHlwZSA9IERTUEFBQ19IRUFERVJfQURUUzsKLSAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwgcmF0ZSwKLSAgICAgICAgYWFjcGFyc2UtPmZyYW1lX3NhbXBsZXMsIDIsIDIpOwotCi0gICAgR1NUX0RFQlVHICgiQURUUzogc2FtcGxlcmF0ZSAlZCwgY2hhbm5lbHMgJWQsIG9ianR5cGUgJWQsIHZlcnNpb24gJWQiLAotICAgICAgICByYXRlLCBjaGFubmVscywgYWFjcGFyc2UtPm9iamVjdF90eXBlLCBhYWNwYXJzZS0+bXBlZ3ZlcnNpb24pOwotCi0gICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlIChHU1RfQkFTRV9QQVJTRSAoYWFjcGFyc2UpLCBUUlVFKTsKLQotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgaWYgKGdzdF9hYWNfcGFyc2VfY2hlY2tfbG9hc19mcmFtZSAoYWFjcGFyc2UsIGRhdGEsIGF2YWlsLCBkcmFpbiwKLSAgICAgICAgICBmcmFtZXNpemUsICZuZWVkX2RhdGFfbG9hcykpIHsKLSAgICBnaW50IHJhdGUgPSAwLCBjaGFubmVscyA9IDA7Ci0KLSAgICBHU1RfSU5GTyAoIkxPQVMsIGZyYW1lc2l6ZTogJWQiLCAqZnJhbWVzaXplKTsKLQotICAgIGFhY3BhcnNlLT5oZWFkZXJfdHlwZSA9IERTUEFBQ19IRUFERVJfTE9BUzsKLQotICAgIGlmICghZ3N0X2FhY19wYXJzZV9yZWFkX2xvYXNfY29uZmlnIChhYWNwYXJzZSwgZGF0YSwgYXZhaWwsICZyYXRlLAotICAgICAgICAgICAgJmNoYW5uZWxzLCAmYWFjcGFyc2UtPm1wZWd2ZXJzaW9uKSkgewotICAgICAgLyogVGhpcyBpcyBwcmV0dHkgbm9ybWFsIHdoZW4gc2tpcHBpbmcgZGF0YSBhdCB0aGUgc3RhcnQgb2YKLSAgICAgICAqIHJhbmRvbSBzdHJlYW0gKE1QRUctVFMgY2FwdHVyZSBmb3IgZXhhbXBsZSkgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChhYWNwYXJzZSwgIkVycm9yIHJlYWRpbmcgTE9BUyBjb25maWciKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAocmF0ZSAmJiBjaGFubmVscykgewotICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUgKEdTVF9CQVNFX1BBUlNFIChhYWNwYXJzZSksIHJhdGUsCi0gICAgICAgICAgYWFjcGFyc2UtPmZyYW1lX3NhbXBsZXMsIDIsIDIpOwotCi0gICAgICAvKiBEb24ndCBzdG9yZSB0aGUgc2FtcGxlIHJhdGUgYW5kIGNoYW5uZWxzIHlldCAtCi0gICAgICAgKiB0aGlzIGlzIGp1c3QgZm9ybWF0IGRldGVjdGlvbi4gKi8KLSAgICAgIEdTVF9ERUJVRyAoIkxPQVM6IHNhbXBsZXJhdGUgJWQsIGNoYW5uZWxzICVkLCBvYmp0eXBlICVkLCB2ZXJzaW9uICVkIiwKLSAgICAgICAgICByYXRlLCBjaGFubmVscywgYWFjcGFyc2UtPm9iamVjdF90eXBlLCBhYWNwYXJzZS0+bXBlZ3ZlcnNpb24pOwotICAgIH0KLQotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9zeW5jYWJsZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwgVFJVRSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmIChuZWVkX2RhdGFfYWR0cyB8fCBuZWVkX2RhdGFfbG9hcykgewotICAgIC8qIFRoaXMgdGVsbHMgdGhlIHBhcmVudCBjbGFzcyBub3QgdG8gc2tpcCBhbnkgZGF0YSAqLwotICAgICpza2lwc2l6ZSA9IDA7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKGF2YWlsIDwgQURJRl9NQVhfU0laRSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKG1lbWNtcCAoZGF0YSArIGksICJBRElGIiwgNCkgPT0gMCkgewotICAgIGNvbnN0IGd1aW50OCAqYWRpZjsKLSAgICBpbnQgc2tpcF9zaXplID0gMDsKLSAgICBpbnQgYml0c3RyZWFtX3R5cGU7Ci0gICAgaW50IHNyX2lkeDsKLSAgICBHc3RDYXBzICpzaW5rY2FwczsKLQotICAgIGFhY3BhcnNlLT5oZWFkZXJfdHlwZSA9IERTUEFBQ19IRUFERVJfQURJRjsKLSAgICBhYWNwYXJzZS0+bXBlZ3ZlcnNpb24gPSA0OwotCi0gICAgLyogU2tpcCB0aGUgIkFESUYiIGJ5dGVzICovCi0gICAgYWRpZiA9IGRhdGEgKyBpICsgNDsKLQotICAgIC8qIGNvcHlyaWdodCBzdHJpbmcgKi8KLSAgICBpZiAoYWRpZlswXSAmIDB4ODApCi0gICAgICBza2lwX3NpemUgKz0gOTsgICAgICAgICAgIC8qIHNraXAgOSBieXRlcyAqLwotCi0gICAgYml0c3RyZWFtX3R5cGUgPSBhZGlmWzAgKyBza2lwX3NpemVdICYgMHgxMDsKLSAgICBhYWNwYXJzZS0+Yml0cmF0ZSA9Ci0gICAgICAgICgodW5zaWduZWQgaW50KSAoYWRpZlswICsgc2tpcF9zaXplXSAmIDB4MGYpIDw8IDE5KSB8Ci0gICAgICAgICgodW5zaWduZWQgaW50KSBhZGlmWzEgKyBza2lwX3NpemVdIDw8IDExKSB8Ci0gICAgICAgICgodW5zaWduZWQgaW50KSBhZGlmWzIgKyBza2lwX3NpemVdIDw8IDMpIHwKLSAgICAgICAgKCh1bnNpZ25lZCBpbnQpIGFkaWZbMyArIHNraXBfc2l6ZV0gJiAweGUwKTsKLQotICAgIC8qIENCUiAqLwotICAgIGlmIChiaXRzdHJlYW1fdHlwZSA9PSAwKSB7Ci0jaWYgMAotICAgICAgLyogQnVmZmVyIGZ1bGxuZXNzIHBhcnNpbmcuIEN1cnJlbnRseSBub3QgbmVlZGVkLi4uICovCi0gICAgICBndWludCBudW1fZWxlbXMgPSAwOwotICAgICAgZ3VpbnQgZnVsbG5lc3MgPSAwOwotCi0gICAgICBudW1fZWxlbXMgPSAoYWRpZlszICsgc2tpcF9zaXplXSAmIDB4MWUpOwotICAgICAgR1NUX0lORk8gKCJBRElGIG51bV9jb25maWdfZWxlbXM6ICVkIiwgbnVtX2VsZW1zKTsKLQotICAgICAgZnVsbG5lc3MgPSAoKHVuc2lnbmVkIGludCkgKGFkaWZbMyArIHNraXBfc2l6ZV0gJiAweDAxKSA8PCAxOSkgfAotICAgICAgICAgICgodW5zaWduZWQgaW50KSBhZGlmWzQgKyBza2lwX3NpemVdIDw8IDExKSB8Ci0gICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIGFkaWZbNSArIHNraXBfc2l6ZV0gPDwgMykgfAotICAgICAgICAgICgodW5zaWduZWQgaW50KSAoYWRpZls2ICsgc2tpcF9zaXplXSAmIDB4ZTApID4+IDUpOwotCi0gICAgICBHU1RfSU5GTyAoIkFESUYgYnVmZmVyIGZ1bGxuZXNzOiAlZCIsIGZ1bGxuZXNzKTsKLSNlbmRpZgotICAgICAgYWFjcGFyc2UtPm9iamVjdF90eXBlID0gKChhZGlmWzYgKyBza2lwX3NpemVdICYgMHgwMSkgPDwgMSkgfAotICAgICAgICAgICgoYWRpZls3ICsgc2tpcF9zaXplXSAmIDB4ODApID4+IDcpOwotICAgICAgc3JfaWR4ID0gKGFkaWZbNyArIHNraXBfc2l6ZV0gJiAweDc4KSA+PiAzOwotICAgIH0KLSAgICAvKiBWQlIgKi8KLSAgICBlbHNlIHsKLSAgICAgIGFhY3BhcnNlLT5vYmplY3RfdHlwZSA9IChhZGlmWzQgKyBza2lwX3NpemVdICYgMHgxOCkgPj4gMzsKLSAgICAgIHNyX2lkeCA9ICgoYWRpZls0ICsgc2tpcF9zaXplXSAmIDB4MDcpIDw8IDEpIHwKLSAgICAgICAgICAoKGFkaWZbNSArIHNraXBfc2l6ZV0gJiAweDgwKSA+PiA3KTsKLSAgICB9Ci0KLSAgICAvKiBGSVhNRTogVGhpcyBnaXZlcyB0b3RhbGx5IHdyb25nIHJlc3VsdHMuIER1cmF0aW9uIGNhbGN1bGF0aW9uIGNhbm5vdAotICAgICAgIGJlIGJhc2VkIG9uIHRoaXMgKi8KLSAgICBhYWNwYXJzZS0+c2FtcGxlX3JhdGUgPQotICAgICAgICBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9zYW1wbGVfcmF0ZV9mcm9tX2luZGV4IChzcl9pZHgpOwotCi0gICAgLyogYmFzZXBhcnNlIGlzIG5vdCBnaXZlbiBhbnkgZnBzLAotICAgICAqIHNvIGl0IHdpbGwgZ2l2ZSB1cCBvbiB0aW1lc3RhbXBzLCBzZWVraW5nLCBldGMgKi8KLQotICAgIC8qIEZJWE1FOiBDYW4gd2UgYXNzdW1lIHRoaXM/ICovCi0gICAgYWFjcGFyc2UtPmNoYW5uZWxzID0gMjsKLQotICAgIEdTVF9JTkZPICgiQURJRjogYnI9JWQsIHNhbXBsZXJhdGU9JWQsIG9ianR5cGU9JWQiLAotICAgICAgICBhYWNwYXJzZS0+Yml0cmF0ZSwgYWFjcGFyc2UtPnNhbXBsZV9yYXRlLCBhYWNwYXJzZS0+b2JqZWN0X3R5cGUpOwotCi0gICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChHU1RfQkFTRV9QQVJTRSAoYWFjcGFyc2UpLCA1MTIpOwotCi0gICAgLyogYXJyYW5nZSBmb3IgbWV0YWRhdGEgYW5kIGdldCBvdXQgb2YgdGhlIHdheSAqLwotICAgIHNpbmtjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAoYWFjcGFyc2UpKTsKLSAgICBnc3RfYWFjX3BhcnNlX3NldF9zcmNfY2FwcyAoYWFjcGFyc2UsIHNpbmtjYXBzKTsKLSAgICBpZiAoc2lua2NhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAoc2lua2NhcHMpOwotCi0gICAgLyogbm90IHN5bmNhYmxlLCBub3QgZWFzaWx5IHNlZWthYmxlICh1bmxlc3Mgd2UgcHVzaCBkYXRhIGZyb20gc3RhcnQgKi8KLSAgICBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgKEdTVF9CQVNFX1BBUlNFX0NBU1QgKGFhY3BhcnNlKSwgRkFMU0UpOwotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfUEFSU0VfQ0FTVCAoYWFjcGFyc2UpLCBUUlVFKTsKLSAgICBnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlIChHU1RfQkFTRV9QQVJTRV9DQVNUIChhYWNwYXJzZSksIDApOwotCi0gICAgKmZyYW1lc2l6ZSA9IGF2YWlsOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0gIHJldHVybiBGQUxTRTsKLX0KLQotLyoqCi0gKiBnc3RfYWFjX3BhcnNlX2dldF9hdWRpb19wcm9maWxlX29iamVjdF90eXBlCi0gKiBAYWFjcGFyc2U6ICNHc3RBYWNQYXJzZS4KLSAqCi0gKiBHZXRzIHRoZSBNUEVHLTIgcHJvZmlsZSBvciB0aGUgTVBFRy00IG9iamVjdCB0eXBlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gKiBtcGVndmVyc2lvbiBhbmQgcHJvZmlsZSBvZiBAYWFjcGFyc2UncyBzcmMgcGFkIGNhcHMsIGFjY29yZGluZyB0byB0aGUKLSAqIHZhbHVlcyBkZWZpbmVkIGJ5IHRhYmxlIDEuQS4xMSBpbiBJU08vSUVDIDE0NDk2LTMuCi0gKgotICogUmV0dXJuczogdGhlIHByb2ZpbGUgb3Igb2JqZWN0IHR5cGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byBAYWFjcGFyc2UncyBzcmMKLSAqIHBhZCBjYXBzLCBpZiBzdWNoIGEgdmFsdWUgZXhpc3RzOyBvdGhlcndpc2UgR19NQVhVSU5UOC4KLSAqLwotc3RhdGljIGd1aW50OAotZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fcHJvZmlsZV9vYmplY3RfdHlwZSAoR3N0QWFjUGFyc2UgKiBhYWNwYXJzZSkKLXsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0U3RydWN0dXJlICpzcmNzdHJ1Y3Q7Ci0gIGNvbnN0IGdjaGFyICpwcm9maWxlOwotICBndWludDggcmV0OwotCi0gIHNyY2NhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKGFhY3BhcnNlKSk7Ci0gIGlmIChHX1VOTElLRUxZIChzcmNjYXBzID09IE5VTEwpKSB7Ci0gICAgcmV0dXJuIEdfTUFYVUlOVDg7Ci0gIH0KLQotICBzcmNzdHJ1Y3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNjYXBzLCAwKTsKLSAgcHJvZmlsZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3Jjc3RydWN0LCAicHJvZmlsZSIpOwotICBpZiAoR19VTkxJS0VMWSAocHJvZmlsZSA9PSBOVUxMKSkgewotICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLSAgICByZXR1cm4gR19NQVhVSU5UODsKLSAgfQotCi0gIGlmIChnX3N0cmNtcDAgKHByb2ZpbGUsICJtYWluIikgPT0gMCkgewotICAgIHJldCA9IChndWludDgpIDBVOwotICB9IGVsc2UgaWYgKGdfc3RyY21wMCAocHJvZmlsZSwgImxjIikgPT0gMCkgewotICAgIHJldCA9IChndWludDgpIDFVOwotICB9IGVsc2UgaWYgKGdfc3RyY21wMCAocHJvZmlsZSwgInNzciIpID09IDApIHsKLSAgICByZXQgPSAoZ3VpbnQ4KSAyVTsKLSAgfSBlbHNlIGlmIChnX3N0cmNtcDAgKHByb2ZpbGUsICJsdHAiKSA9PSAwKSB7Ci0gICAgaWYgKEdfTElLRUxZIChhYWNwYXJzZS0+bXBlZ3ZlcnNpb24gPT0gNCkpCi0gICAgICByZXQgPSAoZ3VpbnQ4KSAzVTsKLSAgICBlbHNlCi0gICAgICByZXQgPSBHX01BWFVJTlQ4OyAgICAgICAgIC8qIExUUCBPYmplY3QgVHlwZSBhbGxvd2VkIG9ubHkgZm9yIE1QRUctNCAqLwotICB9IGVsc2UgewotICAgIHJldCA9IEdfTUFYVUlOVDg7Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fY2hhbm5lbF9jb25maWd1cmF0aW9uCi0gKiBAbnVtX2NoYW5uZWxzOiBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMuCi0gKgotICogR2V0cyB0aGUgQ2hhbm5lbCBDb25maWd1cmF0aW9uIHZhbHVlLCBhcyBkZWZpbmVkIGJ5IHRhYmxlIDEuMTkgaW4gSVNPL0lFQwotICogMTQ0OTYtMywgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLgotICoKLSAqIFJldHVybnM6IHRoZSBDaGFubmVsIENvbmZpZ3VyYXRpb24gdmFsdWUgY29ycmVzcG9uZGluZyB0byBAbnVtX2NoYW5uZWxzLCBpZgotICogc3VjaCBhIHZhbHVlIGV4aXN0czsgb3RoZXJ3aXNlIEdfTUFYVUlOVDguCi0gKi8KLXN0YXRpYyBndWludDgKLWdzdF9hYWNfcGFyc2VfZ2V0X2F1ZGlvX2NoYW5uZWxfY29uZmlndXJhdGlvbiAoZ2ludCBudW1fY2hhbm5lbHMpCi17Ci0gIGlmIChudW1fY2hhbm5lbHMgPj0gMSAmJiBudW1fY2hhbm5lbHMgPD0gNikgICAvKiBNb25vIHVwIHRvICYgaW5jbHVkaW5nIDUuMSAqLwotICAgIHJldHVybiAoZ3VpbnQ4KSBudW1fY2hhbm5lbHM7Ci0gIGVsc2UgaWYgKG51bV9jaGFubmVscyA9PSA4KSAgIC8qIDcuMSAqLwotICAgIHJldHVybiAoZ3VpbnQ4KSA3VTsKLSAgZWxzZQotICAgIHJldHVybiBHX01BWFVJTlQ4OwotCi0gIC8qIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbnMgMTEsIDEyIGFuZCAxNCBmcm9tCi0gICAqIElTTy9JRUMgMTQ0OTYtMzoyMDA5L1BEQU0gNCBiYXNlZCBvbiB0aGUgYWN0dWFsIGNoYW5uZWwgbGF5b3V0Ci0gICAqLwotfQotCi0vKioKLSAqIGdzdF9hYWNfcGFyc2VfZ2V0X2F1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeV9pbmRleDoKLSAqIEBzYW1wbGVfcmF0ZTogYXVkaW8gc2FtcGxpbmcgcmF0ZS4KLSAqCi0gKiBHZXRzIHRoZSBTYW1wbGluZyBGcmVxdWVuY3kgSW5kZXggdmFsdWUsIGFzIGRlZmluZWQgYnkgdGFibGUgMS4xOCBpbiBJU08vSUVDCi0gKiAxNDQ5Ni0zLCBmb3IgYSBnaXZlbiBzYW1wbGluZyByYXRlLgotICoKLSAqIFJldHVybnM6IHRoZSBTYW1wbGluZyBGcmVxdWVuY3kgSW5kZXggdmFsdWUgY29ycmVzcG9uZGluZyB0byBAc2FtcGxlX3JhdGUsCi0gKiBpZiBzdWNoIGEgdmFsdWUgZXhpc3RzOyBvdGhlcndpc2UgR19NQVhVSU5UOC4KLSAqLwotc3RhdGljIGd1aW50OAotZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5X2luZGV4IChnaW50IHNhbXBsZV9yYXRlKQotewotICBzd2l0Y2ggKHNhbXBsZV9yYXRlKSB7Ci0gICAgY2FzZSA5NjAwMDoKLSAgICAgIHJldHVybiAweDBVOwotICAgIGNhc2UgODgyMDA6Ci0gICAgICByZXR1cm4gMHgxVTsKLSAgICBjYXNlIDY0MDAwOgotICAgICAgcmV0dXJuIDB4MlU7Ci0gICAgY2FzZSA0ODAwMDoKLSAgICAgIHJldHVybiAweDNVOwotICAgIGNhc2UgNDQxMDA6Ci0gICAgICByZXR1cm4gMHg0VTsKLSAgICBjYXNlIDMyMDAwOgotICAgICAgcmV0dXJuIDB4NVU7Ci0gICAgY2FzZSAyNDAwMDoKLSAgICAgIHJldHVybiAweDZVOwotICAgIGNhc2UgMjIwNTA6Ci0gICAgICByZXR1cm4gMHg3VTsKLSAgICBjYXNlIDE2MDAwOgotICAgICAgcmV0dXJuIDB4OFU7Ci0gICAgY2FzZSAxMjAwMDoKLSAgICAgIHJldHVybiAweDlVOwotICAgIGNhc2UgMTEwMjU6Ci0gICAgICByZXR1cm4gMHhBVTsKLSAgICBjYXNlIDgwMDA6Ci0gICAgICByZXR1cm4gMHhCVTsKLSAgICBjYXNlIDczNTA6Ci0gICAgICByZXR1cm4gMHhDVTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEdfTUFYVUlOVDg7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfYWFjX3BhcnNlX3ByZXBlbmRfYWR0c19oZWFkZXJzOgotICogQGFhY3BhcnNlOiAjR3N0QWFjUGFyc2UuCi0gKiBAZnJhbWU6IHJhdyBBQUMgZnJhbWUgdG8gd2hpY2ggQURUUyBoZWFkZXJzIHNoYWxsIGJlIHByZXBlbmRlZC4KLSAqCi0gKiBQcmVwZW5kcyBBRFRTIGhlYWRlcnMgdG8gYSByYXcgQUFDIGF1ZGlvIGZyYW1lLgotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgQURUUyBoZWFkZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IHByZXBlbmRlZDsgRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYWNfcGFyc2VfcHJlcGVuZF9hZHRzX2hlYWRlcnMgKEdzdEFhY1BhcnNlICogYWFjcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0gIGd1aW50OCAqYWR0c19oZWFkZXJzOwotICBnc2l6ZSBidWZfc2l6ZTsKLSAgZ3NpemUgZnJhbWVfc2l6ZTsKLSAgZ3VpbnQ4IGlkLCBwcm9maWxlLCBjaGFubmVsX2NvbmZpZ3VyYXRpb24sIHNhbXBsaW5nX2ZyZXF1ZW5jeV9pbmRleDsKLQotICBpZCA9IChhYWNwYXJzZS0+bXBlZ3ZlcnNpb24gPT0gNCkgPyAweDBVIDogMHgxVTsKLSAgcHJvZmlsZSA9IGdzdF9hYWNfcGFyc2VfZ2V0X2F1ZGlvX3Byb2ZpbGVfb2JqZWN0X3R5cGUgKGFhY3BhcnNlKTsKLSAgaWYgKHByb2ZpbGUgPT0gR19NQVhVSU5UOCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFhY3BhcnNlLCAiVW5zdXBwb3J0ZWQgYXVkaW8gcHJvZmlsZSBvciBvYmplY3QgdHlwZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBjaGFubmVsX2NvbmZpZ3VyYXRpb24gPQotICAgICAgZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fY2hhbm5lbF9jb25maWd1cmF0aW9uIChhYWNwYXJzZS0+Y2hhbm5lbHMpOwotICBpZiAoY2hhbm5lbF9jb25maWd1cmF0aW9uID09IEdfTUFYVUlOVDgpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhYWNwYXJzZSwgIlVuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVscyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBzYW1wbGluZ19mcmVxdWVuY3lfaW5kZXggPQotICAgICAgZ3N0X2FhY19wYXJzZV9nZXRfYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5X2luZGV4IChhYWNwYXJzZS0+c2FtcGxlX3JhdGUpOwotICBpZiAoc2FtcGxpbmdfZnJlcXVlbmN5X2luZGV4ID09IEdfTUFYVUlOVDgpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhYWNwYXJzZSwgIlVuc3VwcG9ydGVkIHNhbXBsaW5nIGZyZXF1ZW5jeSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGZyYW1lLT5vdXRfYnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5IChmcmFtZS0+YnVmZmVyKTsKLSAgYnVmX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChmcmFtZS0+b3V0X2J1ZmZlcik7Ci0gIGZyYW1lX3NpemUgPSBidWZfc2l6ZSArIEFEVFNfSEVBREVSU19MRU5HVEg7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGZyYW1lX3NpemUgPj0gMHg0MDAwKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFhY3BhcnNlLCAiRnJhbWUgc2l6ZSBpcyB0b28gYmlnIGZvciBBRFRTIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYWR0c19oZWFkZXJzID0gKGd1aW50OCAqKSBnX21hbGxvYzAgKEFEVFNfSEVBREVSU19MRU5HVEgpOwotCi0gIC8qIE5vdGU6IG5vIGVycm9yIGNvcnJlY3Rpb24gYml0cyBhcmUgYWRkZWQgdG8gdGhlIHJlc3VsdGluZyBBRFRTIGZyYW1lcyAqLwotICBhZHRzX2hlYWRlcnNbMF0gPSAweEZGVTsKLSAgYWR0c19oZWFkZXJzWzFdID0gMHhGMFUgfCAoaWQgPDwgMykgfCAweDFVOwotICBhZHRzX2hlYWRlcnNbMl0gPSAocHJvZmlsZSA8PCA2KSB8IChzYW1wbGluZ19mcmVxdWVuY3lfaW5kZXggPDwgMikgfCAweDJVIHwKLSAgICAgIChjaGFubmVsX2NvbmZpZ3VyYXRpb24gJiAweDRVKTsKLSAgYWR0c19oZWFkZXJzWzNdID0gKChjaGFubmVsX2NvbmZpZ3VyYXRpb24gJiAweDNVKSA8PCA2KSB8IDB4MzBVIHwKLSAgICAgIChndWludDgpIChmcmFtZV9zaXplID4+IDExKTsKLSAgYWR0c19oZWFkZXJzWzRdID0gKGd1aW50OCkgKChmcmFtZV9zaXplID4+IDMpICYgMHgwMEZGKTsKLSAgYWR0c19oZWFkZXJzWzVdID0gKGd1aW50OCkgKCgoZnJhbWVfc2l6ZSAmIDB4MDAwNykgPDwgNSkgKyAweDFGVSk7Ci0gIGFkdHNfaGVhZGVyc1s2XSA9IDB4RkNVOwotCi0gIG1lbSA9IGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGFkdHNfaGVhZGVycywgQURUU19IRUFERVJTX0xFTkdUSCwgMCwKLSAgICAgIEFEVFNfSEVBREVSU19MRU5HVEgsIGFkdHNfaGVhZGVycywgZ19mcmVlKTsKLSAgZ3N0X2J1ZmZlcl9wcmVwZW5kX21lbW9yeSAoZnJhbWUtPm91dF9idWZmZXIsIG1lbSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2FhY19wYXJzZV9jaGVja192YWxpZF9mcmFtZToKLSAqIEBwYXJzZTogI0dzdEJhc2VQYXJzZS4KLSAqIEBmcmFtZTogI0dzdEJhc2VQYXJzZUZyYW1lLgotICogQHNraXBzaXplOiBIb3cgbXVjaCBkYXRhIHBhcmVudCBjbGFzcyBzaG91bGQgc2tpcCBpbiBvcmRlciB0byBmaW5kIHRoZQotICogICAgICAgICAgICBmcmFtZSBoZWFkZXIuCi0gKgotICogSW1wbGVtZW50YXRpb24gb2YgImhhbmRsZV9mcmFtZSIgdm1ldGhvZCBpbiAjR3N0QmFzZVBhcnNlIGNsYXNzLgotICoKLSAqIEFsc28gZGV0ZXJtaW5lcyBmcmFtZSBvdmVyaGVhZC4KLSAqIEFEVFMgc3RyZWFtcyBoYXZlIGEgNyBieXRlIGhlYWRlciBpbiBlYWNoIGZyYW1lLiBNUDQgYW5kIEFESUYgc3RyZWFtcyBkb24ndCBoYXZlCi0gKiBhIHBlci1mcmFtZSBoZWFkZXIuIExPQVMgaGFzIDMgYnl0ZXMuCi0gKgotICogV2UncmUgbWFraW5nIGEgY291cGxlIG9mIHNpbXBsaWZ5aW5nIGFzc3VtcHRpb25zOgotICoKLSAqIDEuIFdlIGNvdW50IFByb2dyYW0gQ29uZmlndXJhdGlvbiBFbGVtZW50cyByYXRoZXIgdGhhbiBzZWFyY2hpbmcgZm9yIHRoZW0KLSAqICAgIGluIHRoZSBzdHJlYW1zIHRvIGRpc2NvdW50IHRoZW0gLSB0aGUgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZS4KLSAqCi0gKiAyLiBXZSBpZ25vcmUgQ1JDLiBUaGlzIGhhcyBhIHdvcnN0LWNhc2UgaW1wYWN0IG9mIChudW1fcmF3X2Jsb2NrcyArIDEpKjE2Ci0gKiAgICBiaXRzLCB3aGljaCBzaG91bGQgc3RpbGwgbm90IGJlIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IHRoZQotICogICAgYWRkaXRpb25hbCBwYXJzaW5nIHRocm91Z2ggdGhlIGhlYWRlcnMKLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuLgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2FhY19wYXJzZV9oYW5kbGVfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsIGdpbnQgKiBza2lwc2l6ZSkKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdEFhY1BhcnNlICphYWNwYXJzZTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGdib29sZWFuIGxvc3Rfc3luYzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50IGZyYW1lc2l6ZTsKLSAgZ2ludCByYXRlID0gMCwgY2hhbm5lbHMgPSAwOwotCi0gIGFhY3BhcnNlID0gR1NUX0FBQ19QQVJTRSAocGFyc2UpOwotICBidWZmZXIgPSBmcmFtZS0+YnVmZmVyOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgKnNraXBzaXplID0gLTE7Ci0gIGxvc3Rfc3luYyA9IEdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQyAocGFyc2UpOwotCi0gIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9BRElGIHx8Ci0gICAgICBhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9OT05FKSB7Ci0gICAgLyogVGhlcmUgaXMgbm90aGluZyB0byBwYXJzZSAqLwotICAgIGZyYW1lc2l6ZSA9IG1hcC5zaXplOwotICAgIHJldCA9IFRSVUU7Ci0KLSAgfSBlbHNlIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9OT1RfUEFSU0VEIHx8IGxvc3Rfc3luYykgewotCi0gICAgcmV0ID0gZ3N0X2FhY19wYXJzZV9kZXRlY3Rfc3RyZWFtIChhYWNwYXJzZSwgbWFwLmRhdGEsIG1hcC5zaXplLAotICAgICAgICBHU1RfQkFTRV9QQVJTRV9EUkFJTklORyAocGFyc2UpLCAmZnJhbWVzaXplLCBza2lwc2l6ZSk7Ci0KLSAgfSBlbHNlIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9BRFRTKSB7Ci0gICAgZ3VpbnQgbmVlZGVkX2RhdGEgPSAxMDI0OwotCi0gICAgcmV0ID0gZ3N0X2FhY19wYXJzZV9jaGVja19hZHRzX2ZyYW1lIChhYWNwYXJzZSwgbWFwLmRhdGEsIG1hcC5zaXplLAotICAgICAgICBHU1RfQkFTRV9QQVJTRV9EUkFJTklORyAocGFyc2UpLCAmZnJhbWVzaXplLCAmbmVlZGVkX2RhdGEpOwotCi0gICAgaWYgKCFyZXQgJiYgbmVlZGVkX2RhdGEpIHsKLSAgICAgIEdTVF9ERUJVRyAoImJ1ZmZlciBkaWRuJ3QgY29udGFpbiB2YWxpZCBmcmFtZSIpOwotICAgICAgKnNraXBzaXplID0gMDsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgICBuZWVkZWRfZGF0YSk7Ci0gICAgfQotCi0gIH0gZWxzZSBpZiAoYWFjcGFyc2UtPmhlYWRlcl90eXBlID09IERTUEFBQ19IRUFERVJfTE9BUykgewotICAgIGd1aW50IG5lZWRlZF9kYXRhID0gMTAyNDsKLQotICAgIHJldCA9IGdzdF9hYWNfcGFyc2VfY2hlY2tfbG9hc19mcmFtZSAoYWFjcGFyc2UsIG1hcC5kYXRhLAotICAgICAgICBtYXAuc2l6ZSwgR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgKHBhcnNlKSwgJmZyYW1lc2l6ZSwgJm5lZWRlZF9kYXRhKTsKLQotICAgIGlmICghcmV0ICYmIG5lZWRlZF9kYXRhKSB7Ci0gICAgICBHU1RfREVCVUcgKCJidWZmZXIgZGlkbid0IGNvbnRhaW4gdmFsaWQgZnJhbWUiKTsKLSAgICAgICpza2lwc2l6ZSA9IDA7Ci0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKEdTVF9CQVNFX1BBUlNFIChhYWNwYXJzZSksCi0gICAgICAgICAgbmVlZGVkX2RhdGEpOwotICAgIH0KLQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVRyAoImJ1ZmZlciBkaWRuJ3QgY29udGFpbiB2YWxpZCBmcmFtZSIpOwotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgQURUU19NQVhfU0laRSk7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoIXJldCkpCi0gICAgZ290byBleGl0OwotCi0gIGlmIChhYWNwYXJzZS0+aGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9BRFRTKSB7Ci0gICAgLyogc2VlIGFib3ZlICovCi0gICAgZnJhbWUtPm92ZXJoZWFkID0gNzsKLQotICAgIGdzdF9hYWNfcGFyc2VfcGFyc2VfYWR0c19oZWFkZXIgKGFhY3BhcnNlLCBtYXAuZGF0YSwKLSAgICAgICAgJnJhdGUsICZjaGFubmVscywgTlVMTCwgTlVMTCk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoYWFjcGFyc2UsICJyYXRlOiAlZCwgY2hhbnM6ICVkIiwgcmF0ZSwgY2hhbm5lbHMpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJhdGUgIT0gYWFjcGFyc2UtPnNhbXBsZV9yYXRlCi0gICAgICAgICAgICB8fCBjaGFubmVscyAhPSBhYWNwYXJzZS0+Y2hhbm5lbHMpKSB7Ci0gICAgICBhYWNwYXJzZS0+c2FtcGxlX3JhdGUgPSByYXRlOwotICAgICAgYWFjcGFyc2UtPmNoYW5uZWxzID0gY2hhbm5lbHM7Ci0KLSAgICAgIGlmICghZ3N0X2FhY19wYXJzZV9zZXRfc3JjX2NhcHMgKGFhY3BhcnNlLCBOVUxMKSkgewotICAgICAgICAvKiBJZiBsaW5raW5nIGZhaWxzLCB3ZSBuZWVkIHRvIHJldHVybiBhcHByb3ByaWF0ZSBlcnJvciAqLwotICAgICAgICByZXQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotICAgICAgfQotCi0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoR1NUX0JBU0VfUEFSU0UgKGFhY3BhcnNlKSwKLSAgICAgICAgICBhYWNwYXJzZS0+c2FtcGxlX3JhdGUsIGFhY3BhcnNlLT5mcmFtZV9zYW1wbGVzLCAyLCAyKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoYWFjcGFyc2UtPmhlYWRlcl90eXBlID09IERTUEFBQ19IRUFERVJfTE9BUykgewotICAgIGdib29sZWFuIHNldGNhcHMgPSBGQUxTRTsKLQotICAgIC8qIHNlZSBhYm92ZSAqLwotICAgIGZyYW1lLT5vdmVyaGVhZCA9IDM7Ci0KLSAgICBpZiAoIWdzdF9hYWNfcGFyc2VfcmVhZF9sb2FzX2NvbmZpZyAoYWFjcGFyc2UsIG1hcC5kYXRhLCBtYXAuc2l6ZSwgJnJhdGUsCi0gICAgICAgICAgICAmY2hhbm5lbHMsIE5VTEwpIHx8ICFyYXRlIHx8ICFjaGFubmVscykgewotICAgICAgLyogVGhpcyBpcyBwcmV0dHkgbm9ybWFsIHdoZW4gc2tpcHBpbmcgZGF0YSBhdCB0aGUgc3RhcnQgb2YKLSAgICAgICAqIHJhbmRvbSBzdHJlYW0gKE1QRUctVFMgY2FwdHVyZSBmb3IgZXhhbXBsZSkgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFhY3BhcnNlLCAiRXJyb3IgcmVhZGluZyBMT0FTIGNvbmZpZy4gU2tpcHBpbmcuIik7Ci0gICAgICAvKiBTaW5jZSB3ZSBkb24ndCBmdWxseSBwYXJzZSB0aGUgTE9BUyBjb25maWcsIHdlIGRvbid0IGtub3cgZm9yIHN1cmUKLSAgICAgICAqIGhvdyBtdWNoIHRvIHNraXAuIEp1c3Qgc2tpcCAxIHRvIGVuZCB1cCB0byB0aGUgbmV4dCBtYXJrZXIgYW5kCi0gICAgICAgKiByZXN1bWUgcGFyc2luZyBmcm9tIHRoZXJlICovCi0gICAgICAqc2tpcHNpemUgPSAxOwotICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIGlmIChHX1VOTElLRUxZIChyYXRlICE9IGFhY3BhcnNlLT5zYW1wbGVfcmF0ZQotICAgICAgICAgICAgfHwgY2hhbm5lbHMgIT0gYWFjcGFyc2UtPmNoYW5uZWxzKSkgewotICAgICAgYWFjcGFyc2UtPnNhbXBsZV9yYXRlID0gcmF0ZTsKLSAgICAgIGFhY3BhcnNlLT5jaGFubmVscyA9IGNoYW5uZWxzOwotICAgICAgc2V0Y2FwcyA9IFRSVUU7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGFhY3BhcnNlLCAiTmV3IExPQVMgY29uZmlnOiAlZCBIeiwgJWQgY2hhbm5lbHMiLCByYXRlLAotICAgICAgICAgIGNoYW5uZWxzKTsKLSAgICB9Ci0KLSAgICAvKiBXZSB3YW50IHRvIHNldCBjYXBzIGJvdGggYXQgc3RhcnQsIGFuZCB3aGVuIHJhdGUvY2hhbm5lbHMgY2hhbmdlLgotICAgICAgIFNpbmNlIG9ubHkgc29tZSBMT0FTIGZyYW1lcyBoYXZlIHRoYXQgaW5mbywgd2UgbWF5IHJlY2VpdmUgZnJhbWVzCi0gICAgICAgYmVmb3JlIGtub3dpbmcgYWJvdXQgcmF0ZS9jaGFubmVscy4gKi8KLSAgICBpZiAoc2V0Y2FwcwotICAgICAgICB8fCAhZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChhYWNwYXJzZSkpKSB7Ci0gICAgICBpZiAoIWdzdF9hYWNfcGFyc2Vfc2V0X3NyY19jYXBzIChhYWNwYXJzZSwgTlVMTCkpIHsKLSAgICAgICAgLyogSWYgbGlua2luZyBmYWlscywgd2UgbmVlZCB0byByZXR1cm4gYXBwcm9wcmlhdGUgZXJyb3IgKi8KLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgICAgIH0KLQotICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2ZyYW1lX3JhdGUgKEdTVF9CQVNFX1BBUlNFIChhYWNwYXJzZSksCi0gICAgICAgICAgYWFjcGFyc2UtPnNhbXBsZV9yYXRlLCBhYWNwYXJzZS0+ZnJhbWVfc2FtcGxlcywgMiwgMik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGFhY3BhcnNlLT5oZWFkZXJfdHlwZSA9PSBEU1BBQUNfSEVBREVSX05PTkUKLSAgICAgICYmIGFhY3BhcnNlLT5vdXRwdXRfaGVhZGVyX3R5cGUgPT0gRFNQQUFDX0hFQURFUl9BRFRTKSB7Ci0gICAgaWYgKCFnc3RfYWFjX3BhcnNlX3ByZXBlbmRfYWR0c19oZWFkZXJzIChhYWNwYXJzZSwgZnJhbWUpKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChhYWNwYXJzZSwgIkZhaWxlZCB0byBwcmVwZW5kIEFEVFMgaGVhZGVycyB0byBmcmFtZSIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLWV4aXQ6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgaWYgKHJldCkgewotICAgIC8qIGZvdW5kLCBza2lwIGlmIG5lZWRlZCAqLwotICAgIGlmICgqc2tpcHNpemUgPiAwKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgICpza2lwc2l6ZSA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCpza2lwc2l6ZSA8IDApCi0gICAgICAqc2tpcHNpemUgPSAxOwotICB9Ci0KLSAgaWYgKHJldCAmJiBmcmFtZXNpemUgPD0gbWFwLnNpemUpIHsKLSAgICByZXR1cm4gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUsIGZyYW1lc2l6ZSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYWFjX3BhcnNlX3ByZV9wdXNoX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0QWFjUGFyc2UgKmFhY3BhcnNlID0gR1NUX0FBQ19QQVJTRSAocGFyc2UpOwotCi0gIGlmICghYWFjcGFyc2UtPnNlbnRfY29kZWNfdGFnKSB7Ci0gICAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgLyogY29kZWMgdGFnICovCi0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKTsKLSAgICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBmbHVzaGluZyIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBub3QgbmVnb3RpYXRlZCEiKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgICAgfQotICAgIH0KLQotICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgIGdzdF9wYl91dGlsc19hZGRfY29kZWNfZGVzY3JpcHRpb25fdG9fdGFnX2xpc3QgKHRhZ2xpc3QsCi0gICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MgKHBhcnNlLCB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0KLSAgICAvKiBhbHNvIHNpZ25hbHMgdGhlIGVuZCBvZiBmaXJzdC1mcmFtZSBwcm9jZXNzaW5nICovCi0gICAgYWFjcGFyc2UtPnNlbnRfY29kZWNfdGFnID0gVFJVRTsKLSAgfQotCi0gIC8qIEFzIGEgc3BlY2lhbCBjYXNlLCB3ZSBjYW4gcmVtb3ZlIHRoZSBBRFRTIGZyYW1pbmcgYW5kIG91dHB1dCByYXcgQUFDLiAqLwotICBpZiAoYWFjcGFyc2UtPmhlYWRlcl90eXBlID09IERTUEFBQ19IRUFERVJfQURUUwotICAgICAgJiYgYWFjcGFyc2UtPm91dHB1dF9oZWFkZXJfdHlwZSA9PSBEU1BBQUNfSEVBREVSX05PTkUpIHsKLSAgICBndWludCBoZWFkZXJfc2l6ZTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBnc3RfYnVmZmVyX21hcCAoZnJhbWUtPmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBoZWFkZXJfc2l6ZSA9IChtYXAuZGF0YVsxXSAmIDEpID8gNyA6IDk7ICAgIC8qIG9wdGlvbmFsIENSQyAqLwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGZyYW1lLT5idWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfcmVzaXplIChmcmFtZS0+YnVmZmVyLCBoZWFkZXJfc2l6ZSwKLSAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZnJhbWUtPmJ1ZmZlcikgLSBoZWFkZXJfc2l6ZSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLQotLyoqCi0gKiBnc3RfYWFjX3BhcnNlX3N0YXJ0OgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mICJzdGFydCIgdm1ldGhvZCBpbiAjR3N0QmFzZVBhcnNlIGNsYXNzLgotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgc3RhcnR1cCBzdWNjZWVkZWQuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FhY19wYXJzZV9zdGFydCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdEFhY1BhcnNlICphYWNwYXJzZTsKLQotICBhYWNwYXJzZSA9IEdTVF9BQUNfUEFSU0UgKHBhcnNlKTsKLSAgR1NUX0RFQlVHICgic3RhcnQiKTsKLSAgYWFjcGFyc2UtPmZyYW1lX3NhbXBsZXMgPSAxMDI0OwotICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKEdTVF9CQVNFX1BBUlNFIChhYWNwYXJzZSksIEFEVFNfTUFYX1NJWkUpOwotICBhYWNwYXJzZS0+c2VudF9jb2RlY190YWcgPSBGQUxTRTsKLSAgYWFjcGFyc2UtPmxhc3RfcGFyc2VkX2NoYW5uZWxzID0gMDsKLSAgYWFjcGFyc2UtPmxhc3RfcGFyc2VkX3NhbXBsZV9yYXRlID0gMDsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoqCi0gKiBnc3RfYWFjX3BhcnNlX3N0b3A6Ci0gKiBAcGFyc2U6ICNHc3RCYXNlUGFyc2UuCi0gKgotICogSW1wbGVtZW50YXRpb24gb2YgInN0b3AiIHZtZXRob2QgaW4gI0dzdEJhc2VQYXJzZSBjbGFzcy4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIGlzIHN0b3BwaW5nIHN1Y2NlZWRlZC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYWFjX3BhcnNlX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBHU1RfREVCVUcgKCJzdG9wIik7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX2ZpZWxkcyAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJmcmFtZWQiKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYWRkX2NvbnZlcnNpb25fZmllbGRzIChHc3RDYXBzICogY2FwcykKLXsKLSAgZ3VpbnQgaSwgbjsKLQotICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHMsICJzdHJlYW0tZm9ybWF0IikpIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqdiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAic3RyZWFtLWZvcm1hdCIpOwotCi0gICAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHYpKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpzdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKHYpOwotCi0gICAgICAgIGlmIChzdHJjbXAgKHN0ciwgImFkdHMiKSA9PSAwIHx8IHN0cmNtcCAoc3RyLCAicmF3IikgPT0gMCkgewotICAgICAgICAgIEdWYWx1ZSB2YSA9IEdfVkFMVUVfSU5JVDsKLSAgICAgICAgICBHVmFsdWUgdnMgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2YSwgR1NUX1RZUEVfTElTVCk7Ci0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmdnMsIEdfVFlQRV9TVFJJTkcpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZzLCAiYWR0cyIpOwotICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhLCAmdnMpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZzLCAicmF3Iik7Ci0gICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdmEsICZ2cyk7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHMsICJzdHJlYW0tZm9ybWF0IiwgJnZhKTsKLSAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmEpOwotICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2cyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHYpKSB7Ci0gICAgICAgIGdib29sZWFuIGNvbnRhaW5zX3JhdyA9IEZBTFNFOwotICAgICAgICBnYm9vbGVhbiBjb250YWluc19hZHRzID0gRkFMU0U7Ci0gICAgICAgIGd1aW50IG0gPSBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAodiksIGo7Ci0KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqdmUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHYsIGopOwotICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHI7Ci0KLSAgICAgICAgICBpZiAoR19WQUxVRV9IT0xEU19TVFJJTkcgKHZlKSAmJiAoc3RyID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2ZSkpKSB7Ci0gICAgICAgICAgICBpZiAoc3RyY21wIChzdHIsICJhZHRzIikgPT0gMCkKLSAgICAgICAgICAgICAgY29udGFpbnNfYWR0cyA9IFRSVUU7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdHJjbXAgKHN0ciwgInJhdyIpID09IDApCi0gICAgICAgICAgICAgIGNvbnRhaW5zX3JhdyA9IFRSVUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbnRhaW5zX2FkdHMgfHwgY29udGFpbnNfcmF3KSB7Ci0gICAgICAgICAgR1ZhbHVlIHZhID0gR19WQUxVRV9JTklUOwotICAgICAgICAgIEdWYWx1ZSB2cyA9IEdfVkFMVUVfSU5JVDsKLQotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnZhLCBHU1RfVFlQRV9MSVNUKTsKLSAgICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2cywgR19UWVBFX1NUUklORyk7Ci0gICAgICAgICAgZ192YWx1ZV9jb3B5ICh2LCAmdmEpOwotCi0gICAgICAgICAgaWYgKCFjb250YWluc19yYXcpIHsKLSAgICAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZzLCAicmF3Iik7Ci0gICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZ2YSwgJnZzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFjb250YWluc19hZHRzKSB7Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2cywgImFkdHMiKTsKLSAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJnZhLCAmdnMpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzLCAic3RyZWFtLWZvcm1hdCIsICZ2YSk7Ci0KLSAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdnMpOwotICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2YSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2FhY19wYXJzZV9zaW5rX2dldGNhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpwZWVyY2FwcywgKnRlbXBsOwotICBHc3RDYXBzICpyZXM7Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKHBhcnNlKSk7Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmZjb3B5ID0gZ3N0X2NhcHNfY29weSAoZmlsdGVyKTsKLSAgICAvKiBSZW1vdmUgdGhlIGZpZWxkcyB3ZSBjb252ZXJ0ICovCi0gICAgcmVtb3ZlX2ZpZWxkcyAoZmNvcHkpOwotICAgIGFkZF9jb252ZXJzaW9uX2ZpZWxkcyAoZmNvcHkpOwotICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgZmNvcHkpOwotICAgIGdzdF9jYXBzX3VucmVmIChmY29weSk7Ci0gIH0gZWxzZQotICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgTlVMTCk7Ci0KLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgcGVlcmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChwZWVyY2Fwcyk7Ci0gICAgLyogUmVtb3ZlIHRoZSBmaWVsZHMgd2UgY29udmVydCAqLwotICAgIHJlbW92ZV9maWVsZHMgKHBlZXJjYXBzKTsKLSAgICBhZGRfY29udmVyc2lvbl9maWVsZHMgKHBlZXJjYXBzKTsKLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotICB9IGVsc2UgewotICAgIHJlcyA9IHRlbXBsOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLSAgICByZXMgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYWNfcGFyc2Vfc3JjX2V2ZW50IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QWFjUGFyc2UgKmFhY3BhcnNlID0gR1NUX0FBQ19QQVJTRSAocGFyc2UpOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVE9QKSB7Ci0gICAgYWFjcGFyc2UtPmxhc3RfcGFyc2VkX2NoYW5uZWxzID0gMDsKLSAgICBhYWNwYXJzZS0+bGFzdF9wYXJzZWRfc2FtcGxlX3JhdGUgPSAwOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1BBUlNFX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zcmNfZXZlbnQgKHBhcnNlLCBldmVudCk7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmggYi9nc3QvYXVkaW9wYXJzZXJzL2dzdGFhY3BhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYzk2ZmYuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYWNwYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBBQUMgcGFyc2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FBQ19QQVJTRV9IX18KLSNkZWZpbmUgX19HU1RfQUFDX1BBUlNFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VwYXJzZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQUFDX1BBUlNFIFwKLSAgKGdzdF9hYWNfcGFyc2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FBQ19QQVJTRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHU1RfVFlQRV9BQUNfUEFSU0UsIEdzdEFhY1BhcnNlKSkKLSNkZWZpbmUgR1NUX0FBQ19QQVJTRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgR1NUX1RZUEVfQUFDX1BBUlNFLCBHc3RBYWNQYXJzZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FBQ19QQVJTRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHU1RfVFlQRV9BQUNfUEFSU0UpKQotI2RlZmluZSBHU1RfSVNfQUFDX1BBUlNFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHU1RfVFlQRV9BQUNfUEFSU0UpKQotCi0KLS8qKgotICogR3N0QWFjSGVhZGVyVHlwZToKLSAqIEBEU1BBQUNfSEVBREVSX05PVF9QQVJTRUQ6IEhlYWRlciBub3QgcGFyc2VkIHlldC4KLSAqIEBEU1BBQUNfSEVBREVSX1VOS05PV046IFVua25vd24gKG5vdCByZWNvZ25pemVkKSBoZWFkZXIuCi0gKiBARFNQQUFDX0hFQURFUl9BRElGOiBBRElGIGhlYWRlciBmb3VuZC4KLSAqIEBEU1BBQUNfSEVBREVSX0FEVFM6IEFEVFMgaGVhZGVyIGZvdW5kLgotICogQERTUEFBQ19IRUFERVJfTE9BUzogTE9BUyBoZWFkZXIgZm91bmQuCi0gKiBARFNQQUFDX0hFQURFUl9OT05FOiBSYXcgc3RyZWFtLCBubyBoZWFkZXIuCi0gKgotICogVHlwZSBoZWFkZXIgZW51bWVyYXRpb24gc2V0IGluICNoZWFkZXJfdHlwZS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgRFNQQUFDX0hFQURFUl9OT1RfUEFSU0VELAotICBEU1BBQUNfSEVBREVSX1VOS05PV04sCi0gIERTUEFBQ19IRUFERVJfQURJRiwKLSAgRFNQQUFDX0hFQURFUl9BRFRTLAotICBEU1BBQUNfSEVBREVSX0xPQVMsCi0gIERTUEFBQ19IRUFERVJfTk9ORQotfSBHc3RBYWNIZWFkZXJUeXBlOwotCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBYWNQYXJzZSBHc3RBYWNQYXJzZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBYWNQYXJzZUNsYXNzIEdzdEFhY1BhcnNlQ2xhc3M7Ci0KLS8qKgotICogR3N0QWFjUGFyc2U6Ci0gKgotICogVGhlIG9wYXF1ZSBHc3RBYWNQYXJzZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RBYWNQYXJzZSB7Ci0gIEdzdEJhc2VQYXJzZSBlbGVtZW50OwotCi0gIC8qIFN0cmVhbSB0eXBlIC1yZWxhdGVkIGluZm8gKi8KLSAgZ2ludCAgICAgICAgICAgb2JqZWN0X3R5cGU7Ci0gIGdpbnQgICAgICAgICAgIGJpdHJhdGU7Ci0gIGdpbnQgICAgICAgICAgIHNhbXBsZV9yYXRlOwotICBnaW50ICAgICAgICAgICBjaGFubmVsczsKLSAgZ2ludCAgICAgICAgICAgbXBlZ3ZlcnNpb247Ci0gIGdpbnQgICAgICAgICAgIGZyYW1lX3NhbXBsZXM7Ci0KLSAgR3N0QWFjSGVhZGVyVHlwZSBoZWFkZXJfdHlwZTsKLSAgR3N0QWFjSGVhZGVyVHlwZSBvdXRwdXRfaGVhZGVyX3R5cGU7Ci0KLSAgZ2Jvb2xlYW4gc2VudF9jb2RlY190YWc7Ci0KLSAgZ2ludCBsYXN0X3BhcnNlZF9zYW1wbGVfcmF0ZTsKLSAgZ2ludCBsYXN0X3BhcnNlZF9jaGFubmVsczsKLX07Ci0KLS8qKgotICogR3N0QWFjUGFyc2VDbGFzczoKLSAqIEBwYXJlbnRfY2xhc3M6IEVsZW1lbnQgcGFyZW50IGNsYXNzLgotICoKLSAqIFRoZSBvcGFxdWUgR3N0QWFjUGFyc2VDbGFzcyBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RBYWNQYXJzZUNsYXNzIHsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2FhY19wYXJzZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BQUNfUEFSU0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmMgYi9nc3QvYXVkaW9wYXJzZXJzL2dzdGFjM3BhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlNzUwMzguLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUzICswLDAgQEAKLS8qIEdTdHJlYW1lciBBQzMgcGFyc2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1dyB1c2VycyBzZiBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWFjM3BhcnNlCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEFDMyBwYXJzZXIKLSAqIEBzZWVfYWxzbzogI0dzdEFtclBhcnNlLCAjR3N0QUFDUGFyc2UKLSAqCi0gKiBUaGlzIGlzIGFuIEFDMyBwYXJzZXIuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249YWJjLmFjMyAhIGFjM3BhcnNlICEgYTUyZGVjICEgYXVkaW9yZXNhbXBsZSAhIGF1ZGlvY29udmVydCAhIGF1dG9hdWRpb3NpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qIFRPRE86Ci0gKiAgLSBhdWRpby9hYzMgdG8gYXVkaW8veC1wcml2YXRlMS1hYzMgaXMgbm90IGltcGxlbWVudGVkIChkb25lIGluIHRoZSBtdXhlcikKLSAqICAtIHNob3VsZCBhY2NlcHQgZnJhbWVkIGFuZCB1bmZyYW1lZCBpbnB1dCAobmVlZHMgZGVjb2RlYmluIGZpeGVzIGZpcnN0KQotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0YWMzcGFyc2UuaCIKLSNpbmNsdWRlIDxnc3QvYmFzZS9iYXNlLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChhYzNfcGFyc2VfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgYWMzX3BhcnNlX2RlYnVnCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLSAgY29uc3QgZ3VpbnQgYml0X3JhdGU7ICAgICAgICAgLyogbm9taW5hbCBiaXQgcmF0ZSAqLwotICBjb25zdCBndWludCBmcmFtZV9zaXplWzNdOyAgICAvKiBmcmFtZSBzaXplIGZvciAzMmtIeiwgNDRrSHosIGFuZCA0OGtIeiAqLwotfSBmcm1zaXpjb2RfdGFibGVbMzhdID0gewotICB7Ci0gICAgMzIsIHsKLSAgNjQsIDY5LCA5Nn19LCB7Ci0gICAgMzIsIHsKLSAgNjQsIDcwLCA5Nn19LCB7Ci0gICAgNDAsIHsKLSAgODAsIDg3LCAxMjB9fSwgewotICAgIDQwLCB7Ci0gIDgwLCA4OCwgMTIwfX0sIHsKLSAgICA0OCwgewotICA5NiwgMTA0LCAxNDR9fSwgewotICAgIDQ4LCB7Ci0gIDk2LCAxMDUsIDE0NH19LCB7Ci0gICAgNTYsIHsKLSAgMTEyLCAxMjEsIDE2OH19LCB7Ci0gICAgNTYsIHsKLSAgMTEyLCAxMjIsIDE2OH19LCB7Ci0gICAgNjQsIHsKLSAgMTI4LCAxMzksIDE5Mn19LCB7Ci0gICAgNjQsIHsKLSAgMTI4LCAxNDAsIDE5Mn19LCB7Ci0gICAgODAsIHsKLSAgMTYwLCAxNzQsIDI0MH19LCB7Ci0gICAgODAsIHsKLSAgMTYwLCAxNzUsIDI0MH19LCB7Ci0gICAgOTYsIHsKLSAgMTkyLCAyMDgsIDI4OH19LCB7Ci0gICAgOTYsIHsKLSAgMTkyLCAyMDksIDI4OH19LCB7Ci0gICAgMTEyLCB7Ci0gIDIyNCwgMjQzLCAzMzZ9fSwgewotICAgIDExMiwgewotICAyMjQsIDI0NCwgMzM2fX0sIHsKLSAgICAxMjgsIHsKLSAgMjU2LCAyNzgsIDM4NH19LCB7Ci0gICAgMTI4LCB7Ci0gIDI1NiwgMjc5LCAzODR9fSwgewotICAgIDE2MCwgewotICAzMjAsIDM0OCwgNDgwfX0sIHsKLSAgICAxNjAsIHsKLSAgMzIwLCAzNDksIDQ4MH19LCB7Ci0gICAgMTkyLCB7Ci0gIDM4NCwgNDE3LCA1NzZ9fSwgewotICAgIDE5MiwgewotICAzODQsIDQxOCwgNTc2fX0sIHsKLSAgICAyMjQsIHsKLSAgNDQ4LCA0ODcsIDY3Mn19LCB7Ci0gICAgMjI0LCB7Ci0gIDQ0OCwgNDg4LCA2NzJ9fSwgewotICAgIDI1NiwgewotICA1MTIsIDU1NywgNzY4fX0sIHsKLSAgICAyNTYsIHsKLSAgNTEyLCA1NTgsIDc2OH19LCB7Ci0gICAgMzIwLCB7Ci0gIDY0MCwgNjk2LCA5NjB9fSwgewotICAgIDMyMCwgewotICA2NDAsIDY5NywgOTYwfX0sIHsKLSAgICAzODQsIHsKLSAgNzY4LCA4MzUsIDExNTJ9fSwgewotICAgIDM4NCwgewotICA3NjgsIDgzNiwgMTE1Mn19LCB7Ci0gICAgNDQ4LCB7Ci0gIDg5NiwgOTc1LCAxMzQ0fX0sIHsKLSAgICA0NDgsIHsKLSAgODk2LCA5NzYsIDEzNDR9fSwgewotICAgIDUxMiwgewotICAxMDI0LCAxMTE0LCAxNTM2fX0sIHsKLSAgICA1MTIsIHsKLSAgMTAyNCwgMTExNSwgMTUzNn19LCB7Ci0gICAgNTc2LCB7Ci0gIDExNTIsIDEyNTMsIDE3Mjh9fSwgewotICAgIDU3NiwgewotICAxMTUyLCAxMjU0LCAxNzI4fX0sIHsKLSAgICA2NDAsIHsKLSAgMTI4MCwgMTM5MywgMTkyMH19LCB7Ci0gICAgNjQwLCB7Ci0gIDEyODAsIDEzOTQsIDE5MjB9fQotfTsKLQotc3RhdGljIGNvbnN0IGd1aW50IGZzY29kX3JhdGVzWzRdID0geyA0ODAwMCwgNDQxMDAsIDMyMDAwLCAwIH07Ci1zdGF0aWMgY29uc3QgZ3VpbnQgYWNtb2RfY2hhbnNbOF0gPSB7IDIsIDEsIDIsIDMsIDMsIDQsIDQsIDUgfTsKLXN0YXRpYyBjb25zdCBndWludCBudW1ibGtzWzRdID0geyAxLCAyLCAzLCA2IH07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1hYzMsIGZyYW1lZCA9IChib29sZWFuKSB0cnVlLCAiCi0gICAgICAgICIgY2hhbm5lbHMgPSAoaW50KSBbIDEsIDYgXSwgcmF0ZSA9IChpbnQpIFsgODAwMCwgNDgwMDAgXSwgIgotICAgICAgICAiIGFsaWdubWVudCA9IChzdHJpbmcpIHsgaWVjNjE5MzcsIGZyYW1lfTsgIgotICAgICAgICAiYXVkaW8veC1lYWMzLCBmcmFtZWQgPSAoYm9vbGVhbikgdHJ1ZSwgIgotICAgICAgICAiIGNoYW5uZWxzID0gKGludCkgWyAxLCA2IF0sIHJhdGUgPSAoaW50KSBbIDgwMDAsIDQ4MDAwIF0sICIKLSAgICAgICAgIiBhbGlnbm1lbnQgPSAoc3RyaW5nKSB7IGllYzYxOTM3LCBmcmFtZX07ICIpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWFjMzsgIiAiYXVkaW8veC1lYWMzOyAiICJhdWRpby9hYzM7ICIKLSAgICAgICAgImF1ZGlvL3gtcHJpdmF0ZTEtYWMzIikpOwotCi1zdGF0aWMgdm9pZCBnc3RfYWMzX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9hYzNfcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYWMzX3BhcnNlX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hYzNfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2FjM19wYXJzZV9wcmVfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FjM19wYXJzZV9zcmNfZXZlbnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdENhcHMgKmdzdF9hYzNfcGFyc2VfZ2V0X3NpbmtfY2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FjM19wYXJzZV9zZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X2FjM19wYXJzZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RBYzNQYXJzZSwgZ3N0X2FjM19wYXJzZSwgR1NUX1RZUEVfQkFTRV9QQVJTRSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWMzX3BhcnNlX2NsYXNzX2luaXQgKEdzdEFjM1BhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHc3RCYXNlUGFyc2VDbGFzcyAqcGFyc2VfY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChhYzNfcGFyc2VfZGVidWcsICJhYzNwYXJzZSIsIDAsCi0gICAgICAiQUMzIGF1ZGlvIHN0cmVhbSBwYXJzZXIiKTsKLQotICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2FjM19wYXJzZV9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJBQzMgYXVkaW8gc3RyZWFtIHBhcnNlciIsICJDb2RlYy9QYXJzZXIvQ29udmVydGVyL0F1ZGlvIiwKLSAgICAgICJBQzMgcGFyc2VyIiwgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Iik7Ci0KLSAgcGFyc2VfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYzNfcGFyc2Vfc3RhcnQpOwotICBwYXJzZV9jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWMzX3BhcnNlX3N0b3ApOwotICBwYXJzZV9jbGFzcy0+aGFuZGxlX2ZyYW1lID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYzNfcGFyc2VfaGFuZGxlX2ZyYW1lKTsKLSAgcGFyc2VfY2xhc3MtPnByZV9wdXNoX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWMzX3BhcnNlX3ByZV9wdXNoX2ZyYW1lKTsKLSAgcGFyc2VfY2xhc3MtPnNyY19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWMzX3BhcnNlX3NyY19ldmVudCk7Ci0gIHBhcnNlX2NsYXNzLT5nZXRfc2lua19jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYzNfcGFyc2VfZ2V0X3NpbmtfY2Fwcyk7Ci0gIHBhcnNlX2NsYXNzLT5zZXRfc2lua19jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hYzNfcGFyc2Vfc2V0X3NpbmtfY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWMzX3BhcnNlX3Jlc2V0IChHc3RBYzNQYXJzZSAqIGFjM3BhcnNlKQotewotICBhYzNwYXJzZS0+Y2hhbm5lbHMgPSAtMTsKLSAgYWMzcGFyc2UtPnNhbXBsZV9yYXRlID0gLTE7Ci0gIGFjM3BhcnNlLT5ibG9ja3MgPSAtMTsKLSAgYWMzcGFyc2UtPmVhYyA9IEZBTFNFOwotICBhYzNwYXJzZS0+c2VudF9jb2RlY190YWcgPSBGQUxTRTsKLSAgZ19hdG9taWNfaW50X3NldCAoJmFjM3BhcnNlLT5hbGlnbiwgR1NUX0FDM19QQVJTRV9BTElHTl9OT05FKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hYzNfcGFyc2VfaW5pdCAoR3N0QWMzUGFyc2UgKiBhYzNwYXJzZSkKLXsKLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChHU1RfQkFTRV9QQVJTRSAoYWMzcGFyc2UpLCA4KTsKLSAgZ3N0X2FjM19wYXJzZV9yZXNldCAoYWMzcGFyc2UpOwotICBhYzNwYXJzZS0+YmFzZXBhcnNlX2NoYWluZnVuYyA9Ci0gICAgICBHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAoR1NUX0JBU0VfUEFSU0UgKGFjM3BhcnNlKSktPmNoYWluZnVuYzsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX0lOVEVSU0VDVCAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKGFjM3BhcnNlKSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKGFjM3BhcnNlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWMzX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FjM19wYXJzZV9zdGFydCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdEFjM1BhcnNlICphYzNwYXJzZSA9IEdTVF9BQzNfUEFSU0UgKHBhcnNlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN0YXJ0aW5nIik7Ci0KLSAgZ3N0X2FjM19wYXJzZV9yZXNldCAoYWMzcGFyc2UpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYzNfcGFyc2Vfc3RvcCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic3RvcHBpbmciKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hYzNfcGFyc2Vfc2V0X2FsaWdubWVudCAoR3N0QWMzUGFyc2UgKiBhYzNwYXJzZSwgZ2Jvb2xlYW4gZWFjKQotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0OwotICBjb25zdCBnY2hhciAqc3RyID0gTlVMTDsKLSAgaW50IGk7Ci0KLSAgaWYgKEdfTElLRUxZICghZWFjKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAoYWMzcGFyc2UpKTsKLQotICBpZiAoIWNhcHMpCi0gICAgZ290byBkb25lOwotCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7IGkrKykgewotICAgIHN0ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0KLSAgICBpZiAoIWdfc3RyX2VxdWFsIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdCksICJhdWRpby94LWVhYzMiKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKChzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0LCAiYWxpZ25tZW50IikpKSB7Ci0gICAgICBpZiAoZ19zdHJfZXF1YWwgKHN0ciwgImllYzYxOTM3IikpIHsKLSAgICAgICAgZ19hdG9taWNfaW50X3NldCAoJmFjM3BhcnNlLT5hbGlnbiwgR1NUX0FDM19QQVJTRV9BTElHTl9JRUM2MTkzNyk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFjM3BhcnNlLCAicGlja2VkIGllYzYxOTM3IGFsaWdubWVudCIpOwotICAgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAoc3RyLCAiZnJhbWUiKSA9PSAwKSB7Ci0gICAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZhYzNwYXJzZS0+YWxpZ24sIEdTVF9BQzNfUEFSU0VfQUxJR05fRlJBTUUpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhYzNwYXJzZSwgInBpY2tlZCBmcmFtZSBhbGlnbm1lbnQiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZhYzNwYXJzZS0+YWxpZ24sIEdTVF9BQzNfUEFSU0VfQUxJR05fRlJBTUUpOwotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGFjM3BhcnNlLCAidW5rbm93biBhbGlnbm1lbnQ6ICVzIiwgc3RyKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmIChjYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotZG9uZToKLSAgLyogZGVmYXVsdCAqLwotICBpZiAoYWMzcGFyc2UtPmFsaWduID09IEdTVF9BQzNfUEFSU0VfQUxJR05fTk9ORSkgewotICAgIGdfYXRvbWljX2ludF9zZXQgKCZhYzNwYXJzZS0+YWxpZ24sIEdTVF9BQzNfUEFSU0VfQUxJR05fRlJBTUUpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFjM3BhcnNlLCAicGlja2VkIHN5bmNmcmFtZSBhbGlnbm1lbnQiKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYzNfcGFyc2VfZnJhbWVfaGVhZGVyX2FjMyAoR3N0QWMzUGFyc2UgKiBhYzNwYXJzZSwgR3N0QnVmZmVyICogYnVmLAotICAgIGdpbnQgc2tpcCwgZ3VpbnQgKiBmcmFtZV9zaXplLCBndWludCAqIHJhdGUsIGd1aW50ICogY2hhbnMsIGd1aW50ICogYmxrcywKLSAgICBndWludCAqIHNpZCkKLXsKLSAgR3N0Qml0UmVhZGVyIGJpdHM7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggZnNjb2QsIGZybXNpemNvZCwgYnNpZCwgYWNtb2QsIGxmZV9vbiwgcmF0ZV9zY2FsZTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGFjM3BhcnNlLCAicGFyc2luZyBhYzMiKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBnc3RfYml0X3JlYWRlcl9pbml0ICgmYml0cywgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZiaXRzLCBza2lwICogOCk7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZiaXRzLCAxNiArIDE2KTsKLSAgZnNjb2QgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAyKTsKLSAgZnJtc2l6Y29kID0gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkICgmYml0cywgNik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGZzY29kID09IDMgfHwgZnJtc2l6Y29kID49IEdfTl9FTEVNRU5UUyAoZnJtc2l6Y29kX3RhYmxlKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhYzNwYXJzZSwgImJhZCBmc2NvZD0lZCBmcm1zaXpjb2Q9JWQiLCBmc2NvZCwgZnJtc2l6Y29kKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBic2lkID0gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkICgmYml0cywgNSk7Ci0gIGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmYml0cywgMyk7ICAgICAvKiBic21vZCAqLwotICBhY21vZCA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJmJpdHMsIDMpOwotCi0gIC8qIHNwZWMgbm90IHF1aXRlIGNsZWFyIGhlcmU6IGRlY29kZXIgc2hvdWxkIGRlY29kZSBpZiBsZXNzIHRoYW4gOCwKLSAgICogYnV0IHNlZW1pbmdseSBvbmx5IGRlZmluZXMgNiBhbmQgOCBjYXNlcyAqLwotICAvKiBGaWxlcyB3aXRoIDkgYW5kIDEwIGhhcHBlbiwgYW5kIHNlZW0gdG8gY29tcGx5IHdpdGggdGhlIDw9IDgKLSAgICAgZm9ybWF0LCBzbyBsZXQgdGhlbSB0aHJvdWdoLiBUaGUgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQgOSBhbmQgMTAgKi8KLSAgaWYgKGJzaWQgPiAxMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFjM3BhcnNlLCAidW5leHBlY3RlZCBic2lkPSVkIiwgYnNpZCk7Ci0gICAgZ290byBjbGVhbnVwOwotICB9IGVsc2UgaWYgKGJzaWQgIT0gOCAmJiBic2lkICE9IDYpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhYzNwYXJzZSwgInVuZGVmaW5lZCBic2lkPSVkIiwgYnNpZCk7Ci0gIH0KLQotICBpZiAoKGFjbW9kICYgMHgxKSAmJiAoYWNtb2QgIT0gMHgxKSkgIC8qIDMgZnJvbnQgY2hhbm5lbHMgKi8KLSAgICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJmJpdHMsIDIpOwotICBpZiAoKGFjbW9kICYgMHg0KSkgICAgICAgICAgICAvKiBpZiBhIHN1cnJvdW5kIGNoYW5uZWwgZXhpc3RzICovCi0gICAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZiaXRzLCAyKTsKLSAgaWYgKGFjbW9kID09IDB4MikgICAgICAgICAgICAgLyogaWYgaW4gMi8wIG1vZGUgKi8KLSAgICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJmJpdHMsIDIpOwotCi0gIGxmZV9vbiA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJmJpdHMsIDEpOwotCi0gIC8qIDYvOC0+MCwgOS0+MSwgMTAtPjIsCi0gICAgIHNlZSBodHRwOi8vbWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9jb2RlY2lkL2luZGV4Lmh0bWwgKi8KLSAgcmF0ZV9zY2FsZSA9IChDTEFNUCAoYnNpZCwgOCwgMTApIC0gOCk7Ci0KLSAgaWYgKGZyYW1lX3NpemUpCi0gICAgKmZyYW1lX3NpemUgPSBmcm1zaXpjb2RfdGFibGVbZnJtc2l6Y29kXS5mcmFtZV9zaXplW2ZzY29kXSAqIDI7Ci0gIGlmIChyYXRlKQotICAgICpyYXRlID0gZnNjb2RfcmF0ZXNbZnNjb2RdID4+IHJhdGVfc2NhbGU7Ci0gIGlmIChjaGFucykKLSAgICAqY2hhbnMgPSBhY21vZF9jaGFuc1thY21vZF0gKyBsZmVfb247Ci0gIGlmIChibGtzKQotICAgICpibGtzID0gNjsKLSAgaWYgKHNpZCkKLSAgICAqc2lkID0gMDsKLQotICByZXQgPSBUUlVFOwotCi1jbGVhbnVwOgotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FjM19wYXJzZV9mcmFtZV9oZWFkZXJfZWFjMyAoR3N0QWMzUGFyc2UgKiBhYzNwYXJzZSwgR3N0QnVmZmVyICogYnVmLAotICAgIGdpbnQgc2tpcCwgZ3VpbnQgKiBmcmFtZV9zaXplLCBndWludCAqIHJhdGUsIGd1aW50ICogY2hhbnMsIGd1aW50ICogYmxrcywKLSAgICBndWludCAqIHNpZCkKLXsKLSAgR3N0Qml0UmVhZGVyIGJpdHM7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDE2IGZybXNpeiwgc2FtcGxlX3JhdGUsIGJsb2NrczsKLSAgZ3VpbnQ4IHN0cm10eXAsIGZzY29kLCBmc2NvZDIsIGFjbW9kLCBsZmVfb24sIHN0cm1pZCwgbnVtYmxrc2NvZDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGFjM3BhcnNlLCAicGFyc2luZyBlLWFjMyIpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGdzdF9iaXRfcmVhZGVyX2luaXQgKCZiaXRzLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJmJpdHMsIHNraXAgKiA4KTsKLQotICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJmJpdHMsIDE2KTsKLSAgc3RybXR5cCA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJmJpdHMsIDIpOyAvKiBzdHJtdHlwICAgICAqLwotICBpZiAoR19VTkxJS0VMWSAoc3RybXR5cCA9PSAzKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFjM3BhcnNlLCAiYmFkIHN0cm10eXAgJWQiLCBzdHJtdHlwKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBzdHJtaWQgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAzKTsgIC8qIHN1YnN0cmVhbWlkICovCi0gIGZybXNpeiA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQgKCZiaXRzLCAxMSk7ICAgICAgICAvKiBmcm1zaXogICAgICAqLwotICBmc2NvZCA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJmJpdHMsIDIpOyAgIC8qIGZzY29kICAgICAgICovCi0gIGlmIChmc2NvZCA9PSAzKSB7Ci0gICAgZnNjb2QyID0gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkICgmYml0cywgMik7ICAgICAgICAvKiBmc2NvZDIgICAgICAqLwotICAgIGlmIChHX1VOTElLRUxZIChmc2NvZDIgPT0gMykpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFjM3BhcnNlLCAiaW52YWxpZCBmc2NvZDIiKTsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0gICAgc2FtcGxlX3JhdGUgPSBmc2NvZF9yYXRlc1tmc2NvZDJdIC8gMjsKLSAgICBibG9ja3MgPSA2OwotICB9IGVsc2UgewotICAgIG51bWJsa3Njb2QgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAyKTsgICAgLyogbnVtYmxrc2NvZCAgKi8KLSAgICBzYW1wbGVfcmF0ZSA9IGZzY29kX3JhdGVzW2ZzY29kXTsKLSAgICBibG9ja3MgPSBudW1ibGtzW251bWJsa3Njb2RdOwotICB9Ci0KLSAgYWNtb2QgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAzKTsgICAvKiBhY21vZCAgICAgICAqLwotICBsZmVfb24gPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAxKTsgIC8qIGxmZW9uICAgICAgICovCi0KLSAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZiaXRzLCA1KTsgICAgIC8qIGJzaWQgICAgICAgICovCi0KLSAgaWYgKGZyYW1lX3NpemUpCi0gICAgKmZyYW1lX3NpemUgPSAoZnJtc2l6ICsgMSkgKiAyOwotICBpZiAocmF0ZSkKLSAgICAqcmF0ZSA9IHNhbXBsZV9yYXRlOwotICBpZiAoY2hhbnMpCi0gICAgKmNoYW5zID0gYWNtb2RfY2hhbnNbYWNtb2RdICsgbGZlX29uOwotICBpZiAoYmxrcykKLSAgICAqYmxrcyA9IGJsb2NrczsKLSAgaWYgKHNpZCkKLSAgICAqc2lkID0gKHN0cm10eXAgJiAweDEpIDw8IDMgfCBzdHJtaWQ7Ci0KLSAgcmV0ID0gVFJVRTsKLQotY2xlYW51cDoKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hYzNfcGFyc2VfZnJhbWVfaGVhZGVyIChHc3RBYzNQYXJzZSAqIHBhcnNlLCBHc3RCdWZmZXIgKiBidWYsIGdpbnQgc2tpcCwKLSAgICBndWludCAqIGZyYW1lc2l6ZSwgZ3VpbnQgKiByYXRlLCBndWludCAqIGNoYW5zLCBndWludCAqIGJsb2NrcywKLSAgICBndWludCAqIHNpZCwgZ2Jvb2xlYW4gKiBlYWMpCi17Ci0gIEdzdEJpdFJlYWRlciBiaXRzOwotICBndWludDE2IHN5bmM7Ci0gIGd1aW50OCBic2lkOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJmJpdHMsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgR1NUX01FTURVTVBfT0JKRUNUIChwYXJzZSwgIkFDMyBmcmFtZSBzeW5jIiwgbWFwLmRhdGEsIE1JTiAobWFwLnNpemUsIDE2KSk7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZiaXRzLCBza2lwICogOCk7Ci0KLSAgc3luYyA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQxNl91bmNoZWNrZWQgKCZiaXRzLCAxNik7Ci0gIGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmYml0cywgMTYgKyA4KTsKLSAgYnNpZCA9IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCA1KTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3luYyAhPSAweDBiNzcpKQotICAgIGdvdG8gY2xlYW51cDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJic2lkID0gJWQiLCBic2lkKTsKLQotICBpZiAoYnNpZCA8PSAxMCkgewotICAgIGlmIChlYWMpCi0gICAgICAqZWFjID0gRkFMU0U7Ci0gICAgcmV0ID0gZ3N0X2FjM19wYXJzZV9mcmFtZV9oZWFkZXJfYWMzIChwYXJzZSwgYnVmLCBza2lwLCBmcmFtZXNpemUsIHJhdGUsCi0gICAgICAgIGNoYW5zLCBibG9ja3MsIHNpZCk7Ci0gICAgZ290byBjbGVhbnVwOwotICB9IGVsc2UgaWYgKGJzaWQgPD0gMTYpIHsKLSAgICBpZiAoZWFjKQotICAgICAgKmVhYyA9IFRSVUU7Ci0gICAgcmV0ID0gZ3N0X2FjM19wYXJzZV9mcmFtZV9oZWFkZXJfZWFjMyAocGFyc2UsIGJ1Ziwgc2tpcCwgZnJhbWVzaXplLCByYXRlLAotICAgICAgICBjaGFucywgYmxvY2tzLCBzaWQpOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInVuZXhwZWN0ZWQgYnNpZCAlZCIsIGJzaWQpOwotICAgIHJldCA9IEZBTFNFOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAidW5leHBlY3RlZCBic2lkICVkIiwgYnNpZCk7Ci0KLWNsZWFudXA6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hYzNfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpCi17Ci0gIEdzdEFjM1BhcnNlICphYzNwYXJzZSA9IEdTVF9BQzNfUEFSU0UgKHBhcnNlKTsKLSAgR3N0QnVmZmVyICpidWYgPSBmcmFtZS0+YnVmZmVyOwotICBHc3RCeXRlUmVhZGVyIHJlYWRlcjsKLSAgZ2ludCBvZmY7Ci0gIGdib29sZWFuIGxvc3Rfc3luYywgZHJhaW5pbmcsIGVhYywgbW9yZSA9IEZBTFNFOwotICBndWludCBmcm1zaXosIGJsb2Nrcywgc2lkOwotICBndWludCByYXRlLCBjaGFuczsKLSAgZ2Jvb2xlYW4gdXBkYXRlX3JhdGUgPSBGQUxTRTsKLSAgZ2ludCBmcmFtZXNpemUgPSAwOwotICBnaW50IGhhdmVfYmxvY2tzID0gMDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX09LOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG1hcC5zaXplIDwgOCkpIHsKLSAgICAqc2tpcHNpemUgPSAxOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgmcmVhZGVyLCAweGZmZmYwMDAwLCAweDBiNzcwMDAwLAotICAgICAgMCwgbWFwLnNpemUpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInBvc3NpYmxlIHN5bmMgYXQgYnVmZmVyIG9mZnNldCAlZCIsIG9mZik7Ci0KLSAgLyogZGlkbid0IGZpbmQgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgc3luYyB3b3JkLCBza2lwICovCi0gIGlmIChvZmYgPCAwKSB7Ci0gICAgKnNraXBzaXplID0gbWFwLnNpemUgLSAzOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIC8qIHBvc3NpYmxlIGZyYW1lIGhlYWRlciwgYnV0IG5vdCBhdCBvZmZzZXQgMD8gc2tpcCBieXRlcyBiZWZvcmUgc3luYyAqLwotICBpZiAob2ZmID4gMCkgewotICAgICpza2lwc2l6ZSA9IG9mZjsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICAvKiBtYWtlIHN1cmUgdGhlIHZhbHVlcyBpbiB0aGUgZnJhbWUgaGVhZGVyIGxvb2sgc2FuZSAqLwotICBpZiAoIWdzdF9hYzNfcGFyc2VfZnJhbWVfaGVhZGVyIChhYzNwYXJzZSwgYnVmLCAwLCAmZnJtc2l6LCAmcmF0ZSwgJmNoYW5zLAotICAgICAgICAgICZibG9ja3MsICZzaWQsICZlYWMpKSB7Ci0gICAgKnNraXBzaXplID0gb2ZmICsgMjsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzaXplOiAldSwgYmxvY2tzOiAldSwgcmF0ZTogJXUsIGNoYW5zOiAldSIsIGZybXNpeiwKLSAgICAgIGJsb2NrcywgcmF0ZSwgY2hhbnMpOwotCi0gIGZyYW1lc2l6ZSA9IGZybXNpejsKLQotICBpZiAoR19VTkxJS0VMWSAoZ19hdG9taWNfaW50X2dldCAoJmFjM3BhcnNlLT5hbGlnbikgPT0KLSAgICAgICAgICBHU1RfQUMzX1BBUlNFX0FMSUdOX05PTkUpKQotICAgIGdzdF9hYzNfcGFyc2Vfc2V0X2FsaWdubWVudCAoYWMzcGFyc2UsIGVhYyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZ290IGZyYW1lIik7Ci0KLSAgbG9zdF9zeW5jID0gR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DIChwYXJzZSk7Ci0gIGRyYWluaW5nID0gR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgKHBhcnNlKTsKLQotICBpZiAoZ19hdG9taWNfaW50X2dldCAoJmFjM3BhcnNlLT5hbGlnbikgPT0gR1NUX0FDM19QQVJTRV9BTElHTl9JRUM2MTkzNykgewotICAgIC8qIFdlIG5lZWQgNiBhdWRpbyBibG9ja3MgZnJvbSBlYWNoIHN1YnN0cmVhbSwgc28gd2Uga2VlcCBnb2luZyBmb3J3YXJkcwotICAgICAqIHRpbGwgd2UgaGF2ZSBpdCAqLwotCi0gICAgZ19hc3NlcnQgKGJsb2NrcyA+IDApOwotICAgIEdTVF9MT0dfT0JKRUNUIChhYzNwYXJzZSwgIk5lZWQgJWQgZnJhbWVzIGJlZm9yZSBwdXNoaW5nIiwgNiAvIGJsb2Nrcyk7Ci0KLSAgICBpZiAoc2lkICE9IDApIHsKLSAgICAgIC8qIFdlIG5lZWQgdGhlIGZpcnN0IHN1YnN0cmVhbSB0byBiZSB0aGUgb25lIHdpdGggaWQgMCAqLwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGFjM3BhcnNlLCAiU2tpcHBpbmcgdGlsbCB3ZSBmaW5kIHNpZCAwIik7Ci0gICAgICAqc2tpcHNpemUgPSBvZmYgKyAyOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIGZyYW1lc2l6ZSA9IDA7Ci0KLSAgICAvKiBMb29wIHRpbGwgd2UgaGF2ZSA2IGJsb2NrcyBwZXIgc3Vic3RyZWFtICovCi0gICAgZm9yIChoYXZlX2Jsb2NrcyA9IDA7ICFtb3JlICYmIGhhdmVfYmxvY2tzIDwgNjsgaGF2ZV9ibG9ja3MgKz0gYmxvY2tzKSB7Ci0gICAgICAvKiBMb29wIHRpbGwgd2UgZ2V0IG9uZSBmcmFtZSBmcm9tIGVhY2ggc3Vic3RyZWFtICovCi0gICAgICBkbyB7Ci0gICAgICAgIGZyYW1lc2l6ZSArPSBmcm1zaXo7Ci0KLSAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgZnJtc2l6KQotICAgICAgICAgICAgfHwgbWFwLnNpemUgPCAoZnJhbWVzaXplICsgNikpIHsKLSAgICAgICAgICBtb3JlID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ3N0X2FjM19wYXJzZV9mcmFtZV9oZWFkZXIgKGFjM3BhcnNlLCBidWYsIGZyYW1lc2l6ZSwgJmZybXNpeiwKLSAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmc2lkLCAmZWFjKSkgewotICAgICAgICAgICpza2lwc2l6ZSA9IG9mZiArIDI7Ci0gICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICB9Ci0gICAgICB9IHdoaWxlIChzaWQpOwotICAgIH0KLQotICAgIC8qIFdlJ3JlIG5vdyBhdCB0aGUgbmV4dCBmcmFtZSwgc28gbm8gbmVlZCB0byBza2lwIGlmIHJlc3luY2luZyAqLwotICAgIGZybXNpeiA9IDA7Ci0gIH0KLQotICBpZiAobG9zdF9zeW5jICYmICFkcmFpbmluZykgewotICAgIGd1aW50MTYgd29yZCA9IDA7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChhYzNwYXJzZSwgInJlc3luY2luZzsgY2hlY2tpbmcgbmV4dCBmcmFtZSBzeW5jd29yZCIpOwotCi0gICAgaWYgKG1vcmUgfHwgIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCBmcm1zaXopIHx8Ci0gICAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoJnJlYWRlciwgJndvcmQpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhYzNwYXJzZSwgIi4uLiBidXQgbm90IHN1ZmZpY2llbnQgZGF0YSIpOwotICAgICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChwYXJzZSwgZnJhbWVzaXplICsgOCk7Ci0gICAgICAqc2tpcHNpemUgPSAwOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAod29yZCAhPSAweDBiNzcpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYWMzcGFyc2UsICIweCV4IG5vdCBPSyIsIHdvcmQpOwotICAgICAgICAqc2tpcHNpemUgPSBvZmYgKyAyOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBvaywgZ290IHN5bmMgbm93LCBsZXQncyBhc3N1bWUgY29uc3RhbnQgZnJhbWUgc2l6ZSAqLwotICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKHBhcnNlLCBmcmFtZXNpemUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIGV4cGVjdCB0byBoYXZlIGZvdW5kIGEgZnJhbWUgaGVyZSAqLwotICBnX2Fzc2VydCAoZnJhbWVzaXplKTsKLSAgcmV0ID0gVFJVRTsKLQotICAvKiBhcnJhbmdlIGZvciBtZXRhZGF0YSBzZXR1cCAqLwotICBpZiAoR19VTkxJS0VMWSAoc2lkKSkgewotICAgIC8qIGRlcGVuZGVudCBmcmFtZSwgbm8gbmVlZCB0byAoYWMpY291bnQgZm9yIG9yIGNvbnNpZGVyIGZ1cnRoZXIgKi8KLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzaWQ6ICVkIiwgc2lkKTsKLSAgICBmcmFtZS0+ZmxhZ3MgfD0gR1NUX0JBU0VfUEFSU0VfRlJBTUVfRkxBR19OT19GUkFNRTsKLSAgICAvKiBUT0RPIG1heWJlIGFsc28gbWFyayBhcyBERUxUQV9VTklULAotICAgICAqIGlmIHRoYXQgZG9lcyBub3Qgc3VycHJpc2UgYmFzZXBhcnNlIGVsc2V3aGVyZSAqLwotICAgIC8qIG9jY3VwaWVzIHNhbWUgdGltZSBzcGFjZSBhcyBwcmV2aW91cyBiYXNlIGZyYW1lICovCi0gICAgaWYgKEdfTElLRUxZIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA+PSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSkKLSAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpIC09IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0gICAgLyogb25seSBzaG9ydGN1dCBpZiB3ZSBhbHJlYWR5IGFycmFuZ2VkIGZvciBjYXBzICovCi0gICAgaWYgKEdfTElLRUxZIChhYzNwYXJzZS0+c2FtcGxlX3JhdGUgPiAwKSkKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZIChhYzNwYXJzZS0+c2FtcGxlX3JhdGUgIT0gcmF0ZSB8fCBhYzNwYXJzZS0+Y2hhbm5lbHMgIT0gY2hhbnMKLSAgICAgICAgICB8fCBhYzNwYXJzZS0+ZWFjICE9IGVhYykpIHsKLSAgICBHc3RDYXBzICpjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoZWFjID8gImF1ZGlvL3gtZWFjMyIgOiAiYXVkaW8veC1hYzMiLAotICAgICAgICAiZnJhbWVkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsICJyYXRlIiwgR19UWVBFX0lOVCwgcmF0ZSwKLSAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgY2hhbnMsIE5VTEwpOwotICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICBnX2F0b21pY19pbnRfZ2V0ICgmYWMzcGFyc2UtPmFsaWduKSA9PSBHU1RfQUMzX1BBUlNFX0FMSUdOX0lFQzYxOTM3ID8KLSAgICAgICAgImllYzYxOTM3IiA6ICJmcmFtZSIsIE5VTEwpOwotICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgYWMzcGFyc2UtPnNhbXBsZV9yYXRlID0gcmF0ZTsKLSAgICBhYzNwYXJzZS0+Y2hhbm5lbHMgPSBjaGFuczsKLSAgICBhYzNwYXJzZS0+ZWFjID0gZWFjOwotCi0gICAgdXBkYXRlX3JhdGUgPSBUUlVFOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGFjM3BhcnNlLT5ibG9ja3MgIT0gYmxvY2tzKSkgewotICAgIGFjM3BhcnNlLT5ibG9ja3MgPSBibG9ja3M7Ci0KLSAgICB1cGRhdGVfcmF0ZSA9IFRSVUU7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAodXBkYXRlX3JhdGUpKQotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlIChwYXJzZSwgcmF0ZSwgMjU2ICogYmxvY2tzLCAyLCAyKTsKLQotY2xlYW51cDoKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBpZiAocmV0ICYmIGZyYW1lc2l6ZSA8PSBtYXAuc2l6ZSkgewotICAgIHJlcyA9IGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSAocGFyc2UsIGZyYW1lLCBmcmFtZXNpemUpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotCi0vKgotICogTVBFRy1QUyBwcml2YXRlMSBzdHJlYW1zIGFkZCBhIDIgYnl0ZXMgIkF1ZGlvIFN1YnN0cmVhbSBIZWFkZXJzIiBmb3IgZWFjaAotICogYnVmZmVyIChub3QgZWFjaCBmcmFtZSkgd2l0aCB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IGZyYW1lJ3Mgc3RhcnQuCi0gKgotICogQnVmZmVyIDE6Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB8Zmlyc3RBY2NVbml0fEFDM1N5bmNXb3JkfHh4eHh4eHh4eHh4eHh4eHh4Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBCdWZmZXIgMjoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHxmaXJzdEFjY1VuaXR8eHh4eHh4fEFDM1N5bmNXb3JkfHh4eHh4eHh4eHgKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBUaGVzZSAyIGJ5dGVzIGNhbiBiZSBkcm9wcGVkIHNhZmVseSBhcyB0aGV5IGRvIG5vdCBpbmNsdWRlIGFueSB0aW1pbmcKLSAqIGluZm9ybWF0aW9uLCBvbmx5IHRoZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGZyYW1lLgotICoKLSAqIEZyb20gaHR0cDovL3N0bnNvZnQuY29tL0RWRC9hc3MtaGRyLmh0bWw6Ci0gKiAiRmlyc3RBY2NVbml0IG9mZnNldCB0byBmcmFtZSB3aGljaCBjb3JyZXNwb25kcyB0byBQVFMgdmFsdWUgb2Zmc2V0IDAgaXMgdGhlCi0gKiBsYXN0IGJ5dGUgb2YgRmlyc3RBY2NVbml0LCBpZSBhZGQgdGhlIG9mZnNldCBvZiBieXRlIDIgdG8gZ2V0IHRoZSBBVSdzIG9mZnNldAotICogVGhlIHZhbHVlIDAwMDAgaW5kaWNhdGVzIHRoZXJlIGlzIG5vIGZpcnN0IGFjY2VzcyB1bml0IgotICogKi8KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hYzNfcGFyc2VfY2hhaW5fcHJpdiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0QWMzUGFyc2UgKmFjM3BhcnNlID0gR1NUX0FDM19QQVJTRSAocGFyZW50KTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGdzaXplIHNpemU7Ci0gIGd1aW50OCBkYXRhWzJdOwotICBnaW50IG9mZnNldDsKLSAgZ2ludCBsZW47Ci0gIEdzdEJ1ZmZlciAqc3ViYnVmOwotICBnaW50IGZpcnN0X2FjY2VzczsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgaWYgKHNpemUgPCAyKQotICAgIGdvdG8gbm90X2Vub3VnaF9kYXRhOwotCi0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBkYXRhLCAyKTsKLSAgZmlyc3RfYWNjZXNzID0gKGRhdGFbMF0gPDwgOCkgfCBkYXRhWzFdOwotCi0gIC8qIFNraXAgdGhlIGZpcnN0X2FjY2VzcyBoZWFkZXIgKi8KLSAgb2Zmc2V0ID0gMjsKLQotICBpZiAoZmlyc3RfYWNjZXNzID4gMSkgewotICAgIC8qIExlbmd0aCBvZiBkYXRhIGJlZm9yZSBmaXJzdF9hY2Nlc3MgKi8KLSAgICBsZW4gPSBmaXJzdF9hY2Nlc3MgLSAxOwotCi0gICAgaWYgKGxlbiA8PSAwIHx8IG9mZnNldCArIGxlbiA+IHNpemUpCi0gICAgICBnb3RvIGJhZF9maXJzdF9hY2Nlc3NfcGFyYW1ldGVyOwotCi0gICAgc3ViYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBvZmZzZXQsIGxlbik7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKHN1YmJ1ZikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIEdTVF9CVUZGRVJfUFRTIChzdWJidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICByZXQgPSBhYzNwYXJzZS0+YmFzZXBhcnNlX2NoYWluZnVuYyAocGFkLCBwYXJlbnQsIHN1YmJ1Zik7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBvZmZzZXQgKz0gbGVuOwotICAgIGxlbiA9IHNpemUgLSBvZmZzZXQ7Ci0KLSAgICBpZiAobGVuID4gMCkgewotICAgICAgc3ViYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBvZmZzZXQsIGxlbik7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAoc3ViYnVmKSA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotICAgICAgR1NUX0JVRkZFUl9EVFMgKHN1YmJ1ZikgPSBHU1RfQlVGRkVSX0RUUyAoYnVmKTsKLQotICAgICAgcmV0ID0gYWMzcGFyc2UtPmJhc2VwYXJzZV9jaGFpbmZ1bmMgKHBhZCwgcGFyZW50LCBzdWJidWYpOwotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9IGVsc2UgewotICAgIC8qIGZpcnN0X2FjY2VzcyA9IDAgb3IgMSwgc28gaWYgdGhlcmUncyBhIHRpbWVzdGFtcCBpdCBhcHBsaWVzIHRvIHRoZSBmaXJzdCBieXRlICovCi0gICAgc3ViYnVmID0KLSAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBvZmZzZXQsCi0gICAgICAgIHNpemUgLSBvZmZzZXQpOwotICAgIEdTVF9CVUZGRVJfUFRTIChzdWJidWYpID0gR1NUX0JVRkZFUl9QVFMgKGJ1Zik7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKHN1YmJ1ZikgPSBHU1RfQlVGRkVSX0RUUyAoYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldCA9IGFjM3BhcnNlLT5iYXNlcGFyc2VfY2hhaW5mdW5jIChwYWQsIHBhcmVudCwgc3ViYnVmKTsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotCi0vKiBFUlJPUlMgKi8KLW5vdF9lbm91Z2hfZGF0YToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChHU1RfRUxFTUVOVCAoYWMzcGFyc2UpLCBTVFJFQU0sIEZPUk1BVCwgKE5VTEwpLAotICAgICAgICAoIkluc3VmZmljaWVudCBkYXRhIGluIGJ1ZmZlci4gQ2FuJ3QgZGV0ZXJtaW5lIGZpcnN0X2FjZXNzIikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1iYWRfZmlyc3RfYWNjZXNzX3BhcmFtZXRlcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChHU1RfRUxFTUVOVCAoYWMzcGFyc2UpLCBTVFJFQU0sIEZPUk1BVCwgKE5VTEwpLAotICAgICAgICAoIkJhZCBmaXJzdF9hY2Nlc3MgcGFyYW1ldGVyICglZCkgaW4gYnVmZmVyIiwgZmlyc3RfYWNjZXNzKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hYzNfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQotewotICBHc3RBYzNQYXJzZSAqYWMzcGFyc2UgPSBHU1RfQUMzX1BBUlNFIChwYXJzZSk7Ci0KLSAgaWYgKCFhYzNwYXJzZS0+c2VudF9jb2RlY190YWcpIHsKLSAgICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAvKiBjb2RlYyB0YWcgKi8KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSkpOwotICAgIGlmIChHX1VOTElLRUxZIChjYXBzID09IE5VTEwpKSB7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBmbHVzaGluZyIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBub3QgbmVnb3RpYXRlZCEiKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgICAgfQotICAgIH0KLQotICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgIGdzdF9wYl91dGlsc19hZGRfY29kZWNfZGVzY3JpcHRpb25fdG9fdGFnX2xpc3QgKHRhZ2xpc3QsCi0gICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MgKHBhcnNlLCB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0KLSAgICAvKiBhbHNvIHNpZ25hbHMgdGhlIGVuZCBvZiBmaXJzdC1mcmFtZSBwcm9jZXNzaW5nICovCi0gICAgYWMzcGFyc2UtPnNlbnRfY29kZWNfdGFnID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYWMzX3BhcnNlX3NyY19ldmVudCAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEFjM1BhcnNlICphYzNwYXJzZSA9IEdTVF9BQzNfUEFSU0UgKHBhcnNlKTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNKSAmJgotICAgICAgZ3N0X2V2ZW50X2hhc19uYW1lIChldmVudCwgImFjM3BhcnNlLXNldC1hbGlnbm1lbnQiKSkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3QgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgIGNvbnN0IGdjaGFyICphbGlnbiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3QsICJhbGlnbm1lbnQiKTsKLQotICAgIGlmIChnX3N0cl9lcXVhbCAoYWxpZ24sICJpZWM2MTkzNyIpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhYzNwYXJzZSwgIlN3aXRjaGluZyB0byBpZWM2MTkzNyBhbGlnbm1lbnQiKTsKLSAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZhYzNwYXJzZS0+YWxpZ24sIEdTVF9BQzNfUEFSU0VfQUxJR05fSUVDNjE5MzcpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKGFsaWduLCAiZnJhbWUiKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYWMzcGFyc2UsICJTd2l0Y2hpbmcgdG8gZnJhbWUgYWxpZ25tZW50Iik7Ci0gICAgICBnX2F0b21pY19pbnRfc2V0ICgmYWMzcGFyc2UtPmFsaWduLCBHU1RfQUMzX1BBUlNFX0FMSUdOX0ZSQU1FKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19hdG9taWNfaW50X3NldCAoJmFjM3BhcnNlLT5hbGlnbiwgR1NUX0FDM19QQVJTRV9BTElHTl9GUkFNRSk7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGFjM3BhcnNlLCAiR290IHVua25vd24gYWxpZ25tZW50IHJlcXVlc3QgKCVzKSAiCi0gICAgICAgICAgInJldmVydGluZyB0byBmcmFtZSBhbGlnbm1lbnQuIiwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0LCAiYWxpZ25tZW50IikpOwotICAgIH0KLQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1BBUlNFX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zcmNfZXZlbnQgKHBhcnNlLCBldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZW1vdmVfZmllbGRzIChHc3RDYXBzICogY2FwcykKLXsKLSAgZ3VpbnQgaSwgbjsKLQotICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImZyYW1lZCIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiYWxpZ25tZW50Iik7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZXh0ZW5kX2NhcHMgKEdzdENhcHMgKiBjYXBzLCBnYm9vbGVhbiBhZGRfcHJpdmF0ZSkKLXsKLSAgZ3VpbnQgaSwgbjsKLSAgR3N0Q2FwcyAqbmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgaWYgKGFkZF9wcml2YXRlICYmICFnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXVkaW8veC1wcml2YXRlMS1hYzMiKSkgewotICAgICAgR3N0U3RydWN0dXJlICpucyA9IGdzdF9zdHJ1Y3R1cmVfY29weSAocyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChucywgImF1ZGlvL3gtcHJpdmF0ZTEtYWMzIik7Ci0gICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChuY2FwcywgbnMpOwotICAgIH0gZWxzZSBpZiAoIWFkZF9wcml2YXRlICYmCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby94LXByaXZhdGUxLWFjMyIpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKm5zID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKG5zLCAiYXVkaW8veC1hYzMiKTsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKG5jYXBzLCBucyk7Ci0gICAgICBucyA9IGdzdF9zdHJ1Y3R1cmVfY29weSAocyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChucywgImF1ZGlvL3gtZWFjMyIpOwotICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAobmNhcHMsIG5zKTsKLSAgICB9IGVsc2UgaWYgKCFhZGRfcHJpdmF0ZSkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAobmNhcHMsIGdzdF9zdHJ1Y3R1cmVfY29weSAocykpOwotICAgIH0KLSAgfQotCi0gIGlmIChhZGRfcHJpdmF0ZSkgewotICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgbmNhcHMpOwotICB9IGVsc2UgewotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBjYXBzID0gbmNhcHM7Ci0gIH0KLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2FjM19wYXJzZV9nZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMsICp0ZW1wbDsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSkpOwotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqZmNvcHkgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIC8qIFJlbW92ZSB0aGUgZmllbGRzIHdlIGNvbnZlcnQgKi8KLSAgICByZW1vdmVfZmllbGRzIChmY29weSk7Ci0gICAgLyogd2UgZG8gbm90IGFzayBkb3duc3RyZWFtIHRvIGhhbmRsZSB4LXByaXZhdGUxLWFjMyAqLwotICAgIGZjb3B5ID0gZXh0ZW5kX2NhcHMgKGZjb3B5LCBGQUxTRSk7Ci0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBmY29weSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZjb3B5KTsKLSAgfSBlbHNlCi0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBOVUxMKTsKLQotICBpZiAocGVlcmNhcHMpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGZyYW1lZCBhbmQgYWxpZ25tZW50IGZpZWxkLiBXZSBjYW4gY29udmVydAotICAgICAqIGJldHdlZW4gZGlmZmVyZW50IGFsaWdubWVudHMuICovCi0gICAgcGVlcmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChwZWVyY2Fwcyk7Ci0gICAgcmVtb3ZlX2ZpZWxkcyAocGVlcmNhcHMpOwotICAgIC8qIGFsc28gYWxsb3cgZm9yIHgtcHJpdmF0ZTEtYWMzIGlucHV0ICovCi0gICAgcGVlcmNhcHMgPSBleHRlbmRfY2FwcyAocGVlcmNhcHMsIFRSVUUpOwotCi0gICAgcmVzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKHBlZXJjYXBzLCB0ZW1wbCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gdGVtcGw7Ci0gIH0KLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgaW50ZXJzZWN0aW9uID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXMpOwotICAgIHJlcyA9IGludGVyc2VjdGlvbjsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FjM19wYXJzZV9zZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0QWMzUGFyc2UgKmFjM3BhcnNlID0gR1NUX0FDM19QQVJTRSAocGFyc2UpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby94LXByaXZhdGUxLWFjMyIpKSB7Ci0gICAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBhcnNlLT5zaW5rcGFkLCBnc3RfYWMzX3BhcnNlX2NoYWluX3ByaXYpOwotICB9IGVsc2UgewotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwYXJzZS0+c2lua3BhZCwgYWMzcGFyc2UtPmJhc2VwYXJzZV9jaGFpbmZ1bmMpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5oIGIvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhYzNwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTdhZjVhLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0YWMzcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIEdTdHJlYW1lciBBQzMgcGFyc2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1dyB1c2VycyBzZiBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BQzNfUEFSU0VfSF9fCi0jZGVmaW5lIF9fR1NUX0FDM19QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FDM19QQVJTRSBcCi0gIChnc3RfYWMzX3BhcnNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BQzNfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfQUMzX1BBUlNFLCBHc3RBYzNQYXJzZSkpCi0jZGVmaW5lIEdTVF9BQzNfUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX0FDM19QQVJTRSwgR3N0QWMzUGFyc2VDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BQzNfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfQUMzX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0lTX0FDM19QQVJTRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfQUMzX1BBUlNFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFjM1BhcnNlIEdzdEFjM1BhcnNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFjM1BhcnNlQ2xhc3MgR3N0QWMzUGFyc2VDbGFzczsKLQotZW51bSB7Ci0gIEdTVF9BQzNfUEFSU0VfQUxJR05fTk9ORSwKLSAgR1NUX0FDM19QQVJTRV9BTElHTl9GUkFNRSwKLSAgR1NUX0FDM19QQVJTRV9BTElHTl9JRUM2MTkzNywKLX07Ci0KLS8qKgotICogR3N0QWMzUGFyc2U6Ci0gKgotICogVGhlIG9wYXF1ZSBHc3RBYzNQYXJzZSBvYmplY3QKLSAqLwotc3RydWN0IF9Hc3RBYzNQYXJzZSB7Ci0gIEdzdEJhc2VQYXJzZSBiYXNlcGFyc2U7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdpbnQgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIGNoYW5uZWxzOwotICBnaW50ICAgICAgICAgICAgICAgICAgYmxvY2tzOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgZWFjOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgc2VudF9jb2RlY190YWc7Ci0gIHZvbGF0aWxlIGdpbnQgICAgICAgICBhbGlnbjsKLSAgR3N0UGFkQ2hhaW5GdW5jdGlvbiAgIGJhc2VwYXJzZV9jaGFpbmZ1bmM7Ci19OwotCi0vKioKLSAqIEdzdEFjM1BhcnNlQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBFbGVtZW50IHBhcmVudCBjbGFzcy4KLSAqCi0gKiBUaGUgb3BhcXVlIEdzdEFjM1BhcnNlQ2xhc3MgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0QWMzUGFyc2VDbGFzcyB7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzIGJhc2VwYXJzZV9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9hYzNfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQUMzX1BBUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jIGIvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmM4NGQ0Li4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0YW1ycGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgQWRhcHRpdmUgTXVsdGktUmF0ZSBwYXJzZXIgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYW1ycGFyc2UKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogQU1SIHBhcnNlcgotICogQHNlZV9hbHNvOiAjR3N0QW1ybmJEZWMsICNHc3RBbXJuYkVuYwotICoKLSAqIFRoaXMgaXMgYW4gQU1SIHBhcnNlciBjYXBhYmxlIG9mIGhhbmRsaW5nIGJvdGggbmFycm93LWJhbmQgYW5kIHdpZGViYW5kCi0gKiBmb3JtYXRzLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPWFiYy5hbXIgISBhbXJwYXJzZSAhIGFtcmRlYyAhIGF1ZGlvcmVzYW1wbGUgISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RhbXJwYXJzZS5oIgotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9BTVIsICIgInJhdGUgPSAoaW50KSA4MDAwLCAiICJjaGFubmVscyA9IChpbnQpIDE7IgotICAgICAgICAiYXVkaW8vQU1SLVdCLCAiICJyYXRlID0gKGludCkgMTYwMDAsICIgImNoYW5uZWxzID0gKGludCkgMTsiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1hbXItbmItc2g7IGF1ZGlvL3gtYW1yLXdiLXNoIikpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChhbXJwYXJzZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBhbXJwYXJzZV9kZWJ1ZwotCi1zdGF0aWMgY29uc3QgZ2ludCBibG9ja19zaXplX25iWzE2XSA9Ci0gICAgeyAxMiwgMTMsIDE1LCAxNywgMTksIDIwLCAyNiwgMzEsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgYmxvY2tfc2l6ZV93YlsxNl0gPQotICAgIHsgMTcsIDIzLCAzMiwgMzYsIDQwLCA0NiwgNTAsIDU4LCA2MCwgNSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAgfTsKLQotLyogQU1SIGhhcyBhICJoYXJkY29kZWQiIGZyYW1lcmF0ZSBvZiA1MGZwcyAqLwotI2RlZmluZSBBTVJfRlJBTUVTX1BFUl9TRUNPTkQgNTAKLSNkZWZpbmUgQU1SX0ZSQU1FX0RVUkFUSU9OIChHU1RfU0VDT05EL0FNUl9GUkFNRVNfUEVSX1NFQ09ORCkKLSNkZWZpbmUgQU1SX01JTUVfSEVBREVSX1NJWkUgOQotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Ftcl9wYXJzZV9zdGFydCAoR3N0QmFzZVBhcnNlICogcGFyc2UpOwotc3RhdGljIGdib29sZWFuIGdzdF9hbXJfcGFyc2Vfc3RvcCAoR3N0QmFzZVBhcnNlICogcGFyc2UpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Ftcl9wYXJzZV9zaW5rX3NldGNhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfYW1yX3BhcnNlX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcik7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hbXJfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2Ftcl9wYXJzZV9wcmVfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdEFtclBhcnNlLCBnc3RfYW1yX3BhcnNlLCBHU1RfVFlQRV9CQVNFX1BBUlNFKTsKLQotLyoqCi0gKiBnc3RfYW1yX3BhcnNlX2NsYXNzX2luaXQ6Ci0gKiBAa2xhc3M6IEdzdEFtclBhcnNlQ2xhc3MuCi0gKgotICovCi1zdGF0aWMgdm9pZAotZ3N0X2Ftcl9wYXJzZV9jbGFzc19pbml0IChHc3RBbXJQYXJzZUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICpwYXJzZV9jbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGFtcnBhcnNlX2RlYnVnLCAiYW1ycGFyc2UiLCAwLAotICAgICAgIkFNUi1OQiBhdWRpbyBzdHJlYW0gcGFyc2VyIik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiQU1SIGF1ZGlvIHN0cmVhbSBwYXJzZXIiLCAiQ29kZWMvUGFyc2VyL0F1ZGlvIiwKLSAgICAgICJBZGFwdGl2ZSBNdWx0aS1SYXRlIGF1ZGlvIHBhcnNlciIsCi0gICAgICAiUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PiIpOwotCi0gIHBhcnNlX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYW1yX3BhcnNlX3N0YXJ0KTsKLSAgcGFyc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Ftcl9wYXJzZV9zdG9wKTsKLSAgcGFyc2VfY2xhc3MtPnNldF9zaW5rX2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Ftcl9wYXJzZV9zaW5rX3NldGNhcHMpOwotICBwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYW1yX3BhcnNlX3NpbmtfZ2V0Y2Fwcyk7Ci0gIHBhcnNlX2NsYXNzLT5oYW5kbGVfZnJhbWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Ftcl9wYXJzZV9oYW5kbGVfZnJhbWUpOwotICBwYXJzZV9jbGFzcy0+cHJlX3B1c2hfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbXJfcGFyc2VfcHJlX3B1c2hfZnJhbWUpOwotfQotCi0KLS8qKgotICogZ3N0X2Ftcl9wYXJzZV9pbml0OgotICogQGFtcnBhcnNlOiAjR3N0QW1yUGFyc2UKLSAqIEBrbGFzczogI0dzdEFtclBhcnNlQ2xhc3MuCi0gKgotICovCi1zdGF0aWMgdm9pZAotZ3N0X2Ftcl9wYXJzZV9pbml0IChHc3RBbXJQYXJzZSAqIGFtcnBhcnNlKQotewotICAvKiBpbml0IHJlc3QgKi8KLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChHU1RfQkFTRV9QQVJTRSAoYW1ycGFyc2UpLCA2Mik7Ci0gIEdTVF9ERUJVRyAoImluaXRpYWxpemVkIik7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChhbXJwYXJzZSkpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChhbXJwYXJzZSkpOwotfQotCi0KLS8qKgotICogZ3N0X2Ftcl9wYXJzZV9zZXRfc3JjX2NhcHM6Ci0gKiBAYW1ycGFyc2U6ICNHc3RBbXJQYXJzZS4KLSAqCi0gKiBTZXQgc291cmNlIHBhZCBjYXBzIGFjY29yZGluZyB0byBjdXJyZW50IGtub3dsZWRnZSBhYm91dCB0aGUKLSAqIGF1ZGlvIHN0cmVhbS4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIGlmIGNhcHMgd2VyZSBzdWNjZXNzZnVsbHkgc2V0LgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbXJfcGFyc2Vfc2V0X3NyY19jYXBzIChHc3RBbXJQYXJzZSAqIGFtcnBhcnNlKQotewotICBHc3RDYXBzICpzcmNfY2FwcyA9IE5VTEw7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGlmIChhbXJwYXJzZS0+d2lkZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFtcnBhcnNlLCAic2V0dGluZyBzcmNwYWQgY2FwcyB0byBBTVItV0IiKTsKLSAgICBzcmNfY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9BTVItV0IiLAotICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDE2MDAwLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhbXJwYXJzZSwgInNldHRpbmcgc3JjcGFkIGNhcHMgdG8gQU1SLU5CIik7Ci0gICAgLyogTWF4LiBzaXplIG9mIE5CIGZyYW1lIGlzIDMxIGJ5dGVzLCBzbyB3ZSBjYW4gc2V0IHRoZSBtaW4uIGZyYW1lCi0gICAgICAgc2l6ZSB0byAzMiAoKzEgZm9yIG5leHQgZnJhbWUgaGVhZGVyKSAqLwotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGFtcnBhcnNlKSwgMzIpOwotICAgIHNyY19jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL0FNUiIsCi0gICAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsICJyYXRlIiwgR19UWVBFX0lOVCwgODAwMCwgTlVMTCk7Ci0gIH0KLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoR1NUX0JBU0VfUEFSU0UgKGFtcnBhcnNlKS0+c3JjcGFkKTsKLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX0JBU0VfUEFSU0UgKGFtcnBhcnNlKS0+c3JjcGFkLCBzcmNfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNfY2Fwcyk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLQotLyoqCi0gKiBnc3RfYW1yX3BhcnNlX3Npbmtfc2V0Y2FwczoKLSAqIEBzaW5rcGFkOiBHc3RQYWQKLSAqIEBjYXBzOiBHc3RDYXBzCi0gKgotICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbXJfcGFyc2Vfc2lua19zZXRjYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEFtclBhcnNlICphbXJwYXJzZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotCi0gIGFtcnBhcnNlID0gR1NUX0FNUl9QQVJTRSAocGFyc2UpOwotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYW1ycGFyc2UsICJzZXRjYXBzOiAlcyIsIG5hbWUpOwotCi0gIGlmICghc3RybmNtcCAobmFtZSwgImF1ZGlvL3gtYW1yLXdiLXNoIiwgMTcpKSB7Ci0gICAgYW1ycGFyc2UtPmJsb2NrX3NpemUgPSBibG9ja19zaXplX3diOwotICAgIGFtcnBhcnNlLT53aWRlID0gMTsKLSAgfSBlbHNlIGlmICghc3RybmNtcCAobmFtZSwgImF1ZGlvL3gtYW1yLW5iLXNoIiwgMTcpKSB7Ci0gICAgYW1ycGFyc2UtPmJsb2NrX3NpemUgPSBibG9ja19zaXplX25iOwotICAgIGFtcnBhcnNlLT53aWRlID0gMDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklORyAoIlVua25vd24gY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGFtcnBhcnNlLT5uZWVkX2hlYWRlciA9IEZBTFNFOwotICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoR1NUX0JBU0VfUEFSU0UgKGFtcnBhcnNlKSwgNTAsIDEsIDIsIDIpOwotICBnc3RfYW1yX3BhcnNlX3NldF9zcmNfY2FwcyAoYW1ycGFyc2UpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBnc3RfYW1yX3BhcnNlX3BhcnNlX2hlYWRlcjoKLSAqIEBhbXJwYXJzZTogI0dzdEFtclBhcnNlCi0gKiBAZGF0YTogSGVhZGVyIGRhdGEgdG8gYmUgcGFyc2VkLgotICogQHNraXBzaXplOiBPdXRwdXQgYXJndW1lbnQgd2hlcmUgdGhlIGZyYW1lIHNpemUgd2lsbCBiZSBzdG9yZWQuCi0gKgotICogQ2hlY2sgaWYgdGhlIGdpdmVuIGRhdGEgY29udGFpbnMgYW4gQU1SIG1pbWUgaGVhZGVyLgotICoKLSAqIFJldHVybnM6IFRSVUUgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYW1yX3BhcnNlX3BhcnNlX2hlYWRlciAoR3N0QW1yUGFyc2UgKiBhbXJwYXJzZSwKLSAgICBjb25zdCBndWludDggKiBkYXRhLCBnaW50ICogc2tpcHNpemUpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGFtcnBhcnNlLCAiUGFyc2luZyBoZWFkZXIgZGF0YSIpOwotCi0gIGlmICghbWVtY21wIChkYXRhLCAiIyFBTVItV0JcbiIsIDkpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYW1ycGFyc2UsICJBTVItV0IgZGV0ZWN0ZWQiKTsKLSAgICBhbXJwYXJzZS0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemVfd2I7Ci0gICAgYW1ycGFyc2UtPndpZGUgPSBUUlVFOwotICAgICpza2lwc2l6ZSA9IGFtcnBhcnNlLT5oZWFkZXIgPSA5OwotICB9IGVsc2UgaWYgKCFtZW1jbXAgKGRhdGEsICIjIUFNUlxuIiwgNikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhbXJwYXJzZSwgIkFNUi1OQiBkZXRlY3RlZCIpOwotICAgIGFtcnBhcnNlLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZV9uYjsKLSAgICBhbXJwYXJzZS0+d2lkZSA9IEZBTFNFOwotICAgICpza2lwc2l6ZSA9IGFtcnBhcnNlLT5oZWFkZXIgPSA2OwotICB9IGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ3N0X2Ftcl9wYXJzZV9zZXRfc3JjX2NhcHMgKGFtcnBhcnNlKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoqCi0gKiBnc3RfYW1yX3BhcnNlX2NoZWNrX3ZhbGlkX2ZyYW1lOgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICogQGJ1ZmZlcjogI0dzdEJ1ZmZlci4KLSAqIEBmcmFtZXNpemU6IE91dHB1dCB2YXJpYWJsZSB3aGVyZSB0aGUgZm91bmQgZnJhbWUgc2l6ZSBpcyBwdXQuCi0gKiBAc2tpcHNpemU6IE91dHB1dCB2YXJpYWJsZSB3aGljaCB0ZWxscyBob3cgbXVjaCBkYXRhIG5lZWRzIHRvIGJlIHNraXBwZWQKLSAqICAgICAgICAgICAgdW50aWwgYSBmcmFtZSBoZWFkZXIgaXMgZm91bmQuCi0gKgotICogSW1wbGVtZW50YXRpb24gb2YgImNoZWNrX3ZhbGlkX2ZyYW1lIiB2bWV0aG9kIGluICNHc3RCYXNlUGFyc2UgY2xhc3MuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiB0aGUgZ2l2ZW4gZGF0YSBjb250YWlucyB2YWxpZCBmcmFtZS4KLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hbXJfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2ludCBmc2l6ZSA9IDAsIG1vZGUsIGRzaXplOwotICBHc3RBbXJQYXJzZSAqYW1ycGFyc2U7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGdib29sZWFuIGZvdW5kID0gRkFMU0U7Ci0KLSAgYW1ycGFyc2UgPSBHU1RfQU1SX1BBUlNFIChwYXJzZSk7Ci0gIGJ1ZmZlciA9IGZyYW1lLT5idWZmZXI7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZHNpemUgPSBtYXAuc2l6ZTsKLQotICBHU1RfTE9HICgiYnVmZmVyOiAlZCBieXRlcyIsIGRzaXplKTsKLQotICBpZiAoYW1ycGFyc2UtPm5lZWRfaGVhZGVyKSB7Ci0gICAgaWYgKGRzaXplID49IEFNUl9NSU1FX0hFQURFUl9TSVpFICYmCi0gICAgICAgIGdzdF9hbXJfcGFyc2VfcGFyc2VfaGVhZGVyIChhbXJwYXJzZSwgbWFwLmRhdGEsIHNraXBzaXplKSkgewotICAgICAgYW1ycGFyc2UtPm5lZWRfaGVhZGVyID0gRkFMU0U7Ci0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAoR1NUX0JBU0VfUEFSU0UgKGFtcnBhcnNlKSwgNTAsIDEsIDIsIDIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklORyAoIm1lZGlhIGRvZXNuJ3QgbG9vayBsaWtlIGEgQU1SIGZvcm1hdCIpOwotICAgIH0KLSAgICAvKiBXZSByZXR1cm4gRkFMU0UsIHNvIHRoaXMgZnJhbWUgd29uJ3QgZ2V0IHB1c2hlZCBmb3J3YXJkLiBJbnN0ZWFkLAotICAgICAgIHRoZSAic2tpcCIgdmFsdWUgaXMgc2V0LCBzbyBuZXh0IHRpbWUgd2Ugd2lsbCByZWNlaXZlIGEgdmFsaWQgZnJhbWUuICovCi0gICAgZ290byBkb25lOwotICB9Ci0KLSAgKnNraXBzaXplID0gMTsKLSAgLyogRG9lcyB0aGlzIGxvb2sgbGlrZSBhIHBvc3NpYmxlIGZyYW1lIGhlYWRlciBjYW5kaWRhdGU/ICovCi0gIGlmICgobWFwLmRhdGFbMF0gJiAweDgzKSA9PSAwKSB7Ci0gICAgLyogWWVwLiBSZXRyaWV2ZSB0aGUgZnJhbWUgc2l6ZSAqLwotICAgIG1vZGUgPSAobWFwLmRhdGFbMF0gPj4gMykgJiAweDBGOwotICAgIGZzaXplID0gYW1ycGFyc2UtPmJsb2NrX3NpemVbbW9kZV0gKyAxOyAgICAgLyogKzEgZm9yIHRoZSBoZWFkZXIgYnl0ZSAqLwotCi0gICAgLyogV2UgcmVjb2duaXplIHRoaXMgZGF0YSBhcyBhIHZhbGlkIGZyYW1lIHdoZW46Ci0gICAgICogICAgIC0gV2UgYXJlIGluIHN5bmMuIFRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4dHJhIGNoZWNrcyB0aGVuCi0gICAgICogICAgIC0gV2UgYXJlIGluIEVPUy4gVGhlcmUgbWlnaHQgbm90IGJlIGVub3VnaCBkYXRhIHRvIGNoZWNrIG5leHQgZnJhbWUKLSAgICAgKiAgICAgLSBTeW5jIGlzIGxvc3QsIGJ1dCB0aGUgZm9sbG93aW5nIGRhdGEgYWZ0ZXIgdGhpcyBmcmFtZSBzZWVtCi0gICAgICogICAgICAgdG8gY29udGFpbiBhIHZhbGlkIGhlYWRlciBhcyB3ZWxsIChhbmQgdGhlcmUgaXMgZW5vdWdoIGRhdGEgdG8KLSAgICAgKiAgICAgICBwZXJmb3JtIHRoaXMgY2hlY2spCi0gICAgICovCi0gICAgaWYgKGZzaXplKSB7Ci0gICAgICAqc2tpcHNpemUgPSAwOwotICAgICAgLyogaW4gc3luYywgbm8gZnVydGhlciBjaGVjayAqLwotICAgICAgaWYgKCFHU1RfQkFTRV9QQVJTRV9MT1NUX1NZTkMgKHBhcnNlKSkgewotICAgICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKGRzaXplID4gZnNpemUpIHsKLSAgICAgICAgLyogZW5vdWdoIGRhdGEsIGNoZWNrIGZvciBuZXh0IHN5bmMgKi8KLSAgICAgICAgaWYgKChtYXAuZGF0YVtmc2l6ZV0gJiAweDgzKSA9PSAwKQotICAgICAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAgIH0gZWxzZSBpZiAoR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgKHBhcnNlKSkgewotICAgICAgICAvKiBub3QgZW5vdWdoLCBidXQgZHJhaW5pbmcsIHNvIG9rICovCi0gICAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICBpZiAoZm91bmQgJiYgZnNpemUgPD0gbWFwLnNpemUpIHsKLSAgICByZXQgPSBnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWUgKHBhcnNlLCBmcmFtZSwgZnNpemUpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfYW1yX3BhcnNlX3N0YXJ0OgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mICJzdGFydCIgdm1ldGhvZCBpbiAjR3N0QmFzZVBhcnNlIGNsYXNzLgotICoKLSAqIFJldHVybnM6IFRSVUUgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYW1yX3BhcnNlX3N0YXJ0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR3N0QW1yUGFyc2UgKmFtcnBhcnNlOwotCi0gIGFtcnBhcnNlID0gR1NUX0FNUl9QQVJTRSAocGFyc2UpOwotICBHU1RfREVCVUcgKCJzdGFydCIpOwotICBhbXJwYXJzZS0+bmVlZF9oZWFkZXIgPSBUUlVFOwotICBhbXJwYXJzZS0+aGVhZGVyID0gMDsKLSAgYW1ycGFyc2UtPnNlbnRfY29kZWNfdGFnID0gRkFMU0U7Ci0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qKgotICogZ3N0X2Ftcl9wYXJzZV9zdG9wOgotICogQHBhcnNlOiAjR3N0QmFzZVBhcnNlLgotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mICJzdG9wIiB2bWV0aG9kIGluICNHc3RCYXNlUGFyc2UgY2xhc3MuCi0gKgotICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbXJfcGFyc2Vfc3RvcCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdEFtclBhcnNlICphbXJwYXJzZTsKLQotICBhbXJwYXJzZSA9IEdTVF9BTVJfUEFSU0UgKHBhcnNlKTsKLSAgR1NUX0RFQlVHICgic3RvcCIpOwotICBhbXJwYXJzZS0+bmVlZF9oZWFkZXIgPSBUUlVFOwotICBhbXJwYXJzZS0+aGVhZGVyID0gMDsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9hbXJfcGFyc2Vfc2lua19nZXRjYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMsICp0ZW1wbDsKLSAgR3N0Q2FwcyAqcmVzOwotCi0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKHBhcnNlKSk7Ci0gIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgZmlsdGVyKTsKLQotICBpZiAocGVlcmNhcHMpIHsKLSAgICBndWludCBpLCBuOwotCi0gICAgLyogUmVuYW1lIHN0cnVjdHVyZSBuYW1lcyAqLwotICAgIHBlZXJjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAocGVlcmNhcHMpOwotICAgIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAocGVlcmNhcHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHBlZXJjYXBzLCBpKTsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby9BTVIiKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAocywgImF1ZGlvL3gtYW1yLW5iLXNoIik7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHMsICJhdWRpby94LWFtci13Yi1zaCIpOwotICAgIH0KLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICByZXMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChyZXMpOwotICAgIC8qIEFwcGVuZCB0aGUgdGVtcGxhdGUgY2FwcyBiZWNhdXNlIHdlIHN0aWxsIHdhbnQgdG8gYWNjZXB0Ci0gICAgICogY2FwcyB3aXRob3V0IGFueSBmaWVsZHMgaW4gdGhlIGNhc2UgdXBzdHJlYW0gZG9lcyBub3QKLSAgICAgKiBrbm93IGFueXRoaW5nLgotICAgICAqLwotICAgIGdzdF9jYXBzX2FwcGVuZCAocmVzLCB0ZW1wbCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gdGVtcGw7Ci0gIH0KLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgaW50ZXJzZWN0aW9uID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmVzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXMpOwotICAgIHJlcyA9IGludGVyc2VjdGlvbjsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYW1yX3BhcnNlX3ByZV9wdXNoX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0QW1yUGFyc2UgKmFtcnBhcnNlID0gR1NUX0FNUl9QQVJTRSAocGFyc2UpOwotCi0gIGlmICghYW1ycGFyc2UtPnNlbnRfY29kZWNfdGFnKSB7Ci0gICAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgLyogY29kZWMgdGFnICovCi0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoY2FwcyA9PSBOVUxMKSkgewotICAgICAgaWYgKEdTVF9QQURfSVNfRkxVU0hJTkcgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSkpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgIlNyYyBwYWQgaXMgZmx1c2hpbmciKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgIlNyYyBwYWQgaXMgbm90IG5lZ290aWF0ZWQhIik7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBnc3RfcGJfdXRpbHNfYWRkX2NvZGVjX2Rlc2NyaXB0aW9uX3RvX3RhZ19saXN0ICh0YWdsaXN0LAotICAgICAgICBHU1RfVEFHX0FVRElPX0NPREVDLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICBnc3RfYmFzZV9wYXJzZV9tZXJnZV90YWdzIChwYXJzZSwgdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotCi0gICAgLyogYWxzbyBzaWduYWxzIHRoZSBlbmQgb2YgZmlyc3QtZnJhbWUgcHJvY2Vzc2luZyAqLwotICAgIGFtcnBhcnNlLT5zZW50X2NvZGVjX3RhZyA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmggYi9nc3QvYXVkaW9wYXJzZXJzL2dzdGFtcnBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYTI5YzAuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RhbXJwYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogR1N0cmVhbWVyIEFkYXB0aXZlIE11bHRpLVJhdGUgcGFyc2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BTVJfUEFSU0VfSF9fCi0jZGVmaW5lIF9fR1NUX0FNUl9QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FNUl9QQVJTRSBcCi0gIChnc3RfYW1yX3BhcnNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BTVJfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfQU1SX1BBUlNFLCBHc3RBbXJQYXJzZSkpCi0jZGVmaW5lIEdTVF9BTVJfUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX0FNUl9QQVJTRSwgR3N0QW1yUGFyc2VDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BTVJfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfQU1SX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0lTX0FNUl9QQVJTRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfQU1SX1BBUlNFKSkKLQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QW1yUGFyc2UgR3N0QW1yUGFyc2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QW1yUGFyc2VDbGFzcyBHc3RBbXJQYXJzZUNsYXNzOwotCi0vKioKLSAqIEdzdEFtclBhcnNlOgotICogQGVsZW1lbnQ6IHRoZSBwYXJlbnQgZWxlbWVudC4KLSAqIEBibG9ja19zaXplOiBQb2ludGVyIHRvIGZyYW1lIHNpemUgbG9va3VwIHRhYmxlLgotICogQG5lZWRfaGVhZGVyOiBUZWxscyB3aGV0aGVyIHRoZSBNSU1FIGhlYWRlciBzaG91bGQgYmUgcmVhZCBpbiB0aGUgYmVnaW5uaW5nLgotICogQHdpZGU6IFdpZGViYW5kIG1vZGUuCi0gKgotICogVGhlIG9wYXF1ZSBHc3RBYWNQYXJzZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RBbXJQYXJzZSB7Ci0gIEdzdEJhc2VQYXJzZSBlbGVtZW50OwotICBjb25zdCBnaW50ICpibG9ja19zaXplOwotICBnYm9vbGVhbiBuZWVkX2hlYWRlcjsKLSAgZ2Jvb2xlYW4gc2VudF9jb2RlY190YWc7Ci0gIGdpbnQgaGVhZGVyOwotICBnYm9vbGVhbiB3aWRlOwotfTsKLQotLyoqCi0gKiBHc3RBbXJQYXJzZUNsYXNzOgotICogQHBhcmVudF9jbGFzczogRWxlbWVudCBwYXJlbnQgY2xhc3MuCi0gKgotICogVGhlIG9wYXF1ZSBHc3RBbXJQYXJzZUNsYXNzIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdEFtclBhcnNlQ2xhc3MgewotICBHc3RCYXNlUGFyc2VDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfYW1yX3BhcnNlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FNUl9QQVJTRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYyBiL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhNTYyMS4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OTEgKzAsMCBAQAotLyogR1N0cmVhbWVyIERDQSBwYXJzZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWRjYXBhcnNlCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IERDQSAoRFRTIENvaGVyZW50IEFjb3VzdGljcykgcGFyc2VyCi0gKiBAc2VlX2Fsc286ICNHc3RBbXJQYXJzZSwgI0dzdEFBQ1BhcnNlLCAjR3N0QWMzUGFyc2UKLSAqCi0gKiBUaGlzIGlzIGEgRENBIChEVFMgQ29oZXJlbnQgQWNvdXN0aWNzKSBwYXJzZXIuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249YWJjLmR0cyAhIGRjYXBhcnNlICEgZHRzZGVjICEgYXVkaW9yZXNhbXBsZSAhIGF1ZGlvY29udmVydCAhIGF1dG9hdWRpb3NpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qIFRPRE86Ci0gKiAgLSBzaG91bGQgYWNjZXB0IGZyYW1lZCBhbmQgdW5mcmFtZWQgaW5wdXQgKG5lZWRzIGRlY29kZWJpbiBmaXhlcyBmaXJzdCkKLSAqICAtIHNlZWtpbmcgaW4gcmF3IC5kdHMgZmlsZXMgZG9lc24ndCBzZWVtIHRvIHdvcmssIGJ1dCBkdXJhdGlvbiBlc3RpbWF0ZSBvawotICoKLSAqICAtIGlmIGZyYW1lcyBoYXZlICdvZGQnIGR1cmF0aW9ucywgdGhlIGZyYW1lIGR1cmF0aW9ucyAocGx1cyB0aW1lc3RhbXBzKQotICogICAgYXJlbid0IGFkanVzdGVkIHVwIG9jY2FzaW9uYWxseSB0byBtYWtlIHVwIGZvciByb3VuZGluZyBlcnJvciBnYXBzLgotICogICAgKGUuZy4gaWYgNTEyIHNhbXBsZXMgcGVyIGZyYW1lIEAgNDhrSHogPSAxMC42NjY2NjY2NjcgbXMvZnJhbWUpCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RkY2FwYXJzZS5oIgotI2luY2x1ZGUgPGdzdC9iYXNlL2Jhc2UuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGRjYV9wYXJzZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBkY2FfcGFyc2VfZGVidWcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWR0cywiCi0gICAgICAgICIgZnJhbWVkID0gKGJvb2xlYW4pIHRydWUsIgotICAgICAgICAiIGNoYW5uZWxzID0gKGludCkgWyAxLCA4IF0sIgotICAgICAgICAiIHJhdGUgPSAoaW50KSBbIDgwMDAsIDE5MjAwMCBdLCIKLSAgICAgICAgIiBkZXB0aCA9IChpbnQpIHsgMTQsIDE2IH0sIgotICAgICAgICAiIGVuZGlhbm5lc3MgPSAoaW50KSB7IExJVFRMRV9FTkRJQU4sIEJJR19FTkRJQU4gfSwgIgotICAgICAgICAiIGJsb2NrLXNpemUgPSAoaW50KSBbIDEsIE1BWF0sICIgIiBmcmFtZS1zaXplID0gKGludCkgWyAxLCBNQVhdIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtZHRzOyAiICJhdWRpby94LXByaXZhdGUxLWR0cyIpKTsKLQotc3RhdGljIHZvaWQgZ3N0X2RjYV9wYXJzZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGNhX3BhcnNlX3N0YXJ0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RjYV9wYXJzZV9zdG9wIChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZGNhX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kY2FfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpOwotc3RhdGljIEdzdENhcHMgKmdzdF9kY2FfcGFyc2VfZ2V0X3NpbmtfY2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RjYV9wYXJzZV9zZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X2RjYV9wYXJzZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3REY2FQYXJzZSwgZ3N0X2RjYV9wYXJzZSwgR1NUX1RZUEVfQkFTRV9QQVJTRSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGNhX3BhcnNlX2NsYXNzX2luaXQgKEdzdERjYVBhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKnBhcnNlX2NsYXNzID0gR1NUX0JBU0VfUEFSU0VfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkY2FfcGFyc2VfZGVidWcsICJkY2FwYXJzZSIsIDAsCi0gICAgICAiRENBIGF1ZGlvIHN0cmVhbSBwYXJzZXIiKTsKLQotICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2RjYV9wYXJzZV9maW5hbGl6ZTsKLQotICBwYXJzZV9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RjYV9wYXJzZV9zdGFydCk7Ci0gIHBhcnNlX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kY2FfcGFyc2Vfc3RvcCk7Ci0gIHBhcnNlX2NsYXNzLT5oYW5kbGVfZnJhbWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RjYV9wYXJzZV9oYW5kbGVfZnJhbWUpOwotICBwYXJzZV9jbGFzcy0+cHJlX3B1c2hfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kY2FfcGFyc2VfcHJlX3B1c2hfZnJhbWUpOwotICBwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGNhX3BhcnNlX2dldF9zaW5rX2NhcHMpOwotICBwYXJzZV9jbGFzcy0+c2V0X3NpbmtfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGNhX3BhcnNlX3NldF9zaW5rX2NhcHMpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIkRUUyBDb2hlcmVudCBBY291c3RpY3MgYXVkaW8gc3RyZWFtIHBhcnNlciIsICJDb2RlYy9QYXJzZXIvQXVkaW8iLAotICAgICAgIkRDQSBwYXJzZXIiLCAiVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kY2FfcGFyc2VfcmVzZXQgKEdzdERjYVBhcnNlICogZGNhcGFyc2UpCi17Ci0gIGRjYXBhcnNlLT5jaGFubmVscyA9IC0xOwotICBkY2FwYXJzZS0+cmF0ZSA9IC0xOwotICBkY2FwYXJzZS0+ZGVwdGggPSAtMTsKLSAgZGNhcGFyc2UtPmVuZGlhbm5lc3MgPSAtMTsKLSAgZGNhcGFyc2UtPmJsb2NrX3NpemUgPSAtMTsKLSAgZGNhcGFyc2UtPmZyYW1lX3NpemUgPSAtMTsKLSAgZGNhcGFyc2UtPmxhc3Rfc3luYyA9IDA7Ci0gIGRjYXBhcnNlLT5zZW50X2NvZGVjX3RhZyA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RjYV9wYXJzZV9pbml0IChHc3REY2FQYXJzZSAqIGRjYXBhcnNlKQotewotICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKEdTVF9CQVNFX1BBUlNFIChkY2FwYXJzZSksCi0gICAgICBEQ0FfTUlOX0ZSQU1FU0laRSk7Ci0gIGdzdF9kY2FfcGFyc2VfcmVzZXQgKGRjYXBhcnNlKTsKLSAgZGNhcGFyc2UtPmJhc2VwYXJzZV9jaGFpbmZ1bmMgPQotICAgICAgR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKEdTVF9CQVNFX1BBUlNFIChkY2FwYXJzZSkpLT5jaGFpbmZ1bmM7Ci0KLSAgR1NUX1BBRF9TRVRfQUNDRVBUX0lOVEVSU0VDVCAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKGRjYXBhcnNlKSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKGRjYXBhcnNlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGNhX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RjYV9wYXJzZV9zdGFydCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdERjYVBhcnNlICpkY2FwYXJzZSA9IEdTVF9EQ0FfUEFSU0UgKHBhcnNlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN0YXJ0aW5nIik7Ci0KLSAgZ3N0X2RjYV9wYXJzZV9yZXNldCAoZGNhcGFyc2UpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kY2FfcGFyc2Vfc3RvcCAoR3N0QmFzZVBhcnNlICogcGFyc2UpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic3RvcHBpbmciKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGNhX3BhcnNlX3BhcnNlX2hlYWRlciAoR3N0RGNhUGFyc2UgKiBkY2FwYXJzZSwKLSAgICBjb25zdCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludCAqIGZyYW1lX3NpemUsCi0gICAgZ3VpbnQgKiBzYW1wbGVfcmF0ZSwgZ3VpbnQgKiBjaGFubmVscywgZ3VpbnQgKiBkZXB0aCwKLSAgICBnaW50ICogZW5kaWFubmVzcywgZ3VpbnQgKiBudW1fYmxvY2tzLCBndWludCAqIHNhbXBsZXNfcGVyX2Jsb2NrLAotICAgIGdib29sZWFuICogdGVybWluYXRvcikKLXsKLSAgc3RhdGljIGNvbnN0IGludCBzYW1wbGVfcmF0ZXNbMTZdID0geyAwLCA4MDAwLCAxNjAwMCwgMzIwMDAsIDAsIDAsIDExMDI1LAotICAgIDIyMDUwLCA0NDEwMCwgMCwgMCwgMTIwMDAsIDI0MDAwLCA0ODAwMCwgOTYwMDAsIDE5MjAwMAotICB9OwotICBzdGF0aWMgY29uc3QgZ3VpbnQ4IGNoYW5uZWxzX3RhYmxlWzE2XSA9IHsgMSwgMiwgMiwgMiwgMiwgMywgMywgNCwgNCwgNSwKLSAgICA2LCA2LCA2LCA3LCA4LCA4Ci0gIH07Ci0gIEdzdEJ5dGVSZWFkZXIgciA9ICpyZWFkZXI7Ci0gIGd1aW50MTYgaGRyWzhdOwotICBndWludDMyIG1hcmtlcjsKLSAgZ3VpbnQgY2hhbnMsIGxmZSwgaTsKLQotICBpZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyKSA8ICg0ICsgc2l6ZW9mIChoZHIpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgbWFya2VyID0gZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZCAoJnIpOwotCi0gIC8qIHJhdyBiaWcgZW5kaWFuIG9yIDE0LWJpdCBiaWcgZW5kaWFuICovCi0gIGlmIChtYXJrZXIgPT0gMHg3RkZFODAwMSB8fCBtYXJrZXIgPT0gMHgxRkZGRTgwMCkgewotICAgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGhkcik7ICsraSkKLSAgICAgIGhkcltpXSA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJnIpOwotICB9IGVsc2UKLSAgICAvKiByYXcgbGl0dGxlIGVuZGlhbiBvciAxNC1iaXQgbGl0dGxlIGVuZGlhbiAqLwotICBpZiAobWFya2VyID09IDB4RkU3RjAxODAgfHwgbWFya2VyID09IDB4RkYxRjAwRTgpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChoZHIpOyArK2kpCi0gICAgICBoZHJbaV0gPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZV91bmNoZWNrZWQgKCZyKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoZGNhcGFyc2UsICJkdHMgc3luYyBtYXJrZXIgMHglMDh4IGF0IG9mZnNldCAldSIsIG1hcmtlciwKLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zIChyZWFkZXIpKTsKLQotICAvKiAxNC1iaXQgbW9kZSAqLwotICBpZiAobWFya2VyID09IDB4MUZGRkU4MDAgfHwgbWFya2VyID09IDB4RkYxRjAwRTgpIHsKLSAgICBpZiAoKGhkclsyXSAmIDB4RkZGMCkgIT0gMHgwN0YwKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIC8qIGRpc2NhcmQgdG9wIDIgYml0cyAoMiB2b2lkKSwgc2hpZnQgaW4gMiAqLwotICAgIGhkclswXSA9IChoZHJbMF0gPDwgMikgfCAoKGhkclsxXSA+PiAxMikgJiAweDAwMDMpOwotICAgIC8qIGRpc2NhcmQgdG9wIDQgYml0cyAoMiB2b2lkLCAyIHNoaWZ0ZWQgaW50byBoZHJbMF0pLCBzaGlmdCBpbiA0IGV0Yy4gKi8KLSAgICBoZHJbMV0gPSAoaGRyWzFdIDw8IDQpIHwgKChoZHJbMl0gPj4gMTApICYgMHgwMDBGKTsKLSAgICBoZHJbMl0gPSAoaGRyWzJdIDw8IDYpIHwgKChoZHJbM10gPj4gOCkgJiAweDAwM0YpOwotICAgIGhkclszXSA9IChoZHJbM10gPDwgOCkgfCAoKGhkcls0XSA+PiA2KSAmIDB4MDBGRik7Ci0gICAgaGRyWzRdID0gKGhkcls0XSA8PCAxMCkgfCAoKGhkcls1XSA+PiA0KSAmIDB4MDNGRik7Ci0gICAgaGRyWzVdID0gKGhkcls1XSA8PCAxMikgfCAoKGhkcls2XSA+PiAyKSAmIDB4MEZGRik7Ci0gICAgaGRyWzZdID0gKGhkcls2XSA8PCAxNCkgfCAoKGhkcls3XSA+PiAwKSAmIDB4M0ZGRik7Ci0gICAgZ19hc3NlcnQgKGhkclswXSA9PSAweDdGRkUgJiYgaGRyWzFdID09IDB4ODAwMSk7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoZGNhcGFyc2UsICJmcmFtZSBoZWFkZXI6ICUwNHglMDR4JTA0eCUwNHgiLAotICAgICAgaGRyWzJdLCBoZHJbM10sIGhkcls0XSwgaGRyWzVdKTsKLQotICAqdGVybWluYXRvciA9IChoZHJbMl0gJiAweDgwKSA/IEZBTFNFIDogVFJVRTsKLSAgKnNhbXBsZXNfcGVyX2Jsb2NrID0gKChoZHJbMl0gPj4gMTApICYgMHgxZikgKyAxOwotICAqbnVtX2Jsb2NrcyA9ICgoaGRyWzJdID4+IDIpICYgMHg3RikgKyAxOwotICAqZnJhbWVfc2l6ZSA9ICgoKGhkclsyXSAmIDB4MDMpIDw8IDEyKSB8IChoZHJbM10gPj4gNCkpICsgMTsKLSAgY2hhbnMgPSAoKGhkclszXSAmIDB4MEYpIDw8IDIpIHwgKGhkcls0XSA+PiAxNCk7Ci0gICpzYW1wbGVfcmF0ZSA9IHNhbXBsZV9yYXRlc1soaGRyWzRdID4+IDEwKSAmIDB4MEZdOwotICBsZmUgPSAoaGRyWzVdID4+IDkpICYgMHgwMzsKLQotICBHU1RfVFJBQ0VfT0JKRUNUIChkY2FwYXJzZSwgImZyYW1lIHNpemUgJXUsIG51bV9ibG9ja3MgJXUsIHJhdGUgJXUsICIKLSAgICAgICJzYW1wbGVzIHBlciBibG9jayAldSIsICpmcmFtZV9zaXplLCAqbnVtX2Jsb2NrcywgKnNhbXBsZV9yYXRlLAotICAgICAgKnNhbXBsZXNfcGVyX2Jsb2NrKTsKLQotICBpZiAoKm51bV9ibG9ja3MgPCA2IHx8ICpmcmFtZV9zaXplIDwgOTYgfHwgKnNhbXBsZV9yYXRlID09IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChtYXJrZXIgPT0gMHgxRkZGRTgwMCB8fCBtYXJrZXIgPT0gMHhGRjFGMDBFOCkKLSAgICAqZnJhbWVfc2l6ZSA9ICgqZnJhbWVfc2l6ZSAqIDE2KSAvIDE0OyAgICAgIC8qIEZJWE1FOiByb3VuZCB1cD8gKi8KLQotICBpZiAoY2hhbnMgPCBHX05fRUxFTUVOVFMgKGNoYW5uZWxzX3RhYmxlKSkKLSAgICAqY2hhbm5lbHMgPSBjaGFubmVsc190YWJsZVtjaGFuc10gKyAoKGxmZSkgPyAxIDogMCk7Ci0gIGVsc2UKLSAgICAqY2hhbm5lbHMgPSAwOwotCi0gIGlmIChkZXB0aCkKLSAgICAqZGVwdGggPSAobWFya2VyID09IDB4MUZGRkU4MDAgfHwgbWFya2VyID09IDB4RkYxRjAwRTgpID8gMTQgOiAxNjsKLSAgaWYgKGVuZGlhbm5lc3MpCi0gICAgKmVuZGlhbm5lc3MgPSAobWFya2VyID09IDB4RkU3RjAxODAgfHwgbWFya2VyID09IDB4RkYxRjAwRTgpID8KLSAgICAgICAgR19MSVRUTEVfRU5ESUFOIDogR19CSUdfRU5ESUFOOwotCi0gIEdTVF9UUkFDRV9PQkpFQ1QgKGRjYXBhcnNlLCAiZnJhbWUgc2l6ZSAldSwgY2hhbm5lbHMgJXUsIHJhdGUgJXUsICIKLSAgICAgICJudW1fYmxvY2tzICV1LCBzYW1wbGVzX3Blcl9ibG9jayAldSIsICpmcmFtZV9zaXplLCAqY2hhbm5lbHMsCi0gICAgICAqc2FtcGxlX3JhdGUsICpudW1fYmxvY2tzLCAqc2FtcGxlc19wZXJfYmxvY2spOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2RjYV9wYXJzZV9maW5kX3N5bmMgKEdzdERjYVBhcnNlICogZGNhcGFyc2UsIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsCi0gICAgZ3NpemUgYnVmc2l6ZSwgZ3VpbnQzMiAqIHN5bmMpCi17Ci0gIGd1aW50MzIgYmVzdF9zeW5jID0gMDsKLSAgZ3VpbnQgYmVzdF9vZmZzZXQgPSBHX01BWFVJTlQ7Ci0gIGdpbnQgb2ZmOwotCi0gIC8qIEZJWE1FOiB2ZXJpZnkgc3luY3MgdmlhIF9wYXJzZV9oZWFkZXIoKSBoZXJlIGFscmVhZHkgKi8KLQotICAvKiBSYXcgbGl0dGxlIGVuZGlhbiAqLwotICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4ZmU3ZjAxODAsCi0gICAgICAwLCBidWZzaXplKTsKLSAgaWYgKG9mZiA+PSAwICYmIG9mZiA8IGJlc3Rfb2Zmc2V0KSB7Ci0gICAgYmVzdF9vZmZzZXQgPSBvZmY7Ci0gICAgYmVzdF9zeW5jID0gMHhmZTdmMDE4MDsKLSAgfQotCi0gIC8qIFJhdyBiaWcgZW5kaWFuICovCi0gIG9mZiA9IGdzdF9ieXRlX3JlYWRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJlYWRlciwgMHhmZmZmZmZmZiwgMHg3ZmZlODAwMSwKLSAgICAgIDAsIGJ1ZnNpemUpOwotICBpZiAob2ZmID49IDAgJiYgb2ZmIDwgYmVzdF9vZmZzZXQpIHsKLSAgICBiZXN0X29mZnNldCA9IG9mZjsKLSAgICBiZXN0X3N5bmMgPSAweDdmZmU4MDAxOwotICB9Ci0KLSAgLyogRklYTUU6IGNoZWNrIG5leHQgMiBieXRlcyBhcyB3ZWxsIGZvciAxNC1iaXQgZm9ybWF0cyAoYnV0IHRoZW4gZG9uJ3QKLSAgICogZm9yZ2V0IHRvIGFkanVzdCB0aGUgKnNraXBzaXplPSBpbiBfY2hlY2tfdmFsaWRfZnJhbWUoKSAqLwotCi0gIC8qIDE0LWJpdCBsaXR0bGUgZW5kaWFuICAqLwotICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4ZmYxZjAwZTgsCi0gICAgICAwLCBidWZzaXplKTsKLSAgaWYgKG9mZiA+PSAwICYmIG9mZiA8IGJlc3Rfb2Zmc2V0KSB7Ci0gICAgYmVzdF9vZmZzZXQgPSBvZmY7Ci0gICAgYmVzdF9zeW5jID0gMHhmZjFmMDBlODsKLSAgfQotCi0gIC8qIDE0LWJpdCBiaWcgZW5kaWFuICAqLwotICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyIChyZWFkZXIsIDB4ZmZmZmZmZmYsIDB4MWZmZmU4MDAsCi0gICAgICAwLCBidWZzaXplKTsKLSAgaWYgKG9mZiA+PSAwICYmIG9mZiA8IGJlc3Rfb2Zmc2V0KSB7Ci0gICAgYmVzdF9vZmZzZXQgPSBvZmY7Ci0gICAgYmVzdF9zeW5jID0gMHgxZmZmZTgwMDsKLSAgfQotCi0gIGlmIChiZXN0X29mZnNldCA9PSBHX01BWFVJTlQpCi0gICAgcmV0dXJuIC0xOwotCi0gICpzeW5jID0gYmVzdF9zeW5jOwotICByZXR1cm4gYmVzdF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZGNhX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKQotewotICBHc3REY2FQYXJzZSAqZGNhcGFyc2UgPSBHU1RfRENBX1BBUlNFIChwYXJzZSk7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZnJhbWUtPmJ1ZmZlcjsKLSAgR3N0Qnl0ZVJlYWRlciByOwotICBnYm9vbGVhbiBwYXJzZXJfaW5fc3luYzsKLSAgZ2Jvb2xlYW4gdGVybWluYXRvcjsKLSAgZ3VpbnQzMiBzeW5jID0gMDsKLSAgZ3VpbnQgc2l6ZSA9IDAsIHJhdGUsIGNoYW5zLCBudW1fYmxvY2tzLCBzYW1wbGVzX3Blcl9ibG9jaywgZGVwdGg7Ci0gIGdpbnQgYmxvY2tfc2l6ZTsKLSAgZ2ludCBlbmRpYW5uZXNzOwotICBnaW50IG9mZiA9IC0xOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19FT1M7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICBpZiAoR19VTkxJS0VMWSAobWFwLnNpemUgPCAxNikpIHsKLSAgICAqc2tpcHNpemUgPSAxOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIHBhcnNlcl9pbl9zeW5jID0gIUdTVF9CQVNFX1BBUlNFX0xPU1RfU1lOQyAocGFyc2UpOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmciwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICBpZiAoR19MSUtFTFkgKHBhcnNlcl9pbl9zeW5jICYmIGRjYXBhcnNlLT5sYXN0X3N5bmMgIT0gMCkpIHsKLSAgICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgmciwgMHhmZmZmZmZmZiwKLSAgICAgICAgZGNhcGFyc2UtPmxhc3Rfc3luYywgMCwgbWFwLnNpemUpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG9mZiA8IDApKSB7Ci0gICAgb2ZmID0gZ3N0X2RjYV9wYXJzZV9maW5kX3N5bmMgKGRjYXBhcnNlLCAmciwgbWFwLnNpemUsICZzeW5jKTsKLSAgfQotCi0gIC8qIGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIHN5bmMgd29yZCwgc2tpcCAqLwotICBpZiAob2ZmIDwgMCkgewotICAgICpza2lwc2l6ZSA9IG1hcC5zaXplIC0gMzsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkY2FwYXJzZSwgIm5vIHN5bmMsIHNraXBwaW5nICVkIGJ5dGVzIiwgKnNraXBzaXplKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJwb3NzaWJsZSBzeW5jICUwOHggYXQgYnVmZmVyIG9mZnNldCAlZCIsIHN5bmMsIG9mZik7Ci0KLSAgLyogcG9zc2libGUgZnJhbWUgaGVhZGVyLCBidXQgbm90IGF0IG9mZnNldCAwPyBza2lwIGJ5dGVzIGJlZm9yZSBzeW5jICovCi0gIGlmIChvZmYgPiAwKSB7Ci0gICAgKnNraXBzaXplID0gb2ZmOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIC8qIG1ha2Ugc3VyZSB0aGUgdmFsdWVzIGluIHRoZSBmcmFtZSBoZWFkZXIgbG9vayBzYW5lICovCi0gIGlmICghZ3N0X2RjYV9wYXJzZV9wYXJzZV9oZWFkZXIgKGRjYXBhcnNlLCAmciwgJnNpemUsICZyYXRlLCAmY2hhbnMsICZkZXB0aCwKLSAgICAgICAgICAmZW5kaWFubmVzcywgJm51bV9ibG9ja3MsICZzYW1wbGVzX3Blcl9ibG9jaywgJnRlcm1pbmF0b3IpKSB7Ci0gICAgKnNraXBzaXplID0gNDsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJnb3QgZnJhbWUsIHN5bmMgJTA4eCwgc2l6ZSAldSwgcmF0ZSAlZCwgY2hhbm5lbHMgJWQiLAotICAgICAgc3luYywgc2l6ZSwgcmF0ZSwgY2hhbnMpOwotCi0gIGRjYXBhcnNlLT5sYXN0X3N5bmMgPSBzeW5jOwotCi0gIC8qIEZJWE1FOiBEb24ndCBsb29rIGZvciBhIHNlY29uZCBzeW5jd29yZCwgdGhlcmUgYXJlIHN0cmVhbXMgb3V0IHRoZXJlCi0gICAqIHRoYXQgY29uc2lzdGVudGx5IGNvbnRhaW4gZ2FyYmFnZSBiZXR3ZWVuIGV2ZXJ5IGZyYW1lIHNvIHdlIG5ldmVyIGV2ZXIKLSAgICogZmluZCBhIHNlY29uZCBjb25zZWN1dGl2ZSBzeW5jd29yZC4KLSAgICogU2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzgyMzcKLSAgICovCi0jaWYgMAotICBwYXJzZXJfZHJhaW5pbmcgPSBHU1RfQkFTRV9QQVJTRV9EUkFJTklORyAocGFyc2UpOwotCi0gIGlmICghcGFyc2VyX2luX3N5bmMgJiYgIXBhcnNlcl9kcmFpbmluZykgewotICAgIC8qIGNoZWNrIGZvciBzZWNvbmQgZnJhbWUgdG8gYmUgc3VyZSAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRjYXBhcnNlLCAicmVzeW5jaW5nOyBjaGVja2luZyBuZXh0IGZyYW1lIHN5bmN3b3JkIik7Ci0gICAgaWYgKG1hcC5zaXplID49IChzaXplICsgMTYpKSB7Ci0gICAgICBndWludCBzMiwgcjIsIGMyLCBuMiwgczM7Ci0gICAgICBnYm9vbGVhbiB0OwotCi0gICAgICBHU1RfTUVNRFVNUCAoImJ1ZiIsIG1hcC5kYXRhLCBzaXplICsgMTYpOwotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmciwgc2l6ZSk7Ci0KLSAgICAgIGlmICghZ3N0X2RjYV9wYXJzZV9wYXJzZV9oZWFkZXIgKGRjYXBhcnNlLCAmciwgJnMyLCAmcjIsICZjMiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgJm4yLCAmczMsICZ0KSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkY2FwYXJzZSwgImRpZG4ndCBmaW5kIHNlY29uZCBzeW5jd29yZCIpOwotICAgICAgICAqc2tpcHNpemUgPSA0OwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG9rLCBnb3Qgc3luYyBub3csIGxldCdzIGFzc3VtZSBjb25zdGFudCBmcmFtZSBzaXplICovCi0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKHBhcnNlLCBzaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogd2FpdCBmb3Igc29tZSBtb3JlIGRhdGEgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkY2FwYXJzZSwKLSAgICAgICAgICAibmV4dCBzeW5jIG91dCBvZiByZWFjaCAoJSIgR19HU0laRV9GT1JNQVQgIiA8ICV1KSIsIG1hcC5zaXplLAotICAgICAgICAgIHNpemUgKyAxNik7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICAvKiBmb3VuZCBmcmFtZSAqLwotICByZXQgPSBHU1RfRkxPV19PSzsKLQotICAvKiBtZXRhZGF0YSBoYW5kbGluZyAqLwotICBibG9ja19zaXplID0gbnVtX2Jsb2NrcyAqIHNhbXBsZXNfcGVyX2Jsb2NrOwotCi0gIGlmIChHX1VOTElLRUxZIChkY2FwYXJzZS0+cmF0ZSAhPSByYXRlIHx8IGRjYXBhcnNlLT5jaGFubmVscyAhPSBjaGFucwotICAgICAgICAgIHx8IGRjYXBhcnNlLT5kZXB0aCAhPSBkZXB0aCB8fCBkY2FwYXJzZS0+ZW5kaWFubmVzcyAhPSBlbmRpYW5uZXNzCi0gICAgICAgICAgfHwgKCF0ZXJtaW5hdG9yICYmIGRjYXBhcnNlLT5ibG9ja19zaXplICE9IGJsb2NrX3NpemUpCi0gICAgICAgICAgfHwgKHNpemUgIT0gZGNhcGFyc2UtPmZyYW1lX3NpemUpKSkgewotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtZHRzIiwKLSAgICAgICAgImZyYW1lZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIHJhdGUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5zLAotICAgICAgICAiZW5kaWFubmVzcyIsIEdfVFlQRV9JTlQsIGVuZGlhbm5lc3MsICJkZXB0aCIsIEdfVFlQRV9JTlQsIGRlcHRoLAotICAgICAgICAiYmxvY2stc2l6ZSIsIEdfVFlQRV9JTlQsIGJsb2NrX3NpemUsICJmcmFtZS1zaXplIiwgR19UWVBFX0lOVCwgc2l6ZSwKLSAgICAgICAgTlVMTCk7Ci0gICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICBkY2FwYXJzZS0+cmF0ZSA9IHJhdGU7Ci0gICAgZGNhcGFyc2UtPmNoYW5uZWxzID0gY2hhbnM7Ci0gICAgZGNhcGFyc2UtPmRlcHRoID0gZGVwdGg7Ci0gICAgZGNhcGFyc2UtPmVuZGlhbm5lc3MgPSBlbmRpYW5uZXNzOwotICAgIGRjYXBhcnNlLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKLSAgICBkY2FwYXJzZS0+ZnJhbWVfc2l6ZSA9IHNpemU7Ci0KLSAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAocGFyc2UsIHJhdGUsIGJsb2NrX3NpemUsIDAsIDApOwotICB9Ci0KLWNsZWFudXA6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgaWYgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBzaXplIDw9IG1hcC5zaXplKSB7Ci0gICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUsIHNpemUpOwotICB9IGVsc2UgewotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIE1QRUctUFMgcHJpdmF0ZTEgc3RyZWFtcyBhZGQgYSAyIGJ5dGVzICJBdWRpbyBTdWJzdHJlYW0gSGVhZGVycyIgZm9yIGVhY2gKLSAqIGJ1ZmZlciAobm90IGVhY2ggZnJhbWUpIHdpdGggdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBmcmFtZSdzIHN0YXJ0LgotICogVGhlc2UgMiBieXRlcyBjYW4gYmUgZHJvcHBlZCBzYWZlbHkgYXMgdGhleSBkbyBub3QgaW5jbHVkZSBhbnkgdGltaW5nCi0gKiBpbmZvcm1hdGlvbiwgb25seSB0aGUgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBmcmFtZS4KLSAqIFNlZSBnc3RhYzNwYXJzZS5jIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24uCi0gKiAqLwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2RjYV9wYXJzZV9jaGFpbl9wcml2IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3REY2FQYXJzZSAqZGNhcGFyc2UgPSBHU1RfRENBX1BBUlNFIChwYXJlbnQpOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0QnVmZmVyICpuZXdidWY7Ci0gIGdzaXplIHNpemU7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0gIGlmIChzaXplID49IDIpIHsKLSAgICBuZXdidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDIsIHNpemUgLSAyKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldCA9IGRjYXBhcnNlLT5iYXNlcGFyc2VfY2hhaW5mdW5jIChwYWQsIHBhcmVudCwgbmV3YnVmKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9maWVsZHMgKEdzdENhcHMgKiBjYXBzKQotewotICBndWludCBpLCBuOwotCi0gIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiZnJhbWVkIik7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2RjYV9wYXJzZV9nZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMsICp0ZW1wbDsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSkpOwotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqZmNvcHkgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIC8qIFJlbW92ZSB0aGUgZmllbGRzIHdlIGNvbnZlcnQgKi8KLSAgICByZW1vdmVfZmllbGRzIChmY29weSk7Ci0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBmY29weSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZjb3B5KTsKLSAgfSBlbHNlCi0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBOVUxMKTsKLQotICBpZiAocGVlcmNhcHMpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGZyYW1lZCBmaWVsZCAqLwotICAgIHBlZXJjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAocGVlcmNhcHMpOwotICAgIHJlbW92ZV9maWVsZHMgKHBlZXJjYXBzKTsKLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotICB9IGVsc2UgewotICAgIHJlcyA9IHRlbXBsOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLSAgICByZXMgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kY2FfcGFyc2Vfc2V0X3NpbmtfY2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdERjYVBhcnNlICpkY2FwYXJzZSA9IEdTVF9EQ0FfUEFSU0UgKHBhcnNlKTsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXVkaW8veC1wcml2YXRlMS1kdHMiKSkgewotICAgIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChwYXJzZS0+c2lua3BhZCwgZ3N0X2RjYV9wYXJzZV9jaGFpbl9wcml2KTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGFyc2UtPnNpbmtwYWQsIGRjYXBhcnNlLT5iYXNlcGFyc2VfY2hhaW5mdW5jKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kY2FfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQotewotICBHc3REY2FQYXJzZSAqZGNhcGFyc2UgPSBHU1RfRENBX1BBUlNFIChwYXJzZSk7Ci0KLSAgaWYgKCFkY2FwYXJzZS0+c2VudF9jb2RlY190YWcpIHsKLSAgICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAvKiBjb2RlYyB0YWcgKi8KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSkpOwotICAgIGlmIChHX1VOTElLRUxZIChjYXBzID09IE5VTEwpKSB7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBmbHVzaGluZyIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBub3QgbmVnb3RpYXRlZCEiKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgICAgfQotICAgIH0KLQotICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgIGdzdF9wYl91dGlsc19hZGRfY29kZWNfZGVzY3JpcHRpb25fdG9fdGFnX2xpc3QgKHRhZ2xpc3QsCi0gICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MgKHBhcnNlLCB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0KLSAgICAvKiBhbHNvIHNpZ25hbHMgdGhlIGVuZCBvZiBmaXJzdC1mcmFtZSBwcm9jZXNzaW5nICovCi0gICAgZGNhcGFyc2UtPnNlbnRfY29kZWNfdGFnID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuaCBiL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZGNhcGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE5OGEwNi4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9wYXJzZXJzL2dzdGRjYXBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgRENBIHBhcnNlcgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9EQ0FfUEFSU0VfSF9fCi0jZGVmaW5lIF9fR1NUX0RDQV9QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0RDQV9QQVJTRSBcCi0gIChnc3RfZGNhX3BhcnNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9EQ0FfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfRENBX1BBUlNFLCBHc3REY2FQYXJzZSkpCi0jZGVmaW5lIEdTVF9EQ0FfUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX0RDQV9QQVJTRSwgR3N0RGNhUGFyc2VDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19EQ0FfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfRENBX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0lTX0RDQV9QQVJTRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfRENBX1BBUlNFKSkKLQotI2RlZmluZSBEQ0FfTUlOX0ZSQU1FU0laRSA5NgotI2RlZmluZSBEQ0FfTUFYX0ZSQU1FU0laRSAxODcyNSAvKiAxNjM4NCoxNi8xNCAqLwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RGNhUGFyc2UgR3N0RGNhUGFyc2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RGNhUGFyc2VDbGFzcyBHc3REY2FQYXJzZUNsYXNzOwotCi0vKioKLSAqIEdzdERjYVBhcnNlOgotICoKLSAqIFRoZSBvcGFxdWUgR3N0RGNhUGFyc2Ugb2JqZWN0Ci0gKi8KLXN0cnVjdCBfR3N0RGNhUGFyc2UgewotICBHc3RCYXNlUGFyc2UgYmFzZXBhcnNlOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBnaW50ICAgICAgICAgICAgICAgICAgcmF0ZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIGNoYW5uZWxzOwotICBnaW50ICAgICAgICAgICAgICAgICAgZGVwdGg7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICBlbmRpYW5uZXNzOwotICBnaW50ICAgICAgICAgICAgICAgICAgYmxvY2tfc2l6ZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIGZyYW1lX3NpemU7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgIHNlbnRfY29kZWNfdGFnOwotCi0gIGd1aW50MzIgICAgICAgICAgICAgICBsYXN0X3N5bmM7Ci0KLSAgR3N0UGFkQ2hhaW5GdW5jdGlvbiAgIGJhc2VwYXJzZV9jaGFpbmZ1bmM7Ci19OwotCi0vKioKLSAqIEdzdERjYVBhcnNlQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBFbGVtZW50IHBhcmVudCBjbGFzcy4KLSAqCi0gKiBUaGUgb3BhcXVlIEdzdERjYVBhcnNlQ2xhc3MgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0RGNhUGFyc2VDbGFzcyB7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzIGJhc2VwYXJzZV9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9kY2FfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRENBX1BBUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYyBiL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzYxMzcuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RmbGFjcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPi4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1mbGFjcGFyc2UKLSAqIEBzZWVfYWxzbzogZmxhY2RlYywgb2dnZGVtdXgsIHZvcmJpc3BhcnNlCi0gKgotICogVGhlIGZsYWNwYXJzZSBlbGVtZW50IHdpbGwgcGFyc2UgdGhlIGhlYWRlciBwYWNrZXRzIG9mIHRoZSBGTEFDCi0gKiBzdHJlYW0gYW5kIHB1dCB0aGVtIGFzIHRoZSBzdHJlYW1oZWFkZXIgaW4gdGhlIGNhcHMuIFRoaXMgaXMgdXNlZCBpbiB0aGUKLSAqIG11bHRpZmRzaW5rIGNhc2Ugd2hlcmUgeW91IHdhbnQgdG8gc3RyZWFtIGxpdmUgRkxBQyBzdHJlYW1zIHRvIG11bHRpcGxlCi0gKiBjbGllbnRzLCBlYWNoIGNsaWVudCBoYXMgdG8gcmVjZWl2ZSB0aGUgc3RyZWFtaGVhZGVycyBmaXJzdCBiZWZvcmUgdGhleSBjYW4KLSAqIGNvbnN1bWUgdGhlIEZMQUMgcGFja2V0cy4KLSAqCi0gKiBUaGlzIGVsZW1lbnQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgdGhlIGJ1ZmZlcnMgdGhhdCBpdCBwdXNoZXMgb3V0IGFyZSBwcm9wZXJseQotICogdGltZXN0YW1wZWQgYW5kIHRoYXQgdGhlaXIgb2Zmc2V0IGFuZCBvZmZzZXRfZW5kIGFyZSBzZXQuIFRoZSBidWZmZXJzIHRoYXQKLSAqIGZsYWNwYXJzZSBvdXRwdXRzIGhhdmUgYWxsIG9mIHRoZSBtZXRhZGF0YSB0aGF0IG9nZ211eCBleHBlY3RzIHRvIHJlY2VpdmUsCi0gKiB3aGljaCBhbGxvd3MgeW91IHRvIChmb3IgZXhhbXBsZSkgcmVtdXggYW4gb2dnL2ZsYWMgb3IgY29udmVydCBhIG5hdGl2ZSBGTEFDCi0gKiBmb3JtYXQgZmlsZSB0byBhbiBvZ2cgYml0c3RyZWFtLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmlsZXNyYyBsb2NhdGlvbj1zaW5lLmZsYWMgISBmbGFjcGFyc2UgISBpZGVudGl0eSBcCi0gKiAgICAgICAgICAgICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249c2luZS1yZW11eGVkLm9nZwotICogXXwgVGhpcyBwaXBlbGluZSBjb252ZXJ0cyBhIG5hdGl2ZSBGTEFDIGZvcm1hdCBmaWxlIHRvIGFuIG9nZyBiaXRzdHJlYW0uCi0gKiBJdCBhbHNvIGlsbHVzdHJhdGVzIHRoYXQgdGhlIHN0cmVhbWhlYWRlciBpcyBzZXQgaW4gdGhlIGNhcHMsIGFuZCB0aGF0IGVhY2gKLSAqIGJ1ZmZlciBoYXMgdGhlIHRpbWVzdGFtcCwgZHVyYXRpb24sIG9mZnNldCwgYW5kIG9mZnNldF9lbmQgc2V0LgotICogPC9yZWZzZWN0Mj4KLSAqCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0ZmxhY3BhcnNlLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2Jhc2UuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGZsYWNwYXJzZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBmbGFjcGFyc2VfZGVidWcKLQotLyogQ1JDLTgsIHBvbHkgPSB4XjggKyB4XjIgKyB4XjEgKyB4XjAsIGluaXQgPSAwICovCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGNyYzhfdGFibGVbMjU2XSA9IHsKLSAgMHgwMCwgMHgwNywgMHgwRSwgMHgwOSwgMHgxQywgMHgxQiwgMHgxMiwgMHgxNSwKLSAgMHgzOCwgMHgzRiwgMHgzNiwgMHgzMSwgMHgyNCwgMHgyMywgMHgyQSwgMHgyRCwKLSAgMHg3MCwgMHg3NywgMHg3RSwgMHg3OSwgMHg2QywgMHg2QiwgMHg2MiwgMHg2NSwKLSAgMHg0OCwgMHg0RiwgMHg0NiwgMHg0MSwgMHg1NCwgMHg1MywgMHg1QSwgMHg1RCwKLSAgMHhFMCwgMHhFNywgMHhFRSwgMHhFOSwgMHhGQywgMHhGQiwgMHhGMiwgMHhGNSwKLSAgMHhEOCwgMHhERiwgMHhENiwgMHhEMSwgMHhDNCwgMHhDMywgMHhDQSwgMHhDRCwKLSAgMHg5MCwgMHg5NywgMHg5RSwgMHg5OSwgMHg4QywgMHg4QiwgMHg4MiwgMHg4NSwKLSAgMHhBOCwgMHhBRiwgMHhBNiwgMHhBMSwgMHhCNCwgMHhCMywgMHhCQSwgMHhCRCwKLSAgMHhDNywgMHhDMCwgMHhDOSwgMHhDRSwgMHhEQiwgMHhEQywgMHhENSwgMHhEMiwKLSAgMHhGRiwgMHhGOCwgMHhGMSwgMHhGNiwgMHhFMywgMHhFNCwgMHhFRCwgMHhFQSwKLSAgMHhCNywgMHhCMCwgMHhCOSwgMHhCRSwgMHhBQiwgMHhBQywgMHhBNSwgMHhBMiwKLSAgMHg4RiwgMHg4OCwgMHg4MSwgMHg4NiwgMHg5MywgMHg5NCwgMHg5RCwgMHg5QSwKLSAgMHgyNywgMHgyMCwgMHgyOSwgMHgyRSwgMHgzQiwgMHgzQywgMHgzNSwgMHgzMiwKLSAgMHgxRiwgMHgxOCwgMHgxMSwgMHgxNiwgMHgwMywgMHgwNCwgMHgwRCwgMHgwQSwKLSAgMHg1NywgMHg1MCwgMHg1OSwgMHg1RSwgMHg0QiwgMHg0QywgMHg0NSwgMHg0MiwKLSAgMHg2RiwgMHg2OCwgMHg2MSwgMHg2NiwgMHg3MywgMHg3NCwgMHg3RCwgMHg3QSwKLSAgMHg4OSwgMHg4RSwgMHg4NywgMHg4MCwgMHg5NSwgMHg5MiwgMHg5QiwgMHg5QywKLSAgMHhCMSwgMHhCNiwgMHhCRiwgMHhCOCwgMHhBRCwgMHhBQSwgMHhBMywgMHhBNCwKLSAgMHhGOSwgMHhGRSwgMHhGNywgMHhGMCwgMHhFNSwgMHhFMiwgMHhFQiwgMHhFQywKLSAgMHhDMSwgMHhDNiwgMHhDRiwgMHhDOCwgMHhERCwgMHhEQSwgMHhEMywgMHhENCwKLSAgMHg2OSwgMHg2RSwgMHg2NywgMHg2MCwgMHg3NSwgMHg3MiwgMHg3QiwgMHg3QywKLSAgMHg1MSwgMHg1NiwgMHg1RiwgMHg1OCwgMHg0RCwgMHg0QSwgMHg0MywgMHg0NCwKLSAgMHgxOSwgMHgxRSwgMHgxNywgMHgxMCwgMHgwNSwgMHgwMiwgMHgwQiwgMHgwQywKLSAgMHgyMSwgMHgyNiwgMHgyRiwgMHgyOCwgMHgzRCwgMHgzQSwgMHgzMywgMHgzNCwKLSAgMHg0RSwgMHg0OSwgMHg0MCwgMHg0NywgMHg1MiwgMHg1NSwgMHg1QywgMHg1QiwKLSAgMHg3NiwgMHg3MSwgMHg3OCwgMHg3RiwgMHg2QSwgMHg2RCwgMHg2NCwgMHg2MywKLSAgMHgzRSwgMHgzOSwgMHgzMCwgMHgzNywgMHgyMiwgMHgyNSwgMHgyQywgMHgyQiwKLSAgMHgwNiwgMHgwMSwgMHgwOCwgMHgwRiwgMHgxQSwgMHgxRCwgMHgxNCwgMHgxMywKLSAgMHhBRSwgMHhBOSwgMHhBMCwgMHhBNywgMHhCMiwgMHhCNSwgMHhCQywgMHhCQiwKLSAgMHg5NiwgMHg5MSwgMHg5OCwgMHg5RiwgMHg4QSwgMHg4RCwgMHg4NCwgMHg4MywKLSAgMHhERSwgMHhEOSwgMHhEMCwgMHhENywgMHhDMiwgMHhDNSwgMHhDQywgMHhDQiwKLSAgMHhFNiwgMHhFMSwgMHhFOCwgMHhFRiwgMHhGQSwgMHhGRCwgMHhGNCwgMHhGMwotfTsKLQotc3RhdGljIGd1aW50OAotZ3N0X2ZsYWNfY2FsY3VsYXRlX2NyYzggKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IGxlbmd0aCkKLXsKLSAgZ3VpbnQ4IGNyYyA9IDA7Ci0KLSAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAgY3JjID0gY3JjOF90YWJsZVtjcmMgXiAqZGF0YV07Ci0gICAgKytkYXRhOwotICB9Ci0KLSAgcmV0dXJuIGNyYzsKLX0KLQotLyogQ1JDLTE2LCBwb2x5ID0geF4xNiArIHheMTUgKyB4XjIgKyB4XjAsIGluaXQgPSAwICovCi1zdGF0aWMgY29uc3QgZ3VpbnQxNiBjcmMxNl90YWJsZVsyNTZdID0gewotICAweDAwMDAsIDB4ODAwNSwgMHg4MDBmLCAweDAwMGEsIDB4ODAxYiwgMHgwMDFlLCAweDAwMTQsIDB4ODAxMSwKLSAgMHg4MDMzLCAweDAwMzYsIDB4MDAzYywgMHg4MDM5LCAweDAwMjgsIDB4ODAyZCwgMHg4MDI3LCAweDAwMjIsCi0gIDB4ODA2MywgMHgwMDY2LCAweDAwNmMsIDB4ODA2OSwgMHgwMDc4LCAweDgwN2QsIDB4ODA3NywgMHgwMDcyLAotICAweDAwNTAsIDB4ODA1NSwgMHg4MDVmLCAweDAwNWEsIDB4ODA0YiwgMHgwMDRlLCAweDAwNDQsIDB4ODA0MSwKLSAgMHg4MGMzLCAweDAwYzYsIDB4MDBjYywgMHg4MGM5LCAweDAwZDgsIDB4ODBkZCwgMHg4MGQ3LCAweDAwZDIsCi0gIDB4MDBmMCwgMHg4MGY1LCAweDgwZmYsIDB4MDBmYSwgMHg4MGViLCAweDAwZWUsIDB4MDBlNCwgMHg4MGUxLAotICAweDAwYTAsIDB4ODBhNSwgMHg4MGFmLCAweDAwYWEsIDB4ODBiYiwgMHgwMGJlLCAweDAwYjQsIDB4ODBiMSwKLSAgMHg4MDkzLCAweDAwOTYsIDB4MDA5YywgMHg4MDk5LCAweDAwODgsIDB4ODA4ZCwgMHg4MDg3LCAweDAwODIsCi0gIDB4ODE4MywgMHgwMTg2LCAweDAxOGMsIDB4ODE4OSwgMHgwMTk4LCAweDgxOWQsIDB4ODE5NywgMHgwMTkyLAotICAweDAxYjAsIDB4ODFiNSwgMHg4MWJmLCAweDAxYmEsIDB4ODFhYiwgMHgwMWFlLCAweDAxYTQsIDB4ODFhMSwKLSAgMHgwMWUwLCAweDgxZTUsIDB4ODFlZiwgMHgwMWVhLCAweDgxZmIsIDB4MDFmZSwgMHgwMWY0LCAweDgxZjEsCi0gIDB4ODFkMywgMHgwMWQ2LCAweDAxZGMsIDB4ODFkOSwgMHgwMWM4LCAweDgxY2QsIDB4ODFjNywgMHgwMWMyLAotICAweDAxNDAsIDB4ODE0NSwgMHg4MTRmLCAweDAxNGEsIDB4ODE1YiwgMHgwMTVlLCAweDAxNTQsIDB4ODE1MSwKLSAgMHg4MTczLCAweDAxNzYsIDB4MDE3YywgMHg4MTc5LCAweDAxNjgsIDB4ODE2ZCwgMHg4MTY3LCAweDAxNjIsCi0gIDB4ODEyMywgMHgwMTI2LCAweDAxMmMsIDB4ODEyOSwgMHgwMTM4LCAweDgxM2QsIDB4ODEzNywgMHgwMTMyLAotICAweDAxMTAsIDB4ODExNSwgMHg4MTFmLCAweDAxMWEsIDB4ODEwYiwgMHgwMTBlLCAweDAxMDQsIDB4ODEwMSwKLSAgMHg4MzAzLCAweDAzMDYsIDB4MDMwYywgMHg4MzA5LCAweDAzMTgsIDB4ODMxZCwgMHg4MzE3LCAweDAzMTIsCi0gIDB4MDMzMCwgMHg4MzM1LCAweDgzM2YsIDB4MDMzYSwgMHg4MzJiLCAweDAzMmUsIDB4MDMyNCwgMHg4MzIxLAotICAweDAzNjAsIDB4ODM2NSwgMHg4MzZmLCAweDAzNmEsIDB4ODM3YiwgMHgwMzdlLCAweDAzNzQsIDB4ODM3MSwKLSAgMHg4MzUzLCAweDAzNTYsIDB4MDM1YywgMHg4MzU5LCAweDAzNDgsIDB4ODM0ZCwgMHg4MzQ3LCAweDAzNDIsCi0gIDB4MDNjMCwgMHg4M2M1LCAweDgzY2YsIDB4MDNjYSwgMHg4M2RiLCAweDAzZGUsIDB4MDNkNCwgMHg4M2QxLAotICAweDgzZjMsIDB4MDNmNiwgMHgwM2ZjLCAweDgzZjksIDB4MDNlOCwgMHg4M2VkLCAweDgzZTcsIDB4MDNlMiwKLSAgMHg4M2EzLCAweDAzYTYsIDB4MDNhYywgMHg4M2E5LCAweDAzYjgsIDB4ODNiZCwgMHg4M2I3LCAweDAzYjIsCi0gIDB4MDM5MCwgMHg4Mzk1LCAweDgzOWYsIDB4MDM5YSwgMHg4MzhiLCAweDAzOGUsIDB4MDM4NCwgMHg4MzgxLAotICAweDAyODAsIDB4ODI4NSwgMHg4MjhmLCAweDAyOGEsIDB4ODI5YiwgMHgwMjllLCAweDAyOTQsIDB4ODI5MSwKLSAgMHg4MmIzLCAweDAyYjYsIDB4MDJiYywgMHg4MmI5LCAweDAyYTgsIDB4ODJhZCwgMHg4MmE3LCAweDAyYTIsCi0gIDB4ODJlMywgMHgwMmU2LCAweDAyZWMsIDB4ODJlOSwgMHgwMmY4LCAweDgyZmQsIDB4ODJmNywgMHgwMmYyLAotICAweDAyZDAsIDB4ODJkNSwgMHg4MmRmLCAweDAyZGEsIDB4ODJjYiwgMHgwMmNlLCAweDAyYzQsIDB4ODJjMSwKLSAgMHg4MjQzLCAweDAyNDYsIDB4MDI0YywgMHg4MjQ5LCAweDAyNTgsIDB4ODI1ZCwgMHg4MjU3LCAweDAyNTIsCi0gIDB4MDI3MCwgMHg4Mjc1LCAweDgyN2YsIDB4MDI3YSwgMHg4MjZiLCAweDAyNmUsIDB4MDI2NCwgMHg4MjYxLAotICAweDAyMjAsIDB4ODIyNSwgMHg4MjJmLCAweDAyMmEsIDB4ODIzYiwgMHgwMjNlLCAweDAyMzQsIDB4ODIzMSwKLSAgMHg4MjEzLCAweDAyMTYsIDB4MDIxYywgMHg4MjE5LCAweDAyMDgsIDB4ODIwZCwgMHg4MjA3LCAweDAyMDIKLX07Ci0KLXN0YXRpYyBndWludDE2Ci1nc3RfZmxhY19jYWxjdWxhdGVfY3JjMTYgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IGxlbmd0aCkKLXsKLSAgZ3VpbnQxNiBjcmMgPSAwOwotCi0gIHdoaWxlIChsZW5ndGgtLSkgewotICAgIGNyYyA9ICgoY3JjIDw8IDgpIF4gY3JjMTZfdGFibGVbKGNyYyA+PiA4KSBeICpkYXRhXSkgJiAweGZmZmY7Ci0gICAgZGF0YSsrOwotICB9Ci0KLSAgcmV0dXJuIGNyYzsKLX0KLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ0hFQ0tfRlJBTUVfQ0hFQ0tTVU1TCi19OwotCi0jZGVmaW5lIERFRkFVTFRfQ0hFQ0tfRlJBTUVfQ0hFQ0tTVU1TIEZBTFNFCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWZsYWMsIGZyYW1lZCA9IChib29sZWFuKSB0cnVlLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgOCBdLCAiICJyYXRlID0gKGludCkgWyAxLCA2NTUzNTAgXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtZmxhYyIpCi0gICAgKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X2ZsYWNfcGFyc2VfZ2VuZXJhdGVfdm9yYmlzY29tbWVudCAoR3N0RmxhY1BhcnNlICoKLSAgICBmbGFjcGFyc2UpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3N0X2ZsYWNfcGFyc2VfcmVzZXRfYnVmZmVyX3RpbWVfYW5kX29mZnNldCAoR3N0QnVmZmVyICoKLSAgICBidWZmZXIpOwotc3RhdGljIHZvaWQgZ3N0X2ZsYWNfcGFyc2VfcmVzZXQgKEdzdEZsYWNQYXJzZSAqIHBhcnNlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZsYWNfcGFyc2VfaGFuZGxlX2Jsb2NrX3R5cGUgKEdzdEZsYWNQYXJzZSAqIGZsYWNwYXJzZSwKLSAgICBndWludCB0eXBlLCBHc3RCdWZmZXIgKiBzYnVmZmVyKTsKLXN0YXRpYyB2b2lkIGdzdF9mbGFjX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9mbGFjX3BhcnNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9mbGFjX3BhcnNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9mbGFjX3BhcnNlX3N0YXJ0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZsYWNfcGFyc2Vfc3RvcCAoR3N0QmFzZVBhcnNlICogcGFyc2UpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZsYWNfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ZsYWNfcGFyc2VfcGFyc2VfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsIGdpbnQgc2l6ZSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmxhY19wYXJzZV9wcmVfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ZsYWNfcGFyc2VfY29udmVydCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwKLSAgICBnaW50NjQgKiBkZXN0X3ZhbHVlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmxhY19wYXJzZV9zcmNfZXZlbnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdENhcHMgKmdzdF9mbGFjX3BhcnNlX2dldF9zaW5rX2NhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotCi0jZGVmaW5lIGdzdF9mbGFjX3BhcnNlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEZsYWNQYXJzZSwgZ3N0X2ZsYWNfcGFyc2UsIEdTVF9UWVBFX0JBU0VfUEFSU0UpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfcGFyc2VfY2xhc3NfaW5pdCAoR3N0RmxhY1BhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKmJhc2VwYXJzZV9jbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGZsYWNwYXJzZV9kZWJ1ZywgImZsYWNwYXJzZSIsIDAsCi0gICAgICAiRmxhYyBwYXJzZXIgZWxlbWVudCIpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2ZsYWNfcGFyc2VfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9mbGFjX3BhcnNlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2ZsYWNfcGFyc2VfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0hFQ0tfRlJBTUVfQ0hFQ0tTVU1TLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjaGVjay1mcmFtZS1jaGVja3N1bXMiLCAiQ2hlY2sgRnJhbWUgQ2hlY2tzdW1zIiwKLSAgICAgICAgICAiQ2hlY2sgdGhlIG92ZXJhbGwgY2hlY2tzdW1zIG9mIGV2ZXJ5IGZyYW1lIiwKLSAgICAgICAgICBERUZBVUxUX0NIRUNLX0ZSQU1FX0NIRUNLU1VNUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBiYXNlcGFyc2VfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX3BhcnNlX3N0YXJ0KTsKLSAgYmFzZXBhcnNlX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX3BhcnNlX3N0b3ApOwotICBiYXNlcGFyc2VfY2xhc3MtPmhhbmRsZV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfcGFyc2VfaGFuZGxlX2ZyYW1lKTsKLSAgYmFzZXBhcnNlX2NsYXNzLT5wcmVfcHVzaF9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfcGFyc2VfcHJlX3B1c2hfZnJhbWUpOwotICBiYXNlcGFyc2VfY2xhc3MtPmNvbnZlcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfcGFyc2VfY29udmVydCk7Ci0gIGJhc2VwYXJzZV9jbGFzcy0+c3JjX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbGFjX3BhcnNlX3NyY19ldmVudCk7Ci0gIGJhc2VwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZsYWNfcGFyc2VfZ2V0X3NpbmtfY2Fwcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiRkxBQyBhdWRpbyBwYXJzZXIiLAotICAgICAgIkNvZGVjL1BhcnNlci9BdWRpbyIsCi0gICAgICAiUGFyc2VzIGF1ZGlvIHdpdGggdGhlIEZMQUMgbG9zc2xlc3MgYXVkaW8gY29kZWMiLAotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfcGFyc2VfaW5pdCAoR3N0RmxhY1BhcnNlICogZmxhY3BhcnNlKQotewotICBmbGFjcGFyc2UtPmNoZWNrX2ZyYW1lX2NoZWNrc3VtcyA9IERFRkFVTFRfQ0hFQ0tfRlJBTUVfQ0hFQ0tTVU1TOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAoZmxhY3BhcnNlKSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKGZsYWNwYXJzZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfcGFyc2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZsYWNQYXJzZSAqZmxhY3BhcnNlID0gR1NUX0ZMQUNfUEFSU0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NIRUNLX0ZSQU1FX0NIRUNLU1VNUzoKLSAgICAgIGZsYWNwYXJzZS0+Y2hlY2tfZnJhbWVfY2hlY2tzdW1zID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfcGFyc2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZsYWNQYXJzZSAqZmxhY3BhcnNlID0gR1NUX0ZMQUNfUEFSU0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NIRUNLX0ZSQU1FX0NIRUNLU1VNUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmbGFjcGFyc2UtPmNoZWNrX2ZyYW1lX2NoZWNrc3Vtcyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmxhY19wYXJzZV9yZXNldCAoR3N0RmxhY1BhcnNlICogcGFyc2VyKQotewotICBpZiAocGFyc2VyLT50YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChwYXJzZXItPnRhZ3MpOwotICAgIHBhcnNlci0+dGFncyA9IE5VTEw7Ci0gIH0KLSAgaWYgKHBhcnNlci0+dG9jKSB7Ci0gICAgZ3N0X3RvY191bnJlZiAocGFyc2VyLT50b2MpOwotICAgIHBhcnNlci0+dG9jID0gTlVMTDsKLSAgfQotICBpZiAocGFyc2VyLT5zZWVrdGFibGUpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChwYXJzZXItPnNlZWt0YWJsZSk7Ci0gICAgcGFyc2VyLT5zZWVrdGFibGUgPSBOVUxMOwotICB9Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHBhcnNlci0+aGVhZGVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAocGFyc2VyLT5oZWFkZXJzKTsKLSAgcGFyc2VyLT5oZWFkZXJzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbGFjX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RGbGFjUGFyc2UgKmZsYWNwYXJzZSA9IEdTVF9GTEFDX1BBUlNFIChvYmplY3QpOwotCi0gIGdzdF9mbGFjX3BhcnNlX3Jlc2V0IChmbGFjcGFyc2UpOwotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBHc3RGbGFjUGFyc2UgKmZsYWNwYXJzZSA9IEdTVF9GTEFDX1BBUlNFIChwYXJzZSk7Ci0KLSAgZmxhY3BhcnNlLT5zdGF0ZSA9IEdTVF9GTEFDX1BBUlNFX1NUQVRFX0lOSVQ7Ci0gIGZsYWNwYXJzZS0+bWluX2Jsb2Nrc2l6ZSA9IDA7Ci0gIGZsYWNwYXJzZS0+bWF4X2Jsb2Nrc2l6ZSA9IDA7Ci0gIGZsYWNwYXJzZS0+bWluX2ZyYW1lc2l6ZSA9IDA7Ci0gIGZsYWNwYXJzZS0+bWF4X2ZyYW1lc2l6ZSA9IDA7Ci0KLSAgZmxhY3BhcnNlLT51cHN0cmVhbV9sZW5ndGggPSAtMTsKLQotICBmbGFjcGFyc2UtPnNhbXBsZXJhdGUgPSAwOwotICBmbGFjcGFyc2UtPmNoYW5uZWxzID0gMDsKLSAgZmxhY3BhcnNlLT5icHMgPSAwOwotICBmbGFjcGFyc2UtPnRvdGFsX3NhbXBsZXMgPSAwOwotCi0gIGZsYWNwYXJzZS0+b2Zmc2V0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZmxhY3BhcnNlLT5ibG9ja2luZ19zdHJhdGVneSA9IDA7Ci0gIGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSA9IDA7Ci0gIGZsYWNwYXJzZS0+c2FtcGxlX251bWJlciA9IDA7Ci0gIGZsYWNwYXJzZS0+c3RyYXRlZ3lfY2hlY2tlZCA9IEZBTFNFOwotCi0gIGZsYWNwYXJzZS0+c2VudF9jb2RlY190YWcgPSBGQUxTRTsKLQotICAvKiAiZkxhQyIgbWFya2VyICovCi0gIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksIDQpOwotCi0gIC8qIGluZm9ybSBiYXNlY2xhc3Mgd2UgY2FuIGNvbWUgdXAgd2l0aCB0cywgYmFzZWQgb24gY291bnRlcnMgaW4gcGFja2V0cyAqLwotICBnc3RfYmFzZV9wYXJzZV9zZXRfaGFzX3RpbWluZ19pbmZvIChHU1RfQkFTRV9QQVJTRV9DQVNUIChmbGFjcGFyc2UpLCBUUlVFKTsKLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X3N5bmNhYmxlIChHU1RfQkFTRV9QQVJTRV9DQVNUIChmbGFjcGFyc2UpLCBUUlVFKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmxhY19wYXJzZV9zdG9wIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR3N0RmxhY1BhcnNlICpmbGFjcGFyc2UgPSBHU1RfRkxBQ19QQVJTRSAocGFyc2UpOwotCi0gIGdzdF9mbGFjX3BhcnNlX3Jlc2V0IChmbGFjcGFyc2UpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGNvbnN0IGd1aW50OCBzYW1wbGVfc2l6ZV90YWJsZVtdID0geyAwLCA4LCAxMiwgMCwgMTYsIDIwLCAyNCwgMCB9OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQxNiBibG9ja3NpemVfdGFibGVbMTZdID0gewotICAwLCAxOTIsIDU3NiA8PCAwLCA1NzYgPDwgMSwgNTc2IDw8IDIsIDU3NiA8PCAzLCAwLCAwLAotICAyNTYgPDwgMCwgMjU2IDw8IDEsIDI1NiA8PCAyLCAyNTYgPDwgMywgMjU2IDw8IDQsIDI1NiA8PCA1LCAyNTYgPDwgNiwKLSAgMjU2IDw8IDcsCi19OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQzMiBzYW1wbGVfcmF0ZV90YWJsZVsxNl0gPSB7Ci0gIDAsCi0gIDg4MjAwLCAxNzY0MDAsIDE5MjAwMCwKLSAgODAwMCwgMTYwMDAsIDIyMDUwLCAyNDAwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwgOTYwMDAsCi0gIDAsIDAsIDAsIDAsCi19OwotCi10eXBlZGVmIGVudW0KLXsKLSAgRlJBTUVfSEVBREVSX1ZBTElELAotICBGUkFNRV9IRUFERVJfSU5WQUxJRCwKLSAgRlJBTUVfSEVBREVSX01PUkVfREFUQQotfSBGcmFtZUhlYWRlckNoZWNrUmV0dXJuOwotCi1zdGF0aWMgRnJhbWVIZWFkZXJDaGVja1JldHVybgotZ3N0X2ZsYWNfcGFyc2VfZnJhbWVfaGVhZGVyX2lzX3ZhbGlkIChHc3RGbGFjUGFyc2UgKiBmbGFjcGFyc2UsCi0gICAgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwgZ2Jvb2xlYW4gc2V0LCBndWludDE2ICogYmxvY2tfc2l6ZV9yZXQsCi0gICAgZ2Jvb2xlYW4gKiBzdXNwZWN0KQotewotICBHc3RCaXRSZWFkZXIgcmVhZGVyID0gR1NUX0JJVF9SRUFERVJfSU5JVCAoZGF0YSwgc2l6ZSk7Ci0gIGd1aW50OCBibG9ja2luZ19zdHJhdGVneTsKLSAgZ3VpbnQxNiBibG9ja19zaXplOwotICBndWludDMyIHNhbXBsZXJhdGUgPSAwOwotICBndWludDY0IHNhbXBsZV9udW1iZXI7Ci0gIGd1aW50OCBjaGFubmVscywgYnBzOwotICBndWludDggdG1wID0gMDsKLSAgZ3VpbnQ4IGFjdHVhbF9jcmMsIGV4cGVjdGVkX2NyYyA9IDA7Ci0KLSAgLyogU2tpcCAxNCBiaXQgc3luYyBjb2RlICovCi0gIGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmcmVhZGVyLCAxNCk7Ci0KLSAgLyogTXVzdCBiZSAwICovCi0gIGlmIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZyZWFkZXIsIDEpICE9IDApCi0gICAgZ290byBlcnJvcjsKLQotICAvKiAwID09IGZpeGVkIGJsb2NrIHNpemUsIDEgPT0gdmFyaWFibGUgYmxvY2sgc2l6ZSAqLwotICBibG9ja2luZ19zdHJhdGVneSA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJnJlYWRlciwgMSk7Ci0gIGlmIChmbGFjcGFyc2UtPmZvcmNlX3ZhcmlhYmxlX2Jsb2NrX3NpemUpCi0gICAgYmxvY2tpbmdfc3RyYXRlZ3kgPSAxOwotCi0gIC8qIGJsb2NrIHNpemUgaW5kZXgsIGNhbGN1bGF0aW9uIG9mIHRoZSByZWFsIGJsb2Nrc2l6ZSBiZWxvdyAqLwotICBibG9ja19zaXplID0gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZCAoJnJlYWRlciwgNCk7Ci0gIGlmIChibG9ja19zaXplID09IDApCi0gICAgZ290byBlcnJvcjsKLQotICAvKiBzYW1wbGUgcmF0ZSBpbmRleCwgY2FsY3VsYXRpb24gb2YgdGhlIHJlYWwgc2FtcGxlcmF0ZSBiZWxvdyAqLwotICBzYW1wbGVyYXRlID0gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2X3VuY2hlY2tlZCAoJnJlYWRlciwgNCk7Ci0gIGlmIChzYW1wbGVyYXRlID09IDB4MGYpCi0gICAgZ290byBlcnJvcjsKLQotICAvKiBjaGFubmVsIGFzc2lnbm1lbnQgKi8KLSAgY2hhbm5lbHMgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZyZWFkZXIsIDQpOwotICBpZiAoY2hhbm5lbHMgPCA4KSB7Ci0gICAgY2hhbm5lbHMrKzsKLSAgfSBlbHNlIGlmIChjaGFubmVscyA8PSAxMCkgewotICAgIGNoYW5uZWxzID0gMjsKLSAgfSBlbHNlIGlmIChjaGFubmVscyA+IDEwKSB7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotICBpZiAoZmxhY3BhcnNlLT5jaGFubmVscyAmJiBmbGFjcGFyc2UtPmNoYW5uZWxzICE9IGNoYW5uZWxzKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgLyogYml0cyBwZXIgc2FtcGxlICovCi0gIGJwcyA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJnJlYWRlciwgMyk7Ci0gIGlmIChicHMgPT0gMHgwMyB8fCBicHMgPT0gMHgwNykgewotICAgIGdvdG8gZXJyb3I7Ci0gIH0gZWxzZSBpZiAoYnBzID09IDAgJiYgZmxhY3BhcnNlLT5icHMgPT0gMCkgewotICAgIGdvdG8gbmVlZF9zdHJlYW1pbmZvOwotICB9Ci0gIGJwcyA9IHNhbXBsZV9zaXplX3RhYmxlW2Jwc107Ci0gIGlmIChmbGFjcGFyc2UtPmJwcyAmJiBicHMgIT0gZmxhY3BhcnNlLT5icHMpCi0gICAgZ290byBlcnJvcjsKLQotICAvKiByZXNlcnZlZCwgbXVzdCBiZSAwICovCi0gIGlmIChnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZyZWFkZXIsIDEpICE9IDApCi0gICAgZ290byBlcnJvcjsKLQotICAvKiByZWFkICJ1dGY4IiBlbmNvZGVkIHNhbXBsZS9mcmFtZSBudW1iZXIgKi8KLSAgewotICAgIGdpbnQgbGVuID0gMDsKLQotICAgIGxlbiA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJnJlYWRlciwgOCk7Ci0KLSAgICAvKiBUaGlzIGlzIHNsaWdodGx5IGZhc3RlciB0aGFuIGEgbG9vcCAqLwotICAgIGlmICghKGxlbiAmIDB4ODApKSB7Ci0gICAgICBzYW1wbGVfbnVtYmVyID0gbGVuOwotICAgICAgbGVuID0gMDsKLSAgICB9IGVsc2UgaWYgKChsZW4gJiAweGMwKSAmJiAhKGxlbiAmIDB4MjApKSB7Ci0gICAgICBzYW1wbGVfbnVtYmVyID0gbGVuICYgMHgxZjsKLSAgICAgIGxlbiA9IDE7Ci0gICAgfSBlbHNlIGlmICgobGVuICYgMHhlMCkgJiYgIShsZW4gJiAweDEwKSkgewotICAgICAgc2FtcGxlX251bWJlciA9IGxlbiAmIDB4MGY7Ci0gICAgICBsZW4gPSAyOwotICAgIH0gZWxzZSBpZiAoKGxlbiAmIDB4ZjApICYmICEobGVuICYgMHgwOCkpIHsKLSAgICAgIHNhbXBsZV9udW1iZXIgPSBsZW4gJiAweDA3OwotICAgICAgbGVuID0gMzsKLSAgICB9IGVsc2UgaWYgKChsZW4gJiAweGY4KSAmJiAhKGxlbiAmIDB4MDQpKSB7Ci0gICAgICBzYW1wbGVfbnVtYmVyID0gbGVuICYgMHgwMzsKLSAgICAgIGxlbiA9IDQ7Ci0gICAgfSBlbHNlIGlmICgobGVuICYgMHhmYykgJiYgIShsZW4gJiAweDAyKSkgewotICAgICAgc2FtcGxlX251bWJlciA9IGxlbiAmIDB4MDE7Ci0gICAgICBsZW4gPSA1OwotICAgIH0gZWxzZSBpZiAoKGxlbiAmIDB4ZmUpICYmICEobGVuICYgMHgwMSkpIHsKLSAgICAgIHNhbXBsZV9udW1iZXIgPSBsZW4gJiAweDA7Ci0gICAgICBsZW4gPSA2OwotICAgIH0gZWxzZSB7Ci0gICAgICBnb3RvIGVycm9yOwotICAgIH0KLQotICAgIGlmICgoYmxvY2tpbmdfc3RyYXRlZ3kgPT0gMCAmJiBsZW4gPiA1KSB8fAotICAgICAgICAoYmxvY2tpbmdfc3RyYXRlZ3kgPT0gMSAmJiBsZW4gPiA2KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICB3aGlsZSAobGVuID4gMCkgewotICAgICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJnJlYWRlciwgJnRtcCwgOCkpCi0gICAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgICAgIGlmICgodG1wICYgMHhjMCkgIT0gMHg4MCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgc2FtcGxlX251bWJlciA8PD0gNjsKLSAgICAgIHNhbXBsZV9udW1iZXIgfD0gKHRtcCAmIDB4M2YpOwotICAgICAgbGVuLS07Ci0gICAgfQotICB9Ci0KLSAgLyogY2FsY3VsYXRlIHJlYWwgYmxvY2tzaXplIGZyb20gdGhlIGJsb2Nrc2l6ZSBpbmRleCAqLwotICBpZiAoYmxvY2tfc2l6ZSA9PSA2KSB7Ci0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTYgKCZyZWFkZXIsICZibG9ja19zaXplLCA4KSkKLSAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0gICAgYmxvY2tfc2l6ZSsrOwotICB9IGVsc2UgaWYgKGJsb2NrX3NpemUgPT0gNykgewotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2ICgmcmVhZGVyLCAmYmxvY2tfc2l6ZSwgMTYpKQotICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICBibG9ja19zaXplKys7Ci0gIH0gZWxzZSB7Ci0gICAgYmxvY2tfc2l6ZSA9IGJsb2Nrc2l6ZV90YWJsZVtibG9ja19zaXplXTsKLSAgfQotCi0gIC8qIGNhbGN1bGF0ZSB0aGUgcmVhbCBzYW1wbGVyYXRlIGZyb20gdGhlIHNhbXBsZXJhdGUgaW5kZXggKi8KLSAgaWYgKHNhbXBsZXJhdGUgPT0gMCAmJiBmbGFjcGFyc2UtPnNhbXBsZXJhdGUgPT0gMCkgewotICAgIGdvdG8gbmVlZF9zdHJlYW1pbmZvOwotICB9IGVsc2UgaWYgKHNhbXBsZXJhdGUgPCAxMikgewotICAgIHNhbXBsZXJhdGUgPSBzYW1wbGVfcmF0ZV90YWJsZVtzYW1wbGVyYXRlXTsKLSAgfSBlbHNlIGlmIChzYW1wbGVyYXRlID09IDEyKSB7Ci0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCZyZWFkZXIsICZzYW1wbGVyYXRlLCA4KSkKLSAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0gICAgc2FtcGxlcmF0ZSAqPSAxMDAwOwotICB9IGVsc2UgaWYgKHNhbXBsZXJhdGUgPT0gMTMpIHsKLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJnNhbXBsZXJhdGUsIDE2KSkKLSAgICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0gIH0gZWxzZSBpZiAoc2FtcGxlcmF0ZSA9PSAxNCkgewotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyICgmcmVhZGVyLCAmc2FtcGxlcmF0ZSwgMTYpKQotICAgICAgZ290byBuZWVkX21vcmVfZGF0YTsKLSAgICBzYW1wbGVyYXRlICo9IDEwOwotICB9Ci0KLSAgaWYgKGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSAmJiBmbGFjcGFyc2UtPnNhbXBsZXJhdGUgIT0gc2FtcGxlcmF0ZSkKLSAgICBnb3RvIGVycm9yOwotCi0gIC8qIGNoZWNrIGNyYy04IGZvciB0aGUgaGVhZGVyICovCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZleHBlY3RlZF9jcmMsIDgpKQotICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgYWN0dWFsX2NyYyA9Ci0gICAgICBnc3RfZmxhY19jYWxjdWxhdGVfY3JjOCAoZGF0YSwKLSAgICAgIChnc3RfYml0X3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSAvIDgpIC0gMSk7Ci0gIGlmIChhY3R1YWxfY3JjICE9IGV4cGVjdGVkX2NyYykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgIkNoZWNrc3VtIG1pc21hdGNoLiBIZWFkZXIgQ1JDIHdhcyAnJWQnIGJ1dCBmcmFtZSBoYXMgJyVkJyIsCi0gICAgICAgIGV4cGVjdGVkX2NyYywgYWN0dWFsX2NyYyk7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCi0gIC8qIFNhbml0eSBjaGVjayBzYW1wbGUgbnVtYmVyIGFnYWluc3QgYmxvY2tpbmcgc3RyYXRlZ3ksIGFzIGl0IHNlZW1zCi0gICAgIHNvbWUgZmlsZXMgY2xhaW0gZml4ZWQgYmxvY2sgc2l6ZSBidXQgc3VwcGx5IHNhbXBsZSBudW1iZXJzLAotICAgICByYXRoZXIgdGhhbiBibG9jayBudW1iZXJzLiAqLwotICBpZiAoYmxvY2tpbmdfc3RyYXRlZ3kgPT0gMCAmJiBmbGFjcGFyc2UtPmJsb2NrX3NpemUgIT0gMCkgewotICAgIGlmICghZmxhY3BhcnNlLT5zdHJhdGVneV9jaGVja2VkKSB7Ci0gICAgICBpZiAoYmxvY2tfc2l6ZSA9PSBzYW1wbGVfbnVtYmVyKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmxhY3BhcnNlLCAiVGhpcyBmaWxlIGNsYWltcyBmaXhlZCBibG9jayBzaXplLCAiCi0gICAgICAgICAgICAiYnV0IHNlZW1zIHRvIGJlIGx5aW5nOiBhc3N1bWluZyB2YXJpYWJsZSBibG9jayBzaXplIik7Ci0gICAgICAgIGZsYWNwYXJzZS0+Zm9yY2VfdmFyaWFibGVfYmxvY2tfc2l6ZSA9IFRSVUU7Ci0gICAgICAgIGJsb2NraW5nX3N0cmF0ZWd5ID0gMTsKLSAgICAgIH0KLSAgICAgIGZsYWNwYXJzZS0+c3RyYXRlZ3lfY2hlY2tlZCA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogZG9jdW1lbnRhdGlvbiBzYXlzOgotICAgKiBUaGUgImJsb2NraW5nIHN0cmF0ZWd5IiBiaXQgbXVzdCBiZSB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZSBlbnRpcmUgc3RyZWFtLiAqLwotICBpZiAoZmxhY3BhcnNlLT5ibG9ja2luZ19zdHJhdGVneSAhPSBibG9ja2luZ19zdHJhdGVneSkgewotICAgIGlmIChmbGFjcGFyc2UtPmJsb2NrX3NpemUgIT0gMCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmbGFjcGFyc2UsICJibG9ja2luZyBzdHJhdGVneSBpcyBub3QgY29uc3RhbnQiKTsKLSAgICAgIGlmIChzdXNwZWN0KQotICAgICAgICAqc3VzcGVjdCA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyoKLSAgICAgVGhlIEZMQUMgZm9ybWF0IGRvY3VtZW50YXRpb24gc2F5czoKLSAgICAgVGhlICJibG9ja2luZyBzdHJhdGVneSIgYml0IGRldGVybWluZXMgaG93IHRvIGNhbGN1bGF0ZSB0aGUgc2FtcGxlIG51bWJlcgotICAgICBvZiB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoZSBmcmFtZS4gSWYgdGhlIGJpdCBpcyAwIChmaXhlZC1ibG9ja3NpemUpLCB0aGUKLSAgICAgZnJhbWUgaGVhZGVyIGVuY29kZXMgdGhlIGZyYW1lIG51bWJlciBhcyBhYm92ZSwgYW5kIHRoZSBmcmFtZSdzIHN0YXJ0aW5nCi0gICAgIHNhbXBsZSBudW1iZXIgd2lsbCBiZSB0aGUgZnJhbWUgbnVtYmVyIHRpbWVzIHRoZSBibG9ja3NpemUuIElmIGl0IGlzIDEKLSAgICAgKHZhcmlhYmxlLWJsb2Nrc2l6ZSksIHRoZSBmcmFtZSBoZWFkZXIgZW5jb2RlcyB0aGUgZnJhbWUncyBzdGFydGluZwotICAgICBzYW1wbGUgbnVtYmVyIGl0c2VsZi4gKEluIHRoZSBjYXNlIG9mIGEgZml4ZWQtYmxvY2tzaXplIHN0cmVhbSwgb25seSB0aGUKLSAgICAgbGFzdCBibG9jayBtYXkgYmUgc2hvcnRlciB0aGFuIHRoZSBzdHJlYW0gYmxvY2tzaXplOyBpdHMgc3RhcnRpbmcgc2FtcGxlCi0gICAgIG51bWJlciB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgdGhlIGZyYW1lIG51bWJlciB0aW1lcyB0aGUgcHJldmlvdXMgZnJhbWUncwotICAgICBibG9ja3NpemUsIG9yIHplcm8gaWYgaXQgaXMgdGhlIGZpcnN0IGZyYW1lKS4KLQotICAgICBUaGVyZWZvcmUsIHdoZW4gaW4gZml4ZWQgYmxvY2sgc2l6ZSBtb2RlLCB3ZSBvbmx5IHVwZGF0ZSB0aGUgYmxvY2sgc2l6ZQotICAgICB0aGUgZmlyc3QgdGltZSwgdGhlbiByZXVzZSB0aGF0IGJsb2NrIHNpemUgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCi0gICAgIFRoaXMgd2lsbCBhbHNvIGZpeCBhIHRpbWVzdGFtcCBwcm9ibGVtIHdpdGggdGhlIGxhc3QgYmxvY2sncyB0aW1lc3RhbXAKLSAgICAgYmVpbmcgbWlzY2FsY3VsYXRlZCBieSBzY2FsaW5nIHRoZSBibG9jayBudW1iZXIgYnkgYSAid3JvbmciIGJsb2NrIHNpemUuCi0gICAqLwotICBpZiAoYmxvY2tpbmdfc3RyYXRlZ3kgPT0gMCkgewotICAgIGlmIChmbGFjcGFyc2UtPmJsb2NrX3NpemUgIT0gMCkgewotICAgICAgLyogYWZ0ZXIgZmlyc3QgYmxvY2sgKi8KLSAgICAgIGlmIChmbGFjcGFyc2UtPmJsb2NrX3NpemUgIT0gYmxvY2tfc2l6ZSkgewotICAgICAgICAvKiBUT0RPOiBjYW4gd2Uga25vdyB3ZSdyZSBvbiB0aGUgbGFzdCBmcmFtZSwgdG8gYXZvaWQgd2FybmluZyA/ICovCi0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmxhY3BhcnNlLCAiQmxvY2sgc2l6ZSBpcyBub3QgY29uc3RhbnQiKTsKLSAgICAgICAgYmxvY2tfc2l6ZSA9IGZsYWNwYXJzZS0+YmxvY2tfc2l6ZTsKLSAgICAgICAgaWYgKHN1c3BlY3QpCi0gICAgICAgICAgKnN1c3BlY3QgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChzZXQpIHsKLSAgICBmbGFjcGFyc2UtPmJsb2NrX3NpemUgPSBibG9ja19zaXplOwotICAgIGlmICghZmxhY3BhcnNlLT5zYW1wbGVyYXRlKQotICAgICAgZmxhY3BhcnNlLT5zYW1wbGVyYXRlID0gc2FtcGxlcmF0ZTsKLSAgICBpZiAoIWZsYWNwYXJzZS0+YnBzKQotICAgICAgZmxhY3BhcnNlLT5icHMgPSBicHM7Ci0gICAgaWYgKCFmbGFjcGFyc2UtPmJsb2NraW5nX3N0cmF0ZWd5KQotICAgICAgZmxhY3BhcnNlLT5ibG9ja2luZ19zdHJhdGVneSA9IGJsb2NraW5nX3N0cmF0ZWd5OwotICAgIGlmICghZmxhY3BhcnNlLT5jaGFubmVscykKLSAgICAgIGZsYWNwYXJzZS0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgICBpZiAoIWZsYWNwYXJzZS0+c2FtcGxlX251bWJlcikKLSAgICAgIGZsYWNwYXJzZS0+c2FtcGxlX251bWJlciA9IHNhbXBsZV9udW1iZXI7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjcGFyc2UsCi0gICAgICAgICJQYXJzZWQgZnJhbWUgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIjpcbiIgIkJsb2NrIHNpemU6ICV1XG4iCi0gICAgICAgICJTYW1wbGUvRnJhbWUgbnVtYmVyOiAlIiBHX0dVSU5UNjRfRk9STUFULCBmbGFjcGFyc2UtPm9mZnNldCwKLSAgICAgICAgZmxhY3BhcnNlLT5ibG9ja19zaXplLCBmbGFjcGFyc2UtPnNhbXBsZV9udW1iZXIpOwotICB9Ci0KLSAgaWYgKGJsb2NrX3NpemVfcmV0KQotICAgICpibG9ja19zaXplX3JldCA9IGJsb2NrX3NpemU7Ci0KLSAgcmV0dXJuIEZSQU1FX0hFQURFUl9WQUxJRDsKLQotbmVlZF9zdHJlYW1pbmZvOgotICBHU1RfRVJST1JfT0JKRUNUIChmbGFjcGFyc2UsICJOZWVkIFNUUkVBTUlORk8gbWV0YWRhdGEuIEJpdHMgcGVyIHNhbXBsZSAiCi0gICAgICAib3Igc2FtcGxlIHJhdGUgbm90IGluIGZyYW1lIGhlYWRlciIpOwotZXJyb3I6Ci0gIHJldHVybiBGUkFNRV9IRUFERVJfSU5WQUxJRDsKLQotbmVlZF9tb3JlX2RhdGE6Ci0gIHJldHVybiBGUkFNRV9IRUFERVJfTU9SRV9EQVRBOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX3BhcnNlX2ZyYW1lX2lzX3ZhbGlkIChHc3RGbGFjUGFyc2UgKiBmbGFjcGFyc2UsCi0gICAgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSwgZ3VpbnQgKiByZXQpCi17Ci0gIGd1aW50IG1heCwgcmVtYWluaW5nOwotICBndWludCBpLCBzZWFyY2hfc3RhcnQsIHNlYXJjaF9lbmQ7Ci0gIEZyYW1lSGVhZGVyQ2hlY2tSZXR1cm4gaGVhZGVyX3JldDsKLSAgZ3VpbnQxNiBibG9ja19zaXplOwotICBnYm9vbGVhbiBzdXNwZWN0X3N0YXJ0ID0gRkFMU0UsIHN1c3BlY3RfZW5kID0gRkFMU0U7Ci0KLSAgaWYgKHNpemUgPCBmbGFjcGFyc2UtPm1pbl9mcmFtZXNpemUpCi0gICAgZ290byBuZWVkX21vcmU7Ci0KLSAgaGVhZGVyX3JldCA9Ci0gICAgICBnc3RfZmxhY19wYXJzZV9mcmFtZV9oZWFkZXJfaXNfdmFsaWQgKGZsYWNwYXJzZSwgZGF0YSwgc2l6ZSwgVFJVRSwKLSAgICAgICZibG9ja19zaXplLCAmc3VzcGVjdF9zdGFydCk7Ci0gIGlmIChoZWFkZXJfcmV0ID09IEZSQU1FX0hFQURFUl9JTlZBTElEKSB7Ci0gICAgKnJldCA9IDA7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmIChoZWFkZXJfcmV0ID09IEZSQU1FX0hFQURFUl9NT1JFX0RBVEEpCi0gICAgZ290byBuZWVkX21vcmU7Ci0KLSAgLyogbWluZCB1bmtub3duIGZyYW1lc2l6ZSAqLwotICBzZWFyY2hfc3RhcnQgPSBNQVggKDIsIGZsYWNwYXJzZS0+bWluX2ZyYW1lc2l6ZSk7Ci0gIGlmIChmbGFjcGFyc2UtPm1heF9mcmFtZXNpemUpCi0gICAgc2VhcmNoX2VuZCA9IE1JTiAoc2l6ZSwgZmxhY3BhcnNlLT5tYXhfZnJhbWVzaXplICsgOSArIDIpOwotICBlbHNlCi0gICAgc2VhcmNoX2VuZCA9IHNpemU7Ci0gIHNlYXJjaF9lbmQgLT0gMjsKLQotICByZW1haW5pbmcgPSBzaXplOwotCi0gIGZvciAoaSA9IHNlYXJjaF9zdGFydDsgaSA8IHNlYXJjaF9lbmQ7IGkrKywgcmVtYWluaW5nLS0pIHsKLQotICAgIGlmICgoR1NUX1JFQURfVUlOVDE2X0JFIChkYXRhICsgaSkgJiAweGZmZmUpICE9IDB4ZmZmOCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGZsYWNwYXJzZSwgInBvc3NpYmxlIGZyYW1lIGVuZCBhdCBvZmZzZXQgJWQiLCBpKTsKLSAgICBzdXNwZWN0X2VuZCA9IEZBTFNFOwotICAgIGhlYWRlcl9yZXQgPQotICAgICAgICBnc3RfZmxhY19wYXJzZV9mcmFtZV9oZWFkZXJfaXNfdmFsaWQgKGZsYWNwYXJzZSwgZGF0YSArIGksCi0gICAgICAgIHJlbWFpbmluZywgRkFMU0UsIE5VTEwsICZzdXNwZWN0X2VuZCk7Ci0gICAgaWYgKGhlYWRlcl9yZXQgPT0gRlJBTUVfSEVBREVSX1ZBTElEKSB7Ci0gICAgICBpZiAoZmxhY3BhcnNlLT5jaGVja19mcmFtZV9jaGVja3N1bXMgfHwgc3VzcGVjdF9zdGFydCB8fCBzdXNwZWN0X2VuZCkgewotICAgICAgICBndWludDE2IGFjdHVhbF9jcmMgPSBnc3RfZmxhY19jYWxjdWxhdGVfY3JjMTYgKGRhdGEsIGkgLSAyKTsKLSAgICAgICAgZ3VpbnQxNiBleHBlY3RlZF9jcmMgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEgKyBpIC0gMik7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgICAgICJGb3VuZCBwb3NzaWJsZSBmcmFtZSAoJWQsICVkKS4gQ2hlY2tpbmcgZm9yIENSQyBtYXRjaCIsCi0gICAgICAgICAgICBzdXNwZWN0X3N0YXJ0LCBzdXNwZWN0X2VuZCk7Ci0gICAgICAgIGlmIChhY3R1YWxfY3JjICE9IGV4cGVjdGVkX2NyYykgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgICAgICAgIkNoZWNrc3VtIG1pc21hdGNoLiBIZWFkZXIgQ1JDIHdhcyAnJWQnIGJ1dCBmcmFtZSBoYXMgJyVkJyIsCi0gICAgICAgICAgICAgIGV4cGVjdGVkX2NyYywgYWN0dWFsX2NyYyk7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICpyZXQgPSBpOwotICAgICAgZmxhY3BhcnNlLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0gZWxzZSBpZiAoaGVhZGVyX3JldCA9PSBGUkFNRV9IRUFERVJfTU9SRV9EQVRBKSB7Ci0gICAgICBnb3RvIG5lZWRfbW9yZTsKLSAgICB9Ci0gIH0KLQotICAvKiBGb3IgdGhlIGxhc3QgZnJhbWUgb3V0cHV0IGV2ZXJ5dGhpbmcgdG8gdGhlIGVuZCAqLwotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgKGZsYWNwYXJzZSkpKSB7Ci0gICAgaWYgKGZsYWNwYXJzZS0+Y2hlY2tfZnJhbWVfY2hlY2tzdW1zKSB7Ci0gICAgICBndWludDE2IGFjdHVhbF9jcmMgPSBnc3RfZmxhY19jYWxjdWxhdGVfY3JjMTYgKGRhdGEsIHNpemUgLSAyKTsKLSAgICAgIGd1aW50MTYgZXhwZWN0ZWRfY3JjID0gR1NUX1JFQURfVUlOVDE2X0JFIChkYXRhICsgc2l6ZSAtIDIpOwotCi0gICAgICBpZiAoYWN0dWFsX2NyYyA9PSBleHBlY3RlZF9jcmMpIHsKLSAgICAgICAgKnJldCA9IHNpemU7Ci0gICAgICAgIGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAqcmV0ID0gc2l6ZTsKLSAgICAgIGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLQotICAvKiBzbyB3ZSBzZWFyY2hlZCB0byBleHBlY3RlZCBlbmQgYW5kIGZvdW5kIG5vdGhpbmcsCi0gICAqIGdpdmUgdXAgb24gdGhpcyBmcmFtZSAoc3RhcnQpICovCi0gIGlmIChmbGFjcGFyc2UtPm1heF9mcmFtZXNpemUgJiYgaSA+IDIgKiBmbGFjcGFyc2UtPm1heF9mcmFtZXNpemUpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZmxhY3BhcnNlLAotICAgICAgICAiY291bGQgbm90IGRldGVybWluZSB2YWxpZCBmcmFtZSBlbmQsIGRpc2NhcmRpbmcgZnJhbWUgKHN0YXJ0KSIpOwotICAgICpyZXQgPSAxOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi1uZWVkX21vcmU6Ci0gIG1heCA9IGZsYWNwYXJzZS0+bWF4X2ZyYW1lc2l6ZSArIDE2OwotICBpZiAobWF4ID09IDE2KQotICAgIG1heCA9IDEgPDwgMjQ7Ci0gICpyZXQgPSBNSU4gKHNpemUgKyA0MDk2LCBtYXgpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbGFjX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKQotewotICBHc3RGbGFjUGFyc2UgKmZsYWNwYXJzZSA9IEdTVF9GTEFDX1BBUlNFIChwYXJzZSk7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50IGZyYW1lc2l6ZSA9IDA7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAqc2tpcHNpemUgPSAxOwotCi0gIGlmIChHX1VOTElLRUxZIChtYXAuc2l6ZSA8IDQpKSB7Ci0gICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgaWYgKGZsYWNwYXJzZS0+c3RhdGUgPT0gR1NUX0ZMQUNfUEFSU0VfU1RBVEVfSU5JVCkgewotICAgIGlmIChtZW1jbXAgKG1hcC5kYXRhLCAiZkxhQyIsIDQpID09IDApIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgImZMYUMgbWFya2VyIGZvdW5kIik7Ci0gICAgICBmcmFtZXNpemUgPSA0OwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLSAgICBpZiAobWFwLmRhdGFbMF0gPT0gMHhmZiAmJiAobWFwLmRhdGFbMV0gPj4gMikgPT0gMHgzZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY3BhcnNlLCAiRm91bmQgaGVhZGVybGVzcyBGTEFDIik7Ci0gICAgICAvKiBNaW5pbWFsIHNpemUgb2YgYSBmcmFtZSBoZWFkZXIgKi8KLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksIDkpOwotICAgICAgZmxhY3BhcnNlLT5zdGF0ZSA9IEdTVF9GTEFDX1BBUlNFX1NUQVRFX0dFTkVSQVRFX0hFQURFUlM7Ci0gICAgICAqc2tpcHNpemUgPSAwOwotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgImZMYUMgbWFya2VyIG5vdCBmb3VuZCIpOwotICAgIHJlc3VsdCA9IEZBTFNFOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIGlmIChmbGFjcGFyc2UtPnN0YXRlID09IEdTVF9GTEFDX1BBUlNFX1NUQVRFX0hFQURFUlMpIHsKLSAgICBndWludCBzaXplID0gNCArICgobWFwLmRhdGFbMV0gPDwgMTYpIHwgKG1hcC5kYXRhWzJdIDw8IDgpIHwgKG1hcC5kYXRhWzNdKSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjcGFyc2UsICJGb3VuZCBtZXRhZGF0YSBibG9jayBvZiBzaXplICV1Iiwgc2l6ZSk7Ci0gICAgZnJhbWVzaXplID0gc2l6ZTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBpZiAoKEdTVF9SRUFEX1VJTlQxNl9CRSAobWFwLmRhdGEpICYgMHhmZmZlKSA9PSAweGZmZjgpIHsKLSAgICBnYm9vbGVhbiByZXQ7Ci0gICAgZ3VpbnQgbmV4dDsKLQotICAgIGZsYWNwYXJzZS0+b2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcik7Ci0gICAgZmxhY3BhcnNlLT5ibG9ja2luZ19zdHJhdGVneSA9IDA7Ci0gICAgZmxhY3BhcnNlLT5zYW1wbGVfbnVtYmVyID0gMDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgIkZvdW5kIHN5bmMgY29kZSIpOwotICAgIHJldCA9IGdzdF9mbGFjX3BhcnNlX2ZyYW1lX2lzX3ZhbGlkIChmbGFjcGFyc2UsIG1hcC5kYXRhLCBtYXAuc2l6ZSwgJm5leHQpOwotICAgIGlmIChyZXQpIHsKLSAgICAgIGZyYW1lc2l6ZSA9IG5leHQ7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICAgIC8qIElmIHdlJ3JlIGF0IEVPUyBhbmQgdGhlIGZyYW1lIHdhcyBub3QgdmFsaWQsIGRyb3AgaXQhICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKEdTVF9CQVNFX1BBUlNFX0RSQUlOSU5HIChmbGFjcGFyc2UpKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmbGFjcGFyc2UsICJFT1MiKTsKLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIGlmIChuZXh0ID09IDApIHsKLSAgICB9IGVsc2UgaWYgKG5leHQgPiBtYXAuc2l6ZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY3BhcnNlLCAiUmVxdWVzdGluZyAldSBieXRlcyIsIG5leHQpOwotICAgICAgKnNraXBzaXplID0gMDsKLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAocGFyc2UsIG5leHQpOwotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgICAiR2l2aW5nIHVwIG9uIGludmFsaWQgZnJhbWUgKCUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMpIiwgbWFwLnNpemUpOwotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdzdEJ5dGVSZWFkZXIgcmVhZGVyOwotICAgIGdpbnQgb2ZmOwotCi0gICAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgb2ZmID0KLSAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoJnJlYWRlciwgMHhmZmZjMDAwMCwgMHhmZmY4MDAwMCwKLSAgICAgICAgMCwgbWFwLnNpemUpOwotCi0gICAgaWYgKG9mZiA+IDApIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiUG9zc2libGUgc3luYyBhdCBidWZmZXIgb2Zmc2V0ICVkIiwgb2ZmKTsKLSAgICAgICpza2lwc2l6ZSA9IG9mZjsKLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgIlN5bmMgY29kZSBub3QgZm91bmQiKTsKLSAgICAqc2tpcHNpemUgPSBtYXAuc2l6ZSAtIDM7Ci0gICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgcmVzdWx0ID0gRkFMU0U7Ci0KLWNsZWFudXA6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgaWYgKHJlc3VsdCkKLSAgICAqc2tpcHNpemUgPSAwOwotCi0gIGlmIChyZXN1bHQgJiYgZnJhbWVzaXplIDw9IG1hcC5zaXplKSB7Ci0gICAgcmV0ID0gZ3N0X2ZsYWNfcGFyc2VfcGFyc2VfZnJhbWUgKHBhcnNlLCBmcmFtZSwgZnJhbWVzaXplKTsKLSAgICBpZiAocmV0ID09IEdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRCkgewotICAgICAgZnJhbWUtPmZsYWdzIHw9IEdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfRFJPUDsKLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIH0KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LKQotICAgICAgcmV0ID0gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUsIGZyYW1lc2l6ZSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX3BhcnNlX2hhbmRsZV9zdHJlYW1pbmZvIChHc3RGbGFjUGFyc2UgKiBmbGFjcGFyc2UsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Qml0UmVhZGVyIHJlYWRlcjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICBpZiAobWFwLnNpemUgIT0gNCArIDM0KSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmxhY3BhcnNlLAotICAgICAgICAiSW52YWxpZCBtZXRhYmxvY2sgc2l6ZSBmb3IgU1RSRUFNSU5GTzogJSIgR19HU0laRV9GT1JNQVQgIiIsIG1hcC5zaXplKTsKLSAgICBnb3RvIGZhaWx1cmU7Ci0gIH0KLQotICAvKiBTa2lwIG1ldGFkYXRhIGJsb2NrIGhlYWRlciAqLwotICBpZiAoIWdzdF9iaXRfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDMyKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDE2ICgmcmVhZGVyLCAmZmxhY3BhcnNlLT5taW5fYmxvY2tzaXplLCAxNikpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKGZsYWNwYXJzZS0+bWluX2Jsb2Nrc2l6ZSA8IDE2KSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmbGFjcGFyc2UsICJJbnZhbGlkIG1pbmltdW0gYmxvY2sgc2l6ZTogJXUiLAotICAgICAgICBmbGFjcGFyc2UtPm1pbl9ibG9ja3NpemUpOwotICB9Ci0KLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MTYgKCZyZWFkZXIsICZmbGFjcGFyc2UtPm1heF9ibG9ja3NpemUsIDE2KSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoZmxhY3BhcnNlLT5tYXhfYmxvY2tzaXplIDwgMTYpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZsYWNwYXJzZSwgIkludmFsaWQgbWF4aW11bSBibG9jayBzaXplOiAldSIsCi0gICAgICAgIGZsYWNwYXJzZS0+bWF4X2Jsb2Nrc2l6ZSk7Ci0gIH0KLQotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJmZsYWNwYXJzZS0+bWluX2ZyYW1lc2l6ZSwgMjQpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyICgmcmVhZGVyLCAmZmxhY3BhcnNlLT5tYXhfZnJhbWVzaXplLCAyNCkpCi0gICAgZ290byBlcnJvcjsKLQotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJmZsYWNwYXJzZS0+c2FtcGxlcmF0ZSwgMjApKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmIChmbGFjcGFyc2UtPnNhbXBsZXJhdGUgPT0gMCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZsYWNwYXJzZSwgIkludmFsaWQgc2FtcGxlIHJhdGUgMCIpOwotICAgIGdvdG8gZmFpbHVyZTsKLSAgfQotCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZmbGFjcGFyc2UtPmNoYW5uZWxzLCAzKSkKLSAgICBnb3RvIGVycm9yOwotICBmbGFjcGFyc2UtPmNoYW5uZWxzKys7Ci0gIGlmIChmbGFjcGFyc2UtPmNoYW5uZWxzID4gOCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZsYWNwYXJzZSwgIkludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzICV1IiwKLSAgICAgICAgZmxhY3BhcnNlLT5jaGFubmVscyk7Ci0gICAgZ290byBmYWlsdXJlOwotICB9Ci0KLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJnJlYWRlciwgJmZsYWNwYXJzZS0+YnBzLCA1KSkKLSAgICBnb3RvIGVycm9yOwotICBmbGFjcGFyc2UtPmJwcysrOwotCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDY0ICgmcmVhZGVyLCAmZmxhY3BhcnNlLT50b3RhbF9zYW1wbGVzLCAzNikpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKGZsYWNwYXJzZS0+dG90YWxfc2FtcGxlcykgewotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksCi0gICAgICAgIEdTVF9GT1JNQVRfREVGQVVMVCwgZmxhY3BhcnNlLT50b3RhbF9zYW1wbGVzLCAwKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY3BhcnNlLCAiU1RSRUFNSU5GTzpcbiIKLSAgICAgICJcdG1pbi9tYXggYmxvY2tzaXplOiAldS8ldSxcbiIKLSAgICAgICJcdG1pbi9tYXggZnJhbWVzaXplOiAldS8ldSxcbiIKLSAgICAgICJcdHNhbXBsZXJhdGU6ICV1LFxuIgotICAgICAgIlx0Y2hhbm5lbHM6ICV1LFxuIgotICAgICAgIlx0Yml0cyBwZXIgc2FtcGxlOiAldSxcbiIKLSAgICAgICJcdHRvdGFsIHNhbXBsZXM6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBmbGFjcGFyc2UtPm1pbl9ibG9ja3NpemUsIGZsYWNwYXJzZS0+bWF4X2Jsb2Nrc2l6ZSwKLSAgICAgIGZsYWNwYXJzZS0+bWluX2ZyYW1lc2l6ZSwgZmxhY3BhcnNlLT5tYXhfZnJhbWVzaXplLAotICAgICAgZmxhY3BhcnNlLT5zYW1wbGVyYXRlLAotICAgICAgZmxhY3BhcnNlLT5jaGFubmVscywgZmxhY3BhcnNlLT5icHMsIGZsYWNwYXJzZS0+dG90YWxfc2FtcGxlcyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWVycm9yOgotICBHU1RfRVJST1JfT0JKRUNUIChmbGFjcGFyc2UsICJGYWlsZWQgdG8gcmVhZCBkYXRhIik7Ci1mYWlsdXJlOgotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfcGFyc2VfaGFuZGxlX3ZvcmJpc2NvbW1lbnQgKEdzdEZsYWNQYXJzZSAqIGZsYWNwYXJzZSwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgdGFncyA9Ci0gICAgICBnc3RfdGFnX2xpc3RfZnJvbV92b3JiaXNjb21tZW50IChtYXAuZGF0YSwgbWFwLnNpemUsIG1hcC5kYXRhLCA0LCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICBpZiAodGFncyA9PSBOVUxMKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmxhY3BhcnNlLCAiSW52YWxpZCB2b3JiaXNjb21tZW50IGJsb2NrIik7Ci0gIH0gZWxzZSBpZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdzKSkgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIH0gZWxzZSBpZiAoZmxhY3BhcnNlLT50YWdzID09IE5VTEwpIHsKLSAgICBmbGFjcGFyc2UtPnRhZ3MgPSB0YWdzOwotICB9IGVsc2UgewotICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKGZsYWNwYXJzZS0+dGFncywgdGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmxhY19wYXJzZV9oYW5kbGVfY3Vlc2hlZXQgKEdzdEZsYWNQYXJzZSAqIGZsYWNwYXJzZSwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RCeXRlUmVhZGVyIHJlYWRlcjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50IGksIGo7Ci0gIGd1aW50OCBuX3RyYWNrcywgdHJhY2tfbnVtLCBpbmRleDsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgZ2NoYXIgKmlkOwotICBnY2hhciBpc3JjWzEzXTsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgR3N0VG9jICp0b2M7Ci0gIEdzdFRvY0VudHJ5ICpjdXJfZW50cnkgPSBOVUxMLCAqcHJldl9lbnRyeSA9IE5VTEw7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgdG9jID0gZ3N0X3RvY19uZXcgKEdTVF9UT0NfU0NPUEVfR0xPQkFMKTsKLQotICAvKiBza2lwIDQgYnl0ZXMgTUVUQURBVEFfQkxPQ0tfSEVBREVSICovCi0gIC8qIGh0dHBzOi8veGlwaC5vcmcvZmxhYy9mb3JtYXQuaHRtbCNtZXRhZGF0YV9ibG9ja19oZWFkZXIgKi8KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgNCkpCi0gICAgZ290byBlcnJvcjsKLQotICAvKiBza2lwIDM5NSBieXRlcyBmcm9tIE1FVEFEQVRBX0JMT0NLX0NVRVNIRUVUICovCi0gIC8qIGh0dHBzOi8veGlwaC5vcmcvZmxhYy9mb3JtYXQuaHRtbCNtZXRhZGF0YV9ibG9ja19jdWVzaGVldCAqLwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCAzOTUpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmcmVhZGVyLCAmbl90cmFja3MpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgLyogQ1VFU0hFRVRfVFJBQ0sgKi8KLSAgLyogaHR0cHM6Ly94aXBoLm9yZy9mbGFjL2Zvcm1hdC5odG1sI2N1ZXNoZWV0X3RyYWNrICovCi0gIGZvciAoaSA9IDA7IGkgPCBuX3RyYWNrczsgaSsrKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZSAoJnJlYWRlciwgJm9mZnNldCkpCi0gICAgICBnb3RvIGVycm9yOwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJnRyYWNrX251bSkpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSA8IDEyKQotICAgICAgZ290byBlcnJvcjsKLSAgICBtZW1jcHkgKGlzcmMsIG1hcC5kYXRhICsgZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpLCAxMik7Ci0gICAgLyogXDAtdGVybWluYXRlIHRoZSBzdHJpbmcgKi8KLSAgICBpc3JjWzEyXSA9ICdcMCc7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMTIpKQotICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIHNraXAgMTQgYnl0ZXMgZnJvbSBDVUVTSEVFVF9UUkFDSyAqLwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDE0KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmcmVhZGVyLCAmaW5kZXgpKQotICAgICAgZ290byBlcnJvcjsKLSAgICAvKiBhZGQgdHJhY2tzIGluIFRPQyAqLwotICAgIC8qIGxlYWQtb3V0IHRhY2sgaGFzIG51bWJlciAxNzAgb3IgMjU1ICovCi0gICAgaWYgKHRyYWNrX251bSAhPSAxNzAgJiYgdHJhY2tfbnVtICE9IDI1NSkgewotICAgICAgcHJldl9lbnRyeSA9IGN1cl9lbnRyeTsKLSAgICAgIC8qIHByZXZpb3VzIHRyYWNrIHN0b3AgdGltZSA9IGN1cnJlbnQgdHJhY2sgc3RhcnQgdGltZSAqLwotICAgICAgaWYgKHByZXZfZW50cnkgIT0gTlVMTCkgewotICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzIChwcmV2X2VudHJ5LCAmc3RhcnQsIE5VTEwpOwotICAgICAgICBzdG9wID0KLSAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAob2Zmc2V0LCBHU1RfU0VDT05ELAotICAgICAgICAgICAgZmxhY3BhcnNlLT5zYW1wbGVyYXRlKTsKLSAgICAgICAgZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lcyAocHJldl9lbnRyeSwgc3RhcnQsIHN0b3ApOwotICAgICAgfQotICAgICAgaWQgPSBnX3N0cmR1cF9wcmludGYgKCIlMDh4IiwgdHJhY2tfbnVtKTsKLSAgICAgIGN1cl9lbnRyeSA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfVFJBQ0ssIGlkKTsKLSAgICAgIGdfZnJlZSAoaWQpOwotICAgICAgc3RhcnQgPQotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAob2Zmc2V0LCBHU1RfU0VDT05ELAotICAgICAgICAgIGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSk7Ci0gICAgICBnc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzIChjdXJfZW50cnksIHN0YXJ0LCAtMSk7Ci0gICAgICAvKiBhZGQgSVNSQyBhcyB0YWcgaW4gdHJhY2sgKi8KLSAgICAgIGlmIChzdHJsZW4gKGlzcmMpICE9IDApIHsKLSAgICAgICAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCBHU1RfVEFHX0lTUkMsIGlzcmMsIE5VTEwpOwotICAgICAgICBnc3RfdG9jX2VudHJ5X3NldF90YWdzIChjdXJfZW50cnksIHRhZ3MpOwotICAgICAgfQotICAgICAgZ3N0X3RvY19hcHBlbmRfZW50cnkgKHRvYywgY3VyX2VudHJ5KTsKLSAgICAgIC8qIENVRVNIRUVUX1RSQUNLX0lOREVYICovCi0gICAgICAvKiBodHRwczovL3hpcGgub3JnL2ZsYWMvZm9ybWF0Lmh0bWwjY3Vlc2hlZXRfdHJhY2tfaW5kZXggKi8KLSAgICAgIGZvciAoaiA9IDA7IGogPCBpbmRleDsgaisrKSB7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDEyKSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBzZXQgc3RvcCB0aW1lIGluIGxhc3QgdHJhY2sgKi8KLSAgICAgIHN0b3AgPQotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAob2Zmc2V0LCBHU1RfU0VDT05ELAotICAgICAgICAgIGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSk7Ci0gICAgICBnc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzIChjdXJfZW50cnksIHN0YXJ0LCBzdG9wKTsKLSAgICB9Ci0gIH0KLQotICAvKiBzZW5kIGRhdGEgYXMgVE9DICovCi0gIGlmICghZmxhY3BhcnNlLT50b2MpCi0gICAgZmxhY3BhcnNlLT50b2MgPSB0b2M7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLWVycm9yOgotICBHU1RfRVJST1JfT0JKRUNUIChmbGFjcGFyc2UsICJFcnJvciByZWFkaW5nIGRhdGEiKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX3BhcnNlX2hhbmRsZV9waWN0dXJlIChHc3RGbGFjUGFyc2UgKiBmbGFjcGFyc2UsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDMyIGltZ19sZW4gPSAwLCBpbWdfdHlwZSA9IDA7Ci0gIGd1aW50MzIgaW1nX21pbWV0eXBlX2xlbiA9IDAsIGltZ19kZXNjcmlwdGlvbl9sZW4gPSAwOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDQpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnJlYWRlciwgJmltZ190eXBlKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZyZWFkZXIsICZpbWdfbWltZXR5cGVfbGVuKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCBpbWdfbWltZXR5cGVfbGVuKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZyZWFkZXIsICZpbWdfZGVzY3JpcHRpb25fbGVuKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCBpbWdfZGVzY3JpcHRpb25fbGVuKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDQgKiA0KSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZyZWFkZXIsICZpbWdfbGVuKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcyAoJnJlYWRlcikgKyBpbWdfbGVuID4gbWFwLnNpemUpCi0gICAgZ290byBlcnJvcjsKLQotICBHU1RfSU5GT19PQkpFQ1QgKGZsYWNwYXJzZSwgIkdvdCBpbWFnZSBvZiAlZCBieXRlcyIsIGltZ19sZW4pOwotCi0gIGlmIChpbWdfbGVuID4gMCkgewotICAgIGlmIChmbGFjcGFyc2UtPnRhZ3MgPT0gTlVMTCkKLSAgICAgIGZsYWNwYXJzZS0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgICBnc3RfdGFnX2xpc3RfYWRkX2lkM19pbWFnZSAoZmxhY3BhcnNlLT50YWdzLAotICAgICAgICBtYXAuZGF0YSArIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmcmVhZGVyKSwgaW1nX2xlbiwgaW1nX3R5cGUpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLWVycm9yOgotICBHU1RfRVJST1JfT0JKRUNUIChmbGFjcGFyc2UsICJFcnJvciByZWFkaW5nIGRhdGEiKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX3BhcnNlX2hhbmRsZV9zZWVrdGFibGUgKEdzdEZsYWNQYXJzZSAqIGZsYWNwYXJzZSwgR3N0QnVmZmVyICogYnVmZmVyKQotewotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgInN0b3Jpbmcgc2Vla3RhYmxlIik7Ci0gIC8qIG9ubHkgc3RvcmUgZm9yIG5vdzsKLSAgICogb2Zmc2V0IG9mIHRoZSBmaXJzdCBmcmFtZSBpcyBuZWVkZWQgdG8gZ2V0IHJlYWwgaW5mbyAqLwotICBpZiAoZmxhY3BhcnNlLT5zZWVrdGFibGUpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoZmxhY3BhcnNlLT5zZWVrdGFibGUpOwotICBmbGFjcGFyc2UtPnNlZWt0YWJsZSA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZsYWNfcGFyc2VfcHJvY2Vzc19zZWVrdGFibGUgKEdzdEZsYWNQYXJzZSAqIGZsYWNwYXJzZSwgZ2ludDY0IGJvZmZzZXQpCi17Ci0gIEdzdEJ5dGVSZWFkZXIgYnI7Ci0gIGdpbnQ2NCBvZmZzZXQgPSAwLCBzYW1wbGVzID0gMDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmxhY3BhcnNlLAotICAgICAgInBhcnNpbmcgc2Vla3RhYmxlOyBiYXNlIG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsIGJvZmZzZXQpOwotCi0gIGlmIChib2Zmc2V0IDw9IDApCi0gICAgZ290byBleGl0OwotCi0gIGdzdF9idWZmZXJfbWFwIChmbGFjcGFyc2UtPnNlZWt0YWJsZSwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZiciwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICAvKiBza2lwIGhlYWRlciAqLwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmYnIsIDQpKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBzZWVrcG9pbnRzICovCi0gIHdoaWxlIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJmJyKSkgewotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ2NF9iZSAoJmJyLCAmc2FtcGxlcykpCi0gICAgICBicmVhazsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50NjRfYmUgKCZiciwgJm9mZnNldCkpCi0gICAgICBicmVhazsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmYnIsIDIpKQotICAgICAgYnJlYWs7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZmxhY3BhcnNlLCAic2FtcGxlcyAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAtPiBvZmZzZXQgJSIKLSAgICAgICAgR19HSU5UNjRfRk9STUFULCBzYW1wbGVzLCBvZmZzZXQpOwotCi0gICAgLyogc2FuaXR5IGNoZWNrICovCi0gICAgaWYgKEdfTElLRUxZIChvZmZzZXQgPiAwICYmIHNhbXBsZXMgPiAwKSkgewotICAgICAgZ3N0X2Jhc2VfcGFyc2VfYWRkX2luZGV4X2VudHJ5IChHU1RfQkFTRV9QQVJTRSAoZmxhY3BhcnNlKSwKLSAgICAgICAgICBib2Zmc2V0ICsgb2Zmc2V0LCBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNhbXBsZXMsIEdTVF9TRUNPTkQsCi0gICAgICAgICAgICAgIGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSksIFRSVUUsIEZBTFNFKTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoZmxhY3BhcnNlLT5zZWVrdGFibGUsICZtYXApOwotZXhpdDoKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZmxhY3BhcnNlLT5zZWVrdGFibGUpOwotICBmbGFjcGFyc2UtPnNlZWt0YWJsZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fdmFsdWVfYXJyYXlfYXBwZW5kX2J1ZmZlciAoR1ZhbHVlICogYXJyYXlfdmFsLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCwgfTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgLyogY29weSBidWZmZXIgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBjaXJjdWxhciByZWZjb3VudHMgKi8KLSAgYnVmID0gZ3N0X2J1ZmZlcl9jb3B5IChidWYpOwotICAvKiBhZ2FpbiwgZm9yIGdvb2QgbWVhc3VyZSAqLwotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICBnc3RfdmFsdWVfc2V0X2J1ZmZlciAoJnZhbHVlLCBidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlIChhcnJheV92YWwsICZ2YWx1ZSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmxhY19wYXJzZV9oYW5kbGVfaGVhZGVycyAoR3N0RmxhY1BhcnNlICogZmxhY3BhcnNlKQotewotICBHc3RCdWZmZXIgKnZvcmJpc2NvbW1lbnQgPSBOVUxMOwotICBHc3RCdWZmZXIgKnN0cmVhbWluZm8gPSBOVUxMOwotICBHc3RCdWZmZXIgKm1hcmtlciA9IE5VTEw7Ci0gIEdWYWx1ZSBhcnJheSA9IHsgMCwgfTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR0xpc3QgKmw7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzID0gR1NUX0ZMT1dfT0s7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWZsYWMiLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgZmxhY3BhcnNlLT5jaGFubmVscywKLSAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwKLSAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgZmxhY3BhcnNlLT5zYW1wbGVyYXRlLCBOVUxMKTsKLQotICBpZiAoIWZsYWNwYXJzZS0+aGVhZGVycykKLSAgICBnb3RvIHB1c2hfaGVhZGVyczsKLQotICBmb3IgKGwgPSBmbGFjcGFyc2UtPmhlYWRlcnM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0QnVmZmVyICpoZWFkZXIgPSBsLT5kYXRhOwotICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGhlYWRlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGhlYWRlciwgR1NUX0JVRkZFUl9GTEFHX0hFQURFUik7Ci0KLSAgICBpZiAobWFwLnNpemUgPT0gNCAmJiBtZW1jbXAgKG1hcC5kYXRhLCAiZkxhQyIsIDQpID09IDApIHsKLSAgICAgIG1hcmtlciA9IGhlYWRlcjsKLSAgICB9IGVsc2UgaWYgKG1hcC5zaXplID4gMSAmJiAobWFwLmRhdGFbMF0gJiAweDdmKSA9PSAwKSB7Ci0gICAgICBzdHJlYW1pbmZvID0gaGVhZGVyOwotICAgIH0gZWxzZSBpZiAobWFwLnNpemUgPiAxICYmIChtYXAuZGF0YVswXSAmIDB4N2YpID09IDQpIHsKLSAgICAgIHZvcmJpc2NvbW1lbnQgPSBoZWFkZXI7Ci0gICAgfQotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoaGVhZGVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGF0IGxlYXN0IHRoaXMgb25lIHdlIGNhbiBnZW5lcmF0ZSBlYXNpbHkKLSAgICogdG8gcHJvdmlkZSBmdWxsIGhlYWRlcnMgZG93bnN0cmVhbSAqLwotICBpZiAodm9yYmlzY29tbWVudCA9PSBOVUxMICYmIHN0cmVhbWluZm8gIT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgIm1pc3Npbmcgdm9yYmlzY29tbWVudCBoZWFkZXI7IGdlbmVyYXRpbmcgZHVtbXkiKTsKLSAgICB2b3JiaXNjb21tZW50ID0gZ3N0X2ZsYWNfcGFyc2VfZ2VuZXJhdGVfdm9yYmlzY29tbWVudCAoZmxhY3BhcnNlKTsKLSAgICBmbGFjcGFyc2UtPmhlYWRlcnMgPSBnX2xpc3RfaW5zZXJ0IChmbGFjcGFyc2UtPmhlYWRlcnMsIHZvcmJpc2NvbW1lbnQsCi0gICAgICAgIGdfbGlzdF9pbmRleCAoZmxhY3BhcnNlLT5oZWFkZXJzLCBzdHJlYW1pbmZvKSArIDEpOwotICB9Ci0KLSAgaWYgKG1hcmtlciA9PSBOVUxMIHx8IHN0cmVhbWluZm8gPT0gTlVMTCB8fCB2b3JiaXNjb21tZW50ID09IE5VTEwpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgIm1pc3NpbmcgaGVhZGVyICVwICVwICVwLCBtdXhpbmcgaW50byBjb250YWluZXIgIgotICAgICAgICAiZm9ybWF0cyBtYXkgYmUgYnJva2VuIiwgbWFya2VyLCBzdHJlYW1pbmZvLCB2b3JiaXNjb21tZW50KTsKLSAgICBnb3RvIHB1c2hfaGVhZGVyczsKLSAgfQotCi0gIGdfdmFsdWVfaW5pdCAoJmFycmF5LCBHU1RfVFlQRV9BUlJBWSk7Ci0KLSAgLyogYWRkIG1hcmtlciBpbmNsdWRpbmcgU1RSRUFNSU5GTyBoZWFkZXIgKi8KLSAgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIGd1aW50MTYgbnVtOwotICAgIEdzdE1hcEluZm8gc2luZm9tYXAsIHdyaXRlbWFwOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKHN0cmVhbWluZm8sICZzaW5mb21hcCwgR1NUX01BUF9SRUFEKTsKLQotICAgIC8qIG1pbnVzIG9uZSBmb3IgdGhlIG1hcmtlciB0aGF0IGlzIG1lcmdlZCB3aXRoIHN0cmVhbWluZm8gaGVyZSAqLwotICAgIG51bSA9IGdfbGlzdF9sZW5ndGggKGZsYWNwYXJzZS0+aGVhZGVycykgLSAxOwotCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMyArIHNpbmZvbWFwLnNpemUpOwotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZ3cml0ZW1hcCwgR1NUX01BUF9XUklURSk7Ci0KLSAgICB3cml0ZW1hcC5kYXRhWzBdID0gMHg3ZjsKLSAgICBtZW1jcHkgKHdyaXRlbWFwLmRhdGEgKyAxLCAiRkxBQyIsIDQpOwotICAgIHdyaXRlbWFwLmRhdGFbNV0gPSAweDAxOyAgICAvKiBtYXBwaW5nIHZlcnNpb24gbWFqb3IgKi8KLSAgICB3cml0ZW1hcC5kYXRhWzZdID0gMHgwMDsgICAgLyogbWFwcGluZyB2ZXJzaW9uIG1pbm9yICovCi0gICAgd3JpdGVtYXAuZGF0YVs3XSA9IChudW0gJiAweEZGMDApID4+IDg7Ci0gICAgd3JpdGVtYXAuZGF0YVs4XSA9IChudW0gJiAweDAwRkYpID4+IDA7Ci0gICAgbWVtY3B5ICh3cml0ZW1hcC5kYXRhICsgOSwgImZMYUMiLCA0KTsKLSAgICBtZW1jcHkgKHdyaXRlbWFwLmRhdGEgKyAxMywgc2luZm9tYXAuZGF0YSwgc2luZm9tYXAuc2l6ZSk7Ci0gICAgX3ZhbHVlX2FycmF5X2FwcGVuZF9idWZmZXIgKCZhcnJheSwgYnVmKTsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKHN0cmVhbWluZm8sICZzaW5mb21hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmd3JpdGVtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLQotICAvKiBhZGQgVk9SQklTQ09NTUVOVCBoZWFkZXIgKi8KLSAgX3ZhbHVlX2FycmF5X2FwcGVuZF9idWZmZXIgKCZhcnJheSwgdm9yYmlzY29tbWVudCk7Ci0KLSAgLyogYWRkIG90aGVyIGhlYWRlcnMsIGlmIHRoZXJlIGFyZSBhbnkgKi8KLSAgZm9yIChsID0gZmxhY3BhcnNlLT5oZWFkZXJzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIGlmIChHU1RfQlVGRkVSX0NBU1QgKGwtPmRhdGEpICE9IG1hcmtlciAmJgotICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGwtPmRhdGEpICE9IHN0cmVhbWluZm8gJiYKLSAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChsLT5kYXRhKSAhPSB2b3JiaXNjb21tZW50KSB7Ci0gICAgICBfdmFsdWVfYXJyYXlfYXBwZW5kX2J1ZmZlciAoJmFycmF5LCBHU1RfQlVGRkVSX0NBU1QgKGwtPmRhdGEpKTsKLSAgICB9Ci0gIH0KLQotICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCksCi0gICAgICAic3RyZWFtaGVhZGVyIiwgJmFycmF5KTsKLSAgZ192YWx1ZV91bnNldCAoJmFycmF5KTsKLQotcHVzaF9oZWFkZXJzOgotCi0gIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKEdTVF9CQVNFX1BBUlNFIChmbGFjcGFyc2UpKSwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBwdXNoIGhlYWRlciBidWZmZXJzOyB1cGRhdGUgY2Fwcywgc28gd2hlbiB3ZSBwdXNoIHRoZSBmaXJzdCBidWZmZXIgdGhlCi0gICAqIG5lZ290aWF0ZWQgY2FwcyB3aWxsIGNoYW5nZSB0byBjYXBzIHRoYXQgaW5jbHVkZSB0aGUgc3RyZWFtaGVhZGVyIGZpZWxkICovCi0gIHdoaWxlIChmbGFjcGFyc2UtPmhlYWRlcnMpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IEdTVF9CVUZGRVIgKGZsYWNwYXJzZS0+aGVhZGVycy0+ZGF0YSk7Ci0gICAgR3N0QmFzZVBhcnNlRnJhbWUgZnJhbWU7Ci0KLSAgICBmbGFjcGFyc2UtPmhlYWRlcnMgPQotICAgICAgICBnX2xpc3RfZGVsZXRlX2xpbmsgKGZsYWNwYXJzZS0+aGVhZGVycywgZmxhY3BhcnNlLT5oZWFkZXJzKTsKLSAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0KLSAgICAvKiBpbml0LCBzZXQgYW5kIGdpdmUgYXdheSBmcmFtZSAqLwotICAgIGdzdF9iYXNlX3BhcnNlX2ZyYW1lX2luaXQgKCZmcmFtZSk7Ci0gICAgZnJhbWUuYnVmZmVyID0gYnVmOwotICAgIGZyYW1lLm92ZXJoZWFkID0gLTE7Ci0gICAgcmVzID0gZ3N0X2Jhc2VfcGFyc2VfcHVzaF9mcmFtZSAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksICZmcmFtZSk7Ci0gICAgZ3N0X2Jhc2VfcGFyc2VfZnJhbWVfZnJlZSAoJmZyYW1lKTsKLSAgICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgZ19saXN0X2ZvcmVhY2ggKGZsYWNwYXJzZS0+aGVhZGVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoZmxhY3BhcnNlLT5oZWFkZXJzKTsKLSAgZmxhY3BhcnNlLT5oZWFkZXJzID0gTlVMTDsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKiBlbXB0eSB2b3JiaXNjb21tZW50ICovCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9mbGFjX3BhcnNlX2dlbmVyYXRlX3ZvcmJpc2NvbW1lbnQgKEdzdEZsYWNQYXJzZSAqIGZsYWNwYXJzZSkKLXsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGd1Y2hhciBoZWFkZXJbNF07Ci0gIGd1aW50IHNpemU7Ci0gIEdzdEJ1ZmZlciAqdm9yYmlzY29tbWVudDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgaGVhZGVyWzBdID0gMHg4NDsgICAgICAgICAgICAgLyogaXNfbGFzdCA9IDE7IHR5cGUgPSA0OyAqLwotCi0gIHZvcmJpc2NvbW1lbnQgPQotICAgICAgZ3N0X3RhZ19saXN0X3RvX3ZvcmJpc2NvbW1lbnRfYnVmZmVyICh0YWdsaXN0LCBoZWFkZXIsCi0gICAgICBzaXplb2YgKGhlYWRlciksIE5VTEwpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotCi0gIGdzdF9idWZmZXJfbWFwICh2b3JiaXNjb21tZW50LCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLQotICAvKiBHZXQgcmlkIG9mIGZyYW1pbmcgYml0ICovCi0gIGlmIChtYXAuZGF0YVttYXAuc2l6ZSAtIDFdID09IDEpIHsKLSAgICBHc3RCdWZmZXIgKnN1YjsKLQotICAgIHN1YiA9Ci0gICAgICAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gKHZvcmJpc2NvbW1lbnQsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsCi0gICAgICAgIG1hcC5zaXplIC0gMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAodm9yYmlzY29tbWVudCwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAodm9yYmlzY29tbWVudCk7Ci0gICAgdm9yYmlzY29tbWVudCA9IHN1YjsKLSAgICBnc3RfYnVmZmVyX21hcCAodm9yYmlzY29tbWVudCwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIH0KLQotICBzaXplID0gbWFwLnNpemUgLSA0OwotICBtYXAuZGF0YVsxXSA9ICgoc2l6ZSAmIDB4RkYwMDAwKSA+PiAxNik7Ci0gIG1hcC5kYXRhWzJdID0gKChzaXplICYgMHgwMEZGMDApID4+IDgpOwotICBtYXAuZGF0YVszXSA9IChzaXplICYgMHgwMDAwRkYpOwotICBnc3RfYnVmZmVyX3VubWFwICh2b3JiaXNjb21tZW50LCAmbWFwKTsKLSAgZ3N0X2ZsYWNfcGFyc2VfcmVzZXRfYnVmZmVyX3RpbWVfYW5kX29mZnNldCAodm9yYmlzY29tbWVudCk7Ci0KLSAgcmV0dXJuIHZvcmJpc2NvbW1lbnQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfcGFyc2VfZ2VuZXJhdGVfaGVhZGVycyAoR3N0RmxhY1BhcnNlICogZmxhY3BhcnNlKQotewotICBHc3RCdWZmZXIgKm1hcmtlciwgKnN0cmVhbWluZm87Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIG1hcmtlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIGdzdF9idWZmZXJfbWFwIChtYXJrZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtZW1jcHkgKG1hcC5kYXRhLCAiZkxhQyIsIDQpOwotICBnc3RfYnVmZmVyX3VubWFwIChtYXJrZXIsICZtYXApOwotICBnc3RfZmxhY19wYXJzZV9yZXNldF9idWZmZXJfdGltZV9hbmRfb2Zmc2V0IChtYXJrZXIpOwotICBmbGFjcGFyc2UtPmhlYWRlcnMgPSBnX2xpc3RfYXBwZW5kIChmbGFjcGFyc2UtPmhlYWRlcnMsIG1hcmtlcik7Ci0KLSAgc3RyZWFtaW5mbyA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCArIDM0KTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKHN0cmVhbWluZm8sICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtZW1zZXQgKG1hcC5kYXRhLCAwLCA0ICsgMzQpOwotCi0gIC8qIG1ldGFkYXRhIGJsb2NrIGhlYWRlciAqLwotICBtYXAuZGF0YVswXSA9IDB4MDA7ICAgICAgICAgICAvKiBpc19sYXN0ID0gMDsgdHlwZSA9IDA7ICovCi0gIG1hcC5kYXRhWzFdID0gMHgwMDsgICAgICAgICAgIC8qIGxlbmd0aCA9IDM0OyAqLwotICBtYXAuZGF0YVsyXSA9IDB4MDA7Ci0gIG1hcC5kYXRhWzNdID0gMHgyMjsKLQotICAvKiBzdHJlYW1pbmZvICovCi0KLSAgbWFwLmRhdGFbNF0gPSAoZmxhY3BhcnNlLT5ibG9ja19zaXplID4+IDgpICYgMHhmZjsgICAgLyogbWluIGJsb2Nrc2l6ZSA9IGJsb2Nrc2l6ZTsgKi8KLSAgbWFwLmRhdGFbNV0gPSAoZmxhY3BhcnNlLT5ibG9ja19zaXplKSAmIDB4ZmY7Ci0gIG1hcC5kYXRhWzZdID0gKGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSA+PiA4KSAmIDB4ZmY7ICAgIC8qIG1heCBibG9ja3NpemUgPSBibG9ja3NpemU7ICovCi0gIG1hcC5kYXRhWzddID0gKGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSkgJiAweGZmOwotCi0gIG1hcC5kYXRhWzhdID0gMHgwMDsgICAgICAgICAgIC8qIG1pbiBmcmFtZXNpemUgPSAwOyAqLwotICBtYXAuZGF0YVs5XSA9IDB4MDA7Ci0gIG1hcC5kYXRhWzEwXSA9IDB4MDA7Ci0gIG1hcC5kYXRhWzExXSA9IDB4MDA7ICAgICAgICAgIC8qIG1heCBmcmFtZXNpemUgPSAwOyAqLwotICBtYXAuZGF0YVsxMl0gPSAweDAwOwotICBtYXAuZGF0YVsxM10gPSAweDAwOwotCi0gIG1hcC5kYXRhWzE0XSA9IChmbGFjcGFyc2UtPnNhbXBsZXJhdGUgPj4gMTIpICYgMHhmZjsKLSAgbWFwLmRhdGFbMTVdID0gKGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSA+PiA0KSAmIDB4ZmY7Ci0gIG1hcC5kYXRhWzE2XSA9IChmbGFjcGFyc2UtPnNhbXBsZXJhdGUgPj4gMCkgJiAweGYwOwotCi0gIG1hcC5kYXRhWzE2XSB8PSAoZmxhY3BhcnNlLT5jaGFubmVscyAtIDEpIDw8IDE7Ci0KLSAgbWFwLmRhdGFbMTZdIHw9ICgoZmxhY3BhcnNlLT5icHMgLSAxKSA+PiA0KSAmIDB4MDE7Ci0gIG1hcC5kYXRhWzE3XSA9ICgoKGZsYWNwYXJzZS0+YnBzIC0gMSkpICYgMHgwZikgPDwgNDsKLQotICB7Ci0gICAgZ2ludDY0IGR1cmF0aW9uOwotCi0gICAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKGZsYWNwYXJzZSksCi0gICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikgJiYgZHVyYXRpb24gIT0gLTEpIHsKLSAgICAgIGR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfVE9fRlJBTUVTIChkdXJhdGlvbiwgZmxhY3BhcnNlLT5zYW1wbGVyYXRlKTsKLQotICAgICAgbWFwLmRhdGFbMTddIHw9IChkdXJhdGlvbiA+PiAzMikgJiAweGZmOwotICAgICAgbWFwLmRhdGFbMThdIHw9IChkdXJhdGlvbiA+PiAyNCkgJiAweGZmOwotICAgICAgbWFwLmRhdGFbMTldIHw9IChkdXJhdGlvbiA+PiAxNikgJiAweGZmOwotICAgICAgbWFwLmRhdGFbMjBdIHw9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7Ci0gICAgICBtYXAuZGF0YVsyMV0gfD0gKGR1cmF0aW9uID4+IDApICYgMHhmZjsKLSAgICB9Ci0gIH0KLSAgLyogTUQ1ID0gMDsgKi8KLQotICBnc3RfYnVmZmVyX3VubWFwIChzdHJlYW1pbmZvLCAmbWFwKTsKLSAgZ3N0X2ZsYWNfcGFyc2VfcmVzZXRfYnVmZmVyX3RpbWVfYW5kX29mZnNldCAoc3RyZWFtaW5mbyk7Ci0gIGZsYWNwYXJzZS0+aGVhZGVycyA9IGdfbGlzdF9hcHBlbmQgKGZsYWNwYXJzZS0+aGVhZGVycywgc3RyZWFtaW5mbyk7Ci0KLSAgZmxhY3BhcnNlLT5oZWFkZXJzID0gZ19saXN0X2FwcGVuZCAoZmxhY3BhcnNlLT5oZWFkZXJzLAotICAgICAgZ3N0X2ZsYWNfcGFyc2VfZ2VuZXJhdGVfdm9yYmlzY29tbWVudCAoZmxhY3BhcnNlKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X2ZsYWNfcGFyc2VfcmVzZXRfYnVmZmVyX3RpbWVfYW5kX29mZnNldCAoR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9IDA7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9IDA7Ci19Ci0KLS8qIFR5cGUgMTI3IGlzIGludmFsaWQgZm9yIGEgbWV0YWRhdGEgYmxvY2sgaGVhZGVyICYgc2hvdWxkCi0gKiBiZSBkaXNjYXJkZWQgX2JlZm9yZV8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX3BhcnNlX2hhbmRsZV9ibG9ja190eXBlIChHc3RGbGFjUGFyc2UgKiBmbGFjcGFyc2UsIGd1aW50IHR5cGUsCi0gICAgR3N0QnVmZmVyICogc2J1ZmZlcikKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBTVFJFQU1JTkZPICovCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGZsYWNwYXJzZSwgIlNUUkVBTUlORk8gaGVhZGVyIik7Ci0gICAgICByZXQgPSBnc3RfZmxhY19wYXJzZV9oYW5kbGVfc3RyZWFtaW5mbyAoZmxhY3BhcnNlLCBzYnVmZmVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIFNFRUtUQUJMRSAqLwotICAgICAgR1NUX0lORk9fT0JKRUNUIChmbGFjcGFyc2UsICJTRUVLVEFCTEUgaGVhZGVyIik7Ci0gICAgICByZXQgPSBnc3RfZmxhY19wYXJzZV9oYW5kbGVfc2Vla3RhYmxlIChmbGFjcGFyc2UsIHNidWZmZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgLyogVk9SQklTX0NPTU1FTlQgKi8KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmxhY3BhcnNlLCAiVk9SQklTQ09NTUVOVCBoZWFkZXIiKTsKLSAgICAgIHJldCA9IGdzdF9mbGFjX3BhcnNlX2hhbmRsZV92b3JiaXNjb21tZW50IChmbGFjcGFyc2UsIHNidWZmZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA1OiAgICAgICAgICAgICAgICAgICAgLyogQ1VFU0hFRVQgKi8KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmxhY3BhcnNlLCAiQ1VFU0hFRVQgaGVhZGVyIik7Ci0gICAgICByZXQgPSBnc3RfZmxhY19wYXJzZV9oYW5kbGVfY3Vlc2hlZXQgKGZsYWNwYXJzZSwgc2J1ZmZlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAvKiBQSUNUVVJFICovCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGZsYWNwYXJzZSwgIlBJQ1RVUkUgaGVhZGVyIik7Ci0gICAgICByZXQgPSBnc3RfZmxhY19wYXJzZV9oYW5kbGVfcGljdHVyZSAoZmxhY3BhcnNlLCBzYnVmZmVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgIC8qIFBBRERJTkcgKi8KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmxhY3BhcnNlLCAiUEFERElORyBoZWFkZXIiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIEFQUExJQ0FUSU9OICovCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGZsYWNwYXJzZSwgIkFQUExJQ0FUSU9OIGhlYWRlciIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgLyogUkVTRVJWRUQgKi8KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmxhY3BhcnNlLCAiVW5oYW5kbGVkIG1ldGFkYXRhIGhlYWRlciB0eXBlICcldSciLCB0eXBlKTsKLSAgICAgIEdTVF9GSVhNRV9PQkpFQ1QgKGZsYWNwYXJzZSwgIkZMQUMgdmVyc2lvbiBtaWdodCBub3QgYmUgZnVsbHkgc3VwcG9ydGVkIik7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmxhY19wYXJzZV9wYXJzZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsCi0gICAgZ2ludCBzaXplKQotewotICBHc3RGbGFjUGFyc2UgKmZsYWNwYXJzZSA9IEdTVF9GTEFDX1BBUlNFIChwYXJzZSk7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gZnJhbWUtPmJ1ZmZlciwgKnNidWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX0VSUk9SOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKGZsYWNwYXJzZS0+c3RhdGUgPT0gR1NUX0ZMQUNfUEFSU0VfU1RBVEVfSU5JVCkgewotICAgIHNidWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIHNpemUpOwotICAgIGdzdF9mbGFjX3BhcnNlX3Jlc2V0X2J1ZmZlcl90aW1lX2FuZF9vZmZzZXQgKHNidWZmZXIpOwotCi0gICAgLyogMzIgYml0cyBtZXRhZGF0YSBibG9jayAqLwotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksIDQpOwotICAgIGZsYWNwYXJzZS0+c3RhdGUgPSBHU1RfRkxBQ19QQVJTRV9TVEFURV9IRUFERVJTOwotCi0gICAgZmxhY3BhcnNlLT5oZWFkZXJzID0gZ19saXN0X2FwcGVuZCAoZmxhY3BhcnNlLT5oZWFkZXJzLCBzYnVmZmVyKTsKLQotICAgIHJlcyA9IEdTVF9CQVNFX1BBUlNFX0ZMT1dfRFJPUFBFRDsKLSAgfSBlbHNlIGlmIChmbGFjcGFyc2UtPnN0YXRlID09IEdTVF9GTEFDX1BBUlNFX1NUQVRFX0hFQURFUlMpIHsKLSAgICBnYm9vbGVhbiBpc19sYXN0ID0gbWFwLmRhdGFbMF0gPj4gNzsKLSAgICBndWludCB0eXBlID0gKG1hcC5kYXRhWzBdICYgMHg3Rik7Ci0KLSAgICBpZiAodHlwZSA9PSAxMjcpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZmxhY3BhcnNlLCAiSW52YWxpZCBtZXRhZGF0YSBibG9jayB0eXBlIDEyNyIpOwotICAgICAgcmVzID0gR1NUX0JBU0VfUEFSU0VfRkxPV19EUk9QUEVEOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgIkhhbmRsaW5nIG1ldGFkYXRhIGJsb2NrIG9mIHR5cGUgJXUiLCB0eXBlKTsKLQotICAgIHNidWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIHNpemUpOwotCi0gICAgaWYgKGdzdF9mbGFjX3BhcnNlX2hhbmRsZV9ibG9ja190eXBlIChmbGFjcGFyc2UsIHR5cGUsIHNidWZmZXIpKSB7Ci0gICAgICBnc3RfZmxhY19wYXJzZV9yZXNldF9idWZmZXJfdGltZV9hbmRfb2Zmc2V0IChzYnVmZmVyKTsKLSAgICAgIGZsYWNwYXJzZS0+aGVhZGVycyA9IGdfbGlzdF9hcHBlbmQgKGZsYWNwYXJzZS0+aGVhZGVycywgc2J1ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJmYWlsZWQgdG8gcGFyc2UgaGVhZGVyIG9mIHR5cGUgJXUiLCB0eXBlKTsKLSAgICAgIEdTVF9NRU1EVU1QX09CSkVDVCAocGFyc2UsICJiYWQgaGVhZGVyIGRhdGEiLCBtYXAuZGF0YSwgc2l6ZSk7Ci0KLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHNidWZmZXIpOwotCi0gICAgICAvKiBlcnJvciBvdXQgdW5sZXNzIHdlIGhhdmUgYSBTVFJFQU1JTkZPIGhlYWRlciAqLwotICAgICAgaWYgKGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSA9PSAwIHx8IGZsYWNwYXJzZS0+YnBzID09IDApCi0gICAgICAgIGdvdG8gaGVhZGVyX3BhcnNpbmdfZXJyb3I7Ci0KLSAgICAgIC8qIC4uIGluIHdoaWNoIGNhc2UganVzdCBzdG9wIGhlYWRlciBwYXJzaW5nIGFuZCB0cnkgdG8gZmluZCBhdWRpbyAqLwotICAgICAgaXNfbGFzdCA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKGlzX2xhc3QpIHsKLSAgICAgIHJlcyA9IGdzdF9mbGFjX3BhcnNlX2hhbmRsZV9oZWFkZXJzIChmbGFjcGFyc2UpOwotCi0gICAgICAvKiBNaW5pbWFsIHNpemUgb2YgYSBmcmFtZSBoZWFkZXIgKi8KLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksIE1BWCAoOSwKLSAgICAgICAgICAgICAgZmxhY3BhcnNlLT5taW5fZnJhbWVzaXplKSk7Ci0gICAgICBmbGFjcGFyc2UtPnN0YXRlID0gR1NUX0ZMQUNfUEFSU0VfU1RBVEVfREFUQTsKLQotICAgICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIC8qIERST1BQRUQgYmVjYXVzZSB3ZSBwdXNoZWQgYWxyZWFkeSBvciB3aWxsIHB1c2ggYWxsIGhlYWRlcnMgbWFudWFsbHkgKi8KLSAgICByZXMgPSBHU1RfQkFTRV9QQVJTRV9GTE9XX0RST1BQRUQ7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGZsYWNwYXJzZS0+b2Zmc2V0ICE9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpKSB7Ci0gICAgICBGcmFtZUhlYWRlckNoZWNrUmV0dXJuIHJldDsKLQotICAgICAgZmxhY3BhcnNlLT5vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKTsKLSAgICAgIHJldCA9Ci0gICAgICAgICAgZ3N0X2ZsYWNfcGFyc2VfZnJhbWVfaGVhZGVyX2lzX3ZhbGlkIChmbGFjcGFyc2UsCi0gICAgICAgICAgbWFwLmRhdGEsIG1hcC5zaXplLCBUUlVFLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmIChyZXQgIT0gRlJBTUVfSEVBREVSX1ZBTElEKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZsYWNwYXJzZSwKLSAgICAgICAgICAgICJCYXNlY2xhc3MgZGlkbid0IHByb3ZpZGUgYSBjb21wbGV0ZSBmcmFtZSIpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSA9PSAwKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChmbGFjcGFyc2UsICJVbnBhcnNlZCBmcmFtZSIpOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIGlmIChmbGFjcGFyc2UtPnNlZWt0YWJsZSkKLSAgICAgIGdzdF9mbGFjX3BhcnNlX3Byb2Nlc3Nfc2Vla3RhYmxlIChmbGFjcGFyc2UsIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpKTsKLQotICAgIGlmIChmbGFjcGFyc2UtPnN0YXRlID09IEdTVF9GTEFDX1BBUlNFX1NUQVRFX0dFTkVSQVRFX0hFQURFUlMpIHsKLSAgICAgIGlmIChmbGFjcGFyc2UtPmJsb2NraW5nX3N0cmF0ZWd5ID09IDEpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChmbGFjcGFyc2UsCi0gICAgICAgICAgICAiR2VuZXJhdGluZyBoZWFkZXJzIGZvciB2YXJpYWJsZSBibG9ja3NpemUgc3RyZWFtcyBub3Qgc3VwcG9ydGVkIik7Ci0KLSAgICAgICAgcmVzID0gZ3N0X2ZsYWNfcGFyc2VfaGFuZGxlX2hlYWRlcnMgKGZsYWNwYXJzZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChmbGFjcGFyc2UsICJHZW5lcmF0aW5nIGhlYWRlcnMiKTsKLQotICAgICAgICBpZiAoIWdzdF9mbGFjX3BhcnNlX2dlbmVyYXRlX2hlYWRlcnMgKGZsYWNwYXJzZSkpCi0gICAgICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgICAgIHJlcyA9IGdzdF9mbGFjX3BhcnNlX2hhbmRsZV9oZWFkZXJzIChmbGFjcGFyc2UpOwotICAgICAgfQotICAgICAgZmxhY3BhcnNlLT5zdGF0ZSA9IEdTVF9GTEFDX1BBUlNFX1NUQVRFX0RBVEE7Ci0gICAgICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgLyogYWxzbyBjYXRlciBmb3Igb2dnbXV4IG1ldGFkYXRhICovCi0gICAgaWYgKGZsYWNwYXJzZS0+YmxvY2tpbmdfc3RyYXRlZ3kgPT0gMCkgewotICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPQotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZmxhY3BhcnNlLT5zYW1wbGVfbnVtYmVyLAotICAgICAgICAgIGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSAqIEdTVF9TRUNPTkQsIGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSk7Ci0gICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcikgPQotICAgICAgICAgIGZsYWNwYXJzZS0+c2FtcGxlX251bWJlciAqIGZsYWNwYXJzZS0+YmxvY2tfc2l6ZSArCi0gICAgICAgICAgZmxhY3BhcnNlLT5ibG9ja19zaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9Ci0gICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChmbGFjcGFyc2UtPnNhbXBsZV9udW1iZXIsIEdTVF9TRUNPTkQsCi0gICAgICAgICAgZmxhY3BhcnNlLT5zYW1wbGVyYXRlKTsKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9Ci0gICAgICAgICAgZmxhY3BhcnNlLT5zYW1wbGVfbnVtYmVyICsgZmxhY3BhcnNlLT5ibG9ja19zaXplOwotICAgIH0KLQotICAgIEdTVF9CVUZGRVJfRFRTIChidWZmZXIpID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcik7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSwgR1NUX1NFQ09ORCwKLSAgICAgICAgZmxhY3BhcnNlLT5zYW1wbGVyYXRlKTsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0KLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgLSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICAgIC8qIFRvIHNpbXBsaWZ5LCB3ZSBqdXN0IGFzc3VtZSB0aGF0IGl0J3MgYSBmaXhlZCBzaXplIGhlYWRlciBhbmQgaWdub3JlCi0gICAgICogc3ViZnJhbWUgaGVhZGVycy4gVGhlIGZpcnN0IGNvdWxkIGxlYWQgdXMgdG8gYmUgb2ZmIGJ5IDg4IGJpdHMgYW5kCi0gICAgICogdGhlIHNlY29uZCBldmVuIGxlc3MsIHNvIHRoZSB0b3RhbCBpbmFjY3VyYWN5IGlzIG5lZ2xpZ2libGUuICovCi0gICAgZnJhbWUtPm92ZXJoZWFkID0gNzsKLQotICAgIC8qIE1pbmltYWwgc2l6ZSBvZiBhIGZyYW1lIGhlYWRlciAqLwotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKGZsYWNwYXJzZSksIE1BWCAoOSwKLSAgICAgICAgICAgIGZsYWNwYXJzZS0+bWluX2ZyYW1lc2l6ZSkpOwotCi0gICAgZmxhY3BhcnNlLT5vZmZzZXQgPSAtMTsKLSAgICBmbGFjcGFyc2UtPmJsb2NraW5nX3N0cmF0ZWd5ID0gMDsKLSAgICBmbGFjcGFyc2UtPnNhbXBsZV9udW1iZXIgPSAwOwotICAgIHJlcyA9IEdTVF9GTE9XX09LOwotICB9Ci0KLWNsZWFudXA6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIHJldHVybiByZXM7Ci0KLWhlYWRlcl9wYXJzaW5nX2Vycm9yOgotICBHU1RfRUxFTUVOVF9FUlJPUiAoZmxhY3BhcnNlLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVycyIpKTsKLSAgZ290byBjbGVhbnVwOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ZsYWNfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKQotewotICBHc3RGbGFjUGFyc2UgKmZsYWNwYXJzZSA9IEdTVF9GTEFDX1BBUlNFIChwYXJzZSk7Ci0KLSAgaWYgKCFmbGFjcGFyc2UtPnNlbnRfY29kZWNfdGFnKSB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIGlmIChmbGFjcGFyc2UtPnRhZ3MgPT0gTlVMTCkKLSAgICAgIGZsYWNwYXJzZS0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgICAvKiBjb2RlYyB0YWcgKi8KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSkpOwotICAgIGlmIChHX1VOTElLRUxZIChjYXBzID09IE5VTEwpKSB7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBmbHVzaGluZyIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICB9Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBub3QgbmVnb3RpYXRlZCEiKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICB9Ci0gICAgZ3N0X3BiX3V0aWxzX2FkZF9jb2RlY19kZXNjcmlwdGlvbl90b190YWdfbGlzdCAoZmxhY3BhcnNlLT50YWdzLAotICAgICAgICBHU1RfVEFHX0FVRElPX0NPREVDLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICAvKiBBbm5vdW5jZSBvdXIgcGVuZGluZyB0YWdzICovCi0gICAgZ3N0X2Jhc2VfcGFyc2VfbWVyZ2VfdGFncyAocGFyc2UsIGZsYWNwYXJzZS0+dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLQotICAgIC8qIGFsc28gc2lnbmFscyB0aGUgZW5kIG9mIGZpcnN0LWZyYW1lIHByb2Nlc3NpbmcgKi8KLSAgICBmbGFjcGFyc2UtPnNlbnRfY29kZWNfdGFnID0gVFJVRTsKLSAgfQotCi0gIC8qIFB1c2ggdG9jICovCi0gIGlmIChmbGFjcGFyc2UtPnRvYykgewotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAoZmxhY3BhcnNlKSwKLSAgICAgICAgZ3N0X2V2ZW50X25ld190b2MgKGZsYWNwYXJzZS0+dG9jLCBGQUxTRSkpOwotICB9Ci0KLSAgZnJhbWUtPmZsYWdzIHw9IEdTVF9CQVNFX1BBUlNFX0ZSQU1FX0ZMQUdfQ0xJUDsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZsYWNfcGFyc2VfY29udmVydCAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwKLSAgICBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBHc3RGbGFjUGFyc2UgKmZsYWNwYXJzZSA9IEdTVF9GTEFDX1BBUlNFIChwYXJzZSk7Ci0KLSAgaWYgKGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSA+IDApIHsKLSAgICBpZiAoc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX0RFRkFVTFQgJiYgZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICBpZiAoc3JjX3ZhbHVlICE9IC0xKQotICAgICAgICAqZGVzdF92YWx1ZSA9Ci0gICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwgR1NUX1NFQ09ORCwKLSAgICAgICAgICAgIGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSk7Ci0gICAgICBlbHNlCi0gICAgICAgICpkZXN0X3ZhbHVlID0gLTE7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9IGVsc2UgaWYgKHNyY19mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FICYmCi0gICAgICAgIGRlc3RfZm9ybWF0ID09IEdTVF9GT1JNQVRfREVGQVVMVCkgewotICAgICAgaWYgKHNyY192YWx1ZSAhPSAtMSkKLSAgICAgICAgKmRlc3RfdmFsdWUgPQotICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcmNfdmFsdWUsIGZsYWNwYXJzZS0+c2FtcGxlcmF0ZSwKLSAgICAgICAgICAgIEdTVF9TRUNPTkQpOwotICAgICAgZWxzZQotICAgICAgICAqZGVzdF92YWx1ZSA9IC0xOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1BBUlNFX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jb252ZXJ0IChwYXJzZSwgc3JjX2Zvcm1hdCwKLSAgICAgIHNyY192YWx1ZSwgZGVzdF9mb3JtYXQsIGRlc3RfdmFsdWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbGFjX3BhcnNlX3NyY19ldmVudCAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEZsYWNQYXJzZSAqZmxhY3BhcnNlID0gR1NUX0ZMQUNfUEFSU0UgKHBhcnNlKTsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfVE9DX1NFTEVDVDoKLSAgICB7Ci0gICAgICBHc3RUb2NFbnRyeSAqZW50cnkgPSBOVUxMOwotICAgICAgR3N0RXZlbnQgKnNlZWtfZXZlbnQ7Ci0gICAgICBHc3RUb2MgKnRvYyA9IE5VTEw7Ci0gICAgICBnaW50NjQgc3RhcnRfcG9zOwotICAgICAgZ2NoYXIgKnVpZCA9IE5VTEw7Ci0KLSAgICAgIC8qIEZJWE1FOiBzb21lIGxvY2tpbmcgd291bGQgYmUgZ29vZCAqLwotICAgICAgaWYgKGZsYWNwYXJzZS0+dG9jKQotICAgICAgICB0b2MgPSBnc3RfdG9jX3JlZiAoZmxhY3BhcnNlLT50b2MpOwotCi0gICAgICBpZiAodG9jICE9IE5VTEwpIHsKLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QgKGV2ZW50LCAmdWlkKTsKLSAgICAgICAgaWYgKHVpZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgZW50cnkgPSBnc3RfdG9jX2ZpbmRfZW50cnkgKHRvYywgdWlkKTsKLSAgICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyAoZW50cnksICZzdGFydF9wb3MsIE5VTEwpOwotCi0gICAgICAgICAgICAvKiBGSVhNRTogdXNlIHNlZ21lbnQgcmF0ZSBoZXJlIGluc3RlYWQ/ICovCi0gICAgICAgICAgICBzZWVrX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsCi0gICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsCi0gICAgICAgICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHN0YXJ0X3BvcywgR1NUX1NFRUtfVFlQRV9OT05FLCAtMSk7Ci0KLSAgICAgICAgICAgIHJlcyA9Ci0gICAgICAgICAgICAgICAgR1NUX0JBU0VfUEFSU0VfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNyY19ldmVudCAocGFyc2UsCi0gICAgICAgICAgICAgICAgc2Vla19ldmVudCk7Ci0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIm5vIFRPQyBlbnRyeSB3aXRoIGdpdmVuIFVJRDogJXMiLCB1aWQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnX2ZyZWUgKHVpZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZ3N0X3RvY191bnJlZiAodG9jKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZsYWNwYXJzZSwgIm5vIFRPQyB0byBzZWxlY3QiKTsKLSAgICAgIH0KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBHU1RfQkFTRV9QQVJTRV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c3JjX2V2ZW50IChwYXJzZSwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9maWVsZHMgKEdzdENhcHMgKiBjYXBzKQotewotICBndWludCBpLCBuOwotCi0gIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiZnJhbWVkIik7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2ZsYWNfcGFyc2VfZ2V0X3NpbmtfY2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnBlZXJjYXBzLCAqdGVtcGw7Ci0gIEdzdENhcHMgKnJlczsKLQotICB0ZW1wbCA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAocGFyc2UpKTsKLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmZjb3B5ID0gZ3N0X2NhcHNfY29weSAoZmlsdGVyKTsKLSAgICAvKiBSZW1vdmUgdGhlIGZpZWxkcyB3ZSBjb252ZXJ0ICovCi0gICAgcmVtb3ZlX2ZpZWxkcyAoZmNvcHkpOwotICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgZmNvcHkpOwotICAgIGdzdF9jYXBzX3VucmVmIChmY29weSk7Ci0gIH0gZWxzZQotICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgTlVMTCk7Ci0KLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBmcmFtZWQgZmllbGQgKi8KLSAgICBwZWVyY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHBlZXJjYXBzKTsKLSAgICByZW1vdmVfZmllbGRzIChwZWVyY2Fwcyk7Ci0KLSAgICByZXMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocGVlcmNhcHMsIHRlbXBsLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsKTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSB0ZW1wbDsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7Ci0gICAgcmVzID0gaW50ZXJzZWN0aW9uOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmggYi9nc3QvYXVkaW9wYXJzZXJzL2dzdGZsYWNwYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmQ3MThlLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0ZmxhY3BhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+LgotICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBDb250YWN0OiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfRkxBQ19QQVJTRV9IX18KLSNkZWZpbmUgX19HU1RfRkxBQ19QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0ZMQUNfUEFSU0UJCSAgIChnc3RfZmxhY19wYXJzZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfRkxBQ19QQVJTRShvYmopCQkgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRkxBQ19QQVJTRSxHc3RGbGFjUGFyc2UpKQotI2RlZmluZSBHU1RfRkxBQ19QQVJTRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRkxBQ19QQVJTRSxHc3RGbGFjUGFyc2VDbGFzcykpCi0jZGVmaW5lIEdTVF9GTEFDX1BBUlNFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSxHU1RfVFlQRV9GTEFDX1BBUlNFLEdzdEZsYWNQYXJzZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZMQUNfUEFSU0Uob2JqKQkgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRkxBQ19QQVJTRSkpCi0jZGVmaW5lIEdTVF9JU19GTEFDX1BBUlNFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GTEFDX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0ZMQUNfUEFSU0VfQ0FTVChvYmopCSgoR3N0RmxhY1BhcnNlICopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RGbGFjUGFyc2UgR3N0RmxhY1BhcnNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEZsYWNQYXJzZUNsYXNzIEdzdEZsYWNQYXJzZUNsYXNzOwotCi10eXBlZGVmIGVudW0gewotICBHU1RfRkxBQ19QQVJTRV9TVEFURV9JTklULAotICBHU1RfRkxBQ19QQVJTRV9TVEFURV9IRUFERVJTLAotICBHU1RfRkxBQ19QQVJTRV9TVEFURV9HRU5FUkFURV9IRUFERVJTLAotICBHU1RfRkxBQ19QQVJTRV9TVEFURV9EQVRBCi19IEdzdEZsYWNQYXJzZVN0YXRlOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGd1aW50OCB0eXBlOwotfSBHc3RGbGFjUGFyc2VTdWJGcmFtZTsKLQotc3RydWN0IF9Hc3RGbGFjUGFyc2UgewotICBHc3RCYXNlUGFyc2UgcGFyZW50OwotCi0gIC8qIFByb3BlcnRpZXMgKi8KLSAgZ2Jvb2xlYW4gY2hlY2tfZnJhbWVfY2hlY2tzdW1zOwotCi0gIEdzdEZsYWNQYXJzZVN0YXRlIHN0YXRlOwotCi0gIGdpbnQ2NCB1cHN0cmVhbV9sZW5ndGg7Ci0KLSAgLyogU1RSRUFNSU5GTyBjb250ZW50ICovCi0gIGd1aW50MTYgbWluX2Jsb2Nrc2l6ZSwgbWF4X2Jsb2Nrc2l6ZTsKLSAgZ3VpbnQzMiBtaW5fZnJhbWVzaXplLCBtYXhfZnJhbWVzaXplOwotICBndWludDMyIHNhbXBsZXJhdGU7Ci0gIGd1aW50OCBjaGFubmVsczsKLSAgZ3VpbnQ4IGJwczsKLSAgZ3VpbnQ2NCB0b3RhbF9zYW1wbGVzOwotCi0gIC8qIEN1cnJlbnQgZnJhbWUgKi8KLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0gIGd1aW50OCBibG9ja2luZ19zdHJhdGVneTsKLSAgZ3VpbnQxNiBibG9ja19zaXplOwotICBndWludDY0IHNhbXBsZV9udW1iZXI7Ci0gIGdib29sZWFuIHN0cmF0ZWd5X2NoZWNrZWQ7Ci0KLSAgZ2Jvb2xlYW4gc2VudF9jb2RlY190YWc7Ci0KLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgR3N0VG9jICp0b2M7Ci0KLSAgR0xpc3QgKmhlYWRlcnM7Ci0gIEdzdEJ1ZmZlciAqc2Vla3RhYmxlOwotCi0gIGdib29sZWFuIGZvcmNlX3ZhcmlhYmxlX2Jsb2NrX3NpemU7Ci19OwotCi1zdHJ1Y3QgX0dzdEZsYWNQYXJzZUNsYXNzIHsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2ZsYWNfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRkxBQ19QQVJTRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYyBiL2dzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzMjk3My4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9wYXJzZXJzL2dzdG1wZWdhdWRpb3BhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUyICswLDAgQEAKLS8qIEdTdHJlYW1lciBNUEVHIGF1ZGlvIHBhcnNlcgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXcgdXNlcnMgc2YgbmV0PgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBDb250YWN0OiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tcGVnYXVkaW9wYXJzZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBNUEVHIGF1ZGlvIHBhcnNlcgotICogQHNlZV9hbHNvOiAjR3N0QW1yUGFyc2UsICNHc3RBQUNQYXJzZQotICoKLSAqIFBhcnNlcyBhbmQgZnJhbWVzIG1wZWcxIGF1ZGlvIHN0cmVhbXMuIFByb3ZpZGVzIHNlZWtpbmcuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249dGVzdC5tcDMgISBtcGVnYXVkaW9wYXJzZSAhIG1hZCAhIGF1dG9hdWRpb3NpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qIEZJWE1FOiB3ZSBzaG91bGQgbWFrZSB0aGUgYmFzZSBjbGFzcyAoR3N0QmFzZVBhcnNlKSBhd2FyZSBvZiB0aGUKLSAqIFhJTkcgc2VlayB0YWJsZSBzb21laG93LCBzbyBpdCBjYW4gdXNlIGl0IHByb3Blcmx5IGZvciB0aGluZ3MgbGlrZQotICogYWNjdXJhdGUgc2Vla3MuIEN1cnJlbnRseSBpdCBjYW4gb25seSBkbyBhIGxvb2t1cCB2aWEgdGhlIGNvbnZlcnQgZnVuY3Rpb24sCi0gKiBidXQgdGhlbiBkb2Vzbid0IGtub3cgd2hhdCB0aGUgcmVzdWx0IHJlcHJlc2VudHMgZXhhY3RseS4gT25lIGNvdWxkIGVpdGhlcgotICogYWRkIGEgdmZ1bmMgZm9yIGluZGV4IGxvb2t1cCwgb3IganVzdCBtYWtlIG1wZWdhdWRpb3BhcnNlIHBvcHVsYXRlIHRoZQotICogYmFzZSBjbGFzcydzIGluZGV4IHZpYSB0aGUgQVBJIHByb3ZpZGVkLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdG1wZWdhdWRpb3BhcnNlLmgiCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAobXBlZ19hdWRpb19wYXJzZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBtcGVnX2F1ZGlvX3BhcnNlX2RlYnVnCi0KLSNkZWZpbmUgTVBFR19BVURJT19DSEFOTkVMX01PREVfVU5LTk9XTiAtMQotI2RlZmluZSBNUEVHX0FVRElPX0NIQU5ORUxfTU9ERV9TVEVSRU8gMAotI2RlZmluZSBNUEVHX0FVRElPX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU8gMQotI2RlZmluZSBNUEVHX0FVRElPX0NIQU5ORUxfTU9ERV9EVUFMX0NIQU5ORUwgMgotI2RlZmluZSBNUEVHX0FVRElPX0NIQU5ORUxfTU9ERV9NT05PIDMKLQotI2RlZmluZSBDUkNfVU5LTk9XTiAtMQotI2RlZmluZSBDUkNfUFJPVEVDVEVEIDAKLSNkZWZpbmUgQ1JDX05PVF9QUk9URUNURUQgMQotCi0jZGVmaW5lIFhJTkdfRlJBTUVTX0ZMQUcgICAgIDB4MDAwMQotI2RlZmluZSBYSU5HX0JZVEVTX0ZMQUcgICAgICAweDAwMDIKLSNkZWZpbmUgWElOR19UT0NfRkxBRyAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIFhJTkdfVkJSX1NDQUxFX0ZMQUcgIDB4MDAwOAotCi0jZGVmaW5lIE1JTl9GUkFNRV9TSVpFICAgICAgIDYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9tcGVnLCAiCi0gICAgICAgICJtcGVndmVyc2lvbiA9IChpbnQpIDEsICIKLSAgICAgICAgImxheWVyID0gKGludCkgWyAxLCAzIF0sICIKLSAgICAgICAgIm1wZWdhdWRpb3ZlcnNpb24gPSAoaW50KSBbIDEsIDNdLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA4MDAwLCA0ODAwMCBdLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdLCAiICJwYXJzZWQ9KGJvb2xlYW4pIHRydWUiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb24gPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfbXBlZ19hdWRpb19wYXJzZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXBlZ19hdWRpb19wYXJzZV9zdGFydCAoR3N0QmFzZVBhcnNlICogcGFyc2UpOwotc3RhdGljIGdib29sZWFuIGdzdF9tcGVnX2F1ZGlvX3BhcnNlX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tcGVnX2F1ZGlvX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tcGVnX2F1ZGlvX3BhcnNlX3ByZV9wdXNoX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXBlZ19hdWRpb19wYXJzZV9jb252ZXJ0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwgZ2ludDY0IHNyY192YWx1ZSwKLSAgICBHc3RGb3JtYXQgZGVzdF9mb3JtYXQsIGdpbnQ2NCAqIGRlc3RfdmFsdWUpOwotc3RhdGljIEdzdENhcHMgKmdzdF9tcGVnX2F1ZGlvX3BhcnNlX2dldF9zaW5rX2NhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotCi1zdGF0aWMgdm9pZCBnc3RfbXBlZ19hdWRpb19wYXJzZV9oYW5kbGVfZmlyc3RfZnJhbWUgKEdzdE1wZWdBdWRpb1BhcnNlICoKLSAgICBtcDNwYXJzZSwgR3N0QnVmZmVyICogYnVmKTsKLQotI2RlZmluZSBnc3RfbXBlZ19hdWRpb19wYXJzZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RNcGVnQXVkaW9QYXJzZSwgZ3N0X21wZWdfYXVkaW9fcGFyc2UsIEdTVF9UWVBFX0JBU0VfUEFSU0UpOwotCi0jZGVmaW5lIEdTVF9UWVBFX01QRUdfQVVESU9fQ0hBTk5FTF9NT0RFICBcCi0gICAgKGdzdF9tcGVnX2F1ZGlvX2NoYW5uZWxfbW9kZV9nZXRfdHlwZSgpKQotCi1zdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBtcGVnX2F1ZGlvX2NoYW5uZWxfbW9kZVtdID0gewotICB7TVBFR19BVURJT19DSEFOTkVMX01PREVfVU5LTk9XTiwgIlVua25vd24iLCAidW5rbm93biJ9LAotICB7TVBFR19BVURJT19DSEFOTkVMX01PREVfTU9OTywgIk1vbm8iLCAibW9ubyJ9LAotICB7TVBFR19BVURJT19DSEFOTkVMX01PREVfRFVBTF9DSEFOTkVMLCAiRHVhbCBDaGFubmVsIiwgImR1YWwtY2hhbm5lbCJ9LAotICB7TVBFR19BVURJT19DSEFOTkVMX01PREVfSk9JTlRfU1RFUkVPLCAiSm9pbnQgU3RlcmVvIiwgImpvaW50LXN0ZXJlbyJ9LAotICB7TVBFR19BVURJT19DSEFOTkVMX01PREVfU1RFUkVPLCAiU3RlcmVvIiwgInN0ZXJlbyJ9LAotICB7MCwgTlVMTCwgTlVMTH0sCi19OwotCi1zdGF0aWMgR1R5cGUKLWdzdF9tcGVnX2F1ZGlvX2NoYW5uZWxfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIG1wZWdfYXVkaW9fY2hhbm5lbF9tb2RlX3R5cGUgPSAwOwotCi0gIGlmICghbXBlZ19hdWRpb19jaGFubmVsX21vZGVfdHlwZSkgewotICAgIG1wZWdfYXVkaW9fY2hhbm5lbF9tb2RlX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0TXBlZ0F1ZGlvQ2hhbm5lbE1vZGUiLAotICAgICAgICBtcGVnX2F1ZGlvX2NoYW5uZWxfbW9kZSk7Ci0gIH0KLSAgcmV0dXJuIG1wZWdfYXVkaW9fY2hhbm5lbF9tb2RlX3R5cGU7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nc3RfbXBlZ19hdWRpb19jaGFubmVsX21vZGVfZ2V0X25pY2sgKGdpbnQgbW9kZSkKLXsKLSAgZ3VpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAobXBlZ19hdWRpb19jaGFubmVsX21vZGUpOyBpKyspIHsKLSAgICBpZiAobXBlZ19hdWRpb19jaGFubmVsX21vZGVbaV0udmFsdWUgPT0gbW9kZSkKLSAgICAgIHJldHVybiBtcGVnX2F1ZGlvX2NoYW5uZWxfbW9kZVtpXS52YWx1ZV9uaWNrOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21wZWdfYXVkaW9fcGFyc2VfY2xhc3NfaW5pdCAoR3N0TXBlZ0F1ZGlvUGFyc2VDbGFzcyAqIGtsYXNzKQotewotICBHc3RCYXNlUGFyc2VDbGFzcyAqcGFyc2VfY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG1wZWdfYXVkaW9fcGFyc2VfZGVidWcsICJtcGVnYXVkaW9wYXJzZSIsIDAsCi0gICAgICAiTVBFRzEgYXVkaW8gc3RyZWFtIHBhcnNlciIpOwotCi0gIG9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfbXBlZ19hdWRpb19wYXJzZV9maW5hbGl6ZTsKLQotICBwYXJzZV9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21wZWdfYXVkaW9fcGFyc2Vfc3RhcnQpOwotICBwYXJzZV9jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXBlZ19hdWRpb19wYXJzZV9zdG9wKTsKLSAgcGFyc2VfY2xhc3MtPmhhbmRsZV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21wZWdfYXVkaW9fcGFyc2VfaGFuZGxlX2ZyYW1lKTsKLSAgcGFyc2VfY2xhc3MtPnByZV9wdXNoX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXBlZ19hdWRpb19wYXJzZV9wcmVfcHVzaF9mcmFtZSk7Ci0gIHBhcnNlX2NsYXNzLT5jb252ZXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tcGVnX2F1ZGlvX3BhcnNlX2NvbnZlcnQpOwotICBwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21wZWdfYXVkaW9fcGFyc2VfZ2V0X3NpbmtfY2Fwcyk7Ci0KLSAgLyogcmVnaXN0ZXIgdGFncyAqLwotI2RlZmluZSBHU1RfVEFHX0NSQyAgICAgICJoYXMtY3JjIgotI2RlZmluZSBHU1RfVEFHX01PREUgICAgICJjaGFubmVsLW1vZGUiCi0KLSAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1RBR19DUkMsIEdTVF9UQUdfRkxBR19NRVRBLCBHX1RZUEVfQk9PTEVBTiwKLSAgICAgICJoYXMgY3JjIiwgIlVzaW5nIENSQyIsIE5VTEwpOwotICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfVEFHX01PREUsIEdTVF9UQUdfRkxBR19FTkNPREVELCBHX1RZUEVfU1RSSU5HLAotICAgICAgImNoYW5uZWwgbW9kZSIsICJNUEVHIGF1ZGlvIGNoYW5uZWwgbW9kZSIsIE5VTEwpOwotCi0gIGdfdHlwZV9jbGFzc19yZWYgKEdTVF9UWVBFX01QRUdfQVVESU9fQ0hBTk5FTF9NT0RFKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIk1QRUcxIEF1ZGlvIFBhcnNlciIsCi0gICAgICAiQ29kZWMvUGFyc2VyL0F1ZGlvIiwKLSAgICAgICJQYXJzZXMgYW5kIGZyYW1lcyBtcGVnMSBhdWRpbyBzdHJlYW1zIChsZXZlbHMgMS0zKSwgcHJvdmlkZXMgc2VlayIsCi0gICAgICAiSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+LCIKLSAgICAgICJNYXJrIE5hdXdlbGFlcnRzIDxtYXJrLm5hdXdlbGFlcnRzQGNvbGxhYm9yYS5jby51az4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tcGVnX2F1ZGlvX3BhcnNlX3Jlc2V0IChHc3RNcGVnQXVkaW9QYXJzZSAqIG1wM3BhcnNlKQotewotICBtcDNwYXJzZS0+Y2hhbm5lbHMgPSAtMTsKLSAgbXAzcGFyc2UtPnJhdGUgPSAtMTsKLSAgbXAzcGFyc2UtPnNlbnRfY29kZWNfdGFnID0gRkFMU0U7Ci0gIG1wM3BhcnNlLT5sYXN0X3Bvc3RlZF9jcmMgPSBDUkNfVU5LTk9XTjsKLSAgbXAzcGFyc2UtPmxhc3RfcG9zdGVkX2NoYW5uZWxfbW9kZSA9IE1QRUdfQVVESU9fQ0hBTk5FTF9NT0RFX1VOS05PV047Ci0gIG1wM3BhcnNlLT5mcmVlcmF0ZSA9IDA7Ci0KLSAgbXAzcGFyc2UtPmhkcl9iaXRyYXRlID0gMDsKLQotICBtcDNwYXJzZS0+eGluZ19mbGFncyA9IDA7Ci0gIG1wM3BhcnNlLT54aW5nX2JpdHJhdGUgPSAwOwotICBtcDNwYXJzZS0+eGluZ19mcmFtZXMgPSAwOwotICBtcDNwYXJzZS0+eGluZ190b3RhbF90aW1lID0gMDsKLSAgbXAzcGFyc2UtPnhpbmdfYnl0ZXMgPSAwOwotICBtcDNwYXJzZS0+eGluZ192YnJfc2NhbGUgPSAwOwotICBtZW1zZXQgKG1wM3BhcnNlLT54aW5nX3NlZWtfdGFibGUsIDAsIDEwMCk7Ci0gIG1lbXNldCAobXAzcGFyc2UtPnhpbmdfc2Vla190YWJsZV9pbnZlcnNlLCAwLCAyNTYpOwotCi0gIG1wM3BhcnNlLT52YnJpX2JpdHJhdGUgPSAwOwotICBtcDNwYXJzZS0+dmJyaV9mcmFtZXMgPSAwOwotICBtcDNwYXJzZS0+dmJyaV90b3RhbF90aW1lID0gMDsKLSAgbXAzcGFyc2UtPnZicmlfYnl0ZXMgPSAwOwotICBtcDNwYXJzZS0+dmJyaV9zZWVrX3BvaW50cyA9IDA7Ci0gIGdfZnJlZSAobXAzcGFyc2UtPnZicmlfc2Vla190YWJsZSk7Ci0gIG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGUgPSBOVUxMOwotCi0gIG1wM3BhcnNlLT5lbmNvZGVyX2RlbGF5ID0gMDsKLSAgbXAzcGFyc2UtPmVuY29kZXJfcGFkZGluZyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXBlZ19hdWRpb19wYXJzZV9pbml0IChHc3RNcGVnQXVkaW9QYXJzZSAqIG1wM3BhcnNlKQotewotICBnc3RfbXBlZ19hdWRpb19wYXJzZV9yZXNldCAobXAzcGFyc2UpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfSU5URVJTRUNUIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAobXAzcGFyc2UpKTsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfQkFTRV9QQVJTRV9TSU5LX1BBRCAobXAzcGFyc2UpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tcGVnX2F1ZGlvX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21wZWdfYXVkaW9fcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBHc3RNcGVnQXVkaW9QYXJzZSAqbXAzcGFyc2UgPSBHU1RfTVBFR19BVURJT19QQVJTRSAocGFyc2UpOwotCi0gIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKG1wM3BhcnNlKSwgTUlOX0ZSQU1FX1NJWkUpOwotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN0YXJ0aW5nIik7Ci0KLSAgZ3N0X21wZWdfYXVkaW9fcGFyc2VfcmVzZXQgKG1wM3BhcnNlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXBlZ19hdWRpb19wYXJzZV9zdG9wIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR3N0TXBlZ0F1ZGlvUGFyc2UgKm1wM3BhcnNlID0gR1NUX01QRUdfQVVESU9fUEFSU0UgKHBhcnNlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInN0b3BwaW5nIik7Ci0KLSAgZ3N0X21wZWdfYXVkaW9fcGFyc2VfcmVzZXQgKG1wM3BhcnNlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGNvbnN0IGd1aW50IG1wM3R5cGVzX2JpdHJhdGVzWzJdWzNdWzE2XSA9IHsKLSAgewotICAgICAgICB7MCwgMzIsIDY0LCA5NiwgMTI4LCAxNjAsIDE5MiwgMjI0LCAyNTYsIDI4OCwgMzIwLCAzNTIsIDM4NCwgNDE2LCA0NDgsfSwKLSAgICAgICAgezAsIDMyLCA0OCwgNTYsIDY0LCA4MCwgOTYsIDExMiwgMTI4LCAxNjAsIDE5MiwgMjI0LCAyNTYsIDMyMCwgMzg0LH0sCi0gICAgICAgIHswLCAzMiwgNDAsIDQ4LCA1NiwgNjQsIDgwLCA5NiwgMTEyLCAxMjgsIDE2MCwgMTkyLCAyMjQsIDI1NiwgMzIwLH0KLSAgICAgIH0sCi0gIHsKLSAgICAgICAgezAsIDMyLCA0OCwgNTYsIDY0LCA4MCwgOTYsIDExMiwgMTI4LCAxNDQsIDE2MCwgMTc2LCAxOTIsIDIyNCwgMjU2LH0sCi0gICAgICAgIHswLCA4LCAxNiwgMjQsIDMyLCA0MCwgNDgsIDU2LCA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTQ0LCAxNjAsfSwKLSAgICAgICAgezAsIDgsIDE2LCAyNCwgMzIsIDQwLCA0OCwgNTYsIDY0LCA4MCwgOTYsIDExMiwgMTI4LCAxNDQsIDE2MCx9Ci0gICAgICB9LAotfTsKLQotc3RhdGljIGNvbnN0IGd1aW50IG1wM3R5cGVzX2ZyZXFzWzNdWzNdID0geyB7NDQxMDAsIDQ4MDAwLCAzMjAwMH0sCi17MjIwNTAsIDI0MDAwLCAxNjAwMH0sCi17MTEwMjUsIDEyMDAwLCA4MDAwfQotfTsKLQotc3RhdGljIGlubGluZSBndWludAotbXAzX3R5cGVfZnJhbWVfbGVuZ3RoX2Zyb21faGVhZGVyIChHc3RNcGVnQXVkaW9QYXJzZSAqIG1wM3BhcnNlLCBndWludDMyIGhlYWRlciwKLSAgICBndWludCAqIHB1dF92ZXJzaW9uLCBndWludCAqIHB1dF9sYXllciwgZ3VpbnQgKiBwdXRfY2hhbm5lbHMsCi0gICAgZ3VpbnQgKiBwdXRfYml0cmF0ZSwgZ3VpbnQgKiBwdXRfc2FtcGxlcmF0ZSwgZ3VpbnQgKiBwdXRfbW9kZSwKLSAgICBndWludCAqIHB1dF9jcmMpCi17Ci0gIGd1aW50IGxlbmd0aDsKLSAgZ3Vsb25nIG1vZGUsIHNhbXBsZXJhdGUsIGJpdHJhdGUsIGxheWVyLCBjaGFubmVscywgcGFkZGluZywgY3JjOwotICBndWxvbmcgdmVyc2lvbjsKLSAgZ2ludCBsc2YsIG1wZzI1OwotCi0gIGlmIChoZWFkZXIgJiAoMSA8PCAyMCkpIHsKLSAgICBsc2YgPSAoaGVhZGVyICYgKDEgPDwgMTkpKSA/IDAgOiAxOwotICAgIG1wZzI1ID0gMDsKLSAgfSBlbHNlIHsKLSAgICBsc2YgPSAxOwotICAgIG1wZzI1ID0gMTsKLSAgfQotCi0gIHZlcnNpb24gPSAxICsgbHNmICsgbXBnMjU7Ci0KLSAgbGF5ZXIgPSA0IC0gKChoZWFkZXIgPj4gMTcpICYgMHgzKTsKLQotICBjcmMgPSAoaGVhZGVyID4+IDE2KSAmIDB4MTsKLQotICBiaXRyYXRlID0gKGhlYWRlciA+PiAxMikgJiAweEY7Ci0gIGJpdHJhdGUgPSBtcDN0eXBlc19iaXRyYXRlc1tsc2ZdW2xheWVyIC0gMV1bYml0cmF0ZV0gKiAxMDAwOwotICBpZiAoIWJpdHJhdGUpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAobXAzcGFyc2UsICJ1c2luZyBmcmVlZm9ybSBiaXRyYXRlIik7Ci0gICAgYml0cmF0ZSA9IG1wM3BhcnNlLT5mcmVlcmF0ZTsKLSAgfQotCi0gIHNhbXBsZXJhdGUgPSAoaGVhZGVyID4+IDEwKSAmIDB4MzsKLSAgc2FtcGxlcmF0ZSA9IG1wM3R5cGVzX2ZyZXFzW2xzZiArIG1wZzI1XVtzYW1wbGVyYXRlXTsKLQotICAvKiBmb3JjZSAwIGxlbmd0aCBpZiAwIGJpdHJhdGUgKi8KLSAgcGFkZGluZyA9IChiaXRyYXRlID4gMCkgPyAoaGVhZGVyID4+IDkpICYgMHgxIDogMDsKLQotICBtb2RlID0gKGhlYWRlciA+PiA2KSAmIDB4MzsKLSAgY2hhbm5lbHMgPSAobW9kZSA9PSAzKSA/IDEgOiAyOwotCi0gIHN3aXRjaCAobGF5ZXIpIHsKLSAgICBjYXNlIDE6Ci0gICAgICBsZW5ndGggPSA0ICogKChiaXRyYXRlICogMTIpIC8gc2FtcGxlcmF0ZSArIHBhZGRpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgbGVuZ3RoID0gKGJpdHJhdGUgKiAxNDQpIC8gc2FtcGxlcmF0ZSArIHBhZGRpbmc7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgMzoKLSAgICAgIGxlbmd0aCA9IChiaXRyYXRlICogMTQ0KSAvIChzYW1wbGVyYXRlIDw8IGxzZikgKyBwYWRkaW5nOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgIkNhbGN1bGF0ZWQgbXAzIGZyYW1lIGxlbmd0aCBvZiAldSBieXRlcyIsCi0gICAgICBsZW5ndGgpOwotICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgInNhbXBsZXJhdGUgPSAlbHUsIGJpdHJhdGUgPSAlbHUsIHZlcnNpb24gPSAlbHUsICIKLSAgICAgICJsYXllciA9ICVsdSwgY2hhbm5lbHMgPSAlbHUsIG1vZGUgPSAlcyIsIHNhbXBsZXJhdGUsIGJpdHJhdGUsIHZlcnNpb24sCi0gICAgICBsYXllciwgY2hhbm5lbHMsIGdzdF9tcGVnX2F1ZGlvX2NoYW5uZWxfbW9kZV9nZXRfbmljayAobW9kZSkpOwotCi0gIGlmIChwdXRfdmVyc2lvbikKLSAgICAqcHV0X3ZlcnNpb24gPSB2ZXJzaW9uOwotICBpZiAocHV0X2xheWVyKQotICAgICpwdXRfbGF5ZXIgPSBsYXllcjsKLSAgaWYgKHB1dF9jaGFubmVscykKLSAgICAqcHV0X2NoYW5uZWxzID0gY2hhbm5lbHM7Ci0gIGlmIChwdXRfYml0cmF0ZSkKLSAgICAqcHV0X2JpdHJhdGUgPSBiaXRyYXRlOwotICBpZiAocHV0X3NhbXBsZXJhdGUpCi0gICAgKnB1dF9zYW1wbGVyYXRlID0gc2FtcGxlcmF0ZTsKLSAgaWYgKHB1dF9tb2RlKQotICAgICpwdXRfbW9kZSA9IG1vZGU7Ci0gIGlmIChwdXRfY3JjKQotICAgICpwdXRfY3JjID0gY3JjOwotCi0gIHJldHVybiBsZW5ndGg7Ci19Ci0KLS8qIE1pbmltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlLCB2YWxpZC1sb29raW5nIGZyYW1lcyB0byBjb25zaWRlcgotICogZm9yIHJlc3luY2luZyAqLwotI2RlZmluZSBNSU5fUkVTWU5DX0ZSQU1FUyAzCi0KLS8qIFBlcmZvcm0gZXh0ZW5kZWQgdmFsaWRhdGlvbiB0byBjaGVjayB0aGF0IHN1YnNlcXVlbnQgaGVhZGVycyBtYXRjaAotICogdGhlIGZpcnN0IGhlYWRlciBnaXZlbiBoZXJlIGluIGltcG9ydGFudCBjaGFyYWN0ZXJpc3RpY3MsIHRvIGF2b2lkCi0gKiBmYWxzZSBzeW5jLiBXZSBsb29rIGZvciBhIG1pbmltdW0gb2YgTUlOX1JFU1lOQ19GUkFNRVMgY29uc2VjdXRpdmUKLSAqIGZyYW1lcyB0byBtYXRjaCB0aGVpciBtYWpvciBjaGFyYWN0ZXJpc3RpY3MuCi0gKgotICogSWYgYXRfZW9zIGlzIHNldCB0byBUUlVFLCB3ZSBqdXN0IGNoZWNrIHRoYXQgd2UgZG9uJ3QgZmluZCBhbnkgaW52YWxpZAotICogZnJhbWVzIGluIHdoYXRldmVyIGRhdGEgaXMgYXZhaWxhYmxlLCByYXRoZXIgdGhhbiByZXF1aXJpbmcgYSBmdWxsCi0gKiBNSU5fUkVTWU5DX0ZSQU1FUyBvZiBkYXRhLgotICoKLSAqIFJldHVybnMgVFJVRSBpZiB3ZSd2ZSBzZWVuIGVub3VnaCBkYXRhIHRvIHZhbGlkYXRlIG9yIHJlamVjdCB0aGUgZnJhbWUuCi0gKiBJZiBUUlVFIGlzIHJldHVybmVkLCB0aGVuICp2YWxpZCBjb250YWlucyBUUlVFIGlmIGl0IHZhbGlkYXRlZCwgb3IgZmFsc2UKLSAqIGlmIHdlIGRlY2lkZWQgaXQgd2FzIGZhbHNlIHN5bmMuCi0gKiBJZiBGQUxTRSBpcyByZXR1cm5lZCwgdGhlbiAqdmFsaWQgY29udGFpbnMgbWluaW11bSBuZWVkZWQgZGF0YS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfbXAzcGFyc2VfdmFsaWRhdGVfZXh0ZW5kZWQgKEdzdE1wZWdBdWRpb1BhcnNlICogbXAzcGFyc2UsIEdzdEJ1ZmZlciAqIGJ1ZiwKLSAgICBndWludDMyIGhlYWRlciwgaW50IGJwZiwgZ2Jvb2xlYW4gYXRfZW9zLCBnaW50ICogdmFsaWQpCi17Ci0gIGd1aW50MzIgbmV4dF9oZWFkZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBpbnQgZnJhbWVzX2ZvdW5kID0gMTsKLSAgaW50IG9mZnNldCA9IGJwZjsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIHdoaWxlIChmcmFtZXNfZm91bmQgPCBNSU5fUkVTWU5DX0ZSQU1FUykgewotICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIGRhdGEgZm9yIGFsbCB0aGVzZSBmcmFtZXMsIHBsdXMgdGhlIG5leHQKLSAgICAgICBmcmFtZSBoZWFkZXIuICovCi0gICAgaWYgKG1hcC5zaXplIDwgb2Zmc2V0ICsgNCkgewotICAgICAgaWYgKGF0X2VvcykgewotICAgICAgICAvKiBSdW5uaW5nIG91dCBvZiBkYXRhIGF0IEVPUyBpcyBmaW5lOyBqdXN0IGFjY2VwdCBpdCAqLwotICAgICAgICAqdmFsaWQgPSBUUlVFOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAqdmFsaWQgPSBvZmZzZXQgKyA0OwotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgfQotICAgIH0KLQotICAgIG5leHRfaGVhZGVyID0gR1NUX1JFQURfVUlOVDMyX0JFIChtYXAuZGF0YSArIG9mZnNldCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsICJBdCAlZDogaGVhZGVyPSUwOFgsIGhlYWRlcjI9JTA4WCwgYnBmPSVkIiwKLSAgICAgICAgb2Zmc2V0LCAodW5zaWduZWQgaW50KSBoZWFkZXIsICh1bnNpZ25lZCBpbnQpIG5leHRfaGVhZGVyLCBicGYpOwotCi0vKiBtYXNrIHRoZSBiaXRzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIGRpZmZlciBiZXR3ZWVuIGZyYW1lcyAqLwotI2RlZmluZSBIRFJNQVNLIH4oKDB4RiA8PCAxMikgIC8qIGJpdHJhdGUgKi8gfCBcCi0gICAgICAgICAgICAgICAgICAoMHgxIDw8ICA5KSAgLyogcGFkZGluZyAqLyB8IFwKLSAgICAgICAgICAgICAgICAgICgweGYgPDwgIDQpICAvKiBtb2RlfG1vZGUgZXh0ZW5zaW9uICovIHwgXAotICAgICAgICAgICAgICAgICAgKDB4ZikpICAgICAgICAvKiBjb3B5cmlnaHR8ZW1waGFzaXMgKi8KLQotICAgIGlmICgobmV4dF9oZWFkZXIgJiBIRFJNQVNLKSAhPSAoaGVhZGVyICYgSERSTUFTSykpIHsKLSAgICAgIC8qIElmIGFueSBvZiB0aGUgdW5tYXNrZWQgYml0cyBkb24ndCBtYXRjaCwgdGhlbiBpdCdzIG5vdCB2YWxpZCAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsICJuZXh0IGhlYWRlciBkb2Vzbid0IG1hdGNoICIKLSAgICAgICAgICAiKGhlYWRlcj0lMDhYICglMDhYKSwgaGVhZGVyMj0lMDhYICglMDhYKSwgYnBmPSVkKSIsCi0gICAgICAgICAgKGd1aW50KSBoZWFkZXIsIChndWludCkgaGVhZGVyICYgSERSTUFTSywgKGd1aW50KSBuZXh0X2hlYWRlciwKLSAgICAgICAgICAoZ3VpbnQpIG5leHRfaGVhZGVyICYgSERSTUFTSywgYnBmKTsKLSAgICAgICp2YWxpZCA9IEZBTFNFOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0gZWxzZSBpZiAoKChuZXh0X2hlYWRlciA+PiAxMikgJiAweGYpID09IDB4ZikgewotICAgICAgLyogVGhlIGVzc2VudGlhbCBwYXJ0cyB3ZXJlIHRoZSBzYW1lLCBidXQgdGhlIGJpdHJhdGUgaGVsZCBhbgotICAgICAgICAgaW52YWxpZCB2YWx1ZSAtIGFsc28gcmVqZWN0ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgIm5leHQgaGVhZGVyIGludmFsaWQgKGJpdHJhdGUpIik7Ci0gICAgICAqdmFsaWQgPSBGQUxTRTsKLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBicGYgPSBtcDNfdHlwZV9mcmFtZV9sZW5ndGhfZnJvbV9oZWFkZXIgKG1wM3BhcnNlLCBuZXh0X2hlYWRlciwKLSAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAvKiBpZiBubyBiaXRyYXRlLCBhbmQgbm8gZnJlZWZvcm0gcmF0ZSBrbm93biwgdGhlbiBmYWlsICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFicGYpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgIm5leHQgaGVhZGVyIGludmFsaWQgKGJpdHJhdGUgMCkiKTsKLSAgICAgICp2YWxpZCA9IEZBTFNFOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIG9mZnNldCArPSBicGY7Ci0gICAgZnJhbWVzX2ZvdW5kKys7Ci0gIH0KLQotICAqdmFsaWQgPSBUUlVFOwotCi1jbGVhbnVwOgotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tcGVnX2F1ZGlvX3BhcnNlX2hlYWRfY2hlY2sgKEdzdE1wZWdBdWRpb1BhcnNlICogbXAzcGFyc2UsCi0gICAgdW5zaWduZWQgbG9uZyBoZWFkKQotewotICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgImNoZWNraW5nIG1wMyBoZWFkZXIgMHglMDhseCIsIGhlYWQpOwotICAvKiBpZiBpdCdzIG5vdCBhIHZhbGlkIHN5bmMgKi8KLSAgaWYgKChoZWFkICYgMHhmZmUwMDAwMCkgIT0gMHhmZmUwMDAwMCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXAzcGFyc2UsICJpbnZhbGlkIHN5bmMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgLyogaWYgaXQncyBhbiBpbnZhbGlkIE1QRUcgdmVyc2lvbiAqLwotICBpZiAoKChoZWFkID4+IDE5KSAmIDMpID09IDB4MSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXAzcGFyc2UsICJpbnZhbGlkIE1QRUcgdmVyc2lvbjogMHglbHgiLAotICAgICAgICAoaGVhZCA+PiAxOSkgJiAzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgLyogaWYgaXQncyBhbiBpbnZhbGlkIGxheWVyICovCi0gIGlmICghKChoZWFkID4+IDE3KSAmIDMpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtcDNwYXJzZSwgImludmFsaWQgbGF5ZXI6IDB4JWx4IiwgKGhlYWQgPj4gMTcpICYgMyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIC8qIGlmIGl0J3MgYW4gaW52YWxpZCBiaXRyYXRlICovCi0gIGlmICgoKGhlYWQgPj4gMTIpICYgMHhmKSA9PSAweGYpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1wM3BhcnNlLCAiaW52YWxpZCBiaXRyYXRlOiAweCVseCIsIChoZWFkID4+IDEyKSAmIDB4Zik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIC8qIGlmIGl0J3MgYW4gaW52YWxpZCBzYW1wbGVyYXRlICovCi0gIGlmICgoKGhlYWQgPj4gMTApICYgMHgzKSA9PSAweDMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1wM3BhcnNlLCAiaW52YWxpZCBzYW1wbGVyYXRlOiAweCVseCIsCi0gICAgICAgIChoZWFkID4+IDEwKSAmIDB4Myk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKChoZWFkICYgMHgzKSA9PSAweDIpIHsKLSAgICAvKiBJZ25vcmUgdGhpcyBhcyB0aGVyZSBhcmUgc29tZSBmaWxlcyB3aXRoIGVtcGhhc2lzIDB4MiB0aGF0IGNhbgotICAgICAqIGJlIHBsYXllZCBmaW5lLiBTZWUgQkdPICM1MzcyMzUgKi8KLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1wM3BhcnNlLCAiaW52YWxpZCBlbXBoYXNpczogMHglbHgiLCBoZWFkICYgMHgzKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBEZXRlcm1pbmVzIHBvc3NpYmxlIGZyZWVmb3JtIGZyYW1lIHJhdGUvc2l6ZSBieSBsb29raW5nIGZvciBuZXh0Ci0gKiBoZWFkZXIgd2l0aCB2YWxpZCBiaXRyYXRlICgwIG9yIG90aGVyd2lzZSB2YWxpZCkgKGFuZCBzdWZmaWNpZW50bHkKLSAqIG1hdGNoaW5nIGN1cnJlbnQgaGVhZGVyKS4KLSAqCi0gKiBSZXR1cm5zIFRSVUUgaWYgd2UndmUgZm91bmQgc3VjaCBvbmUsIGFuZCAqcmF0ZSB0aGVuIGNvbnRhaW5zIHJhdGUKLSAqIChvciAqcmF0ZSBjb250YWlucyAwIGlmIGRlY2lkZWQgbm8gZnJlZWZyYW1lIHNpemUgY291bGQgYmUgZGV0ZXJtaW5lZCkuCi0gKiBJZiBub3QgZW5vdWdoIGRhdGEsIHJldHVybnMgRkFMU0UuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21wM3BhcnNlX2ZpbmRfZnJlZXJhdGUgKEdzdE1wZWdBdWRpb1BhcnNlICogbXAzcGFyc2UsIEdzdE1hcEluZm8gKiBtYXAsCi0gICAgZ3VpbnQzMiBoZWFkZXIsIGdib29sZWFuIGF0X2VvcywgZ2ludCAqIF9yYXRlKQotewotICBndWludDMyIG5leHRfaGVhZGVyOwotICBjb25zdCBndWludDggKmRhdGE7Ci0gIGd1aW50IGF2YWlsYWJsZTsKLSAgaW50IG9mZnNldCA9IDQ7Ci0gIGd1bG9uZyBzYW1wbGVyYXRlLCByYXRlLCBsYXllciwgcGFkZGluZzsKLSAgZ2Jvb2xlYW4gdmFsaWQ7Ci0gIGdpbnQgbHNmLCBtcGcyNTsKLQotICBhdmFpbGFibGUgPSBtYXAtPnNpemU7Ci0gIGRhdGEgPSBtYXAtPmRhdGE7Ci0KLSAgKl9yYXRlID0gMDsKLQotICAvKiBwaWNrIGFwYXJ0IGhlYWRlciBhZ2FpbiBwYXJ0aWFsbHkgKi8KLSAgaWYgKGhlYWRlciAmICgxIDw8IDIwKSkgewotICAgIGxzZiA9IChoZWFkZXIgJiAoMSA8PCAxOSkpID8gMCA6IDE7Ci0gICAgbXBnMjUgPSAwOwotICB9IGVsc2UgewotICAgIGxzZiA9IDE7Ci0gICAgbXBnMjUgPSAxOwotICB9Ci0gIGxheWVyID0gNCAtICgoaGVhZGVyID4+IDE3KSAmIDB4Myk7Ci0gIHNhbXBsZXJhdGUgPSAoaGVhZGVyID4+IDEwKSAmIDB4MzsKLSAgc2FtcGxlcmF0ZSA9IG1wM3R5cGVzX2ZyZXFzW2xzZiArIG1wZzI1XVtzYW1wbGVyYXRlXTsKLSAgcGFkZGluZyA9IChoZWFkZXIgPj4gOSkgJiAweDE7Ci0KLSAgZm9yICg7IG9mZnNldCA8IGF2YWlsYWJsZTsgKytvZmZzZXQpIHsKLSAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBkYXRhIGZvciBhbGwgdGhlc2UgZnJhbWVzLCBwbHVzIHRoZSBuZXh0Ci0gICAgICAgZnJhbWUgaGVhZGVyLiAqLwotICAgIGlmIChhdmFpbGFibGUgPCBvZmZzZXQgKyA0KSB7Ci0gICAgICBpZiAoYXRfZW9zKSB7Ci0gICAgICAgIC8qIFJ1bm5pbmcgb3V0IG9mIGRhdGE7IGZhaWxlZCB0byBkZXRlcm1pbmUgc2l6ZSAqLwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2YWxpZCA9IEZBTFNFOwotICAgIG5leHRfaGVhZGVyID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhICsgb2Zmc2V0KTsKLSAgICBpZiAoKG5leHRfaGVhZGVyICYgMHhGRkUwMDAwMCkgIT0gMHhGRkUwMDAwMCkKLSAgICAgIGdvdG8gbmV4dDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAiQXQgJWQ6IGhlYWRlcj0lMDhYLCBoZWFkZXIyPSUwOFgiLAotICAgICAgICBvZmZzZXQsICh1bnNpZ25lZCBpbnQpIGhlYWRlciwgKHVuc2lnbmVkIGludCkgbmV4dF9oZWFkZXIpOwotCi0gICAgaWYgKChuZXh0X2hlYWRlciAmIEhEUk1BU0spICE9IChoZWFkZXIgJiBIRFJNQVNLKSkgewotICAgICAgLyogSWYgYW55IG9mIHRoZSB1bm1hc2tlZCBiaXRzIGRvbid0IG1hdGNoLCB0aGVuIGl0J3Mgbm90IHZhbGlkICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgIm5leHQgaGVhZGVyIGRvZXNuJ3QgbWF0Y2ggIgotICAgICAgICAgICIoaGVhZGVyPSUwOFggKCUwOFgpLCBoZWFkZXIyPSUwOFggKCUwOFgpKSIsCi0gICAgICAgICAgKGd1aW50KSBoZWFkZXIsIChndWludCkgaGVhZGVyICYgSERSTUFTSywgKGd1aW50KSBuZXh0X2hlYWRlciwKLSAgICAgICAgICAoZ3VpbnQpIG5leHRfaGVhZGVyICYgSERSTUFTSyk7Ci0gICAgICBnb3RvIG5leHQ7Ci0gICAgfSBlbHNlIGlmICgoKG5leHRfaGVhZGVyID4+IDEyKSAmIDB4ZikgPT0gMHhmKSB7Ci0gICAgICAvKiBUaGUgZXNzZW50aWFsIHBhcnRzIHdlcmUgdGhlIHNhbWUsIGJ1dCB0aGUgYml0cmF0ZSBoZWxkIGFuCi0gICAgICAgICBpbnZhbGlkIHZhbHVlIC0gYWxzbyByZWplY3QgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAibmV4dCBoZWFkZXIgaW52YWxpZCAoYml0cmF0ZSkiKTsKLSAgICAgIGdvdG8gbmV4dDsKLSAgICB9Ci0KLSAgICB2YWxpZCA9IFRSVUU7Ci0KLSAgbmV4dDoKLSAgICAvKiBhbG1vc3QgYWNjZXB0IGFzIGZyZWUgZnJhbWUgKi8KLSAgICBpZiAobGF5ZXIgPT0gMSkgewotICAgICAgcmF0ZSA9IHNhbXBsZXJhdGUgKiAob2Zmc2V0IC0gNCAqIHBhZGRpbmcgKyA0KSAvIDQ4MDAwOwotICAgIH0gZWxzZSB7Ci0gICAgICByYXRlID0gc2FtcGxlcmF0ZSAqIChvZmZzZXQgLSBwYWRkaW5nICsgMSkgLyAoMTQ0ID4+IGxzZikgLyAxMDAwOwotICAgIH0KLQotICAgIGlmICh2YWxpZCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG1wM3BhcnNlLCAiY2FsY3VsYXRlZCByYXRlICVsdSIsIHJhdGUgKiAxMDAwKTsKLSAgICAgIGlmIChyYXRlIDwgOCB8fCAobGF5ZXIgPT0gMyAmJiByYXRlID4gNjQwKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgInJhdGUgaW52YWxpZCIpOwotICAgICAgICBpZiAocmF0ZSA8IDgpIHsKLSAgICAgICAgICAvKiBtYXliZSBzb21lIGhvcGUgKi8KLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgImFib3J0aW5nIik7Ci0gICAgICAgICAgLyogZ2l2ZSB1cCAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAqX3JhdGUgPSByYXRlICogMTAwMDsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBhdm9pZCBpbmRlZmluaXRlIHNlYXJjaGluZyAqLwotICAgICAgaWYgKHJhdGUgPiAxMDAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAiZXhjZWVkZWQgc2FuaXR5IHJhdGU7IGFib3J0aW5nIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21wZWdfYXVkaW9fcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpCi17Ci0gIEdzdE1wZWdBdWRpb1BhcnNlICptcDNwYXJzZSA9IEdTVF9NUEVHX0FVRElPX1BBUlNFIChwYXJzZSk7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZnJhbWUtPmJ1ZmZlcjsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0gIGdpbnQgb2ZmLCBicGYgPSAwOwotICBnYm9vbGVhbiBsb3N0X3N5bmMsIGRyYWluaW5nLCB2YWxpZCwgY2Fwc19jaGFuZ2U7Ci0gIGd1aW50MzIgaGVhZGVyOwotICBndWludCBiaXRyYXRlLCBsYXllciwgcmF0ZSwgY2hhbm5lbHMsIHZlcnNpb24sIG1vZGUsIGNyYzsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGlmIChHX1VOTElLRUxZIChtYXAuc2l6ZSA8IDYpKSB7Ci0gICAgKnNraXBzaXplID0gMTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgmcmVhZGVyLCAweGZmZTAwMDAwLCAweGZmZTAwMDAwLAotICAgICAgMCwgbWFwLnNpemUpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInBvc3NpYmxlIHN5bmMgYXQgYnVmZmVyIG9mZnNldCAlZCIsIG9mZik7Ci0KLSAgLyogZGlkbid0IGZpbmQgYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgc3luYyB3b3JkLCBza2lwICovCi0gIGlmIChvZmYgPCAwKSB7Ci0gICAgKnNraXBzaXplID0gbWFwLnNpemUgLSAzOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotCi0gIC8qIHBvc3NpYmxlIGZyYW1lIGhlYWRlciwgYnV0IG5vdCBhdCBvZmZzZXQgMD8gc2tpcCBieXRlcyBiZWZvcmUgc3luYyAqLwotICBpZiAob2ZmID4gMCkgewotICAgICpza2lwc2l6ZSA9IG9mZjsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICAvKiBtYWtlIHN1cmUgdGhlIHZhbHVlcyBpbiB0aGUgZnJhbWUgaGVhZGVyIGxvb2sgc2FuZSAqLwotICBoZWFkZXIgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKG1hcC5kYXRhKTsKLSAgaWYgKCFnc3RfbXBlZ19hdWRpb19wYXJzZV9oZWFkX2NoZWNrIChtcDNwYXJzZSwgaGVhZGVyKSkgewotICAgICpza2lwc2l6ZSA9IDE7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiZ290IGZyYW1lIik7Ci0KLSAgbG9zdF9zeW5jID0gR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DIChwYXJzZSk7Ci0gIGRyYWluaW5nID0gR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgKHBhcnNlKTsKLQotICBpZiAoR19VTkxJS0VMWSAobG9zdF9zeW5jKSkKLSAgICBtcDNwYXJzZS0+ZnJlZXJhdGUgPSAwOwotCi0gIGJwZiA9IG1wM190eXBlX2ZyYW1lX2xlbmd0aF9mcm9tX2hlYWRlciAobXAzcGFyc2UsIGhlYWRlciwKLSAgICAgICZ2ZXJzaW9uLCAmbGF5ZXIsICZjaGFubmVscywgJmJpdHJhdGUsICZyYXRlLCAmbW9kZSwgJmNyYyk7Ci0KLSAgaWYgKGNoYW5uZWxzICE9IG1wM3BhcnNlLT5jaGFubmVscyB8fCByYXRlICE9IG1wM3BhcnNlLT5yYXRlIHx8Ci0gICAgICBsYXllciAhPSBtcDNwYXJzZS0+bGF5ZXIgfHwgdmVyc2lvbiAhPSBtcDNwYXJzZS0+dmVyc2lvbikKLSAgICBjYXBzX2NoYW5nZSA9IFRSVUU7Ci0gIGVsc2UKLSAgICBjYXBzX2NoYW5nZSA9IEZBTFNFOwotCi0gIC8qIG1heWJlIGZyZWUgZm9ybWF0ICovCi0gIGlmIChicGYgPT0gMCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChtcDNwYXJzZSwgInBvc3NpYmx5IGZyZWUgZm9ybWF0Iik7Ci0gICAgaWYgKGxvc3Rfc3luYyB8fCBtcDNwYXJzZS0+ZnJlZXJhdGUgPT0gMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsICJmaW5kaW5nIGZyZWUgZm9ybWF0IHJhdGUiKTsKLSAgICAgIGlmICghZ3N0X21wM3BhcnNlX2ZpbmRfZnJlZXJhdGUgKG1wM3BhcnNlLCAmbWFwLCBoZWFkZXIsIGRyYWluaW5nLAotICAgICAgICAgICAgICAmdmFsaWQpKSB7Ci0gICAgICAgIC8qIG5vdCBlbm91Z2ggZGF0YSAqLwotICAgICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKHBhcnNlLCB2YWxpZCk7Ci0gICAgICAgICpza2lwc2l6ZSA9IDA7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiZGV0ZXJtaW5lZCBmcmVlZm9ybSBzaXplICVkIiwgdmFsaWQpOwotICAgICAgICBtcDNwYXJzZS0+ZnJlZXJhdGUgPSB2YWxpZDsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogdHJ5IGFnYWluICovCi0gICAgYnBmID0gbXAzX3R5cGVfZnJhbWVfbGVuZ3RoX2Zyb21faGVhZGVyIChtcDNwYXJzZSwgaGVhZGVyLAotICAgICAgICAmdmVyc2lvbiwgJmxheWVyLCAmY2hhbm5lbHMsICZiaXRyYXRlLCAmcmF0ZSwgJm1vZGUsICZjcmMpOwotICAgIGlmICghYnBmKSB7Ci0gICAgICAvKiBkaWQgbm90IGNvbWUgdXAgd2l0aCB2YWxpZCBmcmVlZm9ybSBsZW5ndGgsIHJlamVjdCBhZnRlciBhbGwgKi8KLSAgICAgICpza2lwc2l6ZSA9IDE7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFkcmFpbmluZyAmJiAobG9zdF9zeW5jIHx8IGNhcHNfY2hhbmdlKSkgewotICAgIGlmICghZ3N0X21wM3BhcnNlX3ZhbGlkYXRlX2V4dGVuZGVkIChtcDNwYXJzZSwgYnVmLCBoZWFkZXIsIGJwZiwgZHJhaW5pbmcsCi0gICAgICAgICAgICAmdmFsaWQpKSB7Ci0gICAgICAvKiBub3QgZW5vdWdoIGRhdGEgKi8KLSAgICAgIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAocGFyc2UsIHZhbGlkKTsKLSAgICAgICpza2lwc2l6ZSA9IDA7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghdmFsaWQpIHsKLSAgICAgICAgKnNraXBzaXplID0gb2ZmICsgMjsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIGlmIChkcmFpbmluZyAmJiBsb3N0X3N5bmMgJiYgY2Fwc19jaGFuZ2UgJiYgbXAzcGFyc2UtPnJhdGUgPiAwKSB7Ci0gICAgLyogYXZvaWQgY2FwcyBqaXR0ZXIgdGhhdCB3ZSBjYW4ndCBiZSBzdXJlIG9mICovCi0gICAgKnNraXBzaXplID0gb2ZmICsgMjsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLQotICAvKiByZXN0b3JlIGRlZmF1bHQgbWluaW11bSAqLwotICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKHBhcnNlLCBNSU5fRlJBTUVfU0laRSk7Ci0KLSAgcmVzID0gVFJVRTsKLQotICAvKiBtZXRhZGF0YSBoYW5kbGluZyAqLwotICBpZiAoR19VTkxJS0VMWSAoY2Fwc19jaGFuZ2UpKSB7Ci0gICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9tcGVnIiwKLSAgICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICAgIm1wZWdhdWRpb3ZlcnNpb24iLCBHX1RZUEVfSU5ULCB2ZXJzaW9uLAotICAgICAgICAibGF5ZXIiLCBHX1RZUEVfSU5ULCBsYXllciwKLSAgICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCByYXRlLAotICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBjaGFubmVscywgInBhcnNlZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgICBnc3RfcGFkX3NldF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSksIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIG1wM3BhcnNlLT5yYXRlID0gcmF0ZTsKLSAgICBtcDNwYXJzZS0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgICBtcDNwYXJzZS0+bGF5ZXIgPSBsYXllcjsKLSAgICBtcDNwYXJzZS0+dmVyc2lvbiA9IHZlcnNpb247Ci0KLSAgICAvKiBzZWUgaHR0cDovL3d3dy5jb2RlcHJvamVjdC5jb20vYXVkaW8vTVBFR0F1ZGlvSW5mby5hc3AgKi8KLSAgICBpZiAobXAzcGFyc2UtPmxheWVyID09IDEpCi0gICAgICBtcDNwYXJzZS0+c3BmID0gMzg0OwotICAgIGVsc2UgaWYgKG1wM3BhcnNlLT5sYXllciA9PSAyKQotICAgICAgbXAzcGFyc2UtPnNwZiA9IDExNTI7Ci0gICAgZWxzZSBpZiAobXAzcGFyc2UtPnZlcnNpb24gPT0gMSkgewotICAgICAgbXAzcGFyc2UtPnNwZiA9IDExNTI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIE1QRUctMiBvciAiMi41IiAqLwotICAgICAgbXAzcGFyc2UtPnNwZiA9IDU3NjsKLSAgICB9Ci0KLSAgICAvKiBsZWFkX2luOgotICAgICAqIFdlIHN0YXJ0IHB1c2hpbmcgOSBmcmFtZXMgZWFybGllciAoMjkgZnJhbWVzIGZvciBNUEVHMikgdGhhbgotICAgICAqIHNlZ21lbnQgc3RhcnQgdG8gYmUgYWJsZSB0byBkZWNvZGUgdGhlIGZpcnN0IGZyYW1lIHdlIHdhbnQuCi0gICAgICogOSAoMjkpIGZyYW1lcyBhcmUgdGhlIHRoZW9yZXRpY2FsIG1heGltdW0gb2YgZnJhbWVzIHRoYXQgY29udGFpbgotICAgICAqIGRhdGEgZm9yIHRoZSBjdXJyZW50IGZyYW1lIChiaXQgcmVzZXJ2b2lyKS4KLSAgICAgKgotICAgICAqIGxlYWRfb3V0OgotICAgICAqIFNvbWUgbXAzIHN0cmVhbXMgaGF2ZSBhbiBvZmZzZXQgaW4gdGhlIHRpbWVzdGFtcHMsIGZvciB3aGljaCB3ZSBoYXZlIHRvCi0gICAgICogcHVzaCB0aGUgZnJhbWUgKmFmdGVyKiB0aGUgZW5kIHBvc2l0aW9uIGluIG9yZGVyIGZvciB0aGUgZGVjb2RlciB0byBiZQotICAgICAqIGFibGUgdG8gZGVjb2RlIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIHNlZ21lbnQuc3RvcCBwb3NpdGlvbi4gKi8KLSAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAocGFyc2UsIG1wM3BhcnNlLT5yYXRlLCBtcDNwYXJzZS0+c3BmLAotICAgICAgICAodmVyc2lvbiA9PSAxKSA/IDEwIDogMzAsIDIpOwotICB9Ci0KLSAgbXAzcGFyc2UtPmhkcl9iaXRyYXRlID0gYml0cmF0ZTsKLQotICAvKiBGb3IgZmlyc3QgZnJhbWU7IGNoZWNrIGZvciBzZWVrIHRhYmxlcyBhbmQgb3V0cHV0IGEgY29kZWMgdGFnICovCi0gIGdzdF9tcGVnX2F1ZGlvX3BhcnNlX2hhbmRsZV9maXJzdF9mcmFtZSAobXAzcGFyc2UsIGJ1Zik7Ci0KLSAgLyogc3RvcmUgc29tZSBmcmFtZSBpbmZvIGZvciBsYXRlciBwcm9jZXNzaW5nICovCi0gIG1wM3BhcnNlLT5sYXN0X2NyYyA9IGNyYzsKLSAgbXAzcGFyc2UtPmxhc3RfbW9kZSA9IG1vZGU7Ci0KLWNsZWFudXA6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgaWYgKHJlcyAmJiBicGYgPD0gbWFwLnNpemUpIHsKLSAgICByZXR1cm4gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUsIGJwZik7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXBlZ19hdWRpb19wYXJzZV9oYW5kbGVfZmlyc3RfZnJhbWUgKEdzdE1wZWdBdWRpb1BhcnNlICogbXAzcGFyc2UsCi0gICAgR3N0QnVmZmVyICogYnVmKQotewotICBjb25zdCBndWludDMyIHhpbmdfaWQgPSAweDU4Njk2ZTY3OyAgIC8qICdYaW5nJyBpbiBoZXggKi8KLSAgY29uc3QgZ3VpbnQzMiBpbmZvX2lkID0gMHg0OTZlNjY2ZjsgICAvKiAnSW5mbycgaW4gaGV4IC0gZm91bmQgaW4gTEFNRSBDQlIgZmlsZXMgKi8KLSAgY29uc3QgZ3VpbnQzMiB2YnJpX2lkID0gMHg1NjQyNTI0OTsgICAvKiAnVkJSSScgaW4gaGV4ICovCi0gIGNvbnN0IGd1aW50MzIgbGFtZV9pZCA9IDB4NGM0MTRkNDU7ICAgLyogJ0xBTUUnIGluIGhleCAqLwotICBnaW50IG9mZnNldF94aW5nLCBvZmZzZXRfdmJyaTsKLSAgZ3VpbnQ2NCBhdmFpbDsKLSAgZ2ludDY0IHVwc3RyZWFtX3RvdGFsX2J5dGVzID0gMDsKLSAgZ3VpbnQzMiByZWFkX2lkX3hpbmcgPSAwLCByZWFkX2lkX3ZicmkgPSAwOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludCBiaXRyYXRlOwotCi0gIGlmIChtcDNwYXJzZS0+c2VudF9jb2RlY190YWcpCi0gICAgcmV0dXJuOwotCi0gIC8qIENoZWNrIGZpcnN0IGZyYW1lIGZvciBYaW5nIGluZm8gKi8KLSAgaWYgKG1wM3BhcnNlLT52ZXJzaW9uID09IDEpIHsgLyogTVBFRy0xIGZpbGUgKi8KLSAgICBpZiAobXAzcGFyc2UtPmNoYW5uZWxzID09IDEpCi0gICAgICBvZmZzZXRfeGluZyA9IDB4MTE7Ci0gICAgZWxzZQotICAgICAgb2Zmc2V0X3hpbmcgPSAweDIwOwotICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBNUEVHLTIgaGVhZGVyICovCi0gICAgaWYgKG1wM3BhcnNlLT5jaGFubmVscyA9PSAxKQotICAgICAgb2Zmc2V0X3hpbmcgPSAweDA5OwotICAgIGVsc2UKLSAgICAgIG9mZnNldF94aW5nID0gMHgxMTsKLSAgfQotCi0gIC8qIFRoZSBWQlJJIHRhZyBpcyBhbHdheXMgYXQgb2Zmc2V0IDB4MjAgKi8KLSAgb2Zmc2V0X3ZicmkgPSAweDIwOwotCi0gIC8qIFNraXAgdGhlIDQgYnl0ZXMgb2YgdGhlIE1QMyBoZWFkZXIgdG9vICovCi0gIG9mZnNldF94aW5nICs9IDQ7Ci0gIG9mZnNldF92YnJpICs9IDQ7Ci0KLSAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggZGF0YSB0byByZWFkIHRoZSBYaW5nIGhlYWRlciAqLwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIGF2YWlsID0gbWFwLnNpemU7Ci0KLSAgaWYgKGF2YWlsID49IG9mZnNldF94aW5nICsgNCkgewotICAgIHJlYWRfaWRfeGluZyA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSArIG9mZnNldF94aW5nKTsKLSAgfQotICBpZiAoYXZhaWwgPj0gb2Zmc2V0X3ZicmkgKyA0KSB7Ci0gICAgcmVhZF9pZF92YnJpID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhICsgb2Zmc2V0X3ZicmkpOwotICB9Ci0KLSAgLyogb2J0YWluIHJlYWwgdXBzdHJlYW0gdG90YWwgYnl0ZXMgKi8KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChtcDNwYXJzZSksCi0gICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgJnVwc3RyZWFtX3RvdGFsX2J5dGVzKSkKLSAgICB1cHN0cmVhbV90b3RhbF9ieXRlcyA9IDA7Ci0KLSAgaWYgKHJlYWRfaWRfeGluZyA9PSB4aW5nX2lkIHx8IHJlYWRfaWRfeGluZyA9PSBpbmZvX2lkKSB7Ci0gICAgZ3VpbnQzMiB4aW5nX2ZsYWdzOwotICAgIGd1aW50IGJ5dGVzX25lZWRlZCA9IG9mZnNldF94aW5nICsgODsKLSAgICBnaW50NjQgdG90YWxfYnl0ZXM7Ci0gICAgR3N0Q2xvY2tUaW1lIHRvdGFsX3RpbWU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgIkZvdW5kIFhpbmcgaGVhZGVyIG1hcmtlciAweCV4IiwgeGluZ19pZCk7Ci0KLSAgICAvKiBNb3ZlIGRhdGEgYWZ0ZXIgWGluZyBoZWFkZXIgKi8KLSAgICBkYXRhICs9IG9mZnNldF94aW5nICsgNDsKLQotICAgIC8qIFJlYWQgNCBiYXNlIGJ5dGVzIG9mIGZsYWdzLCBiaWctZW5kaWFuICovCi0gICAgeGluZ19mbGFncyA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gICAgZGF0YSArPSA0OwotICAgIGlmICh4aW5nX2ZsYWdzICYgWElOR19GUkFNRVNfRkxBRykKLSAgICAgIGJ5dGVzX25lZWRlZCArPSA0OwotICAgIGlmICh4aW5nX2ZsYWdzICYgWElOR19CWVRFU19GTEFHKQotICAgICAgYnl0ZXNfbmVlZGVkICs9IDQ7Ci0gICAgaWYgKHhpbmdfZmxhZ3MgJiBYSU5HX1RPQ19GTEFHKQotICAgICAgYnl0ZXNfbmVlZGVkICs9IDEwMDsKLSAgICBpZiAoeGluZ19mbGFncyAmIFhJTkdfVkJSX1NDQUxFX0ZMQUcpCi0gICAgICBieXRlc19uZWVkZWQgKz0gNDsKLSAgICBpZiAoYXZhaWwgPCBieXRlc19uZWVkZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLAotICAgICAgICAgICJOb3QgZW5vdWdoIGRhdGEgdG8gcmVhZCBYaW5nIGhlYWRlciAobmVlZCAlZCkiLCBieXRlc19uZWVkZWQpOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAiUmVhZGluZyBYaW5nIGhlYWRlciIpOwotICAgIG1wM3BhcnNlLT54aW5nX2ZsYWdzID0geGluZ19mbGFnczsKLQotICAgIGlmICh4aW5nX2ZsYWdzICYgWElOR19GUkFNRVNfRkxBRykgewotICAgICAgbXAzcGFyc2UtPnhpbmdfZnJhbWVzID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgICAgIGlmIChtcDNwYXJzZS0+eGluZ19mcmFtZXMgPT0gMCkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1wM3BhcnNlLAotICAgICAgICAgICAgIkludmFsaWQgbnVtYmVyIG9mIGZyYW1lcyBpbiBYaW5nIGhlYWRlciIpOwotICAgICAgICBtcDNwYXJzZS0+eGluZ19mbGFncyAmPSB+WElOR19GUkFNRVNfRkxBRzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1wM3BhcnNlLT54aW5nX3RvdGFsX3RpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9TRUNPTkQsCi0gICAgICAgICAgICAoZ3VpbnQ2NCkgKG1wM3BhcnNlLT54aW5nX2ZyYW1lcykgKiAobXAzcGFyc2UtPnNwZiksCi0gICAgICAgICAgICBtcDNwYXJzZS0+cmF0ZSk7Ci0gICAgICB9Ci0KLSAgICAgIGRhdGEgKz0gNDsKLSAgICB9IGVsc2UgewotICAgICAgbXAzcGFyc2UtPnhpbmdfZnJhbWVzID0gMDsKLSAgICAgIG1wM3BhcnNlLT54aW5nX3RvdGFsX3RpbWUgPSAwOwotICAgIH0KLQotICAgIGlmICh4aW5nX2ZsYWdzICYgWElOR19CWVRFU19GTEFHKSB7Ci0gICAgICBtcDNwYXJzZS0+eGluZ19ieXRlcyA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gICAgICBpZiAobXAzcGFyc2UtPnhpbmdfYnl0ZXMgPT0gMCkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1wM3BhcnNlLCAiSW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgaW4gWGluZyBoZWFkZXIiKTsKLSAgICAgICAgbXAzcGFyc2UtPnhpbmdfZmxhZ3MgJj0gflhJTkdfQllURVNfRkxBRzsKLSAgICAgIH0KLSAgICAgIGRhdGEgKz0gNDsKLSAgICB9IGVsc2UgewotICAgICAgbXAzcGFyc2UtPnhpbmdfYnl0ZXMgPSAwOwotICAgIH0KLQotICAgIC8qIElmIHdlIGtub3cgdGhlIHVwc3RyZWFtIHNpemUgYW5kIGR1cmF0aW9uLCBjb21wdXRlIHRoZQotICAgICAqIHRvdGFsIGJpdHJhdGUsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qga2JpdC9zZWMgKi8KLSAgICBpZiAoKHRvdGFsX3RpbWUgPSBtcDNwYXJzZS0+eGluZ190b3RhbF90aW1lKSAmJgotICAgICAgICAodG90YWxfYnl0ZXMgPSBtcDNwYXJzZS0+eGluZ19ieXRlcykpIHsKLSAgICAgIG1wM3BhcnNlLT54aW5nX2JpdHJhdGUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHRvdGFsX2J5dGVzLAotICAgICAgICAgIDggKiBHU1RfU0VDT05ELCB0b3RhbF90aW1lKTsKLSAgICAgIG1wM3BhcnNlLT54aW5nX2JpdHJhdGUgKz0gNTAwOwotICAgICAgbXAzcGFyc2UtPnhpbmdfYml0cmF0ZSAtPSBtcDNwYXJzZS0+eGluZ19iaXRyYXRlICUgMTAwMDsKLSAgICB9Ci0KLSAgICBpZiAoeGluZ19mbGFncyAmIFhJTkdfVE9DX0ZMQUcpIHsKLSAgICAgIGludCBpLCBwZXJjZW50ID0gMDsKLSAgICAgIGd1Y2hhciAqdGFibGUgPSBtcDNwYXJzZS0+eGluZ19zZWVrX3RhYmxlOwotICAgICAgZ3VjaGFyIG9sZCA9IDAsIG5ldzsKLSAgICAgIGd1aW50IGZpcnN0OwotCi0gICAgICBmaXJzdCA9IGRhdGFbMF07Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwKLSAgICAgICAgICAiU3VidHJhY3RpbmcgaW5pdGlhbCBvZmZzZXQgb2YgJWQgYnl0ZXMgZnJvbSBYaW5nIFRPQyIsIGZpcnN0KTsKLQotICAgICAgLyogeGluZyBzZWVrIHRhYmxlOiBwZXJjZW50IHRpbWUgLT4gMS8yNTYgYnl0ZXBvcyAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgICAgIG5ldyA9IGRhdGFbaV0gLSBmaXJzdDsKLSAgICAgICAgaWYgKG9sZCA+IG5ldykgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXAzcGFyc2UsICJTa2lwcGluZyBicm9rZW4gWGluZyBUT0MiKTsKLSAgICAgICAgICBtcDNwYXJzZS0+eGluZ19mbGFncyAmPSB+WElOR19UT0NfRkxBRzsKLSAgICAgICAgICBnb3RvIHNraXBfdG9jOwotICAgICAgICB9Ci0gICAgICAgIG1wM3BhcnNlLT54aW5nX3NlZWtfdGFibGVbaV0gPSBvbGQgPSBuZXc7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGJ1aWxkIGludmVyc2UgdGFibGU6IDEvMjU2IGJ5dGVwb3MgLT4gMS8xMDAgcGVyY2VudCB0aW1lICovCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgd2hpbGUgKHBlcmNlbnQgPCA5OSAmJiB0YWJsZVtwZXJjZW50ICsgMV0gPD0gaSkKLSAgICAgICAgICBwZXJjZW50Kys7Ci0KLSAgICAgICAgaWYgKHRhYmxlW3BlcmNlbnRdID09IGkpIHsKLSAgICAgICAgICBtcDNwYXJzZS0+eGluZ19zZWVrX3RhYmxlX2ludmVyc2VbaV0gPSBwZXJjZW50ICogMTAwOwotICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPCA5OSAmJiB0YWJsZVtwZXJjZW50XSkgewotICAgICAgICAgIGdkb3VibGUgZmEsIGZiLCBmeDsKLSAgICAgICAgICBnaW50IGEgPSBwZXJjZW50LCBiID0gcGVyY2VudCArIDE7Ci0KLSAgICAgICAgICBmYSA9IHRhYmxlW2FdOwotICAgICAgICAgIGZiID0gdGFibGVbYl07Ci0gICAgICAgICAgZnggPSAoYiAtIGEpIC8gKGZiIC0gZmEpICogKGkgLSBmYSkgKyBhOwotICAgICAgICAgIG1wM3BhcnNlLT54aW5nX3NlZWtfdGFibGVfaW52ZXJzZVtpXSA9IChndWludDE2KSAoZnggKiAxMDApOwotICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPT0gOTkpIHsKLSAgICAgICAgICBnZG91YmxlIGZhLCBmYiwgZng7Ci0gICAgICAgICAgZ2ludCBhID0gcGVyY2VudCwgYiA9IDEwMDsKLQotICAgICAgICAgIGZhID0gdGFibGVbYV07Ci0gICAgICAgICAgZmIgPSAyNTYuMDsKLSAgICAgICAgICBmeCA9IChiIC0gYSkgLyAoZmIgLSBmYSkgKiAoaSAtIGZhKSArIGE7Ci0gICAgICAgICAgbXAzcGFyc2UtPnhpbmdfc2Vla190YWJsZV9pbnZlcnNlW2ldID0gKGd1aW50MTYpIChmeCAqIDEwMCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICBza2lwX3RvYzoKLSAgICAgIGRhdGEgKz0gMTAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBtZW1zZXQgKG1wM3BhcnNlLT54aW5nX3NlZWtfdGFibGUsIDAsIDEwMCk7Ci0gICAgICBtZW1zZXQgKG1wM3BhcnNlLT54aW5nX3NlZWtfdGFibGVfaW52ZXJzZSwgMCwgMjU2KTsKLSAgICB9Ci0KLSAgICBpZiAoeGluZ19mbGFncyAmIFhJTkdfVkJSX1NDQUxFX0ZMQUcpIHsKLSAgICAgIG1wM3BhcnNlLT54aW5nX3Zicl9zY2FsZSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gICAgICBkYXRhICs9IDQ7Ci0gICAgfSBlbHNlCi0gICAgICBtcDNwYXJzZS0+eGluZ192YnJfc2NhbGUgPSAwOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsICJYaW5nIGhlYWRlciByZXBvcnRlZCAldSBmcmFtZXMsIHRpbWUgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIsICV1IGJ5dGVzLCB2YnIgc2NhbGUgJXUiLCBtcDNwYXJzZS0+eGluZ19mcmFtZXMsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKG1wM3BhcnNlLT54aW5nX3RvdGFsX3RpbWUpLCBtcDNwYXJzZS0+eGluZ19ieXRlcywKLSAgICAgICAgbXAzcGFyc2UtPnhpbmdfdmJyX3NjYWxlKTsKLQotICAgIC8qIGNoZWNrIGZvciB0cnVuY2F0ZWQgZmlsZSAqLwotICAgIGlmICh1cHN0cmVhbV90b3RhbF9ieXRlcyAmJiBtcDNwYXJzZS0+eGluZ19ieXRlcyAmJgotICAgICAgICBtcDNwYXJzZS0+eGluZ19ieXRlcyAqIDAuOCA+IHVwc3RyZWFtX3RvdGFsX2J5dGVzKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG1wM3BhcnNlLCAiRmlsZSBhcHBlYXJzIHRvIGhhdmUgYmVlbiB0cnVuY2F0ZWQ7ICIKLSAgICAgICAgICAiaW52YWxpZGF0aW5nIFhpbmcgaGVhZGVyIGR1cmF0aW9uIGFuZCBzaXplIik7Ci0gICAgICBtcDNwYXJzZS0+eGluZ19mbGFncyAmPSB+WElOR19CWVRFU19GTEFHOwotICAgICAgbXAzcGFyc2UtPnhpbmdfZmxhZ3MgJj0gflhJTkdfRlJBTUVTX0ZMQUc7Ci0gICAgfQotCi0gICAgLyogT3B0aW9uYWwgTEFNRSB0YWc/ICovCi0gICAgaWYgKGF2YWlsIC0gYnl0ZXNfbmVlZGVkID49IDM2ICYmIEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSkgPT0gbGFtZV9pZCkgewotICAgICAgZ2NoYXIgbGFtZV92ZXJzaW9uWzEwXSA9IHsgMCwgfTsKLSAgICAgIGd1aW50IHRhZ19yZXY7Ci0gICAgICBndWludDMyIGVuY29kZXJfZGVsYXksIGVuY29kZXJfcGFkZGluZzsKLQotICAgICAgbWVtY3B5IChsYW1lX3ZlcnNpb24sIGRhdGEsIDkpOwotICAgICAgZGF0YSArPSA5OwotICAgICAgdGFnX3JldiA9IGRhdGFbMF0gPj4gNDsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAiRm91bmQgTEFNRSB0YWcgcmV2aXNpb24gJWQgY3JlYXRlZCBieSAnJXMnIiwKLSAgICAgICAgICB0YWdfcmV2LCBsYW1lX3ZlcnNpb24pOwotCi0gICAgICAvKiBTa2lwIGFsbCB0aGUgaW5mb3JtYXRpb24gd2UncmUgbm90IGludGVyZXN0ZWQgaW4gKi8KLSAgICAgIGRhdGEgKz0gMTI7Ci0gICAgICAvKiBFbmNvZGVyIGRlbGF5IGFuZCBlbmQgcGFkZGluZyAqLwotICAgICAgZW5jb2Rlcl9kZWxheSA9IEdTVF9SRUFEX1VJTlQyNF9CRSAoZGF0YSk7Ci0gICAgICBlbmNvZGVyX2RlbGF5ID4+PSAxMjsKLSAgICAgIGVuY29kZXJfcGFkZGluZyA9IEdTVF9SRUFEX1VJTlQyNF9CRSAoZGF0YSk7Ci0gICAgICBlbmNvZGVyX3BhZGRpbmcgJj0gMHgwMDBmZmY7Ci0KLSAgICAgIG1wM3BhcnNlLT5lbmNvZGVyX2RlbGF5ID0gZW5jb2Rlcl9kZWxheTsKLSAgICAgIG1wM3BhcnNlLT5lbmNvZGVyX3BhZGRpbmcgPSBlbmNvZGVyX3BhZGRpbmc7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAiRW5jb2RlciBkZWxheSAldSwgZW5jb2RlciBwYWRkaW5nICV1IiwKLSAgICAgICAgICBlbmNvZGVyX2RlbGF5LCBlbmNvZGVyX3BhZGRpbmcpOwotICAgIH0KLSAgfSBlbHNlIGlmIChyZWFkX2lkX3ZicmkgPT0gdmJyaV9pZCkgewotICAgIGdpbnQ2NCB0b3RhbF9ieXRlcywgdG90YWxfZnJhbWVzOwotICAgIEdzdENsb2NrVGltZSB0b3RhbF90aW1lOwotICAgIGd1aW50MTYgbnNlZWtfcG9pbnRzOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsICJGb3VuZCBWQlJJIGhlYWRlciBtYXJrZXIgMHgleCIsIHZicmlfaWQpOwotCi0gICAgaWYgKGF2YWlsIDwgb2Zmc2V0X3ZicmkgKyAyNikgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsCi0gICAgICAgICAgIk5vdCBlbm91Z2ggZGF0YSB0byByZWFkIFZCUkkgaGVhZGVyIChuZWVkICVkKSIsIG9mZnNldF92YnJpICsgMjYpOwotICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1wM3BhcnNlLCAiUmVhZGluZyBWQlJJIGhlYWRlciIpOwotCi0gICAgLyogTW92ZSBkYXRhIGFmdGVyIFZCUkkgaGVhZGVyICovCi0gICAgZGF0YSArPSBvZmZzZXRfdmJyaSArIDQ7Ci0KLSAgICBpZiAoR1NUX1JFQURfVUlOVDE2X0JFIChkYXRhKSAhPSAweDAwMDEpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXAzcGFyc2UsCi0gICAgICAgICAgIlVuc3VwcG9ydGVkIFZCUkkgdmVyc2lvbiAweCV4IiwgR1NUX1JFQURfVUlOVDE2X0JFIChkYXRhKSk7Ci0gICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotICAgIGRhdGEgKz0gMjsKLQotICAgIC8qIFNraXAgZW5jb2RlciBkZWxheSAqLwotICAgIGRhdGEgKz0gMjsKLQotICAgIC8qIFNraXAgcXVhbGl0eSAqLwotICAgIGRhdGEgKz0gMjsKLQotICAgIHRvdGFsX2J5dGVzID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgICBpZiAodG90YWxfYnl0ZXMgIT0gMCkKLSAgICAgIG1wM3BhcnNlLT52YnJpX2J5dGVzID0gdG90YWxfYnl0ZXM7Ci0gICAgZGF0YSArPSA0OwotCi0gICAgdG90YWxfZnJhbWVzID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgICBpZiAodG90YWxfZnJhbWVzICE9IDApIHsKLSAgICAgIG1wM3BhcnNlLT52YnJpX2ZyYW1lcyA9IHRvdGFsX2ZyYW1lczsKLSAgICAgIG1wM3BhcnNlLT52YnJpX3RvdGFsX3RpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKEdTVF9TRUNPTkQsCi0gICAgICAgICAgKGd1aW50NjQpIChtcDNwYXJzZS0+dmJyaV9mcmFtZXMpICogKG1wM3BhcnNlLT5zcGYpLCBtcDNwYXJzZS0+cmF0ZSk7Ci0gICAgfQotICAgIGRhdGEgKz0gNDsKLQotICAgIC8qIElmIHdlIGtub3cgdGhlIHVwc3RyZWFtIHNpemUgYW5kIGR1cmF0aW9uLCBjb21wdXRlIHRoZQotICAgICAqIHRvdGFsIGJpdHJhdGUsIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3Qga2JpdC9zZWMgKi8KLSAgICBpZiAoKHRvdGFsX3RpbWUgPSBtcDNwYXJzZS0+dmJyaV90b3RhbF90aW1lKSAmJgotICAgICAgICAodG90YWxfYnl0ZXMgPSBtcDNwYXJzZS0+dmJyaV9ieXRlcykpIHsKLSAgICAgIG1wM3BhcnNlLT52YnJpX2JpdHJhdGUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHRvdGFsX2J5dGVzLAotICAgICAgICAgIDggKiBHU1RfU0VDT05ELCB0b3RhbF90aW1lKTsKLSAgICAgIG1wM3BhcnNlLT52YnJpX2JpdHJhdGUgKz0gNTAwOwotICAgICAgbXAzcGFyc2UtPnZicmlfYml0cmF0ZSAtPSBtcDNwYXJzZS0+dmJyaV9iaXRyYXRlICUgMTAwMDsKLSAgICB9Ci0KLSAgICBuc2Vla19wb2ludHMgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEpOwotICAgIGRhdGEgKz0gMjsKLQotICAgIGlmIChuc2Vla19wb2ludHMgPiAwKSB7Ci0gICAgICBndWludCBzY2FsZSwgc2Vla19ieXRlcywgc2Vla19mcmFtZXM7Ci0gICAgICBnaW50IGk7Ci0KLSAgICAgIG1wM3BhcnNlLT52YnJpX3NlZWtfcG9pbnRzID0gbnNlZWtfcG9pbnRzOwotCi0gICAgICBzY2FsZSA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoZGF0YSk7Ci0gICAgICBkYXRhICs9IDI7Ci0KLSAgICAgIHNlZWtfYnl0ZXMgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEpOwotICAgICAgZGF0YSArPSAyOwotCi0gICAgICBzZWVrX2ZyYW1lcyA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoZGF0YSk7Ci0KLSAgICAgIGlmIChzY2FsZSA9PSAwIHx8IHNlZWtfYnl0ZXMgPT0gMCB8fCBzZWVrX2J5dGVzID4gNCB8fCBzZWVrX2ZyYW1lcyA9PSAwKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXAzcGFyc2UsICJVbnN1cHBvcnRlZCBWQlJJIHNlZWsgdGFibGUiKTsKLSAgICAgICAgZ290byBvdXRfdmJyaTsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2YWlsIDwgb2Zmc2V0X3ZicmkgKyAyNiArIG5zZWVrX3BvaW50cyAqIHNlZWtfYnl0ZXMpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtcDNwYXJzZSwKLSAgICAgICAgICAgICJOb3QgZW5vdWdoIGRhdGEgdG8gcmVhZCBWQlJJIHNlZWsgdGFibGUgKG5lZWQgJWQpIiwKLSAgICAgICAgICAgIG9mZnNldF92YnJpICsgMjYgKyBuc2Vla19wb2ludHMgKiBzZWVrX2J5dGVzKTsKLSAgICAgICAgZ290byBvdXRfdmJyaTsKLSAgICAgIH0KLQotICAgICAgaWYgKHNlZWtfZnJhbWVzICogbnNlZWtfcG9pbnRzIDwgdG90YWxfZnJhbWVzIC0gc2Vla19mcmFtZXMgfHwKLSAgICAgICAgICBzZWVrX2ZyYW1lcyAqIG5zZWVrX3BvaW50cyA+IHRvdGFsX2ZyYW1lcyArIHNlZWtfZnJhbWVzKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXAzcGFyc2UsCi0gICAgICAgICAgICAiVkJSSSBzZWVrIHRhYmxlIGRvZXNuJ3QgY292ZXIgdGhlIGNvbXBsZXRlIGZpbGUiKTsKLSAgICAgICAgZ290byBvdXRfdmJyaTsKLSAgICAgIH0KLQotICAgICAgZGF0YSA9IG1hcC5kYXRhOwotICAgICAgZGF0YSArPSBvZmZzZXRfdmJyaSArIDI2OwotCi0gICAgICAvKiBWQlJJIHNlZWsgdGFibGU6IGZyYW1lL3NlZWtfZnJhbWVzIC0+IGJ5dGUgKi8KLSAgICAgIG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGUgPSBnX25ldyAoZ3VpbnQzMiwgbnNlZWtfcG9pbnRzKTsKLSAgICAgIGlmIChzZWVrX2J5dGVzID09IDQpCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2Vla19wb2ludHM7IGkrKykgewotICAgICAgICAgIG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGVbaV0gPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGRhdGEpICogc2NhbGU7Ci0gICAgICAgICAgZGF0YSArPSA0OwotICAgICAgfSBlbHNlIGlmIChzZWVrX2J5dGVzID09IDMpCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2Vla19wb2ludHM7IGkrKykgewotICAgICAgICAgIG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGVbaV0gPSBHU1RfUkVBRF9VSU5UMjRfQkUgKGRhdGEpICogc2NhbGU7Ci0gICAgICAgICAgZGF0YSArPSAzOwotICAgICAgfSBlbHNlIGlmIChzZWVrX2J5dGVzID09IDIpCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuc2Vla19wb2ludHM7IGkrKykgewotICAgICAgICAgIG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGVbaV0gPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEpICogc2NhbGU7Ci0gICAgICAgICAgZGF0YSArPSAyOwotICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBzZWVrX2J5dGVzID09IDEgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5zZWVrX3BvaW50czsgaSsrKSB7Ci0gICAgICAgICAgbXAzcGFyc2UtPnZicmlfc2Vla190YWJsZVtpXSA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhKSAqIHNjYWxlOwotICAgICAgICAgIGRhdGEgKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgb3V0X3Zicmk6Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwgIlZCUkkgaGVhZGVyIHJlcG9ydGVkICV1IGZyYW1lcywgdGltZSAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgYnl0ZXMgJXUiLCBtcDNwYXJzZS0+dmJyaV9mcmFtZXMsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKG1wM3BhcnNlLT52YnJpX3RvdGFsX3RpbWUpLCBtcDNwYXJzZS0+dmJyaV9ieXRlcyk7Ci0KLSAgICAvKiBjaGVjayBmb3IgdHJ1bmNhdGVkIGZpbGUgKi8KLSAgICBpZiAodXBzdHJlYW1fdG90YWxfYnl0ZXMgJiYgbXAzcGFyc2UtPnZicmlfYnl0ZXMgJiYKLSAgICAgICAgbXAzcGFyc2UtPnZicmlfYnl0ZXMgKiAwLjggPiB1cHN0cmVhbV90b3RhbF9ieXRlcykgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtcDNwYXJzZSwgIkZpbGUgYXBwZWFycyB0byBoYXZlIGJlZW4gdHJ1bmNhdGVkOyAiCi0gICAgICAgICAgImludmFsaWRhdGluZyBWQlJJIGhlYWRlciBkdXJhdGlvbiBhbmQgc2l6ZSIpOwotICAgICAgbXAzcGFyc2UtPnZicmlfdmFsaWQgPSBGQUxTRTsKLSAgICB9IGVsc2UgewotICAgICAgbXAzcGFyc2UtPnZicmlfdmFsaWQgPSBUUlVFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtcDNwYXJzZSwKLSAgICAgICAgIlhpbmcsIExBTUUgb3IgVkJSSSBoZWFkZXIgbm90IGZvdW5kIGluIGZpcnN0IGZyYW1lIik7Ci0gIH0KLQotICAvKiBzZXQgZHVyYXRpb24gaWYgdGFibGVzIHByb3ZpZGVkIGEgdmFsaWQgb25lICovCi0gIGlmIChtcDNwYXJzZS0+eGluZ19mbGFncyAmIFhJTkdfRlJBTUVTX0ZMQUcpIHsKLSAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gKEdTVF9CQVNFX1BBUlNFIChtcDNwYXJzZSksIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgbXAzcGFyc2UtPnhpbmdfdG90YWxfdGltZSwgMCk7Ci0gIH0KLSAgaWYgKG1wM3BhcnNlLT52YnJpX3RvdGFsX3RpbWUgIT0gMCAmJiBtcDNwYXJzZS0+dmJyaV92YWxpZCkgewotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9kdXJhdGlvbiAoR1NUX0JBU0VfUEFSU0UgKG1wM3BhcnNlKSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICBtcDNwYXJzZS0+dmJyaV90b3RhbF90aW1lLCAwKTsKLSAgfQotCi0gIC8qIHRlbGwgYmFzZWNsYXNzIGhvdyBuaWNlbHkgd2UgY2FuIHNlZWssIGFuZCBhIGJpdHJhdGUgaWYgb25lIGZvdW5kICovCi0gIC8qIEZJWE1FOiBmaWxsIGluZGV4IHdpdGggc2VlayB0YWJsZSAqLwotI2lmIDAKLSAgc2Vla2FibGUgPSBHU1RfQkFTRV9QQVJTRV9TRUVLX0RFRkFVTFQ7Ci0gIGlmICgobXAzcGFyc2UtPnhpbmdfZmxhZ3MgJiBYSU5HX1RPQ19GTEFHKSAmJiBtcDNwYXJzZS0+eGluZ19ieXRlcyAmJgotICAgICAgbXAzcGFyc2UtPnhpbmdfdG90YWxfdGltZSkKLSAgICBzZWVrYWJsZSA9IEdTVF9CQVNFX1BBUlNFX1NFRUtfVEFCTEU7Ci0KLSAgaWYgKG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGUgJiYgbXAzcGFyc2UtPnZicmlfYnl0ZXMgJiYKLSAgICAgIG1wM3BhcnNlLT52YnJpX3RvdGFsX3RpbWUpCi0gICAgc2Vla2FibGUgPSBHU1RfQkFTRV9QQVJTRV9TRUVLX1RBQkxFOwotI2VuZGlmCi0KLSAgaWYgKG1wM3BhcnNlLT54aW5nX2JpdHJhdGUpCi0gICAgYml0cmF0ZSA9IG1wM3BhcnNlLT54aW5nX2JpdHJhdGU7Ci0gIGVsc2UgaWYgKG1wM3BhcnNlLT52YnJpX2JpdHJhdGUpCi0gICAgYml0cmF0ZSA9IG1wM3BhcnNlLT52YnJpX2JpdHJhdGU7Ci0gIGVsc2UKLSAgICBiaXRyYXRlID0gMDsKLQotICBnc3RfYmFzZV9wYXJzZV9zZXRfYXZlcmFnZV9iaXRyYXRlIChHU1RfQkFTRV9QQVJTRSAobXAzcGFyc2UpLCBiaXRyYXRlKTsKLQotY2xlYW51cDoKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXBlZ19hdWRpb19wYXJzZV90aW1lX3RvX2J5dGVwb3MgKEdzdE1wZWdBdWRpb1BhcnNlICogbXAzcGFyc2UsCi0gICAgR3N0Q2xvY2tUaW1lIHRzLCBnaW50NjQgKiBieXRlcG9zKQotewotICBnaW50NjQgdG90YWxfYnl0ZXM7Ci0gIEdzdENsb2NrVGltZSB0b3RhbF90aW1lOwotCi0gIC8qIElmIFhJTkcgc2VlayB0YWJsZSBleGlzdHMgdXNlIHRoaXMgZm9yIHRpbWUtPmJ5dGUgY29udmVyc2lvbiAqLwotICBpZiAoKG1wM3BhcnNlLT54aW5nX2ZsYWdzICYgWElOR19UT0NfRkxBRykgJiYKLSAgICAgICh0b3RhbF9ieXRlcyA9IG1wM3BhcnNlLT54aW5nX2J5dGVzKSAmJgotICAgICAgKHRvdGFsX3RpbWUgPSBtcDNwYXJzZS0+eGluZ190b3RhbF90aW1lKSkgewotICAgIGdkb3VibGUgZmEsIGZiLCBmeDsKLSAgICBnZG91YmxlIHBlcmNlbnQgPQotICAgICAgICBDTEFNUCAoKDEwMC4wICogZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlICh0cykpIC8KLSAgICAgICAgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlICh0b3RhbF90aW1lKSwgMC4wLCAxMDAuMCk7Ci0gICAgZ2ludCBpbmRleCA9IENMQU1QIChwZXJjZW50LCAwLCA5OSk7Ci0KLSAgICBmYSA9IG1wM3BhcnNlLT54aW5nX3NlZWtfdGFibGVbaW5kZXhdOwotICAgIGlmIChpbmRleCA8IDk5KQotICAgICAgZmIgPSBtcDNwYXJzZS0+eGluZ19zZWVrX3RhYmxlW2luZGV4ICsgMV07Ci0gICAgZWxzZQotICAgICAgZmIgPSAyNTYuMDsKLQotICAgIGZ4ID0gZmEgKyAoZmIgLSBmYSkgKiAocGVyY2VudCAtIGluZGV4KTsKLQotICAgICpieXRlcG9zID0gKDEuMCAvIDI1Ni4wKSAqIGZ4ICogdG90YWxfYnl0ZXM7Ci0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmIChtcDNwYXJzZS0+dmJyaV9zZWVrX3RhYmxlICYmICh0b3RhbF9ieXRlcyA9IG1wM3BhcnNlLT52YnJpX2J5dGVzKSAmJgotICAgICAgKHRvdGFsX3RpbWUgPSBtcDNwYXJzZS0+dmJyaV90b3RhbF90aW1lKSkgewotICAgIGdpbnQgaSwgajsKLSAgICBnZG91YmxlIGEsIGIsIGZhLCBmYjsKLQotICAgIGkgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHRzLCBtcDNwYXJzZS0+dmJyaV9zZWVrX3BvaW50cyAtIDEsIHRvdGFsX3RpbWUpOwotICAgIGkgPSBDTEFNUCAoaSwgMCwgbXAzcGFyc2UtPnZicmlfc2Vla19wb2ludHMgLSAxKTsKLQotICAgIGEgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKGksIHRvdGFsX3RpbWUsCi0gICAgICAgICAgICBtcDNwYXJzZS0+dmJyaV9zZWVrX3BvaW50cykpOwotICAgIGZhID0gMC4wOwotICAgIGZvciAoaiA9IGk7IGogPj0gMDsgai0tKQotICAgICAgZmEgKz0gbXAzcGFyc2UtPnZicmlfc2Vla190YWJsZVtqXTsKLQotICAgIGlmIChpICsgMSA8IG1wM3BhcnNlLT52YnJpX3NlZWtfcG9pbnRzKSB7Ci0gICAgICBiID0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChpICsgMSwgdG90YWxfdGltZSwKLSAgICAgICAgICAgICAgbXAzcGFyc2UtPnZicmlfc2Vla19wb2ludHMpKTsKLSAgICAgIGZiID0gZmEgKyBtcDNwYXJzZS0+dmJyaV9zZWVrX3RhYmxlW2kgKyAxXTsKLSAgICB9IGVsc2UgewotICAgICAgYiA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHRvdGFsX3RpbWUpOwotICAgICAgZmIgPSB0b3RhbF9ieXRlczsKLSAgICB9Ci0KLSAgICAqYnl0ZXBvcyA9IGZhICsgKChmYiAtIGZhKSAvIChiIC0gYSkpICogKGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHRzKSAtIGEpOwotCi0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21wZWdfYXVkaW9fcGFyc2VfYnl0ZXBvc190b190aW1lIChHc3RNcGVnQXVkaW9QYXJzZSAqIG1wM3BhcnNlLAotICAgIGdpbnQ2NCBieXRlcG9zLCBHc3RDbG9ja1RpbWUgKiB0cykKLXsKLSAgZ2ludDY0IHRvdGFsX2J5dGVzOwotICBHc3RDbG9ja1RpbWUgdG90YWxfdGltZTsKLQotICAvKiBJZiBYSU5HIHNlZWsgdGFibGUgZXhpc3RzIHVzZSB0aGlzIGZvciBieXRlLT50aW1lIGNvbnZlcnNpb24gKi8KLSAgaWYgKChtcDNwYXJzZS0+eGluZ19mbGFncyAmIFhJTkdfVE9DX0ZMQUcpICYmCi0gICAgICAodG90YWxfYnl0ZXMgPSBtcDNwYXJzZS0+eGluZ19ieXRlcykgJiYKLSAgICAgICh0b3RhbF90aW1lID0gbXAzcGFyc2UtPnhpbmdfdG90YWxfdGltZSkpIHsKLSAgICBnZG91YmxlIGZhLCBmYiwgZng7Ci0gICAgZ2RvdWJsZSBwb3M7Ci0gICAgZ2ludCBpbmRleDsKLQotICAgIHBvcyA9IENMQU1QICgoYnl0ZXBvcyAqIDI1Ni4wKSAvIHRvdGFsX2J5dGVzLCAwLjAsIDI1Ni4wKTsKLSAgICBpbmRleCA9IENMQU1QIChwb3MsIDAsIDI1NSk7Ci0gICAgZmEgPSBtcDNwYXJzZS0+eGluZ19zZWVrX3RhYmxlX2ludmVyc2VbaW5kZXhdOwotICAgIGlmIChpbmRleCA8IDI1NSkKLSAgICAgIGZiID0gbXAzcGFyc2UtPnhpbmdfc2Vla190YWJsZV9pbnZlcnNlW2luZGV4ICsgMV07Ci0gICAgZWxzZQotICAgICAgZmIgPSAxMDAwMC4wOwotCi0gICAgZnggPSBmYSArIChmYiAtIGZhKSAqIChwb3MgLSBpbmRleCk7Ci0KLSAgICAqdHMgPSAoMS4wIC8gMTAwMDAuMCkgKiBmeCAqIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSAodG90YWxfdGltZSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmIChtcDNwYXJzZS0+dmJyaV9zZWVrX3RhYmxlICYmCi0gICAgICAodG90YWxfYnl0ZXMgPSBtcDNwYXJzZS0+dmJyaV9ieXRlcykgJiYKLSAgICAgICh0b3RhbF90aW1lID0gbXAzcGFyc2UtPnZicmlfdG90YWxfdGltZSkpIHsKLSAgICBnaW50IGkgPSAwOwotICAgIGd1aW50NjQgc3VtID0gMDsKLSAgICBnZG91YmxlIGEsIGIsIGZhLCBmYjsKLQotICAgIGRvIHsKLSAgICAgIHN1bSArPSBtcDNwYXJzZS0+dmJyaV9zZWVrX3RhYmxlW2ldOwotICAgICAgaSsrOwotICAgIH0gd2hpbGUgKGkgKyAxIDwgbXAzcGFyc2UtPnZicmlfc2Vla19wb2ludHMKLSAgICAgICAgJiYgc3VtICsgbXAzcGFyc2UtPnZicmlfc2Vla190YWJsZVtpXSA8IGJ5dGVwb3MpOwotICAgIGktLTsKLQotICAgIGEgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChzdW0pOwotICAgIGZhID0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChpLCB0b3RhbF90aW1lLAotICAgICAgICAgICAgbXAzcGFyc2UtPnZicmlfc2Vla19wb2ludHMpKTsKLQotICAgIGlmIChpICsgMSA8IG1wM3BhcnNlLT52YnJpX3NlZWtfcG9pbnRzKSB7Ci0gICAgICBiID0gYSArIG1wM3BhcnNlLT52YnJpX3NlZWtfdGFibGVbaSArIDFdOwotICAgICAgZmIgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChnc3RfdXRpbF91aW50NjRfc2NhbGUgKGkgKyAxLCB0b3RhbF90aW1lLAotICAgICAgICAgICAgICBtcDNwYXJzZS0+dmJyaV9zZWVrX3BvaW50cykpOwotICAgIH0gZWxzZSB7Ci0gICAgICBiID0gdG90YWxfYnl0ZXM7Ci0gICAgICBmYiA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHRvdGFsX3RpbWUpOwotICAgIH0KLQotICAgICp0cyA9IGdzdF9nZG91YmxlX3RvX2d1aW50NjQgKGZhICsgKChmYiAtIGZhKSAvIChiIC0gYSkpICogKGJ5dGVwb3MgLSBhKSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXBlZ19hdWRpb19wYXJzZV9jb252ZXJ0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsCi0gICAgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0IGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBHc3RNcGVnQXVkaW9QYXJzZSAqbXAzcGFyc2UgPSBHU1RfTVBFR19BVURJT19QQVJTRSAocGFyc2UpOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBpZiAoc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYgZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykKLSAgICByZXMgPQotICAgICAgICBnc3RfbXBlZ19hdWRpb19wYXJzZV90aW1lX3RvX2J5dGVwb3MgKG1wM3BhcnNlLCBzcmNfdmFsdWUsIGRlc3RfdmFsdWUpOwotICBlbHNlIGlmIChzcmNfZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMgJiYgZGVzdF9mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQotICAgIHJlcyA9IGdzdF9tcGVnX2F1ZGlvX3BhcnNlX2J5dGVwb3NfdG9fdGltZSAobXAzcGFyc2UsIHNyY192YWx1ZSwKLSAgICAgICAgKEdzdENsb2NrVGltZSAqKSBkZXN0X3ZhbHVlKTsKLQotICAvKiBpZiBubyB0YWJsZXMsIGZhbGwgYmFjayB0byBkZWZhdWx0IGVzdGltYXRlZCByYXRlIGJhc2VkIGNvbnZlcnNpb24gKi8KLSAgaWYgKCFyZXMpCi0gICAgcmV0dXJuIGdzdF9iYXNlX3BhcnNlX2NvbnZlcnRfZGVmYXVsdCAocGFyc2UsIHNyY19mb3JtYXQsIHNyY192YWx1ZSwKLSAgICAgICAgZGVzdF9mb3JtYXQsIGRlc3RfdmFsdWUpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXBlZ19hdWRpb19wYXJzZV9wcmVfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0TXBlZ0F1ZGlvUGFyc2UgKm1wM3BhcnNlID0gR1NUX01QRUdfQVVESU9fUEFSU0UgKHBhcnNlKTsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IE5VTEw7Ci0KLSAgLyogd2Ugd2lsbCBjcmVhdGUgYSB0YWdsaXN0IChpZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGNoYW5nZWQpCi0gICAqIHRvIGFkZCB0aGUgdGFncyB0aGF0IGNoYW5nZWQgKi8KLSAgaWYgKG1wM3BhcnNlLT5sYXN0X3Bvc3RlZF9jcmMgIT0gbXAzcGFyc2UtPmxhc3RfY3JjKSB7Ci0gICAgZ2Jvb2xlYW4gdXNpbmdfY3JjOwotCi0gICAgaWYgKCF0YWdsaXN0KQotICAgICAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgICBtcDNwYXJzZS0+bGFzdF9wb3N0ZWRfY3JjID0gbXAzcGFyc2UtPmxhc3RfY3JjOwotICAgIGlmIChtcDNwYXJzZS0+bGFzdF9wb3N0ZWRfY3JjID09IENSQ19QUk9URUNURUQpIHsKLSAgICAgIHVzaW5nX2NyYyA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVzaW5nX2NyYyA9IEZBTFNFOwotICAgIH0KLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfQ1JDLAotICAgICAgICB1c2luZ19jcmMsIE5VTEwpOwotICB9Ci0KLSAgaWYgKG1wM3BhcnNlLT5sYXN0X3Bvc3RlZF9jaGFubmVsX21vZGUgIT0gbXAzcGFyc2UtPmxhc3RfbW9kZSkgewotICAgIGlmICghdGFnbGlzdCkKLSAgICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gICAgbXAzcGFyc2UtPmxhc3RfcG9zdGVkX2NoYW5uZWxfbW9kZSA9IG1wM3BhcnNlLT5sYXN0X21vZGU7Ci0KLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfTU9ERSwKLSAgICAgICAgZ3N0X21wZWdfYXVkaW9fY2hhbm5lbF9tb2RlX2dldF9uaWNrIChtcDNwYXJzZS0+bGFzdF9tb2RlKSwgTlVMTCk7Ci0gIH0KLQotICAvKiB0YWcgc2VuZGluZyBkb25lIGxhdGUgZW5vdWdoIGluIGhvb2sgdG8gZW5zdXJlIHBlbmRpbmcgZXZlbnRzCi0gICAqIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQgKi8KLSAgaWYgKHRhZ2xpc3QgIT0gTlVMTCB8fCAhbXAzcGFyc2UtPnNlbnRfY29kZWNfdGFnKSB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIGlmICh0YWdsaXN0ID09IE5VTEwpCi0gICAgICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICAgIC8qIGNvZGVjIHRhZyAqLwotICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGNhcHMgPT0gTlVMTCkpIHsKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0KLSAgICAgIGlmIChHU1RfUEFEX0lTX0ZMVVNISU5HIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSkpKSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJTcmMgcGFkIGlzIGZsdXNoaW5nIik7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJTcmMgcGFkIGlzIG5vdCBuZWdvdGlhdGVkISIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9wYl91dGlsc19hZGRfY29kZWNfZGVzY3JpcHRpb25fdG9fdGFnX2xpc3QgKHRhZ2xpc3QsCi0gICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChtcDNwYXJzZS0+aGRyX2JpdHJhdGUgPiAwICYmIG1wM3BhcnNlLT54aW5nX2JpdHJhdGUgPT0gMCAmJgotICAgICAgICBtcDNwYXJzZS0+dmJyaV9iaXRyYXRlID09IDApIHsKLSAgICAgIC8qIFdlIGRvbid0IGhhdmUgYSBWQlIgYml0cmF0ZSwgc28gcG9zdCB0aGUgYXZhaWxhYmxlIGJpdHJhdGUgYXMKLSAgICAgICAqIG5vbWluYWwgYW5kIGxldCBiYXNlcGFyc2UgY2FsY3VsYXRlIHRoZSByZWFsIGJpdHJhdGUgKi8KLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICBHU1RfVEFHX05PTUlOQUxfQklUUkFURSwgbXAzcGFyc2UtPmhkcl9iaXRyYXRlLCBOVUxMKTsKLSAgICB9Ci0KLSAgICAvKiBhbHNvIHNpZ25hbHMgdGhlIGVuZCBvZiBmaXJzdC1mcmFtZSBwcm9jZXNzaW5nICovCi0gICAgbXAzcGFyc2UtPnNlbnRfY29kZWNfdGFnID0gVFJVRTsKLSAgfQotCi0gIC8qIGlmIHRoZSB0YWdsaXN0IGV4aXN0cywgd2UgbmVlZCB0byB1cGRhdGUgaXQgc28gaXQgZ2V0cyBzZW50IG91dCAqLwotICBpZiAodGFnbGlzdCkgewotICAgIGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MgKHBhcnNlLCB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0gIH0KLQotICAvKiB1c3VhbCBjbGlwcGluZyBhcHBsaWVzICovCi0gIGZyYW1lLT5mbGFncyB8PSBHU1RfQkFTRV9QQVJTRV9GUkFNRV9GTEFHX0NMSVA7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX2ZpZWxkcyAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJwYXJzZWQiKTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfbXBlZ19hdWRpb19wYXJzZV9nZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMsICp0ZW1wbDsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSkpOwotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqZmNvcHkgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIC8qIFJlbW92ZSB0aGUgZmllbGRzIHdlIGNvbnZlcnQgKi8KLSAgICByZW1vdmVfZmllbGRzIChmY29weSk7Ci0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBmY29weSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZjb3B5KTsKLSAgfSBlbHNlCi0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBOVUxMKTsKLQotICBpZiAocGVlcmNhcHMpIHsKLSAgICAvKiBSZW1vdmUgdGhlIHBhcnNlZCBmaWVsZCAqLwotICAgIHBlZXJjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAocGVlcmNhcHMpOwotICAgIHJlbW92ZV9maWVsZHMgKHBlZXJjYXBzKTsKLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotICB9IGVsc2UgewotICAgIHJlcyA9IHRlbXBsOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLSAgICByZXMgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oIGIvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RtcGVnYXVkaW9wYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTU3NmJlLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0bXBlZ2F1ZGlvcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKiBHU3RyZWFtZXIgTVBFRyBhdWRpbyBwYXJzZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3IHVzZXJzIHNmIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX01QRUdfQVVESU9fUEFSU0VfSF9fCi0jZGVmaW5lIF9fR1NUX01QRUdfQVVESU9fUEFSU0VfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXBhcnNlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9NUEVHX0FVRElPX1BBUlNFIFwKLSAgKGdzdF9tcGVnX2F1ZGlvX3BhcnNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9NUEVHX0FVRElPX1BBUlNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdTVF9UWVBFX01QRUdfQVVESU9fUEFSU0UsIEdzdE1wZWdBdWRpb1BhcnNlKSkKLSNkZWZpbmUgR1NUX01QRUdfQVVESU9fUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX01QRUdfQVVESU9fUEFSU0UsIEdzdE1wZWdBdWRpb1BhcnNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTVBFR19BVURJT19QQVJTRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHU1RfVFlQRV9NUEVHX0FVRElPX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0lTX01QRUdfQVVESU9fUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIEdTVF9UWVBFX01QRUdfQVVESU9fUEFSU0UpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ0F1ZGlvUGFyc2UgR3N0TXBlZ0F1ZGlvUGFyc2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ0F1ZGlvUGFyc2VDbGFzcyBHc3RNcGVnQXVkaW9QYXJzZUNsYXNzOwotCi0vKioKLSAqIEdzdE1wZWdBdWRpb1BhcnNlOgotICoKLSAqIFRoZSBvcGFxdWUgR3N0TXBlZ0F1ZGlvUGFyc2Ugb2JqZWN0Ci0gKi8KLXN0cnVjdCBfR3N0TXBlZ0F1ZGlvUGFyc2UgewotICBHc3RCYXNlUGFyc2UgYmFzZXBhcnNlOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBnaW50ICAgICAgICAgcmF0ZTsKLSAgZ2ludCAgICAgICAgIGNoYW5uZWxzOwotICBnaW50ICAgICAgICAgbGF5ZXI7Ci0gIGdpbnQgICAgICAgICB2ZXJzaW9uOwotCi0gIEdzdENsb2NrVGltZSBtYXhfYml0cmVzZXJ2b2lyOwotICAvKiBzYW1wbGVzIHBlciBmcmFtZSAqLwotICBnaW50ICAgICAgICBzcGY7Ci0KLSAgZ2ludCAgICAgICAgIGZyZWVyYXRlOwotCi0gIGdib29sZWFuICAgICBzZW50X2NvZGVjX3RhZzsKLSAgZ3VpbnQgICAgICAgIGxhc3RfcG9zdGVkX2JpdHJhdGU7Ci0gIGdpbnQgICAgICAgICBsYXN0X3Bvc3RlZF9jcmMsIGxhc3RfY3JjOwotICBndWludCAgICAgICAgbGFzdF9wb3N0ZWRfY2hhbm5lbF9tb2RlLCBsYXN0X21vZGU7Ci0KLSAgLyogQml0cmF0ZSBmcm9tIG5vbi12YnIgaGVhZGVycyAqLwotICBndWludDMyICAgICAgaGRyX2JpdHJhdGU7Ci0KLSAgLyogWGluZyBpbmZvICovCi0gIGd1aW50MzIgICAgICB4aW5nX2ZsYWdzOwotICBndWludDMyICAgICAgeGluZ19mcmFtZXM7Ci0gIEdzdENsb2NrVGltZSB4aW5nX3RvdGFsX3RpbWU7Ci0gIGd1aW50MzIgICAgICB4aW5nX2J5dGVzOwotICAvKiBwZXJjZW50IC0+IGZpbGVwb3MgbWFwcGluZyAqLwotICBndWNoYXIgICAgICAgeGluZ19zZWVrX3RhYmxlWzEwMF07Ci0gIC8qIGZpbGVwb3MgLT4gcGVyY2VudCBtYXBwaW5nICovCi0gIGd1aW50MTYgICAgICB4aW5nX3NlZWtfdGFibGVfaW52ZXJzZVsyNTZdOwotICBndWludDMyICAgICAgeGluZ192YnJfc2NhbGU7Ci0gIGd1aW50ICAgICAgICB4aW5nX2JpdHJhdGU7Ci0KLSAgLyogVkJSSSBpbmZvICovCi0gIGd1aW50MzIgICAgICB2YnJpX2ZyYW1lczsKLSAgR3N0Q2xvY2tUaW1lIHZicmlfdG90YWxfdGltZTsKLSAgZ3VpbnQzMiAgICAgIHZicmlfYnl0ZXM7Ci0gIGd1aW50ICAgICAgICB2YnJpX2JpdHJhdGU7Ci0gIGd1aW50ICAgICAgICB2YnJpX3NlZWtfcG9pbnRzOwotICBndWludDMyICAgICAqdmJyaV9zZWVrX3RhYmxlOwotICBnYm9vbGVhbiAgICAgdmJyaV92YWxpZDsKLQotICAvKiBMQU1FIGluZm8gKi8KLSAgZ3VpbnQzMiAgICAgIGVuY29kZXJfZGVsYXk7Ci0gIGd1aW50MzIgICAgICBlbmNvZGVyX3BhZGRpbmc7Ci19OwotCi0vKioKLSAqIEdzdE1wZWdBdWRpb1BhcnNlQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBFbGVtZW50IHBhcmVudCBjbGFzcy4KLSAqCi0gKiBUaGUgb3BhcXVlIEdzdE1wZWdBdWRpb1BhcnNlQ2xhc3MgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0TXBlZ0F1ZGlvUGFyc2VDbGFzcyB7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzIGJhc2VwYXJzZV9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9tcGVnX2F1ZGlvX3BhcnNlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01QRUdfQVVESU9fUEFSU0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmMgYi9nc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzM5ZDkuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLS8qIEdTdHJlYW1lciBTQkMgYXVkaW8gcGFyc2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29sbGFib3JhIEx0ZC4gPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtc2JjcGFyc2UKLSAqIEBzZWVfYWxzbzogc2JjZGVjLCBzYmNlbmMKLSAqCi0gKiBUaGUgc2JjcGFyc2UgZWxlbWVudCB3aWxsIHBhcnNlIGEgYmx1ZXRvb3RoIFNCQyBhdWRpbyBzdHJlYW0gaW50bwotICogZnJhbWVzIGFuZCB0aW1lc3RhbXAgdGhlbSBwcm9wZXJseS4KLSAqCi0gKiBTaW5jZTogMS4yLjAKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RzYmNwYXJzZS5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9iYXNlLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi0jZGVmaW5lIFNCQ19TWU5DQllURSAweDlDCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHNiY3BhcnNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHNiY3BhcnNlX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXNiYywgcGFyc2VkID0gKGJvb2xlYW4pIHRydWUsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0sICIKLSAgICAgICAgInJhdGUgPSAoaW50KSB7IDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXNiYyIpCi0gICAgKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9zYmNfcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2JjX3BhcnNlX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9zYmNfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3NiY19wYXJzZV9wcmVfcHVzaF9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3NiY19wYXJzZV9nZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RDYXBzICogZmlsdGVyKTsKLQotc3RhdGljIGd1aW50OCBnc3Rfc2JjX2NhbGN1bGF0ZV9jcmM4IChjb25zdCBndWludDggKiBkYXRhLCBnaW50IGJpdHNfY3JjKTsKLXN0YXRpYyBnc2l6ZSBnc3Rfc2JjX2NhbGNfZnJhbWVsZW4gKGd1aW50IHN1YmJhbmRzLCBHc3RTYmNDaGFubmVsTW9kZSBjaF9tb2RlLAotICAgIGd1aW50IGJsb2NrcywgZ3VpbnQgYml0cG9vbCk7Ci1zdGF0aWMgZ3NpemUgZ3N0X3NiY19wYXJzZV9oZWFkZXIgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50ICogcmF0ZSwKLSAgICBndWludCAqIG5fYmxvY2tzLCBHc3RTYmNDaGFubmVsTW9kZSAqIGNoX21vZGUsCi0gICAgR3N0U2JjQWxsb2NhdGlvbk1ldGhvZCAqIGFsbG9jX21ldGhvZCwgZ3VpbnQgKiBuX3N1YmJhbmRzLCBndWludCAqIGJpdHBvb2wpOwotCi0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3Rfc2JjX3BhcnNlX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0U2JjUGFyc2UsIGdzdF9zYmNfcGFyc2UsIEdTVF9UWVBFX0JBU0VfUEFSU0UpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3NiY19wYXJzZV9jbGFzc19pbml0IChHc3RTYmNQYXJzZUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICpiYXNlcGFyc2VfY2xhc3MgPSBHU1RfQkFTRV9QQVJTRV9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChzYmNwYXJzZV9kZWJ1ZywgInNiY3BhcnNlIiwgMCwgIlNCQyBhdWRpbyBwYXJzZXIiKTsKLQotICBiYXNlcGFyc2VfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zYmNfcGFyc2Vfc3RhcnQpOwotICBiYXNlcGFyc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NiY19wYXJzZV9zdG9wKTsKLSAgYmFzZXBhcnNlX2NsYXNzLT5wcmVfcHVzaF9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NiY19wYXJzZV9wcmVfcHVzaF9mcmFtZSk7Ci0gIGJhc2VwYXJzZV9jbGFzcy0+aGFuZGxlX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2JjX3BhcnNlX2hhbmRsZV9mcmFtZSk7Ci0gIGJhc2VwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NiY19wYXJzZV9nZXRfc2lua19jYXBzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJTQkMgYXVkaW8gcGFyc2VyIiwKLSAgICAgICJDb2RlYy9QYXJzZXIvQXVkaW8iLCAiUGFyc2VzIGFuIFNCQyBibHVldG9vdGggYXVkaW8gc3RyZWFtIiwKLSAgICAgICJUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zYmNfcGFyc2VfcmVzZXQgKEdzdFNiY1BhcnNlICogc2JjcGFyc2UpCi17Ci0gIHNiY3BhcnNlLT5hbGxvY19tZXRob2QgPSBHU1RfU0JDX0FMTE9DQVRJT05fTUVUSE9EX0lOVkFMSUQ7Ci0gIHNiY3BhcnNlLT5jaF9tb2RlID0gR1NUX1NCQ19DSEFOTkVMX01PREVfSU5WQUxJRDsKLSAgc2JjcGFyc2UtPnJhdGUgPSAtMTsKLSAgc2JjcGFyc2UtPm5fYmxvY2tzID0gLTE7Ci0gIHNiY3BhcnNlLT5uX3N1YmJhbmRzID0gLTE7Ci0gIHNiY3BhcnNlLT5iaXRwb29sID0gLTE7Ci0gIHNiY3BhcnNlLT5zZW50X2NvZGVjX3RhZyA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NiY19wYXJzZV9pbml0IChHc3RTYmNQYXJzZSAqIHNiY3BhcnNlKQotewotICBnc3Rfc2JjX3BhcnNlX3Jlc2V0IChzYmNwYXJzZSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChzYmNwYXJzZSkpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChzYmNwYXJzZSkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zYmNfcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKHBhcnNlLAotICAgICAgZ3N0X3NiY19jYWxjX2ZyYW1lbGVuICg0LCBHU1RfU0JDX0NIQU5ORUxfTU9ERV9NT05PLCA0LCAyKSk7Ci0KLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbyAocGFyc2UsIEZBTFNFKTsKLQotICBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgKHBhcnNlLCBUUlVFKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2JjX3BhcnNlX3N0b3AgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBnc3Rfc2JjX3BhcnNlX3Jlc2V0IChHU1RfU0JDX1BBUlNFIChwYXJzZSkpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdzdF9zYmNfY2hhbm5lbF9tb2RlX2dldF9uYW1lIChHc3RTYmNDaGFubmVsTW9kZSBjaF9tb2RlKQotewotICBzd2l0Y2ggKGNoX21vZGUpIHsKLSAgICBjYXNlIEdTVF9TQkNfQ0hBTk5FTF9NT0RFX01PTk86Ci0gICAgICByZXR1cm4gIm1vbm8iOwotICAgIGNhc2UgR1NUX1NCQ19DSEFOTkVMX01PREVfRFVBTDoKLSAgICAgIHJldHVybiAiZHVhbCI7Ci0gICAgY2FzZSBHU1RfU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU86Ci0gICAgICByZXR1cm4gInN0ZXJlbyI7Ci0gICAgY2FzZSBHU1RfU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU86Ci0gICAgICByZXR1cm4gImpvaW50IjsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuICJpbnZhbGlkIjsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdzdF9zYmNfYWxsb2NhdGlvbl9tZXRob2RfZ2V0X25hbWUgKEdzdFNiY0FsbG9jYXRpb25NZXRob2QgYWxsb2NfbWV0aG9kKQotewotICBzd2l0Y2ggKGFsbG9jX21ldGhvZCkgewotICAgIGNhc2UgR1NUX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9TTlI6Ci0gICAgICByZXR1cm4gInNuciI7Ci0gICAgY2FzZSBHU1RfU0JDX0FMTE9DQVRJT05fTUVUSE9EX0xPVURORVNTOgotICAgICAgcmV0dXJuICJsb3VkbmVzcyI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiAiaW52YWxpZCI7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc2JjX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUsCi0gICAgZ2ludCAqIHNraXBzaXplKQotewotICBHc3RTYmNQYXJzZSAqc2JjcGFyc2UgPSBHU1RfU0JDX1BBUlNFIChwYXJzZSk7Ci0gIEdzdFNiY0FsbG9jYXRpb25NZXRob2QgYWxsb2NfbWV0aG9kID0gR1NUX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9JTlZBTElEOwotICBHc3RTYmNDaGFubmVsTW9kZSBjaF9tb2RlID0gR1NUX1NCQ19DSEFOTkVMX01PREVfSU5WQUxJRDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50IHJhdGUgPSAwLCBuX2Jsb2NrcyA9IDAsIG5fc3ViYmFuZHMgPSAwLCBiaXRwb29sID0gMDsKLSAgZ3NpemUgZnJhbWVfbGVuLCBuZXh0X2xlbjsKLSAgZ2ludCBpLCBtYXhfZnJhbWVzOwotCi0gIGdzdF9idWZmZXJfbWFwIChmcmFtZS0+YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIGdfYXNzZXJ0IChtYXAuc2l6ZSA+PSA2KTsKLQotICBmcmFtZV9sZW4gPSBnc3Rfc2JjX3BhcnNlX2hlYWRlciAobWFwLmRhdGEsICZyYXRlLCAmbl9ibG9ja3MsICZjaF9tb2RlLAotICAgICAgJmFsbG9jX21ldGhvZCwgJm5fc3ViYmFuZHMsICZiaXRwb29sKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmcmFtZV9sZW46ICV1IiwgKGd1aW50KSBmcmFtZV9sZW4pOwotCi0gIGlmIChmcmFtZV9sZW4gPT0gMCkKLSAgICBnb3RvIHJlc3luYzsKLQotICBpZiAoc2JjcGFyc2UtPmFsbG9jX21ldGhvZCAhPSBhbGxvY19tZXRob2QKLSAgICAgIHx8IHNiY3BhcnNlLT5jaF9tb2RlICE9IGNoX21vZGUKLSAgICAgIHx8IHNiY3BhcnNlLT5yYXRlICE9IHJhdGUKLSAgICAgIHx8IHNiY3BhcnNlLT5uX2Jsb2NrcyAhPSBuX2Jsb2NrcwotICAgICAgfHwgc2JjcGFyc2UtPm5fc3ViYmFuZHMgIT0gbl9zdWJiYW5kcyB8fCBzYmNwYXJzZS0+Yml0cG9vbCAhPSBiaXRwb29sKSB7Ci0gICAgZ3VpbnQgYXZnX2JpdHJhdGU7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIC8qIEZJWE1FOiBkbyBhbGwgb2YgdGhlc2UgbmVlZCB0byBiZSBpbiB0aGUgY2Fwcz8gKi8KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtc2JjIiwgInJhdGUiLCBHX1RZUEVfSU5ULCByYXRlLAotICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAoY2hfbW9kZSA9PSBHU1RfU0JDX0NIQU5ORUxfTU9ERV9NT05PKSA/IDEgOiAyLAotICAgICAgICAiY2hhbm5lbC1tb2RlIiwgR19UWVBFX1NUUklORywgZ3N0X3NiY19jaGFubmVsX21vZGVfZ2V0X25hbWUgKGNoX21vZGUpLAotICAgICAgICAiYmxvY2tzIiwgR19UWVBFX0lOVCwgbl9ibG9ja3MsICJzdWJiYW5kcyIsIEdfVFlQRV9JTlQsIG5fc3ViYmFuZHMsCi0gICAgICAgICJhbGxvY2F0aW9uLW1ldGhvZCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgIGdzdF9zYmNfYWxsb2NhdGlvbl9tZXRob2RfZ2V0X25hbWUgKGFsbG9jX21ldGhvZCksCi0gICAgICAgICJiaXRwb29sIiwgR19UWVBFX0lOVCwgYml0cG9vbCwgInBhcnNlZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAoc2JjcGFyc2UsICJjYXBzIGNoYW5nZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChzYmNwYXJzZSksCi0gICAgICAgIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotCi0gICAgYXZnX2JpdHJhdGUgPSAoOCAqIGZyYW1lX2xlbiAqIHJhdGUpIC8gKG5fc3ViYmFuZHMgKiBuX2Jsb2Nrcyk7Ci0gICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2F2ZXJhZ2VfYml0cmF0ZSAocGFyc2UsIGF2Z19iaXRyYXRlKTsKLQotICAgIGdzdF9iYXNlX3BhcnNlX3NldF9mcmFtZV9yYXRlIChwYXJzZSwgcmF0ZSwgbl9zdWJiYW5kcyAqIG5fYmxvY2tzLCAwLCAwKTsKLQotICAgIHNiY3BhcnNlLT5hbGxvY19tZXRob2QgPSBhbGxvY19tZXRob2Q7Ci0gICAgc2JjcGFyc2UtPmNoX21vZGUgPSBjaF9tb2RlOwotICAgIHNiY3BhcnNlLT5yYXRlID0gcmF0ZTsKLSAgICBzYmNwYXJzZS0+bl9ibG9ja3MgPSBuX2Jsb2NrczsKLSAgICBzYmNwYXJzZS0+bl9zdWJiYW5kcyA9IG5fc3ViYmFuZHM7Ci0gICAgc2JjcGFyc2UtPmJpdHBvb2wgPSBiaXRwb29sOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgaWYgKGZyYW1lX2xlbiA+IG1hcC5zaXplKQotICAgIGdvdG8gbmVlZF9tb3JlX2RhdGE7Ci0KLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGZyYW1lLT5idWZmZXIpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChmcmFtZS0+YnVmZmVyKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0KLSAgLyogY29tcGxldGVseSBhcmJpdHJhcnkgbGltaXQsIHdlIG9ubHkgcHJvY2VzcyBkYXRhIHdlIGFscmVhZHkgaGF2ZSwKLSAgICogc28gd2UgYXJlbid0IGludHJvZHVjaW5nIGxhdGVuY3kgaGVyZSAqLwotICBtYXhfZnJhbWVzID0gTUlOIChtYXAuc2l6ZSAvIGZyYW1lX2xlbiwgbl9ibG9ja3MgKiBuX3N1YmJhbmRzICogNSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChzYmNwYXJzZSwgInBhcnNpbmcgdXAgdG8gJWQgZnJhbWVzIiwgbWF4X2ZyYW1lcyk7Ci0KLSAgZm9yIChpID0gMTsgaSA8IG1heF9mcmFtZXM7ICsraSkgewotICAgIG5leHRfbGVuID0gZ3N0X3NiY19wYXJzZV9oZWFkZXIgKG1hcC5kYXRhICsgKGkgKiBmcmFtZV9sZW4pLCAmcmF0ZSwKLSAgICAgICAgJm5fYmxvY2tzLCAmY2hfbW9kZSwgJmFsbG9jX21ldGhvZCwgJm5fc3ViYmFuZHMsICZiaXRwb29sKTsKLQotICAgIGlmIChuZXh0X2xlbiAhPSBmcmFtZV9sZW4gfHwgc2JjcGFyc2UtPmFsbG9jX21ldGhvZCAhPSBhbGxvY19tZXRob2QgfHwKLSAgICAgICAgc2JjcGFyc2UtPmNoX21vZGUgIT0gY2hfbW9kZSB8fCBzYmNwYXJzZS0+cmF0ZSAhPSByYXRlIHx8Ci0gICAgICAgIHNiY3BhcnNlLT5uX2Jsb2NrcyAhPSBuX2Jsb2NrcyB8fCBzYmNwYXJzZS0+bl9zdWJiYW5kcyAhPSBuX3N1YmJhbmRzIHx8Ci0gICAgICAgIHNiY3BhcnNlLT5iaXRwb29sICE9IGJpdHBvb2wpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBHU1RfTE9HX09CSkVDVCAoc2JjcGFyc2UsICJwYWNraW5nICVkIFNCQyBmcmFtZXMgaW50byBuZXh0IG91dHB1dCBidWZmZXIiLCBpKTsKLQotICAvKiBOb3RlOiBsb2NhbCBuX3N1YmJhbmRzIGFuZCBuX2Jsb2NrcyB2YXJpYWJsZXMgbWlnaHQgYmUgdGFpbnRlZCBpZiB3ZQotICAgKiBiYWlsZWQgb3V0IG9mIHRoZSBsb29wIGFib3ZlIGJlY2F1c2Ugb2YgYSBoZWFkZXIgY29uZmlndXJhdGlvbiBtaXNtYXRjaCAqLwotICBnc3RfYmFzZV9wYXJzZV9zZXRfZnJhbWVfcmF0ZSAocGFyc2UsIHJhdGUsCi0gICAgICBzYmNwYXJzZS0+bl9zdWJiYW5kcyAqIHNiY3BhcnNlLT5uX2Jsb2NrcyAqIGksIDAsIDApOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGZyYW1lLT5idWZmZXIsICZtYXApOwotICByZXR1cm4gZ3N0X2Jhc2VfcGFyc2VfZmluaXNoX2ZyYW1lIChwYXJzZSwgZnJhbWUsIGkgKiBmcmFtZV9sZW4pOwotCi1yZXN5bmM6Ci0gIHsKLSAgICBjb25zdCBndWludDggKnBvc3NpYmxlX3N5bmM7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIHN5bmMsIHJlc3luY2luZyIpOwotCi0gICAgcG9zc2libGVfc3luYyA9IG1lbWNociAobWFwLmRhdGEsIFNCQ19TWU5DQllURSwgbWFwLnNpemUpOwotCi0gICAgaWYgKHBvc3NpYmxlX3N5bmMgIT0gTlVMTCkKLSAgICAgICpza2lwc2l6ZSA9IChnaW50KSAocG9zc2libGVfc3luYyAtIG1hcC5kYXRhKTsKLSAgICBlbHNlCi0gICAgICAqc2tpcHNpemUgPSBtYXAuc2l6ZTsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGZyYW1lLT5idWZmZXIsICZtYXApOwotCi0gICAgLyogd2UgY291bGQgb3B0aW1pc2UgdGhpbmdzIGhlcmUgYnkgbG9vcGluZyBvdmVyIHRoZSBkYXRhIGFuZCBjaGVja2luZwotICAgICAqIHdoZXRoZXIgdGhlIHN5bmMgaXMgZ29vZCBvciBub3QgaW5zdGVhZCBvZiBoYW5kaW5nIGNvbnRyb2wgYmFjayB0bwotICAgICAqIHRoZSBiYXNlIGNsYXNzIGp1c3QgdG8gYmUgY2FsbGVkIGFnYWluICovCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1uZWVkX21vcmVfZGF0YToKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgIm5lZWQgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgYnV0IG9ubHkgaGF2ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgZnJhbWVfbGVuLCBtYXAuc2l6ZSk7Ci0gICAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChwYXJzZSwgZnJhbWVfbGVuKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChmcmFtZS0+YnVmZmVyLCAmbWFwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9maWVsZHMgKEdzdENhcHMgKiBjYXBzKQotewotICBndWludCBpLCBuOwotCi0gIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAicGFyc2VkIik7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3NiY19wYXJzZV9nZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMsICp0ZW1wbDsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSkpOwotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqZmNvcHkgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIC8qIFJlbW92ZSB0aGUgZmllbGRzIHdlIGNvbnZlcnQgKi8KLSAgICByZW1vdmVfZmllbGRzIChmY29weSk7Ci0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBmY29weSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZjb3B5KTsKLSAgfSBlbHNlCi0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBOVUxMKTsKLQotICBpZiAocGVlcmNhcHMpIHsKLSAgICAvKiBSZW1vdmUgdGhlIHBhcnNlZCBmaWVsZCAqLwotICAgIHBlZXJjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAocGVlcmNhcHMpOwotICAgIHJlbW92ZV9maWVsZHMgKHBlZXJjYXBzKTsKLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotICB9IGVsc2UgewotICAgIHJlcyA9IHRlbXBsOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLSAgICByZXMgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGNyY190YWJsZVsyNTZdID0gewotICAweDAwLCAweDFELCAweDNBLCAweDI3LCAweDc0LCAweDY5LCAweDRFLCAweDUzLAotICAweEU4LCAweEY1LCAweEQyLCAweENGLCAweDlDLCAweDgxLCAweEE2LCAweEJCLAotICAweENELCAweEQwLCAweEY3LCAweEVBLCAweEI5LCAweEE0LCAweDgzLCAweDlFLAotICAweDI1LCAweDM4LCAweDFGLCAweDAyLCAweDUxLCAweDRDLCAweDZCLCAweDc2LAotICAweDg3LCAweDlBLCAweEJELCAweEEwLCAweEYzLCAweEVFLCAweEM5LCAweEQ0LAotICAweDZGLCAweDcyLCAweDU1LCAweDQ4LCAweDFCLCAweDA2LCAweDIxLCAweDNDLAotICAweDRBLCAweDU3LCAweDcwLCAweDZELCAweDNFLCAweDIzLCAweDA0LCAweDE5LAotICAweEEyLCAweEJGLCAweDk4LCAweDg1LCAweEQ2LCAweENCLCAweEVDLCAweEYxLAotICAweDEzLCAweDBFLCAweDI5LCAweDM0LCAweDY3LCAweDdBLCAweDVELCAweDQwLAotICAweEZCLCAweEU2LCAweEMxLCAweERDLCAweDhGLCAweDkyLCAweEI1LCAweEE4LAotICAweERFLCAweEMzLCAweEU0LCAweEY5LCAweEFBLCAweEI3LCAweDkwLCAweDhELAotICAweDM2LCAweDJCLCAweDBDLCAweDExLCAweDQyLCAweDVGLCAweDc4LCAweDY1LAotICAweDk0LCAweDg5LCAweEFFLCAweEIzLCAweEUwLCAweEZELCAweERBLCAweEM3LAotICAweDdDLCAweDYxLCAweDQ2LCAweDVCLCAweDA4LCAweDE1LCAweDMyLCAweDJGLAotICAweDU5LCAweDQ0LCAweDYzLCAweDdFLCAweDJELCAweDMwLCAweDE3LCAweDBBLAotICAweEIxLCAweEFDLCAweDhCLCAweDk2LCAweEM1LCAweEQ4LCAweEZGLCAweEUyLAotICAweDI2LCAweDNCLCAweDFDLCAweDAxLCAweDUyLCAweDRGLCAweDY4LCAweDc1LAotICAweENFLCAweEQzLCAweEY0LCAweEU5LCAweEJBLCAweEE3LCAweDgwLCAweDlELAotICAweEVCLCAweEY2LCAweEQxLCAweENDLCAweDlGLCAweDgyLCAweEE1LCAweEI4LAotICAweDAzLCAweDFFLCAweDM5LCAweDI0LCAweDc3LCAweDZBLCAweDRELCAweDUwLAotICAweEExLCAweEJDLCAweDlCLCAweDg2LCAweEQ1LCAweEM4LCAweEVGLCAweEYyLAotICAweDQ5LCAweDU0LCAweDczLCAweDZFLCAweDNELCAweDIwLCAweDA3LCAweDFBLAotICAweDZDLCAweDcxLCAweDU2LCAweDRCLCAweDE4LCAweDA1LCAweDIyLCAweDNGLAotICAweDg0LCAweDk5LCAweEJFLCAweEEzLCAweEYwLCAweEVELCAweENBLCAweEQ3LAotICAweDM1LCAweDI4LCAweDBGLCAweDEyLCAweDQxLCAweDVDLCAweDdCLCAweDY2LAotICAweERELCAweEMwLCAweEU3LCAweEZBLCAweEE5LCAweEI0LCAweDkzLCAweDhFLAotICAweEY4LCAweEU1LCAweEMyLCAweERGLCAweDhDLCAweDkxLCAweEI2LCAweEFCLAotICAweDEwLCAweDBELCAweDJBLCAweDM3LCAweDY0LCAweDc5LCAweDVFLCAweDQzLAotICAweEIyLCAweEFGLCAweDg4LCAweDk1LCAweEM2LCAweERCLCAweEZDLCAweEUxLAotICAweDVBLCAweDQ3LCAweDYwLCAweDdELCAweDJFLCAweDMzLCAweDE0LCAweDA5LAotICAweDdGLCAweDYyLCAweDQ1LCAweDU4LCAweDBCLCAweDE2LCAweDMxLCAweDJDLAotICAweDk3LCAweDhBLCAweEFELCAweEIwLCAweEUzLCAweEZFLCAweEQ5LCAweEM0Ci19OwotCi1zdGF0aWMgZ3VpbnQ4Ci1nc3Rfc2JjX2NhbGN1bGF0ZV9jcmM4IChjb25zdCBndWludDggKiBkYXRhLCBnaW50IGNyY19iaXRzKQotewotICBndWludDggY3JjID0gMHgwZjsKLSAgZ3VpbnQ4IG9jdGV0OwotCi0gIHdoaWxlIChjcmNfYml0cyA+PSA4KSB7Ci0gICAgY3JjID0gY3JjX3RhYmxlW2NyYyBeICpkYXRhXTsKLSAgICBjcmNfYml0cyAtPSA4OwotICAgICsrZGF0YTsKLSAgfQotCi0gIG9jdGV0ID0gKmRhdGE7Ci0gIHdoaWxlIChjcmNfYml0cyA+IDApIHsKLSAgICBnY2hhciBiaXQgPSAoKG9jdGV0IF4gY3JjKSAmIDB4ODApID4+IDc7Ci0KLSAgICBjcmMgPSAoKGNyYyAmIDB4N2YpIDw8IDEpIF4gKGJpdCA/IDB4MWQgOiAwKTsKLQotICAgIG9jdGV0ID0gb2N0ZXQgPDwgMTsKLSAgICAtLWNyY19iaXRzOwotICB9Ci0KLSAgcmV0dXJuIGNyYzsKLX0KLQotc3RhdGljIGdzaXplCi1nc3Rfc2JjX2NhbGNfZnJhbWVsZW4gKGd1aW50IHN1YmJhbmRzLCBHc3RTYmNDaGFubmVsTW9kZSBjaF9tb2RlLAotICAgIGd1aW50IGJsb2NrcywgZ3VpbnQgYml0cG9vbCkKLXsKLSAgc3dpdGNoIChjaF9tb2RlKSB7Ci0gICAgY2FzZSBHU1RfU0JDX0NIQU5ORUxfTU9ERV9NT05POgotICAgICAgcmV0dXJuIDQgKyAoc3ViYmFuZHMgKiAxKSAvIDIgKyAoKGJsb2NrcyAqIDEgKiBiaXRwb29sKSArIDcpIC8gODsKLSAgICBjYXNlIEdTVF9TQkNfQ0hBTk5FTF9NT0RFX0RVQUw6Ci0gICAgICByZXR1cm4gNCArIChzdWJiYW5kcyAqIDIpIC8gMiArICgoYmxvY2tzICogMiAqIGJpdHBvb2wpICsgNykgLyA4OwotICAgIGNhc2UgR1NUX1NCQ19DSEFOTkVMX01PREVfU1RFUkVPOgotICAgICAgcmV0dXJuIDQgKyAoc3ViYmFuZHMgKiAyKSAvIDIgKyAoKGJsb2NrcyAqIGJpdHBvb2wpICsgNykgLyA4OwotICAgIGNhc2UgR1NUX1NCQ19DSEFOTkVMX01PREVfSk9JTlRfU1RFUkVPOgotICAgICAgcmV0dXJuIDQgKyAoc3ViYmFuZHMgKiAyKSAvIDIgKyAoKHN1YmJhbmRzICsgYmxvY2tzICogYml0cG9vbCkgKyA3KSAvIDg7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKDApOwotfQotCi1zdGF0aWMgZ3NpemUKLWdzdF9zYmNfcGFyc2VfaGVhZGVyIChjb25zdCBndWludDggKiBkYXRhLCBndWludCAqIHJhdGUsIGd1aW50ICogbl9ibG9ja3MsCi0gICAgR3N0U2JjQ2hhbm5lbE1vZGUgKiBjaF9tb2RlLCBHc3RTYmNBbGxvY2F0aW9uTWV0aG9kICogYWxsb2NfbWV0aG9kLAotICAgIGd1aW50ICogbl9zdWJiYW5kcywgZ3VpbnQgKiBiaXRwb29sKQotewotICBzdGF0aWMgY29uc3QgZ3VpbnQxNiBzYmNfcmF0ZXNbNF0gPSB7IDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH07Ci0gIHN0YXRpYyBjb25zdCBndWludDggc2JjX2Jsb2Nrc1s0XSA9IHsgNCwgOCwgMTIsIDE2IH07Ci0gIGd1aW50OCBjcmNfZGF0YVsyICsgMSArIDhdLCBjcmNfYml0cywgaTsKLQotICBHU1RfTUVNRFVNUCAoImhlYWRlciIsIGRhdGEsIDgpOwotCi0gIGlmIChkYXRhWzBdICE9IFNCQ19TWU5DQllURSkKLSAgICByZXR1cm4gMDsKLQotICAqcmF0ZSA9IHNiY19yYXRlc1soZGF0YVsxXSA+PiA2KSAmIDB4MDNdOwotICAqbl9ibG9ja3MgPSBzYmNfYmxvY2tzWyhkYXRhWzFdID4+IDQpICYgMHgwM107Ci0gICpjaF9tb2RlID0gKEdzdFNiY0NoYW5uZWxNb2RlKSAoKGRhdGFbMV0gPj4gMikgJiAweDAzKTsKLSAgKmFsbG9jX21ldGhvZCA9IChkYXRhWzFdID4+IDEpICYgMHgwMTsKLSAgKm5fc3ViYmFuZHMgPSAoZGF0YVsxXSAmIDB4MDEpID8gOCA6IDQ7Ci0gICpiaXRwb29sID0gZGF0YVsyXTsKLQotICBHU1RfVFJBQ0UgKCJyYXRlPSV1LCBuX2Jsb2Nrcz0ldSwgY2hfbW9kZT0ldSwgYWxsb2NfbWV0aG9kPSV1LCAiCi0gICAgICAibl9zdWJiYW5kcz0ldSwgYml0cG9vbD0ldSIsICpyYXRlLCAqbl9ibG9ja3MsICpjaF9tb2RlLCAqYWxsb2NfbWV0aG9kLAotICAgICAgKm5fc3ViYmFuZHMsICpiaXRwb29sKTsKLQotICBpZiAoKmJpdHBvb2wgPCAyKQotICAgIHJldHVybiAwOwotCi0gIC8qIGNoZWNrIENSQyAqLwotICBjcmNfZGF0YVswXSA9IGRhdGFbMV07Ci0gIGNyY19kYXRhWzFdID0gZGF0YVsyXTsKLSAgY3JjX2JpdHMgPSAxNjsKLQotICAvKiBqb2ludCBmbGFncyBhbmQgUkZBICovCi0gIGlmICgqY2hfbW9kZSA9PSBHU1RfU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU8pCi0gICAgY3JjX2JpdHMgKz0gKm5fc3ViYmFuZHM7Ci0KLSAgLyogc2NhbGUgZmFjdG9ycyAqLwotICBpZiAoKmNoX21vZGUgPT0gR1NUX1NCQ19DSEFOTkVMX01PREVfTU9OTykKLSAgICBjcmNfYml0cyArPSAqbl9zdWJiYW5kcyAqIDEgKiA0OwotICBlbHNlCi0gICAgY3JjX2JpdHMgKz0gKm5fc3ViYmFuZHMgKiAyICogNDsKLQotICBmb3IgKGkgPSAxNjsgaSA8IGNyY19iaXRzOyBpICs9IDgpIHsKLSAgICBjcmNfZGF0YVtpIC8gOF0gPSBkYXRhWzEgKyAoaSAvIDgpICsgMV07Ci0gIH0KLQotICBpZiAoaSA+IGNyY19iaXRzKSB7Ci0gICAgY3JjX2RhdGFbKGkgLyA4KSAtIDFdICY9IDB4RjA7Ci0gIH0KLQotICBHU1RfTUVNRFVNUCAoImNyYyBieXRlcyIsIGNyY19kYXRhLCBHU1RfUk9VTkRfVVBfOCAoY3JjX2JpdHMpIC8gOCk7Ci0gIGlmIChnc3Rfc2JjX2NhbGN1bGF0ZV9jcmM4IChjcmNfZGF0YSwgY3JjX2JpdHMpICE9IGRhdGFbM10pIHsKLSAgICBHU1RfTE9HICgiaGVhZGVyIENSQyBjaGVjayBmYWlsZWQsIGJpdHM9JXUsIGdvdCAweCUwMngsIGV4cGVjdGVkIDB4JTAyeCIsCi0gICAgICAgIGNyY19iaXRzLCBnc3Rfc2JjX2NhbGN1bGF0ZV9jcmM4IChjcmNfZGF0YSwgY3JjX2JpdHMpLCBkYXRhWzNdKTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHJldHVybiBnc3Rfc2JjX2NhbGNfZnJhbWVsZW4gKCpuX3N1YmJhbmRzLCAqY2hfbW9kZSwgKm5fYmxvY2tzLCAqYml0cG9vbCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc2JjX3BhcnNlX3ByZV9wdXNoX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0U2JjUGFyc2UgKnNiY3BhcnNlID0gR1NUX1NCQ19QQVJTRSAocGFyc2UpOwotCi0gIGlmICghc2JjcGFyc2UtPnNlbnRfY29kZWNfdGFnKSB7Ci0gICAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgLyogY29kZWMgdGFnICovCi0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoY2FwcyA9PSBOVUxMKSkgewotICAgICAgaWYgKEdTVF9QQURfSVNfRkxVU0hJTkcgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSkpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgIlNyYyBwYWQgaXMgZmx1c2hpbmciKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgIlNyYyBwYWQgaXMgbm90IG5lZ290aWF0ZWQhIik7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBnc3RfcGJfdXRpbHNfYWRkX2NvZGVjX2Rlc2NyaXB0aW9uX3RvX3RhZ19saXN0ICh0YWdsaXN0LAotICAgICAgICBHU1RfVEFHX0FVRElPX0NPREVDLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICBnc3RfYmFzZV9wYXJzZV9tZXJnZV90YWdzIChwYXJzZSwgdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotCi0gICAgLyogYWxzbyBzaWduYWxzIHRoZSBlbmQgb2YgZmlyc3QtZnJhbWUgcHJvY2Vzc2luZyAqLwotICAgIHNiY3BhcnNlLT5zZW50X2NvZGVjX3RhZyA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmggYi9nc3QvYXVkaW9wYXJzZXJzL2dzdHNiY3BhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZWJiZTEuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1ZGlvcGFyc2Vycy9nc3RzYmNwYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyogR1N0cmVhbWVyIFNCQyBhdWRpbyBwYXJzZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb2xsYWJvcmEgTHRkLiA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TQkNfUEFSU0VfSF9JTkNMVURFRF9fCi0jZGVmaW5lIF9fR1NUX1NCQ19QQVJTRV9IX0lOQ0xVREVEX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VwYXJzZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU0JDX1BBUlNFICAgICAgICAgICAgKGdzdF9zYmNfcGFyc2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1NCQ19QQVJTRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NCQ19QQVJTRSxHc3RTYmNQYXJzZSkpCi0jZGVmaW5lIEdTVF9TQkNfUEFSU0VfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NCQ19QQVJTRSxHc3RTYmNQYXJzZUNsYXNzKSkKLSNkZWZpbmUgR1NUX1NCQ19QQVJTRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksR1NUX1RZUEVfU0JDX1BBUlNFLEdzdFNiY1BhcnNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU0JDX1BBUlNFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU0JDX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0lTX1NCQ19QQVJTRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU0JDX1BBUlNFKSkKLSNkZWZpbmUgR1NUX1NCQ19QQVJTRV9DQVNUKG9iaikgICAgICAgKChHc3RTYmNQYXJzZSAqKShvYmopKQotCi10eXBlZGVmIGVudW0gewotICBHU1RfU0JDX0NIQU5ORUxfTU9ERV9JTlZBTElEID0gLTEsCi0gIEdTVF9TQkNfQ0hBTk5FTF9NT0RFX01PTk8gPSAwLAotICBHU1RfU0JDX0NIQU5ORUxfTU9ERV9EVUFMID0gMSwKLSAgR1NUX1NCQ19DSEFOTkVMX01PREVfU1RFUkVPID0gMiwKLSAgR1NUX1NCQ19DSEFOTkVMX01PREVfSk9JTlRfU1RFUkVPID0gMwotfSBHc3RTYmNDaGFubmVsTW9kZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9JTlZBTElEID0gLTEsCi0gIEdTVF9TQkNfQUxMT0NBVElPTl9NRVRIT0RfU05SID0gMCwKLSAgR1NUX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9MT1VETkVTUyA9IDEKLX0gR3N0U2JjQWxsb2NhdGlvbk1ldGhvZDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNiY1BhcnNlIEdzdFNiY1BhcnNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNiY1BhcnNlQ2xhc3MgR3N0U2JjUGFyc2VDbGFzczsKLQotc3RydWN0IF9Hc3RTYmNQYXJzZSB7Ci0gIEdzdEJhc2VQYXJzZSBiYXNlcGFyc2U7Ci0KLSAgLyogY3VycmVudCBvdXRwdXQgZm9ybWF0ICovCi0gIEdzdFNiY0FsbG9jYXRpb25NZXRob2QgIGFsbG9jX21ldGhvZDsKLSAgR3N0U2JjQ2hhbm5lbE1vZGUgICAgICAgY2hfbW9kZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICAgcmF0ZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICAgbl9ibG9ja3M7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICAgIG5fc3ViYmFuZHM7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICAgIGJpdHBvb2w7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgc2VudF9jb2RlY190YWc7Ci19OwotCi1zdHJ1Y3QgX0dzdFNiY1BhcnNlQ2xhc3MgewotICBHc3RCYXNlUGFyc2VDbGFzcyBiYXNlcGFyc2VfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfc2JjX3BhcnNlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NCQ19QQVJTRV9IX0lOQ0xVREVEX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmMgYi9nc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTFkMTljLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvZ3N0d2F2cGFja3BhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDYgKzAsMCBAQAotLyogR1N0cmVhbWVyIFdhdnBhY2sgcGFyc2VyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXdhdnBhY2twYXJzZQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBXYXZwYWNrIHBhcnNlcgotICogQHNlZV9hbHNvOiAjR3N0QW1yUGFyc2UsICNHc3RBQUNQYXJzZQotICoKLSAqIFRoaXMgaXMgYW4gV2F2cGFjayBwYXJzZXIuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249YWJjLndhdnBhY2sgISB3YXZwYWNrcGFyc2UgISB3YXZwYWNrZGVjICEgYXVkaW9yZXNhbXBsZSAhIGF1ZGlvY29udmVydCAhIGF1dG9hdWRpb3NpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0d2F2cGFja3BhcnNlLmgiCi0KLSNpbmNsdWRlIDxnc3QvYmFzZS9iYXNlLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh3YXZwYWNrX3BhcnNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdhdnBhY2tfcGFyc2VfZGVidWcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXdhdnBhY2ssICIKLSAgICAgICAgImRlcHRoID0gKGludCkgWyAxLCAzMiBdLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgOCBdLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA2MDAwLCAxOTIwMDAgXSwgIiAiZnJhbWVkID0gKGJvb2xlYW4pIFRSVUU7ICIKLSAgICAgICAgImF1ZGlvL3gtd2F2cGFjay1jb3JyZWN0aW9uLCAiICJmcmFtZWQgPSAoYm9vbGVhbikgVFJVRSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXdhdnBhY2siKSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF93YXZwYWNrX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF93YXZwYWNrX3BhcnNlX3N0YXJ0IChHc3RCYXNlUGFyc2UgKiBwYXJzZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3dhdnBhY2tfcGFyc2Vfc3RvcCAoR3N0QmFzZVBhcnNlICogcGFyc2UpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3dhdnBhY2tfcGFyc2VfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpOwotc3RhdGljIEdzdENhcHMgKmdzdF93YXZwYWNrX3BhcnNlX2dldF9zaW5rX2NhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3dhdnBhY2tfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpOwotCi0jZGVmaW5lIGdzdF93YXZwYWNrX3BhcnNlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFdhdnBhY2tQYXJzZSwgZ3N0X3dhdnBhY2tfcGFyc2UsIEdTVF9UWVBFX0JBU0VfUEFSU0UpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhY2tfcGFyc2VfY2xhc3NfaW5pdCAoR3N0V2F2cGFja1BhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgKnBhcnNlX2NsYXNzID0gR1NUX0JBU0VfUEFSU0VfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh3YXZwYWNrX3BhcnNlX2RlYnVnLCAid2F2cGFja3BhcnNlIiwgMCwKLSAgICAgICJXYXZwYWNrIGF1ZGlvIHN0cmVhbSBwYXJzZXIiKTsKLQotICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3dhdnBhY2tfcGFyc2VfZmluYWxpemU7Ci0KLSAgcGFyc2VfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYWNrX3BhcnNlX3N0YXJ0KTsKLSAgcGFyc2VfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdnBhY2tfcGFyc2Vfc3RvcCk7Ci0gIHBhcnNlX2NsYXNzLT5oYW5kbGVfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYWNrX3BhcnNlX2hhbmRsZV9mcmFtZSk7Ci0gIHBhcnNlX2NsYXNzLT5nZXRfc2lua19jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFja19wYXJzZV9nZXRfc2lua19jYXBzKTsKLSAgcGFyc2VfY2xhc3MtPnByZV9wdXNoX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFja19wYXJzZV9wcmVfcHVzaF9mcmFtZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiV2F2cGFjayBhdWRpbyBzdHJlYW0gcGFyc2VyIiwgIkNvZGVjL1BhcnNlci9BdWRpbyIsCi0gICAgICAiV2F2cGFjayBwYXJzZXIiLCAiTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFja19wYXJzZV9yZXNldCAoR3N0V2F2cGFja1BhcnNlICogd3ZwYXJzZSkKLXsKLSAgd3ZwYXJzZS0+Y2hhbm5lbHMgPSAtMTsKLSAgd3ZwYXJzZS0+Y2hhbm5lbF9tYXNrID0gMDsKLSAgd3ZwYXJzZS0+c2FtcGxlX3JhdGUgPSAtMTsKLSAgd3ZwYXJzZS0+d2lkdGggPSAtMTsKLSAgd3ZwYXJzZS0+dG90YWxfc2FtcGxlcyA9IDA7Ci0gIHd2cGFyc2UtPnNlbnRfY29kZWNfdGFnID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFja19wYXJzZV9pbml0IChHc3RXYXZwYWNrUGFyc2UgKiB3dnBhcnNlKQotewotICBnc3Rfd2F2cGFja19wYXJzZV9yZXNldCAod3ZwYXJzZSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9JTlRFUlNFQ1QgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEICh3dnBhcnNlKSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKHd2cGFyc2UpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYWNrX3BhcnNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhY2tfcGFyc2Vfc3RhcnQgKEdzdEJhc2VQYXJzZSAqIHBhcnNlKQotewotICBHc3RXYXZwYWNrUGFyc2UgKnd2cGFyc2UgPSBHU1RfV0FWUEFDS19QQVJTRSAocGFyc2UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic3RhcnRpbmciKTsKLQotICBnc3Rfd2F2cGFja19wYXJzZV9yZXNldCAod3ZwYXJzZSk7Ci0KLSAgLyogbmVlZCBoZWFkZXIgYXQgbGVhc3QgKi8KLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X21pbl9mcmFtZV9zaXplIChHU1RfQkFTRV9QQVJTRSAod3ZwYXJzZSksCi0gICAgICBzaXplb2YgKFdhdnBhY2tIZWFkZXIpKTsKLQotICAvKiBpbmZvcm0gYmFzZWNsYXNzIHdlIGNhbiBjb21lIHVwIHdpdGggdHMsIGJhc2VkIG9uIGNvdW50ZXJzIGluIHBhY2tldHMgKi8KLSAgZ3N0X2Jhc2VfcGFyc2Vfc2V0X2hhc190aW1pbmdfaW5mbyAoR1NUX0JBU0VfUEFSU0VfQ0FTVCAod3ZwYXJzZSksIFRSVUUpOwotICBnc3RfYmFzZV9wYXJzZV9zZXRfc3luY2FibGUgKEdTVF9CQVNFX1BBUlNFX0NBU1QgKHd2cGFyc2UpLCBUUlVFKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFja19wYXJzZV9zdG9wIChHc3RCYXNlUGFyc2UgKiBwYXJzZSkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzdG9wcGluZyIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3dhdnBhY2tfZ2V0X2RlZmF1bHRfY2hhbm5lbF9tYXNrIChnaW50IG5jaGFubmVscykKLXsKLSAgZ2ludCBjaGFubmVsX21hc2sgPSAwOwotCi0gIC8qIFNldCB0aGUgZGVmYXVsdCBjaGFubmVsIG1hc2sgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgY2hhbm5lbHMuCi0gICAqIEl0J3MgdGhlIHNhbWUgYXMgZm9yIFdBVkVfRk9STUFUX0VYVEVOREVEOgotICAgKiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2hkYy9kZXZpY2UvYXVkaW8vbXVsdGljaGF1ZC5tc3B4Ci0gICAqLwotICBzd2l0Y2ggKG5jaGFubmVscykgewotICAgIGNhc2UgMTE6Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDQwMDsKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMjAwOwotICAgIGNhc2UgOToKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMTAwOwotICAgIGNhc2UgODoKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMDgwOwotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAwNDA7Ci0gICAgY2FzZSA2OgotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAwMjA7Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDAxMDsKLSAgICBjYXNlIDQ6Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDAwODsKLSAgICBjYXNlIDM6Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDAwNDsKLSAgICBjYXNlIDI6Ci0gICAgICBjaGFubmVsX21hc2sgfD0gMHgwMDAwMjsKLSAgICAgIGNoYW5uZWxfbWFzayB8PSAweDAwMDAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgLyogRm9yIG1vbm8gdXNlIGZyb250IGNlbnRlciAqLwotICAgICAgY2hhbm5lbF9tYXNrIHw9IDB4MDAwMDQ7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBjaGFubmVsX21hc2s7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLSAgY29uc3QgZ3VpbnQzMiBtc19tYXNrOwotICBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBnc3RfcG9zOwotfSBsYXlvdXRfbWFwcGluZ1tdID0gewotICB7Ci0gIDB4MDAwMDEsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlR9LCB7Ci0gIDB4MDAwMDIsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUfSwgewotICAweDAwMDA0LCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVJ9LCB7Ci0gIDB4MDAwMDgsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTF9LCB7Ci0gIDB4MDAwMTAsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVH0sIHsKLSAgMHgwMDAyMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVH0sIHsKLSAgMHgwMDA0MCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVF9PRl9DRU5URVJ9LCB7Ci0gIDB4MDAwODAsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUX09GX0NFTlRFUn0sIHsKLSAgMHgwMDEwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9DRU5URVJ9LCB7Ci0gIDB4MDAyMDAsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVH0sIHsKLSAgMHgwMDQwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVH0sIHsKLSAgMHgwMDgwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0NFTlRFUn0sIHsKLSAgMHgwMTAwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0xFRlR9LCB7Ci0gIDB4MDIwMDAsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9GUk9OVF9DRU5URVJ9LCB7Ci0gIDB4MDQwMDAsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9GUk9OVF9SSUdIVH0sIHsKLSAgMHgwODAwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfTEVGVH0sIHsKLSAgMHgxMDAwMCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfQ0VOVEVSfSwgewotICAweDIwMDAwLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9SSUdIVH0KLX07Ci0KLSNkZWZpbmUgTUFYX0NIQU5ORUxfUE9TSVRJT05TIEdfTl9FTEVNRU5UUyAobGF5b3V0X21hcHBpbmcpCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhY2tfZ2V0X2NoYW5uZWxfcG9zaXRpb25zIChnaW50IG51bV9jaGFubmVscywgZ2ludCBsYXlvdXQsCi0gICAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKiBwb3MpCi17Ci0gIGdpbnQgaSwgcDsKLQotICBpZiAobnVtX2NoYW5uZWxzID09IDEgJiYgbGF5b3V0ID09IDB4MDAwMDQpIHsKLSAgICBwb3NbMF0gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05POwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcCA9IDA7Ci0gIGZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTF9QT1NJVElPTlM7ICsraSkgewotICAgIGlmICgobGF5b3V0ICYgbGF5b3V0X21hcHBpbmdbaV0ubXNfbWFzaykgIT0gMCkgewotICAgICAgaWYgKHAgPj0gbnVtX2NoYW5uZWxzKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiTW9yZSBiaXRzIHNldCBpbiB0aGUgY2hhbm5lbCBsYXlvdXQgbWFwIHRoYW4gdGhlcmUgIgotICAgICAgICAgICAgImFyZSBjaGFubmVscyEgQnJva2VuIGZpbGUiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgaWYgKGxheW91dF9tYXBwaW5nW2ldLmdzdF9wb3MgPT0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fSU5WQUxJRCkgewotICAgICAgICBHU1RfV0FSTklORyAoIlVuc3VwcG9ydGVkIGNoYW5uZWwgcG9zaXRpb24gKG1hc2sgMHglMDh4KSBpbiBjaGFubmVsICIKLSAgICAgICAgICAgICJsYXlvdXQgbWFwIC0gaWdub3JpbmcgdGhvc2UgY2hhbm5lbHMiLCBsYXlvdXRfbWFwcGluZ1tpXS5tc19tYXNrKTsKLSAgICAgICAgLyogd2hhdCB0byBkbz8ganVzdCBpZ25vcmUgaXQgYW5kIGxldCBkb3duc3RyZWFtIGRlYWwgd2l0aCBhIGNoYW5uZWwKLSAgICAgICAgICogbGF5b3V0IHRoYXQgaGFzIElOVkFMSUQgcG9zaXRpb25zIGluIGl0IGZvciBub3cgLi4uICovCi0gICAgICB9Ci0gICAgICBwb3NbcF0gPSBsYXlvdXRfbWFwcGluZ1tpXS5nc3RfcG9zOwotICAgICAgKytwOwotICAgIH0KLSAgfQotCi0gIGlmIChwICE9IG51bV9jaGFubmVscykgewotICAgIEdTVF9XQVJOSU5HICgiT25seSAlZCBiaXRzIHNldCBpbiB0aGUgY2hhbm5lbCBsYXlvdXQgbWFwLCBidXQgdGhlcmUgYXJlICIKLSAgICAgICAgInN1cHBvc2VkIHRvIGJlICVkIGNoYW5uZWxzISBCcm9rZW4gZmlsZSIsIHAsIG51bV9jaGFubmVscyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBjb25zdCBndWludDMyIHNhbXBsZV9yYXRlc1tdID0gewotICA2MDAwLCA4MDAwLCA5NjAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwKLSAgMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAsIDY0MDAwLCA4ODIwMCwgOTYwMDAsIDE5MjAwMAotfTsKLQotI2RlZmluZSBDSEVDSyhjYWxsKSB7IFwKLSAgaWYgKCFjYWxsKSBcCi0gICAgZ290byByZWFkX2ZhaWxlZDsgXAotfQotCi0vKiBjYWxsZXIgZW5zdXJlcyBwcm9wZXJseSBzeW5jJ2VkIHdpdGggZW5vdWdoIGRhdGEgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhY2tfcGFyc2VfZnJhbWVfbWV0YWRhdGEgKEdzdFdhdnBhY2tQYXJzZSAqIHBhcnNlLCBHc3RCdWZmZXIgKiBidWYsCi0gICAgZ2ludCBza2lwLCBXYXZwYWNrSGVhZGVyICogd3BoLCBXYXZwYWNrSW5mbyAqIHdwaSkKLXsKLSAgR3N0Qnl0ZVJlYWRlciBicjsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAod3BoICE9IE5VTEwgfHwgd3BpICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPj0KLSAgICAgIHNraXAgKyBzaXplb2YgKFdhdnBhY2tIZWFkZXIpLCBGQUxTRSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJmJyLCBtYXAuZGF0YSArIHNraXAsIHdwaC0+Y2tTaXplICsgOCk7Ci0gIC8qIHNraXAgcGFzdCBoZWFkZXIgKi8KLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmYnIsIHNpemVvZiAoV2F2cGFja0hlYWRlcikpOwotCi0gIC8qIGdldCBzb21lIGJhc2ljcyBmcm9tIGhlYWRlciAqLwotICBpID0gKHdwaC0+ZmxhZ3MgPj4gMjMpICYgMHhGOwotICBpZiAoIXdwaS0+cmF0ZSkKLSAgICB3cGktPnJhdGUgPSAoaSA8IEdfTl9FTEVNRU5UUyAoc2FtcGxlX3JhdGVzKSkgPyBzYW1wbGVfcmF0ZXNbaV0gOiA0NDEwMDsKLSAgd3BpLT53aWR0aCA9ICgod3BoLT5mbGFncyAmIDB4MykgKyAxKSAqIDg7Ci0gIGlmICghd3BpLT5jaGFubmVscykKLSAgICB3cGktPmNoYW5uZWxzID0gKHdwaC0+ZmxhZ3MgJiAweDQpID8gMSA6IDI7Ci0gIGlmICghd3BpLT5jaGFubmVsX21hc2spCi0gICAgd3BpLT5jaGFubmVsX21hc2sgPSA1IC0gd3BpLT5jaGFubmVsczsKLQotICAvKiBuZWVkIHRvIGRpZyBtZXRhZGF0YSBibG9ja3MgZm9yIHNvbWUgbW9yZSAqLwotICB3aGlsZSAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZicikpIHsKLSAgICBnaW50IHNpemUgPSAwOwotICAgIGd1aW50MTYgc2l6ZTIgPSAwOwotICAgIGd1aW50OCBjLCBpZDsKLSAgICBjb25zdCBndWludDggKmRhdGE7Ci0gICAgR3N0Qnl0ZVJlYWRlciBtYnI7Ci0KLSAgICBDSEVDSyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJmJyLCAmaWQpKTsKLSAgICBDSEVDSyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJmJyLCAmYykpOwotICAgIGlmIChpZCAmIElEX0xBUkdFKQotICAgICAgQ0hFQ0sgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlICgmYnIsICZzaXplMikpOwotICAgIHNpemUgPSBzaXplMjsKLSAgICBzaXplIDw8PSA4OwotICAgIHNpemUgKz0gYzsKLSAgICBzaXplIDw8PSAxOwotICAgIGlmIChpZCAmIElEX09ERF9TSVpFKQotICAgICAgc2l6ZS0tOwotCi0gICAgQ0hFQ0sgKGdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSAoJmJyLCBzaXplICsgKHNpemUgJiAxKSwgJmRhdGEpKTsKLSAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJm1iciwgZGF0YSwgc2l6ZSk7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICBjYXNlIElEX1dWQ19CSVRTVFJFQU06Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImNvcnJlY3Rpb24gYml0c3RyZWFtIik7Ci0gICAgICAgIHdwaS0+Y29ycmVjdGlvbiA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJRF9XVl9CSVRTVFJFQU06Ci0gICAgICBjYXNlIElEX1dWWF9CSVRTVFJFQU06Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBJRF9TQU1QTEVfUkFURToKLSAgICAgICAgaWYgKHNpemUgPT0gMykgewotICAgICAgICAgIENIRUNLIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZSAoJm1iciwgJndwaS0+cmF0ZSkpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInVwZGF0ZWQgd2l0aCBjdXN0b20gcmF0ZSAlZCIsIHdwaS0+cmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1bmV4cGVjdGVkIHNpemUgZm9yIFNBTVBMRV9SQVRFIG1ldGFkYXRhIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIElEX0NIQU5ORUxfSU5GTzoKLSAgICAgIHsKLSAgICAgICAgZ3VpbnQxNiBjaGFubmVsczsKLSAgICAgICAgZ3VpbnQzMiBtYXNrID0gMDsKLQotICAgICAgICBpZiAoc2l6ZSA9PSA2KSB7Ci0gICAgICAgICAgQ0hFQ0sgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlICgmbWJyLCAmY2hhbm5lbHMpKTsKLSAgICAgICAgICBjaGFubmVscyA9IGNoYW5uZWxzICYgMHhGRkY7Ci0gICAgICAgICAgQ0hFQ0sgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlICgmbWJyLCAmbWFzaykpOwotICAgICAgICB9IGVsc2UgaWYgKHNpemUpIHsKLSAgICAgICAgICBDSEVDSyAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJm1iciwgJmMpKTsKLSAgICAgICAgICBjaGFubmVscyA9IGM7Ci0gICAgICAgICAgd2hpbGUgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZtYnIsICZjKSkKLSAgICAgICAgICAgIG1hc2sgfD0gKCgoZ3VpbnQzMikgYykgPDwgOCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJ1bmV4cGVjdGVkIHNpemUgZm9yIENIQU5ORUxfSU5GTyBtZXRhZGF0YSIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHdwaS0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgICAgICAgd3BpLT5jaGFubmVsX21hc2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInVucGFyc2VkIElEIDB4JXgiLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1yZWFkX2ZhaWxlZDoKLSAgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzaG9ydCByZWFkIHdoaWxlIHBhcnNpbmcgbWV0YWRhdGEiKTsKLSAgICAvKiBsZXQncyBsb29rIHRoZSBvdGhlciB3YXkgYW55d2F5ICovCi0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotLyogY2FsbGVyIGVuc3VyZXMgcHJvcGVybHkgc3luYydlZCB3aXRoIGVub3VnaCBkYXRhICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYWNrX3BhcnNlX2ZyYW1lX2hlYWRlciAoR3N0V2F2cGFja1BhcnNlICogcGFyc2UsIEdzdEJ1ZmZlciAqIGJ1ZiwKLSAgICBnaW50IHNraXAsIFdhdnBhY2tIZWFkZXIgKiBfd3BoKQotewotICBHc3RCeXRlUmVhZGVyIGJyOwotICBXYXZwYWNrSGVhZGVyIHdwaCA9IHsgezAsfSwgMCwgfTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdib29sZWFuIGhkbCA9IFRSVUU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPj0KLSAgICAgIHNraXAgKyBzaXplb2YgKFdhdnBhY2tIZWFkZXIpLCBGQUxTRSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZiciwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICAvKiBtYXJrZXIgKi8KLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmYnIsIHNraXAgKyA0KTsKLQotICAvKiByZWFkICovCi0gIGhkbCAmPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoJmJyLCAmd3BoLmNrU2l6ZSk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZSAoJmJyLCAmd3BoLnZlcnNpb24pOwotICBoZGwgJj0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJmJyLCAmd3BoLnRyYWNrX25vKTsKLSAgaGRsICY9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZiciwgJndwaC5pbmRleF9ubyk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoJmJyLCAmd3BoLnRvdGFsX3NhbXBsZXMpOwotICBoZGwgJj0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKCZiciwgJndwaC5ibG9ja19pbmRleCk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoJmJyLCAmd3BoLmJsb2NrX3NhbXBsZXMpOwotICBoZGwgJj0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKCZiciwgJndwaC5mbGFncyk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAoJmJyLCAmd3BoLmNyYyk7Ci0KLSAgaWYgKCFoZGwpCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIkVycm9yIHJlYWRpbmcgaGVhZGVyIik7Ci0KLSAgLyogZHVtcCAqLwotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJzaXplICVkIiwgd3BoLmNrU2l6ZSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInZlcnNpb24gMHgleCIsIHdwaC52ZXJzaW9uKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAidG90YWwgc2FtcGxlcyAlZCIsIHdwaC50b3RhbF9zYW1wbGVzKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYmxvY2sgaW5kZXggJWQiLCB3cGguYmxvY2tfaW5kZXgpOwotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJibG9jayBzYW1wbGVzICVkIiwgd3BoLmJsb2NrX3NhbXBsZXMpOwotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJmbGFncyAweCV4Iiwgd3BoLmZsYWdzKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiY3JjIDB4JXgiLCB3cGguZmxhZ3MpOwotCi0gIGlmICghcGFyc2UtPnRvdGFsX3NhbXBsZXMgJiYgd3BoLmJsb2NrX2luZGV4ID09IDAgJiYgd3BoLnRvdGFsX3NhbXBsZXMgIT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRldGVybWluZWQgZHVyYXRpb24gb2YgJXUgc2FtcGxlcyIsCi0gICAgICAgIHdwaC50b3RhbF9zYW1wbGVzKTsKLSAgICBwYXJzZS0+dG90YWxfc2FtcGxlcyA9IHdwaC50b3RhbF9zYW1wbGVzOwotICB9Ci0KLSAgaWYgKF93cGgpCi0gICAgKl93cGggPSB3cGg7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF93YXZwYWNrX3BhcnNlX2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKQotewotICBHc3RXYXZwYWNrUGFyc2UgKnd2cGFyc2UgPSBHU1RfV0FWUEFDS19QQVJTRSAocGFyc2UpOwotICBHc3RCdWZmZXIgKmJ1ZiA9IGZyYW1lLT5idWZmZXI7Ci0gIEdzdEJ5dGVSZWFkZXIgcmVhZGVyOwotICBnaW50IG9mZjsKLSAgZ3VpbnQgcmF0ZSwgY2hhbnMsIHdpZHRoLCBtYXNrOwotICBnYm9vbGVhbiBsb3N0X3N5bmMsIGRyYWluaW5nLCBmaW5hbDsKLSAgZ3VpbnQgZnJtc2l6ZSA9IDA7Ci0gIFdhdnBhY2tIZWFkZXIgd3BoOwotICBXYXZwYWNrSW5mbyB3cGkgPSB7IDAsIH07Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGlmIChHX1VOTElLRUxZIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpIDwgc2l6ZW9mIChXYXZwYWNrSGVhZGVyKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotCi0gIC8qIHNjYW4gZm9yICd3dnBrJyBtYXJrZXIgKi8KLSAgb2ZmID0gZ3N0X2J5dGVfcmVhZGVyX21hc2tlZF9zY2FuX3VpbnQzMiAoJnJlYWRlciwgMHhmZmZmZmZmZiwgMHg3Nzc2NzA2YiwKLSAgICAgIDAsIG1hcC5zaXplKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJwb3NzaWJsZSBzeW5jIGF0IGJ1ZmZlciBvZmZzZXQgJWQiLCBvZmYpOwotCi0gIC8qIGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIHN5bmMgd29yZCwgc2tpcCAqLwotICBpZiAob2ZmIDwgMCkgewotICAgICpza2lwc2l6ZSA9IG1hcC5zaXplIC0gMzsKLSAgICBnb3RvIHNraXA7Ci0gIH0KLQotICAvKiBwb3NzaWJsZSBmcmFtZSBoZWFkZXIsIGJ1dCBub3QgYXQgb2Zmc2V0IDA/IHNraXAgYnl0ZXMgYmVmb3JlIHN5bmMgKi8KLSAgaWYgKG9mZiA+IDApIHsKLSAgICAqc2tpcHNpemUgPSBvZmY7Ci0gICAgZ290byBza2lwOwotICB9Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSB2YWx1ZXMgaW4gdGhlIGZyYW1lIGhlYWRlciBsb29rIHNhbmUgKi8KLSAgZ3N0X3dhdnBhY2tfcGFyc2VfZnJhbWVfaGVhZGVyICh3dnBhcnNlLCBidWYsIDAsICZ3cGgpOwotICBmcm1zaXplID0gd3BoLmNrU2l6ZSArIDg7Ci0KLSAgLyogbmVlZCB0aGUgZW50aXJlIGZyYW1lIGZvciBwYXJzaW5nICovCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlcikgPCBmcm1zaXplKQotICAgIGdvdG8gbW9yZTsKLQotICAvKiBnb3QgYSBmcmFtZSwgbm93IHdlIGNhbiBkaWcgZm9yIHNvbWUgbW9yZSBtZXRhZGF0YSAqLwotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJnb3QgZnJhbWUiKTsKLSAgZ3N0X3dhdnBhY2tfcGFyc2VfZnJhbWVfbWV0YWRhdGEgKHd2cGFyc2UsIGJ1ZiwgMCwgJndwaCwgJndwaSk7Ci0KLSAgbG9zdF9zeW5jID0gR1NUX0JBU0VfUEFSU0VfTE9TVF9TWU5DIChwYXJzZSk7Ci0gIGRyYWluaW5nID0gR1NUX0JBU0VfUEFSU0VfRFJBSU5JTkcgKHBhcnNlKTsKLQotICB3aGlsZSAoIShmaW5hbCA9ICh3cGguZmxhZ3MgJiBGTEFHX0ZJTkFMX0JMT0NLKSkgfHwgKGxvc3Rfc3luYyAmJiAhZHJhaW5pbmcpKSB7Ci0gICAgZ3VpbnQzMiB3b3JkID0gMDsKLQotICAgIEdTVF9MT0dfT0JKRUNUICh3dnBhcnNlLCAiY2hlY2tpbmcgbmV4dCBmcmFtZSBzeW5jd29yZDsgIgotICAgICAgICAibG9zdF9zeW5jOiAlZCwgZHJhaW5pbmc6ICVkLCBmaW5hbDogJWQiLCBsb3N0X3N5bmMsIGRyYWluaW5nLCBmaW5hbCk7Ci0KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCB3cGguY2tTaXplICsgOCkgfHwKLSAgICAgICAgIWdzdF9ieXRlX3JlYWRlcl9wZWVrX3VpbnQzMl9iZSAoJnJlYWRlciwgJndvcmQpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh3dnBhcnNlLCAiLi4uIGJ1dCBub3Qgc3VmZmljaWVudCBkYXRhIik7Ci0gICAgICBmcm1zaXplICs9IDQ7Ci0gICAgICBnb3RvIG1vcmU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICh3b3JkICE9IDB4Nzc3NjcwNmIpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAod3ZwYXJzZSwgIjB4JXggbm90IE9LIiwgd29yZCk7Ci0gICAgICAgICpza2lwc2l6ZSA9IG9mZiArIDI7Ci0gICAgICAgIGdvdG8gc2tpcDsKLSAgICAgIH0KLSAgICAgIC8qIG5lZWQgdG8gcGFyc2UgZWFjaCBmcmFtZS9ibG9jayBmb3IgbWV0YWRhdGEgaWYgc2V2ZXJhbCBvbmVzICovCi0gICAgICBpZiAoIWZpbmFsKSB7Ci0gICAgICAgIGdpbnQgYXY7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHd2cGFyc2UsICJjaGVja2luZyBmcmFtZSBhdCBvZmZzZXQgJWQgKDB4JXgpIiwKLSAgICAgICAgICAgIGZybXNpemUsIGZybXNpemUpOwotICAgICAgICBhdiA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKTsKLSAgICAgICAgaWYgKGF2IDwgc2l6ZW9mIChXYXZwYWNrSGVhZGVyKSkgewotICAgICAgICAgIGZybXNpemUgKz0gc2l6ZW9mIChXYXZwYWNrSGVhZGVyKTsKLSAgICAgICAgICBnb3RvIG1vcmU7Ci0gICAgICAgIH0KLSAgICAgICAgZ3N0X3dhdnBhY2tfcGFyc2VfZnJhbWVfaGVhZGVyICh3dnBhcnNlLCBidWYsIGZybXNpemUsICZ3cGgpOwotICAgICAgICBvZmYgPSBmcm1zaXplOwotICAgICAgICBmcm1zaXplICs9IHdwaC5ja1NpemUgKyA4OwotICAgICAgICBpZiAoYXYgPCB3cGguY2tTaXplICsgOCkKLSAgICAgICAgICBnb3RvIG1vcmU7Ci0gICAgICAgIGdzdF93YXZwYWNrX3BhcnNlX2ZyYW1lX21ldGFkYXRhICh3dnBhcnNlLCBidWYsIG9mZiwgJndwaCwgJndwaSk7Ci0gICAgICAgIC8qIGNvdWxkIGFsc28gY2hlY2sgZm9yIG1hdGNoaW5nIGJsb2NrX2luZGV4IGFuZCBibG9ja19zYW1wbGVzID8/ICovCi0gICAgICB9Ci0gICAgfQotCi0gICAgLyogcmVzeW5jZWQgaWYgd2UgbWFrZSBpdCBoZXJlICovCi0gICAgbG9zdF9zeW5jID0gRkFMU0U7Ci0gIH0KLQotICByYXRlID0gd3BpLnJhdGU7Ci0gIHdpZHRoID0gd3BpLndpZHRoOwotICBjaGFucyA9IHdwaS5jaGFubmVsczsKLSAgbWFzayA9IHdwaS5jaGFubmVsX21hc2s7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAicmF0ZTogJXUsIHdpZHRoOiAldSwgY2hhbnM6ICV1IiwgcmF0ZSwgd2lkdGgsIGNoYW5zKTsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh3cGguYmxvY2tfaW5kZXgsIEdTVF9TRUNPTkQsIHJhdGUpOwotICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHdwaC5ibG9ja19pbmRleCArIHdwaC5ibG9ja19zYW1wbGVzLAotICAgICAgR1NUX1NFQ09ORCwgcmF0ZSkgLSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLQotICBpZiAoR19VTkxJS0VMWSAod3ZwYXJzZS0+c2FtcGxlX3JhdGUgIT0gcmF0ZSB8fCB3dnBhcnNlLT5jaGFubmVscyAhPSBjaGFucwotICAgICAgICAgIHx8IHd2cGFyc2UtPndpZHRoICE9IHdpZHRoIHx8IHd2cGFyc2UtPmNoYW5uZWxfbWFzayAhPSBtYXNrKSkgewotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICBpZiAod3BpLmNvcnJlY3Rpb24pIHsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC13YXZwYWNrLWNvcnJlY3Rpb24iLAotICAgICAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC13YXZwYWNrIiwKLSAgICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBjaGFucywKLSAgICAgICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIHJhdGUsCi0gICAgICAgICAgImRlcHRoIiwgR19UWVBFX0lOVCwgd2lkdGgsICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0KLSAgICAgIGlmICghbWFzaykKLSAgICAgICAgbWFzayA9IGdzdF93YXZwYWNrX2dldF9kZWZhdWx0X2NoYW5uZWxfbWFzayAod3ZwYXJzZS0+Y2hhbm5lbHMpOwotICAgICAgaWYgKG1hc2sgIT0gMCkgewotICAgICAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NbNjRdID0KLSAgICAgICAgICAgIHsgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fSU5WQUxJRCwgfTsKLSAgICAgICAgZ3VpbnQ2NCBnbWFzazsKLQotICAgICAgICBpZiAoIWdzdF93YXZwYWNrX2dldF9jaGFubmVsX3Bvc2l0aW9ucyAoY2hhbnMsIG1hc2ssIHBvcykpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHd2cGFyc2UsICJGYWlsZWQgdG8gZGV0ZXJtaW5lIGNoYW5uZWwgbGF5b3V0Iik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX21hc2sgKHBvcywgY2hhbnMsIEZBTFNFLCAmZ21hc2spOwotICAgICAgICAgIGlmIChnbWFzaykKLSAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsCi0gICAgICAgICAgICAgICAgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssIGdtYXNrLCBOVUxMKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NSQ19QQUQgKHBhcnNlKSwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgd3ZwYXJzZS0+c2FtcGxlX3JhdGUgPSByYXRlOwotICAgIHd2cGFyc2UtPmNoYW5uZWxzID0gY2hhbnM7Ci0gICAgd3ZwYXJzZS0+d2lkdGggPSB3aWR0aDsKLSAgICB3dnBhcnNlLT5jaGFubmVsX21hc2sgPSBtYXNrOwotCi0gICAgaWYgKHd2cGFyc2UtPnRvdGFsX3NhbXBsZXMpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHd2cGFyc2UsICJzZXR0aW5nIGR1cmF0aW9uIik7Ci0gICAgICBnc3RfYmFzZV9wYXJzZV9zZXRfZHVyYXRpb24gKEdTVF9CQVNFX1BBUlNFICh3dnBhcnNlKSwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHd2cGFyc2UtPnRvdGFsX3NhbXBsZXMsCi0gICAgICAgICAgICAgIEdTVF9TRUNPTkQsIHd2cGFyc2UtPnNhbXBsZV9yYXRlKSwgMCk7Ci0gICAgfQotICB9Ci0KLSAgLyogcmV0dXJuIHRvIG5vcm1hbCBzaXplICovCi0gIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAocGFyc2UsIHNpemVvZiAoV2F2cGFja0hlYWRlcikpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBnc3RfYmFzZV9wYXJzZV9maW5pc2hfZnJhbWUgKHBhcnNlLCBmcmFtZSwgZnJtc2l6ZSk7Ci0KLXNraXA6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIEdTVF9MT0dfT0JKRUNUICh3dnBhcnNlLCAic2tpcHBpbmcgJWQiLCAqc2tpcHNpemUpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLW1vcmU6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIEdTVF9MT0dfT0JKRUNUICh3dnBhcnNlLCAibmVlZCBhdCBsZWFzdCAldSIsIGZybXNpemUpOwotICBnc3RfYmFzZV9wYXJzZV9zZXRfbWluX2ZyYW1lX3NpemUgKHBhcnNlLCBmcm1zaXplKTsKLSAgKnNraXBzaXplID0gMDsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX2ZpZWxkcyAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGd1aW50IGksIG47Ci0KLSAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJmcmFtZWQiKTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfd2F2cGFja19wYXJzZV9nZXRfc2lua19jYXBzIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcGVlcmNhcHMsICp0ZW1wbDsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChwYXJzZSkpOwotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqZmNvcHkgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIC8qIFJlbW92ZSB0aGUgZmllbGRzIHdlIGNvbnZlcnQgKi8KLSAgICByZW1vdmVfZmllbGRzIChmY29weSk7Ci0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBmY29weSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZjb3B5KTsKLSAgfSBlbHNlCi0gICAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpLCBOVUxMKTsKLQotICBpZiAocGVlcmNhcHMpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGZyYW1lZCBmaWVsZCAqLwotICAgIHBlZXJjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAocGVlcmNhcHMpOwotICAgIHJlbW92ZV9maWVsZHMgKHBlZXJjYXBzKTsKLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotICB9IGVsc2UgewotICAgIHJlcyA9IHRlbXBsOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLSAgICByZXMgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3dhdnBhY2tfcGFyc2VfcHJlX3B1c2hfZnJhbWUgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdEJhc2VQYXJzZUZyYW1lICogZnJhbWUpCi17Ci0gIEdzdFdhdnBhY2tQYXJzZSAqd2F2cGFja3BhcnNlID0gR1NUX1dBVlBBQ0tfUEFSU0UgKHBhcnNlKTsKLQotICBpZiAoIXdhdnBhY2twYXJzZS0+c2VudF9jb2RlY190YWcpIHsKLSAgICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAvKiBjb2RlYyB0YWcgKi8KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSkpOwotICAgIGlmIChHX1VOTElLRUxZIChjYXBzID09IE5VTEwpKSB7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAoR1NUX0JBU0VfUEFSU0VfU1JDX1BBRCAocGFyc2UpKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBmbHVzaGluZyIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHBhcnNlLCAiU3JjIHBhZCBpcyBub3QgbmVnb3RpYXRlZCEiKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgICAgfQotICAgIH0KLQotICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgIGdzdF9wYl91dGlsc19hZGRfY29kZWNfZGVzY3JpcHRpb25fdG9fdGFnX2xpc3QgKHRhZ2xpc3QsCi0gICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGdzdF9iYXNlX3BhcnNlX21lcmdlX3RhZ3MgKHBhcnNlLCB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0KLSAgICAvKiBhbHNvIHNpZ25hbHMgdGhlIGVuZCBvZiBmaXJzdC1mcmFtZSBwcm9jZXNzaW5nICovCi0gICAgd2F2cGFja3BhcnNlLT5zZW50X2NvZGVjX3RhZyA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5oIGIvZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzMjVhYS4uMDAwMDAwMAotLS0gYS9nc3QvYXVkaW9wYXJzZXJzL2dzdHdhdnBhY2twYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qIEdTdHJlYW1lciBXYXZwYWNrIHBhcnNlcgotICogQ29weXJpZ2h0IChDKSAyMDEyIE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBDb250YWN0OiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfV0FWUEFDS19QQVJTRV9IX18KLSNkZWZpbmUgX19HU1RfV0FWUEFDS19QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1dBVlBBQ0tfUEFSU0UgXAotICAoZ3N0X3dhdnBhY2tfcGFyc2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1dBVlBBQ0tfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfV0FWUEFDS19QQVJTRSwgR3N0V2F2cGFja1BhcnNlKSkKLSNkZWZpbmUgR1NUX1dBVlBBQ0tfUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX1dBVlBBQ0tfUEFSU0UsIEdzdFdhdnBhY2tQYXJzZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1dBVlBBQ0tfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfV0FWUEFDS19QQVJTRSkpCi0jZGVmaW5lIEdTVF9JU19XQVZQQUNLX1BBUlNFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHU1RfVFlQRV9XQVZQQUNLX1BBUlNFKSkKLQotCi0jZGVmaW5lIElEX1VOSVFVRSAgICAgICAgICAgICAgIDB4M2YKLSNkZWZpbmUgSURfT1BUSU9OQUxfREFUQSAgICAgICAgMHgyMAotI2RlZmluZSBJRF9PRERfU0laRSAgICAgICAgICAgICAweDQwCi0jZGVmaW5lIElEX0xBUkdFICAgICAgICAgICAgICAgIDB4ODAKLQotI2RlZmluZSBJRF9EVU1NWSAgICAgICAgICAgICAgICAweDAKLSNkZWZpbmUgSURfRU5DT0RFUl9JTkZPICAgICAgICAgMHgxCi0jZGVmaW5lIElEX0RFQ09SUl9URVJNUyAgICAgICAgIDB4MgotI2RlZmluZSBJRF9ERUNPUlJfV0VJR0hUUyAgICAgICAweDMKLSNkZWZpbmUgSURfREVDT1JSX1NBTVBMRVMgICAgICAgMHg0Ci0jZGVmaW5lIElEX0VOVFJPUFlfVkFSUyAgICAgICAgIDB4NQotI2RlZmluZSBJRF9IWUJSSURfUFJPRklMRSAgICAgICAweDYKLSNkZWZpbmUgSURfU0hBUElOR19XRUlHSFRTICAgICAgMHg3Ci0jZGVmaW5lIElEX0ZMT0FUX0lORk8gICAgICAgICAgIDB4OAotI2RlZmluZSBJRF9JTlQzMl9JTkZPICAgICAgICAgICAweDkKLSNkZWZpbmUgSURfV1ZfQklUU1RSRUFNICAgICAgICAgMHhhCi0jZGVmaW5lIElEX1dWQ19CSVRTVFJFQU0gICAgICAgIDB4YgotI2RlZmluZSBJRF9XVlhfQklUU1RSRUFNICAgICAgICAweGMKLSNkZWZpbmUgSURfQ0hBTk5FTF9JTkZPICAgICAgICAgMHhkCi0KLSNkZWZpbmUgSURfUklGRl9IRUFERVIgICAgICAgICAgKElEX09QVElPTkFMX0RBVEEgfCAweDEpCi0jZGVmaW5lIElEX1JJRkZfVFJBSUxFUiAgICAgICAgIChJRF9PUFRJT05BTF9EQVRBIHwgMHgyKQotI2RlZmluZSBJRF9SRVBMQVlfR0FJTiAgICAgICAgICAoSURfT1BUSU9OQUxfREFUQSB8IDB4MykKLSNkZWZpbmUgSURfQ1VFU0hFRVQgICAgICAgICAgICAgKElEX09QVElPTkFMX0RBVEEgfCAweDQpCi0jZGVmaW5lIElEX0NPTkZJR19CTE9DSyAgICAgICAgIChJRF9PUFRJT05BTF9EQVRBIHwgMHg1KQotI2RlZmluZSBJRF9NRDVfQ0hFQ0tTVU0gICAgICAgICAoSURfT1BUSU9OQUxfREFUQSB8IDB4NikKLSNkZWZpbmUgSURfU0FNUExFX1JBVEUgICAgICAgICAgKElEX09QVElPTkFMX0RBVEEgfCAweDcpCi0KLSNkZWZpbmUgRkxBR19GSU5BTF9CTE9DSyAgICAgICAgKDEgPDwgMTIpCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgY2hhciBja0lEIFs0XTsgICAgICAgICAgICAgLyogInd2cGsiICovCi0gIGd1aW50MzIgY2tTaXplOyAgICAgICAgICAgIC8qIHNpemUgb2YgZW50aXJlIGJsb2NrIChtaW51cyA4LCBvZiBjb3Vyc2UpICovCi0gIGd1aW50MTYgdmVyc2lvbjsgICAgICAgICAgIC8qIDB4NDAyIHRvIDB4NDEwIGFyZSBjdXJyZW50bHkgdmFsaWQgZm9yIGRlY29kZSAqLwotICBndWNoYXIgdHJhY2tfbm87ICAgICAgICAgICAvKiB0cmFjayBudW1iZXIgKDAgaWYgbm90IHVzZWQsIGxpa2Ugbm93KSAqLwotICBndWNoYXIgaW5kZXhfbm87ICAgICAgICAgICAvKiB0cmFjayBzdWItaW5kZXggKDAgaWYgbm90IHVzZWQsIGxpa2Ugbm93KSAqLwotICBndWludDMyIHRvdGFsX3NhbXBsZXM7ICAgICAvKiB0b3RhbCBzYW1wbGVzIGZvciBlbnRpcmUgZmlsZSwgYnV0IHRoaXMgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb25seSB2YWxpZCBpZiBibG9ja19pbmRleCA9PSAwIGFuZCBhIHZhbHVlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0xIGluZGljYXRlcyB1bmtub3duIGxlbmd0aCAqLwotICBndWludDMyIGJsb2NrX2luZGV4OyAgICAgICAvKiBpbmRleCBvZiBmaXJzdCBzYW1wbGUgaW4gYmxvY2sgcmVsYXRpdmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmVnaW5uaW5nIG9mIGZpbGUgKG5vcm1hbGx5IHRoaXMgd291bGQgc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYXQgMCBmb3IgdGhlIGZpcnN0IGJsb2NrKSAqLwotICBndWludDMyIGJsb2NrX3NhbXBsZXM7ICAgICAvKiBudW1iZXIgb2Ygc2FtcGxlcyBpbiB0aGlzIGJsb2NrICgwID0gbm8gYXVkaW8pICovCi0gIGd1aW50MzIgZmxhZ3M7ICAgICAgICAgICAgIC8qIHZhcmlvdXMgZmxhZ3MgZm9yIGlkIGFuZCBkZWNvZGluZyAqLwotICBndWludDMyIGNyYzsgICAgICAgICAgICAgICAvKiBjcmMgZm9yIGFjdHVhbCBkZWNvZGVkIGRhdGEgKi8KLX0gV2F2cGFja0hlYWRlcjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICBnYm9vbGVhbiBjb3JyZWN0aW9uOwotICBndWludCByYXRlOwotICBndWludCB3aWR0aDsKLSAgZ3VpbnQgY2hhbm5lbHM7Ci0gIGd1aW50IGNoYW5uZWxfbWFzazsKLX0gV2F2cGFja0luZm87Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RXYXZwYWNrUGFyc2UgR3N0V2F2cGFja1BhcnNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdhdnBhY2tQYXJzZUNsYXNzIEdzdFdhdnBhY2tQYXJzZUNsYXNzOwotCi0vKioKLSAqIEdzdFdhdnBhY2tQYXJzZToKLSAqCi0gKiBUaGUgb3BhcXVlIEdzdFdhdnBhY2tQYXJzZSBvYmplY3QKLSAqLwotc3RydWN0IF9Hc3RXYXZwYWNrUGFyc2UgewotICBHc3RCYXNlUGFyc2UgYmFzZXBhcnNlOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBnaW50ICAgICAgICAgIHNhbXBsZV9yYXRlOwotICBnaW50ICAgICAgICAgIGNoYW5uZWxzOwotICBnaW50ICAgICAgICAgIHdpZHRoOwotICBnaW50ICAgICAgICAgIGNoYW5uZWxfbWFzazsKLQotICBndWludCAgICAgICAgIHRvdGFsX3NhbXBsZXM7Ci0KLSAgZ2Jvb2xlYW4gICAgICBzZW50X2NvZGVjX3RhZzsKLX07Ci0KLS8qKgotICogR3N0V2F2cGFja1BhcnNlQ2xhc3M6Ci0gKiBAcGFyZW50X2NsYXNzOiBFbGVtZW50IHBhcmVudCBjbGFzcy4KLSAqCi0gKiBUaGUgb3BhcXVlIEdzdFdhdnBhY2tQYXJzZUNsYXNzIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFdhdnBhY2tQYXJzZUNsYXNzIHsKLSAgR3N0QmFzZVBhcnNlQ2xhc3MgYmFzZXBhcnNlX2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3dhdnBhY2tfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfV0FWUEFDS19QQVJTRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmMgYi9nc3QvYXVkaW9wYXJzZXJzL3BsdWdpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2JmZTYwLi4wMDAwMDAwCi0tLSBhL2dzdC9hdWRpb3BhcnNlcnMvcGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBHU3RyZWFtZXIgYXVkaW8gcGFyc2VycwotICogQ29weXJpZ2h0IChDKSAyMDA5IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YWFjcGFyc2UuaCIKLSNpbmNsdWRlICJnc3RhbXJwYXJzZS5oIgotI2luY2x1ZGUgImdzdGFjM3BhcnNlLmgiCi0jaW5jbHVkZSAiZ3N0ZGNhcGFyc2UuaCIKLSNpbmNsdWRlICJnc3RmbGFjcGFyc2UuaCIKLSNpbmNsdWRlICJnc3RtcGVnYXVkaW9wYXJzZS5oIgotI2luY2x1ZGUgImdzdHNiY3BhcnNlLmgiCi0jaW5jbHVkZSAiZ3N0d2F2cGFja3BhcnNlLmgiCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhYWNwYXJzZSIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZICsgMSwgR1NUX1RZUEVfQUFDX1BBUlNFKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhbXJwYXJzZSIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZICsgMSwgR1NUX1RZUEVfQU1SX1BBUlNFKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhYzNwYXJzZSIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZICsgMSwgR1NUX1RZUEVfQUMzX1BBUlNFKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJkY2FwYXJzZSIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZICsgMSwgR1NUX1RZUEVfRENBX1BBUlNFKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJmbGFjcGFyc2UiLAotICAgICAgR1NUX1JBTktfUFJJTUFSWSArIDEsIEdTVF9UWVBFX0ZMQUNfUEFSU0UpOwotICByZXQgJj0gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm1wZWdhdWRpb3BhcnNlIiwKLSAgICAgIEdTVF9SQU5LX1BSSU1BUlkgKyAyLCBHU1RfVFlQRV9NUEVHX0FVRElPX1BBUlNFKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJzYmNwYXJzZSIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZICsgMSwgR1NUX1RZUEVfU0JDX1BBUlNFKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ3YXZwYWNrcGFyc2UiLAotICAgICAgR1NUX1JBTktfUFJJTUFSWSArIDEsIEdTVF9UWVBFX1dBVlBBQ0tfUEFSU0UpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGF1ZGlvcGFyc2VycywKLSAgICAiUGFyc2VycyBmb3IgdmFyaW91cyBhdWRpbyBmb3JtYXRzIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvZ3N0L2F1cGFyc2UvTWFrZWZpbGUuYW0gYi9nc3QvYXVwYXJzZS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQzYWE4YS4uMDAwMDAwMAotLS0gYS9nc3QvYXVwYXJzZS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YXVwYXJzZS5sYQotCi1saWJnc3RhdXBhcnNlX2xhX1NPVVJDRVMgPSBnc3RhdXBhcnNlLmMKLWxpYmdzdGF1cGFyc2VfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGF1cGFyc2VfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0xJQlMpICQoR1NUX0JBU0VfTElCUykKLWxpYmdzdGF1cGFyc2VfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YXVwYXJzZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGF1cGFyc2UuaApkaWZmIC0tZ2l0IGEvZ3N0L2F1cGFyc2UvTWFrZWZpbGUuaW4gYi9nc3QvYXVwYXJzZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5NGIzMy4uMDAwMDAwMAotLS0gYS9nc3QvYXVwYXJzZS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkwOSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvYXVwYXJzZQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGF1cGFyc2VfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RhdXBhcnNlX2xhX09CSkVDVFMgPSBsaWJnc3RhdXBhcnNlX2xhLWdzdGF1cGFyc2UubG8KLWxpYmdzdGF1cGFyc2VfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0YXVwYXJzZV9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0YXVwYXJzZV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGF1cGFyc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RhdXBhcnNlX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGF1cGFyc2VfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0YXVwYXJzZV9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RhdXBhcnNlX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGF1cGFyc2UubGEKLWxpYmdzdGF1cGFyc2VfbGFfU09VUkNFUyA9IGdzdGF1cGFyc2UuYwotbGliZ3N0YXVwYXJzZV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0YXVwYXJzZV9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfTElCUykgJChHU1RfQkFTRV9MSUJTKQotbGliZ3N0YXVwYXJzZV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhdXBhcnNlX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGF1cGFyc2UuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1cGFyc2UvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1cGFyc2UvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RhdXBhcnNlLmxhOiAkKGxpYmdzdGF1cGFyc2VfbGFfT0JKRUNUUykgJChsaWJnc3RhdXBhcnNlX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RhdXBhcnNlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RhdXBhcnNlX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RhdXBhcnNlX2xhX09CSkVDVFMpICQobGliZ3N0YXVwYXJzZV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1cGFyc2VfbGEtZ3N0YXVwYXJzZS5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0YXVwYXJzZV9sYS1nc3RhdXBhcnNlLmxvOiBnc3RhdXBhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdXBhcnNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1cGFyc2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1cGFyc2VfbGEtZ3N0YXVwYXJzZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXVwYXJzZV9sYS1nc3RhdXBhcnNlLlRwbyAtYyAtbyBsaWJnc3RhdXBhcnNlX2xhLWdzdGF1cGFyc2UubG8gYHRlc3QgLWYgJ2dzdGF1cGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXVwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdXBhcnNlX2xhLWdzdGF1cGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RhdXBhcnNlX2xhLWdzdGF1cGFyc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YXVwYXJzZS5jJyBvYmplY3Q9J2xpYmdzdGF1cGFyc2VfbGEtZ3N0YXVwYXJzZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1cGFyc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXVwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdXBhcnNlX2xhLWdzdGF1cGFyc2UubG8gYHRlc3QgLWYgJ2dzdGF1cGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXVwYXJzZS5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYyBiL2dzdC9hdXBhcnNlL2dzdGF1cGFyc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgxNGFkOC4uMDAwMDAwMAotLS0gYS9nc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdXBhcnNlCi0gKgotICogUGFyc2VzIC5hdSBmaWxlcyBtb3N0bHkgb3JpZ2luYXRpbmcgZnJvbSBzdW4gb3MgYmFzZWQgY29tcHV0ZXJzLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0YXVwYXJzZS5oIgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChhdXBhcnNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChhdXBhcnNlX2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtYXUiKQotICAgICk7Ci0KLSNkZWZpbmUgR1NUX0FVX1BBUlNFX1JBV19QQURfVEVNUExBVEVfQ0FQUyBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiZm9ybWF0PSAoc3RyaW5nKSB7IFM4LCBTMTZMRSwgUzE2QkUsIFMyNExFLCBTMjRCRSwgIiAgXAotICAgICAgICAgICAgICAgICAgICAgICAiUzMyTEUsIFMzMkJFLCBGMzJMRSwgRjMyQkUsICIgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIkY2NExFLCBGNjRCRSB9LCAiIFwKLSAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgMTkyMDAwIF0sICIgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkOyIgICAgICAgIFwKLSAgICAiYXVkaW8veC1yYXcsICIgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJmb3JtYXQ9IChzdHJpbmcpIHsgUzgsIFMxNkxFLCBTMTZCRSwgUzI0TEUsIFMyNEJFLCAiICBcCi0gICAgICAgICAgICAgICAgICAgICAgICJTMzJMRSwgUzMyQkUsIEYzMkxFLCBGMzJCRSwgIiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAiRjY0TEUsIEY2NEJFIH0sICIgXAotICAgICJyYXRlID0gKGludCkgWyA4MDAwLCAxOTIwMDAgXSwgIiAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMiwgIiAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbC1tYXNrID0gKGJpdG1hc2spIDB4MywiICAgICAgICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCIKLQotI2RlZmluZSBHU1RfQVVfUEFSU0VfQUxBV19QQURfVEVNUExBVEVfQ0FQUyBcCi0gICAgImF1ZGlvL3gtYWxhdywgIiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgMTkyMDAwIF0sICIgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdIgotCi0jZGVmaW5lIEdTVF9BVV9QQVJTRV9NVUxBV19QQURfVEVNUExBVEVfQ0FQUyBcCi0gICAgImF1ZGlvL3gtbXVsYXcsICIgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSBbIDgwMDAsIDE5MjAwMCBdLCAiICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0iCi0KLS8qIE5vdGhpbmcgdG8gZGVjb2RlIHRob3NlIEFEUENNIHN0cmVhbXMgZm9yIG5vdyAqLwotI2RlZmluZSBHU1RfQVVfUEFSU0VfQURQQ01fUEFEX1RFTVBMQVRFX0NBUFMgXAotICAgICJhdWRpby94LWFkcGNtLCAiICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSB7IGc3MjEsIGc3MjIsIGc3MjNfMywgZzcyM181IH0iCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfQVVfUEFSU0VfUkFXX1BBRF9URU1QTEFURV9DQVBTICI7ICIKLSAgICAgICAgR1NUX0FVX1BBUlNFX0FMQVdfUEFEX1RFTVBMQVRFX0NBUFMgIjsiCi0gICAgICAgIEdTVF9BVV9QQVJTRV9NVUxBV19QQURfVEVNUExBVEVfQ0FQUyAiOyIKLSAgICAgICAgR1NUX0FVX1BBUlNFX0FEUENNX1BBRF9URU1QTEFURV9DQVBTKSk7Ci0KLQotc3RhdGljIHZvaWQgZ3N0X2F1X3BhcnNlX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F1X3BhcnNlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9hdV9wYXJzZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIHZvaWQgZ3N0X2F1X3BhcnNlX3Jlc2V0IChHc3RBdVBhcnNlICogYXVwYXJzZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1X3BhcnNlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1X3BhcnNlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F1X3BhcnNlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdV9wYXJzZV9zcmNfY29udmVydCAoR3N0QXVQYXJzZSAqIGF1cGFyc2UsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmN2YWwsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwKLSAgICBnaW50NjQgKiBkZXN0dmFsKTsKLQotI2RlZmluZSBnc3RfYXVfcGFyc2VfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXVQYXJzZSwgZ3N0X2F1X3BhcnNlLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9hdV9wYXJzZV9jbGFzc19pbml0IChHc3RBdVBhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGF1cGFyc2VfZGVidWcsICJhdXBhcnNlIiwgMCwgIi5hdSBwYXJzZXIiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9hdV9wYXJzZV9kaXNwb3NlOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1X3BhcnNlX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJBVSBhdWRpbyBkZW11eGVyIiwKLSAgICAgICJDb2RlYy9EZW11eGVyL0F1ZGlvIiwKLSAgICAgICJQYXJzZSBhbiAuYXUgZmlsZSBpbnRvIHJhdyBhdWRpbyIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdV9wYXJzZV9pbml0IChHc3RBdVBhcnNlICogYXVwYXJzZSkKLXsKLSAgYXVwYXJzZS0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGF1cGFyc2UtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1X3BhcnNlX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChhdXBhcnNlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdV9wYXJzZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhdXBhcnNlKSwgYXVwYXJzZS0+c2lua3BhZCk7Ci0KLSAgYXVwYXJzZS0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcGxhdGUsICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGF1cGFyc2UtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXVfcGFyc2Vfc3JjX3F1ZXJ5KSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChhdXBhcnNlLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F1X3BhcnNlX3NyY19ldmVudCkpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChhdXBhcnNlLT5zcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoYXVwYXJzZSksIGF1cGFyc2UtPnNyY3BhZCk7Ci0KLSAgYXVwYXJzZS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgZ3N0X2F1X3BhcnNlX3Jlc2V0IChhdXBhcnNlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdV9wYXJzZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBdVBhcnNlICphdSA9IEdTVF9BVV9QQVJTRSAob2JqZWN0KTsKLQotICBpZiAoYXUtPmFkYXB0ZXIgIT0gTlVMTCkgewotICAgIGdfb2JqZWN0X3VucmVmIChhdS0+YWRhcHRlcik7Ci0gICAgYXUtPmFkYXB0ZXIgPSBOVUxMOwotICB9Ci0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1X3BhcnNlX3Jlc2V0IChHc3RBdVBhcnNlICogYXVwYXJzZSkKLXsKLSAgYXVwYXJzZS0+b2Zmc2V0ID0gMDsKLSAgYXVwYXJzZS0+YnVmZmVyX29mZnNldCA9IDA7Ci0gIGF1cGFyc2UtPmVuY29kaW5nID0gMDsKLSAgYXVwYXJzZS0+c2FtcGxlcmF0ZSA9IDA7Ci0gIGF1cGFyc2UtPmNoYW5uZWxzID0gMDsKLQotICBnc3RfYWRhcHRlcl9jbGVhciAoYXVwYXJzZS0+YWRhcHRlcik7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJmF1cGFyc2UtPnNyY19jYXBzLCBOVUxMKTsKLQotICAvKiBnc3Rfc2VnbWVudF9pbml0ICgmYXVwYXJzZS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsgKi8KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdV9wYXJzZV9uZWdvdGlhdGVfc3JjcGFkIChHc3RBdVBhcnNlICogYXVwYXJzZSwgR3N0Q2FwcyAqIG5ld19jYXBzKQotewotICBpZiAoYXVwYXJzZS0+c3JjX2NhcHMgJiYgZ3N0X2NhcHNfaXNfZXF1YWwgKG5ld19jYXBzLCBhdXBhcnNlLT5zcmNfY2FwcykpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoYXVwYXJzZSwgInNhbWUgY2Fwcywgbm90aGluZyB0byBkbyIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZhdXBhcnNlLT5zcmNfY2FwcywgbmV3X2NhcHMpOwotICBHU1RfREVCVUdfT0JKRUNUIChhdXBhcnNlLCAiQ2hhbmdpbmcgc3JjIHBhZCBjYXBzIHRvICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgYXVwYXJzZS0+c3JjX2NhcHMpOwotICBnc3RfcGFkX3NldF9jYXBzIChhdXBhcnNlLT5zcmNwYWQsIGF1cGFyc2UtPnNyY19jYXBzKTsKLQotICByZXR1cm47Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXVfcGFyc2VfcGFyc2VfaGVhZGVyIChHc3RBdVBhcnNlICogYXVwYXJzZSkKLXsKLSAgR3N0Q2FwcyAqdGVtcGNhcHM7Ci0gIGd1aW50MzIgc2l6ZTsKLSAgZ3VpbnQ4ICpoZWFkOwotICBnY2hhciBsYXlvdXRbN10gPSB7IDAsIH07Ci0gIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfVU5LTk9XTjsKLSAgZ2ludCBsYXcgPSAwOwotICBndWludCBlbmRpYW5uZXNzOwotCi0gIGhlYWQgPSAoZ3VpbnQ4ICopIGdzdF9hZGFwdGVyX21hcCAoYXVwYXJzZS0+YWRhcHRlciwgMjQpOwotICBnX2Fzc2VydCAoaGVhZCAhPSBOVUxMKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdXBhcnNlLCAiWyVjJWMlYyVjXSIsIGhlYWRbMF0sIGhlYWRbMV0sIGhlYWRbMl0sIGhlYWRbM10pOwotCi0gIHN3aXRjaCAoR1NUX1JFQURfVUlOVDMyX0JFIChoZWFkKSkgewotICAgICAgLyogbm9ybWFsIGZvcm1hdCBpcyBiaWcgZW5kaWFuIChhdSBpcyBhIFNwYXJjIGZvcm1hdCkgKi8KLSAgICBjYXNlIDB4MmU3MzZlNjQ6eyAgICAgICAgICAvKiAiLnNuZCIgKi8KLSAgICAgIGVuZGlhbm5lc3MgPSBHX0JJR19FTkRJQU47Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgICAvKiBhbmQgb2YgY291cnNlLCBzb21lb25lIGhhZCB0byBpbnZlbnQgYSBsaXR0bGUgZW5kaWFuCi0gICAgICAgKiB2ZXJzaW9uLiAgVXNlZCBieSBERUMgc3lzdGVtcy4gKi8KLSAgICBjYXNlIDB4NjQ2ZTczMmU6ICAgICAgICAgICAvKiBkbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGNhc2UgMHgwMDY0NzMyZTp7ICAgICAgICAgIC8qIG90aGVyIHNvdXJjZSBzYXkgaXQgaXMgImRucy4iICovCi0gICAgICBlbmRpYW5uZXNzID0gR19MSVRUTEVfRU5ESUFOOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6ewotICAgICAgZ290byB1bmtub3duX2hlYWRlcjsKLSAgICB9Ci0gIH0KLQotICBhdXBhcnNlLT5vZmZzZXQgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhlYWQgKyA0KTsKLSAgLyogRG8gbm90IHRydXN0IHNpemUsIGNvdWxkIGJlIHNldCB0byAtMSA6IHVua25vd24KLSAgICogb3RoZXJ3aXNlOiBmaWxlc2l6ZSA9IHNpemUgKyBhdXBhcnNlLT5vZmZzZXQKLSAgICovCi0gIHNpemUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhlYWQgKyA4KTsKLSAgYXVwYXJzZS0+ZW5jb2RpbmcgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhlYWQgKyAxMik7Ci0gIGF1cGFyc2UtPnNhbXBsZXJhdGUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhlYWQgKyAxNik7Ci0gIGF1cGFyc2UtPmNoYW5uZWxzID0gR1NUX1JFQURfVUlOVDMyX0JFIChoZWFkICsgMjApOwotCi0gIGlmIChhdXBhcnNlLT5zYW1wbGVyYXRlIDwgODAwMCB8fCBhdXBhcnNlLT5zYW1wbGVyYXRlID4gMTkyMDAwKQotICAgIGdvdG8gdW5zdXBwb3J0ZWRfc2FtcGxlX3JhdGU7Ci0KLSAgaWYgKGF1cGFyc2UtPmNoYW5uZWxzIDwgMSB8fCBhdXBhcnNlLT5jaGFubmVscyA+IDIpCi0gICAgZ290byB1bnN1cHBvcnRlZF9udW1iZXJfb2ZfY2hhbm5lbHM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXVwYXJzZSwgIm9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgc2l6ZSAldSwgIgotICAgICAgImVuY29kaW5nICV1LCBmcmVxdWVuY3kgJXUsIGNoYW5uZWxzICV1IiwgYXVwYXJzZS0+b2Zmc2V0LCBzaXplLAotICAgICAgYXVwYXJzZS0+ZW5jb2RpbmcsIGF1cGFyc2UtPnNhbXBsZXJhdGUsIGF1cGFyc2UtPmNoYW5uZWxzKTsKLQotICAvKiBEb2NzOgotICAgKiBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvcHVibGljL3B1YnMvZXh0ZXJuYWwvYXVmb3JtYXQuaHRtbAotICAgKiBodHRwOi8vYXN0cm9ub215LnN3aW4uZWR1LmF1L35wYm91cmtlL2RhdGFmb3JtYXRzL2F1LwotICAgKiBTb2xhcmlzIGhlYWRlcnMgOiAvdXNyL2luY2x1ZGUvYXVkaW8vYXUuaAotICAgKiBsaWJzbmRmaWxlIDogc3JjL2F1LmMKLSAgICoKLSAgICogU2FtcGxlcyA6Ci0gICAqIGh0dHA6Ly93d3cudHNwLmVjZS5tY2dpbGwuY2EvTU1TUC9Eb2N1bWVudHMvQXVkaW9Gb3JtYXRzL0FVL1NhbXBsZXMuaHRtbAotICAgKi8KLQotICBzd2l0Y2ggKGF1cGFyc2UtPmVuY29kaW5nKSB7Ci0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogOC1iaXQgSVNETiBtdS1sYXcgRy43MTEgKi8KLSAgICAgIGxhdyA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI3OiAgICAgICAgICAgICAgICAgICAvKiA4LWJpdCBJU0ROICBBLWxhdyBHLjcxMSAqLwotICAgICAgbGF3ID0gMjsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgLyogIDgtYml0IGxpbmVhciBQQ00sIEZJWE1FIHNpZ25lZD8gKi8KLSAgICAgIGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfUzg7Ci0gICAgICBhdXBhcnNlLT5zYW1wbGVfc2l6ZSA9IGF1cGFyc2UtPmNoYW5uZWxzOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogMTYtYml0IGxpbmVhciBQQ00gKi8KLSAgICAgIGlmIChlbmRpYW5uZXNzID09IEdfTElUVExFX0VORElBTikKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9TMTZMRTsKLSAgICAgIGVsc2UKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9TMTZCRTsKLSAgICAgIGF1cGFyc2UtPnNhbXBsZV9zaXplID0gYXVwYXJzZS0+Y2hhbm5lbHMgKiAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgLyogMjQtYml0IGxpbmVhciBQQ00gKi8KLSAgICAgIGlmIChlbmRpYW5uZXNzID09IEdfTElUVExFX0VORElBTikKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9TMjRMRTsKLSAgICAgIGVsc2UKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9TMjRCRTsKLSAgICAgIGF1cGFyc2UtPnNhbXBsZV9zaXplID0gYXVwYXJzZS0+Y2hhbm5lbHMgKiAzOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA1OiAgICAgICAgICAgICAgICAgICAgLyogMzItYml0IGxpbmVhciBQQ00gKi8KLSAgICAgIGlmIChlbmRpYW5uZXNzID09IEdfTElUVExFX0VORElBTikKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9TMzJMRTsKLSAgICAgIGVsc2UKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9TMzJCRTsKLSAgICAgIGF1cGFyc2UtPnNhbXBsZV9zaXplID0gYXVwYXJzZS0+Y2hhbm5lbHMgKiA0OwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAvKiAzMi1iaXQgSUVFRSBmbG9hdGluZyBwb2ludCAqLwotICAgICAgaWYgKGVuZGlhbm5lc3MgPT0gR19MSVRUTEVfRU5ESUFOKQotICAgICAgICBmb3JtYXQgPSBHU1RfQVVESU9fRk9STUFUX0YzMkxFOwotICAgICAgZWxzZQotICAgICAgICBmb3JtYXQgPSBHU1RfQVVESU9fRk9STUFUX0YzMkJFOwotICAgICAgYXVwYXJzZS0+c2FtcGxlX3NpemUgPSBhdXBhcnNlLT5jaGFubmVscyAqIDQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDc6ICAgICAgICAgICAgICAgICAgICAvKiA2NC1iaXQgSUVFRSBmbG9hdGluZyBwb2ludCAqLwotICAgICAgaWYgKGVuZGlhbm5lc3MgPT0gR19MSVRUTEVfRU5ESUFOKQotICAgICAgICBmb3JtYXQgPSBHU1RfQVVESU9fRk9STUFUX0Y2NExFOwotICAgICAgZWxzZQotICAgICAgICBmb3JtYXQgPSBHU1RfQVVESU9fRk9STUFUX0Y2NEJFOwotICAgICAgYXVwYXJzZS0+c2FtcGxlX3NpemUgPSBhdXBhcnNlLT5jaGFubmVscyAqIDg7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgMjM6ICAgICAgICAgICAgICAgICAgIC8qIDQtYml0IENDSVRUIEcuNzIxICAgQURQQ00gMzJrYnBzIC0+IG1vZHBsdWcvbGlic25kZmlsZSAoY29tcHJlc3NlZCA4LWJpdCBtdS1sYXcpICovCi0gICAgICBzdHJjcHkgKGxheW91dCwgImc3MjEiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgIC8qIDgtYml0IENDSVRUIEcuNzIyICAgQURQQ00gICAgICAgIC0+IHJ0cCAqLwotICAgICAgc3RyY3B5IChsYXlvdXQsICJnNzIyIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI1OiAgICAgICAgICAgICAgICAgICAvKiAzLWJpdCBDQ0lUVCBHLjcyMy4zIEFEUENNIDI0a2JwcyAtPiBydHAveGluZS9tb2RwbHVnL2xpYnNuZGZpbGUgKi8KLSAgICAgIHN0cmNweSAobGF5b3V0LCAiZzcyM18zIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAvKiA1LWJpdCBDQ0lUVCBHLjcyMy41IEFEUENNIDQwa2JwcyAtPiBydHAveGluZS9tb2RwbHVnL2xpYnNuZGZpbGUgKi8KLSAgICAgIHN0cmNweSAobGF5b3V0LCAiZzcyM181Iik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgIC8qIEZyYWdtZW50ZWQgc2FtcGxlIGRhdGEgKi8KLSAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAvKiBBVV9FTkNPRElOR19ORVNURUQgKi8KLQotICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgIC8qIERTUCBwcm9ncmFtICovCi0gICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgLyogRFNQICA4LWJpdCBmaXhlZCBwb2ludCAqLwotICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgIC8qIERTUCAxNi1iaXQgZml4ZWQgcG9pbnQgKi8KLSAgICBjYXNlIDEzOiAgICAgICAgICAgICAgICAgICAvKiBEU1AgMjQtYml0IGZpeGVkIHBvaW50ICovCi0gICAgY2FzZSAxNDogICAgICAgICAgICAgICAgICAgLyogRFNQIDMyLWJpdCBmaXhlZCBwb2ludCAqLwotCi0gICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgLyogQVVfRU5DT0RJTkdfRElTUExBWSA6IG5vbi1hdWRpbyBkaXNwbGF5IGRhdGEgKi8KLSAgICBjYXNlIDE3OiAgICAgICAgICAgICAgICAgICAvKiBBVV9FTkNPRElOR19NVUxBV19TUVVFTENIICovCi0KLSAgICBjYXNlIDE4OiAgICAgICAgICAgICAgICAgICAvKiAxNi1iaXQgbGluZWFyIHdpdGggZW1waGFzaXMgKi8KLSAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAvKiAxNi1iaXQgbGluZWFyIGNvbXByZXNzZWQgKE5lWFQpICovCi0gICAgY2FzZSAyMDogICAgICAgICAgICAgICAgICAgLyogMTYtYml0IGxpbmVhciB3aXRoIGVtcGhhc2lzIGFuZCBjb21wcmVzc2lvbiAqLwotCi0gICAgY2FzZSAyMTogICAgICAgICAgICAgICAgICAgLyogTXVzaWMga2l0IERTUCBjb21tYW5kcyAqLwotICAgIGNhc2UgMjI6ICAgICAgICAgICAgICAgICAgIC8qIE11c2ljIGtpdCBEU1AgY29tbWFuZHMgc2FtcGxlcyAqLwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGdvdG8gdW5rbm93bl9mb3JtYXQ7Ci0gIH0KLQotICBpZiAobGF3KSB7Ci0gICAgdGVtcGNhcHMgPQotICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgobGF3ID09IDEpID8gImF1ZGlvL3gtbXVsYXciIDogImF1ZGlvL3gtYWxhdyIsCi0gICAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgYXVwYXJzZS0+c2FtcGxlcmF0ZSwKLSAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgYXVwYXJzZS0+Y2hhbm5lbHMsIE5VTEwpOwotICAgIGF1cGFyc2UtPnNhbXBsZV9zaXplID0gYXVwYXJzZS0+Y2hhbm5lbHM7Ci0gIH0gZWxzZSBpZiAoZm9ybWF0ICE9IEdTVF9BVURJT19GT1JNQVRfVU5LTk9XTikgewotICAgIEdzdENhcHMgKnRlbXBsX2NhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoYXVwYXJzZS0+c3JjcGFkKTsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICB0ZW1wY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBnc3RfYXVkaW9fZm9ybWF0X3RvX3N0cmluZyAoZm9ybWF0KSwKLSAgICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCBhdXBhcnNlLT5zYW1wbGVyYXRlLAotICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBhdXBhcnNlLT5jaGFubmVscywgTlVMTCk7Ci0KLSAgICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRlbXBjYXBzLCB0ZW1wbF9jYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbF9jYXBzKTsKLSAgICB0ZW1wY2FwcyA9IGludGVyc2VjdGlvbjsKLSAgfSBlbHNlIGlmIChsYXlvdXRbMF0pIHsKLSAgICB0ZW1wY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWFkcGNtIiwKLSAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsIGxheW91dCwgTlVMTCk7Ci0gICAgYXVwYXJzZS0+c2FtcGxlX3NpemUgPSAwOwotICB9IGVsc2UKLSAgICBnb3RvIHVua25vd25fZm9ybWF0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF1cGFyc2UsICJzYW1wbGVfc2l6ZT0lZCIsIGF1cGFyc2UtPnNhbXBsZV9zaXplKTsKLQotICBnc3RfYXVfcGFyc2VfbmVnb3RpYXRlX3NyY3BhZCAoYXVwYXJzZSwgdGVtcGNhcHMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF1cGFyc2UsICJvZmZzZXQ9JSIgR19HSU5UNjRfRk9STUFULCBhdXBhcnNlLT5vZmZzZXQpOwotICBnc3RfYWRhcHRlcl91bm1hcCAoYXVwYXJzZS0+YWRhcHRlcik7Ci0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhdXBhcnNlLT5hZGFwdGVyLCBhdXBhcnNlLT5vZmZzZXQpOwotCi0gIGdzdF9jYXBzX3VucmVmICh0ZW1wY2Fwcyk7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXVua25vd25faGVhZGVyOgotICB7Ci0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGF1cGFyc2UtPmFkYXB0ZXIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdXBhcnNlLCBTVFJFQU0sIFdST05HX1RZUEUsIChOVUxMKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXVuc3VwcG9ydGVkX3NhbXBsZV9yYXRlOgotICB7Ci0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGF1cGFyc2UtPmFkYXB0ZXIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdXBhcnNlLCBTVFJFQU0sIEZPUk1BVCwgKE5VTEwpLAotICAgICAgICAoIlVuc3VwcG9ydGVkIHNhbXBsZXJhdGU6ICV1IiwgYXVwYXJzZS0+c2FtcGxlcmF0ZSkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotdW5zdXBwb3J0ZWRfbnVtYmVyX29mX2NoYW5uZWxzOgotICB7Ci0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGF1cGFyc2UtPmFkYXB0ZXIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdXBhcnNlLCBTVFJFQU0sIEZPUk1BVCwgKE5VTEwpLAotICAgICAgICAoIlVuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVsczogJXUiLCBhdXBhcnNlLT5jaGFubmVscykpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotdW5rbm93bl9mb3JtYXQ6Ci0gIHsKLSAgICBnc3RfYWRhcHRlcl91bm1hcCAoYXVwYXJzZS0+YWRhcHRlcik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF1cGFyc2UsIFNUUkVBTSwgRk9STUFULCAoTlVMTCksCi0gICAgICAgICgiVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6ICV1IiwgYXVwYXJzZS0+ZW5jb2RpbmcpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotI2RlZmluZSBBVV9IRUFERVJfU0laRSAyNAotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F1X3BhcnNlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RBdVBhcnNlICphdXBhcnNlOwotICBnaW50IGF2YWlsLCBzZW5kbm93ID0gMDsKLSAgZ2ludDY0IHRpbWVzdGFtcDsKLSAgZ2ludDY0IGR1cmF0aW9uOwotICBnaW50NjQgb2Zmc2V0OwotCi0gIGF1cGFyc2UgPSBHU1RfQVVfUEFSU0UgKHBhcmVudCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGF1cGFyc2UsICJnb3QgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKLQotICBnc3RfYWRhcHRlcl9wdXNoIChhdXBhcnNlLT5hZGFwdGVyLCBidWYpOwotICBidWYgPSBOVUxMOwotCi0gIC8qIGlmIHdlIGhhdmVuJ3Qgc2VlbiBhbnkgZGF0YSB5ZXQuLi4gKi8KLSAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKGF1cGFyc2UtPnNyY3BhZCkpIHsKLSAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhdXBhcnNlLT5hZGFwdGVyKSA8IEFVX0hFQURFUl9TSVpFKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdXBhcnNlLCAibmVlZCBtb3JlIGRhdGEgdG8gcGFyc2UgaGVhZGVyIik7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIHJldCA9IGdzdF9hdV9wYXJzZV9wYXJzZV9oZWFkZXIgKGF1cGFyc2UpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIG91dDsKLQotICAgIGlmIChhdXBhcnNlLT5uZWVkX3NlZ21lbnQpIHsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoYXVwYXJzZS0+c3JjcGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmF1cGFyc2UtPnNlZ21lbnQpKTsKLSAgICAgIGF1cGFyc2UtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotICAgIH0KLSAgfQotCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhdXBhcnNlLT5hZGFwdGVyKTsKLQotICBpZiAoYXVwYXJzZS0+c2FtcGxlX3NpemUgPiAwKSB7Ci0gICAgLyogRW5zdXJlIHdlIHB1c2ggYSBidWZmZXIgdGhhdCdzIGEgbXVsdGlwbGUgb2YgdGhlIGZyYW1lIHNpemUgZG93bnN0cmVhbSAqLwotICAgIHNlbmRub3cgPSBhdmFpbCAtIChhdmFpbCAlIGF1cGFyc2UtPnNhbXBsZV9zaXplKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJdCdzIHNvbWV0aGluZyBub24tdHJpdmlhbCAoc3VjaCBhcyBBRFBDTSksIHdlIGRvbid0IHVuZGVyc3RhbmQgaXQsIHNvCi0gICAgICoganVzdCBwdXNoIGRvd25zdHJlYW0gYW5kIGFzc3VtZSBpdCB3aWxsIGtub3cgd2hhdCB0byBkbyB3aXRoIGl0ICovCi0gICAgc2VuZG5vdyA9IGF2YWlsOwotICB9Ci0KLSAgaWYgKHNlbmRub3cgPiAwKSB7Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0gICAgZ2ludDY0IHBvczsKLQotICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhdXBhcnNlLT5hZGFwdGVyLCBzZW5kbm93KTsKLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKG91dGJ1Zik7Ci0KLSAgICBwb3MgPSBhdXBhcnNlLT5idWZmZXJfb2Zmc2V0IC0gYXVwYXJzZS0+b2Zmc2V0OwotICAgIHBvcyA9IE1BWCAocG9zLCAwKTsKLQotICAgIGlmIChhdXBhcnNlLT5zYW1wbGVfc2l6ZSA+IDAgJiYgYXVwYXJzZS0+c2FtcGxlcmF0ZSA+IDApIHsKLSAgICAgIGdzdF9hdV9wYXJzZV9zcmNfY29udmVydCAoYXVwYXJzZSwgR1NUX0ZPUk1BVF9CWVRFUywgcG9zLAotICAgICAgICAgIEdTVF9GT1JNQVRfREVGQVVMVCwgJm9mZnNldCk7Ci0gICAgICBnc3RfYXVfcGFyc2Vfc3JjX2NvbnZlcnQgKGF1cGFyc2UsIEdTVF9GT1JNQVRfQllURVMsIHBvcywKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZ0aW1lc3RhbXApOwotICAgICAgZ3N0X2F1X3BhcnNlX3NyY19jb252ZXJ0IChhdXBhcnNlLCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgICAgIHNlbmRub3csIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9uKTsKLQotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZikgPSBvZmZzZXQ7Ci0gICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IHRpbWVzdGFtcDsKLSAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBkdXJhdGlvbjsKLSAgICB9Ci0KLSAgICBhdXBhcnNlLT5idWZmZXJfb2Zmc2V0ICs9IHNlbmRub3c7Ci0KLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKGF1cGFyc2UtPnNyY3BhZCwgb3V0YnVmKTsKLSAgfQotCi1vdXQ6Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXVfcGFyc2Vfc3JjX2NvbnZlcnQgKEdzdEF1UGFyc2UgKiBhdXBhcnNlLCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwKLSAgICBnaW50NjQgc3JjdmFsLCBHc3RGb3JtYXQgZGVzdF9mb3JtYXQsIGdpbnQ2NCAqIGRlc3R2YWwpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIGd1aW50IHNhbXBsZXNpemUsIHJhdGU7Ci0KLSAgaWYgKGRlc3RfZm9ybWF0ID09IHNyY19mb3JtYXQpIHsKLSAgICAqZGVzdHZhbCA9IHNyY3ZhbDsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYXVwYXJzZSk7Ci0gIHNhbXBsZXNpemUgPSBhdXBhcnNlLT5zYW1wbGVfc2l6ZTsKLSAgcmF0ZSA9IGF1cGFyc2UtPnNhbXBsZXJhdGU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChhdXBhcnNlKTsKLQotICBpZiAoc2FtcGxlc2l6ZSA9PSAwIHx8IHJhdGUgPT0gMCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChhdXBhcnNlLCAiY2Fubm90IGNvbnZlcnQsIHNhbXBsZV9zaXplIG9yIHJhdGUgdW5rbm93biIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHN3aXRjaCAoc3JjX2Zvcm1hdCkgewotICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgIHNyY3ZhbCAvPSBzYW1wbGVzaXplOwotICAgICAgLyogZmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDp7Ci0gICAgICBzd2l0Y2ggKGRlc3RfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgotICAgICAgICAgICpkZXN0dmFsID0gc3JjdmFsOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgKmRlc3R2YWwgPSBzcmN2YWwgKiBzYW1wbGVzaXplOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICAqZGVzdHZhbCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNyY3ZhbCwgR1NUX1NFQ09ORCwgcmF0ZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6ewotICAgICAgc3dpdGNoIChkZXN0X2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgKmRlc3R2YWwgPSBzYW1wbGVzaXplICoKLSAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoc3JjdmFsLCByYXRlLCBHU1RfU0VDT05EKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgICAgICAgKmRlc3R2YWwgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzcmN2YWwsIHJhdGUsIEdTVF9TRUNPTkQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6ewotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXJldCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF1cGFyc2UsICJjb3VsZCBub3QgY29udmVydCBmcm9tICVzIHRvICVzIGZvcm1hdCIsCi0gICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNyY19mb3JtYXQpLCBnc3RfZm9ybWF0X2dldF9uYW1lIChkZXN0X2Zvcm1hdCkpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXVfcGFyc2Vfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0QXVQYXJzZSAqYXVwYXJzZTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgYXVwYXJzZSA9IEdTVF9BVV9QQVJTRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjp7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IGxlbiwgdmFsOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLSAgICAgIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChhdXBhcnNlLT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgICAgICAgICAmbGVuKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdXBhcnNlLCAiZmFpbGVkIHRvIHF1ZXJ5IHVwc3RyZWFtIGxlbmd0aCIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYXVwYXJzZSk7Ci0gICAgICBsZW4gLT0gYXVwYXJzZS0+b2Zmc2V0OwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGF1cGFyc2UpOwotCi0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9hdV9wYXJzZV9zcmNfY29udmVydCAoYXVwYXJzZSwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuLCBmb3JtYXQsCi0gICAgICAgICAgJnZhbCk7Ci0KLSAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIGZvcm1hdCwgdmFsKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjp7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IHBvcywgdmFsOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLSAgICAgIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5X3Bvc2l0aW9uIChhdXBhcnNlLT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgICAgICAgICAmcG9zKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdXBhcnNlLCAiZmFpbGVkIHRvIHF1ZXJ5IHVwc3RyZWFtIHBvc2l0aW9uIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9MT0NLIChhdXBhcnNlKTsKLSAgICAgIHBvcyAtPSBhdXBhcnNlLT5vZmZzZXQ7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYXVwYXJzZSk7Ci0KLSAgICAgIHJldCA9IGdzdF9hdV9wYXJzZV9zcmNfY29udmVydCAoYXVwYXJzZSwgR1NUX0ZPUk1BVF9CWVRFUywgcG9zLAotICAgICAgICAgIGZvcm1hdCwgJnZhbCk7Ci0KLSAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIGZvcm1hdCwgdmFsKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOnsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICAvKiBGSVhNRTogcXVlcnkgZHVyYXRpb24gaW4gJ2Zvcm1hdCcKLSAgICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIGZvcm1hdCwgVFJVRSwgMCwgZHVyYXRpb24pOwotICAgICAgICovCi0gICAgICBnc3RfcXVlcnlfc2V0X3NlZWtpbmcgKHF1ZXJ5LCBmb3JtYXQsIFRSVUUsIDAsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdV9wYXJzZV9oYW5kbGVfc2VlayAoR3N0QXVQYXJzZSAqIGF1cGFyc2UsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIHN0b3BfdHlwZTsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBnZG91YmxlIHJhdGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgJnJhdGUsICZmb3JtYXQsICZmbGFncywgJnN0YXJ0X3R5cGUsICZzdGFydCwKLSAgICAgICZzdG9wX3R5cGUsICZzdG9wKTsKLQotICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF1cGFyc2UsICJvbmx5IHN1cHBvcnQgc2Vla3MgaW4gVElNRSBmb3JtYXQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXMgPSBnc3RfYXVfcGFyc2Vfc3JjX2NvbnZlcnQgKGF1cGFyc2UsIEdTVF9GT1JNQVRfVElNRSwgc3RhcnQsCi0gICAgICBHU1RfRk9STUFUX0JZVEVTLCAmc3RhcnQpOwotCi0gIGlmIChzdG9wID4gMCkgewotICAgIHJlcyA9IGdzdF9hdV9wYXJzZV9zcmNfY29udmVydCAoYXVwYXJzZSwgR1NUX0ZPUk1BVF9USU1FLCBzdG9wLAotICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCAmc3RvcCk7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKGF1cGFyc2UsCi0gICAgICAic2Vla2luZzogJSIgR19HSU5UNjRfRk9STUFUICIgLi4uICUiIEdfR0lOVDY0X0ZPUk1BVCwgc3RhcnQsIHN0b3ApOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrIChyYXRlLCBHU1RfRk9STUFUX0JZVEVTLCBmbGFncywgc3RhcnRfdHlwZSwgc3RhcnQsCi0gICAgICBzdG9wX3R5cGUsIHN0b3ApOwotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGF1cGFyc2UtPnNpbmtwYWQsIGV2ZW50KTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXVfcGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEF1UGFyc2UgKmF1cGFyc2U7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgYXVwYXJzZSA9IEdTVF9BVV9QQVJTRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIC8qIGRpc2NhcmQsIHdlJ2xsIGNvbWUgdXAgd2l0aCBwcm9wZXIgc3JjIGNhcHMgKi8KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wLCBvZmZzZXQgPSAwOwotICAgICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgICAvKiBzb21lIGRlYnVnIG91dHB1dCAqLwotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF1cGFyc2UsICJyZWNlaXZlZCBuZXdzZWdtZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICAmc2VnbWVudCk7Ci0KLSAgICAgIHN0YXJ0ID0gc2VnbWVudC5zdGFydDsKLSAgICAgIHN0b3AgPSBzZWdtZW50LnN0b3A7Ci0gICAgICBpZiAoYXVwYXJzZS0+c2FtcGxlX3NpemUgPiAwKSB7Ci0gICAgICAgIGlmIChzdGFydCA+IDApIHsKLSAgICAgICAgICBvZmZzZXQgPSBzdGFydDsKLSAgICAgICAgICBzdGFydCAtPSBhdXBhcnNlLT5vZmZzZXQ7Ci0gICAgICAgICAgc3RhcnQgPSBNQVggKHN0YXJ0LCAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RvcCA+IDApIHsKLSAgICAgICAgICBzdG9wIC09IGF1cGFyc2UtPm9mZnNldDsKLSAgICAgICAgICBzdG9wID0gTUFYIChzdG9wLCAwKTsKLSAgICAgICAgfQotICAgICAgICBnc3RfYXVfcGFyc2Vfc3JjX2NvbnZlcnQgKGF1cGFyc2UsIEdTVF9GT1JNQVRfQllURVMsIHN0YXJ0LAotICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAmc3RhcnQpOwotICAgICAgICBnc3RfYXVfcGFyc2Vfc3JjX2NvbnZlcnQgKGF1cGFyc2UsIEdTVF9GT1JNQVRfQllURVMsIHN0b3AsCi0gICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsICZzdG9wKTsKLSAgICAgIH0KLQotICAgICAgR1NUX0lORk9fT0JKRUNUIChhdXBhcnNlLAotICAgICAgICAgICJuZXcgc2VnbWVudDogJSIgR1NUX1RJTUVfRk9STUFUICIgLi4uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChzdGFydCksIEdTVF9USU1FX0FSR1MgKHN0b3ApKTsKLQotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICBzZWdtZW50LnN0YXJ0ID0gc2VnbWVudC50aW1lID0gc3RhcnQ7Ci0gICAgICBzZWdtZW50LnN0b3AgPSBzdG9wOwotCi0gICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCZzZWdtZW50LCAmYXVwYXJzZS0+c2VnbWVudCk7Ci0KLSAgICAgIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChhdXBhcnNlLT5zcmNwYWQpKSB7Ci0gICAgICAgIGF1cGFyc2UtPm5lZWRfc2VnbWVudCA9IFRSVUU7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhdXBhcnNlLT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChhdXBhcnNlLT5zcmNwYWQsCi0gICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0gICAgICB9Ci0KLSAgICAgIGF1cGFyc2UtPmJ1ZmZlcl9vZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIGlmICghYXVwYXJzZS0+c3JjcGFkKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdXBhcnNlLCBTVFJFQU0sIFdST05HX1RZUEUsCi0gICAgICAgICAgICAoIk5vIHZhbGlkIGlucHV0IGZvdW5kIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIiksIChOVUxMKSk7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdV9wYXJzZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RBdVBhcnNlICphdXBhcnNlOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgYXVwYXJzZSA9IEdTVF9BVV9QQVJTRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgcmV0ID0gZ3N0X2F1X3BhcnNlX2hhbmRsZV9zZWVrIChhdXBhcnNlLCBldmVudCk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2F1X3BhcnNlX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdEF1UGFyc2UgKmF1cGFyc2UgPSBHU1RfQVVfUEFSU0UgKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIHJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9hdV9wYXJzZV9yZXNldCAoYXVwYXJzZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdXBhcnNlIiwgR1NUX1JBTktfU0VDT05EQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0FVX1BBUlNFKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgYXVwYXJzZSwKLSAgICAicGFyc2VzIGF1IHN0cmVhbXMiLCBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLAotICAgIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9hdXBhcnNlL2dzdGF1cGFyc2UuaCBiL2dzdC9hdXBhcnNlL2dzdGF1cGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhMDk5NS4uMDAwMDAwMAotLS0gYS9nc3QvYXVwYXJzZS9nc3RhdXBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9BVV9QQVJTRV9IX18KLSNkZWZpbmUgX19HU1RfQVVfUEFSU0VfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVX1BBUlNFIFwKLSAgKGdzdF9hdV9wYXJzZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVVfUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9BVV9QQVJTRSxHc3RBdVBhcnNlKSkKLSNkZWZpbmUgR1NUX0FVX1BBUlNFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FVX1BBUlNFLEdzdEF1UGFyc2VDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVV9QQVJTRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FVX1BBUlNFKSkKLSNkZWZpbmUgR1NUX0lTX0FVX1BBUlNFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FVX1BBUlNFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1UGFyc2UgR3N0QXVQYXJzZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RBdVBhcnNlQ2xhc3MgR3N0QXVQYXJzZUNsYXNzOwotCi1zdHJ1Y3QgX0dzdEF1UGFyc2UgewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICAgICAqc2lua3BhZDsKLSAgR3N0UGFkICAgICAqc3JjcGFkOwotCi0gIEdzdENhcHMgICAgKnNyY19jYXBzOwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0KLSAgR3N0U2VnbWVudCAgc2VnbWVudDsKLSAgZ2Jvb2xlYW4gICAgbmVlZF9zZWdtZW50OwotCi0gIGdpbnQ2NCAgICAgIG9mZnNldDsgICAgICAgIC8qIHdoZXJlIHNhbXBsZSBkYXRhIHN0YXJ0cyAqLwotICBnaW50NjQgICAgICBidWZmZXJfb2Zmc2V0OwotICBndWludCAgICAgICBzYW1wbGVfc2l6ZTsKLSAgZ3VpbnQgICAgICAgZW5jb2Rpbmc7Ci0gIGd1aW50ICAgICAgIHNhbXBsZXJhdGU7Ci0gIGd1aW50ICAgICAgIGNoYW5uZWxzOwotfTsKLQotc3RydWN0IF9Hc3RBdVBhcnNlQ2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2F1X3BhcnNlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FVX1BBUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUuYW0gYi9nc3QvYXV0b2RldGVjdC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxNWM0Yi4uMDAwMDAwMAotLS0gYS9nc3QvYXV0b2RldGVjdC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGF1dG9kZXRlY3QubGEKLQotbGliZ3N0YXV0b2RldGVjdF9sYV9TT1VSQ0VTID0gXAotCWdzdGF1dG9hdWRpb3NpbmsuYyBcCi0JZ3N0YXV0b2F1ZGlvc3JjLmMgXAotCWdzdGF1dG9kZXRlY3QuYyBcCi0JZ3N0YXV0b3ZpZGVvc2luay5jIFwKLQlnc3RhdXRvdmlkZW9zcmMuYwotbGliZ3N0YXV0b2RldGVjdF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpCi1saWJnc3RhdXRvZGV0ZWN0X2xhX0xJQkFERCA9ICQoR1NUX0xJQlMpCi1saWJnc3RhdXRvZGV0ZWN0X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGF1dG9kZXRlY3RfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBcCi0JZ3N0YXV0b2F1ZGlvc2luay5oIFwKLQlnc3RhdXRvYXVkaW9zcmMuaCBcCi0JZ3N0YXV0b2RldGVjdC5oIFwKLQlnc3RhdXRvdmlkZW9zaW5rLmggXAotCWdzdGF1dG92aWRlb3NyYy5oCmRpZmYgLS1naXQgYS9nc3QvYXV0b2RldGVjdC9NYWtlZmlsZS5pbiBiL2dzdC9hdXRvZGV0ZWN0L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRlYzU0Li4wMDAwMDAwCi0tLSBhL2dzdC9hdXRvZGV0ZWN0L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTU3ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9hdXRvZGV0ZWN0Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0YXV0b2RldGVjdF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGF1dG9kZXRlY3RfbGFfT0JKRUNUUyA9ICBcCi0JbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zaW5rLmxvIFwKLQlsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NyYy5sbyBcCi0JbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvZGV0ZWN0LmxvIFwKLQlsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG92aWRlb3NpbmsubG8gXAotCWxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc3JjLmxvCi1saWJnc3RhdXRvZGV0ZWN0X2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGF1dG9kZXRlY3RfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGF1dG9kZXRlY3RfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0YXV0b2RldGVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0YXV0b2RldGVjdF9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RhdXRvZGV0ZWN0LmxhCi1saWJnc3RhdXRvZGV0ZWN0X2xhX1NPVVJDRVMgPSBcCi0JZ3N0YXV0b2F1ZGlvc2luay5jIFwKLQlnc3RhdXRvYXVkaW9zcmMuYyBcCi0JZ3N0YXV0b2RldGVjdC5jIFwKLQlnc3RhdXRvdmlkZW9zaW5rLmMgXAotCWdzdGF1dG92aWRlb3NyYy5jCi0KLWxpYmdzdGF1dG9kZXRlY3RfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotbGliZ3N0YXV0b2RldGVjdF9sYV9MSUJBREQgPSAkKEdTVF9MSUJTKQotbGliZ3N0YXV0b2RldGVjdF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhdXRvZGV0ZWN0X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RhdXRvYXVkaW9zaW5rLmggXAotCWdzdGF1dG9hdWRpb3NyYy5oIFwKLQlnc3RhdXRvZGV0ZWN0LmggXAotCWdzdGF1dG92aWRlb3NpbmsuaCBcCi0JZ3N0YXV0b3ZpZGVvc3JjLmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F1dG9kZXRlY3QvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RhdXRvZGV0ZWN0LmxhOiAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfT0JKRUNUUykgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RhdXRvZGV0ZWN0X2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX09CSkVDVFMpICQobGliZ3N0YXV0b2RldGVjdF9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2F1ZGlvc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2F1ZGlvc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvZGV0ZWN0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zcmMuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2F1ZGlvc2luay5sbzogZ3N0YXV0b2F1ZGlvc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXV0b2RldGVjdF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2F1ZGlvc2luay5UcG8gLWMgLW8gbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zaW5rLmxvIGB0ZXN0IC1mICdnc3RhdXRvYXVkaW9zaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF1dG9hdWRpb3NpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zaW5rLlRwbyAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGF1dG9hdWRpb3NpbmsuYycgb2JqZWN0PSdsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zaW5rLmxvIGB0ZXN0IC1mICdnc3RhdXRvYXVkaW9zaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF1dG9hdWRpb3NpbmsuYwotCi1saWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NyYy5sbzogZ3N0YXV0b2F1ZGlvc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2F1ZGlvc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NyYy5UcG8gLWMgLW8gbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zcmMubG8gYHRlc3QgLWYgJ2dzdGF1dG9hdWRpb3NyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdXRvYXVkaW9zcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvYXVkaW9zcmMuVHBvICQoREVQRElSKS9saWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RhdXRvYXVkaW9zcmMuYycgb2JqZWN0PSdsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXV0b2RldGVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9hdWRpb3NyYy5sbyBgdGVzdCAtZiAnZ3N0YXV0b2F1ZGlvc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF1dG9hdWRpb3NyYy5jCi0KLWxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2RldGVjdC5sbzogZ3N0YXV0b2RldGVjdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXV0b2RldGVjdF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9kZXRlY3QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b2RldGVjdC5UcG8gLWMgLW8gbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvZGV0ZWN0LmxvIGB0ZXN0IC1mICdnc3RhdXRvZGV0ZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF1dG9kZXRlY3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvZGV0ZWN0LlRwbyAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvZGV0ZWN0LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGF1dG9kZXRlY3QuYycgb2JqZWN0PSdsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG9kZXRlY3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvZGV0ZWN0LmxvIGB0ZXN0IC1mICdnc3RhdXRvZGV0ZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF1dG9kZXRlY3QuYwotCi1saWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG92aWRlb3NpbmsubG86IGdzdGF1dG92aWRlb3NpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YXV0b2RldGVjdF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG92aWRlb3NpbmsuVHBvIC1jIC1vIGxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc2luay5sbyBgdGVzdCAtZiAnZ3N0YXV0b3ZpZGVvc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdXRvdmlkZW9zaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc2luay5UcG8gJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RhdXRvdmlkZW9zaW5rLmMnIG9iamVjdD0nbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXV0b2RldGVjdF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc2luay5sbyBgdGVzdCAtZiAnZ3N0YXV0b3ZpZGVvc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdXRvdmlkZW9zaW5rLmMKLQotbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zcmMubG86IGdzdGF1dG92aWRlb3NyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXV0b2RldGVjdF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhdXRvZGV0ZWN0X2xhLWdzdGF1dG92aWRlb3NyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zcmMuVHBvIC1jIC1vIGxpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc3JjLmxvIGB0ZXN0IC1mICdnc3RhdXRvdmlkZW9zcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXV0b3ZpZGVvc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGF1dG9kZXRlY3RfbGEtZ3N0YXV0b3ZpZGVvc3JjLlRwbyAkKERFUERJUikvbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YXV0b3ZpZGVvc3JjLmMnIG9iamVjdD0nbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhdXRvZGV0ZWN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF1dG9kZXRlY3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXV0b2RldGVjdF9sYS1nc3RhdXRvdmlkZW9zcmMubG8gYHRlc3QgLWYgJ2dzdGF1dG92aWRlb3NyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdXRvdmlkZW9zcmMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmMgYi9nc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZGY2ZDguLjAwMDAwMDAKLS0tIGEvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogKGMpIDIwMDUgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogKGMpIDIwMDYgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWF1dG9hdWRpb3NpbmsKLSAqIEBzZWVfYWxzbzogYXV0b3ZpZGVvc2luaywgYWxzYXNpbmssIG9zc3NpbmsKLSAqCi0gKiBhdXRvYXVkaW9zaW5rIGlzIGFuIGF1ZGlvIHNpbmsgdGhhdCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW4gYXBwcm9wcmlhdGUKLSAqIGF1ZGlvIHNpbmsgdG8gdXNlLiAgSXQgZG9lcyBzbyBieSBzY2FubmluZyB0aGUgcmVnaXN0cnkgZm9yIGFsbCBlbGVtZW50cwotICogdGhhdCBoYXZlIDxxdW90ZT5TaW5rPC9xdW90ZT4gYW5kIDxxdW90ZT5BdWRpbzwvcXVvdGU+IGluIHRoZSBjbGFzcyBmaWVsZAotICogb2YgdGhlaXIgZWxlbWVudCBpbmZvcm1hdGlvbiwgYW5kIGFsc28gaGF2ZSBhIG5vbi16ZXJvIGF1dG9wbHVnZ2luZyByYW5rLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiAtbSBhdWRpb3Rlc3RzcmMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YXV0b2F1ZGlvc2luay5oIgotCi0jZGVmaW5lIERFRkFVTFRfVFNfT0ZGU0VUICAgICAgICAgICAwCi0KLS8qIFByb3BlcnRpZXMgKi8KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1RTX09GRlNFVCwKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdXRvX2F1ZGlvX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1dG9fYXVkaW9fc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXV0b19hdWRpb19zaW5rX2NvbmZpZ3VyZSAoR3N0QXV0b0RldGVjdCAqIGF1dG9kZXRlY3QsCi0gICAgR3N0RWxlbWVudCAqIGtpZCk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdEF1dG9BdWRpb1NpbmssIGdzdF9hdXRvX2F1ZGlvX3NpbmssIEdTVF9UWVBFX0FVVE9fREVURUNUKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIHZvaWQKLWdzdF9hdXRvX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCAoR3N0QXV0b0F1ZGlvU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QXV0b0RldGVjdENsYXNzICpha2xhc3MgPSBHU1RfQVVUT19ERVRFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXV0b19hdWRpb19zaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2F1dG9fYXVkaW9fc2lua19nZXRfcHJvcGVydHk7Ci0KLSAgYWtsYXNzLT5jb25maWd1cmUgPSBnc3RfYXV0b19hdWRpb19zaW5rX2NvbmZpZ3VyZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RTX09GRlNFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQ2NCAoInRzLW9mZnNldCIsICJUUyBPZmZzZXQiLAotICAgICAgICAgICJUaW1lc3RhbXAgb2Zmc2V0IGluIG5hbm9zZWNvbmRzIiwgR19NSU5JTlQ2NCwgR19NQVhJTlQ2NCwKLSAgICAgICAgICBERUZBVUxUX1RTX09GRlNFVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVrbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChla2xhc3MsICJBdXRvIGF1ZGlvIHNpbmsiLAotICAgICAgIlNpbmsvQXVkaW8iLAotICAgICAgIldyYXBwZXIgYXVkaW8gc2luayBmb3IgYXV0b21hdGljYWxseSBkZXRlY3RlZCBhdWRpbyBzaW5rIiwKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19hdWRpb19zaW5rX2luaXQgKEdzdEF1dG9BdWRpb1NpbmsgKiBzaW5rKQotewotICBHc3RBdXRvRGV0ZWN0ICphdXRvZGV0ZWN0ID0gR1NUX0FVVE9fREVURUNUIChzaW5rKTsKLQotICBhdXRvZGV0ZWN0LT5tZWRpYV9rbGFzcyA9ICJBdWRpbyI7Ci0gIGF1dG9kZXRlY3QtPmZsYWcgPSBHU1RfRUxFTUVOVF9GTEFHX1NJTks7Ci0KLSAgc2luay0+dHNfb2Zmc2V0ID0gREVGQVVMVF9UU19PRkZTRVQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19hdWRpb19zaW5rX2NvbmZpZ3VyZSAoR3N0QXV0b0RldGVjdCAqIGF1dG9kZXRlY3QsIEdzdEVsZW1lbnQgKiBraWQpCi17Ci0gIEdzdEF1dG9BdWRpb1NpbmsgKnNlbGYgPSBHU1RfQVVUT19BVURJT19TSU5LIChhdXRvZGV0ZWN0KTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChraWQpLCAidHMtb2Zmc2V0Iiwgc2VsZi0+dHNfb2Zmc2V0LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdXRvX2F1ZGlvX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1dG9BdWRpb1NpbmsgKnNpbmsgPSBHU1RfQVVUT19BVURJT19TSU5LIChvYmplY3QpOwotICBHc3RBdXRvRGV0ZWN0ICphdXRvZGV0ZWN0ID0gKEdzdEF1dG9EZXRlY3QgKikgc2luazsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVFNfT0ZGU0VUOgotICAgICAgc2luay0+dHNfb2Zmc2V0ID0gZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKTsKLSAgICAgIGlmIChhdXRvZGV0ZWN0LT5raWQpCi0gICAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKGF1dG9kZXRlY3QtPmtpZCksIHBzcGVjLT5uYW1lLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19hdWRpb19zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdXRvQXVkaW9TaW5rICpzaW5rID0gR1NUX0FVVE9fQVVESU9fU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVFNfT0ZGU0VUOgotICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKHZhbHVlLCBzaW5rLT50c19vZmZzZXQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5oIGIvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGEwYjI1Li4wMDAwMDAwCi0tLSBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogKGMpIDIwMDUgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQVVUT19BVURJT19TSU5LX0hfXwotI2RlZmluZSBfX0dTVF9BVVRPX0FVRElPX1NJTktfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0YXV0b2RldGVjdC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVUT19BVURJT19TSU5LIFwKLSAgKGdzdF9hdXRvX2F1ZGlvX3NpbmtfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9BVVRPX0FVRElPX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0FVVE9fQVVESU9fU0lOSywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEF1dG9BdWRpb1NpbmspKQotI2RlZmluZSBHU1RfQVVUT19BVURJT19TSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfQVVUT19BVURJT19TSU5LLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QXV0b0F1ZGlvU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVVE9fQVVESU9fU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfQVVUT19BVURJT19TSU5LKSkKLSNkZWZpbmUgR1NUX0lTX0FVVE9fQVVESU9fU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0FVVE9fQVVESU9fU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdXRvQXVkaW9TaW5rIHsKLSAgR3N0QXV0b0RldGVjdCBwYXJlbnQ7Ci0KLSAgR3N0Q2xvY2tUaW1lRGlmZiB0c19vZmZzZXQ7Ci19IEdzdEF1dG9BdWRpb1Npbms7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdXRvQXVkaW9TaW5rQ2xhc3MgewotICBHc3RBdXRvRGV0ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfSBHc3RBdXRvQXVkaW9TaW5rQ2xhc3M7Ci0KLUdUeXBlICAgZ3N0X2F1dG9fYXVkaW9fc2lua19nZXRfdHlwZSAgICAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BVVRPX0FVRElPX1NJTktfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvYXVkaW9zcmMuYyBiL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWRkYTAwLi4wMDAwMDAwCi0tLSBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiAoYykgMjAwNSBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAoYykgMjAwNiBKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+Ci0gKiAoYykgMjAwOCBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXV0b2F1ZGlvc3JjCi0gKiBAc2VlX2Fsc286IGF1dG92aWRlb3NyYywgYWxzYXNyYywgb3Nzc3JjCi0gKgotICogYXV0b2F1ZGlvc3JjIGlzIGFuIGF1ZGlvIHNvdXJjZSB0aGF0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhbiBhcHByb3ByaWF0ZQotICogYXVkaW8gc291cmNlIHRvIHVzZS4gIEl0IGRvZXMgc28gYnkgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IGZvciBhbGwgZWxlbWVudHMKLSAqIHRoYXQgaGF2ZSA8cXVvdGU+U291cmNlPC9xdW90ZT4gYW5kIDxxdW90ZT5BdWRpbzwvcXVvdGU+IGluIHRoZSBjbGFzcyBmaWVsZAotICogb2YgdGhlaXIgZWxlbWVudCBpbmZvcm1hdGlvbiwgYW5kIGFsc28gaGF2ZSBhIG5vbi16ZXJvIGF1dG9wbHVnZ2luZyByYW5rLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiAtbSBhdXRvYXVkaW9zcmMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YXV0b2F1ZGlvc3JjLmgiCi0KLUdfREVGSU5FX1RZUEUgKEdzdEF1dG9BdWRpb1NyYywgZ3N0X2F1dG9fYXVkaW9fc3JjLCBHU1RfVFlQRV9BVVRPX0RFVEVDVCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWdzdF9hdXRvX2F1ZGlvX3NyY19jcmVhdGVfZmFrZV9lbGVtZW50IChHc3RBdXRvRGV0ZWN0ICogYXV0b2RldGVjdCkKLXsKLSAgR3N0RWxlbWVudCAqZmFrZTsKLQotICBmYWtlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgImZha2UtYXV0by1hdWRpby1zcmMiKTsKLSAgaWYgKGZha2UgIT0gTlVMTCkgewotICAgIGdfb2JqZWN0X3NldCAoZmFrZSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLSAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyAoR19PQkpFQ1QgKGZha2UpLCAid2F2ZSIsICJzaWxlbmNlIik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF1dG9kZXRlY3QsIFJFU09VUkNFLCBOT1RfRk9VTkQsCi0gICAgICAgICgiRmFpbGVkIHRvIGZpbmQgdXNhYmxlIGF1ZGlvIHNvdXJjZSBlbGVtZW50LiIpLAotICAgICAgICAoIkZhaWxlZCB0byBmaW5kIGEgdXNhYmxlIGF1ZGlvIHNvdXJjZSBhbmQgY291bGRuJ3QgY3JlYXRlIGFuIGF1ZGlvIgotICAgICAgICAgICAgInRlc3RzcmMgYXMgZmFsbGJhY2sgZWl0aGVyLCBjaGVjayB5b3VyIEdTdHJlYW1lciBpbnN0YWxsYXRpb24uIikpOwotICAgIC8qIFRoaXMgd2lsbCBlcnJvciBvdXQgd2l0aCBub3QtbmVnb3RpYXRlZC4uICovCi0gICAgZmFrZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCAiZmFrZS1hdXRvLWF1ZGlvLXNyYyIpOwotICB9Ci0gIHJldHVybiBmYWtlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1dG9fYXVkaW9fc3JjX2NsYXNzX2luaXQgKEdzdEF1dG9BdWRpb1NyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEF1dG9EZXRlY3RDbGFzcyAqYXV0b2NsYXNzID0gR1NUX0FVVE9fREVURUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWtsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWtsYXNzLCAiQXV0byBhdWRpbyBzb3VyY2UiLAotICAgICAgIlNvdXJjZS9BdWRpbyIsCi0gICAgICAiV3JhcHBlciBhdWRpbyBzb3VyY2UgZm9yIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgYXVkaW8gc291cmNlIiwKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBub3JhaXNpbi5uZXQ+LCAiCi0gICAgICAiU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PiIpOwotCi0gIGF1dG9jbGFzcy0+Y3JlYXRlX2Zha2VfZWxlbWVudCA9IGdzdF9hdXRvX2F1ZGlvX3NyY19jcmVhdGVfZmFrZV9lbGVtZW50OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1dG9fYXVkaW9fc3JjX2luaXQgKEdzdEF1dG9BdWRpb1NyYyAqIHNyYykKLXsKLSAgR3N0QXV0b0RldGVjdCAqYXV0b2RldGVjdCA9IEdTVF9BVVRPX0RFVEVDVCAoc3JjKTsKLQotICBhdXRvZGV0ZWN0LT5tZWRpYV9rbGFzcyA9ICJBdWRpbyI7Ci0gIGF1dG9kZXRlY3QtPmZsYWcgPSBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG9hdWRpb3NyYy5oIGIvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyN2NkYWUuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2F1ZGlvc3JjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIChjKSAyMDA1IFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqIChjKSAyMDA4IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FVVE9fQVVESU9fU1JDX0hfXwotI2RlZmluZSBfX0dTVF9BVVRPX0FVRElPX1NSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RhdXRvZGV0ZWN0LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9BVVRPX0FVRElPX1NSQyBcCi0gIChnc3RfYXV0b19hdWRpb19zcmNfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9BVVRPX0FVRElPX1NSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfQVVUT19BVURJT19TUkMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBdXRvQXVkaW9TcmMpKQotI2RlZmluZSBHU1RfQVVUT19BVURJT19TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9BVVRPX0FVRElPX1NSQywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEF1dG9BdWRpb1NyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FVVE9fQVVESU9fU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9BVVRPX0FVRElPX1NSQykpCi0jZGVmaW5lIEdTVF9JU19BVVRPX0FVRElPX1NSQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0FVVE9fQVVESU9fU1JDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF1dG9BdWRpb1NyYyB7Ci0gIEdzdEF1dG9EZXRlY3QgcGFyZW50OwotfSBHc3RBdXRvQXVkaW9TcmM7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdXRvQXVkaW9TcmNDbGFzcyB7Ci0gIEdzdEF1dG9EZXRlY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19IEdzdEF1dG9BdWRpb1NyY0NsYXNzOwotCi1HVHlwZSAgIGdzdF9hdXRvX2F1ZGlvX3NyY19nZXRfdHlwZSAgICAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BVVRPX0FVRElPX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG9kZXRlY3QuYyBiL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG9kZXRlY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI1NmU1Mi4uMDAwMDAwMAotLS0gYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiAoYykgMjAwNSBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdGF1dG9kZXRlY3QuaCIKLSNpbmNsdWRlICJnc3RhdXRvYXVkaW9zaW5rLmgiCi0jaW5jbHVkZSAiZ3N0YXV0b2F1ZGlvc3JjLmgiCi0jaW5jbHVkZSAiZ3N0YXV0b3ZpZGVvc2luay5oIgotI2luY2x1ZGUgImdzdGF1dG92aWRlb3NyYy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKGF1dG9kZXRlY3RfZGVidWcpOwotCi0jZGVmaW5lIERFRkFVTFRfU1lOQyAgICAgICAgICAgICAgICBUUlVFCi0KLS8qIFByb3BlcnRpZXMgKi8KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0NBUFMsCi0gIFBST1BfU1lOQywKLX07Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfYXV0b19kZXRlY3RfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyB2b2lkIGdzdF9hdXRvX2RldGVjdF9jb25zdHJ1Y3RlZCAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfYXV0b19kZXRlY3RfZGlzcG9zZSAoR09iamVjdCAqIHNlbGYpOwotc3RhdGljIHZvaWQgZ3N0X2F1dG9fZGV0ZWN0X2NsZWFyX2tpZCAoR3N0QXV0b0RldGVjdCAqIHNlbGYpOwotc3RhdGljIHZvaWQgZ3N0X2F1dG9fZGV0ZWN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdXRvX2RldGVjdF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLSNkZWZpbmUgZ3N0X2F1dG9fZGV0ZWN0X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX0FCU1RSQUNUX1RZUEUgKEdzdEF1dG9EZXRlY3QsIGdzdF9hdXRvX2RldGVjdCwgR1NUX1RZUEVfQklOKTsKLQotc3RhdGljIHZvaWQKLWdzdF9hdXRvX2RldGVjdF9jbGFzc19pbml0IChHc3RBdXRvRGV0ZWN0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IGdzdF9hdXRvX2RldGVjdF9jb25zdHJ1Y3RlZDsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9hdXRvX2RldGVjdF9kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXV0b19kZXRlY3Rfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXV0b19kZXRlY3RfZ2V0X3Byb3BlcnR5OwotCi0gIGVrbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdXRvX2RldGVjdF9jaGFuZ2Vfc3RhdGUpOwotCi0gIC8qKgotICAgKiBHc3RBdXRvRGV0ZWN0OmZpbHRlci1jYXBzOgotICAgKgotICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgZmlsdGVyIG91dCBjYW5kaWRhdGUgc2lua3MgdGhhdCBjYW4gaGFuZGxlIHRoZSBzcGVjaWZpZWQKLSAgICogY2Fwcy4gQnkgZGVmYXVsdCBvbmx5IGVsZW1lbnRzIHRoYXQgc3VwcG9ydCB1bmNvbXByZXNzZWQgZGF0YSBhcmUgc2VsZWN0ZWQuCi0gICAqCi0gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc2V0IGJlZm9yZSB0aGUgZWxlbWVudCBnb2VzIHRvIHRoZSBSRUFEWSBzdGF0ZS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FQUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImZpbHRlci1jYXBzIiwgIkZpbHRlciBjYXBzIiwKLSAgICAgICAgICAiRmlsdGVyIHNpbmsgY2FuZGlkYXRlcyB1c2luZyB0aGVzZSBjYXBzLiIsIEdTVF9UWVBFX0NBUFMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TWU5DLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzeW5jIiwgIlN5bmMiLAotICAgICAgICAgICJTeW5jIG9uIHRoZSBjbG9jayIsIERFRkFVTFRfU1lOQywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdXRvX2RldGVjdF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBdXRvRGV0ZWN0ICpzZWxmID0gR1NUX0FVVE9fREVURUNUIChvYmplY3QpOwotCi0gIGdzdF9hdXRvX2RldGVjdF9jbGVhcl9raWQgKHNlbGYpOwotCi0gIGlmIChzZWxmLT5maWx0ZXJfY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAoc2VsZi0+ZmlsdGVyX2NhcHMpOwotICBzZWxmLT5maWx0ZXJfY2FwcyA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKChHT2JqZWN0ICopIHNlbGYpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1dG9fZGV0ZWN0X2NsZWFyX2tpZCAoR3N0QXV0b0RldGVjdCAqIHNlbGYpCi17Ci0gIGlmIChzZWxmLT5raWQpIHsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbGYtPmtpZCwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChzZWxmKSwgc2VsZi0+a2lkKTsKLSAgICBzZWxmLT5raWQgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWdzdF9hdXRvX2RldGVjdF9jcmVhdGVfZmFrZV9lbGVtZW50X2RlZmF1bHQgKEdzdEF1dG9EZXRlY3QgKiBzZWxmKQotewotICBHc3RFbGVtZW50ICpmYWtlOwotICBnY2hhciBkdW1teV9mYWN0b3J5WzEwXSwgZHVtbXlfbmFtZVsyMF07Ci0KLSAgc3ByaW50ZiAoZHVtbXlfZmFjdG9yeSwgImZha2UlcyIsIHNlbGYtPnR5cGVfa2xhc3NfbGMpOwotICBzcHJpbnRmIChkdW1teV9uYW1lLCAiZmFrZS0lcy0lcyIsIHNlbGYtPm1lZGlhX2tsYXNzX2xjLCBzZWxmLT50eXBlX2tsYXNzX2xjKTsKLSAgZmFrZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoZHVtbXlfZmFjdG9yeSwgZHVtbXlfbmFtZSk7Ci0gIGdfb2JqZWN0X3NldCAoZmFrZSwgInN5bmMiLCBzZWxmLT5zeW5jLCBOVUxMKTsKLQotICByZXR1cm4gZmFrZTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotZ3N0X2F1dG9fZGV0ZWN0X2NyZWF0ZV9mYWtlX2VsZW1lbnQgKEdzdEF1dG9EZXRlY3QgKiBzZWxmKQotewotICBHc3RBdXRvRGV0ZWN0Q2xhc3MgKmtsYXNzID0gR1NUX0FVVE9fREVURUNUX0dFVF9DTEFTUyAoc2VsZik7Ci0gIEdzdEVsZW1lbnQgKmZha2U7Ci0KLSAgaWYgKGtsYXNzLT5jcmVhdGVfZmFrZV9lbGVtZW50KQotICAgIGZha2UgPSBrbGFzcy0+Y3JlYXRlX2Zha2VfZWxlbWVudCAoc2VsZik7Ci0gIGVsc2UKLSAgICBmYWtlID0gZ3N0X2F1dG9fZGV0ZWN0X2NyZWF0ZV9mYWtlX2VsZW1lbnRfZGVmYXVsdCAoc2VsZik7Ci0KLSAgcmV0dXJuIGZha2U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F1dG9fZGV0ZWN0X2F0dGFjaF9naG9zdF9wYWQgKEdzdEF1dG9EZXRlY3QgKiBzZWxmKQotewotICBHc3RQYWQgKnRhcmdldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZWxmLT5raWQsIHNlbGYtPnR5cGVfa2xhc3NfbGMpOwotICBnYm9vbGVhbiByZXMgPSBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKHNlbGYtPnBhZCksIHRhcmdldCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogSGFjayB0byBtYWtlIGluaXRpYWwgbGlua2luZyB3b3JrOyBpZGVhbGx5LCB0aGlzJ2Qgd29yayBldmVuIHdoZW4KLSAqIG5vIHRhcmdldCBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgZ2hvc3RwYWQgeWV0LiAqLwotc3RhdGljIHZvaWQKLWdzdF9hdXRvX2RldGVjdF9yZXNldCAoR3N0QXV0b0RldGVjdCAqIHNlbGYpCi17Ci0gIGdzdF9hdXRvX2RldGVjdF9jbGVhcl9raWQgKHNlbGYpOwotCi0gIC8qIHBsYWNlaG9sZGVyIGVsZW1lbnQgKi8KLSAgc2VsZi0+a2lkID0gZ3N0X2F1dG9fZGV0ZWN0X2NyZWF0ZV9mYWtlX2VsZW1lbnQgKHNlbGYpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoc2VsZiksIHNlbGYtPmtpZCk7Ci0KLSAgZ3N0X2F1dG9fZGV0ZWN0X2F0dGFjaF9naG9zdF9wYWQgKHNlbGYpOwotfQotCi1zdGF0aWMgR3N0U3RhdGljQ2FwcyByYXdfYXVkaW9fY2FwcyA9IEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3Iik7Ci1zdGF0aWMgR3N0U3RhdGljQ2FwcyByYXdfdmlkZW9fY2FwcyA9IEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtcmF3Iik7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19kZXRlY3RfaW5pdCAoR3N0QXV0b0RldGVjdCAqIHNlbGYpCi17Ci0gIHNlbGYtPnN5bmMgPSBERUZBVUxUX1NZTkM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19kZXRlY3RfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEF1dG9EZXRlY3QgKnNlbGYgPSBHU1RfQVVUT19ERVRFQ1QgKG9iamVjdCk7Ci0gIGdib29sZWFuIGlzX2F1ZGlvOwotCi0gIGlmIChHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCi0gICAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkIChvYmplY3QpOwotCi0gIGlzX2F1ZGlvID0gIWdfc3RyY21wMCAoc2VsZi0+bWVkaWFfa2xhc3MsICJBdWRpbyIpOwotICBzZWxmLT50eXBlX2tsYXNzID0gKHNlbGYtPmZsYWcgPT0gR1NUX0VMRU1FTlRfRkxBR19TSU5LKSA/ICJTaW5rIiA6ICJTb3VyY2UiOwotICBzZWxmLT50eXBlX2tsYXNzX2xjID0gKHNlbGYtPmZsYWcgPT0gR1NUX0VMRU1FTlRfRkxBR19TSU5LKSA/ICJzaW5rIiA6ICJzcmMiOwotICBzZWxmLT5tZWRpYV9rbGFzc19sYyA9IGlzX2F1ZGlvID8gImF1ZGlvIiA6ICJ2aWRlbyI7Ci0gIC8qIHNldCB0aGUgZGVmYXVsdCByYXcgY2FwcyAqLwotICBzZWxmLT5maWx0ZXJfY2FwcyA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKGlzX2F1ZGlvID8gJnJhd19hdWRpb19jYXBzIDoKLSAgICAgICZyYXdfdmlkZW9fY2Fwcyk7Ci0KLSAgc2VsZi0+cGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0IChzZWxmLT50eXBlX2tsYXNzX2xjLAotICAgICAgKHNlbGYtPmZsYWcgPT0gR1NUX0VMRU1FTlRfRkxBR19TSU5LKSA/IEdTVF9QQURfU0lOSyA6IEdTVF9QQURfU1JDKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbGYpLCBzZWxmLT5wYWQpOwotCi0gIGdzdF9hdXRvX2RldGVjdF9yZXNldCAoc2VsZik7Ci0KLSAgLyogbWFyayBlbGVtZW50IHR5cGUgKi8KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2VsZiwgc2VsZi0+ZmxhZyk7Ci0gIGdzdF9iaW5fc2V0X3N1cHByZXNzZWRfZmxhZ3MgKEdTVF9CSU4gKHNlbGYpLAotICAgICAgR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0UgfCBHU1RfRUxFTUVOVF9GTEFHX1NJTkspOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdXRvX2RldGVjdF9mYWN0b3J5X2ZpbHRlciAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdEF1dG9EZXRlY3QgKnNlbGYgPSAoR3N0QXV0b0RldGVjdCAqKSBkYXRhOwotICBndWludCByYW5rOwotICBjb25zdCBnY2hhciAqa2xhc3M7Ci0KLSAgLyogd2Ugb25seSBjYXJlIGFib3V0IGVsZW1lbnQgZmFjdG9yaWVzICovCi0gIGlmICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIGF1ZGlvIHNpbmtzICovCi0gIGtsYXNzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9nZXRfbWV0YWRhdGEgKEdTVF9FTEVNRU5UX0ZBQ1RPUlkgKGZlYXR1cmUpLAotICAgICAgR1NUX0VMRU1FTlRfTUVUQURBVEFfS0xBU1MpOwotICBpZiAoIShzdHJzdHIgKGtsYXNzLCBzZWxmLT50eXBlX2tsYXNzKSAmJiBzdHJzdHIgKGtsYXNzLCBzZWxmLT5tZWRpYV9rbGFzcykpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBvbmx5IHNlbGVjdCBlbGVtZW50cyB3aXRoIGF1dG9wbHVnZ2luZyByYW5rICovCi0gIHJhbmsgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X3JhbmsgKGZlYXR1cmUpOwotICBpZiAocmFuayA8IEdTVF9SQU5LX01BUkdJTkFMKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotY3JlYXRlX2VsZW1lbnRfd2l0aF9wcmV0dHlfbmFtZSAoR3N0QXV0b0RldGVjdCAqIHNlbGYsCi0gICAgR3N0RWxlbWVudEZhY3RvcnkgKiBmYWN0b3J5KQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBnY2hhciAqbmFtZSwgKm1hcmtlcjsKLQotICBtYXJrZXIgPSBnX3N0cmR1cCAoR1NUX09CSkVDVF9OQU1FIChmYWN0b3J5KSk7Ci0gIGlmIChnX3N0cl9oYXNfc3VmZml4IChtYXJrZXIsIHNlbGYtPnR5cGVfa2xhc3NfbGMpKQotICAgIG1hcmtlcltzdHJsZW4gKG1hcmtlcikgLSA0XSA9ICdcMCc7Ci0gIGlmIChnX3N0cl9oYXNfcHJlZml4IChtYXJrZXIsICJnc3QiKSkKLSAgICBtZW1tb3ZlIChtYXJrZXIsIG1hcmtlciArIDMsIHN0cmxlbiAobWFya2VyICsgMykgKyAxKTsKLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLWFjdHVhbC0lcy0lcyIsIEdTVF9PQkpFQ1RfTkFNRSAoc2VsZiksCi0gICAgICBzZWxmLT50eXBlX2tsYXNzX2xjLCBtYXJrZXIpOwotICBnX2ZyZWUgKG1hcmtlcik7Ci0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBuYW1lKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICByZXR1cm4gZWxlbWVudDsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotZ3N0X2F1dG9fZGV0ZWN0X2ZpbmRfYmVzdCAoR3N0QXV0b0RldGVjdCAqIHNlbGYpCi17Ci0gIEdMaXN0ICpsaXN0LCAqaXRlbTsKLSAgR3N0RWxlbWVudCAqY2hvaWNlID0gTlVMTDsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7Ci0gIEdTTGlzdCAqZXJyb3JzID0gTlVMTDsKLSAgR3N0QnVzICpidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgR3N0UGFkICplbF9wYWQgPSBOVUxMOwotICBHc3RDYXBzICplbF9jYXBzID0gTlVMTDsKLSAgZ2Jvb2xlYW4gbm9fbWF0Y2ggPSBUUlVFOwotCi0gIC8qIFdlIGRvbid0IHRyZWF0IHNvdW5kIHNlcnZlciBzaW5rcyBzcGVjaWFsLiBPdXIgcG9saWN5IGlzIHRoYXQgc291bmQKLSAgICogc2VydmVyIHNpbmtzIHRoYXQgaGF2ZSBhIHJhbmsgbXVzdCBub3QgYXV0by1zcGF3biBhIGRhZW1vbiB1bmRlciBhbnkKLSAgICogY2lyY3Vtc3RhbmNlcywgc28gdGhlcmUncyBub3RoaW5nIGZvciB1cyB0byB3b3JyeSBhYm91dCBoZXJlICovCi0gIGxpc3QgPSBnc3RfcmVnaXN0cnlfZmVhdHVyZV9maWx0ZXIgKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICAoR3N0UGx1Z2luRmVhdHVyZUZpbHRlcikgZ3N0X2F1dG9fZGV0ZWN0X2ZhY3RvcnlfZmlsdGVyLCBGQUxTRSwgc2VsZik7Ci0gIGxpc3QgPQotICAgICAgZ19saXN0X3NvcnQgKGxpc3QsIChHQ29tcGFyZUZ1bmMpIGdzdF9wbHVnaW5fZmVhdHVyZV9yYW5rX2NvbXBhcmVfZnVuYyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJUcnlpbmcgdG8gZmluZCB1c2FibGUgJXMgZWxlbWVudHMgLi4uIiwKLSAgICAgIHNlbGYtPm1lZGlhX2tsYXNzX2xjKTsKLQotICBmb3IgKGl0ZW0gPSBsaXN0OyBpdGVtICE9IE5VTEw7IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmYgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChpdGVtLT5kYXRhKTsKLSAgICBHc3RFbGVtZW50ICplbDsKLQotICAgIGlmICgoZWwgPSBjcmVhdGVfZWxlbWVudF93aXRoX3ByZXR0eV9uYW1lIChzZWxmLCBmKSkpIHsKLSAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlRlc3RpbmcgJXMiLCBHU1RfT0JKRUNUX05BTUUgKGYpKTsKLQotICAgICAgLyogSWYgYXV0b2RldGVjdCBoYXMgYmVlbiBwcm92aWRlZCB3aXRoIGZpbHRlciBjYXBzLAotICAgICAgICogYWNjZXB0IG9ubHkgZWxlbWVudHMgdGhhdCBtYXRjaCB3aXRoIHRoZSBmaWx0ZXIgY2FwcyAqLwotICAgICAgaWYgKHNlbGYtPmZpbHRlcl9jYXBzKSB7Ci0gICAgICAgIGVsX3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbCwgc2VsZi0+dHlwZV9rbGFzc19sYyk7Ci0gICAgICAgIGVsX2NhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKGVsX3BhZCwgTlVMTCk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsX3BhZCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAiQ2hlY2tpbmcgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQgIiB2cy4gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBzZWxmLT5maWx0ZXJfY2FwcywgZWxfY2Fwcyk7Ci0gICAgICAgIG5vX21hdGNoID0gIWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKHNlbGYtPmZpbHRlcl9jYXBzLCBlbF9jYXBzKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGVsX2NhcHMpOwotCi0gICAgICAgIGlmIChub19tYXRjaCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJJbmNvbXBhdGlibGUgY2FwcyIpOwotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiRm91bmQgY29tcGF0aWJsZSBjYXBzIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZWwsIGJ1cyk7Ci0gICAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsLCBHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlRoaXMgd29ya2VkISIpOwotICAgICAgICBjaG9pY2UgPSBlbDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGNvbGxlY3QgYWxsIGVycm9yIG1lc3NhZ2VzICovCi0gICAgICB3aGlsZSAoKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9FUlJPUikpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJlcnJvciBtZXNzYWdlICUiIEdTVF9QVFJfRk9STUFULCBtZXNzYWdlKTsKLSAgICAgICAgZXJyb3JzID0gZ19zbGlzdF9hcHBlbmQgKGVycm9ycywgbWVzc2FnZSk7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWwsIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsKTsKLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZG9uZSB0cnlpbmciKTsKLSAgaWYgKCFjaG9pY2UpIHsKLSAgICAvKiBXZSBwb3N0IGEgd2FybmluZyBhbmQgcGx1ZyBhIGZha2UtZWxlbWVudC4gVGhpcyBpcyBjb252ZW5pZW50IGZvciBydW5uaW5nCi0gICAgICogdGVzdHMgd2l0aG91dCByZXF1aXJpbmcgaGFyZHdhcmUgc3JjL3NpbmtzLiAqLwotICAgIGlmIChlcnJvcnMpIHsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgIGdjaGFyICpkYmcgPSBOVUxMOwotCi0gICAgICAvKiBGSVhNRTogd2UgZm9yd2FyZCB0aGUgZmlyc3QgbWVzc2FnZSBmb3Igbm93OyBidXQgbGF0ZXIgb24gaXQgbWlnaHQgbWFrZQotICAgICAgICogc2Vuc2UgdG8gZm9yd2FyZCBhbGwgc28gdGhhdCBhcHBzIGNhbiBhY3R1YWxseSBhbmFseXNlIHRoZW0uICovCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAoR1NUX01FU1NBR0UgKGVycm9ycy0+ZGF0YSksICZlcnIsICZkYmcpOwotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSwKLSAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfd2FybmluZyAoR1NUX09CSkVDVF9DQVNUIChzZWxmKSwgZXJyLCBkYmcpKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIGdfZnJlZSAoZGJnKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogc2VuZCB3YXJuaW5nIG1lc3NhZ2UgdG8gYXBwbGljYXRpb24gYW5kIHVzZSBhIGZha2VzcmMgKi8KLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNlbGYsIFJFU09VUkNFLCBOT1RfRk9VTkQsIChOVUxMKSwKLSAgICAgICAgICAoIkZhaWxlZCB0byBmaW5kIGEgdXNhYmxlICVzICVzIiwgc2VsZi0+bWVkaWFfa2xhc3NfbGMsCi0gICAgICAgICAgICAgIHNlbGYtPnR5cGVfa2xhc3NfbGMpKTsKLSAgICB9Ci0gICAgY2hvaWNlID0gZ3N0X2F1dG9fZGV0ZWN0X2NyZWF0ZV9mYWtlX2VsZW1lbnQgKHNlbGYpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY2hvaWNlLCBHU1RfU1RBVEVfUkVBRFkpOwotICB9Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKGxpc3QpOwotICBnX3NsaXN0X2ZvcmVhY2ggKGVycm9ycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX3NsaXN0X2ZyZWUgKGVycm9ycyk7Ci0KLSAgcmV0dXJuIGNob2ljZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXV0b19kZXRlY3RfZGV0ZWN0IChHc3RBdXRvRGV0ZWN0ICogc2VsZikKLXsKLSAgR3N0RWxlbWVudCAqa2lkOwotICBHc3RBdXRvRGV0ZWN0Q2xhc3MgKmtsYXNzID0gR1NUX0FVVE9fREVURUNUX0dFVF9DTEFTUyAoc2VsZik7Ci0KLSAgZ3N0X2F1dG9fZGV0ZWN0X2NsZWFyX2tpZCAoc2VsZik7Ci0KLSAgLyogZmluZCBlbGVtZW50ICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJDcmVhdGluZyBuZXcga2lkIik7Ci0gIGlmICghKGtpZCA9IGdzdF9hdXRvX2RldGVjdF9maW5kX2Jlc3QgKHNlbGYpKSkKLSAgICBnb3RvIG5vX3Npbms7Ci0KLSAgc2VsZi0+aGFzX3N5bmMgPQotICAgICAgZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoR19PQkpFQ1RfR0VUX0NMQVNTIChraWQpLCAic3luYyIpICE9IE5VTEw7Ci0gIGlmIChzZWxmLT5oYXNfc3luYykKLSAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChraWQpLCAic3luYyIsIHNlbGYtPnN5bmMsIE5VTEwpOwotICBpZiAoa2xhc3MtPmNvbmZpZ3VyZSkgewotICAgIGtsYXNzLT5jb25maWd1cmUgKHNlbGYsIGtpZCk7Ci0gIH0KLQotICBzZWxmLT5raWQgPSBraWQ7Ci0gIC8qIEVuc3VyZSB0aGUgY2hpbGQgaXMgYnJvdWdodCB1cCB0byB0aGUgcmlnaHQgc3RhdGUgdG8gbWF0Y2ggdGhlIHBhcmVudC4KLSAgICogQWx0aG91Z2ggaXQncyBjdXJyZW50bHkgYWx3YXlzIGluIFJFQURZIGFuZCB3ZSdyZSBhbHdheXMgZG9pbmcgTlVMTC0+UkVBRFkuCi0gICAqLwotICBpZiAoR1NUX1NUQVRFIChzZWxmLT5raWQpIDwgR1NUX1NUQVRFIChzZWxmKSkKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlbGYtPmtpZCwgR1NUX1NUQVRFIChzZWxmKSk7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHNlbGYpLCBraWQpOwotCi0gIC8qIGF0dGFjaCBnaG9zdCBwYWQgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlJlLWFzc2lnbmluZyBnaG9zdHBhZCIpOwotICBpZiAoIWdzdF9hdXRvX2RldGVjdF9hdHRhY2hfZ2hvc3RfcGFkIChzZWxmKSkKLSAgICBnb3RvIHRhcmdldF9mYWlsZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImRvbmUgY2hhbmdpbmcgYXV0byAlcyAlcyIsIHNlbGYtPm1lZGlhX2tsYXNzX2xjLAotICAgICAgc2VsZi0+dHlwZV9rbGFzc19sYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19zaW5rOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIExJQlJBUlksIElOSVQsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gZmluZCBhIHN1cHBvcnRlZCBhdWRpbyBzaW5rIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdGFyZ2V0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIHNldCB0YXJnZXQgcGFkIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9hdXRvX2RldGVjdF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0gIEdzdEF1dG9EZXRlY3QgKnNpbmsgPSBHU1RfQVVUT19ERVRFQ1QgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgaWYgKCFnc3RfYXV0b19kZXRlY3RfZGV0ZWN0IChzaW5rKSkKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICByZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgZ3N0X2F1dG9fZGV0ZWN0X3Jlc2V0IChzaW5rKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19kZXRlY3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1dG9EZXRlY3QgKnNlbGYgPSBHU1RfQVVUT19ERVRFQ1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NBUFM6Ci0gICAgICBpZiAoc2VsZi0+ZmlsdGVyX2NhcHMpCi0gICAgICAgIGdzdF9jYXBzX3VucmVmIChzZWxmLT5maWx0ZXJfY2Fwcyk7Ci0gICAgICBzZWxmLT5maWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGdzdF92YWx1ZV9nZXRfY2FwcyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TWU5DOgotICAgICAgc2VsZi0+c3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGlmIChzZWxmLT5raWQgJiYgc2VsZi0+aGFzX3N5bmMpCi0gICAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHNlbGYtPmtpZCksIHBzcGVjLT5uYW1lLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b19kZXRlY3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF1dG9EZXRlY3QgKnNlbGYgPSBHU1RfQVVUT19ERVRFQ1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NBUFM6Ci0gICAgICBnc3RfdmFsdWVfc2V0X2NhcHMgKHZhbHVlLCBzZWxmLT5maWx0ZXJfY2Fwcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1lOQzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWxmLT5zeW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoYXV0b2RldGVjdF9kZWJ1ZywgImF1dG9kZXRlY3QiLCAwLAotICAgICAgIkF1dG9kZXRlY3Rpb24gYXVkaW8vdmlkZW8gb3V0cHV0IHdyYXBwZXIgZWxlbWVudHMiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImF1dG92aWRlb3NpbmsiLAotICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfQVVUT19WSURFT19TSU5LKSAmJgotICAgICAgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImF1dG92aWRlb3NyYyIsCi0gICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9BVVRPX1ZJREVPX1NSQykgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdXRvYXVkaW9zaW5rIiwKLSAgICAgIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX0FVVE9fQVVESU9fU0lOSykgJiYKLSAgICAgIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdXRvYXVkaW9zcmMiLAotICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfQVVUT19BVURJT19TUkMpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgYXV0b2RldGVjdCwKLSAgICAiUGx1Z2luIGNvbnRhaW5zIGF1dG8tZGV0ZWN0aW9uIHBsdWdpbnMgZm9yIHZpZGVvL2F1ZGlvIGluLSBhbmQgb3V0cHV0cyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmggYi9nc3QvYXV0b2RldGVjdC9nc3RhdXRvZGV0ZWN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YWU4OWYuLjAwMDAwMDAKLS0tIGEvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b2RldGVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiAoYykgMjAwNSBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BVVRPX0RFVEVDVF9IX18KLSNkZWZpbmUgX19HU1RfQVVUT19ERVRFQ1RfSF9fCi0KLUdfQkVHSU5fREVDTFMKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoYXV0b2RldGVjdF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBhdXRvZGV0ZWN0X2RlYnVnCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVUT19ERVRFQ1QgKGdzdF9hdXRvX2RldGVjdF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0FVVE9fREVURUNUKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9BVVRPX0RFVEVDVCwgR3N0QXV0b0RldGVjdCkpCi0jZGVmaW5lIEdTVF9BVVRPX0RFVEVDVF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0FVVE9fREVURUNULCBHc3RBdXRvRGV0ZWN0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVVUT19ERVRFQ1Qob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0FVVE9fREVURUNUKSkKLSNkZWZpbmUgR1NUX0lTX0FVVE9fREVURUNUX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfQVVUT19ERVRFQ1QpKQotI2RlZmluZSBHU1RfQVVUT19ERVRFQ1RfR0VUX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0FVVE9fREVURUNULCBHc3RBdXRvRGV0ZWN0Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXV0b0RldGVjdCB7Ci0gIEdzdEJpbiBwYXJlbnQ7Ci0gIAotICAvKiBjb25maWd1cmF0aW9uIGZvciBzdWJjbGFzc2VzICovCi0gIGNvbnN0IGdjaGFyICptZWRpYV9rbGFzczsgLyogQXVkaW8vVmlkZW8vLi4uICovCi0gIEdzdEVsZW1lbnRGbGFncyBmbGFnOyAvKiBHU1RfRUxFTUVOVF9GTEFHX3tTSU5LL1NPVVJDRX0gKi8KLQotICAvKiBleHBsaWNpdCBwb2ludGVycyB0byBzdHVmZiB1c2VkICovCi0gIEdzdFBhZCAqcGFkOwotICBHc3RDYXBzICpmaWx0ZXJfY2FwczsKLSAgZ2Jvb2xlYW4gc3luYzsKLQotICAvKiA8IHByaXZhdGUgPiAqLyAKLSAgR3N0RWxlbWVudCAqa2lkOwotICBnYm9vbGVhbiBoYXNfc3luYzsKLSAgY29uc3QgZ2NoYXIgKnR5cGVfa2xhc3M7IC8qIFNvdXJjZS9TaW5rICovCi0gIGNvbnN0IGdjaGFyICptZWRpYV9rbGFzc19sYywgKnR5cGVfa2xhc3NfbGM7IC8qIGxvd2VyIGNhc2UgdmVyc2lvbnMgKi8KLQotfSBHc3RBdXRvRGV0ZWN0OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXV0b0RldGVjdENsYXNzIHsKLSAgR3N0QmluQ2xhc3MgcGFyZW50X2NsYXNzOwotICAKLSAgLyo8IHByaXZhdGUgPiovCi0gIC8qIHZpcnR1YWwgbWV0aG9kcyBmb3Igc3ViY2xhc3NlcyAqLwotICB2b2lkICgqY29uZmlndXJlKShHc3RBdXRvRGV0ZWN0ICpzZWxmLCBHc3RFbGVtZW50ICpraWQpOwotICBHc3RFbGVtZW50ICogKCpjcmVhdGVfZmFrZV9lbGVtZW50KSAoR3N0QXV0b0RldGVjdCAqIGF1dG9kZXRlY3QpOwotfSBHc3RBdXRvRGV0ZWN0Q2xhc3M7Ci0KLUdUeXBlICAgZ3N0X2F1dG9fZGV0ZWN0X2dldF90eXBlICAgICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FVVE9fREVURUNUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jIGIvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGZkOTFlLi4wMDAwMDAwCi0tLSBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIChjKSAyMDA1IFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqIChjKSAyMDA2IEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hdXRvdmlkZW9zaW5rCi0gKiBAc2VlX2Fsc286IGF1dG9hdWRpb3NpbmssIHhpbWFnZXNpbmssIHh2aW1hZ2VzaW5rLCBzZGx2aWRlb3NpbmsKLSAqCi0gKiBhdXRvdmlkZW9zaW5rIGlzIGEgdmlkZW8gc2luayB0aGF0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhbiBhcHByb3ByaWF0ZQotICogdmlkZW8gc2luayB0byB1c2UuICBJdCBkb2VzIHNvIGJ5IHNjYW5uaW5nIHRoZSByZWdpc3RyeSBmb3IgYWxsIGVsZW1lbnRzCi0gKiB0aGF0IGhhdmUgPHF1b3RlPlNpbms8L3F1b3RlPiBhbmQgPHF1b3RlPlZpZGVvPC9xdW90ZT4gaW4gdGhlIGNsYXNzIGZpZWxkCi0gKiBvZiB0aGVpciBlbGVtZW50IGluZm9ybWF0aW9uLCBhbmQgYWxzbyBoYXZlIGEgbm9uLXplcm8gYXV0b3BsdWdnaW5nIHJhbmsuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IC1tIHZpZGVvdGVzdHNyYyAhIGF1dG92aWRlb3NpbmsKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGF1dG92aWRlb3NpbmsuaCIKLQotI2RlZmluZSBERUZBVUxUX1RTX09GRlNFVCAgICAgICAgICAgMAotCi0vKiBQcm9wZXJ0aWVzICovCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9UU19PRkZTRVQsCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfYXV0b192aWRlb19zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9hdXRvX3ZpZGVvX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2F1dG9fdmlkZW9fc2lua19jb25maWd1cmUgKEdzdEF1dG9EZXRlY3QgKiBhdXRvZGV0ZWN0LAotICAgIEdzdEVsZW1lbnQgKiBraWQpOwotCi1HX0RFRklORV9UWVBFIChHc3RBdXRvVmlkZW9TaW5rLCBnc3RfYXV0b192aWRlb19zaW5rLCBHU1RfVFlQRV9BVVRPX0RFVEVDVCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b192aWRlb19zaW5rX2NsYXNzX2luaXQgKEdzdEF1dG9WaWRlb1NpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVrbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEF1dG9EZXRlY3RDbGFzcyAqYWtsYXNzID0gR1NUX0FVVE9fREVURUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2F1dG9fdmlkZW9fc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9hdXRvX3ZpZGVvX3NpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIGFrbGFzcy0+Y29uZmlndXJlID0gZ3N0X2F1dG9fdmlkZW9fc2lua19jb25maWd1cmU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UU19PRkZTRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50NjQgKCJ0cy1vZmZzZXQiLCAiVFMgT2Zmc2V0IiwKLSAgICAgICAgICAiVGltZXN0YW1wIG9mZnNldCBpbiBuYW5vc2Vjb25kcyIsIEdfTUlOSU5UNjQsIEdfTUFYSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9UU19PRkZTRVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChla2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWtsYXNzLCAiQXV0byB2aWRlbyBzaW5rIiwKLSAgICAgICJTaW5rL1ZpZGVvIiwKLSAgICAgICJXcmFwcGVyIHZpZGVvIHNpbmsgZm9yIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgdmlkZW8gc2luayIsCi0gICAgICAiSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1dG9fdmlkZW9fc2lua19pbml0IChHc3RBdXRvVmlkZW9TaW5rICogc2luaykKLXsKLSAgR3N0QXV0b0RldGVjdCAqYXV0b2RldGVjdCA9IEdTVF9BVVRPX0RFVEVDVCAoc2luayk7Ci0KLSAgYXV0b2RldGVjdC0+bWVkaWFfa2xhc3MgPSAiVmlkZW8iOwotICBhdXRvZGV0ZWN0LT5mbGFnID0gR1NUX0VMRU1FTlRfRkxBR19TSU5LOwotCi0gIHNpbmstPnRzX29mZnNldCA9IERFRkFVTFRfVFNfT0ZGU0VUOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1dG9fdmlkZW9fc2lua19jb25maWd1cmUgKEdzdEF1dG9EZXRlY3QgKiBhdXRvZGV0ZWN0LCBHc3RFbGVtZW50ICoga2lkKQotewotICBHc3RBdXRvVmlkZW9TaW5rICpzZWxmID0gR1NUX0FVVE9fVklERU9fU0lOSyAoYXV0b2RldGVjdCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoa2lkKSwgInRzLW9mZnNldCIsIHNlbGYtPnRzX29mZnNldCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXV0b192aWRlb19zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBdXRvVmlkZW9TaW5rICpzaW5rID0gR1NUX0FVVE9fVklERU9fU0lOSyAob2JqZWN0KTsKLSAgR3N0QXV0b0RldGVjdCAqYXV0b2RldGVjdCA9IChHc3RBdXRvRGV0ZWN0ICopIHNpbms7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1RTX09GRlNFVDoKLSAgICAgIHNpbmstPnRzX29mZnNldCA9IGdfdmFsdWVfZ2V0X2ludDY0ICh2YWx1ZSk7Ci0gICAgICBpZiAoYXV0b2RldGVjdC0+a2lkKQotICAgICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChhdXRvZGV0ZWN0LT5raWQpLCBwc3BlYy0+bmFtZSwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F1dG9fdmlkZW9fc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXV0b1ZpZGVvU2luayAqc2luayA9IEdTVF9BVVRPX1ZJREVPX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1RTX09GRlNFVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgc2luay0+dHNfb2Zmc2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuaCBiL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI3ZGI0MC4uMDAwMDAwMAotLS0gYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIChjKSAyMDA1IFJvbmFsZCBTLiBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FVVE9fVklERU9fU0lOS19IX18KLSNkZWZpbmUgX19HU1RfQVVUT19WSURFT19TSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgImdzdGF1dG9kZXRlY3QuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FVVE9fVklERU9fU0lOSyBcCi0gIChnc3RfYXV0b192aWRlb19zaW5rX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfQVVUT19WSURFT19TSU5LKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9BVVRPX1ZJREVPX1NJTkssIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBdXRvVmlkZW9TaW5rKSkKLSNkZWZpbmUgR1NUX0FVVE9fVklERU9fU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0FVVE9fVklERU9fU0lOSywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEF1dG9WaWRlb1NpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVVRPX1ZJREVPX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0FVVE9fVklERU9fU0lOSykpCi0jZGVmaW5lIEdTVF9JU19BVVRPX1ZJREVPX1NJTktfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9BVVRPX1ZJREVPX1NJTkspKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXV0b1ZpZGVvU2luayB7Ci0gIEdzdEF1dG9EZXRlY3QgcGFyZW50OwotCi0gIEdzdENsb2NrVGltZURpZmYgdHNfb2Zmc2V0OwotfSBHc3RBdXRvVmlkZW9TaW5rOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXV0b1ZpZGVvU2lua0NsYXNzIHsKLSAgR3N0QXV0b0RldGVjdENsYXNzIHBhcmVudF9jbGFzczsKLX0gR3N0QXV0b1ZpZGVvU2lua0NsYXNzOwotCi1HVHlwZSAgIGdzdF9hdXRvX3ZpZGVvX3NpbmtfZ2V0X3R5cGUgICAgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVVUT19WSURFT19TSU5LX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F1dG9kZXRlY3QvZ3N0YXV0b3ZpZGVvc3JjLmMgYi9nc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0MzQzMS4uMDAwMDAwMAotLS0gYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogKGMpIDIwMDUgUm9uYWxkIFMuIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogKGMpIDIwMDYgSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PgotICogKGMpIDIwMDggU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWF1dG92aWRlb3NyYwotICogQHNlZV9hbHNvOiBhdXRvYXVkaW9zcmMsIHY0bDJzcmMsIHY0bHNyYwotICoKLSAqIGF1dG92aWRlb3NyYyBpcyBhIHZpZGVvIHNyYyB0aGF0IGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhbiBhcHByb3ByaWF0ZQotICogdmlkZW8gc291cmNlIHRvIHVzZS4gIEl0IGRvZXMgc28gYnkgc2Nhbm5pbmcgdGhlIHJlZ2lzdHJ5IGZvciBhbGwgZWxlbWVudHMKLSAqIHRoYXQgaGF2ZSA8cXVvdGU+U291cmNlPC9xdW90ZT4gYW5kIDxxdW90ZT5WaWRlbzwvcXVvdGU+IGluIHRoZSBjbGFzcyBmaWVsZAotICogb2YgdGhlaXIgZWxlbWVudCBpbmZvcm1hdGlvbiwgYW5kIGFsc28gaGF2ZSBhIG5vbi16ZXJvIGF1dG9wbHVnZ2luZyByYW5rLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiAtbSBhdXRvdmlkZW9zcmMgISB4dmltYWdlc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0YXV0b3ZpZGVvc3JjLmgiCi0KLUdfREVGSU5FX1RZUEUgKEdzdEF1dG9WaWRlb1NyYywgZ3N0X2F1dG9fdmlkZW9fc3JjLCBHU1RfVFlQRV9BVVRPX0RFVEVDVCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWdzdF9hdXRvX3ZpZGVvX3NyY19jcmVhdGVfZmFrZV9lbGVtZW50IChHc3RBdXRvRGV0ZWN0ICogYXV0b2RldGVjdCkKLXsKLSAgR3N0RWxlbWVudCAqZmFrZTsKLQotICBmYWtlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgImZha2UtYXV0by12aWRlby1zcmMiKTsKLSAgaWYgKGZha2UgIT0gTlVMTCkgewotICAgIGdfb2JqZWN0X3NldCAoZmFrZSwgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXV0b2RldGVjdCwgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgKCJGYWlsZWQgdG8gZmluZCB1c2FibGUgdmlkZW8gc291cmNlIGVsZW1lbnQuIiksCi0gICAgICAgICgiRmFpbGVkIHRvIGZpbmQgYSB1c2FibGUgdmlkZW8gc291cmNlIGFuZCBjb3VsZG4ndCBjcmVhdGUgYSB2aWRlbyIKLSAgICAgICAgICAgICJ0ZXN0c3JjIGFzIGZhbGxiYWNrIGVpdGhlciwgY2hlY2sgeW91ciBHU3RyZWFtZXIgaW5zdGFsbGF0aW9uLiIpKTsKLSAgICAvKiBUaGlzIHdpbGwgZXJyb3Igb3V0IHdpdGggbm90LW5lZ290aWF0ZWQuLiAqLwotICAgIGZha2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgImZha2UtYXV0by12aWRlby1zcmMiKTsKLSAgfQotICByZXR1cm4gZmFrZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdXRvX3ZpZGVvX3NyY19jbGFzc19pbml0IChHc3RBdXRvVmlkZW9TcmNDbGFzcyAqIGtsYXNzKQotewotICBHc3RBdXRvRGV0ZWN0Q2xhc3MgKmF1dG9jbGFzcyA9IEdTVF9BVVRPX0RFVEVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVrbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVrbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVrbGFzcywgIkF1dG8gdmlkZW8gc291cmNlIiwKLSAgICAgICJTb3VyY2UvVmlkZW8iLAotICAgICAgIldyYXBwZXIgdmlkZW8gc291cmNlIGZvciBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIHZpZGVvIHNvdXJjZSIsCi0gICAgICAiSmFuIFNjaG1pZHQgPHRoYXl0YW5Abm9yYWlzaW4ubmV0PiwgIgotICAgICAgIlN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4iKTsKLQotICBhdXRvY2xhc3MtPmNyZWF0ZV9mYWtlX2VsZW1lbnQgPSBnc3RfYXV0b192aWRlb19zcmNfY3JlYXRlX2Zha2VfZWxlbWVudDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdXRvX3ZpZGVvX3NyY19pbml0IChHc3RBdXRvVmlkZW9TcmMgKiBzcmMpCi17Ci0gIEdzdEF1dG9EZXRlY3QgKmF1dG9kZXRlY3QgPSBHU1RfQVVUT19ERVRFQ1QgKHNyYyk7Ci0KLSAgYXV0b2RldGVjdC0+bWVkaWFfa2xhc3MgPSAiVmlkZW8iOwotICBhdXRvZGV0ZWN0LT5mbGFnID0gR1NUX0VMRU1FTlRfRkxBR19TT1VSQ0U7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXV0b2RldGVjdC9nc3RhdXRvdmlkZW9zcmMuaCBiL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzZjYzcyLi4wMDAwMDAwCi0tLSBhL2dzdC9hdXRvZGV0ZWN0L2dzdGF1dG92aWRlb3NyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiAoYykgMjAwNSBSb25hbGQgUy4gQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAoYykgMjAwOCBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BVVRPX1ZJREVPX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfQVVUT19WSURFT19TUkNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0YXV0b2RldGVjdC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVVUT19WSURFT19TUkMgXAotICAoZ3N0X2F1dG9fdmlkZW9fc3JjX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfQVVUT19WSURFT19TUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0FVVE9fVklERU9fU1JDLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QXV0b1ZpZGVvU3JjKSkKLSNkZWZpbmUgR1NUX0FVVE9fVklERU9fU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfQVVUT19WSURFT19TUkMsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RBdXRvVmlkZW9TcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVVRPX1ZJREVPX1NSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfQVVUT19WSURFT19TUkMpKQotI2RlZmluZSBHU1RfSVNfQVVUT19WSURFT19TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9BVVRPX1ZJREVPX1NSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdXRvVmlkZW9TcmMgewotICBHc3RBdXRvRGV0ZWN0IHBhcmVudDsKLX0gR3N0QXV0b1ZpZGVvU3JjOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXV0b1ZpZGVvU3JjQ2xhc3MgewotICBHc3RBdXRvRGV0ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotfSBHc3RBdXRvVmlkZW9TcmNDbGFzczsKLQotR1R5cGUgICBnc3RfYXV0b192aWRlb19zcmNfZ2V0X3R5cGUgICAgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVVUT19WSURFT19TUkNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXZpL01ha2VmaWxlLmFtIGIvZ3N0L2F2aS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2ZGYyNy4uMDAwMDAwMAotLS0gYS9nc3QvYXZpL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0YXZpLmxhCi0KLWxpYmdzdGF2aV9sYV9TT1VSQ0VTID0gXAotCWdzdGF2aS5jIFwKLQlnc3RhdmltdXguYyBcCi0JZ3N0YXZpZGVtdXguYyBcCi0JZ3N0YXZpc3VidGl0bGUuYwotCi1ub2luc3RfSEVBREVSUyA9IFwKLQlhdmktaWRzLmggXAotCWdzdGF2aW11eC5oIFwKLQlnc3RhdmlkZW11eC5oIFwKLQlnc3RhdmlzdWJ0aXRsZS5oCi0KLWxpYmdzdGF2aV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0YXZpX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpIFwKLQktbGdzdHJpZmYtQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0YXVkaW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05ACi0KLWxpYmdzdGF2aV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RhdmlfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotRVhUUkFfRElTVCA9IFJFQURNRQpkaWZmIC0tZ2l0IGEvZ3N0L2F2aS9NYWtlZmlsZS5pbiBiL2dzdC9hdmkvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMDdkOWIuLjAwMDAwMDAKLS0tIGEvZ3N0L2F2aS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk1NCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvYXZpCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0YXZpX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0YXZpX2xhX09CSkVDVFMgPSBsaWJnc3RhdmlfbGEtZ3N0YXZpLmxvIFwKLQlsaWJnc3RhdmlfbGEtZ3N0YXZpbXV4LmxvIGxpYmdzdGF2aV9sYS1nc3RhdmlkZW11eC5sbyBcCi0JbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLmxvCi1saWJnc3RhdmlfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0YXZpX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RhdmlfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RhdmlfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RhdmlfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0YXZpX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGF2aV9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RhdmlfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGF2aS5sYQotbGliZ3N0YXZpX2xhX1NPVVJDRVMgPSBcCi0JZ3N0YXZpLmMgXAotCWdzdGF2aW11eC5jIFwKLQlnc3RhdmlkZW11eC5jIFwKLQlnc3RhdmlzdWJ0aXRsZS5jCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWF2aS1pZHMuaCBcCi0JZ3N0YXZpbXV4LmggXAotCWdzdGF2aWRlbXV4LmggXAotCWdzdGF2aXN1YnRpdGxlLmgKLQotbGliZ3N0YXZpX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RhdmlfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCS1sZ3N0cmlmZi1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAKLQotbGliZ3N0YXZpX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGF2aV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotRVhUUkFfRElTVCA9IFJFQURNRQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2F2aS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvYXZpL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0YXZpLmxhOiAkKGxpYmdzdGF2aV9sYV9PQkpFQ1RTKSAkKGxpYmdzdGF2aV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0YXZpX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RhdmlfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGF2aV9sYV9PQkpFQ1RTKSAkKGxpYmdzdGF2aV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGF2aV9sYS1nc3RhdmkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdmlfbGEtZ3N0YXZpZGVtdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhdmlfbGEtZ3N0YXZpbXV4LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RhdmlfbGEtZ3N0YXZpLmxvOiBnc3RhdmkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF2aV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdmlfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGF2aV9sYS1nc3RhdmkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGF2aV9sYS1nc3RhdmkuVHBvIC1jIC1vIGxpYmdzdGF2aV9sYS1nc3RhdmkubG8gYHRlc3QgLWYgJ2dzdGF2aS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RhdmkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aS5UcG8gJChERVBESVIpL2xpYmdzdGF2aV9sYS1nc3RhdmkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YXZpLmMnIG9iamVjdD0nbGliZ3N0YXZpX2xhLWdzdGF2aS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGF2aV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhdmlfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YXZpX2xhLWdzdGF2aS5sbyBgdGVzdCAtZiAnZ3N0YXZpLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF2aS5jCi0KLWxpYmdzdGF2aV9sYS1nc3RhdmltdXgubG86IGdzdGF2aW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXZpX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF2aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXZpX2xhLWdzdGF2aW11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aW11eC5UcG8gLWMgLW8gbGliZ3N0YXZpX2xhLWdzdGF2aW11eC5sbyBgdGVzdCAtZiAnZ3N0YXZpbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF2aW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhdmlfbGEtZ3N0YXZpbXV4LlRwbyAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RhdmltdXguYycgb2JqZWN0PSdsaWJnc3RhdmlfbGEtZ3N0YXZpbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXZpX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF2aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdmlfbGEtZ3N0YXZpbXV4LmxvIGB0ZXN0IC1mICdnc3RhdmltdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXZpbXV4LmMKLQotbGliZ3N0YXZpX2xhLWdzdGF2aWRlbXV4LmxvOiBnc3RhdmlkZW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXZpX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF2aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXZpX2xhLWdzdGF2aWRlbXV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdmlfbGEtZ3N0YXZpZGVtdXguVHBvIC1jIC1vIGxpYmdzdGF2aV9sYS1nc3RhdmlkZW11eC5sbyBgdGVzdCAtZiAnZ3N0YXZpZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXZpZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aWRlbXV4LlRwbyAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aWRlbXV4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGF2aWRlbXV4LmMnIG9iamVjdD0nbGliZ3N0YXZpX2xhLWdzdGF2aWRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXZpX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF2aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdmlfbGEtZ3N0YXZpZGVtdXgubG8gYHRlc3QgLWYgJ2dzdGF2aWRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF2aWRlbXV4LmMKLQotbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLmxvOiBnc3RhdmlzdWJ0aXRsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXZpX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF2aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhdmlfbGEtZ3N0YXZpc3VidGl0bGUuVHBvIC1jIC1vIGxpYmdzdGF2aV9sYS1nc3RhdmlzdWJ0aXRsZS5sbyBgdGVzdCAtZiAnZ3N0YXZpc3VidGl0bGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXZpc3VidGl0bGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLlRwbyAkKERFUERJUikvbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGF2aXN1YnRpdGxlLmMnIG9iamVjdD0nbGliZ3N0YXZpX2xhLWdzdGF2aXN1YnRpdGxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YXZpX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGF2aV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RhdmlfbGEtZ3N0YXZpc3VidGl0bGUubG8gYHRlc3QgLWYgJ2dzdGF2aXN1YnRpdGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGF2aXN1YnRpdGxlLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2F2aS9SRUFETUUgYi9nc3QvYXZpL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlhMDhhOS4uMDAwMDAwMAotLS0gYS9nc3QvYXZpL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLVRoZSBhdmkgZGVjb2RlciBwbHVnaW5zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYXZpIGRlY29kZXIgY29uc2lzdHMgb2YgYSBzZXQgb2YgZ3N0cmVhbWVyIHBsdWdpbnM6Ci0KLSAtIGRlbXV4ZXIgKGF2aWRlbXV4KQotIC0gYXZpIHRvIGdzdHJlYW1lciB0eXBlIGNvbnZlcnRlciAoYXZpdHlwZXMpCi0gLSB3aW5kb3dzIGRsbHMgd3JhcHBlcnMuCi0KLXRoZSBhdmlkZWNvZGVyIGVsZW1lbnQgdXNlcyB0aGUgYWJvdmUgcGx1Z2lucyB0byBwZXJmb3JtIHRoZSBhdmkKLWRlY29kaW5nLiBJdCBpcyBjb25zdHJ1Y3RlZCBhcyBhIGN1c3RvbSBiaW4gd2hpY2ggaW5pdGlhbGx5IG9ubHkgaGFzCi10aGUgZGVtdXhlciBlbGVtZW50IGluIGl0LiBUaGUgZGVtdXhlciBoYXMgYSBzZXQgb2YgcGFkdGVtcGxhdGVzIGZvcgotcmF3IGF1ZGlvIGFuZCB2aWRlby4KLQotICAoLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKQotICAhIGF2aWRlY29kZXIgICAgICAgICAgICAgICAgICAgICAgICAgIQotICAhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpZGVvL3JhdykuLi4KLSAgISAgICAgKC0tLS0tLS0tLS0pICAgICAgICAgICAgICAgICAgICEKLSAgISAgICAgISBkZW11eGVyICh2aWRlby94LW1zdmlkZW8sIGF1ZHMpLi4KLSAgISAgICAgISAgICAgICAgICAhICAgICAgICAgICAgICAgICAgICEKLSAgISAgIC1zcmMgICAgICAgICAhICAgICAgICAgICAgICAgICAgICEKLSAgISAgLyAgISAgICAgICAgICh2aWRlby94LW1zdmlkZW8sIHZpZHMpLi4KLSAtIHNyYyAgISAgICAgICAgICAhICAgICAgICAgICAgICAgICAgICEKLSAgISAgICAgKC0tLS0tLS0tLS0pICAgICAgICAgICAgICAgIChhdWRpby9yYXcpLi4uCi0gICEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhCi0gICgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0pCi0KLXRoZSBkZW11eGVyIGhhcyBhIHNldCBvZiBwYWR0ZW1wbGF0ZXMgZm9yIHRoZSByYXcgYXZpIGhlYWRlciBwcm9wZXJ0aWVzLgotCi1UaGUgYXZpIGRlY29kZXIgd2lsbCBhY3Qgb24gdGhlIG5ld19wYWQgc2lnbmFsIG9mIHRoZSBkZW11eGVyIGVsZW1lbnQKLWFuZCB3aWxsIGF0dGFjaCBhbiBhdml0eXBlIHBsdWdpbiB0byB0aGUgbmV3IHBhZC4gQ2FwcyBuZWdvdGlhdGlvbiB3aWxsCi1jb252ZXJ0IHRoZSByYXcgYXZpIGNhcHMgdG8gdGhlIGdzdHJlYW1lciBjYXBzLiBJZiB0aGUgc3JjIHBhZCBvZiB0aGUKLWF2aXR5cGVzIHBsdWdpbiBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBhdmlkZWNvZGVyIHBhZHRlbXBsYXRlLCB0aGUgCi1hdml0eXBlIHBhZCBpcyBnaG9zdGVkIHRvIHRoZSBhdmlkZWNvZGVyIGJpbiwgdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBubwotY29kZWMgaXMgbmVlZGVkIChmb3IgcmF3IFBDTSBzYW1wbGVzLCBmb3IgZXhhbXBsZSkuCi0KLVdoZW4gdGhlIGF2aXR5cGVzIGNhcHMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggb25lIG9mIHRoZSBhdmlkZWNvZGVyIAotdGVtcGxhdGVzLCBhIHN0YXRpYyBhdXRvcGx1Z2dlciBpcyB1c2VkIHRoZSBmaW5kIGFuIGVsZW1lbnQgdG8gY29ubmVjdAotdGhlIGRlbXV4ZXJzIHBhZCB0byB0aGUgZGVjb2RlcnMgcGFkdGVtcGxhdGUuCi0KLVdoZW4gbm8gZWxlbWVudCBjb3VsZCBiZSBmb3VuZCwgYW4gd2luZGVjIHBsdWdpbiBpcyBhdHRhY2hlZCB0byB0aGUgCi1kZW11eGVycyBwYWQgYW5kIHRoZSBhdml0eXBlcyBwbHVnaW4gaXMgcmVtb3ZlZCBmcm9tIHRoZSBkZWNvZGVyLgotCi0KLWV4YW1wbGU6Ci0tLS0tLS0tLQotCi0gQW4gYXZpZGVjb2RlciB0aGF0IGhhcyBhIHZpZGVvIHBhZCAoZGVjb2RlZCB3aXRoIHdpbmRvd3MgZGxscykgYW5kIGFuCi0gYXVkaW8gcGFkIChyYXcgUENNKS4KLQotICAoLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSkKLSAgISBhdmlkZWNvZGVyICAgICAgICAgICAgICAgKC0tLS0tLS0tKSAgICAoLS0tLS0tKSAgICAgICAgICAgICAgICAhCi0gICEgICAgICAgICAgICAgICAgICAgICAgICAgICFhdml0eXBlcyEgICAgIXdpbmRlYyEgICAgICAgLy0tICh2aWRlby9yYXcpCi0gICEgICAgICgtLS0tLS0tLS0tKSAgICAgLy1zaW5rICAgICAgc3JjLS1zaW5rICAgc3JjIC0tLS0tICAgICAgICAgIQotICAhICAgICAhZGVtdXhlciAodmlkZW8veC1tc3ZpZGVvLCAgICAhICAgICEgICAgICAhICAgICAgICAgICAgICAgICEKLSAgISAgICAgISAgICAgICAgICAhIGF1ZHMpLi4gKC0tLS0tLS0tKSAgICAoLS0tLS0tKSAgICAgICAgICAgICAgICAhICAKLSAgISAgIC1zaW5rICAgICAgICAhICAgICAgICAgKC0tLS0tLS0tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhCi0gICEgIC8gICEgICAgICAgICh2aWRlby94LS4uLCFhdml0eXBlcyEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIQotIC1zaW5rICAhICAgICAgICAgICEgdmlkcykuLiAhICAgICAgICAhICAgICAgICAgICAgICAgICAgICAgICAgICAgICEKLSAgISAgICAgKC0tLS0tLS0tLS0pICAgICBcLXNpbmsgICAgICBzcmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKGF1ZGlvL3JhdykKLSAgISAgICAgICAgICAgICAgICAgICAgICAgICAgKC0tLS0tLS0tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhCi0gICgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKQotCi0KLQotVE9ETwotLS0tLQotCi1hdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBwYWR0ZW1wbGF0ZXMgZnJvbSBhbGwgcG9zc2libGUgYXZpIHR5cGVzCi1mb3VuZCBpbiB0aGUgcmVnaXN0cnkuCi0KLQpkaWZmIC0tZ2l0IGEvZ3N0L2F2aS9hdmktaWRzLmggYi9nc3QvYXZpL2F2aS1pZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwOTgwMy4uMDAwMDAwMAotLS0gYS9nc3QvYXZpL2F2aS1pZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0FWSV9IX18KLSNkZWZpbmUgX19HU1RfQVZJX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi10eXBlZGVmIHN0cnVjdCBfZ3N0X3JpZmZfYXZpaCB7Ci0gIGd1aW50MzIgdXNfZnJhbWU7ICAgICAgICAgIC8qIG1pY3Jvc2VjIHBlciBmcmFtZSAqLwotICBndWludDMyIG1heF9icHM7ICAgICAgICAgICAvKiBieXRlL3Mgb3ZlcmFsbCAqLwotICBndWludDMyIHBhZF9ncmFuOyAgICAgICAgICAvKiBwYWRfZ3JhbnVsYXJpdHkgKi8KLSAgZ3VpbnQzMiBmbGFnczsKLS8qIGZsYWdzIHZhbHVlcyAqLwotI2RlZmluZSBHU1RfUklGRl9BVklIX0hBU0lOREVYICAgICAgIDB4MDAwMDAwMTAgLyogaGFzIGlkeDEgY2h1bmsgKi8KLSNkZWZpbmUgR1NUX1JJRkZfQVZJSF9NVVNUVVNFSU5ERVggICAweDAwMDAwMDIwIC8qIG11c3QgdXNlIGlkeDEgY2h1bmsgdG8gZGV0ZXJtaW5lIG9yZGVyICovCi0jZGVmaW5lIEdTVF9SSUZGX0FWSUhfSVNJTlRFUkxFQVZFRCAgMHgwMDAwMDEwMCAvKiBBVkkgZmlsZSBpcyBpbnRlcmxlYXZlZCAqLwotI2RlZmluZSBHU1RfUklGRl9BVklIX1RSVVNUQ0tUWVBFICAgIDB4MDAwMDA4MDAgLyogVXNlIENLVHlwZSB0byBmaW5kIGtleSBmcmFtZXMgKi8KLSNkZWZpbmUgR1NUX1JJRkZfQVZJSF9XQVNDQVBUVVJFRklMRSAweDAwMDEwMDAwIC8qIHNwZWNpYWxseSBhbGxvY2F0ZWQgdXNlZCBmb3IgY2FwdHVyaW5nIHJlYWwgdGltZSB2aWRlbyAqLwotI2RlZmluZSBHU1RfUklGRl9BVklIX0NPUFlSSUdIVEVEICAgIDB4MDAwMjAwMDAgLyogY29udGFpbnMgY29weXJpZ2h0ZWQgZGF0YSAqLwotICBndWludDMyIHRvdF9mcmFtZXM7ICAgICAgICAvKiAjIG9mIGZyYW1lcyAoYWxsKSAqLwotICBndWludDMyIGluaXRfZnJhbWVzOyAgICAgICAvKiBpbml0aWFsIGZyYW1lcyAoPz8/KSAqLwotICBndWludDMyIHN0cmVhbXM7Ci0gIGd1aW50MzIgYnVmc2l6ZTsgICAgICAgICAgIC8qIHN1Z2dlc3RlZCBidWZmZXIgc2l6ZSAqLwotICBndWludDMyIHdpZHRoOwotICBndWludDMyIGhlaWdodDsKLSAgZ3VpbnQzMiBzY2FsZTsKLSAgZ3VpbnQzMiByYXRlOwotICBndWludDMyIHN0YXJ0OwotICBndWludDMyIGxlbmd0aDsKLX0gZ3N0X3JpZmZfYXZpaDsKLQotLyogdnBycCAodmlkZW8gcHJvcGVydGllcykgT0RNTCBoZWFkZXIgKi8KLS8qIHNlZSBPRE1MIHNwZWMgZm9yIHNvbWUvbW9yZSBleHBsYW5hdGlvbiAqLwotI2RlZmluZSBHU1RfUklGRl9UQUdfdnBycCBHU1RfTUFLRV9GT1VSQ0MgKCd2JywncCcsJ3InLCdwJykKLSNkZWZpbmUgR1NUX1JJRkZfRFhTQiBHU1RfTUFLRV9GT1VSQ0MgKCdEJywnWCcsJ1MnLCdCJykKLSNkZWZpbmUgR1NUX1JJRkZfVlBSUF9WSURFT19GSUVMRFMgICAgICAgICgyKQotCi10eXBlZGVmIHN0cnVjdCBfZ3N0X3JpZmZfdnBycF92aWRlb19maWVsZF9kZXNjIHsKLSAgZ3VpbnQzMiBjb21wcmVzc2VkX2JtX2hlaWdodDsKLSAgZ3VpbnQzMiBjb21wcmVzc2VkX2JtX3dpZHRoOwotICBndWludDMyIHZhbGlkX2JtX2hlaWdodDsKLSAgZ3VpbnQzMiB2YWxpZF9ibV93aWR0aDsKLSAgZ3VpbnQzMiB2YWxpZF9ibV94X29mZnNldDsKLSAgZ3VpbnQzMiB2YWxpZF9ibV95X29mZnNldDsKLSAgZ3VpbnQzMiB2aWRlb194X3Rfb2Zmc2V0OwotICBndWludDMyIHZpZGVvX3lfc3RhcnQ7Ci19IGdzdF9yaWZmX3ZwcnBfdmlkZW9fZmllbGRfZGVzYzsKLQotdHlwZWRlZiBzdHJ1Y3QgX2dzdF9yaWZmX3ZwcnAgewotICBndWludDMyIGZvcm1hdF90b2tlbjsgICAgICAvKiB3aGV0aGVyIGZpZWxkcyBkZWZpbmVkIGJ5IHN0YW5kYXJkICovCi0gIGd1aW50MzIgc3RhbmRhcmQ7ICAgICAgICAgIC8qIHZpZGVvIGRpc3BsYXkgc3RhbmRhcmQsIFVOS05PV04sIFBBTCwgZXRjICovCi0gIGd1aW50MzIgdmVydF9yYXRlOyAgICAgICAgIC8qIHZlcnRpY2FsIHJlZnJlc2ggcmF0ZSAqLwotICBndWludDMyIGhvcl90X3RvdGFsOyAgICAgICAvKiB3aWR0aCAqLwotICBndWludDMyIHZlcnRfbGluZXM7ICAgICAgICAvKiBoZWlnaHQgKi8KLSAgZ3VpbnQzMiBhc3BlY3Q7ICAgICAgICAgICAgLyogYXNwZWN0IHJhdGlvIGhpZ2ggd29yZDpsb3cgd29yZCAqLwotICBndWludDMyIHdpZHRoOyAgICAgICAgICAgICAvKiBhY3RpdmUgd2lkdGggKi8KLSAgZ3VpbnQzMiBoZWlnaHQ7ICAgICAgICAgICAgLyogYWN0aXZlIGhlaWdodCAqLwotICBndWludDMyIGZpZWxkczsgICAgICAgICAgICAvKiBmaWVsZCBjb3VudCAqLwotICBnc3RfcmlmZl92cHJwX3ZpZGVvX2ZpZWxkX2Rlc2MgZmllbGRfaW5mb1tHU1RfUklGRl9WUFJQX1ZJREVPX0ZJRUxEU107Ci19IGdzdF9yaWZmX3ZwcnA7Ci0KLSNlbmRpZiAvKiBfX0dTVF9BVklfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXZpL2dzdGF2aS5jIGIvZ3N0L2F2aS9nc3RhdmkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjZjBhZC4uMDAwMDAwMAotLS0gYS9nc3QvYXZpL2dzdGF2aS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQHRlbXBsZS1iYXB0aXN0LmNvbT4KLSAqCi0gKiBnc3RhdmkuYzogcGx1Z2luIHJlZ2lzdGVyaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi0jaW5jbHVkZSAiZ3N0YXZpZGVtdXguaCIKLSNpbmNsdWRlICJnc3RhdmltdXguaCIKLSNpbmNsdWRlICJnc3RhdmlzdWJ0aXRsZS5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdzdF9yaWZmX2luaXQgKCk7Ci0KLSNpZmRlZiBFTkFCTEVfTkxTCi0gIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7Ci0gIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOwotI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdmlkZW11eCIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgR1NUX1RZUEVfQVZJX0RFTVVYKSB8fAotICAgICAgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhdmltdXgiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX0FWSV9NVVgpIHx8Ci0gICAgICAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImF2aXN1YnRpdGxlIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9BVklfU1VCVElUTEUpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBhdmksCi0gICAgIkFWSSBzdHJlYW0gaGFuZGxpbmciLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9hdmkvZ3N0YXZpZGVtdXguYyBiL2dzdC9hdmkvZ3N0YXZpZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4NjMwYy4uMDAwMDAwMAotLS0gYS9nc3QvYXZpL2dzdGF2aWRlbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDE5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUB0ZW1wbGUtYmFwdGlzdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBOb2tpYSBDb3Jwb3JhdGlvbiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqIENvcHlyaWdodCAoQykgPDIwMDktMjAxMD4gU1RFcmljc3NvbiA8YmVuamFtaW4uZ2FpZ25hcmRAc3Rlcmljc3Nvbi5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qIEVsZW1lbnQtQ2hlY2tsaXN0LVZlcnNpb246IDUgKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYXZpZGVtdXgKLSAqCi0gKiBEZW11eGVzIGFuIC5hdmkgZmlsZSBpbnRvIHJhdyBvciBjb21wcmVzc2VkIGF1ZGlvIGFuZC9vciB2aWRlbyBzdHJlYW1zLgotICoKLSAqIFRoaXMgZWxlbWVudCBzdXBwb3J0cyBib3RoIHB1c2ggYW5kIHB1bGwtYmFzZWQgc2NoZWR1bGluZywgZGVwZW5kaW5nIG9uIHRoZQotICogY2FwYWJpbGl0aWVzIG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50cy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj10ZXN0LmF2aSAhIGF2aWRlbXV4IG5hbWU9ZGVtdXggIGRlbXV4LmF1ZGlvXzAwICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsgICBkZW11eC52aWRlb18wMCAhIHF1ZXVlICEgZGVjb2RlYmluICEgdmlkZW9jb252ZXJ0ICEgdmlkZW9zY2FsZSAhIGF1dG92aWRlb3NpbmsKLSAqIF18IFBsYXkgKHBhcnNlIGFuZCBkZWNvZGUpIGFuIC5hdmkgZmlsZSBhbmQgdHJ5IHRvIG91dHB1dCBpdCB0bwotICogYW4gYXV0b21hdGljYWxseSBkZXRlY3RlZCBzb3VuZGNhcmQgYW5kIHZpZGVvc2luay4gSWYgdGhlIEFWSSBmaWxlIGNvbnRhaW5zCi0gKiBjb21wcmVzc2VkIGF1ZGlvIG9yIHZpZGVvIGRhdGEsIHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IGhhdmUgdGhlCi0gKiByaWdodCBkZWNvZGVyIGVsZW1lbnRzL3BsdWdpbnMgaW5zdGFsbGVkLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiZ3N0L3JpZmYvcmlmZi1tZWRpYS5oIgotI2luY2x1ZGUgImdzdGF2aWRlbXV4LmgiCi0jaW5jbHVkZSAiYXZpLWlkcy5oIgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotI2RlZmluZSBESVZfUk9VTkRfVVAocyx2KSAoKChzKSArICgodiktMSkpIC8gKHYpKQotCi0jZGVmaW5lIEdTVF9BVklfS0VZRlJBTUUgKDEgPDwgMCkKLSNkZWZpbmUgRU5UUllfSVNfS0VZRlJBTUUoZSkgKChlKS0+ZmxhZ3MgPT0gR1NUX0FWSV9LRVlGUkFNRSkKLSNkZWZpbmUgRU5UUllfU0VUX0tFWUZSQU1FKGUpICgoZSktPmZsYWdzID0gR1NUX0FWSV9LRVlGUkFNRSkKLSNkZWZpbmUgRU5UUllfVU5TRVRfS0VZRlJBTUUoZSkgKChlKS0+ZmxhZ3MgPSAwKQotCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGF2aWRlbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGF2aWRlbXV4X2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1tc3ZpZGVvIikKLSAgICApOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNuYXBfdHlwZXNbMl1bMl0gPSB7Ci0gIHsiYW55IiwgImJlZm9yZSJ9LAotICB7ImFmdGVyIiwgIm5lYXJlc3QifSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgZ3N0X2F2aV9kZW11eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdmlfZGVtdXhfcmVzZXQgKEdzdEF2aURlbXV4ICogYXZpKTsKLQotI2lmIDAKLXN0YXRpYyBjb25zdCBHc3RFdmVudE1hc2sgKmdzdF9hdmlfZGVtdXhfZ2V0X2V2ZW50X21hc2sgKEdzdFBhZCAqIHBhZCk7Ci0jZW5kaWYKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfZGVtdXhfcHVzaF9ldmVudCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEV2ZW50ICogZXZlbnQpOwotCi0jaWYgMAotc3RhdGljIGNvbnN0IEdzdEZvcm1hdCAqZ3N0X2F2aV9kZW11eF9nZXRfc3JjX2Zvcm1hdHMgKEdzdFBhZCAqIHBhZCk7Ci0jZW5kaWYKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfZGVtdXhfc3JjX2NvbnZlcnQgKEdzdFBhZCAqIHBhZCwgR3N0Rm9ybWF0IHNyY19mb3JtYXQsCi0gICAgZ2ludDY0IHNyY192YWx1ZSwgR3N0Rm9ybWF0ICogZGVzdF9mb3JtYXQsIGdpbnQ2NCAqIGRlc3RfdmFsdWUpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F2aV9kZW11eF9kb19zZWVrIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0U2VnbWVudCAqIHNlZ21lbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NlZWsgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vla19wdXNoIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIHZvaWQgZ3N0X2F2aV9kZW11eF9sb29wIChHc3RQYWQgKiBwYWQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfZGVtdXhfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogc2lua3BhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfZGVtdXhfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBzaW5rcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F2aV9kZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLSNpZiAwCi1zdGF0aWMgdm9pZCBnc3RfYXZpX2RlbXV4X3NldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEluZGV4ICogaW5kZXgpOwotc3RhdGljIEdzdEluZGV4ICpnc3RfYXZpX2RlbXV4X2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotI2VuZGlmCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2F2aV9kZW11eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIHZvaWQgZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXggKEdzdEF2aURlbXV4ICogYXZpKTsKLXN0YXRpYyB2b2lkIGdzdF9hdmlfZGVtdXhfZ2V0X2J1ZmZlcl9pbmZvIChHc3RBdmlEZW11eCAqIGF2aSwKLSAgICBHc3RBdmlTdHJlYW0gKiBzdHJlYW0sIGd1aW50IGVudHJ5X24sIEdzdENsb2NrVGltZSAqIHRpbWVzdGFtcCwKLSAgICBHc3RDbG9ja1RpbWUgKiB0c19lbmQsIGd1aW50NjQgKiBvZmZzZXQsIGd1aW50NjQgKiBvZmZzZXRfZW5kKTsKLQotc3RhdGljIHZvaWQgZ3N0X2F2aV9kZW11eF9wYXJzZV9pZGl0IChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyB2b2lkIGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX3RhZ192YWx1ZSAoR3N0QXZpRGVtdXggKiBhdmksIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LAotICAgIGNvbnN0IGdjaGFyICogdHlwZSwgZ3VpbnQ4ICogcHRyLCBndWludCB0c2l6ZSk7Ci0KLS8qIEdPYmplY3QgbWV0aG9kcyAqLwotCi0jZGVmaW5lIGdzdF9hdmlfZGVtdXhfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXZpRGVtdXgsIGdzdF9hdmlfZGVtdXgsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9jbGFzc19pbml0IChHc3RBdmlEZW11eENsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdFBhZFRlbXBsYXRlICp2aWRlb3NyY3RlbXBsLCAqYXVkaW9zcmN0ZW1wbCwgKnN1YnNyY3RlbXBsLCAqc3VicGljc3JjdGVtcGw7Ci0gIEdzdENhcHMgKmF1ZGNhcHMsICp2aWRjYXBzLCAqc3ViY2FwcywgKnN1YnBpY2NhcHM7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGF2aWRlbXV4X2RlYnVnLCAiYXZpZGVtdXgiLAotICAgICAgMCwgIkRlbXV4ZXIgZm9yIEFWSSBzdHJlYW1zIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfYXZpX2RlbXV4X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F2aV9kZW11eF9jaGFuZ2Vfc3RhdGUpOwotI2lmIDAKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2V0X2luZGV4ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfc2V0X2luZGV4KTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Z2V0X2luZGV4ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfZ2V0X2luZGV4KTsKLSNlbmRpZgotCi0gIGF1ZGNhcHMgPSBnc3RfcmlmZl9jcmVhdGVfYXVkaW9fdGVtcGxhdGVfY2FwcyAoKTsKLSAgZ3N0X2NhcHNfYXBwZW5kIChhdWRjYXBzLCBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1hdmktdW5rbm93biIpKTsKLSAgYXVkaW9zcmN0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgiYXVkaW9fJXUiLAotICAgICAgR1NUX1BBRF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLCBhdWRjYXBzKTsKLQotICB2aWRjYXBzID0gZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX3RlbXBsYXRlX2NhcHMgKCk7Ci0gIGdzdF9jYXBzX2FwcGVuZCAodmlkY2FwcywgZ3N0X3JpZmZfY3JlYXRlX2lhdnNfdGVtcGxhdGVfY2FwcyAoKSk7Ci0gIGdzdF9jYXBzX2FwcGVuZCAodmlkY2FwcywgZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtYXZpLXVua25vd24iKSk7Ci0gIHZpZGVvc3JjdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInZpZGVvXyV1IiwKLSAgICAgIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywgdmlkY2Fwcyk7Ci0KLSAgc3ViY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXN1YnRpdGxlLWF2aSIpOwotICBzdWJzcmN0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3VidGl0bGVfJXUiLAotICAgICAgR1NUX1BBRF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLCBzdWJjYXBzKTsKLSAgc3VicGljY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJzdWJwaWN0dXJlL3gteHN1YiIpOwotICBzdWJwaWNzcmN0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3VicGljdHVyZV8ldSIsCi0gICAgICBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsIHN1YnBpY2NhcHMpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCBhdWRpb3NyY3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgdmlkZW9zcmN0ZW1wbCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsIHN1YnNyY3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgc3VicGljc3JjdGVtcGwpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGwpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBdmkgZGVtdXhlciIsCi0gICAgICAiQ29kZWMvRGVtdXhlciIsCi0gICAgICAiRGVtdWx0aXBsZXggYW4gYXZpIGZpbGUgaW50byBhdWRpbyBhbmQgdmlkZW8iLAotICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCAiCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4sICIKLSAgICAgICJUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9pbml0IChHc3RBdmlEZW11eCAqIGF2aSkKLXsKLSAgYXZpLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rX3RlbXBsLCAic2luayIpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoYXZpLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfc2lua19hY3RpdmF0ZSkpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKGF2aS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXZpX2RlbXV4X3NpbmtfYWN0aXZhdGVfbW9kZSkpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoYXZpLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGF2aS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXZpX2RlbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGF2aSksIGF2aS0+c2lua3BhZCk7Ci0KLSAgYXZpLT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBhdmktPmZsb3djb21iaW5lciA9IGdzdF9mbG93X2NvbWJpbmVyX25ldyAoKTsKLQotICBnc3RfYXZpX2RlbXV4X3Jlc2V0IChhdmkpOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGF2aSwgR1NUX0VMRU1FTlRfRkxBR19JTkRFWEFCTEUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QXZpRGVtdXggKmF2aSA9IEdTVF9BVklfREVNVVggKG9iamVjdCk7Ci0KLSAgR1NUX0RFQlVHICgiQVZJOiBmaW5hbGl6ZSIpOwotCi0gIGdfb2JqZWN0X3VucmVmIChhdmktPmFkYXB0ZXIpOwotICBnc3RfZmxvd19jb21iaW5lcl9mcmVlIChhdmktPmZsb3djb21iaW5lcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9yZXNldF9zdHJlYW0gKEdzdEF2aURlbXV4ICogYXZpLCBHc3RBdmlTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIGdfZnJlZSAoc3RyZWFtLT5zdHJoKTsKLSAgZ19mcmVlIChzdHJlYW0tPnN0cmYuZGF0YSk7Ci0gIGdfZnJlZSAoc3RyZWFtLT5uYW1lKTsKLSAgZ19mcmVlIChzdHJlYW0tPmluZGV4KTsKLSAgZ19mcmVlIChzdHJlYW0tPmluZGV4ZXMpOwotICBpZiAoc3RyZWFtLT5pbml0ZGF0YSkKLSAgICBnc3RfYnVmZmVyX3VucmVmIChzdHJlYW0tPmluaXRkYXRhKTsKLSAgaWYgKHN0cmVhbS0+ZXh0cmFkYXRhKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHN0cmVhbS0+ZXh0cmFkYXRhKTsKLSAgaWYgKHN0cmVhbS0+cmdiOF9wYWxldHRlKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHN0cmVhbS0+cmdiOF9wYWxldHRlKTsKLSAgaWYgKHN0cmVhbS0+cGFkKSB7Ci0gICAgaWYgKHN0cmVhbS0+ZXhwb3NlZCkgewotICAgICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzdHJlYW0tPnBhZCwgRkFMU0UpOwotICAgICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoYXZpKSwgc3RyZWFtLT5wYWQpOwotICAgICAgZ3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZCAoYXZpLT5mbG93Y29tYmluZXIsIHN0cmVhbS0+cGFkKTsKLSAgICB9IGVsc2UKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbS0+cGFkKTsKLSAgfQotICBpZiAoc3RyZWFtLT50YWdsaXN0KSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChzdHJlYW0tPnRhZ2xpc3QpOwotICAgIHN0cmVhbS0+dGFnbGlzdCA9IE5VTEw7Ci0gIH0KLSAgbWVtc2V0IChzdHJlYW0sIDAsIHNpemVvZiAoR3N0QXZpU3RyZWFtKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX2RlbXV4X3Jlc2V0IChHc3RBdmlEZW11eCAqIGF2aSkKLXsKLSAgZ2ludCBpOwotCi0gIEdTVF9ERUJVRyAoIkFWSTogcmVzZXQiKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXZpLT5udW1fc3RyZWFtczsgaSsrKQotICAgIGdzdF9hdmlfZGVtdXhfcmVzZXRfc3RyZWFtIChhdmksICZhdmktPnN0cmVhbVtpXSk7Ci0KLSAgYXZpLT5oZWFkZXJfc3RhdGUgPSBHU1RfQVZJX0RFTVVYX0hFQURFUl9UQUdfTElTVDsKLSAgYXZpLT5udW1fc3RyZWFtcyA9IDA7Ci0gIGF2aS0+bnVtX3Zfc3RyZWFtcyA9IDA7Ci0gIGF2aS0+bnVtX2Ffc3RyZWFtcyA9IDA7Ci0gIGF2aS0+bnVtX3Rfc3RyZWFtcyA9IDA7Ci0gIGF2aS0+bnVtX3NwX3N0cmVhbXMgPSAwOwotICBhdmktPm1haW5fc3RyZWFtID0gLTE7Ci0KLSAgYXZpLT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gIGF2aS0+Z3JvdXBfaWQgPSBHX01BWFVJTlQ7Ci0KLSAgYXZpLT5zdGF0ZSA9IEdTVF9BVklfREVNVVhfU1RBUlQ7Ci0gIGF2aS0+b2Zmc2V0ID0gMDsKLSAgYXZpLT5idWlsZGluZ19pbmRleCA9IEZBTFNFOwotCi0gIGF2aS0+aW5kZXhfb2Zmc2V0ID0gMDsKLSAgZ19mcmVlIChhdmktPmF2aWgpOwotICBhdmktPmF2aWggPSBOVUxMOwotCi0jaWYgMAotICBpZiAoYXZpLT5lbGVtZW50X2luZGV4KQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGF2aS0+ZWxlbWVudF9pbmRleCk7Ci0gIGF2aS0+ZWxlbWVudF9pbmRleCA9IE5VTEw7Ci0jZW5kaWYKLQotICBpZiAoYXZpLT5zZWdfZXZlbnQpIHsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGF2aS0+c2VnX2V2ZW50KTsKLSAgICBhdmktPnNlZ19ldmVudCA9IE5VTEw7Ci0gIH0KLSAgaWYgKGF2aS0+c2Vla19ldmVudCkgewotICAgIGdzdF9ldmVudF91bnJlZiAoYXZpLT5zZWVrX2V2ZW50KTsKLSAgICBhdmktPnNlZWtfZXZlbnQgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGF2aS0+Z2xvYmFsdGFncykKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGF2aS0+Z2xvYmFsdGFncyk7Ci0gIGF2aS0+Z2xvYmFsdGFncyA9IE5VTEw7Ci0KLSAgYXZpLT5nb3RfdGFncyA9IFRSVUU7ICAgICAgICAgLyogd2UgYWx3YXlzIHdhbnQgdG8gcHVzaCBnbG9iYWwgdGFncyAqLwotICBhdmktPmhhdmVfZW9zID0gRkFMU0U7Ci0gIGF2aS0+c2Vla2FibGUgPSBUUlVFOwotCi0gIGdzdF9hZGFwdGVyX2NsZWFyIChhdmktPmFkYXB0ZXIpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZhdmktPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGF2aS0+c2VnbWVudF9zZXFudW0gPSAwOwotfQotCi0KLS8qIEdzdEVsZW1lbnQgbWV0aG9kcyAqLwotCi0jaWYgMAotc3RhdGljIGNvbnN0IEdzdEZvcm1hdCAqCi1nc3RfYXZpX2RlbXV4X2dldF9zcmNfZm9ybWF0cyAoR3N0UGFkICogcGFkKQotewotICBHc3RBdmlTdHJlYW0gKnN0cmVhbSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLQotICBzdGF0aWMgY29uc3QgR3N0Rm9ybWF0IHNyY19hX2Zvcm1hdHNbXSA9IHsKLSAgICBHU1RfRk9STUFUX1RJTUUsCi0gICAgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICBHU1RfRk9STUFUX0RFRkFVTFQsCi0gICAgMAotICB9OwotICBzdGF0aWMgY29uc3QgR3N0Rm9ybWF0IHNyY192X2Zvcm1hdHNbXSA9IHsKLSAgICBHU1RfRk9STUFUX1RJTUUsCi0gICAgR1NUX0ZPUk1BVF9ERUZBVUxULAotICAgIDAKLSAgfTsKLQotICByZXR1cm4gKHN0cmVhbS0+c3RyaC0+dHlwZSA9PSBHU1RfUklGRl9GQ0NfYXVkcyA/Ci0gICAgICBzcmNfYV9mb3JtYXRzIDogc3JjX3ZfZm9ybWF0cyk7Ci19Ci0jZW5kaWYKLQotLyogYXNzdW1lcyBzdHJlYW0tPnN0cmYuYXVkcy0+YXZfYnBzICE9IDAgKi8KLXN0YXRpYyBpbmxpbmUgR3N0Q2xvY2tUaW1lCi1hdmlfc3RyZWFtX2NvbnZlcnRfYnl0ZXNfdG9fdGltZV91bmNoZWNrZWQgKEdzdEF2aVN0cmVhbSAqIHN0cmVhbSwKLSAgICBndWludDY0IGJ5dGVzKQotewotICByZXR1cm4gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoYnl0ZXMsIEdTVF9TRUNPTkQsCi0gICAgICBzdHJlYW0tPnN0cmYuYXVkcy0+YXZfYnBzKTsKLX0KLQotc3RhdGljIGlubGluZSBndWludDY0Ci1hdmlfc3RyZWFtX2NvbnZlcnRfdGltZV90b19ieXRlc191bmNoZWNrZWQgKEdzdEF2aVN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHRpbWUsIHN0cmVhbS0+c3RyZi5hdWRzLT5hdl9icHMsCi0gICAgICBHU1RfU0VDT05EKTsKLX0KLQotLyogYXNzdW1lcyBzdHJlYW0tPnN0cmgtPnJhdGUgIT0gMCAqLwotc3RhdGljIGlubGluZSBHc3RDbG9ja1RpbWUKLWF2aV9zdHJlYW1fY29udmVydF9mcmFtZXNfdG9fdGltZV91bmNoZWNrZWQgKEdzdEF2aVN0cmVhbSAqIHN0cmVhbSwKLSAgICBndWludDY0IGZyYW1lcykKLXsKLSAgcmV0dXJuIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZnJhbWVzLCBzdHJlYW0tPnN0cmgtPnNjYWxlICogR1NUX1NFQ09ORCwKLSAgICAgIHN0cmVhbS0+c3RyaC0+cmF0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQ2NAotYXZpX3N0cmVhbV9jb252ZXJ0X3RpbWVfdG9fZnJhbWVzX3VuY2hlY2tlZCAoR3N0QXZpU3RyZWFtICogc3RyZWFtLAotICAgIEdzdENsb2NrVGltZSB0aW1lKQotewotICByZXR1cm4gZ3N0X3V0aWxfdWludDY0X3NjYWxlICh0aW1lLCBzdHJlYW0tPnN0cmgtPnJhdGUsCi0gICAgICBzdHJlYW0tPnN0cmgtPnNjYWxlICogR1NUX1NFQ09ORCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9zcmNfY29udmVydCAoR3N0UGFkICogcGFkLAotICAgIEdzdEZvcm1hdCBzcmNfZm9ybWF0LAotICAgIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCAqIGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBHc3RBdmlTdHJlYW0gKnN0cmVhbSA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLAotICAgICAgIlJlY2VpdmVkICBzcmNfZm9ybWF0OiVzLCBzcmNfdmFsdWU6JSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgIiwgZGVzdF9mb3JtYXQ6JXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lIChzcmNfZm9ybWF0KSwgc3JjX3ZhbHVlLAotICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoKmRlc3RfZm9ybWF0KSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNyY19mb3JtYXQgPT0gKmRlc3RfZm9ybWF0KSkgewotICAgICpkZXN0X3ZhbHVlID0gc3JjX3ZhbHVlOwotICAgIGdvdG8gZG9uZTsKLSAgfQotICBpZiAoR19VTkxJS0VMWSAoIXN0cmVhbS0+c3RyaCB8fCAhc3RyZWFtLT5zdHJmLmRhdGEpKSB7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci0gIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPnN0cmgtPnR5cGUgPT0gR1NUX1JJRkZfRkNDX3ZpZHMgJiYKLSAgICAgICAgICAoc3JjX2Zvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTCi0gICAgICAgICAgICAgIHx8ICpkZXN0X2Zvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSkpIHsKLSAgICByZXMgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBzd2l0Y2ggKHNyY19mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgIHN3aXRjaCAoKmRlc3RfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNyY192YWx1ZSwKLSAgICAgICAgICAgICAgc3RyZWFtLT5zdHJmLmF1ZHMtPmF2X2JwcywgR1NUX1NFQ09ORCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgotICAgICAgICAgICpkZXN0X3ZhbHVlID0KLSAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChzcmNfdmFsdWUsIHN0cmVhbS0+c3RyaC0+cmF0ZSwKLSAgICAgICAgICAgICAgc3RyZWFtLT5zdHJoLT5zY2FsZSAqIEdTVF9TRUNPTkQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgc3dpdGNoICgqZGVzdF9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICAgICAgaWYgKHN0cmVhbS0+c3RyZi5hdWRzLT5hdl9icHMgIT0gMCkgewotICAgICAgICAgICAgKmRlc3RfdmFsdWUgPSBhdmlfc3RyZWFtX2NvbnZlcnRfYnl0ZXNfdG9fdGltZV91bmNoZWNrZWQgKHN0cmVhbSwKLSAgICAgICAgICAgICAgICBzcmNfdmFsdWUpOwotICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgIHN3aXRjaCAoKmRlc3RfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9USU1FOgotICAgICAgICAgICpkZXN0X3ZhbHVlID0KLSAgICAgICAgICAgICAgYXZpX3N0cmVhbV9jb252ZXJ0X2ZyYW1lc190b190aW1lX3VuY2hlY2tlZCAoc3RyZWFtLCBzcmNfdmFsdWUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICB9Ci0KLWRvbmU6Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsCi0gICAgICAiUmV0dXJuaW5nIHJlczolZCBkZXN0X2Zvcm1hdDolcyBkZXN0X3ZhbHVlOiUiIEdfR1VJTlQ2NF9GT1JNQVQsIHJlcywKLSAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKCpkZXN0X2Zvcm1hdCksICpkZXN0X3ZhbHVlKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdEF2aURlbXV4ICphdmkgPSBHU1RfQVZJX0RFTVVYIChwYXJlbnQpOwotCi0gIEdzdEF2aVN0cmVhbSAqc3RyZWFtID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotCi0gIGlmICghc3RyZWFtLT5zdHJoIHx8ICFzdHJlYW0tPnN0cmYuZGF0YSkKLSAgICByZXR1cm4gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOnsKLSAgICAgIGdpbnQ2NCBwb3MgPSAwOwotCi0gICAgICBHU1RfREVCVUcgKCJwb3MgcXVlcnkgZm9yIHN0cmVhbSAldTogZnJhbWVzICV1LCBieXRlcyAldSIsCi0gICAgICAgICAgc3RyZWFtLT5udW0sIHN0cmVhbS0+Y3VycmVudF9lbnRyeSwgc3RyZWFtLT5jdXJyZW50X3RvdGFsKTsKLQotICAgICAgLyogRklYTUUsIHRoaXMgbG9va3MgY2x1bXN5ICovCi0gICAgICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlID09IEdTVF9SSUZGX0ZDQ19hdWRzKSB7Ci0gICAgICAgIGlmIChzdHJlYW0tPmlzX3ZicikgewotICAgICAgICAgIC8qIFZCUiAqLwotICAgICAgICAgIHBvcyA9IGF2aV9zdHJlYW1fY29udmVydF9mcmFtZXNfdG9fdGltZV91bmNoZWNrZWQgKHN0cmVhbSwKLSAgICAgICAgICAgICAgc3RyZWFtLT5jdXJyZW50X2VudHJ5KTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJWQlIgY29udmVydCBmcmFtZSAldSwgdGltZSAlIgotICAgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIHN0cmVhbS0+Y3VycmVudF9lbnRyeSwgR1NUX1RJTUVfQVJHUyAocG9zKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLT5zdHJmLmF1ZHMtPmF2X2JwcyAhPSAwKSB7Ci0gICAgICAgICAgLyogQ0JSICovCi0gICAgICAgICAgcG9zID0gYXZpX3N0cmVhbV9jb252ZXJ0X2J5dGVzX3RvX3RpbWVfdW5jaGVja2VkIChzdHJlYW0sCi0gICAgICAgICAgICAgIHN0cmVhbS0+Y3VycmVudF90b3RhbCk7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLAotICAgICAgICAgICAgICAiQ0JSIGNvbnZlcnQgYnl0ZXMgJXUsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgICBzdHJlYW0tPmN1cnJlbnRfdG90YWwsIEdTVF9USU1FX0FSR1MgKHBvcykpOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS0+aWR4X24gIT0gMCAmJiBzdHJlYW0tPnRvdGFsX2J5dGVzICE9IDApIHsKLSAgICAgICAgICAvKiBjYWxjdWxhdGUgdGltZXN0YW1wcyBiYXNlZCBvbiBwZXJjZW50YWdlIG9mIGxlbmd0aCAqLwotICAgICAgICAgIGd1aW50NjQgeGxlbiA9IGF2aS0+YXZpaC0+dXNfZnJhbWUgKgotICAgICAgICAgICAgICBhdmktPmF2aWgtPnRvdF9mcmFtZXMgKiBHU1RfVVNFQ09ORDsKLQotICAgICAgICAgIHBvcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoeGxlbiwgc3RyZWFtLT5jdXJyZW50X3RvdGFsLAotICAgICAgICAgICAgICBzdHJlYW0tPnRvdGFsX2J5dGVzKTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAgICJDQlIgcGVyYyBjb252ZXJ0IGJ5dGVzICV1LCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgc3RyZWFtLT5jdXJyZW50X3RvdGFsLCBHU1RfVElNRV9BUkdTIChwb3MpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiB3ZSBkb24ndCBrbm93ICovCi0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHJlYW0tPnN0cmgtPnJhdGUgIT0gMCkgewotICAgICAgICAgIHBvcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoKGd1aW50NjQpIHN0cmVhbS0+Y3VycmVudF9lbnRyeSAqCi0gICAgICAgICAgICAgIHN0cmVhbS0+c3RyaC0+c2NhbGUsIEdTVF9TRUNPTkQsIChndWludDY0KSBzdHJlYW0tPnN0cmgtPnJhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHBvcyA9IHN0cmVhbS0+Y3VycmVudF9lbnRyeSAqIGF2aS0+YXZpaC0+dXNfZnJhbWUgKiBHU1RfVVNFQ09ORDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHJlcykgewotICAgICAgICBHU1RfREVCVUcgKCJwb3MgcXVlcnkgOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHBvcykpOwotICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBwb3MpOwotICAgICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HICgicG9zIHF1ZXJ5IGZhaWxlZCIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0gICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0KLSAgICAgIC8qIG9ubHkgYWN0IG9uIGF1ZGlvIG9yIHZpZGVvIHN0cmVhbXMgKi8KLSAgICAgIGlmIChzdHJlYW0tPnN0cmgtPnR5cGUgIT0gR1NUX1JJRkZfRkNDX2F1ZHMgJiYKLSAgICAgICAgICBzdHJlYW0tPnN0cmgtPnR5cGUgIT0gR1NUX1JJRkZfRkNDX3ZpZHMgJiYKLSAgICAgICAgICBzdHJlYW0tPnN0cmgtPnR5cGUgIT0gR1NUX1JJRkZfRkNDX2lhdnMpIHsKLSAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiB0YWtlIHN0cmVhbSBkdXJhdGlvbiwgZmFsbCBiYWNrIHRvIGF2aWggZHVyYXRpb24gKi8KLSAgICAgIGlmICgoZHVyYXRpb24gPSBzdHJlYW0tPmR1cmF0aW9uKSA9PSAtMSkKLSAgICAgICAgaWYgKChkdXJhdGlvbiA9IHN0cmVhbS0+aGRyX2R1cmF0aW9uKSA9PSAtMSkKLSAgICAgICAgICBkdXJhdGlvbiA9IGF2aS0+ZHVyYXRpb247Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmbXQsIE5VTEwpOwotCi0gICAgICBzd2l0Y2ggKGZtdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm10LCBkdXJhdGlvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgotICAgICAgICB7Ci0gICAgICAgICAgZ2ludDY0IGR1cjsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdWVyeSwgInRvdGFsIGZyYW1lcyBpcyAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgICAgICAgICBzdHJlYW0tPmlkeF9uKTsKLQotICAgICAgICAgIGlmIChzdHJlYW0tPmlkeF9uID4gMCkKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBmbXQsIHN0cmVhbS0+aWR4X24pOwotICAgICAgICAgIGVsc2UgaWYgKGdzdF9wYWRfcXVlcnlfY29udmVydCAocGFkLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAgICAgICBkdXJhdGlvbiwgZm10LCAmZHVyKSkKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBmbXQsIGR1cik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOnsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZtdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZm10ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBnYm9vbGVhbiBzZWVrYWJsZSA9IFRSVUU7Ci0KLSAgICAgICAgaWYgKGF2aS0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgc2Vla2FibGUgPSBhdmktPnNlZWthYmxlOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrYWJsZSwKLSAgICAgICAgICAgIDAsIHN0cmVhbS0+ZHVyYXRpb24pOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0NPTlZFUlQ6ewotICAgICAgR3N0Rm9ybWF0IHNyY19mbXQsIGRlc3RfZm10OwotICAgICAgZ2ludDY0IHNyY192YWwsIGRlc3RfdmFsOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY29udmVydCAocXVlcnksICZzcmNfZm10LCAmc3JjX3ZhbCwgJmRlc3RfZm10LCAmZGVzdF92YWwpOwotICAgICAgaWYgKChyZXMgPSBnc3RfYXZpX2RlbXV4X3NyY19jb252ZXJ0IChwYWQsIHNyY19mbXQsIHNyY192YWwsICZkZXN0X2ZtdCwKLSAgICAgICAgICAgICAgICAgICZkZXN0X3ZhbCkpKQotICAgICAgICBnc3RfcXVlcnlfc2V0X2NvbnZlcnQgKHF1ZXJ5LCBzcmNfZm10LCBzcmNfdmFsLCBkZXN0X2ZtdCwgZGVzdF92YWwpOwotICAgICAgZWxzZQotICAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgICBmb3JtYXQgPSBhdmktPnNlZ21lbnQuZm9ybWF0OwotCi0gICAgICBzdGFydCA9Ci0gICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZhdmktPnNlZ21lbnQsIGZvcm1hdCwKLSAgICAgICAgICBhdmktPnNlZ21lbnQuc3RhcnQpOwotICAgICAgaWYgKChzdG9wID0gYXZpLT5zZWdtZW50LnN0b3ApID09IC0xKQotICAgICAgICBzdG9wID0gYXZpLT5zZWdtZW50LmR1cmF0aW9uOwotICAgICAgZWxzZQotICAgICAgICBzdG9wID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZhdmktPnNlZ21lbnQsIGZvcm1hdCwgc3RvcCk7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAocXVlcnksIGF2aS0+c2VnbWVudC5yYXRlLCBmb3JtYXQsIHN0YXJ0LCBzdG9wKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotI2lmIDAKLXN0YXRpYyBjb25zdCBHc3RFdmVudE1hc2sgKgotZ3N0X2F2aV9kZW11eF9nZXRfZXZlbnRfbWFzayAoR3N0UGFkICogcGFkKQotewotICBzdGF0aWMgY29uc3QgR3N0RXZlbnRNYXNrIG1hc2tzW10gPSB7Ci0gICAge0dTVF9FVkVOVF9TRUVLLCBHU1RfU0VFS19NRVRIT0RfU0VUIHwgR1NUX1NFRUtfRkxBR19LRVlfVU5JVH0sCi0gICAgezAsfQotICB9OwotCi0gIHJldHVybiBtYXNrczsKLX0KLSNlbmRpZgotCi0jaWYgMAotc3RhdGljIGd1aW50NjQKLWdzdF9hdmlfZGVtdXhfc2Vla19zdHJlYW1zIChHc3RBdmlEZW11eCAqIGF2aSwgZ3VpbnQ2NCBvZmZzZXQsIGdib29sZWFuIGJlZm9yZSkKLXsKLSAgR3N0QXZpU3RyZWFtICpzdHJlYW07Ci0gIEdzdEluZGV4RW50cnkgKmVudHJ5OwotICBnaW50IGk7Ci0gIGdpbnQ2NCB2YWwsIG1pbiA9IG9mZnNldDsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXZpLT5udW1fc3RyZWFtczsgaSsrKSB7Ci0gICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotCi0gICAgZW50cnkgPSBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5IChhdmktPmVsZW1lbnRfaW5kZXgsIHN0cmVhbS0+aW5kZXhfaWQsCi0gICAgICAgIGJlZm9yZSA/IEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFIDogR1NUX0lOREVYX0xPT0tVUF9BRlRFUiwKLSAgICAgICAgR1NUX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSwgR1NUX0ZPUk1BVF9CWVRFUywgb2Zmc2V0KTsKLQotICAgIGlmIChiZWZvcmUpIHsKLSAgICAgIGlmIChlbnRyeSkgewotICAgICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9CWVRFUywgJnZhbCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInN0cmVhbSAlZCwgcHJldmlvdXMgZW50cnkgYXQgJSIKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIGksIHZhbCk7Ci0gICAgICAgIGlmICh2YWwgPCBtaW4pCi0gICAgICAgICAgbWluID0gdmFsOwotICAgICAgfQotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCFlbnRyeSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAibm8gcG9zaXRpb24gZm9yIHN0cmVhbSAlZCwgYXNzdW1pbmcgYXQgc3RhcnQiLCBpKTsKLSAgICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSA9IDA7Ci0gICAgICBzdHJlYW0tPmN1cnJlbnRfdG90YWwgPSAwOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoZW50cnksIEdTVF9GT1JNQVRfQllURVMsICZ2YWwpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInN0cmVhbSAlZCwgbmV4dCBlbnRyeSBhdCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICBpLCB2YWwpOwotCi0gICAgZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoZW50cnksIEdTVF9GT1JNQVRfVElNRSwgJnZhbCk7Ci0gICAgc3RyZWFtLT5jdXJyZW50X3RvdGFsID0gdmFsOwotICAgIGdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgKGVudHJ5LCBHU1RfRk9STUFUX0RFRkFVTFQsICZ2YWwpOwotICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSA9IHZhbDsKLSAgfQotCi0gIHJldHVybiBtaW47Ci19Ci0jZW5kaWYKLQotc3RhdGljIGdpbnQKLWdzdF9hdmlfZGVtdXhfaW5kZXhfZW50cnlfb2Zmc2V0X3NlYXJjaCAoR3N0QXZpSW5kZXhFbnRyeSAqIGVudHJ5LAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGlmIChlbnRyeS0+b2Zmc2V0IDwgKm9mZnNldCkKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKGVudHJ5LT5vZmZzZXQgPiAqb2Zmc2V0KQotICAgIHJldHVybiAxOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWdzdF9hdmlfZGVtdXhfc2Vla19zdHJlYW1zX2luZGV4IChHc3RBdmlEZW11eCAqIGF2aSwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ2Jvb2xlYW4gYmVmb3JlKQotewotICBHc3RBdmlTdHJlYW0gKnN0cmVhbTsKLSAgR3N0QXZpSW5kZXhFbnRyeSAqZW50cnk7Ci0gIGdpbnQgaTsKLSAgZ2ludDY0IHZhbCwgbWluID0gb2Zmc2V0OwotICBndWludCBpbmRleCA9IDA7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykgewotICAgIHN0cmVhbSA9ICZhdmktPnN0cmVhbVtpXTsKLQotICAgIC8qIGNvbXBlbnNhdGUgZm9yIGNodW5rIGhlYWRlciAqLwotICAgIG9mZnNldCArPSA4OwotICAgIGVudHJ5ID0KLSAgICAgICAgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoc3RyZWFtLT5pbmRleCwgc3RyZWFtLT5pZHhfbiwKLSAgICAgICAgc2l6ZW9mIChHc3RBdmlJbmRleEVudHJ5KSwKLSAgICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIGdzdF9hdmlfZGVtdXhfaW5kZXhfZW50cnlfb2Zmc2V0X3NlYXJjaCwKLSAgICAgICAgYmVmb3JlID8gR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSA6IEdTVF9TRUFSQ0hfTU9ERV9BRlRFUiwgJm9mZnNldCwgTlVMTCk7Ci0gICAgb2Zmc2V0IC09IDg7Ci0KLSAgICBpZiAoZW50cnkpCi0gICAgICBpbmRleCA9IGVudHJ5IC0gc3RyZWFtLT5pbmRleDsKLQotICAgIGlmIChiZWZvcmUpIHsKLSAgICAgIGlmIChlbnRyeSkgewotICAgICAgICB2YWwgPSBzdHJlYW0tPmluZGV4W2luZGV4XS5vZmZzZXQ7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICJzdHJlYW0gJWQsIHByZXZpb3VzIGVudHJ5IGF0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGksIHZhbCk7Ci0gICAgICAgIGlmICh2YWwgPCBtaW4pCi0gICAgICAgICAgbWluID0gdmFsOwotICAgICAgfQotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCFlbnRyeSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAibm8gcG9zaXRpb24gZm9yIHN0cmVhbSAlZCwgYXNzdW1pbmcgYXQgc3RhcnQiLCBpKTsKLSAgICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSA9IDA7Ci0gICAgICBzdHJlYW0tPmN1cnJlbnRfdG90YWwgPSAwOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgdmFsID0gc3RyZWFtLT5pbmRleFtpbmRleF0ub2Zmc2V0IC0gODsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzdHJlYW0gJWQsIG5leHQgZW50cnkgYXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgaSwKLSAgICAgICAgdmFsKTsKLQotICAgIHN0cmVhbS0+Y3VycmVudF90b3RhbCA9IHN0cmVhbS0+aW5kZXhbaW5kZXhdLnRvdGFsOwotICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSA9IGluZGV4OwotICB9Ci0KLSAgcmV0dXJuIG1pbjsKLX0KLQotI2RlZmluZSBHU1RfQVZJX1NFRUtfUFVTSF9ESVNQTEFDRSAgICAgKDQgKiBHU1RfU0VDT05EKQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdEF2aURlbXV4ICphdmkgPSBHU1RfQVZJX0RFTVVYIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICJoYXZlIGV2ZW50IHR5cGUgJXM6ICVwIG9uIHNpbmsgcGFkIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBnaW50NjQgYm9mZnNldCwgb2Zmc2V0ID0gMDsKLSAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICAgIEdzdEV2ZW50ICpzZWdtZW50X2V2ZW50OwotCi0gICAgICAvKiBzb21lIGRlYnVnIG91dHB1dCAqLwotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInJlY2VpdmVkIG5ld3NlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgICAgICZzZWdtZW50KTsKLQotICAgICAgLyogY2hhaW4gd2lsbCBzZW5kIGluaXRpYWwgbmV3c2VnbWVudCBhZnRlciBwYWRzIGhhdmUgYmVlbiBhZGRlZCAqLwotICAgICAgaWYgKGF2aS0+c3RhdGUgIT0gR1NUX0FWSV9ERU1VWF9NT1ZJKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInN0aWxsIHN0YXJ0aW5nLCBlYXRpbmcgZXZlbnQiKTsKLSAgICAgICAgZ290byBleGl0OwotICAgICAgfQotCi0gICAgICAvKiB3ZSBvbmx5IGV4cGVjdCBhIEJZVEUgc2VnbWVudCwgZS5nLiBmb2xsb3dpbmcgYSBzZWVrICovCi0gICAgICBpZiAoc2VnbWVudC5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUykgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJ1bnN1cHBvcnRlZCBzZWdtZW50IGZvcm1hdCwgaWdub3JpbmciKTsKLSAgICAgICAgZ290byBleGl0OwotICAgICAgfQotCi0gICAgICBpZiAoYXZpLT5oYXZlX2luZGV4KSB7Ci0gICAgICAgIEdzdEF2aUluZGV4RW50cnkgKmVudHJ5OwotICAgICAgICBndWludCBpID0gMCwgaW5kZXggPSAwLCBrID0gMDsKLSAgICAgICAgR3N0QXZpU3RyZWFtICpzdHJlYW07Ci0KLSAgICAgICAgLyogY29tcGVuc2F0ZSBjaHVuayBoZWFkZXIsIHN0b3JlZCBpbmRleCBvZmZzZXQgcG9pbnRzIGFmdGVyIGhlYWRlciAqLwotICAgICAgICBib2Zmc2V0ID0gc2VnbWVudC5zdGFydCArIDg7Ci0gICAgICAgIC8qIGZpbmQgd2hpY2ggc3RyZWFtIHdlJ3JlIG9uICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICBzdHJlYW0gPSAmYXZpLT5zdHJlYW1baV07Ci0KLSAgICAgICAgICAvKiBmaW5kIHRoZSBpbmRleCBmb3Igc3RhcnQgYnl0ZXMgb2Zmc2V0ICovCi0gICAgICAgICAgZW50cnkgPSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChzdHJlYW0tPmluZGV4LAotICAgICAgICAgICAgICBzdHJlYW0tPmlkeF9uLCBzaXplb2YgKEdzdEF2aUluZGV4RW50cnkpLAotICAgICAgICAgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgZ3N0X2F2aV9kZW11eF9pbmRleF9lbnRyeV9vZmZzZXRfc2VhcmNoLAotICAgICAgICAgICAgICBHU1RfU0VBUkNIX01PREVfQUZURVIsICZib2Zmc2V0LCBOVUxMKTsKLQotICAgICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgaW5kZXggPSBlbnRyeSAtIHN0cmVhbS0+aW5kZXg7Ci0KLSAgICAgICAgICAvKiB3ZSBhcmUgb24gdGhlIHN0cmVhbSB3aXRoIGEgY2h1bmsgc3RhcnQgb2Zmc2V0IGNsb3Nlc3QgdG8gc3RhcnQgKi8KLSAgICAgICAgICBpZiAoIW9mZnNldCB8fCBzdHJlYW0tPmluZGV4W2luZGV4XS5vZmZzZXQgPCBvZmZzZXQpIHsKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cmVhbS0+aW5kZXhbaW5kZXhdLm9mZnNldDsKLSAgICAgICAgICAgIGsgPSBpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBleGFjdCBtYXRjaCBuZWVkcyBubyBmdXJ0aGVyIHNlYXJjaGluZyAqLwotICAgICAgICAgIGlmIChzdHJlYW0tPmluZGV4W2luZGV4XS5vZmZzZXQgPT0gYm9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IHdoaWxlICgrK2kgPCBhdmktPm51bV9zdHJlYW1zKTsKLSAgICAgICAgYm9mZnNldCAtPSA4OwotICAgICAgICBvZmZzZXQgLT0gODsKLSAgICAgICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2tdOwotCi0gICAgICAgIC8qIHNvIHdlIGhhdmUgbm8gaWRlYSB3aGF0IGlzIHRvIGNvbWUsIG9yIHdoZXJlIHdlIGFyZSAqLwotICAgICAgICBpZiAoIW9mZnNldCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiaW5zdWZmaWNpZW50IGluZGV4IGRhdGEsIGZvcmNpbmcgRU9TIik7Ci0gICAgICAgICAgZ290byBlb3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBnZXQgdGhlIHRzIGNvcnJlc3BvbmRpbmcgdG8gc3RhcnQgb2Zmc2V0IGJ5dGVzIGZvciB0aGUgc3RyZWFtICovCi0gICAgICAgIGdzdF9hdmlfZGVtdXhfZ2V0X2J1ZmZlcl9pbmZvIChhdmksIHN0cmVhbSwgaW5kZXgsCi0gICAgICAgICAgICAoR3N0Q2xvY2tUaW1lICopICYgc2VnbWVudC50aW1lLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSNpZiAwCi0gICAgICB9IGVsc2UgaWYgKGF2aS0+ZWxlbWVudF9pbmRleCkgewotICAgICAgICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLQotICAgICAgICAvKiBMZXQncyBjaGVjayBpZiB3ZSBoYXZlIGFuIGluZGV4IGVudHJ5IGZvciB0aGlzIHBvc2l0aW9uICovCi0gICAgICAgIGVudHJ5ID0gZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSAoYXZpLT5lbGVtZW50X2luZGV4LCBhdmktPmluZGV4X2lkLAotICAgICAgICAgICAgR1NUX0lOREVYX0xPT0tVUF9BRlRFUiwgR1NUX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSwKLSAgICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsIHNlZ21lbnQuc3RhcnQpOwotCi0gICAgICAgIC8qIHdlIGNhbiBub3QgZ28gd2hlcmUgd2UgaGF2ZSBub3QgeWV0IGJlZW4gYmVmb3JlIC4uLiAqLwotICAgICAgICBpZiAoIWVudHJ5KSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJpbnN1ZmZpY2llbnQgaW5kZXggZGF0YSwgZm9yY2luZyBFT1MiKTsKLSAgICAgICAgICBnb3RvIGVvczsKLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgKGVudHJ5LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAoZ2ludDY0ICopICYgc2VnbWVudC50aW1lKTsKLSAgICAgICAgZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoZW50cnksIEdTVF9GT1JNQVRfQllURVMsICZvZmZzZXQpOwotI2VuZGlmCi0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIm5vIGluZGV4IGRhdGEsIGZvcmNpbmcgRU9TIik7Ci0gICAgICAgIGdvdG8gZW9zOwotICAgICAgfQotCi0gICAgICBzZWdtZW50LmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICAgIHNlZ21lbnQuc3RhcnQgPSBzZWdtZW50LnRpbWU7Ci0gICAgICBzZWdtZW50LnN0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgc2VnbWVudC5wb3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQ7Ci0KLSAgICAgIC8qIHJlc2N1ZSBkdXJhdGlvbiAqLwotICAgICAgc2VnbWVudC5kdXJhdGlvbiA9IGF2aS0+c2VnbWVudC5kdXJhdGlvbjsKLQotICAgICAgLyogc2V0IHVwIHNlZ21lbnQgYW5kIHNlbmQgZG93bnN0cmVhbSAqLwotICAgICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvICgmc2VnbWVudCwgJmF2aS0+c2VnbWVudCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIlB1c2hpbmcgbmV3c2VnICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnNlZ21lbnQpOwotICAgICAgYXZpLT5zZWdtZW50X3NlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0gICAgICBzZWdtZW50X2V2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoc2VnbWVudF9ldmVudCwgZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KSk7Ci0gICAgICBnc3RfYXZpX2RlbXV4X3B1c2hfZXZlbnQgKGF2aSwgc2VnbWVudF9ldmVudCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIm5leHQgY2h1bmsgZXhwZWN0ZWQgYXQgJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgIGJvZmZzZXQpOwotCi0gICAgICAvKiBhZGp1c3Qgc3RhdGUgZm9yIHN0cmVhbWluZyB0aHJlYWQgYWNjb3JkaW5nbHkgKi8KLSAgICAgIGlmIChhdmktPmhhdmVfaW5kZXgpCi0gICAgICAgIGdzdF9hdmlfZGVtdXhfc2Vla19zdHJlYW1zX2luZGV4IChhdmksIG9mZnNldCwgRkFMU0UpOwotI2lmIDAKLSAgICAgIGVsc2UKLSAgICAgICAgZ3N0X2F2aV9kZW11eF9zZWVrX3N0cmVhbXMgKGF2aSwgb2Zmc2V0LCBGQUxTRSk7Ci0jZW5kaWYKLQotICAgICAgLyogc2V0IHVwIHN0cmVhbWluZyB0aHJlYWQgKi8KLSAgICAgIGdfYXNzZXJ0IChvZmZzZXQgPj0gYm9mZnNldCk7Ci0gICAgICBhdmktPm9mZnNldCA9IGJvZmZzZXQ7Ci0gICAgICBhdmktPnRvZHJvcCA9IG9mZnNldCAtIGJvZmZzZXQ7Ci0KLSAgICBleGl0OgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZW9zOgotICAgICAgLyogc2V0IHVwIGZvciBFT1MgKi8KLSAgICAgIGF2aS0+aGF2ZV9lb3MgPSBUUlVFOwotICAgICAgZ290byBleGl0OwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgewotICAgICAgaWYgKGF2aS0+c3RhdGUgIT0gR1NUX0FWSV9ERU1VWF9NT1ZJKSB7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIERFTVVYLAotICAgICAgICAgICAgKE5VTEwpLCAoImdvdCBlb3MgYW5kIGRpZG4ndCByZWNlaXZlIGEgY29tcGxldGUgaGVhZGVyIG9iamVjdCIpKTsKLSAgICAgIH0gZWxzZSBpZiAoIWdzdF9hdmlfZGVtdXhfcHVzaF9ldmVudCAoYXZpLCBldmVudCkpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgICAgIChOVUxMKSwgKCJnb3QgZW9zIGJ1dCBubyBzdHJlYW1zICh5ZXQpIikpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgewotICAgICAgZ2ludCBpOwotCi0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAoYXZpLT5hZGFwdGVyKTsKLSAgICAgIGF2aS0+aGF2ZV9lb3MgPSBGQUxTRTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBhdmktPm51bV9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAgYXZpLT5zdHJlYW1baV0uZGlzY29udCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBjYXNlIHNvIHRoYXQgdGhlIGV2ZW50IGdldHMgcGFzc2VkIGRvd25zdHJlYW0gKi8KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdEF2aURlbXV4ICphdmkgPSBHU1RfQVZJX0RFTVVYIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICJoYXZlIGV2ZW50IHR5cGUgJXM6ICVwIG9uIHNyYyBwYWQiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIGV2ZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgaWYgKCFhdmktPnN0cmVhbWluZykgewotICAgICAgICByZXMgPSBnc3RfYXZpX2RlbXV4X2hhbmRsZV9zZWVrIChhdmksIHBhZCwgZXZlbnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vla19wdXNoIChhdmksIHBhZCwgZXZlbnQpOwotICAgICAgfQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi0vKiBzdHJlYW1pbmcgaGVscGVyIChwdXNoKSAqLwotCi0vKgotICogZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rX2luZm86Ci0gKiBAYXZpOiBBdmkgb2JqZWN0Ci0gKiBAdGFnOiBob2xkZXIgZm9yIHRhZwotICogQHNpemU6IGhvbGRlciBmb3IgdGFnIHNpemUKLSAqCi0gKiBQZWVrIG5leHQgY2h1bmsgaW5mbyAodGFnIGFuZCBzaXplKQotICoKLSAqIFJldHVybnM6IFRSVUUgd2hlbiBvbmUgY2h1bmsgaW5mbyBoYXMgYmVlbiBnb3QKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmtfaW5mbyAoR3N0QXZpRGVtdXggKiBhdmksIGd1aW50MzIgKiB0YWcsIGd1aW50MzIgKiBzaXplKQotewotICBjb25zdCBndWludDggKmRhdGEgPSBOVUxMOwotCi0gIGlmIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGF2aS0+YWRhcHRlcikgPCA4KQotICAgIHJldHVybiBGQUxTRTsKLQotICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChhdmktPmFkYXB0ZXIsIDgpOwotICAqdGFnID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgKnNpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEgKyA0KTsKLSAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGF2aS0+YWRhcHRlcik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bms6Ci0gKiBAYXZpOiBBdmkgb2JqZWN0Ci0gKiBAdGFnOiBob2xkZXIgZm9yIHRhZwotICogQHNpemU6IGhvbGRlciBmb3IgdGFnIHNpemUKLSAqCi0gKiBQZWVrIGVub3VnaCBkYXRhIGZvciBvbmUgZnVsbCBjaHVuawotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gb25lIGNodW5rIGhhcyBiZWVuIGdvdAotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfcGVla19jaHVuayAoR3N0QXZpRGVtdXggKiBhdmksIGd1aW50MzIgKiB0YWcsIGd1aW50MzIgKiBzaXplKQotewotICBndWludDMyIHBlZWtfc2l6ZSA9IDA7Ci0gIGdpbnQgYXZhaWxhYmxlOwotCi0gIGlmICghZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rX2luZm8gKGF2aSwgdGFnLCBzaXplKSkKLSAgICBnb3RvIHBlZWtfZmFpbGVkOwotCi0gIC8qIHNpemUgMCAtPiBlbXB0eSBkYXRhIGJ1ZmZlciB3b3VsZCBzdXJwcmlzZSBtb3N0IGNhbGxlcnMsCi0gICAqIGxhcmdlIHNpemUgLT4gZG8gbm90IGJvdGhlciB0cnlpbmcgdG8gc3F1ZWV6ZSB0aGF0IGludG8gYWRhcHRlciwKLSAgICogc28gd2UgdGhyb3cgcG9vciBtYW4ncyBleGNlcHRpb24sIHdoaWNoIGNhbiBiZSBjYXVnaHQgaWYgY2FsbGVyIHJlYWxseQotICAgKiB3YW50cyB0byBoYW5kbGUgMCBzaXplIGNodW5rICovCi0gIGlmICghKCpzaXplKSB8fCAoKnNpemUpID49ICgxIDw8IDMwKSkKLSAgICBnb3RvIHN0cmFuZ2Vfc2l6ZTsKLQotICBwZWVrX3NpemUgPSAoKnNpemUgKyAxKSAmIH4xOwotICBhdmFpbGFibGUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGF2aS0+YWRhcHRlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLAotICAgICAgIk5lZWQgdG8gcGVlayBjaHVuayBvZiAlZCBieXRlcyB0byByZWFkIGNodW5rICUiIEdTVF9GT1VSQ0NfRk9STUFUCi0gICAgICAiLCAlZCBieXRlcyBhdmFpbGFibGUiLCAqc2l6ZSwgR1NUX0ZPVVJDQ19BUkdTICgqdGFnKSwgYXZhaWxhYmxlKTsKLQotICBpZiAoYXZhaWxhYmxlIDwgKDggKyBwZWVrX3NpemUpKQotICAgIGdvdG8gbmVlZF9tb3JlOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotcGVla19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIkZhaWxlZCB0byBwZWVrIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1zdHJhbmdlX3NpemU6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwKLSAgICAgICAgIkludmFsaWQvdW5leHBlY3RlZCBjaHVuayBzaXplICVkIGZvciB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsICpzaXplLAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKCp0YWcpKTsKLSAgICAvKiBjaGFpbiBzaG91bGQgZ2l2ZSB1cCAqLwotICAgIGF2aS0+YWJvcnRfYnVmZmVyaW5nID0gVFJVRTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5lZWRfbW9yZToKLSAgewotICAgIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAibmVlZCBtb3JlICVkIDwgJSIgR19HVUlOVDMyX0ZPUk1BVCwKLSAgICAgICAgYXZhaWxhYmxlLCA4ICsgcGVla19zaXplKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogQVZJIGluaXQgKi8KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2VfZmlsZV9oZWFkZXI6Ci0gKiBAZWxlbWVudDogY2FsbGVyIGVsZW1lbnQgKHVzZWQgZm9yIGVycm9ycy9kZWJ1ZykuCi0gKiBAYnVmOiBpbnB1dCBkYXRhIHRvIGJlIHVzZWQgZm9yIHBhcnNpbmcuCi0gKgotICogIk9wZW4iIGEgUklGRi9BVkkgZmlsZS4gVGhlIGJ1ZmZlciBzaG91bGQgYmUgYXQgbGVhc3QgMTIKLSAqIGJ5dGVzIGxvbmcuIFRha2VzIG93bmVyc2hpcCBvZiBAYnVmLgotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgdGhlIGZpbGUgaXMgYSBSSUZGL0FWSSBmaWxlLCBGQUxTRSBvdGhlcndpc2UuCi0gKiAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IsIGNhbGxlciBzaG91bGQgZXJyb3Igb3V0IChmYXRhbCkuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9wYXJzZV9maWxlX2hlYWRlciAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ3VpbnQzMiBkb2N0eXBlOwotICBHc3RDbG9ja1RpbWUgc3RhbXA7Ci0KLSAgc3RhbXAgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpOwotCi0gIC8qIHJpZmZfcGFyc2UgcG9zdHMgYW4gZXJyb3IgKi8KLSAgaWYgKCFnc3RfcmlmZl9wYXJzZV9maWxlX2hlYWRlciAoZWxlbWVudCwgYnVmLCAmZG9jdHlwZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChkb2N0eXBlICE9IEdTVF9SSUZGX1JJRkZfQVZJKQotICAgIGdvdG8gbm90X2F2aTsKLQotICBzdGFtcCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCkgLSBzdGFtcDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImhlYWRlciBwYXJzaW5nIHRvb2sgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoc3RhbXApKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9hdmk6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZWxlbWVudCwgU1RSRUFNLCBXUk9OR19UWVBFLCAoTlVMTCksCi0gICAgICAgICgiRmlsZSBpcyBub3QgYW4gQVZJIGZpbGU6IDB4JSIgR19HSU5UMzJfTU9ESUZJRVIgIngiLCBkb2N0eXBlKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qCi0gKiBSZWFkIEFWSSBmaWxlIHRhZyB3aGVuIHN0cmVhbWluZwotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5pdF9wdXNoIChHc3RBdmlEZW11eCAqIGF2aSkKLXsKLSAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYXZpLT5hZGFwdGVyKSA+PSAxMikgewotICAgIEdzdEJ1ZmZlciAqdG1wOwotCi0gICAgdG1wID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGF2aS0+YWRhcHRlciwgMTIpOwotCi0gICAgR1NUX0RFQlVHICgiUGFyc2luZyBhdmkgaGVhZGVyIik7Ci0gICAgaWYgKCFnc3RfYXZpX2RlbXV4X3BhcnNlX2ZpbGVfaGVhZGVyIChHU1RfRUxFTUVOVF9DQVNUIChhdmkpLCB0bXApKSB7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICAgIEdTVF9ERUJVRyAoImhlYWRlciBvayIpOwotICAgIGF2aS0+b2Zmc2V0ICs9IDEyOwotCi0gICAgYXZpLT5zdGF0ZSA9IEdTVF9BVklfREVNVVhfSEVBREVSOwotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyoKLSAqIFJlYWQgQVZJIGZpbGUgdGFnCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0X3B1bGwgKEdzdEF2aURlbXV4ICogYXZpKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAoYXZpLT5zaW5rcGFkLCBhdmktPm9mZnNldCwgMTIsICZidWYpOwotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXM7Ci0gIGVsc2UgaWYgKCFnc3RfYXZpX2RlbXV4X3BhcnNlX2ZpbGVfaGVhZGVyIChHU1RfRUxFTUVOVF9DQVNUIChhdmkpLCBidWYpKQotICAgIGdvdG8gd3JvbmdfaGVhZGVyOwotCi0gIGF2aS0+b2Zmc2V0ICs9IDEyOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX2hlYWRlcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImVycm9yIHBhcnNpbmcgZmlsZSBoZWFkZXIiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotLyogQVZJIGhlYWRlciBoYW5kbGluZyAqLwotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2VfYXZpaDoKLSAqIEBhdmk6IGNhbGxlciBlbGVtZW50ICh1c2VkIGZvciBlcnJvcnMvZGVidWcpLgotICogQGJ1ZjogaW5wdXQgZGF0YSB0byBiZSB1c2VkIGZvciBwYXJzaW5nLgotICogQGF2aWg6IHBvaW50ZXIgdG8gc3RydWN0dXJlIChmaWxsZWQgaW4gYnkgZnVuY3Rpb24pIGNvbnRhaW5pbmcKLSAqICAgICAgICBzdHJlYW0gaW5mb3JtYXRpb24gKHN1Y2ggYXMgZmxhZ3MsIG51bWJlciBvZiBzdHJlYW1zLCBldGMuKS4KLSAqCi0gKiBSZWFkICdhdmloJyBoZWFkZXIuIERpc2NhcmRzIGJ1ZmZlciBhZnRlciB1c2UuCi0gKgotICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuIFRocm93cyBhbiBlcnJvciBpZgotICogICAgICAgICAgdGhlIGhlYWRlciBpcyBpbnZhbGlkLiBUaGUgY2FsbGVyIHNob3VsZCBlcnJvciBvdXQKLSAqICAgICAgICAgIChmYXRhbCkuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9wYXJzZV9hdmloIChHc3RBdmlEZW11eCAqIGF2aSwKLSAgICBHc3RCdWZmZXIgKiBidWYsIGdzdF9yaWZmX2F2aWggKiogX2F2aWgpCi17Ci0gIGdzdF9yaWZmX2F2aWggKmF2aWg7Ci0gIGdzaXplIHNpemU7Ci0KLSAgaWYgKGJ1ZiA9PSBOVUxMKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICBpZiAoc2l6ZSA8IHNpemVvZiAoZ3N0X3JpZmZfYXZpaCkpCi0gICAgZ290byBhdmloX3Rvb19zbWFsbDsKLQotICBhdmloID0gZ19tYWxsb2MgKHNpemUpOwotICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZiwgMCwgYXZpaCwgc2l6ZSk7Ci0KLSNpZiAoR19CWVRFX09SREVSID09IEdfQklHX0VORElBTikKLSAgYXZpaC0+dXNfZnJhbWUgPSBHVUlOVDMyX0ZST01fTEUgKGF2aWgtPnVzX2ZyYW1lKTsKLSAgYXZpaC0+bWF4X2JwcyA9IEdVSU5UMzJfRlJPTV9MRSAoYXZpaC0+bWF4X2Jwcyk7Ci0gIGF2aWgtPnBhZF9ncmFuID0gR1VJTlQzMl9GUk9NX0xFIChhdmloLT5wYWRfZ3Jhbik7Ci0gIGF2aWgtPmZsYWdzID0gR1VJTlQzMl9GUk9NX0xFIChhdmloLT5mbGFncyk7Ci0gIGF2aWgtPnRvdF9mcmFtZXMgPSBHVUlOVDMyX0ZST01fTEUgKGF2aWgtPnRvdF9mcmFtZXMpOwotICBhdmloLT5pbml0X2ZyYW1lcyA9IEdVSU5UMzJfRlJPTV9MRSAoYXZpaC0+aW5pdF9mcmFtZXMpOwotICBhdmloLT5zdHJlYW1zID0gR1VJTlQzMl9GUk9NX0xFIChhdmloLT5zdHJlYW1zKTsKLSAgYXZpaC0+YnVmc2l6ZSA9IEdVSU5UMzJfRlJPTV9MRSAoYXZpaC0+YnVmc2l6ZSk7Ci0gIGF2aWgtPndpZHRoID0gR1VJTlQzMl9GUk9NX0xFIChhdmloLT53aWR0aCk7Ci0gIGF2aWgtPmhlaWdodCA9IEdVSU5UMzJfRlJPTV9MRSAoYXZpaC0+aGVpZ2h0KTsKLSAgYXZpaC0+c2NhbGUgPSBHVUlOVDMyX0ZST01fTEUgKGF2aWgtPnNjYWxlKTsKLSAgYXZpaC0+cmF0ZSA9IEdVSU5UMzJfRlJPTV9MRSAoYXZpaC0+cmF0ZSk7Ci0gIGF2aWgtPnN0YXJ0ID0gR1VJTlQzMl9GUk9NX0xFIChhdmloLT5zdGFydCk7Ci0gIGF2aWgtPmxlbmd0aCA9IEdVSU5UMzJfRlJPTV9MRSAoYXZpaC0+bGVuZ3RoKTsKLSNlbmRpZgotCi0gIC8qIGRlYnVnIHN0dWZmICovCi0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiYXZpaCB0YWcgZm91bmQ6Iik7Ci0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiIHVzX2ZyYW1lICAgICV1IiwgYXZpaC0+dXNfZnJhbWUpOwotICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIiBtYXhfYnBzICAgICAldSIsIGF2aWgtPm1heF9icHMpOwotICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIiBwYWRfZ3JhbiAgICAldSIsIGF2aWgtPnBhZF9ncmFuKTsKLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICIgZmxhZ3MgICAgICAgMHglMDh4IiwgYXZpaC0+ZmxhZ3MpOwotICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIiB0b3RfZnJhbWVzICAldSIsIGF2aWgtPnRvdF9mcmFtZXMpOwotICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIiBpbml0X2ZyYW1lcyAldSIsIGF2aWgtPmluaXRfZnJhbWVzKTsKLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICIgc3RyZWFtcyAgICAgJXUiLCBhdmloLT5zdHJlYW1zKTsKLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICIgYnVmc2l6ZSAgICAgJXUiLCBhdmloLT5idWZzaXplKTsKLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICIgd2lkdGggICAgICAgJXUiLCBhdmloLT53aWR0aCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiIGhlaWdodCAgICAgICV1IiwgYXZpaC0+aGVpZ2h0KTsKLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICIgc2NhbGUgICAgICAgJXUiLCBhdmloLT5zY2FsZSk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiIHJhdGUgICAgICAgICV1IiwgYXZpaC0+cmF0ZSk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiIHN0YXJ0ICAgICAgICV1IiwgYXZpaC0+c3RhcnQpOwotICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIiBsZW5ndGggICAgICAldSIsIGF2aWgtPmxlbmd0aCk7Ci0KLSAgKl9hdmloID0gYXZpaDsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICBpZiAoYXZpaC0+dXNfZnJhbWUgIT0gMCAmJiBhdmloLT50b3RfZnJhbWVzICE9IDApCi0gICAgYXZpLT5kdXJhdGlvbiA9Ci0gICAgICAgIChndWludDY0KSBhdmloLT51c19mcmFtZSAqIChndWludDY0KSBhdmloLT50b3RfZnJhbWVzICogMTAwMDsKLSAgZWxzZQotICAgIGF2aS0+ZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiIGhlYWRlciBkdXJhdGlvbiAgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoYXZpLT5kdXJhdGlvbikpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fYnVmZmVyOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoIk5vIGJ1ZmZlciIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWF2aWhfdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAoIlRvbyBzbWFsbCBhdmloICglIiBHX0dTSVpFX0ZPUk1BVCAiIGF2YWlsYWJsZSwgJWQgbmVlZGVkKSIsCi0gICAgICAgICAgICBzaXplLCAoaW50KSBzaXplb2YgKGdzdF9yaWZmX2F2aWgpKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3VwZXJpbmRleDoKLSAqIEBhdmk6IGNhbGxlciBlbGVtZW50ICh1c2VkIGZvciBkZWJ1Z2dpbmcvZXJyb3JzKS4KLSAqIEBidWY6IGlucHV0IGRhdGEgdG8gdXNlIGZvciBwYXJzaW5nLgotICogQGxvY2F0aW9uczogbG9jYXRpb25zIGluIHRoZSBmaWxlIChieXRlLW9mZnNldHMpIHRoYXQgY29udGFpbgotICogICAgICAgICAgICAgdGhlIGFjdHVhbCBpbmRleGVzIChzZWUgZ2V0X2F2aV9kZW11eF9wYXJzZV9zdWJpbmRleCgpKS4KLSAqICAgICAgICAgICAgIFRoZSBhcnJheSBlbmRzIHdpdGggR1NUX0JVRkZFUl9PRkZTRVRfTk9ORS4KLSAqCi0gKiBSZWFkcyBzdXBlcmluZGV4IChvcGVuRE1MLTIgc3BlYyBzdHVmZikgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YS4KLSAqCi0gKiBSZXR1cm5zOiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZS4gSW5kZXhlcyBzaG91bGQgYmUgc2tpcHBlZAotICogICAgICAgICAgb24gZXJyb3IsIGJ1dCB0aGV5IGFyZSBub3QgZmF0YWwuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9wYXJzZV9zdXBlcmluZGV4IChHc3RBdmlEZW11eCAqIGF2aSwKLSAgICBHc3RCdWZmZXIgKiBidWYsIGd1aW50NjQgKiogX2luZGV4ZXMpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGd1aW50MTYgYnBlID0gMTY7Ci0gIGd1aW50MzIgbnVtLCBpOwotICBndWludDY0ICppbmRleGVzOwotICBnc2l6ZSBzaXplOwotCi0gICpfaW5kZXhlcyA9IE5VTEw7Ci0KLSAgaWYgKGJ1ZikgewotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgZGF0YSA9IG1hcC5kYXRhOwotICAgIHNpemUgPSBtYXAuc2l6ZTsKLSAgfSBlbHNlIHsKLSAgICBkYXRhID0gTlVMTDsKLSAgICBzaXplID0gMDsKLSAgfQotCi0gIGlmIChzaXplIDwgMjQpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgLyogY2hlY2sgdHlwZSBvZiBpbmRleC4gVGhlIG9wZW5kbWwyIHNwZWNzIHN0YXRlIHRoYXQKLSAgICogdGhlcmUgc2hvdWxkIGJlIDQgZHdvcmRzIHBlciBhcnJheSBlbnRyeS4gVHlwZSBjYW4gYmUKLSAgICogZWl0aGVyIGZyYW1lIG9yIGZpZWxkIChhbmQgd2UgZG9uJ3QgY2FyZSkuICovCi0gIGlmIChHU1RfUkVBRF9VSU5UMTZfTEUgKGRhdGEpICE9IDQgfHwKLSAgICAgIChkYXRhWzJdICYgMHhmZSkgIT0gMHgwIHx8IGRhdGFbM10gIT0gMHgwKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICJTdXBlcmluZGV4IGZvciBzdHJlYW0gaGFzIHVuZXhwZWN0ZWQgIgotICAgICAgICAic2l6ZV9lbnRyeSAlZCAoYnl0ZXMpIG9yIGZsYWdzIDB4JTAyeC8weCUwMngiLAotICAgICAgICBHU1RfUkVBRF9VSU5UMTZfTEUgKGRhdGEpLCBkYXRhWzJdLCBkYXRhWzNdKTsKLSAgICBicGUgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKGRhdGEpICogNDsKLSAgfQotICBudW0gPSBHU1RfUkVBRF9VSU5UMzJfTEUgKCZkYXRhWzRdKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJnb3QgJWQgaW5kZXhlcyIsIG51bSk7Ci0KLSAgLyogdGhpcyBjYW4ndCB3b3JrIG91dCB3ZWxsIC4uLiAqLwotICBpZiAobnVtID4gR19NQVhVSU5UMzIgPj4gMSB8fCBicGUgPCA4KSB7Ci0gICAgZ290byBpbnZhbGlkX3BhcmFtczsKLSAgfQotCi0gIGluZGV4ZXMgPSBnX25ldyAoZ3VpbnQ2NCwgbnVtICsgMSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotICAgIGlmIChzaXplIDwgMjQgKyBicGUgKiAoaSArIDEpKQotICAgICAgYnJlYWs7Ci0gICAgaW5kZXhlc1tpXSA9IEdTVF9SRUFEX1VJTlQ2NF9MRSAoJmRhdGFbMjQgKyBicGUgKiBpXSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiaW5kZXggJWQgYXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgaSwgaW5kZXhlc1tpXSk7Ci0gIH0KLSAgaW5kZXhlc1tpXSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gICpfaW5kZXhlcyA9IGluZGV4ZXM7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGF2aSwKLSAgICAgICAgIk5vdCBlbm91Z2ggZGF0YSB0byBwYXJzZSBzdXBlcmluZGV4ICglIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgICAiIGF2YWlsYWJsZSwgMjQgbmVlZGVkKSIsIHNpemUpOwotICAgIGlmIChidWYpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIH0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfcGFyYW1zOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYXZpLCAiaW52YWxpZCBpbmRleCBwYXJhbWV0ZXJzIChudW0gPSAlZCwgYnBlID0gJWQpIiwKLSAgICAgICAgbnVtLCBicGUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogYWRkIGFuIGVudHJ5IHRvIHRoZSBpbmRleCBvZiBhIHN0cmVhbS4gQG51bSBzaG91bGQgYmUgYW4gZXN0aW1hdGUgb2YgdGhlCi0gKiB0b3RhbCBhbW91bnQgb2YgaW5kZXggZW50cmllcyBmb3IgYWxsIHN0cmVhbXMgYW5kIGlzIHVzZWQgdG8gZHluYW1pY2FsbHkKLSAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGluZGV4IGVudHJpZXMuICovCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X2FkZF9pbmRleCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEF2aVN0cmVhbSAqIHN0cmVhbSwKLSAgICBndWludCBudW0sIEdzdEF2aUluZGV4RW50cnkgKiBlbnRyeSkKLXsKLSAgLyogZW5zdXJlIGluZGV4IG1lbW9yeSAqLwotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5pZHhfbiA+PSBzdHJlYW0tPmlkeF9tYXgpKSB7Ci0gICAgZ3VpbnQgaWR4X21heCA9IHN0cmVhbS0+aWR4X21heDsKLSAgICBHc3RBdmlJbmRleEVudHJ5ICpuZXdfaWR4OwotCi0gICAgLyogd2UgbmVlZCB0byBtYWtlIHNvbWUgbW9yZSByb29tICovCi0gICAgaWYgKGlkeF9tYXggPT0gMCkgewotICAgICAgLyogaW5pdGlhbCBzaXplIGd1ZXNzLCBhc3N1bWUgZWFjaCBzdHJlYW0gaGFzIGFuIGVxdWFsIGFtb3VudCBvZiBlbnRyaWVzLAotICAgICAgICogb3ZlcnNob290IHdpdGggYXQgbGVhc3QgOEsgKi8KLSAgICAgIGlkeF9tYXggPSAobnVtIC8gYXZpLT5udW1fc3RyZWFtcykgKyAoODE5MiAvIHNpemVvZiAoR3N0QXZpSW5kZXhFbnRyeSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZHhfbWF4ICs9IDgxOTIgLyBzaXplb2YgKEdzdEF2aUluZGV4RW50cnkpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiZXhwYW5kZWQgaW5kZXggZnJvbSAldSB0byAldSIsCi0gICAgICAgICAgc3RyZWFtLT5pZHhfbWF4LCBpZHhfbWF4KTsKLSAgICB9Ci0gICAgbmV3X2lkeCA9IGdfdHJ5X3JlbmV3IChHc3RBdmlJbmRleEVudHJ5LCBzdHJlYW0tPmluZGV4LCBpZHhfbWF4KTsKLSAgICAvKiBvdXQgb2YgbWVtb3J5LCBpZiB0aGlzIGZhaWxzIHN0cmVhbS0+aW5kZXggaXMgdW50b3VjaGVkLiAqLwotICAgIGlmIChHX1VOTElLRUxZICghbmV3X2lkeCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgLyogdXNlIG5ldyBpbmRleCAqLwotICAgIHN0cmVhbS0+aW5kZXggPSBuZXdfaWR4OwotICAgIHN0cmVhbS0+aWR4X21heCA9IGlkeF9tYXg7Ci0gIH0KLQotICAvKiB1cGRhdGUgZW50cnkgdG90YWwgYW5kIHN0cmVhbSBzdGF0cy4gVGhlIGVudHJ5IHRvdGFsIGNhbiBiZSBjb252ZXJ0ZWQgdG8KLSAgICogdGhlIHRpbWVzdGFtcCBvZiB0aGUgZW50cnkgZWFzaWx5LiAqLwotICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlID09IEdTVF9SSUZGX0ZDQ19hdWRzKSB7Ci0gICAgZ2ludCBibG9ja2FsaWduOwotCi0gICAgaWYgKHN0cmVhbS0+aXNfdmJyKSB7Ci0gICAgICBlbnRyeS0+dG90YWwgPSBzdHJlYW0tPnRvdGFsX2Jsb2NrczsKLSAgICB9IGVsc2UgewotICAgICAgZW50cnktPnRvdGFsID0gc3RyZWFtLT50b3RhbF9ieXRlczsKLSAgICB9Ci0gICAgYmxvY2thbGlnbiA9IHN0cmVhbS0+c3RyZi5hdWRzLT5ibG9ja2FsaWduOwotICAgIGlmIChibG9ja2FsaWduID4gMCkKLSAgICAgIHN0cmVhbS0+dG90YWxfYmxvY2tzICs9IERJVl9ST1VORF9VUCAoZW50cnktPnNpemUsIGJsb2NrYWxpZ24pOwotICAgIGVsc2UKLSAgICAgIHN0cmVhbS0+dG90YWxfYmxvY2tzKys7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKHN0cmVhbS0+aXNfdmJyKSB7Ci0gICAgICBlbnRyeS0+dG90YWwgPSBzdHJlYW0tPmlkeF9uOwotICAgIH0gZWxzZSB7Ci0gICAgICBlbnRyeS0+dG90YWwgPSBzdHJlYW0tPnRvdGFsX2J5dGVzOwotICAgIH0KLSAgfQotICBzdHJlYW0tPnRvdGFsX2J5dGVzICs9IGVudHJ5LT5zaXplOwotICBpZiAoRU5UUllfSVNfS0VZRlJBTUUgKGVudHJ5KSkKLSAgICBzdHJlYW0tPm5fa2V5ZnJhbWVzKys7Ci0KLSAgLyogYW5kIGFkZCAqLwotICBHU1RfTE9HX09CSkVDVCAoYXZpLAotICAgICAgIkFkZGluZyBzdHJlYW0gJXUsIGluZGV4IGVudHJ5ICVkLCBrZiAlZCwgc2l6ZSAldSAiCi0gICAgICAiLCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCB0b3RhbCAlIiBHX0dVSU5UNjRfRk9STUFULCBzdHJlYW0tPm51bSwKLSAgICAgIHN0cmVhbS0+aWR4X24sIEVOVFJZX0lTX0tFWUZSQU1FIChlbnRyeSksIGVudHJ5LT5zaXplLCBlbnRyeS0+b2Zmc2V0LAotICAgICAgZW50cnktPnRvdGFsKTsKLSAgc3RyZWFtLT5pbmRleFtzdHJlYW0tPmlkeF9uKytdID0gKmVudHJ5OwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBnaXZlbiBAZW50cnlfbiBpbiBAc3RyZWFtLCBjYWxjdWxhdGUgaW5mbyBzdWNoIGFzIHRpbWVzdGFtcHMgYW5kCi0gKiBvZmZzZXRzIGZvciB0aGUgZW50cnkuICovCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9nZXRfYnVmZmVyX2luZm8gKEdzdEF2aURlbXV4ICogYXZpLCBHc3RBdmlTdHJlYW0gKiBzdHJlYW0sCi0gICAgZ3VpbnQgZW50cnlfbiwgR3N0Q2xvY2tUaW1lICogdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgKiB0c19lbmQsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCwgZ3VpbnQ2NCAqIG9mZnNldF9lbmQpCi17Ci0gIEdzdEF2aUluZGV4RW50cnkgKmVudHJ5OwotCi0gIGVudHJ5ID0gJnN0cmVhbS0+aW5kZXhbZW50cnlfbl07Ci0KLSAgaWYgKHN0cmVhbS0+aXNfdmJyKSB7Ci0gICAgLyogVkJSIHN0cmVhbSBuZXh0IHRpbWVzdGFtcCAqLwotICAgIGlmIChzdHJlYW0tPnN0cmgtPnR5cGUgPT0gR1NUX1JJRkZfRkNDX2F1ZHMpIHsKLSAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICp0aW1lc3RhbXAgPQotICAgICAgICAgICAgYXZpX3N0cmVhbV9jb252ZXJ0X2ZyYW1lc190b190aW1lX3VuY2hlY2tlZCAoc3RyZWFtLCBlbnRyeS0+dG90YWwpOwotICAgICAgaWYgKHRzX2VuZCkgewotICAgICAgICBnaW50IHNpemUgPSAxOwotICAgICAgICBpZiAoR19MSUtFTFkgKGVudHJ5X24gKyAxIDwgc3RyZWFtLT5pZHhfbikpCi0gICAgICAgICAgc2l6ZSA9IHN0cmVhbS0+aW5kZXhbZW50cnlfbiArIDFdLnRvdGFsIC0gZW50cnktPnRvdGFsOwotICAgICAgICAqdHNfZW5kID0gYXZpX3N0cmVhbV9jb252ZXJ0X2ZyYW1lc190b190aW1lX3VuY2hlY2tlZCAoc3RyZWFtLAotICAgICAgICAgICAgZW50cnktPnRvdGFsICsgc2l6ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICp0aW1lc3RhbXAgPQotICAgICAgICAgICAgYXZpX3N0cmVhbV9jb252ZXJ0X2ZyYW1lc190b190aW1lX3VuY2hlY2tlZCAoc3RyZWFtLCBlbnRyeV9uKTsKLSAgICAgIGlmICh0c19lbmQpCi0gICAgICAgICp0c19lbmQgPSBhdmlfc3RyZWFtX2NvbnZlcnRfZnJhbWVzX3RvX3RpbWVfdW5jaGVja2VkIChzdHJlYW0sCi0gICAgICAgICAgICBlbnRyeV9uICsgMSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3RyaC0+dHlwZSA9PSBHU1RfUklGRl9GQ0NfYXVkcykgewotICAgIC8qIGNvbnN0YW50IHJhdGUgc3RyZWFtICovCi0gICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICp0aW1lc3RhbXAgPQotICAgICAgICAgIGF2aV9zdHJlYW1fY29udmVydF9ieXRlc190b190aW1lX3VuY2hlY2tlZCAoc3RyZWFtLCBlbnRyeS0+dG90YWwpOwotICAgIGlmICh0c19lbmQpCi0gICAgICAqdHNfZW5kID0gYXZpX3N0cmVhbV9jb252ZXJ0X2J5dGVzX3RvX3RpbWVfdW5jaGVja2VkIChzdHJlYW0sCi0gICAgICAgICAgZW50cnktPnRvdGFsICsgZW50cnktPnNpemUpOwotICB9Ci0gIGlmIChzdHJlYW0tPnN0cmgtPnR5cGUgPT0gR1NUX1JJRkZfRkNDX3ZpZHMpIHsKLSAgICAvKiB2aWRlbyBvZmZzZXRzIGFyZSB0aGUgZnJhbWUgbnVtYmVyICovCi0gICAgaWYgKG9mZnNldCkKLSAgICAgICpvZmZzZXQgPSBlbnRyeV9uOwotICAgIGlmIChvZmZzZXRfZW5kKQotICAgICAgKm9mZnNldF9lbmQgPSBlbnRyeV9uICsgMTsKLSAgfSBlbHNlIHsKLSAgICAvKiBubyBvZmZzZXRzIGZvciBhdWRpbyAqLwotICAgIGlmIChvZmZzZXQpCi0gICAgICAqb2Zmc2V0ID0gLTE7Ci0gICAgaWYgKG9mZnNldF9lbmQpCi0gICAgICAqb2Zmc2V0X2VuZCA9IC0xOwotICB9Ci19Ci0KLS8qIGNvbGxlY3QgYW5kIGRlYnVnIHN0YXRzIGFib3V0IHRoZSBpbmRleGVzIGZvciBhbGwgc3RyZWFtcy4KLSAqIFRoaXMgbWV0aG9kIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gdGhlIHN0cmVhbSBkdXJhdGlvbgotICogYXMgbWVhc3VyZWQgYnkgdGhlIGFtb3VudCBvZiBpbmRleCBlbnRyaWVzLgotICoKLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgaW5kZXggaXMgbm90IGVtcHR5LCBlbHNlIEZBTFNFICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfZG9faW5kZXhfc3RhdHMgKEdzdEF2aURlbXV4ICogYXZpKQotewotICBndWludCB0b3RhbF9pZHggPSAwOwotICBndWludCBpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgZ3VpbnQgdG90YWxfbWF4ID0gMDsKLSNlbmRpZgotCi0gIC8qIGdldCBzdHJlYW0gc3RhdHMgbm93ICovCi0gIGZvciAoaSA9IDA7IGkgPCBhdmktPm51bV9zdHJlYW1zOyBpKyspIHsKLSAgICBHc3RBdmlTdHJlYW0gKnN0cmVhbTsKLQotICAgIGlmIChHX1VOTElLRUxZICghKHN0cmVhbSA9ICZhdmktPnN0cmVhbVtpXSkpKQotICAgICAgY29udGludWU7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHJlYW0tPnN0cmgpKQotICAgICAgY29udGludWU7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHJlYW0tPmluZGV4IHx8IHN0cmVhbS0+aWR4X24gPT0gMCkpCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIHdlIGludGVyZXN0ZWQgaW4gdGhlIGVuZF90cyBvZiB0aGUgbGFzdCBlbnRyeSwgd2hpY2ggaXMgdGhlIHRvdGFsCi0gICAgICogZHVyYXRpb24gb2YgdGhpcyBzdHJlYW0gKi8KLSAgICBnc3RfYXZpX2RlbXV4X2dldF9idWZmZXJfaW5mbyAoYXZpLCBzdHJlYW0sIHN0cmVhbS0+aWR4X24gLSAxLAotICAgICAgICBOVUxMLCAmc3RyZWFtLT5pZHhfZHVyYXRpb24sIE5VTEwsIE5VTEwpOwotCi0gICAgdG90YWxfaWR4ICs9IHN0cmVhbS0+aWR4X247Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAgIHRvdGFsX21heCArPSBzdHJlYW0tPmlkeF9tYXg7Ci0jZW5kaWYKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgIlN0cmVhbSAlZCwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCAiLCAlNnUgZW50cmllcywgIgotICAgICAgICAiJTV1IGtleWZyYW1lcywgZW50cnkgc2l6ZSA9ICUydSwgdG90YWwgc2l6ZSA9ICUxMHUsIGFsbG9jYXRlZCAlMTB1IiwKLSAgICAgICAgaSwgR1NUX1RJTUVfQVJHUyAoc3RyZWFtLT5pZHhfZHVyYXRpb24pLCBzdHJlYW0tPmlkeF9uLAotICAgICAgICBzdHJlYW0tPm5fa2V5ZnJhbWVzLCAoZ3VpbnQpIHNpemVvZiAoR3N0QXZpSW5kZXhFbnRyeSksCi0gICAgICAgIChndWludCkgKHN0cmVhbS0+aWR4X24gKiBzaXplb2YgKEdzdEF2aUluZGV4RW50cnkpKSwKLSAgICAgICAgKGd1aW50KSAoc3RyZWFtLT5pZHhfbWF4ICogc2l6ZW9mIChHc3RBdmlJbmRleEVudHJ5KSkpOwotICB9Ci0gIHRvdGFsX2lkeCAqPSBzaXplb2YgKEdzdEF2aUluZGV4RW50cnkpOwotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgdG90YWxfbWF4ICo9IHNpemVvZiAoR3N0QXZpSW5kZXhFbnRyeSk7Ci0jZW5kaWYKLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICIldSBieXRlcyBmb3IgaW5kZXggdnMgJXUgaWRlYWxseSwgJXUgd2FzdGVkIiwKLSAgICAgIHRvdGFsX21heCwgdG90YWxfaWR4LCB0b3RhbF9tYXggLSB0b3RhbF9pZHgpOwotCi0gIGlmICh0b3RhbF9pZHggPT0gMCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiSW5kZXggaXMgZW1wdHkgISIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXg6Ci0gKiBAYXZpOiBBdmkgb2JqZWN0Ci0gKiBAYnVmOiBpbnB1dCBkYXRhIHRvIHVzZSBmb3IgcGFyc2luZy4KLSAqIEBzdHJlYW06IHN0cmVhbSBjb250ZXh0LgotICogQGVudHJpZXNfbGlzdDogYSBsaXN0IChyZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24pIGNvbnRhaW5pbmcgYWxsIHRoZQotICogICAgICAgICAgIGluZGV4ZXMgcGFyc2VkIGluIHRoaXMgc3BlY2lmaWMgc3ViaW5kZXguIFRoZSBmaXJzdAotICogICAgICAgICAgIGVudHJ5IGlzIGFsc28gYSBwb2ludGVyIHRvIGFsbG9jYXRlZCBtZW1vcnkgdGhhdCBuZWVkcwotICogICAgICAgICAgIHRvIGJlIGZyZWXCtGVkLiBNYXkgYmUgTlVMTCBpZiBubyBzdXBwb3J0ZWQgaW5kZXhlcyB3ZXJlCi0gKiAgICAgICAgICAgZm91bmQuCi0gKgotICogUmVhZHMgc3VwZXJpbmRleCAob3BlbkRNTC0yIHNwZWMgc3R1ZmYpIGZyb20gdGhlIHByb3ZpZGVkIGRhdGEuCi0gKiBUaGUgYnVmZmVyIHNob3VsZCBjb250YWluIGEgR1NUX1JJRkZfVEFHX2l4Pz8gY2h1bmsuCi0gKgotICogUmV0dXJuczogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvdGhlcndpc2UuIEVycm9ycyBhcmUgZmF0YWwsIHdlCi0gKiAgICAgICAgICB0aHJvdyBhbiBlcnJvciwgY2FsbGVyIHNob3VsZCBiYWlsIG91dCBhc2FwLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXggKEdzdEF2aURlbXV4ICogYXZpLCBHc3RBdmlTdHJlYW0gKiBzdHJlYW0sCi0gICAgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludDE2IGJwZTsKLSAgZ3VpbnQzMiBudW0sIGk7Ci0gIGd1aW50NjQgYmFzZW9mZjsKLQotICBpZiAoYnVmID09IE5VTEwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotCi0gIC8qIGNoZWNrIHNpemUgKi8KLSAgaWYgKG1hcC5zaXplIDwgMjQpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBpbmRleC1kYXRhIHlldCAqLwotICBpZiAoZGF0YVszXSAmIDB4ODApCi0gICAgZ290byBub3RfaW1wbGVtZW50ZWQ7Ci0KLSAgLyogY2hlY2sgdHlwZSBvZiBpbmRleC4gVGhlIG9wZW5kbWwyIHNwZWNzIHN0YXRlIHRoYXQKLSAgICogdGhlcmUgc2hvdWxkIGJlIDQgZHdvcmRzIHBlciBhcnJheSBlbnRyeS4gVHlwZSBjYW4gYmUKLSAgICogZWl0aGVyIGZyYW1lIG9yIGZpZWxkIChhbmQgd2UgZG9uJ3QgY2FyZSkuICovCi0gIGJwZSA9IChkYXRhWzJdICYgMHgwMSkgPyAxMiA6IDg7Ci0gIGlmIChHU1RfUkVBRF9VSU5UMTZfTEUgKGRhdGEpICE9IGJwZSAvIDQgfHwKLSAgICAgIChkYXRhWzJdICYgMHhmZSkgIT0gMHgwIHx8IGRhdGFbM10gIT0gMHgxKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICJTdXBlcmluZGV4IGZvciBzdHJlYW0gJWQgaGFzIHVuZXhwZWN0ZWQgIgotICAgICAgICAic2l6ZV9lbnRyeSAlZCAoYnl0ZXMpIG9yIGZsYWdzIDB4JTAyeC8weCUwMngiLAotICAgICAgICBzdHJlYW0tPm51bSwgR1NUX1JFQURfVUlOVDE2X0xFIChkYXRhKSwgZGF0YVsyXSwgZGF0YVszXSk7Ci0gICAgYnBlID0gR1NUX1JFQURfVUlOVDE2X0xFIChkYXRhKSAqIDQ7Ci0gIH0KLSAgbnVtID0gR1NUX1JFQURfVUlOVDMyX0xFICgmZGF0YVs0XSk7Ci0gIGJhc2VvZmYgPSBHU1RfUkVBRF9VSU5UNjRfTEUgKCZkYXRhWzEyXSk7Ci0KLSAgLyogSWYgdGhlcmUncyBub3RoaW5nLCBqdXN0IHJldHVybiAhICovCi0gIGlmIChudW0gPT0gMCkKLSAgICBnb3RvIGVtcHR5X2luZGV4OwotCi0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiUGFyc2luZyBzdWJpbmRleCwgbnJfZW50cmllcyA9ICU2ZCIsIG51bSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgR3N0QXZpSW5kZXhFbnRyeSBlbnRyeTsKLQotICAgIGlmIChtYXAuc2l6ZSA8IDI0ICsgYnBlICogKGkgKyAxKSkKLSAgICAgIGJyZWFrOwotCi0gICAgLyogZmlsbCBpbiBvZmZzZXQgYW5kIHNpemUuIG9mZnNldCBjb250YWlucyB0aGUga2V5ZnJhbWUgZmxhZyBpbiB0aGUKLSAgICAgKiB1cHBlciBiaXQqLwotICAgIGVudHJ5Lm9mZnNldCA9IGJhc2VvZmYgKyBHU1RfUkVBRF9VSU5UMzJfTEUgKCZkYXRhWzI0ICsgYnBlICogaV0pOwotICAgIGVudHJ5LnNpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKCZkYXRhWzI0ICsgYnBlICogaSArIDRdKTsKLSAgICAvKiBoYW5kbGUgZmxhZ3MgKi8KLSAgICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlID09IEdTVF9SSUZGX0ZDQ19hdWRzKSB7Ci0gICAgICAvKiBhbGwgYXVkaW8gZnJhbWVzIGFyZSBrZXlmcmFtZXMgKi8KLSAgICAgIEVOVFJZX1NFVF9LRVlGUkFNRSAoJmVudHJ5KTsKLSAgICB9IGVsc2UgewotICAgICAgLyogZWxzZSByZWFkIGZsYWdzICovCi0gICAgICBlbnRyeS5mbGFncyA9IChlbnRyeS5zaXplICYgMHg4MDAwMDAwMCkgPyAwIDogR1NUX0FWSV9LRVlGUkFNRTsKLSAgICB9Ci0gICAgZW50cnkuc2l6ZSAmPSB+MHg4MDAwMDAwMDsKLQotICAgIC8qIGFuZCBhZGQgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9hdmlfZGVtdXhfYWRkX2luZGV4IChhdmksIHN0cmVhbSwgbnVtLCAmZW50cnkpKSkKLSAgICAgIGdvdG8gb3V0X29mX21lbTsKLSAgfQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGF2aSwKLSAgICAgICAgIk5vdCBlbm91Z2ggZGF0YSB0byBwYXJzZSBzdWJpbmRleCAoJSIgR19HU0laRV9GT1JNQVQKLSAgICAgICAgIiBhdmFpbGFibGUsIDI0IG5lZWRlZCkiLCBtYXAuc2l6ZSk7Ci0gICAgZ290byBkb25lOyAgICAgICAgICAgICAgICAgIC8qIGNvbnRpbnVlICovCi0gIH0KLW5vdF9pbXBsZW1lbnRlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFNUUkVBTSwgTk9UX0lNUExFTUVOVEVELCAoTlVMTCksCi0gICAgICAgICgiU3ViaW5kZXgtaXMtZGF0YSBpcyBub3QgaW1wbGVtZW50ZWQiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZW1wdHlfaW5kZXg6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJ0aGUgaW5kZXggaXMgZW1wdHkiKTsKLSAgICBnb3RvIGRvbmU7ICAgICAgICAgICAgICAgICAgLyogY29udGludWUgKi8KLSAgfQotb3V0X29mX21lbToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFJFU09VUkNFLCBOT19TUEFDRV9MRUZULCAoTlVMTCksCi0gICAgICAgICgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXUqJXU9JXUgYnl0ZXMiLAotICAgICAgICAgICAgKGd1aW50KSBzaXplb2YgKEdzdEF2aUluZGV4RW50cnkpLCBudW0sCi0gICAgICAgICAgICAoZ3VpbnQpIHNpemVvZiAoR3N0QXZpSW5kZXhFbnRyeSkgKiBudW0pKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYW5kIHB1c2ggYSBmbHVzaGluZyBzZWVrIGV2ZW50IHVwc3RyZWFtCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoR3N0QXZpRGVtdXggKiBkZW11eCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50MzIgc2VxbnVtKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlcyA9IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgZXZlbnQgPQotICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwgR1NUX1NFRUtfVFlQRV9TRVQsIG9mZnNldCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOwotICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIHNlcW51bSk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPnNpbmtwYWQsIGV2ZW50KTsKLQotICBpZiAocmVzKQotICAgIGRlbXV4LT5vZmZzZXQgPSBvZmZzZXQ7Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiBSZWFkIEFWSSBpbmRleCB3aGVuIHN0cmVhbWluZwotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1c2ggKEdzdEF2aURlbXV4ICogYXZpKQotewotICBndWludDMyIHRhZyA9IDAsIHNpemU7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLSAgZ3VpbnQgb2RtbF9zdHJlYW07Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAicmVhZCBzdWJpbmRleGVzIGZvciAlZCBzdHJlYW1zIiwgYXZpLT5udW1fc3RyZWFtcyk7Ci0KLSAgaWYgKGF2aS0+b2RtbF9zdWJpZHhzW2F2aS0+b2RtbF9zdWJpZHhdICE9IGF2aS0+b2Zmc2V0KQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9hdmlfZGVtdXhfcGVla19jaHVuayAoYXZpLCAmdGFnLCAmc2l6ZSkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogdGhpcyBpcyB0aGUgT0RNTCBjaHVuayB3ZSBleHBlY3QgKi8KLSAgb2RtbF9zdHJlYW0gPSBhdmktPm9kbWxfc3RyZWFtOwotCi0gIGlmICgodGFnICE9IEdTVF9NQUtFX0ZPVVJDQyAoJ2knLCAneCcsICcwJyArIG9kbWxfc3RyZWFtIC8gMTAsCi0gICAgICAgICAgICAgICcwJyArIG9kbWxfc3RyZWFtICUgMTApKSAmJgotICAgICAgKHRhZyAhPSBHU1RfTUFLRV9GT1VSQ0MgKCcwJyArIG9kbWxfc3RyZWFtIC8gMTAsCi0gICAgICAgICAgICAgICcwJyArIG9kbWxfc3RyZWFtICUgMTAsICdpJywgJ3gnKSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIk5vdCBhbiBpeCMjIGNodW5rICglIiBHU1RfRk9VUkNDX0ZPUk1BVCAiKSIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYXZpLT5vZmZzZXQgKz0gOCArIEdTVF9ST1VORF9VUF8yIChzaXplKTsKLSAgLyogZmx1c2ggY2h1bmsgaGVhZGVyIHNvIHdlIGdldCBqdXN0IHRoZSAnc2l6ZScgcGF5bG9hZCBkYXRhICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhdmktPmFkYXB0ZXIsIDgpOwotICBidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYXZpLT5hZGFwdGVyLCBzaXplKTsKLQotICBpZiAoIWdzdF9hdmlfZGVtdXhfcGFyc2Vfc3ViaW5kZXggKGF2aSwgJmF2aS0+c3RyZWFtW29kbWxfc3RyZWFtXSwgYnVmKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogd2UgcGFyc2VkIHRoZSBpbmRleCwgZ28gdG8gbmV4dCBzdWJpbmRleCAqLwotICBhdmktPm9kbWxfc3ViaWR4Kys7Ci0KLSAgaWYgKGF2aS0+b2RtbF9zdWJpZHhzW2F2aS0+b2RtbF9zdWJpZHhdID09IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpIHsKLSAgICAvKiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGluZGV4ZXMgZm9yIHRoaXMgc3RyZWFtLCBtb3ZlIHRvIHRoZSBuZXh0Ci0gICAgICogc3RyZWFtIHRvIGhhbmRsZSB0aGUgZmlyc3QgaW5kZXggKi8KLSAgICBhdmktPm9kbWxfc3RyZWFtKys7Ci0gICAgYXZpLT5vZG1sX3N1YmlkeCA9IDA7Ci0KLSAgICBpZiAoYXZpLT5vZG1sX3N0cmVhbSA8IGF2aS0+bnVtX3N0cmVhbXMpIHsKLSAgICAgIC8qIHRoZXJlIGFyZSBtb3JlIGluZGV4ZXMgKi8KLSAgICAgIGF2aS0+b2RtbF9zdWJpZHhzID0gYXZpLT5zdHJlYW1bYXZpLT5vZG1sX3N0cmVhbV0uaW5kZXhlczsKLSAgICB9IGVsc2UgewotICAgICAgLyogd2UncmUgZG9uZSwgZ2V0IHN0cmVhbSBzdGF0cyBub3cgKi8KLSAgICAgIGF2aS0+aGF2ZV9pbmRleCA9IGdzdF9hdmlfZGVtdXhfZG9faW5kZXhfc3RhdHMgKGF2aSk7Ci0KLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIC8qIHNlZWsgdG8gbmV4dCBpbmRleCAqLwotICByZXR1cm4gcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoYXZpLCBhdmktPm9kbWxfc3ViaWR4c1thdmktPm9kbWxfc3ViaWR4XSwKLSAgICAgIGF2aS0+c2VnbWVudF9zZXFudW0pOwotfQotCi0vKgotICogUmVhZCBBVkkgaW5kZXgKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1bGwgKEdzdEF2aURlbXV4ICogYXZpKQotewotICBndWludDMyIHRhZzsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGdpbnQgaSwgbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJyZWFkIHN1YmluZGV4ZXMgZm9yICVkIHN0cmVhbXMiLCBhdmktPm51bV9zdHJlYW1zKTsKLQotICBmb3IgKG4gPSAwOyBuIDwgYXZpLT5udW1fc3RyZWFtczsgbisrKSB7Ci0gICAgR3N0QXZpU3RyZWFtICpzdHJlYW0gPSAmYXZpLT5zdHJlYW1bbl07Ci0KLSAgICBpZiAoc3RyZWFtLT5pbmRleGVzID09IE5VTEwpCi0gICAgICBjb250aW51ZTsKLQotICAgIGZvciAoaSA9IDA7IHN0cmVhbS0+aW5kZXhlc1tpXSAhPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOyBpKyspIHsKLSAgICAgIGlmIChnc3RfcmlmZl9yZWFkX2NodW5rIChHU1RfRUxFTUVOVF9DQVNUIChhdmkpLCBhdmktPnNpbmtwYWQsCi0gICAgICAgICAgICAgICZzdHJlYW0tPmluZGV4ZXNbaV0sICZ0YWcsICZidWYpICE9IEdTVF9GTE9XX09LKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGVsc2UgaWYgKCh0YWcgIT0gR1NUX01BS0VfRk9VUkNDICgnaScsICd4JywgJzAnICsgc3RyZWFtLT5udW0gLyAxMCwKLSAgICAgICAgICAgICAgICAgICcwJyArIHN0cmVhbS0+bnVtICUgMTApKSAmJgotICAgICAgICAgICh0YWcgIT0gR1NUX01BS0VfRk9VUkNDICgnMCcgKyBzdHJlYW0tPm51bSAvIDEwLAotICAgICAgICAgICAgICAgICAgJzAnICsgc3RyZWFtLT5udW0gJSAxMCwgJ2knLCAneCcpKSkgewotICAgICAgICAvKiBTb21lIE9ETUwgZmlsZXMgKGNyZWF0ZWQgYnkgZ29kIGtub3dzIHdoYXQgbXV4ZXIpIGhhdmUgYSAjI2l4IGZvcm1hdAotICAgICAgICAgKiBpbnN0ZWFkIG9mIHRoZSAnb2ZmaWNpYWwnIGl4IyMuIFRoZXkgYXJlIHN0aWxsIHZhbGlkIHRob3VnaC4gKi8KLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJOb3QgYW4gaXgjIyBjaHVuayAoJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIikiLAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZ3N0X2F2aV9kZW11eF9wYXJzZV9zdWJpbmRleCAoYXZpLCBzdHJlYW0sIGJ1ZikpCi0gICAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGdfZnJlZSAoc3RyZWFtLT5pbmRleGVzKTsKLSAgICBzdHJlYW0tPmluZGV4ZXMgPSBOVUxMOwotICB9Ci0gIC8qIGdldCBzdHJlYW0gc3RhdHMgbm93ICovCi0gIGF2aS0+aGF2ZV9pbmRleCA9IGdzdF9hdmlfZGVtdXhfZG9faW5kZXhfc3RhdHMgKGF2aSk7Ci19Ci0KLS8qCi0gKiBnc3RfYXZpX2RlbXV4X3JpZmZfcGFyc2VfdnBycDoKLSAqIEBlbGVtZW50OiBjYWxsZXIgZWxlbWVudCAodXNlZCBmb3IgZGVidWdnaW5nL2Vycm9yKS4KLSAqIEBidWY6IGlucHV0IGRhdGEgdG8gYmUgdXNlZCBmb3IgcGFyc2luZywgc3RyaXBwZWQgZnJvbSBoZWFkZXIuCi0gKiBAdnBycDogYSBwb2ludGVyIChyZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uKSB0byBhIGZpbGxlZC1pbiB2cHJwCi0gKiAgICAgICAgc3RydWN0dXJlLiBDYWxsZXIgc2hvdWxkIGZyZWUgaXQuCi0gKgotICogUGFyc2VzIGEgdmlkZW8gc3RyZWFtwrRzIHZwcnAuIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mIEBidWYuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiBwYXJzaW5nIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIEZBTFNFLiBUaGUgc3RyZWFtCi0gKiAgICAgICAgICBzaG91bGQgYmUgc2tpcHBlZCBvbiBlcnJvciwgYnV0IGl0IGlzIG5vdCBmYXRhbC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X3JpZmZfcGFyc2VfdnBycCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0QnVmZmVyICogYnVmLCBnc3RfcmlmZl92cHJwICoqIF92cHJwKQotewotICBnc3RfcmlmZl92cHJwICp2cHJwOwotICBnaW50IGs7Ci0gIGdzaXplIHNpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZiAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfdnBycCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgaWYgKHNpemUgPCBHX1NUUlVDVF9PRkZTRVQgKGdzdF9yaWZmX3ZwcnAsIGZpZWxkX2luZm8pKQotICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gIHZwcnAgPSBnX21hbGxvYyAoc2l6ZSk7Ci0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCB2cHJwLCBzaXplKTsKLQotI2lmIChHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOKQotICB2cHJwLT5mb3JtYXRfdG9rZW4gPSBHVUlOVDMyX0ZST01fTEUgKHZwcnAtPmZvcm1hdF90b2tlbik7Ci0gIHZwcnAtPnN0YW5kYXJkID0gR1VJTlQzMl9GUk9NX0xFICh2cHJwLT5zdGFuZGFyZCk7Ci0gIHZwcnAtPnZlcnRfcmF0ZSA9IEdVSU5UMzJfRlJPTV9MRSAodnBycC0+dmVydF9yYXRlKTsKLSAgdnBycC0+aG9yX3RfdG90YWwgPSBHVUlOVDMyX0ZST01fTEUgKHZwcnAtPmhvcl90X3RvdGFsKTsKLSAgdnBycC0+dmVydF9saW5lcyA9IEdVSU5UMzJfRlJPTV9MRSAodnBycC0+dmVydF9saW5lcyk7Ci0gIHZwcnAtPmFzcGVjdCA9IEdVSU5UMzJfRlJPTV9MRSAodnBycC0+YXNwZWN0KTsKLSAgdnBycC0+d2lkdGggPSBHVUlOVDMyX0ZST01fTEUgKHZwcnAtPndpZHRoKTsKLSAgdnBycC0+aGVpZ2h0ID0gR1VJTlQzMl9GUk9NX0xFICh2cHJwLT5oZWlnaHQpOwotICB2cHJwLT5maWVsZHMgPSBHVUlOVDMyX0ZST01fTEUgKHZwcnAtPmZpZWxkcyk7Ci0jZW5kaWYKLQotICAvKiBzaXplIGNoZWNraW5nICovCi0gIC8qIGNhbGN1bGF0ZSBmaWVsZHMgYmFzZWQgb24gc2l6ZSAqLwotICBrID0gKHNpemUgLSBHX1NUUlVDVF9PRkZTRVQgKGdzdF9yaWZmX3ZwcnAsIGZpZWxkX2luZm8pKSAvIHZwcnAtPmZpZWxkczsKLSAgaWYgKHZwcnAtPmZpZWxkcyA+IGspIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICJ2cHJwIGhlYWRlciBpbmRpY2F0ZWQgJWQgZmllbGRzLCBvbmx5ICVkIGF2YWlsYWJsZSIsIHZwcnAtPmZpZWxkcywgayk7Ci0gICAgdnBycC0+ZmllbGRzID0gazsKLSAgfQotICBpZiAodnBycC0+ZmllbGRzID4gR1NUX1JJRkZfVlBSUF9WSURFT19GSUVMRFMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICJ2cHJwIGhlYWRlciBpbmRpY2F0ZWQgJWQgZmllbGRzLCBhdCBtb3N0ICVkIHN1cHBvcnRlZCIsIHZwcnAtPmZpZWxkcywKLSAgICAgICAgR1NUX1JJRkZfVlBSUF9WSURFT19GSUVMRFMpOwotICAgIHZwcnAtPmZpZWxkcyA9IEdTVF9SSUZGX1ZQUlBfVklERU9fRklFTERTOwotICB9Ci0jaWYgKEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4pCi0gIGZvciAoayA9IDA7IGsgPCB2cHJwLT5maWVsZHM7IGsrKykgewotICAgIGdzdF9yaWZmX3ZwcnBfdmlkZW9fZmllbGRfZGVzYyAqZmQ7Ci0KLSAgICBmZCA9ICZ2cHJwLT5maWVsZF9pbmZvW2tdOwotICAgIGZkLT5jb21wcmVzc2VkX2JtX2hlaWdodCA9IEdVSU5UMzJfRlJPTV9MRSAoZmQtPmNvbXByZXNzZWRfYm1faGVpZ2h0KTsKLSAgICBmZC0+Y29tcHJlc3NlZF9ibV93aWR0aCA9IEdVSU5UMzJfRlJPTV9MRSAoZmQtPmNvbXByZXNzZWRfYm1fd2lkdGgpOwotICAgIGZkLT52YWxpZF9ibV9oZWlnaHQgPSBHVUlOVDMyX0ZST01fTEUgKGZkLT52YWxpZF9ibV9oZWlnaHQpOwotICAgIGZkLT52YWxpZF9ibV93aWR0aCA9IEdVSU5UMTZfRlJPTV9MRSAoZmQtPnZhbGlkX2JtX3dpZHRoKTsKLSAgICBmZC0+dmFsaWRfYm1feF9vZmZzZXQgPSBHVUlOVDE2X0ZST01fTEUgKGZkLT52YWxpZF9ibV94X29mZnNldCk7Ci0gICAgZmQtPnZhbGlkX2JtX3lfb2Zmc2V0ID0gR1VJTlQzMl9GUk9NX0xFIChmZC0+dmFsaWRfYm1feV9vZmZzZXQpOwotICAgIGZkLT52aWRlb194X3Rfb2Zmc2V0ID0gR1VJTlQzMl9GUk9NX0xFIChmZC0+dmlkZW9feF90X29mZnNldCk7Ci0gICAgZmQtPnZpZGVvX3lfc3RhcnQgPSBHVUlOVDMyX0ZST01fTEUgKGZkLT52aWRlb195X3N0YXJ0KTsKLSAgfQotI2VuZGlmCi0KLSAgLyogZGVidWcgKi8KLSAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAidnBycCB0YWcgZm91bmQgaW4gY29udGV4dCB2aWRzOiIpOwotICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgZm9ybWF0X3Rva2VuICAlZCIsIHZwcnAtPmZvcm1hdF90b2tlbik7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIiBzdGFuZGFyZCAgICAgICVkIiwgdnBycC0+c3RhbmRhcmQpOwotICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgdmVydF9yYXRlICAgICAlZCIsIHZwcnAtPnZlcnRfcmF0ZSk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIiBob3JfdF90b3RhbCAgICVkIiwgdnBycC0+aG9yX3RfdG90YWwpOwotICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgdmVydF9saW5lcyAgICAlZCIsIHZwcnAtPnZlcnRfbGluZXMpOwotICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgYXNwZWN0ICAgICAgICAlZDolZCIsIHZwcnAtPmFzcGVjdCA+PiAxNiwKLSAgICAgIHZwcnAtPmFzcGVjdCAmIDB4ZmZmZik7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIiB3aWR0aCAgICAgICAgICVkIiwgdnBycC0+d2lkdGgpOwotICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgaGVpZ2h0ICAgICAgICAlZCIsIHZwcnAtPmhlaWdodCk7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIiBmaWVsZHMgICAgICAgICVkIiwgdnBycC0+ZmllbGRzKTsKLSAgZm9yIChrID0gMDsgayA8IHZwcnAtPmZpZWxkczsgaysrKSB7Ci0gICAgZ3N0X3JpZmZfdnBycF92aWRlb19maWVsZF9kZXNjICpmZDsKLQotICAgIGZkID0gJih2cHJwLT5maWVsZF9pbmZvW2tdKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgZmllbGQgJXUgZGVzY3JpcHRpb246Iiwgayk7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAiICBjb21wcmVzc2VkX2JtX2hlaWdodCAgJWQiLAotICAgICAgICBmZC0+Y29tcHJlc3NlZF9ibV9oZWlnaHQpOwotICAgIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIiAgY29tcHJlc3NlZF9ibV93aWR0aCAgJWQiLAotICAgICAgICBmZC0+Y29tcHJlc3NlZF9ibV93aWR0aCk7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAiICB2YWxpZF9ibV9oZWlnaHQgICAgICAgJWQiLAotICAgICAgICBmZC0+dmFsaWRfYm1faGVpZ2h0KTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgIHZhbGlkX2JtX3dpZHRoICAgICAgICAlZCIsIGZkLT52YWxpZF9ibV93aWR0aCk7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChlbGVtZW50LCAiICB2YWxpZF9ibV94X29mZnNldCAgICAgJWQiLAotICAgICAgICBmZC0+dmFsaWRfYm1feF9vZmZzZXQpOwotICAgIEdTVF9JTkZPX09CSkVDVCAoZWxlbWVudCwgIiAgdmFsaWRfYm1feV9vZmZzZXQgICAgICVkIiwKLSAgICAgICAgZmQtPnZhbGlkX2JtX3lfb2Zmc2V0KTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgIHZpZGVvX3hfdF9vZmZzZXQgICAgICAlZCIsCi0gICAgICAgIGZkLT52aWRlb194X3Rfb2Zmc2V0KTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGVsZW1lbnQsICIgIHZpZGVvX3lfc3RhcnQgICAgICAgICAlZCIsIGZkLT52aWRlb195X3N0YXJ0KTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgKl92cHJwID0gdnBycDsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICJUb28gc21hbGwgdnBycCAoJSIgR19HU0laRV9GT1JNQVQgIiBhdmFpbGFibGUsIGF0IGxlYXN0ICVkIG5lZWRlZCkiLAotICAgICAgICBzaXplLCAoaW50KSBHX1NUUlVDVF9PRkZTRVQgKGdzdF9yaWZmX3ZwcnAsIGZpZWxkX2luZm8pKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9leHBvc2Vfc3RyZWFtcyAoR3N0QXZpRGVtdXggKiBhdmksIGdib29sZWFuIGZvcmNlKQotewotICBndWludCBpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImZvcmNlIDogJWQiLCBmb3JjZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykgewotICAgIEdzdEF2aVN0cmVhbSAqc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotCi0gICAgaWYgKGZvcmNlIHx8IHN0cmVhbS0+aWR4X24gIT0gMCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGF2aSwgIkFkZGluZyBwYWQgJXMiLCBHU1RfUEFEX05BTUUgKHN0cmVhbS0+cGFkKSk7Ci0gICAgICBnc3RfZWxlbWVudF9hZGRfcGFkICgoR3N0RWxlbWVudCAqKSBhdmksIHN0cmVhbS0+cGFkKTsKLSAgICAgIGdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWQgKGF2aS0+Zmxvd2NvbWJpbmVyLCBzdHJlYW0tPnBhZCk7Ci0KLSNpZiAwCi0gICAgICBpZiAoYXZpLT5lbGVtZW50X2luZGV4KQotICAgICAgICBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoYXZpLT5lbGVtZW50X2luZGV4LAotICAgICAgICAgICAgR1NUX09CSkVDVF9DQVNUIChzdHJlYW0tPnBhZCksICZzdHJlYW0tPmluZGV4X2lkKTsKLSNlbmRpZgotCi0gICAgICBzdHJlYW0tPmV4cG9zZWQgPSBUUlVFOwotICAgICAgaWYgKGF2aS0+bWFpbl9zdHJlYW0gPT0gLTEpCi0gICAgICAgIGF2aS0+bWFpbl9zdHJlYW0gPSBpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIlN0cmVhbSAjJWQgZG9lc24ndCBoYXZlIGFueSBlbnRyeSwgcmVtb3ZpbmcgaXQiLAotICAgICAgICAgIGkpOwotICAgICAgZ3N0X2F2aV9kZW11eF9yZXNldF9zdHJlYW0gKGF2aSwgc3RyZWFtKTsKLSAgICB9Ci0gIH0KLX0KLQotLyogYnVmIGNvbnRhaW5zIExJU1QgY2h1bmsgZGF0YSwgYW5kIHdpbGwgYmUgcGFkZGVkIHRvIGV2ZW4gc2l6ZSwKLSAqIHNpbmNlIHNvbWUgYnVnZ3kgZmlsZXMgZG8gbm90IGFjY291bnQgZm9yIHRoZSBwYWRkaW5nIG9mIGNodW5rcwotICogd2l0aGluIGEgTElTVCBpbiB0aGUgc2l6ZSBvZiB0aGUgTElTVCAqLwotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfYXZpX2RlbXV4X3JvdW5kdXBfbGlzdCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIGdzaXplIHNpemU7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChzaXplICYgMSkpIHsKLSAgICBHc3RCdWZmZXIgKm9idWY7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJyb3VuZGluZyB1cCBkdWJpb3VzIGxpc3Qgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgc2l6ZSk7Ci0gICAgb2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSArIDEpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG9idWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoKmJ1ZiwgMCwgbWFwLmRhdGEsIHNpemUpOwotICAgIC8qIGFzc3VtZSAwIHBhZGRpbmcsIGF0IGxlYXN0IG1ha2VzIG91dGNvbWUgZGV0ZXJtaW5pc3RpYyAqLwotICAgIG1hcC5kYXRhW3NpemVdID0gMDsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChvYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKGJ1Ziwgb2J1Zik7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2F2aV9kZW11eF9jaGVja19jYXBzIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QXZpU3RyZWFtICogc3RyZWFtLAotICAgIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsOwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgInZpZGVvL3gtcmF3IikpIHsKLSAgICBzdHJlYW0tPmlzX3JhdyA9IFRSVUU7Ci0gICAgc3RyZWFtLT5hbGlnbm1lbnQgPSAzMjsKLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikpCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgICAgIDEsIDEsIE5VTEwpOwotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgInBhbGV0dGVfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUikpIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAicGFsZXR0ZV9kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLAotICAgICAgICAgICZzdHJlYW0tPnJnYjhfcGFsZXR0ZSwgTlVMTCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgInBhbGV0dGVfZGF0YSIpOwotICAgICAgcmV0dXJuIGNhcHM7Ci0gICAgfQotICB9IGVsc2UgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAidmlkZW8veC1oMjY0IikpIHsKLSAgICByZXR1cm4gY2FwczsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImNoZWNraW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIC8qIHNvbWUgbXV4ZXJzIHB1dCBpbnZhbGlkIGJ5dGVzdHJlYW0gc3R1ZmYgaW4gaDI2NCBleHRyYSBkYXRhICovCi0gIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiY29kZWNfZGF0YSIpOwotICBpZiAodmFsICYmIChidWYgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsKSkpIHsKLSAgICBndWludDggKmRhdGE7Ci0gICAgZ2ludCBzaXplOwotICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgc2l6ZSA9IG1hcC5zaXplOwotICAgIGlmIChzaXplID49IDQpIHsKLSAgICAgIGd1aW50MzIgaCA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgICAgaWYgKGggPT0gMHgwMSkgewotICAgICAgICAvKiBjYW4gaGFyZGx5IGJlIHZhbGlkIEFWQyBjb2RlYyBkYXRhICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICJkaXNjYXJkaW5nIGludmFsaWQgY29kZWNfZGF0YSBjb250YWluaW5nIGJ5dGUtc3RyZWFtIik7Ci0gICAgICAgIC8qIHNvIGRvIG5vdCBwcmV0ZW5kIHRvIGRvd25zdHJlYW0gdGhhdCBpdCBpcyBwYWNrZXRpemVkIGF2YyAqLwotICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNvZGVjX2RhdGEiKTsKLSAgICAgICAgLyogLi4uIGJ1dCByYXRoZXIgcHJvcGVybHkgcGFyc2VkIGJ5dGVzdHJlYW0gKi8KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImJ5dGUtc3RyZWFtIiwKLSAgICAgICAgICAgICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBOVUxMKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gY2FwczsKLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtOgotICogQGF2aTogY2FsbGluZyBlbGVtZW50ICh1c2VkIGZvciBkZWJ1Z2dpbmcvZXJyb3JzKS4KLSAqIEBidWY6IGlucHV0IGJ1ZmZlciB1c2VkIHRvIHBhcnNlIHRoZSBzdHJlYW0uCi0gKgotICogUGFyc2VzIGFsbCBzdWJjaHVua3MgaW4gYSBzdHJsIGNodW5rICh3aGljaCBkZWZpbmVzIGEgc2luZ2xlCi0gKiBzdHJlYW0pLiBEaXNjYXJkcyB0aGUgYnVmZmVyIGFmdGVyIHVzZS4gVGhpcyBmdW5jdGlvbiB3aWxsCi0gKiBpbmNyZW1lbnQgdGhlIHN0cmVhbSBjb3VudGVyIGludGVybmFsbHkuCi0gKgotICogUmV0dXJuczogd2hldGhlciB0aGUgc3RyZWFtIHdhcyBpZGVudGlmaWVkIHN1Y2Nlc3NmdWxseS4KLSAqICAgICAgICAgIEVycm9ycyBhcmUgbm90IGZhdGFsLiBJdCBkb2VzIGluZGljYXRlIHRoZSBzdHJlYW0KLSAqICAgICAgICAgIHdhcyBza2lwcGVkLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfcGFyc2Vfc3RyZWFtIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RBdmlTdHJlYW0gKnN0cmVhbTsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICBHc3RCdWZmZXIgKnN1YiA9IE5VTEw7Ci0gIGd1aW50IG9mZnNldCA9IDQ7Ci0gIGd1aW50MzIgdGFnID0gMDsKLSAgZ2NoYXIgKmNvZGVjX25hbWUgPSBOVUxMLCAqcGFkbmFtZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICp0YWdfbmFtZTsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIEdzdFBhZCAqcGFkOwotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBnYm9vbGVhbiBnb3Rfc3RyaCA9IEZBTFNFLCBnb3Rfc3RyZiA9IEZBTFNFLCBnb3RfdnBycCA9IEZBTFNFOwotICBnc3RfcmlmZl92cHJwICp2cHJwID0gTlVMTDsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnY2hhciAqc3RyZWFtX2lkOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Jvb2xlYW4gc3BhcnNlID0gRkFMU0U7Ci0KLSAgZWxlbWVudCA9IEdTVF9FTEVNRU5UX0NBU1QgKGF2aSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiUGFyc2luZyBzdHJlYW0iKTsKLQotICBnc3RfYXZpX2RlbXV4X3JvdW5kdXBfbGlzdCAoYXZpLCAmYnVmKTsKLQotICBpZiAoYXZpLT5udW1fc3RyZWFtcyA+PSBHU1RfQVZJX0RFTVVYX01BWF9TVFJFQU1TKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICJtYXhpbXVtIG5vIG9mIHN0cmVhbXMgKCVkKSBleGNlZWRlZCwgaWdub3Jpbmcgc3RyZWFtIiwKLSAgICAgICAgR1NUX0FWSV9ERU1VWF9NQVhfU1RSRUFNUyk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAvKiBub3QgYSBmYXRhbCBlcnJvciwgbGV0J3Mgc2F5ICovCi0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBzdHJlYW0gPSAmYXZpLT5zdHJlYW1bYXZpLT5udW1fc3RyZWFtc107Ci0KLSAgLyogaW5pdGlhbCBzZXR0aW5ncyAqLwotICBzdHJlYW0tPmlkeF9kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHN0cmVhbS0+aGRyX2R1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc3RyZWFtLT5kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgd2hpbGUgKGdzdF9yaWZmX3BhcnNlX2NodW5rIChlbGVtZW50LCBidWYsICZvZmZzZXQsICZ0YWcsICZzdWIpKSB7Ci0gICAgLyogc3ViIGNhbiBiZSBOVUxMIGlmIHRoZSBjaHVuayBpcyBlbXB0eSAqLwotICAgIGlmIChzdWIgPT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiaWdub3JpbmcgZW1wdHkgY2h1bmsgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBzd2l0Y2ggKHRhZykgewotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfc3RyaDoKLSAgICAgIHsKLSAgICAgICAgZ3N0X3JpZmZfc3RyaCAqc3RyaDsKLQotICAgICAgICBpZiAoZ290X3N0cmgpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIklnbm9yaW5nIGFkZGl0aW9uYWwgc3RyaCBjaHVuayIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZ3N0X3JpZmZfcGFyc2Vfc3RyaCAoZWxlbWVudCwgc3ViLCAmc3RyZWFtLT5zdHJoKSkgewotICAgICAgICAgIC8qIG93bmVyc2hpcCBnaXZlbiBhd2F5ICovCi0gICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIkZhaWxlZCB0byBwYXJzZSBzdHJoIGNodW5rIik7Ci0gICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgIHN0cmggPSBzdHJlYW0tPnN0cmg7Ci0gICAgICAgIC8qIHNhbml0eSBjaGVjazsgc3RyZWFtIGhlYWRlciBmcmFtZSByYXRlIG1hdGNoZXMgZ2xvYmFsIGhlYWRlcgotICAgICAgICAgKiBmcmFtZSBkdXJhdGlvbiAqLwotICAgICAgICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlID09IEdTVF9SSUZGX0ZDQ192aWRzKSB7Ci0gICAgICAgICAgR3N0Q2xvY2tUaW1lIHNfZHVyOwotICAgICAgICAgIEdzdENsb2NrVGltZSBoX2R1ciA9IGF2aS0+YXZpaC0+dXNfZnJhbWUgKiBHU1RfVVNFQ09ORDsKLQotICAgICAgICAgIHNfZHVyID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfU0VDT05ELCBzdHJoLT5zY2FsZSwgc3RyaC0+cmF0ZSk7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAidmVyaWZ5aW5nIHN0cmVhbSBmcmFtZXJhdGUgJWQvJWQsICIKLSAgICAgICAgICAgICAgImZyYW1lIGR1cmF0aW9uID0gJWQgbXMiLCBzdHJoLT5yYXRlLCBzdHJoLT5zY2FsZSwKLSAgICAgICAgICAgICAgKGdpbnQpIChzX2R1ciAvIEdTVF9NU0VDT05EKSk7Ci0gICAgICAgICAgaWYgKGhfZHVyID4gKDEwICogR1NUX01TRUNPTkQpICYmIChzX2R1ciA+IDEwICogaF9kdXIpKSB7Ci0gICAgICAgICAgICBzdHJoLT5yYXRlID0gR1NUX1NFQ09ORCAvIEdTVF9VU0VDT05EOwotICAgICAgICAgICAgc3RyaC0+c2NhbGUgPSBoX2R1ciAvIEdTVF9VU0VDT05EOwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiY29ycmVjdGluZyBzdHJlYW0gZnJhbWVyYXRlIHRvICVkLyVkIiwKLSAgICAgICAgICAgICAgICBzdHJoLT5yYXRlLCBzdHJoLT5zY2FsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIGRldGVybWluZSBkdXJhdGlvbiBhcyBpbmRpY2F0ZWQgYnkgaGVhZGVyICovCi0gICAgICAgIHN0cmVhbS0+aGRyX2R1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlICgoZ3VpbnQ2NCkgc3RyaC0+bGVuZ3RoICoKLSAgICAgICAgICAgIHN0cmgtPnNjYWxlLCBHU1RfU0VDT05ELCAoZ3VpbnQ2NCkgc3RyaC0+cmF0ZSk7Ci0gICAgICAgIEdTVF9JTkZPICgiU3RyZWFtIGR1cmF0aW9uIGFjY29yZGluZyB0byBoZWFkZXI6ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHN0cmVhbS0+aGRyX2R1cmF0aW9uKSk7Ci0gICAgICAgIGlmIChzdHJlYW0tPmhkcl9kdXJhdGlvbiA9PSAwKQotICAgICAgICAgIHN0cmVhbS0+aGRyX2R1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAgICAgICBnb3Rfc3RyaCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfc3RyZjoKLSAgICAgIHsKLSAgICAgICAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgICAgICAgaWYgKGdvdF9zdHJmKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJJZ25vcmluZyBhZGRpdGlvbmFsIHN0cmYgY2h1bmsiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWdvdF9zdHJoKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoYXZpLCAiRm91bmQgc3RyZiBjaHVuayBiZWZvcmUgc3RyaCBjaHVuayIpOwotICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKHN0cmVhbS0+c3RyaC0+dHlwZSkgewotICAgICAgICAgIGNhc2UgR1NUX1JJRkZfRkNDX3ZpZHM6Ci0gICAgICAgICAgICBzdHJlYW0tPmlzX3ZiciA9IFRSVUU7Ci0gICAgICAgICAgICByZXMgPSBnc3RfcmlmZl9wYXJzZV9zdHJmX3ZpZHMgKGVsZW1lbnQsIHN1YiwKLSAgICAgICAgICAgICAgICAmc3RyZWFtLT5zdHJmLnZpZHMsICZzdHJlYW0tPmV4dHJhZGF0YSk7Ci0gICAgICAgICAgICBzdWIgPSBOVUxMOwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgIm1hcmtpbmcgdmlkZW8gYXMgVkJSLCByZXMgJWQiLCByZXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfUklGRl9GQ0NfYXVkczoKLSAgICAgICAgICAgIHJlcyA9Ci0gICAgICAgICAgICAgICAgZ3N0X3JpZmZfcGFyc2Vfc3RyZl9hdWRzIChlbGVtZW50LCBzdWIsICZzdHJlYW0tPnN0cmYuYXVkcywKLSAgICAgICAgICAgICAgICAmc3RyZWFtLT5leHRyYWRhdGEpOwotICAgICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHN0cmVhbS0+aXNfdmJyID0gKHN0cmVhbS0+c3RyaC0+c2FtcGxlc2l6ZSA9PSAwKQotICAgICAgICAgICAgICAgICYmIHN0cmVhbS0+c3RyaC0+c2NhbGUgPiAxCi0gICAgICAgICAgICAgICAgJiYgc3RyZWFtLT5zdHJmLmF1ZHMtPmJsb2NrYWxpZ24gIT0gMTsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJtYXJraW5nIGF1ZGlvIGFzIFZCUjolZCwgcmVzICVkIiwKLSAgICAgICAgICAgICAgICBzdHJlYW0tPmlzX3ZiciwgcmVzKTsKLSAgICAgICAgICAgIC8qIHdlIG5lZWQgdGhlc2Ugb3Igd2UgaGF2ZSBubyB3YXkgdG8gY29tZSB1cCB3aXRoIHRpbWVzdGFtcHMgKi8KLSAgICAgICAgICAgIGlmICgoIXN0cmVhbS0+aXNfdmJyICYmICFzdHJlYW0tPnN0cmYuYXVkcy0+YXZfYnBzKSB8fAotICAgICAgICAgICAgICAgIChzdHJlYW0tPmlzX3ZiciAmJiAoIXN0cmVhbS0+c3RyaC0+c2NhbGUgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFzdHJlYW0tPnN0cmgtPnJhdGUpKSkgewotICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAiaW52YWxpZCBhdWRpbyBoZWFkZXIsIGlnbm9yaW5nIHN0cmVhbSIpOwotICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBzb21lIG1vcmUgc2FuaXR5IGNoZWNrcyAqLwotICAgICAgICAgICAgaWYgKHN0cmVhbS0+aXNfdmJyKSB7Ci0gICAgICAgICAgICAgIGlmIChzdHJlYW0tPnN0cmYuYXVkcy0+YmxvY2thbGlnbiA8PSA0KSB7Ci0gICAgICAgICAgICAgICAgLyogdGhhdCB3b3VsZCBtZWFuICh0b28pIG1hbnkgZnJhbWVzIHBlciBjaHVuaywKLSAgICAgICAgICAgICAgICAgKiBzbyBub3QgbGlrZWx5IHNldCBhcyBleHBlY3RlZCAqLwotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICJzdXNwaWNpb3VzIGJsb2NrYWxpZ24gJWQgZm9yIFZCUiBhdWRpbzsgIgotICAgICAgICAgICAgICAgICAgICAib3ZlcnJpZGluZyB0byAxIGZyYW1lIHBlciBjaHVuayIsCi0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZi5hdWRzLT5ibG9ja2FsaWduKTsKLSAgICAgICAgICAgICAgICAvKiB0aGlzIHNob3VsZCB0b3AgYW55IGxpa2VseSB2YWx1ZSAqLwotICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZi5hdWRzLT5ibG9ja2FsaWduID0gKDEgPDwgMTIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX0ZDQ19pYXZzOgotICAgICAgICAgICAgc3RyZWFtLT5pc192YnIgPSBUUlVFOwotICAgICAgICAgICAgcmVzID0gZ3N0X3JpZmZfcGFyc2Vfc3RyZl9pYXZzIChlbGVtZW50LCBzdWIsCi0gICAgICAgICAgICAgICAgJnN0cmVhbS0+c3RyZi5pYXZzLCAmc3RyZWFtLT5leHRyYWRhdGEpOwotICAgICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJtYXJraW5nIGlhdnMgYXMgVkJSLCByZXMgJWQiLCByZXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfUklGRl9GQ0NfdHh0czoKLSAgICAgICAgICAgIC8qIG5vdGhpbmcgdG8gcGFyc2UgaGVyZSAqLwotICAgICAgICAgICAgc3RyZWFtLT5pc192YnIgPSAoc3RyZWFtLT5zdHJoLT5zYW1wbGVzaXplID09IDApCi0gICAgICAgICAgICAgICAgJiYgKHN0cmVhbS0+c3RyaC0+c2NhbGUgPiAxKTsKLSAgICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoYXZpLAotICAgICAgICAgICAgICAgICJEb27CtHQga25vdyBob3cgdG8gaGFuZGxlIHN0cmVhbSB0eXBlICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoc3RyZWFtLT5zdHJoLT50eXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3ViKSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLSAgICAgICAgICBzdWIgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmICghcmVzKQotICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgZ290X3N0cmYgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX3ZwcnA6Ci0gICAgICB7Ci0gICAgICAgIGlmIChnb3RfdnBycCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiSWdub3JpbmcgYWRkaXRpb25hbCB2cHJwIGNodW5rIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFnb3Rfc3RyaCkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGF2aSwgIkZvdW5kIHZwcnAgY2h1bmsgYmVmb3JlIHN0cmggY2h1bmsiKTsKLSAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFnb3Rfc3RyZikgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGF2aSwgIkZvdW5kIHZwcnAgY2h1bmsgYmVmb3JlIHN0cmYgY2h1bmsiKTsKLSAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWdzdF9hdmlfZGVtdXhfcmlmZl9wYXJzZV92cHJwIChlbGVtZW50LCBzdWIsICZ2cHJwKSkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiRmFpbGVkIHRvIHBhcnNlIHZwcnAgY2h1bmsiKTsKLSAgICAgICAgICAvKiBub3QgY29uc2lkZXJlZCBmYXRhbCAqLwotICAgICAgICAgIGdfZnJlZSAodnBycCk7Ci0gICAgICAgICAgdnBycCA9IE5VTEw7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIGdvdF92cHJwID0gVFJVRTsKLSAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9SSUZGX1RBR19zdHJkOgotICAgICAgICBpZiAoc3RyZWFtLT5pbml0ZGF0YSkKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChzdHJlYW0tPmluaXRkYXRhKTsKLSAgICAgICAgc3RyZWFtLT5pbml0ZGF0YSA9IHN1YjsKLSAgICAgICAgaWYgKHN1YiAhPSBOVUxMKSB7Ci0gICAgICAgICAgZ3N0X2F2aV9kZW11eF9wYXJzZV9zdHJkIChhdmksIHN1Yik7Ci0gICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX3N0cm46Ci0gICAgICAgIGdfZnJlZSAoc3RyZWFtLT5uYW1lKTsKLQotICAgICAgICBnc3RfYnVmZmVyX21hcCAoc3ViLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gICAgICAgIGlmIChhdmktPmdsb2JhbHRhZ3MgPT0gTlVMTCkKLSAgICAgICAgICBhdmktPmdsb2JhbHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgICAgICBwYXJzZV90YWdfdmFsdWUgKGF2aSwgYXZpLT5nbG9iYWx0YWdzLCBHU1RfVEFHX1RJVExFLAotICAgICAgICAgICAgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICAgICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGF2aS0+Z2xvYmFsdGFncywgR1NUX1RBR19USVRMRSwKLSAgICAgICAgICAgICAgICAmc3RyZWFtLT5uYW1lKSkKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzdHJlYW0gbmFtZTogJXMiLCBzdHJlYW0tPm5hbWUpOwotCi0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHN1YiwgJm1hcCk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0gICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUklGRl9JRElUOgotICAgICAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXQgKGF2aSwgc3ViKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAodGFnID09IEdTVF9NQUtFX0ZPVVJDQyAoJ2knLCAnbicsICdkJywgJ3gnKSB8fAotICAgICAgICAgICAgdGFnID09IEdTVF9NQUtFX0ZPVVJDQyAoJ2knLCAneCcsICcwJyArIGF2aS0+bnVtX3N0cmVhbXMgLyAxMCwKLSAgICAgICAgICAgICAgICAnMCcgKyBhdmktPm51bV9zdHJlYW1zICUgMTApKSB7Ci0gICAgICAgICAgZ19mcmVlIChzdHJlYW0tPmluZGV4ZXMpOwotICAgICAgICAgIGdzdF9hdmlfZGVtdXhfcGFyc2Vfc3VwZXJpbmRleCAoYXZpLCBzdWIsICZzdHJlYW0tPmluZGV4ZXMpOwotICAgICAgICAgIHN0cmVhbS0+c3VwZXJpbmRleCA9IFRSVUU7Ci0gICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICJVbmtub3duIHN0cmVhbSBoZWFkZXIgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFUICIsIGlnbm9yaW5nIiwKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSk7Ci0gICAgICAgIC8qIE9ubHkgZ2V0IGJ1ZmZlciBmb3IgZGVidWdnaW5nIGlmIHRoZSBtZW1kdW1wIGlzIG5lZWRlZCAgKi8KLSAgICAgICAgaWYgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChHU1RfQ0FUX0RFRkFVTFQpID49IDkpIHsKLSAgICAgICAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgICAgICAgIGdzdF9idWZmZXJfbWFwIChzdWIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChhdmksICJVbmtub3duIHN0cmVhbSBoZWFkZXIgdGFnIiwgbWFwLmRhdGEsCi0gICAgICAgICAgICAgIG1hcC5zaXplKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChzdWIsICZtYXApOwotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfSlVOUToKLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0pVTks6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoc3ViICE9IE5VTEwpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0gICAgICBzdWIgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmICghZ290X3N0cmgpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIkZhaWxlZCB0byBmaW5kIHN0cmggY2h1bmsiKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICBpZiAoIWdvdF9zdHJmKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJGYWlsZWQgdG8gZmluZCBzdHJmIGNodW5rIik7Ci0gICAgZ290byBmYWlsOwotICB9Ci0KLSAgLyogZ2V0IGNsYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRlbXBsYXRlICovCi0gIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChhdmkpOwotCi0gIC8qIHdlIG5vdyBoYXZlIGFsbCBpbmZvLCBsZXTCtHMgc2V0IHVwIGEgcGFkIGFuZCBhIGNhcHMgYW5kIGJlIGRvbmUgKi8KLSAgLyogY3JlYXRlIHN0cmVhbSBuYW1lICsgcGFkICovCi0gIHN3aXRjaCAoc3RyZWFtLT5zdHJoLT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfUklGRl9GQ0Nfdmlkczp7Ci0gICAgICBndWludDMyIGZvdXJjYzsKLQotICAgICAgZm91cmNjID0gKHN0cmVhbS0+c3RyZi52aWRzLT5jb21wcmVzc2lvbikgPwotICAgICAgICAgIHN0cmVhbS0+c3RyZi52aWRzLT5jb21wcmVzc2lvbiA6IHN0cmVhbS0+c3RyaC0+ZmNjX2hhbmRsZXI7Ci0gICAgICBjYXBzID0gZ3N0X3JpZmZfY3JlYXRlX3ZpZGVvX2NhcHMgKGZvdXJjYywgc3RyZWFtLT5zdHJoLAotICAgICAgICAgIHN0cmVhbS0+c3RyZi52aWRzLCBzdHJlYW0tPmV4dHJhZGF0YSwgc3RyZWFtLT5pbml0ZGF0YSwgJmNvZGVjX25hbWUpOwotCi0gICAgICAvKiBEWFNCIGlzIFhTVUIsIGFuZCBpdCBpcyBwbGFjZWQgaW5zaWRlIGEgdmlkcyAqLwotICAgICAgaWYgKCFjYXBzIHx8IChmb3VyY2MgIT0gR1NUX01BS0VfRk9VUkNDICgnRCcsICdYJywgJ1MnLCAnQicpICYmCi0gICAgICAgICAgICAgIGZvdXJjYyAhPSBHU1RfTUFLRV9GT1VSQ0MgKCdEJywgJ1gnLCAnUycsICdBJykpKSB7Ci0gICAgICAgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJ2aWRlb18ldSIsIGF2aS0+bnVtX3Zfc3RyZWFtcyk7Ci0gICAgICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ2aWRlb18ldSIpOwotICAgICAgICBpZiAoIWNhcHMpIHsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtYXZpLXVua25vd24iLCAiZm91cmNjIiwKLSAgICAgICAgICAgICAgR19UWVBFX0lOVCwgZm91cmNjLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIGlmIChnb3RfdnBycCAmJiB2cHJwKSB7Ci0gICAgICAgICAgZ3VpbnQzMiBhc3BlY3RfbiwgYXNwZWN0X2Q7Ci0gICAgICAgICAgZ2ludCBuLCBkOwotCi0gICAgICAgICAgYXNwZWN0X24gPSB2cHJwLT5hc3BlY3QgPj4gMTY7Ci0gICAgICAgICAgYXNwZWN0X2QgPSB2cHJwLT5hc3BlY3QgJiAweGZmZmY7Ci0gICAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gdXNpbmcgdy9oIGFuZCBhc3BlY3QgcmF0aW8gKi8KLSAgICAgICAgICBuID0gYXNwZWN0X24gKiBzdHJlYW0tPnN0cmYudmlkcy0+aGVpZ2h0OwotICAgICAgICAgIGQgPSBhc3BlY3RfZCAqIHN0cmVhbS0+c3RyZi52aWRzLT53aWR0aDsKLSAgICAgICAgICBpZiAobiAmJiBkKQotICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgICAgICAgICAgIG4sIGQsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGNhcHMgPSBnc3RfYXZpX2RlbXV4X2NoZWNrX2NhcHMgKGF2aSwgc3RyZWFtLCBjYXBzKTsKLSAgICAgICAgdGFnX25hbWUgPSBHU1RfVEFHX1ZJREVPX0NPREVDOwotICAgICAgICBhdmktPm51bV92X3N0cmVhbXMrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzdWJwaWN0dXJlXyV1IiwgYXZpLT5udW1fc3Bfc3RyZWFtcyk7Ci0gICAgICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzdWJwaWN0dXJlXyV1Iik7Ci0gICAgICAgIHRhZ19uYW1lID0gTlVMTDsKLSAgICAgICAgYXZpLT5udW1fc3Bfc3RyZWFtcysrOwotICAgICAgICBzcGFyc2UgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1JJRkZfRkNDX2F1ZHM6ewotICAgICAgLyogRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSBjaGFubmVsIHJlb3JkZXIgbWFwICovCi0gICAgICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiYXVkaW9fJXUiLCBhdmktPm51bV9hX3N0cmVhbXMpOwotICAgICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgImF1ZGlvXyV1Iik7Ci0gICAgICBjYXBzID0gZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHMgKHN0cmVhbS0+c3RyZi5hdWRzLT5mb3JtYXQsCi0gICAgICAgICAgc3RyZWFtLT5zdHJoLCBzdHJlYW0tPnN0cmYuYXVkcywgc3RyZWFtLT5leHRyYWRhdGEsCi0gICAgICAgICAgc3RyZWFtLT5pbml0ZGF0YSwgJmNvZGVjX25hbWUsIE5VTEwpOwotICAgICAgaWYgKCFjYXBzKSB7Ci0gICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1hdmktdW5rbm93biIsICJjb2RlY19pZCIsCi0gICAgICAgICAgICBHX1RZUEVfSU5ULCBzdHJlYW0tPnN0cmYuYXVkcy0+Zm9ybWF0LCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIHRhZ19uYW1lID0gR1NUX1RBR19BVURJT19DT0RFQzsKLSAgICAgIGF2aS0+bnVtX2Ffc3RyZWFtcysrOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1JJRkZfRkNDX2lhdnM6ewotICAgICAgZ3VpbnQzMiBmb3VyY2MgPSBzdHJlYW0tPnN0cmgtPmZjY19oYW5kbGVyOwotCi0gICAgICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgidmlkZW9fJXUiLCBhdmktPm51bV92X3N0cmVhbXMpOwotICAgICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInZpZGVvXyV1Iik7Ci0gICAgICBjYXBzID0gZ3N0X3JpZmZfY3JlYXRlX2lhdnNfY2FwcyAoZm91cmNjLCBzdHJlYW0tPnN0cmgsCi0gICAgICAgICAgc3RyZWFtLT5zdHJmLmlhdnMsIHN0cmVhbS0+ZXh0cmFkYXRhLCBzdHJlYW0tPmluaXRkYXRhLCAmY29kZWNfbmFtZSk7Ci0gICAgICBpZiAoIWNhcHMpIHsKLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWF2aS11bmtub3duIiwgImZvdXJjYyIsCi0gICAgICAgICAgICBHX1RZUEVfSU5ULCBmb3VyY2MsIE5VTEwpOwotICAgICAgfQotICAgICAgdGFnX25hbWUgPSBHU1RfVEFHX1ZJREVPX0NPREVDOwotICAgICAgYXZpLT5udW1fdl9zdHJlYW1zKys7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUklGRl9GQ0NfdHh0czp7Ci0gICAgICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3VidGl0bGVfJXUiLCBhdmktPm51bV90X3N0cmVhbXMpOwotICAgICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInN1YnRpdGxlXyV1Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtc3VidGl0bGUtYXZpIik7Ci0gICAgICB0YWdfbmFtZSA9IE5VTEw7Ci0gICAgICBhdmktPm51bV90X3N0cmVhbXMrKzsKLSAgICAgIHNwYXJzZSA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChGQUxTRSk7Ci0gIH0KLQotICAvKiBubyBjYXBzIG1lYW5zIG5vIHN0cmVhbSAqLwotICBpZiAoIWNhcHMpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChlbGVtZW50LCAiRGlkIG5vdCBmaW5kIGNhcHMgZm9yIHN0cmVhbSAlcyIsIHBhZG5hbWUpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJjb2RlYy1uYW1lPSVzIiwgY29kZWNfbmFtZSA/IGNvZGVjX25hbWUgOiAiTlVMTCIpOwotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAiY2Fwcz0lIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgLyogc2V0IHByb3BlciBzZXR0aW5ncyBhbmQgYWRkIGl0ICovCi0gIGlmIChzdHJlYW0tPnBhZCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPnBhZCk7Ci0gIHBhZCA9IHN0cmVhbS0+cGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIHBhZG5hbWUpOwotICBnX2ZyZWUgKHBhZG5hbWUpOwotCi0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHBhZCk7Ci0jaWYgMAotICBnc3RfcGFkX3NldF9mb3JtYXRzX2Z1bmN0aW9uIChwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F2aV9kZW11eF9nZXRfc3JjX2Zvcm1hdHMpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfbWFza19mdW5jdGlvbiAocGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfZ2V0X2V2ZW50X21hc2spKTsKLSNlbmRpZgotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSkpOwotI2lmIDAKLSAgZ3N0X3BhZF9zZXRfY29udmVydF9mdW5jdGlvbiAocGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hdmlfZGVtdXhfc3JjX2NvbnZlcnQpKTsKLSNlbmRpZgotCi0gIHN0cmVhbS0+bnVtID0gYXZpLT5udW1fc3RyZWFtczsKLQotICBzdHJlYW0tPnN0YXJ0X2VudHJ5ID0gMDsKLSAgc3RyZWFtLT5zdGVwX2VudHJ5ID0gMDsKLSAgc3RyZWFtLT5zdG9wX2VudHJ5ID0gMDsKLQotICBzdHJlYW0tPmN1cnJlbnRfZW50cnkgPSAtMTsKLSAgc3RyZWFtLT5jdXJyZW50X3RvdGFsID0gMDsKLQotICBzdHJlYW0tPmRpc2NvbnQgPSBUUlVFOwotCi0gIHN0cmVhbS0+dG90YWxfYnl0ZXMgPSAwOwotICBzdHJlYW0tPnRvdGFsX2Jsb2NrcyA9IDA7Ci0gIHN0cmVhbS0+bl9rZXlmcmFtZXMgPSAwOwotCi0gIHN0cmVhbS0+aWR4X24gPSAwOwotICBzdHJlYW0tPmlkeF9tYXggPSAwOwotCi0gIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkLCBzdHJlYW0pOwotICBhdmktPm51bV9zdHJlYW1zKys7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotICBzdHJlYW1faWQgPQotICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZiAocGFkLCBHU1RfRUxFTUVOVF9DQVNUIChhdmkpLCAiJTAzdSIsCi0gICAgICBhdmktPm51bV9zdHJlYW1zKTsKLQotICBldmVudCA9IGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoYXZpLT5zaW5rcGFkLCBHU1RfRVZFTlRfU1RSRUFNX1NUQVJULCAwKTsKLSAgaWYgKGV2ZW50KSB7Ci0gICAgaWYgKGdzdF9ldmVudF9wYXJzZV9ncm91cF9pZCAoZXZlbnQsICZhdmktPmdyb3VwX2lkKSkKLSAgICAgIGF2aS0+aGF2ZV9ncm91cF9pZCA9IFRSVUU7Ci0gICAgZWxzZQotICAgICAgYXZpLT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0gZWxzZSBpZiAoIWF2aS0+aGF2ZV9ncm91cF9pZCkgewotICAgIGF2aS0+aGF2ZV9ncm91cF9pZCA9IFRSVUU7Ci0gICAgYXZpLT5ncm91cF9pZCA9IGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCk7Ci0gIH0KLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICBpZiAoYXZpLT5oYXZlX2dyb3VwX2lkKQotICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQgKGV2ZW50LCBhdmktPmdyb3VwX2lkKTsKLSAgaWYgKHNwYXJzZSkKLSAgICBnc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncyAoZXZlbnQsIEdTVF9TVFJFQU1fRkxBR19TUEFSU0UpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBldmVudCk7Ci0gIGdfZnJlZSAoc3RyZWFtX2lkKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAocGFkLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIG1ha2UgdGFncyAqLwotICBpZiAoY29kZWNfbmFtZSAmJiB0YWdfbmFtZSkgewotICAgIGlmICghc3RyZWFtLT50YWdsaXN0KQotICAgICAgc3RyZWFtLT50YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICAgIGF2aS0+Z290X3RhZ3MgPSBUUlVFOwotCi0gICAgZ3N0X3RhZ19saXN0X2FkZCAoc3RyZWFtLT50YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgdGFnX25hbWUsCi0gICAgICAgIGNvZGVjX25hbWUsIE5VTEwpOwotICB9Ci0KLSAgZ19mcmVlICh2cHJwKTsKLSAgZ19mcmVlIChjb2RlY19uYW1lKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWZhaWw6Ci0gIHsKLSAgICAvKiB1bnJlZiBhbnkgbWVtIHRoYXQgbWF5IGJlIGluIHVzZSAqLwotICAgIGlmIChidWYpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGlmIChzdWIpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOwotICAgIGdfZnJlZSAodnBycCk7Ci0gICAgZ19mcmVlIChjb2RlY19uYW1lKTsKLSAgICBnc3RfYXZpX2RlbXV4X3Jlc2V0X3N0cmVhbSAoYXZpLCBzdHJlYW0pOwotICAgIGF2aS0+bnVtX3N0cmVhbXMrKzsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2Vfb2RtbDoKLSAqIEBhdmk6IGNhbGxpbmcgZWxlbWVudCAodXNlZCBmb3IgZGVidWcvZXJyb3IpLgotICogQGJ1ZjogaW5wdXQgYnVmZmVyIHRvIGJlIHVzZWQgZm9yIHBhcnNpbmcuCi0gKgotICogUmVhZCBhbiBvcGVuRE1MLTIuMCBleHRlbnNpb24gaGVhZGVyLiBGaWxscyBpbiB0aGUgZnJhbWUgbnVtYmVyCi0gKiBpbiB0aGUgYXZpIGRlbXV4ZXIgb2JqZWN0IHdoZW4gcmVhZGluZyBzdWNjZWVkcy4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9hdmlfZGVtdXhfcGFyc2Vfb2RtbCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ3VpbnQzMiB0YWcgPSAwOwotICBndWludCBvZmZzZXQgPSA0OwotICBHc3RCdWZmZXIgKnN1YiA9IE5VTEw7Ci0KLSAgd2hpbGUgKGdzdF9yaWZmX3BhcnNlX2NodW5rIChHU1RfRUxFTUVOVF9DQVNUIChhdmkpLCBidWYsICZvZmZzZXQsICZ0YWcsCi0gICAgICAgICAgJnN1YikpIHsKLSAgICBzd2l0Y2ggKHRhZykgewotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfZG1saDp7Ci0gICAgICAgIGdzdF9yaWZmX2RtbGggZG1saCwgKl9kbWxoOwotICAgICAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgICAgICAvKiBzdWIgPT0gTlVMTCBpcyBwb3NzaWJsZSBhbmQgbWVhbnMgYW4gZW1wdHkgYnVmZmVyICovCi0gICAgICAgIGlmIChzdWIgPT0gTlVMTCkKLSAgICAgICAgICBnb3RvIG5leHQ7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHN1YiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAgICAgICAvKiBjaGVjayBzaXplICovCi0gICAgICAgIGlmIChtYXAuc2l6ZSA8IHNpemVvZiAoZ3N0X3JpZmZfZG1saCkpIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAgICJETUxIIGVudHJ5IGlzIHRvbyBzbWFsbCAoJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgJWQgbmVlZGVkKSIsCi0gICAgICAgICAgICAgIG1hcC5zaXplLCAoaW50KSBzaXplb2YgKGdzdF9yaWZmX2RtbGgpKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChzdWIsICZtYXApOwotICAgICAgICAgIGdvdG8gbmV4dDsKLSAgICAgICAgfQotICAgICAgICBfZG1saCA9IChnc3RfcmlmZl9kbWxoICopIG1hcC5kYXRhOwotICAgICAgICBkbWxoLnRvdGFsZnJhbWVzID0gR1NUX1JFQURfVUlOVDMyX0xFICgmX2RtbGgtPnRvdGFsZnJhbWVzKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoc3ViLCAmbWFwKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgImRtbGggdGFnIGZvdW5kOiB0b3RhbGZyYW1lczogJXUiLAotICAgICAgICAgICAgZG1saC50b3RhbGZyYW1lcyk7Ci0KLSAgICAgICAgYXZpLT5hdmloLT50b3RfZnJhbWVzID0gZG1saC50b3RhbGZyYW1lczsKLSAgICAgICAgZ290byBuZXh0OwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICJVbmtub3duIHRhZyAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIGluIE9ETUwgaGVhZGVyIiwKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSk7Ci0gICAgICAgIC8qIE9ubHkgZ2V0IGJ1ZmZlciBmb3IgZGVidWdnaW5nIGlmIHRoZSBtZW1kdW1wIGlzIG5lZWRlZCAgKi8KLSAgICAgICAgaWYgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkIChHU1RfQ0FUX0RFRkFVTFQpID49IDkpIHsKLSAgICAgICAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgICAgICAgIGdzdF9idWZmZXJfbWFwIChzdWIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChhdmksICJVbmtub3duIE9ETUwgdGFnIiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChzdWIsICZtYXApOwotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfSlVOUToKLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0pVTks6Ci0gICAgICBuZXh0OgotICAgICAgICAvKiBza2lwIGFuZCBtb3ZlIHRvIG5leHQgY2h1bmsgKi8KLSAgICAgICAgaWYgKHN1YikgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0gICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKGJ1ZikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotfQotCi0vKiBJbmRleCBoZWxwZXIgKi8KLXN0YXRpYyBndWludAotZ3N0X2F2aV9kZW11eF9pbmRleF9sYXN0IChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QXZpU3RyZWFtICogc3RyZWFtKQotewotICByZXR1cm4gc3RyZWFtLT5pZHhfbjsKLX0KLQotLyogZmluZCBhIHByZXZpb3VzIGVudHJ5IGluIHRoZSBpbmRleCB3aXRoIHRoZSBnaXZlbiBmbGFncyAqLwotc3RhdGljIGd1aW50Ci1nc3RfYXZpX2RlbXV4X2luZGV4X3ByZXYgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RBdmlTdHJlYW0gKiBzdHJlYW0sCi0gICAgZ3VpbnQgbGFzdCwgZ2Jvb2xlYW4ga2V5ZnJhbWUpCi17Ci0gIEdzdEF2aUluZGV4RW50cnkgKmVudHJ5OwotICBndWludCBpOwotCi0gIGZvciAoaSA9IGxhc3Q7IGkgPiAwOyBpLS0pIHsKLSAgICBlbnRyeSA9ICZzdHJlYW0tPmluZGV4W2kgLSAxXTsKLSAgICBpZiAoIWtleWZyYW1lIHx8IEVOVFJZX0lTX0tFWUZSQU1FIChlbnRyeSkpIHsKLSAgICAgIHJldHVybiBpIC0gMTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2F2aV9kZW11eF9pbmRleF9uZXh0IChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QXZpU3RyZWFtICogc3RyZWFtLAotICAgIGd1aW50IGxhc3QsIGdib29sZWFuIGtleWZyYW1lKQotewotICBHc3RBdmlJbmRleEVudHJ5ICplbnRyeTsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IGxhc3QgKyAxOyBpIDwgc3RyZWFtLT5pZHhfbjsgaSsrKSB7Ci0gICAgZW50cnkgPSAmc3RyZWFtLT5pbmRleFtpXTsKLSAgICBpZiAoIWtleWZyYW1lIHx8IEVOVFJZX0lTX0tFWUZSQU1FIChlbnRyeSkpIHsKLSAgICAgIHJldHVybiBpOwotICAgIH0KLSAgfQotICByZXR1cm4gc3RyZWFtLT5pZHhfbiAtIDE7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2F2aV9kZW11eF9pbmRleF9lbnRyeV9zZWFyY2ggKEdzdEF2aUluZGV4RW50cnkgKiBlbnRyeSwgZ3VpbnQ2NCAqIHRvdGFsKQotewotICBpZiAoZW50cnktPnRvdGFsIDwgKnRvdGFsKQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoZW50cnktPnRvdGFsID4gKnRvdGFsKQotICAgIHJldHVybiAxOwotICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfaW5kZXhfZm9yX3RpbWU6Ci0gKiBAYXZpOiBBdmkgb2JqZWN0Ci0gKiBAc3RyZWFtOiB0aGUgc3RyZWFtCi0gKiBAdGltZTogYSB0aW1lIHBvc2l0aW9uCi0gKgotICogRmluZHMgdGhlIGluZGV4IGVudHJ5IHdoaWNoIHRpbWUgaXMgbGVzcyBvciBlcXVhbCB0aGFuIHRoZSByZXF1ZXN0ZWQgdGltZS4KLSAqIFRyeSB0byBhdm9pZCBiaW5hcnkgc2VhcmNoIHdoZW4gd2UgY2FuIGNvbnZlcnQgdGhlIHRpbWUgdG8gYW4gaW5kZXgKLSAqIHBvc2l0aW9uIGRpcmVjdGx5IChmb3IgZXhhbXBsZSBmb3IgdmlkZW8gZnJhbWVzIHdpdGggYSBmaXhlZCBkdXJhdGlvbikuCi0gKgotICogUmV0dXJuczogdGhlIGZvdW5kIHBvc2l0aW9uIGluIHRoZSBpbmRleC4KLSAqLwotc3RhdGljIGd1aW50Ci1nc3RfYXZpX2RlbXV4X2luZGV4X2Zvcl90aW1lIChHc3RBdmlEZW11eCAqIGF2aSwKLSAgICBHc3RBdmlTdHJlYW0gKiBzdHJlYW0sIGd1aW50NjQgdGltZSkKLXsKLSAgZ3VpbnQgaW5kZXggPSAtMTsKLSAgZ3VpbnQ2NCB0b3RhbDsKLQotICBHU1RfTE9HX09CSkVDVCAoYXZpLCAic2VhcmNoIHRpbWU6JSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lKSk7Ci0KLSAgLyogZWFzeSAoYW5kIGNvbW1vbikgY2FzZXMgKi8KLSAgaWYgKHRpbWUgPT0gMCB8fCBzdHJlYW0tPmlkeF9uID09IDApCi0gICAgcmV0dXJuIDA7Ci0gIGlmICh0aW1lID49IHN0cmVhbS0+aWR4X2R1cmF0aW9uKQotICAgIHJldHVybiBzdHJlYW0tPmlkeF9uIC0gMTsKLQotICAvKiBmaWd1cmUgb3V0IHdoZXJlIHdlIG5lZWQgdG8gZ28uIEZvciB0aGF0IHdlIGNvbnZlcnQgdGhlIHRpbWUgdG8gYW4KLSAgICogaW5kZXggZW50cnkgb3Igd2UgY29udmVydCBpdCB0byBhIHRvdGFsIGFuZCB0aGVuIGRvIGEgYmluYXJ5IHNlYXJjaC4gKi8KLSAgaWYgKHN0cmVhbS0+aXNfdmJyKSB7Ci0gICAgLyogVkJSIHN0cmVhbSBuZXh0IHRpbWVzdGFtcCAqLwotICAgIGlmIChzdHJlYW0tPnN0cmgtPnR5cGUgPT0gR1NUX1JJRkZfRkNDX2F1ZHMpIHsKLSAgICAgIHRvdGFsID0gYXZpX3N0cmVhbV9jb252ZXJ0X3RpbWVfdG9fZnJhbWVzX3VuY2hlY2tlZCAoc3RyZWFtLCB0aW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgaW5kZXggPSBhdmlfc3RyZWFtX2NvbnZlcnRfdGltZV90b19mcmFtZXNfdW5jaGVja2VkIChzdHJlYW0sIHRpbWUpOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJlYW0tPnN0cmgtPnR5cGUgPT0gR1NUX1JJRkZfRkNDX2F1ZHMpIHsKLSAgICAvKiBjb25zdGFudCByYXRlIHN0cmVhbSAqLwotICAgIHRvdGFsID0gYXZpX3N0cmVhbV9jb252ZXJ0X3RpbWVfdG9fYnl0ZXNfdW5jaGVja2VkIChzdHJlYW0sIHRpbWUpOwotICB9IGVsc2UKLSAgICByZXR1cm4gLTE7Ci0KLSAgaWYgKGluZGV4ID09IC0xKSB7Ci0gICAgR3N0QXZpSW5kZXhFbnRyeSAqZW50cnk7Ci0KLSAgICAvKiBubyBpbmRleCwgZmluZCBpbmRleCB3aXRoIGJpbmFyeSBzZWFyY2ggb24gdG90YWwgKi8KLSAgICBHU1RfTE9HX09CSkVDVCAoYXZpLCAiYmluYXJ5IHNlYXJjaCBmb3IgZW50cnkgd2l0aCB0b3RhbCAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCB0b3RhbCk7Ci0KLSAgICBlbnRyeSA9IGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKHN0cmVhbS0+aW5kZXgsCi0gICAgICAgIHN0cmVhbS0+aWR4X24sIHNpemVvZiAoR3N0QXZpSW5kZXhFbnRyeSksCi0gICAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBnc3RfYXZpX2RlbXV4X2luZGV4X2VudHJ5X3NlYXJjaCwKLSAgICAgICAgR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSwgJnRvdGFsLCBOVUxMKTsKLQotICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoYXZpLCAibm90IGZvdW5kLCBhc3N1bWUgaW5kZXggMCIpOwotICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBpbmRleCA9IGVudHJ5IC0gc3RyZWFtLT5pbmRleDsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChhdmksICJmb3VuZCBhdCAldSIsIGluZGV4KTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGF2aSwgImNvbnZlcnRlZCB0aW1lIHRvIGluZGV4ICV1IiwgaW5kZXgpOwotICB9Ci0KLSAgcmV0dXJuIGluZGV4OwotfQotCi1zdGF0aWMgaW5saW5lIEdzdEF2aVN0cmVhbSAqCi1nc3RfYXZpX2RlbXV4X3N0cmVhbV9mb3JfaWQgKEdzdEF2aURlbXV4ICogYXZpLCBndWludDMyIGlkKQotewotICBndWludCBzdHJlYW1fbnI7Ci0gIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotCi0gIC8qIGdldCB0aGUgc3RyZWFtIGZvciB0aGlzIGVudHJ5ICovCi0gIHN0cmVhbV9uciA9IENIVU5LSURfVE9fU1RSRUFNTlIgKGlkKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHN0cmVhbV9uciA+PSBhdmktPm51bV9zdHJlYW1zKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLAotICAgICAgICAiaW52YWxpZCBzdHJlYW0gbnIgJWQgKDB4JTA4eCwgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIikiLCBzdHJlYW1fbnIsIGlkLAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGlkKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW3N0cmVhbV9ucl07Ci0gIGlmIChHX1VOTElLRUxZICghc3RyZWFtLT5zdHJoKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiVW5oYW5kbGVkIHN0cmVhbSAlZCwgc2tpcHBpbmciLCBzdHJlYW1fbnIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBzdHJlYW07Ci19Ci0KLS8qCi0gKiBnc3RfYXZpX2RlbXV4X3BhcnNlX2luZGV4OgotICogQGF2aTogY2FsbGluZyBlbGVtZW50ICh1c2VkIGZvciBkZWJ1Z2dpbmcvZXJyb3JzKS4KLSAqIEBidWY6IGJ1ZmZlciBjb250YWluaW5nIHRoZSBmdWxsIGluZGV4LgotICoKLSAqIFJlYWQgaW5kZXggZW50cmllcyBmcm9tIHRoZSBwcm92aWRlZCBidWZmZXIuCi0gKiBUaGUgYnVmZmVyIHNob3VsZCBjb250YWluIGEgR1NUX1JJRkZfVEFHX2lkeDEgY2h1bmsuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9wYXJzZV9pbmRleCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50IGksIG51bSwgbjsKLSAgZ3N0X3JpZmZfaW5kZXhfZW50cnkgKmluZGV4OwotICBHc3RDbG9ja1RpbWUgc3RhbXA7Ci0gIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotICBHc3RBdmlJbmRleEVudHJ5IGVudHJ5OwotICBndWludDMyIGlkOwotCi0gIGlmICghYnVmKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIHN0YW1wID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKTsKLQotICAvKiBzZWUgaG93IG1hbnkgaXRlbXMgaW4gdGhlIGluZGV4ICovCi0gIG51bSA9IG1hcC5zaXplIC8gc2l6ZW9mIChnc3RfcmlmZl9pbmRleF9lbnRyeSk7Ci0gIGlmIChudW0gPT0gMCkKLSAgICBnb3RvIGVtcHR5X2xpc3Q7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChhdmksICJQYXJzaW5nIGluZGV4LCBucl9lbnRyaWVzID0gJTZkIiwgbnVtKTsKLQotICBpbmRleCA9IChnc3RfcmlmZl9pbmRleF9lbnRyeSAqKSBtYXAuZGF0YTsKLQotICAvKiBmaWd1cmUgb3V0IGlmIHRoZSBpbmRleCBpcyAwIGJhc2VkIG9yIHJlbGF0aXZlIHRvIHRoZSBNT1ZJIHN0YXJ0ICovCi0gIGVudHJ5Lm9mZnNldCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoJmluZGV4WzBdLm9mZnNldCk7Ci0gIGlmIChlbnRyeS5vZmZzZXQgPCBhdmktPm9mZnNldCkgewotICAgIGF2aS0+aW5kZXhfb2Zmc2V0ID0gYXZpLT5vZmZzZXQgKyA4OwotICAgIEdTVF9ERUJVRyAoImluZGV4X29mZnNldCA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGF2aS0+aW5kZXhfb2Zmc2V0KTsKLSAgfSBlbHNlIHsKLSAgICBhdmktPmluZGV4X29mZnNldCA9IDA7Ci0gICAgR1NUX0RFQlVHICgiaW5kZXggaXMgMCBiYXNlZCIpOwotICB9Ci0KLSAgZm9yIChpID0gMCwgbiA9IDA7IGkgPCBudW07IGkrKykgewotICAgIGlkID0gR1NUX1JFQURfVUlOVDMyX0xFICgmaW5kZXhbaV0uaWQpOwotICAgIGVudHJ5Lm9mZnNldCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoJmluZGV4W2ldLm9mZnNldCk7Ci0KLSAgICAvKiBzb21lIHNhbml0eSBjaGVja3MgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoaWQgPT0gR1NUX1JJRkZfcmVjIHx8IGlkID09IDAgfHwKLSAgICAgICAgICAgIChlbnRyeS5vZmZzZXQgPT0gMCAmJiBuID4gMCkpKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBnZXQgdGhlIHN0cmVhbSBmb3IgdGhpcyBlbnRyeSAqLwotICAgIHN0cmVhbSA9IGdzdF9hdmlfZGVtdXhfc3RyZWFtX2Zvcl9pZCAoYXZpLCBpZCk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHJlYW0pKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBoYW5kbGUgb2Zmc2V0IGFuZCBzaXplICovCi0gICAgZW50cnkub2Zmc2V0ICs9IGF2aS0+aW5kZXhfb2Zmc2V0ICsgODsKLSAgICBlbnRyeS5zaXplID0gR1NUX1JFQURfVUlOVDMyX0xFICgmaW5kZXhbaV0uc2l6ZSk7Ci0KLSAgICAvKiBoYW5kbGUgZmxhZ3MgKi8KLSAgICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlID09IEdTVF9SSUZGX0ZDQ19hdWRzKSB7Ci0gICAgICAvKiBhbGwgYXVkaW8gZnJhbWVzIGFyZSBrZXlmcmFtZXMgKi8KLSAgICAgIEVOVFJZX1NFVF9LRVlGUkFNRSAoJmVudHJ5KTsKLSAgICB9IGVsc2UgaWYgKHN0cmVhbS0+c3RyaC0+dHlwZSA9PSBHU1RfUklGRl9GQ0NfdmlkcyAmJgotICAgICAgICBzdHJlYW0tPnN0cmYudmlkcy0+Y29tcHJlc3Npb24gPT0gR1NUX1JJRkZfRFhTQikgewotICAgICAgLyogYWxsIHhzdWIgZnJhbWVzIGFyZSBrZXlmcmFtZXMgKi8KLSAgICAgIEVOVFJZX1NFVF9LRVlGUkFNRSAoJmVudHJ5KTsKLSAgICB9IGVsc2UgewotICAgICAgZ3VpbnQzMiBmbGFnczsKLSAgICAgIC8qIGVsc2UgcmVhZCBmbGFncyAqLwotICAgICAgZmxhZ3MgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKCZpbmRleFtpXS5mbGFncyk7Ci0gICAgICBpZiAoZmxhZ3MgJiBHU1RfUklGRl9JRl9LRVlGUkFNRSkgewotICAgICAgICBFTlRSWV9TRVRfS0VZRlJBTUUgKCZlbnRyeSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBFTlRSWV9VTlNFVF9LRVlGUkFNRSAoJmVudHJ5KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBhbmQgYWRkICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYXZpX2RlbXV4X2FkZF9pbmRleCAoYXZpLCBzdHJlYW0sIG51bSwgJmVudHJ5KSkpCi0gICAgICBnb3RvIG91dF9vZl9tZW07Ci0KLSAgICBuKys7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAvKiBnZXQgc3RyZWFtIHN0YXRzIG5vdyAqLwotICBhdmktPmhhdmVfaW5kZXggPSBnc3RfYXZpX2RlbXV4X2RvX2luZGV4X3N0YXRzIChhdmkpOwotCi0gIHN0YW1wID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKSAtIHN0YW1wOwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJpbmRleCBwYXJzaW5nIHRvb2sgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoc3RhbXApKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWVtcHR5X2xpc3Q6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJlbXB0eSBpbmRleCIpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW91dF9vZl9tZW06Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBSRVNPVVJDRSwgTk9fU1BBQ0VfTEVGVCwgKE5VTEwpLAotICAgICAgICAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICV1KiV1PSV1IGJ5dGVzIiwKLSAgICAgICAgICAgIChndWludCkgc2l6ZW9mIChHc3RBdmlJbmRleEVudHJ5KSwgbnVtLAotICAgICAgICAgICAgKGd1aW50KSBzaXplb2YgKEdzdEF2aUluZGV4RW50cnkpICogbnVtKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKgotICogZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXg6Ci0gKiBAYXZpOiBhdmkgZGVtdXhlciBvYmplY3QuCi0gKgotICogU2Vla3MgdG8gaW5kZXggYW5kIHJlYWRzIGl0LgotICovCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9zdHJlYW1faW5kZXggKEdzdEF2aURlbXV4ICogYXZpKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgZ3VpbnQ2NCBvZmZzZXQgPSBhdmktPm9mZnNldDsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBndWludDMyIHRhZzsKLSAgZ3VpbnQzMiBzaXplOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBHU1RfREVCVUcgKCJkZW11eCBzdHJlYW0gaW5kZXggYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgLyogZ2V0IGNodW5rIGluZm9ybWF0aW9uICovCi0gIHJlcyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAoYXZpLT5zaW5rcGFkLCBvZmZzZXQsIDgsICZidWYpOwotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gcHVsbF9mYWlsZWQ7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgaWYgKG1hcC5zaXplIDwgOCkKLSAgICBnb3RvIHRvb19zbWFsbDsKLQotICAvKiBjaGVjayB0YWcgZmlyc3QgYmVmb3JlIGJsaW5keSB0cnlpbmcgdG8gcmVhZCAnc2l6ZScgYnl0ZXMgKi8KLSAgdGFnID0gR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSk7Ci0gIHNpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCk7Ci0gIGlmICh0YWcgPT0gR1NUX1JJRkZfVEFHX0xJU1QpIHsKLSAgICAvKiB0aGlzIGlzIHRoZSBtb3ZpIHRhZyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInNraXAgTElTVCBjaHVuaywgc2l6ZSAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgICAoOCArIEdTVF9ST1VORF9VUF8yIChzaXplKSkpOwotICAgIG9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAgIGJ1ZiA9IE5VTEw7Ci0gICAgcmVzID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChhdmktPnNpbmtwYWQsIG9mZnNldCwgOCwgJmJ1Zik7Ci0gICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgIGdvdG8gcHVsbF9mYWlsZWQ7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmIChtYXAuc2l6ZSA8IDgpCi0gICAgICBnb3RvIHRvb19zbWFsbDsKLQotICAgIHRhZyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAobWFwLmRhdGEpOwotICAgIHNpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICBpZiAodGFnICE9IEdTVF9SSUZGX1RBR19pZHgxKQotICAgIGdvdG8gbm9faW5kZXg7Ci0gIGlmICghc2l6ZSkKLSAgICBnb3RvIHplcm9faW5kZXg7Ci0KLSAgR1NUX0RFQlVHICgiaW5kZXggZm91bmQgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgLyogcmVhZCBjaHVuaywgYWR2YW5jZSBvZmZzZXQgKi8KLSAgaWYgKGdzdF9yaWZmX3JlYWRfY2h1bmsgKEdTVF9FTEVNRU5UX0NBU1QgKGF2aSksCi0gICAgICAgICAgYXZpLT5zaW5rcGFkLCAmb2Zmc2V0LCAmdGFnLCAmYnVmKSAhPSBHU1RfRkxPV19PSykKLSAgICByZXR1cm47Ci0KLSAgR1NUX0RFQlVHICgid2lsbCBwYXJzZSBpbmRleCBjaHVuayBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgZm9yIHRhZyAlIgotICAgICAgR1NUX0ZPVVJDQ19GT1JNQVQsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSk7Ci0KLSAgZ3N0X2F2aV9kZW11eF9wYXJzZV9pbmRleCAoYXZpLCBidWYpOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAvKiBkZWJ1ZyBvdXIgaW5kZXhlcyAqLwotICB7Ci0gICAgZ2ludCBpOwotICAgIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykgewotICAgICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAic3RyZWFtICV1OiAldSBmcmFtZXMsICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGJ5dGVzIiwKLSAgICAgICAgICBpLCBzdHJlYW0tPmlkeF9uLCBzdHJlYW0tPnRvdGFsX2J5dGVzKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1wdWxsX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgInB1bGwgcmFuZ2UgZmFpbGVkOiBwb3M9JSIgR19HVUlOVDY0X0ZPUk1BVCAiIHNpemU9OCIsIG9mZnNldCk7Ci0gICAgcmV0dXJuOwotICB9Ci10b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJCdWZmZXIgaXMgdG9vIHNtYWxsIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybjsKLSAgfQotbm9faW5kZXg6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgIk5vIGluZGV4IGRhdGEgKGlkeDEpIGFmdGVyIG1vdmkgY2h1bmssIGJ1dCAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICByZXR1cm47Ci0gIH0KLXplcm9faW5kZXg6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIkVtcHR5IGluZGV4IGRhdGEgKGlkeDEpIGFmdGVyIG1vdmkgY2h1bmsiKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4X3B1c2g6Ci0gKiBAYXZpOiBhdmkgZGVtdXhlciBvYmplY3QuCi0gKgotICogUmVhZCBpbmRleC4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4X3B1c2ggKEdzdEF2aURlbXV4ICogYXZpKQotewotICBndWludDY0IG9mZnNldCA9IGF2aS0+aWR4MV9vZmZzZXQ7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludDMyIHRhZzsKLSAgZ3VpbnQzMiBzaXplOwotCi0gIEdTVF9ERUJVRyAoImRlbXV4IHN0cmVhbSBpbmRleCBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLQotICAvKiBnZXQgY2h1bmsgaW5mb3JtYXRpb24gKi8KLSAgaWYgKCFnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmsgKGF2aSwgJnRhZywgJnNpemUpKQotICAgIHJldHVybjsKLQotICAvKiBjaGVjayB0YWcgZmlyc3QgYmVmb3JlIGJsaW5kbHkgdHJ5aW5nIHRvIHJlYWQgJ3NpemUnIGJ5dGVzICovCi0gIGlmICh0YWcgPT0gR1NUX1JJRkZfVEFHX0xJU1QpIHsKLSAgICAvKiB0aGlzIGlzIHRoZSBtb3ZpIHRhZyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInNraXAgTElTVCBjaHVuaywgc2l6ZSAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgICAoOCArIEdTVF9ST1VORF9VUF8yIChzaXplKSkpOwotICAgIGF2aS0+aWR4MV9vZmZzZXQgPSBvZmZzZXQgKyA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgIC8qIGlzc3VlIHNlZWsgdG8gYWxsb3cgY2hhaW4gZnVuY3Rpb24gdG8gaGFuZGxlIGl0IGFuZCByZXR1cm4hICovCi0gICAgcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoYXZpLCBhdmktPmlkeDFfb2Zmc2V0LCBhdmktPnNlZ21lbnRfc2VxbnVtKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAodGFnICE9IEdTVF9SSUZGX1RBR19pZHgxKQotICAgIGdvdG8gbm9faW5kZXg7Ci0KLSAgR1NUX0RFQlVHICgiaW5kZXggZm91bmQgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgLyogZmx1c2ggY2h1bmsgaGVhZGVyICovCi0gIGdzdF9hZGFwdGVyX2ZsdXNoIChhdmktPmFkYXB0ZXIsIDgpOwotICAvKiByZWFkIGNodW5rIHBheWxvYWQgKi8KLSAgYnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGF2aS0+YWRhcHRlciwgc2l6ZSk7Ci0gIGlmICghYnVmKQotICAgIGdvdG8gcHVsbF9mYWlsZWQ7Ci0gIC8qIGFkdmFuY2Ugb2Zmc2V0ICovCi0gIG9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotCi0gIEdTVF9ERUJVRyAoIndpbGwgcGFyc2UgaW5kZXggY2h1bmsgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGZvciB0YWcgJSIKLSAgICAgIEdTVF9GT1VSQ0NfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpLCBHU1RfRk9VUkNDX0FSR1MgKHRhZykpOwotCi0gIGF2aS0+b2Zmc2V0ID0gYXZpLT5maXJzdF9tb3ZpX29mZnNldDsKLSAgZ3N0X2F2aV9kZW11eF9wYXJzZV9pbmRleCAoYXZpLCBidWYpOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAvKiBkZWJ1ZyBvdXIgaW5kZXhlcyAqLwotICB7Ci0gICAgZ2ludCBpOwotICAgIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykgewotICAgICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAic3RyZWFtICV1OiAldSBmcmFtZXMsICUiIEdfR0lOVDY0X0ZPUk1BVCAiIGJ5dGVzIiwKLSAgICAgICAgICBpLCBzdHJlYW0tPmlkeF9uLCBzdHJlYW0tPnRvdGFsX2J5dGVzKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1wdWxsX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgInRha2luZyBkYXRhIGZyb20gYWRhcHRlciBmYWlsZWQ6IHBvcz0lIiBHX0dVSU5UNjRfRk9STUFUICIgc2l6ZT0ldSIsCi0gICAgICAgIG9mZnNldCwgc2l6ZSk7Ci0gICAgcmV0dXJuOwotICB9Ci1ub19pbmRleDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLAotICAgICAgICAiTm8gaW5kZXggZGF0YSAoaWR4MSkgYWZ0ZXIgbW92aSBjaHVuaywgYnV0ICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHRhZykpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0vKgotICogZ3N0X2F2aV9kZW11eF9wZWVrX3RhZzoKLSAqCi0gKiBSZXR1cm5zIHRoZSB0YWcgYW5kIHNpemUgb2YgdGhlIG5leHQgY2h1bmsKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfZGVtdXhfcGVla190YWcgKEdzdEF2aURlbXV4ICogYXZpLCBndWludDY0IG9mZnNldCwgZ3VpbnQzMiAqIHRhZywKLSAgICBndWludCAqIHNpemUpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAoYXZpLT5zaW5rcGFkLCBvZmZzZXQsIDgsICZidWYpOwotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gcHVsbF9mYWlsZWQ7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgaWYgKG1hcC5zaXplICE9IDgpCi0gICAgZ290byB3cm9uZ19zaXplOwotCi0gICp0YWcgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhKTsKLSAgKnNpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGF2aSwgIlRhZ1slIiBHU1RfRk9VUkNDX0ZPUk1BVCAiXSAoc2l6ZTolZCkgJSIKLSAgICAgIEdfR0lOVDY0X0ZPUk1BVCAiIC0tICUiIEdfR0lOVDY0X0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTICgqdGFnKSwKLSAgICAgICpzaXplLCBvZmZzZXQgKyA4LCBvZmZzZXQgKyA4ICsgKGdpbnQ2NCkgKiBzaXplKTsKLQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotcHVsbF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJwdWxsX3JhbmdlZCByZXR1cm5lZCAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci13cm9uZ19zaXplOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgd2hpY2ggaXMgPD4gOCBieXRlcyIsCi0gICAgICAgIG1hcC5zaXplKTsKLSAgICByZXMgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfbmV4dF9kYXRhX2J1ZmZlcjoKLSAqCi0gKiBSZXR1cm5zIHRoZSBvZmZzZXQgYW5kIHNpemUgb2YgdGhlIG5leHQgYnVmZmVyCi0gKiBQb3NpdGlvbiBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGJ1ZmZlciAoYWZ0ZXIgdGFnIGFuZCBzaXplKQotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9kZW11eF9uZXh0X2RhdGFfYnVmZmVyIChHc3RBdmlEZW11eCAqIGF2aSwgZ3VpbnQ2NCAqIG9mZnNldCwKLSAgICBndWludDMyICogdGFnLCBndWludCAqIHNpemUpCi17Ci0gIGd1aW50NjQgb2ZmID0gKm9mZnNldDsKLSAgZ3VpbnQgX3NpemUgPSAwOwotICBHc3RGbG93UmV0dXJuIHJlczsKLQotICBkbyB7Ci0gICAgcmVzID0gZ3N0X2F2aV9kZW11eF9wZWVrX3RhZyAoYXZpLCBvZmYsIHRhZywgJl9zaXplKTsKLSAgICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0gICAgaWYgKCp0YWcgPT0gR1NUX1JJRkZfVEFHX0xJU1QgfHwgKnRhZyA9PSBHU1RfUklGRl9UQUdfUklGRikKLSAgICAgIG9mZiArPSA4ICsgNDsgICAgICAgICAgICAgLyogc2tpcCB0YWcgKyBzaXplICsgc3VidGFnICovCi0gICAgZWxzZSB7Ci0gICAgICAqb2Zmc2V0ID0gb2ZmICsgODsKLSAgICAgICpzaXplID0gX3NpemU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUgKFRSVUUpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiBnc3RfYXZpX2RlbXV4X3N0cmVhbV9zY2FuOgotICogQGF2aTogY2FsbGluZyBlbGVtZW50ICh1c2VkIGZvciBkZWJ1Z2dpbmcvZXJyb3JzKS4KLSAqCi0gKiBTY2FuIHRoZSBmaWxlIGZvciBhbGwgY2h1bmtzIHRvICJjcmVhdGUiIGEgbmV3IGluZGV4LgotICogcHVsbC1yYW5nZSBiYXNlZAotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hdmlfZGVtdXhfc3RyZWFtX3NjYW4gKEdzdEF2aURlbXV4ICogYXZpKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0QXZpU3RyZWFtICpzdHJlYW07Ci0gIGd1aW50NjQgcG9zID0gMDsKLSAgZ3VpbnQ2NCBsZW5ndGg7Ci0gIGdpbnQ2NCB0bXBsZW5ndGg7Ci0gIGd1aW50MzIgdGFnID0gMDsKLSAgZ3VpbnQgbnVtOwotCi0gIC8qIEZJWE1FOgotICAgKiAtIGltcGxlbWVudCBub24tc2Vla2FibGUgc291cmNlIHN1cHBvcnQuCi0gICAqLwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJDcmVhdGluZyBpbmRleCIpOwotCi0gIC8qIGdldCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSAqLwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoYXZpLT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLCAmdG1wbGVuZ3RoKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGxlbmd0aCA9IHRtcGxlbmd0aDsKLQotICAvKiBndWVzcyB0aGUgdG90YWwgYW1vdW50IG9mIGVudHJpZXMgd2UgZXhwZWN0ICovCi0gIG51bSA9IDE2MDAwOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgR3N0QXZpSW5kZXhFbnRyeSBlbnRyeTsKLSAgICBndWludCBzaXplID0gMDsKLQotICAgIC8qIHN0YXJ0IHJlYWRpbmcgZGF0YSBidWZmZXJzIHRvIGZpbmQgdGhlIGlkIGFuZCBvZmZzZXQgKi8KLSAgICByZXMgPSBnc3RfYXZpX2RlbXV4X25leHRfZGF0YV9idWZmZXIgKGF2aSwgJnBvcywgJnRhZywgJnNpemUpOwotICAgIGlmIChHX1VOTElLRUxZIChyZXMgIT0gR1NUX0ZMT1dfT0spKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBnZXQgc3RyZWFtICovCi0gICAgc3RyZWFtID0gZ3N0X2F2aV9kZW11eF9zdHJlYW1fZm9yX2lkIChhdmksIHRhZyk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHJlYW0pKQotICAgICAgZ290byBuZXh0OwotCi0gICAgLyogd2UgY2FuJ3QgZmlndXJlIG91dCB0aGUga2V5ZnJhbWVzLCBhc3N1bWUgdGhleSBhbGwgYXJlICovCi0gICAgZW50cnkuZmxhZ3MgPSBHU1RfQVZJX0tFWUZSQU1FOwotICAgIGVudHJ5Lm9mZnNldCA9IHBvczsKLSAgICBlbnRyeS5zaXplID0gc2l6ZTsKLQotICAgIC8qIGFuZCBhZGQgdG8gdGhlIGluZGV4IG9mIHRoaXMgc3RyZWFtICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYXZpX2RlbXV4X2FkZF9pbmRleCAoYXZpLCBzdHJlYW0sIG51bSwgJmVudHJ5KSkpCi0gICAgICBnb3RvIG91dF9vZl9tZW07Ci0KLSAgbmV4dDoKLSAgICAvKiB1cGRhdGUgcG9zaXRpb24gKi8KLSAgICBwb3MgKz0gR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgIGlmIChHX1VOTElLRUxZIChwb3MgPiBsZW5ndGgpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAiU3RvcHBpbmcgaW5kZXggbG9va3VwIHNpbmNlIHdlIGFyZSBmdXJ0aGVyIHRoYW4gRU9GIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiBjb2xsZWN0IHN0YXRzICovCi0gIGF2aS0+aGF2ZV9pbmRleCA9IGdzdF9hdmlfZGVtdXhfZG9faW5kZXhfc3RhdHMgKGF2aSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1vdXRfb2ZfbWVtOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgUkVTT1VSQ0UsIE5PX1NQQUNFX0xFRlQsIChOVUxMKSwKLSAgICAgICAgKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAldSoldT0ldSBieXRlcyIsCi0gICAgICAgICAgICAoZ3VpbnQpIHNpemVvZiAoR3N0QXZpSW5kZXhFbnRyeSksIG51bSwKLSAgICAgICAgICAgIChndWludCkgc2l6ZW9mIChHc3RBdmlJbmRleEVudHJ5KSAqIG51bSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXggKEdzdEF2aURlbXV4ICogYXZpKQotewotICBndWludCBpOwotICBHc3RDbG9ja1RpbWUgdG90YWw7Ci0gIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotCi0gIHRvdGFsID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAvKiBhbGwgc3RyZWFtcyBzdGFydCBhdCBhIHRpbWVzdGFtcCAwICovCi0gIGZvciAoaSA9IDA7IGkgPCBhdmktPm51bV9zdHJlYW1zOyBpKyspIHsKLSAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIGhkdXJhdGlvbjsKLSAgICBnc3RfcmlmZl9zdHJoICpzdHJoOwotCi0gICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotICAgIGlmIChHX1VOTElLRUxZICghc3RyZWFtIHx8ICFzdHJlYW0tPmlkeF9uIHx8ICEoc3RyaCA9IHN0cmVhbS0+c3RyaCkpKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBnZXQgaGVhZGVyIGR1cmF0aW9uIGZvciB0aGUgc3RyZWFtICovCi0gICAgaGR1cmF0aW9uID0gc3RyZWFtLT5oZHJfZHVyYXRpb247Ci0gICAgLyogaW5kZXggZHVyYXRpb24gY2FsY3VsYXRlZCBkdXJpbmcgcGFyc2luZyAqLwotICAgIGR1cmF0aW9uID0gc3RyZWFtLT5pZHhfZHVyYXRpb247Ci0KLSAgICAvKiBub3cgcGljayBhIGdvb2QgZHVyYXRpb24gKi8KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkgewotICAgICAgLyogaW5kZXggZ2F2ZSB2YWxpZCBkdXJhdGlvbiwgdXNlIHRoYXQgKi8KLSAgICAgIEdTVF9JTkZPICgiU3RyZWFtICVwIGR1cmF0aW9uIGFjY29yZGluZyB0byBpbmRleDogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIHN0cmVhbSwgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogZmFsbCBiYWNrIHRvIGhlYWRlciBpbmZvIHRvIGNhbGN1bGF0ZSBhIGR1cmF0aW9uICovCi0gICAgICBkdXJhdGlvbiA9IGhkdXJhdGlvbjsKLSAgICB9Ci0gICAgR1NUX0lORk8gKCJTZXR0aW5nIGR1cmF0aW9uIG9mIHN0cmVhbSAjJWQgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBpLCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOwotICAgIC8qIHNldCBkdXJhdGlvbiBmb3IgdGhlIHN0cmVhbSAqLwotICAgIHN0cmVhbS0+ZHVyYXRpb24gPSBkdXJhdGlvbjsKLQotICAgIC8qIGZpbmQgdG90YWwgZHVyYXRpb24gKi8KLSAgICBpZiAodG90YWwgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fAotICAgICAgICAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSAmJiBkdXJhdGlvbiA+IHRvdGFsKSkKLSAgICAgIHRvdGFsID0gZHVyYXRpb247Ci0gIH0KLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRvdGFsKSAmJiAodG90YWwgPiAwKSkgewotICAgIC8qIG5vdyB1cGRhdGUgdGhlIGR1cmF0aW9uIGZvciB0aG9zZSBzdHJlYW1zIHdoZXJlIHdlIGhhZCBub25lICovCi0gICAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykgewotICAgICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotCi0gICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW0tPmR1cmF0aW9uKQotICAgICAgICAgIHx8IHN0cmVhbS0+ZHVyYXRpb24gPT0gMCkgewotICAgICAgICBzdHJlYW0tPmR1cmF0aW9uID0gdG90YWw7Ci0KLSAgICAgICAgR1NUX0lORk8gKCJTdHJlYW0gJXAgZHVyYXRpb24gYWNjb3JkaW5nIHRvIHRvdGFsOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBzdHJlYW0sIEdTVF9USU1FX0FSR1MgKHRvdGFsKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogYW5kIHNldCB0aGUgdG90YWwgZHVyYXRpb24gaW4gdGhlIHNlZ21lbnQuICovCi0gIEdTVF9JTkZPICgiU2V0dGluZyB0b3RhbCBkdXJhdGlvbiB0bzogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodG90YWwpKTsKLQotICBhdmktPnNlZ21lbnQuZHVyYXRpb24gPSB0b3RhbDsKLX0KLQotLyogcmV0dXJucyBGQUxTRSBpZiB0aGVyZSBhcmUgbm8gcGFkcyB0byBkZWxpdmVyIGV2ZW50IHRvLAotICogb3RoZXJ3aXNlIFRSVUUgKHdoYXRldmVyIHRoZSBvdXRjb21lIG9mIGV2ZW50IHNlbmRpbmcpLAotICogdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBldmVudC4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50IChHc3RBdmlEZW11eCAqIGF2aSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIGdpbnQgaTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzZW5kaW5nICVzIGV2ZW50IHRvICVkIHN0cmVhbXMiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBhdmktPm51bV9zdHJlYW1zKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXZpLT5udW1fc3RyZWFtczsgaSsrKSB7Ci0gICAgR3N0QXZpU3RyZWFtICpzdHJlYW0gPSAmYXZpLT5zdHJlYW1baV07Ci0KLSAgICBpZiAoc3RyZWFtLT5wYWQpIHsKLSAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotICAgIH0KLSAgfQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdmlfZGVtdXhfY2hlY2tfc2Vla2FiaWxpdHkgKEdzdEF2aURlbXV4ICogYXZpKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHNlZWthYmxlID0gRkFMU0U7Ci0gIGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoYXZpLT5zaW5rcGFkLCBxdWVyeSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzZWVraW5nIHF1ZXJ5IGZhaWxlZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCAmc3RhcnQsICZzdG9wKTsKLQotICAvKiB0cnkgaGFyZGVyIHRvIHF1ZXJ5IHVwc3RyZWFtIHNpemUgaWYgd2UgZGlkbid0IGdldCBpdCB0aGUgZmlyc3QgdGltZSAqLwotICBpZiAoc2Vla2FibGUgJiYgc3RvcCA9PSAtMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImRvaW5nIGR1cmF0aW9uIHF1ZXJ5IHRvIGZpeCB1cCB1bnNldCBzdG9wIik7Ci0gICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChhdmktPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsICZzdG9wKTsKLSAgfQotCi0gIC8qIGlmIHVwc3RyZWFtIGRvZXNuJ3Qga25vdyB0aGUgc2l6ZSwgaXQncyBsaWtlbHkgdGhhdCBpdCdzIG5vdCBzZWVrYWJsZSBpbgotICAgKiBwcmFjdGljZSBldmVuIGlmIGl0IHRlY2huaWNhbGx5IG1heSBiZSBzZWVrYWJsZSAqLwotICBpZiAoc2Vla2FibGUgJiYgKHN0YXJ0ICE9IDAgfHwgc3RvcCA8PSBzdGFydCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzZWVrYWJsZSBidXQgdW5rbm93biBzdGFydC9zdG9wIC0+IGRpc2FibGUiKTsKLSAgICBzZWVrYWJsZSA9IEZBTFNFOwotICB9Ci0KLWRvbmU6Ci0gIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAic2Vla2FibGU6ICVkICglIiBHX0dVSU5UNjRfRk9STUFUICIgLSAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIHNlZWthYmxlLCBzdGFydCwgc3RvcCk7Ci0gIGF2aS0+c2Vla2FibGUgPSBzZWVrYWJsZTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLX0KLQotLyoKLSAqIFJlYWQgQVZJIGhlYWRlcnMgd2hlbiBzdHJlYW1pbmcKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdXNoIChHc3RBdmlEZW11eCAqIGF2aSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQzMiB0YWcgPSAwOwotICBndWludDMyIGx0YWcgPSAwOwotICBndWludDMyIHNpemUgPSAwOwotICBjb25zdCBndWludDggKmRhdGE7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTCwgKnN1YiA9IE5VTEw7Ci0gIGd1aW50IG9mZnNldCA9IDQ7Ci0gIGdpbnQgaTsKLSAgR3N0VGFnTGlzdCAqdGFncyA9IE5VTEw7Ci0gIGd1aW50OCBmb3VyY2NbNF07Ci0KLSAgR1NUX0RFQlVHICgiUmVhZGluZyBhbmQgcGFyc2luZyBhdmkgaGVhZGVyczogJWQiLCBhdmktPmhlYWRlcl9zdGF0ZSk7Ci0KLSAgc3dpdGNoIChhdmktPmhlYWRlcl9zdGF0ZSkgewotICAgIGNhc2UgR1NUX0FWSV9ERU1VWF9IRUFERVJfVEFHX0xJU1Q6Ci0gICAgYWdhaW46Ci0gICAgICBpZiAoZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rIChhdmksICZ0YWcsICZzaXplKSkgewotICAgICAgICBhdmktPm9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgICBpZiAodGFnICE9IEdTVF9SSUZGX1RBR19MSVNUKQotICAgICAgICAgIGdvdG8gaGVhZGVyX25vX2xpc3Q7Ci0KLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgOCk7Ci0gICAgICAgIC8qIEZpbmQgdGhlICdoZHJsJyBMSVNUIHRhZyAqLwotICAgICAgICBHU1RfREVCVUcgKCJSZWFkaW5nICVkIGJ5dGVzIiwgc2l6ZSk7Ci0gICAgICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhdmktPmFkYXB0ZXIsIHNpemUpOwotCi0gICAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBmb3VyY2MsIDQpOwotCi0gICAgICAgIGlmIChHU1RfUkVBRF9VSU5UMzJfTEUgKGZvdXJjYykgIT0gR1NUX1JJRkZfTElTVF9oZHJsKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJJbnZhbGlkIEFWSSBoZWFkZXIgKG5vIGhkcmwgYXQgc3RhcnQpOiAlIgotICAgICAgICAgICAgICBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBtaW5kIHBhZGRpbmcgKi8KLSAgICAgICAgaWYgKHNpemUgJiAxKQotICAgICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChhdmktPmFkYXB0ZXIsIDEpOwotCi0gICAgICAgIEdTVF9ERUJVRyAoIidoZHJsJyBMSVNUIHRhZyBmb3VuZC4gUGFyc2luZyBuZXh0IGNodW5rIik7Ci0KLSAgICAgICAgZ3N0X2F2aV9kZW11eF9yb3VuZHVwX2xpc3QgKGF2aSwgJmJ1Zik7Ci0KLSAgICAgICAgLyogdGhlIGhkcmwgc3RhcnRzIHdpdGggYSAnYXZpaCcgaGVhZGVyICovCi0gICAgICAgIGlmICghZ3N0X3JpZmZfcGFyc2VfY2h1bmsgKEdTVF9FTEVNRU5UX0NBU1QgKGF2aSksIGJ1ZiwgJm9mZnNldCwgJnRhZywKLSAgICAgICAgICAgICAgICAmc3ViKSkKLSAgICAgICAgICBnb3RvIGhlYWRlcl9ub19hdmloOwotCi0gICAgICAgIGlmICh0YWcgIT0gR1NUX1JJRkZfVEFHX2F2aWgpCi0gICAgICAgICAgZ290byBoZWFkZXJfbm9fYXZpaDsKLQotICAgICAgICBpZiAoIWdzdF9hdmlfZGVtdXhfcGFyc2VfYXZpaCAoYXZpLCBzdWIsICZhdmktPmF2aWgpKQotICAgICAgICAgIGdvdG8gaGVhZGVyX3dyb25nX2F2aWg7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiQVZJIGhlYWRlciBvaywgcmVhZGluZyBlbGVtbnRzIGZyb20gaGVhZGVyIik7Ci0KLSAgICAgICAgLyogbm93LCByZWFkIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBoZWFkZXIgdW50aWwgdGhlIGVuZCAqLwotICAgICAgICB3aGlsZSAoZ3N0X3JpZmZfcGFyc2VfY2h1bmsgKEdTVF9FTEVNRU5UX0NBU1QgKGF2aSksIGJ1ZiwgJm9mZnNldCwgJnRhZywKLSAgICAgICAgICAgICAgICAmc3ViKSkgewotICAgICAgICAgIC8qIHN1YiBjYW4gYmUgTlVMTCBvbiBlbXB0eSB0YWdzICovCi0gICAgICAgICAgaWYgKCFzdWIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgICAgICBjYXNlIEdTVF9SSUZGX1RBR19MSVNUOgotICAgICAgICAgICAgICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc3ViKSA8IDQpCi0gICAgICAgICAgICAgICAgZ290byBuZXh0OwotCi0gICAgICAgICAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoc3ViLCAwLCBmb3VyY2MsIDQpOwotCi0gICAgICAgICAgICAgIHN3aXRjaCAoR1NUX1JFQURfVUlOVDMyX0xFIChmb3VyY2MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHU1RfUklGRl9MSVNUX3N0cmw6Ci0gICAgICAgICAgICAgICAgICBpZiAoIShnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSAoYXZpLCBzdWIpKSkgewotICAgICAgICAgICAgICAgICAgICBzdWIgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChhdmksIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgiZmFpbGVkIHRvIHBhcnNlIHN0cmVhbSwgaWdub3JpbmciKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBHU1RfUklGRl9MSVNUX29kbWw6Ci0gICAgICAgICAgICAgICAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX29kbWwgKGF2aSwgc3ViKTsKLSAgICAgICAgICAgICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gbGlzdCAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIGluIEFWSSBoZWFkZXIiLAotICAgICAgICAgICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoR1NUX1JFQURfVUlOVDMyX0xFIChmb3VyY2MpKSk7Ci0gICAgICAgICAgICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICBjYXNlIEdTVF9SSUZGX1RBR19KVU5ROgotICAgICAgICAgICAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0pVTks6Ci0gICAgICAgICAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdTVF9SSUZGX0lESVQ6Ci0gICAgICAgICAgICAgIGdzdF9hdmlfZGVtdXhfcGFyc2VfaWRpdCAoYXZpLCBzdWIpOwotICAgICAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICAgICAgICJVbmtub3duIHRhZyAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIGluIEFWSSBoZWFkZXIiLAotICAgICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgICAgICAgICAgLyogT25seSBnZXQgYnVmZmVyIGZvciBkZWJ1Z2dpbmcgaWYgdGhlIG1lbWR1bXAgaXMgbmVlZGVkICAqLwotICAgICAgICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQgKEdTVF9DQVRfREVGQVVMVCkgPj0gOSkgewotICAgICAgICAgICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHN1YiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKGF2aSwgIlVua25vd24gdGFnIiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChzdWIsICZtYXApOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfUklGRl9UQUdfSlVOUToKLSAgICAgICAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0pVTks6Ci0gICAgICAgICAgICBuZXh0OgotICAgICAgICAgICAgICAvKiBtb3ZlIHRvIG5leHQgY2h1bmsgKi8KLSAgICAgICAgICAgICAgaWYgKHN1YikKLSAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOwotICAgICAgICAgICAgICBzdWIgPSBOVUxMOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgR1NUX0RFQlVHICgiZWxlbWVudHMgcGFyc2VkIik7Ci0KLSAgICAgICAgLyogY2hlY2sgcGFyc2VkIHN0cmVhbXMgKi8KLSAgICAgICAgaWYgKGF2aS0+bnVtX3N0cmVhbXMgPT0gMCkgewotICAgICAgICAgIGdvdG8gbm9fc3RyZWFtczsKLSAgICAgICAgfSBlbHNlIGlmIChhdmktPm51bV9zdHJlYW1zICE9IGF2aS0+YXZpaC0+c3RyZWFtcykgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLAotICAgICAgICAgICAgICAiU3RyZWFtIGhlYWRlciBtZW50aW9uZWQgJWQgc3RyZWFtcywgYnV0ICVkIGF2YWlsYWJsZSIsCi0gICAgICAgICAgICAgIGF2aS0+YXZpaC0+c3RyZWFtcywgYXZpLT5udW1fc3RyZWFtcyk7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVHICgiR2V0IGp1bmsgYW5kIGluZm8gbmV4dCIpOwotICAgICAgICBhdmktPmhlYWRlcl9zdGF0ZSA9IEdTVF9BVklfREVNVVhfSEVBREVSX0lORk87Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBOZWVkIG1vcmUgZGF0YSAqLwotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfQotICAgICAgLyogZmFsbC10aG91Z2ggKi8KLSAgICBjYXNlIEdTVF9BVklfREVNVVhfSEVBREVSX0lORk86Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJza2lwcGluZyBqdW5rIGJldHdlZW4gaGVhZGVyIGFuZCBkYXRhIC4uLiIpOwotICAgICAgd2hpbGUgKFRSVUUpIHsKLSAgICAgICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYXZpLT5hZGFwdGVyKSA8IDEyKQotICAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAgICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChhdmktPmFkYXB0ZXIsIDEyKTsKLSAgICAgICAgdGFnID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgICAgICAgc2l6ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDQpOwotICAgICAgICBsdGFnID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgOCk7Ci0gICAgICAgIGdzdF9hZGFwdGVyX3VubWFwIChhdmktPmFkYXB0ZXIpOwotCi0gICAgICAgIGlmICh0YWcgPT0gR1NUX1JJRkZfVEFHX0xJU1QpIHsKLSAgICAgICAgICBzd2l0Y2ggKGx0YWcpIHsKLSAgICAgICAgICAgIGNhc2UgR1NUX1JJRkZfTElTVF9tb3ZpOgotICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYXZpLT5hZGFwdGVyLCAxMik7Ci0gICAgICAgICAgICAgIGlmICghYXZpLT5maXJzdF9tb3ZpX29mZnNldCkKLSAgICAgICAgICAgICAgICBhdmktPmZpcnN0X21vdmlfb2Zmc2V0ID0gYXZpLT5vZmZzZXQ7Ci0gICAgICAgICAgICAgIGF2aS0+b2Zmc2V0ICs9IDEyOwotICAgICAgICAgICAgICBhdmktPmlkeDFfb2Zmc2V0ID0gYXZpLT5vZmZzZXQgKyBzaXplIC0gNDsKLSAgICAgICAgICAgICAgZ290byBza2lwcGluZ19kb25lOwotICAgICAgICAgICAgY2FzZSBHU1RfUklGRl9MSVNUX0lORk86Ci0gICAgICAgICAgICAgIEdTVF9ERUJVRyAoIkZvdW5kIElORk8gY2h1bmsiKTsKLSAgICAgICAgICAgICAgaWYgKGdzdF9hdmlfZGVtdXhfcGVla19jaHVuayAoYXZpLCAmdGFnLCAmc2l6ZSkpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUcgKCJnb3Qgc2l6ZSAlZCIsIHNpemUpOwotICAgICAgICAgICAgICAgIGF2aS0+b2Zmc2V0ICs9IDEyOwotICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChhdmktPmFkYXB0ZXIsIDEyKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+IDQpIHsKLSAgICAgICAgICAgICAgICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhdmktPmFkYXB0ZXIsIHNpemUgLSA0KTsKLSAgICAgICAgICAgICAgICAgIC8qIG1pbmQgcGFkZGluZyAqLwotICAgICAgICAgICAgICAgICAgaWYgKHNpemUgJiAxKQotICAgICAgICAgICAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYXZpLT5hZGFwdGVyLCAxKTsKLSAgICAgICAgICAgICAgICAgIGdzdF9yaWZmX3BhcnNlX2luZm8gKEdTVF9FTEVNRU5UX0NBU1QgKGF2aSksIGJ1ZiwgJnRhZ3MpOwotICAgICAgICAgICAgICAgICAgaWYgKHRhZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2aS0+Z2xvYmFsdGFncykgewotICAgICAgICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKGF2aS0+Z2xvYmFsdGFncywgdGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgICAgICAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIGF2aS0+Z2xvYmFsdGFncyA9IHRhZ3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHRhZ3MgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAgICAgICAgICAgICAgICAgYXZpLT5vZmZzZXQgKz0gR1NUX1JPVU5EX1VQXzIgKHNpemUpIC0gNDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHICgic2tpcHBpbmcgSU5GTyBMSVNUIHByZWZpeCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBOZWVkIG1vcmUgZGF0YSAqLwotICAgICAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGlmIChnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmsgKGF2aSwgJnRhZywgJnNpemUpIHx8IHNpemUgPT0gMCkgewotICAgICAgICAgICAgICAgIC8qIGFjY2VwdCAwIHNpemUgYnVmZmVyIGhlcmUgKi8KLSAgICAgICAgICAgICAgICBhdmktPmFib3J0X2J1ZmZlcmluZyA9IEZBTFNFOwotICAgICAgICAgICAgICAgIGF2aS0+b2Zmc2V0ICs9IDggKyBHU1RfUk9VTkRfVVBfMiAoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgOCArIEdTVF9ST1VORF9VUF8yIChzaXplKSk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogTmVlZCBtb3JlIGRhdGEgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmsgKGF2aSwgJnRhZywgJnNpemUpIHx8IHNpemUgPT0gMCkgewotICAgICAgICAgICAgLyogYWNjZXB0IDAgc2l6ZSBidWZmZXIgaGVyZSAqLwotICAgICAgICAgICAgYXZpLT5hYm9ydF9idWZmZXJpbmcgPSBGQUxTRTsKLSAgICAgICAgICAgIGF2aS0+b2Zmc2V0ICs9IDggKyBHU1RfUk9VTkRfVVBfMiAoc2l6ZSk7Ci0gICAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYXZpLT5hZGFwdGVyLCA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogTmVlZCBtb3JlIGRhdGEgKi8KLSAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklORyAoInVuaGFuZGxlZCBoZWFkZXIgc3RhdGU6ICVkIiwgYXZpLT5oZWFkZXJfc3RhdGUpOwotICAgICAgYnJlYWs7Ci0gIH0KLXNraXBwaW5nX2RvbmU6Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAic2tpcHBpbmcgZG9uZSAuLi4gKHN0cmVhbXM9JXUsIHN0cmVhbVswXS5pbmRleGVzPSVwKSIsCi0gICAgICBhdmktPm51bV9zdHJlYW1zLCBhdmktPnN0cmVhbVswXS5pbmRleGVzKTsKLQotICBHU1RfREVCVUcgKCJGb3VuZCBtb3ZpIGNodW5rLiBTdGFydGluZyB0byBzdHJlYW0gZGF0YSIpOwotICBhdmktPnN0YXRlID0gR1NUX0FWSV9ERU1VWF9NT1ZJOwotCi0gIC8qIG5vIGluZGV4ZXMgaW4gcHVzaCBtb2RlLCBidXQgaXQgc3RpbGwgc2V0cyBzb21lIHZhcmlhYmxlcyAqLwotICBnc3RfYXZpX2RlbXV4X2NhbGN1bGF0ZV9kdXJhdGlvbnNfZnJvbV9pbmRleCAoYXZpKTsKLQotICBnc3RfYXZpX2RlbXV4X2V4cG9zZV9zdHJlYW1zIChhdmksIFRSVUUpOwotCi0gIC8qIHByZXBhcmUgYWxsIHN0cmVhbXMgZm9yIGluZGV4IDAgKi8KLSAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykKLSAgICBhdmktPnN0cmVhbVtpXS5jdXJyZW50X2VudHJ5ID0gMDsKLQotICAvKiBjcmVhdGUgaW5pdGlhbCBORVdTRUdNRU5UIGV2ZW50ICovCi0gIGlmIChhdmktPnNlZ19ldmVudCkKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGF2aS0+c2VnX2V2ZW50KTsKLSAgYXZpLT5zZWdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZhdmktPnNlZ21lbnQpOwotICBpZiAoYXZpLT5zZWdtZW50X3NlcW51bSkKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoYXZpLT5zZWdfZXZlbnQsIGF2aS0+c2VnbWVudF9zZXFudW0pOwotCi0gIGdzdF9hdmlfZGVtdXhfY2hlY2tfc2Vla2FiaWxpdHkgKGF2aSk7Ci0KLSAgLyogYXQgdGhpcyBwb2ludCB3ZSBrbm93IGFsbCB0aGUgc3RyZWFtcyBhbmQgd2UgY2FuIHNpZ25hbCB0aGUgbm8gbW9yZQotICAgKiBwYWRzIHNpZ25hbCAqLwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzaWduYWxpbmcgbm8gbW9yZSBwYWRzIik7Ci0gIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoYXZpKSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fc3RyZWFtczoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJObyBzdHJlYW1zIGZvdW5kIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotaGVhZGVyX25vX2xpc3Q6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiSW52YWxpZCBBVkkgaGVhZGVyIChubyBMSVNUIGF0IHN0YXJ0KTogJSIKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfRk9STUFULCBHU1RfRk9VUkNDX0FSR1MgKHRhZykpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWhlYWRlcl9ub19hdmloOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAoIkludmFsaWQgQVZJIGhlYWRlciAobm8gYXZpaCBhdCBzdGFydCk6ICUiCi0gICAgICAgICAgICBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKSk7Ci0gICAgaWYgKHN1YikKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotaGVhZGVyX3dyb25nX2F2aWg6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9hZGRfZGF0ZV90YWcgKEdzdEF2aURlbXV4ICogYXZpLCBnaW50IHksIGdpbnQgbSwgZ2ludCBkLAotICAgIGdpbnQgaCwgZ2ludCBtaW4sIGdpbnQgcykKLXsKLSAgR0RhdGUgKmRhdGU7Ci0gIEdzdERhdGVUaW1lICpkdDsKLQotICBkYXRlID0gZ19kYXRlX25ld19kbXkgKGQsIG0sIHkpOwotICBpZiAoIWdfZGF0ZV92YWxpZCAoZGF0ZSkpIHsKLSAgICAvKiBib2d1cyBkYXRlICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJSZWZ1c2luZyB0byBhZGQgaW52YWxpZCBkYXRlICVkLSVkLSVkIiwgeSwgbSwgZCk7Ci0gICAgZ19kYXRlX2ZyZWUgKGRhdGUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGR0ID0gZ3N0X2RhdGVfdGltZV9uZXdfbG9jYWxfdGltZSAoeSwgbSwgZCwgaCwgbWluLCBzKTsKLQotICBpZiAoYXZpLT5nbG9iYWx0YWdzID09IE5VTEwpCi0gICAgYXZpLT5nbG9iYWx0YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICBnc3RfdGFnX2xpc3RfYWRkIChhdmktPmdsb2JhbHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19EQVRFLCBkYXRlLAotICAgICAgTlVMTCk7Ci0gIGdfZGF0ZV9mcmVlIChkYXRlKTsKLSAgaWYgKGR0KSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAoYXZpLT5nbG9iYWx0YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfREFURV9USU1FLAotICAgICAgICBkdCwgTlVMTCk7Ci0gICAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXRfbnVtc19vbmx5IChHc3RBdmlEZW11eCAqIGF2aSwgZ2NoYXIgKiBkYXRhKQotewotICBnaW50IHksIG0sIGQ7Ci0gIGdpbnQgaHIgPSAwLCBtaW4gPSAwLCBzZWMgPSAwOwotICBnaW50IHJldDsKLQotICBHU1RfREVCVUcgKCJkYXRhIDogJyVzJyIsIGRhdGEpOwotCi0gIHJldCA9IHNzY2FuZiAoZGF0YSwgIiVkOiVkOiVkICVkOiVkOiVkIiwgJnksICZtLCAmZCwgJmhyLCAmbWluLCAmc2VjKTsKLSAgaWYgKHJldCA8IDMpIHsKLSAgICAvKiBBdHRlbXB0IFlZWVkvTU0vREQvIEhIOk1NIHZhcmlhbnQgKGZvdW5kIGluIENBU0lPIGNhbWVyYXMpICovCi0gICAgcmV0ID0gc3NjYW5mIChkYXRhLCAiJTA0ZC8lMDJkLyUwMmQvICVkOiVkIiwgJnksICZtLCAmZCwgJmhyLCAmbWluKTsKLSAgICBpZiAocmV0IDwgMykgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJGYWlsZWQgdG8gcGFyc2UgSURJVCB0YWciKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLSAgZ3N0X2F2aV9kZW11eF9hZGRfZGF0ZV90YWcgKGF2aSwgeSwgbSwgZCwgaHIsIG1pbiwgc2VjKTsKLX0KLQotc3RhdGljIGdpbnQKLWdldF9tb250aF9udW0gKGdjaGFyICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgaWYgKGdfYXNjaWlfc3RybmNhc2VjbXAgKGRhdGEsICJqYW4iLCAzKSA9PSAwKSB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJuY2FzZWNtcCAoZGF0YSwgImZlYiIsIDMpID09IDApIHsKLSAgICByZXR1cm4gMjsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cm5jYXNlY21wIChkYXRhLCAibWFyIiwgMykgPT0gMCkgewotICAgIHJldHVybiAzOwotICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RybmNhc2VjbXAgKGRhdGEsICJhcHIiLCAzKSA9PSAwKSB7Ci0gICAgcmV0dXJuIDQ7Ci0gIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJuY2FzZWNtcCAoZGF0YSwgIm1heSIsIDMpID09IDApIHsKLSAgICByZXR1cm4gNTsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cm5jYXNlY21wIChkYXRhLCAianVuIiwgMykgPT0gMCkgewotICAgIHJldHVybiA2OwotICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RybmNhc2VjbXAgKGRhdGEsICJqdWwiLCAzKSA9PSAwKSB7Ci0gICAgcmV0dXJuIDc7Ci0gIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJuY2FzZWNtcCAoZGF0YSwgImF1ZyIsIDMpID09IDApIHsKLSAgICByZXR1cm4gODsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cm5jYXNlY21wIChkYXRhLCAic2VwIiwgMykgPT0gMCkgewotICAgIHJldHVybiA5OwotICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RybmNhc2VjbXAgKGRhdGEsICJvY3QiLCAzKSA9PSAwKSB7Ci0gICAgcmV0dXJuIDEwOwotICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RybmNhc2VjbXAgKGRhdGEsICJub3YiLCAzKSA9PSAwKSB7Ci0gICAgcmV0dXJuIDExOwotICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RybmNhc2VjbXAgKGRhdGEsICJkZWMiLCAzKSA9PSAwKSB7Ci0gICAgcmV0dXJuIDEyOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXRfdGV4dCAoR3N0QXZpRGVtdXggKiBhdmksIGdjaGFyICogZGF0YSkKLXsKLSAgZ2ludCB5ZWFyLCBtb250aCwgZGF5OwotICBnaW50IGhvdXIsIG1pbiwgc2VjOwotICBnaW50IHJldDsKLSAgZ2NoYXIgd2Vla2RheVs0XTsKLSAgZ2NoYXIgbW9udGhzdHJbNF07Ci0KLSAgcmV0ID0gc3NjYW5mIChkYXRhLCAiJTNzICUzcyAlZCAlZDolZDolZCAlZCIsIHdlZWtkYXksIG1vbnRoc3RyLCAmZGF5LCAmaG91ciwKLSAgICAgICZtaW4sICZzZWMsICZ5ZWFyKTsKLSAgaWYgKHJldCAhPSA3KSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksICJGYWlsZWQgdG8gcGFyc2UgSURJVCB0YWciKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9udGggPSBnZXRfbW9udGhfbnVtIChtb250aHN0ciwgc3RybGVuIChtb250aHN0cikpOwotICBnc3RfYXZpX2RlbXV4X2FkZF9kYXRlX3RhZyAoYXZpLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW4sIHNlYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXQgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnY2hhciAqcHRyOwotICBnc2l6ZSBsZWZ0OwotICBnY2hhciAqc2FmZWRhdGEgPSBOVUxMOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIC8qCi0gICAqIEFjY29yZGluZyB0bzoKLSAgICogaHR0cDovL3d3dy5lZGVuLWZvdW5kYXRpb24ub3JnL3Byb2R1Y3RzL2NvZGUvZmlsbV9kYXRlX3N0YW1wL2luZGV4Lmh0bWwKLSAgICoKLSAgICogVGhpcyB0YWcgY291bGQgYmUgaW4gb25lIG9mIHRoZSBiZWxvdyBmb3JtYXRzCi0gICAqIDIwMDU6MDg6MTcgMTE6NDI6NDMKLSAgICogVEhVIE9DVCAyNiAxNjo0NjowNCAyMDA2Ci0gICAqIE1vbiBNYXIgIDMgMDk6NDQ6NTYgMjAwOAotICAgKgotICAgKiBGSVhNRTogT3VyIGRhdGUgdGFnIGRvZXNuJ3QgaW5jbHVkZSBob3VycwotICAgKi8KLQotICAvKiBza2lwIGV2ZW50dWFsIGluaXRpYWwgd2hpdGVzcGFjZSAqLwotICBwdHIgPSAoZ2NoYXIgKikgbWFwLmRhdGE7Ci0gIGxlZnQgPSBtYXAuc2l6ZTsKLQotICB3aGlsZSAobGVmdCA+IDAgJiYgZ19hc2NpaV9pc3NwYWNlIChwdHJbMF0pKSB7Ci0gICAgcHRyKys7Ci0gICAgbGVmdC0tOwotICB9Ci0KLSAgaWYgKGxlZnQgPT0gMCkgewotICAgIGdvdG8gbm9uX3BhcnNhYmxlOwotICB9Ci0KLSAgLyogbWFrZSBhIHNhZmUgY29weSB0byBhZGQgYSBcMCB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KLSAgc2FmZWRhdGEgPSBnX3N0cm5kdXAgKHB0ciwgbGVmdCk7Ci0KLSAgLyogdGVzdCBpZiB0aGUgZmlyc3QgY2hhciBpcyBhIGFscGhhIG9yIGEgbnVtYmVyICovCi0gIGlmIChnX2FzY2lpX2lzZGlnaXQgKHB0clswXSkpIHsKLSAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXRfbnVtc19vbmx5IChhdmksIHNhZmVkYXRhKTsKLSAgICBnX2ZyZWUgKHNhZmVkYXRhKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIHJldHVybjsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX2lzYWxwaGEgKHB0clswXSkpIHsKLSAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXRfdGV4dCAoYXZpLCBzYWZlZGF0YSk7Ci0gICAgZ19mcmVlIChzYWZlZGF0YSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnX2ZyZWUgKHNhZmVkYXRhKTsKLQotbm9uX3BhcnNhYmxlOgotICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIklESVQgdGFnIGhhcyBubyBwYXJzYWJsZSBpbmZvIik7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYXJzZV90YWdfdmFsdWUgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RUYWdMaXN0ICogdGFnbGlzdCwgY29uc3QgZ2NoYXIgKiB0eXBlLAotICAgIGd1aW50OCAqIHB0ciwgZ3VpbnQgdHNpemUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqZW52X3ZhcnNbXSA9IHsgIkdTVF9BVklfVEFHX0VOQ09ESU5HIiwKLSAgICAiR1NUX1JJRkZfVEFHX0VOQ09ESU5HIiwgIkdTVF9UQUdfRU5DT0RJTkciLCBOVUxMCi0gIH07Ci0gIEdUeXBlIHRhZ190eXBlOwotICBnY2hhciAqdmFsOwotCi0gIHRhZ190eXBlID0gZ3N0X3RhZ19nZXRfdHlwZSAodHlwZSk7Ci0gIHZhbCA9IGdzdF90YWdfZnJlZWZvcm1fc3RyaW5nX3RvX3V0ZjggKChnY2hhciAqKSBwdHIsIHRzaXplLCBlbnZfdmFycyk7Ci0KLSAgaWYgKHZhbCAhPSBOVUxMKSB7Ci0gICAgaWYgKHRhZ190eXBlID09IEdfVFlQRV9TVFJJTkcpIHsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCB0eXBlLCB2YWwsIE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHVmFsdWUgdGFnX3ZhbCA9IHsgMCwgfTsKLQotICAgICAgZ192YWx1ZV9pbml0ICgmdGFnX3ZhbCwgdGFnX3R5cGUpOwotICAgICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnRhZ192YWwsIHZhbCkpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIHR5cGUsICZ0YWdfdmFsKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiY291bGQgbm90IGRlc2VyaWFsaXplICclcycgaW50byBhICIKLSAgICAgICAgICAgICJ0YWcgJXMgb2YgdHlwZSAlcyIsIHZhbCwgdHlwZSwgZ190eXBlX25hbWUgKHRhZ190eXBlKSk7Ci0gICAgICB9Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdGFnX3ZhbCk7Ci0gICAgfQotICAgIGdfZnJlZSAodmFsKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgImNvdWxkIG5vdCBleHRyYWN0ICVzIHRhZyIsIHR5cGUpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmQgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDMyIHRhZzsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBpZiAobWFwLnNpemUgPiA0KSB7Ci0gICAgZ3VpbnQ4ICpwdHIgPSBtYXAuZGF0YTsKLSAgICBnc2l6ZSBsZWZ0ID0gbWFwLnNpemU7Ci0KLSAgICAvKiBwYXJzaW5nIGJhc2VkIG9uCi0gICAgICogaHR0cDovL3d3dy5lZGVuLWZvdW5kYXRpb24ub3JnL3Byb2R1Y3RzL2NvZGUvZmlsbV9kYXRlX3N0YW1wL2luZGV4Lmh0bWwKLSAgICAgKi8KLSAgICB0YWcgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKHB0cik7Ci0gICAgaWYgKCh0YWcgPT0gR1NUX01BS0VfRk9VUkNDICgnQScsICdWJywgJ0knLCAnRicpKSAmJiAobWFwLnNpemUgPiA5OCkpIHsKLSAgICAgIGdzaXplIHN1Yl9zaXplOwotCi0gICAgICBwdHIgKz0gOTg7Ci0gICAgICBsZWZ0IC09IDk4OwotICAgICAgaWYgKCFtZW1jbXAgKHB0ciwgIkZVSklGSUxNIiwgOCkpIHsKLSAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChhdmksICJmdWppZmltIHRhZyIsIHB0ciwgNDgpOwotCi0gICAgICAgIHB0ciArPSAxMDsKLSAgICAgICAgbGVmdCAtPSAxMDsKLSAgICAgICAgc3ViX3NpemUgPSAwOwotICAgICAgICB3aGlsZSAocHRyW3N1Yl9zaXplXSAmJiBzdWJfc2l6ZSA8IGxlZnQpCi0gICAgICAgICAgc3ViX3NpemUrKzsKLQotICAgICAgICBpZiAoYXZpLT5nbG9iYWx0YWdzID09IE5VTEwpCi0gICAgICAgICAgYXZpLT5nbG9iYWx0YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChhdmktPmdsb2JhbHRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICAgICAgR1NUX1RBR19ERVZJQ0VfTUFOVUZBQ1RVUkVSLCAiRlVKSUZJTE0iLCBOVUxMKTsKLSAgICAgICAgcGFyc2VfdGFnX3ZhbHVlIChhdmksIGF2aS0+Z2xvYmFsdGFncywgR1NUX1RBR19ERVZJQ0VfTU9ERUwsIHB0ciwKLSAgICAgICAgICAgIHN1Yl9zaXplKTsKLQotICAgICAgICB3aGlsZSAocHRyW3N1Yl9zaXplXSA9PSAnXDAnICYmIHN1Yl9zaXplIDwgbGVmdCkKLSAgICAgICAgICBzdWJfc2l6ZSsrOwotCi0gICAgICAgIHB0ciArPSBzdWJfc2l6ZTsKLSAgICAgICAgbGVmdCAtPSBzdWJfc2l6ZTsKLSAgICAgICAgc3ViX3NpemUgPSAwOwotICAgICAgICB3aGlsZSAocHRyW3N1Yl9zaXplXSAmJiBzdWJfc2l6ZSA8IGxlZnQpCi0gICAgICAgICAgc3ViX3NpemUrKzsKLSAgICAgICAgaWYgKHB0cls0XSA9PSAnOicpCi0gICAgICAgICAgcHRyWzRdID0gJy0nOwotICAgICAgICBpZiAocHRyWzddID09ICc6JykKLSAgICAgICAgICBwdHJbN10gPSAnLSc7Ci0KLSAgICAgICAgcGFyc2VfdGFnX3ZhbHVlIChhdmksIGF2aS0+Z2xvYmFsdGFncywgR1NUX1RBR19EQVRFX1RJTUUsIHB0ciwKLSAgICAgICAgICAgIHN1Yl9zaXplKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLX0KLQotLyoKLSAqIGdzdF9hdmlfZGVtdXhfcGFyc2VfbmNkdDoKLSAqIEBlbGVtZW50OiBjYWxsZXIgZWxlbWVudCAodXNlZCBmb3IgZGVidWdnaW5nL2Vycm9yKS4KLSAqIEBidWY6IGlucHV0IGRhdGEgdG8gYmUgdXNlZCBmb3IgcGFyc2luZywgc3RyaXBwZWQgZnJvbSBoZWFkZXIuCi0gKiBAdGFnbGlzdDogYSBwb2ludGVyIHRvIGEgdGFnbGlzdCAocmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbikKLSAqICAgICAgICAgICBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgc3RyZWFtLiBNYXkgYmUKLSAqICAgICAgICAgICBOVUxMIGlmIG5vIHN1cHBvcnRlZCB0YWdzIHdlcmUgZm91bmQuCi0gKgotICogUGFyc2VzIE5pa29uIG1ldGFkYXRhIGZyb20gaW5wdXQgZGF0YS4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9hdmlfZGVtdXhfcGFyc2VfbmNkdCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdEJ1ZmZlciAqIGJ1ZiwKLSAgICBHc3RUYWdMaXN0ICoqIF90YWdsaXN0KQotewotICBHc3RNYXBJbmZvIGluZm87Ci0gIGd1aW50OCAqcHRyOwotICBnc2l6ZSBsZWZ0OwotICBndWludCB0c2l6ZTsKLSAgZ3VpbnQzMiB0YWc7Ci0gIGNvbnN0IGdjaGFyICp0eXBlOwotICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKF90YWdsaXN0ICE9IE5VTEwpOwotCi0gIGlmICghYnVmKSB7Ci0gICAgKl90YWdsaXN0ID0gTlVMTDsKLSAgICByZXR1cm47Ci0gIH0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRCk7Ci0KLSAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgcHRyID0gaW5mby5kYXRhOwotICBsZWZ0ID0gaW5mby5zaXplOwotCi0gIHdoaWxlIChsZWZ0ID4gOCkgewotICAgIHRhZyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAocHRyKTsKLSAgICB0c2l6ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAocHRyICsgNCk7Ci0KLSAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKGF2aSwgInRhZyBjaHVuayIsIHB0ciwgTUlOICh0c2l6ZSArIDgsIGxlZnQpKTsKLQotICAgIGxlZnQgLT0gODsKLSAgICBwdHIgKz0gODsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInRhZyAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiLCBzaXplICV1IiwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpLCB0c2l6ZSk7Ci0KLSAgICBpZiAodHNpemUgPiBsZWZ0KSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAiVGFnc2l6ZSAlZCBpcyBsYXJnZXIgdGhhbiBhdmFpbGFibGUgZGF0YSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICB0c2l6ZSwgbGVmdCk7Ci0gICAgICB0c2l6ZSA9IGxlZnQ7Ci0gICAgfQotCi0gICAgLyogZmluZCBvdXQgdGhlIHR5cGUgb2YgbWV0YWRhdGEgKi8KLSAgICBzd2l0Y2ggKHRhZykgewotICAgICAgY2FzZSBHU1RfUklGRl9MSVNUX25jdGc6Ci0gICAgICAgIHdoaWxlICh0c2l6ZSA+IDQpIHsKLSAgICAgICAgICBndWludDE2IHN1Yl90YWcgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKHB0cik7Ci0gICAgICAgICAgZ3VpbnQxNiBzdWJfc2l6ZSA9IEdTVF9SRUFEX1VJTlQxNl9MRSAocHRyICsgMik7Ci0KLSAgICAgICAgICB0c2l6ZSAtPSA0OwotICAgICAgICAgIHB0ciArPSA0OwotICAgICAgICAgIGxlZnQgLT0gNDsKLQotICAgICAgICAgIGlmIChzdWJfc2l6ZSA+IHRzaXplKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzdWItdGFnICV1LCBzaXplICV1Iiwgc3ViX3RhZywgc3ViX3NpemUpOwotICAgICAgICAgIC8qIGh0dHA6Ly93d3cuc25vLnBoeS5xdWVlbnN1LmNhL35waGlsL2V4aWZ0b29sL1RhZ05hbWVzL05pa29uLmh0bWwjTkNURwotICAgICAgICAgICAqIGZvciBzb21lIHJlYXNvbiB0aGUgc3ViX3RhZyBoYXMgYSArMiBvZmZzZXQKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBzd2l0Y2ggKHN1Yl90YWcpIHsKLSAgICAgICAgICAgIGNhc2UgMHgwMzogICAgICAgICAvKiBNYWtlICovCi0gICAgICAgICAgICAgIHR5cGUgPSBHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDA0OiAgICAgICAgIC8qIE1vZGVsICovCi0gICAgICAgICAgICAgIHR5cGUgPSBHU1RfVEFHX0RFVklDRV9NT0RFTDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIC8qIFRPRE86IDB4MDU6IGlzIHNvZnR3YXJlIHZlcnNpb24sIGxpa2UgVjEuMCAqLwotICAgICAgICAgICAgY2FzZSAweDA2OiAgICAgICAgIC8qIFNvZnR3YXJlICovCi0gICAgICAgICAgICAgIHR5cGUgPSBHU1RfVEFHX0VOQ09ERVI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDEzOiAgICAgICAgIC8qIENyZWF0aW9uRGF0ZSAqLwotICAgICAgICAgICAgICB0eXBlID0gR1NUX1RBR19EQVRFX1RJTUU7Ci0gICAgICAgICAgICAgIGlmIChsZWZ0ID4gNykgewotICAgICAgICAgICAgICAgIGlmIChwdHJbNF0gPT0gJzonKQotICAgICAgICAgICAgICAgICAgcHRyWzRdID0gJy0nOwotICAgICAgICAgICAgICAgIGlmIChwdHJbN10gPT0gJzonKQotICAgICAgICAgICAgICAgICAgcHRyWzddID0gJy0nOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgdHlwZSA9IE5VTEw7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodHlwZSAhPSBOVUxMICYmIHB0clswXSAhPSAnXDAnKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJtYXBwZWQgdGFnICV1IHRvIHRhZyAlcyIsIHN1Yl90YWcsIHR5cGUpOwotCi0gICAgICAgICAgICBwYXJzZV90YWdfdmFsdWUgKGF2aSwgdGFnbGlzdCwgdHlwZSwgcHRyLCBzdWJfc2l6ZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcHRyICs9IHN1Yl9zaXplOwotICAgICAgICAgIHRzaXplIC09IHN1Yl9zaXplOwotICAgICAgICAgIGxlZnQgLT0gc3ViX3NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0eXBlID0gTlVMTDsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAiVW5rbm93biBuY2R0IChtZXRhZGF0YSkgdGFnIGVudHJ5ICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChhdmksICJVbmtub3duIG5jZHQiLCBwdHIsIHRzaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKHRzaXplICYgMSkgewotICAgICAgdHNpemUrKzsKLSAgICAgIGlmICh0c2l6ZSA+IGxlZnQpCi0gICAgICAgIHRzaXplID0gbGVmdDsKLSAgICB9Ci0KLSAgICBwdHIgKz0gdHNpemU7Ci0gICAgbGVmdCAtPSB0c2l6ZTsKLSAgfQotCi0gIGlmICghZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdsaXN0KSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAiZXh0cmFjdGVkIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdsaXN0KTsKLSAgICAqX3RhZ2xpc3QgPSB0YWdsaXN0OwotICB9IGVsc2UgewotICAgICpfdGFnbGlzdCA9IE5VTEw7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdsaXN0KTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbmZvKTsKLQotICByZXR1cm47Ci19Ci0KLS8qCi0gKiBSZWFkIGZ1bGwgQVZJIGhlYWRlcnMuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX2RlbXV4X3N0cmVhbV9oZWFkZXJfcHVsbCAoR3N0QXZpRGVtdXggKiBhdmkpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RCdWZmZXIgKmJ1ZiwgKnN1YiA9IE5VTEw7Ci0gIGd1aW50MzIgdGFnOwotICBndWludCBvZmZzZXQgPSA0OwotICBHc3RFbGVtZW50ICplbGVtZW50ID0gR1NUX0VMRU1FTlRfQ0FTVCAoYXZpKTsKLSAgR3N0Q2xvY2tUaW1lIHN0YW1wOwotICBHc3RUYWdMaXN0ICp0YWdzID0gTlVMTDsKLSAgZ3VpbnQ4IGZvdXJjY1s0XTsKLQotICBzdGFtcCA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0KLSAgLyogdGhlIGhlYWRlciBjb25zaXN0cyBvZiBhICdoZHJsJyBMSVNUIHRhZyAqLwotICByZXMgPSBnc3RfcmlmZl9yZWFkX2NodW5rIChlbGVtZW50LCBhdmktPnNpbmtwYWQsICZhdmktPm9mZnNldCwgJnRhZywgJmJ1Zik7Ci0gIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBwdWxsX3JhbmdlX2ZhaWxlZDsKLSAgZWxzZSBpZiAodGFnICE9IEdTVF9SSUZGX1RBR19MSVNUKQotICAgIGdvdG8gbm9fbGlzdDsKLSAgZWxzZSBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSA8IDQpCi0gICAgZ290byBub19oZWFkZXI7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAicGFyc2luZyBoZWFkZXJzIik7Ci0KLSAgLyogRmluZCB0aGUgJ2hkcmwnIExJU1QgdGFnICovCi0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBmb3VyY2MsIDQpOwotICB3aGlsZSAoR1NUX1JFQURfVUlOVDMyX0xFIChmb3VyY2MpICE9IEdTVF9SSUZGX0xJU1RfaGRybCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChhdmksICJidWZmZXIgY29udGFpbnMgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoR1NUX1JFQURfVUlOVDMyX0xFIChmb3VyY2MpKSk7Ci0KLSAgICAvKiBFYXQgdXAgKi8KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgLyogcmVhZCBuZXcgY2h1bmsgKi8KLSAgICByZXMgPSBnc3RfcmlmZl9yZWFkX2NodW5rIChlbGVtZW50LCBhdmktPnNpbmtwYWQsICZhdmktPm9mZnNldCwgJnRhZywgJmJ1Zik7Ci0gICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgIGdvdG8gcHVsbF9yYW5nZV9mYWlsZWQ7Ci0gICAgZWxzZSBpZiAodGFnICE9IEdTVF9SSUZGX1RBR19MSVNUKQotICAgICAgZ290byBub19saXN0OwotICAgIGVsc2UgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPCA0KQotICAgICAgZ290byBub19oZWFkZXI7Ci0gICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWYsIDAsIGZvdXJjYywgNCk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJoZHJsIExJU1QgdGFnIGZvdW5kIik7Ci0KLSAgZ3N0X2F2aV9kZW11eF9yb3VuZHVwX2xpc3QgKGF2aSwgJmJ1Zik7Ci0KLSAgLyogdGhlIGhkcmwgc3RhcnRzIHdpdGggYSAnYXZpaCcgaGVhZGVyICovCi0gIGlmICghZ3N0X3JpZmZfcGFyc2VfY2h1bmsgKGVsZW1lbnQsIGJ1ZiwgJm9mZnNldCwgJnRhZywgJnN1YikpCi0gICAgZ290byBub19hdmloOwotICBlbHNlIGlmICh0YWcgIT0gR1NUX1JJRkZfVEFHX2F2aWgpCi0gICAgZ290byBub19hdmloOwotICBlbHNlIGlmICghZ3N0X2F2aV9kZW11eF9wYXJzZV9hdmloIChhdmksIHN1YiwgJmF2aS0+YXZpaCkpCi0gICAgZ290byBpbnZhbGlkX2F2aWg7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiQVZJIGhlYWRlciBvaywgcmVhZGluZyBlbGVtZW50cyBmcm9tIGhlYWRlciIpOwotCi0gIC8qIG5vdywgcmVhZCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgaGVhZGVyIHVudGlsIHRoZSBlbmQgKi8KLSAgd2hpbGUgKGdzdF9yaWZmX3BhcnNlX2NodW5rIChlbGVtZW50LCBidWYsICZvZmZzZXQsICZ0YWcsICZzdWIpKSB7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICAvKiBzdWIgY2FuIGJlIE5VTEwgb24gZW1wdHkgdGFncyAqLwotICAgIGlmICghc3ViKQotICAgICAgY29udGludWU7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoc3ViLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gICAgc3dpdGNoICh0YWcpIHsKLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0xJU1Q6Ci0gICAgICAgIGlmIChtYXAuc2l6ZSA8IDQpCi0gICAgICAgICAgZ290byBuZXh0OwotCi0gICAgICAgIHN3aXRjaCAoR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSkpIHsKLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX0xJU1Rfc3RybDoKLSAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHN1YiwgJm1hcCk7Ci0gICAgICAgICAgICBpZiAoIShnc3RfYXZpX2RlbXV4X3BhcnNlX3N0cmVhbSAoYXZpLCBzdWIpKSkgewotICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChhdmksIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgICAgICAgICAgICgiZmFpbGVkIHRvIHBhcnNlIHN0cmVhbSwgaWdub3JpbmciKSk7Ci0gICAgICAgICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdWIgPSBOVUxMOwotICAgICAgICAgICAgZ290byBuZXh0OwotICAgICAgICAgIGNhc2UgR1NUX1JJRkZfTElTVF9vZG1sOgotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoc3ViLCAmbWFwKTsKLSAgICAgICAgICAgIGdzdF9hdmlfZGVtdXhfcGFyc2Vfb2RtbCAoYXZpLCBzdWIpOwotICAgICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1JJRkZfTElTVF9JTkZPOgotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoc3ViLCAmbWFwKTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfcmVzaXplIChzdWIsIDQsIC0xKTsKLSAgICAgICAgICAgIGdzdF9yaWZmX3BhcnNlX2luZm8gKGVsZW1lbnQsIHN1YiwgJnRhZ3MpOwotICAgICAgICAgICAgaWYgKHRhZ3MpIHsKLSAgICAgICAgICAgICAgaWYgKGF2aS0+Z2xvYmFsdGFncykgewotICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKGF2aS0+Z2xvYmFsdGFncywgdGFncywKLSAgICAgICAgICAgICAgICAgICAgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGF2aS0+Z2xvYmFsdGFncyA9IHRhZ3M7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRhZ3MgPSBOVUxMOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLSAgICAgICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX0xJU1RfbmNkdDoKLSAgICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHN1YiwgJm1hcCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAoc3ViLCA0LCAtMSk7Ci0gICAgICAgICAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX25jZHQgKGF2aSwgc3ViLCAmdGFncyk7Ci0gICAgICAgICAgICBpZiAodGFncykgewotICAgICAgICAgICAgICBpZiAoYXZpLT5nbG9iYWx0YWdzKSB7Ci0gICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoYXZpLT5nbG9iYWx0YWdzLCB0YWdzLAotICAgICAgICAgICAgICAgICAgICBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXZpLT5nbG9iYWx0YWdzID0gdGFnczsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGFncyA9IE5VTEw7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOwotICAgICAgICAgICAgc3ViID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICAgICAiVW5rbm93biBsaXN0ICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgaW4gQVZJIGhlYWRlciIsCi0gICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhKSkpOwotICAgICAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChhdmksICJVbmtub3duIGxpc3QiLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgICAgICAgICAgLyogZmFsbC10aHJvdWdoICovCi0gICAgICAgICAgY2FzZSBHU1RfUklGRl9UQUdfSlVOUToKLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX1RBR19KVU5LOgotICAgICAgICAgICAgZ290byBuZXh0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUklGRl9JRElUOgotICAgICAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX2lkaXQgKGF2aSwgc3ViKTsKLSAgICAgICAgZ290byBuZXh0OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAiVW5rbm93biB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBpbiBBVkkgaGVhZGVyIiwKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSk7Ci0gICAgICAgIEdTVF9NRU1EVU1QX09CSkVDVCAoYXZpLCAiVW5rbm93biB0YWciLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0pVTlE6Ci0gICAgICBjYXNlIEdTVF9SSUZGX1RBR19KVU5LOgotICAgICAgbmV4dDoKLSAgICAgICAgaWYgKHN1YikgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHN1YiwgJm1hcCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLSAgICAgICAgfQotICAgICAgICBzdWIgPSBOVUxMOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgR1NUX0RFQlVHICgiZWxlbWVudHMgcGFyc2VkIik7Ci0KLSAgLyogY2hlY2sgcGFyc2VkIHN0cmVhbXMgKi8KLSAgaWYgKGF2aS0+bnVtX3N0cmVhbXMgPT0gMCkKLSAgICBnb3RvIG5vX3N0cmVhbXM7Ci0gIGVsc2UgaWYgKGF2aS0+bnVtX3N0cmVhbXMgIT0gYXZpLT5hdmloLT5zdHJlYW1zKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICJTdHJlYW0gaGVhZGVyIG1lbnRpb25lZCAlZCBzdHJlYW1zLCBidXQgJWQgYXZhaWxhYmxlIiwKLSAgICAgICAgYXZpLT5hdmloLT5zdHJlYW1zLCBhdmktPm51bV9zdHJlYW1zKTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInNraXBwaW5nIGp1bmsgYmV0d2VlbiBoZWFkZXIgYW5kIGRhdGEsIG9mZnNldD0lIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgYXZpLT5vZmZzZXQpOwotCi0gIC8qIE5vdywgZmluZCB0aGUgZGF0YSAoaS5lLiBza2lwIGFsbCBqdW5rIGJldHdlZW4gaGVhZGVyIGFuZCBkYXRhKSAqLwotICBkbyB7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ3VpbnQgc2l6ZTsKLSAgICBndWludDMyIHRhZywgbHRhZzsKLQotICAgIGJ1ZiA9IE5VTEw7Ci0gICAgcmVzID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChhdmktPnNpbmtwYWQsIGF2aS0+b2Zmc2V0LCAxMiwgJmJ1Zik7Ci0gICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAicHVsbF9yYW5nZSBmYWlsdXJlIHdoaWxlIGxvb2tpbmcgZm9yIHRhZ3MiKTsKLSAgICAgIGdvdG8gcHVsbF9yYW5nZV9mYWlsZWQ7Ci0gICAgfSBlbHNlIGlmIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpIDwgMTIpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAiZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgd2hpY2ggaXMgbGVzcyB0aGFuIDEyIGJ5dGVzIiwKLSAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICB0YWcgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhKTsKLSAgICBzaXplID0gR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSArIDQpOwotICAgIGx0YWcgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgOCk7Ci0KLSAgICBHU1RfREVCVUcgKCJ0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiwgc2l6ZSAldSIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSwgc2l6ZSk7Ci0gICAgR1NUX01FTURVTVAgKCJUYWcgY29udGVudCIsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgc3dpdGNoICh0YWcpIHsKLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0xJU1Q6ewotICAgICAgICBzd2l0Y2ggKGx0YWcpIHsKLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX0xJU1RfbW92aToKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICAgICAgICAgICAiUmVhY2hlZCB0aGUgJ21vdmknIHRhZywgd2UncmUgZG9uZSB3aXRoIHNraXBwaW5nIik7Ci0gICAgICAgICAgICBnb3RvIHNraXBwaW5nX2RvbmU7Ci0gICAgICAgICAgY2FzZSBHU1RfUklGRl9MSVNUX0lORk86Ci0gICAgICAgICAgICByZXMgPQotICAgICAgICAgICAgICAgIGdzdF9yaWZmX3JlYWRfY2h1bmsgKGVsZW1lbnQsIGF2aS0+c2lua3BhZCwgJmF2aS0+b2Zmc2V0LCAmdGFnLAotICAgICAgICAgICAgICAgICZidWYpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJjb3VsZG4ndCByZWFkIElORk8gY2h1bmsiKTsKLSAgICAgICAgICAgICAgZ290byBwdWxsX3JhbmdlX2ZhaWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdTVF9ERUJVRyAoImdvdCBzaXplICUiIEdfR1NJWkVfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKLSAgICAgICAgICAgIGlmIChzaXplIDwgNCkgewotICAgICAgICAgICAgICBHU1RfREVCVUcgKCJza2lwcGluZyBJTkZPIExJU1QgcHJlZml4Iik7Ci0gICAgICAgICAgICAgIGF2aS0+b2Zmc2V0ICs9ICg0IC0gR1NUX1JPVU5EX1VQXzIgKHNpemUpKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN1YiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgNCwgLTEpOwotICAgICAgICAgICAgZ3N0X3JpZmZfcGFyc2VfaW5mbyAoZWxlbWVudCwgc3ViLCAmdGFncyk7Ci0gICAgICAgICAgICBpZiAodGFncykgewotICAgICAgICAgICAgICBpZiAoYXZpLT5nbG9iYWx0YWdzKSB7Ci0gICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoYXZpLT5nbG9iYWx0YWdzLCB0YWdzLAotICAgICAgICAgICAgICAgICAgICBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXZpLT5nbG9iYWx0YWdzID0gdGFnczsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGFncyA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc3ViKSB7Ci0gICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0gICAgICAgICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgICAgLyogZ3N0X3JpZmZfcmVhZF9jaHVuaygpIGhhcyBhbHJlYWR5IGFkdmFuY2VkIGF2aS0+b2Zmc2V0ICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX0xJU1RfbmNkdDoKLSAgICAgICAgICAgIHJlcyA9Ci0gICAgICAgICAgICAgICAgZ3N0X3JpZmZfcmVhZF9jaHVuayAoZWxlbWVudCwgYXZpLT5zaW5rcGFkLCAmYXZpLT5vZmZzZXQsICZ0YWcsCi0gICAgICAgICAgICAgICAgJmJ1Zik7Ci0gICAgICAgICAgICBpZiAocmVzICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImNvdWxkbid0IHJlYWQgbmNkdCBjaHVuayIpOwotICAgICAgICAgICAgICBnb3RvIHB1bGxfcmFuZ2VfZmFpbGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgR1NUX0RFQlVHICgiZ290IHNpemUgJSIgR19HU0laRV9GT1JNQVQsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICAgICAgICAgICAgaWYgKHNpemUgPCA0KSB7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVRyAoInNraXBwaW5nIG5jZHQgTElTVCBwcmVmaXgiKTsKLSAgICAgICAgICAgICAgYXZpLT5vZmZzZXQgKz0gKDQgLSBHU1RfUk9VTkRfVVBfMiAoc2l6ZSkpOwotICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3ViID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCA0LCAtMSk7Ci0gICAgICAgICAgICBnc3RfYXZpX2RlbXV4X3BhcnNlX25jZHQgKGF2aSwgc3ViLCAmdGFncyk7Ci0gICAgICAgICAgICBpZiAodGFncykgewotICAgICAgICAgICAgICBpZiAoYXZpLT5nbG9iYWx0YWdzKSB7Ci0gICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoYXZpLT5nbG9iYWx0YWdzLCB0YWdzLAotICAgICAgICAgICAgICAgICAgICBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXZpLT5nbG9iYWx0YWdzID0gdGFnczsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGFncyA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoc3ViKSB7Ci0gICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0gICAgICAgICAgICAgIHN1YiA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgICAgLyogZ3N0X3JpZmZfcmVhZF9jaHVuaygpIGhhcyBhbHJlYWR5IGFkdmFuY2VkIGF2aS0+b2Zmc2V0ICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAgICAgIlNraXBwaW5nIHVua25vd24gbGlzdCB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChsdGFnKSk7Ci0gICAgICAgICAgICBhdmktPm9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIlNraXBwaW5nIHVua25vd24gdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgICAgLyogRmFsbC10aHJvdWdoICovCi0gICAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0onLCAnVScsICdOJywgJ1EnKToKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnSicsICdVJywgJ04nLCAnSycpOgotICAgICAgICAvKiBPbmx5IGdldCBidWZmZXIgZm9yIGRlYnVnZ2luZyBpZiB0aGUgbWVtZHVtcCBpcyBuZWVkZWQgICovCi0gICAgICAgIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCAoR1NUX0NBVF9ERUZBVUxUKSA+PSA5KSB7Ci0gICAgICAgICAgYnVmID0gTlVMTDsKLSAgICAgICAgICByZXMgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKGF2aS0+c2lua3BhZCwgYXZpLT5vZmZzZXQsIHNpemUsICZidWYpOwotICAgICAgICAgIGlmIChyZXMgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImNvdWxkbid0IHJlYWQgSU5GTyBjaHVuayIpOwotICAgICAgICAgICAgZ290byBwdWxsX3JhbmdlX2ZhaWxlZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgICBHU1RfTUVNRFVNUCAoIkp1bmsiLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgfQotICAgICAgICBhdmktPm9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUgKDEpOwotc2tpcHBpbmdfZG9uZToKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJza2lwcGluZyBkb25lIC4uLiAoc3RyZWFtcz0ldSwgc3RyZWFtWzBdLmluZGV4ZXM9JXApIiwKLSAgICAgIGF2aS0+bnVtX3N0cmVhbXMsIGF2aS0+c3RyZWFtWzBdLmluZGV4ZXMpOwotCi0gIC8qIGNyZWF0ZSBvciByZWFkIHN0cmVhbSBpbmRleCAoZm9yIHNlZWtpbmcpICovCi0gIGlmIChhdmktPnN0cmVhbVswXS5pbmRleGVzICE9IE5VTEwpIHsKLSAgICAvKiB3ZSByZWFkIGEgc3VwZXIgaW5kZXggYWxyZWFkeSAoZ3N0X2F2aV9kZW11eF9wYXJzZV9zdXBlcmluZGV4KCkgKSAqLwotICAgIGdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1bGwgKGF2aSk7Ci0gIH0KLSAgaWYgKCFhdmktPmhhdmVfaW5kZXgpIHsKLSAgICBpZiAoYXZpLT5hdmloLT5mbGFncyAmIEdTVF9SSUZGX0FWSUhfSEFTSU5ERVgpCi0gICAgICBnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbmRleCAoYXZpKTsKLQotICAgIC8qIHN0aWxsIG5vIGluZGV4LCBzY2FuICovCi0gICAgaWYgKCFhdmktPmhhdmVfaW5kZXgpIHsKLSAgICAgIGdzdF9hdmlfZGVtdXhfc3RyZWFtX3NjYW4gKGF2aSk7Ci0KLSAgICAgIC8qIHN0aWxsIG5vIGluZGV4Li4gdGhpcyBpcyBhIGZhdGFsIGVycm9yIGZvciBub3cuCi0gICAgICAgKiBGSVhNRSwgd2Ugc2hvdWxkIHN3aXRjaCB0byBwbGFpbiBwdXNoIG1vZGUgd2l0aG91dCBzZWVraW5nCi0gICAgICAgKiBpbnN0ZWFkIG9mIGZhaWxpbmcuICovCi0gICAgICBpZiAoIWF2aS0+aGF2ZV9pbmRleCkKLSAgICAgICAgZ290byBub19pbmRleDsKLSAgICB9Ci0gIH0KLSAgLyogdXNlIHRoZSBpbmRleGVzIG5vdyB0byBjb25zdHJ1Y3QgbmljZSBkdXJhdGlvbnMgKi8KLSAgZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXggKGF2aSk7Ci0KLSAgZ3N0X2F2aV9kZW11eF9leHBvc2Vfc3RyZWFtcyAoYXZpLCBGQUxTRSk7Ci0KLSAgLyogZG8gaW5pdGlhbCBzZWVrIHRvIHRoZSBkZWZhdWx0IHNlZ21lbnQgdmFsdWVzICovCi0gIGdzdF9hdmlfZGVtdXhfZG9fc2VlayAoYXZpLCAmYXZpLT5zZWdtZW50KTsKLQotICAvKiBjcmVhdGUgaW5pdGlhbCBORVdTRUdNRU5UIGV2ZW50ICovCi0gIGlmIChhdmktPnNlZ19ldmVudCkKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGF2aS0+c2VnX2V2ZW50KTsKLSAgYXZpLT5zZWdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZhdmktPnNlZ21lbnQpOwotICBpZiAoYXZpLT5zZWdtZW50X3NlcW51bSkKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoYXZpLT5zZWdfZXZlbnQsIGF2aS0+c2VnbWVudF9zZXFudW0pOwotCi0gIHN0YW1wID0gZ3N0X3V0aWxfZ2V0X3RpbWVzdGFtcCAoKSAtIHN0YW1wOwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJwdWxsaW5nIGhlYWRlciB0b29rICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHN0YW1wKSk7Ci0KLSAgLyogYXQgdGhpcyBwb2ludCB3ZSBrbm93IGFsbCB0aGUgc3RyZWFtcyBhbmQgd2UgY2FuIHNpZ25hbCB0aGUgbm8gbW9yZQotICAgKiBwYWRzIHNpZ25hbCAqLwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzaWduYWxpbmcgbm8gbW9yZSBwYWRzIik7Ci0gIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoYXZpKSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbGlzdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJJbnZhbGlkIEFWSSBoZWFkZXIgKG5vIExJU1QgYXQgc3RhcnQpOiAlIgotICAgICAgICAgICAgR1NUX0ZPVVJDQ19GT1JNQVQsIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSkpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1ub19oZWFkZXI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiSW52YWxpZCBBVkkgaGVhZGVyIChubyBoZHJsIGF0IHN0YXJ0KTogJSIKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfRk9STUFULCBHU1RfRk9VUkNDX0FSR1MgKHRhZykpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotbm9fYXZpaDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJJbnZhbGlkIEFWSSBoZWFkZXIgKG5vIGF2aWggYXQgc3RhcnQpOiAlIgotICAgICAgICAgICAgR1NUX0ZPVVJDQ19GT1JNQVQsIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSkpOwotICAgIGlmIChzdWIpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1pbnZhbGlkX2F2aWg6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiSW52YWxpZCBBVkkgaGVhZGVyIChjYW5ub3QgcGFyc2UgYXZpaCBhdCBzdGFydCkiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLW5vX3N0cmVhbXM6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksICgiTm8gc3RyZWFtcyBmb3VuZCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLW5vX2luZGV4OgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJmaWxlIHdpdGhvdXQgb3IgdG9vIGJpZyBpbmRleCIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgZ2V0L2NyZWF0ZSBpbmRleCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXB1bGxfcmFuZ2VfZmFpbGVkOgotICB7Ci0gICAgaWYgKHJlcyA9PSBHU1RfRkxPV19GTFVTSElORykKLSAgICAgIHJldHVybiByZXM7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAoInB1bGxfcmFuZ2UgZmxvdyByZWFkaW5nIGhlYWRlcjogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSkpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLX0KLQotLyogbW92ZSBhIHN0cmVhbSB0byBAaW5kZXggKi8KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX2RlbXV4X21vdmVfc3RyZWFtIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QXZpU3RyZWFtICogc3RyZWFtLAotICAgIEdzdFNlZ21lbnQgKiBzZWdtZW50LCBndWludCBpbmRleCkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiTW92ZSBzdHJlYW0gJWQgdG8gJXUiLCBzdHJlYW0tPm51bSwgaW5kZXgpOwotCi0gIGlmIChzZWdtZW50LT5yYXRlIDwgMC4wKSB7Ci0gICAgZ3VpbnQgbmV4dF9rZXk7Ci0gICAgLyogQmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBmcmFtZSBvcmRlciB3ZSBuZWVkIHRvIHB1c2ggZnJvbSB0aGUgcHJldiBrZXlmcmFtZQotICAgICAqIHRvIHRoZSBuZXh0IGtleWZyYW1lLiBJZiB0aGVyZSBpcyBhIHNtYXJ0IGRlY29kZXIgZG93bnN0cmVhbSBoZSB3aWxsIG5vdGljZQotICAgICAqIHRoYXQgdGhlcmUgYXJlIHRvbyBtYW55IGVuY29kZWQgZnJhbWVzIHNlbmQgYW5kIHJldHVybiBFT1Mgd2hlbiB0aGVyZQotICAgICAqIGFyZSBlbm91Z2ggZGVjb2RlZCBmcmFtZXMgdG8gZmlsbCB0aGUgc2VnbWVudC4gKi8KLSAgICBuZXh0X2tleSA9IGdzdF9hdmlfZGVtdXhfaW5kZXhfbmV4dCAoYXZpLCBzdHJlYW0sIGluZGV4LCBUUlVFKTsKLQotICAgIC8qIEZJWE1FLCB3ZSBnbyBiYWNrIHRvIDAsIHdlIHNob3VsZCBsb29rIGF0IHNlZ21lbnQuc3RhcnQuIFdlIHdpbGwgaG93ZXZlcgotICAgICAqIHN0b3AgZWFybGllciB3aGVuIHRoZSBzZWUgdGhlIHRpbWVzdGFtcCA8IHNlZ21lbnQuc3RhcnQgKi8KLSAgICBzdHJlYW0tPnN0YXJ0X2VudHJ5ID0gMDsKLSAgICBzdHJlYW0tPnN0ZXBfZW50cnkgPSBpbmRleDsKLSAgICBzdHJlYW0tPmN1cnJlbnRfZW50cnkgPSBpbmRleDsKLSAgICBzdHJlYW0tPnN0b3BfZW50cnkgPSBuZXh0X2tleTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInJldmVyc2Ugc2Vlazogc3RhcnQgJXUsIHN0ZXAgJXUsIHN0b3AgJXUiLAotICAgICAgICBzdHJlYW0tPnN0YXJ0X2VudHJ5LCBzdHJlYW0tPnN0ZXBfZW50cnksIHN0cmVhbS0+c3RvcF9lbnRyeSk7Ci0gIH0gZWxzZSB7Ci0gICAgc3RyZWFtLT5zdGFydF9lbnRyeSA9IGluZGV4OwotICAgIHN0cmVhbS0+c3RlcF9lbnRyeSA9IGluZGV4OwotICAgIHN0cmVhbS0+c3RvcF9lbnRyeSA9IGdzdF9hdmlfZGVtdXhfaW5kZXhfbGFzdCAoYXZpLCBzdHJlYW0pOwotICB9Ci0gIGlmIChzdHJlYW0tPmN1cnJlbnRfZW50cnkgIT0gaW5kZXgpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJNb3ZlIERJU0NPTlQgZnJvbSAldSB0byAldSIsCi0gICAgICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSwgaW5kZXgpOwotICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSA9IGluZGV4OwotICAgIHN0cmVhbS0+ZGlzY29udCA9IFRSVUU7Ci0gIH0KLQotICAvKiB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvICovCi0gIGdzdF9hdmlfZGVtdXhfZ2V0X2J1ZmZlcl9pbmZvIChhdmksIHN0cmVhbSwgaW5kZXgsCi0gICAgICAmc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcCwgJnN0cmVhbS0+Y3VycmVudF90c19lbmQsCi0gICAgICAmc3RyZWFtLT5jdXJyZW50X29mZnNldCwgJnN0cmVhbS0+Y3VycmVudF9vZmZzZXRfZW5kKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJNb3ZlZCB0byAldSwgdHMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCB0c19lbmQgJSIgR1NUX1RJTUVfRk9STUFUICIsIG9mZiAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBvZmZfZW5kICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGluZGV4LAotICAgICAgR1NUX1RJTUVfQVJHUyAoc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcCksCi0gICAgICBHU1RfVElNRV9BUkdTIChzdHJlYW0tPmN1cnJlbnRfdHNfZW5kKSwgc3RyZWFtLT5jdXJyZW50X29mZnNldCwKLSAgICAgIHN0cmVhbS0+Y3VycmVudF9vZmZzZXRfZW5kKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJTZWVraW5nIHRvIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgc3RyZWFtLT5pbmRleFtpbmRleF0ub2Zmc2V0KTsKLX0KLQotLyoKLSAqIERvIHRoZSBhY3R1YWwgc2Vla2luZy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X2RvX3NlZWsgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHNlZWtfdGltZTsKLSAgZ2Jvb2xlYW4ga2V5ZnJhbWUsIGJlZm9yZSwgYWZ0ZXI7Ci0gIGd1aW50IGksIGluZGV4OwotICBHc3RBdmlTdHJlYW0gKnN0cmVhbTsKLQotICBzZWVrX3RpbWUgPSBzZWdtZW50LT5wb3NpdGlvbjsKLSAga2V5ZnJhbWUgPSAhICEoc2VnbWVudC0+ZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0tFWV9VTklUKTsKLSAgYmVmb3JlID0gISAhKHNlZ21lbnQtPmZsYWdzICYgR1NUX1NFRUtfRkxBR19TTkFQX0JFRk9SRSk7Ci0gIGFmdGVyID0gISAhKHNlZ21lbnQtPmZsYWdzICYgR1NUX1NFRUtfRkxBR19TTkFQX0FGVEVSKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzZWVrIHRvOiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIga2V5ZnJhbWUgc2Vla2luZzolZCwgJXMiLCBHU1RfVElNRV9BUkdTIChzZWVrX3RpbWUpLCBrZXlmcmFtZSwKLSAgICAgIHNuYXBfdHlwZXNbYmVmb3JlID8gMSA6IDBdW2FmdGVyID8gMSA6IDBdKTsKLQotICAvKiBGSVhNRSwgdGhpcyBjb2RlIGFzc3VtZXMgdGhlIG1haW4gc3RyZWFtIHdpdGgga2V5ZnJhbWVzIGlzIHN0cmVhbSAwLAotICAgKiB3aGljaCBpcyBtb3N0bHkgY29ycmVjdC4uLiAqLwotICBzdHJlYW0gPSAmYXZpLT5zdHJlYW1bYXZpLT5tYWluX3N0cmVhbV07Ci0KLSAgLyogZ2V0IHRoZSBlbnRyeSBpbmRleCBmb3IgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiAqLwotICBpbmRleCA9IGdzdF9hdmlfZGVtdXhfaW5kZXhfZm9yX3RpbWUgKGF2aSwgc3RyZWFtLCBzZWVrX3RpbWUpOwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJHb3QgZW50cnkgJXUiLCBpbmRleCk7Ci0gIGlmIChpbmRleCA9PSAtMSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogY2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgb24gYSBrZXlmcmFtZSAqLwotICBpZiAoIUVOVFJZX0lTX0tFWUZSQU1FICgmc3RyZWFtLT5pbmRleFtpbmRleF0pKSB7Ci0gICAgZ2Jvb2xlYW4gbmV4dDsKLQotICAgIG5leHQgPSBhZnRlciAmJiAhYmVmb3JlOwotICAgIGlmIChzZWdtZW50LT5yYXRlIDwgMCkKLSAgICAgIG5leHQgPSAhbmV4dDsKLQotICAgIGlmIChuZXh0KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJub3Qga2V5ZnJhbWUsIHNlYXJjaGluZyBmb3J3YXJkIik7Ci0gICAgICAvKiBub3cgZ28gdG8gdGhlIG5leHQga2V5ZnJhbWUsIHRoaXMgaXMgd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0Ci0gICAgICAgKiBkZWNvZGluZyBmcm9tLiAqLwotICAgICAgaW5kZXggPSBnc3RfYXZpX2RlbXV4X2luZGV4X25leHQgKGF2aSwgc3RyZWFtLCBpbmRleCwgVFJVRSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJuZXh0IGtleWZyYW1lIGF0ICV1IiwgaW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJub3Qga2V5ZnJhbWUsIHNlYXJjaGluZyBiYWNrIik7Ci0gICAgICAvKiBub3cgZ28gdG8gdGhlIHByZXZpb3VzIGtleWZyYW1lLCB0aGlzIGlzIHdoZXJlIHdlIHNob3VsZCBzdGFydAotICAgICAgICogZGVjb2RpbmcgZnJvbS4gKi8KLSAgICAgIGluZGV4ID0gZ3N0X2F2aV9kZW11eF9pbmRleF9wcmV2IChhdmksIHN0cmVhbSwgaW5kZXgsIFRSVUUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAicHJldmlvdXMga2V5ZnJhbWUgYXQgJXUiLCBpbmRleCk7Ci0gICAgfQotICB9Ci0KLSAgLyogbW92ZSB0aGUgbWFpbiBzdHJlYW0gdG8gdGhpcyBwb3NpdGlvbiAqLwotICBnc3RfYXZpX2RlbXV4X21vdmVfc3RyZWFtIChhdmksIHN0cmVhbSwgc2VnbWVudCwgaW5kZXgpOwotCi0gIGlmIChrZXlmcmFtZSkgewotICAgIC8qIHdoZW4gc2Vla2luZyB0byBhIGtleWZyYW1lLCB3ZSB1cGRhdGUgdGhlIHJlc3VsdCBzZWVrIHRpbWUKLSAgICAgKiB0byB0aGUgdGltZSBvZiB0aGUga2V5ZnJhbWUuICovCi0gICAgc2Vla190aW1lID0gc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcDsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJrZXlmcmFtZSBhZGp1c3RlZCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHNlZWtfdGltZSkpOwotICB9Ci0KLSAgLyogdGhlIHNlZWsgdGltZSBpcyBhbHNvIHRoZSBwb3NpdGlvbiBhbmQgc3RyZWFtIHRpbWUgd2hlbiBnb2luZwotICAgKiBmb3J3YXJkcyAqLwotICBzZWdtZW50LT5wb3NpdGlvbiA9IHNlZWtfdGltZTsKLSAgaWYgKHNlZ21lbnQtPnJhdGUgPiAwLjApCi0gICAgc2VnbWVudC0+dGltZSA9IHNlZWtfdGltZTsKLQotICAvKiBub3cgc2V0IERJU0NPTlQgYW5kIGFsaWduIHRoZSBvdGhlciBzdHJlYW1zICovCi0gIGZvciAoaSA9IDA7IGkgPCBhdmktPm51bV9zdHJlYW1zOyBpKyspIHsKLSAgICBHc3RBdmlTdHJlYW0gKm9zdHJlYW07Ci0KLSAgICBvc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotICAgIGlmICgob3N0cmVhbSA9PSBzdHJlYW0pIHx8IChvc3RyZWFtLT5pbmRleCA9PSBOVUxMKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogZ2V0IHRoZSBlbnRyeSBpbmRleCBmb3IgdGhlIHJlcXVlc3RlZCBwb3NpdGlvbiAqLwotICAgIGluZGV4ID0gZ3N0X2F2aV9kZW11eF9pbmRleF9mb3JfdGltZSAoYXZpLCBvc3RyZWFtLCBzZWVrX3RpbWUpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogbW92ZSB0byBwcmV2aW91cyBrZXlmcmFtZSAqLwotICAgIGlmICghRU5UUllfSVNfS0VZRlJBTUUgKCZvc3RyZWFtLT5pbmRleFtpbmRleF0pKQotICAgICAgaW5kZXggPSBnc3RfYXZpX2RlbXV4X2luZGV4X3ByZXYgKGF2aSwgb3N0cmVhbSwgaW5kZXgsIFRSVUUpOwotCi0gICAgZ3N0X2F2aV9kZW11eF9tb3ZlX3N0cmVhbSAoYXZpLCBvc3RyZWFtLCBzZWdtZW50LCBpbmRleCk7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiZG9uZSBzZWVrIHRvOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChzZWVrX3RpbWUpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAqIEhhbmRsZSBzZWVrIGV2ZW50IGluIHB1bGwgbW9kZS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X2hhbmRsZV9zZWVrIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnZG91YmxlIHJhdGU7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgR3N0U2Vla1R5cGUgY3VyX3R5cGUgPSBHU1RfU0VFS19UWVBFX05PTkUsIHN0b3BfdHlwZTsKLSAgZ2ludDY0IGN1ciwgc3RvcDsKLSAgZ2Jvb2xlYW4gZmx1c2g7Ci0gIGdib29sZWFuIHVwZGF0ZTsKLSAgR3N0U2VnbWVudCBzZWVrc2VnbWVudCA9IHsgMCwgfTsKLSAgZ2ludCBpOwotICBndWludDMyIHNlcW51bSA9IDA7Ci0KLSAgaWYgKGV2ZW50KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiZG9pbmcgc2VlayB3aXRoIGV2ZW50Iik7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAgICZjdXJfdHlwZSwgJmN1ciwgJnN0b3BfdHlwZSwgJnN0b3ApOwotICAgIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0KLSAgICAvKiB3ZSBoYXZlIHRvIGhhdmUgYSBmb3JtYXQgYXMgdGhlIHNlZ21lbnQgZm9ybWF0LiBUcnkgdG8gY29udmVydAotICAgICAqIGlmIG5vdC4gKi8KLSAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICAgICAgaWYgKGN1cl90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9jb252ZXJ0IChwYWQsIGZvcm1hdCwgY3VyLCBHU1RfRk9STUFUX1RJTUUsICZjdXIpOwotICAgICAgaWYgKHJlcyAmJiBzdG9wX3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FKQotICAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHBhZCwgZm9ybWF0LCBzdG9wLCBHU1RfRk9STUFUX1RJTUUsICZzdG9wKTsKLSAgICAgIGlmICghcmVzKQotICAgICAgICBnb3RvIG5vX2Zvcm1hdDsKLQotICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksCi0gICAgICAgICJzZWVrIHJlcXVlc3RlZDogcmF0ZSAlZyBjdXIgJSIgR1NUX1RJTUVfRk9STUFUICIgc3RvcCAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIHJhdGUsIEdTVF9USU1FX0FSR1MgKGN1ciksIEdTVF9USU1FX0FSR1MgKHN0b3ApKTsKLSAgICAvKiBGSVhNRTogY2FuIHdlIGRvIGFueXRoaW5nIHdpdGggcmF0ZSE9MS4wICovCi0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiZG9pbmcgc2VlayB3aXRob3V0IGV2ZW50Iik7Ci0gICAgZmxhZ3MgPSAwOwotICAgIHJhdGUgPSAxLjA7Ci0gIH0KLQotICAvKiBzYXZlIGZsdXNoIGZsYWcgKi8KLSAgZmx1c2ggPSBmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0g7Ci0KLSAgaWYgKGZsdXNoKSB7Ci0gICAgR3N0RXZlbnQgKmZldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7Ci0KLSAgICBpZiAoc2VxbnVtKQotICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGZldmVudCwgc2VxbnVtKTsKLSAgICAvKiBmb3IgYSBmbHVzaGluZyBzZWVrLCB3ZSBzZW5kIGEgZmx1c2hfc3RhcnQgb24gYWxsIHBhZHMuIFRoaXMgd2lsbAotICAgICAqIGV2ZW50dWFsbHkgc3RvcCBzdHJlYW1pbmcgd2l0aCBhIFdST05HX1NUQVRFLiBXZSBjYW4gdGh1cyBldmVudHVhbGx5Ci0gICAgICogdGFrZSB0aGUgU1RSRUFNX0xPQ0suICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAic2VuZGluZyBmbHVzaCBzdGFydCIpOwotICAgIGdzdF9hdmlfZGVtdXhfcHVzaF9ldmVudCAoYXZpLCBnc3RfZXZlbnRfcmVmIChmZXZlbnQpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGF2aS0+c2lua3BhZCwgZmV2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICAvKiBhIG5vbi1mbHVzaGluZyBzZWVrLCB3ZSBQQVVTRSB0aGUgdGFzayBzbyB0aGF0IHdlIGNhbiB0YWtlIHRoZQotICAgICAqIFNUUkVBTV9MT0NLICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAibm9uIGZsdXNoaW5nIHNlZWssIHBhdXNpbmcgdGFzayIpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoYXZpLT5zaW5rcGFkKTsKLSAgfQotCi0gIC8qIHdhaXQgZm9yIHN0cmVhbWluZyB0byBzdG9wICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIndhaXQgZm9yIHN0cmVhbWluZyB0byBzdG9wIik7Ci0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKGF2aS0+c2lua3BhZCk7Ci0KLSAgLyogY29weSBzZWdtZW50LCB3ZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRoZSBvbGQKLSAgICogc2VnbWVudCB3aGVuIHdlIGNsb3NlIHRoZSBjdXJyZW50IHNlZ21lbnQuICovCi0gIG1lbWNweSAoJnNlZWtzZWdtZW50LCAmYXZpLT5zZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICBpZiAoZXZlbnQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJjb25maWd1cmluZyBzZWVrIik7Ci0gICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAotICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICB9Ci0gIC8qIGRvIHRoZSBzZWVrLCBzZWVrc2VnbWVudC5wb3NpdGlvbiBjb250YWlucyB0aGUgbmV3IHBvc2l0aW9uLCB0aGlzCi0gICAqIGFjdHVhbGx5IG5ldmVyIGZhaWxzLiAqLwotICBnc3RfYXZpX2RlbXV4X2RvX3NlZWsgKGF2aSwgJnNlZWtzZWdtZW50KTsKLQotICBpZiAoZmx1c2gpIHsKLSAgICBHc3RFdmVudCAqZmV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLQotICAgIGlmIChzZXFudW0pCi0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZmV2ZW50LCBzZXFudW0pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAic2VuZGluZyBmbHVzaCBzdG9wIik7Ci0gICAgZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50IChhdmksIGdzdF9ldmVudF9yZWYgKGZldmVudCkpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoYXZpLT5zaW5rcGFkLCBmZXZlbnQpOwotICB9Ci0KLSAgLyogbm93IHVwZGF0ZSB0aGUgcmVhbCBzZWdtZW50IGluZm8gKi8KLSAgbWVtY3B5ICgmYXZpLT5zZWdtZW50LCAmc2Vla3NlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotCi0gIC8qIHBvc3QgdGhlIFNFR01FTlRfU1RBUlQgbWVzc2FnZSB3aGVuIHdlIGRvIHNlZ21lbnRlZCBwbGF5YmFjayAqLwotICBpZiAoYXZpLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7Ci0gICAgR3N0TWVzc2FnZSAqc2VnbWVudF9zdGFydF9tc2cgPQotICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoR1NUX09CSkVDVF9DQVNUIChhdmkpLAotICAgICAgICBhdmktPnNlZ21lbnQuZm9ybWF0LCBhdmktPnNlZ21lbnQucG9zaXRpb24pOwotICAgIGlmIChzZXFudW0pCi0gICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChzZWdtZW50X3N0YXJ0X21zZywgc2VxbnVtKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGF2aSksIHNlZ21lbnRfc3RhcnRfbXNnKTsKLSAgfQotCi0gIC8qIHF1ZXVlIHRoZSBzZWdtZW50IGV2ZW50IGZvciB0aGUgc3RyZWFtaW5nIHRocmVhZC4gKi8KLSAgaWYgKGF2aS0+c2VnX2V2ZW50KQotICAgIGdzdF9ldmVudF91bnJlZiAoYXZpLT5zZWdfZXZlbnQpOwotICBhdmktPnNlZ19ldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmF2aS0+c2VnbWVudCk7Ci0gIGlmIChzZXFudW0pCi0gICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGF2aS0+c2VnX2V2ZW50LCBzZXFudW0pOwotICBhdmktPnNlZ21lbnRfc2VxbnVtID0gc2VxbnVtOwotCi0gIGlmICghYXZpLT5zdHJlYW1pbmcpIHsKLSAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKGF2aS0+c2lua3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2F2aV9kZW11eF9sb29wLAotICAgICAgICBhdmktPnNpbmtwYWQsIE5VTEwpOwotICB9Ci0gIC8qIHJlc2V0IHRoZSBsYXN0IGZsb3cgYW5kIG1hcmsgZGlzY29udCwgc2VlayBpcyBhbHdheXMgRElTQ09OVCAqLwotICBmb3IgKGkgPSAwOyBpIDwgYXZpLT5udW1fc3RyZWFtczsgaSsrKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAibWFya2luZyBESVNDT05UIik7Ci0gICAgYXZpLT5zdHJlYW1baV0uZGlzY29udCA9IFRSVUU7Ci0gIH0KLSAgLyogbGlrZXdpc2UgZm9yIHRoZSB3aG9sZSBuZXcgc2VnbWVudCAqLwotICBnc3RfZmxvd19jb21iaW5lcl9yZXNldCAoYXZpLT5mbG93Y29tYmluZXIpOwotICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKGF2aS0+c2lua3BhZCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJ1bnN1cHBvcnRlZCBmb3JtYXQgZ2l2ZW4sIHNlZWsgYWJvcnRlZC4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoKLSAqIEhhbmRsZSBzZWVrIGV2ZW50IGluIHB1c2ggbW9kZS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1hdmlfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoR3N0QXZpRGVtdXggKiBhdmksIEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2RvdWJsZSByYXRlOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIGN1cl90eXBlID0gR1NUX1NFRUtfVFlQRV9OT05FLCBzdG9wX3R5cGU7Ci0gIGdpbnQ2NCBjdXIsIHN0b3A7Ci0gIGdib29sZWFuIGtleWZyYW1lLCBiZWZvcmUsIGFmdGVyOwotICBHc3RBdmlTdHJlYW0gKnN0cmVhbTsKLSAgZ3VpbnQgaW5kZXg7Ci0gIGd1aW50IG4sIHN0cl9udW07Ci0gIGd1aW50NjQgbWluX29mZnNldDsKLSAgR3N0U2VnbWVudCBzZWVrc2VnbWVudDsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotCi0gIC8qIGNoZWNrIHdlIGhhdmUgdGhlIGluZGV4ICovCi0gIGlmICghYXZpLT5oYXZlX2luZGV4KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAibm8gc2VlayBpbmRleCBidWlsdCwgc2VlayBhYm9ydGVkLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJkb2luZyBwdXNoLWJhc2VkIHNlZWsgd2l0aCBldmVudCIpOwotICB9Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLAotICAgICAgJmN1cl90eXBlLCAmY3VyLCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gICAgaWYgKGN1cl90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAocGFkLCBmb3JtYXQsIGN1ciwgR1NUX0ZPUk1BVF9USU1FLCAmY3VyKTsKLSAgICBpZiAocmVzICYmIHN0b3BfdHlwZSAhPSBHU1RfU0VFS19UWVBFX05PTkUpCi0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHBhZCwgZm9ybWF0LCBzdG9wLCBHU1RfRk9STUFUX1RJTUUsICZzdG9wKTsKLSAgICBpZiAoIXJlcykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAidW5zdXBwb3J0ZWQgZm9ybWF0IGdpdmVuLCBzZWVrIGFib3J0ZWQuIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICB9Ci0KLSAgLyogbGV0IGdzdF9zZWdtZW50IGhhbmRsZSBhbnkgdHJpY2t5IHN0dWZmICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImNvbmZpZ3VyaW5nIHNlZWsiKTsKLSAgbWVtY3B5ICgmc2Vla3NlZ21lbnQsICZhdmktPnNlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotICBnc3Rfc2VnbWVudF9kb19zZWVrICgmc2Vla3NlZ21lbnQsIHJhdGUsIGZvcm1hdCwgZmxhZ3MsCi0gICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotCi0gIGtleWZyYW1lID0gISAhKGZsYWdzICYgR1NUX1NFRUtfRkxBR19LRVlfVU5JVCk7Ci0gIGN1ciA9IHNlZWtzZWdtZW50LnBvc2l0aW9uOwotICBiZWZvcmUgPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NOQVBfQkVGT1JFKTsKLSAgYWZ0ZXIgPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NOQVBfQUZURVIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwKLSAgICAgICJTZWVrIHJlcXVlc3RlZDogdHMgJSIgR1NUX1RJTUVfRk9STUFUICIgc3RvcCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIGtmICV1LCAlcywgcmF0ZSAlbGYiLCBHU1RfVElNRV9BUkdTIChjdXIpLCBHU1RfVElNRV9BUkdTIChzdG9wKSwKLSAgICAgIGtleWZyYW1lLCBzbmFwX3R5cGVzW2JlZm9yZSA/IDEgOiAwXVthZnRlciA/IDEgOiAwXSwgcmF0ZSk7Ci0KLSAgaWYgKHJhdGUgPCAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAibmVnYXRpdmUgcmF0ZSBzZWVrIG5vdCBzdXBwb3J0ZWQgaW4gcHVzaCBtb2RlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogRklYTUUsIHRoaXMgY29kZSBhc3N1bWVzIHRoZSBtYWluIHN0cmVhbSB3aXRoIGtleWZyYW1lcyBpcyBzdHJlYW0gMCwKLSAgICogd2hpY2ggaXMgbW9zdGx5IGNvcnJlY3QuLi4gKi8KLSAgc3RyX251bSA9IGF2aS0+bWFpbl9zdHJlYW07Ci0gIHN0cmVhbSA9ICZhdmktPnN0cmVhbVtzdHJfbnVtXTsKLQotICAvKiBnZXQgdGhlIGVudHJ5IGluZGV4IGZvciB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uICovCi0gIGluZGV4ID0gZ3N0X2F2aV9kZW11eF9pbmRleF9mb3JfdGltZSAoYXZpLCBzdHJlYW0sIGN1cik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInN0ciAldTogRm91bmQgZW50cnkgJXUgZm9yICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIHN0cl9udW0sIGluZGV4LCBHU1RfVElNRV9BUkdTIChjdXIpKTsKLSAgaWYgKGluZGV4ID09IC0xKQotICAgIHJldHVybiAtMTsKLQotICAvKiBjaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBvbiBhIGtleWZyYW1lICovCi0gIGlmICghRU5UUllfSVNfS0VZRlJBTUUgKCZzdHJlYW0tPmluZGV4W2luZGV4XSkpIHsKLSAgICBnYm9vbGVhbiBuZXh0OwotCi0gICAgbmV4dCA9IGFmdGVyICYmICFiZWZvcmU7Ci0gICAgaWYgKHNlZWtzZWdtZW50LnJhdGUgPCAwKQotICAgICAgbmV4dCA9ICFuZXh0OwotCi0gICAgaWYgKG5leHQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIkVudHJ5IGlzIG5vdCBhIGtleWZyYW1lIC0gc2VhcmNoaW5nIGZvcndhcmQiKTsKLSAgICAgIC8qIG5vdyBnbyB0byB0aGUgbmV4dCBrZXlmcmFtZSwgdGhpcyBpcyB3aGVyZSB3ZSBzaG91bGQgc3RhcnQKLSAgICAgICAqIGRlY29kaW5nIGZyb20uICovCi0gICAgICBpbmRleCA9IGdzdF9hdmlfZGVtdXhfaW5kZXhfbmV4dCAoYXZpLCBzdHJlYW0sIGluZGV4LCBUUlVFKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIkZvdW5kIHByZXZpb3VzIGtleWZyYW1lIGF0ICV1IiwgaW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJFbnRyeSBpcyBub3QgYSBrZXlmcmFtZSAtIHNlYXJjaGluZyBiYWNrIik7Ci0gICAgICAvKiBub3cgZ28gdG8gdGhlIHByZXZpb3VzIGtleWZyYW1lLCB0aGlzIGlzIHdoZXJlIHdlIHNob3VsZCBzdGFydAotICAgICAgICogZGVjb2RpbmcgZnJvbS4gKi8KLSAgICAgIGluZGV4ID0gZ3N0X2F2aV9kZW11eF9pbmRleF9wcmV2IChhdmksIHN0cmVhbSwgaW5kZXgsIFRSVUUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiRm91bmQgcHJldmlvdXMga2V5ZnJhbWUgYXQgJXUiLCBpbmRleCk7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X2F2aV9kZW11eF9nZXRfYnVmZmVyX2luZm8gKGF2aSwgc3RyZWFtLCBpbmRleCwKLSAgICAgICZzdHJlYW0tPmN1cnJlbnRfdGltZXN0YW1wLCAmc3RyZWFtLT5jdXJyZW50X3RzX2VuZCwKLSAgICAgICZzdHJlYW0tPmN1cnJlbnRfb2Zmc2V0LCAmc3RyZWFtLT5jdXJyZW50X29mZnNldF9lbmQpOwotCi0gIC8qIHJlLXVzZSBjdXIgdG8gYmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgc2VlayBhcyBpdCBfd2lsbF8gYmUgKi8KLSAgY3VyID0gc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcDsKLQotICBtaW5fb2Zmc2V0ID0gc3RyZWFtLT5pbmRleFtpbmRleF0ub2Zmc2V0OwotICBhdmktPnNlZWtfa2Zfb2Zmc2V0ID0gbWluX29mZnNldCAtIDg7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLAotICAgICAgIlNlZWsgdG86IHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiIChvbiBzdHIgJXUsIGlkeCAldSwgb2Zmc2V0ICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIpIiwgR1NUX1RJTUVfQVJHUyAoc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcCksIHN0cl9udW0sCi0gICAgICBpbmRleCwgbWluX29mZnNldCk7Ci0KLSAgZm9yIChuID0gMDsgbiA8IGF2aS0+bnVtX3N0cmVhbXM7IG4rKykgewotICAgIEdzdEF2aVN0cmVhbSAqc3RyID0gJmF2aS0+c3RyZWFtW25dOwotICAgIGd1aW50IGlkeDsKLQotICAgIGlmIChuID09IGF2aS0+bWFpbl9zdHJlYW0pCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIGdldCB0aGUgZW50cnkgaW5kZXggZm9yIHRoZSByZXF1ZXN0ZWQgcG9zaXRpb24gKi8KLSAgICBpZHggPSBnc3RfYXZpX2RlbXV4X2luZGV4X2Zvcl90aW1lIChhdmksIHN0ciwgY3VyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzdHIgJXU6IEZvdW5kIGVudHJ5ICV1IGZvciAlIiBHU1RfVElNRV9GT1JNQVQsIG4sCi0gICAgICAgIGlkeCwgR1NUX1RJTUVfQVJHUyAoY3VyKSk7Ci0gICAgaWYgKGlkeCA9PSAtMSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogY2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgb24gYSBrZXlmcmFtZSAqLwotICAgIGlmICghRU5UUllfSVNfS0VZRlJBTUUgKCZzdHItPmluZGV4W2lkeF0pKSB7Ci0gICAgICBpZiAoYWZ0ZXIgJiYgIWJlZm9yZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJFbnRyeSBpcyBub3QgYSBrZXlmcmFtZSAtIHNlYXJjaGluZyBmb3J3YXJkIik7Ci0gICAgICAgIC8qIG5vdyBnbyB0byB0aGUgbmV4dCBrZXlmcmFtZSwgdGhpcyBpcyB3aGVyZSB3ZSBzaG91bGQgc3RhcnQKLSAgICAgICAgICogZGVjb2RpbmcgZnJvbS4gKi8KLSAgICAgICAgaWR4ID0gZ3N0X2F2aV9kZW11eF9pbmRleF9uZXh0IChhdmksIHN0ciwgaWR4LCBUUlVFKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiRm91bmQgbmV4dCBrZXlmcmFtZSBhdCAldSIsIGlkeCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJFbnRyeSBpcyBub3QgYSBrZXlmcmFtZSAtIHNlYXJjaGluZyBiYWNrIik7Ci0gICAgICAgIC8qIG5vdyBnbyB0byB0aGUgcHJldmlvdXMga2V5ZnJhbWUsIHRoaXMgaXMgd2hlcmUgd2Ugc2hvdWxkIHN0YXJ0Ci0gICAgICAgICAqIGRlY29kaW5nIGZyb20uICovCi0gICAgICAgIGlkeCA9IGdzdF9hdmlfZGVtdXhfaW5kZXhfcHJldiAoYXZpLCBzdHIsIGlkeCwgVFJVRSk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIkZvdW5kIHByZXZpb3VzIGtleWZyYW1lIGF0ICV1IiwgaWR4KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnc3RfYXZpX2RlbXV4X2dldF9idWZmZXJfaW5mbyAoYXZpLCBzdHIsIGlkeCwKLSAgICAgICAgJnN0ci0+Y3VycmVudF90aW1lc3RhbXAsICZzdHItPmN1cnJlbnRfdHNfZW5kLAotICAgICAgICAmc3RyLT5jdXJyZW50X29mZnNldCwgJnN0ci0+Y3VycmVudF9vZmZzZXRfZW5kKTsKLQotICAgIGlmIChzdHItPmluZGV4W2lkeF0ub2Zmc2V0IDwgbWluX29mZnNldCkgewotICAgICAgbWluX29mZnNldCA9IHN0ci0+aW5kZXhbaWR4XS5vZmZzZXQ7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksCi0gICAgICAgICAgIkZvdW5kIGFuIGVhcmxpZXIgb2Zmc2V0IGF0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgc3RyICV1IiwKLSAgICAgICAgICBtaW5fb2Zmc2V0LCBuKTsKLSAgICAgIHN0cl9udW0gPSBuOwotICAgICAgc3RyZWFtID0gc3RyOwotICAgICAgaW5kZXggPSBpZHg7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLAotICAgICAgIlNlZWsgcGVyZm9ybWVkOiBzdHIgJXUsIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGlkeCAldSwgdHMgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCB0c19lbmQgJSIgR1NUX1RJTUVfRk9STUFUICIsIG9mZiAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBvZmZfZW5kICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHN0cl9udW0sIG1pbl9vZmZzZXQsIGluZGV4LAotICAgICAgR1NUX1RJTUVfQVJHUyAoc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcCksCi0gICAgICBHU1RfVElNRV9BUkdTIChzdHJlYW0tPmN1cnJlbnRfdHNfZW5kKSwgc3RyZWFtLT5jdXJyZW50X29mZnNldCwKLSAgICAgIHN0cmVhbS0+Y3VycmVudF9vZmZzZXRfZW5kKTsKLQotICAvKiBpbmRleCBkYXRhIHJlZmVycyB0byBkYXRhLCBub3QgY2h1bmsgaGVhZGVyIChmb3IgcHVsbCBtb2RlIGNvbnZlbmllbmNlKSAqLwotICBtaW5fb2Zmc2V0IC09IDg7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInNlZWtpbmcgdG8gY2h1bmsgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBtaW5fb2Zmc2V0KTsKLQotICBpZiAoIXBlcmZvcm1fc2Vla190b19vZmZzZXQgKGF2aSwgbWluX29mZnNldCwgZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzZWVrIGV2ZW50IGZhaWxlZCEiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAqIEhhbmRsZSB3aGV0aGVyIHdlIGNhbiBwZXJmb3JtIHRoZSBzZWVrIGV2ZW50IG9yIGlmIHdlIGhhdmUgdG8gbGV0IHRoZSBjaGFpbgotICogZnVuY3Rpb24gaGFuZGxlIHNlZWtzIHRvIGJ1aWxkIHRoZSBzZWVrIGluZGV4ZXMgZmlyc3QuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9oYW5kbGVfc2Vla19wdXNoIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIC8qIGNoZWNrIGZvciBoYXZpbmcgcGFyc2VkIGluZGV4IGFscmVhZHkgKi8KLSAgaWYgKCFhdmktPmhhdmVfaW5kZXgpIHsKLSAgICBndWludDY0IG9mZnNldCA9IDA7Ci0gICAgZ2Jvb2xlYW4gYnVpbGRpbmdfaW5kZXg7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGF2aSk7Ci0gICAgLyogaGFuZGxlIHRoZSBzZWVrIGV2ZW50IGluIHRoZSBjaGFpbiBmdW5jdGlvbiAqLwotICAgIGF2aS0+c3RhdGUgPSBHU1RfQVZJX0RFTVVYX1NFRUs7Ci0KLSAgICAvKiBjb3B5IHRoZSBldmVudCAqLwotICAgIGlmIChhdmktPnNlZWtfZXZlbnQpCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGF2aS0+c2Vla19ldmVudCk7Ci0gICAgYXZpLT5zZWVrX2V2ZW50ID0gZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotCi0gICAgLyogc2V0IHRoZSBidWlsZGluZ19pbmRleCBmbGFnIHNvIHRoYXQgb25seSBvbmUgdGhyZWFkIGNhbiBzZXR1cCB0aGUKLSAgICAgKiBzdHJ1Y3R1cmVzIGZvciBpbmRleCBzZWVraW5nLiAqLwotICAgIGJ1aWxkaW5nX2luZGV4ID0gYXZpLT5idWlsZGluZ19pbmRleDsKLSAgICBpZiAoIWJ1aWxkaW5nX2luZGV4KSB7Ci0gICAgICBhdmktPmJ1aWxkaW5nX2luZGV4ID0gVFJVRTsKLSAgICAgIGlmIChhdmktPnN0cmVhbVswXS5pbmRleGVzKSB7Ci0gICAgICAgIGF2aS0+b2RtbF9zdHJlYW0gPSAwOwotICAgICAgICBhdmktPm9kbWxfc3ViaWR4cyA9IGF2aS0+c3RyZWFtW2F2aS0+b2RtbF9zdHJlYW1dLmluZGV4ZXM7Ci0gICAgICAgIG9mZnNldCA9IGF2aS0+b2RtbF9zdWJpZHhzWzBdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb2Zmc2V0ID0gYXZpLT5pZHgxX29mZnNldDsKLSAgICAgIH0KLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGF2aSk7Ci0KLSAgICBpZiAoIWJ1aWxkaW5nX2luZGV4KSB7Ci0gICAgICAvKiBzZWVrIHRvIHRoZSBmaXJzdCBzdWJpbmRleCBvciBsZWdhY3kgaW5kZXggKi8KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoYXZpLAotICAgICAgICAgICJTZWVraW5nIHRvIGxlZ2FjeSBpbmRleC9maXJzdCBzdWJpbmRleCBhdCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgIG9mZnNldCk7Ci0gICAgICByZXR1cm4gcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoYXZpLCBvZmZzZXQsIGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCkpOwotICAgIH0KLQotICAgIC8qIEZJWE1FOiB3ZSBoYXZlIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZSBzbyB0aGF0IHdlIGRvbid0IGJsb2NrIHRoZSBzZWVrCi0gICAgICogdGhyZWFkLgotICAgICAqIE5vdGU6IG1heWJlIGl0IGlzIE9LIHRvIHJldHVybiB0cnVlIGlmIHdlJ3JlIHN0aWxsIGJ1aWxkaW5nIHRoZSBpbmRleCAqLwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIGF2aV9kZW11eF9oYW5kbGVfc2Vla19wdXNoIChhdmksIHBhZCwgZXZlbnQpOwotfQotCi0vKgotICogSGVscGVyIGZvciBnc3RfYXZpX2RlbXV4X2ludmVydCgpCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotc3dhcF9saW5lIChndWludDggKiBkMSwgZ3VpbnQ4ICogZDIsIGd1aW50OCAqIHRtcCwgZ2ludCBieXRlcykKLXsKLSAgbWVtY3B5ICh0bXAsIGQxLCBieXRlcyk7Ci0gIG1lbWNweSAoZDEsIGQyLCBieXRlcyk7Ci0gIG1lbWNweSAoZDIsIHRtcCwgYnl0ZXMpOwotfQotCi0KLSNkZWZpbmUgZ3N0X2F2aV9kZW11eF9pc191bmNvbXByZXNzZWQoZm91cmNjKQkJXAotICAoZm91cmNjID09IEdTVF9SSUZGX0RJQiB8fAkJCQlcCi0gICBmb3VyY2MgPT0gR1NUX1JJRkZfcmdiIHx8CQkJCVwKLSAgIGZvdXJjYyA9PSBHU1RfUklGRl9SR0IgfHwgZm91cmNjID09IEdTVF9SSUZGX1JBVykKLQotLyoKLSAqIEludmVydCBESUIgYnVmZmVycy4uLiBUYWtlcyBleGlzdGluZyBidWZmZXIgYW5kCi0gKiByZXR1cm5zIGVpdGhlciB0aGUgYnVmZmVyIG9yIGEgbmV3IG9uZSAod2l0aCBvbGQKLSAqIG9uZSBkZXJlZmVyZW5jZWQpLgotICogRklYTUU6IGNhbid0IHdlIHByZWFsbG9jYXRlIHRtcD8gYW5kIHJlbWVtYmVyIHN0cmlkZSwgYnBwPwotICovCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9hdmlfZGVtdXhfaW52ZXJ0IChHc3RBdmlTdHJlYW0gKiBzdHJlYW0sIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ2ludCB5LCB3LCBoOwotICBnaW50IGJwcCwgc3RyaWRlOwotICBndWludDggKnRtcCA9IE5VTEw7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDMyIGZvdXJjYzsKLQotICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlICE9IEdTVF9SSUZGX0ZDQ192aWRzKQotICAgIHJldHVybiBidWY7Ci0KLSAgaWYgKHN0cmVhbS0+c3RyZi52aWRzID09IE5VTEwpIHsKLSAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byByZXRyaWV2ZSB2aWRzIGZvciBzdHJlYW0iKTsKLSAgICByZXR1cm4gYnVmOwotICB9Ci0KLSAgZm91cmNjID0gKHN0cmVhbS0+c3RyZi52aWRzLT5jb21wcmVzc2lvbikgPwotICAgICAgc3RyZWFtLT5zdHJmLnZpZHMtPmNvbXByZXNzaW9uIDogc3RyZWFtLT5zdHJoLT5mY2NfaGFuZGxlcjsKLSAgaWYgKCFnc3RfYXZpX2RlbXV4X2lzX3VuY29tcHJlc3NlZCAoZm91cmNjKSkgewotICAgIHJldHVybiBidWY7ICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgbm9uIERJQiBidWZmZXJzICovCi0gIH0KLQotICAvKiByYXcgcmdiIGRhdGEgaXMgc3RvcmVkIHRvcGRvd24sIGJ1dCBpbnN0ZWFkIG9mIGludmVydGluZyB0aGUgYnVmZmVyLCAqLwotICAvKiBzb21lIHRvb2xzIGp1c3QgbmVnYXRlIHRoZSBoZWlnaHQgZmllbGQgaW4gdGhlIGhlYWRlciAoZS5nLiBmZm1wZWcpICovCi0gIGlmICgoKGdpbnQzMikgc3RyZWFtLT5zdHJmLnZpZHMtPmhlaWdodCkgPCAwKQotICAgIHJldHVybiBidWY7Ci0KLSAgaCA9IHN0cmVhbS0+c3RyZi52aWRzLT5oZWlnaHQ7Ci0gIHcgPSBzdHJlYW0tPnN0cmYudmlkcy0+d2lkdGg7Ci0gIGJwcCA9IHN0cmVhbS0+c3RyZi52aWRzLT5iaXRfY250ID8gc3RyZWFtLT5zdHJmLnZpZHMtPmJpdF9jbnQgOiA4OwotICBzdHJpZGUgPSBHU1RfUk9VTkRfVVBfNCAodyAqIChicHAgLyA4KSk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgaWYgKG1hcC5zaXplIDwgKHN0cmlkZSAqIGgpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJCdWZmZXIgaXMgc21hbGxlciB0aGFuIHJlcG9ydGVkIFdpZHRoIHggSGVpZ2h0IHggRGVwdGgiKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIHJldHVybiBidWY7Ci0gIH0KLQotICB0bXAgPSBnX21hbGxvYyAoc3RyaWRlKTsKLQotICBmb3IgKHkgPSAwOyB5IDwgaCAvIDI7IHkrKykgewotICAgIHN3YXBfbGluZSAobWFwLmRhdGEgKyBzdHJpZGUgKiB5LCBtYXAuZGF0YSArIHN0cmlkZSAqIChoIC0gMSAtIHkpLCB0bXAsCi0gICAgICAgIHN0cmlkZSk7Ci0gIH0KLQotICBnX2ZyZWUgKHRtcCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICAvKiBhcHBlbmQgcGFsZXR0ZSB0byBwYWxldHRlZCBSR0I4IGJ1ZmZlciBkYXRhICovCi0gIGlmIChzdHJlYW0tPnJnYjhfcGFsZXR0ZSAhPSBOVUxMKQotICAgIGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChidWYsIGdzdF9idWZmZXJfcmVmIChzdHJlYW0tPnJnYjhfcGFsZXR0ZSkpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9hZGRfYXNzb2MgKEdzdEF2aURlbXV4ICogYXZpLCBHc3RBdmlTdHJlYW0gKiBzdHJlYW0sCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZ3VpbnQ2NCBvZmZzZXQsIGdib29sZWFuIGtleWZyYW1lKQotewotICAvKiBkbyBub3QgYWRkIGluZGVmaW5pdGVseSBmb3Igb3Blbi1lbmRlZCBzdHJlYW1pbmcgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGF2aS0+ZWxlbWVudF9pbmRleCAmJiBhdmktPnNlZWthYmxlKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChhdmksICJhZGRpbmcgYXNzb2NpYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICItPiAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLCBvZmZzZXQpOwotICAgIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKGF2aS0+ZWxlbWVudF9pbmRleCwgYXZpLT5pbmRleF9pZCwKLSAgICAgICAga2V5ZnJhbWUgPyBHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCA6Ci0gICAgICAgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wLAotICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBvZmZzZXQsIE5VTEwpOwotICAgIC8qIGN1cnJlbnRfZW50cnkgaXMgREVGQVVMVCAoZnJhbWUgIykgKi8KLSAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uIChhdmktPmVsZW1lbnRfaW5kZXgsIHN0cmVhbS0+aW5kZXhfaWQsCi0gICAgICAgIGtleWZyYW1lID8gR1NUX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQgOgotICAgICAgICBHU1RfQVNTT0NJQVRJT05fRkxBR19ERUxUQV9VTklULCBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCwKLSAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgb2Zmc2V0LCBHU1RfRk9STUFUX0RFRkFVTFQsIHN0cmVhbS0+Y3VycmVudF9lbnRyeSwKLSAgICAgICAgTlVMTCk7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKgotICogUmV0dXJucyB0aGUgYWdncmVnYXRlZCBHc3RGbG93UmV0dXJuLgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9kZW11eF9jb21iaW5lX2Zsb3dzIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QXZpU3RyZWFtICogc3RyZWFtLAotICAgIEdzdEZsb3dSZXR1cm4gcmV0KQotewotICBHU1RfTE9HX09CSkVDVCAoYXZpLCAiU3RyZWFtICVzOiVzIGZsb3cgcmV0dXJuOiAlcyIsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHN0cmVhbS0+cGFkKSwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICByZXQgPSBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfcGFkX2Zsb3cgKGF2aS0+Zmxvd2NvbWJpbmVyLCBzdHJlYW0tPnBhZCwgcmV0KTsKLSAgR1NUX0xPR19PQkpFQ1QgKGF2aSwgImNvbWJpbmVkIHRvIHJldHVybiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBtb3ZlIEBzdHJlYW0gdG8gdGhlIG5leHQgcG9zaXRpb24gaW4gaXRzIGluZGV4ICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9kZW11eF9hZHZhbmNlIChHc3RBdmlEZW11eCAqIGF2aSwgR3N0QXZpU3RyZWFtICogc3RyZWFtLAotICAgIEdzdEZsb3dSZXR1cm4gcmV0KQotewotICBndWludCBvbGRfZW50cnksIG5ld19lbnRyeTsKLQotICBvbGRfZW50cnkgPSBzdHJlYW0tPmN1cnJlbnRfZW50cnk7Ci0gIC8qIG1vdmUgZm9yd2FyZHMgKi8KLSAgbmV3X2VudHJ5ID0gb2xkX2VudHJ5ICsgMTsKLQotICAvKiBzZWUgaWYgd2UgcmVhY2hlZCB0aGUgZW5kICovCi0gIGlmIChuZXdfZW50cnkgPj0gc3RyZWFtLT5zdG9wX2VudHJ5KSB7Ci0gICAgaWYgKGF2aS0+c2VnbWVudC5yYXRlIDwgMC4wKSB7Ci0gICAgICBpZiAoc3RyZWFtLT5zdGVwX2VudHJ5ID09IHN0cmVhbS0+c3RhcnRfZW50cnkpIHsKLSAgICAgICAgLyogd2Ugc3RlcHBlZCBhbGwgdGhlIHdheSB0byB0aGUgc3RhcnQsIGVvcyAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJyZXZlcnNlIHJlYWNoZWQgc3RhcnQgJXUiLCBzdHJlYW0tPnN0YXJ0X2VudHJ5KTsKLSAgICAgICAgZ290byBlb3M7Ci0gICAgICB9Ci0gICAgICAvKiBiYWNrd2FyZHMsIHN0b3AgYmVjb21lcyBzdGVwLCBmaW5kIGEgbmV3IHN0ZXAgKi8KLSAgICAgIHN0cmVhbS0+c3RvcF9lbnRyeSA9IHN0cmVhbS0+c3RlcF9lbnRyeTsKLSAgICAgIHN0cmVhbS0+c3RlcF9lbnRyeSA9IGdzdF9hdmlfZGVtdXhfaW5kZXhfcHJldiAoYXZpLCBzdHJlYW0sCi0gICAgICAgICAgc3RyZWFtLT5zdG9wX2VudHJ5LCBUUlVFKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLAotICAgICAgICAgICJyZXZlcnNlIHBsYXliYWNrIGp1bXA6IHN0YXJ0ICV1LCBzdGVwICV1LCBzdG9wICV1IiwKLSAgICAgICAgICBzdHJlYW0tPnN0YXJ0X2VudHJ5LCBzdHJlYW0tPnN0ZXBfZW50cnksIHN0cmVhbS0+c3RvcF9lbnRyeSk7Ci0KLSAgICAgIC8qIGFuZCBzdGFydCBmcm9tIHRoZSBwcmV2aW91cyBrZXlmcmFtZSBub3cgKi8KLSAgICAgIG5ld19lbnRyeSA9IHN0cmVhbS0+c3RlcF9lbnRyeTsKLSAgICB9IGVsc2UgewotICAgICAgLyogRU9TICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJmb3J3YXJkIHJlYWNoZWQgc3RvcCAldSIsIHN0cmVhbS0+c3RvcF9lbnRyeSk7Ci0gICAgICBnb3RvIGVvczsKLSAgICB9Ci0gIH0KLQotICBpZiAobmV3X2VudHJ5ICE9IG9sZF9lbnRyeSkgewotICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSA9IG5ld19lbnRyeTsKLSAgICBzdHJlYW0tPmN1cnJlbnRfdG90YWwgPSBzdHJlYW0tPmluZGV4W25ld19lbnRyeV0udG90YWw7Ci0KLSAgICBpZiAobmV3X2VudHJ5ID09IG9sZF9lbnRyeSArIDEpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIm1vdmVkIGZvcndhcmRzIGZyb20gJXUgdG8gJXUiLAotICAgICAgICAgIG9sZF9lbnRyeSwgbmV3X2VudHJ5KTsKLSAgICAgIC8qIHdlIHNpbXBseSBtb3ZlZCBvbmUgc3RlcCBmb3J3YXJkcywgcmV1c2UgY3VycmVudCBpbmZvICovCi0gICAgICBzdHJlYW0tPmN1cnJlbnRfdGltZXN0YW1wID0gc3RyZWFtLT5jdXJyZW50X3RzX2VuZDsKLSAgICAgIHN0cmVhbS0+Y3VycmVudF9vZmZzZXQgPSBzdHJlYW0tPmN1cnJlbnRfb2Zmc2V0X2VuZDsKLSAgICAgIGdzdF9hdmlfZGVtdXhfZ2V0X2J1ZmZlcl9pbmZvIChhdmksIHN0cmVhbSwgbmV3X2VudHJ5LAotICAgICAgICAgIE5VTEwsICZzdHJlYW0tPmN1cnJlbnRfdHNfZW5kLCBOVUxMLCAmc3RyZWFtLT5jdXJyZW50X29mZnNldF9lbmQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiB3ZSBtb3ZlZCBESVNDT05ULCBmdWxsIHVwZGF0ZSAqLwotICAgICAgZ3N0X2F2aV9kZW11eF9nZXRfYnVmZmVyX2luZm8gKGF2aSwgc3RyZWFtLCBuZXdfZW50cnksCi0gICAgICAgICAgJnN0cmVhbS0+Y3VycmVudF90aW1lc3RhbXAsICZzdHJlYW0tPmN1cnJlbnRfdHNfZW5kLAotICAgICAgICAgICZzdHJlYW0tPmN1cnJlbnRfb2Zmc2V0LCAmc3RyZWFtLT5jdXJyZW50X29mZnNldF9lbmQpOwotICAgICAgLyogYW5kIE1BUksgZGlzY29udCBmb3IgdGhpcyBzdHJlYW0gKi8KLSAgICAgIHN0cmVhbS0+ZGlzY29udCA9IFRSVUU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJNb3ZlZCBmcm9tICV1IHRvICV1LCB0cyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiLCB0c19lbmQgJSIgR1NUX1RJTUVfRk9STUFUICIsIG9mZiAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiwgb2ZmX2VuZCAlIiBHX0dVSU5UNjRfRk9STUFULCBvbGRfZW50cnksIG5ld19lbnRyeSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChzdHJlYW0tPmN1cnJlbnRfdGltZXN0YW1wKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChzdHJlYW0tPmN1cnJlbnRfdHNfZW5kKSwgc3RyZWFtLT5jdXJyZW50X29mZnNldCwKLSAgICAgICAgICBzdHJlYW0tPmN1cnJlbnRfb2Zmc2V0X2VuZCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1IgKi8KLWVvczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIndlIGFyZSBFT1MiKTsKLSAgICAvKiBzZXR0aW5nIGN1cnJlbnRfdGltZXN0YW1wIHRvIC0xIG1hcmtzIEVPUyAqLwotICAgIHN0cmVhbS0+Y3VycmVudF90aW1lc3RhbXAgPSAtMTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci19Ci0KLS8qIGZpbmQgdGhlIHN0cmVhbSB3aXRoIHRoZSBsb3dlc3QgY3VycmVudCBwb3NpdGlvbiB3aGVuIGdvaW5nIGZvcndhcmRzIG9yIHdpdGgKLSAqIHRoZSBoaWdoZXN0IHBvc2l0aW9uIHdoZW4gZ29pbmcgYmFja3dhcmRzLCB0aGlzIGlzIHRoZSBzdHJlYW0KLSAqIHdlIHNob3VsZCBwdXNoIGZyb20gbmV4dCAqLwotc3RhdGljIGdpbnQKLWdzdF9hdmlfZGVtdXhfZmluZF9uZXh0IChHc3RBdmlEZW11eCAqIGF2aSwgZ2Zsb2F0IHJhdGUpCi17Ci0gIGd1aW50NjQgbWluX3RpbWUsIG1heF90aW1lOwotICBndWludCBzdHJlYW1fbnVtLCBpOwotCi0gIG1heF90aW1lID0gMDsKLSAgbWluX3RpbWUgPSBHX01BWFVJTlQ2NDsKLSAgc3RyZWFtX251bSA9IC0xOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhdmktPm51bV9zdHJlYW1zOyBpKyspIHsKLSAgICBndWludDY0IHBvc2l0aW9uOwotICAgIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotCi0gICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW2ldOwotCi0gICAgLyogaWdub3JlIHN0cmVhbXMgdGhhdCBmaW5pc2hlZCAqLwotICAgIGlmIChzdHJlYW0tPnBhZCAmJiBHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4gKHN0cmVhbS0+cGFkKSA9PSBHU1RfRkxPV19FT1MpCi0gICAgICBjb250aW51ZTsKLQotICAgIHBvc2l0aW9uID0gc3RyZWFtLT5jdXJyZW50X3RpbWVzdGFtcDsKLQotICAgIC8qIHBvc2l0aW9uIG9mIC0xIGlzIEVPUyAqLwotICAgIGlmIChwb3NpdGlvbiAhPSAtMSkgewotICAgICAgaWYgKHJhdGUgPiAwLjAgJiYgcG9zaXRpb24gPCBtaW5fdGltZSkgewotICAgICAgICBtaW5fdGltZSA9IHBvc2l0aW9uOwotICAgICAgICBzdHJlYW1fbnVtID0gaTsKLSAgICAgIH0gZWxzZSBpZiAocmF0ZSA8IDAuMCAmJiBwb3NpdGlvbiA+PSBtYXhfdGltZSkgewotICAgICAgICBtYXhfdGltZSA9IHBvc2l0aW9uOwotICAgICAgICBzdHJlYW1fbnVtID0gaTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHN0cmVhbV9udW07Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2F2aV9kZW11eF9hbGlnbl9idWZmZXIgKEdzdEF2aURlbXV4ICogZGVtdXgsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBhbGlnbm1lbnQpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG1hcC5zaXplIDwgc2l6ZW9mIChndWludHB0cikpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBidWZmZXI7Ci0gIH0KLQotICBpZiAoKChndWludHB0cikgbWFwLmRhdGEpICYgKGFsaWdubWVudCAtIDEpKSB7Ci0gICAgR3N0QnVmZmVyICpuZXdfYnVmZmVyOwotICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zID0geyAwLCBhbGlnbm1lbnQgLSAxLCAwLCAwLCB9OwotCi0gICAgbmV3X2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLCAmcGFyYW1zKTsKLQotICAgIC8qIENvcHkgZGF0YSAiYnkgaGFuZCIsIHNvIGVuc3VyZSBhbGlnbm1lbnQgaXMga2VwdDogKi8KLSAgICBnc3RfYnVmZmVyX2ZpbGwgKG5ld19idWZmZXIsIDAsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAobmV3X2J1ZmZlciwgYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEsIDAsIC0xKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgIldlIHdhbnQgb3V0cHV0IGFsaWduZWQgb24gJSIgR19HU0laRV9GT1JNQVQgIiwgcmVhbGxvY2F0ZWQiLAotICAgICAgICBhbGlnbm1lbnQpOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gICAgcmV0dXJuIG5ld19idWZmZXI7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9kZW11eF9sb29wX2RhdGEgKEdzdEF2aURlbXV4ICogYXZpKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludCBzdHJlYW1fbnVtOwotICBHc3RBdmlTdHJlYW0gKnN0cmVhbTsKLSAgZ2Jvb2xlYW4gcHJvY2Vzc2VkID0gRkFMU0U7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludDY0IG9mZnNldCwgc2l6ZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZHVyYXRpb247Ci0gIGd1aW50NjQgb3V0X29mZnNldCwgb3V0X29mZnNldF9lbmQ7Ci0gIGdib29sZWFuIGtleWZyYW1lOwotICBHc3RBdmlJbmRleEVudHJ5ICplbnRyeTsKLQotICBkbyB7Ci0gICAgc3RyZWFtX251bSA9IGdzdF9hdmlfZGVtdXhfZmluZF9uZXh0IChhdmksIGF2aS0+c2VnbWVudC5yYXRlKTsKLQotICAgIC8qIGFsbCBhcmUgRU9TICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHN0cmVhbV9udW0gPT0gLTEpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJhbGwgc3RyZWFtcyBhcmUgRU9TIik7Ci0gICAgICBnb3RvIGVvczsKLSAgICB9Ci0KLSAgICAvKiB3ZSBoYXZlIHRoZSBzdHJlYW0gbm93ICovCi0gICAgc3RyZWFtID0gJmF2aS0+c3RyZWFtW3N0cmVhbV9udW1dOwotCi0gICAgLyogc2tpcCBzdHJlYW1zIHdpdGhvdXQgcGFkcyAqLwotICAgIGlmICghc3RyZWFtLT5wYWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgInNraXBwaW5nIGVudHJ5IGZyb20gc3RyZWFtICVkIHdpdGhvdXQgcGFkIiwKLSAgICAgICAgICBzdHJlYW1fbnVtKTsKLSAgICAgIGdvdG8gbmV4dDsKLSAgICB9Ci0KLSAgICAvKiBnZXQgdGhlIHRpbWluZyBpbmZvIGZvciB0aGUgZW50cnkgKi8KLSAgICB0aW1lc3RhbXAgPSBzdHJlYW0tPmN1cnJlbnRfdGltZXN0YW1wOwotICAgIGR1cmF0aW9uID0gc3RyZWFtLT5jdXJyZW50X3RzX2VuZCAtIHRpbWVzdGFtcDsKLSAgICBvdXRfb2Zmc2V0ID0gc3RyZWFtLT5jdXJyZW50X29mZnNldDsKLSAgICBvdXRfb2Zmc2V0X2VuZCA9IHN0cmVhbS0+Y3VycmVudF9vZmZzZXRfZW5kOwotCi0gICAgLyogZ2V0IHRoZSBlbnRyeSBkYXRhIGluZm8gKi8KLSAgICBlbnRyeSA9ICZzdHJlYW0tPmluZGV4W3N0cmVhbS0+Y3VycmVudF9lbnRyeV07Ci0gICAgb2Zmc2V0ID0gZW50cnktPm9mZnNldDsKLSAgICBzaXplID0gZW50cnktPnNpemU7Ci0gICAga2V5ZnJhbWUgPSBFTlRSWV9JU19LRVlGUkFNRSAoZW50cnkpOwotCi0gICAgLyogc2tpcCBlbXB0eSBlbnRyaWVzICovCi0gICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiU2tpcHBpbmcgZW50cnkgJXUgKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgJXApIiwKLSAgICAgICAgICBzdHJlYW0tPmN1cnJlbnRfZW50cnksIHNpemUsIHN0cmVhbS0+cGFkKTsKLSAgICAgIGdvdG8gbmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoYXZpLT5zZWdtZW50LnJhdGUgPiAwLjApIHsKLSAgICAgIC8qIG9ubHkgY2hlY2sgdGhpcyBmb3IgZm93YXJkcyBwbGF5YmFjayBmb3Igbm93ICovCi0gICAgICBpZiAoa2V5ZnJhbWUgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGF2aS0+c2VnbWVudC5zdG9wKQotICAgICAgICAgICYmICh0aW1lc3RhbXAgPiBhdmktPnNlZ21lbnQuc3RvcCkpIHsKLSAgICAgICAgZ290byBlb3Nfc3RvcDsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKGtleWZyYW1lICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChhdmktPnNlZ21lbnQuc3RhcnQpCi0gICAgICAgICAgJiYgKHRpbWVzdGFtcCA8IGF2aS0+c2VnbWVudC5zdGFydCkpCi0gICAgICAgIGdvdG8gZW9zX3N0b3A7Ci0gICAgfQotCi0gICAgR1NUX0xPRyAoInJlYWRpbmcgYnVmZmVyIChzaXplPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIiksIHN0cmVhbSAlZCwgcG9zICUiCi0gICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiAoMHglIiBHX0dJTlQ2NF9NT0RJRklFUiAieCksIGtmICVkIiwgc2l6ZSwKLSAgICAgICAgc3RyZWFtX251bSwgb2Zmc2V0LCBvZmZzZXQsIGtleWZyYW1lKTsKLQotICAgIC8qIEZJWE1FLCBjaGVjayBsYXJnZSBjaHVua3MgYW5kIGN1dCB0aGVtIHVwICovCi0KLSAgICAvKiBwdWxsIGluIHRoZSBkYXRhICovCi0gICAgYnVmID0gTlVMTDsKLSAgICByZXQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKGF2aS0+c2lua3BhZCwgb2Zmc2V0LCBzaXplLCAmYnVmKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBwdWxsX2ZhaWxlZDsKLQotICAgIC8qIGNoZWNrIGZvciBzaG9ydCBidWZmZXJzLCB0aGlzIGlzIEVPUyBhcyB3ZWxsICovCi0gICAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPCBzaXplKQotICAgICAgZ290byBzaG9ydF9idWZmZXI7Ci0KLSAgICAvKiBpbnZlcnQgdGhlIHBpY3R1cmUgaWYgbmVlZGVkLCBhbmQgYXBwZW5kIHBhbGV0dGUgZm9yIFJHQjhQICovCi0gICAgYnVmID0gZ3N0X2F2aV9kZW11eF9pbnZlcnQgKHN0cmVhbSwgYnVmKTsKLQotICAgIC8qIG1hcmsgbm9uLWtleWZyYW1lcyAqLwotICAgIGlmIChrZXlmcmFtZSB8fCBzdHJlYW0tPmlzX3JhdykgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICAgIEdTVF9CVUZGRVJfUFRTIChidWYpID0gdGltZXN0YW1wOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICAgIEdTVF9CVUZGRVJfUFRTIChidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICB9Ci0KLSAgICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IHRpbWVzdGFtcDsKLQotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IG91dF9vZmZzZXQ7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gb3V0X29mZnNldF9lbmQ7Ci0KLSAgICAvKiBtYXJrIGRpc2NvbnQgd2hlbiBwZW5kaW5nICovCi0gICAgaWYgKHN0cmVhbS0+ZGlzY29udCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAic2V0dGluZyBESVNDT05UIGZsYWciKTsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgc3RyZWFtLT5kaXNjb250ID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgfQotI2lmIDAKLSAgICBnc3RfYXZpX2RlbXV4X2FkZF9hc3NvYyAoYXZpLCBzdHJlYW0sIHRpbWVzdGFtcCwgb2Zmc2V0LCBrZXlmcmFtZSk7Ci0jZW5kaWYKLQotICAgIC8qIHVwZGF0ZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzZWdtZW50ICovCi0gICAgYXZpLT5zZWdtZW50LnBvc2l0aW9uID0gdGltZXN0YW1wOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiUHVzaGluZyBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiLCB0cyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBvZmYgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiLCBvZmZfZW5kICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSwgb3V0X29mZnNldCwgb3V0X29mZnNldF9lbmQpOwotCi0gICAgaWYgKHN0cmVhbS0+YWxpZ25tZW50ID4gMSkKLSAgICAgIGJ1ZiA9IGdzdF9hdmlfZGVtdXhfYWxpZ25fYnVmZmVyIChhdmksIGJ1Ziwgc3RyZWFtLT5hbGlnbm1lbnQpOwotICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoc3RyZWFtLT5wYWQsIGJ1Zik7Ci0KLSAgICAvKiBtYXJrIGFzIHByb2Nlc3NlZCwgd2UgaW5jcmVtZW50IHRoZSBmcmFtZSBhbmQgYnl0ZSBjb3VudGVycyB0aGVuCi0gICAgICogbGVhdmUgdGhlIHdoaWxlIGxvb3AgYW5kIHJldHVybiB0aGUgR3N0Rmxvd1JldHVybiAqLwotICAgIHByb2Nlc3NlZCA9IFRSVUU7Ci0KLSAgICBpZiAoYXZpLT5zZWdtZW50LnJhdGUgPCAwKSB7Ci0gICAgICBpZiAodGltZXN0YW1wID4gYXZpLT5zZWdtZW50LnN0b3AgJiYgcmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgICAvKiBJbiByZXZlcnNlIHBsYXliYWNrIHdlIGNhbiBnZXQgYSBHU1RfRkxPV19FT1Mgd2hlbgotICAgICAgICAgKiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCwgc28gd2UganVzdCBuZWVkIHRvIGp1bXAKLSAgICAgICAgICogYmFjayB0byB0aGUgcHJldmlvdXMgc2VjdGlvbi4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiZG93bnN0cmVhbSBoYXMgcmVhY2hlZCBlbmQgb2Ygc2VnbWVudCIpOwotICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgIH0KLSAgICB9Ci0gIG5leHQ6Ci0gICAgLyogbW92ZSB0byBuZXh0IGl0ZW0gKi8KLSAgICByZXQgPSBnc3RfYXZpX2RlbXV4X2FkdmFuY2UgKGF2aSwgc3RyZWFtLCByZXQpOwotCi0gICAgLyogY29tYmluZSBmbG93cyAqLwotICAgIHJldCA9IGdzdF9hdmlfZGVtdXhfY29tYmluZV9mbG93cyAoYXZpLCBzdHJlYW0sIHJldCk7Ci0gIH0gd2hpbGUgKCFwcm9jZXNzZWQpOwotCi1iZWFjaDoKLSAgcmV0dXJuIHJldDsKLQotICAvKiBzcGVjaWFsIGNhc2VzICovCi1lb3M6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJObyBzYW1wbGVzIGxlZnQgZm9yIGFueSBzdHJlYW1zIC0gRU9TIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLWVvc19zdG9wOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGF2aSwgIkZvdW5kIGtleWZyYW1lIGFmdGVyIHNlZ21lbnQsIgotICAgICAgICAiIHNldHRpbmcgRU9TICglIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCksIEdTVF9USU1FX0FSR1MgKGF2aS0+c2VnbWVudC5zdG9wKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIC8qIG1vdmUgdG8gbmV4dCBzdHJlYW0gKi8KLSAgICBnb3RvIG5leHQ7Ci0gIH0KLXB1bGxfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAicHVsbCByYW5nZSBmYWlsZWQ6IHBvcz0lIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICIgc2l6ZT0lIiBHX0dVSU5UNjRfRk9STUFULCBvZmZzZXQsIHNpemUpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLXNob3J0X2J1ZmZlcjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpLCAiU2hvcnQgcmVhZCBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiLCBvbmx5IGdvdCAlIiBHX0dTSVpFX0ZPUk1BVCAiLyUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiBieXRlcyAodHJ1bmNhdGVkIGZpbGU/KSIsIG9mZnNldCwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSwgc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotfQotCi0vKgotICogUmVhZCBkYXRhLiBJZiB3ZSBoYXZlIGFuIGluZGV4IGl0IGRlbGVnYXRlcyB0bwotICogZ3N0X2F2aV9kZW11eF9wcm9jZXNzX25leHRfZW50cnkoKS4KLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfZGVtdXhfc3RyZWFtX2RhdGEgKEdzdEF2aURlbXV4ICogYXZpKQotewotICBndWludDMyIHRhZyA9IDA7Ci0gIGd1aW50MzIgc2l6ZSA9IDA7Ci0gIGdpbnQgc3RyZWFtX25yID0gMDsKLSAgR3N0Rmxvd1JldHVybiByZXMgPSBHU1RfRkxPV19PSzsKLQotICBpZiAoR19VTkxJS0VMWSAoYXZpLT5oYXZlX2VvcykpIHsKLSAgICAvKiBDbGVhbiBhZGFwdGVyLCB3ZSdyZSBkb25lICovCi0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGF2aS0+YWRhcHRlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZIChhdmktPnRvZHJvcCkpIHsKLSAgICBndWludCBkcm9wOwotCi0gICAgaWYgKChkcm9wID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhdmktPmFkYXB0ZXIpKSkgewotICAgICAgaWYgKGRyb3AgPiBhdmktPnRvZHJvcCkKLSAgICAgICAgZHJvcCA9IGF2aS0+dG9kcm9wOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiRHJvcHBpbmcgJWQgYnl0ZXMiLCBkcm9wKTsKLSAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChhdmktPmFkYXB0ZXIsIGRyb3ApOwotICAgICAgYXZpLT50b2Ryb3AgLT0gZHJvcDsKLSAgICAgIGF2aS0+b2Zmc2V0ICs9IGRyb3A7Ci0gICAgfQotICB9Ci0KLSAgLyogSXRlcmF0ZSB1bnRpbCBuZWVkIG1vcmUgZGF0YSwgc28gYWRhcHRlciB3b24ndCBncm93IHRvbyBtdWNoICovCi0gIHdoaWxlICgxKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmtfaW5mbyAoYXZpLCAmdGFnLCAmc2l6ZSkpKSB7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHICgiVHJ5aW5nIGNodW5rICglIiBHU1RfRk9VUkNDX0ZPUk1BVCAiKSwgc2l6ZSAlZCIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSwgc2l6ZSk7Ci0KLSAgICBpZiAoR19MSUtFTFkgKCh0YWcgJiAweGZmKSA+PSAnMCcgJiYgKHRhZyAmIDB4ZmYpIDw9ICc5JyAmJgotICAgICAgICAgICAgKCh0YWcgPj4gOCkgJiAweGZmKSA+PSAnMCcgJiYgKCh0YWcgPj4gOCkgJiAweGZmKSA8PSAnOScpKSB7Ci0gICAgICBHU1RfTE9HICgiQ2h1bmsgb2siKTsKLSAgICB9IGVsc2UgaWYgKCh0YWcgJiAweGZmZmYpID09ICgoJ3gnIDw8IDgpIHwgJ2knKSkgewotICAgICAgR1NUX0RFQlVHICgiRm91bmQgc3ViLWluZGV4IHRhZyIpOwotICAgICAgaWYgKGdzdF9hdmlfZGVtdXhfcGVla19jaHVuayAoYXZpLCAmdGFnLCAmc2l6ZSkgfHwgc2l6ZSA9PSAwKSB7Ci0gICAgICAgIC8qIGFjY2VwdCAwIHNpemUgYnVmZmVyIGhlcmUgKi8KLSAgICAgICAgYXZpLT5hYm9ydF9idWZmZXJpbmcgPSBGQUxTRTsKLSAgICAgICAgR1NUX0RFQlVHICgiICBza2lwcGluZyAlZCBieXRlcyBmb3Igbm93Iiwgc2l6ZSk7Ci0gICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChhdmktPmFkYXB0ZXIsIDggKyBHU1RfUk9VTkRfVVBfMiAoc2l6ZSkpOwotICAgICAgfQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0gZWxzZSBpZiAodGFnID09IEdTVF9SSUZGX1RBR19SSUZGKSB7Ci0gICAgICAvKiBSSUZGIHRhZ3MgY2FuIGFwcGVhciBpbiBPRE1MIGZpbGVzLCBqdXN0IGp1bXAgb3ZlciB0aGVtICovCi0gICAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhdmktPmFkYXB0ZXIpID49IDEyKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIkZvdW5kIFJJRkYgdGFnLCBza2lwcGluZyBSSUZGIGhlYWRlciIpOwotICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYXZpLT5hZGFwdGVyLCAxMik7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0gZWxzZSBpZiAodGFnID09IEdTVF9SSUZGX1RBR19pZHgxKSB7Ci0gICAgICBHU1RfREVCVUcgKCJGb3VuZCBpbmRleCB0YWciKTsKLSAgICAgIGlmIChnc3RfYXZpX2RlbXV4X3BlZWtfY2h1bmsgKGF2aSwgJnRhZywgJnNpemUpIHx8IHNpemUgPT0gMCkgewotICAgICAgICAvKiBhY2NlcHQgMCBzaXplIGJ1ZmZlciBoZXJlICovCi0gICAgICAgIGF2aS0+YWJvcnRfYnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgICAgIEdTVF9ERUJVRyAoIiAgc2tpcHBpbmcgJWQgYnl0ZXMgZm9yIG5vdyIsIHNpemUpOwotICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYXZpLT5hZGFwdGVyLCA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9IGVsc2UgaWYgKHRhZyA9PSBHU1RfUklGRl9UQUdfTElTVCkgewotICAgICAgLyogbW92aSBjaHVua3MgbWlnaHQgYmUgZ3JvdXBlZCBpbiByZWMgbGlzdCAqLwotICAgICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYXZpLT5hZGFwdGVyKSA+PSAxMikgewotICAgICAgICBHU1RfREVCVUcgKCJGb3VuZCBMSVNUIHRhZywgc2tpcHBpbmcgTElTVCBoZWFkZXIiKTsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgMTIpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9IGVsc2UgaWYgKHRhZyA9PSBHU1RfUklGRl9UQUdfSlVOSyB8fCB0YWcgPT0gR1NUX1JJRkZfVEFHX0pVTlEpIHsKLSAgICAgIC8qIHJlYyBsaXN0IG1pZ2h0IGNvbnRhaW4gSlVOSyBjaHVua3MgKi8KLSAgICAgIEdTVF9ERUJVRyAoIkZvdW5kIEpVTksgdGFnIik7Ci0gICAgICBpZiAoZ3N0X2F2aV9kZW11eF9wZWVrX2NodW5rIChhdmksICZ0YWcsICZzaXplKSB8fCBzaXplID09IDApIHsKLSAgICAgICAgLyogYWNjZXB0IDAgc2l6ZSBidWZmZXIgaGVyZSAqLwotICAgICAgICBhdmktPmFib3J0X2J1ZmZlcmluZyA9IEZBTFNFOwotICAgICAgICBHU1RfREVCVUcgKCIgIHNraXBwaW5nICVkIGJ5dGVzIGZvciBub3ciLCBzaXplKTsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgOCArIEdTVF9ST1VORF9VUF8yIChzaXplKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVRyAoIk5vIG1vcmUgc3RyZWFtIGNodW5rcywgc2VuZCBFT1MiKTsKLSAgICAgIGF2aS0+aGF2ZV9lb3MgPSBUUlVFOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgICB9Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9hdmlfZGVtdXhfcGVla19jaHVuayAoYXZpLCAmdGFnLCAmc2l6ZSkpKSB7Ci0gICAgICAvKiBzdXBwb3NlZGx5IG9uZSBob3BlcyB0byBjYXRjaCBhIG5pY2VyIGNodW5rIGxhdGVyIG9uIC4uLiAqLwotICAgICAgLyogRklYTUUgPz8gZ2l2ZSB1cCBoZXJlIHJhdGhlciB0aGFuIHBvc3NpYmx5IGVuZGluZyB1cCBnb2luZwotICAgICAgICogdGhyb3VnaCB0aGUgd2hvbGUgZmlsZSAqLwotICAgICAgaWYgKGF2aS0+YWJvcnRfYnVmZmVyaW5nKSB7Ci0gICAgICAgIGF2aS0+YWJvcnRfYnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgOCk7Ci0gICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgICB9Ci0gICAgfQotICAgIEdTVF9ERUJVRyAoImNodW5rIElEICUiIEdTVF9GT1VSQ0NfRk9STUFUICIsIHNpemUgJXUiLAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHRhZyksIHNpemUpOwotCi0gICAgc3RyZWFtX25yID0gQ0hVTktJRF9UT19TVFJFQU1OUiAodGFnKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChzdHJlYW1fbnIgPCAwIHx8IHN0cmVhbV9uciA+PSBhdmktPm51bV9zdHJlYW1zKSkgewotICAgICAgLyogcmVjb3ZlcmFibGUgKi8KLSAgICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBzdHJlYW0gSUQgJWQgKCUiIEdTVF9GT1VSQ0NfRk9STUFUICIpIiwKLSAgICAgICAgICBzdHJlYW1fbnIsIEdTVF9GT1VSQ0NfQVJHUyAodGFnKSk7Ci0gICAgICBhdmktPm9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgOCArIEdTVF9ST1VORF9VUF8yIChzaXplKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdzdEF2aVN0cmVhbSAqc3RyZWFtOwotICAgICAgR3N0Q2xvY2tUaW1lIG5leHRfdHMgPSAwOwotICAgICAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotI2lmIDAKLSAgICAgIGd1aW50NjQgb2Zmc2V0OwotI2VuZGlmCi0gICAgICBnYm9vbGVhbiBzYXdfZGVzaXJlZF9rZiA9IHN0cmVhbV9uciAhPSBhdmktPm1haW5fc3RyZWFtCi0gICAgICAgICAgfHwgYXZpLT5vZmZzZXQgPj0gYXZpLT5zZWVrX2tmX29mZnNldDsKLQotICAgICAgaWYgKHN0cmVhbV9uciA9PSBhdmktPm1haW5fc3RyZWFtICYmIGF2aS0+b2Zmc2V0ID09IGF2aS0+c2Vla19rZl9vZmZzZXQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLCAiRGVzaXJlZCBrZXlmcmFtZSByZWFjaGVkIik7Ci0gICAgICAgIGF2aS0+c2Vla19rZl9vZmZzZXQgPSAwOwotICAgICAgfQotCi0gICAgICBpZiAoc2F3X2Rlc2lyZWRfa2YpIHsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGF2aS0+YWRhcHRlciwgOCk7Ci0gICAgICAgIC8qIGdldCBidWZmZXIgKi8KLSAgICAgICAgaWYgKHNpemUpIHsKLSAgICAgICAgICBidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYXZpLT5hZGFwdGVyLCBHU1RfUk9VTkRfVVBfMiAoc2l6ZSkpOwotICAgICAgICAgIC8qIHBhdGNoIHRoZSBzaXplICovCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYnVmID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpLAotICAgICAgICAgICAgIkRlc2lyZWQga2V5ZnJhbWUgbm90IHlldCByZWFjaGVkLCBmbHVzaGluZyBjaHVuayIpOwotICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYXZpLT5hZGFwdGVyLCA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpKTsKLSAgICAgIH0KLQotI2lmIDAKLSAgICAgIG9mZnNldCA9IGF2aS0+b2Zmc2V0OwotI2VuZGlmCi0gICAgICBhdmktPm9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotCi0gICAgICBzdHJlYW0gPSAmYXZpLT5zdHJlYW1bc3RyZWFtX25yXTsKLQotICAgICAgLyogc2V0IGRlbGF5IChpZiBhbnkpCi0gICAgICAgICBpZiAoc3RyZWFtLT5zdHJoLT5pbml0X2ZyYW1lcyA9PSBzdHJlYW0tPmN1cnJlbnRfZnJhbWUgJiYKLSAgICAgICAgIHN0cmVhbS0+ZGVsYXkgPT0gMCkKLSAgICAgICAgIHN0cmVhbS0+ZGVsYXkgPSBuZXh0X3RzOwotICAgICAgICovCi0KLSAgICAgIC8qIHBhcnNpbmcgb2YgY29ycmVzcG9uZGluZyBoZWFkZXIgbWF5IGhhdmUgZmFpbGVkICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoIXN0cmVhbS0+cGFkKSkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aSwgIm5vIHBhZCBmb3Igc3RyZWFtIElEICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgICAgaWYgKGJ1ZikKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogZ2V0IHRpbWUgb2YgdGhpcyBidWZmZXIgKi8KLSAgICAgICAgZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoc3RyZWFtLT5wYWQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgIChnaW50NjQgKikgJiBuZXh0X3RzKTsKLQotI2lmIDAKLSAgICAgICAgZ3N0X2F2aV9kZW11eF9hZGRfYXNzb2MgKGF2aSwgc3RyZWFtLCBuZXh0X3RzLCBvZmZzZXQsIEZBTFNFKTsKLSNlbmRpZgotCi0gICAgICAgIC8qIGluY3JlbWVudCBvdXIgcG9zaXRpb25zICovCi0gICAgICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSsrOwotICAgICAgICAvKiBhcyBpbiBwdWxsIG1vZGUsICd0b3RhbCcgaXMgZWl0aGVyIGJ5dGVzIChDQlIpIG9yIGZyYW1lcyAoVkJSKSAqLwotICAgICAgICBpZiAoc3RyZWFtLT5zdHJoLT50eXBlID09IEdTVF9SSUZGX0ZDQ19hdWRzICYmIHN0cmVhbS0+aXNfdmJyKSB7Ci0gICAgICAgICAgZ2ludCBibG9ja2FsaWduID0gc3RyZWFtLT5zdHJmLmF1ZHMtPmJsb2NrYWxpZ247Ci0gICAgICAgICAgaWYgKGJsb2NrYWxpZ24gPiAwKQotICAgICAgICAgICAgc3RyZWFtLT5jdXJyZW50X3RvdGFsICs9IERJVl9ST1VORF9VUCAoc2l6ZSwgYmxvY2thbGlnbik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyZWFtLT5jdXJyZW50X3RvdGFsKys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3RyZWFtLT5jdXJyZW50X3RvdGFsICs9IHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGF2aSwgImN1cnJlbnQgZW50cnkgJXUsIHRvdGFsICV1IiwKLSAgICAgICAgICAgIHN0cmVhbS0+Y3VycmVudF9lbnRyeSwgc3RyZWFtLT5jdXJyZW50X3RvdGFsKTsKLQotICAgICAgICAvKiB1cGRhdGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc2VnbWVudCAqLwotICAgICAgICBhdmktPnNlZ21lbnQucG9zaXRpb24gPSBuZXh0X3RzOwotCi0gICAgICAgIGlmIChzYXdfZGVzaXJlZF9rZiAmJiBidWYpIHsKLSAgICAgICAgICBHc3RDbG9ja1RpbWUgZHVyX3RzID0gMDsKLQotICAgICAgICAgIC8qIGludmVydCB0aGUgcGljdHVyZSBpZiBuZWVkZWQsIGFuZCBhcHBlbmQgcGFsZXR0ZSBmb3IgUkdCOFAgKi8KLSAgICAgICAgICBidWYgPSBnc3RfYXZpX2RlbXV4X2ludmVydCAoc3RyZWFtLCBidWYpOwotCi0gICAgICAgICAgZ3N0X3BhZF9xdWVyeV9wb3NpdGlvbiAoc3RyZWFtLT5wYWQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgKGdpbnQ2NCAqKSAmIGR1cl90cyk7Ci0KLSAgICAgICAgICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IG5leHRfdHM7Ci0gICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJfdHMgLSBuZXh0X3RzOwotICAgICAgICAgIGlmIChzdHJlYW0tPnN0cmgtPnR5cGUgPT0gR1NUX1JJRkZfRkNDX3ZpZHMpIHsKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gc3RyZWFtLT5jdXJyZW50X2VudHJ5IC0gMTsKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSA9IHN0cmVhbS0+Y3VycmVudF9lbnRyeTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgICAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksCi0gICAgICAgICAgICAgICJQdXNoaW5nIGJ1ZmZlciB3aXRoIHRpbWU9JSIgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uICUiCi0gICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAgICAgICAiIGFuZCBzaXplICVkIG92ZXIgcGFkICVzIiwgR1NUX1RJTUVfQVJHUyAobmV4dF90cyksCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpLAotICAgICAgICAgICAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSwgc2l6ZSwgR1NUX1BBRF9OQU1FIChzdHJlYW0tPnBhZCkpOwotCi0gICAgICAgICAgLyogbWFyayBkaXNjb250IHdoZW4gcGVuZGluZyAqLwotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPmRpc2NvbnQpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJTZXR0aW5nIERJU0NPTlQiKTsKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgICAgICAgc3RyZWFtLT5kaXNjb250ID0gRkFMU0U7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHN0cmVhbS0+YWxpZ25tZW50ID4gMSkKLSAgICAgICAgICAgIGJ1ZiA9IGdzdF9hdmlfZGVtdXhfYWxpZ25fYnVmZmVyIChhdmksIGJ1Ziwgc3RyZWFtLT5hbGlnbm1lbnQpOwotICAgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaCAoc3RyZWFtLT5wYWQsIGJ1Zik7Ci0gICAgICAgICAgYnVmID0gTlVMTDsKLQotICAgICAgICAgIC8qIGNvbWJpbmUgZmxvd3MgKi8KLSAgICAgICAgICByZXMgPSBnc3RfYXZpX2RlbXV4X2NvbWJpbmVfZmxvd3MgKGF2aSwgc3RyZWFtLCByZXMpOwotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChyZXMgIT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcgKCJQdXNoIGZhaWxlZDsgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiBTZW5kIHBlbmRpbmcgdGFncy4KLSAqLwotc3RhdGljIHZvaWQKLXB1c2hfdGFnX2xpc3RzIChHc3RBdmlEZW11eCAqIGF2aSkKLXsKLSAgZ3VpbnQgaTsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLQotICBpZiAoIWF2aS0+Z290X3RhZ3MpCi0gICAgcmV0dXJuOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIlB1c2hpbmcgcGVuZGluZyB0YWcgbGlzdHMiKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXZpLT5udW1fc3RyZWFtczsgaSsrKSB7Ci0gICAgR3N0QXZpU3RyZWFtICpzdHJlYW0gPSAmYXZpLT5zdHJlYW1baV07Ci0gICAgR3N0UGFkICpwYWQgPSBzdHJlYW0tPnBhZDsKLQotICAgIHRhZ3MgPSBzdHJlYW0tPnRhZ2xpc3Q7Ci0KLSAgICBpZiAocGFkICYmIHRhZ3MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdzKTsKLQotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfdGFnICh0YWdzKSk7Ci0gICAgICBzdHJlYW0tPnRhZ2xpc3QgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmICghKHRhZ3MgPSBhdmktPmdsb2JhbHRhZ3MpKQotICAgIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCwgIkFWSSIsIE5VTEwpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgIkdsb2JhbCB0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgdGFncyk7Ci0gIGdzdF90YWdfbGlzdF9zZXRfc2NvcGUgKHRhZ3MsIEdTVF9UQUdfU0NPUEVfR0xPQkFMKTsKLSAgZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50IChhdmksIGdzdF9ldmVudF9uZXdfdGFnICh0YWdzKSk7Ci0gIGF2aS0+Z2xvYmFsdGFncyA9IE5VTEw7Ci0gIGF2aS0+Z290X3RhZ3MgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdmlfZGVtdXhfbG9vcCAoR3N0UGFkICogcGFkKQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0QXZpRGVtdXggKmF2aSA9IEdTVF9BVklfREVNVVggKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKLQotICBzd2l0Y2ggKGF2aS0+c3RhdGUpIHsKLSAgICBjYXNlIEdTVF9BVklfREVNVVhfU1RBUlQ6Ci0gICAgICByZXMgPSBnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0X3B1bGwgKGF2aSk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAocmVzICE9IEdTVF9GTE9XX09LKSkgewotICAgICAgICBHU1RfV0FSTklORyAoInN0cmVhbV9pbml0IGZsb3c6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlcykpOwotICAgICAgICBnb3RvIHBhdXNlOwotICAgICAgfQotICAgICAgYXZpLT5zdGF0ZSA9IEdTVF9BVklfREVNVVhfSEVBREVSOwotICAgICAgLyogZmFsbC10aHJvdWdoICovCi0gICAgY2FzZSBHU1RfQVZJX0RFTVVYX0hFQURFUjoKLSAgICAgIHJlcyA9IGdzdF9hdmlfZGVtdXhfc3RyZWFtX2hlYWRlcl9wdWxsIChhdmkpOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKHJlcyAhPSBHU1RfRkxPV19PSykpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJzdHJlYW1faGVhZGVyIGZsb3c6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlcykpOwotICAgICAgICBnb3RvIHBhdXNlOwotICAgICAgfQotICAgICAgYXZpLT5zdGF0ZSA9IEdTVF9BVklfREVNVVhfTU9WSTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FWSV9ERU1VWF9NT1ZJOgotICAgICAgaWYgKEdfVU5MSUtFTFkgKGF2aS0+c2VnX2V2ZW50KSkgewotICAgICAgICBnc3RfYXZpX2RlbXV4X3B1c2hfZXZlbnQgKGF2aSwgYXZpLT5zZWdfZXZlbnQpOwotICAgICAgICBhdmktPnNlZ19ldmVudCA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoYXZpLT5nb3RfdGFncykpIHsKLSAgICAgICAgcHVzaF90YWdfbGlzdHMgKGF2aSk7Ci0gICAgICB9Ci0gICAgICAvKiBwcm9jZXNzIGVhY2ggaW5kZXggZW50cnkgaW4gdHVybiAqLwotICAgICAgcmVzID0gZ3N0X2F2aV9kZW11eF9sb29wX2RhdGEgKGF2aSk7Ci0KLSAgICAgIC8qIHBhdXNlIHdoZW4gZXJyb3IgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZIChyZXMgIT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgICAgIEdTVF9JTkZPICgic3RyZWFtX21vdmkgZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgICAgIGdvdG8gcGF1c2U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoYXZpLCAidW5rbm93biBzdGF0ZSAlZCIsIGF2aS0+c3RhdGUpOwotICAgICAgcmVzID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICBnb3RvIHBhdXNlOwotICB9Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotcGF1c2U6ewotCi0gICAgZ2Jvb2xlYW4gcHVzaF9lb3MgPSBGQUxTRTsKLSAgICBHU1RfTE9HX09CSkVDVCAoYXZpLCAicGF1c2luZyB0YXNrLCByZWFzb24gJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChhdmktPnNpbmtwYWQpOwotCi0gICAgaWYgKHJlcyA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGhhbmRsZSBlbmQtb2Ytc3RyZWFtL3NlZ21lbnQgKi8KLSAgICAgIC8qIHNvIGFsaWduIG91ciBwb3NpdGlvbiB3aXRoIHRoZSBlbmQgb2YgaXQsIGlmIHRoZXJlIGlzIG9uZQotICAgICAgICogdGhpcyBlbnN1cmVzIGEgc3Vic2VxdWVudCB3aWxsIGFycml2ZSBhdCBjb3JyZWN0IGJhc2UvYWNjIHRpbWUgKi8KLSAgICAgIGlmIChhdmktPnNlZ21lbnQucmF0ZSA+IDAuMCAmJgotICAgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChhdmktPnNlZ21lbnQuc3RvcCkpCi0gICAgICAgIGF2aS0+c2VnbWVudC5wb3NpdGlvbiA9IGF2aS0+c2VnbWVudC5zdG9wOwotICAgICAgZWxzZSBpZiAoYXZpLT5zZWdtZW50LnJhdGUgPCAwLjApCi0gICAgICAgIGF2aS0+c2VnbWVudC5wb3NpdGlvbiA9IGF2aS0+c2VnbWVudC5zdGFydDsKLSAgICAgIGlmIChhdmktPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHsKLSAgICAgICAgZ2ludDY0IHN0b3A7Ci0gICAgICAgIEdzdEV2ZW50ICpldmVudDsKLSAgICAgICAgR3N0TWVzc2FnZSAqbXNnOwotCi0gICAgICAgIGlmICgoc3RvcCA9IGF2aS0+c2VnbWVudC5zdG9wKSA9PSAtMSkKLSAgICAgICAgICBzdG9wID0gYXZpLT5zZWdtZW50LmR1cmF0aW9uOwotCi0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAoYXZpLCAic2VuZGluZyBzZWdtZW50X2RvbmUiKTsKLQotICAgICAgICBtc2cgPQotICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChhdmkpLAotICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzdG9wKTsKLSAgICAgICAgaWYgKGF2aS0+c2VnbWVudF9zZXFudW0pCi0gICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobXNnLCBhdmktPnNlZ21lbnRfc2VxbnVtKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChhdmkpLCBtc2cpOwotCi0gICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50X2RvbmUgKEdTVF9GT1JNQVRfVElNRSwgc3RvcCk7Ci0gICAgICAgIGlmIChhdmktPnNlZ21lbnRfc2VxbnVtKQotICAgICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgYXZpLT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICAgIGdzdF9hdmlfZGVtdXhfcHVzaF9ldmVudCAoYXZpLCBldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX2VvcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXMgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXMgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGZvciBmYXRhbCBlcnJvcnMgd2UgcG9zdCBhbiBlcnJvciBtZXNzYWdlLCB3cm9uZy1zdGF0ZSBpcwotICAgICAgICogbm90IGZhdGFsIGJlY2F1c2UgaXQgaGFwcGVucyBkdWUgdG8gZmx1c2hlcyBhbmQgb25seSBtZWFucwotICAgICAgICogdGhhdCB3ZSBzaG91bGQgc3RvcCBub3cuICovCi0gICAgICBHU1RfRUxFTUVOVF9GTE9XX0VSUk9SIChhdmksIHJlcyk7Ci0gICAgICBwdXNoX2VvcyA9IFRSVUU7Ci0gICAgfQotICAgIGlmIChwdXNoX2VvcykgewotICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGF2aSwgInNlbmRpbmcgZW9zIik7Ci0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOwotICAgICAgaWYgKGF2aS0+c2VnbWVudF9zZXFudW0pCi0gICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgYXZpLT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICBpZiAoIWdzdF9hdmlfZGVtdXhfcHVzaF9ldmVudCAoYXZpLCBldmVudCkgJiYgKHJlcyA9PSBHU1RfRkxPV19FT1MpKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhdmksIFNUUkVBTSwgREVNVVgsCi0gICAgICAgICAgICAoTlVMTCksICgiZ290IGVvcyBidXQgbm8gc3RyZWFtcyAoeWV0KSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9kZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdEF2aURlbXV4ICphdmkgPSBHU1RfQVZJX0RFTVVYIChwYXJlbnQpOwotICBnaW50IGk7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoYnVmKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGF2aSwgImdvdCBESVNDT05UIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGF2aS0+YWRhcHRlcik7Ci0gICAgLyogbWFyayBhbGwgc3RyZWFtcyBESVNDT05UICovCi0gICAgZm9yIChpID0gMDsgaSA8IGF2aS0+bnVtX3N0cmVhbXM7IGkrKykKLSAgICAgIGF2aS0+c3RyZWFtW2ldLmRpc2NvbnQgPSBUUlVFOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiU3RvcmUgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBpbiBhZGFwdGVyIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICBnc3RfYWRhcHRlcl9wdXNoIChhdmktPmFkYXB0ZXIsIGJ1Zik7Ci0KLSAgc3dpdGNoIChhdmktPnN0YXRlKSB7Ci0gICAgY2FzZSBHU1RfQVZJX0RFTVVYX1NUQVJUOgotICAgICAgaWYgKChyZXMgPSBnc3RfYXZpX2RlbXV4X3N0cmVhbV9pbml0X3B1c2ggKGF2aSkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgic3RyZWFtX2luaXQgZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVZJX0RFTVVYX0hFQURFUjoKLSAgICAgIGlmICgocmVzID0gZ3N0X2F2aV9kZW11eF9zdHJlYW1faGVhZGVyX3B1c2ggKGF2aSkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgic3RyZWFtX2hlYWRlciBmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVklfREVNVVhfTU9WSToKLSAgICAgIGlmIChHX1VOTElLRUxZIChhdmktPnNlZ19ldmVudCkpIHsKLSAgICAgICAgZ3N0X2F2aV9kZW11eF9wdXNoX2V2ZW50IChhdmksIGF2aS0+c2VnX2V2ZW50KTsKLSAgICAgICAgYXZpLT5zZWdfZXZlbnQgPSBOVUxMOwotICAgICAgfQotICAgICAgaWYgKEdfVU5MSUtFTFkgKGF2aS0+Z290X3RhZ3MpKSB7Ci0gICAgICAgIHB1c2hfdGFnX2xpc3RzIChhdmkpOwotICAgICAgfQotICAgICAgcmVzID0gZ3N0X2F2aV9kZW11eF9zdHJlYW1fZGF0YSAoYXZpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FWSV9ERU1VWF9TRUVLOgotICAgIHsKLSAgICAgIEdzdEV2ZW50ICpldmVudDsKLQotICAgICAgcmVzID0gR1NUX0ZMT1dfT0s7Ci0KLSAgICAgIC8qIG9idGFpbiBhbmQgcGFyc2UgaW5kZXhlcyAqLwotICAgICAgaWYgKGF2aS0+c3RyZWFtWzBdLmluZGV4ZXMgJiYgIWdzdF9hdmlfZGVtdXhfcmVhZF9zdWJpbmRleGVzX3B1c2ggKGF2aSkpCi0gICAgICAgIC8qIHNlZWsgaW4gc3ViaW5kZXggcmVhZCBmdW5jdGlvbiBmYWlsZWQgKi8KLSAgICAgICAgZ290byBpbmRleF9mYWlsZWQ7Ci0KLSAgICAgIGlmICghYXZpLT5zdHJlYW1bMF0uaW5kZXhlcyAmJiAhYXZpLT5oYXZlX2luZGV4Ci0gICAgICAgICAgJiYgYXZpLT5hdmloLT5mbGFncyAmIEdTVF9SSUZGX0FWSUhfSEFTSU5ERVgpCi0gICAgICAgIGdzdF9hdmlfZGVtdXhfc3RyZWFtX2luZGV4X3B1c2ggKGF2aSk7Ci0KLSAgICAgIGlmIChhdmktPmhhdmVfaW5kZXgpIHsKLSAgICAgICAgLyogdXNlIHRoZSBpbmRleGVzIG5vdyB0byBjb25zdHJ1Y3QgbmljZSBkdXJhdGlvbnMgKi8KLSAgICAgICAgZ3N0X2F2aV9kZW11eF9jYWxjdWxhdGVfZHVyYXRpb25zX2Zyb21faW5kZXggKGF2aSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBzdGlsbCBwYXJzaW5nIGluZGV4ZXMgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYXZpKTsKLSAgICAgIGV2ZW50ID0gYXZpLT5zZWVrX2V2ZW50OwotICAgICAgYXZpLT5zZWVrX2V2ZW50ID0gTlVMTDsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChhdmkpOwotCi0gICAgICAvKiBjYWxjdWxhdGUgYW5kIHBlcmZvcm0gc2VlayAqLwotICAgICAgaWYgKCFhdmlfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoYXZpLCBhdmktPnNpbmtwYWQsIGV2ZW50KSkgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLSAgICAgIH0KLQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBhdmktPnN0YXRlID0gR1NUX0FWSV9ERU1VWF9NT1ZJOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAgICgiSWxsZWdhbCBpbnRlcm5hbCBzdGF0ZSIpKTsKLSAgICAgIHJlcyA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJzdGF0ZTogJWQgcmVzOiVzIiwgYXZpLT5zdGF0ZSwKLSAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKLQotICBpZiAoR19VTkxJS0VMWSAoYXZpLT5hYm9ydF9idWZmZXJpbmcpKQotICAgIGdvdG8gYWJvcnRfYnVmZmVyaW5nOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1pbmRleF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYXZpLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksICgiZmFpbGVkIHRvIHJlYWQgaW5kZXhlcyIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXNlZWtfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoInB1c2ggbW9kZSBzZWVrIGZhaWxlZCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWFib3J0X2J1ZmZlcmluZzoKLSAgewotICAgIGF2aS0+YWJvcnRfYnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGF2aSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoInVuaGFuZGxlZCBidWZmZXIgc2l6ZSIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX2RlbXV4X3NpbmtfYWN0aXZhdGUgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBwdWxsX21vZGU7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgKCk7Ci0KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKHNpbmtwYWQsIHF1ZXJ5KSkgewotICAgIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotICAgIGdvdG8gYWN0aXZhdGVfcHVzaDsKLSAgfQotCi0gIHB1bGxfbW9kZSA9IGdzdF9xdWVyeV9oYXNfc2NoZWR1bGluZ19tb2RlX3dpdGhfZmxhZ3MgKHF1ZXJ5LAotICAgICAgR1NUX1BBRF9NT0RFX1BVTEwsIEdTVF9TQ0hFRFVMSU5HX0ZMQUdfU0VFS0FCTEUpOwotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICBpZiAoIXB1bGxfbW9kZSkKLSAgICBnb3RvIGFjdGl2YXRlX3B1c2g7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2lua3BhZCwgImFjdGl2YXRpbmcgcHVsbCIpOwotICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzaW5rcGFkLCBHU1RfUEFEX01PREVfUFVMTCwgVFJVRSk7Ci0KLWFjdGl2YXRlX3B1c2g6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rcGFkLCAiYWN0aXZhdGluZyBwdXNoIik7Ci0gICAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc2lua3BhZCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9kZW11eF9zaW5rX2FjdGl2YXRlX21vZGUgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RBdmlEZW11eCAqYXZpID0gR1NUX0FWSV9ERU1VWCAocGFyZW50KTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICBhdmktPnN0cmVhbWluZyA9IEZBTFNFOwotICAgICAgICByZXMgPSBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHNpbmtwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9hdmlfZGVtdXhfbG9vcCwKLSAgICAgICAgICAgIHNpbmtwYWQsIE5VTEwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9zdG9wX3Rhc2sgKHNpbmtwYWQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgR1NUX0RFQlVHICgiYXZpOiBhY3RpdmF0aW5nIHB1c2gvY2hhaW4gZnVuY3Rpb24iKTsKLSAgICAgICAgYXZpLT5zdHJlYW1pbmcgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHICgiYXZpOiBkZWFjdGl2YXRpbmcgcHVzaC9jaGFpbiBmdW5jdGlvbiIpOwotICAgICAgfQotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9kZW11eF9zZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KQotewotICBHc3RBdmlEZW11eCAqYXZpID0gR1NUX0FWSV9ERU1VWCAoZWxlbWVudCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChhdmkpOwotICBpZiAoYXZpLT5lbGVtZW50X2luZGV4KQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGF2aS0+ZWxlbWVudF9pbmRleCk7Ci0gIGlmIChpbmRleCkgewotICAgIGF2aS0+ZWxlbWVudF9pbmRleCA9IGdzdF9vYmplY3RfcmVmIChpbmRleCk7Ci0gIH0gZWxzZSB7Ci0gICAgYXZpLT5lbGVtZW50X2luZGV4ID0gTlVMTDsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYXZpKTsKLSAgLyogb2JqZWN0IGxvY2sgbWlnaHQgYmUgdGFrZW4gYWdhaW4gKi8KLSAgaWYgKGluZGV4KQotICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChpbmRleCwgR1NUX09CSkVDVF9DQVNUIChlbGVtZW50KSwgJmF2aS0+aW5kZXhfaWQpOwotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJTZXQgaW5kZXggJSIgR1NUX1BUUl9GT1JNQVQsIGF2aS0+ZWxlbWVudF9pbmRleCk7Ci19Ci0KLXN0YXRpYyBHc3RJbmRleCAqCi1nc3RfYXZpX2RlbXV4X2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEluZGV4ICpyZXN1bHQgPSBOVUxMOwotICBHc3RBdmlEZW11eCAqYXZpID0gR1NUX0FWSV9ERU1VWCAoZWxlbWVudCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChhdmkpOwotICBpZiAoYXZpLT5lbGVtZW50X2luZGV4KQotICAgIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChhdmktPmVsZW1lbnRfaW5kZXgpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYXZpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmksICJSZXR1cm5pbmcgaW5kZXggJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9hdmlfZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RBdmlEZW11eCAqYXZpID0gR1NUX0FWSV9ERU1VWCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGF2aS0+c3RyZWFtaW5nID0gRkFMU0U7Ci0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmYXZpLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdvdG8gZG9uZTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgYXZpLT5oYXZlX2luZGV4ID0gRkFMU0U7Ci0gICAgICBnc3RfYXZpX2RlbXV4X3Jlc2V0IChhdmkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvYXZpL2dzdGF2aWRlbXV4LmggYi9nc3QvYXZpL2dzdGF2aWRlbXV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTQ2YTIuLjAwMDAwMDAKLS0tIGEvZ3N0L2F2aS9nc3RhdmlkZW11eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IE5va2lhIENvcnBvcmF0aW9uIChjb250YWN0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+KQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQVZJX0RFTVVYX0hfXwotI2RlZmluZSBfX0dTVF9BVklfREVNVVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJhdmktaWRzLmgiCi0jaW5jbHVkZSAiZ3N0L3JpZmYvcmlmZi1pZHMuaCIKLSNpbmNsdWRlICJnc3QvcmlmZi9yaWZmLXJlYWQuaCIKLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9BVklfREVNVVggXAotICAoZ3N0X2F2aV9kZW11eF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0FWSV9ERU1VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfQVZJX0RFTVVYLCBHc3RBdmlEZW11eCkpCi0jZGVmaW5lIEdTVF9BVklfREVNVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9BVklfREVNVVgsIEdzdEF2aURlbXV4Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVZJX0RFTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9BVklfREVNVVgpKQotI2RlZmluZSBHU1RfSVNfQVZJX0RFTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfQVZJX0RFTVVYKSkKLQotI2RlZmluZSBHU1RfQVZJX0RFTVVYX01BWF9TVFJFQU1TICAgICAgIDE2Ci0KLSNkZWZpbmUgQ0hVTktJRF9UT19TVFJFQU1OUihjaHVua2lkKSBcCi0gICgoKChjaHVua2lkKSAmIDB4ZmYpIC0gJzAnKSAqIDEwICsgXAotICAgKCgoY2h1bmtpZCkgPj4gOCkgJiAweGZmKSAtICcwJykKLQotCi0vKiBuZXcgaW5kZXggZW50cmllcyAyNCBieXRlcyAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBndWludDMyICAgICAgICBmbGFnczsKLSAgZ3VpbnQzMiAgICAgICAgc2l6ZTsgICAgLyogYnl0ZXMgb2YgdGhlIGRhdGEgKi8KLSAgZ3VpbnQ2NCAgICAgICAgb2Zmc2V0OyAgLyogZGF0YSBvZmZzZXQgaW4gZmlsZSAqLwotICBndWludDY0ICAgICAgICB0b3RhbDsgICAvKiB0b3RhbCBieXRlcyBiZWZvcmUgKi8KLX0gR3N0QXZpSW5kZXhFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAvKiBpbmRleCBvZiB0aGlzIHN0cmVhbWNvbnRleHQgKi8KLSAgZ3VpbnQgICAgICAgICAgbnVtOwotCi0gIC8qIHBhZCovCi0gIEdzdFBhZCAgICAgICAgKnBhZDsKLSAgZ2Jvb2xlYW4gICAgICAgZXhwb3NlZDsKLQotICAvKiBzdHJlYW0gaW5mbyBhbmQgaGVhZGVycyAqLwotICBnc3RfcmlmZl9zdHJoICpzdHJoOwotICB1bmlvbiB7Ci0gICAgZ3N0X3JpZmZfc3RyZl92aWRzICp2aWRzOwotICAgIGdzdF9yaWZmX3N0cmZfYXVkcyAqYXVkczsKLSAgICBnc3RfcmlmZl9zdHJmX2lhdnMgKmlhdnM7Ci0gICAgZ3BvaW50ZXIgICAgIGRhdGE7Ci0gIH0gc3RyZjsKLSAgR3N0QnVmZmVyICAgICAqZXh0cmFkYXRhLCAqaW5pdGRhdGE7Ci0gIEdzdEJ1ZmZlciAgICAgKnJnYjhfcGFsZXR0ZTsKLSAgZ2NoYXIgICAgICAgICAqbmFtZTsKLQotICAvKiB0aGUgc3RhcnQvc3RlcC9zdG9wIGVudHJpZXMgKi8KLSAgZ3VpbnQgICAgICAgICAgc3RhcnRfZW50cnk7Ci0gIGd1aW50ICAgICAgICAgIHN0ZXBfZW50cnk7Ci0gIGd1aW50ICAgICAgICAgIHN0b3BfZW50cnk7Ci0KLSAgLyogY3VycmVudCBpbmRleCBlbnRyeSAqLwotICBndWludCAgICAgICAgICBjdXJyZW50X2VudHJ5OwotICAvKiBwb3NpdGlvbiAoYnl0ZSwgZnJhbWUsIHRpbWUpIGZvciBjdXJyZW50X2VudHJ5ICovCi0gIGd1aW50ICAgICAgICAgIGN1cnJlbnRfdG90YWw7Ci0gIEdzdENsb2NrVGltZSAgIGN1cnJlbnRfdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgICBjdXJyZW50X3RzX2VuZDsKLSAgZ3VpbnQ2NCAgICAgICAgY3VycmVudF9vZmZzZXQ7Ci0gIGd1aW50NjQgICAgICAgIGN1cnJlbnRfb2Zmc2V0X2VuZDsKLQotICBnYm9vbGVhbiAgICAgICBkaXNjb250OwotCi0gIC8qIHN0cmVhbSBsZW5ndGggKi8KLSAgZ3VpbnQ2NCAgICAgICAgdG90YWxfYnl0ZXM7Ci0gIGd1aW50MzIgICAgICAgIHRvdGFsX2Jsb2NrczsKLSAgZ3VpbnQgICAgICAgICAgbl9rZXlmcmFtZXM7Ci0gIC8qIHN0cmVhbSBsZW5ndGggYWNjb3JkaW5nIHRvIGluZGV4ICovCi0gIEdzdENsb2NrVGltZSAgIGlkeF9kdXJhdGlvbjsKLSAgLyogc3RyZWFtIGxlbmd0aCBhY2NvcmRpbmcgdG8gaGVhZGVyICovCi0gIEdzdENsb2NrVGltZSAgIGhkcl9kdXJhdGlvbjsKLSAgLyogc3RyZWFtIGxlbmd0aCBiYXNlZCBvbiBoZWFkZXIvaW5kZXggKi8KLSAgR3N0Q2xvY2tUaW1lICAgZHVyYXRpb247Ci0KLSAgLyogVkJSIGluZGljYXRvciAqLwotICBnYm9vbGVhbiAgICAgICBpc192YnI7Ci0KLSAgLyogb3BlbkRNTCBzdXBwb3J0IChmb3IgZmlsZXMgPjRHQikgKi8KLSAgZ2Jvb2xlYW4gICAgICAgc3VwZXJpbmRleDsKLSAgZ3VpbnQ2NCAgICAgICAqaW5kZXhlczsKLQotICAvKiBuZXcgaW5kZXhlcyAqLwotICBHc3RBdmlJbmRleEVudHJ5ICppbmRleDsgICAgIC8qIGFycmF5IHdpdGggaW5kZXggZW50cmllcyAqLwotICBndWludCAgICAgICAgICAgICBpZHhfbjsgICAgIC8qIG51bWJlciBvZiBlbnRyaWVzICovCi0gIGd1aW50ICAgICAgICAgICAgIGlkeF9tYXg7ICAgLyogbWF4IGFsbG9jYXRlZCBzaXplIG9mIGVudHJpZXMgKi8KLQotICBHc3RUYWdMaXN0CSp0YWdsaXN0OwotCi0gIGdpbnQgICAgICAgICAgIGluZGV4X2lkOwotICBnYm9vbGVhbiBpc19yYXc7Ci0gIGdzaXplIGFsaWdubWVudDsKLX0gR3N0QXZpU3RyZWFtOwotCi10eXBlZGVmIGVudW0gewotICBHU1RfQVZJX0RFTVVYX1NUQVJULAotICBHU1RfQVZJX0RFTVVYX0hFQURFUiwKLSAgR1NUX0FWSV9ERU1VWF9NT1ZJLAotICBHU1RfQVZJX0RFTVVYX1NFRUssCi19IEdzdEF2aURlbXV4U3RhdGU7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9BVklfREVNVVhfSEVBREVSX1RBR19MSVNULAotICBHU1RfQVZJX0RFTVVYX0hFQURFUl9BVklILAotICBHU1RfQVZJX0RFTVVYX0hFQURFUl9FTEVNRU5UUywKLSAgR1NUX0FWSV9ERU1VWF9IRUFERVJfSU5GTywKLSAgR1NUX0FWSV9ERU1VWF9IRUFERVJfSlVOSywKLSAgR1NUX0FWSV9ERU1VWF9IRUFERVJfREFUQQotfSBHc3RBdmlEZW11eEhlYWRlclN0YXRlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXZpRGVtdXggewotICBHc3RFbGVtZW50ICAgICBwYXJlbnQ7Ci0KLSAgLyogcGFkcyAqLwotICBHc3RQYWQgICAgICAgICpzaW5rcGFkOwotCi0gIC8qIEFWSSBkZWNvZGluZyBzdGF0ZSAqLwotICBHc3RBdmlEZW11eFN0YXRlIHN0YXRlOwotICBHc3RBdmlEZW11eEhlYWRlclN0YXRlIGhlYWRlcl9zdGF0ZTsKLSAgZ3VpbnQ2NCAgICAgICAgb2Zmc2V0OwotICBnYm9vbGVhbiAgICAgICBhYm9ydF9idWZmZXJpbmc7Ci0KLSAgLyogd2hlbiB3ZSBsb2FkZWQgdGhlIGluZGV4ZXMgKi8KLSAgZ2Jvb2xlYW4gICAgICAgaGF2ZV9pbmRleDsKLSAgLyogaW5kZXggb2Zmc2V0IGluIHRoZSBmaWxlICovCi0gIGd1aW50NjQgICAgICAgIGluZGV4X29mZnNldDsKLQotICAvKiBzdHJlYW1zICovCi0gIEdzdEF2aVN0cmVhbSAgIHN0cmVhbVtHU1RfQVZJX0RFTVVYX01BWF9TVFJFQU1TXTsKLSAgZ3VpbnQgICAgICAgICAgbnVtX3N0cmVhbXM7Ci0gIGd1aW50ICAgICAgICAgIG51bV92X3N0cmVhbXM7Ci0gIGd1aW50ICAgICAgICAgIG51bV9hX3N0cmVhbXM7Ci0gIGd1aW50ICAgICAgICAgIG51bV90X3N0cmVhbXM7ICAgLyogc3VidGl0bGUgdGV4dCBzdHJlYW1zICovCi0gIGd1aW50ICAgICAgICAgIG51bV9zcF9zdHJlYW1zOyAgLyogc3VicGljdHVyZSBzdHJlYW1zICovCi0KLSAgZ3VpbnQgICAgICAgICAgbWFpbl9zdHJlYW07IC8qIHVzZWQgZm9yIHNlZWtpbmcgKi8KLQotICBHc3RGbG93Q29tYmluZXIgKmZsb3djb21iaW5lcjsKLQotICBnYm9vbGVhbiAgICAgICBoYXZlX2dyb3VwX2lkOwotICBndWludCAgICAgICAgICBncm91cF9pZDsKLQotICAvKiBmb3Igc3RyZWFtaW5nIG1vZGUgKi8KLSAgZ2Jvb2xlYW4gICAgICAgc3RyZWFtaW5nOwotICBnYm9vbGVhbiAgICAgICBoYXZlX2VvczsKLSAgR3N0QWRhcHRlciAgICAqYWRhcHRlcjsKLSAgZ3VpbnQgICAgICAgICAgdG9kcm9wOwotCi0gIC8qIHNvbWUgc3RyZWFtIGluZm8gZm9yIGxlbmd0aCAqLwotICBnc3RfcmlmZl9hdmloICphdmloOwotICBHc3RDbG9ja1RpbWUgICBkdXJhdGlvbjsKLQotICAvKiBzZWdtZW50IGluIFRJTUUgKi8KLSAgR3N0U2VnbWVudCAgICAgc2VnbWVudDsKLSAgZ3VpbnQzMiAgICAgICAgc2VnbWVudF9zZXFudW07Ci0KLSAgLyogcGVuZGluZyB0YWdzL2V2ZW50cyAqLwotICBHc3RFdmVudCAgICAgICpzZWdfZXZlbnQ7Ci0gIEdzdFRhZ0xpc3QJKmdsb2JhbHRhZ3M7Ci0gIGdib29sZWFuCSBnb3RfdGFnczsKLQotI2lmIDAKLSAgLyogZ3N0IGluZGV4IHN1cHBvcnQgKi8KLSAgR3N0SW5kZXggICAgICAqZWxlbWVudF9pbmRleDsKLSAgZ2ludCAgICAgICAgICAgaW5kZXhfaWQ7Ci0jZW5kaWYKLQotICBnYm9vbGVhbiAgICAgICBzZWVrYWJsZTsKLQotICBndWludDY0ICAgICAgICBmaXJzdF9tb3ZpX29mZnNldDsKLSAgZ3VpbnQ2NCAgICAgICAgaWR4MV9vZmZzZXQ7IC8qIG9mZnNldCBpbiBmaWxlIG9mIGxpc3QvY2h1bmsgYWZ0ZXIgbW92aSAqLwotICBHc3RFdmVudCAgICAgICpzZWVrX2V2ZW50OwotCi0gIGdib29sZWFuICAgICAgIGJ1aWxkaW5nX2luZGV4OwotICBndWludCAgICAgICAgICBvZG1sX3N0cmVhbTsKLSAgZ3VpbnQgICAgICAgICAgb2RtbF9zdWJpZHg7Ci0gIGd1aW50NjQgICAgICAgKm9kbWxfc3ViaWR4czsKLQotICBndWludDY0ICAgICAgICBzZWVrX2tmX29mZnNldDsgLyogb2Zmc2V0IG9mIHRoZSBrZXlmcmFtZSB0byB3aGljaCB3ZSB3YW50IHRvIHNlZWsgKi8KLX0gR3N0QXZpRGVtdXg7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdmlEZW11eENsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX0gR3N0QXZpRGVtdXhDbGFzczsKLQotR1R5cGUgICAgICAgICAgIGdzdF9hdmlfZGVtdXhfZ2V0X3R5cGUgICAgICAgICAgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQVZJX0RFTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2F2aS9nc3RhdmltdXguYyBiL2dzdC9hdmkvZ3N0YXZpbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5M2VkNDQuLjAwMDAwMDAKLS0tIGEvZ3N0L2F2aS9nc3RhdmltdXguYworKysgL2Rldi9udWxsCkBAIC0xLDIzMDMgKzAsMCBAQAotLyogQVZJIG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgICAgICAgIChDKSAyMDA2IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogYmFzZWQgb246Ci0gKiAtIHRoZSBvbGQgYXZpbXV4ZXIgKGJ5IFdpbSBUYXltYW5zKQotICogLSB4YXd0didzIGF2aXdyaXRlciAoYnkgR2VyZCBLbm9ycikKLSAqIC0gbWpwZWd0b29scycgYXZpbGliIChieSBSYWluZXIgSm9oYW5uaSkKLSAqIC0gb3BlbkRNTCBsYXJnZS1BVkkgZG9jcwotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWF2aW11eAotICoKLSAqIE11eGVzIHJhdyBvciBjb21wcmVzc2VkIGF1ZGlvIGFuZC9vciB2aWRlbyBzdHJlYW1zIGludG8gYW4gQVZJIGZpbGUuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmVzPC90aXRsZT4KLSAqIDxwYXJhPih3cml0ZSBldmVyeXRoaW5nIGluIG9uZSBsaW5lLCB3aXRob3V0IHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVycyk8L3BhcmE+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTI1MCBcCi0gKiAhICd2aWRlby94LXJhdyxmb3JtYXQ9KHN0cmluZylJNDIwLHdpZHRoPTMyMCxoZWlnaHQ9MjQwLGZyYW1lcmF0ZT0oZnJhY3Rpb24pMjUvMScgXAotICogISBxdWV1ZSAhIG11eC4gXAotICogYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTQ0MCAhIGF1ZGlvY29udmVydCBcCi0gKiAhICdhdWRpby94LXJhdyxyYXRlPTQ0MTAwLGNoYW5uZWxzPTInICEgcXVldWUgISBtdXguIFwKLSAqIGF2aW11eCBuYW1lPW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QuYXZpCi0gKiBdfCBUaGlzIHdpbGwgY3JlYXRlIGFuIC5BVkkgZmlsZSBjb250YWluaW5nIGFuIHVuY29tcHJlc3NlZCB2aWRlbyBzdHJlYW0KLSAqIHdpdGggYSB0ZXN0IHBpY3R1cmUgYW5kIGFuIHVuY29tcHJlc3NlZCBhdWRpbyBzdHJlYW0gY29udGFpbmluZyBhCi0gKiB0ZXN0IHNvdW5kLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBudW0tYnVmZmVycz0yNTAgXAotICogISAndmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0zMjAsaGVpZ2h0PTI0MCxmcmFtZXJhdGU9KGZyYWN0aW9uKTI1LzEnIFwKLSAqICEgeHZpZGVuYyAhIHF1ZXVlICEgbXV4LiBcCi0gKiBhdWRpb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9NDQwICEgYXVkaW9jb252ZXJ0ICEgJ2F1ZGlvL3gtcmF3LHJhdGU9NDQxMDAsY2hhbm5lbHM9MicgXAotICogISBsYW1lICEgcXVldWUgISBtdXguIFwKLSAqIGF2aW11eCBuYW1lPW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QuYXZpCi0gKiBdfCBUaGlzIHdpbGwgY3JlYXRlIGFuIC5BVkkgZmlsZSBjb250YWluaW5nIHRoZSBzYW1lIHRlc3QgdmlkZW8gYW5kIHNvdW5kCi0gKiBhcyBhYm92ZSwgb25seSB0aGF0IGJvdGggc3RyZWFtcyB3aWxsIGJlIGNvbXByZXNzZWQgdGhpcyB0aW1lLiBUaGlzIHdpbGwKLSAqIG9ubHkgd29yayBpZiB5b3UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGVuY29kZXIgZWxlbWVudHMgaW5zdGFsbGVkIG9mIGNvdXJzZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRld3JpdGVyLmg+Ci0KLSNpbmNsdWRlICJnc3RhdmltdXguaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoYXZpbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGF2aW11eF9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9CSUdGSUxFCi19OwotCi0jZGVmaW5lIERFRkFVTFRfQklHRklMRSBUUlVFCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LW1zdmlkZW8iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb19zaW5rX2ZhY3RvcnkgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgidmlkZW9fJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgWVVZMiwgSTQyMCwgQkdSLCBCR1J4LCBCR1JBLCBHUkFZOCwgVVlWWSB9LCAiCi0gICAgICAgICJ3aWR0aCA9IChpbnQpIFsgMTYsIDQwOTYgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMCwgTUFYIF07ICIKLSAgICAgICAgImltYWdlL2pwZWcsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSBbIDE2LCA0MDk2IF0sICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXTsgIgotICAgICAgICAidmlkZW8veC1kaXZ4LCAiCi0gICAgICAgICJ3aWR0aCA9IChpbnQpIFsgMTYsIDQwOTYgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMCwgTUFYIF0sICIKLSAgICAgICAgImRpdnh2ZXJzaW9uID0gKGludCkgWyAzLCA1IF07ICIKLSAgICAgICAgInZpZGVvL3gtbXNtcGVnLCAiCi0gICAgICAgICJ3aWR0aCA9IChpbnQpIFsgMTYsIDQwOTYgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMCwgTUFYIF0sICIKLSAgICAgICAgIm1zbXBlZ3ZlcnNpb24gPSAoaW50KSBbIDQxLCA0MyBdOyAiCi0gICAgICAgICJ2aWRlby9tcGVnLCAiCi0gICAgICAgICJ3aWR0aCA9IChpbnQpIFsgMTYsIDQwOTYgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMCwgTUFYIF0sICIKLSAgICAgICAgIm1wZWd2ZXJzaW9uID0gKGludCkgeyAxLCAyLCA0fSwgIgotICAgICAgICAic3lzdGVtc3RyZWFtID0gKGJvb2xlYW4pIEZBTFNFOyAiCi0gICAgICAgICJ2aWRlby94LWgyNjMsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSBbIDE2LCA0MDk2IF0sICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXTsgIgotICAgICAgICAidmlkZW8veC1oMjY0LCAiCi0gICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgYnl0ZS1zdHJlYW0sICIKLSAgICAgICAgImFsaWdubWVudCA9IChzdHJpbmcpIGF1LCAiCi0gICAgICAgICJ3aWR0aCA9IChpbnQpIFsgMTYsIDQwOTYgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFsgMCwgTUFYIF07ICIKLSAgICAgICAgInZpZGVvL3gtZHYsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgNzIwLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSB7IDU3NiwgNDgwIH0sICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXSwgIgotICAgICAgICAic3lzdGVtc3RyZWFtID0gKGJvb2xlYW4pIEZBTFNFOyAiCi0gICAgICAgICJ2aWRlby94LWh1ZmZ5dXYsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSBbIDE2LCA0MDk2IF0sICIgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXTsiCi0gICAgICAgICJ2aWRlby94LXdtdiwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDE2LCA0MDk2IF0sICIKLSAgICAgICAgImhlaWdodCA9IChpbnQpIFsgMTYsIDQwOTYgXSwgIiAiZnJhbWVyYXRlID0gKGZyYWN0aW9uKSBbIDAsIE1BWCBdLCAiCi0gICAgICAgICJ3bXZ2ZXJzaW9uID0gKGludCkgWyAxLCAzXTsiCi0gICAgICAgICJpbWFnZS94LWpwYywgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDEsIDIxNDc0ODM2NDcgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxLCAyMTQ3NDgzNjQ3IF0sICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXTsiCi0gICAgICAgICJ2aWRlby94LXZwOCwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDEsIDIxNDc0ODM2NDcgXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWyAxLCAyMTQ3NDgzNjQ3IF0sICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXTsiCi0gICAgICAgICJpbWFnZS9wbmcsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWyAxNiwgNDA5NiBdLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSBbIDE2LCA0MDk2IF0sIGZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvX3NpbmtfZmFjdG9yeSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJhdWRpb18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgeyBVOCwgUzE2TEUgfSwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMTAwMCwgOTYwMDAgXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXTsgIgotICAgICAgICAiYXVkaW8vbXBlZywgIgotICAgICAgICAibXBlZ3ZlcnNpb24gPSAoaW50KSAxLCAiCi0gICAgICAgICJsYXllciA9IChpbnQpIFsgMSwgMyBdLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxMDAwLCA5NjAwMCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdOyAiCi0gICAgICAgICJhdWRpby9tcGVnLCAiCi0gICAgICAgICJtcGVndmVyc2lvbiA9IChpbnQpIDQsICIKLSAgICAgICAgInN0cmVhbS1mb3JtYXQgPSAoc3RyaW5nKSByYXcsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEwMDAsIDk2MDAwIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF07ICIKLS8qI2lmIDAgVkM2IGRvZXNuJ3Qgc3VwcG9ydCAjaWYgaGVyZSAuLi4KLSAgICAgICAgImF1ZGlvL3gtdm9yYmlzLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxMDAwLCA5NjAwMCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdOyAiCi0jZW5kaWYqLwotICAgICAgICAiYXVkaW8veC1hYzMsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEwMDAsIDk2MDAwIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCA2IF07ICIKLSAgICAgICAgImF1ZGlvL3gtYWxhdywgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMTAwMCwgNDgwMDAgXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXTsgIgotICAgICAgICAiYXVkaW8veC1tdWxhdywgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMTAwMCwgNDgwMDAgXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXTsgIgotICAgICAgICAiYXVkaW8veC13bWEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEwMDAsIDk2MDAwIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0sICIKLSAgICAgICAgIndtYXZlcnNpb24gPSAoaW50KSBbIDEsIDIgXSAiKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdmlfbXV4X3BhZF9yZXNldCAoR3N0QXZpUGFkICogYXZpcGFkLCBnYm9vbGVhbiBmcmVlKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2F2aV9tdXhfY29sbGVjdF9wYWRzIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0QXZpTXV4ICogYXZpbXV4KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXZpX211eF9oYW5kbGVfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkLAotICAgIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0RXZlbnQgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBHc3RQYWQgKmdzdF9hdmlfbXV4X3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXZpX211eF9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7Ci1zdGF0aWMgdm9pZCBnc3RfYXZpX211eF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXZpX211eF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2F2aV9tdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotI2RlZmluZSBnc3RfYXZpX211eF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0QXZpTXV4LCBnc3RfYXZpX211eCwgR1NUX1RZUEVfRUxFTUVOVCwKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1RBR19TRVRURVIsIE5VTEwpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9hdmlfbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RBdmlNdXggKm11eCA9IEdTVF9BVklfTVVYIChvYmplY3QpOwotICBHU0xpc3QgKm5vZGU7Ci0KLSAgLyogY29tcGxldGVseSBmcmVlIGVhY2ggc2lua3BhZCAqLwotICBub2RlID0gbXV4LT5zaW5rcGFkczsKLSAgd2hpbGUgKG5vZGUpIHsKLSAgICBHc3RBdmlQYWQgKmF2aXBhZCA9IChHc3RBdmlQYWQgKikgbm9kZS0+ZGF0YTsKLQotICAgIG5vZGUgPSBub2RlLT5uZXh0OwotCi0gICAgZ3N0X2F2aV9tdXhfcGFkX3Jlc2V0IChhdmlwYWQsIFRSVUUpOwotICAgIGdfZnJlZSAoYXZpcGFkKTsKLSAgfQotICBnX3NsaXN0X2ZyZWUgKG11eC0+c2lua3BhZHMpOwotICBtdXgtPnNpbmtwYWRzID0gTlVMTDsKLQotICBnX2ZyZWUgKG11eC0+aWR4KTsKLSAgbXV4LT5pZHggPSBOVUxMOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG11eC0+Y29sbGVjdCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9tdXhfY2xhc3NfaW5pdCAoR3N0QXZpTXV4Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChhdmltdXhfZGVidWcsICJhdmltdXgiLCAwLCAiTXV4ZXIgZm9yIEFWSSBzdHJlYW1zIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2F2aV9tdXhfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXZpX211eF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2F2aV9tdXhfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CSUdGSUxFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJiaWdmaWxlIiwgIkJpZ2ZpbGUgU3VwcG9ydCAoPjJHQikiLAotICAgICAgICAgICJTdXBwb3J0IGZvciBvcGVuRE1MLTIuMCAoYmlnKSBBVkkgZmlsZXMiLCBERUZBVUxUX0JJR0ZJTEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXZpX211eF9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXZpX211eF9yZWxlYXNlX3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXZpX211eF9jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZhdWRpb19zaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZ2aWRlb19zaW5rX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBdmkgbXV4ZXIiLAotICAgICAgIkNvZGVjL011eGVyIiwKLSAgICAgICJNdXhlcyBhdWRpbyBhbmQgdmlkZW8gaW50byBhbiBhdmkgc3RyZWFtIiwKLSAgICAgICJHU3RyZWFtZXIgbWFpbnRhaW5lcnMgPGdzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmc+Iik7Ci19Ci0KLS8qIHJlc2V0IHBhZCB0byBpbml0aWFsIHN0YXRlCi0gKiBmcmVlIC0gaWYgdHJ1ZSwgcmVsZWFzZSBhbGwsIG5vdCBvbmx5IHN0cmVhbSByZWxhdGVkLCBkYXRhICovCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9tdXhfcGFkX3Jlc2V0IChHc3RBdmlQYWQgKiBhdmlwYWQsIGdib29sZWFuIGZyZWUpCi17Ci0gIC8qIGdlbmVyaWMgcGFydCAqLwotICBtZW1zZXQgKCYoYXZpcGFkLT5oZHIpLCAwLCBzaXplb2YgKGdzdF9yaWZmX3N0cmgpKTsKLQotICBtZW1zZXQgKCYoYXZpcGFkLT5pZHhbMF0pLCAwLCBzaXplb2YgKGF2aXBhZC0+aWR4KSk7Ci0KLSAgaWYgKGZyZWUpIHsKLSAgICBnX2ZyZWUgKGF2aXBhZC0+dGFnKTsKLSAgICBhdmlwYWQtPnRhZyA9IE5VTEw7Ci0gICAgZ19mcmVlIChhdmlwYWQtPmlkeF90YWcpOwotICAgIGF2aXBhZC0+aWR4X3RhZyA9IE5VTEw7Ci0gIH0KLQotICBpZiAoYXZpcGFkLT5pc192aWRlbykgewotICAgIEdzdEF2aVZpZGVvUGFkICp2aWRwYWQgPSAoR3N0QXZpVmlkZW9QYWQgKikgYXZpcGFkOwotCi0gICAgYXZpcGFkLT5oZHIudHlwZSA9IEdTVF9NQUtFX0ZPVVJDQyAoJ3YnLCAnaScsICdkJywgJ3MnKTsKLSAgICBpZiAodmlkcGFkLT52aWRzX2NvZGVjX2RhdGEpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHZpZHBhZC0+dmlkc19jb2RlY19kYXRhKTsKLSAgICAgIHZpZHBhZC0+dmlkc19jb2RlY19kYXRhID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAodmlkcGFkLT5wcmVwZW5kX2J1ZmZlcikgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodmlkcGFkLT5wcmVwZW5kX2J1ZmZlcik7Ci0gICAgICB2aWRwYWQtPnByZXBlbmRfYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBtZW1zZXQgKCYodmlkcGFkLT52aWRzKSwgMCwgc2l6ZW9mIChnc3RfcmlmZl9zdHJmX3ZpZHMpKTsKLSAgICBtZW1zZXQgKCYodmlkcGFkLT52cHJwKSwgMCwgc2l6ZW9mIChnc3RfcmlmZl92cHJwKSk7Ci0gIH0gZWxzZSB7Ci0gICAgR3N0QXZpQXVkaW9QYWQgKmF1ZHBhZCA9IChHc3RBdmlBdWRpb1BhZCAqKSBhdmlwYWQ7Ci0KLSAgICBhdWRwYWQtPnNhbXBsZXMgPSAwOwotCi0gICAgYXZpcGFkLT5oZHIudHlwZSA9IEdTVF9NQUtFX0ZPVVJDQyAoJ2EnLCAndScsICdkJywgJ3MnKTsKLSAgICBpZiAoYXVkcGFkLT5hdWRzX2NvZGVjX2RhdGEpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGF1ZHBhZC0+YXVkc19jb2RlY19kYXRhKTsKLSAgICAgIGF1ZHBhZC0+YXVkc19jb2RlY19kYXRhID0gTlVMTDsKLSAgICB9Ci0KLSAgICBtZW1zZXQgKCYoYXVkcGFkLT5hdWRzKSwgMCwgc2l6ZW9mIChnc3RfcmlmZl9zdHJmX2F1ZHMpKTsKLQotICAgIGF1ZHBhZC0+YXVkaW9fc2l6ZSA9IDA7Ci0gICAgYXVkcGFkLT5hdWRpb190aW1lID0gMDsKLSAgICBhdWRwYWQtPm1heF9hdWRpb19jaHVuayA9IDA7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hdmlfbXV4X3Jlc2V0IChHc3RBdmlNdXggKiBhdmltdXgpCi17Ci0gIEdTTGlzdCAqbm9kZSwgKm5ld2xpc3QgPSBOVUxMOwotCi0gIC8qIGZyZWUgYW5kIHJlc2V0IGVhY2ggc2lua3BhZCAqLwotICBub2RlID0gYXZpbXV4LT5zaW5rcGFkczsKLSAgd2hpbGUgKG5vZGUpIHsKLSAgICBHc3RBdmlQYWQgKmF2aXBhZCA9IChHc3RBdmlQYWQgKikgbm9kZS0+ZGF0YTsKLQotICAgIG5vZGUgPSBub2RlLT5uZXh0OwotCi0gICAgZ3N0X2F2aV9tdXhfcGFkX3Jlc2V0IChhdmlwYWQsIEZBTFNFKTsKLSAgICAvKiBpZiB0aGlzIHBhZCBoYXMgY29sbGVjdGRhdGEsIGtlZXAgaXQsIG90aGVyd2lzZSBkdW1wIGl0IGNvbXBsZXRlbHkgKi8KLSAgICBpZiAoYXZpcGFkLT5jb2xsZWN0KQotICAgICAgbmV3bGlzdCA9IGdfc2xpc3RfYXBwZW5kIChuZXdsaXN0LCBhdmlwYWQpOwotICAgIGVsc2UgewotICAgICAgZ3N0X2F2aV9tdXhfcGFkX3Jlc2V0IChhdmlwYWQsIFRSVUUpOwotICAgICAgZ19mcmVlIChhdmlwYWQpOwotICAgIH0KLSAgfQotCi0gIC8qIGZyZWUgdGhlIG9sZCBsaXN0IG9mIHNpbmtwYWRzLCBvbmx5IGtlZXAgdGhlIHJlYWwgY29sbGVjdGluZyBvbmVzICovCi0gIGdfc2xpc3RfZnJlZSAoYXZpbXV4LT5zaW5rcGFkcyk7Ci0gIGF2aW11eC0+c2lua3BhZHMgPSBuZXdsaXN0OwotCi0gIC8qIGF2aSBkYXRhICovCi0gIGF2aW11eC0+bnVtX2ZyYW1lcyA9IDA7Ci0gIG1lbXNldCAoJihhdmltdXgtPmF2aV9oZHIpLCAwLCBzaXplb2YgKGdzdF9yaWZmX2F2aWgpKTsKLSAgYXZpbXV4LT5hdmlfaGRyLm1heF9icHMgPSAxMDAwMDAwMDsKLSAgYXZpbXV4LT5jb2RlY19kYXRhX3NpemUgPSAwOwotCi0gIGlmIChhdmltdXgtPnRhZ3Nfc25hcCkgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoYXZpbXV4LT50YWdzX3NuYXApOwotICAgIGF2aW11eC0+dGFnc19zbmFwID0gTlVMTDsKLSAgfQotCi0gIGdfZnJlZSAoYXZpbXV4LT5pZHgpOwotICBhdmltdXgtPmlkeCA9IE5VTEw7Ci0KLSAgLyogc3RhdGUgaW5mbyAqLwotICBhdmltdXgtPndyaXRlX2hlYWRlciA9IFRSVUU7Ci0KLSAgLyogdGFncyAqLwotICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIChHU1RfVEFHX1NFVFRFUiAoYXZpbXV4KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX211eF9pbml0IChHc3RBdmlNdXggKiBhdmltdXgpCi17Ci0gIGF2aW11eC0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfZmFjdG9yeSwgInNyYyIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChhdmltdXgtPnNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhdmltdXgpLCBhdmltdXgtPnNyY3BhZCk7Ci0KLSAgLyogcHJvcGVydHkgKi8KLSAgYXZpbXV4LT5lbmFibGVfbGFyZ2VfYXZpID0gREVGQVVMVF9CSUdGSUxFOwotCi0gIGF2aW11eC0+Y29sbGVjdCA9IGdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbiAoYXZpbXV4LT5jb2xsZWN0LAotICAgICAgKEdzdENvbGxlY3RQYWRzRnVuY3Rpb24pIChHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F2aV9tdXhfY29sbGVjdF9wYWRzKSksCi0gICAgICBhdmltdXgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9ldmVudF9mdW5jdGlvbiAoYXZpbXV4LT5jb2xsZWN0LAotICAgICAgKEdzdENvbGxlY3RQYWRzRXZlbnRGdW5jdGlvbikgKEdTVF9ERUJVR19GVU5DUFRSCi0gICAgICAgICAgKGdzdF9hdmlfbXV4X2hhbmRsZV9ldmVudCkpLCBhdmltdXgpOwotCi0gIC8qIHNldCB0byBjbGVhbiBzdGF0ZSAqLwotICBnc3RfYXZpX211eF9yZXNldCAoYXZpbXV4KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX211eF92aWRzaW5rX3NldF9jYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiB2c2NhcHMpCi17Ci0gIEdzdEF2aU11eCAqYXZpbXV4OwotICBHc3RBdmlWaWRlb1BhZCAqYXZpcGFkOwotICBHc3RBdmlDb2xsZWN0RGF0YSAqY29sbGVjdF9wYWQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBnY2hhciAqbWltZXR5cGU7Ci0gIGNvbnN0IEdWYWx1ZSAqZnBzLCAqcGFyOwotICBjb25zdCBHVmFsdWUgKmNvZGVjX2RhdGE7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCBwYXJfbiwgcGFyX2Q7Ci0gIGdib29sZWFuIGNvZGVjX2RhdGFfaW5faGVhZGVycyA9IFRSVUU7Ci0gIGdib29sZWFuIHZhbGlkX2NhcHMgPSBUUlVFOwotCi0gIGF2aW11eCA9IEdTVF9BVklfTVVYIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotCi0gIC8qIGZpbmQgc3RyZWFtIGRhdGEgKi8KLSAgY29sbGVjdF9wYWQgPSAoR3N0QXZpQ29sbGVjdERhdGEgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBnX2Fzc2VydCAoY29sbGVjdF9wYWQpOwotICBhdmlwYWQgPSAoR3N0QXZpVmlkZW9QYWQgKikgY29sbGVjdF9wYWQtPmF2aXBhZDsKLSAgZ19hc3NlcnQgKGF2aXBhZCk7Ci0gIGdfYXNzZXJ0IChhdmlwYWQtPnBhcmVudC5pc192aWRlbyk7Ci0gIGdfYXNzZXJ0IChhdmlwYWQtPnBhcmVudC5oZHIudHlwZSA9PSBHU1RfTUFLRV9GT1VSQ0MgKCd2JywgJ2knLCAnZCcsICdzJykpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aW11eCwgIiVzOiVzLCBjYXBzPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCB2c2NhcHMpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHZzY2FwcywgMCk7Ci0gIG1pbWV0eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKLQotICAvKiBnbG9iYWwgKi8KLSAgYXZpcGFkLT52aWRzLnNpemUgPSBzaXplb2YgKGdzdF9yaWZmX3N0cmZfdmlkcyk7Ci0gIGF2aXBhZC0+dmlkcy5wbGFuZXMgPSAxOwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpIHx8Ci0gICAgICAhZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KSkgewotICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gIH0KLQotICBhdmlwYWQtPnZpZHMud2lkdGggPSB3aWR0aDsKLSAgYXZpcGFkLT52aWRzLmhlaWdodCA9IGhlaWdodDsKLQotICBmcHMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAiZnJhbWVyYXRlIik7Ci0gIGlmIChmcHMgPT0gTlVMTCB8fCAhR1NUX1ZBTFVFX0hPTERTX0ZSQUNUSU9OIChmcHMpKQotICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0KLSAgYXZpcGFkLT5wYXJlbnQuaGRyLnJhdGUgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoZnBzKTsKLSAgYXZpcGFkLT5wYXJlbnQuaGRyLnNjYWxlID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAoZnBzKTsKLSAgaWYgKGF2aXBhZC0+cGFyZW50Lmhkci5yYXRlIDw9IDAgfHwgYXZpcGFkLT5wYXJlbnQuaGRyLnNjYWxlIDw9IDApCi0gICAgZ290byByZWZ1c2VfY2FwczsKLQotICAvKiAocGl4ZWwpIGFzcGVjdCByYXRpbyBkYXRhLCBpZiBhbnkgKi8KLSAgcGFyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInBpeGVsLWFzcGVjdC1yYXRpbyIpOwotICAvKiBvbmx5IHVzZSB2aWRlbyBwcm9wZXJ0aWVzIGhlYWRlciBpZiB0aGVyZSBpcyBub24tdHJpdmlhbCBhc3BlY3QgaW5mbyAqLwotICBpZiAocGFyICYmIEdTVF9WQUxVRV9IT0xEU19GUkFDVElPTiAocGFyKSAmJgotICAgICAgKChwYXJfbiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yIChwYXIpKSAhPQotICAgICAgICAgIChwYXJfZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKHBhcikpKSkgewotICAgIEdWYWx1ZSB0b19yYXRpbyA9IHsgMCwgfTsKLSAgICBndWludCByYXRpb19uLCByYXRpb19kOwotCi0gICAgLyogc29tZSBmcmFjdGlvbiB2b29kb28gdG8gb2J0YWluIHNpbXBsZXN0IHBvc3NpYmxlIHJhdGlvICovCi0gICAgZ192YWx1ZV9pbml0ICgmdG9fcmF0aW8sIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdG9fcmF0aW8sIHdpZHRoICogcGFyX24sIGhlaWdodCAqIHBhcl9kKTsKLSAgICByYXRpb19uID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZ0b19yYXRpbyk7Ci0gICAgcmF0aW9fZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZ0b19yYXRpbyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpbXV4LCAiZ2VuZXJhdGluZyB2cHJwIGRhdGEgd2l0aCBhc3BlY3QgcmF0aW8gJWQvJWQiLAotICAgICAgICByYXRpb19uLCByYXRpb19kKTsKLSAgICAvKiBzaW1wbHkgZmlsbCBpbiAqLwotICAgIGF2aXBhZC0+dnBycC52ZXJ0X3JhdGUgPSBhdmlwYWQtPnBhcmVudC5oZHIucmF0ZSAvIGF2aXBhZC0+cGFyZW50Lmhkci5zY2FsZTsKLSAgICBhdmlwYWQtPnZwcnAuaG9yX3RfdG90YWwgPSB3aWR0aDsKLSAgICBhdmlwYWQtPnZwcnAudmVydF9saW5lcyA9IGhlaWdodDsKLSAgICBhdmlwYWQtPnZwcnAuYXNwZWN0ID0gKHJhdGlvX24pIDw8IDE2IHwgKHJhdGlvX2QgJiAweGZmZmYpOwotICAgIGF2aXBhZC0+dnBycC53aWR0aCA9IHdpZHRoOwotICAgIGF2aXBhZC0+dnBycC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgYXZpcGFkLT52cHJwLmZpZWxkcyA9IDE7Ci0gICAgYXZpcGFkLT52cHJwLmZpZWxkX2luZm9bMF0uY29tcHJlc3NlZF9ibV9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgYXZpcGFkLT52cHJwLmZpZWxkX2luZm9bMF0uY29tcHJlc3NlZF9ibV93aWR0aCA9IHdpZHRoOwotICAgIGF2aXBhZC0+dnBycC5maWVsZF9pbmZvWzBdLnZhbGlkX2JtX2hlaWdodCA9IGhlaWdodDsKLSAgICBhdmlwYWQtPnZwcnAuZmllbGRfaW5mb1swXS52YWxpZF9ibV93aWR0aCA9IHdpZHRoOwotICB9Ci0KLSAgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1yYXciKSkgewotICAgIGNvbnN0IGdjaGFyICpmb3JtYXQ7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm10OwotCi0gICAgZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJmb3JtYXQiKTsKLSAgICBmbXQgPSBnc3RfdmlkZW9fZm9ybWF0X2Zyb21fc3RyaW5nIChmb3JtYXQpOwotCi0gICAgc3dpdGNoIChmbXQpIHsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdZJywgJ1UnLCAnWScsICcyJyk7Ci0gICAgICAgIGF2aXBhZC0+dmlkcy5iaXRfY250ID0gMTY7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ1UnLCAnWScsICdWJywgJ1knKTsKLSAgICAgICAgYXZpcGFkLT52aWRzLmJpdF9jbnQgPSAxNjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnSScsICc0JywgJzInLCAnMCcpOwotICAgICAgICBhdmlwYWQtPnZpZHMuYml0X2NudCA9IDEyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9HUkFZODoKLSAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnWScsICc4JywgJzAnLCAnMCcpOwotICAgICAgICBhdmlwYWQtPnZpZHMuYml0X2NudCA9IDg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUjoKLSAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgweDAwLCAweDAwLCAweDAwLCAweDAwKTsKLSAgICAgICAgYXZpcGFkLT52aWRzLmJpdF9jbnQgPSAyNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOwotICAgICAgICBhdmlwYWQtPnZpZHMuYml0X2NudCA9IDMyOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHZhbGlkX2NhcHMgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGF2aXBhZC0+dmlkcy5iaXRfY250ID0gMjQ7Ci0gICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gMDsKLQotICAgIC8qIGZpbmQgZm9ybWF0ICovCi0gICAgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1odWZmeXV2IikpIHsKLSAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0gnLCAnRicsICdZJywgJ1UnKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiaW1hZ2UvanBlZyIpKSB7Ci0gICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdNJywgJ0onLCAnUCcsICdHJyk7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtZGl2eCIpKSB7Ci0gICAgICBnaW50IGRpdnh2ZXJzaW9uOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImRpdnh2ZXJzaW9uIiwgJmRpdnh2ZXJzaW9uKTsKLSAgICAgIHN3aXRjaCAoZGl2eHZlcnNpb24pIHsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnSScsICdWJywgJzMnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnSScsICdWJywgJ1gnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnWCcsICc1JywgJzAnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB2YWxpZF9jYXBzID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJ2aWRlby94LW1zbXBlZyIpKSB7Ci0gICAgICBnaW50IG1zbXBlZ3ZlcnNpb247Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibXNtcGVndmVyc2lvbiIsICZtc21wZWd2ZXJzaW9uKTsKLSAgICAgIHN3aXRjaCAobXNtcGVndmVyc2lvbikgewotICAgICAgICBjYXNlIDQxOgotICAgICAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ00nLCAnUCcsICdHJywgJzQnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0MjoKLSAgICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdNJywgJ1AnLCAnNCcsICcyJyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDM6Ci0gICAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnTScsICdQJywgJzQnLCAnMycpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEdTVF9JTkZPICgidW5oYW5kbGVkIG1zbXBlZ3ZlcnNpb24gOiAlZCwgZmFsbCBiYWNrIHRvIGZvdXJjYz1NUEVHIiwKLSAgICAgICAgICAgICAgbXNtcGVndmVyc2lvbik7Ci0gICAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnTScsICdQJywgJ0UnLCAnRycpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWR2IikpIHsKLSAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnVicsICdTJywgJ0QnKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1oMjYzIikpIHsKLSAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0gnLCAnMicsICc2JywgJzMnKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1oMjY0IikpIHsKLSAgICAgIGF2aXBhZC0+dmlkcy5jb21wcmVzc2lvbiA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0gnLCAnMicsICc2JywgJzQnKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8vbXBlZyIpKSB7Ci0gICAgICBnaW50IG1wZWd2ZXJzaW9uOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKLQotICAgICAgc3dpdGNoIChtcGVndmVyc2lvbikgewotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnTScsICdQJywgJ0cnLCAnMicpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgLyogbXBsYXllci9mZm1wZWcgbWlnaHQgbm90IHdvcmsgd2l0aCBESVZYLCBidXQgd2l0aCBGTVA0ICovCi0gICAgICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnRCcsICdJJywgJ1YnLCAnWCcpOwotCi0gICAgICAgICAgLyogRElWWC9YVklEIGluIEFWSSBzdG9yZSB0aGUgY29kZWNfZGF0YSBjaHVuayBhcyBwYXJ0IG9mIHRoZQotICAgICAgICAgICAgIGZpcnN0IGRhdGEgYnVmZmVyLiBTbyBmb3IgdGhpcyBjYXNlLCB3ZSBwcmVwZW5kIHRoZSBjb2RlY19kYXRhCi0gICAgICAgICAgICAgYmxvYiAoaWYgYW55KSB0byB0aGF0IGZpcnN0IGJ1ZmZlciAqLwotICAgICAgICAgIGNvZGVjX2RhdGFfaW5faGVhZGVycyA9IEZBTFNFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEdTVF9JTkZPICgidW5oYW5kbGVkIG1wZWd2ZXJzaW9uIDogJWQsIGZhbGwgYmFjayB0byBmb3VyY2M9TVBFRyIsCi0gICAgICAgICAgICAgIG1wZWd2ZXJzaW9uKTsKLSAgICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdNJywgJ1AnLCAnRScsICdHJyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtd212IikpIHsKLSAgICAgIGdpbnQgd212dmVyc2lvbjsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAid212dmVyc2lvbiIsICZ3bXZ2ZXJzaW9uKSkgewotICAgICAgICBzd2l0Y2ggKHdtdnZlcnNpb24pIHsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdXJywgJ00nLCAnVicsICcxJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdXJywgJ00nLCAnVicsICcyJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdXJywgJ00nLCAnVicsICczJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdmFsaWRfY2FwcyA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiaW1hZ2UveC1qcGMiKSkgewotICAgICAgYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uID0gR1NUX01BS0VfRk9VUkNDICgnTScsICdKJywgJzInLCAnQycpOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LXZwOCIpKSB7Ci0gICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdWJywgJ1AnLCAnOCcsICcwJyk7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImltYWdlL3BuZyIpKSB7Ci0gICAgICBhdmlwYWQtPnZpZHMuY29tcHJlc3Npb24gPSBHU1RfTUFLRV9GT1VSQ0MgKCdwJywgJ24nLCAnZycsICcgJyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhbGlkX2NhcHMgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkX2NhcHMpCi0gICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICB9Ci0KLSAgLyogY29kZWMgaW5pdGlhbGl6YXRpb24gZGF0YSwgaWYgYW55ICovCi0gIGNvZGVjX2RhdGEgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAiY29kZWNfZGF0YSIpOwotICBpZiAoY29kZWNfZGF0YSkgewotICAgIGlmIChjb2RlY19kYXRhX2luX2hlYWRlcnMpIHsKLSAgICAgIGF2aXBhZC0+dmlkc19jb2RlY19kYXRhID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOwotICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGF2aXBhZC0+dmlkc19jb2RlY19kYXRhKTsKLSAgICAgIC8qIGtlZXAgZ2xvYmFsIHRyYWNrIG9mIHNpemUgKi8KLSAgICAgIGF2aW11eC0+Y29kZWNfZGF0YV9zaXplICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGF2aXBhZC0+dmlkc19jb2RlY19kYXRhKTsKLSAgICB9IGVsc2UgewotICAgICAgYXZpcGFkLT5wcmVwZW5kX2J1ZmZlciA9Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGdzdF92YWx1ZV9nZXRfYnVmZmVyIChjb2RlY19kYXRhKSk7Ci0gICAgfQotICB9Ci0KLSAgYXZpcGFkLT5wYXJlbnQuaGRyLmZjY19oYW5kbGVyID0gYXZpcGFkLT52aWRzLmNvbXByZXNzaW9uOwotICBhdmlwYWQtPnZpZHMuaW1hZ2Vfc2l6ZSA9IGF2aXBhZC0+dmlkcy5oZWlnaHQgKiBhdmlwYWQtPnZpZHMud2lkdGg7Ci0gIC8qIGhtLCBtYXliZSB3aHkgYXZpIG9ubHkgaGFuZGxlcyBvbmUgc3RyZWFtIHdlbGwgLi4uICovCi0gIGF2aW11eC0+YXZpX2hkci53aWR0aCA9IGF2aXBhZC0+dmlkcy53aWR0aDsKLSAgYXZpbXV4LT5hdmlfaGRyLmhlaWdodCA9IGF2aXBhZC0+dmlkcy5oZWlnaHQ7Ci0gIGF2aW11eC0+YXZpX2hkci51c19mcmFtZSA9IDEwMDAwMDAuICogYXZpcGFkLT5wYXJlbnQuaGRyLnNjYWxlIC8KLSAgICAgIGF2aXBhZC0+cGFyZW50Lmhkci5yYXRlOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGF2aW11eCk7Ci0gIHJldHVybiBUUlVFOwotCi1yZWZ1c2VfY2FwczoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAicmVmdXNlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCB2c2NhcHMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGF2aW11eCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdzdF9hdmlfbXV4X2F1ZHNpbmtfc2V0X2ZpZWxkcyAoR3N0QXZpTXV4ICogYXZpbXV4LAotICAgIEdzdEF2aUF1ZGlvUGFkICogYXZpcGFkKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfbXV4X2F1ZHNpbmtfc2Nhbl9tcGVnX2F1ZGlvIChHc3RBdmlNdXggKiBhdmltdXgsIEdzdEF2aVBhZCAqIGF2aXBhZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBzcGY7Ci0gIGd1aW50MzIgaGVhZGVyOwotICBndWxvbmcgbGF5ZXI7Ci0gIGd1bG9uZyB2ZXJzaW9uOwotICBnaW50IGxzZiwgbXBnMjU7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgaWYgKG1hcC5zaXplIDwgNCkKLSAgICBnb3RvIG5vdF9wYXJzZWQ7Ci0KLSAgaGVhZGVyID0gR1NUX1JFQURfVUlOVDMyX0JFIChtYXAuZGF0YSk7Ci0KLSAgaWYgKChoZWFkZXIgJiAweGZmZTAwMDAwKSAhPSAweGZmZTAwMDAwKQotICAgIGdvdG8gbm90X3BhcnNlZDsKLQotICAvKiB0aGFua3MgZ28gdG8gbXAzcGFyc2UgKi8KLSAgaWYgKGhlYWRlciAmICgxIDw8IDIwKSkgewotICAgIGxzZiA9IChoZWFkZXIgJiAoMSA8PCAxOSkpID8gMCA6IDE7Ci0gICAgbXBnMjUgPSAwOwotICB9IGVsc2UgewotICAgIGxzZiA9IDE7Ci0gICAgbXBnMjUgPSAxOwotICB9Ci0KLSAgdmVyc2lvbiA9IDEgKyBsc2YgKyBtcGcyNTsKLSAgbGF5ZXIgPSA0IC0gKChoZWFkZXIgPj4gMTcpICYgMHgzKTsKLQotICAvKiBzZWUgaHR0cDovL3d3dy5jb2RlcHJvamVjdC5jb20vYXVkaW8vTVBFR0F1ZGlvSW5mby5hc3AgKi8KLSAgaWYgKGxheWVyID09IDEpCi0gICAgc3BmID0gMzg0OwotICBlbHNlIGlmIChsYXllciA9PSAyKQotICAgIHNwZiA9IDExNTI7Ci0gIGVsc2UgaWYgKHZlcnNpb24gPT0gMSkgewotICAgIHNwZiA9IDExNTI7Ci0gIH0gZWxzZSB7Ci0gICAgLyogTVBFRy0yIG9yICIyLjUiICovCi0gICAgc3BmID0gNTc2OwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGF2aXBhZC0+aGRyLnNjYWxlIDw9IDEpKSB7Ci0gICAgYXZpcGFkLT5oZHIuc2NhbGUgPSBzcGY7Ci0gICAgZ3N0X2F2aV9tdXhfYXVkc2lua19zZXRfZmllbGRzIChhdmltdXgsIChHc3RBdmlBdWRpb1BhZCAqKSBhdmlwYWQpOwotICB9IGVsc2UgaWYgKEdfVU5MSUtFTFkgKGF2aXBhZC0+aGRyLnNjYWxlICE9IHNwZikpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aW11eCwgImlucHV0IG1wZWcgYXVkaW8gaGFzIHZhcnlpbmcgZnJhbWUgc2l6ZSIpOwotICAgIGdvdG8gY2JyX2ZhbGxiYWNrOwotICB9Ci1kb25lOgotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFWElUUyAqLwotbm90X3BhcnNlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAiaW5wdXQgbXBlZyBhdWRpbyBpcyBub3QgcGFyc2VkIik7Ci0gICAgLyogZmFsbC10aHJvdWdoICovCi0gIH0KLWNicl9mYWxsYmFjazoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAiZmFsbGluZyBiYWNrIHRvIENCUiBtdXhpbmciKTsKLSAgICBhdmlwYWQtPmhkci5zY2FsZSA9IDE7Ci0gICAgZ3N0X2F2aV9tdXhfYXVkc2lua19zZXRfZmllbGRzIChhdmltdXgsIChHc3RBdmlBdWRpb1BhZCAqKSBhdmlwYWQpOwotICAgIC8qIG5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciAqLwotICAgIGF2aXBhZC0+aG9vayA9IE5VTEw7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX211eF9hdWRzaW5rX3NldF9maWVsZHMgKEdzdEF2aU11eCAqIGF2aW11eCwgR3N0QXZpQXVkaW9QYWQgKiBhdmlwYWQpCi17Ci0gIGlmIChhdmlwYWQtPnBhcmVudC5oZHIuc2NhbGUgPiAxKSB7Ci0gICAgLyogdmJyIGNhc2U6IGZpeGVkIGR1cmF0aW9uIHBlciBmcmFtZS9jaHVuayAqLwotICAgIGF2aXBhZC0+cGFyZW50Lmhkci5yYXRlID0gYXZpcGFkLT5hdWRzLnJhdGU7Ci0gICAgYXZpcGFkLT5wYXJlbnQuaGRyLnNhbXBsZXNpemUgPSAwOwotICAgIC8qIHRoaXMgdHJpZ2dlcnMgZGV0ZXJtaW5pbmcgbGFyZ2VzdCBhdWRpbyBjaHVuayBzaXplIHRvIHdyaXRlIGF0IGVuZCAqLwotICAgIGF2aXBhZC0+bWF4X2F1ZGlvX2NodW5rID0gYXZpcGFkLT5hdWRzLmJsb2NrYWxpZ24gPQotICAgICAgICBhdmlwYWQtPnBhcmVudC5oZHIuc2NhbGU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogYnkgc3BlYywgaGRyLnJhdGUgaXMgYXZfYnBzIHJlbGF0ZWQsIGlzIGNhbGN1bGF0ZWQgdGhhdCB3YXkgaW4gc3RvcF9maWxlLAotICAgICAqIGFuZCByZWR1Y2VzIHRvIHNhbXBsZSByYXRlIGluIFBDTSBsaWtlIGNhc2VzICovCi0gICAgYXZpcGFkLT5wYXJlbnQuaGRyLnJhdGUgPSBhdmlwYWQtPmF1ZHMuYXZfYnBzIC8gYXZpcGFkLT5hdWRzLmJsb2NrYWxpZ247Ci0gICAgYXZpcGFkLT5wYXJlbnQuaGRyLnNhbXBsZXNpemUgPSBhdmlwYWQtPmF1ZHMuYmxvY2thbGlnbjsKLSAgICBhdmlwYWQtPnBhcmVudC5oZHIuc2NhbGUgPSAxOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9tdXhfYXVkc2lua19zZXRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogdnNjYXBzKQotewotICBHc3RBdmlNdXggKmF2aW11eDsKLSAgR3N0QXZpQXVkaW9QYWQgKmF2aXBhZDsKLSAgR3N0QXZpQ29sbGVjdERhdGEgKmNvbGxlY3RfcGFkOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgZ2NoYXIgKm1pbWV0eXBlOwotICBjb25zdCBHVmFsdWUgKmNvZGVjX2RhdGE7Ci0gIGdpbnQgY2hhbm5lbHMsIHJhdGU7Ci0KLSAgYXZpbXV4ID0gR1NUX0FWSV9NVVggKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0KLSAgLyogZmluZCBzdHJlYW0gZGF0YSAqLwotICBjb2xsZWN0X3BhZCA9IChHc3RBdmlDb2xsZWN0RGF0YSAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIGdfYXNzZXJ0IChjb2xsZWN0X3BhZCk7Ci0gIGF2aXBhZCA9IChHc3RBdmlBdWRpb1BhZCAqKSBjb2xsZWN0X3BhZC0+YXZpcGFkOwotICBnX2Fzc2VydCAoYXZpcGFkKTsKLSAgZ19hc3NlcnQgKCFhdmlwYWQtPnBhcmVudC5pc192aWRlbyk7Ci0gIGdfYXNzZXJ0IChhdmlwYWQtPnBhcmVudC5oZHIudHlwZSA9PSBHU1RfTUFLRV9GT1VSQ0MgKCdhJywgJ3UnLCAnZCcsICdzJykpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGF2aW11eCwgIiVzOiVzLCBjYXBzPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCB2c2NhcHMpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHZzY2FwcywgMCk7Ci0gIG1pbWV0eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKLQotICAvKiB3ZSB3YW50IHRoZXNlIGZvciBhbGwgKi8KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgJmNoYW5uZWxzKSB8fAotICAgICAgIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicmF0ZSIsICZyYXRlKSkgewotICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gIH0KLQotICBhdmlwYWQtPmF1ZHMuY2hhbm5lbHMgPSBjaGFubmVsczsKLSAgYXZpcGFkLT5hdWRzLnJhdGUgPSByYXRlOwotCi0gIC8qIGNvZGVjIGluaXRpYWxpemF0aW9uIGRhdGEsIGlmIGFueSAqLwotICBjb2RlY19kYXRhID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvZGVjX2RhdGEiKTsKLSAgaWYgKGNvZGVjX2RhdGEpIHsKLSAgICBhdmlwYWQtPmF1ZHNfY29kZWNfZGF0YSA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChjb2RlY19kYXRhKTsKLSAgICBnc3RfYnVmZmVyX3JlZiAoYXZpcGFkLT5hdWRzX2NvZGVjX2RhdGEpOwotICAgIC8qIGtlZXAgZ2xvYmFsIHRyYWNrIG9mIHNpemUgKi8KLSAgICBhdmltdXgtPmNvZGVjX2RhdGFfc2l6ZSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChhdmlwYWQtPmF1ZHNfY29kZWNfZGF0YSk7Ci0gIH0KLQotICBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LXJhdyIpKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmZvcm1hdDsKLSAgICBHc3RBdWRpb0Zvcm1hdCBmbXQ7Ci0KLSAgICBmb3JtYXQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImZvcm1hdCIpOwotICAgIGZtdCA9IGdzdF9hdWRpb19mb3JtYXRfZnJvbV9zdHJpbmcgKGZvcm1hdCk7Ci0KLSAgICBzd2l0Y2ggKGZtdCkgewotICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1U4OgotICAgICAgICBhdmlwYWQtPmF1ZHMuYmxvY2thbGlnbiA9IDg7Ci0gICAgICAgIGF2aXBhZC0+YXVkcy5iaXRzX3Blcl9zYW1wbGUgPSA4OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTY6Ci0gICAgICAgIGF2aXBhZC0+YXVkcy5ibG9ja2FsaWduID0gMTY7Ci0gICAgICAgIGF2aXBhZC0+YXVkcy5iaXRzX3Blcl9zYW1wbGUgPSAxNjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLQotICAgIGF2aXBhZC0+YXVkcy5mb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9QQ007Ci0gICAgLyogc2V0IHNvbWUgbW9yZSBpbmZvIHN0cmFpZ2h0ICovCi0gICAgYXZpcGFkLT5hdWRzLmJsb2NrYWxpZ24gLz0gODsKLSAgICBhdmlwYWQtPmF1ZHMuYmxvY2thbGlnbiAqPSBhdmlwYWQtPmF1ZHMuY2hhbm5lbHM7Ci0gICAgYXZpcGFkLT5hdWRzLmF2X2JwcyA9IGF2aXBhZC0+YXVkcy5ibG9ja2FsaWduICogYXZpcGFkLT5hdWRzLnJhdGU7Ci0gIH0gZWxzZSB7Ci0gICAgYXZpcGFkLT5hdWRzLmZvcm1hdCA9IDA7Ci0gICAgLyogc2V0IHNvbWUgZGVmYXVsdHMgKi8KLSAgICBhdmlwYWQtPmF1ZHMuYmxvY2thbGlnbiA9IDE7Ci0gICAgYXZpcGFkLT5hdWRzLmF2X2JwcyA9IDA7Ci0gICAgYXZpcGFkLT5hdWRzLmJpdHNfcGVyX3NhbXBsZSA9IDE2OwotCi0gICAgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8vbXBlZyIpKSB7Ci0gICAgICBnaW50IG1wZWd2ZXJzaW9uOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKLSAgICAgIHN3aXRjaCAobXBlZ3ZlcnNpb24pIHsKLSAgICAgICAgY2FzZSAxOnsKLSAgICAgICAgICBnaW50IGxheWVyID0gMzsKLSAgICAgICAgICBnYm9vbGVhbiBwYXJzZWQgPSBGQUxTRTsKLQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibGF5ZXIiLCAmbGF5ZXIpOwotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKHN0cnVjdHVyZSwgInBhcnNlZCIsICZwYXJzZWQpOwotICAgICAgICAgIHN3aXRjaCAobGF5ZXIpIHsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgYXZpcGFkLT5hdWRzLmZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX01QRUdMMzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgIGF2aXBhZC0+YXVkcy5mb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9NUEVHTDEyOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHBhcnNlZCkgewotICAgICAgICAgICAgLyogdHJlYXQgYXMgVkJSLCBzaG91bGQgYWxzbyBjb3ZlciBDQlIgY2FzZTsKLSAgICAgICAgICAgICAqIHNldHVwIGhvb2sgdG8gcGFyc2UgZnJhbWUgaGVhZGVyIGFuZCBkZXRlcm1pbmUgc3BmICovCi0gICAgICAgICAgICBhdmlwYWQtPnBhcmVudC5ob29rID0gZ3N0X2F2aV9tdXhfYXVkc2lua19zY2FuX21wZWdfYXVkaW87Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAidW5wYXJzZWQgTVBFRyBhdWRpbyBpbnB1dCAoPyksICIKLSAgICAgICAgICAgICAgICAiZG9pbmcgQ0JSIG11eGluZyIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgIHsKLSAgICAgICAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGFfYnVmID0gYXZpcGFkLT5hdWRzX2NvZGVjX2RhdGE7Ci0gICAgICAgICAgY29uc3QgZ2NoYXIgKnN0cmVhbV9mb3JtYXQ7Ci0gICAgICAgICAgZ3VpbnQgY29kZWM7Ci0gICAgICAgICAgZ3VpbnQ4IGRhdGFbMl07Ci0KLSAgICAgICAgICBzdHJlYW1fZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzdHJlYW0tZm9ybWF0Iik7Ci0gICAgICAgICAgaWYgKHN0cmVhbV9mb3JtYXQpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAgKHN0cmVhbV9mb3JtYXQsICJyYXciKSAhPSAwKSB7Ci0gICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAiQUFDJ3Mgc3RyZWFtIGZvcm1hdCAnJXMnIGlzIG5vdCAiCi0gICAgICAgICAgICAgICAgICAic3VwcG9ydGVkLCBwbGVhc2UgdXNlICdyYXcnIiwgc3RyZWFtX2Zvcm1hdCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aW11eCwgIkFBQydzIHN0cmVhbS1mb3JtYXQgbm90IHNwZWNpZmllZCwgIgotICAgICAgICAgICAgICAgICJhc3N1bWluZyAncmF3JyIpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIHZiciBjYXNlIG5lZWRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyAqLwotICAgICAgICAgIGlmICghY29kZWNfZGF0YV9idWYgfHwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY29kZWNfZGF0YV9idWYpIDwgMikgewotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmltdXgsICJubyAodmFsaWQpIGNvZGVjX2RhdGEgZm9yIEFBQyBhdWRpbyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGF2aXBhZC0+YXVkcy5mb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9BQUM7Ci0gICAgICAgICAgLyogbmVlZCB0byBkZXRlcm1pbmUgZnJhbWUgbGVuZ3RoICovCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChjb2RlY19kYXRhX2J1ZiwgMCwgZGF0YSwgMik7Ci0gICAgICAgICAgY29kZWMgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEpOwotICAgICAgICAgIGF2aXBhZC0+cGFyZW50Lmhkci5zY2FsZSA9IChjb2RlYyAmIDB4NCkgPyA5NjAgOiAxMDI0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtdm9yYmlzIikpIHsKLSAgICAgIGF2aXBhZC0+YXVkcy5mb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9WT1JCSVMzOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LWFjMyIpKSB7Ci0gICAgICBhdmlwYWQtPmF1ZHMuZm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfQTUyOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LWFsYXciKSkgewotICAgICAgYXZpcGFkLT5hdWRzLmZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX0FMQVc7Ci0gICAgICBhdmlwYWQtPmF1ZHMuYml0c19wZXJfc2FtcGxlID0gODsKLSAgICAgIGF2aXBhZC0+YXVkcy5ibG9ja2FsaWduID0gYXZpcGFkLT5hdWRzLmNoYW5uZWxzOwotICAgICAgYXZpcGFkLT5hdWRzLmF2X2JwcyA9IGF2aXBhZC0+YXVkcy5ibG9ja2FsaWduICogYXZpcGFkLT5hdWRzLnJhdGU7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtbXVsYXciKSkgewotICAgICAgYXZpcGFkLT5hdWRzLmZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX01VTEFXOwotICAgICAgYXZpcGFkLT5hdWRzLmJpdHNfcGVyX3NhbXBsZSA9IDg7Ci0gICAgICBhdmlwYWQtPmF1ZHMuYmxvY2thbGlnbiA9IGF2aXBhZC0+YXVkcy5jaGFubmVsczsKLSAgICAgIGF2aXBhZC0+YXVkcy5hdl9icHMgPSBhdmlwYWQtPmF1ZHMuYmxvY2thbGlnbiAqIGF2aXBhZC0+YXVkcy5yYXRlOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LXdtYSIpKSB7Ci0gICAgICBnaW50IHZlcnNpb247Ci0gICAgICBnaW50IGJpdHJhdGU7Ci0gICAgICBnaW50IGJsb2NrX2FsaWduOwotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJ3bWF2ZXJzaW9uIiwgJnZlcnNpb24pKSB7Ci0gICAgICAgIHN3aXRjaCAodmVyc2lvbikgewotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGF2aXBhZC0+YXVkcy5mb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9XTUFWMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGF2aXBhZC0+YXVkcy5mb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9XTUFWMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoYXZpcGFkLT5hdWRzLmZvcm1hdCAhPSAwKSB7Ci0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImJsb2NrX2FsaWduIiwgJmJsb2NrX2FsaWduKSkgewotICAgICAgICAgIGF2aXBhZC0+YXVkcy5ibG9ja2FsaWduID0gYmxvY2tfYWxpZ247Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiYml0cmF0ZSIsICZiaXRyYXRlKSkgewotICAgICAgICAgIGF2aXBhZC0+YXVkcy5hdl9icHMgPSBiaXRyYXRlIC8gODsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICghYXZpcGFkLT5hdWRzLmZvcm1hdCkKLSAgICBnb3RvIHJlZnVzZV9jYXBzOwotCi0gIGF2aXBhZC0+cGFyZW50Lmhkci5mY2NfaGFuZGxlciA9IGF2aXBhZC0+YXVkcy5mb3JtYXQ7Ci0gIGdzdF9hdmlfbXV4X2F1ZHNpbmtfc2V0X2ZpZWxkcyAoYXZpbXV4LCBhdmlwYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGF2aW11eCk7Ci0gIHJldHVybiBUUlVFOwotCi1yZWZ1c2VfY2FwczoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAicmVmdXNlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCB2c2NhcHMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGF2aW11eCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfYXZpX211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogcmVxX25hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RBdmlNdXggKmF2aW11eDsKLSAgR3N0UGFkICpuZXdwYWQ7Ci0gIEdzdEF2aVBhZCAqYXZpcGFkOwotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzOwotICBnY2hhciAqbmFtZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpwYWRfbmFtZSA9IE5VTEw7Ci0gIGdpbnQgcGFkX2lkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0ZW1wbCAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAodGVtcGwtPmRpcmVjdGlvbiAhPSBHU1RfUEFEX1NJTkspCi0gICAgZ290byB3cm9uZ19kaXJlY3Rpb247Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19BVklfTVVYIChlbGVtZW50KSwgTlVMTCk7Ci0gIGF2aW11eCA9IEdTVF9BVklfTVVYIChlbGVtZW50KTsKLQotICBpZiAoIWF2aW11eC0+d3JpdGVfaGVhZGVyKQotICAgIGdvdG8gdG9vX2xhdGU7Ci0KLSAga2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGVsZW1lbnQpOwotCi0gIGlmICh0ZW1wbCA9PSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgImF1ZGlvXyV1IikpIHsKLSAgICAvKiBkb24ndCBtaXggbmFtZWQgYW5kIHVubmFtZWQgcGFkcywgaWYgdGhlIHBhZCBhbHJlYWR5IGV4aXN0cyB3ZSBmYWlsIHdoZW4KLSAgICAgKiB0cnlpbmcgdG8gYWRkIGl0ICovCi0gICAgaWYgKHJlcV9uYW1lICE9IE5VTEwgJiYgc3NjYW5mIChyZXFfbmFtZSwgImF1ZGlvXyV1IiwgJnBhZF9pZCkgPT0gMSkgewotICAgICAgcGFkX25hbWUgPSByZXFfbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImF1ZGlvXyV1IiwgYXZpbXV4LT5hdWRpb19wYWRzKyspOwotICAgICAgcGFkX25hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIC8qIGluaXQgcGFkIHNwZWNpZmljIGRhdGEgKi8KLSAgICBhdmlwYWQgPSBnX21hbGxvYzAgKHNpemVvZiAoR3N0QXZpQXVkaW9QYWQpKTsKLSAgICBhdmlwYWQtPmlzX3ZpZGVvID0gRkFMU0U7Ci0gICAgYXZpcGFkLT5oZHIudHlwZSA9IEdTVF9NQUtFX0ZPVVJDQyAoJ2EnLCAndScsICdkJywgJ3MnKTsKLSAgICAvKiBhdWRpbyBnb2VzIGxhc3QgKi8KLSAgICBhdmltdXgtPnNpbmtwYWRzID0gZ19zbGlzdF9hcHBlbmQgKGF2aW11eC0+c2lua3BhZHMsIGF2aXBhZCk7Ci0gIH0gZWxzZSBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ2aWRlb18ldSIpKSB7Ci0gICAgLyogdGhvdWdoIHN0cmVhbXMgYXJlIHByZXR0eSBnZW5lcmljIGFuZCByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkLAotICAgICAqIHNvbWUgdmlkZW8gaW5mbyBnb2VzIGluIGEgc2luZ2xlIGF2aSBoZWFkZXIgLWFuZCB0aGVyZWZvcmUgbXV4IHN0cnVjdC0KLSAgICAgKiBzbyB2aWRlbyByZXN0cmljdGVkIHRvIG9uZSBzdHJlYW0gKi8KLSAgICBpZiAoYXZpbXV4LT52aWRlb19wYWRzID4gMCkKLSAgICAgIGdvdG8gdG9vX21hbnlfdmlkZW9fcGFkczsKLQotICAgIC8qIHNldHVwIHBhZCAqLwotICAgIHBhZF9uYW1lID0gInZpZGVvXzAiOwotICAgIGF2aW11eC0+dmlkZW9fcGFkcysrOwotCi0gICAgLyogaW5pdCBwYWQgc3BlY2lmaWMgZGF0YSAqLwotICAgIGF2aXBhZCA9IGdfbWFsbG9jMCAoc2l6ZW9mIChHc3RBdmlWaWRlb1BhZCkpOwotICAgIGF2aXBhZC0+aXNfdmlkZW8gPSBUUlVFOwotICAgIGF2aXBhZC0+aGRyLnR5cGUgPSBHU1RfTUFLRV9GT1VSQ0MgKCd2JywgJ2knLCAnZCcsICdzJyk7Ci0gICAgLyogdmlkZW8gZ29lcyBmaXJzdCAqLwotICAgIGF2aW11eC0+c2lua3BhZHMgPSBnX3NsaXN0X3ByZXBlbmQgKGF2aW11eC0+c2lua3BhZHMsIGF2aXBhZCk7Ci0gIH0gZWxzZQotICAgIGdvdG8gd3JvbmdfdGVtcGxhdGU7Ci0KLSAgbmV3cGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIHBhZF9uYW1lKTsKLQotICBhdmlwYWQtPmNvbGxlY3QgPSBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKGF2aW11eC0+Y29sbGVjdCwKLSAgICAgIG5ld3BhZCwgc2l6ZW9mIChHc3RBdmlDb2xsZWN0RGF0YSksIE5VTEwsIFRSVUUpOwotICAoKEdzdEF2aUNvbGxlY3REYXRhICopIChhdmlwYWQtPmNvbGxlY3QpKS0+YXZpcGFkID0gYXZpcGFkOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgbmV3cGFkKSkKLSAgICBnb3RvIHBhZF9hZGRfZmFpbGVkOwotCi0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobmV3cGFkLCAiQWRkZWQgbmV3IHJlcXVlc3QgcGFkIik7Ci0KLSAgcmV0dXJuIG5ld3BhZDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX2RpcmVjdGlvbjoKLSAgewotICAgIGdfd2FybmluZyAoImF2aW11eDogcmVxdWVzdCBwYWQgdGhhdCBpcyBub3QgYSBTSU5LIHBhZFxuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXRvb19sYXRlOgotICB7Ci0gICAgZ193YXJuaW5nICgiYXZpbXV4OiByZXF1ZXN0IHBhZCBjYW5ub3QgYmUgYWRkZWQgYWZ0ZXIgc3RyZWFtaW5nIHN0YXJ0ZWRcbiIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci13cm9uZ190ZW1wbGF0ZToKLSAgewotICAgIGdfd2FybmluZyAoImF2aW11eDogdGhpcyBpcyBub3Qgb3VyIHRlbXBsYXRlIVxuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXRvb19tYW55X3ZpZGVvX3BhZHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGF2aW11eCwgIkNhbiBvbmx5IGhhdmUgb25lIHZpZGVvIHN0cmVhbSIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1wYWRfYWRkX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXZpbXV4LCAiQWRkaW5nIHRoZSBuZXcgcGFkICclcycgZmFpbGVkIiwgcGFkX25hbWUpOwotICAgIGdfZnJlZSAobmFtZSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAobmV3cGFkKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9tdXhfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdEF2aU11eCAqYXZpbXV4ID0gR1NUX0FWSV9NVVggKGVsZW1lbnQpOwotICBHU0xpc3QgKm5vZGU7Ci0KLSAgbm9kZSA9IGF2aW11eC0+c2lua3BhZHM7Ci0gIHdoaWxlIChub2RlKSB7Ci0gICAgR3N0QXZpUGFkICphdmlwYWQgPSAoR3N0QXZpUGFkICopIG5vZGUtPmRhdGE7Ci0KLSAgICBpZiAoYXZpcGFkLT5jb2xsZWN0LT5wYWQgPT0gcGFkKSB7Ci0gICAgICAvKiBwYWQgY291bnQgc2hvdWxkIG5vdCBiZSBhZGp1c3RlZCwKLSAgICAgICAqIGFzIGl0IGFsc28gcmVwcmVzZW50IG51bWJlciBvZiBzdHJlYW1zIHByZXNlbnQgKi8KLSAgICAgIGF2aXBhZC0+Y29sbGVjdCA9IE5VTEw7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChhdmltdXgsICJyZW1vdmVkIHBhZCAnJXMnIiwgR1NUX1BBRF9OQU1FIChwYWQpKTsKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoYXZpbXV4LT5jb2xsZWN0LCBwYWQpOwotICAgICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgcGFkKTsKLSAgICAgIC8qIGlmIG5vdCBzdGFydGVkIHlldCwgd2UgY2FuIHJlbW92ZSBhbnkgc2lnbiB0aGlzIHBhZCBldmVyIGV4aXN0ZWQgKi8KLSAgICAgIC8qIGluIHRoaXMgY2FzZSBfc3RhcnQgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIHJlYWwgcGFkIGNvdW50ICovCi0gICAgICBpZiAoYXZpbXV4LT53cml0ZV9oZWFkZXIpIHsKLSAgICAgICAgYXZpbXV4LT5zaW5rcGFkcyA9IGdfc2xpc3RfcmVtb3ZlIChhdmltdXgtPnNpbmtwYWRzLCBhdmlwYWQpOwotICAgICAgICBnc3RfYXZpX211eF9wYWRfcmVzZXQgKGF2aXBhZCwgVFJVRSk7Ci0gICAgICAgIGdfZnJlZSAoYXZpcGFkKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBub2RlID0gbm9kZS0+bmV4dDsKLSAgfQotCi0gIGdfd2FybmluZyAoIlVua25vd24gcGFkICVzIiwgR1NUX1BBRF9OQU1FIChwYWQpKTsKLX0KLQotc3RhdGljIGlubGluZSBndWludAotZ3N0X2F2aV9tdXhfc3RhcnRfY2h1bmsgKEdzdEJ5dGVXcml0ZXIgKiBidywgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50MzIgZm91cmNjKQotewotICBndWludCBjaHVua19vZmZzZXQ7Ci0KLSAgaWYgKHRhZykKLSAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKGJ3LCAoY29uc3QgZ3VpbnQ4ICopIHRhZywgNCk7Ci0gIGVsc2UKLSAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoYncsIGZvdXJjYyk7Ci0KLSAgY2h1bmtfb2Zmc2V0ID0gZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKGJ3KTsKLSAgLyogcmVhbCBjaHVuayBzaXplIGNvbWVzIGxhdGVyICovCi0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlIChidywgMCk7Ci0KLSAgcmV0dXJuIGNodW5rX29mZnNldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfYXZpX211eF9lbmRfY2h1bmsgKEdzdEJ5dGVXcml0ZXIgKiBidywgZ3VpbnQgY2h1bmtfb2Zmc2V0KQotewotICBndWludCBzaXplOwotCi0gIHNpemUgPSBnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAoYncpOwotCi0gIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChidywgY2h1bmtfb2Zmc2V0KTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKGJ3LCBzaXplIC0gY2h1bmtfb2Zmc2V0IC0gNCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChidywgc2l6ZSk7Ci0KLSAgLyogYXJyYW5nZSBmb3IgZXZlbiBwYWRkaW5nICovCi0gIGlmIChzaXplICYgMSkKLSAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4IChidywgMCk7Ci19Ci0KLS8qIG1heWJlIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBtb3ZlZCB0byByaWZmLmg/ICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX211eF93cml0ZV90YWcgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LCBjb25zdCBnY2hhciAqIHRhZywKLSAgICBncG9pbnRlciBkYXRhKQotewotICBjb25zdCBzdHJ1Y3QKLSAgewotICAgIGd1aW50MzIgZmNjOwotICAgIGNvbnN0IGdjaGFyICp0YWc7Ci0gIH0gcmlmZnRhZ3NbXSA9IHsKLSAgICB7Ci0gICAgR1NUX1JJRkZfSU5GT19JQVJMLCBHU1RfVEFHX0xPQ0FUSU9OfSwgewotICAgIEdTVF9SSUZGX0lORk9fSUFSVCwgR1NUX1RBR19BUlRJU1R9LCB7Ci0gICAgR1NUX1JJRkZfSU5GT19JQ01ULCBHU1RfVEFHX0NPTU1FTlR9LCB7Ci0gICAgR1NUX1JJRkZfSU5GT19JQ09QLCBHU1RfVEFHX0NPUFlSSUdIVH0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lDUkQsIEdTVF9UQUdfREFURX0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lHTlIsIEdTVF9UQUdfR0VOUkV9LCB7Ci0gICAgR1NUX1JJRkZfSU5GT19JS0VZLCBHU1RfVEFHX0tFWVdPUkRTfSwgewotICAgIEdTVF9SSUZGX0lORk9fSU5BTSwgR1NUX1RBR19USVRMRX0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lTRlQsIEdTVF9UQUdfRU5DT0RFUn0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lTUkMsIEdTVF9UQUdfSVNSQ30sIHsKLSAgICAwLCBOVUxMfQotICB9OwotICBnaW50IG47Ci0gIGdjaGFyICpzdHIgPSBOVUxMOwotICBHc3RCeXRlV3JpdGVyICpidyA9IGRhdGE7Ci0gIGd1aW50IGNodW5rOwotCi0gIGZvciAobiA9IDA7IHJpZmZ0YWdzW25dLmZjYyAhPSAwOyBuKyspIHsKLSAgICBpZiAoIXN0cmNtcCAocmlmZnRhZ3Nbbl0udGFnLCB0YWcpKSB7Ci0gICAgICBpZiAocmlmZnRhZ3Nbbl0uZmNjID09IEdTVF9SSUZGX0lORk9fSUNSRCkgewotICAgICAgICBHRGF0ZSAqZGF0ZTsKLSAgICAgICAgLyogc3BlY2lhbCBjYXNlIGZvciB0aGUgZGF0ZSB0YWcgKi8KLSAgICAgICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfZGF0ZSAobGlzdCwgdGFnLCAmZGF0ZSkpIHsKLSAgICAgICAgICBzdHIgPQotICAgICAgICAgICAgICBnX3N0cmR1cF9wcmludGYgKCIlMDRkOiUwMmQ6JTAyZCIsIGdfZGF0ZV9nZXRfeWVhciAoZGF0ZSksCi0gICAgICAgICAgICAgIGdfZGF0ZV9nZXRfbW9udGggKGRhdGUpLCBnX2RhdGVfZ2V0X2RheSAoZGF0ZSkpOwotICAgICAgICAgIGdfZGF0ZV9mcmVlIChkYXRlKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIHRhZywgJnN0cik7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyKSB7Ci0gICAgICAgIGNodW5rID0gZ3N0X2F2aV9tdXhfc3RhcnRfY2h1bmsgKGJ3LCBOVUxMLCByaWZmdGFnc1tuXS5mY2MpOwotICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3N0cmluZyAoYncsIHN0cik7Ci0gICAgICAgIGdzdF9hdmlfbXV4X2VuZF9jaHVuayAoYncsIGNodW5rKTsKLSAgICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgICBzdHIgPSBOVUxMOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyIChHc3RBdmlNdXggKiBhdmltdXgpCi17Ci0gIGNvbnN0IEdzdFRhZ0xpc3QgKnRhZ3M7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLSAgZ2ludCBzaXplID0gMDsKLSAgR3N0Qnl0ZVdyaXRlciBidzsKLSAgR1NMaXN0ICpub2RlOwotICBndWludCBhdmloLCByaWZmLCBoZHJsOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Jvb2xlYW4gaGRsID0gVFJVRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChhdmltdXgsICJjcmVhdGluZyBhdmkgaGVhZGVyLCBkYXRhX3NpemUgJXUsIGlkeF9zaXplICV1IiwKLSAgICAgIGF2aW11eC0+ZGF0YV9zaXplLCBhdmltdXgtPmlkeF9zaXplKTsKLQotICBpZiAoYXZpbXV4LT50YWdzX3NuYXApCi0gICAgdGFncyA9IGF2aW11eC0+dGFnc19zbmFwOwotICBlbHNlIHsKLSAgICAvKiBuZWVkIHRvIG1ha2Ugc25hcHNob3Qgb2YgY3VycmVudCBzdGF0ZSBvZiB0YWdzIHRvIGVuc3VyZSB0aGUgc2FtZSBzZXQKLSAgICAgKiBpcyB1c2VkIG5leHQgdGltZSBhcm91bmQgZHVyaW5nIGhlYWRlciByZXdyaXRlIGF0IHRoZSBlbmQgKi8KLSAgICB0YWdzID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19saXN0IChHU1RfVEFHX1NFVFRFUiAoYXZpbXV4KSk7Ci0gICAgaWYgKHRhZ3MpCi0gICAgICB0YWdzID0gYXZpbXV4LT50YWdzX3NuYXAgPSBnc3RfdGFnX2xpc3RfY29weSAodGFncyk7Ci0gIH0KLQotICBnc3RfYnl0ZV93cml0ZXJfaW5pdF93aXRoX3NpemUgKCZidywgMTAyNCwgRkFMU0UpOwotCi0gIC8qIGF2aSBoZWFkZXIgbWV0YWRhdGEgKi8KLSAgcmlmZiA9IGdzdF9hdmlfbXV4X3N0YXJ0X2NodW5rICgmYncsICJSSUZGIiwgMCk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGd1aW50OCAqKSAiQVZJICIsIDQpOwotICBoZHJsID0gZ3N0X2F2aV9tdXhfc3RhcnRfY2h1bmsgKCZidywgIkxJU1QiLCAwKTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAoJmJ3LCAoZ3VpbnQ4ICopICJoZHJsIiwgNCk7Ci0KLSAgYXZpaCA9IGdzdF9hdmlfbXV4X3N0YXJ0X2NodW5rICgmYncsICJhdmloIiwgMCk7Ci0gIC8qIHRoZSBBVkkgaGVhZGVyIGl0c2VsZiAqLwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpbXV4LT5hdmlfaGRyLnVzX2ZyYW1lKTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aW11eC0+YXZpX2hkci5tYXhfYnBzKTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aW11eC0+YXZpX2hkci5wYWRfZ3Jhbik7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmltdXgtPmF2aV9oZHIuZmxhZ3MpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpbXV4LT5hdmlfaGRyLnRvdF9mcmFtZXMpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpbXV4LT5hdmlfaGRyLmluaXRfZnJhbWVzKTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aW11eC0+YXZpX2hkci5zdHJlYW1zKTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aW11eC0+YXZpX2hkci5idWZzaXplKTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aW11eC0+YXZpX2hkci53aWR0aCk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmltdXgtPmF2aV9oZHIuaGVpZ2h0KTsKLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aW11eC0+YXZpX2hkci5zY2FsZSk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmltdXgtPmF2aV9oZHIucmF0ZSk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmltdXgtPmF2aV9oZHIuc3RhcnQpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpbXV4LT5hdmlfaGRyLmxlbmd0aCk7Ci0gIGdzdF9hdmlfbXV4X2VuZF9jaHVuayAoJmJ3LCBhdmloKTsKLQotICAvKiBzdHJlYW0gZGF0YSAqLwotICBub2RlID0gYXZpbXV4LT5zaW5rcGFkczsKLSAgd2hpbGUgKG5vZGUpIHsKLSAgICBHc3RBdmlQYWQgKmF2aXBhZCA9IChHc3RBdmlQYWQgKikgbm9kZS0+ZGF0YTsKLSAgICBHc3RBdmlWaWRlb1BhZCAqdmlkcGFkID0gKEdzdEF2aVZpZGVvUGFkICopIGF2aXBhZDsKLSAgICBHc3RBdmlBdWRpb1BhZCAqYXVkcGFkID0gKEdzdEF2aUF1ZGlvUGFkICopIGF2aXBhZDsKLSAgICBnaW50IGNvZGVjX3NpemUgPSAwOwotICAgIGd1aW50IHN0cmgsIHN0cmwsIHN0cmYsIGluZHg7Ci0KLSAgICAvKiBzdHJlYW0gbGlzdCBtZXRhZGF0YSAqLwotICAgIHN0cmwgPSBnc3RfYXZpX211eF9zdGFydF9jaHVuayAoJmJ3LCAiTElTVCIsIDApOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGd1aW50OCAqKSAic3RybCIsIDQpOwotCi0gICAgLyogZ2VuZXJpYyBoZWFkZXIgKi8KLSAgICBzdHJoID0gZ3N0X2F2aV9tdXhfc3RhcnRfY2h1bmsgKCZidywgInN0cmgiLCAwKTsKLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpcGFkLT5oZHIudHlwZSk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aXBhZC0+aGRyLmZjY19oYW5kbGVyKTsKLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpcGFkLT5oZHIuZmxhZ3MpOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmlwYWQtPmhkci5wcmlvcml0eSk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aXBhZC0+aGRyLmluaXRfZnJhbWVzKTsKLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpcGFkLT5oZHIuc2NhbGUpOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmlwYWQtPmhkci5yYXRlKTsKLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpcGFkLT5oZHIuc3RhcnQpOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmlwYWQtPmhkci5sZW5ndGgpOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmlwYWQtPmhkci5idWZzaXplKTsKLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpcGFkLT5oZHIucXVhbGl0eSk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF2aXBhZC0+aGRyLnNhbXBsZXNpemUpOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJmJ3LCAwKTsKLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUgKCZidywgMCk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgmYncsIDApOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJmJ3LCAwKTsKLSAgICBnc3RfYXZpX211eF9lbmRfY2h1bmsgKCZidywgc3RyaCk7Ci0KLSAgICBpZiAoYXZpcGFkLT5pc192aWRlbykgewotICAgICAgY29kZWNfc2l6ZSA9IHZpZHBhZC0+dmlkc19jb2RlY19kYXRhID8KLSAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplICh2aWRwYWQtPnZpZHNfY29kZWNfZGF0YSkgOiAwOwotICAgICAgLyogdGhlIHZpZGVvIGhlYWRlciAqLwotICAgICAgc3RyZiA9IGdzdF9hdmlfbXV4X3N0YXJ0X2NodW5rICgmYncsICJzdHJmIiwgMCk7Ci0gICAgICAvKiB0aGUgYWN0dWFsIGhlYWRlciAqLwotICAgICAgaGRsICY9Ci0gICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgdmlkcGFkLT52aWRzLnNpemUgKyBjb2RlY19zaXplKTsKLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCB2aWRwYWQtPnZpZHMud2lkdGgpOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dmlkcy5oZWlnaHQpOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgmYncsIHZpZHBhZC0+dmlkcy5wbGFuZXMpOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgmYncsIHZpZHBhZC0+dmlkcy5iaXRfY250KTsKLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCB2aWRwYWQtPnZpZHMuY29tcHJlc3Npb24pOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dmlkcy5pbWFnZV9zaXplKTsKLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCB2aWRwYWQtPnZpZHMueHBlbHNfbWV0ZXIpOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dmlkcy55cGVsc19tZXRlcik7Ci0gICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgdmlkcGFkLT52aWRzLm51bV9jb2xvcnMpOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dmlkcy5pbXBfY29sb3JzKTsKLSAgICAgIGlmICh2aWRwYWQtPnZpZHNfY29kZWNfZGF0YSkgewotICAgICAgICBnc3RfYnVmZmVyX21hcCAodmlkcGFkLT52aWRzX2NvZGVjX2RhdGEsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAodmlkcGFkLT52aWRzX2NvZGVjX2RhdGEsICZtYXApOwotICAgICAgfQotICAgICAgZ3N0X2F2aV9tdXhfZW5kX2NodW5rICgmYncsIHN0cmYpOwotCi0gICAgICAvKiBhZGQgdmlkZW8gcHJvcGVydHkgZGF0YSwgbWFpbmx5IGZvciBhc3BlY3QgcmF0aW8sIGlmIGFueSAqLwotICAgICAgaWYgKHZpZHBhZC0+dnBycC5hc3BlY3QpIHsKLSAgICAgICAgZ2ludCBmOwotICAgICAgICBndWludCB2cHJwOwotCi0gICAgICAgIC8qIGxldCdzIGJlIG9uIHRoZSBzYWZlIHNpZGUgKi8KLSAgICAgICAgdmlkcGFkLT52cHJwLmZpZWxkcyA9IE1JTiAodmlkcGFkLT52cHJwLmZpZWxkcywKLSAgICAgICAgICAgIEdTVF9SSUZGX1ZQUlBfVklERU9fRklFTERTKTsKLSAgICAgICAgLyogdGhlIHZwcnAgaGVhZGVyICovCi0gICAgICAgIHZwcnAgPSBnc3RfYXZpX211eF9zdGFydF9jaHVuayAoJmJ3LCAidnBycCIsIDApOwotICAgICAgICAvKiB0aGUgYWN0dWFsIGRhdGEgKi8KLSAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dnBycC5mb3JtYXRfdG9rZW4pOwotICAgICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgdmlkcGFkLT52cHJwLnN0YW5kYXJkKTsKLSAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dnBycC52ZXJ0X3JhdGUpOwotICAgICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgdmlkcGFkLT52cHJwLmhvcl90X3RvdGFsKTsKLSAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dnBycC52ZXJ0X2xpbmVzKTsKLSAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dnBycC5hc3BlY3QpOwotICAgICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgdmlkcGFkLT52cHJwLndpZHRoKTsKLSAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIHZpZHBhZC0+dnBycC5oZWlnaHQpOwotICAgICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgdmlkcGFkLT52cHJwLmZpZWxkcyk7Ci0KLSAgICAgICAgZm9yIChmID0gMDsgZiA8IHZpZHBhZC0+dnBycC5maWVsZHM7ICsrZikgewotICAgICAgICAgIGdzdF9yaWZmX3ZwcnBfdmlkZW9fZmllbGRfZGVzYyAqZmQ7Ci0KLSAgICAgICAgICBmZCA9ICYodmlkcGFkLT52cHJwLmZpZWxkX2luZm9bZl0pOwotICAgICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBmZC0+Y29tcHJlc3NlZF9ibV9oZWlnaHQpOwotICAgICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBmZC0+Y29tcHJlc3NlZF9ibV93aWR0aCk7Ci0gICAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGZkLT52YWxpZF9ibV9oZWlnaHQpOwotICAgICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBmZC0+dmFsaWRfYm1fd2lkdGgpOwotICAgICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBmZC0+dmFsaWRfYm1feF9vZmZzZXQpOwotICAgICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBmZC0+dmFsaWRfYm1feV9vZmZzZXQpOwotICAgICAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBmZC0+dmlkZW9feF90X29mZnNldCk7Ci0gICAgICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGZkLT52aWRlb195X3N0YXJ0KTsKLSAgICAgICAgfQotICAgICAgICBnc3RfYXZpX211eF9lbmRfY2h1bmsgKCZidywgdnBycCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNvZGVjX3NpemUgPSBhdWRwYWQtPmF1ZHNfY29kZWNfZGF0YSA/Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYXVkcGFkLT5hdWRzX2NvZGVjX2RhdGEpIDogMDsKLSAgICAgIC8qIHRoZSBhdWRpbyBoZWFkZXIgKi8KLSAgICAgIHN0cmYgPSBnc3RfYXZpX211eF9zdGFydF9jaHVuayAoJmJ3LCAic3RyZiIsIDApOwotICAgICAgLyogdGhlIGFjdHVhbCBoZWFkZXIgKi8KLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJmJ3LCBhdWRwYWQtPmF1ZHMuZm9ybWF0KTsKLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJmJ3LCBhdWRwYWQtPmF1ZHMuY2hhbm5lbHMpOwotICAgICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmYncsIGF1ZHBhZC0+YXVkcy5yYXRlKTsKLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdWRwYWQtPmF1ZHMuYXZfYnBzKTsKLSAgICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJmJ3LCBhdWRwYWQtPmF1ZHMuYmxvY2thbGlnbik7Ci0gICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUgKCZidywgYXVkcGFkLT5hdWRzLmJpdHNfcGVyX3NhbXBsZSk7Ci0gICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUgKCZidywgY29kZWNfc2l6ZSk7Ci0gICAgICBpZiAoYXVkcGFkLT5hdWRzX2NvZGVjX2RhdGEpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGF1ZHBhZC0+YXVkc19jb2RlY19kYXRhLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgmYncsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGF1ZHBhZC0+YXVkc19jb2RlY19kYXRhLCAmbWFwKTsKLSAgICAgIH0KLSAgICAgIGdzdF9hdmlfbXV4X2VuZF9jaHVuayAoJmJ3LCBzdHJmKTsKLSAgICB9Ci0KLSAgICAvKiBvZG1sIHN1cGVyaW5kZXggY2h1bmsgKi8KLSAgICBpZiAoYXZpcGFkLT5pZHhfaW5kZXggPiAwKQotICAgICAgaW5keCA9IGdzdF9hdmlfbXV4X3N0YXJ0X2NodW5rICgmYncsICJpbmR4IiwgMCk7Ci0gICAgZWxzZQotICAgICAgaW5keCA9IGdzdF9hdmlfbXV4X3N0YXJ0X2NodW5rICgmYncsICJKVU5LIiwgMCk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2xlICgmYncsIDQpOyAgICAgIC8qIGJ5dGVzIHBlciBlbnRyeSAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmYncsIDApOyAgLyogaW5kZXggc3VidHlwZSAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmYncsIEdTVF9BVklfSU5ERVhfT0ZfSU5ERVhFUyk7ICAgLyogaW5kZXggdHlwZSAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmlwYWQtPmlkeF9pbmRleCk7ICAgICAgLyogZW50cmllcyBpbiB1c2UgKi8KLSAgICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgmYncsIChndWludDggKikgYXZpcGFkLT50YWcsIDQpOyAgIC8qIHN0cmVhbSBpZCAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCAwKTsgICAgICAvKiByZXNlcnZlZCAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCAwKTsgICAgICAvKiByZXNlcnZlZCAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCAwKTsgICAgICAvKiByZXNlcnZlZCAqLwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGd1aW50OCAqKSBhdmlwYWQtPmlkeCwKLSAgICAgICAgR1NUX0FWSV9TVVBFUklOREVYX0NPVU5UICogc2l6ZW9mIChnc3RfYXZpX3N1cGVyaW5kZXhfZW50cnkpKTsKLSAgICBnc3RfYXZpX211eF9lbmRfY2h1bmsgKCZidywgaW5keCk7Ci0KLSAgICAvKiBlbmQgc3RybCBmb3IgdGhpcyBzdHJlYW0gKi8KLSAgICBnc3RfYXZpX211eF9lbmRfY2h1bmsgKCZidywgc3RybCk7Ci0KLSAgICBub2RlID0gbm9kZS0+bmV4dDsKLSAgfQotCi0gIGlmIChhdmltdXgtPnZpZGVvX3BhZHMgPiAwKSB7Ci0gICAgZ3VpbnQgb2RtbCwgZG1saDsKLSAgICAvKiBvZG1sIGhlYWRlciAqLwotICAgIG9kbWwgPSBnc3RfYXZpX211eF9zdGFydF9jaHVuayAoJmJ3LCAiTElTVCIsIDApOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGd1aW50OCAqKSAib2RtbCIsIDQpOwotICAgIGRtbGggPSBnc3RfYXZpX211eF9zdGFydF9jaHVuayAoJmJ3LCAiZG1saCIsIDApOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCBhdmltdXgtPnRvdGFsX2ZyYW1lcyk7Ci0gICAgZ3N0X2F2aV9tdXhfZW5kX2NodW5rICgmYncsIGRtbGgpOwotICAgIGdzdF9hdmlfbXV4X2VuZF9jaHVuayAoJmJ3LCBvZG1sKTsKLSAgfQotCi0gIC8qIGVuZCBoZHJsICovCi0gIGdzdF9hdmlfbXV4X2VuZF9jaHVuayAoJmJ3LCBoZHJsKTsKLQotICAvKiB0YWdzICovCi0gIGlmICh0YWdzKSB7Ci0gICAgZ3VpbnQgaW5mbzsKLQotICAgIGluZm8gPSBnc3RfYXZpX211eF9zdGFydF9jaHVuayAoJmJ3LCAiTElTVCIsIDApOwotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGd1aW50OCAqKSAiSU5GTyIsIDQpOwotCi0gICAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKHRhZ3MsIGdzdF9hdmlfbXV4X3dyaXRlX3RhZywgJmJ3KTsKLSAgICBpZiAoaW5mbyArIDggPT0gZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKCZidykpIHsKLSAgICAgIC8qIG5vIHRhZ3Mgd3JpdGVuLCByZW1vdmUgdGhlIGVtcHR5IElORk8gTElTVCBhcyBpdCBpcyB1c2VsZXNzCi0gICAgICAgKiBhbmQgcHJldmVudHMgcGxheWJhY2sgaW4gdmxjICovCi0gICAgICBnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAoJmJ3LCBpbmZvIC0gNCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9hdmlfbXV4X2VuZF9jaHVuayAoJmJ3LCBpbmZvKTsKLSAgICB9Ci0gIH0KLQotICAvKiBwb3AgUklGRiAqLwotICBnc3RfYXZpX211eF9lbmRfY2h1bmsgKCZidywgcmlmZik7Ci0KLSAgLyogYXZpIGRhdGEgaGVhZGVyICovCi0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGd1aW50OCAqKSAiTElTVCIsIDQpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgYXZpbXV4LT5kYXRhX3NpemUpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgmYncsIChndWludDggKikgIm1vdmkiLCA0KTsKLQotICBpZiAoIWhkbCkKLSAgICBnb3RvIGJlYWNoOwotCi0gIC8qIG5vdyBnZXQgdGhlIGRhdGEgKi8KLSAgYnVmZmVyID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyICgmYncpOwotCi0gIC8qIC4uLiBidXQgUklGRiBpbmNsdWRlcyBtb3JlIHRoYW4ganVzdCBoZWFkZXIgKi8KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICBzaXplID0gR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSArIDQpOwotICBzaXplICs9IDggKyBhdmltdXgtPmRhdGFfc2l6ZSArIGF2aW11eC0+aWR4X3NpemU7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCwgc2l6ZSk7Ci0KLSAgR1NUX01FTURVTVBfT0JKRUNUIChhdmltdXgsICJhdmkgaGVhZGVyIiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotYmVhY2g6Ci0gIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2F2aV9tdXhfcmlmZl9nZXRfYXZpeF9oZWFkZXIgKGd1aW50MzIgZGF0YXhfc2l6ZSkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjQpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtZW1jcHkgKG1hcC5kYXRhICsgMCwgIlJJRkYiLCA0KTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAobWFwLmRhdGEgKyA0LCBkYXRheF9zaXplICsgMyAqIDQpOwotICBtZW1jcHkgKG1hcC5kYXRhICsgOCwgIkFWSVgiLCA0KTsKLSAgbWVtY3B5IChtYXAuZGF0YSArIDEyLCAiTElTVCIsIDQpOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChtYXAuZGF0YSArIDE2LCBkYXRheF9zaXplKTsKLSAgbWVtY3B5IChtYXAuZGF0YSArIDIwLCAibW92aSIsIDQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF9hdmlfbXV4X3JpZmZfZ2V0X2hlYWRlciAoR3N0QXZpUGFkICogYXZpcGFkLCBndWludDMyIHZpZGVvX2ZyYW1lX3NpemUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDgpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtZW1jcHkgKG1hcC5kYXRhICsgMCwgYXZpcGFkLT50YWcsIDQpOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChtYXAuZGF0YSArIDQsIHZpZGVvX2ZyYW1lX3NpemUpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLS8qIHdyaXRlIGFuIG9kbWwgaW5kZXggY2h1bmsgaW4gdGhlIG1vdmkgbGlzdCAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfbXV4X3dyaXRlX2F2aXhfaW5kZXggKEdzdEF2aU11eCAqIGF2aW11eCwgR3N0QXZpUGFkICogYXZpcGFkLAotICAgIGdjaGFyICogY29kZSwgZ2NoYXIgKiBjaHVuaywgZ3N0X2F2aV9zdXBlcmluZGV4X2VudHJ5ICogc3VwZXJfaW5kZXgsCi0gICAgZ2ludCAqIHN1cGVyX2luZGV4X2NvdW50KQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3N0X3JpZmZfaW5kZXhfZW50cnkgKmVudHJ5OwotICBnaW50IGk7Ci0gIGd1aW50MzIgc2l6ZSwgZW50cnlfY291bnQ7Ci0gIGdib29sZWFuIGlzX3BjbSA9IEZBTFNFOwotICBndWludDMyIHBjbV9zYW1wbGVzID0gMDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgLyogY2hlY2sgaWYgaXQgaXMgcGNtICovCi0gIGlmIChhdmlwYWQgJiYgIWF2aXBhZC0+aXNfdmlkZW8pIHsKLSAgICBHc3RBdmlBdWRpb1BhZCAqYXVkaW9wYWQgPSAoR3N0QXZpQXVkaW9QYWQgKikgYXZpcGFkOwotICAgIGlmIChhdWRpb3BhZC0+YXVkcy5mb3JtYXQgPT0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfUENNKSB7Ci0gICAgICBwY21fc2FtcGxlcyA9IGF1ZGlvcGFkLT5zYW1wbGVzOwotICAgICAgaXNfcGNtID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICAvKiBhbGxvY2F0ZSB0aGUgbWF4aW11bSBwb3NzaWJsZSAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDMyICsgOCAqIGF2aW11eC0+aWR4X2luZGV4KTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotCi0gIC8qIGdlbmVyYWwgaW5kZXggY2h1bmsgaW5mbyAqLwotICBtZW1jcHkgKG1hcC5kYXRhICsgMCwgY2h1bmssIDQpOyAgICAgIC8qIGNodW5rIGlkICovCi0gIEdTVF9XUklURV9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCwgMCk7ICAgICAgICAvKiBjaHVuayBzaXplOyBmaWxsIGxhdGVyICovCi0gIEdTVF9XUklURV9VSU5UMTZfTEUgKG1hcC5kYXRhICsgOCwgMik7ICAgICAgICAvKiBpbmRleCBlbnRyeSBpcyAyIHdvcmRzICovCi0gIG1hcC5kYXRhWzEwXSA9IDA7ICAgICAgICAgICAgIC8qIGluZGV4IHN1YnR5cGUgKi8KLSAgbWFwLmRhdGFbMTFdID0gR1NUX0FWSV9JTkRFWF9PRl9DSFVOS1M7ICAgICAgIC8qIGluZGV4IHR5cGU6IEFWSV9JTkRFWF9PRl9DSFVOS1MgKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAobWFwLmRhdGEgKyAxMiwgMCk7ICAgICAgIC8qIGVudHJpZXMgaW4gdXNlOyBmaWxsIGxhdGVyICovCi0gIG1lbWNweSAobWFwLmRhdGEgKyAxNiwgY29kZSwgNCk7ICAgICAgLyogc3RyZWFtIHRvIHdoaWNoIGluZGV4IHJlZmVycyAqLwotICBHU1RfV1JJVEVfVUlOVDY0X0xFIChtYXAuZGF0YSArIDIwLCBhdmltdXgtPmF2aXhfc3RhcnQpOyAgICAgIC8qIGJhc2Ugb2Zmc2V0ICovCi0gIEdTVF9XUklURV9VSU5UMzJfTEUgKG1hcC5kYXRhICsgMjgsIDApOyAgICAgICAvKiByZXNlcnZlZCAqLwotICBtYXAuZGF0YSArPSAzMjsKLQotICAvKiBub3cgdGhlIGFjdHVhbCBpbmRleCBlbnRyaWVzICovCi0gIGkgPSBhdmltdXgtPmlkeF9pbmRleDsKLSAgZW50cnkgPSBhdmltdXgtPmlkeDsKLSAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgaWYgKG1lbWNtcCAoJmVudHJ5LT5pZCwgY29kZSwgNCkgPT0gMCkgewotICAgICAgLyogZW50ZXIgcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZSBkYXRhICghKSAqLwotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAobWFwLmRhdGEsIEdVSU5UMzJfRlJPTV9MRSAoZW50cnktPm9mZnNldCkgKyA4KTsKLSAgICAgIC8qIG1zYiBpcyBzZXQgaWYgbm90ICghKSBrZXlmcmFtZSAqLwotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAobWFwLmRhdGEgKyA0LCBHVUlOVDMyX0ZST01fTEUgKGVudHJ5LT5zaXplKQotICAgICAgICAgIHwgKEdVSU5UMzJfRlJPTV9MRSAoZW50cnktPmZsYWdzKQotICAgICAgICAgICAgICAmIEdTVF9SSUZGX0lGX0tFWUZSQU1FID8gMCA6IDFVIDw8IDMxKSk7Ci0gICAgICBtYXAuZGF0YSArPSA4OwotICAgIH0KLSAgICBpLS07Ci0gICAgZW50cnkrKzsKLSAgfQotCi0gIC8qIG9rLCBub3cgd2Uga25vdyB0aGUgc2l6ZSBhbmQgbm8gb2YgZW50cmllcywgZmlsbCBpbiB3aGVyZSBuZWVkZWQgKi8KLSAgc2l6ZSA9IG1hcC5kYXRhIC0gZGF0YTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSArIDQsIHNpemUgLSA4KTsKLSAgZW50cnlfY291bnQgPSAoc2l6ZSAtIDMyKSAvIDg7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEgKyAxMiwgZW50cnlfY291bnQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmZmVyLCAwLCBzaXplKTsKLQotICAvKiBzZW5kICovCi0gIGlmICgocmVzID0gZ3N0X3BhZF9wdXNoIChhdmltdXgtPnNyY3BhZCwgYnVmZmVyKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJlczsKLQotICAvKiBrZWVwIHRyYWNrIG9mIHRoaXMgaW4gc3VwZXJpbmRleCAoaWYgcm9vbSkgLi4uICovCi0gIGlmICgqc3VwZXJfaW5kZXhfY291bnQgPCBHU1RfQVZJX1NVUEVSSU5ERVhfQ09VTlQpIHsKLSAgICBpID0gKnN1cGVyX2luZGV4X2NvdW50OwotICAgIHN1cGVyX2luZGV4W2ldLm9mZnNldCA9IEdVSU5UNjRfVE9fTEUgKGF2aW11eC0+dG90YWxfZGF0YSk7Ci0gICAgc3VwZXJfaW5kZXhbaV0uc2l6ZSA9IEdVSU5UMzJfVE9fTEUgKHNpemUpOwotICAgIGlmIChpc19wY20pIHsKLSAgICAgIHN1cGVyX2luZGV4W2ldLmR1cmF0aW9uID0gR1VJTlQzMl9UT19MRSAocGNtX3NhbXBsZXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzdXBlcl9pbmRleFtpXS5kdXJhdGlvbiA9IEdVSU5UMzJfVE9fTEUgKGVudHJ5X2NvdW50KTsKLSAgICB9Ci0gICAgKCpzdXBlcl9pbmRleF9jb3VudCkrKzsKLSAgfSBlbHNlCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhdmltdXgsICJObyBtb3JlIHJvb20gaW4gc3VwZXJpbmRleCBvZiBzdHJlYW0gJXMiLAotICAgICAgICBjb2RlKTsKLQotICAvKiAuLi4gYW5kIGluIHNpemUgKi8KLSAgYXZpbXV4LT50b3RhbF9kYXRhICs9IHNpemU7Ci0gIGlmIChhdmltdXgtPmlzX2JpZ2ZpbGUpCi0gICAgYXZpbXV4LT5kYXRheF9zaXplICs9IHNpemU7Ci0gIGVsc2UKLSAgICBhdmltdXgtPmRhdGFfc2l6ZSArPSBzaXplOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogc29tZSBvdGhlciB1c2FibGUgZnVuY3Rpb25zICh0aGFua3lvdSB4YXd0diA7LSkgKSAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9tdXhfYWRkX2luZGV4IChHc3RBdmlNdXggKiBhdmltdXgsIEdzdEF2aVBhZCAqIGF2aXBhZCwgZ3VpbnQzMiBmbGFncywKLSAgICBndWludDMyIHNpemUpCi17Ci0gIGdjaGFyICpjb2RlID0gYXZpcGFkLT50YWc7Ci0gIGlmIChhdmltdXgtPmlkeF9pbmRleCA9PSBhdmltdXgtPmlkeF9jb3VudCkgewotICAgIGF2aW11eC0+aWR4X2NvdW50ICs9IDI1NjsKLSAgICBhdmltdXgtPmlkeCA9Ci0gICAgICAgIGdfcmVhbGxvYyAoYXZpbXV4LT5pZHgsCi0gICAgICAgIGF2aW11eC0+aWR4X2NvdW50ICogc2l6ZW9mIChnc3RfcmlmZl9pbmRleF9lbnRyeSkpOwotICB9Ci0KLSAgLyogaW4gY2FzZSBvZiBwY20gYXVkaW8sIHdlIG5lZWQgdG8gY291bnQgdGhlIG51bWJlciBvZiBzYW1wbGVzIGZvcgotICAgKiBwdXR0aW5nIGluIHRoZSBpbmR4IGVudHJpZXMgKi8KLSAgaWYgKCFhdmlwYWQtPmlzX3ZpZGVvKSB7Ci0gICAgR3N0QXZpQXVkaW9QYWQgKmF1ZGlvcGFkID0gKEdzdEF2aUF1ZGlvUGFkICopIGF2aXBhZDsKLSAgICBpZiAoYXVkaW9wYWQtPmF1ZHMuZm9ybWF0ID09IEdTVF9SSUZGX1dBVkVfRk9STUFUX1BDTSkgewotICAgICAgYXVkaW9wYWQtPnNhbXBsZXMgKz0gc2l6ZSAvIGF1ZGlvcGFkLT5hdWRzLmJsb2NrYWxpZ247Ci0gICAgfQotICB9Ci0KLSAgbWVtY3B5ICgmKGF2aW11eC0+aWR4W2F2aW11eC0+aWR4X2luZGV4XS5pZCksIGNvZGUsIDQpOwotICBhdmltdXgtPmlkeFthdmltdXgtPmlkeF9pbmRleF0uZmxhZ3MgPSBHVUlOVDMyX1RPX0xFIChmbGFncyk7Ci0gIGF2aW11eC0+aWR4W2F2aW11eC0+aWR4X2luZGV4XS5vZmZzZXQgPSBHVUlOVDMyX1RPX0xFIChhdmltdXgtPmlkeF9vZmZzZXQpOwotICBhdmltdXgtPmlkeFthdmltdXgtPmlkeF9pbmRleF0uc2l6ZSA9IEdVSU5UMzJfVE9fTEUgKHNpemUpOwotICBhdmltdXgtPmlkeF9pbmRleCsrOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9tdXhfd3JpdGVfaW5kZXggKEdzdEF2aU11eCAqIGF2aW11eCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnc2l6ZSBzaXplOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoOCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIG1lbWNweSAobWFwLmRhdGEgKyAwLCAiaWR4MSIsIDQpOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChtYXAuZGF0YSArIDQsCi0gICAgICBhdmltdXgtPmlkeF9pbmRleCAqIHNpemVvZiAoZ3N0X3JpZmZfaW5kZXhfZW50cnkpKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICByZXMgPSBnc3RfcGFkX3B1c2ggKGF2aW11eC0+c3JjcGFkLCBidWZmZXIpOwotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXM7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgc2l6ZSA9IGF2aW11eC0+aWR4X2luZGV4ICogc2l6ZW9mIChnc3RfcmlmZl9pbmRleF9lbnRyeSk7Ci0gIGRhdGEgPSAoZ3VpbnQ4ICopIGF2aW11eC0+aWR4OwotICBhdmltdXgtPmlkeCA9IE5VTEw7ICAgICAgICAgICAvKiB3aWxsIGJlIGZyZWUoKSdlZCBieSBnc3RfYnVmZmVyX3VucmVmKCkgKi8KLQotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZmZlciwKLSAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIHNpemUsIDAsIHNpemUsIGRhdGEsIGdfZnJlZSkpOwotCi0gIGF2aW11eC0+dG90YWxfZGF0YSArPSBzaXplICsgODsKLQotICByZXMgPSBnc3RfcGFkX3B1c2ggKGF2aW11eC0+c3JjcGFkLCBidWZmZXIpOwotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXM7Ci0KLSAgYXZpbXV4LT5pZHhfc2l6ZSArPSBhdmltdXgtPmlkeF9pbmRleCAqIHNpemVvZiAoZ3N0X3JpZmZfaW5kZXhfZW50cnkpICsgODsKLQotICAvKiB1cGRhdGUgaGVhZGVyICovCi0gIGF2aW11eC0+YXZpX2hkci5mbGFncyB8PSBHU1RfUklGRl9BVklIX0hBU0lOREVYOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX211eF9iaWdmaWxlIChHc3RBdmlNdXggKiBhdmltdXgsIGdib29sZWFuIGxhc3QpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJ1ZmZlciAqaGVhZGVyOwotICBHU0xpc3QgKm5vZGU7Ci0KLSAgLyogZmlyc3Qgc29tZSBvZG1sIHN0YW5kYXJkIGluZGV4IGNodW5rcyBpbiB0aGUgbW92aSBsaXN0ICovCi0gIG5vZGUgPSBhdmltdXgtPnNpbmtwYWRzOwotICB3aGlsZSAobm9kZSkgewotICAgIEdzdEF2aVBhZCAqYXZpcGFkID0gKEdzdEF2aVBhZCAqKSBub2RlLT5kYXRhOwotCi0gICAgbm9kZSA9IG5vZGUtPm5leHQ7Ci0KLSAgICByZXMgPSBnc3RfYXZpX211eF93cml0ZV9hdml4X2luZGV4IChhdmltdXgsIGF2aXBhZCwgYXZpcGFkLT50YWcsCi0gICAgICAgIGF2aXBhZC0+aWR4X3RhZywgYXZpcGFkLT5pZHgsICZhdmlwYWQtPmlkeF9pbmRleCk7Ci0gICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgIHJldHVybiByZXM7Ci0gIH0KLQotICBpZiAoYXZpbXV4LT5pc19iaWdmaWxlKSB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotCi0gICAgLyogc2VhcmNoIGJhY2sgKi8KLSAgICBzZWdtZW50LnN0YXJ0ID0gYXZpbXV4LT5hdml4X3N0YXJ0OwotICAgIHNlZ21lbnQudGltZSA9IGF2aW11eC0+YXZpeF9zdGFydDsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGF2aW11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgICAvKiByZXdyaXRlIEFWSVggaGVhZGVyICovCi0gICAgaGVhZGVyID0gZ3N0X2F2aV9tdXhfcmlmZl9nZXRfYXZpeF9oZWFkZXIgKGF2aW11eC0+ZGF0YXhfc2l6ZSk7Ci0gICAgcmVzID0gZ3N0X3BhZF9wdXNoIChhdmltdXgtPnNyY3BhZCwgaGVhZGVyKTsKLQotICAgIC8qIGdvIGJhY2sgdG8gY3VycmVudCBsb2NhdGlvbiwgYXQgbGVhc3QgdHJ5ICovCi0gICAgc2VnbWVudC5zdGFydCA9IGF2aW11eC0+dG90YWxfZGF0YTsKLSAgICBzZWdtZW50LnRpbWUgPSBhdmltdXgtPnRvdGFsX2RhdGE7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChhdmltdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgIHJldHVybiByZXM7Ci0gIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGEgc3RhbmRhcmQgaW5kZXggaW4gdGhlIGZpcnN0IHJpZmYgY2h1bmsgKi8KLSAgICByZXMgPSBnc3RfYXZpX211eF93cml0ZV9pbmRleCAoYXZpbXV4KTsKLSAgICAvKiB0aGUgaW5kZXggZGF0YS9idWZmZXIgaXMgZnJlZWQgYnkgcHVzaGluZyBpdCAqLwotICAgIGF2aW11eC0+aWR4X2NvdW50ID0gMDsKLSAgICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIGF2aW11eC0+YXZpeF9zdGFydCA9IGF2aW11eC0+dG90YWxfZGF0YTsKLQotICBpZiAobGFzdCkKLSAgICByZXR1cm4gcmVzOwotCi0gIGF2aW11eC0+aXNfYmlnZmlsZSA9IFRSVUU7Ci0gIGF2aW11eC0+bnVteF9mcmFtZXMgPSAwOwotICBhdmltdXgtPmRhdGF4X3NpemUgPSA0OyAgICAgICAvKiBtb3ZpIHRhZyAqLwotICBhdmltdXgtPmlkeF9pbmRleCA9IDA7Ci0gIG5vZGUgPSBhdmltdXgtPnNpbmtwYWRzOwotICB3aGlsZSAobm9kZSkgewotICAgIEdzdEF2aVBhZCAqYXZpcGFkID0gKEdzdEF2aVBhZCAqKSBub2RlLT5kYXRhOwotICAgIG5vZGUgPSBub2RlLT5uZXh0OwotICAgIGlmICghYXZpcGFkLT5pc192aWRlbykgewotICAgICAgR3N0QXZpQXVkaW9QYWQgKmF1ZGlvcGFkID0gKEdzdEF2aUF1ZGlvUGFkICopIGF2aXBhZDsKLSAgICAgIGF1ZGlvcGFkLT5zYW1wbGVzID0gMDsKLSAgICB9Ci0gIH0KLQotICBoZWFkZXIgPSBnc3RfYXZpX211eF9yaWZmX2dldF9hdml4X2hlYWRlciAoMCk7Ci0gIGF2aW11eC0+dG90YWxfZGF0YSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChoZWFkZXIpOwotICAvKiBhdml4X3N0YXJ0IGlzIHVzZWQgYXMgYmFzZSBvZmZzZXQgZm9yIHRoZSBvZG1sIGluZGV4IGNodW5rICovCi0gIGF2aW11eC0+aWR4X29mZnNldCA9IGF2aW11eC0+dG90YWxfZGF0YSAtIGF2aW11eC0+YXZpeF9zdGFydDsKLQotICByZXR1cm4gZ3N0X3BhZF9wdXNoIChhdmltdXgtPnNyY3BhZCwgaGVhZGVyKTsKLX0KLQotLyogZW5vdWdoIGhlYWRlciBibGFibGEgbm93LCBsZXQncyBnbyBvbiB0byBhY3R1YWxseSB3cml0aW5nIHRoZSBoZWFkZXJzICovCi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX211eF9zdGFydF9maWxlIChHc3RBdmlNdXggKiBhdmltdXgpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RCdWZmZXIgKmhlYWRlcjsKLSAgR1NMaXN0ICpub2RlOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXZpbXV4LT50b3RhbF9kYXRhID0gMDsKLSAgYXZpbXV4LT50b3RhbF9mcmFtZXMgPSAwOwotICBhdmltdXgtPmRhdGFfc2l6ZSA9IDQ7ICAgICAgICAvKiBtb3ZpIHRhZyAqLwotICBhdmltdXgtPmRhdGF4X3NpemUgPSAwOwotICBhdmltdXgtPm51bV9mcmFtZXMgPSAwOwotICBhdmltdXgtPm51bXhfZnJhbWVzID0gMDsKLSAgYXZpbXV4LT5hdml4X3N0YXJ0ID0gMDsKLQotICBhdmltdXgtPmlkeF9pbmRleCA9IDA7Ci0gIGF2aW11eC0+aWR4X29mZnNldCA9IDA7ICAgICAgIC8qIHNlZSAxMCBsaW5lcyBiZWxvdyAqLwotICBhdmltdXgtPmlkeF9zaXplID0gMDsKLSAgYXZpbXV4LT5pZHhfY291bnQgPSAwOwotICBhdmltdXgtPmlkeCA9IE5VTEw7Ci0KLSAgLyogc3RhdGUgKi8KLSAgYXZpbXV4LT53cml0ZV9oZWFkZXIgPSBGQUxTRTsKLSAgYXZpbXV4LT5yZXN0YXJ0ID0gRkFMU0U7Ci0KLSAgLyogaW5pdCBzdHJlYW1zLCBzZWUgd2hhdCB3ZSd2ZSBnb3QgKi8KLSAgbm9kZSA9IGF2aW11eC0+c2lua3BhZHM7Ci0gIGF2aW11eC0+YXVkaW9fcGFkcyA9IGF2aW11eC0+dmlkZW9fcGFkcyA9IDA7Ci0gIHdoaWxlIChub2RlKSB7Ci0gICAgR3N0QXZpUGFkICphdmlwYWQgPSAoR3N0QXZpUGFkICopIG5vZGUtPmRhdGE7Ci0KLSAgICBub2RlID0gbm9kZS0+bmV4dDsKLQotICAgIGlmICghYXZpcGFkLT5pc192aWRlbykgewotICAgICAgLyogYXVkaW8gc3RyZWFtIG51bWJlcnMgbXVzdCBzdGFydCBhdCAxIGlmZiB0aGVyZSBpcyBhIHZpZGVvIHN0cmVhbSAwOwotICAgICAgICogcmVxdWVzdF9wYWQgaW5zZXJ0cyB2aWRlbyBwYWQgYXQgaGVhZCBvZiBsaXN0LCBzbyB0aGlzIHRlc3Qgc3VmZmljZXMgKi8KLSAgICAgIGlmIChhdmltdXgtPnZpZGVvX3BhZHMpCi0gICAgICAgIGF2aW11eC0+YXVkaW9fcGFkcysrOwotICAgICAgYXZpcGFkLT50YWcgPSBnX3N0cmR1cF9wcmludGYgKCIlMDJ1d2IiLCBhdmltdXgtPmF1ZGlvX3BhZHMpOwotICAgICAgYXZpcGFkLT5pZHhfdGFnID0gZ19zdHJkdXBfcHJpbnRmICgiaXglMDJ1IiwgYXZpbXV4LT5hdWRpb19wYWRzKTsKLSAgICAgIGlmICghYXZpbXV4LT52aWRlb19wYWRzKQotICAgICAgICBhdmltdXgtPmF1ZGlvX3BhZHMrKzsKLSAgICB9IGVsc2UgewotICAgICAgYXZpcGFkLT50YWcgPSBnX3N0cmR1cF9wcmludGYgKCIlMDJ1ZGIiLCBhdmltdXgtPnZpZGVvX3BhZHMpOwotICAgICAgYXZpcGFkLT5pZHhfdGFnID0gZ19zdHJkdXBfcHJpbnRmICgiaXglMDJ1IiwgYXZpbXV4LT52aWRlb19wYWRzKyspOwotICAgIH0KLSAgfQotCi0gIC8qIHN0cmVhbS1zdGFydCAoRklYTUU6IGNyZWF0ZSBpZCBiYXNlZCBvbiBpbnB1dCBpZHMpICovCi0gIHsKLSAgICBnY2hhciBzX2lkWzMyXTsKLQotICAgIGdfc25wcmludGYgKHNfaWQsIHNpemVvZiAoc19pZCksICJhdmltdXgtJTA4eCIsIGdfcmFuZG9tX2ludCAoKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChhdmltdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHNfaWQpKTsKLSAgfQotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoYXZpbXV4LT5zcmNwYWQpOwotICBnc3RfcGFkX3NldF9jYXBzIChhdmltdXgtPnNyY3BhZCwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBsZXQgZG93bnN0cmVhbSBrbm93IHdlIHRoaW5rIGluIEJZVEVTIGFuZCBleHBlY3QgdG8gZG8gc2Vla2luZyBsYXRlciBvbiAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoYXZpbXV4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICAvKiBoZWFkZXIgKi8KLSAgYXZpbXV4LT5hdmlfaGRyLnN0cmVhbXMgPSBnX3NsaXN0X2xlbmd0aCAoYXZpbXV4LT5zaW5rcGFkcyk7Ci0gIGF2aW11eC0+aXNfYmlnZmlsZSA9IEZBTFNFOwotCi0gIGhlYWRlciA9IGdzdF9hdmlfbXV4X3JpZmZfZ2V0X2F2aV9oZWFkZXIgKGF2aW11eCk7Ci0gIGF2aW11eC0+dG90YWxfZGF0YSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChoZWFkZXIpOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaCAoYXZpbXV4LT5zcmNwYWQsIGhlYWRlcik7Ci0KLSAgYXZpbXV4LT5pZHhfb2Zmc2V0ID0gYXZpbXV4LT50b3RhbF9kYXRhOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX211eF9zdG9wX2ZpbGUgKEdzdEF2aU11eCAqIGF2aW11eCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXMgPSBHU1RfRkxPV19PSzsKLSAgR3N0QnVmZmVyICpoZWFkZXI7Ci0gIEdTTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIC8qIERvIG5vdCB3cml0ZSBpbmRleCBhbmQgaGVhZGVyLCBpZiB0aGUgaW5kZXggaGFzIG5vIGRhdGEgKi8KLSAgaWYgKGF2aW11eC0+aWR4ID09IE5VTEwpCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIGlmIGJpZ2ZpbGUsIHJld3JpdGUgaGVhZGVyLCBlbHNlIHdyaXRlIGluZGV4ZXMgKi8KLSAgLyogZG9uJ3QgYmFpbCBvdXQgYXQgb25jZSBpZiBlcnJvciwgc3RpbGwgdHJ5IHRvIHJlLXdyaXRlIGhlYWRlciAqLwotICBpZiAoYXZpbXV4LT52aWRlb19wYWRzID4gMCkgewotICAgIGlmIChhdmltdXgtPmlzX2JpZ2ZpbGUpIHsKLSAgICAgIHJlcyA9IGdzdF9hdmlfbXV4X2JpZ2ZpbGUgKGF2aW11eCwgVFJVRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlcyA9IGdzdF9hdmlfbXV4X3dyaXRlX2luZGV4IChhdmltdXgpOwotICAgIH0KLSAgfQotCi0gIC8qIHdlIGRvIG91ciBiZXN0IHRvIG1ha2UgaXQgaW50ZXJsZWF2ZWQgYXQgbGVhc3QgLi4uICovCi0gIGlmIChhdmltdXgtPmF1ZGlvX3BhZHMgPiAwICYmIGF2aW11eC0+dmlkZW9fcGFkcyA+IDApCi0gICAgYXZpbXV4LT5hdmlfaGRyLmZsYWdzIHw9IEdTVF9SSUZGX0FWSUhfSVNJTlRFUkxFQVZFRDsKLQotICAvKiBzZXQgcmF0ZSBhbmQgZXZlcnl0aGluZyBoYXZpbmcgdG8gZG8gd2l0aCB0aGF0ICovCi0gIGF2aW11eC0+YXZpX2hkci5tYXhfYnBzID0gMDsKLSAgbm9kZSA9IGF2aW11eC0+c2lua3BhZHM7Ci0gIHdoaWxlIChub2RlKSB7Ci0gICAgR3N0QXZpUGFkICphdmlwYWQgPSAoR3N0QXZpUGFkICopIG5vZGUtPmRhdGE7Ci0KLSAgICBub2RlID0gbm9kZS0+bmV4dDsKLQotICAgIGlmICghYXZpcGFkLT5pc192aWRlbykgewotICAgICAgR3N0QXZpQXVkaW9QYWQgKmF1ZHBhZCA9IChHc3RBdmlBdWRpb1BhZCAqKSBhdmlwYWQ7Ci0KLSAgICAgIC8qIGNhbGN1bGF0ZSBicHMgaWYgbmVlZGVkICovCi0gICAgICBpZiAoIWF1ZHBhZC0+YXVkcy5hdl9icHMpIHsKLSAgICAgICAgaWYgKGF1ZHBhZC0+YXVkaW9fdGltZSkgewotICAgICAgICAgIGF1ZHBhZC0+YXVkcy5hdl9icHMgPQotICAgICAgICAgICAgICAoR1NUX1NFQ09ORCAqIGF1ZHBhZC0+YXVkaW9fc2l6ZSkgLyBhdWRwYWQtPmF1ZGlvX3RpbWU7Ci0gICAgICAgICAgLyogcm91bmQgYnBzIHRvIG5lYXJlc3QgbXVsdGlwbGUgb2YgODsKLSAgICAgICAgICAgKiB3aGljaCBpcyBtdWNoIG1vcmUgbGlrZWx5IHRvIGJlIHRoZSAoY2JyKSBiaXRyYXRlIGluIHVzZTsKLSAgICAgICAgICAgKiB3aGljaCBpbiB0dXJuIHJlc3VsdHMgaW4gYmV0dGVyIHRpbWVzdGFtcCBjYWxjdWxhdGlvbiBvbiBwbGF5YmFjayAqLwotICAgICAgICAgIGF1ZHBhZC0+YXVkcy5hdl9icHMgPSBHU1RfUk9VTkRfVVBfOCAoYXVkcGFkLT5hdWRzLmF2X2JwcyAtIDQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKGF2aW11eCwgU1RSRUFNLCBNVVgsCi0gICAgICAgICAgICAgIChfKCJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iKSksCi0gICAgICAgICAgICAgIChOVUxMKSk7Ci0gICAgICAgICAgYXVkcGFkLT5hdWRzLmF2X2JwcyA9IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIGhvdXNla2VlcGluZyBmb3IgdmJyIGNhc2UgKi8KLSAgICAgIGlmIChhdWRwYWQtPm1heF9hdWRpb19jaHVuaykKLSAgICAgICAgYXVkcGFkLT5hdWRzLmJsb2NrYWxpZ24gPSBhdWRwYWQtPm1heF9hdWRpb19jaHVuazsKLSAgICAgIGlmIChhdWRwYWQtPmF1ZHMuYmxvY2thbGlnbiA9PSAwKQotICAgICAgICBhdWRwYWQtPmF1ZHMuYmxvY2thbGlnbiA9IDE7Ci0gICAgICAvKiBub3RlIHRoYXQgaGRyLnJhdGUgaXMgYWN0dWFsbHkgdXNlZCBieSBkZW11eCBpbiBjYnIgY2FzZSAqLwotICAgICAgaWYgKGF2aXBhZC0+aGRyLnNjYWxlIDw9IDEpCi0gICAgICAgIGF2aXBhZC0+aGRyLnJhdGUgPSBhdWRwYWQtPmF1ZHMuYXZfYnBzIC8gYXVkcGFkLT5hdWRzLmJsb2NrYWxpZ247Ci0gICAgICBhdmltdXgtPmF2aV9oZHIubWF4X2JwcyArPSBhdWRwYWQtPmF1ZHMuYXZfYnBzOwotICAgICAgYXZpcGFkLT5oZHIubGVuZ3RoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChhdWRwYWQtPmF1ZGlvX3RpbWUsCi0gICAgICAgICAgYXZpcGFkLT5oZHIucmF0ZSwgYXZpcGFkLT5oZHIuc2NhbGUgKiBHU1RfU0VDT05EKTsKLSAgICB9IGVsc2UgewotICAgICAgR3N0QXZpVmlkZW9QYWQgKnZpZHBhZCA9IChHc3RBdmlWaWRlb1BhZCAqKSBhdmlwYWQ7Ci0KLSAgICAgIGF2aW11eC0+YXZpX2hkci5tYXhfYnBzICs9ICgodmlkcGFkLT52aWRzLmJpdF9jbnQgKyA3KSAvIDgpICoKLSAgICAgICAgICAoMTAwMDAwMC4gLyBhdmltdXgtPmF2aV9oZHIudXNfZnJhbWUpICogdmlkcGFkLT52aWRzLmltYWdlX3NpemU7Ci0gICAgICBhdmlwYWQtPmhkci5sZW5ndGggPSBhdmltdXgtPnRvdGFsX2ZyYW1lczsKLSAgICB9Ci0gIH0KLQotICAvKiBzdGF0aXN0aWNzL3RvdGFsX2ZyYW1lcy8uLi4gKi8KLSAgYXZpbXV4LT5hdmlfaGRyLnRvdF9mcmFtZXMgPSBhdmltdXgtPm51bV9mcmFtZXM7Ci0KLSAgLyogc2VlayBhbmQgcmV3cml0ZSB0aGUgaGVhZGVyICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChhdmltdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIC8qIHRoZSBmaXJzdCBlcnJvciBzdXJ2aXZlcyAqLwotICBoZWFkZXIgPSBnc3RfYXZpX211eF9yaWZmX2dldF9hdmlfaGVhZGVyIChhdmltdXgpOwotICBpZiAocmVzID09IEdTVF9GTE9XX09LKQotICAgIHJlcyA9IGdzdF9wYWRfcHVzaCAoYXZpbXV4LT5zcmNwYWQsIGhlYWRlcik7Ci0gIGVsc2UKLSAgICBnc3RfcGFkX3B1c2ggKGF2aW11eC0+c3JjcGFkLCBoZWFkZXIpOwotCi0gIHNlZ21lbnQuc3RhcnQgPSBhdmltdXgtPnRvdGFsX2RhdGE7Ci0gIHNlZ21lbnQudGltZSA9IGF2aW11eC0+dG90YWxfZGF0YTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChhdmltdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGF2aW11eC0+d3JpdGVfaGVhZGVyID0gVFJVRTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9tdXhfcmVzdGFydF9maWxlIChHc3RBdmlNdXggKiBhdmltdXgpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotCi0gIGlmICgocmVzID0gZ3N0X2F2aV9tdXhfc3RvcF9maWxlIChhdmltdXgpKSAhPSBHU1RfRkxPV19PSykKLSAgICByZXR1cm4gcmVzOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoYXZpbXV4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLQotICByZXR1cm4gZ3N0X2F2aV9tdXhfc3RhcnRfZmlsZSAoYXZpbXV4KTsKLX0KLQotLyogaGFuZGxlIGV2ZW50cyAoc2VhcmNoKSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfYXZpX211eF9oYW5kbGVfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIEdzdEV2ZW50ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0QXZpTXV4ICphdmltdXg7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgYXZpbXV4ID0gR1NUX0FWSV9NVVggKHVzZXJfZGF0YSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotICAgICAgR3N0QXZpQ29sbGVjdERhdGEgKmNvbGxlY3RfcGFkOwotICAgICAgR3N0QXZpVmlkZW9QYWQgKmF2aXBhZDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0KLSAgICAgIC8qIGZpbmQgc3RyZWFtIGRhdGEgKi8KLSAgICAgIGNvbGxlY3RfcGFkID0gKEdzdEF2aUNvbGxlY3REYXRhICopIGRhdGE7Ci0gICAgICBnX2Fzc2VydCAoY29sbGVjdF9wYWQpOwotICAgICAgYXZpcGFkID0gKEdzdEF2aVZpZGVvUGFkICopIGNvbGxlY3RfcGFkLT5hdmlwYWQ7Ci0gICAgICBnX2Fzc2VydCAoYXZpcGFkKTsKLQotICAgICAgaWYgKGF2aXBhZC0+cGFyZW50LmlzX3ZpZGVvKSB7Ci0gICAgICAgIHJldCA9IGdzdF9hdmlfbXV4X3ZpZHNpbmtfc2V0X2NhcHMgKGRhdGEtPnBhZCwgY2Fwcyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXQgPSBnc3RfYXZpX211eF9hdWRzaW5rX3NldF9jYXBzIChkYXRhLT5wYWQsIGNhcHMpOwotICAgICAgfQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOnsKLSAgICAgIEdzdFRhZ0xpc3QgKmxpc3Q7Ci0gICAgICBHc3RUYWdTZXR0ZXIgKnNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChhdmltdXgpOwotICAgICAgY29uc3QgR3N0VGFnTWVyZ2VNb2RlIG1vZGUgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKHNldHRlcik7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmbGlzdCk7Ci0gICAgICBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzIChzZXR0ZXIsIGxpc3QsIG1vZGUpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGV2ZW50ICE9IE5VTEwpCi0gICAgcmV0dXJuIGdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdCAocGFkcywgZGF0YSwgZXZlbnQsIEZBTFNFKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBzZW5kIGV4dHJhICdwYWRkaW5nJyBkYXRhICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9tdXhfc2VuZF9wYWRfZGF0YSAoR3N0QXZpTXV4ICogYXZpbXV4LCBndWxvbmcgbnVtX2J5dGVzKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG51bV9ieXRlcyk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChidWZmZXIsIDAsIDAsIG51bV9ieXRlcyk7Ci0KLSAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoYXZpbXV4LT5zcmNwYWQsIGJ1ZmZlcik7Ci19Ci0KLSNkZWZpbmUgZ3N0X2F2aV9tdXhfaXNfdW5jb21wcmVzc2VkKGZvdXJjYykJCVwKLSAgKGZvdXJjYyA9PSBHU1RfUklGRl9ESUIgfHwJCQkJXAotICAgZm91cmNjID09IEdTVF9SSUZGX3JnYiB8fAkJCQlcCi0gICBmb3VyY2MgPT0gR1NUX1JJRkZfUkdCIHx8IGZvdXJjYyA9PSBHU1RfUklGRl9SQVcpCi0KLS8qCi0gKiBIZWxwZXIgZm9yIGdzdF9hdmlfZGVtdXhfaW52ZXJ0KCkKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1zd2FwX2xpbmUgKGd1aW50OCAqIGQxLCBndWludDggKiBkMiwgZ3VpbnQ4ICogdG1wLCBnaW50IGJ5dGVzKQotewotICBtZW1jcHkgKHRtcCwgZDEsIGJ5dGVzKTsKLSAgbWVtY3B5IChkMSwgZDIsIGJ5dGVzKTsKLSAgbWVtY3B5IChkMiwgdG1wLCBieXRlcyk7Ci19Ci0KLS8qCi0gKiBJbnZlcnQgRElCIGJ1ZmZlcnMuLi4gVGFrZXMgZXhpc3RpbmcgYnVmZmVyIGFuZAotICogcmV0dXJucyBlaXRoZXIgdGhlIGJ1ZmZlciBvciBhIG5ldyBvbmUgKHdpdGggb2xkCi0gKiBvbmUgZGVyZWZlcmVuY2VkKS4KLSAqIEZGTVBFRyBkb2VzIHRoaXMgYnkgc2ltcGx5IG5lZ2F0aW5nIHRoZSBoZWlnaHQgaW4gdGhlIGhlYWRlci4gU2hvdWxkIHdlPwotICogRklYTUU6IGNhbid0IHdlIHByZWFsbG9jYXRlIHRtcD8gYW5kIHJlbWVtYmVyIHN0cmlkZSwgYnBwPwotICogICAgICAgIHRoaXMgY291bGQgYmUgZG9uZSBpbiBkb19vbmVfYnVmZmVyKCkgSSBzdXBwb3NlCi0gKi8KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2F2aV9tdXhfaW52ZXJ0IChHc3RBdmlQYWQgKiBhdmlwYWQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ2ludCB5LCB3LCBoOwotICBnaW50IGJwcCwgc3RyaWRlOwotICBndWludDggKnRtcCA9IE5VTEw7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIEdzdEF2aVZpZGVvUGFkICp2aWRwYWQgPSAoR3N0QXZpVmlkZW9QYWQgKikgYXZpcGFkOwotCi0gIGggPSB2aWRwYWQtPnZpZHMuaGVpZ2h0OwotICB3ID0gdmlkcGFkLT52aWRzLndpZHRoOwotICBicHAgPSB2aWRwYWQtPnZpZHMuYml0X2NudCA/IHZpZHBhZC0+dmlkcy5iaXRfY250IDogODsKLSAgc3RyaWRlID0gR1NUX1JPVU5EX1VQXzQgKHcgKiAoYnBwIC8gOCkpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gIGlmIChtYXAuc2l6ZSA8IChzdHJpZGUgKiBoKSkgewotICAgIEdTVF9XQVJOSU5HICgiQnVmZmVyIGlzIHNtYWxsZXIgdGhhbiByZXBvcnRlZCBXaWR0aCB4IEhlaWdodCB4IERlcHRoIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gYnVmOwotICB9Ci0KLSAgdG1wID0gZ19tYWxsb2MgKHN0cmlkZSk7Ci0KLSAgZm9yICh5ID0gMDsgeSA8IGggLyAyOyB5KyspIHsKLSAgICBzd2FwX2xpbmUgKG1hcC5kYXRhICsgc3RyaWRlICogeSwgbWFwLmRhdGEgKyBzdHJpZGUgKiAoaCAtIDEgLSB5KSwgdG1wLAotICAgICAgICBzdHJpZGUpOwotICB9Ci0KLSAgZ19mcmVlICh0bXApOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotLyogZG8gYnVmZmVyICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2F2aV9tdXhfZG9fYnVmZmVyIChHc3RBdmlNdXggKiBhdmltdXgsIEdzdEF2aVBhZCAqIGF2aXBhZCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdEJ1ZmZlciAqZGF0YSwgKmhlYWRlcjsKLSAgZ3Vsb25nIHRvdGFsX3NpemUsIHBhZF9ieXRlcyA9IDA7Ci0gIGd1aW50IGZsYWdzOwotICBnc2l6ZSBkYXRhc2l6ZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWU7Ci0KLSAgZGF0YSA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChhdmltdXgtPmNvbGxlY3QsIGF2aXBhZC0+Y29sbGVjdCk7Ci0gIC8qIGFycmFuZ2UgZG93bnN0cmVhbSBydW5uaW5nIHRpbWUgKi8KLSAgdGltZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJmF2aXBhZC0+Y29sbGVjdC0+c2VnbWVudCwKLSAgICAgIEdTVF9GT1JNQVRfVElNRSwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGRhdGEpKTsKLSAgaWYgKHRpbWUgIT0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGRhdGEpKSB7Ci0gICAgZGF0YSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoZGF0YSk7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGRhdGEpID0gdGltZTsKLSAgfQotCi0gIC8qIFByZXBlbmQgYSBzcGVjaWFsIGJ1ZmZlciB0byB0aGUgZmlyc3Qgb25lIGZvciBzb21lIGZvcm1hdHMgKi8KLSAgaWYgKGF2aXBhZC0+aXNfdmlkZW8pIHsKLSAgICBHc3RBdmlWaWRlb1BhZCAqdmlkcGFkID0gKEdzdEF2aVZpZGVvUGFkICopIGF2aXBhZDsKLQotICAgIGlmICh2aWRwYWQtPnByZXBlbmRfYnVmZmVyKSB7Ci0gICAgICAvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIGRhdGEgdW50aWwgd2UgY29weSB0aGUgdGltZXN0YW1wcywgdGhlbiByZWxlYXNlIGl0ICovCi0gICAgICBHc3RCdWZmZXIgKm5ld2RhdGEgPQotICAgICAgICAgIGdzdF9idWZmZXJfYXBwZW5kICh2aWRwYWQtPnByZXBlbmRfYnVmZmVyLCBnc3RfYnVmZmVyX3JlZiAoZGF0YSkpOwotICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld2RhdGEsIGRhdGEsIEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTLCAwLCAtMSk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChkYXRhKTsKLQotICAgICAgZGF0YSA9IG5ld2RhdGE7Ci0gICAgICB2aWRwYWQtPnByZXBlbmRfYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBESUIgYnVmZmVycyBhcmUgc3RvcmVkIHRvcGRvd24gKEkgZG9uJ3Qga25vdyB3aHkpICovCi0gICAgaWYgKGdzdF9hdmlfbXV4X2lzX3VuY29tcHJlc3NlZCAoYXZpcGFkLT5oZHIuZmNjX2hhbmRsZXIpKSB7Ci0gICAgICBkYXRhID0gZ3N0X2F2aV9tdXhfaW52ZXJ0IChhdmlwYWQsIGRhdGEpOwotICAgIH0KLSAgfQotCi0gIGlmIChhdmltdXgtPnJlc3RhcnQpIHsKLSAgICBpZiAoKHJlcyA9IGdzdF9hdmlfbXV4X3Jlc3RhcnRfZmlsZSAoYXZpbXV4KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBkYXRhc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGRhdGEpOwotCi0gIC8qIG5lZWQgdG8gcmVzdGFydCBvciBzdGFydCBhIG5leHQgYXZpeCBjaHVuayA/ICovCi0gIGlmICgoYXZpbXV4LT5pc19iaWdmaWxlID8gYXZpbXV4LT5kYXRheF9zaXplIDogYXZpbXV4LT5kYXRhX3NpemUpICsKLSAgICAgIGRhdGFzaXplID4gR1NUX0FWSV9NQVhfU0laRSkgewotICAgIGlmIChhdmltdXgtPmVuYWJsZV9sYXJnZV9hdmkpIHsKLSAgICAgIGlmICgocmVzID0gZ3N0X2F2aV9tdXhfYmlnZmlsZSAoYXZpbXV4LCBGQUxTRSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICgocmVzID0gZ3N0X2F2aV9tdXhfcmVzdGFydF9maWxlIChhdmltdXgpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgfQotCi0gIC8qIGdldCBoZWFkZXIgYW5kIHJlY29yZCBzb21lIHN0YXRzICovCi0gIGlmIChkYXRhc2l6ZSAmIDEpIHsKLSAgICBwYWRfYnl0ZXMgPSAyIC0gKGRhdGFzaXplICYgMSk7Ci0gIH0KLSAgaGVhZGVyID0gZ3N0X2F2aV9tdXhfcmlmZl9nZXRfaGVhZGVyIChhdmlwYWQsIGRhdGFzaXplKTsKLSAgdG90YWxfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGhlYWRlcikgKyBkYXRhc2l6ZSArIHBhZF9ieXRlczsKLQotICBpZiAoYXZpbXV4LT5pc19iaWdmaWxlKSB7Ci0gICAgYXZpbXV4LT5kYXRheF9zaXplICs9IHRvdGFsX3NpemU7Ci0gIH0gZWxzZSB7Ci0gICAgYXZpbXV4LT5kYXRhX3NpemUgKz0gdG90YWxfc2l6ZTsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZIChhdmlwYWQtPmhvb2spKSB7Ci0gICAgZ3N0X2J1ZmZlcl9yZWYgKGRhdGEpOwotICAgIGF2aXBhZC0+aG9vayAoYXZpbXV4LCBhdmlwYWQsIGRhdGEpOwotICB9Ci0KLSAgLyogdGhlIHN1Z2dlc3RlZCBidWZmZXIgc2l6ZSBpcyB0aGUgbWF4IGZyYW1lIHNpemUgKi8KLSAgaWYgKGF2aXBhZC0+aGRyLmJ1ZnNpemUgPCBkYXRhc2l6ZSkKLSAgICBhdmlwYWQtPmhkci5idWZzaXplID0gZGF0YXNpemU7Ci0KLSAgaWYgKGF2aXBhZC0+aXNfdmlkZW8pIHsKLSAgICBhdmltdXgtPnRvdGFsX2ZyYW1lcysrOwotCi0gICAgaWYgKGF2aW11eC0+aXNfYmlnZmlsZSkgewotICAgICAgYXZpbXV4LT5udW14X2ZyYW1lcysrOwotICAgIH0gZWxzZSB7Ci0gICAgICBhdmltdXgtPm51bV9mcmFtZXMrKzsKLSAgICB9Ci0KLSAgICBmbGFncyA9IDB4MDI7Ci0gICAgaWYgKCFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChkYXRhLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpCi0gICAgICBmbGFncyB8PSAweDEwOwotICB9IGVsc2UgewotICAgIEdzdEF2aUF1ZGlvUGFkICphdWRwYWQgPSAoR3N0QXZpQXVkaW9QYWQgKikgYXZpcGFkOwotCi0gICAgZmxhZ3MgPSAwOwotICAgIGF1ZHBhZC0+YXVkaW9fc2l6ZSArPSBkYXRhc2l6ZTsKLSAgICBhdWRwYWQtPmF1ZGlvX3RpbWUgKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoZGF0YSk7Ci0gICAgaWYgKGF1ZHBhZC0+bWF4X2F1ZGlvX2NodW5rICYmIGRhdGFzaXplID4gYXVkcGFkLT5tYXhfYXVkaW9fY2h1bmspCi0gICAgICBhdWRwYWQtPm1heF9hdWRpb19jaHVuayA9IGRhdGFzaXplOwotICB9Ci0KLSAgZ3N0X2F2aV9tdXhfYWRkX2luZGV4IChhdmltdXgsIGF2aXBhZCwgZmxhZ3MsIGRhdGFzaXplKTsKLQotICAvKiBzZW5kIGJ1ZmZlcnMgKi8KLSAgR1NUX0xPR19PQkpFQ1QgKGF2aW11eCwgInB1c2hpbmcgYnVmZmVyczogaGVhZCwgZGF0YSIpOwotCi0gIGlmICgocmVzID0gZ3N0X3BhZF9wdXNoIChhdmltdXgtPnNyY3BhZCwgaGVhZGVyKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBkb25lOwotCi0gIGdzdF9idWZmZXJfcmVmIChkYXRhKTsKLSAgaWYgKChyZXMgPSBnc3RfcGFkX3B1c2ggKGF2aW11eC0+c3JjcGFkLCBkYXRhKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBkb25lOwotCi0gIGlmIChwYWRfYnl0ZXMpIHsKLSAgICBpZiAoKHJlcyA9IGdzdF9hdmlfbXV4X3NlbmRfcGFkX2RhdGEgKGF2aW11eCwgcGFkX2J5dGVzKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICAvKiBpZiBhbnkgcHVzaCBhYm92ZSBmYWlscywgd2UncmUgaW4gdHJvdWJsZSB3aXRoIGZpbGUgY29uc2lzdGVuY3kgYW55d2F5ICovCi0gIGF2aW11eC0+dG90YWxfZGF0YSArPSB0b3RhbF9zaXplOwotICBhdmltdXgtPmlkeF9vZmZzZXQgKz0gdG90YWxfc2l6ZTsKLQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZGF0YSk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qIHBpY2sgdGhlIG9sZGVzdCBidWZmZXIgZnJvbSB0aGUgcGFkcyBhbmQgcHVzaCBpdCAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfbXV4X2RvX29uZV9idWZmZXIgKEdzdEF2aU11eCAqIGF2aW11eCkKLXsKLSAgR3N0QXZpUGFkICphdmlwYWQsICpiZXN0X3BhZDsKLSAgR1NMaXN0ICpub2RlOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Q2xvY2tUaW1lIHRpbWUsIGJlc3RfdGltZSwgZGVsYXk7Ci0KLSAgbm9kZSA9IGF2aW11eC0+c2lua3BhZHM7Ci0gIGJlc3RfcGFkID0gTlVMTDsKLSAgYmVzdF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgYXZpcGFkID0gKEdzdEF2aVBhZCAqKSBub2RlLT5kYXRhOwotCi0gICAgaWYgKCFhdmlwYWQtPmNvbGxlY3QpCi0gICAgICBjb250aW51ZTsKLQotICAgIGJ1ZmZlciA9IGdzdF9jb2xsZWN0X3BhZHNfcGVlayAoYXZpbXV4LT5jb2xsZWN0LCBhdmlwYWQtPmNvbGxlY3QpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgY29udGludWU7Ci0gICAgdGltZSA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgICAvKiBpbnZhbGlkIHNob3VsZCBwYXNzICovCi0gICAgaWYgKEdfTElLRUxZIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZSkpKSB7Ci0gICAgICB0aW1lID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmYXZpcGFkLT5jb2xsZWN0LT5zZWdtZW50LAotICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgdGltZSk7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYXZpbXV4LCAiY2xpcHBpbmcgYnVmZmVyIG9uIHBhZCAlcyBvdXRzaWRlIHNlZ21lbnQiLAotICAgICAgICAgICAgR1NUX1BBRF9OQU1FIChhdmlwYWQtPmNvbGxlY3QtPnBhZCkpOwotICAgICAgICBidWZmZXIgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAoYXZpbXV4LT5jb2xsZWN0LCBhdmlwYWQtPmNvbGxlY3QpOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZGVsYXkgPSBhdmlwYWQtPmlzX3ZpZGVvID8gR1NUX1NFQ09ORCAvIDIgOiAwOwotCi0gICAgLyogaW52YWxpZCB0aW1lc3RhbXAgYnVmZmVycyBwYXNzIGZpcnN0LAotICAgICAqIHRoZXNlIGFyZSBwcm9iYWJseSBpbml0aWFsaXphdGlvbiBidWZmZXJzICovCi0gICAgaWYgKGJlc3RfcGFkID09IE5VTEwgfHwgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKQotICAgICAgICB8fCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGJlc3RfdGltZSkgJiYgdGltZSArIGRlbGF5IDwgYmVzdF90aW1lKSkgewotICAgICAgYmVzdF9wYWQgPSBhdmlwYWQ7Ci0gICAgICBiZXN0X3RpbWUgPSB0aW1lICsgZGVsYXk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGJlc3RfcGFkKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGF2aW11eCwgInNlbGVjdGVkIHBhZCAlcyB3aXRoIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfUEFEX05BTUUgKGJlc3RfcGFkLT5jb2xsZWN0LT5wYWQpLCBHU1RfVElNRV9BUkdTIChiZXN0X3RpbWUpKTsKLQotICAgIHJldHVybiBnc3RfYXZpX211eF9kb19idWZmZXIgKGF2aW11eCwgYmVzdF9wYWQpOwotICB9IGVsc2UgewotICAgIC8qIHNpbXBseSBmaW5pc2ggb2ZmIHRoZSBmaWxlIGFuZCBzZW5kIEVPUyAqLwotICAgIGdzdF9hdmlfbXV4X3N0b3BfZmlsZSAoYXZpbXV4KTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGF2aW11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotCi19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX211eF9jb2xsZWN0X3BhZHMgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0QXZpTXV4ICogYXZpbXV4KQotewotICBHc3RGbG93UmV0dXJuIHJlczsKLQotICBpZiAoR19VTkxJS0VMWSAoYXZpbXV4LT53cml0ZV9oZWFkZXIpKSB7Ci0gICAgaWYgKChyZXMgPSBnc3RfYXZpX211eF9zdGFydF9maWxlIChhdmltdXgpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIHJldHVybiByZXM7Ci0gIH0KLQotICByZXR1cm4gZ3N0X2F2aV9tdXhfZG9fb25lX2J1ZmZlciAoYXZpbXV4KTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X2F2aV9tdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEF2aU11eCAqYXZpbXV4OwotCi0gIGF2aW11eCA9IEdTVF9BVklfTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9CSUdGSUxFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGF2aW11eC0+ZW5hYmxlX2xhcmdlX2F2aSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX211eF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QXZpTXV4ICphdmltdXg7Ci0KLSAgYXZpbXV4ID0gR1NUX0FWSV9NVVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0JJR0ZJTEU6Ci0gICAgICBhdmltdXgtPmVuYWJsZV9sYXJnZV9hdmkgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2F2aV9tdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0QXZpTXV4ICphdmltdXg7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBhdmltdXggPSBHU1RfQVZJX01VWCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKGF2aW11eC0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zdG9wIChhdmltdXgtPmNvbGxlY3QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdvdG8gZG9uZTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2F2aV9tdXhfcmVzZXQgKGF2aW11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2F2aS9nc3RhdmltdXguaCBiL2dzdC9hdmkvZ3N0YXZpbXV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZDUzNDMuLjAwMDAwMDAKLS0tIGEvZ3N0L2F2aS9nc3RhdmltdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKiBBVkkgbXV4ZXIgcGx1Z2luIGZvciBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0FWSV9NVVhfSF9fCi0jZGVmaW5lIF9fR1NUX0FWSV9NVVhfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oPgotI2luY2x1ZGUgPGdzdC9yaWZmL3JpZmYtaWRzLmg+Ci0jaW5jbHVkZSAiYXZpLWlkcy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVZJX01VWCBcCi0gIChnc3RfYXZpX211eF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVZJX01VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FWSV9NVVgsR3N0QXZpTXV4KSkKLSNkZWZpbmUgR1NUX0FWSV9NVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQVZJX01VWCxHc3RBdmlNdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVklfTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQVZJX01VWCkpCi0jZGVmaW5lIEdTVF9JU19BVklfTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FWSV9NVVgpKQotCi0jZGVmaW5lIEdTVF9BVklfSU5ERVhfT0ZfSU5ERVhFUyAgICAgMAotI2RlZmluZSBHU1RfQVZJX0lOREVYX09GX0NIVU5LUyAgICAgIDEKLQotLyogdGhpcyBhbGxvd3MgaW5kZXhpbmcgdXAgdG8gNjRHQiBhdmkgZmlsZSAqLwotI2RlZmluZSBHU1RfQVZJX1NVUEVSSU5ERVhfQ09VTlQgICAgMzIKLQotLyogbWF4IHNpemUgKi8KLSNkZWZpbmUgR1NUX0FWSV9NQVhfU0laRSAgICAweDQwMDAwMDAwCi0KLXR5cGVkZWYgc3RydWN0IF9nc3RfYXZpX3N1cGVyaW5kZXhfZW50cnkgewotICBndWludDY0IG9mZnNldDsKLSAgZ3VpbnQzMiBzaXplOwotICBndWludDMyIGR1cmF0aW9uOwotfSBnc3RfYXZpX3N1cGVyaW5kZXhfZW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IF9nc3RfcmlmZl9zdHJoX2Z1bGwgewotICBnc3RfcmlmZl9zdHJoICBwYXJlbnQ7Ci0gIC8qIHJjRnJhbWUsIFJFQ1Qgc3RydWN0dXJlIChzdHJ1Y3Qgb2YgNCBzaG9ydHMpICovCi0gIGdpbnQxNiAgbGVmdDsKLSAgZ2ludDE2ICB0b3A7Ci0gIGdpbnQxNiAgcmlnaHQ7Ci0gIGdpbnQxNiAgYm90dG9tOwotfSBnc3RfcmlmZl9zdHJoX2Z1bGw7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdmlQYWQgR3N0QXZpUGFkOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEF2aU11eCBHc3RBdmlNdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QXZpTXV4Q2xhc3MgR3N0QXZpTXV4Q2xhc3M7Ci0KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKkdzdEF2aVBhZEhvb2spIChHc3RBdmlNdXggKiBhdmksIEdzdEF2aVBhZCAqIGF2aXBhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdHJ1Y3QgX0dzdEF2aVBhZCB7Ci0gIC8qIGRvIG5vdCBleHRlbmQsIGxpbmsgdG8gaXQgKi8KLSAgLyogaXMgTlVMTCBpZiBvcmlnaW5hbCBzaW5rIHJlcXVlc3QgcGFkIGhhcyBiZWVuIHJlbW92ZWQgKi8KLSAgR3N0Q29sbGVjdERhdGEgKmNvbGxlY3Q7Ci0KLSAgLyogdHlwZSAqLwotICBnYm9vbGVhbiBpc192aWRlbzsKLSAgZ2Jvb2xlYW4gY29ubmVjdGVkOwotCi0gIC8qIGNodW5rIHRhZyAqLwotICBnY2hhciAqdGFnOwotCi0gIC8qIHN0cmVhbSBoZWFkZXIgKi8KLSAgZ3N0X3JpZmZfc3RyaCBoZHI7Ci0KLSAgLyogb2RtbCBzdXBlciBpbmRleGVzICovCi0gIGdzdF9hdmlfc3VwZXJpbmRleF9lbnRyeSBpZHhbR1NUX0FWSV9TVVBFUklOREVYX0NPVU5UXTsKLSAgZ2ludCBpZHhfaW5kZXg7Ci0gIGdjaGFyICppZHhfdGFnOwotCi0gIC8qIHN0cmVhbSBzcGVjaWZpYyBob29rICovCi0gIEdzdEF2aVBhZEhvb2sgaG9vazsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdmlWaWRlb1BhZCB7Ci0gIEdzdEF2aVBhZCBwYXJlbnQ7Ci0KLSAgLyogc3RyZWFtIGZvcm1hdCAqLwotICBnc3RfcmlmZl9zdHJmX3ZpZHMgdmlkczsKLSAgLyogZXh0cmEgZGF0YSAqLwotICBHc3RCdWZmZXIgKnZpZHNfY29kZWNfZGF0YTsKLSAgLyogT0RNTCB2aWRlbyBwcm9wZXJ0aWVzICovCi0gIGdzdF9yaWZmX3ZwcnAgdnBycDsKLQotICBHc3RCdWZmZXIgKnByZXBlbmRfYnVmZmVyOwotCi19IEdzdEF2aVZpZGVvUGFkOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXZpQXVkaW9QYWQgewotICBHc3RBdmlQYWQgcGFyZW50OwotCi0gIC8qIHN0cmVhbSBmb3JtYXQgKi8KLSAgZ3N0X3JpZmZfc3RyZl9hdWRzIGF1ZHM7Ci0gIC8qIGF1ZGlvIGluZm8gZm9yIGJwcyBjYWxjdWxhdGlvbiAqLwotICBndWludDMyIGF1ZGlvX3NpemU7Ci0gIGd1aW50NjQgYXVkaW9fdGltZTsKLSAgLyogbWF4IGF1ZGlvIGNodW5rIHNpemUgZm9yIHZiciAqLwotICBndWludDMyIG1heF9hdWRpb19jaHVuazsKLQotICAvKiBjb3VudHMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHRvIHB1dCBpbiBpbmR4IGNodW5rCi0gICAqIHVzZWZ1bCBmb3IgcmF3IGF1ZGlvIHdoZXJlIHVzdWFsbHkgdGhlcmUgYXJlIG1vcmUgdGhhbgotICAgKiAxIHNhbXBsZSBpbiBlYWNoIEdzdEJ1ZmZlciAqLwotICBnaW50IHNhbXBsZXM7Ci0KLSAgLyogZXh0cmEgZGF0YSAqLwotICBHc3RCdWZmZXIgKmF1ZHNfY29kZWNfZGF0YTsKLX0gR3N0QXZpQXVkaW9QYWQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RBdmlDb2xsZWN0RGF0YSB7Ci0gIC8qIGV4dGVuZCB0aGUgQ29sbGVjdERhdGEgKi8KLSAgR3N0Q29sbGVjdERhdGEgY29sbGVjdDsKLQotICBHc3RBdmlQYWQgICAgICAqYXZpcGFkOwotfSBHc3RBdmlDb2xsZWN0RGF0YTsKLQotc3RydWN0IF9Hc3RBdmlNdXggewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyogcGFkcyAqLwotICBHc3RQYWQgICAgICAgICAgICAgICpzcmNwYWQ7Ci0gIC8qIHNpbmtwYWRzLCB2aWRlbyBmaXJzdCAqLwotICBHU0xpc3QgICAgICAgICAgICAgICpzaW5rcGFkczsKLSAgLyogdmlkZW8gcmVzdHJpY3RlZCB0byAxIHBhZCAqLwotICBndWludCAgICAgICAgICAgICAgIHZpZGVvX3BhZHMsIGF1ZGlvX3BhZHM7Ci0gIEdzdENvbGxlY3RQYWRzICAgICAqY29sbGVjdDsKLQotICAvKiB0aGUgQVZJIGhlYWRlciAqLwotICAvKiBzdGlsbCBzb21lIHNpbmdsZSBzdHJlYW0gdmlkZW8gZGF0YSBpbiBtdXggc3RydWN0ICovCi0gIGdzdF9yaWZmX2F2aWggYXZpX2hkcjsKLSAgLyogdG90YWwgbnVtYmVyIG9mICh2aWRlbykgZnJhbWVzICovCi0gIGd1aW50MzIgdG90YWxfZnJhbWVzOwotICAvKiBhbW91bnQgb2YgdG90YWwgZGF0YSAoYnl0ZXMpICovCi0gIGd1aW50NjQgdG90YWxfZGF0YTsKLSAgLyogYW1vdW50IG9mIGRhdGEgKGJ5dGVzKSBpbiB0aGUgQVZJL0FWSVggYmxvY2s7Ci0gICAqIGFjdHVhbGx5IHRoZSBtb3ZpIGxpc3QsIHNvIGNvdW50ZWQgZnJvbSBhbmQgaW5jbHVkaW5nIHRoZSBtb3ZpIHRhZyAqLwotICBndWludDMyIGRhdGFfc2l6ZSwgZGF0YXhfc2l6ZTsKLSAgLyogbnVtICh2aWRlbykgZnJhbWVzIGluIHRoZSBBVkkvQVZJWCBibG9jayAqLwotICBndWludDMyIG51bV9mcmFtZXMsIG51bXhfZnJhbWVzOwotICAvKiBzaXplIG9mIGhkcmwgbGlzdCwgaW5jbHVkaW5nIHRhZyBhcyB1c3VhbCAqLwotCi0gIC8qIHRvdGFsIHNpemUgb2YgZXh0cmEgY29kZWMgZGF0YSAqLwotICBndWludDMyIGNvZGVjX2RhdGFfc2l6ZTsKLSAgLyogc3RhdGUgaW5mbyAqLwotICBnYm9vbGVhbiB3cml0ZV9oZWFkZXI7Ci0gIGdib29sZWFuIHJlc3RhcnQ7Ci0KLSAgLyogdGFncyAqLwotICBHc3RUYWdMaXN0ICp0YWdzX3NuYXA7Ci0KLSAgLyogaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFWSSBpbmRleCAoJ2lkeCcpICovCi0gIGdzdF9yaWZmX2luZGV4X2VudHJ5ICppZHg7Ci0gIGdpbnQgaWR4X2luZGV4LCBpZHhfY291bnQ7Ci0gIC8qIG9mZnNldCBvZiAqY2h1bmsqIChyZWxhdGl2ZSB0byBhIGJhc2Ugb2Zmc2V0KTsgZW50ZXJlZCBpbiB0aGUgaW5kZXggKi8KLSAgZ3VpbnQzMiBpZHhfb2Zmc2V0OwotICAvKiBzaXplIG9mIGlkeDEgY2h1bmsgKGluY2x1ZGluZyEgY2h1bmsgaGVhZGVyIGFuZCBzaXplIGJ5dGVzKSAqLwotICBndWludDMyIGlkeF9zaXplOwotCi0gIC8qIGFyZSB3ZSBhIGJpZyBmaWxlIGFscmVhZHk/ICovCi0gIGdib29sZWFuIGlzX2JpZ2ZpbGU7Ci0gIGd1aW50NjQgYXZpeF9zdGFydDsKLQotICAvKiB3aGV0aGVyIHRvIHVzZSAibGFyZ2UgQVZJIGZpbGVzIiBvciBqdXN0IHN0aWNrIHRvIHNtYWxsIGluZGV4ZWQgZmlsZXMgKi8KLSAgZ2Jvb2xlYW4gZW5hYmxlX2xhcmdlX2F2aTsKLX07Ci0KLXN0cnVjdCBfR3N0QXZpTXV4Q2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2F2aV9tdXhfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUX0FWSV9NVVhfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmMgYi9nc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YzljY2EuLjAwMDAwMDAKLS0tIGEvZ3N0L2F2aS9nc3RhdmlzdWJ0aXRsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBBVkkgR0FCMiBzdWJ0aXRsZSBwYXJzZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWF2aXN1YnRpdGxlCi0gKgotICogPHJlZnNlY3QyPgotICogPHBhcmE+Ci0gKiBQYXJzZXMgdGhlIHN1YnRpdGxlIHN0cmVhbSBmcm9tIGFuIGF2aSBmaWxlLgotICogPC9wYXJhPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogPHBhcmE+Ci0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXN1YnRpdGxlLmF2aSAhIGF2aWRlbXV4IG5hbWU9ZGVtdXggISBxdWV1ZSAhIGF2aXN1YnRpdGxlICEgc3VicGFyc2UgISB0ZXh0b3ZlcmxheSBuYW1lPW92ZXJsYXkgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rIGRlbXV4LiAhIHF1ZXVlICEgZGVjb2RlYmluICEgb3ZlcmxheS4KLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiBUaGlzIHBsYXlzIGFuIGF2aSBmaWxlIHdpdGggYSB2aWRlbyBhbmQgc3VidGl0bGUgc3RyZWFtLgotICogPC9wYXJhPgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBleGFtcGxlIG9mIGEgc3VidGl0bGUgY2h1bmsgaW4gYW4gYXZpIGZpbGUKLSAqIDAwMDAwMDAwOiA0NyA0MSA0MiAzMiAwMCAwMiAwMCAxMCAwMCAwMCAwMCA0NSAwMCA2ZSAwMCA2NyAgR0FCMi4uLi4uLi5FLm4uZwotICogMDAwMDAwMTA6IDAwIDZjIDAwIDY5IDAwIDczIDAwIDY4IDAwIDAwIDAwIDA0IDAwIDhlIDAwIDAwICAubC5pLnMuaC4uLi4uLi4uCi0gKiAwMDAwMDAyMDogMDAgZWYgYmIgYmYgMzEgMGQgMGEgMzAgMzAgM2EgMzAgMzAgM2EgMzAgMzAgMmMgIC4uLi4xLi4wMDowMDowMCwKLSAqIDAwMDAwMDMwOiAzMSAzMCAzMCAyMCAyZCAyZCAzZSAyMCAzMCAzMCAzYSAzMCAzMCAzYSAzMCAzMiAgMTAwIC0tPiAwMDowMDowMgotICogMDAwMDAwNDA6IDJjIDMwIDMwIDMwIDBkIDBhIDNjIDYyIDNlIDQxIDZlIDIwIDU1IDU0IDQ2IDM4ICAsMDAwLi48Yj5BbiBVVEY4Ci0gKiAwMDAwMDA1MDogMjAgNTMgNzUgNjIgNzQgNjkgNzQgNmMgNjUgMjAgNzcgNjkgNzQgNjggMjAgNDIgICBTdWJ0aXRsZSB3aXRoIEIKLSAqIDAwMDAwMDYwOiA0ZiA0ZCAzYyAyZiA2MiAzZSAwZCAwYSAwZCAwYSAzMiAwZCAwYSAzMCAzMCAzYSAgT008L2I+Li4uLjIuLjAwOgotICogMDAwMDAwNzA6IDMwIDMwIDNhIDMwIDMyIDJjIDMxIDMwIDMwIDIwIDJkIDJkIDNlIDIwIDMwIDMwICAwMDowMiwxMDAgLS0+IDAwCi0gKiAwMDAwMDA4MDogM2EgMzAgMzAgM2EgMzAgMzQgMmMgMzAgMzAgMzAgMGQgMGEgNTMgNmYgNmQgNjUgIDowMDowNCwwMDAuLlNvbWUKLSAqIDAwMDAwMDkwOiA3NCA2OCA2OSA2ZSA2NyAyMCA2ZSA2ZiA2ZSA0MSA1MyA0MyA0OSA0OSAyMCAyZCAgdGhpbmcgbm9uQVNDSUkgLQotICogMDAwMDAwYTA6IDIwIGMyIGI1IGMzIGI2IGMzIGE0IGMzIGJjIGMzIDlmIDBkIDBhIDBkIDBhICAgICAgLi4uLi4uLi4uLi4uLi4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGF2aXN1YnRpdGxlLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGF2aXN1YnRpdGxlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGF2aXN1YnRpdGxlX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1zdWJ0aXRsZS1hdmkiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1zdWJ0aXRsZSIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X2F2aV9zdWJ0aXRsZV90aXRsZV90YWcgKEdzdEF2aVN1YnRpdGxlICogc3ViLCBnY2hhciAqIHRpdGxlKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hdmlfc3VidGl0bGVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2F2aV9zdWJ0aXRsZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIGdib29sZWFuIGdzdF9hdmlfc3VidGl0bGVfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgZ3N0X2F2aV9zdWJ0aXRsZV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RBdmlTdWJ0aXRsZSwgZ3N0X2F2aV9zdWJ0aXRsZSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLSNkZWZpbmUgSVNfQk9NX1VURjgoZGF0YSkgICAgICgoR1NUX1JFQURfVUlOVDMyX0JFKGRhdGEpID4+IDgpID09IDB4RUZCQkJGKQotI2RlZmluZSBJU19CT01fVVRGMTZfQkUoZGF0YSkgKEdTVF9SRUFEX1VJTlQxNl9CRShkYXRhKSA9PSAweEZFRkYpCi0jZGVmaW5lIElTX0JPTV9VVEYxNl9MRShkYXRhKSAoR1NUX1JFQURfVUlOVDE2X0xFKGRhdGEpID09IDB4RkVGRikKLSNkZWZpbmUgSVNfQk9NX1VURjMyX0JFKGRhdGEpIChHU1RfUkVBRF9VSU5UMzJfQkUoZGF0YSkgPT0gMHhGRUZGKQotI2RlZmluZSBJU19CT01fVVRGMzJfTEUoZGF0YSkgKEdTVF9SRUFEX1VJTlQzMl9MRShkYXRhKSA9PSAweEZFRkYpCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2F2aV9zdWJ0aXRsZV9leHRyYWN0X2ZpbGUgKEdzdEF2aVN1YnRpdGxlICogc3ViLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgZ3VpbnQgb2Zmc2V0LCBndWludCBsZW4pCi17Ci0gIGNvbnN0IGdjaGFyICppbnB1dF9lbmMgPSBOVUxMOwotICBHc3RCdWZmZXIgKnJldCA9IE5VTEw7Ci0gIGdjaGFyICpkYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gKGdjaGFyICopIChtYXAuZGF0YSArIG9mZnNldCk7Ci0KLSAgaWYgKGxlbiA+PSAoMyArIDEpICYmIElTX0JPTV9VVEY4IChkYXRhKSAmJgotICAgICAgZ191dGY4X3ZhbGlkYXRlIChkYXRhICsgMywgbGVuIC0gMywgTlVMTCkpIHsKLSAgICByZXQgPQotICAgICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIG9mZnNldCArIDMsCi0gICAgICAgIGxlbiAtIDMpOwotICB9IGVsc2UgaWYgKGxlbiA+PSAyICYmIElTX0JPTV9VVEYxNl9CRSAoZGF0YSkpIHsKLSAgICBpbnB1dF9lbmMgPSAiVVRGLTE2QkUiOwotICAgIGRhdGEgKz0gMjsKLSAgICBsZW4gLT0gMjsKLSAgfSBlbHNlIGlmIChsZW4gPj0gMiAmJiBJU19CT01fVVRGMTZfTEUgKGRhdGEpKSB7Ci0gICAgaW5wdXRfZW5jID0gIlVURi0xNkxFIjsKLSAgICBkYXRhICs9IDI7Ci0gICAgbGVuIC09IDI7Ci0gIH0gZWxzZSBpZiAobGVuID49IDQgJiYgSVNfQk9NX1VURjMyX0JFIChkYXRhKSkgewotICAgIGlucHV0X2VuYyA9ICJVVEYtMzJCRSI7Ci0gICAgZGF0YSArPSA0OwotICAgIGxlbiAtPSA0OwotICB9IGVsc2UgaWYgKGxlbiA+PSA0ICYmIElTX0JPTV9VVEYzMl9MRSAoZGF0YSkpIHsKLSAgICBpbnB1dF9lbmMgPSAiVVRGLTMyTEUiOwotICAgIGRhdGEgKz0gNDsKLSAgICBsZW4gLT0gNDsKLSAgfSBlbHNlIGlmIChnX3V0ZjhfdmFsaWRhdGUgKGRhdGEsIGxlbiwgTlVMTCkpIHsKLSAgICAvKiBub3Qgc3BlY2lmaWVkLCBjaGVjayBpZiBpdCdzIFVURi04ICovCi0gICAgcmV0ID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBvZmZzZXQsIGxlbik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogd2UgY291bGQgZmFsbCBiYWNrIHRvIGdzdF90YWdfZnJlZWZvcm1fdG9fdXRmOCgpIGhlcmUgKi8KLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHN1YiwgInVuc3BlY2lmaWVkIGVuY29kaW5nLCBhbmQgbm90IFVURi04Iik7Ci0gICAgcmV0ID0gTlVMTDsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmV0ICE9IE5VTEwgfHwgaW5wdXRfZW5jICE9IE5VTEwsIE5VTEwpOwotCi0gIGlmIChpbnB1dF9lbmMpIHsKLSAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gICAgZ2NoYXIgKnV0Zjg7Ci0gICAgZ3NpemUgc2xlbjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHN1YiwgImNvbnZlcnRpbmcgc3VidGl0bGVzIGZyb20gJXMgdG8gVVRGLTgiLCBpbnB1dF9lbmMpOwotICAgIHV0ZjggPSBnX2NvbnZlcnQgKGRhdGEsIGxlbiwgIlVURi04IiwgaW5wdXRfZW5jLCBOVUxMLCBOVUxMLCAmZXJyKTsKLQotICAgIGlmIChlcnIgIT0gTlVMTCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzdWIsICJjb252ZXJzaW9uIHRvIFVURi04IGZhaWxlZCA6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIHJldCA9IE5VTEw7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgcmV0ID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgc2xlbiA9IHN0cmxlbiAodXRmOCk7Ci0gICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChyZXQsCi0gICAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIHV0ZjgsIHNsZW4sIDAsIHNsZW4sIHV0ZjgsIGdfZnJlZSkpOwotCi0gICAgR1NUX0JVRkZFUl9PRkZTRVQgKHJldCkgPSAwOwotICB9Ci0KLWRvbmU6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBnc3RfYXZpX3N1YnRpdGxlX3RpdGxlX3RhZzoKLSAqIEBzdWI6IHN1YnRpdGxlIGVsZW1lbnQKLSAqIEB0aXRsZTogdGhlIHRpdGxlIG9mIHRoaXMgc3VidGl0bGUgc3RyZWFtCi0gKgotICogU2VuZCBhbiBldmVudCB0byB0aGUgc3JjcGFkIG9mIHRoZSBAc3ViIGVsZW1lbnQgd2l0aCB0aGUgdGl0bGUKLSAqIG9mIHRoZSBzdWJ0aXRsZSBzdHJlYW0gYXMgYSBHU1RfVEFHX1RJVExFCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX3N1YnRpdGxlX3RpdGxlX3RhZyAoR3N0QXZpU3VidGl0bGUgKiBzdWIsIGdjaGFyICogdGl0bGUpCi17Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3ViLT5zcmMsCi0gICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19USVRMRSwgdGl0bGUsIE5VTEwpKSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYXZpX3N1YnRpdGxlX3BhcnNlX2dhYjJfY2h1bmsgKEdzdEF2aVN1YnRpdGxlICogc3ViLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGdjaGFyICpuYW1lX3V0Zjg7Ci0gIGd1aW50IG5hbWVfbGVuZ3RoOwotICBndWludCBmaWxlX2xlbmd0aDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAvKiBjaGVjayB0aGUgbWFnaWMgd29yZCAiR0FCMlwwIiwgYW5kIHRoZSBuZXh0IHdvcmQgbXVzdCBiZSAyICovCi0gIGlmIChtYXAuc2l6ZSA8IDEyIHx8IG1lbWNtcCAobWFwLmRhdGEsICJHQUIyXDBcMlwwIiwgNSArIDIpICE9IDApCi0gICAgZ290byB3cm9uZ19tYWdpY193b3JkOwotCi0gIC8qIHJlYWQgJ25hbWUnIG9mIHN1YnRpdGxlICovCi0gIG5hbWVfbGVuZ3RoID0gR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSArIDUgKyAyKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHN1YiwgImxlbmd0aCBvZiBuYW1lOiAldSIsIG5hbWVfbGVuZ3RoKTsKLSAgaWYgKG1hcC5zaXplIDw9IDE3ICsgbmFtZV9sZW5ndGgpCi0gICAgZ290byB3cm9uZ19uYW1lX2xlbmd0aDsKLQotICBuYW1lX3V0ZjggPQotICAgICAgZ19jb252ZXJ0ICgoZ2NoYXIgKikgbWFwLmRhdGEgKyAxMSwgbmFtZV9sZW5ndGgsICJVVEYtOCIsICJVVEYtMTZMRSIsCi0gICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICBpZiAobmFtZV91dGY4KSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHN1YiwgInN1YnRpdGxlIG5hbWU6ICVzIiwgbmFtZV91dGY4KTsKLSAgICBnc3RfYXZpX3N1YnRpdGxlX3RpdGxlX3RhZyAoc3ViLCBuYW1lX3V0ZjgpOwotICAgIGdfZnJlZSAobmFtZV91dGY4KTsKLSAgfQotCi0gIC8qIG5leHQgd29yZCBtdXN0IGJlIDQgKi8KLSAgaWYgKEdTVF9SRUFEX1VJTlQxNl9MRSAobWFwLmRhdGEgKyAxMSArIG5hbWVfbGVuZ3RoKSAhPSAweDQpCi0gICAgZ290byB3cm9uZ19maXhlZF93b3JkXzI7Ci0KLSAgZmlsZV9sZW5ndGggPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgMTMgKyBuYW1lX2xlbmd0aCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChzdWIsICJsZW5ndGggc3J0L3NzYSBmaWxlOiAldSIsIGZpbGVfbGVuZ3RoKTsKLQotICBpZiAobWFwLnNpemUgPCAoMTcgKyBuYW1lX2xlbmd0aCArIGZpbGVfbGVuZ3RoKSkKLSAgICBnb3RvIHdyb25nX3RvdGFsX2xlbmd0aDsKLQotICAvKiBzdG9yZSB0aGlzLCBzbyB3ZSBjYW4gc2VuZCBpdCBhZ2FpbiBhZnRlciBhIHNlZWs7IG5vdGUgdGhhdCB3ZSBzaG91bGRuJ3QKLSAgICogYXNzdW1lIGFsbCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGNodW5rIGlzIHN1YnRpdGxlIGRhdGEsIHRoZXJlIG1heQotICAgKiBiZSBwYWRkaW5nIGF0IHRoZSBlbmQgZm9yIHNvbWUgcmVhc29uLCBzbyBvbmx5IHBhcnNlIGZpbGVfbGVuZ3RoIGJ5dGVzICovCi0gIHN1Yi0+c3ViZmlsZSA9Ci0gICAgICBnc3RfYXZpX3N1YnRpdGxlX2V4dHJhY3RfZmlsZSAoc3ViLCBidWYsIDE3ICsgbmFtZV9sZW5ndGgsIGZpbGVfbGVuZ3RoKTsKLQotICBpZiAoc3ViLT5zdWJmaWxlID09IE5VTEwpCi0gICAgZ290byBleHRyYWN0X2ZhaWxlZDsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX21hZ2ljX3dvcmQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3ViLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLCAoIldyb25nIG1hZ2ljIHdvcmQiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXdyb25nX25hbWVfbGVuZ3RoOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1YiwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCJuYW1lIGRvZXNuJ3QgZml0IGluIGJ1ZmZlciAoJSIgR19HU0laRV9GT1JNQVQgIiA8ICVkKSIsIG1hcC5zaXplLAotICAgICAgICAgICAgMTcgKyBuYW1lX2xlbmd0aCkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci13cm9uZ19maXhlZF93b3JkXzI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3ViLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoIndyb25nIGZpeGVkIHdvcmQ6IGV4cGVjdGVkICV1LCBnb3QgJXUiLCA0LAotICAgICAgICAgICAgR1NUX1JFQURfVUlOVDE2X0xFIChtYXAuZGF0YSArIDExICsgbmFtZV9sZW5ndGgpKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXdyb25nX3RvdGFsX2xlbmd0aDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzdWIsIFNUUkVBTSwgREVDT0RFLCAoTlVMTCksCi0gICAgICAgICgiYnVmZmVyIHNpemUgaXMgd3Jvbmc6IG5lZWQgJWQgYnl0ZXMsIGhhdmUgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgICAgICAxNyArIG5hbWVfbGVuZ3RoICsgZmlsZV9sZW5ndGgsIG1hcC5zaXplKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWV4dHJhY3RfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1YiwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCJjb3VsZCBub3QgZXh0cmFjdCBzdWJ0aXRsZXMiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hdmlfc3VidGl0bGVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEF2aVN1YnRpdGxlICpzdWIgPSBHU1RfQVZJX1NVQlRJVExFIChwYXJlbnQpOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBpZiAoc3ViLT5zdWJmaWxlICE9IE5VTEwpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHN1YiwgIkdvdCBtb3JlIGJ1ZmZlcnMgdGhhbiBleHBlY3RlZCwgZHJvcHBpbmciKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogd2UgZXhwZWN0IGV4YWN0bHkgb25lIGJ1ZmZlciB3aXRoIHRoZSB3aG9sZSBzcnQvc3NhIGZpbGUgaW4gaXQgKi8KLSAgcmV0ID0gZ3N0X2F2aV9zdWJ0aXRsZV9wYXJzZV9nYWIyX2NodW5rIChzdWIsIGJ1ZmZlcik7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBkb25lOwotCi0gIC8qIG5vdyBwdXNoIHRoZSBzdWJ0aXRsZSBkYXRhIGRvd25zdHJlYW0gKi8KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChzdWItPnNyYywgZ3N0X2J1ZmZlcl9yZWYgKHN1Yi0+c3ViZmlsZSkpOwotCi1kb25lOgotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2F2aV9zdWJ0aXRsZV9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0QXZpU3VidGl0bGUgKmF2aXN1YnRpdGxlID0gR1NUX0FWSV9TVUJUSVRMRSAoZWxlbWVudCk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9TRUVLKSB7Ci0gICAgaWYgKGF2aXN1YnRpdGxlLT5zdWJmaWxlKSB7Ci0gICAgICBpZiAoZ3N0X3BhZF9wdXNoIChhdmlzdWJ0aXRsZS0+c3JjLAotICAgICAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYXZpc3VidGl0bGUtPnN1YmZpbGUpKSA9PSBHU1RfRkxPV19PSykKLSAgICAgICAgcmV0ID0gVFJVRTsKLSAgICB9Ci0gIH0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX3N1YnRpdGxlX2NsYXNzX2luaXQgKEdzdEF2aVN1YnRpdGxlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoYXZpc3VidGl0bGVfZGVidWcsICJhdmlzdWJ0aXRsZSIsIDAsCi0gICAgICAicGFyc2UgYXZpIHN1YnRpdGxlIHN0cmVhbSIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F2aV9zdWJ0aXRsZV9jaGFuZ2Vfc3RhdGUpOwotICBnc3RlbGVtZW50X2NsYXNzLT5zZW5kX2V2ZW50ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXZpX3N1YnRpdGxlX3NlbmRfZXZlbnQpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkF2aSBzdWJ0aXRsZSBwYXJzZXIiLCAiQ29kZWMvUGFyc2VyL1N1YnRpdGxlIiwKLSAgICAgICJQYXJzZSBhdmkgc3VidGl0bGUgc3RyZWFtIiwgIlRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXZpX3N1YnRpdGxlX2luaXQgKEdzdEF2aVN1YnRpdGxlICogc2VsZikKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBzZWxmLT5zcmMgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY190ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyYyk7Ci0KLSAgc2VsZi0+c2luayA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlbGYtPnNpbmssCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2F2aV9zdWJ0aXRsZV9jaGFpbikpOwotCi0gIGNhcHMgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKHNlbGYtPnNyYywgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChzZWxmLT5zcmMpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNpbmspOwotCi0gIHNlbGYtPnN1YmZpbGUgPSBOVUxMOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9hdmlfc3VidGl0bGVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RBdmlTdWJ0aXRsZSAqc3ViID0gR1NUX0FWSV9TVUJUSVRMRSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgcmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgaWYgKHN1Yi0+c3ViZmlsZSkgewotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChzdWItPnN1YmZpbGUpOwotICAgICAgICBzdWItPnN1YmZpbGUgPSBOVUxMOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9hdmkvZ3N0YXZpc3VidGl0bGUuaCBiL2dzdC9hdmkvZ3N0YXZpc3VidGl0bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY4MDQ4ZS4uMDAwMDAwMAotLS0gYS9nc3QvYXZpL2dzdGF2aXN1YnRpdGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0KLSNpZm5kZWYgX19HU1RBVklTVUJUSVRMRV9IX18KLSNkZWZpbmUgX19HU1RBVklTVUJUSVRMRV9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0QXZpU3VidGl0bGUgR3N0QXZpU3VidGl0bGU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QXZpU3VidGl0bGVDbGFzcyBHc3RBdmlTdWJ0aXRsZUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX0FWSV9TVUJUSVRMRSAoZ3N0X2F2aV9zdWJ0aXRsZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0FWSV9TVUJUSVRMRShvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0FWSV9TVUJUSVRMRSwgR3N0QXZpU3VidGl0bGUpKQotI2RlZmluZSBHU1RfQVZJX1NVQlRJVExFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0FWSV9TVUJUSVRMRSwgR3N0QXZpU3VidGl0bGVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BVklfU1VCVElUTEUob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9BVklfU1VCVElUTEUpKQotI2RlZmluZSBHU1RfSVNfQVZJX1NVQlRJVExFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0FWSV9TVUJUSVRMRSkpCi0jZGVmaW5lIEdTVF9BVklfU1VCVElUTEVfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9BVklfU1VCVElUTEUsIEdzdEF2aVN1YnRpdGxlQ2xhc3MpKQotCi1HVHlwZSBnc3RfYXZpX3N1YnRpdGxlX2dldF90eXBlICh2b2lkKTsKLQotc3RydWN0IF9Hc3RBdmlTdWJ0aXRsZQotewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICBHc3RQYWQgICAgKnNyYzsKLSAgR3N0UGFkICAgICpzaW5rOwotCi0gIEdzdEJ1ZmZlciAqc3ViZmlsZTsgIC8qIHRoZSBjb21wbGV0ZSBzdWJ0aXRsZSBmaWxlIGluIG9uZSBidWZmZXIgKi8KLX07Ci0KLXN0cnVjdCBfR3N0QXZpU3VidGl0bGVDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50OwotfTsKLQotR19FTkRfREVDTFMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2N1dHRlci9NYWtlZmlsZS5hbSBiL2dzdC9jdXR0ZXIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyODVmYWIuLjAwMDAwMDAKLS0tIGEvZ3N0L2N1dHRlci9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGN1dHRlci5sYQotCi1saWJnc3RjdXR0ZXJfbGFfU09VUkNFUyA9IGdzdGN1dHRlci5jCi1saWJnc3RjdXR0ZXJfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGN1dHRlcl9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExJQk0pCi1saWJnc3RjdXR0ZXJfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0Y3V0dGVyX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0Y3V0dGVyLmggZmlsdGVyLmZ1bmMKLQotRVhUUkFfRElTVCA9IFJFQURNRQpkaWZmIC0tZ2l0IGEvZ3N0L2N1dHRlci9NYWtlZmlsZS5pbiBiL2dzdC9jdXR0ZXIvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4OTNlN2UuLjAwMDAwMDAKLS0tIGEvZ3N0L2N1dHRlci9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkxMCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvY3V0dGVyCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0Y3V0dGVyX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0Y3V0dGVyX2xhX09CSkVDVFMgPSBsaWJnc3RjdXR0ZXJfbGEtZ3N0Y3V0dGVyLmxvCi1saWJnc3RjdXR0ZXJfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0Y3V0dGVyX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RjdXR0ZXJfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RjdXR0ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RjdXR0ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0Y3V0dGVyX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGN1dHRlcl9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RjdXR0ZXJfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGN1dHRlci5sYQotbGliZ3N0Y3V0dGVyX2xhX1NPVVJDRVMgPSBnc3RjdXR0ZXIuYwotbGliZ3N0Y3V0dGVyX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RjdXR0ZXJfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChMSUJNKQotbGliZ3N0Y3V0dGVyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGN1dHRlcl9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RjdXR0ZXIuaCBmaWx0ZXIuZnVuYwotRVhUUkFfRElTVCA9IFJFQURNRQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2N1dHRlci9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvY3V0dGVyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0Y3V0dGVyLmxhOiAkKGxpYmdzdGN1dHRlcl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGN1dHRlcl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0Y3V0dGVyX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RjdXR0ZXJfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGN1dHRlcl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGN1dHRlcl9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGN1dHRlcl9sYS1nc3RjdXR0ZXIuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGN1dHRlcl9sYS1nc3RjdXR0ZXIubG86IGdzdGN1dHRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y3V0dGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGN1dHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Y3V0dGVyX2xhLWdzdGN1dHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Y3V0dGVyX2xhLWdzdGN1dHRlci5UcG8gLWMgLW8gbGliZ3N0Y3V0dGVyX2xhLWdzdGN1dHRlci5sbyBgdGVzdCAtZiAnZ3N0Y3V0dGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGN1dHRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RjdXR0ZXJfbGEtZ3N0Y3V0dGVyLlRwbyAkKERFUERJUikvbGliZ3N0Y3V0dGVyX2xhLWdzdGN1dHRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RjdXR0ZXIuYycgb2JqZWN0PSdsaWJnc3RjdXR0ZXJfbGEtZ3N0Y3V0dGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Y3V0dGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGN1dHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RjdXR0ZXJfbGEtZ3N0Y3V0dGVyLmxvIGB0ZXN0IC1mICdnc3RjdXR0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Y3V0dGVyLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2N1dHRlci9SRUFETUUgYi9nc3QvY3V0dGVyL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMwOTc1ZS4uMDAwMDAwMAotLS0gYS9nc3QvY3V0dGVyL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLWN1dHRlciBwbHVnaW4gYnkgdGhvbWFzIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4KLQotU1lOT1BTSVMKLQotVGhpcyBwbHVnaW4gZW1pdHMgc2lnbmFscyB3aGVuIFJNUyBsZXZlbCBvZiBhdWRpbyBzaWduYWwgY3Jvc3NlcyBhCi10aHJlc2hvbGQgZm9yIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUuICAKLQotQXMgc29vbiBhcyB0aGUgYnVmZmVyJ3MgUk1TIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdGhyZXNob2xkIHZhbHVlLCB0aGUgcGx1Z2luIGZpcmVzIGEgQ1VUX1NUQVJUIHNpZ25hbC4KLQotV2hlbiB0aGUgYnVmZmVyJ3MgUk1TIGxldmVsIGRyb3BzIGJlbG93IHRoZSB0aHJlc2hvbGQgdmFsdWUgZm9yIGEgY29uc2VjdXRpdmUgcnVuIGxlbmd0aCBsb25nZXIgdGhhbiB0aGUgZ2l2ZW4gcnVubGVuZ3RoLCBpdCBzZW5kcyBhIENVVF9TVE9QIHNpZ25hbC4KLQotV2hlbiBhIHByZS1yZWNvcmRpbmcgYnVmZmVyIGlzIHVzZWQsIHRoZSBwbHVnaW4gd2lsbCBkZWxheSB0aHJvdWdocHV0IG9mIGRhdGEgd2hlbiBpdCdzIGluICJzaWxlbnQiIG1vZGUgZm9yIGEgbWF4aW11bSBsZW5ndGggZXF1YWwgdG8gdGhlIHByZS1yZWNvcmRpbmcgYnVmZmVyIGxlbmd0aC4gIEFzIHNvb24gYXMgdGhlIGlucHV0IGxldmVsIGNyb3NzZXMgdGhlIHRocmVzaG9sZCBsZXZlbCwgdGhpcyBwcmUtcmVjb3JkZWQgYnVmZmVyIGlzIGZsdXNoZWQgdG8gdGhlIHNyYyBwYWQgKHNvIHlvdSBjYW4gYWN0dWFsbHkgcmVjb3JkIHRoZSBhdWRpbyBqdXN0IGJlZm9yZSB0aGUgdGhyZXNob2xkIGNyb3NzaW5nKSBhZnRlciBzZW5kaW5nIHRoZSBzaWduYWwuCi0KLUFSR1VNRU5UUwotCi1Hc3RDdXR0ZXI6OnRocmVzaG9sZAotCWxldmVsIChiZXR3ZWVuIDAgYW5kIDEpIG9mIHRocmVzaG9sZAotR3N0Q3V0dGVyOjp0aHJlc2hvbGRfZEIKLQlsZXZlbCBvZiB0aHJlc2hvbGQgaW4gZEIgKGJldHdlZW4gLWluZiBhbmQgMCkKLUdzdEN1dHRlcjo6cnVubGVuZ3RoCi0JbWluaW11bSBsZW5ndGggKGluIHNlY29uZHMpIGJlZm9yZSBwbHVnaW4gc2VuZHMgY3V0X3N0b3Agc2lnbmFsCi1Hc3RDdXR0ZXI6OnByZWxlbmd0aAotICAgICAgICBsZW5ndGggb2YgcHJlLXJlY29yZGluZyBidWZmZXIKLSAgICAgICAgCi1TSUdOQUxTCi0KLQlDVVRfU1RBUlQKLQlnZXRzIHNlbnQgd2hlbiB0aGUgbGV2ZWwgb2YgdGhlIHNpZ25hbCBnb2VzIGFib3ZlIHRocmVzaG9sZCBsZXZlbAotCUNVVF9TVE9QCi0JZ2V0cyBzZW50IHdoZW4gdGhlIGxldmVsIG9mIHRoZSBzaWduYWwgaGFzIGJlZW4gYmVsb3cgdGhlCi0JdGhyZXNob2xkIGxldmVsIGZvciBhIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpdGVyYXRpb25zIG9mIHdoaWNoCi0JdGhlIGN1bXVsYXRpdmUgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgcnVubGVuZ3RoCi0KLUxJTUlUQVRJT05TCi0KLQkqIFJNUyB2YWx1ZSBpcyBjYWxjdWxhdGVkIG92ZXIgdGhlIHdob2xlIGRhdGEgYnVmZmVyLCBzbwotCSAgdGhlIHRpbWUgcmVzb2x1dGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBidWZmZXIgbGVuZ3RoCi0JKiBSTVMgdmFsdWUgaXMgY2FsY3VsYXRlZCBvdmVyIGFsbCBvZiB0aGUgY2hhbm5lbHMgY29tYmluZWQKZGlmZiAtLWdpdCBhL2dzdC9jdXR0ZXIvZmlsdGVyLmZ1bmMgYi9nc3QvY3V0dGVyL2ZpbHRlci5mdW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGJlNTY2Li4wMDAwMDAwCi0tLSBhL2dzdC9jdXR0ZXIvZmlsdGVyLmZ1bmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gIGd1aW50IGo7Ci0gIHJlZ2lzdGVyIGRvdWJsZSBzcXVhcmVzdW0gPSAwLjA7Ci0KLSAgLyoKLSAgICogcHJvY2VzcyBkYXRhIGhlcmUgIAotICAgKiBpbnB1dCBzYW1wbGUgZGF0YSBlbnRlcnMgaW4gKmluX2RhdGEgYXMgOCBvciAxNiBiaXQgZGF0YQotICAgKiBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGFyZSBpbnRlcmxlYXZlZAotICAgKi8KLQotICBmb3IgKGogPSAwOyBqIDwgbnVtX3NhbXBsZXM7IGorKykgCi0gICAgIHNxdWFyZXN1bSArPSBkYXRhW2pdICogZGF0YVtqXTsKLQotICByZXR1cm4gKHNxdWFyZXN1bSAvIChmbG9hdCkgbnVtX3NhbXBsZXMpOwotfQotCmRpZmYgLS1naXQgYS9nc3QvY3V0dGVyL2dzdGN1dHRlci5jIGIvZ3N0L2N1dHRlci9nc3RjdXR0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEzZGRmNi4uMDAwMDAwMAotLS0gYS9nc3QvY3V0dGVyL2dzdGN1dHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwMiwyMDAzLDIwMDUKLSAqICAgICAgICAgICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWN1dHRlcgotICoKLSAqIEFuYWx5c2VzIHRoZSBhdWRpbyBzaWduYWwgZm9yIHBlcmlvZHMgb2Ygc2lsZW5jZS4gVGhlIHN0YXJ0IGFuZCBlbmQgb2YKLSAqIHNpbGVuY2UgaXMgc2lnbmFsbGVkIGJ5IGJ1cyBtZXNzYWdlcyBuYW1lZAotICogPGNsYXNzbmFtZT4mcXVvdDtjdXR0ZXImcXVvdDs8L2NsYXNzbmFtZT4uCi0gKiBUaGUgbWVzc2FnZSdzIHN0cnVjdHVyZSBjb250YWlucyB0d28gZmllbGRzOgotICogPGl0ZW1pemVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RDbG9ja1RpbWUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDt0aW1lc3RhbXAmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgIGdib29sZWFuCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7YWJvdmUmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgICVUUlVFIGZvciBiZWdpbiBvZiBzaWxlbmNlIGFuZCAlRkFMU0UgZm9yIGVuZCBvZiBzaWxlbmNlLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC1tIGZpbGVzcmMgbG9jYXRpb249Zm9vLm9nZyAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCAhIGN1dHRlciAhIGF1dG9hdWRpb3NpbmsKLSAqIF18IFNob3cgY3V0IG1lc3NhZ2VzLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgImdzdGN1dHRlci5oIgotI2luY2x1ZGUgIm1hdGguaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoY3V0dGVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGN1dHRlcl9kZWJ1ZwotCi0jZGVmaW5lIENVVFRFUl9ERUZBVUxUX1RIUkVTSE9MRF9MRVZFTCAgICAwLjEKLSNkZWZpbmUgQ1VUVEVSX0RFRkFVTFRfVEhSRVNIT0xEX0xFTkdUSCAgKDUwMCAqIEdTVF9NU0VDT05EKQotI2RlZmluZSBDVVRURVJfREVGQVVMVF9QUkVfTEVOR1RIICAgICAgICAoMjAwICogR1NUX01TRUNPTkQpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBjdXR0ZXJfc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgUzgsIiBHU1RfQVVESU9fTkUgKFMxNikgIiB9LCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGN1dHRlcl9zaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgUzgsIiBHU1RfQVVESU9fTkUgKFMxNikgIiB9LCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCIpCi0gICAgKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfVEhSRVNIT0xELAotICBQUk9QX1RIUkVTSE9MRF9EQiwKLSAgUFJPUF9SVU5fTEVOR1RILAotICBQUk9QX1BSRV9MRU5HVEgsCi0gIFBST1BfTEVBS1kKLX07Ci0KLSNkZWZpbmUgZ3N0X2N1dHRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RDdXR0ZXIsIGdzdF9jdXR0ZXIsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9jdXR0ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9jdXR0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2N1dHRlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfY3V0dGVyX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jdXR0ZXJfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY3V0dGVyX2NsYXNzX2luaXQgKEdzdEN1dHRlckNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfY3V0dGVyX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2N1dHRlcl9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9USFJFU0hPTEQsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgidGhyZXNob2xkIiwgIlRocmVzaG9sZCIsCi0gICAgICAgICAgIlZvbHVtZSB0aHJlc2hvbGQgYmVmb3JlIHRyaWdnZXIiLAotICAgICAgICAgIC1HX01BWERPVUJMRSwgR19NQVhET1VCTEUsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9USFJFU0hPTERfREIsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgidGhyZXNob2xkLWRCIiwgIlRocmVzaG9sZCAoZEIpIiwKLSAgICAgICAgICAiVm9sdW1lIHRocmVzaG9sZCBiZWZvcmUgdHJpZ2dlciAoaW4gZEIpIiwKLSAgICAgICAgICAtR19NQVhET1VCTEUsIEdfTUFYRE9VQkxFLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfUlVOX0xFTkdUSCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJydW4tbGVuZ3RoIiwgIlJ1biBsZW5ndGgiLAotICAgICAgICAgICJMZW5ndGggb2YgZHJvcCBiZWxvdyB0aHJlc2hvbGQgYmVmb3JlIGN1dF9zdG9wIChpbiBuYW5vc2Vjb25kcykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9QUkVfTEVOR1RILAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInByZS1sZW5ndGgiLCAiUHJlLXJlY29yZGluZyBidWZmZXIgbGVuZ3RoIiwKLSAgICAgICAgICAiTGVuZ3RoIG9mIHByZS1yZWNvcmRpbmcgYnVmZmVyIChpbiBuYW5vc2Vjb25kcykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9MRUFLWSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibGVha3kiLCAiTGVha3kiLAotICAgICAgICAgICJkbyB3ZSBsZWFrIGJ1ZmZlcnMgd2hlbiBiZWxvdyB0aHJlc2hvbGQgPyIsCi0gICAgICAgICAgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChjdXR0ZXJfZGVidWcsICJjdXR0ZXIiLCAwLCAiQXVkaW8gY3V0dGluZyIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmN1dHRlcl9zcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmN1dHRlcl9zaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiQXVkaW8gY3V0dGVyIiwKLSAgICAgICJGaWx0ZXIvRWRpdG9yL0F1ZGlvIiwgIkF1ZGlvIEN1dHRlciB0byBzcGxpdCBhdWRpbyBpbnRvIG5vbi1zaWxlbnQgYml0cyIsCi0gICAgICAiVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPiIpOwotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfY3V0dGVyX2NoYW5nZV9zdGF0ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9jdXR0ZXJfaW5pdCAoR3N0Q3V0dGVyICogZmlsdGVyKQotewotICBmaWx0ZXItPnNpbmtwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZjdXR0ZXJfc2lua19mYWN0b3J5LCAic2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoZmlsdGVyLT5zaW5rcGFkLCBnc3RfY3V0dGVyX2NoYWluKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGZpbHRlci0+c2lua3BhZCwgZ3N0X2N1dHRlcl9ldmVudCk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGZpbHRlci0+c2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLCBmaWx0ZXItPnNpbmtwYWQpOwotCi0gIGZpbHRlci0+c3JjcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmY3V0dGVyX3NyY19mYWN0b3J5LCAic3JjIik7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGZpbHRlci0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZpbHRlciksIGZpbHRlci0+c3JjcGFkKTsKLQotICBmaWx0ZXItPnRocmVzaG9sZF9sZXZlbCA9IENVVFRFUl9ERUZBVUxUX1RIUkVTSE9MRF9MRVZFTDsKLSAgZmlsdGVyLT50aHJlc2hvbGRfbGVuZ3RoID0gQ1VUVEVSX0RFRkFVTFRfVEhSRVNIT0xEX0xFTkdUSDsKLSAgZmlsdGVyLT5zaWxlbnRfcnVuX2xlbmd0aCA9IDAgKiBHU1RfU0VDT05EOwotICBmaWx0ZXItPnNpbGVudCA9IFRSVUU7Ci0gIGZpbHRlci0+c2lsZW50X3ByZXYgPSBGQUxTRTsgIC8qIHByZXZpb3VzIHZhbHVlIG9mIHNpbGVudCAqLwotCi0gIGZpbHRlci0+cHJlX2xlbmd0aCA9IENVVFRFUl9ERUZBVUxUX1BSRV9MRU5HVEg7Ci0gIGZpbHRlci0+cHJlX3J1bl9sZW5ndGggPSAwICogR1NUX1NFQ09ORDsKLSAgZmlsdGVyLT5wcmVfYnVmZmVyID0gTlVMTDsKLSAgZmlsdGVyLT5sZWFreSA9IEZBTFNFOwotfQotCi1zdGF0aWMgR3N0TWVzc2FnZSAqCi1nc3RfY3V0dGVyX21lc3NhZ2VfbmV3IChHc3RDdXR0ZXIgKiBjLCBnYm9vbGVhbiBhYm92ZSwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImN1dHRlciIsCi0gICAgICAiYWJvdmUiLCBHX1RZUEVfQk9PTEVBTiwgYWJvdmUsCi0gICAgICAidGltZXN0YW1wIiwgR1NUX1RZUEVfQ0xPQ0tfVElNRSwgdGltZXN0YW1wLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKGMpLCBzKTsKLX0KLQotLyogQ2FsY3VsYXRlIHRoZSBOb3JtYWxpemVkIEN1bXVsYXRpdmUgU3F1YXJlIG92ZXIgYSBidWZmZXIgb2YgdGhlIGdpdmVuIHR5cGUKLSAqIGFuZCBvdmVyIGFsbCBjaGFubmVscyBjb21iaW5lZCAqLwotCi0jZGVmaW5lIERFRklORV9DVVRURVJfQ0FMQ1VMQVRPUihUWVBFLCBSRVNPTFVUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfY3V0dGVyX2NhbGN1bGF0ZV8jI1RZUEUgKFRZUEUgKiBpbiwgZ3VpbnQgbnVtLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpOQ1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJlZ2lzdGVyIGludCBqOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvdWJsZSBzcXVhcmVzdW0gPSAwLjA7ICAgICAgICAgICAvKiBzcXVhcmUgc3VtIG9mIHRoZSBpbnRlZ2VyIHNhbXBsZXMgKi8gICBcCi0gIHJlZ2lzdGVyIGRvdWJsZSBzcXVhcmUgPSAwLjA7ICAgICAvKiBTcXVhcmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdkb3VibGUgbm9ybWFsaXplcjsgICAgICAgICAgICAgICAvKiBkaXZpc29yIHRvIGdldCBhIFstMS4wLCAxLjBdIHJhbmdlICovICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICpOQ1MgPSAwLjA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWxpemVkIEN1bXVsYXRpdmUgU3F1YXJlICovICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG5vcm1hbGl6ZXIgPSAoZG91YmxlKSAoMSA8PCAoUkVTT0xVVElPTiAqIDIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZvciAoaiA9IDA7IGogPCBudW07IGorKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3F1YXJlID0gKChkb3VibGUpIGluW2pdKSAqIGluW2pdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3F1YXJlc3VtICs9IHNxdWFyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICpOQ1MgPSBzcXVhcmVzdW0gLyBub3JtYWxpemVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLURFRklORV9DVVRURVJfQ0FMQ1VMQVRPUiAoZ2ludDE2LCAxNSk7Ci1ERUZJTkVfQ1VUVEVSX0NBTENVTEFUT1IgKGdpbnQ4LCA3KTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfY3V0dGVyX3NldGNhcHMgKEdzdEN1dHRlciAqIGZpbHRlciwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEF1ZGlvSW5mbyBpbmZvOwotCi0gIGlmICghZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZpbHRlci0+aW5mbyA9IGluZm87Ci0KLSAgcmV0dXJuIGdzdF9wYWRfc2V0X2NhcHMgKGZpbHRlci0+c3JjcGFkLCBjYXBzKTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfY3V0dGVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0Q3V0dGVyICpmaWx0ZXIgPSBHU1RfQ1VUVEVSIChlbGVtZW50KTsKLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ19saXN0X2ZyZWVfZnVsbCAoZmlsdGVyLT5wcmVfYnVmZmVyLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICAgICAgZmlsdGVyLT5wcmVfYnVmZmVyID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jdXR0ZXJfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdEN1dHRlciAqZmlsdGVyOwotCi0gIGZpbHRlciA9IEdTVF9DVVRURVIgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIHJldCA9IGdzdF9jdXR0ZXJfc2V0Y2FwcyAoZmlsdGVyLCBjYXBzKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2N1dHRlcl9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Q3V0dGVyICpmaWx0ZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnaW50MTYgKmluX2RhdGE7Ci0gIGdpbnQgYnBmLCByYXRlOwotICBnc2l6ZSBpbl9zaXplOwotICBndWludCBudW1fc2FtcGxlczsKLSAgZ2RvdWJsZSBOQ1MgPSAwLjA7ICAgICAgICAgICAgLyogTm9ybWFsaXplZCBDdW11bGF0aXZlIFNxdWFyZSBvZiBidWZmZXIgKi8KLSAgZ2RvdWJsZSBSTVMgPSAwLjA7ICAgICAgICAgICAgLyogUk1TIG9mIHNpZ25hbCBpbiBidWZmZXIgKi8KLSAgZ2RvdWJsZSBOTVMgPSAwLjA7ICAgICAgICAgICAgLyogTm9ybWFsaXplZCBNZWFuIFNxdWFyZSBvZiBidWZmZXIgKi8KLSAgR3N0QnVmZmVyICpwcmVidWY7ICAgICAgICAgICAgLyogcG9pbnRlciB0byBhIHByZWJ1ZmZlciBlbGVtZW50ICovCi0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLQotICBmaWx0ZXIgPSBHU1RfQ1VUVEVSIChwYXJlbnQpOwotCi0gIGlmIChHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZmaWx0ZXItPmluZm8pID09IEdTVF9BVURJT19GT1JNQVRfVU5LTk9XTikKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIGJwZiA9IEdTVF9BVURJT19JTkZPX0JQRiAoJmZpbHRlci0+aW5mbyk7Ci0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmZmlsdGVyLT5pbmZvKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBpbl9kYXRhID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgaW5fc2l6ZSA9IG1hcC5zaXplOwotCi0gIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJsZW5ndGggb2YgcHJlcmVjIGJ1ZmZlcjogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoZmlsdGVyLT5wcmVfcnVuX2xlbmd0aCkpOwotCi0gIC8qIGNhbGN1bGF0ZSBtZWFuIHNxdWFyZSB2YWx1ZSBvbiBidWZmZXIgKi8KLSAgc3dpdGNoIChHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZmaWx0ZXItPmluZm8pKSB7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNjoKLSAgICAgIG51bV9zYW1wbGVzID0gaW5fc2l6ZSAvIDI7Ci0gICAgICBnc3RfY3V0dGVyX2NhbGN1bGF0ZV9naW50MTYgKGluX2RhdGEsIG51bV9zYW1wbGVzLCAmTkNTKTsKLSAgICAgIE5NUyA9IE5DUyAvIG51bV9zYW1wbGVzOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1M4OgotICAgICAgbnVtX3NhbXBsZXMgPSBpbl9zaXplOwotICAgICAgZ3N0X2N1dHRlcl9jYWxjdWxhdGVfZ2ludDggKChnaW50OCAqKSBpbl9kYXRhLCBudW1fc2FtcGxlcywgJk5DUyk7Ci0gICAgICBOTVMgPSBOQ1MgLyBudW1fc2FtcGxlczsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiB0aGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KLSAgICAgIGdfd2FybmluZyAoIm5vIG1lYW4gc3F1YXJlIGZ1bmN0aW9uIGZvciBmb3JtYXQiKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBmaWx0ZXItPnNpbGVudF9wcmV2ID0gZmlsdGVyLT5zaWxlbnQ7Ci0KLSAgZHVyYXRpb24gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGluX3NpemUgLyBicGYsIEdTVF9TRUNPTkQsIHJhdGUpOwotCi0gIFJNUyA9IHNxcnQgKE5NUyk7Ci0gIC8qIGlmIFJNUyBiZWxvdyB0aHJlc2hvbGQsIGFkZCBidWZmZXIgbGVuZ3RoIHRvIHNpbGVudCBydW4gbGVuZ3RoIGNvdW50Ci0gICAqIGlmIG5vdCwgcmVzZXQKLSAgICovCi0gIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJidWZmZXIgc3RhdHM6IE5NUyAlZiwgUk1TICVmLCBhdWRpbyBsZW5ndGggJWYiLCBOTVMsCi0gICAgICBSTVMsIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGR1cmF0aW9uKSk7Ci0KLSAgaWYgKFJNUyA8IGZpbHRlci0+dGhyZXNob2xkX2xldmVsKQotICAgIGZpbHRlci0+c2lsZW50X3J1bl9sZW5ndGggKz0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZHVyYXRpb24pOwotICBlbHNlIHsKLSAgICBmaWx0ZXItPnNpbGVudF9ydW5fbGVuZ3RoID0gMCAqIEdTVF9TRUNPTkQ7Ci0gICAgZmlsdGVyLT5zaWxlbnQgPSBGQUxTRTsKLSAgfQotCi0gIGlmIChmaWx0ZXItPnNpbGVudF9ydW5fbGVuZ3RoID4gZmlsdGVyLT50aHJlc2hvbGRfbGVuZ3RoKQotICAgIC8qIGl0IGhhcyBiZWVuIHNpbGVudCBsb25nIGVub3VnaCwgZmxhZyBpdCAqLwotICAgIGZpbHRlci0+c2lsZW50ID0gVFJVRTsKLQotICAvKiBoYXMgdGhlIHNpbGVudCBzdGF0dXMgY2hhbmdlZCA/IGlmIHNvLCBzZW5kIHJpZ2h0IHNpZ25hbAotICAgKiBhbmQsIGlmIGZyb20gc2lsZW50IC0+IG5vdCBzaWxlbnQsIGZsdXNoIHByZV9yZWNvcmQgYnVmZmVyCi0gICAqLwotICBpZiAoZmlsdGVyLT5zaWxlbnQgIT0gZmlsdGVyLT5zaWxlbnRfcHJldikgewotICAgIGlmIChmaWx0ZXItPnNpbGVudCkgewotICAgICAgR3N0TWVzc2FnZSAqbSA9Ci0gICAgICAgICAgZ3N0X2N1dHRlcl9tZXNzYWdlX25ldyAoZmlsdGVyLCBGQUxTRSwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAic2lnbmFsaW5nIENVVF9TVE9QIik7Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLCBtKTsKLSAgICB9IGVsc2UgewotICAgICAgZ2ludCBjb3VudCA9IDA7Ci0gICAgICBHc3RNZXNzYWdlICptID0KLSAgICAgICAgICBnc3RfY3V0dGVyX21lc3NhZ2VfbmV3IChmaWx0ZXIsIFRSVUUsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAic2lnbmFsaW5nIENVVF9TVEFSVCIpOwotICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoZmlsdGVyKSwgbSk7Ci0gICAgICAvKiBmaXJzdCBvZiBhbGwsIGZsdXNoIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJmbHVzaGluZyBidWZmZXIgb2YgbGVuZ3RoICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChmaWx0ZXItPnByZV9ydW5fbGVuZ3RoKSk7Ci0KLSAgICAgIHdoaWxlIChmaWx0ZXItPnByZV9idWZmZXIpIHsKLSAgICAgICAgcHJlYnVmID0gKGdfbGlzdF9maXJzdCAoZmlsdGVyLT5wcmVfYnVmZmVyKSktPmRhdGE7Ci0gICAgICAgIGZpbHRlci0+cHJlX2J1ZmZlciA9IGdfbGlzdF9yZW1vdmUgKGZpbHRlci0+cHJlX2J1ZmZlciwgcHJlYnVmKTsKLSAgICAgICAgZ3N0X3BhZF9wdXNoIChmaWx0ZXItPnNyY3BhZCwgcHJlYnVmKTsKLSAgICAgICAgKytjb3VudDsKLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImZsdXNoZWQgJWQgYnVmZmVycyIsIGNvdW50KTsKLSAgICAgIGZpbHRlci0+cHJlX3J1bl9sZW5ndGggPSAwICogR1NUX1NFQ09ORDsKLSAgICB9Ci0gIH0KLSAgLyogbm93IGNoZWNrIGlmIHdlIGhhdmUgdG8gc2VuZCB0aGUgbmV3IGJ1ZmZlciB0byB0aGUgaW50ZXJuYWwgYnVmZmVyIGNhY2hlCi0gICAqIG9yIHRvIHRoZSBzcmNwYWQgKi8KLSAgaWYgKGZpbHRlci0+c2lsZW50KSB7Ci0gICAgZmlsdGVyLT5wcmVfYnVmZmVyID0gZ19saXN0X2FwcGVuZCAoZmlsdGVyLT5wcmVfYnVmZmVyLCBidWYpOwotICAgIGZpbHRlci0+cHJlX3J1bl9sZW5ndGggKz0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZHVyYXRpb24pOwotCi0gICAgd2hpbGUgKGZpbHRlci0+cHJlX3J1bl9sZW5ndGggPiBmaWx0ZXItPnByZV9sZW5ndGgpIHsKLSAgICAgIEdzdENsb2NrVGltZSBwZHVyYXRpb247Ci0gICAgICBnc2l6ZSBwc2l6ZTsKLQotICAgICAgcHJlYnVmID0gKGdfbGlzdF9maXJzdCAoZmlsdGVyLT5wcmVfYnVmZmVyKSktPmRhdGE7Ci0gICAgICBnX2Fzc2VydCAoR1NUX0lTX0JVRkZFUiAocHJlYnVmKSk7Ci0KLSAgICAgIHBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocHJlYnVmKTsKLSAgICAgIHBkdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAocHNpemUgLyBicGYsIEdTVF9TRUNPTkQsIHJhdGUpOwotCi0gICAgICBmaWx0ZXItPnByZV9idWZmZXIgPSBnX2xpc3RfcmVtb3ZlIChmaWx0ZXItPnByZV9idWZmZXIsIHByZWJ1Zik7Ci0gICAgICBmaWx0ZXItPnByZV9ydW5fbGVuZ3RoIC09IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHBkdXJhdGlvbik7Ci0KLSAgICAgIC8qIG9ubHkgcGFzcyBidWZmZXJzIGlmIHdlIGRvbid0IGxlYWsgKi8KLSAgICAgIGlmICghZmlsdGVyLT5sZWFreSkKLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChmaWx0ZXItPnNyY3BhZCwgcHJlYnVmKTsKLSAgICAgIGVsc2UKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocHJlYnVmKTsKLSAgICB9Ci0gIH0gZWxzZQotICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoZmlsdGVyLT5zcmNwYWQsIGJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY3V0dGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDdXR0ZXIgKmZpbHRlcjsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ1VUVEVSIChvYmplY3QpKTsKLSAgZmlsdGVyID0gR1NUX0NVVFRFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVEhSRVNIT0xEOgotICAgICAgZmlsdGVyLT50aHJlc2hvbGRfbGV2ZWwgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIkRFQlVHOiBzZXQgdGhyZXNob2xkIGxldmVsIHRvICVmIiwgZmlsdGVyLT50aHJlc2hvbGRfbGV2ZWwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RIUkVTSE9MRF9EQjoKLSAgICAgIC8qIHNldCB0aGUgbGV2ZWwgZ2l2ZW4gaW4gZEIKLSAgICAgICAqIHZhbHVlIGluIGRCID0gMjAgKiBsb2cgKHZhbHVlKQotICAgICAgICogdmFsdWVzIGluIGRCIDwgMCByZXN1bHQgaW4gdmFsdWVzIGJldHdlZW4gMCBhbmQgMQotICAgICAgICovCi0gICAgICBmaWx0ZXItPnRocmVzaG9sZF9sZXZlbCA9IHBvdyAoMTAsIGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpIC8gMjApOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAic2V0IHRocmVzaG9sZCBsZXZlbCB0byAlZiIsCi0gICAgICAgICAgZmlsdGVyLT50aHJlc2hvbGRfbGV2ZWwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JVTl9MRU5HVEg6Ci0gICAgICAvKiBzZXQgdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBzaWxlbnQgcnVuIHJlcXVpcmVkICovCi0gICAgICBmaWx0ZXItPnRocmVzaG9sZF9sZW5ndGggPQotICAgICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUkVfTEVOR1RIOgotICAgICAgLyogc2V0IHRoZSBsZW5ndGggb2YgdGhlIHByZS1yZWNvcmQgYmxvY2sgKi8KLSAgICAgIGZpbHRlci0+cHJlX2xlbmd0aCA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MRUFLWToKLSAgICAgIC8qIHNldCBpZiB0aGUgcHJlLXJlY29yZCBidWZmZXIgaXMgbGVha3kgb3Igbm90ICovCi0gICAgICBmaWx0ZXItPmxlYWt5ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2N1dHRlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q3V0dGVyICpmaWx0ZXI7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0NVVFRFUiAob2JqZWN0KSk7Ci0gIGZpbHRlciA9IEdTVF9DVVRURVIgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1JVTl9MRU5HVEg6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBmaWx0ZXItPnRocmVzaG9sZF9sZW5ndGgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RIUkVTSE9MRDoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGZpbHRlci0+dGhyZXNob2xkX2xldmVsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USFJFU0hPTERfREI6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCAyMCAqIGxvZyAoZmlsdGVyLT50aHJlc2hvbGRfbGV2ZWwpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUkVfTEVOR1RIOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgZmlsdGVyLT5wcmVfbGVuZ3RoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MRUFLWToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPmxlYWt5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJjdXR0ZXIiLCBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9DVVRURVIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGN1dHRlciwKLSAgICAiQXVkaW8gQ3V0dGVyIHRvIHNwbGl0IGF1ZGlvIGludG8gbm9uLXNpbGVudCBiaXRzIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvZ3N0L2N1dHRlci9nc3RjdXR0ZXIuaCBiL2dzdC9jdXR0ZXIvZ3N0Y3V0dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NzVmOGYuLjAwMDAwMDAKLS0tIGEvZ3N0L2N1dHRlci9nc3RjdXR0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfQ1VUVEVSX0hfXwotI2RlZmluZSBfX0dTVF9DVVRURVJfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLS8qICNpbmNsdWRlIDxnc3QvbWV0YS9hdWRpb3Jhdy5oPiAqLwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KLQotCi0jZGVmaW5lIEdTVF9UWVBFX0NVVFRFUiBcCi0gIChnc3RfY3V0dGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DVVRURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9DVVRURVIsR3N0Q3V0dGVyKSkKLSNkZWZpbmUgR1NUX0NVVFRFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DVVRURVIsR3N0Q3V0dGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQ1VUVEVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQ1VUVEVSKSkKLSNkZWZpbmUgR1NUX0lTX0NVVFRFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9DVVRURVIpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0Q3V0dGVyIEdzdEN1dHRlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDdXR0ZXJDbGFzcyBHc3RDdXR0ZXJDbGFzczsKLQotc3RydWN0IF9Hc3RDdXR0ZXIKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLQotICBkb3VibGUgdGhyZXNob2xkX2xldmVsOyAgICAgICAvKiBsZXZlbCBiZWxvdyB3aGljaCB0byBjdXQgKi8KLSAgZG91YmxlIHRocmVzaG9sZF9sZW5ndGg7ICAgICAgLyogaG93IGxvbmcgc2lnbmFsIGhhcyB0byByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmVsb3cgdGhpcyBsZXZlbCBiZWZvcmUgY3V0dGluZyAqLwotICBkb3VibGUgc2lsZW50X3J1bl9sZW5ndGg7ICAgICAvKiBob3cgbG9uZyBoYXMgaXQgYmVlbiBiZWxvdyB0aHJlc2hvbGQgPyAqLwotICBnYm9vbGVhbiBzaWxlbnQ7Ci0gIGdib29sZWFuIHNpbGVudF9wcmV2OwotCi0gIGRvdWJsZSBwcmVfbGVuZ3RoOyAgICAgICAgICAgIC8qIGhvdyBsb25nIGNhbiB0aGUgcHJlLXJlY29yZCBidWZmZXIgYmUgPyAqLwotICBkb3VibGUgcHJlX3J1bl9sZW5ndGg7ICAgICAgICAvKiBob3cgbG9uZyBpcyBpdCBjdXJyZW50bHkgPyAqLwotICBHTGlzdCAqcHJlX2J1ZmZlcjsgICAgICAgICAgICAvKiBsaXN0IG9mIEdzdEJ1ZmZlcnMgaW4gcHJlLXJlY29yZCBidWZmZXIgKi8KLSAgZ2Jvb2xlYW4gbGVha3k7ICAgICAgICAgICAgICAgLyogZG8gd2UgbGVhayBhbiBvdmVyZmxvd2luZyBwcmVidWZmZXIgPyAqLwotCi0gIEdzdEF1ZGlvSW5mbyBpbmZvOwotfTsKLQotc3RydWN0IF9Hc3RDdXR0ZXJDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotICB2b2lkICgqY3V0X3N0YXJ0KSAoR3N0Q3V0dGVyKiBmaWx0ZXIpOwotICB2b2lkICgqY3V0X3N0b3ApIChHc3RDdXR0ZXIqIGZpbHRlcik7Ci19OwotCi1HVHlwZSBnc3RfY3V0dGVyX2dldF90eXBlICh2b2lkKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KLQotCi0jZW5kaWYgLyogX19HU1RfU1RFUkVPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2RlYnVndXRpbHMvTWFrZWZpbGUuYW0gYi9nc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1YmUzNi4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZGVidWcubGEgbGliZ3N0bmF2aWdhdGlvbnRlc3QubGEgCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWNwdXJlcG9ydC5oIFwKLQlnc3RjYXBzZGVidWcuaCBcCi0JZ3N0Y2Fwc3NldHRlci5oIFwKLQlnc3RuYXZpZ2F0aW9udGVzdC5oIFwKLQlnc3RuYXZzZWVrLmggXAotCWdzdHB1c2hmaWxlc3JjLmggXAotCWdzdHRhZ2luamVjdC5oIFwKLQlwcm9ncmVzc3JlcG9ydC5oIFwKLQl0ZXN0cy5oCi0KLWxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX1NPVVJDRVMgPSBnc3RuYXZpZ2F0aW9udGVzdC5jCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JCQkJICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9MSUJBREQgPSAkKEdTVF9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCAkKExJQk0pCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1saWJnc3RkZWJ1Z19sYV9TT1VSQ0VTID0gXAotCWdzdGRlYnVnLmMgXAotCWJyZWFrbXlkYXRhLmMgXAotCWdzdGNhcHNzZXR0ZXIuYyBcCi0JZ3N0bmF2c2Vlay5jIFwKLQlnc3RwdXNoZmlsZXNyYy5jIFwKLQlnc3R0YWdpbmplY3QuYyBcCi0Jcm5kYnVmZmVyc2l6ZS5jIFwKLQlwcm9ncmVzc3JlcG9ydC5jIFwKLQl0ZXN0cy5jIFwKLQljcHVyZXBvcnQuYyBcCi0JdGVzdHBsdWdpbi5jCi0KLSMJZ3N0Y2Fwc2RlYnVnLmMKLQotbGliZ3N0ZGVidWdfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykKLWxpYmdzdGRlYnVnX2xhX0xJQkFERCA9ICQoR1NUX0xJQlMpICQoR1NUX0JBU0VfTElCUykKLWxpYmdzdGRlYnVnX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9NYWtlZmlsZS5pbiBiL2dzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTc5ZWVmLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvZGVidWd1dGlscwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGRlYnVnX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RkZWJ1Z19sYV9PQkpFQ1RTID0gbGliZ3N0ZGVidWdfbGEtZ3N0ZGVidWcubG8gXAotCWxpYmdzdGRlYnVnX2xhLWJyZWFrbXlkYXRhLmxvIGxpYmdzdGRlYnVnX2xhLWdzdGNhcHNzZXR0ZXIubG8gXAotCWxpYmdzdGRlYnVnX2xhLWdzdG5hdnNlZWsubG8gbGliZ3N0ZGVidWdfbGEtZ3N0cHVzaGZpbGVzcmMubG8gXAotCWxpYmdzdGRlYnVnX2xhLWdzdHRhZ2luamVjdC5sbyBsaWJnc3RkZWJ1Z19sYS1ybmRidWZmZXJzaXplLmxvIFwKLQlsaWJnc3RkZWJ1Z19sYS1wcm9ncmVzc3JlcG9ydC5sbyBsaWJnc3RkZWJ1Z19sYS10ZXN0cy5sbyBcCi0JbGliZ3N0ZGVidWdfbGEtY3B1cmVwb3J0LmxvIGxpYmdzdGRlYnVnX2xhLXRlc3RwbHVnaW4ubG8KLWxpYmdzdGRlYnVnX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGRlYnVnX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RkZWJ1Z19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0ZGVidWdfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotbGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdG5hdmlnYXRpb250ZXN0X2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdG5hdmlnYXRpb250ZXN0X2xhLWdzdG5hdmlnYXRpb250ZXN0LmxvCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9PQkpFQ1RTID0gIFwKLQkkKGFtX2xpYmdzdG5hdmlnYXRpb250ZXN0X2xhX09CSkVDVFMpCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQobGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0ZGVidWdfbGFfU09VUkNFUykgJChsaWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RkZWJ1Z19sYV9TT1VSQ0VTKSBcCi0JJChsaWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RkZWJ1Zy5sYSBsaWJnc3RuYXZpZ2F0aW9udGVzdC5sYSAKLW5vaW5zdF9IRUFERVJTID0gXAotCWNwdXJlcG9ydC5oIFwKLQlnc3RjYXBzZGVidWcuaCBcCi0JZ3N0Y2Fwc3NldHRlci5oIFwKLQlnc3RuYXZpZ2F0aW9udGVzdC5oIFwKLQlnc3RuYXZzZWVrLmggXAotCWdzdHB1c2hmaWxlc3JjLmggXAotCWdzdHRhZ2luamVjdC5oIFwKLQlwcm9ncmVzc3JlcG9ydC5oIFwKLQl0ZXN0cy5oCi0KLWxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX1NPVVJDRVMgPSBnc3RuYXZpZ2F0aW9udGVzdC5jCi1saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JCQkJICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpCi0KLWxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX0xJQkFERCA9ICQoR1NUX0xJQlMpICQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AICQoTElCTSkKLQotbGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWxpYmdzdGRlYnVnX2xhX1NPVVJDRVMgPSBcCi0JZ3N0ZGVidWcuYyBcCi0JYnJlYWtteWRhdGEuYyBcCi0JZ3N0Y2Fwc3NldHRlci5jIFwKLQlnc3RuYXZzZWVrLmMgXAotCWdzdHB1c2hmaWxlc3JjLmMgXAotCWdzdHRhZ2luamVjdC5jIFwKLQlybmRidWZmZXJzaXplLmMgXAotCXByb2dyZXNzcmVwb3J0LmMgXAotCXRlc3RzLmMgXAotCWNwdXJlcG9ydC5jIFwKLQl0ZXN0cGx1Z2luLmMKLQotCi0jCWdzdGNhcHNkZWJ1Zy5jCi1saWJnc3RkZWJ1Z19sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKQotbGliZ3N0ZGVidWdfbGFfTElCQUREID0gJChHU1RfTElCUykgJChHU1RfQkFTRV9MSUJTKQotbGliZ3N0ZGVidWdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9kZWJ1Z3V0aWxzL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0ZGVidWcubGE6ICQobGliZ3N0ZGVidWdfbGFfT0JKRUNUUykgJChsaWJnc3RkZWJ1Z19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0ZGVidWdfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGRlYnVnX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RkZWJ1Z19sYV9PQkpFQ1RTKSAkKGxpYmdzdGRlYnVnX2xhX0xJQkFERCkgJChMSUJTKQotCi1saWJnc3RuYXZpZ2F0aW9udGVzdC5sYTogJChsaWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9PQkpFQ1RTKSAkKGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RuYXZpZ2F0aW9udGVzdF9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX09CSkVDVFMpICQobGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1icmVha215ZGF0YS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWNwdXJlcG9ydC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdGNhcHNzZXR0ZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3RkZWJ1Zy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdG5hdnNlZWsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3RwdXNoZmlsZXNyYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdHRhZ2luamVjdC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLXByb2dyZXNzcmVwb3J0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZGVidWdfbGEtcm5kYnVmZmVyc2l6ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLXRlc3RwbHVnaW4uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS10ZXN0cy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG5hdmlnYXRpb250ZXN0X2xhLWdzdG5hdmlnYXRpb250ZXN0LlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RkZWJ1Z19sYS1nc3RkZWJ1Zy5sbzogZ3N0ZGVidWcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RkZWJ1Z19sYS1nc3RkZWJ1Zy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtZ3N0ZGVidWcuVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWdzdGRlYnVnLmxvIGB0ZXN0IC1mICdnc3RkZWJ1Zy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZWJ1Zy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3RkZWJ1Zy5UcG8gJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdGRlYnVnLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGRlYnVnLmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtZ3N0ZGVidWcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWJ1Z19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RkZWJ1Z19sYS1nc3RkZWJ1Zy5sbyBgdGVzdCAtZiAnZ3N0ZGVidWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGVidWcuYwotCi1saWJnc3RkZWJ1Z19sYS1icmVha215ZGF0YS5sbzogYnJlYWtteWRhdGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RkZWJ1Z19sYS1icmVha215ZGF0YS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtYnJlYWtteWRhdGEuVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWJyZWFrbXlkYXRhLmxvIGB0ZXN0IC1mICdicmVha215ZGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BicmVha215ZGF0YS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1icmVha215ZGF0YS5UcG8gJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWJyZWFrbXlkYXRhLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2JyZWFrbXlkYXRhLmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtYnJlYWtteWRhdGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWJ1Z19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RkZWJ1Z19sYS1icmVha215ZGF0YS5sbyBgdGVzdCAtZiAnYnJlYWtteWRhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYnJlYWtteWRhdGEuYwotCi1saWJnc3RkZWJ1Z19sYS1nc3RjYXBzc2V0dGVyLmxvOiBnc3RjYXBzc2V0dGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWJ1Z19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZGVidWdfbGEtZ3N0Y2Fwc3NldHRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtZ3N0Y2Fwc3NldHRlci5UcG8gLWMgLW8gbGliZ3N0ZGVidWdfbGEtZ3N0Y2Fwc3NldHRlci5sbyBgdGVzdCAtZiAnZ3N0Y2Fwc3NldHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYXBzc2V0dGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdGNhcHNzZXR0ZXIuVHBvICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3RjYXBzc2V0dGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGNhcHNzZXR0ZXIuYycgb2JqZWN0PSdsaWJnc3RkZWJ1Z19sYS1nc3RjYXBzc2V0dGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZGVidWdfbGEtZ3N0Y2Fwc3NldHRlci5sbyBgdGVzdCAtZiAnZ3N0Y2Fwc3NldHRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RjYXBzc2V0dGVyLmMKLQotbGliZ3N0ZGVidWdfbGEtZ3N0bmF2c2Vlay5sbzogZ3N0bmF2c2Vlay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlYnVnX2xhLWdzdG5hdnNlZWsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdG5hdnNlZWsuVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWdzdG5hdnNlZWsubG8gYHRlc3QgLWYgJ2dzdG5hdnNlZWsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bmF2c2Vlay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3RuYXZzZWVrLlRwbyAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtZ3N0bmF2c2Vlay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RuYXZzZWVrLmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtZ3N0bmF2c2Vlay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWdzdG5hdnNlZWsubG8gYHRlc3QgLWYgJ2dzdG5hdnNlZWsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bmF2c2Vlay5jCi0KLWxpYmdzdGRlYnVnX2xhLWdzdHB1c2hmaWxlc3JjLmxvOiBnc3RwdXNoZmlsZXNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlYnVnX2xhLWdzdHB1c2hmaWxlc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3RwdXNoZmlsZXNyYy5UcG8gLWMgLW8gbGliZ3N0ZGVidWdfbGEtZ3N0cHVzaGZpbGVzcmMubG8gYHRlc3QgLWYgJ2dzdHB1c2hmaWxlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHB1c2hmaWxlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLWdzdHB1c2hmaWxlc3JjLlRwbyAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtZ3N0cHVzaGZpbGVzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cHVzaGZpbGVzcmMuYycgb2JqZWN0PSdsaWJnc3RkZWJ1Z19sYS1nc3RwdXNoZmlsZXNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWdzdHB1c2hmaWxlc3JjLmxvIGB0ZXN0IC1mICdnc3RwdXNoZmlsZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RwdXNoZmlsZXNyYy5jCi0KLWxpYmdzdGRlYnVnX2xhLWdzdHRhZ2luamVjdC5sbzogZ3N0dGFnaW5qZWN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWJ1Z19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZGVidWdfbGEtZ3N0dGFnaW5qZWN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3R0YWdpbmplY3QuVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWdzdHRhZ2luamVjdC5sbyBgdGVzdCAtZiAnZ3N0dGFnaW5qZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHRhZ2luamVjdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3R0YWdpbmplY3QuVHBvICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1nc3R0YWdpbmplY3QuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dGFnaW5qZWN0LmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtZ3N0dGFnaW5qZWN0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZGVidWdfbGEtZ3N0dGFnaW5qZWN0LmxvIGB0ZXN0IC1mICdnc3R0YWdpbmplY3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dGFnaW5qZWN0LmMKLQotbGliZ3N0ZGVidWdfbGEtcm5kYnVmZmVyc2l6ZS5sbzogcm5kYnVmZmVyc2l6ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlYnVnX2xhLXJuZGJ1ZmZlcnNpemUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLXJuZGJ1ZmZlcnNpemUuVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLXJuZGJ1ZmZlcnNpemUubG8gYHRlc3QgLWYgJ3JuZGJ1ZmZlcnNpemUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcm5kYnVmZmVyc2l6ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1ybmRidWZmZXJzaXplLlRwbyAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtcm5kYnVmZmVyc2l6ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdybmRidWZmZXJzaXplLmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtcm5kYnVmZmVyc2l6ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlYnVnX2xhLXJuZGJ1ZmZlcnNpemUubG8gYHRlc3QgLWYgJ3JuZGJ1ZmZlcnNpemUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcm5kYnVmZmVyc2l6ZS5jCi0KLWxpYmdzdGRlYnVnX2xhLXByb2dyZXNzcmVwb3J0LmxvOiBwcm9ncmVzc3JlcG9ydC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlYnVnX2xhLXByb2dyZXNzcmVwb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1wcm9ncmVzc3JlcG9ydC5UcG8gLWMgLW8gbGliZ3N0ZGVidWdfbGEtcHJvZ3Jlc3NyZXBvcnQubG8gYHRlc3QgLWYgJ3Byb2dyZXNzcmVwb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHByb2dyZXNzcmVwb3J0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLXByb2dyZXNzcmVwb3J0LlRwbyAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtcHJvZ3Jlc3NyZXBvcnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHJvZ3Jlc3NyZXBvcnQuYycgb2JqZWN0PSdsaWJnc3RkZWJ1Z19sYS1wcm9ncmVzc3JlcG9ydC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlYnVnX2xhLXByb2dyZXNzcmVwb3J0LmxvIGB0ZXN0IC1mICdwcm9ncmVzc3JlcG9ydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bwcm9ncmVzc3JlcG9ydC5jCi0KLWxpYmdzdGRlYnVnX2xhLXRlc3RzLmxvOiB0ZXN0cy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlYnVnX2xhLXRlc3RzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS10ZXN0cy5UcG8gLWMgLW8gbGliZ3N0ZGVidWdfbGEtdGVzdHMubG8gYHRlc3QgLWYgJ3Rlc3RzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3RzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLXRlc3RzLlRwbyAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtdGVzdHMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGVzdHMuYycgb2JqZWN0PSdsaWJnc3RkZWJ1Z19sYS10ZXN0cy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlYnVnX2xhLXRlc3RzLmxvIGB0ZXN0IC1mICd0ZXN0cy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0cy5jCi0KLWxpYmdzdGRlYnVnX2xhLWNwdXJlcG9ydC5sbzogY3B1cmVwb3J0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWJ1Z19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWJ1Z19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZGVidWdfbGEtY3B1cmVwb3J0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1jcHVyZXBvcnQuVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLWNwdXJlcG9ydC5sbyBgdGVzdCAtZiAnY3B1cmVwb3J0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNwdXJlcG9ydC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1jcHVyZXBvcnQuVHBvICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS1jcHVyZXBvcnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY3B1cmVwb3J0LmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtY3B1cmVwb3J0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZGVidWdfbGEtY3B1cmVwb3J0LmxvIGB0ZXN0IC1mICdjcHVyZXBvcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY3B1cmVwb3J0LmMKLQotbGliZ3N0ZGVidWdfbGEtdGVzdHBsdWdpbi5sbzogdGVzdHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVidWdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVidWdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlYnVnX2xhLXRlc3RwbHVnaW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGRlYnVnX2xhLXRlc3RwbHVnaW4uVHBvIC1jIC1vIGxpYmdzdGRlYnVnX2xhLXRlc3RwbHVnaW4ubG8gYHRlc3QgLWYgJ3Rlc3RwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWJ1Z19sYS10ZXN0cGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0ZGVidWdfbGEtdGVzdHBsdWdpbi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0ZXN0cGx1Z2luLmMnIG9iamVjdD0nbGliZ3N0ZGVidWdfbGEtdGVzdHBsdWdpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlYnVnX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlYnVnX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlYnVnX2xhLXRlc3RwbHVnaW4ubG8gYHRlc3QgLWYgJ3Rlc3RwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdHBsdWdpbi5jCi0KLWxpYmdzdG5hdmlnYXRpb250ZXN0X2xhLWdzdG5hdmlnYXRpb250ZXN0LmxvOiBnc3RuYXZpZ2F0aW9udGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bmF2aWdhdGlvbnRlc3RfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhLWdzdG5hdmlnYXRpb250ZXN0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RuYXZpZ2F0aW9udGVzdF9sYS1nc3RuYXZpZ2F0aW9udGVzdC5UcG8gLWMgLW8gbGliZ3N0bmF2aWdhdGlvbnRlc3RfbGEtZ3N0bmF2aWdhdGlvbnRlc3QubG8gYHRlc3QgLWYgJ2dzdG5hdmlnYXRpb250ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG5hdmlnYXRpb250ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG5hdmlnYXRpb250ZXN0X2xhLWdzdG5hdmlnYXRpb250ZXN0LlRwbyAkKERFUERJUikvbGliZ3N0bmF2aWdhdGlvbnRlc3RfbGEtZ3N0bmF2aWdhdGlvbnRlc3QuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bmF2aWdhdGlvbnRlc3QuYycgb2JqZWN0PSdsaWJnc3RuYXZpZ2F0aW9udGVzdF9sYS1nc3RuYXZpZ2F0aW9udGVzdC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG5hdmlnYXRpb250ZXN0X2xhLWdzdG5hdmlnYXRpb250ZXN0LmxvIGB0ZXN0IC1mICdnc3RuYXZpZ2F0aW9udGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RuYXZpZ2F0aW9udGVzdC5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL2JyZWFrbXlkYXRhLmMgYi9nc3QvZGVidWd1dGlscy9icmVha215ZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzIyZDMwLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWJ1Z3V0aWxzL2JyZWFrbXlkYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWJyZWFrbXlkYXRhCi0gKgotICogVGhpcyBlbGVtZW50IG1vZGlmaWVzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGl0IGlzIHBhc3NlZCByYW5kb21seQotICogYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIHNldC4KLSAqIEl0IG90aGVyd2lzZSBhY3RzIGFzIGFuIGlkZW50aXR5LgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2JyZWFrX215X2RhdGFfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2JyZWFrX215X2RhdGFfZGVidWcKLQotI2RlZmluZSBHU1RfVFlQRV9CUkVBS19NWV9EQVRBIFwKLSAgKGdzdF9icmVha19teV9kYXRhX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9CUkVBS19NWV9EQVRBKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQlJFQUtfTVlfREFUQSxHc3RCcmVha015RGF0YSkpCi0jZGVmaW5lIEdTVF9CUkVBS19NWV9EQVRBX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0JSRUFLX01ZX0RBVEEsR3N0QnJlYWtNeURhdGFDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19CUkVBS19NWV9EQVRBKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQlJFQUtfTVlfREFUQSkpCi0jZGVmaW5lIEdTVF9JU19CUkVBS19NWV9EQVRBX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0JSRUFLX01ZX0RBVEEpKQotCi1HVHlwZSBnc3RfYnJlYWtfbXlfZGF0YV9nZXRfdHlwZSAodm9pZCk7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NFRUQsCi0gIFBST1BfU0VUX1RPLAotICBQUk9QX1NLSVAsCi0gIFBST1BfUFJPQkFCSUxJVFkKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RCcmVha015RGF0YSBHc3RCcmVha015RGF0YTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RCcmVha015RGF0YUNsYXNzIEdzdEJyZWFrTXlEYXRhQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QnJlYWtNeURhdGEKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSBiYXNldHJhbnNmb3JtOwotCi0gIEdSYW5kICpyYW5kOwotICBndWludCBza2lwcGVkOwotCi0gIGd1aW50MzIgc2VlZDsKLSAgZ2ludCBzZXQ7Ci0gIGd1aW50IHNraXA7Ci0gIGdkb3VibGUgcHJvYmFiaWxpdHk7Ci19OwotCi1zdHJ1Y3QgX0dzdEJyZWFrTXlEYXRhQ2xhc3MKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9icmVha19teV9kYXRhX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9icmVha19teV9kYXRhX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2JyZWFrX215X2RhdGFfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYnJlYWtfbXlfZGF0YV9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotc3RhdGljIGdib29sZWFuIGdzdF9icmVha19teV9kYXRhX3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBibWRfc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBibWRfc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi0jZGVmaW5lIGdzdF9icmVha19teV9kYXRhX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEJyZWFrTXlEYXRhLCBnc3RfYnJlYWtfbXlfZGF0YSwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pOwotCi0KLXN0YXRpYyB2b2lkCi1nc3RfYnJlYWtfbXlfZGF0YV9jbGFzc19pbml0IChHc3RCcmVha015RGF0YUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqZ3N0YmFzZXRyYW5zX2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGJhc2V0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfYnJlYWtfbXlfZGF0YV9kZWJ1ZywgImJyZWFrbXlkYXRhIiwgMCwKLSAgICAgICJkZWJ1Z2dpbmcgY2F0ZWdvcnkgZm9yIGJyZWFrbXlkYXRhIGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYnJlYWtfbXlfZGF0YV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9icmVha19teV9kYXRhX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NFRUQsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInNlZWQiLCAic2VlZCIsCi0gICAgICAgICAgInNlZWQgZm9yIHJhbmRvbW5lc3MgKGluaXRpYWxpemVkIHdoZW4gZ29pbmcgZnJvbSBSRUFEWSB0byBQQVVTRUQpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQzMiwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NFVF9UTywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJzZXQtdG8iLCAic2V0LXRvIiwKLSAgICAgICAgICAic2V0IGNoYW5nZWQgYnl0ZXMgdG8gdGhpcyB2YWx1ZSAoLTEgbWVhbnMgcmFuZG9tIHZhbHVlIiwKLSAgICAgICAgICAtMSwgR19NQVhVSU5UOCwgLTEsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TS0lQLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJza2lwIiwgInNraXAiLAotICAgICAgICAgICJhbW91bnQgb2YgYnl0ZXMgc2tpcHBlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHN0cmVhbSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUFJPQkFCSUxJVFksCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgicHJvYmFiaWxpdHkiLCAicHJvYmFiaWxpdHkiLAotICAgICAgICAgICJwcm9iYWJpbGl0eSBmb3IgZWFjaCBieXRlIGluIHRoZSBidWZmZXIgdG8gYmUgY2hhbmdlZCIsIDAuMCwgMS4wLAotICAgICAgICAgIDAuMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZibWRfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmJtZF9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJCcmVhayBteSBkYXRhIiwKLSAgICAgICJUZXN0aW5nIiwKLSAgICAgICJyYW5kb21seSBjaGFuZ2UgZGF0YSBpbiB0aGUgc3RyZWFtIiwgIkJlbmphbWluIE90dGUgPG90dGVAZ25vbWU+Iik7Ci0KLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT50cmFuc2Zvcm1faXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9icmVha19teV9kYXRhX3RyYW5zZm9ybV9pcCk7Ci0gIGdzdGJhc2V0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2JyZWFrX215X2RhdGFfc3RhcnQpOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2JyZWFrX215X2RhdGFfc3RvcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYnJlYWtfbXlfZGF0YV9pbml0IChHc3RCcmVha015RGF0YSAqIGJtZCkKLXsKLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9pbl9wbGFjZSAoR1NUX0JBU0VfVFJBTlNGT1JNIChibWQpLCBUUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9icmVha19teV9kYXRhX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCcmVha015RGF0YSAqYm1kID0gR1NUX0JSRUFLX01ZX0RBVEEgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChibWQpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TRUVEOgotICAgICAgYm1kLT5zZWVkID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NFVF9UTzoKLSAgICAgIGJtZC0+c2V0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0tJUDoKLSAgICAgIGJtZC0+c2tpcCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9CQUJJTElUWToKLSAgICAgIGJtZC0+cHJvYmFiaWxpdHkgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYm1kKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9icmVha19teV9kYXRhX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RCcmVha015RGF0YSAqYm1kID0gR1NUX0JSRUFLX01ZX0RBVEEgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChibWQpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TRUVEOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGJtZC0+c2VlZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VUX1RPOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgYm1kLT5zZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NLSVA6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgYm1kLT5za2lwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9CQUJJTElUWToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGJtZC0+cHJvYmFiaWxpdHkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChibWQpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2JyZWFrX215X2RhdGFfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0QnJlYWtNeURhdGEgKmJtZCA9IEdTVF9CUkVBS19NWV9EQVRBICh0cmFucyk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnc2l6ZSBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2lzX3dyaXRhYmxlIChidWYpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChibWQpOwotCi0gIGlmIChibWQtPnNraXBwZWQgPCBibWQtPnNraXApIHsKLSAgICBpID0gYm1kLT5za2lwIC0gYm1kLT5za2lwcGVkOwotICB9IGVsc2UgewotICAgIGkgPSAwOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChibWQsCi0gICAgICAiZ290IGJ1ZmZlciAlcCAoc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiLCB0aW1lc3RhbXAgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgIiwgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiIsIGJ1ZiwgbWFwLnNpemUsCi0gICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSwgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikpOwotCi0gIGZvciAoOyBpIDwgbWFwLnNpemU7IGkrKykgewotICAgIGlmIChnX3JhbmRfZG91YmxlX3JhbmdlIChibWQtPnJhbmQsIDAsIDEuMCkgPD0gYm1kLT5wcm9iYWJpbGl0eSkgewotICAgICAgZ3VpbnQ4IG5ldzsKLQotICAgICAgaWYgKGJtZC0+c2V0IDwgMCkgewotICAgICAgICBuZXcgPSBnX3JhbmRfaW50X3JhbmdlIChibWQtPnJhbmQsIDAsIDI1Nik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBuZXcgPSBibWQtPnNldDsKLSAgICAgIH0KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoYm1kLAotICAgICAgICAgICJjaGFuZ2luZyBieXRlICUiIEdfR1NJWkVfRk9STUFUICIgZnJvbSAweCUwMlggdG8gMHglMDJYIiwgaSwKLSAgICAgICAgICAoZ3VpbnQpIEdTVF9SRUFEX1VJTlQ4IChtYXAuZGF0YSArIGkpLCAoZ3VpbnQpICgoZ3VpbnQ4KSBuZXcpKTsKLSAgICAgIG1hcC5kYXRhW2ldID0gbmV3OwotICAgIH0KLSAgfQotICAvKiBkb24ndCBvdmVyZmxvdyAqLwotICBibWQtPnNraXBwZWQgKz0gTUlOIChHX01BWFVJTlQgLSBibWQtPnNraXBwZWQsIG1hcC5zaXplKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChibWQpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYnJlYWtfbXlfZGF0YV9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RCcmVha015RGF0YSAqYm1kID0gR1NUX0JSRUFLX01ZX0RBVEEgKHRyYW5zKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJtZCk7Ci0gIGJtZC0+cmFuZCA9IGdfcmFuZF9uZXdfd2l0aF9zZWVkIChibWQtPnNlZWQpOwotICBibWQtPnNraXBwZWQgPSAwOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYm1kKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYnJlYWtfbXlfZGF0YV9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdEJyZWFrTXlEYXRhICpibWQgPSBHU1RfQlJFQUtfTVlfREFUQSAodHJhbnMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYm1kKTsKLSAgZ19yYW5kX2ZyZWUgKGJtZC0+cmFuZCk7Ci0gIGJtZC0+cmFuZCA9IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChibWQpOwotCi0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0LmMgYi9nc3QvZGVidWd1dGlscy9jcHVyZXBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYxYzM4ZS4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9jcHVyZXBvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKiBHU3RyZWFtZXIgQ3B1IFJlcG9ydCBFbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBtZXJhbGkgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSAiY3B1cmVwb3J0LmgiCi0KLQotZW51bQotewotICBQUk9QXzAsCi19OwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBjcHVfcmVwb3J0X3NyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgY3B1X3JlcG9ydF9zaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jcHVfcmVwb3J0X3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfY3B1X3JlcG9ydF9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfY3B1X3JlcG9ydF9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotCi0jZGVmaW5lIGdzdF9jcHVfcmVwb3J0X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdENwdVJlcG9ydCwgZ3N0X2NwdV9yZXBvcnQsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKLQotc3RhdGljIHZvaWQKLWdzdF9jcHVfcmVwb3J0X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqKQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY3B1X3JlcG9ydF9jbGFzc19pbml0IChHc3RDcHVSZXBvcnRDbGFzcyAqIGdfY2xhc3MpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqZ3N0YmFzZXRyYW5zX2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGdfY2xhc3MpOwotICBlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdfY2xhc3MpOwotICBnc3RiYXNldHJhbnNfY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGdfY2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2NwdV9yZXBvcnRfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmY3B1X3JlcG9ydF9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmY3B1X3JlcG9ydF9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJDUFUgcmVwb3J0IiwKLSAgICAgICJUZXN0aW5nIiwKLSAgICAgICJQb3N0IGNwdSB1c2FnZSBpbmZvcm1hdGlvbiBldmVyeSBidWZmZXIiLAotICAgICAgIlphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPiIpOwotCi0gIGdzdGJhc2V0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY3B1X3JlcG9ydF90cmFuc2Zvcm1faXApOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jcHVfcmVwb3J0X3N0YXJ0KTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jcHVfcmVwb3J0X3N0b3ApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NwdV9yZXBvcnRfaW5pdCAoR3N0Q3B1UmVwb3J0ICogcmVwb3J0KQotewotICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9UUkFOU0ZPUk0gKHJlcG9ydCksIFRSVUUpOwotCi19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfY3B1X3JlcG9ydF90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RDcHVSZXBvcnQgKmZpbHRlcjsKLSAgR1RpbWVWYWwgY3VyX3RpbWU7Ci0gIGNsb2NrX3QgY3VyX2NwdV90aW1lOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2ludDY0IHRpbWVfdGFrZW47Ci0KLQotICBnX2dldF9jdXJyZW50X3RpbWUgKCZjdXJfdGltZSk7Ci0gIGN1cl9jcHVfdGltZSA9IGNsb2NrICgpOwotCi0gIGZpbHRlciA9IEdTVF9DUFVfUkVQT1JUICh0cmFucyk7Ci0KLQotICB0aW1lX3Rha2VuID0gR1NUX1RJTUVWQUxfVE9fVElNRSAoY3VyX3RpbWUpIC0KLSAgICAgIEdTVF9USU1FVkFMX1RPX1RJTUUgKGZpbHRlci0+bGFzdF90aW1lKTsKLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJjcHUtcmVwb3J0IiwgImNwdS10aW1lIiwgR19UWVBFX0RPVUJMRSwKLSAgICAgICgoZ2RvdWJsZSkgKGN1cl9jcHVfdGltZSAtIGZpbHRlci0+bGFzdF9jcHVfdGltZSkpLAotICAgICAgImFjdHVhbC10aW1lIiwgR19UWVBFX0lOVDY0LCB0aW1lX3Rha2VuLCAiYnVmZmVyLXRpbWUiLCBHX1RZUEVfSU5UNjQsCi0gICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSwgTlVMTCk7Ci0gIG1zZyA9IGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKGZpbHRlciksIHMpOwotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGZpbHRlciksIG1zZyk7Ci0gIGZpbHRlci0+bGFzdF90aW1lID0gY3VyX3RpbWU7Ci0gIGZpbHRlci0+bGFzdF9jcHVfdGltZSA9IGN1cl9jcHVfdGltZTsKLQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY3B1X3JlcG9ydF9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RDcHVSZXBvcnQgKmZpbHRlcjsKLQotICBmaWx0ZXIgPSBHU1RfQ1BVX1JFUE9SVCAodHJhbnMpOwotCi0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmZpbHRlci0+bGFzdF90aW1lKTsKLSAgZmlsdGVyLT5zdGFydF90aW1lID0gZmlsdGVyLT5sYXN0X3RpbWU7Ci0gIGZpbHRlci0+bGFzdF9jcHVfdGltZSA9IGNsb2NrICgpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY3B1X3JlcG9ydF9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIC8qIGFueXRoaW5nIHdlIHNob3VsZCBiZSBkb2luZyBoZXJlPyAqLwotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL2NwdXJlcG9ydC5oIGIvZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MDU1NTkuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvY3B1cmVwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKiBHU3RyZWFtZXIgQ1BVIFJlcG9ydCBFbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBtZXJhbGkgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQ1BVX1JFUE9SVF9IX18KLSNkZWZpbmUgX19HU1RfQ1BVX1JFUE9SVF9IX18KLQotI2luY2x1ZGUgPHRpbWUuaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9DUFVfUkVQT1JUIFwKLSAgKGdzdF9jcHVfcmVwb3J0X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9DUFVfUkVQT1JUKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQ1BVX1JFUE9SVCxHc3RDcHVSZXBvcnQpKQotI2RlZmluZSBHU1RfQ1BVX1JFUE9SVF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9DUFVfUkVQT1JULEdzdENwdVJlcG9ydENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0NQVV9SRVBPUlQob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9DUFVfUkVQT1JUKSkKLSNkZWZpbmUgR1NUX0lTX0NQVV9SRVBPUlRfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQ1BVX1JFUE9SVCkpCi10eXBlZGVmIHN0cnVjdCBfR3N0Q3B1UmVwb3J0IEdzdENwdVJlcG9ydDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDcHVSZXBvcnRDbGFzcyBHc3RDcHVSZXBvcnRDbGFzczsKLQotc3RydWN0IF9Hc3RDcHVSZXBvcnQKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSBiYXNldHJhbnNmb3JtOwotCi0gIEdUaW1lVmFsIHN0YXJ0X3RpbWU7Ci0gIEdUaW1lVmFsIGxhc3RfdGltZTsKLSAgY2xvY2tfdCBsYXN0X2NwdV90aW1lOwotfTsKLQotc3RydWN0IF9Hc3RDcHVSZXBvcnRDbGFzcwotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2NwdV9yZXBvcnRfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX0NQVV9SRVBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3RjYXBzZGVidWcuaCBiL2dzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNkZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDA5MzBkLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNkZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRklYTUUgPGZpeG1lQGV4YW1wbGUuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX0dTVF9DQVBTX0RFQlVHX0hfCi0jZGVmaW5lIF9HU1RfQ0FQU19ERUJVR19IXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0NBUFNfREVCVUcgICAoZ3N0X2NhcHNfZGVidWdfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0NBUFNfREVCVUcob2JqKSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9DQVBTX0RFQlVHLEdzdENhcHNEZWJ1ZykpCi0jZGVmaW5lIEdTVF9DQVBTX0RFQlVHX0NMQVNTKGtsYXNzKSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0NBUFNfREVCVUcsR3N0Q2Fwc0RlYnVnQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQ0FQU19ERUJVRyhvYmopICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0NBUFNfREVCVUcpKQotI2RlZmluZSBHU1RfSVNfQ0FQU19ERUJVR19DTEFTUyhvYmopICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQ0FQU19ERUJVRykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RDYXBzRGVidWcgR3N0Q2Fwc0RlYnVnOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNEZWJ1Z0NsYXNzIEdzdENhcHNEZWJ1Z0NsYXNzOwotCi1zdHJ1Y3QgX0dzdENhcHNEZWJ1ZwotewotICBHc3RFbGVtZW50IGJhc2VfY2Fwc2RlYnVnOwotCi0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLX07Ci0KLXN0cnVjdCBfR3N0Q2Fwc0RlYnVnQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIGJhc2VfY2Fwc2RlYnVnX2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2NhcHNfZGVidWdfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYyBiL2dzdC9kZWJ1Z3V0aWxzL2dzdGNhcHNzZXR0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIzZGI3Ni4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotLyogR1N0cmVhbWVyIEVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzA3LCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtY2Fwc3NldHRlcgotICoKLSAqIFNldHMgb3IgbWVyZ2VzIGNhcHMgb24gYSBzdHJlYW0ncyBidWZmZXJzLiBUaGF0IGlzLCBhIGJ1ZmZlcidzIGNhcHMgYXJlCi0gKiB1cGRhdGVkIHVzaW5nIChmaWVsZHMgb2YpICNHc3RDYXBzU2V0dGVyOmNhcHMuIE5vdGUgdGhhdCB0aGlzIG1heSBjb250YWluCi0gKiBtdWx0aXBsZSBzdHJ1Y3R1cmVzICh0aG91Z2ggbm90IGxpa2VseSByZWNvbW1lbmRlZCksIGJ1dCBlYWNoIG9mIHRoZXNlIG11c3QKLSAqIGJlIGZpeGVkIChvciB3aWxsIG90aGVyd2lzZSBiZSByZWplY3RlZCkuCi0gKiAKLSAqIElmICNHc3RDYXBzU2V0dGVyOmpvaW4gaXMgJVRSVUUsIHRoZW4gdGhlIGluY29taW5nIGNhcHMnIG1pbWUtdHlwZSBpcwotICogY29tcGFyZWQgdG8gdGhlIG1pbWUtdHlwZShzKSBvZiBwcm92aWRlZCBjYXBzIGFuZCBvbmx5IG1hdGNoaW5nIHN0cnVjdHVyZShzKQotICogYXJlIGNvbnNpZGVyZWQgZm9yIHVwZGF0aW5nLgotICogCi0gKiBJZiAjR3N0Q2Fwc1NldHRlcjpyZXBsYWNlIGlzICVUUlVFLCB0aGVuIGFueSBjYXBzIHVwZGF0ZSBpcyBwcmVjZWRlZCBieQotICogY2xlYXJpbmcgZXhpc3RpbmcgZmllbGRzLCBtYWtpbmcgcHJvdmlkZWQgZmllbGRzIChhcyBhIHdob2xlKSByZXBsYWNlCi0gKiBpbmNvbWluZyBvbmVzLiBPdGhlcndpc2UsIG5vIGNsZWFyaW5nIGlzIHBlcmZvcm1lZCwgaW4gd2hpY2ggY2FzZSBwcm92aWRlZAotICogZmllbGRzIGFyZSBhZGRlZC9tZXJnZWQgb250byBpbmNvbWluZyBjYXBzCi0gKiAKLSAqIEFsdGhvdWdoIHRoaXMgZWxlbWVudCBtaWdodCBtYWlubHkgc2VydmUgYXMgZGVidWcgaGVscGVyLAotICogaXQgY2FuIGFsc28gcHJhY3RpY2FsbHkgYmUgdXNlZCB0byBjb3JyZWN0IGEgZmF1bHR5IHBpeGVsLWFzcGVjdC1yYXRpbywKLSAqIG9yIHRvIG1vZGlmeSBhIHl1diBmb3VyY2MgdmFsdWUgdG8gZWZmZWN0aXZlbHkgc3dhcCBjaHJvbWEgY29tcG9uZW50cyBvciBzdWNoCi0gKiBhbGlrZS4KLSAqLwotCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGNhcHNzZXR0ZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGNhcHNfc2V0dGVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGNhcHNfc2V0dGVyX2RlYnVnCi0KLQotLyogc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9DQVBTLAotICBQUk9QX0pPSU4sCi0gIFBST1BfUkVQTEFDRQotICAgICAgLyogRklMTCBNRSAqLwotfTsKLQotI2RlZmluZSBERUZBVUxUX0pPSU4gICAgICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9SRVBMQUNFICAgICAgICAgICBGQUxTRQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2NhcHNfc2V0dGVyX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19OQU1FLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2NhcHNfc2V0dGVyX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKEdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX05BTUUsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfY2Fwc19zZXR0ZXJfdHJhbnNmb3JtX3NpemUgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgZ3NpemUgc2l6ZSwKLSAgICBHc3RDYXBzICogb3RoZXJjYXBzLCBnc2l6ZSAqIG90aGVyc2l6ZSk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2NhcHNfc2V0dGVyX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBjZmlsdGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9jYXBzX3NldHRlcl90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiBidHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW4pOwotCi1zdGF0aWMgdm9pZCBnc3RfY2Fwc19zZXR0ZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfY2Fwc19zZXR0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2NhcHNfc2V0dGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotI2RlZmluZSBnc3RfY2Fwc19zZXR0ZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0Q2Fwc1NldHRlciwgZ3N0X2NhcHNfc2V0dGVyLCBHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19zZXR0ZXJfY2xhc3NfaW5pdCAoR3N0Q2Fwc1NldHRlckNsYXNzICogZ19jbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBnX2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoZ19jbGFzcyk7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGdfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGNhcHNfc2V0dGVyX2RlYnVnLCAiY2Fwc3NldHRlciIsIDAsICJjYXBzc2V0dGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2NhcHNfc2V0dGVyX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2NhcHNfc2V0dGVyX2dldF9wcm9wZXJ0eTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9jYXBzX3NldHRlcl9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBUFMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJjYXBzIiwgIk1lcmdlIGNhcHMiLAotICAgICAgICAgICJNZXJnZSB0aGVzZSBjYXBzICh0aGVyZWJ5IG92ZXJ3cml0aW5nKSBpbiB0aGUgc3RyZWFtIiwKLSAgICAgICAgICBHU1RfVFlQRV9DQVBTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9KT0lOLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJqb2luIiwgIkpvaW4iLAotICAgICAgICAgICJNYXRjaCBpbmNvbWluZyBjYXBzJyBtaW1lLXR5cGUgdG8gbWltZS10eXBlIG9mIHByb3ZpZGVkIGNhcHMiLAotICAgICAgICAgIERFRkFVTFRfSk9JTiwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVQTEFDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicmVwbGFjZSIsICJSZXBsYWNlIiwKLSAgICAgICAgICAiRHJvcCBmaWVsZHMgb2YgaW5jb21pbmcgY2FwcyIsIERFRkFVTFRfUkVQTEFDRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiQ2Fwc1NldHRlciIsCi0gICAgICAiR2VuZXJpYyIsCi0gICAgICAiU2V0L21lcmdlIGNhcHMgb24gc3RyZWFtIiwKLSAgICAgICJNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2NhcHNfc2V0dGVyX3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfY2Fwc19zZXR0ZXJfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX3NpemUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jYXBzX3NldHRlcl90cmFuc2Zvcm1fc2l6ZSk7Ci0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhcHNfc2V0dGVyX3RyYW5zZm9ybV9jYXBzKTsKLSAgLyogZHVtbXkgc2VlbXMgbmVlZGVkICovCi0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1faXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2NhcHNfc2V0dGVyX3RyYW5zZm9ybV9pcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19zZXR0ZXJfaW5pdCAoR3N0Q2Fwc1NldHRlciAqIGZpbHRlcikKLXsKLSAgZmlsdGVyLT5jYXBzID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgZmlsdGVyLT5qb2luID0gREVGQVVMVF9KT0lOOwotICBmaWx0ZXItPnJlcGxhY2UgPSBERUZBVUxUX1JFUExBQ0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19zZXR0ZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdENhcHNTZXR0ZXIgKmZpbHRlciA9IEdTVF9DQVBTX1NFVFRFUiAob2JqZWN0KTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmZmlsdGVyLT5jYXBzLCBOVUxMKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NhcHNfc2V0dGVyX3RyYW5zZm9ybV9zaXplIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIGdzaXplIHNpemUsCi0gICAgR3N0Q2FwcyAqIG90aGVyY2FwcywgZ3NpemUgKiBvdGhlcnNpemUpCi17Ci0gICpvdGhlcnNpemUgPSBzaXplOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfY2Fwc19zZXR0ZXJfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGNmaWx0ZXIpCi17Ci0gIEdzdENhcHNTZXR0ZXIgKmZpbHRlciA9IEdTVF9DQVBTX1NFVFRFUiAodHJhbnMpOwotICBHc3RDYXBzICpyZXQgPSBOVUxMLCAqZmlsdGVyX2NhcHMgPSBOVUxMOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSwgKm1lcmdlOwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgZ2ludCBpLCBqLCBrOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLAotICAgICAgInJlY2VpdmluZyBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCAiLCB3aXRoIGZpbHRlcjogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBjYXBzLCBjZmlsdGVyKTsKLQotICAvKiBwYXNzIGZpbHRlciBjYXBzIHVwc3RyZWFtLCBvciBhbnkgaWYgbm8gZmlsdGVyICovCi0gIGlmIChkaXJlY3Rpb24gIT0gR1NUX1BBRF9TSU5LKSB7Ci0gICAgaWYgKCFjZmlsdGVyIHx8IGdzdF9jYXBzX2lzX2VtcHR5IChjZmlsdGVyKSkgewotICAgICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoR1NUX0NBUFNfQU5ZKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoY2ZpbHRlcik7Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX3JlZiAoZmlsdGVyLT5jYXBzKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0KLSAgZm9yIChrID0gMDsgayA8IGdzdF9jYXBzX2dldF9zaXplIChyZXQpOyBrKyspIHsKLSAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChyZXQsIGspOwotICAgIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChmaWx0ZXJfY2Fwcyk7ICsraSkgewotICAgICAgbWVyZ2UgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChmaWx0ZXJfY2FwcywgaSk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAobWVyZ2UsIG5hbWUpIHx8ICFmaWx0ZXItPmpvaW4pIHsKLQotICAgICAgICBpZiAoIWZpbHRlci0+am9pbikKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKG1lcmdlKSk7Ci0KLSAgICAgICAgaWYgKGZpbHRlci0+cmVwbGFjZSkKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9hbGxfZmllbGRzIChzdHJ1Y3R1cmUpOwotCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChtZXJnZSk7ICsraikgewotICAgICAgICAgIGNvbnN0IGdjaGFyICpmbmFtZTsKLQotICAgICAgICAgIGZuYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAobWVyZ2UsIGopOwotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsIGZuYW1lLAotICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAobWVyZ2UsIGZuYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgInJldHVybmluZyBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLQotICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyX2NhcHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfY2Fwc19zZXR0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYnRyYW5zLCBHc3RCdWZmZXIgKiBpbikKLXsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jYXBzX2lzX2ZpeGVkX2ZvcmVhY2ggKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgZ3BvaW50ZXIgdW51c2VkKQotewotICByZXR1cm4gZ3N0X3ZhbHVlX2lzX2ZpeGVkICh2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfY2Fwc19zZXR0ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdENhcHNTZXR0ZXIgKmZpbHRlciA9IEdTVF9DQVBTX1NFVFRFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ0FQUzp7Ci0gICAgICBHc3RDYXBzICpuZXdfY2FwczsKLSAgICAgIGNvbnN0IEdzdENhcHMgKm5ld19jYXBzX3ZhbCA9IGdzdF92YWx1ZV9nZXRfY2FwcyAodmFsdWUpOwotICAgICAgZ2ludCBpOwotCi0gICAgICBpZiAobmV3X2NhcHNfdmFsID09IE5VTEwpIHsKLSAgICAgICAgbmV3X2NhcHMgPSBnc3RfY2Fwc19uZXdfYW55ICgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmV3X2NhcHMgPSBnc3RfY2Fwc19jb3B5IChuZXdfY2Fwc192YWwpOwotICAgICAgfQotCi0gICAgICBmb3IgKGkgPSAwOyBuZXdfY2FwcyAmJiAoaSA8IGdzdF9jYXBzX2dldF9zaXplIChuZXdfY2FwcykpOyArK2kpIHsKLSAgICAgICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChuZXdfY2FwcywgaSk7Ci0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzLCBnc3RfY2Fwc19pc19maXhlZF9mb3JlYWNoLCBOVUxMKSkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZpbHRlciwgInJlamVjdGVkIHVuZml4ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICAgIG5ld19jYXBzKTsKLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAobmV3X2NhcHMpOwotICAgICAgICAgIG5ld19jYXBzID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAobmV3X2NhcHMpIHsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICAgICAgICBnc3RfY2Fwc19yZXBsYWNlICgmZmlsdGVyLT5jYXBzLCBuZXdfY2Fwcyk7Ci0gICAgICAgIC8qIGRyb3AgZXh0cmEgcmVmICovCi0gICAgICAgIGdzdF9jYXBzX3VucmVmIChuZXdfY2Fwcyk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInNldCBuZXcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3X2NhcHMpOwotICAgICAgfQotCi0gICAgICAvKiB0cnkgdG8gYWN0aXZhdGUgdGhlc2UgbmV3IGNhcHMgbmV4dCB0aW1lIGFyb3VuZCAqLwotICAgICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3JlY29uZmlndXJlX3NyYyAoR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSk9JTjoKLSAgICAgIGZpbHRlci0+am9pbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVBMQUNFOgotICAgICAgZmlsdGVyLT5yZXBsYWNlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NhcHNfc2V0dGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDYXBzU2V0dGVyICpmaWx0ZXIgPSBHU1RfQ0FQU19TRVRURVIgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NBUFM6Ci0gICAgICBnc3RfdmFsdWVfc2V0X2NhcHMgKHZhbHVlLCBmaWx0ZXItPmNhcHMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0pPSU46Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZmlsdGVyLT5qb2luKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVBMQUNFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+cmVwbGFjZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmggYi9nc3QvZGVidWd1dGlscy9nc3RjYXBzc2V0dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NmJmMTkuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvZ3N0Y2Fwc3NldHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyIEVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzA3LCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX0NBUFNfU0VUVEVSX0hfXwotI2RlZmluZSBfX0dTVF9DQVBTX1NFVFRFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0NBUFNfU0VUVEVSIFwKLSAgKGdzdF9jYXBzX3NldHRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQ0FQU19TRVRURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9DQVBTX1NFVFRFUixHc3RDYXBzU2V0dGVyKSkKLSNkZWZpbmUgR1NUX0NBUFNfU0VUVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0NBUFNfU0VUVEVSLEdzdENhcHNTZXR0ZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DQVBTX1NFVFRFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0NBUFNfU0VUVEVSKSkKLSNkZWZpbmUgR1NUX0lTX0NBUFNfU0VUVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0NBUFNfU0VUVEVSKSkKLQotR1R5cGUgZ3N0X2NhcHNfc2V0dGVyX2dldF90eXBlICh2b2lkKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHNTZXR0ZXIgR3N0Q2Fwc1NldHRlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RDYXBzU2V0dGVyQ2xhc3MgR3N0Q2Fwc1NldHRlckNsYXNzOwotCi1zdHJ1Y3QgX0dzdENhcHNTZXR0ZXIKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSBwYXJlbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgLyogcHJvcGVydGllcyAqLwotICBHc3RDYXBzICpjYXBzOwotICBnYm9vbGVhbiBqb2luOwotICBnYm9vbGVhbiByZXBsYWNlOwotfTsKLQotCi1zdHJ1Y3QgX0dzdENhcHNTZXR0ZXJDbGFzcwotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NBUFNfU0VUVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2RlYnVndXRpbHMvZ3N0ZGVidWcuYyBiL2dzdC9kZWJ1Z3V0aWxzL2dzdGRlYnVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NmFhOWYuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvZ3N0ZGVidWcuYworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HVHlwZSBnc3RfYnJlYWtfbXlfZGF0YV9nZXRfdHlwZSAodm9pZCk7Ci0vL0dUeXBlIGdzdF9jYXBzX2RlYnVnX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF9jYXBzX3NldHRlcl9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3Rfcm5kX2J1ZmZlcl9zaXplX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF9uYXZzZWVrX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF9wcm9ncmVzc19yZXBvcnRfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X3RhZ19pbmplY3RfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X3Rlc3RfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X3B1c2hfZmlsZV9zcmNfZ2V0X3R5cGUgKHZvaWQpOwotLyoKLUdUeXBlIGdzdF9nc3RfbmVnb3RpYXRpb25fZ2V0X3R5cGUgKHZvaWQpOwotKi8KLUdUeXBlIGdzdF9jcHVfcmVwb3J0X2dldF90eXBlICh2b2lkKTsKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJicmVha215ZGF0YSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X2JyZWFrX215X2RhdGFfZ2V0X3R5cGUgKCkpCi0gICAgICB8fCAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImNhcHNzZXR0ZXIiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9jYXBzX3NldHRlcl9nZXRfdHlwZSAoKSkKLSAgICAgIHx8ICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicm5kYnVmZmVyc2l6ZSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X3JuZF9idWZmZXJfc2l6ZV9nZXRfdHlwZSAoKSkKLSAgICAgIHx8ICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibmF2c2VlayIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X25hdnNlZWtfZ2V0X3R5cGUgKCkpCi0gICAgICB8fCAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInB1c2hmaWxlc3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfcHVzaF9maWxlX3NyY19nZXRfdHlwZSAoKSkgfHwKLS8qICAgICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibmVnb3RpYXRpb24iLCBHU1RfUkFOS19OT05FLCBnc3RfZ3N0X25lZ290aWF0aW9uX2dldF90eXBlICgpKSB8fCAqLwotICAgICAgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJwcm9ncmVzc3JlcG9ydCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgZ3N0X3Byb2dyZXNzX3JlcG9ydF9nZXRfdHlwZSAoKSkKLSAgICAgIHx8ICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidGFnaW5qZWN0IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfdGFnX2luamVjdF9nZXRfdHlwZSAoKSkKLSAgICAgIHx8ICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidGVzdHNpbmsiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF90ZXN0X2dldF90eXBlICgpKQotI2lmIDAKLSAgICAgIHx8ICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiY2Fwc2RlYnVnIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBnc3RfY2Fwc19kZWJ1Z19nZXRfdHlwZSAoKSkKLSNlbmRpZgotICAgICAgfHwgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJjcHVyZXBvcnQiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIGdzdF9jcHVfcmVwb3J0X2dldF90eXBlICgpKSkKLQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGRlYnVnLAotICAgICJlbGVtZW50cyBmb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5jIGIvZ3N0L2RlYnVndXRpbHMvZ3N0bmF2aWdhdGlvbnRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMyZmUxMy4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdG5hdmlnYXRpb250ZXN0LmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpZmRlZiBfTVNDX1ZFUgotI2RlZmluZSByaW50KHgpIChmbG9vcigoeCkrMC41KSkKLSNlbmRpZgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChuYXZpZ2F0aW9udGVzdF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBuYXZpZ2F0aW9udGVzdF9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X25hdmlnYXRpb250ZXN0X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgiSTQyMCIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfbmF2aWdhdGlvbnRlc3Rfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJJNDIwIikpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfbmF2aWdhdGlvbnRlc3RfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TmF2aWdhdGlvbnRlc3QsIGdzdF9uYXZpZ2F0aW9udGVzdCwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfbmF2aWdhdGlvbnRlc3Rfc3JjX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbzsKLSAgR3N0TmF2aWdhdGlvbnRlc3QgKm5hdnRlc3Q7Ci0gIGNvbnN0IGdjaGFyICp0eXBlOwotCi0gIG5hdnRlc3QgPSBHU1RfTkFWSUdBVElPTlRFU1QgKHRyYW5zKTsKLQotICBpbmZvID0gJkdTVF9WSURFT19GSUxURVIgKHRyYW5zKS0+aW5faW5mbzsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgICBnaW50IGZwc19uLCBmcHNfZDsKLQotICAgICAgZnBzX24gPSBHU1RfVklERU9fSU5GT19GUFNfTiAoaW5mbyk7Ci0gICAgICBmcHNfZCA9IEdTVF9WSURFT19JTkZPX0ZQU19EIChpbmZvKTsKLQotICAgICAgdHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImV2ZW50Iik7Ci0gICAgICBpZiAoZ19zdHJfZXF1YWwgKHR5cGUsICJtb3VzZS1tb3ZlIikpIHsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlIChzLCAicG9pbnRlcl94IiwgJm5hdnRlc3QtPngpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHMsICJwb2ludGVyX3kiLCAmbmF2dGVzdC0+eSk7Ci0gICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsICh0eXBlLCAibW91c2UtYnV0dG9uLXByZXNzIikpIHsKLSAgICAgICAgQnV0dG9uQ2xpY2sgKmNsaWNrID0gZ19uZXcgKEJ1dHRvbkNsaWNrLCAxKTsKLQotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHMsICJwb2ludGVyX3giLCAmY2xpY2stPngpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHMsICJwb2ludGVyX3kiLCAmY2xpY2stPnkpOwotICAgICAgICBjbGljay0+aW1hZ2VzX2xlZnQgPSAoZnBzX24gKyBmcHNfZCAtIDEpIC8gZnBzX2Q7Ci0gICAgICAgIC8qIGdyZWVuICovCi0gICAgICAgIGNsaWNrLT5jeSA9IDE1MDsKLSAgICAgICAgY2xpY2stPmN1ID0gNDY7Ci0gICAgICAgIGNsaWNrLT5jdiA9IDIxOwotICAgICAgICBuYXZ0ZXN0LT5jbGlja3MgPSBnX3NsaXN0X3ByZXBlbmQgKG5hdnRlc3QtPmNsaWNrcywgY2xpY2spOwotICAgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAodHlwZSwgIm1vdXNlLWJ1dHRvbi1yZWxlYXNlIikpIHsKLSAgICAgICAgQnV0dG9uQ2xpY2sgKmNsaWNrID0gZ19uZXcgKEJ1dHRvbkNsaWNrLCAxKTsKLQotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHMsICJwb2ludGVyX3giLCAmY2xpY2stPngpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHMsICJwb2ludGVyX3kiLCAmY2xpY2stPnkpOwotICAgICAgICBjbGljay0+aW1hZ2VzX2xlZnQgPSAoZnBzX24gKyBmcHNfZCAtIDEpIC8gZnBzX2Q7Ci0gICAgICAgIC8qIHJlZCAqLwotICAgICAgICBjbGljay0+Y3kgPSA3NjsKLSAgICAgICAgY2xpY2stPmN1ID0gODU7Ci0gICAgICAgIGNsaWNrLT5jdiA9IDI1NTsKLSAgICAgICAgbmF2dGVzdC0+Y2xpY2tzID0gZ19zbGlzdF9wcmVwZW5kIChuYXZ0ZXN0LT5jbGlja3MsIGNsaWNrKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c3JjX2V2ZW50ICh0cmFucywgZXZlbnQpOwotfQotCi0vKiBVc2VmdWwgbWFjcm9zICovCi0jZGVmaW5lIEdTVF9WSURFT19JNDIwX1lfUk9XU1RSSURFKHdpZHRoKSAoR1NUX1JPVU5EX1VQXzQod2lkdGgpKQotI2RlZmluZSBHU1RfVklERU9fSTQyMF9VX1JPV1NUUklERSh3aWR0aCkgKEdTVF9ST1VORF9VUF84KHdpZHRoKS8yKQotI2RlZmluZSBHU1RfVklERU9fSTQyMF9WX1JPV1NUUklERSh3aWR0aCkgKChHU1RfUk9VTkRfVVBfOChHU1RfVklERU9fSTQyMF9ZX1JPV1NUUklERSh3aWR0aCkpKS8yKQotCi0jZGVmaW5lIEdTVF9WSURFT19JNDIwX1lfT0ZGU0VUKHcsaCkgKDApCi0jZGVmaW5lIEdTVF9WSURFT19JNDIwX1VfT0ZGU0VUKHcsaCkgKEdTVF9WSURFT19JNDIwX1lfT0ZGU0VUKHcsaCkrKEdTVF9WSURFT19JNDIwX1lfUk9XU1RSSURFKHcpKkdTVF9ST1VORF9VUF8yKGgpKSkKLSNkZWZpbmUgR1NUX1ZJREVPX0k0MjBfVl9PRkZTRVQodyxoKSAoR1NUX1ZJREVPX0k0MjBfVV9PRkZTRVQodyxoKSsoR1NUX1ZJREVPX0k0MjBfVV9ST1dTVFJJREUodykqR1NUX1JPVU5EX1VQXzIoaCkvMikpCi0KLSNkZWZpbmUgR1NUX1ZJREVPX0k0MjBfU0laRSh3LGgpICAgICAoR1NUX1ZJREVPX0k0MjBfVl9PRkZTRVQodyxoKSsoR1NUX1ZJREVPX0k0MjBfVl9ST1dTVFJJREUodykqR1NUX1JPVU5EX1VQXzIoaCkvMikpCi0KLXN0YXRpYyB2b2lkCi1kcmF3X2JveF9wbGFuYXI0MTEgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgaW50IHgsIGludCB5LAotICAgIGd1aW50OCBjb2xvcnksIGd1aW50OCBjb2xvcnUsIGd1aW50OCBjb2xvcnYpCi17Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgaW50IHgxLCB4MiwgeTEsIHkyOwotICBndWludDggKmQ7Ci0gIGdpbnQgc3RyaWRlOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsKLQotICBpZiAoeCA8IDAgfHwgeSA8IDAgfHwgeCA+PSB3aWR0aCB8fCB5ID49IGhlaWdodCkKLSAgICByZXR1cm47Ci0KLSAgeDEgPSBNQVggKHggLSA1LCAwKTsKLSAgeDIgPSBNSU4gKHggKyA1LCB3aWR0aCk7Ci0gIHkxID0gTUFYICh5IC0gNSwgMCk7Ci0gIHkyID0gTUlOICh5ICsgNSwgaGVpZ2h0KTsKLQotICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsKLSAgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotCi0gIGZvciAoeSA9IHkxOyB5IDwgeTI7IHkrKykgewotICAgIGZvciAoeCA9IHgxOyB4IDwgeDI7IHgrKykgewotICAgICAgZFt5ICogc3RyaWRlICsgeF0gPSBjb2xvcnk7Ci0gICAgfQotICB9Ci0KLSAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMSk7Ci0gIHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGZyYW1lLCAxKTsKLQotICB4MSAvPSAyOwotICB4MiAvPSAyOwotICB5MSAvPSAyOwotICB5MiAvPSAyOwotICBmb3IgKHkgPSB5MTsgeSA8IHkyOyB5KyspIHsKLSAgICBmb3IgKHggPSB4MTsgeCA8IHgyOyB4KyspIHsKLSAgICAgIGRbeSAqIHN0cmlkZSArIHhdID0gY29sb3J1OwotICAgIH0KLSAgfQotCi0gIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDIpOwotICBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChmcmFtZSwgMik7Ci0KLSAgZm9yICh5ID0geTE7IHkgPCB5MjsgeSsrKSB7Ci0gICAgZm9yICh4ID0geDE7IHggPCB4MjsgeCsrKSB7Ci0gICAgICBkW3kgKiBzdHJpZGUgKyB4XSA9IGNvbG9ydjsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9uYXZpZ2F0aW9udGVzdF90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0TmF2aWdhdGlvbnRlc3QgKm5hdnRlc3QgPSBHU1RfTkFWSUdBVElPTlRFU1QgKGZpbHRlcik7Ci0gIEdTTGlzdCAqd2FsazsKLQotICBnc3RfdmlkZW9fZnJhbWVfY29weSAob3V0X2ZyYW1lLCBpbl9mcmFtZSk7Ci0KLSAgd2FsayA9IG5hdnRlc3QtPmNsaWNrczsKLSAgd2hpbGUgKHdhbGspIHsKLSAgICBCdXR0b25DbGljayAqY2xpY2sgPSB3YWxrLT5kYXRhOwotCi0gICAgd2FsayA9IGdfc2xpc3RfbmV4dCAod2Fsayk7Ci0gICAgZHJhd19ib3hfcGxhbmFyNDExIChvdXRfZnJhbWUsCi0gICAgICAgIHJpbnQgKGNsaWNrLT54KSwgcmludCAoY2xpY2stPnkpLCBjbGljay0+Y3ksIGNsaWNrLT5jdSwgY2xpY2stPmN2KTsKLSAgICBpZiAoLS1jbGljay0+aW1hZ2VzX2xlZnQgPCAxKSB7Ci0gICAgICBuYXZ0ZXN0LT5jbGlja3MgPSBnX3NsaXN0X3JlbW92ZSAobmF2dGVzdC0+Y2xpY2tzLCBjbGljayk7Ci0gICAgICBnX2ZyZWUgKGNsaWNrKTsKLSAgICB9Ci0gIH0KLSAgZHJhd19ib3hfcGxhbmFyNDExIChvdXRfZnJhbWUsCi0gICAgICByaW50IChuYXZ0ZXN0LT54KSwgcmludCAobmF2dGVzdC0+eSksIDAsIDEyOCwgMTI4KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X25hdmlnYXRpb250ZXN0X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICBHc3ROYXZpZ2F0aW9udGVzdCAqbmF2dGVzdCA9IEdTVF9OQVZJR0FUSU9OVEVTVCAoZWxlbWVudCk7Ci0KLSAgaWYgKEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUpCi0gICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgLyogZG93bndhcmRzIHN0YXRlIGNoYW5nZXMgKi8KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICB7Ci0gICAgICBnX3NsaXN0X2ZvcmVhY2ggKG5hdnRlc3QtPmNsaWNrcywgKEdGdW5jKSBnX2ZyZWUsIE5VTEwpOwotICAgICAgZ19zbGlzdF9mcmVlIChuYXZ0ZXN0LT5jbGlja3MpOwotICAgICAgbmF2dGVzdC0+Y2xpY2tzID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25hdmlnYXRpb250ZXN0X2NsYXNzX2luaXQgKEdzdE5hdmlnYXRpb250ZXN0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICB0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIHZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9uYXZpZ2F0aW9udGVzdF9jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJWaWRlbyBuYXZpZ2F0aW9uIHRlc3QiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIkhhbmRsZSBuYXZpZ2F0aW9uIGV2ZW50cyBzaG93aW5nIGEgYmxhY2sgc3F1YXJlIGZvbGxvd2luZyBtb3VzZSBwb2ludGVyIiwKLSAgICAgICJEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfbmF2aWdhdGlvbnRlc3Rfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9uYXZpZ2F0aW9udGVzdF9zcmNfdGVtcGxhdGUpOwotCi0gIHRyYW5zX2NsYXNzLT5zcmNfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X25hdmlnYXRpb250ZXN0X3NyY19ldmVudCk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbmF2aWdhdGlvbnRlc3RfdHJhbnNmb3JtX2ZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uYXZpZ2F0aW9udGVzdF9pbml0IChHc3ROYXZpZ2F0aW9udGVzdCAqIG5hdnRlc3QpCi17Ci0gIG5hdnRlc3QtPnggPSAtMTsKLSAgbmF2dGVzdC0+eSA9IC0xOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChuYXZpZ2F0aW9udGVzdF9kZWJ1ZywgIm5hdmlnYXRpb250ZXN0IiwgMCwKLSAgICAgICJuYXZpZ2F0aW9udGVzdCIpOwotCi0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibmF2aWdhdGlvbnRlc3QiLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfTkFWSUdBVElPTlRFU1QpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbmF2aWdhdGlvbnRlc3QsCi0gICAgIlRlbXBsYXRlIGZvciBhIHZpZGVvIGZpbHRlciIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5oIGIvZ3N0L2RlYnVndXRpbHMvZ3N0bmF2aWdhdGlvbnRlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFjZjQ1OC4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9nc3RuYXZpZ2F0aW9udGVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9OQVZJR0FUSU9OVEVTVF9IX18KLSNkZWZpbmUgX19HU1RfTkFWSUdBVElPTlRFU1RfSF9fCi0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9OQVZJR0FUSU9OVEVTVCBcCi0gIChnc3RfbmF2aWdhdGlvbnRlc3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX05BVklHQVRJT05URVNUKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTkFWSUdBVElPTlRFU1QsR3N0TmF2aWdhdGlvbnRlc3QpKQotI2RlZmluZSBHU1RfTkFWSUdBVElPTlRFU1RfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTkFWSUdBVElPTlRFU1QsR3N0TmF2aWdhdGlvbnRlc3RDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19OQVZJR0FUSU9OVEVTVChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX05BVklHQVRJT05URVNUKSkKLSNkZWZpbmUgR1NUX0lTX05BVklHQVRJT05URVNUX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX05BVklHQVRJT05URVNUKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3ROYXZpZ2F0aW9udGVzdCBHc3ROYXZpZ2F0aW9udGVzdDsKLXR5cGVkZWYgc3RydWN0IF9Hc3ROYXZpZ2F0aW9udGVzdENsYXNzIEdzdE5hdmlnYXRpb250ZXN0Q2xhc3M7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdkb3VibGUgeDsKLSAgZ2RvdWJsZSB5OwotICBnaW50IGltYWdlc19sZWZ0OwotICBndWludDggY3ksIGN1LCBjdjsKLX0gQnV0dG9uQ2xpY2s7Ci0KLXN0cnVjdCBfR3N0TmF2aWdhdGlvbnRlc3QKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgZ2RvdWJsZSB4LCB5OwotICBHU0xpc3QgKmNsaWNrczsKLX07Ci0KLXN0cnVjdCBfR3N0TmF2aWdhdGlvbnRlc3RDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9uYXZpZ2F0aW9udGVzdF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfTkFWSUdBVElPTlRFU1RfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmMgYi9nc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTM4NmMuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvZ3N0bmF2c2Vlay5jCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgd2FzIChwcm9iYWJseSkgZ2VuZXJhdGVkIGZyb20gZ3N0bmF2c2Vlay5jLAotICogZ3N0bmF2c2Vlay5jLHYgMS43IDIwMDMvMTEvMDggMDI6NDg6NTkgZHNjaGxlZWYgRXhwIAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdG5hdnNlZWsuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NFRUtPRkZTRVQKLX07Ci0KLUdzdFN0YXRpY1BhZFRlbXBsYXRlIG5hdnNlZWtfc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBuYXZzZWVrX3NpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9uYXZzZWVrX3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9uYXZzZWVrX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2V0cmFucywKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9uYXZzZWVrX3NyY19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9uYXZzZWVrX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X25hdnNlZWtfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9uYXZzZWVrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9uYXZzZWVrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotR1R5cGUgZ3N0X25hdnNlZWtfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBnc3RfbmF2c2Vla19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3ROYXZTZWVrLCBnc3RfbmF2c2VlaywgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pOwotCi1zdGF0aWMgdm9pZAotZ3N0X25hdnNlZWtfY2xhc3NfaW5pdCAoR3N0TmF2U2Vla0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqZ3N0YmFzZXRyYW5zX2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGJhc2V0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9uYXZzZWVrX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X25hdnNlZWtfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX1NFRUtPRkZTRVQsIGdfcGFyYW1fc3BlY19kb3VibGUgKCJzZWVrLW9mZnNldCIsICJTZWVrIE9mZnNldCIsCi0gICAgICAgICAgIlRpbWUgaW4gc2Vjb25kcyB0byBzZWVrIGJ5IiwgMC4wLCBHX01BWERPVUJMRSwgNS4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJm5hdnNlZWtfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJm5hdnNlZWtfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIlNlZWsgYmFzZWQgb24gbGVmdC1yaWdodCBhcnJvd3MiLCAiRmlsdGVyL1ZpZGVvIiwKLSAgICAgICJTZWVrIGJhc2VkIG9uIG5hdmlnYXRpb24ga2V5cyBsZWZ0LXJpZ2h0IiwKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4iKTsKLQotICBnc3RiYXNldHJhbnNfY2xhc3MtPnNyY19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbmF2c2Vla19zcmNfZXZlbnQpOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X25hdnNlZWtfc2lua19ldmVudCk7Ci0gIGdzdGJhc2V0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbmF2c2Vla190cmFuc2Zvcm1faXApOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9uYXZzZWVrX3N0YXJ0KTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9uYXZzZWVrX3N0b3ApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25hdnNlZWtfaW5pdCAoR3N0TmF2U2VlayAqIG5hdnNlZWspCi17Ci0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKEdTVF9CQVNFX1RSQU5TRk9STSAobmF2c2VlayksIFRSVUUpOwotCi0gIG5hdnNlZWstPnNlZWtfb2Zmc2V0ID0gNS4wOwotICBuYXZzZWVrLT5sb29wID0gRkFMU0U7Ci0gIG5hdnNlZWstPmdyYWJfc2VnX3N0YXJ0ID0gRkFMU0U7Ci0gIG5hdnNlZWstPmdyYWJfc2VnX2VuZCA9IEZBTFNFOwotICBuYXZzZWVrLT5zZWdtZW50X3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgbmF2c2Vlay0+c2VnbWVudF9lbmQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25hdnNlZWtfc2VlayAoR3N0TmF2U2VlayAqIG5hdnNlZWssIGdpbnQ2NCBvZmZzZXQpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0UGFkICpwZWVyX3BhZDsKLSAgZ2ludDY0IHBlZXJfdmFsdWU7Ci0KLSAgLyogUXVlcnkgZm9yIHRoZSBjdXJyZW50IHRpbWUgdGhlbiBhdHRlbXB0IHRvIHNldCB0byB0aW1lICsgb2Zmc2V0ICovCi0gIHBlZXJfcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoR1NUX0JBU0VfVFJBTlNGT1JNIChuYXZzZWVrKS0+c2lua3BhZCk7Ci0gIHJldCA9IGdzdF9wYWRfcXVlcnlfcG9zaXRpb24gKHBlZXJfcGFkLCBHU1RfRk9STUFUX1RJTUUsICZwZWVyX3ZhbHVlKTsKLQotICBpZiAocmV0KSB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgcGVlcl92YWx1ZSArPSBvZmZzZXQ7Ci0gICAgaWYgKHBlZXJfdmFsdWUgPCAwKQotICAgICAgcGVlcl92YWx1ZSA9IDA7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUgfCBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgcGVlcl92YWx1ZSwgR1NUX1NFRUtfVFlQRV9OT05FLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAgIGdzdF9wYWRfc2VuZF9ldmVudCAocGVlcl9wYWQsIGV2ZW50KTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXJfcGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uYXZzZWVrX2NoYW5nZV9wbGF5YmFja19yYXRlIChHc3ROYXZTZWVrICogbmF2c2VlaywgZ2RvdWJsZSByYXRlKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFBhZCAqcGVlcl9wYWQ7Ci0gIGdpbnQ2NCBjdXJyZW50X3Bvc2l0aW9uOwotCi0gIHBlZXJfcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoR1NUX0JBU0VfVFJBTlNGT1JNIChuYXZzZWVrKS0+c2lua3BhZCk7Ci0gIHJldCA9IGdzdF9wYWRfcXVlcnlfcG9zaXRpb24gKHBlZXJfcGFkLCBHU1RfRk9STUFUX1RJTUUsICZjdXJyZW50X3Bvc2l0aW9uKTsKLQotICBpZiAocmV0KSB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotICAgIGdpbnQ2NCBzdGFydDsKLSAgICBnaW50NjQgc3RvcDsKLQotICAgIGlmIChyYXRlID4gMC4wKSB7Ci0gICAgICBzdGFydCA9IGN1cnJlbnRfcG9zaXRpb247Ci0gICAgICBzdG9wID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5lZ2F0aXZlIHJhdGU6IHdlIHBsYXkgZnJvbSBzdG9wIHRvIHN0YXJ0ICovCi0gICAgICBzdGFydCA9IDA7Ci0gICAgICBzdG9wID0gY3VycmVudF9wb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAocmF0ZSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIHwgR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfU0tJUCwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHN0YXJ0LCBHU1RfU0VFS19UWVBFX1NFVCwgc3RvcCk7Ci0KLSAgICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBlZXJfcGFkLCBldmVudCk7Ci0gIH0KLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcl9wYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X25hdnNlZWtfc2Vnc2VlayAoR3N0TmF2U2VlayAqIG5hdnNlZWspCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0UGFkICpwZWVyX3BhZDsKLQotICBpZiAoKG5hdnNlZWstPnNlZ21lbnRfc3RhcnQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgfHwKLSAgICAgIChuYXZzZWVrLT5zZWdtZW50X2VuZCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB8fAotICAgICAgKCFHU1RfUEFEX0lTX0xJTktFRCAoR1NUX0JBU0VfVFJBTlNGT1JNIChuYXZzZWVrKS0+c2lua3BhZCkpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKG5hdnNlZWstPmxvb3ApIHsKLSAgICBldmVudCA9Ci0gICAgICAgIGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgIEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUgfCBHU1RfU0VFS19GTEFHX1NFR01FTlQsCi0gICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBuYXZzZWVrLT5zZWdtZW50X3N0YXJ0LCBHU1RfU0VFS19UWVBFX1NFVCwKLSAgICAgICAgbmF2c2Vlay0+c2VnbWVudF9lbmQpOwotICB9IGVsc2UgewotICAgIGV2ZW50ID0KLSAgICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfVElNRSwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIG5hdnNlZWstPnNlZ21lbnRfc3RhcnQsIEdTVF9TRUVLX1RZUEVfU0VULAotICAgICAgICBuYXZzZWVrLT5zZWdtZW50X2VuZCk7Ci0gIH0KLQotICBwZWVyX3BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKEdTVF9CQVNFX1RSQU5TRk9STSAobmF2c2VlayktPnNpbmtwYWQpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBlZXJfcGFkLCBldmVudCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXJfcGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uYXZzZWVrX3RvZ2dsZV9wbGF5X3BhdXNlIChHc3ROYXZTZWVrICogbmF2c2VlaykKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3JldDsKLSAgR3N0U3RhdGUgY3VycmVudCwgcGVuZGluZywgc3RhdGU7Ci0KLSAgc3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKG5hdnNlZWspLCAmY3VycmVudCwgJnBlbmRpbmcsIDApOwotICBpZiAoc3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgcmV0dXJuOwotCi0gIHN0YXRlID0gKHBlbmRpbmcgIT0gR1NUX1NUQVRFX1ZPSURfUEVORElORykgPyBwZW5kaW5nIDogY3VycmVudDsKLQotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChuYXZzZWVrKSwKLSAgICAgIGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlIChHU1RfT0JKRUNUIChuYXZzZWVrKSwKLSAgICAgICAgICAoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpID8gR1NUX1NUQVRFX1BBVVNFRCA6IEdTVF9TVEFURV9QTEFZSU5HKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X25hdnNlZWtfc3JjX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdE5hdlNlZWsgKm5hdnNlZWs7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgbmF2c2VlayA9IEdTVF9OQVZTRUVLICh0cmFucyk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKLSAgICB7Ci0gICAgICAvKiBDaGVjayBmb3IgYSBrZXl1cCBhbmQgY29udmVydCBsZWZ0L3JpZ2h0IHRvIGEgc2VlayBldmVudCAqLwotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gICAgICBjb25zdCBnY2hhciAqZXZlbnRfdHlwZTsKLQotICAgICAgc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJ1Y3R1cmUgIT0gTlVMTCwgRkFMU0UpOwotCi0gICAgICBldmVudF90eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJldmVudCIpOwotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50X3R5cGUgIT0gTlVMTCwgRkFMU0UpOwotCi0gICAgICBpZiAoc3RyY21wIChldmVudF90eXBlLCAia2V5LXByZXNzIikgPT0gMCkgewotICAgICAgICBjb25zdCBnY2hhciAqa2V5OwotCi0gICAgICAgIGtleSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAia2V5Iik7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChrZXkgIT0gTlVMTCwgRkFMU0UpOwotCi0gICAgICAgIGlmIChzdHJjbXAgKGtleSwgIkxlZnQiKSA9PSAwKSB7Ci0gICAgICAgICAgLyogU2VlayBiYWNrd2FyZCBieSA1IHNlY3MgKi8KLSAgICAgICAgICBnc3RfbmF2c2Vla19zZWVrIChuYXZzZWVrLCAtMS4wICogbmF2c2Vlay0+c2Vla19vZmZzZXQgKiBHU1RfU0VDT05EKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgIlJpZ2h0IikgPT0gMCkgewotICAgICAgICAgIC8qIFNlZWsgZm9yd2FyZCAqLwotICAgICAgICAgIGdzdF9uYXZzZWVrX3NlZWsgKG5hdnNlZWssIG5hdnNlZWstPnNlZWtfb2Zmc2V0ICogR1NUX1NFQ09ORCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wIChrZXksICJzIikgPT0gMCkgewotICAgICAgICAgIC8qIEdyYWIgdGhlIG5leHQgZnJhbWUgYXMgdGhlIHN0YXJ0IGZyYW1lIG9mIGEgc2VnbWVudCAqLwotICAgICAgICAgIG5hdnNlZWstPmdyYWJfc2VnX3N0YXJ0ID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgImUiKSA9PSAwKSB7Ci0gICAgICAgICAgLyogR3JhYiB0aGUgbmV4dCBmcmFtZSBhcyB0aGUgZW5kIGZyYW1lIG9mIGEgc2VnbWVudCAqLwotICAgICAgICAgIG5hdnNlZWstPmdyYWJfc2VnX2VuZCA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wIChrZXksICJsIikgPT0gMCkgewotICAgICAgICAgIC8qIFRvZ2dsZSB0aGUgbG9vcCBmbGFnLiBJZiB3ZSBoYXZlIGJvdGggc3RhcnQgYW5kIGVuZCBzZWdtZW50IHRpbWVzIHNlbmQgYSBzZWVrICovCi0gICAgICAgICAgbmF2c2Vlay0+bG9vcCA9ICFuYXZzZWVrLT5sb29wOwotICAgICAgICAgIGdzdF9uYXZzZWVrX3NlZ3NlZWsgKG5hdnNlZWspOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoa2V5LCAiZiIpID09IDApIHsKLSAgICAgICAgICAvKiBmYXN0IGZvcndhcmQgKi8KLSAgICAgICAgICBnc3RfbmF2c2Vla19jaGFuZ2VfcGxheWJhY2tfcmF0ZSAobmF2c2VlaywgMi4wKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgInIiKSA9PSAwKSB7Ci0gICAgICAgICAgLyogcmV3aW5kICovCi0gICAgICAgICAgZ3N0X25hdnNlZWtfY2hhbmdlX3BsYXliYWNrX3JhdGUgKG5hdnNlZWssIC0yLjApOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoa2V5LCAibiIpID09IDApIHsKLSAgICAgICAgICAvKiBub3JtYWwgc3BlZWQgKi8KLSAgICAgICAgICBnc3RfbmF2c2Vla19jaGFuZ2VfcGxheWJhY2tfcmF0ZSAobmF2c2VlaywgMS4wKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgInNwYWNlIikgPT0gMCkgewotICAgICAgICAgIGdzdF9uYXZzZWVrX3RvZ2dsZV9wbGF5X3BhdXNlIChuYXZzZWVrKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGV2ZW50ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZXZlbnQpCi0gICAgcmV0ID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zcmNfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uYXZzZWVrX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3ROYXZTZWVrICpuYXZzZWVrID0gR1NUX05BVlNFRUsgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NFRUtPRkZTRVQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG5hdnNlZWspOwotICAgICAgbmF2c2Vlay0+c2Vla19vZmZzZXQgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChuYXZzZWVrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9uYXZzZWVrX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3ROYXZTZWVrICpuYXZzZWVrID0gR1NUX05BVlNFRUsgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NFRUtPRkZTRVQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG5hdnNlZWspOwotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgbmF2c2Vlay0+c2Vla19vZmZzZXQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG5hdnNlZWspOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9uYXZzZWVrX3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0TmF2U2VlayAqbmF2c2VlayA9IEdTVF9OQVZTRUVLICh0cmFucyk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChuYXZzZWVrKTsKLSAgICAgIGlmIChuYXZzZWVrLT5sb29wKQotICAgICAgICBnc3RfbmF2c2Vla19zZWdzZWVrIChuYXZzZWVrKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChuYXZzZWVrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50ICh0cmFucywgZXZlbnQpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X25hdnNlZWtfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZXRyYW5zLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE5hdlNlZWsgKm5hdnNlZWsgPSBHU1RfTkFWU0VFSyAoYmFzZXRyYW5zKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG5hdnNlZWspOwotCi0gIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAoYnVmKSkgewotICAgIGlmIChuYXZzZWVrLT5ncmFiX3NlZ19zdGFydCkgewotICAgICAgbmF2c2Vlay0+c2VnbWVudF9zdGFydCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotICAgICAgbmF2c2Vlay0+c2VnbWVudF9lbmQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgbmF2c2Vlay0+Z3JhYl9zZWdfc3RhcnQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAobmF2c2Vlay0+Z3JhYl9zZWdfZW5kKSB7Ci0gICAgICBuYXZzZWVrLT5zZWdtZW50X2VuZCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotICAgICAgbmF2c2Vlay0+Z3JhYl9zZWdfZW5kID0gRkFMU0U7Ci0gICAgICBnc3RfbmF2c2Vla19zZWdzZWVrIChuYXZzZWVrKTsKLSAgICB9Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAobmF2c2Vlayk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9uYXZzZWVrX3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIC8qIGFueXRoaW5nIHdlIHNob3VsZCBiZSBkb2luZyBoZXJlPyAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbmF2c2Vla19zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIC8qIGFueXRoaW5nIHdlIHNob3VsZCBiZSBkb2luZyBoZXJlPyAqLwotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL2dzdG5hdnNlZWsuaCBiL2dzdC9kZWJ1Z3V0aWxzL2dzdG5hdnNlZWsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5YzkyNC4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9nc3RuYXZzZWVrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX05BVlNFRUtfSF9fCi0jZGVmaW5lIF9fR1NUX05BVlNFRUtfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfTkFWU0VFSyBcCi0gIChnc3RfbmF2c2Vla19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTkFWU0VFSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX05BVlNFRUssR3N0TmF2U2VlaykpCi0jZGVmaW5lIEdTVF9OQVZTRUVLX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX05BVlNFRUssR3N0TmF2U2Vla0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX05BVlNFRUsob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9OQVZTRUVLKSkKLSNkZWZpbmUgR1NUX0lTX05BVlNFRUtfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfTkFWU0VFSykpCi10eXBlZGVmIHN0cnVjdCBfR3N0TmF2U2VlayBHc3ROYXZTZWVrOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE5hdlNlZWtDbGFzcyBHc3ROYXZTZWVrQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0TmF2U2VlawotewotICBHc3RCYXNlVHJhbnNmb3JtIGJhc2V0cmFuc2Zvcm07Ci0KLSAgZ2RvdWJsZSBzZWVrX29mZnNldDsKLSAgZ2Jvb2xlYW4gbG9vcDsKLSAgZ2Jvb2xlYW4gZ3JhYl9zZWdfc3RhcnQ7Ci0gIGdib29sZWFuIGdyYWJfc2VnX2VuZDsKLSAgR3N0Q2xvY2tUaW1lIHNlZ21lbnRfc3RhcnQ7Ci0gIEdzdENsb2NrVGltZSBzZWdtZW50X2VuZDsKLX07Ci0KLXN0cnVjdCBfR3N0TmF2U2Vla0NsYXNzCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX05BVlNFRUtfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5jIGIvZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYwYWNjYi4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9nc3RwdXNoZmlsZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIxICswLDAgQEAKLS8qIEdTdHJlYW1lciBQdXNoIEZpbGUgU291cmNlCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXB1c2hmaWxlc3JjCi0gKiBAc2VlX2Fsc286IGZpbGVzcmMKLSAqCi0gKiBUaGlzIGVsZW1lbnQgaXMgb25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSXQgaW1wbGVtZW50cyBhbiBVUkkKLSAqIHByb3RvY29sIGhhbmRsZXIgZm9yIHRoZSAncHVzaGZpbGUnIHByb3RvY29sIGFuZCBiZWhhdmVzIGxpa2UgYSBmaWxlIHNvdXJjZQotICogZWxlbWVudCB0aGF0IGNhbm5vdCBiZSBhY3RpdmF0ZWQgaW4gcHVsbC1tb2RlLiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0bwotICogZGVidWcgZGVtdXhlcnMgb3IgZGVjb2RlcnMgdGhhdCBjYW4gb3BlcmF0ZSBib3RoIHB1bGwgYW5kIHB1c2gtYmFzZWQgaW4KLSAqIGNvbm5lY3Rpb24gd2l0aCB0aGUgcGxheWJpbiBlbGVtZW50ICh3aGljaCBjcmVhdGVzIGEgc291cmNlIGJhc2VkIG9uIHRoZQotICogVVJJIHBhc3NlZCkuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC1tIHBsYXliaW4gdXJpPXB1c2hmaWxlOi8vL2hvbWUveW91L3NvbWUvZmlsZS5vZ2cKLSAqIF18IFRoaXMgcGxheXMgYmFjayB0aGUgZ2l2ZW4gZmlsZSB1c2luZyBwbGF5YmluLCB3aXRoIHRoZSBkZW11eGVyIG9wZXJhdGluZwotICogcHVzaC1iYXNlZC4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cHVzaGZpbGVzcmMuaCIKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocHVzaGZpbGVzcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgcHVzaGZpbGVzcmNfZGVidWcKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTE9DQVRJT04sCi0gIFBST1BfVElNRV9TRUdNRU5ULAotICBQUk9QX1NUUkVBTV9USU1FLAotICBQUk9QX1NUQVJUX1RJTUUsCi0gIFBST1BfSU5JVElBTF9USU1FU1RBTVAsCi0gIFBST1BfUkFURSwKLSAgUFJPUF9BUFBMSUVEX1JBVEUKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9USU1FX1NFR01FTlQgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9TVFJFQU1fVElNRSAwCi0jZGVmaW5lIERFRkFVTFRfU1RBUlRfVElNRSAwCi0jZGVmaW5lIERFRkFVTFRfSU5JVElBTF9USU1FU1RBTVAgR1NUX0NMT0NLX1RJTUVfTk9ORQotI2RlZmluZSBERUZBVUxUX1JBVEUgMS4wCi0jZGVmaW5lIERFRkFVTFRfQVBQTElFRF9SQVRFIDEuMAotCi1zdGF0aWMgdm9pZCBnc3RfcHVzaF9maWxlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcHVzaF9maWxlX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIHZvaWQgZ3N0X3B1c2hfZmlsZV9zcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLQotI2RlZmluZSBnc3RfcHVzaF9maWxlX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0UHVzaEZpbGVTcmMsIGdzdF9wdXNoX2ZpbGVfc3JjLCBHU1RfVFlQRV9CSU4sCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9VUklfSEFORExFUiwKLSAgICAgICAgZ3N0X3B1c2hfZmlsZV9zcmNfdXJpX2hhbmRsZXJfaW5pdCkpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3B1c2hfZmlsZV9zcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iaikKLXsKLSAgR3N0UHVzaEZpbGVTcmMgKnNyYyA9IEdTVF9QVVNIX0ZJTEVfU1JDIChvYmopOwotCi0gIGlmIChzcmMtPnNyY3BhZCkgewotICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UIChzcmMpLCBzcmMtPnNyY3BhZCk7Ci0gICAgc3JjLT5zcmNwYWQgPSBOVUxMOwotICB9Ci0gIGlmIChzcmMtPmZpbGVzcmMpIHsKLSAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoc3JjKSwgc3JjLT5maWxlc3JjKTsKLSAgICBzcmMtPmZpbGVzcmMgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVzaF9maWxlX3NyY19jbGFzc19pbml0IChHc3RQdXNoRmlsZVNyY0NsYXNzICogZ19jbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChnX2NsYXNzKTsKLSAgZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocHVzaGZpbGVzcmNfZGVidWcsICJwdXNoZmlsZXNyYyIsIDAsCi0gICAgICAicHVzaGZpbGVzcmMgZWxlbWVudCIpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfcHVzaF9maWxlX3NyY19kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcHVzaF9maWxlX3NyY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9wdXNoX2ZpbGVfc3JjX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xPQ0FUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImxvY2F0aW9uIiwgIkZpbGUgTG9jYXRpb24iLAotICAgICAgICAgICJMb2NhdGlvbiBvZiB0aGUgZmlsZSB0byByZWFkIiwgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1JFQURZKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USU1FX1NFR01FTlQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInRpbWUtc2VnbWVudCIsICJUaW1lIFNlZ21lbnQiLAotICAgICAgICAgICJFbWl0IFRJTUUgU0VHTUVOVFMiLCBERUZBVUxUX1RJTUVfU0VHTUVOVCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUUkVBTV9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgic3RyZWFtLXRpbWUiLCAiU3RyZWFtIFRpbWUiLAotICAgICAgICAgICJJbml0aWFsIFN0cmVhbSBUaW1lIChpZiB0aW1lLXNlZ21lbnQgVFJVRSkiLCAwLCBHX01BWElOVDY0LAotICAgICAgICAgIERFRkFVTFRfU1RSRUFNX1RJTUUsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVEFSVF9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgic3RhcnQtdGltZSIsICJTdGFydCBUaW1lIiwKLSAgICAgICAgICAiSW5pdGlhbCBTdGFydCBUaW1lIChpZiB0aW1lLXNlZ21lbnQgVFJVRSkiLCAwLCBHX01BWElOVDY0LAotICAgICAgICAgIERFRkFVTFRfU1RBUlRfVElNRSwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOSVRJQUxfVElNRVNUQU1QLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImluaXRpYWwtdGltZXN0YW1wIiwgIkluaXRpYWwgVGltZXN0YW1wIiwKLSAgICAgICAgICAiSW5pdGlhbCBCdWZmZXIgVGltZXN0YW1wIChpZiB0aW1lLXNlZ21lbnQgVFJVRSkiLCAwLCBHX01BWFVJTlQ2NCwKLSAgICAgICAgICBERUZBVUxUX0lOSVRJQUxfVElNRVNUQU1QLCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJyYXRlIiwgIlJhdGUiLCAiUmF0ZSB0byB1c2UgaW4gVElNRSBTRUdNRU5UIiwKLSAgICAgICAgICBHX01JTkRPVUJMRSwgR19NQVhET1VCTEUsIERFRkFVTFRfUkFURSwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FQUExJRURfUkFURSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJhcHBsaWVkLXJhdGUiLCAiQXBwbGllZCBSYXRlIiwKLSAgICAgICAgICAiQXBwbGllZCByYXRlIHRvIHVzZSBpbiBUSU1FIFNFR01FTlQiLCBHX01JTkRPVUJMRSwgR19NQVhET1VCTEUsCi0gICAgICAgICAgREVGQVVMVF9BUFBMSUVEX1JBVEUsIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlB1c2ggRmlsZSBTb3VyY2UiLAotICAgICAgIlRlc3RpbmciLAotICAgICAgIkltcGxlbWVudHMgcHVzaGZpbGU6Ly8gVVJJLWhhbmRsZXIgZm9yIHB1c2gtYmFzZWQgZmlsZSBhY2Nlc3MiLAotICAgICAgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVzaF9maWxlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UHVzaEZpbGVTcmMgKnNyYyA9IChHc3RQdXNoRmlsZVNyYyAqKSBvYmplY3Q7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAoc3JjLT5maWxlc3JjKSwgImxvY2F0aW9uIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RJTUVfU0VHTUVOVDoKLSAgICAgIHNyYy0+dGltZV9zZWdtZW50ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUkVBTV9USU1FOgotICAgICAgc3JjLT5zdHJlYW1fdGltZSA9IGdfdmFsdWVfZ2V0X2ludDY0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RBUlRfVElNRToKLSAgICAgIHNyYy0+c3RhcnRfdGltZSA9IGdfdmFsdWVfZ2V0X2ludDY0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5JVElBTF9USU1FU1RBTVA6Ci0gICAgICBzcmMtPmluaXRpYWxfdGltZXN0YW1wID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkFURToKLSAgICAgIHNyYy0+cmF0ZSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FQUExJRURfUkFURToKLSAgICAgIHNyYy0+YXBwbGllZF9yYXRlID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVzaF9maWxlX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UHVzaEZpbGVTcmMgKnNyYyA9IChHc3RQdXNoRmlsZVNyYyAqKSBvYmplY3Q7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAoc3JjLT5maWxlc3JjKSwgImxvY2F0aW9uIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RJTUVfU0VHTUVOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnRpbWVfc2VnbWVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSRUFNX1RJTUU6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQ2NCAodmFsdWUsIHNyYy0+c3RyZWFtX3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUQVJUX1RJTUU6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQ2NCAodmFsdWUsIHNyYy0+c3RhcnRfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5JVElBTF9USU1FU1RBTVA6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzcmMtPmluaXRpYWxfdGltZXN0YW1wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SQVRFOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgc3JjLT5yYXRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BUFBMSUVEX1JBVEU6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBzcmMtPmFwcGxpZWRfcmF0ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZ3N0X3B1c2hfZmlsZV9zcmNfZ2hvc3RwYWRfYnVmZmVyX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sCi0gICAgR3N0UHVzaEZpbGVTcmMgKiBzcmMpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUiAoaW5mbyk7Ci0KLSAgaWYgKHNyYy0+dGltZV9zZWdtZW50ICYmICFzcmMtPnNlZW5fZmlyc3RfYnVmZmVyKSB7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSBzcmMtPmluaXRpYWxfdGltZXN0YW1wOwotICAgIHNyYy0+c2Vlbl9maXJzdF9idWZmZXIgPSBUUlVFOwotICB9Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWdzdF9wdXNoX2ZpbGVfc3JjX2dob3N0cGFkX2V2ZW50X3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sCi0gICAgR3N0UHVzaEZpbGVTcmMgKiBzcmMpCi17Ci0gIEdzdEV2ZW50ICpldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVCAoaW5mbyk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBpZiAoc3JjLT50aW1lX3NlZ21lbnQpIHsKLSAgICAgICAgR3N0U2VnbWVudCBzZWdtZW50OwotICAgICAgICBHc3RFdmVudCAqcmVwbGFjZW1lbnQ7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlJlcGxhY2luZyBvdXRnb2luZyBzZWdtZW50IHdpdGggVElNRSBTRUdNRU5UIik7Ci0gICAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgICAgICBzZWdtZW50LnN0YXJ0ID0gc3JjLT5zdGFydF90aW1lOwotICAgICAgICBzZWdtZW50LnRpbWUgPSBzcmMtPnN0cmVhbV90aW1lOwotICAgICAgICBzZWdtZW50LnJhdGUgPSBzcmMtPnJhdGU7Ci0gICAgICAgIHNlZ21lbnQuYXBwbGllZF9yYXRlID0gc3JjLT5hcHBsaWVkX3JhdGU7Ci0gICAgICAgIHJlcGxhY2VtZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBHU1RfUEFEX1BST0JFX0lORk9fREFUQSAoaW5mbykgPSByZXBsYWNlbWVudDsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wdXNoX2ZpbGVfc3JjX2dob3N0cGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RQdXNoRmlsZVNyYyAqc3JjID0gKEdzdFB1c2hGaWxlU3JjICopIHBhcmVudDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgICBpZiAoc3JjLT50aW1lX3NlZ21lbnQpIHsKLSAgICAgICAgLyogV2hlbiB3b3JraW5nIGluIHRpbWUgd2UgZG9uJ3QgYWxsb3cgc2Vla3MgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUmVmdXNpbmcgc2VlayBldmVudCBpbiBUSU1FIG1vZGUiKTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8qIFBBU1NUSFJPVUdIICovCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVzaF9maWxlX3NyY19naG9zdHBhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0UHVzaEZpbGVTcmMgKnNyYyA9IChHc3RQdXNoRmlsZVNyYyAqKSBwYXJlbnQ7Ci0gIGdib29sZWFuIHJlczsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9TQ0hFRFVMSU5HOgotICAgICAgLyogV2hlbiB3b3JraW5nIGluIHRpbWUgd2UgZG9uJ3QgYWxsb3cgc2Vla3MgKi8KLSAgICAgIGlmIChzcmMtPnRpbWVfc2VnbWVudCkKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zY2hlZHVsaW5nIChxdWVyeSwgR1NUX1NDSEVEVUxJTkdfRkxBR19TRVFVRU5USUFMLCAxLCAtMSwKLSAgICAgICAgICAgIDApOwotICAgICAgZWxzZQotICAgICAgICBnc3RfcXVlcnlfc2V0X3NjaGVkdWxpbmcgKHF1ZXJ5LCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFLCAxLCAtMSwKLSAgICAgICAgICAgIDApOwotICAgICAgZ3N0X3F1ZXJ5X2FkZF9zY2hlZHVsaW5nX21vZGUgKHF1ZXJ5LCBHU1RfUEFEX01PREVfUFVTSCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVzaF9maWxlX3NyY19pbml0IChHc3RQdXNoRmlsZVNyYyAqIHNyYykKLXsKLSAgc3JjLT50aW1lX3NlZ21lbnQgPSBERUZBVUxUX1RJTUVfU0VHTUVOVDsKLSAgc3JjLT5zdHJlYW1fdGltZSA9IERFRkFVTFRfU1RSRUFNX1RJTUU7Ci0gIHNyYy0+c3RhcnRfdGltZSA9IERFRkFVTFRfU1RBUlRfVElNRTsKLSAgc3JjLT5pbml0aWFsX3RpbWVzdGFtcCA9IERFRkFVTFRfSU5JVElBTF9USU1FU1RBTVA7Ci0gIHNyYy0+cmF0ZSA9IERFRkFVTFRfUkFURTsKLSAgc3JjLT5hcHBsaWVkX3JhdGUgPSBERUZBVUxUX0FQUExJRURfUkFURTsKLSAgc3JjLT5zZWVuX2ZpcnN0X2J1ZmZlciA9IEZBTFNFOwotCi0gIHNyYy0+ZmlsZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAicmVhbC1maWxlc3JjIik7Ci0gIGlmIChzcmMtPmZpbGVzcmMpIHsKLSAgICBHc3RQYWQgKnBhZDsKLQotICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChzcmMpLCBzcmMtPmZpbGVzcmMpOwotICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMtPmZpbGVzcmMsICJzcmMiKTsKLSAgICBnX2Fzc2VydCAocGFkICE9IE5VTEwpOwotICAgIHNyYy0+c3JjcGFkID0gZ3N0X2dob3N0X3BhZF9uZXcgKCJzcmMiLCBwYWQpOwotICAgIC8qIEZJWE1FXkheSENPUkU6IHRyeSBwdXNoZmlsZTovLy9mb28vYmFyLmV4dCAhIHR5cGVmaW5kICEgZmFrZXNpbmsgd2l0aG91dAotICAgICAqIHRoaXMgYW5kIHdhdGNoIGNvcmUgYnVnZ2luZXNzIChzb21lIHBhZCBzdGF5cyBpbiBmbHVzaGluZyBzdGF0ZSkgKi8KLSAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc3JjLT5zcmNwYWQsCi0gICAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHVzaF9maWxlX3NyY19naG9zdHBhZF9xdWVyeSkpOwotICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzcmMtPnNyY3BhZCwKLSAgICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wdXNoX2ZpbGVfc3JjX2dob3N0cGFkX2V2ZW50KSk7Ci0gICAgLyogQWRkIG91dGdvaW5nIGV2ZW50IHByb2JlIHRvIHJlcGxhY2Ugc2VnbWVudCBhbmQgYnVmZmVyIHRpbWVzdGFtcCAqLwotICAgIGdzdF9wYWRfYWRkX3Byb2JlIChzcmMtPnNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCi0gICAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBnc3RfcHVzaF9maWxlX3NyY19naG9zdHBhZF9ldmVudF9wcm9iZSwKLSAgICAgICAgc3JjLCBOVUxMKTsKLSAgICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjLT5zcmNwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBnc3RfcHVzaF9maWxlX3NyY19naG9zdHBhZF9idWZmZXJfcHJvYmUsCi0gICAgICAgIHNyYywgTlVMTCk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNyYyksIHNyYy0+c3JjcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci19Ci0KLS8qKiogR1NUVVJJSEFORExFUiBJTlRFUkZBQ0UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIEdzdFVSSVR5cGUKLWdzdF9wdXNoX2ZpbGVfc3JjX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfU1JDOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF9wdXNoX2ZpbGVfc3JjX3VyaV9nZXRfcHJvdG9jb2xzIChHVHlwZSB0eXBlKQotewotICBzdGF0aWMgY29uc3QgZ2NoYXIgKnByb3RvY29sc1tdID0geyAicHVzaGZpbGUiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9wdXNoX2ZpbGVfc3JjX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKLXsKLSAgR3N0UHVzaEZpbGVTcmMgKnNyYyA9IEdTVF9QVVNIX0ZJTEVfU1JDIChoYW5kbGVyKTsKLSAgZ2NoYXIgKmZpbGV1cmksICpwdXNoZmlsZXVyaTsKLQotICBpZiAoc3JjLT5maWxlc3JjID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZmlsZXVyaSA9IGdzdF91cmlfaGFuZGxlcl9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYy0+ZmlsZXNyYykpOwotICBpZiAoZmlsZXVyaSA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotICBwdXNoZmlsZXVyaSA9IGdfc3RyY29uY2F0ICgicHVzaCIsIGZpbGV1cmksIE5VTEwpOwotICBnX2ZyZWUgKGZpbGV1cmkpOwotCi0gIHJldHVybiBwdXNoZmlsZXVyaTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHVzaF9maWxlX3NyY191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpLAotICAgIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgR3N0UHVzaEZpbGVTcmMgKnNyYyA9IEdTVF9QVVNIX0ZJTEVfU1JDIChoYW5kbGVyKTsKLQotICBpZiAoc3JjLT5maWxlc3JjID09IE5VTEwpIHsKLSAgICBnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfU1RBVEUsCi0gICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGZpbGUgc291cmNlIGVsZW1lbnQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBza2lwICdwdXNoJyBiaXQgKi8KLSAgcmV0dXJuIGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYy0+ZmlsZXNyYyksIHVyaSArIDQsCi0gICAgICBlcnJvcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHVzaF9maWxlX3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X3B1c2hfZmlsZV9zcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9wdXNoX2ZpbGVfc3JjX3VyaV9nZXRfcHJvdG9jb2xzOwotICBpZmFjZS0+Z2V0X3VyaSA9IGdzdF9wdXNoX2ZpbGVfc3JjX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9wdXNoX2ZpbGVfc3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuaCBiL2dzdC9kZWJ1Z3V0aWxzL2dzdHB1c2hmaWxlc3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MmFlMTMuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvZ3N0cHVzaGZpbGVzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qIEdTdHJlYW1lciBQdXNoIEZpbGUgU291cmNlCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUFVTSF9GSUxFX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfUFVTSF9GSUxFX1NSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3RiaW4uaD4KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9QVVNIX0ZJTEVfU1JDIFwKLSAgKGdzdF9wdXNoX2ZpbGVfc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9QVVNIX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUFVTSF9GSUxFX1NSQyxHc3RQdXNoRmlsZVNyYykpCi0jZGVmaW5lIEdTVF9QVVNIX0ZJTEVfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1BVU0hfRklMRV9TUkMsR3N0UHVzaEZpbGVTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19QVVNIX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUFVTSF9GSUxFX1NSQykpCi0jZGVmaW5lIEdTVF9JU19QVVNIX0ZJTEVfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1BVU0hfRklMRV9TUkMpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1c2hGaWxlU3JjIEdzdFB1c2hGaWxlU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFB1c2hGaWxlU3JjQ2xhc3MgR3N0UHVzaEZpbGVTcmNDbGFzczsKLQotc3RydWN0IF9Hc3RQdXNoRmlsZVNyYwotewotICBHc3RCaW4gcGFyZW50OwotCi0gIC8qPCBwcml2YXRlID4gKi8KLSAgR3N0RWxlbWVudCAqZmlsZXNyYzsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0KLSAgZ2Jvb2xlYW4gdGltZV9zZWdtZW50OwotICBnYm9vbGVhbiBzZWVuX2ZpcnN0X2J1ZmZlcjsKLSAgZ2ludDY0IHN0cmVhbV90aW1lOwotICBnaW50NjQgc3RhcnRfdGltZTsKLSAgZ3VpbnQ2NCBpbml0aWFsX3RpbWVzdGFtcDsKLSAgZ2RvdWJsZSByYXRlOwotICBnZG91YmxlIGFwcGxpZWRfcmF0ZTsKLX07Ci0KLXN0cnVjdCBfR3N0UHVzaEZpbGVTcmNDbGFzcwotewotICBHc3RCaW5DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcHVzaF9maWxlX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUFVTSF9GSUxFX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5jIGIvZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZGI3OTcuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvZ3N0dGFnaW5qZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRhZ2luamVjdC5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC10YWdpbmplY3QKLSAqCi0gKiBFbGVtZW50IHRoYXQgaW5qZWN0cyBuZXcgbWV0YWRhdGEgdGFncywgYnV0IHBhc3NlcyBpbmNvbW1pbmcgZGF0YSB0aHJvdWdoCi0gKiB1bm1vZGlmaWVkLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMCAhIHRhZ2luamVjdCB0YWdzPSJ0aXRsZT10ZXN0c3JjLGFydGlzdD1nc3RyZWFtZXIiICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249dGVzdC5vZ2cKLSAqIF18IHNldCB0aXRsZSBhbmQgYXJ0aXN0Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMCAhIHRhZ2luamVjdCB0YWdzPSJrZXl3b3Jkcz1ce1widGVzdG9uZVwiLFwiYXVkaW9cIlx9LHRpdGxlPVwiYXVkaW9cIHRlc3R0b25lXCIiICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249dGVzdC5vZ2cKLSAqIF18IHNldCBrZXl3b3JkcyBhbmQgdGl0bGUgZGVtb25zdHJhdGluZyBxdW90aW5nIG9mIHNwZWNpYWwgY2hhcnMgYW5kIGhhbmRsaW5nIGxpc3RzCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJnc3R0YWdpbmplY3QuaCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF90YWdfaW5qZWN0X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF90YWdfaW5qZWN0X2RlYnVnCi0KLWVudW0KLXsKLSAgUFJPUF9UQUdTID0gMQotfTsKLQotCi0jZGVmaW5lIGdzdF90YWdfaW5qZWN0X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFRhZ0luamVjdCwgZ3N0X3RhZ19pbmplY3QsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKLQotc3RhdGljIHZvaWQgZ3N0X3RhZ19pbmplY3RfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3RhZ19pbmplY3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3RhZ19pbmplY3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdGFnX2luamVjdF90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF90YWdfaW5qZWN0X3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotCi0KLXN0YXRpYyB2b2lkCi1nc3RfdGFnX2luamVjdF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VGFnSW5qZWN0ICpzZWxmID0gR1NUX1RBR19JTkpFQ1QgKG9iamVjdCk7Ci0KLSAgaWYgKHNlbGYtPnRhZ3MpIHsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHNlbGYtPnRhZ3MpOwotICAgIHNlbGYtPnRhZ3MgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RhZ19pbmplY3RfY2xhc3NfaW5pdCAoR3N0VGFnSW5qZWN0Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqZ3N0YmFzZXRyYW5zX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0YmFzZXRyYW5zX2NsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF90YWdfaW5qZWN0X2RlYnVnLCAidGFnaW5qZWN0IiwgMCwKLSAgICAgICJ0YWcgaW5qZWN0IGVsZW1lbnQiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdGFnX2luamVjdF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF90YWdfaW5qZWN0X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RBR1MsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgidGFncyIsICJ0YWdsaXN0IiwKLSAgICAgICAgICAiTGlzdCBvZiB0YWdzIHRvIGluamVjdCBpbnRvIHRoZSB0YXJnZXQgZmlsZSIsCi0gICAgICAgICAgTlVMTCwgR19QQVJBTV9XUklUQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF90YWdfaW5qZWN0X2ZpbmFsaXplOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiVGFnSW5qZWN0IiwKLSAgICAgICJHZW5lcmljIiwgImluamVjdCBtZXRhZGF0YSB0YWdzIiwgIlN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmN0ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua3RlbXBsYXRlKTsKLQotICBnc3RiYXNldHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3RhZ19pbmplY3RfdHJhbnNmb3JtX2lwKTsKLQotICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90YWdfaW5qZWN0X3N0YXJ0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90YWdfaW5qZWN0X2luaXQgKEdzdFRhZ0luamVjdCAqIHNlbGYpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNIChzZWxmKTsKLQotICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X2dhcF9hd2FyZSAodHJhbnMsIFRSVUUpOwotCi0gIHNlbGYtPnRhZ3MgPSBOVUxMOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3RhZ19pbmplY3RfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0VGFnSW5qZWN0ICpzZWxmID0gR1NUX1RBR19JTkpFQ1QgKHRyYW5zKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIXNlbGYtPnRhZ3Nfc2VudCkpIHsKLSAgICBzZWxmLT50YWdzX3NlbnQgPSBUUlVFOwotICAgIC8qIHNlbmQgdGFncyAqLwotICAgIGlmIChzZWxmLT50YWdzICYmICFnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKHNlbGYtPnRhZ3MpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJ0YWcgZXZlbnQgOiUiIEdTVF9QVFJfRk9STUFULCBzZWxmLT50YWdzKTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQgKHRyYW5zKSwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X3JlZiAoc2VsZi0+dGFncykpKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdGFnX2luamVjdF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VGFnSW5qZWN0ICpzZWxmID0gR1NUX1RBR19JTkpFQ1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1RBR1M6ewotICAgICAgZ2NoYXIgKnN0cnVjdHVyZSA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgidGFnbGlzdCwlcyIsIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGlmICghKHNlbGYtPnRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nIChzdHJ1Y3R1cmUpKSkgewotICAgICAgICBHU1RfV0FSTklORyAoInVucGFyc2FibGUgdGFnbGlzdCA9ICclcyciLCBzdHJ1Y3R1cmUpOwotICAgICAgfQotCi0gICAgICAvKiBtYWtlIHN1cmUgdGhhdCB0YWdzIHdpbGwgYmUgc2VuZCAqLwotICAgICAgc2VsZi0+dGFnc19zZW50ID0gRkFMU0U7Ci0gICAgICBnX2ZyZWUgKHN0cnVjdHVyZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3RhZ19pbmplY3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIC8qR3N0VGFnSW5qZWN0ICpzZWxmID0gR1NUX1RBR19JTkpFQ1QgKG9iamVjdCk7ICovCi0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90YWdfaW5qZWN0X3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdFRhZ0luamVjdCAqc2VsZiA9IEdTVF9UQUdfSU5KRUNUICh0cmFucyk7Ci0KLSAgLyogd2UgbmVlZCB0byBzZW50IHRhZ3MgX3RyYW5zZm9ybV9pcCgpIG9uY2UgKi8KLSAgc2VsZi0+dGFnc19zZW50ID0gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy9nc3R0YWdpbmplY3QuaCBiL2dzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTQ1OTI3Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWJ1Z3V0aWxzL2dzdHRhZ2luamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIGdzdHRhZ2luamVjdC5oOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9UQUdfSU5KRUNUX0hfXwotI2RlZmluZSBfX0dTVF9UQUdfSU5KRUNUX0hfXwotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1RBR19JTkpFQ1QgXAotICAoZ3N0X3RhZ19pbmplY3RfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1RBR19JTkpFQ1Qob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9UQUdfSU5KRUNULEdzdFRhZ0luamVjdCkpCi0jZGVmaW5lIEdTVF9UQUdfSU5KRUNUX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1RBR19JTkpFQ1QsR3N0VGFnSW5qZWN0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVEFHX0lOSkVDVChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1RBR19JTkpFQ1QpKQotI2RlZmluZSBHU1RfSVNfVEFHX0lOSkVDVF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9UQUdfSU5KRUNUKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RUYWdJbmplY3QgR3N0VGFnSW5qZWN0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhZ0luamVjdENsYXNzIEdzdFRhZ0luamVjdENsYXNzOwotCi0vKioKLSAqIEdzdFRhZ0luamVjdDoKLSAqCi0gKiBPcGFxdWUgI0dzdFRhZ0luamVjdCBkYXRhIHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgX0dzdFRhZ0luamVjdAotewotICBHc3RCYXNlVHJhbnNmb3JtIGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiAqLwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBnYm9vbGVhbiB0YWdzX3NlbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFRhZ0luamVjdENsYXNzCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfdGFnX2luamVjdF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfVEFHX0lOSkVDVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmMgYi9nc3QvZGVidWd1dGlscy9wcm9ncmVzc3JlcG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDZiZjBmLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBAQAotLyogR1N0cmVhbWVyIFByb2dyZXNzIFJlcG9ydCBFbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA0PiBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcHJvZ3Jlc3NyZXBvcnQKLSAqCi0gKiBUaGUgcHJvZ3Jlc3NyZXBvcnQgZWxlbWVudCBjYW4gYmUgcHV0IGludG8gYSBwaXBlbGluZSB0byByZXBvcnQgcHJvZ3Jlc3MsCi0gKiB3aGljaCBpcyBkb25lIGJ5IGRvaW5nIHVwc3RyZWFtIGR1cmF0aW9uIGFuZCBwb3NpdGlvbiBxdWVyaWVzIGluIHJlZ3VsYXIKLSAqIChyZWFsLXRpbWUpIGludGVydmFscy4gQm90aCB0aGUgaW50ZXJ2YWwgYW5kIHRoZSBwcmVmZXJlZCBxdWVyeSBmb3JtYXQKLSAqIGNhbiBiZSBzcGVjaWZpZWQgdmlhIHRoZSAjR3N0UHJvZ3Jlc3NSZXBvcnQ6dXBkYXRlLWZyZXEgYW5kIHRoZQotICogI0dzdFByb2dyZXNzUmVwb3J0OmZvcm1hdCBwcm9wZXJ0eS4KLSAqCi0gKiBFbGVtZW50IG1lc3NhZ2VzIGNvbnRhaW5pbmcgYSAicHJvZ3Jlc3MiIHN0cnVjdHVyZSBhcmUgcG9zdGVkIG9uIHRoZSBidXMKLSAqIHdoZW5ldmVyIHByb2dyZXNzIGhhcyBiZWVuIHF1ZXJpZWQgKHNpbmNlIGdzdC1wbHVnaW5zLWdvb2QgMC4xMC42IG9ubHkpLgotICoKLSAqIFNpbmNlIHRoZSBlbGVtZW50IHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGl0IHdpbGwKLSAqIGJ5IGRlZmF1bHQgYWxzbyBwcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBwcm9ncmVzcyB0byB0aGUKLSAqIHRlcm1pbmFsLiBUaGlzIGNhbiBiZSBwcmV2ZW50ZWQgYnkgc2V0dGluZyB0aGUgI0dzdFByb2dyZXNzUmVwb3J0OnNpbGVudAotICogcHJvcGVydHkgdG8gJVRSVUUuCi0gKgotICogVGhpcyBlbGVtZW50IGlzIG1vc3QgdXNlZnVsIGluIHRyYW5zY29kaW5nIHBpcGVsaW5lcyBvciBvdGhlciBzaXR1YXRpb25zCi0gKiB3aGVyZSBqdXN0IHF1ZXJ5aW5nIHRoZSBwaXBlbGluZSBtaWdodCBub3QgbGVhZCB0byB0aGUgd2FudGVkIHJlc3VsdC4gRm9yCi0gKiBwcm9ncmVzcyBpbiBUSU1FIGZvcm1hdCwgdGhlIGVsZW1lbnQgaXMgYmVzdCBwbGFjZWQgaW4gYSAncmF3IHN0cmVhbScKLSAqIHNlY3Rpb24gb2YgdGhlIHBpcGVsaW5lIChvciBhZnRlciBhbnkgZGVtdXhlcnMvZGVjb2RlcnMvcGFyc2VycykuCi0gKgotICogVGhyZWUgbW9yZSB0aGluZ3Mgc2hvdWxkIGJlIHBvaW50ZWQgb3V0OiBmaXJzdGx5LCB0aGUgZWxlbWVudCB3aWxsIG9ubHkKLSAqIHF1ZXJ5IHByb2dyZXNzIHdoZW4gZGF0YSBmbG93IGhhcHBlbnMuIElmIGRhdGEgZmxvdyBpcyBzdGFsbGVkIGZvciBzb21lCi0gKiByZWFzb24sIG5vIHByb2dyZXNzIG1lc3NhZ2VzIHdpbGwgYmUgcG9zdGVkLiBTZWNvbmRseSwgdGhlcmUgYXJlIG90aGVyCi0gKiBlbGVtZW50cyAobGlrZSBxdGRlbXV4LCBmb3IgZXhhbXBsZSkgdGhhdCBtYXkgYWxzbyBwb3N0ICJwcm9ncmVzcyIgZWxlbWVudAotICogbWVzc2FnZXMgb24gdGhlIGJ1cy4gQXBwbGljYXRpb25zIHNob3VsZCBjaGVjayB0aGUgc291cmNlIG9mIGFueSBlbGVtZW50Ci0gKiBtZXNzYWdlcyB0aGV5IHJlY2VpdmUsIGlmIG5lZWRlZC4gRmluYWxseSwgYXBwbGljYXRpb25zIHNob3VsZCBub3QgdGFrZQotICogYWN0aW9uIG9uIHJlY2VpdmluZyBub3RpZmljYXRpb24gb2YgcHJvZ3Jlc3MgYmVpbmcgMTAwJSwgdGhleSBzaG91bGQgb25seQotICogdGFrZSBhY3Rpb24gd2hlbiB0aGV5IHJlY2VpdmUgYW4gRU9TIG1lc3NhZ2UgKHNpbmNlIHRoZSBwcm9ncmVzcyByZXBvcnRlZAotICogaXMgaW4gcmVmZXJlbmNlIHRvIGFuIGludGVybmFsIHBvaW50IG9mIGEgcGlwZWxpbmUgYW5kIG5vdCB0aGUgcGlwZWxpbmUgYXMKLSAqIGEgd2hvbGUpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtbSBmaWxlc3JjIGxvY2F0aW9uPWZvby5vZ2cgISBkZWNvZGViaW4gISBwcm9ncmVzc3JlcG9ydCB1cGRhdGUtZnJlcT0xICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsKLSAqIF18IFRoaXMgc2hvd3MgYSBwcm9ncmVzcyBxdWVyeSB3aGVyZSBhIGR1cmF0aW9uIGlzIGF2YWlsYWJsZS4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtbSBhdWRpb3Rlc3RzcmMgISBwcm9ncmVzc3JlcG9ydCB1cGRhdGUtZnJlcT0xICEgYXVkaW9jb252ZXJ0ICEgYXV0b2F1ZGlvc2luawotICogXXwgVGhpcyBzaG93cyBhIHByb2dyZXNzIHF1ZXJ5IHdoZXJlIG5vIGR1cmF0aW9uIGlzIGF2YWlsYWJsZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLSNpbmNsdWRlICJwcm9ncmVzc3JlcG9ydC5oIgotCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1VQREFURV9GUkVRLAotICBQUk9QX1NJTEVOVCwKLSAgUFJPUF9ET19RVUVSWSwKLSAgUFJPUF9GT1JNQVQKLX07Ci0KLUdzdFN0YXRpY1BhZFRlbXBsYXRlIHByb2dyZXNzX3JlcG9ydF9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBwcm9ncmVzc19yZXBvcnRfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotI2RlZmluZSBERUZBVUxUX1VQREFURV9GUkVRICA1Ci0jZGVmaW5lIERFRkFVTFRfU0lMRU5UICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfRE9fUVVFUlkgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9GT1JNQVQgICAgICAgImF1dG8iCi0KLXN0YXRpYyB2b2lkIGdzdF9wcm9ncmVzc19yZXBvcnRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3Byb2dyZXNzX3JlcG9ydF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcHJvZ3Jlc3NfcmVwb3J0X3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9wcm9ncmVzc19yZXBvcnRfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9wcm9ncmVzc19yZXBvcnRfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3Byb2dyZXNzX3JlcG9ydF9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpOwotCi0jZGVmaW5lIGdzdF9wcm9ncmVzc19yZXBvcnRfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UHJvZ3Jlc3NSZXBvcnQsIGdzdF9wcm9ncmVzc19yZXBvcnQsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKLQotc3RhdGljIHZvaWQKLWdzdF9wcm9ncmVzc19yZXBvcnRfZmluYWxpemUgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFByb2dyZXNzUmVwb3J0ICpmaWx0ZXIgPSBHU1RfUFJPR1JFU1NfUkVQT1JUIChvYmopOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5mb3JtYXQpOwotICBmaWx0ZXItPmZvcm1hdCA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Byb2dyZXNzX3JlcG9ydF9jbGFzc19pbml0IChHc3RQcm9ncmVzc1JlcG9ydENsYXNzICogZ19jbGFzcykKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICpnc3RiYXNldHJhbnNfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoZ19jbGFzcyk7Ci0gIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoZ19jbGFzcyk7Ci0gIGdzdGJhc2V0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoZ19jbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcHJvZ3Jlc3NfcmVwb3J0X2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcHJvZ3Jlc3NfcmVwb3J0X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3Byb2dyZXNzX3JlcG9ydF9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfVVBEQVRFX0ZSRVEsIGdfcGFyYW1fc3BlY19pbnQgKCJ1cGRhdGUtZnJlcSIsICJVcGRhdGUgRnJlcXVlbmN5IiwKLSAgICAgICAgICAiTnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiByZXBvcnRzIHdoZW4gZGF0YSBpcyBmbG93aW5nIiwgMSwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9VUERBVEVfRlJFUSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfU0lMRU5ULCBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNpbGVudCIsCi0gICAgICAgICAgIkRvIG5vdCBwcmludCBvdXRwdXQgdG8gc3Rkb3V0IiwgIkRvIG5vdCBwcmludCBvdXRwdXQgdG8gc3Rkb3V0IiwKLSAgICAgICAgICBERUZBVUxUX1NJTEVOVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfRE9fUVVFUlksIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZG8tcXVlcnkiLAotICAgICAgICAgICJVc2UgYSBxdWVyeSBpbnN0ZWFkIG9mIGJ1ZmZlciBtZXRhZGF0YSB0byBkZXRlcm1pbmUgc3RyZWFtIHBvc2l0aW9uIiwKLSAgICAgICAgICAiVXNlIGEgcXVlcnkgaW5zdGVhZCBvZiBidWZmZXIgbWV0YWRhdGEgdG8gZGV0ZXJtaW5lIHN0cmVhbSBwb3NpdGlvbiIsCi0gICAgICAgICAgREVGQVVMVF9ET19RVUVSWSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfRk9STUFULCBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZm9ybWF0IiwgImZvcm1hdCIsCi0gICAgICAgICAgIkZvcm1hdCB0byB1c2UgZm9yIHRoZSBxdWVyeWluZyIsIERFRkFVTFRfRk9STUFULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJnByb2dyZXNzX3JlcG9ydF9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmcHJvZ3Jlc3NfcmVwb3J0X3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlByb2dyZXNzIHJlcG9ydCIsCi0gICAgICAiVGVzdGluZyIsCi0gICAgICAiUGVyaW9kaWNhbGx5IHF1ZXJ5IGFuZCByZXBvcnQgb24gcHJvY2Vzc2luZyBwcm9ncmVzcyIsCi0gICAgICAiSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Iik7Ci0KLSAgZ3N0YmFzZXRyYW5zX2NsYXNzLT5zaW5rX2V2ZW50ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcHJvZ3Jlc3NfcmVwb3J0X3NpbmtfZXZlbnQpOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Byb2dyZXNzX3JlcG9ydF90cmFuc2Zvcm1faXApOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9wcm9ncmVzc19yZXBvcnRfc3RhcnQpOwotICBnc3RiYXNldHJhbnNfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Byb2dyZXNzX3JlcG9ydF9zdG9wKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm9ncmVzc19yZXBvcnRfaW5pdCAoR3N0UHJvZ3Jlc3NSZXBvcnQgKiByZXBvcnQpCi17Ci0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKEdTVF9CQVNFX1RSQU5TRk9STSAocmVwb3J0KSwgVFJVRSk7Ci0KLSAgcmVwb3J0LT51cGRhdGVfZnJlcSA9IERFRkFVTFRfVVBEQVRFX0ZSRVE7Ci0gIHJlcG9ydC0+c2lsZW50ID0gREVGQVVMVF9TSUxFTlQ7Ci0gIHJlcG9ydC0+ZG9fcXVlcnkgPSBERUZBVUxUX0RPX1FVRVJZOwotICByZXBvcnQtPmZvcm1hdCA9IGdfc3RyZHVwIChERUZBVUxUX0ZPUk1BVCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcHJvZ3Jlc3NfcmVwb3J0X3Bvc3RfcHJvZ3Jlc3MgKEdzdFByb2dyZXNzUmVwb3J0ICogZmlsdGVyLAotICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCBjdXJyZW50LCBnaW50NjQgdG90YWwpCi17Ci0gIEdzdFN0cnVjdHVyZSAqcyA9IE5VTEw7Ci0KLSAgaWYgKGN1cnJlbnQgPj0gMCAmJiB0b3RhbCA+IDApIHsKLSAgICBnZG91YmxlIHBlcmM7Ci0KLSAgICBwZXJjID0gZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlIChjdXJyZW50KSAqIDEwMC4wIC8KLSAgICAgICAgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlICh0b3RhbCk7Ci0gICAgcGVyYyA9IENMQU1QIChwZXJjLCAwLjAsIDEwMC4wKTsKLQotICAgIC8qIHdlIHByb3ZpZGUgYSAicGVyY2VudCIgZmllbGQgb2YgaW50ZWdlciB0eXBlIHRvIHN0YXkgY29tcGF0aWJsZQotICAgICAqIHdpdGggcXRkZW11eCwgYnV0IGFkZCBhIHNlY29uZCAicGVyY2VudC1kb3VibGUiIGZpZWxkIGZvciB0aG9zZSB3aG8KLSAgICAgKiB3YW50IG1vcmUgcHJlY2lzaW9uIGFuZCBhcmUgdG9vIGxhenkgdG8gY2FsY3VsYXRlIGl0IHRoZW1zZWx2ZXMgKi8KLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJwcm9ncmVzcyIsICJwZXJjZW50IiwgR19UWVBFX0lOVCwgKGdpbnQpIHBlcmMsCi0gICAgICAgICJwZXJjZW50LWRvdWJsZSIsIEdfVFlQRV9ET1VCTEUsIHBlcmMsICJjdXJyZW50IiwgR19UWVBFX0lOVDY0LCBjdXJyZW50LAotICAgICAgICAidG90YWwiLCBHX1RZUEVfSU5UNjQsIHRvdGFsLCBOVUxMKTsKLSAgfSBlbHNlIGlmIChjdXJyZW50ID49IDApIHsKLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJwcm9ncmVzcyIsICJjdXJyZW50IiwgR19UWVBFX0lOVDY0LCBjdXJyZW50LCBOVUxMKTsKLSAgfQotCi0gIGlmIChzKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgInBvc3RpbmcgcHJvZ3Jlc3MgbWVzc2FnZTogJSIgR1NUX1BUUl9GT1JNQVQsIHMpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiZm9ybWF0IiwgR1NUX1RZUEVfRk9STUFULCBmb3JtYXQsIE5VTEwpOwotICAgIC8qIGNhbid0IHBvc3QgaXQgcmlnaHQgaGVyZSBiZWNhdXNlIHdlJ3JlIGhvbGRpbmcgdGhlIG9iamVjdCBsb2NrICovCi0gICAgZmlsdGVyLT5wZW5kaW5nX21zZyA9IGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKGZpbHRlciksIHMpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Byb2dyZXNzX3JlcG9ydF9kb19xdWVyeSAoR3N0UHJvZ3Jlc3NSZXBvcnQgKiBmaWx0ZXIsIEdzdEZvcm1hdCBmb3JtYXQsCi0gICAgZ2ludCBoaCwgZ2ludCBtbSwgZ2ludCBzcywgR3N0QnVmZmVyICogYnVmKQotewotICBjb25zdCBnY2hhciAqZm9ybWF0X25hbWUgPSBOVUxMOwotICBHc3RQYWQgKnNpbmtfcGFkOwotICBnaW50NjQgY3VyLCB0b3RhbDsKLQotICBzaW5rX3BhZCA9IEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKS0+c2lua3BhZDsKLQotICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLCAicXVlcnlpbmcgdXNpbmcgZm9ybWF0ICVkICglcykiLCBmb3JtYXQsCi0gICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKLQotICBpZiAoZmlsdGVyLT5kb19xdWVyeSB8fCAhYnVmKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgInVzaW5nIHVwc3RyZWFtIHF1ZXJ5Iik7Ci0gICAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnlfcG9zaXRpb24gKHNpbmtfcGFkLCBmb3JtYXQsICZjdXIpIHx8Ci0gICAgICAgICFnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKHNpbmtfcGFkLCBmb3JtYXQsICZ0b3RhbCkpIHsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR3N0QmFzZVRyYW5zZm9ybSAqYmFzZSA9IEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJ1c2luZyBidWZmZXIgbWV0YWRhdGEiKTsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSAmJiBiYXNlLT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgIGN1ciA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmYmFzZS0+c2VnbWVudCwgZm9ybWF0LAotICAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKTsKLSAgICAgIHRvdGFsID0gYmFzZS0+c2VnbWVudC5kdXJhdGlvbjsKLSAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JVRkZFUlMpIHsKLSAgICAgIGN1ciA9IGZpbHRlci0+YnVmZmVyX2NvdW50OwotICAgICAgdG90YWwgPSAtMTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgZm9ybWF0X25hbWUgPSAiYnl0ZXMiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0JVRkZFUlM6Ci0gICAgICBmb3JtYXRfbmFtZSA9ICJidWZmZXJzIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0ZPUk1BVF9QRVJDRU5UOgotICAgICAgZm9ybWF0X25hbWUgPSAicGVyY2VudCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgIGZvcm1hdF9uYW1lID0gInNlY29uZHMiOwotICAgICAgY3VyIC89IEdTVF9TRUNPTkQ7Ci0gICAgICB0b3RhbCAvPSBHU1RfU0VDT05EOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6ewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZm9ybWF0X25hbWUgPSAiYm9nb3VuaXRzIjsKLSAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKS0+c2lua3BhZCk7Ci0gICAgICBpZiAoY2FwcykgewotICAgICAgICBpZiAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpICYmICFnc3RfY2Fwc19pc19hbnkgKGNhcHMpKSB7Ci0gICAgICAgICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gICAgICAgICAgY29uc3QgZ2NoYXIgKm1pbWVfdHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpOwotCi0gICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKG1pbWVfdHlwZSwgInZpZGVvLyIpIHx8Ci0gICAgICAgICAgICAgIGdfc3RyX2hhc19wcmVmaXggKG1pbWVfdHlwZSwgImltYWdlLyIpKSB7Ci0gICAgICAgICAgICBmb3JtYXRfbmFtZSA9ICJmcmFtZXMiOwotICAgICAgICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAobWltZV90eXBlLCAiYXVkaW8vIikpIHsKLSAgICAgICAgICAgIGZvcm1hdF9uYW1lID0gInNhbXBsZXMiOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDp7Ci0gICAgICBjb25zdCBHc3RGb3JtYXREZWZpbml0aW9uICpkZXRhaWxzOwotCi0gICAgICBkZXRhaWxzID0gZ3N0X2Zvcm1hdF9nZXRfZGV0YWlscyAoZm9ybWF0KTsKLSAgICAgIGlmIChkZXRhaWxzKSB7Ci0gICAgICAgIGZvcm1hdF9uYW1lID0gZGV0YWlscy0+bmljazsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvcm1hdF9uYW1lID0gInVua25vd24iOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFmaWx0ZXItPnNpbGVudCkgewotICAgIGlmICh0b3RhbCA+IDApIHsKLSAgICAgIGdfcHJpbnQgKCIlcyAoJTAyZDolMDJkOiUwMmQpOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAvICUiCi0gICAgICAgICAgR19HSU5UNjRfRk9STUFUICIgJXMgKCU0LjFmICUlKVxuIiwgR1NUX09CSkVDVF9OQU1FIChmaWx0ZXIpLCBoaCwKLSAgICAgICAgICBtbSwgc3MsIGN1ciwgdG90YWwsIGZvcm1hdF9uYW1lLCAoZ2RvdWJsZSkgY3VyIC8gdG90YWwgKiAxMDAuMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfcHJpbnQgKCIlcyAoJTAyZDolMDJkOiUwMmQpOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAlc1xuIiwKLSAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKGZpbHRlciksIGhoLCBtbSwgc3MsIGN1ciwgZm9ybWF0X25hbWUpOwotICAgIH0KLSAgfQotCi0gIGdzdF9wcm9ncmVzc19yZXBvcnRfcG9zdF9wcm9ncmVzcyAoZmlsdGVyLCBmb3JtYXQsIGN1ciwgdG90YWwpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm9ncmVzc19yZXBvcnRfcmVwb3J0IChHc3RQcm9ncmVzc1JlcG9ydCAqIGZpbHRlciwgR1RpbWVWYWwgY3VyX3RpbWUsCi0gICAgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RGb3JtYXQgdHJ5X2Zvcm1hdHNbXSA9IHsgR1NUX0ZPUk1BVF9USU1FLCBHU1RfRk9STUFUX0JZVEVTLAotICAgIEdTVF9GT1JNQVRfUEVSQ0VOVCwgR1NUX0ZPUk1BVF9CVUZGRVJTLAotICAgIEdTVF9GT1JNQVRfREVGQVVMVAotICB9OwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEZvcm1hdCBmb3JtYXQgPSBHU1RfRk9STUFUX1VOREVGSU5FRDsKLSAgZ2Jvb2xlYW4gZG9uZSA9IEZBTFNFOwotICBnbG9uZyBydW5fdGltZTsKLSAgZ2ludCBoaCwgbW0sIHNzOwotCi0gIHJ1bl90aW1lID0gY3VyX3RpbWUudHZfc2VjIC0gZmlsdGVyLT5zdGFydF90aW1lLnR2X3NlYzsKLQotICBoaCA9IChydW5fdGltZSAvIDM2MDApICUgMTAwOwotICBtbSA9IChydW5fdGltZSAvIDYwKSAlIDYwOwotICBzcyA9IChydW5fdGltZSAlIDYwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0KLSAgaWYgKGZpbHRlci0+Zm9ybWF0ICE9IE5VTEwgJiYgc3RyY21wIChmaWx0ZXItPmZvcm1hdCwgImF1dG8iKSAhPSAwKSB7Ci0gICAgZm9ybWF0ID0gZ3N0X2Zvcm1hdF9nZXRfYnlfbmljayAoZmlsdGVyLT5mb3JtYXQpOwotICB9Ci0KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1VOREVGSU5FRCkgewotICAgIGRvbmUgPSBnc3RfcHJvZ3Jlc3NfcmVwb3J0X2RvX3F1ZXJ5IChmaWx0ZXIsIGZvcm1hdCwgaGgsIG1tLCBzcywgYnVmKTsKLSAgfSBlbHNlIHsKLSAgICBnaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTICh0cnlfZm9ybWF0cyk7ICsraSkgewotICAgICAgZG9uZSA9IGdzdF9wcm9ncmVzc19yZXBvcnRfZG9fcXVlcnkgKGZpbHRlciwgdHJ5X2Zvcm1hdHNbaV0sIGhoLCBtbSwgc3MsCi0gICAgICAgICAgYnVmKTsKLSAgICAgIGlmIChkb25lKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoIWRvbmUgJiYgIWZpbHRlci0+c2lsZW50KSB7Ci0gICAgZ19wcmludCAoIiVzICglMmQ6JTJkOiUyZCk6IENvdWxkIG5vdCBxdWVyeSBwb3NpdGlvbiBhbmQvb3IgZHVyYXRpb25cbiIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoZmlsdGVyKSwgaGgsIG1tLCBzcyk7Ci0gIH0KLQotICBtc2cgPSBmaWx0ZXItPnBlbmRpbmdfbXNnOwotICBmaWx0ZXItPnBlbmRpbmdfbXNnID0gTlVMTDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0KLSAgaWYgKG1zZykgewotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZmlsdGVyKSwgbXNnKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9wcm9ncmVzc19yZXBvcnRfc2lua19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RQcm9ncmVzc1JlcG9ydCAqZmlsdGVyOwotCi0gIGZpbHRlciA9IEdTVF9QUk9HUkVTU19SRVBPUlQgKHRyYW5zKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgewotICAgICAgR1RpbWVWYWwgY3VyX3RpbWU7Ci0KLSAgICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmN1cl90aW1lKTsKLSAgICAgIGdzdF9wcm9ncmVzc19yZXBvcnRfcmVwb3J0IChmaWx0ZXIsIGN1cl90aW1lLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAodHJhbnMsIGV2ZW50KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9wcm9ncmVzc19yZXBvcnRfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0UHJvZ3Jlc3NSZXBvcnQgKmZpbHRlcjsKLSAgZ2Jvb2xlYW4gbmVlZF91cGRhdGU7Ci0gIEdUaW1lVmFsIGN1cl90aW1lOwotCi0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmN1cl90aW1lKTsKLQotICBmaWx0ZXIgPSBHU1RfUFJPR1JFU1NfUkVQT1JUICh0cmFucyk7Ci0KLSAgLyogQ2hlY2sgaWYgdXBkYXRlX2ZyZXEgc2Vjb25kcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBuZWVkX3VwZGF0ZSA9Ci0gICAgICAoKGN1cl90aW1lLnR2X3NlYyAtIGZpbHRlci0+bGFzdF9yZXBvcnQudHZfc2VjKSA+PSBmaWx0ZXItPnVwZGF0ZV9mcmVxKTsKLSAgZmlsdGVyLT5idWZmZXJfY291bnQrKzsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0KLSAgaWYgKG5lZWRfdXBkYXRlKSB7Ci0gICAgZ3N0X3Byb2dyZXNzX3JlcG9ydF9yZXBvcnQgKGZpbHRlciwgY3VyX3RpbWUsIGJ1Zik7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICAgIGZpbHRlci0+bGFzdF9yZXBvcnQgPSBjdXJfdGltZTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcHJvZ3Jlc3NfcmVwb3J0X3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdFByb2dyZXNzUmVwb3J0ICpmaWx0ZXI7Ci0KLSAgZmlsdGVyID0gR1NUX1BST0dSRVNTX1JFUE9SVCAodHJhbnMpOwotCi0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmZpbHRlci0+bGFzdF9yZXBvcnQpOwotICBmaWx0ZXItPnN0YXJ0X3RpbWUgPSBmaWx0ZXItPmxhc3RfcmVwb3J0OwotICBmaWx0ZXItPmJ1ZmZlcl9jb3VudCA9IDA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Byb2dyZXNzX3JlcG9ydF9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIC8qIGFueXRoaW5nIHdlIHNob3VsZCBiZSBkb2luZyBoZXJlPyAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm9ncmVzc19yZXBvcnRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFByb2dyZXNzUmVwb3J0ICpmaWx0ZXI7Ci0KLSAgZmlsdGVyID0gR1NUX1BST0dSRVNTX1JFUE9SVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVVBEQVRFX0ZSRVE6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gICAgICBmaWx0ZXItPnVwZGF0ZV9mcmVxID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSUxFTlQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gICAgICBmaWx0ZXItPnNpbGVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPX1FVRVJZOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICAgICAgZmlsdGVyLT5kb19xdWVyeSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZPUk1BVDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgICAgIGdfZnJlZSAoZmlsdGVyLT5mb3JtYXQpOwotICAgICAgZmlsdGVyLT5mb3JtYXQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGlmIChmaWx0ZXItPmZvcm1hdCA9PSBOVUxMKQotICAgICAgICBmaWx0ZXItPmZvcm1hdCA9IGdfc3RyZHVwICgiYXV0byIpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9wcm9ncmVzc19yZXBvcnRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFByb2dyZXNzUmVwb3J0ICpmaWx0ZXI7Ci0KLSAgZmlsdGVyID0gR1NUX1BST0dSRVNTX1JFUE9SVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVVBEQVRFX0ZSRVE6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPnVwZGF0ZV9mcmVxKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJTEVOVDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPnNpbGVudCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET19RVUVSWToKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPmRvX3F1ZXJ5KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZPUk1BVDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIGZpbHRlci0+Zm9ybWF0KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlYnVndXRpbHMvcHJvZ3Jlc3NyZXBvcnQuaCBiL2dzdC9kZWJ1Z3V0aWxzL3Byb2dyZXNzcmVwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OTA5MzcuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvcHJvZ3Jlc3NyZXBvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBQcm9ncmVzcyBSZXBvcnQgRWxlbWVudAotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwND4gSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUFJPR1JFU1NfUkVQT1JUX0hfXwotI2RlZmluZSBfX0dTVF9QUk9HUkVTU19SRVBPUlRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUFJPR1JFU1NfUkVQT1JUIFwKLSAgKGdzdF9wcm9ncmVzc19yZXBvcnRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1BST0dSRVNTX1JFUE9SVChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1BST0dSRVNTX1JFUE9SVCxHc3RQcm9ncmVzc1JlcG9ydCkpCi0jZGVmaW5lIEdTVF9QUk9HUkVTU19SRVBPUlRfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUFJPR1JFU1NfUkVQT1JULEdzdFByb2dyZXNzUmVwb3J0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUFJPR1JFU1NfUkVQT1JUKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUFJPR1JFU1NfUkVQT1JUKSkKLSNkZWZpbmUgR1NUX0lTX1BST0dSRVNTX1JFUE9SVF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9QUk9HUkVTU19SRVBPUlQpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFByb2dyZXNzUmVwb3J0IEdzdFByb2dyZXNzUmVwb3J0OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFByb2dyZXNzUmVwb3J0Q2xhc3MgR3N0UHJvZ3Jlc3NSZXBvcnRDbGFzczsKLQotc3RydWN0IF9Hc3RQcm9ncmVzc1JlcG9ydAotewotICBHc3RCYXNlVHJhbnNmb3JtIGJhc2V0cmFuc2Zvcm07Ci0KLSAgR3N0TWVzc2FnZSAqcGVuZGluZ19tc2c7Ci0KLSAgZ2ludCB1cGRhdGVfZnJlcTsKLSAgZ2Jvb2xlYW4gc2lsZW50OwotICBnYm9vbGVhbiBkb19xdWVyeTsKLSAgR1RpbWVWYWwgc3RhcnRfdGltZTsKLSAgR1RpbWVWYWwgbGFzdF9yZXBvcnQ7Ci0gIGdpbnQ2NCBidWZmZXJfY291bnQ7Ci0KLSAgLyogRm9ybWF0IHVzZWQgZm9yIHF1ZXJ5aW5nLiBVc2luZyBhIHN0cmluZyBoZXJlIGJlY2F1c2UgdGhlCi0gICAqIGZvcm1hdCBtaWdodCBub3QgYmUgcmVnaXN0ZXJlZCB5ZXQgd2hlbiB0aGUgcHJvcGVydHkgaXMgc2V0ICovCi0gIGdjaGFyICpmb3JtYXQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFByb2dyZXNzUmVwb3J0Q2xhc3MKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9wcm9ncmVzc19yZXBvcnRfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1BST0dSRVNTX1JFUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYyBiL2dzdC9kZWJ1Z3V0aWxzL3JuZGJ1ZmZlcnNpemUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzYTIzYy4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy9ybmRidWZmZXJzaXplLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24gKGNvbnRhY3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJuZGJ1ZmZlcnNpemUKLSAqCi0gKiBUaGlzIGVsZW1lbnQgcHVsbHMgYnVmZmVycyB3aXRoIHJhbmRvbSBzaXplcyBmcm9tIHRoZSBzb3VyY2UuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3JuZF9idWZmZXJfc2l6ZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3Rfcm5kX2J1ZmZlcl9zaXplX2RlYnVnCi0KLSNkZWZpbmUgR1NUX1RZUEVfUk5EX0JVRkZFUl9TSVpFICAgICAgICAgICAgKGdzdF9ybmRfYnVmZmVyX3NpemVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JORF9CVUZGRVJfU0laRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JORF9CVUZGRVJfU0laRSxHc3RSbmRCdWZmZXJTaXplKSkKLSNkZWZpbmUgR1NUX1JORF9CVUZGRVJfU0laRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUk5EX0JVRkZFUl9TSVpFLEdzdFJuZEJ1ZmZlclNpemVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19STkRfQlVGRkVSX1NJWkUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9STkRfQlVGRkVSX1NJWkUpKQotI2RlZmluZSBHU1RfSVNfUk5EX0JVRkZFUl9TSVpFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9STkRfQlVGRkVSX1NJWkUpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0Um5kQnVmZmVyU2l6ZSBHc3RSbmRCdWZmZXJTaXplOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJuZEJ1ZmZlclNpemVDbGFzcyBHc3RSbmRCdWZmZXJTaXplQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0Um5kQnVmZmVyU2l6ZQotewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+ICovCi0gIEdSYW5kICpyYW5kOwotICBndWludCBzZWVkOwotICBnaW50IG1pbiwgbWF4OwotCi0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0KLSAgZ2Jvb2xlYW4gbmVlZF9uZXdzZWdtZW50OwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci19OwotCi1zdHJ1Y3QgX0dzdFJuZEJ1ZmZlclNpemVDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotZW51bQotewotICBQUk9QX1NFRUQgPSAxLAotICBQUk9QX01JTklNVU0sCi0gIFBST1BfTUFYSU1VTQotfTsKLQotI2RlZmluZSBERUZBVUxUX1NFRUQgMAotI2RlZmluZSBERUZBVUxUX01JTiAgMQotI2RlZmluZSBERUZBVUxUX01BWCAgKDgqMTAyNCkKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIHZvaWQgZ3N0X3JuZF9idWZmZXJfc2l6ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfcm5kX2J1ZmZlcl9zaXplX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ybmRfYnVmZmVyX3NpemVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3JuZF9idWZmZXJfc2l6ZV9hY3RpdmF0ZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9ybmRfYnVmZmVyX3NpemVfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIHZvaWQgZ3N0X3JuZF9idWZmZXJfc2l6ZV9sb29wIChHc3RSbmRCdWZmZXJTaXplICogc2VsZik7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3JuZF9idWZmZXJfc2l6ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIGdib29sZWFuIGdzdF9ybmRfYnVmZmVyX3NpemVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfcm5kX2J1ZmZlcl9zaXplX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3JuZF9idWZmZXJfc2l6ZV9jaGFpbiAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotR1R5cGUgZ3N0X3JuZF9idWZmZXJfc2l6ZV9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIGdzdF9ybmRfYnVmZmVyX3NpemVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0Um5kQnVmZmVyU2l6ZSwgZ3N0X3JuZF9idWZmZXJfc2l6ZSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfcm5kX2J1ZmZlcl9zaXplX2NsYXNzX2luaXQgKEdzdFJuZEJ1ZmZlclNpemVDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3Rfcm5kX2J1ZmZlcl9zaXplX2RlYnVnLCAicm5kYnVmZmVyc2l6ZSIsIDAsCi0gICAgICAicm5kYnVmZmVyc2l6ZSBlbGVtZW50Iik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3JuZF9idWZmZXJfc2l6ZV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ybmRfYnVmZmVyX3NpemVfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ybmRfYnVmZmVyX3NpemVfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJSYW5kb20gYnVmZmVyIHNpemUiLAotICAgICAgIlRlc3RpbmciLCAicHVsbCByYW5kb20gc2l6ZWQgYnVmZmVycyIsCi0gICAgICAiU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ybmRfYnVmZmVyX3NpemVfY2hhbmdlX3N0YXRlKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NFRUQsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInNlZWQiLCAicmFuZG9tIG51bWJlciBzZWVkIiwKLSAgICAgICAgICAic2VlZCBmb3IgcmFuZG9tbmVzcyAoaW5pdGlhbGl6ZWQgd2hlbiBnb2luZyBmcm9tIFJFQURZIHRvIFBBVVNFRCkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDMyLCBERUZBVUxUX1NFRUQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NSU5JTVVNLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm1pbiIsICJtaW5pbnVtIiwgIm1pbmludW0gYnVmZmVyIHNpemUiLAotICAgICAgICAgIDAsIEdfTUFYSU5UMzIsIERFRkFVTFRfTUlOLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYSU1VTSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJtYXgiLCAibWF4aW11bSIsICJtYXhpbXVtIGJ1ZmZlciBzaXplIiwKLSAgICAgICAgICAxLCBHX01BWElOVDMyLCBERUZBVUxUX01BWCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JuZF9idWZmZXJfc2l6ZV9pbml0IChHc3RSbmRCdWZmZXJTaXplICogc2VsZikKLXsKLSAgc2VsZi0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JuZF9idWZmZXJfc2l6ZV9hY3RpdmF0ZSkpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JuZF9idWZmZXJfc2l6ZV9hY3RpdmF0ZV9tb2RlKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzZWxmLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ybmRfYnVmZmVyX3NpemVfc2lua19ldmVudCkpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2VsZi0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfcm5kX2J1ZmZlcl9zaXplX2NoYWluKSk7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNlbGYtPnNpbmtwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2VsZi0+c2lua3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX0FMTE9DQVRJT04pOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzZWxmLT5zaW5rcGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfU0NIRURVTElORyk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWxmKSwgc2VsZi0+c2lua3BhZCk7Ci0KLSAgc2VsZi0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcGxhdGUsICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfcm5kX2J1ZmZlcl9zaXplX3NyY19ldmVudCkpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzZWxmLT5zcmNwYWQsIEdTVF9QQURfRkxBR19QUk9YWV9DQVBTKTsKLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc2VsZi0+c3JjcGFkLCBHU1RfUEFEX0ZMQUdfUFJPWFlfQUxMT0NBVElPTik7Ci0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHNlbGYtPnNyY3BhZCwgR1NUX1BBRF9GTEFHX1BST1hZX1NDSEVEVUxJTkcpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyY3BhZCk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ybmRfYnVmZmVyX3NpemVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJuZEJ1ZmZlclNpemUgKnNlbGYgPSBHU1RfUk5EX0JVRkZFUl9TSVpFIChvYmplY3QpOwotCi0gIGlmIChzZWxmLT5yYW5kKSB7Ci0gICAgZ19yYW5kX2ZyZWUgKHNlbGYtPnJhbmQpOwotICAgIHNlbGYtPnJhbmQgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3Rfcm5kX2J1ZmZlcl9zaXplX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSbmRCdWZmZXJTaXplICpzZWxmID0gR1NUX1JORF9CVUZGRVJfU0laRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU0VFRDoKLSAgICAgIHNlbGYtPnNlZWQgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUlOSU1VTToKLSAgICAgIHNlbGYtPm1pbiA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWElNVU06Ci0gICAgICBzZWxmLT5tYXggPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3JuZF9idWZmZXJfc2l6ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Um5kQnVmZmVyU2l6ZSAqc2VsZiA9IEdTVF9STkRfQlVGRkVSX1NJWkUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NFRUQ6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2VsZi0+c2VlZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUlOSU1VTToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlbGYtPm1pbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYSU1VTToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlbGYtPm1heCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfcm5kX2J1ZmZlcl9zaXplX2FjdGl2YXRlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBwdWxsX21vZGU7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NjaGVkdWxpbmcgKCk7Ci0KLSAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeSAocGFkLCBxdWVyeSkpCi0gICAgcHVsbF9tb2RlID0gZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGVfd2l0aF9mbGFncyAocXVlcnksCi0gICAgICAgIEdTVF9QQURfTU9ERV9QVUxMLCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFKTsKLSAgZWxzZQotICAgIHB1bGxfbW9kZSA9IEZBTFNFOwotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmIChwdWxsX21vZGUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHB1bGwiKTsKLSAgICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJhY3RpdmF0aW5nIHB1c2giKTsKLSAgICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChwYWQsIEdTVF9QQURfTU9ERV9QVVNILCBUUlVFKTsKLSAgfQotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JuZF9idWZmZXJfc2l6ZV9hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RSbmRCdWZmZXJTaXplICpzZWxmID0gR1NUX1JORF9CVUZGRVJfU0laRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVUxMOgotICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJzdGFydGluZyBwdWxsIik7Ci0gICAgICAgIHJlcyA9Ci0gICAgICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHBhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X3JuZF9idWZmZXJfc2l6ZV9sb29wLAotICAgICAgICAgICAgc2VsZiwgTlVMTCk7Ci0gICAgICAgIHNlbGYtPm5lZWRfbmV3c2VnbWVudCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJzdG9wcGluZyBwdWxsIik7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RvcF90YXNrIChwYWQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoc2VsZiwgIiVzYWN0aXZhdGluZyBpbiBwdXNoIG1vZGUiLCAoYWN0aXZlKSA/ICIiIDogImRlIik7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfcm5kX2J1ZmZlcl9zaXplX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0Um5kQnVmZmVyU2l6ZSAqc2VsZjsKLSAgR3N0U2Vla1R5cGUgc3RhcnRfdHlwZTsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBnaW50NjQgc3RhcnQ7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgIT0gR1NUX0VWRU5UX1NFRUspIHsKLSAgICByZXR1cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICB9Ci0KLSAgc2VsZiA9IEdTVF9STkRfQlVGRkVSX1NJWkUgKHBhcmVudCk7Ci0gIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgTlVMTCwgJmZvcm1hdCwgJmZsYWdzLCAmc3RhcnRfdHlwZSwgJnN0YXJ0LAotICAgICAgTlVMTCwgTlVMTCk7Ci0KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJvbmx5IEJZVEUgZm9ybWF0IHN1cHBvcnRlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAoc3RhcnRfdHlwZSAhPSBHU1RfU0VFS19UWVBFX1NFVCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFkLCAib25seSBTRUVLX1RZUEVfU0VUIHN1cHBvcnRlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICgoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKSkgewotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICB9IGVsc2UgewotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoc2VsZi0+c2lua3BhZCk7Ci0gIH0KLQotICBHU1RfUEFEX1NUUkVBTV9MT0NLIChzZWxmLT5zaW5rcGFkKTsKLQotICBpZiAoKGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSCkpIHsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zaW5rcGFkLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpKTsKLSAgfQotCi0gIEdTVF9JTkZPX09CSkVDVCAocGFkLCAic2Vla2luZyB0byBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULCBzdGFydCk7Ci0KLSAgc2VsZi0+b2Zmc2V0ID0gc3RhcnQ7Ci0gIHNlbGYtPm5lZWRfbmV3c2VnbWVudCA9IFRSVUU7Ci0KLSAgZ3N0X3BhZF9zdGFydF90YXNrIChzZWxmLT5zaW5rcGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3Rfcm5kX2J1ZmZlcl9zaXplX2xvb3AsCi0gICAgICBzZWxmLCBOVUxMKTsKLQotICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHNlbGYtPnNpbmtwYWQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ybmRfYnVmZmVyX3NpemVfZHJhaW5fYWRhcHRlciAoR3N0Um5kQnVmZmVyU2l6ZSAqIHNlbGYsIGdib29sZWFuIGVvcykKLXsKLSAgR3N0Rmxvd1JldHVybiBmbG93OwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQgbnVtX2J5dGVzLCBhdmFpbDsKLQotICBmbG93ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNlbGYtPm1pbiA+IHNlbGYtPm1heCkpCi0gICAgZ290byBib2d1c19taW5tYXg7Ci0KLSAgZG8gewotICAgIGlmIChzZWxmLT5taW4gIT0gc2VsZi0+bWF4KSB7Ci0gICAgICBudW1fYnl0ZXMgPSBnX3JhbmRfaW50X3JhbmdlIChzZWxmLT5yYW5kLCBzZWxmLT5taW4sIHNlbGYtPm1heCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG51bV9ieXRlcyA9IHNlbGYtPm1pbjsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInB1bGxpbmcgJXUgYnl0ZXMgb3V0IG9mIGFkYXB0ZXIiLCBudW1fYnl0ZXMpOwotCi0gICAgYnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHNlbGYtPmFkYXB0ZXIsIG51bV9ieXRlcyk7Ci0KLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgIGlmICghZW9zKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAibm90IGVub3VnaCBieXRlcyBpbiBhZGFwdGVyIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoc2VsZi0+YWRhcHRlcik7Ci0KLSAgICAgIGlmIChhdmFpbCA9PSAwKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKGF2YWlsIDwgc2VsZi0+bWluKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgImRpc2NhcmRpbmcgJXUgYnl0ZXMgYXQgZW5kIChtaW49JXUpIiwKLSAgICAgICAgICAgIGF2YWlsLCBzZWxmLT5taW4pOwotICAgICAgICBnc3RfYWRhcHRlcl9jbGVhciAoc2VsZi0+YWRhcHRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHNlbGYtPmFkYXB0ZXIsIGF2YWlsKTsKLSAgICAgIGdfYXNzZXJ0IChidWYgIT0gTlVMTCk7Ci0gICAgfQotCi0gICAgZmxvdyA9IGdzdF9wYWRfcHVzaCAoc2VsZi0+c3JjcGFkLCBidWYpOwotICB9Ci0gIHdoaWxlIChmbG93ID09IEdTVF9GTE9XX09LKTsKLQotICByZXR1cm4gZmxvdzsKLQotLyogRVJST1JTICovCi1ib2d1c19taW5tYXg6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2VsZiwgTElCUkFSWSwgU0VUVElOR1MsCi0gICAgICAgICgiVGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplLiIpLAotICAgICAgICAoImJ1ZmZlciBzaXplczogbWF4PSVkLCBtaW49JWQiLCBzZWxmLT5taW4sIHNlbGYtPm1heCkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ybmRfYnVmZmVyX3NpemVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0Um5kQnVmZmVyU2l6ZSAqcm5kID0gR1NUX1JORF9CVUZGRVJfU0laRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBnc3Rfcm5kX2J1ZmZlcl9zaXplX2RyYWluX2FkYXB0ZXIgKHJuZCwgVFJVRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgaWYgKHJuZC0+YWRhcHRlciAhPSBOVUxMKQotICAgICAgICBnc3RfYWRhcHRlcl9jbGVhciAocm5kLT5hZGFwdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfcm5kX2J1ZmZlcl9zaXplX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RSbmRCdWZmZXJTaXplICpybmQgPSBHU1RfUk5EX0JVRkZFUl9TSVpFIChwYXJlbnQpOwotICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0KLSAgaWYgKHJuZC0+YWRhcHRlciA9PSBOVUxMKQotICAgIHJuZC0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLQotICBnc3RfYWRhcHRlcl9wdXNoIChybmQtPmFkYXB0ZXIsIGJ1Zik7Ci0KLSAgZmxvdyA9IGdzdF9ybmRfYnVmZmVyX3NpemVfZHJhaW5fYWRhcHRlciAocm5kLCBGQUxTRSk7Ci0KLSAgaWYgKGZsb3cgIT0gR1NUX0ZMT1dfT0spCi0gICAgR1NUX0lORk9fT0JKRUNUIChybmQsICJmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChmbG93KSk7Ci0KLSAgcmV0dXJuIGZsb3c7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfcm5kX2J1ZmZlcl9zaXplX2xvb3AgKEdzdFJuZEJ1ZmZlclNpemUgKiBzZWxmKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludCBudW1fYnl0ZXMsIHNpemU7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNlbGYtPm1pbiA+IHNlbGYtPm1heCkpCi0gICAgZ290byBib2d1c19taW5tYXg7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNlbGYtPm1pbiAhPSBzZWxmLT5tYXgpKSB7Ci0gICAgbnVtX2J5dGVzID0gZ19yYW5kX2ludF9yYW5nZSAoc2VsZi0+cmFuZCwgc2VsZi0+bWluLCBzZWxmLT5tYXgpOwotICB9IGVsc2UgewotICAgIG51bV9ieXRlcyA9IHNlbGYtPm1pbjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAicHVsbGluZyAldSBieXRlcyBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIG51bV9ieXRlcywgc2VsZi0+b2Zmc2V0KTsKLQotICByZXQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKHNlbGYtPnNpbmtwYWQsIHNlbGYtPm9mZnNldCwgbnVtX2J5dGVzLCAmYnVmKTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gcHVsbF9mYWlsZWQ7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgaWYgKHNpemUgPCBudW1fYnl0ZXMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJzaG9ydCBidWZmZXI6ICV1IGJ5dGVzIiwgc2l6ZSk7Ci0gIH0KLQotICBpZiAoc2VsZi0+bmVlZF9uZXdzZWdtZW50KSB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICAgIHNlZ21lbnQuc3RhcnQgPSBzZWxmLT5vZmZzZXQ7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgICBzZWxmLT5uZWVkX25ld3NlZ21lbnQgPSBGQUxTRTsKLSAgfQotCi0gIHNlbGYtPm9mZnNldCArPSBzaXplOwotCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoc2VsZi0+c3JjcGFkLCBidWYpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBwdXNoX2ZhaWxlZDsKLQotICByZXR1cm47Ci0KLXBhdXNlX3Rhc2s6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAicGF1c2luZyB0YXNrIik7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChzZWxmLT5zaW5rcGFkKTsKLSAgICByZXR1cm47Ci0gIH0KLQotcHVsbF9mYWlsZWQ6Ci0gIHsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImVvcyIpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAicHVsbF9yYW5nZSBmbG93OiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICB9Ci0gICAgZ290byBwYXVzZV90YXNrOwotICB9Ci0KLXB1c2hfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInB1c2ggZmxvdzogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJlb3MiKTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgfSBlbHNlIGlmIChyZXQgPCBHU1RfRkxPV19FT1MgfHwgcmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHNlbGYsIHJldCk7Ci0gICAgfQotICAgIGdvdG8gcGF1c2VfdGFzazsKLSAgfQotCi1ib2d1c19taW5tYXg6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2VsZiwgTElCUkFSWSwgU0VUVElOR1MsCi0gICAgICAgICgiVGhlIG1pbmltdW0gYnVmZmVyIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplLiIpLAotICAgICAgICAoImJ1ZmZlciBzaXplczogbWF4PSVkLCBtaW49JWQiLCBzZWxmLT5taW4sIHNlbGYtPm1heCkpOwotICAgIGdvdG8gcGF1c2VfdGFzazsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ybmRfYnVmZmVyX3NpemVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSbmRCdWZmZXJTaXplICpzZWxmID0gR1NUX1JORF9CVUZGRVJfU0laRSAoZWxlbWVudCk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBzZWxmLT5vZmZzZXQgPSAwOwotICAgICAgaWYgKCFzZWxmLT5yYW5kKSB7Ci0gICAgICAgIHNlbGYtPnJhbmQgPSBnX3JhbmRfbmV3X3dpdGhfc2VlZCAoc2VsZi0+c2VlZCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgaWYgKHNlbGYtPnJhbmQpIHsKLSAgICAgICAgZ19yYW5kX2ZyZWUgKHNlbGYtPnJhbmQpOwotICAgICAgICBzZWxmLT5yYW5kID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgaWYgKHNlbGYtPmFkYXB0ZXIpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKHNlbGYtPmFkYXB0ZXIpOwotICAgICAgICBzZWxmLT5hZGFwdGVyID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy90ZXN0cGx1Z2luLmMgYi9nc3QvZGVidWd1dGlscy90ZXN0cGx1Z2luLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOWNhMGYuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvdGVzdHBsdWdpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzA0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSAidGVzdHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3Rlc3RfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3Rlc3RfZGVidWcKLQotLyogVGhpcyBwbHVnaW4gZG9lcyBhbGwgdGhlIHRlc3RzIHJlZ2lzdGVyZWQgaW4gdGhlIHRlc3RzLmggZmlsZQotICovCi0KLSNkZWZpbmUgR1NUX1RZUEVfVEVTVCBcCi0gIChnc3RfdGVzdF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVEVTVChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1RFU1QsR3N0VGVzdCkpCi0jZGVmaW5lIEdTVF9URVNUX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1RFU1QsR3N0VGVzdENsYXNzKSkKLSNkZWZpbmUgR1NUX1RFU1RfR0VUX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksR1NUX1RZUEVfVEVTVCxHc3RUZXN0Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVEVTVChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1RFU1QpKQotI2RlZmluZSBHU1RfSVNfVEVTVF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9URVNUKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3QgR3N0VGVzdDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUZXN0Q2xhc3MgR3N0VGVzdENsYXNzOwotCi1zdHJ1Y3QgX0dzdFRlc3QKLXsKLSAgR3N0QmFzZVNpbmsgYmFzZXNpbms7Ci0KLSAgZ3BvaW50ZXIgdGVzdHNbVEVTVFNfQ09VTlRdOwotICBHVmFsdWUgdmFsdWVzW1RFU1RTX0NPVU5UXTsKLX07Ci0KLXN0cnVjdCBfR3N0VGVzdENsYXNzCi17Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIGdjaGFyICpwYXJhbV9uYW1lc1syICogVEVTVFNfQ09VTlRdOwotfTsKLQotc3RhdGljIHZvaWQgZ3N0X3Rlc3RfZmluYWxpemUgKEdzdFRlc3QgKiB0ZXN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF90ZXN0X3N0YXJ0IChHc3RCYXNlU2luayAqIHRyYW5zKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdGVzdF9zdG9wIChHc3RCYXNlU2luayAqIHRyYW5zKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdGVzdF9zaW5rX2V2ZW50IChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF90ZXN0X3JlbmRlcl9idWZmZXIgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLQotc3RhdGljIHZvaWQgZ3N0X3Rlc3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3Rlc3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLUdUeXBlIGdzdF90ZXN0X2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgZ3N0X3Rlc3RfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0VGVzdCwgZ3N0X3Rlc3QsIEdTVF9UWVBFX0JBU0VfU0lOSyk7Ci0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2NsYXNzX2luaXQgKEdzdFRlc3RDbGFzcyAqIGtsYXNzKQotewotICBHc3RCYXNlU2lua0NsYXNzICpiYXNlc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBndWludCBpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdGVzdF9kZWJ1ZywgInRlc3RzaW5rIiwgMCwKLSAgICAgICJkZWJ1Z2dpbmcgY2F0ZWdvcnkgZm9yIHRlc3RzaW5rIGVsZW1lbnQiKTsKLQotICBvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF90ZXN0X3NldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdGVzdF9nZXRfcHJvcGVydHk7Ci0KLSAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IChHT2JqZWN0RmluYWxpemVGdW5jKSBnc3RfdGVzdF9maW5hbGl6ZTsKLQotICBmb3IgKGkgPSAwOyBpIDwgVEVTVFNfQ09VTlQ7IGkrKykgewotICAgIEdQYXJhbVNwZWMgKnNwZWM7Ci0KLSAgICBzcGVjID0gdGVzdHNbaV0uZ2V0X3NwZWMgKCZ0ZXN0c1tpXSwgRkFMU0UpOwotICAgIGtsYXNzLT5wYXJhbV9uYW1lc1syICogaV0gPSBnX3N0cmR1cCAoZ19wYXJhbV9zcGVjX2dldF9uYW1lIChzcGVjKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCAyICogaSArIDEsIHNwZWMpOwotICAgIHNwZWMgPSB0ZXN0c1tpXS5nZXRfc3BlYyAoJnRlc3RzW2ldLCBUUlVFKTsKLSAgICBrbGFzcy0+cGFyYW1fbmFtZXNbMiAqIGkgKyAxXSA9IGdfc3RyZHVwIChnX3BhcmFtX3NwZWNfZ2V0X25hbWUgKHNwZWMpKTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIDIgKiBpICsgMiwgc3BlYyk7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmt0ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlRlc3QgcGx1Z2luIiwKLSAgICAgICJUZXN0aW5nIiwgInBlcmZvcm0gYSBudW1iZXIgb2YgdGVzdHMiLCAiQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZT4iKTsKLQotICBiYXNlc2lua19jbGFzcy0+cmVuZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZXN0X3JlbmRlcl9idWZmZXIpOwotICBiYXNlc2lua19jbGFzcy0+ZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Rlc3Rfc2lua19ldmVudCk7Ci0gIGJhc2VzaW5rX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdGVzdF9zdGFydCk7Ci0gIGJhc2VzaW5rX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF90ZXN0X3N0b3ApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfaW5pdCAoR3N0VGVzdCAqIHRlc3QpCi17Ci0gIEdzdFRlc3RDbGFzcyAqa2xhc3M7Ci0gIGd1aW50IGk7Ci0KLSAga2xhc3MgPSBHU1RfVEVTVF9HRVRfQ0xBU1MgKHRlc3QpOwotICBmb3IgKGkgPSAwOyBpIDwgVEVTVFNfQ09VTlQ7IGkrKykgewotICAgIEdQYXJhbVNwZWMgKnNwZWMgPSBnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgICBrbGFzcy0+cGFyYW1fbmFtZXNbMiAqIGkgKyAxXSk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ0ZXN0LT52YWx1ZXNbaV0sIEdfUEFSQU1fU1BFQ19WQUxVRV9UWVBFIChzcGVjKSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2ZpbmFsaXplIChHc3RUZXN0ICogdGVzdCkKLXsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgVEVTVFNfQ09VTlQ7IGkrKykgewotICAgIGdfdmFsdWVfdW5zZXQgKCZ0ZXN0LT52YWx1ZXNbaV0pOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplICgoR09iamVjdCAqKSB0ZXN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RzX3Vuc2V0IChHc3RUZXN0ICogdGVzdCkKLXsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgVEVTVFNfQ09VTlQ7IGkrKykgewotICAgIGlmICh0ZXN0LT50ZXN0c1tpXSkgewotICAgICAgdGVzdHNbaV0uZnJlZSAodGVzdC0+dGVzdHNbaV0pOwotICAgICAgdGVzdC0+dGVzdHNbaV0gPSBOVUxMOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotdGVzdHNfc2V0IChHc3RUZXN0ICogdGVzdCkKLXsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgVEVTVFNfQ09VTlQ7IGkrKykgewotICAgIGdfYXNzZXJ0ICh0ZXN0LT50ZXN0c1tpXSA9PSBOVUxMKTsKLSAgICB0ZXN0LT50ZXN0c1tpXSA9IHRlc3RzW2ldLm5ldyAoJnRlc3RzW2ldKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF90ZXN0X3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogYmFzZXNpbmssIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFRlc3RDbGFzcyAqa2xhc3MgPSBHU1RfVEVTVF9HRVRfQ0xBU1MgKGJhc2VzaW5rKTsKLSAgR3N0VGVzdCAqdGVzdCA9IEdTVF9URVNUIChiYXNlc2luayk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0vKgotICAgIGNhc2UgR1NUX0VWRU5UX05FV1NFR01FTlQ6Ci0gICAgICBpZiAoR1NUX0VWRU5UX0RJU0NPTlRfTkVXX01FRElBIChldmVudCkpIHsKLSAgICAgICAgdGVzdHNfdW5zZXQgKHRlc3QpOwotICAgICAgICB0ZXN0c19zZXQgKHRlc3QpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0qLwotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzp7Ci0gICAgICBnaW50IGk7Ci0KLSAgICAgIGdfb2JqZWN0X2ZyZWV6ZV9ub3RpZnkgKEdfT0JKRUNUICh0ZXN0KSk7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgVEVTVFNfQ09VTlQ7IGkrKykgewotICAgICAgICBpZiAodGVzdC0+dGVzdHNbaV0pIHsKLSAgICAgICAgICBpZiAoIXRlc3RzW2ldLmZpbmlzaCAodGVzdC0+dGVzdHNbaV0sICZ0ZXN0LT52YWx1ZXNbaV0pKSB7Ci0gICAgICAgICAgICBHVmFsdWUgdiA9IHsgMCwgfTsKLSAgICAgICAgICAgIGdjaGFyICpyZWFsLCAqZXhwZWN0ZWQ7Ci0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnRlc3QtPnZhbHVlc1tpXSk7Ci0gICAgICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHX1ZBTFVFX1RZUEUgKCZ0ZXN0LT52YWx1ZXNbaV0pKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHRlc3QpLCBrbGFzcy0+cGFyYW1fbmFtZXNbMiAqIGldLAotICAgICAgICAgICAgICAgICZ2KTsKLSAgICAgICAgICAgIHJlYWwgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdik7Ci0gICAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0gICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodGVzdCwgU1RSRUFNLCBGT1JNQVQsIChOVUxMKSwKLSAgICAgICAgICAgICAgICAoInRlc3QgJXMgcmV0dXJuZWQgdmFsdWUgXCIlc1wiIGFuZCBub3QgZXhwZWN0ZWQgdmFsdWUgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAga2xhc3MtPnBhcmFtX25hbWVzWzIgKiBpXSwgcmVhbCwgZXhwZWN0ZWQpKTsKLSAgICAgICAgICAgIGdfZnJlZSAocmVhbCk7Ci0gICAgICAgICAgICBnX2ZyZWUgKGV4cGVjdGVkKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAodGVzdCksIGtsYXNzLT5wYXJhbV9uYW1lc1syICogaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnX29iamVjdF90aGF3X25vdGlmeSAoR19PQkpFQ1QgKHRlc3QpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JBU0VfU0lOS19DTEFTUyAocGFyZW50X2NsYXNzKS0+ZXZlbnQgKGJhc2VzaW5rLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdGVzdF9yZW5kZXJfYnVmZmVyIChHc3RCYXNlU2luayAqIGJhc2VzaW5rLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFRlc3QgKnRlc3QgPSBHU1RfVEVTVCAoYmFzZXNpbmspOwotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBURVNUU19DT1VOVDsgaSsrKSB7Ci0gICAgaWYgKHRlc3QtPnRlc3RzW2ldKSB7Ci0gICAgICB0ZXN0c1tpXS5hZGQgKHRlc3QtPnRlc3RzW2ldLCBidWYpOwotICAgIH0KLSAgfQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Rlc3Rfc3RhcnQgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0VGVzdCAqdGVzdCA9IEdTVF9URVNUIChzaW5rKTsKLQotICB0ZXN0c19zZXQgKHRlc3QpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdGVzdF9zdG9wIChHc3RCYXNlU2luayAqIHNpbmspCi17Ci0gIEdzdFRlc3QgKnRlc3QgPSBHU1RfVEVTVCAoc2luayk7Ci0KLSAgdGVzdHNfdW5zZXQgKHRlc3QpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RUZXN0ICp0ZXN0ID0gR1NUX1RFU1QgKG9iamVjdCk7Ci0KLSAgaWYgKHByb3BfaWQgPT0gMCB8fCBwcm9wX2lkID4gMiAqIFRFU1RTX0NPVU5UKSB7Ci0gICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAocHJvcF9pZCAlIDIpIHsKLSAgICAvKiByZWFsIHZhbHVlcyBjYW4ndCBiZSBzZXQgKi8KLSAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICB9IGVsc2UgewotICAgIC8qIGV4cGVjdGVkIHZhbHVlcyAqLwotICAgIEdTVF9PQkpFQ1RfTE9DSyAodGVzdCk7Ci0gICAgZ192YWx1ZV9jb3B5ICh2YWx1ZSwgJnRlc3QtPnZhbHVlc1twcm9wX2lkIC8gMiAtIDFdKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGVzdCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF90ZXN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RUZXN0ICp0ZXN0ID0gR1NUX1RFU1QgKG9iamVjdCk7Ci0gIGd1aW50IGlkID0gKHByb3BfaWQgLSAxKSAvIDI7Ci0KLSAgaWYgKHByb3BfaWQgPT0gMCB8fCBwcm9wX2lkID4gMiAqIFRFU1RTX0NPVU5UKSB7Ci0gICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKHRlc3QpOwotCi0gIGlmIChwcm9wX2lkICUgMikgewotICAgIC8qIHJlYWwgdmFsdWVzICovCi0gICAgdGVzdHNbaWRdLmdldF92YWx1ZSAodGVzdC0+dGVzdHNbaWRdLCB2YWx1ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZXhwZWN0ZWQgdmFsdWVzICovCi0gICAgZ192YWx1ZV9jb3B5ICgmdGVzdC0+dmFsdWVzW2lkXSwgdmFsdWUpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHRlc3QpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlYnVndXRpbHMvdGVzdHMuYyBiL2dzdC9kZWJ1Z3V0aWxzL3Rlc3RzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljYTJhZjkuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlYnVndXRpbHMvdGVzdHMuYworKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBPdHRlIDxvdHRlQGdub21lLm9yZz4KLSAqCi0gKiBpbmNsdWRlcyBjb2RlIGJhc2VkIG9uIGdsaWJjIDIuMi4zJ3MgY3J5cHQvbWQ1LmMsCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgInRlc3RzLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotCi0vKgotICoqKiBMRU5HVEggKioqCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ2ludDY0IHZhbHVlOwotfQotTGVuZ3RoVGVzdDsKLQotc3RhdGljIEdQYXJhbVNwZWMgKgotbGVuZ3RoX2dldF9zcGVjIChjb25zdCBHc3RUZXN0SW5mbyAqIGluZm8sIGdib29sZWFuIGNvbXBhcmVfdmFsdWUpCi17Ci0gIGlmIChjb21wYXJlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIGdfcGFyYW1fc3BlY19pbnQ2NCAoImV4cGVjdGVkLWxlbmd0aCIsICJleHBlY3RlZCBsZW5ndGgiLAotICAgICAgICAiZXhwZWN0ZWQgbGVuZ3RoIG9mIHN0cmVhbSIsIC0xLCBHX01BWElOVDY0LCAtMSwKLSAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGdfcGFyYW1fc3BlY19pbnQ2NCAoImxlbmd0aCIsICJsZW5ndGgiLCAibGVuZ3RoIG9mIHN0cmVhbSIsCi0gICAgICAgIC0xLCBHX01BWElOVDY0LCAtMSwgR19QQVJBTV9SRUFEQUJMRSk7Ci0gIH0KLX0KLQotc3RhdGljIGdwb2ludGVyCi1sZW5ndGhfbmV3IChjb25zdCBHc3RUZXN0SW5mbyAqIGluZm8pCi17Ci0gIHJldHVybiBnX25ldzAgKExlbmd0aFRlc3QsIDEpOwotfQotCi1zdGF0aWMgdm9pZAotbGVuZ3RoX2FkZCAoZ3BvaW50ZXIgdGVzdCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBMZW5ndGhUZXN0ICp0ID0gdGVzdDsKLQotICB0LT52YWx1ZSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWxlbmd0aF9maW5pc2ggKGdwb2ludGVyIHRlc3QsIEdWYWx1ZSAqIHZhbHVlKQotewotICBMZW5ndGhUZXN0ICp0ID0gdGVzdDsKLQotICBpZiAoZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSA9PSAtMSkKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXR1cm4gdC0+dmFsdWUgPT0gZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWxlbmd0aF9nZXRfdmFsdWUgKGdwb2ludGVyIHRlc3QsIEdWYWx1ZSAqIHZhbHVlKQotewotICBMZW5ndGhUZXN0ICp0ID0gdGVzdDsKLQotICBnX3ZhbHVlX3NldF9pbnQ2NCAodmFsdWUsIHQgPyB0LT52YWx1ZSA6IC0xKTsKLX0KLQotLyoKLSAqKiogQlVGRkVSIENPVU5UICoqKgotICovCi0KLXN0YXRpYyBHUGFyYW1TcGVjICoKLWJ1ZmZlcl9jb3VudF9nZXRfc3BlYyAoY29uc3QgR3N0VGVzdEluZm8gKiBpbmZvLCBnYm9vbGVhbiBjb21wYXJlX3ZhbHVlKQotewotICBpZiAoY29tcGFyZV92YWx1ZSkgewotICAgIHJldHVybiBnX3BhcmFtX3NwZWNfaW50NjQgKCJleHBlY3RlZC1idWZmZXItY291bnQiLCAiZXhwZWN0ZWQgYnVmZmVyIGNvdW50IiwKLSAgICAgICAgImV4cGVjdGVkIG51bWJlciBvZiBidWZmZXJzIGluIHN0cmVhbSIsCi0gICAgICAgIC0xLCBHX01BWElOVDY0LCAtMSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGdfcGFyYW1fc3BlY19pbnQ2NCAoImJ1ZmZlci1jb3VudCIsICJidWZmZXIgY291bnQiLAotICAgICAgICAibnVtYmVyIG9mIGJ1ZmZlcnMgaW4gc3RyZWFtIiwgLTEsIEdfTUFYSU5UNjQsIC0xLCBHX1BBUkFNX1JFQURBQkxFKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYnVmZmVyX2NvdW50X2FkZCAoZ3BvaW50ZXIgdGVzdCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBMZW5ndGhUZXN0ICp0ID0gdGVzdDsKLQotICB0LT52YWx1ZSsrOwotfQotCi0vKgotICoqKiBUSU1FU1RBTVAgLyBEVVJBVElPTiBNQVRDSElORyAqKioKLSAqLwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDY0IGRpZmY7Ci0gIGd1aW50IGNvdW50OwotICBHc3RDbG9ja1RpbWUgZXhwZWN0ZWQ7Ci19Ci1UaW1lRHVyVGVzdDsKLQotc3RhdGljIEdQYXJhbVNwZWMgKgotdGltZWR1cl9nZXRfc3BlYyAoY29uc3QgR3N0VGVzdEluZm8gKiBpbmZvLCBnYm9vbGVhbiBjb21wYXJlX3ZhbHVlKQotewotICBpZiAoY29tcGFyZV92YWx1ZSkgewotICAgIHJldHVybiBnX3BhcmFtX3NwZWNfaW50NjQgKCJhbGxvd2VkLXRpbWVzdGFtcC1kZXZpYXRpb24iLAotICAgICAgICAiYWxsb3dlZCB0aW1lc3RhbXAgZGV2aWF0aW9uIiwKLSAgICAgICAgImFsbG93ZWQgYXZlcmFnZSBkaWZmZXJlbmNlIGluIHVzZWMgYmV0d2VlbiB0aW1lc3RhbXAgb2YgbmV4dCBidWZmZXIgIgotICAgICAgICAiYW5kIGV4cGVjdGVkIHRpbWVzdGFtcCBmcm9tIGFuYWx5emluZyBsYXN0IGJ1ZmZlciIsCi0gICAgICAgIC0xLCBHX01BWElOVDY0LCAtMSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGdfcGFyYW1fc3BlY19pbnQ2NCAoInRpbWVzdGFtcC1kZXZpYXRpb24iLAotICAgICAgICAidGltZXN0YW1wIGRldmlhdGlvbiIsCi0gICAgICAgICJhdmVyYWdlIGRpZmZlcmVuY2UgaW4gdXNlYyBiZXR3ZWVuIHRpbWVzdGFtcCBvZiBuZXh0IGJ1ZmZlciAiCi0gICAgICAgICJhbmQgZXhwZWN0ZWQgdGltZXN0YW1wIGZyb20gYW5hbHl6aW5nIGxhc3QgYnVmZmVyIiwKLSAgICAgICAgLTEsIEdfTUFYSU5UNjQsIC0xLCBHX1BBUkFNX1JFQURBQkxFKTsKLSAgfQotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLXRpbWVkdXJfbmV3IChjb25zdCBHc3RUZXN0SW5mbyAqIGluZm8pCi17Ci0gIFRpbWVEdXJUZXN0ICpyZXQgPSBnX25ldzAgKFRpbWVEdXJUZXN0LCAxKTsKLQotICByZXQtPmV4cGVjdGVkID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotdGltZWR1cl9hZGQgKGdwb2ludGVyIHRlc3QsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgVGltZUR1clRlc3QgKnQgPSB0ZXN0OwotCi0gIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUF9JU19WQUxJRCAoYnVmZmVyKSAmJgotICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHQtPmV4cGVjdGVkKSkgewotICAgIHQtPmRpZmYgKz0KLSAgICAgICAgQUJTIChHU1RfQ0xPQ0tfRElGRiAodC0+ZXhwZWN0ZWQsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSk7Ci0gICAgdC0+Y291bnQrKzsKLSAgfQotICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZmZlcikgJiYKLSAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZmZlcikpIHsKLSAgICB0LT5leHBlY3RlZCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpICsgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLSAgfSBlbHNlIHsKLSAgICB0LT5leHBlY3RlZCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi10aW1lZHVyX2ZpbmlzaCAoZ3BvaW50ZXIgdGVzdCwgR1ZhbHVlICogdmFsdWUpCi17Ci0gIFRpbWVEdXJUZXN0ICp0ID0gdGVzdDsKLQotICBpZiAoZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKSA9PSAtMSkKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXR1cm4gKHQtPmRpZmYgLyBNQVggKDEsIHQtPmNvdW50KSkgPD0gZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLXRpbWVkdXJfZ2V0X3ZhbHVlIChncG9pbnRlciB0ZXN0LCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgVGltZUR1clRlc3QgKnQgPSB0ZXN0OwotCi0gIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgdCA/ICh0LT5kaWZmIC8gTUFYICgxLCB0LT5jb3VudCkpIDogLTEpOwotfQotCi0vKgotICoqKiBNRDUgKioqCi0gKi8KLQotc3RhdGljIEdQYXJhbVNwZWMgKgotbWQ1X2dldF9zcGVjIChjb25zdCBHc3RUZXN0SW5mbyAqIGluZm8sIGdib29sZWFuIGNvbXBhcmVfdmFsdWUpCi17Ci0gIGlmIChjb21wYXJlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJleHBlY3RlZC1tZDUiLCAiZXhwZWN0ZWQgbWQ1IiwKLSAgICAgICAgImV4cGVjdGVkIG1kNSBvZiBwcm9jZXNzaW5nIHRoZSB3aG9sZSBkYXRhIiwKLSAgICAgICAgIi0tLSIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QpOwotICB9IGVsc2UgewotICAgIHJldHVybiBnX3BhcmFtX3NwZWNfc3RyaW5nICgibWQ1IiwgIm1kNSIsCi0gICAgICAgICJtZDUgb2YgcHJvY2Vzc2luZyB0aGUgd2hvbGUgZGF0YSIsICItLS0iLCBHX1BBUkFNX1JFQURBQkxFKTsKLSAgfQotfQotCi1zdGF0aWMgZ3BvaW50ZXIKLW1kNV9uZXcgKGNvbnN0IEdzdFRlc3RJbmZvICogaW5mbykKLXsKLSAgcmV0dXJuIGdfY2hlY2tzdW1fbmV3IChHX0NIRUNLU1VNX01ENSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tZDVfYWRkIChncG9pbnRlciBjaGVja3N1bSwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBnX2NoZWNrc3VtX3VwZGF0ZSAoY2hlY2tzdW0sIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbWQ1X2ZpbmlzaCAoZ3BvaW50ZXIgY2hlY2tzdW0sIEdWYWx1ZSAqIHZhbHVlKQotewotICBjb25zdCBnY2hhciAqZXhwZWN0ZWQsICpyZXN1bHQ7Ci0KLSAgZXhwZWN0ZWQgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKTsKLSAgcmVzdWx0ID0gZ19jaGVja3N1bV9nZXRfc3RyaW5nIChjaGVja3N1bSk7Ci0KLSAgaWYgKGdfc3RyX2VxdWFsIChleHBlY3RlZCwgIi0tLSIpKQotICAgIHJldHVybiBUUlVFOwotICBpZiAoZ19zdHJfZXF1YWwgKGV4cGVjdGVkLCByZXN1bHQpKQotICAgIHJldHVybiBUUlVFOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tZDVfZ2V0X3ZhbHVlIChncG9pbnRlciBjaGVja3N1bSwgR1ZhbHVlICogdmFsdWUpCi17Ci0gIGlmICghY2hlY2tzdW0pIHsKLSAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCAiLS0tIik7Ci0gIH0gZWxzZSB7Ci0gICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgZ19jaGVja3N1bV9nZXRfc3RyaW5nIChjaGVja3N1bSkpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1tZDVfZnJlZSAoZ3BvaW50ZXIgY2hlY2tzdW0pCi17Ci0gIGdfY2hlY2tzdW1fZnJlZSAoY2hlY2tzdW0pOwotfQotCi0vKgotICoqKiBURVNUSU5GTyAqKioKLSAqLwotCi1jb25zdCBHc3RUZXN0SW5mbyB0ZXN0c1tdID0gewotICB7bGVuZ3RoX2dldF9zcGVjLCBsZW5ndGhfbmV3LCBsZW5ndGhfYWRkLAotICAgICAgbGVuZ3RoX2ZpbmlzaCwgbGVuZ3RoX2dldF92YWx1ZSwgZ19mcmVlfSwKLSAge2J1ZmZlcl9jb3VudF9nZXRfc3BlYywgbGVuZ3RoX25ldywgYnVmZmVyX2NvdW50X2FkZCwKLSAgICAgIGxlbmd0aF9maW5pc2gsIGxlbmd0aF9nZXRfdmFsdWUsIGdfZnJlZX0sCi0gIHt0aW1lZHVyX2dldF9zcGVjLCB0aW1lZHVyX25ldywgdGltZWR1cl9hZGQsCi0gICAgICB0aW1lZHVyX2ZpbmlzaCwgdGltZWR1cl9nZXRfdmFsdWUsIGdfZnJlZX0sCi0gIHttZDVfZ2V0X3NwZWMsIG1kNV9uZXcsIG1kNV9hZGQsCi0gICAgICBtZDVfZmluaXNoLCBtZDVfZ2V0X3ZhbHVlLCBtZDVfZnJlZX0KLX07CmRpZmYgLS1naXQgYS9nc3QvZGVidWd1dGlscy90ZXN0cy5oIGIvZ3N0L2RlYnVndXRpbHMvdGVzdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhmYTA4OC4uMDAwMDAwMAotLS0gYS9nc3QvZGVidWd1dGlscy90ZXN0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2lmbmRlZiBfX0dTVF9URVNUU19IX18KLSNkZWZpbmUgX19HU1RfVEVTVFNfSF9fCi0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRlc3RJbmZvIEdzdFRlc3RJbmZvOwotCi1zdHJ1Y3QgX0dzdFRlc3RJbmZvCi17Ci0gIEdQYXJhbVNwZWMgKigqZ2V0X3NwZWMpIChjb25zdCBHc3RUZXN0SW5mbyAqIGluZm8sIGdib29sZWFuIGNvbXBhcmVfdmFsdWUpOwotICAgIGdwb2ludGVyICgqbmV3KSAoY29uc3QgR3N0VGVzdEluZm8gKiBpbmZvKTsKLSAgdm9pZCAoKmFkZCkgKGdwb2ludGVyIHRlc3QsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0gICAgZ2Jvb2xlYW4gKCpmaW5pc2gpIChncG9pbnRlciB0ZXN0LCBHVmFsdWUgKiB2YWx1ZSk7Ci0gIHZvaWQgKCpnZXRfdmFsdWUpIChncG9pbnRlciB0ZXN0LCBHVmFsdWUgKiB2YWx1ZSk7Ci0gIHZvaWQgKCpmcmVlKSAoZ3BvaW50ZXIgdGVzdCk7Ci19OwotCi1leHRlcm4gY29uc3QgR3N0VGVzdEluZm8gdGVzdHNbXTsKLS8qIGtlZXAgdXAgdG8gZGF0ZSEgKi8KLSNkZWZpbmUgVEVTVFNfQ09VTlQgKDQpCi0KLQotI2VuZGlmIC8qIF9fR1NUX1RFU1RTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtIGIvZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGY0ZmE5Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGRlaW50ZXJsYWNlLmxhCi0KLU9SQ19TT1VSQ0U9dHZ0aW1lCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsKLQotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfU09VUkNFUyA9IFwKLQlnc3RkZWludGVybGFjZS5jIFwKLQlnc3RkZWludGVybGFjZW1ldGhvZC5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC5jIFwKLQl0dnRpbWUvZ3JlZWR5LmMgXAotCXR2dGltZS9ncmVlZHloLmMgXAotCXR2dGltZS92ZmlyLmMgXAotCXR2dGltZS93ZWF2ZXRmZi5jIFwKLQl0dnRpbWUvd2VhdmViZmYuYyBcCi0JdHZ0aW1lL3dlYXZlLmMgXAotCXR2dGltZS9saW5lYXIuYyBcCi0JdHZ0aW1lL2xpbmVhcmJsZW5kLmMgXAotCXR2dGltZS9zY2FsZXJib2IuYwotbm9kaXN0X2xpYmdzdGRlaW50ZXJsYWNlX2xhX1NPVVJDRVMgPSAkKE9SQ19OT0RJU1RfU09VUkNFUykKLQotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoT1JDX0NGTEFHUykKLWxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKE9SQ19MSUJTKQotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBcCi0JZ3N0ZGVpbnRlcmxhY2UuaCBcCi0JZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaCBcCi0JdHZ0aW1lL21teC5oIFwKLQl0dnRpbWUvc3NlLmggXAotCXR2dGltZS9ncmVlZHloLmFzbSBcCi0JdHZ0aW1lL2dyZWVkeWhtYWNyb3MuaCBcCi0JdHZ0aW1lL3BsdWdpbnMuaCBcCi0JdHZ0aW1lL3g4Ni02NF9tYWNyb3MuaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wMEEuaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEVkZ2VBOC5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BFZGdlQS5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBMi5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBNi5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBSDIuaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQUguaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQS5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BUb3AuaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVkFILmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFZBLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU3RyYW5nZUJvYi5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwyLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL3RvbXNtb2NvbXBtYWNyb3MuaCBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvV2llcmRCb2IuaW5jCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUuaW4gYi9nc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1Yjk3OWYuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTE3NiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotIwotIyBUaGlzIGlzIGEgbWFrZWZpbGUuYW0gZnJhZ21lbnQgdG8gYnVpbGQgT3JjIGNvZGUuCi0jCi0jIERlZmluZSBPUkNfU09VUkNFIGFuZCB0aGVuIGluY2x1ZGUgdGhpcyBmaWxlLCBzdWNoIGFzOgotIwotIyAgT1JDX1NPVVJDRT1nc3RhZGRlcm9yYwotIyAgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrCi0jCi0jIFRoaXMgZnJhZ21lbnQgd2lsbCBjcmVhdGUgdG1wLW9yYy5jIGFuZCBnc3RhZGRlcm9yYy5oIGZyb20KLSMgZ3N0YWRkZXJvcmMub3JjLgotIwotIyBXaGVuICdtYWtlIGRpc3QnIGlzIHJ1biBhdCB0aGUgdG9wIGxldmVsLCBvciAnbWFrZSBvcmMtdXBkYXRlJwotIyBpbiBhIGRpcmVjdG9yeSBpbmNsdWRpbmcgdGhpcyBmcmFnbWVudCwgdGhlIGdlbmVyYXRlZCBzb3VyY2UgCi0jIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvICQoT1JDX1NPVVJDRSktZGlzdC5bY2hdLiAgVGhlc2UgZmlsZXMKLSMgc2hvdWxkIGJlIGNoZWNrZWQgaW4gdG8gZ2l0LCBzaW5jZSB0aGV5IGFyZSB1c2VkIGlmIE9yYyBpcwotIyBkaXNhYmxlZC4KLSMgCi0jIE5vdGUgdGhhdCB0aGlzIGZpbGUgZGVmaW5lcyBCVUlMVF9TT1VSQ0VTLCBzbyBhbnkgbGF0ZXIgdXNhZ2UKLSMgb2YgQlVJTFRfU09VUkNFUyBpbiB0aGUgTWFrZWZpbGUuYW0gdGhhdCBpbmNsdWRlcyB0aGlzIGZpbGUKLSMgbXVzdCB1c2UgJys9Jy4KLSMKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvZGVpbnRlcmxhY2UKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RkZWludGVybGFjZV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fX2RpcnN0YW1wID0gJChhbV9fbGVhZGluZ19kb3QpZGlyc3RhbXAKLWFtX2xpYmdzdGRlaW50ZXJsYWNlX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlLmxvIFwKLQlsaWJnc3RkZWludGVybGFjZV9sYS1nc3RkZWludGVybGFjZW1ldGhvZC5sbyBcCi0JdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXRvbXNtb2NvbXAubG8gXAotCXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHkubG8gXAotCXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHloLmxvIFwKLQl0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdmZpci5sbyBcCi0JdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZldGZmLmxvIFwKLQl0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmViZmYubG8gXAotCXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZS5sbyBcCi0JdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhci5sbyBcCi0JdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhcmJsZW5kLmxvIFwKLQl0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtc2NhbGVyYm9iLmxvCi1hbV9fb2JqZWN0c18xID0gbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG1wLW9yYy5sbwotbm9kaXN0X2xpYmdzdGRlaW50ZXJsYWNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpCi1saWJnc3RkZWludGVybGFjZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RkZWludGVybGFjZV9sYV9PQkpFQ1RTKSBcCi0JJChub2Rpc3RfbGliZ3N0ZGVpbnRlcmxhY2VfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RkZWludGVybGFjZV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RkZWludGVybGFjZV9sYV9TT1VSQ0VTKSBcCi0JJChub2Rpc3RfbGliZ3N0ZGVpbnRlcmxhY2VfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsgXAotCSQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZGVpbnRlcmxhY2UubGEKLU9SQ19TT1VSQ0UgPSB0dnRpbWUKLUVYVFJBX0RJU1QgPSAkKE9SQ19TT1VSQ0UpLm9yYwotT1JDX05PRElTVF9TT1VSQ0VTID0gdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotQlVJTFRfU09VUkNFUyA9IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLW9yY2Nfdl9nZW4gPSAkKG9yY2Nfdl9nZW5fJChWKSkKLW9yY2Nfdl9nZW5fID0gJChvcmNjX3ZfZ2VuXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotb3JjY192X2dlbl8wID0gQGVjaG8gIiAgT1JDQyAgICRAIjsKLWNwX3ZfZ2VuID0gJChjcF92X2dlbl8kKFYpKQotY3Bfdl9nZW5fID0gJChjcF92X2dlbl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKLWNwX3ZfZ2VuXzAgPSBAZWNobyAiICBDUCAgICAgJEAiOwotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfU09VUkNFUyA9IFwKLQlnc3RkZWludGVybGFjZS5jIFwKLQlnc3RkZWludGVybGFjZW1ldGhvZC5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC5jIFwKLQl0dnRpbWUvZ3JlZWR5LmMgXAotCXR2dGltZS9ncmVlZHloLmMgXAotCXR2dGltZS92ZmlyLmMgXAotCXR2dGltZS93ZWF2ZXRmZi5jIFwKLQl0dnRpbWUvd2VhdmViZmYuYyBcCi0JdHZ0aW1lL3dlYXZlLmMgXAotCXR2dGltZS9saW5lYXIuYyBcCi0JdHZ0aW1lL2xpbmVhcmJsZW5kLmMgXAotCXR2dGltZS9zY2FsZXJib2IuYwotCi1ub2Rpc3RfbGliZ3N0ZGVpbnRlcmxhY2VfbGFfU09VUkNFUyA9ICQoT1JDX05PRElTVF9TT1VSQ0VTKQotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoT1JDX0NGTEFHUykKLQotbGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoT1JDX0xJQlMpCi0KLWxpYmdzdGRlaW50ZXJsYWNlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RkZWludGVybGFjZS5oIFwKLQlnc3RkZWludGVybGFjZW1ldGhvZC5oIFwKLQl0dnRpbWUvbW14LmggXAotCXR2dGltZS9zc2UuaCBcCi0JdHZ0aW1lL2dyZWVkeWguYXNtIFwKLQl0dnRpbWUvZ3JlZWR5aG1hY3Jvcy5oIFwKLQl0dnRpbWUvcGx1Z2lucy5oIFwKLQl0dnRpbWUveDg2LTY0X21hY3Jvcy5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3AwQS5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BCb3R0b20uaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wRWRnZUE4LmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEVkZ2VBLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEEyLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEE2LmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEFIMi5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBSC5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFRvcC5pbmMgXAotCXR2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BWQUguaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVkEuaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9TdHJhbmdlQm9iLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbDIuaW5jIFwKLQl0dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYyBcCi0JdHZ0aW1lL3RvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oIFwKLQl0dnRpbWUvdG9tc21vY29tcC9XaWVyZEJvYi5pbmMKLQotYWxsOiAkKEJVSUxUX1NPVVJDRVMpCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vb3JjLm1hayAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvZGVpbnRlcmxhY2UvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2RlaW50ZXJsYWNlL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotdHZ0aW1lLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSB0dnRpbWUKLQlAOiA+IHR2dGltZS8kKGFtX19kaXJzdGFtcCkKLXR2dGltZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIHR2dGltZS8kKERFUERJUikKLQlAOiA+IHR2dGltZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG9tc21vY29tcC5sbzogdHZ0aW1lLyQoYW1fX2RpcnN0YW1wKSBcCi0JdHZ0aW1lLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHkubG86IHR2dGltZS8kKGFtX19kaXJzdGFtcCkgXAotCXR2dGltZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5aC5sbzogdHZ0aW1lLyQoYW1fX2RpcnN0YW1wKSBcCi0JdHZ0aW1lLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS12ZmlyLmxvOiB0dnRpbWUvJChhbV9fZGlyc3RhbXApIFwKLQl0dnRpbWUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZldGZmLmxvOiB0dnRpbWUvJChhbV9fZGlyc3RhbXApIFwKLQl0dnRpbWUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlYmZmLmxvOiB0dnRpbWUvJChhbV9fZGlyc3RhbXApIFwKLQl0dnRpbWUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlLmxvOiB0dnRpbWUvJChhbV9fZGlyc3RhbXApIFwKLQl0dnRpbWUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhci5sbzogdHZ0aW1lLyQoYW1fX2RpcnN0YW1wKSBcCi0JdHZ0aW1lLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1saW5lYXJibGVuZC5sbzogdHZ0aW1lLyQoYW1fX2RpcnN0YW1wKSBcCi0JdHZ0aW1lLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1zY2FsZXJib2IubG86IHR2dGltZS8kKGFtX19kaXJzdGFtcCkgXAotCXR2dGltZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYmdzdGRlaW50ZXJsYWNlLmxhOiAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX09CSkVDVFMpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGRlaW50ZXJsYWNlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RkZWludGVybGFjZV9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfT0JKRUNUUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQktcm0gLWYgdHZ0aW1lLyouJChPQkpFWFQpCi0JLXJtIC1mIHR2dGltZS8qLmxvCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1nc3RkZWludGVybGFjZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlbWV0aG9kLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG1wLW9yYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHloLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1saW5lYXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhcmJsZW5kLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1zY2FsZXJib2IuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXRvbXNtb2NvbXAuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXZmaXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZWJmZi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmV0ZmYuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlLmxvOiBnc3RkZWludGVybGFjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1nc3RkZWludGVybGFjZS5UcG8gLWMgLW8gbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3N0ZGVpbnRlcmxhY2UubG8gYHRlc3QgLWYgJ2dzdGRlaW50ZXJsYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRlaW50ZXJsYWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlLlRwbyAkKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3N0ZGVpbnRlcmxhY2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGVpbnRlcmxhY2UuYycgb2JqZWN0PSdsaWJnc3RkZWludGVybGFjZV9sYS1nc3RkZWludGVybGFjZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlLmxvIGB0ZXN0IC1mICdnc3RkZWludGVybGFjZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZWludGVybGFjZS5jCi0KLWxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlbWV0aG9kLmxvOiBnc3RkZWludGVybGFjZW1ldGhvZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlbWV0aG9kLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1nc3RkZWludGVybGFjZW1ldGhvZC5UcG8gLWMgLW8gbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3N0ZGVpbnRlcmxhY2VtZXRob2QubG8gYHRlc3QgLWYgJ2dzdGRlaW50ZXJsYWNlbWV0aG9kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRlaW50ZXJsYWNlbWV0aG9kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlbWV0aG9kLlRwbyAkKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3N0ZGVpbnRlcmxhY2VtZXRob2QuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYycgb2JqZWN0PSdsaWJnc3RkZWludGVybGFjZV9sYS1nc3RkZWludGVybGFjZW1ldGhvZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlaW50ZXJsYWNlX2xhLWdzdGRlaW50ZXJsYWNlbWV0aG9kLmxvIGB0ZXN0IC1mICdnc3RkZWludGVybGFjZW1ldGhvZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkZWludGVybGFjZW1ldGhvZC5jCi0KLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS10b21zbW9jb21wLmxvOiB0dnRpbWUvdG9tc21vY29tcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS10b21zbW9jb21wLmxvIC1NRCAtTVAgLU1GIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG9tc21vY29tcC5UcG8gLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXRvbXNtb2NvbXAubG8gYHRlc3QgLWYgJ3R2dGltZS90b21zbW9jb21wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR2dGltZS90b21zbW9jb21wLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS10b21zbW9jb21wLlRwbyB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXRvbXNtb2NvbXAuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndHZ0aW1lL3RvbXNtb2NvbXAuYycgb2JqZWN0PSd0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG9tc21vY29tcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS10b21zbW9jb21wLmxvIGB0ZXN0IC1mICd0dnRpbWUvdG9tc21vY29tcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvdG9tc21vY29tcC5jCi0KLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHkubG86IHR2dGltZS9ncmVlZHkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5LmxvIC1NRCAtTVAgLU1GIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5LlRwbyAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5LmxvIGB0ZXN0IC1mICd0dnRpbWUvZ3JlZWR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR2dGltZS9ncmVlZHkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWdyZWVkeS5UcG8gdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndHZ0aW1lL2dyZWVkeS5jJyBvYmplY3Q9J3R2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5LmxvIGB0ZXN0IC1mICd0dnRpbWUvZ3JlZWR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR2dGltZS9ncmVlZHkuYwotCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5aC5sbzogdHZ0aW1lL2dyZWVkeWguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5aC5sbyAtTUQgLU1QIC1NRiB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWdyZWVkeWguVHBvIC1jIC1vIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHloLmxvIGB0ZXN0IC1mICd0dnRpbWUvZ3JlZWR5aC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvZ3JlZWR5aC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5aC5UcG8gdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1ncmVlZHloLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R2dGltZS9ncmVlZHloLmMnIG9iamVjdD0ndHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWdyZWVkeWgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtZ3JlZWR5aC5sbyBgdGVzdCAtZiAndHZ0aW1lL2dyZWVkeWguYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHZ0aW1lL2dyZWVkeWguYwotCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdmZpci5sbzogdHZ0aW1lL3ZmaXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdmZpci5sbyAtTUQgLU1QIC1NRiB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXZmaXIuVHBvIC1jIC1vIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS12ZmlyLmxvIGB0ZXN0IC1mICd0dnRpbWUvdmZpci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvdmZpci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdmZpci5UcG8gdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS12ZmlyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R2dGltZS92ZmlyLmMnIG9iamVjdD0ndHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXZmaXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdmZpci5sbyBgdGVzdCAtZiAndHZ0aW1lL3ZmaXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHZ0aW1lL3ZmaXIuYwotCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmV0ZmYubG86IHR2dGltZS93ZWF2ZXRmZi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZXRmZi5sbyAtTUQgLU1QIC1NRiB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZldGZmLlRwbyAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmV0ZmYubG8gYHRlc3QgLWYgJ3R2dGltZS93ZWF2ZXRmZi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvd2VhdmV0ZmYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZldGZmLlRwbyB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZldGZmLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R2dGltZS93ZWF2ZXRmZi5jJyBvYmplY3Q9J3R2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZXRmZi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZXRmZi5sbyBgdGVzdCAtZiAndHZ0aW1lL3dlYXZldGZmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR2dGltZS93ZWF2ZXRmZi5jCi0KLXR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZWJmZi5sbzogdHZ0aW1lL3dlYXZlYmZmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlYmZmLmxvIC1NRCAtTVAgLU1GIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmViZmYuVHBvIC1jIC1vIHR2dGltZS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZWJmZi5sbyBgdGVzdCAtZiAndHZ0aW1lL3dlYXZlYmZmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR2dGltZS93ZWF2ZWJmZi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmViZmYuVHBvIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmViZmYuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndHZ0aW1lL3dlYXZlYmZmLmMnIG9iamVjdD0ndHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlYmZmLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlYmZmLmxvIGB0ZXN0IC1mICd0dnRpbWUvd2VhdmViZmYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHZ0aW1lL3dlYXZlYmZmLmMKLQotdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlLmxvOiB0dnRpbWUvd2VhdmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmUubG8gLU1EIC1NUCAtTUYgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZS5UcG8gLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXdlYXZlLmxvIGB0ZXN0IC1mICd0dnRpbWUvd2VhdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHZ0aW1lL3dlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZS5UcG8gdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS13ZWF2ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0dnRpbWUvd2VhdmUuYycgb2JqZWN0PSd0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtd2VhdmUubG8gYHRlc3QgLWYgJ3R2dGltZS93ZWF2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvd2VhdmUuYwotCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtbGluZWFyLmxvOiB0dnRpbWUvbGluZWFyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhci5sbyAtTUQgLU1QIC1NRiB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhci5UcG8gLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhci5sbyBgdGVzdCAtZiAndHZ0aW1lL2xpbmVhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvbGluZWFyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1saW5lYXIuVHBvIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtbGluZWFyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R2dGltZS9saW5lYXIuYycgb2JqZWN0PSd0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtbGluZWFyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhci5sbyBgdGVzdCAtZiAndHZ0aW1lL2xpbmVhci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvbGluZWFyLmMKLQotdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhcmJsZW5kLmxvOiB0dnRpbWUvbGluZWFyYmxlbmQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtbGluZWFyYmxlbmQubG8gLU1EIC1NUCAtTUYgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1saW5lYXJibGVuZC5UcG8gLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLWxpbmVhcmJsZW5kLmxvIGB0ZXN0IC1mICd0dnRpbWUvbGluZWFyYmxlbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHZ0aW1lL2xpbmVhcmJsZW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1saW5lYXJibGVuZC5UcG8gdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1saW5lYXJibGVuZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0dnRpbWUvbGluZWFyYmxlbmQuYycgb2JqZWN0PSd0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtbGluZWFyYmxlbmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtbGluZWFyYmxlbmQubG8gYHRlc3QgLWYgJ3R2dGltZS9saW5lYXJibGVuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvbGluZWFyYmxlbmQuYwotCi10dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtc2NhbGVyYm9iLmxvOiB0dnRpbWUvc2NhbGVyYm9iLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkZWludGVybGFjZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkZWludGVybGFjZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXNjYWxlcmJvYi5sbyAtTUQgLU1QIC1NRiB0dnRpbWUvJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXNjYWxlcmJvYi5UcG8gLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXNjYWxlcmJvYi5sbyBgdGVzdCAtZiAndHZ0aW1lL3NjYWxlcmJvYi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvc2NhbGVyYm9iLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgdHZ0aW1lLyQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS1zY2FsZXJib2IuVHBvIHR2dGltZS8kKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtc2NhbGVyYm9iLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R2dGltZS9zY2FsZXJib2IuYycgb2JqZWN0PSd0dnRpbWUvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtc2NhbGVyYm9iLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdHZ0aW1lL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXNjYWxlcmJvYi5sbyBgdGVzdCAtZiAndHZ0aW1lL3NjYWxlcmJvYi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dnRpbWUvc2NhbGVyYm9iLmMKLQotbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG1wLW9yYy5sbzogdG1wLW9yYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZGVpbnRlcmxhY2VfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGRlaW50ZXJsYWNlX2xhLXRtcC1vcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGRlaW50ZXJsYWNlX2xhLXRtcC1vcmMuVHBvIC1jIC1vIGxpYmdzdGRlaW50ZXJsYWNlX2xhLXRtcC1vcmMubG8gYHRlc3QgLWYgJ3RtcC1vcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdG1wLW9yYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkZWludGVybGFjZV9sYS10bXAtb3JjLlRwbyAkKERFUERJUikvbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG1wLW9yYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0bXAtb3JjLmMnIG9iamVjdD0nbGliZ3N0ZGVpbnRlcmxhY2VfbGEtdG1wLW9yYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRlaW50ZXJsYWNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGRlaW50ZXJsYWNlX2xhLXRtcC1vcmMubG8gYHRlc3QgLWYgJ3RtcC1vcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdG1wLW9yYy5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0JLXJtIC1yZiB0dnRpbWUvLmxpYnMgdHZ0aW1lL19saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKLQkgIGRpc3QtaG9vawotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0JLXJtIC1mIHR2dGltZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0JLXJtIC1mIHR2dGltZS8kKGFtX19kaXJzdGFtcCkKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi0JLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKLQljbGVhbi1wbHVnaW5MVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikgdHZ0aW1lLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpIHR2dGltZS8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBhbGwgY2hlY2sgaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0LWhvb2sgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotb3JjLXVwZGF0ZTogdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1pbmRlbnQgdG1wLW9yYy5jCi0JY3AgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCWNwICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmgKLQotQEhBVkVfT1JDQ19UUlVFQHRtcC1vcmMuYzogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi1ASEFWRV9PUkNDX1RSVUVACSQob3JjY192X2dlbikkKE9SQ0MpICQoT1JDQ19GTEFHUykgLS1pbXBsZW1lbnRhdGlvbiAtLWluY2x1ZGUgZ2xpYi5oIC1vIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLQotQEhBVkVfT1JDQ19UUlVFQCQoT1JDX1NPVVJDRSkuaDogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi1ASEFWRV9PUkNDX1RSVUVACSQob3JjY192X2dlbikkKE9SQ0MpICQoT1JDQ19GTEFHUykgLS1oZWFkZXIgLS1pbmNsdWRlIGdsaWIuaCAtbyAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjCi1ASEFWRV9PUkNDX0ZBTFNFQHRtcC1vcmMuYzogJChzcmNkaXIpLyQoT1JDX1NPVVJDRSkub3JjICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotQEhBVkVfT1JDQ19GQUxTRUAJJChjcF92X2dlbiljcCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgdG1wLW9yYy5jCi0KLUBIQVZFX09SQ0NfRkFMU0VAJChPUkNfU09VUkNFKS5oOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi1ASEFWRV9PUkNDX0ZBTFNFQAkkKGNwX3ZfZ2VuKWNwICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCAkKE9SQ19TT1VSQ0UpLmgKLQotY2xlYW4tbG9jYWw6IGNsZWFuLW9yYwotLlBIT05ZOiBjbGVhbi1vcmMKLWNsZWFuLW9yYzoKLQlybSAtZiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0KLWRpc3QtaG9vazogZGlzdC1ob29rLW9yYwotLlBIT05ZOiBkaXN0LWhvb2stb3JjCi0KLSMgd2UgdHJ5IGFuZCBjb3B5IHVwZGF0ZWQgb3JjIC1kaXN0IGZpbGVzIGJlbG93LCBidXQgZG9uJ3QgZmFpbCBpZiBpdAotIyBkb2Vzbid0IHdvcmsgYXMgdGhlIHNyY2RpciBtaWdodCBub3QgYmUgd3JpdGFibGUKLWRpc3QtaG9vay1vcmM6IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtaW5kZW50IHRtcC1vcmMuYwotCXJtIC1mIHRtcC1vcmMuY34KLQljbXAgLXMgdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB8fCBcCi0JICBjcCB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHx8IHRydWUKLQljbXAgLXMgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaCB8fCBcCi0JICBjcCAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oIHx8IHRydWUKLQljcCAtcCB0bXAtb3JjLmMgJChkaXN0ZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYwotCWNwIC1wICQoT1JDX1NPVVJDRSkuaCAkKGRpc3RkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZS5jIGIvZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwM2I3NWUuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTM2ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBNYXJ0aW4gRWlrZXJtYW5uIDxtZWlrZXJAdXBiLmRlPgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDExIFJvYmVydCBTd2FpbiA8cm9iZXJ0LnN3YWluQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1kZWludGVybGFjZQotICoKLSAqIGRlaW50ZXJsYWNlIGRlaW50ZXJsYWNlcyBpbnRlcmxhY2VkIHZpZGVvIGZyYW1lcyB0byBwcm9ncmVzc2l2ZSB2aWRlbyBmcmFtZXMuCi0gKiBGb3IgdGhpcyBkaWZmZXJlbnQgYWxnb3JpdGhtcyBjYW4gYmUgc2VsZWN0ZWQgd2hpY2ggd2lsbCBiZSBkZXNjcmliZWQgbGF0ZXIuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249L3BhdGgvdG8vZmlsZSAhIGRlY29kZWJpbiAhIHZpZGVvY29udmVydCAhIGRlaW50ZXJsYWNlICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBwaXBlbGluZSBkZWludGVybGFjZXMgYSB2aWRlbyBmaWxlIHdpdGggdGhlIGRlZmF1bHQgZGVpbnRlcmxhY2luZyBvcHRpb25zLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RkZWludGVybGFjZS5oIgotI2luY2x1ZGUgInR2dGltZS9wbHVnaW5zLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfT1JDCi0jaW5jbHVkZSA8b3JjL29yYy5oPgotI2VuZGlmCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGRlaW50ZXJsYWNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChkZWludGVybGFjZV9kZWJ1ZykKLQotLyogUHJvcGVydGllcyAqLwotCi0jZGVmaW5lIERFRkFVTFRfTU9ERSAgICAgICAgICAgIEdTVF9ERUlOVEVSTEFDRV9NT0RFX0FVVE8KLSNkZWZpbmUgREVGQVVMVF9NRVRIT0QgICAgICAgICAgR1NUX0RFSU5URVJMQUNFX0xJTkVBUgotI2RlZmluZSBERUZBVUxUX0ZJRUxEUyAgICAgICAgICBHU1RfREVJTlRFUkxBQ0VfQUxMCi0jZGVmaW5lIERFRkFVTFRfRklFTERfTEFZT1VUICAgIEdTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQVVUTwotI2RlZmluZSBERUZBVUxUX0xPQ0tJTkcgICAgICAgICBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19OT05FCi0jZGVmaW5lIERFRkFVTFRfSUdOT1JFX09CU0NVUkUgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9EUk9QX09SUEhBTlMgICAgVFJVRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9NT0RFLAotICBQUk9QX01FVEhPRCwKLSAgUFJPUF9GSUVMRFMsCi0gIFBST1BfRklFTERfTEFZT1VULAotICBQUk9QX0xPQ0tJTkcsCi0gIFBST1BfSUdOT1JFX09CU0NVUkUsCi0gIFBST1BfRFJPUF9PUlBIQU5TCi19OwotCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfUCAgICAoMTw8MCkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX0JVRkZFUl9TVEFURV9JICAgICgxPDwxKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfQlVGRkVSX1NUQVRFX1RDX0IgKDE8PDIpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfVCAoMTw8MykKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX0JVRkZFUl9TVEFURV9UQ19QICgxPDw0KQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfQlVGRkVSX1NUQVRFX1RDX00gKDE8PDUpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfUkZGICAoMTw8NikKLQotI2RlZmluZSBHU1RfT05FIFwKLSAgKEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfVCB8IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfQikKLSNkZWZpbmUgR1NUX1BSRyBcCi0gIChHU1RfREVJTlRFUkxBQ0VfQlVGRkVSX1NUQVRFX1AgfCBHU1RfREVJTlRFUkxBQ0VfQlVGRkVSX1NUQVRFX1RDX1ApCi0jZGVmaW5lIEdTVF9JTlQgXAotICAoR1NUX0RFSU5URVJMQUNFX0JVRkZFUl9TVEFURV9JIHwgR1NUX0RFSU5URVJMQUNFX0JVRkZFUl9TVEFURV9UQ19NKQotI2RlZmluZSBHU1RfUkZGIChHU1RfREVJTlRFUkxBQ0VfQlVGRkVSX1NUQVRFX1JGRikKLQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfT0JTQ1VSRV9USFJFU0hPTEQgNQotCi1zdGF0aWMgY29uc3QgVGVsZWNpbmVQYXR0ZXJuIHRlbGVjaW5lX3BhdHRlcm5zW10gPSB7Ci0gIC8qIDYwaSAtPiA2MHAgb3IgNTBpIC0+IDUwcCAoTk9URSBUSEUgV0VJUkQgUkFUSU9TKSAqLwotICB7IjE6MSIsIDEsIDIsIDEsIHtHU1RfT05FLH19LAotICAvKiA2MGkgLT4gMzBwIG9yIDUwaSAtPiAyNXAgKi8KLSAgeyIyOjIiLCAxLCAxLCAxLCB7R1NUX0lOVCx9fSwKLSAgLyogNjBpIHRlbGVjaW5lIC0+IDI0cCAqLwotICB7IjI6My1SRkYiLCA0LCA0LCA1LCB7R1NUX1BSRywgR1NUX1JGRiwgR1NUX1BSRywgR1NUX1JGRix9fSwKLSAgeyIyOjMiLCA1LCA0LCA1LCB7R1NUX1BSRywgR1NUX1BSRywgR1NUX09ORSwgR1NUX09ORSwgR1NUX1BSRyx9fSwKLSAgeyIzOjI6MjozLVJGRiIsIDQsIDQsIDUsIHtHU1RfUkZGLCBHU1RfUFJHLCBHU1RfUFJHLCBHU1RfUkZGLH19LAotICB7IjM6MjoyOjMiLCA1LCA0LCA1LCB7R1NUX1BSRywgR1NUX09ORSwgR1NUX0lOVCwgR1NUX09ORSwgR1NUX1BSRyx9fSwKLSAgLyogZmllbGRhbmFseXNpcyBzaG91bGQgaW5kaWNhdGUgdGhpcyB1c2luZyBSRkYgb24gdGhlIHNlY29uZCBhbmQgZm91cnRoCi0gICAqIGJ1ZmZlcnMgYW5kIG5vdCBzZW5kIHRoZSB0aGlyZCBidWZmZXIgYXQgYWxsLiBpdCB3aWxsIGJlIGlkZW50aWZpZWQgYXMKLSAgICogMzoyOjI6My1SRkYgKi8KLSAgLyogeyIyOjM6MzoyIiwgNSwgNCwgNSwge0dTVF9QUkcsIEdTVF9QUkcsIEdTVF9EUlAsIEdTVF9QUkcsIEdTVF9QUkcsfX0sICovCi0KLSAgLyogVGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgb2JzY3VyZSBhbmQgYXJlIGlnbm9yZWQgaWYgaWdub3JlLW9ic2N1cmUgaXMKLSAgICogc2V0IHRvIHRydWUuIElmIGFueSBwYXR0ZXJucyBhcmUgYWRkZWQgYWJvdmUgdGhpcyBsaW5lLCBjaGVjayBhbmQgZWRpdAotICAgKiBHU1RfREVJTlRFUkxBQ0VfT0JTQ1VSRV9USFJFU0hPTEQgKi8KLQotICAvKiA1MGkgRXVybyBwdWxsZG93biAtPiAyNHAgKi8KLSAgeyIyLTExOjMiLCAyNSwgMjQsIDI1LCB7R1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywKLSAgICAgICAgICAgICAgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywKLSAgICAgICAgICAgICAgR1NUX1BSRywgR1NUX1BSRywgR1NUX09ORSwgR1NUX0lOVCwgR1NUX0lOVCwKLSAgICAgICAgICAgICAgR1NUX0lOVCwgR1NUX0lOVCwgR1NUX0lOVCwgR1NUX0lOVCwgR1NUX0lOVCwKLSAgICAgICAgICBHU1RfSU5ULCBHU1RfSU5ULCBHU1RfSU5ULCBHU1RfT05FLCBHU1RfUFJHLH19LAotI2lmIDAKLSAgLyogaGF2ZW4ndCBmaWd1cmVkIG91dCBob3cgZmllbGRhbmFseXNpcyBzaG91bGQgaGFuZGxlIHRoZXNlIHlldCAqLwotICAvKiA2MGkgKE5UU0MgMzAwMDAvMTAwMSkgLT4gMTZwICgxNjAwMC8xMDAxKSAqLwotICB7IjM6NC0zIiwgMTUsIDgsIDE1LCB7R1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywKLSAgICAgICAgICAgICAgR1NUX0RSUCwgR1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywgR1NUX0RSUCwKLSAgICAgICAgICBHU1RfUFJHLCBHU1RfRFJQLCBHU1RfUFJHLCBHU1RfRFJQLCBHU1RfUFJHLH19LAotICAvKiA1MGkgKFBBTCkgLT4gMTZwICovCi0gIHsiMy03OjQiLCAyNSwgMTYsIDI1LCB7R1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywgR1NUX1BSRywgR1NUX0RSUCwKLSAgICAgICAgICAgICAgR1NUX1BSRywgR1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywgR1NUX1BSRywKLSAgICAgICAgICAgICAgR1NUX0RSUCwgR1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywgR1NUX1BSRywKLSAgICAgICAgICAgICAgR1NUX0RSUCwgR1NUX1BSRywgR1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRywKLSAgICAgICAgICBHU1RfUFJHLCBHU1RfRFJQLCBHU1RfUFJHLCBHU1RfUFJHLCBHU1RfRFJQLH19LAotICAvKiBOVFNDIDYwaSAtPiAxOHAgKi8KLSAgeyIzOjM6NCIsIDUsIDMsIDUsIHtHU1RfUFJHLCBHU1RfRFJQLCBHU1RfUFJHLCBHU1RfRFJQLCBHU1RfUFJHLH19LAotICAvKiBOVFNDIDYwaSAtPiAyMHAgKi8KLSAgeyIzOjMiLCAzLCAyLCAzLCB7R1NUX1BSRywgR1NUX0RSUCwgR1NUX1BSRyx9fSwKLSNlbmRpZgotICAvKiBOVFNDIDYwaSAtPiAyNy41ICovCi0gIHsiMzoyLTQiLCAxMSwgMTAsIDExLCB7R1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywKLSAgICAgICAgICAgICAgR1NUX1BSRywgR1NUX09ORSwgR1NUX0lOVCwgR1NUX0lOVCwgR1NUX0lOVCwKLSAgICAgICAgICBHU1RfT05FLH19LAotICAvKiBQQUwgNTBpIC0+IDI3LjUgKi8KLSAgeyIxOjItNCIsIDksIDksIDEwLCB7R1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX1BSRywgR1NUX0lOVCwKLSAgICAgICAgICBHU1RfSU5ULCBHU1RfSU5ULCBHU1RfSU5ULCBHU1RfSU5ULH19LAotfTsKLQotc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgbWV0aG9kc190eXBlc1tdID0gewotICB7R1NUX0RFSU5URVJMQUNFX1RPTVNNT0NPTVAsICJNb3Rpb24gQWRhcHRpdmU6IE1vdGlvbiBTZWFyY2giLAotICAgICAgInRvbXNtb2NvbXAifSwKLSAge0dTVF9ERUlOVEVSTEFDRV9HUkVFRFlfSCwgIk1vdGlvbiBBZGFwdGl2ZTogQWR2YW5jZWQgRGV0ZWN0aW9uIiwKLSAgICAgICJncmVlZHloIn0sCi0gIHtHU1RfREVJTlRFUkxBQ0VfR1JFRURZX0wsICJNb3Rpb24gQWRhcHRpdmU6IFNpbXBsZSBEZXRlY3Rpb24iLCAiZ3JlZWR5bCJ9LAotICB7R1NUX0RFSU5URVJMQUNFX1ZGSVIsICJCbHVyIFZlcnRpY2FsIiwgInZmaXIifSwKLSAge0dTVF9ERUlOVEVSTEFDRV9MSU5FQVIsICJMaW5lYXIiLCAibGluZWFyIn0sCi0gIHtHU1RfREVJTlRFUkxBQ0VfTElORUFSX0JMRU5ELCAiQmx1cjogVGVtcG9yYWwgKERvIE5vdCBVc2UpIiwKLSAgICAgICJsaW5lYXJibGVuZCJ9LAotICB7R1NUX0RFSU5URVJMQUNFX1NDQUxFUl9CT0IsICJEb3VibGUgbGluZXMiLCAic2NhbGVyYm9iIn0sCi0gIHtHU1RfREVJTlRFUkxBQ0VfV0VBVkUsICJXZWF2ZSAoRG8gTm90IFVzZSkiLCAid2VhdmUifSwKLSAge0dTVF9ERUlOVEVSTEFDRV9XRUFWRV9URkYsICJQcm9ncmVzc2l2ZTogVG9wIEZpZWxkIEZpcnN0IChEbyBOb3QgVXNlKSIsCi0gICAgICAid2VhdmV0ZmYifSwKLSAge0dTVF9ERUlOVEVSTEFDRV9XRUFWRV9CRkYsICJQcm9ncmVzc2l2ZTogQm90dG9tIEZpZWxkIEZpcnN0IChEbyBOb3QgVXNlKSIsCi0gICAgICAid2VhdmViZmYifSwKLSAgezAsIE5VTEwsIE5VTEx9LAotfTsKLQotc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgbG9ja2luZ190eXBlc1tdID0gewotICB7R1NUX0RFSU5URVJMQUNFX0xPQ0tJTkdfTk9ORSwKLSAgICAgICJObyBwYXR0ZXJuIGxvY2tpbmciLCAibm9uZSJ9LAotICB7R1NUX0RFSU5URVJMQUNFX0xPQ0tJTkdfQVVUTywKLSAgICAgICAgIkNob29zZSBwYXNzaXZlL2FjdGl2ZSBsb2NraW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIHVwc3RyZWFtIGlzIGxpdmUiLAotICAgICAgImF1dG8ifSwKLSAge0dTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX0FDVElWRSwKLSAgICAgICAgIkJsb2NrIHVudGlsIHBhdHRlcm4tbG9ja2VkLiBVc2UgYWNjdXJhdGUgdGltZXN0YW1wIGludGVycG9sYXRpb24gd2l0aGluIGEgcGF0dGVybiByZXBlYXQuIiwKLSAgICAgICJhY3RpdmUifSwKLSAge0dTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX1BBU1NJVkUsCi0gICAgICAgICJEbyBub3QgYmxvY2suIFVzZSBuYcOvdmUgdGltZXN0YW1wIGFkanVzdG1lbnQgdW50aWwgcGF0dGVybi1sb2NrZWQgYmFzZWQgb24gc3RhdGUgaGlzdG9yeS4iLAotICAgICAgInBhc3NpdmUifSwKLSAgezAsIE5VTEwsIE5VTEx9LAotfTsKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRFMgKGdzdF9kZWludGVybGFjZV9tZXRob2RzX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGRlaW50ZXJsYWNlX21ldGhvZHNfdHlwZSA9IDA7Ci0KLSAgaWYgKCFkZWludGVybGFjZV9tZXRob2RzX3R5cGUpIHsKLSAgICBkZWludGVybGFjZV9tZXRob2RzX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVpbnRlcmxhY2VNZXRob2RzIiwgbWV0aG9kc190eXBlcyk7Ci0gIH0KLSAgcmV0dXJuIGRlaW50ZXJsYWNlX21ldGhvZHNfdHlwZTsKLX0KLQotI2RlZmluZSBHU1RfVFlQRV9ERUlOVEVSTEFDRV9GSUVMRFMgKGdzdF9kZWludGVybGFjZV9maWVsZHNfZ2V0X3R5cGUgKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9kZWludGVybGFjZV9maWVsZHNfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBkZWludGVybGFjZV9maWVsZHNfdHlwZSA9IDA7Ci0KLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZmllbGRzX3R5cGVzW10gPSB7Ci0gICAge0dTVF9ERUlOVEVSTEFDRV9BTEwsICJBbGwgZmllbGRzIiwgImFsbCJ9LAotICAgIHtHU1RfREVJTlRFUkxBQ0VfVEYsICJUb3AgZmllbGRzIG9ubHkiLCAidG9wIn0sCi0gICAge0dTVF9ERUlOVEVSTEFDRV9CRiwgIkJvdHRvbSBmaWVsZHMgb25seSIsICJib3R0b20ifSwKLSAgICB7R1NUX0RFSU5URVJMQUNFX0ZJRUxEU19BVVRPLCAiQXV0b21hdGljYWxseSBkZXRlY3QiLCAiYXV0byJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIWRlaW50ZXJsYWNlX2ZpZWxkc190eXBlKSB7Ci0gICAgZGVpbnRlcmxhY2VfZmllbGRzX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVpbnRlcmxhY2VGaWVsZHMiLCBmaWVsZHNfdHlwZXMpOwotICB9Ci0gIHJldHVybiBkZWludGVybGFjZV9maWVsZHNfdHlwZTsKLX0KLQotI2RlZmluZSBHU1RfVFlQRV9ERUlOVEVSTEFDRV9GSUVMRF9MQVlPVVQgKGdzdF9kZWludGVybGFjZV9maWVsZF9sYXlvdXRfZ2V0X3R5cGUgKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9kZWludGVybGFjZV9maWVsZF9sYXlvdXRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBkZWludGVybGFjZV9maWVsZF9sYXlvdXRfdHlwZSA9IDA7Ci0KLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZmllbGRfbGF5b3V0X3R5cGVzW10gPSB7Ci0gICAge0dTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQVVUTywgIkF1dG8gZGV0ZWN0aW9uIiwgImF1dG8ifSwKLSAgICB7R1NUX0RFSU5URVJMQUNFX0xBWU9VVF9URkYsICJUb3AgZmllbGQgZmlyc3QiLCAidGZmIn0sCi0gICAge0dTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQkZGLCAiQm90dG9tIGZpZWxkIGZpcnN0IiwgImJmZiJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIWRlaW50ZXJsYWNlX2ZpZWxkX2xheW91dF90eXBlKSB7Ci0gICAgZGVpbnRlcmxhY2VfZmllbGRfbGF5b3V0X3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVpbnRlcmxhY2VGaWVsZExheW91dCIsCi0gICAgICAgIGZpZWxkX2xheW91dF90eXBlcyk7Ci0gIH0KLSAgcmV0dXJuIGRlaW50ZXJsYWNlX2ZpZWxkX2xheW91dF90eXBlOwotfQotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01PREVTIChnc3RfZGVpbnRlcmxhY2VfbW9kZXNfZ2V0X3R5cGUgKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9kZWludGVybGFjZV9tb2Rlc19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGRlaW50ZXJsYWNlX21vZGVzX3R5cGUgPSAwOwotCi0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIG1vZGVzX3R5cGVzW10gPSB7Ci0gICAge0dTVF9ERUlOVEVSTEFDRV9NT0RFX0FVVE8sICJBdXRvIGRldGVjdGlvbiAoYmVzdCBlZmZvcnQpIiwgImF1dG8ifSwKLSAgICB7R1NUX0RFSU5URVJMQUNFX01PREVfSU5URVJMQUNFRCwgIkZvcmNlIGRlaW50ZXJsYWNpbmciLCAiaW50ZXJsYWNlZCJ9LAotICAgIHtHU1RfREVJTlRFUkxBQ0VfTU9ERV9ESVNBQkxFRCwgIlJ1biBpbiBwYXNzdGhyb3VnaCBtb2RlIiwgImRpc2FibGVkIn0sCi0gICAge0dTVF9ERUlOVEVSTEFDRV9NT0RFX0FVVE9fU1RSSUNULCAiQXV0byBkZXRlY3Rpb24gKHN0cmljdCkiLAotICAgICAgICAiYXV0by1zdHJpY3QifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFkZWludGVybGFjZV9tb2Rlc190eXBlKSB7Ci0gICAgZGVpbnRlcmxhY2VfbW9kZXNfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3REZWludGVybGFjZU1vZGVzIiwgbW9kZXNfdHlwZXMpOwotICB9Ci0gIHJldHVybiBkZWludGVybGFjZV9tb2Rlc190eXBlOwotfQotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX0xPQ0tJTkcgKGdzdF9kZWludGVybGFjZV9sb2NraW5nX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfZGVpbnRlcmxhY2VfbG9ja2luZ19nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGRlaW50ZXJsYWNlX2xvY2tpbmdfdHlwZSA9IDA7Ci0KLSAgaWYgKCFkZWludGVybGFjZV9sb2NraW5nX3R5cGUpIHsKLSAgICBkZWludGVybGFjZV9sb2NraW5nX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RGVpbnRlcmxhY2VMb2NraW5nIiwgbG9ja2luZ190eXBlcyk7Ci0gIH0KLQotICByZXR1cm4gZGVpbnRlcmxhY2VfbG9ja2luZ190eXBlOwotfQotCi0jZGVmaW5lIERFSU5URVJMQUNFX1ZJREVPX0ZPUk1BVFMgXAotICAgICJ7IEFZVVYsIEFSR0IsIEFCR1IsIFJHQkEsIEJHUkEsIFk0NDQsIHhSR0IsIHhCR1IsIFJHQngsIEJHUngsIFJHQiwgIiBcCi0gICAgIkJHUiwgWVVZMiwgWVZZVSwgVVlWWSwgWTQyQiwgSTQyMCwgWVYxMiwgWTQxQiwgTlYxMiwgTlYyMSB9IgotCi0jZGVmaW5lIERFSU5URVJMQUNFX0NBUFMgR1NUX1ZJREVPX0NBUFNfTUFLRShERUlOVEVSTEFDRV9WSURFT19GT1JNQVRTKQotCi0jZGVmaW5lIERFSU5URVJMQUNFX0FMTF9DQVBTIERFSU5URVJMQUNFX0NBUFMgIjsiIFwKLSAgICBHU1RfVklERU9fQ0FQU19NQUtFX1dJVEhfRkVBVFVSRVMgKCJBTlkiLCBHU1RfVklERU9fRk9STUFUU19BTEwpCi0KLXN0YXRpYyBHc3RTdGF0aWNDYXBzIHByb2dyZXNzaXZlX2NhcHMgPQotR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcoQU5ZKSxpbnRlcmxhY2UtbW9kZT0oc3RyaW5nKXByb2dyZXNzaXZlIik7Ci1zdGF0aWMgR3N0U3RhdGljQ2FwcyBkZWludGVybGFjZV9jYXBzID0gR1NUX1NUQVRJQ19DQVBTIChERUlOVEVSTEFDRV9DQVBTKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbCA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKERFSU5URVJMQUNFX0FMTF9DQVBTKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChERUlOVEVSTEFDRV9BTExfQ0FQUykKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfZGVpbnRlcmxhY2VfZmluYWxpemUgKEdPYmplY3QgKiBzZWxmKTsKLXN0YXRpYyB2b2lkIGdzdF9kZWludGVybGFjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBzZWxmLCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2RlaW50ZXJsYWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIHNlbGYsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfZGVpbnRlcmxhY2VfZ2V0Y2FwcyAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RlaW50ZXJsYWNlX3NldGNhcHMgKEdzdERlaW50ZXJsYWNlICogc2VsZiwgR3N0UGFkICogcGFkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGVpbnRlcmxhY2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RlaW50ZXJsYWNlX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2RlaW50ZXJsYWNlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9kZWludGVybGFjZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIGdib29sZWFuIGdzdF9kZWludGVybGFjZV9zZXRfYWxsb2NhdGlvbiAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLAotICAgIEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGVpbnRlcmxhY2Vfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGVpbnRlcmxhY2Vfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2RlaW50ZXJsYWNlX291dHB1dF9mcmFtZSAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLAotICAgIGdib29sZWFuIGZsdXNoaW5nKTsKLXN0YXRpYyB2b2lkIGdzdF9kZWludGVybGFjZV9yZXNldCAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmKTsKLXN0YXRpYyB2b2lkIGdzdF9kZWludGVybGFjZV91cGRhdGVfcW9zIChHc3REZWludGVybGFjZSAqIHNlbGYsCi0gICAgZ2RvdWJsZSBwcm9wb3J0aW9uLCBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsIEdzdENsb2NrVGltZSB0aW1lKTsKLXN0YXRpYyB2b2lkIGdzdF9kZWludGVybGFjZV9yZXNldF9xb3MgKEdzdERlaW50ZXJsYWNlICogc2VsZik7Ci1zdGF0aWMgdm9pZCBnc3RfZGVpbnRlcmxhY2VfcmVhZF9xb3MgKEdzdERlaW50ZXJsYWNlICogc2VsZiwKLSAgICBnZG91YmxlICogcHJvcG9ydGlvbiwgR3N0Q2xvY2tUaW1lICogdGltZSk7Ci0KLSNkZWZpbmUgSVNfVEVMRUNJTkUobSkgKChtKSA9PSBHU1RfVklERU9fSU5URVJMQUNFX01PREVfTUlYRUQgJiYgc2VsZi0+cGF0dGVybiA+IDEpCi0KLS8qIEZJWE1FOiB3aGF0J3MgdGhlIHBvaW50IG9mIHRoZSBjaGlsZHByb3h5IGludGVyZmFjZSBoZXJlPyBXaGF0IGNhbiB5b3UKLSAqIGFjdHVhbGx5IGRvIHdpdGggaXQ/IFRoZSBtZXRob2Qgb2JqZWN0cyBzZWVtIHRvIGhhdmUgbm8gcHJvcGVydGllcyAqLwotI2lmIDAKLXN0YXRpYyB2b2lkIGdzdF9kZWludGVybGFjZV9jaGlsZF9wcm94eV9pbnRlcmZhY2VfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLQotc3RhdGljIHZvaWQKLV9kb19pbml0IChHVHlwZSBvYmplY3RfdHlwZSkKLXsKLSAgY29uc3QgR0ludGVyZmFjZUluZm8gY2hpbGRfcHJveHlfaW50ZXJmYWNlX2luZm8gPSB7Ci0gICAgKEdJbnRlcmZhY2VJbml0RnVuYykgZ3N0X2RlaW50ZXJsYWNlX2NoaWxkX3Byb3h5X2ludGVyZmFjZV9pbml0LAotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcmZhY2VfZmluYWxpemUgKi8KLSAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50ZXJmYWNlX2RhdGEgKi8KLSAgfTsKLQotICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKG9iamVjdF90eXBlLCBHU1RfVFlQRV9DSElMRF9QUk9YWSwKLSAgICAgICZjaGlsZF9wcm94eV9pbnRlcmZhY2VfaW5mbyk7Ci19Ci0jZW5kaWYKLQotR19ERUZJTkVfVFlQRSAoR3N0RGVpbnRlcmxhY2UsIGdzdF9kZWludGVybGFjZSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLSNkZWZpbmUgcGFyZW50X2NsYXNzIGdzdF9kZWludGVybGFjZV9wYXJlbnRfY2xhc3MKLQotc3RhdGljIGNvbnN0IHN0cnVjdAotewotICBHVHlwZSAoKmdldF90eXBlKSAodm9pZCk7Ci19IF9tZXRob2RfdHlwZXNbXSA9IHsKLSAgewotICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3RvbXNtb2NvbXBfZ2V0X3R5cGV9LCB7Ci0gIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfZ2V0X3R5cGV9LCB7Ci0gIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfZ2V0X3R5cGV9LCB7Ci0gIGdzdF9kZWludGVybGFjZV9tZXRob2RfdmZpcl9nZXRfdHlwZX0sIHsKLSAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9saW5lYXJfZ2V0X3R5cGV9LCB7Ci0gIGdzdF9kZWludGVybGFjZV9tZXRob2RfbGluZWFyX2JsZW5kX2dldF90eXBlfSwgewotICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NjYWxlcl9ib2JfZ2V0X3R5cGV9LCB7Ci0gIGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmVfZ2V0X3R5cGV9LCB7Ci0gIGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmVfdGZmX2dldF90eXBlfSwgewotICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2JmZl9nZXRfdHlwZX0KLX07Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2Vfc2V0X21ldGhvZCAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLCBHc3REZWludGVybGFjZU1ldGhvZHMgbWV0aG9kKQotewotICBHVHlwZSBtZXRob2RfdHlwZTsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlNldHRpbmcgbmV3IG1ldGhvZCAlZCIsIG1ldGhvZCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCAoJnNlbGYtPnZpbmZvKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmc2VsZi0+dmluZm8pOwotICBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQgKCZzZWxmLT52aW5mbyk7Ci0KLSAgaWYgKHNlbGYtPm1ldGhvZCkgewotICAgIGlmIChzZWxmLT5tZXRob2RfaWQgPT0gbWV0aG9kICYmCi0gICAgICAgIGdzdF9kZWludGVybGFjZV9tZXRob2Rfc3VwcG9ydGVkIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAoc2VsZi0+bWV0aG9kKSwKLSAgICAgICAgICAgIGZvcm1hdCwgd2lkdGgsIGhlaWdodCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJSZXVzaW5nIGN1cnJlbnQgbWV0aG9kIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotI2lmIDAKLSAgICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoR1NUX09CSkVDVCAoc2VsZiksCi0gICAgICAgIEdTVF9PQkpFQ1QgKHNlbGYtPm1ldGhvZCkpOwotICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1QgKHNlbGYtPm1ldGhvZCkpOwotICAgIHNlbGYtPm1ldGhvZCA9IE5VTEw7Ci0jZW5kaWYKLSAgfQotCi0gIG1ldGhvZF90eXBlID0KLSAgICAgIF9tZXRob2RfdHlwZXNbbWV0aG9kXS5nZXRfdHlwZSAhPQotICAgICAgTlVMTCA/IF9tZXRob2RfdHlwZXNbbWV0aG9kXS5nZXRfdHlwZSAoKSA6IEdfVFlQRV9JTlZBTElEOwotICBpZiAobWV0aG9kX3R5cGUgPT0gR19UWVBFX0lOVkFMSUQKLSAgICAgIHx8ICFnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3N1cHBvcnRlZCAobWV0aG9kX3R5cGUsIGZvcm1hdCwKLSAgICAgICAgICB3aWR0aCwgaGVpZ2h0KSkgewotICAgIEdUeXBlIHRtcDsKLSAgICBnaW50IGk7Ci0KLSAgICBtZXRob2RfdHlwZSA9IEdfVFlQRV9JTlZBTElEOwotCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAiTWV0aG9kIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0ZWQgZm9ybWF0Iik7Ci0gICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoX21ldGhvZF90eXBlcyk7IGkrKykgewotICAgICAgaWYgKF9tZXRob2RfdHlwZXNbaV0uZ2V0X3R5cGUgPT0gTlVMTCkKLSAgICAgICAgY29udGludWU7Ci0gICAgICB0bXAgPSBfbWV0aG9kX3R5cGVzW2ldLmdldF90eXBlICgpOwotICAgICAgaWYgKGdzdF9kZWludGVybGFjZV9tZXRob2Rfc3VwcG9ydGVkICh0bXAsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlVzaW5nIG1ldGhvZCAlZCIsIGkpOwotICAgICAgICBtZXRob2RfdHlwZSA9IHRtcDsKLSAgICAgICAgbWV0aG9kID0gaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIElmIHdlIGdldCBoZXJlIHdlIG11c3QgaGF2ZSBpbnZhbGlkIGNhcHMhICovCi0gICAgZ19hc3NlcnQgKG1ldGhvZF90eXBlICE9IEdfVFlQRV9JTlZBTElEKTsKLSAgfQotCi0gIHNlbGYtPm1ldGhvZCA9IGdfb2JqZWN0X25ldyAobWV0aG9kX3R5cGUsICJuYW1lIiwgIm1ldGhvZCIsIE5VTEwpOwotICBzZWxmLT5tZXRob2RfaWQgPSBtZXRob2Q7Ci0KLSAgZ3N0X29iamVjdF9zZXRfcGFyZW50IChHU1RfT0JKRUNUIChzZWxmLT5tZXRob2QpLCBHU1RfT0JKRUNUIChzZWxmKSk7Ci0jaWYgMAotICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKEdTVF9PQkpFQ1QgKHNlbGYpLCBHU1RfT0JKRUNUIChzZWxmLT5tZXRob2QpKTsKLSNlbmRpZgotCi0gIGlmIChzZWxmLT5tZXRob2QpCi0gICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zZXR1cCAoc2VsZi0+bWV0aG9kLCAmc2VsZi0+dmluZm8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9jbGlwX2J1ZmZlciAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIEdzdENsb2NrVGltZSBzdGFydCwgc3RvcDsKLSAgZ3VpbnQ2NCBjc3RhcnQsIGNzdG9wOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAiQ2xpcHBpbmcgYnVmZmVyIHRvIHRoZSBjdXJyZW50IHNlZ21lbnQ6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0tICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkN1cnJlbnQgc2VnbWVudDogJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgJnNlbGYtPnNlZ21lbnQpOwotCi0gIGlmIChHX1VOTElLRUxZIChzZWxmLT5zZWdtZW50LmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpKQotICAgIGdvdG8gYmVhY2g7Ci0gIGlmIChHX1VOTElLRUxZICghR1NUX0JVRkZFUl9USU1FU1RBTVBfSVNfVkFMSUQgKGJ1ZmZlcikpKQotICAgIGdvdG8gYmVhY2g7Ci0KLSAgc3RhcnQgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKTsKLSAgc3RvcCA9IHN0YXJ0ICsgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICBpZiAoIShyZXQgPSBnc3Rfc2VnbWVudF9jbGlwICgmc2VsZi0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICBzdGFydCwgc3RvcCwgJmNzdGFydCwgJmNzdG9wKSkpCi0gICAgZ290byBiZWFjaDsKLQotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IGNzdGFydDsKLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChjc3RvcCkpCi0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IGNzdG9wIC0gY3N0YXJ0OwotCi1iZWFjaDoKLSAgaWYgKHJldCkKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAiQ2xpcHBlZCBidWZmZXIgdG8gdGhlIGN1cnJlbnQgc2VnbWVudDogJSIgR1NUX1RJTUVfRk9STUFUICIgLS0gJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikpKTsKLSAgZWxzZQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJCdWZmZXIgb3V0c2lkZSB0aGUgY3VycmVudCBzZWdtZW50IC0tIGRyb3BwaW5nIik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9jbGFzc19pbml0IChHc3REZWludGVybGFjZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJEZWludGVybGFjZXIiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8vRGVpbnRlcmxhY2UiLAotICAgICAgIkRlaW50ZXJsYWNlIE1ldGhvZHMgcG9ydGVkIGZyb20gRFNjYWxlci9UdlRpbWUiLAotICAgICAgIk1hcnRpbiBFaWtlcm1hbm4gPG1laWtlckB1cGIuZGU+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2RlaW50ZXJsYWNlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2RlaW50ZXJsYWNlX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZGVpbnRlcmxhY2VfZmluYWxpemU7Ci0KLSAgLyoqCi0gICAqIEdzdERlaW50ZXJsYWNlOm1vZGU6Ci0gICAqCi0gICAqIFRoaXMgc2VsZWN0cyB3aGV0aGVyIHRoZSBkZWludGVybGFjaW5nIG1ldGhvZHMgc2hvdWxkCi0gICAqIGFsd2F5cyBiZSBhcHBsaWVkIG9yIGlmIHRoZXkgc2hvdWxkIG9ubHkgYmUgYXBwbGllZAotICAgKiBvbiBjb250ZW50IHRoYXQgaGFzIHRoZSAiaW50ZXJsYWNlZCIgZmxhZyBvbiB0aGUgY2Fwcy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsCi0gICAgICAgICAgIk1vZGUiLAotICAgICAgICAgICJEZWludGVybGFjZSBNb2RlIiwKLSAgICAgICAgICBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NT0RFUywKLSAgICAgICAgICBERUZBVUxUX01PREUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykKLSAgICAgICk7Ci0KLSAgLyoqCi0gICAqIEdzdERlaW50ZXJsYWNlOm1ldGhvZDoKLSAgICoKLSAgICogU2VsZWN0cyB0aGUgZGlmZmVyZW50IGRlaW50ZXJsYWNpbmcgYWxnb3JpdGhtcyB0aGF0IGNhbiBiZSB1c2VkLgotICAgKiBUaGVzZSBwcm92aWRlIGRpZmZlcmVudCBxdWFsaXR5IGFuZCBDUFUgdXNhZ2UuCi0gICAqCi0gICAqIFNvbWUgbWV0aG9kcyBwcm92aWRlIHBhcmFtZXRlcnMgd2hpY2ggY2FuIGJlIHNldCBieSBnZXR0aW5nCi0gICAqIHRoZSAibWV0aG9kIiBjaGlsZCB2aWEgdGhlICNHc3RDaGlsZFByb3h5IGludGVyZmFjZSBhbmQKLSAgICogc2V0dGluZyB0aGUgYXBwcm9waWF0ZSBwcm9wZXJ0aWVzIG9uIGl0LgotICAgKgotICAgKiA8aXRlbWl6ZWRsaXN0PgotICAgKiA8bGlzdGl0ZW0+Ci0gICAqIDxwYXJhPgotICAgKiB0b21zbW9jb21wCi0gICAqIE1vdGlvbiBBZGFwdGl2ZTogTW90aW9uIFNlYXJjaAotICAgKiA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogPHBhcmE+Ci0gICAqIGdyZWVkeWgKLSAgICogTW90aW9uIEFkYXB0aXZlOiBBZHZhbmNlZCBEZXRlY3Rpb24KLSAgICogPC9wYXJhPgotICAgKiA8L2xpc3RpdGVtPgotICAgKiA8bGlzdGl0ZW0+Ci0gICAqIDxwYXJhPgotICAgKiBncmVlZHlsCi0gICAqIE1vdGlvbiBBZGFwdGl2ZTogU2ltcGxlIERldGVjdGlvbgotICAgKiA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogPHBhcmE+Ci0gICAqIHZmaXIKLSAgICogQmx1ciB2ZXJ0aWNhbAotICAgKiA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogPHBhcmE+Ci0gICAqIGxpbmVhcgotICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbgotICAgKiA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogPHBhcmE+Ci0gICAqIGxpbmVhcmJsZW5kCi0gICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGluIHRpbWUgZG9tYWluLiAgQW55IG1vdGlvbiBjYXVzZXMgc2lnbmlmaWNhbnQKLSAgICogZ2hvc3RpbmcsIHNvIHRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC4KLSAgICogPC9wYXJhPgotICAgKiA8L2xpc3RpdGVtPgotICAgKiA8bGlzdGl0ZW0+Ci0gICAqIDxwYXJhPgotICAgKiBzY2FsZXJib2IKLSAgICogRG91YmxlIGxpbmVzCi0gICAqIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPGxpc3RpdGVtPgotICAgKiA8cGFyYT4KLSAgICogd2VhdmUKLSAgICogV2VhdmUuICBCYWQgcXVhbGl0eSwgZG8gbm90IHVzZS4KLSAgICogPC9wYXJhPgotICAgKiA8L2xpc3RpdGVtPgotICAgKiA8bGlzdGl0ZW0+Ci0gICAqIDxwYXJhPgotICAgKiB3ZWF2ZXRmZgotICAgKiBQcm9ncmVzc2l2ZTogVG9wIEZpZWxkIEZpcnN0LiAgQmFkIHF1YWxpdHksIGRvIG5vdCB1c2UuCi0gICAqIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPGxpc3RpdGVtPgotICAgKiA8cGFyYT4KLSAgICogd2VhdmViZmYKLSAgICogUHJvZ3Jlc3NpdmU6IEJvdHRvbSBGaWVsZCBGaXJzdC4gIEJhZCBxdWFsaXR5LCBkbyBub3QgdXNlLgotICAgKiA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDwvaXRlbWl6ZWRsaXN0PgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NRVRIT0QsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm1ldGhvZCIsCi0gICAgICAgICAgIk1ldGhvZCIsCi0gICAgICAgICAgIkRlaW50ZXJsYWNlIE1ldGhvZCIsCi0gICAgICAgICAgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EUywKLSAgICAgICAgICBERUZBVUxUX01FVEhPRCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICAvKioKLSAgICogR3N0RGVpbnRlcmxhY2U6ZmllbGRzOgotICAgKgotICAgKiBUaGlzIHNlbGVjdHMgd2hpY2ggZmllbGRzIHNob3VsZCBiZSBvdXRwdXQuIElmICJhbGwiIGlzIHNlbGVjdGVkCi0gICAqIHRoZSBvdXRwdXQgZnJhbWVyYXRlIHdpbGwgYmUgZG91YmxlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GSUVMRFMsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImZpZWxkcyIsCi0gICAgICAgICAgImZpZWxkcyIsCi0gICAgICAgICAgIkZpZWxkcyB0byB1c2UgZm9yIGRlaW50ZXJsYWNpbmciLAotICAgICAgICAgIEdTVF9UWVBFX0RFSU5URVJMQUNFX0ZJRUxEUywKLSAgICAgICAgICBERUZBVUxUX0ZJRUxEUywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICAvKioKLSAgICogR3N0RGVpbnRlcmxhY2U6bGF5b3V0OgotICAgKgotICAgKiBUaGlzIHNlbGVjdHMgd2hpY2ggZmllbGRzIGlzIHRoZSBmaXJzdCBpbiB0aW1lLgotICAgKgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GSUVMRF9MQVlPVVQsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoInRmZiIsCi0gICAgICAgICAgInRmZiIsCi0gICAgICAgICAgIkRlaW50ZXJsYWNlIHRvcCBmaWVsZCBmaXJzdCIsCi0gICAgICAgICAgR1NUX1RZUEVfREVJTlRFUkxBQ0VfRklFTERfTEFZT1VULAotICAgICAgICAgIERFRkFVTFRfRklFTERfTEFZT1VULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpCi0gICAgICApOwotCi0gIC8qKgotICAgKiBHc3REZWludGVybGFjZTpsb2NraW5nOgotICAgKgotICAgKiBUaGlzIHNlbGVjdHMgd2hpY2ggYXBwcm9hY2ggdG8gcGF0dGVybiBsb2NraW5nIGlzIHVzZWQgd2hpY2ggYWZmZWN0cwotICAgKiBwcm9jZXNzaW5nIGxhdGVuY3kgYW5kIGFjY3VyYWN5IG9mIHRpbWVzdGFtcCBhZGp1c3RtZW50IGZvciB0ZWxlY2luZQotICAgKiBzdHJlYW1zLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT0NLSU5HLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJsb2NraW5nIiwgImxvY2tpbmciLCAiUGF0dGVybiBsb2NraW5nIG1vZGUiLAotICAgICAgICAgIEdTVF9UWVBFX0RFSU5URVJMQUNFX0xPQ0tJTkcsIERFRkFVTFRfTE9DS0lORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0RGVpbnRlcmxhY2U6aWdub3JlLW9ic2N1cmU6Ci0gICAqCi0gICAqIFRoaXMgc2VsZWN0cyB3aGV0aGVyIHRvIGlnbm9yZSBvYnNjdXJlL3JhcmUgdGVsZWNpbmUgcGF0dGVybnMuCi0gICAqIE5UU0MgMjozIHB1bGxkb3duIHZhcmlhbnRzIGFyZSB0aGUgb25seSByZWFsbHkgY29tbW9uIHBhdHRlcm5zLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JR05PUkVfT0JTQ1VSRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaWdub3JlLW9ic2N1cmUiLCAiaWdub3JlLW9ic2N1cmUiLAotICAgICAgICAgICJJZ25vcmUgb2JzY3VyZSB0ZWxlY2luZSBwYXR0ZXJucyAob25seSBjb25zaWRlciBQLCBJIGFuZCAyOjMgIgotICAgICAgICAgICJ2YXJpYW50cykuIiwgREVGQVVMVF9JR05PUkVfT0JTQ1VSRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0RGVpbnRlcmxhY2U6ZHJvcC1vcnBoYW5zOgotICAgKgotICAgKiBUaGlzIHNlbGVjdHMgd2hldGhlciB0byBkcm9wIG9ycGhhbiBmaWVsZHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0ZWxlY2luZQotICAgKiBwYXR0ZXJucyBpbiBhY3RpdmUgbG9ja2luZyBtb2RlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9EUk9QX09SUEhBTlMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRyb3Atb3JwaGFucyIsICJkcm9wLW9ycGhhbnMiLAotICAgICAgICAgICJEcm9wIG9ycGhhbiBmaWVsZHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0ZWxlY2luZSBwYXR0ZXJucyBpbiAiCi0gICAgICAgICAgImFjdGl2ZSBsb2NraW5nIG1vZGUuIiwgREVGQVVMVF9EUk9QX09SUEhBTlMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGVpbnRlcmxhY2VfY2hhbmdlX3N0YXRlKTsKLX0KLQotI2lmIDAKLXN0YXRpYyBHc3RPYmplY3QgKgotZ3N0X2RlaW50ZXJsYWNlX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoR3N0Q2hpbGRQcm94eSAqIGNoaWxkX3Byb3h5LAotICAgIGd1aW50IGluZGV4KQotewotICBHc3REZWludGVybGFjZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRSAoY2hpbGRfcHJveHkpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpbmRleCA9PSAwLCBOVUxMKTsKLQotICByZXR1cm4gZ3N0X29iamVjdF9yZWYgKHNlbGYtPm1ldGhvZCk7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2RlaW50ZXJsYWNlX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAoR3N0Q2hpbGRQcm94eSAqIGNoaWxkX3Byb3h5KQotewotICBHc3REZWludGVybGFjZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRSAoY2hpbGRfcHJveHkpOwotCi0gIHJldHVybiAoKHNlbGYtPm1ldGhvZCkgPyAxIDogMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfY2hpbGRfcHJveHlfaW50ZXJmYWNlX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKLXsKLSAgR3N0Q2hpbGRQcm94eUludGVyZmFjZSAqaWZhY2UgPSBnX2lmYWNlOwotCi0gIGlmYWNlLT5nZXRfY2hpbGRfYnlfaW5kZXggPSBnc3RfZGVpbnRlcmxhY2VfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4OwotICBpZmFjZS0+Z2V0X2NoaWxkcmVuX2NvdW50ID0gZ3N0X2RlaW50ZXJsYWNlX2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX2luaXQgKEdzdERlaW50ZXJsYWNlICogc2VsZikKLXsKLSAgc2VsZi0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbCwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RlaW50ZXJsYWNlX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzZWxmLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kZWludGVybGFjZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzZWxmLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kZWludGVybGFjZV9zaW5rX3F1ZXJ5KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWxmKSwgc2VsZi0+c2lua3BhZCk7Ci0KLSAgc2VsZi0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcGwsICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGVpbnRlcmxhY2Vfc3JjX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzZWxmLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RlaW50ZXJsYWNlX3NyY19xdWVyeSkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyY3BhZCk7Ci0KLSAgc2VsZi0+bW9kZSA9IERFRkFVTFRfTU9ERTsKLSAgc2VsZi0+dXNlcl9zZXRfbWV0aG9kX2lkID0gREVGQVVMVF9NRVRIT0Q7Ci0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZzZWxmLT52aW5mbyk7Ci0gIGdzdF9kZWludGVybGFjZV9zZXRfbWV0aG9kIChzZWxmLCBzZWxmLT51c2VyX3NldF9tZXRob2RfaWQpOwotICBzZWxmLT5maWVsZHMgPSBERUZBVUxUX0ZJRUxEUzsKLSAgc2VsZi0+dXNlcl9zZXRfZmllbGRzID0gREVGQVVMVF9GSUVMRFM7Ci0gIHNlbGYtPmZpZWxkX2xheW91dCA9IERFRkFVTFRfRklFTERfTEFZT1VUOwotICBzZWxmLT5sb2NraW5nID0gREVGQVVMVF9MT0NLSU5HOwotICBzZWxmLT5pZ25vcmVfb2JzY3VyZSA9IERFRkFVTFRfSUdOT1JFX09CU0NVUkU7Ci0gIHNlbGYtPmRyb3Bfb3JwaGFucyA9IERFRkFVTFRfRFJPUF9PUlBIQU5TOwotCi0gIHNlbGYtPmxvd19sYXRlbmN5ID0gLTE7Ci0gIHNlbGYtPnBhdHRlcm4gPSAtMTsKLSAgc2VsZi0+cGF0dGVybl9waGFzZSA9IC0xOwotICBzZWxmLT5wYXR0ZXJuX2NvdW50ID0gMDsKLSAgc2VsZi0+b3V0cHV0X2NvdW50ID0gMDsKLSAgc2VsZi0+cGF0dGVybl9iYXNlX3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc2VsZi0+cGF0dGVybl9idWZfZHVyID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc2VsZi0+c3RpbGxfZnJhbWVfbW9kZSA9IEZBTFNFOwotCi0gIGdzdF9kZWludGVybGFjZV9yZXNldCAoc2VsZik7Ci19Ci0KLXN0YXRpYyBHc3RWaWRlb0ZyYW1lICoKLWdzdF92aWRlb19mcmFtZV9uZXdfYW5kX21hcCAoR3N0VmlkZW9JbmZvICogdmluZm8sIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBHc3RNYXBGbGFncyBmbGFncykKLXsKLSAgR3N0VmlkZW9GcmFtZSAqZnJhbWUgPSBnX21hbGxvYzAgKHNpemVvZiAoR3N0VmlkZW9GcmFtZSkpOwotICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKGZyYW1lLCB2aW5mbywgYnVmZmVyLCBmbGFncykpIHsKLSAgICBnX2ZyZWUgKGZyYW1lKTsKLSAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoTlVMTCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIGZyYW1lOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwX2FuZF9mcmVlIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpCi17Ci0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoZnJhbWUpOwotICBnX2ZyZWUgKGZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9yZXNldF9oaXN0b3J5IChHc3REZWludGVybGFjZSAqIHNlbGYsIGdib29sZWFuIGRyb3BfYWxsKQotewotICBnaW50IGk7Ci0KLSAgaWYgKCFkcm9wX2FsbCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJGbHVzaGluZyBoaXN0b3J5IChjb3VudCAlZCkiLCBzZWxmLT5oaXN0b3J5X2NvdW50KTsKLSAgICB3aGlsZSAoc2VsZi0+aGlzdG9yeV9jb3VudCA+IDApIHsKLSAgICAgIGlmIChnc3RfZGVpbnRlcmxhY2Vfb3V0cHV0X2ZyYW1lIChzZWxmLCBUUlVFKSAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAvKiBFbmNvdW50ZXJlZCBlcnJvciwgb3IgZmx1c2hpbmcgLT4gc2tpcCBhbmQgZHJvcCBhbGwgcmVtYWluaW5nICovCi0gICAgICAgIGRyb3BfYWxsID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChkcm9wX2FsbCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJSZXNldHRpbmcgaGlzdG9yeSAoY291bnQgJWQpIiwKLSAgICAgICAgc2VsZi0+aGlzdG9yeV9jb3VudCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+aGlzdG9yeV9jb3VudDsgaSsrKSB7Ci0gICAgICBpZiAoc2VsZi0+ZmllbGRfaGlzdG9yeVtpXS5mcmFtZSkgewotICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKHNlbGYtPmZpZWxkX2hpc3RvcnlbaV0uZnJhbWUpOwotICAgICAgICBzZWxmLT5maWVsZF9oaXN0b3J5W2ldLmZyYW1lID0gTlVMTDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgbWVtc2V0IChzZWxmLT5maWVsZF9oaXN0b3J5LCAwLAotICAgICAgR1NUX0RFSU5URVJMQUNFX01BWF9GSUVMRF9ISVNUT1JZICogc2l6ZW9mIChHc3REZWludGVybGFjZUZpZWxkKSk7Ci0gIHNlbGYtPmhpc3RvcnlfY291bnQgPSAwOwotICBtZW1zZXQgKHNlbGYtPmJ1Zl9zdGF0ZXMsIDAsCi0gICAgICBHU1RfREVJTlRFUkxBQ0VfTUFYX0JVRkZFUl9TVEFURV9ISVNUT1JZICoKLSAgICAgIHNpemVvZiAoR3N0RGVpbnRlcmxhY2VCdWZmZXJTdGF0ZSkpOwotICBzZWxmLT5zdGF0ZV9jb3VudCA9IDA7Ci0gIHNlbGYtPnBhdHRlcm5fbG9jayA9IEZBTFNFOwotICBzZWxmLT5wYXR0ZXJuX3JlZnJlc2ggPSBUUlVFOwotICBzZWxmLT5jdXJfZmllbGRfaWR4ID0gLTE7Ci0KLSAgaWYgKCFzZWxmLT5zdGlsbF9mcmFtZV9tb2RlICYmIHNlbGYtPmxhc3RfYnVmZmVyKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoc2VsZi0+bGFzdF9idWZmZXIpOwotICAgIHNlbGYtPmxhc3RfYnVmZmVyID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX3Jlc2V0IChHc3REZWludGVybGFjZSAqIHNlbGYpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJSZXNldHRpbmcgaW50ZXJuYWwgc3RhdGUiKTsKLQotICBnc3RfdmlkZW9faW5mb19pbml0ICgmc2VsZi0+dmluZm8pOwotCi0gIHNlbGYtPnBhc3N0aHJvdWdoID0gRkFMU0U7Ci0KLSAgc2VsZi0+cmVjb25maWd1cmUgPSBGQUxTRTsKLSAgaWYgKChnaW50KSBzZWxmLT5uZXdfbW9kZSAhPSAtMSkKLSAgICBzZWxmLT5tb2RlID0gc2VsZi0+bmV3X21vZGU7Ci0gIGlmICgoZ2ludCkgc2VsZi0+bmV3X2ZpZWxkcyAhPSAtMSkKLSAgICBzZWxmLT51c2VyX3NldF9maWVsZHMgPSBzZWxmLT5uZXdfZmllbGRzOwotICBzZWxmLT5uZXdfbW9kZSA9IC0xOwotICBzZWxmLT5uZXdfZmllbGRzID0gLTE7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlbGYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLQotICBpZiAoc2VsZi0+cmVxdWVzdF9jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChzZWxmLT5yZXF1ZXN0X2NhcHMpOwotICBzZWxmLT5yZXF1ZXN0X2NhcHMgPSBOVUxMOwotCi0gIGdzdF9kZWludGVybGFjZV9yZXNldF9oaXN0b3J5IChzZWxmLCBUUlVFKTsKLQotICBnc3RfZGVpbnRlcmxhY2VfcmVzZXRfcW9zIChzZWxmKTsKLQotICBzZWxmLT5uZWVkX21vcmUgPSBGQUxTRTsKLSAgc2VsZi0+aGF2ZV9lb3MgPSBGQUxTRTsKLQotICBzZWxmLT5kaXNjb250ID0gVFJVRTsKLQotICBnc3RfZGVpbnRlcmxhY2Vfc2V0X2FsbG9jYXRpb24gKHNlbGYsIE5VTEwsIE5VTEwsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZWludGVybGFjZSAqc2VsZjsKLQotICBzZWxmID0gR1NUX0RFSU5URVJMQUNFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOnsKLSAgICAgIGdpbnQgbmV3X21vZGU7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgICBuZXdfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGlmIChzZWxmLT5tb2RlICE9IG5ld19tb2RlICYmIGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoc2VsZi0+c3JjcGFkKSkgewotICAgICAgICBzZWxmLT5yZWNvbmZpZ3VyZSA9IFRSVUU7Ci0gICAgICAgIHNlbGYtPm5ld19tb2RlID0gbmV3X21vZGU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzZWxmLT5tb2RlID0gbmV3X21vZGU7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX01FVEhPRDoKLSAgICAgIHNlbGYtPnVzZXJfc2V0X21ldGhvZF9pZCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGdzdF9kZWludGVybGFjZV9zZXRfbWV0aG9kIChzZWxmLCBzZWxmLT51c2VyX3NldF9tZXRob2RfaWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZJRUxEUzp7Ci0gICAgICBnaW50IG5ld19maWVsZHM7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgICBuZXdfZmllbGRzID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgaWYgKHNlbGYtPnVzZXJfc2V0X2ZpZWxkcyAhPSBuZXdfZmllbGRzCi0gICAgICAgICAgJiYgZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChzZWxmLT5zcmNwYWQpKSB7Ci0gICAgICAgIHNlbGYtPnJlY29uZmlndXJlID0gVFJVRTsKLSAgICAgICAgc2VsZi0+bmV3X2ZpZWxkcyA9IG5ld19maWVsZHM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzZWxmLT51c2VyX3NldF9maWVsZHMgPSBuZXdfZmllbGRzOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9GSUVMRF9MQVlPVVQ6Ci0gICAgICBzZWxmLT5maWVsZF9sYXlvdXQgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9DS0lORzoKLSAgICAgIHNlbGYtPmxvY2tpbmcgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSUdOT1JFX09CU0NVUkU6Ci0gICAgICBzZWxmLT5pZ25vcmVfb2JzY3VyZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EUk9QX09SUEhBTlM6Ci0gICAgICBzZWxmLT5kcm9wX29ycGhhbnMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChzZWxmLCBwcm9wX2lkLCBwc3BlYyk7Ci0gIH0KLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZWludGVybGFjZSAqc2VsZjsKLQotICBzZWxmID0gR1NUX0RFSU5URVJMQUNFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNlbGYtPm1vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01FVEhPRDoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZWxmLT51c2VyX3NldF9tZXRob2RfaWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZJRUxEUzoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZWxmLT51c2VyX3NldF9maWVsZHMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZJRUxEX0xBWU9VVDoKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZWxmLT5maWVsZF9sYXlvdXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPQ0tJTkc6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc2VsZi0+bG9ja2luZyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSUdOT1JFX09CU0NVUkU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsZi0+aWdub3JlX29ic2N1cmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RST1BfT1JQSEFOUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWxmLT5kcm9wX29ycGhhbnMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAoc2VsZiwgcHJvcF9pZCwgcHNwZWMpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERlaW50ZXJsYWNlICpzZWxmID0gR1NUX0RFSU5URVJMQUNFIChvYmplY3QpOwotCi0gIGdzdF9kZWludGVybGFjZV9yZXNldCAoc2VsZik7Ci0KLSAgaWYgKHNlbGYtPm1ldGhvZCkgewotICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1QgKHNlbGYtPm1ldGhvZCkpOwotICAgIHNlbGYtPm1ldGhvZCA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfdXBkYXRlX3BhdHRlcm5fdGltZXN0YW1wcyAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmKQotewotICBnaW50IHN0YXRlX2lkeDsKLSAgaWYgKHNlbGYtPmxvd19sYXRlbmN5KSB7Ci0gICAgLyogaW4gbG93LWxhdGVuY3kgbW9kZSB0aGUgYnVmZmVyIHN0YXRlIGhpc3RvcnkgY29udGFpbnMgb2xkIGJ1ZmZlcgotICAgICAqIHN0YXRlcyBhcyB3ZWxsIGFzIHRoZSBjdXJyZW50IG9uZSBhbmQgcGVyaGFwcyBzb21lIGZ1dHVyZSBvbmVzLgotICAgICAqIHRoZSBjdXJyZW50IGJ1ZmZlcidzIHN0YXRlIGlzIGdpdmVuIGJ5IHRoZSBudW1iZXIgb2YgZmllbGQgcGFpcnMKLSAgICAgKiByb3VuZGVkIHVwLCBtaW51cyAxLiB0aGUgYmVsb3cgaXMgZXF1aXZhbGVudCAqLwotICAgIHN0YXRlX2lkeCA9IChzZWxmLT5oaXN0b3J5X2NvdW50IC0gMSkgPj4gMTsKLSAgfSBlbHNlIHsKLSAgICAvKiBpbiBoaWdoLWxhdGVuY3kgbW9kZSBzdGF0ZV9jb3VudCAtIDEgaXMgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc3RhdGUgKi8KLSAgICBzdGF0ZV9pZHggPSBzZWxmLT5zdGF0ZV9jb3VudCAtIDE7Ci0gIH0KLQotICBzZWxmLT5wYXR0ZXJuX2Jhc2VfdHMgPSBzZWxmLT5idWZfc3RhdGVzW3N0YXRlX2lkeF0udGltZXN0YW1wOwotICBpZiAoc2VsZi0+YnVmX3N0YXRlc1tzdGF0ZV9pZHhdLnN0YXRlICE9IEdTVF9SRkYpIHsKLSAgICBzZWxmLT5wYXR0ZXJuX2J1Zl9kdXIgPQotICAgICAgICAoc2VsZi0+YnVmX3N0YXRlc1tzdGF0ZV9pZHhdLmR1cmF0aW9uICoKLSAgICAgICAgdGVsZWNpbmVfcGF0dGVybnNbc2VsZi0+cGF0dGVybl0ucmF0aW9fZCkgLwotICAgICAgICB0ZWxlY2luZV9wYXR0ZXJuc1tzZWxmLT5wYXR0ZXJuXS5yYXRpb19uOwotICB9IGVsc2UgewotICAgIHNlbGYtPnBhdHRlcm5fYnVmX2R1ciA9Ci0gICAgICAgIChzZWxmLT5idWZfc3RhdGVzW3N0YXRlX2lkeF0uZHVyYXRpb24gKgotICAgICAgICB0ZWxlY2luZV9wYXR0ZXJuc1tzZWxmLT5wYXR0ZXJuXS5yYXRpb19kICogMikgLwotICAgICAgICAodGVsZWNpbmVfcGF0dGVybnNbc2VsZi0+cGF0dGVybl0ucmF0aW9fbiAqIDMpOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAiU3RhcnRpbmcgYSBuZXcgcGF0dGVybiByZXBlYXQgd2l0aCBiYXNlIHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiBhbmQgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc2VsZi0+cGF0dGVybl9iYXNlX3RzKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHNlbGYtPnBhdHRlcm5fYnVmX2R1cikpOwotfQotCi1zdGF0aWMgR3N0VmlkZW9GcmFtZSAqCi1nc3RfZGVpbnRlcmxhY2VfcG9wX2hpc3RvcnkgKEdzdERlaW50ZXJsYWNlICogc2VsZikKLXsKLSAgR3N0VmlkZW9GcmFtZSAqZnJhbWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYtPmhpc3RvcnlfY291bnQgPiAwLCBOVUxMKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUG9wIGxhc3QgaGlzdG9yeSBmcmFtZSAtLSBjdXJyZW50IGhpc3Rvcnkgc2l6ZSAlZCIsCi0gICAgICBzZWxmLT5oaXN0b3J5X2NvdW50KTsKLQotICBmcmFtZSA9IHNlbGYtPmZpZWxkX2hpc3Rvcnlbc2VsZi0+aGlzdG9yeV9jb3VudCAtIDFdLmZyYW1lOwotCi0gIHNlbGYtPmhpc3RvcnlfY291bnQtLTsKLSAgaWYgKHNlbGYtPmxvY2tpbmcgIT0gR1NUX0RFSU5URVJMQUNFX0xPQ0tJTkdfTk9ORSAmJiAoIXNlbGYtPmhpc3RvcnlfY291bnQKLSAgICAgICAgICB8fCBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApICE9Ci0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNlbGYtPmZpZWxkX2hpc3Rvcnlbc2VsZi0+aGlzdG9yeV9jb3VudCAtCi0gICAgICAgICAgICAgICAgICAxXS5mcmFtZSwgMCkpKSB7Ci0gICAgaWYgKCFzZWxmLT5sb3dfbGF0ZW5jeSkKLSAgICAgIHNlbGYtPnN0YXRlX2NvdW50LS07Ci0gICAgaWYgKHNlbGYtPnBhdHRlcm5fbG9jaykgewotICAgICAgc2VsZi0+cGF0dGVybl9jb3VudCsrOwotICAgICAgaWYgKHNlbGYtPnBhdHRlcm4gIT0gLTEKLSAgICAgICAgICAmJiBzZWxmLT5wYXR0ZXJuX2NvdW50ID49IHRlbGVjaW5lX3BhdHRlcm5zW3NlbGYtPnBhdHRlcm5dLmxlbmd0aCkgewotICAgICAgICBzZWxmLT5wYXR0ZXJuX2NvdW50ID0gMDsKLSAgICAgICAgc2VsZi0+b3V0cHV0X2NvdW50ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUmV0dXJuaW5nIGZyYW1lOiAlcCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgd2l0aCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIiBhbmQgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwgZnJhbWUsCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoZnJhbWUtPmJ1ZmZlcikpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoZnJhbWUtPmJ1ZmZlcikpLAotICAgICAgR1NUX1ZJREVPX0ZSQU1FX1NJWkUgKGZyYW1lKSk7Ci0KLSAgcmV0dXJuIGZyYW1lOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX2dldF9idWZmZXJfc3RhdGUgKEdzdERlaW50ZXJsYWNlICogc2VsZiwgR3N0VmlkZW9GcmFtZSAqIGZyYW1lLAotICAgIGd1aW50OCAqIHN0YXRlLCBHc3RWaWRlb0ludGVybGFjZU1vZGUgKiBpX21vZGUpCi17Ci0gIEdzdFZpZGVvSW50ZXJsYWNlTW9kZSBpbnRlcmxhY2luZ19tb2RlOwotCi0gIGlmICghKGlfbW9kZSB8fCBzdGF0ZSkpCi0gICAgcmV0dXJuOwotCi0gIGludGVybGFjaW5nX21vZGUgPSBHU1RfVklERU9fSU5GT19JTlRFUkxBQ0VfTU9ERSAoJmZyYW1lLT5pbmZvKTsKLSAgaWYgKHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfSU5URVJMQUNFRCkKLSAgICBpbnRlcmxhY2luZ19tb2RlID0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX0lOVEVSTEVBVkVEOwotCi0gIGlmIChzdGF0ZSkgewotICAgIGlmIChpbnRlcmxhY2luZ19tb2RlID09IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9NSVhFRCkgewotICAgICAgaWYgKEdTVF9WSURFT19GUkFNRV9JU19SRkYgKGZyYW1lKSkgewotICAgICAgICAqc3RhdGUgPSBHU1RfREVJTlRFUkxBQ0VfQlVGRkVSX1NUQVRFX1JGRjsKLSAgICAgIH0gZWxzZSBpZiAoR1NUX1ZJREVPX0ZSQU1FX0lTX09ORUZJRUxEIChmcmFtZSkpIHsKLSAgICAgICAgLyogdGMgdG9wIGlmIHRmZiwgdGMgYm90dG9tIG90aGVyd2lzZSAqLwotICAgICAgICBpZiAoR1NUX1ZJREVPX0ZSQU1FX0lTX1RGRiAoZnJhbWUpKSB7Ci0gICAgICAgICAgKnN0YXRlID0gR1NUX0RFSU5URVJMQUNFX0JVRkZFUl9TVEFURV9UQ19UOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICpzdGF0ZSA9IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfQjsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChHU1RfVklERU9fRlJBTUVfSVNfSU5URVJMQUNFRCAoZnJhbWUpKSB7Ci0gICAgICAgICpzdGF0ZSA9IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfTTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpzdGF0ZSA9IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfUDsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKGludGVybGFjaW5nX21vZGUgPT0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX0lOVEVSTEVBVkVEKSB7Ci0gICAgICAgICpzdGF0ZSA9IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfSTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpzdGF0ZSA9IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfUDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoaV9tb2RlKQotICAgICppX21vZGUgPSBpbnRlcmxhY2luZ19tb2RlOwotfQotCi0jZGVmaW5lIFNUQVRFX1RPX1NUUklORyhzKSAoKHMpID09IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfUCA/ICJQIiA6IFwKLSAgKHMpID09IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfSSA/ICJJIiA6IFwKLSAgKHMpID09IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfQiA/ICJCIiA6IFwKLSAgKHMpID09IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfVCA/ICJUIiA6IFwKLSAgKHMpID09IEdTVF9ERUlOVEVSTEFDRV9CVUZGRVJfU1RBVEVfVENfUCA/ICJUQ1AiIDogXAotICAocykgPT0gR1NUX0RFSU5URVJMQUNFX0JVRkZFUl9TVEFURV9UQ19NID8gIlRDTSIgOiAiUkZGIikKLQotI2RlZmluZSBNT0RFX1RPX1NUUklORyhtKSAoKG0pID09IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9NSVhFRCA/ICJNSVhFRCIgOiBcCi0gIChtKSA9PSBHU1RfVklERU9fSU5URVJMQUNFX01PREVfSU5URVJMRUFWRUQgPyAiSSIgOiBcCi0gIChtKSA9PSBHU1RfVklERU9fSU5URVJMQUNFX01PREVfRklFTERTID8gIkZJRUxEUyIgOiAiUCIpCi0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfcHVzaF9oaXN0b3J5IChHc3REZWludGVybGFjZSAqIHNlbGYsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgaW50IGkgPSAxOwotICBHc3REZWludGVybGFjZUZpZWxkTGF5b3V0IGZpZWxkX2xheW91dCA9IHNlbGYtPmZpZWxkX2xheW91dDsKLSAgZ2Jvb2xlYW4gdGZmOwotICBnYm9vbGVhbiBvbmVmaWVsZDsKLSAgR3N0VmlkZW9GcmFtZSAqZnJhbWUgPSBOVUxMOwotICBHc3RWaWRlb0ZyYW1lICpmaWVsZDEsICpmaWVsZDIgPSBOVUxMOwotICBndWludCBmaWVsZHNfdG9fcHVzaDsKLSAgZ3VpbnQgZmllbGQxX2ZsYWdzLCBmaWVsZDJfZmxhZ3M7Ci0gIEdzdFZpZGVvSW50ZXJsYWNlTW9kZSBpbnRlcmxhY2luZ19tb2RlOwotICBndWludDggYnVmX3N0YXRlOwotCi0gIC8qIHdlIHdpbGwgb25seSByZWFkIGZyb20gdGhpcyBidWZmZXIgYW5kIHdyaXRlIGludG8gZnJlc2ggb3V0cHV0IGJ1ZmZlcnMKLSAgICogaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGNoYW5nZSB0aGUgbWFwIGZsYWdzIGFzIGFwcHJvcHJpYXRlCi0gICAqLwotICBmcmFtZSA9IGdzdF92aWRlb19mcmFtZV9uZXdfYW5kX21hcCAoJnNlbGYtPnZpbmZvLCBidWZmZXIsIEdTVF9NQVBfUkVBRCk7Ci0gIC8qIHdlIGNhbiBtYW5hZ2UgdGhlIGJ1ZmZlciByZWYgY291bnQgdXNpbmcgdGhlIG1hcHMgZnJvbSBoZXJlIG9uICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgdGZmID0gR1NUX1ZJREVPX0ZSQU1FX0lTX1RGRiAoZnJhbWUpOwotICBvbmVmaWVsZCA9IEdTVF9WSURFT19GUkFNRV9JU19PTkVGSUVMRCAoZnJhbWUpOwotICBmaWVsZHNfdG9fcHVzaCA9IChvbmVmaWVsZCkgPyAxIDogMjsKLQotICBnX3JldHVybl9pZl9mYWlsIChzZWxmLT5oaXN0b3J5X2NvdW50IDwKLSAgICAgIEdTVF9ERUlOVEVSTEFDRV9NQVhfRklFTERfSElTVE9SWSAtIGZpZWxkc190b19wdXNoKTsKLQotICBnc3RfZGVpbnRlcmxhY2VfZ2V0X2J1ZmZlcl9zdGF0ZSAoc2VsZiwgZnJhbWUsICZidWZfc3RhdGUsICZpbnRlcmxhY2luZ19tb2RlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgIlB1c2hpbmcgbmV3IGZyYW1lIGFzICVkIGZpZWxkcyB0byB0aGUgaGlzdG9yeSAoY291bnQgYmVmb3JlICVkKTogcHRyICVwIGF0ICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiB3aXRoIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiLCBzdGF0ZSAlcywgaW50ZXJsYWNpbmcgbW9kZSAlcyIsCi0gICAgICBmaWVsZHNfdG9fcHVzaCwgc2VsZi0+aGlzdG9yeV9jb3VudCwgZnJhbWUsCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpKSwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlciksCi0gICAgICBTVEFURV9UT19TVFJJTkcgKGJ1Zl9zdGF0ZSksIE1PREVfVE9fU1RSSU5HIChpbnRlcmxhY2luZ19tb2RlKSk7Ci0KLSAgLyogbW92ZSB1cCBmb3IgbmV3IHN0YXRlICovCi0gIG1lbW1vdmUgKCZzZWxmLT5idWZfc3RhdGVzWzFdLCAmc2VsZi0+YnVmX3N0YXRlc1swXSwKLSAgICAgIChHU1RfREVJTlRFUkxBQ0VfTUFYX0JVRkZFUl9TVEFURV9ISVNUT1JZIC0gMSkgKgotICAgICAgc2l6ZW9mIChHc3REZWludGVybGFjZUJ1ZmZlclN0YXRlKSk7Ci0gIHNlbGYtPmJ1Zl9zdGF0ZXNbMF0uc3RhdGUgPSBidWZfc3RhdGU7Ci0gIHNlbGYtPmJ1Zl9zdGF0ZXNbMF0udGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIHNlbGYtPmJ1Zl9zdGF0ZXNbMF0uZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICBpZiAoc2VsZi0+c3RhdGVfY291bnQgPCBHU1RfREVJTlRFUkxBQ0VfTUFYX0JVRkZFUl9TVEFURV9ISVNUT1JZKQotICAgIHNlbGYtPnN0YXRlX2NvdW50Kys7Ci0KLSAgZm9yIChpID0gR1NUX0RFSU5URVJMQUNFX01BWF9GSUVMRF9ISVNUT1JZIC0gMTsgaSA+PSBmaWVsZHNfdG9fcHVzaDsgaS0tKSB7Ci0gICAgc2VsZi0+ZmllbGRfaGlzdG9yeVtpXS5mcmFtZSA9Ci0gICAgICAgIHNlbGYtPmZpZWxkX2hpc3RvcnlbaSAtIGZpZWxkc190b19wdXNoXS5mcmFtZTsKLSAgICBzZWxmLT5maWVsZF9oaXN0b3J5W2ldLmZsYWdzID0KLSAgICAgICAgc2VsZi0+ZmllbGRfaGlzdG9yeVtpIC0gZmllbGRzX3RvX3B1c2hdLmZsYWdzOwotICB9Ci0KLSAgaWYgKGZpZWxkX2xheW91dCA9PSBHU1RfREVJTlRFUkxBQ0VfTEFZT1VUX0FVVE8pIHsKLSAgICBpZiAoIUdTVF9WSURFT19JTkZPX0lTX0lOVEVSTEFDRUQgKCZzZWxmLT52aW5mbykpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgIkNhbid0IGRldGVjdCBmaWVsZCBsYXlvdXQgLS0gYXNzdW1pbmcgVEZGIik7Ci0gICAgICBmaWVsZF9sYXlvdXQgPSBHU1RfREVJTlRFUkxBQ0VfTEFZT1VUX1RGRjsKLSAgICB9IGVsc2UgaWYgKHRmZikgewotICAgICAgZmllbGRfbGF5b3V0ID0gR1NUX0RFSU5URVJMQUNFX0xBWU9VVF9URkY7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZpZWxkX2xheW91dCA9IEdTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQkZGOwotICAgIH0KLSAgfQotCi0gIGZpZWxkMSA9IGZyYW1lOwotICBmaWVsZDIgPSBnc3RfdmlkZW9fZnJhbWVfbmV3X2FuZF9tYXAgKCZzZWxmLT52aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICBpZiAoZmllbGRfbGF5b3V0ID09IEdTVF9ERUlOVEVSTEFDRV9MQVlPVVRfVEZGKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlRvcCBmaWVsZCBmaXJzdCIpOwotICAgIGZpZWxkMV9mbGFncyA9IFBJQ1RVUkVfSU5URVJMQUNFRF9UT1A7Ci0gICAgZmllbGQyX2ZsYWdzID0gUElDVFVSRV9JTlRFUkxBQ0VEX0JPVFRPTTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiQm90dG9tIGZpZWxkIGZpcnN0Iik7Ci0gICAgZmllbGQxX2ZsYWdzID0gUElDVFVSRV9JTlRFUkxBQ0VEX0JPVFRPTTsKLSAgICBmaWVsZDJfZmxhZ3MgPSBQSUNUVVJFX0lOVEVSTEFDRURfVE9QOwotICB9Ci0KLSAgLyogU3dhcCBmb3IgcmV2ZXJzZSBwbGF5YmFjayAqLwotICBpZiAoc2VsZi0+c2VnbWVudC5yYXRlIDwgMCkgewotICAgIGZpZWxkMV9mbGFncyA9IGZpZWxkMV9mbGFncyBeIGZpZWxkMl9mbGFnczsKLSAgICBmaWVsZDJfZmxhZ3MgPSBmaWVsZDFfZmxhZ3MgXiBmaWVsZDJfZmxhZ3M7Ci0gICAgZmllbGQxX2ZsYWdzID0gZmllbGQxX2ZsYWdzIF4gZmllbGQyX2ZsYWdzOwotICB9Ci0KLSAgaWYgKCFvbmVmaWVsZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJUd28gZmllbGRzIik7Ci0gICAgc2VsZi0+ZmllbGRfaGlzdG9yeVsxXS5mcmFtZSA9IGZpZWxkMTsKLSAgICBzZWxmLT5maWVsZF9oaXN0b3J5WzFdLmZsYWdzID0gZmllbGQxX2ZsYWdzOwotCi0gICAgc2VsZi0+ZmllbGRfaGlzdG9yeVswXS5mcmFtZSA9IGZpZWxkMjsKLSAgICBzZWxmLT5maWVsZF9oaXN0b3J5WzBdLmZsYWdzID0gZmllbGQyX2ZsYWdzOwotICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBvbmVmaWVsZCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPbmUgZmllbGQiKTsKLSAgICBzZWxmLT5maWVsZF9oaXN0b3J5WzBdLmZyYW1lID0gZmllbGQxOwotICAgIHNlbGYtPmZpZWxkX2hpc3RvcnlbMF0uZmxhZ3MgPSBmaWVsZDFfZmxhZ3M7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwX2FuZF9mcmVlIChmaWVsZDIpOwotICB9Ci0KLSAgc2VsZi0+aGlzdG9yeV9jb3VudCArPSBmaWVsZHNfdG9fcHVzaDsKLSAgc2VsZi0+Y3VyX2ZpZWxkX2lkeCArPSBmaWVsZHNfdG9fcHVzaDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUHVzaGVkIGJ1ZmZlciAtLSBjdXJyZW50IGhpc3Rvcnkgc2l6ZSAlZCwgaW5kZXggJWQiLAotICAgICAgc2VsZi0+aGlzdG9yeV9jb3VudCwgc2VsZi0+Y3VyX2ZpZWxkX2lkeCk7Ci0KLSAgaWYgKHNlbGYtPmxhc3RfYnVmZmVyKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHNlbGYtPmxhc3RfYnVmZmVyKTsKLSAgc2VsZi0+bGFzdF9idWZmZXIgPSBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV91cGRhdGVfcW9zIChHc3REZWludGVybGFjZSAqIHNlbGYsIGdkb3VibGUgcHJvcG9ydGlvbiwKLSAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAiVXBkYXRpbmcgUW9TOiBwcm9wb3J0aW9uICVsZiwgZGlmZiAlIiBHU1RfU1RJTUVfRk9STUFUICIsIHRpbWVzdGFtcCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCBwcm9wb3J0aW9uLCBHU1RfU1RJTUVfQVJHUyAoZGlmZiksCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICBzZWxmLT5wcm9wb3J0aW9uID0gcHJvcG9ydGlvbjsKLSAgaWYgKEdfTElLRUxZICh0aW1lc3RhbXAgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoZGlmZiA+IDApKQotICAgICAgc2VsZi0+ZWFybGllc3RfdGltZSA9Ci0gICAgICAgICAgdGltZXN0YW1wICsgMiAqIGRpZmYgKyAoKHNlbGYtPmZpZWxkcyA9PQotICAgICAgICAgICAgICBHU1RfREVJTlRFUkxBQ0VfQUxMKSA/IHNlbGYtPmZpZWxkX2R1cmF0aW9uIDogMiAqCi0gICAgICAgICAgc2VsZi0+ZmllbGRfZHVyYXRpb24pOwotICAgIGVsc2UKLSAgICAgIHNlbGYtPmVhcmxpZXN0X3RpbWUgPSB0aW1lc3RhbXAgKyBkaWZmOwotICB9IGVsc2UgewotICAgIHNlbGYtPmVhcmxpZXN0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9yZXNldF9xb3MgKEdzdERlaW50ZXJsYWNlICogc2VsZikKLXsKLSAgZ3N0X2RlaW50ZXJsYWNlX3VwZGF0ZV9xb3MgKHNlbGYsIDAuNSwgMCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIHNlbGYtPnByb2Nlc3NlZCA9IDA7Ci0gIHNlbGYtPmRyb3BwZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX3JlYWRfcW9zIChHc3REZWludGVybGFjZSAqIHNlbGYsIGdkb3VibGUgKiBwcm9wb3J0aW9uLAotICAgIEdzdENsb2NrVGltZSAqIHRpbWUpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICpwcm9wb3J0aW9uID0gc2VsZi0+cHJvcG9ydGlvbjsKLSAgKnRpbWUgPSBzZWxmLT5lYXJsaWVzdF90aW1lOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci19Ci0KLS8qIFBlcmZvcm0gcW9zIGNhbGN1bGF0aW9ucyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbmV4dCBmcmFtZS4gUmV0dXJucyBUUlVFIGlmCi0gKiB0aGUgZnJhbWUgc2hvdWxkIGJlIHByb2Nlc3NlZCwgRkFMU0UgaWYgdGhlIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGVudGlyZWx5ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9kb19xb3MgKEdzdERlaW50ZXJsYWNlICogc2VsZiwgY29uc3QgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RDbG9ja1RpbWUgcW9zdGltZSwgZWFybGllc3RfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOwotICBnZG91YmxlIHByb3BvcnRpb247Ci0KLSAgLyogbm8gdGltZXN0YW1wLCBjYW4ndCBkbyBRb1MgPT4gcHJvY2VzcyBmcmFtZSAqLwotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAiaW52YWxpZCB0aW1lc3RhbXAsIGNhbid0IGRvIFFvUywgcHJvY2VzcyBmcmFtZSIpOwotICAgIGdvdG8ga2VlcF9mcmFtZTsKLSAgfQotCi0gIC8qIGdldCBsYXRlc3QgUW9TIG9ic2VydmF0aW9uIHZhbHVlcyAqLwotICBnc3RfZGVpbnRlcmxhY2VfcmVhZF9xb3MgKHNlbGYsICZwcm9wb3J0aW9uLCAmZWFybGllc3RfdGltZSk7Ci0KLSAgLyogc2tpcCBxb3MgaWYgd2UgaGF2ZSBubyBvYnNlcnZhdGlvbiAoeWV0KSA9PiBwcm9jZXNzIGZyYW1lICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGVhcmxpZXN0X3RpbWUpKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAibm8gb2JzZXJ2YXRpb24geWV0LCBwcm9jZXNzIGZyYW1lIik7Ci0gICAgZ290byBrZWVwX2ZyYW1lOwotICB9Ci0KLSAgLyogcW9zIGlzIGRvbmUgb24gcnVubmluZyB0aW1lICovCi0gIHFvc3RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZzZWxmLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICB0aW1lc3RhbXApOwotCi0gIC8qIHNlZSBob3cgb3VyIG5leHQgdGltZXN0YW1wIHJlbGF0ZXMgdG8gdGhlIGxhdGVzdCBxb3MgdGltZXN0YW1wICovCi0gIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAicW9zdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZWFybGllc3QgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocW9zdGltZSksIEdTVF9USU1FX0FSR1MgKGVhcmxpZXN0X3RpbWUpKTsKLQotICBpZiAocW9zdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmIHFvc3RpbWUgPD0gZWFybGllc3RfdGltZSkgewotICAgIEdzdENsb2NrVGltZSBzdHJlYW1fdGltZSwgaml0dGVyOwotICAgIEdzdE1lc3NhZ2UgKnFvc19tc2c7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAid2UgYXJlIGxhdGUsIGRyb3AgZnJhbWUiKTsKLSAgICBzZWxmLT5kcm9wcGVkKys7Ci0gICAgc3RyZWFtX3RpbWUgPQotICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlbGYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLSAgICBqaXR0ZXIgPSBHU1RfQ0xPQ0tfRElGRiAocW9zdGltZSwgZWFybGllc3RfdGltZSk7Ci0gICAgcW9zX21zZyA9Ci0gICAgICAgIGdzdF9tZXNzYWdlX25ld19xb3MgKEdTVF9PQkpFQ1QgKHNlbGYpLCBGQUxTRSwgcW9zdGltZSwgc3RyZWFtX3RpbWUsCi0gICAgICAgIHRpbWVzdGFtcCwgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXMgKHFvc19tc2csIGppdHRlciwgcHJvcG9ydGlvbiwgMTAwMDAwMCk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc19zdGF0cyAocW9zX21zZywgR1NUX0ZPUk1BVF9CVUZGRVJTLAotICAgICAgICBzZWxmLT5wcm9jZXNzZWQsIHNlbGYtPmRyb3BwZWQpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNlbGYpLCBxb3NfbXNnKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInByb2Nlc3MgZnJhbWUiKTsKLWtlZXBfZnJhbWU6Ci0gIHNlbGYtPnByb2Nlc3NlZCsrOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGVpbnRlcmxhY2VfZml4X3RpbWVzdGFtcHMgKEdzdERlaW50ZXJsYWNlICogc2VsZiwKLSAgICBHc3RWaWRlb0ZyYW1lICogZmllbGQxLCBHc3RWaWRlb0ZyYW1lICogZmllbGQyKQotewotICBHc3RWaWRlb0ZyYW1lICpmaWVsZDMsICpmaWVsZDQ7Ci0gIEdzdFZpZGVvSW50ZXJsYWNlTW9kZSBpbnRlcmxhY2luZ19tb2RlOwotCi0gIC8qIEZJWE1FOiBUaGlzIGlzIGJyb2tlbiBmb3IgcmF0ZSA8IDAgKi8KLSAgaWYgKHNlbGYtPnBhdHRlcm5fbG9jayAmJiBzZWxmLT5wYXR0ZXJuID4gLTEpIHsKLSAgICAvKiBhY2N1cmF0ZSBwYXR0ZXJuLWxvY2tlZCB0aW1lc3RhbXAgYWRqdXN0bWVudCAqLwotICAgIGlmICghc2VsZi0+cGF0dGVybl9jb3VudCkKLSAgICAgIGdzdF9kZWludGVybGFjZV91cGRhdGVfcGF0dGVybl90aW1lc3RhbXBzIChzZWxmKTsKLQotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDEtPmJ1ZmZlcikgPQotICAgICAgICBzZWxmLT5wYXR0ZXJuX2Jhc2VfdHMgKyBzZWxmLT5vdXRwdXRfY291bnQgKiBzZWxmLT5wYXR0ZXJuX2J1Zl9kdXI7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoZmllbGQxLT5idWZmZXIpID0gc2VsZi0+cGF0dGVybl9idWZfZHVyOwotICAgIHNlbGYtPm91dHB1dF9jb3VudCsrOwotICB9IGVsc2UgewotICAgIC8qIG5haXZlIChidXQgbG93LWxhdGVuY3kpIHRpbWVzdGFtcCBhZGp1c3RtZW50IGJhc2VkIG9uIHN1YnNlcXVlbnQKLSAgICAgKiBmaWVsZHMvYnVmZmVycyAqLwotICAgIGlmIChmaWVsZDIKLSAgICAgICAgJiYgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZpZWxkMSwKLSAgICAgICAgICAgIDApICE9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmaWVsZDIsIDApKSB7Ci0gICAgICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkMS0+YnVmZmVyKSArCi0gICAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoZmllbGQxLT5idWZmZXIpID09Ci0gICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkMi0+YnVmZmVyKSkgewotICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoZmllbGQxLT5idWZmZXIpID0KLSAgICAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDItPmJ1ZmZlcikgPQotICAgICAgICAgICAgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDEtPmJ1ZmZlcikgKwotICAgICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkMi0+YnVmZmVyKSkgLyAyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkMi0+YnVmZmVyKSA9Ci0gICAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoZmllbGQxLT5idWZmZXIpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChzZWxmLT5oaXN0b3J5X2NvdW50IDwgMykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk5lZWQgbW9yZSBmaWVsZHMgKGhhdmUgJWQsIG5lZWQgMykiLAotICAgICAgICAgIHNlbGYtPmhpc3RvcnlfY291bnQpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIGZpZWxkMyA9IHNlbGYtPmZpZWxkX2hpc3Rvcnlbc2VsZi0+aGlzdG9yeV9jb3VudCAtIDNdLmZyYW1lOwotICAgIGludGVybGFjaW5nX21vZGUgPSBHU1RfVklERU9fSU5GT19JTlRFUkxBQ0VfTU9ERSAoJmZpZWxkMy0+aW5mbyk7Ci0gICAgaWYgKElTX1RFTEVDSU5FIChpbnRlcmxhY2luZ19tb2RlKSkgewotICAgICAgaWYgKHNlbGYtPmhpc3RvcnlfY291bnQgPCA0KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJOZWVkIG1vcmUgZmllbGRzIChoYXZlICVkLCBuZWVkIDQpIiwKLSAgICAgICAgICAgIHNlbGYtPmhpc3RvcnlfY291bnQpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICAgIGZpZWxkNCA9IHNlbGYtPmZpZWxkX2hpc3Rvcnlbc2VsZi0+aGlzdG9yeV9jb3VudCAtIDRdLmZyYW1lOwotICAgICAgaWYgKEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmaWVsZDMsCi0gICAgICAgICAgICAgIDApICE9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmaWVsZDQsIDApKSB7Ci0gICAgICAgIC8qIHRlbGVjaW5lIGZpZWxkcyBpbiBzZXBhcmF0ZSBidWZmZXJzICovCi0gICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDMtPmJ1ZmZlcikgPQotICAgICAgICAgICAgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDMtPmJ1ZmZlcikgKwotICAgICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkNC0+YnVmZmVyKSkgLyAyOwotICAgICAgfQotICAgIH0KLQotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGZpZWxkMS0+YnVmZmVyKSA9Ci0gICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDMtPmJ1ZmZlcikgLQotICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoZmllbGQxLT5idWZmZXIpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICJGaWVsZCAxIGFkanVzdGVkIHRvIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXIgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkMS0+YnVmZmVyKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChmaWVsZDEtPmJ1ZmZlcikpKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfZ2V0X3BhdHRlcm5fbG9jayAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLCBnYm9vbGVhbiAqIGZsdXNoX29uZSkKLXsKLSAgLyogbG9vcCBvdmVyIGFsbCBwb3NzaWJsZSBwYXR0ZXJucyBhbmQgYWxsIHBvc3NpYmxlIHBoYXNlcwotICAgKiBnaXZpbmcgZWFjaCBhIHNjb3JlLiB0aGUgaGlnaGVzdCBzY29yZSBnZXRzIHRoZSBsb2NrICovCi0gIC8qIHRoZSBzY29yZSBpcyBjYWxjdWxhdGVkIGFzIHRoZSBudW1iZXIgb2YgbWF0Y2hlZCBidWZmZXJzIGluIHRoZQotICAgKiBzZXF1ZW5jZSBzdGFydGluZyBhdCB0aGUgcGhhc2Ugb2Zmc2V0IHdpdGggdGhvc2UgZnJvbSB0aGUgaGlzdG9yeQotICAgKiB0aGVuIHRoZSBsb25nZXN0IGR1cmF0aW9uIHBhdHRlcm4gbWF0Y2ggaXMgdGFrZW4uIGlmIHRoZXJlIGlzIG1vcmUgdGhhbgotICAgKiBvbmUgcGF0dGVybiBtYXRjaGluZyBhbGwgYnVmZmVycywgd2UgdGFrZSB0aGUgbG9uZ2VzdCBwYXR0ZXJuIG9mIHRob3NlLgotICAgKiBtYXRjaGVzIHRvIGNvbXBsZXRlIHBhdHRlcm5zIGFyZSBwcmVmZXJyZWQuIGlmIG5vIG5vbi10cml2aWFsIHBhdHRlcm4gaXMKLSAgICogbWF0Y2hlZCwgdHJpdmlhbCBwYXR0ZXJucyBhcmUgdGVzdGVkLiAqLwotICBnaW50IGksIGosIGssIHNjb3JlLCBwYXR0ZXJuLCBwaGFzZTsKLSAgY29uc3QgZ2ludCBzdGF0ZV9jb3VudCA9IHNlbGYtPnN0YXRlX2NvdW50OwotICBjb25zdCBnaW50IG5fcmVxdWlyZWQgPSBzZWxmLT5pZ25vcmVfb2JzY3VyZSA/Ci0gICAgICBHU1RfREVJTlRFUkxBQ0VfT0JTQ1VSRV9USFJFU0hPTEQgOgotICAgICAgR1NUX0RFSU5URVJMQUNFX01BWF9CVUZGRVJfU1RBVEVfSElTVE9SWTsKLQotICAvKiBzZXQgdW5rbm93biBwYXR0ZXJuIGFzIHRoaXMgaXMgdXNlZCBpbiBsb2dpYyBvdXRzaWRlIHRoaXMgZnVuY3Rpb24gKi8KLSAgc2VsZi0+cGF0dGVybiA9IC0xOwotCi0gIC8qIHdhaXQgZm9yIG1vcmUgYnVmZmVycyAqLwotICBpZiAoIXNlbGYtPmhhdmVfZW9zICYmIHN0YXRlX2NvdW50IDwgbl9yZXF1aXJlZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJOZWVkIG1vcmUgYnVmZmVycyBpbiBzdGF0ZSBoaXN0b3J5IC0gJWQvJWQiLAotICAgICAgICBzdGF0ZV9jb3VudCwgbl9yZXF1aXJlZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc2NvcmUgPSBwYXR0ZXJuID0gcGhhc2UgPSAtMTsKLQotICAvKiBsb29wIG92ZXIgYWxsIHBhdHRlcm5zICovCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRlbGVjaW5lX3BhdHRlcm5zKTsgaSsrKSB7Ci0gICAgY29uc3QgZ3VpbnQ4IGxlbmd0aCA9IHRlbGVjaW5lX3BhdHRlcm5zW2ldLmxlbmd0aDsKLQotICAgIGlmIChzZWxmLT5pZ25vcmVfb2JzY3VyZSAmJiBpID49IEdTVF9ERUlOVEVSTEFDRV9PQlNDVVJFX1RIUkVTSE9MRCkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKHN0YXRlX2NvdW50IDwgbGVuZ3RoKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBsb29wIG92ZXIgYWxsIHBoYXNlcyAqLwotICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykgewotICAgICAgLyogbG93LWxhdGVuY3kgbW9kZSBsb29rcyBhdCBwYXN0IGJ1ZmZlcnMsIGhpZ2ggbGF0ZW5jeSBhdCBmdXR1cmUgYnVmZmVycyAqLwotICAgICAgY29uc3QgZ2ludCBzdGF0ZV9pZHggPQotICAgICAgICAgIHNlbGYtPmxvd19sYXRlbmN5ID8gKHNlbGYtPmhpc3RvcnlfY291bnQgLSAxKSA+PiAxIDogc3RhdGVfY291bnQgLSAxOwotICAgICAgLyogbG9vcCBvdmVyIGhpc3RvcnksIGJyZWFraW5nIG9uIGRpZmZlcmluZyBidWZmZXIgc3RhdGVzICovCi0gICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuZ3RoICYmIGsgPCBzdGF0ZV9jb3VudDsgaysrKSB7Ci0gICAgICAgIGNvbnN0IGd1aW50OCBoaXN0ID0gc2VsZi0+YnVmX3N0YXRlc1tzdGF0ZV9pZHggLSBrXS5zdGF0ZTsKLSAgICAgICAgY29uc3QgZ3VpbnQ4IHBhdHQgPSB0ZWxlY2luZV9wYXR0ZXJuc1tpXS5zdGF0ZXNbKGogKyBrKSAlIGxlbmd0aF07Ci0gICAgICAgIGlmICghKGhpc3QgJiBwYXR0KSkKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogbWFrZSBjb21wbGV0ZSBtYXRjaGVzIG1vcmUgc2lnbmZpY2FudCAqLwotICAgICAgaWYgKGsgPT0gbGVuZ3RoKQotICAgICAgICBrICs9IEdTVF9ERUlOVEVSTEFDRV9NQVhfQlVGRkVSX1NUQVRFX0hJU1RPUlk7Ci0KLSAgICAgIC8qIHRha2UgYXMgbmV3IGJlc3QgcGF0dGVybiBpZiB0aGUgbnVtYmVyIG9mIG1hdGNoZWQgYnVmZmVycyBpcyBtb3JlIHRoYW4KLSAgICAgICAqIGZvciBvdGhlciBwYXR0ZXJucyAqLwotICAgICAgaWYgKGsgPiBzY29yZSkgewotICAgICAgICBzY29yZSA9IGs7Ci0gICAgICAgIHBhdHRlcm4gPSBpOwotICAgICAgICBwaGFzZSA9IGo7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKHBhdHRlcm4gPCAwKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAiRmFpbGVkIHRvIHNlbGVjdCBhIHBhdHRlcm4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgIkZpbmFsIHBhdHRlcm4gbWF0Y2ggcmVzdWx0OiBwYSAlZCwgcGggJWQsIGwgJWQsIHMgJWQiLCBwYXR0ZXJuLCBwaGFzZSwKLSAgICAgIHRlbGVjaW5lX3BhdHRlcm5zW3BhdHRlcm5dLmxlbmd0aCwgc2NvcmUpOwotICBzZWxmLT5wYXR0ZXJuID0gcGF0dGVybjsKLSAgc2VsZi0+cGF0dGVybl9waGFzZSA9IHBoYXNlOwotICBzZWxmLT5wYXR0ZXJuX2NvdW50ID0gMDsKLSAgc2VsZi0+b3V0cHV0X2NvdW50ID0gMDsKLSAgc2VsZi0+cGF0dGVybl9sb2NrID0gVFJVRTsKLQotICBmb3IgKGkgPSAwOyBpIDwgdGVsZWNpbmVfcGF0dGVybnNbcGF0dGVybl0ubGVuZ3RoOyBpKyspIHsKLSAgICBnaW50IHN0YXRlX2lkeCA9Ci0gICAgICAgIHNlbGYtPmxvd19sYXRlbmN5ID8gKHNlbGYtPmhpc3RvcnlfY291bnQgLSAxKSA+PiAxIDogc2VsZi0+c3RhdGVfY291bnQgLQotICAgICAgICAxOwotICAgIHN0YXRlX2lkeCAtPSBpOwotICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAiYnVmWyVkXSAlcyIsIGksCi0gICAgICAgIFNUQVRFX1RPX1NUUklORyAoc2VsZi0+YnVmX3N0YXRlc1tzdGF0ZV9pZHhdLnN0YXRlKSk7Ci0gIH0KLQotICAvKiBjaGVjayBmb3IgdGhlIGNhc2UgdGhhdCB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHBhdHRlcm4gaXMgYW4gb3JwaGFuICovCi0gIGlmIChwYXR0ZXJuID4gMQotICAgICAgJiYgdGVsZWNpbmVfcGF0dGVybnNbcGF0dGVybl0uc3RhdGVzW3BoYXNlXSAmIChHU1RfT05FIHwgR1NUX0lOVCkpIHsKLSAgICBnaW50IGkgPSBwaGFzZSwgZmllbGRfY291bnQgPSAwOwotICAgIGd1aW50OCBzdGF0ZSA9IHRlbGVjaW5lX3BhdHRlcm5zW3BhdHRlcm5dLnN0YXRlc1tpXTsKLQotICAgIGRvIHsKLSAgICAgIGlmIChzdGF0ZSAmIEdTVF9PTkUpIHsKLSAgICAgICAgZmllbGRfY291bnQrKzsKLSNpZiAwCi0gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBHU1RfRFJQKSkgewotI2VuZGlmCi0gICAgICB9IGVsc2UgewotICAgICAgICBmaWVsZF9jb3VudCArPSAyOwotICAgICAgfQotICAgICAgaSsrOwotICAgICAgaSAlPSB0ZWxlY2luZV9wYXR0ZXJuc1twYXR0ZXJuXS5sZW5ndGg7Ci0gICAgICBzdGF0ZSA9IHRlbGVjaW5lX3BhdHRlcm5zW3BhdHRlcm5dLnN0YXRlc1tpXTsKLSAgICB9IHdoaWxlICghKHN0YXRlICYgR1NUX1BSRykpOwotCi0gICAgLyogaWYgZmllbGRfY291bnQgaXMgb2RkLCB3ZSBoYXZlIGFuIG9ycGhhbiBmaWVsZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQotICAgICAqIHNlcXVlbmNlCi0gICAgICogbm90ZSAtIGRvbid0IGRvIHRoaXMgaW4gbG93LWxhdGVuY3kgbW9kZSBhcyB3ZSBhcmUgc29tZXdoZXJlIHdpdGhpbiB0aGUKLSAgICAgKiBwYXR0ZXJuIGFscmVhZHkgKi8KLSAgICBpZiAoIXNlbGYtPmxvd19sYXRlbmN5ICYmICgqZmx1c2hfb25lID0gZmllbGRfY291bnQgJiAxKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk9ycGhhbiBmaWVsZCBkZXRlY3RlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAiCi0gICAgICAgICAgInBhdHRlcm4gLSBpdCB3aWxsIGJlIGRlaW50ZXJsYWNlZC4iKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kZWludGVybGFjZV9vdXRwdXRfZnJhbWUgKEdzdERlaW50ZXJsYWNlICogc2VsZiwgZ2Jvb2xlYW4gZmx1c2hpbmcpCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnaW50IGZpZWxkc19yZXF1aXJlZDsKLSAgR3N0QnVmZmVyICpidWYsICpvdXRidWY7Ci0gIEdzdFZpZGVvRnJhbWUgKm91dGZyYW1lID0gTlVMTDsKLSAgR3N0RGVpbnRlcmxhY2VGaWVsZCAqZmllbGQxLCAqZmllbGQyOwotICBHc3RWaWRlb0ludGVybGFjZU1vZGUgaW50ZXJsYWNpbmdfbW9kZTsKLSAgZ3VpbnQ4IGJ1Zl9zdGF0ZTsKLSAgZ2Jvb2xlYW4gaGxfbm9fbG9jazsgICAgICAgICAgLyogaW5kaWNhdGVzIGhpZ2ggbGF0ZW5jeSB0aW1lc3RhbXAgYWRqdXN0bWVudCBidXQgbm8gcGF0dGVybiBsb2NrIChjb3VsZCBiZSBPTkVGIG9yIEkpICovCi0gIGdib29sZWFuIHNhbWVfYnVmZmVyOyAgICAgICAgIC8qIGFyZSBmaWVsZDEgYW5kIGZpZWxkMiBpbiB0aGUgc2FtZSBidWZmZXI/ICovCi0gIGdib29sZWFuIGZsdXNoX29uZTsgICAgICAgICAgIC8qIHVzZWQgZm9yIGZsdXNoaW5nIG9uZSBmaWVsZCB3aGVuIGluIGhpZ2ggbGF0ZW5jeSBtb2RlIGFuZCBub3QgbG9ja2VkICovCi0gIFRlbGVjaW5lUGF0dGVybiBwYXR0ZXJuOwotICBndWludDggcGhhc2UsIGNvdW50OwotICBjb25zdCBHc3REZWludGVybGFjZUxvY2tpbmcgbG9ja2luZyA9IHNlbGYtPmxvY2tpbmc7Ci0KLSAgbWVtc2V0ICgmcGF0dGVybiwgMCwgc2l6ZW9mIChwYXR0ZXJuKSk7Ci0KLXJlc3RhcnQ6Ci0gIHJldCA9IEdTVF9GTE9XX09LOwotICBobF9ub19sb2NrID0gRkFMU0U7Ci0gIGZsdXNoX29uZSA9IEZBTFNFOwotICBzZWxmLT5uZWVkX21vcmUgPSBGQUxTRTsKLSAgcGhhc2UgPSBzZWxmLT5wYXR0ZXJuX3BoYXNlOwotICBjb3VudCA9IHNlbGYtPnBhdHRlcm5fY291bnQ7Ci0KLSAgaWYgKCFzZWxmLT5oaXN0b3J5X2NvdW50KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkhpc3RvcnkgaXMgZW1wdHksIHdhaXRpbmcgZm9yIG1vcmUgYnVmZmVycyEiKTsKLSAgICBnb3RvIG5lZWRfbW9yZTsKLSAgfQotCi0gIGZpZWxkMSA9ICZzZWxmLT5maWVsZF9oaXN0b3J5W3NlbGYtPmhpc3RvcnlfY291bnQgLSAxXTsKLQotICBpZiAobG9ja2luZyAhPSBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19OT05FKSB7Ci0gICAgR3N0Q2FwcyAqc2lua2NhcHM7Ci0KLSAgICBpZiAoIXNlbGYtPnN0YXRlX2NvdW50KSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLAotICAgICAgICAgICJCUk9LRU4hIEZpZWxkcyBpbiBoaXN0b3J5ICsgbm8gc3RhdGVzIHNob3VsZCBub3QgaGFwcGVuISIpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLQotICAgIGdzdF9kZWludGVybGFjZV9nZXRfYnVmZmVyX3N0YXRlIChzZWxmLCBmaWVsZDEtPmZyYW1lLCAmYnVmX3N0YXRlLAotICAgICAgICAmaW50ZXJsYWNpbmdfbW9kZSk7Ci0KLSAgICBpZiAoc2VsZi0+cGF0dGVybiAhPSAtMSkKLSAgICAgIHBhdHRlcm4gPSB0ZWxlY2luZV9wYXR0ZXJuc1tzZWxmLT5wYXR0ZXJuXTsKLQotICAgIC8qIHBhdHRlcm5zIDAgYW5kIDEgYXJlIGludGVybGFjZWQsIHRoZSByZXN0IGFyZSB0ZWxlY2luZSAqLwotICAgIGlmIChzZWxmLT5wYXR0ZXJuID4gMSkKLSAgICAgIGludGVybGFjaW5nX21vZGUgPSBHU1RfVklERU9fSU5URVJMQUNFX01PREVfTUlYRUQ7Ci0KLSAgICBpZiAoc2VsZi0+cGF0dGVybiA9PSAtMSB8fCBzZWxmLT5wYXR0ZXJuX3JlZnJlc2gKLSAgICAgICAgfHwgIShidWZfc3RhdGUgJiBwYXR0ZXJuLnN0YXRlc1socGhhc2UgKyBjb3VudCkgJSBwYXR0ZXJuLmxlbmd0aF0pKSB7Ci0gICAgICBpZiAoc2VsZi0+cGF0dGVybiA9PSAtMSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiTm8gcGF0dGVybiBsb2NrIC0gcmVmcmVzaCBsb2NrIik7Ci0gICAgICB9IGVsc2UgaWYgKHNlbGYtPnBhdHRlcm5fcmVmcmVzaCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUGF0dGVybiByZWZyZXNoIC0gcmVmcmVzaCBsb2NrIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiVW5leHBlY3RlZCBidWZmZXIgc3RhdGUgLSByZWZyZXNoIGxvY2siKTsKLSAgICAgIH0KLSAgICAgIC8qIG5vIHBhdHRlcm4sIHBhdHRlcm4gcmVmcmVzaCBzZXQgb3IgdW5leHBlY3RlZCBidWZmZXIgc3RhdGUgKi8KLSAgICAgIHNlbGYtPnBhdHRlcm5fbG9jayA9IEZBTFNFOwotICAgICAgc2VsZi0+cGF0dGVybl9yZWZyZXNoID0gVFJVRTsKLQotICAgICAgLyogcmVmcmVzaCBwYXR0ZXJuIGxvY2sgKi8KLSAgICAgIGdzdF9kZWludGVybGFjZV9nZXRfcGF0dGVybl9sb2NrIChzZWxmLCAmZmx1c2hfb25lKTsKLQotICAgICAgaWYgKHNlbGYtPnBhdHRlcm4gIT0gLTEpIHsKLSAgICAgICAgLyogbG9ja2VkIG9udG8gYSB2YWxpZCBwYXR0ZXJuIHNvIHJlZnJlc2ggY29tcGxldGUgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlBhdHRlcm4gbG9ja2VkISAlcyBzdGFydGluZyBhdCAlZCIsCi0gICAgICAgICAgICB0ZWxlY2luZV9wYXR0ZXJuc1tzZWxmLT5wYXR0ZXJuXS5uaWNrLCBzZWxmLT5wYXR0ZXJuX3BoYXNlKTsKLSAgICAgICAgc2VsZi0+cGF0dGVybl9yZWZyZXNoID0gRkFMU0U7Ci0gICAgICB9IGVsc2UgaWYgKCFzZWxmLT5sb3dfbGF0ZW5jeSkgewotICAgICAgICBpZiAoIXNlbGYtPnBhdHRlcm5fbG9jaykgewotICAgICAgICAgIGdvdG8gbmVlZF9tb3JlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGhsX25vX2xvY2sgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNldGNhcHMgb24gc2luayBhbmQgc3JjIHBhZHMgKi8KLSAgICAgIHNpbmtjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzZWxmLT5zaW5rcGFkKTsKLSAgICAgIGlmICghc2lua2NhcHMgfHwgIWdzdF9kZWludGVybGFjZV9zZXRjYXBzIChzZWxmLCBzZWxmLT5zaW5rcGFkLCBzaW5rY2FwcykpIHsKLSAgICAgICAgaWYgKHNpbmtjYXBzKQotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChzaW5rY2Fwcyk7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICAgIH0KLQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtjYXBzKTsKLQotICAgICAgaWYgKGZsdXNoX29uZSAmJiBzZWxmLT5kcm9wX29ycGhhbnMpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkRyb3BwaW5nIG9ycGhhbiBmaXJzdCBmaWVsZCIpOwotICAgICAgICBzZWxmLT5jdXJfZmllbGRfaWR4LS07Ci0gICAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcF9hbmRfZnJlZSAoZ3N0X2RlaW50ZXJsYWNlX3BvcF9oaXN0b3J5IChzZWxmKSk7Ci0gICAgICAgIGdvdG8gcmVzdGFydDsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2RlaW50ZXJsYWNlX2dldF9idWZmZXJfc3RhdGUgKHNlbGYsIGZpZWxkMS0+ZnJhbWUsIE5VTEwsCi0gICAgICAgICZpbnRlcmxhY2luZ19tb2RlKTsKLSAgfQotCi0gIHNhbWVfYnVmZmVyID0gc2VsZi0+aGlzdG9yeV9jb3VudCA+PSAyCi0gICAgICAmJiAoR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZpZWxkMS0+ZnJhbWUsIDApID09Ci0gICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc2VsZi0+ZmllbGRfaGlzdG9yeVtzZWxmLT5oaXN0b3J5X2NvdW50IC0KLSAgICAgICAgICAgICAgMl0uZnJhbWUsIDApKTsKLQotICBpZiAoKGZsdXNoaW5nICYmIHNlbGYtPmhpc3RvcnlfY291bnQgPT0gMSkgfHwgKGZsdXNoX29uZQotICAgICAgICAgICYmICFzZWxmLT5kcm9wX29ycGhhbnMpIHx8IChobF9ub19sb2NrICYmIChzZWxmLT5oaXN0b3J5X2NvdW50ID09IDEKLSAgICAgICAgICAgICAgfHwgIXNhbWVfYnVmZmVyKSkpIHsKLSAgICAvKiBUaGlzIGNhc2UgaXMgZm9yIGZsdXNoaW5nIGEgc2luZ2xlIGZpZWxkOgotICAgICAqIC0gZmx1c2hpbmcgYW5kIDEgZmllbGQgaW4gdGhlIGhpc3RvcnkKLSAgICAgKiAtIGZsdXNoIG9uZSAoZHVlIHRvIG9ycGhhbnMgaW4gdGhlIHBhdHRlcm4pIGFuZCBkbyBub3QgZHJvcCBvcnBoYW5zCi0gICAgICogLSBoaWdoLWxhdGVuY3kgcGF0dGVybiBsb2NraW5nIHdpdGggbm8gcG9zc2libGUgbG9jayBnaXZlbiB0aGUgY3VycmVudAotICAgICAqICAgc3RhdGUgYW5kIGVpdGhlciBvbmx5IG9uZSBmaWVsZCBpbiB0aGUgaGlzdG9yeSBvciB0aGUgdGlwIHR3byBmaWVsZHMKLSAgICAgKiAgIGFyZSBpbiBzZXBhcmF0ZSBidWZmZXJzICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkZsdXNoaW5nIG9uZSBmaWVsZCB1c2luZyBsaW5lYXIgbWV0aG9kIik7Ci0gICAgZ3N0X2RlaW50ZXJsYWNlX3NldF9tZXRob2QgKHNlbGYsIEdTVF9ERUlOVEVSTEFDRV9MSU5FQVIpOwotICAgIGZpZWxkc19yZXF1aXJlZCA9IGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2ZpZWxkc19yZXF1aXJlZCAoc2VsZi0+bWV0aG9kKTsKLSAgfSBlbHNlIGlmIChpbnRlcmxhY2luZ19tb2RlID09IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9QUk9HUkVTU0lWRSB8fAotICAgICAgKGludGVybGFjaW5nX21vZGUgPT0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX01JWEVEICYmCi0gICAgICAgICAgIUdTVF9WSURFT19GUkFNRV9JU19JTlRFUkxBQ0VEIChmaWVsZDEtPmZyYW1lKSkpIHsKLSAgICAvKiBUaGlzIGNhc2UgaXMgZm9yIHByb2Nlc3NpbmcgcHJvZ3Jlc3NpdmUgYnVmZmVycywgdGVsZWNpbmUgb3IgcGxhaW4KLSAgICAgKiBwcm9ncmVzc2l2ZSAqLwotICAgIEdzdFZpZGVvRnJhbWUgKmZpZWxkMV9mcmFtZTsKLSAgICBHc3RCdWZmZXIgKmZpZWxkMV9idWZmZXI7Ci0KLSAgICAvKiBwcm9ncmVzc2l2ZSAqLwotICAgIGZpZWxkc19yZXF1aXJlZCA9IDI7Ci0KLSAgICAvKiBOb3QgZW5vdWdoIGZpZWxkcyBpbiB0aGUgaGlzdG9yeSAqLwotICAgIGlmICghZmx1c2hpbmcgJiYgc2VsZi0+aGlzdG9yeV9jb3VudCA8IGZpZWxkc19yZXF1aXJlZCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk5lZWQgbW9yZSBmaWVsZHMgKGhhdmUgJWQsIG5lZWQgJWQpIiwKLSAgICAgICAgICBzZWxmLT5oaXN0b3J5X2NvdW50LCBzZWxmLT5jdXJfZmllbGRfaWR4ICsgZmllbGRzX3JlcXVpcmVkKTsKLSAgICAgIGdvdG8gbmVlZF9tb3JlOwotICAgIH0KLQotICAgIGZpZWxkMiA9ICZzZWxmLT5maWVsZF9oaXN0b3J5W3NlbGYtPmhpc3RvcnlfY291bnQgLSAyXTsKLSAgICBpZiAoR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZpZWxkMS0+ZnJhbWUsCi0gICAgICAgICAgICAwKSAhPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZmllbGQyLT5mcmFtZSwgMCkpIHsKLSAgICAgIC8qIEVSUk9SIC0gbmV4dCB0d28gZmllbGRzIGluIGZpZWxkIGhpc3RvcnkgYXJlIG5vdCBvbmUgcHJvZ3Jlc3NpdmUgYnVmZmVyIC0gd2VhdmU/ICovCi0gICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLAotICAgICAgICAgICJQcm9ncmVzc2l2ZSBidWZmZXIgYnV0IHR3byBmaWVsZHMgYXQgdGlwIGFyZW4ndCBpbiB0aGUgc2FtZSBidWZmZXIhIik7Ci0gICAgfQotCi0gICAgaWYgKElTX1RFTEVDSU5FIChpbnRlcmxhY2luZ19tb2RlKQotICAgICAgICAmJiAhZ3N0X2RlaW50ZXJsYWNlX2ZpeF90aW1lc3RhbXBzIChzZWxmLCBmaWVsZDEtPmZyYW1lLCBmaWVsZDItPmZyYW1lKQotICAgICAgICAmJiAhZmx1c2hpbmcpCi0gICAgICBnb3RvIG5lZWRfbW9yZTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJGcmFtZSB0eXBlOiBQcm9ncmVzc2l2ZTsgcHVzaGluZyBidWZmZXIgYXMgYSBmcmFtZSIpOwotICAgIC8qIHBvcCBhbmQgcHVzaCAqLwotICAgIHNlbGYtPmN1cl9maWVsZF9pZHgtLTsKLSAgICBmaWVsZDFfZnJhbWUgPSBnc3RfZGVpbnRlcmxhY2VfcG9wX2hpc3RvcnkgKHNlbGYpOwotICAgIGZpZWxkMV9idWZmZXIgPSBmaWVsZDFfZnJhbWUtPmJ1ZmZlcjsKLSAgICBnc3RfYnVmZmVyX3JlZiAoZmllbGQxX2J1ZmZlcik7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwX2FuZF9mcmVlIChmaWVsZDFfZnJhbWUpOwotICAgIC8qIGZpZWxkMiBpcyB0aGUgc2FtZSBidWZmZXIgYXMgZmllbGQxLCBidXQgd2UgbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUKLSAgICAgKiBoaXN0b3J5IGFueXdheSAqLwotICAgIHNlbGYtPmN1cl9maWVsZF9pZHgtLTsKLSAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKGdzdF9kZWludGVybGFjZV9wb3BfaGlzdG9yeSAoc2VsZikpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJbT1VUXSB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbmQgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoZmllbGQxX2J1ZmZlcikpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChmaWVsZDFfYnVmZmVyKSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDFfYnVmZmVyKSArCi0gICAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChmaWVsZDFfYnVmZmVyKSkpOwotICAgIGlmIChzZWxmLT5kaXNjb250KSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChmaWVsZDFfYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICBzZWxmLT5kaXNjb250ID0gRkFMU0U7Ci0gICAgfQotICAgIHJldHVybiBnc3RfcGFkX3B1c2ggKHNlbGYtPnNyY3BhZCwgZmllbGQxX2J1ZmZlcik7Ci0gIH0gZWxzZSBpZiAoSVNfVEVMRUNJTkUgKGludGVybGFjaW5nX21vZGUpCi0gICAgICAmJiBHU1RfVklERU9fRlJBTUVfSVNfSU5URVJMQUNFRCAoZmllbGQxLT5mcmFtZSkgJiYgIXNhbWVfYnVmZmVyKSB7Ci0gICAgLyogVGhpcyBjYXNlIG5lZWRzIHRvIGlkZW50aWZ5IHRlbGVjaW5lIG1peGVkIGJ1ZmZlcnMgdGhhdCByZXF1aXJlIHdlYXZpbmcKLSAgICAgKiBvZiB0d28gZmllbGRzIGluIGRpZmZlcmVudCBidWZmZXJzLgotICAgICAqIC0gaW50ZXJsYWNpbmcgbW9kZSBpcyBtaXhlZAotICAgICAqIC0gbG9ja2VkIG9uIHRvIGEgdGVsZWNpbmUgcGF0dGVybgotICAgICAqIC0gZnJhbWUgaXMgaW50ZXJsYWNlZAotICAgICAqIC0gZmllbGRzIGFyZSBpbiBzZXBhcmF0ZSBidWZmZXJzCi0gICAgICogSWYgd2UgZG9uJ3QgeWV0IGhhdmUgYSBwYXR0ZXJuIGxvY2ssIHdlIHdpbGwgaGF2ZSB0byBkZWludGVybGFjZSBhcyB3ZQotICAgICAqIGRvbid0IGV4cGxpY2l0bHkga25vdyB3ZSBoYXZlIGEgdGVsZWNpbmUgc2VxdWVuY2UgYW5kIHNvIHdlIGRyb3AgdGhyb3VnaAotICAgICAqIHRvIHRoZSBwbGFpbiBkZWludGVybGFjZSBjYXNlICovCi0gICAgZmllbGRzX3JlcXVpcmVkID0gMjsKLSAgICBpZiAoIWZsdXNoaW5nICYmIHNlbGYtPmhpc3RvcnlfY291bnQgPCBmaWVsZHNfcmVxdWlyZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJOZWVkIG1vcmUgZmllbGRzIChoYXZlICVkLCBuZWVkICVkKSIsCi0gICAgICAgICAgc2VsZi0+aGlzdG9yeV9jb3VudCwgc2VsZi0+Y3VyX2ZpZWxkX2lkeCArIGZpZWxkc19yZXF1aXJlZCk7Ci0gICAgICBnb3RvIG5lZWRfbW9yZTsKLSAgICB9Ci0KLSAgICBmaWVsZDIgPSAmc2VsZi0+ZmllbGRfaGlzdG9yeVtzZWxmLT5oaXN0b3J5X2NvdW50IC0gMl07Ci0gICAgaWYgKCFnc3RfZGVpbnRlcmxhY2VfZml4X3RpbWVzdGFtcHMgKHNlbGYsIGZpZWxkMS0+ZnJhbWUsIGZpZWxkMi0+ZnJhbWUpCi0gICAgICAgICYmICFmbHVzaGluZykKLSAgICAgIGdvdG8gbmVlZF9tb3JlOwotCi0gICAgLyogY2hlY2sgZmllbGQxIGFuZCBmaWVsZDIgYnVmZmVyIGNhcHMgYW5kIGZsYWdzIGFyZSBjb3JyZXNwb25kaW5nICovCi0gICAgaWYgKGZpZWxkMS0+ZmxhZ3MgPT0gZmllbGQyLT5mbGFncykgewotICAgICAgLyogRVJST1IgLSBmaWVsZHMgYXJlIG9mIHNhbWUgcGFyaXR5IC0gd2hhdCBzaG91bGQgYmUgZG9uZSBoZXJlPwotICAgICAgICogcGVyaGFwcyBkZWludGVybGFjZSB0aGUgdGlwIGZpZWxkIGFuZCBzdGFydCBhZ2Fpbj8gKi8KLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJUZWxlY2luZSBtaXhlZCB3aXRoIGZpZWxkcyBvZiBzYW1lIHBhcml0eSEiKTsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgIkZyYW1lIHR5cGU6IFRlbGVjaW5lIE1peGVkOyB3ZWF2aW5nIHRpcCB0d28gZmllbGRzIGludG8gYSBmcmFtZSIpOwotICAgIC8qIHNldCBtZXRob2QgdG8gV0VBVkUgKi8KLSAgICBnc3RfZGVpbnRlcmxhY2Vfc2V0X21ldGhvZCAoc2VsZiwgR1NUX0RFSU5URVJMQUNFX1dFQVZFKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBUaGlzIGlzIHRoZSBmaW5hbCBjYXRjaC1hbGwgY2FzZSB0aGF0IGFwcGxpZXMgdGhlIHNlbGVjdGVkIGRlaW50ZXJsYWNpbmcKLSAgICAgKiBtZXRob2QuIEF0IHRoaXMgcG9pbnQgdGhlIGZpZWxkcyB0byBiZSBwcm9jZXNzZWQgYXJlIGVpdGhlciBkZWZpbml0ZWx5Ci0gICAgICogaW50ZXJsYWNlZCBvciB3ZSBkbyBub3QgeWV0IGtub3cgdGhhdCB3ZSBoYXZlIGEgdGVsZWNpbmUgcGF0dGVybiBsb2NrCi0gICAgICogYW5kIHNvIHRoZSBiZXN0IHdlIGNhbiBkbyBpcyB0byBkZWludGVybGFjZSB0aGUgZmllbGRzLiAqLwotICAgIGdzdF9kZWludGVybGFjZV9zZXRfbWV0aG9kIChzZWxmLCBzZWxmLT51c2VyX3NldF9tZXRob2RfaWQpOwotICAgIGZpZWxkc19yZXF1aXJlZCA9IGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2ZpZWxkc19yZXF1aXJlZCAoc2VsZi0+bWV0aG9kKTsKLSAgICBpZiAoZmx1c2hpbmcgJiYgc2VsZi0+aGlzdG9yeV9jb3VudCA8IGZpZWxkc19yZXF1aXJlZCkgewotICAgICAgLyogbm90ZTogd2UgYWxyZWFkeSBjaGVja2VkIGZvciBmbHVzaGluZyB3aXRoIGhpc3RvcnkgY291bnQgPT0gMSBhYm92ZQotICAgICAgICogc28gd2UgbXVzdCBoYXZlIDIgb3IgbW9yZSBmaWVsZHMgaW4gaGVyZSAqLwotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NldF9tZXRob2QgKHNlbGYsIEdTVF9ERUlOVEVSTEFDRV9WRklSKTsKLSAgICAgIGZpZWxkc19yZXF1aXJlZCA9Ci0gICAgICAgICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfZmllbGRzX3JlcXVpcmVkIChzZWxmLT5tZXRob2QpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkZsdXNoaW5nIGZpZWxkKHMpIHVzaW5nICVzIG1ldGhvZCIsCi0gICAgICAgICAgbWV0aG9kc190eXBlc1tzZWxmLT5tZXRob2RfaWRdLnZhbHVlX25pY2spOwotICAgIH0KLQotICAgIC8qIE5vdCBlbm91Z2ggZmllbGRzIGluIHRoZSBoaXN0b3J5ICovCi0gICAgaWYgKCFmbHVzaGluZyAmJiBzZWxmLT5oaXN0b3J5X2NvdW50IDwgZmllbGRzX3JlcXVpcmVkKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiTmVlZCBtb3JlIGZpZWxkcyAoaGF2ZSAlZCwgbmVlZCAlZCkiLAotICAgICAgICAgIHNlbGYtPmhpc3RvcnlfY291bnQsIHNlbGYtPmN1cl9maWVsZF9pZHggKyBmaWVsZHNfcmVxdWlyZWQpOwotICAgICAgZ290byBuZWVkX21vcmU7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgIkZyYW1lIHR5cGU6IEludGVybGFjZWQ7IGRlaW50ZXJsYWNpbmcgdXNpbmcgJXMgbWV0aG9kIiwKLSAgICAgICAgbWV0aG9kc190eXBlc1tzZWxmLT5tZXRob2RfaWRdLnZhbHVlX25pY2spOwotICB9Ci0KLSAgaWYgKCFmbHVzaGluZyAmJiBzZWxmLT5jdXJfZmllbGRfaWR4IDwgMSkgewotICAgIGdvdG8gbmVlZF9tb3JlOwotICB9IGVsc2UgaWYgKHNlbGYtPmN1cl9maWVsZF9pZHggPCAwICYmIGZsdXNoaW5nKSB7Ci0gICAgc2VsZi0+Y3VyX2ZpZWxkX2lkeCsrOwotICB9Ci0KLSAgaWYgKHNlbGYtPmZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfQUxMIHx8IElTX1RFTEVDSU5FIChpbnRlcmxhY2luZ19tb2RlKSkKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiQWxsIGZpZWxkcyIpOwotICBlbHNlIGlmIChzZWxmLT5maWVsZHMgPT0gR1NUX0RFSU5URVJMQUNFX1RGKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJUb3AgZmllbGRzIik7Ci0gIGVsc2UgaWYgKHNlbGYtPmZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfQkYpCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkJvdHRvbSBmaWVsZHMiKTsKLQotICBpZiAoKHNlbGYtPmZpZWxkX2hpc3Rvcnlbc2VsZi0+Y3VyX2ZpZWxkX2lkeF0uZmxhZ3MgPT0gUElDVFVSRV9JTlRFUkxBQ0VEX1RPUAotICAgICAgICAgICYmIChzZWxmLT5maWVsZHMgPT0gR1NUX0RFSU5URVJMQUNFX1RGCi0gICAgICAgICAgICAgIHx8IElTX1RFTEVDSU5FIChpbnRlcmxhY2luZ19tb2RlKSkpCi0gICAgICB8fCAoc2VsZi0+ZmllbGRzID09IEdTVF9ERUlOVEVSTEFDRV9BTEwKLSAgICAgICAgICAmJiAhSVNfVEVMRUNJTkUgKGludGVybGFjaW5nX21vZGUpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJkZWludGVybGFjaW5nIHRvcCBmaWVsZCIpOwotCi0gICAgLyogY3JlYXRlIG5ldyBidWZmZXIgKi8KLSAgICByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHNlbGYtPnBvb2wsICZvdXRidWYsIE5VTEwpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIG5vX2J1ZmZlcjsKLQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmLT5oaXN0b3J5X2NvdW50ID49Ci0gICAgICAgIDEgKyBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dldF9sYXRlbmN5IChzZWxmLT5tZXRob2QpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgICBidWYgPQotICAgICAgICBzZWxmLT5maWVsZF9oaXN0b3J5W3NlbGYtPmhpc3RvcnlfY291bnQgLSAxIC0KLSAgICAgICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfbGF0ZW5jeSAoc2VsZi0+bWV0aG9kKV0uZnJhbWUtPmJ1ZmZlcjsKLQotICAgIGlmICghSVNfVEVMRUNJTkUgKGludGVybGFjaW5nX21vZGUpKSB7Ci0gICAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKLQotICAgICAgaWYgKHNlbGYtPmZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfQUxMKSB7Ci0gICAgICAgIGlmIChzZWxmLT5zZWdtZW50LnJhdGUgPCAwKQotICAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gdGltZXN0YW1wICsgc2VsZi0+ZmllbGRfZHVyYXRpb247Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IHRpbWVzdGFtcDsKLSAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IHNlbGYtPmZpZWxkX2R1cmF0aW9uOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPSB0aW1lc3RhbXA7Ci0gICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSAyICogc2VsZi0+ZmllbGRfZHVyYXRpb247Ci0gICAgICB9Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAgICJbQURKVVNUXSB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZHVyICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlbmQgJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSArCi0gICAgICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPQotICAgICAgICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChmaWVsZDEtPmZyYW1lLT5idWZmZXIpOwotICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9Ci0gICAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoZmllbGQxLT5mcmFtZS0+YnVmZmVyKTsKLSAgICB9Ci0KLSAgICAvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGRyb3AgdGhlIGZyYW1lIGJlY2F1c2Ugb2YgUW9TICovCi0gICAgaWYgKCFnc3RfZGVpbnRlcmxhY2VfZG9fcW9zIChzZWxmLCBidWYpKSB7Ci0gICAgICBzZWxmLT5jdXJfZmllbGRfaWR4LS07Ci0gICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKGdzdF9kZWludGVybGFjZV9wb3BfaGlzdG9yeSAoc2VsZikpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICAgIG91dGJ1ZiA9IE5VTEw7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKHNlbGYtPmN1cl9maWVsZF9pZHggPCAwICYmIGZsdXNoaW5nKSB7Ci0gICAgICAgIGlmIChzZWxmLT5oaXN0b3J5X2NvdW50ID09IDEpIHsKLSAgICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKGdzdF9kZWludGVybGFjZV9wb3BfaGlzdG9yeSAoc2VsZikpOwotICAgICAgICAgIGdvdG8gbmVlZF9tb3JlOwotICAgICAgICB9Ci0gICAgICAgIHNlbGYtPmN1cl9maWVsZF9pZHgrKzsKLSAgICAgIH0KLSAgICAgIGlmIChzZWxmLT5jdXJfZmllbGRfaWR4IDwgMCkgewotICAgICAgICBnb3RvIG5lZWRfbW9yZTsKLSAgICAgIH0KLSAgICAgIGlmICghZmx1c2hpbmcgJiYgc2VsZi0+Y3VyX2ZpZWxkX2lkeCA8IDEpIHsKLSAgICAgICAgZ290byBuZWVkX21vcmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG1hcCB0aGUgZnJhbWUgc28gdGhlIGRlaW50ZXJsYWNlIG1ldGhvZHMgY2FuIHdyaXRlIHRoZSBkYXRhIHRvIHRoZQotICAgICAgICogY29ycmVjdCBtZW1vcnkgbG9jYXRpb25zICovCi0gICAgICBvdXRmcmFtZSA9Ci0gICAgICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX25ld19hbmRfbWFwICgmc2VsZi0+dmluZm8sIG91dGJ1ZiwgR1NUX01BUF9XUklURSk7Ci0KLSAgICAgIC8qIGRvIG1hZ2ljIGNhbGN1bHVzICovCi0gICAgICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lIChzZWxmLT5tZXRob2QsCi0gICAgICAgICAgc2VsZi0+ZmllbGRfaGlzdG9yeSwgc2VsZi0+aGlzdG9yeV9jb3VudCwgb3V0ZnJhbWUsCi0gICAgICAgICAgc2VsZi0+Y3VyX2ZpZWxkX2lkeCk7Ci0KLSAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcF9hbmRfZnJlZSAob3V0ZnJhbWUpOwotCi0gICAgICBzZWxmLT5jdXJfZmllbGRfaWR4LS07Ci0gICAgICAvKiBuZWVkIHRvIHJlbW92ZSB0aGUgZmllbGQgaW4gdGhlIHRlbGVjaW5lIHdlYXZpbmcgY2FzZSAqLwotICAgICAgaWYgKChJU19URUxFQ0lORSAoaW50ZXJsYWNpbmdfbW9kZSkKLSAgICAgICAgICAgICAgJiYgc2VsZi0+bWV0aG9kX2lkID09IEdTVF9ERUlOVEVSTEFDRV9XRUFWRSkKLSAgICAgICAgICB8fCBzZWxmLT5jdXJfZmllbGRfaWR4ICsgMSArCi0gICAgICAgICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfbGF0ZW5jeSAoc2VsZi0+bWV0aG9kKSA8Ci0gICAgICAgICAgc2VsZi0+aGlzdG9yeV9jb3VudCB8fCBmbHVzaGluZykgewotICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKGdzdF9kZWludGVybGFjZV9wb3BfaGlzdG9yeSAoc2VsZikpOwotICAgICAgfQotCi0gICAgICBpZiAoZ3N0X2RlaW50ZXJsYWNlX2NsaXBfYnVmZmVyIChzZWxmLCBvdXRidWYpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAiW09VVF0gdHMgJSIgR1NUX1RJTUVfRk9STUFUICIsIGR1ciAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZW5kICUiCi0gICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpKSwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikpLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgKwotICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikpKTsKLSAgICAgICAgaWYgKHNlbGYtPmRpc2NvbnQpIHsKLSAgICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICAgICAgICBzZWxmLT5kaXNjb250ID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChzZWxmLT5zcmNwYWQsIG91dGJ1Zik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICAgIH0KLQotICAgICAgb3V0YnVmID0gTlVMTDsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgICBpZiAoSVNfVEVMRUNJTkUgKGludGVybGFjaW5nX21vZGUpCi0gICAgICAgICAgJiYgc2VsZi0+bWV0aG9kX2lkID09IEdTVF9ERUlOVEVSTEFDRV9XRUFWRSkgewotICAgICAgICAvKiBwb3Agb2ZmIHRoZSBzZWNvbmQgZmllbGQgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlJlbW92aW5nIHVudXNlZCBmaWVsZCAoY291bnQ6ICVkKSIsCi0gICAgICAgICAgICBzZWxmLT5oaXN0b3J5X2NvdW50KTsKLSAgICAgICAgc2VsZi0+Y3VyX2ZpZWxkX2lkeC0tOwotICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKGdzdF9kZWludGVybGFjZV9wb3BfaGlzdG9yeSAoc2VsZikpOwotICAgICAgICBpbnRlcmxhY2luZ19tb2RlID0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX0lOVEVSTEVBVkVEOwotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbHVzaF9vbmUgJiYgIXNlbGYtPmRyb3Bfb3JwaGFucykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk9ycGhhbiBmaWVsZCBkZWludGVybGFjZWQgLSByZWNvbmZpZ3VyaW5nIik7Ci0gICAgICBnb3RvIHJlc3RhcnQ7Ci0gICAgfQotICB9Ci0gIC8qIG5vIGNhbGN1bGF0aW9uIGRvbmU6IHJlbW92ZSBleGNlc3MgZmllbGQgKi8KLSAgZWxzZSBpZiAoc2VsZi0+ZmllbGRfaGlzdG9yeVtzZWxmLT5jdXJfZmllbGRfaWR4XS5mbGFncyA9PQotICAgICAgUElDVFVSRV9JTlRFUkxBQ0VEX1RPUCAmJiAoc2VsZi0+ZmllbGRzID09IEdTVF9ERUlOVEVSTEFDRV9CRgotICAgICAgICAgICYmICFJU19URUxFQ0lORSAoaW50ZXJsYWNpbmdfbW9kZSkpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlJlbW92aW5nIHVudXNlZCB0b3AgZmllbGQiKTsKLSAgICBzZWxmLT5jdXJfZmllbGRfaWR4LS07Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwX2FuZF9mcmVlIChnc3RfZGVpbnRlcmxhY2VfcG9wX2hpc3RvcnkgKHNlbGYpKTsKLQotICAgIGlmIChmbHVzaF9vbmUgJiYgIXNlbGYtPmRyb3Bfb3JwaGFucykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk9ycGhhbiBmaWVsZCBkZWludGVybGFjZWQgLSByZWNvbmZpZ3VyaW5nIik7Ci0gICAgICBnb3RvIHJlc3RhcnQ7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHNlbGYtPmhpc3RvcnlfY291bnQgPCBmaWVsZHNfcmVxdWlyZWQpCi0gICAgcmV0dXJuIHJldDsKLQotICBpZiAoc2VsZi0+Y3VyX2ZpZWxkX2lkeCA8IDApCi0gICAgcmV0dXJuIHJldDsKLQotICAvKiBkZWludGVybGFjZSBib3R0b21fZmllbGQgKi8KLSAgaWYgKChzZWxmLT5maWVsZF9oaXN0b3J5W3NlbGYtPmN1cl9maWVsZF9pZHhdLmZsYWdzID09Ci0gICAgICAgICAgUElDVFVSRV9JTlRFUkxBQ0VEX0JPVFRPTSAmJiAoc2VsZi0+ZmllbGRzID09IEdTVF9ERUlOVEVSTEFDRV9CRgotICAgICAgICAgICAgICB8fCBJU19URUxFQ0lORSAoaW50ZXJsYWNpbmdfbW9kZSkpKQotICAgICAgfHwgKHNlbGYtPmZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfQUxMCi0gICAgICAgICAgJiYgIUlTX1RFTEVDSU5FIChpbnRlcmxhY2luZ19tb2RlKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZGVpbnRlcmxhY2luZyBib3R0b20gZmllbGQiKTsKLQotICAgIC8qIGNyZWF0ZSBuZXcgYnVmZmVyICovCi0gICAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChzZWxmLT5wb29sLCAmb3V0YnVmLCBOVUxMKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBub19idWZmZXI7Ci0KLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZi0+aGlzdG9yeV9jb3VudCA+PQotICAgICAgICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dldF9sYXRlbmN5IChzZWxmLT5tZXRob2QpICsgMSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gICAgYnVmID0KLSAgICAgICAgc2VsZi0+ZmllbGRfaGlzdG9yeVtzZWxmLT5oaXN0b3J5X2NvdW50IC0gMSAtCi0gICAgICAgIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2xhdGVuY3kgKHNlbGYtPm1ldGhvZCldLmZyYW1lLT5idWZmZXI7Ci0gICAgaWYgKCFJU19URUxFQ0lORSAoaW50ZXJsYWNpbmdfbW9kZSkpIHsKLSAgICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpOwotCi0gICAgICBpZiAoc2VsZi0+ZmllbGRzID09IEdTVF9ERUlOVEVSTEFDRV9BTEwpIHsKLSAgICAgICAgaWYgKHNlbGYtPnNlZ21lbnQucmF0ZSA8IDApCi0gICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPSB0aW1lc3RhbXA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IHRpbWVzdGFtcCArIHNlbGYtPmZpZWxkX2R1cmF0aW9uOwotICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gc2VsZi0+ZmllbGRfZHVyYXRpb247Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IHRpbWVzdGFtcDsKLSAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IDIgKiBzZWxmLT5maWVsZF9kdXJhdGlvbjsKLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgIltBREpVU1RdIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXIgJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCAlIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpICsKLSAgICAgICAgICAgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9Ci0gICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZpZWxkMS0+ZnJhbWUtPmJ1ZmZlcik7Ci0gICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0KLSAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChmaWVsZDEtPmZyYW1lLT5idWZmZXIpOwotICAgIH0KLQotICAgIC8qIENoZWNrIGlmIHdlIG5lZWQgdG8gZHJvcCB0aGUgZnJhbWUgYmVjYXVzZSBvZiBRb1MgKi8KLSAgICBpZiAoIWdzdF9kZWludGVybGFjZV9kb19xb3MgKHNlbGYsIGJ1ZikpIHsKLSAgICAgIHNlbGYtPmN1cl9maWVsZF9pZHgtLTsKLSAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcF9hbmRfZnJlZSAoZ3N0X2RlaW50ZXJsYWNlX3BvcF9oaXN0b3J5IChzZWxmKSk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOwotICAgICAgb3V0YnVmID0gTlVMTDsKLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBtYXAgdGhlIGZyYW1lIHNvIHRoZSBkZWludGVybGFjZSBtZXRob2RzIGNhbiB3cml0ZSB0aGUgZGF0YSB0byB0aGUKLSAgICAgICAqIGNvcnJlY3QgbWVtb3J5IGxvY2F0aW9ucyAqLwotICAgICAgb3V0ZnJhbWUgPQotICAgICAgICAgIGdzdF92aWRlb19mcmFtZV9uZXdfYW5kX21hcCAoJnNlbGYtPnZpbmZvLCBvdXRidWYsIEdTVF9NQVBfV1JJVEUpOwotCi0gICAgICAvKiBkbyBtYWdpYyBjYWxjdWx1cyAqLwotICAgICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZSAoc2VsZi0+bWV0aG9kLAotICAgICAgICAgIHNlbGYtPmZpZWxkX2hpc3RvcnksIHNlbGYtPmhpc3RvcnlfY291bnQsIG91dGZyYW1lLAotICAgICAgICAgIHNlbGYtPmN1cl9maWVsZF9pZHgpOwotCi0gICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXBfYW5kX2ZyZWUgKG91dGZyYW1lKTsKLQotICAgICAgc2VsZi0+Y3VyX2ZpZWxkX2lkeC0tOwotICAgICAgLyogbmVlZCB0byByZW1vdmUgdGhlIGZpZWxkIGluIHRoZSB0ZWxlY2luZSB3ZWF2aW5nIGNhc2UgKi8KLSAgICAgIGlmICgoSVNfVEVMRUNJTkUgKGludGVybGFjaW5nX21vZGUpCi0gICAgICAgICAgICAgICYmIHNlbGYtPm1ldGhvZF9pZCA9PSBHU1RfREVJTlRFUkxBQ0VfV0VBVkUpCi0gICAgICAgICAgfHwgc2VsZi0+Y3VyX2ZpZWxkX2lkeCArIDEgKwotICAgICAgICAgIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2xhdGVuY3kgKHNlbGYtPm1ldGhvZCkgPAotICAgICAgICAgIHNlbGYtPmhpc3RvcnlfY291bnQpIHsKLSAgICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwX2FuZF9mcmVlIChnc3RfZGVpbnRlcmxhY2VfcG9wX2hpc3RvcnkgKHNlbGYpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGdzdF9kZWludGVybGFjZV9jbGlwX2J1ZmZlciAoc2VsZiwgb3V0YnVmKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAgICAgIltPVVRdIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXIgJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCAlIgotICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSksCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpKSwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpICsKLSAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpKSk7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoc2VsZi0+c3JjcGFkLCBvdXRidWYpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci0gICAgICB9Ci0KLSAgICAgIG91dGJ1ZiA9IE5VTEw7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgaWYgKElTX1RFTEVDSU5FIChpbnRlcmxhY2luZ19tb2RlKQotICAgICAgICAgICYmIHNlbGYtPm1ldGhvZF9pZCA9PSBHU1RfREVJTlRFUkxBQ0VfV0VBVkUpIHsKLSAgICAgICAgLyogcG9wIG9mZiB0aGUgc2Vjb25kIGZpZWxkICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJSZW1vdmluZyB1bnVzZWQgZmllbGQgKGNvdW50OiAlZCkiLAotICAgICAgICAgICAgc2VsZi0+aGlzdG9yeV9jb3VudCk7Ci0gICAgICAgIHNlbGYtPmN1cl9maWVsZF9pZHgtLTsKLSAgICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwX2FuZF9mcmVlIChnc3RfZGVpbnRlcmxhY2VfcG9wX2hpc3RvcnkgKHNlbGYpKTsKLSAgICAgICAgaW50ZXJsYWNpbmdfbW9kZSA9IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9JTlRFUkxFQVZFRDsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmx1c2hfb25lICYmICFzZWxmLT5kcm9wX29ycGhhbnMpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPcnBoYW4gZmllbGQgZGVpbnRlcmxhY2VkIC0gcmVjb25maWd1cmluZyIpOwotICAgICAgZ290byByZXN0YXJ0OwotICAgIH0KLSAgfQotICAvKiBubyBjYWxjdWxhdGlvbiBkb25lOiByZW1vdmUgZXhjZXNzIGZpZWxkICovCi0gIGVsc2UgaWYgKHNlbGYtPmZpZWxkX2hpc3Rvcnlbc2VsZi0+Y3VyX2ZpZWxkX2lkeF0uZmxhZ3MgPT0KLSAgICAgIFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00gJiYgKHNlbGYtPmZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfVEYKLSAgICAgICAgICAmJiAhSVNfVEVMRUNJTkUgKGludGVybGFjaW5nX21vZGUpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJSZW1vdmluZyB1bnVzZWQgYm90dG9tIGZpZWxkIik7Ci0gICAgc2VsZi0+Y3VyX2ZpZWxkX2lkeC0tOwotICAgIGdzdF92aWRlb19mcmFtZV91bm1hcF9hbmRfZnJlZSAoZ3N0X2RlaW50ZXJsYWNlX3BvcF9oaXN0b3J5IChzZWxmKSk7Ci0KLSAgICBpZiAoZmx1c2hfb25lICYmICFzZWxmLT5kcm9wX29ycGhhbnMpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPcnBoYW4gZmllbGQgZGVpbnRlcmxhY2VkIC0gcmVjb25maWd1cmluZyIpOwotICAgICAgZ290byByZXN0YXJ0OwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLW5lZWRfbW9yZToKLSAgewotICAgIHNlbGYtPm5lZWRfbW9yZSA9IFRSVUU7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotbm9fYnVmZmVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBidWZmZXIiKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RlaW50ZXJsYWNlX2dldF9sYXRlbmN5IChHc3REZWludGVybGFjZSAqIHNlbGYpCi17Ci0gIGlmIChzZWxmLT5sb2NraW5nID09IEdTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX0FVVE8pIHsKLSAgICBHc3RRdWVyeSAqcXVlcnk7Ci0KLSAgICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfbGF0ZW5jeSAoKTsKLSAgICBpZiAoKGdzdF9wYWRfcGVlcl9xdWVyeSAoc2VsZi0+c2lua3BhZCwgcXVlcnkpKSkgewotICAgICAgZ2Jvb2xlYW4gaXNfbGl2ZTsKLSAgICAgIC8qIGlmIHVwc3RyZWFtIGlzIGxpdmUsIHdlIHVzZSBsb3ctbGF0ZW5jeSBwYXNzaXZlIGxvY2tpbmcgbW9kZQotICAgICAgICogZWxzZSBoaWdoLWxhdGVuY3kgYWN0aXZlIGxvY2tpbmcgbW9kZSAqLwotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmaXNfbGl2ZSwgTlVMTCwgTlVMTCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiTGF0ZW5jeSBxdWVyeSBpbmRpY2F0ZXMgc3RyZWFtIGlzICVzIiwKLSAgICAgICAgICBpc19saXZlID8gImxpdmUgLSB1c2luZyBwYXNzaXZlIGxvY2tpbmciIDoKLSAgICAgICAgICAibm90IGxpdmUgLSB1c2luZyBhY3RpdmUgbG9ja2luZyIpOwotICAgICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gICAgICByZXR1cm4gaXNfbGl2ZTsKLSAgICB9IGVsc2UgewotICAgICAgLyogY29uc2VydmF0aXZlbHkgdXNlIHBhc3NpdmUgbG9ja2luZyBpZiB0aGUgcXVlcnkgZmFpbHMgKi8KLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwKLSAgICAgICAgICAiTGF0ZW5jeSBxdWVyeSBmYWlsZWQgLSBmYWxsIGJhY2sgdG8gdXNpbmcgcGFzc2l2ZSBsb2NraW5nIik7Ci0gICAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gc2VsZi0+bG9ja2luZyAtIDI7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kZWludGVybGFjZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0RGVpbnRlcmxhY2UgKnNlbGYgPSBHU1RfREVJTlRFUkxBQ0UgKHBhcmVudCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgaWYgKHNlbGYtPnJlY29uZmlndXJlIHx8IGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKHNlbGYtPnNyY3BhZCkpIHsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgaWYgKChnaW50KSBzZWxmLT5uZXdfZmllbGRzICE9IC0xKQotICAgICAgc2VsZi0+dXNlcl9zZXRfZmllbGRzID0gc2VsZi0+bmV3X2ZpZWxkczsKLSAgICBpZiAoKGdpbnQpIHNlbGYtPm5ld19tb2RlICE9IC0xKQotICAgICAgc2VsZi0+bW9kZSA9IHNlbGYtPm5ld19tb2RlOwotICAgIHNlbGYtPm5ld19tb2RlID0gLTE7Ci0gICAgc2VsZi0+bmV3X2ZpZWxkcyA9IC0xOwotCi0gICAgc2VsZi0+cmVjb25maWd1cmUgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoc2VsZi0+c2lua3BhZCk7Ci0gICAgaWYgKGNhcHMgIT0gTlVMTCkgewotICAgICAgaWYgKCFnc3RfZGVpbnRlcmxhY2Vfc2V0Y2FwcyAoc2VsZiwgc2VsZi0+c2lua3BhZCwgY2FwcykpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgICB9Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICJbSU5dIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXIgJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpICsgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSkpOwotCi0gIGlmIChzZWxmLT5zdGlsbF9mcmFtZV9tb2RlIHx8IHNlbGYtPnBhc3N0aHJvdWdoKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgIkZyYW1lIHR5cGU6IFByb2dyZXNzaXZlPzsgcHVzaGluZyBidWZmZXIgdXNpbmcgcGFzcy10aHJvdWdoIik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgIltPVVRdIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkdXIgJSIgR1NUX1RJTUVfRk9STUFUICIsIGVuZCAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpICsgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSkpOwotCi0gICAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoc2VsZi0+c3JjcGFkLCBidWYpOwotICB9Ci0KLSAgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkRJU0NPTlQgYnVmZmVyLCByZXNldHRpbmcgaGlzdG9yeSIpOwotICAgIGdzdF9kZWludGVybGFjZV9yZXNldF9oaXN0b3J5IChzZWxmLCBGQUxTRSk7Ci0gICAgc2VsZi0+ZGlzY29udCA9IFRSVUU7Ci0gIH0KLQotICBnc3RfZGVpbnRlcmxhY2VfcHVzaF9oaXN0b3J5IChzZWxmLCBidWYpOwotICBidWYgPSBOVUxMOwotCi0gIGRvIHsKLSAgICByZXQgPSBnc3RfZGVpbnRlcmxhY2Vfb3V0cHV0X2ZyYW1lIChzZWxmLCBGQUxTRSk7Ci0gIH0gd2hpbGUgKCFzZWxmLT5uZWVkX21vcmUgJiYgc2VsZi0+aGlzdG9yeV9jb3VudCA+IDAgJiYgcmV0ID09IEdTVF9GTE9XX09LKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9hY2NlcHRjYXBzIChHc3REZWludGVybGFjZSAqIHNlbGYsIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0Q2FwcyAqb3VyY2FwczsKLQotICAvKiBJbiBBVVRPL0RJU0FCTEVEIG1vZGUgd2UgYWNjZXB0IGV2ZXJ5dGhpbmcgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKLSAgICogb3VyIHRlbXBsYXRlIGNhcHMuIEluIElOVEVSTEFDRUQgbW9kZSB3ZSBmb3JjZSBkZWludGVybGFjaW5nLCBtZWFuaW5nCi0gICAqIHdlIGNhbiBvbmx5IHBvc3NpYmx5IHN1cHBvcnQgdGhlIGRlaW50ZXJsYWNlIGNhcHMuCi0gICAqIEluIEFVVE9fU1RSSUNUIG1vZGUgd2UgYWNjZXB0IGFsbCBwcm9ncmVzc2l2ZSBmb3JtYXRzLCBidXQgb25seSB0aG9zZQotICAgKiBpbnRlcmxhY2VkIGZvcm1hdCB0aGF0IHdlIGNhbiBhY3R1YWxseSBkZWludGVybGFjZSAqLwotICBpZiAoc2VsZi0+bW9kZSA9PSBHU1RfREVJTlRFUkxBQ0VfTU9ERV9ESVNBQkxFRAotICAgICAgfHwgc2VsZi0+bW9kZSA9PSBHU1RfREVJTlRFUkxBQ0VfTU9ERV9BVVRPKSB7Ci0gICAgb3VyY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpOwotICAgIHJldCA9IGdzdF9jYXBzX2lzX3N1YnNldCAoY2Fwcywgb3VyY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKG91cmNhcHMpOwotICB9IGVsc2UgaWYgKHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfSU5URVJMQUNFRCkgewotICAgIG91cmNhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmZGVpbnRlcmxhY2VfY2Fwcyk7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfaXNfc3Vic2V0IChjYXBzLCBvdXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAob3VyY2Fwcyk7Ci0gIH0gZWxzZSBpZiAoc2VsZi0+bW9kZSA9PSBHU1RfREVJTlRFUkxBQ0VfTU9ERV9BVVRPX1NUUklDVCkgewotICAgIG91cmNhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmcHJvZ3Jlc3NpdmVfY2Fwcyk7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfaXNfc3Vic2V0IChjYXBzLCBvdXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAob3VyY2Fwcyk7Ci0KLSAgICBpZiAoIXJldCkgewotICAgICAgb3VyY2FwcyA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZkZWludGVybGFjZV9jYXBzKTsKLSAgICAgIHJldCA9IGdzdF9jYXBzX2lzX3N1YnNldCAoY2Fwcywgb3VyY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAob3VyY2Fwcyk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiYWNjZXB0LWNhcHMgcmVzdWx0OiVkIGZvciBjYXBzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgcmV0LCBjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9mcmFjdGlvbl9kb3VibGUgKGdpbnQgKiBuX291dCwgZ2ludCAqIGRfb3V0LCBnYm9vbGVhbiBoYWxmKQotewotICBnaW50IG4sIGQsIGdjZDsKLQotICBuID0gKm5fb3V0OwotICBkID0gKmRfb3V0OwotCi0gIGlmIChkID09IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChuID09IDApCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgZ2NkID0gZ3N0X3V0aWxfZ3JlYXRlc3RfY29tbW9uX2Rpdmlzb3IgKG4sIGQpOwotICBuIC89IGdjZDsKLSAgZCAvPSBnY2Q7Ci0KLSAgaWYgKGhhbGYpIHsKLSAgICBpZiAoR19NQVhJTlQgLyAyID49IEFCUyAoZCkpIHsKLSAgICAgIGQgKj0gMjsKLSAgICB9IGVsc2UgaWYgKG4gPj0gMiAmJiBuICE9IEdfTUFYSU5UKSB7Ci0gICAgICBuIC89IDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGQgPSBHX01BWElOVDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKEdfTUFYSU5UIC8gMiA+PSBBQlMgKG4pKSB7Ci0gICAgICBuICo9IDI7Ci0gICAgfSBlbHNlIGlmIChkID49IDIgJiYgZCAhPSBHX01BWElOVCkgewotICAgICAgZCAvPSAyOwotICAgIH0gZWxzZSB7Ci0gICAgICBuID0gR19NQVhJTlQ7Ci0gICAgfQotICB9Ci0KLSAgKm5fb3V0ID0gbjsKLSAgKmRfb3V0ID0gZDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2RlaW50ZXJsYWNlX2NhcHNfZG91YmxlX2ZyYW1lcmF0ZSAoR3N0Q2FwcyAqIGNhcHMsIGdib29sZWFuIGhhbGYpCi17Ci0gIGd1aW50IGxlbjsKLQotICBmb3IgKGxlbiA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgbGVuID4gMDsgbGVuLS0pIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBsZW4gLSAxKTsKLSAgICBjb25zdCBHVmFsdWUgKnZhbDsKLQotICAgIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZnJhbWVyYXRlIik7Ci0gICAgaWYgKCF2YWwpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfRlJBQ1RJT04pIHsKLSAgICAgIGdpbnQgbiwgZDsKLQotICAgICAgbiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICh2YWwpOwotICAgICAgZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKHZhbCk7Ci0KLSAgICAgIGlmICghZ3N0X2RlaW50ZXJsYWNlX2ZyYWN0aW9uX2RvdWJsZSAoJm4sICZkLCBoYWxmKSkgewotICAgICAgICBnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlIChjYXBzLCBsZW4gLSAxKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIG4sIGQsIE5VTEwpOwotICAgIH0gZWxzZSBpZiAoR19WQUxVRV9UWVBFICh2YWwpID09IEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKm1pbiwgKm1heDsKLSAgICAgIEdWYWx1ZSBucmFuZ2UgPSB7IDAsIH0sIG5taW4gPSB7Ci0gICAgICAwLH0sIG5tYXggPSB7Ci0gICAgICAwLH07Ci0gICAgICBnaW50IG4sIGQ7Ci0KLSAgICAgIGdfdmFsdWVfaW5pdCAoJm5yYW5nZSwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICAgICAgZ192YWx1ZV9pbml0ICgmbm1pbiwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICAgICAgZ192YWx1ZV9pbml0ICgmbm1heCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotCi0gICAgICBtaW4gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX3JhbmdlX21pbiAodmFsKTsKLSAgICAgIG1heCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fcmFuZ2VfbWF4ICh2YWwpOwotCi0gICAgICBuID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKG1pbik7Ci0gICAgICBkID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAobWluKTsKLQotICAgICAgaWYgKCFnc3RfZGVpbnRlcmxhY2VfZnJhY3Rpb25fZG91YmxlICgmbiwgJmQsIGhhbGYpKSB7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZucmFuZ2UpOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmbm1heCk7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZubWluKTsKLSAgICAgICAgZ3N0X2NhcHNfcmVtb3ZlX3N0cnVjdHVyZSAoY2FwcywgbGVuIC0gMSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmbm1pbiwgbiwgZCk7Ci0KLSAgICAgIG4gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAobWF4KTsKLSAgICAgIGQgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yIChtYXgpOwotCi0gICAgICBpZiAoIWdzdF9kZWludGVybGFjZV9mcmFjdGlvbl9kb3VibGUgKCZuLCAmZCwgaGFsZikpIHsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJm5yYW5nZSk7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZubWF4KTsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJm5taW4pOwotICAgICAgICBnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlIChjYXBzLCBsZW4gLSAxKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZubWF4LCBuLCBkKTsKLSAgICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb25fcmFuZ2UgKCZucmFuZ2UsICZubWluLCAmbm1heCk7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAocywgImZyYW1lcmF0ZSIsICZucmFuZ2UpOwotCi0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmbm1pbik7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmbm1heCk7Ci0gICAgfSBlbHNlIGlmIChHX1ZBTFVFX1RZUEUgKHZhbCkgPT0gR1NUX1RZUEVfTElTVCkgewotICAgICAgY29uc3QgR1ZhbHVlICpsdmFsOwotICAgICAgR1ZhbHVlIG5saXN0ID0geyAwLCB9OwotICAgICAgR1ZhbHVlIG52YWwgPSB7IDAsIH07Ci0gICAgICBnaW50IGk7Ci0KLSAgICAgIGdfdmFsdWVfaW5pdCAoJm5saXN0LCBHU1RfVFlQRV9MSVNUKTsKLSAgICAgIGZvciAoaSA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWwpOyBpID4gMDsgaS0tKSB7Ci0gICAgICAgIGdpbnQgbiwgZDsKLQotICAgICAgICBsdmFsID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlICh2YWwsIGkgLSAxKTsKLQotICAgICAgICBpZiAoR19WQUxVRV9UWVBFIChsdmFsKSAhPSBHU1RfVFlQRV9GUkFDVElPTikKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBuID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKGx2YWwpOwotICAgICAgICBkID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAobHZhbCk7Ci0KLSAgICAgICAgLyogRG91YmxlL0hhbGYgdGhlIGZyYW1lcmF0ZSBidXQgaWYgdGhpcyBmYWlscyBzaW1wbHkKLSAgICAgICAgICogc2tpcCB0aGlzIHZhbHVlIGZyb20gdGhlIGxpc3QgKi8KLSAgICAgICAgaWYgKCFnc3RfZGVpbnRlcmxhY2VfZnJhY3Rpb25fZG91YmxlICgmbiwgJmQsIGhhbGYpKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBnX3ZhbHVlX2luaXQgKCZudmFsLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0KLSAgICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJm52YWwsIG4sIGQpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKCZubGlzdCwgJm52YWwpOwotICAgICAgfQotICAgICAgZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlIChzLCAiZnJhbWVyYXRlIiwgJm5saXN0KTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2RlaW50ZXJsYWNlX2dldGNhcHMgKEdzdERlaW50ZXJsYWNlICogc2VsZiwgR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpyZXQsICpjYXBzOwotICBHc3RQYWQgKm90aGVycGFkOwotICBnaW50IGxlbjsKLSAgR3N0Q2FwcyAqb3VyY2FwczsKLSAgR3N0Q2FwcyAqcGVlcmNhcHM7Ci0gIEdzdENhcHMgKnRtcCwgKnRtcDI7Ci0KLSAgb3RoZXJwYWQgPSAocGFkID09IHNlbGYtPnNyY3BhZCkgPyBzZWxmLT5zaW5rcGFkIDogc2VsZi0+c3JjcGFkOwotCi0gIG91cmNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAob3RoZXJwYWQsIE5VTEwpOwotCi0gIC8qIEZpbHRlciBhbnkgcGVlcmNhcHMgdGhhdCBhcmUgYXZhaWxhYmxlIHdpdGggb3VyIHRlbXBsYXRlCi0gICAqIHRvIGdldCBzdGFydGVkIHdpdGggdGhlIHN1YnNldCBvZiBjYXBzIHdlIGFjdHVhbGx5IHN1cHBvcnQgKi8KLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUGVlciBoYXMgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmNhcHMpOwotICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChnc3RfY2Fwc19pbnRlcnNlY3QgKG91cmNhcHMsIHBlZXJjYXBzKSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAob3VyY2Fwcyk7Ci0gICAgcGVlcmNhcHMgPSBvdXJjYXBzID0gTlVMTDsKLSAgfSBlbHNlIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAob3VyY2Fwcyk7Ci0gICAgb3VyY2FwcyA9IE5VTEw7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCi0gICAgICAiVHJhbnNmb3JtaW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiB3aXRoIGZpbHRlciAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIGNhcHMsIGZpbHRlcik7Ci0KLSAgLyogSWYgZGVpbnRlcmxhY2luZyBpcyBkaXNhYmxlZCwgd2UganVzdCBwYXNzdGhyb3VnaCB0aGUKLSAgICogY2FwcyBhbmQgZXZlcnl0aGluZyAqLwotICBpZiAoc2VsZi0+bW9kZSA9PSBHU1RfREVJTlRFUkxBQ0VfTU9ERV9ESVNBQkxFRCkgewotICAgIHJldCA9IGNhcHM7Ci0gICAgY2FwcyA9IE5VTEw7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogSWYgZGVpbnRlcmxhY2luZyBpcyBlbmZvcmNlZCwgd2UgY2FuIG9ubHkgYWNjZXB0IHRoZQotICAgKiBjYXBzIGZvciB3aGljaCB3ZSBjYW4gYWN0dWFsbHkgZG8gZGVpbnRlcmxhY2luZyAqLwotICBpZiAoc2VsZi0+bW9kZSA9PSBHU1RfREVJTlRFUkxBQ0VfTU9ERV9JTlRFUkxBQ0VEKSB7Ci0gICAgdG1wID0gZ3N0X3N0YXRpY19jYXBzX2dldCAoJmRlaW50ZXJsYWNlX2NhcHMpOwotICAgIHJldCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzLCB0bXAsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgdG1wID0gTlVMTDsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgY2FwcyA9IE5VTEw7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgZ19hc3NlcnQgKHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfQVVUTwotICAgICAgfHwgc2VsZi0+bW9kZSA9PSBHU1RfREVJTlRFUkxBQ0VfTU9ERV9BVVRPX1NUUklDVCk7Ci0KLSAgLyogRm9yIHRoZSBhdXRvIG1vZGUgd2UgaGF2ZSB0byBkbyBhIGJpdCBtb3JlIHRoYW4gdGhhdCAqLwotICByZXQgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgLyogV2UgY2FuIGFjY2VwdCBhbnkgc3RydWN0dXJlIGlmCi0gICAqIC0gdGhleSBhcmUgcHJvZ3Jlc3NpdmUgYWxyZWFkeQotICAgKgotICAgKi8KLSAgdG1wID0gZ3N0X3N0YXRpY19jYXBzX2dldCAoJnByb2dyZXNzaXZlX2NhcHMpOwotICB0bXAyID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGNhcHMsIHRtcCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gIHRtcCA9IE5VTEw7Ci0gIHJldCA9IGdzdF9jYXBzX21lcmdlIChyZXQsIHRtcDIpOwotICB0bXAyID0gTlVMTDsKLQotICAvKiBvcgotICAgKiAtIHRoZXkgaGF2ZSBzeXNtZW0gY2FwcyBmZWF0dXJlcyBhbmQgYSBmb3JtYXQgZm9yIHdoaWNoIHdlIHN1cHBvcnQKLSAgICogICBkZWludGVybGFjaW5nCi0gICAqIG9yCi0gICAqIC0gdGhleSBoYXZlIEFOWSBjYXBzIGZlYXR1cmVzLCBpbiB3aGljaCBjYXNlIHdlIHN1cHBvcnQgaXQgZm9yCi0gICAqICAgc3lzbWVtIGNhcHMgZmVhdHVyZXMgZm9yIGZvcm1hdHMgd2Ugc3VwcG9ydAotICAgKgotICAgKiBOT1RFOiBUaGVzZSBhcmUgdGhlIGNhcHMgd2hlcmUgd2UgYWN0dWFsbHkgd291bGQgZG8gZGVpbnRlcmxhY2luZwotICAgKiBvdXJzZWx2ZXMuIElmIGZpZWxkcyA9PSBBTEwgd2Ugd291bGQgZG91YmxlIHRoZSBmcmFtZXJhdGUgc28gd291bGQKLSAgICogaGF2ZSB0byBoYWxmIHRoZSBmcmFtZXJhdGUgY29uc3RyYWludHMgZnJvbSBkb3duc3RyZWFtIGhlcmUKLSAgICovCi0gIHRtcCA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZkZWludGVybGFjZV9jYXBzKTsKLSAgdG1wMiA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChjYXBzLCB0bXAsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIGdzdF9jYXBzX3VucmVmICh0bXApOwotICB0bXAgPSBOVUxMOwotCi0gIGZvciAobGVuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKHRtcDIpOyBsZW4gPiAwOyBsZW4tLSkgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHRtcDIsIGxlbiAtIDEpOwotCi0gICAgaWYgKHBhZCA9PSBzZWxmLT5zaW5rcGFkKQotICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJpbnRlcmxhY2UtbW9kZSIpOwotICAgIGVsc2UKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiaW50ZXJsYWNlLW1vZGUiLCBHX1RZUEVfU1RSSU5HLCAicHJvZ3Jlc3NpdmUiLAotICAgICAgICAgIE5VTEwpOwotICB9Ci0KLSAgaWYgKHNlbGYtPnVzZXJfc2V0X2ZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfQUxMKSB7Ci0gICAgdG1wMiA9IGdzdF9kZWludGVybGFjZV9jYXBzX2RvdWJsZV9mcmFtZXJhdGUgKHRtcDIsIChwYWQgPT0gc2VsZi0+c2lua3BhZCkpOwotICB9Ci0gIGlmIChzZWxmLT51c2VyX3NldF9maWVsZHMgPT0gR1NUX0RFSU5URVJMQUNFX0ZJRUxEU19BVVRPKSB7Ci0gICAgdG1wID0gZ3N0X2NhcHNfY29weSAodG1wMik7Ci0gICAgdG1wID0gZ3N0X2RlaW50ZXJsYWNlX2NhcHNfZG91YmxlX2ZyYW1lcmF0ZSAodG1wLCAocGFkID09IHNlbGYtPnNpbmtwYWQpKTsKLSAgfQotCi0gIHJldCA9IGdzdF9jYXBzX21lcmdlIChyZXQsIHRtcDIpOwotICB0bXAyID0gTlVMTDsKLSAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfbWVyZ2UgKHJldCwgdG1wKTsKLSAgICB0bXAgPSBOVUxMOwotICB9Ci0KLSAgLyogb3IKLSAgICogLSBhbnl0aGluZyBlbHNlIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQganVzdCBwYXNzdGhyb3VnaCBhZ2FpbiBpZiB3ZSdyZQotICAgKiAgIG9ubHkgaW4gQVVUTyBhbmQgbm90IEFVVE9fU1RSSUNUIG1vZGUKLSAgICovCi0gIGlmIChzZWxmLT5tb2RlID09IEdTVF9ERUlOVEVSTEFDRV9NT0RFX0FVVE8pCi0gICAgcmV0ID0gZ3N0X2NhcHNfbWVyZ2UgKHJldCwgZ3N0X2NhcHNfY29weSAoY2FwcykpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgY2FwcyA9IE5VTEw7Ci0KLWRvbmU6Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKnRtcDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJpbnRlcnNlY3Rpbmcgd2l0aCAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKLSAgICB0bXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gdG1wOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUmV0dXJuaW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwb29sLCBhbGxvY2F0b3IgYW5kIHF1ZXJ5ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9zZXRfYWxsb2NhdGlvbiAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLAotICAgIEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0QWxsb2NhdGlvblBhcmFtcyAqIHBhcmFtcykKLXsKLSAgR3N0QWxsb2NhdG9yICpvbGRhbGxvYzsKLSAgR3N0QnVmZmVyUG9vbCAqb2xkcG9vbDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICBvbGRwb29sID0gc2VsZi0+cG9vbDsKLSAgc2VsZi0+cG9vbCA9IHBvb2w7Ci0KLSAgb2xkYWxsb2MgPSBzZWxmLT5hbGxvY2F0b3I7Ci0gIHNlbGYtPmFsbG9jYXRvciA9IGFsbG9jYXRvcjsKLQotICBpZiAocGFyYW1zKQotICAgIHNlbGYtPnBhcmFtcyA9ICpwYXJhbXM7Ci0gIGVsc2UKLSAgICBnc3RfYWxsb2NhdGlvbl9wYXJhbXNfaW5pdCAoJnNlbGYtPnBhcmFtcyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLQotICBpZiAob2xkcG9vbCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJkZWFjdGl2YXRpbmcgb2xkIHBvb2wgJXAiLCBvbGRwb29sKTsKLSAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAob2xkcG9vbCwgRkFMU0UpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG9sZHBvb2wpOwotICB9Ci0gIGlmIChvbGRhbGxvYykgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKG9sZGFsbG9jKTsKLSAgfQotICBpZiAocG9vbCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJhY3RpdmF0aW5nIG5ldyBwb29sICVwIiwgcG9vbCk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9kb19idWZmZXJwb29sIChHc3REZWludGVybGFjZSAqIHNlbGYsIEdzdENhcHMgKiBvdXRjYXBzKQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLSAgR3N0U3RydWN0dXJlICpjb25maWc7Ci0gIGd1aW50IHNpemUsIG1pbiwgbWF4OwotCi0gIGlmIChzZWxmLT5wYXNzdGhyb3VnaCkgewotICAgIC8qIHdlIGFyZSBpbiBwYXNzdGhyb3VnaCwgdGhlIGlucHV0IGJ1ZmZlciBpcyBuZXZlciBjb3BpZWQgYW5kIGFsd2F5cyBwYXNzZWQKLSAgICAgKiBhbG9uZy4gV2UgbmV2ZXIgYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBvbiB0aGUgc3JjcGFkLiBXaGF0IHdlIGRvIGlzCi0gICAgICogbGV0IHRoZSB1cHN0cmVhbSBlbGVtZW50IGRlY2lkZSBpZiBpdCB3YW50cyB0byB1c2UgYSBidWZmZXJwb29sIGFuZAotICAgICAqIHRoZW4gd2Ugd2lsbCBwcm94eSB0aGUgZG93bnN0cmVhbSBwb29sICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIndlJ3JlIHBhc3N0aG91Z2gsIGRlbGF5IGJ1ZmZlcnBvb2wiKTsKLSAgICBnc3RfZGVpbnRlcmxhY2Vfc2V0X2FsbG9jYXRpb24gKHNlbGYsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogbm90IHBhc3N0aHJvdWdoLCB3ZSBuZWVkIHRvIGFsbG9jYXRlICovCi0gIC8qIGZpbmQgYSBwb29sIGZvciB0aGUgbmVnb3RpYXRlZCBjYXBzIG5vdyAqLwotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZG9pbmcgYWxsb2NhdGlvbiBxdWVyeSIpOwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAob3V0Y2FwcywgVFJVRSk7Ci0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzZWxmLT5zcmNwYWQsIHF1ZXJ5KSkgewotICAgIC8qIG5vdCBhIHByb2JsZW0sIGp1c3QgZGVidWcgYSBsaXR0bGUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAicGVlciBBTExPQ0FUSU9OIHF1ZXJ5IGZhaWxlZCIpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkFMTE9DQVRJT04gKCVkKSBwYXJhbXM6ICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQsCi0gICAgICBxdWVyeSk7Ci0KLSAgLyogd2UgZ290IGNvbmZpZ3VyYXRpb24gZnJvbSBvdXIgcGVlciBvciB0aGUgZGVjaWRlX2FsbG9jYXRpb24gbWV0aG9kLAotICAgKiBwYXJzZSB0aGVtICovCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wYXJhbXMgKHF1ZXJ5KSA+IDApIHsKLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCAwLCAmYWxsb2NhdG9yLCAmcGFyYW1zKTsKLSAgfSBlbHNlIHsKLSAgICBhbGxvY2F0b3IgPSBOVUxMOwotICAgIGdzdF9hbGxvY2F0aW9uX3BhcmFtc19pbml0ICgmcGFyYW1zKTsKLSAgfQotCi0gIGlmIChnc3RfcXVlcnlfZ2V0X25fYWxsb2NhdGlvbl9wb29scyAocXVlcnkpID4gMCkKLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsICZwb29sLCAmc2l6ZSwgJm1pbiwgJm1heCk7Ci0gIGVsc2UgewotICAgIHBvb2wgPSBOVUxMOwotICAgIHNpemUgPSBHU1RfVklERU9fSU5GT19TSVpFICgmc2VsZi0+dmluZm8pOwotICAgIG1pbiA9Ci0gICAgICAgIE1BWCAoKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2ZpZWxkc19yZXF1aXJlZCAoc2VsZi0+bWV0aG9kKSArCi0gICAgICAgICAgICAxKSAvIDIgKyAxLCA0KTsKLSAgICBtYXggPSAwOwotICB9Ci0KLSAgaWYgKHBvb2wgPT0gTlVMTCkgewotICAgIC8qIG5vIHBvb2wsIHdlIGNhbiBtYWtlIG91ciBvd24gKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAibm8gcG9vbCwgbWFraW5nIG5ldyBwb29sIik7Ci0gICAgcG9vbCA9IGdzdF92aWRlb19idWZmZXJfcG9vbF9uZXcgKCk7Ci0gIH0KLQotICAvKiBub3cgY29uZmlndXJlICovCi0gIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIG91dGNhcHMsIHNpemUsIG1pbiwgbWF4KTsKLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLCBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKTsKLQotICAvKiBub3cgc3RvcmUgKi8KLSAgcmVzdWx0ID0gZ3N0X2RlaW50ZXJsYWNlX3NldF9hbGxvY2F0aW9uIChzZWxmLCBwb29sLCBhbGxvY2F0b3IsICZwYXJhbXMpOwotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGVpbnRlcmxhY2Vfc2V0Y2FwcyAoR3N0RGVpbnRlcmxhY2UgKiBzZWxmLCBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNjYXBzID0gTlVMTDsKLSAgR3N0VmlkZW9JbnRlcmxhY2VNb2RlIGludGVybGFjaW5nX21vZGU7Ci0gIGdpbnQgZnBzX24sIGZwc19kOwotICBHc3RDYXBzICpwZWVyY2FwcywgKmN1cnJlbnRfY2FwczsKLQotICBnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlIChzZWxmLT5zcmNwYWQpOwotCi0gIGlmICgoY3VycmVudF9jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpKSkgewotICAgIGlmIChnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgY3VycmVudF9jYXBzKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiR290IHNhbWUgY2FwcyBhZ2FpbiwgcmV0dXJuaW5nIik7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY3VycmVudF9jYXBzKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgICBnc3RfZGVpbnRlcmxhY2VfcmVzZXRfaGlzdG9yeSAoc2VsZiwgRkFMU0UpOwotICAgIGdzdF9jYXBzX3VucmVmIChjdXJyZW50X2NhcHMpOwotICB9Ci0gIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKHNlbGYtPnNyY3BhZCwgTlVMTCk7Ci0KLSAgLyogTWFrZSBzdXJlIHRoZSBwZWVyIGNhcHMgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGVtcGxhdGUgY2FwcyAqLwotICBpZiAocGVlcmNhcHMpIHsKLSAgICBHc3RDYXBzICp0bXAgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoc2VsZi0+c3JjcGFkKTsKLSAgICBHc3RDYXBzICp0bXAyID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChwZWVyY2FwcywgdG1wKTsKLQotICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gICAgcGVlcmNhcHMgPSBOVUxMOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotCi0gICAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5ICh0bXAyKSkgewotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRtcDIpOwotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgIlBlZXIgY2FwcyBub3QgY29tcGF0aWJsZSB3aXRoIHRlbXBsYXRlIGNhcHMiKTsKLSAgICAgIGdvdG8gaW52YWxpZF9jYXBzOwotICAgIH0KLSAgICBwZWVyY2FwcyA9IHRtcDI7Ci0gIH0KLQotICBpZiAoc2VsZi0+bG9ja2luZyAhPSBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19OT05FKSB7Ci0gICAgaWYgKHNlbGYtPmxvd19sYXRlbmN5ID09IC0xKQotICAgICAgc2VsZi0+bG93X2xhdGVuY3kgPSBnc3RfZGVpbnRlcmxhY2VfZ2V0X2xhdGVuY3kgKHNlbGYpOwotCi0gICAgaWYgKHNlbGYtPnBhdHRlcm5fbG9jaykgewotICAgICAgLyogcmVmcmVzaCBoYXMgYmVlbiBzdWNjZXNzZnVsIC0gd2UgaGF2ZSBhIGxvY2sgbm93ICovCi0gICAgICBzZWxmLT5wYXR0ZXJuX3JlZnJlc2ggPSBGQUxTRTsKLSAgICB9IGVsc2UgewotICAgICAgLyogaWYgd2Ugd2VyZSBub3QgcmVmcmVzaGluZyAoIXBhdHRlcm5fcmVmcmVzaCkgdGhlIGNhcHMgaGF2ZSBjaGFuZ2VkCi0gICAgICAgKiBzbyB3ZSBuZWVkIHRvIHJlZnJlc2ggYW5kIHdlIGRvbid0IGhhdmUgYSBsb2NrIGFueW1vcmUKLSAgICAgICAqIG90aGVyd2lzZSB3ZSBoYXZlIHBhdHRlcm5fZnJlc2ggYW5kICFwYXR0ZXJuX2xvY2sgYW55d2F5ICovCi0gICAgICBzZWxmLT5wYXR0ZXJuX3JlZnJlc2ggPSBUUlVFOwotICAgICAgc2VsZi0+cGF0dGVybl9sb2NrID0gRkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZzZWxmLT52aW5mbywgY2FwcykpCi0gICAgZ290byBpbnZhbGlkX2NhcHM7Ci0KLSAgZnBzX24gPSBHU1RfVklERU9fSU5GT19GUFNfTiAoJnNlbGYtPnZpbmZvKTsKLSAgZnBzX2QgPSBHU1RfVklERU9fSU5GT19GUFNfRCAoJnNlbGYtPnZpbmZvKTsKLQotICAvKiBVcGRhdGUgcGFzc3Rocm91Z2ggaW5mb3JtYXRpb24gKi8KLSAgaWYgKHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfRElTQUJMRUQpIHsKLSAgICBzZWxmLT5wYXNzdGhyb3VnaCA9IFRSVUU7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlBhc3N0aHJvdWdoIGJlY2F1c2UgbW9kZT1kaXNhYmxlZCIpOwotICB9IGVsc2UgaWYgKHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfSU5URVJMQUNFRCkgewotICAgIEdzdENhcHMgKnRtcCA9IGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZkZWludGVybGFjZV9jYXBzKTsKLQotICAgIGlmICghZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY2FwcywgdG1wKSkgewotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiVW5zdXBwb3J0ZWQgY2FwcyBmb3IgbW9kZT1pbnRlcmxhY2VkIik7Ci0gICAgICBnb3RvIGludmFsaWRfY2FwczsKLSAgICB9Ci0KLSAgICBzZWxmLT5wYXNzdGhyb3VnaCA9IEZBTFNFOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJOb3QgcGFzc3Rocm91Z2ggYmVjYXVzZSBtb2RlPWludGVybGFjZWQiKTsKLSAgfSBlbHNlIGlmIChzZWxmLT5tb2RlID09IEdTVF9ERUlOVEVSTEFDRV9NT0RFX0FVVE8KLSAgICAgIHx8IHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfQVVUT19TVFJJQ1QpIHsKLSAgICBHc3RDYXBzICp0bXAgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmZGVpbnRlcmxhY2VfY2Fwcyk7Ci0KLSAgICAvKiBBbHJlYWR5IHByb2dyZXNzaXZlPyBQYXNzdGhyb3VnaCAqLwotICAgIGlmICghR1NUX1ZJREVPX0lORk9fSVNfSU5URVJMQUNFRCAoJnNlbGYtPnZpbmZvKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgICAiUGFzc3Rocm91Z2ggYmVjYXVzZSBtb2RlPWF1dG8gYW5kIHByb2dyZXNzaXZlIGNhcHMiKTsKLSAgICAgIHNlbGYtPnBhc3N0aHJvdWdoID0gVFJVRTsKLSAgICB9IGVsc2UgaWYgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIHRtcCkpIHsKLSAgICAgIGlmIChwZWVyY2FwcykgewotICAgICAgICBHc3RDYXBzICphbGxvd2VkX2NhcHM7Ci0gICAgICAgIEdzdENhcHMgKnRtcDI7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgICAgICBhbGxvd2VkX2NhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHBlZXJjYXBzLCB0bXApOwotCi0gICAgICAgIHRtcDIgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgICAgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHRtcDIsIDApOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImludGVybGFjZS1tb2RlIiwgR19UWVBFX1NUUklORywgInByb2dyZXNzaXZlIiwKLSAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImZyYW1lcmF0ZSIpOwotCi0gICAgICAgIC8qIERvd25zdHJlYW0gZG9lcyBub3Qgc3VwcG9ydCBwcm9ncmVzc2l2ZSBjYXBzIGJ1dCBzdXBwb3J0cwotICAgICAgICAgKiB0aGUgdXBzdHJlYW0gY2FwcywgZ28gcGFzc3Rocm91Z2guCi0gICAgICAgICAqIFRPRE86IFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhlIGZyYW1lcmF0ZSBjb21wYXRpYmlsaXR5Ci0gICAgICAgICAqIG9mIHRoZSBjYXBzIHRvbyBoZXJlCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoYWxsb3dlZF9jYXBzLCBjYXBzKQotICAgICAgICAgICAgJiYgIWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGFsbG93ZWRfY2FwcywgdG1wMikpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAgICAgICAiUGFzc3Rocm91Z2ggYmVjYXVzZSBtb2RlPWF1dG8sICIKLSAgICAgICAgICAgICAgImRvd25zdHJlYW0gZG9lcyBub3Qgc3VwcG9ydCBwcm9ncmVzc2l2ZSBjYXBzIGFuZCBpbnRlcmxhY2VkIGNhcHMiKTsKLSAgICAgICAgICBzZWxmLT5wYXNzdGhyb3VnaCA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIk5vdCBwYXNzdGhyb3VnaCBiZWNhdXNlIG1vZGU9YXV0bywgIgotICAgICAgICAgICAgICAiZG93bnN0cmVhbSBzdXBwb3J0cyBwcm9ncmVzc2l2ZSBjYXBzIGFuZCBpbnRlcmxhY2VkIGNhcHMiKTsKLSAgICAgICAgICBzZWxmLT5wYXNzdGhyb3VnaCA9IEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGFsbG93ZWRfY2Fwcyk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmICh0bXAyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAiTm90IHBhc3N0aHJvdWdoIGJlY2F1c2UgbW9kZT1hdXRvIGFuZCBpbnRlcmxhY2VkIGNhcHMiKTsKLSAgICAgICAgc2VsZi0+cGFzc3Rocm91Z2ggPSBGQUxTRTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKHNlbGYtPm1vZGUgPT0gR1NUX0RFSU5URVJMQUNFX01PREVfQVVUTykgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICAgICAiUGFzc3Rocm91Z2ggYmVjYXVzZSBtb2RlPWF1dG8gYW5kIHVuc3VwcG9ydGVkIGludGVybGFjZWQgY2FwcyIpOwotICAgICAgICBzZWxmLT5wYXNzdGhyb3VnaCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwKLSAgICAgICAgICAgICJVbnN1cHBvcnRlZCBpbnRlcmxhY2VkIGNhcHMgaW4gbW9kZT1hdXRvLXN0cmljdCIpOwotICAgICAgICBnb3RvIGludmFsaWRfY2FwczsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgfSBlbHNlIHsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotCi0gIGludGVybGFjaW5nX21vZGUgPSBHU1RfVklERU9fSU5GT19JTlRFUkxBQ0VfTU9ERSAoJnNlbGYtPnZpbmZvKTsKLQotICBpZiAoIXNlbGYtPnBhc3N0aHJvdWdoKSB7Ci0gICAgaWYgKHNlbGYtPnBhdHRlcm5fbG9jaykgewotICAgICAgc3JjY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICAgICAgaWYgKHNlbGYtPnBhdHRlcm4gIT0gLTEKLSAgICAgICAgICAmJiBHX1VOTElLRUxZICghZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGZwc19uLCBmcHNfZCwKLSAgICAgICAgICAgICAgICAgIHRlbGVjaW5lX3BhdHRlcm5zW3NlbGYtPnBhdHRlcm5dLnJhdGlvX24sCi0gICAgICAgICAgICAgICAgICB0ZWxlY2luZV9wYXR0ZXJuc1tzZWxmLT5wYXR0ZXJuXS5yYXRpb19kLCAmZnBzX24sICZmcHNfZCkpKQotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLAotICAgICAgICAgICAgIk11bHRpcGx5aW5nIHRoZSBmcmFtZXJhdGUgYnkgdGhlIHRlbGVjaW5lIHBhdHRlcm4gcmF0aW8gb3ZlcmZsb3dlZCEiKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY2NhcHMsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgZnBzX24sCi0gICAgICAgICAgZnBzX2QsIE5VTEwpOwotICAgIH0gZWxzZSBpZiAoc2VsZi0+bG9ja2luZyA9PSBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19BQ1RJVkUKLSAgICAgICAgfHwgc2VsZi0+bG93X2xhdGVuY3kgPT0gMCkgewotICAgICAgLyogaW4gaGlnaCBsYXRlbmN5IHBhdHRlcm4gbG9ja2luZyBtb2RlIGlmIHdlIGRvbid0IGhhdmUgYSBwYXR0ZXJuIGxvY2ssCi0gICAgICAgKiB0aGUgc2luayBwYWQgY2FwcyBhcmUgdGhlIGJlc3Qgd2Uga25vdyAqLwotICAgICAgc3JjY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICAgIH0gZWxzZSBpZiAoc2VsZi0+bG93X2xhdGVuY3kgPiAwCi0gICAgICAgICYmIGludGVybGFjaW5nX21vZGUgPT0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX01JWEVECi0gICAgICAgICYmIHNlbGYtPnBhdHRlcm4gPT0gLTEpIHsKLSAgICAgIC8qIGZvciBpbml0aWFsIGJ1ZmZlcnMgb2YgYSB0ZWxlY2luZSBwYXR0ZXJuLCB1bnRpbCB0aGVyZSBpcyBhIGxvY2sgd2UKLSAgICAgICAqIHdlIG91dHB1dCBuYcOvdmVseSBhZGp1c3RlZCB0aW1lc3RhbXBzIGluIGxvdy1sYXRlbmN5IHBhdHRlcm4gbG9ja2luZwotICAgICAgICogbW9kZSAqLwotICAgICAgc3JjY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3JjY2FwcywgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAwLCAxLCBOVUxMKTsKLSAgICB9IGVsc2UgaWYgKHNlbGYtPnVzZXJfc2V0X2ZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfRklFTERTX0FVVE8pIHsKLSAgICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgICAgIGlmIChwZWVyY2FwcykgewotICAgICAgICBnYm9vbGVhbiBjYW5fYmVfdGYgPSBGQUxTRTsKLQotICAgICAgICAvKiBXZSBhbHJlYWR5IGtub3cgdGhhdCB3ZSBhcmUgbm90IHBhc3N0aHJvdWdoOiBpbnRlcmxhY2UtbW9kZSB3aWxsCi0gICAgICAgICAqIGJlIHByb2dyZXNzaXZlICovCi0gICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY2NhcHMsICJpbnRlcmxhY2UtbW9kZSIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgICAicHJvZ3Jlc3NpdmUiLCBOVUxMKTsKLQotICAgICAgICBpZiAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAocGVlcmNhcHMsIHNyY2NhcHMpKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkNhbiBkZWludGVybGFjZSB0b3AgZmllbGRzIik7Ci0gICAgICAgICAgY2FuX2JlX3RmID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBzcmNjYXBzID0gZ3N0X2RlaW50ZXJsYWNlX2NhcHNfZG91YmxlX2ZyYW1lcmF0ZSAoc3JjY2FwcywgRkFMU0UpOwotICAgICAgICBpZiAoIWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKHBlZXJjYXBzLCBzcmNjYXBzKSkgewotICAgICAgICAgIGlmIChjYW5fYmVfdGYpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJXaWxsIGRlaW50ZXJsYWNlIHRvcCBmaWVsZHMiKTsKLSAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY2NhcHMsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgZnBzX24sCi0gICAgICAgICAgICAgICAgZnBzX2QsIE5VTEwpOwotICAgICAgICAgICAgc2VsZi0+ZmllbGRzID0gR1NUX0RFSU5URVJMQUNFX1RGOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAgICAgICAgICJDYW4ndCBuZWdvdGlhdGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY2FwcyIpOwotICAgICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICAgICAgICAgICAgZ290byBpbnZhbGlkX2NhcHM7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJEZWludGVybGFjaW5nIGFsbCBmaWVsZHMiKTsKLSAgICAgICAgICBzZWxmLT5maWVsZHMgPSBHU1RfREVJTlRFUkxBQ0VfQUxMOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAgICAgIk5vIHBlZXIgY2FwcyB5ZXQsIGZhbGxpbmcgYmFjayB0byBkZWludGVybGFjaW5nIGFsbCBmaWVsZHMiKTsKLSAgICAgICAgc2VsZi0+ZmllbGRzID0gR1NUX0RFSU5URVJMQUNFX0FMTDsKLSAgICAgICAgc3JjY2FwcyA9IGdzdF9kZWludGVybGFjZV9jYXBzX2RvdWJsZV9mcmFtZXJhdGUgKHNyY2NhcHMsIEZBTFNFKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc2VsZi0+ZmllbGRzID0gc2VsZi0+dXNlcl9zZXRfZmllbGRzOwotICAgICAgc3JjY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICAgICAgaWYgKHNlbGYtPmZpZWxkcyA9PSBHU1RfREVJTlRFUkxBQ0VfQUxMKQotICAgICAgICBzcmNjYXBzID0gZ3N0X2RlaW50ZXJsYWNlX2NhcHNfZG91YmxlX2ZyYW1lcmF0ZSAoc3JjY2FwcywgRkFMU0UpOwotICAgIH0KLQotICAgIC8qIElmIG5vdCBwYXNzdGhyb3VnaCwgd2UgYXJlIGdvaW5nIHRvIG91dHB1dCBwcm9ncmVzc2l2ZSBjb250ZW50ICovCi0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3JjY2FwcywgImludGVybGFjZS1tb2RlIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgInByb2dyZXNzaXZlIiwgTlVMTCk7Ci0KLSAgICBnc3RfZGVpbnRlcmxhY2Vfc2V0X21ldGhvZCAoc2VsZiwgc2VsZi0+bWV0aG9kX2lkKTsKLSAgICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NldHVwIChzZWxmLT5tZXRob2QsICZzZWxmLT52aW5mbyk7Ci0gIH0gZWxzZSB7Ci0gICAgc3JjY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gIH0KLQotICBpZiAoZnBzX24gIT0gMCkgewotICAgIHNlbGYtPmZpZWxkX2R1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfU0VDT05ELCBmcHNfZCwgMiAqIGZwc19uKTsKLSAgfSBlbHNlIHsKLSAgICBzZWxmLT5maWVsZF9kdXJhdGlvbiA9IDA7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJTaW5rIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiU3JjICBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3JjY2Fwcyk7Ci0KLSAgaWYgKCFnc3RfcGFkX3NldF9jYXBzIChzZWxmLT5zcmNwYWQsIHNyY2NhcHMpKQotICAgIGdvdG8gc2V0X2NhcHNfZmFpbGVkOwotCi0gIGlmICghZ3N0X2RlaW50ZXJsYWNlX2RvX2J1ZmZlcnBvb2wgKHNlbGYsIHNyY2NhcHMpKQotICAgIGdvdG8gbm9fYnVmZmVycG9vbDsKLQotICBpZiAocGVlcmNhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiBUUlVFOwotCi1pbnZhbGlkX2NhcHM6Ci0gIHsKLSAgICBpZiAocGVlcmNhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwgIkludmFsaWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc2V0X2NhcHNfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocGFkLCAiRmFpbGVkIHRvIHNldCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3JjY2Fwcyk7Ci0gICAgaWYgKHBlZXJjYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICBpZiAoc3JjY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2J1ZmZlcnBvb2w6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwYWQsICJjb3VsZCBub3QgbmVnb3RpYXRlIGJ1ZmZlcnBvb2wiKTsKLSAgICBpZiAoc3JjY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGVpbnRlcmxhY2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdERlaW50ZXJsYWNlICpzZWxmID0gR1NUX0RFSU5URVJMQUNFIChwYXJlbnQpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJyZWNlaXZlZCAlcyBldmVudDogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCksIGV2ZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIHJlcyA9IGdzdF9kZWludGVybGFjZV9zZXRjYXBzIChzZWxmLCBwYWQsIGNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50OwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3Jlc2V0X3FvcyAoc2VsZik7Ci0gICAgICBnc3RfZGVpbnRlcmxhY2VfcmVzZXRfaGlzdG9yeSAoc2VsZiwgRkFMU0UpOwotCi0gICAgICBpZiAoc2VnbWVudC0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCi0gICAgICAgICAgICAiR290IFNFR01FTlQgZXZlbnQgaW4gVElNRSBmb3JtYXQsIHBhc3Npbmcgb24gKCUiCi0gICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiAtICUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5zdGFydCksIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPnN0b3ApKTsKLSAgICAgICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvIChzZWdtZW50LCAmc2VsZi0+c2VnbWVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhZCwgIkdvdCBTRUdNRU5UIGV2ZW50IGluICVzIGZvcm1hdCIsCi0gICAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChzZWdtZW50LT5mb3JtYXQpKTsKLSAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlbGYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIH0KLQotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTTp7Ci0gICAgICBnYm9vbGVhbiBzdGlsbF9zdGF0ZTsKLQotICAgICAgaWYgKGdzdF92aWRlb19ldmVudF9wYXJzZV9zdGlsbF9mcmFtZSAoZXZlbnQsICZzdGlsbF9zdGF0ZSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlJlY2VpdmVkIHN0aWxsIGZyYW1lIGV2ZW50LCBzdGF0ZSAlZCIsCi0gICAgICAgICAgICBzdGlsbF9zdGF0ZSk7Ci0KLSAgICAgICAgaWYgKHN0aWxsX3N0YXRlKSB7Ci0gICAgICAgICAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiSGFuZGxpbmcgc3RpbGwgZnJhbWUiKTsKLSAgICAgICAgICBzZWxmLT5zdGlsbF9mcmFtZV9tb2RlID0gVFJVRTsKLSAgICAgICAgICBnc3RfZGVpbnRlcmxhY2VfcmVzZXRfaGlzdG9yeSAoc2VsZiwgRkFMU0UpOwotICAgICAgICAgIGlmIChzZWxmLT5sYXN0X2J1ZmZlcikgewotICAgICAgICAgICAgcmV0ID0KLSAgICAgICAgICAgICAgICBnc3RfcGFkX3B1c2ggKHNlbGYtPnNyY3BhZCwgZ3N0X2J1ZmZlcl9yZWYgKHNlbGYtPmxhc3RfYnVmZmVyKSk7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUHVzaGVkIHN0aWxsIGZyYW1lLCByZXN1bHQ6ICVzIiwKLSAgICAgICAgICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgIk5vIHBlbmRpbmcgYnVmZmVyISIpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiRW5kaW5nIHN0aWxsIGZyYW1lcyIpOwotICAgICAgICAgIHNlbGYtPnN0aWxsX2ZyYW1lX21vZGUgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIHNlbGYtPmhhdmVfZW9zID0gVFJVRTsKLSAgICAgIGdzdF9kZWludGVybGFjZV9yZXNldF9oaXN0b3J5IChzZWxmLCBGQUxTRSk7Ci0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgaWYgKHNlbGYtPnN0aWxsX2ZyYW1lX21vZGUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkVuZGluZyBzdGlsbCBmcmFtZXMiKTsKLSAgICAgICAgc2VsZi0+c3RpbGxfZnJhbWVfbW9kZSA9IEZBTFNFOwotICAgICAgfQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3Jlc2V0X3FvcyAoc2VsZik7Ci0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3Jlc2V0X2hpc3RvcnkgKHNlbGYsIFRSVUUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9wcm9wb3NlX2FsbG9jYXRpb24gKEdzdERlaW50ZXJsYWNlICogc2VsZiwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0gIGd1aW50IHNpemU7Ci0gIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotCi0gIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uIChxdWVyeSwgJmNhcHMsIE5VTEwpOwotCi0gIGlmIChjYXBzID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHNpemUgPSBHU1RfVklERU9fSU5GT19TSVpFICgmaW5mbyk7Ci0KLSAgcG9vbCA9IGdzdF92aWRlb19idWZmZXJfcG9vbF9uZXcgKCk7Ci0KLSAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCBwb29sLCBzaXplLCAwLCAwKTsKLQotICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBjYXBzLCBzaXplLAotICAgICAgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2ZpZWxkc19yZXF1aXJlZCAoc2VsZi0+bWV0aG9kKSArIDEpIC8gMiArIDEsCi0gICAgICAwKTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocG9vbCk7Ci0gIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0RGVpbnRlcmxhY2UgKnNlbGYgPSBHU1RfREVJTlRFUkxBQ0UgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICIlcyBxdWVyeSIsIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpmaWx0ZXIsICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotICAgICAgY2FwcyA9IGdzdF9kZWludGVybGFjZV9nZXRjYXBzIChzZWxmLCBwYWQsIGZpbHRlcik7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0FDQ0VQVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgICBnYm9vbGVhbiByZXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2FwcyAocXVlcnksICZjYXBzKTsKLSAgICAgIHJldCA9IGdzdF9kZWludGVybGFjZV9hY2NlcHRjYXBzIChzZWxmLCBwYWQsIGNhcHMpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9hY2NlcHRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCByZXQpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9BTExPQ0FUSU9OOgotICAgICAgaWYgKHNlbGYtPnBhc3N0aHJvdWdoKQotICAgICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHNlbGYtPnNyY3BhZCwgcXVlcnkpOwotICAgICAgZWxzZQotICAgICAgICByZXMgPSBnc3RfZGVpbnRlcmxhY2VfcHJvcG9zZV9hbGxvY2F0aW9uIChzZWxmLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZGVpbnRlcmxhY2VfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3REZWludGVybGFjZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKQotICAgIHJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9kZWludGVybGFjZV9yZXNldCAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3REZWludGVybGFjZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRSAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9RT1M6ewotICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgICAgIEdzdFFPU1R5cGUgdHlwZTsKLSAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0eXBlLCAmcHJvcG9ydGlvbiwgJmRpZmYsICZ0aW1lc3RhbXApOwotCi0gICAgICBnc3RfZGVpbnRlcmxhY2VfdXBkYXRlX3FvcyAoc2VsZiwgcHJvcG9ydGlvbiwgZGlmZiwgdGltZXN0YW1wKTsKLSAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGFjZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3REZWludGVybGFjZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRSAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIiVzIHF1ZXJ5IiwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgICAgaWYgKCFzZWxmLT5wYXNzdGhyb3VnaCkgewotICAgICAgICBHc3RDbG9ja1RpbWUgbWluLCBtYXg7Ci0gICAgICAgIGdib29sZWFuIGxpdmU7Ci0gICAgICAgIEdzdFBhZCAqcGVlcjsKLQotICAgICAgICBpZiAoKHBlZXIgPSBnc3RfcGFkX2dldF9wZWVyIChzZWxmLT5zaW5rcGFkKSkpIHsKLSAgICAgICAgICBpZiAoKHJlcyA9IGdzdF9wYWRfcXVlcnkgKHBlZXIsIHF1ZXJ5KSkpIHsKLSAgICAgICAgICAgIEdzdENsb2NrVGltZSBsYXRlbmN5OwotICAgICAgICAgICAgZ2ludCBmaWVsZHNfcmVxdWlyZWQgPSAwOwotICAgICAgICAgICAgZ2ludCBtZXRob2RfbGF0ZW5jeSA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChzZWxmLT5tZXRob2QpIHsKLSAgICAgICAgICAgICAgZmllbGRzX3JlcXVpcmVkID0KLSAgICAgICAgICAgICAgICAgIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2ZpZWxkc19yZXF1aXJlZCAoc2VsZi0+bWV0aG9kKTsKLSAgICAgICAgICAgICAgbWV0aG9kX2xhdGVuY3kgPQotICAgICAgICAgICAgICAgICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9nZXRfbGF0ZW5jeSAoc2VsZi0+bWV0aG9kKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmbGl2ZSwgJm1pbiwgJm1heCk7Ci0KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJQZWVyIGxhdGVuY3k6IG1pbiAlIgotICAgICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIG1heCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobWluKSwgR1NUX1RJTUVfQVJHUyAobWF4KSk7Ci0KLSAgICAgICAgICAgIC8qIGFkZCBvdXIgb3duIGxhdGVuY3kgKi8KLSAgICAgICAgICAgIGxhdGVuY3kgPSAoZmllbGRzX3JlcXVpcmVkICsgbWV0aG9kX2xhdGVuY3kpICogc2VsZi0+ZmllbGRfZHVyYXRpb247Ci0KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPdXIgbGF0ZW5jeTogbWluICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICAgICAgICIsIG1heCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSksIEdTVF9USU1FX0FSR1MgKGxhdGVuY3kpKTsKLQotICAgICAgICAgICAgbWluICs9IGxhdGVuY3k7Ci0gICAgICAgICAgICBpZiAobWF4ICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgICAgICAgIG1heCArPSBsYXRlbmN5OwotCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiQ2FsY3VsYXRlZCB0b3RhbCBsYXRlbmN5IDogbWluICUiCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW4pLCBHU1RfVElNRV9BUkdTIChtYXgpKTsKLQotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5IChxdWVyeSwgbGl2ZSwgbWluLCBtYXgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkZWludGVybGFjZV9kZWJ1ZywgImRlaW50ZXJsYWNlIiwgMCwgIkRlaW50ZXJsYWNlciIpOwotCi0jaWYgSEFWRV9PUkMKLSAgb3JjX2luaXQgKCk7Ci0jZW5kaWYKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJkZWludGVybGFjZSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfREVJTlRFUkxBQ0UpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBkZWludGVybGFjZSwKLSAgICAiRGVpbnRlcmxhY2VyIiwgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwKLSAgICBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL2dzdGRlaW50ZXJsYWNlLmggYi9nc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjYzYzNy4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWFydGluIEVpa2VybWFubiA8bWVpa2VyQHVwYi5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0RFSU5URVJMQUNFX0hfXwotI2RlZmluZSBfX0dTVF9ERUlOVEVSTEFDRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgotCi0jaW5jbHVkZSAiZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFIFwKLSAgKGdzdF9kZWludGVybGFjZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9ERUlOVEVSTEFDRSxHc3REZWludGVybGFjZSkpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9ERUlOVEVSTEFDRSxHc3REZWludGVybGFjZSkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0RFSU5URVJMQUNFKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9ERUlOVEVSTEFDRSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3REZWludGVybGFjZSBHc3REZWludGVybGFjZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3REZWludGVybGFjZUNsYXNzIEdzdERlaW50ZXJsYWNlQ2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfREVJTlRFUkxBQ0VfVE9NU01PQ09NUCwKLSAgR1NUX0RFSU5URVJMQUNFX0dSRUVEWV9ILAotICBHU1RfREVJTlRFUkxBQ0VfR1JFRURZX0wsCi0gIEdTVF9ERUlOVEVSTEFDRV9WRklSLAotICBHU1RfREVJTlRFUkxBQ0VfTElORUFSLAotICBHU1RfREVJTlRFUkxBQ0VfTElORUFSX0JMRU5ELAotICBHU1RfREVJTlRFUkxBQ0VfU0NBTEVSX0JPQiwKLSAgR1NUX0RFSU5URVJMQUNFX1dFQVZFLAotICBHU1RfREVJTlRFUkxBQ0VfV0VBVkVfVEZGLAotICBHU1RfREVJTlRFUkxBQ0VfV0VBVkVfQkZGCi19IEdzdERlaW50ZXJsYWNlTWV0aG9kczsKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9ERUlOVEVSTEFDRV9BTEwsICAgICAgICAgLyogQWxsIChtaXNzaW5nIGRhdGEgaXMgaW50ZXJwLikgKi8KLSAgR1NUX0RFSU5URVJMQUNFX1RGLCAgICAgICAgICAvKiBUb3AgRmllbGRzIE9ubHkgKi8KLSAgR1NUX0RFSU5URVJMQUNFX0JGLCAgICAgICAgICAvKiBCb3R0b20gRmllbGRzIE9ubHkgKi8KLSAgR1NUX0RFSU5URVJMQUNFX0ZJRUxEU19BVVRPICAvKiBBdXRvbWF0aWNhbGx5IGRldGVjdCAqLwotfSBHc3REZWludGVybGFjZUZpZWxkczsKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQVVUTywKLSAgR1NUX0RFSU5URVJMQUNFX0xBWU9VVF9URkYsCi0gIEdTVF9ERUlOVEVSTEFDRV9MQVlPVVRfQkZGCi19IEdzdERlaW50ZXJsYWNlRmllbGRMYXlvdXQ7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9ERUlOVEVSTEFDRV9NT0RFX0FVVE8sCi0gIEdTVF9ERUlOVEVSTEFDRV9NT0RFX0lOVEVSTEFDRUQsCi0gIEdTVF9ERUlOVEVSTEFDRV9NT0RFX0RJU0FCTEVELAotICBHU1RfREVJTlRFUkxBQ0VfTU9ERV9BVVRPX1NUUklDVAotfSBHc3REZWludGVybGFjZU1vZGU7Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19OT05FLAotICBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19BVVRPLAotICBHU1RfREVJTlRFUkxBQ0VfTE9DS0lOR19BQ1RJVkUsCi0gIEdTVF9ERUlOVEVSTEFDRV9MT0NLSU5HX1BBU1NJVkUsCi19IEdzdERlaW50ZXJsYWNlTG9ja2luZzsKLQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUFYX0ZJRUxEX0hJU1RPUlkgMTAKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01BWF9CVUZGRVJfU1RBVEVfSElTVE9SWSA1MAotLyogY2hlY2sgbWF4IGZpZWxkIGhpc3RvcnkgaXMgbGFyZ2UgZW5vdWdoICovCi0jaWYgR1NUX0RFSU5URVJMQUNFX01BWF9GSUVMRF9ISVNUT1JZIDwgR1NUX0RFSU5URVJMQUNFX01BWF9CVUZGRVJfU1RBVEVfSElTVE9SWSAqIDMKLSN1bmRlZiBHU1RfREVJTlRFUkxBQ0VfTUFYX0ZJRUxEX0hJU1RPUlkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01BWF9GSUVMRF9ISVNUT1JZIChHU1RfREVJTlRFUkxBQ0VfTUFYX0JVRkZFUl9TVEFURV9ISVNUT1JZICogMykKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBfVGVsZWNpbmVQYXR0ZXJuIFRlbGVjaW5lUGF0dGVybjsKLXN0cnVjdCBfVGVsZWNpbmVQYXR0ZXJuCi17Ci0gIGNvbnN0IGdjaGFyICpuaWNrOwotICBndWludDggbGVuZ3RoOwotICBndWludDggcmF0aW9fbiwgcmF0aW9fZDsKLSAgZ3VpbnQ4IHN0YXRlc1tHU1RfREVJTlRFUkxBQ0VfTUFYX0JVRkZFUl9TVEFURV9ISVNUT1JZXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3REZWludGVybGFjZUJ1ZmZlclN0YXRlIEdzdERlaW50ZXJsYWNlQnVmZmVyU3RhdGU7Ci1zdHJ1Y3QgX0dzdERlaW50ZXJsYWNlQnVmZmVyU3RhdGUKLXsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotICBndWludDggc3RhdGU7Ci19OwotCi1zdHJ1Y3QgX0dzdERlaW50ZXJsYWNlCi17Ci0gIEdzdEVsZW1lbnQgcGFyZW50OwotCi0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICAvKiA8cHJpdmF0ZT4gKi8KLSAgR3N0RGVpbnRlcmxhY2VNb2RlIG1vZGU7Ci0KLSAgR3N0RGVpbnRlcmxhY2VGaWVsZExheW91dCBmaWVsZF9sYXlvdXQ7Ci0KLSAgR3N0RGVpbnRlcmxhY2VGaWVsZHMgZmllbGRzOwotCi0gIEdzdERlaW50ZXJsYWNlRmllbGRzIHVzZXJfc2V0X2ZpZWxkczsKLQotICAvKiBjdXJyZW50IHN0YXRlIChkaWZmZXJzIHdoZW4gZmx1c2hpbmcvaW52ZXJzZSB0ZWxlY2luZSB1c2luZyB3ZWF2ZSkgKi8KLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RzIG1ldGhvZF9pZDsKLSAgLyogcHJvcGVydHkgdmFsdWUgKi8KLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RzIHVzZXJfc2V0X21ldGhvZF9pZDsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2QgKm1ldGhvZDsKLQotICBHc3RWaWRlb0luZm8gdmluZm87Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLQotICBnYm9vbGVhbiBwYXNzdGhyb3VnaDsKLSAgZ2Jvb2xlYW4gZGlzY29udDsKLQotICBHc3RDbG9ja1RpbWUgZmllbGRfZHVyYXRpb247IC8qIER1cmF0aW9uIG9mIG9uZSBmaWVsZCAqLwotCi0gIC8qIFRoZSBtb3N0IHJlY2VudCBwaWN0dXJlcyAKLSAgICAgUGljdHVyZUhpc3RvcnlbMF0gaXMgYWx3YXlzIHRoZSBtb3N0IHJlY2VudC4KLSAgICAgUG9pbnRlcnMgYXJlIE5VTEwgaWYgdGhlIHBpY3R1cmUgaW4gcXVlc3Rpb24gaXNuJ3QgdmFsaWQsIGUuZy4gYmVjYXVzZQotICAgICB0aGUgcHJvZ3JhbSBqdXN0IHN0YXJ0ZWQgb3IgYSBwaWN0dXJlIHdhcyBza2lwcGVkLgotICAgKi8KLSAgR3N0RGVpbnRlcmxhY2VGaWVsZCBmaWVsZF9oaXN0b3J5W0dTVF9ERUlOVEVSTEFDRV9NQVhfRklFTERfSElTVE9SWV07Ci0gIGd1aW50IGhpc3RvcnlfY291bnQ7Ci0gIGludCBjdXJfZmllbGRfaWR4OwotCi0gIC8qIFNldCB0byBUUlVFIGlmIHdlJ3JlIGluIHN0aWxsIGZyYW1lIG1vZGUsCi0gICAgIGkuZS4ganVzdCBmb3J3YXJkIGFsbCBidWZmZXJzCi0gICAqLwotICBnYm9vbGVhbiBzdGlsbF9mcmFtZV9tb2RlOwotCi0gIC8qIExhc3QgYnVmZmVyIHRoYXQgd2FzIHB1c2hlZCBpbiAqLwotICBHc3RCdWZmZXIgKmxhc3RfYnVmZmVyOwotCi0gIC8qIEN1cnJlbnQgc2VnbWVudCAqLwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgLyogUW9TIHN0dWZmICovCi0gIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgR3N0Q2xvY2tUaW1lIGVhcmxpZXN0X3RpbWU7Ci0gIGdpbnQ2NCBwcm9jZXNzZWQ7Ci0gIGdpbnQ2NCBkcm9wcGVkOwotCi0gIEdzdENhcHMgKnJlcXVlc3RfY2FwczsKLQotICBnYm9vbGVhbiByZWNvbmZpZ3VyZTsKLSAgR3N0RGVpbnRlcmxhY2VNb2RlIG5ld19tb2RlOwotICBHc3REZWludGVybGFjZUZpZWxkcyBuZXdfZmllbGRzOwotCi0gIEdzdERlaW50ZXJsYWNlTG9ja2luZyBsb2NraW5nOwotICBnaW50IGxvd19sYXRlbmN5OwotICBnYm9vbGVhbiBkcm9wX29ycGhhbnM7Ci0gIGdib29sZWFuIGlnbm9yZV9vYnNjdXJlOwotICBnYm9vbGVhbiBwYXR0ZXJuX2xvY2s7Ci0gIGdib29sZWFuIHBhdHRlcm5fcmVmcmVzaDsKLSAgR3N0RGVpbnRlcmxhY2VCdWZmZXJTdGF0ZSBidWZfc3RhdGVzW0dTVF9ERUlOVEVSTEFDRV9NQVhfQlVGRkVSX1NUQVRFX0hJU1RPUlldOwotICBnaW50IHN0YXRlX2NvdW50OwotICBnaW50IHBhdHRlcm47Ci0gIGd1aW50OCBwYXR0ZXJuX3BoYXNlOwotICBndWludDggcGF0dGVybl9jb3VudDsKLSAgZ3VpbnQ4IG91dHB1dF9jb3VudDsKLSAgR3N0Q2xvY2tUaW1lIHBhdHRlcm5fYmFzZV90czsKLSAgR3N0Q2xvY2tUaW1lIHBhdHRlcm5fYnVmX2R1cjsKLQotICBnYm9vbGVhbiBuZWVkX21vcmU7Ci0gIGdib29sZWFuIGhhdmVfZW9zOwotfTsKLQotc3RydWN0IF9Hc3REZWludGVybGFjZUNsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfREVJTlRFUkxBQ0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuYyBiL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2U3N2U3Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5jCisrKyAvZGV2L251bGwKQEAgLTEsODAyICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGRlaW50ZXJsYWNlbWV0aG9kLmgiCi0KLUdfREVGSU5FX0FCU1RSQUNUX1RZUEUgKEdzdERlaW50ZXJsYWNlTWV0aG9kLCBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kLAotICAgIEdTVF9UWVBFX09CSkVDVCk7Ci0KLWdib29sZWFuCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3N1cHBvcnRlZCAoR1R5cGUgdHlwZSwgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0LCBnaW50IHdpZHRoLAotICAgIGdpbnQgaGVpZ2h0KQotewotICBHc3REZWludGVybGFjZU1ldGhvZENsYXNzICprbGFzcyA9Ci0gICAgICBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0NMQVNTIChnX3R5cGVfY2xhc3NfcmVmICh0eXBlKSk7Ci0gIGdib29sZWFuIHJldDsKLQotICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikKLSAgICByZXQgPSBUUlVFOwotICBlbHNlCi0gICAgcmV0ID0ga2xhc3MtPnN1cHBvcnRlZCAoa2xhc3MsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoa2xhc3MpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zdXBwb3J0ZWRfaW1wbCAoR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqIGtsYXNzLAotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQpCi17Ci0gIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lVWTI6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5kZWludGVybGFjZV9mcmFtZV95dXkyICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgcmV0dXJuIChrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXZ5dSAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfVVlWWToKLSAgICAgIHJldHVybiAoa2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3V5dnkgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5kZWludGVybGFjZV9mcmFtZV9pNDIwICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgcmV0dXJuIChrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXYxMiAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQ0NDoKLSAgICAgIHJldHVybiAoa2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3k0NDQgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5kZWludGVybGFjZV9mcmFtZV95NDJiICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgICAgcmV0dXJuIChrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeTQxYiAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2F5dXYgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMTI6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5kZWludGVybGFjZV9mcmFtZV9udjEyICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjIxOgotICAgICAgcmV0dXJuIChrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfbnYyMSAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2FyZ2IgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hCR1I6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5kZWludGVybGFjZV9mcmFtZV9hYmdyICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0J4OgotICAgICAgcmV0dXJuIChrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfcmdiYSAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICAgIHJldHVybiAoa2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2JncmEgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3JnYiAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgcmV0dXJuIChrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYmdyICE9IE5VTEwpOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zZXR1cCAoR3N0RGVpbnRlcmxhY2VNZXRob2QgKiBzZWxmLCBHc3RWaWRlb0luZm8gKiB2aW5mbykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqa2xhc3MgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dFVF9DTEFTUyAoc2VsZik7Ci0KLSAga2xhc3MtPnNldHVwIChzZWxmLCB2aW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NldHVwX2ltcGwgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZiwKLSAgICBHc3RWaWRlb0luZm8gKiB2aW5mbykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqa2xhc3MgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dFVF9DTEFTUyAoc2VsZik7Ci0KLSAgc2VsZi0+dmluZm8gPSB2aW5mbzsKLQotICBzZWxmLT5kZWludGVybGFjZV9mcmFtZSA9IE5VTEw7Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoc2VsZi0+dmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikKLSAgICByZXR1cm47Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKHNlbGYtPnZpbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXV5MjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXZ5dTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfdXl2eTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfaTQyMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXYxMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeTQ0NDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeTQyYjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeTQxYjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYXl1djsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjEyOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfbnYxMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjIxOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfbnYyMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94UkdCOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYXJnYjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94QkdSOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYWJncjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0J4OgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfcmdiYTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1J4OgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYmdyYTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0I6Ci0gICAgICBzZWxmLT5kZWludGVybGFjZV9mcmFtZSA9IGtsYXNzLT5kZWludGVybGFjZV9mcmFtZV9yZ2I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgPSBrbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYmdyOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHNlbGYtPmRlaW50ZXJsYWNlX2ZyYW1lID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2NsYXNzX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKiBrbGFzcykKLXsKLSAga2xhc3MtPnNldHVwID0gZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zZXR1cF9pbXBsOwotICBrbGFzcy0+c3VwcG9ydGVkID0gZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zdXBwb3J0ZWRfaW1wbDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2QgKiBzZWxmKQotewotICBzZWxmLT52aW5mbyA9IE5VTEw7Ci19Ci0KLXZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWUgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZiwKLSAgICBjb25zdCBHc3REZWludGVybGFjZUZpZWxkICogaGlzdG9yeSwgZ3VpbnQgaGlzdG9yeV9jb3VudCwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0ZnJhbWUsIGludCBjdXJfZmllbGRfaWR4KQotewotICBnX2Fzc2VydCAoc2VsZi0+ZGVpbnRlcmxhY2VfZnJhbWUgIT0gTlVMTCk7Ci0gIHNlbGYtPmRlaW50ZXJsYWNlX2ZyYW1lIChzZWxmLCBoaXN0b3J5LCBoaXN0b3J5X2NvdW50LCBvdXRmcmFtZSwKLSAgICAgIGN1cl9maWVsZF9pZHgpOwotfQotCi1naW50Ci1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dldF9maWVsZHNfcmVxdWlyZWQgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZikKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqa2xhc3MgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dFVF9DTEFTUyAoc2VsZik7Ci0KLSAgcmV0dXJuIGtsYXNzLT5maWVsZHNfcmVxdWlyZWQ7Ci19Ci0KLWdpbnQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2xhdGVuY3kgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZikKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqa2xhc3MgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dFVF9DTEFTUyAoc2VsZik7Ci0KLSAgcmV0dXJuIGtsYXNzLT5sYXRlbmN5OwotfQotCi1HX0RFRklORV9BQlNUUkFDVF9UWVBFIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCwKLSAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZCwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9zdXBwb3J0ZWQgKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKiBta2xhc3MsCi0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0LCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCkKLXsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqa2xhc3MgPQotICAgICAgR1NUX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0RfQ0xBU1MgKG1rbGFzcyk7Ci0KLSAgaWYgKCFHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0NMQVNTCi0gICAgICAoZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfcGFyZW50X2NsYXNzKS0+c3VwcG9ydGVkIChta2xhc3MsIGZvcm1hdCwKLSAgICAgICAgICB3aWR0aCwgaGVpZ2h0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2FyZ2IgIT0gTlVMTAotICAgICAgICAgICYmIGtsYXNzLT5jb3B5X3NjYW5saW5lX2FyZ2IgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9yZ2JhICE9IE5VTEwKLSAgICAgICAgICAmJiBrbGFzcy0+Y29weV9zY2FubGluZV9yZ2JhICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94QkdSOgotICAgICAgcmV0dXJuIChrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciAhPSBOVUxMCi0gICAgICAgICAgJiYga2xhc3MtPmNvcHlfc2NhbmxpbmVfYWJnciAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICAgIHJldHVybiAoa2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2JncmEgIT0gTlVMTAotICAgICAgICAgICYmIGtsYXNzLT5jb3B5X3NjYW5saW5lX2JncmEgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3JnYiAhPSBOVUxMCi0gICAgICAgICAgJiYga2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1I6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgIT0gTlVMTAotICAgICAgICAgICYmIGtsYXNzLT5jb3B5X3NjYW5saW5lX2JnciAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVVZMjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l1eTIgIT0gTlVMTAotICAgICAgICAgICYmIGtsYXNzLT5jb3B5X3NjYW5saW5lX3l1eTIgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWWVU6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV95dnl1ICE9IE5VTEwKLSAgICAgICAgICAmJiBrbGFzcy0+Y29weV9zY2FubGluZV95dnl1ICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgcmV0dXJuIChrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSAhPSBOVUxMCi0gICAgICAgICAgJiYga2xhc3MtPmNvcHlfc2NhbmxpbmVfdXl2eSAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2F5dXYgIT0gTlVMTAotICAgICAgICAgICYmIGtsYXNzLT5jb3B5X3NjYW5saW5lX2F5dXYgIT0gTlVMTCk7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMTI6Ci0gICAgICByZXR1cm4gKGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9udjEyICE9IE5VTEwKLSAgICAgICAgICAmJiBrbGFzcy0+Y29weV9zY2FubGluZV9udjEyICE9IE5VTEwpOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjIxOgotICAgICAgcmV0dXJuIChrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMSAhPSBOVUxMCi0gICAgICAgICAgJiYga2xhc3MtPmNvcHlfc2NhbmxpbmVfbnYyMSAhPSBOVUxMKTsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQ0NDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQxQjoKLSAgICAgIHJldHVybiAoa2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ICE9IE5VTEwKLSAgICAgICAgICAmJiBrbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfeSAhPSBOVUxMICYmCi0gICAgICAgICAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl91ICE9IE5VTEwKLSAgICAgICAgICAmJiBrbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdSAhPSBOVUxMICYmCi0gICAgICAgICAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl92ICE9IE5VTEwKLSAgICAgICAgICAmJiBrbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdiAhPSBOVUxMKTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi0gICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkCi0gICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogb3V0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzdHJpZGUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzdHJpZGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICoKLSAgICBzZWxmLCBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLAotICAgIGd1aW50IHN0cmlkZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTAsIHN0cmlkZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlTWV0aG9kICoKLSAgICBtZXRob2QsIGNvbnN0IEdzdERlaW50ZXJsYWNlRmllbGQgKiBoaXN0b3J5LCBndWludCBoaXN0b3J5X2NvdW50LAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRmcmFtZSwgZ2ludCBjdXJfZmllbGRfaWR4KQotewotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EIChtZXRob2QpOwotI2lmbmRlZiBHX0RJU0FCTEVfQVNTRVJUCi0gIEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKmRtX2NsYXNzID0gR1NUX0RFSU5URVJMQUNFX01FVEhPRF9HRVRfQ0xBU1MgKHNlbGYpOwotI2VuZGlmCi0gIEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhIHNjYW5saW5lczsKLSAgZ3VpbnQgY3VyX2ZpZWxkX2ZsYWdzOwotICBnaW50IGk7Ci0gIGdpbnQgZnJhbWVfaGVpZ2h0LCBmcmFtZV93aWR0aDsKLSAgR3N0VmlkZW9GcmFtZSAqZnJhbWVwLCAqZnJhbWUwLCAqZnJhbWUxLCAqZnJhbWUyOwotCi0gIGdfYXNzZXJ0IChzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCAhPSBOVUxMKTsKLQotICBmcmFtZV9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChvdXRmcmFtZSk7Ci0gIGZyYW1lX3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAob3V0ZnJhbWUsIDApOwotCi0gIGZyYW1lMCA9IGhpc3RvcnlbY3VyX2ZpZWxkX2lkeF0uZnJhbWU7Ci0gIGZyYW1lX3dpZHRoID0gTUlOIChmcmFtZV93aWR0aCwgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUwLCAwKSk7Ci0gIGN1cl9maWVsZF9mbGFncyA9IGhpc3RvcnlbY3VyX2ZpZWxkX2lkeF0uZmxhZ3M7Ci0KLSAgZnJhbWVwID0gKGN1cl9maWVsZF9pZHggPiAwID8gaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMV0uZnJhbWUgOiBOVUxMKTsKLSAgaWYgKGZyYW1lcCkKLSAgICBmcmFtZV93aWR0aCA9IE1JTiAoZnJhbWVfd2lkdGgsIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGZyYW1lcCwgMCkpOwotCi0gIGdfYXNzZXJ0IChkbV9jbGFzcy0+ZmllbGRzX3JlcXVpcmVkIDw9IDQpOwotCi0gIGZyYW1lMSA9Ci0gICAgICAoY3VyX2ZpZWxkX2lkeCArIDEgPAotICAgICAgaGlzdG9yeV9jb3VudCA/IGhpc3RvcnlbY3VyX2ZpZWxkX2lkeCArIDFdLmZyYW1lIDogTlVMTCk7Ci0gIGlmIChmcmFtZTEpCi0gICAgZnJhbWVfd2lkdGggPSBNSU4gKGZyYW1lX3dpZHRoLCBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChmcmFtZTEsIDApKTsKLQotICBmcmFtZTIgPQotICAgICAgKGN1cl9maWVsZF9pZHggKyAyIDwKLSAgICAgIGhpc3RvcnlfY291bnQgPyBoaXN0b3J5W2N1cl9maWVsZF9pZHggKyAyXS5mcmFtZSA6IE5VTEwpOwotICBpZiAoZnJhbWUyKQotICAgIGZyYW1lX3dpZHRoID0gTUlOIChmcmFtZV93aWR0aCwgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUyLCAwKSk7Ci0KLSNkZWZpbmUgQ0xBTVBfTE9XKGkpICgoKGkpPDApID8gKGkrMikgOiAoaSkpCi0jZGVmaW5lIENMQU1QX0hJKGkpICgoKGkpPj0oZnJhbWVfaGVpZ2h0KSkgPyAoaS0yKSA6IChpKSkKLSNkZWZpbmUgTElORSh4LGkpICgoKGd1aW50OCopR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEoKHgpLDApKSArIENMQU1QX0hJKENMQU1QX0xPVyhpKSkgKiBcCi0gICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSgoeCksMCkpCi0jZGVmaW5lIExJTkUyKHgsaSkgKCh4KSA/IExJTkUoeCxpKSA6IE5VTEwpCi0KLSAgZm9yIChpID0gMDsgaSA8IGZyYW1lX2hlaWdodDsgaSsrKSB7Ci0gICAgbWVtc2V0ICgmc2NhbmxpbmVzLCAwLCBzaXplb2YgKHNjYW5saW5lcykpOwotICAgIHNjYW5saW5lcy5ib3R0b21fZmllbGQgPSAoY3VyX2ZpZWxkX2ZsYWdzID09IFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pOwotCi0gICAgaWYgKCEoKGkgJiAxKSBeIHNjYW5saW5lcy5ib3R0b21fZmllbGQpKSB7Ci0gICAgICAvKiBjb3B5aW5nICovCi0gICAgICBzY2FubGluZXMudHAgPSBMSU5FMiAoZnJhbWVwLCBpIC0gMSk7Ci0gICAgICBzY2FubGluZXMuYnAgPSBMSU5FMiAoZnJhbWVwLCBpICsgMSk7Ci0KLSAgICAgIHNjYW5saW5lcy50dDAgPSBMSU5FMiAoZnJhbWUwLCAoaSAtIDIgPj0gMCkgPyBpIC0gMiA6IGkpOwotICAgICAgc2NhbmxpbmVzLm0wID0gTElORTIgKGZyYW1lMCwgaSk7Ci0gICAgICBzY2FubGluZXMuYmIwID0gTElORTIgKGZyYW1lMCwgKGkgKyAyIDwgZnJhbWVfaGVpZ2h0ID8gaSArIDIgOiBpKSk7Ci0KLSAgICAgIHNjYW5saW5lcy50MSA9IExJTkUyIChmcmFtZTEsIGkgLSAxKTsKLSAgICAgIHNjYW5saW5lcy5iMSA9IExJTkUyIChmcmFtZTEsIGkgKyAxKTsKLQotICAgICAgc2NhbmxpbmVzLnR0MiA9IExJTkUyIChmcmFtZTIsIChpIC0gMiA+PSAwKSA/IGkgLSAyIDogaSk7Ci0gICAgICBzY2FubGluZXMubTIgPSBMSU5FMiAoZnJhbWUyLCBpKTsKLSAgICAgIHNjYW5saW5lcy5iYjIgPSBMSU5FMiAoZnJhbWUyLCAoaSArIDIgPCBmcmFtZV9oZWlnaHQgPyBpICsgMiA6IGkpKTsKLQotICAgICAgc2VsZi0+Y29weV9zY2FubGluZV9wYWNrZWQgKHNlbGYsIExJTkUgKG91dGZyYW1lLCBpKSwgJnNjYW5saW5lcywKLSAgICAgICAgICBmcmFtZV93aWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGludGVycG9sYXRpbmcgKi8KLSAgICAgIHNjYW5saW5lcy50dHAgPSBMSU5FMiAoZnJhbWVwLCAoaSAtIDIgPj0gMCkgPyBpIC0gMiA6IGkpOwotICAgICAgc2NhbmxpbmVzLm1wID0gTElORTIgKGZyYW1lcCwgaSk7Ci0gICAgICBzY2FubGluZXMuYmJwID0gTElORTIgKGZyYW1lcCwgKGkgKyAyIDwgZnJhbWVfaGVpZ2h0ID8gaSArIDIgOiBpKSk7Ci0KLSAgICAgIHNjYW5saW5lcy50MCA9IExJTkUyIChmcmFtZTAsIGkgLSAxKTsKLSAgICAgIHNjYW5saW5lcy5iMCA9IExJTkUyIChmcmFtZTAsIGkgKyAxKTsKLQotICAgICAgc2NhbmxpbmVzLnR0MSA9IExJTkUyIChmcmFtZTEsIChpIC0gMiA+PSAwKSA/IGkgLSAyIDogaSk7Ci0gICAgICBzY2FubGluZXMubTEgPSBMSU5FMiAoZnJhbWUxLCBpKTsKLSAgICAgIHNjYW5saW5lcy5iYjEgPSBMSU5FMiAoZnJhbWUxLCAoaSArIDIgPCBmcmFtZV9oZWlnaHQgPyBpICsgMiA6IGkpKTsKLQotICAgICAgc2NhbmxpbmVzLnQyID0gTElORTIgKGZyYW1lMiwgaSAtIDEpOwotICAgICAgc2NhbmxpbmVzLmIyID0gTElORTIgKGZyYW1lMiwgaSArIDEpOwotCi0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgKHNlbGYsIExJTkUgKG91dGZyYW1lLCBpKSwgJnNjYW5saW5lcywKLSAgICAgICAgICBmcmFtZV93aWR0aCk7Ci0gICAgfQotI3VuZGVmIExJTkUKLSN1bmRlZiBMSU5FMgotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi0gICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3kKLSAgICAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBvdXQsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGxhbmFyX3kgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kCi0gICAgKiBzZWxmLCBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludAotICAgIHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0wLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLSAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdQotICAgIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsIGd1aW50OCAqIG91dCwKLSAgICBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTEsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wbGFuYXJfdSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QKLSAgICAqIHNlbGYsIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50Ci0gICAgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2ludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl92Ci0gICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogb3V0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9jb3B5X3NjYW5saW5lX3BsYW5hcl92IChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZAotICAgICogc2VsZiwgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQKLSAgICBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi0gICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGxhbmFyX3BsYW5lCi0gICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgR3N0VmlkZW9GcmFtZSAqIGRlc3QsCi0gICAgY29uc3QgR3N0VmlkZW9GcmFtZSAqIGZyYW1lMCwgY29uc3QgR3N0VmlkZW9GcmFtZSAqIGZyYW1lMSwKLSAgICBjb25zdCBHc3RWaWRlb0ZyYW1lICogZnJhbWUyLCBjb25zdCBHc3RWaWRlb0ZyYW1lICogZnJhbWVwLAotICAgIGd1aW50IGN1cl9maWVsZF9mbGFncywgZ2ludCBwbGFuZSwKLSAgICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGNvcHlfc2NhbmxpbmUsCi0gICAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBpbnRlcnBvbGF0ZV9zY2FubGluZSkKLXsKLSAgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgc2NhbmxpbmVzOwotICBnaW50IGk7Ci0gIGdpbnQgZnJhbWVfaGVpZ2h0LCBmcmFtZV93aWR0aDsKLQotICBmcmFtZV9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGRlc3QsIHBsYW5lKTsKLSAgZnJhbWVfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZGVzdCwgcGxhbmUpICoKLSAgICAgIEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGRlc3QsIHBsYW5lKTsKLQotICBnX2Fzc2VydCAoaW50ZXJwb2xhdGVfc2NhbmxpbmUgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChjb3B5X3NjYW5saW5lICE9IE5VTEwpOwotCi0jZGVmaW5lIExJTkUoeCxpKSAoKChndWludDgqKUdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBKCh4KSxwbGFuZSkpICsgQ0xBTVBfSEkoQ0xBTVBfTE9XKGkpKSAqIFwKLSAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFKCh4KSxwbGFuZSkpCi0jZGVmaW5lIExJTkUyKHgsaSkgKCh4KSA/IExJTkUoeCxpKSA6IE5VTEwpCi0KLSAgZm9yIChpID0gMDsgaSA8IGZyYW1lX2hlaWdodDsgaSsrKSB7Ci0gICAgbWVtc2V0ICgmc2NhbmxpbmVzLCAwLCBzaXplb2YgKHNjYW5saW5lcykpOwotICAgIHNjYW5saW5lcy5ib3R0b21fZmllbGQgPSAoY3VyX2ZpZWxkX2ZsYWdzID09IFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pOwotCi0gICAgaWYgKCEoKGkgJiAxKSBeIHNjYW5saW5lcy5ib3R0b21fZmllbGQpKSB7Ci0gICAgICAvKiBjb3B5aW5nICovCi0gICAgICBzY2FubGluZXMudHAgPSBMSU5FMiAoZnJhbWVwLCBpIC0gMSk7Ci0gICAgICBzY2FubGluZXMuYnAgPSBMSU5FMiAoZnJhbWVwLCBpICsgMSk7Ci0KLSAgICAgIHNjYW5saW5lcy50dDAgPSBMSU5FMiAoZnJhbWUwLCAoaSAtIDIgPj0gMCkgPyBpIC0gMiA6IGkpOwotICAgICAgc2NhbmxpbmVzLm0wID0gTElORTIgKGZyYW1lMCwgaSk7Ci0gICAgICBzY2FubGluZXMuYmIwID0gTElORTIgKGZyYW1lMCwgKGkgKyAyIDwgZnJhbWVfaGVpZ2h0ID8gaSArIDIgOiBpKSk7Ci0KLSAgICAgIHNjYW5saW5lcy50MSA9IExJTkUyIChmcmFtZTEsIGkgLSAxKTsKLSAgICAgIHNjYW5saW5lcy5iMSA9IExJTkUyIChmcmFtZTEsIGkgKyAxKTsKLQotICAgICAgc2NhbmxpbmVzLnR0MiA9IExJTkUyIChmcmFtZTIsIChpIC0gMiA+PSAwKSA/IGkgLSAyIDogaSk7Ci0gICAgICBzY2FubGluZXMubTIgPSBMSU5FMiAoZnJhbWUyLCBpKTsKLSAgICAgIHNjYW5saW5lcy5iYjIgPSBMSU5FMiAoZnJhbWUyLCAoaSArIDIgPCBmcmFtZV9oZWlnaHQgPyBpICsgMiA6IGkpKTsKLQotICAgICAgY29weV9zY2FubGluZSAoc2VsZiwgTElORSAoZGVzdCwgaSksICZzY2FubGluZXMsIGZyYW1lX3dpZHRoKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogaW50ZXJwb2xhdGluZyAqLwotICAgICAgc2NhbmxpbmVzLnR0cCA9IExJTkUyIChmcmFtZXAsIChpIC0gMiA+PSAwKSA/IGkgLSAyIDogaSk7Ci0gICAgICBzY2FubGluZXMubXAgPSBMSU5FMiAoZnJhbWVwLCBpKTsKLSAgICAgIHNjYW5saW5lcy5iYnAgPSBMSU5FMiAoZnJhbWVwLCAoaSArIDIgPCBmcmFtZV9oZWlnaHQgPyBpICsgMiA6IGkpKTsKLQotICAgICAgc2NhbmxpbmVzLnQwID0gTElORTIgKGZyYW1lMCwgaSAtIDEpOwotICAgICAgc2NhbmxpbmVzLmIwID0gTElORTIgKGZyYW1lMCwgaSArIDEpOwotCi0gICAgICBzY2FubGluZXMudHQxID0gTElORTIgKGZyYW1lMSwgKGkgLSAyID49IDApID8gaSAtIDIgOiBpKTsKLSAgICAgIHNjYW5saW5lcy5tMSA9IExJTkUyIChmcmFtZTEsIGkpOwotICAgICAgc2NhbmxpbmVzLmJiMSA9IExJTkUyIChmcmFtZTEsIChpICsgMiA8IGZyYW1lX2hlaWdodCA/IGkgKyAyIDogaSkpOwotCi0gICAgICBzY2FubGluZXMudDIgPSBMSU5FMiAoZnJhbWUyLCBpIC0gMSk7Ci0gICAgICBzY2FubGluZXMuYjIgPSBMSU5FMiAoZnJhbWUyLCBpICsgMSk7Ci0KLSAgICAgIGludGVycG9sYXRlX3NjYW5saW5lIChzZWxmLCBMSU5FIChkZXN0LCBpKSwgJnNjYW5saW5lcywgZnJhbWVfd2lkdGgpOwotICAgIH0KLSN1bmRlZiBMSU5FCi0jdW5kZWYgTElORTIKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGxhbmFyIChHc3REZWludGVybGFjZU1ldGhvZCAqCi0gICAgbWV0aG9kLCBjb25zdCBHc3REZWludGVybGFjZUZpZWxkICogaGlzdG9yeSwgZ3VpbnQgaGlzdG9yeV9jb3VudCwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0ZnJhbWUsIGdpbnQgY3VyX2ZpZWxkX2lkeCkKLXsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKnNlbGYgPSBHU1RfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCAobWV0aG9kKTsKLSNpZm5kZWYgR19ESVNBQkxFX0FTU0VSVAotICBHc3REZWludGVybGFjZU1ldGhvZENsYXNzICpkbV9jbGFzcyA9IEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR0VUX0NMQVNTIChzZWxmKTsKLSNlbmRpZgotICBjb25zdCBHc3RWaWRlb0ZyYW1lICpmcmFtZTAsICpmcmFtZTEsICpmcmFtZTIsICpmcmFtZXA7Ci0gIGd1aW50IGN1cl9maWVsZF9mbGFncyA9IGhpc3RvcnlbY3VyX2ZpZWxkX2lkeF0uZmxhZ3M7Ci0gIGdpbnQgaTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lOwotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGludGVycG9sYXRlX3NjYW5saW5lOwotCi0gIGdfYXNzZXJ0IChzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJbMF0gIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJbMV0gIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJbMl0gIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzZWxmLT5jb3B5X3NjYW5saW5lX3BsYW5hclswXSAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKHNlbGYtPmNvcHlfc2NhbmxpbmVfcGxhbmFyWzFdICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc2VsZi0+Y29weV9zY2FubGluZV9wbGFuYXJbMl0gIT0gTlVMTCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgIGNvcHlfc2NhbmxpbmUgPSBzZWxmLT5jb3B5X3NjYW5saW5lX3BsYW5hcltpXTsKLSAgICBpbnRlcnBvbGF0ZV9zY2FubGluZSA9IHNlbGYtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcltpXTsKLQotICAgIGZyYW1lcCA9IChjdXJfZmllbGRfaWR4ID4gMCA/IGhpc3RvcnlbY3VyX2ZpZWxkX2lkeCAtIDFdLmZyYW1lIDogTlVMTCk7Ci0KLSAgICBmcmFtZTAgPSBoaXN0b3J5W2N1cl9maWVsZF9pZHhdLmZyYW1lOwotCi0gICAgZ19hc3NlcnQgKGRtX2NsYXNzLT5maWVsZHNfcmVxdWlyZWQgPD0gNCk7Ci0KLSAgICBmcmFtZTEgPQotICAgICAgICAoY3VyX2ZpZWxkX2lkeCArIDEgPAotICAgICAgICBoaXN0b3J5X2NvdW50ID8gaGlzdG9yeVtjdXJfZmllbGRfaWR4ICsgMV0uZnJhbWUgOiBOVUxMKTsKLSAgICBmcmFtZTIgPQotICAgICAgICAoY3VyX2ZpZWxkX2lkeCArIDIgPAotICAgICAgICBoaXN0b3J5X2NvdW50ID8gaGlzdG9yeVtjdXJfZmllbGRfaWR4ICsgMl0uZnJhbWUgOiBOVUxMKTsKLQotICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BsYW5hcl9wbGFuZSAoc2VsZiwKLSAgICAgICAgb3V0ZnJhbWUsIGZyYW1lMCwgZnJhbWUxLCBmcmFtZTIsIGZyYW1lcCwgY3VyX2ZpZWxkX2ZsYWdzLCBpLAotICAgICAgICBjb3B5X3NjYW5saW5lLCBpbnRlcnBvbGF0ZV9zY2FubGluZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX252MTIgKEdzdERlaW50ZXJsYWNlTWV0aG9kICoKLSAgICBtZXRob2QsIGNvbnN0IEdzdERlaW50ZXJsYWNlRmllbGQgKiBoaXN0b3J5LCBndWludCBoaXN0b3J5X2NvdW50LAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRmcmFtZSwgZ2ludCBjdXJfZmllbGRfaWR4KQotewotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EIChtZXRob2QpOwotI2lmbmRlZiBHX0RJU0FCTEVfQVNTRVJUCi0gIEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKmRtX2NsYXNzID0gR1NUX0RFSU5URVJMQUNFX01FVEhPRF9HRVRfQ0xBU1MgKHNlbGYpOwotI2VuZGlmCi0gIGNvbnN0IEdzdFZpZGVvRnJhbWUgKmZyYW1lMCwgKmZyYW1lMSwgKmZyYW1lMiwgKmZyYW1lcDsKLSAgZ3VpbnQgY3VyX2ZpZWxkX2ZsYWdzID0gaGlzdG9yeVtjdXJfZmllbGRfaWR4XS5mbGFnczsKLSAgZ2ludCBpOwotCi0gIGdfYXNzZXJ0IChzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCAhPSBOVUxMKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgZnJhbWVwID0gKGN1cl9maWVsZF9pZHggPiAwID8gaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMV0uZnJhbWUgOiBOVUxMKTsKLQotICAgIGZyYW1lMCA9IGhpc3RvcnlbY3VyX2ZpZWxkX2lkeF0uZnJhbWU7Ci0KLSAgICBnX2Fzc2VydCAoZG1fY2xhc3MtPmZpZWxkc19yZXF1aXJlZCA8PSA0KTsKLQotICAgIGZyYW1lMSA9Ci0gICAgICAgIChjdXJfZmllbGRfaWR4ICsgMSA8Ci0gICAgICAgIGhpc3RvcnlfY291bnQgPyBoaXN0b3J5W2N1cl9maWVsZF9pZHggKyAxXS5mcmFtZSA6IE5VTEwpOwotICAgIGZyYW1lMiA9Ci0gICAgICAgIChjdXJfZmllbGRfaWR4ICsgMiA8Ci0gICAgICAgIGhpc3RvcnlfY291bnQgPyBoaXN0b3J5W2N1cl9maWVsZF9pZHggKyAyXS5mcmFtZSA6IE5VTEwpOwotCi0gICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGxhbmFyX3BsYW5lIChzZWxmLAotICAgICAgICBvdXRmcmFtZSwgZnJhbWUwLCBmcmFtZTEsIGZyYW1lMiwgZnJhbWVwLCBjdXJfZmllbGRfZmxhZ3MsIGksCi0gICAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGFja2VkLCBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9zZXR1cCAoR3N0RGVpbnRlcmxhY2VNZXRob2QgKiBtZXRob2QsCi0gICAgR3N0VmlkZW9JbmZvICogdmluZm8pCi17Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICpzZWxmID0gR1NUX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0QgKG1ldGhvZCk7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKmtsYXNzID0KLSAgICAgIEdTVF9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EX0dFVF9DTEFTUyAoc2VsZik7Ci0KLSAgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9DTEFTUwotICAgICAgKGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX3BhcmVudF9jbGFzcyktPnNldHVwIChtZXRob2QsIHZpbmZvKTsKLQotICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgPSBOVUxMOwotICBzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCA9IE5VTEw7Ci0KLSAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyWzBdID0gTlVMTDsKLSAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyWzFdID0gTlVMTDsKLSAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyWzJdID0gTlVMTDsKLSAgc2VsZi0+Y29weV9zY2FubGluZV9wbGFuYXJbMF0gPSBOVUxMOwotICBzZWxmLT5jb3B5X3NjYW5saW5lX3BsYW5hclsxXSA9IE5VTEw7Ci0gIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGxhbmFyWzJdID0gTlVMTDsKLQotICBpZiAoR1NUX1ZJREVPX0lORk9fRk9STUFUICh2aW5mbykgPT0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOKQotICAgIHJldHVybjsKLQotICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAodmluZm8pKSB7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lVWTI6Ci0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgPSBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MjsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfeXV5MjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l2eXU7Ci0gICAgICBzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5jb3B5X3NjYW5saW5lX3l2eXU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfVVlWWToKLSAgICAgIHNlbGYtPmludGVycG9sYXRlX3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV91eXZ5OwotICAgICAgc2VsZi0+Y29weV9zY2FubGluZV9wYWNrZWQgPSBrbGFzcy0+Y29weV9zY2FubGluZV91eXZ5OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgPSBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1djsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfYXl1djsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94UkdCOgotICAgICAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2FyZ2I7Ci0gICAgICBzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5jb3B5X3NjYW5saW5lX2FyZ2I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICAgIHNlbGYtPmludGVycG9sYXRlX3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hYmdyOwotICAgICAgc2VsZi0+Y29weV9zY2FubGluZV9wYWNrZWQgPSBrbGFzcy0+Y29weV9zY2FubGluZV9hYmdyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQgPSBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYTsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiYTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1J4OgotICAgICAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2JncmE7Ci0gICAgICBzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5jb3B5X3NjYW5saW5lX2JncmE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgICAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3JnYjsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUjoKLSAgICAgIHNlbGYtPmludGVycG9sYXRlX3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3I7Ci0gICAgICBzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5jb3B5X3NjYW5saW5lX2JncjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjEyOgotICAgICAgc2VsZi0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkID0ga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX252MTI7Ci0gICAgICBzZWxmLT5jb3B5X3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5jb3B5X3NjYW5saW5lX252MTI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfTlYyMToKLSAgICAgIHNlbGYtPmludGVycG9sYXRlX3NjYW5saW5lX3BhY2tlZCA9IGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9udjIxOwotICAgICAgc2VsZi0+Y29weV9zY2FubGluZV9wYWNrZWQgPSBrbGFzcy0+Y29weV9zY2FubGluZV9udjIxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWMTI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJbMF0gPQotICAgICAgICAgIGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfeTsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGxhbmFyWzBdID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3k7Ci0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJbMV0gPQotICAgICAgICAgIGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdTsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGxhbmFyWzFdID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3U7Ci0gICAgICBzZWxmLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJbMl0gPQotICAgICAgICAgIGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdjsKLSAgICAgIHNlbGYtPmNvcHlfc2NhbmxpbmVfcGxhbmFyWzJdID0ga2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3Y7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NsYXNzX2luaXQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MKLSAgICAqIGtsYXNzKQotewotICBHc3REZWludGVybGFjZU1ldGhvZENsYXNzICpkbV9jbGFzcyA9IChHc3REZWludGVybGFjZU1ldGhvZENsYXNzICopIGtsYXNzOwotCi0gIGRtX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV9heXV2ID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BhY2tlZDsKLSAgZG1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l1eTIgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGFja2VkOwotICBkbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXZ5dSA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9wYWNrZWQ7Ci0gIGRtX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV91eXZ5ID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BhY2tlZDsKLSAgZG1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2FyZ2IgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGFja2VkOwotICBkbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfYWJnciA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9wYWNrZWQ7Ci0gIGRtX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV9yZ2JhID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BhY2tlZDsKLSAgZG1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2JncmEgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGFja2VkOwotICBkbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfcmdiID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BhY2tlZDsKLSAgZG1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2JnciA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9wYWNrZWQ7Ci0gIGRtX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV9pNDIwID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BsYW5hcjsKLSAgZG1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l2MTIgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGxhbmFyOwotICBkbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeTQ0NCA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9wbGFuYXI7Ci0gIGRtX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95NDJiID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lX3BsYW5hcjsKLSAgZG1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3k0MWIgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWVfcGxhbmFyOwotICBkbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfbnYxMiA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9udjEyOwotICBkbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfbnYyMSA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZV9udjEyOwotICBkbV9jbGFzcy0+ZmllbGRzX3JlcXVpcmVkID0gMjsKLSAgZG1fY2xhc3MtPnNldHVwID0gZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2Rfc2V0dXA7Ci0gIGRtX2NsYXNzLT5zdXBwb3J0ZWQgPSBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9zdXBwb3J0ZWQ7Ci0KLSAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l1eTIgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+Y29weV9zY2FubGluZV95dXkyID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5jb3B5X3NjYW5saW5lX3l2eXUgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9heXV2ID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2ludGVycG9sYXRlX3NjYW5saW5lX3BhY2tlZDsKLSAga2xhc3MtPmNvcHlfc2NhbmxpbmVfYXl1diA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9jb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3V5dnkgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+Y29weV9zY2FubGluZV91eXZ5ID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5jb3B5X3NjYW5saW5lX252MTIgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wYWNrZWQ7Ci0KLSAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2FyZ2IgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+Y29weV9zY2FubGluZV9hcmdiID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5jb3B5X3NjYW5saW5lX2FiZ3IgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wYWNrZWQ7Ci0KLSAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3JnYmEgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+Y29weV9zY2FubGluZV9yZ2JhID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYSA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5jb3B5X3NjYW5saW5lX2JncmEgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9yZ2IgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGFja2VkOwotICBrbGFzcy0+Y29weV9zY2FubGluZV9yZ2IgPSBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9jb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2JnciA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wYWNrZWQ7Ci0gIGtsYXNzLT5jb3B5X3NjYW5saW5lX2JnciA9IGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGFja2VkOwotCi0gIGtsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfeSA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfeTsKLSAga2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3kgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfY29weV9zY2FubGluZV9wbGFuYXJfeTsKLSAga2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl91ID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2ludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl91OwotICBrbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBnc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9jb3B5X3NjYW5saW5lX3BsYW5hcl91OwotICBrbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZ3N0X2RlaW50ZXJsYWNlX3NpbXBsZV9tZXRob2RfaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3Y7Ci0gIGtsYXNzLT5jb3B5X3NjYW5saW5lX3BsYW5hcl92ID0KLSAgICAgIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2NvcHlfc2NhbmxpbmVfcGxhbmFyX3Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2Vfc2ltcGxlX21ldGhvZF9pbml0IChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYpCi17Ci19CmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaCBiL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTY0NjMyLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS9nc3RkZWludGVybGFjZW1ldGhvZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0RFSU5URVJMQUNFX01FVEhPRF9IX18KLSNkZWZpbmUgX19HU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaWYgZGVmaW5lZChIQVZFX0dDQ19BU00pICYmIGRlZmluZWQoSEFWRV9PUkMpCi0jaWYgZGVmaW5lZChIQVZFX0NQVV9JMzg2KSB8fCBkZWZpbmVkKEhBVkVfQ1BVX1g4Nl82NCkKLSNkZWZpbmUgQlVJTERfWDg2X0FTTQotI2VuZGlmCi0jZW5kaWYKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRAkJKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0Qob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0QpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9ELCBHc3REZWludGVybGFjZU1ldGhvZENsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRChvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0QsIEdzdERlaW50ZXJsYWNlTWV0aG9kKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0QsIEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0NBU1Qob2JqKQkoKEdzdERlaW50ZXJsYWNlTWV0aG9kKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlaW50ZXJsYWNlTWV0aG9kIEdzdERlaW50ZXJsYWNlTWV0aG9kOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzczsKLQotCi0jZGVmaW5lIFBJQ1RVUkVfUFJPR1JFU1NJVkUgMAotI2RlZmluZSBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NIDEKLSNkZWZpbmUgUElDVFVSRV9JTlRFUkxBQ0VEX1RPUCAyCi0jZGVmaW5lIFBJQ1RVUkVfSU5URVJMQUNFRF9NQVNLIChQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NIHwgUElDVFVSRV9JTlRFUkxBQ0VEX1RPUCkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0VmlkZW9GcmFtZSAqZnJhbWU7Ci0gIC8qIHNlZSBQSUNUVVJFXyBmbGFncyBpbiAqLmMgKi8KLSAgZ3VpbnQgZmxhZ3M7Ci19IEdzdERlaW50ZXJsYWNlRmllbGQ7Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBkZWludGVybGFjZXIgcGx1Z2luLgotICovCi0KLXR5cGVkZWYgdm9pZCAoKkdzdERlaW50ZXJsYWNlTWV0aG9kRGVpbnRlcmxhY2VGdW5jdGlvbikgKAotICAgIEdzdERlaW50ZXJsYWNlTWV0aG9kICpzZWxmLCBjb25zdCBHc3REZWludGVybGFjZUZpZWxkICpoaXN0b3J5LAotICAgIGd1aW50IGhpc3RvcnlfY291bnQsIEdzdFZpZGVvRnJhbWUgKm91dGZyYW1lLCBpbnQgY3VyX2ZpZWxkX2lkeCk7Ci0KLXN0cnVjdCBfR3N0RGVpbnRlcmxhY2VNZXRob2QgewotICBHc3RPYmplY3QgcGFyZW50OwotCi0gIEdzdFZpZGVvSW5mbyAqdmluZm87Ci0KLSAgR3N0RGVpbnRlcmxhY2VNZXRob2REZWludGVybGFjZUZ1bmN0aW9uIGRlaW50ZXJsYWNlX2ZyYW1lOwotfTsKLQotc3RydWN0IF9Hc3REZWludGVybGFjZU1ldGhvZENsYXNzIHsKLSAgR3N0T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOwotICBndWludCBmaWVsZHNfcmVxdWlyZWQ7Ci0gIGd1aW50IGxhdGVuY3k7Ci0KLSAgZ2Jvb2xlYW4gKCpzdXBwb3J0ZWQpIChHc3REZWludGVybGFjZU1ldGhvZENsYXNzICprbGFzcywgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0LCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCk7Ci0KLSAgdm9pZCAoKnNldHVwKSAoR3N0RGVpbnRlcmxhY2VNZXRob2QgKnNlbGYsIEdzdFZpZGVvSW5mbyAqIHZpbmZvKTsKLQotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfeXV5MjsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2REZWludGVybGFjZUZ1bmN0aW9uIGRlaW50ZXJsYWNlX2ZyYW1lX3l2eXU7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kRGVpbnRlcmxhY2VGdW5jdGlvbiBkZWludGVybGFjZV9mcmFtZV91eXZ5OwotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfaTQyMDsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2REZWludGVybGFjZUZ1bmN0aW9uIGRlaW50ZXJsYWNlX2ZyYW1lX3l2MTI7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kRGVpbnRlcmxhY2VGdW5jdGlvbiBkZWludGVybGFjZV9mcmFtZV95NDQ0OwotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfeTQyYjsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2REZWludGVybGFjZUZ1bmN0aW9uIGRlaW50ZXJsYWNlX2ZyYW1lX3k0MWI7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kRGVpbnRlcmxhY2VGdW5jdGlvbiBkZWludGVybGFjZV9mcmFtZV9heXV2OwotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfbnYxMjsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2REZWludGVybGFjZUZ1bmN0aW9uIGRlaW50ZXJsYWNlX2ZyYW1lX252MjE7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kRGVpbnRlcmxhY2VGdW5jdGlvbiBkZWludGVybGFjZV9mcmFtZV9hcmdiOwotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfYWJncjsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2REZWludGVybGFjZUZ1bmN0aW9uIGRlaW50ZXJsYWNlX2ZyYW1lX3JnYmE7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kRGVpbnRlcmxhY2VGdW5jdGlvbiBkZWludGVybGFjZV9mcmFtZV9iZ3JhOwotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfcmdiOwotICBHc3REZWludGVybGFjZU1ldGhvZERlaW50ZXJsYWNlRnVuY3Rpb24gZGVpbnRlcmxhY2VfZnJhbWVfYmdyOwotCi0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBjb25zdCBnY2hhciAqbmljazsKLX07Ci0KLUdUeXBlIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3N1cHBvcnRlZCAoR1R5cGUgdHlwZSwgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0LCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCk7Ci12b2lkIGdzdF9kZWludGVybGFjZV9tZXRob2Rfc2V0dXAgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZiwgR3N0VmlkZW9JbmZvICogdmluZm8pOwotdm9pZCBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lIChHc3REZWludGVybGFjZU1ldGhvZCAqIHNlbGYsIGNvbnN0IEdzdERlaW50ZXJsYWNlRmllbGQgKiBoaXN0b3J5LCBndWludCBoaXN0b3J5X2NvdW50LCBHc3RWaWRlb0ZyYW1lICogb3V0ZnJhbWUsCi0gICAgaW50IGN1cl9maWVsZF9pZHgpOwotZ2ludCBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dldF9maWVsZHNfcmVxdWlyZWQgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZik7Ci1naW50IGdzdF9kZWludGVybGFjZV9tZXRob2RfZ2V0X2xhdGVuY3kgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogc2VsZik7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRAkJKGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRChvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0RfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCkpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCwgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0QsIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0RfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCwgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9TSU1QTEVfTUVUSE9EX0NBU1Qob2JqKQkoKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3REZWludGVybGFjZVNjYW5saW5lRGF0YSBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YTsKLQotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIHNpbXBsZSBkZWludGVybGFjZXIgcGx1Z2luLgotICovCi0KLXN0cnVjdCBfR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgewotIGNvbnN0IGd1aW50OCAqdHRwLCAqdHAsICptcCwgKmJwLCAqYmJwOwotIGNvbnN0IGd1aW50OCAqdHQwLCAqdDAsICptMCwgKmIwLCAqYmIwOwotIGNvbnN0IGd1aW50OCAqdHQxLCAqdDEsICptMSwgKmIxLCAqYmIxOwotIGNvbnN0IGd1aW50OCAqdHQyLCAqdDIsICptMiwgKmIyLCAqYmIyOwotIGdib29sZWFuIGJvdHRvbV9maWVsZDsKLX07Ci0KLS8qCi0gKiBGb3IgaW50ZXJwb2xhdGVfc2NhbmxpbmUgdGhlIGlucHV0IGlzOgotICoKLSAqIHwgICB0LTMgICAgICAgdC0yICAgICAgIHQtMSAgICAgICB0ICAgICAgICB0KzEKLSAqIHwgRmllbGQgMyB8IEZpZWxkIDIgfCBGaWVsZCAxIHwgRmllbGQgMCB8IEZpZWxkIC0xCi0gKiB8ICBUVDMgICAgfCAgICAgICAgIHwgICBUVDEgICB8ICAgICAgICAgfCAgIFRUcAotICogfCAgICAgICAgIHwgICBUMiAgICB8ICAgICAgICAgfCAgIFQwICAgIHwKLSAqIHwgICBNMyAgICB8ICAgICAgICAgfCAgICBNMSAgIHwgICAgICAgICB8ICAgIE1wCi0gKiB8ICAgICAgICAgfCAgIEIyICAgIHwgICAgICAgICB8ICAgQjAgICAgfAotICogfCAgQkIzICAgIHwgICAgICAgICB8ICAgQkIxICAgfCAgICAgICAgIHwgICBCQnAKLSAqCi0gKiBGb3IgY29weV9zY2FubGluZSB0aGUgaW5wdXQgaXM6Ci0gKgotICogfCAgIHQtMyAgICAgICB0LTIgICAgICAgdC0xICAgICAgIHQgICAgICAgICB0KzEKLSAqIHwgRmllbGQgMyB8IEZpZWxkIDIgfCBGaWVsZCAxIHwgRmllbGQgMCB8IEZpZWxkIC0xCi0gKiB8ICAgICAgICAgfCAgIFRUMiAgIHwgICAgICAgICB8ICBUVDAgICAgfAotICogfCAgIFQzICAgIHwgICAgICAgICB8ICAgVDEgICAgfCAgICAgICAgIHwgICBUcAotICogfCAgICAgICAgIHwgICAgTTIgICB8ICAgICAgICAgfCAgIE0wICAgIHwKLSAqIHwgICBCMyAgICB8ICAgICAgICAgfCAgIEIxICAgIHwgICAgICAgICB8ICAgQnAKLSAqIHwgICAgICAgICB8ICAgQkIyICAgfCAgICAgICAgIHwgIEJCMCAgICB8Ci0gKgotICogQWxsIG90aGVyIHZhbHVlcyBhcmUgTlVMTC4KLSAqLwotCi10eXBlZGVmIHZvaWQgKCpHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uKSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKnNlbGYsIGd1aW50OCAqb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqc2NhbmxpbmVzLCBndWludCBzaXplKTsKLQotc3RydWN0IF9Hc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCB7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kIHBhcmVudDsKLQotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGludGVycG9sYXRlX3NjYW5saW5lX3BhY2tlZDsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLQotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hclszXTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3BsYW5hclszXTsKLX07Ci0KLXN0cnVjdCBfR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyB7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIFBhY2tlZCBmb3JtYXRzICovCi0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MjsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3l1eTI7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3l2eXU7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3V5dnk7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1djsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX2F5dXY7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfYXJnYjsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX2FyZ2I7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJncjsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX2FiZ3I7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3JnYmE7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX2JncmE7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiOwotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGNvcHlfc2NhbmxpbmVfcmdiOwotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGludGVycG9sYXRlX3NjYW5saW5lX2JncjsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX2JncjsKLQotICAvKiBTZW1pLXBsYW5hciBmb3JtYXRzICovCi0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMjsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX252MTI7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMTsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX252MjE7Ci0KLSAgLyogUGxhbmFyIGZvcm1hdHMgKi8KLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBjb3B5X3NjYW5saW5lX3BsYW5hcl95OwotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95OwotICBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZEZ1bmN0aW9uIGNvcHlfc2NhbmxpbmVfcGxhbmFyX3U7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gaW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3U7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kRnVuY3Rpb24gY29weV9zY2FubGluZV9wbGFuYXJfdjsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RGdW5jdGlvbiBpbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdjsKLX07Ci0KLUdUeXBlIGdzdF9kZWludGVybGFjZV9zaW1wbGVfbWV0aG9kX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0RFSU5URVJMQUNFX01FVEhPRF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MmNlMzAuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS1kaXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTE5ICswLDAgQEAKLQotLyogYXV0b2dlbmVyYXRlZCBmcm9tIHR2dGltZS5vcmMgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmbmRlZiBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jZGVmaW5lIF9PUkNfSU5URUdFUl9UWVBFREVGU18KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2luY2x1ZGUgPHN0ZGludC5oPgotdHlwZWRlZiBpbnQ4X3Qgb3JjX2ludDg7Ci10eXBlZGVmIGludDE2X3Qgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQzMl90IG9yY19pbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVpbnQ4X3Qgb3JjX3VpbnQ4OwotdHlwZWRlZiB1aW50MTZfdCBvcmNfdWludDE2OwotdHlwZWRlZiB1aW50MzJfdCBvcmNfdWludDMyOwotdHlwZWRlZiB1aW50NjRfdCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgVUlOVDY0X0MoeCkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBfX2ludDggb3JjX2ludDg7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDE2IG9yY19pbnQxNjsKLXR5cGVkZWYgc2lnbmVkIF9faW50MzIgb3JjX2ludDMyOwotdHlwZWRlZiBzaWduZWQgX19pbnQ2NCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50OCBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiBvcmNfdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVWk2NCkKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotdHlwZWRlZiBzaWduZWQgY2hhciBvcmNfaW50ODsKLXR5cGVkZWYgc2hvcnQgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQgb3JjX2ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG9yY191aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IG9yY191aW50MzI7Ci0jaWYgSU5UX01BWCA9PSBMT05HX01BWAotdHlwZWRlZiBsb25nIGxvbmcgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTEwpCi0jZWxzZQotdHlwZWRlZiBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VMKQotI2VuZGlmCi0jZW5kaWYKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDE2IGk7Ci0gIG9yY19pbnQ4IHgyWzJdOwotfSBvcmNfdW5pb24xNjsKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDMyIGk7Ci0gIGZsb2F0IGY7Ci0gIG9yY19pbnQxNiB4MlsyXTsKLSAgb3JjX2ludDggeDRbNF07Ci19IG9yY191bmlvbjMyOwotdHlwZWRlZiB1bmlvbgotewotICBvcmNfaW50NjQgaTsKLSAgZG91YmxlIGY7Ci0gIG9yY19pbnQzMiB4MlsyXTsKLSAgZmxvYXQgeDJmWzJdOwotICBvcmNfaW50MTYgeDRbNF07Ci19IG9yY191bmlvbjY0OwotI2VuZGlmCi0jaWZuZGVmIE9SQ19SRVNUUklDVAotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIE9SQ19SRVNUUklDVCByZXN0cmljdAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgX19yZXN0cmljdF9fCi0jZWxzZQotI2RlZmluZSBPUkNfUkVTVFJJQ1QKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgT1JDX0lOVEVSTkFMCi0jaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU5MCkKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1NTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2hpZGRlbgotI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxzZQotI2RlZmluZSBPUkNfSU5URVJOQUwKLSNlbmRpZgotI2VuZGlmCi0KLQotI2lmbmRlZiBESVNBQkxFX09SQwotI2luY2x1ZGUgPG9yYy9vcmMuaD4KLSNlbmRpZgotdm9pZCBkZWludGVybGFjZV9saW5lX3ZmaXIgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMiwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczMsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzNCwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczUsIGludCBuKTsKLXZvaWQgZGVpbnRlcmxhY2VfbGluZV9saW5lYXIgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMiwgaW50IG4pOwotdm9pZCBkZWludGVybGFjZV9saW5lX2xpbmVhcl9ibGVuZCAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMywgaW50IG4pOwotdm9pZCBkZWludGVybGFjZV9saW5lX2dyZWVkeSAob3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IG9yY191aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLAotICAgIGNvbnN0IG9yY191aW50OCAqIE9SQ19SRVNUUklDVCBzMywgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHM0LAotICAgIGludCBwMSwgaW50IG4pOwotCi0KLS8qIGJlZ2luIE9yYyBDIHRhcmdldCBwcmVhbWJsZSAqLwotI2RlZmluZSBPUkNfQ0xBTVAoeCxhLGIpICgoeCk8KGEpID8gKGEpIDogKCh4KT4oYikgPyAoYikgOiAoeCkpKQotI2RlZmluZSBPUkNfQUJTKGEpICgoYSk8MCA/IC0oYSkgOiAoYSkpCi0jZGVmaW5lIE9SQ19NSU4oYSxiKSAoKGEpPChiKSA/IChhKSA6IChiKSkKLSNkZWZpbmUgT1JDX01BWChhLGIpICgoYSk+KGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBPUkNfU0JfTUFYIDEyNwotI2RlZmluZSBPUkNfU0JfTUlOICgtMS1PUkNfU0JfTUFYKQotI2RlZmluZSBPUkNfVUJfTUFYIDI1NQotI2RlZmluZSBPUkNfVUJfTUlOIDAKLSNkZWZpbmUgT1JDX1NXX01BWCAzMjc2NwotI2RlZmluZSBPUkNfU1dfTUlOICgtMS1PUkNfU1dfTUFYKQotI2RlZmluZSBPUkNfVVdfTUFYIDY1NTM1Ci0jZGVmaW5lIE9SQ19VV19NSU4gMAotI2RlZmluZSBPUkNfU0xfTUFYIDIxNDc0ODM2NDcKLSNkZWZpbmUgT1JDX1NMX01JTiAoLTEtT1JDX1NMX01BWCkKLSNkZWZpbmUgT1JDX1VMX01BWCA0Mjk0OTY3Mjk1VQotI2RlZmluZSBPUkNfVUxfTUlOIDAKLSNkZWZpbmUgT1JDX0NMQU1QX1NCKHgpIE9SQ19DTEFNUCh4LE9SQ19TQl9NSU4sT1JDX1NCX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VCKHgpIE9SQ19DTEFNUCh4LE9SQ19VQl9NSU4sT1JDX1VCX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1NXKHgpIE9SQ19DTEFNUCh4LE9SQ19TV19NSU4sT1JDX1NXX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VXKHgpIE9SQ19DTEFNUCh4LE9SQ19VV19NSU4sT1JDX1VXX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1NMKHgpIE9SQ19DTEFNUCh4LE9SQ19TTF9NSU4sT1JDX1NMX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VMKHgpIE9SQ19DTEFNUCh4LE9SQ19VTF9NSU4sT1JDX1VMX01BWCkKLSNkZWZpbmUgT1JDX1NXQVBfVyh4KSAoKCgoeCkmMHhmZlUpPDw4KSB8ICgoKHgpJjB4ZmYwMFUpPj44KSkKLSNkZWZpbmUgT1JDX1NXQVBfTCh4KSAoKCgoeCkmMHhmZlUpPDwyNCkgfCAoKCh4KSYweGZmMDBVKTw8OCkgfCAoKCh4KSYweGZmMDAwMFUpPj44KSB8ICgoKHgpJjB4ZmYwMDAwMDBVKT4+MjQpKQotI2RlZmluZSBPUkNfU1dBUF9RKHgpICgoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZikpPDw1NikgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwKSk8PDQwKSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMCkpPDwyNCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMCkpPDw4KSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMDAwMDApKT4+OCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMDAwMDApKT4+MjQpIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMDAwMDApKT4+NDApIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMDAwMDAwMCkpPj41NikpCi0jZGVmaW5lIE9SQ19QVFJfT0ZGU0VUKHB0cixvZmZzZXQpICgodm9pZCAqKSgoKHVuc2lnbmVkIGNoYXIgKikocHRyKSkgKyAob2Zmc2V0KSkpCi0jZGVmaW5lIE9SQ19ERU5PUk1BTCh4KSAoKHgpICYgKCgoKHgpJjB4N2Y4MDAwMDApID09IDApID8gMHhmZjgwMDAwMCA6IDB4ZmZmZmZmZmYpKQotI2RlZmluZSBPUkNfSVNOQU4oeCkgKCgoKHgpJjB4N2Y4MDAwMDApID09IDB4N2Y4MDAwMDApICYmICgoKHgpJjB4MDA3ZmZmZmYpICE9IDApKQotI2RlZmluZSBPUkNfREVOT1JNQUxfRE9VQkxFKHgpICgoeCkgJiAoKCgoeCkmT1JDX1VJTlQ2NF9DKDB4N2ZmMDAwMDAwMDAwMDAwMCkpID09IDApID8gT1JDX1VJTlQ2NF9DKDB4ZmZmMDAwMDAwMDAwMDAwMCkgOiBPUkNfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSkpCi0jZGVmaW5lIE9SQ19JU05BTl9ET1VCTEUoeCkgKCgoKHgpJk9SQ19VSU5UNjRfQygweDdmZjAwMDAwMDAwMDAwMDApKSA9PSBPUkNfVUlOVDY0X0MoMHg3ZmYwMDAwMDAwMDAwMDAwKSkgJiYgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4MDAwZmZmZmZmZmZmZmZmZikpICE9IDApKQotI2lmbmRlZiBPUkNfUkVTVFJJQ1QKLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgcmVzdHJpY3QKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKLSNkZWZpbmUgT1JDX1JFU1RSSUNUIF9fcmVzdHJpY3RfXwotI2Vsc2UKLSNkZWZpbmUgT1JDX1JFU1RSSUNUCi0jZW5kaWYKLSNlbmRpZgotLyogZW5kIE9yYyBDIHRhcmdldCBwcmVhbWJsZSAqLwotCi0KLQotLyogZGVpbnRlcmxhY2VfbGluZV92ZmlyICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWRlaW50ZXJsYWNlX2xpbmVfdmZpciAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczMsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHM0LCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczUsIGludCBuKQotewotICBpbnQgaTsKLSAgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNTsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI2OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjc7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyODsKLSAgb3JjX2ludDggdmFyMzU7Ci0gIG9yY19pbnQ4IHZhcjM2OwotICBvcmNfaW50OCB2YXIzNzsKLSAgb3JjX2ludDggdmFyMzg7Ci0gIG9yY19pbnQ4IHZhcjM5OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZCAoX19pMzg2X18pCi0gIHZvbGF0aWxlIG9yY191bmlvbjE2IHZhcjQwOwotI2Vsc2UKLSAgb3JjX3VuaW9uMTYgdmFyNDA7Ci0jZW5kaWYKLSAgb3JjX2ludDggdmFyNDE7Ci0gIG9yY191bmlvbjE2IHZhcjQyOwotICBvcmNfdW5pb24xNiB2YXI0MzsKLSAgb3JjX3VuaW9uMTYgdmFyNDQ7Ci0gIG9yY191bmlvbjE2IHZhcjQ1OwotICBvcmNfdW5pb24xNiB2YXI0NjsKLSAgb3JjX3VuaW9uMTYgdmFyNDc7Ci0gIG9yY191bmlvbjE2IHZhcjQ4OwotICBvcmNfdW5pb24xNiB2YXI0OTsKLSAgb3JjX3VuaW9uMTYgdmFyNTA7Ci0gIG9yY191bmlvbjE2IHZhcjUxOwotICBvcmNfdW5pb24xNiB2YXI1MjsKLSAgb3JjX3VuaW9uMTYgdmFyNTM7Ci0gIG9yY191bmlvbjE2IHZhcjU0OwotCi0gIHB0cjAgPSAob3JjX2ludDggKikgZDE7Ci0gIHB0cjQgPSAob3JjX2ludDggKikgczE7Ci0gIHB0cjUgPSAob3JjX2ludDggKikgczI7Ci0gIHB0cjYgPSAob3JjX2ludDggKikgczM7Ci0gIHB0cjcgPSAob3JjX2ludDggKikgczQ7Ci0gIHB0cjggPSAob3JjX2ludDggKikgczU7Ci0KLSAgLyogMTY6IGxvYWRwdyAqLwotICB2YXI0MC5pID0gKGludCkgMHgwMDAwMDAwNDsgICAvKiA0IG9yIDEuOTc2MjZlLTMyM2YgKi8KLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGIgKi8KLSAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgLyogMTogY29udnVidyAqLwotICAgIHZhcjQyLmkgPSAob3JjX3VpbnQ4KSB2YXIzNTsKLSAgICAvKiAyOiBsb2FkYiAqLwotICAgIHZhcjM2ID0gcHRyOFtpXTsKLSAgICAvKiAzOiBjb252dWJ3ICovCi0gICAgdmFyNDMuaSA9IChvcmNfdWludDgpIHZhcjM2OwotICAgIC8qIDQ6IGFkZHcgKi8KLSAgICB2YXI0NC5pID0gdmFyNDIuaSArIHZhcjQzLmk7Ci0gICAgLyogNTogbG9hZGIgKi8KLSAgICB2YXIzNyA9IHB0cjVbaV07Ci0gICAgLyogNjogY29udnVidyAqLwotICAgIHZhcjQ1LmkgPSAob3JjX3VpbnQ4KSB2YXIzNzsKLSAgICAvKiA3OiBsb2FkYiAqLwotICAgIHZhcjM4ID0gcHRyN1tpXTsKLSAgICAvKiA4OiBjb252dWJ3ICovCi0gICAgdmFyNDYuaSA9IChvcmNfdWludDgpIHZhcjM4OwotICAgIC8qIDk6IGFkZHcgKi8KLSAgICB2YXI0Ny5pID0gdmFyNDUuaSArIHZhcjQ2Lmk7Ci0gICAgLyogMTA6IHNobHcgKi8KLSAgICB2YXI0OC5pID0gKChvcmNfdWludDE2KSB2YXI0Ny5pKSA8PCAyOwotICAgIC8qIDExOiBsb2FkYiAqLwotICAgIHZhcjM5ID0gcHRyNltpXTsKLSAgICAvKiAxMjogY29udnVidyAqLwotICAgIHZhcjQ5LmkgPSAob3JjX3VpbnQ4KSB2YXIzOTsKLSAgICAvKiAxMzogc2hsdyAqLwotICAgIHZhcjUwLmkgPSAoKG9yY191aW50MTYpIHZhcjQ5LmkpIDw8IDE7Ci0gICAgLyogMTQ6IHN1YncgKi8KLSAgICB2YXI1MS5pID0gdmFyNDguaSAtIHZhcjQ0Lmk7Ci0gICAgLyogMTU6IGFkZHcgKi8KLSAgICB2YXI1Mi5pID0gdmFyNTEuaSArIHZhcjUwLmk7Ci0gICAgLyogMTc6IGFkZHcgKi8KLSAgICB2YXI1My5pID0gdmFyNTIuaSArIHZhcjQwLmk7Ci0gICAgLyogMTg6IHNocnN3ICovCi0gICAgdmFyNTQuaSA9IHZhcjUzLmkgPj4gMzsKLSAgICAvKiAxOTogY29udnN1c3diICovCi0gICAgdmFyNDEgPSBPUkNfQ0xBTVBfVUIgKHZhcjU0LmkpOwotICAgIC8qIDIwOiBzdG9yZWIgKi8KLSAgICBwdHIwW2ldID0gdmFyNDE7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfZGVpbnRlcmxhY2VfbGluZV92ZmlyIChPcmNFeGVjdXRvciAqIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI0OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjU7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNjsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI3OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjg7Ci0gIG9yY19pbnQ4IHZhcjM1OwotICBvcmNfaW50OCB2YXIzNjsKLSAgb3JjX2ludDggdmFyMzc7Ci0gIG9yY19pbnQ4IHZhcjM4OwotICBvcmNfaW50OCB2YXIzOTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQgKF9faTM4Nl9fKQotICB2b2xhdGlsZSBvcmNfdW5pb24xNiB2YXI0MDsKLSNlbHNlCi0gIG9yY191bmlvbjE2IHZhcjQwOwotI2VuZGlmCi0gIG9yY19pbnQ4IHZhcjQxOwotICBvcmNfdW5pb24xNiB2YXI0MjsKLSAgb3JjX3VuaW9uMTYgdmFyNDM7Ci0gIG9yY191bmlvbjE2IHZhcjQ0OwotICBvcmNfdW5pb24xNiB2YXI0NTsKLSAgb3JjX3VuaW9uMTYgdmFyNDY7Ci0gIG9yY191bmlvbjE2IHZhcjQ3OwotICBvcmNfdW5pb24xNiB2YXI0ODsKLSAgb3JjX3VuaW9uMTYgdmFyNDk7Ci0gIG9yY191bmlvbjE2IHZhcjUwOwotICBvcmNfdW5pb24xNiB2YXI1MTsKLSAgb3JjX3VuaW9uMTYgdmFyNTI7Ci0gIG9yY191bmlvbjE2IHZhcjUzOwotICBvcmNfdW5pb24xNiB2YXI1NDsKLQotICBwdHIwID0gKG9yY19pbnQ4ICopIGV4LT5hcnJheXNbMF07Ci0gIHB0cjQgPSAob3JjX2ludDggKikgZXgtPmFycmF5c1s0XTsKLSAgcHRyNSA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzVdOwotICBwdHI2ID0gKG9yY19pbnQ4ICopIGV4LT5hcnJheXNbNl07Ci0gIHB0cjcgPSAob3JjX2ludDggKikgZXgtPmFycmF5c1s3XTsKLSAgcHRyOCA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzhdOwotCi0gIC8qIDE2OiBsb2FkcHcgKi8KLSAgdmFyNDAuaSA9IChpbnQpIDB4MDAwMDAwMDQ7ICAgLyogNCBvciAxLjk3NjI2ZS0zMjNmICovCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRiICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZ1YncgKi8KLSAgICB2YXI0Mi5pID0gKG9yY191aW50OCkgdmFyMzU7Ci0gICAgLyogMjogbG9hZGIgKi8KLSAgICB2YXIzNiA9IHB0cjhbaV07Ci0gICAgLyogMzogY29udnVidyAqLwotICAgIHZhcjQzLmkgPSAob3JjX3VpbnQ4KSB2YXIzNjsKLSAgICAvKiA0OiBhZGR3ICovCi0gICAgdmFyNDQuaSA9IHZhcjQyLmkgKyB2YXI0My5pOwotICAgIC8qIDU6IGxvYWRiICovCi0gICAgdmFyMzcgPSBwdHI1W2ldOwotICAgIC8qIDY6IGNvbnZ1YncgKi8KLSAgICB2YXI0NS5pID0gKG9yY191aW50OCkgdmFyMzc7Ci0gICAgLyogNzogbG9hZGIgKi8KLSAgICB2YXIzOCA9IHB0cjdbaV07Ci0gICAgLyogODogY29udnVidyAqLwotICAgIHZhcjQ2LmkgPSAob3JjX3VpbnQ4KSB2YXIzODsKLSAgICAvKiA5OiBhZGR3ICovCi0gICAgdmFyNDcuaSA9IHZhcjQ1LmkgKyB2YXI0Ni5pOwotICAgIC8qIDEwOiBzaGx3ICovCi0gICAgdmFyNDguaSA9ICgob3JjX3VpbnQxNikgdmFyNDcuaSkgPDwgMjsKLSAgICAvKiAxMTogbG9hZGIgKi8KLSAgICB2YXIzOSA9IHB0cjZbaV07Ci0gICAgLyogMTI6IGNvbnZ1YncgKi8KLSAgICB2YXI0OS5pID0gKG9yY191aW50OCkgdmFyMzk7Ci0gICAgLyogMTM6IHNobHcgKi8KLSAgICB2YXI1MC5pID0gKChvcmNfdWludDE2KSB2YXI0OS5pKSA8PCAxOwotICAgIC8qIDE0OiBzdWJ3ICovCi0gICAgdmFyNTEuaSA9IHZhcjQ4LmkgLSB2YXI0NC5pOwotICAgIC8qIDE1OiBhZGR3ICovCi0gICAgdmFyNTIuaSA9IHZhcjUxLmkgKyB2YXI1MC5pOwotICAgIC8qIDE3OiBhZGR3ICovCi0gICAgdmFyNTMuaSA9IHZhcjUyLmkgKyB2YXI0MC5pOwotICAgIC8qIDE4OiBzaHJzdyAqLwotICAgIHZhcjU0LmkgPSB2YXI1My5pID4+IDM7Ci0gICAgLyogMTk6IGNvbnZzdXN3YiAqLwotICAgIHZhcjQxID0gT1JDX0NMQU1QX1VCICh2YXI1NC5pKTsKLSAgICAvKiAyMDogc3RvcmViICovCi0gICAgcHRyMFtpXSA9IHZhcjQxOwotICB9Ci0KLX0KLQotdm9pZAotZGVpbnRlcmxhY2VfbGluZV92ZmlyIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczIsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMywKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczQsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzNSwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCAyMSwgMTAwLCAxMDEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMDgsIDk3LCA5OSwgMTAxLCA5NSwgMTA4LAotICAgICAgICAxMDUsIDExMCwgMTAxLCA5NSwgMTE4LCAxMDIsIDEwNSwgMTE0LCAxMSwgMSwgMSwgMTIsIDEsIDEsIDEyLCAxLAotICAgICAgICAxLCAxMiwgMSwgMSwgMTIsIDEsIDEsIDEyLCAxLCAxLCAxNCwgMiwgMiwgMCwgMCwgMCwKLSAgICAgICAgMTQsIDIsIDEsIDAsIDAsIDAsIDE0LCAyLCA0LCAwLCAwLCAwLCAxNCwgMiwgMywgMCwKLSAgICAgICAgMCwgMCwgMjAsIDIsIDIwLCAyLCAyMCwgMiwgMTUwLCAzMiwgNCwgMTUwLCAzMywgOCwgNzAsIDMyLAotICAgICAgICAzMiwgMzMsIDE1MCwgMzMsIDUsIDE1MCwgMzQsIDcsIDcwLCAzMywgMzMsIDM0LCA5MywgMzMsIDMzLCAxNiwKLSAgICAgICAgMTUwLCAzNCwgNiwgOTMsIDM0LCAzNCwgMTcsIDk4LCAzMywgMzMsIDMyLCA3MCwgMzMsIDMzLCAzNCwgNzAsCi0gICAgICAgIDMzLCAzMywgMTgsIDk0LCAzMywgMzMsIDE5LCAxNjAsIDAsIDMzLCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfZGVpbnRlcmxhY2VfbGluZV92ZmlyKTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJkZWludGVybGFjZV9saW5lX3ZmaXIiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfZGVpbnRlcmxhY2VfbGluZV92ZmlyKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgMSwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCAxLCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDEsICJzMiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgMSwgInMzIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCAxLCAiczQiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDEsICJzNSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAyLCAweDAwMDAwMDAyLCAiYzEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9jb25zdGFudCAocCwgMiwgMHgwMDAwMDAwMSwgImMyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfY29uc3RhbnQgKHAsIDIsIDB4MDAwMDAwMDQsICJjMyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAyLCAweDAwMDAwMDAzLCAiYzQiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDIsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMiwgInQyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAyLCAidDMiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfUzUsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHciLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9TMiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfUzQsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHciLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QzLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzaGx3IiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9DMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfUzMsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNobHciLCAwLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1QzLCBPUkNfVkFSX0MyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzdWJ3IiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYWRkdyIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHciLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QyLCBPUkNfVkFSX0MzLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzaHJzdyIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDIsIE9SQ19WQVJfQzQsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZzdXN3YiIsIDAsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MyXSA9ICh2b2lkICopIHMyOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzNdID0gKHZvaWQgKikgczM7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TNF0gPSAodm9pZCAqKSBzNDsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1M1XSA9ICh2b2lkICopIHM1OwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBkZWludGVybGFjZV9saW5lX2xpbmVhciAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1kZWludGVybGFjZV9saW5lX2xpbmVhciAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI0OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjU7Ci0gIG9yY19pbnQ4IHZhcjMyOwotICBvcmNfaW50OCB2YXIzMzsKLSAgb3JjX2ludDggdmFyMzQ7Ci0KLSAgcHRyMCA9IChvcmNfaW50OCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfaW50OCAqKSBzMTsKLSAgcHRyNSA9IChvcmNfaW50OCAqKSBzMjsKLQotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkYiAqLwotICAgIHZhcjMyID0gcHRyNFtpXTsKLSAgICAvKiAxOiBsb2FkYiAqLwotICAgIHZhcjMzID0gcHRyNVtpXTsKLSAgICAvKiAyOiBhdmd1YiAqLwotICAgIHZhcjM0ID0gKChvcmNfdWludDgpIHZhcjMyICsgKG9yY191aW50OCkgdmFyMzMgKyAxKSA+PiAxOwotICAgIC8qIDM6IHN0b3JlYiAqLwotICAgIHB0cjBbaV0gPSB2YXIzNDsKLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF9kZWludGVybGFjZV9saW5lX2xpbmVhciAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI1OwotICBvcmNfaW50OCB2YXIzMjsKLSAgb3JjX2ludDggdmFyMzM7Ci0gIG9yY19pbnQ4IHZhcjM0OwotCi0gIHB0cjAgPSAob3JjX2ludDggKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzRdOwotICBwdHI1ID0gKG9yY19pbnQ4ICopIGV4LT5hcnJheXNbNV07Ci0KLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGIgKi8KLSAgICB2YXIzMiA9IHB0cjRbaV07Ci0gICAgLyogMTogbG9hZGIgKi8KLSAgICB2YXIzMyA9IHB0cjVbaV07Ci0gICAgLyogMjogYXZndWIgKi8KLSAgICB2YXIzNCA9ICgob3JjX3VpbnQ4KSB2YXIzMiArIChvcmNfdWludDgpIHZhcjMzICsgMSkgPj4gMTsKLSAgICAvKiAzOiBzdG9yZWIgKi8KLSAgICBwdHIwW2ldID0gdmFyMzQ7Ci0gIH0KLQotfQotCi12b2lkCi1kZWludGVybGFjZV9saW5lX2xpbmVhciAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDIzLCAxMDAsIDEwMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDEwOCwgOTcsIDk5LCAxMDEsIDk1LCAxMDgsCi0gICAgICAgIDEwNSwgMTEwLCAxMDEsIDk1LCAxMDgsIDEwNSwgMTEwLCAxMDEsIDk3LCAxMTQsIDExLCAxLCAxLCAxMiwgMSwgMSwKLSAgICAgICAgMTIsIDEsIDEsIDM5LCAwLCA0LCA1LCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfZGVpbnRlcmxhY2VfbGluZV9saW5lYXIpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfbmFtZSAocCwgImRlaW50ZXJsYWNlX2xpbmVfbGluZWFyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLCBfYmFja3VwX2RlaW50ZXJsYWNlX2xpbmVfbGluZWFyKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgMSwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCAxLCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDEsICJzMiIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImF2Z3ViIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9TMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzJdID0gKHZvaWQgKikgczI7Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIGRlaW50ZXJsYWNlX2xpbmVfbGluZWFyX2JsZW5kICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLWRlaW50ZXJsYWNlX2xpbmVfbGluZWFyX2JsZW5kIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczIsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMzLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI0OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjU7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNjsKLSAgb3JjX2ludDggdmFyMzU7Ci0gIG9yY19pbnQ4IHZhcjM2OwotICBvcmNfaW50OCB2YXIzNzsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQgKF9faTM4Nl9fKQotICB2b2xhdGlsZSBvcmNfdW5pb24xNiB2YXIzODsKLSNlbHNlCi0gIG9yY191bmlvbjE2IHZhcjM4OwotI2VuZGlmCi0gIG9yY19pbnQ4IHZhcjM5OwotICBvcmNfdW5pb24xNiB2YXI0MDsKLSAgb3JjX3VuaW9uMTYgdmFyNDE7Ci0gIG9yY191bmlvbjE2IHZhcjQyOwotICBvcmNfdW5pb24xNiB2YXI0MzsKLSAgb3JjX3VuaW9uMTYgdmFyNDQ7Ci0gIG9yY191bmlvbjE2IHZhcjQ1OwotICBvcmNfdW5pb24xNiB2YXI0NjsKLSAgb3JjX3VuaW9uMTYgdmFyNDc7Ci0KLSAgcHRyMCA9IChvcmNfaW50OCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfaW50OCAqKSBzMTsKLSAgcHRyNSA9IChvcmNfaW50OCAqKSBzMjsKLSAgcHRyNiA9IChvcmNfaW50OCAqKSBzMzsKLQotICAvKiA5OiBsb2FkcHcgKi8KLSAgdmFyMzguaSA9IChpbnQpIDB4MDAwMDAwMDI7ICAgLyogMiBvciA5Ljg4MTMxZS0zMjRmICovCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRiICovCi0gICAgdmFyMzUgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvbnZ1YncgKi8KLSAgICB2YXI0MC5pID0gKG9yY191aW50OCkgdmFyMzU7Ci0gICAgLyogMjogbG9hZGIgKi8KLSAgICB2YXIzNiA9IHB0cjVbaV07Ci0gICAgLyogMzogY29udnVidyAqLwotICAgIHZhcjQxLmkgPSAob3JjX3VpbnQ4KSB2YXIzNjsKLSAgICAvKiA0OiBsb2FkYiAqLwotICAgIHZhcjM3ID0gcHRyNltpXTsKLSAgICAvKiA1OiBjb252dWJ3ICovCi0gICAgdmFyNDIuaSA9IChvcmNfdWludDgpIHZhcjM3OwotICAgIC8qIDY6IGFkZHcgKi8KLSAgICB2YXI0My5pID0gdmFyNDAuaSArIHZhcjQxLmk7Ci0gICAgLyogNzogYWRkdyAqLwotICAgIHZhcjQ0LmkgPSB2YXI0Mi5pICsgdmFyNDIuaTsKLSAgICAvKiA4OiBhZGR3ICovCi0gICAgdmFyNDUuaSA9IHZhcjQzLmkgKyB2YXI0NC5pOwotICAgIC8qIDEwOiBhZGR3ICovCi0gICAgdmFyNDYuaSA9IHZhcjQ1LmkgKyB2YXIzOC5pOwotICAgIC8qIDExOiBzaHJzdyAqLwotICAgIHZhcjQ3LmkgPSB2YXI0Ni5pID4+IDI7Ci0gICAgLyogMTI6IGNvbnZzdXN3YiAqLwotICAgIHZhcjM5ID0gT1JDX0NMQU1QX1VCICh2YXI0Ny5pKTsKLSAgICAvKiAxMzogc3RvcmViICovCi0gICAgcHRyMFtpXSA9IHZhcjM5OwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX2RlaW50ZXJsYWNlX2xpbmVfbGluZWFyX2JsZW5kIChPcmNFeGVjdXRvciAqIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI0OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjU7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNjsKLSAgb3JjX2ludDggdmFyMzU7Ci0gIG9yY19pbnQ4IHZhcjM2OwotICBvcmNfaW50OCB2YXIzNzsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQgKF9faTM4Nl9fKQotICB2b2xhdGlsZSBvcmNfdW5pb24xNiB2YXIzODsKLSNlbHNlCi0gIG9yY191bmlvbjE2IHZhcjM4OwotI2VuZGlmCi0gIG9yY19pbnQ4IHZhcjM5OwotICBvcmNfdW5pb24xNiB2YXI0MDsKLSAgb3JjX3VuaW9uMTYgdmFyNDE7Ci0gIG9yY191bmlvbjE2IHZhcjQyOwotICBvcmNfdW5pb24xNiB2YXI0MzsKLSAgb3JjX3VuaW9uMTYgdmFyNDQ7Ci0gIG9yY191bmlvbjE2IHZhcjQ1OwotICBvcmNfdW5pb24xNiB2YXI0NjsKLSAgb3JjX3VuaW9uMTYgdmFyNDc7Ci0KLSAgcHRyMCA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzBdOwotICBwdHI0ID0gKG9yY19pbnQ4ICopIGV4LT5hcnJheXNbNF07Ci0gIHB0cjUgPSAob3JjX2ludDggKikgZXgtPmFycmF5c1s1XTsKLSAgcHRyNiA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzZdOwotCi0gIC8qIDk6IGxvYWRwdyAqLwotICB2YXIzOC5pID0gKGludCkgMHgwMDAwMDAwMjsgICAvKiAyIG9yIDkuODgxMzFlLTMyNGYgKi8KLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGIgKi8KLSAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgLyogMTogY29udnVidyAqLwotICAgIHZhcjQwLmkgPSAob3JjX3VpbnQ4KSB2YXIzNTsKLSAgICAvKiAyOiBsb2FkYiAqLwotICAgIHZhcjM2ID0gcHRyNVtpXTsKLSAgICAvKiAzOiBjb252dWJ3ICovCi0gICAgdmFyNDEuaSA9IChvcmNfdWludDgpIHZhcjM2OwotICAgIC8qIDQ6IGxvYWRiICovCi0gICAgdmFyMzcgPSBwdHI2W2ldOwotICAgIC8qIDU6IGNvbnZ1YncgKi8KLSAgICB2YXI0Mi5pID0gKG9yY191aW50OCkgdmFyMzc7Ci0gICAgLyogNjogYWRkdyAqLwotICAgIHZhcjQzLmkgPSB2YXI0MC5pICsgdmFyNDEuaTsKLSAgICAvKiA3OiBhZGR3ICovCi0gICAgdmFyNDQuaSA9IHZhcjQyLmkgKyB2YXI0Mi5pOwotICAgIC8qIDg6IGFkZHcgKi8KLSAgICB2YXI0NS5pID0gdmFyNDMuaSArIHZhcjQ0Lmk7Ci0gICAgLyogMTA6IGFkZHcgKi8KLSAgICB2YXI0Ni5pID0gdmFyNDUuaSArIHZhcjM4Lmk7Ci0gICAgLyogMTE6IHNocnN3ICovCi0gICAgdmFyNDcuaSA9IHZhcjQ2LmkgPj4gMjsKLSAgICAvKiAxMjogY29udnN1c3diICovCi0gICAgdmFyMzkgPSBPUkNfQ0xBTVBfVUIgKHZhcjQ3LmkpOwotICAgIC8qIDEzOiBzdG9yZWIgKi8KLSAgICBwdHIwW2ldID0gdmFyMzk7Ci0gIH0KLQotfQotCi12b2lkCi1kZWludGVybGFjZV9saW5lX2xpbmVhcl9ibGVuZCAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMywgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCAyOSwgMTAwLCAxMDEsIDEwNSwgMTEwLCAxMTYsIDEwMSwgMTE0LCAxMDgsIDk3LCA5OSwgMTAxLCA5NSwgMTA4LAotICAgICAgICAxMDUsIDExMCwgMTAxLCA5NSwgMTA4LCAxMDUsIDExMCwgMTAxLCA5NywgMTE0LCA5NSwgOTgsIDEwOCwgMTAxLCAxMTAsCi0gICAgICAgICAgICAxMDAsCi0gICAgICAgIDExLCAxLCAxLCAxMiwgMSwgMSwgMTIsIDEsIDEsIDEyLCAxLCAxLCAxNCwgMiwgMiwgMCwKLSAgICAgICAgMCwgMCwgMjAsIDIsIDIwLCAyLCAyMCwgMiwgMTUwLCAzMiwgNCwgMTUwLCAzMywgNSwgMTUwLCAzNCwKLSAgICAgICAgNiwgNzAsIDMyLCAzMiwgMzMsIDcwLCAzNCwgMzQsIDM0LCA3MCwgMzIsIDMyLCAzNCwgNzAsIDMyLCAzMiwKLSAgICAgICAgMTYsIDk0LCAzMiwgMzIsIDE2LCAxNjAsIDAsIDMyLCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9kZWludGVybGFjZV9saW5lX2xpbmVhcl9ibGVuZCk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiZGVpbnRlcmxhY2VfbGluZV9saW5lYXJfYmxlbmQiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsCi0gICAgICAgICAgX2JhY2t1cF9kZWludGVybGFjZV9saW5lX2xpbmVhcl9ibGVuZCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDEsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgMSwgInMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCAxLCAiczIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDEsICJzMyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAyLCAweDAwMDAwMDAyLCAiYzEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDIsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMiwgInQyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAyLCAidDMiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfUzIsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ1YnciLCAwLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1MzLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhZGR3IiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYWRkdyIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHciLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QzLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhZGR3IiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9DMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2hyc3ciLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0MxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252c3Vzd2IiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLAotICAgICAgICAgIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMl0gPSAodm9pZCAqKSBzMjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MzXSA9ICh2b2lkICopIHMzOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiBkZWludGVybGFjZV9saW5lX2dyZWVkeSAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi1kZWludGVybGFjZV9saW5lX2dyZWVkeSAob3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLAotICAgIGNvbnN0IG9yY191aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMyLAotICAgIGNvbnN0IG9yY191aW50OCAqIE9SQ19SRVNUUklDVCBzMywgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHM0LAotICAgIGludCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI1OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjY7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNzsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQgKF9faTM4Nl9fKQotICB2b2xhdGlsZSBvcmNfaW50OCB2YXI0NDsKLSNlbHNlCi0gIG9yY19pbnQ4IHZhcjQ0OwotI2VuZGlmCi0gIG9yY19pbnQ4IHZhcjQ1OwotICBvcmNfaW50OCB2YXI0NjsKLSAgb3JjX2ludDggdmFyNDc7Ci0gIG9yY19pbnQ4IHZhcjQ4OwotICBvcmNfaW50OCB2YXI0OTsKLSAgb3JjX2ludDggdmFyNTA7Ci0gIG9yY19pbnQ4IHZhcjUxOwotICBvcmNfaW50OCB2YXI1MjsKLSAgb3JjX2ludDggdmFyNTM7Ci0gIG9yY19pbnQ4IHZhcjU0OwotICBvcmNfaW50OCB2YXI1NTsKLSAgb3JjX2ludDggdmFyNTY7Ci0gIG9yY19pbnQ4IHZhcjU3OwotICBvcmNfaW50OCB2YXI1ODsKLSAgb3JjX2ludDggdmFyNTk7Ci0gIG9yY19pbnQ4IHZhcjYwOwotICBvcmNfaW50OCB2YXI2MTsKLSAgb3JjX2ludDggdmFyNjI7Ci0gIG9yY19pbnQ4IHZhcjYzOwotICBvcmNfaW50OCB2YXI2NDsKLSAgb3JjX2ludDggdmFyNjU7Ci0gIG9yY19pbnQ4IHZhcjY2OwotICBvcmNfaW50OCB2YXI2NzsKLSAgb3JjX2ludDggdmFyNjg7Ci0KLSAgcHRyMCA9IChvcmNfaW50OCAqKSBkMTsKLSAgcHRyNCA9IChvcmNfaW50OCAqKSBzMTsKLSAgcHRyNSA9IChvcmNfaW50OCAqKSBzMjsKLSAgcHRyNiA9IChvcmNfaW50OCAqKSBzMzsKLSAgcHRyNyA9IChvcmNfaW50OCAqKSBzNDsKLQotICAvKiAxMTogbG9hZHBiICovCi0gIHZhcjQ0ID0gKGludCkgMHgwMDAwMDA4MDsgICAgIC8qIDEyOCBvciA2LjMyNDA0ZS0zMjJmICovCi0gIC8qIDIwOiBsb2FkcGIgKi8KLSAgdmFyNDUgPSBwMTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgLyogMDogbG9hZGIgKi8KLSAgICB2YXI0NyA9IHB0cjRbaV07Ci0gICAgLyogMTogbG9hZGIgKi8KLSAgICB2YXI0OCA9IHB0cjdbaV07Ci0gICAgLyogMjogbG9hZGIgKi8KLSAgICB2YXI0OSA9IHB0cjZbaV07Ci0gICAgLyogMzogbG9hZGIgKi8KLSAgICB2YXI1MCA9IHB0cjVbaV07Ci0gICAgLyogNDogYXZndWIgKi8KLSAgICB2YXI1MSA9ICgob3JjX3VpbnQ4KSB2YXI1MCArIChvcmNfdWludDgpIHZhcjQ5ICsgMSkgPj4gMTsKLSAgICAvKiA1OiBtYXh1YiAqLwotICAgIHZhcjUyID0gT1JDX01BWCAoKG9yY191aW50OCkgdmFyNDcsIChvcmNfdWludDgpIHZhcjUxKTsKLSAgICAvKiA2OiBtaW51YiAqLwotICAgIHZhcjUzID0gT1JDX01JTiAoKG9yY191aW50OCkgdmFyNDcsIChvcmNfdWludDgpIHZhcjUxKTsKLSAgICAvKiA3OiBzdWJiICovCi0gICAgdmFyNTQgPSB2YXI1MiAtIHZhcjUzOwotICAgIC8qIDg6IG1heHViICovCi0gICAgdmFyNTUgPSBPUkNfTUFYICgob3JjX3VpbnQ4KSB2YXI0OCwgKG9yY191aW50OCkgdmFyNTEpOwotICAgIC8qIDk6IG1pbnViICovCi0gICAgdmFyNTYgPSBPUkNfTUlOICgob3JjX3VpbnQ4KSB2YXI0OCwgKG9yY191aW50OCkgdmFyNTEpOwotICAgIC8qIDEwOiBzdWJiICovCi0gICAgdmFyNTcgPSB2YXI1NSAtIHZhcjU2OwotICAgIC8qIDEyOiB4b3JiICovCi0gICAgdmFyNTggPSB2YXI1NCBeIHZhcjQ0OwotICAgIC8qIDEzOiB4b3JiICovCi0gICAgdmFyNTkgPSB2YXI1NyBeIHZhcjQ0OwotICAgIC8qIDE0OiBjbXBndHNiICovCi0gICAgdmFyNjAgPSAodmFyNTggPiB2YXI1OSkgPyAofjApIDogMDsKLSAgICAvKiAxNTogYW5kYiAqLwotICAgIHZhcjYxID0gdmFyNDggJiB2YXI2MDsKLSAgICAvKiAxNjogYW5kbmIgKi8KLSAgICB2YXI2MiA9ICh+dmFyNjApICYgdmFyNDc7Ci0gICAgLyogMTc6IG9yYiAqLwotICAgIHZhcjYzID0gdmFyNjEgfCB2YXI2MjsKLSAgICAvKiAxODogbWF4dWIgKi8KLSAgICB2YXI2NCA9IE9SQ19NQVggKChvcmNfdWludDgpIHZhcjUwLCAob3JjX3VpbnQ4KSB2YXI0OSk7Ci0gICAgLyogMTk6IG1pbnViICovCi0gICAgdmFyNjUgPSBPUkNfTUlOICgob3JjX3VpbnQ4KSB2YXI1MCwgKG9yY191aW50OCkgdmFyNDkpOwotICAgIC8qIDIxOiBhZGR1c2IgKi8KLSAgICB2YXI2NiA9IE9SQ19DTEFNUF9VQiAoKG9yY191aW50OCkgdmFyNjQgKyAob3JjX3VpbnQ4KSB2YXI0NSk7Ci0gICAgLyogMjI6IHN1YnVzYiAqLwotICAgIHZhcjY3ID0gT1JDX0NMQU1QX1VCICgob3JjX3VpbnQ4KSB2YXI2NSAtIChvcmNfdWludDgpIHZhcjQ1KTsKLSAgICAvKiAyMzogbWludWIgKi8KLSAgICB2YXI2OCA9IE9SQ19NSU4gKChvcmNfdWludDgpIHZhcjYzLCAob3JjX3VpbnQ4KSB2YXI2Nik7Ci0gICAgLyogMjQ6IG1heHViICovCi0gICAgdmFyNDYgPSBPUkNfTUFYICgob3JjX3VpbnQ4KSB2YXI2OCwgKG9yY191aW50OCkgdmFyNjcpOwotICAgIC8qIDI1OiBzdG9yZWIgKi8KLSAgICBwdHIwW2ldID0gdmFyNDY7Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfZGVpbnRlcmxhY2VfbGluZV9ncmVlZHkgKE9yY0V4ZWN1dG9yICogT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IG4gPSBleC0+bjsKLSAgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNTsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI2OwotICBjb25zdCBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjc7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkIChfX2kzODZfXykKLSAgdm9sYXRpbGUgb3JjX2ludDggdmFyNDQ7Ci0jZWxzZQotICBvcmNfaW50OCB2YXI0NDsKLSNlbmRpZgotICBvcmNfaW50OCB2YXI0NTsKLSAgb3JjX2ludDggdmFyNDY7Ci0gIG9yY19pbnQ4IHZhcjQ3OwotICBvcmNfaW50OCB2YXI0ODsKLSAgb3JjX2ludDggdmFyNDk7Ci0gIG9yY19pbnQ4IHZhcjUwOwotICBvcmNfaW50OCB2YXI1MTsKLSAgb3JjX2ludDggdmFyNTI7Ci0gIG9yY19pbnQ4IHZhcjUzOwotICBvcmNfaW50OCB2YXI1NDsKLSAgb3JjX2ludDggdmFyNTU7Ci0gIG9yY19pbnQ4IHZhcjU2OwotICBvcmNfaW50OCB2YXI1NzsKLSAgb3JjX2ludDggdmFyNTg7Ci0gIG9yY19pbnQ4IHZhcjU5OwotICBvcmNfaW50OCB2YXI2MDsKLSAgb3JjX2ludDggdmFyNjE7Ci0gIG9yY19pbnQ4IHZhcjYyOwotICBvcmNfaW50OCB2YXI2MzsKLSAgb3JjX2ludDggdmFyNjQ7Ci0gIG9yY19pbnQ4IHZhcjY1OwotICBvcmNfaW50OCB2YXI2NjsKLSAgb3JjX2ludDggdmFyNjc7Ci0gIG9yY19pbnQ4IHZhcjY4OwotCi0gIHB0cjAgPSAob3JjX2ludDggKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzRdOwotICBwdHI1ID0gKG9yY19pbnQ4ICopIGV4LT5hcnJheXNbNV07Ci0gIHB0cjYgPSAob3JjX2ludDggKikgZXgtPmFycmF5c1s2XTsKLSAgcHRyNyA9IChvcmNfaW50OCAqKSBleC0+YXJyYXlzWzddOwotCi0gIC8qIDExOiBsb2FkcGIgKi8KLSAgdmFyNDQgPSAoaW50KSAweDAwMDAwMDgwOyAgICAgLyogMTI4IG9yIDYuMzI0MDRlLTMyMmYgKi8KLSAgLyogMjA6IGxvYWRwYiAqLwotICB2YXI0NSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkYiAqLwotICAgIHZhcjQ3ID0gcHRyNFtpXTsKLSAgICAvKiAxOiBsb2FkYiAqLwotICAgIHZhcjQ4ID0gcHRyN1tpXTsKLSAgICAvKiAyOiBsb2FkYiAqLwotICAgIHZhcjQ5ID0gcHRyNltpXTsKLSAgICAvKiAzOiBsb2FkYiAqLwotICAgIHZhcjUwID0gcHRyNVtpXTsKLSAgICAvKiA0OiBhdmd1YiAqLwotICAgIHZhcjUxID0gKChvcmNfdWludDgpIHZhcjUwICsgKG9yY191aW50OCkgdmFyNDkgKyAxKSA+PiAxOwotICAgIC8qIDU6IG1heHViICovCi0gICAgdmFyNTIgPSBPUkNfTUFYICgob3JjX3VpbnQ4KSB2YXI0NywgKG9yY191aW50OCkgdmFyNTEpOwotICAgIC8qIDY6IG1pbnViICovCi0gICAgdmFyNTMgPSBPUkNfTUlOICgob3JjX3VpbnQ4KSB2YXI0NywgKG9yY191aW50OCkgdmFyNTEpOwotICAgIC8qIDc6IHN1YmIgKi8KLSAgICB2YXI1NCA9IHZhcjUyIC0gdmFyNTM7Ci0gICAgLyogODogbWF4dWIgKi8KLSAgICB2YXI1NSA9IE9SQ19NQVggKChvcmNfdWludDgpIHZhcjQ4LCAob3JjX3VpbnQ4KSB2YXI1MSk7Ci0gICAgLyogOTogbWludWIgKi8KLSAgICB2YXI1NiA9IE9SQ19NSU4gKChvcmNfdWludDgpIHZhcjQ4LCAob3JjX3VpbnQ4KSB2YXI1MSk7Ci0gICAgLyogMTA6IHN1YmIgKi8KLSAgICB2YXI1NyA9IHZhcjU1IC0gdmFyNTY7Ci0gICAgLyogMTI6IHhvcmIgKi8KLSAgICB2YXI1OCA9IHZhcjU0IF4gdmFyNDQ7Ci0gICAgLyogMTM6IHhvcmIgKi8KLSAgICB2YXI1OSA9IHZhcjU3IF4gdmFyNDQ7Ci0gICAgLyogMTQ6IGNtcGd0c2IgKi8KLSAgICB2YXI2MCA9ICh2YXI1OCA+IHZhcjU5KSA/ICh+MCkgOiAwOwotICAgIC8qIDE1OiBhbmRiICovCi0gICAgdmFyNjEgPSB2YXI0OCAmIHZhcjYwOwotICAgIC8qIDE2OiBhbmRuYiAqLwotICAgIHZhcjYyID0gKH52YXI2MCkgJiB2YXI0NzsKLSAgICAvKiAxNzogb3JiICovCi0gICAgdmFyNjMgPSB2YXI2MSB8IHZhcjYyOwotICAgIC8qIDE4OiBtYXh1YiAqLwotICAgIHZhcjY0ID0gT1JDX01BWCAoKG9yY191aW50OCkgdmFyNTAsIChvcmNfdWludDgpIHZhcjQ5KTsKLSAgICAvKiAxOTogbWludWIgKi8KLSAgICB2YXI2NSA9IE9SQ19NSU4gKChvcmNfdWludDgpIHZhcjUwLCAob3JjX3VpbnQ4KSB2YXI0OSk7Ci0gICAgLyogMjE6IGFkZHVzYiAqLwotICAgIHZhcjY2ID0gT1JDX0NMQU1QX1VCICgob3JjX3VpbnQ4KSB2YXI2NCArIChvcmNfdWludDgpIHZhcjQ1KTsKLSAgICAvKiAyMjogc3VidXNiICovCi0gICAgdmFyNjcgPSBPUkNfQ0xBTVBfVUIgKChvcmNfdWludDgpIHZhcjY1IC0gKG9yY191aW50OCkgdmFyNDUpOwotICAgIC8qIDIzOiBtaW51YiAqLwotICAgIHZhcjY4ID0gT1JDX01JTiAoKG9yY191aW50OCkgdmFyNjMsIChvcmNfdWludDgpIHZhcjY2KTsKLSAgICAvKiAyNDogbWF4dWIgKi8KLSAgICB2YXI0NiA9IE9SQ19NQVggKChvcmNfdWludDgpIHZhcjY4LCAob3JjX3VpbnQ4KSB2YXI2Nyk7Ci0gICAgLyogMjU6IHN0b3JlYiAqLwotICAgIHB0cjBbaV0gPSB2YXI0NjsKLSAgfQotCi19Ci0KLXZvaWQKLWRlaW50ZXJsYWNlX2xpbmVfZ3JlZWR5IChvcmNfdWludDggKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBjb25zdCBvcmNfdWludDggKiBPUkNfUkVTVFJJQ1QgczIsCi0gICAgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMzLCBjb25zdCBvcmNfdWludDggKiBPUkNfUkVTVFJJQ1QgczQsCi0gICAgaW50IHAxLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDIzLCAxMDAsIDEwMSwgMTA1LCAxMTAsIDExNiwgMTAxLCAxMTQsIDEwOCwgOTcsIDk5LCAxMDEsIDk1LCAxMDgsCi0gICAgICAgIDEwNSwgMTEwLCAxMDEsIDk1LCAxMDMsIDExNCwgMTAxLCAxMDEsIDEwMCwgMTIxLCAxMSwgMSwgMSwgMTIsIDEsIDEsCi0gICAgICAgIDEyLCAxLCAxLCAxMiwgMSwgMSwgMTIsIDEsIDEsIDE0LCAxLCAxMjgsIDAsIDAsIDAsIDE2LAotICAgICAgICAxLCAyMCwgMSwgMjAsIDEsIDIwLCAxLCAyMCwgMSwgMjAsIDEsIDIwLCAxLCAyMCwgMSwgMjAsCi0gICAgICAgIDEsIDIwLCAxLCAyMCwgMSwgMjAsIDEsIDIwLCAxLCA0MywgMzIsIDQsIDQzLCAzMywgNywgNDMsCi0gICAgICAgIDM0LCA2LCA0MywgMzUsIDUsIDM5LCAzNiwgMzUsIDM0LCA1MywgMzksIDMyLCAzNiwgNTUsIDQwLCAzMiwKLSAgICAgICAgMzYsIDY1LCAzNywgMzksIDQwLCA1MywgMzksIDMzLCAzNiwgNTUsIDQwLCAzMywgMzYsIDY1LCAzOCwgMzksCi0gICAgICAgIDQwLCA2OCwgMzcsIDM3LCAxNiwgNjgsIDM4LCAzOCwgMTYsIDQxLCA0MCwgMzcsIDM4LCAzNiwgMzksIDMzLAotICAgICAgICA0MCwgMzcsIDQwLCA0MCwgMzIsIDU5LCA0MSwgMzksIDQwLCA1MywgNDMsIDM1LCAzNCwgNTUsIDQyLCAzNSwKLSAgICAgICAgMzQsIDM1LCA0MywgNDMsIDI0LCA2NywgNDIsIDQyLCAyNCwgNTUsIDQxLCA0MSwgNDMsIDUzLCAwLCA0MSwKLSAgICAgICAgNDIsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF9kZWludGVybGFjZV9saW5lX2dyZWVkeSk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAiZGVpbnRlcmxhY2VfbGluZV9ncmVlZHkiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfZGVpbnRlcmxhY2VfbGluZV9ncmVlZHkpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCAxLCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDEsICJzMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgMSwgInMyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCAxLCAiczMiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDEsICJzNCIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAxLCAweDAwMDAwMDgwLCAiYzEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXIgKHAsIDEsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAxLCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDEsICJ0MyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQ0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAxLCAidDUiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDEsICJ0NiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQ3Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAxLCAidDgiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDEsICJ0OSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQxMCIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQxMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQxMiIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImxvYWRiIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibG9hZGIiLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1M0LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJsb2FkYiIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfUzMsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImxvYWRiIiwgMCwgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9TMiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYXZndWIiLCAwLCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1Q0LCBPUkNfVkFSX1QzLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtYXh1YiIsIDAsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDUsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1pbnViIiwgMCwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UNSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic3ViYiIsIDAsIE9SQ19WQVJfVDYsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDksCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1heHViIiwgMCwgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UNSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibWludWIiLCAwLCBPUkNfVkFSX1Q5LCBPUkNfVkFSX1QyLCBPUkNfVkFSX1Q1LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzdWJiIiwgMCwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9UOSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAieG9yYiIsIDAsIE9SQ19WQVJfVDYsIE9SQ19WQVJfVDYsIE9SQ19WQVJfQzEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInhvcmIiLCAwLCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q3LCBPUkNfVkFSX0MxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjbXBndHNiIiwgMCwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYW5kYiIsIDAsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDksCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFuZG5iIiwgMCwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAib3JiIiwgMCwgT1JDX1ZBUl9UMTAsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDksCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1heHViIiwgMCwgT1JDX1ZBUl9UMTIsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1pbnViIiwgMCwgT1JDX1ZBUl9UMTEsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHVzYiIsIDAsIE9SQ19WQVJfVDEyLCBPUkNfVkFSX1QxMiwKLSAgICAgICAgICBPUkNfVkFSX1AxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic3VidXNiIiwgMCwgT1JDX1ZBUl9UMTEsIE9SQ19WQVJfVDExLAotICAgICAgICAgIE9SQ19WQVJfUDEsIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtaW51YiIsIDAsIE9SQ19WQVJfVDEwLCBPUkNfVkFSX1QxMCwKLSAgICAgICAgICBPUkNfVkFSX1QxMiwgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm1heHViIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMTAsIE9SQ19WQVJfVDExLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMl0gPSAodm9pZCAqKSBzMjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MzXSA9ICh2b2lkICopIHMzOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzRdID0gKHZvaWQgKikgczQ7Ci0gIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSBwMTsKLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLWRpc3QuaCBiL2dzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGJjOTAxLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUtZGlzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotCi0vKiBhdXRvZ2VuZXJhdGVkIGZyb20gdHZ0aW1lLm9yYyAqLwotCi0jaWZuZGVmIF9UVlRJTUVfSF8KLSNkZWZpbmUgX1RWVElNRV9IXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLQotCi0jaWZuZGVmIF9PUkNfSU5URUdFUl9UWVBFREVGU18KLSNkZWZpbmUgX09SQ19JTlRFR0VSX1RZUEVERUZTXwotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci10eXBlZGVmIGludDhfdCBvcmNfaW50ODsKLXR5cGVkZWYgaW50MTZfdCBvcmNfaW50MTY7Ci10eXBlZGVmIGludDMyX3Qgb3JjX2ludDMyOwotdHlwZWRlZiBpbnQ2NF90IG9yY19pbnQ2NDsKLXR5cGVkZWYgdWludDhfdCBvcmNfdWludDg7Ci10eXBlZGVmIHVpbnQxNl90IG9yY191aW50MTY7Ci10eXBlZGVmIHVpbnQzMl90IG9yY191aW50MzI7Ci10eXBlZGVmIHVpbnQ2NF90IG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSBVSU5UNjRfQyh4KQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLXR5cGVkZWYgc2lnbmVkIF9faW50OCBvcmNfaW50ODsKLXR5cGVkZWYgc2lnbmVkIF9faW50MTYgb3JjX2ludDE2OwotdHlwZWRlZiBzaWduZWQgX19pbnQzMiBvcmNfaW50MzI7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDY0IG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ4IG9yY191aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQxNiBvcmNfdWludDE2OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIG9yY191aW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVaTY0KQotI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKLSNlbHNlCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci10eXBlZGVmIHNpZ25lZCBjaGFyIG9yY19pbnQ4OwotdHlwZWRlZiBzaG9ydCBvcmNfaW50MTY7Ci10eXBlZGVmIGludCBvcmNfaW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgb3JjX3VpbnQ4OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBvcmNfdWludDE2OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgb3JjX3VpbnQzMjsKLSNpZiBJTlRfTUFYID09IExPTkdfTUFYCi10eXBlZGVmIGxvbmcgbG9uZyBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VMTCkKLSNlbHNlCi10eXBlZGVmIGxvbmcgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVUwpCi0jZW5kaWYKLSNlbmRpZgotdHlwZWRlZiB1bmlvbiB7IG9yY19pbnQxNiBpOyBvcmNfaW50OCB4MlsyXTsgfSBvcmNfdW5pb24xNjsKLXR5cGVkZWYgdW5pb24geyBvcmNfaW50MzIgaTsgZmxvYXQgZjsgb3JjX2ludDE2IHgyWzJdOyBvcmNfaW50OCB4NFs0XTsgfSBvcmNfdW5pb24zMjsKLXR5cGVkZWYgdW5pb24geyBvcmNfaW50NjQgaTsgZG91YmxlIGY7IG9yY19pbnQzMiB4MlsyXTsgZmxvYXQgeDJmWzJdOyBvcmNfaW50MTYgeDRbNF07IH0gb3JjX3VuaW9uNjQ7Ci0jZW5kaWYKLSNpZm5kZWYgT1JDX1JFU1RSSUNUCi0jaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSNkZWZpbmUgT1JDX1JFU1RSSUNUIHJlc3RyaWN0Ci0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSA0Ci0jZGVmaW5lIE9SQ19SRVNUUklDVCBfX3Jlc3RyaWN0X18KLSNlbHNlCi0jZGVmaW5lIE9SQ19SRVNUUklDVAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBPUkNfSU5URVJOQUwKLSNpZiBkZWZpbmVkKF9fU1VOUFJPX0MpICYmIChfX1NVTlBST19DID49IDB4NTkwKQotI2RlZmluZSBPUkNfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQotI2VsaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU1MCkKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9faGlkZGVuCi0jZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbHNlCi0jZGVmaW5lIE9SQ19JTlRFUk5BTAotI2VuZGlmCi0jZW5kaWYKLQotdm9pZCBkZWludGVybGFjZV9saW5lX3ZmaXIgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczIsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMywgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHM0LCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczUsIGludCBuKTsKLXZvaWQgZGVpbnRlcmxhY2VfbGluZV9saW5lYXIgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczIsIGludCBuKTsKLXZvaWQgZGVpbnRlcmxhY2VfbGluZV9saW5lYXJfYmxlbmQgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczIsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMywgaW50IG4pOwotdm9pZCBkZWludGVybGFjZV9saW5lX2dyZWVkeSAob3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBvcmNfdWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGNvbnN0IG9yY191aW50OCAqIE9SQ19SRVNUUklDVCBzMiwgY29uc3Qgb3JjX3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMzLCBjb25zdCBvcmNfdWludDggKiBPUkNfUkVTVFJJQ1QgczQsIGludCBwMSwgaW50IG4pOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS5vcmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLm9yYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQyMTdlNy4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLm9yYworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0KLS5mdW5jdGlvbiBkZWludGVybGFjZV9saW5lX3ZmaXIKLS5kZXN0IDEgZDEgZ3VpbnQ4Ci0uc291cmNlIDEgczEgZ3VpbnQ4Ci0uc291cmNlIDEgczIgZ3VpbnQ4Ci0uc291cmNlIDEgczMgZ3VpbnQ4Ci0uc291cmNlIDEgczQgZ3VpbnQ4Ci0uc291cmNlIDEgczUgZ3VpbnQ4Ci0udGVtcCAyIHQxCi0udGVtcCAyIHQyCi0udGVtcCAyIHQzCi0KLWNvbnZ1YncgdDEsIHMxCi1jb252dWJ3IHQyLCBzNQotYWRkdyB0MSwgdDEsIHQyCi1jb252dWJ3IHQyLCBzMgotY29udnVidyB0MywgczQKLWFkZHcgdDIsIHQyLCB0Mwotc2hsdyB0MiwgdDIsIDIKLWNvbnZ1YncgdDMsIHMzCi1zaGx3IHQzLCB0MywgMQotc3VidyB0MiwgdDIsIHQxCi1hZGR3IHQyLCB0MiwgdDMKLWFkZHcgdDIsIHQyLCA0Ci1zaHJzdyB0MiwgdDIsIDMKLWNvbnZzdXN3YiBkMSwgdDIKLQotCi0uZnVuY3Rpb24gZGVpbnRlcmxhY2VfbGluZV9saW5lYXIKLS5kZXN0IDEgZDEgZ3VpbnQ4Ci0uc291cmNlIDEgczEgZ3VpbnQ4Ci0uc291cmNlIDEgczIgZ3VpbnQ4Ci0KLWF2Z3ViIGQxLCBzMSwgczIKLQotCi0uZnVuY3Rpb24gZGVpbnRlcmxhY2VfbGluZV9saW5lYXJfYmxlbmQKLS5kZXN0IDEgZDEgZ3VpbnQ4Ci0uc291cmNlIDEgczEgZ3VpbnQ4Ci0uc291cmNlIDEgczIgZ3VpbnQ4Ci0uc291cmNlIDEgczMgZ3VpbnQ4Ci0udGVtcCAyIHQxCi0udGVtcCAyIHQyCi0udGVtcCAyIHQzCi0KLWNvbnZ1YncgdDEsIHMxCi1jb252dWJ3IHQyLCBzMgotY29udnVidyB0MywgczMKLWFkZHcgdDEsIHQxLCB0MgotYWRkdyB0MywgdDMsIHQzCi1hZGR3IHQxLCB0MSwgdDMKLWFkZHcgdDEsIHQxLCAyCi1zaHJzdyB0MSwgdDEsIDIKLWNvbnZzdXN3YiBkMSwgdDEKLQotCi0uZnVuY3Rpb24gZGVpbnRlcmxhY2VfbGluZV9ncmVlZHkKLS5kZXN0IDEgZDEKLS5zb3VyY2UgMSBtMAotLnNvdXJjZSAxIHQxCi0uc291cmNlIDEgYjEKLS5zb3VyY2UgMSBtMgotLnBhcmFtIDEgbWF4X2NvbWIKLS50ZW1wIDEgdG0wCi0udGVtcCAxIHRtMgotLnRlbXAgMSB0YjEKLS50ZW1wIDEgdHQxCi0udGVtcCAxIGF2ZwotLnRlbXAgMSBsMl9kaWZmCi0udGVtcCAxIGxwMl9kaWZmCi0udGVtcCAxIHQyCi0udGVtcCAxIHQzCi0udGVtcCAxIGJlc3QKLS50ZW1wIDEgbWluCi0udGVtcCAxIG1heAotCi0KLWxvYWRiIHRtMCwgbTAKLWxvYWRiIHRtMiwgbTIKLQotbG9hZGIgdGIxLCBiMQotbG9hZGIgdHQxLCB0MQotYXZndWIgYXZnLCB0dDEsIHRiMQotCi1tYXh1YiB0MiwgdG0wLCBhdmcKLW1pbnViIHQzLCB0bTAsIGF2Zwotc3ViYiBsMl9kaWZmLCB0MiwgdDMKLQotbWF4dWIgdDIsIHRtMiwgYXZnCi1taW51YiB0MywgdG0yLCBhdmcKLXN1YmIgbHAyX2RpZmYsIHQyLCB0MwotCi14b3JiIGwyX2RpZmYsIGwyX2RpZmYsIDB4ODAKLXhvcmIgbHAyX2RpZmYsIGxwMl9kaWZmLCAweDgwCi1jbXBndHNiIHQzLCBsMl9kaWZmLCBscDJfZGlmZgotCi1hbmRiIHQyLCB0bTIsIHQzCi1hbmRuYiB0MywgdDMsIHRtMAotb3JiIGJlc3QsIHQyLCB0MwotCi1tYXh1YiBtYXgsIHR0MSwgdGIxCi1taW51YiBtaW4sIHR0MSwgdGIxCi1hZGR1c2IgbWF4LCBtYXgsIG1heF9jb21iCi1zdWJ1c2IgbWluLCBtaW4sIG1heF9jb21iCi1taW51YiBiZXN0LCBiZXN0LCBtYXgKLW1heHViIGQxLCBiZXN0LCBtaW4KLQotCi0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5LmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDRjZThiLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoKLSAqCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoYykgMjAwMCBUb20gQmFycnkgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBtbXguaCBwb3J0IGNvcHlyaWdodCAoYykgMjAwMiBCaWxseSBCaWdncyA8dmVrdG9yQGR1bWJ0ZXJtLm5ldD4uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBSZWxpY2Vuc2VkIGZvciBHU3RyZWFtZXIgZnJvbSBHUEwgdG8gTEdQTCB3aXRoIHBlcm1pdCBmcm9tIFRvbSBCYXJyeQotICogYW5kIEJpbGx5IEJpZ2dzLgotICogU2VlOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NzgKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJ0dnRpbWUuaCIKLQotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfTAkoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfTChvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0wpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9MX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfTCkpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0xfR0VUX0NMQVNTKG9iaikJKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0wsIEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5TENsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfTChvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0wsIEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5TCkpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0xfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9MLCBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUxDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0xfQ0FTVChvYmopCSgoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMKikob2JqKSkKLQotR1R5cGUgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kIHBhcmVudDsKLQotICBndWludCBtYXhfY29tYjsKLX0gR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMOwotCi10eXBlZGVmIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMQ2xhc3M7Ci0KLS8vIFRoaXMgaXMgYSBzaW1wbGUgbGlnaHR3ZWlnaHQgRGVJbnRlcmxhY2UgbWV0aG9kIHRoYXQgdXNlcyBsaXR0bGUgQ1BVIHRpbWUKLS8vIGJ1dCBnaXZlcyB2ZXJ5IGdvb2QgcmVzdWx0cyBmb3IgbG93IG9yIGludGVybWVkaXRlIG1vdGlvbi4KLS8vIEl0IGRlZmVycyBmcmFtZXMgYnkgb25lIGZpZWxkLCBidXQgdGhhdCBkb2VzIG5vdCBzZWVtIHRvIHByb2R1Y2Ugbm90aWNlYWJsZQotLy8gbGlwIHN5bmMgcHJvYmxlbXMuCi0vLwotLy8gVGhlIG1ldGhvZCB1c2VkIGlzIHRvIHRha2UgZWl0aGVyIHRoZSBvbGRlciBvciBuZXdlciB3ZWF2ZSBwaXhlbCBkZXBlbmRpbmcKLS8vIHVwb24gd2hpY2ggZ2l2ZSB0aGUgc21hbGxlciBjb21iIGZhY3RvciwgYW5kIHRoZW4gY2xpcCB0byBhdm9pZCBsYXJnZSBkYW1hZ2UKLS8vIHdoZW4gd3JvbmcuCi0vLwotLy8gSSdkIGludGVuZGVkIHRoaXMgdG8gYmUgcGFydCBvZiBhIGxhcmdlciBtb3JlIGVsYWJvcmF0ZSBtZXRob2QgYWRkZWQgdG8gCi0vLyBCbGVuZGVkIENsaXAgYnV0IHRoaXMgZ2l2ZSB0b28gZ29vZCByZXN1bHRzIGZvciB0aGUgQ1BVIHRvIGlnbm9yZSBoZXJlLgotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRlaW50ZXJsYWNlX2dyZWVkeV9pbnRlcnBvbGF0ZV9zY2FubGluZV9vcmMgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBndWludCBtYXhfY29tYiA9IEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0wgKHNlbGYpLT5tYXhfY29tYjsKLQotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMIHx8IHNjYW5saW5lcy0+bXAgPT0gTlVMTCkgewotICAgIGRlaW50ZXJsYWNlX2xpbmVfbGluZWFyIChvdXQsIHNjYW5saW5lcy0+dDAsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotICB9IGVsc2UgewotICAgIGRlaW50ZXJsYWNlX2xpbmVfZ3JlZWR5IChvdXQsIHNjYW5saW5lcy0+bTEsIHNjYW5saW5lcy0+dDAsIHNjYW5saW5lcy0+YjAsCi0gICAgICAgIHNjYW5saW5lcy0+bXAgPyBzY2FubGluZXMtPm1wIDogc2NhbmxpbmVzLT5tMSwgbWF4X2NvbWIsIHNpemUpOwotICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yY19wbGFuYXJfdSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QKLSAgICAqIHNlbGYsIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50Ci0gICAgc2l6ZSkKLXsKLSAgZ3VpbnQgbWF4X2NvbWIgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9MIChzZWxmKS0+bWF4X2NvbWI7Ci0KLSAgaWYgKHNjYW5saW5lcy0+bTEgPT0gTlVMTCB8fCBzY2FubGluZXMtPm1wID09IE5VTEwpIHsKLSAgICBkZWludGVybGFjZV9saW5lX2xpbmVhciAob3V0LCBzY2FubGluZXMtPnQwLCBzY2FubGluZXMtPmIwLCBzaXplKTsKLSAgfSBlbHNlIHsKLSAgICBkZWludGVybGFjZV9saW5lX2dyZWVkeSAob3V0LCBzY2FubGluZXMtPm0xLCBzY2FubGluZXMtPnQwLCBzY2FubGluZXMtPmIwLAotICAgICAgICBzY2FubGluZXMtPm1wID8gc2NhbmxpbmVzLT5tcCA6IHNjYW5saW5lcy0+bTEsIG1heF9jb21iLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRlaW50ZXJsYWNlX2dyZWVkeV9pbnRlcnBvbGF0ZV9zY2FubGluZV9vcmNfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kCi0gICAgKiBzZWxmLCBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludAotICAgIHNpemUpCi17Ci0gIGd1aW50IG1heF9jb21iID0gR1NUX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfTCAoc2VsZiktPm1heF9jb21iOwotCi0gIGlmIChzY2FubGluZXMtPm0xID09IE5VTEwgfHwgc2NhbmxpbmVzLT5tcCA9PSBOVUxMKSB7Ci0gICAgZGVpbnRlcmxhY2VfbGluZV9saW5lYXIgKG91dCwgc2NhbmxpbmVzLT50MCwgc2NhbmxpbmVzLT5iMCwgc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZGVpbnRlcmxhY2VfbGluZV9ncmVlZHkgKG91dCwgc2NhbmxpbmVzLT5tMSwgc2NhbmxpbmVzLT50MCwgc2NhbmxpbmVzLT5iMCwKLSAgICAgICAgc2NhbmxpbmVzLT5tcCA/IHNjYW5saW5lcy0+bXAgOiBzY2FubGluZXMtPm0xLCBtYXhfY29tYiwgc2l6ZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX2dyZWVkeV9jb3B5X3NjYW5saW5lIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2VfZ3JlZWR5X2NvcHlfc2NhbmxpbmVfcGxhbmFyX3UgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZV9wbGFuYXJfdiAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLAotICAgIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0wLCBzaXplKTsKLX0KLQotR19ERUZJTkVfVFlQRSAoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMLCBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9sLAotICAgIEdTVF9UWVBFX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0QpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9NQVhfQ09NQgotfTsKLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5TCAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0wgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01BWF9DT01COgotICAgICAgc2VsZi0+bWF4X2NvbWIgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMICpzZWxmID0gR1NUX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfTCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTUFYX0NPTUI6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2VsZi0+bWF4X2NvbWIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfY2xhc3NfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMQ2xhc3MgKgotICAgIGtsYXNzKQotewotICBHc3REZWludGVybGFjZU1ldGhvZENsYXNzICpkaW1fY2xhc3MgPSAoR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqZGlzbV9jbGFzcyA9Ci0gICAgICAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqKSBrbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9sX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfQ09NQiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LWNvbWIiLAotICAgICAgICAgICJNYXggY29tYiIsCi0gICAgICAgICAgIk1heCBDb21iIiwgMCwgMjU1LCAxNSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICBkaW1fY2xhc3MtPmZpZWxkc19yZXF1aXJlZCA9IDI7Ci0gIGRpbV9jbGFzcy0+bmFtZSA9ICJNb3Rpb24gQWRhcHRpdmU6IFNpbXBsZSBEZXRlY3Rpb24iOwotICBkaW1fY2xhc3MtPm5pY2sgPSAiZ3JlZWR5bCI7Ci0gIGRpbV9jbGFzcy0+bGF0ZW5jeSA9IDE7Ci0KLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1diA9Ci0gICAgICBkZWludGVybGFjZV9ncmVlZHlfaW50ZXJwb2xhdGVfc2NhbmxpbmVfb3JjOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV95dXkyID0KLSAgICAgIGRlaW50ZXJsYWNlX2dyZWVkeV9pbnRlcnBvbGF0ZV9zY2FubGluZV9vcmM7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l2eXUgPQotICAgICAgZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9Ci0gICAgICBkZWludGVybGFjZV9ncmVlZHlfaW50ZXJwb2xhdGVfc2NhbmxpbmVfb3JjOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hcmdiID0KLSAgICAgIGRlaW50ZXJsYWNlX2dyZWVkeV9pbnRlcnBvbGF0ZV9zY2FubGluZV9vcmM7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2FiZ3IgPQotICAgICAgZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9Ci0gICAgICBkZWludGVybGFjZV9ncmVlZHlfaW50ZXJwb2xhdGVfc2NhbmxpbmVfb3JjOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3JhID0KLSAgICAgIGRlaW50ZXJsYWNlX2dyZWVkeV9pbnRlcnBvbGF0ZV9zY2FubGluZV9vcmM7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3JnYiA9Ci0gICAgICBkZWludGVybGFjZV9ncmVlZHlfaW50ZXJwb2xhdGVfc2NhbmxpbmVfb3JjOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPQotICAgICAgZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3kgPQotICAgICAgZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3UgPQotICAgICAgZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yY19wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZGVpbnRlcmxhY2VfZ3JlZWR5X2ludGVycG9sYXRlX3NjYW5saW5lX29yY19wbGFuYXJfdjsKLQotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX2F5dXYgPSBkZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV95dXkyID0gZGVpbnRlcmxhY2VfZ3JlZWR5X2NvcHlfc2NhbmxpbmU7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX2dyZWVkeV9jb3B5X3NjYW5saW5lOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3V5dnkgPSBkZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9hcmdiID0gZGVpbnRlcmxhY2VfZ3JlZWR5X2NvcHlfc2NhbmxpbmU7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX2dyZWVkeV9jb3B5X3NjYW5saW5lOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3JnYmEgPSBkZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9iZ3JhID0gZGVpbnRlcmxhY2VfZ3JlZWR5X2NvcHlfc2NhbmxpbmU7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2VfZ3JlZWR5X2NvcHlfc2NhbmxpbmU7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYmdyID0gZGVpbnRlcmxhY2VfZ3JlZWR5X2NvcHlfc2NhbmxpbmU7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3kgPSBkZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBkZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdiA9Ci0gICAgICBkZWludGVybGFjZV9ncmVlZHlfY29weV9zY2FubGluZV9wbGFuYXJfdjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlMICogc2VsZikKLXsKLSAgc2VsZi0+bWF4X2NvbWIgPSAxNTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5hc20gYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWEwM2RmLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5hc20KKysrIC9kZXYvbnVsbApAQCAtMSw0NzIgKzAsMCBAQAotLyoKLSAqCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoYykgMjAwMSBUb20gQmFycnkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWdsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLS8qCi0gKiBSZWxpY2Vuc2VkIGZvciBHU3RyZWFtZXIgZnJvbSBHUEwgdG8gTEdQTCB3aXRoIHBlcm1pdCBmcm9tIFRvbSBCYXJyeS4KLSAqIFNlZTogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTc4Ci0gKi8KLQotCi0jaW5jbHVkZSAieDg2LTY0X21hY3Jvcy5pbmMiCi0KLXN0YXRpYyB2b2lkCi1GVU5DVF9OQU1FX1lVWTIgKEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5SCAqc2VsZiwgY29uc3QgZ3VpbnQ4ICogTDEsIGNvbnN0IGd1aW50OCAqIEwyLCBjb25zdCBndWludDggKiBMMywgY29uc3QgZ3VpbnQ4ICogTDJQLCBndWludDggKiBEZXN0LCBnaW50IHdpZHRoKQotewotCi0gIC8vIGluIHRpZ2h0IGxvb3Agc29tZSB2YXJzIGFyZSBhY2Nlc3NlZCBmYXN0ZXIgaW4gbG9jYWwgc3RvcmFnZQotICBnaW50NjQgWU1hc2sgPSAweDAwZmYwMGZmMDBmZjAwZmZ1bGw7ICAgICAgICAvLyB0byBrZWVwIG9ubHkgbHVtYQotICBnaW50NjQgVVZNYXNrID0gMHhmZjAwZmYwMGZmMDBmZjAwdWxsOyAgICAgICAvLyB0byBrZWVwIG9ubHkgY2hyb21hCi0gIGdpbnQ2NCBTaGlmdE1hc2sgPSAweGZlZmVmZWZlZmVmZWZlZmV1bGw7ICAgIC8vIHRvIGF2b2lkIHNoaWZ0aW5nIGNocm9tYSB0byBsdW1hCi0gIGdpbnQ2NCBRVzI1NiA9IDB4MDEwMDAxMDAwMTAwMDEwMHVsbDsgICAgICAgIC8vIDQgMjU2J3MKLSAgZ2ludDY0IE1heENvbWI7Ci0gIGdpbnQ2NCBNb3Rpb25UaHJlc2hvbGQ7Ci0gIGdpbnQ2NCBNb3Rpb25TZW5zZTsKLSAgZ2ludDY0IGk7Ci0gIGdsb25nIExvb3BDdHI7Ci0gIGdsb25nIG9sZGJ4ID0gMDsKLQotICBnaW50NjQgUVcyNTZCOwotICBnaW50NjQgTGFzdEF2ZyA9IDA7ICAgICAgICAgIC8vaW50ZXJwIHZhbHVlIGZyb20gbGVmdCBxd29yZAotCi0gIC8vIEZJWE1FOiBVc2UgQyBpbXBsZW1lbnRhdGlvbiBpZiB0aGUgd2lkdGggaXMgbm90IGEgbXVsdGlwbGUgb2YgNAotICAvLyBEbyBzb21ldGhpbmcgbW9yZSBvcHRpbWFsIGxhdGVyCi0gIGlmICh3aWR0aCAlIDQgIT0gMCkKLSAgICBDX0ZVTkNUX1lVWTIgKHNlbGYsIEwxLCBMMiwgTDMsIEwyUCwgRGVzdCwgd2lkdGgpOwotCi0gIC8vIFNldCB1cCBvdXIgdHdvIHBhcm1zIHRoYXQgYXJlIGFjdHVhbGx5IGV2YWx1YXRlZCBmb3IgZWFjaCBwaXhlbAotICBpID0gc2VsZi0+bWF4X2NvbWI7Ci0gIE1heENvbWIgPQotICAgICAgaSA8PCA1NiB8IGkgPDwgNDggfCBpIDw8IDQwIHwgaSA8PCAzMiB8IGkgPDwgMjQgfCBpIDw8IDE2IHwgaSA8PCA4IHwgaTsKLQotICBpID0gc2VsZi0+bW90aW9uX3RocmVzaG9sZDsgICAgLy8gc2NhbGUgdG8gcmFuZ2Ugb2YgMC0yNTcKLSAgTW90aW9uVGhyZXNob2xkID0gaSA8PCA0OCB8IGkgPDwgMzIgfCBpIDw8IDE2IHwgaSB8IFVWTWFzazsKLQotICBpID0gc2VsZi0+bW90aW9uX3NlbnNlOyAgICAgICAgLy8gc2NhbGUgdG8gcmFuZ2Ugb2YgMC0yNTcKLSAgTW90aW9uU2Vuc2UgPSBpIDw8IDQ4IHwgaSA8PCAzMiB8IGkgPDwgMTYgfCBpOwotCi0gIGkgPSAweGZmZmZmZmZmIC0gMjU2OwotICBRVzI1NkIgPSBpIDw8IDQ4IHwgaSA8PCAzMiB8IGkgPDwgMTYgfCBpOyAgICAgLy8gc2F2ZSBhIGNvdXBsZSBpbnN0ciBvbiBQTUlOU1cgaW5zdHJ1Y3QuCi0KLSAgTG9vcEN0ciA9IHdpZHRoIC8gOCAtIDE7ICAgICAgIC8vIHRoZXJlIGFyZSBMaW5lTGVuZ3RoIC8gNCBxd29yZHMgcGVyIGxpbmUgYnV0IGRvIDEgbGVzcywgYWRqIGF0IGVuZCBvZiBsb29wCi0KLSAgLy8gRm9yIGVhc2Ugb2YgcmVhZGluZywgdGhlIGNvbW1lbnRzIGJlbG93IGFzc3VtZSB0aGF0IHdlJ3JlIG9wZXJhdGluZyBvbiBhbiBvZGQKLSAgLy8gZmllbGQgKGkuZS4sIHRoYXQgSW5mb0lzT2RkIGlzIHRydWUpLiAgQXNzdW1lIHRoZSBvYnZpb3VzIGZvciBldmVuIGxpbmVzLi4KLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgLy8gc2F2ZSBlYnggKC1mUElDKQotICAgICAgTU9WWCAiICUlIiBYQlggIiwgJVtvbGRieF1cblx0IgotICAgICAgTU9WWCAiICAlW0wxXSwgICAgICAgICAgJSUiIFhBWCAiXG5cdCIKLSAgICAgIExFQVggIiAgOCglJSIgWEFYICIpLCAgICAgJSUiIFhCWCAiXG5cdCIgICAvLyBuZXh0IHF3b3JkIG5lZWRlZCBieSBESlIKLSAgICAgIE1PVlggIiAgJVtMM10sICAgICAgICAgICUlIiBYQ1ggIlxuXHQiCi0gICAgICBTVUJYICIgICUlIiBYQVggIiwgICAgICAgICUlIiBYQ1ggIlxuXHQiICAgLy8gY2FycnkgTDMgYWRkciBhcyBhbiBvZmZzZXQKLSAgICAgIE1PVlggIiAgJVtMMlBdLCAgICAgICAgICUlIiBYRFggIlxuXHQiCi0gICAgICBNT1ZYICIgICVbTDJdLCAgICAgICAgICAlJSIgWFNJICJcblx0IgotICAgICAgTU9WWCAiICAlW0Rlc3RdLCAgICAgICAgJSUiIFhESSAiXG5cdCIgICAgICAvLyBETDEgaWYgT2RkIG9yIERMMiBpZiBFdmVuCi0KLSAgICAgICIuYWxpZ24gOFxuXHQiCi0gICAgICAiMTpcblx0IgotICAgICAgIm1vdnEgICglJSIgWFNJICIpLCAgICAgICUlbW0wXG5cdCIgICAgICAgLy8gTDIgLSB0aGUgbmV3ZXN0IHdlYXZlIHBpeGVsIHZhbHVlCi0gICAgICAibW92cSAgKCUlIiBYQVggIiksICAgICAgJSVtbTFcblx0IiAgICAgICAvLyBMMSAtIHRoZSB0b3AgcGl4ZWwKLSAgICAgICJtb3ZxICAoJSUiIFhEWCAiKSwgICAgICAlJW1tMlxuXHQiICAgICAgIC8vIEwyUCAtIHRoZSBwcmV2IHdlYXZlIHBpeGVsCi0gICAgICAibW92cSAgKCUlIiBYQVggIiwgJSUiIFhDWCAiKSwgJSVtbTNcblx0IiAvLyBMMywgbmV4dCBvZGQgcm93Ci0gICAgICAibW92cSAgJSVtbTEsICAgICAgICAgICUlbW02XG5cdCIgICAgICAgICAvLyBMMSAtIGdldCBzaW1wbGUgc2luZ2xlIHBpeGVsIGludGVycAotCi0gICAgICAvLyAgICAgICAgcGF2Z2IgICBtbTYsIG1tMyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG1hY3JvIGJlbG93Ci0gICAgICBWX1BBVkdCICgiJSVtbTYiLCAiJSVtbTMiLCAiJSVtbTQiLCAiJVtTaGlmdE1hc2tdIikKLQotICAgICAgLy8gREpSIC0gRGlhZ29uYWwgSmFnZ2llIFJlZHVjdGlvbgotICAgICAgLy8gSW4gdGhlIGV2ZW50IHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBhbiBhdmVyYWdlIChCb2IpIHBpeGVsIHdlIGRvIG5vdCB3YW50IGEgamFnZ2VkCi0gICAgICAvLyBzdGFpciBzdGVwIGVmZmVjdC4gIFRvIGNvbWJhdCB0aGlzIHdlIGF2ZyBpbiB0aGUgMiBob3Jpem9udGFsbHkgYWRqYWNlbiBwaXhlbHMgaW50byB0aGUKLSAgICAgIC8vIGludGVycG9sYXRlZCBCb2IgbWl4LiBUaGlzIHdpbGwgZG8gaG9yaXpvbnRhbCBzbW9vdGhpbmcgZm9yIG9ubHkgdGhlIEJvYidkIHBpeGVscy4KLQotICAgICAgIm1vdnEgICVbTGFzdEF2Z10sICAgICAlJW1tNFxuXHQiIC8vIHRoZSBib2IgdmFsdWUgZnJvbSBwcmV2IHF3b3JkIGluIHJvdwotICAgICAgIm1vdnEgICUlbW02LCAgICAgICAgICAlW0xhc3RBdmddXG5cdCIgICAgLy8gc2F2ZSBmb3IgbmV4dCBwYXNzCi0gICAgICAicHNybHEgJDQ4LCAgICAgICAgICAgICUlbW00XG5cdCIgLy8gcmlnaHQganVzdGlmeSAxIHBpeGVsCi0gICAgICAibW92cSAgJSVtbTYsICAgICAgICAgICUlbW03XG5cdCIgLy8gY29weSBvZiBzaW1wbGUgYm9iIHBpeGVsCi0gICAgICAicHNsbHEgJDE2LCAgICAgICAgICAgICUlbW03XG5cdCIgLy8gbGVmdCBqdXN0aWZ5IDMgcGl4ZWxzCi0gICAgICAicG9yICAgJSVtbTcsICAgICAgICAgICUlbW00XG5cdCIgLy8gYW5kIGNvbWJpbmUKLSAgICAgICJtb3ZxICAoJSUiIFhCWCAiKSwgICAgICAlJW1tNVxuXHQiICAgICAgIC8vIG5leHQgaG9yaXogcXdvcmQgZnJvbSBMMQotICAgICAgLy8gcGF2Z2IgICBtbTUsIHF3b3JkIHB0cltlYngrZWN4XSAvLyBuZXh0IGhvcml6IHF3b3JkIGZyb20gTDMsIHVzZSBtYWNybyBiZWxvdwotCi0gICAgICBWX1BBVkdCICgiJSVtbTUiLCAiKCUlIiBYQlggIiwlJSIgWENYICIpIiwgIiUlbW03IiwgIiVbU2hpZnRNYXNrXSIpCi0gICAgICAicHNsbHEgJDQ4LCAgICAgICAgICAgICUlbW01XG5cdCIgLy8gbGVmdCBqdXN0IDEgcGl4ZWwKLSAgICAgICJtb3ZxICAlJW1tNiwgICAgICAgICAgJSVtbTdcblx0IiAvLyBhbm90aGVyIGNvcHkgb2Ygc2ltcGxlIGJvYiBwaXhlbAotICAgICAgInBzcmxxICQxNiwgICAgICAgICAgICAlJW1tN1xuXHQiIC8vIHJpZ2h0IGp1c3QgMyBwaXhlbHMKLSAgICAgICJwb3IgICAlJW1tNywgICAgICAgICAgJSVtbTVcblx0IiAvLyBjb21iaW5lCi0gICAgICAvLyBwYXZnYiAgICAgICAgbW00LCBtbTUgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdmcgb2YgZm9yd2FyZCBhbmQgcHJldiBieSAxIHBpeGVsLCB1c2UgbWFjcm8KLSAgICAgIFZfUEFWR0IgKCIlJW1tNCIsICIlJW1tNSIsICIlJW1tNSIsICIlW1NoaWZ0TWFza10iKSAgICAgICAvLyBtbTUgZ2V0cyBtb2RpZmllZCBpZiBNTVgKLSAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgcGF2Z2IgICAgICAgIG1tNiwgbW00ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZnIG9mIGNlbnRlciBhbmQgc3Vycm91bmQgaW50ZXJwIHZhbHMsIHVzZSBtYWNybwotICAgICAgVl9QQVZHQiAoIiUlbW02IiwgIiUlbW00IiwgIiUlbW03IiwgIiVbU2hpZnRNYXNrXSIpCi0KLSAgICAgIC8vIERvbid0IGRvIGFueSBtb3JlIGF2ZXJhZ2luZyB0aGFuIG5lZWRlZCBmb3IgbW14LiBJdCBodXJ0cyBwZXJmb3JtYW5jZSBhbmQgY2F1c2VzIHJvdW5kaW5nIGVycm9ycy4KLSNpZm5kZWYgSVNfTU1YCi0gICAgICAvLyAgICAgICAgICBwYXZnYiAgICAgICAgbW00LCBtbTYgICAgICAgICAgICAgICAgICAgICAgICAvLyAxLzQgY2VudGVyLCAzLzQgYWRqYWNlbnQKLSAgICAgIFZfUEFWR0IgKCIlJW1tNCIsICIlJW1tNiIsICIlJW1tNyIsICIlW1NoaWZ0TWFza10iKQotICAgICAgLy8gICAgICAgICAgICAgICAgICAgIHBhdmdiICAgICAgICBtbTYsIG1tNCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMvOCBjZW50ZXIsIDUvOCBhZGphY2VudAotICAgICAgVl9QQVZHQiAoIiUlbW02IiwgIiUlbW00IiwgIiUlbW03IiwgIiVbU2hpZnRNYXNrXSIpCi0jZW5kaWYKLQotICAgICAgLy8gZ2V0IGFicyB2YWx1ZSBvZiBwb3NzaWJsZSBMMiBjb21iCi0gICAgICAibW92cSAgICAlJW1tNiwgICAgICAgICUlbW00XG5cdCIgLy8gd29yayBjb3B5IG9mIGludGVycCB2YWwKLSAgICAgICJtb3ZxICAgICUlbW0yLCAgICAgICAgJSVtbTdcblx0IiAvLyBMMgotICAgICAgInBzdWJ1c2IgJSVtbTQsICAgICAgICAlJW1tN1xuXHQiIC8vIEwyIC0gYXZnCi0gICAgICAibW92cSAgICAlJW1tNCwgICAgICAgICUlbW01XG5cdCIgLy8gYXZnCi0gICAgICAicHN1YnVzYiAlJW1tMiwgICAgICAgICUlbW01XG5cdCIgLy8gYXZnIC0gTDIKLSAgICAgICJwb3IgICAgICUlbW03LCAgICAgICAgJSVtbTVcblx0IiAvLyBhYnMoYXZnLUwyKQotCi0gICAgICAvLyBnZXQgYWJzIHZhbHVlIG9mIHBvc3NpYmxlIEwyUCBjb21iCi0gICAgICAibW92cSAgICAlJW1tMCwgICAgICAgICUlbW03XG5cdCIgLy8gTDJQCi0gICAgICAicHN1YnVzYiAlJW1tNCwgICAgICAgICUlbW03XG5cdCIgLy8gTDJQIC0gYXZnCi0gICAgICAicHN1YnVzYiAlJW1tMCwgICAgICAgICUlbW00XG5cdCIgLy8gYXZnIC0gTDJQCi0gICAgICAicG9yICAgICAlJW1tNywgICAgICAgICUlbW00XG5cdCIgLy8gYWJzKGF2Zy1MMlApCi0KLSAgICAgIC8vIHVzZSBMMiBvciBMMlAgZGVwZW5kaW5nIHVwb24gd2hpY2ggbWFrZXMgc21hbGxlciBjb21iCi0gICAgICAicHN1YnVzYiAlJW1tNSwgICAgICAgICUlbW00XG5cdCIgLy8gc2VlIGlmIGl0IGdvZXMgdG8gemVybwotICAgICAgInBzdWJ1c2IgJSVtbTUsICAgICAgICAlJW1tNVxuXHQiIC8vIDAKLSAgICAgICJwY21wZXFiICUlbW01LCAgICAgICAgJSVtbTRcblx0IiAvLyBpZiAobW00PTApIHRoZW4gRkYgZWxzZSAwCi0gICAgICAicGNtcGVxYiAlJW1tNCwgICAgICAgICUlbW01XG5cdCIgLy8gb3Bwb3NpdGUgb2YgbW00Ci0KLSAgICAgIC8vIGlmIENvbWIoTDJQKSA8PSBDb21iKEwyKSB0aGVuIG1tND1mZiwgbW01PTAgZWxzZSBtbTQ9MCwgbW01ID0gNTUKLSAgICAgICJwYW5kICAgICUlbW0yLCAgICAgICAgJSVtbTVcblx0IiAvLyB1c2UgTDIgaWYgbW01ID09IGZmLCBlbHNlIDAKLSAgICAgICJwYW5kICAgICUlbW0wLCAgICAgICAgJSVtbTRcblx0IiAvLyB1c2UgTDJQIGlmIG1tNCA9IGZmLCBlbHNlIDAKLSAgICAgICJwb3IgICAgICUlbW01LCAgICAgICAgJSVtbTRcblx0IiAvLyBtYXkgdGhlIGJlc3Qgd2luCi0KLSAgICAgIC8vIEludmVudG9yeTogYXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAgICAgLy8gbW0wID0gTDJQIChvciBMMikKLSAgICAgIC8vIG1tMSA9IEwxCi0gICAgICAvLyBtbTIgPSBMMiAob3IgTDJQKQotICAgICAgLy8gbW0zID0gTDMKLSAgICAgIC8vIG1tNCA9IHRoZSBiZXN0IG9mIEwyLEwyUCB3ZWF2ZSBwaXhlbCwgYmFzZSB1cG9uIGNvbWIKLSAgICAgIC8vIG1tNiA9IHRoZSBhdmcgaW50ZXJwb2xhdGVkIHZhbHVlLCBpZiB3ZSBuZWVkIHRvIHVzZSBpdAotICAgICAgLy8gTGV0J3MgbWVhc3VyZSBtb3ZlbWVudCwgYXMgaG93IG11Y2ggdGhlIHdlYXZlIHBpeGVsIGhhcyBjaGFuZ2VkCi0KLSAgICAgICJtb3ZxICAgICUlbW0yLCAgICAgICAgJSVtbTdcblx0IgotICAgICAgInBzdWJ1c2IgJSVtbTAsICAgICAgICAlJW1tMlxuXHQiCi0gICAgICAicHN1YnVzYiAlJW1tNywgICAgICAgICUlbW0wXG5cdCIKLSAgICAgICJwb3IgICAgICUlbW0yLCAgICAgICAgJSVtbTBcblx0IiAgIC8vIGFicyB2YWx1ZSBvZiBjaGFuZ2UsIHVzZWQgbGF0ZXIKLQotICAgICAgLy8gTm93IGxldHMgY2xpcCBvdXIgY2hvc2VuIHZhbHVlIHRvIGJlIG5vdCBvdXRzaWRlIG9mIHRoZSByYW5nZQotICAgICAgLy8gb2YgdGhlIGhpZ2gvbG93IHJhbmdlIEwxLUwzIGJ5IG1vcmUgdGhhbiBNYXhDb21iLgotICAgICAgLy8gVGhpcyBhbGxvd3Mgc29tZSBjb21iIGJ1dCBsaW1pdHMgdGhlIGRhbWFnZXMgYW5kIGFsc28gYWxsb3dzIG1vcmUKLSAgICAgIC8vIGRldGFpbCB0aGFuIGEgYm9yaW5nIG92ZXJzbW9vdGhlZCBjbGlwLgotCi0gICAgICAibW92cSAgICAlJW1tMSwgICAgICAgICUlbW0yXG5cdCIgLy8gY29weSBMMQotICAgICAgLy8gcG1heHViIG1tMiwgbW0zICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG1hY3JvCi0gICAgICBWX1BNQVhVQiAoIiUlbW0yIiwgIiUlbW0zIikgICAgICAgLy8gbm93ID0gTWF4KEwxLEwzKQotICAgICAgIm1vdnEgICAgJSVtbTEsICAgICAgICAlJW1tNVxuXHQiIC8vIGNvcHkgTDEKLSAgICAgIC8vIHBtaW51YiAgICAgICAgbW01LCBtbTMgICAgICAgICAgICAgICAgICAgIC8vIG5vdyA9IE1pbihMMSxMMyksIHVzZSBtYWNybwotICAgICAgVl9QTUlOVUIgKCIlJW1tNSIsICIlJW1tMyIsICIlJW1tNyIpCi0KLSAgICAgIC8vIGFsbG93IHRoZSB2YWx1ZSB0byBiZSBhYm92ZSB0aGUgaGlnaCBvciBiZWxvdyB0aGUgbG93IGJ5IGFtdCBvZiBNYXhDb21iCi0gICAgICAicHN1YnVzYiAlW01heENvbWJdLCAgICUlbW01XG5cdCIgLy8gbG93ZXIgbWluIGJ5IGRpZmYKLSAgICAgICJwYWRkdXNiICVbTWF4Q29tYl0sICAgJSVtbTJcblx0IiAvLyBpbmNyZWFzZSBtYXggYnkgZGlmZgotICAgICAgLy8gcG1heHViICAgICAgICBtbTQsIG1tNSAgICAgICAgIC8vIG5vdyA9IE1heChiZXN0LE1pbihMMSxMMykgdXNlIG1hY3JvCi0gICAgICBWX1BNQVhVQiAoIiUlbW00IiwgIiUlbW01IikKLSAgICAgIC8vIHBtaW51YiAgICAgICAgbW00LCBtbTIgICAgICAgICAvLyBub3cgPSBNaW4oIE1heChiZXN0LCBNaW4oTDEsTDMpLCBMMiApPUwyIGNsaXBwZWQKLSAgICAgIFZfUE1JTlVCICgiJSVtbTQiLCAiJSVtbTIiLCAiJSVtbTciKQotCi0gICAgICAvLyBCbGVuZCB3ZWF2ZSBwaXhlbCB3aXRoIGJvYiBwaXhlbCwgZGVwZW5kaW5nIG9uIG1vdGlvbiB2YWwgaW4gbW0wCi0gICAgICAicHN1YnVzYiAlW01vdGlvblRocmVzaG9sZF0sICUlbW0wXG5cdCIgICAvLyB0ZXN0IFRocmVzaG9sZCwgY2xlYXIgY2hyb21hIGNoYW5nZQotICAgICAgInBtdWxsdyAgJVtNb3Rpb25TZW5zZV0sICUlbW0wXG5cdCIgICAgICAgLy8gbXVsIGJ5IHVzZXIgZmFjdG9yLCBrZWVwIGxvdyAxNiBiaXRzCi0gICAgICAibW92cSAgICAlW1FXMjU2XSwgJSVtbTdcblx0IgotI2lmZGVmIElTX01NWEVYVAotICAgICAgInBtaW5zdyAgJSVtbTcsICAgICAgICAlJW1tMFxuXHQiIC8vIG1heCA9IDI1NgotI2Vsc2UKLSAgICAgICJwYWRkdXN3ICVbUVcyNTZCXSwgICAgJSVtbTBcblx0IiAvLyBhZGQsIG1heSBzYXQgYXQgZmZmLi4KLSAgICAgICJwc3VidXN3ICVbUVcyNTZCXSwgICAgJSVtbTBcblx0IiAvLyBub3cgPSBNaW4oTDEsMjU2KQotI2VuZGlmCi0gICAgICAicHN1YnVzdyAlJW1tMCwgICAgICAgICUlbW03XG5cdCIgLy8gc28gdGhlIDIgc3VtIHRvIDI1Niwgd2VpZ2h0ZWQgYXZnCi0gICAgICAibW92cSAgICAlJW1tNCwgICAgICAgICUlbW0yXG5cdCIgLy8gc2F2ZSB3ZWF2ZSBjaHJvbWEgaW5mbyBiZWZvcmUgdHJhc2hpbmcKLSAgICAgICJwYW5kICAgICVbWU1hc2tdLCAgICAgJSVtbTRcblx0IiAvLyBrZWVwIG9ubHkgbHVtYSBmcm9tIGNhbGMnZCB2YWx1ZQotICAgICAgInBtdWxsdyAgJSVtbTcsICAgICAgICAlJW1tNFxuXHQiIC8vIHVzZSBtb3JlIHdlYXZlIGZvciBsZXNzIG1vdGlvbgotICAgICAgInBhbmQgICAgJVtZTWFza10sICAgICAlJW1tNlxuXHQiIC8vIGtlZXAgb25seSBsdW1hIGZyb20gY2FsYydkIHZhbHVlCi0gICAgICAicG11bGx3ICAlJW1tMCwgICAgICAgICUlbW02XG5cdCIgLy8gdXNlIG1vcmUgYm9iIGZvciBsYXJnZSBtb3Rpb24KLSAgICAgICJwYWRkdXN3ICUlbW02LCAgICAgICAgJSVtbTRcblx0IiAvLyBjb21iaW5lCi0gICAgICAicHNybHcgICAkOCwgICAgICAgICAgICUlbW00XG5cdCIgLy8gZGl2IGJ5IDI1NiB0byBnZXQgd2VpZ2h0ZWQgYXZnCi0gICAgICAvLyBjaHJvbWEgY29tZXMgZnJvbSB3ZWF2ZSBwaXhlbAotICAgICAgInBhbmQgICAgJVtVVk1hc2tdLCAgICAlJW1tMlxuXHQiIC8vIGtlZXAgY2hyb21hCi0gICAgICAicG9yICAgICAlJW1tNCwgICAgICAgICUlbW0yXG5cdCIgLy8gYW5kIGNvbWJpbmUKLSAgICAgIFZfTU9WTlRRICgiKCUlIiBYREkgIikiLCAiJSVtbTIiKSAvLyBtb3ZlIGluIG91ciBjbGlwcGVkIGJlc3QsIHVzZSBtYWNybwotICAgICAgLy8gYnVtcCBwdHJzIGFuZCBsb29wCi0gICAgICBMRUFYICIgICAgOCglJSIgWEFYICIpLCAgICUlIiBYQVggIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWEJYICIpLCAgICUlIiBYQlggIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWERYICIpLCAgICUlIiBYRFggIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWERJICIpLCAgICUlIiBYREkgIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWFNJICIpLCAgICUlIiBYU0kgIlxuXHQiCi0gICAgICBERUNYICIgICAgJVtMb29wQ3RyXVxuXHQiCi0gICAgICAKLSAgICAgICJqZyAgICAgIDFiXG5cdCIgICAvLyBsb29wIGlmIG5vdCB0byBsYXN0IGxpbmUKLSAgICAgIC8vIG5vdGUgUC1JSUkgZGVmYXVsdCBhc3N1bWVzIGJhY2t3YXJkIGJyYW5jaGVzIHRha2VuCi0gICAgICAiamwgICAgICAxZlxuXHQiICAgICAgICAgIC8vIGRvbmUKLSAgICAgIE1PVlggIiAgICAlJSIgWEFYICIsICAgICAgJSUiIFhCWCAiXG5cdCIgIC8vIHNoYXJwbmVzcyBsb29rYWhlYWQgMSBieXRlIG9ubHksIGJlIHdyb25nIG9uIDEKLSAgICAgICJqbXAgICAgIDFiXG5cdCIKLSAgICAgIAotICAgICAgIjE6XG5cdCIgICAgICAKLSAgICAgIE1PVlggIiAlW29sZGJ4XSwgJSUiIFhCWCAiXG5cdCIKLSAgICAgICJlbW1zXG5cdCI6ICAgICAvKiBubyBvdXRwdXRzICovCi0KLSAgICAgIDpbTGFzdEF2Z10gIm0iIChMYXN0QXZnKSwKLSAgICAgICBbTDFdICJtIiAoTDEpLAotICAgICAgIFtMM10gIm0iIChMMyksCi0gICAgICAgW0wyUF0gIm0iIChMMlApLAotICAgICAgIFtMMl0gIm0iIChMMiksCi0gICAgICAgW0Rlc3RdICJtIiAoRGVzdCksCi0gICAgICAgW1NoaWZ0TWFza10gIm0iIChTaGlmdE1hc2spLAotICAgICAgIFtNYXhDb21iXSAibSIgKE1heENvbWIpLAotICAgICAgIFtNb3Rpb25UaHJlc2hvbGRdICJtIiAoTW90aW9uVGhyZXNob2xkKSwKLSAgICAgICBbTW90aW9uU2Vuc2VdICJtIiAoTW90aW9uU2Vuc2UpLAotICAgICAgIFtRVzI1NkJdICJtIiAoUVcyNTZCKSwKLSAgICAgICBbWU1hc2tdICJtIiAoWU1hc2spLAotICAgICAgIFtVVk1hc2tdICJtIiAoVVZNYXNrKSwKLSAgICAgICBbTG9vcEN0cl0gIm0iIChMb29wQ3RyKSwKLSAgICAgICBbUVcyNTZdICJtIiAoUVcyNTYpLAotICAgICAgIFtvbGRieF0gIm0iIChvbGRieCkKLSAgICAgIDogWEFYLCBYQ1gsIFhEWCwgWFNJLCBYREksCi0gICAgICAic3QiLCAic3QoMSkiLCAic3QoMikiLCAic3QoMykiLCAic3QoNCkiLCAic3QoNSkiLCAic3QoNikiLCAic3QoNykiLAotI2lmZGVmIF9fTU1YX18KLSAgICAgICJtbTAiLCAibW0xIiwgIm1tMiIsICJtbTMiLCAibW00IiwgIm1tNSIsICJtbTYiLCAibW03IiwKLSNlbmRpZgotICAgICAgIm1lbW9yeSIsICJjYyIpOwotfQotCi1zdGF0aWMgdm9pZAotRlVOQ1RfTkFNRV9VWVZZIChHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKnNlbGYsIGNvbnN0IGd1aW50OCAqIEwxLCBjb25zdCBndWludDggKiBMMiwgY29uc3QgZ3VpbnQ4ICogTDMsIGNvbnN0IGd1aW50OCAqIEwyUCwgZ3VpbnQ4ICogRGVzdCwgZ2ludCB3aWR0aCkKLXsKLQotICAvLyBpbiB0aWdodCBsb29wIHNvbWUgdmFycyBhcmUgYWNjZXNzZWQgZmFzdGVyIGluIGxvY2FsIHN0b3JhZ2UKLSAgZ2ludDY0IFlNYXNrID0gMHhmZjAwZmYwMGZmMDBmZjAwdWxsOyAgICAgICAvLyB0byBrZWVwIG9ubHkgbHVtYQotICBnaW50NjQgVVZNYXNrID0gMHgwMGZmMDBmZjAwZmYwMGZmdWxsOyAgICAgICAgLy8gdG8ga2VlcCBvbmx5IGNocm9tYQotICBnaW50NjQgU2hpZnRNYXNrID0gMHhmZWZlZmVmZWZlZmVmZWZldWxsOyAgICAvLyB0byBhdm9pZCBzaGlmdGluZyBjaHJvbWEgdG8gbHVtYQotICBnaW50NjQgUVcyNTYgPSAweDAxMDAwMTAwMDEwMDAxMDB1bGw7ICAgICAgICAvLyA0IDI1NidzCi0gIGdpbnQ2NCBNYXhDb21iOwotICBnaW50NjQgTW90aW9uVGhyZXNob2xkOwotICBnaW50NjQgTW90aW9uU2Vuc2U7Ci0gIGdpbnQ2NCBpOwotICBnbG9uZyBMb29wQ3RyOwotICBnbG9uZyBvbGRieCA9IDA7Ci0KLSAgZ2ludDY0IFFXMjU2QjsKLSAgZ2ludDY0IExhc3RBdmcgPSAwOyAgICAgICAgICAvL2ludGVycCB2YWx1ZSBmcm9tIGxlZnQgcXdvcmQKLQotICAvLyBGSVhNRTogVXNlIEMgaW1wbGVtZW50YXRpb24gaWYgdGhlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQKLSAgLy8gRG8gc29tZXRoaW5nIG1vcmUgb3B0aW1hbCBsYXRlcgotICBpZiAod2lkdGggJSA0ICE9IDApCi0gICAgQ19GVU5DVF9VWVZZIChzZWxmLCBMMSwgTDIsIEwzLCBMMlAsIERlc3QsIHdpZHRoKTsKLQotICAvLyBTZXQgdXAgb3VyIHR3byBwYXJtcyB0aGF0IGFyZSBhY3R1YWxseSBldmFsdWF0ZWQgZm9yIGVhY2ggcGl4ZWwKLSAgaSA9IHNlbGYtPm1heF9jb21iOwotICBNYXhDb21iID0KLSAgICAgIGkgPDwgNTYgfCBpIDw8IDQ4IHwgaSA8PCA0MCB8IGkgPDwgMzIgfCBpIDw8IDI0IHwgaSA8PCAxNiB8IGkgPDwgOCB8IGk7Ci0KLSAgaSA9IHNlbGYtPm1vdGlvbl90aHJlc2hvbGQ7ICAgIC8vIHNjYWxlIHRvIHJhbmdlIG9mIDAtMjU3Ci0gIE1vdGlvblRocmVzaG9sZCA9IGkgPDwgNDggfCBpIDw8IDMyIHwgaSA8PCAxNiB8IGkgfCBVVk1hc2s7Ci0KLSAgaSA9IHNlbGYtPm1vdGlvbl9zZW5zZTsgICAgICAgIC8vIHNjYWxlIHRvIHJhbmdlIG9mIDAtMjU3Ci0gIE1vdGlvblNlbnNlID0gaSA8PCA0OCB8IGkgPDwgMzIgfCBpIDw8IDE2IHwgaTsKLQotICBpID0gMHhmZmZmZmZmZiAtIDI1NjsKLSAgUVcyNTZCID0gaSA8PCA0OCB8IGkgPDwgMzIgfCBpIDw8IDE2IHwgaTsgICAgIC8vIHNhdmUgYSBjb3VwbGUgaW5zdHIgb24gUE1JTlNXIGluc3RydWN0LgotCi0gIExvb3BDdHIgPSB3aWR0aCAvIDggLSAxOyAgICAgICAvLyB0aGVyZSBhcmUgTGluZUxlbmd0aCAvIDQgcXdvcmRzIHBlciBsaW5lIGJ1dCBkbyAxIGxlc3MsIGFkaiBhdCBlbmQgb2YgbG9vcAotCi0gIC8vIEZvciBlYXNlIG9mIHJlYWRpbmcsIHRoZSBjb21tZW50cyBiZWxvdyBhc3N1bWUgdGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24gYW4gb2RkCi0gIC8vIGZpZWxkIChpLmUuLCB0aGF0IEluZm9Jc09kZCBpcyB0cnVlKS4gIEFzc3VtZSB0aGUgb2J2aW91cyBmb3IgZXZlbiBsaW5lcy4uCi0gIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgIC8vIHNhdmUgZWJ4ICgtZlBJQykKLSAgICAgIE1PVlggIiAlJSIgWEJYICIsICVbb2xkYnhdXG5cdCIKLSAgICAgIE1PVlggIiAgJVtMMV0sICAgICAgICAgICUlIiBYQVggIlxuXHQiCi0gICAgICBMRUFYICIgIDgoJSUiIFhBWCAiKSwgICAgICUlIiBYQlggIlxuXHQiICAgLy8gbmV4dCBxd29yZCBuZWVkZWQgYnkgREpSCi0gICAgICBNT1ZYICIgICVbTDNdLCAgICAgICAgICAlJSIgWENYICJcblx0IgotICAgICAgU1VCWCAiICAlJSIgWEFYICIsICAgICAgICAlJSIgWENYICJcblx0IiAgIC8vIGNhcnJ5IEwzIGFkZHIgYXMgYW4gb2Zmc2V0Ci0gICAgICBNT1ZYICIgICVbTDJQXSwgICAgICAgICAlJSIgWERYICJcblx0IgotICAgICAgTU9WWCAiICAlW0wyXSwgICAgICAgICAgJSUiIFhTSSAiXG5cdCIKLSAgICAgIE1PVlggIiAgJVtEZXN0XSwgICAgICAgICUlIiBYREkgIlxuXHQiICAgICAgLy8gREwxIGlmIE9kZCBvciBETDIgaWYgRXZlbgotCi0gICAgICAiLmFsaWduIDhcblx0IgotICAgICAgIjE6XG5cdCIKLSAgICAgICJtb3ZxICAoJSUiIFhTSSAiKSwgICAgICAlJW1tMFxuXHQiICAgICAgIC8vIEwyIC0gdGhlIG5ld2VzdCB3ZWF2ZSBwaXhlbCB2YWx1ZQotICAgICAgIm1vdnEgICglJSIgWEFYICIpLCAgICAgICUlbW0xXG5cdCIgICAgICAgLy8gTDEgLSB0aGUgdG9wIHBpeGVsCi0gICAgICAibW92cSAgKCUlIiBYRFggIiksICAgICAgJSVtbTJcblx0IiAgICAgICAvLyBMMlAgLSB0aGUgcHJldiB3ZWF2ZSBwaXhlbAotICAgICAgIm1vdnEgICglJSIgWEFYICIsICUlIiBYQ1ggIiksICUlbW0zXG5cdCIgLy8gTDMsIG5leHQgb2RkIHJvdwotICAgICAgIm1vdnEgICUlbW0xLCAgICAgICAgICAlJW1tNlxuXHQiICAgICAgICAgLy8gTDEgLSBnZXQgc2ltcGxlIHNpbmdsZSBwaXhlbCBpbnRlcnAKLQotICAgICAgLy8gICAgICAgIHBhdmdiICAgbW02LCBtbTMgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBtYWNybyBiZWxvdwotICAgICAgVl9QQVZHQiAoIiUlbW02IiwgIiUlbW0zIiwgIiUlbW00IiwgIiVbU2hpZnRNYXNrXSIpCi0KLSAgICAgIC8vIERKUiAtIERpYWdvbmFsIEphZ2dpZSBSZWR1Y3Rpb24KLSAgICAgIC8vIEluIHRoZSBldmVudCB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgYW4gYXZlcmFnZSAoQm9iKSBwaXhlbCB3ZSBkbyBub3Qgd2FudCBhIGphZ2dlZAotICAgICAgLy8gc3RhaXIgc3RlcCBlZmZlY3QuICBUbyBjb21iYXQgdGhpcyB3ZSBhdmcgaW4gdGhlIDIgaG9yaXpvbnRhbGx5IGFkamFjZW4gcGl4ZWxzIGludG8gdGhlCi0gICAgICAvLyBpbnRlcnBvbGF0ZWQgQm9iIG1peC4gVGhpcyB3aWxsIGRvIGhvcml6b250YWwgc21vb3RoaW5nIGZvciBvbmx5IHRoZSBCb2InZCBwaXhlbHMuCi0KLSAgICAgICJtb3ZxICAlW0xhc3RBdmddLCAgICAgJSVtbTRcblx0IiAvLyB0aGUgYm9iIHZhbHVlIGZyb20gcHJldiBxd29yZCBpbiByb3cKLSAgICAgICJtb3ZxICAlJW1tNiwgICAgICAgICAgJVtMYXN0QXZnXVxuXHQiICAgIC8vIHNhdmUgZm9yIG5leHQgcGFzcwotICAgICAgInBzcmxxICQ0OCwgICAgICAgICAgICAlJW1tNFxuXHQiIC8vIHJpZ2h0IGp1c3RpZnkgMSBwaXhlbAotICAgICAgIm1vdnEgICUlbW02LCAgICAgICAgICAlJW1tN1xuXHQiIC8vIGNvcHkgb2Ygc2ltcGxlIGJvYiBwaXhlbAotICAgICAgInBzbGxxICQxNiwgICAgICAgICAgICAlJW1tN1xuXHQiIC8vIGxlZnQganVzdGlmeSAzIHBpeGVscwotICAgICAgInBvciAgICUlbW03LCAgICAgICAgICAlJW1tNFxuXHQiIC8vIGFuZCBjb21iaW5lCi0gICAgICAibW92cSAgKCUlIiBYQlggIiksICAgICAgJSVtbTVcblx0IiAgICAgICAvLyBuZXh0IGhvcml6IHF3b3JkIGZyb20gTDEKLSAgICAgIC8vIHBhdmdiICAgbW01LCBxd29yZCBwdHJbZWJ4K2VjeF0gLy8gbmV4dCBob3JpeiBxd29yZCBmcm9tIEwzLCB1c2UgbWFjcm8gYmVsb3cKLQotICAgICAgVl9QQVZHQiAoIiUlbW01IiwgIiglJSIgWEJYICIsJSUiIFhDWCAiKSIsICIlJW1tNyIsICIlW1NoaWZ0TWFza10iKQotICAgICAgInBzbGxxICQ0OCwgICAgICAgICAgICAlJW1tNVxuXHQiIC8vIGxlZnQganVzdCAxIHBpeGVsCi0gICAgICAibW92cSAgJSVtbTYsICAgICAgICAgICUlbW03XG5cdCIgLy8gYW5vdGhlciBjb3B5IG9mIHNpbXBsZSBib2IgcGl4ZWwKLSAgICAgICJwc3JscSAkMTYsICAgICAgICAgICAgJSVtbTdcblx0IiAvLyByaWdodCBqdXN0IDMgcGl4ZWxzCi0gICAgICAicG9yICAgJSVtbTcsICAgICAgICAgICUlbW01XG5cdCIgLy8gY29tYmluZQotICAgICAgLy8gcGF2Z2IgICAgICAgIG1tNCwgbW01ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZnIG9mIGZvcndhcmQgYW5kIHByZXYgYnkgMSBwaXhlbCwgdXNlIG1hY3JvCi0gICAgICBWX1BBVkdCICgiJSVtbTQiLCAiJSVtbTUiLCAiJSVtbTUiLCAiJVtTaGlmdE1hc2tdIikgICAgICAgLy8gbW01IGdldHMgbW9kaWZpZWQgaWYgTU1YCi0gICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHBhdmdiICAgICAgICBtbTYsIG1tNCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF2ZyBvZiBjZW50ZXIgYW5kIHN1cnJvdW5kIGludGVycCB2YWxzLCB1c2UgbWFjcm8KLSAgICAgIFZfUEFWR0IgKCIlJW1tNiIsICIlJW1tNCIsICIlJW1tNyIsICIlW1NoaWZ0TWFza10iKQotCi0gICAgICAvLyBEb24ndCBkbyBhbnkgbW9yZSBhdmVyYWdpbmcgdGhhbiBuZWVkZWQgZm9yIG1teC4gSXQgaHVydHMgcGVyZm9ybWFuY2UgYW5kIGNhdXNlcyByb3VuZGluZyBlcnJvcnMuCi0jaWZuZGVmIElTX01NWAotICAgICAgLy8gICAgICAgICAgcGF2Z2IgICAgICAgIG1tNCwgbW02ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMS80IGNlbnRlciwgMy80IGFkamFjZW50Ci0gICAgICBWX1BBVkdCICgiJSVtbTQiLCAiJSVtbTYiLCAiJSVtbTciLCAiJVtTaGlmdE1hc2tdIikKLSAgICAgIC8vICAgICAgICAgICAgICAgICAgICBwYXZnYiAgICAgICAgbW02LCBtbTQgICAgICAgICAgICAgICAgICAgICAgICAvLyAzLzggY2VudGVyLCA1LzggYWRqYWNlbnQKLSAgICAgIFZfUEFWR0IgKCIlJW1tNiIsICIlJW1tNCIsICIlJW1tNyIsICIlW1NoaWZ0TWFza10iKQotI2VuZGlmCi0KLSAgICAgIC8vIGdldCBhYnMgdmFsdWUgb2YgcG9zc2libGUgTDIgY29tYgotICAgICAgIm1vdnEgICAgJSVtbTYsICAgICAgICAlJW1tNFxuXHQiIC8vIHdvcmsgY29weSBvZiBpbnRlcnAgdmFsCi0gICAgICAibW92cSAgICAlJW1tMiwgICAgICAgICUlbW03XG5cdCIgLy8gTDIKLSAgICAgICJwc3VidXNiICUlbW00LCAgICAgICAgJSVtbTdcblx0IiAvLyBMMiAtIGF2ZwotICAgICAgIm1vdnEgICAgJSVtbTQsICAgICAgICAlJW1tNVxuXHQiIC8vIGF2ZwotICAgICAgInBzdWJ1c2IgJSVtbTIsICAgICAgICAlJW1tNVxuXHQiIC8vIGF2ZyAtIEwyCi0gICAgICAicG9yICAgICAlJW1tNywgICAgICAgICUlbW01XG5cdCIgLy8gYWJzKGF2Zy1MMikKLQotICAgICAgLy8gZ2V0IGFicyB2YWx1ZSBvZiBwb3NzaWJsZSBMMlAgY29tYgotICAgICAgIm1vdnEgICAgJSVtbTAsICAgICAgICAlJW1tN1xuXHQiIC8vIEwyUAotICAgICAgInBzdWJ1c2IgJSVtbTQsICAgICAgICAlJW1tN1xuXHQiIC8vIEwyUCAtIGF2ZwotICAgICAgInBzdWJ1c2IgJSVtbTAsICAgICAgICAlJW1tNFxuXHQiIC8vIGF2ZyAtIEwyUAotICAgICAgInBvciAgICAgJSVtbTcsICAgICAgICAlJW1tNFxuXHQiIC8vIGFicyhhdmctTDJQKQotCi0gICAgICAvLyB1c2UgTDIgb3IgTDJQIGRlcGVuZGluZyB1cG9uIHdoaWNoIG1ha2VzIHNtYWxsZXIgY29tYgotICAgICAgInBzdWJ1c2IgJSVtbTUsICAgICAgICAlJW1tNFxuXHQiIC8vIHNlZSBpZiBpdCBnb2VzIHRvIHplcm8KLSAgICAgICJwc3VidXNiICUlbW01LCAgICAgICAgJSVtbTVcblx0IiAvLyAwCi0gICAgICAicGNtcGVxYiAlJW1tNSwgICAgICAgICUlbW00XG5cdCIgLy8gaWYgKG1tND0wKSB0aGVuIEZGIGVsc2UgMAotICAgICAgInBjbXBlcWIgJSVtbTQsICAgICAgICAlJW1tNVxuXHQiIC8vIG9wcG9zaXRlIG9mIG1tNAotCi0gICAgICAvLyBpZiBDb21iKEwyUCkgPD0gQ29tYihMMikgdGhlbiBtbTQ9ZmYsIG1tNT0wIGVsc2UgbW00PTAsIG1tNSA9IDU1Ci0gICAgICAicGFuZCAgICAlJW1tMiwgICAgICAgICUlbW01XG5cdCIgLy8gdXNlIEwyIGlmIG1tNSA9PSBmZiwgZWxzZSAwCi0gICAgICAicGFuZCAgICAlJW1tMCwgICAgICAgICUlbW00XG5cdCIgLy8gdXNlIEwyUCBpZiBtbTQgPSBmZiwgZWxzZSAwCi0gICAgICAicG9yICAgICAlJW1tNSwgICAgICAgICUlbW00XG5cdCIgLy8gbWF5IHRoZSBiZXN0IHdpbgotCi0gICAgICAvLyBJbnZlbnRvcnk6IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgICAgIC8vIG1tMCA9IEwyUCAob3IgTDIpCi0gICAgICAvLyBtbTEgPSBMMQotICAgICAgLy8gbW0yID0gTDIgKG9yIEwyUCkKLSAgICAgIC8vIG1tMyA9IEwzCi0gICAgICAvLyBtbTQgPSB0aGUgYmVzdCBvZiBMMixMMlAgd2VhdmUgcGl4ZWwsIGJhc2UgdXBvbiBjb21iCi0gICAgICAvLyBtbTYgPSB0aGUgYXZnIGludGVycG9sYXRlZCB2YWx1ZSwgaWYgd2UgbmVlZCB0byB1c2UgaXQKLSAgICAgIC8vIExldCdzIG1lYXN1cmUgbW92ZW1lbnQsIGFzIGhvdyBtdWNoIHRoZSB3ZWF2ZSBwaXhlbCBoYXMgY2hhbmdlZAotCi0gICAgICAibW92cSAgICAlJW1tMiwgICAgICAgICUlbW03XG5cdCIKLSAgICAgICJwc3VidXNiICUlbW0wLCAgICAgICAgJSVtbTJcblx0IgotICAgICAgInBzdWJ1c2IgJSVtbTcsICAgICAgICAlJW1tMFxuXHQiCi0gICAgICAicG9yICAgICAlJW1tMiwgICAgICAgICUlbW0wXG5cdCIgICAvLyBhYnMgdmFsdWUgb2YgY2hhbmdlLCB1c2VkIGxhdGVyCi0KLSAgICAgIC8vIE5vdyBsZXRzIGNsaXAgb3VyIGNob3NlbiB2YWx1ZSB0byBiZSBub3Qgb3V0c2lkZSBvZiB0aGUgcmFuZ2UKLSAgICAgIC8vIG9mIHRoZSBoaWdoL2xvdyByYW5nZSBMMS1MMyBieSBtb3JlIHRoYW4gTWF4Q29tYi4KLSAgICAgIC8vIFRoaXMgYWxsb3dzIHNvbWUgY29tYiBidXQgbGltaXRzIHRoZSBkYW1hZ2VzIGFuZCBhbHNvIGFsbG93cyBtb3JlCi0gICAgICAvLyBkZXRhaWwgdGhhbiBhIGJvcmluZyBvdmVyc21vb3RoZWQgY2xpcC4KLQotICAgICAgIm1vdnEgICAgJSVtbTEsICAgICAgICAlJW1tMlxuXHQiIC8vIGNvcHkgTDEKLSAgICAgIC8vIHBtYXh1YiBtbTIsIG1tMyAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBtYWNybwotICAgICAgVl9QTUFYVUIgKCIlJW1tMiIsICIlJW1tMyIpICAgICAgIC8vIG5vdyA9IE1heChMMSxMMykKLSAgICAgICJtb3ZxICAgICUlbW0xLCAgICAgICAgJSVtbTVcblx0IiAvLyBjb3B5IEwxCi0gICAgICAvLyBwbWludWIgICAgICAgIG1tNSwgbW0zICAgICAgICAgICAgICAgICAgICAvLyBub3cgPSBNaW4oTDEsTDMpLCB1c2UgbWFjcm8KLSAgICAgIFZfUE1JTlVCICgiJSVtbTUiLCAiJSVtbTMiLCAiJSVtbTciKQotCi0gICAgICAvLyBhbGxvdyB0aGUgdmFsdWUgdG8gYmUgYWJvdmUgdGhlIGhpZ2ggb3IgYmVsb3cgdGhlIGxvdyBieSBhbXQgb2YgTWF4Q29tYgotICAgICAgInBzdWJ1c2IgJVtNYXhDb21iXSwgICAlJW1tNVxuXHQiIC8vIGxvd2VyIG1pbiBieSBkaWZmCi0gICAgICAicGFkZHVzYiAlW01heENvbWJdLCAgICUlbW0yXG5cdCIgLy8gaW5jcmVhc2UgbWF4IGJ5IGRpZmYKLSAgICAgIC8vIHBtYXh1YiAgICAgICAgbW00LCBtbTUgICAgICAgICAvLyBub3cgPSBNYXgoYmVzdCxNaW4oTDEsTDMpIHVzZSBtYWNybwotICAgICAgVl9QTUFYVUIgKCIlJW1tNCIsICIlJW1tNSIpCi0gICAgICAvLyBwbWludWIgICAgICAgIG1tNCwgbW0yICAgICAgICAgLy8gbm93ID0gTWluKCBNYXgoYmVzdCwgTWluKEwxLEwzKSwgTDIgKT1MMiBjbGlwcGVkCi0gICAgICBWX1BNSU5VQiAoIiUlbW00IiwgIiUlbW0yIiwgIiUlbW03IikKLQotICAgICAgLy8gQmxlbmQgd2VhdmUgcGl4ZWwgd2l0aCBib2IgcGl4ZWwsIGRlcGVuZGluZyBvbiBtb3Rpb24gdmFsIGluIG1tMAotICAgICAgInBzdWJ1c2IgJVtNb3Rpb25UaHJlc2hvbGRdLCAlJW1tMFxuXHQiICAgLy8gdGVzdCBUaHJlc2hvbGQsIGNsZWFyIGNocm9tYSBjaGFuZ2UKLSAgICAgICJwc3JsdyAgICQ4LCAgICAgICAgICAgJSVtbTBcblx0IiAvLyBkaXYgYnkgMjU2IHRvIGdldCB3ZWlnaHRlZCBhdmcKLSAgICAgICJwbXVsbHcgICVbTW90aW9uU2Vuc2VdLCAlJW1tMFxuXHQiICAgICAgIC8vIG11bCBieSB1c2VyIGZhY3Rvciwga2VlcCBsb3cgMTYgYml0cwotICAgICAgIm1vdnEgICAgJVtRVzI1Nl0sICUlbW03XG5cdCIKLSNpZmRlZiBJU19NTVhFWFQKLSAgICAgICJwbWluc3cgICUlbW03LCAgICAgICAgJSVtbTBcblx0IiAvLyBtYXggPSAyNTYKLSNlbHNlCi0gICAgICAicGFkZHVzdyAlW1FXMjU2Ql0sICAgICUlbW0wXG5cdCIgLy8gYWRkLCBtYXkgc2F0IGF0IGZmZi4uCi0gICAgICAicHN1YnVzdyAlW1FXMjU2Ql0sICAgICUlbW0wXG5cdCIgLy8gbm93ID0gTWluKEwxLDI1NikKLSNlbmRpZgotICAgICAgInBzdWJ1c3cgJSVtbTAsICAgICAgICAlJW1tN1xuXHQiIC8vIHNvIHRoZSAyIHN1bSB0byAyNTYsIHdlaWdodGVkIGF2ZwotICAgICAgIm1vdnEgICAgJSVtbTQsICAgICAgICAlJW1tMlxuXHQiIC8vIHNhdmUgd2VhdmUgY2hyb21hIGluZm8gYmVmb3JlIHRyYXNoaW5nCi0gICAgICAicGFuZCAgICAlW1lNYXNrXSwgICAgICUlbW00XG5cdCIgLy8ga2VlcCBvbmx5IGx1bWEgZnJvbSBjYWxjJ2QgdmFsdWUKLSAgICAgICJwc3JsdyAgICQ4LCAgICAgICAgICAgJSVtbTRcblx0IiAvLyBkaXYgYnkgMjU2IHRvIGdldCB3ZWlnaHRlZCBhdmcKLSAgICAgICJwbXVsbHcgICUlbW03LCAgICAgICAgJSVtbTRcblx0IiAvLyB1c2UgbW9yZSB3ZWF2ZSBmb3IgbGVzcyBtb3Rpb24KLSAgICAgICJwYW5kICAgICVbWU1hc2tdLCAgICAgJSVtbTZcblx0IiAvLyBrZWVwIG9ubHkgbHVtYSBmcm9tIGNhbGMnZCB2YWx1ZQotICAgICAgInBzcmx3ICAgJDgsICAgICAgICAgICAlJW1tNlxuXHQiIC8vIGRpdiBieSAyNTYgdG8gZ2V0IHdlaWdodGVkIGF2ZwotICAgICAgInBtdWxsdyAgJSVtbTAsICAgICAgICAlJW1tNlxuXHQiIC8vIHVzZSBtb3JlIGJvYiBmb3IgbGFyZ2UgbW90aW9uCi0gICAgICAicGFkZHVzdyAlJW1tNiwgICAgICAgICUlbW00XG5cdCIgLy8gY29tYmluZQotICAgICAgInBhbmQgICAgJVtZTWFza10sICAgICAlJW1tNFxuXHQiIC8vIGtlZXAgb25seSBsdW1hIGZyb20gY2FsYydkIHZhbHVlCi0gICAgICAvLyBjaHJvbWEgY29tZXMgZnJvbSB3ZWF2ZSBwaXhlbAotICAgICAgInBhbmQgICAgJVtVVk1hc2tdLCAgICAlJW1tMlxuXHQiIC8vIGtlZXAgY2hyb21hCi0gICAgICAicG9yICAgICAlJW1tNCwgICAgICAgICUlbW0yXG5cdCIgLy8gYW5kIGNvbWJpbmUKLSAgICAgIFZfTU9WTlRRICgiKCUlIiBYREkgIikiLCAiJSVtbTIiKSAvLyBtb3ZlIGluIG91ciBjbGlwcGVkIGJlc3QsIHVzZSBtYWNybwotICAgICAgLy8gYnVtcCBwdHJzIGFuZCBsb29wCi0gICAgICBMRUFYICIgICAgOCglJSIgWEFYICIpLCAgICUlIiBYQVggIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWEJYICIpLCAgICUlIiBYQlggIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWERYICIpLCAgICUlIiBYRFggIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWERJICIpLCAgICUlIiBYREkgIlxuXHQiCi0gICAgICBMRUFYICIgICAgOCglJSIgWFNJICIpLCAgICUlIiBYU0kgIlxuXHQiCi0gICAgICBERUNYICIgICAgJVtMb29wQ3RyXVxuXHQiCi0gICAgICAKLSAgICAgICJqZyAgICAgIDFiXG5cdCIgICAvLyBsb29wIGlmIG5vdCB0byBsYXN0IGxpbmUKLSAgICAgIC8vIG5vdGUgUC1JSUkgZGVmYXVsdCBhc3N1bWVzIGJhY2t3YXJkIGJyYW5jaGVzIHRha2VuCi0gICAgICAiamwgICAgICAxZlxuXHQiICAgICAgICAgIC8vIGRvbmUKLSAgICAgIE1PVlggIiAgICAlJSIgWEFYICIsICAgICAgJSUiIFhCWCAiXG5cdCIgIC8vIHNoYXJwbmVzcyBsb29rYWhlYWQgMSBieXRlIG9ubHksIGJlIHdyb25nIG9uIDEKLSAgICAgICJqbXAgICAgIDFiXG5cdCIKLSAgICAgIAotICAgICAgIjE6XG5cdCIgICAgICAKLSAgICAgIE1PVlggIiAlW29sZGJ4XSwgJSUiIFhCWCAiXG5cdCIKLSAgICAgICJlbW1zXG5cdCI6ICAgICAvKiBubyBvdXRwdXRzICovCi0KLSAgICAgIDpbTGFzdEF2Z10gIm0iIChMYXN0QXZnKSwKLSAgICAgICBbTDFdICJtIiAoTDEpLAotICAgICAgIFtMM10gIm0iIChMMyksCi0gICAgICAgW0wyUF0gIm0iIChMMlApLAotICAgICAgIFtMMl0gIm0iIChMMiksCi0gICAgICAgW0Rlc3RdICJtIiAoRGVzdCksCi0gICAgICAgW1NoaWZ0TWFza10gIm0iIChTaGlmdE1hc2spLAotICAgICAgIFtNYXhDb21iXSAibSIgKE1heENvbWIpLAotICAgICAgIFtNb3Rpb25UaHJlc2hvbGRdICJtIiAoTW90aW9uVGhyZXNob2xkKSwKLSAgICAgICBbTW90aW9uU2Vuc2VdICJtIiAoTW90aW9uU2Vuc2UpLAotICAgICAgIFtRVzI1NkJdICJtIiAoUVcyNTZCKSwKLSAgICAgICBbWU1hc2tdICJtIiAoWU1hc2spLAotICAgICAgIFtVVk1hc2tdICJtIiAoVVZNYXNrKSwKLSAgICAgICBbTG9vcEN0cl0gIm0iIChMb29wQ3RyKSwKLSAgICAgICBbUVcyNTZdICJtIiAoUVcyNTYpLAotICAgICAgIFtvbGRieF0gIm0iIChvbGRieCkKLSAgICAgIDogWEFYLCBYQ1gsIFhEWCwgWFNJLCBYREksCi0gICAgICAic3QiLCAic3QoMSkiLCAic3QoMikiLCAic3QoMykiLCAic3QoNCkiLCAic3QoNSkiLCAic3QoNikiLCAic3QoNykiLAotI2lmZGVmIF9fTU1YX18KLSAgICAgICJtbTAiLCAibW0xIiwgIm1tMiIsICJtbTMiLCAibW00IiwgIm1tNSIsICJtbTYiLCAibW03IiwKLSNlbmRpZgotICAgICAgIm1lbW9yeSIsICJjYyIpOwotfQotCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWguYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWY3NWVlLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvZ3JlZWR5aC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NiArMCwwIEBACi0vKgotICoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJpbGx5IEJpZ2dzIDx2ZWt0b3JAZHVtYnRlcm0ubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBSZWxpY2Vuc2VkIGZvciBHU3RyZWFtZXIgZnJvbSBHUEwgdG8gTEdQTCB3aXRoIHBlcm1pdCBmcm9tIEJpbGx5IEJpZ2dzLgotICogU2VlOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NzgKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3JlZWR5aG1hY3Jvcy5oIgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAicGx1Z2lucy5oIgotI2luY2x1ZGUgImdzdGRlaW50ZXJsYWNlbWV0aG9kLmgiCi0jaWZkZWYgSEFWRV9PUkMKLSNpbmNsdWRlIDxvcmMvb3JjLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0gJKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0gob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfSF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0gpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9ILCBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUhDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0gob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9ILCBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUgpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfSCwgR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlIQ2xhc3MpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IX0NBU1Qob2JqKQkoKEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5SCopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kIHBhcmVudDsKLQotICBndWludCBtYXhfY29tYiwgbW90aW9uX3RocmVzaG9sZCwgbW90aW9uX3NlbnNlOwotfSBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUg7Ci0KLXR5cGVkZWYgdm9pZCAoKlNjYW5saW5lRnVuY3Rpb24pIChHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKiBzZWxmLAotICAgIGNvbnN0IGd1aW50OCAqIEwyLCBjb25zdCBndWludDggKiBMMSwgY29uc3QgZ3VpbnQ4ICogTDMsIGNvbnN0IGd1aW50OCAqIEwyUCwKLSAgICBndWludDggKiBEZXN0LCBnaW50IHdpZHRoKTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyBwYXJlbnRfY2xhc3M7Ci0gIFNjYW5saW5lRnVuY3Rpb24gc2NhbmxpbmVfeXV5MjsgICAgICAgLyogVGhpcyBpcyBmb3IgWVZZVSB0b28gKi8KLSAgU2NhbmxpbmVGdW5jdGlvbiBzY2FubGluZV91eXZ5OwotICBTY2FubGluZUZ1bmN0aW9uIHNjYW5saW5lX2F5dXY7Ci0gIFNjYW5saW5lRnVuY3Rpb24gc2NhbmxpbmVfcGxhbmFyX3k7Ci0gIFNjYW5saW5lRnVuY3Rpb24gc2NhbmxpbmVfcGxhbmFyX3V2OwotfSBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUhDbGFzczsKLQotc3RhdGljIHZvaWQKLWdyZWVkeWhfc2NhbmxpbmVfQ19heXV2IChHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKiBzZWxmLCBjb25zdCBndWludDggKiBMMSwKLSAgICBjb25zdCBndWludDggKiBMMiwgY29uc3QgZ3VpbnQ4ICogTDMsIGNvbnN0IGd1aW50OCAqIEwyUCwgZ3VpbnQ4ICogRGVzdCwKLSAgICBnaW50IHdpZHRoKQotewotICBnaW50IFBvcywgQ29tcDsKLSAgZ3VpbnQ4IGwxLCBsMV8xLCBsMywgbDNfMTsKLSAgZ3VpbnQ4IGF2ZywgYXZnXzE7Ci0gIGd1aW50OCBhdmdfXzFbNF0gPSB7IDAsIH07Ci0gIGd1aW50OCBhdmdfczsKLSAgZ3VpbnQ4IGF2Z19zYzsKLSAgZ3VpbnQ4IGJlc3Q7Ci0gIGd1aW50MTYgbW92OwotICBndWludDggb3V0OwotICBndWludDggbDIsIGxwMjsKLSAgZ3VpbnQ4IGwyX2RpZmYsIGxwMl9kaWZmOwotICBndWludDggbWluLCBtYXg7Ci0gIGd1aW50IG1heF9jb21iID0gc2VsZi0+bWF4X2NvbWI7Ci0gIGd1aW50IG1vdGlvbl9zZW5zZSA9IHNlbGYtPm1vdGlvbl9zZW5zZTsKLSAgZ3VpbnQgbW90aW9uX3RocmVzaG9sZCA9IHNlbGYtPm1vdGlvbl90aHJlc2hvbGQ7Ci0KLSAgd2lkdGggLz0gNDsKLSAgZm9yIChQb3MgPSAwOyBQb3MgPCB3aWR0aDsgUG9zKyspIHsKLSAgICBmb3IgKENvbXAgPSAwOyBDb21wIDwgNDsgQ29tcCsrKSB7Ci0gICAgICBsMSA9IEwxWzBdOwotICAgICAgbDMgPSBMM1swXTsKLQotICAgICAgaWYgKFBvcyA9PSB3aWR0aCAtIDEpIHsKLSAgICAgICAgbDFfMSA9IGwxOwotICAgICAgICBsM18xID0gbDM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBsMV8xID0gTDFbNF07Ci0gICAgICAgIGwzXzEgPSBMM1s0XTsKLSAgICAgIH0KLQotICAgICAgLyogQXZlcmFnZSBvZiBMMSBhbmQgTDMgKi8KLSAgICAgIGF2ZyA9IChsMSArIGwzKSAvIDI7Ci0KLSAgICAgIGlmIChQb3MgPT0gMCkgewotICAgICAgICBhdmdfXzFbQ29tcF0gPSBhdmc7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEF2ZXJhZ2Ugb2YgbmV4dCBMMSBhbmQgbmV4dCBMMyAqLwotICAgICAgYXZnXzEgPSAobDFfMSArIGwzXzEpIC8gMjsKLQotICAgICAgLyogQ2FsY3VsYXRlIGF2ZXJhZ2Ugb2Ygb25lIHBpeGVsIGZvcndhcmQgYW5kIHByZXZpb3VzICovCi0gICAgICBhdmdfcyA9IChhdmdfXzFbQ29tcF0gKyBhdmdfMSkgLyAyOwotCi0gICAgICAvKiBDYWxjdWxhdGUgYXZlcmFnZSBvZiBjZW50ZXIgYW5kIHN1cnJvdW5kaW5nIHBpeGVscyAqLwotICAgICAgYXZnX3NjID0gKGF2ZyArIGF2Z19zKSAvIDI7Ci0KLSAgICAgIC8qIG1vdmUgZm9yd2FyZCAqLwotICAgICAgYXZnX18xW0NvbXBdID0gYXZnOwotCi0gICAgICAvKiBHZXQgYmVzdCBMMi9MMlAsIGkuZS4gbGVhc3QgZGlmZiBmcm9tIGFib3ZlIGF2ZXJhZ2UgKi8KLSAgICAgIGwyID0gTDJbMF07Ci0gICAgICBscDIgPSBMMlBbMF07Ci0KLSAgICAgIGwyX2RpZmYgPSBBQlMgKGwyIC0gYXZnX3NjKTsKLQotICAgICAgbHAyX2RpZmYgPSBBQlMgKGxwMiAtIGF2Z19zYyk7Ci0KLSAgICAgIGlmIChsMl9kaWZmID4gbHAyX2RpZmYpCi0gICAgICAgIGJlc3QgPSBscDI7Ci0gICAgICBlbHNlCi0gICAgICAgIGJlc3QgPSBsMjsKLQotICAgICAgLyogQ2xpcCB0aGlzIGJlc3QgTDIvTDJQIGJ5IEwxL0wzIGFuZCBhbGxvdyB0byBkaWZmZXIgYnkgR3JlZWR5TWF4Q29tYiAqLwotICAgICAgbWF4ID0gTUFYIChsMSwgbDMpOwotICAgICAgbWluID0gTUlOIChsMSwgbDMpOwotCi0gICAgICBpZiAobWF4IDwgMjU2IC0gbWF4X2NvbWIpCi0gICAgICAgIG1heCArPSBtYXhfY29tYjsKLSAgICAgIGVsc2UKLSAgICAgICAgbWF4ID0gMjU1OwotCi0gICAgICBpZiAobWluID4gbWF4X2NvbWIpCi0gICAgICAgIG1pbiAtPSBtYXhfY29tYjsKLSAgICAgIGVsc2UKLSAgICAgICAgbWluID0gMDsKLQotICAgICAgb3V0ID0gQ0xBTVAgKGJlc3QsIG1pbiwgbWF4KTsKLQotICAgICAgaWYgKENvbXAgPCAyKSB7Ci0gICAgICAgIC8qIERvIG1vdGlvbiBjb21wZW5zYXRpb24gZm9yIGx1bWEsIGkuZS4gaG93IG11Y2gKLSAgICAgICAgICogdGhlIHdlYXZlIHBpeGVsIGRpZmZlcnMgKi8KLSAgICAgICAgbW92ID0gQUJTIChsMiAtIGxwMik7Ci0gICAgICAgIGlmIChtb3YgPiBtb3Rpb25fdGhyZXNob2xkKQotICAgICAgICAgIG1vdiAtPSBtb3Rpb25fdGhyZXNob2xkOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbW92ID0gMDsKLQotICAgICAgICBtb3YgPSBtb3YgKiBtb3Rpb25fc2Vuc2U7Ci0gICAgICAgIGlmIChtb3YgPiAyNTYpCi0gICAgICAgICAgbW92ID0gMjU2OwotCi0gICAgICAgIC8qIFdlaWdodGVkIHN1bSBvbiBjbGlwcGVkIHdlYXZlIHBpeGVsIGFuZCBhdmVyYWdlICovCi0gICAgICAgIG91dCA9IChvdXQgKiAoMjU2IC0gbW92KSArIGF2Z19zYyAqIG1vdikgLyAyNTY7Ci0gICAgICB9Ci0KLSAgICAgIERlc3RbMF0gPSBvdXQ7Ci0KLSAgICAgIERlc3QgKz0gMTsKLSAgICAgIEwxICs9IDE7Ci0gICAgICBMMiArPSAxOwotICAgICAgTDMgKz0gMTsKLSAgICAgIEwyUCArPSAxOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3JlZWR5aF9zY2FubGluZV9DX3l1eTIgKEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5SCAqIHNlbGYsIGNvbnN0IGd1aW50OCAqIEwxLAotICAgIGNvbnN0IGd1aW50OCAqIEwyLCBjb25zdCBndWludDggKiBMMywgY29uc3QgZ3VpbnQ4ICogTDJQLCBndWludDggKiBEZXN0LAotICAgIGdpbnQgd2lkdGgpCi17Ci0gIGdpbnQgUG9zOwotICBndWludDggbDFfbCwgbDFfMV9sLCBsM19sLCBsM18xX2w7Ci0gIGd1aW50OCBsMV9jLCBsMV8xX2MsIGwzX2MsIGwzXzFfYzsKLSAgZ3VpbnQ4IGF2Z19sLCBhdmdfYywgYXZnX2xfMSwgYXZnX2NfMTsKLSAgZ3VpbnQ4IGF2Z19sX18xID0gMCwgYXZnX2NfXzEgPSAwOwotICBndWludDggYXZnX3NfbCwgYXZnX3NfYzsKLSAgZ3VpbnQ4IGF2Z19zY19sLCBhdmdfc2NfYzsKLSAgZ3VpbnQ4IGJlc3RfbCwgYmVzdF9jOwotICBndWludDE2IG1vdl9sOwotICBndWludDggb3V0X2wsIG91dF9jOwotICBndWludDggbDJfbCwgbDJfYywgbHAyX2wsIGxwMl9jOwotICBndWludDggbDJfbF9kaWZmLCBsMl9jX2RpZmYsIGxwMl9sX2RpZmYsIGxwMl9jX2RpZmY7Ci0gIGd1aW50OCBtaW5fbCwgbWluX2MsIG1heF9sLCBtYXhfYzsKLSAgZ3VpbnQgbWF4X2NvbWIgPSBzZWxmLT5tYXhfY29tYjsKLSAgZ3VpbnQgbW90aW9uX3NlbnNlID0gc2VsZi0+bW90aW9uX3NlbnNlOwotICBndWludCBtb3Rpb25fdGhyZXNob2xkID0gc2VsZi0+bW90aW9uX3RocmVzaG9sZDsKLQotICB3aWR0aCAvPSAyOwotICBmb3IgKFBvcyA9IDA7IFBvcyA8IHdpZHRoOyBQb3MrKykgewotICAgIGwxX2wgPSBMMVswXTsKLSAgICBsMV9jID0gTDFbMV07Ci0gICAgbDNfbCA9IEwzWzBdOwotICAgIGwzX2MgPSBMM1sxXTsKLQotICAgIGlmIChQb3MgPT0gd2lkdGggLSAxKSB7Ci0gICAgICBsMV8xX2wgPSBsMV9sOwotICAgICAgbDFfMV9jID0gbDFfYzsKLSAgICAgIGwzXzFfbCA9IGwzX2w7Ci0gICAgICBsM18xX2MgPSBsM19jOwotICAgIH0gZWxzZSB7Ci0gICAgICBsMV8xX2wgPSBMMVsyXTsKLSAgICAgIGwxXzFfYyA9IEwxWzNdOwotICAgICAgbDNfMV9sID0gTDNbMl07Ci0gICAgICBsM18xX2MgPSBMM1szXTsKLSAgICB9Ci0KLSAgICAvKiBBdmVyYWdlIG9mIEwxIGFuZCBMMyAqLwotICAgIGF2Z19sID0gKGwxX2wgKyBsM19sKSAvIDI7Ci0gICAgYXZnX2MgPSAobDFfYyArIGwzX2MpIC8gMjsKLQotICAgIGlmIChQb3MgPT0gMCkgewotICAgICAgYXZnX2xfXzEgPSBhdmdfbDsKLSAgICAgIGF2Z19jX18xID0gYXZnX2M7Ci0gICAgfQotCi0gICAgLyogQXZlcmFnZSBvZiBuZXh0IEwxIGFuZCBuZXh0IEwzICovCi0gICAgYXZnX2xfMSA9IChsMV8xX2wgKyBsM18xX2wpIC8gMjsKLSAgICBhdmdfY18xID0gKGwxXzFfYyArIGwzXzFfYykgLyAyOwotCi0gICAgLyogQ2FsY3VsYXRlIGF2ZXJhZ2Ugb2Ygb25lIHBpeGVsIGZvcndhcmQgYW5kIHByZXZpb3VzICovCi0gICAgYXZnX3NfbCA9IChhdmdfbF9fMSArIGF2Z19sXzEpIC8gMjsKLSAgICBhdmdfc19jID0gKGF2Z19jX18xICsgYXZnX2NfMSkgLyAyOwotCi0gICAgLyogQ2FsY3VsYXRlIGF2ZXJhZ2Ugb2YgY2VudGVyIGFuZCBzdXJyb3VuZGluZyBwaXhlbHMgKi8KLSAgICBhdmdfc2NfbCA9IChhdmdfbCArIGF2Z19zX2wpIC8gMjsKLSAgICBhdmdfc2NfYyA9IChhdmdfYyArIGF2Z19zX2MpIC8gMjsKLQotICAgIC8qIG1vdmUgZm9yd2FyZCAqLwotICAgIGF2Z19sX18xID0gYXZnX2w7Ci0gICAgYXZnX2NfXzEgPSBhdmdfYzsKLQotICAgIC8qIEdldCBiZXN0IEwyL0wyUCwgaS5lLiBsZWFzdCBkaWZmIGZyb20gYWJvdmUgYXZlcmFnZSAqLwotICAgIGwyX2wgPSBMMlswXTsKLSAgICBsMl9jID0gTDJbMV07Ci0gICAgbHAyX2wgPSBMMlBbMF07Ci0gICAgbHAyX2MgPSBMMlBbMV07Ci0KLSAgICBsMl9sX2RpZmYgPSBBQlMgKGwyX2wgLSBhdmdfc2NfbCk7Ci0gICAgbDJfY19kaWZmID0gQUJTIChsMl9jIC0gYXZnX3NjX2MpOwotCi0gICAgbHAyX2xfZGlmZiA9IEFCUyAobHAyX2wgLSBhdmdfc2NfbCk7Ci0gICAgbHAyX2NfZGlmZiA9IEFCUyAobHAyX2MgLSBhdmdfc2NfYyk7Ci0KLSAgICBpZiAobDJfbF9kaWZmID4gbHAyX2xfZGlmZikKLSAgICAgIGJlc3RfbCA9IGxwMl9sOwotICAgIGVsc2UKLSAgICAgIGJlc3RfbCA9IGwyX2w7Ci0KLSAgICBpZiAobDJfY19kaWZmID4gbHAyX2NfZGlmZikKLSAgICAgIGJlc3RfYyA9IGxwMl9jOwotICAgIGVsc2UKLSAgICAgIGJlc3RfYyA9IGwyX2M7Ci0KLSAgICAvKiBDbGlwIHRoaXMgYmVzdCBMMi9MMlAgYnkgTDEvTDMgYW5kIGFsbG93IHRvIGRpZmZlciBieSBHcmVlZHlNYXhDb21iICovCi0gICAgbWF4X2wgPSBNQVggKGwxX2wsIGwzX2wpOwotICAgIG1pbl9sID0gTUlOIChsMV9sLCBsM19sKTsKLQotICAgIGlmIChtYXhfbCA8IDI1NiAtIG1heF9jb21iKQotICAgICAgbWF4X2wgKz0gbWF4X2NvbWI7Ci0gICAgZWxzZQotICAgICAgbWF4X2wgPSAyNTU7Ci0KLSAgICBpZiAobWluX2wgPiBtYXhfY29tYikKLSAgICAgIG1pbl9sIC09IG1heF9jb21iOwotICAgIGVsc2UKLSAgICAgIG1pbl9sID0gMDsKLQotICAgIG1heF9jID0gTUFYIChsMV9jLCBsM19jKTsKLSAgICBtaW5fYyA9IE1JTiAobDFfYywgbDNfYyk7Ci0KLSAgICBpZiAobWF4X2MgPCAyNTYgLSBtYXhfY29tYikKLSAgICAgIG1heF9jICs9IG1heF9jb21iOwotICAgIGVsc2UKLSAgICAgIG1heF9jID0gMjU1OwotCi0gICAgaWYgKG1pbl9jID4gbWF4X2NvbWIpCi0gICAgICBtaW5fYyAtPSBtYXhfY29tYjsKLSAgICBlbHNlCi0gICAgICBtaW5fYyA9IDA7Ci0KLSAgICBvdXRfbCA9IENMQU1QIChiZXN0X2wsIG1pbl9sLCBtYXhfbCk7Ci0gICAgb3V0X2MgPSBDTEFNUCAoYmVzdF9jLCBtaW5fYywgbWF4X2MpOwotCi0gICAgLyogRG8gbW90aW9uIGNvbXBlbnNhdGlvbiBmb3IgbHVtYSwgaS5lLiBob3cgbXVjaAotICAgICAqIHRoZSB3ZWF2ZSBwaXhlbCBkaWZmZXJzICovCi0gICAgbW92X2wgPSBBQlMgKGwyX2wgLSBscDJfbCk7Ci0gICAgaWYgKG1vdl9sID4gbW90aW9uX3RocmVzaG9sZCkKLSAgICAgIG1vdl9sIC09IG1vdGlvbl90aHJlc2hvbGQ7Ci0gICAgZWxzZQotICAgICAgbW92X2wgPSAwOwotCi0gICAgbW92X2wgPSBtb3ZfbCAqIG1vdGlvbl9zZW5zZTsKLSAgICBpZiAobW92X2wgPiAyNTYpCi0gICAgICBtb3ZfbCA9IDI1NjsKLQotICAgIC8qIFdlaWdodGVkIHN1bSBvbiBjbGlwcGVkIHdlYXZlIHBpeGVsIGFuZCBhdmVyYWdlICovCi0gICAgb3V0X2wgPSAob3V0X2wgKiAoMjU2IC0gbW92X2wpICsgYXZnX3NjX2wgKiBtb3ZfbCkgLyAyNTY7Ci0KLSAgICBEZXN0WzBdID0gb3V0X2w7Ci0gICAgRGVzdFsxXSA9IG91dF9jOwotCi0gICAgRGVzdCArPSAyOwotICAgIEwxICs9IDI7Ci0gICAgTDIgKz0gMjsKLSAgICBMMyArPSAyOwotICAgIEwyUCArPSAyOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ncmVlZHloX3NjYW5saW5lX0NfdXl2eSAoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlIICogc2VsZiwgY29uc3QgZ3VpbnQ4ICogTDEsCi0gICAgY29uc3QgZ3VpbnQ4ICogTDIsIGNvbnN0IGd1aW50OCAqIEwzLCBjb25zdCBndWludDggKiBMMlAsIGd1aW50OCAqIERlc3QsCi0gICAgZ2ludCB3aWR0aCkKLXsKLSAgZ2ludCBQb3M7Ci0gIGd1aW50OCBsMV9sLCBsMV8xX2wsIGwzX2wsIGwzXzFfbDsKLSAgZ3VpbnQ4IGwxX2MsIGwxXzFfYywgbDNfYywgbDNfMV9jOwotICBndWludDggYXZnX2wsIGF2Z19jLCBhdmdfbF8xLCBhdmdfY18xOwotICBndWludDggYXZnX2xfXzEgPSAwLCBhdmdfY19fMSA9IDA7Ci0gIGd1aW50OCBhdmdfc19sLCBhdmdfc19jOwotICBndWludDggYXZnX3NjX2wsIGF2Z19zY19jOwotICBndWludDggYmVzdF9sLCBiZXN0X2M7Ci0gIGd1aW50MTYgbW92X2w7Ci0gIGd1aW50OCBvdXRfbCwgb3V0X2M7Ci0gIGd1aW50OCBsMl9sLCBsMl9jLCBscDJfbCwgbHAyX2M7Ci0gIGd1aW50OCBsMl9sX2RpZmYsIGwyX2NfZGlmZiwgbHAyX2xfZGlmZiwgbHAyX2NfZGlmZjsKLSAgZ3VpbnQ4IG1pbl9sLCBtaW5fYywgbWF4X2wsIG1heF9jOwotICBndWludCBtYXhfY29tYiA9IHNlbGYtPm1heF9jb21iOwotICBndWludCBtb3Rpb25fc2Vuc2UgPSBzZWxmLT5tb3Rpb25fc2Vuc2U7Ci0gIGd1aW50IG1vdGlvbl90aHJlc2hvbGQgPSBzZWxmLT5tb3Rpb25fdGhyZXNob2xkOwotCi0gIHdpZHRoIC89IDI7Ci0gIGZvciAoUG9zID0gMDsgUG9zIDwgd2lkdGg7IFBvcysrKSB7Ci0gICAgbDFfbCA9IEwxWzFdOwotICAgIGwxX2MgPSBMMVswXTsKLSAgICBsM19sID0gTDNbMV07Ci0gICAgbDNfYyA9IEwzWzBdOwotCi0gICAgaWYgKFBvcyA9PSB3aWR0aCAtIDEpIHsKLSAgICAgIGwxXzFfbCA9IGwxX2w7Ci0gICAgICBsMV8xX2MgPSBsMV9jOwotICAgICAgbDNfMV9sID0gbDNfbDsKLSAgICAgIGwzXzFfYyA9IGwzX2M7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGwxXzFfbCA9IEwxWzNdOwotICAgICAgbDFfMV9jID0gTDFbMl07Ci0gICAgICBsM18xX2wgPSBMM1szXTsKLSAgICAgIGwzXzFfYyA9IEwzWzJdOwotICAgIH0KLQotICAgIC8qIEF2ZXJhZ2Ugb2YgTDEgYW5kIEwzICovCi0gICAgYXZnX2wgPSAobDFfbCArIGwzX2wpIC8gMjsKLSAgICBhdmdfYyA9IChsMV9jICsgbDNfYykgLyAyOwotCi0gICAgaWYgKFBvcyA9PSAwKSB7Ci0gICAgICBhdmdfbF9fMSA9IGF2Z19sOwotICAgICAgYXZnX2NfXzEgPSBhdmdfYzsKLSAgICB9Ci0KLSAgICAvKiBBdmVyYWdlIG9mIG5leHQgTDEgYW5kIG5leHQgTDMgKi8KLSAgICBhdmdfbF8xID0gKGwxXzFfbCArIGwzXzFfbCkgLyAyOwotICAgIGF2Z19jXzEgPSAobDFfMV9jICsgbDNfMV9jKSAvIDI7Ci0KLSAgICAvKiBDYWxjdWxhdGUgYXZlcmFnZSBvZiBvbmUgcGl4ZWwgZm9yd2FyZCBhbmQgcHJldmlvdXMgKi8KLSAgICBhdmdfc19sID0gKGF2Z19sX18xICsgYXZnX2xfMSkgLyAyOwotICAgIGF2Z19zX2MgPSAoYXZnX2NfXzEgKyBhdmdfY18xKSAvIDI7Ci0KLSAgICAvKiBDYWxjdWxhdGUgYXZlcmFnZSBvZiBjZW50ZXIgYW5kIHN1cnJvdW5kaW5nIHBpeGVscyAqLwotICAgIGF2Z19zY19sID0gKGF2Z19sICsgYXZnX3NfbCkgLyAyOwotICAgIGF2Z19zY19jID0gKGF2Z19jICsgYXZnX3NfYykgLyAyOwotCi0gICAgLyogbW92ZSBmb3J3YXJkICovCi0gICAgYXZnX2xfXzEgPSBhdmdfbDsKLSAgICBhdmdfY19fMSA9IGF2Z19jOwotCi0gICAgLyogR2V0IGJlc3QgTDIvTDJQLCBpLmUuIGxlYXN0IGRpZmYgZnJvbSBhYm92ZSBhdmVyYWdlICovCi0gICAgbDJfbCA9IEwyWzFdOwotICAgIGwyX2MgPSBMMlswXTsKLSAgICBscDJfbCA9IEwyUFsxXTsKLSAgICBscDJfYyA9IEwyUFswXTsKLQotICAgIGwyX2xfZGlmZiA9IEFCUyAobDJfbCAtIGF2Z19zY19sKTsKLSAgICBsMl9jX2RpZmYgPSBBQlMgKGwyX2MgLSBhdmdfc2NfYyk7Ci0KLSAgICBscDJfbF9kaWZmID0gQUJTIChscDJfbCAtIGF2Z19zY19sKTsKLSAgICBscDJfY19kaWZmID0gQUJTIChscDJfYyAtIGF2Z19zY19jKTsKLQotICAgIGlmIChsMl9sX2RpZmYgPiBscDJfbF9kaWZmKQotICAgICAgYmVzdF9sID0gbHAyX2w7Ci0gICAgZWxzZQotICAgICAgYmVzdF9sID0gbDJfbDsKLQotICAgIGlmIChsMl9jX2RpZmYgPiBscDJfY19kaWZmKQotICAgICAgYmVzdF9jID0gbHAyX2M7Ci0gICAgZWxzZQotICAgICAgYmVzdF9jID0gbDJfYzsKLQotICAgIC8qIENsaXAgdGhpcyBiZXN0IEwyL0wyUCBieSBMMS9MMyBhbmQgYWxsb3cgdG8gZGlmZmVyIGJ5IEdyZWVkeU1heENvbWIgKi8KLSAgICBtYXhfbCA9IE1BWCAobDFfbCwgbDNfbCk7Ci0gICAgbWluX2wgPSBNSU4gKGwxX2wsIGwzX2wpOwotCi0gICAgaWYgKG1heF9sIDwgMjU2IC0gbWF4X2NvbWIpCi0gICAgICBtYXhfbCArPSBtYXhfY29tYjsKLSAgICBlbHNlCi0gICAgICBtYXhfbCA9IDI1NTsKLQotICAgIGlmIChtaW5fbCA+IG1heF9jb21iKQotICAgICAgbWluX2wgLT0gbWF4X2NvbWI7Ci0gICAgZWxzZQotICAgICAgbWluX2wgPSAwOwotCi0gICAgbWF4X2MgPSBNQVggKGwxX2MsIGwzX2MpOwotICAgIG1pbl9jID0gTUlOIChsMV9jLCBsM19jKTsKLQotICAgIGlmIChtYXhfYyA8IDI1NiAtIG1heF9jb21iKQotICAgICAgbWF4X2MgKz0gbWF4X2NvbWI7Ci0gICAgZWxzZQotICAgICAgbWF4X2MgPSAyNTU7Ci0KLSAgICBpZiAobWluX2MgPiBtYXhfY29tYikKLSAgICAgIG1pbl9jIC09IG1heF9jb21iOwotICAgIGVsc2UKLSAgICAgIG1pbl9jID0gMDsKLQotICAgIG91dF9sID0gQ0xBTVAgKGJlc3RfbCwgbWluX2wsIG1heF9sKTsKLSAgICBvdXRfYyA9IENMQU1QIChiZXN0X2MsIG1pbl9jLCBtYXhfYyk7Ci0KLSAgICAvKiBEbyBtb3Rpb24gY29tcGVuc2F0aW9uIGZvciBsdW1hLCBpLmUuIGhvdyBtdWNoCi0gICAgICogdGhlIHdlYXZlIHBpeGVsIGRpZmZlcnMgKi8KLSAgICBtb3ZfbCA9IEFCUyAobDJfbCAtIGxwMl9sKTsKLSAgICBpZiAobW92X2wgPiBtb3Rpb25fdGhyZXNob2xkKQotICAgICAgbW92X2wgLT0gbW90aW9uX3RocmVzaG9sZDsKLSAgICBlbHNlCi0gICAgICBtb3ZfbCA9IDA7Ci0KLSAgICBtb3ZfbCA9IG1vdl9sICogbW90aW9uX3NlbnNlOwotICAgIGlmIChtb3ZfbCA+IDI1NikKLSAgICAgIG1vdl9sID0gMjU2OwotCi0gICAgLyogV2VpZ2h0ZWQgc3VtIG9uIGNsaXBwZWQgd2VhdmUgcGl4ZWwgYW5kIGF2ZXJhZ2UgKi8KLSAgICBvdXRfbCA9IChvdXRfbCAqICgyNTYgLSBtb3ZfbCkgKyBhdmdfc2NfbCAqIG1vdl9sKSAvIDI1NjsKLQotICAgIERlc3RbMV0gPSBvdXRfbDsKLSAgICBEZXN0WzBdID0gb3V0X2M7Ci0KLSAgICBEZXN0ICs9IDI7Ci0gICAgTDEgKz0gMjsKLSAgICBMMiArPSAyOwotICAgIEwzICs9IDI7Ci0gICAgTDJQICs9IDI7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdyZWVkeWhfc2NhbmxpbmVfQ19wbGFuYXJfeSAoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlIICogc2VsZiwKLSAgICBjb25zdCBndWludDggKiBMMSwgY29uc3QgZ3VpbnQ4ICogTDIsIGNvbnN0IGd1aW50OCAqIEwzLCBjb25zdCBndWludDggKiBMMlAsCi0gICAgZ3VpbnQ4ICogRGVzdCwgZ2ludCB3aWR0aCkKLXsKLSAgZ2ludCBQb3M7Ci0gIGd1aW50OCBsMSwgbDFfMSwgbDMsIGwzXzE7Ci0gIGd1aW50OCBhdmcsIGF2Z18xOwotICBndWludDggYXZnX18xID0gMDsKLSAgZ3VpbnQ4IGF2Z19zOwotICBndWludDggYXZnX3NjOwotICBndWludDggYmVzdDsKLSAgZ3VpbnQxNiBtb3Y7Ci0gIGd1aW50OCBvdXQ7Ci0gIGd1aW50OCBsMiwgbHAyOwotICBndWludDggbDJfZGlmZiwgbHAyX2RpZmY7Ci0gIGd1aW50OCBtaW4sIG1heDsKLSAgZ3VpbnQgbWF4X2NvbWIgPSBzZWxmLT5tYXhfY29tYjsKLSAgZ3VpbnQgbW90aW9uX3NlbnNlID0gc2VsZi0+bW90aW9uX3NlbnNlOwotICBndWludCBtb3Rpb25fdGhyZXNob2xkID0gc2VsZi0+bW90aW9uX3RocmVzaG9sZDsKLQotICBmb3IgKFBvcyA9IDA7IFBvcyA8IHdpZHRoOyBQb3MrKykgewotICAgIGwxID0gTDFbMF07Ci0gICAgbDMgPSBMM1swXTsKLQotICAgIGlmIChQb3MgPT0gd2lkdGggLSAxKSB7Ci0gICAgICBsMV8xID0gbDE7Ci0gICAgICBsM18xID0gbDM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGwxXzEgPSBMMVsxXTsKLSAgICAgIGwzXzEgPSBMM1sxXTsKLSAgICB9Ci0KLSAgICAvKiBBdmVyYWdlIG9mIEwxIGFuZCBMMyAqLwotICAgIGF2ZyA9IChsMSArIGwzKSAvIDI7Ci0KLSAgICBpZiAoUG9zID09IDApIHsKLSAgICAgIGF2Z19fMSA9IGF2ZzsKLSAgICB9Ci0KLSAgICAvKiBBdmVyYWdlIG9mIG5leHQgTDEgYW5kIG5leHQgTDMgKi8KLSAgICBhdmdfMSA9IChsMV8xICsgbDNfMSkgLyAyOwotCi0gICAgLyogQ2FsY3VsYXRlIGF2ZXJhZ2Ugb2Ygb25lIHBpeGVsIGZvcndhcmQgYW5kIHByZXZpb3VzICovCi0gICAgYXZnX3MgPSAoYXZnX18xICsgYXZnXzEpIC8gMjsKLQotICAgIC8qIENhbGN1bGF0ZSBhdmVyYWdlIG9mIGNlbnRlciBhbmQgc3Vycm91bmRpbmcgcGl4ZWxzICovCi0gICAgYXZnX3NjID0gKGF2ZyArIGF2Z19zKSAvIDI7Ci0KLSAgICAvKiBtb3ZlIGZvcndhcmQgKi8KLSAgICBhdmdfXzEgPSBhdmc7Ci0KLSAgICAvKiBHZXQgYmVzdCBMMi9MMlAsIGkuZS4gbGVhc3QgZGlmZiBmcm9tIGFib3ZlIGF2ZXJhZ2UgKi8KLSAgICBsMiA9IEwyWzBdOwotICAgIGxwMiA9IEwyUFswXTsKLQotICAgIGwyX2RpZmYgPSBBQlMgKGwyIC0gYXZnX3NjKTsKLQotICAgIGxwMl9kaWZmID0gQUJTIChscDIgLSBhdmdfc2MpOwotCi0gICAgaWYgKGwyX2RpZmYgPiBscDJfZGlmZikKLSAgICAgIGJlc3QgPSBscDI7Ci0gICAgZWxzZQotICAgICAgYmVzdCA9IGwyOwotCi0gICAgLyogQ2xpcCB0aGlzIGJlc3QgTDIvTDJQIGJ5IEwxL0wzIGFuZCBhbGxvdyB0byBkaWZmZXIgYnkgR3JlZWR5TWF4Q29tYiAqLwotICAgIG1heCA9IE1BWCAobDEsIGwzKTsKLSAgICBtaW4gPSBNSU4gKGwxLCBsMyk7Ci0KLSAgICBpZiAobWF4IDwgMjU2IC0gbWF4X2NvbWIpCi0gICAgICBtYXggKz0gbWF4X2NvbWI7Ci0gICAgZWxzZQotICAgICAgbWF4ID0gMjU1OwotCi0gICAgaWYgKG1pbiA+IG1heF9jb21iKQotICAgICAgbWluIC09IG1heF9jb21iOwotICAgIGVsc2UKLSAgICAgIG1pbiA9IDA7Ci0KLSAgICBvdXQgPSBDTEFNUCAoYmVzdCwgbWluLCBtYXgpOwotCi0gICAgLyogRG8gbW90aW9uIGNvbXBlbnNhdGlvbiBmb3IgbHVtYSwgaS5lLiBob3cgbXVjaAotICAgICAqIHRoZSB3ZWF2ZSBwaXhlbCBkaWZmZXJzICovCi0gICAgbW92ID0gQUJTIChsMiAtIGxwMik7Ci0gICAgaWYgKG1vdiA+IG1vdGlvbl90aHJlc2hvbGQpCi0gICAgICBtb3YgLT0gbW90aW9uX3RocmVzaG9sZDsKLSAgICBlbHNlCi0gICAgICBtb3YgPSAwOwotCi0gICAgbW92ID0gbW92ICogbW90aW9uX3NlbnNlOwotICAgIGlmIChtb3YgPiAyNTYpCi0gICAgICBtb3YgPSAyNTY7Ci0KLSAgICAvKiBXZWlnaHRlZCBzdW0gb24gY2xpcHBlZCB3ZWF2ZSBwaXhlbCBhbmQgYXZlcmFnZSAqLwotICAgIG91dCA9IChvdXQgKiAoMjU2IC0gbW92KSArIGF2Z19zYyAqIG1vdikgLyAyNTY7Ci0KLSAgICBEZXN0WzBdID0gb3V0OwotCi0gICAgRGVzdCArPSAxOwotICAgIEwxICs9IDE7Ci0gICAgTDIgKz0gMTsKLSAgICBMMyArPSAxOwotICAgIEwyUCArPSAxOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ncmVlZHloX3NjYW5saW5lX0NfcGxhbmFyX3V2IChHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKiBzZWxmLAotICAgIGNvbnN0IGd1aW50OCAqIEwxLCBjb25zdCBndWludDggKiBMMiwgY29uc3QgZ3VpbnQ4ICogTDMsIGNvbnN0IGd1aW50OCAqIEwyUCwKLSAgICBndWludDggKiBEZXN0LCBnaW50IHdpZHRoKQotewotICBnaW50IFBvczsKLSAgZ3VpbnQ4IGwxLCBsMV8xLCBsMywgbDNfMTsKLSAgZ3VpbnQ4IGF2ZywgYXZnXzE7Ci0gIGd1aW50OCBhdmdfXzEgPSAwOwotICBndWludDggYXZnX3M7Ci0gIGd1aW50OCBhdmdfc2M7Ci0gIGd1aW50OCBiZXN0OwotICBndWludDggb3V0OwotICBndWludDggbDIsIGxwMjsKLSAgZ3VpbnQ4IGwyX2RpZmYsIGxwMl9kaWZmOwotICBndWludDggbWluLCBtYXg7Ci0gIGd1aW50IG1heF9jb21iID0gc2VsZi0+bWF4X2NvbWI7Ci0KLSAgZm9yIChQb3MgPSAwOyBQb3MgPCB3aWR0aDsgUG9zKyspIHsKLSAgICBsMSA9IEwxWzBdOwotICAgIGwzID0gTDNbMF07Ci0KLSAgICBpZiAoUG9zID09IHdpZHRoIC0gMSkgewotICAgICAgbDFfMSA9IGwxOwotICAgICAgbDNfMSA9IGwzOwotICAgIH0gZWxzZSB7Ci0gICAgICBsMV8xID0gTDFbMV07Ci0gICAgICBsM18xID0gTDNbMV07Ci0gICAgfQotCi0gICAgLyogQXZlcmFnZSBvZiBMMSBhbmQgTDMgKi8KLSAgICBhdmcgPSAobDEgKyBsMykgLyAyOwotCi0gICAgaWYgKFBvcyA9PSAwKSB7Ci0gICAgICBhdmdfXzEgPSBhdmc7Ci0gICAgfQotCi0gICAgLyogQXZlcmFnZSBvZiBuZXh0IEwxIGFuZCBuZXh0IEwzICovCi0gICAgYXZnXzEgPSAobDFfMSArIGwzXzEpIC8gMjsKLQotICAgIC8qIENhbGN1bGF0ZSBhdmVyYWdlIG9mIG9uZSBwaXhlbCBmb3J3YXJkIGFuZCBwcmV2aW91cyAqLwotICAgIGF2Z19zID0gKGF2Z19fMSArIGF2Z18xKSAvIDI7Ci0KLSAgICAvKiBDYWxjdWxhdGUgYXZlcmFnZSBvZiBjZW50ZXIgYW5kIHN1cnJvdW5kaW5nIHBpeGVscyAqLwotICAgIGF2Z19zYyA9IChhdmcgKyBhdmdfcykgLyAyOwotCi0gICAgLyogbW92ZSBmb3J3YXJkICovCi0gICAgYXZnX18xID0gYXZnOwotCi0gICAgLyogR2V0IGJlc3QgTDIvTDJQLCBpLmUuIGxlYXN0IGRpZmYgZnJvbSBhYm92ZSBhdmVyYWdlICovCi0gICAgbDIgPSBMMlswXTsKLSAgICBscDIgPSBMMlBbMF07Ci0KLSAgICBsMl9kaWZmID0gQUJTIChsMiAtIGF2Z19zYyk7Ci0KLSAgICBscDJfZGlmZiA9IEFCUyAobHAyIC0gYXZnX3NjKTsKLQotICAgIGlmIChsMl9kaWZmID4gbHAyX2RpZmYpCi0gICAgICBiZXN0ID0gbHAyOwotICAgIGVsc2UKLSAgICAgIGJlc3QgPSBsMjsKLQotICAgIC8qIENsaXAgdGhpcyBiZXN0IEwyL0wyUCBieSBMMS9MMyBhbmQgYWxsb3cgdG8gZGlmZmVyIGJ5IEdyZWVkeU1heENvbWIgKi8KLSAgICBtYXggPSBNQVggKGwxLCBsMyk7Ci0gICAgbWluID0gTUlOIChsMSwgbDMpOwotCi0gICAgaWYgKG1heCA8IDI1NiAtIG1heF9jb21iKQotICAgICAgbWF4ICs9IG1heF9jb21iOwotICAgIGVsc2UKLSAgICAgIG1heCA9IDI1NTsKLQotICAgIGlmIChtaW4gPiBtYXhfY29tYikKLSAgICAgIG1pbiAtPSBtYXhfY29tYjsKLSAgICBlbHNlCi0gICAgICBtaW4gPSAwOwotCi0gICAgb3V0ID0gQ0xBTVAgKGJlc3QsIG1pbiwgbWF4KTsKLQotICAgIERlc3RbMF0gPSBvdXQ7Ci0KLSAgICBEZXN0ICs9IDE7Ci0gICAgTDEgKz0gMTsKLSAgICBMMiArPSAxOwotICAgIEwzICs9IDE7Ci0gICAgTDJQICs9IDE7Ci0gIH0KLX0KLQotI2lmZGVmIEJVSUxEX1g4Nl9BU00KLQotI2RlZmluZSBJU19NTVhFWFQKLSNkZWZpbmUgU0lNRF9UWVBFIE1NWEVYVAotI2RlZmluZSBDX0ZVTkNUX1lVWTIgZ3JlZWR5aF9zY2FubGluZV9DX3l1eTIKLSNkZWZpbmUgQ19GVU5DVF9VWVZZIGdyZWVkeWhfc2NhbmxpbmVfQ191eXZ5Ci0jZGVmaW5lIENfRlVOQ1RfUExBTkFSX1kgZ3JlZWR5aF9zY2FubGluZV9DX3BsYW5hcl95Ci0jZGVmaW5lIENfRlVOQ1RfUExBTkFSX1VWIGdyZWVkeWhfc2NhbmxpbmVfQ19wbGFuYXJfdXYKLSNkZWZpbmUgRlVOQ1RfTkFNRV9ZVVkyIGdyZWVkeWhfc2NhbmxpbmVfTU1YRVhUX3l1eTIKLSNkZWZpbmUgRlVOQ1RfTkFNRV9VWVZZIGdyZWVkeWhfc2NhbmxpbmVfTU1YRVhUX3V5dnkKLSNkZWZpbmUgRlVOQ1RfTkFNRV9QTEFOQVJfWSBncmVlZHloX3NjYW5saW5lX01NWEVYVF9wbGFuYXJfeQotI2RlZmluZSBGVU5DVF9OQU1FX1BMQU5BUl9VViBncmVlZHloX3NjYW5saW5lX01NWEVYVF9wbGFuYXJfdXYKLSNpbmNsdWRlICJncmVlZHloLmFzbSIKLSN1bmRlZiBTSU1EX1RZUEUKLSN1bmRlZiBJU19NTVhFWFQKLSN1bmRlZiBGVU5DVF9OQU1FX1lVWTIKLSN1bmRlZiBGVU5DVF9OQU1FX1VZVlkKLSN1bmRlZiBGVU5DVF9OQU1FX1BMQU5BUl9ZCi0jdW5kZWYgRlVOQ1RfTkFNRV9QTEFOQVJfVVYKLQotI2RlZmluZSBJU18zRE5PVwotI2RlZmluZSBTSU1EX1RZUEUgM0ROT1cKLSNkZWZpbmUgRlVOQ1RfTkFNRV9ZVVkyIGdyZWVkeWhfc2NhbmxpbmVfM0ROT1dfeXV5MgotI2RlZmluZSBGVU5DVF9OQU1FX1VZVlkgZ3JlZWR5aF9zY2FubGluZV8zRE5PV191eXZ5Ci0jZGVmaW5lIEZVTkNUX05BTUVfUExBTkFSX1kgZ3JlZWR5aF9zY2FubGluZV8zRE5PV19wbGFuYXJfeQotI2RlZmluZSBGVU5DVF9OQU1FX1BMQU5BUl9VViBncmVlZHloX3NjYW5saW5lXzNETk9XX3BsYW5hcl91dgotI2luY2x1ZGUgImdyZWVkeWguYXNtIgotI3VuZGVmIFNJTURfVFlQRQotI3VuZGVmIElTXzNETk9XCi0jdW5kZWYgRlVOQ1RfTkFNRV9ZVVkyCi0jdW5kZWYgRlVOQ1RfTkFNRV9VWVZZCi0jdW5kZWYgRlVOQ1RfTkFNRV9QTEFOQVJfWQotI3VuZGVmIEZVTkNUX05BTUVfUExBTkFSX1VWCi0KLSNkZWZpbmUgSVNfTU1YCi0jZGVmaW5lIFNJTURfVFlQRSBNTVgKLSNkZWZpbmUgRlVOQ1RfTkFNRV9ZVVkyIGdyZWVkeWhfc2NhbmxpbmVfTU1YX3l1eTIKLSNkZWZpbmUgRlVOQ1RfTkFNRV9VWVZZIGdyZWVkeWhfc2NhbmxpbmVfTU1YX3V5dnkKLSNkZWZpbmUgRlVOQ1RfTkFNRV9QTEFOQVJfWSBncmVlZHloX3NjYW5saW5lX01NWF9wbGFuYXJfeQotI2RlZmluZSBGVU5DVF9OQU1FX1BMQU5BUl9VViBncmVlZHloX3NjYW5saW5lX01NWF9wbGFuYXJfdXYKLSNpbmNsdWRlICJncmVlZHloLmFzbSIKLSN1bmRlZiBTSU1EX1RZUEUKLSN1bmRlZiBJU19NTVgKLSN1bmRlZiBGVU5DVF9OQU1FX1lVWTIKLSN1bmRlZiBGVU5DVF9OQU1FX1VZVlkKLSN1bmRlZiBGVU5DVF9OQU1FX1BMQU5BUl9ZCi0jdW5kZWYgRlVOQ1RfTkFNRV9QTEFOQVJfVVYKLSN1bmRlZiBDX0ZVTkNUX1lVWTIKLSN1bmRlZiBDX0ZVTkNUX1BMQU5BUl9ZCi0jdW5kZWYgQ19GVU5DVF9QTEFOQVJfVVYKLQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHloX3BhY2tlZCAoR3N0RGVpbnRlcmxhY2VNZXRob2QgKiBtZXRob2QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VGaWVsZCAqIGhpc3RvcnksIGd1aW50IGhpc3RvcnlfY291bnQsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dGZyYW1lLCBpbnQgY3VyX2ZpZWxkX2lkeCkKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlIICpzZWxmID0gR1NUX0RFSU5URVJMQUNFX01FVEhPRF9HUkVFRFlfSCAobWV0aG9kKTsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlIQ2xhc3MgKmtsYXNzID0KLSAgICAgIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0hfR0VUX0NMQVNTIChzZWxmKTsKLSAgZ2ludCBJbmZvSXNPZGQgPSAwOwotICBnaW50IExpbmU7Ci0gIGdpbnQgUm93U3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChvdXRmcmFtZSwgMCk7Ci0gIGdpbnQgRmllbGRIZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChvdXRmcmFtZSkgLyAyOwotICBnaW50IFBpdGNoID0gUm93U3RyaWRlICogMjsKLSAgY29uc3QgZ3VpbnQ4ICpMMTsgICAgICAgICAgICAgLy8gcHRyIHRvIExpbmUxLCBvZiAzCi0gIGNvbnN0IGd1aW50OCAqTDI7ICAgICAgICAgICAgIC8vIHB0ciB0byBMaW5lMiwgdGhlIHdlYXZlIGxpbmUKLSAgY29uc3QgZ3VpbnQ4ICpMMzsgICAgICAgICAgICAgLy8gcHRyIHRvIExpbmUzCi0gIGNvbnN0IGd1aW50OCAqTDJQOyAgICAgICAgICAgIC8vIHB0ciB0byBwcmV2IExpbmUyCi0gIGd1aW50OCAqRGVzdCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKG91dGZyYW1lLCAwKTsKLSAgU2NhbmxpbmVGdW5jdGlvbiBzY2FubGluZTsKLQotICBpZiAoY3VyX2ZpZWxkX2lkeCArIDIgPiBoaXN0b3J5X2NvdW50IHx8IGN1cl9maWVsZF9pZHggPCAxKSB7Ci0gICAgR3N0RGVpbnRlcmxhY2VNZXRob2QgKmJhY2t1cF9tZXRob2Q7Ci0KLSAgICBiYWNrdXBfbWV0aG9kID0gZ19vYmplY3RfbmV3IChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9nZXRfdHlwZSAoKSwKLSAgICAgICAgTlVMTCk7Ci0KLSAgICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NldHVwIChiYWNrdXBfbWV0aG9kLCBtZXRob2QtPnZpbmZvKTsKLSAgICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2RlaW50ZXJsYWNlX2ZyYW1lIChiYWNrdXBfbWV0aG9kLAotICAgICAgICBoaXN0b3J5LCBoaXN0b3J5X2NvdW50LCBvdXRmcmFtZSwgY3VyX2ZpZWxkX2lkeCk7Ci0KLSAgICBnX29iamVjdF91bnJlZiAoYmFja3VwX21ldGhvZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgY3VyX2ZpZWxkX2lkeCArPSAyOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChtZXRob2QtPnZpbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgc2NhbmxpbmUgPSBrbGFzcy0+c2NhbmxpbmVfeXV5MjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgc2NhbmxpbmUgPSBrbGFzcy0+c2NhbmxpbmVfdXl2eTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgc2NhbmxpbmUgPSBrbGFzcy0+c2NhbmxpbmVfYXl1djsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIHJldHVybjsKLSAgfQotCi0gIC8vIGNvcHkgZmlyc3QgZXZlbiBsaW5lIG5vIG1hdHRlciB3aGF0LCBhbmQgdGhlIGZpcnN0IG9kZCBsaW5lIGlmIHdlJ3JlCi0gIC8vIHByb2Nlc3NpbmcgYW4gRVZFTiBmaWVsZC4gKG5vdGUgZGlmZiBmcm9tIG90aGVyIGRlaW50IHJ0bnMuKQotCi0gIGlmIChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAxXS5mbGFncyA9PSBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKSB7Ci0gICAgSW5mb0lzT2RkID0gMTsKLQotICAgIEwxID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMl0uZnJhbWUsIDApOwotICAgIGlmIChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAyXS5mbGFncyAmIFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pCi0gICAgICBMMSArPSBSb3dTdHJpZGU7Ci0KLSAgICBMMiA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGhpc3RvcnlbY3VyX2ZpZWxkX2lkeCAtIDFdLmZyYW1lLCAwKTsKLSAgICBpZiAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMV0uZmxhZ3MgJiBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKQotICAgICAgTDIgKz0gUm93U3RyaWRlOwotCi0gICAgTDMgPSBMMSArIFBpdGNoOwotICAgIEwyUCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGhpc3RvcnlbY3VyX2ZpZWxkX2lkeCAtIDNdLmZyYW1lLCAwKTsKLSAgICBpZiAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gM10uZmxhZ3MgJiBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKQotICAgICAgTDJQICs9IFJvd1N0cmlkZTsKLQotICAgIC8vIGNvcHkgZmlyc3QgZXZlbiBsaW5lCi0gICAgbWVtY3B5IChEZXN0LCBMMSwgUm93U3RyaWRlKTsKLSAgICBEZXN0ICs9IFJvd1N0cmlkZTsKLSAgfSBlbHNlIHsKLSAgICBJbmZvSXNPZGQgPSAwOwotICAgIEwxID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMl0uZnJhbWUsIDApOwotICAgIGlmIChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAyXS5mbGFncyAmIFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pCi0gICAgICBMMSArPSBSb3dTdHJpZGU7Ci0KLSAgICBMMiA9IChndWludDggKikgR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0KLSAgICAgICAgICAgIDFdLmZyYW1lLCAwKSArIFBpdGNoOwotICAgIGlmIChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAxXS5mbGFncyAmIFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pCi0gICAgICBMMiArPSBSb3dTdHJpZGU7Ci0KLSAgICBMMyA9IEwxICsgUGl0Y2g7Ci0gICAgTDJQID0KLSAgICAgICAgKGd1aW50OCAqKSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAzXS5mcmFtZSwKLSAgICAgICAgMCkgKyBQaXRjaDsKLSAgICBpZiAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gM10uZmxhZ3MgJiBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKQotICAgICAgTDJQICs9IFJvd1N0cmlkZTsKLQotICAgIC8vIGNvcHkgZmlyc3QgZXZlbiBsaW5lCi0gICAgbWVtY3B5IChEZXN0LCBMMSwgUm93U3RyaWRlKTsKLSAgICBEZXN0ICs9IFJvd1N0cmlkZTsKLSAgICAvLyB0aGVuIGZpcnN0IG9kZCBsaW5lCi0gICAgbWVtY3B5IChEZXN0LCBMMSwgUm93U3RyaWRlKTsKLSAgICBEZXN0ICs9IFJvd1N0cmlkZTsKLSAgfQotCi0gIGZvciAoTGluZSA9IDA7IExpbmUgPCAoRmllbGRIZWlnaHQgLSAxKTsgKytMaW5lKSB7Ci0gICAgc2NhbmxpbmUgKHNlbGYsIEwxLCBMMiwgTDMsIEwyUCwgRGVzdCwgUm93U3RyaWRlKTsKLSAgICBEZXN0ICs9IFJvd1N0cmlkZTsKLSAgICBtZW1jcHkgKERlc3QsIEwzLCBSb3dTdHJpZGUpOwotICAgIERlc3QgKz0gUm93U3RyaWRlOwotCi0gICAgTDEgKz0gUGl0Y2g7Ci0gICAgTDIgKz0gUGl0Y2g7Ci0gICAgTDMgKz0gUGl0Y2g7Ci0gICAgTDJQICs9IFBpdGNoOwotICB9Ci0KLSAgaWYgKEluZm9Jc09kZCkgewotICAgIG1lbWNweSAoRGVzdCwgTDIsIFJvd1N0cmlkZSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWhfcGxhbmFyX3BsYW5lIChHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKiBzZWxmLAotICAgIGNvbnN0IGd1aW50OCAqIEwxLCBjb25zdCBndWludDggKiBMMiwgY29uc3QgZ3VpbnQ4ICogTDMsIGNvbnN0IGd1aW50OCAqIEwyUCwKLSAgICBndWludDggKiBEZXN0LCBnaW50IFJvd1N0cmlkZSwgZ2ludCBGaWVsZEhlaWdodCwgZ2ludCBQaXRjaCwgZ2ludCBJbmZvSXNPZGQsCi0gICAgU2NhbmxpbmVGdW5jdGlvbiBzY2FubGluZSkKLXsKLSAgZ2ludCBMaW5lOwotCi0gIC8vIGNvcHkgZmlyc3QgZXZlbiBsaW5lIG5vIG1hdHRlciB3aGF0LCBhbmQgdGhlIGZpcnN0IG9kZCBsaW5lIGlmIHdlJ3JlCi0gIC8vIHByb2Nlc3NpbmcgYW4gRVZFTiBmaWVsZC4gKG5vdGUgZGlmZiBmcm9tIG90aGVyIGRlaW50IHJ0bnMuKQotCi0gIGlmIChJbmZvSXNPZGQpIHsKLSAgICAvLyBjb3B5IGZpcnN0IGV2ZW4gbGluZQotICAgIG1lbWNweSAoRGVzdCwgTDEsIFJvd1N0cmlkZSk7Ci0gICAgRGVzdCArPSBSb3dTdHJpZGU7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gY29weSBmaXJzdCBldmVuIGxpbmUKLSAgICBtZW1jcHkgKERlc3QsIEwxLCBSb3dTdHJpZGUpOwotICAgIERlc3QgKz0gUm93U3RyaWRlOwotICAgIC8vIHRoZW4gZmlyc3Qgb2RkIGxpbmUKLSAgICBtZW1jcHkgKERlc3QsIEwxLCBSb3dTdHJpZGUpOwotICAgIERlc3QgKz0gUm93U3RyaWRlOwotICB9Ci0KLSAgZm9yIChMaW5lID0gMDsgTGluZSA8IChGaWVsZEhlaWdodCAtIDEpOyArK0xpbmUpIHsKLSAgICBzY2FubGluZSAoc2VsZiwgTDEsIEwyLCBMMywgTDJQLCBEZXN0LCBSb3dTdHJpZGUpOwotICAgIERlc3QgKz0gUm93U3RyaWRlOwotICAgIG1lbWNweSAoRGVzdCwgTDMsIFJvd1N0cmlkZSk7Ci0gICAgRGVzdCArPSBSb3dTdHJpZGU7Ci0KLSAgICBMMSArPSBQaXRjaDsKLSAgICBMMiArPSBQaXRjaDsKLSAgICBMMyArPSBQaXRjaDsKLSAgICBMMlAgKz0gUGl0Y2g7Ci0gIH0KLQotICBpZiAoSW5mb0lzT2RkKSB7Ci0gICAgbWVtY3B5IChEZXN0LCBMMiwgUm93U3RyaWRlKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aF9wbGFuYXIgKEdzdERlaW50ZXJsYWNlTWV0aG9kICogbWV0aG9kLAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlRmllbGQgKiBoaXN0b3J5LCBndWludCBoaXN0b3J5X2NvdW50LAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRmcmFtZSwgaW50IGN1cl9maWVsZF9pZHgpCi17Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5SCAqc2VsZiA9IEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfR1JFRURZX0ggKG1ldGhvZCk7Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5SENsYXNzICprbGFzcyA9Ci0gICAgICBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IX0dFVF9DTEFTUyAoc2VsZik7Ci0gIGdpbnQgSW5mb0lzT2RkOwotICBnaW50IFJvd1N0cmlkZTsKLSAgZ2ludCBGaWVsZEhlaWdodDsKLSAgZ2ludCBQaXRjaDsKLSAgY29uc3QgZ3VpbnQ4ICpMMTsgICAgICAgICAgICAgLy8gcHRyIHRvIExpbmUxLCBvZiAzCi0gIGNvbnN0IGd1aW50OCAqTDI7ICAgICAgICAgICAgIC8vIHB0ciB0byBMaW5lMiwgdGhlIHdlYXZlIGxpbmUKLSAgY29uc3QgZ3VpbnQ4ICpMMzsgICAgICAgICAgICAgLy8gcHRyIHRvIExpbmUzCi0gIGNvbnN0IGd1aW50OCAqTDJQOyAgICAgICAgICAgIC8vIHB0ciB0byBwcmV2IExpbmUyCi0gIGd1aW50OCAqRGVzdDsKLSAgZ2ludCBpOwotICBTY2FubGluZUZ1bmN0aW9uIHNjYW5saW5lOwotCi0gIGlmIChjdXJfZmllbGRfaWR4ICsgMiA+IGhpc3RvcnlfY291bnQgfHwgY3VyX2ZpZWxkX2lkeCA8IDEpIHsKLSAgICBHc3REZWludGVybGFjZU1ldGhvZCAqYmFja3VwX21ldGhvZDsKLQotICAgIGJhY2t1cF9tZXRob2QgPSBnX29iamVjdF9uZXcgKGdzdF9kZWludGVybGFjZV9tZXRob2RfbGluZWFyX2dldF90eXBlICgpLAotICAgICAgICBOVUxMKTsKLQotICAgIGdzdF9kZWludGVybGFjZV9tZXRob2Rfc2V0dXAgKGJhY2t1cF9tZXRob2QsIG1ldGhvZC0+dmluZm8pOwotICAgIGdzdF9kZWludGVybGFjZV9tZXRob2RfZGVpbnRlcmxhY2VfZnJhbWUgKGJhY2t1cF9tZXRob2QsCi0gICAgICAgIGhpc3RvcnksIGhpc3RvcnlfY291bnQsIG91dGZyYW1lLCBjdXJfZmllbGRfaWR4KTsKLQotICAgIGdfb2JqZWN0X3VucmVmIChiYWNrdXBfbWV0aG9kKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBjdXJfZmllbGRfaWR4ICs9IDI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgIEluZm9Jc09kZCA9IChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAxXS5mbGFncyA9PSBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKTsKLSAgICBSb3dTdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKG91dGZyYW1lLCBpKTsKLSAgICBGaWVsZEhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAob3V0ZnJhbWUsIGkpIC8gMjsKLSAgICBQaXRjaCA9IFJvd1N0cmlkZSAqIDI7Ci0KLSAgICBpZiAoaSA9PSAwKQotICAgICAgc2NhbmxpbmUgPSBrbGFzcy0+c2NhbmxpbmVfcGxhbmFyX3k7Ci0gICAgZWxzZQotICAgICAgc2NhbmxpbmUgPSBrbGFzcy0+c2NhbmxpbmVfcGxhbmFyX3V2OwotCi0gICAgRGVzdCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKG91dGZyYW1lLCBpKTsKLQotICAgIEwxID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMl0uZnJhbWUsIGkpOwotICAgIGlmIChoaXN0b3J5W2N1cl9maWVsZF9pZHggLSAyXS5mbGFncyAmIFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pCi0gICAgICBMMSArPSBSb3dTdHJpZGU7Ci0KLSAgICBMMiA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGhpc3RvcnlbY3VyX2ZpZWxkX2lkeCAtIDFdLmZyYW1lLCBpKTsKLSAgICBpZiAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gMV0uZmxhZ3MgJiBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKQotICAgICAgTDIgKz0gUm93U3RyaWRlOwotCi0gICAgTDMgPSBMMSArIFBpdGNoOwotICAgIEwyUCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGhpc3RvcnlbY3VyX2ZpZWxkX2lkeCAtIDNdLmZyYW1lLCBpKTsKLSAgICBpZiAoaGlzdG9yeVtjdXJfZmllbGRfaWR4IC0gM10uZmxhZ3MgJiBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKQotICAgICAgTDJQICs9IFJvd1N0cmlkZTsKLQotICAgIGRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWhfcGxhbmFyX3BsYW5lIChzZWxmLCBMMSwgTDIsIEwzLCBMMlAsIERlc3QsCi0gICAgICAgIFJvd1N0cmlkZSwgRmllbGRIZWlnaHQsIFBpdGNoLCBJbmZvSXNPZGQsIHNjYW5saW5lKTsKLSAgfQotfQotCi1HX0RFRklORV9UWVBFIChHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUgsIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2gsCi0gICAgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTUFYX0NPTUIsCi0gIFBST1BfTU9USU9OX1RIUkVTSE9MRCwKLSAgUFJPUF9NT1RJT05fU0VOU0UKLX07Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9oX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKnNlbGYgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfQ09NQjoKLSAgICAgIHNlbGYtPm1heF9jb21iID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PVElPTl9USFJFU0hPTEQ6Ci0gICAgICBzZWxmLT5tb3Rpb25fdGhyZXNob2xkID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PVElPTl9TRU5TRToKLSAgICAgIHNlbGYtPm1vdGlvbl9zZW5zZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9oX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZWludGVybGFjZU1ldGhvZEdyZWVkeUggKnNlbGYgPSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0dSRUVEWV9IIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfQ09NQjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZWxmLT5tYXhfY29tYik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTU9USU9OX1RIUkVTSE9MRDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZWxmLT5tb3Rpb25fdGhyZXNob2xkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT1RJT05fU0VOU0U6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2VsZi0+bW90aW9uX3NlbnNlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9oX2NsYXNzX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kR3JlZWR5SENsYXNzICoKLSAgICBrbGFzcykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqZGltX2NsYXNzID0gKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0jaWZkZWYgQlVJTERfWDg2X0FTTQotICBndWludCBjcHVfZmxhZ3MgPQotICAgICAgb3JjX3RhcmdldF9nZXRfZGVmYXVsdF9mbGFncyAob3JjX3RhcmdldF9nZXRfYnlfbmFtZSAoIm1teCIpKTsKLSNlbmRpZgotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2dyZWVkeV9oX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9DT01CLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtY29tYiIsCi0gICAgICAgICAgIk1heCBjb21iIiwKLSAgICAgICAgICAiTWF4IENvbWIiLCAwLCAyNTUsIDUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykKLSAgICAgICk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NT1RJT05fVEhSRVNIT0xELAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtb3Rpb24tdGhyZXNob2xkIiwKLSAgICAgICAgICAiTW90aW9uIFRocmVzaG9sZCIsCi0gICAgICAgICAgIk1vdGlvbiBUaHJlc2hvbGQiLAotICAgICAgICAgIDAsIDI1NSwgMjUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykKLSAgICAgICk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NT1RJT05fU0VOU0UsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1vdGlvbi1zZW5zZSIsCi0gICAgICAgICAgIk1vdGlvbiBTZW5zZSIsCi0gICAgICAgICAgIk1vdGlvbiBTZW5zZSIsCi0gICAgICAgICAgMCwgMjU1LCAzMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICBkaW1fY2xhc3MtPmZpZWxkc19yZXF1aXJlZCA9IDQ7Ci0gIGRpbV9jbGFzcy0+bmFtZSA9ICJNb3Rpb24gQWRhcHRpdmU6IEFkdmFuY2VkIERldGVjdGlvbiI7Ci0gIGRpbV9jbGFzcy0+bmljayA9ICJncmVlZHloIjsKLSAgZGltX2NsYXNzLT5sYXRlbmN5ID0gMTsKLQotICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l1eTIgPSBkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHloX3BhY2tlZDsKLSAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95dnl1ID0gZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aF9wYWNrZWQ7Ci0gIGRpbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfdXl2eSA9IGRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWhfcGFja2VkOwotICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX2F5dXYgPSBkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHloX3BhY2tlZDsKLSAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95NDQ0ID0gZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aF9wbGFuYXI7Ci0gIGRpbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfaTQyMCA9IGRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWhfcGxhbmFyOwotICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l2MTIgPSBkZWludGVybGFjZV9mcmFtZV9kaV9ncmVlZHloX3BsYW5hcjsKLSAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95NDJiID0gZGVpbnRlcmxhY2VfZnJhbWVfZGlfZ3JlZWR5aF9wbGFuYXI7Ci0gIGRpbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeTQxYiA9IGRlaW50ZXJsYWNlX2ZyYW1lX2RpX2dyZWVkeWhfcGxhbmFyOwotCi0jaWZkZWYgQlVJTERfWDg2X0FTTQotICBpZiAoY3B1X2ZsYWdzICYgT1JDX1RBUkdFVF9NTVhfTU1YRVhUKSB7Ci0gICAga2xhc3MtPnNjYW5saW5lX3l1eTIgPSBncmVlZHloX3NjYW5saW5lX01NWEVYVF95dXkyOwotICAgIGtsYXNzLT5zY2FubGluZV91eXZ5ID0gZ3JlZWR5aF9zY2FubGluZV9NTVhFWFRfdXl2eTsKLSAgfSBlbHNlIGlmIChjcHVfZmxhZ3MgJiBPUkNfVEFSR0VUX01NWF8zRE5PVykgewotICAgIGtsYXNzLT5zY2FubGluZV95dXkyID0gZ3JlZWR5aF9zY2FubGluZV8zRE5PV195dXkyOwotICAgIGtsYXNzLT5zY2FubGluZV91eXZ5ID0gZ3JlZWR5aF9zY2FubGluZV8zRE5PV191eXZ5OwotICB9IGVsc2UgaWYgKGNwdV9mbGFncyAmIE9SQ19UQVJHRVRfTU1YX01NWCkgewotICAgIGtsYXNzLT5zY2FubGluZV95dXkyID0gZ3JlZWR5aF9zY2FubGluZV9NTVhfeXV5MjsKLSAgICBrbGFzcy0+c2NhbmxpbmVfdXl2eSA9IGdyZWVkeWhfc2NhbmxpbmVfTU1YX3V5dnk7Ci0gIH0gZWxzZSB7Ci0gICAga2xhc3MtPnNjYW5saW5lX3l1eTIgPSBncmVlZHloX3NjYW5saW5lX0NfeXV5MjsKLSAgICBrbGFzcy0+c2NhbmxpbmVfdXl2eSA9IGdyZWVkeWhfc2NhbmxpbmVfQ191eXZ5OwotICB9Ci0jZWxzZQotICBrbGFzcy0+c2NhbmxpbmVfeXV5MiA9IGdyZWVkeWhfc2NhbmxpbmVfQ195dXkyOwotICBrbGFzcy0+c2NhbmxpbmVfdXl2eSA9IGdyZWVkeWhfc2NhbmxpbmVfQ191eXZ5OwotI2VuZGlmCi0gIC8qIFRPRE86IE1NWCBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSB0d28gKi8KLSAga2xhc3MtPnNjYW5saW5lX2F5dXYgPSBncmVlZHloX3NjYW5saW5lX0NfYXl1djsKLSAga2xhc3MtPnNjYW5saW5lX3BsYW5hcl95ID0gZ3JlZWR5aF9zY2FubGluZV9DX3BsYW5hcl95OwotICBrbGFzcy0+c2NhbmxpbmVfcGxhbmFyX3V2ID0gZ3JlZWR5aF9zY2FubGluZV9DX3BsYW5hcl91djsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RHcmVlZHlIICogc2VsZikKLXsKLSAgc2VsZi0+bWF4X2NvbWIgPSA1OwotICBzZWxmLT5tb3Rpb25fdGhyZXNob2xkID0gMjU7Ci0gIHNlbGYtPm1vdGlvbl9zZW5zZSA9IDMwOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9ncmVlZHlobWFjcm9zLmggYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWhtYWNyb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlYWZmNS4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2dyZWVkeWhtYWNyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoYykgMjAwMSBUb20gQmFycnkgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFJlbGljZW5zZWQgZm9yIEdTdHJlYW1lciBmcm9tIEdQTCB0byBMR1BMIHdpdGggcGVybWl0IGZyb20gVG9tIEJhcnJ5LgotICogU2VlOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NzgKLSAqLwotCi0vLyBEZWZpbmUgYSBmZXcgbWFjcm9zIGZvciBDUFUgZGVwZW5kZW50IGluc3RydWN0aW9ucy4gCi0vLyBJIHN1c3BlY3QgSSBkb24ndCByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhlIEMgbWFjcm8gcHJlcHJvY2Vzc29yIHdvcmtzIGJ1dAotLy8gdGhpcyBzZWVtcyB0byBnZXQgdGhlIGpvYiBkb25lLiAgICAgICAgICAvLyBUUkIgNy8wMQotCi0vLyBCRUZPUkUgVVNJTkcgVEhFU0UgWU9VIE1VU1QgU0VUOgotCi0vLyAjZGVmaW5lIFNJTURfVFlQRSBNTVhFWFQgICAgICAgICAgICAob3IgTU1YIG9yIDNETk9XKQotCi0vLyBzb21lIG1hY3JvcyBmb3IgcGF2Z2IgaW5zdHJ1Y3Rpb24KLS8vICAgICAgVl9QQVZHQihtbXIxLCBtbXIyLCBtbXIgd29yayByZWdpc3Rlciwgc21hc2spIG1tcjIgbWF5ID0gbW1ydyBpZiB5b3UgY2FuIHRyYXNoIGl0Ci0KLSNkZWZpbmUgVl9QQVZHQl9NTVgobW1yMSwgbW1yMiwgbW1ydywgc21hc2spIFwKLQkibW92cSAgICAibW1yMiIsICAibW1ydyJcblx0IiAgICAgICAgICAgIFwKLQkicGFuZCAgICAic21hc2siLCAibW1ydyJcblx0IiAgICAgICAgICAgIFwKLQkicHNybHcgICAkMSwgICAgICAibW1ydyJcblx0IiAgICAgICAgICAgIFwKLQkicGFuZCAgICAic21hc2siLCAibW1yMSJcblx0IiAgICAgICAgICAgIFwKLQkicHNybHcgICAkMSwgICAgICAibW1yMSJcblx0IiAgICAgICAgICAgIFwKLQkicGFkZHVzYiAibW1ydyIsICAibW1yMSJcblx0IgotI2RlZmluZSBWX1BBVkdCX01NWEVYVChtbXIxLCBtbXIyLCBtbXJ3LCBzbWFzaykgICAgICAicGF2Z2IgICAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfUEFWR0JfM0ROT1cobW1yMSwgbW1yMiwgbW1ydywgc21hc2spICAgICJwYXZndXNiICJtbXIyIiwgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9QQVZHQihtbXIxLCBtbXIyLCBtbXJ3LCBzbWFzaykgICAgICAgICAgVl9QQVZHQjIobW1yMSwgbW1yMiwgbW1ydywgc21hc2ssIFNJTURfVFlQRSkgCi0jZGVmaW5lIFZfUEFWR0IyKG1tcjEsIG1tcjIsIG1tcncsIHNtYXNrLCBzaW1kX3R5cGUpIFZfUEFWR0IzKG1tcjEsIG1tcjIsIG1tcncsIHNtYXNrLCBzaW1kX3R5cGUpIAotI2RlZmluZSBWX1BBVkdCMyhtbXIxLCBtbXIyLCBtbXJ3LCBzbWFzaywgc2ltZF90eXBlKSBWX1BBVkdCXyMjc2ltZF90eXBlKG1tcjEsIG1tcjIsIG1tcncsIHNtYXNrKSAKLQotLy8gc29tZSBtYWNyb3MgZm9yIHBtYXh1YiBpbnN0cnVjdGlvbgotI2RlZmluZSBWX1BNQVhVQl9NTVgobW1yMSwgbW1yMikgXAotICAgICJwc3VidXNiICJtbXIyIiwgIm1tcjEiXG5cdCIgXAotICAgICJwYWRkdXNiICJtbXIyIiwgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9QTUFYVUJfTU1YRVhUKG1tcjEsIG1tcjIpICAgICAgInBtYXh1YiAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfUE1BWFVCXzNETk9XKG1tcjEsIG1tcjIpICAgIFZfUE1BWFVCX01NWChtbXIxLCBtbXIyKSAgLy8gdXNlIE1NWCB2ZXJzaW9uCi0jZGVmaW5lIFZfUE1BWFVCKG1tcjEsIG1tcjIpICAgICAgICAgIFZfUE1BWFVCMihtbXIxLCBtbXIyLCBTSU1EX1RZUEUpIAotI2RlZmluZSBWX1BNQVhVQjIobW1yMSwgbW1yMiwgc2ltZF90eXBlKSBWX1BNQVhVQjMobW1yMSwgbW1yMiwgc2ltZF90eXBlKSAKLSNkZWZpbmUgVl9QTUFYVUIzKG1tcjEsIG1tcjIsIHNpbWRfdHlwZSkgVl9QTUFYVUJfIyNzaW1kX3R5cGUobW1yMSwgbW1yMikgCi0KLS8vIHNvbWUgbWFjcm9zIGZvciBwbWludWIgaW5zdHJ1Y3Rpb24KLS8vICAgICAgVl9QTUlOVUIobW1yMSwgbW1yMiwgbW1yIHdvcmsgcmVnaXN0ZXIpICAgICBtbXIyIG1heSBOT1QgPSBtbXJ3Ci0jZGVmaW5lIFZfUE1JTlVCX01NWChtbXIxLCBtbXIyLCBtbXJ3KSBcCi0gICAgInBjbXBlcWIgIm1tcnciLCAibW1ydyJcblx0IiAgICAgICBcCi0gICAgInBzdWJ1c2IgIm1tcjIiLCAibW1ydyJcblx0IiAgICAgICBcCi0gICAgInBhZGR1c2IgIm1tcnciLCAibW1yMSJcblx0IiAgICAgICBcCi0gICAgInBzdWJ1c2IgIm1tcnciLCAibW1yMSJcblx0IgotI2RlZmluZSBWX1BNSU5VQl9NTVhFWFQobW1yMSwgbW1yMiwgbW1ydykgICAgICAicG1pbnViICJtbXIyIiwgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9QTUlOVUJfM0ROT1cobW1yMSwgbW1yMiwgbW1ydykgICAgVl9QTUlOVUJfTU1YKG1tcjEsIG1tcjIsIG1tcncpICAvLyB1c2UgTU1YIHZlcnNpb24KLSNkZWZpbmUgVl9QTUlOVUIobW1yMSwgbW1yMiwgbW1ydykgICAgICAgICAgVl9QTUlOVUIyKG1tcjEsIG1tcjIsIG1tcncsIFNJTURfVFlQRSkgCi0jZGVmaW5lIFZfUE1JTlVCMihtbXIxLCBtbXIyLCBtbXJ3LCBzaW1kX3R5cGUpIFZfUE1JTlVCMyhtbXIxLCBtbXIyLCBtbXJ3LCBzaW1kX3R5cGUpIAotI2RlZmluZSBWX1BNSU5VQjMobW1yMSwgbW1yMiwgbW1ydywgc2ltZF90eXBlKSBWX1BNSU5VQl8jI3NpbWRfdHlwZShtbXIxLCBtbXIyLCBtbXJ3KSAKLQotLy8gc29tZSBtYWNyb3MgZm9yIG1vdm50cSBpbnN0cnVjdGlvbgotLy8gICAgICBWX01PVk5UUShtbXIxLCBtbXIyKSAKLSNkZWZpbmUgVl9NT1ZOVFFfTU1YKG1tcjEsIG1tcjIpICAgICAgIm1vdnEgICAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfTU9WTlRRXzNETk9XKG1tcjEsIG1tcjIpICAgICJtb3ZxICAgIm1tcjIiLCAibW1yMSJcblx0IgotI2RlZmluZSBWX01PVk5UUV9NTVhFWFQobW1yMSwgbW1yMikgICAgICAibW92bnRxICJtbXIyIiwgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9NT1ZOVFEobW1yMSwgbW1yMikgICAgICAgICAgVl9NT1ZOVFEyKG1tcjEsIG1tcjIsIFNJTURfVFlQRSkgCi0jZGVmaW5lIFZfTU9WTlRRMihtbXIxLCBtbXIyLCBzaW1kX3R5cGUpIFZfTU9WTlRRMyhtbXIxLCBtbXIyLCBzaW1kX3R5cGUpIAotI2RlZmluZSBWX01PVk5UUTMobW1yMSwgbW1yMiwgc2ltZF90eXBlKSBWX01PVk5UUV8jI3NpbWRfdHlwZShtbXIxLCBtbXIyKQotCi0vLyBlbmQgb2YgbWFjcm9zCi0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyLmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzQ1MzUzLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBCaWxseSBCaWdncyA8dmVrdG9yQGR1bWJ0ZXJtLm5ldD4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFJlbGljZW5zZWQgZm9yIEdTdHJlYW1lciBmcm9tIEdQTCB0byBMR1BMIHdpdGggcGVybWl0IGZyb20gQmlsbHkgQmlnZ3MuCi0gKiBTZWU6IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzU3OAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RkZWludGVybGFjZW1ldGhvZC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmZGVmIEhBVkVfT1JDCi0jaW5jbHVkZSA8b3JjL29yYy5oPgotI2VuZGlmCi0jaW5jbHVkZSAidHZ0aW1lLmgiCi0KLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUgkoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9saW5lYXJfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVIpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUl9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVJfR0VUX0NMQVNTKG9iaikJKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSLCBHc3REZWludGVybGFjZU1ldGhvZExpbmVhckNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVIob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUiwgR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXIpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUl9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSLCBHc3REZWludGVybGFjZU1ldGhvZExpbmVhckNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVJfQ0FTVChvYmopCSgoR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXIqKShvYmopKQotCi1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXI7Ci10eXBlZGVmIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXJDbGFzczsKLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBndWludDggKiBzMSwgY29uc3QgZ3VpbnQ4ICogczIsIGdpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2VfbGluZV9saW5lYXIgKG91dCwgczEsIHMyLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLAotICAgIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+dDAsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX3BsYW5hcl95X2MgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYyAoc2VsZiwgb3V0LCBzY2FubGluZXMtPnQwLCBzY2FubGluZXMtPmIwLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wbGFuYXJfdV9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2MgKHNlbGYsIG91dCwgc2NhbmxpbmVzLT50MCwgc2NhbmxpbmVzLT5iMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfcGxhbmFyX3ZfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLAotICAgIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+dDAsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotfQotCi1HX0RFRklORV9UWVBFIChHc3REZWludGVybGFjZU1ldGhvZExpbmVhciwgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9saW5lYXIsCi0gICAgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9jbGFzc19pbml0IChHc3REZWludGVybGFjZU1ldGhvZExpbmVhckNsYXNzICoKLSAgICBrbGFzcykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqZGltX2NsYXNzID0gKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKmRpc21fY2xhc3MgPQotICAgICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0KLSAgZGltX2NsYXNzLT5maWVsZHNfcmVxdWlyZWQgPSAxOwotICBkaW1fY2xhc3MtPm5hbWUgPSAiVGVsZXZpc2lvbjogRnVsbCByZXNvbHV0aW9uIjsKLSAgZGltX2NsYXNzLT5uaWNrID0gImxpbmVhciI7Ci0gIGRpbV9jbGFzcy0+bGF0ZW5jeSA9IDA7Ci0KLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1diA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXJnYiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPSBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX252MTIgPSBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX252MjEgPSBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9wbGFuYXJfeV9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfcGxhbmFyX3VfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX3BsYW5hcl92X2M7Ci0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfbGluZWFyX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kTGluZWFyICogc2VsZikKLXsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvbGluZWFyYmxlbmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBlNGEwYi4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL2xpbmVhcmJsZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqIExpbmVhciBibGVuZCBkZWludGVybGFjaW5nIHBsdWdpbi4gIFRoZSBpZGVhIGZvciB0aGlzIGFsZ29yaXRobSBjYW1lCi0gKiBmcm9tIHRoZSBsaW5lYXIgYmxlbmQgZGVpbnRlcmxhY2VyIHdoaWNoIG9yaWdpbmF0ZWQgaW4gdGhlIG1wbGF5ZXIKLSAqIHNvdXJjZXMuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIEJpbGx5IEJpZ2dzIDx2ZWt0b3JAZHVtYnRlcm0ubmV0Pi4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogUmVsaWNlbnNlZCBmb3IgR1N0cmVhbWVyIGZyb20gR1BMIHRvIExHUEwgd2l0aCBwZXJtaXQgZnJvbSBCaWxseSBCaWdncy4KLSAqIFNlZTogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTc4Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGRlaW50ZXJsYWNlbWV0aG9kLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWZkZWYgSEFWRV9PUkMKLSNpbmNsdWRlIDxvcmMvb3JjLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJ0dnRpbWUuaCIKLQotI2RlZmluZSBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSX0JMRU5ECShnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9ibGVuZF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVJfQkxFTkQob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUl9CTEVORCkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSX0JMRU5EX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVJfQkxFTkQpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUl9CTEVORF9HRVRfQ0xBU1Mob2JqKQkoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVJfQkxFTkQsIEdzdERlaW50ZXJsYWNlTWV0aG9kTGluZWFyQmxlbmRDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSX0JMRU5EKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9MSU5FQVJfQkxFTkQsIEdzdERlaW50ZXJsYWNlTWV0aG9kTGluZWFyQmxlbmQpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUl9CTEVORF9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfTElORUFSX0JMRU5ELCBHc3REZWludGVybGFjZU1ldGhvZExpbmVhckJsZW5kQ2xhc3MpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX0xJTkVBUl9CTEVORF9DQVNUKG9iaikJKChHc3REZWludGVybGFjZU1ldGhvZExpbmVhckJsZW5kKikob2JqKSkKLQotR1R5cGUgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9saW5lYXJfYmxlbmRfZ2V0X3R5cGUgKHZvaWQpOwotCi10eXBlZGVmIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kIEdzdERlaW50ZXJsYWNlTWV0aG9kTGluZWFyQmxlbmQ7Ci10eXBlZGVmIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXJCbGVuZENsYXNzOwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBndWludDggKiB0MCwgY29uc3QgZ3VpbnQ4ICogYjAsIGNvbnN0IGd1aW50OCAqIG0xLAotICAgIGdpbnQgc2l6ZSkKLXsKLSAgaWYgKG0xID09IE5VTEwpIHsKLSAgICBkZWludGVybGFjZV9saW5lX2xpbmVhciAob3V0LCB0MCwgYjAsIHNpemUpOwotICB9IGVsc2UgewotICAgIGRlaW50ZXJsYWNlX2xpbmVfbGluZWFyX2JsZW5kIChvdXQsIHQwLCBiMCwgbTEsIHNpemUpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfcGFja2VkX2MgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfYyAoc2VsZiwgb3V0LCBzY2FubGluZXMtPnQwLCBzY2FubGluZXMtPmIwLAotICAgICAgc2NhbmxpbmVzLT5tMSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfcGxhbmFyX3lfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLAotICAgIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+dDAsIHNjYW5saW5lcy0+YjAsCi0gICAgICBzY2FubGluZXMtPm0xLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wbGFuYXJfdV9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX2MgKHNlbGYsIG91dCwgc2NhbmxpbmVzLT50MCwgc2NhbmxpbmVzLT5iMCwKLSAgICAgIHNjYW5saW5lcy0+bTEsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX3BsYW5hcl92X2MgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfYyAoc2VsZiwgb3V0LCBzY2FubGluZXMtPnQwLCBzY2FubGluZXMtPmIwLAotICAgICAgc2NhbmxpbmVzLT5tMSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBndWludDggKiBtMCwgY29uc3QgZ3VpbnQ4ICogdDEsIGNvbnN0IGd1aW50OCAqIGIxLAotICAgIGdpbnQgc2l6ZSkKLXsKLSAgaWYgKHQxID09IE5VTEwpIHsKLSAgICBtZW1jcHkgKG91dCwgbTAsIHNpemUpOwotICB9IGVsc2UgewotICAgIGRlaW50ZXJsYWNlX2xpbmVfbGluZWFyX2JsZW5kIChvdXQsIHQxLCBiMSwgbTAsIHNpemUpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmQyX3BhY2tlZF9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+bTAsIHNjYW5saW5lcy0+dDEsCi0gICAgICBzY2FubGluZXMtPmIxLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZDJfcGxhbmFyX3lfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKgotICAgIHNlbGYsIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+bTAsIHNjYW5saW5lcy0+dDEsCi0gICAgICBzY2FubGluZXMtPmIxLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZDJfcGxhbmFyX3VfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKgotICAgIHNlbGYsIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+bTAsIHNjYW5saW5lcy0+dDEsCi0gICAgICBzY2FubGluZXMtPmIxLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZDJfcGxhbmFyX3ZfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKgotICAgIHNlbGYsIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9jIChzZWxmLCBvdXQsIHNjYW5saW5lcy0+bTAsIHNjYW5saW5lcy0+dDEsCi0gICAgICBzY2FubGluZXMtPmIxLCBzaXplKTsKLX0KLQotR19ERUZJTkVfVFlQRSAoR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXJCbGVuZCwKLSAgICBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9ibGVuZCwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCk7Ci0KLXN0YXRpYyB2b2lkCi0gICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9saW5lYXJfYmxlbmRfY2xhc3NfaW5pdAotICAgIChHc3REZWludGVybGFjZU1ldGhvZExpbmVhckJsZW5kQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqZGltX2NsYXNzID0gKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKmRpc21fY2xhc3MgPQotICAgICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0KLSAgZGltX2NsYXNzLT5maWVsZHNfcmVxdWlyZWQgPSAyOwotICBkaW1fY2xhc3MtPm5hbWUgPSAiQmx1cjogVGVtcG9yYWwiOwotICBkaW1fY2xhc3MtPm5pY2sgPSAibGluZWFyYmxlbmQiOwotICBkaW1fY2xhc3MtPmxhdGVuY3kgPSAxOwotCi0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l1eTIgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV95dnl1ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2F5dXYgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hcmdiID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2FiZ3IgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3JhID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX252MjEgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX3BhY2tlZF9jOwotCi0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZF9wbGFuYXJfeV9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmRfcGxhbmFyX3VfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kX3BsYW5hcl92X2M7Ci0KLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV95dXkyID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV95dnl1ID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV91eXZ5ID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9heXV2ID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9hcmdiID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9hYmdyID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9yZ2JhID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9iZ3JhID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9yZ2IgPSBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmQyX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX2JnciA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZDJfcGFja2VkX2M7Ci0KLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfeSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV9saW5lYXJfYmxlbmQyX3BsYW5hcl95X2M7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3UgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfbGluZWFyX2JsZW5kMl9wbGFuYXJfdV9jOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3BsYW5hcl92ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX2xpbmVhcl9ibGVuZDJfcGxhbmFyX3ZfYzsKLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9saW5lYXJfYmxlbmRfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RMaW5lYXJCbGVuZCAqCi0gICAgc2VsZikKLXsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvbW14LmggYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL21teC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGU1ODJiLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvbW14LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MjMgKzAsMCBAQAotLyoJbW14LmgKLQotCU11bHRpTWVkaWEgZVh0ZW5zaW9ucyBHQ0MgaW50ZXJmYWNlIGxpYnJhcnkgZm9yIElBMzIuCi0KLQlUbyB1c2UgdGhpcyBsaWJyYXJ5LCBzaW1wbHkgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlCi0JYW5kIGNvbXBpbGUgd2l0aCBHQ0MuICBZb3UgTVVTVCBoYXZlIGlubGluaW5nIGVuYWJsZWQKLQlpbiBvcmRlciBmb3IgbW14X29rKCkgdG8gd29yazsgdGhpcyBjYW4gYmUgZG9uZSBieQotCXNpbXBseSB1c2luZyAtTyBvbiB0aGUgR0NDIGNvbW1hbmQgbGluZS4KLQotCUNvbXBpbGluZyB3aXRoIC1ETU1YX1RSQUNFIHdpbGwgY2F1c2UgZGV0YWlsZWQgdHJhY2UKLQlvdXRwdXQgdG8gYmUgc2VudCB0byBzdGRlcnIgZm9yIGVhY2ggbW14IG9wZXJhdGlvbi4KLQlUaGlzIGFkZHMgbG90cyBvZiBjb2RlLCBhbmQgb2J2aW91c2x5IHNsb3dzIGV4ZWN1dGlvbiB0bwotCWEgY3Jhd2wsIGJ1dCBjYW4gYmUgdmVyeSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KLQotCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWQotCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQKLQlMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQotCUFORCBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0JMTk5Ny05OCBieSBILiBEaWV0eiBhbmQgUi4gRmlzaGVyCi0KLSBIaXN0b3J5OgotCTk3LTk4KglSLkZpc2hlcglFYXJseSB2ZXJzaW9ucwotCTk4MDUwMQlSLkZpc2hlcglPcmlnaW5hbCBSZWxlYXNlCi0JOTgwNjExKglILkRpZXR6CQlSZXdyaXRlLCBjb3JyZWN0bHkgaW1wbGVtZW50aW5nIGlubGluZXMsIGFuZAotCQlSLkZpc2hlcgkgaW5jbHVkaW5nIGRpcmVjdCByZWdpc3RlciBhY2Nlc3Nlcy4KLQk5ODA2MTYJUi5GaXNoZXIJUmVsZWFzZSBvZiA5ODA2MTEgYXMgOTgwNjE2LgotCTk4MDcxNAlSLkZpc2hlcglNaW5vciBjb3JyZWN0aW9ucyB0byBNYWtlZmlsZSwgZXRjLgotCTk4MDcxNQlSLkZpc2hlcgltbXhfb2soKSBub3cgcHJldmVudHMgb3B0aW1pemVyIGZyb20gdXNpbmcKLQkJCQkgY2xvYmJlcmVkIHZhbHVlcy4KLQkJCQltbXhfb2soKSBub3cgY2hlY2tzIGlmIGNwdWlkIGluc3RydWN0aW9uIGlzCi0JCQkJIGF2YWlsYWJsZSBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdC4KLQk5ODA3MjYqCVIuRmlzaGVyCW1tX3N1cHBvcnQoKSBzZWFyY2hlcyBmb3IgQU1EIDNETm93LCBDeXJpeAotCQkJCSBFeHRlbmRlZCBNTVgsIGFuZCBzdGFuZGFyZCBNTVguICBJdCByZXR1cm5zIGEKLQkJCQkgdmFsdWUgd2hpY2ggaXMgcG9zaXRpdmUgaWYgYW55IG9mIHRoZXNlIGFyZQotCQkJCSBzdXBwb3J0ZWQsIGFuZCBjYW4gYmUgbWFza2VkIHdpdGggY29uc3RhbnRzIHRvCi0JCQkJIHNlZSB3aGljaC4gIG1teF9vaygpIGlzIG5vdyBhIGNhbGwgdG8gdGhpcwotCTk4MDcyNioJUi5GaXNoZXIJQWRkZWQgaTJyIHN1cHBvcnQgZm9yIHNoaWZ0IGZ1bmN0aW9ucwotCTk4MDkxOQlSLkZpc2hlcglGaXhlZCBBTUQgZXh0ZW5kZWQgZmVhdHVyZSByZWNvZ25pdGlvbiBidWcuCi0JOTgwOTIxCVIuRmlzaGVyCUFkZGVkIGRlZmluaXRpb24vY2hlY2sgZm9yIF9NTVhfSC4KLQkJCQlBZGRlZCAiZmxvYXQgc1syXSIgdG8gbW14X3QgZm9yIHVzZSB3aXRoCi0JCQkJICAzRE5vdyBhbmQgRU1NWC4gIFNvIHNhbWUgbW14X3QgY2FuIGJlIHVzZWQuCi0JOTgxMDEzCVIuRmlzaGVyCUZpeGVkIGNwdWlkIGZ1bmN0aW9uIDEgYnVnIChsb29rZWQgYXQgd3JvbmcgcmVnKQotCQkJCUZpeGVkIHBzbGxxX2kyciBlcnJvciBpbiBtbXh0ZXN0LmMKLQotCSogVW5yZWxlYXNlZCAoaW50ZXJuYWwgb3IgaW50ZXJpbSkgdmVyc2lvbnMKLQotIE5vdGVzOgotCUl0IGFwcGVhcnMgdGhhdCB0aGUgbGF0ZXN0IGdhcyBoYXMgdGhlIHBhbmQgcHJvYmxlbSBmaXhlZCwgdGhlcmVmb3JlCi0JICBJJ2xsIHVuZGVmaW5lIEJST0tFTl9QQU5EIGJ5IGRlZmF1bHQuCi0JU3RyaW5nIGNvbXBhcmVzIG1heSBiZSBxdWlja2VyIHRoYW4gdGhlIG11bHRpcGxlIHRlc3QvanVtcHMgaW4gdmVuZG9yCi0JICB0ZXN0IHNlcXVlbmNlIGluIG1teF9vaygpLCBidXQgSSdtIG5vdCBjb25jZXJuZWQgd2l0aCB0aGF0IHJpZ2h0IG5vdy4KLQotIEFja25vd2xlZGdtZW50czoKLQlKdXNzaSBMYWFrbyBmb3IgcG9pbnRpbmcgb3V0IHRoZSBlcnJvcnMgdWx0aW1hdGVseSBmb3VuZCB0byBiZQotCSAgY29ubmVjdGVkIHRvIHRoZSBmYWlsdXJlIHRvIG5vdGlmeSB0aGUgb3B0aW1pemVyIG9mIGNsb2JiZXJlZCB2YWx1ZXMuCi0JUm9nZXIgSGFyZGltYW4gZm9yIHJlbWluZGluZyB1cyB0aGF0IENQVUlEIGlzbid0IGV2ZXJ5d2hlcmUsIGFuZCB0aGF0Ci0JICBzb21lb25lIG1heSBhY3R1YWxseSB0cnkgdG8gdXNlIHRoaXMgb24gYSBtYWNoaW5lIHdpdGhvdXQgQ1BVSUQuCi0JICBBbHNvIGZvciBzdWdnZXN0aW5nIGNvZGUgZm9yIGNoZWNraW5nIHRoaXMuCi0JUm9iZXJ0IERhbGUgZm9yIHBvaW50aW5nIG91dCB0aGUgQU1EIHJlY29nbml0aW9uIGJ1Zy4KLQlKaW1teSBNYXlmaWVsZCBhbmQgQ2FybCBXaXR0eSBmb3IgcG9pbnRpbmcgb3V0IHRoZSBJbnRlbCByZWNvZ25pdGlvbgotCSAgYnVnLgotCUNhcmwgV2l0dHkgZm9yIHBvaW50aW5nIG91dCB0aGUgcHNsbHFfaTJyIHRlc3QgYnVnLgotKi8KLQotI2lmbmRlZiBfTU1YX0gKLSNkZWZpbmUgX01NWF9ICi0KLS8qI2RlZmluZSBNTVhfVFJBQ0UgKi8KLQotLyoJV2FybmluZzogIGF0IHRoaXMgd3JpdGluZywgdGhlIHZlcnNpb24gb2YgR0FTIHBhY2thZ2VkCi0Jd2l0aCBtb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMgZG9lcyBub3QgaGFuZGxlIHRoZQotCXBhcmFsbGVsIEFORCBvcGVyYXRpb24gbW5lbW9uaWMgY29ycmVjdGx5LiAgSWYgdGhlCi0Jc3ltYm9sIEJST0tFTl9QQU5EIGlzIGRlZmluZWQsIGEgc2xvd2VyIGFsdGVybmF0aXZlCi0JY29kaW5nIHdpbGwgYmUgdXNlZC4gIElmIGV4ZWN1dGlvbiBvZiBtbXh0ZXN0IHJlc3VsdHMKLQlpbiBhbiBpbGxlZ2FsIGluc3RydWN0aW9uIGZhdWx0LCBkZWZpbmUgdGhpcyBzeW1ib2wuCi0qLwotI3VuZGVmCUJST0tFTl9QQU5ECi0KLQotLyoJVGhlIHR5cGUgb2YgYW4gdmFsdWUgdGhhdCBmaXRzIGluIGFuIE1NWCByZWdpc3RlcgotCShub3RlIHRoYXQgbG9uZyBsb25nIGNvbnN0YW50IHZhbHVlcyBNVVNUIGJlIHN1ZmZpeGVkCi0JIGJ5IExMIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWVzIGJ5IFVMTCwgbGVzdAotCSB0aGV5IGJlIHRydW5jYXRlZCBieSB0aGUgY29tcGlsZXIpCi0qLwotdHlwZWRlZgl1bmlvbiB7Ci0JbG9uZyBsb25nCQlxOwkvKiBRdWFkd29yZCAoNjQtYml0KSB2YWx1ZSAqLwotCXVuc2lnbmVkIGxvbmcgbG9uZwl1cTsJLyogVW5zaWduZWQgUXVhZHdvcmQgKi8KLQlpbnQJCQlkWzJdOwkvKiAyIERvdWJsZXdvcmQgKDMyLWJpdCkgdmFsdWVzICovCi0JdW5zaWduZWQgaW50CQl1ZFsyXTsJLyogMiBVbnNpZ25lZCBEb3VibGV3b3JkICovCi0Jc2hvcnQJCQl3WzRdOwkvKiA0IFdvcmQgKDE2LWJpdCkgdmFsdWVzICovCi0JdW5zaWduZWQgc2hvcnQJCXV3WzRdOwkvKiA0IFVuc2lnbmVkIFdvcmQgKi8KLQljaGFyCQkJYls4XTsJLyogOCBCeXRlICg4LWJpdCkgdmFsdWVzICovCi0JdW5zaWduZWQgY2hhcgkJdWJbOF07CS8qIDggVW5zaWduZWQgQnl0ZSAqLwotCWZsb2F0CQkJc1syXTsJLyogU2luZ2xlLXByZWNpc2lvbiAoMzItYml0KSB2YWx1ZSAqLwotfSBtbXhfdDsKLQotCi0vKglGdW5jdGlvbiB0byB0ZXN0IGlmIG11bHRpbWVkaWEgaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQuLi4KLSovCi1zdGF0aWMgaW5saW5lIGludAotbW1fc3VwcG9ydCh2b2lkKQotewotCS8qIFJldHVybnMgMSBpZiBNTVggaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQsCi0JICAgMyBpZiBDeXJpeCBNTVggYW5kIEV4dGVuZGVkIE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZAotCSAgIDUgaWYgQU1EIE1NWCBhbmQgM0ROb3chIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkCi0JICAgMCBpZiBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvZiB0aGVzZQotCSovCi0JcmVnaXN0ZXIgaW50IHJ2YWwgPSAwOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkvKiBTZWUgaWYgQ1BVSUQgaW5zdHJ1Y3Rpb24gaXMgc3VwcG9ydGVkIC4uLiAqLwotCQkvKiAuLi4gR2V0IGNvcGllcyBvZiBFRkxBR1MgaW50byBlYXggYW5kIGVjeCAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0JCSJtb3ZsICUlZWF4LCAlJWVjeFxuXHQiCi0KLQkJLyogLi4uIFRvZ2dsZSB0aGUgSUQgYml0IGluIG9uZSBjb3B5IGFuZCBzdG9yZSAqLwotCQkvKiAgICAgdG8gdGhlIEVGTEFHUyByZWcgKi8KLQkJInhvcmwgJDB4MjAwMDAwLCAlJWVheFxuXHQiCi0JCSJwdXNoICUlZWF4XG5cdCIKLQkJInBvcGZcblx0IgotCi0JCS8qIC4uLiBHZXQgdGhlIChob3BlZnVsbHkgbW9kaWZpZWQpIEVGTEFHUyAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0KLQkJLyogLi4uIENvbXBhcmUgYW5kIHRlc3QgcmVzdWx0ICovCi0JCSJ4b3JsICUlZWF4LCAlJWVjeFxuXHQiCi0JCSJ0ZXN0bCAkMHgyMDAwMDAsICUlZWN4XG5cdCIKLQkJImp6IE5vdFN1cHBvcnRlZDFcblx0IgkJLyogTm90aGluZyBzdXBwb3J0ZWQgKi8KLQotCi0JCS8qIEdldCBzdGFuZGFyZCBDUFVJRCBpbmZvcm1hdGlvbiwgYW5kCi0JCSAgICAgICBnbyB0byBhIHNwZWNpZmljIHZlbmRvciBzZWN0aW9uICovCi0JCSJtb3ZsICQwLCAlJWVheFxuXHQiCi0JCSJjcHVpZFxuXHQiCi0KLQkJLyogQ2hlY2sgZm9yIEludGVsICovCi0JCSJjbXBsICQweDc1NmU2NTQ3LCAlJWVieFxuXHQiCi0JCSJqbmUgVHJ5QU1EXG5cdCIKLQkJImNtcGwgJDB4NDk2NTZlNjksICUlZWR4XG5cdCIKLQkJImpuZSBUcnlBTURcblx0IgotCQkiY21wbCAkMHg2YzY1NzQ2ZSwgJSVlY3hcbiIKLQkJImpuZSBUcnlBTURcblx0IgotCQkiam1wIEludGVsXG5cdCIKLQotCQkvKiBDaGVjayBmb3IgQU1EICovCi0JCSJcblRyeUFNRDpcblx0IgotCQkiY21wbCAkMHg2ODc0NzU0MSwgJSVlYnhcblx0IgotCQkiam5lIFRyeUN5cml4XG5cdCIKLQkJImNtcGwgJDB4Njk3NDZlNjUsICUlZWR4XG5cdCIKLQkJImpuZSBUcnlDeXJpeFxuXHQiCi0JCSJjbXBsICQweDQ0NGQ0MTYzLCAlJWVjeFxuIgotCQkiam5lIFRyeUN5cml4XG5cdCIKLQkJImptcCBBTURcblx0IgotCi0JCS8qIENoZWNrIGZvciBDeXJpeCAqLwotCQkiXG5UcnlDeXJpeDpcblx0IgotCQkiY21wbCAkMHg2OTcyNzk0MywgJSVlYnhcblx0IgotCQkiam5lIE5vdFN1cHBvcnRlZDJcblx0IgotCQkiY21wbCAkMHg3MzZlNDk3OCwgJSVlZHhcblx0IgotCQkiam5lIE5vdFN1cHBvcnRlZDNcblx0IgotCQkiY21wbCAkMHg2NDYxNjU3NCwgJSVlY3hcblx0IgotCQkiam5lIE5vdFN1cHBvcnRlZDRcblx0IgotCQkvKiBEcm9wIHRocm91Z2ggdG8gQ3lyaXguLi4gKi8KLQotCi0JCS8qIEN5cml4IFNlY3Rpb24gKi8KLQkJLyogU2VlIGlmIGV4dGVuZGVkIENQVUlEIGlzIHN1cHBvcnRlZCAqLwotCQkibW92bCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkiY21wbCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgotCQkiamwgTU1YdGVzdFxuXHQiCS8qIFRyeSBzdGFuZGFyZCBDUFVJRCBpbnN0ZWFkICovCi0KLQkJLyogRXh0ZW5kZWQgQ1BVSUQgc3VwcG9ydGVkLCBzbyBnZXQgZXh0ZW5kZWQgZmVhdHVyZXMgKi8KLQkJIm1vdmwgJDB4ODAwMDAwMDEsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQkJInRlc3RsICQweDAwODAwMDAwLCAlJWVheFxuXHQiCS8qIFRlc3QgZm9yIE1NWCAqLwotCQkianogTm90U3VwcG9ydGVkNVxuXHQiCQkvKiBNTVggbm90IHN1cHBvcnRlZCAqLwotCQkidGVzdGwgJDB4MDEwMDAwMDAsICUlZWF4XG5cdCIJLyogVGVzdCBmb3IgRXh0J2QgTU1YICovCi0JCSJqbnogRU1NWFN1cHBvcnRlZFxuXHQiCi0JCSJtb3ZsICQxLCAlMFxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblxuIgotCQkiRU1NWFN1cHBvcnRlZDpcblx0IgotCQkibW92bCAkMywgJTBcblxuXHQiCQkvKiBFTU1YIGFuZCBNTVggU3VwcG9ydGVkICovCi0JCSJqbXAgUmV0dXJuXG5cdCIKLQotCi0JCS8qIEFNRCBTZWN0aW9uICovCi0JCSJBTUQ6XG5cdCIKLQotCQkvKiBTZWUgaWYgZXh0ZW5kZWQgQ1BVSUQgaXMgc3VwcG9ydGVkICovCi0JCSJtb3ZsICQweDgwMDAwMDAwLCAlJWVheFxuXHQiCi0JCSJjcHVpZFxuXHQiCi0JCSJjbXBsICQweDgwMDAwMDAwLCAlJWVheFxuXHQiCi0JCSJqbCBNTVh0ZXN0XG5cdCIJLyogVHJ5IHN0YW5kYXJkIENQVUlEIGluc3RlYWQgKi8KLQotCQkvKiBFeHRlbmRlZCBDUFVJRCBzdXBwb3J0ZWQsIHNvIGdldCBleHRlbmRlZCBmZWF0dXJlcyAqLwotCQkibW92bCAkMHg4MDAwMDAwMSwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkidGVzdGwgJDB4MDA4MDAwMDAsICUlZWR4XG5cdCIJLyogVGVzdCBmb3IgTU1YICovCi0JCSJqeiBOb3RTdXBwb3J0ZWQ2XG5cdCIJCS8qIE1NWCBub3Qgc3VwcG9ydGVkICovCi0JCSJ0ZXN0bCAkMHg4MDAwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciAzRE5vdyEgKi8KLQkJImpueiBUaHJlZUROb3dTdXBwb3J0ZWRcblx0IgotCQkibW92bCAkMSwgJTBcblxuXHQiCQkvKiBNTVggU3VwcG9ydGVkICovCi0JCSJqbXAgUmV0dXJuXG5cbiIKLQkJIlRocmVlRE5vd1N1cHBvcnRlZDpcblx0IgotCQkibW92bCAkNSwgJTBcblxuXHQiCQkvKiAzRE5vdyEgYW5kIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblx0IgotCi0KLQkJLyogSW50ZWwgU2VjdGlvbiAqLwotCQkiSW50ZWw6XG5cdCIKLQotCQkvKiBDaGVjayBmb3IgTU1YICovCi0JCSJNTVh0ZXN0OlxuXHQiCi0JCSJtb3ZsICQxLCAlJWVheFxuXHQiCi0JCSJjcHVpZFxuXHQiCi0JCSJ0ZXN0bCAkMHgwMDgwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciBNTVggKi8KLQkJImp6IE5vdFN1cHBvcnRlZDdcblx0IgkJLyogTU1YIE5vdCBzdXBwb3J0ZWQgKi8KLQkJIm1vdmwgJDEsICUwXG5cblx0IgkJLyogTU1YIFN1cHBvcnRlZCAqLwotCQkiam1wIFJldHVyblxuXHQiCi0KLQkJLyogTm90aGluZyBzdXBwb3J0ZWQgKi8KLQkJIlxuTm90U3VwcG9ydGVkMTpcblx0IgotCQkiI21vdmwgJDEwMSwgJTBcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDI6XG5cdCIKLQkJIiNtb3ZsICQxMDIsICUwXG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQzOlxuXHQiCi0JCSIjbW92bCAkMTAzLCAlMFxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkNDpcblx0IgotCQkiI21vdmwgJDEwNCwgJTBcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDU6XG5cdCIKLQkJIiNtb3ZsICQxMDUsICUwXG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQ2OlxuXHQiCi0JCSIjbW92bCAkMTA2LCAlMFxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkNzpcblx0IgotCQkiI21vdmwgJDEwNywgJTBcblxuXHQiCi0JCSJtb3ZsICQwLCAlMFxuXG5cdCIKLQotCQkiUmV0dXJuOlxuXHQiCi0JCTogIj1hIiAocnZhbCkKLQkJOiAvKiBubyBpbnB1dCAqLwotCQk6ICJlYXgiLCAiZWJ4IiwgImVjeCIsICJlZHgiCi0JKTsKLQotCS8qIFJldHVybiAqLwotCXJldHVybihydmFsKTsKLX0KLQotLyoJRnVuY3Rpb24gdG8gdGVzdCBpZiBtbXggaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQuLi4KLSovCi1zdGF0aWMgaW5saW5lIGludAotbW14X29rKHZvaWQpCi17Ci0JLyogUmV0dXJucyAxIGlmIE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UgKi8KLQlyZXR1cm4gKCBtbV9zdXBwb3J0KCkgJiAweDEgKTsKLX0KLQotCi0vKglIZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgaW5zdHJ1Y3Rpb24gbWFjcm9zIHRoYXQgZm9sbG93Li4uCi0JKG5vdGUgdGhhdCBtZW1vcnktdG8tcmVnaXN0ZXIsIG0yciwgaW5zdHJ1Y3Rpb25zIGFyZSBuZWFybHkKLQkgYXMgZWZmaWNpZW50IGFzIHJlZ2lzdGVyLXRvLXJlZ2lzdGVyLCByMnIsIGluc3RydWN0aW9uczsKLQkgaG93ZXZlciwgbWVtb3J5LXRvLW1lbW9yeSBpbnN0cnVjdGlvbnMgYXJlIHJlYWxseSBzaW11bGF0ZWQKLQkgYXMgYSBjb252ZW5pZW5jZSwgYW5kIGFyZSBvbmx5IDEvMyBhcyBlZmZpY2llbnQpCi0qLwotI2lmZGVmCU1NWF9UUkFDRQotCi0vKglJbmNsdWRlIHRoZSBzdHVmZiBmb3IgcHJpbnRpbmcgYSB0cmFjZSB0byBzdGRlcnIuLi4KLSovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jZGVmaW5lCW1teF9pMnIob3AsIGltbSwgcmVnKSBcCi0JeyBcCi0JCW1teF90IG1teF90cmFjZTsgXAotCQltbXhfdHJhY2UgPSAoaW1tKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI29wICJfaTJyKCIgI2ltbSAiPTB4JTAxNmxseCwgIiwgbW14X3RyYWNlLnEpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWcgIj0weCUwMTZsbHgpID0+ICIsIG1teF90cmFjZS5xKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJCSAgICAgIDogIlgiIChpbW0pKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjcmVnICI9MHglMDE2bGx4XG4iLCBtbXhfdHJhY2UucSk7IFwKLQl9Ci0KLSNkZWZpbmUJbW14X20ycihvcCwgbWVtLCByZWcpIFwKLQl7IFwKLQkJbW14X3QgbW14X3RyYWNlOyBcCi0JCW1teF90cmFjZSA9IChtZW0pOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9tMnIoIiAjbWVtICI9MHglMDE2bGx4LCAiLCBtbXhfdHJhY2UucSk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVnICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtbXhfdHJhY2UpIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI3JlZyAiPTB4JTAxNmxseCkgPT4gIiwgbW14X3RyYWNlLnEpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkJICAgICAgOiAiWCIgKG1lbSkpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWcgIj0weCUwMTZsbHhcbiIsIG1teF90cmFjZS5xKTsgXAotCX0KLQotI2RlZmluZQltbXhfcjJtKG9wLCByZWcsIG1lbSkgXAotCXsgXAotCQltbXhfdCBtbXhfdHJhY2U7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVnICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtbXhfdHJhY2UpIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI29wICJfcjJtKCIgI3JlZyAiPTB4JTAxNmxseCwgIiwgbW14X3RyYWNlLnEpOyBcCi0JCW1teF90cmFjZSA9IChtZW0pOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjbWVtICI9MHglMDE2bGx4KSA9PiAiLCBtbXhfdHJhY2UucSk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtZW0pIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQltbXhfdHJhY2UgPSAobWVtKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbSAiPTB4JTAxNmxseFxuIiwgbW14X3RyYWNlLnEpOyBcCi0JfQotCi0jZGVmaW5lCW1teF9yMnIob3AsIHJlZ3MsIHJlZ2QpIFwKLQl7IFwKLQkJbW14X3QgbW14X3RyYWNlOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZ3MgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9yMnIoIiAjcmVncyAiPTB4JTAxNmxseCwgIiwgbW14X3RyYWNlLnEpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZ2QgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjcmVnZCAiPTB4JTAxNmxseCkgPT4gIiwgbW14X3RyYWNlLnEpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlIiAjcmVncyAiLCAlIiAjcmVnZCk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVnZCAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWdkICI9MHglMDE2bGx4XG4iLCBtbXhfdHJhY2UucSk7IFwKLQl9Ci0KLSNkZWZpbmUJbW14X20ybShvcCwgbWVtcywgbWVtZCkgXAotCXsgXAotCQltbXhfdCBtbXhfdHJhY2U7IFwKLQkJbW14X3RyYWNlID0gKG1lbXMpOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9tMm0oIiAjbWVtcyAiPTB4JTAxNmxseCwgIiwgbW14X3RyYWNlLnEpOyBcCi0JCW1teF90cmFjZSA9IChtZW1kKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbWQgIj0weCUwMTZsbHgpID0+ICIsIG1teF90cmFjZS5xKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJCSAgICAgICNvcCAiICUxLCAlJW1tMFxuXHQiIFwKLQkJCQkgICAgICAibW92cSAlJW1tMCwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1lbWQpIFwKLQkJCQkgICAgICA6ICJYIiAobWVtcykpOyBcCi0JCW1teF90cmFjZSA9IChtZW1kKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbWQgIj0weCUwMTZsbHhcbiIsIG1teF90cmFjZS5xKTsgXAotCX0KLQotI2Vsc2UKLQotLyoJVGhlc2UgbWFjcm9zIGFyZSBhIGxvdCBzaW1wbGVyIHdpdGhvdXQgdGhlIHRyYWNpbmcuLi4KLSovCi0KLSNkZWZpbmUJbW14X2kycihvcCwgaW1tLCByZWcpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJCIgI2ltbSAiLCAlJSIgI3JlZyBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovKTsKLQotI2RlZmluZQltbXhfbTJyKG9wLCBtZW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIm0iIChtZW0pKQotCi0jZGVmaW5lCW1teF9yMm0ob3AsIHJlZywgbWVtKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkgICAgICA6ICI9bSIgKG1lbSkgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovICkKLQotI2RlZmluZQltbXhfcjJyKG9wLCByZWdzLCByZWdkKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUiICNyZWdzICIsICUiICNyZWdkKQotCi0jZGVmaW5lCW1teF9tMm0ob3AsIG1lbXMsIG1lbWQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJICAgICAgI29wICIgJTEsICUlbW0wXG5cdCIgXAotCQkJICAgICAgIm1vdnEgJSVtbTAsICUwIiBcCi0JCQkgICAgICA6ICI9bSIgKG1lbWQpIFwKLQkJCSAgICAgIDogIm0iIChtZW1zKSkKLQotI2VuZGlmCi0KLQotLyoJMXg2NCBNT1ZlIFF1YWR3b3JkCi0JKHRoaXMgaXMgYm90aCBhIGxvYWQgYW5kIGEgc3RvcmUuLi4KLQkgaW4gZmFjdCwgaXQgaXMgdGhlIG9ubHkgd2F5IHRvIHN0b3JlKQotKi8KLSNkZWZpbmUJbW92cV9tMnIodmFyLCByZWcpCW1teF9tMnIobW92cSwgdmFyLCByZWcpCi0jZGVmaW5lCW1vdnFfcjJtKHJlZywgdmFyKQltbXhfcjJtKG1vdnEsIHJlZywgdmFyKQotI2RlZmluZQltb3ZxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKG1vdnEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCW1vdnEodmFycywgdmFyZCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlMSwgJSVtbTBcblx0IiBcCi0JCQkgICAgICAibW92cSAlJW1tMCwgJTAiIFwKLQkJCSAgICAgIDogIj1YIiAodmFyZCkgXAotCQkJICAgICAgOiAiWCIgKHZhcnMpKQotCi0KLS8qCTF4MzIgTU9WZSBEb3VibGV3b3JkCi0JKGxpa2UgbW92cSwgdGhpcyBpcyBib3RoIGxvYWQgYW5kIHN0b3JlLi4uCi0JIGJ1dCBpcyBtb3N0IHVzZWZ1bCBmb3IgbW92aW5nIHRoaW5ncyBiZXR3ZWVuCi0JIG1teCByZWdpc3RlcnMgYW5kIG9yZGluYXJ5IHJlZ2lzdGVycykKLSovCi0jZGVmaW5lCW1vdmRfbTJyKHZhciwgcmVnKQltbXhfbTJyKG1vdmQsIHZhciwgcmVnKQotI2RlZmluZQltb3ZkX3IybShyZWcsIHZhcikJbW14X3IybShtb3ZkLCByZWcsIHZhcikKLSNkZWZpbmUJbW92ZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihtb3ZkLCByZWdzLCByZWdkKQotI2RlZmluZQltb3ZkKHZhcnMsIHZhcmQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmQgJTEsICUlbW0wXG5cdCIgXAotCQkJICAgICAgIm1vdmQgJSVtbTAsICUwIiBcCi0JCQkgICAgICA6ICI9WCIgKHZhcmQpIFwKLQkJCSAgICAgIDogIlgiICh2YXJzKSkKLQotCi0vKgkyeDMyLCA0eDE2LCBhbmQgOHg4IFBhcmFsbGVsIEFERHMKLSovCi0jZGVmaW5lCXBhZGRkX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBhZGRkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRkLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBhZGRkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBhZGR3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdywgdmFyLCByZWcpCi0jZGVmaW5lCXBhZGR3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkdyh2YXJzLCB2YXJkKQltbXhfbTJtKHBhZGR3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBhZGRiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkYiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhZGRiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRiLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkYih2YXJzLCB2YXJkKQltbXhfbTJtKHBhZGRiLCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgYW5kIDh4OCBQYXJhbGxlbCBBRERzIHVzaW5nIFNhdHVyYXRpb24gYXJpdGhtZXRpYwotKi8KLSNkZWZpbmUJcGFkZHN3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkc3csIHZhciwgcmVnKQotI2RlZmluZQlwYWRkc3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZHN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkc3codmFycywgdmFyZCkJbW14X20ybShwYWRkc3csIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcGFkZHNiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkc2IsIHZhciwgcmVnKQotI2RlZmluZQlwYWRkc2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZHNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkc2IodmFycywgdmFyZCkJbW14X20ybShwYWRkc2IsIHZhcnMsIHZhcmQpCi0KLQotLyoJNHgxNiBhbmQgOHg4IFBhcmFsbGVsIEFERHMgdXNpbmcgVW5zaWduZWQgU2F0dXJhdGlvbiBhcml0aG1ldGljCi0qLwotI2RlZmluZQlwYWRkdXN3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdXN3LCB2YXIsIHJlZykKLSNkZWZpbmUJcGFkZHVzd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdXN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkdXN3KHZhcnMsIHZhcmQpCW1teF9tMm0ocGFkZHVzdywgdmFycywgdmFyZCkKLQotI2RlZmluZQlwYWRkdXNiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdXNiLCB2YXIsIHJlZykKLSNkZWZpbmUJcGFkZHVzYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdXNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkdXNiKHZhcnMsIHZhcmQpCW1teF9tMm0ocGFkZHVzYiwgdmFycywgdmFyZCkKLQotCi0vKgkyeDMyLCA0eDE2LCBhbmQgOHg4IFBhcmFsbGVsIFNVQnMKLSovCi0jZGVmaW5lCXBzdWJkX20ycih2YXIsIHJlZykJbW14X20ycihwc3ViZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBzdWJkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJkLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3ViZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBzdWJkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBzdWJ3X20ycih2YXIsIHJlZykJbW14X20ycihwc3VidywgdmFyLCByZWcpCi0jZGVmaW5lCXBzdWJ3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJ3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Vidyh2YXJzLCB2YXJkKQltbXhfbTJtKHBzdWJ3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBzdWJiX20ycih2YXIsIHJlZykJbW14X20ycihwc3ViYiwgdmFyLCByZWcpCi0jZGVmaW5lCXBzdWJiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJiLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3ViYih2YXJzLCB2YXJkKQltbXhfbTJtKHBzdWJiLCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgYW5kIDh4OCBQYXJhbGxlbCBTVUJzIHVzaW5nIFNhdHVyYXRpb24gYXJpdGhtZXRpYwotKi8KLSNkZWZpbmUJcHN1YnN3X20ycih2YXIsIHJlZykJbW14X20ycihwc3Vic3csIHZhciwgcmVnKQotI2RlZmluZQlwc3Vic3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Vic3codmFycywgdmFyZCkJbW14X20ybShwc3Vic3csIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHN1YnNiX20ycih2YXIsIHJlZykJbW14X20ycihwc3Vic2IsIHZhciwgcmVnKQotI2RlZmluZQlwc3Vic2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Vic2IodmFycywgdmFyZCkJbW14X20ybShwc3Vic2IsIHZhcnMsIHZhcmQpCi0KLQotLyoJNHgxNiBhbmQgOHg4IFBhcmFsbGVsIFNVQnMgdXNpbmcgVW5zaWduZWQgU2F0dXJhdGlvbiBhcml0aG1ldGljCi0qLwotI2RlZmluZQlwc3VidXN3X20ycih2YXIsIHJlZykJbW14X20ycihwc3VidXN3LCB2YXIsIHJlZykKLSNkZWZpbmUJcHN1YnVzd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3VidXN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3VidXN3KHZhcnMsIHZhcmQpCW1teF9tMm0ocHN1YnVzdywgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc3VidXNiX20ycih2YXIsIHJlZykJbW14X20ycihwc3VidXNiLCB2YXIsIHJlZykKLSNkZWZpbmUJcHN1YnVzYl9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3VidXNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3VidXNiKHZhcnMsIHZhcmQpCW1teF9tMm0ocHN1YnVzYiwgdmFycywgdmFyZCkKLQotCi0vKgk0eDE2IFBhcmFsbGVsIE1VTHMgZ2l2aW5nIExvdyA0eDE2IHBvcnRpb25zIG9mIHJlc3VsdHMKLSovCi0jZGVmaW5lCXBtdWxsd19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGx3LCB2YXIsIHJlZykKLSNkZWZpbmUJcG11bGx3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxsdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcG11bGx3KHZhcnMsIHZhcmQpCW1teF9tMm0ocG11bGx3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgUGFyYWxsZWwgTVVMcyBnaXZpbmcgSGlnaCA0eDE2IHBvcnRpb25zIG9mIHJlc3VsdHMKLSovCi0jZGVmaW5lCXBtdWxod19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGh3LCB2YXIsIHJlZykKLSNkZWZpbmUJcG11bGh3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxodywgcmVncywgcmVnZCkKLSNkZWZpbmUJcG11bGh3KHZhcnMsIHZhcmQpCW1teF9tMm0ocG11bGh3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYtPjJ4MzIgUGFyYWxsZWwgTXVsLUFERAotCShtdWxzIGxpa2UgcG11bGx3LCB0aGVuIGFkZHMgYWRqYWNlbnQgMTYtYml0IGZpZWxkcwotCSBpbiB0aGUgbXVsdGlwbHkgcmVzdWx0IHRvIG1ha2UgdGhlIGZpbmFsIDJ4MzIgcmVzdWx0KQotKi8KLSNkZWZpbmUJcG1hZGR3ZF9tMnIodmFyLCByZWcpCW1teF9tMnIocG1hZGR3ZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBtYWRkd2RfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1hZGR3ZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcG1hZGR3ZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBtYWRkd2QsIHZhcnMsIHZhcmQpCi0KLQotLyoJMXg2NCBiaXR3aXNlIEFORAotKi8KLSNpZmRlZglCUk9LRU5fUEFORAotI2RlZmluZQlwYW5kX20ycih2YXIsIHJlZykgXAotCXsgXAotCQltbXhfbTJyKHBhbmRuLCAobW14X3QpIC0xTEwsIHJlZyk7IFwKLQkJbW14X20ycihwYW5kbiwgdmFyLCByZWcpOyBcCi0JfQotI2RlZmluZQlwYW5kX3IycihyZWdzLCByZWdkKSBcCi0JeyBcCi0JCW1teF9tMnIocGFuZG4sIChtbXhfdCkgLTFMTCwgcmVnZCk7IFwKLQkJbW14X3IycihwYW5kbiwgcmVncywgcmVnZCk7IFwKLQl9Ci0jZGVmaW5lCXBhbmQodmFycywgdmFyZCkgXAotCXsgXAotCQltb3ZxX20ycih2YXJkLCBtbTApOyBcCi0JCW1teF9tMnIocGFuZG4sIChtbXhfdCkgLTFMTCwgbW0wKTsgXAotCQltbXhfbTJyKHBhbmRuLCB2YXJzLCBtbTApOyBcCi0JCW1vdnFfcjJtKG1tMCwgdmFyZCk7IFwKLQl9Ci0jZWxzZQotI2RlZmluZQlwYW5kX20ycih2YXIsIHJlZykJbW14X20ycihwYW5kLCB2YXIsIHJlZykKLSNkZWZpbmUJcGFuZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwYW5kLCByZWdzLCByZWdkKQotI2RlZmluZQlwYW5kKHZhcnMsIHZhcmQpCW1teF9tMm0ocGFuZCwgdmFycywgdmFyZCkKLSNlbmRpZgotCi0KLS8qCTF4NjQgYml0d2lzZSBBTkQgd2l0aCBOb3QgdGhlIGRlc3RpbmF0aW9uCi0qLwotI2RlZmluZQlwYW5kbl9tMnIodmFyLCByZWcpCW1teF9tMnIocGFuZG4sIHZhciwgcmVnKQotI2RlZmluZQlwYW5kbl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYW5kbiwgcmVncywgcmVnZCkKLSNkZWZpbmUJcGFuZG4odmFycywgdmFyZCkJbW14X20ybShwYW5kbiwgdmFycywgdmFyZCkKLQotCi0vKgkxeDY0IGJpdHdpc2UgT1IKLSovCi0jZGVmaW5lCXBvcl9tMnIodmFyLCByZWcpCW1teF9tMnIocG9yLCB2YXIsIHJlZykKLSNkZWZpbmUJcG9yX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBvciwgcmVncywgcmVnZCkKLSNkZWZpbmUJcG9yKHZhcnMsIHZhcmQpCW1teF9tMm0ocG9yLCB2YXJzLCB2YXJkKQotCi0KLS8qCTF4NjQgYml0d2lzZSBlWGNsdXNpdmUgT1IKLSovCi0jZGVmaW5lCXB4b3JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB4b3IsIHZhciwgcmVnKQotI2RlZmluZQlweG9yX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB4b3IsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB4b3IodmFycywgdmFyZCkJbW14X20ybShweG9yLCB2YXJzLCB2YXJkKQotCi0KLS8qCTJ4MzIsIDR4MTYsIGFuZCA4eDggUGFyYWxsZWwgQ29NUGFyZSBmb3IgRVF1YWxpdHkKLQkocmVzdWx0aW5nIGZpZWxkcyBhcmUgZWl0aGVyIDAgb3IgLTEpCi0qLwotI2RlZmluZQlwY21wZXFkX20ycih2YXIsIHJlZykJbW14X20ycihwY21wZXFkLCB2YXIsIHJlZykKLSNkZWZpbmUJcGNtcGVxZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZXFkLCByZWdzLCByZWdkKQotI2RlZmluZQlwY21wZXFkKHZhcnMsIHZhcmQpCW1teF9tMm0ocGNtcGVxZCwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwY21wZXF3X20ycih2YXIsIHJlZykJbW14X20ycihwY21wZXF3LCB2YXIsIHJlZykKLSNkZWZpbmUJcGNtcGVxd19yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZXF3LCByZWdzLCByZWdkKQotI2RlZmluZQlwY21wZXF3KHZhcnMsIHZhcmQpCW1teF9tMm0ocGNtcGVxdywgdmFycywgdmFyZCkKLQotI2RlZmluZQlwY21wZXFiX20ycih2YXIsIHJlZykJbW14X20ycihwY21wZXFiLCB2YXIsIHJlZykKLSNkZWZpbmUJcGNtcGVxYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZXFiLCByZWdzLCByZWdkKQotI2RlZmluZQlwY21wZXFiKHZhcnMsIHZhcmQpCW1teF9tMm0ocGNtcGVxYiwgdmFycywgdmFyZCkKLQotCi0vKgkyeDMyLCA0eDE2LCBhbmQgOHg4IFBhcmFsbGVsIENvTVBhcmUgZm9yIEdyZWF0ZXIgVGhhbgotCShyZXN1bHRpbmcgZmllbGRzIGFyZSBlaXRoZXIgMCBvciAtMSkKLSovCi0jZGVmaW5lCXBjbXBndGRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBndGQsIHZhciwgcmVnKQotI2RlZmluZQlwY21wZ3RkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBndGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBjbXBndGQodmFycywgdmFyZCkJbW14X20ybShwY21wZ3RkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBjbXBndHdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBndHcsIHZhciwgcmVnKQotI2RlZmluZQlwY21wZ3R3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBndHcsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBjbXBndHcodmFycywgdmFyZCkJbW14X20ybShwY21wZ3R3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBjbXBndGJfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBndGIsIHZhciwgcmVnKQotI2RlZmluZQlwY21wZ3RiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBndGIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBjbXBndGIodmFycywgdmFyZCkJbW14X20ybShwY21wZ3RiLCB2YXJzLCB2YXJkKQotCi0KLS8qCTF4NjQsIDJ4MzIsIGFuZCA0eDE2IFBhcmFsbGVsIFNoaWZ0IExlZnQgTG9naWNhbAotKi8KLSNkZWZpbmUJcHNsbHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGxxLCBpbW0sIHJlZykKLSNkZWZpbmUJcHNsbHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzbGxxLCB2YXIsIHJlZykKLSNkZWZpbmUJcHNsbHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNsbHEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBzbGxxKHZhcnMsIHZhcmQpCW1teF9tMm0ocHNsbHEsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHNsbGRfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGxkLCBpbW0sIHJlZykKLSNkZWZpbmUJcHNsbGRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzbGxkLCB2YXIsIHJlZykKLSNkZWZpbmUJcHNsbGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNsbGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBzbGxkKHZhcnMsIHZhcmQpCW1teF9tMm0ocHNsbGQsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHNsbHdfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGx3LCBpbW0sIHJlZykKLSNkZWZpbmUJcHNsbHdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzbGx3LCB2YXIsIHJlZykKLSNkZWZpbmUJcHNsbHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNsbHcsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBzbGx3KHZhcnMsIHZhcmQpCW1teF9tMm0ocHNsbHcsIHZhcnMsIHZhcmQpCi0KLQotLyoJMXg2NCwgMngzMiwgYW5kIDR4MTYgUGFyYWxsZWwgU2hpZnQgUmlnaHQgTG9naWNhbAotKi8KLSNkZWZpbmUJcHNybHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmxxLCBpbW0sIHJlZykKLSNkZWZpbmUJcHNybHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmxxLCB2YXIsIHJlZykKLSNkZWZpbmUJcHNybHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNybHEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBzcmxxKHZhcnMsIHZhcmQpCW1teF9tMm0ocHNybHEsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHNybGRfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmxkLCBpbW0sIHJlZykKLSNkZWZpbmUJcHNybGRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmxkLCB2YXIsIHJlZykKLSNkZWZpbmUJcHNybGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNybGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBzcmxkKHZhcnMsIHZhcmQpCW1teF9tMm0ocHNybGQsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHNybHdfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmx3LCBpbW0sIHJlZykKLSNkZWZpbmUJcHNybHdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmx3LCB2YXIsIHJlZykKLSNkZWZpbmUJcHNybHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNybHcsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBzcmx3KHZhcnMsIHZhcmQpCW1teF9tMm0ocHNybHcsIHZhcnMsIHZhcmQpCi0KLQotLyoJMngzMiBhbmQgNHgxNiBQYXJhbGxlbCBTaGlmdCBSaWdodCBBcml0aG1ldGljCi0qLwotI2RlZmluZQlwc3JhZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNyYWQsIGltbSwgcmVnKQotI2RlZmluZQlwc3JhZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNyYWQsIHZhciwgcmVnKQotI2RlZmluZQlwc3JhZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JhZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNyYWQodmFycywgdmFyZCkJbW14X20ybShwc3JhZCwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc3Jhd19pMnIoaW1tLCByZWcpCW1teF9pMnIocHNyYXcsIGltbSwgcmVnKQotI2RlZmluZQlwc3Jhd19tMnIodmFyLCByZWcpCW1teF9tMnIocHNyYXcsIHZhciwgcmVnKQotI2RlZmluZQlwc3Jhd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JhdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNyYXcodmFycywgdmFyZCkJbW14X20ybShwc3JhdywgdmFycywgdmFyZCkKLQotCi0vKgkyeDMyLT40eDE2IGFuZCA0eDE2LT44eDggUEFDSyBhbmQgU2lnbmVkIFNhdHVyYXRlCi0JKHBhY2tzIHNvdXJjZSBhbmQgZGVzdCBmaWVsZHMgaW50byBkZXN0IGluIHRoYXQgb3JkZXIpCi0qLwotI2RlZmluZQlwYWNrc3Nkd19tMnIodmFyLCByZWcpCW1teF9tMnIocGFja3NzZHcsIHZhciwgcmVnKQotI2RlZmluZQlwYWNrc3Nkd19yMnIocmVncywgcmVnZCkgbW14X3IycihwYWNrc3NkdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcGFja3NzZHcodmFycywgdmFyZCkJbW14X20ybShwYWNrc3NkdywgdmFycywgdmFyZCkKLQotI2RlZmluZQlwYWNrc3N3Yl9tMnIodmFyLCByZWcpCW1teF9tMnIocGFja3Nzd2IsIHZhciwgcmVnKQotI2RlZmluZQlwYWNrc3N3Yl9yMnIocmVncywgcmVnZCkgbW14X3IycihwYWNrc3N3YiwgcmVncywgcmVnZCkKLSNkZWZpbmUJcGFja3Nzd2IodmFycywgdmFyZCkJbW14X20ybShwYWNrc3N3YiwgdmFycywgdmFyZCkKLQotCi0vKgk0eDE2LT44eDggUEFDSyBhbmQgVW5zaWduZWQgU2F0dXJhdGUKLQkocGFja3Mgc291cmNlIGFuZCBkZXN0IGZpZWxkcyBpbnRvIGRlc3QgaW4gdGhhdCBvcmRlcikKLSovCi0jZGVmaW5lCXBhY2t1c3diX20ycih2YXIsIHJlZykJbW14X20ycihwYWNrdXN3YiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhY2t1c3diX3IycihyZWdzLCByZWdkKSBtbXhfcjJyKHBhY2t1c3diLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWNrdXN3Yih2YXJzLCB2YXJkKQltbXhfbTJtKHBhY2t1c3diLCB2YXJzLCB2YXJkKQotCi0KLS8qCTJ4MzItPjF4NjQsIDR4MTYtPjJ4MzIsIGFuZCA4eDgtPjR4MTYgVU5QYUNLIExvdwotCShpbnRlcmxlYXZlcyBsb3cgaGFsZiBvZiBkZXN0IHdpdGggbG93IGhhbGYgb2Ygc291cmNlCi0JIGFzIHBhZGRpbmcgaW4gZWFjaCByZXN1bHQgZmllbGQpCi0qLwotI2RlZmluZQlwdW5wY2tsZHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB1bnBja2xkcSwgdmFyLCByZWcpCi0jZGVmaW5lCXB1bnBja2xkcV9yMnIocmVncywgcmVnZCkgbW14X3IycihwdW5wY2tsZHEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB1bnBja2xkcSh2YXJzLCB2YXJkKQltbXhfbTJtKHB1bnBja2xkcSwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwdW5wY2tsd2RfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB1bnBja2x3ZCwgdmFyLCByZWcpCi0jZGVmaW5lCXB1bnBja2x3ZF9yMnIocmVncywgcmVnZCkgbW14X3IycihwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB1bnBja2x3ZCh2YXJzLCB2YXJkKQltbXhfbTJtKHB1bnBja2x3ZCwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwdW5wY2tsYndfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB1bnBja2xidywgdmFyLCByZWcpCi0jZGVmaW5lCXB1bnBja2xid19yMnIocmVncywgcmVnZCkgbW14X3IycihwdW5wY2tsYncsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB1bnBja2xidyh2YXJzLCB2YXJkKQltbXhfbTJtKHB1bnBja2xidywgdmFycywgdmFyZCkKLQotCi0vKgkyeDMyLT4xeDY0LCA0eDE2LT4yeDMyLCBhbmQgOHg4LT40eDE2IFVOUGFDSyBIaWdoCi0JKGludGVybGVhdmVzIGhpZ2ggaGFsZiBvZiBkZXN0IHdpdGggaGlnaCBoYWxmIG9mIHNvdXJjZQotCSBhcyBwYWRkaW5nIGluIGVhY2ggcmVzdWx0IGZpZWxkKQotKi8KLSNkZWZpbmUJcHVucGNraGRxX20ycih2YXIsIHJlZykJbW14X20ycihwdW5wY2toZHEsIHZhciwgcmVnKQotI2RlZmluZQlwdW5wY2toZHFfcjJyKHJlZ3MsIHJlZ2QpIG1teF9yMnIocHVucGNraGRxLCByZWdzLCByZWdkKQotI2RlZmluZQlwdW5wY2toZHEodmFycywgdmFyZCkJbW14X20ybShwdW5wY2toZHEsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHVucGNraHdkX20ycih2YXIsIHJlZykJbW14X20ycihwdW5wY2tod2QsIHZhciwgcmVnKQotI2RlZmluZQlwdW5wY2tod2RfcjJyKHJlZ3MsIHJlZ2QpIG1teF9yMnIocHVucGNraHdkLCByZWdzLCByZWdkKQotI2RlZmluZQlwdW5wY2tod2QodmFycywgdmFyZCkJbW14X20ybShwdW5wY2tod2QsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHVucGNraGJ3X20ycih2YXIsIHJlZykJbW14X20ycihwdW5wY2toYncsIHZhciwgcmVnKQotI2RlZmluZQlwdW5wY2toYndfcjJyKHJlZ3MsIHJlZ2QpIG1teF9yMnIocHVucGNraGJ3LCByZWdzLCByZWdkKQotI2RlZmluZQlwdW5wY2toYncodmFycywgdmFyZCkJbW14X20ybShwdW5wY2toYncsIHZhcnMsIHZhcmQpCi0KLQotLyoJRW1wdHkgTU14IFN0YXRlCi0JKHVzZWQgdG8gY2xlYW4tdXAgd2hlbiBnb2luZyBmcm9tIG1teCB0byBmbG9hdCB1c2UKLQkgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IGFyZSBzaGFyZWQgYnkgYm90aDsgbm90ZSB0aGF0Ci0JIHRoZXJlIGlzIG5vIGZsb2F0LXRvLW1teCBvcGVyYXRpb24gbmVlZGVkLCBiZWNhdXNlCi0JIG9ubHkgdGhlIGZsb2F0IHRhZyB3b3JkIGluZm8gaXMgY29ycnVwdGlibGUpCi0qLwotI2lmZGVmCU1NWF9UUkFDRQotCi0jZGVmaW5lCWVtbXMoKSBcCi0JeyBcCi0JCWZwcmludGYoc3RkZXJyLCAiZW1tcygpXG4iKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiKTsgXAotCX0KLQotI2Vsc2UKLQotI2RlZmluZQllbW1zKCkJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiKQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3BsdWdpbnMuaCBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvcGx1Z2lucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODA4NWI2Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvcGx1Z2lucy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCaWxseSBCaWdncyA8dmVrdG9yQGR1bWJ0ZXJtLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFJlbGljZW5zZWQgZm9yIEdTdHJlYW1lciBmcm9tIEdQTCB0byBMR1BMIHdpdGggcGVybWl0IGZyb20gQmlsbHkgQmlnZ3MuCi0gKiBTZWU6IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzU3OAotICovCi0KLSNpZm5kZWYgVFZUSU1FX1BMVUdJTlNfSF9JTkNMVURFRAotI2RlZmluZSBUVlRJTUVfUExVR0lOU19IX0lOQ0xVREVECi0KLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfVE9NU01PQ09NUCAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVFlQRV9ERUlOVEVSTEFDRV9HUkVFRFlfSCAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfaF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfR1JFRURZX0wgKGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2xfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX1ZGSVIgKGdzdF9kZWludGVybGFjZV9tZXRob2RfdmZpcl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTElORUFSIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTElORUFSX0JMRU5EIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9ibGVuZF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0NBTEVSX0JPQiAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zY2FsZXJfYm9iX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVFlQRV9ERUlOVEVSTEFDRV9XRUFWRSAoZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfV0VBVkVfVEZGIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX3RmZl9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfV0VBVkVfQkZGIChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2JmZl9nZXRfdHlwZSAoKSkKLQotR1R5cGUgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF9kZWludGVybGFjZV9tZXRob2RfZ3JlZWR5X2hfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9ncmVlZHlfbF9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3ZmaXJfZ2V0X3R5cGUgKHZvaWQpOwotCi1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9ibGVuZF9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NjYWxlcl9ib2JfZ2V0X3R5cGUgKHZvaWQpOwotR1R5cGUgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX3RmZl9nZXRfdHlwZSAodm9pZCk7Ci1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2JmZl9nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBUVlRJTUVfUExVR0lOU19IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3NjYWxlcmJvYi5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zY2FsZXJib2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyMGJkNC4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3NjYWxlcmJvYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBEb3VibGUgbGluZXMKLSAqIENvcHlyaWdodCAoQykgMjAwOCwyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RkZWludGVybGFjZW1ldGhvZC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9TQ0FMRVJfQk9CCShnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NjYWxlcl9ib2JfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQihvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQikpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQl9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQl9HRVRfQ0xBU1Mob2JqKQkoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9TQ0FMRVJfQk9CLCBHc3REZWludGVybGFjZU1ldGhvZFNjYWxlckJvYkNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9TQ0FMRVJfQk9CKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9TQ0FMRVJfQk9CLCBHc3REZWludGVybGFjZU1ldGhvZFNjYWxlckJvYikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQl9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQiwgR3N0RGVpbnRlcmxhY2VNZXRob2RTY2FsZXJCb2JDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfU0NBTEVSX0JPQl9DQVNUKG9iaikJKChHc3REZWludGVybGFjZU1ldGhvZFNjYWxlckJvYiopKG9iaikpCi0KLUdUeXBlIGdzdF9kZWludGVybGFjZV9tZXRob2Rfc2NhbGVyX2JvYl9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgR3N0RGVpbnRlcmxhY2VNZXRob2RTY2FsZXJCb2I7Ci10eXBlZGVmIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VNZXRob2RTY2FsZXJCb2JDbGFzczsKLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfc2NhbGVyX2JvYl9wbGFuYXJfeSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLAotICAgIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPnQwLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGxhbmFyX3UgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT50MCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV9zY2FsZXJfYm9iX3BsYW5hcl92IChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotfQotCi1HX0RFRklORV9UWVBFIChHc3REZWludGVybGFjZU1ldGhvZFNjYWxlckJvYiwgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zY2FsZXJfYm9iLAotICAgIEdTVF9UWVBFX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9zY2FsZXJfYm9iX2NsYXNzX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kU2NhbGVyQm9iQ2xhc3MKLSAgICAqIGtsYXNzKQotewotICBHc3REZWludGVybGFjZU1ldGhvZENsYXNzICpkaW1fY2xhc3MgPSAoR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqZGlzbV9jbGFzcyA9Ci0gICAgICAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqKSBrbGFzczsKLQotICBkaW1fY2xhc3MtPmZpZWxkc19yZXF1aXJlZCA9IDI7Ci0gIGRpbV9jbGFzcy0+bmFtZSA9ICJEb3VibGUgbGluZXMiOwotICBkaW1fY2xhc3MtPm5pY2sgPSAic2NhbGVyYm9iIjsKLSAgZGltX2NsYXNzLT5sYXRlbmN5ID0gMTsKLQotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9heXV2ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV95dXkyID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV95dnl1ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV91eXZ5ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9udjEyID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9udjIxID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hcmdiID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hYmdyID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9yZ2JhID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3JhID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9yZ2IgPSBkZWludGVybGFjZV9zY2FubGluZV9zY2FsZXJfYm9iX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfc2NhbGVyX2JvYl9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGxhbmFyX3k7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl91ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGxhbmFyX3U7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl92ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3NjYWxlcl9ib2JfcGxhbmFyX3Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3NjYWxlcl9ib2JfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RTY2FsZXJCb2IgKiBzZWxmKQotewotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zc2UuaCBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvc3NlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMDBlZTAuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS9zc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5MiArMCwwIEBACi0vKglzc2UuaAotCi0JU3RyZWFtaW5nIFNJTUQgRXh0ZW5zdGlvbnMgKGEuay5hLiBLYXRtYWkgTmV3IEluc3RydWN0aW9ucykKLQlHQ0MgaW50ZXJmYWNlIGxpYnJhcnkgZm9yIElBMzIuCi0KLQlUbyB1c2UgdGhpcyBsaWJyYXJ5LCBzaW1wbHkgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlCi0JYW5kIGNvbXBpbGUgd2l0aCBHQ0MuICBZb3UgTVVTVCBoYXZlIGlubGluaW5nIGVuYWJsZWQKLQlpbiBvcmRlciBmb3Igc3NlX29rKCkgdG8gd29yazsgdGhpcyBjYW4gYmUgZG9uZSBieQotCXNpbXBseSB1c2luZyAtTyBvbiB0aGUgR0NDIGNvbW1hbmQgbGluZS4KLQotCUNvbXBpbGluZyB3aXRoIC1EU1NFX1RSQUNFIHdpbGwgY2F1c2UgZGV0YWlsZWQgdHJhY2UKLQlvdXRwdXQgdG8gYmUgc2VudCB0byBzdGRlcnIgZm9yIGVhY2ggc3NlIG9wZXJhdGlvbi4KLQlUaGlzIGFkZHMgbG90cyBvZiBjb2RlLCBhbmQgb2J2aW91c2x5IHNsb3dzIGV4ZWN1dGlvbiB0bwotCWEgY3Jhd2wsIGJ1dCBjYW4gYmUgdmVyeSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4KLQotCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWQotCUVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQKLQlMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQotCUFORCBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0JMTk5OSBieSBSLiBGaXNoZXIKLQlCYXNlZCBvbiBsaWJtbXggYnkgSC4gRGlldHogYW5kIFIuIEZpc2hlcgotCi0gTm90ZXM6Ci0JVGhpcyBpcyBzdGlsbCBleHRyZW1lbHkgYWxwaGEuCi0JQmVjYXVzZSB0aGlzIGxpYnJhcnkgZGVwZW5kcyBvbiBhbiBhc3NlbWJsZXIgd2hpY2ggdW5kZXJzdGFuZHMgdGhlCi0JIFNTRSBvcGNvZGVzLCB5b3UgcHJvYmFibHkgd29uJ3QgYmUgYWJsZSB0byB1c2UgdGhpcyB5ZXQuCi0JRm9yIG5vdywgZG8gbm90IHVzZSBUUkFDRSB2ZXJzaW9ucy4gIFRoZXNlIGJvdGggbWFrZSB1c2UKLQkgb2YgdGhlIE1NWCByZWdpc3RlcnMsIG5vdCB0aGUgU1NFIHJlZ2lzdGVycy4gIFRoaXMgd2lsbCBiZSByZXNvbHZlZAotCSBhdCBhIGxhdGVyIGRhdGUuCi0gVG9EbzoKLQlSZXdyaXRlIFRSQUNFIG1hY3JvcwotCU1ham9yIERlYnVnZ2luZyBXb3JrCi0qLwotCi0jaWZuZGVmIF9TU0VfSAotI2RlZmluZSBfU1NFX0gKLQotCi0KLS8qCVRoZSB0eXBlIG9mIGFuIHZhbHVlIHRoYXQgZml0cyBpbiBhbiBTU0UgcmVnaXN0ZXIKLQkobm90ZSB0aGF0IGxvbmcgbG9uZyBjb25zdGFudCB2YWx1ZXMgTVVTVCBiZSBzdWZmaXhlZAotCSBieSBMTCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlcyBieSBVTEwsIGxlc3QKLQkgdGhleSBiZSB0cnVuY2F0ZWQgYnkgdGhlIGNvbXBpbGVyKQotKi8KLXR5cGVkZWYJdW5pb24gewotCWZsb2F0CQkJc2ZbNF07CS8qIFNpbmdsZS1wcmVjaXNpb24gKDMyLWJpdCkgdmFsdWUgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpIHNzZV90OwkvKiBPbiBhIDE2IGJ5dGUgKDEyOC1iaXQpIGJvdW5kYXJ5ICovCi0KLQotI2lmIDAKLS8qCUZ1bmN0aW9uIHRvIHRlc3QgaWYgbXVsdGltZWRpYSBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4uLgotKi8KLWlubGluZSBleHRlcm4gaW50Ci1tbV9zdXBwb3J0KHZvaWQpCi17Ci0JLyogUmV0dXJucyAxIGlmIE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCwKLQkgICAzIGlmIEN5cml4IE1NWCBhbmQgRXh0ZW5kZWQgTU1YIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkCi0JICAgNSBpZiBBTUQgTU1YIGFuZCAzRE5vdyEgaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQKLQkgICA5IGlmIE1NWCBhbmQgU1NFIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkCi0JICAgMCBpZiBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvZiB0aGVzZQotCSovCi0JcmVnaXN0ZXIgaW50IHJ2YWwgPSAwOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkvKiBTZWUgaWYgQ1BVSUQgaW5zdHJ1Y3Rpb24gaXMgc3VwcG9ydGVkIC4uLiAqLwotCQkvKiAuLi4gR2V0IGNvcGllcyBvZiBFRkxBR1MgaW50byBlYXggYW5kIGVjeCAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0JCSJtb3ZsICUlZWF4LCAlJWVjeFxuXHQiCi0KLQkJLyogLi4uIFRvZ2dsZSB0aGUgSUQgYml0IGluIG9uZSBjb3B5IGFuZCBzdG9yZSAqLwotCQkvKiAgICAgdG8gdGhlIEVGTEFHUyByZWcgKi8KLQkJInhvcmwgJDB4MjAwMDAwLCAlJWVheFxuXHQiCi0JCSJwdXNoICUlZWF4XG5cdCIKLQkJInBvcGZcblx0IgotCi0JCS8qIC4uLiBHZXQgdGhlIChob3BlZnVsbHkgbW9kaWZpZWQpIEVGTEFHUyAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0KLQkJLyogLi4uIENvbXBhcmUgYW5kIHRlc3QgcmVzdWx0ICovCi0JCSJ4b3JsICUlZWF4LCAlJWVjeFxuXHQiCi0JCSJ0ZXN0bCAkMHgyMDAwMDAsICUlZWN4XG5cdCIKLQkJImp6IE5vdFN1cHBvcnRlZDFcblx0IgkJLyogQ1BVSUQgbm90IHN1cHBvcnRlZCAqLwotCi0KLQkJLyogR2V0IHN0YW5kYXJkIENQVUlEIGluZm9ybWF0aW9uLCBhbmQKLQkJICAgICAgIGdvIHRvIGEgc3BlY2lmaWMgdmVuZG9yIHNlY3Rpb24gKi8KLQkJIm1vdmwgJDAsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQotCQkvKiBDaGVjayBmb3IgSW50ZWwgKi8KLQkJImNtcGwgJDB4NzU2ZTY1NDcsICUlZWJ4XG5cdCIKLQkJImpuZSBUcnlBTURcblx0IgotCQkiY21wbCAkMHg0OTY1NmU2OSwgJSVlZHhcblx0IgotCQkiam5lIFRyeUFNRFxuXHQiCi0JCSJjbXBsICQweDZjNjU3NDZlLCAlJWVjeFxuIgotCQkiam5lIFRyeUFNRFxuXHQiCi0JCSJqbXAgSW50ZWxcblx0IgotCi0JCS8qIENoZWNrIGZvciBBTUQgKi8KLQkJIlxuVHJ5QU1EOlxuXHQiCi0JCSJjbXBsICQweDY4NzQ3NTQxLCAlJWVieFxuXHQiCi0JCSJqbmUgVHJ5Q3lyaXhcblx0IgotCQkiY21wbCAkMHg2OTc0NmU2NSwgJSVlZHhcblx0IgotCQkiam5lIFRyeUN5cml4XG5cdCIKLQkJImNtcGwgJDB4NDQ0ZDQxNjMsICUlZWN4XG4iCi0JCSJqbmUgVHJ5Q3lyaXhcblx0IgotCQkiam1wIEFNRFxuXHQiCi0KLQkJLyogQ2hlY2sgZm9yIEN5cml4ICovCi0JCSJcblRyeUN5cml4OlxuXHQiCi0JCSJjbXBsICQweDY5NzI3OTQzLCAlJWVieFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkMlxuXHQiCi0JCSJjbXBsICQweDczNmU0OTc4LCAlJWVkeFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkM1xuXHQiCi0JCSJjbXBsICQweDY0NjE2NTc0LCAlJWVjeFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkNFxuXHQiCi0JCS8qIERyb3AgdGhyb3VnaCB0byBDeXJpeC4uLiAqLwotCi0KLQkJLyogQ3lyaXggU2VjdGlvbiAqLwotCQkvKiBTZWUgaWYgZXh0ZW5kZWQgQ1BVSUQgbGV2ZWwgODAwMDAwMDEgaXMgc3VwcG9ydGVkICovCi0JCS8qIFRoZSB2YWx1ZSBvZiBDUFVJRC84MDAwMDAwMSBmb3IgdGhlIDZ4ODZNWCBpcyB1bmRlZmluZWQKLQkJICAgYWNjb3JkaW5nIHRvIHRoZSBDeXJpeCBDUFUgRGV0ZWN0aW9uIEd1aWRlIChQcmVsaW1pbmFyeQotCQkgICBSZXYuIDEuMDEgdGFibGUgMSksIHNvIHdlJ2xsIGNoZWNrIHRoZSB2YWx1ZSBvZiBlYXggZm9yCi0JCSAgIENQVUlELzAgdG8gc2VlIGlmIHN0YW5kYXJkIENQVUlEIGxldmVsIDIgaXMgc3VwcG9ydGVkLgotCQkgICBBY2NvcmRpbmcgdG8gdGhlIHRhYmxlLCB0aGUgb25seSBDUFUgd2hpY2ggc3VwcG9ydHMgbGV2ZWwKLQkJICAgMiBpcyBhbHNvIHRoZSBvbmx5IG9uZSB3aGljaCBzdXBwb3J0cyBleHRlbmRlZCBDUFVJRCBsZXZlbHMuCi0JCSovCi0JCSJjbXBsICQweDIsICUlZWF4XG5cdCIKLQkJImpuZSBNTVh0ZXN0XG5cdCIJLyogVXNlIHN0YW5kYXJkIENQVUlEIGluc3RlYWQgKi8KLQotCQkvKiBFeHRlbmRlZCBDUFVJRCBzdXBwb3J0ZWQgKGluIHRoZW9yeSksIHNvIGdldCBleHRlbmRlZAotCQkgICBmZWF0dXJlcyAqLwotCQkibW92bCAkMHg4MDAwMDAwMSwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkidGVzdGwgJDB4MDA4MDAwMDAsICUlZWF4XG5cdCIJLyogVGVzdCBmb3IgTU1YICovCi0JCSJqeiBOb3RTdXBwb3J0ZWQ1XG5cdCIJCS8qIE1NWCBub3Qgc3VwcG9ydGVkICovCi0JCSJ0ZXN0bCAkMHgwMTAwMDAwMCwgJSVlYXhcblx0IgkvKiBUZXN0IGZvciBFeHQnZCBNTVggKi8KLQkJImpueiBFTU1YU3VwcG9ydGVkXG5cdCIKLQkJIm1vdmwgJDEsICUwOlxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblxuIgotCQkiRU1NWFN1cHBvcnRlZDpcblx0IgotCQkibW92bCAkMywgJTA6XG5cblx0IgkJLyogRU1NWCBhbmQgTU1YIFN1cHBvcnRlZCAqLwotCQkiam1wIFJldHVyblxuXHQiCi0KLQotCQkvKiBBTUQgU2VjdGlvbiAqLwotCQkiQU1EOlxuXHQiCi0KLQkJLyogU2VlIGlmIGV4dGVuZGVkIENQVUlEIGlzIHN1cHBvcnRlZCAqLwotCQkibW92bCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkiY21wbCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgotCQkiamwgTU1YdGVzdFxuXHQiCS8qIFVzZSBzdGFuZGFyZCBDUFVJRCBpbnN0ZWFkICovCi0KLQkJLyogRXh0ZW5kZWQgQ1BVSUQgc3VwcG9ydGVkLCBzbyBnZXQgZXh0ZW5kZWQgZmVhdHVyZXMgKi8KLQkJIm1vdmwgJDB4ODAwMDAwMDEsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQkJInRlc3RsICQweDAwODAwMDAwLCAlJWVkeFxuXHQiCS8qIFRlc3QgZm9yIE1NWCAqLwotCQkianogTm90U3VwcG9ydGVkNlxuXHQiCQkvKiBNTVggbm90IHN1cHBvcnRlZCAqLwotCQkidGVzdGwgJDB4ODAwMDAwMDAsICUlZWR4XG5cdCIJLyogVGVzdCBmb3IgM0ROb3chICovCi0JCSJqbnogVGhyZWVETm93U3VwcG9ydGVkXG5cdCIKLQkJIm1vdmwgJDEsICUwOlxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblxuIgotCQkiVGhyZWVETm93U3VwcG9ydGVkOlxuXHQiCi0JCSJtb3ZsICQ1LCAlMDpcblxuXHQiCQkvKiAzRE5vdyEgYW5kIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblx0IgotCi0KLQkJLyogSW50ZWwgU2VjdGlvbiAqLwotCQkiSW50ZWw6XG5cdCIKLQotCQkvKiBDaGVjayBmb3IgU1NFICovCi0JCSJTU0V0ZXN0OlxuXHQiCi0JCSJtb3ZsICQxLCAlJWVheFxuXHQiCi0JCSJjcHVpZFxuXHQiCi0JCSJ0ZXN0bCAkMHgwMjAwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciBTU0UgKi8KLQkJImp6IE1NWHRlc3Rcblx0IgkJLyogU1NFIE5vdCBzdXBwb3J0ZWQgKi8KLQkJIm1vdmwgJDksICUwOlxuXG5cdCIJCS8qIFNTRSBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblx0IgotCi0JCS8qIENoZWNrIGZvciBNTVggKi8KLQkJIk1NWHRlc3Q6XG5cdCIKLQkJIm1vdmwgJDEsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQkJInRlc3RsICQweDAwODAwMDAwLCAlJWVkeFxuXHQiCS8qIFRlc3QgZm9yIE1NWCAqLwotCQkianogTm90U3VwcG9ydGVkN1xuXHQiCQkvKiBNTVggTm90IHN1cHBvcnRlZCAqLwotCQkibW92bCAkMSwgJTA6XG5cblx0IgkJLyogTU1YIFN1cHBvcnRlZCAqLwotCQkiam1wIFJldHVyblxuXHQiCi0KLQkJLyogTm90aGluZyBzdXBwb3J0ZWQgKi8KLQkJIlxuTm90U3VwcG9ydGVkMTpcblx0IgotCQkiI21vdmwgJDEwMSwgJTA6XG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQyOlxuXHQiCi0JCSIjbW92bCAkMTAyLCAlMDpcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDM6XG5cdCIKLQkJIiNtb3ZsICQxMDMsICUwOlxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkNDpcblx0IgotCQkiI21vdmwgJDEwNCwgJTA6XG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQ1OlxuXHQiCi0JCSIjbW92bCAkMTA1LCAlMDpcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDY6XG5cdCIKLQkJIiNtb3ZsICQxMDYsICUwOlxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkNzpcblx0IgotCQkiI21vdmwgJDEwNywgJTA6XG5cblx0IgotCQkibW92bCAkMCwgJTA6XG5cblx0IgotCi0JCSJSZXR1cm46XG5cdCIKLQkJOiAiPWEiIChydmFsKQotCQk6IC8qIG5vIGlucHV0ICovCi0JCTogImVheCIsICJlYngiLCAiZWN4IiwgImVkeCIKLQkpOwotCi0JLyogUmV0dXJuICovCi0JcmV0dXJuKHJ2YWwpOwotfQotCi0vKglGdW5jdGlvbiB0byB0ZXN0IGlmIHNzZSBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4uLgotKi8KLWlubGluZSBleHRlcm4gaW50Ci1zc2Vfb2sodm9pZCkKLXsKLQkvKiBSZXR1cm5zIDEgaWYgU1NFIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkLCAwIG90aGVyd2lzZSAqLwotCXJldHVybiAoIChtbV9zdXBwb3J0KCkgJiAweDgpID4+IDMgICk7Ci19Ci0jZW5kaWYKLQotCi0KLS8qCUhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBpbnN0cnVjdGlvbiBtYWNyb3MgdGhhdCBmb2xsb3cuLi4KLQkobm90ZSB0aGF0IG1lbW9yeS10by1yZWdpc3RlciwgbTJyLCBpbnN0cnVjdGlvbnMgYXJlIG5lYXJseQotCSBhcyBlZmZpY2llbnQgYXMgcmVnaXN0ZXItdG8tcmVnaXN0ZXIsIHIyciwgaW5zdHJ1Y3Rpb25zOwotCSBob3dldmVyLCBtZW1vcnktdG8tbWVtb3J5IGluc3RydWN0aW9ucyBhcmUgcmVhbGx5IHNpbXVsYXRlZAotCSBhcyBhIGNvbnZlbmllbmNlLCBhbmQgYXJlIG9ubHkgMS8zIGFzIGVmZmljaWVudCkKLSovCi0jaWZkZWYJU1NFX1RSQUNFCi0KLS8qCUluY2x1ZGUgdGhlIHN0dWZmIGZvciBwcmludGluZyBhIHRyYWNlIHRvIHN0ZGVyci4uLgotKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUJc3NlX2kycihvcCwgaW1tLCByZWcpIFwKLQl7IFwKLQkJc3NlX3Qgc3NlX3RyYWNlOyBcCi0JCXNzZV90cmFjZS51cSA9IChpbW0pOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9pMnIoIiAjaW1tICI9MHglMDh4JTA4eCwgIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKHNzZV90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjcmVnICI9MHglMDh4JTA4eCkgPT4gIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJCSAgICAgIDogIlgiIChpbW0pKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKHNzZV90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjcmVnICI9MHglMDh4JTA4eFxuIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCX0KLQotI2RlZmluZQlzc2VfbTJyKG9wLCBtZW0sIHJlZykgXAotCXsgXAotCQlzc2VfdCBzc2VfdHJhY2U7IFwKLQkJc3NlX3RyYWNlID0gKG1lbSk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNvcCAiX20ycigiICNtZW0gIj0weCUwOHglMDh4LCAiLCBcCi0JCQlzc2VfdHJhY2UuZFsxXSwgc3NlX3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAoc3NlX3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWcgIj0weCUwOHglMDh4KSA9PiAiLCBcCi0JCQlzc2VfdHJhY2UuZFsxXSwgc3NlX3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkJICAgICAgOiAiWCIgKG1lbSkpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAoc3NlX3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWcgIj0weCUwOHglMDh4XG4iLCBcCi0JCQlzc2VfdHJhY2UuZFsxXSwgc3NlX3RyYWNlLmRbMF0pOyBcCi0JfQotCi0jZGVmaW5lCXNzZV9yMm0ob3AsIHJlZywgbWVtKSBcCi0JeyBcCi0JCXNzZV90IHNzZV90cmFjZTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKHNzZV90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9yMm0oIiAjcmVnICI9MHglMDh4JTA4eCwgIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCQlzc2VfdHJhY2UgPSAobWVtKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbSAiPTB4JTA4eCUwOHgpID0+ICIsIFwKLQkJCXNzZV90cmFjZS5kWzFdLCBzc2VfdHJhY2UuZFswXSk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtZW0pIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQlzc2VfdHJhY2UgPSAobWVtKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbSAiPTB4JTA4eCUwOHhcbiIsIFwKLQkJCXNzZV90cmFjZS5kWzFdLCBzc2VfdHJhY2UuZFswXSk7IFwKLQl9Ci0KLSNkZWZpbmUJc3NlX3IycihvcCwgcmVncywgcmVnZCkgXAotCXsgXAotCQlzc2VfdCBzc2VfdHJhY2U7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVncyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAoc3NlX3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNvcCAiX3IycigiICNyZWdzICI9MHglMDh4JTA4eCwgIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWdkICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChzc2VfdHJhY2UpIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI3JlZ2QgIj0weCUwOHglMDh4KSA9PiAiLCBcCi0JCQlzc2VfdHJhY2UuZFsxXSwgc3NlX3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlIiAjcmVncyAiLCAlIiAjcmVnZCk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVnZCAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAoc3NlX3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWdkICI9MHglMDh4JTA4eFxuIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCX0KLQotI2RlZmluZQlzc2VfbTJtKG9wLCBtZW1zLCBtZW1kKSBcCi0JeyBcCi0JCXNzZV90IHNzZV90cmFjZTsgXAotCQlzc2VfdHJhY2UgPSAobWVtcyk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNvcCAiX20ybSgiICNtZW1zICI9MHglMDh4JTA4eCwgIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCQlzc2VfdHJhY2UgPSAobWVtZCk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNtZW1kICI9MHglMDh4JTA4eCkgPT4gIiwgXAotCQkJc3NlX3RyYWNlLmRbMV0sIHNzZV90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJCSAgICAgICNvcCAiICUxLCAlJW1tMFxuXHQiIFwKLQkJCQkgICAgICAibW92cSAlJW1tMCwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1lbWQpIFwKLQkJCQkgICAgICA6ICJYIiAobWVtcykpOyBcCi0JCXNzZV90cmFjZSA9IChtZW1kKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbWQgIj0weCUwOHglMDh4XG4iLCBcCi0JCQlzc2VfdHJhY2UuZFsxXSwgc3NlX3RyYWNlLmRbMF0pOyBcCi0JfQotCi0jZWxzZQotCi0vKglUaGVzZSBtYWNyb3MgYXJlIGEgbG90IHNpbXBsZXIgd2l0aG91dCB0aGUgdHJhY2luZy4uLgotKi8KLQotI2RlZmluZQlzc2VfaTJyKG9wLCBpbW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChpbW0pICkKLQotI2RlZmluZQlzc2VfbTJyKG9wLCBtZW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChtZW0pKQotCi0jZGVmaW5lCXNzZV9yMm0ob3AsIHJlZywgbWVtKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkgICAgICA6ICI9WCIgKG1lbSkgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovICkKLQotI2RlZmluZQlzc2VfcjJyKG9wLCByZWdzLCByZWdkKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUiICNyZWdzICIsICUiICNyZWdkKQotCi0jZGVmaW5lCXNzZV9yMnJpKG9wLCByZWdzLCByZWdkLCBpbW0pIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVncyAiLCAlJSIgI3JlZ2QgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChpbW0pICkKLQotLyogTG9hZCBkYXRhIGZyb20gbWVtcyB0byB4bW1yZWcsIG9wZXJhdGUgb24geG1tcmVnLCBhbmQgc3RvcmUgZGF0YSB0byBtZW1kICovCi0jZGVmaW5lCXNzZV9tMm0ob3AsIG1lbXMsIG1lbWQsIHhtbXJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92dXBzICUwLCAlJXhtbTBcblx0IiBcCi0JCQkgICAgICAjb3AgIiAlMSwgJSV4bW0wXG5cdCIgXAotCQkJICAgICAgIm1vdnVwcyAlJW1tMCwgJTAiIFwKLQkJCSAgICAgIDogIj1YIiAobWVtZCkgXAotCQkJICAgICAgOiAiWCIgKG1lbXMpKQotCi0jZGVmaW5lCXNzZV9tMnJpKG9wLCBtZW0sIHJlZywgc3Vib3ApIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnICIsICIgI3N1Ym9wIFwKLQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkgICAgICA6ICJYIiAobWVtKSkKLQotI2RlZmluZQlzc2VfbTJtaShvcCwgbWVtcywgbWVtZCwgeG1tcmVnLCBzdWJvcCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92dXBzICUwLCAlJXhtbTBcblx0IiBcCi0JCQkgICAgICAjb3AgIiAlMSwgJSV4bW0wLCAiICNzdWJvcCAiXG5cdCIgXAotCQkJICAgICAgIm1vdnVwcyAlJW1tMCwgJTAiIFwKLQkJCSAgICAgIDogIj1YIiAobWVtZCkgXAotCQkJICAgICAgOiAiWCIgKG1lbXMpKQotI2VuZGlmCi0KLQotCi0KLS8qCTF4MTI4IE1PVmUgQWxpZ25lZCBmb3VyIFBhY2tlZCBTaW5nbGUtZnAKLSovCi0jZGVmaW5lCW1vdmFwc19tMnIodmFyLCByZWcpCXNzZV9tMnIobW92YXBzLCB2YXIsIHJlZykKLSNkZWZpbmUJbW92YXBzX3IybShyZWcsIHZhcikJc3NlX3IybShtb3ZhcHMsIHJlZywgdmFyKQotI2RlZmluZQltb3ZhcHNfcjJyKHJlZ3MsIHJlZ2QpCXNzZV9yMnIobW92YXBzLCByZWdzLCByZWdkKQotI2RlZmluZQltb3ZhcHModmFycywgdmFyZCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92YXBzICUxLCAlJW1tMFxuXHQiIFwKLQkJCSAgICAgICJtb3ZhcHMgJSVtbTAsICUwIiBcCi0JCQkgICAgICA6ICI9WCIgKHZhcmQpIFwKLQkJCSAgICAgIDogIlgiICh2YXJzKSkKLQotCi0vKgkxeDEyOCBNT1ZlIGFsaWduZWQgTm9uLVRlbXBvcmFsIGZvdXIgUGFja2VkIFNpbmdsZS1mcAotKi8KLSNkZWZpbmUJbW92bnRwc19yMm0oeG1tcmVnLCB2YXIpCXNzZV9yMm0obW92bnRwcywgeG1tcmVnLCB2YXIpCi0KLQotLyoJMXg2NCBNT1ZlIE5vbi1UZW1wb3JhbCBRdWFkd29yZAotKi8KLSNkZWZpbmUJbW92bnRxX3IybShtbXJlZywgdmFyKQkJc3NlX3IybShtb3ZudHEsIG1tcmVnLCB2YXIpCi0KLQotLyoJMXgxMjggTU9WZSBVbmFsaWduZWQgZm91ciBQYWNrZWQgU2luZ2xlLWZwCi0qLwotI2RlZmluZQltb3Z1cHNfbTJyKHZhciwgcmVnKQlzc2VfbTJyKG1vdnVwcywgdmFyLCByZWcpCi0jZGVmaW5lCW1vdnVwc19yMm0ocmVnLCB2YXIpCXNzZV9yMm0obW92dXBzLCByZWcsIHZhcikKLSNkZWZpbmUJbW92dXBzX3IycihyZWdzLCByZWdkKQlzc2VfcjJyKG1vdnVwcywgcmVncywgcmVnZCkKLSNkZWZpbmUJbW92dXBzKHZhcnMsIHZhcmQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnVwcyAlMSwgJSVtbTBcblx0IiBcCi0JCQkgICAgICAibW92dXBzICUlbW0wLCAlMCIgXAotCQkJICAgICAgOiAiPVgiICh2YXJkKSBcCi0JCQkgICAgICA6ICJYIiAodmFycykpCi0KLQotLyoJTU9WZSBIaWdoIHRvIExvdyBQYWNrZWQgU2luZ2xlLWZwCi0JaGlnaCBoYWxmIG9mIDR4MzJmICh4KSAtPiBsb3cgaGFsZiBvZiA0eDMyZiAoeSkKLSovCi0jZGVmaW5lCW1vdmhscHNfcjJyKHJlZ3MsIHJlZ2QpCXNzZV9yMnIobW92aGxwcywgcmVncywgcmVnZCkKLQotCi0vKglNT1ZlIExvdyB0byBIaWdoIFBhY2tlZCBTaW5nbGUtZnAKLQlsb3cgaGFsZiBvZiA0eDMyZiAoeCkgLT4gaGlnaCBoYWxmIG9mIDR4MzJmICh5KQotKi8KLSNkZWZpbmUJbW92bGhwc19yMnIocmVncywgcmVnZCkJc3NlX3Iycihtb3ZsaHBzLCByZWdzLCByZWdkKQotCi0KLS8qCU1PVmUgSGlnaCBQYWNrZWQgU2luZ2xlLWZwCi0JMngzMmYgLT4gaGlnaCBoYWxmIG9mIDR4MzJmCi0qLwotI2RlZmluZQltb3ZocHNfbTJyKHZhciwgcmVnKQlzc2VfbTJyKG1vdmhwcywgdmFyLCByZWcpCi0jZGVmaW5lCW1vdmhwc19yMm0ocmVnLCB2YXIpCXNzZV9yMm0obW92aHBzLCByZWcsIHZhcikKLSNkZWZpbmUJbW92aHBzKHZhcnMsIHZhcmQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmhwcyAlMSwgJSVtbTBcblx0IiBcCi0JCQkgICAgICAibW92aHBzICUlbW0wLCAlMCIgXAotCQkJICAgICAgOiAiPVgiICh2YXJkKSBcCi0JCQkgICAgICA6ICJYIiAodmFycykpCi0KLQotLyoJTU9WZSBMb3cgUGFja2VkIFNpbmdsZS1mcAotCTJ4MzJmIC0+IGxvdyBoYWxmIG9mIDR4MzJmCi0qLwotI2RlZmluZQltb3ZscHNfbTJyKHZhciwgcmVnKQlzc2VfbTJyKG1vdmxwcywgdmFyLCByZWcpCi0jZGVmaW5lCW1vdmxwc19yMm0ocmVnLCB2YXIpCXNzZV9yMm0obW92bHBzLCByZWcsIHZhcikKLSNkZWZpbmUJbW92bHBzKHZhcnMsIHZhcmQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmxwcyAlMSwgJSVtbTBcblx0IiBcCi0JCQkgICAgICAibW92bHBzICUlbW0wLCAlMCIgXAotCQkJICAgICAgOiAiPVgiICh2YXJkKSBcCi0JCQkgICAgICA6ICJYIiAodmFycykpCi0KLQotLyoJTU9WZSBTY2FsYXIgU2luZ2xlLWZwCi0JbG93ZXN0IGZpZWxkIG9mIDR4MzJmICh4KSAtPiBsb3dlc3QgZmllbGQgb2YgNHgzMmYgKHkpCi0qLwotI2RlZmluZQltb3Zzc19tMnIodmFyLCByZWcpCXNzZV9tMnIobW92c3MsIHZhciwgcmVnKQotI2RlZmluZQltb3Zzc19yMm0ocmVnLCB2YXIpCXNzZV9yMm0obW92c3MsIHJlZywgdmFyKQotI2RlZmluZQltb3Zzc19yMnIocmVncywgcmVnZCkJc3NlX3Iycihtb3ZzcywgcmVncywgcmVnZCkKLSNkZWZpbmUJbW92c3ModmFycywgdmFyZCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92c3MgJTEsICUlbW0wXG5cdCIgXAotCQkJICAgICAgIm1vdnNzICUlbW0wLCAlMCIgXAotCQkJICAgICAgOiAiPVgiICh2YXJkKSBcCi0JCQkgICAgICA6ICJYIiAodmFycykpCi0KLQotLyoJNHgxNiBQYWNrZWQgU0hVRmZsZSBXb3JkCi0qLwotI2RlZmluZQlwc2h1ZndfbTJyKHZhciwgcmVnLCBpbmRleCkJc3NlX20ycmkocHNodWZ3LCB2YXIsIHJlZywgaW5kZXgpCi0jZGVmaW5lCXBzaHVmd19yMnIocmVncywgcmVnZCwgaW5kZXgpCXNzZV9yMnJpKHBzaHVmdywgcmVncywgcmVnZCwgaW5kZXgpCi0KLQotLyoJMXgxMjggU0hVRmZsZSBQYWNrZWQgU2luZ2xlLWZwCi0qLwotI2RlZmluZQlzaHVmcHNfbTJyKHZhciwgcmVnLCBpbmRleCkJc3NlX20ycmkoc2h1ZnBzLCB2YXIsIHJlZywgaW5kZXgpCi0jZGVmaW5lCXNodWZwc19yMnIocmVncywgcmVnZCwgaW5kZXgpCXNzZV9yMnJpKHNodWZwcywgcmVncywgcmVnZCwgaW5kZXgpCi0KLQotLyoJQ29uVmVyVCBQYWNrZWQgc2lnbmVkIEludDMyIHRvKDIpIFBhY2tlZCBTaW5nbGUtZnAKLSovCi0jZGVmaW5lCWN2dHBpMnBzX20ycih2YXIsIHhtbXJlZykJc3NlX20ycihjdnRwaTJwcywgdmFyLCB4bW1yZWcpCi0jZGVmaW5lCWN2dHBpMnBzX3IycihtbXJlZywgeG1tcmVnKQlzc2VfcjJyKGN2dHBpMnBzLCBtbXJlZywgeG1tcmVnKQotCi0KLS8qCUNvblZlclQgUGFja2VkIFNpbmdsZS1mcCB0bygyKSBQYWNrZWQgc2lnbmVkIEludDMyCi0qLwotI2RlZmluZQljdnRwczJwaV9tMnIodmFyLCBtbXJlZykJc3NlX20ycihjdnRwczJwaSwgdmFyLCBtbXJlZykKLSNkZWZpbmUJY3Z0cHMycGlfcjJyKHhtbXJlZywgbW1yZWcpCXNzZV9yMnIoY3Z0cHMycGksIG1tcmVnLCB4bW1yZWcpCi0KLQotLyoJQ29uVmVyVCB3aXRoIFRydW5jYXRlIFBhY2tlZCBTaW5nbGUtZnAgdG8oMikgUGFja2VkIEludDMyCi0qLwotI2RlZmluZQljdnR0cHMycGlfbTJyKHZhciwgbW1yZWcpCXNzZV9tMnIoY3Z0dHBzMnBpLCB2YXIsIG1tcmVnKQotI2RlZmluZQljdnR0cHMycGlfcjJyKHhtbXJlZywgbW1yZWcpCXNzZV9yMnIoY3Z0dHBzMnBpLCBtbXJlZywgeG1tcmVnKQotCi0KLS8qCUNvblZlclQgU2lnbmVkIEludDMyIHRvKDIpIFNpbmdsZS1mcCAoU2NhbGFyKQotKi8KLSNkZWZpbmUJY3Z0c2kyc3NfbTJyKHZhciwgeG1tcmVnKQlzc2VfbTJyKGN2dHNpMnNzLCB2YXIsIHhtbXJlZykKLSNkZWZpbmUJY3Z0c2kyc3NfcjJyKHJlZywgeG1tcmVnKQlzc2VfcjJyKGN2dHNpMnNzLCByZWcsIHhtbXJlZykKLQotCi0vKglDb25WZXJUIFNjYWxhciBTaW5nbGUtZnAgdG8oMikgU2lnbmVkIEludDMyCi0qLwotI2RlZmluZQljdnRzczJzaV9tMnIodmFyLCByZWcpCQlzc2VfbTJyKGN2dHNzMnNpLCB2YXIsIHJlZykKLSNkZWZpbmUJY3Z0c3Myc2lfcjJyKHhtbXJlZywgcmVnKQlzc2VfcjJyKGN2dHNzMnNpLCB4bW1yZWcsIHJlZykKLQotCi0vKglDb25WZXJUIHdpdGggVHJ1bmNhdGUgU2NhbGFyIFNpbmdsZS1mcCB0bygyKSBTaWduZWQgSW50MzIKLSovCi0jZGVmaW5lCWN2dHRzczJzaV9tMnIodmFyLCByZWcpCQlzc2VfbTJyKGN2dHNzMnNpLCB2YXIsIHJlZykKLSNkZWZpbmUJY3Z0dHNzMnNpX3Iycih4bW1yZWcsIHJlZykJc3NlX3IycihjdnRzczJzaSwgeG1tcmVnLCByZWcpCi0KLQotLyoJUGFyYWxsZWwgRVhUUmFjdCBXb3JkIGZyb20gNHgxNgotKi8KLSNkZWZpbmUJcGV4dHJ3X3IycihtbXJlZywgcmVnLCBmaWVsZCkJc3NlX3IycmkocGV4dHJ3LCBtbXJlZywgcmVnLCBmaWVsZCkKLQotCi0vKglQYXJhbGxlbCBJTlNlUnQgV29yZCBmcm9tIDR4MTYKLSovCi0jZGVmaW5lCXBpbnNyd19yMnIocmVnLCBtbXJlZywgZmllbGQpCXNzZV9yMnJpKHBpbnNydywgcmVnLCBtbXJlZywgZmllbGQpCi0KLQotCi0vKglNT1ZlIE1hU0sgZnJvbSBQYWNrZWQgU2luZ2xlLWZwCi0qLwotI2lmZGVmCVNTRV9UUkFDRQotCSNkZWZpbmUJbW92bXNrcHMoeG1tcmVnLCByZWcpIFwKLQl7IFwKLQkJZnByaW50ZihzdGRlcnIsICJtb3Ztc2twcygpXG4iKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdm1za3BzICUiICN4bW1yZWcgIiwgJSIgI3JlZykgXAotCX0KLSNlbHNlCi0JI2RlZmluZQltb3Ztc2twcyh4bW1yZWcsIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92bXNrcHMgJSIgI3htbXJlZyAiLCAlIiAjcmVnKQotI2VuZGlmCi0KLQotLyoJUGFyYWxsZWwgTU9WZSBNYVNLIGZyb20gbW14IHJlZyB0byAzMi1iaXQgcmVnCi0qLwotI2lmZGVmCVNTRV9UUkFDRQotCSNkZWZpbmUJcG1vdm1za2IobW1yZWcsIHJlZykgXAotCXsgXAotCQlmcHJpbnRmKHN0ZGVyciwgIm1vdm1za3BzKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92bXNrcHMgJSIgI21tcmVnICIsICUiICNyZWcpIFwKLQl9Ci0jZWxzZQotCSNkZWZpbmUJcG1vdm1za2IobW1yZWcsIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92bXNrcHMgJSIgI21tcmVnICIsICUiICNyZWcpCi0jZW5kaWYKLQotCi0vKglNQVNLZWQgTU9WZSBmcm9tIDh4OCB0byBtZW1vcnkgcG9pbnRlZCB0byBieSAoZSlkaSByZWdpc3RlcgotKi8KLSNkZWZpbmUJbWFza21vdnEobW1yZWdzLCBmaWVsZHJlZykJc3NlX3IycmkobWFza21vdnEsIG1tcmVncywgZmllbGRyZWcpCi0KLQotCi0KLS8qCTR4MzJmIFBhcmFsbGVsIEFERHMKLSovCi0jZGVmaW5lCWFkZHBzX20ycih2YXIsIHJlZykJCXNzZV9tMnIoYWRkcHMsIHZhciwgcmVnKQotI2RlZmluZQlhZGRwc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIoYWRkcHMsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCWFkZHBzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybShhZGRwcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCUxvd2VzdCBGaWVsZCBvZiA0eDMyZiBQYXJhbGxlbCBBRERzCi0qLwotI2RlZmluZQlhZGRzc19tMnIodmFyLCByZWcpCQlzc2VfbTJyKGFkZHNzLCB2YXIsIHJlZykKLSNkZWZpbmUJYWRkc3NfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKGFkZHNzLCByZWdzLCByZWdkKQotI2RlZmluZQlhZGRzcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0oYWRkc3MsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKgk0eDMyZiBQYXJhbGxlbCBTVUJzCi0qLwotI2RlZmluZQlzdWJwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyKHN1YnBzLCB2YXIsIHJlZykKLSNkZWZpbmUJc3VicHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKHN1YnBzLCByZWdzLCByZWdkKQotI2RlZmluZQlzdWJwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0oc3VicHMsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKglMb3dlc3QgRmllbGQgb2YgNHgzMmYgUGFyYWxsZWwgU1VCcwotKi8KLSNkZWZpbmUJc3Vic3NfbTJyKHZhciwgcmVnKQkJc3NlX20ycihzdWJzcywgdmFyLCByZWcpCi0jZGVmaW5lCXN1YnNzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihzdWJzcywgcmVncywgcmVnZCkKLSNkZWZpbmUJc3Vic3ModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKHN1YnNzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJOHg4dSAtPiA0eDE2dSBQYWNrZWQgU3VtIG9mIEFic29sdXRlIERpZmZlcmVuY2VzCi0qLwotI2RlZmluZQlwc2FkYndfbTJyKHZhciwgcmVnKQkJc3NlX20ycihwc2FkYncsIHZhciwgcmVnKQotI2RlZmluZQlwc2FkYndfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKHBzYWRidywgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNhZGJ3KHZhcnMsIHZhcmQsIG1tcmVnKQlzc2VfbTJtKHBzYWRidywgdmFycywgdmFyZCwgbW1yZWcpCi0KLQotLyoJNHgxNnUgUGFyYWxsZWwgTVVMIEhpZ2ggVW5zaWduZWQKLSovCi0jZGVmaW5lCXBtdWxodXdfbTJyKHZhciwgcmVnKQkJc3NlX20ycihwbXVsaHV3LCB2YXIsIHJlZykKLSNkZWZpbmUJcG11bGh1d19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIocG11bGh1dywgcmVncywgcmVnZCkKLSNkZWZpbmUJcG11bGh1dyh2YXJzLCB2YXJkLCBtbXJlZykJc3NlX20ybShwbXVsaHV3LCB2YXJzLCB2YXJkLCBtbXJlZykKLQotCi0vKgk0eDMyZiBQYXJhbGxlbCBNVUxzCi0qLwotI2RlZmluZQltdWxwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyKG11bHBzLCB2YXIsIHJlZykKLSNkZWZpbmUJbXVscHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKG11bHBzLCByZWdzLCByZWdkKQotI2RlZmluZQltdWxwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0obXVscHMsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKglMb3dlc3QgRmllbGQgb2YgNHgzMmYgUGFyYWxsZWwgTVVMcwotKi8KLSNkZWZpbmUJbXVsc3NfbTJyKHZhciwgcmVnKQkJc3NlX20ycihtdWxzcywgdmFyLCByZWcpCi0jZGVmaW5lCW11bHNzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihtdWxzcywgcmVncywgcmVnZCkKLSNkZWZpbmUJbXVsc3ModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKG11bHNzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJNHgzMmYgUGFyYWxsZWwgRElWcwotKi8KLSNkZWZpbmUJZGl2cHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycihkaXZwcywgdmFyLCByZWcpCi0jZGVmaW5lCWRpdnBzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihkaXZwcywgcmVncywgcmVnZCkKLSNkZWZpbmUJZGl2cHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKGRpdnBzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJTG93ZXN0IEZpZWxkIG9mIDR4MzJmIFBhcmFsbGVsIERJVnMKLSovCi0jZGVmaW5lCWRpdnNzX20ycih2YXIsIHJlZykJCXNzZV9tMnIoZGl2c3MsIHZhciwgcmVnKQotI2RlZmluZQlkaXZzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIoZGl2c3MsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCWRpdnNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybShkaXZzcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCTR4MzJmIFBhcmFsbGVsIFJlY2lwcm9jYWxzCi0qLwotI2RlZmluZQlyY3Bwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyKHJjcHBzLCB2YXIsIHJlZykKLSNkZWZpbmUJcmNwcHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKHJjcHBzLCByZWdzLCByZWdkKQotI2RlZmluZQlyY3Bwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0ocmNwcHMsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKglMb3dlc3QgRmllbGQgb2YgNHgzMmYgUGFyYWxsZWwgUmVjaXByb2NhbHMKLSovCi0jZGVmaW5lCXJjcHNzX20ycih2YXIsIHJlZykJCXNzZV9tMnIocmNwc3MsIHZhciwgcmVnKQotI2RlZmluZQlyY3Bzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIocmNwc3MsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXJjcHNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybShyY3BzcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCTR4MzJmIFBhcmFsbGVsIFNxdWFyZSBSb290IG9mIFJlY2lwcm9jYWxzCi0qLwotI2RlZmluZQlyc3FydHBzX20ycih2YXIsIHJlZykJCXNzZV9tMnIocnNxcnRwcywgdmFyLCByZWcpCi0jZGVmaW5lCXJzcXJ0cHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKHJzcXJ0cHMsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXJzcXJ0cHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKHJzcXJ0cHMsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKglMb3dlc3QgRmllbGQgb2YgNHgzMmYgUGFyYWxsZWwgU3F1YXJlIFJvb3Qgb2YgUmVjaXByb2NhbHMKLSovCi0jZGVmaW5lCXJzcXJ0c3NfbTJyKHZhciwgcmVnKQkJc3NlX20ycihyc3FydHNzLCB2YXIsIHJlZykKLSNkZWZpbmUJcnNxcnRzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIocnNxcnRzcywgcmVncywgcmVnZCkKLSNkZWZpbmUJcnNxcnRzcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0ocnNxcnRzcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCTR4MzJmIFBhcmFsbGVsIFNxdWFyZSBSb290cwotKi8KLSNkZWZpbmUJc3FydHBzX20ycih2YXIsIHJlZykJCXNzZV9tMnIoc3FydHBzLCB2YXIsIHJlZykKLSNkZWZpbmUJc3FydHBzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihzcXJ0cHMsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXNxcnRwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0oc3FydHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJTG93ZXN0IEZpZWxkIG9mIDR4MzJmIFBhcmFsbGVsIFNxdWFyZSBSb290cwotKi8KLSNkZWZpbmUJc3FydHNzX20ycih2YXIsIHJlZykJCXNzZV9tMnIoc3FydHNzLCB2YXIsIHJlZykKLSNkZWZpbmUJc3FydHNzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihzcXJ0c3MsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXNxcnRzcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0oc3FydHNzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJOHg4dSBhbmQgNHgxNnUgUGFyYWxsZWwgQVZlcmFHZQotKi8KLSNkZWZpbmUJcGF2Z2JfbTJyKHZhciwgcmVnKQkJc3NlX20ycihwYXZnYiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhdmdiX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihwYXZnYiwgcmVncywgcmVnZCkKLSNkZWZpbmUJcGF2Z2IodmFycywgdmFyZCwgbW1yZWcpCXNzZV9tMm0ocGF2Z2IsIHZhcnMsIHZhcmQsIG1tcmVnKQotCi0jZGVmaW5lCXBhdmd3X20ycih2YXIsIHJlZykJCXNzZV9tMnIocGF2Z3csIHZhciwgcmVnKQotI2RlZmluZQlwYXZnd19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIocGF2Z3csIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBhdmd3KHZhcnMsIHZhcmQsIG1tcmVnKQlzc2VfbTJtKHBhdmd3LCB2YXJzLCB2YXJkLCBtbXJlZykKLQotCi0vKgkxeDEyOCBiaXR3aXNlIEFORAotKi8KLSNkZWZpbmUJYW5kcHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycihhbmRwcywgdmFyLCByZWcpCi0jZGVmaW5lCWFuZHBzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihhbmRwcywgcmVncywgcmVnZCkKLSNkZWZpbmUJYW5kcHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKGFuZHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJMXgxMjggYml0d2lzZSBBTkQgd2l0aCBOb3QgdGhlIGRlc3RpbmF0aW9uCi0qLwotI2RlZmluZQlhbmRucHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycihhbmRucHMsIHZhciwgcmVnKQotI2RlZmluZQlhbmRucHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKGFuZG5wcywgcmVncywgcmVnZCkKLSNkZWZpbmUJYW5kbnBzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybShhbmRucHMsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKgkxeDEyOCBiaXR3aXNlIE9SCi0qLwotI2RlZmluZQlvcnBzX20ycih2YXIsIHJlZykJCXNzZV9tMnIob3JwcywgdmFyLCByZWcpCi0jZGVmaW5lCW9ycHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKG9ycHMsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCW9ycHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKG9ycHMsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKgkxeDEyOCBiaXR3aXNlIGVYY2x1c2l2ZSBPUgotKi8KLSNkZWZpbmUJeG9ycHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycih4b3JwcywgdmFyLCByZWcpCi0jZGVmaW5lCXhvcnBzX3IycihyZWdzLCByZWdkKQkJc3NlX3Iycih4b3JwcywgcmVncywgcmVnZCkKLSNkZWZpbmUJeG9ycHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKHhvcnBzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJOHg4dSwgNHgxNiwgYW5kIDR4MzJmIFBhcmFsbGVsIE1heGltdW0KLSovCi0jZGVmaW5lCXBtYXh1Yl9tMnIodmFyLCByZWcpCQlzc2VfbTJyKHBtYXh1YiwgdmFyLCByZWcpCi0jZGVmaW5lCXBtYXh1Yl9yMnIocmVncywgcmVnZCkJCXNzZV9yMnIocG1heHViLCByZWdzLCByZWdkKQotI2RlZmluZQlwbWF4dWIodmFycywgdmFyZCwgbW1yZWcpCXNzZV9tMm0ocG1heHViLCB2YXJzLCB2YXJkLCBtbXJlZykKLQotI2RlZmluZQlwbWF4c3dfbTJyKHZhciwgcmVnKQkJc3NlX20ycihwbWF4c3csIHZhciwgcmVnKQotI2RlZmluZQlwbWF4c3dfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKHBtYXhzdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcG1heHN3KHZhcnMsIHZhcmQsIG1tcmVnKQlzc2VfbTJtKHBtYXhzdywgdmFycywgdmFyZCwgbW1yZWcpCi0KLSNkZWZpbmUJbWF4cHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycihtYXhwcywgdmFyLCByZWcpCi0jZGVmaW5lCW1heHBzX3IycihyZWdzLCByZWdkKQkJc3NlX3IycihtYXhwcywgcmVncywgcmVnZCkKLSNkZWZpbmUJbWF4cHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKG1heHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcpCi0KLQotLyoJTG93ZXN0IEZpZWxkIG9mIDR4MzJmIFBhcmFsbGVsIE1heGltdW0KLSovCi0jZGVmaW5lCW1heHNzX20ycih2YXIsIHJlZykJCXNzZV9tMnIobWF4c3MsIHZhciwgcmVnKQotI2RlZmluZQltYXhzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIobWF4c3MsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCW1heHNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybShtYXhzcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCTh4OHUsIDR4MTYsIGFuZCA0eDMyZiBQYXJhbGxlbCBNaW5pbXVtCi0qLwotI2RlZmluZQlwbWludWJfbTJyKHZhciwgcmVnKQkJc3NlX20ycihwbWludWIsIHZhciwgcmVnKQotI2RlZmluZQlwbWludWJfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKHBtaW51YiwgcmVncywgcmVnZCkKLSNkZWZpbmUJcG1pbnViKHZhcnMsIHZhcmQsIG1tcmVnKQlzc2VfbTJtKHBtaW51YiwgdmFycywgdmFyZCwgbW1yZWcpCi0KLSNkZWZpbmUJcG1pbnN3X20ycih2YXIsIHJlZykJCXNzZV9tMnIocG1pbnN3LCB2YXIsIHJlZykKLSNkZWZpbmUJcG1pbnN3X3IycihyZWdzLCByZWdkKQkJc3NlX3IycihwbWluc3csIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBtaW5zdyh2YXJzLCB2YXJkLCBtbXJlZykJc3NlX20ybShwbWluc3csIHZhcnMsIHZhcmQsIG1tcmVnKQotCi0jZGVmaW5lCW1pbnBzX20ycih2YXIsIHJlZykJCXNzZV9tMnIobWlucHMsIHZhciwgcmVnKQotI2RlZmluZQltaW5wc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIobWlucHMsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCW1pbnBzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybShtaW5wcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCUxvd2VzdCBGaWVsZCBvZiA0eDMyZiBQYXJhbGxlbCBNaW5pbXVtCi0qLwotI2RlZmluZQltaW5zc19tMnIodmFyLCByZWcpCQlzc2VfbTJyKG1pbnNzLCB2YXIsIHJlZykKLSNkZWZpbmUJbWluc3NfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyKG1pbnNzLCByZWdzLCByZWdkKQotI2RlZmluZQltaW5zcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0obWluc3MsIHZhcnMsIHZhcmQsIHhtbXJlZykKLQotCi0vKgk0eDMyZiBQYXJhbGxlbCBDb01QYXJlcwotCShyZXN1bHRpbmcgZmllbGRzIGFyZSBlaXRoZXIgMCBvciAtMSkKLSovCi0jZGVmaW5lCWNtcHBzX20ycih2YXIsIHJlZywgb3ApCQlzc2VfbTJyaShjbXBwcywgdmFyLCByZWcsIG9wKQotI2RlZmluZQljbXBwc19yMnIocmVncywgcmVnZCwgb3ApCXNzZV9yMnJpKGNtcHBzLCByZWdzLCByZWdkLCBvcCkKLSNkZWZpbmUJY21wcHModmFycywgdmFyZCwgb3AsIHhtbXJlZykJc3NlX20ybWkoY21wcHMsIHZhcnMsIHZhcmQsIHhtbXJlZywgb3ApCi0KLSNkZWZpbmUJY21wZXFwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyaShjbXBwcywgdmFyLCByZWcsIDApCi0jZGVmaW5lCWNtcGVxcHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyaShjbXBwcywgcmVncywgcmVnZCwgMCkKLSNkZWZpbmUJY21wZXFwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDApCi0KLSNkZWZpbmUJY21wbHRwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyaShjbXBwcywgdmFyLCByZWcsIDEpCi0jZGVmaW5lCWNtcGx0cHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyaShjbXBwcywgcmVncywgcmVnZCwgMSkKLSNkZWZpbmUJY21wbHRwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDEpCi0KLSNkZWZpbmUJY21wbGVwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyaShjbXBwcywgdmFyLCByZWcsIDIpCi0jZGVmaW5lCWNtcGxlcHNfcjJyKHJlZ3MsIHJlZ2QpCQlzc2VfcjJyaShjbXBwcywgcmVncywgcmVnZCwgMikKLSNkZWZpbmUJY21wbGVwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDIpCi0KLSNkZWZpbmUJY21wdW5vcmRwc19tMnIodmFyLCByZWcpCXNzZV9tMnJpKGNtcHBzLCB2YXIsIHJlZywgMykKLSNkZWZpbmUJY21wdW5vcmRwc19yMnIocmVncywgcmVnZCkJc3NlX3IycmkoY21wcHMsIHJlZ3MsIHJlZ2QsIDMpCi0jZGVmaW5lCWNtcHVub3JkcHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtaShjbXBwcywgdmFycywgdmFyZCwgeG1tcmVnLCAzKQotCi0jZGVmaW5lCWNtcG5lcXBzX20ycih2YXIsIHJlZykJCXNzZV9tMnJpKGNtcHBzLCB2YXIsIHJlZywgNCkKLSNkZWZpbmUJY21wbmVxcHNfcjJyKHJlZ3MsIHJlZ2QpCXNzZV9yMnJpKGNtcHBzLCByZWdzLCByZWdkLCA0KQotI2RlZmluZQljbXBuZXFwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDQpCi0KLSNkZWZpbmUJY21wbmx0cHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycmkoY21wcHMsIHZhciwgcmVnLCA1KQotI2RlZmluZQljbXBubHRwc19yMnIocmVncywgcmVnZCkJc3NlX3IycmkoY21wcHMsIHJlZ3MsIHJlZ2QsIDUpCi0jZGVmaW5lCWNtcG5sdHBzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybWkoY21wcHMsIHZhcnMsIHZhcmQsIHhtbXJlZywgNSkKLQotI2RlZmluZQljbXBubGVwc19tMnIodmFyLCByZWcpCQlzc2VfbTJyaShjbXBwcywgdmFyLCByZWcsIDYpCi0jZGVmaW5lCWNtcG5sZXBzX3IycihyZWdzLCByZWdkKQlzc2VfcjJyaShjbXBwcywgcmVncywgcmVnZCwgNikKLSNkZWZpbmUJY21wbmxlcHModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtaShjbXBwcywgdmFycywgdmFyZCwgeG1tcmVnLCA2KQotCi0jZGVmaW5lCWNtcG9yZHBzX20ycih2YXIsIHJlZykJCXNzZV9tMnJpKGNtcHBzLCB2YXIsIHJlZywgNykKLSNkZWZpbmUJY21wb3JkcHNfcjJyKHJlZ3MsIHJlZ2QpCXNzZV9yMnJpKGNtcHBzLCByZWdzLCByZWdkLCA3KQotI2RlZmluZQljbXBvcmRwcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHBzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDcpCi0KLQotLyoJTG93ZXN0IEZpZWxkIG9mIDR4MzJmIFBhcmFsbGVsIENvTVBhcmVzCi0JKHJlc3VsdGluZyBmaWVsZHMgYXJlIGVpdGhlciAwIG9yIC0xKQotKi8KLSNkZWZpbmUJY21wc3NfbTJyKHZhciwgcmVnLCBvcCkJCXNzZV9tMnJpKGNtcHNzLCB2YXIsIHJlZywgb3ApCi0jZGVmaW5lCWNtcHNzX3IycihyZWdzLCByZWdkLCBvcCkJc3NlX3IycmkoY21wc3MsIHJlZ3MsIHJlZ2QsIG9wKQotI2RlZmluZQljbXBzcyh2YXJzLCB2YXJkLCBvcCwgeG1tcmVnKQlzc2VfbTJtaShjbXBzcywgdmFycywgdmFyZCwgeG1tcmVnLCBvcCkKLQotI2RlZmluZQljbXBlcXNzX20ycih2YXIsIHJlZykJCXNzZV9tMnJpKGNtcHNzLCB2YXIsIHJlZywgMCkKLSNkZWZpbmUJY21wZXFzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnJpKGNtcHNzLCByZWdzLCByZWdkLCAwKQotI2RlZmluZQljbXBlcXNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybWkoY21wc3MsIHZhcnMsIHZhcmQsIHhtbXJlZywgMCkKLQotI2RlZmluZQljbXBsdHNzX20ycih2YXIsIHJlZykJCXNzZV9tMnJpKGNtcHNzLCB2YXIsIHJlZywgMSkKLSNkZWZpbmUJY21wbHRzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnJpKGNtcHNzLCByZWdzLCByZWdkLCAxKQotI2RlZmluZQljbXBsdHNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybWkoY21wc3MsIHZhcnMsIHZhcmQsIHhtbXJlZywgMSkKLQotI2RlZmluZQljbXBsZXNzX20ycih2YXIsIHJlZykJCXNzZV9tMnJpKGNtcHNzLCB2YXIsIHJlZywgMikKLSNkZWZpbmUJY21wbGVzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnJpKGNtcHNzLCByZWdzLCByZWdkLCAyKQotI2RlZmluZQljbXBsZXNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybWkoY21wc3MsIHZhcnMsIHZhcmQsIHhtbXJlZywgMikKLQotI2RlZmluZQljbXB1bm9yZHNzX20ycih2YXIsIHJlZykJc3NlX20ycmkoY21wc3MsIHZhciwgcmVnLCAzKQotI2RlZmluZQljbXB1bm9yZHNzX3IycihyZWdzLCByZWdkKQlzc2VfcjJyaShjbXBzcywgcmVncywgcmVnZCwgMykKLSNkZWZpbmUJY21wdW5vcmRzcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHNzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDMpCi0KLSNkZWZpbmUJY21wbmVxc3NfbTJyKHZhciwgcmVnKQkJc3NlX20ycmkoY21wc3MsIHZhciwgcmVnLCA0KQotI2RlZmluZQljbXBuZXFzc19yMnIocmVncywgcmVnZCkJc3NlX3IycmkoY21wc3MsIHJlZ3MsIHJlZ2QsIDQpCi0jZGVmaW5lCWNtcG5lcXNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybWkoY21wc3MsIHZhcnMsIHZhcmQsIHhtbXJlZywgNCkKLQotI2RlZmluZQljbXBubHRzc19tMnIodmFyLCByZWcpCQlzc2VfbTJyaShjbXBzcywgdmFyLCByZWcsIDUpCi0jZGVmaW5lCWNtcG5sdHNzX3IycihyZWdzLCByZWdkKQlzc2VfcjJyaShjbXBzcywgcmVncywgcmVnZCwgNSkKLSNkZWZpbmUJY21wbmx0c3ModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtaShjbXBzcywgdmFycywgdmFyZCwgeG1tcmVnLCA1KQotCi0jZGVmaW5lCWNtcG5sZXNzX20ycih2YXIsIHJlZykJCXNzZV9tMnJpKGNtcHNzLCB2YXIsIHJlZywgNikKLSNkZWZpbmUJY21wbmxlc3NfcjJyKHJlZ3MsIHJlZ2QpCXNzZV9yMnJpKGNtcHNzLCByZWdzLCByZWdkLCA2KQotI2RlZmluZQljbXBubGVzcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm1pKGNtcHNzLCB2YXJzLCB2YXJkLCB4bW1yZWcsIDYpCi0KLSNkZWZpbmUJY21wb3Jkc3NfbTJyKHZhciwgcmVnKQkJc3NlX20ycmkoY21wc3MsIHZhciwgcmVnLCA3KQotI2RlZmluZQljbXBvcmRzc19yMnIocmVncywgcmVnZCkJc3NlX3IycmkoY21wc3MsIHJlZ3MsIHJlZ2QsIDcpCi0jZGVmaW5lCWNtcG9yZHNzKHZhcnMsIHZhcmQsIHhtbXJlZykJc3NlX20ybWkoY21wc3MsIHZhcnMsIHZhcmQsIHhtbXJlZywgNykKLQotCi0vKglMb3dlc3QgRmllbGQgb2YgNHgzMmYgUGFyYWxsZWwgQ29NUGFyZXMgdG8gc2V0IEVGTEFHUwotCShyZXN1bHRpbmcgZmllbGRzIGFyZSBlaXRoZXIgMCBvciAtMSkKLSovCi0jZGVmaW5lCWNvbWlzc19tMnIodmFyLCByZWcpCQlzc2VfbTJyKGNvbWlzcywgdmFyLCByZWcpCi0jZGVmaW5lCWNvbWlzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIoY29taXNzLCByZWdzLCByZWdkKQotI2RlZmluZQljb21pc3ModmFycywgdmFyZCwgeG1tcmVnKQlzc2VfbTJtKGNvbWlzcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCUxvd2VzdCBGaWVsZCBvZiA0eDMyZiBVbm9yZGVyZWQgUGFyYWxsZWwgQ29NUGFyZXMgdG8gc2V0IEVGTEFHUwotCShyZXN1bHRpbmcgZmllbGRzIGFyZSBlaXRoZXIgMCBvciAtMSkKLSovCi0jZGVmaW5lCXVjb21pc3NfbTJyKHZhciwgcmVnKQkJc3NlX20ycih1Y29taXNzLCB2YXIsIHJlZykKLSNkZWZpbmUJdWNvbWlzc19yMnIocmVncywgcmVnZCkJCXNzZV9yMnIodWNvbWlzcywgcmVncywgcmVnZCkKLSNkZWZpbmUJdWNvbWlzcyh2YXJzLCB2YXJkLCB4bW1yZWcpCXNzZV9tMm0odWNvbWlzcywgdmFycywgdmFyZCwgeG1tcmVnKQotCi0KLS8qCTItKDR4MzJmKSAtPiA0eDMyZiBVTlBhQ0sgTG93IFBhY2tlZCBTaW5nbGUtZnAKLQkoaW50ZXJsZWF2ZXMgbG93IGhhbGYgb2YgZGVzdCB3aXRoIGxvdyBoYWxmIG9mIHNvdXJjZQotCSBhcyBwYWRkaW5nIGluIGVhY2ggcmVzdWx0IGZpZWxkKQotKi8KLSNkZWZpbmUJdW5wY2tscHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycih1bnBja2xwcywgdmFyLCByZWcpCi0jZGVmaW5lCXVucGNrbHBzX3IycihyZWdzLCByZWdkKQlzc2VfcjJyKHVucGNrbHBzLCByZWdzLCByZWdkKQotCi0KLS8qCTItKDR4MzJmKSAtPiA0eDMyZiBVTlBhQ0sgSGlnaCBQYWNrZWQgU2luZ2xlLWZwCi0JKGludGVybGVhdmVzIGhpZ2ggaGFsZiBvZiBkZXN0IHdpdGggaGlnaCBoYWxmIG9mIHNvdXJjZQotCSBhcyBwYWRkaW5nIGluIGVhY2ggcmVzdWx0IGZpZWxkKQotKi8KLSNkZWZpbmUJdW5wY2tocHNfbTJyKHZhciwgcmVnKQkJc3NlX20ycih1bnBja2hwcywgdmFyLCByZWcpCi0jZGVmaW5lCXVucGNraHBzX3IycihyZWdzLCByZWdkKQlzc2VfcjJyKHVucGNraHBzLCByZWdzLCByZWdkKQotCi0KLQotLyoJRnAgYW5kIG1tWCBSZVNUT1JlIHN0YXRlCi0qLwotI2lmZGVmCVNTRV9UUkFDRQotCSNkZWZpbmUJZnhyc3RvcihtZW0pIFwKLQl7IFwKLQkJZnByaW50ZihzdGRlcnIsICJmeHJzdG9yKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgiZnhyc3RvciAlMCIgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChtZW0pKSBcCi0JfQotI2Vsc2UKLQkjZGVmaW5lCWZ4cnN0b3IobWVtKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmeHJzdG9yICUwIiBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAiWCIgKG1lbSkpCi0jZW5kaWYKLQotCi0vKglGcCBhbmQgbW1YIFNBVkUgc3RhdGUKLSovCi0jaWZkZWYJU1NFX1RSQUNFCi0JI2RlZmluZQlmeHNhdmUobWVtKSBcCi0JeyBcCi0JCWZwcmludGYoc3RkZXJyLCAiZnhzYXZlKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgiZnhzYXZlICUwIiBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAiWCIgKG1lbSkpIFwKLQl9Ci0jZWxzZQotCSNkZWZpbmUJZnhzYXZlKG1lbSkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZnhzYXZlICUwIiBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAiWCIgKG1lbSkpCi0jZW5kaWYKLQotCi0vKglTVG9yZSBzdHJlYU1pbmcgc2ltZCBlWHRlbnNpb25zIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCi0qLwotI2lmZGVmCVNTRV9UUkFDRQotCSNkZWZpbmUJc3RteGNzcihtZW0pIFwKLQl7IFwKLQkJZnByaW50ZihzdGRlcnIsICJzdG14Y3NyKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChtZW0pKSBcCi0JfQotI2Vsc2UKLQkjZGVmaW5lCXN0bXhjc3IobWVtKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAiWCIgKG1lbSkpCi0jZW5kaWYKLQotCi0vKglMb2FEIHN0cmVhTWluZyBzaW1kIGVYdGVuc2lvbnMgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKLSovCi0jaWZkZWYJU1NFX1RSQUNFCi0JI2RlZmluZQlsZG14Y3NyKG1lbSkgXAotCXsgXAotCQlmcHJpbnRmKHN0ZGVyciwgImxkbXhjc3IoKVxuIik7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAiWCIgKG1lbSkpIFwKLQl9Ci0jZWxzZQotCSNkZWZpbmUJbGRteGNzcihtZW0pIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIFwKLQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkgICAgICA6ICJYIiAobWVtKSkKLSNlbmRpZgotCi0KLS8qCVN0b3JlIEZFTkNFIC0gZW5mb3JjZSBvcmRlcmluZyBvZiBzdG9yZXMgYmVmb3JlIGZlbmNlIHZzLiBzdG9yZXMKLQlvY2N1cmluZyBhZnRlciBmZW5jZSBpbiBzb3VyY2UgY29kZS4KLSovCi0jaWZkZWYJU1NFX1RSQUNFCi0JI2RlZmluZQlzZmVuY2UoKSBcCi0JeyBcCi0JCWZwcmludGYoc3RkZXJyLCAic2ZlbmNlKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgic2ZlbmNlXG5cdCIpIFwKLQl9Ci0jZWxzZQotCSNkZWZpbmUJc2ZlbmNlKCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgic2ZlbmNlXG5cdCIpCi0jZW5kaWYKLQotCi0vKglQUkVGRVRDSCBkYXRhIHVzaW5nIFQwLCBUMSwgVDIsIG9yIE5UQSBoaW50Ci0JCVQwICA9IFByZWZldGNoIGludG8gYWxsIGNhY2hlIGxldmVscwotCQlUMSAgPSBQcmVmZXRjaCBpbnRvIGFsbCBjYWNoZSBsZXZlbHMgZXhjZXB0IDB0aCBsZXZlbAotCQlUMiAgPSBQcmVmZXRjaCBpbnRvIGFsbCBjYWNoZSBsZXZlbHMgZXhjZXB0IDB0aCBhbmQgMXN0IGxldmVscwotCQlOVEEgPSBQcmVmZXRjaCBkYXRhIGludG8gbm9uLXRlbXBvcmFsIGNhY2hlIHN0cnVjdHVyZQotKi8KLSNpZmRlZglTU0VfVFJBQ0UKLSNlbHNlCi0JI2RlZmluZQlwcmVmZXRjaChtZW0sIGhpbnQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInByZWZldGNoIiAjaGludCAiICUwIiBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJICAgICAgOiAiWCIgKG1lbSkpCi0KLQkjZGVmaW5lCXByZWZldGNodDAobWVtKQkJcHJlZmV0Y2gobWVtLCB0MCkKLQkjZGVmaW5lCXByZWZldGNodDEobWVtKQkJcHJlZmV0Y2gobWVtLCB0MSkKLQkjZGVmaW5lCXByZWZldGNodDIobWVtKQkJcHJlZmV0Y2gobWVtLCB0MikKLQkjZGVmaW5lCXByZWZldGNobnRhKG1lbSkJcHJlZmV0Y2gobWVtLCBudGEpCi0jZW5kaWYKLQotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wLmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAzZTcyYi4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJpbGx5IEJpZ2dzIDx2ZWt0b3JAZHVtYnRlcm0ubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBSZWxpY2Vuc2VkIGZvciBHU3RyZWFtZXIgZnJvbSBHUEwgdG8gTEdQTCB3aXRoIHBlcm1pdCBmcm9tIFRvbSBCYXJyeS4KLSAqIFNlZTogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTc4Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2lmZGVmIEhBVkVfT1JDCi0jaW5jbHVkZSA8b3JjL29yYy5oPgotI2VuZGlmCi0jaW5jbHVkZSAiZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaCIKLSNpbmNsdWRlICJwbHVnaW5zLmgiCi0KLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1RPTVNNT0NPTVAJKGdzdF9kZWludGVybGFjZV9tZXRob2RfdG9tc21vY29tcF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1RPTVNNT0NPTVAsIEdzdERlaW50ZXJsYWNlTWV0aG9kVG9tc01vQ29tcENsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QLCBHc3REZWludGVybGFjZU1ldGhvZFRvbXNNb0NvbXApKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX1RPTVNNT0NPTVBfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1RPTVNNT0NPTVAsIEdzdERlaW50ZXJsYWNlTWV0aG9kVG9tc01vQ29tcENsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QX0NBU1Qob2JqKQkoKEdzdERlaW50ZXJsYWNlTWV0aG9kVG9tc01vQ29tcCopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kIHBhcmVudDsKLQotICBndWludCBzZWFyY2hfZWZmb3J0OwotICBnYm9vbGVhbiBzdHJhbmdlX2JvYjsKLX0gR3N0RGVpbnRlcmxhY2VNZXRob2RUb21zTW9Db21wOwotCi10eXBlZGVmIEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgR3N0RGVpbnRlcmxhY2VNZXRob2RUb21zTW9Db21wQ2xhc3M7Ci0KLXN0YXRpYyB2b2lkCi1GaWVsZGNvcHkgKGd1aW50OCAqIGRlc3QsIGNvbnN0IGd1aW50OCAqIHNyYywgZ2ludCBjb3VudCwKLSAgICBnaW50IHJvd3MsIGdpbnQgZHN0X3BpdGNoLCBnaW50IHNyY19waXRjaCkKLXsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKLSAgICBtZW1jcHkgKGRlc3QsIHNyYywgY291bnQpOwotICAgIHNyYyArPSBzcmNfcGl0Y2g7Ci0gICAgZGVzdCArPSBkc3RfcGl0Y2g7Ci0gIH0KLX0KLQotI2RlZmluZSBVU0VfRk9SX0RTQ0FMRVIKLQotI2RlZmluZSBJU19DCi0jZGVmaW5lIFNJTURfVFlQRSBDCi0jZGVmaW5lIEZVTkNUX05BTUUgdG9tc21vY29tcERTY2FsZXJfQwotI2luY2x1ZGUgInRvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmMiCi0jdW5kZWYgIElTX0MKLSN1bmRlZiAgU0lNRF9UWVBFCi0jdW5kZWYgIEZVTkNUX05BTUUKLQotI2lmZGVmIEJVSUxEX1g4Nl9BU00KLQotI2luY2x1ZGUgInRvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oIgotI2luY2x1ZGUgIng4Ni02NF9tYWNyb3MuaW5jIgotCi0jZGVmaW5lIElTX01NWAotI2RlZmluZSBTSU1EX1RZUEUgTU1YCi0jZGVmaW5lIEZVTkNUX05BTUUgdG9tc21vY29tcERTY2FsZXJfTU1YCi0jaW5jbHVkZSAidG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYyIKLSN1bmRlZiAgSVNfTU1YCi0jdW5kZWYgIFNJTURfVFlQRQotI3VuZGVmICBGVU5DVF9OQU1FCi0KLSNkZWZpbmUgSVNfM0ROT1cKLSNkZWZpbmUgU0lNRF9UWVBFIDNETk9XCi0jZGVmaW5lIEZVTkNUX05BTUUgdG9tc21vY29tcERTY2FsZXJfM0ROT1cKLSNpbmNsdWRlICJ0b21zbW9jb21wL1RvbXNNb0NvbXBBbGwuaW5jIgotI3VuZGVmICBJU18zRE5PVwotI3VuZGVmICBTSU1EX1RZUEUKLSN1bmRlZiAgRlVOQ1RfTkFNRQotCi0jZGVmaW5lIElTX01NWEVYVAotI2RlZmluZSBTSU1EX1RZUEUgTU1YRVhUCi0jZGVmaW5lIEZVTkNUX05BTUUgdG9tc21vY29tcERTY2FsZXJfTU1YRVhUCi0jaW5jbHVkZSAidG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYyIKLSN1bmRlZiAgSVNfTU1YRVhUCi0jdW5kZWYgIFNJTURfVFlQRQotI3VuZGVmICBGVU5DVF9OQU1FCi0KLSNlbmRpZgotCi1HX0RFRklORV9UWVBFIChHc3REZWludGVybGFjZU1ldGhvZFRvbXNNb0NvbXAsCi0gICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0QpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9TRUFSQ0hfRUZGT1JULAotICBQUk9QX1NUUkFOR0VfQk9CCi19OwotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZWludGVybGFjZU1ldGhvZFRvbXNNb0NvbXAgKnNlbGYgPQotICAgICAgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TRUFSQ0hfRUZGT1JUOgotICAgICAgc2VsZi0+c2VhcmNoX2VmZm9ydCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJBTkdFX0JPQjoKLSAgICAgIHNlbGYtPnN0cmFuZ2VfYm9iID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGFjZV9tZXRob2RfdG9tc21vY29tcF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RUb21zTW9Db21wICpzZWxmID0KLSAgICAgIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfVE9NU01PQ09NUCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU0VBUkNIX0VGRk9SVDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZWxmLT5zZWFyY2hfZWZmb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJBTkdFX0JPQjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWxmLT5zdHJhbmdlX2JvYik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotICAgIGdzdF9kZWludGVybGFjZV9tZXRob2RfdG9tc21vY29tcF9jbGFzc19pbml0Ci0gICAgKEdzdERlaW50ZXJsYWNlTWV0aG9kVG9tc01vQ29tcENsYXNzICoga2xhc3MpCi17Ci0gIEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKmRpbV9jbGFzcyA9IChHc3REZWludGVybGFjZU1ldGhvZENsYXNzICopIGtsYXNzOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotI2lmZGVmIEJVSUxEX1g4Nl9BU00KLSAgZ3VpbnQgY3B1X2ZsYWdzID0KLSAgICAgIG9yY190YXJnZXRfZ2V0X2RlZmF1bHRfZmxhZ3MgKG9yY190YXJnZXRfZ2V0X2J5X25hbWUgKCJtbXgiKSk7Ci0jZW5kaWYKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3RvbXNtb2NvbXBfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3RvbXNtb2NvbXBfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0VBUkNIX0VGRk9SVCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgic2VhcmNoLWVmZm9ydCIsCi0gICAgICAgICAgIlNlYXJjaCBFZmZvcnQiLAotICAgICAgICAgICJTZWFyY2ggRWZmb3J0IiwgMCwgMjcsIDUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykKLSAgICAgICk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVFJBTkdFX0JPQiwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic3RyYW5nZS1ib2IiLAotICAgICAgICAgICJTdHJhbmdlIEJvYiIsCi0gICAgICAgICAgIlVzZSBzdHJhbmdlIGJvYiIsIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpCi0gICAgICApOwotCi0gIGRpbV9jbGFzcy0+ZmllbGRzX3JlcXVpcmVkID0gNDsKLSAgZGltX2NsYXNzLT5uYW1lID0gIk1vdGlvbiBBZGFwdGl2ZTogTW90aW9uIFNlYXJjaCI7Ci0gIGRpbV9jbGFzcy0+bmljayA9ICJ0b21zbW9jb21wIjsKLSAgZGltX2NsYXNzLT5sYXRlbmN5ID0gMTsKLQotI2lmZGVmIEJVSUxEX1g4Nl9BU00KLSAgaWYgKGNwdV9mbGFncyAmIE9SQ19UQVJHRVRfTU1YX01NWEVYVCkgewotICAgIGRpbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXV5MiA9IHRvbXNtb2NvbXBEU2NhbGVyX01NWEVYVDsKLSAgICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l2eXUgPSB0b21zbW9jb21wRFNjYWxlcl9NTVhFWFQ7Ci0gIH0gZWxzZSBpZiAoY3B1X2ZsYWdzICYgT1JDX1RBUkdFVF9NTVhfM0ROT1cpIHsKLSAgICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l1eTIgPSB0b21zbW9jb21wRFNjYWxlcl8zRE5PVzsKLSAgICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l2eXUgPSB0b21zbW9jb21wRFNjYWxlcl8zRE5PVzsKLSAgfSBlbHNlIGlmIChjcHVfZmxhZ3MgJiBPUkNfVEFSR0VUX01NWF9NTVgpIHsKLSAgICBkaW1fY2xhc3MtPmRlaW50ZXJsYWNlX2ZyYW1lX3l1eTIgPSB0b21zbW9jb21wRFNjYWxlcl9NTVg7Ci0gICAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95dnl1ID0gdG9tc21vY29tcERTY2FsZXJfTU1YOwotICB9IGVsc2UgewotICAgIGRpbV9jbGFzcy0+ZGVpbnRlcmxhY2VfZnJhbWVfeXV5MiA9IHRvbXNtb2NvbXBEU2NhbGVyX0M7Ci0gICAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95dnl1ID0gdG9tc21vY29tcERTY2FsZXJfQzsKLSAgfQotI2Vsc2UKLSAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95dXkyID0gdG9tc21vY29tcERTY2FsZXJfQzsKLSAgZGltX2NsYXNzLT5kZWludGVybGFjZV9mcmFtZV95dnl1ID0gdG9tc21vY29tcERTY2FsZXJfQzsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF90b21zbW9jb21wX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kVG9tc01vQ29tcCAqIHNlbGYpCi17Ci0gIHNlbGYtPnNlYXJjaF9lZmZvcnQgPSA1OwotICBzZWxmLT5zdHJhbmdlX2JvYiA9IEZBTFNFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3AwQS5pbmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcDBBLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkOWFlYy4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcDBBLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIC0qLSBjKysgLSotCi0KLS8vIFNlYXJjaGVzIGp1c3QgdGhlIGNlbnRlciBwaXhlbCwgaW4gYm90aCB0aGUgb2xkCi0vLyAgYW5kIG5ldyBmaWVsZHMsIGJ1dCB0YWtlcyBhdmVyYWdlcy4gVGhpcyBpcyBhbiBldmVuCi0vLyBwaXhlbCBhZGRyZXNzLiBBbnkgY2hyb21hIG1hdGNoIHdpbGwgYmUgdXNlZC4gKFlVWTIpCi0vLyBXZSBiZXN0IGxpa2UgZmluZGluZyAwIG1vdGlvbiBzbyB3ZSB3aWxsIGJpYXMgZXZlcnl0aGluZyB3ZSBmb3VuZCBwcmV2aW91c2x5Ci0vLyB1cCBieSBhIGxpdHRsZSwgYW5kIGFkanVzdCBsYXRlcgotCi0jaWZkZWYgSVNfU1NFMgotCQkicGFkZHVzYiAiX09ORVMiLCAlJXhtbTdcblx0IgkJCQkvLyBiaWFzIHRvd2FyZCBubyBtb3Rpb24KLSNlbHNlCi0JCSJwYWRkdXNiICJfT05FUyIsICUlbW03XG5cdCIgCQkJCS8vIGJpYXMgdG93YXJkIG5vIG1vdGlvbgotI2VuZGlmCi0KLSAgICAgICAgTUVSR0U0UElYYXZnKCIoJSUiWERJIiwgJSUiWENYIikiLCAiKCUlIlhTSSIsICUlIlhDWCIpIikgIC8vIGNlbnRlciwgaW4gb2xkIGFuZCBuZXcKZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wQm90dG9tLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1NjAzNS4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEJvdHRvbS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLy8gLSotIGMrKyAtKi0gICAgICAgCi0KLS8vIFZlcnNpb24gZm9yIG5vbi1TU0UyCi0KLSNpZm5kZWYgSVNfQwotCi0jaWZkZWYgU0tJUF9TRUFSQ0gKLSAgICAgICAgICAgICJtb3ZxICAgICUlbW02LCAlJW1tMFxuXHQiICAgICAgICAgICAgLy8ganVzdCB1c2UgdGhlIHJlc3VsdHMgb2Ygb3VyIHdpZXJkIGJvYgotI2Vsc2UKLQotCi0gICAgICAgICAgICAvLyBKQSA5L0RlYy8yMDAyCi0gICAgICAgICAgICAvLyBmYWlsZWQgZXhwZXJpbWVudAotICAgICAgICAgICAgLy8gYnV0IGxlYXZlIGluIHBsYWNlaG9sZGVyIGZvciBtZSB0byBwbGF5IGFib3V0Ci0jaWZkZWYgRE9OVF9VU0VfU1RSQU5HRV9CT0IKLSAgICAgICAgICAgIC8vIFVzZSB0aGUgYmVzdCB3ZWF2ZSBpZiBkaWZmcyBsZXNzIHRoYW4gMTAgYXMgdGhhdAotICAgICAgICAgICAgLy8gbWVhbnMgdGhlIGltYWdlIGlzIHN0aWxsIG9yIG1vdmluZyBjbGVhbmx5Ci0gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBtb3Rpb24gd2Ugd2lsbCBjbGlwIHdoaWNoIHdpbGwgY2F0Y2ggYW55dGhpbmcKLSAgICAgICAgICAgICJwc3VidXNiICJfRk9VUlMiLCAlJW1tN1xuXHQiICAgICAgICAgIC8vIHNldHMgYml0cyB0byB6ZXJvIGlmIHdlYXZlIGRpZmYgPCA0Ci0gICAgICAgICAgICAicHhvciAgICAlJW1tMCwgJSVtbTBcblx0IgotICAgICAgICAgICAgInBjbXBlcWIgJSVtbTAsICUlbW03XG5cdCIgICAgICAgICAgICAvLyBhbGwgZmYgd2hlcmUgd2VhdmUgYmV0dGVyLCBlbHNlIDAwCi0gICAgICAgICAgICAicGNtcGVxYiAlJW1tNywgJSVtbTBcblx0IiAgICAgICAgICAgIC8vIGFsbCBmZiB3aGVyZSBib2IgYmV0dGVyLCBlbHNlIDAwCi0gICAgICAgICAgICAicGFuZCAgICAlJW1tNiwgJSVtbTBcblx0IiAgICAgICAgICAgIC8vIHVzZSBib2IgZm9yIHRoZXNlIHBpeGVsIHZhbHVlcwotICAgICAgICAgICAgInBhbmQgICAgJSVtbTUsICUlbW03XG5cdCIgICAgICAgICAgICAvLyB1c2Ugd2VhdmUgZm9yIHRoZXNlCi0gICAgICAgICAgICAicG9yICAgICAlJW1tNywgJSVtbTBcblx0IiAgICAgICAgICAgIC8vIGNvbWJpbmUgYm90aAotI2Vsc2UKLSAgICAgICAgICAgIC8vIFVzZSB0aGUgYmV0dGVyIG9mIGJvYiBvciB3ZWF2ZQotICAgICAgICAgICAgLy8gICAgICBwbWludWIgIG1tNCwgVEVOUyAgICAgICAgICAgLy8gdGhlIG1vc3Qgd2UgY2FyZSBhYm91dAotICAgICAgICAgICAgVl9QTUlOVUIgKCIlJW1tNCIsIF9URU5TLCAiJSVtbTAiKSAgIC8vIHRoZSBtb3N0IHdlIGNhcmUgYWJvdXQKLSAgICAgICAgICAgIAotICAgICAgICAgICAgInBzdWJ1c2IgJSVtbTQsICUlbW03XG5cdCIgICAgICAgICAgICAvLyBmb3JlZ2l2ZSB0aGF0IG11Y2ggZnJvbSB3ZWF2ZSBlc3Q/Ci0gICAgICAgICAgICAicHN1YnVzYiAiX0ZPVVJTIiwgJSVtbTdcblx0IiAgICAgICAvLyBiaWFzIGl0IGEgYml0IHRvd2FyZCB3ZWF2ZQotICAgICAgICAgICAgInB4b3IgICAgJSVtbTAsICUlbW0wXG5cdCIKLSAgICAgICAgICAgICJwY21wZXFiICUlbW0wLCAlJW1tN1xuXHQiICAgICAgICAgICAgLy8gYWxsIGZmIHdoZXJlIHdlYXZlIGJldHRlciwgZWxzZSAwMAotICAgICAgICAgICAgInBjbXBlcWIgJSVtbTcsICUlbW0wXG5cdCIgICAgICAgICAgICAvLyBhbGwgZmYgd2hlcmUgYm9iIGJldHRlciwgZWxzZSAwMAotICAgICAgICAgICAgInBhbmQgICAgJSVtbTYsICUlbW0wXG5cdCIgICAgICAgICAgICAvLyB1c2UgYm9iIGZvciB0aGVzZSBwaXhlbCB2YWx1ZXMKLSAgICAgICAgICAgICJwYW5kICAgICUlbW01LCAlJW1tN1xuXHQiICAgICAgICAgICAgLy8gdXNlIHdlYXZlIGZvciB0aGVzZQotICAgICAgICAgICAgInBvciAgICAgJSVtbTcsICUlbW0wXG5cdCIgICAgICAgICAgICAvLyBjb21iaW5lIGJvdGgKLSNlbmRpZgotICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgIHBtaW51YiAgbW0wLCBNYXhfVmFscyAgICAgICAvLyBidXQgY2xpcCB0byBjYXRjaCB0aGUgc3RyYXkgZXJyb3IKLSAgICAgICAgICAgICAgICBWX1BNSU5VQiAoIiUlbW0wIiwgX01heF9WYWxzLCAiJSVtbTEiKSAvLyBidXQgY2xpcCB0byBjYXRjaCB0aGUgc3RyYXkgZXJyb3IKLSAgICAgICAgICAgICAgICAvLyAgICAgIHBtYXh1YiAgbW0wLCBNaW5fVmFscwotICAgICAgICAgICAgICAgIFZfUE1BWFVCICgiJSVtbTAiLCBfTWluX1ZhbHMpCi0gICAgICAgICAgICAgICAgCi0jZW5kaWYKLQotCi0gICAgICAgICAgICBNT1ZYIiAgICAgIl9wRGVzdCIsICUlIlhBWCJcblx0IgotICAgICAgICAgICAgICAgIAotI2lmZGVmIFVTRV9WRVJUSUNBTF9GSUxURVIKLSAgICAgICAgICAgICJtb3ZxICAgICUlbW0wLCAlJW1tMVxuXHQiCi0gICAgICAgICAgICAvLyAgICAgIHBhdmdiICAgbW0wLCBxd29yZCBwdHJbIlhCWCJdCi0gICAgICAgICAgICBWX1BBVkdCICgiJSVtbTAiLCAiKCUlIlhCWCIpIiwgIiUlbW0yIiwgX1NoaWZ0TWFzaykKLSAgICAgICAgICAgIC8vICAgICAgbW92bnRxICBxd29yZCBwdHJbIlhBWCIrIlhEWCJdLCBtbTAKLSAgICAgICAgICAgIFZfTU9WTlRRICgiKCUiWEFYIiwgJSUiWERYIikiLCAiJSVtbTAiKQotICAgICAgICAgICAgLy8gICAgICBwYXZnYiAgIG1tMSwgcXdvcmQgcHRyWyJYQlgiKyJYQ1giXQotICAgICAgICAgICAgVl9QQVZHQiAoIiUlbW0xIiwgIiglJSJYQlgiLCAlJSJYQ1giKSIsICIlJW1tMiIsIF9TaGlmdE1hc2spCi0JICAgIC8vRklYTUU6IFhEWCBvciBYQVghIQotICAgICAgICAgICAgImFkZHEgICAiX2RzdF9waXRjaHciLCAlJSJYQlgKLSAgICAgICAgICAgIC8vICAgICAgbW92bnRxICBxd29yZCBwdHJbIlhBWCIrIlhEWCJdLCBtbTEKLSAgICAgICAgICAgIFZfTU9WTlRRICgiKCUlIlhBWCIsICUlIlhEWCIpIiwgIiUlbW0xIikKLSNlbHNlCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAgICAgIG1vdm50cSAgcXdvcmQgcHRyWyJYQVgiKyJYRFgiXSwgbW0wCi0gICAgICAgICAgICAgICAgVl9NT1ZOVFEgKCIoJSUiWEFYIiwgJSUiWERYIikiLCAiJSVtbTAiKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgIExFQVgiICAgIDgoJSUiWERYIiksICUlIlhEWCJcblx0IiAgICAgICAvLyBidW1wIG9mZnNldCBwb2ludGVyCi0gICAgICAgICAgIENNUFgiICAgICJfTGFzdDgiLCAlJSJYRFgiXG5cdCIgICAgICAgLy8gZG9uZSB3aXRoIGxpbmU/Ci0gICAgICAgICAgICJqYiAgICAgIDFiXG5cdCIgICAgICAgICAgICAgICAgICAgIC8vIHkKLQotICAgICAgICAgICBNT1ZYIiAiX29sZGJ4IiwgJSUiWEJYIlxuXHQiCi0KLSAgICAgICAgOiAvKiBubyBvdXRwdXRzICovCi0KLSAgICAgICAgOiAibSIocEJvYiksCi0gICAgICAgICAgIm0iKHNyY19waXRjaDIpLAotICAgICAgICAgICJtIihTaGlmdE1hc2spLAotICAgICAgICAgICJtIihwRGVzdCksCi0gICAgICAgICAgIm0iKGRzdF9waXRjaHcpLAotICAgICAgICAgICJtIihMYXN0OCksCi0gICAgICAgICAgIm0iKHBTcmMpLAotICAgICAgICAgICJtIihwU3JjUCksCi0gICAgICAgICAgIm0iKHBCb2JQKSwKLSAgICAgICAgICAibSIoRGlmZlRocmVzKSwKLSAgICAgICAgICAibSIoTWluX1ZhbHMpLAotICAgICAgICAgICJtIihNYXhfVmFscyksCi0gICAgICAgICAgIm0iKEZPVVJTKSwKLSAgICAgICAgICAibSIoVEVOUyksCi0gICAgICAgICAgIm0iKE9ORVMpLAotICAgICAgICAgICJtIihVVk1hc2spLAotICAgICAgICAgICJtIihNYXhfTW92KSwKLSAgICAgICAgICAibSIoWU1hc2spLAotICAgICAgICAgICJtIihvbGRieCkKLQotICAgICAgICA6IFhBWCwgWENYLCBYRFgsIFhTSSwgWERJLAotICAgICAgICAgICJzdCIsICJzdCgxKSIsICJzdCgyKSIsICJzdCgzKSIsICJzdCg0KSIsICJzdCg1KSIsICJzdCg2KSIsICJzdCg3KSIsCi0jaWZkZWYgX19NTVhfXwotICAgICAgICAgICJtbTAiLCAibW0xIiwgIm1tMiIsICJtbTMiLCAibW00IiwgIm1tNSIsICJtbTYiLCAibW03IiwKLSNlbmRpZgotICAgICAgICAgICJtZW1vcnkiLCAiY2MiCi0gICAgICAgICk7Ci0KLSAgICAgICAgLy8gYWRqdXN0IGZvciBuZXh0IGxpbmUKLSAgICAgICAgcFNyYyAgKz0gc3JjX3BpdGNoMjsKLSAgICAgICAgcFNyY1AgKz0gc3JjX3BpdGNoMjsKLSAgICAgICAgcERlc3QgKz0gZHN0X3BpdGNoMjsKLSAgICAgICAgcEJvYiAgKz0gc3JjX3BpdGNoMjsKLSAgICAgICAgcEJvYlAgKz0gc3JjX3BpdGNoMjsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci0jZWxzZQotI2lmZGVmIFNLSVBfU0VBUkNICi0gICAgICAgICAgICBvdXRbMF0gPSBiZXN0WzBdOyAgICAgICAgICAgIC8vIGp1c3QgdXNlIHRoZSByZXN1bHRzIG9mIG91ciB3aWVyZCBib2IKLQkgICAgb3V0WzFdID0gYmVzdFsxXTsKLSNlbHNlCi0gICAgICAgICAgICBkaWZmWzBdID0gZGlmZlswXSAtIE1JTiAoZGlmZlswXSwgMTApIC0gNDsKLQkgICAgZGlmZlsxXSA9IGRpZmZbMV0gLSBNSU4gKGRpZmZbMV0gLSAxMCkgLSA0OwotCSAgICBpZiAoZGlmZlswXSA8IDApCi0JICAgICAgb3V0WzBdID0gd2VhdmVbMF07Ci0JICAgIGVsc2UKLQkgICAgICBvdXRbMF0gPSBiZXN0WzBdOwotCSAgICAKLQkgICAgaWYgKGRpZmZbMV0gPCAwKQotCSAgICAgIG91dFsxXSA9IHdlYXZlWzFdOwotCSAgICBlbHNlCi0JICAgICAgb3V0WzFdID0gYmVzdFsxXTsKLQotCi0JICAgIG91dFswXSA9IENMQU1QIChvdXRbMF0sIE1pblZhbHNbMF0sIE1heFZhbHNbMF0pOwotCSAgICBvdXRbMV0gPSBDTEFNUCAob3V0WzFdLCBNaW5WYWxzWzFdLCBNYXhWYWxzWzFdKTsKLSNlbmRpZgotCi0jaWZkZWYgVVNFX1ZFUlRJQ0FMX0ZJTFRFUgotICAgICAgICAgICAgcERlc3RbeF0gPSAob3V0WzBdICsgcEJvYlswXSkgLyAyOwotCSAgICBwRGVzdFt4ICsgZHN0X3BpdGNod10gPSAocEJvYltzcmNfcGl0Y2gyXSArIG91dFswXSkgLyAyOwotICAgICAgICAgICAgcERlc3RbeCArIDFdID0gKG91dFsxXSArIHBCb2JbMV0pIC8gMjsKLQkgICAgcERlc3RbeCArIDEgKyBkc3RfcGl0Y2h3XSA9IChwQm9iW3NyY19waXRjaDIgKyAxXSArIG91dFsxXSkgLyAyOwotI2Vsc2UKLSAgICAgICAgICAgIHBEZXN0W3hdID0gb3V0WzBdOwotCSAgICBwRGVzdFt4KzFdID0gb3V0WzFdOwotI2VuZGlmCi0gICAgICAgICAgICBwQm9iICs9IDI7Ci0gICAgICAgICAgICBwQm9iUCArPSAyOwotICAgICAgICAgICAgcFNyYyArPSAyOwotICAgICAgICAgICAgcFNyY1AgKz0gMjsKLQl9Ci0gICAgICAgIC8vIGFkanVzdCBmb3IgbmV4dCBsaW5lCi0gICAgICAgIHBTcmMgID0gc3JjX3BpdGNoMiAqICh5KzEpICsgcFdlYXZlU3JjOwotICAgICAgICBwU3JjUCA9IHNyY19waXRjaDIgKiAoeSsxKSArIHBXZWF2ZVNyY1A7Ci0gICAgICAgIHBEZXN0ID0gZHN0X3BpdGNoMiAqICh5KzEpICsgcFdlYXZlRGVzdCArIGRzdF9waXRjaDI7Ci0KLQotCWlmIChUb3BGaXJzdCkKLQl7Ci0JCXBCb2IgPSBwQ29weVNyYyArIHNyY19waXRjaDI7Ci0JCXBCb2JQID0gcENvcHlTcmNQICsgc3JjX3BpdGNoMjsKLQl9Ci0JZWxzZQotCXsKLQkJcEJvYiA9ICBwQ29weVNyYzsKLQkJcEJvYlAgPSAgcENvcHlTcmNQOwotCX0KLQotICAgICAgICBwQm9iICArPSBzcmNfcGl0Y2gyICogKHkrMSk7Ci0gICAgICAgIHBCb2JQICs9IHNyY19waXRjaDIgKiAoeSsxKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BFZGdlQS5pbmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEVkZ2VBLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIwOGZlOC4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcEVkZ2VBLmluYworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8vIC0qLSBjKysgLSotCi0KLS8vIFNlYXJjaGVzIDIgcGl4ZWwgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0LCBpbiBib3RoIHRoZSBvbGQKLS8vICBhbmQgbmV3IGZpZWxkcywgYnV0IHRha2VzIGF2ZXJhZ2VzLiBUaGVzZSBhcmUgZXZlbgotLy8gcGl4ZWwgYWRkcmVzc2VzLiBDaHJvbWEgbWF0Y2ggd2lsbCBiZSB1c2VkLiAoWVVZMikKLSAgICAgICAgTUVSR0U0UElYYXZnKCItNCglJSJYREkiKSIsICI0KCUlIlhTSSIsICUlIlhDWCIsIDIpIikgIC8vIHVwIGxlZnQsIGRvd24gcmlnaHQKLSAgICAgICAgTUVSR0U0UElYYXZnKCI0KCUlIlhESSIpIiwgIi00KCUlIlhTSSIsICUlIlhDWCIsIDIpIikgIC8vIHVwIHJpZ2h0LCBkb3duIGxlZnQKLSAgICAgICAgTUVSR0U0UElYYXZnKCItNCglJSJYREkiLCAlJSJYQ1giKSIsICI0KCUlIlhTSSIsICUlIlhDWCIpIikgLy8gbGVmdCwgcmlnaHQKLSAgICAgICAgTUVSR0U0UElYYXZnKCI0KCUlIlhESSIsICUlIlhDWCIpIiwgIi00KCUlIlhTSSIsICUlIlhDWCIpIikgLy8gcmlnaHQsIGxlZnQKLSAgICAgICAgTUVSR0U0UElYYXZnKCItNCglJSJYREkiLCAlJSJYQ1giLCAyKSIsICI0KCUlIlhTSSIpIikgICAvLyBkb3duIGxlZnQsIHVwIHJpZ2h0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiNCglJSJYREkiLCAlJSJYQ1giLCAyKSIsICItNCglJSJYU0kiKSIpICAgLy8gZG93biByaWdodCwgdXAgbGVmdApkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BFZGdlQTguaW5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BFZGdlQTguaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODQxYzNmLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wRWRnZUE4LmluYworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8vIC0qLSBjKysgLSotCi0KLS8vIFNlYXJjaGVzIDQgcGl4ZWwgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0LCBpbiBib3RoIHRoZSBvbGQKLS8vICBhbmQgbmV3IGZpZWxkcywgYnV0IHRha2VzIGF2ZXJhZ2VzLiBUaGVzZSBhcmUgZXZlbgotLy8gcGl4ZWwgYWRkcmVzc2VzLiBDaHJvbWEgbWF0Y2ggd2lsbCBiZSB1c2VkLiAoWVVZMikKLSAgICAgICAgTUVSR0U0UElYYXZnKCItOCglJSJYREkiKSIsICI4KCUlIlhTSSIsICUlIlhDWCIsIDIpIikgIC8vIHVwIGxlZnQsIGRvd24gcmlnaHQKLSAgICAgICAgTUVSR0U0UElYYXZnKCI4KCUlIlhESSIpIiwgIi04KCUlIlhTSSIsICUlIlhDWCIsIDIpIikgIC8vIHVwIHJpZ2h0LCBkb3duIGxlZnQKLSAgICAgICAgTUVSR0U0UElYYXZnKCItOCglJSJYREkiLCAlJSJYQ1giKSIsICI4KCUlIlhTSSIsICUlIlhDWCIpIikgLy8gbGVmdCwgcmlnaHQKLSAgICAgICAgTUVSR0U0UElYYXZnKCI4KCUlIlhESSIsICUlIlhDWCIpIiwgIi04KCUlIlhTSSIsICUlIlhDWCIpIikgLy8gcmlnaHQsIGxlZnQKLSAgICAgICAgTUVSR0U0UElYYXZnKCItOCglJSJYREkiLCAlJSJYQ1giLCAyKSIsICI4KCUlIlhTSSIpIikgICAvLyBkb3duIGxlZnQsIHVwIHJpZ2h0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiOCglJSJYREkiLCAlJSJYQ1giLCAyKSIsICItOCglJSJYU0kiKSIpICAgLy8gZG93biByaWdodCwgdXAgbGVmdAotCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEEuaW5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1Mzc1Zi4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEEuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotLy8gLSotIGMrKyAtKi0KLQotLy8gU2VhcmNoZXMgMSBwaXhlbCB0byB0aGUgbGVmdCBhbmQgcmlnaHQsIGluIGJvdGggdGhlIG9sZAotLy8gIGFuZCBuZXcgZmllbGRzLCBidXQgdGFrZXMgYXZlcmFnZXMuIFRoZXNlIGFyZSBvZGQKLS8vIHBpeGVsIGFkZHJlc3Nlcy4gQW55IGNocm9tYSBtYXRjaCB3aWxsIG5vdCBiZSB1c2VkLiAoWVVZMikKLSAgICAgICAgTUVSR0U0UElYYXZnKCItMiglJSJYREkiKSIsICIyKCUlIlhTSSIsICUlIlhDWCIsIDIpIikgIC8vIHVwIGxlZnQsIGRvd24gcmlnaHQKLSAgICAgICAgTUVSR0U0UElYYXZnKCIyKCUlIlhESSIpIiwgIi0yKCUlIlhTSSIsICUlIlhDWCIsIDIpIikgIC8vIHVwIHJpZ2h0LCBkb3duIGxlZnQKLSAgICAgICAgTUVSR0U0UElYYXZnKCItMiglJSJYREkiLCAlJSJYQ1giLCAyKSIsICIyKCUlIlhTSSIpIikgICAvLyBkb3duIGxlZnQsIHVwIHJpZ2h0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiMiglJSJYREkiLCAlJSJYQ1giLCAyKSIsICItMiglJSJYU0kiKSIpICAgLy8gZG93biByaWdodCwgdXAgbGVmdCAgIAotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBMi5pbmMiCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEEyLmluYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTIuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDNmNmZiLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vLyBTZWFyY2hlcyAxIHBpeGVsIHRvIHRoZSBsZWZ0IGFuZCByaWdodCwgaW4gYm90aCB0aGUgb2xkCi0vLyBhbmQgbmV3IGZpZWxkcywgYnV0IHRha2VzIGF2ZXJhZ2VzLiBUaGVzZSBhcmUgb2RkCi0vLyBwaXhlbCBhZGRyZXNzZXMuIEFueSBjaHJvbWEgbWF0Y2ggd2lsbCBub3QgYmUgdXNlZC4gKFlVWTIpCi0gICAgICAgIE1FUkdFNFBJWGF2ZygiLTIoJSUiWERJIiwgJSUiWENYIikiLCAiMiglJSJYU0kiLCAlJSJYQ1giKSIpIC8vIGxlZnQsIHJpZ2h0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiMiglJSJYREkiLCAlJSJYQ1giKSIsICItMiglJSJYU0kiLCAlJSJYQ1giKSIpIC8vIHJpZ2h0LCBsZWZ0CmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEE2LmluYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTYuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmFlMDE0Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQTYuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLy8gLSotIGMrKyAtKi0KLQotLy8gU2VhcmNoZXMgMyBwaXhlbHMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0LCBpbiBib3RoIHRoZSBvbGQKLS8vICBhbmQgbmV3IGZpZWxkcywgYnV0IHRha2VzIGF2ZXJhZ2VzLiBUaGVzZSBhcmUgb2RkCi0vLyBwaXhlbCBhZGRyZXNzZXMuIEFueSBjaHJvbWEgbWF0Y2ggd2lsbCBub3QgYmUgdXNlZC4gKFlVWTIpCi0gICAgICAgIE1FUkdFNFBJWGF2ZygiLTYoJSUiWERJIikiLCAiNiglJSJYU0kiLCAlJSJYQ1giLCAyKSIpICAvLyB1cCBsZWZ0LCBkb3duIHJpZ2h0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiNiglJSJYREkiKSIsICItNiglJSJYU0kiLCAlJSJYQ1giLCAyKSIpICAvLyB1cCByaWdodCwgZG93biBsZWZ0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiLTYoJSUiWERJIiwgJSUiWENYIikiLCAiNiglJSJYU0kiLCAlJSJYQ1giKSIpIC8vIGxlZnQsIHJpZ2h0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiNiglJSJYREkiLCAlJSJYQ1giKSIsICItNiglJSJYU0kiLCAlJSJYQ1giKSIpIC8vIHJpZ2h0LCBsZWZ0Ci0gICAgICAgIE1FUkdFNFBJWGF2ZygiLTYoJSUiWERJIiwgJSUiWENYIiwgMikiLCAiNiglJSJYU0kiKSIpICAgLy8gZG93biBsZWZ0LCB1cCByaWdodAotICAgICAgICBNRVJHRTRQSVhhdmcoIjYoJSUiWERJIiwgJSUiWENYIiwgMikiLCAiLTYoJSUiWFNJIikiKSAgIC8vIGRvd24gcmlnaHQsIHVwIGxlZnQKZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wT2RkQUguaW5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBSC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWUzYzcuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBSC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0vLyBTZWFyY2hlcyAxIHBpeGVsIHRvIHRoZSBsZWZ0IGFuZCByaWdodCwgaW4gYm90aCB0aGUgb2xkDQotLy8gIGFuZCBuZXcgZmllbGRzLCBidXQgdGFrZXMgdi1oYWxmIHBlbCBhdmVyYWdlcy4gVGhlc2UgYXJlIG9kZA0KLS8vIHBpeGVsIGFkZHJlc3Nlcy4gQW55IGNocm9tYSBtYXRjaCB3aWxsIG5vdCBiZSB1c2VkLiAoWVVZMikNCi0JCV9fYXNtDQotCQl7DQotICAgICAgICBNRVJHRTRQSVhhdmdIKCJYREkiLTIsICJYREkiKyJYQ1giLTIsICJYU0kiKyJYQ1giKzIsICJYU0kiKzIqIlhDWCIrMikgIC8vIHVwIGxlZnQsIGRvd24gcmlnaHQNCi0gICAgICAgIE1FUkdFNFBJWGF2Z0goIlhESSIrMiwgIlhESSIrIlhDWCIrMiwgIlhTSSIrIlhDWCItMiwgIlhTSSIrMioiWENYIi0yKSAgIC8vIHVwIHJpZ2h0LCBkb3duIGxlZnQNCi0gICAgICAgIE1FUkdFNFBJWGF2Z0goIlhESSIrMioiWENYIi0yLCAiWERJIisiWENYIi0yLCAiWFNJIisiWENYIisyLCAiWFNJIisyKSAgIC8vIGRvd24gbGVmdCwgdXAgcmlnaHQNCi0gICAgICAgIE1FUkdFNFBJWGF2Z0goIlhESSIrMioiWENYIisyLCAiWERJIisiWENYIisyLCAiWFNJIisiWENYIi0yLCAiWFNJIi0yKSAgIC8vIGRvd24gcmlnaHQsIHVwIGxlZnQgICANCi0JCX0NCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEFIMi5pbmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcE9kZEFIMi5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkN2Q4MTIuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BPZGRBSDIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vLyBTZWFyY2hlcyAxIHBpeGVsIHRvIHRoZSBsZWZ0IGFuZCByaWdodCwgaW4gYm90aCB0aGUgb2xkCi0vLyAgYW5kIG5ldyBmaWVsZHMsIGJ1dCB0YWtlcyB2ZXJ0aWNhbCBhdmVyYWdlcy4gVGhlc2UgYXJlIG9kZAotLy8gcGl4ZWwgYWRkcmVzc2VzLiBBbnkgY2hyb21hIG1hdGNoIHdpbGwgbm90IGJlIHVzZWQuIChZVVkyKQotICAgICBNRVJHRTRQSVhhdmdIKCItMiglJSJYREkiLCAlJSJYQ1giKSIsICIoJSUiWERJIiwgJSUiWENYIikiLCAiKCUlIlhTSSIsICUlIlhDWCIpIiwgIjIoJSUiWFNJIiwgJSUiWENYIikiKSAvLyBsZWZ0LCByaWdodAotICAgICBNRVJHRTRQSVhhdmdIKCIyKCUlIlhESSIsICUlIlhDWCIpIiwgIiglJSJYREkiLCAlJSJYQ1giKSIsICIoJSUiWFNJIiwgJSUiWENYIikiLCAiLTIoJSUiWFNJIiwgJSUiWENYIikiKSAvLyByaWdodCwgbGVmdApkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BUb3AuaW5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BUb3AuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzVjN2RkLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TZWFyY2hMb29wVG9wLmluYworKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vLyAtKi0gYysrIC0qLQotCi11bnNpZ25lZCBjaGFyKiBwRGVzdDsKLWNvbnN0IHVuc2lnbmVkIGNoYXIqIHBTcmNQOwotY29uc3QgdW5zaWduZWQgY2hhciogcFNyYzsKLWNvbnN0IHVuc2lnbmVkIGNoYXIqIHBCb2I7Ci1jb25zdCB1bnNpZ25lZCBjaGFyKiBwQm9iUDsKLQotLy8gbG9uZyBpcyBpbnQzMiBvbiBBUkNIXzM2OCwgaW50NjQgb24gQVJDSF9BTUQ2NC4gRGVjbGFyaW5nIGl0IHRoaXMgd2F5Ci0vLyBzYXZlcyBhIGxvdCBvZiB4b3IncyB0byBkZWxldGUgNjRiaXQgZ2FyYmFnZS4KLQotI2lmIGRlZmluZWQoREJMX1JFU0laRSkgfHwgZGVmaW5lZChVU0VfRk9SX0RTQ0FMRVIpCi1sb25nCSAgICBzcmNfcGl0Y2gyID0gc3JjX3BpdGNoOwkJCS8vIGV2ZW4gJiBvZGQgbGluZXMgYXJlIG5vdCBpbnRlcmxlYXZlZCBpbiBEU2NhbGVyCi0jZWxzZQotbG9uZwkgICAgc3JjX3BpdGNoMiA9IDIgKiBzcmNfcGl0Y2g7CQkvLyBldmVuICYgb2RkIGxpbmVzIGFyZSBpbnRlcmxlYXZlZCBpbiBBdmlzeW50aAotI2VuZGlmCi0KLQotbG9uZwkgICAgZHN0X3BpdGNoMiA9IDIgKiBkc3RfcGl0Y2g7Ci1sb25nICAgICAgICB5OwotCi1sb25nICAgICBMYXN0ODsKLQotCXBTcmMgID0gcFdlYXZlU3JjOwkJCS8vIHBvaW50cyAxIHdlYXZlIGxpbmUgYWJvdmUKLQlwU3JjUCA9IHBXZWF2ZVNyY1A7CQkJLy8gIiAKLQotI2lmZGVmIERCTF9SRVNJWkUKLQkgICAgICAgIAotI2lmZGVmIFVTRV9WRVJUSUNBTF9GSUxURVIKLQlwRGVzdCA9IHBXZWF2ZURlc3QgKyBkc3RfcGl0Y2gyOwotI2Vsc2UKLQlwRGVzdCA9IHBXZWF2ZURlc3QgKyAzKmRzdF9waXRjaDsKLSNlbmRpZgotCi0jZWxzZQotCi0jaWZkZWYgVVNFX1ZFUlRJQ0FMX0ZJTFRFUgotCXBEZXN0ID0gcFdlYXZlRGVzdCArIGRzdF9waXRjaDsKLSNlbHNlCi0JcERlc3QgPSBwV2VhdmVEZXN0ICsgZHN0X3BpdGNoMjsKLSNlbmRpZgotCi0jZW5kaWYKLQotCWlmIChUb3BGaXJzdCkKLQl7Ci0JCXBCb2IgPSBwQ29weVNyYyArIHNyY19waXRjaDI7ICAgICAgLy8gcmVtZW1iZXIgb25lIHdlYXZlIGxpbmUganVzdCBjb3BpZWQgcHJldmlvdXNseQotCQlwQm9iUCA9IHBDb3B5U3JjUCArIHNyY19waXRjaDI7Ci0JfQotCWVsc2UKLQl7Ci0JCXBCb2IgPSAgcENvcHlTcmM7Ci0JCXBCb2JQID0gIHBDb3B5U3JjUDsKLQl9Ci0KLSNpZm5kZWYgSVNfQwotCi0jaWZuZGVmIF9wQm9iCi0jZGVmaW5lIF9wQm9iICAgICAgICIlMCIKLSNkZWZpbmUgX3NyY19waXRjaDIgIiUxIgotI2RlZmluZSBfU2hpZnRNYXNrICAiJTIiCi0jZGVmaW5lIF9wRGVzdCAgICAgICIlMyIKLSNkZWZpbmUgX2RzdF9waXRjaHcgIiU0IgotI2RlZmluZSBfTGFzdDggICAgICAiJTUiCi0jZGVmaW5lIF9wU3JjICAgICAgICIlNiIKLSNkZWZpbmUgX3BTcmNQICAgICAgIiU3IgotI2RlZmluZSBfcEJvYlAgICAgICAiJTgiCi0jZGVmaW5lIF9EaWZmVGhyZXMgICIlOSIKLSNkZWZpbmUgX01pbl9WYWxzICAgIiUxMCIKLSNkZWZpbmUgX01heF9WYWxzICAgIiUxMSIKLSNkZWZpbmUgX0ZPVVJTICAgICAgIiUxMiIKLSNkZWZpbmUgX1RFTlMgICAgICAgIiUxMyIKLSNkZWZpbmUgX09ORVMgICAgICAgIiUxNCIKLSNkZWZpbmUgX1VWTWFzayAgICAgIiUxNSIKLSNkZWZpbmUgX01heF9Nb3YgICAgIiUxNiIKLSNkZWZpbmUgX1lNYXNrICAgICAgIiUxNyIKLSNkZWZpbmUgX29sZGJ4ICAgICAgIiUxOCIKLSNlbmRpZgotICAgICAgICBMYXN0OCA9IChyb3dzaXplLTgpOwotCi0JZm9yICh5PTE7IHkgPCBGbGRIZWlnaHQtMTsgeSsrKQkKLQl7CQotICAgICAgICAgIGxvbmcJZHN0X3BpdGNodyA9IGRzdF9waXRjaDsgLy8gbG9jYWwgc3RvciBzbyBhc20gY2FuIHJlZgotICAgICAgICAgIGludDY0X3QgTWF4X01vdiAgID0gMHgwNDA0MDQwNDA0MDQwNDA0dWxsOyAKLSAgICAgICAgICBpbnQ2NF90IERpZmZUaHJlcyA9IDB4MGYwZjBmMGYwZjBmMGYwZnVsbDsgCi0gICAgICAgICAgaW50NjRfdCBZTWFzayAgICAgPSAweDAwZmYwMGZmMDBmZjAwZmZ1bGw7IC8vIGtlZXBzIG9ubHkgbHVtYQotICAgICAgICAgIGludDY0X3QgVVZNYXNrICAgID0gMHhmZjAwZmYwMGZmMDBmZjAwdWxsOyAvLyBrZWVwcyBvbmx5IGNocm9tYQotICAgICAgICAgIGludDY0X3QgVEVOUyAgICAgID0gMHgwYTBhMGEwYTBhMGEwYTBhdWxsOyAKLSAgICAgICAgICBpbnQ2NF90IEZPVVJTICAgICA9IDB4MDQwNDA0MDQwNDA0MDQwNHVsbDsgCi0gICAgICAgICAgaW50NjRfdCBPTkVTICAgICAgPSAweDAxMDEwMTAxMDEwMTAxMDF1bGw7IAotICAgICAgICAgIGludDY0X3QgTWluX1ZhbHMgID0gMHgwMDAwMDAwMDAwMDAwMDAwdWxsOwotICAgICAgICAgIGludDY0X3QgTWF4X1ZhbHMgID0gMHgwMDAwMDAwMDAwMDAwMDAwdWxsOwotICAgICAgICAgIGludDY0X3QgU2hpZnRNYXNrID0gMHhmZWZmZmVmZmZlZmZmZWZmdWxsOwotCi0gICAgICAgICAgbG9uZyBvbGRieCA9IDA7Ci0KLQkJLy8gcHJldGVuZCBpdCdzIGluZGVudGVkIC0tPj4KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KLSAgICAgICAgICAgICgKLSAgICAgICAgICAgICAvLyBMb29wIGdlbmVyYWwgcmVnIHVzYWdlCi0gICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAvLyBYQVggLSBwQm9iUCwgdGhlbiBwRGVzdCAKLSAgICAgICAgICAgICAvLyBYQlggLSBwQm9iCi0gICAgICAgICAgICAgLy8gWENYIC0gc3JjX3BpdGNoMgotICAgICAgICAgICAgIC8vIFhEWCAtIGN1cnJlbnQgb2Zmc2V0Ci0gICAgICAgICAgICAgLy8gWERJIC0gcHJldiB3ZWF2ZSBwaXhlbHMsIDEgbGluZSB1cAotICAgICAgICAgICAgIC8vIFhTSSAtIG5leHQgd2VhdmUgcGl4ZWxzLCAxIGxpbmUgdXAKLQotICAgICAgICAgICAgIC8vIFNhdmUgIlhCWCIgKC1mUElDKQotCSAgICAgTU9WWCIgJSUiWEJYIiwgIl9vbGRieCJcblx0IgotICAgICAgICAgICAgIAotICAgICAgICAgICAgIC8vIHNpbXBsZSBib2IgZmlyc3QgOCBieXRlcwotICAgICAgICAgICAgIE1PVlgiCSJfcEJvYiIsICAgICAgICAlJSJYQlgiXG5cdCIKLSAgICAgICAgICAgICBNT1ZYIgkiX3NyY19waXRjaDIiLCAgJSUiWENYIlxuXHQiCi0KLSNpZmRlZiBVU0VfVkVSVElDQUxfRklMVEVSCi0gICAgICAgICAgICAgIm1vdnEJICAgICglJSJYQlgiKSwgICAgICAgICUlbW0wXG5cdCIKLSAgICAgICAgICAgICAibW92cQkgICAgKCUlIlhCWCIsICUlIlhDWCIpLCAlJW1tMVxuXHQiIC8vLCBxd29yZCBwdHJbIlhCWCIrIlhDWCJdCi0gICAgICAgICAgICAgIm1vdnEJICAgICUlbW0wLCAgICAgICAgICAlJW1tMlxuXHQiCi0gICAgICAgICAgICAgVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJCS8vIGhhbGZ3YXkgYmV0d2VlbgotICAgICAgICAgICAgIFZfUEFWR0IgKCIlJW1tMCIsICIlJW1tMiIsICIlJW1tMyIsIF9TaGlmdE1hc2spCQkvLyAxLzQgd2F5Ci0gICAgICAgICAgICAgVl9QQVZHQiAoIiUlbW0xIiwgIiUlbW0yIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJCS8vIDMvNCB3YXkKLSAgICAgICAgICAgICBNT1ZYIgkJIl9wRGVzdCIsICAgICAgICUlIlhESSJcblx0IgotICAgICAgICAgICAgIE1PVlgiCQkiX2RzdF9waXRjaHciLCAgJSUiWEFYIlxuXHQiCi0gICAgICAgICAgICAgVl9NT1ZOVFEJKCIoJSUiWERJIikiLCAiJSVtbTAiKQotICAgICAgICAgICAgIFZfTU9WTlRRCSgiKCUlIlhESSIsICUlIlhBWCIpIiwgIiUlbW0xIikgLy8gcXdvcmQgcHRyWyJYREkiKyJYQVgiXSwgbW0xCi0KLSAgICAgICAgICAgICAvLyBzaW1wbGUgYm9iIGxhc3QgOCBieXRlcwotICAgICAgICAgICAgIE1PVlgiCQkiX0xhc3Q4IiwgJSUiWERYIlxuXHQiCi0gICAgICAgICAgICAgTEVBWCIJCSglJSJYQlgiLCAlJSJYRFgiKSwgJSUiWFNJIlxuXHQiICAvLyBbIlhCWCIrIlhEWCJdCi0gICAgICAgICAgICAgIm1vdnEJICAgICglJSJYU0kiKSwgJSVtbTBcblx0IgotICAgICAgICAgICAgICJtb3ZxCSAgICAoJSUiWFNJIiwgJSUiWENYIiksICUlbW0xXG5cdCIgICAgLy8gcXdvcmQgcHRyWyJYU0kiKyJYQ1giXQotICAgICAgICAgICAgICJtb3ZxCSAgICAlJW1tMCwgJSVtbTJcblx0IgotICAgICAgICAgICAgIFZfUEFWR0IgKCIlJW1tMiIsICIlJW1tMSIsICIlJW1tMyIsIF9TaGlmdE1hc2spCQkvLyBoYWxmd2F5IGJldHdlZW4KLSAgICAgICAgICAgICBWX1BBVkdCICgiJSVtbTAiLCAiJSVtbTIiLCAiJSVtbTMiLCBfU2hpZnRNYXNrKQkJLy8gMS80IHdheQotICAgICAgICAgICAgIFZfUEFWR0IgKCIlJW1tMSIsICIlJW1tMiIsICIlJW1tMyIsIF9TaGlmdE1hc2spCQkvLyAzLzQgd2F5Ci0gICAgICAgICAgICAgQUREWCIJCSUlIlhEWCIsICUlIlhESSJcblx0IgkJCQkJCS8vIGxhc3QgOCBieXRlcyBvZiBkZXN0Ci0gICAgICAgICAgICAgVl9NT1ZOVFEJKCIlJSJYREkiIiwgIiUlbW0wIikKLSAgICAgICAgICAgICBWX01PVk5UUQkoIiglJSJYREkiLCAlJSJYQVgiKSIsICIlJW1tMSIpIC8vIHF3b3JkIHB0clsiWERJIisiWEFYIl0sIG1tMSkKLQotI2Vsc2UKLSAgICAgICAgICAgICAibW92cQkoJSUiWEJYIiksICUlbW0wXG5cdCIKLSAgICAgICAgICAgICAvLwkJcGF2Z2IJbW0wLCBxd29yZCBwdHJbIlhCWCIrIlhDWCJdCi0gICAgICAgICAgICAgVl9QQVZHQiAoIiUlbW0wIiwgIiglJSJYQlgiLCAlJSJYQ1giKSIsICIlJW1tMiIsIF9TaGlmdE1hc2spIC8vIHF3b3JkIHB0clsiWEJYIisiWENYIl0sIG1tMiwgU2hpZnRNYXNrKQotICAgICAgICAgICAgIE1PVlgiCQkiX3BEZXN0IiwgJSUiWERJIlxuXHQiCi0gICAgICAgICAgICAgVl9NT1ZOVFEJKCIoJSUiWERJIikiLCAiJSVtbTAiKQotCi0gICAgICAgICAgICAgLy8gc2ltcGxlIGJvYiBsYXN0IDggYnl0ZXMKLSAgICAgICAgICAgICBNT1ZYIgkJIl9MYXN0OCIsICUlIlhEWCJcblx0IgotICAgICAgICAgICAgIExFQVgiCQkoJSUiWEJYIiwgJSUiWERYIiksICUlIlhTSSJcblx0IiAvLyJYU0kiLCBbIlhCWCIrIlhEWCJdCi0gICAgICAgICAgICAgIm1vdnEJICAgICglJSJYU0kiKSwgJSVtbTBcblx0IgotICAgICAgICAgICAgIC8vCQlwYXZnYgltbTAsIHF3b3JkIHB0clsiWFNJIisiWENYIl0KLSAgICAgICAgICAgICBWX1BBVkdCCSgiJSVtbTAiLCAiKCUlIlhTSSIsICUlIlhDWCIpIiwgIiUlbW0yIiwgX1NoaWZ0TWFzaykgLy8gcXdvcmQgcHRyWyJYU0kiKyJYQ1giXSwgbW0yLCBTaGlmdE1hc2spCi0gICAgICAgICAgICAgVl9NT1ZOVFEJKCIoJSUiWERJIiwgJSUiWERYIikiLCAiJSVtbTAiKSAvLyBxd29yZCBwdHJbIlhESSIrIlhEWCJdLCBtbTApCi0jZW5kaWYKLSAgICAgICAgICAgICAvLyBub3cgbG9vcCBhbmQgZ2V0IHRoZSBtaWRkbGUgcXdvcmRzCi0gICAgICAgICAgICAgTU9WWCIJCSJfcFNyYyIsICUlIlhTSSJcblx0IgotICAgICAgICAgICAgIE1PVlgiCQkiX3BTcmNQIiwgJSUiWERJIlxuXHQiCi0gICAgICAgICAgICAgTU9WWCIJCSQ4LCAlJSJYRFgiXG5cdCIJCQkJLy8gY3VyciBvZmZzZXQgbG9uZ28gYWxsIGxpbmVzCi0KLSAgICAgICAgICAgICAiMTpcblx0IgkKLSAgICAgICAgICAgICBNT1ZYIgkJIl9wQm9iUCIsICUlIlhBWCJcblx0IgotICAgICAgICAgICAgIEFERFgiCQkkOCwgJSUiWERJIlxuXHQiCi0gICAgICAgICAgICAgQUREWCIJCSQ4LCAlJSJYU0kiXG5cdCIKLSAgICAgICAgICAgICBBRERYIgkJJDgsICUlIlhCWCJcblx0IgotICAgICAgICAgICAgIEFERFgiCQklJSJYRFgiLCAlJSJYQVgiXG5cdCIKLQotI2lmZGVmIFVTRV9TVFJBTkdFX0JPQgotI2luY2x1ZGUgIlN0cmFuZ2VCb2IuaW5jIgotI2Vsc2UKLSNpbmNsdWRlICJXaWVyZEJvYi5pbmMiCi0jZW5kaWYKLQotICAgICAgICAgICAgIC8vIEZvciBub24tU1NFMjoKLSAgICAgICAgICAgICAvLyB0aHJvdWdoIG91dCBtb3N0IG9mIHRoZSByZXN0IG9mIHRoaXMgbG9vcCB3ZSB3aWxsIG1haW50YWluCi0gICAgICAgICAgICAgLy8JbW00CQlvdXIgbWluIGJvYiB2YWx1ZQotICAgICAgICAgICAgIC8vCW1tNQkJYmVzdCB3ZWF2ZSBwaXhlbHMgc28gZmFyCi0gICAgICAgICAgICAgLy8gbW02CQlvdXIgbWF4IEJvYiB2YWx1ZSAKLSAgICAgICAgICAgICAvLwltbTcJCWJlc3Qgd2VpZ2h0ZWQgcGl4ZWwgcmF0aW5ncyBzbyBmYXIKLSAgICAgICAgICAgICAKLSAgICAgICAgICAgICAvLyBXZSB3aWxsIGtlZXAgYSBzbGlnaHQgYmlhcyB0byB1c2luZyB0aGUgd2VhdmUgcGl4ZWxzCi0gICAgICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbiwgYnkgcmF0aW5nIHRoZW0gYnkgdGhlIG1pbiBkaXN0YW5jZQotICAgICAgICAgICAgIC8vIGZyb20gdGhlIEJvYiB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBhdmcgZGlzdGFuY2UgZnJvbSB0aGF0IHZhbHVlLgotICAgICAgICAgICAgIC8vIG91ciBiZXN0IGFuZCBvbmx5IHJhdGluZyBzbyBmYXIKLSAgICAgICAgICAgICAicGNtcGVxYgklJW1tNywgJSVtbTdcblx0IgkJCS8vIGZmZmYsIHNheSB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyBnb29kIHlldAotCi0jZWxzZQotICAgICAgICBMYXN0OCA9IChyb3dzaXplIC0gNCk7Ci0KLQlmb3IgKHk9MTsgeSA8IEZsZEhlaWdodC0xOyB5KyspCi0JewotCSAgI2lmZGVmIFVTRV9TVFJBTkdFX0JPQgotCSAgbG9uZyBEaWZmVGhyZXMgPSAweDBmOwotCSAgI2VuZGlmCi0KLQkgICNpZm5kZWYgU0tJUF9TRUFSQ0gKLQkgIGxvbmcgd2VhdmVbMl0sIE1heFZhbHNbMl0sIE1pblZhbHNbMl07Ci0JICAjZW5kaWYKLQotCSAgbG9uZyBkaWZmWzJdLCBiZXN0WzJdLCBhdmdbMl0sIGRpZmYyWzJdLCBvdXRbMl0sIHg7Ci0KLSNpZmRlZiBVU0VfVkVSVElDQUxfRklMVEVSCi0gICAgICAgICAgICAgcERlc3RbMF0gPSAoMyAqIHBCb2JbMF0gKyBwQm9iW3NyY19waXRjaDJdKSAvIDQ7Ci0gICAgICAgICAgICAgcERlc3RbMV0gPSAoMyAqIHBCb2JbMV0gKyBwQm9iW3NyY19waXRjaDIgKyAxXSkgLyA0OwotICAgICAgICAgICAgIHBEZXN0WzJdID0gKDMgKiBwQm9iWzJdICsgcEJvYltzcmNfcGl0Y2gyICsgMl0pIC8gNDsKLSAgICAgICAgICAgICBwRGVzdFszXSA9ICgzICogcEJvYlszXSArIHBCb2Jbc3JjX3BpdGNoMiArIDNdKSAvIDQ7Ci0JICAgICBwRGVzdFtkc3RfcGl0Y2h3XSA9IChwQm9iWzBdICsgMyAqIHBCb2Jbc3JjX3BpdGNoMl0pIC8gNDsKLQkgICAgIHBEZXN0W2RzdF9waXRjaHcgKyAxXSA9IChwQm9iWzFdICsgMyAqIHBCb2Jbc3JjX3BpdGNoMiArIDFdKSAvIDQ7Ci0JICAgICBwRGVzdFtkc3RfcGl0Y2h3ICsgMl0gPSAocEJvYlsyXSArIDMgKiBwQm9iW3NyY19waXRjaDIgKyAyXSkgLyA0OwotCSAgICAgcERlc3RbZHN0X3BpdGNodyArIDNdID0gKHBCb2JbM10gKyAzICogcEJvYltzcmNfcGl0Y2gyICsgM10pIC8gNDsKLQotICAgICAgICAgICAgIC8vIHNpbXBsZSBib2IgbGFzdCBieXRlCi0JICAgICBwRGVzdFtMYXN0OF0gPSAoMyAqIHBCb2JbTGFzdDhdICsgcEJvYltMYXN0OCArIHNyY19waXRjaDJdKSAvIDQ7Ci0JICAgICBwRGVzdFtMYXN0OCArIDFdID0gKDMgKiBwQm9iW0xhc3Q4ICsgMV0gKyBwQm9iW0xhc3Q4ICsgc3JjX3BpdGNoMiArIDFdKSAvIDQ7Ci0JICAgICBwRGVzdFtMYXN0OCArIDJdID0gKDMgKiBwQm9iW0xhc3Q4ICsgMl0gKyBwQm9iW0xhc3Q4ICsgc3JjX3BpdGNoMiArIDJdKSAvIDQ7Ci0JICAgICBwRGVzdFtMYXN0OCArIDNdID0gKDMgKiBwQm9iW0xhc3Q4ICsgM10gKyBwQm9iW0xhc3Q4ICsgc3JjX3BpdGNoMiArIDNdKSAvIDQ7Ci0JICAgICBwRGVzdFtMYXN0OCArIHNyY19waXRjaDJdID0gKHBCb2JbTGFzdDhdICsgMyAqIHBCb2JbTGFzdDggKyBzcmNfcGl0Y2gyXSkgLyA0OwotCSAgICAgcERlc3RbTGFzdDggKyBzcmNfcGl0Y2gyICsgMV0gPSAocEJvYltMYXN0OCArIDFdICsgMyAqIHBCb2JbTGFzdDggKyBzcmNfcGl0Y2gyICsgMV0pIC8gNDsKLQkgICAgIHBEZXN0W0xhc3Q4ICsgc3JjX3BpdGNoMiArIDJdID0gKHBCb2JbTGFzdDggKyAyXSArIDMgKiBwQm9iW0xhc3Q4ICsgc3JjX3BpdGNoMiArIDJdKSAvIDQ7Ci0JICAgICBwRGVzdFtMYXN0OCArIHNyY19waXRjaDIgKyAzXSA9IChwQm9iW0xhc3Q4ICsgM10gKyAzICogcEJvYltMYXN0OCArIHNyY19waXRjaDIgKyAzXSkgLyA0OwotI2Vsc2UKLSAgICAgICAgICAgICBwRGVzdFswXSA9IChwQm9iWzBdICsgcEJvYltzcmNfcGl0Y2gyICsgMV0pIC8gMjsKLSAgICAgICAgICAgICBwRGVzdFsxXSA9IChwQm9iWzFdICsgcEJvYltzcmNfcGl0Y2gyICsgMV0pIC8gMjsKLSAgICAgICAgICAgICBwRGVzdFsyXSA9IChwQm9iWzJdICsgcEJvYltzcmNfcGl0Y2gyICsgMl0pIC8gMjsKLSAgICAgICAgICAgICBwRGVzdFszXSA9IChwQm9iWzNdICsgcEJvYltzcmNfcGl0Y2gyICsgM10pIC8gMjsKLQotICAgICAgICAgICAgIC8vIHNpbXBsZSBib2IgbGFzdCBieXRlCi0JICAgICBwRGVzdFtMYXN0OF0gPSAocEJvYltMYXN0OF0gKyBwQm9iW0xhc3Q4ICsgc3JjX3BpdGNoMl0pIC8gMjsKLQkgICAgIHBEZXN0W0xhc3Q4ICsgMV0gPSAocEJvYltMYXN0OCArIDFdICsgcEJvYltMYXN0OCArIHNyY19waXRjaDIgKyAxXSkgLyAyOwotCSAgICAgcERlc3RbTGFzdDggKyAyXSA9IChwQm9iW0xhc3Q4ICsgMl0gKyBwQm9iW0xhc3Q4ICsgc3JjX3BpdGNoMiArIDJdKSAvIDI7Ci0JICAgICBwRGVzdFtMYXN0OCArIDNdID0gKHBCb2JbTGFzdDggKyAzXSArIHBCb2JbTGFzdDggKyBzcmNfcGl0Y2gyICsgM10pIC8gMjsKLSNlbmRpZgotCi0gICAgICAgICAgICAgcEJvYiArPSA0OwotCSAgICAgcEJvYlAgKz0gNDsKLQkgICAgIHBTcmMgKz0gNDsKLQkgICAgIHBTcmNQICs9IDQ7Ci0KLSAgICAgICAgICAgICBmb3IgKHg9NDsgeCA8IExhc3Q4OyB4ICs9IDIpIHsKLQotI2lmZGVmIFVTRV9TVFJBTkdFX0JPQgotI2luY2x1ZGUgIlN0cmFuZ2VCb2IuaW5jIgotI2Vsc2UKLSNpbmNsdWRlICJXaWVyZEJvYi5pbmMiCi0jZW5kaWYKLQotICAgICAgICAgICAgIC8vIFdlIHdpbGwga2VlcCBhIHNsaWdodCBiaWFzIHRvIHVzaW5nIHRoZSB3ZWF2ZSBwaXhlbHMKLSAgICAgICAgICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGxvY2F0aW9uLCBieSByYXRpbmcgdGhlbSBieSB0aGUgbWluIGRpc3RhbmNlCi0gICAgICAgICAgICAgLy8gZnJvbSB0aGUgQm9iIHZhbHVlIGluc3RlYWQgb2YgdGhlIGF2ZyBkaXN0YW5jZSBmcm9tIHRoYXQgdmFsdWUuCi0gICAgICAgICAgICAgLy8gb3VyIGJlc3QgYW5kIG9ubHkgcmF0aW5nIHNvIGZhcgotICAgICAgICAgICAgIGRpZmZbMF0gPSBkaWZmWzFdID0gMjU1OwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BWQS5pbmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFZBLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UzZDE5Yi4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFZBLmluYworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLy8gLSotIGMrKyAtKi0KLQotLy8gU2VhcmNoZXMgdGhlIGNlbnRlciB2ZXJ0aWNhbCBsaW5lIGFib3ZlIGNlbnRlciBhbmQgYmVsb3csIGluIGJvdGggdGhlIG9sZCAKLS8vIGFuZCBuZXcgZmllbGRzLCBidXQgdGFrZXMgYXZlcmFnZXMuICBUaGVzZSBhcmUgZXZlbiBwaXhlbCBhZGRyZXNzZXMuCi0gICAgICAgIE1FUkdFNFBJWGF2ZygiKCUlIlhESSIsICUlIlhDWCIsIDIpIiwgIiglJSJYU0kiKSIpCS8vIGRvd24sIHVwCi0gICAgICAgIE1FUkdFNFBJWGF2ZygiKCUlIlhESSIpIiwgIiglJSJYU0kiLCAlJSJYQ1giLCAyKSIpCS8vIHVwLCBkb3duCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFZBSC5pbmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU2VhcmNoTG9vcFZBSC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTU1YmMuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1NlYXJjaExvb3BWQUguaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vLyAtKi0gYysrIC0qLQotCi0vLyBTZWFyY2hlcyB0aGUgY2VudGVyIHZlcnRpY2FsIGxpbmUgYWJvdmUgY2VudGVyIGFuZCBiZWxvdywgaW4gYm90aCB0aGUgb2xkIAotLy8gYW5kIG5ldyBmaWVsZHMsIGJ1dCB0YWtlcyBhdmVyYWdlcy4gIFRoZXNlIGFyZSBldmVuIHBpeGVsIGFkZHJlc3Nlcy4KLSAgICAgICAgTUVSR0U0UElYYXZnSCgiKCUlIlhESSIsICUlIlhDWCIsIDIpIiwgIiglJSJYREkiLCAlJSJYQ1giKSIsICIoJSUiWFNJIiwgJSUiWENYIikiLCAiKCUlIlhTSSIpIikJLy8gZG93biwgdXAKLSAgICAgICAgTUVSR0U0UElYYXZnSCgiKCUlIlhESSIpIiwgIiglJSJYREkiLCAlJSJYQ1giKSIsICIoJSUiWFNJIiwgJSUiWENYIikiLCAiKCUlIlhTSSIsICUlIlhDWCIsIDIpIikJLy8gdXAsIGRvd24KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TdHJhbmdlQm9iLmluYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9TdHJhbmdlQm9iLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDViNGM4Ni4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvU3RyYW5nZUJvYi5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotLy8gLSotIGMrKyAtKi0KLQkJCi0JCS8vIEZpcnN0LCBnZXQgYW5kIHNhdmUgb3VyIHBvc3NpYmxlIEJvYiB2YWx1ZXMKLQkJLy8gQXNzdW1lIG91ciBwaXhlbHMgYXJlIGxheWVkIG91dCBhcyBmb2xsb3dzIHdpdGggeCB0aGUgY2FsYydkIGJvYiB2YWx1ZQotCQkvLyBhbmQgdGhlIG90aGVyIHBpeGVscyBhcmUgZnJvbSB0aGUgY3VycmVudCBmaWVsZAotCQkvLyAgCi0JCS8vCSAgaiBhIGIgYyBrCQljdXJyZW50IGZpZWxkCi0JCS8vICAgICAgICAgICAgeAkJCWNhbGN1bGF0ZWQgbGluZQotCQkvLyAgICAgICAgbSBkIGUgZiBuCQljdXJyZW50IGZpZWxkCi0JCS8vCi0JCS8vIHdlIGNhbGMgdGhlIGJvYiB2YWx1ZSBsdW1hIHZhbHVlIGFzOgotICAgICAgICAvLyBpZiB8aiAtIG58IDwgVGhyZXMgJiYgfGEgLSBtfCA+IFRocmVzIAotICAgICAgICAvLyAgYXZnKGosbikKLSAgICAgICAgLy8gZW5kIGlmCi0gICAgICAgIC8vIGlmIHxrIC0gbXwgPCBUaHJlcyAmJiB8YyAtIG58ID4gVGhyZXMgCi0gICAgICAgIC8vICBhdmcoayxtKQotICAgICAgICAvLyBlbmQgaWYKLSAgICAgICAgLy8gaWYgfGMgLSBkfCA8IFRocmVzICYmIHxiIC0gZnwgPiBUaHJlcyAKLSAgICAgICAgLy8gIGF2ZyhjLGQpCi0gICAgICAgIC8vIGVuZCBpZgotICAgICAgICAvLyBpZiB8YSAtIGZ8IDwgVGhyZXMgJiYgfGIgLSBkfCA+IFRocmVzIAotICAgICAgICAvLyAgYXZnKGEsZikKLSAgICAgICAgLy8gZW5kIGlmCi0gICAgICAgIC8vIGlmIHxiIC0gZXwgPCBUaHJlcwotICAgICAgICAvLyAgYXZnKGIsZSkKLSAgICAgICAgLy8gZW5kIGlmCi0gICAgICAgIC8vIHBpY2t1cCBhbnkgdGhpbmcgbm90IHlldCBzZXQgd2l0aCBhdmcoYixlKQotCi0jaWZuZGVmIElTX0MKLQotCQkvLyBqLCBuCi0gICAgICAgICJweG9yICUlbW01LCAlJW1tNVxuXHQiCi0gICAgICAgICJweG9yICUlbW02LCAlJW1tNlxuXHQiCi0gICAgICAgICJweG9yICUlbW03LCAlJW1tN1xuXHQiCi0KLQkJIm1vdnEgICAgLTIoJSUiWEJYIiksICUlbW0wXG5cdCIJCS8vIHZhbHVlIGEgZnJvbSB0b3AgbGVmdAkJCi0JCSJtb3ZxICAgIC00KCUlIlhCWCIsICUlIlhDWCIpLCAlJW1tMVxuXHQiCS8vIHZhbHVlIG0gZnJvbSBib3R0b20gcmlnaHQJCQkKLSAgICAgICAgCi0JCSJtb3ZxCSUlbW0wLCAlJW1tM1xuXHQiCi0JCSJwc3VidXNiCSUlbW0xLCAlJW1tM1xuXHQiCi0JCSJwc3VidXNiICUlbW0wLCAlJW1tMVxuXHQiCi0JCSJwb3IJCSUlbW0xLCAlJW1tM1xuXHQiCQkJCQkvLyBhYnMoYSxtKQotCi0JCSJwc3VidXNiICJfRGlmZlRocmVzIiwgJSVtbTNcblx0IgkJLy8gbm9uemVybyB3aGVyZSBhYnMoYSxtKSA+IFRocmVzIGVsc2UgMAotCQkicHhvcgklJW1tNCwgJSVtbTRcblx0IgotCQkicGNtcGVxYiAlJW1tNCwgJSVtbTNcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBhYnMoYSxtKSA8IFRocmVzLCBlbHNlIDAwCQotCQkicGNtcGVxYgklJW1tMywgJSVtbTRcblx0IgkJCS8vIGhlcmUgZmYgd2hlcmUgYWJzKGEsbSkgPiBUaHJlcywgZWxzZSAwMAotCi0KLQkJIm1vdnEgICAgLTQoJSUiWEJYIiksICUlbW0wXG5cdCIJCS8vIHZhbHVlIGoKLQkJIm1vdnEgICAgNCglJSJYQlgiLCAlJSJYQ1giKSwgJSVtbTFcblx0IgkvLyB2YWx1ZSBuCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCQkJCQkKLQkJVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJLy8gYXZnKGosbikKLSAgICAgICAgIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0wXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTMsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0wXG5cdCIJCQkJCS8vIGFicyhqLG4pCi0KLSAgICAgICAgIm1vdnEgICAgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBzdWJ1c2IgIl9EaWZmVGhyZXMiLCAlJW1tMVxuXHQiCQkvLyBub256ZXJvIHdoZXJlIGFicyhqLG4pID4gVGhyZXMgZWxzZSAwCi0JCSJweG9yCSUlbW0zLCAlJW1tM1xuXHQiCi0JCSJwY21wZXFiICUlbW0zLCAlJW1tMVxuXHQiCQkJLy8gbm93IGZmIHdoZXJlIGFicyhqLG4pIDwgVGhyZXMsIGVsc2UgMDAJCi0KLSAgICAgICAgInBhbmQgICAgJSVtbTQsICUlbW0xXG5cdCIKLSAgICAgICAgInBhbmQgICAgJSVtbTEsICUlbW0yXG5cdCIKLSAgICAgICAgInBhbmQgICAgJSVtbTEsICUlbW0wXG5cdCIKLQotICAgICAgICAibW92cSAgICAlJW1tMSwgJSVtbTNcblx0IgotICAgICAgICAicHhvciAgICAlJW1tNSwgJSVtbTNcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMywgJSVtbTZcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMywgJSVtbTdcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMywgJSVtbTVcblx0IgotCi0gICAgICAgICJwb3IgICAgICUlbW0xLCAlJW1tNVxuXHQiCi0gICAgICAgICJwb3IgICAgICUlbW0yLCAlJW1tNlxuXHQiCi0gICAgICAgICJwb3IgICAgICUlbW0wLCAlJW1tN1xuXHQiCi0gICAgICAgIAotICAgICAgICAvLyBrICYgbQotCQkibW92cSAgICAyKCUlIlhCWCIpLCAlJW1tMFxuXHQiCQkvLyB2YWx1ZSBjIGZyb20gdG9wIGxlZnQJCQotCQkibW92cSAgICA0KCUlIlhCWCIsICUlIlhDWCIpLCAlJW1tMVxuXHQiCS8vIHZhbHVlIG4gZnJvbSBib3R0b20gcmlnaHQJCQkKLQotCQkibW92cQklJW1tMCwgJSVtbTNcblx0IgotCQkicHN1YnVzYgklJW1tMSwgJSVtbTNcblx0IgotCQkicHN1YnVzYiAlJW1tMCwgJSVtbTFcblx0IgotCQkicG9yCQklJW1tMSwgJSVtbTNcblx0IgkJCQkJLy8gYWJzKGMsbikKLQotCQkicHN1YnVzYiAiX0RpZmZUaHJlcyIsICUlbW0zXG5cdCIJCS8vIG5vbnplcm8gd2hlcmUgYWJzKGMsbikgPiBUaHJlcyBlbHNlIDAKLQkJInB4b3IJJSVtbTQsICUlbW00XG5cdCIKLQkJInBjbXBlcWIgJSVtbTQsICUlbW0zXG5cdCIJCQkvLyBub3cgZmYgd2hlcmUgYWJzKGMsbikgPCBUaHJlcywgZWxzZSAwMAkKLQkJInBjbXBlcWIJJSVtbTMsICUlbW00XG5cdCIJCQkvLyBoZXJlIGZmIHdoZXJlIGFicyhjLG4pID4gVGhyZXMsIGVsc2UgMDAKLQotCi0JCSJtb3ZxICAgIDQoJSUiWEJYIiksICUlbW0wXG5cdCIJCS8vIHZhbHVlIGsKLQkJIm1vdnEgICAgLTQoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgbQotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgkJCQkJCi0JCVZfUEFWR0IgKCIlJW1tMiIsICIlJW1tMSIsICIlJW1tMyIsIF9TaGlmdE1hc2spCS8vIGF2ZyhrLG0pCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tM1xuXHQiCi0JCSJwc3VidXNiCSUlbW0xLCAlJW1tMFxuXHQiCi0JCSJwc3VidXNiICUlbW0zLCAlJW1tMVxuXHQiCi0JCSJwb3IJCSUlbW0xLCAlJW1tMFxuXHQiCQkJCQkvLyBhYnMoayxtKQotCi0gICAgICAgICJtb3ZxICAgICUlbW0wLCAlJW1tMVxuXHQiCi0JCSJwc3VidXNiICJfRGlmZlRocmVzIiwgJSVtbTFcblx0IgkJLy8gbm9uemVybyB3aGVyZSBhYnMoayxtKSA+IFRocmVzIGVsc2UgMAotCQkicHhvcgklJW1tMywgJSVtbTNcblx0IgotCQkicGNtcGVxYiAlJW1tMywgJSVtbTFcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBhYnMoayxtKSA8IFRocmVzLCBlbHNlIDAwCQotCi0gICAgICAgICJwYW5kICAgICUlbW00LCAlJW1tMVxuXHQiCi0gICAgICAgIAotICAgICAgICAicGFuZCAgICAlJW1tMSwgJSVtbTJcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMSwgJSVtbTBcblx0IgotCi0gICAgICAgICJtb3ZxICAgICUlbW0xLCAlJW1tM1xuXHQiCi0gICAgICAgICJweG9yICAgICUlbW01LCAlJW1tM1xuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0zLCAlJW1tNlxuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0zLCAlJW1tN1xuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0zLCAlJW1tNVxuXHQiCi0KLSAgICAgICAgInBvciAgICAgJSVtbTEsICUlbW01XG5cdCIKLSAgICAgICAgInBvciAgICAgJSVtbTIsICUlbW02XG5cdCIKLSAgICAgICAgInBvciAgICAgJSVtbTAsICUlbW03XG5cdCIKLQotCi0gICAgICAgIC8vIGMgJiBkCi0JCSJtb3ZxICAgICglJSJYQlgiKSwgJSVtbTBcblx0IgkJLy8gdmFsdWUgYiBmcm9tIHRvcCBsZWZ0CQkKLQkJIm1vdnEgICAgMiglJSJYQlgiLCAlJSJYQ1giKSwgJSVtbTFcblx0IgkvLyB2YWx1ZSBmIGZyb20gYm90dG9tIHJpZ2h0CQkJCi0KLQkJIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0zXG5cdCIJCQkJCS8vIGFicyhiLGYpCi0KLQkJInBzdWJ1c2IgIl9EaWZmVGhyZXMiLCAlJW1tM1xuXHQiCQkvLyBub256ZXJvIHdoZXJlIGFicyhiLGYpID4gVGhyZXMgZWxzZSAwCi0JCSJweG9yCSUlbW00LCAlJW1tNFxuXHQiCi0JCSJwY21wZXFiICUlbW00LCAlJW1tM1xuXHQiCQkJLy8gbm93IGZmIHdoZXJlIGFicyhiLGYpIDwgVGhyZXMsIGVsc2UgMDAJCi0JCSJwY21wZXFiCSUlbW0zLCAlJW1tNFxuXHQiCQkJLy8gaGVyZSBmZiB3aGVyZSBhYnMoYixmKSA+IFRocmVzLCBlbHNlIDAwCi0KLQkJIm1vdnEgICAgMiglJSJYQlgiKSwgJSVtbTBcblx0IgkJLy8gdmFsdWUgYwotCQkibW92cSAgICAtMiglJSJYQlgiLCAlJSJYQ1giKSwgJSVtbTFcblx0IgkvLyB2YWx1ZSBkCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCQkJCQkKLQkJVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJLy8gYXZnKGMsZCkKLSAgICAgICAgIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0wXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTMsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0wXG5cdCIJCQkJCS8vIGFicyhjLGQpCi0KLSAgICAgICAgIm1vdnEgICAgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBzdWJ1c2IgIl9EaWZmVGhyZXMiLCAlJW1tMVxuXHQiCQkvLyBub256ZXJvIHdoZXJlIGFicyhjLGQpID4gVGhyZXMgZWxzZSAwCi0JCSJweG9yCSUlbW0zLCAlJW1tM1xuXHQiCi0gICAgICAgICJwY21wZXFiICUlbW0zLCAlJW1tMVxuXHQiCQkJLy8gbm93IGZmIHdoZXJlIGFicyhjLGQpIDwgVGhyZXMsIGVsc2UgMDAJCi0KLSAgICAgICAgInBhbmQgICAgJSVtbTQsICUlbW0xXG5cdCIKLQotICAgICAgICAicGFuZCAgICAlJW1tMSwgJSVtbTJcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMSwgJSVtbTBcblx0IgotCi0gICAgICAgICJtb3ZxICAgICUlbW0xLCAlJW1tM1xuXHQiCi0gICAgICAgICJweG9yICAgICUlbW01LCAlJW1tM1xuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0zLCAlJW1tNlxuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0zLCAlJW1tN1xuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0zLCAlJW1tNVxuXHQiCi0KLSAgICAgICAgInBvciAgICAgJSVtbTEsICUlbW01XG5cdCIKLSAgICAgICAgInBvciAgICAgJSVtbTIsICUlbW02XG5cdCIKLSAgICAgICAgInBvciAgICAgJSVtbTAsICUlbW03XG5cdCIKLQotICAgICAgICAvLyBhICYgZgotCQkibW92cSAgICAoJSUiWEJYIiksICUlbW0wXG5cdCIJCS8vIHZhbHVlIGIgZnJvbSB0b3AgbGVmdAkJCi0JCSJtb3ZxICAgIC0yKCUlIlhCWCIsICUlIlhDWCIpLCAlJW1tMVxuXHQiCS8vIHZhbHVlIGQgZnJvbSBib3R0b20gcmlnaHQJCQkKLQotCQkibW92cQklJW1tMCwgJSVtbTNcblx0IgotCQkicHN1YnVzYgklJW1tMSwgJSVtbTNcblx0IgotCQkicHN1YnVzYiAlJW1tMCwgJSVtbTFcblx0IgotCQkicG9yCQklJW1tMSwgJSVtbTNcblx0IgkJCQkJLy8gYWJzKGIsZCkKLQotCQkicHN1YnVzYiAiX0RpZmZUaHJlcyIsICUlbW0zXG5cdCIJLy8gbm9uemVybyB3aGVyZSBhYnMoYixkKSA+IFRocmVzIGVsc2UgMAotCQkicHhvcgklJW1tNCwgJSVtbTRcblx0IgotCQkicGNtcGVxYiAlJW1tNCwgJSVtbTNcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBhYnMoYixkKSA8IFRocmVzLCBlbHNlIDAwCQotCQkicGNtcGVxYgklJW1tMywgJSVtbTRcblx0IgkJCS8vIGhlcmUgZmYgd2hlcmUgYWJzKGIsZCkgPiBUaHJlcywgZWxzZSAwMAotCi0JCSJtb3ZxICAgIC0yKCUlIlhCWCIpLCAlJW1tMFxuXHQiCQkvLyB2YWx1ZSBhCi0JCSJtb3ZxICAgIDIoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgZgotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgkJCQkJCi0JCVZfUEFWR0IgKCIlJW1tMiIsICIlJW1tMSIsICIlJW1tMyIsIF9TaGlmdE1hc2spCS8vIGF2ZyhhLGYpCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tM1xuXHQiCi0gICAgICAgICJwc3VidXNiCSUlbW0xLCAlJW1tMFxuXHQiCi0JCSJwc3VidXNiICUlbW0zLCAlJW1tMVxuXHQiCi0JCSJwb3IJCSUlbW0xLCAlJW1tMFxuXHQiCQkJCQkvLyBhYnMoYSxmKQotCi0gICAgICAgICJtb3ZxICAgICUlbW0wLCAlJW1tMVxuXHQiCi0JCSJwc3VidXNiICJfRGlmZlRocmVzIiwgJSVtbTFcblx0IgkJLy8gbm9uemVybyB3aGVyZSBhYnMoYSxmKSA+IFRocmVzIGVsc2UgMAotCQkicHhvcgklJW1tMywgJSVtbTNcblx0IgotCQkicGNtcGVxYiAlJW1tMywgJSVtbTFcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBhYnMoYSxmKSA8IFRocmVzLCBlbHNlIDAwCQotCi0gICAgICAgICJwYW5kICAgICUlbW00LCAlJW1tMVxuXHQiCi0KLSAgICAgICAgInBhbmQgICAgJSVtbTEsICUlbW0yXG5cdCIKLSAgICAgICAgInBhbmQgICAgJSVtbTEsICUlbW0wXG5cdCIKLSAgICAgICAgICAgIAotICAgICAgICAibW92cSAgICAlJW1tMSwgJSVtbTNcblx0IgotICAgICAgICAicHhvciAgICAlJW1tNSwgJSVtbTNcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMywgJSVtbTZcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMywgJSVtbTdcblx0IgotICAgICAgICAicGFuZCAgICAlJW1tMywgJSVtbTVcblx0IgotCi0gICAgICAgICJwb3IgICAgICUlbW0xLCAlJW1tNVxuXHQiCi0gICAgICAgICJwb3IgICAgICUlbW0yLCAlJW1tNlxuXHQiCi0gICAgICAgICJwb3IgICAgICUlbW0wLCAlJW1tN1xuXHQiCi0gICAgICAgICAgIAotIAkJInBhbmQJIl9ZTWFzayIsICUlbW01XG5cdCIJCS8vIG1hc2sgb3V0IGNocm9tYSBmcm9tIGhlcmUKLSAJCSJwYW5kCSJfWU1hc2siLCAlJW1tNlxuXHQiCQkJLy8gbWFzayBvdXQgY2hyb21hIGZyb20gaGVyZQotIAkJInBhbmQJIl9ZTWFzayIsICUlbW03XG5cdCIJCQkvLyBtYXNrIG91dCBjaHJvbWEgZnJvbSBoZXJlCi0KLQkJLy8gYixlCi0JCSJtb3ZxICAgICglJSJYQlgiKSwgJSVtbTBcblx0IgkJLy8gdmFsdWUgYiBmcm9tIHRvcCAJCQotCQkibW92cSAgICAoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgZSBmcm9tIGJvdHRvbSAKLQkJIm1vdnEJJSVtbTAsICUlbW0yXG5cdCIJCQkJCQotCQlWX1BBVkdCICgiJSVtbTIiLCAiJSVtbTEiLCAiJSVtbTMiLCBfU2hpZnRNYXNrKQkvLyBhdmcoYixlKQotICAgICAgICAibW92cQklJW1tMCwgJSVtbTNcblx0IgotICAgICAgICAicHN1YnVzYgklJW1tMSwgJSVtbTBcblx0IgotCQkicHN1YnVzYiAlJW1tMywgJSVtbTFcblx0IgotCQkicG9yCQklJW1tMSwgJSVtbTBcblx0IgkJCQkJLy8gYWJzKGIsZSkKLQotICAgICAgICAibW92cSAgICAlJW1tMCwgJSVtbTFcblx0IgotCQkicHN1YnVzYiAiX0RpZmZUaHJlcyIsICUlbW0xXG5cdCIJCS8vIG5vbnplcm8gd2hlcmUgYWJzKGIsZSkgPiBUaHJlcyBlbHNlIDAKLQkJInB4b3IJJSVtbTMsICUlbW0zXG5cdCIKLQkJInBjbXBlcWIgJSVtbTMsICUlbW0xXG5cdCIJCS8vIG5vdyBmZiB3aGVyZSBhYnMoYixlKSA8IFRocmVzLCBlbHNlIDAwCQotCi0gICAgICAgICJwYW5kICAgICUlbW0xLCAlJW1tMlxuXHQiCi0gICAgICAgICJwYW5kICAgICUlbW0xLCAlJW1tMFxuXHQiCi0KLSAgICAgICAgIm1vdnEgICAgJSVtbTEsICUlbW0zXG5cdCIKLSAgICAgICAgInB4b3IgICAgJSVtbTUsICUlbW0zXG5cdCIKLSAgICAgICAgInBhbmQgICAgJSVtbTMsICUlbW02XG5cdCIKLSAgICAgICAgInBhbmQgICAgJSVtbTMsICUlbW03XG5cdCIKLSAgICAgICAgInBhbmQgICAgJSVtbTMsICUlbW01XG5cdCIKLQotICAgICAgICAicG9yICAgICAlJW1tMSwgJSVtbTVcblx0IgotICAgICAgICAicG9yICAgICAlJW1tMiwgJSVtbTZcblx0IgotICAgICAgICAicG9yICAgICAlJW1tMCwgJSVtbTdcblx0IgotCi0JCS8vIGJvYiBpbiBhbnkgbGVmdG92ZXJzCi0JCSJtb3ZxICAgICglJSJYQlgiKSwgJSVtbTBcblx0IgkJLy8gdmFsdWUgYiBmcm9tIHRvcCAJCQotCQkibW92cSAgICAoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgZSBmcm9tIGJvdHRvbSAKLQotCi0vLyBXZSB3aWxsIGFsc28gY2FsYyBoZXJlIHRoZSBtYXgvbWluIHZhbHVlcyB0byBsYXRlciBsaW1pdCBjb21iCi0vLyBzbyB0aGUgbWF4IGV4Y3Vyc2lvbiB3aWxsIG5vdCBleGNlZWQgdGhlIE1heF9Db21iIGNvbnN0YW50Ci0KLSNpZmRlZiBTS0lQX1NFQVJDSAkJCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0vLwkJcG1pbnViCSUlbW0yLCAlJW1tMQotCQlWX1BNSU5VQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW00IikKLQotLy8JCXBtYXh1YgklJW1tNiwgJSVtbTIJCQkvLyBjbGlwIG91ciBjdXJyZW50IHJlc3VsdHMgc28gZmFyIHRvIGJlIGFib3ZlIHRoaXMKLQkJVl9QTUFYVUIgKCIlJW1tNiIsICIlJW1tMiIpCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0JCVZfUE1BWFVCICgiJSVtbTIiLCAiJSVtbTEiKQotLy8JCXBtaW51YgklJW1tNiwgJSVtbTIJCQkvLyBjbGlwIG91ciBjdXJyZW50IHJlc3VsdHMgc28gZmFyIHRvIGJlIGJlbG93IHRoaXMKLQkJVl9QTUlOVUIgKCIlJW1tNiIsICIlJW1tMiIsICIlJW1tNCIpCi0KLSNlbHNlCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0JCSJtb3ZxCSglJSJYQVgiKSwgJSVtbTRcblx0IgotCQkicHN1YnVzYiAlJW1tNCwgJSVtbTJcblx0IgotCQkicHN1YnVzYiAlJW1tMCwgJSVtbTRcblx0IgotCQkicG9yCQklJW1tMiwgJSVtbTRcblx0IgkJCS8vIGFicyBkaWZmCi0JCQotCQkibW92cQklJW1tMSwgJSVtbTJcblx0IgotCQkibW92cQkoJSUiWEFYIiwgJSUiWENYIiksICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTMsICUlbW0yXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTEsICUlbW0zXG5cdCIKLQkJInBvcgkJJSVtbTIsICUlbW0zXG5cdCIJCQkvLyBhYnMgZGlmZgotLy8JCXBtYXh1YiAgJSVtbTMsICUlbW00CQkJLy8gdG9wIG9yIGJvdHRvbSBwaXhlbCBtb3ZlZCBtb3N0Ci0JCVZfUE1BWFVCICgiJSVtbTMiLCAiJSVtbTQiKQkJCS8vIHRvcCBvciBib3R0b20gcGl4ZWwgbW92ZWQgbW9zdAotICAgICAgICAicHN1YnVzYiAiX0RpZmZUaHJlcyIsICUlbW0zXG5cdCIJCS8vIG1vdmVkIG1vcmUgdGhhbiBhbGxvd2VkPyBvciBnb2VzIHRvIDA/Ci0JCSJweG9yCSUlbW00LCAlJW1tNFxuXHQiCi0JCSJwY21wZXFiICUlbW00LCAlJW1tM1xuXHQiCQkJLy8gbm93IGZmIHdoZXJlIGxvdyBtb3Rpb24sIGVsc2UgaGlnaCBtb3Rpb24KLQkJCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0vLwkJcG1pbnViCSUlbW0yLCAlJW1tMQotCQlWX1BNSU5VQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW00IikKLQotLy8JCXBtYXh1YgklJW1tNiwgJSVtbTIJCQkvLyBjbGlwIG91ciBjdXJyZW50IHJlc3VsdHMgc28gZmFyIHRvIGJlIGFib3ZlIHRoaXMKLQkJVl9QTUFYVUIgKCIlJW1tNiIsICIlJW1tMiIpCi0KLSAgICAgICAgInBzdWJ1c2IgJSVtbTMsICUlbW0yXG5cdCIJCQkvLyBtYXliZSBkZWNyZWFzZSBpdCB0byAwMDAwLi4gaWYgbm8gc3Vycm91bmQgbW90aW9uCi0JCSJtb3ZxCSUlbW0yLCAiX01pbl9WYWxzIlxuXHQiCi0KLQkJIm1vdnEJJSVtbTAsICUlbW0yXG5cdCIKLQkJVl9QTUFYVUIgKCIlJW1tMiIsICIlJW1tMSIpCi0vLwkJcG1pbnViCSUlbW02LCAlJW1tMgkJCS8vIGNsaXAgb3VyIGN1cnJlbnQgcmVzdWx0cyBzbyBmYXIgdG8gYmUgYmVsb3cgdGhpcwotCQlWX1BNSU5VQiAoIiUlbW02IiwgIiUlbW0yIiwgIiUlbW00IikKLSAgICAgICAgInBhZGR1c2IgJSVtbTMsICUlbW0yXG5cdCIJCQkvLyBtYXliZSBpbmNyZWFzZSBpdCB0byBmZmZmZmYgaWYgbm8gc3Vycm91bmQgbW90aW9uCi0JCSJtb3ZxCSUlbW0yLCAiX01heF9WYWxzIlxuXHQiCi0jZW5kaWYKLQkJCQotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgkJCQkJCQotLy8JCXBhdmdiCSUlbW0yLCAlJW1tMQkJCQkJLy8gYXZnKGIsZSkKLQkJVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJLy8gYXZnKGIsZSkKLQkJCQkKLSAgICAgICAgIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0zXG5cdCIJCQkvLyBhYnMoYixlKQotCQkibW92cQklJW1tMywgJSVtbTFcblx0IgkJCS8vIGtlZXAgY29weSBvZiBkaWZmcwotICAgICAgICAgICAgCi0JCSJweG9yCSUlbW00LCAlJW1tNFxuXHQiCQkJCi0JCSJwc3VidXNiICUlbW03LCAlJW1tM1xuXHQiCQkJLy8gbm9uemVybyB3aGVyZSBuZXcgd2VpZ2h0cyBiaWdnZXIsIGVsc2UgMAotCQkicGNtcGVxYiAlJW1tNCwgJSVtbTNcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBuZXcgYmV0dGVyLCBlbHNlIDAwCQotICAgICAgICAicGNtcGVxYiAlJW1tMCwgJSVtbTBcblx0IgotICAgICAgICAicGFuZG4gICAlJW1tMCwgJSVtbTVcblx0IgotICAgICAgICAicG9yICAgICAlJW1tNSwgJSVtbTNcblx0IgotCQkicGNtcGVxYgklJW1tMywgJSVtbTRcblx0IgkJCS8vIGhlcmUgZmYgd2hlcmUgb2xkIGJldHRlciwgZWxzZSAwMAotCi0JCSJwYW5kCSUlbW0zLCAlJW1tMVxuXHQiCi0JCSJwYW5kCSUlbW0zLCAlJW1tMlxuXHQiCi0gICAgICAgIAotCQkicGFuZCAgICAlJW1tNCwgJSVtbTZcblx0IgotCQkicGFuZCAgICAlJW1tNCwgJSVtbTdcblx0IgotCi0JCSJwb3IJCSUlbW0yLCAlJW1tNlxuXHQiCQkJLy8gb3VyIHgyIHZhbHVlCi0JCSJwb3IJCSUlbW0xLCAlJW1tN1xuXHQiCQkJLy8gb3VyIHgyIGRpZmZzCi0JCSJtb3ZxCSUlbW03LCAlJW1tNFxuXHQiCQkJLy8gc2F2ZSBhcyBib2IgdW5jZXJ0YWludHkgaW5kaWNhdG9yCi0KLSNlbHNlCi0KLSAgICAgICAgZGlmZlswXSA9IC0xOwotICAgICAgICBkaWZmWzFdID0gLTE7Ci0JYmVzdFswXSA9IDA7Ci0JYmVzdFsxXSA9IDA7Ci0JLy8gaiwgbgotICAgICAgICBpZiAoQUJTIChwQm9iWy0yXSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDRdKSA8IERpZmZUaHJlcyAmJgotCSAgICBBQlMgKHBCb2JbLTRdIC0gcEJvYltzcmNfcGl0Y2gyICsgNF0pID4gRGlmZlRocmVzKSB7Ci0JICAgYmVzdFswXSA9IChwQm9iWy0yXSArIHBCb2Jbc3JjX3BpdGNoMiAtIDRdKSAvIDI7Ci0JICAgZGlmZlswXSA9IEFCUyAocEJvYlstMl0gLSBwQm9iW3NyY19waXRjaDIgLSA0XSk7Ci0JfQotICAgICAgICBpZiAoQUJTIChwQm9iWy0xXSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDNdKSA8IERpZmZUaHJlcyAmJgotCSAgICBBQlMgKHBCb2JbLTNdIC0gcEJvYltzcmNfcGl0Y2gyICsgNV0pID4gRGlmZlRocmVzKSB7Ci0JICAgYmVzdFsxXSA9IChwQm9iWy0xXSArIHBCb2Jbc3JjX3BpdGNoMiAtIDNdKSAvIDI7Ci0JICAgZGlmZlsxXSA9IEFCUyAocEJvYlstMV0gLSBwQm9iW3NyY19waXRjaDIgLSAzXSk7Ci0JfQotCi0gICAgICAgIC8vIGsgJiBtCi0gICAgICAgIGlmIChBQlMgKHBCb2JbMl0gLSBwQm9iW3NyY19waXRjaDIgKyA0XSkgPCBEaWZmVGhyZXMgJiYKLQkgICAgQUJTIChwQm9iWzRdIC0gcEJvYltzcmNfcGl0Y2gyIC0gNF0pID4gRGlmZlRocmVzKSB7Ci0JICAgYmVzdFswXSA9IChwQm9iWzRdICsgcEJvYltzcmNfcGl0Y2gyIC0gNF0pIC8gMjsKLQkgICBkaWZmWzBdID0gQUJTIChwQm9iWzRdIC0gcEJvYltzcmNfcGl0Y2gyIC0gNF0pOwotCX0KLQotICAgICAgICBpZiAoQUJTIChwQm9iWzNdIC0gcEJvYltzcmNfcGl0Y2gyICsgNV0pIDwgRGlmZlRocmVzICYmCi0JICAgIEFCUyAocEJvYls1XSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDNdKSA+IERpZmZUaHJlcykgewotCSAgIGJlc3RbMV0gPSAocEJvYls1XSArIHBCb2Jbc3JjX3BpdGNoMiAtIDNdKSAvIDI7Ci0JICAgZGlmZlsxXSA9IEFCUyAocEJvYls1XSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDNdKTsKLQl9Ci0KLSAgICAgICAgLy8gYyAmIGQKLQlpZiAoQUJTIChwQm9iWzBdIC0gcEJvYltzcmNfcGl0Y2gyICsgMl0pIDwgRGlmZlRocmVzICYmCi0JICAgIEFCUyAocEJvYlsyXSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDJdKSA+IERpZmZUaHJlcykgewotCSAgIGJlc3RbMF0gPSAocEJvYlsyXSArIHBCb2Jbc3JjX3BpdGNoMiAtIDJdKSAvIDI7Ci0JICAgZGlmZlswXSA9IEFCUyAocEJvYlsyXSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDJdKTsKLQl9Ci0KLQlpZiAoQUJTIChwQm9iWzFdIC0gcEJvYltzcmNfcGl0Y2gyICsgM10pIDwgRGlmZlRocmVzICYmCi0JICAgIEFCUyAocEJvYlszXSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDFdKSA+IERpZmZUaHJlcykgewotCSAgIGJlc3RbMV0gPSAocEJvYlszXSArIHBCb2Jbc3JjX3BpdGNoMiAtIDFdKSAvIDI7Ci0JICAgZGlmZlsxXSA9IEFCUyAocEJvYlszXSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDFdKTsKLQl9Ci0KLSAgICAgICAgLy8gYSAmIGYKLQlpZiAoQUJTIChwQm9iWzBdIC0gcEJvYltzcmNfcGl0Y2gyIC0gMl0pIDwgRGlmZlRocmVzICYmCi0JICAgIEFCUyAocEJvYlstMl0gLSBwQm9iW3NyY19waXRjaDIgKyAyXSkgPiBEaWZmVGhyZXMpIHsKLQkgICBiZXN0WzBdID0gKHBCb2JbLTJdICsgcEJvYltzcmNfcGl0Y2gyICsgMl0pIC8gMjsKLQkgICBkaWZmWzBdID0gQUJTIChwQm9iWy0yXSAtIHBCb2Jbc3JjX3BpdGNoMiArIDJdKTsKLQl9Ci0KLQlpZiAoQUJTIChwQm9iWzFdIC0gcEJvYltzcmNfcGl0Y2gyIC0gMV0pIDwgRGlmZlRocmVzICYmCi0JICAgIEFCUyAocEJvYlstMV0gLSBwQm9iW3NyY19waXRjaDIgKyAzXSkgPiBEaWZmVGhyZXMpIHsKLQkgICBiZXN0WzFdID0gKHBCb2JbLTFdICsgcEJvYltzcmNfcGl0Y2gyICsgM10pIC8gMjsKLQkgICBkaWZmWzFdID0gQUJTIChwQm9iWy0xXSAtIHBCb2Jbc3JjX3BpdGNoMiArIDNdKTsKLQl9Ci0KLQkvLyBiLGUKLQlpZiAoQUJTIChwQm9iWzBdIC0gcEJvYltzcmNfcGl0Y2gyXSkgPCBEaWZmVGhyZXMpIHsKLQkgICBiZXN0WzBdID0gKHBCb2JbMF0gKyBwQm9iW3NyY19waXRjaDJdKSAvIDI7Ci0JICAgZGlmZlswXSA9IEFCUyAocEJvYlswXSAtIHBCb2Jbc3JjX3BpdGNoMl0pOwotCX0KLQotCWlmIChBQlMgKHBCb2JbMV0gLSBwQm9iW3NyY19waXRjaDIgKyAxXSkgPCBEaWZmVGhyZXMpIHsKLQkgICBiZXN0WzFdID0gKHBCb2JbMV0gKyBwQm9iW3NyY19waXRjaDIgKyAxXSkgLyAyOwotCSAgIGRpZmZbMV0gPSBBQlMgKHBCb2JbMV0gLSBwQm9iW3NyY19waXRjaDIgKyAxXSk7Ci0JfQotCi0KLS8vIFdlIHdpbGwgYWxzbyBjYWxjIGhlcmUgdGhlIG1heC9taW4gdmFsdWVzIHRvIGxhdGVyIGxpbWl0IGNvbWIKLS8vIHNvIHRoZSBtYXggZXhjdXJzaW9uIHdpbGwgbm90IGV4Y2VlZCB0aGUgTWF4X0NvbWIgY29uc3RhbnQKLQotI2lmZGVmIFNLSVBfU0VBUkNICi0JCWJlc3RbMF0gPSBDTEFNUCAoYmVzdFswXSwgTUlOIChwQm9iW3NyY19waXRjaDJdLCBwQm9iWzBdKSwgTUFYIChwQm9iW3NyY19waXRjaDJdLCBwQm9iWzBdKSk7Ci0JCWJlc3RbMV0gPSBDTEFNUCAoYmVzdFsxXSwgTUlOIChwQm9iW3NyY19waXRjaDIgKyAxXSwgcEJvYlsxXSksIE1BWCAocEJvYltzcmNfcGl0Y2gyICsgMV0sIHBCb2JbMV0pKTsKLSNlbHNlCi0JCW1vdlswXSA9IE1BWCAoQUJTIChwQm9iWzBdIC0gcEJvYlBbMF0pLCBBQlMgKHBCb2Jbc3JjX3BpdGNoMl0gLSBwQm9iUFtzcmNfcGl0Y2gyXSkpOwotCQltb3ZbMV0gPSBNQVggKEFCUyAocEJvYlsxXSAtIHBCb2JQWzFdKSwgQUJTIChwQm9iW3NyY19waXRjaDIgKyAxXSAtIHBCb2JQW3NyY19waXRjaDIgKyAxXSkpOwotCi0JCU1pblZhbHNbMF0gPSAwOwotCQlNaW5WYWxzWzFdID0gMDsKLQkJTWF4VmFsc1swXSA9IDI1NTsKLQkJTWF4VmFsc1sxXSA9IDI1NTsKLQkJaWYgKG1vdlswXSA+IERpZmZUaHJlcykgewotCQkgIE1pblZhbHNbMF0gPSBNQVggKE1JTiAocEJvYlswXSwgcEJvYltzcmNfcGl0Y2gyXSksIGJlc3RbMF0pOwotCQkgIE1heFZhbHNbMF0gPSBNSU4gKE1BWCAocEJvYlswXSwgcEJvYltzcmNfcGl0Y2gyXSksIGJlc3RbMF0pOwotCQl9Ci0JCQotCQlpZiAobW92WzFdID4gRGlmZlRocmVzKSB7Ci0JCSAgTWluVmFsc1sxXSA9IE1BWCAoTUlOIChwQm9iWzFdLCBwQm9iW3NyY19waXRjaDIrMV0pLCBiZXN0WzFdKTsKLQkJICBNYXhWYWxzWzFdID0gTUlOIChNQVggKHBCb2JbMV0sIHBCb2Jbc3JjX3BpdGNoMisxXSksIGJlc3RbMV0pOwotCQl9Ci0KLQkJYmVzdFswXSA9IENMQU1QIChiZXN0WzBdLCBNSU4gKHBCb2Jbc3JjX3BpdGNoMl0sIHBCb2JbMF0pLCBNQVggKHBCb2Jbc3JjX3BpdGNoMl0sIHBCb2JbMF0pKTsKLQkJYmVzdFsxXSA9IENMQU1QIChiZXN0WzFdLCBNSU4gKHBCb2Jbc3JjX3BpdGNoMiArIDFdLCBwQm9iWzFdKSwgTUFYIChwQm9iW3NyY19waXRjaDIgKyAxXSwgcEJvYlsxXSkpOwotI2VuZGlmCi0JCWF2Z1swXSA9IChwQm9iW3NyY19waXRjaDJdICsgcEJvYlswXSkgLyAyOwotCQlhdmdbMV0gPSAocEJvYltzcmNfcGl0Y2gyICsgMV0gKyBwQm9iWzFdKSAvIDI7Ci0JCWRpZmYyWzBdID0gQUJTIChwQm9iW3NyY19waXRjaDIgKyAxXSAtIHBCb2JbMV0pOwotCQlkaWZmMlsxXSA9IEFCUyAocEJvYltzcmNfcGl0Y2gyICsgMV0gLSBwQm9iWzFdKTsKLQotCQlpZiAoZGlmZlswXSA9PSAtMSB8fCBkaWZmMlswXSA8IGRpZmZbMF0pIHsKLQkJICBiZXN0WzBdID0gYXZnWzBdOwotCQkgIGRpZmZbMF0gPSBkaWZmMlswXTsKLQkJfQotCi0JCWlmIChkaWZmWzFdID09IC0xIHx8IGRpZmYyWzFdIDwgZGlmZlsxXSkgewotCQkgIGJlc3RbMV0gPSBhdmdbMV07Ci0JCSAgZGlmZlsxXSA9IGRpZmYyWzFdOwotCQl9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC9Ub21zTW9Db21wQWxsLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU1OGJiYS4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRvbSBCYXJyeSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogUmVsaWNlbnNlZCBmb3IgR1N0cmVhbWVyIGZyb20gR1BMIHRvIExHUEwgd2l0aCBwZXJtaXQgZnJvbSBUb20gQmFycnkuCi0gKiBTZWU6IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzU3OAotICovCi0KLQotI2lmbmRlZiBUb3BGaXJzdAotI2RlZmluZSBUb3BGaXJzdCBJc09kZAotI2VuZGlmCi0KLSNpZmRlZiBTRUZVTkMKLSN1bmRlZiBTRUZVTkMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChJU19NTVhFWFQpCi0jZGVmaW5lIFNFRlVOQyh4KSBTZWFyY2hfRWZmb3J0X01NWEVYVF8jI3goaW50IHNyY19waXRjaCwgaW50IGRzdF9waXRjaCwgaW50IHJvd3NpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBXZWF2ZVNyYywgY29uc3QgdW5zaWduZWQgY2hhciAqcFdlYXZlU3JjUCwgdW5zaWduZWQgY2hhciAqcFdlYXZlRGVzdCwgaW50IElzT2RkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwQ29weVNyYywgY29uc3QgdW5zaWduZWQgY2hhciAqcENvcHlTcmNQLCBpbnQgRmxkSGVpZ2h0KQotI2VsaWYgZGVmaW5lZChJU18zRE5PVykKLSNkZWZpbmUgU0VGVU5DKHgpIFNlYXJjaF9FZmZvcnRfM0ROT1dfIyN4KGludCBzcmNfcGl0Y2gsIGludCBkc3RfcGl0Y2gsIGludCByb3dzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwV2VhdmVTcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBXZWF2ZVNyY1AsIHVuc2lnbmVkIGNoYXIgKnBXZWF2ZURlc3QsIGludCBJc09kZCwgY29uc3QgdW5zaWduZWQgY2hhciAqcENvcHlTcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBDb3B5U3JjUCwgaW50IEZsZEhlaWdodCkKLSNlbGlmIGRlZmluZWQoSVNfTU1YKQotI2RlZmluZSBTRUZVTkMoeCkgU2VhcmNoX0VmZm9ydF9NTVhfIyN4KGludCBzcmNfcGl0Y2gsIGludCBkc3RfcGl0Y2gsIGludCByb3dzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwV2VhdmVTcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBXZWF2ZVNyY1AsIHVuc2lnbmVkIGNoYXIgKnBXZWF2ZURlc3QsIGludCBJc09kZCwgY29uc3QgdW5zaWduZWQgY2hhciAqcENvcHlTcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBDb3B5U3JjUCwgaW50IEZsZEhlaWdodCkKLSNlbHNlCi0jZGVmaW5lIFNFRlVOQyh4KSBTZWFyY2hfRWZmb3J0X0NfIyN4KGludCBzcmNfcGl0Y2gsIGludCBkc3RfcGl0Y2gsIGludCByb3dzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwV2VhdmVTcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBXZWF2ZVNyY1AsIHVuc2lnbmVkIGNoYXIgKnBXZWF2ZURlc3QsIGludCBJc09kZCwgY29uc3QgdW5zaWduZWQgY2hhciAqcENvcHlTcmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBDb3B5U3JjUCwgaW50IEZsZEhlaWdodCkKLSNlbmRpZgotCi0jaW5jbHVkZSAiVG9tc01vQ29tcEFsbDIuaW5jIgotCi0jZGVmaW5lIFVTRV9TVFJBTkdFX0JPQgotCi0jaW5jbHVkZSAiVG9tc01vQ29tcEFsbDIuaW5jIgotCi0jdW5kZWYgVVNFX1NUUkFOR0VfQk9CCi0KLSN1bmRlZiBTRUZVTkMKLSNpZiBkZWZpbmVkKElTX01NWEVYVCkKLSNkZWZpbmUgU0VGVU5DKHgpIFNlYXJjaF9FZmZvcnRfTU1YRVhUXyMjeChzcmNfcGl0Y2gsIGRzdF9waXRjaCwgcm93c2l6ZSwgcFdlYXZlU3JjLCBwV2VhdmVTcmNQLCBwV2VhdmVEZXN0LCBJc09kZCwgcENvcHlTcmMsIHBDb3B5U3JjUCwgRmxkSGVpZ2h0KQotI2VsaWYgZGVmaW5lZChJU18zRE5PVykKLSNkZWZpbmUgU0VGVU5DKHgpIFNlYXJjaF9FZmZvcnRfM0ROT1dfIyN4KHNyY19waXRjaCwgZHN0X3BpdGNoLCByb3dzaXplLCBwV2VhdmVTcmMsIHBXZWF2ZVNyY1AsIHBXZWF2ZURlc3QsIElzT2RkLCBwQ29weVNyYywgcENvcHlTcmNQLCBGbGRIZWlnaHQpCi0jZWxpZiBkZWZpbmVkKElTX01NWCkKLSNkZWZpbmUgU0VGVU5DKHgpIFNlYXJjaF9FZmZvcnRfTU1YXyMjeChzcmNfcGl0Y2gsIGRzdF9waXRjaCwgcm93c2l6ZSwgcFdlYXZlU3JjLCBwV2VhdmVTcmNQLCBwV2VhdmVEZXN0LCBJc09kZCwgcENvcHlTcmMsIHBDb3B5U3JjUCwgRmxkSGVpZ2h0KQotI2Vsc2UKLSNkZWZpbmUgU0VGVU5DKHgpIFNlYXJjaF9FZmZvcnRfQ18jI3goc3JjX3BpdGNoLCBkc3RfcGl0Y2gsIHJvd3NpemUsIHBXZWF2ZVNyYywgcFdlYXZlU3JjUCwgcFdlYXZlRGVzdCwgSXNPZGQsIHBDb3B5U3JjLCBwQ29weVNyY1AsIEZsZEhlaWdodCkKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBGVU5DVF9OQU1FKEdzdERlaW50ZXJsYWNlTWV0aG9kICpkX21ldGhvZCwKLQljb25zdCBHc3REZWludGVybGFjZUZpZWxkKiBoaXN0b3J5LCBndWludCBoaXN0b3J5X2NvdW50LAotCUdzdFZpZGVvRnJhbWUgKm91dGZyYW1lLCBpbnQgY3VyX2ZpZWxkX2lkeCkKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RUb21zTW9Db21wICpzZWxmID0gR1NUX0RFSU5URVJMQUNFX01FVEhPRF9UT01TTU9DT01QIChkX21ldGhvZCk7Ci0gIGdsb25nIFNlYXJjaEVmZm9ydCA9IHNlbGYtPnNlYXJjaF9lZmZvcnQ7Ci0gIGdpbnQgVXNlU3RyYW5nZUJvYiA9IHNlbGYtPnN0cmFuZ2VfYm9iOwotICBnaW50IElzT2RkOwotICBjb25zdCBndWludDggKnBXZWF2ZVNyYzsKLSAgY29uc3QgZ3VpbnQ4ICpwV2VhdmVTcmNQOwotICBndWludDggKnBXZWF2ZURlc3Q7Ci0gIGNvbnN0IGd1aW50OCAqcENvcHlTcmM7Ci0gIGNvbnN0IGd1aW50OCAqcENvcHlTcmNQOwotICBndWludDggKnBDb3B5RGVzdDsKLSAgZ2ludCBzcmNfcGl0Y2g7Ci0gIGdpbnQgZHN0X3BpdGNoOwotICBnaW50IHJvd3NpemU7Ci0gIGdpbnQgRmxkSGVpZ2h0OwotCi0gIGlmIChjdXJfZmllbGRfaWR4ICsgMiA+IGhpc3RvcnlfY291bnQgfHwgY3VyX2ZpZWxkX2lkeCA8IDEpIHsKLSAgICBHc3REZWludGVybGFjZU1ldGhvZCAqYmFja3VwX21ldGhvZDsKLSAgICAKLSAgICBiYWNrdXBfbWV0aG9kID0gZ19vYmplY3RfbmV3IChnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX2xpbmVhcl9nZXRfdHlwZSgpLAotICAgICAgICBOVUxMKTsKLQotICAgIGdzdF9kZWludGVybGFjZV9tZXRob2Rfc2V0dXAgKGJhY2t1cF9tZXRob2QsIGRfbWV0aG9kLT52aW5mbyk7Ci0gICAgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF9kZWludGVybGFjZV9mcmFtZSAoYmFja3VwX21ldGhvZCwKLSAgICAgICAgaGlzdG9yeSwgaGlzdG9yeV9jb3VudCwgb3V0ZnJhbWUsIGN1cl9maWVsZF9pZHgpOwotCi0gICAgZ19vYmplY3RfdW5yZWYgKGJhY2t1cF9tZXRob2QpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIGRvdWJsZSBzdHJpZGUgZG8gYWRkcmVzcyBqdXN0IGV2ZXJ5IG9kZC9ldmVuIHNjYW5saW5lICovCi0gIHNyY19waXRjaCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dGZyYW1lLCAwKSAqIDI7Ci0gIGRzdF9waXRjaCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dGZyYW1lLCAwKTsKLSAgcm93c2l6ZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dGZyYW1lLCAwKTsKLQotICBGbGRIZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKHNlbGYtPnBhcmVudC52aW5mbykgLyAyOwotCi0gIHBDb3B5U3JjICAgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaGlzdG9yeVtoaXN0b3J5X2NvdW50LTFdLmZyYW1lLCAwKTsKLSAgaWYgKGhpc3RvcnlbaGlzdG9yeV9jb3VudCAtIDFdLmZsYWdzICYgUElDVFVSRV9JTlRFUkxBQ0VEX0JPVFRPTSkKLSAgICBwQ29weVNyYyArPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChoaXN0b3J5W2hpc3RvcnlfY291bnQtMV0uZnJhbWUsIDApOwotICBwQ29weVNyY1AgID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGhpc3RvcnlbaGlzdG9yeV9jb3VudC0zXS5mcmFtZSwgMCk7Ci0gIGlmIChoaXN0b3J5W2hpc3RvcnlfY291bnQgLSAzXS5mbGFncyAmIFBJQ1RVUkVfSU5URVJMQUNFRF9CT1RUT00pCi0gICAgcENvcHlTcmNQICs9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGhpc3RvcnlbaGlzdG9yeV9jb3VudC0zXS5mcmFtZSwgMCk7Ci0gIHBXZWF2ZVNyYyAgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaGlzdG9yeVtoaXN0b3J5X2NvdW50LTJdLmZyYW1lLCAwKTsKLSAgaWYgKGhpc3RvcnlbaGlzdG9yeV9jb3VudCAtIDJdLmZsYWdzICYgUElDVFVSRV9JTlRFUkxBQ0VEX0JPVFRPTSkKLSAgICBwV2VhdmVTcmMgKz0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaGlzdG9yeVtoaXN0b3J5X2NvdW50LTJdLmZyYW1lLCAwKTsKLSAgcFdlYXZlU3JjUCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChoaXN0b3J5W2hpc3RvcnlfY291bnQtNF0uZnJhbWUsIDApOwotICBpZiAoaGlzdG9yeVtoaXN0b3J5X2NvdW50IC0gNF0uZmxhZ3MgJiBQSUNUVVJFX0lOVEVSTEFDRURfQk9UVE9NKQotICAgIHBXZWF2ZVNyY1AgKz0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaGlzdG9yeVtoaXN0b3J5X2NvdW50LTRdLmZyYW1lLCAwKTsKLQotICAvKiB1c2UgYm90dG9tIGZpZWxkIGFuZCBpbnRlcmxhY2UgdG9wIGZpZWxkICovCi0gIGlmIChoaXN0b3J5W2hpc3RvcnlfY291bnQtMl0uZmxhZ3MgPT0gUElDVFVSRV9JTlRFUkxBQ0VEX0JPVFRPTSkgewotICAgIElzT2RkICAgICAgPSAxOwotCi0gICAgLy8gaWYgd2UgaGF2ZSBhbiBvZGQgZmllbGQgd2UgY29weSBhbiBldmVuIGZpZWxkIGFuZCB3ZWF2ZSBhbiBvZGQgZmllbGQKLSAgICBwQ29weURlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0ZnJhbWUsIDApOwotICAgIHBXZWF2ZURlc3QgPSBwQ29weURlc3QgKyBkc3RfcGl0Y2g7Ci0gIH0KLSAgLyogZG8gaXQgdmljZSB2ZXJjYSAqLwotICBlbHNlIHsKLQotICAgIElzT2RkICAgICAgPSAwOwotICAgIC8vIGlmIHdlIGhhdmUgYW4gZXZlbiBmaWVsZCB3ZSBjb3B5IGFuIG9kZCBmaWVsZCBhbmQgd2VhdmUgYW4gZXZlbiBmaWVsZAotICAgIHBDb3B5RGVzdCA9IChndWludDggKikgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dGZyYW1lLCAwKSArIGRzdF9waXRjaDsKLSAgICBwV2VhdmVEZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dGZyYW1lLCAwKTsKLSAgfQotCi0gIAotICAvLyBjb3B5IDFzdCBhbmQgbGFzdCB3ZWF2ZSBsaW5lcyAKLSAgRmllbGRjb3B5KHBXZWF2ZURlc3QsIHBDb3B5U3JjLCByb3dzaXplLAkJCi0JICAgIDEsIGRzdF9waXRjaCoyLCBzcmNfcGl0Y2gpOwotICBGaWVsZGNvcHkocFdlYXZlRGVzdCsoRmxkSGVpZ2h0LTEpKmRzdF9waXRjaCoyLAotCSAgICBwQ29weVNyYysoRmxkSGVpZ2h0LTEpKnNyY19waXRjaCwgcm93c2l6ZSwgCi0JICAgIDEsIGRzdF9waXRjaCoyLCBzcmNfcGl0Y2gpOwotICAKLSNpZmRlZiBVU0VfVkVSVElDQUxfRklMVEVSCi0gIC8vIFZlcnRpY2FsIEZpbHRlciBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkIGZvciBEU2NhbGVyICEhCi0gIC8vIGNvcHkgMXN0IGFuZCBsYXN0IGxpbmVzIHRoZSBjb3B5IGZpZWxkCi0gIEZpZWxkY29weShwQ29weURlc3QsIHBDb3B5U3JjLCByb3dzaXplLCAKLQkgICAgMSwgZHN0X3BpdGNoKjIsIHNyY19waXRjaCk7Ci0gIEZpZWxkY29weShwQ29weURlc3QrKEZsZEhlaWdodC0xKSpkc3RfcGl0Y2gqMiwKLQkgICAgcENvcHlTcmMrKEZsZEhlaWdodC0xKSpzcmNfcGl0Y2gsIHJvd3NpemUsIAotCSAgICAxLCBkc3RfcGl0Y2gqMiwgc3JjX3BpdGNoKTsKLSNlbHNlCi0gIAotICAvLyBjb3B5IGFsbCBvZiB0aGUgY29weSBmaWVsZAotICBGaWVsZGNvcHkocENvcHlEZXN0LCBwQ29weVNyYywgcm93c2l6ZSwgCi0JICAgIEZsZEhlaWdodCwgZHN0X3BpdGNoKjIsIHNyY19waXRjaCk7Ci0jZW5kaWYJCi0gIC8vIHRoZW4gZ28gZmlsbCBpbiB0aGUgaGFyZCBwYXJ0LCBiZWluZyB2YXJpb3VzbHkgbGF6eSBkZXBlbmRpbmcgdXBvbgotICAvLyBTZWFyY2hFZmZvcnQKLQotICBpZighVXNlU3RyYW5nZUJvYikgewotICAgIGlmIChTZWFyY2hFZmZvcnQgPT0gMCkKLSAgICAgIHsKLQlTRUZVTkMoMCk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDEpCi0gICAgICB7Ci0JU0VGVU5DKDEpOwotICAgICAgfQotICAgIC8qCWVsc2UgaWYgKFNlYXJjaEVmZm9ydCA8PSAyKQotCXsKLQlTRUZVTkMoMik7Ci0JfQotICAgICovCi0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDMpCi0gICAgICB7Ci0JU0VGVU5DKDMpOwotICAgICAgfQotICAgIGVsc2UgaWYgKFNlYXJjaEVmZm9ydCA8PSA1KQotICAgICAgewotCVNFRlVOQyg1KTsKLSAgICAgIH0KLSAgICBlbHNlIGlmIChTZWFyY2hFZmZvcnQgPD0gOSkKLSAgICAgIHsKLQlTRUZVTkMoOSk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDExKQotICAgICAgewotCVNFRlVOQygxMSk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDEzKQotICAgICAgewotCVNFRlVOQygxMyk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDE1KQotICAgICAgewotCVNFRlVOQygxNSk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDE5KQotICAgICAgewotCVNFRlVOQygxOSk7Ci0gICAgICB9Ci0gICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDIxKQotICAgICAgewotCVNFRlVOQygyMSk7Ci0gICAgICB9Ci0gICAgZWxzZSAKLSAgICAgIHsKLQlTRUZVTkMoTWF4KTsKLSAgICAgIH0KLSAgfQotICBlbHNlCi0gICAgewotICAgICAgaWYgKFNlYXJjaEVmZm9ydCA9PSAwKQotCXsKLQkgIFNFRlVOQygwU0IpOwotCX0KLSAgICAgIGVsc2UgaWYgKFNlYXJjaEVmZm9ydCA8PSAxKQotCXsKLQkgIFNFRlVOQygxU0IpOwotCX0KLSAgICAgIC8qCWVsc2UgaWYgKFNlYXJjaEVmZm9ydCA8PSAyKQotCQl7Ci0JCVNFRlVOQygyU0IpOwotCQl9Ci0gICAgICAqLwotICAgICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDMpCi0JewotCSAgU0VGVU5DKDNTQik7Ci0JfQotICAgICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDUpCi0JewotCSAgU0VGVU5DKDVTQik7Ci0JfQotICAgICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDkpCi0JewotCSAgU0VGVU5DKDlTQik7Ci0JfQotICAgICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDExKQotCXsKLQkgIFNFRlVOQygxMVNCKTsKLQl9Ci0gICAgICBlbHNlIGlmIChTZWFyY2hFZmZvcnQgPD0gMTMpCi0JewotCSAgU0VGVU5DKDEzU0IpOwotCX0KLSAgICAgIGVsc2UgaWYgKFNlYXJjaEVmZm9ydCA8PSAxNSkKLQl7Ci0JICBTRUZVTkMoMTVTQik7Ci0JfQotICAgICAgZWxzZSBpZiAoU2VhcmNoRWZmb3J0IDw9IDE5KQotCXsKLQkgIFNFRlVOQygxOVNCKTsKLQl9Ci0gICAgICBlbHNlIGlmIChTZWFyY2hFZmZvcnQgPD0gMjEpCi0JewotCSAgU0VGVU5DKDIxU0IpOwotCX0KLSAgICAgIGVsc2UgCi0JewotCSAgU0VGVU5DKE1heFNCKTsKLQl9Ci0gICAgfQotCi0jaWYgZGVmaW5lZChCVUlMRF9YODZfQVNNKSAmJiAhZGVmaW5lZChJU19DKQotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiZW1tcyIpOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbDIuaW5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1RvbXNNb0NvbXBBbGwyLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYzNDRlYS4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvVG9tc01vQ29tcEFsbDIuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8vIC0qLSBjKysgLSotCi0KLSNpZmRlZiBTRUFSQ0hfRUZGT1JUX0ZVTkMKLSN1bmRlZiBTRUFSQ0hfRUZGT1JUX0ZVTkMKLSNlbmRpZgotCi0jaWZkZWYgVVNFX1NUUkFOR0VfQk9CCi0jZGVmaW5lIFNFQVJDSF9FRkZPUlRfRlVOQyhuKSBTRUZVTkMobiMjU0IpCi0jZWxzZQotI2RlZmluZSBTRUFSQ0hfRUZGT1JUX0ZVTkMobikgU0VGVU5DKG4pCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgU0VBUkNIX0VGRk9SVF9GVU5DKDApCQkvLyB3ZSBkb24ndCB0cnkgYXQgYWxsIDstKQotewotCQkvL3NlZSBTZWFyY2hfRWZmb3J0X01heCgpIGZvciBjb21tZW50cwotI2RlZmluZSBTS0lQX1NFQVJDSAotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI3VuZGVmIFNLSVBfU0VBUkNICi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IFNFQVJDSF9FRkZPUlRfRlVOQygxKQotewotI2lmZGVmIElTX0MKLSNkZWZpbmUgU0tJUF9TRUFSQ0gKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wQm90dG9tLmluYyIKLSN1bmRlZiBTS0lQX1NFQVJDSAotI2Vsc2UKLQkJLy9zZWUgU2VhcmNoX0VmZm9ydF9NYXgoKSBmb3IgY29tbWVudHMKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLQlSRVNFVF9DSFJPTUEJCS8vIHByZXRlbmQgY2hyb21hIGRpZmZzIHdhcyAyNTUgZWFjaAotI2luY2x1ZGUgIlNlYXJjaExvb3AwQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgU0VBUkNIX0VGRk9SVF9GVU5DKDMpCi17Ci0jaWZkZWYgSVNfQwotI2RlZmluZSBTS0lQX1NFQVJDSAotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI3VuZGVmIFNLSVBfU0VBUkNICi0jZWxzZQotCQkvL3NlZSBTZWFyY2hfRWZmb3J0X01heCgpIGZvciBjb21tZW50cwotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBMi5pbmMiCi0JUkVTRVRfQ0hST01BCQkvLyBwcmV0ZW5kIGNocm9tYSBkaWZmcyB3YXMgMjU1IGVhY2gKLSNpbmNsdWRlICJTZWFyY2hMb29wMEEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IFNFQVJDSF9FRkZPUlRfRlVOQyg1KQotewotI2lmZGVmIElTX0MKLSNkZWZpbmUgU0tJUF9TRUFSQ0gKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wQm90dG9tLmluYyIKLSN1bmRlZiBTS0lQX1NFQVJDSAotI2Vsc2UKLQkJLy9zZWUgU2VhcmNoX0VmZm9ydF9NYXgoKSBmb3IgY29tbWVudHMKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQTIuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBSDIuaW5jIgotCVJFU0VUX0NIUk9NQQkJLy8gcHJldGVuZCBjaHJvbWEgZGlmZnMgd2FzIDI1NSBlYWNoCi0jaW5jbHVkZSAiU2VhcmNoTG9vcDBBLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wQm90dG9tLmluYyIKLSNlbmRpZgotfQotCi0vLyAzeDMgc2VhcmNoCi1zdGF0aWMgaW5saW5lIGludCBTRUFSQ0hfRUZGT1JUX0ZVTkMoOSkKLXsKLSNpZmRlZiBJU19DCi0jZGVmaW5lIFNLSVBfU0VBUkNICi0jaW5jbHVkZSAiU2VhcmNoTG9vcFRvcC5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jdW5kZWYgU0tJUF9TRUFSQ0gKLSNlbHNlCi0JCS8vc2VlIFNlYXJjaEVmZm9ydE1heCgpIGZvciBjb21tZW50cwotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBLmluYyIKLQlSRVNFVF9DSFJPTUEJCQkvLyBwcmV0ZW5kIGNocm9tYSBkaWZmcyB3YXMgMjU1IGVhY2gKLSNpbmNsdWRlICJTZWFyY2hMb29wVkEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3AwQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jZW5kaWYKLX0KLQotLy8gU2VhcmNoIDkgd2l0aCAyIEgtaGFsZiBwZWxzIGFkZGVkCi1zdGF0aWMgaW5saW5lIGludCBTRUFSQ0hfRUZGT1JUX0ZVTkMoMTEpCi17Ci0jaWZkZWYgSVNfQwotI2RlZmluZSBTS0lQX1NFQVJDSAotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI3VuZGVmIFNLSVBfU0VBUkNICi0jZWxzZQotCQkvL3NlZSBTZWFyY2hFZmZvcnRNYXgoKSBmb3IgY29tbWVudHMKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcE9kZEFIMi5pbmMiCi0JUkVTRVRfQ0hST01BCQkJLy8gcHJldGVuZCBjaHJvbWEgZGlmZnMgd2FzIDI1NSBlYWNoCi0jaW5jbHVkZSAiU2VhcmNoTG9vcFZBLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wMEEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI2VuZGlmCi19Ci0KLS8vIFNlYXJjaCAxMSB3aXRoIDIgVi1oYWxmIHBlbHMgYWRkZWQKLXN0YXRpYyBpbmxpbmUgaW50IFNFQVJDSF9FRkZPUlRfRlVOQygxMykKLXsKLSNpZmRlZiBJU19DCi0jZGVmaW5lIFNLSVBfU0VBUkNICi0jaW5jbHVkZSAiU2VhcmNoTG9vcFRvcC5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jdW5kZWYgU0tJUF9TRUFSQ0gKLSNlbHNlCi0JCS8vc2VlIFNlYXJjaEVmZm9ydE1heCgpIGZvciBjb21tZW50cwotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQUgyLmluYyIKLQlSRVNFVF9DSFJPTUEJCQkvLyBwcmV0ZW5kIGNocm9tYSBkaWZmcyB3YXMgMjU1IGVhY2gKLSNpbmNsdWRlICJTZWFyY2hMb29wVkFILmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wVkEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3AwQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jZW5kaWYKLX0KLQotLy8gNXgzCi1zdGF0aWMgaW5saW5lIGludCBTRUFSQ0hfRUZGT1JUX0ZVTkMoMTUpCi17Ci0jaWZkZWYgSVNfQwotI2RlZmluZSBTS0lQX1NFQVJDSAotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI3VuZGVmIFNLSVBfU0VBUkNICi0jZWxzZQotCQkvL3NlZSBTZWFyY2hFZmZvcnRNYXgoKSBmb3IgY29tbWVudHMKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQS5pbmMiCi0JUkVTRVRfQ0hST01BCQkJLy8gcHJldGVuZCBjaHJvbWEgZGlmZnMgd2FzIDI1NSBlYWNoCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEVkZ2VBLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wVkEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3AwQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jZW5kaWYKLX0KLQotLy8gNXgzICsgNCBoYWxmIHBlbHMKLXN0YXRpYyBpbmxpbmUgaW50IFNFQVJDSF9FRkZPUlRfRlVOQygxOSkKLXsKLSNpZmRlZiBJU19DCi0jZGVmaW5lIFNLSVBfU0VBUkNICi0jaW5jbHVkZSAiU2VhcmNoTG9vcFRvcC5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jdW5kZWYgU0tJUF9TRUFSQ0gKLSNlbHNlCi0JCS8vc2VlIFNlYXJjaEVmZm9ydE1heCgpIGZvciBjb21tZW50cwotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQUgyLmluYyIKLQlSRVNFVF9DSFJPTUEJCQkvLyBwcmV0ZW5kIGNocm9tYSBkaWZmcyB3YXMgMjU1IGVhY2gKLSNpbmNsdWRlICJTZWFyY2hMb29wRWRnZUEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BWQUguaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BWQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcDBBLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wQm90dG9tLmluYyIKLSNlbmRpZgotfQotCi0vLyBIYW5kbGUgb25lIDR4MSBibG9jayBvZiBwaXhlbHMKLS8vIFNlYXJjaCBhIDd4MyBhcmVhLCBubyBoYWxmIHBlbHMKLQotc3RhdGljIGlubGluZSBpbnQgU0VBUkNIX0VGRk9SVF9GVU5DKDIxKQotewotI2lmZGVmIElTX0MKLSNkZWZpbmUgU0tJUF9TRUFSQ0gKLSNpbmNsdWRlICJTZWFyY2hMb29wVG9wLmluYyIKLSNpbmNsdWRlICJTZWFyY2hMb29wQm90dG9tLmluYyIKLSN1bmRlZiBTS0lQX1NFQVJDSAotI2Vsc2UKLQkJLy9zZWUgU2VhcmNoTG9vcFRvcC5pbmMgZm9yIGNvbW1lbnRzCi0jaW5jbHVkZSAiU2VhcmNoTG9vcFRvcC5pbmMiCi0KLQkJLy8gb2RkIGFkZHJlc3NlcyAtLSB0aGUgcGl4ZWxzIGF0IG9kZCBhZGRyZXNzIHdvdWxkbid0IGdlbmVyYXRlCi0JCS8vIGdvb2QgbHVtYSB2YWx1ZXMgYnV0IHdlIHdpbGwgbWFzayB0aG9zZSBvZmYKLQotI2luY2x1ZGUgIlNlYXJjaExvb3BPZGRBNi5pbmMiICAvLyA0IG9kZCB2IGhhbGYgcGVscywgMyB0byBsZWZ0ICYgcmlnaHQKLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQS5pbmMiICAgLy8gNiBvZGQgcGVscywgMSB0byBsZWZ0ICYgcmlnaHQKLQotCVJFU0VUX0NIUk9NQQkJLy8gcHJldGVuZCBjaHJvbWEgZGlmZnMgd2FzIDI1NSBlYWNoCi0KLQkJLy8gZXZlbiBhZGRyZXNzZXMgLS0gdXNlIGJvdGggbHVtYSBhbmQgY2hyb21hIGZyb20gdGhlc2UKLQkJLy8gc2VhcmNoIGF2ZXJhZ2VzIG9mIDIgcGl4ZWxzIGxlZnQgYW5kIHJpZ2h0Ci0jaW5jbHVkZSAiU2VhcmNoTG9vcEVkZ2VBLmluYyIKLQkJLy8gc2VhcmNoIHZlcnRpY2FsIGxpbmUgYW5kIGF2ZXJhZ2VzLCAtMSwwLCsxCi0jaW5jbHVkZSAiU2VhcmNoTG9vcFZBLmluYyIKLQkJLy8gYmxlbmQgb3VyIHJlc3VsdHMgYW5kIGxvb3AKLSNpbmNsdWRlICJTZWFyY2hMb29wMEEuaW5jIgotI2luY2x1ZGUgIlNlYXJjaExvb3BCb3R0b20uaW5jIgotI2VuZGlmCi19Ci0KLS8vIEhhbmRsZSBvbmUgNHgxIGJsb2NrIG9mIHBpeGVscwotLy8gU2VhcmNoIGEgOXgzIGFyZWEsIG5vIGhhbGYgcGVscwotc3RhdGljIGlubGluZSBpbnQgU0VBUkNIX0VGRk9SVF9GVU5DKE1heCkKLXsKLSNpZmRlZiBJU19DCi0jZGVmaW5lIFNLSVBfU0VBUkNICi0jaW5jbHVkZSAiU2VhcmNoTG9vcFRvcC5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jdW5kZWYgU0tJUF9TRUFSQ0gKLSNlbHNlCi0JCS8vc2VlIFNlYXJjaExvb3BUb3AuaW5jIGZvciBjb21tZW50cwotI2luY2x1ZGUgIlNlYXJjaExvb3BUb3AuaW5jIgotCi0JCS8vIG9kZCBhZGRyZXNzZXMgLS0gdGhlIHBpeGVscyBhdCBvZGQgYWRkcmVzcyB3b3VsZG4ndCBnZW5lcmF0ZQotCQkvLyBnb29kIGx1bWEgdmFsdWVzIGJ1dCB3ZSB3aWxsIG1hc2sgdGhvc2Ugb2ZmCi0KLSNpbmNsdWRlICJTZWFyY2hMb29wT2RkQTYuaW5jIiAgLy8gNCBvZGQgdiBoYWxmIHBlbHMsIDMgdG8gbGVmdCAmIHJpZ2h0Ci0jaW5jbHVkZSAiU2VhcmNoTG9vcE9kZEEuaW5jIiAgIC8vIDYgb2RkIHBlbHMsIDEgdG8gbGVmdCAmIHJpZ2h0Ci0KLQlSRVNFVF9DSFJPTUEJCS8vIHByZXRlbmQgY2hyb21hIGRpZmZzIHdhcyAyNTUgZWFjaAotCi0JCS8vIGV2ZW4gYWRkcmVzc2VzIC0tIHVzZSBib3RoIGx1bWEgYW5kIGNocm9tYSBmcm9tIHRoZXNlCi0JCS8vIHNlYXJjaCBhdmVyYWdlcyBvZiA0IHBpeGVscyBsZWZ0IGFuZCByaWdodAotI2luY2x1ZGUgIlNlYXJjaExvb3BFZGdlQTguaW5jIgotCQkvLyBzZWFyY2ggYXZlcmFnZXMgb2YgMiBwaXhlbHMgbGVmdCBhbmQgcmlnaHQKLSNpbmNsdWRlICJTZWFyY2hMb29wRWRnZUEuaW5jIgotCQkvLyBzZWFyY2ggdmVydGljYWwgbGluZSBhbmQgYXZlcmFnZXMsIC0xLDAsKzEKLSNpbmNsdWRlICJTZWFyY2hMb29wVkEuaW5jIgotCQkvLyBibGVuZCBvdXIgcmVzdWx0cyBhbmQgbG9vcAotI2luY2x1ZGUgIlNlYXJjaExvb3AwQS5pbmMiCi0jaW5jbHVkZSAiU2VhcmNoTG9vcEJvdHRvbS5pbmMiCi0jZW5kaWYKLX0KLQotI3VuZGVmIFNFQVJDSF9FRkZPUlRfRlVOQwotCmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvV2llcmRCb2IuaW5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS90b21zbW9jb21wL1dpZXJkQm9iLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRiYmI4My4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvV2llcmRCb2IuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8vIC0qLSBjKysgLSotCi0KLQkJLy8gRmlyc3QsIGdldCBhbmQgc2F2ZSBvdXIgcG9zc2libGUgQm9iIHZhbHVlcwotCQkvLyBBc3N1bWUgb3VyIHBpeGVscyBhcmUgbGF5ZWQgb3V0IGFzIGZvbGxvd3Mgd2l0aCB4IHRoZSBjYWxjJ2QgYm9iIHZhbHVlCi0JCS8vIGFuZCB0aGUgb3RoZXIgcGl4ZWxzIGFyZSBmcm9tIHRoZSBjdXJyZW50IGZpZWxkCi0JCS8vICAKLQkJLy8gICAgICAgIGogYSBiIGMgawkJY3VycmVudCBmaWVsZAotCQkvLyAgICAgICAgICAgIHgJCQljYWxjdWxhdGVkIGxpbmUKLQkJLy8gICAgICAgIG0gZCBlIGYgbgkJY3VycmVudCBmaWVsZAotCQkvLwotCQkvLyB3ZSBjYWxjIHRoZSBib2IgdmFsdWUgYXM6Ci0JCS8vCQl4MiA9IGVpdGhlciBhdmcoYSxmKSwgYXZnKGMsZCksIGF2ZyhiLGUpLCBhdmcoaixuKSwgb3IgYXZnKGssbSkKLQkJIAotCQkvLyBzZWxlY3RlZCBmb3IgdGhlCXNtYWxsZXN0IG9mIGFicyhhLGYpLCBhYnMoYyxkKSwgb3IgYWJzKGIsZSksIGV0Yy4KLQotI2lmbmRlZiBJU19DCi0JCS8vIGEsZgotCQkibW92cSAgICAtMiglJSJYQlgiKSwgJSVtbTBcblx0IgkJLy8gdmFsdWUgYSBmcm9tIHRvcCBsZWZ0CQkKLQkJIm1vdnEgICAgMiglJSJYQlgiLCAlJSJYQ1giKSwgJSVtbTFcblx0IgkvLyB2YWx1ZSBmIGZyb20gYm90dG9tIHJpZ2h0CQkJCi0JCSJtb3ZxCSUlbW0wLCAlJW1tNlxuXHQiCQkJCQkKLS8vCQlwYXZnYgklJW1tNiwgJSVtbTEJCQkJCS8vIGF2ZyhhLGYpLCBhbHNvIGJlc3Qgc28gZmFyCi0JCVZfUEFWR0IgKCIlJW1tNiIsICIlJW1tMSIsICIlJW1tNyIsIF9TaGlmdE1hc2spCS8vIGF2ZyhhLGYpLCBhbHNvIGJlc3Qgc28gZmFyCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tN1xuXHQiCi0JCSJwc3VidXNiCSAlJW1tMSwgJSVtbTdcblx0IgotCQkicHN1YnVzYiAlJW1tMCwgJSVtbTFcblx0IgotCQkicG9yCQklJW1tMSwgJSVtbTdcblx0IgkJCQkJLy8gYWJzIGRpZmYsIGFsc28gYmVzdCBzbyBmYXIKLQotCQkvLyBjLGQKLQkJIm1vdnEgICAgMiglJSJYQlgiKSwgJSVtbTBcblx0IgkJLy8gdmFsdWUgYSBmcm9tIHRvcCBsZWZ0CQkKLQkJIm1vdnEgICAgLTIoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgZiBmcm9tIGJvdHRvbSByaWdodAkJCQotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgkJCQkJCQotLy8JCXBhdmdiCSUlbW0yLCAlJW1tMQkJCQkJLy8gYXZnKGMsZCkKLQkJVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJLy8gYXZnKGMsZCkKLSAgICAgICAgIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0zXG5cdCIJCQkJCS8vIGFicyhjLGQpCi0JCSJtb3ZxCSUlbW0zLCAlJW1tMVxuXHQiCQkJCQkvLyBrZWVwIGNvcHkKLQotCQkicHN1YnVzYiAlJW1tNywgJSVtbTNcblx0IgkJCS8vIG5vbnplcm8gd2hlcmUgbmV3IHdlaWdodHMgYmlnZ2VyLCBlbHNlIDAKLQkJInB4b3IJJSVtbTQsICUlbW00XG5cdCIKLQkJInBjbXBlcWIgJSVtbTQsICUlbW0zXG5cdCIJCQkvLyBub3cgZmYgd2hlcmUgbmV3IGJldHRlciwgZWxzZSAwMAkKLQkJInBjbXBlcWIJJSVtbTMsICUlbW00XG5cdCIJCQkvLyBoZXJlIGZmIHdoZXJlIG9sZCBiZXR0ZXIsIGVsc2UgMDAKLQotCQkicGFuZAklJW1tMywgJSVtbTFcblx0IgkJCS8vIGtlZXAgb25seSBiZXR0ZXIgbmV3IGF2ZyBhbmQgYWJzCi0JCSJwYW5kCSUlbW0zLCAlJW1tMlxuXHQiCi0KLQkJInBhbmQJJSVtbTQsICUlbW02XG5cdCIKLQkJInBhbmQgICAgJSVtbTQsICUlbW03XG5cdCIKLQotCQkicG9yCQklJW1tMiwgJSVtbTZcblx0IgkJCS8vIGFuZCBtZXJnZSBuZXcgJiBvbGQgdmFscyBrZWVwaW5nIGJlc3QKLQkJInBvcgkJJSVtbTEsICUlbW03XG5cdCIKLQkJInBvcgkJIl9VVk1hc2siLCAlJW1tN1xuXHQiCQkJLy8gYnV0IHdlIGtub3cgY2hyb21hIGlzIHdvcnRobGVzcyBzbyBmYXIKLQkJInBhbmQJIl9ZTWFzayIsICUlbW01XG5cdCIJCQkvLyBtYXNrIG91dCBjaHJvbWEgZnJvbSBoZXJlIGFsc28KLQotCQkvLyBqLG4KLQkJIm1vdnEgICAgLTQoJSUiWEJYIiksICUlbW0wXG5cdCIJCS8vIHZhbHVlIGogZnJvbSB0b3AgbGVmdAkJCi0JCSJtb3ZxICAgIDQoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgbiBmcm9tIGJvdHRvbSByaWdodAkJCQotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgkJCQkJCQotLy8JCXBhdmdiCSUlbW0yLCAlJW1tMQkJCQkJLy8gYXZnKGosbikKLQkJVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJLy8gYXZnKGosbikKLSAgICAgICAgIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0zXG5cdCIJCQkJCS8vIGFicyhqLW4pCi0JCSJtb3ZxCSUlbW0zLCAlJW1tMVxuXHQiCQkJCQkvLyBrZWVwIGNvcHkKLQotCQkicHN1YnVzYiAlJW1tNywgJSVtbTNcblx0IgkJCS8vIG5vbnplcm8gd2hlcmUgbmV3IHdlaWdodHMgYmlnZ2VyLCBlbHNlIDAKLQkJInB4b3IJJSVtbTQsICUlbW00XG5cdCIKLQkJInBjbXBlcWIgJSVtbTQsICUlbW0zXG5cdCIJCQkvLyBub3cgZmYgd2hlcmUgbmV3IGJldHRlciwgZWxzZSAwMAkKLQkJInBjbXBlcWIJJSVtbTMsICUlbW00XG5cdCIJCQkvLyBoZXJlIGZmIHdoZXJlIG9sZCBiZXR0ZXIsIGVsc2UgMDAKLQotCQkicGFuZAklJW1tMywgJSVtbTFcblx0IgkJCS8vIGtlZXAgb25seSBiZXR0ZXIgbmV3IGF2ZyBhbmQgYWJzCi0JCSJwYW5kCSUlbW0yLCAlJW1tM1xuXHQiCi0KLQkJInBhbmQJJSVtbTQsICUlbW02XG5cdCIKLQkJInBhbmQgICAgJSVtbTQsICUlbW03XG5cdCIKLQotCQkicG9yCQklJW1tMywgJSVtbTZcblx0IgkJCS8vIGFuZCBtZXJnZSBuZXcgJiBvbGQgdmFscyBrZWVwaW5nIGJlc3QKLQkJInBvcgkJJSVtbTEsICUlbW03XG5cdCIJCQkvLyAiCi0KLQkJLy8gaywgbQotCQkibW92cSAgICA0KCUlIlhCWCIpLCAlJW1tMFxuXHQiCQkvLyB2YWx1ZSBrIGZyb20gdG9wIHJpZ2h0CQkKLQkJIm1vdnEgICAgLTQoJSUiWEJYIiwgJSUiWENYIiksICUlbW0xXG5cdCIJLy8gdmFsdWUgbiBmcm9tIGJvdHRvbSBsZWZ0CQkJCi0JCSJtb3ZxCSUlbW0wLCAlJW1tNFxuXHQiCQkJCQkJCi0vLwkJcGF2Z2IJJSVtbTQsICUlbW0xCQkJCQkvLyBhdmcoayxtKQotCQlWX1BBVkdCICgiJSVtbTQiLCAiJSVtbTEiLCAiJSVtbTMiLCBfU2hpZnRNYXNrKQkvLyBhdmcoayxtKQotCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tM1xuXHQiCi0JCSJwc3VidXNiCSUlbW0xLCAlJW1tM1xuXHQiCi0JCSJwc3VidXNiICUlbW0wLCAlJW1tMVxuXHQiCi0JCSJwb3IJCSUlbW0xLCAlJW1tM1xuXHQiCQkJCQkvLyBhYnMoayxtKQotCQkibW92cQklJW1tMywgJSVtbTFcblx0IgkJCQkJLy8ga2VlcCBjb3B5Ci0gICAgICAgICAgICAKLQkJIm1vdnEJJSVtbTQsICUlbW0yXG5cdCIJCQkvLyBhdmcoayxtKQotCi0JCSJwc3VidXNiICUlbW03LCAlJW1tM1xuXHQiCQkJLy8gbm9uemVybyB3aGVyZSBuZXcgd2VpZ2h0cyBiaWdnZXIsIGVsc2UgMAotCQkicHhvcgklJW1tNCwgJSVtbTRcblx0IgotCQkicGNtcGVxYiAlJW1tNCwgJSVtbTNcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBuZXcgYmV0dGVyLCBlbHNlIDAwCQotCQkicGNtcGVxYgklJW1tMywgJSVtbTRcblx0IgkJCS8vIGhlcmUgZmYgd2hlcmUgb2xkIGJldHRlciwgZWxzZSAwMAotCi0JCSJwYW5kCSUlbW0zLCAlJW1tMVxuXHQiCQkJLy8ga2VlcCBvbmx5IGJldHRlciBuZXcgYXZnIGFuZCBhYnMKLQkJInBhbmQJJSVtbTIsICUlbW0zXG5cdCIKLSAgICAgICAgICAgIAotCQkicGFuZAklJW1tNCwgJSVtbTZcblx0IgotCQkicGFuZCAgICAlJW1tNCwgJSVtbTdcblx0IgotCi0JCSJwb3IJCSUlbW0zLCAlJW1tNlxuXHQiCQkJLy8gYW5kIG1lcmdlIG5ldyAmIG9sZCB2YWxzIGtlZXBpbmcgYmVzdAotCQkicG9yCQklJW1tMSwgJSVtbTdcblx0IgkJCS8vICIKLQotCQkvLyBiLGUKLQkJIm1vdnEgICAgKCUlIlhCWCIpLCAlJW1tMFxuXHQiCQkvLyB2YWx1ZSBiIGZyb20gdG9wIAkJCi0JCSJtb3ZxICAgICglJSJYQlgiLCAlJSJYQ1giKSwgJSVtbTFcblx0IgkvLyB2YWx1ZSBlIGZyb20gYm90dG9tIAotCi0vLyBXZSB3aWxsIGFsc28gY2FsYyBoZXJlIHRoZSBtYXgvbWluIHZhbHVlcyB0byBsYXRlciBsaW1pdCBjb21iCi0vLyBzbyB0aGUgbWF4IGV4Y3Vyc2lvbiB3aWxsIG5vdCBleGNlZWQgdGhlIE1heF9Db21iIGNvbnN0YW50Ci0KLSNpZmRlZiBTS0lQX1NFQVJDSAkJCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0vLwkJcG1pbnViCSUlbW0yLCAlJW1tMQotCQlWX1BNSU5VQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW00IikKLQotLy8JCXBtYXh1YgklJW1tNiwgJSVtbTIJCQkvLyBjbGlwIG91ciBjdXJyZW50IHJlc3VsdHMgc28gZmFyIHRvIGJlIGFib3ZlIHRoaXMKLQkJVl9QTUFYVUIgKCIlJW1tNiIsICIlJW1tMiIpCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0JCVZfUE1BWFVCICgiJSVtbTIiLCAiJSVtbTEiKQotLy8JCXBtaW51YgklJW1tNiwgJSVtbTIJCQkvLyBjbGlwIG91ciBjdXJyZW50IHJlc3VsdHMgc28gZmFyIHRvIGJlIGJlbG93IHRoaXMKLQkJVl9QTUlOVUIgKCIlJW1tNiIsICIlJW1tMiIsICIlJW1tNCIpCi0KLSNlbHNlCi0gICAgICAgICJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0JCSJtb3ZxCSglJSJYQVgiKSwgJSVtbTRcblx0IgotCQkicHN1YnVzYiAlJW1tNCwgJSVtbTJcblx0IgotCQkicHN1YnVzYiAlJW1tMCwgJSVtbTRcblx0IgotCQkicG9yCQklJW1tMiwgJSVtbTRcblx0IgkJCS8vIGFicyBkaWZmCi0JCQotCQkibW92cQklJW1tMSwgJSVtbTJcblx0IgotCQkibW92cQkoJSUiWEFYIiwgJSUiWENYIiksICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTMsICUlbW0yXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTEsICUlbW0zXG5cdCIKLQkJInBvcgkJJSVtbTIsICUlbW0zXG5cdCIJCQkvLyBhYnMgZGlmZgotLy8JCXBtYXh1YiAgJSVtbTMsICUlbW00CQkJLy8gdG9wIG9yIGJvdHRvbSBwaXhlbCBtb3ZlZCBtb3N0Ci0JCVZfUE1BWFVCICgiJSVtbTMiLCAiJSVtbTQiKQkJCS8vIHRvcCBvciBib3R0b20gcGl4ZWwgbW92ZWQgbW9zdAotICAgICAgICAicHN1YnVzYiAiX01heF9Nb3YiLCAlJW1tM1xuXHQiCQkvLyBtb3ZlZCBtb3JlIHRoYW4gYWxsb3dlZD8gb3IgZ29lcyB0byAwPwotCQkicHhvcgklJW1tNCwgJSVtbTRcblx0IgotCQkicGNtcGVxYiAlJW1tNCwgJSVtbTNcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBsb3cgbW90aW9uLCBlbHNlIGhpZ2ggbW90aW9uCi0JCQotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgotLy8JCXBtaW51YgklJW1tMiwgJSVtbTEKLQkJVl9QTUlOVUIgKCIlJW1tMiIsICIlJW1tMSIsICIlJW1tNCIpCi0KLS8vCQlwbWF4dWIJJSVtbTYsICUlbW0yCQkJLy8gY2xpcCBvdXIgY3VycmVudCByZXN1bHRzIHNvIGZhciB0byBiZSBhYm92ZSB0aGlzCi0JCVZfUE1BWFVCICgiJSVtbTYiLCAiJSVtbTIiKQotCi0JCSJwc3VidXNiICUlbW0zLCAlJW1tMlxuXHQiCQkJLy8gbWF5YmUgZGVjcmVhc2UgaXQgdG8gMDAwMC4uIGlmIG5vIHN1cnJvdW5kIG1vdGlvbgotCQkibW92cQklJW1tMiwgIl9NaW5fVmFscyJcblx0IgotCi0JCSJtb3ZxCSUlbW0wLCAlJW1tMlxuXHQiCi0JCVZfUE1BWFVCICgiJSVtbTIiLCAiJSVtbTEiKQotLy8JCXBtaW51YgklJW1tNiwgJSVtbTIJCQkvLyBjbGlwIG91ciBjdXJyZW50IHJlc3VsdHMgc28gZmFyIHRvIGJlIGJlbG93IHRoaXMKLQkJVl9QTUlOVUIgKCIlJW1tNiIsICIlJW1tMiIsICIlJW1tNCIpCi0gICAgICAgICJwYWRkdXNiICUlbW0zLCAlJW1tMlxuXHQiCQkJLy8gbWF5YmUgaW5jcmVhc2UgaXQgdG8gZmZmZmZmIGlmIG5vIHN1cnJvdW5kIG1vdGlvbgotCQkibW92cQklJW1tMiwgIl9NYXhfVmFscyJcblx0IgotI2VuZGlmCi0gICAgICAgIAotCQkibW92cQklJW1tMCwgJSVtbTJcblx0IgkJCQkJCQotLy8JCXBhdmdiCSUlbW0yLCAlJW1tMQkJCQkJLy8gYXZnKGIsZSkKLQkJVl9QQVZHQiAoIiUlbW0yIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykJLy8gYXZnKGIsZSkKLQkJCQkKLSAgICAgICAgIm1vdnEJJSVtbTAsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IJJSVtbTEsICUlbW0zXG5cdCIKLQkJInBzdWJ1c2IgJSVtbTAsICUlbW0xXG5cdCIKLQkJInBvcgkJJSVtbTEsICUlbW0zXG5cdCIJCQkvLyBhYnMoYyxkKQotCQkibW92cQklJW1tMywgJSVtbTFcblx0IgkJCS8vIGtlZXAgY29weSBvZiBkaWZmcwotCi0JCSJweG9yCSUlbW00LCAlJW1tNFxuXHQiCQkJCi0JCSJwc3VidXNiICUlbW03LCAlJW1tM1xuXHQiCQkJLy8gbm9uemVybyB3aGVyZSBuZXcgd2VpZ2h0cyBiaWdnZXIsIGVsc2UgMAotCQkicGNtcGVxYiAlJW1tNCwgJSVtbTNcblx0IgkJCS8vIG5vdyBmZiB3aGVyZSBuZXcgYmV0dGVyLCBlbHNlIDAwCQotCi0JCSJwY21wZXFiCSUlbW0zLCAlJW1tNFxuXHQiCQkJLy8gaGVyZSBmZiB3aGVyZSBvbGQgYmV0dGVyLCBlbHNlIDAwCi0KLQkJInBhbmQJJSVtbTMsICUlbW0xXG5cdCIKLQkJInBhbmQJJSVtbTMsICUlbW0yXG5cdCIKLQotCQkicGFuZCAgICAlJW1tNCwgJSVtbTZcblx0IgotCQkicGFuZCAgICAlJW1tNCwgJSVtbTdcblx0IgotCi0JCSJwb3IJCSUlbW0yLCAlJW1tNlxuXHQiCQkJLy8gb3VyIHgyIHZhbHVlCi0JCSJwb3IJCSUlbW0xLCAlJW1tN1xuXHQiCQkJLy8gb3VyIHgyIGRpZmZzCi0JCSJtb3ZxCSUlbW03LCAlJW1tNFxuXHQiCQkJLy8gc2F2ZSBhcyBib2IgdW5jZXJ0YWludHkgaW5kaWNhdG9yCi0KLSNlbHNlCi0KLSAgICAgICAgLy8gYSxmCi0gICAgICAgIGJlc3RbMF0gPSAocEJvYlstMl0gKyBwQm9iW3NyY19waXRjaDIgKyAyXSkgLyAyOwotCWRpZmZbMF0gPSBBQlMgKHBCb2JbLTJdIC0gcEJvYltzcmNfcGl0Y2gyICsgMl0pOwotICAgICAgICBiZXN0WzFdID0gKHBCb2JbLTFdICsgcEJvYltzcmNfcGl0Y2gyICsgM10pIC8gMjsKLQlkaWZmWzFdID0gQUJTIChwQm9iWy0xXSAtIHBCb2Jbc3JjX3BpdGNoMiArIDNdKTsKLQotICAgICAgICAvLyBjLGQKLQlpZiAoQUJTIChwQm9iWzJdIC0gcEJvYltzcmNfcGl0Y2gyIC0gMl0pIDwgZGlmZlswXSkgewotICAgICAgICAgIGJlc3RbMF0gPSAocEJvYlsyXSArIHBCb2Jbc3JjX3BpdGNoMiAtIDJdKSAvIDI7Ci0JICBkaWZmWzBdID0gQUJTIChwQm9iWzJdIC0gcEJvYltzcmNfcGl0Y2gyIC0gMl0pOwotCX0KLQotCWlmIChBQlMgKHBCb2JbM10gLSBwQm9iW3NyY19waXRjaDIgLSAxXSkgPCBkaWZmWzFdKSB7Ci0gICAgICAgICAgYmVzdFsxXSA9IChwQm9iWzNdICsgcEJvYltzcmNfcGl0Y2gyIC0gMV0pIC8gMjsKLQkgIGRpZmZbMV0gPSBBQlMgKHBCb2JbM10gLSBwQm9iW3NyY19waXRjaDIgLSAxXSk7Ci0JfQotCi0JLy8gaixuCi0JaWYgKEFCUyAocEJvYlstNF0gLSBwQm9iW3NyY19waXRjaDIgKyA0XSkgPCBkaWZmWzBdKSB7Ci0gICAgICAgICAgYmVzdFswXSA9IChwQm9iWy00XSArIHBCb2Jbc3JjX3BpdGNoMiArIDRdKSAvIDI7Ci0JICBkaWZmWzBdID0gQUJTIChwQm9iWy00XSAtIHBCb2Jbc3JjX3BpdGNoMiArIDRdKTsKLQl9Ci0KLQlpZiAoQUJTIChwQm9iWy0zXSAtIHBCb2Jbc3JjX3BpdGNoMiArIDVdKSA8IGRpZmZbMV0pIHsKLSAgICAgICAgICBiZXN0WzFdID0gKHBCb2JbLTNdICsgcEJvYltzcmNfcGl0Y2gyICsgNV0pIC8gMjsKLQkgIGRpZmZbMV0gPSBBQlMgKHBCb2JbLTNdIC0gcEJvYltzcmNfcGl0Y2gyICsgNV0pOwotCX0KLQotCS8vIGssbQotCWlmIChBQlMgKHBCb2JbNF0gLSBwQm9iW3NyY19waXRjaDIgLSA0XSkgPCBkaWZmWzBdKSB7Ci0gICAgICAgICAgYmVzdFswXSA9IChwQm9iWzRdICsgcEJvYltzcmNfcGl0Y2gyIC0gNF0pIC8gMjsKLQkgIGRpZmZbMF0gPSBBQlMgKHBCb2JbLTRdIC0gcEJvYltzcmNfcGl0Y2gyIC0gNF0pOwotCX0KLQotCWlmIChBQlMgKHBCb2JbNV0gLSBwQm9iW3NyY19waXRjaDIgLSAzXSkgPCBkaWZmWzFdKSB7Ci0gICAgICAgICAgYmVzdFsxXSA9IChwQm9iWzVdICsgcEJvYltzcmNfcGl0Y2gyIC0gM10pIC8gMjsKLQkgIGRpZmZbMV0gPSBBQlMgKHBCb2JbLTNdIC0gcEJvYltzcmNfcGl0Y2gyIC0gM10pOwotCX0KLQkvLyBrLG0KLQlpZiAoQUJTIChwQm9iWzRdIC0gcEJvYltzcmNfcGl0Y2gyIC0gNF0pIDwgZGlmZlswXSkgewotICAgICAgICAgIGJlc3RbMF0gPSAocEJvYls0XSArIHBCb2Jbc3JjX3BpdGNoMiAtIDRdKSAvIDI7Ci0JICBkaWZmWzBdID0gQUJTIChwQm9iWy00XSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDRdKTsKLQl9Ci0JCi0JaWYgKEFCUyAocEJvYls1XSAtIHBCb2Jbc3JjX3BpdGNoMiAtIDNdKSA8IGRpZmZbMV0pIHsKLSAgICAgICAgICBiZXN0WzFdID0gKHBCb2JbNV0gKyBwQm9iW3NyY19waXRjaDIgLSAzXSkgLyAyOwotCSAgZGlmZlsxXSA9IEFCUyAocEJvYlstM10gLSBwQm9iW3NyY19waXRjaDIgLSAzXSk7Ci0JfQotCi0vLyBXZSB3aWxsIGFsc28gY2FsYyBoZXJlIHRoZSBtYXgvbWluIHZhbHVlcyB0byBsYXRlciBsaW1pdCBjb21iCi0vLyBzbyB0aGUgbWF4IGV4Y3Vyc2lvbiB3aWxsIG5vdCBleGNlZWQgdGhlIE1heF9Db21iIGNvbnN0YW50Ci0KLSNpZmRlZiBTS0lQX1NFQVJDSAotCQliZXN0WzBdID0gQ0xBTVAgKGJlc3RbMF0sIE1JTiAocEJvYltzcmNfcGl0Y2gyXSwgcEJvYlswXSksIE1BWCAocEJvYltzcmNfcGl0Y2gyXSwgcEJvYlswXSkpOwotCQliZXN0WzFdID0gQ0xBTVAgKGJlc3RbMV0sIE1JTiAocEJvYltzcmNfcGl0Y2gyICsgMV0sIHBCb2JbMV0pLCBNQVggKHBCb2Jbc3JjX3BpdGNoMiArIDFdLCBwQm9iWzFdKSk7Ci0jZWxzZQotCQltb3ZbMF0gPSBNQVggKEFCUyAocEJvYlswXSAtIHBCb2JQWzBdKSwgQUJTIChwQm9iW3NyY19waXRjaDJdIC0gcEJvYlBbc3JjX3BpdGNoMl0pKTsKLQkJbW92WzFdID0gTUFYIChBQlMgKHBCb2JbMV0gLSBwQm9iUFsxXSksIEFCUyAocEJvYltzcmNfcGl0Y2gyICsgMV0gLSBwQm9iUFtzcmNfcGl0Y2gyICsgMV0pKTsKLQotCQlNaW5WYWxzWzBdID0gMDsKLQkJTWluVmFsc1sxXSA9IDA7Ci0JCU1heFZhbHNbMF0gPSAyNTU7Ci0JCU1heFZhbHNbMV0gPSAyNTU7Ci0KLQkJaWYgKG1vdlswXSA+IE1heF9Nb3ZbMF0pIHsKLQkJICBNaW5WYWxzWzBdID0gTUFYIChNSU4gKHBCb2JbMF0sIHBCb2Jbc3JjX3BpdGNoMl0pLCBiZXN0WzBdKTsKLQkJICBNYXhWYWxzWzBdID0gTUlOIChNQVggKHBCb2JbMF0sIHBCb2Jbc3JjX3BpdGNoMl0pLCBiZXN0WzBdKTsKLQkJfQotCQkKLQkJaWYgKG1vdlsxXSA+IE1heF9Nb3ZbMV0pIHsKLQkJICBNaW5WYWxzWzFdID0gTUFYIChNSU4gKHBCb2JbMV0sIHBCb2Jbc3JjX3BpdGNoMiArIDFdKSwgYmVzdFsxXSk7Ci0JCSAgTWF4VmFsc1sxXSA9IE1JTiAoTUFYIChwQm9iWzFdLCBwQm9iW3NyY19waXRjaDIgKyAxXSksIGJlc3RbMV0pOwotCQl9Ci0KLQkJYmVzdFswXSA9IENMQU1QIChiZXN0WzBdLCBNSU4gKHBCb2Jbc3JjX3BpdGNoMl0sIHBCb2JbMF0pLCBNQVggKHBCb2Jbc3JjX3BpdGNoMl0sIHBCb2JbMF0pKTsKLQkJYmVzdFsxXSA9IENMQU1QIChiZXN0WzFdLCBNSU4gKHBCb2Jbc3JjX3BpdGNoMiArIDFdLCBwQm9iWzFdKSwgTUFYIChwQm9iW3NyY19waXRjaDIgKyAxXSwgcEJvYlsxXSkpOwotI2VuZGlmCi0KLQkJYXZnWzBdID0gKHBCb2Jbc3JjX3BpdGNoMl0gKyBwQm9iWzBdKSAvIDI7Ci0JCWF2Z1sxXSA9IChwQm9iW3NyY19waXRjaDIgKyAxXSArIHBCb2JbMV0pIC8gMjsKLQkJZGlmZjJbMF0gPSBBQlMgKHBCb2Jbc3JjX3BpdGNoMl0gLSBwQm9iWzBdKTsKLQkJZGlmZjJbMV0gPSBBQlMgKHBCb2Jbc3JjX3BpdGNoMiArIDFdIC0gcEJvYlsxXSk7Ci0KLQkJaWYgKGRpZmYyWzBdIDwgZGlmZlswXSkgewotCQkgIGJlc3RbMF0gPSBhdmdbMF07Ci0JCSAgZGlmZlswXSA9IGRpZmYyWzBdOwotCQl9Ci0KLQkJaWYgKGRpZmYyWzFdIDwgZGlmZlsxXSkgewotCQkgIGJlc3RbMV0gPSBhdmdbMV07Ci0JCSAgZGlmZlsxXSA9IGRpZmYyWzFdOwotCQl9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC90b21zbW9jb21wbWFjcm9zLmggYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3RvbXNtb2NvbXAvdG9tc21vY29tcG1hY3Jvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTgxNDdlLi4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvdG9tc21vY29tcC90b21zbW9jb21wbWFjcm9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotLy8gRGVmaW5lIGEgZmV3IG1hY3JvcyBmb3IgQ1BVIGRlcGVuZGVudCBpbnN0cnVjdGlvbnMuIAotLy8gSSBzdXNwZWN0IEkgZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZSBDIG1hY3JvIHByZXByb2Nlc3NvciB3b3JrcyBidXQKLS8vIHRoaXMgc2VlbXMgdG8gZ2V0IHRoZSBqb2IgZG9uZS4gICAgICAgICAgLy8gVFJCIDcvMDEKLQotLy8gQkVGT1JFIFVTSU5HIFRIRVNFIFlPVSBNVVNUIFNFVDoKLQotLy8gI2RlZmluZSBTSU1EX1RZUEUgTU1YRVhUICAgICAgICAgICAgKG9yIE1NWCBvciAzRE5PVykKLQotLy8gc29tZSBtYWNyb3MgZm9yIHBhdmdiIGluc3RydWN0aW9uCi0vLyAgICAgIFZfUEFWR0IobW1yMSwgbW1yMiwgbW1yIHdvcmsgcmVnaXN0ZXIsIHNtYXNrKSBtbXIyIG1heSA9IG1tcncgaWYgeW91IGNhbiB0cmFzaCBpdAotCi0jZGVmaW5lIFZfUEFWR0JfTU1YKG1tcjEsIG1tcjIsIG1tcncsIHNtYXNrKSBcCi0JIm1vdnEgICAgIm1tcjIiLCAgIm1tcnciXG5cdCIgICAgICAgICAgICBcCi0JInBhbmQgICAgInNtYXNrIiwgIm1tcnciXG5cdCIgICAgICAgICAgICBcCi0JInBzcmx3ICAgJDEsICAgICAgIm1tcnciXG5cdCIgICAgICAgICAgICBcCi0JInBhbmQgICAgInNtYXNrIiwgIm1tcjEiXG5cdCIgICAgICAgICAgICBcCi0JInBzcmx3ICAgJDEsICAgICAgIm1tcjEiXG5cdCIgICAgICAgICAgICBcCi0JInBhZGR1c2IgIm1tcnciLCAgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9QQVZHQl9NTVhFWFQobW1yMSwgbW1yMiwgbW1ydywgc21hc2spICAgICAgInBhdmdiICAgIm1tcjIiLCAibW1yMSJcblx0IgotI2RlZmluZSBWX1BBVkdCXzNETk9XKG1tcjEsIG1tcjIsIG1tcncsIHNtYXNrKSAgICAicGF2Z3VzYiAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfUEFWR0IobW1yMSwgbW1yMiwgbW1ydywgc21hc2spICAgICAgICAgIFZfUEFWR0IyKG1tcjEsIG1tcjIsIG1tcncsIHNtYXNrLCBTSU1EX1RZUEUpIAotI2RlZmluZSBWX1BBVkdCMihtbXIxLCBtbXIyLCBtbXJ3LCBzbWFzaywgc2ltZF90eXBlKSBWX1BBVkdCMyhtbXIxLCBtbXIyLCBtbXJ3LCBzbWFzaywgc2ltZF90eXBlKSAKLSNkZWZpbmUgVl9QQVZHQjMobW1yMSwgbW1yMiwgbW1ydywgc21hc2ssIHNpbWRfdHlwZSkgVl9QQVZHQl8jI3NpbWRfdHlwZShtbXIxLCBtbXIyLCBtbXJ3LCBzbWFzaykgCi0KLS8vIHNvbWUgbWFjcm9zIGZvciBwbWF4dWIgaW5zdHJ1Y3Rpb24KLSNkZWZpbmUgVl9QTUFYVUJfTU1YKG1tcjEsIG1tcjIpIFwKLSAgICAicHN1YnVzYiAibW1yMiIsICJtbXIxIlxuXHQiIFwKLSAgICAicGFkZHVzYiAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfUE1BWFVCX01NWEVYVChtbXIxLCBtbXIyKSAgICAgICJwbWF4dWIgIm1tcjIiLCAibW1yMSJcblx0IgotI2RlZmluZSBWX1BNQVhVQl8zRE5PVyhtbXIxLCBtbXIyKSAgICBWX1BNQVhVQl9NTVgobW1yMSwgbW1yMikgIC8vIHVzZSBNTVggdmVyc2lvbgotI2RlZmluZSBWX1BNQVhVQihtbXIxLCBtbXIyKSAgICAgICAgICBWX1BNQVhVQjIobW1yMSwgbW1yMiwgU0lNRF9UWVBFKSAKLSNkZWZpbmUgVl9QTUFYVUIyKG1tcjEsIG1tcjIsIHNpbWRfdHlwZSkgVl9QTUFYVUIzKG1tcjEsIG1tcjIsIHNpbWRfdHlwZSkgCi0jZGVmaW5lIFZfUE1BWFVCMyhtbXIxLCBtbXIyLCBzaW1kX3R5cGUpIFZfUE1BWFVCXyMjc2ltZF90eXBlKG1tcjEsIG1tcjIpIAotCi0vLyBzb21lIG1hY3JvcyBmb3IgcG1pbnViIGluc3RydWN0aW9uCi0vLyAgICAgIFZfUE1JTlVCKG1tcjEsIG1tcjIsIG1tciB3b3JrIHJlZ2lzdGVyKSAgICAgbW1yMiBtYXkgTk9UID0gbW1ydwotI2RlZmluZSBWX1BNSU5VQl9NTVgobW1yMSwgbW1yMiwgbW1ydykgXAotICAgICJwY21wZXFiICJtbXJ3IiwgIm1tcnciXG5cdCIgICAgICAgXAotICAgICJwc3VidXNiICJtbXIyIiwgIm1tcnciXG5cdCIgICAgICAgXAotICAgICJwYWRkdXNiICJtbXJ3IiwgIm1tcjEiXG5cdCIgICAgICAgXAotICAgICJwc3VidXNiICJtbXJ3IiwgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9QTUlOVUJfTU1YRVhUKG1tcjEsIG1tcjIsIG1tcncpICAgICAgInBtaW51YiAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfUE1JTlVCXzNETk9XKG1tcjEsIG1tcjIsIG1tcncpICAgIFZfUE1JTlVCX01NWChtbXIxLCBtbXIyLCBtbXJ3KSAgLy8gdXNlIE1NWCB2ZXJzaW9uCi0jZGVmaW5lIFZfUE1JTlVCKG1tcjEsIG1tcjIsIG1tcncpICAgICAgICAgIFZfUE1JTlVCMihtbXIxLCBtbXIyLCBtbXJ3LCBTSU1EX1RZUEUpIAotI2RlZmluZSBWX1BNSU5VQjIobW1yMSwgbW1yMiwgbW1ydywgc2ltZF90eXBlKSBWX1BNSU5VQjMobW1yMSwgbW1yMiwgbW1ydywgc2ltZF90eXBlKSAKLSNkZWZpbmUgVl9QTUlOVUIzKG1tcjEsIG1tcjIsIG1tcncsIHNpbWRfdHlwZSkgVl9QTUlOVUJfIyNzaW1kX3R5cGUobW1yMSwgbW1yMiwgbW1ydykgCi0KLS8vIHNvbWUgbWFjcm9zIGZvciBtb3ZudHEgaW5zdHJ1Y3Rpb24KLS8vICAgICAgVl9NT1ZOVFEobW1yMSwgbW1yMikgCi0jZGVmaW5lIFZfTU9WTlRRX01NWChtbXIxLCBtbXIyKSAgICAgICJtb3ZxICAgIm1tcjIiLCAibW1yMSJcblx0IgotI2RlZmluZSBWX01PVk5UUV8zRE5PVyhtbXIxLCBtbXIyKSAgICAibW92cSAgICJtbXIyIiwgIm1tcjEiXG5cdCIKLSNkZWZpbmUgVl9NT1ZOVFFfTU1YRVhUKG1tcjEsIG1tcjIpICAgICAgIm1vdm50cSAibW1yMiIsICJtbXIxIlxuXHQiCi0jZGVmaW5lIFZfTU9WTlRRKG1tcjEsIG1tcjIpICAgICAgICAgIFZfTU9WTlRRMihtbXIxLCBtbXIyLCBTSU1EX1RZUEUpIAotI2RlZmluZSBWX01PVk5UUTIobW1yMSwgbW1yMiwgc2ltZF90eXBlKSBWX01PVk5UUTMobW1yMSwgbW1yMiwgc2ltZF90eXBlKSAKLSNkZWZpbmUgVl9NT1ZOVFEzKG1tcjEsIG1tcjIsIHNpbWRfdHlwZSkgVl9NT1ZOVFFfIyNzaW1kX3R5cGUobW1yMSwgbW1yMikKLQotLy8gZW5kIG9mIG1hY3JvcwotCi0jaWZkZWYgSVNfU1NFMgotCi0jZGVmaW5lIE1FUkdFNFBJWGF2ZyhQQUREUjEsIFBBRERSMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92ZHF1ICAiUEFERFIxIiwgICAlJXhtbTBcblx0IiAgICAgICAvKiBvdXIgNCBwaXhlbHMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJtb3ZkcXUgICJQQUREUjIiLCAgICUleG1tMVxuXHQiICAgICAgIC8qIG91ciBwaXhlbDIgdmFsdWUgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIm1vdmRxYSAgJSV4bW0wLCAgICAgJSV4bW0yXG5cdCIgICAgICAgLyogYW5vdGhlciBjb3B5IG9mIG91ciBwaXhlbDEgdmFsdWUgKi8gICAgICAgIFwKLSAgICAibW92ZHFhICAlJXhtbTEsICAgICAlJXhtbTNcblx0IiAgICAgICAvKiBhbm90aGVyIGNvcHkgb2Ygb3VyIHBpeGVsMSB2YWx1ZSAqLyAgICAgICAgXAotICAgICJwc3VidXNiICUleG1tMSwgICAgICUleG1tMlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBzdWJ1c2IgJSV4bW0wLCAgICAgJSV4bW0zXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicG9yICAgICAlJXhtbTMsICAgICAlJXhtbTJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwYXZnYiAgICUleG1tMSwgICAgICUleG1tMFxuXHQiICAgICAgIC8qIGF2ZyBvZiAyIHBpeGVscyAqLyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIm1vdmRxYSAgJSV4bW0yLCAgICAgJSV4bW0zXG5cdCIgICAgICAgLyogYW5vdGhlciBjb3B5IG9mIG91ciBvdXIgd2VpZ2h0cyAqLyAgICAgICAgIFwKLSAgICAicHhvciAgICAlJXhtbTEsICAgICAlJXhtbTFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwc3VidXNiICUleG1tNywgICAgICUleG1tM1xuXHQiICAgICAgIC8qIG5vbnplcm8gd2hlcmUgb2xkIHdlaWdodHMgbG93ZXIsIGVsc2UgMCAqLyBcCi0gICAgInBjbXBlcWIgJSV4bW0xLCAgICAgJSV4bW0zXG5cdCIgICAgICAgLyogbm93IGZmIHdoZXJlIG5ldyBiZXR0ZXIsIGVsc2UgMDAgKi8gICAgICAgIFwKLSAgICAicGNtcGVxYiAlJXhtbTMsICAgICAlJXhtbTFcblx0IiAgICAgICAvKiBoZXJlIGZmIHdoZXJlIG9sZCBiZXR0ZXIsIGVsc2UgMDAgKi8gICAgICAgXAotICAgICJwYW5kICAgICUleG1tMywgICAgICUleG1tMFxuXHQiICAgICAgIC8qIGtlZXAgb25seSBiZXR0ZXIgbmV3IHBpeGVscyAqLyAgICAgICAgICAgICBcCi0gICAgInBhbmQgICAgJSV4bW0zLCAgICAgJSV4bW0yXG5cdCIgICAgICAgLyogYW5kIHdlaWdodHMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicGFuZCAgICAlJXhtbTEsICAgICAlJXhtbTVcblx0IiAgICAgICAvKiBrZWVwIG9ubHkgYmV0dGVyIG9sZCBwaXhlbHMgKi8gICAgICAgICAgICAgXAotICAgICJwYW5kICAgICUleG1tMSwgICAgICUleG1tN1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBvciAgICAgJSV4bW0wLCAgICAgJSV4bW01XG5cdCIgICAgICAgLyogYW5kIG1lcmdlIG5ldyAmIG9sZCB2YWxzICovICAgICAgICAgICAgICAgIFwKLSAgICAicG9yICAgICAlJXhtbTIsICAgICAlJXhtbTdcblx0IgotCi0jZGVmaW5lIE1FUkdFNFBJWGF2Z0goUEFERFIxQSwgUEFERFIxQiwgUEFERFIyQSwgUEFERFIyQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92ZHF1ICAiUEFERFIxQSIsICAgJSV4bW0wXG5cdCIgICAgICAvKiBvdXIgNCBwaXhlbHMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJtb3ZkcXUgICJQQUREUjJBIiwgICAlJXhtbTFcblx0IiAgICAgIC8qIG91ciBwaXhlbDIgdmFsdWUgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIm1vdmRxdSAgIlBBRERSMUIiLCAgICUleG1tMlxuXHQiICAgICAgLyogb3VyIDQgcGl4ZWxzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92ZHF1ICAiUEFERFIyQiIsICAgJSV4bW0zXG5cdCIgICAgICAvKiBvdXIgcGl4ZWwyIHZhbHVlICovICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwYXZnYiAgICUleG1tMiwgICAgICAlJXhtbTBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBhdmdiICAgJSV4bW0zLCAgICAgICUleG1tMVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92ZHFhICAlJXhtbTAsICAgICAgJSV4bW0yXG5cdCIgICAgICAvKiBhbm90aGVyIGNvcHkgb2Ygb3VyIHBpeGVsMSB2YWx1ZSAqLyAgICAgICAgXAotICAgICJtb3ZkcWEgICUleG1tMSwgICAgICAlJXhtbTNcblx0IiAgICAgIC8qIGFub3RoZXIgY29weSBvZiBvdXIgcGl4ZWwxIHZhbHVlICovICAgICAgICBcCi0gICAgInBzdWJ1c2IgJSV4bW0xLCAgICAgICUleG1tMlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicHN1YnVzYiAlJXhtbTAsICAgICAgJSV4bW0zXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwb3IgICAgICUleG1tMywgICAgICAlJXhtbTJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBhdmdiICAgJSV4bW0xLCAgICAgICUleG1tMFxuXHQiICAgICAgLyogYXZnIG9mIDIgcGl4ZWxzICovICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92ZHFhICAlJXhtbTIsICAgICAgJSV4bW0zXG5cdCIgICAgICAvKiBhbm90aGVyIGNvcHkgb2Ygb3VyIG91ciB3ZWlnaHRzICovICAgICAgICAgXAotICAgICJweG9yICAgICUleG1tMSwgICAgICAlJXhtbTFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBzdWJ1c2IgJSV4bW03LCAgICAgICUleG1tM1xuXHQiICAgICAgLyogbm9uemVybyB3aGVyZSBvbGQgd2VpZ2h0cyBsb3dlciwgZWxzZSAwICovIFwKLSAgICAicGNtcGVxYiAlJXhtbTEsICAgICAgJSV4bW0zXG5cdCIgICAgICAvKiBub3cgZmYgd2hlcmUgbmV3IGJldHRlciwgZWxzZSAwMCAqLyAgICAgICAgXAotICAgICJwY21wZXFiICUleG1tMywgICAgICAlJXhtbTFcblx0IiAgICAgIC8qIGhlcmUgZmYgd2hlcmUgb2xkIGJldHRlciwgZWxzZSAwMCAqLyAgICAgICBcCi0gICAgInBhbmQgICAgJSV4bW0zLCAgICAgICUleG1tMFxuXHQiICAgICAgLyoga2VlcCBvbmx5IGJldHRlciBuZXcgcGl4ZWxzICovICAgICAgICAgICAgIFwKLSAgICAicGFuZCAgICAlJXhtbTMsICAgICAgJSV4bW0yXG5cdCIgICAgICAvKiBhbmQgd2VpZ2h0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwYW5kICAgICUleG1tMSwgICAgICAlJXhtbTVcblx0IiAgICAgIC8qIGtlZXAgb25seSBiZXR0ZXIgb2xkIHBpeGVscyAqLyAgICAgICAgICAgICBcCi0gICAgInBhbmQgICAgJSV4bW0xLCAgICAgICUleG1tN1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicG9yICAgICAlJXhtbTAsICAgICAgJSV4bW01XG5cdCIgICAgICAvKiBhbmQgbWVyZ2UgbmV3ICYgb2xkIHZhbHMgKi8gICAgICAgICAgICAgICAgXAotICAgICJwb3IgICAgICUleG1tMiwgICAgICAlJXhtbTdcblx0IgotCi0jZGVmaW5lIFJFU0VUX0NIUk9NQSAicG9yICJfVVZNYXNrIiwgJSV4bW03XG5cdCIKLQotI2Vsc2UgLy8gaWZkZWYgSVNfU1NFMgotCi0jZGVmaW5lIE1FUkdFNFBJWGF2ZyhQQUREUjEsIFBBRERSMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJtb3ZxICAgICJQQUREUjEiLCAgICUlbW0wXG5cdCIgICAgICAgLyogb3VyIDQgcGl4ZWxzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92cSAgICAiUEFERFIyIiwgICAlJW1tMVxuXHQiICAgICAgIC8qIG91ciBwaXhlbDIgdmFsdWUgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIm1vdnEgICAgJSVtbTAsICAgICAgJSVtbTJcblx0IiAgICAgICAvKiBhbm90aGVyIGNvcHkgb2Ygb3VyIHBpeGVsMSB2YWx1ZSAqLyAgICAgICAgXAotICAgICJtb3ZxICAgICUlbW0xLCAgICAgICUlbW0zXG5cdCIgICAgICAgLyogYW5vdGhlciBjb3B5IG9mIG91ciBwaXhlbDEgdmFsdWUgKi8gICAgICAgIFwKLSAgICAicHN1YnVzYiAlJW1tMSwgICAgICAlJW1tMlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBzdWJ1c2IgJSVtbTAsICAgICAgJSVtbTNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwb3IgICAgICUlbW0zLCAgICAgICUlbW0yXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWX1BBVkdCICgiJSVtbTAiLCAiJSVtbTEiLCAiJSVtbTMiLCBfU2hpZnRNYXNrKSAvKiBhdmcgb2YgMiBwaXhlbHMgKi8gICAgICAgICAgICAgICBcCi0gICAgIm1vdnEgICAgJSVtbTIsICAgICAgJSVtbTNcblx0IiAgICAgICAvKiBhbm90aGVyIGNvcHkgb2Ygb3VyIG91ciB3ZWlnaHRzICovICAgICAgICAgXAotICAgICJweG9yICAgICUlbW0xLCAgICAgICUlbW0xXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicHN1YnVzYiAlJW1tNywgICAgICAlJW1tM1xuXHQiICAgICAgIC8qIG5vbnplcm8gd2hlcmUgb2xkIHdlaWdodHMgbG93ZXIsIGVsc2UgMCAqLyBcCi0gICAgInBjbXBlcWIgJSVtbTEsICAgICAgJSVtbTNcblx0IiAgICAgICAvKiBub3cgZmYgd2hlcmUgbmV3IGJldHRlciwgZWxzZSAwMCAqLyAgICAgICAgXAotICAgICJwY21wZXFiICUlbW0zLCAgICAgICUlbW0xXG5cdCIgICAgICAgLyogaGVyZSBmZiB3aGVyZSBvbGQgYmV0dGVyLCBlbHNlIDAwICovICAgICAgIFwKLSAgICAicGFuZCAgICAlJW1tMywgICAgICAlJW1tMFxuXHQiICAgICAgIC8qIGtlZXAgb25seSBiZXR0ZXIgbmV3IHBpeGVscyAqLyAgICAgICAgICAgICBcCi0gICAgInBhbmQgICAgJSVtbTMsICAgICAgJSVtbTJcblx0IiAgICAgICAvKiBhbmQgd2VpZ2h0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwYW5kICAgICUlbW0xLCAgICAgICUlbW01XG5cdCIgICAgICAgLyoga2VlcCBvbmx5IGJldHRlciBvbGQgcGl4ZWxzICovICAgICAgICAgICAgIFwKLSAgICAicGFuZCAgICAlJW1tMSwgICAgICAlJW1tN1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBvciAgICAgJSVtbTAsICAgICAgJSVtbTVcblx0IiAgICAgICAvKiBhbmQgbWVyZ2UgbmV3ICYgb2xkIHZhbHMgKi8gICAgICAgICAgICAgICAgXAotICAgICJwb3IgICAgICUlbW0yLCAgICAgICUlbW03XG5cdCIKLQotI2RlZmluZSBNRVJHRTRQSVhhdmdIKFBBRERSMUEsIFBBRERSMUIsIFBBRERSMkEsIFBBRERSMkIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92cSAgICAiUEFERFIxQSIsICAgJSVtbTBcblx0IiAgICAgIC8qIG91ciA0IHBpeGVscyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIm1vdnEgICAgIlBBRERSMkEiLCAgICUlbW0xXG5cdCIgICAgICAvKiBvdXIgcGl4ZWwyIHZhbHVlICovICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJtb3ZxICAgICJQQUREUjFCIiwgICAlJW1tMlxuXHQiICAgICAgLyogb3VyIDQgcGl4ZWxzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92cSAgICAiUEFERFIyQiIsICAgJSVtbTNcblx0IiAgICAgIC8qIG91ciBwaXhlbDIgdmFsdWUgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVl9QQVZHQigiJSVtbTAiLCAiJSVtbTIiLCAiJSVtbTIiLCBfU2hpZnRNYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFZfUEFWR0IoIiUlbW0xIiwgIiUlbW0zIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAibW92cSAgICAlJW1tMCwgICAgICAgJSVtbTJcblx0IiAgICAgIC8qIGFub3RoZXIgY29weSBvZiBvdXIgcGl4ZWwxIHZhbHVlICovICAgICAgICBcCi0gICAgIm1vdnEgICAgJSVtbTEsICAgICAgICUlbW0zXG5cdCIgICAgICAvKiBhbm90aGVyIGNvcHkgb2Ygb3VyIHBpeGVsMSB2YWx1ZSAqLyAgICAgICAgXAotICAgICJwc3VidXNiICUlbW0xLCAgICAgICAlJW1tMlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicHN1YnVzYiAlJW1tMCwgICAgICAgJSVtbTNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBvciAgICAgJSVtbTMsICAgICAgICUlbW0yXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFZfUEFWR0IoIiUlbW0wIiwgIiUlbW0xIiwgIiUlbW0zIiwgX1NoaWZ0TWFzaykgICAvKiBhdmcgb2YgMiBwaXhlbHMgKi8gICAgICAgICAgICAgIFwKLSAgICAibW92cSAgICAlJW1tMiwgICAgICAgJSVtbTNcblx0IiAgICAgIC8qIGFub3RoZXIgY29weSBvZiBvdXIgb3VyIHdlaWdodHMgKi8gICAgICAgICBcCi0gICAgInB4b3IgICAgJSVtbTEsICAgICAgICUlbW0xXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJwc3VidXNiICUlbW03LCAgICAgICAlJW1tM1xuXHQiICAgICAgLyogbm9uemVybyB3aGVyZSBvbGQgd2VpZ2h0cyBsb3dlciwgZWxzZSAwICovIFwKLSAgICAicGNtcGVxYiAlJW1tMSwgICAgICAgJSVtbTNcblx0IiAgICAgIC8qIG5vdyBmZiB3aGVyZSBuZXcgYmV0dGVyLCBlbHNlIDAwICovICAgICAgICBcCi0gICAgInBjbXBlcWIgJSVtbTMsICAgICAgICUlbW0xXG5cdCIgICAgICAvKiBoZXJlIGZmIHdoZXJlIG9sZCBiZXR0ZXIsIGVsc2UgMDAgKi8gICAgICAgXAotICAgICJwYW5kICAgICUlbW0zLCAgICAgICAlJW1tMFxuXHQiICAgICAgLyoga2VlcCBvbmx5IGJldHRlciBuZXcgcGl4ZWxzICovICAgICAgICAgICAgIFwKLSAgICAicGFuZCAgICAlJW1tMywgICAgICAgJSVtbTJcblx0IiAgICAgIC8qIGFuZCB3ZWlnaHRzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInBhbmQgICAgJSVtbTEsICAgICAgICUlbW01XG5cdCIgICAgICAvKiBrZWVwIG9ubHkgYmV0dGVyIG9sZCBwaXhlbHMgKi8gICAgICAgICAgICAgXAotICAgICJwYW5kICAgICUlbW0xLCAgICAgICAlJW1tN1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicG9yICAgICAlJW1tMCwgICAgICAgJSVtbTVcblx0IiAgICAgIC8qIGFuZCBtZXJnZSBuZXcgJiBvbGQgdmFscyAqLyAgICAgICAgICAgICAgICBcCi0gICAgInBvciAgICAgJSVtbTIsICAgICAgICUlbW03XG5cdCIKLQotI2RlZmluZSBSRVNFVF9DSFJPTUEgInBvciAiX1VWTWFzayIsICUlbW03XG5cdCIKLQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS92ZmlyLmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA2MTg5NS4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3ZmaXIuYworKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotICoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJpbGx5IEJpZ2dzIDx2ZWt0b3JAZHVtYnRlcm0ubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzIEZhYnJpY2UgQmVsbGFyZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZnJvbSBmZm1wZWcsIHNlZSBodHRwOi8vZmZtcGVnLm9yZy8gKExHUEwpCi0gKiBhbmQgbW9kaWZpY2F0aW9ucyBieSBCaWxseSBCaWdncy4KLSAqCi0gKiBSZWxpY2Vuc2VkIGZvciBHU3RyZWFtZXIgZnJvbSBHUEwgdG8gTEdQTCB3aXRoIHBlcm1pdCBmcm9tIEJpbGx5IEJpZ2dzLgotICogU2VlOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NzgKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0ZGVpbnRlcmxhY2VtZXRob2QuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpZmRlZiBIQVZFX09SQwotI2luY2x1ZGUgPG9yYy9vcmMuaD4KLSNlbmRpZgotI2luY2x1ZGUgInR2dGltZS5oIgotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9WRklSCShnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3ZmaXJfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUihvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUikpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUl9DTEFTUyhrbGFzcykJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUl9HRVRfQ0xBU1Mob2JqKQkoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9WRklSLCBHc3REZWludGVybGFjZU1ldGhvZFZGSVJDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUihvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUiwgR3N0RGVpbnRlcmxhY2VNZXRob2RWRklSKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9WRklSX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9WRklSLCBHc3REZWludGVybGFjZU1ldGhvZFZGSVJDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfVkZJUl9DQVNUKG9iaikJKChHc3REZWludGVybGFjZU1ldGhvZFZGSVIqKShvYmopKQotCi1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3ZmaXJfZ2V0X3R5cGUgKHZvaWQpOwotCi10eXBlZGVmIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kIEdzdERlaW50ZXJsYWNlTWV0aG9kVkZJUjsKLQotdHlwZWRlZiBHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZENsYXNzIEdzdERlaW50ZXJsYWNlTWV0aG9kVkZJUkNsYXNzOwotCi0vKgotICogVGhlIE1QRUcyIHNwZWMgdXNlcyBhIHNsaWdodGx5IGhhcnNoZXIgZmlsdGVyLCB0aGV5IHNwZWNpZnkKLSAqIFstMSA4IDIgOCAtMV0uICBmZm1wZWcgdXNlcyBhIHNpbWlsYXIgZmlsdGVyIGJ1dCB3aXRoIG1vcmUgb2YKLSAqIGEgdGVuZGFuY3kgdG8gYmx1ciB0aGFuIHRvIHVzZSB0aGUgbG9jYWwgaW5mb3JtYXRpb24uICBUaGUKLSAqIGZpbHRlciB0YXBzIGhlcmUgYXJlOiBbLTEgNCAyIDQgLTFdLgotICovCi0KLSAvKgotICAqIEMgaW1wbGVtZW50YXRpb24uCi0gICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRlaW50ZXJsYWNlX2MgKGd1aW50OCAqIGRzdCwgY29uc3QgZ3VpbnQ4ICogbHVtX200LCBjb25zdCBndWludDggKiBsdW1fbTMsCi0gICAgY29uc3QgZ3VpbnQ4ICogbHVtX20yLCBjb25zdCBndWludDggKiBsdW1fbTEsIGNvbnN0IGd1aW50OCAqIGx1bSwgZ2ludCBzaXplKQotewotICBpZiAobHVtX20yID09IE5VTEwpIHsKLSAgICBkZWludGVybGFjZV9saW5lX2xpbmVhciAoZHN0LCBsdW1fbTEsIGx1bV9tMywgc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZGVpbnRlcmxhY2VfbGluZV92ZmlyIChkc3QsIGx1bV9tNCwgbHVtX20zLCBsdW1fbTIsIGx1bV9tMSwgbHVtLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBkc3QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIGNvbnN0IGd1aW50OCAqbHVtX200ID0gc2NhbmxpbmVzLT50dDE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20zID0gc2NhbmxpbmVzLT50MDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTIgPSBzY2FubGluZXMtPm0xOwotICBjb25zdCBndWludDggKmx1bV9tMSA9IHNjYW5saW5lcy0+YjA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtID0gc2NhbmxpbmVzLT5iYjE7Ci0KLSAgZGVpbnRlcmxhY2VfYyAoZHN0LCBsdW1fbTQsIGx1bV9tMywgbHVtX20yLCBsdW1fbTEsIGx1bSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9saW5lX3BsYW5hcl95X2MgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogZHN0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBjb25zdCBndWludDggKmx1bV9tNCA9IHNjYW5saW5lcy0+dHQxOwotICBjb25zdCBndWludDggKmx1bV9tMyA9IHNjYW5saW5lcy0+dDA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20yID0gc2NhbmxpbmVzLT5tMTsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTEgPSBzY2FubGluZXMtPmIwOwotICBjb25zdCBndWludDggKmx1bSA9IHNjYW5saW5lcy0+YmIxOwotCi0gIGRlaW50ZXJsYWNlX2MgKGRzdCwgbHVtX200LCBsdW1fbTMsIGx1bV9tMiwgbHVtX20xLCBsdW0sIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2VfbGluZV9wbGFuYXJfdV9jIChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsIGd1aW50OCAqIGRzdCwKLSAgICBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTQgPSBzY2FubGluZXMtPnR0MTsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTMgPSBzY2FubGluZXMtPnQwOwotICBjb25zdCBndWludDggKmx1bV9tMiA9IHNjYW5saW5lcy0+bTE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20xID0gc2NhbmxpbmVzLT5iMDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW0gPSBzY2FubGluZXMtPmJiMTsKLQotICBkZWludGVybGFjZV9jIChkc3QsIGx1bV9tNCwgbHVtX20zLCBsdW1fbTIsIGx1bV9tMSwgbHVtLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX2xpbmVfcGxhbmFyX3ZfYyAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBkc3QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIGNvbnN0IGd1aW50OCAqbHVtX200ID0gc2NhbmxpbmVzLT50dDE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20zID0gc2NhbmxpbmVzLT50MDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTIgPSBzY2FubGluZXMtPm0xOwotICBjb25zdCBndWludDggKmx1bV9tMSA9IHNjYW5saW5lcy0+YjA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtID0gc2NhbmxpbmVzLT5iYjE7Ci0KLSAgZGVpbnRlcmxhY2VfYyAoZHN0LCBsdW1fbTQsIGx1bV9tMywgbHVtX20yLCBsdW1fbTEsIGx1bSwgc2l6ZSk7Ci19Ci0KLSN1bmRlZiBCVUlMRF9YODZfQVNNCi0KLSNpZmRlZiBCVUlMRF9YODZfQVNNCi0jaW5jbHVkZSAibW14LmgiCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2VfbW14IChndWludDggKiBkc3QsIGNvbnN0IGd1aW50OCAqIGx1bV9tNCwgY29uc3QgZ3VpbnQ4ICogbHVtX20zLAotICAgIGNvbnN0IGd1aW50OCAqIGx1bV9tMiwgY29uc3QgZ3VpbnQ4ICogbHVtX20xLCBjb25zdCBndWludDggKiBsdW0sIGdpbnQgc2l6ZSkKLXsKLSAgbW14X3Qgcm91bmRlcjsKLQotICByb3VuZGVyLnV3WzBdID0gNDsKLSAgcm91bmRlci51d1sxXSA9IDQ7Ci0gIHJvdW5kZXIudXdbMl0gPSA0OwotICByb3VuZGVyLnV3WzNdID0gNDsKLSAgcHhvcl9yMnIgKG1tNywgbW03KTsKLSAgbW92cV9tMnIgKHJvdW5kZXIsIG1tNik7Ci0KLSAgZm9yICg7IHNpemUgPiAzOyBzaXplIC09IDQpIHsKLSAgICBtb3ZkX20yciAoKmx1bV9tNCwgbW0wKTsKLSAgICBtb3ZkX20yciAoKmx1bV9tMywgbW0xKTsKLSAgICBtb3ZkX20yciAoKmx1bV9tMiwgbW0yKTsKLSAgICBtb3ZkX20yciAoKmx1bV9tMSwgbW0zKTsKLSAgICBtb3ZkX20yciAoKmx1bSwgbW00KTsKLSAgICBwdW5wY2tsYndfcjJyIChtbTcsIG1tMCk7Ci0gICAgcHVucGNrbGJ3X3IyciAobW03LCBtbTEpOwotICAgIHB1bnBja2xid19yMnIgKG1tNywgbW0yKTsKLSAgICBwdW5wY2tsYndfcjJyIChtbTcsIG1tMyk7Ci0gICAgcHVucGNrbGJ3X3IyciAobW03LCBtbTQpOwotICAgIHBhZGR3X3IyciAobW0zLCBtbTEpOwotICAgIHBzbGx3X2kyciAoMSwgbW0yKTsKLSAgICBwYWRkd19yMnIgKG1tNCwgbW0wKTsKLSAgICBwc2xsd19pMnIgKDIsIG1tMSk7ICAgICAgICAgLy8gMgotICAgIHBhZGR3X3IyciAobW02LCBtbTIpOwotICAgIHBhZGR3X3IyciAobW0yLCBtbTEpOwotICAgIHBzdWJ1c3dfcjJyIChtbTAsIG1tMSk7Ci0gICAgcHNybHdfaTJyICgzLCBtbTEpOyAgICAgICAgIC8vIDMKLSAgICBwYWNrdXN3Yl9yMnIgKG1tNywgbW0xKTsKLSAgICBtb3ZkX3IybSAobW0xLCAqZHN0KTsKLSAgICBsdW1fbTQgKz0gNDsKLSAgICBsdW1fbTMgKz0gNDsKLSAgICBsdW1fbTIgKz0gNDsKLSAgICBsdW1fbTEgKz0gNDsKLSAgICBsdW0gKz0gNDsKLSAgICBkc3QgKz0gNDsKLSAgfQotICBlbW1zICgpOwotCi0gIC8qIEhhbmRsZSBvZGQgd2lkdGhzICovCi0gIGlmIChzaXplID4gMCkKLSAgICBkZWludGVybGFjZV9jIChkc3QsIGx1bV9tNCwgbHVtX20zLCBsdW1fbTIsIGx1bV9tMSwgbHVtLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX21teCAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBkc3QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMpCi17Ci0gIGNvbnN0IGd1aW50OCAqbHVtX200ID0gc2NhbmxpbmVzLT50dDE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20zID0gc2NhbmxpbmVzLT50MDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTIgPSBzY2FubGluZXMtPm0xOwotICBjb25zdCBndWludDggKmx1bV9tMSA9IHNjYW5saW5lcy0+YjA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtID0gc2NhbmxpbmVzLT5iYjE7Ci0gIGdpbnQgc2l6ZSA9IHNlbGYtPnBhcmVudC5yb3dfc3RyaWRlWzBdOwotCi0gIGRlaW50ZXJsYWNlX21teCAoZHN0LCBsdW1fbTQsIGx1bV9tMywgbHVtX20yLCBsdW1fbTEsIGx1bSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9saW5lX3BsYW5hcl95X21teCAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBkc3QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMpCi17Ci0gIGNvbnN0IGd1aW50OCAqbHVtX200ID0gc2NhbmxpbmVzLT50dDE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20zID0gc2NhbmxpbmVzLT50MDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTIgPSBzY2FubGluZXMtPm0xOwotICBjb25zdCBndWludDggKmx1bV9tMSA9IHNjYW5saW5lcy0+YjA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtID0gc2NhbmxpbmVzLT5iYjE7Ci0gIGdpbnQgc2l6ZSA9IHNlbGYtPnBhcmVudC5yb3dfc3RyaWRlWzBdOwotCi0gIGRlaW50ZXJsYWNlX21teCAoZHN0LCBsdW1fbTQsIGx1bV9tMywgbHVtX20yLCBsdW1fbTEsIGx1bSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9saW5lX3BsYW5hcl91X21teCAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBkc3QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMpCi17Ci0gIGNvbnN0IGd1aW50OCAqbHVtX200ID0gc2NhbmxpbmVzLT50dDE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20zID0gc2NhbmxpbmVzLT50MDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTIgPSBzY2FubGluZXMtPm0xOwotICBjb25zdCBndWludDggKmx1bV9tMSA9IHNjYW5saW5lcy0+YjA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtID0gc2NhbmxpbmVzLT5iYjE7Ci0gIGdpbnQgc2l6ZSA9IHNlbGYtPnBhcmVudC5yb3dfc3RyaWRlWzFdOwotCi0gIGRlaW50ZXJsYWNlX21teCAoZHN0LCBsdW1fbTQsIGx1bV9tMywgbHVtX20yLCBsdW1fbTEsIGx1bSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9saW5lX3BsYW5hcl92X21teCAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBkc3QsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMpCi17Ci0gIGNvbnN0IGd1aW50OCAqbHVtX200ID0gc2NhbmxpbmVzLT50dDE7Ci0gIGNvbnN0IGd1aW50OCAqbHVtX20zID0gc2NhbmxpbmVzLT50MDsKLSAgY29uc3QgZ3VpbnQ4ICpsdW1fbTIgPSBzY2FubGluZXMtPm0xOwotICBjb25zdCBndWludDggKmx1bV9tMSA9IHNjYW5saW5lcy0+YjA7Ci0gIGNvbnN0IGd1aW50OCAqbHVtID0gc2NhbmxpbmVzLT5iYjE7Ci0gIGdpbnQgc2l6ZSA9IHNlbGYtPnBhcmVudC5yb3dfc3RyaWRlWzJdOwotCi0gIGRlaW50ZXJsYWNlX21teCAoZHN0LCBsdW1fbTQsIGx1bV9tMywgbHVtX20yLCBsdW1fbTEsIGx1bSwgc2l6ZSk7Ci19Ci0jZW5kaWYKLQotR19ERUZJTkVfVFlQRSAoR3N0RGVpbnRlcmxhY2VNZXRob2RWRklSLCBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3ZmaXIsCi0gICAgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3ZmaXJfY2xhc3NfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RWRklSQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqZGltX2NsYXNzID0gKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKmRpc21fY2xhc3MgPQotICAgICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0jaWZkZWYgQlVJTERfWDg2X0FTTQotICBndWludCBjcHVfZmxhZ3MgPQotICAgICAgb3JjX3RhcmdldF9nZXRfZGVmYXVsdF9mbGFncyAob3JjX3RhcmdldF9nZXRfYnlfbmFtZSAoIm1teCIpKTsKLSNlbmRpZgotCi0gIGRpbV9jbGFzcy0+ZmllbGRzX3JlcXVpcmVkID0gMjsKLSAgZGltX2NsYXNzLT5uYW1lID0gIkJsdXIgVmVydGljYWwiOwotICBkaW1fY2xhc3MtPm5pY2sgPSAidmZpciI7Ci0gIGRpbV9jbGFzcy0+bGF0ZW5jeSA9IDE7Ci0KLSNpZmRlZiBCVUlMRF9YODZfQVNNCi0gIGlmIChjcHVfZmxhZ3MgJiBPUkNfVEFSR0VUX01NWF9NTVgpIHsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9heXV2ID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfbW14OwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l1eTIgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9tbXg7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX21teDsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV91eXZ5ID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfbW14OwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX252MTIgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9tbXg7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX21teDsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hcmdiID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfbW14OwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX2FiZ3IgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9tbXg7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX21teDsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3JhID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfbW14OwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3JnYiA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX21teDsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9tbXg7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3kgPSBkZWludGVybGFjZV9saW5lX3BsYW5hcl95X21teDsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdSA9IGRlaW50ZXJsYWNlX2xpbmVfcGxhbmFyX3VfbW14OwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl92ID0gZGVpbnRlcmxhY2VfbGluZV9wbGFuYXJfdl9tbXg7Ci0gIH0gZWxzZSB7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MiA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1diA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXJnYiA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYSA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gICAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9jOwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0gZGVpbnRlcmxhY2VfbGluZV9wbGFuYXJfeV9jOwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl91ID0gZGVpbnRlcmxhY2VfbGluZV9wbGFuYXJfdV9jOwotICAgIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl92ID0gZGVpbnRlcmxhY2VfbGluZV9wbGFuYXJfdl9jOwotICB9Ci0jZWxzZQotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9heXV2ID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MiA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3l2eXUgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV91eXZ5ID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX252MjEgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9hcmdiID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX2xpbmVfcGFja2VkX2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3JnYmEgPSBkZWludGVybGFjZV9saW5lX3BhY2tlZF9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3JhID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyID0gZGVpbnRlcmxhY2VfbGluZV9wYWNrZWRfYzsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3kgPSBkZWludGVybGFjZV9saW5lX3BsYW5hcl95X2M7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl91ID0gZGVpbnRlcmxhY2VfbGluZV9wbGFuYXJfdV9jOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdiA9IGRlaW50ZXJsYWNlX2xpbmVfcGxhbmFyX3ZfYzsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF92ZmlyX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kVkZJUiAqIHNlbGYpCi17Ci19CmRpZmYgLS1naXQgYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNGM4ODkuLjAwMDAwMDAKLS0tIGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBXZWF2ZSBmcmFtZXMKLSAqIENvcHlyaWdodCAoQykgMjAwMiBCaWxseSBCaWdncyA8dmVrdG9yQGR1bWJ0ZXJtLm5ldD4uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogUmVsaWNlbnNlZCBmb3IgR1N0cmVhbWVyIGZyb20gR1BMIHRvIExHUEwgd2l0aCBwZXJtaXQgZnJvbSBCaWxseSBCaWdncy4KLSAqIFNlZTogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTc4Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGRlaW50ZXJsYWNlbWV0aG9kLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFCShnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFKG9iaikJCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRSkpCi0jZGVmaW5lIEdTVF9JU19ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9HRVRfQ0xBU1Mob2JqKQkoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRSwgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRShvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkUsIEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmUpKQotI2RlZmluZSBHU1RfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRSwgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9DQVNUKG9iaikJKChHc3REZWludGVybGFjZU1ldGhvZFdlYXZlKikob2JqKSkKLQotR1R5cGUgZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZTsKLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyBHc3REZWludGVybGFjZU1ldGhvZFdlYXZlQ2xhc3M7Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3kgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3UgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29weV9zY2FubGluZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogb3V0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3NjYW5saW5lX3BsYW5hcl95IChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsIGd1aW50OCAqIG91dCwKLSAgICBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotY29weV9zY2FubGluZV9wbGFuYXJfdSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBvdXQsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0wLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfc2NhbmxpbmVfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogb3V0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLUdfREVGSU5FX1RZUEUgKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmUsIGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmUsCi0gICAgR1NUX1RZUEVfREVJTlRFUkxBQ0VfU0lNUExFX01FVEhPRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2NsYXNzX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVDbGFzcyAqIGtsYXNzKQotewotICBHc3REZWludGVybGFjZU1ldGhvZENsYXNzICpkaW1fY2xhc3MgPSAoR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqZGlzbV9jbGFzcyA9Ci0gICAgICAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyAqKSBrbGFzczsKLQotICBkaW1fY2xhc3MtPmZpZWxkc19yZXF1aXJlZCA9IDI7Ci0gIGRpbV9jbGFzcy0+bmFtZSA9ICJXZWF2ZSI7Ci0gIGRpbV9jbGFzcy0+bmljayA9ICJ3ZWF2ZSI7Ci0gIGRpbV9jbGFzcy0+bGF0ZW5jeSA9IDE7Ci0KLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1diA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXJnYiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPSBkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BsYW5hcl95OwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3Y7Ci0KLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9heXV2ID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfeXV5MiA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3l2eXUgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV91eXZ5ID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfbnYxMiA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX252MjEgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9hcmdiID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYWJnciA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3JnYmEgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9iZ3JhID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYmdyID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3kgPSBjb3B5X3NjYW5saW5lX3BsYW5hcl95OwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3BsYW5hcl91ID0gY29weV9zY2FubGluZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdiA9IGNvcHlfc2NhbmxpbmVfcGxhbmFyX3Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2luaXQgKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmUgKiBzZWxmKQotewotfQpkaWZmIC0tZ2l0IGEvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jIGIvZ3N0L2RlaW50ZXJsYWNlL3R2dGltZS93ZWF2ZWJmZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDI0ZTk2Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmViZmYuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKgotICogV2VhdmUgZnJhbWVzLCBib3R0b20tZmllbGQtZmlyc3QuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmlsbHkgQmlnZ3MgPHZla3RvckBkdW1idGVybS5uZXQ+LgotICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFJlbGljZW5zZWQgZm9yIEdTdHJlYW1lciBmcm9tIEdQTCB0byBMR1BMIHdpdGggcGVybWl0IGZyb20gQmlsbHkgQmlnZ3MuCi0gKiBTZWU6IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzU3OAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RkZWludGVybGFjZW1ldGhvZC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9CRkYJKGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmVfYmZmX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX0JGRihvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfQkZGKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9CRkZfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX0JGRikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfQkZGX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX0JGRiwgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZUJGRkNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9CRkYob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX0JGRiwgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZUJGRikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfQkZGX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9CRkYsIEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVCRkZDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfQkZGX0NBU1Qob2JqKQkoKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVCRkYqKShvYmopKQotCi1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2JmZl9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZUJGRjsKLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyBHc3REZWludGVybGFjZU1ldGhvZFdlYXZlQkZGQ2xhc3M7Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3kgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3UgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+YjAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29weV9zY2FubGluZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogb3V0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3NjYW5saW5lX3BsYW5hcl95IChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsIGd1aW50OCAqIG91dCwKLSAgICBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotY29weV9zY2FubGluZV9wbGFuYXJfdSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLCBndWludDggKiBvdXQsCi0gICAgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0wLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfc2NhbmxpbmVfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwgZ3VpbnQ4ICogb3V0LAotICAgIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLUdfREVGSU5FX1RZUEUgKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVCRkYsIGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmVfYmZmLAotICAgIEdTVF9UWVBFX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV9iZmZfY2xhc3NfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZUJGRkNsYXNzICoKLSAgICBrbGFzcykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqZGltX2NsYXNzID0gKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKmRpc21fY2xhc3MgPQotICAgICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0KLSAgZGltX2NsYXNzLT5maWVsZHNfcmVxdWlyZWQgPSAyOwotICBkaW1fY2xhc3MtPm5hbWUgPSAiUHJvZ3Jlc3NpdmU6IEJvdHRvbSBGaWVsZCBGaXJzdCI7Ci0gIGRpbV9jbGFzcy0+bmljayA9ICJ3ZWF2ZWJmZiI7Ci0gIGRpbV9jbGFzcy0+bGF0ZW5jeSA9IDE7Ci0KLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1diA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXJnYiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPSBkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BsYW5hcl95OwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3Y7Ci0KLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9heXV2ID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfeXV5MiA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3l2eXUgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV91eXZ5ID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfbnYxMiA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX252MjEgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9hcmdiID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYWJnciA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3JnYmEgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9iZ3JhID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYmdyID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3kgPSBjb3B5X3NjYW5saW5lX3BsYW5hcl95OwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3BsYW5hcl91ID0gY29weV9zY2FubGluZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdiA9IGNvcHlfc2NhbmxpbmVfcGxhbmFyX3Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX2JmZl9pbml0IChHc3REZWludGVybGFjZU1ldGhvZFdlYXZlQkZGICogc2VsZikKLXsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmV0ZmYuYyBiL2dzdC9kZWludGVybGFjZS90dnRpbWUvd2VhdmV0ZmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMzYmIyZS4uMDAwMDAwMAotLS0gYS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3dlYXZldGZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIFdlYXZlIGZyYW1lcywgdG9wLWZpZWxkLWZpcnN0LgotICogQ29weXJpZ2h0IChDKSAyMDAzIEJpbGx5IEJpZ2dzIDx2ZWt0b3JAZHVtYnRlcm0ubmV0Pi4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBSZWxpY2Vuc2VkIGZvciBHU3RyZWFtZXIgZnJvbSBHUEwgdG8gTEdQTCB3aXRoIHBlcm1pdCBmcm9tIEJpbGx5IEJpZ2dzLgotICogU2VlOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1NzgKLSAqLwotCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RkZWludGVybGFjZW1ldGhvZC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9URkYJKGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmVfdGZmX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX1RGRihvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfVEZGKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9URkZfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX1RGRikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfVEZGX0dFVF9DTEFTUyhvYmopCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX1RGRiwgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZVRGRkNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9URkYob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfREVJTlRFUkxBQ0VfTUVUSE9EX1dFQVZFX1RGRiwgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZVRGRikpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfVEZGX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFSU5URVJMQUNFX01FVEhPRF9XRUFWRV9URkYsIEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVURkZDbGFzcykpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEFDRV9NRVRIT0RfV0VBVkVfVEZGX0NBU1Qob2JqKQkoKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVURkYqKShvYmopKQotCi1HVHlwZSBnc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX3RmZl9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZVRGRjsKLXR5cGVkZWYgR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2RDbGFzcyBHc3REZWludGVybGFjZU1ldGhvZFdlYXZlVEZGQ2xhc3M7Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3kgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3UgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBpZiAoc2NhbmxpbmVzLT5tMSA9PSBOVUxMKSB7Ci0gICAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+dDAsIHNpemUpOwotICB9IGVsc2UgewotICAgIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0xLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29weV9zY2FubGluZV9wYWNrZWQgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3NjYW5saW5lX3BsYW5hcl95IChHc3REZWludGVybGFjZVNpbXBsZU1ldGhvZCAqIHNlbGYsCi0gICAgZ3VpbnQ4ICogb3V0LCBjb25zdCBHc3REZWludGVybGFjZVNjYW5saW5lRGF0YSAqIHNjYW5saW5lcywgZ3VpbnQgc2l6ZSkKLXsKLSAgbWVtY3B5IChvdXQsIHNjYW5saW5lcy0+bTAsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotY29weV9zY2FubGluZV9wbGFuYXJfdSAoR3N0RGVpbnRlcmxhY2VTaW1wbGVNZXRob2QgKiBzZWxmLAotICAgIGd1aW50OCAqIG91dCwgY29uc3QgR3N0RGVpbnRlcmxhY2VTY2FubGluZURhdGEgKiBzY2FubGluZXMsIGd1aW50IHNpemUpCi17Ci0gIG1lbWNweSAob3V0LCBzY2FubGluZXMtPm0wLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfc2NhbmxpbmVfcGxhbmFyX3YgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kICogc2VsZiwKLSAgICBndWludDggKiBvdXQsIGNvbnN0IEdzdERlaW50ZXJsYWNlU2NhbmxpbmVEYXRhICogc2NhbmxpbmVzLCBndWludCBzaXplKQotewotICBtZW1jcHkgKG91dCwgc2NhbmxpbmVzLT5tMCwgc2l6ZSk7Ci19Ci0KLUdfREVGSU5FX1RZUEUgKEdzdERlaW50ZXJsYWNlTWV0aG9kV2VhdmVURkYsIGdzdF9kZWludGVybGFjZV9tZXRob2Rfd2VhdmVfdGZmLAotICAgIEdTVF9UWVBFX0RFSU5URVJMQUNFX1NJTVBMRV9NRVRIT0QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsYWNlX21ldGhvZF93ZWF2ZV90ZmZfY2xhc3NfaW5pdCAoR3N0RGVpbnRlcmxhY2VNZXRob2RXZWF2ZVRGRkNsYXNzICoKLSAgICBrbGFzcykKLXsKLSAgR3N0RGVpbnRlcmxhY2VNZXRob2RDbGFzcyAqZGltX2NsYXNzID0gKEdzdERlaW50ZXJsYWNlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0gIEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKmRpc21fY2xhc3MgPQotICAgICAgKEdzdERlaW50ZXJsYWNlU2ltcGxlTWV0aG9kQ2xhc3MgKikga2xhc3M7Ci0KLSAgZGltX2NsYXNzLT5maWVsZHNfcmVxdWlyZWQgPSAyOwotICBkaW1fY2xhc3MtPm5hbWUgPSAiUHJvZ3Jlc3NpdmU6IFRvcCBGaWVsZCBGaXJzdCI7Ci0gIGRpbV9jbGFzcy0+bmljayA9ICJ3ZWF2ZXRmZiI7Ci0gIGRpbV9jbGFzcy0+bGF0ZW5jeSA9IDE7Ci0KLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXl1diA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXV5MiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfeXZ5dSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfdXl2eSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYxMiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfbnYyMSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYXJnYiA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYWJnciA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfYmdyYSA9IGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcmdiID0gZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9iZ3IgPSBkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmludGVycG9sYXRlX3NjYW5saW5lX3BsYW5hcl95ID0KLSAgICAgIGRlaW50ZXJsYWNlX3NjYW5saW5lX3dlYXZlX3BsYW5hcl95OwotICBkaXNtX2NsYXNzLT5pbnRlcnBvbGF0ZV9zY2FubGluZV9wbGFuYXJfdSA9Ci0gICAgICBkZWludGVybGFjZV9zY2FubGluZV93ZWF2ZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+aW50ZXJwb2xhdGVfc2NhbmxpbmVfcGxhbmFyX3YgPQotICAgICAgZGVpbnRlcmxhY2Vfc2NhbmxpbmVfd2VhdmVfcGxhbmFyX3Y7Ci0KLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9heXV2ID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfeXV5MiA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3l2eXUgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV91eXZ5ID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfbnYxMiA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX252MjEgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9hcmdiID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYWJnciA9IGNvcHlfc2NhbmxpbmVfcGFja2VkOwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3JnYmEgPSBjb3B5X3NjYW5saW5lX3BhY2tlZDsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9iZ3JhID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcmdiID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfYmdyID0gY29weV9zY2FubGluZV9wYWNrZWQ7Ci0gIGRpc21fY2xhc3MtPmNvcHlfc2NhbmxpbmVfcGxhbmFyX3kgPSBjb3B5X3NjYW5saW5lX3BsYW5hcl95OwotICBkaXNtX2NsYXNzLT5jb3B5X3NjYW5saW5lX3BsYW5hcl91ID0gY29weV9zY2FubGluZV9wbGFuYXJfdTsKLSAgZGlzbV9jbGFzcy0+Y29weV9zY2FubGluZV9wbGFuYXJfdiA9IGNvcHlfc2NhbmxpbmVfcGxhbmFyX3Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxhY2VfbWV0aG9kX3dlYXZlX3RmZl9pbml0IChHc3REZWludGVybGFjZU1ldGhvZFdlYXZlVEZGICogc2VsZikKLXsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kZWludGVybGFjZS90dnRpbWUveDg2LTY0X21hY3Jvcy5pbmMgYi9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lL3g4Ni02NF9tYWNyb3MuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTJlM2M3Li4wMDAwMDAwCi0tLSBhL2dzdC9kZWludGVybGFjZS90dnRpbWUveDg2LTY0X21hY3Jvcy5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IERpcmsgWmllZ2VsbWVpZXIgPGR6aWVnZWxAZ214LmRlPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiAKLSAqIFNlZTogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTc4Ci0gKi8KLQotLyoKLSAqIFRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSBUVlRJTUUncyBzb3VyY2VzLgotICogT3JpZ2luYWwgYXV0aG9yOiBBY2hpbSBTY2huZWlkZXIgPGJhdGNoYWxsQG1vcmRvci5jaD4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpZm5kZWYgWEFYCi0KLSNpZiBkZWZpbmVkIChIQVZFX0NQVV9JMzg2KSAmJiAhZGVmaW5lZChIQVZFX0NQVV9YODZfNjQpCi0KLSNkZWZpbmUgWEFYICAgImVheCIKLSNkZWZpbmUgWEJYICAgImVieCIKLSNkZWZpbmUgWENYICAgImVjeCIKLSNkZWZpbmUgWERYICAgImVkeCIKLSNkZWZpbmUgWFNJICAgImVzaSIKLSNkZWZpbmUgWERJICAgImVkaSIKLSNkZWZpbmUgWFNQICAgImVzcCIKLSNkZWZpbmUgTU9WWCAgIm1vdmwiCi0jZGVmaW5lIExFQVggICJsZWFsIgotI2RlZmluZSBERUNYICAiZGVjbCIKLSNkZWZpbmUgUFVTSFggInB1c2hsIgotI2RlZmluZSBQT1BYICAicG9wbCIKLSNkZWZpbmUgQ01QWCAgImNtcGwiCi0jZGVmaW5lIEFERFggICJhZGRsIgotI2RlZmluZSBTSExYICAic2hsbCIKLSNkZWZpbmUgU0hSWCAgInNocmwiCi0jZGVmaW5lIFNVQlggICJzdWJsIgotCi0jZWxpZiBkZWZpbmVkIChIQVZFX0NQVV9YODZfNjQpCi0KLSNkZWZpbmUgWEFYICAgInJheCIKLSNkZWZpbmUgWEJYICAgInJieCIKLSNkZWZpbmUgWENYICAgInJjeCIKLSNkZWZpbmUgWERYICAgInJkeCIKLSNkZWZpbmUgWFNJICAgInJzaSIKLSNkZWZpbmUgWERJICAgInJkaSIKLSNkZWZpbmUgWFNQICAgInJzcCIKLSNkZWZpbmUgTU9WWCAgIm1vdnEiCi0jZGVmaW5lIExFQVggICJsZWFxIgotI2RlZmluZSBERUNYICAiZGVjcSIKLSNkZWZpbmUgUFVTSFggInB1c2hxIgotI2RlZmluZSBQT1BYICAicG9wcSIKLSNkZWZpbmUgQ01QWCAgImNtcHEiCi0jZGVmaW5lIEFERFggICJhZGRxIgotI2RlZmluZSBTSExYICAic2hscSIKLSNkZWZpbmUgU0hSWCAgInNocnEiCi0jZGVmaW5lIFNVQlggICJzdWJxIgotCi0jZWxzZQotI2Vycm9yIFVuZGVmaW5lZCBhcmNoaXRlY3R1cmUuIERlZmluZSBlaXRoZXIgQVJDSF9YODYgb3IgQVJDSF9YODZfNjQuCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZHRtZi9NYWtlZmlsZS5hbSBiL2dzdC9kdG1mL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjRiOTBjLi4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZHRtZi5sYQotCi1saWJnc3RkdG1mX2xhX1NPVVJDRVMgPSBnc3RkdG1mc3JjLmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cnRwZHRtZnNyYy5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdzdHJ0cGR0bWZkZXBheS5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdzdGR0bWYuYwotCi1ub2luc3RfSEVBREVSUyA9IGdzdGR0bWZzcmMuaCBcCi0gICAgICAgICAgICAgICAgIGdzdHJ0cGR0bWZzcmMuaCBcCi0gICAgICAgICAgICAgICAgIGdzdHJ0cGR0bWZkZXBheS5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0ZHRtZmNvbW1vbi5oCi0KLWxpYmdzdGR0bWZfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0ZHRtZl9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RydHAtQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJNKQotbGliZ3N0ZHRtZl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RkdG1mX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCmRpZmYgLS1naXQgYS9nc3QvZHRtZi9NYWtlZmlsZS5pbiBiL2dzdC9kdG1mL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmNjMGEwLi4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTQ2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9kdG1mCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0ZHRtZl9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0ZHRtZl9sYV9PQkpFQ1RTID0gbGliZ3N0ZHRtZl9sYS1nc3RkdG1mc3JjLmxvIFwKLQlsaWJnc3RkdG1mX2xhLWdzdHJ0cGR0bWZzcmMubG8gXAotCWxpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZmRlcGF5LmxvIGxpYmdzdGR0bWZfbGEtZ3N0ZHRtZi5sbwotbGliZ3N0ZHRtZl9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RkdG1mX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RkdG1mX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0ZHRtZl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGR0bWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0ZHRtZl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RkdG1mX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGR0bWZfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZHRtZi5sYQotbGliZ3N0ZHRtZl9sYV9TT1VSQ0VTID0gZ3N0ZHRtZnNyYy5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdzdHJ0cGR0bWZzcmMuYyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBnc3RydHBkdG1mZGVwYXkuYyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBnc3RkdG1mLmMKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RkdG1mc3JjLmggXAotICAgICAgICAgICAgICAgICBnc3RydHBkdG1mc3JjLmggXAotICAgICAgICAgICAgICAgICBnc3RydHBkdG1mZGVwYXkuaCBcCi0gICAgICAgICAgICAgICAgIGdzdGR0bWZjb21tb24uaAotCi1saWJnc3RkdG1mX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGR0bWZfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoTElCTSkKLQotbGliZ3N0ZHRtZl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RkdG1mX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvZHRtZi9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvZHRtZi9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGR0bWYubGE6ICQobGliZ3N0ZHRtZl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGR0bWZfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGR0bWZfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGR0bWZfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGR0bWZfbGFfT0JKRUNUUykgJChsaWJnc3RkdG1mX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RkdG1mLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RkdG1mc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RkdG1mX2xhLWdzdHJ0cGR0bWZzcmMuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGR0bWZfbGEtZ3N0ZHRtZnNyYy5sbzogZ3N0ZHRtZnNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZHRtZl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkdG1mX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RkdG1mX2xhLWdzdGR0bWZzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGR0bWZfbGEtZ3N0ZHRtZnNyYy5UcG8gLWMgLW8gbGliZ3N0ZHRtZl9sYS1nc3RkdG1mc3JjLmxvIGB0ZXN0IC1mICdnc3RkdG1mc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGR0bWZzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RkdG1mc3JjLlRwbyAkKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RkdG1mc3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGR0bWZzcmMuYycgb2JqZWN0PSdsaWJnc3RkdG1mX2xhLWdzdGR0bWZzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkdG1mX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGR0bWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZHRtZl9sYS1nc3RkdG1mc3JjLmxvIGB0ZXN0IC1mICdnc3RkdG1mc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGR0bWZzcmMuYwotCi1saWJnc3RkdG1mX2xhLWdzdHJ0cGR0bWZzcmMubG86IGdzdHJ0cGR0bWZzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGR0bWZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZHRtZl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkdG1mX2xhLWdzdHJ0cGR0bWZzcmMuVHBvIC1jIC1vIGxpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZnNyYy5sbyBgdGVzdCAtZiAnZ3N0cnRwZHRtZnNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBkdG1mc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZnNyYy5UcG8gJChERVBESVIpL2xpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZnNyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBkdG1mc3JjLmMnIG9iamVjdD0nbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZHRtZl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkdG1mX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZnNyYy5sbyBgdGVzdCAtZiAnZ3N0cnRwZHRtZnNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBkdG1mc3JjLmMKLQotbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mZGVwYXkubG86IGdzdHJ0cGR0bWZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZHRtZl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkdG1mX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RkdG1mX2xhLWdzdHJ0cGR0bWZkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mZGVwYXkuVHBvIC1jIC1vIGxpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBkdG1mZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZHRtZmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGR0bWZfbGEtZ3N0cnRwZHRtZmRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZHRtZmRlcGF5LmMnIG9iamVjdD0nbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RkdG1mX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGR0bWZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZHRtZl9sYS1nc3RydHBkdG1mZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGR0bWZkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBkdG1mZGVwYXkuYwotCi1saWJnc3RkdG1mX2xhLWdzdGR0bWYubG86IGdzdGR0bWYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGR0bWZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZHRtZl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZHRtZl9sYS1nc3RkdG1mLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkdG1mX2xhLWdzdGR0bWYuVHBvIC1jIC1vIGxpYmdzdGR0bWZfbGEtZ3N0ZHRtZi5sbyBgdGVzdCAtZiAnZ3N0ZHRtZi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkdG1mLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGR0bWZfbGEtZ3N0ZHRtZi5UcG8gJChERVBESVIpL2xpYmdzdGR0bWZfbGEtZ3N0ZHRtZi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RkdG1mLmMnIG9iamVjdD0nbGliZ3N0ZHRtZl9sYS1nc3RkdG1mLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZHRtZl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RkdG1mX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGR0bWZfbGEtZ3N0ZHRtZi5sbyBgdGVzdCAtZiAnZ3N0ZHRtZi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RkdG1mLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2R0bWYvZ3N0ZHRtZi5jIGIvZ3N0L2R0bWYvZ3N0ZHRtZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGM0MDAxLi4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL2dzdGR0bWYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBEVE1GIHBsdWdpbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGR0bWZzcmMuaCIKLSNpbmNsdWRlICJnc3RydHBkdG1mc3JjLmgiCi0jaW5jbHVkZSAiZ3N0cnRwZHRtZmRlcGF5LmgiCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZHRtZl9zcmNfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9kdG1mX3NyY19wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2R0bWZfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgZHRtZiwgIkRUTUYgcGx1Z2lucyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvZHRtZi9nc3RkdG1mY29tbW9uLmggYi9nc3QvZHRtZi9nc3RkdG1mY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZjI2Y2MuLjAwMDAwMDAKLS0tIGEvZ3N0L2R0bWYvZ3N0ZHRtZmNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyogR1N0cmVhbWVyIERUTUYgcGx1Z2luCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfRFRNRl9DT01NT05fSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9EVE1GX0NPTU1PTl9IX18KLQotI2luY2x1ZGUgPGdzdC9tYXRoLWNvbXBhdC5oPgotCi0jZGVmaW5lIE1JTl9JTlRFUl9ESUdJVF9JTlRFUlZBTCAxMDAgICAgIC8qIG1zICovCi0jZGVmaW5lIE1JTl9QVUxTRV9EVVJBVElPTiAgICAgICAyNTAgICAgIC8qIG1zICovCi0KLSNkZWZpbmUgTUlOX1ZPTFVNRSAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFYX1ZPTFVNRSAgICAgICAgICAgICAgIDM2Ci0KLSNkZWZpbmUgTUlOX0VWRU5UICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgTUFYX0VWRU5UICAgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIE1JTl9FVkVOVF9TVFJJTkcgICAgICAgICAiMCIKLSNkZWZpbmUgTUFYX0VWRU5UX1NUUklORyAgICAgICAgICIxNSIKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgdW5zaWduZWQgZXZlbnQ6ODsgICAgICAgICAgICAgLyogQ3VycmVudCBEVE1GIGV2ZW50ICovCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotICB1bnNpZ25lZCB2b2x1bWU6NjsgICAgICAgICAgICAvKiBwb3dlciBsZXZlbCBvZiB0aGUgdG9uZSwgaW4gZEJtMCAqLwotICB1bnNpZ25lZCByOjE7ICAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZC1iaXQgKi8KLSAgdW5zaWduZWQgZToxOyAgICAgICAgICAgICAgICAgLyogRW5kLWJpdCAqLwotI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICB1bnNpZ25lZCBlOjE7ICAgICAgICAgICAgICAgICAvKiBFbmQtYml0ICovCi0gIHVuc2lnbmVkIHI6MTsgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkLWJpdCAqLwotICB1bnNpZ25lZCB2b2x1bWU6NjsgICAgICAgICAgICAvKiBwb3dlciBsZXZlbCBvZiB0aGUgdG9uZSwgaW4gZEJtMCAqLwotI2Vsc2UKLSNlcnJvciAiR19CWVRFX09SREVSIHNob3VsZCBiZSBiaWcgb3IgbGl0dGxlIGVuZGlhbi4iCi0jZW5kaWYKLSAgdW5zaWduZWQgZHVyYXRpb246MTY7ICAgICAgICAgLyogRHVyYXRpb24gb2YgZGlnaXQsIGluIHRpbWVzdGFtcCB1bml0cyAqLwotfSBHc3RSVFBEVE1GUGF5bG9hZDsKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9EVE1GX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9kdG1mL2dzdGR0bWZzcmMuYyBiL2dzdC9kdG1mL2dzdGR0bWZzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhmMGYwOC4uMDAwMDAwMAotLS0gYS9nc3QvZHRtZi9nc3RkdG1mc3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OTggKzAsMCBAQAotLyogR1N0cmVhbWVyIERUTUYgc291cmNlCi0gKgotICogZ3N0ZHRtZnNyYy5jOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IENvbGxhYm9yYS4KLSAqICAgQ29udGFjdDogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uLgotICogICBDb250YWN0OiBaZWVzaGFuIEFsaSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZHRtZnNyYwotICogQHNlZV9hbHNvOiBydHBkdG1zcmMsIHJ0cGR0bWZtdXh4Ci0gKgotICogVGhlIERUTUZTcmMgZWxlbWVudCBnZW5lcmF0ZXMgRFRNRiAoSVRVLVQgUS4yMyBTcGVjaWZpY2F0aW9uKSB0b25lIHBhY2tldHMgb24gcmVxdWVzdAotICogZnJvbSBhcHBsaWNhdGlvbi4gVGhlIGFwcGxpY2F0aW9uIGNvbW11bmljYXRlcyB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYQotICogRFRNRiBldmVudCB1c2luZyBjdXN0b20gdXBzdHJlYW0gZ3N0cmVhbWVyIGV2ZW50cy4gVG8gcmVwb3J0IGEgRFRNRiBldmVudCwgYW4KLSAqIGFwcGxpY2F0aW9uIG11c3Qgc2VuZCBhbiBldmVudCBvZiB0eXBlIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sIGhhdmluZyBhCi0gKiBzdHJ1Y3R1cmUgb2YgbmFtZSAiZHRtZi1ldmVudCIgd2l0aCBmaWVsZHMgc2V0IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nCi0gKiB0YWJsZToKLSAqCi0gKiA8aW5mb3JtYWx0YWJsZT4KLSAqIDx0Z3JvdXAgY29scz0nNCc+Ci0gKiA8Y29sc3BlYyBjb2xuYW1lPSdOYW1lJyAvPgotICogPGNvbHNwZWMgY29sbmFtZT0nVHlwZScgLz4KLSAqIDxjb2xzcGVjIGNvbG5hbWU9J1Bvc3NpYmxlIHZhbHVlcycgLz4KLSAqIDxjb2xzcGVjIGNvbG5hbWU9J1B1cnBvc2UnIC8+Ci0gKiA8dGhlYWQ+Ci0gKiA8cm93PgotICogPGVudHJ5Pk5hbWU8L2VudHJ5PgotICogPGVudHJ5PkdUeXBlPC9lbnRyeT4KLSAqIDxlbnRyeT5Qb3NzaWJsZSB2YWx1ZXM8L2VudHJ5PgotICogPGVudHJ5PlB1cnBvc2U8L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8L3RoZWFkPgotICogPHRib2R5PgotICogPHJvdz4KLSAqIDxlbnRyeT50eXBlPC9lbnRyeT4KLSAqIDxlbnRyeT5HX1RZUEVfSU5UPC9lbnRyeT4KLSAqIDxlbnRyeT4wLTE8L2VudHJ5PgotICogPGVudHJ5PlRoZSBhcHBsaWNhdGlvbiB1c2VzIHRoaXMgZmllbGQgdG8gc3BlY2lmeSB3aGljaCBvZiB0aGUgdHdvIG1ldGhvZHMKLSAqIHNwZWNpZmllZCBpbiBSRkMgMjgzMyB0byB1c2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUgMCBmb3IgdG9uZXMgYW5kIDEgZm9yCi0gKiBuYW1lZCBldmVudHMuIFRvbmVzIGFyZSBzcGVjaWZpZWQgYnkgdGhlaXIgZnJlcXVlbmNpZXMgYW5kIGV2ZW50cyBhcmUgc3BlY2llZAotICogYnkgdGhlaXIgbnVtYmVyLiBUaGlzIGVsZW1lbnQgY2FuIG9ubHkgdGFrZSBldmVudHMgYXMgaW5wdXQuIERvIG5vdCBjb25mdXNlCi0gKiB3aXRoICJtZXRob2QiIHdoaWNoIHNwZWNpZmllZCB0aGUgb3V0cHV0LgotICogPC9lbnRyeT4KLSAqIDwvcm93PgotICogPHJvdz4KLSAqIDxlbnRyeT5udW1iZXI8L2VudHJ5PgotICogPGVudHJ5PkdfVFlQRV9JTlQ8L2VudHJ5PgotICogPGVudHJ5PjAtMTU8L2VudHJ5PgotICogPGVudHJ5PlRoZSBldmVudCBudW1iZXIuPC9lbnRyeT4KLSAqIDwvcm93PgotICogPHJvdz4KLSAqIDxlbnRyeT52b2x1bWU8L2VudHJ5PgotICogPGVudHJ5PkdfVFlQRV9JTlQ8L2VudHJ5PgotICogPGVudHJ5PjAtMzY8L2VudHJ5PgotICogPGVudHJ5PlRoaXMgZmllbGQgZGVzY3JpYmVzIHRoZSBwb3dlciBsZXZlbCBvZiB0aGUgdG9uZSwgZXhwcmVzc2VkIGluIGRCbTAKLSAqIGFmdGVyIGRyb3BwaW5nIHRoZSBzaWduLiBQb3dlciBsZXZlbHMgcmFuZ2UgZnJvbSAwIHRvIC02MyBkQm0wLiBUaGUgcmFuZ2Ugb2YKLSAqIHZhbGlkIERUTUYgaXMgZnJvbSAwIHRvIC0zNiBkQm0wLiBDYW4gYmUgb21pdHRlZCBpZiBzdGFydCBpcyBzZXQgdG8gRkFMU0UuCi0gKiA8L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8cm93PgotICogPGVudHJ5PnN0YXJ0PC9lbnRyeT4KLSAqIDxlbnRyeT5HX1RZUEVfQk9PTEVBTjwvZW50cnk+Ci0gKiA8ZW50cnk+VHJ1ZSBvciBGYWxzZTwvZW50cnk+Ci0gKiA8ZW50cnk+V2hldGhlciB0aGUgZXZlbnQgaXMgc3RhcnRpbmcgb3IgZW5kaW5nLjwvZW50cnk+Ci0gKiA8L3Jvdz4KLSAqIDxyb3c+Ci0gKiA8ZW50cnk+bWV0aG9kPC9lbnRyeT4KLSAqIDxlbnRyeT5HX1RZUEVfSU5UPC9lbnRyeT4KLSAqIDxlbnRyeT4yPC9lbnRyeT4KLSAqIDxlbnRyeT5UaGUgbWV0aG9kIHVzZWQgZm9yIHNlbmRpbmcgZXZlbnQsIHRoaXMgZWxlbWVudCB3aWxsIHJlYWN0IGlmIHRoaXMKLSAqIGZpZWxkIGlzIGFic2VudCBvciAyLgotICogPC9lbnRyeT4KLSAqIDwvcm93PgotICogPC90Ym9keT4KLSAqIDwvdGdyb3VwPgotICogPC9pbmZvcm1hbHRhYmxlPgotICoKLSAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgaW5mb3JtcyB0aGUgcGlwZWxpbmUgKGFuZCBpbiB0dXJuLCB0aGUKLSAqIERUTUZTcmMgZWxlbWVudCBpbnNpZGUgdGhlIHBpcGVsaW5lKSBhYm91dCB0aGUgc3RhcnQgb2YgYSBEVE1GIG5hbWVkCi0gKiBldmVudCAnMScgb2Ygdm9sdW1lIC0yNSBkQm0wOgotICoKLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZHRtZi1ldmVudCIsCi0gKiAgICAgICAgICAgICAgICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLAotICogICAgICAgICAgICAgICAgICAgICJudW1iZXIiLCBHX1RZUEVfSU5ULCAxLAotICogICAgICAgICAgICAgICAgICAgICJ2b2x1bWUiLCBHX1RZUEVfSU5ULCAyNSwKLSAqICAgICAgICAgICAgICAgICAgICAic3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gKgotICogZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgc3RydWN0dXJlKTsKLSAqIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGVsaW5lLCBldmVudCk7Ci0gKiA8L3Byb2dyYW1saXN0aW5nPgotICoKLSAqIFdoZW4gYSBEVE1GIHRvbmUgYWN0dWFsbHkgc3RhcnRzIG9yIHN0b3AsIGEgImR0bWYtZXZlbnQtcHJvY2Vzc2VkIgotICogZWxlbWVudCAjR3N0TWVzc2FnZSB3aXRoIHRoZSBzYW1lIGZpZWxkcyBhcyB0aGUgImR0bWYtZXZlbnQiCi0gKiAjR3N0RXZlbnQgdGhhdCB3YXMgdXNlZCB0byByZXF1ZXN0IHRoZSBldmVudC4gQWxzbywgaWYgYW55IGV2ZW50Ci0gKiBoYXMgbm90IGJlZW4gcHJvY2Vzc2VkIHdoZW4gdGhlIGVsZW1lbnQgZ29lcyBmcm9tIHRoZSBQQVVTRUQgdG8gdGhlCi0gKiBSRUFEWSBzdGF0ZSwgdGhlbiBhICJkdG1mLWV2ZW50LWRyb3BwZWQiIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZQotICogI0dzdEJ1cyBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgcmVjZWl2ZWQuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSAiZ3N0ZHRtZmNvbW1vbi5oIgotCi0jaW5jbHVkZSAiZ3N0ZHRtZnNyYy5oIgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNkZWZpbmUgR1NUX1RPTkVfRFRNRl9UWVBFX0VWRU5UIDEKLSNkZWZpbmUgREVGQVVMVF9QQUNLRVRfSU5URVJWQUwgIDUwICAgICAvKiBtcyAqLwotI2RlZmluZSBNSU5fUEFDS0VUX0lOVEVSVkFMICAgICAgMTAgICAgIC8qIG1zICovCi0jZGVmaW5lIE1BWF9QQUNLRVRfSU5URVJWQUwgICAgICA1MCAgICAgLyogbXMgKi8KLSNkZWZpbmUgREVGQVVMVF9TQU1QTEVfUkFURSAgICAgIDgwMDAKLSNkZWZpbmUgU0FNUExFX1NJWkUgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIENIQU5ORUxTICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIE1JTl9EVVRZX0NZQ0xFICAgICAgICAgICAoTUlOX0lOVEVSX0RJR0lUX0lOVEVSVkFMICsgTUlOX1BVTFNFX0RVUkFUSU9OKQotCi0KLXR5cGVkZWYgc3RydWN0IHN0X2R0bWZfa2V5Ci17Ci0gIGNvbnN0IGNoYXIgKmV2ZW50X25hbWU7Ci0gIGludCBldmVudF9lbmNvZGluZzsKLSAgZmxvYXQgbG93X2ZyZXF1ZW5jeTsKLSAgZmxvYXQgaGlnaF9mcmVxdWVuY3k7Ci19IERUTUZfS0VZOwotCi1zdGF0aWMgY29uc3QgRFRNRl9LRVkgRFRNRl9LRVlTW10gPSB7Ci0gIHsiRFRNRl9LRVlfRVZFTlRfMCIsIDAsIDk0MSwgMTMzNn0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfMSIsIDEsIDY5NywgMTIwOX0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfMiIsIDIsIDY5NywgMTMzNn0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfMyIsIDMsIDY5NywgMTQ3N30sCi0gIHsiRFRNRl9LRVlfRVZFTlRfNCIsIDQsIDc3MCwgMTIwOX0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfNSIsIDUsIDc3MCwgMTMzNn0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfNiIsIDYsIDc3MCwgMTQ3N30sCi0gIHsiRFRNRl9LRVlfRVZFTlRfNyIsIDcsIDg1MiwgMTIwOX0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfOCIsIDgsIDg1MiwgMTMzNn0sCi0gIHsiRFRNRl9LRVlfRVZFTlRfOSIsIDksIDg1MiwgMTQ3N30sCi0gIHsiRFRNRl9LRVlfRVZFTlRfUyIsIDEwLCA5NDEsIDEyMDl9LAotICB7IkRUTUZfS0VZX0VWRU5UX1AiLCAxMSwgOTQxLCAxNDc3fSwKLSAgeyJEVE1GX0tFWV9FVkVOVF9BIiwgMTIsIDY5NywgMTYzM30sCi0gIHsiRFRNRl9LRVlfRVZFTlRfQiIsIDEzLCA3NzAsIDE2MzN9LAotICB7IkRUTUZfS0VZX0VWRU5UX0MiLCAxNCwgODUyLCAxNjMzfSwKLSAgeyJEVE1GX0tFWV9FVkVOVF9EIiwgMTUsIDk0MSwgMTYzM30sCi19OwotCi0jZGVmaW5lIE1BWF9EVE1GX0VWRU5UUyAxNgotCi1lbnVtCi17Ci0gIERUTUZfS0VZX0VWRU5UXzEgPSAxLAotICBEVE1GX0tFWV9FVkVOVF8yID0gMiwKLSAgRFRNRl9LRVlfRVZFTlRfMyA9IDMsCi0gIERUTUZfS0VZX0VWRU5UXzQgPSA0LAotICBEVE1GX0tFWV9FVkVOVF81ID0gNSwKLSAgRFRNRl9LRVlfRVZFTlRfNiA9IDYsCi0gIERUTUZfS0VZX0VWRU5UXzcgPSA3LAotICBEVE1GX0tFWV9FVkVOVF84ID0gOCwKLSAgRFRNRl9LRVlfRVZFTlRfOSA9IDksCi0gIERUTUZfS0VZX0VWRU5UXzAgPSAwLAotICBEVE1GX0tFWV9FVkVOVF9TVEFSID0gMTAsCi0gIERUTUZfS0VZX0VWRU5UX1BPVU5EID0gMTEsCi0gIERUTUZfS0VZX0VWRU5UX0EgPSAxMiwKLSAgRFRNRl9LRVlfRVZFTlRfQiA9IDEzLAotICBEVE1GX0tFWV9FVkVOVF9DID0gMTQsCi0gIERUTUZfS0VZX0VWRU5UX0QgPSAxNSwKLX07Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9kdG1mX3NyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZHRtZl9zcmNfZGVidWcKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfSU5URVJWQUwsCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2R0bWZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgXCIiIEdTVF9BVURJT19ORSAoUzE2KSAiXCIsICIKLSAgICAgICAgInJhdGUgPSAiIEdTVF9BVURJT19SQVRFX1JBTkdFICIsICIgImNoYW5uZWxzID0gKGludCkgMSIpCi0gICAgKTsKLQotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X2R0bWZfc3JjX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0RFRNRlNyYywgZ3N0X2R0bWZfc3JjLCBHU1RfVFlQRV9CQVNFX1NSQyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9kdG1mX3NyY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9kdG1mX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZHRtZl9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9kdG1mX3NyY19oYW5kbGVfZXZlbnQgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9kdG1mX3NyY19zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogc3JjLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfZHRtZl9zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kdG1mX3NyY19jcmVhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLAotICAgIGd1aW50NjQgb2Zmc2V0LCBndWludCBsZW5ndGgsIEdzdEJ1ZmZlciAqKiBidWZmZXIpOwotc3RhdGljIHZvaWQgZ3N0X2R0bWZfc3JjX2FkZF9zdGFydF9ldmVudCAoR3N0RFRNRlNyYyAqIGR0bWZzcmMsCi0gICAgZ2ludCBldmVudF9udW1iZXIsIGdpbnQgZXZlbnRfdm9sdW1lKTsKLXN0YXRpYyB2b2lkIGdzdF9kdG1mX3NyY19hZGRfc3RvcF9ldmVudCAoR3N0RFRNRlNyYyAqIGR0bWZzcmMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2R0bWZfc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIHNyYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHRtZl9zcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9kdG1mX3NyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHRtZl9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X2R0bWZfc3JjX2NsYXNzX2luaXQgKEdzdERUTUZTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RiYXNlc3JjX2NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9kdG1mX3NyY19kZWJ1ZywgImR0bWZzcmMiLCAwLCAiZHRtZnNyYyBlbGVtZW50Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2R0bWZfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkRUTUYgdG9uZSBnZW5lcmF0b3IiLCAiU291cmNlL0F1ZGlvIiwgIkdlbmVyYXRlcyBEVE1GIHRvbmVzIiwKLSAgICAgICJZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPiIpOwotCi0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZHRtZl9zcmNfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kdG1mX3NyY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9kdG1mX3NyY19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9JTlRFUlZBTCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiaW50ZXJ2YWwiLCAiSW50ZXJ2YWwgYmV0d2VlbiB0b25lIHBhY2tldHMiLAotICAgICAgICAgICJJbnRlcnZhbCBpbiBtcyBiZXR3ZWVuIHR3byB0b25lIHBhY2tldHMiLCBNSU5fUEFDS0VUX0lOVEVSVkFMLAotICAgICAgICAgIE1BWF9QQUNLRVRfSU5URVJWQUwsIERFRkFVTFRfUEFDS0VUX0lOVEVSVkFMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R0bWZfc3JjX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R0bWZfc3JjX3NlbmRfZXZlbnQpOwotICBnc3RiYXNlc3JjX2NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R0bWZfc3JjX3VubG9jayk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnVubG9ja19zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kdG1mX3NyY191bmxvY2tfc3RvcCk7Ci0KLSAgZ3N0YmFzZXNyY19jbGFzcy0+ZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2R0bWZfc3JjX2hhbmRsZV9ldmVudCk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmNyZWF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHRtZl9zcmNfY3JlYXRlKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+bmVnb3RpYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kdG1mX3NyY19uZWdvdGlhdGUpOwotICBnc3RiYXNlc3JjX2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZHRtZl9zcmNfcXVlcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZXZlbnRfZnJlZSAoR3N0RFRNRlNyY0V2ZW50ICogZXZlbnQpCi17Ci0gIGlmIChldmVudCkKLSAgICBnX3NsaWNlX2ZyZWUgKEdzdERUTUZTcmNFdmVudCwgZXZlbnQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R0bWZfc3JjX2luaXQgKEdzdERUTUZTcmMgKiBkdG1mc3JjKQotewotICAvKiB3ZSBvcGVyYXRlIGluIHRpbWUgKi8KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKEdTVF9CQVNFX1NSQyAoZHRtZnNyYyksIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9iYXNlX3NyY19zZXRfbGl2ZSAoR1NUX0JBU0VfU1JDIChkdG1mc3JjKSwgVFJVRSk7Ci0KLSAgZHRtZnNyYy0+aW50ZXJ2YWwgPSBERUZBVUxUX1BBQ0tFVF9JTlRFUlZBTDsKLQotICBkdG1mc3JjLT5ldmVudF9xdWV1ZSA9IGdfYXN5bmNfcXVldWVfbmV3X2Z1bGwgKChHRGVzdHJveU5vdGlmeSkgZXZlbnRfZnJlZSk7Ci0gIGR0bWZzcmMtPmxhc3RfZXZlbnQgPSBOVUxMOwotCi0gIGR0bWZzcmMtPnNhbXBsZV9yYXRlID0gREVGQVVMVF9TQU1QTEVfUkFURTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiaW5pdCBkb25lIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHRtZl9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmM7Ci0KLSAgZHRtZnNyYyA9IEdTVF9EVE1GX1NSQyAob2JqZWN0KTsKLQotICBpZiAoZHRtZnNyYy0+ZXZlbnRfcXVldWUpIHsKLSAgICBnX2FzeW5jX3F1ZXVlX3VucmVmIChkdG1mc3JjLT5ldmVudF9xdWV1ZSk7Ci0gICAgZHRtZnNyYy0+ZXZlbnRfcXVldWUgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9kdG1mX3NyY19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHRtZl9zcmNfaGFuZGxlX2R0bWZfZXZlbnQgKEdzdERUTUZTcmMgKiBkdG1mc3JjLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKmV2ZW50X3N0cnVjdHVyZTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3JldDsKLSAgR3N0U3RhdGUgc3RhdGU7Ci0gIGdpbnQgZXZlbnRfdHlwZTsKLSAgZ2Jvb2xlYW4gc3RhcnQ7Ci0gIGdpbnQgbWV0aG9kOwotICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wOwotICBnaW50IGV2ZW50X251bWJlcjsKLSAgZ2ludCBldmVudF92b2x1bWU7Ci0gIGdib29sZWFuIGNvcnJlY3Rfb3JkZXI7Ci0KLSAgc3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGR0bWZzcmMpLCAmc3RhdGUsIE5VTEwsIDApOwotICBpZiAoc3JldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgfHwgc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiZHRtZi1ldmVudCwgYnV0IG5vdCBpbiBQTEFZSU5HIHN0YXRlIik7Ci0gICAgZ290byBmYWlsdXJlOwotICB9Ci0KLSAgZXZlbnRfc3RydWN0dXJlID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoZXZlbnRfc3RydWN0dXJlLCAidHlwZSIsICZldmVudF90eXBlKSB8fAotICAgICAgIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKGV2ZW50X3N0cnVjdHVyZSwgInN0YXJ0IiwgJnN0YXJ0KSB8fAotICAgICAgKHN0YXJ0ID09IFRSVUUgJiYgZXZlbnRfdHlwZSAhPSBHU1RfVE9ORV9EVE1GX1RZUEVfRVZFTlQpKQotICAgIGdvdG8gZmFpbHVyZTsKLQotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChldmVudF9zdHJ1Y3R1cmUsICJtZXRob2QiLCAmbWV0aG9kKSkgewotICAgIGlmIChtZXRob2QgIT0gMikgewotICAgICAgZ290byBmYWlsdXJlOwotICAgIH0KLSAgfQotCi0gIGlmIChzdGFydCkKLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoZXZlbnRfc3RydWN0dXJlLCAibnVtYmVyIiwgJmV2ZW50X251bWJlcikgfHwKLSAgICAgICAgIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoZXZlbnRfc3RydWN0dXJlLCAidm9sdW1lIiwgJmV2ZW50X3ZvbHVtZSkpCi0gICAgICBnb3RvIGZhaWx1cmU7Ci0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKGR0bWZzcmMpOwotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoZXZlbnRfc3RydWN0dXJlLCAibGFzdC1zdG9wIiwgJmxhc3Rfc3RvcCkpCi0gICAgZHRtZnNyYy0+bGFzdF9zdG9wID0gbGFzdF9zdG9wOwotICBlbHNlCi0gICAgZHRtZnNyYy0+bGFzdF9zdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgY29ycmVjdF9vcmRlciA9IChzdGFydCAhPSBkdG1mc3JjLT5sYXN0X2V2ZW50X3dhc19zdGFydCk7Ci0gIGR0bWZzcmMtPmxhc3RfZXZlbnRfd2FzX3N0YXJ0ID0gc3RhcnQ7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkdG1mc3JjKTsKLQotICBpZiAoIWNvcnJlY3Rfb3JkZXIpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIGlmIChzdGFydCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJSZWNlaXZlZCBzdGFydCBldmVudCAlZCB3aXRoIHZvbHVtZSAlZCIsCi0gICAgICAgIGV2ZW50X251bWJlciwgZXZlbnRfdm9sdW1lKTsKLSAgICBnc3RfZHRtZl9zcmNfYWRkX3N0YXJ0X2V2ZW50IChkdG1mc3JjLCBldmVudF9udW1iZXIsIGV2ZW50X3ZvbHVtZSk7Ci0gIH0KLQotICBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiUmVjZWl2ZWQgc3RvcCBldmVudCIpOwotICAgIGdzdF9kdG1mX3NyY19hZGRfc3RvcF9ldmVudCAoZHRtZnNyYyk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLWZhaWx1cmU6Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHRtZl9zcmNfaGFuZGxlX2V2ZW50IChHc3RCYXNlU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3REVE1GU3JjICpkdG1mc3JjOwotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLQotICBkdG1mc3JjID0gR1NUX0RUTUZfU1JDIChzcmMpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAiUmVjZWl2ZWQgYW4gJXMgZXZlbnQgb24gdGhlIHNyYyBwYWQiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU06Ci0gICAgICBpZiAoZ3N0X2V2ZW50X2hhc19uYW1lIChldmVudCwgImR0bWYtZXZlbnQiKSkgewotICAgICAgICByZXN1bHQgPSBnc3RfZHRtZl9zcmNfaGFuZGxlX2R0bWZfZXZlbnQgKGR0bWZzcmMsIGV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5ldmVudCAoc3JjLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHRtZl9zcmNfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmMgPSBHU1RfRFRNRl9TUkMgKGVsZW1lbnQpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJSZWNlaXZlZCBhbiAlcyBldmVudCB2aWEgc2VuZF9ldmVudCIsCi0gICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQjoKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU06Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU06Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09COgotICAgICAgaWYgKGdzdF9ldmVudF9oYXNfbmFtZSAoZXZlbnQsICJkdG1mLWV2ZW50IikpIHsKLSAgICAgICAgcmV0ID0gZ3N0X2R0bWZfc3JjX2hhbmRsZV9kdG1mX2V2ZW50IChkdG1mc3JjLCBldmVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zZW5kX2V2ZW50IChlbGVtZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHRtZl9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmM7Ci0KLSAgZHRtZnNyYyA9IEdTVF9EVE1GX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfSU5URVJWQUw6Ci0gICAgICBkdG1mc3JjLT5pbnRlcnZhbCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdG1mX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RFRNRlNyYyAqZHRtZnNyYzsKLQotICBkdG1mc3JjID0gR1NUX0RUTUZfU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9JTlRFUlZBTDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBkdG1mc3JjLT5pbnRlcnZhbCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHRtZl9wcmVwYXJlX3RpbWVzdGFtcHMgKEdzdERUTUZTcmMgKiBkdG1mc3JjKQotewotICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gIGxhc3Rfc3RvcCA9IGR0bWZzcmMtPmxhc3Rfc3RvcDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGR0bWZzcmMpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFzdF9zdG9wKSkgewotICAgIHRpbWVzdGFtcCA9IGxhc3Rfc3RvcDsKLSAgfSBlbHNlIHsKLSAgICBHc3RDbG9jayAqY2xvY2s7Ci0KLSAgICAvKiBJZiB0aGVyZSBpcyBubyB2YWxpZCBzdGFydCB0aW1lLCBsZXRzIHVzZSBub3cgYXMgdGhlIHN0YXJ0IHRpbWUgKi8KLQotICAgIGNsb2NrID0gZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHU1RfRUxFTUVOVCAoZHRtZnNyYykpOwotICAgIGlmIChjbG9jayAhPSBOVUxMKSB7Ci0gICAgICB0aW1lc3RhbXAgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKQotICAgICAgICAgIC0gZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAoR1NUX0VMRU1FTlQgKGR0bWZzcmMpKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgICB9IGVsc2UgewotICAgICAgZ2NoYXIgKmR0bWZfbmFtZSA9IGdzdF9lbGVtZW50X2dldF9uYW1lIChkdG1mc3JjKTsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGR0bWZzcmMsICJObyBjbG9jayBzZXQgZm9yIGVsZW1lbnQgJXMiLCBkdG1mX25hbWUpOwotICAgICAgZHRtZnNyYy0+dGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIGdfZnJlZSAoZHRtZl9uYW1lKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLQotICAvKiBNYWtlIHN1cmUgdGhlIHRpbWVzdGFtcCBhbHdheXMgZ29lcyBmb3J3YXJkICovCi0gIGlmICh0aW1lc3RhbXAgPiBkdG1mc3JjLT50aW1lc3RhbXApCi0gICAgZHRtZnNyYy0+dGltZXN0YW1wID0gdGltZXN0YW1wOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R0bWZfc3JjX2FkZF9zdGFydF9ldmVudCAoR3N0RFRNRlNyYyAqIGR0bWZzcmMsIGdpbnQgZXZlbnRfbnVtYmVyLAotICAgIGdpbnQgZXZlbnRfdm9sdW1lKQotewotCi0gIEdzdERUTUZTcmNFdmVudCAqZXZlbnQgPSBnX3NsaWNlX25ldzAgKEdzdERUTUZTcmNFdmVudCk7Ci0gIGV2ZW50LT5ldmVudF90eXBlID0gRFRNRl9FVkVOVF9UWVBFX1NUQVJUOwotICBldmVudC0+c2FtcGxlID0gMDsKLSAgZXZlbnQtPmV2ZW50X251bWJlciA9IENMQU1QIChldmVudF9udW1iZXIsIE1JTl9FVkVOVCwgTUFYX0VWRU5UKTsKLSAgZXZlbnQtPnZvbHVtZSA9IENMQU1QIChldmVudF92b2x1bWUsIE1JTl9WT0xVTUUsIE1BWF9WT0xVTUUpOwotCi0gIGdfYXN5bmNfcXVldWVfcHVzaCAoZHRtZnNyYy0+ZXZlbnRfcXVldWUsIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdG1mX3NyY19hZGRfc3RvcF9ldmVudCAoR3N0RFRNRlNyYyAqIGR0bWZzcmMpCi17Ci0KLSAgR3N0RFRNRlNyY0V2ZW50ICpldmVudCA9IGdfc2xpY2VfbmV3MCAoR3N0RFRNRlNyY0V2ZW50KTsKLSAgZXZlbnQtPmV2ZW50X3R5cGUgPSBEVE1GX0VWRU5UX1RZUEVfU1RPUDsKLSAgZXZlbnQtPnNhbXBsZSA9IDA7Ci0gIGV2ZW50LT5ldmVudF9udW1iZXIgPSAwOwotICBldmVudC0+dm9sdW1lID0gMDsKLQotICBnX2FzeW5jX3F1ZXVlX3B1c2ggKGR0bWZzcmMtPmV2ZW50X3F1ZXVlLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2R0bWZfc3JjX2dlbmVyYXRlX3NpbGVuY2UgKGZsb2F0IGR1cmF0aW9uLCBnaW50IHNhbXBsZV9yYXRlKQotewotICBnaW50IGJ1Zl9zaXplOwotCi0gIC8qIENyZWF0ZSBhIGJ1ZmZlciB3aXRoIGRhdGEgc2V0IHRvIDAgKi8KLSAgYnVmX3NpemUgPSAoKGR1cmF0aW9uIC8gMTAwMCkgKiBzYW1wbGVfcmF0ZSAqIFNBTVBMRV9TSVpFICogQ0hBTk5FTFMpIC8gODsKLQotICByZXR1cm4gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tYWxsb2MwIChidWZfc2l6ZSksIGJ1Zl9zaXplKTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfZHRtZl9zcmNfZ2VuZXJhdGVfdG9uZSAoR3N0RFRNRlNyY0V2ZW50ICogZXZlbnQsIERUTUZfS0VZIGtleSwKLSAgICBmbG9hdCBkdXJhdGlvbiwgZ2ludCBzYW1wbGVfcmF0ZSkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnaW50MTYgKnA7Ci0gIGdpbnQgdG9uZV9zaXplOwotICBkb3VibGUgaSA9IDA7Ci0gIGRvdWJsZSBhbXBsaXR1ZGUsIGYxLCBmMjsKLSAgZG91YmxlIHZvbHVtZV9mYWN0b3I7Ci0gIHN0YXRpYyBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtcyA9IHsgMCwgMSwgMCwgMCwgfTsKLQotICAvKiBDcmVhdGUgYSBidWZmZXIgZm9yIHRoZSB0b25lICovCi0gIHRvbmVfc2l6ZSA9ICgoZHVyYXRpb24gLyAxMDAwKSAqIHNhbXBsZV9yYXRlICogU0FNUExFX1NJWkUgKiBDSEFOTkVMUykgLyA4OwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCB0b25lX3NpemUsICZwYXJhbXMpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgcCA9IChnaW50MTYgKikgbWFwLmRhdGE7Ci0KLSAgdm9sdW1lX2ZhY3RvciA9IHBvdyAoMTAsICgtZXZlbnQtPnZvbHVtZSkgLyAyMCk7Ci0KLSAgLyoKLSAgICogRm9yIGVhY2ggc2FtcGxlIHBvaW50IHdlIGNhbGN1bGF0ZSAneCcgYXMgdGhlCi0gICAqIHRoZSBhbXBsaXR1ZGUgdmFsdWUuCi0gICAqLwotICBmb3IgKGkgPSAwOyBpIDwgKHRvbmVfc2l6ZSAvIChTQU1QTEVfU0laRSAvIDgpKTsgaSsrKSB7Ci0gICAgLyoKLSAgICAgKiBXZSBhZGQgdGhlIGZ1bmRhbWVudGFsIGZyZXF1ZW5jaWVzIHRvZ2V0aGVyLgotICAgICAqLwotICAgIGYxID0gc2luICgyICogTV9QSSAqIGtleS5sb3dfZnJlcXVlbmN5ICogKGV2ZW50LT5zYW1wbGUgLyBzYW1wbGVfcmF0ZSkpOwotICAgIGYyID0gc2luICgyICogTV9QSSAqIGtleS5oaWdoX2ZyZXF1ZW5jeSAqIChldmVudC0+c2FtcGxlIC8gc2FtcGxlX3JhdGUpKTsKLQotICAgIGFtcGxpdHVkZSA9IChmMSArIGYyKSAvIDI7Ci0KLSAgICAvKiBBZGp1c3QgdGhlIHZvbHVtZSAqLwotICAgIGFtcGxpdHVkZSAqPSB2b2x1bWVfZmFjdG9yOwotCi0gICAgLyogTWFrZSB0aGUgWy0xOjFdIGludGVydmFsIGludG8gYSBbLTMyNzY3OjMyNzY3XSBpbnRlcnZhbCAqLwotICAgIGFtcGxpdHVkZSAqPSAzMjc2NzsKLQotICAgIC8qIFN0b3JlIGl0IGluIHRoZSBkYXRhIGJ1ZmZlciAqLwotICAgICoocCsrKSA9IChnaW50MTYpIGFtcGxpdHVkZTsKLQotICAgIChldmVudC0+c2FtcGxlKSsrOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICByZXR1cm4gYnVmZmVyOwotfQotCi0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfZHRtZl9zcmNfY3JlYXRlX25leHRfdG9uZV9wYWNrZXQgKEdzdERUTUZTcmMgKiBkdG1mc3JjLAotICAgIEdzdERUTUZTcmNFdmVudCAqIGV2ZW50KQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIGdib29sZWFuIHNlbmRfc2lsZW5jZSA9IEZBTFNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAiQ3JlYXRpbmcgYnVmZmVyIGZvciB0b25lICVzIiwKLSAgICAgIERUTUZfS0VZU1tldmVudC0+ZXZlbnRfbnVtYmVyXS5ldmVudF9uYW1lKTsKLQotICBpZiAoZXZlbnQtPnBhY2tldF9jb3VudCAqIGR0bWZzcmMtPmludGVydmFsIDwgTUlOX0lOVEVSX0RJR0lUX0lOVEVSVkFMKSB7Ci0gICAgc2VuZF9zaWxlbmNlID0gVFJVRTsKLSAgfQotCi0gIGlmIChzZW5kX3NpbGVuY2UpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZHRtZnNyYywgIkdlbmVyYXRpbmcgc2lsZW5jZSIpOwotICAgIGJ1ZiA9IGdzdF9kdG1mX3NyY19nZW5lcmF0ZV9zaWxlbmNlIChkdG1mc3JjLT5pbnRlcnZhbCwKLSAgICAgICAgZHRtZnNyYy0+c2FtcGxlX3JhdGUpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAiR2VuZXJhdGluZyB0b25lIik7Ci0gICAgYnVmID0gZ3N0X2R0bWZfc3JjX2dlbmVyYXRlX3RvbmUgKGV2ZW50LCBEVE1GX0tFWVNbZXZlbnQtPmV2ZW50X251bWJlcl0sCi0gICAgICAgIGR0bWZzcmMtPmludGVydmFsLCBkdG1mc3JjLT5zYW1wbGVfcmF0ZSk7Ci0gIH0KLSAgZXZlbnQtPnBhY2tldF9jb3VudCsrOwotCi0KLSAgLyogdGltZXN0YW1wIGFuZCBkdXJhdGlvbiBvZiBHc3RCdWZmZXIgKi8KLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGR0bWZzcmMtPmludGVydmFsICogR1NUX01TRUNPTkQ7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gZHRtZnNyYy0+dGltZXN0YW1wOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAiQ3JlYXRpbmcgbmV3IGJ1ZmZlciB3aXRoIGV2ZW50ICV1IGR1cmF0aW9uICIKLSAgICAgICIgZ3N0OiAlIiBHU1RfVElNRV9GT1JNQVQgIiBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBldmVudC0+ZXZlbnRfbnVtYmVyLCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7Ci0KLSAgZHRtZnNyYy0+dGltZXN0YW1wICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdG1mX3NyY19wb3N0X21lc3NhZ2UgKEdzdERUTUZTcmMgKiBkdG1mc3JjLCBjb25zdCBnY2hhciAqIG1lc3NhZ2VfbmFtZSwKLSAgICBHc3REVE1GU3JjRXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U3RydWN0dXJlICpzID0gTlVMTDsKLQotICBzd2l0Y2ggKGV2ZW50LT5ldmVudF90eXBlKSB7Ci0gICAgY2FzZSBEVE1GX0VWRU5UX1RZUEVfU1RBUlQ6Ci0gICAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKG1lc3NhZ2VfbmFtZSwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICAgICAgIm1ldGhvZCIsIEdfVFlQRV9JTlQsIDIsCi0gICAgICAgICAgInN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsCi0gICAgICAgICAgIm51bWJlciIsIEdfVFlQRV9JTlQsIGV2ZW50LT5ldmVudF9udW1iZXIsCi0gICAgICAgICAgInZvbHVtZSIsIEdfVFlQRV9JTlQsIGV2ZW50LT52b2x1bWUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEVE1GX0VWRU5UX1RZUEVfU1RPUDoKLSAgICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAobWVzc2FnZV9uYW1lLAotICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0lOVCwgMSwgIm1ldGhvZCIsIEdfVFlQRV9JTlQsIDIsCi0gICAgICAgICAgInN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRFRNRl9FVkVOVF9UWVBFX1BBVVNFX1RBU0s6Ci0gICAgICByZXR1cm47Ci0gIH0KLQotICBpZiAocykKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChkdG1mc3JjKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKGR0bWZzcmMpLCBzKSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZHRtZl9zcmNfY3JlYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdERUTUZTcmNFdmVudCAqZXZlbnQ7Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmM7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tJRCAqY2xvY2tpZDsKLSAgR3N0Q2xvY2tSZXR1cm4gY2xvY2tyZXQ7Ci0KLSAgZHRtZnNyYyA9IEdTVF9EVE1GX1NSQyAoYmFzZXNyYyk7Ci0KLSAgZG8gewotCi0gICAgaWYgKGR0bWZzcmMtPmxhc3RfZXZlbnQgPT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgInBvcHBpbmciKTsKLSAgICAgIGV2ZW50ID0gZ19hc3luY19xdWV1ZV9wb3AgKGR0bWZzcmMtPmV2ZW50X3F1ZXVlKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgInBvcHBlZCAlZCIsIGV2ZW50LT5ldmVudF90eXBlKTsKLQotICAgICAgc3dpdGNoIChldmVudC0+ZXZlbnRfdHlwZSkgewotICAgICAgICBjYXNlIERUTUZfRVZFTlRfVFlQRV9TVE9QOgotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZHRtZnNyYywKLSAgICAgICAgICAgICAgIlJlY2VpdmVkIGEgRFRNRiBzdG9wIGV2ZW50IHdoZW4gYWxyZWFkeSBzdG9wcGVkIik7Ci0gICAgICAgICAgZ3N0X2R0bWZfc3JjX3Bvc3RfbWVzc2FnZSAoZHRtZnNyYywgImR0bWYtZXZlbnQtZHJvcHBlZCIsIGV2ZW50KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVE1GX0VWRU5UX1RZUEVfU1RBUlQ6Ci0gICAgICAgICAgZ3N0X2R0bWZfcHJlcGFyZV90aW1lc3RhbXBzIChkdG1mc3JjKTsKLQotICAgICAgICAgIGV2ZW50LT5wYWNrZXRfY291bnQgPSAwOwotICAgICAgICAgIGR0bWZzcmMtPmxhc3RfZXZlbnQgPSBldmVudDsKLSAgICAgICAgICBldmVudCA9IE5VTEw7Ci0gICAgICAgICAgZ3N0X2R0bWZfc3JjX3Bvc3RfbWVzc2FnZSAoZHRtZnNyYywgImR0bWYtZXZlbnQtcHJvY2Vzc2VkIiwKLSAgICAgICAgICAgICAgZHRtZnNyYy0+bGFzdF9ldmVudCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFRNRl9FVkVOVF9UWVBFX1BBVVNFX1RBU0s6Ci0gICAgICAgICAgLyoKLSAgICAgICAgICAgKiBXZSdyZSBwdXNoaW5nIGl0IGJhY2sgYmVjYXVzZSBpdCBoYXMgdG8gc3RheSBpbiB0aGVyZSB1bnRpbAotICAgICAgICAgICAqIHRoZSB0YXNrIGlzIHJlYWxseSBwYXVzZWQgKGFuZCB0aGUgcXVldWUgd2lsbCB0aGVuIGJlIGZsdXNoZWQpCi0gICAgICAgICAgICovCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgInB1c2hpbmcgcGF1c2VfdGFzay4uLiIpOwotICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gICAgICAgICAgaWYgKGR0bWZzcmMtPnBhdXNlZCkgewotICAgICAgICAgICAgZ19hc3luY19xdWV1ZV9wdXNoIChkdG1mc3JjLT5ldmVudF9xdWV1ZSwgZXZlbnQpOwotICAgICAgICAgICAgZ290byBwYXVzZWRfbG9ja2VkOwotICAgICAgICAgIH0KLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAoZXZlbnQpCi0gICAgICAgIGdfc2xpY2VfZnJlZSAoR3N0RFRNRlNyY0V2ZW50LCBldmVudCk7Ci0gICAgfSBlbHNlIGlmIChkdG1mc3JjLT5sYXN0X2V2ZW50LT5wYWNrZXRfY291bnQgKiBkdG1mc3JjLT5pbnRlcnZhbCA+PQotICAgICAgICBNSU5fRFVUWV9DWUNMRSkgewotICAgICAgZXZlbnQgPSBnX2FzeW5jX3F1ZXVlX3RyeV9wb3AgKGR0bWZzcmMtPmV2ZW50X3F1ZXVlKTsKLQotICAgICAgaWYgKGV2ZW50ICE9IE5VTEwpIHsKLQotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5ldmVudF90eXBlKSB7Ci0gICAgICAgICAgY2FzZSBEVE1GX0VWRU5UX1RZUEVfU1RBUlQ6Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGR0bWZzcmMsCi0gICAgICAgICAgICAgICAgIlJlY2VpdmVkIHR3byBjb25zZWN1dGl2ZSBEVE1GIHN0YXJ0IGV2ZW50cyIpOwotICAgICAgICAgICAgZ3N0X2R0bWZfc3JjX3Bvc3RfbWVzc2FnZSAoZHRtZnNyYywgImR0bWYtZXZlbnQtZHJvcHBlZCIsIGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFRNRl9FVkVOVF9UWVBFX1NUT1A6Ci0gICAgICAgICAgICBnX3NsaWNlX2ZyZWUgKEdzdERUTUZTcmNFdmVudCwgZHRtZnNyYy0+bGFzdF9ldmVudCk7Ci0gICAgICAgICAgICBkdG1mc3JjLT5sYXN0X2V2ZW50ID0gTlVMTDsKLSAgICAgICAgICAgIGdzdF9kdG1mX3NyY19wb3N0X21lc3NhZ2UgKGR0bWZzcmMsICJkdG1mLWV2ZW50LXByb2Nlc3NlZCIsIGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFRNRl9FVkVOVF9UWVBFX1BBVVNFX1RBU0s6Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogV2UncmUgcHVzaGluZyBpdCBiYWNrIGJlY2F1c2UgaXQgaGFzIHRvIHN0YXkgaW4gdGhlcmUgdW50aWwKLSAgICAgICAgICAgICAqIHRoZSB0YXNrIGlzIHJlYWxseSBwYXVzZWQgKGFuZCB0aGUgcXVldWUgd2lsbCB0aGVuIGJlIGZsdXNoZWQpCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJwdXNoaW5nIHBhdXNlX3Rhc2suLi4iKTsKLQotICAgICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChkdG1mc3JjKTsKLSAgICAgICAgICAgIGlmIChkdG1mc3JjLT5wYXVzZWQpIHsKLSAgICAgICAgICAgICAgZ19hc3luY19xdWV1ZV9wdXNoIChkdG1mc3JjLT5ldmVudF9xdWV1ZSwgZXZlbnQpOwotICAgICAgICAgICAgICBnb3RvIHBhdXNlZF9sb2NrZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGdfc2xpY2VfZnJlZSAoR3N0RFRNRlNyY0V2ZW50LCBldmVudCk7Ci0gICAgICB9Ci0gICAgfQotICB9IHdoaWxlIChkdG1mc3JjLT5sYXN0X2V2ZW50ID09IE5VTEwpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAiZW5kIGV2ZW50IGNoZWNrLCBub3cgd2FpdCBmb3IgdGhlIHByb3BlciB0aW1lIik7Ci0KLSAgY2xvY2sgPSBnc3RfZWxlbWVudF9nZXRfY2xvY2sgKEdTVF9FTEVNRU5UIChiYXNlc3JjKSk7Ci0KLSAgY2xvY2tpZCA9IGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKGNsb2NrLCBkdG1mc3JjLT50aW1lc3RhbXAgKwotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAoR1NUX0VMRU1FTlQgKGR0bWZzcmMpKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGR0bWZzcmMpOwotICBpZiAoIWR0bWZzcmMtPnBhdXNlZCkgewotICAgIGR0bWZzcmMtPmNsb2NraWQgPSBjbG9ja2lkOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkdG1mc3JjKTsKLQotICAgIGNsb2NrcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGNsb2NraWQsIE5VTEwpOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChkdG1mc3JjKTsKLSAgICBpZiAoZHRtZnNyYy0+cGF1c2VkKQotICAgICAgY2xvY2tyZXQgPSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7Ci0gIH0gZWxzZSB7Ci0gICAgY2xvY2tyZXQgPSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQ7Ci0gIH0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChjbG9ja2lkKTsKLSAgZHRtZnNyYy0+Y2xvY2tpZCA9IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkdG1mc3JjKTsKLQotICBpZiAoY2xvY2tyZXQgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSB7Ci0gICAgZ290byBwYXVzZWQ7Ci0gIH0KLQotICBidWYgPSBnc3RfZHRtZl9zcmNfY3JlYXRlX25leHRfdG9uZV9wYWNrZXQgKGR0bWZzcmMsIGR0bWZzcmMtPmxhc3RfZXZlbnQpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAiQ3JlYXRlZCBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICAqYnVmZmVyID0gYnVmOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotcGF1c2VkX2xvY2tlZDoKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGR0bWZzcmMpOwotCi1wYXVzZWQ6Ci0KLSAgaWYgKGR0bWZzcmMtPmxhc3RfZXZlbnQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiU3RvcHBpbmcgY3VycmVudCBldmVudCIpOwotICAgIC8qIERvbid0IGZvcmdldCB0byByZWxlYXNlIHRoZSBzdHJlYW0gbG9jayAqLwotICAgIGdfc2xpY2VfZnJlZSAoR3N0RFRNRlNyY0V2ZW50LCBkdG1mc3JjLT5sYXN0X2V2ZW50KTsKLSAgICBkdG1mc3JjLT5sYXN0X2V2ZW50ID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdG1mX3NyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmMgPSBHU1RfRFRNRl9TUkMgKHNyYyk7Ci0gIEdzdERUTUZTcmNFdmVudCAqZXZlbnQgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJDYWxsZWQgdW5sb2NrIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkdG1mc3JjKTsKLSAgZHRtZnNyYy0+cGF1c2VkID0gVFJVRTsKLSAgaWYgKGR0bWZzcmMtPmNsb2NraWQpIHsKLSAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAoZHRtZnNyYy0+Y2xvY2tpZCk7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGR0bWZzcmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJQdXNoaW5nIHRoZSBQQVVTRV9UQVNLIGV2ZW50IG9uIHVubG9jayByZXF1ZXN0Iik7Ci0gIGV2ZW50ID0gZ19zbGljZV9uZXcwIChHc3REVE1GU3JjRXZlbnQpOwotICBldmVudC0+ZXZlbnRfdHlwZSA9IERUTUZfRVZFTlRfVFlQRV9QQVVTRV9UQVNLOwotICBnX2FzeW5jX3F1ZXVlX3B1c2ggKGR0bWZzcmMtPmV2ZW50X3F1ZXVlLCBldmVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHRtZl9zcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmMgPSBHU1RfRFRNRl9TUkMgKHNyYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgIlVubG9jayBzdG9wcGVkIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkdG1mc3JjKTsKLSAgZHRtZnNyYy0+cGF1c2VkID0gRkFMU0U7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkdG1mc3JjKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdG1mX3NyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICBHc3REVE1GU3JjICpkdG1mc3JjID0gR1NUX0RUTUZfU1JDIChiYXNlc3JjKTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYykpOwotCi0gIGlmICghY2FwcykKLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKGJhc2VzcmMpKTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGNhcHMgPSBnc3RfY2Fwc190cnVuY2F0ZSAoY2Fwcyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJyYXRlIiwgREVGQVVMVF9TQU1QTEVfUkFURSk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJyYXRlIiwgJmR0bWZzcmMtPnNhbXBsZV9yYXRlKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGR0bWZzcmMsICJDb3VsZCBub3QgZ2V0IHJhdGUiKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIGNhcHMpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kdG1mX3NyY19xdWVyeSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdERUTUZTcmMgKmR0bWZzcmMgPSBHU1RfRFRNRl9TUkMgKGJhc2VzcmMpOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gICAgICBsYXRlbmN5ID0gZHRtZnNyYy0+aW50ZXJ2YWwgKiBHU1RfTVNFQ09ORDsKLSAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGdzdF9iYXNlX3NyY19pc19saXZlIChiYXNlc3JjKSwgbGF0ZW5jeSwKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJSZXBvcnRpbmcgbGF0ZW5jeSBvZiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoYmFzZXNyYywgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9kdG1mX3NyY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3REVE1GU3JjICpkdG1mc3JjOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7Ci0gIGdib29sZWFuIG5vX3ByZXJvbGwgPSBGQUxTRTsKLSAgR3N0RFRNRlNyY0V2ZW50ICpldmVudCA9IE5VTEw7Ci0KLSAgZHRtZnNyYyA9IEdTVF9EVE1GX1NSQyAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIC8qIEZsdXNoaW5nIHRoZSBldmVudCBxdWV1ZSAqLwotICAgICAgZXZlbnQgPSBnX2FzeW5jX3F1ZXVlX3RyeV9wb3AgKGR0bWZzcmMtPmV2ZW50X3F1ZXVlKTsKLQotICAgICAgd2hpbGUgKGV2ZW50ICE9IE5VTEwpIHsKLSAgICAgICAgZ3N0X2R0bWZfc3JjX3Bvc3RfbWVzc2FnZSAoZHRtZnNyYywgImR0bWYtZXZlbnQtZHJvcHBlZCIsIGV2ZW50KTsKLSAgICAgICAgZ19zbGljZV9mcmVlIChHc3REVE1GU3JjRXZlbnQsIGV2ZW50KTsKLSAgICAgICAgZXZlbnQgPSBnX2FzeW5jX3F1ZXVlX3RyeV9wb3AgKGR0bWZzcmMtPmV2ZW50X3F1ZXVlKTsKLSAgICAgIH0KLSAgICAgIGR0bWZzcmMtPmxhc3RfZXZlbnRfd2FzX3N0YXJ0ID0gRkFMU0U7Ci0gICAgICBkdG1mc3JjLT50aW1lc3RhbXAgPSAwOwotICAgICAgbm9fcHJlcm9sbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoKHJlc3VsdCA9Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9kdG1mX3NyY19wYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgICAgIHRyYW5zaXRpb24pKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIG5vX3ByZXJvbGwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJGbHVzaGluZyBldmVudCBxdWV1ZSIpOwotICAgICAgLyogRmx1c2hpbmcgdGhlIGV2ZW50IHF1ZXVlICovCi0gICAgICBldmVudCA9IGdfYXN5bmNfcXVldWVfdHJ5X3BvcCAoZHRtZnNyYy0+ZXZlbnRfcXVldWUpOwotCi0gICAgICB3aGlsZSAoZXZlbnQgIT0gTlVMTCkgewotICAgICAgICBnc3RfZHRtZl9zcmNfcG9zdF9tZXNzYWdlIChkdG1mc3JjLCAiZHRtZi1ldmVudC1kcm9wcGVkIiwgZXZlbnQpOwotICAgICAgICBnX3NsaWNlX2ZyZWUgKEdzdERUTUZTcmNFdmVudCwgZXZlbnQpOwotICAgICAgICBldmVudCA9IGdfYXN5bmNfcXVldWVfdHJ5X3BvcCAoZHRtZnNyYy0+ZXZlbnRfcXVldWUpOwotICAgICAgfQotICAgICAgZHRtZnNyYy0+bGFzdF9ldmVudF93YXNfc3RhcnQgPSBGQUxTRTsKLQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKG5vX3ByZXJvbGwgJiYgcmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKLSAgICByZXN1bHQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLWZhaWx1cmU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkdG1mc3JjLCAicGFyZW50IGZhaWxlZCBzdGF0ZSBjaGFuZ2UiKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfZHRtZl9zcmNfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJkdG1mc3JjIiwKLSAgICAgIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX0RUTUZfU1JDKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9kdG1mL2dzdGR0bWZzcmMuaCBiL2dzdC9kdG1mL2dzdGR0bWZzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0NDBiYy4uMDAwMDAwMAotLS0gYS9nc3QvZHRtZi9nc3RkdG1mc3JjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyogR1N0cmVhbWVyIERUTUYgc291cmNlCi0gKgotICogZ3N0ZHRtZnNyYy5oOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IENvbGxhYm9yYS4KLSAqICAgQ29udGFjdDogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uLgotICogICBDb250YWN0OiBaZWVzaGFuIEFsaSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0RUTUZfU1JDX0hfXwotI2RlZmluZSBfX0dTVF9EVE1GX1NSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0YnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX0RUTUZfU1JDICAgICAgICAgICAgICAgKGdzdF9kdG1mX3NyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfRFRNRl9TUkMob2JqKSAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9EVE1GX1NSQyxHc3REVE1GU3JjKSkKLSNkZWZpbmUgR1NUX0RUTUZfU1JDX0NMQVNTKGtsYXNzKSAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9EVE1GX1NSQyxHc3REVE1GU3JjQ2xhc3MpKQotI2RlZmluZSBHU1RfRFRNRl9TUkNfR0VUX0NMQVNTKG9iaikgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfRFRNRl9TUkMsIEdzdERUTUZTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19EVE1GX1NSQyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0RUTUZfU1JDKSkKLSNkZWZpbmUgR1NUX0lTX0RUTUZfU1JDX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9EVE1GX1NSQykpCi0jZGVmaW5lIEdTVF9EVE1GX1NSQ19DQVNUKG9iaikgICAgICAgICAgKChHc3REVE1GU3JjICopKG9iaikpCi10eXBlZGVmIHN0cnVjdCBfR3N0RFRNRlNyYyBHc3REVE1GU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERUTUZTcmNDbGFzcyBHc3REVE1GU3JjQ2xhc3M7Ci0KLWVudW0gX0dzdERUTUZFdmVudFR5cGUKLXsKLSAgRFRNRl9FVkVOVF9UWVBFX1NUQVJULAotICBEVE1GX0VWRU5UX1RZUEVfU1RPUCwKLSAgRFRNRl9FVkVOVF9UWVBFX1BBVVNFX1RBU0sKLX07Ci0KLXR5cGVkZWYgZW51bSBfR3N0RFRNRkV2ZW50VHlwZSBHc3REVE1GRXZlbnRUeXBlOwotCi1zdHJ1Y3QgX0dzdERUTUZTcmNFdmVudAotewotICBHc3REVE1GRXZlbnRUeXBlIGV2ZW50X3R5cGU7Ci0gIGRvdWJsZSBzYW1wbGU7Ci0gIGd1aW50MTYgZXZlbnRfbnVtYmVyOwotICBndWludDE2IHZvbHVtZTsKLSAgZ3VpbnQzMiBwYWNrZXRfY291bnQ7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RFRNRlNyY0V2ZW50IEdzdERUTUZTcmNFdmVudDsKLQotLyoqCi0gKiBHc3REVE1GU3JjOgotICogQGVsZW1lbnQ6IHRoZSBwYXJlbnQgZWxlbWVudC4KLSAqCi0gKiBUaGUgb3BhcXVlICNHc3REVE1GU3JjIGRhdGEgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdERUTUZTcmMKLXsKLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdEJhc2VTcmMgcGFyZW50OwotICBHQXN5bmNRdWV1ZSAqZXZlbnRfcXVldWU7Ci0gIEdzdERUTUZTcmNFdmVudCAqbGFzdF9ldmVudDsKLSAgZ2Jvb2xlYW4gbGFzdF9ldmVudF93YXNfc3RhcnQ7Ci0KLSAgZ3VpbnQxNiBpbnRlcnZhbDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICBnYm9vbGVhbiBwYXVzZWQ7Ci0gIEdzdENsb2NrSUQgY2xvY2tpZDsKLQotICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wOwotCi0gIGdpbnQgc2FtcGxlX3JhdGU7Ci19OwotCi0KLXN0cnVjdCBfR3N0RFRNRlNyY0NsYXNzCi17Ci0gIEdzdEJhc2VTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZHRtZl9zcmNfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfZHRtZl9zcmNfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfRFRNRl9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuYyBiL2dzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzgyN2JlLi4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTM0ICswLDAgQEAKLS8qIEdzdFJ0cER0bWZEZXBheQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTGltaXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKiAgIENvbnRhY3Q6IFlvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGR0bWZkZXBheQotICogQHNlZV9hbHNvOiBydHBkdG1mc3JjLCBydHBkdG1mbXV4Ci0gKgotICogVGhpcyBlbGVtZW50IHRha2VzIFJUUCBEVE1GIHBhY2tldHMgYW5kIHByb2R1Y2VzIHNvdW5kLiBJdCBhbHNvIGVtaXRzIGEKLSAqIG1lc3NhZ2Ugb24gdGhlICNHc3RCdXMuCi0gKgotICogVGhlIG1lc3NhZ2UgaXMgY2FsbGVkICJkdG1mLWV2ZW50IiBhbmQgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzCi0gKiA8aW5mb3JtYWx0YWJsZT4KLSAqIDx0Z3JvdXAgY29scz0nNCc+Ci0gKiA8Y29sc3BlYyBjb2xuYW1lPSdOYW1lJyAvPgotICogPGNvbHNwZWMgY29sbmFtZT0nVHlwZScgLz4KLSAqIDxjb2xzcGVjIGNvbG5hbWU9J1Bvc3NpYmxlIHZhbHVlcycgLz4KLSAqIDxjb2xzcGVjIGNvbG5hbWU9J1B1cnBvc2UnIC8+Ci0gKiA8dGhlYWQ+Ci0gKiA8cm93PgotICogPGVudHJ5Pk5hbWU8L2VudHJ5PgotICogPGVudHJ5PkdUeXBlPC9lbnRyeT4KLSAqIDxlbnRyeT5Qb3NzaWJsZSB2YWx1ZXM8L2VudHJ5PgotICogPGVudHJ5PlB1cnBvc2U8L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8L3RoZWFkPgotICogPHRib2R5PgotICogPHJvdz4KLSAqIDxlbnRyeT50eXBlPC9lbnRyeT4KLSAqIDxlbnRyeT5HX1RZUEVfSU5UPC9lbnRyeT4KLSAqIDxlbnRyeT4wLTE8L2VudHJ5PgotICogPGVudHJ5PldoaWNoIG9mIHRoZSB0d28gbWV0aG9kcwotICogc3BlY2lmaWVkIGluIFJGQyAyODMzIHRvIHVzZS4gVGhlIHZhbHVlIHNob3VsZCBiZSAwIGZvciB0b25lcyBhbmQgMSBmb3IKLSAqIG5hbWVkIGV2ZW50cy4gVG9uZXMgYXJlIHNwZWNpZmllZCBieSB0aGVpciBmcmVxdWVuY2llcyBhbmQgZXZlbnRzIGFyZSBzcGVjaWVkCi0gKiBieSB0aGVpciBudW1iZXIuIFRoaXMgZWxlbWVudCBjdXJyZW50bHkgb25seSByZWNvZ25pemVzIGV2ZW50cy4KLSAqIERvIG5vdCBjb25mdXNlIHdpdGggIm1ldGhvZCIgd2hpY2ggc3BlY2lmaWVkIHRoZSBvdXRwdXQuCi0gKiA8L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8cm93PgotICogPGVudHJ5Pm51bWJlcjwvZW50cnk+Ci0gKiA8ZW50cnk+R19UWVBFX0lOVDwvZW50cnk+Ci0gKiA8ZW50cnk+MC0xNjwvZW50cnk+Ci0gKiA8ZW50cnk+VGhlIGV2ZW50IG51bWJlci48L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8cm93PgotICogPGVudHJ5PnZvbHVtZTwvZW50cnk+Ci0gKiA8ZW50cnk+R19UWVBFX0lOVDwvZW50cnk+Ci0gKiA8ZW50cnk+MC0zNjwvZW50cnk+Ci0gKiA8ZW50cnk+VGhpcyBmaWVsZCBkZXNjcmliZXMgdGhlIHBvd2VyIGxldmVsIG9mIHRoZSB0b25lLCBleHByZXNzZWQgaW4gZEJtMAotICogYWZ0ZXIgZHJvcHBpbmcgdGhlIHNpZ24uIFBvd2VyIGxldmVscyByYW5nZSBmcm9tIDAgdG8gLTYzIGRCbTAuIFRoZSByYW5nZSBvZgotICogdmFsaWQgRFRNRiBpcyBmcm9tIDAgdG8gLTM2IGRCbTAuCi0gKiA8L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8cm93PgotICogPGVudHJ5Pm1ldGhvZDwvZW50cnk+Ci0gKiA8ZW50cnk+R19UWVBFX0lOVDwvZW50cnk+Ci0gKiA8ZW50cnk+MTwvZW50cnk+Ci0gKiA8ZW50cnk+VGhpcyBmaWVsZCB3aWxsIGFsd2F5cyBiZWVuIDEgKGllIFJUUCBldmVudCkgZnJvbSB0aGlzIGVsZW1lbnQuCi0gKiA8L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8L3Rib2R5PgotICogPC90Z3JvdXA+Ci0gKiA8L2luZm9ybWFsdGFibGU+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cnRwZHRtZmRlcGF5LmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jZGVmaW5lIERFRkFVTFRfUEFDS0VUX0lOVEVSVkFMICA1MCAgICAgLyogbXMgKi8KLSNkZWZpbmUgTUlOX1BBQ0tFVF9JTlRFUlZBTCAgICAgIDEwICAgICAvKiBtcyAqLwotI2RlZmluZSBNQVhfUEFDS0VUX0lOVEVSVkFMICAgICAgNTAgICAgIC8qIG1zICovCi0jZGVmaW5lIFNBTVBMRV9SQVRFICAgICAgICAgICAgICA4MDAwCi0jZGVmaW5lIFNBTVBMRV9TSVpFICAgICAgICAgICAgICAxNgotI2RlZmluZSBDSEFOTkVMUyAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBNSU5fRFVUWV9DWUNMRSAgICAgICAgICAgKE1JTl9JTlRFUl9ESUdJVF9JTlRFUlZBTCArIE1JTl9QVUxTRV9EVVJBVElPTikKLQotI2RlZmluZSBNSU5fVU5JVF9USU1FICAgICAgICAgICAgMAotI2RlZmluZSBNQVhfVU5JVF9USU1FICAgICAgICAgICAgMTAwMAotI2RlZmluZSBERUZBVUxUX1VOSVRfVElNRSAgICAgICAgMAotCi0jZGVmaW5lIERFRkFVTFRfTUFYX0RVUkFUSU9OICAgICAwCi0KLXR5cGVkZWYgc3RydWN0IHN0X2R0bWZfa2V5Ci17Ci0gIGZsb2F0IGxvd19mcmVxdWVuY3k7Ci0gIGZsb2F0IGhpZ2hfZnJlcXVlbmN5OwotfSBEVE1GX0tFWTsKLQotc3RhdGljIGNvbnN0IERUTUZfS0VZIERUTUZfS0VZU1tdID0gewotICB7OTQxLCAxMzM2fSwKLSAgezY5NywgMTIwOX0sCi0gIHs2OTcsIDEzMzZ9LAotICB7Njk3LCAxNDc3fSwKLSAgezc3MCwgMTIwOX0sCi0gIHs3NzAsIDEzMzZ9LAotICB7NzcwLCAxNDc3fSwKLSAgezg1MiwgMTIwOX0sCi0gIHs4NTIsIDEzMzZ9LAotICB7ODUyLCAxNDc3fSwKLSAgezk0MSwgMTIwOX0sCi0gIHs5NDEsIDE0Nzd9LAotICB7Njk3LCAxNjMzfSwKLSAgezc3MCwgMTYzM30sCi0gIHs4NTIsIDE2MzN9LAotICB7OTQxLCAxNjMzfSwKLX07Ci0KLSNkZWZpbmUgTUFYX0RUTUZfRVZFTlRTIDE2Ci0KLWVudW0KLXsKLSAgRFRNRl9LRVlfRVZFTlRfMSA9IDEsCi0gIERUTUZfS0VZX0VWRU5UXzIgPSAyLAotICBEVE1GX0tFWV9FVkVOVF8zID0gMywKLSAgRFRNRl9LRVlfRVZFTlRfNCA9IDQsCi0gIERUTUZfS0VZX0VWRU5UXzUgPSA1LAotICBEVE1GX0tFWV9FVkVOVF82ID0gNiwKLSAgRFRNRl9LRVlfRVZFTlRfNyA9IDcsCi0gIERUTUZfS0VZX0VWRU5UXzggPSA4LAotICBEVE1GX0tFWV9FVkVOVF85ID0gOSwKLSAgRFRNRl9LRVlfRVZFTlRfMCA9IDAsCi0gIERUTUZfS0VZX0VWRU5UX1NUQVIgPSAxMCwKLSAgRFRNRl9LRVlfRVZFTlRfUE9VTkQgPSAxMSwKLSAgRFRNRl9LRVlfRVZFTlRfQSA9IDEyLAotICBEVE1GX0tFWV9FVkVOVF9CID0gMTMsCi0gIERUTUZfS0VZX0VWRU5UX0MgPSAxNCwKLSAgRFRNRl9LRVlfRVZFTlRfRCA9IDE1LAotfTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3J0cF9kdG1mX2RlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9ydHBfZHRtZl9kZXBheV9kZWJ1ZwotCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1VOSVRfVElNRSwKLSAgUFJPUF9NQVhfRFVSQVRJT04KLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2R0bWZfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgXCIiIEdTVF9BVURJT19ORSAoUzE2KSAiXCIsICIKLSAgICAgICAgInJhdGUgPSAiIEdTVF9BVURJT19SQVRFX1JBTkdFICIsICIgImNoYW5uZWxzID0gKGludCkgMSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZHRtZl9kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbIDAsIE1BWCBdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJURUxFUEhPTkUtRVZFTlRcIiIpCi0gICAgKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwRFRNRkRlcGF5LCBnc3RfcnRwX2R0bWZfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9kdG1mX2RlcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfZHRtZl9kZXBheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2R0bWZfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotZ2Jvb2xlYW4gZ3N0X3J0cF9kdG1mX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdG1mX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cERUTUZEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZHRtZl9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2R0bWZfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfZHRtZl9kZXBheV9kZWJ1ZywKLSAgICAgICJydHBkdG1mZGVwYXkiLCAwLCAicnRwZHRtZmRlcGF5IGVsZW1lbnQiKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgRFRNRiBwYWNrZXQgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yayIsCi0gICAgICAiR2VuZXJhdGVzIERUTUYgU291bmQgZnJvbSB0ZWxlcGhvbmUtZXZlbnQgUlRQIHBhY2tldHMiLAotICAgICAgIllvdW5lc3MgQWxhb3VpIDx5b3VuZXNzLmFsYW91aUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2R0bWZfZGVwYXlfc2V0X3Byb3BlcnR5KTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2R0bWZfZGVwYXlfZ2V0X3Byb3BlcnR5KTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1VOSVRfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgidW5pdC10aW1lIiwgIkR1cmF0aW9uIHVuaXR0aW1lIiwKLSAgICAgICAgICAiVGhlIHNtYWxsZXN0IHVuaXQgKG1zKSB0aGUgZHVyYXRpb24gbXVzdCBiZSBhIG11bHRpcGxlIG9mICgwIGRpc2FibGVzIGl0KSIsCi0gICAgICAgICAgTUlOX1VOSVRfVElNRSwgTUFYX1VOSVRfVElNRSwgREVGQVVMVF9VTklUX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9NQVhfRFVSQVRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1kdXJhdGlvbiIsICJNYXhpbXVtIGR1cmF0aW9uIiwKLSAgICAgICAgICAiVGhlIG1heHVtaW11bSBkdXJhdGlvbiAobXMpIG9mIHRoZSBvdXRnb2luZyBzb3VuZHBhY2tldC4gIgotICAgICAgICAgICIoMCA9IG5vIGxpbWl0KSIsIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfRFVSQVRJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2VzcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdG1mX2RlcGF5X3Byb2Nlc3MpOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdG1mX2RlcGF5X3NldGNhcHMpOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R0bWZfZGVwYXlfaW5pdCAoR3N0UnRwRFRNRkRlcGF5ICogcnRwZHRtZmRlcGF5KQotewotICBydHBkdG1mZGVwYXktPnVuaXRfdGltZSA9IERFRkFVTFRfVU5JVF9USU1FOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdG1mX2RlcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBEVE1GRGVwYXkgKnJ0cGR0bWZkZXBheTsKLQotICBydHBkdG1mZGVwYXkgPSBHU1RfUlRQX0RUTUZfREVQQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1VOSVRfVElNRToKLSAgICAgIHJ0cGR0bWZkZXBheS0+dW5pdF90aW1lID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9EVVJBVElPTjoKLSAgICAgIHJ0cGR0bWZkZXBheS0+bWF4X2R1cmF0aW9uID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdG1mX2RlcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBEVE1GRGVwYXkgKnJ0cGR0bWZkZXBheTsKLQotICBydHBkdG1mZGVwYXkgPSBHU1RfUlRQX0RUTUZfREVQQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1VOSVRfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBkdG1mZGVwYXktPnVuaXRfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0RVUkFUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0cGR0bWZkZXBheS0+bWF4X2R1cmF0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfZHRtZl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZmlsdGVyLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqZmlsdGVyY2FwcywgKnNyY2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGdpbnQgY2xvY2tfcmF0ZSA9IDgwMDA7ICAgICAgIC8qIGRlZmF1bHQgKi8KLQotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSk7Ci0gIGZpbHRlci0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgZmlsdGVyY2FwcyA9Ci0gICAgICBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGZpbHRlcikpOwotCi0gIGZpbHRlcmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChmaWx0ZXJjYXBzKTsKLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoZmlsdGVyY2FwcywgInJhdGUiLCBHX1RZUEVfSU5ULCBjbG9ja19yYXRlLCBOVUxMKTsKLQotICBzcmNjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChmaWx0ZXIpLAotICAgICAgZmlsdGVyY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJjYXBzKTsKLQotICBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZmlsdGVyKSwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfZHRtZl9zcmNfZ2VuZXJhdGVfdG9uZSAoR3N0UnRwRFRNRkRlcGF5ICogcnRwZHRtZmRlcGF5LAotICAgIEdzdFJUUERUTUZQYXlsb2FkIHBheWxvYWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2ludDE2ICpwOwotICBnaW50IHRvbmVfc2l6ZTsKLSAgZG91YmxlIGkgPSAwOwotICBkb3VibGUgYW1wbGl0dWRlLCBmMSwgZjI7Ci0gIGRvdWJsZSB2b2x1bWVfZmFjdG9yOwotICBEVE1GX0tFWSBrZXkgPSBEVE1GX0tFWVNbcGF5bG9hZC5ldmVudF07Ci0gIGd1aW50MzIgY2xvY2tfcmF0ZTsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCAqZGVwYXlsb2FkID0gR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwZHRtZmRlcGF5KTsKLSAgZ2ludCB2b2x1bWU7Ci0gIHN0YXRpYyBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtcyA9IHsgMCwgMSwgMCwgMCwgfTsKLQotICBjbG9ja19yYXRlID0gZGVwYXlsb2FkLT5jbG9ja19yYXRlOwotCi0gIC8qIENyZWF0ZSBhIGJ1ZmZlciBmb3IgdGhlIHRvbmUgKi8KLSAgdG9uZV9zaXplID0gKHBheWxvYWQuZHVyYXRpb24gKiBTQU1QTEVfU0laRSAqIENIQU5ORUxTKSAvIDg7Ci0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCB0b25lX3NpemUsICZwYXJhbXMpOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gcGF5bG9hZC5kdXJhdGlvbiAqIEdTVF9TRUNPTkQgLyBjbG9ja19yYXRlOwotICB2b2x1bWUgPSBwYXlsb2FkLnZvbHVtZTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgcCA9IChnaW50MTYgKikgbWFwLmRhdGE7Ci0KLSAgdm9sdW1lX2ZhY3RvciA9IHBvdyAoMTAsICgtdm9sdW1lKSAvIDIwKTsKLQotICAvKgotICAgKiBGb3IgZWFjaCBzYW1wbGUgcG9pbnQgd2UgY2FsY3VsYXRlICd4JyBhcyB0aGUKLSAgICogdGhlIGFtcGxpdHVkZSB2YWx1ZS4KLSAgICovCi0gIGZvciAoaSA9IDA7IGkgPCAodG9uZV9zaXplIC8gKFNBTVBMRV9TSVpFIC8gOCkpOyBpKyspIHsKLSAgICAvKgotICAgICAqIFdlIGFkZCB0aGUgZnVuZGFtZW50YWwgZnJlcXVlbmNpZXMgdG9nZXRoZXIuCi0gICAgICovCi0gICAgZjEgPSBzaW4gKDIgKiBNX1BJICoga2V5Lmxvd19mcmVxdWVuY3kgKiAocnRwZHRtZmRlcGF5LT5zYW1wbGUgLwotICAgICAgICAgICAgY2xvY2tfcmF0ZSkpOwotICAgIGYyID0gc2luICgyICogTV9QSSAqIGtleS5oaWdoX2ZyZXF1ZW5jeSAqIChydHBkdG1mZGVwYXktPnNhbXBsZSAvCi0gICAgICAgICAgICBjbG9ja19yYXRlKSk7Ci0KLSAgICBhbXBsaXR1ZGUgPSAoZjEgKyBmMikgLyAyOwotCi0gICAgLyogQWRqdXN0IHRoZSB2b2x1bWUgKi8KLSAgICBhbXBsaXR1ZGUgKj0gdm9sdW1lX2ZhY3RvcjsKLQotICAgIC8qIE1ha2UgdGhlIFstMToxXSBpbnRlcnZhbCBpbnRvIGEgWy0zMjc2NzozMjc2N10gaW50ZXJ2YWwgKi8KLSAgICBhbXBsaXR1ZGUgKj0gMzI3Njc7Ci0KLSAgICAvKiBTdG9yZSBpdCBpbiB0aGUgZGF0YSBidWZmZXIgKi8KLSAgICAqKHArKykgPSAoZ2ludDE2KSBhbXBsaXR1ZGU7Ci0KLSAgICAocnRwZHRtZmRlcGF5LT5zYW1wbGUpKys7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2R0bWZfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0QnVmZmVyICogYnVmKQotewotCi0gIEdzdFJ0cERUTUZEZXBheSAqcnRwZHRtZmRlcGF5ID0gTlVMTDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBnaW50IHBheWxvYWRfbGVuOwotICBndWludDggKnBheWxvYWQgPSBOVUxMOwotICBndWludDMyIHRpbWVzdGFtcDsKLSAgR3N0UlRQRFRNRlBheWxvYWQgZHRtZl9wYXlsb2FkOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gTlVMTDsKLSAgR3N0TWVzc2FnZSAqZHRtZl9tZXNzYWdlID0gTlVMTDsKLSAgR3N0UlRQQnVmZmVyIHJ0cGJ1ZmZlciA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0KLSAgcnRwZHRtZmRlcGF5ID0gR1NUX1JUUF9EVE1GX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1JFQUQsICZydHBidWZmZXIpOwotCi0gIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuICgmcnRwYnVmZmVyKTsKLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwYnVmZmVyKTsKLQotICBpZiAocGF5bG9hZF9sZW4gIT0gc2l6ZW9mIChHc3RSVFBEVE1GUGF5bG9hZCkpCi0gICAgZ290byBiYWRfcGFja2V0OwotCi0gIG1lbWNweSAoJmR0bWZfcGF5bG9hZCwgcGF5bG9hZCwgc2l6ZW9mIChHc3RSVFBEVE1GUGF5bG9hZCkpOwotCi0gIGlmIChkdG1mX3BheWxvYWQuZXZlbnQgPiBNQVhfRVZFTlQpCi0gICAgZ290byBiYWRfcGFja2V0OwotCi0gIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKCZydHBidWZmZXIpOwotCi0gIHRpbWVzdGFtcCA9IGdzdF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAgKCZydHBidWZmZXIpOwotCi0gIGR0bWZfcGF5bG9hZC5kdXJhdGlvbiA9IGdfbnRvaHMgKGR0bWZfcGF5bG9hZC5kdXJhdGlvbik7Ci0KLSAgLyogY2xpcCB0byB3aG9sZSB1bml0cyBvZiB1bml0X3RpbWUgKi8KLSAgaWYgKHJ0cGR0bWZkZXBheS0+dW5pdF90aW1lKSB7Ci0gICAgZ3VpbnQgdW5pdF90aW1lX2Nsb2NrID0KLSAgICAgICAgKHJ0cGR0bWZkZXBheS0+dW5pdF90aW1lICogZGVwYXlsb2FkLT5jbG9ja19yYXRlKSAvIDEwMDA7Ci0gICAgaWYgKGR0bWZfcGF5bG9hZC5kdXJhdGlvbiAlIHVuaXRfdGltZV9jbG9jaykgewotICAgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93IHRoZSBkdXJhdGlvbiAqLwotICAgICAgaWYgKGR0bWZfcGF5bG9hZC5kdXJhdGlvbiA8IEdfTUFYVUlOVDE2IC0gdW5pdF90aW1lX2Nsb2NrKQotICAgICAgICBkdG1mX3BheWxvYWQuZHVyYXRpb24gKz0gdW5pdF90aW1lX2Nsb2NrIC0KLSAgICAgICAgICAgIChkdG1mX3BheWxvYWQuZHVyYXRpb24gJSB1bml0X3RpbWVfY2xvY2spOwotICAgICAgZWxzZQotICAgICAgICBkdG1mX3BheWxvYWQuZHVyYXRpb24gLT0gZHRtZl9wYXlsb2FkLmR1cmF0aW9uICUgdW5pdF90aW1lX2Nsb2NrOwotICAgIH0KLSAgfQotCi0gIC8qIGNsaXAgdG8gbWF4IGR1cmF0aW9uICovCi0gIGlmIChydHBkdG1mZGVwYXktPm1heF9kdXJhdGlvbikgewotICAgIGd1aW50IG1heF9kdXJhdGlvbl9jbG9jayA9Ci0gICAgICAgIChydHBkdG1mZGVwYXktPm1heF9kdXJhdGlvbiAqIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSkgLyAxMDAwOwotCi0gICAgaWYgKG1heF9kdXJhdGlvbl9jbG9jayA8IEdfTUFYVUlOVDE2ICYmCi0gICAgICAgIGR0bWZfcGF5bG9hZC5kdXJhdGlvbiA+IG1heF9kdXJhdGlvbl9jbG9jaykKLSAgICAgIGR0bWZfcGF5bG9hZC5kdXJhdGlvbiA9IG1heF9kdXJhdGlvbl9jbG9jazsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgIlJlY2VpdmVkIG5ldyBSVFAgRFRNRiBwYWNrZXQgOiAiCi0gICAgICAibWFya2VyPSVkIC0gdGltZXN0YW1wPSV1IC0gZXZlbnQ9JWQgLSBkdXJhdGlvbj0lZCIsCi0gICAgICBtYXJrZXIsIHRpbWVzdGFtcCwgZHRtZl9wYXlsb2FkLmV2ZW50LCBkdG1mX3BheWxvYWQuZHVyYXRpb24pOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwKLSAgICAgICJQcmV2aW91cyBpbmZvcm1hdGlvbiA6IHRpbWVzdGFtcD0ldSAtIGR1cmF0aW9uPSVkIiwKLSAgICAgIHJ0cGR0bWZkZXBheS0+cHJldmlvdXNfdHMsIHJ0cGR0bWZkZXBheS0+cHJldmlvdXNfZHVyYXRpb24pOwotCi0gIC8qIEZpcnN0IHBhY2tldCAqLwotICBpZiAobWFya2VyIHx8IHJ0cGR0bWZkZXBheS0+cHJldmlvdXNfdHMgIT0gdGltZXN0YW1wKSB7Ci0gICAgcnRwZHRtZmRlcGF5LT5zYW1wbGUgPSAwOwotICAgIHJ0cGR0bWZkZXBheS0+cHJldmlvdXNfdHMgPSB0aW1lc3RhbXA7Ci0gICAgcnRwZHRtZmRlcGF5LT5wcmV2aW91c19kdXJhdGlvbiA9IGR0bWZfcGF5bG9hZC5kdXJhdGlvbjsKLSAgICBydHBkdG1mZGVwYXktPmZpcnN0X2dzdF90cyA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotCi0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJkdG1mLWV2ZW50IiwKLSAgICAgICAgIm51bWJlciIsIEdfVFlQRV9JTlQsIGR0bWZfcGF5bG9hZC5ldmVudCwKLSAgICAgICAgInZvbHVtZSIsIEdfVFlQRV9JTlQsIGR0bWZfcGF5bG9hZC52b2x1bWUsCi0gICAgICAgICJ0eXBlIiwgR19UWVBFX0lOVCwgMSwgIm1ldGhvZCIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICAgIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICAgIGR0bWZfbWVzc2FnZSA9Ci0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKGRlcGF5bG9hZCksIHN0cnVjdHVyZSk7Ci0gICAgICBpZiAoZHRtZl9tZXNzYWdlKSB7Ci0gICAgICAgIGlmICghZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoZGVwYXlsb2FkKSwgZHRtZl9tZXNzYWdlKSkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlcGF5bG9hZCwKLSAgICAgICAgICAgICAgIlVuYWJsZSB0byBzZW5kIGR0bWYtZXZlbnQgbWVzc2FnZSB0byBidXMiKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZGVwYXlsb2FkLCAiVW5hYmxlIHRvIGNyZWF0ZSBkdG1mLWV2ZW50IG1lc3NhZ2UiKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZGVwYXlsb2FkLCAiVW5hYmxlIHRvIGNyZWF0ZSBkdG1mLWV2ZW50IHN0cnVjdHVyZSIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBndWludDE2IGR1cmF0aW9uID0gZHRtZl9wYXlsb2FkLmR1cmF0aW9uOwotICAgIGR0bWZfcGF5bG9hZC5kdXJhdGlvbiAtPSBydHBkdG1mZGVwYXktPnByZXZpb3VzX2R1cmF0aW9uOwotICAgIC8qIElmIGxhdGUgYnVmZmVyLCBpZ25vcmUgKi8KLSAgICBpZiAoZHVyYXRpb24gPiBydHBkdG1mZGVwYXktPnByZXZpb3VzX2R1cmF0aW9uKQotICAgICAgcnRwZHRtZmRlcGF5LT5wcmV2aW91c19kdXJhdGlvbiA9IGR1cmF0aW9uOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAibmV3IHByZXZpb3VzIGR1cmF0aW9uIDogJWQgLSBuZXcgZHVyYXRpb24gOiAlZCIKLSAgICAgICIgLSBkaWZmICA6ICVkIC0gY2xvY2sgcmF0ZSA6ICVkIC0gdGltZXN0YW1wIDogJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIHJ0cGR0bWZkZXBheS0+cHJldmlvdXNfZHVyYXRpb24sIGR0bWZfcGF5bG9hZC5kdXJhdGlvbiwKLSAgICAgIChydHBkdG1mZGVwYXktPnByZXZpb3VzX2R1cmF0aW9uIC0gZHRtZl9wYXlsb2FkLmR1cmF0aW9uKSwKLSAgICAgIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpOwotCi0gIC8qIElmIGxhdGUgb3IgZHVwbGljYXRlIHBhY2tldCAobGlrZSB0aGUgcmVkdW5kYW50IGVuZCBwYWNrZXQpLiBJZ25vcmUgKi8KLSAgaWYgKGR0bWZfcGF5bG9hZC5kdXJhdGlvbiA+IDApIHsKLSAgICBvdXRidWYgPSBnc3RfZHRtZl9zcmNfZ2VuZXJhdGVfdG9uZSAocnRwZHRtZmRlcGF5LCBkdG1mX3BheWxvYWQpOwotCi0KLSAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHJ0cGR0bWZkZXBheS0+Zmlyc3RfZ3N0X3RzICsKLSAgICAgICAgKHJ0cGR0bWZkZXBheS0+cHJldmlvdXNfZHVyYXRpb24gLSBkdG1mX3BheWxvYWQuZHVyYXRpb24pICoKLSAgICAgICAgR1NUX1NFQ09ORCAvIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9Ci0gICAgICAgIChydHBkdG1mZGVwYXktPnByZXZpb3VzX2R1cmF0aW9uIC0gZHRtZl9wYXlsb2FkLmR1cmF0aW9uKSAqCi0gICAgICAgIEdTVF9TRUNPTkQgLyBkZXBheWxvYWQtPmNsb2NrX3JhdGU7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChvdXRidWYpID0gcnRwZHRtZmRlcGF5LT5wcmV2aW91c19kdXJhdGlvbiAqCi0gICAgICAgIEdTVF9TRUNPTkQgLyBkZXBheWxvYWQtPmNsb2NrX3JhdGU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsCi0gICAgICAgICJ0aW1lc3RhbXAgOiAlIiBHX0dVSU5UNjRfRk9STUFUICIgLSB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZiksIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7Ci0KLSAgfQotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLQotICByZXR1cm4gb3V0YnVmOwotCi1iYWRfcGFja2V0OgotICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBkdG1mZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgKCJQYWNrZXQgZGlkIG5vdCB2YWxpZGF0ZSIpLCAoTlVMTCkpOwotCi0gIGlmIChydHBidWZmZXIuYnVmZmVyICE9IE5VTEwpCi0gICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHBidWZmZXIpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9kdG1mX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwZHRtZmRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX01BUkdJTkFMLCBHU1RfVFlQRV9SVFBfRFRNRl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvZHRtZi9nc3RydHBkdG1mZGVwYXkuaCBiL2dzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWVkMTg5Li4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL2dzdHJ0cGR0bWZkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyogR3N0UnRwRHRtZkRlcGF5Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMaW1pdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KLSAqICAgQ29udGFjdDogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9EVE1GX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfRFRNRl9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLSNpbmNsdWRlICJnc3RkdG1mY29tbW9uLmgiCi0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0RUTUZfREVQQVkgXAotICAoZ3N0X3J0cF9kdG1mX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfRFRNRl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9EVE1GX0RFUEFZLEdzdFJ0cERUTUZEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfRFRNRl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRFRNRl9ERVBBWSxHc3RSdHBEVE1GRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfRFRNRl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9EVE1GX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9EVE1GX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9EVE1GX0RFUEFZKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBEVE1GRGVwYXkgR3N0UnRwRFRNRkRlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cERUTUZEZXBheUNsYXNzIEdzdFJ0cERUTUZEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cERUTUZEZXBheQotewotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0gIGRvdWJsZSBzYW1wbGU7Ci0gIGd1aW50MzIgcHJldmlvdXNfdHM7Ci0gIGd1aW50MTYgcHJldmlvdXNfZHVyYXRpb247Ci0gIEdzdENsb2NrVGltZSBmaXJzdF9nc3RfdHM7Ci0gIGd1aW50IHVuaXRfdGltZTsKLSAgZ3VpbnQgbWF4X2R1cmF0aW9uOwotfTsKLQotc3RydWN0IF9Hc3RSdHBEVE1GRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9kdG1mX2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9kdG1mX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9EVE1GX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jIGIvZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yzc4M2QzLi4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDExODcgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJUUCBEVE1GIHNvdXJjZQotICoKLSAqIGdzdHJ0cGR0bWZzcmMuYzoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBOb2tpYSBDb3Jwb3JhdGlvbi4KLSAqICAgQ29udGFjdDogWmVlc2hhbiBBbGkgPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDAsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGR0bWZzcmMKLSAqIEBzZWVfYWxzbzogZHRtZnNyYywgcnRwZHRtZmRlcGF5LCBydHBkdG1mbXV4Ci0gKgotICogVGhlIFJUUERUTUZTcmMgZWxlbWVudCBnZW5lcmF0ZXMgUlRQIERUTUYgKFJGQyAyODMzKSBldmVudCBwYWNrZXRzIG9uIHJlcXVlc3QKLSAqIGZyb20gYXBwbGljYXRpb24uIFRoZSBhcHBsaWNhdGlvbiBjb21tdW5pY2F0ZXMgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEKLSAqIERUTUYgZXZlbnQgdXNpbmcgY3VzdG9tIHVwc3RyZWFtIGdzdHJlYW1lciBldmVudHMuIFRvIHJlcG9ydCBhIERUTUYgZXZlbnQsIGFuCi0gKiBhcHBsaWNhdGlvbiBtdXN0IHNlbmQgYW4gZXZlbnQgb2YgdHlwZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCBoYXZpbmcgYQotICogc3RydWN0dXJlIG9mIG5hbWUgImR0bWYtZXZlbnQiIHdpdGggZmllbGRzIHNldCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZwotICogdGFibGU6Ci0gKgotICogPGluZm9ybWFsdGFibGU+Ci0gKiA8dGdyb3VwIGNvbHM9JzQnPgotICogPGNvbHNwZWMgY29sbmFtZT0nTmFtZScgLz4KLSAqIDxjb2xzcGVjIGNvbG5hbWU9J1R5cGUnIC8+Ci0gKiA8Y29sc3BlYyBjb2xuYW1lPSdQb3NzaWJsZSB2YWx1ZXMnIC8+Ci0gKiA8Y29sc3BlYyBjb2xuYW1lPSdQdXJwb3NlJyAvPgotICogPHRoZWFkPgotICogPHJvdz4KLSAqIDxlbnRyeT5OYW1lPC9lbnRyeT4KLSAqIDxlbnRyeT5HVHlwZTwvZW50cnk+Ci0gKiA8ZW50cnk+UG9zc2libGUgdmFsdWVzPC9lbnRyeT4KLSAqIDxlbnRyeT5QdXJwb3NlPC9lbnRyeT4KLSAqIDwvcm93PgotICogPC90aGVhZD4KLSAqIDx0Ym9keT4KLSAqIDxyb3c+Ci0gKiA8ZW50cnk+dHlwZTwvZW50cnk+Ci0gKiA8ZW50cnk+R19UWVBFX0lOVDwvZW50cnk+Ci0gKiA8ZW50cnk+MC0xPC9lbnRyeT4KLSAqIDxlbnRyeT5UaGUgYXBwbGljYXRpb24gdXNlcyB0aGlzIGZpZWxkIHRvIHNwZWNpZnkgd2hpY2ggb2YgdGhlIHR3byBtZXRob2RzCi0gKiBzcGVjaWZpZWQgaW4gUkZDIDI4MzMgdG8gdXNlLiBUaGUgdmFsdWUgc2hvdWxkIGJlIDAgZm9yIHRvbmVzIGFuZCAxIGZvcgotICogbmFtZWQgZXZlbnRzLiBUb25lcyBhcmUgc3BlY2lmaWVkIGJ5IHRoZWlyIGZyZXF1ZW5jaWVzIGFuZCBldmVudHMgYXJlIHNwZWNpZWQKLSAqIGJ5IHRoZWlyIG51bWJlci4gVGhpcyBlbGVtZW50IGNhbiBvbmx5IHRha2UgZXZlbnRzIGFzIGlucHV0LiBEbyBub3QgY29uZnVzZQotICogd2l0aCAibWV0aG9kIiB3aGljaCBzcGVjaWZpZWQgdGhlIG91dHB1dC4KLSAqIDwvZW50cnk+Ci0gKiA8L3Jvdz4KLSAqIDxyb3c+Ci0gKiA8ZW50cnk+bnVtYmVyPC9lbnRyeT4KLSAqIDxlbnRyeT5HX1RZUEVfSU5UPC9lbnRyeT4KLSAqIDxlbnRyeT4wLTE1PC9lbnRyeT4KLSAqIDxlbnRyeT5UaGUgZXZlbnQgbnVtYmVyLjwvZW50cnk+Ci0gKiA8L3Jvdz4KLSAqIDxyb3c+Ci0gKiA8ZW50cnk+dm9sdW1lPC9lbnRyeT4KLSAqIDxlbnRyeT5HX1RZUEVfSU5UPC9lbnRyeT4KLSAqIDxlbnRyeT4wLTM2PC9lbnRyeT4KLSAqIDxlbnRyeT5UaGlzIGZpZWxkIGRlc2NyaWJlcyB0aGUgcG93ZXIgbGV2ZWwgb2YgdGhlIHRvbmUsIGV4cHJlc3NlZCBpbiBkQm0wCi0gKiBhZnRlciBkcm9wcGluZyB0aGUgc2lnbi4gUG93ZXIgbGV2ZWxzIHJhbmdlIGZyb20gMCB0byAtNjMgZEJtMC4gVGhlIHJhbmdlIG9mCi0gKiB2YWxpZCBEVE1GIGlzIGZyb20gMCB0byAtMzYgZEJtMC4gQ2FuIGJlIG9taXR0ZWQgaWYgc3RhcnQgaXMgc2V0IHRvIEZBTFNFLgotICogPC9lbnRyeT4KLSAqIDwvcm93PgotICogPHJvdz4KLSAqIDxlbnRyeT5zdGFydDwvZW50cnk+Ci0gKiA8ZW50cnk+R19UWVBFX0JPT0xFQU48L2VudHJ5PgotICogPGVudHJ5PlRydWUgb3IgRmFsc2U8L2VudHJ5PgotICogPGVudHJ5PldoZXRoZXIgdGhlIGV2ZW50IGlzIHN0YXJ0aW5nIG9yIGVuZGluZy48L2VudHJ5PgotICogPC9yb3c+Ci0gKiA8cm93PgotICogPGVudHJ5Pm1ldGhvZDwvZW50cnk+Ci0gKiA8ZW50cnk+R19UWVBFX0lOVDwvZW50cnk+Ci0gKiA8ZW50cnk+MTwvZW50cnk+Ci0gKiA8ZW50cnk+VGhlIG1ldGhvZCB1c2VkIGZvciBzZW5kaW5nIGV2ZW50LCB0aGlzIGVsZW1lbnQgd2lsbCByZWFjdCBpZiB0aGlzCi0gKiBmaWVsZCBpcyBhYnNlbnQgb3IgMS4KLSAqIDwvZW50cnk+Ci0gKiA8L3Jvdz4KLSAqIDwvdGJvZHk+Ci0gKiA8L3Rncm91cD4KLSAqIDwvaW5mb3JtYWx0YWJsZT4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIGluZm9ybXMgdGhlIHBpcGVsaW5lIChhbmQgaW4gdHVybiwgdGhlCi0gKiBSVFBEVE1GU3JjIGVsZW1lbnQgaW5zaWRlIHRoZSBwaXBlbGluZSkgYWJvdXQgdGhlIHN0YXJ0IG9mIGFuIFJUUCBEVE1GIG5hbWVkCi0gKiBldmVudCAnMScgb2Ygdm9sdW1lIC0yNSBkQm0wOgotICoKLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZHRtZi1ldmVudCIsCi0gKiAgICAgICAgICAgICAgICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLAotICogICAgICAgICAgICAgICAgICAgICJudW1iZXIiLCBHX1RZUEVfSU5ULCAxLAotICogICAgICAgICAgICAgICAgICAgICJ2b2x1bWUiLCBHX1RZUEVfSU5ULCAyNSwKLSAqICAgICAgICAgICAgICAgICAgICAic3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gKgotICogZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgc3RydWN0dXJlKTsKLSAqIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHBpcGVsaW5lLCBldmVudCk7Ci0gKiA8L3Byb2dyYW1saXN0aW5nPgotICoKLSAqIFdoZW4gYSBEVE1GIHRvbmUgYWN0dWFsbHkgc3RhcnRzIG9yIHN0b3AsIGEgImR0bWYtZXZlbnQtcHJvY2Vzc2VkIgotICogZWxlbWVudCAjR3N0TWVzc2FnZSB3aXRoIHRoZSBzYW1lIGZpZWxkcyBhcyB0aGUgImR0bWYtZXZlbnQiCi0gKiAjR3N0RXZlbnQgdGhhdCB3YXMgdXNlZCB0byByZXF1ZXN0IHRoZSBldmVudC4gQWxzbywgaWYgYW55IGV2ZW50Ci0gKiBoYXMgbm90IGJlZW4gcHJvY2Vzc2VkIHdoZW4gdGhlIGVsZW1lbnQgZ29lcyBmcm9tIHRoZSBQQVVTRUQgdG8gdGhlCi0gKiBSRUFEWSBzdGF0ZSwgdGhlbiBhICJkdG1mLWV2ZW50LWRyb3BwZWQiIG1lc3NhZ2UgaXMgcG9zdGVkIG9uIHRoZQotICogI0dzdEJ1cyBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgcmVjZWl2ZWQuCi0gICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwZHRtZnNyYy5oIgotCi0jZGVmaW5lIEdTVF9SVFBfRFRNRl9UWVBFX0VWRU5UICAxCi0jZGVmaW5lIERFRkFVTFRfUFRJTUUgICAgICAgICAgICA0MCAgICAgLyogbXMgKi8KLSNkZWZpbmUgREVGQVVMVF9TU1JDICAgICAgICAgICAgIC0xCi0jZGVmaW5lIERFRkFVTFRfUFQgICAgICAgICAgICAgICA5NgotI2RlZmluZSBERUZBVUxUX1RJTUVTVEFNUF9PRkZTRVQgLTEKLSNkZWZpbmUgREVGQVVMVF9TRVFOVU1fT0ZGU0VUICAgIC0xCi0jZGVmaW5lIERFRkFVTFRfQ0xPQ0tfUkFURSAgICAgICA4MDAwCi0KLSNkZWZpbmUgREVGQVVMVF9QQUNLRVRfUkVEVU5EQU5DWSAxCi0jZGVmaW5lIE1JTl9QQUNLRVRfUkVEVU5EQU5DWSAxCi0jZGVmaW5lIE1BWF9QQUNLRVRfUkVEVU5EQU5DWSA1Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydHBfZHRtZl9zcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF9kdG1mX3NyY19kZWJ1ZwotCi0vKiBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NTUkMsCi0gIFBST1BfVElNRVNUQU1QX09GRlNFVCwKLSAgUFJPUF9TRVFOVU1fT0ZGU0VULAotICBQUk9QX1BULAotICBQUk9QX0NMT0NLX1JBVEUsCi0gIFBST1BfVElNRVNUQU1QLAotICBQUk9QX1NFUU5VTSwKLSAgUFJPUF9SRURVTkRBTkNZCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9kdG1mX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgWyA5NiwgMTI3IF0sICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbIDAsIE1BWCBdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJURUxFUEhPTkUtRVZFTlRcIiIpCi0gICAgLyogICJldmVudHMgPSAoc3RyaW5nKSBcIjAtMTVcIiAqLwotICAgICk7Ci0KLQotR19ERUZJTkVfVFlQRSAoR3N0UlRQRFRNRlNyYywgZ3N0X3J0cF9kdG1mX3NyYywgR1NUX1RZUEVfQkFTRV9TUkMpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2R0bWZfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9kdG1mX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2R0bWZfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2R0bWZfc3JjX2hhbmRsZV9ldmVudCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9kdG1mX3NyY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9kdG1mX3NyY19hZGRfc3RhcnRfZXZlbnQgKEdzdFJUUERUTUZTcmMgKiBkdG1mc3JjLAotICAgIGdpbnQgZXZlbnRfbnVtYmVyLCBnaW50IGV2ZW50X3ZvbHVtZSk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2R0bWZfc3JjX2FkZF9zdG9wX2V2ZW50IChHc3RSVFBEVE1GU3JjICogZHRtZnNyYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2R0bWZfc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIHNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9kdG1mX3NyY191bmxvY2tfc3RvcCAoR3N0QmFzZVNyYyAqIHNyYyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2R0bWZfc3JjX2NyZWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsCi0gICAgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IGxlbmd0aCwgR3N0QnVmZmVyICoqIGJ1ZmZlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9kdG1mX3NyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2R0bWZfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZHRtZl9zcmNfY2xhc3NfaW5pdCAoR3N0UlRQRFRNRlNyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfZHRtZl9zcmNfZGVidWcsCi0gICAgICAicnRwZHRtZnNyYyIsIDAsICJydHBkdG1mc3JjIGVsZW1lbnQiKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2R0bWZfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBEVE1GIHBhY2tldCBnZW5lcmF0b3IiLCAiU291cmNlL05ldHdvcmsiLAotICAgICAgIkdlbmVyYXRlcyBSVFAgRFRNRiBwYWNrZXRzIiwgIlplZXNoYW4gQWxpIDx6ZWVzaGFuLmFsaUBub2tpYS5jb20+Iik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdG1mX3NyY19maW5hbGl6ZSk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdG1mX3NyY19zZXRfcHJvcGVydHkpOwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZHRtZl9zcmNfZ2V0X3Byb3BlcnR5KTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1RJTUVTVEFNUCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgidGltZXN0YW1wIiwgIlRpbWVzdGFtcCIsCi0gICAgICAgICAgIlRoZSBSVFAgdGltZXN0YW1wIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBwYWNrZXQiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9TRVFOVU0sCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInNlcW51bSIsICJTZXF1ZW5jZSBudW1iZXIiLAotICAgICAgICAgICJUaGUgUlRQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0IiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX1RJTUVTVEFNUF9PRkZTRVQsIGdfcGFyYW1fc3BlY19pbnQgKCJ0aW1lc3RhbXAtb2Zmc2V0IiwKLSAgICAgICAgICAiVGltZXN0YW1wIE9mZnNldCIsCi0gICAgICAgICAgIk9mZnNldCB0byBhZGQgdG8gYWxsIG91dGdvaW5nIHRpbWVzdGFtcHMgKC0xID0gcmFuZG9tKSIsIC0xLAotICAgICAgICAgIEdfTUFYSU5ULCBERUZBVUxUX1RJTUVTVEFNUF9PRkZTRVQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfU0VRTlVNX09GRlNFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJzZXFudW0tb2Zmc2V0IiwgIlNlcXVlbmNlIG51bWJlciBPZmZzZXQiLAotICAgICAgICAgICJPZmZzZXQgdG8gYWRkIHRvIGFsbCBvdXRnb2luZyBzZXFudW0gKC0xID0gcmFuZG9tKSIsIC0xLCBHX01BWElOVCwKLSAgICAgICAgICBERUZBVUxUX1NFUU5VTV9PRkZTRVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0NMT0NLX1JBVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImNsb2NrLXJhdGUiLCAiY2xvY2tyYXRlIiwKLSAgICAgICAgICAiVGhlIGNsb2NrLXJhdGUgYXQgd2hpY2ggdG8gZ2VuZXJhdGUgdGhlIGR0bWYgcGFja2V0cyIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX0NMT0NLX1JBVEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfU1NSQywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgic3NyYyIsICJTU1JDIiwKLSAgICAgICAgICAiVGhlIFNTUkMgb2YgdGhlIHBhY2tldHMgKC0xID09IHJhbmRvbSkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9TU1JDLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1BULAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJwdCIsICJwYXlsb2FkIHR5cGUiLAotICAgICAgICAgICJUaGUgcGF5bG9hZCB0eXBlIG9mIHRoZSBwYWNrZXRzIiwKLSAgICAgICAgICAwLCAweDgwLCBERUZBVUxUX1BULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9SRURVTkRBTkNZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJwYWNrZXQtcmVkdW5kYW5jeSIsICJQYWNrZXQgUmVkdW5kYW5jeSIsCi0gICAgICAgICAgIk51bWJlciBvZiBwYWNrZXRzIHRvIHNlbmQgdG8gaW5kaWNhdGUgc3RhcnQgYW5kIHN0b3AgZHRtZiBldmVudHMiLAotICAgICAgICAgIE1JTl9QQUNLRVRfUkVEVU5EQU5DWSwgTUFYX1BBQ0tFVF9SRURVTkRBTkNZLAotICAgICAgICAgIERFRkFVTFRfUEFDS0VUX1JFRFVOREFOQ1ksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2R0bWZfc3JjX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0YmFzZXNyY19jbGFzcy0+dW5sb2NrID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZHRtZl9zcmNfdW5sb2NrKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+dW5sb2NrX3N0b3AgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZHRtZl9zcmNfdW5sb2NrX3N0b3ApOwotCi0gIGdzdGJhc2VzcmNfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZHRtZl9zcmNfaGFuZGxlX2V2ZW50KTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZHRtZl9zcmNfY3JlYXRlKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+bmVnb3RpYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZHRtZl9zcmNfbmVnb3RpYXRlKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdG1mX3NyY19xdWVyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R0bWZfc3JjX2V2ZW50X2ZyZWUgKEdzdFJUUERUTUZTcmNFdmVudCAqIGV2ZW50KQotewotICBpZiAoZXZlbnQpIHsKLSAgICBpZiAoZXZlbnQtPnBheWxvYWQpCi0gICAgICBnX3NsaWNlX2ZyZWUgKEdzdFJUUERUTUZQYXlsb2FkLCBldmVudC0+cGF5bG9hZCk7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RSVFBEVE1GU3JjRXZlbnQsIGV2ZW50KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdG1mX3NyY19pbml0IChHc3RSVFBEVE1GU3JjICogb2JqZWN0KQotewotICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoR1NUX0JBU0VfU1JDIChvYmplY3QpLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdTVF9CQVNFX1NSQyAob2JqZWN0KSwgVFJVRSk7Ci0KLSAgb2JqZWN0LT5zc3JjID0gREVGQVVMVF9TU1JDOwotICBvYmplY3QtPnNlcW51bV9vZmZzZXQgPSBERUZBVUxUX1NFUU5VTV9PRkZTRVQ7Ci0gIG9iamVjdC0+dHNfb2Zmc2V0ID0gREVGQVVMVF9USU1FU1RBTVBfT0ZGU0VUOwotICBvYmplY3QtPnB0ID0gREVGQVVMVF9QVDsKLSAgb2JqZWN0LT5jbG9ja19yYXRlID0gREVGQVVMVF9DTE9DS19SQVRFOwotICBvYmplY3QtPnB0aW1lID0gREVGQVVMVF9QVElNRTsKLSAgb2JqZWN0LT5wYWNrZXRfcmVkdW5kYW5jeSA9IERFRkFVTFRfUEFDS0VUX1JFRFVOREFOQ1k7Ci0KLSAgb2JqZWN0LT5ldmVudF9xdWV1ZSA9Ci0gICAgICBnX2FzeW5jX3F1ZXVlX25ld19mdWxsICgoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9ydHBfZHRtZl9zcmNfZXZlbnRfZnJlZSk7Ci0gIG9iamVjdC0+cGF5bG9hZCA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqZWN0LCAiaW5pdCBkb25lIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R0bWZfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSVFBEVE1GU3JjICpkdG1mc3JjOwotCi0gIGR0bWZzcmMgPSBHU1RfUlRQX0RUTUZfU1JDIChvYmplY3QpOwotCi0gIGlmIChkdG1mc3JjLT5ldmVudF9xdWV1ZSkgewotICAgIGdfYXN5bmNfcXVldWVfdW5yZWYgKGR0bWZzcmMtPmV2ZW50X3F1ZXVlKTsKLSAgICBkdG1mc3JjLT5ldmVudF9xdWV1ZSA9IE5VTEw7Ci0gIH0KLQotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfcnRwX2R0bWZfc3JjX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZHRtZl9zcmNfaGFuZGxlX2R0bWZfZXZlbnQgKEdzdFJUUERUTUZTcmMgKiBkdG1mc3JjLAotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqIGV2ZW50X3N0cnVjdHVyZSkKLXsKLSAgZ2ludCBldmVudF90eXBlOwotICBnYm9vbGVhbiBzdGFydDsKLSAgZ2ludCBtZXRob2Q7Ci0gIEdzdENsb2NrVGltZSBsYXN0X3N0b3A7Ci0gIGdpbnQgZXZlbnRfbnVtYmVyOwotICBnaW50IGV2ZW50X3ZvbHVtZTsKLSAgZ2Jvb2xlYW4gY29ycmVjdF9vcmRlcjsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoZXZlbnRfc3RydWN0dXJlLCAidHlwZSIsICZldmVudF90eXBlKSB8fAotICAgICAgIWdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKGV2ZW50X3N0cnVjdHVyZSwgInN0YXJ0IiwgJnN0YXJ0KSB8fAotICAgICAgZXZlbnRfdHlwZSAhPSBHU1RfUlRQX0RUTUZfVFlQRV9FVkVOVCkKLSAgICBnb3RvIGZhaWx1cmU7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoZXZlbnRfc3RydWN0dXJlLCAibWV0aG9kIiwgJm1ldGhvZCkpIHsKLSAgICBpZiAobWV0aG9kICE9IDEpIHsKLSAgICAgIGdvdG8gZmFpbHVyZTsKLSAgICB9Ci0gIH0KLQotICBpZiAoc3RhcnQpCi0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGV2ZW50X3N0cnVjdHVyZSwgIm51bWJlciIsICZldmVudF9udW1iZXIpIHx8Ci0gICAgICAgICFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGV2ZW50X3N0cnVjdHVyZSwgInZvbHVtZSIsICZldmVudF92b2x1bWUpKQotICAgICAgZ290byBmYWlsdXJlOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChldmVudF9zdHJ1Y3R1cmUsICJsYXN0LXN0b3AiLCAmbGFzdF9zdG9wKSkKLSAgICBkdG1mc3JjLT5sYXN0X3N0b3AgPSBsYXN0X3N0b3A7Ci0gIGVsc2UKLSAgICBkdG1mc3JjLT5sYXN0X3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBjb3JyZWN0X29yZGVyID0gKHN0YXJ0ICE9IGR0bWZzcmMtPmxhc3RfZXZlbnRfd2FzX3N0YXJ0KTsKLSAgZHRtZnNyYy0+bGFzdF9ldmVudF93YXNfc3RhcnQgPSBzdGFydDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGR0bWZzcmMpOwotCi0gIGlmICghY29ycmVjdF9vcmRlcikKLSAgICBnb3RvIGZhaWx1cmU7Ci0KLSAgaWYgKHN0YXJ0KSB7Ci0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGV2ZW50X3N0cnVjdHVyZSwgIm51bWJlciIsICZldmVudF9udW1iZXIpIHx8Ci0gICAgICAgICFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGV2ZW50X3N0cnVjdHVyZSwgInZvbHVtZSIsICZldmVudF92b2x1bWUpKQotICAgICAgZ290byBmYWlsdXJlOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgIlJlY2VpdmVkIHN0YXJ0IGV2ZW50ICVkIHdpdGggdm9sdW1lICVkIiwKLSAgICAgICAgZXZlbnRfbnVtYmVyLCBldmVudF92b2x1bWUpOwotICAgIGdzdF9ydHBfZHRtZl9zcmNfYWRkX3N0YXJ0X2V2ZW50IChkdG1mc3JjLCBldmVudF9udW1iZXIsIGV2ZW50X3ZvbHVtZSk7Ci0gIH0KLQotICBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiUmVjZWl2ZWQgc3RvcCBldmVudCIpOwotICAgIGdzdF9ydHBfZHRtZl9zcmNfYWRkX3N0b3BfZXZlbnQgKGR0bWZzcmMpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci1mYWlsdXJlOgotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9kdG1mX3NyY19oYW5kbGVfY3VzdG9tX3Vwc3RyZWFtIChHc3RSVFBEVE1GU3JjICogZHRtZnNyYywKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLSAgZ2NoYXIgKnN0cnVjdF9zdHI7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIEdzdFN0YXRlIHN0YXRlOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoZHRtZnNyYyksICZzdGF0ZSwgTlVMTCwgMCk7Ci0gIGlmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTIHx8IHN0YXRlICE9IEdTVF9TVEFURV9QTEFZSU5HKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgIlJlY2VpdmVkIGV2ZW50IHdoaWxlIG5vdCBpbiBQTEFZSU5HIHN0YXRlIik7Ci0gICAgZ290byByZXQ7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiUmVjZWl2ZWQgZXZlbnQgaXMgb2Ygb3VyIGludGVyZXN0Iik7Ci0gIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gIHN0cnVjdF9zdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3RydWN0dXJlKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgIkV2ZW50IGhhcyBzdHJ1Y3R1cmUgJXMiLCBzdHJ1Y3Rfc3RyKTsKLSAgZ19mcmVlIChzdHJ1Y3Rfc3RyKTsKLSAgaWYgKHN0cnVjdHVyZSAmJiBnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJkdG1mLWV2ZW50IikpCi0gICAgcmVzdWx0ID0gZ3N0X3J0cF9kdG1mX3NyY19oYW5kbGVfZHRtZl9ldmVudCAoZHRtZnNyYywgc3RydWN0dXJlKTsKLQotcmV0OgotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZHRtZl9zcmNfaGFuZGxlX2V2ZW50IChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UlRQRFRNRlNyYyAqZHRtZnNyYzsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0KLSAgZHRtZnNyYyA9IEdTVF9SVFBfRFRNRl9TUkMgKGJhc2VzcmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJSZWNlaXZlZCBhbiBldmVudCBvbiB0aGUgc3JjIHBhZCIpOwotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNKSB7Ci0gICAgcmVzdWx0ID0gZ3N0X3J0cF9kdG1mX3NyY19oYW5kbGVfY3VzdG9tX3Vwc3RyZWFtIChkdG1mc3JjLCBldmVudCk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdG1mX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UlRQRFRNRlNyYyAqZHRtZnNyYzsKLQotICBkdG1mc3JjID0gR1NUX1JUUF9EVE1GX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVElNRVNUQU1QX09GRlNFVDoKLSAgICAgIGR0bWZzcmMtPnRzX29mZnNldCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NFUU5VTV9PRkZTRVQ6Ci0gICAgICBkdG1mc3JjLT5zZXFudW1fb2Zmc2V0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xPQ0tfUkFURToKLSAgICAgIGR0bWZzcmMtPmNsb2NrX3JhdGUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBkdG1mc3JjLT5kaXJ0eSA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1NSQzoKLSAgICAgIGR0bWZzcmMtPnNzcmMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFQ6Ci0gICAgICBkdG1mc3JjLT5wdCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGR0bWZzcmMtPmRpcnR5ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRURVTkRBTkNZOgotICAgICAgZHRtZnNyYy0+cGFja2V0X3JlZHVuZGFuY3kgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R0bWZfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBEVE1GU3JjICpkdG1mc3JjOwotCi0gIGR0bWZzcmMgPSBHU1RfUlRQX0RUTUZfU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9USU1FU1RBTVBfT0ZGU0VUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZHRtZnNyYy0+dHNfb2Zmc2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TRVFOVU1fT0ZGU0VUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgZHRtZnNyYy0+c2VxbnVtX29mZnNldCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xPQ0tfUkFURToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBkdG1mc3JjLT5jbG9ja19yYXRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TU1JDOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGR0bWZzcmMtPnNzcmMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BUOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGR0bWZzcmMtPnB0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FU1RBTVA6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgZHRtZnNyYy0+cnRwX3RpbWVzdGFtcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VRTlVNOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGR0bWZzcmMtPnNlcW51bSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVEVU5EQU5DWToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBkdG1mc3JjLT5wYWNrZXRfcmVkdW5kYW5jeSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9kdG1mX3ByZXBhcmVfdGltZXN0YW1wcyAoR3N0UlRQRFRNRlNyYyAqIGR0bWZzcmMpCi17Ci0gIEdzdENsb2NrVGltZSBsYXN0X3N0b3A7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkdG1mc3JjKTsKLSAgbGFzdF9zdG9wID0gZHRtZnNyYy0+bGFzdF9zdG9wOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChsYXN0X3N0b3ApKSB7Ci0gICAgZHRtZnNyYy0+c3RhcnRfdGltZXN0YW1wID0gbGFzdF9zdG9wOwotICB9IGVsc2UgewotICAgIEdzdENsb2NrICpjbG9jayA9IGdzdF9lbGVtZW50X2dldF9jbG9jayAoR1NUX0VMRU1FTlQgKGR0bWZzcmMpKTsKLQotICAgIGlmIChjbG9jayA9PSBOVUxMKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgZHRtZnNyYy0+c3RhcnRfdGltZXN0YW1wID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jaykKLSAgICAgICAgLSBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lIChHU1RfRUxFTUVOVCAoZHRtZnNyYykpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgfQotCi0gIC8qIElmIHRoZSBsYXN0IHN0b3Agd2FzIGluIHRoZSBwYXN0LCB0aGVuIGxldHMgYWRkIHRoZSBidWZmZXJzIHRvZ2V0aGVyICovCi0gIGlmIChkdG1mc3JjLT5zdGFydF90aW1lc3RhbXAgPCBkdG1mc3JjLT50aW1lc3RhbXApCi0gICAgZHRtZnNyYy0+c3RhcnRfdGltZXN0YW1wID0gZHRtZnNyYy0+dGltZXN0YW1wOwotCi0gIGR0bWZzcmMtPnRpbWVzdGFtcCA9IGR0bWZzcmMtPnN0YXJ0X3RpbWVzdGFtcDsKLQotICBkdG1mc3JjLT5ydHBfdGltZXN0YW1wID0gZHRtZnNyYy0+dHNfYmFzZSArCi0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZHU1RfQkFTRV9TUkMKLSAgICAgICAgICAoZHRtZnNyYyktPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgZHRtZnNyYy0+dGltZXN0YW1wKSwKLSAgICAgIGR0bWZzcmMtPmNsb2NrX3JhdGUsIEdTVF9TRUNPTkQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R0bWZfc3JjX2FkZF9zdGFydF9ldmVudCAoR3N0UlRQRFRNRlNyYyAqIGR0bWZzcmMsIGdpbnQgZXZlbnRfbnVtYmVyLAotICAgIGdpbnQgZXZlbnRfdm9sdW1lKQotewotCi0gIEdzdFJUUERUTUZTcmNFdmVudCAqZXZlbnQgPSBnX3NsaWNlX25ldzAgKEdzdFJUUERUTUZTcmNFdmVudCk7Ci0gIGV2ZW50LT5ldmVudF90eXBlID0gUlRQX0RUTUZfRVZFTlRfVFlQRV9TVEFSVDsKLQotICBldmVudC0+cGF5bG9hZCA9IGdfc2xpY2VfbmV3MCAoR3N0UlRQRFRNRlBheWxvYWQpOwotICBldmVudC0+cGF5bG9hZC0+ZXZlbnQgPSBDTEFNUCAoZXZlbnRfbnVtYmVyLCBNSU5fRVZFTlQsIE1BWF9FVkVOVCk7Ci0gIGV2ZW50LT5wYXlsb2FkLT52b2x1bWUgPSBDTEFNUCAoZXZlbnRfdm9sdW1lLCBNSU5fVk9MVU1FLCBNQVhfVk9MVU1FKTsKLQotICBnX2FzeW5jX3F1ZXVlX3B1c2ggKGR0bWZzcmMtPmV2ZW50X3F1ZXVlLCBldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R0bWZfc3JjX2FkZF9zdG9wX2V2ZW50IChHc3RSVFBEVE1GU3JjICogZHRtZnNyYykKLXsKLQotICBHc3RSVFBEVE1GU3JjRXZlbnQgKmV2ZW50ID0gZ19zbGljZV9uZXcwIChHc3RSVFBEVE1GU3JjRXZlbnQpOwotICBldmVudC0+ZXZlbnRfdHlwZSA9IFJUUF9EVE1GX0VWRU5UX1RZUEVfU1RPUDsKLQotICBnX2FzeW5jX3F1ZXVlX3B1c2ggKGR0bWZzcmMtPmV2ZW50X3F1ZXVlLCBldmVudCk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZHRtZl9wcmVwYXJlX3J0cF9oZWFkZXJzIChHc3RSVFBEVE1GU3JjICogZHRtZnNyYywKLSAgICBHc3RSVFBCdWZmZXIgKiBydHBidWYpCi17Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9zc3JjIChydHBidWYsIGR0bWZzcmMtPmN1cnJlbnRfc3NyYyk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9wYXlsb2FkX3R5cGUgKHJ0cGJ1ZiwgZHRtZnNyYy0+cHQpOwotICAvKiBPbmx5IHRoZSB2ZXJ5IGZpcnN0IHBhY2tldCBnZXRzIGEgbWFya2VyICovCi0gIGlmIChkdG1mc3JjLT5maXJzdF9wYWNrZXQpIHsKLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyIChydHBidWYsIFRSVUUpOwotICB9IGVsc2UgaWYgKGR0bWZzcmMtPmxhc3RfcGFja2V0KSB7Ci0gICAgZHRtZnNyYy0+cGF5bG9hZC0+ZSA9IDE7Ci0gIH0KLQotICBkdG1mc3JjLT5zZXFudW0rKzsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3NlcSAocnRwYnVmLCBkdG1mc3JjLT5zZXFudW0pOwotCi0gIC8qIHRpbWVzdGFtcCBvZiBSVFAgaGVhZGVyICovCi0gIGdzdF9ydHBfYnVmZmVyX3NldF90aW1lc3RhbXAgKHJ0cGJ1ZiwgZHRtZnNyYy0+cnRwX3RpbWVzdGFtcCk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9kdG1mX3NyY19jcmVhdGVfbmV4dF9ydHBfcGFja2V0IChHc3RSVFBEVE1GU3JjICogZHRtZnNyYykKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdFJUUERUTUZQYXlsb2FkICpwYXlsb2FkOwotICBHc3RSVFBCdWZmZXIgcnRwYnVmZmVyID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLQotICBidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKHNpemVvZiAoR3N0UlRQRFRNRlBheWxvYWQpLCAwLCAwKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9SRUFEV1JJVEUsICZydHBidWZmZXIpOwotCi0gIGdzdF9ydHBfZHRtZl9wcmVwYXJlX3J0cF9oZWFkZXJzIChkdG1mc3JjLCAmcnRwYnVmZmVyKTsKLQotICAvKiB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uIG9mIEdzdEJ1ZmZlciAqLwotICAvKiBSZWR1bmRhbnQgYnVmZmVyIGhhdmUgbm8gZHVyYXRpb24gLi4uICovCi0gIGlmIChkdG1mc3JjLT5yZWR1bmRhbmN5X2NvdW50ID4gMSkKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gMDsKLSAgZWxzZQotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdG1mc3JjLT5wdGltZSAqIEdTVF9NU0VDT05EOwotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IGR0bWZzcmMtPnRpbWVzdGFtcDsKLQotICBwYXlsb2FkID0gKEdzdFJUUERUTUZQYXlsb2FkICopIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwYnVmZmVyKTsKLQotICAvKiBjb3B5IHBheWxvYWQgYW5kIGNvbnZlcnQgdG8gbmV0d29yay1ieXRlIG9yZGVyICovCi0gIG1lbW1vdmUgKHBheWxvYWQsIGR0bWZzcmMtPnBheWxvYWQsIHNpemVvZiAoR3N0UlRQRFRNRlBheWxvYWQpKTsKLQotICBwYXlsb2FkLT5kdXJhdGlvbiA9IGdfaHRvbnMgKHBheWxvYWQtPmR1cmF0aW9uKTsKLQotICBpZiAoZHRtZnNyYy0+cmVkdW5kYW5jeV9jb3VudCA8PSAxICYmIGR0bWZzcmMtPmxhc3RfcGFja2V0KSB7Ci0gICAgR3N0Q2xvY2tUaW1lIGludGVyX2RpZ2l0X2ludGVydmFsID0gTUlOX0lOVEVSX0RJR0lUX0lOVEVSVkFMOwotCi0gICAgaWYgKGludGVyX2RpZ2l0X2ludGVydmFsICUgZHRtZnNyYy0+cHRpbWUgIT0gMCkKLSAgICAgIGludGVyX2RpZ2l0X2ludGVydmFsICs9IGR0bWZzcmMtPnB0aW1lIC0KLSAgICAgICAgICAoTUlOX0lOVEVSX0RJR0lUX0lOVEVSVkFMICUgZHRtZnNyYy0+cHRpbWUpOwotCi0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSArPSBpbnRlcl9kaWdpdF9pbnRlcnZhbCAqIEdTVF9NU0VDT05EOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJDcmVhdGluZyBuZXcgYnVmZmVyIHdpdGggZXZlbnQgJXUgZHVyYXRpb24gIgotICAgICAgIiBnc3Q6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCAiKHJ0cCB0czoldSBkdXI6JXUpIiwKLSAgICAgIGR0bWZzcmMtPnBheWxvYWQtPmV2ZW50LCBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSwgZHRtZnNyYy0+cnRwX3RpbWVzdGFtcCwKLSAgICAgIGR0bWZzcmMtPnBheWxvYWQtPmR1cmF0aW9uKTsKLQotICAvKiBkdXJhdGlvbiBvZiBEVE1GIHBheWxvYWRmb3IgdGhlIE5FWFQgcGFja2V0ICovCi0gIC8qIG5vdCB1cGRhdGVkIGZvciByZWR1bmRhbnQgcGFja2V0cyAqLwotICBpZiAoZHRtZnNyYy0+cmVkdW5kYW5jeV9jb3VudCA8PSAxKQotICAgIGR0bWZzcmMtPnBheWxvYWQtPmR1cmF0aW9uICs9IGR0bWZzcmMtPnB0aW1lICogZHRtZnNyYy0+Y2xvY2tfcmF0ZSAvIDEwMDA7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdG1mc3JjLT50aW1lc3RhbXApKQotICAgIGR0bWZzcmMtPnRpbWVzdGFtcCArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0TWVzc2FnZSAqCi1nc3RfZHRtZl9zcmNfcHJlcGFyZV9tZXNzYWdlIChHc3RSVFBEVE1GU3JjICogZHRtZnNyYywKLSAgICBjb25zdCBnY2hhciAqIG1lc3NhZ2VfbmFtZSwgR3N0UlRQRFRNRlNyY0V2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBzd2l0Y2ggKGV2ZW50LT5ldmVudF90eXBlKSB7Ci0gICAgY2FzZSBSVFBfRFRNRl9FVkVOVF9UWVBFX1NUQVJUOgotICAgICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3IChtZXNzYWdlX25hbWUsCi0gICAgICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLAotICAgICAgICAgICJtZXRob2QiLCBHX1RZUEVfSU5ULCAxLAotICAgICAgICAgICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgICAgICJudW1iZXIiLCBHX1RZUEVfSU5ULCBldmVudC0+cGF5bG9hZC0+ZXZlbnQsCi0gICAgICAgICAgInZvbHVtZSIsIEdfVFlQRV9JTlQsIGV2ZW50LT5wYXlsb2FkLT52b2x1bWUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSVFBfRFRNRl9FVkVOVF9UWVBFX1NUT1A6Ci0gICAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKG1lc3NhZ2VfbmFtZSwKLSAgICAgICAgICAidHlwZSIsIEdfVFlQRV9JTlQsIDEsICJtZXRob2QiLCBHX1RZUEVfSU5ULCAxLAotICAgICAgICAgICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJUUF9EVE1GX0VWRU5UX1RZUEVfUEFVU0VfVEFTSzoKLSAgICAgIHJldHVybiBOVUxMOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVCAoZHRtZnNyYyksIHMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R0bWZfc3JjX3Bvc3RfbWVzc2FnZSAoR3N0UlRQRFRNRlNyYyAqIGR0bWZzcmMsIGNvbnN0IGdjaGFyICogbWVzc2FnZV9uYW1lLAotICAgIEdzdFJUUERUTUZTcmNFdmVudCAqIGV2ZW50KQotewotICBHc3RNZXNzYWdlICptID0gZ3N0X2R0bWZfc3JjX3ByZXBhcmVfbWVzc2FnZSAoZHRtZnNyYywgbWVzc2FnZV9uYW1lLCBldmVudCk7Ci0KLQotICBpZiAobSkKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChkdG1mc3JjKSwgbSk7Ci19Ci0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfZHRtZl9zcmNfY3JlYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgbGVuZ3RoLCBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3RSVFBEVE1GU3JjRXZlbnQgKmV2ZW50OwotICBHc3RSVFBEVE1GU3JjICpkdG1mc3JjOwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrSUQgKmNsb2NraWQ7Ci0gIEdzdENsb2NrUmV0dXJuIGNsb2NrcmV0OwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBHUXVldWUgbWVzc2FnZXMgPSBHX1FVRVVFX0lOSVQ7Ci0KLSAgZHRtZnNyYyA9IEdTVF9SVFBfRFRNRl9TUkMgKGJhc2VzcmMpOwotCi0gIGRvIHsKLQotICAgIGlmIChkdG1mc3JjLT5wYXlsb2FkID09IE5VTEwpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJwb3BwaW5nIik7Ci0gICAgICBldmVudCA9IGdfYXN5bmNfcXVldWVfcG9wIChkdG1mc3JjLT5ldmVudF9xdWV1ZSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJwb3BwZWQgJWQiLCBldmVudC0+ZXZlbnRfdHlwZSk7Ci0KLSAgICAgIHN3aXRjaCAoZXZlbnQtPmV2ZW50X3R5cGUpIHsKLSAgICAgICAgY2FzZSBSVFBfRFRNRl9FVkVOVF9UWVBFX1NUT1A6Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkdG1mc3JjLAotICAgICAgICAgICAgICAiUmVjZWl2ZWQgYSBEVE1GIHN0b3AgZXZlbnQgd2hlbiBhbHJlYWR5IHN0b3BwZWQiKTsKLSAgICAgICAgICBnc3RfZHRtZl9zcmNfcG9zdF9tZXNzYWdlIChkdG1mc3JjLCAiZHRtZi1ldmVudC1kcm9wcGVkIiwgZXZlbnQpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUlRQX0RUTUZfRVZFTlRfVFlQRV9TVEFSVDoKLSAgICAgICAgICBkdG1mc3JjLT5maXJzdF9wYWNrZXQgPSBUUlVFOwotICAgICAgICAgIGR0bWZzcmMtPmxhc3RfcGFja2V0ID0gRkFMU0U7Ci0gICAgICAgICAgLyogU2V0IHRoZSByZWR1bmRhbmN5IG9uIHRoZSBmaXJzdCBwYWNrZXQgKi8KLSAgICAgICAgICBkdG1mc3JjLT5yZWR1bmRhbmN5X2NvdW50ID0gZHRtZnNyYy0+cGFja2V0X3JlZHVuZGFuY3k7Ci0gICAgICAgICAgaWYgKCFnc3RfcnRwX2R0bWZfcHJlcGFyZV90aW1lc3RhbXBzIChkdG1mc3JjKSkKLSAgICAgICAgICAgIGdvdG8gbm9fY2xvY2s7Ci0KLSAgICAgICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJm1lc3NhZ2VzLAotICAgICAgICAgICAgICBnc3RfZHRtZl9zcmNfcHJlcGFyZV9tZXNzYWdlIChkdG1mc3JjLCAiZHRtZi1ldmVudC1wcm9jZXNzZWQiLAotICAgICAgICAgICAgICAgICAgZXZlbnQpKTsKLSAgICAgICAgICBkdG1mc3JjLT5wYXlsb2FkID0gZXZlbnQtPnBheWxvYWQ7Ci0gICAgICAgICAgZHRtZnNyYy0+cGF5bG9hZC0+ZHVyYXRpb24gPQotICAgICAgICAgICAgICBkdG1mc3JjLT5wdGltZSAqIGR0bWZzcmMtPmNsb2NrX3JhdGUgLyAxMDAwOwotICAgICAgICAgIGV2ZW50LT5wYXlsb2FkID0gTlVMTDsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJUUF9EVE1GX0VWRU5UX1RZUEVfUEFVU0VfVEFTSzoKLSAgICAgICAgICAvKgotICAgICAgICAgICAqIFdlJ3JlIHB1c2hpbmcgaXQgYmFjayBiZWNhdXNlIGl0IGhhcyB0byBzdGF5IGluIHRoZXJlIHVudGlsCi0gICAgICAgICAgICogdGhlIHRhc2sgaXMgcmVhbGx5IHBhdXNlZCAoYW5kIHRoZSBxdWV1ZSB3aWxsIHRoZW4gYmUgZmx1c2hlZAotICAgICAgICAgICAqLwotICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gICAgICAgICAgaWYgKGR0bWZzcmMtPnBhdXNlZCkgewotICAgICAgICAgICAgZ19hc3luY19xdWV1ZV9wdXNoIChkdG1mc3JjLT5ldmVudF9xdWV1ZSwgZXZlbnQpOwotICAgICAgICAgICAgZ290byBwYXVzZWRfbG9ja2VkOwotICAgICAgICAgIH0KLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9ydHBfZHRtZl9zcmNfZXZlbnRfZnJlZSAoZXZlbnQpOwotICAgIH0gZWxzZSBpZiAoIWR0bWZzcmMtPmZpcnN0X3BhY2tldCAmJiAhZHRtZnNyYy0+bGFzdF9wYWNrZXQgJiYKLSAgICAgICAgKGR0bWZzcmMtPnRpbWVzdGFtcCAtIGR0bWZzcmMtPnN0YXJ0X3RpbWVzdGFtcCkgLyBHU1RfTVNFQ09ORCA+PQotICAgICAgICBNSU5fUFVMU0VfRFVSQVRJT04pIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJ0cnkgcG9wcGluZyIpOwotICAgICAgZXZlbnQgPSBnX2FzeW5jX3F1ZXVlX3RyeV9wb3AgKGR0bWZzcmMtPmV2ZW50X3F1ZXVlKTsKLQotCi0gICAgICBpZiAoZXZlbnQgIT0gTlVMTCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAidHJ5IHBvcHBlZCAlZCIsIGV2ZW50LT5ldmVudF90eXBlKTsKLQotICAgICAgICBzd2l0Y2ggKGV2ZW50LT5ldmVudF90eXBlKSB7Ci0gICAgICAgICAgY2FzZSBSVFBfRFRNRl9FVkVOVF9UWVBFX1NUQVJUOgotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkdG1mc3JjLAotICAgICAgICAgICAgICAgICJSZWNlaXZlZCB0d28gY29uc2VjdXRpdmUgRFRNRiBzdGFydCBldmVudHMiKTsKLSAgICAgICAgICAgIGdzdF9kdG1mX3NyY19wb3N0X21lc3NhZ2UgKGR0bWZzcmMsICJkdG1mLWV2ZW50LWRyb3BwZWQiLCBldmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUlRQX0RUTUZfRVZFTlRfVFlQRV9TVE9QOgotICAgICAgICAgICAgZHRtZnNyYy0+Zmlyc3RfcGFja2V0ID0gRkFMU0U7Ci0gICAgICAgICAgICBkdG1mc3JjLT5sYXN0X3BhY2tldCA9IFRSVUU7Ci0gICAgICAgICAgICAvKiBTZXQgdGhlIHJlZHVuZGFuY3kgb24gdGhlIGxhc3QgcGFja2V0ICovCi0gICAgICAgICAgICBkdG1mc3JjLT5yZWR1bmRhbmN5X2NvdW50ID0gZHRtZnNyYy0+cGFja2V0X3JlZHVuZGFuY3k7Ci0gICAgICAgICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJm1lc3NhZ2VzLAotICAgICAgICAgICAgICAgIGdzdF9kdG1mX3NyY19wcmVwYXJlX21lc3NhZ2UgKGR0bWZzcmMsICJkdG1mLWV2ZW50LXByb2Nlc3NlZCIsCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgUlRQX0RUTUZfRVZFTlRfVFlQRV9QQVVTRV9UQVNLOgotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFdlJ3JlIHB1c2hpbmcgaXQgYmFjayBiZWNhdXNlIGl0IGhhcyB0byBzdGF5IGluIHRoZXJlIHVudGlsCi0gICAgICAgICAgICAgKiB0aGUgdGFzayBpcyByZWFsbHkgcGF1c2VkIChhbmQgdGhlIHF1ZXVlIHdpbGwgdGhlbiBiZSBmbHVzaGVkKQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAicHVzaGluZyBwYXVzZV90YXNrLi4uIik7Ci0gICAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGR0bWZzcmMpOwotICAgICAgICAgICAgaWYgKGR0bWZzcmMtPnBhdXNlZCkgewotICAgICAgICAgICAgICBnX2FzeW5jX3F1ZXVlX3B1c2ggKGR0bWZzcmMtPmV2ZW50X3F1ZXVlLCBldmVudCk7Ci0gICAgICAgICAgICAgIGdvdG8gcGF1c2VkX2xvY2tlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkdG1mc3JjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9ydHBfZHRtZl9zcmNfZXZlbnRfZnJlZSAoZXZlbnQpOwotICAgICAgfQotICAgIH0KLSAgfSB3aGlsZSAoZHRtZnNyYy0+cGF5bG9hZCA9PSBOVUxMKTsKLQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJQcm9jZXNzZWQgZXZlbnRzLCBub3cgbGV0cyB3YWl0IG9uIHRoZSBjbG9jayIpOwotCi0gIGNsb2NrID0gZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHU1RfRUxFTUVOVCAoYmFzZXNyYykpOwotICBpZiAoIWNsb2NrKQotICAgIGdvdG8gbm9fY2xvY2s7Ci0gIGNsb2NraWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgZHRtZnNyYy0+dGltZXN0YW1wICsKLSAgICAgIGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdTVF9FTEVNRU5UIChkdG1mc3JjKSkpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkdG1mc3JjKTsKLSAgaWYgKCFkdG1mc3JjLT5wYXVzZWQpIHsKLSAgICBkdG1mc3JjLT5jbG9ja2lkID0gY2xvY2tpZDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0KLSAgICBjbG9ja3JldCA9IGdzdF9jbG9ja19pZF93YWl0IChjbG9ja2lkLCBOVUxMKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gICAgaWYgKGR0bWZzcmMtPnBhdXNlZCkKLSAgICAgIGNsb2NrcmV0ID0gR1NUX0NMT0NLX1VOU0NIRURVTEVEOwotICB9IGVsc2UgewotICAgIGNsb2NrcmV0ID0gR1NUX0NMT0NLX1VOU0NIRURVTEVEOwotICB9Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tpZCk7Ci0gIGR0bWZzcmMtPmNsb2NraWQgPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0KLSAgd2hpbGUgKChtZXNzYWdlID0gZ19xdWV1ZV9wb3BfaGVhZCAoJm1lc3NhZ2VzKSkgIT0gTlVMTCkKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChkdG1mc3JjKSwgbWVzc2FnZSk7Ci0KLSAgaWYgKGNsb2NrcmV0ID09IEdTVF9DTE9DS19VTlNDSEVEVUxFRCkgewotICAgIGdvdG8gcGF1c2VkOwotICB9Ci0KLXNlbmRfbGFzdDoKLQotICBpZiAoZHRtZnNyYy0+ZGlydHkpCi0gICAgaWYgKCFnc3RfcnRwX2R0bWZfc3JjX25lZ290aWF0ZSAoYmFzZXNyYykpCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0KLSAgLyogY3JlYXRlIGJ1ZmZlciB0byBob2xkIHRoZSBwYXlsb2FkICovCi0gICpidWZmZXIgPSBnc3RfcnRwX2R0bWZfc3JjX2NyZWF0ZV9uZXh0X3J0cF9wYWNrZXQgKGR0bWZzcmMpOwotCi0gIGlmIChkdG1mc3JjLT5yZWR1bmRhbmN5X2NvdW50KQotICAgIGR0bWZzcmMtPnJlZHVuZGFuY3lfY291bnQtLTsKLQotICAvKiBPbmx5IHRoZSB2ZXJ5IGZpcnN0IG9uZSBoYXMgYSBtYXJrZXIgKi8KLSAgZHRtZnNyYy0+Zmlyc3RfcGFja2V0ID0gRkFMU0U7Ci0KLSAgLyogVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBldmVudCAqLwotICBpZiAoZHRtZnNyYy0+bGFzdF9wYWNrZXQgPT0gVFJVRSAmJiBkdG1mc3JjLT5yZWR1bmRhbmN5X2NvdW50ID09IDApIHsKLQotICAgIGdfc2xpY2VfZnJlZSAoR3N0UlRQRFRNRlBheWxvYWQsIGR0bWZzcmMtPnBheWxvYWQpOwotICAgIGR0bWZzcmMtPnBheWxvYWQgPSBOVUxMOwotCi0gICAgZHRtZnNyYy0+bGFzdF9wYWNrZXQgPSBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotcGF1c2VkX2xvY2tlZDoKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0KLXBhdXNlZDoKLQotICBpZiAoZHRtZnNyYy0+cGF5bG9hZCkgewotICAgIGR0bWZzcmMtPmZpcnN0X3BhY2tldCA9IEZBTFNFOwotICAgIGR0bWZzcmMtPmxhc3RfcGFja2V0ID0gVFJVRTsKLSAgICAvKiBTZXQgdGhlIHJlZHVuZGFuYyBvbiB0aGUgbGFzdCBwYWNrZXQgKi8KLSAgICBkdG1mc3JjLT5yZWR1bmRhbmN5X2NvdW50ID0gZHRtZnNyYy0+cGFja2V0X3JlZHVuZGFuY3k7Ci0gICAgZ290byBzZW5kX2xhc3Q7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci0KLW5vX2Nsb2NrOgotICBHU1RfRUxFTUVOVF9FUlJPUiAoZHRtZnNyYywgU1RSRUFNLCBNVVgsICgiTm8gYXZhaWxhYmxlIGNsb2NrIiksCi0gICAgICAoIk5vIGF2YWlsYWJsZSBjbG9jayIpKTsKLSAgZ3N0X3BhZF9wYXVzZV90YXNrIChHU1RfQkFTRV9TUkNfUEFEIChkdG1mc3JjKSk7Ci0gIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZHRtZl9zcmNfbmVnb3RpYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0Q2FwcyAqc3JjY2FwcywgKnBlZXJjYXBzOwotICBHc3RSVFBEVE1GU3JjICpkdG1mc3JjID0gR1NUX1JUUF9EVE1GX1NSQyAoYmFzZXNyYyk7Ci0gIGdib29sZWFuIHJldDsKLQotICAvKiBmaWxsIGluIHRoZSBkZWZhdWx0cywgdGhlcmUgcHJvcGVydGllcyBjYW5ub3QgYmUgbmVnb3RpYXRlZC4gKi8KLSAgc3JjY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAiYXVkaW8iLAotICAgICAgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCAiVEVMRVBIT05FLUVWRU5UIiwgTlVMTCk7Ci0KLSAgLyogdGhlIHBlZXIgY2FwcyBjYW4gb3ZlcnJpZGUgc29tZSBvZiB0aGUgZGVmYXVsdHMgKi8KLSAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIE5VTEwpOwotICBpZiAocGVlcmNhcHMgPT0gTlVMTCkgewotICAgIC8qIG5vIHBlZXIgY2FwcywganVzdCBhZGQgdGhlIG90aGVyIHByb3BlcnRpZXMgKi8KLSAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzcmNjYXBzLAotICAgICAgICAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIGR0bWZzcmMtPnB0LAotICAgICAgICAic3NyYyIsIEdfVFlQRV9VSU5ULCBkdG1mc3JjLT5jdXJyZW50X3NzcmMsCi0gICAgICAgICJ0aW1lc3RhbXAtb2Zmc2V0IiwgR19UWVBFX1VJTlQsIGR0bWZzcmMtPnRzX2Jhc2UsCi0gICAgICAgICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgZHRtZnNyYy0+Y2xvY2tfcmF0ZSwKLSAgICAgICAgInNlcW51bS1vZmZzZXQiLCBHX1RZUEVfVUlOVCwgZHRtZnNyYy0+c2VxbnVtX2Jhc2UsIE5VTEwpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgIm5vIHBlZXIgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIHNyY2NhcHMpOwotICB9IGVsc2UgewotICAgIEdzdENhcHMgKnRlbXA7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0gICAgZ2ludCBwdDsKLSAgICBnaW50IGNsb2NrX3JhdGU7Ci0KLSAgICAvKiBwZWVyIHByb3ZpZGVzIGNhcHMgd2UgY2FuIHVzZSB0byBmaXhhdGUsIGludGVyc2VjdC4gVGhpcyBhbHdheXMgcmV0dXJucyBhCi0gICAgICogd3JpdGFibGUgY2Fwcy4gKi8KLSAgICB0ZW1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChzcmNjYXBzLCBwZWVyY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0KLSAgICBpZiAoIXRlbXApIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJDb3VsZCBub3QgZ2V0IGludGVyc2VjdGlvbiB3aXRoIHBlZXIgY2FwcyIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIGlmIChnc3RfY2Fwc19pc19lbXB0eSAodGVtcCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJJbnRlcnNlY3Rpb24gd2l0aCBwZWVyIGNhcHMgaXMgZW1wdHkiKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBub3cgZml4YXRlLCBzdGFydCBieSB0YWtpbmcgdGhlIGZpcnN0IGNhcHMgKi8KLSAgICB0ZW1wID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKHRlbXApOwotICAgIHRlbXAgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlICh0ZW1wKTsKLSAgICBzcmNjYXBzID0gdGVtcDsKLQotICAgIC8qIGdldCBmaXJzdCBzdHJ1Y3R1cmUgKi8KLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3JjY2FwcywgMCk7Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicGF5bG9hZCIsICZwdCkpIHsKLSAgICAgIC8qIHVzZSBwZWVyIHB0ICovCi0gICAgICBkdG1mc3JjLT5wdCA9IHB0OwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJ1c2luZyBwZWVyIHB0ICVkIiwgcHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHMsICJwYXlsb2FkIikpIHsKLSAgICAgICAgLyogY2FuIG9ubHkgZml4YXRlIGlmIHRoZXJlIGlzIGEgZmllbGQgKi8KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHMsICJwYXlsb2FkIiwgZHRtZnNyYy0+cHQpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJwYXlsb2FkIiwgJnB0KTsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJ1c2luZyBwZWVyIHB0ICVkIiwgcHQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogbm8gcHQgZmllbGQsIHVzZSB0aGUgaW50ZXJuYWwgcHQgKi8KLSAgICAgICAgcHQgPSBkdG1mc3JjLT5wdDsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgcHQsIE5VTEwpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZHRtZnNyYywgInVzaW5nIGludGVybmFsIHB0ICVkIiwgcHQpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKSB7Ci0gICAgICBkdG1mc3JjLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAidXNpbmcgY2xvY2stcmF0ZSBmcm9tIGNhcHMgJWQiLAotICAgICAgICAgIGR0bWZzcmMtPmNsb2NrX3JhdGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZHRtZnNyYywgInVzaW5nIGV4aXN0aW5nIGNsb2NrLXJhdGUgJWQiLAotICAgICAgICAgIGR0bWZzcmMtPmNsb2NrX3JhdGUpOwotICAgIH0KLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBkdG1mc3JjLT5jbG9ja19yYXRlLCBOVUxMKTsKLQotCi0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAic3NyYyIsIEdfVFlQRV9VSU5UKSkgewotICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInNzcmMiKTsKLSAgICAgIGR0bWZzcmMtPmN1cnJlbnRfc3NyYyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAidXNpbmcgcGVlciBzc3JjICUwOHgiLCBkdG1mc3JjLT5jdXJyZW50X3NzcmMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBGSVhNRSwgZml4YXRlX25lYXJlc3RfdWludCB3b3VsZCBiZSBldmVuIGJldHRlciAqLwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJzc3JjIiwgR19UWVBFX1VJTlQsIGR0bWZzcmMtPmN1cnJlbnRfc3NyYywgTlVMTCk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZHRtZnNyYywgInVzaW5nIGludGVybmFsIHNzcmMgJTA4eCIsCi0gICAgICAgICAgZHRtZnNyYy0+Y3VycmVudF9zc3JjKTsKLSAgICB9Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJ0aW1lc3RhbXAtb2Zmc2V0IiwgR19UWVBFX1VJTlQpKSB7Ci0gICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAidGltZXN0YW1wLW9mZnNldCIpOwotICAgICAgZHRtZnNyYy0+dHNfYmFzZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAidXNpbmcgcGVlciB0aW1lc3RhbXAtb2Zmc2V0ICV1IiwKLSAgICAgICAgICBkdG1mc3JjLT50c19iYXNlKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogRklYTUUsIGZpeGF0ZV9uZWFyZXN0X3VpbnQgd291bGQgYmUgZXZlbiBiZXR0ZXIgKi8KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAidGltZXN0YW1wLW9mZnNldCIsIEdfVFlQRV9VSU5ULCBkdG1mc3JjLT50c19iYXNlLAotICAgICAgICAgIE5VTEwpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJ1c2luZyBpbnRlcm5hbCB0aW1lc3RhbXAtb2Zmc2V0ICV1IiwKLSAgICAgICAgICBkdG1mc3JjLT50c19iYXNlKTsKLSAgICB9Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkX3R5cGVkIChzLCAic2VxbnVtLW9mZnNldCIsIEdfVFlQRV9VSU5UKSkgewotICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInNlcW51bS1vZmZzZXQiKTsKLSAgICAgIGR0bWZzcmMtPnNlcW51bV9iYXNlID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJ1c2luZyBwZWVyIHNlcW51bS1vZmZzZXQgJXUiLAotICAgICAgICAgIGR0bWZzcmMtPnNlcW51bV9iYXNlKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogRklYTUUsIGZpeGF0ZV9uZWFyZXN0X3VpbnQgd291bGQgYmUgZXZlbiBiZXR0ZXIgKi8KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAic2VxbnVtLW9mZnNldCIsIEdfVFlQRV9VSU5ULCBkdG1mc3JjLT5zZXFudW1fYmFzZSwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAidXNpbmcgaW50ZXJuYWwgc2VxbnVtLW9mZnNldCAldSIsCi0gICAgICAgICAgZHRtZnNyYy0+c2VxbnVtX2Jhc2UpOwotICAgIH0KLQotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgInB0aW1lIiwgR19UWVBFX1VJTlQpKSB7Ci0gICAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicHRpbWUiKTsKLSAgICAgIGR0bWZzcmMtPnB0aW1lID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGR0bWZzcmMsICJ1c2luZyBwZWVyIHB0aW1lICV1IiwgZHRtZnNyYy0+cHRpbWUpOwotICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJtYXhwdGltZSIsIEdfVFlQRV9VSU5UKSkgewotICAgICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgIm1heHB0aW1lIik7Ci0gICAgICBkdG1mc3JjLT5wdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdG1mc3JjLCAidXNpbmcgcGVlciBtYXhwdGltZSBhcyBwdGltZSAldSIsCi0gICAgICAgICAgZHRtZnNyYy0+cHRpbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBGSVhNRSwgZml4YXRlX25lYXJlc3RfdWludCB3b3VsZCBiZSBldmVuIGJldHRlciAqLwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJwdGltZSIsIEdfVFlQRV9VSU5ULCBkdG1mc3JjLT5wdGltZSwgTlVMTCk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZHRtZnNyYywgInVzaW5nIGludGVybmFsIHB0aW1lICV1IiwgZHRtZnNyYy0+cHRpbWUpOwotICAgIH0KLQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHRtZnNyYywgIndpdGggcGVlciBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3JjY2Fwcyk7Ci0gIH0KLQotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfQkFTRV9TUkNfUEFEIChiYXNlc3JjKSwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICBkdG1mc3JjLT5kaXJ0eSA9IEZBTFNFOwotCi0gIHJldHVybiByZXQ7Ci0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2R0bWZfc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogYmFzZXNyYywgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0UlRQRFRNRlNyYyAqZHRtZnNyYyA9IEdTVF9SVFBfRFRNRl9TUkMgKGJhc2VzcmMpOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBsYXRlbmN5OwotCi0gICAgICBsYXRlbmN5ID0gZHRtZnNyYy0+cHRpbWUgKiBHU1RfTVNFQ09ORDsKLSAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGdzdF9iYXNlX3NyY19pc19saXZlIChiYXNlc3JjKSwgbGF0ZW5jeSwKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJSZXBvcnRpbmcgbGF0ZW5jeSBvZiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGF0ZW5jeSkpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChnc3RfcnRwX2R0bWZfc3JjX3BhcmVudF9jbGFzcyktPnF1ZXJ5IChiYXNlc3JjLAotICAgICAgICAgIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZHRtZl9zcmNfcmVhZHlfdG9fcGF1c2VkIChHc3RSVFBEVE1GU3JjICogZHRtZnNyYykKLXsKLSAgaWYgKGR0bWZzcmMtPnNzcmMgPT0gLTEpCi0gICAgZHRtZnNyYy0+Y3VycmVudF9zc3JjID0gZ19yYW5kb21faW50ICgpOwotICBlbHNlCi0gICAgZHRtZnNyYy0+Y3VycmVudF9zc3JjID0gZHRtZnNyYy0+c3NyYzsKLQotICBpZiAoZHRtZnNyYy0+c2VxbnVtX29mZnNldCA9PSAtMSkKLSAgICBkdG1mc3JjLT5zZXFudW1fYmFzZSA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgR19NQVhVSU5UMTYpOwotICBlbHNlCi0gICAgZHRtZnNyYy0+c2VxbnVtX2Jhc2UgPSBkdG1mc3JjLT5zZXFudW1fb2Zmc2V0OwotICBkdG1mc3JjLT5zZXFudW0gPSBkdG1mc3JjLT5zZXFudW1fYmFzZTsKLQotICBpZiAoZHRtZnNyYy0+dHNfb2Zmc2V0ID09IC0xKQotICAgIGR0bWZzcmMtPnRzX2Jhc2UgPSBnX3JhbmRvbV9pbnQgKCk7Ci0gIGVsc2UKLSAgICBkdG1mc3JjLT50c19iYXNlID0gZHRtZnNyYy0+dHNfb2Zmc2V0OwotCi0gIGR0bWZzcmMtPnRpbWVzdGFtcCA9IDA7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9kdG1mX3NyY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSVFBEVE1GU3JjICpkdG1mc3JjOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXN1bHQ7Ci0gIGdib29sZWFuIG5vX3ByZXJvbGwgPSBGQUxTRTsKLSAgR3N0UlRQRFRNRlNyY0V2ZW50ICpldmVudCA9IE5VTEw7Ci0KLSAgZHRtZnNyYyA9IEdTVF9SVFBfRFRNRl9TUkMgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfcnRwX2R0bWZfc3JjX3JlYWR5X3RvX3BhdXNlZCAoZHRtZnNyYyk7Ci0KLSAgICAgIC8qIEZsdXNoaW5nIHRoZSBldmVudCBxdWV1ZSAqLwotICAgICAgd2hpbGUgKChldmVudCA9IGdfYXN5bmNfcXVldWVfdHJ5X3BvcCAoZHRtZnNyYy0+ZXZlbnRfcXVldWUpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGdzdF9kdG1mX3NyY19wb3N0X21lc3NhZ2UgKGR0bWZzcmMsICJkdG1mLWV2ZW50LWRyb3BwZWQiLCBldmVudCk7Ci0gICAgICAgIGdzdF9ydHBfZHRtZl9zcmNfZXZlbnRfZnJlZSAoZXZlbnQpOwotICAgICAgfQotICAgICAgZHRtZnNyYy0+bGFzdF9ldmVudF93YXNfc3RhcnQgPSBGQUxTRTsKLQotICAgICAgbm9fcHJlcm9sbCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoKHJlc3VsdCA9Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9ydHBfZHRtZl9zcmNfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlCi0gICAgICAgICAgKGVsZW1lbnQsIHRyYW5zaXRpb24pKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIG5vX3ByZXJvbGwgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLQotICAgICAgLyogRmx1c2hpbmcgdGhlIGV2ZW50IHF1ZXVlICovCi0gICAgICB3aGlsZSAoKGV2ZW50ID0gZ19hc3luY19xdWV1ZV90cnlfcG9wIChkdG1mc3JjLT5ldmVudF9xdWV1ZSkpICE9IE5VTEwpIHsKLSAgICAgICAgZ3N0X2R0bWZfc3JjX3Bvc3RfbWVzc2FnZSAoZHRtZnNyYywgImR0bWYtZXZlbnQtZHJvcHBlZCIsIGV2ZW50KTsKLSAgICAgICAgZ3N0X3J0cF9kdG1mX3NyY19ldmVudF9mcmVlIChldmVudCk7Ci0gICAgICB9Ci0gICAgICBkdG1mc3JjLT5sYXN0X2V2ZW50X3dhc19zdGFydCA9IEZBTFNFOwotCi0gICAgICAvKiBJbmRpY2F0ZSB0aGF0IHdlIGRvbid0IGRvIFBSRV9ST0xMICovCi0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChub19wcmVyb2xsICYmIHJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCi0gICAgcmVzdWx0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1mYWlsdXJlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZHRtZnNyYywgInBhcmVudCBmYWlsZWQgc3RhdGUgY2hhbmdlIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9kdG1mX3NyY191bmxvY2sgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdFJUUERUTUZTcmMgKmR0bWZzcmMgPSBHU1RfUlRQX0RUTUZfU1JDIChzcmMpOwotICBHc3RSVFBEVE1GU3JjRXZlbnQgKmV2ZW50ID0gTlVMTDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiQ2FsbGVkIHVubG9jayIpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gIGR0bWZzcmMtPnBhdXNlZCA9IFRSVUU7Ci0gIGlmIChkdG1mc3JjLT5jbG9ja2lkKSB7Ci0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKGR0bWZzcmMtPmNsb2NraWQpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkdG1mc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkdG1mc3JjLCAiUHVzaGluZyB0aGUgUEFVU0VfVEFTSyBldmVudCBvbiB1bmxvY2sgcmVxdWVzdCIpOwotICBldmVudCA9IGdfc2xpY2VfbmV3MCAoR3N0UlRQRFRNRlNyY0V2ZW50KTsKLSAgZXZlbnQtPmV2ZW50X3R5cGUgPSBSVFBfRFRNRl9FVkVOVF9UWVBFX1BBVVNFX1RBU0s7Ci0gIGdfYXN5bmNfcXVldWVfcHVzaCAoZHRtZnNyYy0+ZXZlbnRfcXVldWUsIGV2ZW50KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZHRtZl9zcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdFJUUERUTUZTcmMgKmR0bWZzcmMgPSBHU1RfUlRQX0RUTUZfU1JDIChzcmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGR0bWZzcmMsICJVbmxvY2sgc3RvcHBlZCIpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZHRtZnNyYyk7Ci0gIGR0bWZzcmMtPnBhdXNlZCA9IEZBTFNFOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZHRtZnNyYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2R0bWZfc3JjX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwZHRtZnNyYyIsCi0gICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9SVFBfRFRNRl9TUkMpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oIGIvZ3N0L2R0bWYvZ3N0cnRwZHRtZnNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTkyNTZjLi4wMDAwMDAwCi0tLSBhL2dzdC9kdG1mL2dzdHJ0cGR0bWZzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKiBHU3RyZWFtZXIgUlRQIERUTUYgc291cmNlCi0gKgotICogZ3N0cnRwZHRtZnNyYy5oOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uLgotICogICBDb250YWN0OiBaZWVzaGFuIEFsaSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9EVE1GX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfUlRQX0RUTUZfU1JDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0ZHRtZmNvbW1vbi5oIgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9EVE1GX1NSQwkJKGdzdF9ydHBfZHRtZl9zcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9EVE1GX1NSQyhvYmopCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0RUTUZfU1JDLEdzdFJUUERUTUZTcmMpKQotI2RlZmluZSBHU1RfUlRQX0RUTUZfU1JDX0NMQVNTKGtsYXNzKQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRFRNRl9TUkMsR3N0UlRQRFRNRlNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX1JUUF9EVE1GX1NSQ19HRVRfQ0xBU1Mob2JqKSAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9SVFBfRFRNRl9TUkMsIEdzdFJUUERUTUZTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfRFRNRl9TUkMob2JqKQkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9EVE1GX1NSQykpCi0jZGVmaW5lIEdTVF9JU19SVFBfRFRNRl9TUkNfQ0xBU1Moa2xhc3MpCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9EVE1GX1NSQykpCi0jZGVmaW5lIEdTVF9SVFBfRFRNRl9TUkNfQ0FTVChvYmopCQkoKEdzdFJUUERUTUZTcmMgKikob2JqKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBEVE1GU3JjIEdzdFJUUERUTUZTcmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQRFRNRlNyY0NsYXNzIEdzdFJUUERUTUZTcmNDbGFzczsKLQotCi0KLWVudW0gX0dzdFJUUERUTUZFdmVudFR5cGUKLXsKLSAgUlRQX0RUTUZfRVZFTlRfVFlQRV9TVEFSVCwKLSAgUlRQX0RUTUZfRVZFTlRfVFlQRV9TVE9QLAotICBSVFBfRFRNRl9FVkVOVF9UWVBFX1BBVVNFX1RBU0sKLX07Ci0KLXR5cGVkZWYgZW51bSBfR3N0UlRQRFRNRkV2ZW50VHlwZSBHc3RSVFBEVE1GRXZlbnRUeXBlOwotCi1zdHJ1Y3QgX0dzdFJUUERUTUZTcmNFdmVudAotewotICBHc3RSVFBEVE1GRXZlbnRUeXBlIGV2ZW50X3R5cGU7Ci0gIEdzdFJUUERUTUZQYXlsb2FkICpwYXlsb2FkOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUERUTUZTcmNFdmVudCBHc3RSVFBEVE1GU3JjRXZlbnQ7Ci0KLS8qKgotICogR3N0UlRQRFRNRlNyYzoKLSAqIEBlbGVtZW50OiB0aGUgcGFyZW50IGVsZW1lbnQuCi0gKgotICogVGhlIG9wYXF1ZSAjR3N0UlRQRFRNRlNyYyBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RSVFBEVE1GU3JjCi17Ci0gIC8qPCBwcml2YXRlID4qLwotICBHc3RCYXNlU3JjIGJhc2VzcmM7Ci0KLSAgR0FzeW5jUXVldWUgKmV2ZW50X3F1ZXVlOwotICBHc3RDbG9ja0lEIGNsb2NraWQ7Ci0gIGdib29sZWFuIHBhdXNlZDsKLSAgR3N0UlRQRFRNRlBheWxvYWQgKnBheWxvYWQ7Ci0KLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RpbWVzdGFtcDsKLSAgZ2Jvb2xlYW4gZmlyc3RfcGFja2V0OwotICBnYm9vbGVhbiBsYXN0X3BhY2tldDsKLSAgZ3VpbnQzMiB0c19iYXNlOwotICBndWludDE2IHNlcW51bV9iYXNlOwotICBnaW50MTYgc2VxbnVtX29mZnNldDsKLSAgZ3VpbnQxNiBzZXFudW07Ci0gIGdpbnQzMiB0c19vZmZzZXQ7Ci0gIGd1aW50MzIgcnRwX3RpbWVzdGFtcDsKLSAgZ3VpbnQgcHQ7Ci0gIGd1aW50IHNzcmM7Ci0gIGd1aW50IGN1cnJlbnRfc3NyYzsKLSAgZ3VpbnQxNiBwdGltZTsKLSAgZ3VpbnQxNiBwYWNrZXRfcmVkdW5kYW5jeTsKLSAgZ3VpbnQzMiBjbG9ja19yYXRlOwotICBnYm9vbGVhbiBsYXN0X2V2ZW50X3dhc19zdGFydDsKLQotICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wOwotCi0gIGdib29sZWFuIGRpcnR5OwotICBndWludDE2IHJlZHVuZGFuY3lfY291bnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJUUERUTUZTcmNDbGFzcwotewotICBHc3RCYXNlU3JjQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9kdG1mX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfZHRtZl9zcmNfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9SVFBfRFRNRl9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9NYWtlZmlsZS5hbSBiL2dzdC9lZmZlY3R2L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGRmZjFkLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZWZmZWN0di5sYQotCi1saWJnc3RlZmZlY3R2X2xhX1NPVVJDRVMgPSBcCi0JZ3N0ZWZmZWN0di5jIGdzdGVkZ2UuYyBnc3RhZ2luZy5jIGdzdGRpY2UuYyBnc3R3YXJwLmMgXAotCWdzdHNoYWdhZGVsaWMuYyBnc3R2ZXJ0aWdvLmMgZ3N0cmV2LmMgZ3N0cXVhcmsuYyBnc3RvcC5jIFwKLQlnc3RyYWRpb2FjLmMgZ3N0c3RyZWFrLmMgZ3N0cmlwcGxlLmMKLWxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgXAotCS1JJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9maWx0ZXIKLWxpYmdzdGVmZmVjdHZfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChMSUJNKQotbGliZ3N0ZWZmZWN0dl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0ZWZmZWN0di5oIGdzdGFnaW5nLmggZ3N0ZGljZS5oIGdzdGVkZ2UuaCBcCi0gICAgICAgIGdzdHF1YXJrLmggZ3N0cmV2LmggZ3N0c2hhZ2FkZWxpYy5oIGdzdHZlcnRpZ28uaCBnc3R3YXJwLmggZ3N0b3AuaCBcCi0JZ3N0cmFkaW9hYy5oIGdzdHN0cmVhay5oIGdzdHJpcHBsZS5oCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9NYWtlZmlsZS5pbiBiL2dzdC9lZmZlY3R2L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTY4MzAyLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTAzMCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvZWZmZWN0dgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGVmZmVjdHZfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGVmZmVjdHZfbGFfT0JKRUNUUyA9IGxpYmdzdGVmZmVjdHZfbGEtZ3N0ZWZmZWN0di5sbyBcCi0JbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZGdlLmxvIGxpYmdzdGVmZmVjdHZfbGEtZ3N0YWdpbmcubG8gXAotCWxpYmdzdGVmZmVjdHZfbGEtZ3N0ZGljZS5sbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHdhcnAubG8gXAotCWxpYmdzdGVmZmVjdHZfbGEtZ3N0c2hhZ2FkZWxpYy5sbyBcCi0JbGliZ3N0ZWZmZWN0dl9sYS1nc3R2ZXJ0aWdvLmxvIGxpYmdzdGVmZmVjdHZfbGEtZ3N0cmV2LmxvIFwKLQlsaWJnc3RlZmZlY3R2X2xhLWdzdHF1YXJrLmxvIGxpYmdzdGVmZmVjdHZfbGEtZ3N0b3AubG8gXAotCWxpYmdzdGVmZmVjdHZfbGEtZ3N0cmFkaW9hYy5sbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHN0cmVhay5sbyBcCi0JbGliZ3N0ZWZmZWN0dl9sYS1nc3RyaXBwbGUubG8KLWxpYmdzdGVmZmVjdHZfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0ZWZmZWN0dl9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0ZWZmZWN0dl9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGVmZmVjdHZfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0ZWZmZWN0dl9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RlZmZlY3R2X2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGVmZmVjdHYubGEKLWxpYmdzdGVmZmVjdHZfbGFfU09VUkNFUyA9IFwKLQlnc3RlZmZlY3R2LmMgZ3N0ZWRnZS5jIGdzdGFnaW5nLmMgZ3N0ZGljZS5jIGdzdHdhcnAuYyBcCi0JZ3N0c2hhZ2FkZWxpYy5jIGdzdHZlcnRpZ28uYyBnc3RyZXYuYyBnc3RxdWFyay5jIGdzdG9wLmMgXAotCWdzdHJhZGlvYWMuYyBnc3RzdHJlYWsuYyBnc3RyaXBwbGUuYwotCi1saWJnc3RlZmZlY3R2X2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpIFwKLQktSSQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvZmlsdGVyCi0KLWxpYmdzdGVmZmVjdHZfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKSBcCi0JJChMSUJNKQotCi1saWJnc3RlZmZlY3R2X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0ZWZmZWN0di5oIGdzdGFnaW5nLmggZ3N0ZGljZS5oIGdzdGVkZ2UuaCBcCi0gICAgICAgIGdzdHF1YXJrLmggZ3N0cmV2LmggZ3N0c2hhZ2FkZWxpYy5oIGdzdHZlcnRpZ28uaCBnc3R3YXJwLmggZ3N0b3AuaCBcCi0JZ3N0cmFkaW9hYy5oIGdzdHN0cmVhay5oIGdzdHJpcHBsZS5oCi0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9lZmZlY3R2L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9lZmZlY3R2L01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0ZWZmZWN0di5sYTogJChsaWJnc3RlZmZlY3R2X2xhX09CSkVDVFMpICQobGliZ3N0ZWZmZWN0dl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0ZWZmZWN0dl9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0ZWZmZWN0dl9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0ZWZmZWN0dl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGVmZmVjdHZfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdGFnaW5nLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RkaWNlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZGdlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZmZlY3R2LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RvcC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0cXVhcmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHJhZGlvYWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHJldi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0cmlwcGxlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RzaGFnYWRlbGljLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RzdHJlYWsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHZlcnRpZ28uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHdhcnAuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGVmZmVjdHZfbGEtZ3N0ZWZmZWN0di5sbzogZ3N0ZWZmZWN0di5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RlZmZlY3R2X2xhLWdzdGVmZmVjdHYubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0ZWZmZWN0di5UcG8gLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZmZlY3R2LmxvIGB0ZXN0IC1mICdnc3RlZmZlY3R2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVmZmVjdHYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZmZlY3R2LlRwbyAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZmZlY3R2LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGVmZmVjdHYuYycgb2JqZWN0PSdsaWJnc3RlZmZlY3R2X2xhLWdzdGVmZmVjdHYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZmZlY3R2LmxvIGB0ZXN0IC1mICdnc3RlZmZlY3R2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGVmZmVjdHYuYwotCi1saWJnc3RlZmZlY3R2X2xhLWdzdGVkZ2UubG86IGdzdGVkZ2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZGdlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdGVkZ2UuVHBvIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0ZWRnZS5sbyBgdGVzdCAtZiAnZ3N0ZWRnZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlZGdlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0ZWRnZS5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0ZWRnZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RlZGdlLmMnIG9iamVjdD0nbGliZ3N0ZWZmZWN0dl9sYS1nc3RlZGdlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0ZWRnZS5sbyBgdGVzdCAtZiAnZ3N0ZWRnZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RlZGdlLmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3RhZ2luZy5sbzogZ3N0YWdpbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RhZ2luZy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RhZ2luZy5UcG8gLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3RhZ2luZy5sbyBgdGVzdCAtZiAnZ3N0YWdpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YWdpbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RhZ2luZy5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0YWdpbmcuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0YWdpbmcuYycgb2JqZWN0PSdsaWJnc3RlZmZlY3R2X2xhLWdzdGFnaW5nLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0YWdpbmcubG8gYHRlc3QgLWYgJ2dzdGFnaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGFnaW5nLmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3RkaWNlLmxvOiBnc3RkaWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGVmZmVjdHZfbGEtZ3N0ZGljZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RkaWNlLlRwbyAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdGRpY2UubG8gYHRlc3QgLWYgJ2dzdGRpY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGljZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdGRpY2UuVHBvICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdGRpY2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0ZGljZS5jJyBvYmplY3Q9J2xpYmdzdGVmZmVjdHZfbGEtZ3N0ZGljZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdGRpY2UubG8gYHRlc3QgLWYgJ2dzdGRpY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGljZS5jCi0KLWxpYmdzdGVmZmVjdHZfbGEtZ3N0d2FycC5sbzogZ3N0d2FycC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RlZmZlY3R2X2xhLWdzdHdhcnAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0d2FycC5UcG8gLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3R3YXJwLmxvIGB0ZXN0IC1mICdnc3R3YXJwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhcnAuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3R3YXJwLlRwbyAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3R3YXJwLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHdhcnAuYycgb2JqZWN0PSdsaWJnc3RlZmZlY3R2X2xhLWdzdHdhcnAubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3R3YXJwLmxvIGB0ZXN0IC1mICdnc3R3YXJwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhcnAuYwotCi1saWJnc3RlZmZlY3R2X2xhLWdzdHNoYWdhZGVsaWMubG86IGdzdHNoYWdhZGVsaWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RzaGFnYWRlbGljLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHNoYWdhZGVsaWMuVHBvIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0c2hhZ2FkZWxpYy5sbyBgdGVzdCAtZiAnZ3N0c2hhZ2FkZWxpYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzaGFnYWRlbGljLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0c2hhZ2FkZWxpYy5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0c2hhZ2FkZWxpYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzaGFnYWRlbGljLmMnIG9iamVjdD0nbGliZ3N0ZWZmZWN0dl9sYS1nc3RzaGFnYWRlbGljLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0c2hhZ2FkZWxpYy5sbyBgdGVzdCAtZiAnZ3N0c2hhZ2FkZWxpYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzaGFnYWRlbGljLmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3R2ZXJ0aWdvLmxvOiBnc3R2ZXJ0aWdvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGVmZmVjdHZfbGEtZ3N0dmVydGlnby5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3R2ZXJ0aWdvLlRwbyAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHZlcnRpZ28ubG8gYHRlc3QgLWYgJ2dzdHZlcnRpZ28uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmVydGlnby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHZlcnRpZ28uVHBvICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHZlcnRpZ28uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dmVydGlnby5jJyBvYmplY3Q9J2xpYmdzdGVmZmVjdHZfbGEtZ3N0dmVydGlnby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHZlcnRpZ28ubG8gYHRlc3QgLWYgJ2dzdHZlcnRpZ28uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmVydGlnby5jCi0KLWxpYmdzdGVmZmVjdHZfbGEtZ3N0cmV2LmxvOiBnc3RyZXYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RyZXYubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0cmV2LlRwbyAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHJldi5sbyBgdGVzdCAtZiAnZ3N0cmV2LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJldi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHJldi5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0cmV2LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJldi5jJyBvYmplY3Q9J2xpYmdzdGVmZmVjdHZfbGEtZ3N0cmV2LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0cmV2LmxvIGB0ZXN0IC1mICdnc3RyZXYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmV2LmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3RxdWFyay5sbzogZ3N0cXVhcmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RxdWFyay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RxdWFyay5UcG8gLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3RxdWFyay5sbyBgdGVzdCAtZiAnZ3N0cXVhcmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cXVhcmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RxdWFyay5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0cXVhcmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cXVhcmsuYycgb2JqZWN0PSdsaWJnc3RlZmZlY3R2X2xhLWdzdHF1YXJrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0cXVhcmsubG8gYHRlc3QgLWYgJ2dzdHF1YXJrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF1YXJrLmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3RvcC5sbzogZ3N0b3AuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RvcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RvcC5UcG8gLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3RvcC5sbyBgdGVzdCAtZiAnZ3N0b3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3AuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RvcC5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0b3AuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0b3AuYycgb2JqZWN0PSdsaWJnc3RlZmZlY3R2X2xhLWdzdG9wLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0b3AubG8gYHRlc3QgLWYgJ2dzdG9wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9wLmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3RyYWRpb2FjLmxvOiBnc3RyYWRpb2FjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGVmZmVjdHZfbGEtZ3N0cmFkaW9hYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RyYWRpb2FjLlRwbyAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHJhZGlvYWMubG8gYHRlc3QgLWYgJ2dzdHJhZGlvYWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmFkaW9hYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHJhZGlvYWMuVHBvICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHJhZGlvYWMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cmFkaW9hYy5jJyBvYmplY3Q9J2xpYmdzdGVmZmVjdHZfbGEtZ3N0cmFkaW9hYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHJhZGlvYWMubG8gYHRlc3QgLWYgJ2dzdHJhZGlvYWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmFkaW9hYy5jCi0KLWxpYmdzdGVmZmVjdHZfbGEtZ3N0c3RyZWFrLmxvOiBnc3RzdHJlYWsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVmZmVjdHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZWZmZWN0dl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZWZmZWN0dl9sYS1nc3RzdHJlYWsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0c3RyZWFrLlRwbyAtYyAtbyBsaWJnc3RlZmZlY3R2X2xhLWdzdHN0cmVhay5sbyBgdGVzdCAtZiAnZ3N0c3RyZWFrLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHN0cmVhay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RlZmZlY3R2X2xhLWdzdHN0cmVhay5UcG8gJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0c3RyZWFrLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHN0cmVhay5jJyBvYmplY3Q9J2xpYmdzdGVmZmVjdHZfbGEtZ3N0c3RyZWFrLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0c3RyZWFrLmxvIGB0ZXN0IC1mICdnc3RzdHJlYWsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3RyZWFrLmMKLQotbGliZ3N0ZWZmZWN0dl9sYS1nc3RyaXBwbGUubG86IGdzdHJpcHBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZWZmZWN0dl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlZmZlY3R2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RlZmZlY3R2X2xhLWdzdHJpcHBsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RyaXBwbGUuVHBvIC1jIC1vIGxpYmdzdGVmZmVjdHZfbGEtZ3N0cmlwcGxlLmxvIGB0ZXN0IC1mICdnc3RyaXBwbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmlwcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGVmZmVjdHZfbGEtZ3N0cmlwcGxlLlRwbyAkKERFUERJUikvbGliZ3N0ZWZmZWN0dl9sYS1nc3RyaXBwbGUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cmlwcGxlLmMnIG9iamVjdD0nbGliZ3N0ZWZmZWN0dl9sYS1nc3RyaXBwbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlZmZlY3R2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVmZmVjdHZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZWZmZWN0dl9sYS1nc3RyaXBwbGUubG8gYHRlc3QgLWYgJ2dzdHJpcHBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RyaXBwbGUuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RhZ2luZy5jIGIvZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkxYjYzYi4uMDAwMDAwMAotLS0gYS9nc3QvZWZmZWN0di9nc3RhZ2luZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUViAtIFJlYWx0aW1lIERpZ2l0YWwgVmlkZW8gRWZmZWN0b3IKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZVS1VDSEkgS2VudGFyb3UKLSAqCi0gKiBBZ2luZ1RWIC0gZmlsbS1hZ2luZyBlZmZlY3QuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYWdpbmd0dgotICoKLSAqIEFnaW5nVFYgYWdlcyBhIHZpZGVvIHN0cmVhbSBpbiByZWFsdGltZSwgY2hhbmdlcyB0aGUgY29sb3JzIGFuZCBhZGRzCi0gKiBzY3JhdGNoZXMgYW5kIGR1c3QuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyAhIGFnaW5ndHYgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgYWdpbmd0diBvbiBhIHRlc3Qgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJnc3RhZ2luZy5oIgotI2luY2x1ZGUgImdzdGVmZmVjdHYuaCIKLQotc3RhdGljIGNvbnN0IGdpbnQgZHhbOF0gPSB7IDEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEgfTsKLXN0YXRpYyBjb25zdCBnaW50IGR5WzhdID0geyAwLCAtMSwgLTEsIC0xLCAwLCAxLCAxLCAxIH07Ci0KLWVudW0KLXsKLSAgUFJPUF8wID0gMCwKLSAgUFJPUF9TQ1JBVENIX0xJTkVTLAotICBQUk9QX0NPTE9SX0FHSU5HLAotICBQUk9QX1BJVFMsCi0gIFBST1BfRFVTVFMKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9TQ1JBVENIX0xJTkVTIDcKLSNkZWZpbmUgREVGQVVMVF9DT0xPUl9BR0lORyBUUlVFCi0jZGVmaW5lIERFRkFVTFRfUElUUyBUUlVFCi0jZGVmaW5lIERFRkFVTFRfRFVTVFMgVFJVRQotCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBDQVBTX1NUUiBHU1RfVklERU9fQ0FQU19NQUtFICgieyBCR1J4LCBSR0J4IH0iKQotI2Vsc2UKLSNkZWZpbmUgQ0FQU19TVFIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgeFJHQiwgeEJHUiB9IikKLSNlbmRpZgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2FnaW5ndHZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfYWdpbmd0dl9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQ0FQU19TVFIpCi0gICAgKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0QWdpbmdUViwgZ3N0X2FnaW5ndHYsIEdTVF9UWVBFX1ZJREVPX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkCi1jb2xvcmFnaW5nIChndWludDMyICogc3JjLCBndWludDMyICogZGVzdCwgZ2ludCB2aWRlb19hcmVhLCBnaW50ICogYykKLXsKLSAgZ3VpbnQzMiBhLCBiOwotICBnaW50IGk7Ci0gIGdpbnQgY190bXAgPSAqYzsKLQotICBjX3RtcCAtPSAoZ2ludCkgKGZhc3RyYW5kICgpKSA+PiAyODsKLSAgaWYgKGNfdG1wIDwgMCkKLSAgICBjX3RtcCA9IDA7Ci0gIGlmIChjX3RtcCA+IDB4MTgpCi0gICAgY190bXAgPSAweDE4OwotCi0gIGZvciAoaSA9IDA7IGkgPCB2aWRlb19hcmVhOyBpKyspIHsKLSAgICBhID0gKnNyYysrOwotICAgIGIgPSAoYSAmIDB4ZmNmY2ZjKSA+PiAyOwotICAgICpkZXN0KysgPQotICAgICAgICBhIC0gYiArIChjX3RtcCB8IChjX3RtcCA8PCA4KSB8IChjX3RtcCA8PCAxNikpICsKLSAgICAgICAgKChmYXN0cmFuZCAoKSA+PiA4KSAmIDB4MTAxMDEwKTsKLSAgfQotICAqYyA9IGNfdG1wOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3JhdGNoaW5nIChzY3JhdGNoICogc2NyYXRjaGVzLCBnaW50IHNjcmF0Y2hfbGluZXMsIGd1aW50MzIgKiBkZXN0LCBnaW50IHdpZHRoLAotICAgIGdpbnQgaGVpZ2h0KQotewotICBnaW50IGksIHksIHkxLCB5MjsKLSAgZ3VpbnQzMiAqcCwgYSwgYjsKLSAgc2NyYXRjaCAqc2NyYXRjaDsKLQotICBmb3IgKGkgPSAwOyBpIDwgc2NyYXRjaF9saW5lczsgaSsrKSB7Ci0gICAgc2NyYXRjaCA9ICZzY3JhdGNoZXNbaV07Ci0KLSAgICBpZiAoc2NyYXRjaC0+bGlmZSkgewotICAgICAgc2NyYXRjaC0+eCA9IHNjcmF0Y2gtPnggKyBzY3JhdGNoLT5keDsKLQotICAgICAgaWYgKHNjcmF0Y2gtPnggPCAwIHx8IHNjcmF0Y2gtPnggPiB3aWR0aCAqIDI1NikgewotICAgICAgICBzY3JhdGNoLT5saWZlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBwID0gZGVzdCArIChzY3JhdGNoLT54ID4+IDgpOwotICAgICAgaWYgKHNjcmF0Y2gtPmluaXQpIHsKLSAgICAgICAgeTEgPSBzY3JhdGNoLT5pbml0OwotICAgICAgICBzY3JhdGNoLT5pbml0ID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHkxID0gMDsKLSAgICAgIH0KLSAgICAgIHNjcmF0Y2gtPmxpZmUtLTsKLSAgICAgIGlmIChzY3JhdGNoLT5saWZlKSB7Ci0gICAgICAgIHkyID0gaGVpZ2h0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgeTIgPSBmYXN0cmFuZCAoKSAlIGhlaWdodDsKLSAgICAgIH0KLSAgICAgIGZvciAoeSA9IHkxOyB5IDwgeTI7IHkrKykgewotICAgICAgICBhID0gKnAgJiAweGZlZmVmZjsKLSAgICAgICAgYSArPSAweDIwMjAyMDsKLSAgICAgICAgYiA9IGEgJiAweDEwMTAxMDA7Ci0gICAgICAgICpwID0gYSB8IChiIC0gKGIgPj4gOCkpOwotICAgICAgICBwICs9IHdpZHRoOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoKGZhc3RyYW5kICgpICYgMHhmMDAwMDAwMCkgPT0gMCkgewotICAgICAgICBzY3JhdGNoLT5saWZlID0gMiArIChmYXN0cmFuZCAoKSA+PiAyNyk7Ci0gICAgICAgIHNjcmF0Y2gtPnggPSBmYXN0cmFuZCAoKSAlICh3aWR0aCAqIDI1Nik7Ci0gICAgICAgIHNjcmF0Y2gtPmR4ID0gKChpbnQpIGZhc3RyYW5kICgpKSA+PiAyMzsKLSAgICAgICAgc2NyYXRjaC0+aW5pdCA9IChmYXN0cmFuZCAoKSAlIChoZWlnaHQgLSAxKSkgKyAxOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZHVzdHMgKGd1aW50MzIgKiBkZXN0LCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCwgZ2ludCAqIGR1c3RfaW50ZXJ2YWwsCi0gICAgZ2ludCBhcmVhX3NjYWxlKQotewotICBnaW50IGksIGo7Ci0gIGdpbnQgZG51bTsKLSAgZ2ludCBkLCBsZW47Ci0gIGd1aW50IHgsIHk7Ci0KLSAgaWYgKCpkdXN0X2ludGVydmFsID09IDApIHsKLSAgICBpZiAoKGZhc3RyYW5kICgpICYgMHhmMDAwMDAwMCkgPT0gMCkgewotICAgICAgKmR1c3RfaW50ZXJ2YWwgPSBmYXN0cmFuZCAoKSA+PiAyOTsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci0gIGRudW0gPSBhcmVhX3NjYWxlICogNCArIChmYXN0cmFuZCAoKSA+PiAyNyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGRudW07IGkrKykgewotICAgIHggPSBmYXN0cmFuZCAoKSAlIHdpZHRoOwotICAgIHkgPSBmYXN0cmFuZCAoKSAlIGhlaWdodDsKLSAgICBkID0gZmFzdHJhbmQgKCkgPj4gMjk7Ci0gICAgbGVuID0gZmFzdHJhbmQgKCkgJSBhcmVhX3NjYWxlICsgNTsKLSAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgIGRlc3RbeSAqIHdpZHRoICsgeF0gPSAweDEwMTAxMDsKLSAgICAgIHkgKz0gZHlbZF07Ci0gICAgICB4ICs9IGR4W2RdOwotCi0gICAgICBpZiAoeSA+PSBoZWlnaHQgfHwgeCA+PSB3aWR0aCkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGQgPSAoZCArIGZhc3RyYW5kICgpICUgMyAtIDEpICYgNzsKLSAgICB9Ci0gIH0KLSAgKmR1c3RfaW50ZXJ2YWwgPSAqZHVzdF9pbnRlcnZhbCAtIDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1waXRzIChndWludDMyICogZGVzdCwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsIGdpbnQgYXJlYV9zY2FsZSwKLSAgICBnaW50ICogcGl0c19pbnRlcnZhbCkKLXsKLSAgZ2ludCBpLCBqOwotICBnaW50IHBudW0sIHNpemUsIHBudW1zY2FsZTsKLSAgZ3VpbnQgeCwgeTsKLQotICBwbnVtc2NhbGUgPSBhcmVhX3NjYWxlICogMjsKLSAgaWYgKCpwaXRzX2ludGVydmFsKSB7Ci0gICAgcG51bSA9IHBudW1zY2FsZSArIChmYXN0cmFuZCAoKSAlIHBudW1zY2FsZSk7Ci0KLSAgICAqcGl0c19pbnRlcnZhbCA9ICpwaXRzX2ludGVydmFsIC0gMTsKLSAgfSBlbHNlIHsKLSAgICBwbnVtID0gZmFzdHJhbmQgKCkgJSBwbnVtc2NhbGU7Ci0KLSAgICBpZiAoKGZhc3RyYW5kICgpICYgMHhmODAwMDAwMCkgPT0gMCkgewotICAgICAgKnBpdHNfaW50ZXJ2YWwgPSAoZmFzdHJhbmQgKCkgPj4gMjgpICsgMjA7Ci0gICAgfQotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBwbnVtOyBpKyspIHsKLSAgICB4ID0gZmFzdHJhbmQgKCkgJSAod2lkdGggLSAxKTsKLSAgICB5ID0gZmFzdHJhbmQgKCkgJSAoaGVpZ2h0IC0gMSk7Ci0KLSAgICBzaXplID0gZmFzdHJhbmQgKCkgPj4gMjg7Ci0KLSAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICB4ID0geCArIGZhc3RyYW5kICgpICUgMyAtIDE7Ci0gICAgICB5ID0geSArIGZhc3RyYW5kICgpICUgMyAtIDE7Ci0KLSAgICAgIGlmICh5ID49IGhlaWdodCB8fCB4ID49IHdpZHRoKQotICAgICAgICBicmVhazsKLQotICAgICAgZGVzdFt5ICogd2lkdGggKyB4XSA9IDB4YzBjMGMwOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FnaW5ndHZfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEFnaW5nVFYgKmFnaW5ndHYgPSBHU1RfQUdJTkdUViAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGFnaW5ndHYpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU0NSQVRDSF9MSU5FUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBhZ2luZ3R2LT5zY3JhdGNoX2xpbmVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT0xPUl9BR0lORzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBhZ2luZ3R2LT5jb2xvcl9hZ2luZyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUElUUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBhZ2luZ3R2LT5waXRzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EVVNUUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBhZ2luZ3R2LT5kdXN0cyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYWdpbmd0dik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWdpbmd0dl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0QWdpbmdUViAqYWdpbmd0diA9IEdTVF9BR0lOR1RWIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TQ1JBVENIX0xJTkVTOgotICAgICAgYWdpbmd0di0+c2NyYXRjaF9saW5lcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT0xPUl9BR0lORzoKLSAgICAgIGFnaW5ndHYtPmNvbG9yX2FnaW5nID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BJVFM6Ci0gICAgICBhZ2luZ3R2LT5waXRzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RVU1RTOgotICAgICAgYWdpbmd0di0+ZHVzdHMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hZ2luZ3R2X3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdEFnaW5nVFYgKmFnaW5ndHYgPSBHU1RfQUdJTkdUViAodHJhbnMpOwotCi0gIGFnaW5ndHYtPmNvbG9yYWdpbmdfc3RhdGUgPSAweDE4OwotICBhZ2luZ3R2LT5kdXN0X2ludGVydmFsID0gMDsKLSAgYWdpbmd0di0+cGl0c19pbnRlcnZhbCA9IDA7Ci0KLSAgbWVtc2V0IChhZ2luZ3R2LT5zY3JhdGNoZXMsIDAsIHNpemVvZiAoYWdpbmd0di0+c2NyYXRjaGVzKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfYWdpbmd0dl90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0QWdpbmdUViAqYWdpbmd0diA9IEdTVF9BR0lOR1RWIChmaWx0ZXIpOwotICBnaW50IGFyZWFfc2NhbGU7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotICBnaW50IHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwgdmlkZW9fc2l6ZTsKLSAgZ3VpbnQzMiAqc3JjLCAqZGVzdDsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5fZnJhbWUtPmJ1ZmZlcik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpLT5zZWdtZW50LAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGFnaW5ndHYsICJzeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtX3RpbWUpKQotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGFnaW5ndHYpLCBzdHJlYW1fdGltZSk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotICBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0gIHZpZGVvX3NpemUgPSBzdHJpZGUgKiBoZWlnaHQgLyA0OwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICBhcmVhX3NjYWxlID0gd2lkdGggKiBoZWlnaHQgLyA2NCAvIDQ4MDsKLSAgaWYgKGFyZWFfc2NhbGUgPD0gMCkKLSAgICBhcmVhX3NjYWxlID0gMTsKLQotICBpZiAoYWdpbmd0di0+Y29sb3JfYWdpbmcpCi0gICAgY29sb3JhZ2luZyAoc3JjLCBkZXN0LCB2aWRlb19zaXplLCAmYWdpbmd0di0+Y29sb3JhZ2luZ19zdGF0ZSk7Ci0gIGVsc2UKLSAgICBtZW1jcHkgKGRlc3QsIHNyYywgc3RyaWRlICogaGVpZ2h0KTsKLQotICBzY3JhdGNoaW5nIChhZ2luZ3R2LT5zY3JhdGNoZXMsIGFnaW5ndHYtPnNjcmF0Y2hfbGluZXMsIGRlc3QsIHdpZHRoLCBoZWlnaHQpOwotICBpZiAoYWdpbmd0di0+cGl0cykKLSAgICBwaXRzIChkZXN0LCB3aWR0aCwgaGVpZ2h0LCBhcmVhX3NjYWxlLCAmYWdpbmd0di0+cGl0c19pbnRlcnZhbCk7Ci0gIGlmIChhcmVhX3NjYWxlID4gMSAmJiBhZ2luZ3R2LT5kdXN0cykKLSAgICBkdXN0cyAoZGVzdCwgd2lkdGgsIGhlaWdodCwgJmFnaW5ndHYtPmR1c3RfaW50ZXJ2YWwsIGFyZWFfc2NhbGUpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hZ2luZ3R2X2NsYXNzX2luaXQgKEdzdEFnaW5nVFZDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9hZ2luZ3R2X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2FnaW5ndHZfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0NSQVRDSF9MSU5FUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgic2NyYXRjaC1saW5lcyIsICJTY3JhdGNoIExpbmVzIiwKLSAgICAgICAgICAiTnVtYmVyIG9mIHNjcmF0Y2ggbGluZXMiLCAwLCBTQ1JBVENIX01BWCwgREVGQVVMVF9TQ1JBVENIX0xJTkVTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTE9SX0FHSU5HLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjb2xvci1hZ2luZyIsICJDb2xvciBBZ2luZyIsCi0gICAgICAgICAgIkNvbG9yIEFnaW5nIiwgREVGQVVMVF9DT0xPUl9BR0lORywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QSVRTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJwaXRzIiwgIlBpdHMiLAotICAgICAgICAgICJQaXRzIiwgREVGQVVMVF9QSVRTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RVU1RTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJkdXN0cyIsICJEdXN0cyIsCi0gICAgICAgICAgIkR1c3RzIiwgREVGQVVMVF9EVVNUUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkFnaW5nVFYgZWZmZWN0IiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L1ZpZGVvIiwKLSAgICAgICJBZ2luZ1RWIGFkZHMgYWdlIHRvIHZpZGVvIGlucHV0IHVzaW5nIHNjcmF0Y2hlcyBhbmQgZHVzdCIsCi0gICAgICAiU2FtIExhbnRpbmdhIDxzbG91a2VuQGRldm9sdXRpb24uY29tPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9hZ2luZ3R2X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfYWdpbmd0dl9zcmNfdGVtcGxhdGUpOwotCi0gIHRyYW5zX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWdpbmd0dl9zdGFydCk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWdpbmd0dl90cmFuc2Zvcm1fZnJhbWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FnaW5ndHZfaW5pdCAoR3N0QWdpbmdUViAqIGFnaW5ndHYpCi17Ci0gIGFnaW5ndHYtPnNjcmF0Y2hfbGluZXMgPSBERUZBVUxUX1NDUkFUQ0hfTElORVM7Ci0gIGFnaW5ndHYtPmNvbG9yX2FnaW5nID0gREVGQVVMVF9DT0xPUl9BR0lORzsKLSAgYWdpbmd0di0+cGl0cyA9IERFRkFVTFRfUElUUzsKLSAgYWdpbmd0di0+ZHVzdHMgPSBERUZBVUxUX0RVU1RTOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuaCBiL2dzdC9lZmZlY3R2L2dzdGFnaW5nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDY2ZDEuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0YWdpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUViAtIFJlYWx0aW1lIERpZ2l0YWwgVmlkZW8gRWZmZWN0b3IKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZVS1VDSEkgS2VudGFyb3UKLSAqCi0gKiBBZ2luZ1RWIC0gZmlsbS1hZ2luZyBlZmZlY3QuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BR0lOR19IX18KLSNkZWZpbmUgX19HU1RfQUdJTkdfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FHSU5HVFYgXAotICAoZ3N0X2FnaW5ndHZfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0FHSU5HVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9BR0lOR1RWLEdzdEFnaW5nVFYpKQotI2RlZmluZSBHU1RfQUdJTkdUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9BR0lOR1RWLEdzdEFnaW5nVFZDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BR0lOR1RWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQUdJTkdUVikpCi0jZGVmaW5lIEdTVF9JU19BR0lOR1RWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FHSU5HVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfc2NyYXRjaAotewotICBnaW50IGxpZmU7Ci0gIGdpbnQgeDsKLSAgZ2ludCBkeDsKLSAgZ2ludCBpbml0OwotfSBzY3JhdGNoOwotI2RlZmluZSBTQ1JBVENIX01BWCAyMAotCi10eXBlZGVmIHN0cnVjdCBfR3N0QWdpbmdUViBHc3RBZ2luZ1RWOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFnaW5nVFZDbGFzcyBHc3RBZ2luZ1RWQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QWdpbmdUVgotewotICBHc3RWaWRlb0ZpbHRlciB2aWRlb2ZpbHRlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBnYm9vbGVhbiBjb2xvcl9hZ2luZzsKLSAgZ2Jvb2xlYW4gcGl0czsKLSAgZ2Jvb2xlYW4gZHVzdHM7Ci0KLSAgZ2ludCBjb2xvcmFnaW5nX3N0YXRlOwotCi0gIHNjcmF0Y2ggc2NyYXRjaGVzW1NDUkFUQ0hfTUFYXTsKLSAgZ2ludCBzY3JhdGNoX2xpbmVzOwotCi0gIGdpbnQgZHVzdF9pbnRlcnZhbDsKLSAgZ2ludCBwaXRzX2ludGVydmFsOwotCi19OwotCi1zdHJ1Y3QgX0dzdEFnaW5nVFZDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9hZ2luZ3R2X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FHSU5HX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RkaWNlLmMgYi9nc3QvZWZmZWN0di9nc3RkaWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNmUxMTEuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0ZGljZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGRpY2UuYzogYSAnZGljaW5nJyBlZmZlY3QKLSAqICBjb3B5cmlnaHQgKGMpIDIwMDEgU2FtIE1lcnRlbnMuICBUaGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZgotICogIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBJIHN1cHBvc2UgdGhpcyBsb29rcyBzaW1pbGFyIHRvIFB1enpsZVRWLCBidXQgaXQncyBub3QuIFRoZSBzY3JlZW4gaXMKLSAqIGRpdmlkZWQgaW50byBzbWFsbCBzcXVhcmVzLCBlYWNoIG9mIHdoaWNoIGlzIHJvdGF0ZWQgZWl0aGVyIDAsIDkwLCAxODAgb3IKLSAqIDI3MCBkZWdyZWVzLiAgVGhlIGFtb3VudCBvZiByb3RhdGlvbiBmb3IgZWFjaCBzcXVhcmUgaXMgY2hvc2VuIGF0IHJhbmRvbS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1kaWNldHYKLSAqCi0gKiBEaWNlVFYgJ2RpY2VzJyB0aGUgc2NyZWVuIHVwIGludG8gbWFueSBzbWFsbCBzcXVhcmVzLCBlYWNoIGRlZmF1bHRpbmcKLSAqIHRvIGEgc2l6ZSBvZiAxNiBwaXhlbHMgYnkgMTYgcGl4ZWxzLi4gRWFjaCBzcXVhcmUgaXMgcm90YXRlZCByYW5kb21seQotICogaW4gb25lIG9mIGZvdXIgZGlyZWN0aW9uczogdXAgKG5vIGNoYW5nZSksIGRvd24gKDE4MCBkZWdyZWVzLCBvcgotICogdXBzaWRlIGRvd24pLCByaWdodCAoOTAgZGVncmVlcyBjbG9ja3dpc2UpLCBvciBsZWZ0ICg5MCBkZWdyZWVzCi0gKiBjb3VudGVyY2xvY2t3aXNlKS4gVGhlIGRpcmVjdGlvbiBvZiBlYWNoIHNxdWFyZSBub3JtYWxseSByZW1haW5zCi0gKiBjb25zaXN0ZW50IGJldHdlZW4gZWFjaCBmcmFtZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgZGljZXR2ICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgZWZmZWN0IG9mIGRpY2V0diBvbiBhIHRlc3Qgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGRpY2UuaCIKLSNpbmNsdWRlICJnc3RlZmZlY3R2LmgiCi0KLSNkZWZpbmUgREVGQVVMVF9DVUJFX0JJVFMgICA0Ci0jZGVmaW5lIE1BWF9DVUJFX0JJVFMgICAgICAgNQotI2RlZmluZSBNSU5fQ1VCRV9CSVRTICAgICAgIDAKLQotdHlwZWRlZiBlbnVtIF9kaWNlX2RpcgotewotICBESUNFX1VQID0gMCwKLSAgRElDRV9SSUdIVCA9IDEsCi0gIERJQ0VfRE9XTiA9IDIsCi0gIERJQ0VfTEVGVCA9IDMKLX0gRGljZURpcjsKLQotI2RlZmluZSBnc3RfZGljZXR2X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdERpY2VUViwgZ3N0X2RpY2V0diwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotc3RhdGljIHZvaWQgZ3N0X2RpY2V0dl9jcmVhdGVfbWFwIChHc3REaWNlVFYgKiBmaWx0ZXIsIEdzdFZpZGVvSW5mbyAqIGluZm8pOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2RpY2V0dl9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiB9IikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9kaWNldHZfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IFJHQngsIHhSR0IsIEJHUngsIHhCR1IgfSIpKQotICAgICk7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0NVQkVfQklUUwotfTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGljZXR2X3NldF9pbmZvIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsIEdzdENhcHMgKiBpbmNhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dGNhcHMsIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKQotewotICBHc3REaWNlVFYgKmZpbHRlciA9IEdTVF9ESUNFVFYgKHZmaWx0ZXIpOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5kaWNlbWFwKTsKLSAgZmlsdGVyLT5kaWNlbWFwID0KLSAgICAgIChndWludDggKikgZ19tYWxsb2MgKEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKSAqCi0gICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoaW5faW5mbykpOwotICBnc3RfZGljZXR2X2NyZWF0ZV9tYXAgKGZpbHRlciwgaW5faW5mbyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZGljZXR2X3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0RGljZVRWICpmaWx0ZXIgPSBHU1RfRElDRVRWICh2ZmlsdGVyKTsKLSAgZ3VpbnQzMiAqc3JjLCAqZGVzdDsKLSAgZ2ludCBpLCBtYXBfeCwgbWFwX3ksIG1hcF9pLCBiYXNlLCBkeCwgZHksIGRpOwotICBnaW50IHZpZGVvX3N0cmlkZSwgZ19jdWJlX2JpdHMsIGdfY3ViZV9zaXplOwotICBnaW50IGdfbWFwX2hlaWdodCwgZ19tYXBfd2lkdGg7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotICBjb25zdCBndWludDggKmRpY2VtYXA7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluX2ZyYW1lLT5idWZmZXIpOwotICBzdHJlYW1fdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJkdTVF9CQVNFX1RSQU5TRk9STSAodmZpbHRlciktPnNlZ21lbnQsCi0gICAgICBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAic3luYyB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbV90aW1lKSkKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChmaWx0ZXIpLCBzdHJlYW1fdGltZSk7Ci0KLSAgc3JjID0gKGd1aW50MzIgKikgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IChndWludDMyICopIEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotICB2aWRlb19zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBnX2N1YmVfYml0cyA9IGZpbHRlci0+Z19jdWJlX2JpdHM7Ci0gIGdfY3ViZV9zaXplID0gZmlsdGVyLT5nX2N1YmVfc2l6ZTsKLSAgZ19tYXBfaGVpZ2h0ID0gZmlsdGVyLT5nX21hcF9oZWlnaHQ7Ci0gIGdfbWFwX3dpZHRoID0gZmlsdGVyLT5nX21hcF93aWR0aDsKLQotICBkaWNlbWFwID0gZmlsdGVyLT5kaWNlbWFwOwotICB2aWRlb19zdHJpZGUgLz0gNDsKLQotICBtYXBfaSA9IDA7Ci0gIGZvciAobWFwX3kgPSAwOyBtYXBfeSA8IGdfbWFwX2hlaWdodDsgbWFwX3krKykgewotICAgIGZvciAobWFwX3ggPSAwOyBtYXBfeCA8IGdfbWFwX3dpZHRoOyBtYXBfeCsrKSB7Ci0gICAgICBiYXNlID0gKG1hcF95IDw8IGdfY3ViZV9iaXRzKSAqIHZpZGVvX3N0cmlkZSArIChtYXBfeCA8PCBnX2N1YmVfYml0cyk7Ci0KLSAgICAgIHN3aXRjaCAoZGljZW1hcFttYXBfaV0pIHsKLSAgICAgICAgY2FzZSBESUNFX1VQOgotICAgICAgICAgIGZvciAoZHkgPSAwOyBkeSA8IGdfY3ViZV9zaXplOyBkeSsrKSB7Ci0gICAgICAgICAgICBpID0gYmFzZSArIGR5ICogdmlkZW9fc3RyaWRlOwotICAgICAgICAgICAgZm9yIChkeCA9IDA7IGR4IDwgZ19jdWJlX3NpemU7IGR4KyspIHsKLSAgICAgICAgICAgICAgZGVzdFtpXSA9IHNyY1tpXTsKLSAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBESUNFX0xFRlQ6Ci0gICAgICAgICAgZm9yIChkeSA9IDA7IGR5IDwgZ19jdWJlX3NpemU7IGR5KyspIHsKLSAgICAgICAgICAgIGkgPSBiYXNlICsgZHkgKiB2aWRlb19zdHJpZGU7Ci0KLSAgICAgICAgICAgIGZvciAoZHggPSAwOyBkeCA8IGdfY3ViZV9zaXplOyBkeCsrKSB7Ci0gICAgICAgICAgICAgIGRpID0gYmFzZSArIChkeCAqIHZpZGVvX3N0cmlkZSkgKyAoZ19jdWJlX3NpemUgLSBkeSAtIDEpOwotICAgICAgICAgICAgICBkZXN0W2RpXSA9IHNyY1tpXTsKLSAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBESUNFX0RPV046Ci0gICAgICAgICAgZm9yIChkeSA9IDA7IGR5IDwgZ19jdWJlX3NpemU7IGR5KyspIHsKLSAgICAgICAgICAgIGRpID0gYmFzZSArIGR5ICogdmlkZW9fc3RyaWRlOwotICAgICAgICAgICAgaSA9IGJhc2UgKyAoZ19jdWJlX3NpemUgLSBkeSAtIDEpICogdmlkZW9fc3RyaWRlICsgZ19jdWJlX3NpemU7Ci0gICAgICAgICAgICBmb3IgKGR4ID0gMDsgZHggPCBnX2N1YmVfc2l6ZTsgZHgrKykgewotICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgIGRlc3RbZGldID0gc3JjW2ldOwotICAgICAgICAgICAgICBkaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBESUNFX1JJR0hUOgotICAgICAgICAgIGZvciAoZHkgPSAwOyBkeSA8IGdfY3ViZV9zaXplOyBkeSsrKSB7Ci0gICAgICAgICAgICBpID0gYmFzZSArIChkeSAqIHZpZGVvX3N0cmlkZSk7Ci0gICAgICAgICAgICBmb3IgKGR4ID0gMDsgZHggPCBnX2N1YmVfc2l6ZTsgZHgrKykgewotICAgICAgICAgICAgICBkaSA9IGJhc2UgKyBkeSArIChnX2N1YmVfc2l6ZSAtIGR4IC0gMSkgKiB2aWRlb19zdHJpZGU7Ci0gICAgICAgICAgICAgIGRlc3RbZGldID0gc3JjW2ldOwotICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgbWFwX2krKzsKLSAgICB9Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpY2V0dl9jcmVhdGVfbWFwIChHc3REaWNlVFYgKiBmaWx0ZXIsIEdzdFZpZGVvSW5mbyAqIGluZm8pCi17Ci0gIGdpbnQgeCwgeSwgaTsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pOwotCi0gIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgIHJldHVybjsKLQotICBmaWx0ZXItPmdfbWFwX2hlaWdodCA9IGhlaWdodCA+PiBmaWx0ZXItPmdfY3ViZV9iaXRzOwotICBmaWx0ZXItPmdfbWFwX3dpZHRoID0gd2lkdGggPj4gZmlsdGVyLT5nX2N1YmVfYml0czsKLSAgZmlsdGVyLT5nX2N1YmVfc2l6ZSA9IDEgPDwgZmlsdGVyLT5nX2N1YmVfYml0czsKLQotICBpID0gMDsKLQotICBmb3IgKHkgPSAwOyB5IDwgZmlsdGVyLT5nX21hcF9oZWlnaHQ7IHkrKykgewotICAgIGZvciAoeCA9IDA7IHggPCBmaWx0ZXItPmdfbWFwX3dpZHRoOyB4KyspIHsKLSAgICAgIC8vIGRpY2VtYXBbaV0gPSAoKGkgKyB5KSAmIDB4Myk7IC8qIFVwLCBEb3duLCBMZWZ0IG9yIFJpZ2h0ICovCi0gICAgICBmaWx0ZXItPmRpY2VtYXBbaV0gPSAoZmFzdHJhbmQgKCkgPj4gMjQpICYgMHgwMzsKLSAgICAgIGkrKzsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaWNldHZfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERpY2VUViAqZmlsdGVyID0gR1NUX0RJQ0VUViAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ1VCRV9CSVRTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICAgICAgZmlsdGVyLT5nX2N1YmVfYml0cyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ3N0X2RpY2V0dl9jcmVhdGVfbWFwIChmaWx0ZXIsICZHU1RfVklERU9fRklMVEVSIChmaWx0ZXIpLT5pbl9pbmZvKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpY2V0dl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0RGljZVRWICpmaWx0ZXIgPSBHU1RfRElDRVRWIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DVUJFX0JJVFM6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPmdfY3ViZV9iaXRzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaWNldHZfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdERpY2VUViAqZmlsdGVyID0gR1NUX0RJQ0VUViAob2JqZWN0KTsKLQotICBnX2ZyZWUgKGZpbHRlci0+ZGljZW1hcCk7Ci0gIGZpbHRlci0+ZGljZW1hcCA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpY2V0dl9jbGFzc19pbml0IChHc3REaWNlVFZDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2RpY2V0dl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9kaWNldHZfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9kaWNldHZfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DVUJFX0JJVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgic3F1YXJlLWJpdHMiLCAiU3F1YXJlIEJpdHMiLCAiVGhlIHNpemUgb2YgdGhlIFNxdWFyZXMiLAotICAgICAgICAgIE1JTl9DVUJFX0JJVFMsIE1BWF9DVUJFX0JJVFMsIERFRkFVTFRfQ1VCRV9CSVRTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiRGljZVRWIGVmZmVjdCIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAiJ0RpY2VzJyB0aGUgc2NyZWVuIHVwIGludG8gbWFueSBzbWFsbCBzcXVhcmVzIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuYmU+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2RpY2V0dl9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2RpY2V0dl9zcmNfdGVtcGxhdGUpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kaWNldHZfc2V0X2luZm8pOwotICB2ZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kaWNldHZfdHJhbnNmb3JtX2ZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaWNldHZfaW5pdCAoR3N0RGljZVRWICogZmlsdGVyKQotewotICBmaWx0ZXItPmRpY2VtYXAgPSBOVUxMOwotICBmaWx0ZXItPmdfY3ViZV9iaXRzID0gREVGQVVMVF9DVUJFX0JJVFM7Ci0gIGZpbHRlci0+Z19jdWJlX3NpemUgPSAwOwotICBmaWx0ZXItPmdfbWFwX2hlaWdodCA9IDA7Ci0gIGZpbHRlci0+Z19tYXBfd2lkdGggPSAwOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0ZGljZS5oIGIvZ3N0L2VmZmVjdHYvZ3N0ZGljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE0Yzk3Li4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdGRpY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIGRpY2UuYzogYSAnZGljaW5nJyBlZmZlY3QKLSAqICBjb3B5cmlnaHQgKGMpIDIwMDEgU2FtIE1lcnRlbnMuICBUaGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZgotICogIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZS4KLSAqCi0gKiBJIHN1cHBvc2UgdGhpcyBsb29rcyBzaW1pbGFyIHRvIFB1enpsZVRWLCBidXQgaXQncyBub3QuIFRoZSBzY3JlZW4gaXMKLSAqIGRpdmlkZWQgaW50byBzbWFsbCBzcXVhcmVzLCBlYWNoIG9mIHdoaWNoIGlzIHJvdGF0ZWQgZWl0aGVyIDAsIDkwLCAxODAgb3IKLSAqIDI3MCBkZWdyZWVzLiAgVGhlIGFtb3VudCBvZiByb3RhdGlvbiBmb3IgZWFjaCBzcXVhcmUgaXMgY2hvc2VuIGF0IHJhbmRvbS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0RJQ0VfSF9fCi0jZGVmaW5lIF9fR1NUX0RJQ0VfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0RJQ0VUViBcCi0gIChnc3RfZGljZXR2X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9ESUNFVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9ESUNFVFYsR3N0RGljZVRWKSkKLSNkZWZpbmUgR1NUX0RJQ0VUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9ESUNFVFYsR3N0RGljZVRWQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRElDRVRWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRElDRVRWKSkKLSNkZWZpbmUgR1NUX0lTX0RJQ0VUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9ESUNFVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RGljZVRWIEdzdERpY2VUVjsKLXR5cGVkZWYgc3RydWN0IF9Hc3REaWNlVFZDbGFzcyBHc3REaWNlVFZDbGFzczsKLQotc3RydWN0IF9Hc3REaWNlVFYKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ3VpbnQ4ICpkaWNlbWFwOwotCi0gIGdpbnQgZ19jdWJlX2JpdHM7Ci0gIGdpbnQgZ19jdWJlX3NpemU7Ci0gIGdpbnQgZ19tYXBfaGVpZ2h0OwotICBnaW50IGdfbWFwX3dpZHRoOwotfTsKLQotc3RydWN0IF9Hc3REaWNlVFZDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9kaWNldHZfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRElDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lZmZlY3R2L2dzdGVkZ2UuYyBiL2dzdC9lZmZlY3R2L2dzdGVkZ2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdmZWI5OS4uMDAwMDAwMAotLS0gYS9nc3QvZWZmZWN0di9nc3RlZGdlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUVjoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZVS1VDSEkgS2VudGFyb3UKLSAqCi0gKiBFZGdlVFYgLSBkZXRlY3RzIGVkZ2UgYW5kIGRpc3BsYXkgaXQgaW4gZ29vZCBvbGQgY29tcHV0ZXIgd2F5Ci0gKgotICogRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1lZGdldHYKLSAqCi0gKiBFZGdlVFYgZGV0ZWN0cyBlZGdlcyBhbmQgZGlzcGxheSBpdCBpbiBnb29kIG9sZCBsb3cgcmVzb2x1dGlvbgotICogY29tcHV0ZXIgd2F5LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgISBlZGdldHYgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgZWRnZXR2IG9uIGEgdGVzdCBzdHJlYW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0ZWRnZS5oIgotCi0jZGVmaW5lIGdzdF9lZGdldHZfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0RWRnZVRWLCBnc3RfZWRnZXR2LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBDQVBTX1NUUiBHU1RfVklERU9fQ0FQU19NQUtFICgieyAgQkdSeCwgUkdCeCB9IikKLSNlbHNlCi0jZGVmaW5lIENBUFNfU1RSIEdTVF9WSURFT19DQVBTX01BS0UgKCJ7ICB4QkdSLCB4UkdCIH0iKQotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfZWRnZXR2X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChDQVBTX1NUUikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2VkZ2V0dl9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQ0FQU19TVFIpCi0gICAgKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfZWRnZXR2X3NldF9pbmZvIChHc3RWaWRlb0ZpbHRlciAqIGZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdEVkZ2VUViAqZWRnZXR2ID0gR1NUX0VER0VUViAoZmlsdGVyKTsKLSAgZ3VpbnQgbWFwX3NpemU7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLQotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKTsKLQotICBlZGdldHYtPm1hcF93aWR0aCA9IHdpZHRoIC8gNDsKLSAgZWRnZXR2LT5tYXBfaGVpZ2h0ID0gaGVpZ2h0IC8gNDsKLSAgZWRnZXR2LT52aWRlb193aWR0aF9tYXJnaW4gPSB3aWR0aCAlIDQ7Ci0KLSAgbWFwX3NpemUgPSBlZGdldHYtPm1hcF93aWR0aCAqIGVkZ2V0di0+bWFwX2hlaWdodCAqIHNpemVvZiAoZ3VpbnQzMikgKiAyOwotCi0gIGdfZnJlZSAoZWRnZXR2LT5tYXApOwotICBlZGdldHYtPm1hcCA9IChndWludDMyICopIGdfbWFsbG9jMCAobWFwX3NpemUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2VkZ2V0dl90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLAotICAgIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIEdzdEVkZ2VUViAqZmlsdGVyID0gR1NUX0VER0VUViAodmZpbHRlcik7Ci0gIGdpbnQgeCwgeSwgciwgZywgYjsKLSAgZ3VpbnQzMiAqc3JjLCAqZGVzdDsKLSAgZ3VpbnQzMiBwLCBxOwotICBndWludDMyIHYwLCB2MSwgdjIsIHYzOwotICBnaW50IHdpZHRoLCBtYXBfaGVpZ2h0LCBtYXBfd2lkdGg7Ci0gIGdpbnQgdmlkZW9fd2lkdGhfbWFyZ2luOwotICBndWludDMyICptYXA7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgbWFwID0gZmlsdGVyLT5tYXA7Ci0gIG1hcF9oZWlnaHQgPSBmaWx0ZXItPm1hcF9oZWlnaHQ7Ci0gIG1hcF93aWR0aCA9IGZpbHRlci0+bWFwX3dpZHRoOwotICB2aWRlb193aWR0aF9tYXJnaW4gPSBmaWx0ZXItPnZpZGVvX3dpZHRoX21hcmdpbjsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLQotICBzcmMgKz0gd2lkdGggKiA0ICsgNDsKLSAgZGVzdCArPSB3aWR0aCAqIDQgKyA0OwotCi0gIGZvciAoeSA9IDE7IHkgPCBtYXBfaGVpZ2h0IC0gMTsgeSsrKSB7Ci0gICAgZm9yICh4ID0gMTsgeCA8IG1hcF93aWR0aCAtIDE7IHgrKykgewotICAgICAgcCA9ICpzcmM7Ci0gICAgICBxID0gKihzcmMgLSA0KTsKLQotICAgICAgLyogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBpeGVsIGFuZCBsZWZ0IG5laWdoYm9yLiAqLwotICAgICAgciA9ICgocCAmIDB4ZmYwMDAwKSAtIChxICYgMHhmZjAwMDApKSA+PiAxNjsKLSAgICAgIGcgPSAoKHAgJiAweGZmMDApIC0gKHEgJiAweGZmMDApKSA+PiA4OwotICAgICAgYiA9IChwICYgMHhmZikgLSAocSAmIDB4ZmYpOwotICAgICAgciAqPSByOwotICAgICAgZyAqPSBnOwotICAgICAgYiAqPSBiOwotICAgICAgciA9IHIgPj4gNTsgICAgICAgICAgICAgICAvKiBUbyBsYWNrIHRoZSBsb3dlciBiaXQgZm9yIHNhdHVyYXRlZCBhZGRpdGlvbiwgICovCi0gICAgICBnID0gZyA+PiA1OyAgICAgICAgICAgICAgIC8qIGRldmlkZSB0aGUgdmFsdWUgd2l0aCAzMiwgaW5zdGVhZCBvZiAxNi4gSXQgaXMgKi8KLSAgICAgIGIgPSBiID4+IDQ7ICAgICAgICAgICAgICAgLyogc2FtZSBhcyBgdjIgJj0gMHhmZWZlZmYnICovCi0gICAgICBpZiAociA+IDEyNykKLSAgICAgICAgciA9IDEyNzsKLSAgICAgIGlmIChnID4gMTI3KQotICAgICAgICBnID0gMTI3OwotICAgICAgaWYgKGIgPiAyNTUpCi0gICAgICAgIGIgPSAyNTU7Ci0gICAgICB2MiA9IChyIDw8IDE3KSB8IChnIDw8IDkpIHwgYjsKLQotICAgICAgLyogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBpeGVsIGFuZCB1cHBlciBuZWlnaGJvci4gKi8KLSAgICAgIHEgPSAqKHNyYyAtIHdpZHRoICogNCk7Ci0gICAgICByID0gKChwICYgMHhmZjAwMDApIC0gKHEgJiAweGZmMDAwMCkpID4+IDE2OwotICAgICAgZyA9ICgocCAmIDB4ZmYwMCkgLSAocSAmIDB4ZmYwMCkpID4+IDg7Ci0gICAgICBiID0gKHAgJiAweGZmKSAtIChxICYgMHhmZik7Ci0gICAgICByICo9IHI7Ci0gICAgICBnICo9IGc7Ci0gICAgICBiICo9IGI7Ci0gICAgICByID0gciA+PiA1OwotICAgICAgZyA9IGcgPj4gNTsKLSAgICAgIGIgPSBiID4+IDQ7Ci0gICAgICBpZiAociA+IDEyNykKLSAgICAgICAgciA9IDEyNzsKLSAgICAgIGlmIChnID4gMTI3KQotICAgICAgICBnID0gMTI3OwotICAgICAgaWYgKGIgPiAyNTUpCi0gICAgICAgIGIgPSAyNTU7Ci0gICAgICB2MyA9IChyIDw8IDE3KSB8IChnIDw8IDkpIHwgYjsKLQotICAgICAgdjAgPSBtYXBbKHkgLSAxKSAqIG1hcF93aWR0aCAqIDIgKyB4ICogMl07Ci0gICAgICB2MSA9IG1hcFt5ICogbWFwX3dpZHRoICogMiArICh4IC0gMSkgKiAyICsgMV07Ci0gICAgICBtYXBbeSAqIG1hcF93aWR0aCAqIDIgKyB4ICogMl0gPSB2MjsKLSAgICAgIG1hcFt5ICogbWFwX3dpZHRoICogMiArIHggKiAyICsgMV0gPSB2MzsKLSAgICAgIHIgPSB2MCArIHYxOwotICAgICAgZyA9IHIgJiAweDAxMDEwMTAwOwotICAgICAgZGVzdFswXSA9IHIgfCAoZyAtIChnID4+IDgpKTsKLSAgICAgIHIgPSB2MCArIHYzOwotICAgICAgZyA9IHIgJiAweDAxMDEwMTAwOwotICAgICAgZGVzdFsxXSA9IHIgfCAoZyAtIChnID4+IDgpKTsKLSAgICAgIGRlc3RbMl0gPSB2MzsKLSAgICAgIGRlc3RbM10gPSB2MzsKLSAgICAgIHIgPSB2MiArIHYxOwotICAgICAgZyA9IHIgJiAweDAxMDEwMTAwOwotICAgICAgZGVzdFt3aWR0aF0gPSByIHwgKGcgLSAoZyA+PiA4KSk7Ci0gICAgICByID0gdjIgKyB2MzsKLSAgICAgIGcgPSByICYgMHgwMTAxMDEwMDsKLSAgICAgIGRlc3Rbd2lkdGggKyAxXSA9IHIgfCAoZyAtIChnID4+IDgpKTsKLSAgICAgIGRlc3Rbd2lkdGggKyAyXSA9IHYzOwotICAgICAgZGVzdFt3aWR0aCArIDNdID0gdjM7Ci0gICAgICBkZXN0W3dpZHRoICogMl0gPSB2MjsKLSAgICAgIGRlc3Rbd2lkdGggKiAyICsgMV0gPSB2MjsKLSAgICAgIGRlc3Rbd2lkdGggKiAyICsgMl0gPSAwOwotICAgICAgZGVzdFt3aWR0aCAqIDIgKyAzXSA9IDA7Ci0gICAgICBkZXN0W3dpZHRoICogM10gPSB2MjsKLSAgICAgIGRlc3Rbd2lkdGggKiAzICsgMV0gPSB2MjsKLSAgICAgIGRlc3Rbd2lkdGggKiAzICsgMl0gPSAwOwotICAgICAgZGVzdFt3aWR0aCAqIDMgKyAzXSA9IDA7Ci0KLSAgICAgIHNyYyArPSA0OwotICAgICAgZGVzdCArPSA0OwotICAgIH0KLSAgICBzcmMgKz0gd2lkdGggKiAzICsgOCArIHZpZGVvX3dpZHRoX21hcmdpbjsKLSAgICBkZXN0ICs9IHdpZHRoICogMyArIDggKyB2aWRlb193aWR0aF9tYXJnaW47Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9lZGdldHZfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0RWRnZVRWICplZGdldHYgPSBHU1RfRURHRVRWICh0cmFucyk7Ci0KLSAgaWYgKGVkZ2V0di0+bWFwKQotICAgIG1lbXNldCAoZWRnZXR2LT5tYXAsIDAsCi0gICAgICAgIGVkZ2V0di0+bWFwX3dpZHRoICogZWRnZXR2LT5tYXBfaGVpZ2h0ICogc2l6ZW9mIChndWludDMyKSAqIDIpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lZGdldHZfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEVkZ2VUViAqZWRnZXR2ID0gR1NUX0VER0VUViAob2JqZWN0KTsKLQotICBnX2ZyZWUgKGVkZ2V0di0+bWFwKTsKLSAgZWRnZXR2LT5tYXAgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9lZGdldHZfY2xhc3NfaW5pdCAoR3N0RWRnZVRWQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9lZGdldHZfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkVkZ2VUViBlZmZlY3QiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIkFwcGx5IGVkZ2UgZGV0ZWN0IG9uIHZpZGVvIiwgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BjaGVsbG8uYmU+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2VkZ2V0dl9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2VkZ2V0dl9zcmNfdGVtcGxhdGUpOwotCi0gIHRyYW5zX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWRnZXR2X3N0YXJ0KTsKLQotICB2ZmlsdGVyX2NsYXNzLT5zZXRfaW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWRnZXR2X3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZWRnZXR2X3RyYW5zZm9ybV9mcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZWRnZXR2X2luaXQgKEdzdEVkZ2VUViAqIGVkZ2V0dikKLXsKLX0KZGlmZiAtLWdpdCBhL2dzdC9lZmZlY3R2L2dzdGVkZ2UuaCBiL2dzdC9lZmZlY3R2L2dzdGVkZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwYzMxMi4uMDAwMDAwMAotLS0gYS9nc3QvZWZmZWN0di9nc3RlZGdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBFZmZlY1RWOgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIEVkZ2VUViAtIGRldGVjdHMgZWRnZSBhbmQgZGlzcGxheSBpdCBpbiBnb29kIG9sZCBjb21wdXRlciB3YXkKLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfRURHRV9IX18KLSNkZWZpbmUgX19HU1RfRURHRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfRURHRVRWIFwKLSAgKGdzdF9lZGdldHZfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0VER0VUVihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0VER0VUVixHc3RFZGdlVFYpKQotI2RlZmluZSBHU1RfRURHRVRWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0VER0VUVixHc3RFZGdlVFZDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19FREdFVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9FREdFVFYpKQotI2RlZmluZSBHU1RfSVNfRURHRVRWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0VER0VUVikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RFZGdlVFYgR3N0RWRnZVRWOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEVkZ2VUVkNsYXNzIEdzdEVkZ2VUVkNsYXNzOwotCi1zdHJ1Y3QgX0dzdEVkZ2VUVgotewotICBHc3RWaWRlb0ZpbHRlciB2aWRlb2ZpbHRlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBnaW50IG1hcF93aWR0aCwgbWFwX2hlaWdodDsKLSAgZ3VpbnQzMiAqbWFwOwotICBnaW50IHZpZGVvX3dpZHRoX21hcmdpbjsKLX07Ci0KLXN0cnVjdCBfR3N0RWRnZVRWQ2xhc3MKLXsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZWRnZXR2X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0VER0VfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RlZmZlY3R2LmMgYi9nc3QvZWZmZWN0di9nc3RlZmZlY3R2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWZmYzAuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIEVmZmVjVFYgaXMgZnJlZSBzb2Z0d2FyZS4gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7Ci0gKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0ZWZmZWN0di5oIgotI2luY2x1ZGUgImdzdGFnaW5nLmgiCi0jaW5jbHVkZSAiZ3N0ZGljZS5oIgotI2luY2x1ZGUgImdzdGVkZ2UuaCIKLSNpbmNsdWRlICJnc3RxdWFyay5oIgotI2luY2x1ZGUgImdzdHJldi5oIgotI2luY2x1ZGUgImdzdHNoYWdhZGVsaWMuaCIKLSNpbmNsdWRlICJnc3R2ZXJ0aWdvLmgiCi0jaW5jbHVkZSAiZ3N0d2FycC5oIgotI2luY2x1ZGUgImdzdG9wLmgiCi0jaW5jbHVkZSAiZ3N0cmFkaW9hYy5oIgotI2luY2x1ZGUgImdzdHN0cmVhay5oIgotI2luY2x1ZGUgImdzdHJpcHBsZS5oIgotCi1zdHJ1Y3QgX2VsZW1lbnRzX2VudHJ5Ci17Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICAgIEdUeXBlICgqdHlwZSkgKHZvaWQpOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBfZWxlbWVudHNfZW50cnkgX2VsZW1lbnRzW10gPSB7Ci0gIHsiZWRnZXR2IiwgZ3N0X2VkZ2V0dl9nZXRfdHlwZX0sCi0gIHsiYWdpbmd0diIsIGdzdF9hZ2luZ3R2X2dldF90eXBlfSwKLSAgeyJkaWNldHYiLCBnc3RfZGljZXR2X2dldF90eXBlfSwKLSAgeyJ3YXJwdHYiLCBnc3Rfd2FycHR2X2dldF90eXBlfSwKLSAgeyJzaGFnYWRlbGljdHYiLCBnc3Rfc2hhZ2FkZWxpY3R2X2dldF90eXBlfSwKLSAgeyJ2ZXJ0aWdvdHYiLCBnc3RfdmVydGlnb3R2X2dldF90eXBlfSwKLSAgeyJyZXZ0diIsIGdzdF9yZXZ0dl9nZXRfdHlwZX0sCi0gIHsicXVhcmt0diIsIGdzdF9xdWFya3R2X2dldF90eXBlfSwKLSAgeyJvcHR2IiwgZ3N0X29wdHZfZ2V0X3R5cGV9LAotICB7InJhZGlvYWN0diIsIGdzdF9yYWRpb2FjdHZfZ2V0X3R5cGV9LAotICB7InN0cmVha3R2IiwgZ3N0X3N0cmVha3R2X2dldF90eXBlfSwKLSAgeyJyaXBwbGV0diIsIGdzdF9yaXBwbGV0dl9nZXRfdHlwZX0sCi0gIHtOVUxMLCAwfSwKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ2ludCBpID0gMDsKLQotICB3aGlsZSAoX2VsZW1lbnRzW2ldLm5hbWUpIHsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sIF9lbGVtZW50c1tpXS5uYW1lLAotICAgICAgICAgICAgR1NUX1JBTktfTk9ORSwgKF9lbGVtZW50c1tpXS50eXBlKSAoKSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaSsrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBlZmZlY3R2LAotICAgICJlZmZlY3QgcGx1Z2lucyBmcm9tIHRoZSBlZmZlY3R2IHByb2plY3QiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7CmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RlZmZlY3R2LmggYi9nc3QvZWZmZWN0di9nc3RlZmZlY3R2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMDA3OTkuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0ZWZmZWN0di5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqICBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1mYXN0cmFuZCAodm9pZCkKLXsKLSAgc3RhdGljIGd1aW50IGZhc3RyYW5kX3ZhbDsKLQotICByZXR1cm4gKGZhc3RyYW5kX3ZhbCA9IGZhc3RyYW5kX3ZhbCAqIDExMDM1MTUyNDUgKyAxMjM0NSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2dzdC9lZmZlY3R2L2dzdG9wLmMgYi9nc3QvZWZmZWN0di9nc3RvcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODM4NzhmLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdG9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBFZmZlY1RWIC0gUmVhbHRpbWUgRGlnaXRhbCBWaWRlbyBFZmZlY3RvcgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgRlVLVUNISSBLZW50YXJvCi0gKgotICogT3BUViAtIE9wdGljYWwgYXJ0IG1lZXRzIHJlYWwtdGltZSB2aWRlbyBlZmZlY3QuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBGVUtVQ0hJIEtlbnRhcm8KLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1vcHR2Ci0gKgotICogVHJhZGl0aW9uYWwgYmxhY2std2hpdGUgb3B0aWNhbCBhbmltYXRpb24gaXMgbm93IHJlc3VycmVjdGVkIGFzIGEKLSAqIHJlYWwtdGltZSB2aWRlbyBlZmZlY3QuIElucHV0IGltYWdlcyBhcmUgYmluYXJpemVkIGFuZCBjb21iaW5lZCB3aXRoCi0gKiB2YXJpb3VzIG9wdGljYWwgcGF0dGVybi4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgb3B0diAhIHZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsKLSAqIF18IFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiBvcHR2IG9uIGEgdGVzdCBzdHJlYW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdG9wLmgiCi0jaW5jbHVkZSAiZ3N0ZWZmZWN0di5oIgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLWVudW0KLXsKLSAgT1BfU1BJUkFMMSA9IDAsCi0gIE9QX1NQSVJBTDIsCi0gIE9QX1BBUkFCT0xBLAotICBPUF9IU1RSSVBFCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX09QVFZfTU9ERSAoZ3N0X29wdHZfbW9kZV9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3Rfb3B0dl9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7Ci0KLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgZW51bXZhbHVlW10gPSB7Ci0gICAge09QX1NQSVJBTDEsICJNYWVsc3Ryb20iLCAibWFlbHN0cm9tIn0sCi0gICAge09QX1NQSVJBTDIsICJSYWRpYXRpb24iLCAicmFkaWF0aW9uIn0sCi0gICAge09QX1BBUkFCT0xBLCAiSG9yaXpvbnRhbCBTdHJpcGVzIiwKLSAgICAgICAgImhvcml6b250YWwtc3RyaXBlcyJ9LAotICAgIHtPUF9IU1RSSVBFLCAiVmVydGljYWwgU3RyaXBlcyIsICJ2ZXJ0aWNhbC1zdHJpcGVzIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghdHlwZSkgewotICAgIHR5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0T3BUVk1vZGUiLCBlbnVtdmFsdWUpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi0jZGVmaW5lIERFRkFVTFRfTU9ERSBPUF9TUElSQUwxCi0jZGVmaW5lIERFRkFVTFRfU1BFRUQgMTYKLSNkZWZpbmUgREVGQVVMVF9USFJFU0hPTEQgNjAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTU9ERSwKLSAgUFJPUF9TUEVFRCwKLSAgUFJPUF9USFJFU0hPTEQKLX07Ci0KLXN0YXRpYyBndWludDMyIHBhbGV0dGVbMjU2XTsKLQotI2RlZmluZSBnc3Rfb3B0dl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RPcFRWLCBnc3Rfb3B0diwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgQ0FQU19TVFIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQkdSeCwgUkdCeCB9IikKLSNlbHNlCi0jZGVmaW5lIENBUFNfU1RSIEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IHhCR1IsIHhSR0IgfSIpCi0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9vcHR2X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChDQVBTX1NUUikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X29wdHZfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkCi1pbml0UGFsZXR0ZSAodm9pZCkKLXsKLSAgZ2ludCBpOwotICBndWludDggdjsKLQotICBmb3IgKGkgPSAwOyBpIDwgMTEyOyBpKyspIHsKLSAgICBwYWxldHRlW2ldID0gMDsKLSAgICBwYWxldHRlW2kgKyAxMjhdID0gMHhmZmZmZmY7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICB2ID0gMTYgKiAoaSArIDEpIC0gMTsKLSAgICBwYWxldHRlW2kgKyAxMTJdID0gKHYgPDwgMTYpIHwgKHYgPDwgOCkgfCB2OwotICAgIHYgPSAyNTUgLSB2OwotICAgIHBhbGV0dGVbaSArIDI0MF0gPSAodiA8PCAxNikgfCAodiA8PCA4KSB8IHY7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXNldE9wbWFwIChnaW50OCAqIG9wbWFwWzRdLCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCkKLXsKLSAgZ2ludCBpLCBqLCB4LCB5OwotI2lmbmRlZiBQUzIKLSAgZ2RvdWJsZSB4eCwgeXksIHIsIGF0LCBycjsKLSNlbHNlCi0gIGdmbG9hdCB4eCwgeXksIHIsIGF0LCBycjsKLSNlbmRpZgotICBnaW50IHNjaTsKLQotICBzY2kgPSA2NDAgLyB3aWR0aDsKLSAgaSA9IDA7Ci0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgIHl5ID0gKGdkb3VibGUpICh5IC0gaGVpZ2h0IC8gMikgLyB3aWR0aDsKLSAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgeHggPSAoZ2RvdWJsZSkgeCAvIHdpZHRoIC0gMC41OwotI2lmbmRlZiBQUzIKLSAgICAgIHIgPSBzcXJ0ICh4eCAqIHh4ICsgeXkgKiB5eSk7Ci0gICAgICBhdCA9IGF0YW4yICh4eCwgeXkpOwotI2Vsc2UKLSAgICAgIHIgPSBzcXJ0ZiAoeHggKiB4eCArIHl5ICogeXkpOwotICAgICAgYXQgPSBhdGFuMmYgKHh4LCB5eSk7Ci0jZW5kaWYKLQotICAgICAgb3BtYXBbT1BfU1BJUkFMMV1baV0gPSAoKGd1aW50KQotICAgICAgICAgICgoYXQgLyBHX1BJICogMjU2KSArIChyICogNDAwMCkpKSAmIDI1NTsKLQotICAgICAgaiA9IHIgKiAzMDAgLyAzMjsKLSAgICAgIHJyID0gciAqIDMwMCAtIGogKiAzMjsKLSAgICAgIGogKj0gNjQ7Ci0gICAgICBqICs9IChyciA+IDI4KSA/IChyciAtIDI4KSAqIDE2IDogMDsKLSAgICAgIG9wbWFwW09QX1NQSVJBTDJdW2ldID0gKChndWludCkKLSAgICAgICAgICAoKGF0IC8gR19QSSAqIDQwOTYpICsgKHIgKiAxNjAwKSAtIGopKSAmIDI1NTsKLQotICAgICAgb3BtYXBbT1BfUEFSQUJPTEFdW2ldID0KLSAgICAgICAgICAoKGd1aW50KSAoeXkgLyAoeHggKiB4eCAqIDAuMyArIDAuMSkgKiA0MDApKSAmIDI1NTsKLSAgICAgIG9wbWFwW09QX0hTVFJJUEVdW2ldID0geCAqIDggKiBzY2k7Ci0gICAgICBpKys7Ci0gICAgfQotICB9Ci19Ci0KLS8qIFRha2VuIGZyb20gZWZmZWN0di9pbWFnZS5jICovCi0vKiBZIHZhbHVlIGZpbHRlcnMgKi8KLXN0YXRpYyB2b2lkCi1pbWFnZV95X292ZXIgKGd1aW50MzIgKiBzcmMsIGd1aW50OCAqIGRpZmYsIGdpbnQgeV90aHJlc2hvbGQsIGdpbnQgdmlkZW9fYXJlYSkKLXsKLSAgZ2ludCBpOwotICBnaW50IFIsIEcsIEIsIHY7Ci0gIGd1aW50OCAqcCA9IGRpZmY7Ci0KLSAgZm9yIChpID0gdmlkZW9fYXJlYTsgaSA+IDA7IGktLSkgewotICAgIFIgPSAoKCpzcmMpICYgMHhmZjAwMDApID4+ICgxNiAtIDEpOwotICAgIEcgPSAoKCpzcmMpICYgMHhmZjAwKSA+PiAoOCAtIDIpOwotICAgIEIgPSAoKnNyYykgJiAweGZmOwotICAgIHYgPSB5X3RocmVzaG9sZCAqIDcgLSAoUiArIEcgKyBCKTsKLSAgICAqcCA9IChndWludDgpICh2ID4+IDI0KTsKLSAgICBzcmMrKzsKLSAgICBwKys7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9vcHR2X3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0T3BUViAqZmlsdGVyID0gR1NUX09QVFYgKHZmaWx0ZXIpOwotICBndWludDMyICpzcmMsICpkZXN0OwotICBnaW50OCAqcDsKLSAgZ3VpbnQ4ICpkaWZmOwotICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotICBndWludDggcGhhc2U7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluX2ZyYW1lLT5idWZmZXIpOwotICBzdHJlYW1fdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJkdTVF9CQVNFX1RSQU5TRk9STSAodmZpbHRlciktPnNlZ21lbnQsCi0gICAgICBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAic3luYyB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbV90aW1lKSkKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChmaWx0ZXIpLCBzdHJlYW1fdGltZSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGZpbHRlci0+b3BtYXBbMF0gPT0gTlVMTCkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBzd2l0Y2ggKGZpbHRlci0+bW9kZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgY2FzZSAwOgotICAgICAgcCA9IGZpbHRlci0+b3BtYXBbT1BfU1BJUkFMMV07Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICBwID0gZmlsdGVyLT5vcG1hcFtPUF9TUElSQUwyXTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgIHAgPSBmaWx0ZXItPm9wbWFwW09QX1BBUkFCT0xBXTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgIHAgPSBmaWx0ZXItPm9wbWFwW09QX0hTVFJJUEVdOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBmaWx0ZXItPnBoYXNlIC09IGZpbHRlci0+c3BlZWQ7Ci0KLSAgZGlmZiA9IGZpbHRlci0+ZGlmZjsKLSAgaW1hZ2VfeV9vdmVyIChzcmMsIGRpZmYsIGZpbHRlci0+dGhyZXNob2xkLCB3aWR0aCAqIGhlaWdodCk7Ci0gIHBoYXNlID0gZmlsdGVyLT5waGFzZTsKLQotICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgKmRlc3QrKyA9IHBhbGV0dGVbKCgoZ3VpbnQ4KSAoKnAgKyBwaGFzZSkpIF4gKmRpZmYrKykgJiAyNTVdOwotICAgICAgcCsrOwotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29wdHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdE9wVFYgKmZpbHRlciA9IEdTVF9PUFRWICh2ZmlsdGVyKTsKLSAgZ2ludCBpLCB3aWR0aCwgaGVpZ2h0OwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluX2luZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluX2luZm8pOwotCi0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICBnX2ZyZWUgKGZpbHRlci0+b3BtYXBbaV0pOwotICAgIGZpbHRlci0+b3BtYXBbaV0gPSBnX25ldyAoZ2ludDgsIHdpZHRoICogaGVpZ2h0KTsKLSAgfQotICBzZXRPcG1hcCAoZmlsdGVyLT5vcG1hcCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmRpZmYpOwotICBmaWx0ZXItPmRpZmYgPSBnX25ldyAoZ3VpbnQ4LCB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29wdHZfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0T3BUViAqZmlsdGVyID0gR1NUX09QVFYgKHRyYW5zKTsKLQotICBmaWx0ZXItPnBoYXNlID0gMDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vcHR2X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RPcFRWICpmaWx0ZXIgPSBHU1RfT1BUViAob2JqZWN0KTsKLQotICBpZiAoZmlsdGVyLT5vcG1hcFswXSkgewotICAgIGdpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgIGdfZnJlZSAoZmlsdGVyLT5vcG1hcFtpXSk7Ci0gICAgICBmaWx0ZXItPm9wbWFwW2ldID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBnX2ZyZWUgKGZpbHRlci0+ZGlmZik7Ci0gIGZpbHRlci0+ZGlmZiA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29wdHZfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9wVFYgKmZpbHRlciA9IEdTVF9PUFRWIChvYmplY3QpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBmaWx0ZXItPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1BFRUQ6Ci0gICAgICBmaWx0ZXItPnNwZWVkID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVEhSRVNIT0xEOgotICAgICAgZmlsdGVyLT50aHJlc2hvbGQgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29wdHZfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9wVFYgKmZpbHRlciA9IEdTVF9PUFRWIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGZpbHRlci0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1BFRUQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPnNwZWVkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USFJFU0hPTEQ6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgZmlsdGVyLT50aHJlc2hvbGQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29wdHZfY2xhc3NfaW5pdCAoR3N0T3BUVkNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X29wdHZfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfb3B0dl9nZXRfcHJvcGVydHk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfb3B0dl9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm1vZGUiLCAiTW9kZSIsCi0gICAgICAgICAgIk1vZGUiLCBHU1RfVFlQRV9PUFRWX01PREUsIERFRkFVTFRfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NQRUVELAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNwZWVkIiwgIlNwZWVkIiwKLSAgICAgICAgICAiRWZmZWN0IHNwZWVkIiwgR19NSU5JTlQsIEdfTUFYSU5ULCBERUZBVUxUX1NQRUVELAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RIUkVTSE9MRCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgidGhyZXNob2xkIiwgIlRocmVzaG9sZCIsCi0gICAgICAgICAgIkx1bWEgdGhyZXNob2xkIiwgMCwgR19NQVhJTlQsIERFRkFVTFRfVEhSRVNIT0xELAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiT3BUViBlZmZlY3QiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIk9wdGljYWwgYXJ0IG1lZXRzIHJlYWwtdGltZSB2aWRlbyBlZmZlY3QiLAotICAgICAgIkZVS1VDSEksIEtlbnRhcm91IDxmdWt1Y2hpQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4sICIKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfb3B0dl9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X29wdHZfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29wdHZfc3RhcnQpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vcHR2X3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vcHR2X3RyYW5zZm9ybV9mcmFtZSk7Ci0KLSAgaW5pdFBhbGV0dGUgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3B0dl9pbml0IChHc3RPcFRWICogZmlsdGVyKQotewotICBmaWx0ZXItPnNwZWVkID0gREVGQVVMVF9TUEVFRDsKLSAgZmlsdGVyLT5tb2RlID0gREVGQVVMVF9NT0RFOwotICBmaWx0ZXItPnRocmVzaG9sZCA9IERFRkFVTFRfVEhSRVNIT0xEOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0b3AuaCBiL2dzdC9lZmZlY3R2L2dzdG9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzI0MDIuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0b3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUViAtIFJlYWx0aW1lIERpZ2l0YWwgVmlkZW8gRWZmZWN0b3IKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IEZVS1VDSEkgS2VudGFybwotICoKLSAqIE9wVFYgLSBPcHRpY2FsIGFydCBtZWV0cyByZWFsLXRpbWUgdmlkZW8gZWZmZWN0LgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRlVLVUNISSBLZW50YXJvCi0gKgotICogRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9PUF9IX18KLSNkZWZpbmUgX19HU1RfT1BfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09QVFYgXAotICAoZ3N0X29wdHZfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX09QVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9PUFRWLEdzdE9wVFYpKQotI2RlZmluZSBHU1RfT1BUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9PUFRWLEdzdE9wVFZDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19PUFRWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfT1BUVikpCi0jZGVmaW5lIEdTVF9JU19PUFRWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX09QVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0T3BUViBHc3RPcFRWOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9wVFZDbGFzcyBHc3RPcFRWQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0T3BUVgotewotICBHc3RWaWRlb0ZpbHRlciBlbGVtZW50OwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIGdpbnQgbW9kZTsKLSAgZ2ludCBzcGVlZDsKLSAgZ3VpbnQgdGhyZXNob2xkOwotCi0gIGdpbnQ4ICpvcG1hcFs0XTsKLSAgZ3VpbnQ4ICpkaWZmOwotICBndWludDggcGhhc2U7Ci19OwotCi1zdHJ1Y3QgX0dzdE9wVFZDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9vcHR2X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX09QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYyBiL2dzdC9lZmZlY3R2L2dzdHF1YXJrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYWRlNzUuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuYworKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBFZmZlY1RWOgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIFF1YXJrVFYgLSBtb3Rpb24gZGlzb2x2ZXIuCi0gKgotICogIEVmZmVjVFYgaXMgZnJlZSBzb2Z0d2FyZS4gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7Ci0gKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXF1YXJrdHYKLSAqCi0gKiBRdWFya1RWIGRpc29sdmVzIG1vdmluZyBvYmplY3RzLiBJdCBwaWNrcyB1cCBwaXhlbHMgZnJvbQotICogdGhlIGxhc3QgZnJhbWVzIHJhbmRvbWx5LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgISBxdWFya3R2ICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgZWZmZWN0IG9mIHF1YXJrdHYgb24gYSB0ZXN0IHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0cXVhcmsuaCIKLSNpbmNsdWRlICJnc3RlZmZlY3R2LmgiCi0KLS8qIG51bWJlciBvZiBmcmFtZXMgb2YgdGltZS1idWZmZXIuIEl0IHNob3VsZCBiZSBhcyBhIGNvbmZpZ3VyYWJsZSBwYXJhbWF0ZXIgKi8KLS8qIFRoaXMgbnVtYmVyIGFsc28gbXVzdCBiZSAyXm4ganVzdCBmb3IgdGhlIHNwZWVkLiAqLwotI2RlZmluZSBQTEFORVMgMTYKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUExBTkVTCi19OwotCi0jZGVmaW5lIGdzdF9xdWFya3R2X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFF1YXJrVFYsIGdzdF9xdWFya3R2LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfcXVhcmt0dl9wbGFuZXRhYmxlX2NsZWFyIChHc3RRdWFya1RWICogZmlsdGVyKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9xdWFya3R2X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyB4UkdCLCB4QkdSLCBCR1J4LCBSR0J4IH0iKSkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3F1YXJrdHZfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IHhSR0IsIHhCR1IsIEJHUngsIFJHQnggfSIpKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1YXJrdHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFF1YXJrVFYgKmZpbHRlciA9IEdTVF9RVUFSS1RWICh2ZmlsdGVyKTsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluX2luZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluX2luZm8pOwotCi0gIGdzdF9xdWFya3R2X3BsYW5ldGFibGVfY2xlYXIgKGZpbHRlcik7Ci0gIGZpbHRlci0+YXJlYSA9IHdpZHRoICogaGVpZ2h0OwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F1YXJrdHZfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBHc3RRdWFya1RWICpmaWx0ZXIgPSBHU1RfUVVBUktUViAodmZpbHRlcik7Ci0gIGdpbnQgYXJlYTsKLSAgZ3VpbnQzMiAqc3JjLCAqZGVzdDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0QnVmZmVyICoqcGxhbmV0YWJsZTsKLSAgZ2ludCBwbGFuZXMsIGN1cnJlbnRfcGxhbmU7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluX2ZyYW1lLT5idWZmZXIpOwotICB0aW1lc3RhbXAgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZHU1RfQkFTRV9UUkFOU0ZPUk0gKHZmaWx0ZXIpLT5zZWdtZW50LAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKQotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGZpbHRlciksIHRpbWVzdGFtcCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGZpbHRlci0+cGxhbmV0YWJsZSA9PSBOVUxMKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgYXJlYSA9IGZpbHRlci0+YXJlYTsKLSAgcGxhbmV0YWJsZSA9IGZpbHRlci0+cGxhbmV0YWJsZTsKLSAgcGxhbmVzID0gZmlsdGVyLT5wbGFuZXM7Ci0gIGN1cnJlbnRfcGxhbmUgPSBmaWx0ZXItPmN1cnJlbnRfcGxhbmU7Ci0KLSAgaWYgKHBsYW5ldGFibGVbY3VycmVudF9wbGFuZV0pCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAocGxhbmV0YWJsZVtjdXJyZW50X3BsYW5lXSk7Ci0gIHBsYW5ldGFibGVbY3VycmVudF9wbGFuZV0gPSBnc3RfYnVmZmVyX3JlZiAoaW5fZnJhbWUtPmJ1ZmZlcik7Ci0KLSAgLyogRm9yIGVhY2ggcGl4ZWwgKi8KLSAgd2hpbGUgKC0tYXJlYSkgewotICAgIEdzdEJ1ZmZlciAqcmFuZDsKLQotICAgIC8qIHBpY2sgYSByYW5kb20gYnVmZmVyICovCi0gICAgcmFuZCA9IHBsYW5ldGFibGVbKGN1cnJlbnRfcGxhbmUgKyAoZmFzdHJhbmQgKCkgPj4gMjQpKSAlIHBsYW5lc107Ci0KLSAgICAvKiBDb3B5IHRoZSBwaXhlbCBmcm9tIHRoZSByYW5kb20gYnVmZmVyIHRvIGRlc3QsIEZJWE1FLCBzbG93ICovCi0gICAgaWYgKHJhbmQpCi0gICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKHJhbmQsIGFyZWEgKiA0LCAmZGVzdFthcmVhXSwgNCk7Ci0gICAgZWxzZQotICAgICAgZGVzdFthcmVhXSA9IHNyY1thcmVhXTsKLSAgfQotCi0gIGZpbHRlci0+Y3VycmVudF9wbGFuZS0tOwotICBpZiAoZmlsdGVyLT5jdXJyZW50X3BsYW5lIDwgMCkKLSAgICBmaWx0ZXItPmN1cnJlbnRfcGxhbmUgPSBwbGFuZXMgLSAxOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVhcmt0dl9wbGFuZXRhYmxlX2NsZWFyIChHc3RRdWFya1RWICogZmlsdGVyKQotewotICBnaW50IGk7Ci0KLSAgaWYgKGZpbHRlci0+cGxhbmV0YWJsZSA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBmb3IgKGkgPSAwOyBpIDwgZmlsdGVyLT5wbGFuZXM7IGkrKykgewotICAgIGlmIChHU1RfSVNfQlVGRkVSIChmaWx0ZXItPnBsYW5ldGFibGVbaV0pKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChmaWx0ZXItPnBsYW5ldGFibGVbaV0pOwotICAgIH0KLSAgICBmaWx0ZXItPnBsYW5ldGFibGVbaV0gPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F1YXJrdHZfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0UXVhcmtUViAqZmlsdGVyID0gR1NUX1FVQVJLVFYgKHRyYW5zKTsKLQotICBpZiAoZmlsdGVyLT5wbGFuZXRhYmxlKSB7Ci0gICAgZ3N0X3F1YXJrdHZfcGxhbmV0YWJsZV9jbGVhciAoZmlsdGVyKTsKLSAgICBnX2ZyZWUgKGZpbHRlci0+cGxhbmV0YWJsZSk7Ci0gIH0KLSAgZmlsdGVyLT5wbGFuZXRhYmxlID0KLSAgICAgIChHc3RCdWZmZXIgKiopIGdfbWFsbG9jMCAoZmlsdGVyLT5wbGFuZXMgKiBzaXplb2YgKEdzdEJ1ZmZlciAqKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVhcmt0dl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UXVhcmtUViAqZmlsdGVyID0gR1NUX1FVQVJLVFYgKG9iamVjdCk7Ci0KLSAgaWYgKGZpbHRlci0+cGxhbmV0YWJsZSkgewotICAgIGdzdF9xdWFya3R2X3BsYW5ldGFibGVfY2xlYXIgKGZpbHRlcik7Ci0gICAgZ19mcmVlIChmaWx0ZXItPnBsYW5ldGFibGUpOwotICAgIGZpbHRlci0+cGxhbmV0YWJsZSA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVhcmt0dl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UXVhcmtUViAqZmlsdGVyID0gR1NUX1FVQVJLVFYgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUExBTkVTOgotICAgIHsKLSAgICAgIGdpbnQgbmV3X25fcGxhbmVzID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBHc3RCdWZmZXIgKipuZXdfcGxhbmV0YWJsZTsKLSAgICAgIGdpbnQgaTsKLQotICAgICAgLyogSWYgdGhlIG51bWJlciBvZiBwbGFuZXMgY2hhbmdlZCwgY29weSBhY3Jvc3MgYW55IGV4aXN0aW5nIHBsYW5lcyAqLwotICAgICAgaWYgKG5ld19uX3BsYW5lcyAhPSBmaWx0ZXItPnBsYW5lcykgewotICAgICAgICBuZXdfcGxhbmV0YWJsZSA9Ci0gICAgICAgICAgICAoR3N0QnVmZmVyICoqKSBnX21hbGxvYzAgKG5ld19uX3BsYW5lcyAqIHNpemVvZiAoR3N0QnVmZmVyICopKTsKLQotICAgICAgICBpZiAoZmlsdGVyLT5wbGFuZXRhYmxlKSB7Ci0gICAgICAgICAgZm9yIChpID0gMDsgKGkgPCBuZXdfbl9wbGFuZXMpICYmIChpIDwgZmlsdGVyLT5wbGFuZXMpOyBpKyspIHsKLSAgICAgICAgICAgIG5ld19wbGFuZXRhYmxlW2ldID0gZmlsdGVyLT5wbGFuZXRhYmxlW2ldOwotICAgICAgICAgIH0KLSAgICAgICAgICBmb3IgKDsgaSA8IGZpbHRlci0+cGxhbmVzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChmaWx0ZXItPnBsYW5ldGFibGVbaV0pCi0gICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGZpbHRlci0+cGxhbmV0YWJsZVtpXSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdfZnJlZSAoZmlsdGVyLT5wbGFuZXRhYmxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbHRlci0+cGxhbmV0YWJsZSA9IG5ld19wbGFuZXRhYmxlOwotICAgICAgICBmaWx0ZXItPnBsYW5lcyA9IG5ld19uX3BsYW5lczsKLSAgICAgICAgZmlsdGVyLT5jdXJyZW50X3BsYW5lID0gZmlsdGVyLT5wbGFuZXMgLSAxOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVhcmt0dl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UXVhcmtUViAqZmlsdGVyID0gR1NUX1FVQVJLVFYgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BMQU5FUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+cGxhbmVzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdWFya3R2X2NsYXNzX2luaXQgKEdzdFF1YXJrVFZDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9xdWFya3R2X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3F1YXJrdHZfZ2V0X3Byb3BlcnR5OwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3F1YXJrdHZfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QTEFORVMsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicGxhbmVzIiwgIlBsYW5lcyIsCi0gICAgICAgICAgIk51bWJlciBvZiBwbGFuZXMiLCAxLCA2NCwgUExBTkVTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUXVhcmtUViBlZmZlY3QiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIk1vdGlvbiBkaXNzb2x2ZXIiLCAiRlVLVUNISSwgS2VudGFyb3UgPGZ1a3VjaGlAdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9xdWFya3R2X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcXVhcmt0dl9zcmNfdGVtcGxhdGUpOwotCi0gIHRyYW5zX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXVhcmt0dl9zdGFydCk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F1YXJrdHZfc2V0X2luZm8pOwotICB2ZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdWFya3R2X3RyYW5zZm9ybV9mcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXVhcmt0dl9pbml0IChHc3RRdWFya1RWICogZmlsdGVyKQotewotICBmaWx0ZXItPnBsYW5lcyA9IFBMQU5FUzsKLSAgZmlsdGVyLT5jdXJyZW50X3BsYW5lID0gZmlsdGVyLT5wbGFuZXMgLSAxOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuaCBiL2dzdC9lZmZlY3R2L2dzdHF1YXJrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NTc3NTYuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0cXVhcmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGVUtVQ0hJIEtlbnRhcm91Ci0gKgotICogUXVhcmtUViAtIG1vdGlvbiBkaXNvbHZlci4KLSAqCi0gKiAgRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9RVUFSS19IX18KLSNkZWZpbmUgX19HU1RfUVVBUktfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1FVQVJLVFYgXAotICAoZ3N0X3F1YXJrdHZfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1FVQVJLVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9RVUFSS1RWLEdzdFF1YXJrVFYpKQotI2RlZmluZSBHU1RfUVVBUktUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9RVUFSS1RWLEdzdFF1YXJrVFZDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19RVUFSS1RWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUVVBUktUVikpCi0jZGVmaW5lIEdTVF9JU19RVUFSS1RWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1FVQVJLVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UXVhcmtUViBHc3RRdWFya1RWOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFF1YXJrVFZDbGFzcyBHc3RRdWFya1RWQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0UXVhcmtUVgotewotICBHc3RWaWRlb0ZpbHRlciBlbGVtZW50OwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIGdpbnQgYXJlYTsKLSAgZ2ludCBwbGFuZXM7Ci0gIGdpbnQgY3VycmVudF9wbGFuZTsKLSAgR3N0QnVmZmVyICoqcGxhbmV0YWJsZTsKLX07Ci0KLXN0cnVjdCBfR3N0UXVhcmtUVkNsYXNzCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3F1YXJrdHZfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUVVBUktfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RyYWRpb2FjLmMgYi9nc3QvZWZmZWN0di9nc3RyYWRpb2FjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NjM2ODQuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ3JhZGlvYWN5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBFZmZlY1RWIC0gUmVhbHRpbWUgRGlnaXRhbCBWaWRlbyBFZmZlY3RvcgotICogQ3JhZGlvYWN5cmlnaHQgKEMpIDIwMDEtMjAwNiBGVUtVQ0hJIEtlbnRhcm8KLSAqCi0gKiBSYWRpb2FjVFYgLSBtb3Rpb24tZW5saWdodG1lbnQgZWZmZWN0LgotICogQ3JhZGlvYWN5cmlnaHQgKEMpIDIwMDEtMjAwMiBGVUtVQ0hJIEtlbnRhcm8KLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIHJhZGlvYWN0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhyYWRpb2FjZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjcmFkaW9hY3kgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1yYWRpb2FjdHYKLSAqCi0gKiBSYWRpb2FjVFYgZG9lcyAqTk9UKiBkZXRlY3QgYSByYWRpb2FjdGl2aXR5LiBJdCBkZXRlY3RzIGEgZGlmZmVyZW5jZQotICogZnJvbSBwcmV2aW91cyBmcmFtZSBhbmQgYmx1cnMgaXQuCi0gKiAKLSAqIFJhZGlvYWNUViBoYXMgNCBtb2RlLCBub3JtYWwsIHN0cm9iZTEsIHN0cm9iZTIgYW5kIHRyaWdnZXIuCi0gKiBJbiB0cmlnZ2VyIG1vZGUsIGVmZmVjdCBhcHBlYXJzIG9ubHkgd2hlbiB0aGUgdHJpZ2dlciBwcm9wZXJ0eSBpcyAlVFJVRS4KLSAqCi0gKiBzdHJvYmUxIGFuZCBzdHJvYmUyIG1vZGUgZHJvcHMgc29tZSBmcmFtZXMuIHN0cm9iZTEgbW9kZSB1c2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAqIGN1cnJlbnQgZnJhbWUgYW5kIHByZXZpb3VzIGZyYW1lIGRyb3BwZWQsIHdoaWxlIHN0cm9iZTIgbW9kZSB1c2VzIHRoZSBkaWZmZXJlbmNlIGZyb20KLSAqIHByZXZpb3VzIGZyYW1lIGRpc3BsYXllZC4gVGhlIGVmZmVjdCBvZiBzdHJvYmUyIGlzIHN0cm9uZ2VyIHRoYW4gc3Ryb2JlMS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgcmFkaW9hY3R2ICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgZWZmZWN0IG9mIHJhZGlvYWN0diBvbiBhIHRlc3Qgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RyYWRpb2FjLmgiCi0jaW5jbHVkZSAiZ3N0ZWZmZWN0di5oIgotCi1lbnVtCi17Ci0gIFJBRElPQUNfTk9STUFMID0gMCwKLSAgUkFESU9BQ19TVFJPQkUsCi0gIFJBRElPQUNfU1RST0JFMiwKLSAgUkFESU9BQ19UUklHR0VSCi19OwotCi1lbnVtCi17Ci0gIENPTE9SX1JFRCA9IDAsCi0gIENPTE9SX0dSRUVOLAotICBDT0xPUl9CTFVFLAotICBDT0xPUl9XSElURQotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9SQURJT0FDVFZfTU9ERSAoZ3N0X3JhZGlvYWN0dl9tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9yYWRpb2FjdHZfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHR5cGUgPSAwOwotCi0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGVudW12YWx1ZVtdID0gewotICAgIHtSQURJT0FDX05PUk1BTCwgIk5vcm1hbCIsICJub3JtYWwifSwKLSAgICB7UkFESU9BQ19TVFJPQkUsICJTdHJvYmUgMSIsICJzdHJvYmUxIn0sCi0gICAge1JBRElPQUNfU1RST0JFMiwgIlN0cm9iZSAyIiwgInN0cm9iZTIifSwKLSAgICB7UkFESU9BQ19UUklHR0VSLCAiVHJpZ2dlciIsICJ0cmlnZ2VyIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghdHlwZSkgewotICAgIHR5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UmFkaW9hY1RWTW9kZSIsIGVudW12YWx1ZSk7Ci0gIH0KLSAgcmV0dXJuIHR5cGU7Ci19Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUkFESU9BQ1RWX0NPTE9SIChnc3RfcmFkaW9hY3R2X2NvbG9yX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9yYWRpb2FjdHZfY29sb3JfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKLQotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBlbnVtdmFsdWVbXSA9IHsKLSAgICB7Q09MT1JfUkVELCAiUmVkIiwgInJlZCJ9LAotICAgIHtDT0xPUl9HUkVFTiwgIkdyZWVuIiwgImdyZWVuIn0sCi0gICAge0NPTE9SX0JMVUUsICJCbHVlIiwgImJsdWUifSwKLSAgICB7Q09MT1JfV0hJVEUsICJXaGl0ZSIsICJ3aGl0ZSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIXR5cGUpIHsKLSAgICB0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFJhZGlvYWNUVkNvbG9yIiwgZW51bXZhbHVlKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotI2RlZmluZSBERUZBVUxUX01PREUgUkFESU9BQ19OT1JNQUwKLSNkZWZpbmUgREVGQVVMVF9DT0xPUiBDT0xPUl9XSElURQotI2RlZmluZSBERUZBVUxUX0lOVEVSVkFMIDMKLSNkZWZpbmUgREVGQVVMVF9UUklHR0VSIEZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX01PREUsCi0gIFBST1BfQ09MT1IsCi0gIFBST1BfSU5URVJWQUwsCi0gIFBST1BfVFJJR0dFUgotfTsKLQotI2RlZmluZSBDT0xPUlMgMzIKLSNkZWZpbmUgUEFUVEVSTiA0Ci0jZGVmaW5lIE1BR0lDX1RIUkVTSE9MRCA0MAotI2RlZmluZSBSQVRJTyAwLjk1Ci0KLXN0YXRpYyBndWludDMyIHBhbGV0dGVzW0NPTE9SUyAqIFBBVFRFUk5dOwotc3RhdGljIGNvbnN0IGdpbnQgc3dhcF90YWJbXSA9IHsgMiwgMSwgMCwgMyB9OwotCi0jZGVmaW5lIGdzdF9yYWRpb2FjdHZfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UmFkaW9hY1RWLCBnc3RfcmFkaW9hY3R2LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBDQVBTX1NUUiBHU1RfVklERU9fQ0FQU19NQUtFICgieyBSR0J4LCBCR1J4IH0iKQotI2Vsc2UKLSNkZWZpbmUgQ0FQU19TVFIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgeEJHUiwgeFJHQiB9IikKLSNlbmRpZgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3JhZGlvYWN0dl9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQ0FQU19TVFIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9yYWRpb2FjdHZfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkCi1tYWtlUGFsZXR0ZSAodm9pZCkKLXsKLSAgZ2ludCBpOwotCi0jZGVmaW5lIERFTFRBICgyNTUvKENPTE9SUy8yLTEpKQotCi0gIC8qIHJlZCwgZ3JlZSwgYmx1ZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgQ09MT1JTIC8gMjsgaSsrKSB7Ci0gICAgcGFsZXR0ZXNbaV0gPSBpICogREVMVEE7Ci0gICAgcGFsZXR0ZXNbQ09MT1JTICsgaV0gPSAoaSAqIERFTFRBKSA8PCA4OwotICAgIHBhbGV0dGVzW0NPTE9SUyAqIDIgKyBpXSA9IChpICogREVMVEEpIDw8IDE2OwotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBDT0xPUlMgLyAyOyBpKyspIHsKLSAgICBwYWxldHRlc1tpICsgQ09MT1JTIC8gMl0gPSAyNTUgfCAoaSAqIERFTFRBKSA8PCAxNiB8IChpICogREVMVEEpIDw8IDg7Ci0gICAgcGFsZXR0ZXNbQ09MT1JTICsgaSArIENPTE9SUyAvIDJdID0KLSAgICAgICAgKDI1NSA8PCA4KSB8IChpICogREVMVEEpIDw8IDE2IHwgaSAqIERFTFRBOwotICAgIHBhbGV0dGVzW0NPTE9SUyAqIDIgKyBpICsgQ09MT1JTIC8gMl0gPQotICAgICAgICAoMjU1IDw8IDE2KSB8IChpICogREVMVEEpIDw8IDggfCBpICogREVMVEE7Ci0gIH0KLSAgLyogd2hpdGUgKi8KLSAgZm9yIChpID0gMDsgaSA8IENPTE9SUzsgaSsrKSB7Ci0gICAgcGFsZXR0ZXNbQ09MT1JTICogMyArIGldID0gKDI1NSAqIGkgLyBDT0xPUlMpICogMHgxMDEwMTsKLSAgfQotICBmb3IgKGkgPSAwOyBpIDwgQ09MT1JTICogUEFUVEVSTjsgaSsrKSB7Ci0gICAgcGFsZXR0ZXNbaV0gPSBwYWxldHRlc1tpXSAmIDB4ZmVmZWZmOwotICB9Ci0jdW5kZWYgREVMVEEKLX0KLQotI2RlZmluZSBWSURFT19IV0lEVEggKGZpbHRlci0+YnVmX3dpZHRoLzIpCi0jZGVmaW5lIFZJREVPX0hIRUlHSFQgKGZpbHRlci0+YnVmX2hlaWdodC8yKQotCi0vKiB0aGlzIHRhYmxlIGFzc3VtZXMgdGhhdCB2aWRlb193aWR0aCBpcyB0aW1lcyBvZiAzMiAqLwotc3RhdGljIHZvaWQKLXNldFRhYmxlIChHc3RSYWRpb2FjVFYgKiBmaWx0ZXIpCi17Ci0gIGd1aW50IGJpdHM7Ci0gIGdpbnQgeCwgeSwgdHgsIHR5LCB4eDsKLSAgZ2ludCBwdHIsIHByZXZwdHI7Ci0KLSAgcHJldnB0ciA9IChnaW50KSAoMC41ICsgUkFUSU8gKiAoLVZJREVPX0hXSURUSCkgKyBWSURFT19IV0lEVEgpOwotICBmb3IgKHh4ID0gMDsgeHggPCAoZmlsdGVyLT5idWZfd2lkdGhfYmxvY2tzKTsgeHgrKykgewotICAgIGJpdHMgPSAwOwotICAgIGZvciAoeCA9IDA7IHggPCAzMjsgeCsrKSB7Ci0gICAgICBwdHIgPSAoZ2ludCkgKDAuNSArIFJBVElPICogKHh4ICogMzIgKyB4IC0gVklERU9fSFdJRFRIKSArIFZJREVPX0hXSURUSCk7Ci0gICAgICBiaXRzID0gYml0cyA+PiAxOwotICAgICAgaWYgKHB0ciAhPSBwcmV2cHRyKQotICAgICAgICBiaXRzIHw9IDB4ODAwMDAwMDA7Ci0gICAgICBwcmV2cHRyID0gcHRyOwotICAgIH0KLSAgICBmaWx0ZXItPmJsdXJ6b29teFt4eF0gPSBiaXRzOwotICB9Ci0KLSAgdHkgPSAoZ2ludCkgKDAuNSArIFJBVElPICogKC1WSURFT19ISEVJR0hUKSArIFZJREVPX0hIRUlHSFQpOwotICB0eCA9IChnaW50KSAoMC41ICsgUkFUSU8gKiAoLVZJREVPX0hXSURUSCkgKyBWSURFT19IV0lEVEgpOwotICB4eCA9IChnaW50KSAoMC41ICsgUkFUSU8gKiAoZmlsdGVyLT5idWZfd2lkdGggLSAxIC0gVklERU9fSFdJRFRIKSArCi0gICAgICBWSURFT19IV0lEVEgpOwotICBmaWx0ZXItPmJsdXJ6b29teVswXSA9IHR5ICogZmlsdGVyLT5idWZfd2lkdGggKyB0eDsKLSAgcHJldnB0ciA9IHR5ICogZmlsdGVyLT5idWZfd2lkdGggKyB4eDsKLSAgZm9yICh5ID0gMTsgeSA8IGZpbHRlci0+YnVmX2hlaWdodDsgeSsrKSB7Ci0gICAgdHkgPSAoZ2ludCkgKDAuNSArIFJBVElPICogKHkgLSBWSURFT19ISEVJR0hUKSArIFZJREVPX0hIRUlHSFQpOwotICAgIGZpbHRlci0+Ymx1cnpvb215W3ldID0gdHkgKiBmaWx0ZXItPmJ1Zl93aWR0aCArIHR4IC0gcHJldnB0cjsKLSAgICBwcmV2cHRyID0gdHkgKiBmaWx0ZXItPmJ1Zl93aWR0aCArIHh4OwotICB9Ci19Ci0KLSN1bmRlZiBWSURFT19IV0lEVEgKLSN1bmRlZiBWSURFT19ISEVJR0hUCi0KLXN0YXRpYyB2b2lkCi1ibHVyIChHc3RSYWRpb2FjVFYgKiBmaWx0ZXIpCi17Ci0gIGdpbnQgeCwgeTsKLSAgZ2ludCB3aWR0aDsKLSAgZ3VpbnQ4ICpwLCAqcTsKLSAgZ3VpbnQ4IHY7Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbzsKLQotICBpbmZvID0gJkdTVF9WSURFT19GSUxURVIgKGZpbHRlciktPmluX2luZm87Ci0KLSAgd2lkdGggPSBmaWx0ZXItPmJ1Zl93aWR0aDsKLSAgcCA9IGZpbHRlci0+Ymx1cnpvb21idWYgKyBHU1RfVklERU9fSU5GT19XSURUSCAoaW5mbykgKyAxOwotICBxID0gcCArIGZpbHRlci0+YnVmX2FyZWE7Ci0KLSAgZm9yICh5ID0gZmlsdGVyLT5idWZfaGVpZ2h0IC0gMjsgeSA+IDA7IHktLSkgewotICAgIGZvciAoeCA9IHdpZHRoIC0gMjsgeCA+IDA7IHgtLSkgewotICAgICAgdiA9ICgqKHAgLSB3aWR0aCkgKyAqKHAgLSAxKSArICoocCArIDEpICsgKihwICsgd2lkdGgpKSAvIDQgLSAxOwotICAgICAgaWYgKHYgPT0gMjU1KQotICAgICAgICB2ID0gMDsKLSAgICAgICpxID0gdjsKLSAgICAgIHArKzsKLSAgICAgIHErKzsKLSAgICB9Ci0gICAgcCArPSAyOwotICAgIHEgKz0gMjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotem9vbSAoR3N0UmFkaW9hY1RWICogZmlsdGVyKQotewotICBnaW50IGIsIHgsIHk7Ci0gIGd1aW50OCAqcCwgKnE7Ci0gIGdpbnQgYmxvY2tzLCBoZWlnaHQ7Ci0gIGdpbnQgZHg7Ci0KLSAgcCA9IGZpbHRlci0+Ymx1cnpvb21idWYgKyBmaWx0ZXItPmJ1Zl9hcmVhOwotICBxID0gZmlsdGVyLT5ibHVyem9vbWJ1ZjsKLSAgaGVpZ2h0ID0gZmlsdGVyLT5idWZfaGVpZ2h0OwotICBibG9ja3MgPSBmaWx0ZXItPmJ1Zl93aWR0aF9ibG9ja3M7Ci0KLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgcCArPSBmaWx0ZXItPmJsdXJ6b29teVt5XTsKLSAgICBmb3IgKGIgPSAwOyBiIDwgYmxvY2tzOyBiKyspIHsKLSAgICAgIGR4ID0gZmlsdGVyLT5ibHVyem9vbXhbYl07Ci0gICAgICBmb3IgKHggPSAwOyB4IDwgMzI7IHgrKykgewotICAgICAgICBwICs9IChkeCAmIDEpOwotICAgICAgICAqcSsrID0gKnA7Ci0gICAgICAgIGR4ID0gZHggPj4gMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWJsdXJ6b29tY29yZSAoR3N0UmFkaW9hY1RWICogZmlsdGVyKQotewotICBibHVyIChmaWx0ZXIpOwotICB6b29tIChmaWx0ZXIpOwotfQotCi0vKiBCYWNrZ3JvdW5kIGltYWdlIGlzIHJlZnJlc2hlZCBldmVyeSBmcmFtZSAqLwotc3RhdGljIHZvaWQKLWltYWdlX2Jnc3VidHJhY3RfdXBkYXRlX3kgKGd1aW50MzIgKiBzcmMsIGdpbnQxNiAqIGJhY2tncm91bmQsIGd1aW50OCAqIGRpZmYsCi0gICAgZ2ludCB2aWRlb19hcmVhLCBnaW50IHlfdGhyZXNob2xkKQotewotICBnaW50IGk7Ci0gIGdpbnQgUiwgRywgQjsKLSAgZ3VpbnQzMiAqcDsKLSAgZ2ludDE2ICpxOwotICBndWludDggKnI7Ci0gIGdpbnQgdjsKLQotICBwID0gc3JjOwotICBxID0gYmFja2dyb3VuZDsKLSAgciA9IGRpZmY7Ci0gIGZvciAoaSA9IDA7IGkgPCB2aWRlb19hcmVhOyBpKyspIHsKLSAgICBSID0gKCgqcCkgJiAweGZmMDAwMCkgPj4gKDE2IC0gMSk7Ci0gICAgRyA9ICgoKnApICYgMHhmZjAwKSA+PiAoOCAtIDIpOwotICAgIEIgPSAoKnApICYgMHhmZjsKLSAgICB2ID0gKFIgKyBHICsgQikgLSAoZ2ludCkgKCpxKTsKLSAgICAqcSA9IChnaW50MTYpIChSICsgRyArIEIpOwotICAgICpyID0gKCh2ICsgeV90aHJlc2hvbGQpID4+IDI0KSB8ICgoeV90aHJlc2hvbGQgLSB2KSA+PiAyNCk7Ci0KLSAgICBwKys7Ci0gICAgcSsrOwotICAgIHIrKzsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3JhZGlvYWN0dl90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIEdzdFJhZGlvYWNUViAqZmlsdGVyID0gR1NUX1JBRElPQUNUViAodmZpbHRlcik7Ci0gIGd1aW50MzIgKnNyYywgKmRlc3Q7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gIGd1aW50MzIgYSwgYjsKLSAgZ3VpbnQ4ICpkaWZmLCAqcDsKLSAgZ3VpbnQzMiAqcGFsZXR0ZTsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5fZnJhbWUtPmJ1ZmZlcik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpLT5zZWdtZW50LAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyKSwgc3RyZWFtX3RpbWUpOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSAgaWYgKEdTVF9WSURFT19GUkFNRV9GT1JNQVQgKGluX2ZyYW1lKSA9PSBHU1RfVklERU9fRk9STUFUX1JHQngpIHsKLSAgICBwYWxldHRlID0gJnBhbGV0dGVzW0NPTE9SUyAqIGZpbHRlci0+Y29sb3JdOwotICB9IGVsc2UgewotICAgIHBhbGV0dGUgPSAmcGFsZXR0ZXNbQ09MT1JTICogc3dhcF90YWJbZmlsdGVyLT5jb2xvcl1dOwotICB9Ci0jZWxzZQotICBpZiAoR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCAoaW5fZnJhbWUpID09IEdTVF9WSURFT19GT1JNQVRfeEJHUikgewotICAgIHBhbGV0dGUgPSAmcGFsZXR0ZXNbQ09MT1JTICogZmlsdGVyLT5jb2xvcl07Ci0gIH0gZWxzZSB7Ci0gICAgcGFsZXR0ZSA9ICZwYWxldHRlc1tDT0xPUlMgKiBzd2FwX3RhYltmaWx0ZXItPmNvbG9yXV07Ci0gIH0KLSNlbmRpZgotICBkaWZmID0gZmlsdGVyLT5kaWZmOwotCi0gIGlmIChmaWx0ZXItPm1vZGUgPT0gMyAmJiBmaWx0ZXItPnRyaWdnZXIpCi0gICAgZmlsdGVyLT5zbmFwdGltZSA9IDA7Ci0gIGVsc2UgaWYgKGZpbHRlci0+bW9kZSA9PSAzICYmICFmaWx0ZXItPnRyaWdnZXIpCi0gICAgZmlsdGVyLT5zbmFwdGltZSA9IDE7Ci0KLSAgaWYgKGZpbHRlci0+bW9kZSAhPSAyIHx8IGZpbHRlci0+c25hcHRpbWUgPD0gMCkgewotICAgIGltYWdlX2Jnc3VidHJhY3RfdXBkYXRlX3kgKHNyYywgZmlsdGVyLT5iYWNrZ3JvdW5kLCBkaWZmLAotICAgICAgICB3aWR0aCAqIGhlaWdodCwgTUFHSUNfVEhSRVNIT0xEICogNyk7Ci0gICAgaWYgKGZpbHRlci0+bW9kZSA9PSAwIHx8IGZpbHRlci0+c25hcHRpbWUgPD0gMCkgewotICAgICAgZGlmZiArPSBmaWx0ZXItPmJ1Zl9tYXJnaW5fbGVmdDsKLSAgICAgIHAgPSBmaWx0ZXItPmJsdXJ6b29tYnVmOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGZpbHRlci0+YnVmX2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBmaWx0ZXItPmJ1Zl93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgcFt4XSB8PSBkaWZmW3hdID4+IDM7Ci0gICAgICAgIH0KLSAgICAgICAgZGlmZiArPSB3aWR0aDsKLSAgICAgICAgcCArPSBmaWx0ZXItPmJ1Zl93aWR0aDsKLSAgICAgIH0KLSAgICAgIGlmIChmaWx0ZXItPm1vZGUgPT0gMSB8fCBmaWx0ZXItPm1vZGUgPT0gMikgewotICAgICAgICBtZW1jcHkgKGZpbHRlci0+c25hcGZyYW1lLCBzcmMsIHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGJsdXJ6b29tY29yZSAoZmlsdGVyKTsKLQotICBpZiAoZmlsdGVyLT5tb2RlID09IDEgfHwgZmlsdGVyLT5tb2RlID09IDIpIHsKLSAgICBzcmMgPSBmaWx0ZXItPnNuYXBmcmFtZTsKLSAgfQotICBwID0gZmlsdGVyLT5ibHVyem9vbWJ1ZjsKLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgZm9yICh4ID0gMDsgeCA8IGZpbHRlci0+YnVmX21hcmdpbl9sZWZ0OyB4KyspIHsKLSAgICAgICpkZXN0KysgPSAqc3JjKys7Ci0gICAgfQotICAgIGZvciAoeCA9IDA7IHggPCBmaWx0ZXItPmJ1Zl93aWR0aDsgeCsrKSB7Ci0gICAgICBhID0gKnNyYysrICYgMHhmZWZlZmY7Ci0gICAgICBiID0gcGFsZXR0ZVsqcCsrXTsKLSAgICAgIGEgKz0gYjsKLSAgICAgIGIgPSBhICYgMHgxMDEwMTAwOwotICAgICAgKmRlc3QrKyA9IGEgfCAoYiAtIChiID4+IDgpKTsKLSAgICB9Ci0gICAgZm9yICh4ID0gMDsgeCA8IGZpbHRlci0+YnVmX21hcmdpbl9yaWdodDsgeCsrKSB7Ci0gICAgICAqZGVzdCsrID0gKnNyYysrOwotICAgIH0KLSAgfQotCi0gIGlmIChmaWx0ZXItPm1vZGUgPT0gMSB8fCBmaWx0ZXItPm1vZGUgPT0gMikgewotICAgIGZpbHRlci0+c25hcHRpbWUtLTsKLSAgICBpZiAoZmlsdGVyLT5zbmFwdGltZSA8IDApIHsKLSAgICAgIGZpbHRlci0+c25hcHRpbWUgPSBmaWx0ZXItPmludGVydmFsOwotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JhZGlvYWN0dl9zZXRfaW5mbyAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLCBHc3RDYXBzICogaW5jYXBzLAotICAgIEdzdFZpZGVvSW5mbyAqIGluX2luZm8sIEdzdENhcHMgKiBvdXRjYXBzLCBHc3RWaWRlb0luZm8gKiBvdXRfaW5mbykKLXsKLSAgR3N0UmFkaW9hY1RWICpmaWx0ZXIgPSBHU1RfUkFESU9BQ1RWICh2ZmlsdGVyKTsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluX2luZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluX2luZm8pOwotCi0gIGZpbHRlci0+YnVmX3dpZHRoX2Jsb2NrcyA9IHdpZHRoIC8gMzI7Ci0gIGlmIChmaWx0ZXItPmJ1Zl93aWR0aF9ibG9ja3MgPiAyNTUpCi0gICAgZ290byB0b29fd2lkZTsKLQotICBmaWx0ZXItPmJ1Zl93aWR0aCA9IGZpbHRlci0+YnVmX3dpZHRoX2Jsb2NrcyAqIDMyOwotICBmaWx0ZXItPmJ1Zl9oZWlnaHQgPSBoZWlnaHQ7Ci0gIGZpbHRlci0+YnVmX2FyZWEgPSBmaWx0ZXItPmJ1Zl9oZWlnaHQgKiBmaWx0ZXItPmJ1Zl93aWR0aDsKLSAgZmlsdGVyLT5idWZfbWFyZ2luX2xlZnQgPSAod2lkdGggLSBmaWx0ZXItPmJ1Zl93aWR0aCkgLyAyOwotICBmaWx0ZXItPmJ1Zl9tYXJnaW5fcmlnaHQgPQotICAgICAgaGVpZ2h0IC0gZmlsdGVyLT5idWZfd2lkdGggLSBmaWx0ZXItPmJ1Zl9tYXJnaW5fbGVmdDsKLQotICBnX2ZyZWUgKGZpbHRlci0+Ymx1cnpvb21idWYpOwotICBmaWx0ZXItPmJsdXJ6b29tYnVmID0gZ19uZXcwIChndWludDgsIGZpbHRlci0+YnVmX2FyZWEgKiAyKTsKLQotICBnX2ZyZWUgKGZpbHRlci0+Ymx1cnpvb214KTsKLSAgZmlsdGVyLT5ibHVyem9vbXggPSBnX25ldzAgKGdpbnQsIGZpbHRlci0+YnVmX3dpZHRoKTsKLQotICBnX2ZyZWUgKGZpbHRlci0+Ymx1cnpvb215KTsKLSAgZmlsdGVyLT5ibHVyem9vbXkgPSBnX25ldzAgKGdpbnQsIGZpbHRlci0+YnVmX2hlaWdodCk7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPnNuYXBmcmFtZSk7Ci0gIGZpbHRlci0+c25hcGZyYW1lID0gZ19uZXcgKGd1aW50MzIsIHdpZHRoICogaGVpZ2h0KTsKLQotICBnX2ZyZWUgKGZpbHRlci0+ZGlmZik7Ci0gIGZpbHRlci0+ZGlmZiA9IGdfbmV3IChndWludDgsIHdpZHRoICogaGVpZ2h0KTsKLQotICBnX2ZyZWUgKGZpbHRlci0+YmFja2dyb3VuZCk7Ci0gIGZpbHRlci0+YmFja2dyb3VuZCA9IGdfbmV3MCAoZ2ludDE2LCB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgc2V0VGFibGUgKGZpbHRlcik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi10b29fd2lkZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImZyYW1lIHRvbyB3aWRlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JhZGlvYWN0dl9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RSYWRpb2FjVFYgKmZpbHRlciA9IEdTVF9SQURJT0FDVFYgKHRyYW5zKTsKLQotICBmaWx0ZXItPnNuYXB0aW1lID0gMDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yYWRpb2FjdHZfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJhZGlvYWNUViAqZmlsdGVyID0gR1NUX1JBRElPQUNUViAob2JqZWN0KTsKLQotICBnX2ZyZWUgKGZpbHRlci0+c25hcGZyYW1lKTsKLSAgZmlsdGVyLT5zbmFwZnJhbWUgPSBOVUxMOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5ibHVyem9vbWJ1Zik7Ci0gIGZpbHRlci0+Ymx1cnpvb21idWYgPSBOVUxMOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5kaWZmKTsKLSAgZmlsdGVyLT5kaWZmID0gTlVMTDsKLQotICBnX2ZyZWUgKGZpbHRlci0+YmFja2dyb3VuZCk7Ci0gIGZpbHRlci0+YmFja2dyb3VuZCA9IE5VTEw7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmJsdXJ6b29teCk7Ci0gIGZpbHRlci0+Ymx1cnpvb214ID0gTlVMTDsKLQotICBnX2ZyZWUgKGZpbHRlci0+Ymx1cnpvb215KTsKLSAgZmlsdGVyLT5ibHVyem9vbXkgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yYWRpb2FjdHZfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJhZGlvYWNUViAqZmlsdGVyID0gR1NUX1JBRElPQUNUViAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZmlsdGVyLT5tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgaWYgKGZpbHRlci0+bW9kZSA9PSAzKQotICAgICAgICBmaWx0ZXItPnNuYXB0aW1lID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT0xPUjoKLSAgICAgIGZpbHRlci0+Y29sb3IgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJWQUw6Ci0gICAgICBmaWx0ZXItPmludGVydmFsID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RSSUdHRVI6Ci0gICAgICBmaWx0ZXItPnRyaWdnZXIgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JhZGlvYWN0dl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UmFkaW9hY1RWICpmaWx0ZXIgPSBHU1RfUkFESU9BQ1RWIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGZpbHRlci0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09MT1I6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgZmlsdGVyLT5jb2xvcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJWQUw6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgZmlsdGVyLT5pbnRlcnZhbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFJJR0dFUjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPnRyaWdnZXIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JhZGlvYWN0dl9jbGFzc19pbml0IChHc3RSYWRpb2FjVFZDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9yYWRpb2FjdHZfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcmFkaW9hY3R2X2dldF9wcm9wZXJ0eTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9yYWRpb2FjdHZfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtb2RlIiwgIk1vZGUiLAotICAgICAgICAgICJNb2RlIiwgR1NUX1RZUEVfUkFESU9BQ1RWX01PREUsIERFRkFVTFRfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTE9SLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJjb2xvciIsICJDb2xvciIsCi0gICAgICAgICAgIkNvbG9yIiwgR1NUX1RZUEVfUkFESU9BQ1RWX0NPTE9SLCBERUZBVUxUX0NPTE9SLAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJpbnRlcnZhbCIsICJJbnRlcnZhbCIsCi0gICAgICAgICAgIlNuYXBzaG90IGludGVydmFsIChpbiBzdHJvYmUgbW9kZSkiLCAwLCBHX01BWElOVCwgREVGQVVMVF9JTlRFUlZBTCwKLSAgICAgICAgICBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UUklHR0VSLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJ0cmlnZ2VyIiwgIlRyaWdnZXIiLAotICAgICAgICAgICJUcmlnZ2VyIChpbiB0cmlnZ2VyIG1vZGUpIiwgREVGQVVMVF9UUklHR0VSLAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUmFkaW9hY1RWIGVmZmVjdCIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAibW90aW9uLWVubGlnaHRtZW50IGVmZmVjdCIsCi0gICAgICAiRlVLVUNISSwgS2VudGFyb3UgPGZ1a3VjaGlAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgIgotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9yYWRpb2FjdHZfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9yYWRpb2FjdHZfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JhZGlvYWN0dl9zdGFydCk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JhZGlvYWN0dl9zZXRfaW5mbyk7Ci0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JhZGlvYWN0dl90cmFuc2Zvcm1fZnJhbWUpOwotCi0gIG1ha2VQYWxldHRlICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JhZGlvYWN0dl9pbml0IChHc3RSYWRpb2FjVFYgKiBmaWx0ZXIpCi17Ci0gIGZpbHRlci0+bW9kZSA9IERFRkFVTFRfTU9ERTsKLSAgZmlsdGVyLT5jb2xvciA9IERFRkFVTFRfQ09MT1I7Ci0gIGZpbHRlci0+aW50ZXJ2YWwgPSBERUZBVUxUX0lOVEVSVkFMOwotICBmaWx0ZXItPnRyaWdnZXIgPSBERUZBVUxUX1RSSUdHRVI7Ci19CmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RyYWRpb2FjLmggYi9nc3QvZWZmZWN0di9nc3RyYWRpb2FjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZDdjOTkuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0cmFkaW9hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDcmFkaW9hY3lyaWdodCAoQykgPDIwMDk+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIEVmZmVjVFYgLSBSZWFsdGltZSBEaWdpdGFsIFZpZGVvIEVmZmVjdG9yCi0gKiBDcmFkaW9hY3lyaWdodCAoQykgMjAwMS0yMDA2IEZVS1VDSEkgS2VudGFybwotICoKLSAqIFJhZGlvYWNUViAtIG1vdGlvbi1lbmxpZ2h0bWVudCBlZmZlY3QuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBGVUtVQ0hJIEtlbnRhcm8KLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIHJhZGlvYWN0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhyYWRpb2FjZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjcmFkaW9hY3kgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JBRElPQUNfSF9fCi0jZGVmaW5lIF9fR1NUX1JBRElPQUNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JBRElPQUNUViBcCi0gIChnc3RfcmFkaW9hY3R2X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SQURJT0FDVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SQURJT0FDVFYsR3N0UmFkaW9hY1RWKSkKLSNkZWZpbmUgR1NUX1JBRElPQUNUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SQURJT0FDVFYsR3N0UmFkaW9hY1RWQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUkFESU9BQ1RWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUkFESU9BQ1RWKSkKLSNkZWZpbmUgR1NUX0lTX1JBRElPQUNUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SQURJT0FDVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UmFkaW9hY1RWIEdzdFJhZGlvYWNUVjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSYWRpb2FjVFZDbGFzcyBHc3RSYWRpb2FjVFZDbGFzczsKLQotc3RydWN0IF9Hc3RSYWRpb2FjVFYKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgZWxlbWVudDsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBnaW50IG1vZGU7Ci0gIGdpbnQgY29sb3I7Ci0gIGd1aW50IGludGVydmFsOwotICBnYm9vbGVhbiB0cmlnZ2VyOwotCi0gIGdpbnQgc25hcHRpbWU7Ci0KLSAgZ3VpbnQzMiAqc25hcGZyYW1lOwotICBndWludDggKmJsdXJ6b29tYnVmOwotICBndWludDggKmRpZmY7Ci0gIGdpbnQxNiAqYmFja2dyb3VuZDsKLSAgZ2ludCAqYmx1cnpvb214OwotICBnaW50ICpibHVyem9vbXk7Ci0KLSAgZ2ludCBidWZfd2lkdGhfYmxvY2tzOwotICBnaW50IGJ1Zl93aWR0aDsKLSAgZ2ludCBidWZfaGVpZ2h0OwotICBnaW50IGJ1Zl9hcmVhOwotICBnaW50IGJ1Zl9tYXJnaW5fcmlnaHQ7Ci0gIGdpbnQgYnVmX21hcmdpbl9sZWZ0OwotfTsKLQotc3RydWN0IF9Hc3RSYWRpb2FjVFZDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9yYWRpb2FjdHZfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUkFESU9BQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lZmZlY3R2L2dzdHJldi5jIGIvZ3N0L2VmZmVjdHYvZ3N0cmV2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmOTU5NTAuLjAwMDAwMDAKLS0tIGEvZ3N0L2VmZmVjdHYvZ3N0cmV2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIEVmZmVjVFYgLSBSZWFsdGltZSBEaWdpdGFsIFZpZGVvIEVmZmVjdG9yCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIHJldlRWIGJhc2VkIG9uIFJ1dHQtRXRyYSBWaWRlbyBTeW50aGVzaXplciAxOTc0PwotCi0gKiAoYykyMDAyIEVkIFRhbm5lbmJhdW0KLSAqCi0gKiBUaGlzIGVmZmVjdCBhY3RzIGxpa2UgYSB3YXZlZm9ybSBtb25pdG9yIG9uIGVhY2ggbGluZS4KLSAqIEl0IHdhcyBvcmlnaW5hbGx5IGRvbmUgYnkgZGVmbGVjdGluZyB0aGUgZWxlY3Ryb24gYmVhbSBvbiBhIG1vbml0b3IgdXNpbmcKLSAqIGFkZGl0aW9uYWwgZWxlY3Ryb21hZ25ldHMgb24gdGhlIHlva2Ugb2YgYSBiL3cgQ1JULiAKLSAqIEhlcmUgaXQgaXMgZW11bGF0ZWQgZGlnaXRhbGx5LgotCi0gKiBFeHBlcmltYWVudGFsIHRhcGVzIHdlcmUgbWFkZSB3aXRoIHRoaXMgc3lzdGVtIGJ5IEJpbGwgYW5kIAotICogTG91aXNlIEV0cmEgYW5kIFdvb2R5IGFuZCBTdGVpbmEgVmFzdWxrYQotCi0gKiBUaGUgbGluZSBzcGFjaW5nIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZSAxIGFuZCAyIEtleXMuCi0gKiBUaGUgZ2FpbiBpcyBjb250cm9sbGVkIHVzaW5nIHRoZSAzIGFuZCA0IGtleXMuCi0gKiBUaGUgdXBkYXRlIHJhdGUgaXMgY29udHJvbGxlZCB1c2luZyB0aGUgMCBhbmQgLSBrZXlzLgotIAotICogRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcmV2dHYKLSAqCi0gKiBSZXZUViBhY3RzIGxpa2UgYSB2aWRlbyB3YXZlZm9ybSBtb25pdG9yIGZvciBlYWNoIGxpbmUgb2YgdmlkZW8KLSAqIHByb2Nlc3NlZC4gVGhpcyBjcmVhdGVzIGEgcHNldWRvIDNEIGVmZmVjdCBiYXNlZCBvbiB0aGUgYnJpZ2h0bmVzcwotICogb2YgdGhlIHZpZGVvIGFsb25nIGVhY2ggbGluZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgcmV2dHYgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgcmV2dHYgb24gYSB0ZXN0IHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0cmV2LmgiCi0KLSNkZWZpbmUgVEhFX0NPTE9SIDB4ZmZmZmZmZmYKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfREVMQVksCi0gIFBST1BfTElORVNQQUNFLAotICBQUk9QX0dBSU4KLX07Ci0KLSNkZWZpbmUgZ3N0X3JldnR2X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJldlRWLCBnc3RfcmV2dHYsIEdTVF9UWVBFX1ZJREVPX0ZJTFRFUik7Ci0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0jZGVmaW5lIENBUFNfU1RSIEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEJHUngsIFJHQnggfSIpCi0jZWxzZQotI2RlZmluZSBDQVBTX1NUUiBHU1RfVklERU9fQ0FQU19NQUtFICgieyB4QkdSLCB4UkdCIH0iKQotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcmV2dHZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcmV2dHZfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcmV2dHZfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBHc3RSZXZUViAqZmlsdGVyID0gR1NUX1JFVlRWICh2ZmlsdGVyKTsKLSAgZ3VpbnQzMiAqc3JjLCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0LCBzc3RyaWRlLCBkc3RyaWRlOwotICBndWludDMyICpuc3JjOwotICBnaW50IHksIHgsIFIsIEcsIEIsIHl2YWw7Ci0gIGdpbnQgbGluZXNwYWNlLCB2c2NhbGU7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbl9mcmFtZS0+YnVmZmVyKTsKLSAgc3RyZWFtX3RpbWUgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZHU1RfQkFTRV9UUkFOU0ZPUk0gKHZmaWx0ZXIpLT5zZWdtZW50LAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyKSwgc3RyZWFtX3RpbWUpOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIHNzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLSAgZHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIC8qIENsZWFyIGV2ZXJ5dGhpbmcgdG8gYmxhY2sgKi8KLSAgbWVtc2V0IChkZXN0LCAwLCBkc3RyaWRlICogaGVpZ2h0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gIGxpbmVzcGFjZSA9IGZpbHRlci0+bGluZXNwYWNlOwotICB2c2NhbGUgPSBmaWx0ZXItPnZzY2FsZTsKLQotICAvKiBkcmF3IHRoZSBvZmZzZXQgbGluZXMgKi8KLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSArPSBsaW5lc3BhY2UpIHsKLSAgICBmb3IgKHggPSAwOyB4IDw9IHdpZHRoOyB4KyspIHsKLSAgICAgIG5zcmMgPSBzcmMgKyAoeSAqIHNzdHJpZGUgLyA0KSArIHg7Ci0KLSAgICAgIC8qIENhbGMgWSBWYWx1ZSBmb3IgY3VycGl4ICovCi0gICAgICBSID0gKCgqbnNyYykgJiAweGZmMDAwMCkgPj4gKDE2IC0gMSk7Ci0gICAgICBHID0gKCgqbnNyYykgJiAweGZmMDApID4+ICg4IC0gMik7Ci0gICAgICBCID0gKCpuc3JjKSAmIDB4ZmY7Ci0KLSAgICAgIHl2YWwgPSB5IC0gKChzaG9ydCkgKFIgKyBHICsgQikgLyB2c2NhbGUpOwotCi0gICAgICBpZiAoeXZhbCA+IDApIHsKLSAgICAgICAgZGVzdFt4ICsgKHl2YWwgKiBkc3RyaWRlIC8gNCldID0gVEhFX0NPTE9SOwotICAgICAgfQotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcmV2dHZfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJldlRWICpmaWx0ZXIgPSBHU1RfUkVWVFYgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVMQVk6Ci0gICAgICBmaWx0ZXItPnZncmFidGltZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xJTkVTUEFDRToKLSAgICAgIGZpbHRlci0+bGluZXNwYWNlID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfR0FJTjoKLSAgICAgIGZpbHRlci0+dnNjYWxlID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JldnR2X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSZXZUViAqZmlsdGVyID0gR1NUX1JFVlRWIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ERUxBWToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+dmdyYWJ0aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MSU5FU1BBQ0U6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPmxpbmVzcGFjZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfR0FJTjoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+dnNjYWxlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZXZ0dl9jbGFzc19pbml0IChHc3RSZXZUVkNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcmV2dHZfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcmV2dHZfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfREVMQVksCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZGVsYXkiLCAiRGVsYXkiLCAiRGVsYXkgaW4gZnJhbWVzIGJldHdlZW4gdXBkYXRlcyIsCi0gICAgICAgICAgMSwgMTAwLCAxLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9MSU5FU1BBQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibGluZXNwYWNlIiwgIkxpbmVzcGFjZSIsICJDb250cm9sIGxpbmUgc3BhY2luZyIsIDEsCi0gICAgICAgICAgMTAwLCA2LAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9HQUlOLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImdhaW4iLCAiR2FpbiIsICJDb250cm9sIGdhaW4iLCAxLCAyMDAsIDUwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUmV2VFYgZWZmZWN0IiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L1ZpZGVvIiwKLSAgICAgICJBIHZpZGVvIHdhdmVmb3JtIG1vbml0b3IgZm9yIGVhY2ggbGluZSBvZiB2aWRlbyBwcm9jZXNzZWQiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5iZT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcmV2dHZfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9yZXZ0dl9zcmNfdGVtcGxhdGUpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JldnR2X3RyYW5zZm9ybV9mcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcmV2dHZfaW5pdCAoR3N0UmV2VFYgKiByZXN0dikKLXsKLSAgcmVzdHYtPnZncmFidGltZSA9IDE7Ci0gIHJlc3R2LT52Z3JhYiA9IDA7Ci0gIHJlc3R2LT5saW5lc3BhY2UgPSA2OwotICByZXN0di0+dnNjYWxlID0gNTA7Ci19CmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RyZXYuaCBiL2dzdC9lZmZlY3R2L2dzdHJldi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTgzMTFiLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHJldi5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIEVmZmVjVFYgLSBSZWFsdGltZSBEaWdpdGFsIFZpZGVvIEVmZmVjdG9yCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIHJldlRWIGJhc2VkIG9uIFJ1dHQtRXRyYSBWaWRlbyBTeW50aGVzaXplciAxOTc0PwotCi0gKiAoYykyMDAyIEVkIFRhbm5lbmJhdW0KLSAqCi0gKiBUaGlzIGVmZmVjdCBhY3RzIGxpa2UgYSB3YXZlZm9ybSBtb25pdG9yIG9uIGVhY2ggbGluZS4KLSAqIEl0IHdhcyBvcmlnaW5hbGx5IGRvbmUgYnkgZGVmbGVjdGluZyB0aGUgZWxlY3Ryb24gYmVhbSBvbiBhIG1vbml0b3IgdXNpbmcKLSAqIGFkZGl0aW9uYWwgZWxlY3Ryb21hZ25ldHMgb24gdGhlIHlva2Ugb2YgYSBiL3cgQ1JULiAKLSAqIEhlcmUgaXQgaXMgZW11bGF0ZWQgZGlnaXRhbGx5LgotCi0gKiBFeHBlcmltYWVudGFsIHRhcGVzIHdlcmUgbWFkZSB3aXRoIHRoaXMgc3lzdGVtIGJ5IEJpbGwgYW5kIAotICogTG91aXNlIEV0cmEgYW5kIFdvb2R5IGFuZCBTdGVpbmEgVmFzdWxrYQotCi0gKiBUaGUgbGluZSBzcGFjaW5nIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZSAxIGFuZCAyIEtleXMuCi0gKiBUaGUgZ2FpbiBpcyBjb250cm9sbGVkIHVzaW5nIHRoZSAzIGFuZCA0IGtleXMuCi0gKiBUaGUgdXBkYXRlIHJhdGUgaXMgY29udHJvbGxlZCB1c2luZyB0aGUgMCBhbmQgLSBrZXlzLgotIAotICogRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SRVZfSF9fCi0jZGVmaW5lIF9fR1NUX1JFVl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUkVWVFYgXAotICAoZ3N0X3JldnR2X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SRVZUVihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JFVlRWLEdzdFJldlRWKSkKLSNkZWZpbmUgR1NUX1JFVlRWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JFVlRWLEdzdFJldlRWQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUkVWVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SRVZUVikpCi0jZGVmaW5lIEdTVF9JU19SRVZUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SRVZUVikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSZXZUViBHc3RSZXZUVjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSZXZUVkNsYXNzIEdzdFJldlRWQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0UmV2VFYKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ2ludCB2Z3JhYnRpbWU7Ci0gIGdpbnQgdmdyYWI7Ci0gIGdpbnQgbGluZXNwYWNlOwotICBnaW50IHZzY2FsZTsKLX07Ci0KLXN0cnVjdCBfR3N0UmV2VFZDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9yZXZ0dl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SRVZfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RyaXBwbGUuYyBiL2dzdC9lZmZlY3R2L2dzdHJpcHBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGFjNmY3Li4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHJpcHBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUViAtIFJlYWx0aW1lIERpZ2l0YWwgVmlkZW8gRWZmZWN0b3IKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IEZVS1VDSEkgS2VudGFybwotICoKLSAqIFJpcHBsZVRWIC0gV2F0ZXIgcmlwcGxlIGVmZmVjdC4KLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZVS1VDSEkgS2VudGFybwotICoKLSAqIFRoaXMgY29tYmluZXMgdGhlIFJpcHBsZVRWIGFuZCBCYWx0YW5UViBlZmZlY3RzLCB3aGljaCBhcmUKLSAqIHZlcnkgc2ltaWxhci4gQmFsdGFuVFYgaXMgdXNlZCBpZiB0aGUgZmVlZGJhY2sgcHJvcGVydHkgaXMgc2V0Ci0gKiB0byBUUlVFLCBvdGhlcndpc2UgUmlwcGxlVFYgaXMgdXNlZC4KLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1yaXBwbGV0dgotICoKLSAqIFJpcHBsZVRWIGRvZXMgcmlwcGxlIG1hcmsgZWZmZWN0IG9uIHRoZSB2aWRlbyBpbnB1dC4gVGhlIHJpcHBsZSBpcyBjYXVzZWQKLSAqIGJ5IG1vdGlvbiBvciByYW5kb20gcmFpbiBkcm9wcy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgcmlwcGxldHYgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2YgcmlwcGxldHYgb24gYSB0ZXN0IHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0cmlwcGxlLmgiCi0jaW5jbHVkZSAiZ3N0ZWZmZWN0di5oIgotCi0jZGVmaW5lIERFRkFVTFRfTU9ERSAwCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1JFU0VULAotICBQUk9QX01PREUKLX07Ci0KLXN0YXRpYyBnaW50IHNxcnRhYmxlWzI1Nl07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUklQUExFVFZfTU9ERSAoZ3N0X3JpcHBsZXR2X21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3JpcHBsZXR2X21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKLQotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBlbnVtdmFsdWVbXSA9IHsKLSAgICB7MCwgIk1vdGlvbiBEZXRlY3Rpb24iLCAibW90aW9uLWRldGVjdGlvbiJ9LAotICAgIHsxLCAiUmFpbiIsICJyYWluIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghdHlwZSkgewotICAgIHR5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UmlwcGxlVFZNb2RlIiwgZW51bXZhbHVlKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotI2RlZmluZSBnc3RfcmlwcGxldHZfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UmlwcGxlVFYsIGdzdF9yaXBwbGV0diwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9yaXBwbGV0dl9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQkdSeCwgUkdCeCwgeEJHUiwgeFJHQiB9IikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9yaXBwbGV0dl9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQkdSeCwgUkdCeCwgeEJHUiwgeFJHQiB9IikpCi0gICAgKTsKLQotc3RhdGljIGNvbnN0IGdpbnQgcG9pbnQgPSAxNjsKLXN0YXRpYyBjb25zdCBnaW50IGltcGFjdCA9IDI7Ci1zdGF0aWMgY29uc3QgZ2ludCBkZWNheSA9IDg7Ci1zdGF0aWMgY29uc3QgZ2ludCBsb29wbnVtID0gMjsKLQotc3RhdGljIHZvaWQKLXNldFRhYmxlICh2b2lkKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgc3FydGFibGVbaV0gPSBpICogaTsKLSAgfQotICBmb3IgKGkgPSAxOyBpIDw9IDEyODsgaSsrKSB7Ci0gICAgc3FydGFibGVbMjU2IC0gaV0gPSAtaSAqIGk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWltYWdlX2Jnc2V0X3kgKGd1aW50MzIgKiBzcmMsIGdpbnQxNiAqIGJhY2tncm91bmQsIGdpbnQgdmlkZW9fYXJlYSkKLXsKLSAgZ2ludCBpOwotICBnaW50IFIsIEcsIEI7Ci0gIGd1aW50MzIgKnA7Ci0gIGdpbnQxNiAqcTsKLQotICBwID0gc3JjOwotICBxID0gYmFja2dyb3VuZDsKLSAgZm9yIChpID0gMDsgaSA8IHZpZGVvX2FyZWE7IGkrKykgewotICAgIFIgPSAoKCpwKSAmIDB4ZmYwMDAwKSA+PiAoMTYgLSAxKTsKLSAgICBHID0gKCgqcCkgJiAweGZmMDApID4+ICg4IC0gMik7Ci0gICAgQiA9ICgqcCkgJiAweGZmOwotICAgICpxID0gKGdpbnQxNikgKFIgKyBHICsgQik7Ci0gICAgcCsrOwotICAgIHErKzsKLSAgfQotfQotCi1zdGF0aWMgZ2ludAotc2V0QmFja2dyb3VuZCAoR3N0UmlwcGxlVFYgKiBmaWx0ZXIsIGd1aW50MzIgKiBzcmMpCi17Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbzsKLQotICBpbmZvID0gJkdTVF9WSURFT19GSUxURVIgKGZpbHRlciktPmluX2luZm87Ci0KLSAgaW1hZ2VfYmdzZXRfeSAoc3JjLCBmaWx0ZXItPmJhY2tncm91bmQsCi0gICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoaW5mbykgKiBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pKTsKLSAgZmlsdGVyLT5iZ19pc19zZXQgPSBUUlVFOwotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotaW1hZ2VfYmdzdWJ0cmFjdF91cGRhdGVfeSAoZ3VpbnQzMiAqIHNyYywgZ2ludDE2ICogYmFja2dyb3VuZCwgZ3VpbnQ4ICogZGlmZiwKLSAgICBnaW50IHZpZGVvX2FyZWEpCi17Ci0gIGdpbnQgaTsKLSAgZ2ludCBSLCBHLCBCOwotICBndWludDMyICpwOwotICBnaW50MTYgKnE7Ci0gIGd1aW50OCAqcjsKLSAgZ2ludCB2OwotCi0gIHAgPSBzcmM7Ci0gIHEgPSBiYWNrZ3JvdW5kOwotICByID0gZGlmZjsKLSAgZm9yIChpID0gMDsgaSA8IHZpZGVvX2FyZWE7IGkrKykgewotICAgIFIgPSAoKCpwKSAmIDB4ZmYwMDAwKSA+PiAoMTYgLSAxKTsKLSAgICBHID0gKCgqcCkgJiAweGZmMDApID4+ICg4IC0gMik7Ci0gICAgQiA9ICgqcCkgJiAweGZmOwotICAgIHYgPSAoUiArIEcgKyBCKSAtIChnaW50KSAoKnEpOwotICAgICpxID0gKGdpbnQxNikgKFIgKyBHICsgQik7Ci0gICAgKnIgPSAoKHYgKyA3MCAqIDcpID4+IDI0KSB8ICgoNzAgKiA3IC0gdikgPj4gMjQpOwotCi0gICAgcCsrOwotICAgIHErKzsKLSAgICByKys7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLW1vdGlvbmRldGVjdCAoR3N0UmlwcGxlVFYgKiBmaWx0ZXIsIGd1aW50MzIgKiBzcmMpCi17Ci0gIGd1aW50OCAqZGlmZiA9IGZpbHRlci0+ZGlmZjsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50ICpwLCAqcTsKLSAgZ2ludCB4LCB5LCBoOwotICBHc3RWaWRlb0luZm8gKmluZm87Ci0KLSAgaW5mbyA9ICZHU1RfVklERU9fRklMVEVSIChmaWx0ZXIpLT5pbl9pbmZvOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pOwotCi0gIGlmICghZmlsdGVyLT5iZ19pc19zZXQpCi0gICAgc2V0QmFja2dyb3VuZCAoZmlsdGVyLCBzcmMpOwotCi0gIGltYWdlX2Jnc3VidHJhY3RfdXBkYXRlX3kgKHNyYywgZmlsdGVyLT5iYWNrZ3JvdW5kLCBmaWx0ZXItPmRpZmYsCi0gICAgICB3aWR0aCAqIGhlaWdodCk7Ci0gIHAgPSBmaWx0ZXItPm1hcDEgKyBmaWx0ZXItPm1hcF93ICsgMTsKLSAgcSA9IGZpbHRlci0+bWFwMiArIGZpbHRlci0+bWFwX3cgKyAxOwotICBkaWZmICs9IHdpZHRoICsgMjsKLQotICBmb3IgKHkgPSBmaWx0ZXItPm1hcF9oIC0gMjsgeSA+IDA7IHktLSkgewotICAgIGZvciAoeCA9IGZpbHRlci0+bWFwX3cgLSAyOyB4ID4gMDsgeC0tKSB7Ci0gICAgICBoID0gKGdpbnQpICogZGlmZiArIChnaW50KSAqIChkaWZmICsgMSkgKyAoZ2ludCkgKiAoZGlmZiArIHdpZHRoKSArCi0gICAgICAgICAgKGdpbnQpICogKGRpZmYgKyB3aWR0aCArIDEpOwotICAgICAgaWYgKGggPiAwKSB7Ci0gICAgICAgICpwID0gaCA8PCAocG9pbnQgKyBpbXBhY3QgLSA4KTsKLSAgICAgICAgKnEgPSAqcDsKLSAgICAgIH0KLSAgICAgIHArKzsKLSAgICAgIHErKzsKLSAgICAgIGRpZmYgKz0gMjsKLSAgICB9Ci0gICAgZGlmZiArPSB3aWR0aCArIDI7Ci0gICAgcCArPSAyOwotICAgIHEgKz0gMjsKLSAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRyb3AgKGdpbnQgcG93ZXIsIGdpbnQgKiBtYXAxLCBnaW50ICogbWFwMiwgZ2ludCBtYXBfdywgZ2ludCBtYXBfaCkKLXsKLSAgZ2ludCB4LCB5OwotICBnaW50ICpwLCAqcTsKLQotICB4ID0gZmFzdHJhbmQgKCkgJSAobWFwX3cgLSA0KSArIDI7Ci0gIHkgPSBmYXN0cmFuZCAoKSAlIChtYXBfaCAtIDQpICsgMjsKLSAgcCA9IG1hcDEgKyB5ICogbWFwX3cgKyB4OwotICBxID0gbWFwMiArIHkgKiBtYXBfdyArIHg7Ci0gICpwID0gcG93ZXI7Ci0gICpxID0gcG93ZXI7Ci0gICoocCAtIG1hcF93KSA9ICoocCAtIDEpID0gKihwICsgMSkgPSAqKHAgKyBtYXBfdykgPSBwb3dlciAvIDI7Ci0gICoocCAtIG1hcF93IC0gMSkgPSAqKHAgLSBtYXBfdyArIDEpID0gKihwICsgbWFwX3cgLSAxKSA9ICoocCArIG1hcF93ICsgMSkgPQotICAgICAgcG93ZXIgLyA0OwotICAqKHEgLSBtYXBfdykgPSAqKHEgLSAxKSA9ICoocSArIDEpID0gKihxICsgbWFwX3cpID0gcG93ZXIgLyAyOwotICAqKHEgLSBtYXBfdyAtIDEpID0gKihxIC0gbWFwX3cgKyAxKSA9ICoocSArIG1hcF93IC0gMSkgPSAqKHAgKyBtYXBfdyArIDEpID0KLSAgICAgIHBvd2VyIC8gNDsKLX0KLQotc3RhdGljIHZvaWQKLXJhaW5kcm9wIChHc3RSaXBwbGVUViAqIGZpbHRlcikKLXsKLSAgZ2ludCBpOwotCi0gIGlmIChmaWx0ZXItPnBlcmlvZCA9PSAwKSB7Ci0gICAgc3dpdGNoIChmaWx0ZXItPnJhaW5fc3RhdCkgewotICAgICAgY2FzZSAwOgotICAgICAgICBmaWx0ZXItPnBlcmlvZCA9IChmYXN0cmFuZCAoKSA+PiAyMykgKyAxMDA7Ci0gICAgICAgIGZpbHRlci0+ZHJvcF9wcm9iID0gMDsKLSAgICAgICAgZmlsdGVyLT5kcm9wX3Byb2JfaW5jcmVtZW50ID0gMHgwMGZmZmZmZiAvIGZpbHRlci0+cGVyaW9kOwotICAgICAgICBmaWx0ZXItPmRyb3BfcG93ZXIgPSAoLShmYXN0cmFuZCAoKSA+PiAyOCkgLSAyKSA8PCBwb2ludDsKLSAgICAgICAgZmlsdGVyLT5kcm9wc19wZXJfZnJhbWVfbWF4ID0gMiA8PCAoZmFzdHJhbmQgKCkgPj4gMzApOyAvLyAyLDQsOCBvciAxNgotICAgICAgICBmaWx0ZXItPnJhaW5fc3RhdCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAxOgotICAgICAgICBmaWx0ZXItPmRyb3BfcHJvYiA9IDB4MDBmZmZmZmY7Ci0gICAgICAgIGZpbHRlci0+ZHJvcHNfcGVyX2ZyYW1lID0gMTsKLSAgICAgICAgZmlsdGVyLT5kcm9wX3Byb2JfaW5jcmVtZW50ID0gMTsKLSAgICAgICAgZmlsdGVyLT5wZXJpb2QgPSAoZmlsdGVyLT5kcm9wc19wZXJfZnJhbWVfbWF4IC0gMSkgKiAxNjsKLSAgICAgICAgZmlsdGVyLT5yYWluX3N0YXQgPSAyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjoKLSAgICAgICAgZmlsdGVyLT5wZXJpb2QgPSAoZmFzdHJhbmQgKCkgPj4gMjIpICsgMTAwMDsKLSAgICAgICAgZmlsdGVyLT5kcm9wX3Byb2JfaW5jcmVtZW50ID0gMDsKLSAgICAgICAgZmlsdGVyLT5yYWluX3N0YXQgPSAzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMzoKLSAgICAgICAgZmlsdGVyLT5wZXJpb2QgPSAoZmlsdGVyLT5kcm9wc19wZXJfZnJhbWVfbWF4IC0gMSkgKiAxNjsKLSAgICAgICAgZmlsdGVyLT5kcm9wX3Byb2JfaW5jcmVtZW50ID0gLTE7Ci0gICAgICAgIGZpbHRlci0+cmFpbl9zdGF0ID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDQ6Ci0gICAgICAgIGZpbHRlci0+cGVyaW9kID0gKGZhc3RyYW5kICgpID4+IDI0KSArIDYwOwotICAgICAgICBmaWx0ZXItPmRyb3BfcHJvYl9pbmNyZW1lbnQgPSAtKGZpbHRlci0+ZHJvcF9wcm9iIC8gZmlsdGVyLT5wZXJpb2QpOwotICAgICAgICBmaWx0ZXItPnJhaW5fc3RhdCA9IDU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA1OgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZmlsdGVyLT5wZXJpb2QgPSAoZmFzdHJhbmQgKCkgPj4gMjMpICsgNTAwOwotICAgICAgICBmaWx0ZXItPmRyb3BfcHJvYiA9IDA7Ci0gICAgICAgIGZpbHRlci0+cmFpbl9zdGF0ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHN3aXRjaCAoZmlsdGVyLT5yYWluX3N0YXQpIHsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgMDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICBjYXNlIDU6Ci0gICAgICBpZiAoKGZhc3RyYW5kICgpID4+IDgpIDwgZmlsdGVyLT5kcm9wX3Byb2IpIHsKLSAgICAgICAgZHJvcCAoZmlsdGVyLT5kcm9wX3Bvd2VyLCBmaWx0ZXItPm1hcDEsIGZpbHRlci0+bWFwMiwgZmlsdGVyLT5tYXBfdywKLSAgICAgICAgICAgIGZpbHRlci0+bWFwX2gpOwotICAgICAgfQotICAgICAgZmlsdGVyLT5kcm9wX3Byb2IgKz0gZmlsdGVyLT5kcm9wX3Byb2JfaW5jcmVtZW50OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICBjYXNlIDQ6Ci0gICAgICBmb3IgKGkgPSBmaWx0ZXItPmRyb3BzX3Blcl9mcmFtZSAvIDE2OyBpID4gMDsgaS0tKSB7Ci0gICAgICAgIGRyb3AgKGZpbHRlci0+ZHJvcF9wb3dlciwgZmlsdGVyLT5tYXAxLCBmaWx0ZXItPm1hcDIsIGZpbHRlci0+bWFwX3csCi0gICAgICAgICAgICBmaWx0ZXItPm1hcF9oKTsKLSAgICAgIH0KLSAgICAgIGZpbHRlci0+ZHJvcHNfcGVyX2ZyYW1lICs9IGZpbHRlci0+ZHJvcF9wcm9iX2luY3JlbWVudDsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGZpbHRlci0+cGVyaW9kLS07Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcmlwcGxldHZfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBHc3RSaXBwbGVUViAqZmlsdGVyID0gR1NUX1JJUFBMRVRWICh2ZmlsdGVyKTsKLSAgZ3VpbnQzMiAqc3JjLCAqZGVzdDsKLSAgZ2ludCB4LCB5LCBpOwotICBnaW50IGR4LCBkeSwgb19keDsKLSAgZ2ludCBoLCB2OwotICBnaW50IG1fdywgbV9oLCB2X3csIHZfaDsKLSAgZ2ludCAqcCwgKnEsICpyOwotICBnaW50OCAqdnA7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbl9mcmFtZS0+YnVmZmVyKTsKLSAgc3RyZWFtX3RpbWUgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZHU1RfQkFTRV9UUkFOU0ZPUk0gKHZmaWx0ZXIpLT5zZWdtZW50LAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyKSwgc3RyZWFtX3RpbWUpOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gIC8qIGltcGFjdCBmcm9tIHRoZSBtb3Rpb24gb3IgcmFpbiBkcm9wICovCi0gIGlmIChmaWx0ZXItPm1vZGUpCi0gICAgcmFpbmRyb3AgKGZpbHRlcik7Ci0gIGVsc2UKLSAgICBtb3Rpb25kZXRlY3QgKGZpbHRlciwgc3JjKTsKLQotICBtX3cgPSBmaWx0ZXItPm1hcF93OwotICBtX2ggPSBmaWx0ZXItPm1hcF9oOwotICB2X3cgPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgdl9oID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIC8qIHNpbXVsYXRlIHN1cmZhY2Ugd2F2ZSAqLwotCi0gIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgMzAgdGltZXMgcGVyIHNlY29uZC4gVG8gaW5jcmVhc2UgYSBzcGVlZAotICAgKiBvZiB3YXZlLCBpdGVyYXRlcyB0aGlzIGxvb3Agc2V2ZXJhbCB0aW1lcy4gKi8KLSAgZm9yIChpID0gbG9vcG51bTsgaSA+IDA7IGktLSkgewotICAgIC8qIHdhdmUgc2ltdWxhdGlvbiAqLwotICAgIHAgPSBmaWx0ZXItPm1hcDEgKyBtX3cgKyAxOwotICAgIHEgPSBmaWx0ZXItPm1hcDIgKyBtX3cgKyAxOwotICAgIHIgPSBmaWx0ZXItPm1hcDMgKyBtX3cgKyAxOwotICAgIGZvciAoeSA9IG1faCAtIDI7IHkgPiAwOyB5LS0pIHsKLSAgICAgIGZvciAoeCA9IG1fdyAtIDI7IHggPiAwOyB4LS0pIHsKLSAgICAgICAgaCA9ICoocCAtIG1fdyAtIDEpICsgKihwIC0gbV93ICsgMSkgKyAqKHAgKyBtX3cgLSAxKSArICoocCArIG1fdyArIDEpCi0gICAgICAgICAgICArICoocCAtIG1fdykgKyAqKHAgLSAxKSArICoocCArIDEpICsgKihwICsgbV93KSAtICgqcCkgKiA5OwotICAgICAgICBoID0gaCA+PiAzOwotICAgICAgICB2ID0gKnAgLSAqcTsKLSAgICAgICAgdiArPSBoIC0gKHYgPj4gZGVjYXkpOwotICAgICAgICAqciA9IHYgKyAqcDsKLSAgICAgICAgcCsrOwotICAgICAgICBxKys7Ci0gICAgICAgIHIrKzsKLSAgICAgIH0KLSAgICAgIHAgKz0gMjsKLSAgICAgIHEgKz0gMjsKLSAgICAgIHIgKz0gMjsKLSAgICB9Ci0KLSAgICAvKiBsb3cgcGFzcyBmaWx0ZXIgKi8KLSAgICBwID0gZmlsdGVyLT5tYXAzICsgbV93ICsgMTsKLSAgICBxID0gZmlsdGVyLT5tYXAyICsgbV93ICsgMTsKLSAgICBmb3IgKHkgPSBtX2ggLSAyOyB5ID4gMDsgeS0tKSB7Ci0gICAgICBmb3IgKHggPSBtX3cgLSAyOyB4ID4gMDsgeC0tKSB7Ci0gICAgICAgIGggPSAqKHAgLSBtX3cpICsgKihwIC0gMSkgKyAqKHAgKyAxKSArICoocCArIG1fdykgKyAoKnApICogNjA7Ci0gICAgICAgICpxID0gaCA+PiA2OwotICAgICAgICBwKys7Ci0gICAgICAgIHErKzsKLSAgICAgIH0KLSAgICAgIHAgKz0gMjsKLSAgICAgIHEgKz0gMjsKLSAgICB9Ci0KLSAgICBwID0gZmlsdGVyLT5tYXAxOwotICAgIGZpbHRlci0+bWFwMSA9IGZpbHRlci0+bWFwMjsKLSAgICBmaWx0ZXItPm1hcDIgPSBwOwotICB9Ci0KLSAgdnAgPSBmaWx0ZXItPnZ0YWJsZTsKLSAgcCA9IGZpbHRlci0+bWFwMTsKLSAgZm9yICh5ID0gbV9oIC0gMTsgeSA+IDA7IHktLSkgewotICAgIGZvciAoeCA9IG1fdyAtIDE7IHggPiAwOyB4LS0pIHsKLSAgICAgIC8qIGRpZmZlcmVuY2Ugb2YgdGhlIGhlaWdodCBiZXR3ZWVuIHR3byB2b3hlbC4gVGhleSBhcmUgdHdpY2VkIHRvCi0gICAgICAgKiBlbXBoYXNpc2UgdGhlIHdhdmUuICovCi0gICAgICB2cFswXSA9IHNxcnRhYmxlWygocFswXSAtIHBbMV0pID4+IChwb2ludCAtIDEpKSAmIDB4ZmZdOwotICAgICAgdnBbMV0gPSBzcXJ0YWJsZVsoKHBbMF0gLSBwW21fd10pID4+IChwb2ludCAtIDEpKSAmIDB4ZmZdOwotICAgICAgcCsrOwotICAgICAgdnAgKz0gMjsKLSAgICB9Ci0gICAgcCsrOwotICAgIHZwICs9IDI7Ci0gIH0KLQotICB2cCA9IGZpbHRlci0+dnRhYmxlOwotCi0gIC8qIGRyYXcgcmVmcmFjdGVkIGltYWdlLiBUaGUgdmVjdG9yIHRhYmxlIGlzIHN0cmV0Y2hlZC4gKi8KLSAgZm9yICh5ID0gMDsgeSA8IHZfaDsgeSArPSAyKSB7Ci0gICAgZm9yICh4ID0gMDsgeCA8IHZfdzsgeCArPSAyKSB7Ci0gICAgICBoID0gKGdpbnQpIHZwWzBdOwotICAgICAgdiA9IChnaW50KSB2cFsxXTsKLSAgICAgIGR4ID0geCArIGg7Ci0gICAgICBkeSA9IHkgKyB2OwotICAgICAgZHggPSBDTEFNUCAoZHgsIDAsICh2X3cgLSAyKSk7Ci0gICAgICBkeSA9IENMQU1QIChkeSwgMCwgKHZfaCAtIDIpKTsKLSAgICAgIGRlc3RbMF0gPSBzcmNbZHkgKiB2X3cgKyBkeF07Ci0KLSAgICAgIG9fZHggPSBkeDsKLQotICAgICAgZHggPSB4ICsgMSArIChoICsgKGdpbnQpIHZwWzJdKSAvIDI7Ci0gICAgICBkeCA9IENMQU1QIChkeCwgMCwgKHZfdyAtIDIpKTsKLSAgICAgIGRlc3RbMV0gPSBzcmNbZHkgKiB2X3cgKyBkeF07Ci0KLSAgICAgIGR5ID0geSArIDEgKyAodiArIChnaW50KSB2cFttX3cgKiAyICsgMV0pIC8gMjsKLSAgICAgIGR5ID0gQ0xBTVAgKGR5LCAwLCAodl9oIC0gMikpOwotICAgICAgZGVzdFt2X3ddID0gc3JjW2R5ICogdl93ICsgb19keF07Ci0KLSAgICAgIGRlc3Rbdl93ICsgMV0gPSBzcmNbZHkgKiB2X3cgKyBkeF07Ci0gICAgICBkZXN0ICs9IDI7Ci0gICAgICB2cCArPSAyOwotICAgIH0KLSAgICBkZXN0ICs9IHZfdzsKLSAgICB2cCArPSAyOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcmlwcGxldHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFJpcHBsZVRWICpmaWx0ZXIgPSBHU1RfUklQUExFVFYgKHZmaWx0ZXIpOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCAoaW5faW5mbyk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5faW5mbyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBmaWx0ZXItPm1hcF9oID0gaGVpZ2h0IC8gMiArIDE7Ci0gIGZpbHRlci0+bWFwX3cgPSB3aWR0aCAvIDIgKyAxOwotCi0gIC8qIHdlIG92ZXIgYWxsb2NhdGUgdGhlIGJ1ZmZlcnMsIGFzIHRoZSByZW5kZXIgY29kZSBkb2VzIG5vdCBoYW5kbGUgY2xpcHBpbmcKLSAgICogdmVyeSB3ZWxsICovCi0gIGdfZnJlZSAoZmlsdGVyLT5tYXApOwotICBmaWx0ZXItPm1hcCA9IGdfbmV3MCAoZ2ludCwgKDEgKyBmaWx0ZXItPm1hcF9oKSAqIGZpbHRlci0+bWFwX3cgKiAzKTsKLQotICBmaWx0ZXItPm1hcDEgPSBmaWx0ZXItPm1hcDsKLSAgZmlsdGVyLT5tYXAyID0gZmlsdGVyLT5tYXAgKyBmaWx0ZXItPm1hcF93ICogZmlsdGVyLT5tYXBfaDsKLSAgZmlsdGVyLT5tYXAzID0gZmlsdGVyLT5tYXAgKyBmaWx0ZXItPm1hcF93ICogZmlsdGVyLT5tYXBfaCAqIDI7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPnZ0YWJsZSk7Ci0gIGZpbHRlci0+dnRhYmxlID0gZ19uZXcwIChnaW50OCwgKDEgKyBmaWx0ZXItPm1hcF9oKSAqIGZpbHRlci0+bWFwX3cgKiAyKTsKLQotICBnX2ZyZWUgKGZpbHRlci0+YmFja2dyb3VuZCk7Ci0gIGZpbHRlci0+YmFja2dyb3VuZCA9IGdfbmV3MCAoZ2ludDE2LCB3aWR0aCAqIChoZWlnaHQgKyAxKSk7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmRpZmYpOwotICBmaWx0ZXItPmRpZmYgPSBnX25ldzAgKGd1aW50OCwgd2lkdGggKiAoaGVpZ2h0ICsgMSkpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcmlwcGxldHZfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0UmlwcGxlVFYgKmZpbHRlciA9IEdTVF9SSVBQTEVUViAodHJhbnMpOwotCi0gIGZpbHRlci0+YmdfaXNfc2V0ID0gRkFMU0U7Ci0KLSAgZmlsdGVyLT5wZXJpb2QgPSAwOwotICBmaWx0ZXItPnJhaW5fc3RhdCA9IDA7Ci0gIGZpbHRlci0+ZHJvcF9wcm9iID0gMDsKLSAgZmlsdGVyLT5kcm9wX3Byb2JfaW5jcmVtZW50ID0gMDsKLSAgZmlsdGVyLT5kcm9wc19wZXJfZnJhbWVfbWF4ID0gMDsKLSAgZmlsdGVyLT5kcm9wc19wZXJfZnJhbWUgPSAwOwotICBmaWx0ZXItPmRyb3BfcG93ZXIgPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JpcHBsZXR2X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSaXBwbGVUViAqZmlsdGVyID0gR1NUX1JJUFBMRVRWIChvYmplY3QpOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5tYXApOwotICBmaWx0ZXItPm1hcCA9IE5VTEw7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPnZ0YWJsZSk7Ci0gIGZpbHRlci0+dnRhYmxlID0gTlVMTDsKLQotICBnX2ZyZWUgKGZpbHRlci0+YmFja2dyb3VuZCk7Ci0gIGZpbHRlci0+YmFja2dyb3VuZCA9IE5VTEw7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmRpZmYpOwotICBmaWx0ZXItPmRpZmYgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yaXBwbGV0dl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UmlwcGxlVFYgKmZpbHRlciA9IEdTVF9SSVBQTEVUViAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9SRVNFVDp7Ci0gICAgICBtZW1zZXQgKGZpbHRlci0+bWFwLCAwLAotICAgICAgICAgIGZpbHRlci0+bWFwX2ggKiBmaWx0ZXItPm1hcF93ICogMiAqIHNpemVvZiAoZ2ludCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgZmlsdGVyLT5tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yaXBwbGV0dl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UmlwcGxlVFYgKmZpbHRlciA9IEdTVF9SSVBQTEVUViAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBmaWx0ZXItPm1vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JpcHBsZXR2X2NsYXNzX2luaXQgKEdzdFJpcHBsZVRWQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcmlwcGxldHZfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcmlwcGxldHZfZ2V0X3Byb3BlcnR5OwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3JpcHBsZXR2X2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVTRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInJlc2V0IiwgIlJlc2V0IiwKLSAgICAgICAgICAiUmVzZXQgYWxsIGN1cnJlbnQgcmlwcGxlcyIsIEZBTFNFLAotICAgICAgICAgIEdfUEFSQU1fV1JJVEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJNb2RlIiwKLSAgICAgICAgICAiTW9kZSIsIEdTVF9UWVBFX1JJUFBMRVRWX01PREUsIERFRkFVTFRfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJpcHBsZVRWIGVmZmVjdCIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAiUmlwcGxlVFYgZG9lcyByaXBwbGUgbWFyayBlZmZlY3Qgb24gdGhlIHZpZGVvIGlucHV0IiwKLSAgICAgICJGVUtVQ0hJLCBLZW50YXJvdSA8ZnVrdWNoaUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3JpcHBsZXR2X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcmlwcGxldHZfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JpcHBsZXR2X3N0YXJ0KTsKLQotICB2ZmlsdGVyX2NsYXNzLT5zZXRfaW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcmlwcGxldHZfc2V0X2luZm8pOwotICB2ZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9yaXBwbGV0dl90cmFuc2Zvcm1fZnJhbWUpOwotCi0gIHNldFRhYmxlICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JpcHBsZXR2X2luaXQgKEdzdFJpcHBsZVRWICogZmlsdGVyKQotewotICBmaWx0ZXItPm1vZGUgPSBERUZBVUxUX01PREU7Ci0KLSAgLyogRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gbWVtb3J5IGNvcnJ1cHRpb24gYWZ0ZXIgcmVzaXplcyBhcmUgZml4ZWQgKi8KLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQgKGZpbHRlcikpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQgKGZpbHRlcikpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0cmlwcGxlLmggYi9nc3QvZWZmZWN0di9nc3RyaXBwbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5ZTU0My4uMDAwMDAwMAotLS0gYS9nc3QvZWZmZWN0di9nc3RyaXBwbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUViAtIFJlYWx0aW1lIERpZ2l0YWwgVmlkZW8gRWZmZWN0b3IKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IEZVS1VDSEkgS2VudGFybwotICoKLSAqIFJpcHBsZVRWIC0gV2F0ZXIgcmlwcGxlIGVmZmVjdC4KLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZVS1VDSEkgS2VudGFybwotICoKLSAqIEVmZmVjVFYgaXMgZnJlZSBzb2Z0d2FyZS4gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7Ci0gKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUklQUExFX0hfXwotI2RlZmluZSBfX0dTVF9SSVBQTEVfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JJUFBMRVRWIFwKLSAgKGdzdF9yaXBwbGV0dl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUklQUExFVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SSVBQTEVUVixHc3RSaXBwbGVUVikpCi0jZGVmaW5lIEdTVF9SSVBQTEVUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SSVBQTEVUVixHc3RSaXBwbGVUVkNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JJUFBMRVRWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUklQUExFVFYpKQotI2RlZmluZSBHU1RfSVNfUklQUExFVFZfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUklQUExFVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UmlwcGxlVFYgR3N0UmlwcGxlVFY7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UmlwcGxlVFZDbGFzcyBHc3RSaXBwbGVUVkNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJpcHBsZVRWCi17Ci0gIEdzdFZpZGVvRmlsdGVyIGVsZW1lbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ2ludCBtb2RlOwotCi0gIGdpbnQxNiAqYmFja2dyb3VuZDsKLSAgZ3VpbnQ4ICpkaWZmOwotCi0gIGdpbnQgKm1hcCwgKm1hcDEsICptYXAyLCAqbWFwMzsKLSAgZ2ludCBtYXBfaCwgbWFwX3c7Ci0KLSAgZ2ludDggKnZ0YWJsZTsKLQotICBnYm9vbGVhbiBiZ19pc19zZXQ7Ci0KLSAgZ2ludCBwZXJpb2Q7Ci0gIGdpbnQgcmFpbl9zdGF0OwotICBndWludCBkcm9wX3Byb2I7Ci0gIGdpbnQgZHJvcF9wcm9iX2luY3JlbWVudDsKLSAgZ2ludCBkcm9wc19wZXJfZnJhbWVfbWF4OwotICBnaW50IGRyb3BzX3Blcl9mcmFtZTsKLSAgZ2ludCBkcm9wX3Bvd2VyOwotfTsKLQotc3RydWN0IF9Hc3RSaXBwbGVUVkNsYXNzCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3JpcHBsZXR2X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JJUFBMRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYyBiL2dzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIxYTE1MS4uMDAwMDAwMAotLS0gYS9nc3QvZWZmZWN0di9nc3RzaGFnYWRlbGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIEluc3BpcmVkIGJ5IEFkcmlhbiBMaWtpbidzIHNjcmlwdCBmb3IgdGhlIEdJTVAuCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXNoYWdhZGVsaWN0dgotICoKLSAqIE9oIGJlaGF2ZSwgU2hhZ2VkZWxpY1RWIG1ha2VzIGltYWdlcyBzaGFnYWRlbGljIQotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgISBzaGFnYWRlbGljdHYgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2Ygc2hhZ2FkZWxpY3R2IG9uIGEgdGVzdCBzdHJlYW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdHNoYWdhZGVsaWMuaCIKLSNpbmNsdWRlICJnc3RlZmZlY3R2LmgiCi0KLSNpZm5kZWYgTV9QSQotI2RlZmluZSBNX1BJICAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2Ci0jZW5kaWYKLQotI2RlZmluZSBnc3Rfc2hhZ2FkZWxpY3R2X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFNoYWdhZGVsaWNUViwgZ3N0X3NoYWdhZGVsaWN0diwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotc3RhdGljIHZvaWQgZ3N0X3NoYWdhZGVsaWNfaW5pdGlhbGl6ZSAoR3N0U2hhZ2FkZWxpY1RWICogZmlsdGVyLAotICAgIEdzdFZpZGVvSW5mbyAqIGluX2luZm8pOwotCi0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotI2RlZmluZSBDQVBTX1NUUiBHU1RfVklERU9fQ0FQU19NQUtFICgiQkdSeCIpCi0jZWxzZQotI2RlZmluZSBDQVBTX1NUUiBHU1RfVklERU9fQ0FQU19NQUtFICgieFJHQiIpCi0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9zaGFnYWRlbGljdHZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfc2hhZ2FkZWxpY3R2X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChDQVBTX1NUUikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zaGFnYWRlbGljdHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFNoYWdhZGVsaWNUViAqZmlsdGVyID0gR1NUX1NIQUdBREVMSUNUViAodmZpbHRlcik7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodCwgYXJlYTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKTsKLQotICBhcmVhID0gd2lkdGggKiBoZWlnaHQ7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPnJpcHBsZSk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5zcGlyYWwpOwotICBmaWx0ZXItPnJpcHBsZSA9IChndWludDggKikgZ19tYWxsb2MgKGFyZWEgKiA0KTsKLSAgZmlsdGVyLT5zcGlyYWwgPSAoZ3VpbnQ4ICopIGdfbWFsbG9jIChhcmVhKTsKLQotICBnc3Rfc2hhZ2FkZWxpY19pbml0aWFsaXplIChmaWx0ZXIsIGluX2luZm8pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYWdhZGVsaWNfaW5pdGlhbGl6ZSAoR3N0U2hhZ2FkZWxpY1RWICogZmlsdGVyLCBHc3RWaWRlb0luZm8gKiBpbmZvKQotewotICBpbnQgaSwgeCwgeTsKLSNpZmRlZiBQUzIKLSAgZmxvYXQgeHgsIHl5OwotI2Vsc2UKLSAgZG91YmxlIHh4LCB5eTsKLSNlbmRpZgotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCAoaW5mbyk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5mbyk7Ci0KLSAgaSA9IDA7Ci0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQgKiAyOyB5KyspIHsKLSAgICB5eSA9IHkgLSBoZWlnaHQ7Ci0gICAgeXkgKj0geXk7Ci0KLSAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGggKiAyOyB4KyspIHsKLSAgICAgIHh4ID0geCAtIHdpZHRoOwotI2lmZGVmIFBTMgotICAgICAgZmlsdGVyLT5yaXBwbGVbaSsrXSA9ICgodW5zaWduZWQgaW50KSAoc3FydGYgKHh4ICogeHggKyB5eSkgKiA4KSkgJiAyNTU7Ci0jZWxzZQotICAgICAgZmlsdGVyLT5yaXBwbGVbaSsrXSA9ICgodW5zaWduZWQgaW50KSAoc3FydCAoeHggKiB4eCArIHl5KSAqIDgpKSAmIDI1NTsKLSNlbmRpZgotICAgIH0KLSAgfQotCi0gIGkgPSAwOwotICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICB5eSA9IHkgLSBoZWlnaHQgLyAyOwotCi0gICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgIHh4ID0geCAtIHdpZHRoIC8gMjsKLSNpZmRlZiBQUzIKLSAgICAgIGZpbHRlci0+c3BpcmFsW2krK10gPSAoKHVuc2lnbmVkIGludCkKLSAgICAgICAgICAoKGF0YW4yZiAoeHgsCi0gICAgICAgICAgICAgICAgICAgICAgeXkpIC8gKChmbG9hdCkgTV9QSSkgKiAyNTYgKiA5KSArIChzcXJ0ZiAoeHggKiB4eCArCi0gICAgICAgICAgICAgICAgICAgICAgeXkgKiB5eSkgKiA1KSkpICYgMjU1OwotI2Vsc2UKLSAgICAgIGZpbHRlci0+c3BpcmFsW2krK10gPSAoKHVuc2lnbmVkIGludCkKLSAgICAgICAgICAoKGF0YW4yICh4eCwgeXkpIC8gTV9QSSAqIDI1NiAqIDkpICsgKHNxcnQgKHh4ICogeHggKwotICAgICAgICAgICAgICAgICAgICAgIHl5ICogeXkpICogNSkpKSAmIDI1NTsKLSNlbmRpZgotLyogSGVyZSBpcyBhbm90aGVyIFN3aW5nZXIhCi0gKiAoKGF0YW4yKHh4LCB5eSkvTV9QSSoyNTYpICsgKHNxcnQoeHgqeHgreXkqeXkpKjEwKSkmMjU1OwotICovCi0gICAgfQotICB9Ci0gIGZpbHRlci0+cnggPSBmYXN0cmFuZCAoKSAlIHdpZHRoOwotICBmaWx0ZXItPnJ5ID0gZmFzdHJhbmQgKCkgJSBoZWlnaHQ7Ci0gIGZpbHRlci0+YnggPSBmYXN0cmFuZCAoKSAlIHdpZHRoOwotICBmaWx0ZXItPmJ5ID0gZmFzdHJhbmQgKCkgJSBoZWlnaHQ7Ci0gIGZpbHRlci0+cnZ4ID0gLTI7Ci0gIGZpbHRlci0+cnZ5ID0gLTI7Ci0gIGZpbHRlci0+YnZ4ID0gMjsKLSAgZmlsdGVyLT5idnkgPSAyOwotICBmaWx0ZXItPnBoYXNlID0gMDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zaGFnYWRlbGljdHZfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBHc3RTaGFnYWRlbGljVFYgKmZpbHRlciA9IEdTVF9TSEFHQURFTElDVFYgKHZmaWx0ZXIpOwotICBndWludDMyICpzcmMsICpkZXN0OwotICBnaW50IHgsIHk7Ci0gIGd1aW50MzIgdjsKLSAgZ3VpbnQ4IHIsIGcsIGI7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICB2ID0gKnNyYysrIHwgMHgxMDEwMTAwOwotICAgICAgdiA9ICh2IC0gMHg3MDcwNjApICYgMHgxMDEwMTAwOwotICAgICAgdiAtPSB2ID4+IDg7Ci0vKiBUcnkgYW5vdGhlciBCYWJlISAKLSAqIHYgPSAqc3JjKys7Ci0gKiAqZGVzdCsrID0gdiAmICgocjw8MTYpfChnPDw4KXxiKTsKLSAqLwotICAgICAgciA9ICgoZ2ludDgpIChmaWx0ZXItPnJpcHBsZVsoZmlsdGVyLT5yeSArIHkpICogd2lkdGggKiAyICsgZmlsdGVyLT5yeCArCi0gICAgICAgICAgICAgICAgICB4XSArIGZpbHRlci0+cGhhc2UgKiAyKSkgPj4gNzsKLSAgICAgIGcgPSAoKGdpbnQ4KSAoZmlsdGVyLT5zcGlyYWxbeSAqIHdpZHRoICsgeF0gKyBmaWx0ZXItPnBoYXNlICogMykpID4+IDc7Ci0gICAgICBiID0gKChnaW50OCkgKGZpbHRlci0+cmlwcGxlWyhmaWx0ZXItPmJ5ICsgeSkgKiB3aWR0aCAqIDIgKyBmaWx0ZXItPmJ4ICsKLSAgICAgICAgICAgICAgICAgIHhdIC0gZmlsdGVyLT5waGFzZSkpID4+IDc7Ci0gICAgICAqZGVzdCsrID0gdiAmICgociA8PCAxNikgfCAoZyA8PCA4KSB8IGIpOwotICAgIH0KLSAgfQotCi0gIGZpbHRlci0+cGhhc2UgLT0gODsKLSAgaWYgKChmaWx0ZXItPnJ4ICsgZmlsdGVyLT5ydngpIDwgMCB8fCAoZmlsdGVyLT5yeCArIGZpbHRlci0+cnZ4KSA+PSB3aWR0aCkKLSAgICBmaWx0ZXItPnJ2eCA9IC1maWx0ZXItPnJ2eDsKLSAgaWYgKChmaWx0ZXItPnJ5ICsgZmlsdGVyLT5ydnkpIDwgMCB8fCAoZmlsdGVyLT5yeSArIGZpbHRlci0+cnZ5KSA+PSBoZWlnaHQpCi0gICAgZmlsdGVyLT5ydnkgPSAtZmlsdGVyLT5ydnk7Ci0gIGlmICgoZmlsdGVyLT5ieCArIGZpbHRlci0+YnZ4KSA8IDAgfHwgKGZpbHRlci0+YnggKyBmaWx0ZXItPmJ2eCkgPj0gd2lkdGgpCi0gICAgZmlsdGVyLT5idnggPSAtZmlsdGVyLT5idng7Ci0gIGlmICgoZmlsdGVyLT5ieSArIGZpbHRlci0+YnZ5KSA8IDAgfHwgKGZpbHRlci0+YnkgKyBmaWx0ZXItPmJ2eSkgPj0gaGVpZ2h0KQotICAgIGZpbHRlci0+YnZ5ID0gLWZpbHRlci0+YnZ5OwotICBmaWx0ZXItPnJ4ICs9IGZpbHRlci0+cnZ4OwotICBmaWx0ZXItPnJ5ICs9IGZpbHRlci0+cnZ5OwotICBmaWx0ZXItPmJ4ICs9IGZpbHRlci0+YnZ4OwotICBmaWx0ZXItPmJ5ICs9IGZpbHRlci0+YnZ5OwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zaGFnYWRlbGljdHZfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNoYWdhZGVsaWNUViAqZmlsdGVyID0gR1NUX1NIQUdBREVMSUNUViAob2JqZWN0KTsKLQotICBnX2ZyZWUgKGZpbHRlci0+cmlwcGxlKTsKLSAgZmlsdGVyLT5yaXBwbGUgPSBOVUxMOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5zcGlyYWwpOwotICBmaWx0ZXItPnNwaXJhbCA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYWdhZGVsaWN0dl9jbGFzc19pbml0IChHc3RTaGFnYWRlbGljVFZDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfc2hhZ2FkZWxpY3R2X2ZpbmFsaXplOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJTaGFnYWRlbGljVFYiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIk9oIGJlaGF2ZSwgU2hhZ2VkZWxpY1RWIG1ha2VzIGltYWdlcyBzaGFnYWRlbGljISIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc2hhZ2FkZWxpY3R2X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc2hhZ2FkZWxpY3R2X3NyY190ZW1wbGF0ZSk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NoYWdhZGVsaWN0dl9zZXRfaW5mbyk7Ci0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NoYWdhZGVsaWN0dl90cmFuc2Zvcm1fZnJhbWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYWdhZGVsaWN0dl9pbml0IChHc3RTaGFnYWRlbGljVFYgKiBmaWx0ZXIpCi17Ci0gIGZpbHRlci0+cmlwcGxlID0gTlVMTDsKLSAgZmlsdGVyLT5zcGlyYWwgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5oIGIvZ3N0L2VmZmVjdHYvZ3N0c2hhZ2FkZWxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODljYmY0Li4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHNoYWdhZGVsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBFZmZlY1RWOgotICogQ29weXJpZ2h0IChDKSAyMDAxIEZVS1VDSEkgS2VudGFyb3UKLSAqCi0gKiBJbnNwaXJlZCBieSBBZHJpYW4gTGlraW4ncyBzY3JpcHQgZm9yIHRoZSBHSU1QLgotICogRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7Ci0gKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1NIQUdBREVMSUNfSF9fCi0jZGVmaW5lIF9fR1NUX1NIQUdBREVMSUNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NIQUdBREVMSUNUViBcCi0gIChnc3Rfc2hhZ2FkZWxpY3R2X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TSEFHQURFTElDVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TSEFHQURFTElDVFYsR3N0U2hhZ2FkZWxpY1RWKSkKLSNkZWZpbmUgR1NUX1NIQUdBREVMSUNUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TSEFHQURFTElDVFYsR3N0U2hhZ2FkZWxpY1RWQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU0hBR0FERUxJQ1RWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU0hBR0FERUxJQ1RWKSkKLSNkZWZpbmUgR1NUX0lTX1NIQUdBREVMSUNUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9TSEFHQURFTElDVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U2hhZ2FkZWxpY1RWIEdzdFNoYWdhZGVsaWNUVjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTaGFnYWRlbGljVFZDbGFzcyBHc3RTaGFnYWRlbGljVFZDbGFzczsKLQotc3RydWN0IF9Hc3RTaGFnYWRlbGljVFYKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ3VpbnQ4ICpyaXBwbGU7Ci0gIGd1aW50OCAqc3BpcmFsOwotICBndWludDggcGhhc2U7Ci0gIGdpbnQgcngsIHJ5OwotICBnaW50IGJ4LCBieTsKLSAgZ2ludCBydngsIHJ2eTsKLSAgZ2ludCBidngsIGJ2eTsKLX07Ci0KLXN0cnVjdCBfR3N0U2hhZ2FkZWxpY1RWQ2xhc3MKLXsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfc2hhZ2FkZWxpY3R2X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NIQUdBREVMSUNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RzdHJlYWsuYyBiL2dzdC9lZmZlY3R2L2dzdHN0cmVhay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGVkMTUwLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHN0cmVhay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogRWZmZWNUViAtIFJlYWx0aW1lIERpZ2l0YWwgVmlkZW8gRWZmZWN0b3IKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IEZVS1VDSEkgS2VudGFybwotICoKLSAqIFN0cmVha1RWIC0gYWZ0ZXJpbWFnZSBlZmZlY3Rvci4KLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEZVS1VDSEkgS2VudGFybwotICoKLSAqIFRoaXMgY29tYmluZXMgdGhlIFN0cmVha1RWIGFuZCBCYWx0YW5UViBlZmZlY3RzLCB3aGljaCBhcmUKLSAqIHZlcnkgc2ltaWxhci4gQmFsdGFuVFYgaXMgdXNlZCBpZiB0aGUgZmVlZGJhY2sgcHJvcGVydHkgaXMgc2V0Ci0gKiB0byBUUlVFLCBvdGhlcndpc2UgU3RyZWFrVFYgaXMgdXNlZC4KLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zdHJlYWt0dgotICoKLSAqIFN0cmVha1RWIG1ha2VzIGFmdGVyIGltYWdlcyBvZiBtb3Zpbmcgb2JqZWN0cy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgc3RyZWFrdHYgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3dzIHRoZSBlZmZlY3Qgb2Ygc3RyZWFrdHYgb24gYSB0ZXN0IHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0c3RyZWFrLmgiCi0jaW5jbHVkZSAiZ3N0ZWZmZWN0di5oIgotCi0jZGVmaW5lIERFRkFVTFRfRkVFREJBQ0sgRkFMU0UKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRkVFREJBQ0sKLX07Ci0KLSNkZWZpbmUgZ3N0X3N0cmVha3R2X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFN0cmVha1RWLCBnc3Rfc3RyZWFrdHYsIEdTVF9UWVBFX1ZJREVPX0ZJTFRFUik7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfc3RyZWFrdHZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEJHUngsIFJHQngsIHhCR1IsIHhSR0IgfSIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfc3RyZWFrdHZfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEJHUngsIFJHQngsIHhCR1IsIHhSR0IgfSIpKQotICAgICk7Ci0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zdHJlYWt0dl90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIEdzdFN0cmVha1RWICpmaWx0ZXIgPSBHU1RfU1RSRUFLVFYgKHZmaWx0ZXIpOwotICBndWludDMyICpzcmMsICpkZXN0OwotICBnaW50IGksIGNmOwotICBnaW50IHZpZGVvX2FyZWEsIHdpZHRoLCBoZWlnaHQ7Ci0gIGd1aW50MzIgKipwbGFuZXRhYmxlID0gZmlsdGVyLT5wbGFuZXRhYmxlOwotICBnaW50IHBsYW5lID0gZmlsdGVyLT5wbGFuZTsKLSAgZ3VpbnQgc3RyaWRlX21hc2ssIHN0cmlkZV9zaGlmdCwgc3RyaWRlOwotCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSk7Ci0KLSAgdmlkZW9fYXJlYSA9IHdpZHRoICogaGVpZ2h0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgaWYgKGZpbHRlci0+ZmVlZGJhY2spIHsKLSAgICBzdHJpZGVfbWFzayA9IDB4ZmNmY2ZjZmM7Ci0gICAgc3RyaWRlID0gODsKLSAgICBzdHJpZGVfc2hpZnQgPSAyOwotICB9IGVsc2UgewotICAgIHN0cmlkZV9tYXNrID0gMHhmOGY4ZjhmODsKLSAgICBzdHJpZGUgPSA0OwotICAgIHN0cmlkZV9zaGlmdCA9IDM7Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgdmlkZW9fYXJlYTsgaSsrKSB7Ci0gICAgcGxhbmV0YWJsZVtwbGFuZV1baV0gPSAoc3JjW2ldICYgc3RyaWRlX21hc2spID4+IHN0cmlkZV9zaGlmdDsKLSAgfQotCi0gIGNmID0gcGxhbmUgJiAoc3RyaWRlIC0gMSk7Ci0gIGlmIChmaWx0ZXItPmZlZWRiYWNrKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IHZpZGVvX2FyZWE7IGkrKykgewotICAgICAgZGVzdFtpXSA9IHBsYW5ldGFibGVbY2ZdW2ldCi0gICAgICAgICAgKyBwbGFuZXRhYmxlW2NmICsgc3RyaWRlXVtpXQotICAgICAgICAgICsgcGxhbmV0YWJsZVtjZiArIHN0cmlkZSAqIDJdW2ldCi0gICAgICAgICAgKyBwbGFuZXRhYmxlW2NmICsgc3RyaWRlICogM11baV07Ci0gICAgICBwbGFuZXRhYmxlW3BsYW5lXVtpXSA9IChkZXN0W2ldICYgc3RyaWRlX21hc2spID4+IHN0cmlkZV9zaGlmdDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IHZpZGVvX2FyZWE7IGkrKykgewotICAgICAgZGVzdFtpXSA9IHBsYW5ldGFibGVbY2ZdW2ldCi0gICAgICAgICAgKyBwbGFuZXRhYmxlW2NmICsgc3RyaWRlXVtpXQotICAgICAgICAgICsgcGxhbmV0YWJsZVtjZiArIHN0cmlkZSAqIDJdW2ldCi0gICAgICAgICAgKyBwbGFuZXRhYmxlW2NmICsgc3RyaWRlICogM11baV0KLSAgICAgICAgICArIHBsYW5ldGFibGVbY2YgKyBzdHJpZGUgKiA0XVtpXQotICAgICAgICAgICsgcGxhbmV0YWJsZVtjZiArIHN0cmlkZSAqIDVdW2ldCi0gICAgICAgICAgKyBwbGFuZXRhYmxlW2NmICsgc3RyaWRlICogNl1baV0KLSAgICAgICAgICArIHBsYW5ldGFibGVbY2YgKyBzdHJpZGUgKiA3XVtpXTsKLSAgICB9Ci0gIH0KLQotICBwbGFuZSsrOwotICBmaWx0ZXItPnBsYW5lID0gcGxhbmUgJiAoUExBTkVTIC0gMSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3RyZWFrdHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFN0cmVha1RWICpmaWx0ZXIgPSBHU1RfU1RSRUFLVFYgKHZmaWx0ZXIpOwotICBnaW50IGksIHdpZHRoLCBoZWlnaHQ7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCAoaW5faW5mbyk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5faW5mbyk7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPnBsYW5lYnVmZmVyKTsKLQotICBmaWx0ZXItPnBsYW5lYnVmZmVyID0gZ19uZXcwIChndWludDMyLCB3aWR0aCAqIGhlaWdodCAqIDQgKiBQTEFORVMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBQTEFORVM7IGkrKykKLSAgICBmaWx0ZXItPnBsYW5ldGFibGVbaV0gPSAmZmlsdGVyLT5wbGFuZWJ1ZmZlclt3aWR0aCAqIGhlaWdodCAqIGldOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdHJlYWt0dl9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RTdHJlYWtUViAqZmlsdGVyID0gR1NUX1NUUkVBS1RWICh0cmFucyk7Ci0KLSAgZmlsdGVyLT5wbGFuZSA9IDA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFrdHZfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFN0cmVha1RWICpmaWx0ZXIgPSBHU1RfU1RSRUFLVFYgKG9iamVjdCk7Ci0KLSAgaWYgKGZpbHRlci0+cGxhbmVidWZmZXIpIHsKLSAgICBnX2ZyZWUgKGZpbHRlci0+cGxhbmVidWZmZXIpOwotICAgIGZpbHRlci0+cGxhbmVidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cmVha3R2X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTdHJlYWtUViAqZmlsdGVyID0gR1NUX1NUUkVBS1RWIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GRUVEQkFDSzoKLSAgICAgIGlmIChHX1VOTElLRUxZIChHU1RfU1RBVEUgKGZpbHRlcikgPj0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKLSAgICAgICAgZ193YXJuaW5nICgiQ2hhbmdpbmcgdGhlIFwiZmVlZGJhY2tcIiBwcm9wZXJ0eSBvbmx5IGFsbG93ZWQgIgotICAgICAgICAgICAgImluIHN0YXRlIDwgUExBWUlORyIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGZpbHRlci0+ZmVlZGJhY2sgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3RyZWFrdHZfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN0cmVha1RWICpmaWx0ZXIgPSBHU1RfU1RSRUFLVFYgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZFRURCQUNLOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+ZmVlZGJhY2spOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N0cmVha3R2X2NsYXNzX2luaXQgKEdzdFN0cmVha1RWQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc3RyZWFrdHZfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfc3RyZWFrdHZfZ2V0X3Byb3BlcnR5OwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3N0cmVha3R2X2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkVFREJBQ0ssCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImZlZWRiYWNrIiwgIkZlZWRiYWNrIiwKLSAgICAgICAgICAiRmVlZGJhY2siLCBERUZBVUxUX0ZFRURCQUNLLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJTdHJlYWtUViBlZmZlY3QiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIlN0cmVha1RWIG1ha2VzIGFmdGVyIGltYWdlcyBvZiBtb3Zpbmcgb2JqZWN0cyIsCi0gICAgICAiRlVLVUNISSwgS2VudGFyb3UgPGZ1a3VjaGlAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgIgotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9zdHJlYWt0dl9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3N0cmVha3R2X3NyY190ZW1wbGF0ZSk7Ci0KLSAgdHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zdHJlYWt0dl9zdGFydCk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N0cmVha3R2X3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3RyZWFrdHZfdHJhbnNmb3JtX2ZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdHJlYWt0dl9pbml0IChHc3RTdHJlYWtUViAqIGZpbHRlcikKLXsKLSAgZmlsdGVyLT5mZWVkYmFjayA9IERFRkFVTFRfRkVFREJBQ0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvZWZmZWN0di9nc3RzdHJlYWsuaCBiL2dzdC9lZmZlY3R2L2dzdHN0cmVhay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDkzNjJkLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHN0cmVhay5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBFZmZlY1RWIC0gUmVhbHRpbWUgRGlnaXRhbCBWaWRlbyBFZmZlY3RvcgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgRlVLVUNISSBLZW50YXJvCi0gKgotICogU3RyZWFrVFYgLSBhZnRlcmltYWdlIGVmZmVjdG9yLgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRlVLVUNISSBLZW50YXJvCi0gKgotICogRWZmZWNUViBpcyBmcmVlIHNvZnR3YXJlLiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsKLSAqIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVFJFQUtfSF9fCi0jZGVmaW5lIF9fR1NUX1NUUkVBS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU1RSRUFLVFYgXAotICAoZ3N0X3N0cmVha3R2X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TVFJFQUtUVihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NUUkVBS1RWLEdzdFN0cmVha1RWKSkKLSNkZWZpbmUgR1NUX1NUUkVBS1RWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NUUkVBS1RWLEdzdFN0cmVha1RWQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU1RSRUFLVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TVFJFQUtUVikpCi0jZGVmaW5lIEdTVF9JU19TVFJFQUtUVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9TVFJFQUtUVikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYWtUViBHc3RTdHJlYWtUVjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYWtUVkNsYXNzIEdzdFN0cmVha1RWQ2xhc3M7Ci0KLSNkZWZpbmUgUExBTkVTIDMyCi0KLXN0cnVjdCBfR3N0U3RyZWFrVFYKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgZWxlbWVudDsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBnYm9vbGVhbiBmZWVkYmFjazsKLQotICBndWludDMyICpwbGFuZWJ1ZmZlcjsKLSAgZ3VpbnQzMiAqcGxhbmV0YWJsZVtQTEFORVNdOwotICBnaW50IHBsYW5lOwotfTsKLQotc3RydWN0IF9Hc3RTdHJlYWtUVkNsYXNzCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3N0cmVha3R2X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NUUkVBS19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYyBiL2dzdC9lZmZlY3R2L2dzdHZlcnRpZ28uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5YTdkMi4uMDAwMDAwMAotLS0gYS9nc3QvZWZmZWN0di9nc3R2ZXJ0aWdvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIEVmZmVjVFY6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIEVmZmVjVFYgaXMgZnJlZSBzb2Z0d2FyZS4gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7Ci0gKiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXZlcnRpZ290dgotICoKLSAqIFZlcnRpZ29UViBpcyBhIGxvb3BiYWNrIGFscGhhIGJsZW5kaW5nIGVmZmVjdG9yIHdpdGggcm90YXRpbmcgYW5kIHNjYWxpbmcuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyAhIHZlcnRpZ290diAhIHZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsKLSAqIF18IFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiB2ZXJ0aWdvdHYgb24gYSB0ZXN0IHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0dmVydGlnby5oIgotCi0jZGVmaW5lIGdzdF92ZXJ0aWdvdHZfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0VmVydGlnb1RWLCBnc3RfdmVydGlnb3R2LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi0vKiBGaWx0ZXIgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfU1BFRUQsCi0gIFBST1BfWk9PTV9TUEVFRAotfTsKLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSNkZWZpbmUgQ0FQU19TVFIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgUkdCeCwgQkdSeCB9IikKLSNlbHNlCi0jZGVmaW5lIENBUFNfU1RSIEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IHhSR0IsIHhCR1IgfSIpCi0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF92ZXJ0aWdvdHZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKENBUFNfU1RSKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdmVydGlnb3R2X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChDQVBTX1NUUikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92ZXJ0aWdvdHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFZlcnRpZ29UViAqZmlsdGVyID0gR1NUX1ZFUlRJR09UViAodmZpbHRlcik7Ci0gIGdpbnQgYXJlYSwgd2lkdGgsIGhlaWdodDsKLQotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKTsKLQotICBhcmVhID0gd2lkdGggKiBoZWlnaHQ7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmJ1ZmZlcik7Ci0gIGZpbHRlci0+YnVmZmVyID0gKGd1aW50MzIgKikgZ19tYWxsb2MwIChhcmVhICogMiAqIHNpemVvZiAoZ3VpbnQzMikpOwotCi0gIGZpbHRlci0+Y3VycmVudF9idWZmZXIgPSBmaWx0ZXItPmJ1ZmZlcjsKLSAgZmlsdGVyLT5hbHRfYnVmZmVyID0gZmlsdGVyLT5idWZmZXIgKyBhcmVhOwotICBmaWx0ZXItPnBoYXNlID0gMDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92ZXJ0aWdvdHZfc2V0X3Bhcm1zIChHc3RWZXJ0aWdvVFYgKiBmaWx0ZXIpCi17Ci0gIGRvdWJsZSB2eCwgdnk7Ci0gIGRvdWJsZSB0OwotICBkb3VibGUgeCwgeTsKLSAgZG91YmxlIGRpeno7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgR3N0VmlkZW9JbmZvICppbmZvOwotCi0gIGRpenogPSBzaW4gKGZpbHRlci0+cGhhc2UpICogMTAgKyBzaW4gKGZpbHRlci0+cGhhc2UgKiAxLjkgKyA1KSAqIDU7Ci0KLSAgaW5mbyA9ICZHU1RfVklERU9fRklMVEVSIChmaWx0ZXIpLT5pbl9pbmZvOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKGluZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluZm8pOwotCi0gIHggPSB3aWR0aCAvIDI7Ci0gIHkgPSBoZWlnaHQgLyAyOwotCi0gIHQgPSAoeCAqIHggKyB5ICogeSkgKiBmaWx0ZXItPnpvb21yYXRlOwotCi0gIGlmICh3aWR0aCA+IGhlaWdodCkgewotICAgIGlmIChkaXp6ID49IDApIHsKLSAgICAgIGlmIChkaXp6ID4geCkKLSAgICAgICAgZGl6eiA9IHg7Ci0gICAgICB2eCA9ICh4ICogKHggLSBkaXp6KSArIHkgKiB5KSAvIHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChkaXp6IDwgLXgpCi0gICAgICAgIGRpenogPSAteDsKLSAgICAgIHZ4ID0gKHggKiAoeCArIGRpenopICsgeSAqIHkpIC8gdDsKLSAgICB9Ci0gICAgdnkgPSAoZGl6eiAqIHkpIC8gdDsKLSAgfSBlbHNlIHsKLSAgICBpZiAoZGl6eiA+PSAwKSB7Ci0gICAgICBpZiAoZGl6eiA+IHkpCi0gICAgICAgIGRpenogPSB5OwotICAgICAgdnggPSAoeCAqIHggKyB5ICogKHkgLSBkaXp6KSkgLyB0OwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZGl6eiA8IC15KQotICAgICAgICBkaXp6ID0gLXk7Ci0gICAgICB2eCA9ICh4ICogeCArIHkgKiAoeSArIGRpenopKSAvIHQ7Ci0gICAgfQotICAgIHZ5ID0gKGRpenogKiB4KSAvIHQ7Ci0gIH0KLSAgZmlsdGVyLT5keCA9IHZ4ICogNjU1MzY7Ci0gIGZpbHRlci0+ZHkgPSB2eSAqIDY1NTM2OwotICBmaWx0ZXItPnN4ID0gKC12eCAqIHggKyB2eSAqIHkgKyB4ICsgY29zIChmaWx0ZXItPnBoYXNlICogNSkgKiAyKSAqIDY1NTM2OwotICBmaWx0ZXItPnN5ID0gKC12eCAqIHkgLSB2eSAqIHggKyB5ICsgc2luIChmaWx0ZXItPnBoYXNlICogNikgKiAyKSAqIDY1NTM2OwotCi0gIGZpbHRlci0+cGhhc2UgKz0gZmlsdGVyLT5waGFzZV9pbmNyZW1lbnQ7Ci0gIGlmIChmaWx0ZXItPnBoYXNlID4gNTcwMDAwMCkKLSAgICBmaWx0ZXItPnBoYXNlID0gMDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92ZXJ0aWdvdHZfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBHc3RWZXJ0aWdvVFYgKmZpbHRlciA9IEdTVF9WRVJUSUdPVFYgKHZmaWx0ZXIpOwotICBndWludDMyICpzcmMsICpkZXN0LCAqcDsKLSAgZ3VpbnQzMiB2OwotICBnaW50IHgsIHksIG94LCBveSwgaSwgd2lkdGgsIGhlaWdodCwgYXJlYSwgc3N0cmlkZSwgZHN0cmlkZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgc3RyZWFtX3RpbWU7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluX2ZyYW1lLT5idWZmZXIpOwotICBzdHJlYW1fdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJkdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKS0+c2VnbWVudCwKLSAgICAgIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsICJzeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtX3RpbWUpKQotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGZpbHRlciksIHN0cmVhbV90aW1lKTsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBzc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0gIGRzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChvdXRfZnJhbWUsIDApOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKTsKLQotICBhcmVhID0gd2lkdGggKiBoZWlnaHQ7Ci0KLSAgc3N0cmlkZSAvPSA0OwotICBkc3RyaWRlIC89IDQ7Ci0KLSAgZ3N0X3ZlcnRpZ290dl9zZXRfcGFybXMgKGZpbHRlcik7Ci0gIHAgPSBmaWx0ZXItPmFsdF9idWZmZXI7Ci0KLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgb3ggPSBmaWx0ZXItPnN4OwotICAgIG95ID0gZmlsdGVyLT5zeTsKLQotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICBpID0gKG95ID4+IDE2KSAqIHdpZHRoICsgKG94ID4+IDE2KTsKLSAgICAgIGlmIChpIDwgMCkKLSAgICAgICAgaSA9IDA7Ci0gICAgICBpZiAoaSA+PSBhcmVhKQotICAgICAgICBpID0gYXJlYTsKLQotICAgICAgdiA9IGZpbHRlci0+Y3VycmVudF9idWZmZXJbaV0gJiAweGZjZmNmZjsKLSAgICAgIHYgPSAodiAqIDMpICsgKHNyY1t4XSAmIDB4ZmNmY2ZmKTsKLQotICAgICAgKnArKyA9IGRlc3RbeF0gPSAodiA+PiAyKTsKLSAgICAgIG94ICs9IGZpbHRlci0+ZHg7Ci0gICAgICBveSArPSBmaWx0ZXItPmR5OwotICAgIH0KLSAgICBmaWx0ZXItPnN4IC09IGZpbHRlci0+ZHk7Ci0gICAgZmlsdGVyLT5zeSArPSBmaWx0ZXItPmR4OwotCi0gICAgc3JjICs9IHNzdHJpZGU7Ci0gICAgZGVzdCArPSBkc3RyaWRlOwotICB9Ci0KLSAgcCA9IGZpbHRlci0+Y3VycmVudF9idWZmZXI7Ci0gIGZpbHRlci0+Y3VycmVudF9idWZmZXIgPSBmaWx0ZXItPmFsdF9idWZmZXI7Ci0gIGZpbHRlci0+YWx0X2J1ZmZlciA9IHA7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92ZXJ0aWdvdHZfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0VmVydGlnb1RWICpmaWx0ZXIgPSBHU1RfVkVSVElHT1RWICh0cmFucyk7Ci0KLSAgZmlsdGVyLT5waGFzZSA9IDAuMDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92ZXJ0aWdvdHZfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFZlcnRpZ29UViAqZmlsdGVyID0gR1NUX1ZFUlRJR09UViAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGZpbHRlcik7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TUEVFRDoKLSAgICAgIGZpbHRlci0+cGhhc2VfaW5jcmVtZW50ID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9aT09NX1NQRUVEOgotICAgICAgZmlsdGVyLT56b29tcmF0ZSA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGZpbHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmVydGlnb3R2X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWZXJ0aWdvVFYgKmZpbHRlciA9IEdTVF9WRVJUSUdPVFYgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NQRUVEOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBmaWx0ZXItPnBoYXNlX2luY3JlbWVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfWk9PTV9TUEVFRDoKLSAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICh2YWx1ZSwgZmlsdGVyLT56b29tcmF0ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmVydGlnb3R2X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RWZXJ0aWdvVFYgKmZpbHRlciA9IEdTVF9WRVJUSUdPVFYgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChmaWx0ZXItPmJ1ZmZlcik7Ci0gIGZpbHRlci0+YnVmZmVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmVydGlnb3R2X2NsYXNzX2luaXQgKEdzdFZlcnRpZ29UVkNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3ZlcnRpZ290dl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF92ZXJ0aWdvdHZfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF92ZXJ0aWdvdHZfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9TUEVFRCwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoInNwZWVkIiwgIlNwZWVkIiwgIkNvbnRyb2wgdGhlIHNwZWVkIG9mIG1vdmVtZW50IiwKLSAgICAgICAgICAwLjAxLCAxMDAuMCwgMC4wMiwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfWk9PTV9TUEVFRCwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoInpvb20tc3BlZWQiLCAiWm9vbSBTcGVlZCIsCi0gICAgICAgICAgIkNvbnRyb2wgdGhlIHJhdGUgb2Ygem9vbWluZyIsIDEuMDEsIDEuMSwgMS4wMSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiVmVydGlnb1RWIGVmZmVjdCIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAiQSBsb29wYmFjayBhbHBoYSBibGVuZGluZyBlZmZlY3RvciB3aXRoIHJvdGF0aW5nIGFuZCBzY2FsaW5nIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuYmU+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZlcnRpZ290dl9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZlcnRpZ290dl9zcmNfdGVtcGxhdGUpOwotCi0gIHRyYW5zX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmVydGlnb3R2X3N0YXJ0KTsKLQotICB2ZmlsdGVyX2NsYXNzLT5zZXRfaW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmVydGlnb3R2X3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmVydGlnb3R2X3RyYW5zZm9ybV9mcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmVydGlnb3R2X2luaXQgKEdzdFZlcnRpZ29UViAqIGZpbHRlcikKLXsKLSAgZmlsdGVyLT5idWZmZXIgPSBOVUxMOwotICBmaWx0ZXItPnBoYXNlID0gMC4wOwotICBmaWx0ZXItPnBoYXNlX2luY3JlbWVudCA9IDAuMDI7Ci0gIGZpbHRlci0+em9vbXJhdGUgPSAxLjAxOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5oIGIvZ3N0L2VmZmVjdHYvZ3N0dmVydGlnby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWMyMjViLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHZlcnRpZ28uaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBFZmZlY1RWOgotICogQ29weXJpZ2h0IChDKSAyMDAxIEZVS1VDSEkgS2VudGFyb3UKLSAqCi0gKiBFZmZlY1RWIGlzIGZyZWUgc29mdHdhcmUuIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOwotICogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1ZFUlRJR09fSF9fCi0jZGVmaW5lIF9fR1NUX1ZFUlRJR09fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZFUlRJR09UViBcCi0gIChnc3RfdmVydGlnb3R2X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WRVJUSUdPVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9WRVJUSUdPVFYsR3N0VmVydGlnb1RWKSkKLSNkZWZpbmUgR1NUX1ZFUlRJR09UVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WRVJUSUdPVFYsR3N0VmVydGlnb1RWQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVkVSVElHT1RWKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVkVSVElHT1RWKSkKLSNkZWZpbmUgR1NUX0lTX1ZFUlRJR09UVl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WRVJUSUdPVFYpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VmVydGlnb1RWIEdzdFZlcnRpZ29UVjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWZXJ0aWdvVFZDbGFzcyBHc3RWZXJ0aWdvVFZDbGFzczsKLQotc3RydWN0IF9Hc3RWZXJ0aWdvVFYKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgZ3VpbnQzMiAqYnVmZmVyOwotICBndWludDMyICpjdXJyZW50X2J1ZmZlciwgKmFsdF9idWZmZXI7Ci0gIGdpbnQgZHgsIGR5OwotICBnaW50IHN4LCBzeTsKLSAgZ2RvdWJsZSBwaGFzZTsKLSAgZ2RvdWJsZSBwaGFzZV9pbmNyZW1lbnQ7Ci0gIGdkb3VibGUgem9vbXJhdGU7Ci19OwotCi1zdHJ1Y3QgX0dzdFZlcnRpZ29UVkNsYXNzCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3ZlcnRpZ290dl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9WRVJUSUdPX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0d2FycC5jIGIvZ3N0L2VmZmVjdHYvZ3N0d2FycC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDFlZDhjLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHdhcnAuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBFZmZlY1RWIC0gUmVhbHRpbWUgRGlnaXRhbCBWaWRlbyBFZmZlY3RvcgotICogQ29weXJpZ2h0IChDKSAyMDAxIEZVS1VDSEkgS2VudGFyb3UKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKgotICogVGhpcyBmaWxlIHdhcyAocHJvYmFibHkpIGdlbmVyYXRlZCBmcm9tIGdzdHZpZGVvdGVtcGxhdGUuYywKLSAqIGdzdHZpZGVvdGVtcGxhdGUuYyx2IDEuMTEgMjAwNC8wMS8wNyAwODo1Njo0NSBkcyBFeHAgCi0gKi8KLQotLyogRnJvbSBtYWluLmMgb2Ygd2FycC0xLjE6Ci0gKgotICogICAgICBTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgZGVtbwotICogICAgICBSZWFsdGltZSBwaWN0dXJlICdnb29pbmcnCi0gKiAgICAgIGJ5IHNhbSBsYW50aW5nYSBzbG91a2VuQGRldm9sdXRpb24uY29tCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtd2FycHR2Ci0gKgotICogV2FycFRWIGRvZXMgcmVhbHRpbWUgZ29vJ2luZyBvZiB0aGUgdmlkZW8gaW5wdXQuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyAhIHdhcnB0diAhIHZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsKLSAqIF18IFRoaXMgcGlwZWxpbmUgc2hvd3MgdGhlIGVmZmVjdCBvZiB3YXJwdHYgb24gYSB0ZXN0IHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZ3N0d2FycC5oIgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+Ci0KLSNpZm5kZWYgTV9QSQotI2RlZmluZSBNX1BJICAgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKLSNlbmRpZgotCi0jZGVmaW5lIGdzdF93YXJwdHZfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0V2FycFRWLCBnc3Rfd2FycHR2LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBpbml0U2luVGFibGUgKCk7Ci1zdGF0aWMgdm9pZCBpbml0RGlzdFRhYmxlIChHc3RXYXJwVFYgKiBmaWx0ZXIsIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0KTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF93YXJwdHZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IFJHQngsIHhSR0IsIEJHUngsIHhCR1IgfSIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfd2FycHR2X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSIH0iKSkKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXJwdHZfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFdhcnBUViAqZmlsdGVyID0gR1NUX1dBUlBUViAodmZpbHRlcik7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLQotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKTsKLQotICBnX2ZyZWUgKGZpbHRlci0+ZGlzdHRhYmxlKTsKLSAgZmlsdGVyLT5kaXN0dGFibGUgPSBnX21hbGxvYyAod2lkdGggKiBoZWlnaHQgKiBzaXplb2YgKGd1aW50MzIpKTsKLSAgaW5pdERpc3RUYWJsZSAoZmlsdGVyLCB3aWR0aCwgaGVpZ2h0KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdpbnQzMiBzaW50YWJsZVsxMDI0ICsgMjU2XTsKLQotc3RhdGljIHZvaWQKLWluaXRTaW5UYWJsZSAodm9pZCkKLXsKLSAgZ2ludDMyICp0cHRyLCAqdHNpbnB0cjsKLSAgZ2ludCBpOwotCi0gIHRzaW5wdHIgPSB0cHRyID0gc2ludGFibGU7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICAqdHB0cisrID0gKGludCkgKHNpbiAoaSAqIE1fUEkgLyA1MTIpICogMzI3NjcpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAqdHB0cisrID0gKnRzaW5wdHIrKzsKLX0KLQotc3RhdGljIHZvaWQKLWluaXREaXN0VGFibGUgKEdzdFdhcnBUViAqIGZpbHRlciwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQpCi17Ci0gIGdpbnQzMiBoYWxmdywgaGFsZmgsICpkaXN0cHRyOwotICBnaW50IHgsIHk7Ci0gIGZsb2F0IG07Ci0KLSAgaGFsZncgPSB3aWR0aCA+PiAxOwotICBoYWxmaCA9IGhlaWdodCA+PiAxOwotCi0gIGRpc3RwdHIgPSBmaWx0ZXItPmRpc3R0YWJsZTsKLQotICBtID0gc3FydCAoKGRvdWJsZSkgKGhhbGZ3ICogaGFsZncgKyBoYWxmaCAqIGhhbGZoKSk7Ci0KLSAgZm9yICh5ID0gLWhhbGZoOyB5IDwgaGFsZmg7IHkrKykKLSAgICBmb3IgKHggPSAtaGFsZnc7IHggPCBoYWxmdzsgeCsrKQotI2lmZGVmIFBTMgotICAgICAgKmRpc3RwdHIrKyA9ICgoaW50KSAoKHNxcnRmICh4ICogeCArIHkgKiB5KSAqIDUxMS45OTk5KSAvIG0pKSA8PCAxOwotI2Vsc2UKLSAgICAgICpkaXN0cHRyKysgPSAoKGludCkgKChzcXJ0ICh4ICogeCArIHkgKiB5KSAqIDUxMS45OTk5KSAvIG0pKSA8PCAxOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfd2FycHR2X3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiBmaWx0ZXIsIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBHc3RXYXJwVFYgKndhcnB0diA9IEdTVF9XQVJQVFYgKGZpbHRlcik7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCB4dywgeXcsIGN3OwotICBnaW50MzIgYywgaSwgeCwgeSwgZHgsIGR5LCBtYXh4LCBtYXh5OwotICBnaW50MzIgKmN0cHRyLCAqZGlzdHB0cjsKLSAgZ2ludDMyICpjdGFibGU7Ci0gIGd1aW50MzIgKnNyYywgKmRlc3Q7Ci0gIGdpbnQgc3N0cmlkZSwgZHN0cmlkZTsKLQotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgc3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLSAgZHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMCk7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAod2FycHR2KTsKLSAgeHcgPSAoZ2ludCkgKHNpbiAoKHdhcnB0di0+dHZhbCArIDEwMCkgKiBNX1BJIC8gMTI4KSAqIDMwKTsKLSAgeXcgPSAoZ2ludCkgKHNpbiAoKHdhcnB0di0+dHZhbCkgKiBNX1BJIC8gMjU2KSAqIC0zNSk7Ci0gIGN3ID0gKGdpbnQpIChzaW4gKCh3YXJwdHYtPnR2YWwgLSA3MCkgKiBNX1BJIC8gNjQpICogNTApOwotICB4dyArPSAoZ2ludCkgKHNpbiAoKHdhcnB0di0+dHZhbCAtIDEwKSAqIE1fUEkgLyA1MTIpICogNDApOwotICB5dyArPSAoZ2ludCkgKHNpbiAoKHdhcnB0di0+dHZhbCArIDMwKSAqIE1fUEkgLyA1MTIpICogNDApOwotCi0gIGN0cHRyID0gd2FycHR2LT5jdGFibGU7Ci0gIGRpc3RwdHIgPSB3YXJwdHYtPmRpc3R0YWJsZTsKLSAgY3RhYmxlID0gd2FycHR2LT5jdGFibGU7Ci0KLSAgYyA9IDA7Ci0KLSAgZm9yICh4ID0gMDsgeCA8IDUxMjsgeCsrKSB7Ci0gICAgaSA9IChjID4+IDMpICYgMHgzRkU7Ci0gICAgKmN0cHRyKysgPSAoKHNpbnRhYmxlW2ldICogeXcpID4+IDE1KTsKLSAgICAqY3RwdHIrKyA9ICgoc2ludGFibGVbaSArIDI1Nl0gKiB4dykgPj4gMTUpOwotICAgIGMgKz0gY3c7Ci0gIH0KLSAgbWF4eCA9IHdpZHRoIC0gMjsKLSAgbWF4eSA9IGhlaWdodCAtIDI7Ci0KLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodCAtIDE7IHkrKykgewotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICBpID0gKmRpc3RwdHIrKzsKLSAgICAgIGR4ID0gY3RhYmxlW2kgKyAxXSArIHg7Ci0gICAgICBkeSA9IGN0YWJsZVtpXSArIHk7Ci0KLSAgICAgIGlmIChkeCA8IDApCi0gICAgICAgIGR4ID0gMDsKLSAgICAgIGVsc2UgaWYgKGR4ID4gbWF4eCkKLSAgICAgICAgZHggPSBtYXh4OwotCi0gICAgICBpZiAoZHkgPCAwKQotICAgICAgICBkeSA9IDA7Ci0gICAgICBlbHNlIGlmIChkeSA+IG1heHkpCi0gICAgICAgIGR5ID0gbWF4eTsKLQotICAgICAgZGVzdFt4XSA9IHNyY1tkeSAqIHNzdHJpZGUgLyA0ICsgZHhdOwotICAgIH0KLSAgICBkZXN0ICs9IGRzdHJpZGUgLyA0OwotICB9Ci0KLSAgd2FycHR2LT50dmFsID0gKHdhcnB0di0+dHZhbCArIDEpICYgNTExOwotICBHU1RfT0JKRUNUX1VOTE9DSyAod2FycHR2KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhcnB0dl9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RXYXJwVFYgKndhcnB0diA9IEdTVF9XQVJQVFYgKHRyYW5zKTsKLQotICB3YXJwdHYtPnR2YWwgPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhcnB0dl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0V2FycFRWICp3YXJwdHYgPSBHU1RfV0FSUFRWIChvYmplY3QpOwotCi0gIGdfZnJlZSAod2FycHR2LT5kaXN0dGFibGUpOwotICB3YXJwdHYtPmRpc3R0YWJsZSA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhcnB0dl9jbGFzc19pbml0IChHc3RXYXJwVFZDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3dhcnB0dl9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiV2FycFRWIGVmZmVjdCIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAiV2FycFRWIGRvZXMgcmVhbHRpbWUgZ29vJ2luZyBvZiB0aGUgdmlkZW8gaW5wdXQiLAotICAgICAgIlNhbSBMYW50aW5nYSA8c2xvdWtlbkBkZXZvbHV0aW9uLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfd2FycHR2X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfd2FycHR2X3NyY190ZW1wbGF0ZSk7Ci0KLSAgdHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXJwdHZfc3RhcnQpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXJwdHZfc2V0X2luZm8pOwotICB2ZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXJwdHZfdHJhbnNmb3JtX2ZyYW1lKTsKLQotICBpbml0U2luVGFibGUgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2FycHR2X2luaXQgKEdzdFdhcnBUViAqIHdhcnB0dikKLXsKLSAgLyogbm90aGluZyB0byBkbyAqLwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2VmZmVjdHYvZ3N0d2FycC5oIGIvZ3N0L2VmZmVjdHYvZ3N0d2FycC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2VlZWJjLi4wMDAwMDAwCi0tLSBhL2dzdC9lZmZlY3R2L2dzdHdhcnAuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIEVmZmVjVFYgLSBSZWFsdGltZSBEaWdpdGFsIFZpZGVvIEVmZmVjdG9yCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRlVLVUNISSBLZW50YXJvdQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfV0FSUF9IX18KLSNkZWZpbmUgX19HU1RfV0FSUF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfV0FSUFRWIFwKLSAgKGdzdF93YXJwdHZfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1dBUlBUVihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1dBUlBUVixHc3RXYXJwVFYpKQotI2RlZmluZSBHU1RfV0FSUFRWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1dBUlBUVixHc3RXYXJwVFZDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19XQVJQVFYob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9XQVJQVFYpKQotI2RlZmluZSBHU1RfSVNfV0FSUFRWX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1dBUlBUVikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RXYXJwVFYgR3N0V2FycFRWOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdhcnBUVkNsYXNzIEdzdFdhcnBUVkNsYXNzOwotCi1zdHJ1Y3QgX0dzdFdhcnBUVgotewotICBHc3RWaWRlb0ZpbHRlciB2aWRlb2ZpbHRlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBnaW50MzIgKmRpc3R0YWJsZTsKLSAgZ2ludDMyIGN0YWJsZVsxMDI0XTsKLSAgZ2ludCB0dmFsOwotfTsKLQotc3RydWN0IF9Hc3RXYXJwVFZDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF93YXJwdHZfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfV0FSUF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lcXVhbGl6ZXIvR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnMgYi9nc3QvZXF1YWxpemVyL0dzdElpckVxdWFsaXplcjEwQmFuZHMucHJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjI2MWI4Li4wMDAwMDAwCi0tLSBhL2dzdC9lcXVhbGl6ZXIvR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotW19wcmVzZXRzX10KLXZlcnNpb249MC4xMAotZWxlbWVudC1uYW1lPUdzdElpckVxdWFsaXplcjEwQmFuZHMKLQotW2JhbGxhZF0KLWJhbmQwPTQKLWJhbmQxPTMuNzUKLWJhbmQyPTIuNQotYmFuZDM9MAotYmFuZDQ9LTQKLWJhbmQ1PS02Ci1iYW5kNj0tMwotYmFuZDc9MAotYmFuZDg9Mi41Ci1iYW5kOT05Ci0KLVtjbGFzc2ljXQotYmFuZDA9MAotYmFuZDE9MAotYmFuZDI9MAotYmFuZDM9MAotYmFuZDQ9MAotYmFuZDU9MAotYmFuZDY9LTYKLWJhbmQ3PS03Ci1iYW5kOD0tNwotYmFuZDk9LTkuNQotCi1bY2x1Yl0KLWJhbmQwPTAKLWJhbmQxPTAKLWJhbmQyPTgKLWJhbmQzPTYKLWJhbmQ0PTUuNQotYmFuZDU9NQotYmFuZDY9MwotYmFuZDc9MAotYmFuZDg9MAotYmFuZDk9MAotCi1bZGFuY2VdCi1iYW5kMD05LjYKLWJhbmQxPTcKLWJhbmQyPTIuNQotYmFuZDM9MAotYmFuZDQ9MAotYmFuZDU9LTUuNgotYmFuZDY9LTcKLWJhbmQ3PS03Ci1iYW5kOD0wCi1iYW5kOT0wCi0KLVtwb3BdCi1iYW5kMD0tMS42Ci1iYW5kMT00LjUKLWJhbmQyPTcKLWJhbmQzPTgKLWJhbmQ0PTUuNgotYmFuZDU9MAotYmFuZDY9LTIuNQotYmFuZDc9LTIKLWJhbmQ4PS0xLjYKLWJhbmQ5PS0xLjUKLQotW3JlZ2dhZV0KLWJhbmQwPTAKLWJhbmQxPTAKLWJhbmQyPTAKLWJhbmQzPS01LjUKLWJhbmQ0PTAKLWJhbmQ1PTYuNQotYmFuZDY9Ni41Ci1iYW5kNz0wCi1iYW5kOD0wCi1iYW5kOT0wCi0KLVtyb2NrXQotYmFuZDA9OAotYmFuZDE9NQotYmFuZDI9LTUuNQotYmFuZDM9LTgKLWJhbmQ0PS0zCi1iYW5kNT00Ci1iYW5kNj04Ci1iYW5kNz0xMQotYmFuZDg9MTEKLWJhbmQ5PTExLjUKLQotW3NrYV0KLWJhbmQwPS0yLjUKLWJhbmQxPS01Ci1iYW5kMj0tNAotYmFuZDM9MAotYmFuZDQ9NAotYmFuZDU9NS41Ci1iYW5kNj04Ci1iYW5kNz05Ci1iYW5kOD0xMQotYmFuZDk9OQotCi1bc29mdF0KLWJhbmQwPTUKLWJhbmQxPTEuNQotYmFuZDI9MAotYmFuZDM9LTIuNQotYmFuZDQ9MAotYmFuZDU9NAotYmFuZDY9OAotYmFuZDc9OQotYmFuZDg9MTEKLWJhbmQ5PTEyCi0KLVt0ZWNobm9dCi1iYW5kMD04Ci1iYW5kMT01LjUKLWJhbmQyPTAKLWJhbmQzPS01LjUKLWJhbmQ0PS01Ci1iYW5kNT0wCi1iYW5kNj04Ci1iYW5kNz0xMAotYmFuZDg9MTAKLWJhbmQ5PTkKLQotCi1bcGFydHldCi1iYW5kMD03Ci1iYW5kMT03Ci1iYW5kMj0wCi1iYW5kMz0wCi1iYW5kND0wCi1iYW5kNT0wCi1iYW5kNj0wCi1iYW5kNz0wCi1iYW5kOD03Ci1iYW5kOT03Ci0KLQotW21vcmUgYmFzc10KLWJhbmQwPS04Ci1iYW5kMT0xMAotYmFuZDI9MTAKLWJhbmQzPTUuNQotYmFuZDQ9MS41Ci1iYW5kNT0tNAotYmFuZDY9LTgKLWJhbmQ3PS0xMAotYmFuZDg9LTExCi1iYW5kOT0tMTEKLQotW21vcmUgYmFzcyBhbmQgdHJlYmxlXQotYmFuZDA9OAotYmFuZDE9NS41Ci1iYW5kMj0wCi1iYW5kMz0tNwotYmFuZDQ9LTUKLWJhbmQ1PTEuNQotYmFuZDY9OAotYmFuZDc9MTEuMgotYmFuZDg9MTIKLWJhbmQ5PTEyCi0KLVttb3JlIHRyZWJsZV0KLWJhbmQwPS0xMAotYmFuZDE9LTEwCi1iYW5kMj0tMTAKLWJhbmQzPS00Ci1iYW5kND0yLjUKLWJhbmQ1PTExCi1iYW5kNj0xNgotYmFuZDc9MTYKLWJhbmQ4PTE2Ci1iYW5kOT0xOAotCmRpZmYgLS1naXQgYS9nc3QvZXF1YWxpemVyL0dzdElpckVxdWFsaXplcjNCYW5kcy5wcnMgYi9nc3QvZXF1YWxpemVyL0dzdElpckVxdWFsaXplcjNCYW5kcy5wcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiOGVmNWEuLjAwMDAwMDAKLS0tIGEvZ3N0L2VxdWFsaXplci9Hc3RJaXJFcXVhbGl6ZXIzQmFuZHMucHJzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotW19wcmVzZXRzX10KLXZlcnNpb249MC4xMAotZWxlbWVudC1uYW1lPUdzdElpckVxdWFsaXplcjNCYW5kcwotCi1bbW9yZSBiYXNzXQotYmFuZDA9Ny43NQotYmFuZDE9MAotYmFuZDI9MAotCi1bbW9yZSB0cmViYmxlXQotYmFuZDA9MAotYmFuZDE9MAotYmFuZDI9Ni4wCi0KZGlmZiAtLWdpdCBhL2dzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW0gYi9nc3QvZXF1YWxpemVyL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2U0Yjc4Li4wMDAwMDAwCi0tLSBhL2dzdC9lcXVhbGl6ZXIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RlcXVhbGl6ZXIubGEKLQotbGliZ3N0ZXF1YWxpemVyX2xhX1NPVVJDRVMgPSBcCi0gICAgICAgIGdzdGlpcmVxdWFsaXplci5jIGdzdGlpcmVxdWFsaXplci5oIFwKLSAgICAgICAgZ3N0aWlyZXF1YWxpemVybmJhbmRzLmMgZ3N0aWlyZXF1YWxpemVybmJhbmRzLmggXAotICAgICAgICBnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYyBnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuaCBcCi0gICAgICAgIGdzdGlpcmVxdWFsaXplcjEwYmFuZHMuYyBnc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmgKLQotbGliZ3N0ZXF1YWxpemVyX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKQotbGliZ3N0ZXF1YWxpemVyX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgJChMSUJNKQotbGliZ3N0ZXF1YWxpemVyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGVxdWFsaXplcl9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGlpcmVxdWFsaXplci5oCi0KLXByZXNldGRpciA9ICQoZGF0YWRpcikvZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9wcmVzZXRzCi1wcmVzZXRfREFUQSA9IEdzdElpckVxdWFsaXplcjNCYW5kcy5wcnMgR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnMKLQotRVhUUkFfRElTVCA9ICQocHJlc2V0X0RBVEEpCmRpZmYgLS1naXQgYS9nc3QvZXF1YWxpemVyL01ha2VmaWxlLmluIGIvZ3N0L2VxdWFsaXplci9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3MjIyYy4uMDAwMDAwMAotLS0gYS9nc3QvZXF1YWxpemVyL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTczICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2VxdWFsaXplcgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiICIkKERFU1RESVIpJChwcmVzZXRkaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RlcXVhbGl6ZXJfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGVxdWFsaXplcl9sYV9PQkpFQ1RTID0gbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplci5sbyBcCi0JbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcm5iYW5kcy5sbyBcCi0JbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcjNiYW5kcy5sbyBcCi0JbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcjEwYmFuZHMubG8KLWxpYmdzdGVxdWFsaXplcl9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RlcXVhbGl6ZXJfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGVxdWFsaXplcl9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGVxdWFsaXplcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RlcXVhbGl6ZXJfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0ZXF1YWxpemVyX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGVxdWFsaXplcl9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLURBVEEgPSAkKHByZXNldF9EQVRBKQotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGVxdWFsaXplci5sYQotbGliZ3N0ZXF1YWxpemVyX2xhX1NPVVJDRVMgPSBcCi0gICAgICAgIGdzdGlpcmVxdWFsaXplci5jIGdzdGlpcmVxdWFsaXplci5oIFwKLSAgICAgICAgZ3N0aWlyZXF1YWxpemVybmJhbmRzLmMgZ3N0aWlyZXF1YWxpemVybmJhbmRzLmggXAotICAgICAgICBnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYyBnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuaCBcCi0gICAgICAgIGdzdGlpcmVxdWFsaXplcjEwYmFuZHMuYyBnc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmgKLQotbGliZ3N0ZXF1YWxpemVyX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKQotCi1saWJnc3RlcXVhbGl6ZXJfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKSAkKExJQk0pCi0KLWxpYmdzdGVxdWFsaXplcl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RlcXVhbGl6ZXJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0aWlyZXF1YWxpemVyLmgKLXByZXNldGRpciA9ICQoZGF0YWRpcikvZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9wcmVzZXRzCi1wcmVzZXRfREFUQSA9IEdzdElpckVxdWFsaXplcjNCYW5kcy5wcnMgR3N0SWlyRXF1YWxpemVyMTBCYW5kcy5wcnMKLUVYVFJBX0RJU1QgPSAkKHByZXNldF9EQVRBKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2VxdWFsaXplci9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvZXF1YWxpemVyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0ZXF1YWxpemVyLmxhOiAkKGxpYmdzdGVxdWFsaXplcl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0ZXF1YWxpemVyX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RlcXVhbGl6ZXJfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9PQkpFQ1RTKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVybmJhbmRzLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyLmxvOiBnc3RpaXJlcXVhbGl6ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVxdWFsaXplcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlcXVhbGl6ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIuVHBvIC1jIC1vIGxpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIubG8gYHRlc3QgLWYgJ2dzdGlpcmVxdWFsaXplci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpaXJlcXVhbGl6ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplci5UcG8gJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0aWlyZXF1YWxpemVyLmMnIG9iamVjdD0nbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGVxdWFsaXplcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RlcXVhbGl6ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplci5sbyBgdGVzdCAtZiAnZ3N0aWlyZXF1YWxpemVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGlpcmVxdWFsaXplci5jCi0KLWxpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXJuYmFuZHMubG86IGdzdGlpcmVxdWFsaXplcm5iYW5kcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZXF1YWxpemVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcm5iYW5kcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcm5iYW5kcy5UcG8gLWMgLW8gbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcm5iYW5kcy5sbyBgdGVzdCAtZiAnZ3N0aWlyZXF1YWxpemVybmJhbmRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGlpcmVxdWFsaXplcm5iYW5kcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVybmJhbmRzLlRwbyAkKERFUERJUikvbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcm5iYW5kcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYycgb2JqZWN0PSdsaWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVybmJhbmRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZXF1YWxpemVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVybmJhbmRzLmxvIGB0ZXN0IC1mICdnc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aWlyZXF1YWxpemVybmJhbmRzLmMKLQotbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcjNiYW5kcy5sbzogZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlcXVhbGl6ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZXF1YWxpemVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyM2JhbmRzLlRwbyAtYyAtbyBsaWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmxvIGB0ZXN0IC1mICdnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIzYmFuZHMuVHBvICQoREVQRElSKS9saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyM2JhbmRzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jJyBvYmplY3Q9J2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIzYmFuZHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RlcXVhbGl6ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0ZXF1YWxpemVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIzYmFuZHMubG8gYHRlc3QgLWYgJ2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuYwotCi1saWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5sbzogZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZXF1YWxpemVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcjEwYmFuZHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLlRwbyAtYyAtbyBsaWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5sbyBgdGVzdCAtZiAnZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLlRwbyAkKERFUERJUikvbGliZ3N0ZXF1YWxpemVyX2xhLWdzdGlpcmVxdWFsaXplcjEwYmFuZHMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jJyBvYmplY3Q9J2xpYmdzdGVxdWFsaXplcl9sYS1nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZXF1YWxpemVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGVxdWFsaXplcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RlcXVhbGl6ZXJfbGEtZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5sbyBgdGVzdCAtZiAnZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLWluc3RhbGwtcHJlc2V0REFUQTogJChwcmVzZXRfREFUQSkKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwcmVzZXRfREFUQSknOyB0ZXN0IC1uICIkKHByZXNldGRpcikiIHx8IGxpc3Q9OyBcCi0JaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocHJlc2V0ZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwcmVzZXRkaXIpIiB8fCBleGl0IDE7IFwKLQlmaTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHByZXNldGRpciknIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHByZXNldGRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtcHJlc2V0REFUQToKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHByZXNldF9EQVRBKSc7IHRlc3QgLW4gIiQocHJlc2V0ZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCWRpcj0nJChERVNURElSKSQocHJlc2V0ZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoREFUQSkgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSIgIiQoREVTVERJUikkKHByZXNldGRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXByZXNldERBVEEKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wcmVzZXREQVRBCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXByZXNldERBVEEgaW5zdGFsbC1wcyBcCi0JaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAotCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIFwKLQl1bmluc3RhbGwtYW0gdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wcmVzZXREQVRBCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jIGIvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIyM2QyMS4uMDAwMDAwMAotLS0gYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5jCisrKyAvZGV2L251bGwKQEAgLTEsOTE5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwND4gQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDwyMDA3PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKiAgICAgICAgICAgICAgIDwyMDA3PiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXIuaCIKLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXJuYmFuZHMuaCIKLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXIzYmFuZHMuaCIKLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmgiCi0KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKGVxdWFsaXplcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBlcXVhbGl6ZXJfZGVidWcKLQotI2RlZmluZSBCQU5EU19MT0NLKGVxdSkgZ19tdXRleF9sb2NrKCZlcXUtPmJhbmRzX2xvY2spCi0jZGVmaW5lIEJBTkRTX1VOTE9DSyhlcXUpIGdfbXV0ZXhfdW5sb2NrKCZlcXUtPmJhbmRzX2xvY2spCi0KLXN0YXRpYyB2b2lkIGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2ludGVyZmFjZV9pbml0IChncG9pbnRlciBnX2lmYWNlLAotICAgIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotCi1zdGF0aWMgdm9pZCBnc3RfaWlyX2VxdWFsaXplcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfaWlyX2VxdWFsaXplcl9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBmaWx0ZXIsCi0gICAgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfaWlyX2VxdWFsaXplcl90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiBidHJhbnMsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyB2b2lkIHNldF9wYXNzdGhyb3VnaCAoR3N0SWlyRXF1YWxpemVyICogZXF1KTsKLQotI2RlZmluZSBBTExPV0VEX0NBUFMgXAotICAgICJhdWRpby94LXJhdywiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgZm9ybWF0PShzdHJpbmcpIHsiR1NUX0FVRElPX05FKFMxNikiLCJHU1RfQVVESU9fTkUoRjMyKSIsIiAgXAotICAgICAgICAgICAgICAgICAgICAgICAgR1NUX0FVRElPX05FKEY2NCkiIH0sICIgICAgICAgICAgICAgICAgICAgXAotICAgICIgcmF0ZT0oaW50KVsxMDAwLE1BWF0sIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgY2hhbm5lbHM9KGludClbMSxNQVhdLCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQiCi0KLSNkZWZpbmUgZ3N0X2lpcl9lcXVhbGl6ZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdElpckVxdWFsaXplciwgZ3N0X2lpcl9lcXVhbGl6ZXIsCi0gICAgR1NUX1RZUEVfQVVESU9fRklMVEVSLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfQ0hJTERfUFJPWFksCi0gICAgICAgIGdzdF9paXJfZXF1YWxpemVyX2NoaWxkX3Byb3h5X2ludGVyZmFjZV9pbml0KQotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfUFJFU0VULCBOVUxMKSk7Ci0KLQotLyogY2hpbGQgb2JqZWN0ICovCi0KLWVudW0KLXsKLSAgUFJPUF9HQUlOID0gMSwKLSAgUFJPUF9GUkVRLAotICBQUk9QX0JBTkRXSURUSCwKLSAgUFJPUF9UWVBFCi19OwotCi10eXBlZGVmIGVudW0KLXsKLSAgQkFORF9UWVBFX1BFQUsgPSAwLAotICBCQU5EX1RZUEVfTE9XX1NIRUxGLAotICBCQU5EX1RZUEVfSElHSF9TSEVMRgotfSBHc3RJaXJFcXVhbGl6ZXJCYW5kVHlwZTsKLQotI2RlZmluZSBHU1RfVFlQRV9JSVJfRVFVQUxJWkVSX0JBTkRfVFlQRSAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF90eXBlX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfaWlyX2VxdWFsaXplcl9iYW5kX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBndHlwZSA9IDA7Ci0KLSAgaWYgKGd0eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHtCQU5EX1RZUEVfUEVBSywgIlBlYWsgZmlsdGVyIChkZWZhdWx0IGZvciBpbm5lciBiYW5kcykiLCAicGVhayJ9LAotICAgICAge0JBTkRfVFlQRV9MT1dfU0hFTEYsICJMb3cgc2hlbGYgZmlsdGVyIChkZWZhdWx0IGZvciBmaXJzdCBiYW5kKSIsCi0gICAgICAgICAgImxvdy1zaGVsZiJ9LAotICAgICAge0JBTkRfVFlQRV9ISUdIX1NIRUxGLCAiSGlnaCBzaGVsZiBmaWx0ZXIgKGRlZmF1bHQgZm9yIGxhc3QgYmFuZCkiLAotICAgICAgICAgICJoaWdoLXNoZWxmIn0sCi0gICAgICB7MCwgTlVMTCwgTlVMTH0KLSAgICB9OwotCi0gICAgZ3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0SWlyRXF1YWxpemVyQmFuZFR5cGUiLCB2YWx1ZXMpOwotICB9Ci0gIHJldHVybiBndHlwZTsKLX0KLQotCi10eXBlZGVmIHN0cnVjdCBfR3N0SWlyRXF1YWxpemVyQmFuZENsYXNzIEdzdElpckVxdWFsaXplckJhbmRDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9JSVJfRVFVQUxJWkVSX0JBTkQgXAotICAoZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl9CQU5EKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl9CQU5ELEdzdElpckVxdWFsaXplckJhbmQpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl9CQU5EX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfQkFORCxHc3RJaXJFcXVhbGl6ZXJCYW5kQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSUlSX0VRVUFMSVpFUl9CQU5EKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl9CQU5EKSkKLSNkZWZpbmUgR1NUX0lTX0lJUl9FUVVBTElaRVJfQkFORF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSX0JBTkQpKQotCi1zdHJ1Y3QgX0dzdElpckVxdWFsaXplckJhbmQKLXsKLSAgR3N0T2JqZWN0IG9iamVjdDsKLQotICAvKjwgcHJpdmF0ZSA+ICovCi0gIC8qIGNlbnRlciBmcmVxdWVuY3kgYW5kIGdhaW4gKi8KLSAgZ2RvdWJsZSBmcmVxOwotICBnZG91YmxlIGdhaW47Ci0gIGdkb3VibGUgd2lkdGg7Ci0gIEdzdElpckVxdWFsaXplckJhbmRUeXBlIHR5cGU7Ci0KLSAgLyogc2Vjb25kIG9yZGVyIGlpciBmaWx0ZXIgKi8KLSAgZ2RvdWJsZSBiMSwgYjI7ICAgICAgICAgICAgICAgLyogSUlSIGNvZWZmaWNpZW50cyBmb3Igb3V0cHV0cyAqLwotICBnZG91YmxlIGEwLCBhMSwgYTI7ICAgICAgICAgICAvKiBJSVIgY29lZmZpY2llbnRzIGZvciBpbnB1dHMgKi8KLX07Ci0KLXN0cnVjdCBfR3N0SWlyRXF1YWxpemVyQmFuZENsYXNzCi17Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyBHVHlwZSBnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF90eXBlICh2b2lkKTsKLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdElpckVxdWFsaXplckJhbmQgKmJhbmQgPSBHU1RfSUlSX0VRVUFMSVpFUl9CQU5EIChvYmplY3QpOwotICBHc3RJaXJFcXVhbGl6ZXIgKmVxdSA9Ci0gICAgICBHU1RfSUlSX0VRVUFMSVpFUiAoZ3N0X29iamVjdF9nZXRfcGFyZW50IChHU1RfT0JKRUNUIChiYW5kKSkpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9HQUlOOnsKLSAgICAgIGdkb3VibGUgZ2FpbjsKLQotICAgICAgZ2FpbiA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFuZCwgImdhaW4gPSAlbGYgLT4gJWxmIiwgYmFuZC0+Z2FpbiwgZ2Fpbik7Ci0gICAgICBpZiAoZ2FpbiAhPSBiYW5kLT5nYWluKSB7Ci0gICAgICAgIEJBTkRTX0xPQ0sgKGVxdSk7Ci0gICAgICAgIGVxdS0+bmVlZF9uZXdfY29lZmZpY2llbnRzID0gVFJVRTsKLSAgICAgICAgYmFuZC0+Z2FpbiA9IGdhaW47Ci0gICAgICAgIHNldF9wYXNzdGhyb3VnaCAoZXF1KTsKLSAgICAgICAgQkFORFNfVU5MT0NLIChlcXUpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYW5kLCAiY2hhbmdlZCBnYWluID0gJWxmICIsIGJhbmQtPmdhaW4pOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9GUkVROnsKLSAgICAgIGdkb3VibGUgZnJlcTsKLQotICAgICAgZnJlcSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFuZCwgImZyZXEgPSAlbGYgLT4gJWxmIiwgYmFuZC0+ZnJlcSwgZnJlcSk7Ci0gICAgICBpZiAoZnJlcSAhPSBiYW5kLT5mcmVxKSB7Ci0gICAgICAgIEJBTkRTX0xPQ0sgKGVxdSk7Ci0gICAgICAgIGVxdS0+bmVlZF9uZXdfY29lZmZpY2llbnRzID0gVFJVRTsKLSAgICAgICAgYmFuZC0+ZnJlcSA9IGZyZXE7Ci0gICAgICAgIEJBTkRTX1VOTE9DSyAoZXF1KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFuZCwgImNoYW5nZWQgZnJlcSA9ICVsZiAiLCBiYW5kLT5mcmVxKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQkFORFdJRFRIOnsKLSAgICAgIGdkb3VibGUgd2lkdGg7Ci0KLSAgICAgIHdpZHRoID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYW5kLCAid2lkdGggPSAlbGYgLT4gJWxmIiwgYmFuZC0+d2lkdGgsIHdpZHRoKTsKLSAgICAgIGlmICh3aWR0aCAhPSBiYW5kLT53aWR0aCkgewotICAgICAgICBCQU5EU19MT0NLIChlcXUpOwotICAgICAgICBlcXUtPm5lZWRfbmV3X2NvZWZmaWNpZW50cyA9IFRSVUU7Ci0gICAgICAgIGJhbmQtPndpZHRoID0gd2lkdGg7Ci0gICAgICAgIEJBTkRTX1VOTE9DSyAoZXF1KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFuZCwgImNoYW5nZWQgd2lkdGggPSAlbGYgIiwgYmFuZC0+d2lkdGgpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9UWVBFOnsKLSAgICAgIEdzdElpckVxdWFsaXplckJhbmRUeXBlIHR5cGU7Ci0KLSAgICAgIHR5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYW5kLCAidHlwZSA9ICVkIC0+ICVkIiwgYmFuZC0+dHlwZSwgdHlwZSk7Ci0gICAgICBpZiAodHlwZSAhPSBiYW5kLT50eXBlKSB7Ci0gICAgICAgIEJBTkRTX0xPQ0sgKGVxdSk7Ci0gICAgICAgIGVxdS0+bmVlZF9uZXdfY29lZmZpY2llbnRzID0gVFJVRTsKLSAgICAgICAgYmFuZC0+dHlwZSA9IHR5cGU7Ci0gICAgICAgIEJBTkRTX1VOTE9DSyAoZXF1KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFuZCwgImNoYW5nZWQgdHlwZSA9ICVkICIsIGJhbmQtPnR5cGUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChlcXUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SWlyRXF1YWxpemVyQmFuZCAqYmFuZCA9IEdTVF9JSVJfRVFVQUxJWkVSX0JBTkQgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0dBSU46Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBiYW5kLT5nYWluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GUkVROgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgYmFuZC0+ZnJlcSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORFdJRFRIOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgYmFuZC0+d2lkdGgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RZUEU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgYmFuZC0+dHlwZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWlyX2VxdWFsaXplcl9iYW5kX2NsYXNzX2luaXQgKEdzdElpckVxdWFsaXplckJhbmRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9paXJfZXF1YWxpemVyX2JhbmRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaWlyX2VxdWFsaXplcl9iYW5kX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0dBSU4sCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiZ2FpbiIsICJnYWluIiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIHJhbmdpbmcgZnJvbSAtMjQuMCBkQiB0byArMTIuMCBkQiIsCi0gICAgICAgICAgLTI0LjAsIDEyLjAsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GUkVRLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImZyZXEiLCAiZnJlcSIsCi0gICAgICAgICAgImNlbnRlciBmcmVxdWVuY3kgb2YgdGhlIGJhbmQiLAotICAgICAgICAgIDAuMCwgMTAwMDAwLjAsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CQU5EV0lEVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYmFuZHdpZHRoIiwgImJhbmR3aWR0aCIsCi0gICAgICAgICAgImRpZmZlcmVuY2UgYmV0d2VlbiBiYW5kZWRnZXMgaW4gSHoiLAotICAgICAgICAgIDAuMCwgMTAwMDAwLjAsIDEuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UWVBFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJ0eXBlIiwgIlR5cGUiLAotICAgICAgICAgICJGaWx0ZXIgdHlwZSIsIEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfQkFORF9UWVBFLAotICAgICAgICAgIEJBTkRfVFlQRV9QRUFLLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyX2JhbmRfaW5pdCAoR3N0SWlyRXF1YWxpemVyQmFuZCAqIGJhbmQsCi0gICAgR3N0SWlyRXF1YWxpemVyQmFuZENsYXNzICoga2xhc3MpCi17Ci0gIGJhbmQtPmZyZXEgPSAwLjA7Ci0gIGJhbmQtPmdhaW4gPSAwLjA7Ci0gIGJhbmQtPndpZHRoID0gMS4wOwotICBiYW5kLT50eXBlID0gQkFORF9UWVBFX1BFQUs7Ci19Ci0KLXN0YXRpYyBHVHlwZQotZ3N0X2lpcl9lcXVhbGl6ZXJfYmFuZF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHR5cGUgPSAwOwotCi0gIGlmIChHX1VOTElLRUxZICghdHlwZSkpIHsKLSAgICBjb25zdCBHVHlwZUluZm8gdHlwZV9pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RJaXJFcXVhbGl6ZXJCYW5kQ2xhc3MpLAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF9paXJfZXF1YWxpemVyX2JhbmRfY2xhc3NfaW5pdCwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgc2l6ZW9mIChHc3RJaXJFcXVhbGl6ZXJCYW5kKSwKLSAgICAgIDAsCi0gICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9paXJfZXF1YWxpemVyX2JhbmRfaW5pdCwKLSAgICB9OwotICAgIHR5cGUgPQotICAgICAgICBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljIChHU1RfVFlQRV9PQkpFQ1QsICJHc3RJaXJFcXVhbGl6ZXJCYW5kIiwKLSAgICAgICAgJnR5cGVfaW5mbywgMCk7Ci0gIH0KLSAgcmV0dXJuICh0eXBlKTsKLX0KLQotCi0vKiBjaGlsZCBwcm94eSBpZmFjZSAqLwotc3RhdGljIEdPYmplY3QgKgotZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHksCi0gICAgZ3VpbnQgaW5kZXgpCi17Ci0gIEdzdElpckVxdWFsaXplciAqZXF1ID0gR1NUX0lJUl9FUVVBTElaRVIgKGNoaWxkX3Byb3h5KTsKLSAgR09iamVjdCAqcmV0OwotCi0gIEJBTkRTX0xPQ0sgKGVxdSk7Ci0gIGlmIChHX1VOTElLRUxZIChpbmRleCA+PSBlcXUtPmZyZXFfYmFuZF9jb3VudCkpIHsKLSAgICBCQU5EU19VTkxPQ0sgKGVxdSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGluZGV4IDwgZXF1LT5mcmVxX2JhbmRfY291bnQsIE5VTEwpOwotICB9Ci0KLSAgcmV0ID0gZ19vYmplY3RfcmVmIChlcXUtPmJhbmRzW2luZGV4XSk7Ci0gIEJBTkRTX1VOTE9DSyAoZXF1KTsKLQotICBHU1RfTE9HX09CSkVDVCAoZXF1LCAicmV0dXJuIGNoaWxkWyVkXSAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5kZXgsIHJldCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHkpCi17Ci0gIEdzdElpckVxdWFsaXplciAqZXF1ID0gR1NUX0lJUl9FUVVBTElaRVIgKGNoaWxkX3Byb3h5KTsKLQotICBHU1RfTE9HICgid2UgaGF2ZSAlZCBjaGlsZHJlbiIsIGVxdS0+ZnJlcV9iYW5kX2NvdW50KTsKLSAgcmV0dXJuIGVxdS0+ZnJlcV9iYW5kX2NvdW50OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfY2hpbGRfcHJveHlfaW50ZXJmYWNlX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKLXsKLSAgR3N0Q2hpbGRQcm94eUludGVyZmFjZSAqaWZhY2UgPSBnX2lmYWNlOwotCi0gIEdTVF9ERUJVRyAoImluaXRpYWxpemluZyBpZmFjZSIpOwotCi0gIGlmYWNlLT5nZXRfY2hpbGRfYnlfaW5kZXggPSBnc3RfaWlyX2VxdWFsaXplcl9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXg7Ci0gIGlmYWNlLT5nZXRfY2hpbGRyZW5fY291bnQgPSBnc3RfaWlyX2VxdWFsaXplcl9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQ7Ci19Ci0KLS8qIGVxdWFsaXplciBpbXBsZW1lbnRhdGlvbiAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfY2xhc3NfaW5pdCAoR3N0SWlyRXF1YWxpemVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QXVkaW9GaWx0ZXJDbGFzcyAqYXVkaW9fZmlsdGVyX2NsYXNzID0gKEdzdEF1ZGlvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9paXJfZXF1YWxpemVyX2ZpbmFsaXplOwotICBhdWRpb19maWx0ZXJfY2xhc3MtPnNldHVwID0gZ3N0X2lpcl9lcXVhbGl6ZXJfc2V0dXA7Ci0gIGJ0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0gZ3N0X2lpcl9lcXVhbGl6ZXJfdHJhbnNmb3JtX2lwOwotICBidHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcF9vbl9wYXNzdGhyb3VnaCA9IEZBTFNFOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQUxMT1dFRF9DQVBTKTsKLSAgZ3N0X2F1ZGlvX2ZpbHRlcl9jbGFzc19hZGRfcGFkX3RlbXBsYXRlcyAoYXVkaW9fZmlsdGVyX2NsYXNzLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfaW5pdCAoR3N0SWlyRXF1YWxpemVyICogZXEpCi17Ci0gIGdfbXV0ZXhfaW5pdCAoJmVxLT5iYW5kc19sb2NrKTsKLSAgLyogQmFuZCBnYWlucyBhcmUgMCBieSBkZWZhdWx0LCBwYXNzdGhyb3VnaCB1bnRpbCB0aGV5IGFyZSBjaGFuZ2VkICovCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKEdTVF9CQVNFX1RSQU5TRk9STSAoZXEpLCBUUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RJaXJFcXVhbGl6ZXIgKmVxdSA9IEdTVF9JSVJfRVFVQUxJWkVSIChvYmplY3QpOwotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGVxdS0+ZnJlcV9iYW5kX2NvdW50OyBpKyspIHsKLSAgICBpZiAoZXF1LT5iYW5kc1tpXSkKLSAgICAgIGdzdF9vYmplY3RfdW5wYXJlbnQgKEdTVF9PQkpFQ1QgKGVxdS0+YmFuZHNbaV0pKTsKLSAgICBlcXUtPmJhbmRzW2ldID0gTlVMTDsKLSAgfQotICBlcXUtPmZyZXFfYmFuZF9jb3VudCA9IDA7Ci0KLSAgZ19mcmVlIChlcXUtPmJhbmRzKTsKLSAgZ19mcmVlIChlcXUtPmhpc3RvcnkpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZlcXUtPmJhbmRzX2xvY2spOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotLyogRmlsdGVyIHRha2VuIGZyb20KLSAqCi0gKiBUaGUgRXF1aXZhbGVuY2Ugb2YgVmFyaW91cyBNZXRob2RzIG9mIENvbXB1dGluZwotICogQmlxdWFkIENvZWZmaWNpZW50cyBmb3IgQXVkaW8gUGFyYW1ldHJpYyBFcXVhbGl6ZXJzCi0gKgotICogYnkgUm9iZXJ0IEJyaXN0b3ctSm9obnNvbgotICoKLSAqIGh0dHA6Ly93d3cuYWVzLm9yZy9lLWxpYi9icm93c2UuY2ZtP2VsaWI9NjMyNgotICogaHR0cDovL3d3dy5tdXNpY2RzcC5vcmcvZmlsZXMvRVEtQ29lZmZpY2llbnRzLnBkZgotICogaHR0cDovL3d3dy5tdXNpY2RzcC5vcmcvZmlsZXMvQXVkaW8tRVEtQ29va2Jvb2sudHh0Ci0gKgotICogVGhlIGJhbmR3aWR0aCBtZXRob2QgdGhhdCB3ZSB1c2UgaGVyZSBpcyB0aGUgcHJlZmVycmVkCi0gKiBvbmUgZnJvbSB0aGlzIGFydGljbGUgdHJhbnNmb3JtZWQgZnJvbSBvY3RhdmVzIHRvIGZyZXF1ZW5jeQotICogaW4gSHouCi0gKi8KLXN0YXRpYyBpbmxpbmUgZ2RvdWJsZQotYXJnX3RvX3NjYWxlIChnZG91YmxlIGFyZykKLXsKLSAgcmV0dXJuIChwb3cgKDEwLjAsIGFyZyAvIDQwLjApKTsKLX0KLQotc3RhdGljIGdkb3VibGUKLWNhbGN1bGF0ZV9vbWVnYSAoZ2RvdWJsZSBmcmVxLCBnaW50IHJhdGUpCi17Ci0gIGdkb3VibGUgb21lZ2E7Ci0KLSAgaWYgKGZyZXEgLyByYXRlID49IDAuNSkKLSAgICBvbWVnYSA9IEdfUEk7Ci0gIGVsc2UgaWYgKGZyZXEgPD0gMC4wKQotICAgIG9tZWdhID0gMC4wOwotICBlbHNlCi0gICAgb21lZ2EgPSAyLjAgKiBHX1BJICogKGZyZXEgLyByYXRlKTsKLQotICByZXR1cm4gb21lZ2E7Ci19Ci0KLXN0YXRpYyBnZG91YmxlCi1jYWxjdWxhdGVfYncgKEdzdElpckVxdWFsaXplckJhbmQgKiBiYW5kLCBnaW50IHJhdGUpCi17Ci0gIGdkb3VibGUgYncgPSAwLjA7Ci0KLSAgaWYgKGJhbmQtPndpZHRoIC8gcmF0ZSA+PSAwLjUpIHsKLSAgICAvKiBJZiBiYW5kd2lkdGggPT0gMC41IHRoZSBjYWxjdWxhdGlvbiBiZWxvdyBmYWlscyBhcyB0YW4oR19QSS8yKQotICAgICAqIGlzIHVuZGVmaW5lZC4gU28gc2V0IHRoZSBiYW5kd2lkdGggdG8gYSBzbGlnaHRseSBzbWFsbGVyIHZhbHVlLgotICAgICAqLwotICAgIGJ3ID0gR19QSSAtIDAuMDAwMDAwMDE7Ci0gIH0gZWxzZSBpZiAoYmFuZC0+d2lkdGggPD0gMC4wKSB7Ci0gICAgLyogSWYgYmFuZHdpZHRoID09IDAgdGhpcyBiYW5kIHdvbid0IGNoYW5nZSBhbnl0aGluZyBzbyBzZXQKLSAgICAgKiB0aGUgY29lZmZpY2llbnRzIGFjY29yZGluZ2x5LiBUaGUgY29lZmZpY2llbnQgY2FsY3VsYXRpb24KLSAgICAgKiBiZWxvdyB3b3VsZCBjcmVhdGUgY29lZmZpY2llbnRzIHRoYXQgZm9yIHNvbWUgcmVhc29uIGFtcGxpZnkKLSAgICAgKiB0aGUgYmFuZC4KLSAgICAgKi8KLSAgICBiYW5kLT5hMCA9IDEuMDsKLSAgICBiYW5kLT5hMSA9IDAuMDsKLSAgICBiYW5kLT5hMiA9IDAuMDsKLSAgICBiYW5kLT5iMSA9IDAuMDsKLSAgICBiYW5kLT5iMiA9IDAuMDsKLSAgfSBlbHNlIHsKLSAgICBidyA9IDIuMCAqIEdfUEkgKiAoYmFuZC0+d2lkdGggLyByYXRlKTsKLSAgfQotICByZXR1cm4gYnc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9wZWFrX2ZpbHRlciAoR3N0SWlyRXF1YWxpemVyICogZXF1LCBHc3RJaXJFcXVhbGl6ZXJCYW5kICogYmFuZCkKLXsKLSAgZ2ludCByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChlcXUpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHJhdGUpOwotCi0gIHsKLSAgICBnZG91YmxlIGdhaW4sIG9tZWdhLCBidzsKLSAgICBnZG91YmxlIGFscGhhLCBhbHBoYTEsIGFscGhhMiwgYjA7Ci0KLSAgICBnYWluID0gYXJnX3RvX3NjYWxlIChiYW5kLT5nYWluKTsKLSAgICBvbWVnYSA9IGNhbGN1bGF0ZV9vbWVnYSAoYmFuZC0+ZnJlcSwgcmF0ZSk7Ci0gICAgYncgPSBjYWxjdWxhdGVfYncgKGJhbmQsIHJhdGUpOwotICAgIGlmIChidyA9PSAwLjApCi0gICAgICBnb3RvIG91dDsKLQotICAgIGFscGhhID0gdGFuIChidyAvIDIuMCk7Ci0KLSAgICBhbHBoYTEgPSBhbHBoYSAqIGdhaW47Ci0gICAgYWxwaGEyID0gYWxwaGEgLyBnYWluOwotCi0gICAgYjAgPSAoMS4wICsgYWxwaGEyKTsKLQotICAgIGJhbmQtPmEwID0gKDEuMCArIGFscGhhMSkgLyBiMDsKLSAgICBiYW5kLT5hMSA9ICgtMi4wICogY29zIChvbWVnYSkpIC8gYjA7Ci0gICAgYmFuZC0+YTIgPSAoMS4wIC0gYWxwaGExKSAvIGIwOwotICAgIGJhbmQtPmIxID0gKDIuMCAqIGNvcyAob21lZ2EpKSAvIGIwOwotICAgIGJhbmQtPmIyID0gLSgxLjAgLSBhbHBoYTIpIC8gYjA7Ci0KLSAgb3V0OgotICAgIEdTVF9JTkZPCi0gICAgICAgICgiZ2FpbiA9ICU1LjFmLCB3aWR0aD0gJTcuMmYsIGZyZXEgPSAlNy4yZiwgYTAgPSAlNy41ZywgYTEgPSAlNy41ZywgYTI9JTcuNWcgYjEgPSAlNy41ZywgYjIgPSAlNy41ZyIsCi0gICAgICAgIGJhbmQtPmdhaW4sIGJhbmQtPndpZHRoLCBiYW5kLT5mcmVxLCBiYW5kLT5hMCwgYmFuZC0+YTEsIGJhbmQtPmEyLAotICAgICAgICBiYW5kLT5iMSwgYmFuZC0+YjIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9sb3dfc2hlbGZfZmlsdGVyIChHc3RJaXJFcXVhbGl6ZXIgKiBlcXUsIEdzdElpckVxdWFsaXplckJhbmQgKiBiYW5kKQotewotICBnaW50IHJhdGUgPSBHU1RfQVVESU9fRklMVEVSX1JBVEUgKGVxdSk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAocmF0ZSk7Ci0KLSAgewotICAgIGdkb3VibGUgZ2Fpbiwgb21lZ2EsIGJ3OwotICAgIGdkb3VibGUgYWxwaGEsIGRlbHRhLCBiMDsKLSAgICBnZG91YmxlIGVncCwgZWdtOwotCi0gICAgZ2FpbiA9IGFyZ190b19zY2FsZSAoYmFuZC0+Z2Fpbik7Ci0gICAgb21lZ2EgPSBjYWxjdWxhdGVfb21lZ2EgKGJhbmQtPmZyZXEsIHJhdGUpOwotICAgIGJ3ID0gY2FsY3VsYXRlX2J3IChiYW5kLCByYXRlKTsKLSAgICBpZiAoYncgPT0gMC4wKQotICAgICAgZ290byBvdXQ7Ci0KLSAgICBlZ20gPSBnYWluIC0gMS4wOwotICAgIGVncCA9IGdhaW4gKyAxLjA7Ci0gICAgYWxwaGEgPSB0YW4gKGJ3IC8gMi4wKTsKLQotICAgIGRlbHRhID0gMi4wICogc3FydCAoZ2FpbikgKiBhbHBoYTsKLSAgICBiMCA9IGVncCArIGVnbSAqIGNvcyAob21lZ2EpICsgZGVsdGE7Ci0KLSAgICBiYW5kLT5hMCA9ICgoZWdwIC0gZWdtICogY29zIChvbWVnYSkgKyBkZWx0YSkgKiBnYWluKSAvIGIwOwotICAgIGJhbmQtPmExID0gKChlZ20gLSBlZ3AgKiBjb3MgKG9tZWdhKSkgKiAyLjAgKiBnYWluKSAvIGIwOwotICAgIGJhbmQtPmEyID0gKChlZ3AgLSBlZ20gKiBjb3MgKG9tZWdhKSAtIGRlbHRhKSAqIGdhaW4pIC8gYjA7Ci0gICAgYmFuZC0+YjEgPSAoKGVnbSArIGVncCAqIGNvcyAob21lZ2EpKSAqIDIuMCkgLyBiMDsKLSAgICBiYW5kLT5iMiA9IC0oKGVncCArIGVnbSAqIGNvcyAob21lZ2EpIC0gZGVsdGEpKSAvIGIwOwotCi0KLSAgb3V0OgotICAgIEdTVF9JTkZPCi0gICAgICAgICgiZ2FpbiA9ICU1LjFmLCB3aWR0aD0gJTcuMmYsIGZyZXEgPSAlNy4yZiwgYTAgPSAlNy41ZywgYTEgPSAlNy41ZywgYTI9JTcuNWcgYjEgPSAlNy41ZywgYjIgPSAlNy41ZyIsCi0gICAgICAgIGJhbmQtPmdhaW4sIGJhbmQtPndpZHRoLCBiYW5kLT5mcmVxLCBiYW5kLT5hMCwgYmFuZC0+YTEsIGJhbmQtPmEyLAotICAgICAgICBiYW5kLT5iMSwgYmFuZC0+YjIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9oaWdoX3NoZWxmX2ZpbHRlciAoR3N0SWlyRXF1YWxpemVyICogZXF1LCBHc3RJaXJFcXVhbGl6ZXJCYW5kICogYmFuZCkKLXsKLSAgZ2ludCByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChlcXUpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHJhdGUpOwotCi0gIHsKLSAgICBnZG91YmxlIGdhaW4sIG9tZWdhLCBidzsKLSAgICBnZG91YmxlIGFscGhhLCBkZWx0YSwgYjA7Ci0gICAgZ2RvdWJsZSBlZ3AsIGVnbTsKLQotICAgIGdhaW4gPSBhcmdfdG9fc2NhbGUgKGJhbmQtPmdhaW4pOwotICAgIG9tZWdhID0gY2FsY3VsYXRlX29tZWdhIChiYW5kLT5mcmVxLCByYXRlKTsKLSAgICBidyA9IGNhbGN1bGF0ZV9idyAoYmFuZCwgcmF0ZSk7Ci0gICAgaWYgKGJ3ID09IDAuMCkKLSAgICAgIGdvdG8gb3V0OwotCi0gICAgZWdtID0gZ2FpbiAtIDEuMDsKLSAgICBlZ3AgPSBnYWluICsgMS4wOwotICAgIGFscGhhID0gdGFuIChidyAvIDIuMCk7Ci0KLSAgICBkZWx0YSA9IDIuMCAqIHNxcnQgKGdhaW4pICogYWxwaGE7Ci0gICAgYjAgPSBlZ3AgLSBlZ20gKiBjb3MgKG9tZWdhKSArIGRlbHRhOwotCi0gICAgYmFuZC0+YTAgPSAoKGVncCArIGVnbSAqIGNvcyAob21lZ2EpICsgZGVsdGEpICogZ2FpbikgLyBiMDsKLSAgICBiYW5kLT5hMSA9ICgoZWdtICsgZWdwICogY29zIChvbWVnYSkpICogLTIuMCAqIGdhaW4pIC8gYjA7Ci0gICAgYmFuZC0+YTIgPSAoKGVncCArIGVnbSAqIGNvcyAob21lZ2EpIC0gZGVsdGEpICogZ2FpbikgLyBiMDsKLSAgICBiYW5kLT5iMSA9ICgoZWdtIC0gZWdwICogY29zIChvbWVnYSkpICogLTIuMCkgLyBiMDsKLSAgICBiYW5kLT5iMiA9IC0oKGVncCAtIGVnbSAqIGNvcyAob21lZ2EpIC0gZGVsdGEpKSAvIGIwOwotCi0KLSAgb3V0OgotICAgIEdTVF9JTkZPCi0gICAgICAgICgiZ2FpbiA9ICU1LjFmLCB3aWR0aD0gJTcuMmYsIGZyZXEgPSAlNy4yZiwgYTAgPSAlNy41ZywgYTEgPSAlNy41ZywgYTI9JTcuNWcgYjEgPSAlNy41ZywgYjIgPSAlNy41ZyIsCi0gICAgICAgIGJhbmQtPmdhaW4sIGJhbmQtPndpZHRoLCBiYW5kLT5mcmVxLCBiYW5kLT5hMCwgYmFuZC0+YTEsIGJhbmQtPmEyLAotICAgICAgICBiYW5kLT5iMSwgYmFuZC0+YjIpOwotICB9Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggYmFuZHNfbG9jayBhbmQgdHJhbnNmb3JtIGxvY2shICovCi1zdGF0aWMgdm9pZAotc2V0X3Bhc3N0aHJvdWdoIChHc3RJaXJFcXVhbGl6ZXIgKiBlcXUpCi17Ci0gIGdpbnQgaTsKLSAgZ2Jvb2xlYW4gcGFzc3Rocm91Z2ggPSBUUlVFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBlcXUtPmZyZXFfYmFuZF9jb3VudDsgaSsrKSB7Ci0gICAgcGFzc3Rocm91Z2ggPSBwYXNzdGhyb3VnaCAmJiAoZXF1LT5iYW5kc1tpXS0+Z2FpbiA9PSAwLjApOwotICB9Ci0KLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNIChlcXUpLCBwYXNzdGhyb3VnaCk7Ci0gIEdTVF9ERUJVRyAoIlBhc3N0aHJvdWdoIG1vZGU6ICVkXG4iLCBwYXNzdGhyb3VnaCk7Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggYmFuZHNfbG9jayBhbmQgdHJhbnNmb3JtIGxvY2shICovCi1zdGF0aWMgdm9pZAotdXBkYXRlX2NvZWZmaWNpZW50cyAoR3N0SWlyRXF1YWxpemVyICogZXF1KQotewotICBnaW50IGksIG4gPSBlcXUtPmZyZXFfYmFuZF9jb3VudDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgaWYgKGVxdS0+YmFuZHNbaV0tPnR5cGUgPT0gQkFORF9UWVBFX1BFQUspCi0gICAgICBzZXR1cF9wZWFrX2ZpbHRlciAoZXF1LCBlcXUtPmJhbmRzW2ldKTsKLSAgICBlbHNlIGlmIChlcXUtPmJhbmRzW2ldLT50eXBlID09IEJBTkRfVFlQRV9MT1dfU0hFTEYpCi0gICAgICBzZXR1cF9sb3dfc2hlbGZfZmlsdGVyIChlcXUsIGVxdS0+YmFuZHNbaV0pOwotICAgIGVsc2UKLSAgICAgIHNldHVwX2hpZ2hfc2hlbGZfZmlsdGVyIChlcXUsIGVxdS0+YmFuZHNbaV0pOwotICB9Ci0KLSAgZXF1LT5uZWVkX25ld19jb2VmZmljaWVudHMgPSBGQUxTRTsKLX0KLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0cmFuc2Zvcm0gbG9jayEgKi8KLXN0YXRpYyB2b2lkCi1hbGxvY19oaXN0b3J5IChHc3RJaXJFcXVhbGl6ZXIgKiBlcXUsIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIC8qIGZyZWUgKyBhbGxvYyA9IG5vIG1lbWNweSAqLwotICBnX2ZyZWUgKGVxdS0+aGlzdG9yeSk7Ci0gIGVxdS0+aGlzdG9yeSA9Ci0gICAgICBnX21hbGxvYzAgKGVxdS0+aGlzdG9yeV9zaXplICogR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKGluZm8pICoKLSAgICAgIGVxdS0+ZnJlcV9iYW5kX2NvdW50KTsKLX0KLQotdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyAoR3N0SWlyRXF1YWxpemVyICogZXF1LCBndWludCBuZXdfY291bnQpCi17Ci0gIGd1aW50IG9sZF9jb3VudCwgaTsKLSAgZ2RvdWJsZSBmcmVxMCwgZnJlcTEsIHN0ZXA7Ci0gIGdjaGFyIG5hbWVbMjBdOwotCi0gIGlmIChlcXUtPmZyZXFfYmFuZF9jb3VudCA9PSBuZXdfY291bnQpCi0gICAgcmV0dXJuOwotCi0gIEJBTkRTX0xPQ0sgKGVxdSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGVxdS0+ZnJlcV9iYW5kX2NvdW50ID09IG5ld19jb3VudCkpIHsKLSAgICBCQU5EU19VTkxPQ0sgKGVxdSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgb2xkX2NvdW50ID0gZXF1LT5mcmVxX2JhbmRfY291bnQ7Ci0gIGVxdS0+ZnJlcV9iYW5kX2NvdW50ID0gbmV3X2NvdW50OwotICBHU1RfREVCVUcgKCJiYW5kcyAldSAtPiAldSIsIG9sZF9jb3VudCwgbmV3X2NvdW50KTsKLQotICBpZiAob2xkX2NvdW50IDwgbmV3X2NvdW50KSB7Ci0gICAgLyogYWRkIG5ldyBiYW5kcyAqLwotICAgIGVxdS0+YmFuZHMgPSBnX3JlYWxsb2MgKGVxdS0+YmFuZHMsIHNpemVvZiAoR3N0T2JqZWN0ICopICogbmV3X2NvdW50KTsKLSAgICBmb3IgKGkgPSBvbGRfY291bnQ7IGkgPCBuZXdfY291bnQ7IGkrKykgewotICAgICAgLyogb3RoZXJ3aXNlIHRoZXkgZ2V0IG5hbWVzIGxpa2UgJ2lpcmVxdWFsaXplcmJhbmQ1JyAqLwotICAgICAgc3ByaW50ZiAobmFtZSwgImJhbmQldSIsIGkpOwotICAgICAgZXF1LT5iYW5kc1tpXSA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl9CQU5ELAotICAgICAgICAgICJuYW1lIiwgbmFtZSwgTlVMTCk7Ci0gICAgICBHU1RfREVCVUcgKCJhZGRpbmcgYmFuZFslZF09JXAiLCBpLCBlcXUtPmJhbmRzW2ldKTsKLQotICAgICAgZ3N0X29iamVjdF9zZXRfcGFyZW50IChHU1RfT0JKRUNUIChlcXUtPmJhbmRzW2ldKSwgR1NUX09CSkVDVCAoZXF1KSk7Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfYWRkZWQgKEdTVF9DSElMRF9QUk9YWSAoZXF1KSwKLSAgICAgICAgICBHX09CSkVDVCAoZXF1LT5iYW5kc1tpXSksIG5hbWUpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBmcmVlIHVudXNlZCBiYW5kcyAqLwotICAgIGZvciAoaSA9IG5ld19jb3VudDsgaSA8IG9sZF9jb3VudDsgaSsrKSB7Ci0gICAgICBHU1RfREVCVUcgKCJyZW1vdmluZyBiYW5kWyVkXT0lcCIsIGksIGVxdS0+YmFuZHNbaV0pOwotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX3JlbW92ZWQgKEdTVF9DSElMRF9QUk9YWSAoZXF1KSwKLSAgICAgICAgICBHX09CSkVDVCAoZXF1LT5iYW5kc1tpXSksIEdTVF9PQkpFQ1RfTkFNRSAoZXF1LT5iYW5kc1tpXSkpOwotICAgICAgZ3N0X29iamVjdF91bnBhcmVudCAoR1NUX09CSkVDVCAoZXF1LT5iYW5kc1tpXSkpOwotICAgICAgZXF1LT5iYW5kc1tpXSA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgYWxsb2NfaGlzdG9yeSAoZXF1LCBHU1RfQVVESU9fRklMVEVSX0lORk8gKGVxdSkpOwotCi0gIC8qIHNldCBjZW50ZXIgZnJlcXVlbmNpZXMgYW5kIG5hbWUgYmFuZCBvYmplY3RzCi0gICAqIEZJWE1FOiBhcmchIHdlIGNhbid0IGNoYW5nZSB0aGUgbmFtZSBvZiBwYXJlbnRlZCBvYmplY3RzIDooCi0gICAqICAgYXBwbGljYXRpb24gc2hvdWxkIHJlYWQgYmFuZC0+ZnJlcSB0byBnZXQgdGhlIG5hbWUKLSAgICovCi0KLSAgc3RlcCA9IHBvdyAoSElHSEVTVF9GUkVRIC8gTE9XRVNUX0ZSRVEsIDEuMCAvIG5ld19jb3VudCk7Ci0gIGZyZXEwID0gTE9XRVNUX0ZSRVE7Ci0gIGZvciAoaSA9IDA7IGkgPCBuZXdfY291bnQ7IGkrKykgewotICAgIGZyZXExID0gZnJlcTAgKiBzdGVwOwotCi0gICAgaWYgKGkgPT0gMCkKLSAgICAgIGVxdS0+YmFuZHNbaV0tPnR5cGUgPSBCQU5EX1RZUEVfTE9XX1NIRUxGOwotICAgIGVsc2UgaWYgKGkgPT0gbmV3X2NvdW50IC0gMSkKLSAgICAgIGVxdS0+YmFuZHNbaV0tPnR5cGUgPSBCQU5EX1RZUEVfSElHSF9TSEVMRjsKLSAgICBlbHNlCi0gICAgICBlcXUtPmJhbmRzW2ldLT50eXBlID0gQkFORF9UWVBFX1BFQUs7Ci0KLSAgICBlcXUtPmJhbmRzW2ldLT5mcmVxID0gZnJlcTAgKyAoKGZyZXExIC0gZnJlcTApIC8gMi4wKTsKLSAgICBlcXUtPmJhbmRzW2ldLT53aWR0aCA9IGZyZXExIC0gZnJlcTA7Ci0gICAgR1NUX0RFQlVHICgiYmFuZFslMmRdID0gJyVsZiciLCBpLCBlcXUtPmJhbmRzW2ldLT5mcmVxKTsKLQotICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKGVxdS0+YmFuZHNbaV0pLCAiYmFuZHdpZHRoIik7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoZXF1LT5iYW5kc1tpXSksICJmcmVxIik7Ci0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoZXF1LT5iYW5kc1tpXSksICJ0eXBlIik7Ci0KLSAgICAvKgotICAgICAgIGlmKGVxdS0+YmFuZHNbaV0tPmZyZXE8MTAwMDAuMCkKLSAgICAgICBzcHJpbnRmIChuYW1lLCIlZEh6IiwoZ2ludCllcXUtPmJhbmRzW2ldLT5mcmVxKTsKLSAgICAgICBlbHNlCi0gICAgICAgc3ByaW50ZiAobmFtZSwiJWRrSHoiLChnaW50KShlcXUtPmJhbmRzW2ldLT5mcmVxLzEwMDAuMCkpOwotICAgICAgIGdzdF9vYmplY3Rfc2V0X25hbWUoIEdTVF9PQkpFQ1QgKGVxdS0+YmFuZHNbaV0pLCBuYW1lKTsKLSAgICAgICBHU1RfREVCVUcgKCJiYW5kWyUyZF0gPSAnJXMnIixpLG5hbWUpOwotICAgICAqLwotICAgIGZyZXEwID0gZnJlcTE7Ci0gIH0KLQotICBlcXUtPm5lZWRfbmV3X2NvZWZmaWNpZW50cyA9IFRSVUU7Ci0gIEJBTkRTX1VOTE9DSyAoZXF1KTsKLX0KLQotLyogc3RhcnQgb2YgY29kZSB0aGF0IGlzIHR5cGUgc3BlY2lmaWMgKi8KLQotI2RlZmluZSBDUkVBVEVfT1BUSU1JWkVEX0ZVTkNUSU9OU19JTlQoVFlQRSxCSUdfVFlQRSxNSU5fVkFMLE1BWF9WQUwpICAgXAotdHlwZWRlZiBzdHJ1Y3QgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBCSUdfVFlQRSB4MSwgeDI7ICAgICAgICAgIC8qIGhpc3Rvcnkgb2YgaW5wdXQgdmFsdWVzIGZvciBhIGZpbHRlciAqLyAgXAotICBCSUdfVFlQRSB5MSwgeTI7ICAgICAgICAgIC8qIGhpc3Rvcnkgb2Ygb3V0cHV0IHZhbHVlcyBmb3IgYSBmaWx0ZXIgKi8gXAotfSBTZWNvbmRPcmRlckhpc3RvcnkgIyMgVFlQRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGlubGluZSBCSUdfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotb25lX3N0ZXBfICMjIFRZUEUgKEdzdElpckVxdWFsaXplckJhbmQgKmZpbHRlciwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNlY29uZE9yZGVySGlzdG9yeSAjIyBUWVBFICpoaXN0b3J5LCBCSUdfVFlQRSBpbnB1dCkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBjYWxjdWxhdGUgb3V0cHV0ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBCSUdfVFlQRSBvdXRwdXQgPSBmaWx0ZXItPmEwICogaW5wdXQgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZmlsdGVyLT5hMSAqIGhpc3RvcnktPngxICsgZmlsdGVyLT5hMiAqIGhpc3RvcnktPngyICsgICAgICAgICAgICAgXAotICAgICAgZmlsdGVyLT5iMSAqIGhpc3RvcnktPnkxICsgZmlsdGVyLT5iMiAqIGhpc3RvcnktPnkyOyAgICAgICAgICAgICAgXAotICAvKiB1cGRhdGUgaGlzdG9yeSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT55MiA9IGhpc3RvcnktPnkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT55MSA9IG91dHB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT54MiA9IGhpc3RvcnktPngxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT54MSA9IGlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gb3V0cHV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGNvbnN0IGd1aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaGlzdG9yeV9zaXplXyAjIyBUWVBFID0gc2l6ZW9mIChTZWNvbmRPcmRlckhpc3RvcnkgIyMgVFlQRSk7ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2lpcl9lcXVfcHJvY2Vzc18gIyMgVFlQRSAoR3N0SWlyRXF1YWxpemVyICplcXUsIGd1aW50OCAqZGF0YSwgICAgICAgXAotZ3VpbnQgc2l6ZSwgZ3VpbnQgY2hhbm5lbHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludCBmcmFtZXMgPSBzaXplIC8gY2hhbm5lbHMgLyBzaXplb2YgKFRZUEUpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludCBpLCBjLCBmLCBuZiA9IGVxdS0+ZnJlcV9iYW5kX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBCSUdfVFlQRSBjdXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHc3RJaXJFcXVhbGl6ZXJCYW5kICoqZmlsdGVycyA9IGVxdS0+YmFuZHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNlY29uZE9yZGVySGlzdG9yeSAjIyBUWVBFICpoaXN0b3J5ID0gZXF1LT5oaXN0b3J5OyAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY3VyID0gKigoVFlQRSAqKSBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZm9yIChmID0gMDsgZiA8IG5mOyBmKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjdXIgPSBvbmVfc3RlcF8gIyMgVFlQRSAoZmlsdGVyc1tmXSwgaGlzdG9yeSwgY3VyKTsgICAgICAgICAgICAgXAotICAgICAgICBoaXN0b3J5Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY3VyID0gQ0xBTVAgKGN1ciwgTUlOX1ZBTCwgTUFYX1ZBTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKigoVFlQRSAqKSBkYXRhKSA9IChUWVBFKSBmbG9vciAoY3VyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZGF0YSArPSBzaXplb2YgKFRZUEUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIENSRUFURV9PUFRJTUlaRURfRlVOQ1RJT05TKFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi10eXBlZGVmIHN0cnVjdCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFRZUEUgeDEsIHgyOyAgICAgICAgICAvKiBoaXN0b3J5IG9mIGlucHV0IHZhbHVlcyBmb3IgYSBmaWx0ZXIgKi8gIFwKLSAgVFlQRSB5MSwgeTI7ICAgICAgICAgIC8qIGhpc3Rvcnkgb2Ygb3V0cHV0IHZhbHVlcyBmb3IgYSBmaWx0ZXIgKi8gXAotfSBTZWNvbmRPcmRlckhpc3RvcnkgIyMgVFlQRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGlubGluZSBUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotb25lX3N0ZXBfICMjIFRZUEUgKEdzdElpckVxdWFsaXplckJhbmQgKmZpbHRlciwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNlY29uZE9yZGVySGlzdG9yeSAjIyBUWVBFICpoaXN0b3J5LCBUWVBFIGlucHV0KSAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBjYWxjdWxhdGUgb3V0cHV0ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUWVBFIG91dHB1dCA9IGZpbHRlci0+YTAgKiBpbnB1dCArIGZpbHRlci0+YTEgKiBoaXN0b3J5LT54MSArICAgICAgICAgXAotICAgICAgZmlsdGVyLT5hMiAqIGhpc3RvcnktPngyICsgZmlsdGVyLT5iMSAqIGhpc3RvcnktPnkxICsgICAgICAgICAgICAgXAotICAgICAgZmlsdGVyLT5iMiAqIGhpc3RvcnktPnkyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiB1cGRhdGUgaGlzdG9yeSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT55MiA9IGhpc3RvcnktPnkxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT55MSA9IG91dHB1dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT54MiA9IGhpc3RvcnktPngxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBoaXN0b3J5LT54MSA9IGlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gb3V0cHV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGNvbnN0IGd1aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaGlzdG9yeV9zaXplXyAjIyBUWVBFID0gc2l6ZW9mIChTZWNvbmRPcmRlckhpc3RvcnkgIyMgVFlQRSk7ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2lpcl9lcXVfcHJvY2Vzc18gIyMgVFlQRSAoR3N0SWlyRXF1YWxpemVyICplcXUsIGd1aW50OCAqZGF0YSwgICAgICAgXAotZ3VpbnQgc2l6ZSwgZ3VpbnQgY2hhbm5lbHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludCBmcmFtZXMgPSBzaXplIC8gY2hhbm5lbHMgLyBzaXplb2YgKFRZUEUpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBndWludCBpLCBjLCBmLCBuZiA9IGVxdS0+ZnJlcV9iYW5kX2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUWVBFIGN1cjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHc3RJaXJFcXVhbGl6ZXJCYW5kICoqZmlsdGVycyA9IGVxdS0+YmFuZHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNlY29uZE9yZGVySGlzdG9yeSAjIyBUWVBFICpoaXN0b3J5ID0gZXF1LT5oaXN0b3J5OyAgICAgICAgICAgICAgICAgXAotICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY3VyID0gKigoVFlQRSAqKSBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZm9yIChmID0gMDsgZiA8IG5mOyBmKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjdXIgPSBvbmVfc3RlcF8gIyMgVFlQRSAoZmlsdGVyc1tmXSwgaGlzdG9yeSwgY3VyKTsgICAgICAgICAgICAgXAotICAgICAgICBoaXN0b3J5Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgKigoVFlQRSAqKSBkYXRhKSA9IChUWVBFKSBjdXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZGF0YSArPSBzaXplb2YgKFRZUEUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi1DUkVBVEVfT1BUSU1JWkVEX0ZVTkNUSU9OU19JTlQgKGdpbnQxNiwgZ2Zsb2F0LCAtMzI3NjguMCwgMzI3NjcuMCk7Ci1DUkVBVEVfT1BUSU1JWkVEX0ZVTkNUSU9OUyAoZ2Zsb2F0KTsKLUNSRUFURV9PUFRJTUlaRURfRlVOQ1RJT05TIChnZG91YmxlKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9paXJfZXF1YWxpemVyX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJ0cmFucywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RBdWRpb0ZpbHRlciAqZmlsdGVyID0gR1NUX0FVRElPX0ZJTFRFUiAoYnRyYW5zKTsKLSAgR3N0SWlyRXF1YWxpemVyICplcXUgPSBHU1RfSUlSX0VRVUFMSVpFUiAoYnRyYW5zKTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdpbnQgY2hhbm5lbHMgPSBHU1RfQVVESU9fRklMVEVSX0NIQU5ORUxTIChmaWx0ZXIpOwotICBnYm9vbGVhbiBuZWVkX25ld19jb2VmZmljaWVudHM7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGNoYW5uZWxzIDwgMSB8fCBlcXUtPnByb2Nlc3MgPT0gTlVMTCkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotCi0gIEJBTkRTX0xPQ0sgKGVxdSk7Ci0gIG5lZWRfbmV3X2NvZWZmaWNpZW50cyA9IGVxdS0+bmVlZF9uZXdfY29lZmZpY2llbnRzOwotICBCQU5EU19VTkxPQ0sgKGVxdSk7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIHRpbWVzdGFtcCA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgewotICAgIEdzdElpckVxdWFsaXplckJhbmQgKipmaWx0ZXJzID0gZXF1LT5iYW5kczsKLSAgICBndWludCBmLCBuZiA9IGVxdS0+ZnJlcV9iYW5kX2NvdW50OwotCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZXF1KSwgdGltZXN0YW1wKTsKLQotICAgIC8qIHN5bmMgdmFsdWVzIGZvciBiYW5kcyB0b28gKi8KLSAgICAvKiBGSVhNRTogaXRlcmF0aW5nIGVxdS0+YmFuZHMgaXMgbm90IHRocmVhZC1zYWZlIGhlcmUgKi8KLSAgICBmb3IgKGYgPSAwOyBmIDwgbmY7IGYrKykgewotICAgICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZmlsdGVyc1tmXSksIHRpbWVzdGFtcCk7Ci0gICAgfQotICB9Ci0KLSAgQkFORFNfTE9DSyAoZXF1KTsKLSAgaWYgKG5lZWRfbmV3X2NvZWZmaWNpZW50cykgewotICAgIHVwZGF0ZV9jb2VmZmljaWVudHMgKGVxdSk7Ci0gIH0KLSAgQkFORFNfVU5MT0NLIChlcXUpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgZXF1LT5wcm9jZXNzIChlcXUsIG1hcC5kYXRhLCBtYXAuc2l6ZSwgY2hhbm5lbHMpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaWlyX2VxdWFsaXplcl9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBhdWRpbywgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0SWlyRXF1YWxpemVyICplcXUgPSBHU1RfSUlSX0VRVUFMSVpFUiAoYXVkaW8pOwotCi0gIHN3aXRjaCAoR1NUX0FVRElPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTY6Ci0gICAgICBlcXUtPmhpc3Rvcnlfc2l6ZSA9IGhpc3Rvcnlfc2l6ZV9naW50MTY7Ci0gICAgICBlcXUtPnByb2Nlc3MgPSBnc3RfaWlyX2VxdV9wcm9jZXNzX2dpbnQxNjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzI6Ci0gICAgICBlcXUtPmhpc3Rvcnlfc2l6ZSA9IGhpc3Rvcnlfc2l6ZV9nZmxvYXQ7Ci0gICAgICBlcXUtPnByb2Nlc3MgPSBnc3RfaWlyX2VxdV9wcm9jZXNzX2dmbG9hdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GNjQ6Ci0gICAgICBlcXUtPmhpc3Rvcnlfc2l6ZSA9IGhpc3Rvcnlfc2l6ZV9nZG91YmxlOwotICAgICAgZXF1LT5wcm9jZXNzID0gZ3N0X2lpcl9lcXVfcHJvY2Vzc19nZG91YmxlOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGFsbG9jX2hpc3RvcnkgKGVxdSwgaW5mbyk7Ci0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGVxdWFsaXplcl9kZWJ1ZywgImVxdWFsaXplciIsIDAsICJlcXVhbGl6ZXIiKTsKLQotICBpZiAoIShnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZXF1YWxpemVyLW5iYW5kcyIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgICAgIEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfTkJBTkRTKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghKGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJlcXVhbGl6ZXItM2JhbmRzIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICAgICAgR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl8zQkFORFMpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCEoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImVxdWFsaXplci0xMGJhbmRzIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICAgICAgR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl8xMEJBTkRTKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgZXF1YWxpemVyLAotICAgICJHU3RyZWFtZXIgYXVkaW8gZXF1YWxpemVycyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oIGIvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JhNzBlZS4uMDAwMDAwMAotLS0gYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyogR1N0cmVhbWVyIElJUiBlcXVhbGl6ZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDQ+IEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotICogICAgICAgICAgICAgICA8MjAwNz4gU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfSUlSX0VRVUFMSVpFUl9fCi0jZGVmaW5lIF9fR1NUX0lJUl9FUVVBTElaRVJfXwotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJaXJFcXVhbGl6ZXIgR3N0SWlyRXF1YWxpemVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElpckVxdWFsaXplckNsYXNzIEdzdElpckVxdWFsaXplckNsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElpckVxdWFsaXplckJhbmQgR3N0SWlyRXF1YWxpemVyQmFuZDsKLQotI2RlZmluZSBHU1RfVFlQRV9JSVJfRVFVQUxJWkVSIFwKLSAgKGdzdF9paXJfZXF1YWxpemVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JSVJfRVFVQUxJWkVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUixHc3RJaXJFcXVhbGl6ZXIpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSLEdzdElpckVxdWFsaXplckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lJUl9FUVVBTElaRVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSKSkKLSNkZWZpbmUgR1NUX0lTX0lJUl9FUVVBTElaRVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUikpCi0KLSNkZWZpbmUgTE9XRVNUX0ZSRVEgKDIwLjApCi0jZGVmaW5lIEhJR0hFU1RfRlJFUSAoMjAwMDAuMCkKLQotdHlwZWRlZiB2b2lkICgqUHJvY2Vzc0Z1bmMpIChHc3RJaXJFcXVhbGl6ZXIgKiBlcSwgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwKLSAgICBndWludCBjaGFubmVscyk7Ci0KLXN0cnVjdCBfR3N0SWlyRXF1YWxpemVyCi17Ci0gIEdzdEF1ZGlvRmlsdGVyIGF1ZGlvZmlsdGVyOwotCi0gIC8qPCBwcml2YXRlID4qLwotCi0gIEdNdXRleCBiYW5kc19sb2NrOwotICBHc3RJaXJFcXVhbGl6ZXJCYW5kICoqYmFuZHM7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBndWludCBmcmVxX2JhbmRfY291bnQ7Ci0gIC8qIGZvciBlYWNoIGJhbmQgYW5kIGNoYW5uZWwgKi8KLSAgZ3BvaW50ZXIgaGlzdG9yeTsKLSAgZ3VpbnQgaGlzdG9yeV9zaXplOwotCi0gIGdib29sZWFuIG5lZWRfbmV3X2NvZWZmaWNpZW50czsKLQotICBQcm9jZXNzRnVuYyBwcm9jZXNzOwotfTsKLQotc3RydWN0IF9Hc3RJaXJFcXVhbGl6ZXJDbGFzcwotewotICBHc3RBdWRpb0ZpbHRlckNsYXNzIGF1ZGlvZmlsdGVyX2NsYXNzOwotfTsKLQotZXh0ZXJuIHZvaWQgZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyAoR3N0SWlyRXF1YWxpemVyICogZXF1LCBndWludCBuZXdfY291bnQpOwotCi1leHRlcm4gR1R5cGUgZ3N0X2lpcl9lcXVhbGl6ZXJfZ2V0X3R5cGUodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9JSVJfRVFVQUxJWkVSX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5jIGIvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYmJmNTMuLjAwMDAwMDAKLS0tIGEvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXIxMGJhbmRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZXF1YWxpemVyLTEwYmFuZHMKLSAqCi0gKiBUaGUgMTAgYmFuZCBlcXVhbGl6ZXIgZWxlbWVudCBhbGxvd3MgdG8gY2hhbmdlIHRoZSBnYWluIG9mIDEwIGVxdWFsbHkgZGlzdHJpYnV0ZWQKLSAqIGZyZXF1ZW5jeSBiYW5kcyBiZXR3ZWVuIDMwIEh6IGFuZCAxNSBrSHouCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249c29uZy5vZ2cgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGVxdWFsaXplci0xMGJhbmRzIGJhbmQyPTMuMCAhIGFsc2FzaW5rCi0gKiBdfCBUaGlzIHJhaXNlcyB0aGUgdm9sdW1lIG9mIHRoZSAzcmQgYmFuZCB3aGljaCBpcyBhdCAxMTkgSHogYnkgMyBkYi4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0aWlyZXF1YWxpemVyLmgiCi0jaW5jbHVkZSAiZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5oIgotCi0KLWVudW0KLXsKLSAgUFJPUF9CQU5EMCA9IDEsCi0gIFBST1BfQkFORDEsCi0gIFBST1BfQkFORDIsCi0gIFBST1BfQkFORDMsCi0gIFBST1BfQkFORDQsCi0gIFBST1BfQkFORDUsCi0gIFBST1BfQkFORDYsCi0gIFBST1BfQkFORDcsCi0gIFBST1BfQkFORDgsCi0gIFBST1BfQkFORDksCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChlcXVhbGl6ZXJfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZXF1YWxpemVyX2RlYnVnCi0KLQotI2RlZmluZSBnc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdElpckVxdWFsaXplcjEwQmFuZHMsIGdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHMsCi0gICAgR1NUX1RZUEVfSUlSX0VRVUFMSVpFUik7Ci0KLS8qIGVxdWFsaXplciBpbXBsZW1lbnRhdGlvbiAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfMTBiYW5kc19jbGFzc19pbml0IChHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2lpcl9lcXVhbGl6ZXJfMTBiYW5kc19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CQU5EMCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJiYW5kMCIsICIyOSBIeiIsCi0gICAgICAgICAgImdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAyOSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIiLAotICAgICAgICAgIC0yNC4wLCAxMi4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkQxLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmQxIiwgIjU5IEh6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDU5IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQiIsCi0gICAgICAgICAgLTI0LjAsIDEyLjAsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkFORDIsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYmFuZDIiLCAiMTE5IEh6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDExOSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIiLAotICAgICAgICAgIC0yNC4wLCAxMi4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkQzLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmQzIiwgIjIzNyBIeiIsCi0gICAgICAgICAgImdhaW4gZm9yIHRoZSBmcmVxdWVuY3kgYmFuZCAyMzcgSHosIHJhbmdpbmcgZnJvbSAtMjQgZEIgdG8gKzEyIGRCIiwKLSAgICAgICAgICAtMjQuMCwgMTIuMCwgMC4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CQU5ENCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJiYW5kNCIsICI0NzQgSHoiLAotICAgICAgICAgICJnYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgNDc0IEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQiIsCi0gICAgICAgICAgLTI0LjAsIDEyLjAsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkFORDUsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYmFuZDUiLCAiOTQ3IEh6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDk0NyBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIiLAotICAgICAgICAgIC0yNC4wLCAxMi4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkQ2LAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmQ2IiwgIjE4ODkgSHoiLAotICAgICAgICAgICJnYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgMTg4OSBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIiLAotICAgICAgICAgIC0yNC4wLCAxMi4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkQ3LAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmQ3IiwgIjM3NzAgSHoiLAotICAgICAgICAgICJnYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgMzc3MCBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIiLAotICAgICAgICAgIC0yNC4wLCAxMi4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkQ4LAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmQ4IiwgIjc1MjMgSHoiLAotICAgICAgICAgICJnYWluIGZvciB0aGUgZnJlcXVlbmN5IGJhbmQgNzUyMyBIeiwgcmFuZ2luZyBmcm9tIC0yNCBkQiB0byArMTIgZEIiLAotICAgICAgICAgIC0yNC4wLCAxMi4wLCAwLjAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkQ5LAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmQ5IiwgIjE1MDExIEh6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDE1MDExIEh6LCByYW5naW5nIGZyb20gLTI0IGRCIHRvICsxMiBkQiIsCi0gICAgICAgICAgLTI0LjAsIDEyLjAsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIjEwIEJhbmQgRXF1YWxpemVyIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L0F1ZGlvIiwKLSAgICAgICJEaXJlY3QgRm9ybSAxMCBiYW5kIElJUiBlcXVhbGl6ZXIiLAotICAgICAgIlN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyXzEwYmFuZHNfaW5pdCAoR3N0SWlyRXF1YWxpemVyMTBCYW5kcyAqIGVxdV9uKQotewotICBHc3RJaXJFcXVhbGl6ZXIgKmVxdSA9IEdTVF9JSVJfRVFVQUxJWkVSIChlcXVfbik7Ci0KLSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyAoZXF1LCAxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDaGlsZFByb3h5ICplcXUgPSBHU1RfQ0hJTERfUFJPWFkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0JBTkQwOgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDA6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDE6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5IChlcXUsICJiYW5kMTo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5EMjoKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKGVxdSwgImJhbmQyOjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQzOgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDM6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDQ6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5IChlcXUsICJiYW5kNDo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5ENToKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKGVxdSwgImJhbmQ1OjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQ2OgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDY6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDc6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5IChlcXUsICJiYW5kNzo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5EODoKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKGVxdSwgImJhbmQ4OjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQ5OgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDk6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RDaGlsZFByb3h5ICplcXUgPSBHU1RfQ0hJTERfUFJPWFkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0JBTkQwOgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDA6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDE6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5IChlcXUsICJiYW5kMTo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5EMjoKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKGVxdSwgImJhbmQyOjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQzOgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDM6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDQ6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5IChlcXUsICJiYW5kNDo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5ENToKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKGVxdSwgImJhbmQ1OjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQ2OgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDY6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDc6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5IChlcXUsICJiYW5kNzo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5EODoKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKGVxdSwgImJhbmQ4OjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQ5OgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDk6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjEwYmFuZHMuaCBiL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDY2NzIxLi4wMDAwMDAwCi0tLSBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyMTBiYW5kcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9JSVJfRVFVQUxJWkVSXzEwQkFORFNfXwotI2RlZmluZSBfX0dTVF9JSVJfRVFVQUxJWkVSXzEwQkFORFNfXwotCi0jaW5jbHVkZSAiZ3N0aWlyZXF1YWxpemVyLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJaXJFcXVhbGl6ZXIxMEJhbmRzIEdzdElpckVxdWFsaXplcjEwQmFuZHM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SWlyRXF1YWxpemVyMTBCYW5kc0NsYXNzIEdzdElpckVxdWFsaXplcjEwQmFuZHNDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9JSVJfRVFVQUxJWkVSXzEwQkFORFMgXAotICAoZ3N0X2lpcl9lcXVhbGl6ZXJfMTBiYW5kc19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl8xMEJBTkRTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl8xMEJBTkRTLEdzdElpckVxdWFsaXplcjEwQmFuZHMpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl8xMEJBTkRTX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfMTBCQU5EUyxHc3RJaXJFcXVhbGl6ZXIxMEJhbmRzQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSUlSX0VRVUFMSVpFUl8xMEJBTkRTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl8xMEJBTkRTKSkKLSNkZWZpbmUgR1NUX0lTX0lJUl9FUVVBTElaRVJfMTBCQU5EU19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSXzEwQkFORFMpKQotCi1zdHJ1Y3QgX0dzdElpckVxdWFsaXplcjEwQmFuZHMKLXsKLSAgR3N0SWlyRXF1YWxpemVyIGVxdWFsaXplcjsKLX07Ci0KLXN0cnVjdCBfR3N0SWlyRXF1YWxpemVyMTBCYW5kc0NsYXNzCi17Ci0gIEdzdElpckVxdWFsaXplckNsYXNzIGVxdWFsaXplcl9jbGFzczsKLX07Ci0KLWV4dGVybiBHVHlwZSBnc3RfaWlyX2VxdWFsaXplcl8xMGJhbmRzX2dldF90eXBlKHZvaWQpOwotCi0jZW5kaWYgLyogX19HU1RfSUlSX0VRVUFMSVpFUl8xMEJBTkRTX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmMgYi9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmYxNGVkLi4wMDAwMDAwCi0tLSBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZXF1YWxpemVyLTNiYW5kcwotICoKLSAqIFRoZSAzLWJhbmQgZXF1YWxpemVyIGVsZW1lbnQgYWxsb3dzIHRvIGNoYW5nZSB0aGUgZ2FpbiBvZiBhIGxvdyBmcmVxdWVuY3ksCi0gKiBtZWRpdW0gZnJlcXVlbmN5IGFuZCBoaWdoIGZyZXF1ZW5jeSBiYW5kLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXNvbmcub2dnICEgb2dnZGVtdXggISB2b3JiaXNkZWMgISBhdWRpb2NvbnZlcnQgISBlcXVhbGl6ZXItM2JhbmRzIGJhbmQxPTYuMCAhIGFsc2FzaW5rCi0gKiBdfCBUaGlzIHJhaXNlcyB0aGUgdm9sdW1lIG9mIHRoZSAybmQgYmFuZCwgd2hpY2ggaXMgYXQgMTExMCBIeiwgYnkgNiBkYi4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0aWlyZXF1YWxpemVyLmgiCi0jaW5jbHVkZSAiZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmgiCi0KLWVudW0KLXsKLSAgUFJPUF9CQU5EMCA9IDEsCi0gIFBST1BfQkFORDEsCi0gIFBST1BfQkFORDIsCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2lpcl9lcXVhbGl6ZXJfM2JhbmRzX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoZXF1YWxpemVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGVxdWFsaXplcl9kZWJ1ZwotCi0jZGVmaW5lIGdzdF9paXJfZXF1YWxpemVyXzNiYW5kc19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RJaXJFcXVhbGl6ZXIzQmFuZHMsIGdzdF9paXJfZXF1YWxpemVyXzNiYW5kcywKLSAgICBHU1RfVFlQRV9JSVJfRVFVQUxJWkVSKTsKLQotLyogZXF1YWxpemVyIGltcGxlbWVudGF0aW9uICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfY2xhc3NfaW5pdCAoR3N0SWlyRXF1YWxpemVyM0JhbmRzQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkFORDAsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYmFuZDAiLCAiMTEwIEh6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDEwMCBIeiwgcmFuZ2luZyBmcm9tIC0yNC4wIHRvICsxMi4wIiwKLSAgICAgICAgICAtMjQuMCwgMTIuMCwgMC4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CQU5EMSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJiYW5kMSIsICIxMTAwIEh6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDExMDAgSHosIHJhbmdpbmcgZnJvbSAtMjQuMCB0byArMTIuMCIsCi0gICAgICAgICAgLTI0LjAsIDEyLjAsIDAuMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkFORDIsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYmFuZDIiLCAiMTEga0h6IiwKLSAgICAgICAgICAiZ2FpbiBmb3IgdGhlIGZyZXF1ZW5jeSBiYW5kIDExIGtIeiwgcmFuZ2luZyBmcm9tIC0yNC4wIHRvICsxMi4wIiwKLSAgICAgICAgICAtMjQuMCwgMTIuMCwgMC4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiMyBCYW5kIEVxdWFsaXplciIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiRGlyZWN0IEZvcm0gMyBiYW5kIElJUiBlcXVhbGl6ZXIiLCAiU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfM2JhbmRzX2luaXQgKEdzdElpckVxdWFsaXplcjNCYW5kcyAqIGVxdV9uKQotewotICBHc3RJaXJFcXVhbGl6ZXIgKmVxdSA9IEdTVF9JSVJfRVFVQUxJWkVSIChlcXVfbik7Ci0KLSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyAoZXF1LCAzKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyXzNiYW5kc19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q2hpbGRQcm94eSAqZXF1ID0gR1NUX0NISUxEX1BST1hZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9CQU5EMDoKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9zZXRfcHJvcGVydHkgKGVxdSwgImJhbmQwOjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQxOgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X3NldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDE6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDI6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfc2V0X3Byb3BlcnR5IChlcXUsICJiYW5kMjo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyXzNiYW5kc19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0Q2hpbGRQcm94eSAqZXF1ID0gR1NUX0NISUxEX1BST1hZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9CQU5EMDoKLSAgICAgIGdzdF9jaGlsZF9wcm94eV9nZXRfcHJvcGVydHkgKGVxdSwgImJhbmQwOjpnYWluIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkQxOgotICAgICAgZ3N0X2NoaWxkX3Byb3h5X2dldF9wcm9wZXJ0eSAoZXF1LCAiYmFuZDE6OmdhaW4iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQkFORDI6Ci0gICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X3Byb3BlcnR5IChlcXUsICJiYW5kMjo6Z2FpbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmggYi9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcjNiYW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzkwZmNhLi4wMDAwMDAwCi0tLSBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVyM2JhbmRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0lJUl9FUVVBTElaRVJfM0JBTkRTX18KLSNkZWZpbmUgX19HU1RfSUlSX0VRVUFMSVpFUl8zQkFORFNfXwotCi0jaW5jbHVkZSAiZ3N0aWlyZXF1YWxpemVyLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJaXJFcXVhbGl6ZXIzQmFuZHMgR3N0SWlyRXF1YWxpemVyM0JhbmRzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElpckVxdWFsaXplcjNCYW5kc0NsYXNzIEdzdElpckVxdWFsaXplcjNCYW5kc0NsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfM0JBTkRTIFwKLSAgKGdzdF9paXJfZXF1YWxpemVyXzNiYW5kc19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl8zQkFORFMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSXzNCQU5EUyxHc3RJaXJFcXVhbGl6ZXIzQmFuZHMpKQotI2RlZmluZSBHU1RfSUlSX0VRVUFMSVpFUl8zQkFORFNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl8zQkFORFMsR3N0SWlyRXF1YWxpemVyM0JhbmRzQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSUlSX0VRVUFMSVpFUl8zQkFORFMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSXzNCQU5EUykpCi0jZGVmaW5lIEdTVF9JU19JSVJfRVFVQUxJWkVSXzNCQU5EU19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSXzNCQU5EUykpCi0KLXN0cnVjdCBfR3N0SWlyRXF1YWxpemVyM0JhbmRzCi17Ci0gIEdzdElpckVxdWFsaXplciBlcXVhbGl6ZXI7Ci19OwotCi1zdHJ1Y3QgX0dzdElpckVxdWFsaXplcjNCYW5kc0NsYXNzCi17Ci0gIEdzdElpckVxdWFsaXplckNsYXNzIGVxdWFsaXplcl9jbGFzczsKLX07Ci0KLWV4dGVybiBHVHlwZSBnc3RfaWlyX2VxdWFsaXplcl8zYmFuZHNfZ2V0X3R5cGUodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9JSVJfRVFVQUxJWkVSXzNCQU5EU19fICovCmRpZmYgLS1naXQgYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jIGIvZ3N0L2VxdWFsaXplci9nc3RpaXJlcXVhbGl6ZXJuYmFuZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgzMjVjNi4uMDAwMDAwMAotLS0gYS9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwND4gQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKiAgICAgICAgICAgICAgIDwyMDA3PiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZXF1YWxpemVyLW5iYW5kcwotICoKLSAqIFRoZSBuLWJhbmQgZXF1YWxpemVyIGVsZW1lbnQgaXMgYSBmdWxseSBwYXJhbWV0cmljIGVxdWFsaXplci4gSXQgYWxsb3dzIHRvCi0gKiBzZWxlY3QgYmV0d2VlbiAxIGFuZCA2NCBiYW5kcyBhbmQgaGFzIHByb3BlcnRpZXMgb24gZWFjaCBiYW5kIHRvIGNoYW5nZQotICogdGhlIGNlbnRlciBmcmVxdWVuY3ksIGJhbmQgd2lkdGggYW5kIGdhaW4uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249c29uZy5vZ2cgISBvZ2dkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGVxdWFsaXplci1uYmFuZHMgbnVtLWJhbmRzPTE1IGJhbmQ1OjpnYWluPTYuMCAhIGFsc2FzaW5rCi0gKiBdfCBUaGlzIG1ha2UgdGhlIGVxdWFsaXplciB1c2UgMTUgYmFuZHMgYW5kIHJhaXNlcyB0aGUgdm9sdW1lIG9mIHRoZSA1dGggYmFuZCBieSA2IGRiLgotICogPC9yZWZzZWN0Mj4KLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGNvZGU8L3RpdGxlPgotICogfFsKLSAqICNpbmNsdWRlICZsdDtnc3QvZ3N0LmgmZ3Q7Ci0gKiAKLSAqIC4uLgotICogdHlwZWRlZiBzdHJ1Y3QgewotICogICBnZmxvYXQgZnJlcTsKLSAqICAgZ2Zsb2F0IHdpZHRoOwotICogICBnZmxvYXQgZ2FpbjsKLSAqIH0gR3N0RXF1YWxpemVyQmFuZFN0YXRlOwotICogCi0gKiAuLi4KLSAqIAotICogICBHc3RFbGVtZW50ICplcXVhbGl6ZXI7Ci0gKiAgIEdPYmplY3QgKmJhbmQ7Ci0gKiAgIGdpbnQgaTsKLSAqICAgR3N0RXF1YWxpemVyQmFuZFN0YXRlIHN0YXRlW10gPSB7Ci0gKiAgICAgeyAxMjAuMCwgICA1MC4wLCAtIDMuMH0sCi0gKiAgICAgeyA1MDAuMCwgICAyMC4wLCAgMTIuMH0sCi0gKiAgICAgezE1MDMuMCwgICAgMi4wLCAtMjAuMH0sCi0gKiAgICAgezYwMDAuMCwgMTAwMC4wLCAgIDYuMH0sCi0gKiAgICAgezMwMDAuMCwgIDEyMC4wLCAgIDIuMH0KLSAqICAgfTsKLSAqIAotICogLi4uCi0gKiAKLSAqICAgZXF1YWxpemVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZXF1YWxpemVyLW5iYW5kcyIsICJlcXVhbGl6ZXIiKTsKLSAqICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZXF1YWxpemVyKSwgIm51bS1iYW5kcyIsIDUsIE5VTEwpOwotICogCi0gKiAuLi4KLSAqIAotICogICBmb3IgKGkgPSAwOyBpICZsdDsgNTsgaSsrKSB7Ci0gKiAgICAgYmFuZCA9IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXggKEdTVF9DSElMRF9QUk9YWSAoZXF1YWxpemVyKSwgaSk7Ci0gKiAgICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYmFuZCksICJmcmVxIiwgc3RhdGVbaV0uZnJlcSwKLSAqICAgICAgICAgImJhbmR3aWR0aCIsIHN0YXRlW2ldLndpZHRoLAotICogCSJnYWluIiwgc3RhdGVbaV0uZ2Fpbik7Ci0gKiAgICAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChiYW5kKSk7Ci0gKiAgIH0KLSAqIAotICogLi4uCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXIuaCIKLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXJuYmFuZHMuaCIKLQotCi1lbnVtCi17Ci0gIFBST1BfTlVNX0JBTkRTID0gMQotfTsKLQotc3RhdGljIHZvaWQgZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9paXJfZXF1YWxpemVyX25iYW5kc19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKGVxdWFsaXplcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBlcXVhbGl6ZXJfZGVidWcKLQotI2RlZmluZSBnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0SWlyRXF1YWxpemVyTkJhbmRzLCBnc3RfaWlyX2VxdWFsaXplcl9uYmFuZHMsCi0gICAgR1NUX1RZUEVfSUlSX0VRVUFMSVpFUik7Ci0KLS8qIGVxdWFsaXplciBpbXBsZW1lbnRhdGlvbiAqLwotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2NsYXNzX2luaXQgKEdzdElpckVxdWFsaXplck5CYW5kc0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9CQU5EUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibnVtLWJhbmRzIiwgIm51bS1iYW5kcyIsCi0gICAgICAgICAgIm51bWJlciBvZiBkaWZmZXJlbnQgYmFuZHMgdG8gdXNlIiwgMSwgNjQsIDEwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fQ09OU1RSVUNUKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIk4gQmFuZCBFcXVhbGl6ZXIiLAotICAgICAgIkZpbHRlci9FZmZlY3QvQXVkaW8iLAotICAgICAgIkRpcmVjdCBGb3JtIElJUiBlcXVhbGl6ZXIiLAotICAgICAgIkJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPiwiICIgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2luaXQgKEdzdElpckVxdWFsaXplck5CYW5kcyAqIGVxdV9uKQotewotICBHc3RJaXJFcXVhbGl6ZXIgKmVxdSA9IEdTVF9JSVJfRVFVQUxJWkVSIChlcXVfbik7Ci0KLSAgZ3N0X2lpcl9lcXVhbGl6ZXJfY29tcHV0ZV9mcmVxdWVuY2llcyAoZXF1LCAxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWlyX2VxdWFsaXplcl9uYmFuZHNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdElpckVxdWFsaXplciAqZXF1ID0gR1NUX0lJUl9FUVVBTElaRVIgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX05VTV9CQU5EUzoKLSAgICAgIGdzdF9paXJfZXF1YWxpemVyX2NvbXB1dGVfZnJlcXVlbmNpZXMgKGVxdSwgZ192YWx1ZV9nZXRfdWludCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9paXJfZXF1YWxpemVyX25iYW5kc19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SWlyRXF1YWxpemVyICplcXUgPSBHU1RfSUlSX0VRVUFMSVpFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTlVNX0JBTkRTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIGVxdS0+ZnJlcV9iYW5kX2NvdW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmggYi9nc3QvZXF1YWxpemVyL2dzdGlpcmVxdWFsaXplcm5iYW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTE5YTFmLi4wMDAwMDAwCi0tLSBhL2dzdC9lcXVhbGl6ZXIvZ3N0aWlyZXF1YWxpemVybmJhbmRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDQ+IEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotICogICAgICAgICAgICAgICA8MjAwNz4gU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfSUlSX0VRVUFMSVpFUl9OQkFORFNfXwotI2RlZmluZSBfX0dTVF9JSVJfRVFVQUxJWkVSX05CQU5EU19fCi0KLSNpbmNsdWRlICJnc3RpaXJlcXVhbGl6ZXIuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdElpckVxdWFsaXplck5CYW5kcyBHc3RJaXJFcXVhbGl6ZXJOQmFuZHM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SWlyRXF1YWxpemVyTkJhbmRzQ2xhc3MgR3N0SWlyRXF1YWxpemVyTkJhbmRzQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfSUlSX0VRVUFMSVpFUl9OQkFORFMgXAotICAoZ3N0X2lpcl9lcXVhbGl6ZXJfbmJhbmRzX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JSVJfRVFVQUxJWkVSX05CQU5EUyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfTkJBTkRTLEdzdElpckVxdWFsaXplck5CYW5kcykpCi0jZGVmaW5lIEdTVF9JSVJfRVFVQUxJWkVSX05CQU5EU19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9JSVJfRVFVQUxJWkVSX05CQU5EUyxHc3RJaXJFcXVhbGl6ZXJOQmFuZHNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19JSVJfRVFVQUxJWkVSX05CQU5EUyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfTkJBTkRTKSkKLSNkZWZpbmUgR1NUX0lTX0lJUl9FUVVBTElaRVJfTkJBTkRTX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0lJUl9FUVVBTElaRVJfTkJBTkRTKSkKLQotc3RydWN0IF9Hc3RJaXJFcXVhbGl6ZXJOQmFuZHMKLXsKLSAgR3N0SWlyRXF1YWxpemVyIGVxdWFsaXplcjsKLX07Ci0KLXN0cnVjdCBfR3N0SWlyRXF1YWxpemVyTkJhbmRzQ2xhc3MKLXsKLSAgR3N0SWlyRXF1YWxpemVyQ2xhc3MgZXF1YWxpemVyX2NsYXNzOwotfTsKLQotZXh0ZXJuIEdUeXBlIGdzdF9paXJfZXF1YWxpemVyX25iYW5kc19nZXRfdHlwZSh2b2lkKTsKLQotI2VuZGlmIC8qIF9fR1NUX0lJUl9FUVVBTElaRVJfTkJBTkRTX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9mbHYvTWFrZWZpbGUuYW0gYi9nc3QvZmx2L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjA1OTk5Li4wMDAwMDAwCi0tLSBhL2dzdC9mbHYvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RmbHYubGEKLQotbGliZ3N0Zmx2X2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RmbHZfbGFfTElCQUREID0gLWxnc3RwYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05AIC1sZ3N0YXVkaW8tQEdTVF9BUElfVkVSU0lPTkAgXAotICAgICAgICAtbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIC1sZ3N0dGFnLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLWxpYmdzdGZsdl9sYV9MREZMQUdTID0gJHtHU1RfUExVR0lOX0xERkxBR1N9Ci1saWJnc3RmbHZfbGFfU09VUkNFUyA9IGdzdGZsdmRlbXV4LmMgZ3N0Zmx2bXV4LmMKLWxpYmdzdGZsdl9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGZsdmRlbXV4LmggZ3N0Zmx2bXV4LmggYW1mZGVmcy5oIGdzdGluZGV4LmgKLQotRVhUUkFfRElTVCA9IGdzdGluZGV4LmMgZ3N0bWVtaW5kZXguYwpkaWZmIC0tZ2l0IGEvZ3N0L2Zsdi9NYWtlZmlsZS5pbiBiL2dzdC9mbHYvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OWVkZWQuLjAwMDAwMDAKLS0tIGEvZ3N0L2Zsdi9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkyMiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvZmx2Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0Zmx2X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0Zmx2X2xhX09CSkVDVFMgPSBsaWJnc3RmbHZfbGEtZ3N0Zmx2ZGVtdXgubG8gXAotCWxpYmdzdGZsdl9sYS1nc3RmbHZtdXgubG8KLWxpYmdzdGZsdl9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RmbHZfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGZsdl9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGZsdl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGZsdl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RmbHZfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0Zmx2X2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGZsdl9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RmbHYubGEKLWxpYmdzdGZsdl9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0Zmx2X2xhX0xJQkFERCA9IC1sZ3N0cGJ1dGlscy1AR1NUX0FQSV9WRVJTSU9OQCAtbGdzdGF1ZGlvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLSAgICAgICAgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCAtbGdzdHRhZy0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi0KLWxpYmdzdGZsdl9sYV9MREZMQUdTID0gJHtHU1RfUExVR0lOX0xERkxBR1N9Ci1saWJnc3RmbHZfbGFfU09VUkNFUyA9IGdzdGZsdmRlbXV4LmMgZ3N0Zmx2bXV4LmMKLWxpYmdzdGZsdl9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RmbHZkZW11eC5oIGdzdGZsdm11eC5oIGFtZmRlZnMuaCBnc3RpbmRleC5oCi1FWFRSQV9ESVNUID0gZ3N0aW5kZXguYyBnc3RtZW1pbmRleC5jCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvZmx2L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9mbHYvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RmbHYubGE6ICQobGliZ3N0Zmx2X2xhX09CSkVDVFMpICQobGliZ3N0Zmx2X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RmbHZfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGZsdl9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0Zmx2X2xhX09CSkVDVFMpICQobGliZ3N0Zmx2X2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Zmx2X2xhLWdzdGZsdmRlbXV4LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Zmx2X2xhLWdzdGZsdm11eC5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0Zmx2X2xhLWdzdGZsdmRlbXV4LmxvOiBnc3RmbHZkZW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Zmx2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGZsdl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Zmx2X2xhLWdzdGZsdmRlbXV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RmbHZfbGEtZ3N0Zmx2ZGVtdXguVHBvIC1jIC1vIGxpYmdzdGZsdl9sYS1nc3RmbHZkZW11eC5sbyBgdGVzdCAtZiAnZ3N0Zmx2ZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Zmx2ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Zmx2X2xhLWdzdGZsdmRlbXV4LlRwbyAkKERFUERJUikvbGliZ3N0Zmx2X2xhLWdzdGZsdmRlbXV4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZsdmRlbXV4LmMnIG9iamVjdD0nbGliZ3N0Zmx2X2xhLWdzdGZsdmRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Zmx2X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGZsdl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RmbHZfbGEtZ3N0Zmx2ZGVtdXgubG8gYHRlc3QgLWYgJ2dzdGZsdmRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGZsdmRlbXV4LmMKLQotbGliZ3N0Zmx2X2xhLWdzdGZsdm11eC5sbzogZ3N0Zmx2bXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RmbHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Zmx2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RmbHZfbGEtZ3N0Zmx2bXV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RmbHZfbGEtZ3N0Zmx2bXV4LlRwbyAtYyAtbyBsaWJnc3RmbHZfbGEtZ3N0Zmx2bXV4LmxvIGB0ZXN0IC1mICdnc3RmbHZtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Zmx2bXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGZsdl9sYS1nc3RmbHZtdXguVHBvICQoREVQRElSKS9saWJnc3RmbHZfbGEtZ3N0Zmx2bXV4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZsdm11eC5jJyBvYmplY3Q9J2xpYmdzdGZsdl9sYS1nc3RmbHZtdXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RmbHZfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Zmx2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGZsdl9sYS1nc3RmbHZtdXgubG8gYHRlc3QgLWYgJ2dzdGZsdm11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbHZtdXguYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvZmx2L2FtZmRlZnMuaCBiL2dzdC9mbHYvYW1mZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU3NzI1Li4wMDAwMDAwCi0tLSBhL2dzdC9mbHYvYW1mZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDExIEphbiBTY2htaWR0IDx0aGF5dGFuQG5vcmFpc2luLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQU1GREVGU19IX18KLSNkZWZpbmUgX19BTUZERUZTX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jZGVmaW5lIEFNRjBfTlVNQkVSX01BUktFUiAweDAKLSNkZWZpbmUgQU1GMF9CT09MRUFOX01BUktFUiAweDEKLSNkZWZpbmUgQU1GMF9TVFJJTkdfTUFSS0VSIDB4MgotI2RlZmluZSBBTUYwX09CSkVDVF9NQVJLRVIgMHgzCi0jZGVmaW5lIEFNRjBfTU9WSUVDTElQX01BUktFUiAweDQgLyogUmVzZXJ2ZWQsIG5vdCBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgQU1GMF9OVUxMX01BUktFUiAweDUKLSNkZWZpbmUgQU1GMF9VTkRFRklORURfTUFSS0VSIDB4NgotI2RlZmluZSBBTUYwX1JFRkVSRU5DRV9NQVJLRVIgMHg3Ci0jZGVmaW5lIEFNRjBfRUNNQV9BUlJBWV9NQVJLRVIgMHg4Ci0jZGVmaW5lIEFNRjBfT0JKRUNUX0VORF9NQVJLRVIgMHg5Ci0jZGVmaW5lIEFNRjBfU1RSSUNUX0FSUkFZX01BUktFUiAweEEKLSNkZWZpbmUgQU1GMF9EQVRFX01BUktFUiAweEIKLSNkZWZpbmUgQU1GMF9MT05HX1NUUklOR19NQVJLRVIgMHhDCi0jZGVmaW5lIEFNRjBfVU5TVVBQT1JURURfTUFSS0VSIDB4RAotI2RlZmluZSBBTUYwX1JFQ09SRFNFVF9NQVJLRVIgMHhFIC8qIFJlc2VydmVkLCBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIEFNRjBfWE1MX0RPQ1VNRU5UX01BUktFUiAweEYKLSNkZWZpbmUgQU1GMF9UWVBFRF9PQkpFQ1RfTUFSS0VSIDB4MTAKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZmx2L2dzdGZsdmRlbXV4LmMgYi9nc3QvZmx2L2dzdGZsdmRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMjRiMTguLjAwMDAwMDAKLS0tIGEvZ3N0L2Zsdi9nc3RmbHZkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWZsdmRlbXV4Ci0gKgotICogZmx2ZGVtdXggZGVtdXhlcyBhbiBGTFYgZmlsZSBpbnRvIHRoZSBkaWZmZXJlbnQgY29udGFpbmVkIHN0cmVhbXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249L3BhdGgvdG8vZmx2ICEgZmx2ZGVtdXggISBhdWRpb2NvbnZlcnQgISBhdXRvYXVkaW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGRlbXV4ZXMgYW4gRkxWIGZpbGUgYW5kIG91dHB1dHMgdGhlIGNvbnRhaW5lZCByYXcgYXVkaW8gc3RyZWFtcy4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0Zmx2ZGVtdXguaCIKLSNpbmNsdWRlICJnc3RmbHZtdXguaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9kZXNjcmlwdGlvbnMuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLQotLyogRklYTUU6IGRvbid0IHJlbHkgb24gb3duIEdzdEluZGV4ICovCi0jaW5jbHVkZSAiZ3N0aW5kZXguYyIKLSNpbmNsdWRlICJnc3RtZW1pbmRleC5jIgotI2RlZmluZSBHU1RfQVNTT0NJQVRJT05fRkxBR19OT05FIEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX05PTkUKLSNkZWZpbmUgR1NUX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQgR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQKLSNkZWZpbmUgR1NUX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCBHU1RfSU5ERVhfQVNTT0NJQVRJT05fRkxBR19ERUxUQV9VTklUCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBmbHZfc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtZmx2IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYXVkaW9fc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoImF1ZGlvIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMKLSAgICAoImF1ZGlvL3gtYWRwY20sIGxheW91dCA9IChzdHJpbmcpIHN3ZiwgY2hhbm5lbHMgPSAoaW50KSB7IDEsIDIgfSwgcmF0ZSA9IChpbnQpIHsgNTUxMiwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9OyAiCi0gICAgICAgICJhdWRpby9tcGVnLCBtcGVndmVyc2lvbiA9IChpbnQpIDEsIGxheWVyID0gKGludCkgMywgY2hhbm5lbHMgPSAoaW50KSB7IDEsIDIgfSwgcmF0ZSA9IChpbnQpIHsgNTUxMiwgODAwMCwgMTEwMjUsIDIyMDUwLCA0NDEwMCB9LCBwYXJzZWQgPSAoYm9vbGVhbikgVFJVRTsgIgotICAgICAgICAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb24gPSAoaW50KSA0LCBzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgcmF3LCBmcmFtZWQgPSAoYm9vbGVhbikgVFJVRTsgIgotICAgICAgICAiYXVkaW8veC1uZWxseW1vc2VyLCBjaGFubmVscyA9IChpbnQpIHsgMSwgMiB9LCByYXRlID0gKGludCkgeyA1NTEyLCA4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCA0NDEwMCB9OyAiCi0gICAgICAgICJhdWRpby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgeyBVOCwgUzE2TEUgfSwgbGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsIGNoYW5uZWxzID0gKGludCkgeyAxLCAyIH0sIHJhdGUgPSAoaW50KSB7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgIgotICAgICAgICAiYXVkaW8veC1hbGF3LCBjaGFubmVscyA9IChpbnQpIHsgMSwgMiB9LCByYXRlID0gKGludCkgeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH07ICIKLSAgICAgICAgImF1ZGlvL3gtbXVsYXcsIGNoYW5uZWxzID0gKGludCkgeyAxLCAyIH0sIHJhdGUgPSAoaW50KSB7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgIgotICAgICAgICAiYXVkaW8veC1zcGVleCwgY2hhbm5lbHMgPSAoaW50KSAxLCByYXRlID0gKGludCkgMTYwMDA7IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9fc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInZpZGVvIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LWZsYXNoLXZpZGVvLCBmbHZ2ZXJzaW9uPShpbnQpIDE7ICIKLSAgICAgICAgInZpZGVvL3gtZmxhc2gtc2NyZWVuOyAiCi0gICAgICAgICJ2aWRlby94LXZwNi1mbGFzaDsgIiAidmlkZW8veC12cDYtYWxwaGE7ICIKLSAgICAgICAgInZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD1hdmM7IikKLSAgICApOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChmbHZkZW11eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBmbHZkZW11eF9kZWJ1ZwotCi0jZGVmaW5lIGdzdF9mbHZfZGVtdXhfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0Rmx2RGVtdXgsIGdzdF9mbHZfZGVtdXgsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi0vKiA5IGJ5dGVzIG9mIGhlYWRlciArIDQgYnl0ZXMgb2YgZmlyc3QgcHJldmlvdXMgdGFnIHNpemUgKi8KLSNkZWZpbmUgRkxWX0hFQURFUl9TSVpFIDEzCi0vKiAxIGJ5dGUgb2YgdGFnIHR5cGUgKyAzIGJ5dGVzIG9mIHRhZyBkYXRhIHNpemUgKi8KLSNkZWZpbmUgRkxWX1RBR19UWVBFX1NJWkUgNAotCi0vKiB0d28gc2Vjb25kcyAtIGNvbnNpZGVyIGR0cyBhcmUgcmVzeW5jZWQgdG8gYW5vdGhlciBiYXNlIGlmIHRoaXMgZGlmZmVyZW50ICovCi0jZGVmaW5lIFJFU1lOQ19USFJFU0hPTEQgMjAwMAotCi0vKiBob3cgbXVjaCBzdHJlYW0gdGltZSB0byB3YWl0IGZvciBhdWRpbyB0YWdzIHRvIGFwcGVhciBhZnRlciB3ZSBoYXZlIHZpZGVvLCBvciB2aWNlIHZlcnNhICovCi0jZGVmaW5lIE5PX01PUkVfUEFEU19USFJFU0hPTEQgKDYgKiBHU1RfU0VDT05EKQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmx2X2RlbXV4X2hhbmRsZV9zZWVrX3B1c2ggKEdzdEZsdkRlbXV4ICogZGVtdXgsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdWxsIChHc3RGbHZEZW11eCAqIGRlbXV4LAotICAgIEdzdEV2ZW50ICogZXZlbnQsIGdib29sZWFuIHNlZWtpbmcpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zsdl9kZW11eF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zsdl9kZW11eF9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgR3N0SW5kZXggKmdzdF9mbHZfZGVtdXhfZ2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9mbHZfZGVtdXhfcHVzaF90YWdzIChHc3RGbHZEZW11eCAqIGRlbXV4KTsKLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfZGVtdXhfcGFyc2VfYW5kX2FkZF9pbmRleF9lbnRyeSAoR3N0Rmx2RGVtdXggKiBkZW11eCwgR3N0Q2xvY2tUaW1lIHRzLAotICAgIGd1aW50NjQgcG9zLCBnYm9vbGVhbiBrZXlmcmFtZSkKLXsKLSAgR3N0SW5kZXhBc3NvY2lhdGlvbiBhc3NvY2lhdGlvbnNbMl07Ci0gIEdzdEluZGV4ICppbmRleDsKLSAgR3N0SW5kZXhFbnRyeSAqZW50cnk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LAotICAgICAgImFkZGluZyBrZXk9JWQgYXNzb2NpYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICItPiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAga2V5ZnJhbWUsIEdTVF9USU1FX0FSR1MgKHRzKSwgcG9zKTsKLQotICAvKiBpZiB1cHN0cmVhbSBpcyBub3Qgc2Vla2FibGUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gYnVpbGRpbmcgYW4gaW5kZXggKi8KLSAgaWYgKCFkZW11eC0+dXBzdHJlYW1fc2Vla2FibGUpCi0gICAgcmV0dXJuOwotCi0gIGluZGV4ID0gZ3N0X2Zsdl9kZW11eF9nZXRfaW5kZXggKEdTVF9FTEVNRU5UIChkZW11eCkpOwotCi0gIGlmICghaW5kZXgpCi0gICAgcmV0dXJuOwotCi0gIC8qIGVudHJ5IG1heSBhbHJlYWR5IGhhdmUgYmVlbiBhZGRlZCBiZWZvcmUsIGF2b2lkIGFkZGluZyBpbmRlZmluaXRlbHkgKi8KLSAgZW50cnkgPSBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5IChpbmRleCwgZGVtdXgtPmluZGV4X2lkLAotICAgICAgR1NUX0lOREVYX0xPT0tVUF9FWEFDVCwgR1NUX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSwgR1NUX0ZPUk1BVF9CWVRFUywgcG9zKTsKLQotICBpZiAoZW50cnkpIHsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgZ2ludDY0IHRpbWUgPSAwOwotICAgIGdib29sZWFuIGtleTsKLQotICAgIGdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgKGVudHJ5LCBHU1RfRk9STUFUX1RJTUUsICZ0aW1lKTsKLSAgICBrZXkgPSAhICEoR1NUX0lOREVYX0FTU09DX0ZMQUdTIChlbnRyeSkgJiBHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAicG9zaXRpb24gYWxyZWFkeSBtYXBwZWQgdG8gdGltZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiwga2V5ZnJhbWUgJWQiLCBHU1RfVElNRV9BUkdTICh0aW1lKSwga2V5KTsKLSAgICAvKiB0aGVyZSBpcyBub3QgcmVhbGx5IGEgd2F5IHRvIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb25lICovCi0gICAgaWYgKHRpbWUgIT0gdHMgfHwga2V5ICE9ICEgIWtleWZyYW1lKQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJtZXRhZGF0YSBtaXNtYXRjaCIpOwotI2VuZGlmCi0gICAgZ3N0X29iamVjdF91bnJlZiAoaW5kZXgpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGFzc29jaWF0aW9uc1swXS5mb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7Ci0gIGFzc29jaWF0aW9uc1swXS52YWx1ZSA9IHRzOwotICBhc3NvY2lhdGlvbnNbMV0uZm9ybWF0ID0gR1NUX0ZPUk1BVF9CWVRFUzsKLSAgYXNzb2NpYXRpb25zWzFdLnZhbHVlID0gcG9zOwotCi0gIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IChpbmRleCwgZGVtdXgtPmluZGV4X2lkLAotICAgICAgKGtleWZyYW1lKSA/IEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUIDoKLSAgICAgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQsIDIsCi0gICAgICAoY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqKSAmYXNzb2NpYXRpb25zKTsKLQotICBpZiAocG9zID4gZGVtdXgtPmluZGV4X21heF9wb3MpCi0gICAgZGVtdXgtPmluZGV4X21heF9wb3MgPSBwb3M7Ci0gIGlmICh0cyA+IGRlbXV4LT5pbmRleF9tYXhfdGltZSkKLSAgICBkZW11eC0+aW5kZXhfbWF4X3RpbWUgPSB0czsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChpbmRleCk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1GTFZfR0VUX1NUUklORyAoR3N0Qnl0ZVJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ3VpbnQxNiBzdHJpbmdfc2l6ZSA9IDA7Ci0gIGdjaGFyICpzdHJpbmcgPSBOVUxMOwotICBjb25zdCBndWludDggKnN0ciA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHJlYWRlciAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlIChyZWFkZXIsICZzdHJpbmdfc2l6ZSkpKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmIChHX1VOTElLRUxZIChzdHJpbmdfc2l6ZSA+IGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChyZWFkZXIpKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBzdHJpbmcgPSBnX3RyeV9tYWxsb2MwIChzdHJpbmdfc2l6ZSArIDEpOwotICBpZiAoR19VTkxJS0VMWSAoIXN0cmluZykpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhIChyZWFkZXIsIHN0cmluZ19zaXplLCAmc3RyKSkpIHsKLSAgICBnX2ZyZWUgKHN0cmluZyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBtZW1jcHkgKHN0cmluZywgc3RyLCBzdHJpbmdfc2l6ZSk7Ci0gIGlmICghZ191dGY4X3ZhbGlkYXRlIChzdHJpbmcsIHN0cmluZ19zaXplLCBOVUxMKSkgewotICAgIGdfZnJlZSAoc3RyaW5nKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBzdHJpbmc7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmx2X2RlbXV4X2NoZWNrX3NlZWthYmlsaXR5IChHc3RGbHZEZW11eCAqIGRlbXV4KQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7Ci0KLSAgZGVtdXgtPnVwc3RyZWFtX3NlZWthYmxlID0gRkFMU0U7Ci0KLSAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoZGVtdXgtPnNpbmtwYWQsIHF1ZXJ5KSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2Vla2luZyBxdWVyeSBmYWlsZWQiKTsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksIE5VTEwsICZkZW11eC0+dXBzdHJlYW1fc2Vla2FibGUsCi0gICAgICAmc3RhcnQsICZzdG9wKTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICAvKiB0cnkgaGFyZGVyIHRvIHF1ZXJ5IHVwc3RyZWFtIHNpemUgaWYgd2UgZGlkbid0IGdldCBpdCB0aGUgZmlyc3QgdGltZSAqLwotICBpZiAoZGVtdXgtPnVwc3RyZWFtX3NlZWthYmxlICYmIHN0b3AgPT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImRvaW5nIGR1cmF0aW9uIHF1ZXJ5IHRvIGZpeCB1cCB1bnNldCBzdG9wIik7Ci0gICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChkZW11eC0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywgJnN0b3ApOwotICB9Ci0KLSAgLyogaWYgdXBzdHJlYW0gZG9lc24ndCBrbm93IHRoZSBzaXplLCBpdCdzIGxpa2VseSB0aGF0IGl0J3Mgbm90IHNlZWthYmxlIGluCi0gICAqIHByYWN0aWNlIGV2ZW4gaWYgaXQgdGVjaG5pY2FsbHkgbWF5IGJlIHNlZWthYmxlICovCi0gIGlmIChkZW11eC0+dXBzdHJlYW1fc2Vla2FibGUgJiYgKHN0YXJ0ICE9IDAgfHwgc3RvcCA8PSBzdGFydCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZWthYmxlIGJ1dCB1bmtub3duIHN0YXJ0L3N0b3AgLT4gZGlzYWJsZSIpOwotICAgIGRlbXV4LT51cHN0cmVhbV9zZWVrYWJsZSA9IEZBTFNFOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJ1cHN0cmVhbSBzZWVrYWJsZTogJWQiLCBkZW11eC0+dXBzdHJlYW1fc2Vla2FibGUpOwotfQotCi1zdGF0aWMgR3N0RGF0ZVRpbWUgKgotcGFyc2VfZmx2X2RlbXV4X3BhcnNlX2RhdGVfc3RyaW5nIChjb25zdCBnY2hhciAqIHMpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciBtb250aHNbMTJdWzRdID0gewotICAgICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLAotICAgICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLAotICAgICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiCi0gIH07Ci0gIEdzdERhdGVUaW1lICpkdCA9IE5VTEw7Ci0gIGdjaGFyICoqdG9rZW5zOwotICBndWludDY0IGQ7Ci0gIGdjaGFyICplbmRwdHIsICpzdHJpcHBlZDsKLSAgZ2ludCBpLCBoaCwgbW0sIHNzOwotICBnaW50IHllYXIgPSAtMSwgbW9udGggPSAtMSwgZGF5ID0gLTE7Ci0gIGdpbnQgaG91ciA9IC0xLCBtaW51dGUgPSAtMSwgc2Vjb25kcyA9IC0xOwotCi0gIHN0cmlwcGVkID0gZ19zdHJzdHJpcCAoZ19zdHJkdXAgKHMpKTsKLQotICAvKiAiRnJpIE9jdCAxNSAxNToxMzoxNiAyMDA0IiBuZWVkcyB0byBiZSBwYXJzZWQgKi8KLSAgdG9rZW5zID0gZ19zdHJzcGxpdCAoc3RyaXBwZWQsICIgIiwgLTEpOwotCi0gIGdfZnJlZSAoc3RyaXBwZWQpOwotCi0gIGlmIChnX3N0cnZfbGVuZ3RoICh0b2tlbnMpICE9IDUpCi0gICAgZ290byBvdXQ7Ci0KLSAgLyogeWVhciAqLwotICBkID0gZ19hc2NpaV9zdHJ0b3VsbCAodG9rZW5zWzRdLCAmZW5kcHRyLCAxMCk7Ci0gIGlmIChkID09IDAgJiYgKmVuZHB0ciAhPSAnXDAnKQotICAgIGdvdG8gb3V0OwotCi0gIHllYXIgPSBkOwotCi0gIC8qIG1vbnRoICovCi0gIGlmIChzdHJsZW4gKHRva2Vuc1sxXSkgIT0gMykKLSAgICBnb3RvIG91dDsKLSAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLSAgICBpZiAoIXN0cmNtcCAodG9rZW5zWzFdLCBtb250aHNbaV0pKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKGkgPT0gMTIpCi0gICAgZ290byBvdXQ7Ci0KLSAgbW9udGggPSBpICsgMTsKLQotICAvKiBkYXkgKi8KLSAgZCA9IGdfYXNjaWlfc3RydG91bGwgKHRva2Vuc1syXSwgJmVuZHB0ciwgMTApOwotICBpZiAoZCA9PSAwICYmICplbmRwdHIgIT0gJ1wwJykKLSAgICBnb3RvIG91dDsKLQotICBkYXkgPSBkOwotCi0gIC8qIHRpbWUgKi8KLSAgaGggPSBtbSA9IHNzID0gMDsKLSAgaWYgKHNzY2FuZiAodG9rZW5zWzNdLCAiJWQ6JWQ6JWQiLCAmaGgsICZtbSwgJnNzKSA8IDIpCi0gICAgZ290byBvdXQ7Ci0gIGlmIChoaCA+PSAwICYmIGhoIDwgMjQgJiYgbW0gPj0gMCAmJiBtbSA8IDYwICYmIHNzID49IDAgJiYgc3MgPCA2MCkgewotICAgIGhvdXIgPSBoaDsKLSAgICBtaW51dGUgPSBtbTsKLSAgICBzZWNvbmRzID0gc3M7Ci0gIH0KLQotb3V0OgotCi0gIGlmICh0b2tlbnMpCi0gICAgZ19zdHJmcmVldiAodG9rZW5zKTsKLQotICBpZiAoeWVhciA+IDApCi0gICAgZHQgPSBnc3RfZGF0ZV90aW1lX25ldyAoMC4wLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHMpOwotCi0gIHJldHVybiBkdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X3BhcnNlX21ldGFkYXRhX2l0ZW0gKEdzdEZsdkRlbXV4ICogZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsCi0gICAgZ2Jvb2xlYW4gKiBlbmRfbWFya2VyKQotewotICBnY2hhciAqdGFnX25hbWUgPSBOVUxMOwotICBndWludDggdGFnX3R5cGUgPSAwOwotCi0gIC8qIEluaXRpYWxpemUgdGhlIGVuZF9tYXJrZXIgZmxhZyB0byBGQUxTRSAqLwotICAqZW5kX21hcmtlciA9IEZBTFNFOwotCi0gIC8qIE5hbWUgb2YgdGhlIHRhZyAqLwotICB0YWdfbmFtZSA9IEZMVl9HRVRfU1RSSU5HIChyZWFkZXIpOwotICBpZiAoR19VTkxJS0VMWSAoIXRhZ19uYW1lKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJmYWlsZWQgcmVhZGluZyB0YWcgbmFtZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIFdoYXQga2luZCBvZiBvYmplY3QgaXMgdGhhdCAqLwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJnRhZ190eXBlKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAidGFnIG5hbWUgJXMsIHRhZyB0eXBlICVkIiwgdGFnX25hbWUsIHRhZ190eXBlKTsKLQotICBzd2l0Y2ggKHRhZ190eXBlKSB7Ci0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogRG91YmxlICovCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBhIHVuaW9uIHRvIHJlYWQgdGhlIHVpbnQ2NCBhbmQgdGhlbiBhcyBhIGRvdWJsZSAqLwotICAgICAgZ2RvdWJsZSBkID0gMDsKLQotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUgKHJlYWRlciwgJmQpKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIiVzID0+IChkb3VibGUpICVmIiwgdGFnX25hbWUsIGQpOwotCi0gICAgICBpZiAoIXN0cmNtcCAodGFnX25hbWUsICJkdXJhdGlvbiIpKSB7Ci0gICAgICAgIGRlbXV4LT5kdXJhdGlvbiA9IGQgKiBHU1RfU0VDT05EOwotCi0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKGRlbXV4LT50YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgICAgICBHU1RfVEFHX0RVUkFUSU9OLCBkZW11eC0+ZHVyYXRpb24sIE5VTEwpOwotICAgICAgfSBlbHNlIGlmICghc3RyY21wICh0YWdfbmFtZSwgIkFzcGVjdFJhdGlvWCIpKSB7Ci0gICAgICAgIGRlbXV4LT5wYXJfeCA9IGQ7Ci0gICAgICAgIGRlbXV4LT5nb3RfcGFyID0gVFJVRTsKLSAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAodGFnX25hbWUsICJBc3BlY3RSYXRpb1kiKSkgewotICAgICAgICBkZW11eC0+cGFyX3kgPSBkOwotICAgICAgICBkZW11eC0+Z290X3BhciA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAid2lkdGgiKSkgewotICAgICAgICBkZW11eC0+dyA9IGQ7Ci0gICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAiaGVpZ2h0IikpIHsKLSAgICAgICAgZGVtdXgtPmggPSBkOwotICAgICAgfSBlbHNlIGlmICghc3RyY21wICh0YWdfbmFtZSwgImZyYW1lcmF0ZSIpKSB7Ci0gICAgICAgIGRlbXV4LT5mcmFtZXJhdGUgPSBkOwotICAgICAgfSBlbHNlIGlmICghc3RyY21wICh0YWdfbmFtZSwgImF1ZGlvZGF0YXJhdGUiKSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChkZW11eC0+YXVkaW9fdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgR1NUX1RBR19OT01JTkFMX0JJVFJBVEUsIChndWludCkgKGQgKiAxMDI0KSwgTlVMTCk7Ci0gICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAidmlkZW9kYXRhcmF0ZSIpKSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKGRlbXV4LT52aWRlb190YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgICAgICBHU1RfVEFHX05PTUlOQUxfQklUUkFURSwgKGd1aW50KSAoZCAqIDEwMjQpLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsICJUYWcgXCclc1wnIG5vdCBoYW5kbGVkIiwgdGFnX25hbWUpOwotICAgICAgfQotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogQm9vbGVhbiAqLwotICAgIHsKLSAgICAgIGd1aW50OCBiID0gMDsKLQotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZiKSkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICIlcyA9PiAoYm9vbGVhbikgJWQiLCB0YWdfbmFtZSwgYik7Ci0KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsICJUYWcgXCclc1wnIG5vdCBoYW5kbGVkIiwgdGFnX25hbWUpOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgLyogU3RyaW5nICovCi0gICAgewotICAgICAgZ2NoYXIgKnMgPSBOVUxMOwotCi0gICAgICBzID0gRkxWX0dFVF9TVFJJTkcgKHJlYWRlcik7Ci0gICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIiVzID0+IChzdHJpbmcpICVzIiwgdGFnX25hbWUsIHMpOwotCi0gICAgICBpZiAoIXN0cmNtcCAodGFnX25hbWUsICJjcmVhdGlvbmRhdGUiKSkgewotICAgICAgICBHc3REYXRlVGltZSAqZHQ7Ci0KLSAgICAgICAgZHQgPSBwYXJzZV9mbHZfZGVtdXhfcGFyc2VfZGF0ZV9zdHJpbmcgKHMpOwotICAgICAgICBpZiAoZHQgPT0gTlVMTCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiRmFpbGVkIHRvIHBhcnNlICclcycgaW50byBkYXRldGltZSIsIHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKGRlbXV4LT50YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgICAgICAgIEdTVF9UQUdfREFURV9USU1FLCBkdCwgTlVMTCk7Ci0gICAgICAgICAgZ3N0X2RhdGVfdGltZV91bnJlZiAoZHQpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAiY3JlYXRvciIpKSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKGRlbXV4LT50YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgICAgICBHU1RfVEFHX0FSVElTVCwgcywgTlVMTCk7Ci0gICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAidGl0bGUiKSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChkZW11eC0+dGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgR1NUX1RBR19USVRMRSwgcywgTlVMTCk7Ci0gICAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAibWV0YWRhdGFjcmVhdG9yIikpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoZGVtdXgtPnRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICAgIEdTVF9UQUdfRU5DT0RFUiwgcywgTlVMTCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKGRlbXV4LCAiVGFnIFwnJXNcJyBub3QgaGFuZGxlZCIsIHRhZ19uYW1lKTsKLSAgICAgIH0KLQotICAgICAgZ19mcmVlIChzKTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIE9iamVjdCAqLwotICAgIHsKLSAgICAgIGdib29sZWFuIGVuZF9vZl9vYmplY3RfbWFya2VyID0gRkFMU0U7Ci0KLSAgICAgIHdoaWxlICghZW5kX29mX29iamVjdF9tYXJrZXIpIHsKLSAgICAgICAgZ2Jvb2xlYW4gb2sgPSBnc3RfZmx2X2RlbXV4X3BhcnNlX21ldGFkYXRhX2l0ZW0gKGRlbXV4LCByZWFkZXIsCi0gICAgICAgICAgICAmZW5kX29mX29iamVjdF9tYXJrZXIpOwotCi0gICAgICAgIGlmIChHX1VOTElLRUxZICghb2spKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgImZhaWxlZCByZWFkaW5nIGEgdGFnLCBza2lwcGluZyIpOwotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgIC8qIEVDTUEgYXJyYXkgKi8KLSAgICB7Ci0gICAgICBndWludDMyIG5iX2VsZW1zID0gMDsKLSAgICAgIGdib29sZWFuIGVuZF9vZl9vYmplY3RfbWFya2VyID0gRkFMU0U7Ci0KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKHJlYWRlciwgJm5iX2VsZW1zKSkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJ0aGVyZSBhcmUgYXBwcm94LiAlZCBlbGVtZW50cyBpbiB0aGUgYXJyYXkiLAotICAgICAgICAgIG5iX2VsZW1zKTsKLQotICAgICAgd2hpbGUgKCFlbmRfb2Zfb2JqZWN0X21hcmtlcikgewotICAgICAgICBnYm9vbGVhbiBvayA9IGdzdF9mbHZfZGVtdXhfcGFyc2VfbWV0YWRhdGFfaXRlbSAoZGVtdXgsIHJlYWRlciwKLSAgICAgICAgICAgICZlbmRfb2Zfb2JqZWN0X21hcmtlcik7Ci0KLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCFvaykpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiZmFpbGVkIHJlYWRpbmcgYSB0YWcsIHNraXBwaW5nIik7Ci0gICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgLyogRW5kIG1hcmtlciAqLwotICAgIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZW5kIG1hcmtlciA/Iik7Ci0gICAgICBpZiAodGFnX25hbWVbMF0gPT0gJ1wwJykgewotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZW5kIG1hcmtlciBkZXRlY3RlZCIpOwotCi0gICAgICAgICplbmRfbWFya2VyID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgIC8qIEFycmF5ICovCi0gICAgewotICAgICAgZ3VpbnQzMiBuYl9lbGVtcyA9IDA7Ci0KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKHJlYWRlciwgJm5iX2VsZW1zKSkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJhcnJheSBoYXMgJWQgZWxlbWVudHMiLCBuYl9lbGVtcyk7Ci0KLSAgICAgIGlmICghc3RyY21wICh0YWdfbmFtZSwgInRpbWVzIikpIHsKLSAgICAgICAgaWYgKGRlbXV4LT50aW1lcykgewotICAgICAgICAgIGdfYXJyYXlfZnJlZSAoZGVtdXgtPnRpbWVzLCBUUlVFKTsKLSAgICAgICAgfQotICAgICAgICBkZW11eC0+dGltZXMgPSBnX2FycmF5X25ldyAoRkFMU0UsIFRSVUUsIHNpemVvZiAoZ2RvdWJsZSkpOwotICAgICAgfSBlbHNlIGlmICghc3RyY21wICh0YWdfbmFtZSwgImZpbGVwb3NpdGlvbnMiKSkgewotICAgICAgICBpZiAoZGVtdXgtPmZpbGVwb3NpdGlvbnMpIHsKLSAgICAgICAgICBnX2FycmF5X2ZyZWUgKGRlbXV4LT5maWxlcG9zaXRpb25zLCBUUlVFKTsKLSAgICAgICAgfQotICAgICAgICBkZW11eC0+ZmlsZXBvc2l0aW9ucyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgVFJVRSwgc2l6ZW9mIChnZG91YmxlKSk7Ci0gICAgICB9Ci0KLSAgICAgIHdoaWxlIChuYl9lbGVtcy0tKSB7Ci0gICAgICAgIGd1aW50OCBlbGVtX3R5cGUgPSAwOwotCi0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAocmVhZGVyLCAmZWxlbV90eXBlKSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIHN3aXRjaCAoZWxlbV90eXBlKSB7Ci0gICAgICAgICAgY2FzZSAwOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdkb3VibGUgZDsKLQotICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUgKHJlYWRlciwgJmQpKQotICAgICAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImVsZW1lbnQgaXMgYSBkb3VibGUgJWYiLCBkKTsKLQotICAgICAgICAgICAgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCAidGltZXMiKSAmJiBkZW11eC0+dGltZXMpIHsKLSAgICAgICAgICAgICAgZ19hcnJheV9hcHBlbmRfdmFsIChkZW11eC0+dGltZXMsIGQpOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wICh0YWdfbmFtZSwgImZpbGVwb3NpdGlvbnMiKSAmJgotICAgICAgICAgICAgICAgIGRlbXV4LT5maWxlcG9zaXRpb25zKSB7Ci0gICAgICAgICAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoZGVtdXgtPmZpbGVwb3NpdGlvbnMsIGQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAidW5zdXBwb3J0ZWQgYXJyYXkgZWxlbWVudCB0eXBlICVkIiwKLSAgICAgICAgICAgICAgICBlbGVtX3R5cGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAvKiBEYXRlICovCi0gICAgewotICAgICAgZ2RvdWJsZSBkID0gMDsKLSAgICAgIGdpbnQxNiBpID0gMDsKLQotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X2Zsb2F0NjRfYmUgKHJlYWRlciwgJmQpKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MTZfYmUgKHJlYWRlciwgJmkpKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAiJXMgPT4gKGRhdGUgYXMgYSBkb3VibGUpICVmLCB0aW1lem9uZSBvZmZzZXQgJWQiLCB0YWdfbmFtZSwgZCwgaSk7Ci0KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsICJUYWcgXCclc1wnIG5vdCBoYW5kbGVkIiwgdGFnX25hbWUpOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJ1bnN1cHBvcnRlZCB0YWcgdHlwZSAlZCIsIHRhZ190eXBlKTsKLSAgfQotCi0gIGdfZnJlZSAodGFnX25hbWUpOwotCi0gIHJldHVybiBUUlVFOwotCi1lcnJvcjoKLSAgZ19mcmVlICh0YWdfbmFtZSk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9jbGVhcl90YWdzIChHc3RGbHZEZW11eCAqIGRlbXV4KQotewotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNsZWFyaW5nIHRhZ2xpc3QiKTsKLQotICBpZiAoZGVtdXgtPnRhZ2xpc3QpIHsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGRlbXV4LT50YWdsaXN0KTsKLSAgfQotICBkZW11eC0+dGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9zZXRfc2NvcGUgKGRlbXV4LT50YWdsaXN0LCBHU1RfVEFHX1NDT1BFX0dMT0JBTCk7Ci0KLSAgaWYgKGRlbXV4LT5hdWRpb190YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChkZW11eC0+YXVkaW9fdGFncyk7Ci0gIH0KLSAgZGVtdXgtPmF1ZGlvX3RhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGlmIChkZW11eC0+dmlkZW9fdGFncykgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZGVtdXgtPnZpZGVvX3RhZ3MpOwotICB9Ci0gIGRlbXV4LT52aWRlb190YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbHZfZGVtdXhfcGFyc2VfdGFnX3NjcmlwdCAoR3N0Rmx2RGVtdXggKiBkZW11eCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RCeXRlUmVhZGVyIHJlYWRlcjsKLSAgZ3VpbnQ4IHR5cGUgPSAwOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA+PSA3LCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmcmVhZGVyLCA3KTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJwYXJzaW5nIGEgc2NyaXB0IHRhZyIpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50OCAoJnJlYWRlciwgJnR5cGUpKQotICAgIGdvdG8gY2xlYW51cDsKLQotICAvKiBNdXN0IGJlIHN0cmluZyAqLwotICBpZiAodHlwZSA9PSAyKSB7Ci0gICAgZ2NoYXIgKmZ1bmN0aW9uX25hbWU7Ci0gICAgZ3VpbnQgaTsKLQotICAgIGZ1bmN0aW9uX25hbWUgPSBGTFZfR0VUX1NUUklORyAoJnJlYWRlcik7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJmdW5jdGlvbiBuYW1lIGlzICVzIiwgR1NUX1NUUl9OVUxMIChmdW5jdGlvbl9uYW1lKSk7Ci0KLSAgICBpZiAoZnVuY3Rpb25fbmFtZSAhPSBOVUxMICYmIHN0cmNtcCAoZnVuY3Rpb25fbmFtZSwgIm9uTWV0YURhdGEiKSA9PSAwKSB7Ci0gICAgICBnYm9vbGVhbiBlbmRfbWFya2VyID0gRkFMU0U7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIndlIGhhdmUgYSBtZXRhZGF0YSBzY3JpcHQgb2JqZWN0Iik7Ci0KLSAgICAgIGdzdF9mbHZfZGVtdXhfY2xlYXJfdGFncyAoZGVtdXgpOwotCi0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZyZWFkZXIsICZ0eXBlKSkgewotICAgICAgICBnX2ZyZWUgKGZ1bmN0aW9uX25hbWUpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIDg6Ci0gICAgICAgIHsKLSAgICAgICAgICBndWludDMyIG5iX2VsZW1zID0gMDsKLQotICAgICAgICAgIC8qIEVDTUEgYXJyYXkgKi8KLSAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmcmVhZGVyLCAmbmJfZWxlbXMpKSB7Ci0gICAgICAgICAgICBnX2ZyZWUgKGZ1bmN0aW9uX25hbWUpOwotICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXMganVzdCBhIGhpbnQsIHNvbWUgZmlsZXMgaGF2ZQotICAgICAgICAgICAgIG5iX2VsZW1lbnRzID09IDAgYW5kIGFjdHVhbGx5IGNvbnRhaW4gaXRlbXMuICovCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJ0aGVyZSBhcmUgYXBwcm94LiAlZCBlbGVtZW50cyBpbiB0aGUgYXJyYXkiLAotICAgICAgICAgICAgICBuYl9lbGVtcyk7Ci0gICAgICAgIH0KLSAgICAgICAgICAvKiBmYWxsdGhyb3VnaCB0byByZWFkIGRhdGEgKi8KLSAgICAgICAgY2FzZSAzOgotICAgICAgICB7Ci0gICAgICAgICAgLyogT2JqZWN0ICovCi0gICAgICAgICAgd2hpbGUgKCFlbmRfbWFya2VyKSB7Ci0gICAgICAgICAgICBnYm9vbGVhbiBvayA9Ci0gICAgICAgICAgICAgICAgZ3N0X2Zsdl9kZW11eF9wYXJzZV9tZXRhZGF0YV9pdGVtIChkZW11eCwgJnJlYWRlciwgJmVuZF9tYXJrZXIpOwotCi0gICAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoIW9rKSkgewotICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiZmFpbGVkIHJlYWRpbmcgYSB0YWcsIHNraXBwaW5nIik7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiVW5oYW5kbGVkIHNjcmlwdCBkYXRhIHR5cGUgOiAlZCIsIHR5cGUpOwotICAgICAgICAgIGdfZnJlZSAoZnVuY3Rpb25fbmFtZSk7Ci0gICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgfQotCi0gICAgICBnc3RfZmx2X2RlbXV4X3B1c2hfdGFncyAoZGVtdXgpOwotICAgIH0KLQotICAgIGdfZnJlZSAoZnVuY3Rpb25fbmFtZSk7Ci0KLSAgICBpZiAoZGVtdXgtPnRpbWVzICYmIGRlbXV4LT5maWxlcG9zaXRpb25zKSB7Ci0gICAgICBndWludCBudW07Ci0KLSAgICAgIC8qIElmIGFuIGluZGV4IHdhcyBmb3VuZCwgaW5zZXJ0IGFzc29jaWF0aW9ucyAqLwotICAgICAgbnVtID0gTUlOIChkZW11eC0+dGltZXMtPmxlbiwgZGVtdXgtPmZpbGVwb3NpdGlvbnMtPmxlbik7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgZ3VpbnQ2NCB0aW1lLCBmaWxlcG9zaXRpb247Ci0KLSAgICAgICAgdGltZSA9IGdfYXJyYXlfaW5kZXggKGRlbXV4LT50aW1lcywgZ2RvdWJsZSwgaSkgKiBHU1RfU0VDT05EOwotICAgICAgICBmaWxlcG9zaXRpb24gPSBnX2FycmF5X2luZGV4IChkZW11eC0+ZmlsZXBvc2l0aW9ucywgZ2RvdWJsZSwgaSk7Ci0gICAgICAgIGdzdF9mbHZfZGVtdXhfcGFyc2VfYW5kX2FkZF9pbmRleF9lbnRyeSAoZGVtdXgsIHRpbWUsIGZpbGVwb3NpdGlvbiwKLSAgICAgICAgICAgIFRSVUUpOwotICAgICAgfQotICAgICAgZGVtdXgtPmluZGV4ZWQgPSBUUlVFOwotICAgIH0KLSAgfQotCi1jbGVhbnVwOgotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGF2ZV9ncm91cF9pZCAoR3N0Rmx2RGVtdXggKiBkZW11eCkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIGV2ZW50ID0gZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50IChkZW11eC0+c2lua3BhZCwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCk7Ci0gIGlmIChldmVudCkgewotICAgIGlmIChnc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWQgKGV2ZW50LCAmZGVtdXgtPmdyb3VwX2lkKSkKLSAgICAgIGRlbXV4LT5oYXZlX2dyb3VwX2lkID0gVFJVRTsKLSAgICBlbHNlCi0gICAgICBkZW11eC0+aGF2ZV9ncm91cF9pZCA9IEZBTFNFOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9IGVsc2UgaWYgKCFkZW11eC0+aGF2ZV9ncm91cF9pZCkgewotICAgIGRlbXV4LT5oYXZlX2dyb3VwX2lkID0gVFJVRTsKLSAgICBkZW11eC0+Z3JvdXBfaWQgPSBnc3RfdXRpbF9ncm91cF9pZF9uZXh0ICgpOwotICB9Ci0KLSAgcmV0dXJuIGRlbXV4LT5oYXZlX2dyb3VwX2lkOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbHZfZGVtdXhfYXVkaW9fbmVnb3RpYXRlIChHc3RGbHZEZW11eCAqIGRlbXV4LCBndWludDMyIGNvZGVjX3RhZywKLSAgICBndWludDMyIHJhdGUsIGd1aW50MzIgY2hhbm5lbHMsIGd1aW50MzIgd2lkdGgpCi17Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMLCAqb2xkX2NhcHM7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBndWludCBhZGp1c3RlZF9yYXRlID0gcmF0ZTsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnY2hhciAqc3RyZWFtX2lkOwotCi0gIHN3aXRjaCAoY29kZWNfdGFnKSB7Ci0gICAgY2FzZSAxOgotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWFkcGNtIiwgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgInN3ZiIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMTQ6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEsICJsYXllciIsIEdfVFlQRV9JTlQsIDMsCi0gICAgICAgICAgInBhcnNlZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMDoKLSAgICBjYXNlIDM6Ci0gICAgewotICAgICAgR3N0QXVkaW9Gb3JtYXQgZm9ybWF0OwotCi0gICAgICAvKiBBc3N1bWluZyBsaXR0bGUgZW5kaWFuIGZvciAwIChha2EgZW5kaWFubmVzcyBvZiB0aGUKLSAgICAgICAqIHN5c3RlbSBvbiB3aGljaCB0aGUgZmlsZSB3YXMgY3JlYXRlZCkgYXMgbW9zdCBwZW9wbGUKLSAgICAgICAqIGFyZSBwcm9iYWJseSB1c2luZyBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzICovCi0gICAgICBmb3JtYXQgPSBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIgKCh3aWR0aCA9PSA4KSA/IEZBTFNFIDogVFJVRSwKLSAgICAgICAgICBHX0xJVFRMRV9FTkRJQU4sIHdpZHRoLCB3aWR0aCk7Ci0KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBnc3RfYXVkaW9fZm9ybWF0X3RvX3N0cmluZyAoZm9ybWF0KSwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSA0OgotICAgIGNhc2UgNToKLSAgICBjYXNlIDY6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtbmVsbHltb3NlciIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxMDoKLSAgICB7Ci0gICAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICAgIGlmICghZGVtdXgtPmF1ZGlvX2NvZGVjX2RhdGEpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJkb24ndCBoYXZlIEFBQyBjb2RlYyBkYXRhIHlldCIpOwotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9idWZmZXJfbWFwIChkZW11eC0+YXVkaW9fY29kZWNfZGF0YSwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAgICAgLyogdXNlIGNvZGVjLWRhdGEgdG8gZXh0cmFjdCBhbmQgdmVyaWZ5IHNhbXBsZXJhdGUgKi8KLSAgICAgIGlmIChtYXAuc2l6ZSA+PSAyKSB7Ci0gICAgICAgIGdpbnQgZnJlcV9pbmRleDsKLQotICAgICAgICBmcmVxX2luZGV4ID0gR1NUX1JFQURfVUlOVDE2X0JFIChtYXAuZGF0YSk7Ci0gICAgICAgIGZyZXFfaW5kZXggPSAoZnJlcV9pbmRleCAmIDB4MDc4MCkgPj4gNzsKLSAgICAgICAgYWRqdXN0ZWRfcmF0ZSA9Ci0gICAgICAgICAgICBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9zYW1wbGVfcmF0ZV9mcm9tX2luZGV4IChmcmVxX2luZGV4KTsKLQotICAgICAgICBpZiAoYWRqdXN0ZWRfcmF0ZSAmJiAocmF0ZSAhPSBhZGp1c3RlZF9yYXRlKSkgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIkFqdXN0aW5nIEFBQyBzYW1wbGUgcmF0ZSAlZCAtPiAlZCIsIHJhdGUsCi0gICAgICAgICAgICAgIGFkanVzdGVkX3JhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFkanVzdGVkX3JhdGUgPSByYXRlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChkZW11eC0+YXVkaW9fY29kZWNfZGF0YSwgJm1hcCk7Ci0KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vbXBlZyIsCi0gICAgICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNCwgImZyYW1lZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgICAgICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgInJhdyIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgNzoKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1hbGF3Iik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtbXVsYXciKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTE6Ci0gICAgewotICAgICAgR1ZhbHVlIHN0cmVhbWhlYWRlciA9IEdfVkFMVUVfSU5JVDsKLSAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKLSAgICAgIEdzdEJ5dGVXcml0ZXIgdzsKLSAgICAgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICAgICAgR3N0QnVmZmVyICpidWY7Ci0gICAgICBHc3RUYWdMaXN0ICp0YWdzOwotCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtc3BlZXgiKTsKLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImdlbmVyYXRpbmcgc3BlZXggaGVhZGVyIik7Ci0KLSAgICAgIC8qIFNwZWV4IGRlY29kZXIgZXhwZWN0cyBzdHJlYW1oZWFkZXIgdG8gYmUgeyBbaGVhZGVyXSwgW2NvbW1lbnRdIH0gKi8KLSAgICAgIGdfdmFsdWVfaW5pdCAoJnN0cmVhbWhlYWRlciwgR1NUX1RZUEVfQVJSQVkpOwotCi0gICAgICAvKiBoZWFkZXIgcGFydCAqLwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICgmdywgODAsIFRSVUUpOwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgmdywgKGd1aW50OCAqKSAiU3BlZXggICAiLCA4KTsKLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAoJncsIChndWludDggKikgIjEuMS4xMiIsIDcpOwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKCZ3LCAwLCAxMyk7Ci0gICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJncsIDEpOyAgICAvKiB2ZXJzaW9uICovCi0gICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJncsIDgwKTsgICAvKiBoZWFkZXJfc2l6ZSAqLwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZ3LCAxNjAwMCk7ICAgICAgICAvKiByYXRlICovCi0gICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJncsIDEpOyAgICAvKiBtb2RlOiBXaWRlYmFuZCAqLwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZ3LCA0KTsgICAgLyogbW9kZV9iaXRzdHJlYW1fdmVyc2lvbiAqLwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZ3LCAxKTsgICAgLyogbmJfY2hhbm5lbHM6IDEgKi8KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmdywgLTEpOyAgIC8qIGJpdHJhdGUgKi8KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmdywgMHg1MCk7IC8qIGZyYW1lX3NpemUgKi8KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmdywgMCk7ICAgIC8qIFZCUiAqLwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZ3LCAxKTsgICAgLyogZnJhbWVzX3Blcl9wYWNrZXQgKi8KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmdywgMCk7ICAgIC8qIGV4dHJhX2hlYWRlcnMgKi8KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlICgmdywgMCk7ICAgIC8qIHJlc2VydmVkMSAqLwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZ3LCAwKTsgICAgLyogcmVzZXJ2ZWQyICovCi0gICAgICBnX2Fzc2VydCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICgmdykgPT0gODApOwotCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAoJnZhbHVlLCBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKCZ3KSk7Ci0gICAgICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlICgmc3RyZWFtaGVhZGVyLCAmdmFsdWUpOwotICAgICAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLQotICAgICAgLyogY29tbWVudCBwYXJ0ICovCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgICAgIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgICAgYnVmID0gZ3N0X3RhZ19saXN0X3RvX3ZvcmJpc2NvbW1lbnRfYnVmZmVyICh0YWdzLCBOVUxMLCAwLCAiTm8gY29tbWVudHMiKTsKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZ2YWx1ZSwgYnVmKTsKLSAgICAgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZzdHJlYW1oZWFkZXIsICZ2YWx1ZSk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKHN0cnVjdHVyZSwgInN0cmVhbWhlYWRlciIsICZzdHJlYW1oZWFkZXIpOwotCi0gICAgICBjaGFubmVscyA9IDE7Ci0gICAgICBhZGp1c3RlZF9yYXRlID0gMTYwMDA7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJ1bnN1cHBvcnRlZCBhdWRpbyBjb2RlYyB0YWcgJXUiLCBjb2RlY190YWcpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoIWNhcHMpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgImZhaWxlZCBjcmVhdGluZyBjYXBzIGZvciBhdWRpbyBwYWQiKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgInJhdGUiLCBHX1RZUEVfSU5ULCBhZGp1c3RlZF9yYXRlLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgY2hhbm5lbHMsIE5VTEwpOwotCi0gIGlmIChkZW11eC0+YXVkaW9fY29kZWNfZGF0YSkgewotICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLAotICAgICAgICBkZW11eC0+YXVkaW9fY29kZWNfZGF0YSwgTlVMTCk7Ci0gIH0KLQotICBvbGRfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoZGVtdXgtPmF1ZGlvX3BhZCk7Ci0gIGlmICghb2xkX2NhcHMpIHsKLSAgICBzdHJlYW1faWQgPQotICAgICAgICBnc3RfcGFkX2NyZWF0ZV9zdHJlYW1faWQgKGRlbXV4LT5hdWRpb19wYWQsIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwKLSAgICAgICAgImF1ZGlvIik7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICAgIGlmIChoYXZlX2dyb3VwX2lkIChkZW11eCkpCi0gICAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkIChldmVudCwgZGVtdXgtPmdyb3VwX2lkKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT5hdWRpb19wYWQsIGV2ZW50KTsKLSAgICBnX2ZyZWUgKHN0cmVhbV9pZCk7Ci0gIH0KLSAgaWYgKCFvbGRfY2FwcyB8fCAhZ3N0X2NhcHNfaXNfZXF1YWwgKG9sZF9jYXBzLCBjYXBzKSkKLSAgICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChkZW11eC0+YXVkaW9fcGFkLCBjYXBzKTsKLSAgZWxzZQotICAgIHJldCA9IFRSVUU7Ci0KLSAgaWYgKG9sZF9jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChvbGRfY2Fwcyk7Ci0KLWRvbmU6Ci0gIGlmIChHX0xJS0VMWSAocmV0KSkgewotICAgIC8qIFN0b3JlIHRoZSBjYXBzIHdlIGdvdCBmcm9tIHRhZ3MgKi8KLSAgICBkZW11eC0+YXVkaW9fY29kZWNfdGFnID0gY29kZWNfdGFnOwotICAgIGRlbXV4LT5yYXRlID0gcmF0ZTsKLSAgICBkZW11eC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgICBkZW11eC0+d2lkdGggPSB3aWR0aDsKLQotICAgIGlmIChjYXBzKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eC0+YXVkaW9fcGFkLCAic3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQgY2FwcyAlIgotICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICAgICAgZ3N0X2Zsdl9kZW11eF9wdXNoX3RhZ3MgKGRlbXV4KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgtPmF1ZGlvX3BhZCwgImRlbGF5ZWQgc2V0dGluZyBjYXBzIik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgtPmF1ZGlvX3BhZCwgImZhaWxlZCBuZWdvdGlhdGluZyBjYXBzICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgfQotCi0gIGlmIChjYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotYmVhY2g6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCAoR3N0Rmx2RGVtdXggKiBkZW11eCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBpZiAoZGVtdXgtPmF1ZGlvX3BhZCkKLSAgICByZXQgfD0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkZW11eC0+YXVkaW9fcGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotCi0gIGlmIChkZW11eC0+dmlkZW9fcGFkKQotICAgIHJldCB8PSBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT52aWRlb19wYWQsIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfZGVtdXhfYWRkX2NvZGVjX3RhZyAoR3N0Rmx2RGVtdXggKiBkZW11eCwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgR3N0UGFkICogcGFkKQotewotICBpZiAocGFkKSB7Ci0gICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLQotICAgIGlmIChjYXBzKSB7Ci0gICAgICBnY2hhciAqY29kZWNfbmFtZSA9IGdzdF9wYl91dGlsc19nZXRfY29kZWNfZGVzY3JpcHRpb24gKGNhcHMpOwotCi0gICAgICBpZiAoY29kZWNfbmFtZSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChkZW11eC0+dGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgdGFnLCBjb2RlY19uYW1lLCBOVUxMKTsKLSAgICAgICAgZ19mcmVlIChjb2RlY19uYW1lKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9wdXNoX3RhZ3MgKEdzdEZsdkRlbXV4ICogZGVtdXgpCi17Ci0gIGdzdF9mbHZfZGVtdXhfYWRkX2NvZGVjX3RhZyAoZGVtdXgsIEdTVF9UQUdfQVVESU9fQ09ERUMsIGRlbXV4LT5hdWRpb19wYWQpOwotICBnc3RfZmx2X2RlbXV4X2FkZF9jb2RlY190YWcgKGRlbXV4LCBHU1RfVEFHX1ZJREVPX0NPREVDLCBkZW11eC0+dmlkZW9fcGFkKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInB1c2hpbmcgJSIgR1NUX1BUUl9GT1JNQVQsIGRlbXV4LT50YWdsaXN0KTsKLQotICBnc3RfZmx2X2RlbXV4X3B1c2hfc3JjX2V2ZW50IChkZW11eCwKLSAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfY29weSAoZGVtdXgtPnRhZ2xpc3QpKSk7Ci0KLSAgaWYgKGRlbXV4LT5hdWRpb19wYWQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eC0+YXVkaW9fcGFkLCAicHVzaGluZyBhdWRpbyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgZGVtdXgtPmF1ZGlvX3RhZ3MpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPmF1ZGlvX3BhZCwKLSAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9jb3B5IChkZW11eC0+YXVkaW9fdGFncykpKTsKLSAgfQotCi0gIGlmIChkZW11eC0+dmlkZW9fcGFkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgtPnZpZGVvX3BhZCwgInB1c2hpbmcgdmlkZW8gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIGRlbXV4LT52aWRlb190YWdzKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT52aWRlb19wYWQsCi0gICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfY29weSAoZGVtdXgtPnZpZGVvX3RhZ3MpKSk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X3VwZGF0ZV9yZXN5bmMgKEdzdEZsdkRlbXV4ICogZGVtdXgsIGd1aW50MzIgZHRzLCBnYm9vbGVhbiBkaXNjb250LAotICAgIGd1aW50MzIgKiBsYXN0LCBHc3RDbG9ja1RpbWUgKiBvZmZzZXQpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBnaW50MzIgZGR0cyA9IGR0cyAtICpsYXN0OwotICBpZiAoIWRpc2NvbnQgJiYgZGR0cyA8PSAtUkVTWU5DX1RIUkVTSE9MRCkgewotICAgIC8qIFRoZW9yZXRpY2FsbHksIHdlIHNob3VsZCB1c2Ugc3Vic3RyYWN0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbGFzdCBidWZmZXIsCi0gICAgICAgYnV0IHRoaXMgZGVtdXhlciBzZW5kcyBubyBkdXJhdGlvbnMgb24gYnVmZmVycywgbm90IHN1cmUgaWYgaXQgY2Fubm90Ci0gICAgICAga25vdywgb3IganVzdCBkb2VzIG5vdCBjYXJlIHRvIGNhbGN1bGF0ZS4gKi8KLSAgICAqb2Zmc2V0IC09IGRkdHMgKiBHU1RfTVNFQ09ORDsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAiTGFyZ2UgZHRzIGdhcCAoJSIgR19HSU5UMzJfRk9STUFUICIgbXMpLCBhc3N1bWluZyByZXN5bmMsIG9mZnNldCBub3cgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIiLCBkZHRzLCBHU1RfVElNRV9BUkdTICgqb2Zmc2V0KSk7Ci0KLSAgICByZXQgPSBUUlVFOwotICB9Ci0gICpsYXN0ID0gZHRzOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X2RlbXV4X3BhcnNlX3RhZ19hdWRpbyAoR3N0Rmx2RGVtdXggKiBkZW11eCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDMyIHB0cyA9IDAsIGNvZGVjX3RhZyA9IDAsIHJhdGUgPSA1NTEyLCB3aWR0aCA9IDgsIGNoYW5uZWxzID0gMTsKLSAgZ3VpbnQzMiBjb2RlY19kYXRhID0gMCwgcHRzX2V4dCA9IDA7Ci0gIGd1aW50OCBmbGFncyA9IDA7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInBhcnNpbmcgYW4gYXVkaW8gdGFnIik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+YXVkaW9fcGFkICYmIGRlbXV4LT5ub19tb3JlX3BhZHMpKSB7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0RFQlVHCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+bm9fYXVkaW9fd2FybmVkKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAiU2lnbmFsZWQgbm8tbW9yZS1wYWRzIGFscmVhZHkgYnV0IGhhZCBubyBhdWRpbyBwYWQgLS0gaWdub3JpbmciKTsKLSAgICAgIGRlbXV4LT5ub19hdWRpb193YXJuZWQgPSBUUlVFOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID09IGRlbXV4LT50YWdfc2l6ZSwKLSAgICAgIEdTVF9GTE9XX0VSUk9SKTsKLQotICAvKiBFcnJvciBvdXQgb24gdGFncyB3aXRoIHRvbyBzbWFsbCBoZWFkZXJzICovCi0gIGlmIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpIDwgMTEpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkZW11eCwgIlRvbyBzbWFsbCB0YWcgc2l6ZSAoJSIgR19HU0laRV9GT1JNQVQgIikiLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0KLSAgLyogR3JhYiBpbmZvcm1hdGlvbiBhYm91dCBhdWRpbyB0YWcgKi8KLSAgcHRzID0gR1NUX1JFQURfVUlOVDI0X0JFIChkYXRhKTsKLSAgLyogcmVhZCB0aGUgcHRzIGV4dGVuc2lvbiB0byAzMiBiaXRzIGludGVnZXIgKi8KLSAgcHRzX2V4dCA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhICsgMyk7Ci0gIC8qIENvbWJpbmUgdGhlbSAqLwotICBwdHMgfD0gcHRzX2V4dCA8PCAyNDsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJwdHMgYnl0ZXMgJTAyWCAlMDJYICUwMlggJTAyWCAoJWQpIiwgZGF0YVswXSwgZGF0YVsxXSwKLSAgICAgIGRhdGFbMl0sIGRhdGFbM10sIHB0cyk7Ci0KLSAgLyogU2tpcCB0aGUgc3RyZWFtIGlkIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgZmxhZ3MgKi8KLSAgZmxhZ3MgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSArIDcpOwotCi0gIC8qIFNpbGVudGx5IHNraXAgYnVmZmVycyB3aXRoIG5vIGRhdGEgKi8KLSAgaWYgKG1hcC5zaXplID09IDExKQotICAgIGdvdG8gYmVhY2g7Ci0KLSAgLyogQ2hhbm5lbHMgKi8KLSAgaWYgKGZsYWdzICYgMHgwMSkgewotICAgIGNoYW5uZWxzID0gMjsKLSAgfQotICAvKiBXaWR0aCAqLwotICBpZiAoZmxhZ3MgJiAweDAyKSB7Ci0gICAgd2lkdGggPSAxNjsKLSAgfQotICAvKiBTYW1wbGluZyByYXRlICovCi0gIGlmICgoZmxhZ3MgJiAweDBDKSA9PSAweDBDKSB7Ci0gICAgcmF0ZSA9IDQ0MTAwOwotICB9IGVsc2UgaWYgKChmbGFncyAmIDB4MEMpID09IDB4MDgpIHsKLSAgICByYXRlID0gMjIwNTA7Ci0gIH0gZWxzZSBpZiAoKGZsYWdzICYgMHgwQykgPT0gMHgwNCkgewotICAgIHJhdGUgPSAxMTAyNTsKLSAgfQotICAvKiBDb2RlYyB0YWcgKi8KLSAgY29kZWNfdGFnID0gZmxhZ3MgPj4gNDsKLSAgaWYgKGNvZGVjX3RhZyA9PSAxMCkgeyAgICAgICAgLyogQUFDIGhhcyBhbiBleHRyYSBieXRlIGZvciBwYWNrZXQgdHlwZSAqLwotICAgIGNvZGVjX2RhdGEgPSAyOwotICB9IGVsc2UgewotICAgIGNvZGVjX2RhdGEgPSAxOwotICB9Ci0KLSAgLyogY29kZWMgdGFncyB3aXRoIHNwZWNpYWwgcmF0ZXMgKi8KLSAgaWYgKGNvZGVjX3RhZyA9PSA1IHx8IGNvZGVjX3RhZyA9PSAxNCkKLSAgICByYXRlID0gODAwMDsKLSAgZWxzZSBpZiAoKGNvZGVjX3RhZyA9PSA0KSB8fCAoY29kZWNfdGFnID09IDExKSkKLSAgICByYXRlID0gMTYwMDA7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiYXVkaW8gdGFnIHdpdGggJWQgY2hhbm5lbHMsICVkSHogc2FtcGxpbmcgcmF0ZSwgIgotICAgICAgIiVkIGJpdHMgd2lkdGgsIGNvZGVjIHRhZyAldSAoZmxhZ3MgJTAyWCkiLCBjaGFubmVscywgcmF0ZSwgd2lkdGgsCi0gICAgICBjb2RlY190YWcsIGZsYWdzKTsKLQotICBpZiAoY29kZWNfdGFnID09IDEwKSB7Ci0gICAgZ3VpbnQ4IGFhY19wYWNrZXRfdHlwZSA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhICsgOCk7Ci0KLSAgICBzd2l0Y2ggKGFhY19wYWNrZXRfdHlwZSkgewotICAgICAgY2FzZSAwOgotICAgICAgewotICAgICAgICAvKiBBdWRpb1NwZWNpZmljQ29uZmlnIGRhdGEgKi8KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiZ290IGFuIEFBQyBjb2RlYyBkYXRhIHBhY2tldCIpOwotICAgICAgICBpZiAoZGVtdXgtPmF1ZGlvX2NvZGVjX2RhdGEpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChkZW11eC0+YXVkaW9fY29kZWNfZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVtdXgtPmF1ZGlvX2NvZGVjX2RhdGEgPQotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLAotICAgICAgICAgICAgNyArIGNvZGVjX2RhdGEsIGRlbXV4LT50YWdfZGF0YV9zaXplIC0gY29kZWNfZGF0YSk7Ci0KLSAgICAgICAgLyogVXNlIHRoYXQgYnVmZmVyIGRhdGEgaW4gdGhlIGNhcHMgKi8KLSAgICAgICAgaWYgKGRlbXV4LT5hdWRpb19wYWQpCi0gICAgICAgICAgZ3N0X2Zsdl9kZW11eF9hdWRpb19uZWdvdGlhdGUgKGRlbXV4LCBjb2RlY190YWcsIHJhdGUsIGNoYW5uZWxzLAotICAgICAgICAgICAgICB3aWR0aCk7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGlmICghZGVtdXgtPmF1ZGlvX2NvZGVjX2RhdGEpIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChkZW11eCwgImdvdCBBQUMgYXVkaW8gcGFja2V0IGJlZm9yZSBjb2RlYyBkYXRhIik7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICAgICAgZ290byBiZWFjaDsKLSAgICAgICAgfQotICAgICAgICAvKiBBQUMgcmF3IHBhY2tldCAqLwotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJnb3QgYSByYXcgQUFDIGF1ZGlvIHBhY2tldCIpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJpbnZhbGlkIEFBQyBwYWNrZXQgdHlwZSAldSIsCi0gICAgICAgICAgICBhYWNfcGFja2V0X3R5cGUpOwotICAgIH0KLSAgfQotCi0gIC8qIElmIHdlIGRvbid0IGhhdmUgb3VyIGF1ZGlvIHBhZCBjcmVhdGVkLCB0aGVuIGNyZWF0ZSBpdC4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+YXVkaW9fcGFkKSkgewotICAgIGRlbXV4LT5hdWRpb19wYWQgPQotICAgICAgICBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlCi0gICAgICAgIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKGRlbXV4KSwgImF1ZGlvIiksICJhdWRpbyIpOwotICAgIGlmIChHX1VOTElLRUxZICghZGVtdXgtPmF1ZGlvX3BhZCkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJmYWlsZWQgY3JlYXRpbmcgYXVkaW8gcGFkIik7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotCi0gICAgLyogU2V0IGZ1bmN0aW9ucyBvbiB0aGUgcGFkICovCi0gICAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGRlbXV4LT5hdWRpb19wYWQsCi0gICAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X2RlbXV4X3F1ZXJ5KSk7Ci0gICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGRlbXV4LT5hdWRpb19wYWQsCi0gICAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X2RlbXV4X3NyY19ldmVudCkpOwotCi0gICAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoZGVtdXgtPmF1ZGlvX3BhZCk7Ci0KLSAgICAvKiBNYWtlIGl0IGFjdGl2ZSAqLwotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZGVtdXgtPmF1ZGlvX3BhZCwgVFJVRSk7Ci0KLSAgICAvKiBOZWdvdGlhdGUgY2FwcyAqLwotICAgIGlmICghZ3N0X2Zsdl9kZW11eF9hdWRpb19uZWdvdGlhdGUgKGRlbXV4LCBjb2RlY190YWcsIHJhdGUsIGNoYW5uZWxzLAotICAgICAgICAgICAgd2lkdGgpKSB7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChkZW11eC0+YXVkaW9fcGFkKTsKLSAgICAgIGRlbXV4LT5hdWRpb19wYWQgPSBOVUxMOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICBnb3RvIGJlYWNoOwotICAgIH0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoZGVtdXgtPmF1ZGlvX3BhZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNyZWF0ZWQgYXVkaW8gcGFkIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgICBjYXBzKTsKLSAgICAgIGlmIChjYXBzKQotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKiBXZSBuZWVkIHRvIHNldCBjYXBzIGJlZm9yZSBhZGRpbmcgKi8KLSAgICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZGVtdXgpLAotICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoZGVtdXgtPmF1ZGlvX3BhZCkpOwotICAgIGdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWQgKGRlbXV4LT5mbG93Y29tYmluZXIsIGRlbXV4LT5hdWRpb19wYWQpOwotCi0gICAgLyogV2Ugb25seSBlbWl0IG5vIG1vcmUgcGFkcyB3aGVuIHdlIGhhdmUgYXVkaW8gYW5kIHZpZGVvLiBJbmRlZWQgd2UgY2FuCi0gICAgICogbm90IHRydXN0IHRoZSBGTFYgaGVhZGVyIHRvIHRlbGwgdXMgaWYgdGhlcmUgd2lsbCBiZSBvbmx5IGF1ZGlvIG9yCi0gICAgICogb25seSB2aWRlbyBhbmQgd2Ugd291bGQganVzdCBicmVhayBkaXNjb3Zlcnkgb2Ygc29tZSBmaWxlcyAqLwotICAgIGlmIChkZW11eC0+YXVkaW9fcGFkICYmIGRlbXV4LT52aWRlb19wYWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZW1pdHRpbmcgbm8gbW9yZSBwYWRzIik7Ci0gICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdTVF9FTEVNRU5UIChkZW11eCkpOwotICAgICAgZGVtdXgtPm5vX21vcmVfcGFkcyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgaWYgY2FwcyBoYXZlIGNoYW5nZWQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHJhdGUgIT0gZGVtdXgtPnJhdGUgfHwgY2hhbm5lbHMgIT0gZGVtdXgtPmNoYW5uZWxzIHx8Ci0gICAgICAgICAgY29kZWNfdGFnICE9IGRlbXV4LT5hdWRpb19jb2RlY190YWcgfHwgd2lkdGggIT0gZGVtdXgtPndpZHRoKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiYXVkaW8gc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLCBjaGFuZ2luZyBjYXBzIik7Ci0KLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZkZW11eC0+YXVkaW9fY29kZWNfZGF0YSwgTlVMTCk7Ci0KLSAgICAvKiBOZWdvdGlhdGUgY2FwcyAqLwotICAgIGlmICghZ3N0X2Zsdl9kZW11eF9hdWRpb19uZWdvdGlhdGUgKGRlbXV4LCBjb2RlY190YWcsIHJhdGUsIGNoYW5uZWxzLAotICAgICAgICAgICAgd2lkdGgpKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbnl0aGluZyB0byBwdXNoICovCi0gIGlmIChkZW11eC0+dGFnX2RhdGFfc2l6ZSA8PSBjb2RlY19kYXRhKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiTm90aGluZyBsZWZ0IGluIHRoaXMgdGFnLCByZXR1cm5pbmciKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgLyogQ3JlYXRlIGJ1ZmZlciBmcm9tIHBhZCAqLwotICBvdXRidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlksCi0gICAgICA3ICsgY29kZWNfZGF0YSwgZGVtdXgtPnRhZ19kYXRhX3NpemUgLSBjb2RlY19kYXRhKTsKLQotICAvKiBkZXRlY3QgKGFuZCBkZWVtIHRvIGJlIHJlc3luY3MpICBsYXJnZSBwdHMgZ2FwcyAqLwotICBpZiAoZ3N0X2Zsdl9kZW11eF91cGRhdGVfcmVzeW5jIChkZW11eCwgcHRzLCBkZW11eC0+YXVkaW9fbmVlZF9kaXNjb250LAotICAgICAgICAgICZkZW11eC0+bGFzdF9hdWRpb19wdHMsICZkZW11eC0+YXVkaW9fdGltZV9vZmZzZXQpKSB7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DKTsKLSAgfQotCi0gIC8qIEZpbGwgYnVmZmVyIHdpdGggZGF0YSAqLwotICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHB0cyAqIEdTVF9NU0VDT05EICsgZGVtdXgtPmF1ZGlvX3RpbWVfb2Zmc2V0OwotICBHU1RfQlVGRkVSX0RUUyAob3V0YnVmKSA9IEdTVF9CVUZGRVJfUFRTIChvdXRidWYpOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZikgPSBkZW11eC0+YXVkaW9fb2Zmc2V0Kys7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAob3V0YnVmKSA9IGRlbXV4LT5hdWRpb19vZmZzZXQ7Ci0KLSAgaWYgKGRlbXV4LT5kdXJhdGlvbiA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FIHx8Ci0gICAgICBkZW11eC0+ZHVyYXRpb24gPCBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSkKLSAgICBkZW11eC0+ZHVyYXRpb24gPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKTsKLQotICAvKiBPbmx5IGFkZCBhdWRpbyBmcmFtZXMgdG8gdGhlIGluZGV4IGlmIHdlIGhhdmUgbm8gdmlkZW8sCi0gICAqIGFuZCBpZiB0aGUgaW5kZXggaXMgbm90IHlldCBjb21wbGV0ZSAqLwotICBpZiAoIWRlbXV4LT5oYXNfdmlkZW8gJiYgIWRlbXV4LT5pbmRleGVkKSB7Ci0gICAgZ3N0X2Zsdl9kZW11eF9wYXJzZV9hbmRfYWRkX2luZGV4X2VudHJ5IChkZW11eCwKLSAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZiksIGRlbXV4LT5jdXJfdGFnX29mZnNldCwgVFJVRSk7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPmF1ZGlvX25lZWRfZGlzY29udCkpIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBkZW11eC0+YXVkaW9fbmVlZF9kaXNjb250ID0gRkFMU0U7Ci0gIH0KLQotICBkZW11eC0+c2VnbWVudC5wb3NpdGlvbiA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpOwotCi0gIC8qIERvIHdlIG5lZWQgYSBuZXdzZWdtZW50IGV2ZW50ID8gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGRlbXV4LT5hdWRpb19uZWVkX3NlZ21lbnQpKSB7Ci0gICAgaWYgKCFkZW11eC0+bmV3X3NlZ19ldmVudCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJwdXNoaW5nIG5ld3NlZ21lbnQgZnJvbSAlIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChkZW11eC0+c2VnbWVudC5wb3NpdGlvbiksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVtdXgtPnNlZ21lbnQuc3RvcCkpOwotICAgICAgZGVtdXgtPnNlZ21lbnQuc3RhcnQgPSBkZW11eC0+c2VnbWVudC50aW1lID0gZGVtdXgtPnNlZ21lbnQucG9zaXRpb247Ci0gICAgICBkZW11eC0+bmV3X3NlZ19ldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmRlbXV4LT5zZWdtZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJwdXNoaW5nIHByZS1nZW5lcmF0ZWQgbmV3c2VnbWVudCBldmVudCIpOwotICAgIH0KLQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPmF1ZGlvX3BhZCwgZ3N0X2V2ZW50X3JlZiAoZGVtdXgtPm5ld19zZWdfZXZlbnQpKTsKLQotICAgIGRlbXV4LT5hdWRpb19uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwKLSAgICAgICJwdXNoaW5nICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgYnVmZmVyIGF0IHB0cyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgd2l0aCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSksIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpKTsKLQotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+YXVkaW9fc3RhcnQpKSB7Ci0gICAgZGVtdXgtPmF1ZGlvX3N0YXJ0ID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1Zik7Ci0gIH0KLSAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZGVtdXgtPmF1ZGlvX2ZpcnN0X3RzKSkgewotICAgIGRlbXV4LT5hdWRpb19maXJzdF90cyA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+bm9fbW9yZV9wYWRzCi0gICAgICAgICAgJiYgKEdTVF9DTE9DS19ESUZGIChkZW11eC0+YXVkaW9fc3RhcnQsCi0gICAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSkgPiBOT19NT1JFX1BBRFNfVEhSRVNIT0xEKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgIlNpZ25hbGxpbmcgbm8tbW9yZS1wYWRzIGJlY2F1c2Ugbm8gdmlkZW8gc3RyZWFtIHdhcyBmb3VuZCIKLSAgICAgICAgIiBhZnRlciA2IHNlY29uZHMgb2YgYXVkaW8iKTsKLSAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSk7Ci0gICAgZGVtdXgtPm5vX21vcmVfcGFkcyA9IFRSVUU7Ci0gIH0KLQotICAvKiBQdXNoIGRvd25zdHJlYW0gKi8KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChkZW11eC0+YXVkaW9fcGFkLCBvdXRidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spICYmCi0gICAgICBkZW11eC0+c2VnbWVudC5yYXRlIDwgMC4wICYmIHJldCA9PSBHU1RfRkxPV19FT1MgJiYKLSAgICAgIGRlbXV4LT5zZWdtZW50LnBvc2l0aW9uID4gZGVtdXgtPnNlZ21lbnQuc3RvcCkgewotICAgIC8qIEluIHJldmVyc2UgcGxheWJhY2sgd2UgY2FuIGdldCBhIEdTVF9GTE9XX0VPUyB3aGVuCi0gICAgICogd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQsIHNvIHdlIGp1c3QgbmVlZCB0byBqdW1wCi0gICAgICogYmFjayB0byB0aGUgcHJldmlvdXMgc2VjdGlvbi4gKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImRvd25zdHJlYW0gaGFzIHJlYWNoZWQgZW5kIG9mIHNlZ21lbnQiKTsKLSAgICBkZW11eC0+YXVkaW9fZG9uZSA9IFRSVUU7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdyAoZGVtdXgtPmZsb3djb21iaW5lciwKLSAgICAgIGRlbXV4LT5hdWRpb19wYWQsIHJldCk7Ci0KLWJlYWNoOgotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Zsdl9kZW11eF92aWRlb19uZWdvdGlhdGUgKEdzdEZsdkRlbXV4ICogZGVtdXgsIGd1aW50MzIgY29kZWNfdGFnKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEwsICpvbGRfY2FwczsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnY2hhciAqc3RyZWFtX2lkOwotCi0gIC8qIEdlbmVyYXRlIGNhcHMgZm9yIHRoYXQgcGFkICovCi0gIHN3aXRjaCAoY29kZWNfdGFnKSB7Ci0gICAgY2FzZSAyOgotICAgICAgY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZmxhc2gtdmlkZW8iLCAiZmx2dmVyc2lvbiIsIEdfVFlQRV9JTlQsCi0gICAgICAgICAgMSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtZmxhc2gtc2NyZWVuIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtdnA2LWZsYXNoIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDU6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtdnA2LWFscGhhIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDc6Ci0gICAgICBpZiAoIWRlbXV4LT52aWRlb19jb2RlY19kYXRhKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZG9uJ3QgaGF2ZSBoMjY0IGNvZGVjIGRhdGEgeWV0Iik7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICAgIGNhcHMgPQotICAgICAgICAgIGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWgyNjQiLCAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgImF2YyIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgICAvKiBUaGUgZm9sbG93aW5nIHR3byBhcmUgbm9uLXN0YW5kYXJkIGJ1dCBhcHBhcmVudGx5IHVzZWQsIHNlZSBpbiBmZm1wZWcKLSAgICAgICAqIGh0dHBzOi8vZ2l0LnZpZGVvbGFuLm9yZy8/cD1mZm1wZWcuZ2l0O2E9YmxvYjtmPWxpYmF2Zm9ybWF0L2ZsdmRlYy5jO2g9MmJmMWUwNTllMWNiZWViNzllNGFmOTU0MmRhMjNmNDU2MGUxY2Y1OTtoYj1iMThkNmM1ODAwMGJlZWQ4NzJkNmJiMWZlN2QwZmJlNzVhZTI2YWVmI2wyNTQKLSAgICAgICAqIGh0dHBzOi8vZ2l0LnZpZGVvbGFuLm9yZy8/cD1mZm1wZWcuZ2l0O2E9YmxvYjtmPWxpYmF2Zm9ybWF0L2ZsdmRlYy5jO2g9MmJmMWUwNTllMWNiZWViNzllNGFmOTU0MmRhMjNmNDU2MGUxY2Y1OTtoYj1iMThkNmM1ODAwMGJlZWQ4NzJkNmJiMWZlN2QwZmJlNzVhZTI2YWVmI2wyODIKLSAgICAgICAqLwotICAgIGNhc2UgODoKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1oMjYzIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDk6Ci0gICAgICBjYXBzID0KLSAgICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZyIsICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQsCi0gICAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgInVuc3VwcG9ydGVkIHZpZGVvIGNvZGVjIHRhZyAldSIsIGNvZGVjX3RhZyk7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoIWNhcHMpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgImZhaWxlZCBjcmVhdGluZyBjYXBzIGZvciB2aWRlbyBwYWQiKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgZGVtdXgtPnBhcl94LCBkZW11eC0+cGFyX3ksIE5VTEwpOwotCi0gIGlmIChHX0xJS0VMWSAoZGVtdXgtPncpKSB7Ci0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgIndpZHRoIiwgR19UWVBFX0lOVCwgZGVtdXgtPncsIE5VTEwpOwotICB9Ci0KLSAgaWYgKEdfTElLRUxZIChkZW11eC0+aCkpIHsKLSAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgZGVtdXgtPmgsIE5VTEwpOwotICB9Ci0KLSAgaWYgKEdfTElLRUxZIChkZW11eC0+ZnJhbWVyYXRlKSkgewotICAgIGdpbnQgbnVtID0gMCwgZGVuID0gMDsKLQotICAgIGdzdF92aWRlb19ndWVzc19mcmFtZXJhdGUgKEdTVF9TRUNPTkQgLyBkZW11eC0+ZnJhbWVyYXRlLCAmbnVtLCAmZGVuKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eC0+dmlkZW9fcGFkLAotICAgICAgICAiZnBzIHRvIGJlIHVzZWQgb24gY2FwcyAlZiAoYXMgYSBmcmFjdGlvbiA9ICVkLyVkKSIsIGRlbXV4LT5mcmFtZXJhdGUsCi0gICAgICAgIG51bSwgZGVuKTsKLQotICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgbnVtLCBkZW4sIE5VTEwpOwotICB9Ci0KLSAgaWYgKGRlbXV4LT52aWRlb19jb2RlY19kYXRhKSB7Ci0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsCi0gICAgICAgIGRlbXV4LT52aWRlb19jb2RlY19kYXRhLCBOVUxMKTsKLSAgfQotCi0gIG9sZF9jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChkZW11eC0+dmlkZW9fcGFkKTsKLSAgaWYgKCFvbGRfY2FwcykgewotICAgIHN0cmVhbV9pZCA9Ci0gICAgICAgIGdzdF9wYWRfY3JlYXRlX3N0cmVhbV9pZCAoZGVtdXgtPnZpZGVvX3BhZCwgR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLAotICAgICAgICAidmlkZW8iKTsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICAgIGdfZnJlZSAoc3RyZWFtX2lkKTsKLQotICAgIGlmIChoYXZlX2dyb3VwX2lkIChkZW11eCkpCi0gICAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkIChldmVudCwgZGVtdXgtPmdyb3VwX2lkKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT52aWRlb19wYWQsIGV2ZW50KTsKLSAgfQotCi0gIGlmICghb2xkX2NhcHMgfHwgIWdzdF9jYXBzX2lzX2VxdWFsIChvbGRfY2FwcywgY2FwcykpCi0gICAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoZGVtdXgtPnZpZGVvX3BhZCwgY2Fwcyk7Ci0gIGVsc2UKLSAgICByZXQgPSBUUlVFOwotCi0gIGlmIChvbGRfY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAob2xkX2NhcHMpOwotCi1kb25lOgotICBpZiAoR19MSUtFTFkgKHJldCkpIHsKLSAgICAvKiBTdG9yZSB0aGUgY2FwcyB3ZSBoYXZlIHNldCAqLwotICAgIGRlbXV4LT52aWRlb19jb2RlY190YWcgPSBjb2RlY190YWc7Ci0KLSAgICBpZiAoY2FwcykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgtPnZpZGVvX3BhZCwgInN1Y2Nlc3NmdWxseSBuZWdvdGlhdGVkIGNhcHMgJSIKLSAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgICAgIGdzdF9mbHZfZGVtdXhfcHVzaF90YWdzIChkZW11eCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LT52aWRlb19wYWQsICJkZWxheWVkIHNldHRpbmcgY2FwcyIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LT52aWRlb19wYWQsICJmYWlsZWQgbmVnb3RpYXRpbmcgY2FwcyAlIgotICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIH0KLQotICBpZiAoY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLWJlYWNoOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Zsdl9kZW11eF9wYXJzZV90YWdfdmlkZW8gKEdzdEZsdkRlbXV4ICogZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQzMiBkdHMgPSAwLCBjb2RlY19kYXRhID0gMSwgZHRzX2V4dCA9IDA7Ci0gIGdpbnQzMiBjdHMgPSAwOwotICBnYm9vbGVhbiBrZXlmcmFtZSA9IEZBTFNFOwotICBndWludDggZmxhZ3MgPSAwLCBjb2RlY190YWcgPSAwOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSBkZW11eC0+dGFnX3NpemUsCi0gICAgICBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAicGFyc2luZyBhIHZpZGVvIHRhZyIpOwotCi0gIGlmIEdfVU5MSUtFTFkKLSAgICAoIWRlbXV4LT52aWRlb19wYWQgJiYgZGVtdXgtPm5vX21vcmVfcGFkcykgewotI2lmbmRlZiBHU1RfRElTQUJMRV9ERUJVRwotICAgIGlmIEdfVU5MSUtFTFkKLSAgICAgICghZGVtdXgtPm5vX3ZpZGVvX3dhcm5lZCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAiU2lnbmFsZWQgbm8tbW9yZS1wYWRzIGFscmVhZHkgYnV0IGhhZCBubyB2aWRlbyBwYWQgLS0gaWdub3JpbmciKTsKLSAgICAgIGRlbXV4LT5ub192aWRlb193YXJuZWQgPSBUUlVFOwotICAgICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KLQotICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA8IDEyKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVtdXgsICJUb28gc21hbGwgdGFnIHNpemUiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0KLSAgLyogR3JhYiBpbmZvcm1hdGlvbiBhYm91dCB2aWRlbyB0YWcgKi8KLSAgZHRzID0gR1NUX1JFQURfVUlOVDI0X0JFIChkYXRhKTsKLSAgLyogcmVhZCB0aGUgZHRzIGV4dGVuc2lvbiB0byAzMiBiaXRzIGludGVnZXIgKi8KLSAgZHRzX2V4dCA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhICsgMyk7Ci0gIC8qIENvbWJpbmUgdGhlbSAqLwotICBkdHMgfD0gZHRzX2V4dCA8PCAyNDsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJkdHMgYnl0ZXMgJTAyWCAlMDJYICUwMlggJTAyWCAoJWQpIiwgZGF0YVswXSwgZGF0YVsxXSwKLSAgICAgIGRhdGFbMl0sIGRhdGFbM10sIGR0cyk7Ci0KLSAgLyogU2tpcCB0aGUgc3RyZWFtIGlkIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgZmxhZ3MgKi8KLSAgZmxhZ3MgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSArIDcpOwotCi0gIC8qIEtleWZyYW1lICovCi0gIGlmICgoZmxhZ3MgPj4gNCkgPT0gMSkgewotICAgIGtleWZyYW1lID0gVFJVRTsKLSAgfQotICAvKiBDb2RlYyB0YWcgKi8KLSAgY29kZWNfdGFnID0gZmxhZ3MgJiAweDBGOwotICBpZiAoY29kZWNfdGFnID09IDQgfHwgY29kZWNfdGFnID09IDUpIHsKLSAgICBjb2RlY19kYXRhID0gMjsKLSAgfSBlbHNlIGlmIChjb2RlY190YWcgPT0gNykgewotICAgIGNvZGVjX2RhdGEgPSA1OwotCi0gICAgY3RzID0gR1NUX1JFQURfVUlOVDI0X0JFIChkYXRhICsgOSk7Ci0gICAgY3RzID0gKGN0cyArIDB4ZmY4MDAwMDApIF4gMHhmZjgwMDAwMDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImdvdCBjdHMgJWQiLCBjdHMpOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAidmlkZW8gdGFnIHdpdGggY29kZWMgdGFnICV1LCBrZXlmcmFtZSAoJWQpICIKLSAgICAgICIoZmxhZ3MgJTAyWCkiLCBjb2RlY190YWcsIGtleWZyYW1lLCBmbGFncyk7Ci0KLSAgaWYgKGNvZGVjX3RhZyA9PSA3KSB7Ci0gICAgZ3VpbnQ4IGF2Y19wYWNrZXRfdHlwZSA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhICsgOCk7Ci0KLSAgICBzd2l0Y2ggKGF2Y19wYWNrZXRfdHlwZSkgewotICAgICAgY2FzZSAwOgotICAgICAgewotICAgICAgICAvKiBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCBkYXRhICovCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImdvdCBhbiBILjI2NCBjb2RlYyBkYXRhIHBhY2tldCIpOwotICAgICAgICBpZiAoZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChkZW11eC0+dmlkZW9fY29kZWNfZGF0YSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsCi0gICAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLCA3ICsgY29kZWNfZGF0YSwKLSAgICAgICAgICAgIGRlbXV4LT50YWdfZGF0YV9zaXplIC0gY29kZWNfZGF0YSk7OwotICAgICAgICAvKiBVc2UgdGhhdCBidWZmZXIgZGF0YSBpbiB0aGUgY2FwcyAqLwotICAgICAgICBpZiAoZGVtdXgtPnZpZGVvX3BhZCkKLSAgICAgICAgICBnc3RfZmx2X2RlbXV4X3ZpZGVvX25lZ290aWF0ZSAoZGVtdXgsIGNvZGVjX3RhZyk7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIC8qIEguMjY0IE5BTFUgcGFja2V0ICovCi0gICAgICAgIGlmICghZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEpIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChkZW11eCwgImdvdCBILjI2NCB2aWRlbyBwYWNrZXQgYmVmb3JlIGNvZGVjIGRhdGEiKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImdvdCBhIEguMjY0IE5BTFUgdmlkZW8gcGFja2V0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgImludmFsaWQgdmlkZW8gcGFja2V0IHR5cGUgJXUiLAotICAgICAgICAgICAgYXZjX3BhY2tldF90eXBlKTsKLSAgICB9Ci0gIH0KLQotICAvKiBJZiB3ZSBkb24ndCBoYXZlIG91ciB2aWRlbyBwYWQgY3JlYXRlZCwgdGhlbiBjcmVhdGUgaXQuICovCi0gIGlmIChHX1VOTElLRUxZICghZGVtdXgtPnZpZGVvX3BhZCkpIHsKLSAgICBkZW11eC0+dmlkZW9fcGFkID0KLSAgICAgICAgZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZQotICAgICAgICAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChkZW11eCksICJ2aWRlbyIpLCAidmlkZW8iKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoIWRlbXV4LT52aWRlb19wYWQpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiZmFpbGVkIGNyZWF0aW5nIHZpZGVvIHBhZCIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICBnb3RvIGJlYWNoOwotICAgIH0KLQotICAgIC8qIFNldCBmdW5jdGlvbnMgb24gdGhlIHBhZCAqLwotICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChkZW11eC0+dmlkZW9fcGFkLAotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zsdl9kZW11eF9xdWVyeSkpOwotICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChkZW11eC0+dmlkZW9fcGFkLAotICAgICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zsdl9kZW11eF9zcmNfZXZlbnQpKTsKLQotICAgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGRlbXV4LT52aWRlb19wYWQpOwotCi0gICAgLyogTWFrZSBpdCBhY3RpdmUgKi8KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGRlbXV4LT52aWRlb19wYWQsIFRSVUUpOwotCi0gICAgLyogTmVlZHMgdG8gYmUgYWN0aXZlIGJlZm9yZSBzZXR0aW5nIGNhcHMgKi8KLSAgICBpZiAoIWdzdF9mbHZfZGVtdXhfdmlkZW9fbmVnb3RpYXRlIChkZW11eCwgY29kZWNfdGFnKSkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgtPnZpZGVvX3BhZCk7Ci0gICAgICBkZW11eC0+dmlkZW9fcGFkID0gTlVMTDsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0KLSAgICAvKiBXaGVuIHdlIHZlIHNldCBwaXhlbC1hc3BlY3QtcmF0aW8gd2UgdXNlIHRoYXQgYm9vbGVhbiB0byBkZXRlY3QgYQotICAgICAqIG1ldGFkYXRhIHRhZyB0aGF0IHdvdWxkIGNvbWUgbGF0ZXIgYW5kIHRyaWdnZXIgYSBjYXBzIGNoYW5nZSAqLwotICAgIGRlbXV4LT5nb3RfcGFyID0gRkFMU0U7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoZGVtdXgtPnZpZGVvX3BhZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNyZWF0ZWQgdmlkZW8gcGFkIHdpdGggY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgICBjYXBzKTsKLSAgICAgIGlmIChjYXBzKQotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKiBXZSBuZWVkIHRvIHNldCBjYXBzIGJlZm9yZSBhZGRpbmcgKi8KLSAgICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZGVtdXgpLAotICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoZGVtdXgtPnZpZGVvX3BhZCkpOwotICAgIGdzdF9mbG93X2NvbWJpbmVyX2FkZF9wYWQgKGRlbXV4LT5mbG93Y29tYmluZXIsIGRlbXV4LT52aWRlb19wYWQpOwotCi0gICAgLyogV2Ugb25seSBlbWl0IG5vIG1vcmUgcGFkcyB3aGVuIHdlIGhhdmUgYXVkaW8gYW5kIHZpZGVvLiBJbmRlZWQgd2UgY2FuCi0gICAgICogbm90IHRydXN0IHRoZSBGTFYgaGVhZGVyIHRvIHRlbGwgdXMgaWYgdGhlcmUgd2lsbCBiZSBvbmx5IGF1ZGlvIG9yCi0gICAgICogb25seSB2aWRlbyBhbmQgd2Ugd291bGQganVzdCBicmVhayBkaXNjb3Zlcnkgb2Ygc29tZSBmaWxlcyAqLwotICAgIGlmIChkZW11eC0+YXVkaW9fcGFkICYmIGRlbXV4LT52aWRlb19wYWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZW1pdHRpbmcgbm8gbW9yZSBwYWRzIik7Ci0gICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdTVF9FTEVNRU5UIChkZW11eCkpOwotICAgICAgZGVtdXgtPm5vX21vcmVfcGFkcyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgaWYgY2FwcyBoYXZlIGNoYW5nZWQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGNvZGVjX3RhZyAhPSBkZW11eC0+dmlkZW9fY29kZWNfdGFnIHx8IGRlbXV4LT5nb3RfcGFyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAidmlkZW8gc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLCBjaGFuZ2luZyBjYXBzIik7Ci0gICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEsIE5VTEwpOwotCi0gICAgaWYgKCFnc3RfZmx2X2RlbXV4X3ZpZGVvX25lZ290aWF0ZSAoZGVtdXgsIGNvZGVjX3RhZykpIHsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0KLSAgICAvKiBXaGVuIHdlIHZlIHNldCBwaXhlbC1hc3BlY3QtcmF0aW8gd2UgdXNlIHRoYXQgYm9vbGVhbiB0byBkZXRlY3QgYQotICAgICAqIG1ldGFkYXRhIHRhZyB0aGF0IHdvdWxkIGNvbWUgbGF0ZXIgYW5kIHRyaWdnZXIgYSBjYXBzIGNoYW5nZSAqLwotICAgIGRlbXV4LT5nb3RfcGFyID0gRkFMU0U7Ci0gIH0KLQotICAvKiBDaGVjayBpZiB3ZSBoYXZlIGFueXRoaW5nIHRvIHB1c2ggKi8KLSAgaWYgKGRlbXV4LT50YWdfZGF0YV9zaXplIDw9IGNvZGVjX2RhdGEpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJOb3RoaW5nIGxlZnQgaW4gdGhpcyB0YWcsIHJldHVybmluZyIpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICAvKiBDcmVhdGUgYnVmZmVyIGZyb20gcGFkICovCi0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSwKLSAgICAgIDcgKyBjb2RlY19kYXRhLCBkZW11eC0+dGFnX2RhdGFfc2l6ZSAtIGNvZGVjX2RhdGEpOwotCi0gIC8qIGRldGVjdCAoYW5kIGRlZW0gdG8gYmUgcmVzeW5jcykgIGxhcmdlIGR0cyBnYXBzICovCi0gIGlmIChnc3RfZmx2X2RlbXV4X3VwZGF0ZV9yZXN5bmMgKGRlbXV4LCBkdHMsIGRlbXV4LT52aWRlb19uZWVkX2Rpc2NvbnQsCi0gICAgICAgICAgJmRlbXV4LT5sYXN0X3ZpZGVvX2R0cywgJmRlbXV4LT52aWRlb190aW1lX29mZnNldCkpIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgLyogRmlsbCBidWZmZXIgd2l0aCBkYXRhICovCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImR0cyAldSBwdHMgJXUgY3RzICVkIiwgZHRzLCBkdHMgKyBjdHMsIGN0cyk7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPQotICAgICAgKGR0cyArIGN0cykgKiBHU1RfTVNFQ09ORCArIGRlbXV4LT52aWRlb190aW1lX29mZnNldDsKLSAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHMgKiBHU1RfTVNFQ09ORCArIGRlbXV4LT52aWRlb190aW1lX29mZnNldDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpID0gZGVtdXgtPnZpZGVvX29mZnNldCsrOwotICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKG91dGJ1ZikgPSBkZW11eC0+dmlkZW9fb2Zmc2V0OwotCi0gIGlmIChkZW11eC0+ZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fAotICAgICAgZGVtdXgtPmR1cmF0aW9uIDwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikpCi0gICAgZGVtdXgtPmR1cmF0aW9uID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1Zik7Ci0KLSAgaWYgKCFrZXlmcmFtZSkKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLQotICBpZiAoIWRlbXV4LT5pbmRleGVkKSB7Ci0gICAgZ3N0X2Zsdl9kZW11eF9wYXJzZV9hbmRfYWRkX2luZGV4X2VudHJ5IChkZW11eCwKLSAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZiksIGRlbXV4LT5jdXJfdGFnX29mZnNldCwga2V5ZnJhbWUpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGRlbXV4LT52aWRlb19uZWVkX2Rpc2NvbnQpKSB7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgZGVtdXgtPnZpZGVvX25lZWRfZGlzY29udCA9IEZBTFNFOwotICB9Ci0KLSAgZGVtdXgtPnNlZ21lbnQucG9zaXRpb24gPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKTsKLQotICAvKiBEbyB3ZSBuZWVkIGEgbmV3c2VnbWVudCBldmVudCA/ICovCi0gIGlmIChHX1VOTElLRUxZIChkZW11eC0+dmlkZW9fbmVlZF9zZWdtZW50KSkgewotICAgIGlmICghZGVtdXgtPm5ld19zZWdfZXZlbnQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicHVzaGluZyBuZXdzZWdtZW50IGZyb20gJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVtdXgtPnNlZ21lbnQucG9zaXRpb24pLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5zZWdtZW50LnN0b3ApKTsKLSAgICAgIGRlbXV4LT5zZWdtZW50LnN0YXJ0ID0gZGVtdXgtPnNlZ21lbnQudGltZSA9IGRlbXV4LT5zZWdtZW50LnBvc2l0aW9uOwotICAgICAgZGVtdXgtPm5ld19zZWdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkZW11eC0+c2VnbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicHVzaGluZyBwcmUtZ2VuZXJhdGVkIG5ld3NlZ21lbnQgZXZlbnQiKTsKLSAgICB9Ci0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT52aWRlb19wYWQsIGdzdF9ldmVudF9yZWYgKGRlbXV4LT5uZXdfc2VnX2V2ZW50KSk7Ci0KLSAgICBkZW11eC0+dmlkZW9fbmVlZF9zZWdtZW50ID0gRkFMU0U7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsCi0gICAgICAicHVzaGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIGJ1ZmZlciBhdCBkdHMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiIHdpdGggZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIsIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBrZXlmcmFtZSAoJWQpIiwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTIChvdXRidWYpKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikpLCBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSwKLSAgICAgIGtleWZyYW1lKTsKLQotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+dmlkZW9fc3RhcnQpKSB7Ci0gICAgZGVtdXgtPnZpZGVvX3N0YXJ0ID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1Zik7Ci0gIH0KLSAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZGVtdXgtPmF1ZGlvX2ZpcnN0X3RzKSkgewotICAgIGRlbXV4LT52aWRlb19maXJzdF90cyA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+bm9fbW9yZV9wYWRzCi0gICAgICAgICAgJiYgKEdTVF9DTE9DS19ESUZGIChkZW11eC0+dmlkZW9fc3RhcnQsCi0gICAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSkgPiBOT19NT1JFX1BBRFNfVEhSRVNIT0xEKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgIlNpZ25hbGxpbmcgbm8tbW9yZS1wYWRzIGJlY2F1c2Ugbm8gYXVkaW8gc3RyZWFtIHdhcyBmb3VuZCIKLSAgICAgICAgIiBhZnRlciA2IHNlY29uZHMgb2YgdmlkZW8iKTsKLSAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSk7Ci0gICAgZGVtdXgtPm5vX21vcmVfcGFkcyA9IFRSVUU7Ci0gIH0KLQotICAvKiBQdXNoIGRvd25zdHJlYW0gKi8KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChkZW11eC0+dmlkZW9fcGFkLCBvdXRidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spICYmCi0gICAgICBkZW11eC0+c2VnbWVudC5yYXRlIDwgMC4wICYmIHJldCA9PSBHU1RfRkxPV19FT1MgJiYKLSAgICAgIGRlbXV4LT5zZWdtZW50LnBvc2l0aW9uID4gZGVtdXgtPnNlZ21lbnQuc3RvcCkgewotICAgIC8qIEluIHJldmVyc2UgcGxheWJhY2sgd2UgY2FuIGdldCBhIEdTVF9GTE9XX0VPUyB3aGVuCi0gICAgICogd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQsIHNvIHdlIGp1c3QgbmVlZCB0byBqdW1wCi0gICAgICogYmFjayB0byB0aGUgcHJldmlvdXMgc2VjdGlvbi4gKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImRvd25zdHJlYW0gaGFzIHJlYWNoZWQgZW5kIG9mIHNlZ21lbnQiKTsKLSAgICBkZW11eC0+dmlkZW9fZG9uZSA9IFRSVUU7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdyAoZGVtdXgtPmZsb3djb21iaW5lciwKLSAgICAgIGRlbXV4LT52aWRlb19wYWQsIHJldCk7Ci0KLWJlYWNoOgotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1nc3RfZmx2X2RlbXV4X3BhcnNlX3RhZ190aW1lc3RhbXAgKEdzdEZsdkRlbXV4ICogZGVtdXgsIGdib29sZWFuIGluZGV4LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgc2l6ZV90ICogdGFnX3NpemUpCi17Ci0gIGd1aW50MzIgZHRzID0gMCwgZHRzX2V4dCA9IDA7Ci0gIGd1aW50MzIgdGFnX2RhdGFfc2l6ZTsKLSAgZ3VpbnQ4IHR5cGU7Ci0gIGdib29sZWFuIGtleWZyYW1lID0gVFJVRTsKLSAgR3N0Q2xvY2tUaW1lIHJldCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPj0gMTIsCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLQotICB0eXBlID0gZGF0YVswXTsKLQotICBpZiAodHlwZSAhPSA5ICYmIHR5cGUgIT0gOCAmJiB0eXBlICE9IDE4KSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIlVuc3VwcG9ydGVkIHRhZyB0eXBlICV1IiwgZGF0YVswXSk7Ci0gICAgZ290byBleGl0OwotICB9Ci0KLSAgaWYgKHR5cGUgPT0gOSkKLSAgICBkZW11eC0+aGFzX3ZpZGVvID0gVFJVRTsKLSAgZWxzZSBpZiAodHlwZSA9PSA4KQotICAgIGRlbXV4LT5oYXNfYXVkaW8gPSBUUlVFOwotCi0gIHRhZ19kYXRhX3NpemUgPSBHU1RfUkVBRF9VSU5UMjRfQkUgKGRhdGEgKyAxKTsKLQotICBpZiAoc2l6ZSA+PSB0YWdfZGF0YV9zaXplICsgMTEgKyA0KSB7Ci0gICAgaWYgKEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSArIHRhZ19kYXRhX3NpemUgKyAxMSkgIT0gdGFnX2RhdGFfc2l6ZSArIDExKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCB0YWcgc2l6ZSIpOwotICAgICAgZ290byBleGl0OwotICAgIH0KLSAgfQotCi0gIGlmICh0YWdfc2l6ZSkKLSAgICAqdGFnX3NpemUgPSB0YWdfZGF0YV9zaXplICsgMTEgKyA0OwotCi0gIGRhdGEgKz0gNDsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJkdHMgYnl0ZXMgJTAyWCAlMDJYICUwMlggJTAyWCIsIGRhdGFbMF0sIGRhdGFbMV0sCi0gICAgICBkYXRhWzJdLCBkYXRhWzNdKTsKLQotICAvKiBHcmFiIHRpbWVzdGFtcCBvZiB0YWcgdGFnICovCi0gIGR0cyA9IEdTVF9SRUFEX1VJTlQyNF9CRSAoZGF0YSk7Ci0gIC8qIHJlYWQgdGhlIGR0cyBleHRlbnNpb24gdG8gMzIgYml0cyBpbnRlZ2VyICovCi0gIGR0c19leHQgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSArIDMpOwotICAvKiBDb21iaW5lIHRoZW0gKi8KLSAgZHRzIHw9IGR0c19leHQgPDwgMjQ7Ci0KLSAgaWYgKHR5cGUgPT0gOSkgewotICAgIGRhdGEgKz0gNzsKLQotICAgIGtleWZyYW1lID0gKChkYXRhWzBdID4+IDQpID09IDEpOwotICB9Ci0KLSAgcmV0ID0gZHRzICogR1NUX01TRUNPTkQ7Ci0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImR0czogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChyZXQpKTsKLQotICBpZiAoaW5kZXggJiYgIWRlbXV4LT5pbmRleGVkICYmICh0eXBlID09IDkgfHwgKHR5cGUgPT0gOAotICAgICAgICAgICAgICAmJiAhZGVtdXgtPmhhc192aWRlbykpKSB7Ci0gICAgZ3N0X2Zsdl9kZW11eF9wYXJzZV9hbmRfYWRkX2luZGV4X2VudHJ5IChkZW11eCwgcmV0LCBkZW11eC0+b2Zmc2V0LAotICAgICAgICBrZXlmcmFtZSk7Ci0gIH0KLQotICBpZiAoZGVtdXgtPmR1cmF0aW9uID09IEdTVF9DTE9DS19USU1FX05PTkUgfHwgZGVtdXgtPmR1cmF0aW9uIDwgcmV0KQotICAgIGRlbXV4LT5kdXJhdGlvbiA9IHJldDsKLQotZXhpdDoKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbHZfZGVtdXhfcGFyc2VfdGFnX3R5cGUgKEdzdEZsdkRlbXV4ICogZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQ4IHRhZ190eXBlID0gMDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPj0gNCwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgdGFnX3R5cGUgPSBtYXAuZGF0YVswXTsKLQotICAvKiBUYWcgc2l6ZSBpcyAxIGJ5dGUgb2YgdHlwZSArIDMgYnl0ZXMgb2Ygc2l6ZSArIDcgYnl0ZXMgKyB0YWcgZGF0YSBzaXplICsKLSAgICogNCBieXRlcyBvZiBwcmV2aW91cyB0YWcgc2l6ZSAqLwotICBkZW11eC0+dGFnX2RhdGFfc2l6ZSA9IEdTVF9SRUFEX1VJTlQyNF9CRSAobWFwLmRhdGEgKyAxKTsKLSAgZGVtdXgtPnRhZ19zaXplID0gZGVtdXgtPnRhZ19kYXRhX3NpemUgKyAxMTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJ0YWcgZGF0YSBzaXplIGlzICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBkZW11eC0+dGFnX2RhdGFfc2l6ZSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICBzd2l0Y2ggKHRhZ190eXBlKSB7Ci0gICAgY2FzZSA5OgotICAgICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19WSURFTzsKLSAgICAgIGRlbXV4LT5oYXNfdmlkZW8gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19BVURJTzsKLSAgICAgIGRlbXV4LT5oYXNfYXVkaW8gPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxODoKLSAgICAgIGRlbXV4LT5zdGF0ZSA9IEZMVl9TVEFURV9UQUdfU0NSSVBUOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJ1bnN1cHBvcnRlZCB0YWcgdHlwZSAldSIsIHRhZ190eXBlKTsKLSAgICAgIGRlbXV4LT5zdGF0ZSA9IEZMVl9TVEFURV9TS0lQOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbHZfZGVtdXhfcGFyc2VfaGVhZGVyIChHc3RGbHZEZW11eCAqIGRlbXV4LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpID49IDksIEdTVF9GTE9XX0VSUk9SKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIC8qIENoZWNrIGZvciB0aGUgRkxWIHRhZyAqLwotICBpZiAobWFwLmRhdGFbMF0gPT0gJ0YnICYmIG1hcC5kYXRhWzFdID09ICdMJyAmJiBtYXAuZGF0YVsyXSA9PSAnVicpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkZMViBoZWFkZXIgZGV0ZWN0ZWQiKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPnN0cmljdCkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJpbnZhbGlkIGhlYWRlciB0YWcgZGV0ZWN0ZWQiKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG1hcC5kYXRhWzNdID09ICcxJykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiRkxWIHZlcnNpb24gMSBkZXRlY3RlZCIpOwotICB9IGVsc2UgewotICAgIGlmIChHX1VOTElLRUxZIChkZW11eC0+c3RyaWN0KSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgImludmFsaWQgaGVhZGVyIHZlcnNpb24gZGV0ZWN0ZWQiKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotCi0gIH0KLQotICAvKiBOb3cgbG9vayBhdCBhdWRpby92aWRlbyBmbGFncyAqLwotICB7Ci0gICAgZ3VpbnQ4IGZsYWdzID0gbWFwLmRhdGFbNF07Ci0KLSAgICBkZW11eC0+aGFzX3ZpZGVvID0gZGVtdXgtPmhhc19hdWRpbyA9IEZBTFNFOwotCi0gICAgaWYgKGZsYWdzICYgMSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJ0aGVyZSBpcyBhIHZpZGVvIHN0cmVhbSIpOwotICAgICAgZGVtdXgtPmhhc192aWRlbyA9IFRSVUU7Ci0gICAgfQotICAgIGlmIChmbGFncyAmIDQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAidGhlcmUgaXMgYW4gYXVkaW8gc3RyZWFtIik7Ci0gICAgICBkZW11eC0+aGFzX2F1ZGlvID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICAvKiBkbyBhIG9uZS10aW1lIHNlZWthYmlsaXR5IGNoZWNrICovCi0gIGdzdF9mbHZfZGVtdXhfY2hlY2tfc2Vla2FiaWxpdHkgKGRlbXV4KTsKLQotICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN0ICovCi0gIGRlbXV4LT5uZWVkX2hlYWRlciA9IEZBTFNFOwotCi1iZWFjaDoKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9mbHVzaCAoR3N0Rmx2RGVtdXggKiBkZW11eCwgZ2Jvb2xlYW4gZGlzY29udCkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJmbHVzaGluZyBxdWV1ZWQgZGF0YSBpbiB0aGUgRkxWIGRlbXV4ZXIiKTsKLQotICBnc3RfYWRhcHRlcl9jbGVhciAoZGVtdXgtPmFkYXB0ZXIpOwotCi0gIGRlbXV4LT5hdWRpb19uZWVkX2Rpc2NvbnQgPSBUUlVFOwotICBkZW11eC0+dmlkZW9fbmVlZF9kaXNjb250ID0gVFJVRTsKLQotICBkZW11eC0+Zmx1c2hpbmcgPSBGQUxTRTsKLQotICAvKiBPbmx5IGluIHB1c2ggbW9kZSBhbmQgaWYgd2UncmUgbm90IGR1cmluZyBhIHNlZWsgKi8KLSAgaWYgKCFkZW11eC0+cmFuZG9tX2FjY2VzcyAmJiBkZW11eC0+c3RhdGUgIT0gRkxWX1NUQVRFX1NFRUspIHsKLSAgICAvKiBBZnRlciBhIGZsdXNoIHdlIGV4cGVjdCBhIHRhZ190eXBlICovCi0gICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19UWVBFOwotICAgIC8qIFdlIHJlc2V0IHRoZSBvZmZzZXQgYW5kIHdpbGwgZ2V0IG9uZSBmcm9tIGZpcnN0IHB1c2ggKi8KLSAgICBkZW11eC0+b2Zmc2V0ID0gMDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9jbGVhbnVwIChHc3RGbHZEZW11eCAqIGRlbXV4KQotewotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNsZWFuaW5nIHVwIEZMViBkZW11eGVyIik7Ci0KLSAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX0hFQURFUjsKLQotICBkZW11eC0+aGF2ZV9ncm91cF9pZCA9IEZBTFNFOwotICBkZW11eC0+Z3JvdXBfaWQgPSBHX01BWFVJTlQ7Ci0KLSAgZGVtdXgtPmZsdXNoaW5nID0gRkFMU0U7Ci0gIGRlbXV4LT5uZWVkX2hlYWRlciA9IFRSVUU7Ci0gIGRlbXV4LT5hdWRpb19uZWVkX3NlZ21lbnQgPSBUUlVFOwotICBkZW11eC0+dmlkZW9fbmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgZGVtdXgtPmF1ZGlvX25lZWRfZGlzY29udCA9IFRSVUU7Ci0gIGRlbXV4LT52aWRlb19uZWVkX2Rpc2NvbnQgPSBUUlVFOwotCi0gIGRlbXV4LT5oYXNfYXVkaW8gPSBGQUxTRTsKLSAgZGVtdXgtPmhhc192aWRlbyA9IEZBTFNFOwotICBkZW11eC0+Z290X3BhciA9IEZBTFNFOwotCi0gIGRlbXV4LT5pbmRleGVkID0gRkFMU0U7Ci0gIGRlbXV4LT51cHN0cmVhbV9zZWVrYWJsZSA9IEZBTFNFOwotICBkZW11eC0+ZmlsZV9zaXplID0gMDsKLQotICBkZW11eC0+aW5kZXhfbWF4X3BvcyA9IDA7Ci0gIGRlbXV4LT5pbmRleF9tYXhfdGltZSA9IDA7Ci0KLSAgZGVtdXgtPmF1ZGlvX3N0YXJ0ID0gZGVtdXgtPnZpZGVvX3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZGVtdXgtPmxhc3RfYXVkaW9fcHRzID0gZGVtdXgtPmxhc3RfdmlkZW9fZHRzID0gMDsKLSAgZGVtdXgtPmF1ZGlvX3RpbWVfb2Zmc2V0ID0gZGVtdXgtPnZpZGVvX3RpbWVfb2Zmc2V0ID0gMDsKLQotICBkZW11eC0+bm9fbW9yZV9wYWRzID0gRkFMU0U7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfREVCVUcKLSAgZGVtdXgtPm5vX2F1ZGlvX3dhcm5lZCA9IEZBTFNFOwotICBkZW11eC0+bm9fdmlkZW9fd2FybmVkID0gRkFMU0U7Ci0jZW5kaWYKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmZGVtdXgtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgZGVtdXgtPncgPSBkZW11eC0+aCA9IDA7Ci0gIGRlbXV4LT5mcmFtZXJhdGUgPSAwLjA7Ci0gIGRlbXV4LT5wYXJfeCA9IGRlbXV4LT5wYXJfeSA9IDE7Ci0gIGRlbXV4LT52aWRlb19vZmZzZXQgPSAwOwotICBkZW11eC0+YXVkaW9fb2Zmc2V0ID0gMDsKLSAgZGVtdXgtPm9mZnNldCA9IGRlbXV4LT5jdXJfdGFnX29mZnNldCA9IDA7Ci0gIGRlbXV4LT50YWdfc2l6ZSA9IGRlbXV4LT50YWdfZGF0YV9zaXplID0gMDsKLSAgZGVtdXgtPmR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBpZiAoZGVtdXgtPm5ld19zZWdfZXZlbnQpIHsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGRlbXV4LT5uZXdfc2VnX2V2ZW50KTsKLSAgICBkZW11eC0+bmV3X3NlZ19ldmVudCA9IE5VTEw7Ci0gIH0KLQotICBnc3RfYWRhcHRlcl9jbGVhciAoZGVtdXgtPmFkYXB0ZXIpOwotCi0gIGlmIChkZW11eC0+YXVkaW9fY29kZWNfZGF0YSkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGRlbXV4LT5hdWRpb19jb2RlY19kYXRhKTsKLSAgICBkZW11eC0+YXVkaW9fY29kZWNfZGF0YSA9IE5VTEw7Ci0gIH0KLQotICBpZiAoZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChkZW11eC0+dmlkZW9fY29kZWNfZGF0YSk7Ci0gICAgZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGRlbXV4LT5hdWRpb19wYWQpIHsKLSAgICBnc3RfZmxvd19jb21iaW5lcl9yZW1vdmVfcGFkIChkZW11eC0+Zmxvd2NvbWJpbmVyLCBkZW11eC0+YXVkaW9fcGFkKTsKLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVCAoZGVtdXgpLCBkZW11eC0+YXVkaW9fcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChkZW11eC0+YXVkaW9fcGFkKTsKLSAgICBkZW11eC0+YXVkaW9fcGFkID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+dmlkZW9fcGFkKSB7Ci0gICAgZ3N0X2Zsb3dfY29tYmluZXJfcmVtb3ZlX3BhZCAoZGVtdXgtPmZsb3djb21iaW5lciwgZGVtdXgtPnZpZGVvX3BhZCk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlQgKGRlbXV4KSwgZGVtdXgtPnZpZGVvX3BhZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgtPnZpZGVvX3BhZCk7Ci0gICAgZGVtdXgtPnZpZGVvX3BhZCA9IE5VTEw7Ci0gIH0KLQotICBpZiAoZGVtdXgtPnRpbWVzKSB7Ci0gICAgZ19hcnJheV9mcmVlIChkZW11eC0+dGltZXMsIFRSVUUpOwotICAgIGRlbXV4LT50aW1lcyA9IE5VTEw7Ci0gIH0KLQotICBpZiAoZGVtdXgtPmZpbGVwb3NpdGlvbnMpIHsKLSAgICBnX2FycmF5X2ZyZWUgKGRlbXV4LT5maWxlcG9zaXRpb25zLCBUUlVFKTsKLSAgICBkZW11eC0+ZmlsZXBvc2l0aW9ucyA9IE5VTEw7Ci0gIH0KLQotICBnc3RfZmx2X2RlbXV4X2NsZWFyX3RhZ3MgKGRlbXV4KTsKLX0KLQotLyoKLSAqIENyZWF0ZSBhbmQgcHVzaCBhIGZsdXNoaW5nIHNlZWsgZXZlbnQgdXBzdHJlYW0KLSAqLwotc3RhdGljIGdib29sZWFuCi1mbHZfZGVtdXhfc2Vla190b19vZmZzZXQgKEdzdEZsdkRlbXV4ICogZGVtdXgsIGd1aW50NjQgb2Zmc2V0KQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlcyA9IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgZXZlbnQgPQotICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwgR1NUX1NFRUtfVFlQRV9TRVQsIG9mZnNldCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPnNpbmtwYWQsIGV2ZW50KTsKLQotICBpZiAocmVzKQotICAgIGRlbXV4LT5vZmZzZXQgPSBvZmZzZXQ7Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X2RlbXV4X2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RGbHZEZW11eCAqZGVtdXggPSBOVUxMOwotCi0gIGRlbXV4ID0gR1NUX0ZMVl9ERU1VWCAocGFyZW50KTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsCi0gICAgICAicmVjZWl2ZWQgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMgYXQgb2Zmc2V0ICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLAotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikpOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9PSAwKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiYmVnaW5uaW5nIG9mIGZpbGUsIGV4cGVjdCBoZWFkZXIiKTsKLSAgICBkZW11eC0+c3RhdGUgPSBGTFZfU1RBVEVfSEVBREVSOwotICAgIGRlbXV4LT5vZmZzZXQgPSAwOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGRlbXV4LT5vZmZzZXQgPT0gMCAmJiBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSAhPSAwKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAib2Zmc2V0IHdhcyB6ZXJvLCBzeW5jaHJvbml6aW5nIHdpdGggYnVmZmVyJ3MiKTsKLSAgICBkZW11eC0+b2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcik7Ci0gIH0KLQotICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkRpc2NvbnRpbnVpdHkiKTsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAoZGVtdXgtPmFkYXB0ZXIpOwotICB9Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoZGVtdXgtPmFkYXB0ZXIsIGJ1ZmZlcik7Ci0KLSAgaWYgKGRlbXV4LT5zZWVraW5nKSB7Ci0gICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1NFRUs7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgZGVtdXgtPnNlZWtpbmcgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICB9Ci0KLXBhcnNlOgotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZ290IGZsb3cgcmV0dXJuICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPmZsdXNoaW5nKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAid2UgYXJlIG5vdyBmbHVzaGluZywgZXhpdGluZyBwYXJzZXIgbG9vcCIpOwotICAgIHJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICBzd2l0Y2ggKGRlbXV4LT5zdGF0ZSkgewotICAgIGNhc2UgRkxWX1NUQVRFX0hFQURFUjoKLSAgICB7Ci0gICAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcikgPj0gRkxWX0hFQURFUl9TSVpFKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkZW11eC0+YWRhcHRlciwgRkxWX0hFQURFUl9TSVpFKTsKLQotICAgICAgICByZXQgPSBnc3RfZmx2X2RlbXV4X3BhcnNlX2hlYWRlciAoZGVtdXgsIGJ1ZmZlcik7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICAgICAgZGVtdXgtPm9mZnNldCArPSBGTFZfSEVBREVSX1NJWkU7Ci0KLSAgICAgICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19UWVBFOwotICAgICAgICBnb3RvIHBhcnNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBGTFZfU1RBVEVfVEFHX1RZUEU6Ci0gICAgewotICAgICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmFkYXB0ZXIpID49IEZMVl9UQUdfVFlQRV9TSVpFKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgIC8qIFJlbWVtYmVyIHRoZSB0YWcgb2Zmc2V0IGluIGJ5dGVzICovCi0gICAgICAgIGRlbXV4LT5jdXJfdGFnX29mZnNldCA9IGRlbXV4LT5vZmZzZXQ7Ci0KLSAgICAgICAgYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGRlbXV4LT5hZGFwdGVyLCBGTFZfVEFHX1RZUEVfU0laRSk7Ci0KLSAgICAgICAgcmV0ID0gZ3N0X2Zsdl9kZW11eF9wYXJzZV90YWdfdHlwZSAoZGVtdXgsIGJ1ZmZlcik7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICAgICAgZGVtdXgtPm9mZnNldCArPSBGTFZfVEFHX1RZUEVfU0laRTsKLQotICAgICAgICAvKiBsYXN0IHRhZyBpcyBub3QgYW4gaW5kZXggPT4gbm8gaW5kZXgvZG9uJ3Qga25vdyB3aGVyZSB0aGUgaW5kZXggaXMKLSAgICAgICAgICogc2VlayBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgKi8KLSAgICAgICAgaWYgKGRlbXV4LT5zZWVrX2V2ZW50ICYmIGRlbXV4LT5zdGF0ZSAhPSBGTFZfU1RBVEVfVEFHX1NDUklQVCkKLSAgICAgICAgICBnb3RvIG5vX2luZGV4OwotCi0gICAgICAgIGdvdG8gcGFyc2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgfQotICAgIH0KLSAgICBjYXNlIEZMVl9TVEFURV9UQUdfVklERU86Ci0gICAgewotICAgICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmFkYXB0ZXIpID49IGRlbXV4LT50YWdfc2l6ZSkgewotICAgICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICBidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoZGVtdXgtPmFkYXB0ZXIsIGRlbXV4LT50YWdfc2l6ZSk7Ci0KLSAgICAgICAgcmV0ID0gZ3N0X2Zsdl9kZW11eF9wYXJzZV90YWdfdmlkZW8gKGRlbXV4LCBidWZmZXIpOwotCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICAgIGRlbXV4LT5vZmZzZXQgKz0gZGVtdXgtPnRhZ19zaXplOwotCi0gICAgICAgIGRlbXV4LT5zdGF0ZSA9IEZMVl9TVEFURV9UQUdfVFlQRTsKLSAgICAgICAgZ290byBwYXJzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhc2UgRkxWX1NUQVRFX1RBR19BVURJTzoKLSAgICB7Ci0gICAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcikgPj0gZGVtdXgtPnRhZ19zaXplKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkZW11eC0+YWRhcHRlciwgZGVtdXgtPnRhZ19zaXplKTsKLQotICAgICAgICByZXQgPSBnc3RfZmx2X2RlbXV4X3BhcnNlX3RhZ19hdWRpbyAoZGVtdXgsIGJ1ZmZlcik7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICAgICAgZGVtdXgtPm9mZnNldCArPSBkZW11eC0+dGFnX3NpemU7Ci0KLSAgICAgICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19UWVBFOwotICAgICAgICBnb3RvIHBhcnNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSBGTFZfU1RBVEVfVEFHX1NDUklQVDoKLSAgICB7Ci0gICAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcikgPj0gZGVtdXgtPnRhZ19zaXplKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkZW11eC0+YWRhcHRlciwgZGVtdXgtPnRhZ19zaXplKTsKLQotICAgICAgICByZXQgPSBnc3RfZmx2X2RlbXV4X3BhcnNlX3RhZ19zY3JpcHQgKGRlbXV4LCBidWZmZXIpOwotCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICAgIGRlbXV4LT5vZmZzZXQgKz0gZGVtdXgtPnRhZ19zaXplOwotCi0gICAgICAgIGRlbXV4LT5zdGF0ZSA9IEZMVl9TVEFURV9UQUdfVFlQRTsKLQotICAgICAgICAvKiBpZiB0aGVyZSdzIGEgc2VlayBldmVudCB3ZSdyZSBoZXJlIGZvciB0aGUgaW5kZXggc28gaWYgd2UgZG9uJ3QgaGF2ZSBpdAotICAgICAgICAgKiB3ZSBzZWVrIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqLwotICAgICAgICBpZiAoZGVtdXgtPnNlZWtfZXZlbnQpIHsKLSAgICAgICAgICBpZiAoZGVtdXgtPmluZGV4ZWQpCi0gICAgICAgICAgICBkZW11eC0+c3RhdGUgPSBGTFZfU1RBVEVfU0VFSzsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBnb3RvIG5vX2luZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgZ290byBwYXJzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgfQotICAgIGNhc2UgRkxWX1NUQVRFX1NFRUs6Ci0gICAgewotICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLQotICAgICAgaWYgKCFkZW11eC0+aW5kZXhlZCkgewotICAgICAgICBpZiAoZGVtdXgtPm9mZnNldCA9PSBkZW11eC0+ZmlsZV9zaXplIC0gc2l6ZW9mIChndWludDMyKSkgewotICAgICAgICAgIGd1aW50NjQgc2Vla19vZmZzZXQ7Ci0gICAgICAgICAgZ3VpbnQ4ICpkYXRhOwotCi0gICAgICAgICAgZGF0YSA9IGdzdF9hZGFwdGVyX3Rha2UgKGRlbXV4LT5hZGFwdGVyLCA0KTsKLSAgICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICBnb3RvIG5vX2luZGV4OwotCi0gICAgICAgICAgc2Vla19vZmZzZXQgPSBkZW11eC0+ZmlsZV9zaXplIC0gc2l6ZW9mIChndWludDMyKSAtCi0gICAgICAgICAgICAgIEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gICAgICAgICAgZ19mcmVlIChkYXRhKTsKLQotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJTZWVraW5nIHRvIGJlZ2lubmluZyBvZiBsYXN0IHRhZyBhdCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgICBzZWVrX29mZnNldCk7Ci0gICAgICAgICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19UWVBFOwotICAgICAgICAgIGZsdl9kZW11eF9zZWVrX3RvX29mZnNldCAoZGVtdXgsIHNlZWtfb2Zmc2V0KTsKLSAgICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICBnb3RvIG5vX2luZGV4OwotICAgICAgfQotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgIGV2ZW50ID0gZGVtdXgtPnNlZWtfZXZlbnQ7Ci0gICAgICBkZW11eC0+c2Vla19ldmVudCA9IE5VTEw7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gICAgICAvKiBjYWxjdWxhdGUgYW5kIHBlcmZvcm0gc2VlayAqLwotICAgICAgaWYgKCFmbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoZGVtdXgsIGV2ZW50KSkKLSAgICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBkZW11eC0+c3RhdGUgPSBGTFZfU1RBVEVfVEFHX1RZUEU7Ci0gICAgICBnb3RvIGJlYWNoOwotICAgIH0KLSAgICBjYXNlIEZMVl9TVEFURV9TS0lQOgotICAgICAgLyogU2tpcCB1bmtub3duIHRhZ3MgKHNldCBpbiBfcGFyc2VfdGFnX3R5cGUoKSkgKi8KLSAgICAgIGlmIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGRlbXV4LT5hZGFwdGVyKSA+PSBkZW11eC0+dGFnX3NpemUpIHsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGRlbXV4LT5hZGFwdGVyLCBkZW11eC0+dGFnX3NpemUpOwotICAgICAgICBkZW11eC0+b2Zmc2V0ICs9IGRlbXV4LT50YWdfc2l6ZTsKLSAgICAgICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19UWVBFOwotICAgICAgICBnb3RvIHBhcnNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJ1bmV4cGVjdGVkIGRlbXV4ZXIgc3RhdGUiKTsKLSAgfQotCi1iZWFjaDoKLSAgcmV0dXJuIHJldDsKLQotLyogRVJST1JTICovCi1ub19pbmRleDoKLSAgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICAgIGRlbXV4LT5zZWVraW5nID0gRkFMU0U7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChkZW11eC0+c2Vla19ldmVudCk7Ci0gICAgZGVtdXgtPnNlZWtfZXZlbnQgPSBOVUxMOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgImZhaWxlZCB0byBmaW5kIGFuIGluZGV4LCBzZWVraW5nIGJhY2sgdG8gYmVnaW5uaW5nIik7Ci0gICAgZmx2X2RlbXV4X3NlZWtfdG9fb2Zmc2V0IChkZW11eCwgMCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1zZWVrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoInNlZWsgZmFpbGVkIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X2RlbXV4X3B1bGxfcmFuZ2UgKEdzdEZsdkRlbXV4ICogZGVtdXgsIEdzdFBhZCAqIHBhZCwgZ3VpbnQ2NCBvZmZzZXQsCi0gICAgZ3VpbnQgc2l6ZSwgR3N0QnVmZmVyICoqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChwYWQsIG9mZnNldCwgc2l6ZSwgYnVmZmVyKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAiZmFpbGVkIHdoZW4gcHVsbGluZyAlZCBieXRlcyBmcm9tIG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICI6ICVzIiwKLSAgICAgICAgc2l6ZSwgb2Zmc2V0LCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgKmJ1ZmZlciA9IE5VTEw7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZICgqYnVmZmVyICYmIGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWZmZXIpICE9IHNpemUpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgInBhcnRpYWwgcHVsbCBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiB3aGVuIGV4cGVjdGluZyAlZCBmcm9tIG9mZnNldCAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplICgqYnVmZmVyKSwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBnc3RfYnVmZmVyX3VucmVmICgqYnVmZmVyKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgKmJ1ZmZlciA9IE5VTEw7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X2RlbXV4X3B1bGxfdGFnIChHc3RQYWQgKiBwYWQsIEdzdEZsdkRlbXV4ICogZGVtdXgpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICAvKiBTdG9yZSB0YWcgb2Zmc2V0ICovCi0gIGRlbXV4LT5jdXJfdGFnX29mZnNldCA9IGRlbXV4LT5vZmZzZXQ7Ci0KLSAgLyogR2V0IHRoZSBmaXJzdCA0IGJ5dGVzIHRvIGlkZW50aWZ5IHRhZyB0eXBlIGFuZCBzaXplICovCi0gIGlmIChHX1VOTElLRUxZICgocmV0ID0gZ3N0X2Zsdl9kZW11eF9wdWxsX3JhbmdlIChkZW11eCwgcGFkLCBkZW11eC0+b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgRkxWX1RBR19UWVBFX1NJWkUsICZidWZmZXIpKSAhPSBHU1RfRkxPV19PSykpCi0gICAgZ290byBiZWFjaDsKLQotICAvKiBJZGVudGlmeSB0YWcgdHlwZSAqLwotICByZXQgPSBnc3RfZmx2X2RlbXV4X3BhcnNlX3RhZ190eXBlIChkZW11eCwgYnVmZmVyKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gYmVhY2g7Ci0KLSAgLyogSnVtcCBvdmVyIHRhZyB0eXBlICsgc2l6ZSAqLwotICBkZW11eC0+b2Zmc2V0ICs9IEZMVl9UQUdfVFlQRV9TSVpFOwotCi0gIC8qIFB1bGwgdGhlIHdob2xlIHRhZyAqLwotICBidWZmZXIgPSBOVUxMOwotICBpZiAoR19VTkxJS0VMWSAoKHJldCA9IGdzdF9mbHZfZGVtdXhfcHVsbF9yYW5nZSAoZGVtdXgsIHBhZCwgZGVtdXgtPm9mZnNldCwKLSAgICAgICAgICAgICAgICAgIGRlbXV4LT50YWdfc2l6ZSwgJmJ1ZmZlcikpICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIGJlYWNoOwotCi0gIHN3aXRjaCAoZGVtdXgtPnN0YXRlKSB7Ci0gICAgY2FzZSBGTFZfU1RBVEVfVEFHX1ZJREVPOgotICAgICAgcmV0ID0gZ3N0X2Zsdl9kZW11eF9wYXJzZV90YWdfdmlkZW8gKGRlbXV4LCBidWZmZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGTFZfU1RBVEVfVEFHX0FVRElPOgotICAgICAgcmV0ID0gZ3N0X2Zsdl9kZW11eF9wYXJzZV90YWdfYXVkaW8gKGRlbXV4LCBidWZmZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGTFZfU1RBVEVfVEFHX1NDUklQVDoKLSAgICAgIHJldCA9IGdzdF9mbHZfZGVtdXhfcGFyc2VfdGFnX3NjcmlwdCAoZGVtdXgsIGJ1ZmZlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgInVuZXhwZWN0ZWQgc3RhdGUgJWQiLCBkZW11eC0+c3RhdGUpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAvKiBKdW1wIG92ZXIgdGhhdCBwYXJ0IHdlJ3ZlIGp1c3QgcGFyc2VkICovCi0gIGRlbXV4LT5vZmZzZXQgKz0gZGVtdXgtPnRhZ19zaXplOwotCi0gIC8qIE1ha2Ugc3VyZSB3ZSByZWluaXRpYWxpemUgdGhlIHRhZyBzaXplICovCi0gIGRlbXV4LT50YWdfc2l6ZSA9IDA7Ci0KLSAgLyogUmVhZHkgZm9yIHRoZSBuZXh0IHRhZyAqLwotICBkZW11eC0+c3RhdGUgPSBGTFZfU1RBVEVfVEFHX1RZUEU7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJwYXJzaW5nIHRoaXMgdGFnIHJldHVybmVkIG5vdC1saW5rZWQgYW5kICIKLSAgICAgICAgIm5laXRoZXIgdmlkZW8gbm9yIGF1ZGlvIGFyZSBsaW5rZWQiKTsKLSAgfQotCi1iZWFjaDoKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbHZfZGVtdXhfcHVsbF9oZWFkZXIgKEdzdFBhZCAqIHBhZCwgR3N0Rmx2RGVtdXggKiBkZW11eCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIEdldCB0aGUgZmlyc3QgOSBieXRlcyAqLwotICBpZiAoR19VTkxJS0VMWSAoKHJldCA9IGdzdF9mbHZfZGVtdXhfcHVsbF9yYW5nZSAoZGVtdXgsIHBhZCwgZGVtdXgtPm9mZnNldCwKLSAgICAgICAgICAgICAgICAgIEZMVl9IRUFERVJfU0laRSwgJmJ1ZmZlcikpICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIGJlYWNoOwotCi0gIHJldCA9IGdzdF9mbHZfZGVtdXhfcGFyc2VfaGVhZGVyIChkZW11eCwgYnVmZmVyKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIC8qIEp1bXAgb3ZlciB0aGUgaGVhZGVyIG5vdyAqLwotICBkZW11eC0+b2Zmc2V0ICs9IEZMVl9IRUFERVJfU0laRTsKLSAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX1RBR19UWVBFOwotCi1iZWFjaDoKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfZGVtdXhfbW92ZV90b19vZmZzZXQgKEdzdEZsdkRlbXV4ICogZGVtdXgsIGdpbnQ2NCBvZmZzZXQsCi0gICAgZ2Jvb2xlYW4gcmVzZXQpCi17Ci0gIGRlbXV4LT5vZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgLyogVGVsbCBhbGwgdGhlIHN0cmVhbSB3ZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBwb3NpdGlvbiAoZGlzY29udCkgKi8KLSAgZGVtdXgtPmF1ZGlvX25lZWRfZGlzY29udCA9IFRSVUU7Ci0gIGRlbXV4LT52aWRlb19uZWVkX2Rpc2NvbnQgPSBUUlVFOwotCi0gIC8qIG5leHQgc2VjdGlvbiBzZXR1cCAqLwotICBkZW11eC0+ZnJvbV9vZmZzZXQgPSAtMTsKLSAgZGVtdXgtPmF1ZGlvX2RvbmUgPSBkZW11eC0+dmlkZW9fZG9uZSA9IEZBTFNFOwotICBkZW11eC0+YXVkaW9fZmlyc3RfdHMgPSBkZW11eC0+dmlkZW9fZmlyc3RfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGlmIChyZXNldCkgewotICAgIGRlbXV4LT5mcm9tX29mZnNldCA9IC0xOwotICAgIGRlbXV4LT50b19vZmZzZXQgPSBHX01BWElOVDY0OwotICB9Ci0KLSAgLyogSWYgd2Ugc2Vla2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgcGFyc2UgdGhlIGhlYWRlciBhZ2FpbiAqLwotICBpZiAoR19VTkxJS0VMWSAoIWRlbXV4LT5vZmZzZXQpKSB7Ci0gICAgZGVtdXgtPnN0YXRlID0gRkxWX1NUQVRFX0hFQURFUjsKLSAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogb3IgcGFyc2UgYSB0YWcgKi8KLSAgICBkZW11eC0+c3RhdGUgPSBGTFZfU1RBVEVfVEFHX1RZUEU7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbHZfZGVtdXhfc2Vla190b19wcmV2X2tleWZyYW1lIChHc3RGbHZEZW11eCAqIGRlbXV4KQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgR3N0SW5kZXggKmluZGV4OwotICBHc3RJbmRleEVudHJ5ICplbnRyeSA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAidGVybWluYXRlZCBzZWN0aW9uIHN0YXJ0ZWQgYXQgb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgIGRlbXV4LT5mcm9tX29mZnNldCk7Ci0KLSAgLyogd2UgYXJlIGRvbmUgaWYgd2UgZ290IGFsbCBhdWRpbyBhbmQgdmlkZW8gKi8KLSAgaWYgKCghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGRlbXV4LT5hdWRpb19maXJzdF90cykgfHwKLSAgICAgICAgICBkZW11eC0+YXVkaW9fZmlyc3RfdHMgPCBkZW11eC0+c2VnbWVudC5zdGFydCkgJiYKLSAgICAgICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGRlbXV4LT52aWRlb19maXJzdF90cykgfHwKLSAgICAgICAgICBkZW11eC0+dmlkZW9fZmlyc3RfdHMgPCBkZW11eC0+c2VnbWVudC5zdGFydCkpCi0gICAgZ290byBkb25lOwotCi0gIGlmIChkZW11eC0+ZnJvbV9vZmZzZXQgPD0gMCkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJsb2NhdGluZyBwcmV2aW91cyBwb3NpdGlvbiIpOwotCi0gIGluZGV4ID0gZ3N0X2Zsdl9kZW11eF9nZXRfaW5kZXggKEdTVF9FTEVNRU5UIChkZW11eCkpOwotCi0gIC8qIGxvY2F0ZSBpbmRleCBlbnRyeSBiZWZvcmUgcHJldmlvdXMgc3RhcnQgcG9zaXRpb24gKi8KLSAgaWYgKGluZGV4KSB7Ci0gICAgZW50cnkgPSBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5IChpbmRleCwgZGVtdXgtPmluZGV4X2lkLAotICAgICAgICBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRSwgR1NUX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQsCi0gICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGRlbXV4LT5mcm9tX29mZnNldCAtIDEpOwotCi0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBnaW50NjQgYnl0ZXMgPSAwLCB0aW1lID0gMDsKLQotICAgICAgZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcCAoZW50cnksIEdTVF9GT1JNQVRfQllURVMsICZieXRlcyk7Ci0gICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9USU1FLCAmdGltZSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZm91bmQgaW5kZXggZW50cnkgZm9yICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICIgYXQgJSIgR1NUX1RJTUVfRk9STUFUICIsIHNlZWtpbmcgdG8gJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgIGRlbXV4LT5vZmZzZXQgLSAxLCBHU1RfVElNRV9BUkdTICh0aW1lKSwgYnl0ZXMpOwotCi0gICAgICAvKiBzZXR1cCBmb3IgbmV4dCBzZWN0aW9uICovCi0gICAgICBkZW11eC0+dG9fb2Zmc2V0ID0gZGVtdXgtPmZyb21fb2Zmc2V0OwotICAgICAgZ3N0X2Zsdl9kZW11eF9tb3ZlX3RvX29mZnNldCAoZGVtdXgsIGJ5dGVzLCBGQUxTRSk7Ci0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICB9Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChpbmRleCk7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9mbHZfZGVtdXhfY3JlYXRlX2luZGV4IChHc3RGbHZEZW11eCAqIGRlbXV4LCBnaW50NjQgcG9zLCBHc3RDbG9ja1RpbWUgdHMpCi17Ci0gIGdpbnQ2NCBzaXplOwotICBzaXplX3QgdGFnX3NpemU7Ci0gIGd1aW50NjQgb2xkX29mZnNldDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdENsb2NrVGltZSB0YWdfdGltZTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoZGVtdXgtPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsICZzaXplKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJidWlsZGluZyBpbmRleCBhdCAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICIgbG9va2luZyBmb3IgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsIHBvcywgR1NUX1RJTUVfQVJHUyAodHMpKTsKLQotICBvbGRfb2Zmc2V0ID0gZGVtdXgtPm9mZnNldDsKLSAgZGVtdXgtPm9mZnNldCA9IHBvczsKLQotICBidWZmZXIgPSBOVUxMOwotICB3aGlsZSAoKHJldCA9IGdzdF9mbHZfZGVtdXhfcHVsbF9yYW5nZSAoZGVtdXgsIGRlbXV4LT5zaW5rcGFkLCBkZW11eC0+b2Zmc2V0LAotICAgICAgICAgICAgICAxMiwgJmJ1ZmZlcikpID09IEdTVF9GTE9XX09LKSB7Ci0gICAgdGFnX3RpbWUgPQotICAgICAgICBnc3RfZmx2X2RlbXV4X3BhcnNlX3RhZ190aW1lc3RhbXAgKGRlbXV4LCBUUlVFLCBidWZmZXIsICZ0YWdfc2l6ZSk7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGJ1ZmZlciA9IE5VTEw7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAodGFnX3RpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fCB0YWdfdGltZSA+IHRzKSkKLSAgICAgIGdvdG8gZXhpdDsKLQotICAgIGRlbXV4LT5vZmZzZXQgKz0gdGFnX3NpemU7Ci0gIH0KLQotICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgIC8qIGZpbGUgcmFuIG91dCwgc28gbWFyayB3ZSBoYXZlIGNvbXBsZXRlIGluZGV4ICovCi0gICAgZGVtdXgtPmluZGV4ZWQgPSBUUlVFOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLWV4aXQ6Ci0gIGRlbXV4LT5vZmZzZXQgPSBvbGRfb2Zmc2V0OwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnaW50NjQKLWdzdF9mbHZfZGVtdXhfZ2V0X21ldGFkYXRhIChHc3RGbHZEZW11eCAqIGRlbXV4KQotewotICBnaW50NjQgcmV0ID0gMCwgb2Zmc2V0OwotICBzaXplX3QgdGFnX3NpemUsIHNpemU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKGRlbXV4LT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLCAmb2Zmc2V0KSkKLSAgICBnb3RvIGV4aXQ7Ci0KLSAgcmV0ID0gb2Zmc2V0OwotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInVwc3RyZWFtIHNpemU6ICUiIEdfR0lOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAgaWYgKEdfVU5MSUtFTFkgKG9mZnNldCA8IDQpKQotICAgIGdvdG8gZXhpdDsKLQotICBvZmZzZXQgLT0gNDsKLSAgaWYgKEdTVF9GTE9XX09LICE9IGdzdF9mbHZfZGVtdXhfcHVsbF9yYW5nZSAoZGVtdXgsIGRlbXV4LT5zaW5rcGFkLCBvZmZzZXQsCi0gICAgICAgICAgNCwgJmJ1ZmZlcikpCi0gICAgZ290byBleGl0OwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHRhZ19zaXplID0gR1NUX1JFQURfVUlOVDMyX0JFIChtYXAuZGF0YSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibGFzdCB0YWcgc2l6ZTogJSIgR19HU0laRV9GT1JNQVQsIHRhZ19zaXplKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgYnVmZmVyID0gTlVMTDsKLQotICBvZmZzZXQgLT0gdGFnX3NpemU7Ci0gIGlmIChHU1RfRkxPV19PSyAhPSBnc3RfZmx2X2RlbXV4X3B1bGxfcmFuZ2UgKGRlbXV4LCBkZW11eC0+c2lua3BhZCwgb2Zmc2V0LAotICAgICAgICAgIDEyLCAmYnVmZmVyKSkKLSAgICBnb3RvIGV4aXQ7Ci0KLSAgLyogYSBjb25zaXN0ZW5jeSBjaGVjayAqLwotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBzaXplID0gR1NUX1JFQURfVUlOVDI0X0JFIChtYXAuZGF0YSArIDEpOwotICBpZiAoc2l6ZSAhPSB0YWdfc2l6ZSAtIDExKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgInRhZyBzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIGV4cGVjdGVkICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAgICIsIGNvcnJ1cHQgb3IgdHJ1bmNhdGVkIGZpbGUiLCBzaXplLCB0YWdfc2l6ZSAtIDExKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLQotICAvKiB0cnkgdG8gdXBkYXRlIGR1cmF0aW9uIHdpdGggdGltZXN0YW1wIGluIGFueSBjYXNlICovCi0gIGdzdF9mbHZfZGVtdXhfcGFyc2VfdGFnX3RpbWVzdGFtcCAoZGVtdXgsIEZBTFNFLCBidWZmZXIsICZzaXplKTsKLQotICAvKiBtYXliZSBnZXQgc29tZSBtb3JlIG1ldGFkYXRhICovCi0gIGlmIChtYXAuZGF0YVswXSA9PSAxOCkgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBidWZmZXIgPSBOVUxMOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2NyaXB0IHRhZywgcHVsbGluZyBpdCB0byBwYXJzZSIpOwotICAgIG9mZnNldCArPSA0OwotICAgIGlmIChHU1RfRkxPV19PSyA9PSBnc3RfZmx2X2RlbXV4X3B1bGxfcmFuZ2UgKGRlbXV4LCBkZW11eC0+c2lua3BhZCwgb2Zmc2V0LAotICAgICAgICAgICAgdGFnX3NpemUsICZidWZmZXIpKQotICAgICAgZ3N0X2Zsdl9kZW11eF9wYXJzZV90YWdfc2NyaXB0IChkZW11eCwgYnVmZmVyKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICB9Ci0KLWV4aXQ6Ci0gIGlmIChidWZmZXIpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdEZsdkRlbXV4ICpkZW11eCA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgZGVtdXggPSBHU1RfRkxWX0RFTVVYIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotCi0gIC8qIHB1bGwgaW4gZGF0YSAqLwotICBzd2l0Y2ggKGRlbXV4LT5zdGF0ZSkgewotICAgIGNhc2UgRkxWX1NUQVRFX1RBR19UWVBFOgotICAgICAgaWYgKGRlbXV4LT5mcm9tX29mZnNldCA9PSAtMSkKLSAgICAgICAgZGVtdXgtPmZyb21fb2Zmc2V0ID0gZGVtdXgtPm9mZnNldDsKLSAgICAgIHJldCA9IGdzdF9mbHZfZGVtdXhfcHVsbF90YWcgKHBhZCwgZGVtdXgpOwotICAgICAgLyogaWYgd2UgaGF2ZSBzZWVuIHJlYWwgZGF0YSwgd2UgcHJvYmFibHkgcGFzc2VkIGEgcG9zc2libGUgbWV0YWRhdGEKLSAgICAgICAqIGhlYWRlciBsb2NhdGVkIGF0IHN0YXJ0LiAgU28gaWYgd2UgZG8gbm90IHlldCBoYXZlIGFuIGluZGV4LAotICAgICAgICogdHJ5IHRvIHBpY2sgdXAgbWV0YWRhdGEgKGluZGV4LCBkdXJhdGlvbikgYXQgdGhlIGVuZCAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+ZmlsZV9zaXplICYmICFkZW11eC0+aW5kZXhlZCAmJgotICAgICAgICAgICAgICAoZGVtdXgtPmhhc192aWRlbyB8fCBkZW11eC0+aGFzX2F1ZGlvKSkpCi0gICAgICAgIGRlbXV4LT5maWxlX3NpemUgPSBnc3RfZmx2X2RlbXV4X2dldF9tZXRhZGF0YSAoZGVtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGTFZfU1RBVEVfRE9ORToKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRkxWX1NUQVRFX1NFRUs6Ci0gICAgICAvKiBzZWVrIGlzc3VlZCB3aXRoIGluc3VmZmljaWVudCBpbmRleDsKLSAgICAgICAqIHNjYW4gZm9yIGluZGV4IGluIHRhc2sgdGhyZWFkIGZyb20gY3VycmVudCBtYXhpbXVtIG9mZnNldCB0bwotICAgICAgICogZGVzaXJlZCB0aW1lIGFuZCB0aGVuIHBlcmZvcm0gc2VlayAqLwotICAgICAgLyogVE9ETyBtYXliZSBzb21lIGJ1ZmZlcmluZyBtZXNzYWdlIG9yIHNvIHRvIGluZGljYXRlIHNjYW4gcHJvZ3Jlc3MgKi8KLSAgICAgIHJldCA9IGdzdF9mbHZfZGVtdXhfY3JlYXRlX2luZGV4IChkZW11eCwgZGVtdXgtPmluZGV4X21heF9wb3MsCi0gICAgICAgICAgZGVtdXgtPnNlZWtfdGltZSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIHBhdXNlOwotICAgICAgLyogcG9zaXRpb24gYW5kIHN0YXRlIGFycmFuZ2VkIGJ5IHNlZWssCi0gICAgICAgKiBhbHNvIHVucmVmcyBldmVudCAqLwotICAgICAgZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdWxsIChkZW11eCwgZGVtdXgtPnNlZWtfZXZlbnQsIEZBTFNFKTsKLSAgICAgIGRlbXV4LT5zZWVrX2V2ZW50ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfZmx2X2RlbXV4X3B1bGxfaGVhZGVyIChwYWQsIGRlbXV4KTsKLSAgICAgIC8qIGluZGV4IHNjYW5zIHN0YXJ0IGFmdGVyIGhlYWRlciAqLwotICAgICAgZGVtdXgtPmluZGV4X21heF9wb3MgPSBkZW11eC0+b2Zmc2V0OwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZGVtdXgtPnNlZ21lbnQucmF0ZSA8IDAuMCkgewotICAgIC8qIGNoZWNrIGVuZCBvZiBzZWN0aW9uICovCi0gICAgaWYgKChnaW50NjQpIGRlbXV4LT5vZmZzZXQgPj0gZGVtdXgtPnRvX29mZnNldCB8fAotICAgICAgICBkZW11eC0+c2VnbWVudC5wb3NpdGlvbiA+PSBkZW11eC0+c2VnbWVudC5zdG9wICsgMiAqIEdTVF9TRUNPTkQgfHwKLSAgICAgICAgKGRlbXV4LT5hdWRpb19kb25lICYmIGRlbXV4LT52aWRlb19kb25lKSkKLSAgICAgIHJldCA9IGdzdF9mbHZfZGVtdXhfc2Vla190b19wcmV2X2tleWZyYW1lIChkZW11eCk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogY2hlY2sgRU9TIGNvbmRpdGlvbiAqLwotICAgIGlmICgoZGVtdXgtPnNlZ21lbnQuc3RvcCAhPSAtMSkgJiYKLSAgICAgICAgKGRlbXV4LT5zZWdtZW50LnBvc2l0aW9uID49IGRlbXV4LT5zZWdtZW50LnN0b3ApKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgfQotICB9Ci0KLSAgLyogcGF1c2UgaWYgc29tZXRoaW5nIHdlbnQgd3Jvbmcgb3IgYXQgZW5kICovCi0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gcGF1c2U7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgpOwotCi0gIHJldHVybjsKLQotcGF1c2U6Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqcmVhc29uID0gZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsIHJlYXNvbik7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChwYWQpOwotCi0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGhhbmRsZSBlbmQtb2Ytc3RyZWFtL3NlZ21lbnQgKi8KLSAgICAgIC8qIHNvIGFsaWduIG91ciBwb3NpdGlvbiB3aXRoIHRoZSBlbmQgb2YgaXQsIGlmIHRoZXJlIGlzIG9uZQotICAgICAgICogdGhpcyBlbnN1cmVzIGEgc3Vic2VxdWVudCB3aWxsIGFycml2ZSBhdCBjb3JyZWN0IGJhc2UvYWNjIHRpbWUgKi8KLSAgICAgIGlmIChkZW11eC0+c2VnbWVudC5yYXRlID4gMC4wICYmCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGRlbXV4LT5zZWdtZW50LnN0b3ApKQotICAgICAgICBkZW11eC0+c2VnbWVudC5wb3NpdGlvbiA9IGRlbXV4LT5zZWdtZW50LnN0b3A7Ci0gICAgICBlbHNlIGlmIChkZW11eC0+c2VnbWVudC5yYXRlIDwgMC4wKQotICAgICAgICBkZW11eC0+c2VnbWVudC5wb3NpdGlvbiA9IGRlbXV4LT5zZWdtZW50LnN0YXJ0OwotCi0gICAgICAvKiBwZXJmb3JtIEVPUyBsb2dpYyAqLwotICAgICAgaWYgKCFkZW11eC0+bm9fbW9yZV9wYWRzKSB7Ci0gICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpKTsKLSAgICAgICAgZGVtdXgtPm5vX21vcmVfcGFkcyA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkZW11eC0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUdNRU5UX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICBnaW50NjQgc3RvcDsKLQotICAgICAgICAvKiBmb3Igc2VnbWVudCBwbGF5YmFjayB3ZSBuZWVkIHRvIHBvc3Qgd2hlbiAoaW4gc3RyZWFtIHRpbWUpCi0gICAgICAgICAqIHdlIHN0b3BwZWQsIHRoaXMgaXMgZWl0aGVyIHN0b3AgKHdoZW4gc2V0KSBvciB0aGUgZHVyYXRpb24uICovCi0gICAgICAgIGlmICgoc3RvcCA9IGRlbXV4LT5zZWdtZW50LnN0b3ApID09IC0xKQotICAgICAgICAgIHN0b3AgPSBkZW11eC0+c2VnbWVudC5kdXJhdGlvbjsKLQotICAgICAgICBpZiAoZGVtdXgtPnNlZ21lbnQucmF0ZSA+PSAwKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiU2VuZGluZyBzZWdtZW50IGRvbmUsIGF0IGVuZCBvZiBzZWdtZW50Iik7Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChkZW11eCksCi0gICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X2RvbmUgKEdTVF9PQkpFQ1RfQ0FTVCAoZGVtdXgpLAotICAgICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzdG9wKSk7Ci0gICAgICAgICAgZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCAoZGVtdXgsCi0gICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChHU1RfRk9STUFUX1RJTUUsIHN0b3ApKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogUmV2ZXJzZSBwbGF5YmFjayAqLwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIlNlbmRpbmcgc2VnbWVudCBkb25lLCBhdCBiZWdpbm5pbmcgb2YgIgotICAgICAgICAgICAgICAic2VnbWVudCIpOwotICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLAotICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKGRlbXV4KSwKLSAgICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgZGVtdXgtPnNlZ21lbnQuc3RhcnQpKTsKLSAgICAgICAgICBnc3RfZmx2X2RlbXV4X3B1c2hfc3JjX2V2ZW50IChkZW11eCwKLSAgICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50X2RvbmUgKEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgICAgIGRlbXV4LT5zZWdtZW50LnN0YXJ0KSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG5vcm1hbCBwbGF5YmFjaywgc2VuZCBFT1MgdG8gYWxsIGxpbmtlZCBwYWRzICovCi0gICAgICAgIGlmICghZGVtdXgtPm5vX21vcmVfcGFkcykgewotICAgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlQgKGRlbXV4KSk7Ci0gICAgICAgICAgZGVtdXgtPm5vX21vcmVfcGFkcyA9IFRSVUU7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJTZW5kaW5nIEVPUywgYXQgZW5kIG9mIHN0cmVhbSIpOwotICAgICAgICBpZiAoIWRlbXV4LT5hdWRpb19wYWQgJiYgIWRlbXV4LT52aWRlb19wYWQpCi0gICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIEZBSUxFRCwKLSAgICAgICAgICAgICAgKCJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iKSwgKCJHb3QgRU9TIGJlZm9yZSBhbnkgZGF0YSIpKTsKLSAgICAgICAgZWxzZSBpZiAoIWdzdF9mbHZfZGVtdXhfcHVzaF9zcmNfZXZlbnQgKGRlbXV4LCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpCi0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgImZhaWxlZCBwdXNoaW5nIEVPUyBvbiBzdHJlYW1zIik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKGRlbXV4LCByZXQpOwotICAgICAgZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCAoZGVtdXgsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICB9Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgpOwotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZ3N0X2Zsdl9kZW11eF9maW5kX29mZnNldCAoR3N0Rmx2RGVtdXggKiBkZW11eCwgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgR3N0U2Vla0ZsYWdzIHNlZWtfZmxhZ3MpCi17Ci0gIGdpbnQ2NCBieXRlcyA9IDA7Ci0gIGdpbnQ2NCB0aW1lID0gMDsKLSAgR3N0SW5kZXggKmluZGV4OwotICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VnbWVudCAhPSBOVUxMLCAwKTsKLQotICB0aW1lID0gc2VnbWVudC0+cG9zaXRpb247Ci0KLSAgaW5kZXggPSBnc3RfZmx2X2RlbXV4X2dldF9pbmRleCAoR1NUX0VMRU1FTlQgKGRlbXV4KSk7Ci0KLSAgaWYgKGluZGV4KSB7Ci0gICAgLyogTGV0J3MgY2hlY2sgaWYgd2UgaGF2ZSBhbiBpbmRleCBlbnRyeSBmb3IgdGhhdCBzZWVrIHRpbWUgKi8KLSAgICBlbnRyeSA9IGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkgKGluZGV4LCBkZW11eC0+aW5kZXhfaWQsCi0gICAgICAgIHNlZWtfZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NOQVBfQUZURVIgPwotICAgICAgICBHU1RfSU5ERVhfTE9PS1VQX0FGVEVSIDogR1NUX0lOREVYX0xPT0tVUF9CRUZPUkUsCi0gICAgICAgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklULCBHU1RfRk9STUFUX1RJTUUsIHRpbWUpOwotCi0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBnc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChlbnRyeSwgR1NUX0ZPUk1BVF9CWVRFUywgJmJ5dGVzKTsKLSAgICAgIGdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgKGVudHJ5LCBHU1RfRk9STUFUX1RJTUUsICZ0aW1lKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJmb3VuZCBpbmRleCBlbnRyeSBmb3IgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiBhdCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgc2Vla2luZyB0byAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+cG9zaXRpb24pLCBHU1RfVElNRV9BUkdTICh0aW1lKSwgYnl0ZXMpOwotCi0gICAgICAvKiBLZXkgZnJhbWUgc2Vla2luZyAqLwotICAgICAgaWYgKHNlZWtfZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0tFWV9VTklUKSB7Ci0gICAgICAgIC8qIEFkanVzdCB0aGUgc2VnbWVudCBzbyB0aGF0IHRoZSBrZXlmcmFtZSBmaXRzIGluICovCi0gICAgICAgIHNlZ21lbnQtPnN0YXJ0ID0gc2VnbWVudC0+dGltZSA9IHRpbWU7Ci0gICAgICAgIHNlZ21lbnQtPnBvc2l0aW9uID0gdGltZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJubyBpbmRleCBlbnRyeSBmb3VuZCBmb3IgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPnN0YXJ0KSk7Ci0gICAgfQotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoaW5kZXgpOwotICB9Ci0KLSAgcmV0dXJuIGJ5dGVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZsdl9kZW11eF9oYW5kbGVfc2Vla19wdXNoIChHc3RGbHZEZW11eCAqIGRlbXV4LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RGb3JtYXQgZm9ybWF0OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIHN0b3BfdHlwZTsKLSAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotICBnZG91YmxlIHJhdGU7Ci0gIGdib29sZWFuIHVwZGF0ZSwgZmx1c2gsIHJldDsKLSAgR3N0U2VnbWVudCBzZWVrc2VnbWVudDsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAmc3RhcnRfdHlwZSwgJnN0YXJ0LCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpCi0gICAgZ290byB3cm9uZ19mb3JtYXQ7Ci0KLSAgZmx1c2ggPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKTsKLQotICAvKiBXb3JrIG9uIGEgY29weSB1bnRpbCB3ZSBhcmUgc3VyZSB0aGUgc2VlayBzdWNjZWVkZWQuICovCi0gIG1lbWNweSAoJnNlZWtzZWdtZW50LCAmZGVtdXgtPnNlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2VnbWVudCBiZWZvcmUgY29uZmlndXJlICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICZkZW11eC0+c2VnbWVudCk7Ci0KLSAgLyogQXBwbHkgdGhlIHNlZWsgdG8gb3VyIHNlZ21lbnQgKi8KLSAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAotICAgICAgc3RhcnRfdHlwZSwgc3RhcnQsIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzZWdtZW50IGNvbmZpZ3VyZWQgJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgJnNlZWtzZWdtZW50KTsKLQotICBpZiAoZmx1c2ggfHwgc2Vla3NlZ21lbnQucG9zaXRpb24gIT0gZGVtdXgtPnNlZ21lbnQucG9zaXRpb24pIHsKLSAgICAvKiBEbyB0aGUgYWN0dWFsIHNlZWtpbmcgKi8KLSAgICBndWludDY0IG9mZnNldCA9IGdzdF9mbHZfZGVtdXhfZmluZF9vZmZzZXQgKGRlbXV4LCAmc2Vla3NlZ21lbnQsIGZsYWdzKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZ2VuZXJhdGluZyBhbiB1cHN0cmVhbSBzZWVrIGF0IHBvc2l0aW9uICUiCi0gICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkZW11eC0+c2lua3BhZCwKLSAgICAgICAgZ3N0X2V2ZW50X25ld19zZWVrIChzZWVrc2VnbWVudC5yYXRlLCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgICAgICAgZmxhZ3MgfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFLCBHU1RfU0VFS19UWVBFX1NFVCwKLSAgICAgICAgICAgIG9mZnNldCwgR1NUX1NFRUtfVFlQRV9OT05FLCAwKSk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFyZXQpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAidXBzdHJlYW0gc2VlayBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgICBnc3RfZmxvd19jb21iaW5lcl9yZXNldCAoZGVtdXgtPmZsb3djb21iaW5lcik7Ci0gICAgLyogVGVsbCBhbGwgdGhlIHN0cmVhbSB3ZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBwb3NpdGlvbiAoZGlzY29udCkgKi8KLSAgICBkZW11eC0+YXVkaW9fbmVlZF9kaXNjb250ID0gVFJVRTsKLSAgICBkZW11eC0+dmlkZW9fbmVlZF9kaXNjb250ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBUUlVFOwotICB9Ci0KLSAgaWYgKHJldCkgewotICAgIC8qIE9rIHNlZWsgc3VjY2VlZGVkLCB0YWtlIHRoZSBuZXdseSBjb25maWd1cmVkIHNlZ21lbnQgKi8KLSAgICBtZW1jcHkgKCZkZW11eC0+c2VnbWVudCwgJnNlZWtzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICAgIC8qIFRlbGwgYWxsIHRoZSBzdHJlYW0gYSBuZXcgc2VnbWVudCBpcyBuZWVkZWQgKi8KLSAgICBkZW11eC0+YXVkaW9fbmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICBkZW11eC0+dmlkZW9fbmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICAvKiBDbGVhbiBhbnkgcG90ZW50aWFsIG5ld3NlZ21lbnQgZXZlbnQga2VwdCBmb3IgdGhlIHN0cmVhbXMuIFRoZSBmaXJzdAotICAgICAqIHN0cmVhbSBuZWVkaW5nIGEgbmV3IHNlZ21lbnQgd2lsbCBjcmVhdGUgYSBuZXcgb25lLiAqLwotICAgIGlmIChHX1VOTElLRUxZIChkZW11eC0+bmV3X3NlZ19ldmVudCkpIHsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZGVtdXgtPm5ld19zZWdfZXZlbnQpOwotICAgICAgZGVtdXgtPm5ld19zZWdfZXZlbnQgPSBOVUxMOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInByZXBhcmluZyBuZXdzZWdtZW50IGZyb20gJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChkZW11eC0+c2VnbWVudC5zdGFydCksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5zZWdtZW50LnN0b3ApKTsKLSAgICBkZW11eC0+bmV3X3NlZ19ldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmRlbXV4LT5zZWdtZW50KTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT5zaW5rcGFkLCBldmVudCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi0vKiBFUlJPUlMgKi8KLXdyb25nX2Zvcm1hdDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJ3ZSBvbmx5IHN1cHBvcnQgc2Vla2luZyBpbiBUSU1FIGZvcm1hdCIpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoR3N0Rmx2RGVtdXggKiBkZW11eCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsIE5VTEwsICZmb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIGlmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIndlIG9ubHkgc3VwcG9ydCBzZWVraW5nIGluIFRJTUUgZm9ybWF0Iik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogRmlyc3QgdHJ5IHVwc3RyZWFtICovCi0gIGlmIChnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT5zaW5rcGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCkpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJVcHN0cmVhbSBzdWNjZXNzZnVsbHkgc2Vla2VkIik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBpZiAoIWRlbXV4LT5pbmRleGVkKSB7Ci0gICAgZ3VpbnQ2NCBzZWVrX29mZnNldCA9IDA7Ci0gICAgZ2Jvb2xlYW4gYnVpbGRpbmdfaW5kZXg7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAvKiBoYW5kbGUgdGhlIHNlZWsgaW4gdGhlIGNoYWluIGZ1bmN0aW9uICovCi0gICAgZGVtdXgtPnNlZWtpbmcgPSBUUlVFOwotICAgIGRlbXV4LT5zdGF0ZSA9IEZMVl9TVEFURV9TRUVLOwotCi0gICAgLyogY29weSB0aGUgZXZlbnQgKi8KLSAgICBpZiAoZGVtdXgtPnNlZWtfZXZlbnQpCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGRlbXV4LT5zZWVrX2V2ZW50KTsKLSAgICBkZW11eC0+c2Vla19ldmVudCA9IGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLQotICAgIC8qIHNldCB0aGUgYnVpbGRpbmdfaW5kZXggZmxhZyBzbyB0aGF0IG9ubHkgb25lIHRocmVhZCBjYW4gc2V0dXAgdGhlCi0gICAgICogc3RydWN0dXJlcyBmb3IgaW5kZXggc2Vla2luZy4gKi8KLSAgICBidWlsZGluZ19pbmRleCA9IGRlbXV4LT5idWlsZGluZ19pbmRleDsKLSAgICBpZiAoIWJ1aWxkaW5nX2luZGV4KSB7Ci0gICAgICBkZW11eC0+YnVpbGRpbmdfaW5kZXggPSBUUlVFOwotICAgICAgaWYgKCFkZW11eC0+ZmlsZV9zaXplCi0gICAgICAgICAgJiYgIWdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoZGVtdXgtPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgICAgICAgICZkZW11eC0+ZmlsZV9zaXplKSkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiRmFpbGVkIHRvIHF1ZXJ5IHVwc3RyZWFtIGZpbGUgc2l6ZSIpOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdlIGhvcGUgdGhlIGxhc3QgdGFnIGlzIGEgc2NyaXB0ZGF0YW9iamVjdCBjb250YWluaW5nIGFuIGluZGV4Ci0gICAgICAgKiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCB0YWcgaXMgZ2l2ZW4gaW4gdGhlIGxhc3QgZ3VpbnQzMiBiaXRzCi0gICAgICAgKiB0aGVuIHdlIHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFnLCBwYXJzZSBpdCBhbmQgaG9wZWZ1bGx5IG9idGFpbiBhbiBpbmRleCAqLwotICAgICAgc2Vla19vZmZzZXQgPSBkZW11eC0+ZmlsZV9zaXplIC0gc2l6ZW9mIChndWludDMyKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICJGaWxlIHNpemUgb2J0YWluZWQsIHNlZWtpbmcgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2Vla19vZmZzZXQpOwotICAgIH0KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gICAgaWYgKCFidWlsZGluZ19pbmRleCkgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChkZW11eCwgIlNlZWtpbmcgdG8gbGFzdCA0IGJ5dGVzIGF0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgc2Vla19vZmZzZXQpOwotICAgICAgcmV0dXJuIGZsdl9kZW11eF9zZWVrX3RvX29mZnNldCAoZGVtdXgsIHNlZWtfb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICAvKiBGSVhNRTogd2UgaGF2ZSB0byBhbHdheXMgcmV0dXJuIHRydWUgc28gdGhhdCB3ZSBkb24ndCBibG9jayB0aGUgc2VlawotICAgICAqIHRocmVhZC4KLSAgICAgKiBOb3RlOiBtYXliZSBpdCBpcyBPSyB0byByZXR1cm4gdHJ1ZSBpZiB3ZSdyZSBzdGlsbCBidWlsZGluZyB0aGUgaW5kZXggKi8KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBmbHZfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoZGVtdXgsIGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X2hhbmRsZV9zZWVrX3B1bGwgKEdzdEZsdkRlbXV4ICogZGVtdXgsIEdzdEV2ZW50ICogZXZlbnQsCi0gICAgZ2Jvb2xlYW4gc2Vla2luZykKLXsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RTZWVrVHlwZSBzdGFydF90eXBlLCBzdG9wX3R5cGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgZ2RvdWJsZSByYXRlOwotICBnYm9vbGVhbiB1cGRhdGUsIGZsdXNoLCByZXQgPSBGQUxTRTsKLSAgR3N0U2VnbWVudCBzZWVrc2VnbWVudDsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAmc3RhcnRfdHlwZSwgJnN0YXJ0LCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpCi0gICAgZ290byB3cm9uZ19mb3JtYXQ7Ci0KLSAgLyogbWFyayBzZWVraW5nIHRocmVhZCBlbnRlcmluZyBmbHVzaGluZy9wYXVzaW5nICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICBpZiAoc2Vla2luZykKLSAgICBkZW11eC0+c2Vla2luZyA9IHNlZWtpbmc7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0KLSAgZmx1c2ggPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKTsKLQotICBpZiAoZmx1c2gpIHsKLSAgICAvKiBGbHVzaCBzdGFydCB1cCBhbmQgZG93bnN0cmVhbSB0byBtYWtlIHN1cmUgZGF0YSBmbG93IGFuZCBsb29wcyBhcmUKLSAgICAgICBpZGxlICovCi0gICAgZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCAoZGVtdXgsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPnNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICB9IGVsc2UgewotICAgIC8qIFBhdXNlIHRoZSBwdWxsaW5nIHRhc2sgKi8KLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKGRlbXV4LT5zaW5rcGFkKTsKLSAgfQotCi0gIC8qIFRha2UgdGhlIHN0cmVhbSBsb2NrICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKGRlbXV4LT5zaW5rcGFkKTsKLQotICBpZiAoZmx1c2gpIHsKLSAgICAvKiBTdG9wIGZsdXNoaW5nIHVwc3RyZWFtIHdlIG5lZWQgdG8gcHVsbCAqLwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPnNpbmtwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotICB9Ci0KLSAgLyogV29yayBvbiBhIGNvcHkgdW50aWwgd2UgYXJlIHN1cmUgdGhlIHNlZWsgc3VjY2VlZGVkLiAqLwotICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJmRlbXV4LT5zZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZ21lbnQgYmVmb3JlIGNvbmZpZ3VyZSAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAmZGVtdXgtPnNlZ21lbnQpOwotCi0gIC8qIEFwcGx5IHRoZSBzZWVrIHRvIG91ciBzZWdtZW50ICovCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKLSAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2VnbWVudCBjb25maWd1cmVkICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICZzZWVrc2VnbWVudCk7Ci0KLSAgaWYgKGZsdXNoIHx8IHNlZWtzZWdtZW50LnBvc2l0aW9uICE9IGRlbXV4LT5zZWdtZW50LnBvc2l0aW9uKSB7Ci0gICAgLyogRG8gdGhlIGFjdHVhbCBzZWVraW5nICovCi0gICAgLyogaW5kZXggaXMgcmVsaWFibGUgaWYgaXQgaXMgY29tcGxldGUgb3Igd2UgZG8gbm90IGdvIHRvIGZhciBhaGVhZCAqLwotICAgIGlmIChzZWVraW5nICYmICFkZW11eC0+aW5kZXhlZCAmJgotICAgICAgICBzZWVrc2VnbWVudC5wb3NpdGlvbiA+IGRlbXV4LT5pbmRleF9tYXhfdGltZSArIDEwICogR1NUX1NFQ09ORCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJkZWxheWluZyBzZWVrIHRvIHBvc3Qtc2NhbjsgIgotICAgICAgICAgICIgaW5kZXggb25seSB1cCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVtdXgtPmluZGV4X21heF90aW1lKSk7Ci0gICAgICAvKiBzdG9wIGZsdXNoaW5nIGZvciBub3cgKi8KLSAgICAgIGlmIChmbHVzaCkKLSAgICAgICAgZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCAoZGVtdXgsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotICAgICAgLyogZGVsZWdhdGUgc2Nhbm5pbmcgYW5kIGluZGV4IGJ1aWxkaW5nIHRvIHRhc2sgdGhyZWFkIHRvIGF2b2lkCi0gICAgICAgKiBvY2N1cHlpbmcgbWFpbiAoVUkpIGxvb3AgKi8KLSAgICAgIGlmIChkZW11eC0+c2Vla19ldmVudCkKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChkZW11eC0+c2Vla19ldmVudCk7Ci0gICAgICBkZW11eC0+c2Vla19ldmVudCA9IGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICAgIGRlbXV4LT5zZWVrX3RpbWUgPSBzZWVrc2VnbWVudC5wb3NpdGlvbjsKLSAgICAgIGRlbXV4LT5zdGF0ZSA9IEZMVl9TVEFURV9TRUVLOwotICAgICAgLyogZG8gbm90IGtub3cgYWJvdXQgc3VjY2VzIHlldCwgYnV0IHdlIGRpZCBjYXJlIGFuZCBoYW5kbGVkIGl0ICovCi0gICAgICByZXQgPSBUUlVFOwotICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIC8qIG5vdyBpbmRleCBzaG91bGQgYmUgYXMgcmVsaWFibGUgYXMgaXQgY2FuIGJlIGZvciBjdXJyZW50IHB1cnBvc2UgKi8KLSAgICBnc3RfZmx2X2RlbXV4X21vdmVfdG9fb2Zmc2V0IChkZW11eCwKLSAgICAgICAgZ3N0X2Zsdl9kZW11eF9maW5kX29mZnNldCAoZGVtdXgsICZzZWVrc2VnbWVudCwgZmxhZ3MpLCBUUlVFKTsKLSAgICByZXQgPSBUUlVFOwotICB9IGVsc2UgewotICAgIHJldCA9IFRSVUU7Ci0gIH0KLQotICBpZiAoZmx1c2gpIHsKLSAgICAvKiBTdG9wIGZsdXNoaW5nLCB0aGUgc2lua3MgYXJlIGF0IHRpbWUgMCBub3cgKi8KLSAgICBnc3RfZmx2X2RlbXV4X3B1c2hfc3JjX2V2ZW50IChkZW11eCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSk7Ci0gIH0KLQotICBpZiAocmV0KSB7Ci0gICAgLyogT2sgc2VlayBzdWNjZWVkZWQsIHRha2UgdGhlIG5ld2x5IGNvbmZpZ3VyZWQgc2VnbWVudCAqLwotICAgIG1lbWNweSAoJmRlbXV4LT5zZWdtZW50LCAmc2Vla3NlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotCi0gICAgLyogTm90aWZ5IGFib3V0IHRoZSBzdGFydCBvZiBhIG5ldyBzZWdtZW50ICovCi0gICAgaWYgKGRlbXV4LT5zZWdtZW50LmZsYWdzICYgR1NUX1NFR01FTlRfRkxBR19TRUdNRU5UKSB7Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChkZW11eCksCi0gICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKEdTVF9PQkpFQ1QgKGRlbXV4KSwKLSAgICAgICAgICAgICAgZGVtdXgtPnNlZ21lbnQuZm9ybWF0LCBkZW11eC0+c2VnbWVudC5wb3NpdGlvbikpOwotICAgIH0KLQotICAgIGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0IChkZW11eC0+Zmxvd2NvbWJpbmVyKTsKLSAgICAvKiBUZWxsIGFsbCB0aGUgc3RyZWFtIGEgbmV3IHNlZ21lbnQgaXMgbmVlZGVkICovCi0gICAgZGVtdXgtPmF1ZGlvX25lZWRfc2VnbWVudCA9IFRSVUU7Ci0gICAgZGVtdXgtPnZpZGVvX25lZWRfc2VnbWVudCA9IFRSVUU7Ci0gICAgLyogQ2xlYW4gYW55IHBvdGVudGlhbCBuZXdzZWdtZW50IGV2ZW50IGtlcHQgZm9yIHRoZSBzdHJlYW1zLiBUaGUgZmlyc3QKLSAgICAgKiBzdHJlYW0gbmVlZGluZyBhIG5ldyBzZWdtZW50IHdpbGwgY3JlYXRlIGEgbmV3IG9uZS4gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPm5ld19zZWdfZXZlbnQpKSB7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGRlbXV4LT5uZXdfc2VnX2V2ZW50KTsKLSAgICAgIGRlbXV4LT5uZXdfc2VnX2V2ZW50ID0gTlVMTDsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJwcmVwYXJpbmcgbmV3c2VnbWVudCBmcm9tICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVtdXgtPnNlZ21lbnQuc3RhcnQpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChkZW11eC0+c2VnbWVudC5zdG9wKSk7Ci0gICAgZGVtdXgtPm5ld19zZWdfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkZW11eC0+c2VnbWVudCk7Ci0gIH0KLQotZXhpdDoKLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gIHNlZWtpbmcgPSBkZW11eC0+c2Vla2luZyAmJiAhc2Vla2luZzsKLSAgZGVtdXgtPnNlZWtpbmcgPSBGQUxTRTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICAvKiBpZiB3ZSBkZXRlY3QgYW4gZXh0ZXJuYWwgc2VlayBoYXZpbmcgc3RhcnRlZCAoYW5kIHBvc3NpYmx5IGFscmVhZHkgaGF2aW5nCi0gICAqIGZsdXNoZWQpLCBkbyBub3QgcmVzdGFydCB0YXNrIHRvIGdpdmUgaXQgYSBjaGFuY2UuCi0gICAqIE90aGVyd2lzZSBleHRlcm5hbCBvbmUncyBmbHVzaGluZyB3aWxsIHRha2UgY2FyZSB0byBwYXVzZSB0YXNrICovCi0gIGlmIChzZWVraW5nKSB7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChkZW11eC0+c2lua3BhZCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3BhZF9zdGFydF90YXNrIChkZW11eC0+c2lua3BhZCwKLSAgICAgICAgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X2Zsdl9kZW11eF9sb29wLCBkZW11eC0+c2lua3BhZCwgTlVMTCk7Ci0gIH0KLQotICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKGRlbXV4LT5zaW5rcGFkKTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX2Zvcm1hdDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJ3ZSBvbmx5IHN1cHBvcnQgc2Vla2luZyBpbiBUSU1FIGZvcm1hdCIpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotLyogSWYgd2UgY2FuIHB1bGwgdGhhdCdzIHByZWZlcmVkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbHZfZGVtdXhfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHB1bGxfbW9kZTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoc2lua3BhZCwgcXVlcnkpKSB7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gICAgZ290byBhY3RpdmF0ZV9wdXNoOwotICB9Ci0KLSAgcHVsbF9tb2RlID0gZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGVfd2l0aF9mbGFncyAocXVlcnksCi0gICAgICBHU1RfUEFEX01PREVfUFVMTCwgR1NUX1NDSEVEVUxJTkdfRkxBR19TRUVLQUJMRSk7Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIGlmICghcHVsbF9tb2RlKQotICAgIGdvdG8gYWN0aXZhdGVfcHVzaDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rcGFkLCAiYWN0aXZhdGluZyBwdWxsIik7Ci0gIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHNpbmtwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLQotYWN0aXZhdGVfcHVzaDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmtwYWQsICJhY3RpdmF0aW5nIHB1c2giKTsKLSAgICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzaW5rcGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdEZsdkRlbXV4ICpkZW11eDsKLQotICBkZW11eCA9IEdTVF9GTFZfREVNVVggKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIGRlbXV4LT5yYW5kb21fYWNjZXNzID0gRkFMU0U7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVMTDoKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgZGVtdXgtPnJhbmRvbV9hY2Nlc3MgPSBUUlVFOwotICAgICAgICByZXMgPSBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHNpbmtwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9mbHZfZGVtdXhfbG9vcCwKLSAgICAgICAgICAgIHNpbmtwYWQsIE5VTEwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVtdXgtPnJhbmRvbV9hY2Nlc3MgPSBGQUxTRTsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9zdG9wX3Rhc2sgKHNpbmtwYWQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RGbHZEZW11eCAqZGVtdXg7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGRlbXV4ID0gR1NUX0ZMVl9ERU1VWCAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImhhbmRsaW5nIGV2ZW50ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAidHJ5aW5nIHRvIGZvcmNlIGNoYWluIGZ1bmN0aW9uIHRvIGV4aXQiKTsKLSAgICAgIGRlbXV4LT5mbHVzaGluZyA9IFRSVUU7Ci0gICAgICByZXQgPSBnc3RfZmx2X2RlbXV4X3B1c2hfc3JjX2V2ZW50IChkZW11eCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZmx1c2hpbmcgRkxWIGRlbXV4ZXIiKTsKLSAgICAgIGdzdF9mbHZfZGVtdXhfZmx1c2ggKGRlbXV4LCBUUlVFKTsKLSAgICAgIHJldCA9IGdzdF9mbHZfZGVtdXhfcHVzaF9zcmNfZXZlbnQgKGRlbXV4LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgewotICAgICAgR3N0SW5kZXggKmluZGV4OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInJlY2VpdmVkIEVPUyIpOwotCi0gICAgICBpbmRleCA9IGdzdF9mbHZfZGVtdXhfZ2V0X2luZGV4IChHU1RfRUxFTUVOVCAoZGVtdXgpKTsKLQotICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiY29tbWl0dGluZyBpbmRleCIpOwotICAgICAgICBnc3RfaW5kZXhfY29tbWl0IChpbmRleCwgZGVtdXgtPmluZGV4X2lkKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoaW5kZXgpOwotICAgICAgfQotCi0gICAgICBpZiAoIWRlbXV4LT5hdWRpb19wYWQgJiYgIWRlbXV4LT52aWRlb19wYWQpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIEZBSUxFRCwKLSAgICAgICAgICAgICgiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIiksICgiR290IEVPUyBiZWZvcmUgYW55IGRhdGEiKSk7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFkZW11eC0+bm9fbW9yZV9wYWRzKSB7Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzIChHU1RfRUxFTUVOVCAoZGVtdXgpKTsKLSAgICAgICAgICBkZW11eC0+bm9fbW9yZV9wYWRzID0gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ3N0X2Zsdl9kZW11eF9wdXNoX3NyY19ldmVudCAoZGVtdXgsIGV2ZW50KSkKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiZmFpbGVkIHB1c2hpbmcgRU9TIG9uIHN0cmVhbXMiKTsKLSAgICAgIH0KLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBHc3RTZWdtZW50IGluX3NlZ21lbnQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicmVjZWl2ZWQgbmV3IHNlZ21lbnQiKTsKLQotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZpbl9zZWdtZW50KTsKLQotICAgICAgaWYgKGluX3NlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICAvKiB0aW1lIHNlZ21lbnQsIHRoaXMgaXMgcGVyZmVjdCwgY29weSBvdmVyIHRoZSB2YWx1ZXMuICovCi0gICAgICAgIG1lbWNweSAoJmRlbXV4LT5zZWdtZW50LCAmaW5fc2VnbWVudCwgc2l6ZW9mIChpbl9zZWdtZW50KSk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJORVdTRUdNRU5UOiAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgICAgICAmZGVtdXgtPnNlZ21lbnQpOwotCi0gICAgICAgIC8qIGFuZCBmb3J3YXJkICovCi0gICAgICAgIHJldCA9IGdzdF9mbHZfZGVtdXhfcHVzaF9zcmNfZXZlbnQgKGRlbXV4LCBldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBub24tdGltZSBmb3JtYXQgKi8KLSAgICAgICAgZGVtdXgtPmF1ZGlvX25lZWRfc2VnbWVudCA9IFRSVUU7Ci0gICAgICAgIGRlbXV4LT52aWRlb19uZWVkX3NlZ21lbnQgPSBUUlVFOwotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgaWYgKGRlbXV4LT5uZXdfc2VnX2V2ZW50KSB7Ci0gICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChkZW11eC0+bmV3X3NlZ19ldmVudCk7Ci0gICAgICAgICAgZGVtdXgtPm5ld19zZWdfZXZlbnQgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnc3RfZmxvd19jb21iaW5lcl9yZXNldCAoZGVtdXgtPmZsb3djb21iaW5lcik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEZsdkRlbXV4ICpkZW11eDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgZGVtdXggPSBHU1RfRkxWX0RFTVVYIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiaGFuZGxpbmcgZXZlbnQgJXMiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgICAvKiBUcnkgdG8gcHVzaCB1cHN0cmVhbSBmaXJzdCAqLwotICAgICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkZW11eC0+c2lua3BhZCwgZXZlbnQpOwotICAgICAgaWYgKHJldCkgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAoZGVtdXgtPnJhbmRvbV9hY2Nlc3MpIHsKLSAgICAgICAgcmV0ID0gZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdWxsIChkZW11eCwgZXZlbnQsIFRSVUUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gZ3N0X2Zsdl9kZW11eF9oYW5kbGVfc2Vla19wdXNoIChkZW11eCwgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZmx2X2RlbXV4X3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0Rmx2RGVtdXggKmRlbXV4OwotCi0gIGRlbXV4ID0gR1NUX0ZMVl9ERU1VWCAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgLyogZHVyYXRpb24gaXMgdGltZSBvbmx5ICovCi0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImR1cmF0aW9uIHF1ZXJ5IG9ubHkgc3VwcG9ydGVkIGZvciB0aW1lICIKLSAgICAgICAgICAgICJmb3JtYXQiKTsKLSAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFRyeSB0byBwdXNoIHVwc3RyZWFtIGZpcnN0ICovCi0gICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKGRlbXV4LT5zaW5rcGFkLCBxdWVyeSk7Ci0gICAgICBpZiAocmVzKQotICAgICAgICBnb3RvIGJlYWNoOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJkdXJhdGlvbiBxdWVyeSwgcmVwbHlpbmcgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5kdXJhdGlvbikpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBkZW11eC0+ZHVyYXRpb24pOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgLyogcG9zaXRpb24gaXMgdGltZSBvbmx5ICovCi0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInBvc2l0aW9uIHF1ZXJ5IG9ubHkgc3VwcG9ydGVkIGZvciB0aW1lICIKLSAgICAgICAgICAgICJmb3JtYXQiKTsKLSAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInBvc2l0aW9uIHF1ZXJ5LCByZXBseWluZyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVtdXgtPnNlZ21lbnQucG9zaXRpb24pKTsKLQotICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgZGVtdXgtPnNlZ21lbnQucG9zaXRpb24pOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOnsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZtdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgIC8qIEZpcnN0IGFzayB1cHN0cmVhbSAqLwotICAgICAgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUgJiYgZ3N0X3BhZF9wZWVyX3F1ZXJ5IChkZW11eC0+c2lua3BhZCwgcXVlcnkpKSB7Ci0gICAgICAgIGdib29sZWFuIHNlZWthYmxlOwotCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaWYgKHNlZWthYmxlKSB7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIC8qIEZJWE1FLCBjaGVjayBpbmRleCB0aGlzIHdheSBpcyBub3QgdGhyZWFkIHNhZmUgKi8KLSAgICAgIGlmIChmbXQgIT0gR1NUX0ZPUk1BVF9USU1FIHx8ICFkZW11eC0+aW5kZXgpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgZm10LCBGQUxTRSwgLTEsIC0xKTsKLSAgICAgIH0gZWxzZSBpZiAoZGVtdXgtPnJhbmRvbV9hY2Nlc3MpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBUUlVFLCAwLAotICAgICAgICAgICAgZGVtdXgtPmR1cmF0aW9uKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdzdFF1ZXJ5ICpwZWVycXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgICBnYm9vbGVhbiBzZWVrYWJsZSA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoZGVtdXgtPnNpbmtwYWQsIHBlZXJxdWVyeSk7Ci0KLSAgICAgICAgaWYgKHNlZWthYmxlKQotICAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChwZWVycXVlcnksIE5VTEwsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGdzdF9xdWVyeV91bnJlZiAocGVlcnF1ZXJ5KTsKLQotICAgICAgICBpZiAoc2Vla2FibGUpCi0gICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrYWJsZSwgMCwKLSAgICAgICAgICAgICAgZGVtdXgtPmR1cmF0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgRkFMU0UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgICBmb3JtYXQgPSBkZW11eC0+c2VnbWVudC5mb3JtYXQ7Ci0KLSAgICAgIHN0YXJ0ID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmRlbXV4LT5zZWdtZW50LCBmb3JtYXQsCi0gICAgICAgICAgZGVtdXgtPnNlZ21lbnQuc3RhcnQpOwotICAgICAgaWYgKChzdG9wID0gZGVtdXgtPnNlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICAgIHN0b3AgPSBkZW11eC0+c2VnbWVudC5kdXJhdGlvbjsKLSAgICAgIGVsc2UKLSAgICAgICAgc3RvcCA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmZGVtdXgtPnNlZ21lbnQsIGZvcm1hdCwgc3RvcCk7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAocXVlcnksIGRlbXV4LT5zZWdtZW50LnJhdGUsIGZvcm1hdCwgc3RhcnQsIHN0b3ApOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi1iZWFjaDoKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9mbHZfZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0Rmx2RGVtdXggKmRlbXV4OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgZGVtdXggPSBHU1RfRkxWX0RFTVVYIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgLyogSWYgdGhpcyBpcyBvdXIgb3duIGluZGV4IGRlc3Ryb3kgaXQgYXMgdGhlCi0gICAgICAgKiBvbGQgZW50cmllcyBtaWdodCBiZSB3cm9uZyBmb3IgdGhlIG5ldyBzdHJlYW0gKi8KLSAgICAgIGlmIChkZW11eC0+b3duX2luZGV4KSB7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlbXV4LT5pbmRleCk7Ci0gICAgICAgIGRlbXV4LT5pbmRleCA9IE5VTEw7Ci0gICAgICAgIGRlbXV4LT5vd25faW5kZXggPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgLyogSWYgbm8gaW5kZXggd2FzIGNyZWF0ZWQsIGdlbmVyYXRlIG9uZSAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+aW5kZXgpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibm8gaW5kZXggcHJvdmlkZWQgY3JlYXRpbmcgb3VyIG93biIpOwotCi0gICAgICAgIGRlbXV4LT5pbmRleCA9IGdfb2JqZWN0X25ldyAoZ3N0X21lbV9pbmRleF9nZXRfdHlwZSAoKSwgTlVMTCk7Ci0KLSAgICAgICAgZ3N0X2luZGV4X2dldF93cml0ZXJfaWQgKGRlbXV4LT5pbmRleCwgR1NUX09CSkVDVCAoZGVtdXgpLAotICAgICAgICAgICAgJmRlbXV4LT5pbmRleF9pZCk7Ci0gICAgICAgIGRlbXV4LT5vd25faW5kZXggPSBUUlVFOwotICAgICAgfQotICAgICAgZ3N0X2Zsdl9kZW11eF9jbGVhbnVwIChkZW11eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgcmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2Zsdl9kZW11eF9jbGVhbnVwIChkZW11eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0jaWYgMAotc3RhdGljIHZvaWQKLWdzdF9mbHZfZGVtdXhfc2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgR3N0Rmx2RGVtdXggKmRlbXV4ID0gR1NUX0ZMVl9ERU1VWCAoZWxlbWVudCk7Ci0gIEdzdEluZGV4ICpvbGRfaW5kZXg7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0KLSAgb2xkX2luZGV4ID0gZGVtdXgtPmluZGV4OwotCi0gIGlmIChpbmRleCkgewotICAgIGRlbXV4LT5pbmRleCA9IGdzdF9vYmplY3RfcmVmIChpbmRleCk7Ci0gICAgZGVtdXgtPm93bl9pbmRleCA9IEZBTFNFOwotICB9IGVsc2UKLSAgICBkZW11eC0+aW5kZXggPSBOVUxMOwotCi0gIGlmIChvbGRfaW5kZXgpCi0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgtPmluZGV4KTsKLQotICBnc3Rfb2JqZWN0X3JlZiAoaW5kZXgpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0KLSAgLyogb2JqZWN0IGxvY2sgbWlnaHQgYmUgdGFrZW4gYWdhaW4gKi8KLSAgaWYgKGluZGV4KQotICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChpbmRleCwgR1NUX09CSkVDVCAoZWxlbWVudCksICZkZW11eC0+aW5kZXhfaWQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU2V0IGluZGV4ICUiIEdTVF9QVFJfRk9STUFULCBkZW11eC0+aW5kZXgpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGluZGV4KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgR3N0SW5kZXggKgotZ3N0X2Zsdl9kZW11eF9nZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RJbmRleCAqcmVzdWx0ID0gTlVMTDsKLQotICBHc3RGbHZEZW11eCAqZGVtdXggPSBHU1RfRkxWX0RFTVVYIChlbGVtZW50KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgaWYgKGRlbXV4LT5pbmRleCkKLSAgICByZXN1bHQgPSBnc3Rfb2JqZWN0X3JlZiAoZGVtdXgtPmluZGV4KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RGbHZEZW11eCAqZGVtdXggPSBHU1RfRkxWX0RFTVVYIChvYmplY3QpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZGlzcG9zaW5nIEZMViBkZW11eGVyIik7Ci0KLSAgaWYgKGRlbXV4LT5hZGFwdGVyKSB7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGRlbXV4LT5hZGFwdGVyKTsKLSAgICBnX29iamVjdF91bnJlZiAoZGVtdXgtPmFkYXB0ZXIpOwotICAgIGRlbXV4LT5hZGFwdGVyID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+dGFnbGlzdCkgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZGVtdXgtPnRhZ2xpc3QpOwotICAgIGRlbXV4LT50YWdsaXN0ID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+YXVkaW9fdGFncykgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZGVtdXgtPmF1ZGlvX3RhZ3MpOwotICAgIGRlbXV4LT5hdWRpb190YWdzID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+dmlkZW9fdGFncykgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoZGVtdXgtPnZpZGVvX3RhZ3MpOwotICAgIGRlbXV4LT52aWRlb190YWdzID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+Zmxvd2NvbWJpbmVyKSB7Ci0gICAgZ3N0X2Zsb3dfY29tYmluZXJfZnJlZSAoZGVtdXgtPmZsb3djb21iaW5lcik7Ci0gICAgZGVtdXgtPmZsb3djb21iaW5lciA9IE5VTEw7Ci0gIH0KLQotICBpZiAoZGVtdXgtPm5ld19zZWdfZXZlbnQpIHsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGRlbXV4LT5uZXdfc2VnX2V2ZW50KTsKLSAgICBkZW11eC0+bmV3X3NlZ19ldmVudCA9IE5VTEw7Ci0gIH0KLQotICBpZiAoZGVtdXgtPmF1ZGlvX2NvZGVjX2RhdGEpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChkZW11eC0+YXVkaW9fY29kZWNfZGF0YSk7Ci0gICAgZGVtdXgtPmF1ZGlvX2NvZGVjX2RhdGEgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGRlbXV4LT52aWRlb19jb2RlY19kYXRhKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoZGVtdXgtPnZpZGVvX2NvZGVjX2RhdGEpOwotICAgIGRlbXV4LT52aWRlb19jb2RlY19kYXRhID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+YXVkaW9fcGFkKSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgtPmF1ZGlvX3BhZCk7Ci0gICAgZGVtdXgtPmF1ZGlvX3BhZCA9IE5VTEw7Ci0gIH0KLQotICBpZiAoZGVtdXgtPnZpZGVvX3BhZCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlbXV4LT52aWRlb19wYWQpOwotICAgIGRlbXV4LT52aWRlb19wYWQgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGRlbXV4LT5pbmRleCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlbXV4LT5pbmRleCk7Ci0gICAgZGVtdXgtPmluZGV4ID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+dGltZXMpIHsKLSAgICBnX2FycmF5X2ZyZWUgKGRlbXV4LT50aW1lcywgVFJVRSk7Ci0gICAgZGVtdXgtPnRpbWVzID0gTlVMTDsKLSAgfQotCi0gIGlmIChkZW11eC0+ZmlsZXBvc2l0aW9ucykgewotICAgIGdfYXJyYXlfZnJlZSAoZGVtdXgtPmZpbGVwb3NpdGlvbnMsIFRSVUUpOwotICAgIGRlbXV4LT5maWxlcG9zaXRpb25zID0gTlVMTDsKLSAgfQotCi0gIEdTVF9DQUxMX1BBUkVOVCAoR19PQkpFQ1RfQ0xBU1MsIGRpc3Bvc2UsIChvYmplY3QpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfZGVtdXhfY2xhc3NfaW5pdCAoR3N0Rmx2RGVtdXhDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfZmx2X2RlbXV4X2Rpc3Bvc2U7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X2RlbXV4X2NoYW5nZV9zdGF0ZSk7Ci0KLSNpZiAwCi0gIGdzdGVsZW1lbnRfY2xhc3MtPnNldF9pbmRleCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X2RlbXV4X3NldF9pbmRleCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmdldF9pbmRleCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X2RlbXV4X2dldF9pbmRleCk7Ci0jZW5kaWYKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZmbHZfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmF1ZGlvX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnZpZGVvX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJGTFYgRGVtdXhlciIsCi0gICAgICAiQ29kZWMvRGVtdXhlciIsICJEZW11eCBGTFYgZmVlZHMgaW50byBkaWdpdGFsIHN0cmVhbXMiLAotICAgICAgIkp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9kZW11eF9pbml0IChHc3RGbHZEZW11eCAqIGRlbXV4KQotewotICBkZW11eC0+c2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmZsdl9zaW5rX3RlbXBsYXRlLCAic2luayIpOwotCi0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChkZW11eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X2RlbXV4X3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGRlbXV4LT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHZfZGVtdXhfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKGRlbXV4LT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHZfZGVtdXhfc2lua19hY3RpdmF0ZSkpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKGRlbXV4LT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHZfZGVtdXhfc2lua19hY3RpdmF0ZV9tb2RlKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGRlbXV4KSwgZGVtdXgtPnNpbmtwYWQpOwotCi0gIGRlbXV4LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBkZW11eC0+Zmxvd2NvbWJpbmVyID0gZ3N0X2Zsb3dfY29tYmluZXJfbmV3ICgpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmZGVtdXgtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgZGVtdXgtPm93bl9pbmRleCA9IEZBTFNFOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGRlbXV4LCBHU1RfRUxFTUVOVF9GTEFHX0lOREVYQUJMRSk7Ci0KLSAgZ3N0X2Zsdl9kZW11eF9jbGVhbnVwIChkZW11eCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGZsdmRlbXV4X2RlYnVnLCAiZmx2ZGVtdXgiLCAwLCAiRkxWIGRlbXV4ZXIiKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJmbHZkZW11eCIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgZ3N0X2Zsdl9kZW11eF9nZXRfdHlwZSAoKSkgfHwKLSAgICAgICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZmx2bXV4IiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBnc3RfZmx2X211eF9nZXRfdHlwZSAoKSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGZsdiwgIkZMViBtdXhpbmcgYW5kIGRlbXV4aW5nIHBsdWdpbiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2Zsdi9nc3RmbHZkZW11eC5oIGIvZ3N0L2Zsdi9nc3RmbHZkZW11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWIxNzkxLi4wMDAwMDAwCi0tLSBhL2dzdC9mbHYvZ3N0Zmx2ZGVtdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IEp1bGllbiBNb3V0dGUgPGp1bGllbkBtb3V0dGUubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19GTFZfREVNVVhfSF9fCi0jZGVmaW5lIF9fRkxWX0RFTVVYX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KLSNpbmNsdWRlICJnc3RpbmRleC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX0ZMVl9ERU1VWCBcCi0gIChnc3RfZmx2X2RlbXV4X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GTFZfREVNVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9GTFZfREVNVVgsR3N0Rmx2RGVtdXgpKQotI2RlZmluZSBHU1RfRkxWX0RFTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0ZMVl9ERU1VWCxHc3RGbHZEZW11eENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0ZMVl9ERU1VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0ZMVl9ERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19GTFZfREVNVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfRkxWX0RFTVVYKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RGbHZEZW11eCBHc3RGbHZEZW11eDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RGbHZEZW11eENsYXNzIEdzdEZsdkRlbXV4Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBGTFZfU1RBVEVfSEVBREVSLAotICBGTFZfU1RBVEVfVEFHX1RZUEUsCi0gIEZMVl9TVEFURV9UQUdfVklERU8sCi0gIEZMVl9TVEFURV9UQUdfQVVESU8sCi0gIEZMVl9TVEFURV9UQUdfU0NSSVBULAotICBGTFZfU1RBVEVfU0VFSywKLSAgRkxWX1NUQVRFX0RPTkUsCi0gIEZMVl9TVEFURV9TS0lQLAotICBGTFZfU1RBVEVfTk9ORQotfSBHc3RGbHZEZW11eFN0YXRlOwotCi1zdHJ1Y3QgX0dzdEZsdkRlbXV4Ci17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICBHc3RQYWQgKnNpbmtwYWQ7Ci0KLSAgR3N0UGFkICphdWRpb19wYWQ7Ci0gIEdzdFBhZCAqdmlkZW9fcGFkOwotCi0gIGdib29sZWFuIGhhdmVfZ3JvdXBfaWQ7Ci0gIGd1aW50IGdyb3VwX2lkOwotCi0gIC8qIDxwcml2YXRlPiAqLwotICAKLSAgR3N0SW5kZXggKmluZGV4OwotICBnaW50IGluZGV4X2lkOwotICBnYm9vbGVhbiBvd25faW5kZXg7Ci0gIAotICBHQXJyYXkgKiB0aW1lczsKLSAgR0FycmF5ICogZmlsZXBvc2l0aW9uczsKLQotICBHc3RBZGFwdGVyICphZGFwdGVyOwotCi0gIEdzdEZsb3dDb21iaW5lciAqZmxvd2NvbWJpbmVyOwotCi0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBHc3RFdmVudCAqbmV3X3NlZ19ldmVudDsKLQotICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICBHc3RUYWdMaXN0ICphdWRpb190YWdzOwotICBHc3RUYWdMaXN0ICp2aWRlb190YWdzOwotCi0gIEdzdEZsdkRlbXV4U3RhdGUgc3RhdGU7Ci0KLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0gIGd1aW50NjQgY3VyX3RhZ19vZmZzZXQ7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgZ3VpbnQ2NCB0YWdfc2l6ZTsKLSAgZ3VpbnQ2NCB0YWdfZGF0YV9zaXplOwotCi0gIC8qIEF1ZGlvIGluZm9zICovCi0gIGd1aW50MTYgcmF0ZTsKLSAgZ3VpbnQxNiBjaGFubmVsczsKLSAgZ3VpbnQxNiB3aWR0aDsKLSAgZ3VpbnQxNiBhdWRpb19jb2RlY190YWc7Ci0gIGd1aW50NjQgYXVkaW9fb2Zmc2V0OwotICBnYm9vbGVhbiBhdWRpb19uZWVkX2Rpc2NvbnQ7Ci0gIGdib29sZWFuIGF1ZGlvX25lZWRfc2VnbWVudDsKLSAgZ2Jvb2xlYW4gYXVkaW9fbGlua2VkOwotICBHc3RCdWZmZXIgKiBhdWRpb19jb2RlY19kYXRhOwotICBHc3RDbG9ja1RpbWUgYXVkaW9fc3RhcnQ7Ci0gIGd1aW50MzIgbGFzdF9hdWRpb19wdHM7Ci0gIEdzdENsb2NrVGltZSBhdWRpb190aW1lX29mZnNldDsKLQotICAvKiBWaWRlbyBpbmZvcyAqLwotICBndWludDMyIHc7Ci0gIGd1aW50MzIgaDsKLSAgZ3VpbnQzMiBwYXJfeDsKLSAgZ3VpbnQzMiBwYXJfeTsKLSAgZ3VpbnQxNiB2aWRlb19jb2RlY190YWc7Ci0gIGd1aW50NjQgdmlkZW9fb2Zmc2V0OwotICBnYm9vbGVhbiB2aWRlb19uZWVkX2Rpc2NvbnQ7Ci0gIGdib29sZWFuIHZpZGVvX25lZWRfc2VnbWVudDsKLSAgZ2Jvb2xlYW4gdmlkZW9fbGlua2VkOwotICBnYm9vbGVhbiBnb3RfcGFyOwotICBHc3RCdWZmZXIgKiB2aWRlb19jb2RlY19kYXRhOwotICBHc3RDbG9ja1RpbWUgdmlkZW9fc3RhcnQ7Ci0gIGd1aW50MzIgbGFzdF92aWRlb19kdHM7Ci0gIEdzdENsb2NrVGltZSB2aWRlb190aW1lX29mZnNldDsKLSAgZ2RvdWJsZSBmcmFtZXJhdGU7Ci0KLSAgZ2Jvb2xlYW4gcmFuZG9tX2FjY2VzczsKLSAgZ2Jvb2xlYW4gbmVlZF9oZWFkZXI7Ci0gIGdib29sZWFuIGhhc19hdWRpbzsKLSAgZ2Jvb2xlYW4gaGFzX3ZpZGVvOwotICBnYm9vbGVhbiBzdHJpY3Q7Ci0gIGdib29sZWFuIGZsdXNoaW5nOwotCi0gIGdib29sZWFuIG5vX21vcmVfcGFkczsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9ERUJVRwotICBnYm9vbGVhbiBub19hdWRpb193YXJuZWQ7Ci0gIGdib29sZWFuIG5vX3ZpZGVvX3dhcm5lZDsKLSNlbmRpZgotCi0gIGdib29sZWFuIHNlZWtpbmc7Ci0gIGdib29sZWFuIGJ1aWxkaW5nX2luZGV4OwotICBnYm9vbGVhbiBpbmRleGVkOyAvKiBUUlVFIGlmIGluZGV4IGlzIGNvbXBsZXRlbHkgYnVpbHQgKi8KLSAgZ2Jvb2xlYW4gdXBzdHJlYW1fc2Vla2FibGU7IC8qIFRSVUUgaWYgdXBzdHJlYW0gaXMgc2Vla2FibGUgKi8KLSAgZ2ludDY0IGZpbGVfc2l6ZTsKLSAgR3N0RXZlbnQgKnNlZWtfZXZlbnQ7Ci0gIGdpbnQ2NCBzZWVrX3RpbWU7Ci0KLSAgR3N0Q2xvY2tUaW1lIGluZGV4X21heF90aW1lOwotICBnaW50NjQgaW5kZXhfbWF4X3BvczsKLQotICAvKiByZXZlcnNlIHBsYXliYWNrICovCi0gIEdzdENsb2NrVGltZSB2aWRlb19maXJzdF90czsKLSAgR3N0Q2xvY2tUaW1lIGF1ZGlvX2ZpcnN0X3RzOwotICBnYm9vbGVhbiB2aWRlb19kb25lOwotICBnYm9vbGVhbiBhdWRpb19kb25lOwotICBnaW50NjQgZnJvbV9vZmZzZXQ7Ci0gIGdpbnQ2NCB0b19vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgX0dzdEZsdkRlbXV4Q2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9mbHZfZGVtdXhfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fRkxWX0RFTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2Zsdi9nc3RmbHZtdXguYyBiL2dzdC9mbHYvZ3N0Zmx2bXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzhmOTMuLjAwMDAwMDAKLS0tIGEvZ3N0L2Zsdi9nc3RmbHZtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDE3NDkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4LDIwMDkgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZmx2bXV4Ci0gKgotICogZmx2bXV4IG11eGVzIGRpZmZlcmVudCBzdHJlYW1zIGludG8gYW4gRkxWIGZpbGUuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZsdm11eCBuYW1lPW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QuZmx2ICBhdWRpb3Rlc3RzcmMgc2FtcGxlc3BlcmJ1ZmZlcj00NDEwMCBudW0tYnVmZmVycz0xMCAhIGZhYWMgISBtdXguICB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MjUwICEgdmlkZW8veC1yYXcsZnJhbWVyYXRlPTI1LzEgISB4MjY0ZW5jICEgbXV4LgotICogXXwgVGhpcyBwaXBlbGluZSBlbmNvZGVzIGEgdGVzdCBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtIGFuZCBtdXhlcyBib3RoIGludG8gYW4gRkxWIGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ3N0Zmx2bXV4LmgiCi0jaW5jbHVkZSAiYW1mZGVmcy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChmbHZtdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZmx2bXV4X2RlYnVnCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NUUkVBTUFCTEUKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9TVFJFQU1BQkxFIEZBTFNFCi0jZGVmaW5lIE1BWF9JTkRFWF9FTlRSSUVTIDEyOAotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtZmx2IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9zaW5rX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJ2aWRlbyIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LWZsYXNoLXZpZGVvOyAiCi0gICAgICAgICJ2aWRlby94LWZsYXNoLXNjcmVlbjsgIgotICAgICAgICAidmlkZW8veC12cDYtZmxhc2g7ICIgInZpZGVvL3gtdnA2LWFscGhhOyAiCi0gICAgICAgICJ2aWRlby94LWgyNjQsIHN0cmVhbS1mb3JtYXQ9YXZjOyIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvc2lua190ZW1wbCA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgiYXVkaW8iLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTCi0gICAgKCJhdWRpby94LWFkcGNtLCBsYXlvdXQgPSAoc3RyaW5nKSBzd2YsIGNoYW5uZWxzID0gKGludCkgeyAxLCAyIH0sIHJhdGUgPSAoaW50KSB7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgIgotICAgICAgICAiYXVkaW8vbXBlZywgbXBlZ3ZlcnNpb24gPSAoaW50KSAxLCBsYXllciA9IChpbnQpIDMsIGNoYW5uZWxzID0gKGludCkgeyAxLCAyIH0sIHJhdGUgPSAoaW50KSB7IDU1MTIsIDgwMDAsIDExMDI1LCAyMjA1MCwgNDQxMDAgfSwgcGFyc2VkID0gKGJvb2xlYW4pIFRSVUU7ICIKLSAgICAgICAgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uID0gKGludCkgeyA0LCAyIH0sIHN0cmVhbS1mb3JtYXQgPSAoc3RyaW5nKSByYXc7ICIKLSAgICAgICAgImF1ZGlvL3gtbmVsbHltb3NlciwgY2hhbm5lbHMgPSAoaW50KSB7IDEsIDIgfSwgcmF0ZSA9IChpbnQpIHsgNTUxMiwgODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgNDQxMDAgfTsgIgotICAgICAgICAiYXVkaW8veC1yYXcsIGZvcm1hdCA9IChzdHJpbmcpIHsgVTgsIFMxNkxFfSwgbGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsIGNoYW5uZWxzID0gKGludCkgeyAxLCAyIH0sIHJhdGUgPSAoaW50KSB7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgIgotICAgICAgICAiYXVkaW8veC1hbGF3LCBjaGFubmVscyA9IChpbnQpIHsgMSwgMiB9LCByYXRlID0gKGludCkgeyA1NTEyLCAxMTAyNSwgMjIwNTAsIDQ0MTAwIH07ICIKLSAgICAgICAgImF1ZGlvL3gtbXVsYXcsIGNoYW5uZWxzID0gKGludCkgeyAxLCAyIH0sIHJhdGUgPSAoaW50KSB7IDU1MTIsIDExMDI1LCAyMjA1MCwgNDQxMDAgfTsgIgotICAgICAgICAiYXVkaW8veC1zcGVleCwgY2hhbm5lbHMgPSAoaW50KSAxLCByYXRlID0gKGludCkgMTYwMDA7IikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9mbHZfbXV4X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RGbHZNdXgsIGdzdF9mbHZfbXV4LCBHU1RfVFlQRV9FTEVNRU5ULAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVEFHX1NFVFRFUiwgTlVMTCkpOwotCi1zdGF0aWMgdm9pZCBnc3RfZmx2X211eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Zsdl9tdXhfaGFuZGxlX2J1ZmZlciAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGNkYXRhLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZiwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Zsdl9tdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIEdzdEV2ZW50ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZmx2X211eF9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RQYWQgKmdzdF9mbHZfbXV4X3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiByZXFfbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X2Zsdl9tdXhfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2Zsdl9tdXhfdmlkZW9fcGFkX3NldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIGdib29sZWFuIGdzdF9mbHZfbXV4X2F1ZGlvX3BhZF9zZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIHZvaWQgZ3N0X2Zsdl9tdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2Zsdl9tdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9mbHZfbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZCBnc3RfZmx2X211eF9yZXNldCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIHZvaWQgZ3N0X2Zsdl9tdXhfcmVzZXRfcGFkIChHc3RGbHZNdXggKiBtdXgsIEdzdEZsdlBhZCAqIHBhZCwKLSAgICBnYm9vbGVhbiB2aWRlbyk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdkb3VibGUgcG9zaXRpb247Ci0gIGdkb3VibGUgdGltZTsKLX0gR3N0Rmx2TXV4SW5kZXhFbnRyeTsKLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfbXV4X2luZGV4X2VudHJ5X2ZyZWUgKEdzdEZsdk11eEluZGV4RW50cnkgKiBlbnRyeSkKLXsKLSAgZ19zbGljZV9mcmVlIChHc3RGbHZNdXhJbmRleEVudHJ5LCBlbnRyeSk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotX2dzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdwb2ludGVyIG1lbSwgZ3NpemUgc2l6ZSwgR0ZyZWVGdW5jIGZyZWVfZnVuYykKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmLAotICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoZnJlZV9mdW5jID8gMCA6IEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgICAgICBtZW0sIHNpemUsIDAsIHNpemUsIG1lbSwgZnJlZV9mdW5jKSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIHZvaWQKLV9nc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGdzaXplIHNpemUsIEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50OCAqKiBkYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChkYXRhICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChidWZmZXIgIT0gTlVMTCk7Ci0KLSAgKmRhdGEgPSBnX21hbGxvYyAoc2l6ZSk7Ci0gICpidWZmZXIgPSBfZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoKmRhdGEsIHNpemUsIGdfZnJlZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X211eF9jbGlwX3J1bm5pbmdfdGltZSAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogY2RhdGEsIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0QnVmZmVyICoqIG91dGJ1ZiwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmKTsKLQotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChHU1RfQlVGRkVSX1BUUyAoYnVmKSkpCi0gICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBHU1RfQlVGRkVSX0RUUyAoYnVmKTsKLQotICByZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19jbGlwX3J1bm5pbmdfdGltZSAocGFkcywgY2RhdGEsIGJ1Ziwgb3V0YnVmLAotICAgICAgdXNlcl9kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfbXV4X2NsYXNzX2luaXQgKEdzdEZsdk11eENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChmbHZtdXhfZGVidWcsICJmbHZtdXgiLCAwLCAiRkxWIG11eGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9mbHZfbXV4X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2Zsdl9tdXhfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9mbHZfbXV4X2ZpbmFsaXplOwotCi0gIC8qIEZJWE1FOiBpZGVhbGx5IHRoZSByaWdodCBtb2RlIG9mIG9wZXJhdGlvbiBzaG91bGQgYmUgZGV0ZWN0ZWQKLSAgICogYXV0b21hdGljYWxseSB1c2luZyBxdWVyaWVzIHdoZW4gcGFyYW1ldGVyIG5vdCBzcGVjaWZpZWQuICovCi0gIC8qKgotICAgKiBHc3RGbHZNdXg6c3RyZWFtYWJsZQotICAgKgotICAgKiBJZiBUcnVlLCB0aGUgb3V0cHV0IHdpbGwgYmUgc3RyZWFtaW5nIGZyaWVuZGx5LiAoaWUgd2l0aG91dCBpbmRleGVzIGFuZAotICAgKiBkdXJhdGlvbikKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RSRUFNQUJMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic3RyZWFtYWJsZSIsICJzdHJlYW1hYmxlIiwKLSAgICAgICAgICAiSWYgc2V0IHRvIHRydWUsIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGFzIGlmIGl0IGlzIHRvIGJlIHN0cmVhbWVkICIKLSAgICAgICAgICAiYW5kIGhlbmNlIG5vIGluZGV4ZXMgd3JpdHRlbiBvciBkdXJhdGlvbiB3cml0dGVuLiIsCi0gICAgICAgICAgREVGQVVMVF9TVFJFQU1BQkxFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2Zsdl9tdXhfY2hhbmdlX3N0YXRlKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X211eF9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx2X211eF9yZWxlYXNlX3BhZCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmdmlkZW9zaW5rX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmYXVkaW9zaW5rX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGwpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiRkxWIG11eGVyIiwKLSAgICAgICJDb2RlYy9NdXhlciIsCi0gICAgICAiTXV4ZXMgdmlkZW8vYXVkaW8gc3RyZWFtcyBpbnRvIGEgRkxWIHN0cmVhbSIsCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGZsdm11eF9kZWJ1ZywgImZsdm11eCIsIDAsICJGTFYgbXV4ZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfbXV4X2luaXQgKEdzdEZsdk11eCAqIG11eCkKLXsKLSAgbXV4LT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY190ZW1wbCwgInNyYyIpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXV4LT5zcmNwYWQsIGdzdF9mbHZfbXV4X2hhbmRsZV9zcmNfZXZlbnQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAobXV4KSwgbXV4LT5zcmNwYWQpOwotCi0gIC8qIHByb3BlcnR5ICovCi0gIG11eC0+c3RyZWFtYWJsZSA9IERFRkFVTFRfU1RSRUFNQUJMRTsKLQotICBtdXgtPm5ld190YWdzID0gRkFMU0U7Ci0KLSAgbXV4LT5jb2xsZWN0ID0gZ3N0X2NvbGxlY3RfcGFkc19uZXcgKCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2J1ZmZlcl9mdW5jdGlvbiAobXV4LT5jb2xsZWN0LAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHZfbXV4X2hhbmRsZV9idWZmZXIpLCBtdXgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9ldmVudF9mdW5jdGlvbiAobXV4LT5jb2xsZWN0LAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHZfbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSwgbXV4KTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfY2xpcF9mdW5jdGlvbiAobXV4LT5jb2xsZWN0LAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHZfbXV4X2NsaXBfcnVubmluZ190aW1lKSwgbXV4KTsKLQotICBnc3RfZmx2X211eF9yZXNldCAoR1NUX0VMRU1FTlQgKG11eCkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9tdXhfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEZsdk11eCAqbXV4ID0gR1NUX0ZMVl9NVVggKG9iamVjdCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobXV4LT5jb2xsZWN0KTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZmx2X211eF9yZXNldCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEZsdk11eCAqbXV4ID0gR1NUX0ZMVl9NVVggKGVsZW1lbnQpOwotICBHU0xpc3QgKnNsOwotCi0gIGZvciAoc2wgPSBtdXgtPmNvbGxlY3QtPmRhdGE7IHNsICE9IE5VTEw7IHNsID0gZ19zbGlzdF9uZXh0IChzbCkpIHsKLSAgICBHc3RGbHZQYWQgKmNwYWQgPSAoR3N0Rmx2UGFkICopIHNsLT5kYXRhOwotCi0gICAgZ3N0X2Zsdl9tdXhfcmVzZXRfcGFkIChtdXgsIGNwYWQsIGNwYWQtPnZpZGVvKTsKLSAgfQotCi0gIGdfbGlzdF9mb3JlYWNoIChtdXgtPmluZGV4LCAoR0Z1bmMpIGdzdF9mbHZfbXV4X2luZGV4X2VudHJ5X2ZyZWUsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAobXV4LT5pbmRleCk7Ci0gIG11eC0+aW5kZXggPSBOVUxMOwotICBtdXgtPmJ5dGVfY291bnQgPSAwOwotCi0gIG11eC0+aGF2ZV9hdWRpbyA9IG11eC0+aGF2ZV92aWRlbyA9IEZBTFNFOwotICBtdXgtPmR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgbXV4LT5uZXdfdGFncyA9IEZBTFNFOwotICBtdXgtPmZpcnN0X3RpbWVzdGFtcCA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotCi0gIG11eC0+c3RhdGUgPSBHU1RfRkxWX01VWF9TVEFURV9IRUFERVI7Ci0KLSAgLyogdGFncyAqLwotICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIChHU1RfVEFHX1NFVFRFUiAobXV4KSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Zsdl9tdXhfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RXZlbnRUeXBlIHR5cGU7Ci0KLSAgdHlwZSA9IGV2ZW50ID8gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA6IEdTVF9FVkVOVF9VTktOT1dOOwotCi0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgICAvKiBkaXNhYmxlIHNlZWtpbmcgZm9yIG5vdyAqLwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLS8qIEV4dHJhY3QgcGVyLWNvZGVjIHJlbGV2YW50IHRhZ3MgZm9yCi0gKiBpbnNlcnRpb24gaW50byB0aGUgbWV0YWRhdGEgbGF0ZXIgLSBpZSBiaXRyYXRlLAotICogYnV0IG1heWJlIG90aGVycyBpbiB0aGUgZnV0dXJlICovCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9tdXhfc3RvcmVfY29kZWNfdGFncyAoR3N0Rmx2TXV4ICogbXV4LAotICAgIEdzdEZsdlBhZCAqIGZsdnBhZCwgR3N0VGFnTGlzdCAqIGxpc3QpCi17Ci0gIC8qIExvb2sgZm9yIGEgYml0cmF0ZSBhcyBlaXRoZXIgbm9taW5hbCBvciBhY3R1YWwgYml0cmF0ZSB0YWcgKi8KLSAgaWYgKGdzdF90YWdfbGlzdF9nZXRfdWludCAobGlzdCwgR1NUX1RBR19OT01JTkFMX0JJVFJBVEUsICZmbHZwYWQtPmJpdHJhdGUpIHx8Ci0gICAgICBnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKGxpc3QsIEdTVF9UQUdfQklUUkFURSwgJmZsdnBhZC0+Yml0cmF0ZSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJTdG9yZWQgYml0cmF0ZSBmb3IgcGFkICUiIEdTVF9QVFJfRk9STUFUICIgPSAldSIsCi0gICAgICAgIGZsdnBhZCwgZmx2cGFkLT5iaXRyYXRlKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbHZfbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKLSAgICBHc3RFdmVudCAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEZsdk11eCAqbXV4ID0gR1NUX0ZMVl9NVVggKHVzZXJfZGF0YSk7Ci0gIEdzdEZsdlBhZCAqZmx2cGFkID0gKEdzdEZsdlBhZCAqKSBkYXRhOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0KLSAgICAgIC8qIGZpbmQgc3RyZWFtIGRhdGEgKi8KLSAgICAgIGdfYXNzZXJ0IChmbHZwYWQpOwotCi0gICAgICBpZiAoZmx2cGFkLT52aWRlbykgewotICAgICAgICByZXQgPSBnc3RfZmx2X211eF92aWRlb19wYWRfc2V0Y2FwcyAoZGF0YS0+cGFkLCBjYXBzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldCA9IGdzdF9mbHZfbXV4X2F1ZGlvX3BhZF9zZXRjYXBzIChkYXRhLT5wYWQsIGNhcHMpOwotICAgICAgfQotICAgICAgLyogYW5kIGVhdCAqLwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOnsKLSAgICAgIEdzdFRhZ0xpc3QgKmxpc3Q7Ci0gICAgICBHc3RUYWdTZXR0ZXIgKnNldHRlciA9IEdTVF9UQUdfU0VUVEVSIChtdXgpOwotICAgICAgY29uc3QgR3N0VGFnTWVyZ2VNb2RlIG1vZGUgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX21lcmdlX21vZGUgKHNldHRlcik7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmbGlzdCk7Ci0gICAgICBnc3RfdGFnX3NldHRlcl9tZXJnZV90YWdzIChzZXR0ZXIsIGxpc3QsIG1vZGUpOwotICAgICAgZ3N0X2Zsdl9tdXhfc3RvcmVfY29kZWNfdGFncyAobXV4LCBmbHZwYWQsIGxpc3QpOwotICAgICAgbXV4LT5uZXdfdGFncyA9IFRSVUU7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGV2ZW50ICE9IE5VTEwpCi0gICAgcmV0dXJuIGdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdCAocGFkcywgZGF0YSwgZXZlbnQsIEZBTFNFKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbHZfbXV4X3ZpZGVvX3BhZF9zZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RGbHZNdXggKm11eCA9IEdTVF9GTFZfTVVYIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBHc3RGbHZQYWQgKmNwYWQgPSAoR3N0Rmx2UGFkICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoc3RyY21wIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKSwgInZpZGVvL3gtZmxhc2gtdmlkZW8iKSA9PSAwKSB7Ci0gICAgY3BhZC0+dmlkZW9fY29kZWMgPSAyOwotICB9IGVsc2UgaWYgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJ2aWRlby94LWZsYXNoLXNjcmVlbiIpID09IDApIHsKLSAgICBjcGFkLT52aWRlb19jb2RlYyA9IDM7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKSwgInZpZGVvL3gtdnA2LWZsYXNoIikgPT0gMCkgewotICAgIGNwYWQtPnZpZGVvX2NvZGVjID0gNDsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAidmlkZW8veC12cDYtYWxwaGEiKSA9PSAwKSB7Ci0gICAgY3BhZC0+dmlkZW9fY29kZWMgPSA1OwotICB9IGVsc2UgaWYgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJ2aWRlby94LWgyNjQiKSA9PSAwKSB7Ci0gICAgY3BhZC0+dmlkZW9fY29kZWMgPSA3OwotICB9IGVsc2UgewotICAgIHJldCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKHJldCAmJiBnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgImNvZGVjX2RhdGEiKSkgewotICAgIGNvbnN0IEdWYWx1ZSAqdmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJjb2RlY19kYXRhIik7Ci0KLSAgICBpZiAodmFsKQotICAgICAgY3BhZC0+dmlkZW9fY29kZWNfZGF0YSA9IGdzdF9idWZmZXJfcmVmIChnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsKSk7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChtdXgpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2Zsdl9tdXhfYXVkaW9fcGFkX3NldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEZsdk11eCAqbXV4ID0gR1NUX0ZMVl9NVVggKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0gIEdzdEZsdlBhZCAqY3BhZCA9IChHc3RGbHZQYWQgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIGlmIChzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAiYXVkaW8veC1hZHBjbSIpID09IDApIHsKLSAgICBjb25zdCBnY2hhciAqbGF5b3V0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAibGF5b3V0Iik7Ci0gICAgaWYgKGxheW91dCAmJiBzdHJjbXAgKGxheW91dCwgInN3ZiIpID09IDApIHsKLSAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgaWYgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJhdWRpby9tcGVnIikgPT0gMCkgewotICAgIGdpbnQgbXBlZ3ZlcnNpb247Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAibXBlZ3ZlcnNpb24iLCAmbXBlZ3ZlcnNpb24pKSB7Ci0gICAgICBpZiAobXBlZ3ZlcnNpb24gPT0gMSkgewotICAgICAgICBnaW50IGxheWVyOwotCi0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJsYXllciIsICZsYXllcikgJiYgbGF5ZXIgPT0gMykgewotICAgICAgICAgIGdpbnQgcmF0ZTsKLQotICAgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJyYXRlIiwgJnJhdGUpICYmIHJhdGUgPT0gODAwMCkKLSAgICAgICAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjID0gMTQ7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY3BhZC0+YXVkaW9fY29kZWMgPSAyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKG1wZWd2ZXJzaW9uID09IDQgfHwgbXBlZ3ZlcnNpb24gPT0gMikgewotICAgICAgICBjcGFkLT5hdWRpb19jb2RlYyA9IDEwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAiYXVkaW8veC1uZWxseW1vc2VyIikgPT0gMCkgewotICAgIGdpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicmF0ZSIsICZyYXRlKQotICAgICAgICAmJiBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZjaGFubmVscykpIHsKLSAgICAgIGlmIChjaGFubmVscyA9PSAxICYmIHJhdGUgPT0gMTYwMDApCi0gICAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjID0gNDsKLSAgICAgIGVsc2UgaWYgKGNoYW5uZWxzID09IDEgJiYgcmF0ZSA9PSA4MDAwKQotICAgICAgICBjcGFkLT5hdWRpb19jb2RlYyA9IDU7Ci0gICAgICBlbHNlCi0gICAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjID0gNjsKLSAgICB9IGVsc2UgewotICAgICAgY3BhZC0+YXVkaW9fY29kZWMgPSA2OwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAiYXVkaW8veC1yYXciKSA9PSAwKSB7Ci0gICAgR3N0QXVkaW9JbmZvIGluZm87Ci0KLSAgICBpZiAoZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpIHsKLSAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjID0gMzsKLQotICAgICAgaWYgKEdTVF9BVURJT19JTkZPX1dJRFRIICgmaW5mbykgPT0gOCkKLSAgICAgICAgY3BhZC0+d2lkdGggPSAwOwotICAgICAgZWxzZSBpZiAoR1NUX0FVRElPX0lORk9fV0lEVEggKCZpbmZvKSA9PSAxNikKLSAgICAgICAgY3BhZC0+d2lkdGggPSAxOwotICAgICAgZWxzZQotICAgICAgICByZXQgPSBGQUxTRTsKLSAgICB9IGVsc2UKLSAgICAgIHJldCA9IEZBTFNFOwotICB9IGVsc2UgaWYgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJhdWRpby94LWFsYXciKSA9PSAwKSB7Ci0gICAgY3BhZC0+YXVkaW9fY29kZWMgPSA3OwotICB9IGVsc2UgaWYgKHN0cmNtcCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyksICJhdWRpby94LW11bGF3IikgPT0gMCkgewotICAgIGNwYWQtPmF1ZGlvX2NvZGVjID0gODsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAiYXVkaW8veC1zcGVleCIpID09IDApIHsKLSAgICBjcGFkLT5hdWRpb19jb2RlYyA9IDExOwotICB9IGVsc2UgewotICAgIHJldCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKHJldCkgewotICAgIGdpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicmF0ZSIsICZyYXRlKSkgewotICAgICAgaWYgKGNwYWQtPmF1ZGlvX2NvZGVjID09IDEwKQotICAgICAgICBjcGFkLT5yYXRlID0gMzsKLSAgICAgIGVsc2UgaWYgKHJhdGUgPT0gNTUxMikKLSAgICAgICAgY3BhZC0+cmF0ZSA9IDA7Ci0gICAgICBlbHNlIGlmIChyYXRlID09IDExMDI1KQotICAgICAgICBjcGFkLT5yYXRlID0gMTsKLSAgICAgIGVsc2UgaWYgKHJhdGUgPT0gMjIwNTApCi0gICAgICAgIGNwYWQtPnJhdGUgPSAyOwotICAgICAgZWxzZSBpZiAocmF0ZSA9PSA0NDEwMCkKLSAgICAgICAgY3BhZC0+cmF0ZSA9IDM7Ci0gICAgICBlbHNlIGlmIChyYXRlID09IDgwMDAgJiYgKGNwYWQtPmF1ZGlvX2NvZGVjID09IDUKLSAgICAgICAgICAgICAgfHwgY3BhZC0+YXVkaW9fY29kZWMgPT0gMTQpKQotICAgICAgICBjcGFkLT5yYXRlID0gMDsKLSAgICAgIGVsc2UgaWYgKHJhdGUgPT0gMTYwMDAgJiYgKGNwYWQtPmF1ZGlvX2NvZGVjID09IDQKLSAgICAgICAgICAgICAgfHwgY3BhZC0+YXVkaW9fY29kZWMgPT0gMTEpKQotICAgICAgICBjcGFkLT5yYXRlID0gMDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgfSBlbHNlIGlmIChjcGFkLT5hdWRpb19jb2RlYyA9PSAxMCkgewotICAgICAgY3BhZC0+cmF0ZSA9IDM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgIH0KLQotICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZjaGFubmVscykpIHsKLSAgICAgIGlmIChjcGFkLT5hdWRpb19jb2RlYyA9PSA0IHx8IGNwYWQtPmF1ZGlvX2NvZGVjID09IDUKLSAgICAgICAgICB8fCBjcGFkLT5hdWRpb19jb2RlYyA9PSA2IHx8IGNwYWQtPmF1ZGlvX2NvZGVjID09IDExKQotICAgICAgICBjcGFkLT5jaGFubmVscyA9IDA7Ci0gICAgICBlbHNlIGlmIChjcGFkLT5hdWRpb19jb2RlYyA9PSAxMCkKLSAgICAgICAgY3BhZC0+Y2hhbm5lbHMgPSAxOwotICAgICAgZWxzZSBpZiAoY2hhbm5lbHMgPT0gMSkKLSAgICAgICAgY3BhZC0+Y2hhbm5lbHMgPSAwOwotICAgICAgZWxzZSBpZiAoY2hhbm5lbHMgPT0gMikKLSAgICAgICAgY3BhZC0+Y2hhbm5lbHMgPSAxOwotICAgICAgZWxzZQotICAgICAgICByZXQgPSBGQUxTRTsKLSAgICB9IGVsc2UgaWYgKGNwYWQtPmF1ZGlvX2NvZGVjID09IDQgfHwgY3BhZC0+YXVkaW9fY29kZWMgPT0gNQotICAgICAgICB8fCBjcGFkLT5hdWRpb19jb2RlYyA9PSA2KSB7Ci0gICAgICBjcGFkLT5jaGFubmVscyA9IDA7Ci0gICAgfSBlbHNlIGlmIChjcGFkLT5hdWRpb19jb2RlYyA9PSAxMCkgewotICAgICAgY3BhZC0+Y2hhbm5lbHMgPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAoY3BhZC0+YXVkaW9fY29kZWMgIT0gMykKLSAgICAgIGNwYWQtPndpZHRoID0gMTsKLSAgfQotCi0gIGlmIChyZXQgJiYgZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHMsICJjb2RlY19kYXRhIikpIHsKLSAgICBjb25zdCBHVmFsdWUgKnZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiY29kZWNfZGF0YSIpOwotCi0gICAgaWYgKHZhbCkKLSAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjX2RhdGEgPSBnc3RfYnVmZmVyX3JlZiAoZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbCkpOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobXV4KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9tdXhfcmVzZXRfcGFkIChHc3RGbHZNdXggKiBtdXgsIEdzdEZsdlBhZCAqIGNwYWQsIGdib29sZWFuIHZpZGVvKQotewotICBjcGFkLT52aWRlbyA9IHZpZGVvOwotCi0gIGlmIChjcGFkLT5hdWRpb19jb2RlY19kYXRhKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGNwYWQtPmF1ZGlvX2NvZGVjX2RhdGEpOwotICBjcGFkLT5hdWRpb19jb2RlY19kYXRhID0gTlVMTDsKLSAgY3BhZC0+YXVkaW9fY29kZWMgPSBHX01BWFVJTlQ7Ci0gIGNwYWQtPnJhdGUgPSBHX01BWFVJTlQ7Ci0gIGNwYWQtPndpZHRoID0gR19NQVhVSU5UOwotICBjcGFkLT5jaGFubmVscyA9IEdfTUFYVUlOVDsKLQotICBpZiAoY3BhZC0+dmlkZW9fY29kZWNfZGF0YSkKLSAgICBnc3RfYnVmZmVyX3VucmVmIChjcGFkLT52aWRlb19jb2RlY19kYXRhKTsKLSAgY3BhZC0+dmlkZW9fY29kZWNfZGF0YSA9IE5VTEw7Ci0gIGNwYWQtPnZpZGVvX2NvZGVjID0gR19NQVhVSU5UOwotICBjcGFkLT5sYXN0X3RpbWVzdGFtcCA9IDA7Ci0gIGNwYWQtPnB0cyA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBjcGFkLT5kdHMgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfZmx2X211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogcmVxX25hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgR3N0Rmx2TXV4ICptdXggPSBHU1RfRkxWX01VWCAoZWxlbWVudCk7Ci0gIEdzdEZsdlBhZCAqY3BhZDsKLSAgR3N0UGFkICpwYWQgPSBOVUxMOwotICBjb25zdCBnY2hhciAqbmFtZSA9IE5VTEw7Ci0gIGdib29sZWFuIHZpZGVvOwotCi0gIGlmIChtdXgtPnN0YXRlICE9IEdTVF9GTFZfTVVYX1NUQVRFX0hFQURFUikgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiQ2FuJ3QgcmVxdWVzdCBwYWRzIGFmdGVyIHdyaXRpbmcgaGVhZGVyIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJhdWRpbyIpKSB7Ci0gICAgaWYgKG11eC0+aGF2ZV9hdWRpbykgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJBbHJlYWR5IGhhdmUgYW4gYXVkaW8gcGFkIik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbXV4LT5oYXZlX2F1ZGlvID0gVFJVRTsKLSAgICBuYW1lID0gImF1ZGlvIjsKLSAgICB2aWRlbyA9IEZBTFNFOwotICB9IGVsc2UgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAidmlkZW8iKSkgewotICAgIGlmIChtdXgtPmhhdmVfdmlkZW8pIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiQWxyZWFkeSBoYXZlIGEgdmlkZW8gcGFkIik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbXV4LT5oYXZlX3ZpZGVvID0gVFJVRTsKLSAgICBuYW1lID0gInZpZGVvIjsKLSAgICB2aWRlbyA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJJbnZhbGlkIHRlbXBsYXRlIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbCwgbmFtZSk7Ci0gIGNwYWQgPSAoR3N0Rmx2UGFkICopIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAobXV4LT5jb2xsZWN0LCBwYWQsCi0gICAgICBzaXplb2YgKEdzdEZsdlBhZCksIE5VTEwsIFRSVUUpOwotCi0gIGNwYWQtPmF1ZGlvX2NvZGVjX2RhdGEgPSBOVUxMOwotICBjcGFkLT52aWRlb19jb2RlY19kYXRhID0gTlVMTDsKLSAgZ3N0X2Zsdl9tdXhfcmVzZXRfcGFkIChtdXgsIGNwYWQsIHZpZGVvKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZCwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0KLSAgcmV0dXJuIHBhZDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfbXV4X3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RGbHZNdXggKm11eCA9IEdTVF9GTFZfTVVYIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0gIEdzdEZsdlBhZCAqY3BhZCA9IChHc3RGbHZQYWQgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotCi0gIGdzdF9mbHZfbXV4X3Jlc2V0X3BhZCAobXV4LCBjcGFkLCBjcGFkLT52aWRlbyk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAobXV4LT5jb2xsZWN0LCBwYWQpOwotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChlbGVtZW50LCBwYWQpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2Zsdl9tdXhfcHVzaCAoR3N0Rmx2TXV4ICogbXV4LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIC8qIHB1c2hpbmcgdGhlIGJ1ZmZlciB0aGF0IHJld3JpdGVzIHRoZSBoZWFkZXIgd2lsbCBtYWtlIGl0IG5vIGxvbmdlciBiZSB0aGUKLSAgICogdG90YWwgb3V0cHV0IHNpemUgaW4gYnl0ZXMsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhdCB0aGF0IHBvaW50ICovCi0gIG11eC0+Ynl0ZV9jb3VudCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotCi0gIHJldHVybiBnc3RfcGFkX3B1c2ggKG11eC0+c3JjcGFkLCBidWZmZXIpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9mbHZfbXV4X2NyZWF0ZV9oZWFkZXIgKEdzdEZsdk11eCAqIG11eCkKLXsKLSAgR3N0QnVmZmVyICpoZWFkZXI7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBfZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg5ICsgNCwgJmhlYWRlciwgJmRhdGEpOwotCi0gIGRhdGFbMF0gPSAnRic7Ci0gIGRhdGFbMV0gPSAnTCc7Ci0gIGRhdGFbMl0gPSAnVic7Ci0gIGRhdGFbM10gPSAweDAxOyAgICAgICAgICAgICAgIC8qIFZlcnNpb24gKi8KLQotICBkYXRhWzRdID0gKG11eC0+aGF2ZV9hdWRpbyA8PCAyKSB8IG11eC0+aGF2ZV92aWRlbzsgICAvKiBmbGFncyAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgNSwgOSk7ICAgIC8qIGRhdGEgb2Zmc2V0ICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyA5LCAwKTsgICAgLyogcHJldmlvdXMgdGFnIHNpemUgKi8KLQotICByZXR1cm4gaGVhZGVyOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9mbHZfbXV4X3ByZWFsbG9jYXRlX2luZGV4IChHc3RGbHZNdXggKiBtdXgpCi17Ci0gIEdzdEJ1ZmZlciAqdG1wOwotICBndWludDggKmRhdGE7Ci0gIGdpbnQgcHJlYWxsb2NhdGVfc2l6ZTsKLQotICAvKiBwcmVhbGxvY2F0ZSBpbmRleCBvZiBzaXplOgotICAgKiAgLSAna2V5ZnJhbWVzJyBFQ01BIGFycmF5IGtleTogMiArIDkgPSAxMSBieXRlcwotICAgKiAgLSBuZXN0ZWQgRUNNQSBhcnJheSBoZWFkZXIsIGxlbmd0aCBhbmQgZW5kIG1hcmtlcjogOCBieXRlcwotICAgKiAgLSAndGltZXMnIGFuZCAnZmlsZXBvc2l0aW9ucycga2V5czogMjIgYnl0ZXMKLSAgICogIC0gdHdvIHN0cmljdCBhcnJheXMgaGVhZGVycyBhbmQgbGVuZ3RoczogMTAgYnl0ZXMKLSAgICogIC0gZWFjaCBpbmRleCBlbnRyeTogMTggYnl0ZXMKLSAgICovCi0gIHByZWFsbG9jYXRlX3NpemUgPSAxMSArIDggKyAyMiArIDEwICsgTUFYX0lOREVYX0VOVFJJRVMgKiAxODsKLSAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAicHJlYWxsb2NhdGluZyAlZCBieXRlcyBmb3IgdGhlIGluZGV4IiwKLSAgICAgIHByZWFsbG9jYXRlX3NpemUpOwotCi0gIF9nc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHByZWFsbG9jYXRlX3NpemUsICZ0bXAsICZkYXRhKTsKLQotICAvKiBwcmVmaWxsIHRoZSBzcGFjZSB3aXRoIGEgZ3N0ZmlsbGVyOiA8c3BhY2VzPiBzY3JpcHQgdGFnIHZhcmlhYmxlICovCi0gIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIDkpOyAgICAgICAgLyogOSBjaGFyYWN0ZXJzICovCi0gIG1lbWNweSAoZGF0YSArIDIsICJnc3RmaWxsZXIiLCA5KTsKLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgMTEsIEFNRjBfU1RSSU5HX01BUktFUik7ICAgICAgLyogYSBzdHJpbmcgdmFsdWUgKi8KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSArIDEyLCBwcmVhbGxvY2F0ZV9zaXplIC0gMTQpOwotICBtZW1zZXQgKGRhdGEgKyAxNCwgJyAnLCBwcmVhbGxvY2F0ZV9zaXplIC0gMTQpOyAgICAgICAvKiB0aGUgcmVzdCBpcyBzcGFjZXMgKi8KLSAgcmV0dXJuIHRtcDsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfZmx2X211eF9jcmVhdGVfbnVtYmVyX3NjcmlwdF92YWx1ZSAoY29uc3QgZ2NoYXIgKiBuYW1lLCBnZG91YmxlIHZhbHVlKQotewotICBHc3RCdWZmZXIgKnRtcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnc2l6ZSBsZW4gPSBzdHJsZW4gKG5hbWUpOwotCi0gIF9nc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIgKyBsZW4gKyAxICsgOCwgJnRtcCwgJmRhdGEpOwotCi0gIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIGxlbik7Ci0gIGRhdGEgKz0gMjsgICAgICAgICAgICAgICAgICAgIC8qIG5hbWUgbGVuZ3RoICovCi0gIG1lbWNweSAoZGF0YSwgbmFtZSwgbGVuKTsKLSAgZGF0YSArPSBsZW47Ci0gICpkYXRhKysgPSBBTUYwX05VTUJFUl9NQVJLRVI7IC8qIGRvdWJsZSB0eXBlICovCi0gIEdTVF9XUklURV9ET1VCTEVfQkUgKGRhdGEsIHZhbHVlKTsKLQotICByZXR1cm4gdG1wOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9mbHZfbXV4X2NyZWF0ZV9tZXRhZGF0YSAoR3N0Rmx2TXV4ICogbXV4LCBnYm9vbGVhbiBmdWxsKQotewotICBjb25zdCBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RCdWZmZXIgKnNjcmlwdF90YWcsICp0bXA7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGdpbnQgaSwgbl90YWdzLCB0YWdzX3dyaXR0ZW4gPSAwOwotCi0gIHRhZ3MgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKEdTVF9UQUdfU0VUVEVSIChtdXgpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJ0YWdzID0gJSIgR1NUX1BUUl9GT1JNQVQsIHRhZ3MpOwotCi0gIC8qIEZJWE1FIHBlcmhhcHMgc29tZSBieXRld3JpdGVyJ2luZyBoZXJlIC4uLiAqLwotCi0gIF9nc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDExLCAmc2NyaXB0X3RhZywgJmRhdGEpOwotCi0gIGRhdGFbMF0gPSAxODsKLQotICAvKiBEYXRhIHNpemUsIHVua25vd24gZm9yIG5vdyAqLwotICBkYXRhWzFdID0gMDsKLSAgZGF0YVsyXSA9IDA7Ci0gIGRhdGFbM10gPSAwOwotCi0gIC8qIFRpbWVzdGFtcCAqLwotICBkYXRhWzRdID0gZGF0YVs1XSA9IGRhdGFbNl0gPSBkYXRhWzddID0gMDsKLQotICAvKiBTdHJlYW0gSUQgKi8KLSAgZGF0YVs4XSA9IGRhdGFbOV0gPSBkYXRhWzEwXSA9IDA7Ci0KLSAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTMsICZ0bXAsICZkYXRhKTsKLSAgZGF0YVswXSA9IEFNRjBfU1RSSU5HX01BUktFUjsgLyogc3RyaW5nICovCi0gIGRhdGFbMV0gPSAwOwotICBkYXRhWzJdID0gMTA7ICAgICAgICAgICAgICAgICAvKiBsZW5ndGggMTAgKi8KLSAgbWVtY3B5ICgmZGF0YVszXSwgIm9uTWV0YURhdGEiLCAxMCk7Ci0KLSAgc2NyaXB0X3RhZyA9IGdzdF9idWZmZXJfYXBwZW5kIChzY3JpcHRfdGFnLCB0bXApOwotCi0gIG5fdGFncyA9ICh0YWdzKSA/IGdzdF90YWdfbGlzdF9uX3RhZ3MgKHRhZ3MpIDogMDsKLSAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNSwgJnRtcCwgJmRhdGEpOwotICBkYXRhWzBdID0gODsgICAgICAgICAgICAgICAgICAvKiBFQ01BIGFycmF5ICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyAxLCBuX3RhZ3MpOwotICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0KLSAgaWYgKCFmdWxsKQotICAgIGdvdG8gdGFnczsKLQotICAvKiBTb21lIHBsYXllcnMgZXhwZWN0IHRoZSAnZHVyYXRpb24nIHRvIGJlIGFsd2F5cyBzZXQuIEZpbGwgaXQgb3V0IGxhdGVyLAotICAgICBhZnRlciBxdWVyeWluZyB0aGUgcGFkcyBvciBhZnRlciBnZXR0aW5nIEVPUyAqLwotICBpZiAoIW11eC0+c3RyZWFtYWJsZSkgewotICAgIHRtcCA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9udW1iZXJfc2NyaXB0X3ZhbHVlICgiZHVyYXRpb24iLCA4NjQwMCk7Ci0gICAgc2NyaXB0X3RhZyA9IGdzdF9idWZmZXJfYXBwZW5kIChzY3JpcHRfdGFnLCB0bXApOwotICAgIHRhZ3Nfd3JpdHRlbisrOwotCi0gICAgLyogU29tZXRpbWVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdG90YWwgZmlsZSBzaXplIGlzIHVzZWZ1bCBmb3IgdGhlCi0gICAgICAgcGxheWVyLiBJdCB3aWxsIGJlIGZpbGxlZCBsYXRlciwgYWZ0ZXIgZ2V0dGluZyBFT1MgKi8KLSAgICB0bXAgPSBnc3RfZmx2X211eF9jcmVhdGVfbnVtYmVyX3NjcmlwdF92YWx1ZSAoImZpbGVzaXplIiwgMCk7Ci0gICAgc2NyaXB0X3RhZyA9IGdzdF9idWZmZXJfYXBwZW5kIChzY3JpcHRfdGFnLCB0bXApOwotICAgIHRhZ3Nfd3JpdHRlbisrOwotCi0gICAgLyogUHJlYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBpbmRleCB0byBiZSB3cml0dGVuIGF0IEVPUyAqLwotICAgIHRtcCA9IGdzdF9mbHZfbXV4X3ByZWFsbG9jYXRlX2luZGV4IChtdXgpOwotICAgIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJub3QgcHJlYWxsb2NhdGluZyBpbmRleCwgc3RyZWFtYWJsZSBtb2RlIik7Ci0gIH0KLQotdGFnczoKLSAgZm9yIChpID0gMDsgdGFncyAmJiBpIDwgbl90YWdzOyBpKyspIHsKLSAgICBjb25zdCBnY2hhciAqdGFnX25hbWUgPSBnc3RfdGFnX2xpc3RfbnRoX3RhZ19uYW1lICh0YWdzLCBpKTsKLSAgICBpZiAoIXN0cmNtcCAodGFnX25hbWUsIEdTVF9UQUdfRFVSQVRJT04pKSB7Ci0gICAgICBndWludDY0IGR1cjsKLQotICAgICAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X3VpbnQ2NCAodGFncywgR1NUX1RBR19EVVJBVElPTiwgJmR1cikpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgbXV4LT5kdXJhdGlvbiA9IGR1cjsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCBHU1RfVEFHX0FSVElTVCkgfHwKLSAgICAgICAgIXN0cmNtcCAodGFnX25hbWUsIEdTVF9UQUdfVElUTEUpKSB7Ci0gICAgICBnY2hhciAqczsKLSAgICAgIGNvbnN0IGdjaGFyICp0ID0gTlVMTDsKLQotICAgICAgaWYgKCFzdHJjbXAgKHRhZ19uYW1lLCBHU1RfVEFHX0FSVElTVCkpCi0gICAgICAgIHQgPSAiY3JlYXRvciI7Ci0gICAgICBlbHNlIGlmICghc3RyY21wICh0YWdfbmFtZSwgR1NUX1RBR19USVRMRSkpCi0gICAgICAgIHQgPSAidGl0bGUiOwotCi0gICAgICBpZiAoIWdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCB0YWdfbmFtZSwgJnMpKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMiArIHN0cmxlbiAodCkgKyAxICsgMiArIHN0cmxlbiAocyksCi0gICAgICAgICAgJnRtcCwgJmRhdGEpOwotICAgICAgZGF0YVswXSA9IDA7ICAgICAgICAgICAgICAvKiB0YWcgbmFtZSBsZW5ndGggKi8KLSAgICAgIGRhdGFbMV0gPSBzdHJsZW4gKHQpOwotICAgICAgbWVtY3B5ICgmZGF0YVsyXSwgdCwgc3RybGVuICh0KSk7Ci0gICAgICBkYXRhWzIgKyBzdHJsZW4gKHQpXSA9IDI7IC8qIHN0cmluZyAqLwotICAgICAgZGF0YVszICsgc3RybGVuICh0KV0gPSAoc3RybGVuIChzKSA+PiA4KSAmIDB4ZmY7Ci0gICAgICBkYXRhWzQgKyBzdHJsZW4gKHQpXSA9IChzdHJsZW4gKHMpKSAmIDB4ZmY7Ci0gICAgICBtZW1jcHkgKCZkYXRhWzUgKyBzdHJsZW4gKHQpXSwgcywgc3RybGVuIChzKSk7Ci0gICAgICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0KLSAgICAgIGdfZnJlZSAocyk7Ci0gICAgICB0YWdzX3dyaXR0ZW4rKzsKLSAgICB9Ci0gIH0KLQotICBpZiAoIWZ1bGwpCi0gICAgZ290byBlbmQ7Ci0KLSAgaWYgKG11eC0+ZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgIEdTTGlzdCAqbDsKLSAgICBndWludDY0IGR1cjsKLQotICAgIGZvciAobCA9IG11eC0+Y29sbGVjdC0+ZGF0YTsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgIEdzdENvbGxlY3REYXRhICpjZGF0YSA9IGwtPmRhdGE7Ci0KLSAgICAgIGlmIChnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKGNkYXRhLT5wYWQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgKGdpbnQ2NCAqKSAmIGR1cikgJiYgZHVyICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgICAgaWYgKG11eC0+ZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgICBtdXgtPmR1cmF0aW9uID0gZHVyOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbXV4LT5kdXJhdGlvbiA9IE1BWCAoZHVyLCBtdXgtPmR1cmF0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoIW11eC0+c3RyZWFtYWJsZSAmJiBtdXgtPmR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBnZG91YmxlIGQ7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICBkID0gZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAobXV4LT5kdXJhdGlvbik7Ci0gICAgZCAvPSAoZ2RvdWJsZSkgR1NUX1NFQ09ORDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgImRldGVybWluZWQgdGhlIGR1cmF0aW9uIHRvIGJlICVmIiwgZCk7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKHNjcmlwdF90YWcsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIEdTVF9XUklURV9ET1VCTEVfQkUgKG1hcC5kYXRhICsgMjkgKyAyICsgOCArIDEsIGQpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKHNjcmlwdF90YWcsICZtYXApOwotICB9Ci0KLSAgaWYgKG11eC0+aGF2ZV92aWRlbykgewotICAgIEdzdFBhZCAqdmlkZW9fcGFkID0gTlVMTDsKLSAgICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgICBHc3RGbHZQYWQgKmNwYWQ7Ci0gICAgR1NMaXN0ICpsID0gbXV4LT5jb2xsZWN0LT5kYXRhOwotCi0gICAgZm9yICg7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICBjcGFkID0gbC0+ZGF0YTsKLSAgICAgIGlmIChjcGFkICYmIGNwYWQtPnZpZGVvKSB7Ci0gICAgICAgIHZpZGVvX3BhZCA9IGNwYWQtPmNvbGxlY3QucGFkOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodmlkZW9fcGFkKSB7Ci0gICAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICh2aWRlb19wYWQpOwotICAgIH0KLQotICAgIGlmIChjYXBzICE9IE5VTEwpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqczsKLSAgICAgIGdpbnQgc2l6ZTsKLSAgICAgIGdpbnQgbnVtLCBkZW47Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1dHRpbmcgdmlkZW9jb2RlY2lkICVkIGluIHRoZSBtZXRhZGF0YSIsCi0gICAgICAgICAgY3BhZC0+dmlkZW9fY29kZWMpOwotCi0gICAgICB0bXAgPSBnc3RfZmx2X211eF9jcmVhdGVfbnVtYmVyX3NjcmlwdF92YWx1ZSAoInZpZGVvY29kZWNpZCIsCi0gICAgICAgICAgY3BhZC0+dmlkZW9fY29kZWMpOwotICAgICAgc2NyaXB0X3RhZyA9IGdzdF9idWZmZXJfYXBwZW5kIChzY3JpcHRfdGFnLCB0bXApOwotICAgICAgdGFnc193cml0dGVuKys7Ci0KLSAgICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgIndpZHRoIiwgJnNpemUpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1dHRpbmcgd2lkdGggJWQgaW4gdGhlIG1ldGFkYXRhIiwgc2l6ZSk7Ci0KLSAgICAgICAgdG1wID0gZ3N0X2Zsdl9tdXhfY3JlYXRlX251bWJlcl9zY3JpcHRfdmFsdWUgKCJ3aWR0aCIsIHNpemUpOwotICAgICAgICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0gICAgICAgIHRhZ3Nfd3JpdHRlbisrOwotICAgICAgfQotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAiaGVpZ2h0IiwgJnNpemUpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1dHRpbmcgaGVpZ2h0ICVkIGluIHRoZSBtZXRhZGF0YSIsIHNpemUpOwotCi0gICAgICAgIHRtcCA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9udW1iZXJfc2NyaXB0X3ZhbHVlICgiaGVpZ2h0Iiwgc2l6ZSk7Ci0gICAgICAgIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLSAgICAgICAgdGFnc193cml0dGVuKys7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIsICZudW0sICZkZW4pKSB7Ci0gICAgICAgIGdkb3VibGUgZDsKLQotICAgICAgICBkID0gbnVtOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJwdXR0aW5nIEFzcGVjdFJhdGlvWCAlZiBpbiB0aGUgbWV0YWRhdGEiLCBkKTsKLQotICAgICAgICB0bXAgPSBnc3RfZmx2X211eF9jcmVhdGVfbnVtYmVyX3NjcmlwdF92YWx1ZSAoIkFzcGVjdFJhdGlvWCIsIGQpOwotICAgICAgICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0gICAgICAgIHRhZ3Nfd3JpdHRlbisrOwotCi0gICAgICAgIGQgPSBkZW47Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1dHRpbmcgQXNwZWN0UmF0aW9ZICVmIGluIHRoZSBtZXRhZGF0YSIsIGQpOwotCi0gICAgICAgIHRtcCA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9udW1iZXJfc2NyaXB0X3ZhbHVlICgiQXNwZWN0UmF0aW9ZIiwgZCk7Ci0gICAgICAgIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLSAgICAgICAgdGFnc193cml0dGVuKys7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAocywgImZyYW1lcmF0ZSIsICZudW0sICZkZW4pKSB7Ci0gICAgICAgIGdkb3VibGUgZDsKLQotICAgICAgICBnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUgKG51bSwgZGVuLCAmZCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1dHRpbmcgZnJhbWVyYXRlICVmIGluIHRoZSBtZXRhZGF0YSIsIGQpOwotCi0gICAgICAgIHRtcCA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9udW1iZXJfc2NyaXB0X3ZhbHVlICgiZnJhbWVyYXRlIiwgZCk7Ci0gICAgICAgIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLSAgICAgICAgdGFnc193cml0dGVuKys7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1dHRpbmcgdmlkZW9kYXRhcmF0ZSAldSBLQi9zIGluIHRoZSBtZXRhZGF0YSIsCi0gICAgICAgICAgY3BhZC0+Yml0cmF0ZSAvIDEwMjQpOwotICAgICAgdG1wID0gZ3N0X2Zsdl9tdXhfY3JlYXRlX251bWJlcl9zY3JpcHRfdmFsdWUgKCJ2aWRlb2RhdGFyYXRlIiwKLSAgICAgICAgICBjcGFkLT5iaXRyYXRlIC8gMTAyNCk7Ci0gICAgICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0gICAgICB0YWdzX3dyaXR0ZW4rKzsKLSAgICB9Ci0gIH0KLQotICBpZiAobXV4LT5oYXZlX2F1ZGlvKSB7Ci0gICAgR3N0UGFkICphdWRpb19wYWQgPSBOVUxMOwotICAgIEdzdEZsdlBhZCAqY3BhZDsKLSAgICBHU0xpc3QgKmwgPSBtdXgtPmNvbGxlY3QtPmRhdGE7Ci0KLSAgICBmb3IgKDsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgIGNwYWQgPSBsLT5kYXRhOwotICAgICAgaWYgKGNwYWQgJiYgIWNwYWQtPnZpZGVvKSB7Ci0gICAgICAgIGF1ZGlvX3BhZCA9IGNwYWQtPmNvbGxlY3QucGFkOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXVkaW9fcGFkKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJwdXR0aW5nIGF1ZGlvY29kZWNpZCAlZCBpbiB0aGUgbWV0YWRhdGEiLAotICAgICAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjKTsKLQotICAgICAgdG1wID0gZ3N0X2Zsdl9tdXhfY3JlYXRlX251bWJlcl9zY3JpcHRfdmFsdWUgKCJhdWRpb2NvZGVjaWQiLAotICAgICAgICAgIGNwYWQtPmF1ZGlvX2NvZGVjKTsKLSAgICAgIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLSAgICAgIHRhZ3Nfd3JpdHRlbisrOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJwdXR0aW5nIGF1ZGlvZGF0YXJhdGUgJXUgS0IvcyBpbiB0aGUgbWV0YWRhdGEiLAotICAgICAgICAgIGNwYWQtPmJpdHJhdGUgLyAxMDI0KTsKLSAgICAgIHRtcCA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9udW1iZXJfc2NyaXB0X3ZhbHVlICgiYXVkaW9kYXRhcmF0ZSIsCi0gICAgICAgICAgY3BhZC0+Yml0cmF0ZSAvIDEwMjQpOwotICAgICAgc2NyaXB0X3RhZyA9IGdzdF9idWZmZXJfYXBwZW5kIChzY3JpcHRfdGFnLCB0bXApOwotICAgICAgdGFnc193cml0dGVuKys7Ci0gICAgfQotICB9Ci0KLSAgewotICAgIGNvbnN0IGdjaGFyICpzID0gIkdTdHJlYW1lciBGTFYgbXV4ZXIiOwotCi0gICAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMiArIDE1ICsgMSArIDIgKyBzdHJsZW4gKHMpLCAmdG1wLCAmZGF0YSk7Ci0gICAgZGF0YVswXSA9IDA7ICAgICAgICAgICAgICAgIC8qIDE1IGJ5dGVzIG5hbWUgKi8KLSAgICBkYXRhWzFdID0gMTU7Ci0gICAgbWVtY3B5ICgmZGF0YVsyXSwgIm1ldGFkYXRhY3JlYXRvciIsIDE1KTsKLSAgICBkYXRhWzE3XSA9IDI7ICAgICAgICAgICAgICAgLyogc3RyaW5nICovCi0gICAgZGF0YVsxOF0gPSAoc3RybGVuIChzKSA+PiA4KSAmIDB4ZmY7Ci0gICAgZGF0YVsxOV0gPSAoc3RybGVuIChzKSkgJiAweGZmOwotICAgIG1lbWNweSAoJmRhdGFbMjBdLCBzLCBzdHJsZW4gKHMpKTsKLSAgICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0KLSAgICB0YWdzX3dyaXR0ZW4rKzsKLSAgfQotCi0gIHsKLSAgICBHVGltZVZhbCB0diA9IHsgMCwgfTsKLSAgICB0aW1lX3Qgc2VjczsKLSAgICBzdHJ1Y3QgdG0gKnRtOwotICAgIGdjaGFyICpzOwotICAgIHN0YXRpYyBjb25zdCBnY2hhciAqd2Vla2RheXNbXSA9IHsKLSAgICAgICJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiCi0gICAgfTsKLSAgICBzdGF0aWMgY29uc3QgZ2NoYXIgKm1vbnRoc1tdID0gewotICAgICAgIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsCi0gICAgICAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIKLSAgICB9OwotCi0gICAgZ19nZXRfY3VycmVudF90aW1lICgmdHYpOwotICAgIHNlY3MgPSB0di50dl9zZWM7Ci0gICAgdG0gPSBnbXRpbWUgKCZzZWNzKTsKLQotICAgIHMgPSBnX3N0cmR1cF9wcmludGYgKCIlcyAlcyAlZCAlMDJkOiUwMmQ6JTAyZCAlZCIsIHdlZWtkYXlzW3RtLT50bV93ZGF5XSwKLSAgICAgICAgbW9udGhzW3RtLT50bV9tb25dLCB0bS0+dG1fbWRheSwgdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCi0gICAgICAgIHRtLT50bV95ZWFyICsgMTkwMCk7Ci0KLSAgICBfZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyICsgMTIgKyAxICsgMiArIHN0cmxlbiAocyksICZ0bXAsICZkYXRhKTsKLSAgICBkYXRhWzBdID0gMDsgICAgICAgICAgICAgICAgLyogMTIgYnl0ZXMgbmFtZSAqLwotICAgIGRhdGFbMV0gPSAxMjsKLSAgICBtZW1jcHkgKCZkYXRhWzJdLCAiY3JlYXRpb25kYXRlIiwgMTIpOwotICAgIGRhdGFbMTRdID0gMjsgICAgICAgICAgICAgICAvKiBzdHJpbmcgKi8KLSAgICBkYXRhWzE1XSA9IChzdHJsZW4gKHMpID4+IDgpICYgMHhmZjsKLSAgICBkYXRhWzE2XSA9IChzdHJsZW4gKHMpKSAmIDB4ZmY7Ci0gICAgbWVtY3B5ICgmZGF0YVsxN10sIHMsIHN0cmxlbiAocykpOwotICAgIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLQotICAgIGdfZnJlZSAocyk7Ci0gICAgdGFnc193cml0dGVuKys7Ci0gIH0KLQotZW5kOgotCi0gIGlmICghdGFnc193cml0dGVuKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoc2NyaXB0X3RhZyk7Ci0gICAgc2NyaXB0X3RhZyA9IE5VTEw7Ci0gICAgZ290byBleGl0OwotICB9Ci0KLSAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMiArIDAgKyAxLCAmdG1wLCAmZGF0YSk7Ci0gIGRhdGFbMF0gPSAwOyAgICAgICAgICAgICAgICAgIC8qIDAgYnl0ZSBzaXplICovCi0gIGRhdGFbMV0gPSAwOwotICBkYXRhWzJdID0gOTsgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFya2VyICovCi0gIHNjcmlwdF90YWcgPSBnc3RfYnVmZmVyX2FwcGVuZCAoc2NyaXB0X3RhZywgdG1wKTsKLQotCi0gIF9nc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQsICZ0bXAsICZkYXRhKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc2NyaXB0X3RhZykpOwotICBzY3JpcHRfdGFnID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKHNjcmlwdF90YWcsIHRtcCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKHNjcmlwdF90YWcsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtYXAuZGF0YVsxXSA9ICgoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc2NyaXB0X3RhZykgLSAxMSAtIDQpID4+IDE2KSAmIDB4ZmY7Ci0gIG1hcC5kYXRhWzJdID0gKChnc3RfYnVmZmVyX2dldF9zaXplIChzY3JpcHRfdGFnKSAtIDExIC0gNCkgPj4gOCkgJiAweGZmOwotICBtYXAuZGF0YVszXSA9ICgoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc2NyaXB0X3RhZykgLSAxMSAtIDQpID4+IDApICYgMHhmZjsKLQotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChtYXAuZGF0YSArIDExICsgMTMgKyAxLCB0YWdzX3dyaXR0ZW4pOwotICBnc3RfYnVmZmVyX3VubWFwIChzY3JpcHRfdGFnLCAmbWFwKTsKLQotZXhpdDoKLSAgcmV0dXJuIHNjcmlwdF90YWc7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2Zsdl9tdXhfYnVmZmVyX3RvX3RhZ19pbnRlcm5hbCAoR3N0Rmx2TXV4ICogbXV4LCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Rmx2UGFkICogY3BhZCwgZ2Jvb2xlYW4gaXNfY29kZWNfZGF0YSkKLXsKLSAgR3N0QnVmZmVyICp0YWc7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBzaXplOwotICBndWludDMyIHB0cywgZHRzLCBjdHM7Ci0gIGd1aW50OCAqZGF0YSwgKmJkYXRhID0gTlVMTDsKLSAgZ3NpemUgYnNpemUgPSAwOwotCi0gIGlmICghR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChjcGFkLT5kdHMpKSB7Ci0gICAgcHRzID0gZHRzID0gY3BhZC0+bGFzdF90aW1lc3RhbXAgLyBHU1RfTVNFQ09ORDsKLSAgfSBlbHNlIHsKLSAgICBwdHMgPSBjcGFkLT5wdHMgLyBHU1RfTVNFQ09ORDsKLSAgICBkdHMgPSBjcGFkLT5kdHMgLyBHU1RfTVNFQ09ORDsKLSAgfQotCi0gIC8qIEJlIHNhZmUgaW4gY2FzZSBUUyBhcmUgYnVnZ3kgKi8KLSAgaWYgKHB0cyA+IGR0cykKLSAgICBjdHMgPSBwdHMgLSBkdHM7Ci0gIGVsc2UKLSAgICBjdHMgPSAwOwotCi0gIC8qIFRpbWVzdGFtcCBtdXN0IHN0YXJ0IGF0IHplcm8gKi8KLSAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAobXV4LT5maXJzdF90aW1lc3RhbXApKSB7Ci0gICAgZHRzIC09IG11eC0+Zmlyc3RfdGltZXN0YW1wIC8gR1NUX01TRUNPTkQ7Ci0gICAgcHRzID0gZHRzICsgY3RzOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG11eCwgImdvdCBwdHMgJWkgZHRzICVpIGN0cyAlaVxuIiwgcHRzLCBkdHMsIGN0cyk7Ci0KLSAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBiZGF0YSA9IG1hcC5kYXRhOwotICAgIGJzaXplID0gbWFwLnNpemU7Ci0gIH0KLQotICBzaXplID0gMTE7Ci0gIGlmIChjcGFkLT52aWRlbykgewotICAgIHNpemUgKz0gMTsKLSAgICBpZiAoY3BhZC0+dmlkZW9fY29kZWMgPT0gNykKLSAgICAgIHNpemUgKz0gNCArIGJzaXplOwotICAgIGVsc2UKLSAgICAgIHNpemUgKz0gYnNpemU7Ci0gIH0gZWxzZSB7Ci0gICAgc2l6ZSArPSAxOwotICAgIGlmIChjcGFkLT5hdWRpb19jb2RlYyA9PSAxMCkKLSAgICAgIHNpemUgKz0gMSArIGJzaXplOwotICAgIGVsc2UKLSAgICAgIHNpemUgKz0gYnNpemU7Ci0gIH0KLSAgc2l6ZSArPSA0OwotCi0gIF9nc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUsICZ0YWcsICZkYXRhKTsKLSAgbWVtc2V0IChkYXRhLCAwLCBzaXplKTsKLQotICBkYXRhWzBdID0gKGNwYWQtPnZpZGVvKSA/IDkgOiA4OwotCi0gIGRhdGFbMV0gPSAoKHNpemUgLSAxMSAtIDQpID4+IDE2KSAmIDB4ZmY7Ci0gIGRhdGFbMl0gPSAoKHNpemUgLSAxMSAtIDQpID4+IDgpICYgMHhmZjsKLSAgZGF0YVszXSA9ICgoc2l6ZSAtIDExIC0gNCkgPj4gMCkgJiAweGZmOwotCi0gIEdTVF9XUklURV9VSU5UMjRfQkUgKGRhdGEgKyA0LCBkdHMpOwotICBkYXRhWzddID0gKCgoZ3VpbnQpIGR0cykgPj4gMjQpICYgMHhmZjsKLQotICBkYXRhWzhdID0gZGF0YVs5XSA9IGRhdGFbMTBdID0gMDsKLQotICBpZiAoY3BhZC0+dmlkZW8pIHsKLSAgICBpZiAoYnVmZmVyICYmIEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKQotICAgICAgZGF0YVsxMV0gfD0gMiA8PCA0OwotICAgIGVsc2UKLSAgICAgIGRhdGFbMTFdIHw9IDEgPDwgNDsKLQotICAgIGRhdGFbMTFdIHw9IGNwYWQtPnZpZGVvX2NvZGVjICYgMHgwZjsKLQotICAgIGlmIChjcGFkLT52aWRlb19jb2RlYyA9PSA3KSB7Ci0gICAgICBpZiAoaXNfY29kZWNfZGF0YSkgewotICAgICAgICBkYXRhWzEyXSA9IDA7Ci0gICAgICAgIEdTVF9XUklURV9VSU5UMjRfQkUgKGRhdGEgKyAxMywgMCk7Ci0gICAgICB9IGVsc2UgaWYgKGJzaXplID09IDApIHsKLSAgICAgICAgLyogQVZDIGVuZCBvZiBzZXF1ZW5jZSAqLwotICAgICAgICBkYXRhWzEyXSA9IDI7Ci0gICAgICAgIEdTVF9XUklURV9VSU5UMjRfQkUgKGRhdGEgKyAxMywgMCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBBQ1YgTkFMVSAqLwotICAgICAgICBkYXRhWzEyXSA9IDE7Ci0gICAgICAgIEdTVF9XUklURV9VSU5UMjRfQkUgKGRhdGEgKyAxMywgY3RzKTsKLSAgICAgIH0KLSAgICAgIG1lbWNweSAoZGF0YSArIDExICsgMSArIDQsIGJkYXRhLCBic2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lbWNweSAoZGF0YSArIDExICsgMSwgYmRhdGEsIGJzaXplKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZGF0YVsxMV0gfD0gKGNwYWQtPmF1ZGlvX2NvZGVjIDw8IDQpICYgMHhmMDsKLSAgICBkYXRhWzExXSB8PSAoY3BhZC0+cmF0ZSA8PCAyKSAmIDB4MGM7Ci0gICAgZGF0YVsxMV0gfD0gKGNwYWQtPndpZHRoIDw8IDEpICYgMHgwMjsKLSAgICBkYXRhWzExXSB8PSAoY3BhZC0+Y2hhbm5lbHMgPDwgMCkgJiAweDAxOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiQ3JlYXRpbmcgYnl0ZSAlMDJ4IHdpdGggIgotICAgICAgICAiYXVkaW9fY29kZWM6JWQsIHJhdGU6JWQsIHdpZHRoOiVkLCBjaGFubmVsczolZCIsCi0gICAgICAgIGRhdGFbMTFdLCBjcGFkLT5hdWRpb19jb2RlYywgY3BhZC0+cmF0ZSwgY3BhZC0+d2lkdGgsIGNwYWQtPmNoYW5uZWxzKTsKLQotICAgIGlmIChjcGFkLT5hdWRpb19jb2RlYyA9PSAxMCkgewotICAgICAgZGF0YVsxMl0gPSBpc19jb2RlY19kYXRhID8gMCA6IDE7Ci0KLSAgICAgIG1lbWNweSAoZGF0YSArIDExICsgMSArIDEsIGJkYXRhLCBic2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lbWNweSAoZGF0YSArIDExICsgMSwgYmRhdGEsIGJzaXplKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoYnVmZmVyKQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSArIHNpemUgLSA0LCBzaXplIC0gNCk7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKHRhZykgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfQlVGRkVSX0RUUyAodGFnKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKHRhZykgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGlmIChidWZmZXIpIHsKLSAgICAvKiBpZiB3ZSBhcmUgc3RyZWFtYWJsZSB3ZSBjb3B5IG92ZXIgdGltZXN0YW1wcyBhbmQgb2Zmc2V0cywKLSAgICAgICBpZiBub3QganVzdCBjb3B5IHRoZSBvZmZzZXRzICovCi0gICAgaWYgKG11eC0+c3RyZWFtYWJsZSkgewotICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKHRhZywgYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUywgMCwgLTEpOwotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKHRhZykgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EICh0YWcpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JVRkZFUl9PRkZTRVQgKHRhZykgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKTsKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAodGFnKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKTsKLSAgICB9Ci0KLSAgICAvKiBtYXJrIHRoZSBidWZmZXIgaWYgaXQncyBhbiBhdWRpbyBidWZmZXIgYW5kIHRoZXJlJ3MgYWxzbyB2aWRlbyBiZWluZyBtdXhlZAotICAgICAqIG9yIGl0J3MgYSB2aWRlbyBpbnRlcmZyYW1lICovCi0gICAgaWYgKChtdXgtPmhhdmVfdmlkZW8gJiYgIWNwYWQtPnZpZGVvKSB8fAotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSkKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKHRhZywgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICB9IGVsc2UgewotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKHRhZywgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUICh0YWcpID0gR1NUX0JVRkZFUl9PRkZTRVRfRU5EICh0YWcpID0KLSAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgfQotCi0gIHJldHVybiB0YWc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF9mbHZfbXV4X2J1ZmZlcl90b190YWcgKEdzdEZsdk11eCAqIG11eCwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdEZsdlBhZCAqIGNwYWQpCi17Ci0gIHJldHVybiBnc3RfZmx2X211eF9idWZmZXJfdG9fdGFnX2ludGVybmFsIChtdXgsIGJ1ZmZlciwgY3BhZCwgRkFMU0UpOwotfQotCi1zdGF0aWMgaW5saW5lIEdzdEJ1ZmZlciAqCi1nc3RfZmx2X211eF9jb2RlY19kYXRhX2J1ZmZlcl90b190YWcgKEdzdEZsdk11eCAqIG11eCwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdEZsdlBhZCAqIGNwYWQpCi17Ci0gIHJldHVybiBnc3RfZmx2X211eF9idWZmZXJfdG9fdGFnX2ludGVybmFsIChtdXgsIGJ1ZmZlciwgY3BhZCwgVFJVRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF9mbHZfbXV4X2Vvc190b190YWcgKEdzdEZsdk11eCAqIG11eCwgR3N0Rmx2UGFkICogY3BhZCkKLXsKLSAgcmV0dXJuIGdzdF9mbHZfbXV4X2J1ZmZlcl90b190YWdfaW50ZXJuYWwgKG11eCwgTlVMTCwgY3BhZCwgRkFMU0UpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9tdXhfcHV0X2J1ZmZlcl9pbl9zdHJlYW1oZWFkZXIgKEdWYWx1ZSAqIHN0cmVhbWhlYWRlciwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOwotICBnc3RfdmFsdWVfc2V0X2J1ZmZlciAoJnZhbHVlLCBidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBnc3RfdmFsdWVfYXJyYXlfYXBwZW5kX3ZhbHVlIChzdHJlYW1oZWFkZXIsICZ2YWx1ZSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X211eF93cml0ZV9oZWFkZXIgKEdzdEZsdk11eCAqIG11eCkKLXsKLSAgR3N0QnVmZmVyICpoZWFkZXIsICptZXRhZGF0YTsKLSAgR3N0QnVmZmVyICp2aWRlb19jb2RlY19kYXRhLCAqYXVkaW9fY29kZWNfZGF0YTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdWYWx1ZSBzdHJlYW1oZWFkZXIgPSB7IDAgfTsKLSAgR1NMaXN0ICpsOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBnY2hhciBzX2lkWzMyXTsKLQotICAvKiBpZiBub3Qgc3RyZWFtaW5nLCBjaGVjayBpZiBkb3duc3RyZWFtIGlzIHNlZWthYmxlICovCi0gIGlmICghbXV4LT5zdHJlYW1hYmxlKSB7Ci0gICAgZ2Jvb2xlYW4gc2Vla2FibGU7Ci0gICAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICAgIGlmIChnc3RfcGFkX3BlZXJfcXVlcnkgKG11eC0+c3JjcGFkLCBxdWVyeSkpIHsKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAobXV4LCAiZG93bnN0cmVhbSBpcyAlc3NlZWthYmxlIiwgc2Vla2FibGUgPyAiIiA6ICJub3QgIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGhhdmUgdG8gYXNzdW1lIHNlZWtpbmcgaXMgc3VwcG9ydGVkIGlmIHF1ZXJ5IG5vdCBoYW5kbGVkIGRvd25zdHJlYW0gKi8KLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiZG93bnN0cmVhbSBkaWQgbm90IGhhbmRsZSBzZWVraW5nIHF1ZXJ5Iik7Ci0gICAgICBzZWVrYWJsZSA9IEZBTFNFOwotICAgIH0KLSAgICBpZiAoIXNlZWthYmxlKSB7Ci0gICAgICBtdXgtPnN0cmVhbWFibGUgPSBUUlVFOwotICAgICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAobXV4KSwgInN0cmVhbWFibGUiKTsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiZG93bnN0cmVhbSBpcyBub3Qgc2Vla2FibGUsIGJ1dCAiCi0gICAgICAgICAgInN0cmVhbWFibGU9ZmFsc2UuIFdpbGwgaWdub3JlIHRoYXQgYW5kIGNyZWF0ZSBzdHJlYW1hYmxlIG91dHB1dCAiCi0gICAgICAgICAgImluc3RlYWQiKTsKLSAgICB9Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0gIH0KLQotICBoZWFkZXIgPSBnc3RfZmx2X211eF9jcmVhdGVfaGVhZGVyIChtdXgpOwotICBtZXRhZGF0YSA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9tZXRhZGF0YSAobXV4LCBUUlVFKTsKLSAgdmlkZW9fY29kZWNfZGF0YSA9IE5VTEw7Ci0gIGF1ZGlvX2NvZGVjX2RhdGEgPSBOVUxMOwotCi0gIGZvciAobCA9IG11eC0+Y29sbGVjdC0+ZGF0YTsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdEZsdlBhZCAqY3BhZCA9IGwtPmRhdGE7Ci0KLSAgICAvKiBHZXQgSC4yNjQgYW5kIEFBQyBjb2RlYyBkYXRhLCBpZiBwcmVzZW50ICovCi0gICAgaWYgKGNwYWQgJiYgY3BhZC0+dmlkZW8gJiYgY3BhZC0+dmlkZW9fY29kZWMgPT0gNykgewotICAgICAgaWYgKGNwYWQtPnZpZGVvX2NvZGVjX2RhdGEgPT0gTlVMTCkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJDb2RlYyBkYXRhIGZvciB2aWRlbyBzdHJlYW0gbm90IGZvdW5kLCAiCi0gICAgICAgICAgICAib3V0cHV0IG1pZ2h0IG5vdCBiZSBwbGF5YWJsZSIpOwotICAgICAgZWxzZQotICAgICAgICB2aWRlb19jb2RlY19kYXRhID0KLSAgICAgICAgICAgIGdzdF9mbHZfbXV4X2NvZGVjX2RhdGFfYnVmZmVyX3RvX3RhZyAobXV4LCBjcGFkLT52aWRlb19jb2RlY19kYXRhLAotICAgICAgICAgICAgY3BhZCk7Ci0gICAgfSBlbHNlIGlmIChjcGFkICYmICFjcGFkLT52aWRlbyAmJiBjcGFkLT5hdWRpb19jb2RlYyA9PSAxMCkgewotICAgICAgaWYgKGNwYWQtPmF1ZGlvX2NvZGVjX2RhdGEgPT0gTlVMTCkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJDb2RlYyBkYXRhIGZvciBhdWRpbyBzdHJlYW0gbm90IGZvdW5kLCAiCi0gICAgICAgICAgICAib3V0cHV0IG1pZ2h0IG5vdCBiZSBwbGF5YWJsZSIpOwotICAgICAgZWxzZQotICAgICAgICBhdWRpb19jb2RlY19kYXRhID0KLSAgICAgICAgICAgIGdzdF9mbHZfbXV4X2NvZGVjX2RhdGFfYnVmZmVyX3RvX3RhZyAobXV4LCBjcGFkLT5hdWRpb19jb2RlY19kYXRhLAotICAgICAgICAgICAgY3BhZCk7Ci0gICAgfQotICB9Ci0KLSAgLyogbWFyayBidWZmZXJzIHRoYXQgd2lsbCBnbyBpbiB0aGUgc3RyZWFtaGVhZGVyICovCi0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGhlYWRlciwgR1NUX0JVRkZFUl9GTEFHX0hFQURFUik7Ci0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKG1ldGFkYXRhLCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLSAgaWYgKHZpZGVvX2NvZGVjX2RhdGEgIT0gTlVMTCkgewotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKHZpZGVvX2NvZGVjX2RhdGEsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICAgIC8qIG1hcmsgYXMgYSBkZWx0YSB1bml0LCBzbyBkb3duc3RyZWFtIHdpbGwgbm90IHRyeSB0byBzeW5jaHJvbml6ZSBvbiB0aGF0Ci0gICAgICogYnVmZmVyIC0gdG8gYWN0dWFsbHkgc3RhcnQgcGxheWJhY2sgeW91IG5lZWQgYSByZWFsIHZpZGVvIGtleWZyYW1lICovCi0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAodmlkZW9fY29kZWNfZGF0YSwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICB9Ci0gIGlmIChhdWRpb19jb2RlY19kYXRhICE9IE5VTEwpIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChhdWRpb19jb2RlY19kYXRhLCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLSAgfQotCi0gIC8qIHB1dCBidWZmZXJzIGluIHN0cmVhbWhlYWRlciAqLwotICBnX3ZhbHVlX2luaXQgKCZzdHJlYW1oZWFkZXIsIEdTVF9UWVBFX0FSUkFZKTsKLSAgZ3N0X2Zsdl9tdXhfcHV0X2J1ZmZlcl9pbl9zdHJlYW1oZWFkZXIgKCZzdHJlYW1oZWFkZXIsIGhlYWRlcik7Ci0gIGdzdF9mbHZfbXV4X3B1dF9idWZmZXJfaW5fc3RyZWFtaGVhZGVyICgmc3RyZWFtaGVhZGVyLCBtZXRhZGF0YSk7Ci0gIGlmICh2aWRlb19jb2RlY19kYXRhICE9IE5VTEwpCi0gICAgZ3N0X2Zsdl9tdXhfcHV0X2J1ZmZlcl9pbl9zdHJlYW1oZWFkZXIgKCZzdHJlYW1oZWFkZXIsIHZpZGVvX2NvZGVjX2RhdGEpOwotICBpZiAoYXVkaW9fY29kZWNfZGF0YSAhPSBOVUxMKQotICAgIGdzdF9mbHZfbXV4X3B1dF9idWZmZXJfaW5fc3RyZWFtaGVhZGVyICgmc3RyZWFtaGVhZGVyLCBhdWRpb19jb2RlY19kYXRhKTsKLQotICAvKiBzdHJlYW0tc3RhcnQgKEZJWE1FOiBjcmVhdGUgaWQgYmFzZWQgb24gaW5wdXQgaWRzKSAqLwotICBnX3NucHJpbnRmIChzX2lkLCBzaXplb2YgKHNfaWQpLCAiZmx2bXV4LSUwOHgiLCBnX3JhbmRvbV9pbnQgKCkpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc19pZCkpOwotCi0gIC8qIGNyZWF0ZSB0aGUgY2FwcyBhbmQgcHV0IHRoZSBzdHJlYW1oZWFkZXIgaW4gdGhlbSAqLwotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtZmx2Iik7Ci0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCAic3RyZWFtaGVhZGVyIiwgJnN0cmVhbWhlYWRlcik7Ci0gIGdfdmFsdWVfdW5zZXQgKCZzdHJlYW1oZWFkZXIpOwotCi0gIGdzdF9wYWRfc2V0X2NhcHMgKG11eC0+c3JjcGFkLCBjYXBzKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogc2VnbWVudCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwKLSAgICAgIG11eC0+c3RyZWFtYWJsZSA/IEdTVF9GT1JNQVRfVElNRSA6IEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgLyogcHVzaCB0aGUgaGVhZGVyIGJ1ZmZlciwgdGhlIG1ldGFkYXRhIGFuZCB0aGUgY29kZWMgaW5mbywgaWYgYW55ICovCi0gIHJldCA9IGdzdF9mbHZfbXV4X3B1c2ggKG11eCwgaGVhZGVyKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGZhaWx1cmVfaGVhZGVyOwotICByZXQgPSBnc3RfZmx2X211eF9wdXNoIChtdXgsIG1ldGFkYXRhKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGZhaWx1cmVfbWV0YWRhdGE7Ci0gIGlmICh2aWRlb19jb2RlY19kYXRhICE9IE5VTEwpIHsKLSAgICByZXQgPSBnc3RfZmx2X211eF9wdXNoIChtdXgsIHZpZGVvX2NvZGVjX2RhdGEpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGZhaWx1cmVfdmlkZW9fY29kZWNfZGF0YTsKLSAgfQotICBpZiAoYXVkaW9fY29kZWNfZGF0YSAhPSBOVUxMKSB7Ci0gICAgcmV0ID0gZ3N0X2Zsdl9tdXhfcHVzaCAobXV4LCBhdWRpb19jb2RlY19kYXRhKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBmYWlsdXJlX2F1ZGlvX2NvZGVjX2RhdGE7Ci0gIH0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1mYWlsdXJlX2hlYWRlcjoKLSAgZ3N0X2J1ZmZlcl91bnJlZiAobWV0YWRhdGEpOwotCi1mYWlsdXJlX21ldGFkYXRhOgotICBpZiAodmlkZW9fY29kZWNfZGF0YSAhPSBOVUxMKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHZpZGVvX2NvZGVjX2RhdGEpOwotCi1mYWlsdXJlX3ZpZGVvX2NvZGVjX2RhdGE6Ci0gIGlmIChhdWRpb19jb2RlY19kYXRhICE9IE5VTEwpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYXVkaW9fY29kZWNfZGF0YSk7Ci0KLWZhaWx1cmVfYXVkaW9fY29kZWNfZGF0YToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfbXV4X3VwZGF0ZV9pbmRleCAoR3N0Rmx2TXV4ICogbXV4LCBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdEZsdlBhZCAqIGNwYWQpCi17Ci0gIC8qCi0gICAqIEFkZCB0aGUgdGFnIGJ5dGUgb2Zmc2V0IGFuZCB0byB0aGUgaW5kZXggaWYgaXQncyBhIHZhbGlkIHNlZWsgcG9pbnQsIHdoaWNoCi0gICAqIG1lYW5zIGl0J3MgZWl0aGVyIGEgdmlkZW8ga2V5ZnJhbWUgb3IgaWYgdGhlcmUgaXMgbm8gdmlkZW8gcGFkIChpbiB0aGF0Ci0gICAqIGNhc2UgZXZlcnkgRkxWIHRhZyBpcyBhIHZhbGlkIHNlZWsgcG9pbnQpCi0gICAqLwotICBpZiAobXV4LT5oYXZlX3ZpZGVvICYmCi0gICAgICAoIWNwYWQtPnZpZGVvIHx8Ci0gICAgICAgICAgR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpKQotICAgIHJldHVybjsKLQotICBpZiAoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZmZlcikpIHsKLSAgICBHc3RGbHZNdXhJbmRleEVudHJ5ICplbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RGbHZNdXhJbmRleEVudHJ5KTsKLSAgICBlbnRyeS0+cG9zaXRpb24gPSBtdXgtPmJ5dGVfY291bnQ7Ci0gICAgZW50cnktPnRpbWUgPSBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSkgLyBHU1RfU0VDT05EOwotICAgIG11eC0+aW5kZXggPSBnX2xpc3RfcHJlcGVuZCAobXV4LT5pbmRleCwgZW50cnkpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X211eF93cml0ZV9idWZmZXIgKEdzdEZsdk11eCAqIG11eCwgR3N0Rmx2UGFkICogY3BhZCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RCdWZmZXIgKnRhZzsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdENsb2NrVGltZSBkdHMgPSBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKTsKLQotICAvKiBjbGlwcGluZyBmdW5jdGlvbiBhcnJhbmdlZCBmb3IgcnVubmluZ190aW1lICovCi0KLSAgaWYgKCFtdXgtPnN0cmVhbWFibGUpCi0gICAgZ3N0X2Zsdl9tdXhfdXBkYXRlX2luZGV4IChtdXgsIGJ1ZmZlciwgY3BhZCk7Ci0KLSAgdGFnID0gZ3N0X2Zsdl9tdXhfYnVmZmVyX3RvX3RhZyAobXV4LCBidWZmZXIsIGNwYWQpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgcmV0ID0gZ3N0X2Zsdl9tdXhfcHVzaCAobXV4LCB0YWcpOwotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR0cykpCi0gICAgY3BhZC0+bGFzdF90aW1lc3RhbXAgPSBkdHM7Ci0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZ3N0X2Zsdl9tdXhfZGV0ZXJtaW5lX2R1cmF0aW9uIChHc3RGbHZNdXggKiBtdXgpCi17Ci0gIEdTTGlzdCAqbDsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJ0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlvbiAiCi0gICAgICAiZnJvbSBwYWQgdGltZXN0YW1wcyIpOwotCi0gIGZvciAobCA9IG11eC0+Y29sbGVjdC0+ZGF0YTsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdEZsdlBhZCAqY3BhZCA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoY3BhZCAmJiAoY3BhZC0+bGFzdF90aW1lc3RhbXAgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkpIHsKLSAgICAgIGlmIChkdXJhdGlvbiA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICBkdXJhdGlvbiA9IGNwYWQtPmxhc3RfdGltZXN0YW1wOwotICAgICAgZWxzZQotICAgICAgICBkdXJhdGlvbiA9IE1BWCAoZHVyYXRpb24sIGNwYWQtPmxhc3RfdGltZXN0YW1wKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X211eF93cml0ZV9lb3MgKEdzdEZsdk11eCAqIG11eCkKLXsKLSAgR3N0QnVmZmVyICp0YWc7Ci0gIEdzdEZsdlBhZCAqdmlkZW9fcGFkID0gTlVMTDsKLSAgR1NMaXN0ICpsID0gbXV4LT5jb2xsZWN0LT5kYXRhOwotCi0gIGlmICghbXV4LT5oYXZlX3ZpZGVvKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBmb3IgKDsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RGbHZQYWQgKmNwYWQgPSBsLT5kYXRhOwotICAgIGlmIChjcGFkICYmIGNwYWQtPnZpZGVvKSB7Ci0gICAgICB2aWRlb19wYWQgPSBjcGFkOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgdGFnID0gZ3N0X2Zsdl9tdXhfZW9zX3RvX3RhZyAobXV4LCB2aWRlb19wYWQpOwotCi0gIHJldHVybiBnc3RfZmx2X211eF9wdXNoIChtdXgsIHRhZyk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X211eF9yZXdyaXRlX2hlYWRlciAoR3N0Rmx2TXV4ICogbXV4KQotewotICBHc3RCdWZmZXIgKnJld3JpdGUsICppbmRleCwgKnRtcDsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBndWludDggKmRhdGE7Ci0gIGdkb3VibGUgZDsKLSAgR0xpc3QgKmw7Ci0gIGd1aW50MzIgaW5kZXhfbGVuLCBhbGxvY2F0ZV9zaXplOwotICBndWludDMyIGksIGluZGV4X3NraXA7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0Q2xvY2tUaW1lIGR1cjsKLQotICBpZiAobXV4LT5zdHJlYW1hYmxlKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBzZWVrIGJhY2sgdG8gdGhlIHByZWFsbG9jYXRlZCBpbmRleCBzcGFjZSAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIHNlZ21lbnQuc3RhcnQgPSBzZWdtZW50LnRpbWUgPSAxMyArIDI5OwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICBpZiAoIWdzdF9wYWRfcHVzaF9ldmVudCAobXV4LT5zcmNwYWQsIGV2ZW50KSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiU2VlayB0byByZXdyaXRlIGhlYWRlciBmYWlsZWQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICAvKiBkZXRlcm1pbmUgZHVyYXRpb24gbm93IGJhc2VkIG9uIG91ciBvd24gdGltZXN0YW1waW5nLAotICAgKiBzbyB0aGF0IGl0IGlzIGxpa2VseSBtYW55IHRpbWVzIGJldHRlciBhbmQgY29uc2lzdGVudAotICAgKiB0aGFuIHdoYXRldmVyIG9idGFpbmVkIGJ5IHNvbWUgcXVlcnkgKi8KLSAgZHVyID0gZ3N0X2Zsdl9tdXhfZGV0ZXJtaW5lX2R1cmF0aW9uIChtdXgpOwotICBpZiAoZHVyICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgbXV4LT5kdXJhdGlvbiA9IGR1cjsKLQotICAvKiByZXdyaXRlIHRoZSBkdXJhdGlvbiB0YWcgKi8KLSAgZCA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKG11eC0+ZHVyYXRpb24pOwotICBkIC89IChnZG91YmxlKSBHU1RfU0VDT05EOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgImRldGVybWluZWQgdGhlIGZpbmFsIGR1cmF0aW9uIHRvIGJlICVmIiwgZCk7Ci0KLSAgcmV3cml0ZSA9IGdzdF9mbHZfbXV4X2NyZWF0ZV9udW1iZXJfc2NyaXB0X3ZhbHVlICgiZHVyYXRpb24iLCBkKTsKLQotICAvKiByZXdyaXRlIHRoZSBmaWxlc2l6ZSB0YWcgKi8KLSAgZCA9IGdzdF9ndWludDY0X3RvX2dkb3VibGUgKG11eC0+Ynl0ZV9jb3VudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAicHV0dGluZyB0b3RhbCBmaWxlc2l6ZSAlZiBpbiB0aGUgbWV0YWRhdGEiLCBkKTsKLQotICB0bXAgPSBnc3RfZmx2X211eF9jcmVhdGVfbnVtYmVyX3NjcmlwdF92YWx1ZSAoImZpbGVzaXplIiwgZCk7Ci0gIHJld3JpdGUgPSBnc3RfYnVmZmVyX2FwcGVuZCAocmV3cml0ZSwgdG1wKTsKLQotICBpZiAoIW11eC0+aW5kZXgpIHsKLSAgICAvKiBubyBpbmRleCwgc28gcHVzaCBidWZmZXIgYW5kIHJldHVybiAqLwotICAgIHJldHVybiBnc3RfZmx2X211eF9wdXNoIChtdXgsIHJld3JpdGUpOwotICB9Ci0KLSAgLyogcmV3cml0ZSB0aGUgaW5kZXggKi8KLSAgbXV4LT5pbmRleCA9IGdfbGlzdF9yZXZlcnNlIChtdXgtPmluZGV4KTsKLSAgaW5kZXhfbGVuID0gZ19saXN0X2xlbmd0aCAobXV4LT5pbmRleCk7Ci0KLSAgLyogV2Ugd3JpdGUgYXQgbW9zdCBNQVhfSU5ERVhfRU5UUklFUyBlbGVtZW50cyAqLwotICBpZiAoaW5kZXhfbGVuID4gTUFYX0lOREVYX0VOVFJJRVMpIHsKLSAgICBpbmRleF9za2lwID0gMSArIGluZGV4X2xlbiAvIE1BWF9JTkRFWF9FTlRSSUVTOwotICAgIGluZGV4X2xlbiA9IChpbmRleF9sZW4gKyBpbmRleF9za2lwIC0gMSkgLyBpbmRleF9za2lwOwotICB9IGVsc2UgewotICAgIGluZGV4X3NraXAgPSAxOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiSW5kZXggbGVuZ3RoIGlzICVkIiwgaW5kZXhfbGVuKTsKLSAgLyogc2VlIHNpemUgY2FsY3VsYXRpb24gaW4gZ3N0X2Zsdl9tdXhfcHJlYWxsb2NhdGVfaW5kZXggKi8KLSAgYWxsb2NhdGVfc2l6ZSA9IDExICsgOCArIDIyICsgMTAgKyBpbmRleF9sZW4gKiAxODsKLSAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiQWxsb2NhdGluZyAlZCBieXRlcyBmb3IgaW5kZXgiLCBhbGxvY2F0ZV9zaXplKTsKLSAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoYWxsb2NhdGVfc2l6ZSwgJmluZGV4LCAmZGF0YSk7Ci0KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSwgOSk7ICAgICAgICAvKiB0aGUgJ2tleWZyYW1lcycga2V5ICovCi0gIG1lbWNweSAoZGF0YSArIDIsICJrZXlmcmFtZXMiLCA5KTsKLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgMTEsIDgpOyAgICAgICAvKiBuZXN0ZWQgRUNNQSBhcnJheSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgMTIsIDIpOyAgIC8qIHR3byBlbGVtZW50cyAqLwotICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhICsgMTYsIDUpOyAgIC8qIGZpcnN0IHN0cmluZyBrZXk6ICd0aW1lcycgKi8KLSAgbWVtY3B5IChkYXRhICsgMTgsICJ0aW1lcyIsIDUpOwotICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAyMywgMTApOyAgICAgIC8qIHN0cmljdCBhcnJheSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgMjQsIGluZGV4X2xlbik7Ci0gIGRhdGEgKz0gMjg7Ci0KLSAgLyogdGhlIGtleWZyYW1lcycgdGltZXMgKi8KLSAgZm9yIChpID0gMCwgbCA9IG11eC0+aW5kZXg7IGw7IGwgPSBsLT5uZXh0LCBpKyspIHsKLSAgICBHc3RGbHZNdXhJbmRleEVudHJ5ICplbnRyeSA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoaSAlIGluZGV4X3NraXAgIT0gMCkKLSAgICAgIGNvbnRpbnVlOwotICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSwgMCk7ICAvKiBudW1lcmljIChha2EgZG91YmxlKSAqLwotICAgIEdTVF9XUklURV9ET1VCTEVfQkUgKGRhdGEgKyAxLCBlbnRyeS0+dGltZSk7Ci0gICAgZGF0YSArPSA5OwotICB9Ci0KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSwgMTMpOyAgICAgICAvKiBzZWNvbmQgc3RyaW5nIGtleTogJ2ZpbGVwb3NpdGlvbnMnICovCi0gIG1lbWNweSAoZGF0YSArIDIsICJmaWxlcG9zaXRpb25zIiwgMTMpOwotICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAxNSwgMTApOyAgICAgIC8qIHN0cmljdCBhcnJheSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgMTYsIGluZGV4X2xlbik7Ci0gIGRhdGEgKz0gMjA7Ci0KLSAgLyogdGhlIGtleWZyYW1lcycgZmlsZSBwb3NpdGlvbnMgKi8KLSAgZm9yIChpID0gMCwgbCA9IG11eC0+aW5kZXg7IGw7IGwgPSBsLT5uZXh0LCBpKyspIHsKLSAgICBHc3RGbHZNdXhJbmRleEVudHJ5ICplbnRyeSA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoaSAlIGluZGV4X3NraXAgIT0gMCkKLSAgICAgIGNvbnRpbnVlOwotICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSwgMCk7Ci0gICAgR1NUX1dSSVRFX0RPVUJMRV9CRSAoZGF0YSArIDEsIGVudHJ5LT5wb3NpdGlvbik7Ci0gICAgZGF0YSArPSA5OwotICB9Ci0KLSAgR1NUX1dSSVRFX1VJTlQyNF9CRSAoZGF0YSwgOSk7ICAgICAgICAvKiBmaW5pc2ggdGhlIEVDTUEgYXJyYXkgKi8KLQotICAvKiBJZiB0aGVyZSBpcyBzcGFjZSBsZWZ0IGluIHRoZSBwcmVmaWxsZWQgYXJlYSwgcmVpbnNlcnQgdGhlIGZpbGxlci4KLSAgICAgVGhlcmUgaXMgYXQgbGVhc3QgMTggIGJ5dGVzIGZyZWUsIHNvIGl0IHdpbGwgYWx3YXlzIGZpdC4gKi8KLSAgaWYgKGluZGV4X2xlbiA8IE1BWF9JTkRFWF9FTlRSSUVTKSB7Ci0gICAgR3N0QnVmZmVyICp0bXA7Ci0gICAgZ3VpbnQ4ICpkYXRhOwotICAgIGd1aW50MzIgcmVtYWluaW5nX2ZpbGxlcl9zaXplOwotCi0gICAgX2dzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTQsICZ0bXAsICZkYXRhKTsKLSAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhLCA5KTsKLSAgICBtZW1jcHkgKGRhdGEgKyAyLCAiZ3N0ZmlsbGVyIiwgOSk7Ci0gICAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgMTEsIDIpOyAgICAgLyogc3RyaW5nICovCi0KLSAgICAvKiBUaGVyZSBpcyAxOCBieXRlcyBwZXIgcmVtYWluaW5nIGluZGV4IGVudHJ5IG1pbnVzIHdoYXQgaXMgdXNlZCBmb3IKLSAgICAgKiB0aGUnZ3N0ZmlsbGVyJyBrZXkuIFRoZSByZXN0IGlzIGFscmVhZHkgZmlsbGVkIHdpdGggc3BhY2VzLCBzbyBqdXN0IG5lZWQKLSAgICAgKiB0byB1cGRhdGUgbGVuZ3RoLiAqLwotICAgIHJlbWFpbmluZ19maWxsZXJfc2l6ZSA9IChNQVhfSU5ERVhfRU5UUklFUyAtIGluZGV4X2xlbikgKiAxOCAtIDE0OwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgIlJlbWFpbmluZyBmaWxsZXIgc2l6ZSBpcyAlZCBieXRlcyIsCi0gICAgICAgIHJlbWFpbmluZ19maWxsZXJfc2l6ZSk7Ci0gICAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSArIDEyLCByZW1haW5pbmdfZmlsbGVyX3NpemUpOwotICAgIGluZGV4ID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGluZGV4LCB0bXApOwotICB9Ci0KLSAgcmV3cml0ZSA9IGdzdF9idWZmZXJfYXBwZW5kIChyZXdyaXRlLCBpbmRleCk7Ci0KLSAgcmV0dXJuIGdzdF9mbHZfbXV4X3B1c2ggKG11eCwgcmV3cml0ZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx2X211eF9oYW5kbGVfYnVmZmVyIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogY2RhdGEsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEZsdk11eCAqbXV4ID0gR1NUX0ZMVl9NVVggKHVzZXJfZGF0YSk7Ci0gIEdzdEZsdlBhZCAqYmVzdDsKLSAgZ2ludDY0IGJlc3RfdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBpZiAobXV4LT5zdGF0ZSA9PSBHU1RfRkxWX01VWF9TVEFURV9IRUFERVIpIHsKLSAgICBpZiAobXV4LT5jb2xsZWN0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdXgsIFNUUkVBTSwgTVVYLCAoTlVMTCksCi0gICAgICAgICAgKCJObyBpbnB1dCBzdHJlYW1zIGNvbmZpZ3VyZWQiKSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotCi0gICAgcmV0ID0gZ3N0X2Zsdl9tdXhfd3JpdGVfaGVhZGVyIChtdXgpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICBtdXgtPnN0YXRlID0gR1NUX0ZMVl9NVVhfU1RBVEVfREFUQTsKLQotICAgIGlmIChjZGF0YSAmJiBHU1RfQ09MTEVDVF9QQURTX0RUU19JU19WQUxJRCAoY2RhdGEpKQotICAgICAgbXV4LT5maXJzdF90aW1lc3RhbXAgPSBHU1RfQ09MTEVDVF9QQURTX0RUUyAoY2RhdGEpOwotICAgIGVsc2UKLSAgICAgIG11eC0+Zmlyc3RfdGltZXN0YW1wID0gMDsKLSAgfQotCi0gIGlmIChtdXgtPm5ld190YWdzKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBnc3RfZmx2X211eF9jcmVhdGVfbWV0YWRhdGEgKG11eCwgRkFMU0UpOwotICAgIGlmIChidWYpCi0gICAgICBnc3RfZmx2X211eF9wdXNoIChtdXgsIGJ1Zik7Ci0gICAgbXV4LT5uZXdfdGFncyA9IEZBTFNFOwotICB9Ci0KLSAgYmVzdCA9IChHc3RGbHZQYWQgKikgY2RhdGE7Ci0gIGlmIChiZXN0KSB7Ci0gICAgZ19hc3NlcnQgKGJ1ZmZlcik7Ci0gICAgYmVzdC0+ZHRzID0gR1NUX0NPTExFQ1RfUEFEU19EVFMgKGNkYXRhKTsKLQotICAgIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKGJlc3QtPmR0cykpCi0gICAgICBiZXN0X3RpbWUgPSBiZXN0LT5kdHMgLSBtdXgtPmZpcnN0X3RpbWVzdGFtcDsKLQotICAgIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmZmVyKSkKLSAgICAgIGJlc3QtPnB0cyA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICAgIGVsc2UKLSAgICAgIGJlc3QtPnB0cyA9IGJlc3QtPmR0czsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChtdXgsICJnb3QgYnVmZmVyIFBUUyAlIiBHU1RfVElNRV9GT1JNQVQgIiBEVFMgJSIKLSAgICAgICAgR1NUX1NUSU1FX0ZPUk1BVCAiXG4iLCBHU1RfVElNRV9BUkdTIChiZXN0LT5wdHMpLAotICAgICAgICBHU1RfU1RJTUVfQVJHUyAoYmVzdC0+ZHRzKSk7Ci0gIH0gZWxzZSB7Ci0gICAgYmVzdF90aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIH0KLQotICAvKiBUaGUgRkxWIHRpbWVzdGFtcCBpcyBhbiBpbnQzMiBmaWVsZC4gRm9yIG5vbi1saXZlIHN0cmVhbXMgZXJyb3Igb3V0IGlmIGEKLSAgICAgYmlnZ2VyIHRpbWVzdGFtcCBpcyBzZWVuLCBmb3IgbGl2ZSB0aGUgdGltZXN0YW1wIHdpbGwgZ2V0IHdyYXBwZWQgaW4KLSAgICAgZ3N0X2Zsdl9tdXhfYnVmZmVyX3RvX3RhZyAqLwotICBpZiAoIW11eC0+c3RyZWFtYWJsZSAmJiAoR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChiZXN0X3RpbWUpKQotICAgICAgJiYgYmVzdF90aW1lIC8gR1NUX01TRUNPTkQgPiBHX01BWElOVDMyKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJUaW1lc3RhbXAgbGFyZ2VyIHRoYW4gRkxWIHN1cHBvcnRzIC0gRU9TIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBidWZmZXIgPSBOVUxMOwotICAgIGJlc3QgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGJlc3QpIHsKLSAgICByZXR1cm4gZ3N0X2Zsdl9tdXhfd3JpdGVfYnVmZmVyIChtdXgsIGJlc3QsIGJ1ZmZlcik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogRklYTUUgY2hlY2sgcmV0dXJuIHZhbHVlcyAqLwotICAgIGdzdF9mbHZfbXV4X3dyaXRlX2VvcyAobXV4KTsKLSAgICBnc3RfZmx2X211eF9yZXdyaXRlX2hlYWRlciAobXV4KTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2Zsdl9tdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEZsdk11eCAqbXV4ID0gR1NUX0ZMVl9NVVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NUUkVBTUFCTEU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgbXV4LT5zdHJlYW1hYmxlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mbHZfbXV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RGbHZNdXggKm11eCA9IEdTVF9GTFZfTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TVFJFQU1BQkxFOgotICAgICAgbXV4LT5zdHJlYW1hYmxlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgaWYgKG11eC0+c3RyZWFtYWJsZSkKLSAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfc2V0X3RhZ19tZXJnZV9tb2RlIChHU1RfVEFHX1NFVFRFUiAobXV4KSwKLSAgICAgICAgICAgIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF90YWdfc2V0dGVyX3NldF90YWdfbWVyZ2VfbW9kZSAoR1NUX1RBR19TRVRURVIgKG11eCksCi0gICAgICAgICAgICBHU1RfVEFHX01FUkdFX0tFRVApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9mbHZfbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0Rmx2TXV4ICptdXggPSBHU1RfRkxWX01VWCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAobXV4LT5jb2xsZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKG11eC0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2Zsdl9tdXhfcmVzZXQgKEdTVF9FTEVNRU5UIChtdXgpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9mbHYvZ3N0Zmx2bXV4LmggYi9nc3QvZmx2L2dzdGZsdm11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjBjOGFmLi4wMDAwMDAwCi0tLSBhL2dzdC9mbHYvZ3N0Zmx2bXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9GTFZfTVVYX0hfXwotI2RlZmluZSBfX0dTVF9GTFZfTVVYX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9GTFZfTVVYIFwKLSAgKGdzdF9mbHZfbXV4X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfRkxWX01VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfRkxWX01VWCwgR3N0Rmx2TXV4KSkKLSNkZWZpbmUgR1NUX0ZMVl9NVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9GTFZfTVVYLCBHc3RGbHZNdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19GTFZfTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9GTFZfTVVYKSkKLSNkZWZpbmUgR1NUX0lTX0ZMVl9NVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9GTFZfTVVYKSkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0Q29sbGVjdERhdGEgY29sbGVjdDsKLQotICBnYm9vbGVhbiB2aWRlbzsKLQotICBndWludCBhdWRpb19jb2RlYzsKLSAgZ3VpbnQgcmF0ZTsKLSAgZ3VpbnQgd2lkdGg7Ci0gIGd1aW50IGNoYW5uZWxzOwotICBHc3RCdWZmZXIgKmF1ZGlvX2NvZGVjX2RhdGE7Ci0KLSAgZ3VpbnQgdmlkZW9fY29kZWM7Ci0gIEdzdEJ1ZmZlciAqdmlkZW9fY29kZWNfZGF0YTsKLQotICBndWludCBiaXRyYXRlOwotCi0gIEdzdENsb2NrVGltZSBsYXN0X3RpbWVzdGFtcDsKLSAgZ2ludDY0IHB0czsKLSAgZ2ludDY0IGR0czsKLX0gR3N0Rmx2UGFkOwotCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX0ZMVl9NVVhfU1RBVEVfSEVBREVSLAotICBHU1RfRkxWX01VWF9TVEFURV9EQVRBCi19IEdzdEZsdk11eFN0YXRlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0Rmx2TXV4IHsKLSAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKLQotICBHc3RQYWQgICAgICAgICAqc3JjcGFkOwotICBHc3RDb2xsZWN0UGFkcyAqY29sbGVjdDsKLQotICAvKiA8cHJpdmF0ZT4gKi8KLSAgR3N0Rmx2TXV4U3RhdGUgc3RhdGU7Ci0gIGdib29sZWFuIGhhdmVfYXVkaW87Ci0gIGdib29sZWFuIGhhdmVfdmlkZW87Ci0gIGdib29sZWFuIHN0cmVhbWFibGU7Ci0KLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgZ2Jvb2xlYW4gbmV3X3RhZ3M7Ci0gIEdMaXN0ICppbmRleDsKLSAgZ3VpbnQ2NCBieXRlX2NvdW50OwotICBndWludDY0IGR1cmF0aW9uOwotICBnaW50NjQgZmlyc3RfdGltZXN0YW1wOwotfSBHc3RGbHZNdXg7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RGbHZNdXhDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnQ7Ci19IEdzdEZsdk11eENsYXNzOwotCi1HVHlwZSAgICBnc3RfZmx2X211eF9nZXRfdHlwZSAgICAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9GTFZfTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2Zsdi9nc3RpbmRleC5jIGIvZ3N0L2Zsdi9nc3RpbmRleC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmQ3ZmEzLi4wMDAwMDAwCi0tLSBhL2dzdC9mbHYvZ3N0aW5kZXguYworKysgL2Rldi9udWxsCkBAIC0xLDEwMTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4gKGh0dHA6Ly93d3cucmlkZ2VydW4uY29tLykKLSAqIFdyaXR0ZW4gYnkgRXJpayBXYWx0aGluc2VuIDxvbWVnYUByaWRnZXJ1bi5jb20+Ci0gKgotICogZ3N0aW5kZXguYzogSW5kZXggZm9yIG1hcHBpbmdzIGFuZCBvdGhlciBkYXRhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmdzdGluZGV4Ci0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEdlbmVyYXRlIGluZGV4ZXMgb24gb2JqZWN0cwotICogQHNlZV9hbHNvOiAjR3N0SW5kZXhGYWN0b3J5Ci0gKgotICogR3N0SW5kZXggaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHN0cmVhbSBpbmRleCBvZiBvbmUgb3IgbW9yZSBlbGVtZW50cwotICogaW4gYSBwaXBlbGluZS4KLSAqCi0gKiBFbGVtZW50cyB3aWxsIG92ZXJsb2FkIHRoZSBzZXRfaW5kZXggYW5kIGdldF9pbmRleCB2aXJ0dWFsIG1ldGhvZHMgaW4KLSAqICNHc3RFbGVtZW50LiBXaGVuIHN0cmVhbWluZyBkYXRhLCB0aGUgZWxlbWVudCB3aWxsIGFkZCBpbmRleCBlbnRyaWVzIGlmIGl0Ci0gKiBoYXMgYW4gaW5kZXggc2V0LgotICoKLSAqIEVhY2ggZWxlbWVudCB0aGF0IGFkZHMgdG8gdGhlIGluZGV4IHdpbGwgZG8gdGhhdCB1c2luZyBhIHdyaXRlcl9pZC4gVGhlCi0gKiB3cml0ZXJfaWQgaXMgb2J0YWluZWQgZnJvbSBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCgpLgotICoKLSAqIFRoZSBhcHBsaWNhdGlvbiB0aGF0IHdhbnRzIHRvIGluZGV4IHRoZSBzdHJlYW0gd2lsbCBjcmVhdGUgYSBuZXcgaW5kZXggb2JqZWN0Ci0gKiB1c2luZyBnc3RfaW5kZXhfbmV3KCkgb3IgZ3N0X2luZGV4X2ZhY3RvcnlfbWFrZSgpLiBUaGUgaW5kZXggaXMgYXNzaWduZWQgdG8gYQotICogc3BlY2lmaWMgZWxlbWVudCwgYSBiaW4gb3IgdGhlIHdob2xlIHBpcGVsaW5lLiBUaGlzIHdpbGwgY2F1c2UgaW5kZXhhYmxlCi0gKiBlbGVtZW50cyB0byBhZGQgZW50aXJlcyB0byB0aGUgaW5kZXggd2hpbGUgcGxheWluZy4KLSAqLwotCi0vKiBGSVhNRTogY29tcGxldGUgZ29iamVjdCBhbm5vdGF0aW9ucyAqLwotLyogRklYTUUtMC4xMTogY2xlYW51cCBBUEkKLSAqIC0gbm8gb25lIHNlZW1zIHRvIHVzZSBHc3RJbmRleEdyb3VwLCBHc3RJbmRleENlcnRhaW50eQotICoKLSAqIC0gdGhlIEFQSSBmb3IgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBpbmRleCBpcyBtb3N0bHkgbWlzc2luZwotICogICAtIGFwcHMgbmVlZCB0byBnZXQgYSBsaXN0IG9mIHdyaXRlcnMKLSAqICAgLSBhcHBzIG5lZWQgdG8gYmUgYWJsZSB0byBpdGVyYXRlIG92ZXIgZWFjaCB3cml0ZXJzIGluZGV4IGVudHJ5IGNvbGxlY3Rpb24KLSAqIC0gZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeSgpIHNob3VsZCBwYXNzIG93bmVyc2hpcAotICogICAtIHRoZSBHc3RJbmRleEVudHJ5IHN0cnVjdHVyZSBpcyBsYXJnZSBhbmQgY29udGFpbnMgcmVwZXRpdGl2ZSBpbmZvcm1hdGlvbgotICogICAtIHdlIHdhbnQgdG8gYWxsb3cgSW5kZXhlcnMgdG8gaW1wbGVtZW50IGEgc2FuZXIgc3RvcmFnZSBhbmQgY3JlYXRlCi0gKiAgICAgR3N0SW5kZXhFbnRyaWVzIG9uIGRlbWFuZCAodGhlIGFwcCBoYXMgdG8gZnJlZSB0aGVtKSwgbWlnaHQgZXZlbiBtYWtlCi0gKiAgICAgc2Vuc2UgdG8gYXNrIHRoZSBhcHAgdG8gcHJvdmlkZSBhIHB0ciBhbmQgZmlsbCBpdC4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLS8qIEluZGV4IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgRU5UUllfQURERUQsCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9SRVNPTFZFUgotICAgICAgLyogRklMTCBNRSAqLwotfTsKLQotI2lmIDAKLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGluZGV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGluZGV4X2RlYnVnCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZ3N0X2luZGV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2luZGV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9pbmRleF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RJbmRleEdyb3VwICpnc3RfaW5kZXhfZ3JvdXBfbmV3IChndWludCBncm91cG51bSk7Ci1zdGF0aWMgdm9pZCBnc3RfaW5kZXhfZ3JvdXBfZnJlZSAoR3N0SW5kZXhHcm91cCAqIGdyb3VwKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9pbmRleF9wYXRoX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCi0gICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2luZGV4X2d0eXBlX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCi0gICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSk7Ci1zdGF0aWMgdm9pZCBnc3RfaW5kZXhfYWRkX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X2luZGV4X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEluZGV4UmVzb2x2ZXJNZXRob2QgbWV0aG9kOwotICBHc3RJbmRleFJlc29sdmVyIHJlc29sdmVyOwotICBncG9pbnRlciB1c2VyX2RhdGE7Ci19Ci1SZXNvbHZlckVudHJ5OwotCi1zdGF0aWMgY29uc3QgUmVzb2x2ZXJFbnRyeSByZXNvbHZlcnNbXSA9IHsKLSAge0dTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00sIE5VTEwsIE5VTEx9LAotICB7R1NUX0lOREVYX1JFU09MVkVSX0dUWVBFLCBnc3RfaW5kZXhfZ3R5cGVfcmVzb2x2ZXIsIE5VTEx9LAotICB7R1NUX0lOREVYX1JFU09MVkVSX1BBVEgsIGdzdF9pbmRleF9wYXRoX3Jlc29sdmVyLCBOVUxMfSwKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfUkVTT0xWRVIgKGdzdF9pbmRleF9yZXNvbHZlcl9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfaW5kZXhfcmVzb2x2ZXJfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBpbmRleF9yZXNvbHZlcl90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgaW5kZXhfcmVzb2x2ZXJbXSA9IHsKLSAgICB7R1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT00iLCAiY3VzdG9tIn0sCi0gICAge0dTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSwgIkdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRSIsICJndHlwZSJ9LAotICAgIHtHU1RfSU5ERVhfUkVTT0xWRVJfUEFUSCwgIkdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIIiwgInBhdGgifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFpbmRleF9yZXNvbHZlcl90eXBlKSB7Ci0gICAgaW5kZXhfcmVzb2x2ZXJfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RGbHZEZW11eEluZGV4UmVzb2x2ZXIiLCBpbmRleF9yZXNvbHZlcik7Ci0gIH0KLSAgcmV0dXJuIGluZGV4X3Jlc29sdmVyX3R5cGU7Ci19Ci0KLUdUeXBlCi1nc3RfaW5kZXhfZW50cnlfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBpbmRleF9lbnRyeV90eXBlID0gMDsKLQotICBpZiAoIWluZGV4X2VudHJ5X3R5cGUpIHsKLSAgICBpbmRleF9lbnRyeV90eXBlID0gZ19ib3hlZF90eXBlX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdEZsdkRlbXV4SW5kZXhFbnRyeSIsCi0gICAgICAgIChHQm94ZWRDb3B5RnVuYykgZ3N0X2luZGV4X2VudHJ5X2NvcHksCi0gICAgICAgIChHQm94ZWRGcmVlRnVuYykgZ3N0X2luZGV4X2VudHJ5X2ZyZWUpOwotICB9Ci0gIHJldHVybiBpbmRleF9lbnRyeV90eXBlOwotfQotCi0jaWYgMAotI2RlZmluZSBfZG9faW5pdCBcCi17IFwKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGluZGV4X2RlYnVnLCAiR1NUX0lOREVYIiwgR1NUX0RFQlVHX0JPTEQsIFwKLSAgICAgICJHZW5lcmljIGluZGV4aW5nIHN1cHBvcnQiKTsgXAotfQotI2VuZGlmCi0KLXR5cGVkZWYgR3N0SW5kZXggR3N0Rmx2RGVtdXhJbmRleDsKLXR5cGVkZWYgR3N0SW5kZXhDbGFzcyBHc3RGbHZEZW11eEluZGV4Q2xhc3M7Ci0vL3R5cGVkZWYgR3N0SW5kZXhFbnRyeSBHc3RGbHZEZW11eEluZGV4RW50cnk7Ci1HX0RFRklORV9UWVBFIChHc3RGbHZEZW11eEluZGV4LCBnc3RfaW5kZXgsIEdTVF9UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5kZXhfY2xhc3NfaW5pdCAoR3N0SW5kZXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIC8qKgotICAgKiBHc3RJbmRleDo6ZW50cnktYWRkZWQKLSAgICogQGdzdGluZGV4OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwuCi0gICAqIEBhcmcxOiBUaGUgZW50cnkgYWRkZWQgdG8gdGhlIGluZGV4LgotICAgKgotICAgKiBJcyBlbWl0dGVkIHdoZW4gYSBuZXcgZW50cnkgaXMgYWRkZWQgdG8gdGhlIGluZGV4LgotICAgKi8KLSAgZ3N0X2luZGV4X3NpZ25hbHNbRU5UUllfQURERURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImVudHJ5LWFkZGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdEluZGV4Q2xhc3MsIGVudHJ5X2FkZGVkKSwgTlVMTCwgTlVMTCwKLSAgICAgIE5VTEwsIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9JTkRFWF9FTlRSWSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2luZGV4X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2luZGV4X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfaW5kZXhfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRVNPTFZFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgicmVzb2x2ZXIiLCAiUmVzb2x2ZXIiLAotICAgICAgICAgICJTZWxlY3QgYSBwcmVkZWZpbmVkIG9iamVjdCB0byBzdHJpbmcgbWFwcGVyIiwKLSAgICAgICAgICBHU1RfVFlQRV9JTkRFWF9SRVNPTFZFUiwgR1NUX0lOREVYX1JFU09MVkVSX1BBVEgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5kZXhfaW5pdCAoR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgaW5kZXgtPmN1cmdyb3VwID0gZ3N0X2luZGV4X2dyb3VwX25ldyAoMCk7Ci0gIGluZGV4LT5tYXhncm91cCA9IDA7Ci0gIGluZGV4LT5ncm91cHMgPSBnX2xpc3RfcHJlcGVuZCAoTlVMTCwgaW5kZXgtPmN1cmdyb3VwKTsKLQotICBpbmRleC0+d3JpdGVycyA9IGdfaGFzaF90YWJsZV9uZXcgKE5VTEwsIE5VTEwpOwotICBpbmRleC0+bGFzdF9pZCA9IDA7Ci0KLSAgaW5kZXgtPm1ldGhvZCA9IEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIOwotICBpbmRleC0+cmVzb2x2ZXIgPSByZXNvbHZlcnNbaW5kZXgtPm1ldGhvZF0ucmVzb2x2ZXI7Ci0gIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEgPSByZXNvbHZlcnNbaW5kZXgtPm1ldGhvZF0udXNlcl9kYXRhOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGluZGV4LCBHU1RfSU5ERVhfV1JJVEFCTEUpOwotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChpbmRleCwgR1NUX0lOREVYX1JFQURBQkxFKTsKLQotICBHU1RfREVCVUcgKCJjcmVhdGVkIG5ldyBpbmRleCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2ZyZWVfd3JpdGVyIChncG9pbnRlciBrZXksIGdwb2ludGVyIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEluZGV4RW50cnkgKmVudHJ5ID0gKEdzdEluZGV4RW50cnkgKikgdmFsdWU7Ci0KLSAgaWYgKGVudHJ5KSB7Ci0gICAgZ3N0X2luZGV4X2VudHJ5X2ZyZWUgKGVudHJ5KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RJbmRleCAqaW5kZXggPSBHU1RfSU5ERVggKG9iamVjdCk7Ci0KLSAgaWYgKGluZGV4LT5ncm91cHMpIHsKLSAgICBnX2xpc3RfZm9yZWFjaCAoaW5kZXgtPmdyb3VwcywgKEdGdW5jKSBnc3RfaW5kZXhfZ3JvdXBfZnJlZSwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUgKGluZGV4LT5ncm91cHMpOwotICAgIGluZGV4LT5ncm91cHMgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGluZGV4LT53cml0ZXJzKSB7Ci0gICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKGluZGV4LT53cml0ZXJzLCBnc3RfaW5kZXhfZnJlZV93cml0ZXIsIE5VTEwpOwotICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChpbmRleC0+d3JpdGVycyk7Ci0gICAgaW5kZXgtPndyaXRlcnMgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhICYmIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kpCi0gICAgaW5kZXgtPmZpbHRlcl91c2VyX2RhdGFfZGVzdHJveSAoaW5kZXgtPmZpbHRlcl91c2VyX2RhdGEpOwotCi0gIGlmIChpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhICYmIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGFfZGVzdHJveSkKLSAgICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kgKGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfaW5kZXhfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5kZXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEluZGV4ICppbmRleDsKLQotICBpbmRleCA9IEdTVF9JTkRFWCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUkVTT0xWRVI6Ci0gICAgICBpbmRleC0+bWV0aG9kID0gKEdzdEluZGV4UmVzb2x2ZXJNZXRob2QpIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGluZGV4LT5yZXNvbHZlciA9IHJlc29sdmVyc1tpbmRleC0+bWV0aG9kXS5yZXNvbHZlcjsKLSAgICAgIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEgPSByZXNvbHZlcnNbaW5kZXgtPm1ldGhvZF0udXNlcl9kYXRhOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJbmRleCAqaW5kZXg7Ci0KLSAgaW5kZXggPSBHU1RfSU5ERVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1JFU09MVkVSOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGluZGV4LT5tZXRob2QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0SW5kZXhHcm91cCAqCi1nc3RfaW5kZXhfZ3JvdXBfbmV3IChndWludCBncm91cG51bSkKLXsKLSAgR3N0SW5kZXhHcm91cCAqaW5kZXhncm91cCA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEdyb3VwKTsKLQotICBpbmRleGdyb3VwLT5ncm91cG51bSA9IGdyb3VwbnVtOwotICBpbmRleGdyb3VwLT5lbnRyaWVzID0gTlVMTDsKLSAgaW5kZXhncm91cC0+Y2VydGFpbnR5ID0gR1NUX0lOREVYX1VOS05PV047Ci0gIGluZGV4Z3JvdXAtPnBlZXJncm91cCA9IC0xOwotCi0gIEdTVF9ERUJVRyAoImNyZWF0ZWQgbmV3IGluZGV4IGdyb3VwICVkIiwgZ3JvdXBudW0pOwotCi0gIHJldHVybiBpbmRleGdyb3VwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2luZGV4X2dyb3VwX2ZyZWUgKEdzdEluZGV4R3JvdXAgKiBncm91cCkKLXsKLSAgZ19zbGljZV9mcmVlIChHc3RJbmRleEdyb3VwLCBncm91cCk7Ci19Ci0KLS8qIGRvIG5vdCByZXN1cnJlY3QgdGhpcywgYWRkIGEgZGVyaXZlZCBkdW1teSBpbmRleCBjbGFzcyBpbnN0ZWFkICovCi0jaWYgMAotLyoqCi0gKiBnc3RfaW5kZXhfbmV3OgotICoKLSAqIENyZWF0ZSBhIG5ldyBkdW1teSBpbmRleCBvYmplY3QuIFVzZSBnc3RfZWxlbWVudF9zZXRfaW5kZXgoKSB0byBhc3NpZ24gdGhhdAotICogdG8gYW4gZWxlbWVudCBvciBwaXBlbGluZS4gVGhpcyBpbmRleCBpcyBub3Qgc3RvcmluZyBhbnl0aGluZywgYnV0IHdpbGwKLSAqIHN0aWxsIGVtaXQgZS5nLiB0aGUgI0dzdEluZGV4OjplbnRyeS1hZGRlZCBzaWduYWwuCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBpbmRleCBvYmplY3QKLSAqLwotR3N0SW5kZXggKgotZ3N0X2luZGV4X25ldyAodm9pZCkKLXsKLSAgR3N0SW5kZXggKmluZGV4OwotCi0gIGluZGV4ID0gZ19vYmplY3RfbmV3diAoZ3N0X2luZGV4X2dldF90eXBlICgpLCAwLCBOVUxMKTsKLQotICByZXR1cm4gaW5kZXg7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBnc3RfaW5kZXhfY29tbWl0OgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gY29tbWl0Ci0gKiBAaWQ6IHRoZSB3cml0ZXIgdGhhdCBjb21taXRlZCB0aGUgaW5kZXgKLSAqCi0gKiBUZWxsIHRoZSBpbmRleCB0aGF0IHRoZSB3cml0ZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgaXMgZG9uZQotICogd2l0aCB0aGlzIGluZGV4IGFuZCBpcyBub3QgZ29pbmcgdG8gd3JpdGUgYW55IG1vcmUgZW50cmllcwotICogdG8gaXQuCi0gKi8KLXZvaWQKLWdzdF9pbmRleF9jb21taXQgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQpCi17Ci0gIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKLQotICBpY2xhc3MgPSBHU1RfSU5ERVhfR0VUX0NMQVNTIChpbmRleCk7Ci0KLSAgaWYgKGljbGFzcy0+Y29tbWl0KQotICAgIGljbGFzcy0+Y29tbWl0IChpbmRleCwgaWQpOwotfQotCi0jaWYgMAotLyoqCi0gKiBnc3RfaW5kZXhfZ2V0X2dyb3VwOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gZ2V0IHRoZSBjdXJyZW50IGdyb3VwIGZyb20KLSAqCi0gKiBHZXQgdGhlIGlkIG9mIHRoZSBjdXJyZW50IGdyb3VwLgotICoKLSAqIFJldHVybnM6IHRoZSBpZCBvZiB0aGUgY3VycmVudCBncm91cC4KLSAqLwotZ2ludAotZ3N0X2luZGV4X2dldF9ncm91cCAoR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgcmV0dXJuIGluZGV4LT5jdXJncm91cC0+Z3JvdXBudW07Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X25ld19ncm91cDoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIGNyZWF0ZSB0aGUgbmV3IGdyb3VwIGluCi0gKgotICogQ3JlYXRlIGEgbmV3IGdyb3VwIGZvciB0aGUgZ2l2ZW4gaW5kZXguIEl0IHdpbGwgYmUKLSAqIHNldCBhcyB0aGUgY3VycmVudCBncm91cC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgaWQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgZ3JvdXAuCi0gKi8KLWdpbnQKLWdzdF9pbmRleF9uZXdfZ3JvdXAgKEdzdEluZGV4ICogaW5kZXgpCi17Ci0gIGluZGV4LT5jdXJncm91cCA9IGdzdF9pbmRleF9ncm91cF9uZXcgKCsraW5kZXgtPm1heGdyb3VwKTsKLSAgaW5kZXgtPmdyb3VwcyA9IGdfbGlzdF9hcHBlbmQgKGluZGV4LT5ncm91cHMsIGluZGV4LT5jdXJncm91cCk7Ci0gIEdTVF9ERUJVRyAoImNyZWF0ZWQgbmV3IGdyb3VwICVkIGluIGluZGV4IiwgaW5kZXgtPm1heGdyb3VwKTsKLSAgcmV0dXJuIGluZGV4LT5tYXhncm91cDsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfc2V0X2dyb3VwOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gc2V0IHRoZSBuZXcgZ3JvdXAgaW4KLSAqIEBncm91cG51bTogdGhlIGdyb3VwbnVtYmVyIHRvIHNldAotICoKLSAqIFNldCB0aGUgY3VycmVudCBncm91cG51bWJlciB0byB0aGUgZ2l2ZW4gYXJndW1lbnQuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZCwgRkFMU0UgaWYgdGhlIGdyb3VwCi0gKiBkaWQgbm90IGV4aXN0LgotICovCi1nYm9vbGVhbgotZ3N0X2luZGV4X3NldF9ncm91cCAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBncm91cG51bSkKLXsKLSAgR0xpc3QgKmxpc3Q7Ci0gIEdzdEluZGV4R3JvdXAgKmluZGV4Z3JvdXA7Ci0KLSAgLyogZmlyc3QgY2hlY2sgZm9yIG51bGwgY2hhbmdlICovCi0gIGlmIChncm91cG51bSA9PSBpbmRleC0+Y3VyZ3JvdXAtPmdyb3VwbnVtKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIGVsc2Ugc2VhcmNoIGZvciB0aGUgcHJvcGVyIGdyb3VwICovCi0gIGxpc3QgPSBpbmRleC0+Z3JvdXBzOwotICB3aGlsZSAobGlzdCkgewotICAgIGluZGV4Z3JvdXAgPSAoR3N0SW5kZXhHcm91cCAqKSAobGlzdC0+ZGF0YSk7Ci0gICAgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KTsKLSAgICBpZiAoaW5kZXhncm91cC0+Z3JvdXBudW0gPT0gZ3JvdXBudW0pIHsKLSAgICAgIGluZGV4LT5jdXJncm91cCA9IGluZGV4Z3JvdXA7Ci0gICAgICBHU1RfREVCVUcgKCJzd2l0Y2hlZCB0byBpbmRleCBncm91cCAlZCIsIGluZGV4Z3JvdXAtPmdyb3VwbnVtKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIC8qIGNvdWxkbid0IGZpbmQgdGhlIGdyb3VwIGluIHF1ZXN0aW9uICovCi0gIEdTVF9ERUJVRyAoImNvdWxkbid0IGZpbmQgaW5kZXggZ3JvdXAgJWQiLCBncm91cG51bSk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLSNlbmRpZgotCi0jaWYgMAotLyoqCi0gKiBnc3RfaW5kZXhfc2V0X2NlcnRhaW50eToKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIHNldCB0aGUgY2VydGFpbnR5IG9uCi0gKiBAY2VydGFpbnR5OiB0aGUgY2VydGFpbnR5IHRvIHNldAotICoKLSAqIFNldCB0aGUgY2VydGFpbnR5IG9mIHRoZSBnaXZlbiBpbmRleC4KLSAqLwotdm9pZAotZ3N0X2luZGV4X3NldF9jZXJ0YWludHkgKEdzdEluZGV4ICogaW5kZXgsIEdzdEluZGV4Q2VydGFpbnR5IGNlcnRhaW50eSkKLXsKLSAgaW5kZXgtPmN1cmdyb3VwLT5jZXJ0YWludHkgPSBjZXJ0YWludHk7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2dldF9jZXJ0YWludHk6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBnZXQgdGhlIGNlcnRhaW50eSBvZgotICoKLSAqIEdldCB0aGUgY2VydGFpbnR5IG9mIHRoZSBnaXZlbiBpbmRleC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgY2VydGFpbnR5IG9mIHRoZSBpbmRleC4KLSAqLwotR3N0SW5kZXhDZXJ0YWludHkKLWdzdF9pbmRleF9nZXRfY2VydGFpbnR5IChHc3RJbmRleCAqIGluZGV4KQotewotICByZXR1cm4gaW5kZXgtPmN1cmdyb3VwLT5jZXJ0YWludHk7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLS8qKgotICogZ3N0X2luZGV4X3NldF9maWx0ZXI6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byByZWdpc3RlciB0aGUgZmlsdGVyIG9uCi0gKiBAZmlsdGVyOiB0aGUgZmlsdGVyIHRvIHJlZ2lzdGVyCi0gKiBAdXNlcl9kYXRhOiBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCi0gKgotICogTGV0cyB0aGUgYXBwIHJlZ2lzdGVyIGEgY3VzdG9tIGZpbHRlciBmdW5jdGlvbiBzbyB0aGF0Ci0gKiBpdCBjYW4gc2VsZWN0IHdoYXQgZW50cmllcyBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBpbmRleC4KLSAqLwotdm9pZAotZ3N0X2luZGV4X3NldF9maWx0ZXIgKEdzdEluZGV4ICogaW5kZXgsCi0gICAgR3N0SW5kZXhGaWx0ZXIgZmlsdGVyLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpKTsKLQotICBnc3RfaW5kZXhfc2V0X2ZpbHRlcl9mdWxsIChpbmRleCwgZmlsdGVyLCB1c2VyX2RhdGEsIE5VTEwpOwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGw6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byByZWdpc3RlciB0aGUgZmlsdGVyIG9uCi0gKiBAZmlsdGVyOiB0aGUgZmlsdGVyIHRvIHJlZ2lzdGVyCi0gKiBAdXNlcl9kYXRhOiBkYXRhIHBhc3NlZCB0byB0aGUgZmlsdGVyIGZ1bmN0aW9uCi0gKiBAdXNlcl9kYXRhX2Rlc3Ryb3k6IGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBAdXNlcl9kYXRhIGlzIHVuc2V0Ci0gKgotICogTGV0cyB0aGUgYXBwIHJlZ2lzdGVyIGEgY3VzdG9tIGZpbHRlciBmdW5jdGlvbiBzbyB0aGF0Ci0gKiBpdCBjYW4gc2VsZWN0IHdoYXQgZW50cmllcyBzaG91bGQgYmUgc3RvcmVkIGluIHRoZSBpbmRleC4KLSAqLwotdm9pZAotZ3N0X2luZGV4X3NldF9maWx0ZXJfZnVsbCAoR3N0SW5kZXggKiBpbmRleCwKLSAgICBHc3RJbmRleEZpbHRlciBmaWx0ZXIsIGdwb2ludGVyIHVzZXJfZGF0YSwgR0Rlc3Ryb3lOb3RpZnkgdXNlcl9kYXRhX2Rlc3Ryb3kpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpKTsKLQotICBpZiAoaW5kZXgtPmZpbHRlcl91c2VyX2RhdGEgJiYgaW5kZXgtPmZpbHRlcl91c2VyX2RhdGFfZGVzdHJveSkKLSAgICBpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95IChpbmRleC0+ZmlsdGVyX3VzZXJfZGF0YSk7Ci0KLSAgaW5kZXgtPmZpbHRlciA9IGZpbHRlcjsKLSAgaW5kZXgtPmZpbHRlcl91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIGluZGV4LT5maWx0ZXJfdXNlcl9kYXRhX2Rlc3Ryb3kgPSB1c2VyX2RhdGFfZGVzdHJveTsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfc2V0X3Jlc29sdmVyOgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gcmVnaXN0ZXIgdGhlIHJlc29sdmVyIG9uCi0gKiBAcmVzb2x2ZXI6IHRoZSByZXNvbHZlciB0byByZWdpc3RlcgotICogQHVzZXJfZGF0YTogZGF0YSBwYXNzZWQgdG8gdGhlIHJlc29sdmVyIGZ1bmN0aW9uCi0gKgotICogTGV0cyB0aGUgYXBwIHJlZ2lzdGVyIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIG1hcCBpbmRleAotICogaWRzIHRvIHdyaXRlciBkZXNjcmlwdGlvbnMuCi0gKi8KLXZvaWQKLWdzdF9pbmRleF9zZXRfcmVzb2x2ZXIgKEdzdEluZGV4ICogaW5kZXgsCi0gICAgR3N0SW5kZXhSZXNvbHZlciByZXNvbHZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnc3RfaW5kZXhfc2V0X3Jlc29sdmVyX2Z1bGwgKGluZGV4LCByZXNvbHZlciwgdXNlcl9kYXRhLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfc2V0X3Jlc29sdmVyX2Z1bGw6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byByZWdpc3RlciB0aGUgcmVzb2x2ZXIgb24KLSAqIEByZXNvbHZlcjogdGhlIHJlc29sdmVyIHRvIHJlZ2lzdGVyCi0gKiBAdXNlcl9kYXRhOiBkYXRhIHBhc3NlZCB0byB0aGUgcmVzb2x2ZXIgZnVuY3Rpb24KLSAqIEB1c2VyX2RhdGFfZGVzdHJveTogZGVzdHJveSBmdW5jdGlvbiBmb3IgQHVzZXJfZGF0YQotICoKLSAqIExldHMgdGhlIGFwcCByZWdpc3RlciBhIGN1c3RvbSBmdW5jdGlvbiB0byBtYXAgaW5kZXgKLSAqIGlkcyB0byB3cml0ZXIgZGVzY3JpcHRpb25zLgotICoKLSAqIFNpbmNlOiAwLjEwLjE4Ci0gKi8KLXZvaWQKLWdzdF9pbmRleF9zZXRfcmVzb2x2ZXJfZnVsbCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhSZXNvbHZlciByZXNvbHZlciwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEsIEdEZXN0cm95Tm90aWZ5IHVzZXJfZGF0YV9kZXN0cm95KQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSk7Ci0KLSAgaWYgKGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEgJiYgaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95KQotICAgIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGFfZGVzdHJveSAoaW5kZXgtPnJlc29sdmVyX3VzZXJfZGF0YSk7Ci0KLSAgaW5kZXgtPnJlc29sdmVyID0gcmVzb2x2ZXI7Ci0gIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIGluZGV4LT5yZXNvbHZlcl91c2VyX2RhdGFfZGVzdHJveSA9IHVzZXJfZGF0YV9kZXN0cm95OwotICBpbmRleC0+bWV0aG9kID0gR1NUX0lOREVYX1JFU09MVkVSX0NVU1RPTTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9pbmRleF9lbnRyeV9jb3B5OgotICogQGVudHJ5OiB0aGUgZW50cnkgdG8gY29weQotICoKLSAqIENvcGllcyBhbiBlbnRyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgotICoKLSAqIEZyZWUtZnVuY3Rpb246IGdzdF9pbmRleF9lbnRyeV9mcmVlCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ld2x5IGFsbG9jYXRlZCAjR3N0SW5kZXhFbnRyeS4KLSAqLwotR3N0SW5kZXhFbnRyeSAqCi1nc3RfaW5kZXhfZW50cnlfY29weSAoR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotICBHc3RJbmRleEVudHJ5ICpuZXdfZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7Ci0KLSAgbWVtY3B5IChuZXdfZW50cnksIGVudHJ5LCBzaXplb2YgKEdzdEluZGV4RW50cnkpKTsKLSAgcmV0dXJuIG5ld19lbnRyeTsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfZW50cnlfZnJlZToKLSAqIEBlbnRyeTogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgZW50cnkgdG8gZnJlZQotICoKLSAqIEZyZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSBnaXZlbiBlbnRyeS4KLSAqLwotdm9pZAotZ3N0X2luZGV4X2VudHJ5X2ZyZWUgKEdzdEluZGV4RW50cnkgKiBlbnRyeSkKLXsKLSAgc3dpdGNoIChlbnRyeS0+dHlwZSkgewotICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX0lEOgotICAgICAgaWYgKGVudHJ5LT5kYXRhLmlkLmRlc2NyaXB0aW9uKSB7Ci0gICAgICAgIGdfZnJlZSAoZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24pOwotICAgICAgICBlbnRyeS0+ZGF0YS5pZC5kZXNjcmlwdGlvbiA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTjoKLSAgICAgIGlmIChlbnRyeS0+ZGF0YS5hc3NvYy5hc3NvY3MpIHsKLSAgICAgICAgZ19mcmVlIChlbnRyeS0+ZGF0YS5hc3NvYy5hc3NvY3MpOwotICAgICAgICBlbnRyeS0+ZGF0YS5hc3NvYy5hc3NvY3MgPSBOVUxMOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfT0JKRUNUOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfRk9STUFUOgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnX3NsaWNlX2ZyZWUgKEdzdEluZGV4RW50cnksIGVudHJ5KTsKLX0KLQotI2lmIDAKLS8qKgotICogZ3N0X2luZGV4X2FkZF9mb3JtYXQ6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBhZGQgdGhlIGVudHJ5IHRvCi0gKiBAaWQ6IHRoZSBpZCBvZiB0aGUgaW5kZXggd3JpdGVyCi0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IHRvIGFkZCB0byB0aGUgaW5kZXgKLSAqCi0gKiBBZGRzIGEgZm9ybWF0IGVudHJ5IGludG8gdGhlIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzCi0gKiB1c2VkIHRvIG1hcCBkeW5hbWljIEdzdEZvcm1hdCBpZHMgdG8gdGhlaXIgb3JpZ2luYWwKLSAqIGZvcm1hdCBrZXkuCi0gKgotICogRnJlZS1mdW5jdGlvbjogZ3N0X2luZGV4X2VudHJ5X2ZyZWUKLSAqCi0gKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9hZGRfZm9ybWF0IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBHc3RGb3JtYXQgZm9ybWF0KQotewotICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLSAgY29uc3QgR3N0Rm9ybWF0RGVmaW5pdGlvbiAqZGVmOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gMCwgTlVMTCk7Ci0KLSAgaWYgKCFHU1RfSU5ERVhfSVNfV1JJVEFCTEUgKGluZGV4KSB8fCBpZCA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBlbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKLSAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfRk9STUFUOwotICBlbnRyeS0+aWQgPSBpZDsKLSAgZW50cnktPmRhdGEuZm9ybWF0LmZvcm1hdCA9IGZvcm1hdDsKLQotICBkZWYgPSBnc3RfZm9ybWF0X2dldF9kZXRhaWxzIChmb3JtYXQpOwotICBlbnRyeS0+ZGF0YS5mb3JtYXQua2V5ID0gZGVmLT5uaWNrOwotCi0gIGdzdF9pbmRleF9hZGRfZW50cnkgKGluZGV4LCBlbnRyeSk7Ci0KLSAgcmV0dXJuIGVudHJ5OwotfQotI2VuZGlmCi0KLS8qKgotICogZ3N0X2luZGV4X2FkZF9pZDoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBkZXNjcmlwdGlvbjogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqCi0gKiBBZGQgYW4gaWQgZW50cnkgaW50byB0aGUgaW5kZXguCi0gKgotICogUmV0dXJuczogYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhZGRlZCBlbnRyeSBpbiB0aGUgaW5kZXguCi0gKi8KLUdzdEluZGV4RW50cnkgKgotZ3N0X2luZGV4X2FkZF9pZCAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwgZ2NoYXIgKiBkZXNjcmlwdGlvbikKLXsKLSAgR3N0SW5kZXhFbnRyeSAqZW50cnk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTkRFWCAoaW5kZXgpLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlc2NyaXB0aW9uICE9IE5VTEwsIE5VTEwpOwotCi0gIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7Ci0gIGVudHJ5LT50eXBlID0gR1NUX0lOREVYX0VOVFJZX0lEOwotICBlbnRyeS0+aWQgPSBpZDsKLSAgZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQotICBnc3RfaW5kZXhfYWRkX2VudHJ5IChpbmRleCwgZW50cnkpOwotCi0gIHJldHVybiBlbnRyeTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW5kZXhfcGF0aF9yZXNvbHZlciAoR3N0SW5kZXggKiBpbmRleCwgR3N0T2JqZWN0ICogd3JpdGVyLAotICAgIGdjaGFyICoqIHdyaXRlcl9zdHJpbmcsIGdwb2ludGVyIGRhdGEpCi17Ci0gICp3cml0ZXJfc3RyaW5nID0gZ3N0X29iamVjdF9nZXRfcGF0aF9zdHJpbmcgKHdyaXRlcik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2luZGV4X2d0eXBlX3Jlc29sdmVyIChHc3RJbmRleCAqIGluZGV4LCBHc3RPYmplY3QgKiB3cml0ZXIsCi0gICAgZ2NoYXIgKiogd3JpdGVyX3N0cmluZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHdyaXRlciAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgaWYgKEdTVF9JU19QQUQgKHdyaXRlcikpIHsKLSAgICBHc3RPYmplY3QgKmVsZW1lbnQgPSBnc3Rfb2JqZWN0X2dldF9wYXJlbnQgKEdTVF9PQkpFQ1QgKHdyaXRlcikpOwotICAgIGdjaGFyICpuYW1lOwotCi0gICAgbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKHdyaXRlcik7Ci0gICAgaWYgKGVsZW1lbnQpIHsKLSAgICAgICp3cml0ZXJfc3RyaW5nID0gZ19zdHJkdXBfcHJpbnRmICgiJXMuJXMiLAotICAgICAgICAgIEdfT0JKRUNUX1RZUEVfTkFNRSAoZWxlbWVudCksIG5hbWUpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICp3cml0ZXJfc3RyaW5nID0gbmFtZTsKLSAgICAgIG5hbWUgPSBOVUxMOwotICAgIH0KLQotICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgfSBlbHNlIHsKLSAgICAqd3JpdGVyX3N0cmluZyA9IGdfc3RyZHVwIChHX09CSkVDVF9UWVBFX05BTUUgKHdyaXRlcikpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2dldF93cml0ZXJfaWQ6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBnZXQgYSB1bmlxdWUgd3JpdGUgaWQgZm9yCi0gKiBAd3JpdGVyOiB0aGUgR3N0T2JqZWN0IHRvIGFsbG9jYXRlIGFuIGlkIGZvcgotICogQGlkOiBhIHBvaW50ZXIgdG8gYSBnaW50IHRvIGhvbGQgdGhlIGlkCi0gKgotICogQmVmb3JlIGVudHJpZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBpbmRleCwgYSB3cml0ZXIKLSAqIHNob3VsZCBvYnRhaW4gYSB1bmlxdWUgaWQuIFRoZSBtZXRob2RzIHRvIGFkZCBuZXcgZW50cmllcwotICogdG8gdGhlIGluZGV4IHJlcXVpcmUgdGhpcyBpZCBhcyBhbiBhcmd1bWVudC4KLSAqCi0gKiBUaGUgYXBwbGljYXRpb24gY2FuIGltcGxlbWVudCBhIGN1c3RvbSBmdW5jdGlvbiB0byBtYXAgdGhlIHdyaXRlciBvYmplY3QKLSAqIHRvIGEgc3RyaW5nLiBUaGF0IHN0cmluZyB3aWxsIGJlIHVzZWQgdG8gcmVnaXN0ZXIgb3IgbG9vayB1cCBhbiBpZAotICogaW4gdGhlIGluZGV4LgotICoKLSAqIDxub3RlPgotICogVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIEB3cml0ZXIncyAjR1NUX09CSkVDVF9MT0NLLCBhcyB0aGUgZGVmYXVsdAotICogcmVzb2x2ZXIgbWF5IGNhbGwgZnVuY3Rpb25zIHRoYXQgdGFrZSB0aGUgb2JqZWN0IGxvY2sgYXMgd2VsbCwgYW5kCi0gKiB0aGUgbG9jayBpcyBub3QgcmVjdXJzaXZlLgotICogPC9ub3RlPgotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgdGhlIHdyaXRlciB3b3VsZCBiZSBtYXBwZWQgdG8gYW4gaWQuCi0gKi8KLWdib29sZWFuCi1nc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoR3N0SW5kZXggKiBpbmRleCwgR3N0T2JqZWN0ICogd3JpdGVyLCBnaW50ICogaWQpCi17Ci0gIGdjaGFyICp3cml0ZXJfc3RyaW5nID0gTlVMTDsKLSAgR3N0SW5kZXhFbnRyeSAqZW50cnk7Ci0gIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKLSAgZ2Jvb2xlYW4gc3VjY2VzcyA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX09CSkVDVCAod3JpdGVyKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaWQsIEZBTFNFKTsKLQotICAqaWQgPSAtMTsKLQotICAvKiBmaXJzdCB0cnkgdG8gZ2V0IGEgcHJldmlvdXNseSBjYWNoZWQgaWQgKi8KLSAgZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChpbmRleC0+d3JpdGVycywgd3JpdGVyKTsKLSAgaWYgKGVudHJ5ID09IE5VTEwpIHsKLQotICAgIGljbGFzcyA9IEdTVF9JTkRFWF9HRVRfQ0xBU1MgKGluZGV4KTsKLQotICAgIC8qIGxldCB0aGUgYXBwIG1ha2UgYSBzdHJpbmcgKi8KLSAgICBpZiAoaW5kZXgtPnJlc29sdmVyKSB7Ci0gICAgICBnYm9vbGVhbiByZXM7Ci0KLSAgICAgIHJlcyA9Ci0gICAgICAgICAgaW5kZXgtPnJlc29sdmVyIChpbmRleCwgd3JpdGVyLCAmd3JpdGVyX3N0cmluZywKLSAgICAgICAgICBpbmRleC0+cmVzb2x2ZXJfdXNlcl9kYXRhKTsKLSAgICAgIGlmICghcmVzKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfd2FybmluZyAoIm5vIHJlc29sdmVyIGZvdW5kIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIGluZGV4IGhhcyBhIHJlc29sdmVyLCBtYWtlIGl0IG1hcCB0aGlzIHN0cmluZyB0byBhbiBpZCAqLwotICAgIGlmIChpY2xhc3MtPmdldF93cml0ZXJfaWQpIHsKLSAgICAgIHN1Y2Nlc3MgPSBpY2xhc3MtPmdldF93cml0ZXJfaWQgKGluZGV4LCBpZCwgd3JpdGVyX3N0cmluZyk7Ci0gICAgfQotICAgIC8qIGlmIHRoZSBpbmRleCBjb3VsZCBub3QgcmVzb2x2ZSwgd2UgYWxsb2NhdGUgb25lIG91cnNlbHZlcyAqLwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgKmlkID0gKytpbmRleC0+bGFzdF9pZDsKLSAgICB9Ci0KLSAgICBlbnRyeSA9IGdzdF9pbmRleF9hZGRfaWQgKGluZGV4LCAqaWQsIHdyaXRlcl9zdHJpbmcpOwotICAgIGlmICghZW50cnkpIHsKLSAgICAgIC8qIGluZGV4IGlzIHByb2JhYmx5IG5vdCB3cml0YWJsZSwgbWFrZSBhbiBlbnRyeSBhbnl3YXkKLSAgICAgICAqIHRvIGtlZXAgaXQgaW4gb3VyIGNhY2hlICovCi0gICAgICBlbnRyeSA9IGdfc2xpY2VfbmV3IChHc3RJbmRleEVudHJ5KTsKLSAgICAgIGVudHJ5LT50eXBlID0gR1NUX0lOREVYX0VOVFJZX0lEOwotICAgICAgZW50cnktPmlkID0gKmlkOwotICAgICAgZW50cnktPmRhdGEuaWQuZGVzY3JpcHRpb24gPSB3cml0ZXJfc3RyaW5nOwotICAgIH0KLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChpbmRleC0+d3JpdGVycywgd3JpdGVyLCBlbnRyeSk7Ci0gIH0gZWxzZSB7Ci0gICAgKmlkID0gZW50cnktPmlkOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW5kZXhfYWRkX2VudHJ5IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCi17Ci0gIEdzdEluZGV4Q2xhc3MgKmljbGFzczsKLQotICBpY2xhc3MgPSBHU1RfSU5ERVhfR0VUX0NMQVNTIChpbmRleCk7Ci0KLSAgaWYgKGljbGFzcy0+YWRkX2VudHJ5KSB7Ci0gICAgaWNsYXNzLT5hZGRfZW50cnkgKGluZGV4LCBlbnRyeSk7Ci0gIH0KLQotICBnX3NpZ25hbF9lbWl0IChpbmRleCwgZ3N0X2luZGV4X3NpZ25hbHNbRU5UUllfQURERURdLCAwLCBlbnRyeSk7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbnY6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBhZGQgdGhlIGVudHJ5IHRvCi0gKiBAaWQ6IHRoZSBpZCBvZiB0aGUgaW5kZXggd3JpdGVyCi0gKiBAZmxhZ3M6IG9wdGluYWwgZmxhZ3MgZm9yIHRoaXMgZW50cnkKLSAqIEBuOiBudW1iZXIgb2YgYXNzb2NpYXRpb25zCi0gKiBAbGlzdDogbGlzdCBvZiBhc3NvY2lhdGlvbnMKLSAqCi0gKiBBc3NvY2lhdGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlIHBhaXJzIHdpdGggZWFjaCBvdGhlci4KLSAqCi0gKiBSZXR1cm5zOiBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFkZGVkIGVudHJ5IGluIHRoZSBpbmRleC4KLSAqLwotR3N0SW5kZXhFbnRyeSAqCi1nc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9udiAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwKLSAgICBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsIGdpbnQgbiwgY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqIGxpc3QpCi17Ci0gIEdzdEluZGV4RW50cnkgKmVudHJ5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChuID4gMCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsaXN0ICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCksIE5VTEwpOwotCi0gIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZW50cnkgPSBnX3NsaWNlX25ldyAoR3N0SW5kZXhFbnRyeSk7Ci0KLSAgZW50cnktPnR5cGUgPSBHU1RfSU5ERVhfRU5UUllfQVNTT0NJQVRJT047Ci0gIGVudHJ5LT5pZCA9IGlkOwotICBlbnRyeS0+ZGF0YS5hc3NvYy5mbGFncyA9IGZsYWdzOwotICBlbnRyeS0+ZGF0YS5hc3NvYy5hc3NvY3MgPSBnX21lbWR1cCAobGlzdCwgc2l6ZW9mIChHc3RJbmRleEFzc29jaWF0aW9uKSAqIG4pOwotICBlbnRyeS0+ZGF0YS5hc3NvYy5uYXNzb2NzID0gbjsKLQotICBnc3RfaW5kZXhfYWRkX2VudHJ5IChpbmRleCwgZW50cnkpOwotCi0gIHJldHVybiBlbnRyeTsKLX0KLQotI2lmIDAKLS8qKgotICogZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbjoKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIGFkZCB0aGUgZW50cnkgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBmbGFnczogb3B0aW5hbCBmbGFncyBmb3IgdGhpcyBlbnRyeQotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUKLSAqIEB2YWx1ZTogdGhlIHZhbHVlCi0gKiBALi4uOiBvdGhlciBmb3JtYXQvdmFsdWUgcGFpcnMgb3IgMCB0byBlbmQgdGhlIGxpc3QKLSAqCi0gKiBBc3NvY2lhdGUgZ2l2ZW4gZm9ybWF0L3ZhbHVlIHBhaXJzIHdpdGggZWFjaCBvdGhlci4KLSAqIEJlIHN1cmUgdG8gcGFzcyBnaW50NjQgdmFsdWVzIHRvIHRoaXMgZnVuY3Rpb25zIHZhcmFyZ3MsCi0gKiB5b3UgbWlnaHQgd2FudCB0byB1c2UgYSBnaW50NjQgY2FzdCB0byBiZSBzdXJlLgotICoKLSAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCi0gICAgR3N0SW5kZXhBc3NvY2lhdGlvbkZsYWdzIGZsYWdzLCBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBHc3RJbmRleEVudHJ5ICplbnRyeTsKLSAgR3N0SW5kZXhBc3NvY2lhdGlvbiAqbGlzdDsKLSAgZ2ludCBuX2Fzc29jcyA9IDA7Ci0gIEdzdEZvcm1hdCBjdXJfZm9ybWF0OwotICBHQXJyYXkgKmFycmF5OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gMCwgTlVMTCk7Ci0KLSAgaWYgKCFHU1RfSU5ERVhfSVNfV1JJVEFCTEUgKGluZGV4KSB8fCBpZCA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBhcnJheSA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR3N0SW5kZXhBc3NvY2lhdGlvbikpOwotCi0gIHsKLSAgICBHc3RJbmRleEFzc29jaWF0aW9uIGE7Ci0KLSAgICBhLmZvcm1hdCA9IGZvcm1hdDsKLSAgICBhLnZhbHVlID0gdmFsdWU7Ci0gICAgbl9hc3NvY3MgPSAxOwotICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIGEpOwotICB9Ci0KLSAgdmFfc3RhcnQgKGFyZ3MsIHZhbHVlKTsKLQotICB3aGlsZSAoKGN1cl9mb3JtYXQgPSB2YV9hcmcgKGFyZ3MsIEdzdEZvcm1hdCkpKSB7Ci0gICAgR3N0SW5kZXhBc3NvY2lhdGlvbiBhOwotCi0gICAgYS5mb3JtYXQgPSBjdXJfZm9ybWF0OwotICAgIGEudmFsdWUgPSB2YV9hcmcgKGFyZ3MsIGdpbnQ2NCk7Ci0gICAgbl9hc3NvY3MrKzsKLSAgICBnX2FycmF5X2FwcGVuZF92YWwgKGFycmF5LCBhKTsKLSAgfQotCi0gIHZhX2VuZCAoYXJncyk7Ci0KLSAgbGlzdCA9IChHc3RJbmRleEFzc29jaWF0aW9uICopIGdfYXJyYXlfZnJlZSAoYXJyYXksIEZBTFNFKTsKLQotICBlbnRyeSA9IGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252IChpbmRleCwgaWQsIGZsYWdzLCBuX2Fzc29jcywgbGlzdCk7Ci0gIGdfZnJlZSAobGlzdCk7Ci0KLSAgcmV0dXJuIGVudHJ5OwotfQotCi0vKioKLSAqIGdzdF9pbmRleF9hZGRfb2JqZWN0OgotICogQGluZGV4OiB0aGUgaW5kZXggdG8gYWRkIHRoZSBvYmplY3QgdG8KLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBrZXk6IGEga2V5IGZvciB0aGUgb2JqZWN0Ci0gKiBAdHlwZTogdGhlIEdUeXBlIG9mIHRoZSBvYmplY3QKLSAqIEBvYmplY3Q6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0IHRvIGFkZAotICoKLSAqIEFkZCB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBpbmRleCB3aXRoIHRoZSBnaXZlbiBrZXkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkLgotICoKLSAqIFJldHVybnM6IGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWRkZWQgZW50cnkgaW4gdGhlIGluZGV4LgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9hZGRfb2JqZWN0IChHc3RJbmRleCAqIGluZGV4LCBnaW50IGlkLCBnY2hhciAqIGtleSwKLSAgICBHVHlwZSB0eXBlLCBncG9pbnRlciBvYmplY3QpCi17Ci0gIGlmICghR1NUX0lOREVYX0lTX1dSSVRBQkxFIChpbmRleCkgfHwgaWQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGdpbnQKLWdzdF9pbmRleF9jb21wYXJlX2Z1bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChhIDwgYikKLSAgICByZXR1cm4gLTE7Ci0gIGlmIChhID4gYikKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeToKLSAqIEBpbmRleDogdGhlIGluZGV4IHRvIHNlYXJjaAotICogQGlkOiB0aGUgaWQgb2YgdGhlIGluZGV4IHdyaXRlcgotICogQG1ldGhvZDogVGhlIGxvb2t1cCBtZXRob2QgdG8gdXNlCi0gKiBAZmxhZ3M6IEZsYWdzIGZvciB0aGUgZW50cnkKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlCi0gKiBAdmFsdWU6IHRoZSB2YWx1ZSB0byBmaW5kCi0gKgotICogRmluZHMgdGhlIGdpdmVuIGZvcm1hdC92YWx1ZSBpbiB0aGUgaW5kZXgKLSAqCi0gKiBSZXR1cm5zOiB0aGUgZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSBvciBOVUxMIGlmIHRoZQotICogICB2YWx1ZSB3YXMgbm90IGZvdW5kLgotICovCi1Hc3RJbmRleEVudHJ5ICoKLWdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCi0gICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLCBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0lOREVYIChpbmRleCksIE5VTEwpOwotCi0gIGlmIChpZCA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKLQotICByZXR1cm4gZ3N0X2luZGV4X2dldF9hc3NvY19lbnRyeV9mdWxsIChpbmRleCwgaWQsIG1ldGhvZCwgZmxhZ3MsIGZvcm1hdCwKLSAgICAgIHZhbHVlLCBnc3RfaW5kZXhfY29tcGFyZV9mdW5jLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGw6Ci0gKiBAaW5kZXg6IHRoZSBpbmRleCB0byBzZWFyY2gKLSAqIEBpZDogdGhlIGlkIG9mIHRoZSBpbmRleCB3cml0ZXIKLSAqIEBtZXRob2Q6IFRoZSBsb29rdXAgbWV0aG9kIHRvIHVzZQotICogQGZsYWdzOiBGbGFncyBmb3IgdGhlIGVudHJ5Ci0gKiBAZm9ybWF0OiB0aGUgZm9ybWF0IG9mIHRoZSB2YWx1ZQotICogQHZhbHVlOiB0aGUgdmFsdWUgdG8gZmluZAotICogQGZ1bmM6IHRoZSBmdW5jdGlvbiB1c2VkIHRvIGNvbXBhcmUgZW50cmllcwotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY29tcGFyZSBmdW5jdGlvbgotICoKLSAqIEZpbmRzIHRoZSBnaXZlbiBmb3JtYXQvdmFsdWUgaW4gdGhlIGluZGV4IHdpdGggdGhlIGdpdmVuCi0gKiBjb21wYXJlIGZ1bmN0aW9uIGFuZCB1c2VyX2RhdGEuCi0gKgotICogUmV0dXJuczogdGhlIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgb3IgTlVMTCBpZiB0aGUKLSAqICAgdmFsdWUgd2FzIG5vdCBmb3VuZC4KLSAqLwotR3N0SW5kZXhFbnRyeSAqCi1nc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5X2Z1bGwgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCi0gICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLCBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgZmxhZ3MsCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0SW5kZXhDbGFzcyAqaWNsYXNzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfSU5ERVggKGluZGV4KSwgTlVMTCk7Ci0KLSAgaWYgKGlkID09IC0xKQotICAgIHJldHVybiBOVUxMOwotCi0gIGljbGFzcyA9IEdTVF9JTkRFWF9HRVRfQ0xBU1MgKGluZGV4KTsKLQotICBpZiAoaWNsYXNzLT5nZXRfYXNzb2NfZW50cnkpCi0gICAgcmV0dXJuIGljbGFzcy0+Z2V0X2Fzc29jX2VudHJ5IChpbmRleCwgaWQsIG1ldGhvZCwgZmxhZ3MsIGZvcm1hdCwgdmFsdWUsCi0gICAgICAgIGZ1bmMsIHVzZXJfZGF0YSk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X2luZGV4X2VudHJ5X2Fzc29jX21hcDoKLSAqIEBlbnRyeTogdGhlIGluZGV4IHRvIHNlYXJjaAotICogQGZvcm1hdDogdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgdGhlIGZpbmQKLSAqIEB2YWx1ZTogYSBwb2ludGVyIHRvIHN0b3JlIHRoZSB2YWx1ZQotICoKLSAqIEdldHMgYWx0ZXJuYXRpdmUgZm9ybWF0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4ZW50cnkuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiB0aGVyZSB3YXMgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuCi0gKiBmb3JtYXQuCi0gKi8KLWdib29sZWFuCi1nc3RfaW5kZXhfZW50cnlfYXNzb2NfbWFwIChHc3RJbmRleEVudHJ5ICogZW50cnksCi0gICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICogdmFsdWUpCi17Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAodmFsdWUgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHU1RfSU5ERVhfTkFTU09DUyAoZW50cnkpOyBpKyspIHsKLSAgICBpZiAoR1NUX0lOREVYX0FTU09DX0ZPUk1BVCAoZW50cnksIGkpID09IGZvcm1hdCkgewotICAgICAgKnZhbHVlID0gR1NUX0lOREVYX0FTU09DX1ZBTFVFIChlbnRyeSwgaSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2Zsdi9nc3RpbmRleC5oIGIvZ3N0L2Zsdi9nc3RpbmRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTUxZjljLi4wMDAwMDAwCi0tLSBhL2dzdC9mbHYvZ3N0aW5kZXguaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotICoKLSAqIGdzdGluZGV4Lmg6IEhlYWRlciBmb3IgR3N0SW5kZXgsIGJhc2UgY2xhc3MgdG8gaGFuZGxlIGVmZmljaWVudAotICogICAgICAgICAgICAgc3RvcmFnZSBvciBjYWNoaW5nIG9mIHNlZWtpbmcgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9JTkRFWF9IX18KLSNkZWZpbmUgX19HU1RfSU5ERVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdGZvcm1hdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RwbHVnaW5mZWF0dXJlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9JTkRFWCAgICAgICAgICAgICAgICAgIChnc3RfaW5kZXhfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9JTkRFWChvYmopICAgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfSU5ERVgsIEdzdEluZGV4KSkKLSNkZWZpbmUgR1NUX0lTX0lOREVYKG9iaikgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9JTkRFWCkpCi0jZGVmaW5lIEdTVF9JTkRFWF9DTEFTUyhrbGFzcykgICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9JTkRFWCwgR3N0SW5kZXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19JTkRFWF9DTEFTUyhrbGFzcykgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9JTkRFWCkpCi0jZGVmaW5lIEdTVF9JTkRFWF9HRVRfQ0xBU1Mob2JqKSAgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9JTkRFWCwgR3N0SW5kZXhDbGFzcykpCi0KLSNkZWZpbmUgR1NUX1RZUEVfSU5ERVhfRU5UUlkgICAgICAgICAgICAoZ3N0X2luZGV4X2VudHJ5X2dldF90eXBlKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJbmRleEVudHJ5IEdzdEluZGV4RW50cnk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SW5kZXhHcm91cCBHc3RJbmRleEdyb3VwOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4IEdzdEluZGV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEluZGV4Q2xhc3MgR3N0SW5kZXhDbGFzczsKLQotLyoqCi0gKiBHc3RJbmRleENlcnRhaW50eToKLSAqIEBHU1RfSU5ERVhfVU5LTk9XTjogYWNjdXJhY3kgaXMgbm90IGtub3duCi0gKiBAR1NUX0lOREVYX0NFUlRBSU46IGFjY3VyYWN5IGlzIHBlcmZlY3QKLSAqIEBHU1RfSU5ERVhfRlVaWlk6IGFjY3VyYWN5IGlzIGZ1enp5Ci0gKgotICogVGhlIGNlcnRhaW50eSBvZiBhIGdyb3VwIGluIHRoZSBpbmRleC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOREVYX1VOS05PV04sCi0gIEdTVF9JTkRFWF9DRVJUQUlOLAotICBHU1RfSU5ERVhfRlVaWlkKLX0gR3N0SW5kZXhDZXJ0YWludHk7Ci0KLS8qKgotICogR3N0SW5kZXhFbnRyeVR5cGU6Ci0gKiBAR1NUX0lOREVYX0VOVFJZX0lEOiBUaGlzIGVudHJ5IGlzIGFuIGlkIHRoYXQgbWFwcyBhbiBpbmRleCBpZCB0byBpdHMgb3duZXIgb2JqZWN0Ci0gKiBAR1NUX0lOREVYX0VOVFJZX0FTU09DSUFUSU9OOiBUaGlzIGVudHJ5IGlzIGFuIGFzc29jaWF0aW9uIGJldHdlZW4gZm9ybWF0cwotICogQEdTVF9JTkRFWF9FTlRSWV9PQkpFQ1Q6IEFuIG9iamVjdAotICogQEdTVF9JTkRFWF9FTlRSWV9GT1JNQVQ6IEEgZm9ybWF0IGRlZmluaXRpb24KLSAqCi0gKiBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4LgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfSU5ERVhfRU5UUllfSUQsCi0gIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTiwKLSAgR1NUX0lOREVYX0VOVFJZX09CSkVDVCwKLSAgR1NUX0lOREVYX0VOVFJZX0ZPUk1BVAotfSBHc3RJbmRleEVudHJ5VHlwZTsKLQotLyoqCi0gKiBHc3RJbmRleExvb2t1cE1ldGhvZDoKLSAqIEBHU1RfSU5ERVhfTE9PS1VQX0VYQUNUOiBUaGVyZSBoYXMgdG8gYmUgYW4gZXhhY3QgaW5kZXhlbnRyeSB3aXRoIHRoZSBnaXZlbiBmb3JtYXQvdmFsdWUKLSAqIEBHU1RfSU5ERVhfTE9PS1VQX0JFRk9SRTogVGhlIGV4YWN0IGVudHJ5IG9yIHRoZSBvbmUgYmVmb3JlIGl0Ci0gKiBAR1NUX0lOREVYX0xPT0tVUF9BRlRFUjogVGhlIGV4YWN0IGVudHJ5IG9yIHRoZSBvbmUgYWZ0ZXIgaXQKLSAqCi0gKiBTcGVjaWZ5IHRoZSBtZXRob2QgdG8gZmluZCBhbiBpbmRleCBlbnRyeSBpbiB0aGUgaW5kZXguCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9JTkRFWF9MT09LVVBfRVhBQ1QsCi0gIEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFLAotICBHU1RfSU5ERVhfTE9PS1VQX0FGVEVSCi19IEdzdEluZGV4TG9va3VwTWV0aG9kOwotCi0vKioKLSAqIEdTVF9JTkRFWF9OQVNTT0NTOgotICogQGVudHJ5OiBUaGUgZW50cnkgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIG51bWJlciBvZiBhc3NvY2lhdGlvbnMgaW4gdGhlIGVudHJ5LgotICovCi0jZGVmaW5lIEdTVF9JTkRFWF9OQVNTT0NTKGVudHJ5KSAgICAgICAgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5hc3NvYy5uYXNzb2NzKQotCi0vKioKLSAqIEdTVF9JTkRFWF9BU1NPQ19GTEFHUzoKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogIEdldCB0aGUgZmxhZ3MgZm9yIHRoaXMgZW50cnkuCi0gKi8KLSNkZWZpbmUgR1NUX0lOREVYX0FTU09DX0ZMQUdTKGVudHJ5KSAgICAgICAgICAgICgoZW50cnkpLT5kYXRhLmFzc29jLmZsYWdzKQotCi0vKioKLSAqIEdTVF9JTkRFWF9BU1NPQ19GT1JNQVQ6Ci0gKiBAZW50cnk6IFRoZSBlbnRyeSB0byBxdWVyeQotICogQGk6IFRoZSBmb3JtYXQgaW5kZXgKLSAqCi0gKiBHZXQgdGhlIGktdGggZm9ybWF0IG9mIHRoZSBlbnRyeS4KLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfQVNTT0NfRk9STUFUKGVudHJ5LGkpICAgICAgICAgKChlbnRyeSktPmRhdGEuYXNzb2MuYXNzb2NzWyhpKV0uZm9ybWF0KQotCi0vKioKLSAqIEdTVF9JTkRFWF9BU1NPQ19WQUxVRToKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKiBAaTogVGhlIHZhbHVlIGluZGV4Ci0gKgotICogR2V0IHRoZSBpLXRoIHZhbHVlIG9mIHRoZSBlbnRyeS4KLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfQVNTT0NfVkFMVUUoZW50cnksaSkgICAgICAgICAgKChlbnRyeSktPmRhdGEuYXNzb2MuYXNzb2NzWyhpKV0udmFsdWUpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJbmRleEFzc29jaWF0aW9uIEdzdEluZGV4QXNzb2NpYXRpb247Ci0KLS8qKgotICogR3N0SW5kZXhBc3NvY2lhdGlvbjoKLSAqIEBmb3JtYXQ6IHRoZSBmb3JtYXQgb2YgdGhlIGFzc29jaWF0aW9uCi0gKiBAdmFsdWU6IHRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRpb24KLSAqCi0gKiBBbiBhc3NvY2lhdGlvbiBpbiBhbiBlbnRyeS4KLSAqLwotc3RydWN0IF9Hc3RJbmRleEFzc29jaWF0aW9uIHsKLSAgR3N0Rm9ybWF0ICAgICBmb3JtYXQ7Ci0gIGdpbnQ2NCAgICAgICAgdmFsdWU7Ci19OwotCi0vKioKLSAqIEdzdEluZGV4QXNzb2NpYXRpb25GbGFnczoKLSAqIEBHU1RfSU5ERVhfQVNTT0NJQVRJT05fRkxBR19OT05FOiBubyBleHRyYSBmbGFncwotICogQEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUOiB0aGUgZW50cnkgbWFya3MgYSBrZXkgdW5pdCwgYSBrZXkgdW5pdCBpcyBvbmUKLSAqICB0aGF0IG1hcmtzIGEgcGxhY2Ugd2hlcmUgb25lIGNhbiByYW5kb21seSBzZWVrIHRvLgotICogQEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQ6IHRoZSBlbnRyeSBtYXJrcyBhIGRlbHRhIHVuaXQsIGEgZGVsdGEgdW5pdAotICogIGlzIG9uZSB0aGF0IG1hcmtzIGEgcGxhY2Ugd2hlcmUgb25lIGNhbiByZWxhdGl2ZWx5IHNlZWsgdG8uCi0gKiBAR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfTEFTVDogZXh0cmEgdXNlciBkZWZpbmVkIGZsYWdzIHNob3VsZCBzdGFydCBoZXJlLgotICoKLSAqIEZsYWdzIGZvciBhbiBhc3NvY2lhdGlvbiBlbnRyeS4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfTk9ORSAgICAgICA9IDAsCi0gIEdTVF9JTkRFWF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklUICAgPSAoMSA8PCAwKSwKLSAgR1NUX0lOREVYX0FTU09DSUFUSU9OX0ZMQUdfREVMVEFfVU5JVCA9ICgxIDw8IDEpLAotCi0gIC8qIG5ldyBmbGFncyBzaG91bGQgc3RhcnQgaGVyZSAqLwotICBHU1RfSU5ERVhfQVNTT0NJQVRJT05fRkxBR19MQVNUICAgICA9ICgxIDw8IDgpCi19IEdzdEluZGV4QXNzb2NpYXRpb25GbGFnczsKLQotLyoqCi0gKiBHU1RfSU5ERVhfRk9STUFUX0ZPUk1BVDoKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBmb3JtYXQgb2YgdGhlIGZvcm1hdCBlbnRyeQotICovCi0jZGVmaW5lIEdTVF9JTkRFWF9GT1JNQVRfRk9STUFUKGVudHJ5KSAgICAgICAgICAoKGVudHJ5KS0+ZGF0YS5mb3JtYXQuZm9ybWF0KQotCi0vKioKLSAqIEdTVF9JTkRFWF9GT1JNQVRfS0VZOgotICogQGVudHJ5OiBUaGUgZW50cnkgdG8gcXVlcnkKLSAqCi0gKiBHZXQgdGhlIGtleSBvZiB0aGUgZm9ybWF0IGVudHJ5Ci0gKi8KLSNkZWZpbmUgR1NUX0lOREVYX0ZPUk1BVF9LRVkoZW50cnkpICAgICAgICAgICAgICgoZW50cnkpLT5kYXRhLmZvcm1hdC5rZXkpCi0KLS8qKgotICogR1NUX0lOREVYX0lEX0lOVkFMSUQ6Ci0gKgotICogQ29uc3RhbnQgZm9yIGFuIGludmFsaWQgaW5kZXggaWQKLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfSURfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgKC0xKQotCi0vKioKLSAqIEdTVF9JTkRFWF9JRF9ERVNDUklQVElPTjoKLSAqIEBlbnRyeTogVGhlIGVudHJ5IHRvIHF1ZXJ5Ci0gKgotICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaWQgZW50cnkKLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfSURfREVTQ1JJUFRJT04oZW50cnkpICAgICAgICAgKChlbnRyeSktPmRhdGEuaWQuZGVzY3JpcHRpb24pCi0KLS8qKgotICogR3N0SW5kZXhFbnRyeToKLSAqCi0gKiBUaGUgYmFzaWMgZWxlbWVudCBvZiBhbiBpbmRleC4KLSAqLwotc3RydWN0IF9Hc3RJbmRleEVudHJ5IHsKLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdEluZGV4RW50cnlUeXBlICAgICAgdHlwZTsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICBpZDsKLQotICB1bmlvbiB7Ci0gICAgc3RydWN0IHsKLSAgICAgIGdjaGFyICAgICAgICAgICAgICpkZXNjcmlwdGlvbjsKLSAgICB9IGlkOwotICAgIHN0cnVjdCB7Ci0gICAgICBnaW50ICAgICAgICAgICAgICAgbmFzc29jczsKLSAgICAgIEdzdEluZGV4QXNzb2NpYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICphc3NvY3M7Ci0gICAgICBHc3RJbmRleEFzc29jaWF0aW9uRmxhZ3MgICAgICBmbGFnczsKLSAgICB9IGFzc29jOwotICAgIHN0cnVjdCB7Ci0gICAgICBnY2hhciAgICAgICAgICAgICAqa2V5OwotICAgICAgR1R5cGUgICAgICAgICAgICAgIHR5cGU7Ci0gICAgICBncG9pbnRlciAgICAgICAgICAgb2JqZWN0OwotICAgIH0gb2JqZWN0OwotICAgIHN0cnVjdCB7Ci0gICAgICBHc3RGb3JtYXQgICAgICAgICAgZm9ybWF0OwotICAgICAgY29uc3QgZ2NoYXIgICAgICAgKmtleTsKLSAgICB9IGZvcm1hdDsKLSAgfSBkYXRhOwotfTsKLQotLyoqCi0gKiBHc3RJbmRleEdyb3VwOgotICoKLSAqIEEgZ3JvdXAgb2YgcmVsYXRlZCBlbnRyaWVzIGluIGFuIGluZGV4LgotICovCi0KLXN0cnVjdCBfR3N0SW5kZXhHcm91cCB7Ci0gIC8qPCBwcml2YXRlID4qLwotICAvKiB1bmlxdWUgSUQgb2YgZ3JvdXAgaW4gaW5kZXggKi8KLSAgZ2ludCBncm91cG51bTsKLQotICAvKiBsaXN0IG9mIGVudHJpZXMgKi8KLSAgR0xpc3QgKmVudHJpZXM7Ci0KLSAgLyogdGhlIGNlcnRhaW50eSBsZXZlbCBvZiB0aGUgZ3JvdXAgKi8KLSAgR3N0SW5kZXhDZXJ0YWludHkgY2VydGFpbnR5OwotCi0gIC8qIHBlZXIgZ3JvdXAgdGhhdCBjb250YWlucyBtb3JlIGNlcnRhaW4gZW50cmllcyAqLwotICBnaW50IHBlZXJncm91cDsKLX07Ci0KLS8qKgotICogR3N0SW5kZXhGaWx0ZXI6Ci0gKiBAaW5kZXg6IFRoZSBpbmRleCBiZWluZyBxdWVyaWVkCi0gKiBAZW50cnk6IFRoZSBlbnRyeSB0byBiZSBhZGRlZC4KLSAqIEB1c2VyX2RhdGE6IFVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgotICoKLSAqIEZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgZW50cmllcyBpbiB0aGUgaW5kZXguCi0gKgotICogUmV0dXJuczogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuICVUUlVFIGlmIHRoZSBlbnRyeSBpcyB0byBiZSBhZGRlZAotICogdG8gdGhlIGluZGV4LCAlRkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAgICAgICAgKCpHc3RJbmRleEZpbHRlcikgICAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0SW5kZXhFbnRyeSAqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotLyoqCi0gKiBHc3RJbmRleFJlc29sdmVyTWV0aG9kOgotICogQEdTVF9JTkRFWF9SRVNPTFZFUl9DVVNUT006IFVzZSBhIGN1c3RvbSByZXNvbHZlcgotICogQEdTVF9JTkRFWF9SRVNPTFZFUl9HVFlQRTogUmVzb2x2ZSBiYXNlZCBvbiB0aGUgR1R5cGUgb2YgdGhlIG9iamVjdAotICogQEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRIOiBSZXNvbHZlIG9uIHRoZSBwYXRoIGluIGdyYXBoCi0gKgotICogVGhlIG1ldGhvZCB1c2VkIHRvIHJlc29sdmUgaW5kZXggd3JpdGVycwotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfSU5ERVhfUkVTT0xWRVJfQ1VTVE9NLAotICBHU1RfSU5ERVhfUkVTT0xWRVJfR1RZUEUsCi0gIEdTVF9JTkRFWF9SRVNPTFZFUl9QQVRICi19IEdzdEluZGV4UmVzb2x2ZXJNZXRob2Q7Ci0KLS8qKgotICogR3N0SW5kZXhSZXNvbHZlcjoKLSAqIEBpbmRleDogdGhlIGluZGV4IGJlaW5nIHF1ZXJpZWQuCi0gKiBAd3JpdGVyOiBUaGUgb2JqZWN0IHRoYXQgd2FudHMgdG8gd3JpdGUKLSAqIEB3cml0ZXJfc3RyaW5nOiBBIGRlc2NyaXB0aW9uIG9mIHRoZSB3cml0ZXIuCi0gKiBAdXNlcl9kYXRhOiB1c2VyX2RhdGEgYXMgcmVnaXN0ZXJlZAotICoKLSAqIEZ1bmN0aW9uIHRvIHJlc29sdmUgaWRzIHRvIHdyaXRlciBkZXNjcmlwdGlvbnMuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgYW4gaWQgY291bGQgYmUgYXNzaWduZWQgdG8gdGhlIHdyaXRlci4KLSAqLwotdHlwZWRlZiBnYm9vbGVhbiAgICAgICAgKCpHc3RJbmRleFJlc29sdmVyKSAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0T2JqZWN0ICp3cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqKndyaXRlcl9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIEdzdEluZGV4RmxhZ3M6Ci0gKiBAR1NUX0lOREVYX1dSSVRBQkxFOiBUaGUgaW5kZXggaXMgd3JpdGFibGUKLSAqIEBHU1RfSU5ERVhfUkVBREFCTEU6IFRoZSBpbmRleCBpcyByZWFkYWJsZQotICogQEdTVF9JTkRFWF9GTEFHX0xBU1Q6IEZpcnN0IGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBieSBzdWJjbGFzc2VzCi0gKgotICogRmxhZ3MgZm9yIHRoaXMgaW5kZXgKLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lOREVYX1dSSVRBQkxFICAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDApLAotICBHU1RfSU5ERVhfUkVBREFCTEUgICAgPSAoR1NUX09CSkVDVF9GTEFHX0xBU1QgPDwgMSksCi0KLSAgR1NUX0lOREVYX0ZMQUdfTEFTVCAgID0gKEdTVF9PQkpFQ1RfRkxBR19MQVNUIDw8IDgpCi19IEdzdEluZGV4RmxhZ3M7Ci0KLS8qKgotICogR1NUX0lOREVYX0lTX1JFQURBQkxFOgotICogQG9iajogVGhlIGluZGV4IHRvIGNoZWNrCi0gKgotICogQ2hlY2sgaWYgdGhlIGluZGV4IGNhbiBiZSByZWFkIGZyb20KLSAqLwotI2RlZmluZSBHU1RfSU5ERVhfSVNfUkVBREFCTEUob2JqKSAgICAoR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAob2JqLCBHU1RfSU5ERVhfUkVBREFCTEUpKQotCi0vKioKLSAqIEdTVF9JTkRFWF9JU19XUklUQUJMRToKLSAqIEBvYmo6IFRoZSBpbmRleCB0byBjaGVjawotICoKLSAqIENoZWNrIGlmIHRoZSBpbmRleCBjYW4gYmUgd3JpdHRlbiB0bwotICovCi0jZGVmaW5lIEdTVF9JTkRFWF9JU19XUklUQUJMRShvYmopICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChvYmosIEdTVF9JTkRFWF9XUklUQUJMRSkpCi0KLS8qKgotICogR3N0SW5kZXg6Ci0gKgotICogT3BhcXVlICNHc3RJbmRleCBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0SW5kZXggewotICBHc3RPYmplY3QgICAgICAgICAgICAgIG9iamVjdDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR0xpc3QgICAgICAgICAgICAgICAgICpncm91cHM7Ci0gIEdzdEluZGV4R3JvdXAgICAgICAgICAqY3VyZ3JvdXA7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICAgbWF4Z3JvdXA7Ci0KLSAgR3N0SW5kZXhSZXNvbHZlck1ldGhvZCBtZXRob2Q7Ci0gIEdzdEluZGV4UmVzb2x2ZXIgICAgICAgcmVzb2x2ZXI7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICAgcmVzb2x2ZXJfdXNlcl9kYXRhOwotICBHRGVzdHJveU5vdGlmeSAgICAgICAgIHJlc29sdmVyX3VzZXJfZGF0YV9kZXN0cm95OwotCi0gIEdzdEluZGV4RmlsdGVyICAgICAgICAgZmlsdGVyOwotICBncG9pbnRlciAgICAgICAgICAgICAgIGZpbHRlcl91c2VyX2RhdGE7Ci0gIEdEZXN0cm95Tm90aWZ5ICAgICAgICAgZmlsdGVyX3VzZXJfZGF0YV9kZXN0cm95OwotCi0gIEdIYXNoVGFibGUgICAgICAgICAgICAqd3JpdGVyczsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICBsYXN0X2lkOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0SW5kZXhDbGFzcyB7Ci0gIEdzdE9iamVjdENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKjwgcHJvdGVjdGVkID4qLwotICBnYm9vbGVhbiAgICAgICgqZ2V0X3dyaXRlcl9pZCkgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgKmlkLCBnY2hhciAqd3JpdGVyKTsKLQotICB2b2lkICAgICAgICAgICgqY29tbWl0KSAgICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQpOwotCi0gIC8qIGFic3RyYWN0IG1ldGhvZHMgKi8KLSAgdm9pZCAgICAgICAgICAoKmFkZF9lbnRyeSkgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBHc3RJbmRleEVudHJ5ICplbnRyeSk7Ci0KLSAgR3N0SW5kZXhFbnRyeSogKCpnZXRfYXNzb2NfZW50cnkpICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURhdGFGdW5jIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0gIC8qIHNpZ25hbHMgKi8KLSAgdm9pZCAgICAgICAgICAoKmVudHJ5X2FkZGVkKSAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBHc3RJbmRleEVudHJ5ICplbnRyeSk7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIGdwb2ludGVyIF9nc3RfcmVzZXJ2ZWRbR1NUX1BBRERJTkddOwotfTsKLQotc3RhdGljCi1HVHlwZSAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKLQotI2lmIDAKLUdzdEluZGV4KiAgICAgICAgICAgICAgIGdzdF9pbmRleF9uZXcgICAgICAgICAgICAgICAgICAgKHZvaWQpOwotI2VuZGlmCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfY29tbWl0ICAgICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQpOwotCi0jaWYgMAotZ2ludCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X2dldF9ncm91cCAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4KTsKLWdpbnQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9uZXdfZ3JvdXAgICAgICAgICAgICAgKEdzdEluZGV4ICppbmRleCk7Ci1nYm9vbGVhbiAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X2dyb3VwICAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgZ3JvdXBudW0pOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X2NlcnRhaW50eSAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleENlcnRhaW50eSBjZXJ0YWludHkpOwotR3N0SW5kZXhDZXJ0YWludHkgICAgICAgZ3N0X2luZGV4X2dldF9jZXJ0YWludHkgICAgICAgICAoR3N0SW5kZXggKmluZGV4KTsKLQotc3RhdGljCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X2ZpbHRlciAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleEZpbHRlciBmaWx0ZXIsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1zdGF0aWMKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9pbmRleF9zZXRfZmlsdGVyX2Z1bGwgICAgICAgKEdzdEluZGV4ICppbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4RmlsdGVyIGZpbHRlciwgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdXNlcl9kYXRhX2Rlc3Ryb3kpOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfc2V0X3Jlc29sdmVyICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleFJlc29sdmVyIHJlc29sdmVyLCBncG9pbnRlciB1c2VyX2RhdGEpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgZ3N0X2luZGV4X3NldF9yZXNvbHZlcl9mdWxsICAgICAoR3N0SW5kZXggKmluZGV4LCBHc3RJbmRleFJlc29sdmVyIHJlc29sdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdXNlcl9kYXRhX2Rlc3Ryb3kpOwotI2VuZGlmCi0KLXN0YXRpYwotZ2Jvb2xlYW4gICAgICAgICAgICAgICAgZ3N0X2luZGV4X2dldF93cml0ZXJfaWQgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBHc3RPYmplY3QgKndyaXRlciwgZ2ludCAqaWQpOwotCi0jaWYgMAotR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2FkZF9mb3JtYXQgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLCBHc3RGb3JtYXQgZm9ybWF0KTsKLSNlbmRpZgotCi1zdGF0aWMKLUdzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb252ICAgICAgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbiwgY29uc3QgR3N0SW5kZXhBc3NvY2lhdGlvbiAqIGxpc3QpOwotI2lmIDAKLUdzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gICAgICAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwgR3N0SW5kZXhBc3NvY2lhdGlvbkZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLCAuLi4pCi1Hc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfYWRkX29iamVjdCAgICAgICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsIGdjaGFyICprZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHlwZSB0eXBlLCBncG9pbnRlciBvYmplY3QpOwotI2VuZGlmCi0KLXN0YXRpYwotR3N0SW5kZXhFbnRyeSogICAgICAgICAgZ3N0X2luZGV4X2FkZF9pZCAgICAgICAgICAgICAgICAoR3N0SW5kZXggKmluZGV4LCBnaW50IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKmRlc2NyaXB0aW9uKTsKLQotc3RhdGljCi1Hc3RJbmRleEVudHJ5KiAgICAgICAgICBnc3RfaW5kZXhfZ2V0X2Fzc29jX2VudHJ5ICAgICAgIChHc3RJbmRleCAqaW5kZXgsIGdpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEZvcm1hdCBmb3JtYXQsIGdpbnQ2NCB2YWx1ZSk7Ci1zdGF0aWMKLUdzdEluZGV4RW50cnkqICAgICAgICAgIGdzdF9pbmRleF9nZXRfYXNzb2NfZW50cnlfZnVsbCAgKEdzdEluZGV4ICppbmRleCwgZ2ludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEluZGV4TG9va3VwTWV0aG9kIG1ldGhvZCwgR3N0SW5kZXhBc3NvY2lhdGlvbkZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NvbXBhcmVEYXRhRnVuYyBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyogd29ya2luZyB3aXRoIGluZGV4IGVudHJpZXMgKi8KLXN0YXRpYwotR1R5cGUgZ3N0X2luZGV4X2VudHJ5X2dldF90eXBlICh2b2lkKTsKLXN0YXRpYwotR3N0SW5kZXhFbnRyeSAqICAgICAgICAgZ3N0X2luZGV4X2VudHJ5X2NvcHkgICAgICAgICAgICAoR3N0SW5kZXhFbnRyeSAqZW50cnkpOwotc3RhdGljCi12b2lkICAgICAgICAgICAgICAgICAgICBnc3RfaW5kZXhfZW50cnlfZnJlZSAgICAgICAgICAgIChHc3RJbmRleEVudHJ5ICplbnRyeSk7Ci1zdGF0aWMKLWdib29sZWFuICAgICAgICAgICAgICAgIGdzdF9pbmRleF9lbnRyeV9hc3NvY19tYXAgICAgICAgKEdzdEluZGV4RW50cnkgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdCwgZ2ludDY0ICp2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9JTkRFWF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9mbHYvZ3N0bWVtaW5kZXguYyBiL2dzdC9mbHYvZ3N0bWVtaW5kZXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmOTljMi4uMDAwMDAwMAotLS0gYS9nc3QvZmx2L2dzdG1lbWluZGV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfTUVNX0lOREVYICAgICAgICAgICAgICBcCi0gIChnc3RfaW5kZXhfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9NRU1fSU5ERVgob2JqKSAgICAgICAgICAgICAgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9NRU1fSU5ERVgsIEdzdE1lbUluZGV4KSkKLSNkZWZpbmUgR1NUX01FTV9JTkRFWF9DTEFTUyhrbGFzcykgICAgICBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfTUVNX0lOREVYLCBHc3RNZW1JbmRleENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX01FTV9JTkRFWChvYmopICAgICAgICAgICBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX01FTV9JTkRFWCkpCi0jZGVmaW5lIEdTVF9JU19NRU1fSU5ERVhfQ0xBU1Moa2xhc3MpICAgICBcCi0gIChHU1RfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9NRU1fSU5ERVgpKQotCi0vKgotICogT2JqZWN0IG1vZGVsOgotICoKLSAqIEFsbCBlbnRyaWVzIGFyZSBzaW1wbHkgYWRkZWQgdG8gYSBHTGlzdCBmaXJzdC4gVGhlbiB3ZSBidWlsZAotICogYW4gaW5kZXggdG8gZWFjaCBlbnRyeSBmb3IgZWFjaCBpZC9mb3JtYXQKLSAqCi0gKgotICogIG1lbWluZGV4Ci0gKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4uLgotICogICAgISAgICAgICAgICAgICAgICAgICEKLSAqICAgaWQxICAgICAgICAgICAgICAgICBpZDIKLSAqICAgIC0tLS0tLS0tLS0tLQotICogICAgISAgICAgICAgICAhCi0gKiAgIGZvcm1hdDEgIGZvcm1hdDIKLSAqICAgICEgICAgICAgICAgIQotICogICBHVHJlZSAgICAgIEdUcmVlCi0gKgotICoKLSAqIFRoZSBtZW1pbmRleCBjcmVhdGVzIGEgTWVtSW5kZXhJZCBvYmplY3QgZm9yIGVhY2ggd3JpdGVyIGlkLCBhCi0gKiBIYXNodGFibGUgaXMga2VwdCB0byBtYXAgdGhlIGlkIHRvIHRoZSBNZW1JbmRleElkCi0gKgotICogVGhlIE1lbUluZGV4SWQga2VlcHMgYSBNZW1JbmRleEZvcm1hdEluZGV4IGZvciBlYWNoIGZvcm1hdCB0aGUKLSAqIHNwZWNpZmljIHdyaXRlciB3YW50cyBpbmRleGVkLgotICoKLSAqIFRoZSBNZW1JbmRleEZvcm1hdEluZGV4IGtlZXBzIGFsbCB0aGUgdmFsdWVzIG9mIHRoZSBwYXJ0aWN1bGFyCi0gKiBmb3JtYXQgaW4gYSBHVHJlZSwgVGhlIHZhbHVlcyBvZiB0aGUgR1RyZWUgcG9pbnQgYmFjayB0byB0aGUgZW50cnkuCi0gKgotICogRmluZGluZyBhIHZhbHVlIGZvciBhbiBpZC9mb3JtYXQgcmVxdWlyZXMgbG9jYXRpbmcgdGhlIGNvcnJlY3QgR1RyZWUsCi0gKiB0aGVuIGRvIGEgbG9va3VwIGluIHRoZSBUcmVlIHRvIGdldCB0aGUgcmVxdWlyZWQgdmFsdWUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgZ2ludCBvZmZzZXQ7Ci0gIEdUcmVlICp0cmVlOwotfQotR3N0TWVtSW5kZXhGb3JtYXRJbmRleDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ2ludCBpZDsKLSAgR0hhc2hUYWJsZSAqZm9ybWF0X2luZGV4OwotfQotR3N0TWVtSW5kZXhJZDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lbUluZGV4IEdzdE1lbUluZGV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lbUluZGV4Q2xhc3MgR3N0TWVtSW5kZXhDbGFzczsKLQotc3RydWN0IF9Hc3RNZW1JbmRleAotewotICBHc3RJbmRleCBwYXJlbnQ7Ci0KLSAgR0xpc3QgKmFzc29jaWF0aW9uczsKLQotICBHSGFzaFRhYmxlICppZF9pbmRleDsKLX07Ci0KLXN0cnVjdCBfR3N0TWVtSW5kZXhDbGFzcwotewotICBHc3RJbmRleENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9tZW1faW5kZXhfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfbWVtX2luZGV4X2FkZF9lbnRyeSAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KTsKLXN0YXRpYyBHc3RJbmRleEVudHJ5ICpnc3RfbWVtX2luZGV4X2dldF9hc3NvY19lbnRyeSAoR3N0SW5kZXggKiBpbmRleCwgZ2ludCBpZCwKLSAgICBHc3RJbmRleExvb2t1cE1ldGhvZCBtZXRob2QsIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsIEdDb21wYXJlRGF0YUZ1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotI2RlZmluZSBDTEFTUyhtZW1faW5kZXgpICBHU1RfTUVNX0lOREVYX0NMQVNTIChHX09CSkVDVF9HRVRfQ0xBU1MgKG1lbV9pbmRleCkpCi0KLXN0YXRpYyBHVHlwZSBnc3RfbWVtX2luZGV4X2dldF90eXBlICh2b2lkKTsKLQotdHlwZWRlZiBHc3RNZW1JbmRleCBHc3RGbHZEZW11eE1lbUluZGV4OwotdHlwZWRlZiBHc3RNZW1JbmRleENsYXNzIEdzdEZsdkRlbXV4TWVtSW5kZXhDbGFzczsKLUdfREVGSU5FX1RZUEUgKEdzdEZsdkRlbXV4TWVtSW5kZXgsIGdzdF9tZW1faW5kZXgsIEdTVF9UWVBFX0lOREVYKTsKLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfY2xhc3NfaW5pdCAoR3N0TWVtSW5kZXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEluZGV4Q2xhc3MgKmdzdGluZGV4X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RpbmRleF9jbGFzcyA9IChHc3RJbmRleENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X21lbV9pbmRleF9maW5hbGl6ZTsKLQotICBnc3RpbmRleF9jbGFzcy0+YWRkX2VudHJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tZW1faW5kZXhfYWRkX2VudHJ5KTsKLSAgZ3N0aW5kZXhfY2xhc3MtPmdldF9hc3NvY19lbnRyeSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21lbV9pbmRleF9nZXRfYXNzb2NfZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21lbV9pbmRleF9pbml0IChHc3RNZW1JbmRleCAqIGluZGV4KQotewotICBHU1RfREVCVUcgKCJjcmVhdGVkIG5ldyBtZW0gaW5kZXgiKTsKLQotICBpbmRleC0+YXNzb2NpYXRpb25zID0gTlVMTDsKLSAgaW5kZXgtPmlkX2luZGV4ID0gZ19oYXNoX3RhYmxlX25ldyAoZ19pbnRfaGFzaCwgZ19pbnRfZXF1YWwpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21lbV9pbmRleF9mcmVlX2Zvcm1hdCAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleCA9IChHc3RNZW1JbmRleEZvcm1hdEluZGV4ICopIHZhbHVlOwotCi0gIGlmIChpbmRleC0+dHJlZSkgewotICAgIGdfdHJlZV9kZXN0cm95IChpbmRleC0+dHJlZSk7Ci0gIH0KLQotICBnX3NsaWNlX2ZyZWUgKEdzdE1lbUluZGV4Rm9ybWF0SW5kZXgsIGluZGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfZnJlZV9pZCAoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RNZW1JbmRleElkICppZF9pbmRleCA9IChHc3RNZW1JbmRleElkICopIHZhbHVlOwotCi0gIGlmIChpZF9pbmRleC0+Zm9ybWF0X2luZGV4KSB7Ci0gICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKGlkX2luZGV4LT5mb3JtYXRfaW5kZXgsIGdzdF9tZW1faW5kZXhfZnJlZV9mb3JtYXQsCi0gICAgICAgIE5VTEwpOwotICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChpZF9pbmRleC0+Zm9ybWF0X2luZGV4KTsKLSAgICBpZF9pbmRleC0+Zm9ybWF0X2luZGV4ID0gTlVMTDsKLSAgfQotCi0gIGdfc2xpY2VfZnJlZSAoR3N0TWVtSW5kZXhJZCwgaWRfaW5kZXgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21lbV9pbmRleF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TWVtSW5kZXggKm1lbWluZGV4ID0gR1NUX01FTV9JTkRFWCAob2JqZWN0KTsKLQotICAvKiBEZWxldGUgdGhlIHRyZWVzIHJlZmVyZW5jaW5nIHRoZSBhc3NvY2lhdGlvbnMgZmlyc3QgKi8KLSAgaWYgKG1lbWluZGV4LT5pZF9pbmRleCkgewotICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChtZW1pbmRleC0+aWRfaW5kZXgsIGdzdF9tZW1faW5kZXhfZnJlZV9pZCwgTlVMTCk7Ci0gICAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKG1lbWluZGV4LT5pZF9pbmRleCk7Ci0gICAgbWVtaW5kZXgtPmlkX2luZGV4ID0gTlVMTDsKLSAgfQotCi0gIC8qIFRoZW4gZGVsZXRlIHRoZSBhc3NvY2lhdGlvbnMgdGhlbXNlbHZlcyAqLwotICBpZiAobWVtaW5kZXgtPmFzc29jaWF0aW9ucykgewotICAgIGdfbGlzdF9mb3JlYWNoIChtZW1pbmRleC0+YXNzb2NpYXRpb25zLCAoR0Z1bmMpIGdzdF9pbmRleF9lbnRyeV9mcmVlLCBOVUxMKTsKLSAgICBnX2xpc3RfZnJlZSAobWVtaW5kZXgtPmFzc29jaWF0aW9ucyk7Ci0gICAgbWVtaW5kZXgtPmFzc29jaWF0aW9ucyA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X21lbV9pbmRleF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfYWRkX2lkIChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCi17Ci0gIEdzdE1lbUluZGV4ICptZW1pbmRleCA9IEdTVF9NRU1fSU5ERVggKGluZGV4KTsKLSAgR3N0TWVtSW5kZXhJZCAqaWRfaW5kZXg7Ci0KLSAgaWRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZW1pbmRleC0+aWRfaW5kZXgsICZlbnRyeS0+aWQpOwotCi0gIGlmICghaWRfaW5kZXgpIHsKLSAgICBpZF9pbmRleCA9IGdfc2xpY2VfbmV3MCAoR3N0TWVtSW5kZXhJZCk7Ci0KLSAgICBpZF9pbmRleC0+aWQgPSBlbnRyeS0+aWQ7Ci0gICAgaWRfaW5kZXgtPmZvcm1hdF9pbmRleCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfaW50X2hhc2gsIGdfaW50X2VxdWFsKTsKLSAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChtZW1pbmRleC0+aWRfaW5kZXgsICZpZF9pbmRleC0+aWQsIGlkX2luZGV4KTsKLSAgfQotfQotCi1zdGF0aWMgZ2ludAotbWVtX2luZGV4X2NvbXBhcmUgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdE1lbUluZGV4Rm9ybWF0SW5kZXggKmluZGV4ID0gdXNlcl9kYXRhOwotICBnaW50NjQgdmFsMSwgdmFsMjsKLSAgZ2ludDY0IGRpZmY7Ci0KLSAgdmFsMSA9IEdTVF9JTkRFWF9BU1NPQ19WQUxVRSAoKChHc3RJbmRleEVudHJ5ICopIGEpLCBpbmRleC0+b2Zmc2V0KTsKLSAgdmFsMiA9IEdTVF9JTkRFWF9BU1NPQ19WQUxVRSAoKChHc3RJbmRleEVudHJ5ICopIGIpLCBpbmRleC0+b2Zmc2V0KTsKLQotICBkaWZmID0gKHZhbDIgLSB2YWwxKTsKLQotICByZXR1cm4gKGRpZmYgPT0gMCA/IDAgOiAoZGlmZiA+IDAgPyAxIDogLTEpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfaW5kZXhfZm9ybWF0IChHc3RNZW1JbmRleElkICogaWRfaW5kZXgsIEdzdEluZGV4RW50cnkgKiBlbnRyeSwKLSAgICBnaW50IGFzc29jKQotewotICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleDsKLSAgR3N0Rm9ybWF0ICpmb3JtYXQ7Ci0KLSAgZm9ybWF0ID0gJkdTVF9JTkRFWF9BU1NPQ19GT1JNQVQgKGVudHJ5LCBhc3NvYyk7Ci0KLSAgaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChpZF9pbmRleC0+Zm9ybWF0X2luZGV4LCBmb3JtYXQpOwotCi0gIGlmICghaW5kZXgpIHsKLSAgICBpbmRleCA9IGdfc2xpY2VfbmV3MCAoR3N0TWVtSW5kZXhGb3JtYXRJbmRleCk7Ci0KLSAgICBpbmRleC0+Zm9ybWF0ID0gKmZvcm1hdDsKLSAgICBpbmRleC0+b2Zmc2V0ID0gYXNzb2M7Ci0gICAgaW5kZXgtPnRyZWUgPSBnX3RyZWVfbmV3X3dpdGhfZGF0YSAobWVtX2luZGV4X2NvbXBhcmUsIGluZGV4KTsKLQotICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGlkX2luZGV4LT5mb3JtYXRfaW5kZXgsICZpbmRleC0+Zm9ybWF0LCBpbmRleCk7Ci0gIH0KLQotICBnX3RyZWVfaW5zZXJ0IChpbmRleC0+dHJlZSwgZW50cnksIGVudHJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfYWRkX2Fzc29jaWF0aW9uIChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCi17Ci0gIEdzdE1lbUluZGV4ICptZW1pbmRleCA9IEdTVF9NRU1fSU5ERVggKGluZGV4KTsKLSAgR3N0TWVtSW5kZXhJZCAqaWRfaW5kZXg7Ci0KLSAgbWVtaW5kZXgtPmFzc29jaWF0aW9ucyA9IGdfbGlzdF9wcmVwZW5kIChtZW1pbmRleC0+YXNzb2NpYXRpb25zLCBlbnRyeSk7Ci0KLSAgaWRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChtZW1pbmRleC0+aWRfaW5kZXgsICZlbnRyeS0+aWQpOwotICBpZiAoaWRfaW5kZXgpIHsKLSAgICBnaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgR1NUX0lOREVYX05BU1NPQ1MgKGVudHJ5KTsgaSsrKSB7Ci0gICAgICBnc3RfbWVtX2luZGV4X2luZGV4X2Zvcm1hdCAoaWRfaW5kZXgsIGVudHJ5LCBpKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tZW1faW5kZXhfYWRkX29iamVjdCAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21lbV9pbmRleF9hZGRfZm9ybWF0IChHc3RJbmRleCAqIGluZGV4LCBHc3RJbmRleEVudHJ5ICogZW50cnkpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWVtX2luZGV4X2FkZF9lbnRyeSAoR3N0SW5kZXggKiBpbmRleCwgR3N0SW5kZXhFbnRyeSAqIGVudHJ5KQotewotICBHU1RfTE9HX09CSkVDVCAoaW5kZXgsICJhZGRlZCB0aGlzIGVudHJ5Iik7Ci0KLSAgc3dpdGNoIChlbnRyeS0+dHlwZSkgewotICAgIGNhc2UgR1NUX0lOREVYX0VOVFJZX0lEOgotICAgICAgZ3N0X21lbV9pbmRleF9hZGRfaWQgKGluZGV4LCBlbnRyeSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9JTkRFWF9FTlRSWV9BU1NPQ0lBVElPTjoKLSAgICAgIGdzdF9tZW1faW5kZXhfYWRkX2Fzc29jaWF0aW9uIChpbmRleCwgZW50cnkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfT0JKRUNUOgotICAgICAgZ3N0X21lbV9pbmRleF9hZGRfb2JqZWN0IChpbmRleCwgZW50cnkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfSU5ERVhfRU5UUllfRk9STUFUOgotICAgICAgZ3N0X21lbV9pbmRleF9hZGRfZm9ybWF0IChpbmRleCwgZW50cnkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdpbnQ2NCB2YWx1ZTsKLSAgR3N0TWVtSW5kZXhGb3JtYXRJbmRleCAqaW5kZXg7Ci0gIGdib29sZWFuIGV4YWN0OwotICBHc3RJbmRleEVudHJ5ICpsb3dlcjsKLSAgZ2ludDY0IGxvd19kaWZmOwotICBHc3RJbmRleEVudHJ5ICpoaWdoZXI7Ci0gIGdpbnQ2NCBoaWdoX2RpZmY7Ci19Ci1Hc3RNZW1JbmRleFNlYXJjaERhdGE7Ci0KLXN0YXRpYyBnaW50Ci1tZW1faW5kZXhfc2VhcmNoIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgR3N0TWVtSW5kZXhTZWFyY2hEYXRhICpkYXRhID0gKEdzdE1lbUluZGV4U2VhcmNoRGF0YSAqKSBiOwotICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICppbmRleCA9IGRhdGEtPmluZGV4OwotICBnaW50NjQgdmFsMSwgdmFsMjsKLSAgZ2ludDY0IGRpZmY7Ci0KLSAgdmFsMSA9IEdTVF9JTkRFWF9BU1NPQ19WQUxVRSAoKChHc3RJbmRleEVudHJ5ICopIGEpLCBpbmRleC0+b2Zmc2V0KTsKLSAgdmFsMiA9IGRhdGEtPnZhbHVlOwotCi0gIGRpZmYgPSAodmFsMSAtIHZhbDIpOwotICBpZiAoZGlmZiA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIC8qIGV4YWN0IG1hdGNoaW5nLCBkb24ndCB1cGRhdGUgbG93L2hpZ2ggKi8KLSAgaWYgKGRhdGEtPmV4YWN0KQotICAgIHJldHVybiAoZGlmZiA+IDAgPyAxIDogLTEpOwotCi0gIGlmIChkaWZmIDwgMCkgewotICAgIGlmIChkaWZmID4gZGF0YS0+bG93X2RpZmYpIHsKLSAgICAgIGRhdGEtPmxvd19kaWZmID0gZGlmZjsKLSAgICAgIGRhdGEtPmxvd2VyID0gKEdzdEluZGV4RW50cnkgKikgYTsKLSAgICB9Ci0gICAgZGlmZiA9IC0xOwotICB9IGVsc2UgewotICAgIGlmIChkaWZmIDwgZGF0YS0+aGlnaF9kaWZmKSB7Ci0gICAgICBkYXRhLT5oaWdoX2RpZmYgPSBkaWZmOwotICAgICAgZGF0YS0+aGlnaGVyID0gKEdzdEluZGV4RW50cnkgKikgYTsKLSAgICB9Ci0gICAgZGlmZiA9IDE7Ci0gIH0KLQotICByZXR1cm4gZGlmZjsKLX0KLQotc3RhdGljIEdzdEluZGV4RW50cnkgKgotZ3N0X21lbV9pbmRleF9nZXRfYXNzb2NfZW50cnkgKEdzdEluZGV4ICogaW5kZXgsIGdpbnQgaWQsCi0gICAgR3N0SW5kZXhMb29rdXBNZXRob2QgbWV0aG9kLAotICAgIEdzdEluZGV4QXNzb2NpYXRpb25GbGFncyBmbGFncywKLSAgICBHc3RGb3JtYXQgZm9ybWF0LCBnaW50NjQgdmFsdWUsIEdDb21wYXJlRGF0YUZ1bmMgZnVuYywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RNZW1JbmRleCAqbWVtaW5kZXggPSBHU1RfTUVNX0lOREVYIChpbmRleCk7Ci0gIEdzdE1lbUluZGV4SWQgKmlkX2luZGV4OwotICBHc3RNZW1JbmRleEZvcm1hdEluZGV4ICpmb3JtYXRfaW5kZXg7Ci0gIEdzdEluZGV4RW50cnkgKmVudHJ5OwotICBHc3RNZW1JbmRleFNlYXJjaERhdGEgZGF0YTsKLQotICBpZF9pbmRleCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKG1lbWluZGV4LT5pZF9pbmRleCwgJmlkKTsKLSAgaWYgKCFpZF9pbmRleCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBmb3JtYXRfaW5kZXggPSBnX2hhc2hfdGFibGVfbG9va3VwIChpZF9pbmRleC0+Zm9ybWF0X2luZGV4LCAmZm9ybWF0KTsKLSAgaWYgKCFmb3JtYXRfaW5kZXgpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZGF0YS52YWx1ZSA9IHZhbHVlOwotICBkYXRhLmluZGV4ID0gZm9ybWF0X2luZGV4OwotICBkYXRhLmV4YWN0ID0gKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0VYQUNUKTsKLQotICAvKiBzZXR1cCBkYXRhIGZvciBsb3cvaGlnaCBjaGVja3MgaWYgd2UgYXJlIG5vdCBsb29raW5nCi0gICAqIGZvciBhbiBleGFjdCBtYXRjaCAqLwotICBpZiAoIWRhdGEuZXhhY3QpIHsKLSAgICBkYXRhLmxvd19kaWZmID0gR19NSU5JTlQ2NDsKLSAgICBkYXRhLmxvd2VyID0gTlVMTDsKLSAgICBkYXRhLmhpZ2hfZGlmZiA9IEdfTUFYSU5UNjQ7Ci0gICAgZGF0YS5oaWdoZXIgPSBOVUxMOwotICB9Ci0KLSAgZW50cnkgPSBnX3RyZWVfc2VhcmNoIChmb3JtYXRfaW5kZXgtPnRyZWUsIG1lbV9pbmRleF9zZWFyY2gsICZkYXRhKTsKLQotICAvKiBnZXQgdGhlIGxvdy9oaWdoIHZhbHVlcyBpZiB3ZSdyZSBub3QgZXhhY3QgKi8KLSAgaWYgKGVudHJ5ID09IE5VTEwgJiYgIWRhdGEuZXhhY3QpIHsKLSAgICBpZiAobWV0aG9kID09IEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFKQotICAgICAgZW50cnkgPSBkYXRhLmxvd2VyOwotICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0FGVEVSKSB7Ci0gICAgICBlbnRyeSA9IGRhdGEuaGlnaGVyOwotICAgIH0KLSAgfQotCi0gIGlmIChlbnRyeSAmJiAoKEdTVF9JTkRFWF9BU1NPQ19GTEFHUyAoZW50cnkpICYgZmxhZ3MpICE9IGZsYWdzKSkgewotICAgIGlmIChtZXRob2QgIT0gR1NUX0lOREVYX0xPT0tVUF9FWEFDVCkgewotICAgICAgR0xpc3QgKmxfZW50cnkgPSBnX2xpc3RfZmluZCAobWVtaW5kZXgtPmFzc29jaWF0aW9ucywgZW50cnkpOwotCi0gICAgICBlbnRyeSA9IE5VTEw7Ci0KLSAgICAgIHdoaWxlIChsX2VudHJ5KSB7Ci0gICAgICAgIGVudHJ5ID0gKEdzdEluZGV4RW50cnkgKikgbF9lbnRyeS0+ZGF0YTsKLQotICAgICAgICBpZiAoZW50cnktPmlkID09IGlkICYmIChHU1RfSU5ERVhfQVNTT0NfRkxBR1MgKGVudHJ5KSAmIGZsYWdzKSA9PSBmbGFncykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobWV0aG9kID09IEdTVF9JTkRFWF9MT09LVVBfQkVGT1JFKQotICAgICAgICAgIGxfZW50cnkgPSBnX2xpc3RfbmV4dCAobF9lbnRyeSk7Ci0gICAgICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBHU1RfSU5ERVhfTE9PS1VQX0FGVEVSKSB7Ci0gICAgICAgICAgbF9lbnRyeSA9IGdfbGlzdF9wcmV2aW91cyAobF9lbnRyeSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZW50cnkgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBlbnRyeTsKLX0KLQotI2lmIDAKLWdib29sZWFuCi1nc3RfbWVtX2luZGV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdzdEluZGV4RmFjdG9yeSAqZmFjdG9yeTsKLQotICBmYWN0b3J5ID0gZ3N0X2luZGV4X2ZhY3RvcnlfbmV3ICgibWVtaW5kZXgiLAotICAgICAgIkEgaW5kZXggdGhhdCBzdG9yZXMgZW50cmllcyBpbiBtZW1vcnkiLCBnc3RfbWVtX2luZGV4X2dldF90eXBlICgpKTsKLQotICBpZiAoZmFjdG9yeSA9PSBOVUxMKSB7Ci0gICAgZ193YXJuaW5nICgiZmFpbGVkIHRvIGNyZWF0ZSBtZW1pbmRleCBmYWN0b3J5Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KS0+cGx1Z2luX25hbWUgPSBwbHVnaW4tPmRlc2MubmFtZTsKLSAgR1NUX1BMVUdJTl9GRUFUVVJFIChmYWN0b3J5KS0+bG9hZGVkID0gVFJVRTsKLQotICBnc3RfcmVnaXN0cnlfYWRkX2ZlYXR1cmUgKGdzdF9yZWdpc3RyeV9nZXRfZGVmYXVsdCAoKSwKLSAgICAgIEdTVF9QTFVHSU5fRkVBVFVSRSAoZmFjdG9yeSkpOwotCi0gIHJldHVybiBUUlVFOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZmx4L01ha2VmaWxlLmFtIGIvZ3N0L2ZseC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFlY2FhMC4uMDAwMDAwMAotLS0gYS9nc3QvZmx4L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RmbHhkZWMubGEKLQotbGliZ3N0Zmx4ZGVjX2xhX1NPVVJDRVMgPSBnc3RmbHhkZWMuYyBmbHhfY29sb3IuYwotbGliZ3N0Zmx4ZGVjX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RmbHhkZWNfbGFfTElCQUREID0gJChHU1RfQkFTRV9MSUJTKSAgJChHU1RfTElCUykKLWxpYmdzdGZseGRlY19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RmbHhkZWNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBmbHhfZm10LmggZmx4X2NvbG9yLmggZ3N0Zmx4ZGVjLmgKZGlmZiAtLWdpdCBhL2dzdC9mbHgvTWFrZWZpbGUuaW4gYi9nc3QvZmx4L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGRmNmY2Li4wMDAwMDAwCi0tLSBhL2dzdC9mbHgvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MTggKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2ZseAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGZseGRlY19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0Zmx4ZGVjX2xhX09CSkVDVFMgPSBsaWJnc3RmbHhkZWNfbGEtZ3N0Zmx4ZGVjLmxvIFwKLQlsaWJnc3RmbHhkZWNfbGEtZmx4X2NvbG9yLmxvCi1saWJnc3RmbHhkZWNfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0Zmx4ZGVjX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RmbHhkZWNfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RmbHhkZWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RmbHhkZWNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0Zmx4ZGVjX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGZseGRlY19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RmbHhkZWNfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Zmx4ZGVjLmxhCi1saWJnc3RmbHhkZWNfbGFfU09VUkNFUyA9IGdzdGZseGRlYy5jIGZseF9jb2xvci5jCi1saWJnc3RmbHhkZWNfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGZseGRlY19sYV9MSUJBREQgPSAkKEdTVF9CQVNFX0xJQlMpICAkKEdTVF9MSUJTKQotbGliZ3N0Zmx4ZGVjX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGZseGRlY19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBmbHhfZm10LmggZmx4X2NvbG9yLmggZ3N0Zmx4ZGVjLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9mbHgvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2ZseC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGZseGRlYy5sYTogJChsaWJnc3RmbHhkZWNfbGFfT0JKRUNUUykgJChsaWJnc3RmbHhkZWNfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGZseGRlY19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0Zmx4ZGVjX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RmbHhkZWNfbGFfT0JKRUNUUykgJChsaWJnc3RmbHhkZWNfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RmbHhkZWNfbGEtZmx4X2NvbG9yLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Zmx4ZGVjX2xhLWdzdGZseGRlYy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0Zmx4ZGVjX2xhLWdzdGZseGRlYy5sbzogZ3N0Zmx4ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RmbHhkZWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Zmx4ZGVjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RmbHhkZWNfbGEtZ3N0Zmx4ZGVjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RmbHhkZWNfbGEtZ3N0Zmx4ZGVjLlRwbyAtYyAtbyBsaWJnc3RmbHhkZWNfbGEtZ3N0Zmx4ZGVjLmxvIGB0ZXN0IC1mICdnc3RmbHhkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Zmx4ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGZseGRlY19sYS1nc3RmbHhkZWMuVHBvICQoREVQRElSKS9saWJnc3RmbHhkZWNfbGEtZ3N0Zmx4ZGVjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGZseGRlYy5jJyBvYmplY3Q9J2xpYmdzdGZseGRlY19sYS1nc3RmbHhkZWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RmbHhkZWNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Zmx4ZGVjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGZseGRlY19sYS1nc3RmbHhkZWMubG8gYHRlc3QgLWYgJ2dzdGZseGRlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RmbHhkZWMuYwotCi1saWJnc3RmbHhkZWNfbGEtZmx4X2NvbG9yLmxvOiBmbHhfY29sb3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGZseGRlY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RmbHhkZWNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGZseGRlY19sYS1mbHhfY29sb3IubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGZseGRlY19sYS1mbHhfY29sb3IuVHBvIC1jIC1vIGxpYmdzdGZseGRlY19sYS1mbHhfY29sb3IubG8gYHRlc3QgLWYgJ2ZseF9jb2xvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmbHhfY29sb3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Zmx4ZGVjX2xhLWZseF9jb2xvci5UcG8gJChERVBESVIpL2xpYmdzdGZseGRlY19sYS1mbHhfY29sb3IuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZmx4X2NvbG9yLmMnIG9iamVjdD0nbGliZ3N0Zmx4ZGVjX2xhLWZseF9jb2xvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGZseGRlY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RmbHhkZWNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Zmx4ZGVjX2xhLWZseF9jb2xvci5sbyBgdGVzdCAtZiAnZmx4X2NvbG9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZseF9jb2xvci5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9mbHgvZmx4X2NvbG9yLmMgYi9nc3QvZmx4L2ZseF9jb2xvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTU4MTM1Li4wMDAwMDAwCi0tLSBhL2dzdC9mbHgvZmx4X2NvbG9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQHRlbXBsZS1iYXB0aXN0LmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJmbHhfY29sb3IuaCIKLQotRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqCi1mbHhfY29sb3JzcGFjZV9jb252ZXJ0ZXJfbmV3IChnaW50IHdpZHRoLCBnaW50IGhlaWdodCkKLXsKLSAgRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqbmV3ID0gZ19tYWxsb2MgKHNpemVvZiAoRmx4Q29sb3JTcGFjZUNvbnZlcnRlcikpOwotCi0gIG5ldy0+d2lkdGggPSB3aWR0aDsKLSAgbmV3LT5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgbWVtc2V0IChuZXctPnBhbHZlYywgMCwgc2l6ZW9mIChuZXctPnBhbHZlYykpOwotICByZXR1cm4gbmV3OwotfQotCi12b2lkCi1mbHhfY29sb3JzcGFjZV9jb252ZXJ0ZXJfZGVzdHJveSAoRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqIGZseHBhbCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZmx4cGFsICE9IE5VTEwpOwotCi0gIGdfZnJlZSAoZmx4cGFsKTsKLX0KLQotdm9pZAotZmx4X2NvbG9yc3BhY2VfY29udmVydCAoRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqIGZseHBhbCwgZ3VjaGFyICogc3JjLAotICAgIGd1Y2hhciAqIGRlc3QpCi17Ci0gIGd1aW50IHNpemUsIGNvbDsKLQotICBnX3JldHVybl9pZl9mYWlsIChmbHhwYWwgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNyYyAhPSBkZXN0KTsKLQotCi0gIHNpemUgPSBmbHhwYWwtPndpZHRoICogZmx4cGFsLT5oZWlnaHQ7Ci0KLSAgd2hpbGUgKHNpemUtLSkgewotICAgIGNvbCA9ICgqc3JjKysgKiAzKTsKLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSAgICAqZGVzdCsrID0gMDsKLSAgICAqZGVzdCsrID0gZmx4cGFsLT5wYWx2ZWNbY29sXTsKLSAgICAqZGVzdCsrID0gZmx4cGFsLT5wYWx2ZWNbY29sICsgMV07Ci0gICAgKmRlc3QrKyA9IGZseHBhbC0+cGFsdmVjW2NvbCArIDJdOwotI2Vsc2UKLSAgICAqZGVzdCsrID0gZmx4cGFsLT5wYWx2ZWNbY29sICsgMl07Ci0gICAgKmRlc3QrKyA9IGZseHBhbC0+cGFsdmVjW2NvbCArIDFdOwotICAgICpkZXN0KysgPSBmbHhwYWwtPnBhbHZlY1tjb2xdOwotICAgICpkZXN0KysgPSAwOwotI2VuZGlmCi0gIH0KLQotfQotCi0KLXZvaWQKLWZseF9zZXRfcGFsZXR0ZV92ZWN0b3IgKEZseENvbG9yU3BhY2VDb252ZXJ0ZXIgKiBmbHhwYWwsIGd1aW50IHN0YXJ0LCBndWludCBudW0sCi0gICAgZ3VjaGFyICogbmV3cGFsLCBnaW50IHNjYWxlKQotewotICBndWludCBncmFiOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGZseHBhbCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RhcnQgPCAweDEwMCk7Ci0KLSAgZ3JhYiA9ICgoc3RhcnQgKyBudW0pID4gMHgxMDAgPyAweDEwMCAtIHN0YXJ0IDogbnVtKTsKLQotICBpZiAoc2NhbGUpIHsKLSAgICBnaW50IGkgPSAwOwotCi0gICAgc3RhcnQgKj0gMzsKLSAgICB3aGlsZSAoZ3JhYikgewotICAgICAgZmx4cGFsLT5wYWx2ZWNbc3RhcnQrK10gPSBuZXdwYWxbaSsrXSA8PCBzY2FsZTsKLSAgICAgIGZseHBhbC0+cGFsdmVjW3N0YXJ0KytdID0gbmV3cGFsW2krK10gPDwgc2NhbGU7Ci0gICAgICBmbHhwYWwtPnBhbHZlY1tzdGFydCsrXSA9IG5ld3BhbFtpKytdIDw8IHNjYWxlOwotICAgICAgZ3JhYi0tOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBtZW1jcHkgKCZmbHhwYWwtPnBhbHZlY1tzdGFydCAqIDNdLCBuZXdwYWwsIGdyYWIgKiAzKTsKLSAgfQotfQotCi12b2lkCi1mbHhfc2V0X2NvbG9yIChGbHhDb2xvclNwYWNlQ29udmVydGVyICogZmx4cGFsLCBndWludCBjb2xyLCBndWludCByZWQsCi0gICAgZ3VpbnQgZ3JlZW4sIGd1aW50IGJsdWUsIGdpbnQgc2NhbGUpCi17Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZmx4cGFsICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChjb2xyIDwgMHgxMDApOwotCi0gIGZseHBhbC0+cGFsdmVjWyhjb2xyICogMyldID0gcmVkIDw8IHNjYWxlOwotICBmbHhwYWwtPnBhbHZlY1soY29sciAqIDMpICsgMV0gPSBncmVlbiA8PCBzY2FsZTsKLSAgZmx4cGFsLT5wYWx2ZWNbKGNvbHIgKiAzKSArIDJdID0gYmx1ZSA8PCBzY2FsZTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9mbHgvZmx4X2NvbG9yLmggYi9nc3QvZmx4L2ZseF9jb2xvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDM2YWI3Li4wMDAwMDAwCi0tLSBhL2dzdC9mbHgvZmx4X2NvbG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0ZMWF9DT0xPUl9IX18KLSNkZWZpbmUgX19GTFhfQ09MT1JfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBlbnVtIHsKLSAgRkxYX0NPTE9SU1BBQ0VfUkdCOCwKLSAgRkxYX0NPTE9SU1BBQ0VfUkdCMzIsCi19IEZseENvbG9yU3BhY2VUeXBlOwotCi0KLXR5cGVkZWYgc3RydWN0IF9GbHhDb2xvclNwYWNlQ29udmVydGVyIEZseENvbG9yU3BhY2VDb252ZXJ0ZXI7Ci0KLXN0cnVjdCBfRmx4Q29sb3JTcGFjZUNvbnZlcnRlciB7Ci0gIGd1aW50ICAgICAgd2lkdGg7Ci0gIGd1aW50ICAgICAgaGVpZ2h0OwotICBndWNoYXIgICAgICBwYWx2ZWNbNzY4XTsKLX07Ci0KLXZvaWQgZmx4X2NvbG9yc3BhY2VfY29udmVydGVyX2Rlc3Ryb3koRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqZmx4cGFsKTsKLXZvaWQgZmx4X2NvbG9yc3BhY2VfY29udmVydChGbHhDb2xvclNwYWNlQ29udmVydGVyICpmbHhwYWwsIGd1Y2hhciAqc3JjLCBndWNoYXIgKmRlc3QpOwotRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqIGZseF9jb2xvcnNwYWNlX2NvbnZlcnRlcl9uZXcoZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQpOwotCi12b2lkIGZseF9zZXRfcGFsZXR0ZV92ZWN0b3IoRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqZmx4cGFsLCBndWludCBzdGFydCwgZ3VpbnQgbnVtLCAKLSAgICAgICAgICBndWNoYXIgKm5ld3BhbCwgZ2ludCBzY2FsZSk7Ci12b2lkIGZseF9zZXRfY29sb3IoRmx4Q29sb3JTcGFjZUNvbnZlcnRlciAqZmx4cGFsLCBndWludCBjb2xyLCBndWludCByZWQsIGd1aW50IGdyZWVuLAotICAgICAgICAgIGd1aW50IGJsdWUsIGdpbnQgc2NhbGUpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19GTFhfQ09MT1JfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZmx4L2ZseF9mbXQuaCBiL2dzdC9mbHgvZmx4X2ZtdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmZmMjAwLi4wMDAwMDAwCi0tLSBhL2dzdC9mbHgvZmx4X2ZtdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfRkxYX0ZNVF9IX18KLSNkZWZpbmUgX19HU1RfRkxYX0ZNVF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi1lbnVtIEZseF9UeXBlQ2h1bmsKLXsKLQkvKiBmcmFtZSBjaHVua3MgKi8KLQlGTFhfUFJFRklYX1RZUEUJCT0gMHhmMTAwLAotCUZMWF9TQ1JJUFRfQ0hVTksJPSAweGYxZTAsCi0JRkxYX0ZSQU1FX1RZUEUJCT0gMHhmMWZhLAotCUZMWF9TRUdNRU5UX1RBQkxFCT0gMHhmMWZiLAotCUZMWF9IVUZGTUFOX1RBQkxFCT0gMHhmMWZjLAotCi0JLyogc3ViIGNodW5rcyAqLwotCUZMWF9DRUxfREFUQQkJPSAzLAotCUZMWF9DT0xPUjI1NgkJPSA0LAotCUZMWF9TUzIJCQk9IDcsCi0gICAgICAgIEZMWF9DT0xPUjY0CQk9IDExLAotICAgICAgICBGTFhfTEMJCQk9IDEyLAotICAgICAgICBGTFhfQkxBQ0sJCT0gMTMsCi0gICAgICAgIEZMWF9CUlVOCQk9IDE1LAotICAgICAgICBGTFhfQ09QWQkJPSAxNiwKLSAgICAgICAgRkxYX01JTkkJCT0gMTgsCi0JRkxYX0RUQV9SVU4JCT0gMjUsCi0JRkxYX0RUQV9DT1BZCQk9IDI2LAotCUZMWF9EVEFfTEMJCT0gMjcsCi0JRkxYX0xBQkVMCQk9IDMxLAotCUZMWF9CTVBfTUFTSwkJPSAzMiwKLQlGTFhfTUxFVl9NQVNLCQk9IDMzLAotCUZMWF9TRUdNRU5UCQk9IDM0LAotCUZMWF9LRVlfSU1BR0UJCT0gMzUsCi0JRkxYX0tFWV9QQUwJCT0gMzYsCi0JRkxYX1JFR0lPTgkJPSAzNywKLQlGTFhfV0FWRQkJPSAzOCwKLQlGTFhfVVNFUlNUUklORwkJPSAzOSwKLQlGTFhfUkdOX01BU0sJCT0gNDAKLQotfTsKLQotZW51bSBGbHhfTWFnaWNIZHIKLXsKLQlGTFhfTUFHSUNIRFJfRkxJCT0gMHhhZjExLAotCUZMWF9NQUdJQ0hEUl9GTEMJPSAweGFmMTIsCi0JRkxYX01BR0lDSERSX0ZMWAk9IDB4YWY0NCwKLQlGTFhfTUFHSUNIRFJfSFVGRkJXVAk9IDB4YWYzMAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0ZseEhlYWRlciAKLXsKLQlndWludDMyCXNpemU7Ci0JZ3VpbnQxNiB0eXBlOwotCWd1aW50MTYJZnJhbWVzOwotCWd1aW50MTYgd2lkdGgsaGVpZ2h0LGRlcHRoLGZsYWdzOwotCWd1aW50MzIgc3BlZWQ7Ci0JZ3VpbnQxNiByZXNlcnZlZDE7Ci0JLyogRkxDICovIAotCWd1aW50MzIgY3JlYXRlZCxjcmVhdG9yLHVwZGF0ZWQsdXBkYXRlcjsKLQlndWludDE2IGFzcGVjdF9keCwgYXNwZWN0X2R5OwotCS8qIEVHSSAqLwotCWd1aW50MTYgZXh0X2ZsYWdzLGtleWZyYW1lcyx0b3RhbGZyYW1lczsKLQlndWludDMyIHJlcV9tZW1vcnk7Ci0JZ3VpbnQxNiBtYXhfcmVnaW9ucyx0cmFuc3BfbnVtOwotCWd1Y2hhcglyZXNlcnZlZDJbMjRdOwotCS8qIEZMQyAqLwotCWd1aW50MzIgb2ZyYW1lMSxvZnJhbWUyOwotCWd1Y2hhcglyZXNlcnZlZDNbNDBdOwotfSBGbHhIZWFkZXI7Ci0jZGVmaW5lIEZseEhlYWRlclNpemUgMTI4Ci0KLXR5cGVkZWYgc3RydWN0IF9GbHhGcmFtZUNodW5rCi17Ci0JZ3VpbnQzMglzaXplOwotCWd1aW50MTYJaWQ7Ci19IEZseEZyYW1lQ2h1bms7Ci0jZGVmaW5lIEZseEZyYW1lQ2h1bmtTaXplIDYKLQotdHlwZWRlZiBzdHJ1Y3QgX0ZseFByZWZpeENodW5rCi17Ci0JZ3VpbnQxNiBjaHVua3M7Ci0JZ3VjaGFyICByZXNlcnZlZFs4XTsKLX0gRmx4UHJlZml4Q2h1bms7Ci0KLXR5cGVkZWYgc3RydWN0IF9GbHhTZWdtZW50VGFibGUKLXsKLQlndWludDE2IHNlZ21lbnRzOwotfSBGbHhTZWdtZW50VGFibGU7Ci0KLXR5cGVkZWYgc3RydWN0IF9GbHhIdWZmbWFuVGFibGUKLXsKLQlndWludDE2IGNvZGVsZW5ndGg7Ci0JZ3VpbnQxNiBudW1jb2RlczsKLQlndWNoYXIJcmVzZXJ2ZWRbNl07Ci19IEZseEh1ZmZtYW5UYWJsZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0ZseEZyYW1lVHlwZQotewotCWd1aW50MTYgY2h1bmtzOwotCWd1aW50MTYgZGVsYXk7Ci0JZ3VjaGFyCXJlc2VydmVkWzZdOwotfSBGbHhGcmFtZVR5cGU7Ci0jZGVmaW5lIEZseEZyYW1lVHlwZVNpemUgMTAKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZMWF9GTVRfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvZmx4L2dzdGZseGRlYy5jIGIvZ3N0L2ZseC9nc3RmbHhkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkNTUyYS4uMDAwMDAwMAotLS0gYS9nc3QvZmx4L2dzdGZseGRlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTk4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUB0ZW1wbGUtYmFwdGlzdC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDE2PiBNYXR0aGV3IFdhdGVycyA8bWF0dGhld0BjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LWZseGRlYwotICoKLSAqIFRoaXMgZWxlbWVudCBkZWNvZGVzIGZsaS9mbGMvZmx4LXZpZGVvIGludG8gcmF3IHZpZGVvCi0gKi8KLS8qCi0gKiBodHRwOi8vd3d3LmNvb2x1dGlscy5jb20vRm9ybWF0cy9GTEkKLSAqIGh0dHA6Ly93b29kc2hvbGUuZXIudXNncy5nb3Yvb3BlcmF0aW9ucy9tb2RlbGluZy9mbGMuaHRtbAotICogaHR0cDovL3d3dy5jb21wdXBoYXNlLmNvbS9mbGljLmh0bQotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImZseF9mbXQuaCIKLSNpbmNsdWRlICJnc3RmbHhkZWMuaCIKLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2RlZmluZSBKSUZGSUUgIChHU1RfU0VDT05ELzcwKQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChmbHhkZWNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZmx4ZGVjX2RlYnVnCi0KLS8qIGlucHV0ICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1mbGkiKQotICAgICk7Ci0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOCi0jZGVmaW5lIFJHQl9PUkRFUiAieFJHQiIKLSNlbHNlCi0jZGVmaW5lIFJHQl9PUkRFUiAiQkdSeCIKLSNlbmRpZgotCi0vKiBvdXRwdXQgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdmlkZW9fZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKFJHQl9PUkRFUikpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X2ZseGRlY19kaXNwb3NlIChHc3RGbHhEZWMgKiBmbHhkZWMpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZmx4ZGVjX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9mbHhkZWNfc2lua19ldmVudF9oYW5kbGVyIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9mbHhkZWNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9mbHhkZWNfc3JjX3F1ZXJ5X2hhbmRsZXIgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmx4X2RlY29kZV9jb2xvciAoR3N0Rmx4RGVjICogZmx4ZGVjLCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGdpbnQgc2NhbGUpOwotc3RhdGljIGdib29sZWFuIGZseF9kZWNvZGVfYnJ1biAoR3N0Rmx4RGVjICogZmx4ZGVjLAotICAgIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpOwotc3RhdGljIGdib29sZWFuIGZseF9kZWNvZGVfZGVsdGFfZmxpIChHc3RGbHhEZWMgKiBmbHhkZWMsCi0gICAgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwgR3N0Qnl0ZVdyaXRlciAqIHdyaXRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZmx4X2RlY29kZV9kZWx0YV9mbGMgKEdzdEZseERlYyAqIGZseGRlYywKLSAgICBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBHc3RCeXRlV3JpdGVyICogd3JpdGVyKTsKLQotI2RlZmluZSBybmRhbGlnbihvZmYpICgob2ZmKSArICgob2ZmKSAmIDEpKQotCi0jZGVmaW5lIGdzdF9mbHhkZWNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0Rmx4RGVjLCBnc3RfZmx4ZGVjLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9mbHhkZWNfY2xhc3NfaW5pdCAoR3N0Rmx4RGVjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSAoR09iamVjdEZpbmFsaXplRnVuYykgZ3N0X2ZseGRlY19kaXNwb3NlOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChmbHhkZWNfZGVidWcsICJmbHhkZWMiLCAwLCAiRkxYIHZpZGVvIGRlY29kZXIiKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZseGRlY19jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJGTFggdmlkZW8gZGVjb2RlciIsCi0gICAgICAiQ29kZWMvRGVjb2Rlci9WaWRlbyIsCi0gICAgICAiRkxDL0ZMSS9GTFggdmlkZW8gZGVjb2RlciIsCi0gICAgICAiU2VwcCBXaWpuYW5kcyA8bXJyYXp6QGdhcmJhZ2UtY29kZXJ6Lm5ldD4sIFplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPiIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmc2lua19mYWN0b3J5KSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZzcmNfdmlkZW9fZmFjdG9yeSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZseGRlY19pbml0IChHc3RGbHhEZWMgKiBmbHhkZWMpCi17Ci0gIGZseGRlYy0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua19mYWN0b3J5LCAic2luayIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoZmx4ZGVjKSwgZmx4ZGVjLT5zaW5rcGFkKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGZseGRlYy0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZmx4ZGVjX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChmbHhkZWMtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ZseGRlY19zaW5rX2V2ZW50X2hhbmRsZXIpKTsKLQotICBmbHhkZWMtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjX3ZpZGVvX2ZhY3RvcnksICJzcmMiKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGZseGRlYyksIGZseGRlYy0+c3JjcGFkKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGZseGRlYy0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9mbHhkZWNfc3JjX3F1ZXJ5X2hhbmRsZXIpKTsKLQotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChmbHhkZWMtPnNyY3BhZCk7Ci0KLSAgZmx4ZGVjLT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ZseGRlY19kaXNwb3NlIChHc3RGbHhEZWMgKiBmbHhkZWMpCi17Ci0gIGlmIChmbHhkZWMtPmFkYXB0ZXIpIHsKLSAgICBnX29iamVjdF91bnJlZiAoZmx4ZGVjLT5hZGFwdGVyKTsKLSAgICBmbHhkZWMtPmFkYXB0ZXIgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKChHT2JqZWN0ICopIGZseGRlYyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ZseGRlY19zcmNfcXVlcnlfaGFuZGxlciAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0Rmx4RGVjICpmbHhkZWMgPSAoR3N0Rmx4RGVjICopIHBhcmVudDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046Ci0gICAgewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIGlmIChmb3JtYXQgIT0gR1NUX0ZPUk1BVF9USU1FKQotICAgICAgICBnb3RvIGRvbmU7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGZseGRlYy0+ZHVyYXRpb24pOwotCi0gICAgICByZXQgPSBUUlVFOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLWRvbmU6Ci0gIGlmICghcmV0KQotICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9mbHhkZWNfc2lua19ldmVudF9oYW5kbGVyIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RGbHhEZWMgKmZseGRlYzsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGZseGRlYyA9IEdTVF9GTFhERUMgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJmZseGRlYy0+c2VnbWVudCk7Ci0gICAgICBpZiAoZmx4ZGVjLT5zZWdtZW50LmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmx4ZGVjLCAiZ2VuZXJhdGluZyBUSU1FIHNlZ21lbnQiKTsKLSAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmZseGRlYy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZmx4ZGVjLT5zZWdtZW50KTsKLSAgICAgIH0KLQotICAgICAgaWYgKGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoZmx4ZGVjLT5zcmNwYWQpKSB7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZseGRlYy0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZmbHhkZWMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZmx4X2RlY29kZV9jaHVua3MgKEdzdEZseERlYyAqIGZseGRlYywgZ3Vsb25nIG5fY2h1bmtzLCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgd2hpbGUgKG5fY2h1bmtzLS0pIHsKLSAgICBHc3RCeXRlUmVhZGVyIGNodW5rOwotICAgIGd1aW50MzIgc2l6ZTsKLSAgICBndWludDE2IHR5cGU7Ci0KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZzaXplKSkKLSAgICAgIGdvdG8gcGFyc2VfZXJyb3I7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZSAocmVhZGVyLCAmdHlwZSkpCi0gICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICAgIEdTVF9MT0dfT0JKRUNUIChmbHhkZWMsICJjaHVuayBoYXMgdHlwZSAweCUwMnggc2l6ZSAlZCIsIHR5cGUsIHNpemUpOwotCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIgKHJlYWRlciwgJmNodW5rLAotICAgICAgICAgICAgc2l6ZSAtIEZseEZyYW1lQ2h1bmtTaXplKSkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiSW5jb3JyZWN0IHNpemUgaW4gdGhlIGNodW5rIGhlYWRlciIpOwotICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgIGNhc2UgRkxYX0NPTE9SNjQ6Ci0gICAgICAgIHJldCA9IGZseF9kZWNvZGVfY29sb3IgKGZseGRlYywgJmNodW5rLCB3cml0ZXIsIDIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTFhfQ09MT1IyNTY6Ci0gICAgICAgIHJldCA9IGZseF9kZWNvZGVfY29sb3IgKGZseGRlYywgJmNodW5rLCB3cml0ZXIsIDApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTFhfQlJVTjoKLSAgICAgICAgcmV0ID0gZmx4X2RlY29kZV9icnVuIChmbHhkZWMsICZjaHVuaywgd3JpdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRkxYX0xDOgotICAgICAgICByZXQgPSBmbHhfZGVjb2RlX2RlbHRhX2ZsaSAoZmx4ZGVjLCAmY2h1bmssIHdyaXRlcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEZMWF9TUzI6Ci0gICAgICAgIHJldCA9IGZseF9kZWNvZGVfZGVsdGFfZmxjIChmbHhkZWMsICZjaHVuaywgd3JpdGVyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRkxYX0JMQUNLOgotICAgICAgICByZXQgPSBnc3RfYnl0ZV93cml0ZXJfZmlsbCAod3JpdGVyLCAwLCBmbHhkZWMtPnNpemUpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBGTFhfTUlOSToKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiVW5pbXBsZW1lbnRlZCBjaHVuayB0eXBlOiAweCUwMnggc2l6ZTogJWQgLSBza2lwcGluZyIsCi0gICAgICAgICAgICB0eXBlLCBzaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFyZXQpCi0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLXBhcnNlX2Vycm9yOgotICBHU1RfRVJST1JfT0JKRUNUIChmbHhkZWMsICJGYWlsZWQgdG8gZGVjb2RlIGNodW5rIik7Ci1lcnJvcjoKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZmx4X2RlY29kZV9jb2xvciAoR3N0Rmx4RGVjICogZmx4ZGVjLCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIsIGdpbnQgc2NhbGUpCi17Ci0gIGd1aW50OCBjb3VudCwgaW5keDsKLSAgZ3VpbnQxNiBwYWNrczsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZwYWNrcykpCi0gICAgZ290byBlcnJvcjsKLSAgaW5keCA9IDA7Ci0KLSAgR1NUX0xPRyAoIkdzdEZseERlYzogY21hcCBwYWNrczogJWQiLCAoZ3VpbnQpIHBhY2tzKTsKLSAgd2hpbGUgKHBhY2tzLS0pIHsKLSAgICBjb25zdCBndWludDggKmRhdGE7Ci0gICAgZ3VpbnQxNiBhY3R1YWxfY291bnQ7Ci0KLSAgICAvKiBjb2xvciBtYXAgaW5kZXggKyBza2lwIGNvdW50ICovCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZpbmR4KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBudW1iZXIgb2YgcmdiIHRyaXBsZXRzICovCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZjb3VudCkpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgYWN0dWFsX2NvdW50ID0gY291bnQgPT0gMCA/IDI1NiA6IGNvdW50OwotCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgKHJlYWRlciwgY291bnQgKiAzLCAmZGF0YSkpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGZseGRlYywgImNtYXAgY291bnQ6ICVkIChpbmR4OiAlZCkiLCBhY3R1YWxfY291bnQsIGluZHgpOwotICAgIGZseF9zZXRfcGFsZXR0ZV92ZWN0b3IgKGZseGRlYy0+Y29udmVydGVyLCBpbmR4LCBhY3R1YWxfY291bnQsCi0gICAgICAgIChndWNoYXIgKikgZGF0YSwgc2NhbGUpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWVycm9yOgotICBHU1RfRVJST1JfT0JKRUNUIChmbHhkZWMsICJFcnJvciBkZWNvZGluZyBjb2xvciBwYWxldHRlIik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mbHhfZGVjb2RlX2JydW4gKEdzdEZseERlYyAqIGZseGRlYywgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RCeXRlV3JpdGVyICogd3JpdGVyKQotewotICBndWxvbmcgbGluZXMsIHJvdzsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmx4ZGVjICE9IE5VTEwsIEZBTFNFKTsKLQotICBsaW5lcyA9IGZseGRlYy0+aGRyLmhlaWdodDsKLSAgd2hpbGUgKGxpbmVzLS0pIHsKLSAgICAvKiBwYWNrZXQgY291bnQuICAKLSAgICAgKiBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZSwgc2luY2UgdGhlIGZsYyBmb3JtYXQgY2FuCi0gICAgICogY29udGFpbiBtb3JlIHRoZW4gMjU1IFJMRSBwYWNrZXRzLiB3ZSB1c2UgdGhlIGZyYW1lIAotICAgICAqIHdpZHRoIGluc3RlYWQuIAotICAgICAqLwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKHJlYWRlciwgMSkpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgcm93ID0gZmx4ZGVjLT5oZHIud2lkdGg7Ci0gICAgd2hpbGUgKHJvdykgewotICAgICAgZ2ludDggY291bnQ7Ci0KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4IChyZWFkZXIsICZjb3VudCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgIGlmIChjb3VudCA8PSAwKSB7Ci0gICAgICAgIGNvbnN0IGd1aW50OCAqZGF0YTsKLQotICAgICAgICAvKiBsaXRlcmFsIHJ1biAqLwotICAgICAgICBjb3VudCA9IEFCUyAoY291bnQpOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChmbHhkZWMsICJoYXZlIGxpdGVyYWwgcnVuIG9mIHNpemUgJWQiLCBjb3VudCk7Ci0KLSAgICAgICAgaWYgKGNvdW50ID4gcm93KSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiSW52YWxpZCBCUlVOIGxpbmUgZGV0ZWN0ZWQuICIKLSAgICAgICAgICAgICAgImJ5dGVzIHRvIHdyaXRlIGV4Y2VlZHMgdGhlIGVuZCBvZiB0aGUgcm93Iik7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIHJvdyAtPSBjb3VudDsKLQotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSAocmVhZGVyLCBjb3VudCwgJmRhdGEpKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICh3cml0ZXIsIGRhdGEsIGNvdW50KSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3VpbnQ4IHg7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZseGRlYywgImhhdmUgcmVwbGljYXRlIHJ1biBvZiBzaXplICVkIiwgY291bnQpOwotCi0gICAgICAgIGlmIChjb3VudCA+IHJvdykgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZseGRlYywgIkludmFsaWQgQlJVTiBwYWNrZXQgZGV0ZWN0ZWQuIgotICAgICAgICAgICAgICAiYnl0ZXMgdG8gd3JpdGUgZXhjZWVkcyB0aGUgZW5kIG9mIHRoZSByb3ciKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiByZXBsaWNhdGUgcnVuICovCi0gICAgICAgIHJvdyAtPSBjb3VudDsKLQotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJngpKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKHdyaXRlciwgeCwgY291bnQpKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWVycm9yOgotICBHU1RfRVJST1JfT0JKRUNUIChmbHhkZWMsICJGYWlsZWQgdG8gZGVjb2RlIEJSVU4gcGFja2V0Iik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mbHhfZGVjb2RlX2RlbHRhX2ZsaSAoR3N0Rmx4RGVjICogZmx4ZGVjLCBHc3RCeXRlUmVhZGVyICogcmVhZGVyLAotICAgIEdzdEJ5dGVXcml0ZXIgKiB3cml0ZXIpCi17Ci0gIGd1aW50MTYgc3RhcnRfbGluZSwgbGluZXM7Ci0gIGd1aW50IGxpbmVfc3RhcnRfaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmx4ZGVjICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZseGRlYy0+ZGVsdGFfZGF0YSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogdXNlIGxhc3QgZnJhbWUgZm9yIGRlbHRhICovCi0gIGlmICghZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICh3cml0ZXIsIGZseGRlYy0+ZGVsdGFfZGF0YSwgZmx4ZGVjLT5zaXplKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJnN0YXJ0X2xpbmUpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmxpbmVzKSkKLSAgICBnb3RvIGVycm9yOwotICBHU1RfTE9HX09CSkVDVCAoZmx4ZGVjLCAiaGVpZ2h0ICVkIHN0YXJ0IGxpbmUgJWQgbGluZSBjb3VudCAlZCIsCi0gICAgICBmbHhkZWMtPmhkci5oZWlnaHQsIHN0YXJ0X2xpbmUsIGxpbmVzKTsKLQotICBpZiAoc3RhcnRfbGluZSArIGxpbmVzID4gZmx4ZGVjLT5oZHIuaGVpZ2h0KSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiSW52YWxpZCBGTEkgcGFja2V0IGRldGVjdGVkLiB0b28gbWFueSBsaW5lcy4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBsaW5lX3N0YXJ0X2kgPSBmbHhkZWMtPmhkci53aWR0aCAqIHN0YXJ0X2xpbmU7Ci0gIGlmICghZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKHdyaXRlciwgbGluZV9zdGFydF9pKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIHdoaWxlIChsaW5lcy0tKSB7Ci0gICAgZ3VpbnQ4IHBhY2tldHM7Ci0KLSAgICAvKiBwYWNrZXQgY291bnQgKi8KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJnBhY2tldHMpKQotICAgICAgZ290byBlcnJvcjsKLSAgICBHU1RfTE9HX09CSkVDVCAoZmx4ZGVjLCAiaGF2ZSAlZCBwYWNrZXRzIiwgcGFja2V0cyk7Ci0KLSAgICB3aGlsZSAocGFja2V0cy0tKSB7Ci0gICAgICAvKiBza2lwIGNvdW50ICovCi0gICAgICBndWludDggc2tpcDsKLSAgICAgIGdpbnQ4IGNvdW50OwotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChyZWFkZXIsICZza2lwKSkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgLyogc2tpcCBieXRlcyAqLwotICAgICAgaWYgKCFnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAod3JpdGVyLAotICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAod3JpdGVyKSArIHNraXApKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAvKiBSTEUgY291bnQgKi8KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4IChyZWFkZXIsICZjb3VudCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZ3VpbnQ4IHg7Ci0KLSAgICAgICAgLyogbGl0ZXJhbCBydW4gKi8KLSAgICAgICAgY291bnQgPSBBQlMgKGNvdW50KTsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZseGRlYywgImhhdmUgbGl0ZXJhbCBydW4gb2Ygc2l6ZSAlZCBhdCBvZmZzZXQgJWQiLAotICAgICAgICAgICAgY291bnQsIHNraXApOwotCi0gICAgICAgIGlmIChza2lwICsgY291bnQgPiBmbHhkZWMtPmhkci53aWR0aCkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZseGRlYywgIkludmFsaWQgRkxJIHBhY2tldCBkZXRlY3RlZC4gIgotICAgICAgICAgICAgICAibGluZSB0b28gbG9uZy4iKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJngpKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfd3JpdGVyX2ZpbGwgKHdyaXRlciwgeCwgY291bnQpKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBndWludDggKmRhdGE7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZseGRlYywgImhhdmUgcmVwbGljYXRlIHJ1biBvZiBzaXplICVkIGF0IG9mZnNldCAlZCIsCi0gICAgICAgICAgICBjb3VudCwgc2tpcCk7Ci0KLSAgICAgICAgaWYgKHNraXAgKyBjb3VudCA+IGZseGRlYy0+aGRyLndpZHRoKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiSW52YWxpZCBGTEkgcGFja2V0IGRldGVjdGVkLiAiCi0gICAgICAgICAgICAgICJsaW5lIHRvbyBsb25nLiIpOwotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHJlcGxpY2F0ZSBydW4gKi8KLSAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X2RhdGEgKHJlYWRlciwgY291bnQsICZkYXRhKSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAoIWdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAod3JpdGVyLCBkYXRhLCBjb3VudCkpCi0gICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0gICAgbGluZV9zdGFydF9pICs9IGZseGRlYy0+aGRyLndpZHRoOwotICAgIGlmICghZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKHdyaXRlciwgbGluZV9zdGFydF9pKSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotZXJyb3I6Ci0gIEdTVF9FUlJPUl9PQkpFQ1QgKGZseGRlYywgIkZhaWxlZCB0byBkZWNvZGUgRkxJIHBhY2tldCIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZmx4X2RlY29kZV9kZWx0YV9mbGMgKEdzdEZseERlYyAqIGZseGRlYywgR3N0Qnl0ZVJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RCeXRlV3JpdGVyICogd3JpdGVyKQotewotICBndWludDE2IGxpbmVzLCBzdGFydF9sOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmbHhkZWMgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmx4ZGVjLT5kZWx0YV9kYXRhICE9IE5VTEwsIEZBTFNFKTsKLQotICAvKiB1c2UgbGFzdCBmcmFtZSBmb3IgZGVsdGEgKi8KLSAgaWYgKCFnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKHdyaXRlciwgZmx4ZGVjLT5kZWx0YV9kYXRhLCBmbHhkZWMtPnNpemUpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmxpbmVzKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmIChsaW5lcyA+IGZseGRlYy0+aGRyLmhlaWdodCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZseGRlYywgIkludmFsaWQgRkxDIHBhY2tldCBkZXRlY3RlZC4gdG9vIG1hbnkgbGluZXMuIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgc3RhcnRfbCA9IGxpbmVzOwotCi0gIHdoaWxlIChsaW5lcykgewotICAgIGd1aW50MTYgb3Bjb2RlOwotCi0gICAgaWYgKCFnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAod3JpdGVyLAotICAgICAgICAgICAgZmx4ZGVjLT5oZHIud2lkdGggKiAoc3RhcnRfbCAtIGxpbmVzKSkpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgLyogcHJvY2VzcyBvcGNvZGUocykgKi8KLSAgICB3aGlsZSAoVFJVRSkgewotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZSAocmVhZGVyLCAmb3Bjb2RlKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIGlmICgob3Bjb2RlICYgMHhjMDAwKSA9PSAwKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKChvcGNvZGUgJiAweGMwMDApID09IDB4YzAwMCkgewotICAgICAgICAvKiBsaW5lIHNraXAgY291bnQgKi8KLSAgICAgICAgZ3Vsb25nIHNraXAgPSAoMHgxMDAwMCAtIG9wY29kZSk7Ci0gICAgICAgIGlmIChza2lwID4gZmx4ZGVjLT5oZHIuaGVpZ2h0KSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiSW52YWxpZCBGTEMgcGFja2V0IGRldGVjdGVkLiAiCi0gICAgICAgICAgICAgICJza2lwIGxpbmUgY291bnQgdG9vIGJpZy4iKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnRfbCArPSBza2lwOwotICAgICAgICBpZiAoIWdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zICh3cml0ZXIsCi0gICAgICAgICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKHdyaXRlcikgKyBmbHhkZWMtPmhkci53aWR0aCAqIHNraXApKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBsYXN0IHBpeGVsICovCi0gICAgICAgIGlmICghZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKHdyaXRlciwKLSAgICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAod3JpdGVyKSArIGZseGRlYy0+aGRyLndpZHRoKSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAoIWdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKHdyaXRlciwgb3Bjb2RlICYgMHhmZikpCi0gICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBsYXN0IG9wY29kZSBpcyB0aGUgcGFja2V0IGNvdW50ICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKGZseGRlYywgImhhdmUgJWQgcGFja2V0cyIsIG9wY29kZSk7Ci0gICAgd2hpbGUgKG9wY29kZS0tKSB7Ci0gICAgICAvKiBza2lwIGNvdW50ICovCi0gICAgICBndWludDggc2tpcDsKLSAgICAgIGdpbnQ4IGNvdW50OwotCi0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKHJlYWRlciwgJnNraXApKQotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgaWYgKCFnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAod3JpdGVyLAotICAgICAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZ2V0X3BvcyAod3JpdGVyKSArIHNraXApKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAvKiBSTEUgY291bnQgKi8KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQ4IChyZWFkZXIsICZjb3VudCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZ3VpbnQxNiB4OwotCi0gICAgICAgIC8qIHJlcGxpY2F0ZSB3b3JkIHJ1biAqLwotICAgICAgICBjb3VudCA9IEFCUyAoY291bnQpOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChmbHhkZWMsICJoYXZlIHJlcGxpY2F0ZSBydW4gb2Ygc2l6ZSAlZCBhdCBvZmZzZXQgJWQiLAotICAgICAgICAgICAgY291bnQsIHNraXApOwotCi0gICAgICAgIGlmIChza2lwICsgY291bnQgPiBmbHhkZWMtPmhkci53aWR0aCkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZseGRlYywgIkludmFsaWQgRkxDIHBhY2tldCBkZXRlY3RlZC4gIgotICAgICAgICAgICAgICAibGluZSB0b28gbG9uZy4iKTsKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZ4KSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAgICAgaWYgKCFnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAod3JpdGVyLCB4KSkgewotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChmbHhkZWMsICJoYXZlIGxpdGVyYWwgcnVuIG9mIHNpemUgJWQgYXQgb2Zmc2V0ICVkIiwKLSAgICAgICAgICAgIGNvdW50LCBza2lwKTsKLQotICAgICAgICBpZiAoc2tpcCArIGNvdW50ID4gZmx4ZGVjLT5oZHIud2lkdGgpIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChmbHhkZWMsICJJbnZhbGlkIEZMQyBwYWNrZXQgZGV0ZWN0ZWQuICIKLSAgICAgICAgICAgICAgImxpbmUgdG9vIGxvbmcuIik7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgICBndWludDE2IHg7Ci0KLSAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZ4KSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgaWYgKCFnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAod3JpdGVyLCB4KSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgbGluZXMtLTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi1lcnJvcjoKLSAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiRmFpbGVkIHRvIGRlY29kZSBGTEkgcGFja2V0Iik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fcmVhZF9mbHhfaGVhZGVyIChHc3RGbHhEZWMgKiBmbHhkZWMsIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIsIEZseEhlYWRlciAqIGZseGgpCi17Ci0gIG1lbXNldCAoZmx4aCwgMCwgc2l6ZW9mICgqZmx4aCkpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKHJlYWRlciwgJmZseGgtPnNpemUpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmIChmbHhoLT5zaXplIDwgRmx4SGVhZGVyU2l6ZSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZseGRlYywgIkludmFsaWQgZmlsZSBzaXplIGluIHRoZSBoZWFkZXIiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZmbHhoLT50eXBlKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZmbHhoLT5mcmFtZXMpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmZseGgtPndpZHRoKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZmbHhoLT5oZWlnaHQpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmZseGgtPmRlcHRoKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZmbHhoLT5mbGFncykpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAocmVhZGVyLCAmZmx4aC0+c3BlZWQpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKHJlYWRlciwgMikpICAgICAgICAvKiByZXNlcnZlZCAqLwotICAgIGdvdG8gZXJyb3I7Ci0gIC8qIEZMQyAqLwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZmbHhoLT5jcmVhdGVkKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZmbHhoLT5jcmVhdG9yKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZmbHhoLT51cGRhdGVkKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZmbHhoLT51cGRhdGVyKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZmbHhoLT5hc3BlY3RfZHgpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmZseGgtPmFzcGVjdF9keSkpCi0gICAgZ290byBlcnJvcjsKLSAgLyogRUdJICovCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmZseGgtPmV4dF9mbGFncykpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZSAocmVhZGVyLCAmZmx4aC0+a2V5ZnJhbWVzKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlIChyZWFkZXIsICZmbHhoLT50b3RhbGZyYW1lcykpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9sZSAocmVhZGVyLCAmZmx4aC0+cmVxX21lbW9yeSkpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9sZSAocmVhZGVyLCAmZmx4aC0+bWF4X3JlZ2lvbnMpKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKHJlYWRlciwgJmZseGgtPnRyYW5zcF9udW0pKQotICAgIGdvdG8gZXJyb3I7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKHJlYWRlciwgMjQpKSAgICAgICAvKiByZXNlcnZlZCAqLwotICAgIGdvdG8gZXJyb3I7Ci0gIC8qIEZMQyAqLwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZmbHhoLT5vZnJhbWUxKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlIChyZWFkZXIsICZmbHhoLT5vZnJhbWUyKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwIChyZWFkZXIsIDQwKSkgICAgICAgLyogcmVzZXJ2ZWQgKi8KLSAgICBnb3RvIGVycm9yOwotCi0gIHJldHVybiBUUlVFOwotCi1lcnJvcjoKLSAgR1NUX0VSUk9SX09CSkVDVCAoZmx4ZGVjLCAiRXJyb3IgcmVhZGluZyBmaWxlIGhlYWRlciIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZmx4ZGVjX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RCeXRlUmVhZGVyIHJlYWRlcjsKLSAgR3N0QnVmZmVyICppbnB1dDsKLSAgR3N0TWFwSW5mbyBtYXBfaW5mbzsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQgYXZhaWxhYmxlOwotICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX09LOwotCi0gIEdzdEZseERlYyAqZmx4ZGVjOwotICBGbHhIZWFkZXIgKmZseGg7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZiAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0gIGZseGRlYyA9IChHc3RGbHhEZWMgKikgcGFyZW50OwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZmx4ZGVjICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBnc3RfYWRhcHRlcl9wdXNoIChmbHhkZWMtPmFkYXB0ZXIsIGJ1Zik7Ci0gIGF2YWlsYWJsZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZmx4ZGVjLT5hZGFwdGVyKTsKLSAgaW5wdXQgPSBnc3RfYWRhcHRlcl9nZXRfYnVmZmVyIChmbHhkZWMtPmFkYXB0ZXIsIGF2YWlsYWJsZSk7Ci0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGlucHV0LCAmbWFwX2luZm8sIEdTVF9NQVBfUkVBRCkpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmx4ZGVjLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCIlcyIsICJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpLCAoTlVMTCkpOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIG1hcF9pbmZvLmRhdGEsIG1hcF9pbmZvLnNpemUpOwotCi0gIGlmIChmbHhkZWMtPnN0YXRlID09IEdTVF9GTFhERUNfUkVBRF9IRUFERVIpIHsKLSAgICBpZiAoYXZhaWxhYmxlID49IEZseEhlYWRlclNpemUpIHsKLSAgICAgIEdzdEJ5dGVSZWFkZXIgaGVhZGVyOwotICAgICAgR3N0Q2FwcyAqdGVtcGw7Ci0KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9zdWJfcmVhZGVyICgmcmVhZGVyLCAmaGVhZGVyLCBGbHhIZWFkZXJTaXplKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmx4ZGVjLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgICAgICgiJXMiLCAiQ291bGQgbm90IHJlYWQgaGVhZGVyIiksIChOVUxMKSk7Ci0gICAgICAgIGdvdG8gdW5tYXBfaW5wdXRfZXJyb3I7Ci0gICAgICB9Ci0gICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoZmx4ZGVjLT5hZGFwdGVyLCBGbHhIZWFkZXJTaXplKTsKLSAgICAgIGF2YWlsYWJsZSAtPSBGbHhIZWFkZXJTaXplOwotCi0gICAgICBpZiAoIV9yZWFkX2ZseF9oZWFkZXIgKGZseGRlYywgJmhlYWRlciwgJmZseGRlYy0+aGRyKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmx4ZGVjLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgICAgICgiJXMiLCAiRmFpbGVkIHRvIHBhcnNlIGhlYWRlciIpLCAoTlVMTCkpOwotICAgICAgICBnb3RvIHVubWFwX2lucHV0X2Vycm9yOwotICAgICAgfQotCi0gICAgICBmbHhoID0gJmZseGRlYy0+aGRyOwotCi0gICAgICAvKiBjaGVjayBoZWFkZXIgKi8KLSAgICAgIGlmIChmbHhoLT50eXBlICE9IEZMWF9NQUdJQ0hEUl9GTEkgJiYKLSAgICAgICAgICBmbHhoLT50eXBlICE9IEZMWF9NQUdJQ0hEUl9GTEMgJiYgZmx4aC0+dHlwZSAhPSBGTFhfTUFHSUNIRFJfRkxYKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmbHhkZWMsIFNUUkVBTSwgV1JPTkdfVFlQRSwgKE5VTEwpLAotICAgICAgICAgICAgKCJub3QgYSBmbHggZmlsZSAodHlwZSAleCkiLCBmbHhoLT50eXBlKSk7Ci0gICAgICAgIGdvdG8gdW5tYXBfaW5wdXRfZXJyb3I7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmx4ZGVjLCAic2l6ZSAgICAgIDogICVkIiwgZmx4aC0+c2l6ZSk7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGZseGRlYywgImZyYW1lcyAgICA6ICAlZCIsIGZseGgtPmZyYW1lcyk7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGZseGRlYywgIndpZHRoICAgICA6ICAlZCIsIGZseGgtPndpZHRoKTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmx4ZGVjLCAiaGVpZ2h0ICAgIDogICVkIiwgZmx4aC0+aGVpZ2h0KTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmx4ZGVjLCAiZGVwdGggICAgIDogICVkIiwgZmx4aC0+ZGVwdGgpOwotICAgICAgR1NUX0lORk9fT0JKRUNUIChmbHhkZWMsICJzcGVlZCAgICAgOiAgJWQiLCBmbHhoLT5zcGVlZCk7Ci0KLSAgICAgIGZseGRlYy0+bmV4dF90aW1lID0gMDsKLQotICAgICAgaWYgKGZseGgtPnR5cGUgPT0gRkxYX01BR0lDSERSX0ZMSSkgewotICAgICAgICBmbHhkZWMtPmZyYW1lX3RpbWUgPSBKSUZGSUUgKiBmbHhoLT5zcGVlZDsKLSAgICAgIH0gZWxzZSBpZiAoZmx4aC0+c3BlZWQgPT0gMCkgewotICAgICAgICBmbHhkZWMtPmZyYW1lX3RpbWUgPSBHU1RfU0VDT05EIC8gNzA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmbHhkZWMtPmZyYW1lX3RpbWUgPSBmbHhoLT5zcGVlZCAqIEdTVF9NU0VDT05EOwotICAgICAgfQotCi0gICAgICBmbHhkZWMtPmR1cmF0aW9uID0gZmx4aC0+ZnJhbWVzICogZmx4ZGVjLT5mcmFtZV90aW1lOwotICAgICAgR1NUX0xPRyAoImR1cmF0aW9uICAgOiAgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGZseGRlYy0+ZHVyYXRpb24pKTsKLQotICAgICAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoZmx4ZGVjLT5zcmNwYWQpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKHRlbXBsKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLAotICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGZseGgtPndpZHRoLAotICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBmbHhoLT5oZWlnaHQsCi0gICAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAoZ2ludCkgR1NUX01TRUNPTkQsCi0gICAgICAgICAgKGdpbnQpIGZseGRlYy0+ZnJhbWVfdGltZSAvIDEwMDAsIE5VTEwpOwotCi0gICAgICBnc3RfcGFkX3NldF9jYXBzIChmbHhkZWMtPnNyY3BhZCwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICAgIGlmIChmbHhkZWMtPm5lZWRfc2VnbWVudCkgewotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGZseGRlYy0+c3JjcGFkLAotICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZmx4ZGVjLT5zZWdtZW50KSk7Ci0gICAgICAgIGZseGRlYy0+bmVlZF9zZWdtZW50ID0gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHplcm8gbWVhbnMgOCAqLwotICAgICAgaWYgKGZseGgtPmRlcHRoID09IDApCi0gICAgICAgIGZseGgtPmRlcHRoID0gODsKLQotICAgICAgaWYgKGZseGgtPmRlcHRoICE9IDgpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGZseGRlYywgU1RSRUFNLCBXUk9OR19UWVBFLAotICAgICAgICAgICAgKCIlcyIsICJEb24ndCBrbm93IGhvdyB0byBkZWNvZGUgbm9uIDggYml0IGRlcHRoIHN0cmVhbXMiKSwgKE5VTEwpKTsKLSAgICAgICAgZ290byB1bm1hcF9pbnB1dF9lcnJvcjsKLSAgICAgIH0KLQotICAgICAgZmx4ZGVjLT5jb252ZXJ0ZXIgPQotICAgICAgICAgIGZseF9jb2xvcnNwYWNlX2NvbnZlcnRlcl9uZXcgKGZseGgtPndpZHRoLCBmbHhoLT5oZWlnaHQpOwotCi0gICAgICBpZiAoZmx4aC0+dHlwZSA9PSBGTFhfTUFHSUNIRFJfRkxDIHx8IGZseGgtPnR5cGUgPT0gRkxYX01BR0lDSERSX0ZMWCkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKGZseGRlYywgIihGTEMpIGFzcGVjdF9keCA6ICAlZCIsIGZseGgtPmFzcGVjdF9keCk7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmx4ZGVjLCAiKEZMQykgYXNwZWN0X2R5IDogICVkIiwgZmx4aC0+YXNwZWN0X2R5KTsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChmbHhkZWMsICIoRkxDKSBvZnJhbWUxICAgOiAgMHglMDh4IiwgZmx4aC0+b2ZyYW1lMSk7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAoZmx4ZGVjLCAiKEZMQykgb2ZyYW1lMiAgIDogIDB4JTA4eCIsIGZseGgtPm9mcmFtZTIpOwotICAgICAgfQotCi0gICAgICBmbHhkZWMtPnNpemUgPSAoKGd1aW50KSBmbHhoLT53aWR0aCAqIChndWludCkgZmx4aC0+aGVpZ2h0KTsKLSAgICAgIGlmIChmbHhkZWMtPnNpemUgPj0gR19NQVhTSVpFIC8gNCkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmx4ZGVjLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgICAgICgiJXMiLCAiQ2Fubm90IGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeSIpLCAoTlVMTCkpOwotICAgICAgICBnb3RvIHVubWFwX2lucHV0X2Vycm9yOwotICAgICAgfQotCi0gICAgICAvKiBjcmVhdGUgZGVsdGEgYW5kIG91dHB1dCBmcmFtZSAqLwotICAgICAgZmx4ZGVjLT5mcmFtZV9kYXRhID0gZ19tYWxsb2MwIChmbHhkZWMtPnNpemUpOwotICAgICAgZmx4ZGVjLT5kZWx0YV9kYXRhID0gZ19tYWxsb2MwIChmbHhkZWMtPnNpemUpOwotCi0gICAgICBmbHhkZWMtPnN0YXRlID0gR1NUX0ZMWERFQ19QTEFZSU5HOwotICAgIH0KLSAgfSBlbHNlIGlmIChmbHhkZWMtPnN0YXRlID09IEdTVF9GTFhERUNfUExBWUlORykgewotICAgIEdzdEJ1ZmZlciAqb3V0OwotCi0gICAgLyogd2hpbGUgd2UgaGF2ZSBlbm91Z2ggZGF0YSBpbiB0aGUgYWRhcHRlciAqLwotICAgIHdoaWxlIChhdmFpbGFibGUgPj0gRmx4RnJhbWVDaHVua1NpemUgJiYgcmVzID09IEdTVF9GTE9XX09LKSB7Ci0gICAgICBndWludDMyIHNpemU7Ci0gICAgICBndWludDE2IHR5cGU7Ci0KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfbGUgKCZyZWFkZXIsICZzaXplKSkKLSAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICAgIGlmIChhdmFpbGFibGUgPCBzaXplKQotICAgICAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotCi0gICAgICBhdmFpbGFibGUgLT0gc2l6ZTsKLSAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChmbHhkZWMtPmFkYXB0ZXIsIHNpemUpOwotCi0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2xlICgmcmVhZGVyLCAmdHlwZSkpCi0gICAgICAgIGdvdG8gcGFyc2VfZXJyb3I7Ci0KLSAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEZMWF9GUkFNRV9UWVBFOnsKLSAgICAgICAgICBHc3RCeXRlUmVhZGVyIGNodW5rczsKLSAgICAgICAgICBHc3RCeXRlV3JpdGVyIHdyaXRlcjsKLSAgICAgICAgICBndWludDE2IG5fY2h1bmtzOwotICAgICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZseGRlYywgIkhhdmUgZnJhbWUgdHlwZSAweCUwMnggb2Ygc2l6ZSAlZCIsIHR5cGUsCi0gICAgICAgICAgICAgIHNpemUpOwotCi0gICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3N1Yl9yZWFkZXIgKCZyZWFkZXIsICZjaHVua3MsCi0gICAgICAgICAgICAgICAgICBzaXplIC0gRmx4RnJhbWVDaHVua1NpemUpKQotICAgICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLQotICAgICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfbGUgKCZjaHVua3MsICZuX2NodW5rcykpCi0gICAgICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChmbHhkZWMsICJIYXZlICVkIGNodW5rcyIsIG5fY2h1bmtzKTsKLQotICAgICAgICAgIGlmIChuX2NodW5rcyA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJmNodW5rcywgOCkpICAgICAgIC8qIHJlc2VydmVkICovCi0gICAgICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOwotCi0gICAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9kYXRhICgmd3JpdGVyLCBmbHhkZWMtPmZyYW1lX2RhdGEsCi0gICAgICAgICAgICAgIGZseGRlYy0+c2l6ZSwgVFJVRSk7Ci0KLSAgICAgICAgICAvKiBkZWNvZGUgY2h1bmtzICovCi0gICAgICAgICAgaWYgKCFmbHhfZGVjb2RlX2NodW5rcyAoZmx4ZGVjLCBuX2NodW5rcywgJmNodW5rcywgJndyaXRlcikpIHsKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmbHhkZWMsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAgICAgICAgICgiJXMiLCAiQ291bGQgbm90IGRlY29kZSBjaHVuayIpLCBOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gdW5tYXBfaW5wdXRfZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9ieXRlX3dyaXRlcl9yZXNldCAoJndyaXRlcik7Ci0KLSAgICAgICAgICAvKiBzYXZlIGNvcHkgb2YgdGhlIGN1cnJlbnQgZnJhbWUgZm9yIHBvc3NpYmxlIGRlbHRhLiAqLwotICAgICAgICAgIG1lbWNweSAoZmx4ZGVjLT5kZWx0YV9kYXRhLCBmbHhkZWMtPmZyYW1lX2RhdGEsIGZseGRlYy0+c2l6ZSk7Ci0KLSAgICAgICAgICBvdXQgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGZseGRlYy0+c2l6ZSAqIDQpOwotICAgICAgICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAgKG91dCwgJm1hcCwgR1NUX01BUF9XUklURSkpIHsKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChmbHhkZWMsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAgICAgICAgICgiJXMiLCAiQ291bGQgbm90IG1hcCBvdXRwdXQgYnVmZmVyIiksIE5VTEwpOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0KTsKLSAgICAgICAgICAgIGdvdG8gdW5tYXBfaW5wdXRfZXJyb3I7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogY29udmVydCBjdXJyZW50IGZyYW1lLiAqLwotICAgICAgICAgIGZseF9jb2xvcnNwYWNlX2NvbnZlcnQgKGZseGRlYy0+Y29udmVydGVyLCBmbHhkZWMtPmZyYW1lX2RhdGEsCi0gICAgICAgICAgICAgIG1hcC5kYXRhKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChvdXQsICZtYXApOwotCi0gICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dCkgPSBmbHhkZWMtPm5leHRfdGltZTsKLSAgICAgICAgICBmbHhkZWMtPm5leHRfdGltZSArPSBmbHhkZWMtPmZyYW1lX3RpbWU7Ci0KLSAgICAgICAgICByZXMgPSBnc3RfcGFkX3B1c2ggKGZseGRlYy0+c3JjcGFkLCBvdXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmx4ZGVjLCAiVW5rbm93biBmcmFtZSB0eXBlIDB4JTAyeCwgc2tpcHBpbmcgJWQiLAotICAgICAgICAgICAgICB0eXBlLCBzaXplKTsKLSAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmcmVhZGVyLCBzaXplIC0gRmx4RnJhbWVDaHVua1NpemUpKQotICAgICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotbmVlZF9tb3JlX2RhdGE6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGlucHV0LCAmbWFwX2luZm8pOwotICBnc3RfYnVmZmVyX3VucmVmIChpbnB1dCk7Ci0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1wYXJzZV9lcnJvcjoKLSAgR1NUX0VMRU1FTlRfRVJST1IgKGZseGRlYywgU1RSRUFNLCBERUNPREUsCi0gICAgICAoIiVzIiwgIkZhaWxlZCB0byBwYXJzZSBzdHJlYW0iKSwgKE5VTEwpKTsKLXVubWFwX2lucHV0X2Vycm9yOgotICBnc3RfYnVmZmVyX3VubWFwIChpbnB1dCwgJm1hcF9pbmZvKTsKLWVycm9yOgotICBnc3RfYnVmZmVyX3VucmVmIChpbnB1dCk7Ci0gIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfZmx4ZGVjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdEZseERlYyAqZmx4ZGVjOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgZmx4ZGVjID0gR1NUX0ZMWERFQyAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGZseGRlYy0+YWRhcHRlcik7Ci0gICAgICBmbHhkZWMtPnN0YXRlID0gR1NUX0ZMWERFQ19SRUFEX0hFQURFUjsKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZmbHhkZWMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIGZseGRlYy0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBpZiAoZmx4ZGVjLT5mcmFtZV9kYXRhKSB7Ci0gICAgICAgIGdfZnJlZSAoZmx4ZGVjLT5mcmFtZV9kYXRhKTsKLSAgICAgICAgZmx4ZGVjLT5mcmFtZV9kYXRhID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGlmIChmbHhkZWMtPmRlbHRhX2RhdGEpIHsKLSAgICAgICAgZ19mcmVlIChmbHhkZWMtPmRlbHRhX2RhdGEpOwotICAgICAgICBmbHhkZWMtPmRlbHRhX2RhdGEgPSBOVUxMOwotICAgICAgfQotICAgICAgaWYgKGZseGRlYy0+Y29udmVydGVyKSB7Ci0gICAgICAgIGZseF9jb2xvcnNwYWNlX2NvbnZlcnRlcl9kZXN0cm95IChmbHhkZWMtPmNvbnZlcnRlcik7Ci0gICAgICAgIGZseGRlYy0+Y29udmVydGVyID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJmbHhkZWMiLAotICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfRkxYREVDKTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGZseGRlYywKLSAgICAiRkxDL0ZMSS9GTFggdmlkZW8gZGVjb2RlciIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvZmx4L2dzdGZseGRlYy5oIGIvZ3N0L2ZseC9nc3RmbHhkZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0ODZhMC4uMDAwMDAwMAotLS0gYS9nc3QvZmx4L2dzdGZseGRlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfRkxYX0RFQ09ERVJfSF9fCi0jZGVmaW5lIF9fR1NUX0ZMWF9ERUNPREVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRld3JpdGVyLmg+Ci0jaW5jbHVkZSAiZmx4X2NvbG9yLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0ZMWERFQ19SRUFEX0hFQURFUiwKLSAgR1NUX0ZMWERFQ19QTEFZSU5HLAotfSBHc3RGbHhEZWNTdGF0ZTsKLQkKLQotLyogRGVmaW5pdGlvbiBvZiBzdHJ1Y3R1cmUgc3RvcmluZyBkYXRhIGZvciB0aGlzIGVsZW1lbnQuICovCi10eXBlZGVmIHN0cnVjdCBfR3N0Rmx4RGVjICBHc3RGbHhEZWM7Ci0KLXN0cnVjdCBfR3N0Rmx4RGVjIHsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLQotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdib29sZWFuIG5lZWRfc2VnbWVudDsKLQotICBnYm9vbGVhbiBhY3RpdmUsIG5ld19tZXRhOwotCi0gIGd1aW50OCAqZGVsdGFfZGF0YSwgKmZyYW1lX2RhdGE7Ci0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGdzaXplIHNpemU7Ci0gIEdzdEZseERlY1N0YXRlIHN0YXRlOwotICBnaW50NjQgZnJhbWVfdGltZTsKLSAgZ2ludDY0IG5leHRfdGltZTsKLSAgZ2ludDY0IGR1cmF0aW9uOwotCi0gIEZseENvbG9yU3BhY2VDb252ZXJ0ZXIgKmNvbnZlcnRlcjsKLQotICBGbHhIZWFkZXIgaGRyOwotfTsKLQotLyogU3RhbmRhcmQgZGVmaW5pdGlvbiBkZWZpbmluZyBhIGNsYXNzIGZvciB0aGlzIGVsZW1lbnQuICovCi10eXBlZGVmIHN0cnVjdCBfR3N0Rmx4RGVjQ2xhc3MgR3N0Rmx4RGVjQ2xhc3M7Ci1zdHJ1Y3QgX0dzdEZseERlY0NsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLS8qIFN0YW5kYXJkIG1hY3JvcyBmb3IgZGVmaW5pbmcgdHlwZXMgZm9yIHRoaXMgZWxlbWVudC4gICovCi0jZGVmaW5lIEdTVF9UWVBFX0ZMWERFQyBcCi0gIChnc3RfZmx4ZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9GTFhERUMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9GTFhERUMsR3N0Rmx4RGVjKSkKLSNkZWZpbmUgR1NUX0ZMWERFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9GTFhERUMsR3N0Rmx4RGVjQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRkxYREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRkxYREVDKSkKLSNkZWZpbmUgR1NUX0lTX0ZMWERFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9GTFhERUMpKQotCi0vKiBTdGFuZGFyZCBmdW5jdGlvbiByZXR1cm5pbmcgdHlwZSBpbmZvcm1hdGlvbi4gKi8KLUdUeXBlIGdzdF9mbHhkZWNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9GTFhfREVDT0RFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9nb29tL01ha2VmaWxlLmFtIGIvZ3N0L2dvb20vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODE3MmYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0KLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGdvb20ubGEKLQotUFBDX0ZJTEVTPXBwY196b29tX3VsdGltYXRlLnMgcHBjX2RyYXdpbmdzLnMgcHBjX2RyYXdpbmdzLmggcHBjX3pvb21fdWx0aW1hdGUuaAotTU1YX0ZJTEVTPW1teC5jIHhtbXguYyBtbXguaCB4bW14LmgKLQotaWYgSEFWRV9DUFVfUFBDCi0jIGRpc2FibGUgdW50aWwgc29tZW9uZSBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgdGhlc2UgY29ycmVjdGx5IG9uIHBwYwotI0FSQ0hfRklMRVMgPSAkKFBQQ19GSUxFUykKLUFSQ0hfRklMRVMgPQotZW5kaWYKLWlmIEhBVkVfQ1BVX1BQQzY0Ci0jIGRpc2FibGUgdW50aWwgc29tZW9uZSBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgdGhlc2UgY29ycmVjdGx5IG9uIHBwYwotI0FSQ0hfRklMRVMgPSAkKFBQQ19GSUxFUykKLUFSQ0hfRklMRVMgPQotZW5kaWYKLWlmIEhBVkVfQ1BVX0kzODYKLUFSQ0hfRklMRVMgPSAkKE1NWF9GSUxFUykKLUFSQ0hfQ0ZMQUdTID0gLURCVUlMRF9NTVgKLWVuZGlmCi0JCQkJCi1saWJnc3Rnb29tX2xhX1NPVVJDRVMgPQkJCQkJCVwKLQlnc3Rnb29tLmMgZ3N0Z29vbS5oCQkJCQlcCi0JZHJhd21ldGhvZHMuYyBkcmF3bWV0aG9kcy5oCQkJCVwKLQlzb3VuZF90ZXN0ZXIuYyBzb3VuZF90ZXN0ZXIuaAkJCQlcCi0JbWF0aHRvb2xzLmMgbWF0aHRvb2xzLmgJCQkJCVwKLQlsaW5lcy5jIGxpbmVzLmggaWZzLmMgaWZzLmggc3VyZjNkLmMgc3VyZjNkLmgJCVwKLQl0ZW50YWNsZTNkLmMgdGVudGFjbGUzZC5oIHYzZC5jIHYzZC5oCQkJXAotCWNvbnZvbHZlX2Z4LmMgZmx5aW5nX3N0YXJzX2Z4LmMJCQkJXAotCWdvb21fZnguaCBnb29tX3Zpc3VhbF9meC5oCQkJCVwKLQltb3RpZl9nb29tMS5oIG1vdGlmX2dvb20yLmgJCQkJXAotCXBsdWdpbl9pbmZvLmMgZ29vbV9wbHVnaW5faW5mby5oCQkJXAotCWdvb21fdG9vbHMuYwkJCQkJCVwKLQljb25maWdfcGFyYW0uYyBmaWx0ZXJzLmMgZ29vbV9jb3JlLmMgZ3JhcGhpYy5jCQlcCi0JZ29vbS5oIGdvb21fdHlwZWRlZnMuaCBnb29tX2dyYXBoaWMuaAkJCVwKLQlnb29tX2NvbmZpZ19wYXJhbS5oIGdvb21fdmlzdWFsX2Z4LmggZ29vbV9maWx0ZXJzLmgJXAotCWdvb21fdG9vbHMuaCBnb29tX3Rvb2xzLmggZ29vbV9jb25maWcuaAkJCVwKLQkkKEFSQ0hfRklMRVMpCi0KLWxpYmdzdGdvb21fbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHT09NX0ZJTFRFUl9DRkxBR1MpICQoQVJDSF9DRkxBR1MpICQoT1JDX0NGTEFHUykKLWxpYmdzdGdvb21fbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cGJ1dGlscy0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKExJQk0pICQoT1JDX0xJQlMpCi1saWJnc3Rnb29tX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotRVhUUkFfRElTVCA9ICQoUFBDX0ZJTEVTKSAkKE1NWF9GSUxFUykKLQotLk5PVFBBUkFMTEVMOgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vTWFrZWZpbGUuaW4gYi9nc3QvZ29vbS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM1N2VhZi4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDExMDIgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9nb29tCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3Rnb29tX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fX2xpYmdzdGdvb21fbGFfU09VUkNFU19ESVNUID0gZ3N0Z29vbS5jIGdzdGdvb20uaCBkcmF3bWV0aG9kcy5jIFwKLQlkcmF3bWV0aG9kcy5oIHNvdW5kX3Rlc3Rlci5jIHNvdW5kX3Rlc3Rlci5oIG1hdGh0b29scy5jIFwKLQltYXRodG9vbHMuaCBsaW5lcy5jIGxpbmVzLmggaWZzLmMgaWZzLmggc3VyZjNkLmMgc3VyZjNkLmggXAotCXRlbnRhY2xlM2QuYyB0ZW50YWNsZTNkLmggdjNkLmMgdjNkLmggY29udm9sdmVfZnguYyBcCi0JZmx5aW5nX3N0YXJzX2Z4LmMgZ29vbV9meC5oIGdvb21fdmlzdWFsX2Z4LmggbW90aWZfZ29vbTEuaCBcCi0JbW90aWZfZ29vbTIuaCBwbHVnaW5faW5mby5jIGdvb21fcGx1Z2luX2luZm8uaCBnb29tX3Rvb2xzLmMgXAotCWNvbmZpZ19wYXJhbS5jIGZpbHRlcnMuYyBnb29tX2NvcmUuYyBncmFwaGljLmMgZ29vbS5oIFwKLQlnb29tX3R5cGVkZWZzLmggZ29vbV9ncmFwaGljLmggZ29vbV9jb25maWdfcGFyYW0uaCBcCi0JZ29vbV9maWx0ZXJzLmggZ29vbV90b29scy5oIGdvb21fY29uZmlnLmggbW14LmMgeG1teC5jIG1teC5oIFwKLQl4bW14LmgKLWFtX19vYmplY3RzXzEgPSBsaWJnc3Rnb29tX2xhLW1teC5sbyBsaWJnc3Rnb29tX2xhLXhtbXgubG8KLUBIQVZFX0NQVV9JMzg2X1RSVUVAYW1fX29iamVjdHNfMiA9ICQoYW1fX29iamVjdHNfMSkKLWFtX2xpYmdzdGdvb21fbGFfT0JKRUNUUyA9IGxpYmdzdGdvb21fbGEtZ3N0Z29vbS5sbyBcCi0JbGliZ3N0Z29vbV9sYS1kcmF3bWV0aG9kcy5sbyBsaWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5sbyBcCi0JbGliZ3N0Z29vbV9sYS1tYXRodG9vbHMubG8gbGliZ3N0Z29vbV9sYS1saW5lcy5sbyBcCi0JbGliZ3N0Z29vbV9sYS1pZnMubG8gbGliZ3N0Z29vbV9sYS1zdXJmM2QubG8gXAotCWxpYmdzdGdvb21fbGEtdGVudGFjbGUzZC5sbyBsaWJnc3Rnb29tX2xhLXYzZC5sbyBcCi0JbGliZ3N0Z29vbV9sYS1jb252b2x2ZV9meC5sbyBsaWJnc3Rnb29tX2xhLWZseWluZ19zdGFyc19meC5sbyBcCi0JbGliZ3N0Z29vbV9sYS1wbHVnaW5faW5mby5sbyBsaWJnc3Rnb29tX2xhLWdvb21fdG9vbHMubG8gXAotCWxpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLmxvIGxpYmdzdGdvb21fbGEtZmlsdGVycy5sbyBcCi0JbGliZ3N0Z29vbV9sYS1nb29tX2NvcmUubG8gbGliZ3N0Z29vbV9sYS1ncmFwaGljLmxvIFwKLQkkKGFtX19vYmplY3RzXzIpCi1saWJnc3Rnb29tX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGdvb21fbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGdvb21fbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3Rnb29tX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGdvb21fbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoYW1fX2xpYmdzdGdvb21fbGFfU09VUkNFU19ESVNUKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGdvb20ubGEKLVBQQ19GSUxFUyA9IHBwY196b29tX3VsdGltYXRlLnMgcHBjX2RyYXdpbmdzLnMgcHBjX2RyYXdpbmdzLmggcHBjX3pvb21fdWx0aW1hdGUuaAotTU1YX0ZJTEVTID0gbW14LmMgeG1teC5jIG1teC5oIHhtbXguaAotQEhBVkVfQ1BVX0kzODZfVFJVRUBBUkNIX0ZJTEVTID0gJChNTVhfRklMRVMpCi0jIGRpc2FibGUgdW50aWwgc29tZW9uZSBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgdGhlc2UgY29ycmVjdGx5IG9uIHBwYwotI0FSQ0hfRklMRVMgPSAkKFBQQ19GSUxFUykKLUBIQVZFX0NQVV9QUEM2NF9UUlVFQEFSQ0hfRklMRVMgPSAKLQotIyBkaXNhYmxlIHVudGlsIHNvbWVvbmUgZmlndXJlcyBvdXQgaG93IHRvIGJ1aWxkIHRoZXNlIGNvcnJlY3RseSBvbiBwcGMKLSNBUkNIX0ZJTEVTID0gJChQUENfRklMRVMpCi1ASEFWRV9DUFVfUFBDX1RSVUVAQVJDSF9GSUxFUyA9IAotQEhBVkVfQ1BVX0kzODZfVFJVRUBBUkNIX0NGTEFHUyA9IC1EQlVJTERfTU1YCi1saWJnc3Rnb29tX2xhX1NPVVJDRVMgPSBcCi0JZ3N0Z29vbS5jIGdzdGdvb20uaAkJCQkJXAotCWRyYXdtZXRob2RzLmMgZHJhd21ldGhvZHMuaAkJCQlcCi0Jc291bmRfdGVzdGVyLmMgc291bmRfdGVzdGVyLmgJCQkJXAotCW1hdGh0b29scy5jIG1hdGh0b29scy5oCQkJCQlcCi0JbGluZXMuYyBsaW5lcy5oIGlmcy5jIGlmcy5oIHN1cmYzZC5jIHN1cmYzZC5oCQlcCi0JdGVudGFjbGUzZC5jIHRlbnRhY2xlM2QuaCB2M2QuYyB2M2QuaAkJCVwKLQljb252b2x2ZV9meC5jIGZseWluZ19zdGFyc19meC5jCQkJCVwKLQlnb29tX2Z4LmggZ29vbV92aXN1YWxfZnguaAkJCQlcCi0JbW90aWZfZ29vbTEuaCBtb3RpZl9nb29tMi5oCQkJCVwKLQlwbHVnaW5faW5mby5jIGdvb21fcGx1Z2luX2luZm8uaAkJCVwKLQlnb29tX3Rvb2xzLmMJCQkJCQlcCi0JY29uZmlnX3BhcmFtLmMgZmlsdGVycy5jIGdvb21fY29yZS5jIGdyYXBoaWMuYwkJXAotCWdvb20uaCBnb29tX3R5cGVkZWZzLmggZ29vbV9ncmFwaGljLmgJCQlcCi0JZ29vbV9jb25maWdfcGFyYW0uaCBnb29tX3Zpc3VhbF9meC5oIGdvb21fZmlsdGVycy5oCVwKLQlnb29tX3Rvb2xzLmggZ29vbV90b29scy5oIGdvb21fY29uZmlnLmgJCQlcCi0JJChBUkNIX0ZJTEVTKQotCi1saWJnc3Rnb29tX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoR09PTV9GSUxURVJfQ0ZMQUdTKSAkKEFSQ0hfQ0ZMQUdTKSAkKE9SQ19DRkxBR1MpCi1saWJnc3Rnb29tX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJNKSAkKE9SQ19MSUJTKQotbGliZ3N0Z29vbV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1FWFRSQV9ESVNUID0gJChQUENfRklMRVMpICQoTU1YX0ZJTEVTKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2dvb20vTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2dvb20vTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3Rnb29tLmxhOiAkKGxpYmdzdGdvb21fbGFfT0JKRUNUUykgJChsaWJnc3Rnb29tX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3Rnb29tX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3Rnb29tX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3Rnb29tX2xhX09CSkVDVFMpICQobGliZ3N0Z29vbV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS1jb252b2x2ZV9meC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb21fbGEtZHJhd21ldGhvZHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rnb29tX2xhLWZpbHRlcnMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rnb29tX2xhLWZseWluZ19zdGFyc19meC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb21fbGEtZ29vbV9jb3JlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS1nb29tX3Rvb2xzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS1ncmFwaGljLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS1nc3Rnb29tLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS1pZnMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rnb29tX2xhLWxpbmVzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS1tYXRodG9vbHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rnb29tX2xhLW1teC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb21fbGEtcGx1Z2luX2luZm8uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb21fbGEtc3VyZjNkLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS10ZW50YWNsZTNkLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbV9sYS12M2QuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rnb29tX2xhLXhtbXguUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGdvb21fbGEtZ3N0Z29vbS5sbzogZ3N0Z29vbS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rnb29tX2xhLWdzdGdvb20ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtZ3N0Z29vbS5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS1nc3Rnb29tLmxvIGB0ZXN0IC1mICdnc3Rnb29tLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdvb20uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1nc3Rnb29tLlRwbyAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1nc3Rnb29tLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGdvb20uYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLWdzdGdvb20ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z29vbV9sYS1nc3Rnb29tLmxvIGB0ZXN0IC1mICdnc3Rnb29tLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGdvb20uYwotCi1saWJnc3Rnb29tX2xhLWRyYXdtZXRob2RzLmxvOiBkcmF3bWV0aG9kcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rnb29tX2xhLWRyYXdtZXRob2RzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWRyYXdtZXRob2RzLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWRyYXdtZXRob2RzLmxvIGB0ZXN0IC1mICdkcmF3bWV0aG9kcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkcmF3bWV0aG9kcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWRyYXdtZXRob2RzLlRwbyAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1kcmF3bWV0aG9kcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkcmF3bWV0aG9kcy5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtZHJhd21ldGhvZHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z29vbV9sYS1kcmF3bWV0aG9kcy5sbyBgdGVzdCAtZiAnZHJhd21ldGhvZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZHJhd21ldGhvZHMuYwotCi1saWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5sbzogc291bmRfdGVzdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtc291bmRfdGVzdGVyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS1zb3VuZF90ZXN0ZXIubG8gYHRlc3QgLWYgJ3NvdW5kX3Rlc3Rlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bzb3VuZF90ZXN0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1zb3VuZF90ZXN0ZXIuVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzb3VuZF90ZXN0ZXIuYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLXNvdW5kX3Rlc3Rlci5sbyBgdGVzdCAtZiAnc291bmRfdGVzdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNvdW5kX3Rlc3Rlci5jCi0KLWxpYmdzdGdvb21fbGEtbWF0aHRvb2xzLmxvOiBtYXRodG9vbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1tYXRodG9vbHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtbWF0aHRvb2xzLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLW1hdGh0b29scy5sbyBgdGVzdCAtZiAnbWF0aHRvb2xzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hdGh0b29scy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLW1hdGh0b29scy5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtbWF0aHRvb2xzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21hdGh0b29scy5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtbWF0aHRvb2xzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtbWF0aHRvb2xzLmxvIGB0ZXN0IC1mICdtYXRodG9vbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWF0aHRvb2xzLmMKLQotbGliZ3N0Z29vbV9sYS1saW5lcy5sbzogbGluZXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1saW5lcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1saW5lcy5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS1saW5lcy5sbyBgdGVzdCAtZiAnbGluZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGluZXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1saW5lcy5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtbGluZXMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbGluZXMuYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLWxpbmVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtbGluZXMubG8gYHRlc3QgLWYgJ2xpbmVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGxpbmVzLmMKLQotbGliZ3N0Z29vbV9sYS1pZnMubG86IGlmcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rnb29tX2xhLWlmcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1pZnMuVHBvIC1jIC1vIGxpYmdzdGdvb21fbGEtaWZzLmxvIGB0ZXN0IC1mICdpZnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgaWZzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGdvb21fbGEtaWZzLlRwbyAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1pZnMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naWZzLmMnIG9iamVjdD0nbGliZ3N0Z29vbV9sYS1pZnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z29vbV9sYS1pZnMubG8gYHRlc3QgLWYgJ2lmcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpZnMuYwotCi1saWJnc3Rnb29tX2xhLXN1cmYzZC5sbzogc3VyZjNkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtc3VyZjNkLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXN1cmYzZC5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS1zdXJmM2QubG8gYHRlc3QgLWYgJ3N1cmYzZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzdXJmM2QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1zdXJmM2QuVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXN1cmYzZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzdXJmM2QuYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLXN1cmYzZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLXN1cmYzZC5sbyBgdGVzdCAtZiAnc3VyZjNkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHN1cmYzZC5jCi0KLWxpYmdzdGdvb21fbGEtdGVudGFjbGUzZC5sbzogdGVudGFjbGUzZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rnb29tX2xhLXRlbnRhY2xlM2QubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtdGVudGFjbGUzZC5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS10ZW50YWNsZTNkLmxvIGB0ZXN0IC1mICd0ZW50YWNsZTNkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlbnRhY2xlM2QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS10ZW50YWNsZTNkLlRwbyAkKERFUERJUikvbGliZ3N0Z29vbV9sYS10ZW50YWNsZTNkLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RlbnRhY2xlM2QuYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLXRlbnRhY2xlM2QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z29vbV9sYS10ZW50YWNsZTNkLmxvIGB0ZXN0IC1mICd0ZW50YWNsZTNkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlbnRhY2xlM2QuYwotCi1saWJnc3Rnb29tX2xhLXYzZC5sbzogdjNkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtdjNkLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXYzZC5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS12M2QubG8gYHRlc3QgLWYgJ3YzZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2M2QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS12M2QuVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXYzZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2M2QuYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLXYzZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLXYzZC5sbyBgdGVzdCAtZiAndjNkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHYzZC5jCi0KLWxpYmdzdGdvb21fbGEtY29udm9sdmVfZngubG86IGNvbnZvbHZlX2Z4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtY29udm9sdmVfZngubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtY29udm9sdmVfZnguVHBvIC1jIC1vIGxpYmdzdGdvb21fbGEtY29udm9sdmVfZngubG8gYHRlc3QgLWYgJ2NvbnZvbHZlX2Z4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbnZvbHZlX2Z4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGdvb21fbGEtY29udm9sdmVfZnguVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWNvbnZvbHZlX2Z4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbnZvbHZlX2Z4LmMnIG9iamVjdD0nbGliZ3N0Z29vbV9sYS1jb252b2x2ZV9meC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLWNvbnZvbHZlX2Z4LmxvIGB0ZXN0IC1mICdjb252b2x2ZV9meC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb252b2x2ZV9meC5jCi0KLWxpYmdzdGdvb21fbGEtZmx5aW5nX3N0YXJzX2Z4LmxvOiBmbHlpbmdfc3RhcnNfZnguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1mbHlpbmdfc3RhcnNfZngubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtZmx5aW5nX3N0YXJzX2Z4LlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWZseWluZ19zdGFyc19meC5sbyBgdGVzdCAtZiAnZmx5aW5nX3N0YXJzX2Z4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGZseWluZ19zdGFyc19meC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWZseWluZ19zdGFyc19meC5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtZmx5aW5nX3N0YXJzX2Z4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2ZseWluZ19zdGFyc19meC5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtZmx5aW5nX3N0YXJzX2Z4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtZmx5aW5nX3N0YXJzX2Z4LmxvIGB0ZXN0IC1mICdmbHlpbmdfc3RhcnNfZnguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmx5aW5nX3N0YXJzX2Z4LmMKLQotbGliZ3N0Z29vbV9sYS1wbHVnaW5faW5mby5sbzogcGx1Z2luX2luZm8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1wbHVnaW5faW5mby5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1wbHVnaW5faW5mby5UcG8gLWMgLW8gbGliZ3N0Z29vbV9sYS1wbHVnaW5faW5mby5sbyBgdGVzdCAtZiAncGx1Z2luX2luZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGx1Z2luX2luZm8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1wbHVnaW5faW5mby5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtcGx1Z2luX2luZm8uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncGx1Z2luX2luZm8uYycgb2JqZWN0PSdsaWJnc3Rnb29tX2xhLXBsdWdpbl9pbmZvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtcGx1Z2luX2luZm8ubG8gYHRlc3QgLWYgJ3BsdWdpbl9pbmZvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBsdWdpbl9pbmZvLmMKLQotbGliZ3N0Z29vbV9sYS1nb29tX3Rvb2xzLmxvOiBnb29tX3Rvb2xzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtZ29vbV90b29scy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1nb29tX3Rvb2xzLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWdvb21fdG9vbHMubG8gYHRlc3QgLWYgJ2dvb21fdG9vbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ29vbV90b29scy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWdvb21fdG9vbHMuVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWdvb21fdG9vbHMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ29vbV90b29scy5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtZ29vbV90b29scy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLWdvb21fdG9vbHMubG8gYHRlc3QgLWYgJ2dvb21fdG9vbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ29vbV90b29scy5jCi0KLWxpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLmxvOiBjb25maWdfcGFyYW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1jb25maWdfcGFyYW0ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWNvbmZpZ19wYXJhbS5sbyBgdGVzdCAtZiAnY29uZmlnX3BhcmFtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbmZpZ19wYXJhbS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWNvbmZpZ19wYXJhbS5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbmZpZ19wYXJhbS5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtY29uZmlnX3BhcmFtLmxvIGB0ZXN0IC1mICdjb25maWdfcGFyYW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29uZmlnX3BhcmFtLmMKLQotbGliZ3N0Z29vbV9sYS1maWx0ZXJzLmxvOiBmaWx0ZXJzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtZmlsdGVycy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1maWx0ZXJzLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWZpbHRlcnMubG8gYHRlc3QgLWYgJ2ZpbHRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlsdGVycy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWZpbHRlcnMuVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWZpbHRlcnMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZmlsdGVycy5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtZmlsdGVycy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLWZpbHRlcnMubG8gYHRlc3QgLWYgJ2ZpbHRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlsdGVycy5jCi0KLWxpYmdzdGdvb21fbGEtZ29vbV9jb3JlLmxvOiBnb29tX2NvcmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1nb29tX2NvcmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtZ29vbV9jb3JlLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWdvb21fY29yZS5sbyBgdGVzdCAtZiAnZ29vbV9jb3JlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdvb21fY29yZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWdvb21fY29yZS5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtZ29vbV9jb3JlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dvb21fY29yZS5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtZ29vbV9jb3JlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtZ29vbV9jb3JlLmxvIGB0ZXN0IC1mICdnb29tX2NvcmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ29vbV9jb3JlLmMKLQotbGliZ3N0Z29vbV9sYS1ncmFwaGljLmxvOiBncmFwaGljLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEtZ3JhcGhpYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS1ncmFwaGljLlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLWdyYXBoaWMubG8gYHRlc3QgLWYgJ2dyYXBoaWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3JhcGhpYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWdyYXBoaWMuVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLWdyYXBoaWMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3JhcGhpYy5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtZ3JhcGhpYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLWdyYXBoaWMubG8gYHRlc3QgLWYgJ2dyYXBoaWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3JhcGhpYy5jCi0KLWxpYmdzdGdvb21fbGEtbW14LmxvOiBtbXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbV9sYS1tbXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb21fbGEtbW14LlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLW1teC5sbyBgdGVzdCAtZiAnbW14LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1teC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLW1teC5UcG8gJChERVBESVIpL2xpYmdzdGdvb21fbGEtbW14LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21teC5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEtbW14LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb21fbGEtbW14LmxvIGB0ZXN0IC1mICdtbXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgbW14LmMKLQotbGliZ3N0Z29vbV9sYS14bW14LmxvOiB4bW14LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb21fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb21fbGEteG1teC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbV9sYS14bW14LlRwbyAtYyAtbyBsaWJnc3Rnb29tX2xhLXhtbXgubG8gYHRlc3QgLWYgJ3htbXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgeG1teC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXhtbXguVHBvICQoREVQRElSKS9saWJnc3Rnb29tX2xhLXhtbXguUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0neG1teC5jJyBvYmplY3Q9J2xpYmdzdGdvb21fbGEteG1teC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb21fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tX2xhLXhtbXgubG8gYHRlc3QgLWYgJ3htbXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgeG1teC5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0uTk9UUEFSQUxMRUw6Ci0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9nb29tL1JFQURNRSBiL2dzdC9nb29tL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhhZjJiYS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1UaGUgR29vbSBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIEdvb20gdmlzdWFsaXphdGlvbiBjb2RlIGZyb20KLXRoZSBHb29tIGhvbWVwYWdlIGZvdW5kIGF0OiAKLWh0dHA6Ly9pb3MuZnJlZS5mci8/cGFnZT1wcm9qZXQmcXVvaT0xIAotCi1MaWtlIHRoZSBvcmlnaW5hbCBsaWJyYXJ5IHNvIGlzIHRoZSBHb29tIHBsdWdpbiBhdmFpbGFibGUgdW5kZXIgdGhlIExHUEwgbGljZW5zZQotCi1UaGlzIGlzIGJhc2VkIG9uIGdvb20yazQgd2l0aCBjaGFuZ2VzIHRvIHBsdWdpbl9pbmZvLmMgYW5kIG1teC5oIHRvIHVzZSBPcmMgZm9yIENQVQotZGV0ZWN0aW9uIGFuZCBHU3RyZWFtZXItc3BlY2lmaWMgaWZkZWYncyBmb3IgYXJjaGl0ZWN0dXJlIGRldGVjdGlvbi4KLQotVGhlc2UgZmlsZXMgYXJlIG5vdCBpbiB1c2UgcmlnaHQgbm93OgotZmlsdGVyc19tbXgucwotZ29vbXNsKgotc3VyZjNkLnMKZGlmZiAtLWdpdCBhL2dzdC9nb29tL2NvbmZpZ19wYXJhbS5jIGIvZ3N0L2dvb20vY29uZmlnX3BhcmFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMTI3N2YuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vY29uZmlnX3BhcmFtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBKZWFuLUNocmlzdG9waGUgSG9lbHQgPGpla29AZnJlZS5mcj4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiZ29vbV9jb25maWdfcGFyYW0uaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIHZvaWQKLWVtcHR5X2ZjdCAoUGx1Z2luUGFyYW0gKiBkdW1teSkKLXsKLX0KLQotdm9pZAotZ29vbV9zZWN1cmVfcGFyYW0gKFBsdWdpblBhcmFtICogcCkKLXsKLSAgcC0+Y2hhbmdlZCA9IGVtcHR5X2ZjdDsKLSAgcC0+Y2hhbmdlX2xpc3RlbmVyID0gZW1wdHlfZmN0OwotICBwLT51c2VyX2RhdGEgPSAwOwotICBwLT5uYW1lID0gcC0+ZGVzYyA9IDA7Ci0gIHAtPnJ3ID0gMTsKLX0KLQotdm9pZAotZ29vbV9zZWN1cmVfZl9wYXJhbSAoUGx1Z2luUGFyYW0gKiBwLCBjb25zdCBjaGFyICpuYW1lKQotewotICBzZWN1cmVfcGFyYW0gKHApOwotCi0gIHAtPm5hbWUgPSBuYW1lOwotICBwLT50eXBlID0gUEFSQU1fRkxPQVRWQUw7Ci0gIEZWQUwgKCpwKSA9IDAuNWY7Ci0gIEZNSU4gKCpwKSA9IDAuMGY7Ci0gIEZNQVggKCpwKSA9IDEuMGY7Ci0gIEZTVEVQICgqcCkgPSAwLjAxZjsKLX0KLQotdm9pZAotZ29vbV9zZWN1cmVfZl9mZWVkYmFjayAoUGx1Z2luUGFyYW0gKiBwLCBjb25zdCBjaGFyICpuYW1lKQotewotICBzZWN1cmVfZl9wYXJhbSAocCwgbmFtZSk7Ci0KLSAgcC0+cncgPSAwOwotfQotCi12b2lkCi1nb29tX3NlY3VyZV9zX3BhcmFtIChQbHVnaW5QYXJhbSAqIHAsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIHNlY3VyZV9wYXJhbSAocCk7Ci0KLSAgcC0+bmFtZSA9IG5hbWU7Ci0gIHAtPnR5cGUgPSBQQVJBTV9TVFJWQUw7Ci0gIFNWQUwgKCpwKSA9IDA7Ci19Ci0KLXZvaWQKLWdvb21fc2VjdXJlX2JfcGFyYW0gKFBsdWdpblBhcmFtICogcCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQotewotICBzZWN1cmVfcGFyYW0gKHApOwotCi0gIHAtPm5hbWUgPSBuYW1lOwotICBwLT50eXBlID0gUEFSQU1fQk9PTFZBTDsKLSAgQlZBTCAoKnApID0gdmFsdWU7Ci19Ci0KLXZvaWQKLWdvb21fc2VjdXJlX2lfcGFyYW0gKFBsdWdpblBhcmFtICogcCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgc2VjdXJlX3BhcmFtIChwKTsKLQotICBwLT5uYW1lID0gbmFtZTsKLSAgcC0+dHlwZSA9IFBBUkFNX0lOVFZBTDsKLSAgSVZBTCAoKnApID0gNTA7Ci0gIElNSU4gKCpwKSA9IDA7Ci0gIElNQVggKCpwKSA9IDEwMDsKLSAgSVNURVAgKCpwKSA9IDE7Ci19Ci0KLXZvaWQKLWdvb21fc2VjdXJlX2lfZmVlZGJhY2sgKFBsdWdpblBhcmFtICogcCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgc2VjdXJlX2lfcGFyYW0gKHAsIG5hbWUpOwotCi0gIHAtPnJ3ID0gMDsKLX0KLQotdm9pZAotZ29vbV9wbHVnaW5fcGFyYW1ldGVycyAoUGx1Z2luUGFyYW1ldGVycyAqIHAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYikKLXsKLSAgcC0+bmFtZSA9IG5hbWU7Ci0gIHAtPmRlc2MgPSAiIjsKLSAgcC0+bmJQYXJhbXMgPSBuYjsKLSAgcC0+cGFyYW1zID0gbWFsbG9jIChuYiAqIHNpemVvZiAoUGx1Z2luUGFyYW0gKikpOwotfQotCi12b2lkCi1nb29tX3BsdWdpbl9wYXJhbWV0ZXJzX2ZyZWUgKFBsdWdpblBhcmFtZXRlcnMgKiBwKQotewotICBmcmVlIChwLT5wYXJhbXMpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQKLWdvb21fc2V0X3N0cl9wYXJhbV92YWx1ZSAoUGx1Z2luUGFyYW0gKiBwLCBjb25zdCBjaGFyICpzdHIpCi17Ci0gIGludCBsZW4gPSBzdHJsZW4gKHN0cik7Ci0KLSAgaWYgKFNWQUwgKCpwKSkKLSAgICBTVkFMICgqcCkgPSAoY2hhciAqKSByZWFsbG9jIChTVkFMICgqcCksIGxlbiArIDEpOwotICBlbHNlCi0gICAgU1ZBTCAoKnApID0gKGNoYXIgKikgbWFsbG9jIChsZW4gKyAxKTsKLSAgbWVtY3B5IChTVkFMICgqcCksIHN0ciwgbGVuICsgMSk7Ci19Ci0KLXZvaWQKLWdvb21fc2V0X2xpc3RfcGFyYW1fdmFsdWUgKFBsdWdpblBhcmFtICogcCwgY29uc3QgY2hhciAqc3RyKQotewotICBpbnQgbGVuID0gc3RybGVuIChzdHIpOwotCi0jaWZkZWYgVkVSQk9TRQotICBwcmludGYgKCIlczogJWRcbiIsIHN0ciwgbGVuKTsKLSNlbmRpZgotICBpZiAoTFZBTCAoKnApKQotICAgIExWQUwgKCpwKSA9IChjaGFyICopIHJlYWxsb2MgKExWQUwgKCpwKSwgbGVuICsgMSk7Ci0gIGVsc2UKLSAgICBMVkFMICgqcCkgPSAoY2hhciAqKSBtYWxsb2MgKGxlbiArIDEpOwotICBtZW1jcHkgKExWQUwgKCpwKSwgc3RyLCBsZW4gKyAxKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nb29tL2NvbnZvbHZlX2Z4LmMgYi9nc3QvZ29vbS9jb252b2x2ZV9meC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODBlMTEzLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL2NvbnZvbHZlX2Z4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgImdvb21fZnguaCIKLSNpbmNsdWRlICJnb29tX3BsdWdpbl9pbmZvLmgiCi0jaW5jbHVkZSAiZ29vbV9jb25maWcuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLy8jZGVmaW5lIENPTlZfTU9USUZfVyAzMgotLy8jZGVmaW5lIENPTlZfTU9USUZfV01BU0sgMHgxZgotCi0vKiBEZWZpbmUgaWYgeW91IGxpa2UgdGhlIHdhY2t5IEdPT00gbG9nbzogKi8KLSN1bmRlZiBEUkFXX01PVElGCi0KLSNkZWZpbmUgQ09OVl9NT1RJRl9XIDEyOAotI2RlZmluZSBDT05WX01PVElGX1dNQVNLIDB4N2YKLQotdHlwZWRlZiBjaGFyIE1vdGlmW0NPTlZfTU9USUZfV11bQ09OVl9NT1RJRl9XXTsKLQotI2luY2x1ZGUgIm1vdGlmX2dvb20xLmgiCi0jaW5jbHVkZSAibW90aWZfZ29vbTIuaCIKLQotI2RlZmluZSBOQl9USEVUQSA1MTIKLQotdHlwZWRlZiBzdHJ1Y3QgX0NPTlZfREFUQQotewotICBQbHVnaW5QYXJhbSBsaWdodDsKLSAgUGx1Z2luUGFyYW0gZmFjdG9yX2Fkal9wOwotICBQbHVnaW5QYXJhbSBmYWN0b3JfcDsKLSAgUGx1Z2luUGFyYW1ldGVycyBwYXJhbXM7Ci0KLSAgLyogcm90b3pvb20gKi8KLSAgaW50IHRoZXRhOwotICBmbG9hdCBmdGhldGE7Ci0gIGludCBoX3NpbltOQl9USEVUQV07Ci0gIGludCBoX2Nvc1tOQl9USEVUQV07Ci0gIGludCBoX2hlaWdodDsKLSAgZmxvYXQgdmlzaWJpbGl0eTsKLSAgTW90aWYgY29udl9tb3RpZjsKLSAgaW50IGludmVyc2VfbW90aWY7Ci0KLX0gQ29udkRhdGE7Ci0KLS8qIGluaXQgcm90b3pvb20gdGFibGVzICovCi1zdGF0aWMgdm9pZAotY29tcHV0ZV90YWJsZXMgKFZpc3VhbEZYICogX3RoaXMsIFBsdWdpbkluZm8gKiBpbmZvKQotewotICBDb252RGF0YSAqZGF0YSA9IChDb252RGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLSAgZG91YmxlIHNjcmVlbl9jb2VmOwotICBpbnQgaTsKLSAgZG91YmxlIGg7Ci0gIGRvdWJsZSByYWRpYW47Ci0KLSAgaWYgKGRhdGEtPmhfaGVpZ2h0ID09IGluZm8tPnNjcmVlbi5oZWlnaHQpCi0gICAgcmV0dXJuOwotCi0gIHNjcmVlbl9jb2VmID0gMi4wICogMzAwLjAgLyAoZG91YmxlKSBpbmZvLT5zY3JlZW4uaGVpZ2h0OwotICBkYXRhLT5oX2hlaWdodCA9IGluZm8tPnNjcmVlbi5oZWlnaHQ7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE5CX1RIRVRBOyBpKyspIHsKLSAgICByYWRpYW4gPSAyICogaSAqIEdfUEkgLyBOQl9USEVUQTsKLSAgICBoID0gKDAuMiArIGNvcyAocmFkaWFuKSAvIDE1LjAgKiBzaW4gKHJhZGlhbiAqIDIuMCArIDEyLjEyMykpICogc2NyZWVuX2NvZWY7Ci0gICAgZGF0YS0+aF9jb3NbaV0gPSAweDEwMDAwICogKC1oICogY29zIChyYWRpYW4pICogY29zIChyYWRpYW4pKTsKLSAgICBkYXRhLT5oX3NpbltpXSA9IDB4MTAwMDAgKiAoaCAqIHNpbiAocmFkaWFuICsgMS41NykgKiBzaW4gKHJhZGlhbikpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfbW90aWYgKENvbnZEYXRhICogZGF0YSwgTW90aWYgbW90aWYpCi17Ci0gIGludCBpLCBqOwotCi0gIGZvciAoaSA9IDA7IGkgPCBDT05WX01PVElGX1c7ICsraSkKLSAgICBmb3IgKGogPSAwOyBqIDwgQ09OVl9NT1RJRl9XOyArK2opCi0gICAgICBkYXRhLT5jb252X21vdGlmW2ldW2pdID0KLSAgICAgICAgICBtb3RpZltDT05WX01PVElGX1cgLSBpIC0gMV1bQ09OVl9NT1RJRl9XIC0gaiAtIDFdOwotfQotCi1zdGF0aWMgdm9pZAotY29udm9sdmVfaW5pdCAoVmlzdWFsRlggKiBfdGhpcywgUGx1Z2luSW5mbyAqIGluZm8pCi17Ci0gIENvbnZEYXRhICpkYXRhOwotCi0gIGRhdGEgPSAoQ29udkRhdGEgKikgbWFsbG9jIChzaXplb2YgKENvbnZEYXRhKSk7Ci0gIF90aGlzLT5meF9kYXRhID0gKHZvaWQgKikgZGF0YTsKLQotICBzZWN1cmVfZl9wYXJhbSAoJmRhdGEtPmxpZ2h0LCAiU2NyZWVuIEJyaWdodG5lc3MiKTsKLSAgZGF0YS0+bGlnaHQucGFyYW0uZnZhbC5tYXggPSAzMDAuMGY7Ci0gIGRhdGEtPmxpZ2h0LnBhcmFtLmZ2YWwuc3RlcCA9IDEuMGY7Ci0gIGRhdGEtPmxpZ2h0LnBhcmFtLmZ2YWwudmFsdWUgPSAxMDAuMGY7Ci0KLSAgc2VjdXJlX2ZfcGFyYW0gKCZkYXRhLT5mYWN0b3JfYWRqX3AsICJGbGFzaCBJbnRlbnNpdHkiKTsKLSAgZGF0YS0+ZmFjdG9yX2Fkal9wLnBhcmFtLmZ2YWwubWF4ID0gMjAwLjBmOwotICBkYXRhLT5mYWN0b3JfYWRqX3AucGFyYW0uZnZhbC5zdGVwID0gMS4wZjsKLSAgZGF0YS0+ZmFjdG9yX2Fkal9wLnBhcmFtLmZ2YWwudmFsdWUgPSA3MC4wZjsKLQotICBzZWN1cmVfZl9mZWVkYmFjayAoJmRhdGEtPmZhY3Rvcl9wLCAiRmFjdG9yIik7Ci0KLSAgcGx1Z2luX3BhcmFtZXRlcnMgKCZkYXRhLT5wYXJhbXMsICJCcmlnaHQgRmxhc2giLCA1KTsKLSAgZGF0YS0+cGFyYW1zLnBhcmFtc1swXSA9ICZkYXRhLT5saWdodDsKLSAgZGF0YS0+cGFyYW1zLnBhcmFtc1sxXSA9ICZkYXRhLT5mYWN0b3JfYWRqX3A7Ci0gIGRhdGEtPnBhcmFtcy5wYXJhbXNbMl0gPSAwOwotICBkYXRhLT5wYXJhbXMucGFyYW1zWzNdID0gJmRhdGEtPmZhY3Rvcl9wOwotICBkYXRhLT5wYXJhbXMucGFyYW1zWzRdID0gMDsKLQotICBkYXRhLT5oX2hlaWdodCA9IDA7Ci0KLSAgLyogaW5pdCByb3Rvem9vbSB0YWJsZXMgKi8KLSAgY29tcHV0ZV90YWJsZXMgKF90aGlzLCBpbmZvKTsKLSAgZGF0YS0+dGhldGEgPSAwOwotICBkYXRhLT5mdGhldGEgPSAwLjA7Ci0gIGRhdGEtPnZpc2liaWxpdHkgPSAxLjA7Ci0gIHNldF9tb3RpZiAoZGF0YSwgQ09OVl9NT1RJRjIpOwotICBkYXRhLT5pbnZlcnNlX21vdGlmID0gMDsKLQotICBfdGhpcy0+cGFyYW1zID0gJmRhdGEtPnBhcmFtczsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnZvbHZlX2ZyZWUgKFZpc3VhbEZYICogX3RoaXMpCi17Ci0gIENvbnZEYXRhICpkYXRhID0gKENvbnZEYXRhICopIF90aGlzLT5meF9kYXRhOwotCi0gIGdvb21fcGx1Z2luX3BhcmFtZXRlcnNfZnJlZSAoJmRhdGEtPnBhcmFtcyk7Ci0KLSAgZnJlZSAoX3RoaXMtPmZ4X2RhdGEpOwotfQotCi0jaWZkZWYgRFJBV19NT1RJRgotc3RhdGljIHZvaWQKLWNyZWF0ZV9vdXRwdXRfd2l0aF9icmlnaHRuZXNzIChWaXN1YWxGWCAqIF90aGlzLCBQaXhlbCAqIHNyYywgUGl4ZWwgKiBkZXN0LAotICAgIFBsdWdpbkluZm8gKiBpbmZvLCBpbnQgaWZmKQotewotICBDb252RGF0YSAqZGF0YSA9IChDb252RGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLQotICBpbnQgeCwgeTsKLSAgaW50IGkgPSAwOyAgICAgICAgICAgICAgICAgICAgLy9pbmZvLT5zY3JlZW4uaGVpZ2h0ICogaW5mby0+c2NyZWVuLndpZHRoIC0gMTsKLQotICBjb25zdCBpbnQgYyA9IGRhdGEtPmhfY29zW2RhdGEtPnRoZXRhXTsKLSAgY29uc3QgaW50IHMgPSBkYXRhLT5oX3NpbltkYXRhLT50aGV0YV07Ci0KLSAgY29uc3QgaW50IHhpID0gLShpbmZvLT5zY3JlZW4ud2lkdGggLyAyKSAqIGM7Ci0gIGNvbnN0IGludCB5aSA9IChpbmZvLT5zY3JlZW4ud2lkdGggLyAyKSAqIHM7Ci0KLSAgY29uc3QgaW50IHhqID0gLShpbmZvLT5zY3JlZW4uaGVpZ2h0IC8gMikgKiBzOwotICBjb25zdCBpbnQgeWogPSAtKGluZm8tPnNjcmVlbi5oZWlnaHQgLyAyKSAqIGM7Ci0KLSAgaW50IHhwcmltZSA9IHhqOwotICBpbnQgeXByaW1lID0geWo7Ci0KLSAgaW50IGlmZnRhYlsxNl07Ci0KLSAgaWYgKGRhdGEtPmludmVyc2VfbW90aWYpIHsKLSAgICBpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQotICAgICAgaWZmdGFiW2ldID0gKGRvdWJsZSkgaWZmICooMS4wICsgZGF0YS0+dmlzaWJpbGl0eSAqICgxNS4wIC0gaSkgLyAxNS4wKTsKLSAgfSBlbHNlIHsKLSAgICBpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQotICAgICAgaWZmdGFiW2ldID0gKGRvdWJsZSkgaWZmIC8gKDEuMCArIGRhdGEtPnZpc2liaWxpdHkgKiAoMTUuMCAtIGkpIC8gMTUuMCk7Ci0gIH0KLQotICBmb3IgKHkgPSBpbmZvLT5zY3JlZW4uaGVpZ2h0OyB5LS07KSB7Ci0gICAgaW50IHh0ZXgsIHl0ZXg7Ci0KLSAgICB4dGV4ID0geHByaW1lICsgeGkgKyBDT05WX01PVElGX1cgKiAweDEwMDAwIC8gMjsKLSAgICB4cHJpbWUgKz0gczsKLQotICAgIHl0ZXggPSB5cHJpbWUgKyB5aSArIENPTlZfTU9USUZfVyAqIDB4MTAwMDAgLyAyOwotICAgIHlwcmltZSArPSBjOwotCi0jaWZkZWYgSEFWRV9NTVgKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIlxuXHQgcHhvciAgJSVtbTcsICAlJW1tNyIgICAgLyogbW03ID0gMCAgICovCi0gICAgICAgICJcblx0IG1vdmQgJVt4dGV4XSwgICUlbW0yIiAiXG5cdCBtb3ZkICVbeXRleF0sICAlJW1tMyIgIlxuXHQgcHVucGNrbGRxICUlbW0zLCAlJW1tMiIgICAvKiBtbTIgPSBbIHl0ZXggfCB4dGV4IF0gKi8KLSAgICAgICAgIlxuXHQgbW92ZCAlW2NdLCAgICAgJSVtbTQiICJcblx0IG1vdmQgJVtzXSwgICAgICUlbW02IiAiXG5cdCBweG9yICAlJW1tNSwgICAlJW1tNSIgIlxuXHQgcHN1YmQgJSVtbTYsICAgJSVtbTUiICJcblx0IHB1bnBja2xkcSAlJW1tNSwgJSVtbTQiICAgLyogbW00ID0gWyAtcyB8IGMgXSAgICAgICovCi0gICAgICAgICJcblx0IG1vdmQgJVttb3RpZl0sICUlbW02IiAgICAgLyogbW02ID0gbW90aWYgICAgICAgICAgICovCi0gICAgICAgIDo6W3h0ZXhdICJnIiAoeHRleCksW3l0ZXhdICJnIiAoeXRleCkKLSAgICAgICAgLFtjXSAiZyIgKGMpLFtzXSAiZyIgKHMpCi0gICAgICAgICxbbW90aWZdICJnIiAoJmRhdGEtPmNvbnZfbW90aWZbMF1bMF0pKTsKLQotICAgIGZvciAoeCA9IGluZm8tPnNjcmVlbi53aWR0aDsgeC0tOykgewotICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJcblx0IG1vdmQgICVbc3JjXSwgJSVtbTAiICAvKiBtbTAgPSBzcmMgKi8KLSAgICAgICAgICAiXG5cdCBwYWRkZCAlJW1tNCwgJSVtbTIiICAgICAvKiBbIHl0ZXggfCB4dGV4IF0gKz0gWyAtcyB8IHMgXSAqLwotICAgICAgICAgICJcblx0IG1vdmQgICUlZXNpLCAlJW1tNSIgICAgIC8qIHNhdmUgZXNpIGludG8gbW01ICovCi0gICAgICAgICAgIlxuXHQgbW92cSAgJSVtbTIsICUlbW0zIiAiXG5cdCBwc3JsZCAgJDE2LCAgJSVtbTMiICAgLyogbW0zID0gWyAoeXRleD4+MTYpIHwgKHh0ZXg+PjE2KSBdICovCi0gICAgICAgICAgIlxuXHQgbW92ZCAgJSVtbTMsICUlZWF4IiAgICAgLyogZWF4ID0geHRleCcgKi8KLSAgICAgICAgICAiXG5cdCBwc3JscSAkMjUsICAgJSVtbTMiICJcblx0IG1vdmQgICUlbW0zLCAlJWVjeCIgICAvKiBlY3ggPSB5dGV4JyA8PCA3ICovCi0gICAgICAgICAgIlxuXHQgYW5kbCAgJDEyNywgJSVlYXgiICJcblx0IGFuZGwgICQxNjI1NiwgJSVlY3giICJcblx0IGFkZGwgICUlZWN4LCAlJWVheCIgIlxuXHQgbW92ZCAgJSVtbTYsICUlZXNpIiAgICAgICAvKiBlc2kgPSBtb3RpZiAqLwotICAgICAgICAgICJcblx0IHhvcmwgICUlZWN4LCAlJWVjeCIgIlxuXHQgbW92YiAgKCUlZWF4LCUlZXNpKSwgJSVjbCIgIlxuXHQgbW92bCAgJVtpZmZ0YWJdLCAlJWVheCIgIlxuXHQgbW92ZCAgJSVtbTUsICUlZXNpIiAgICAvKiByZXN0b3JlIGVzaSBmcm9tIG1tNSAqLwotICAgICAgICAgICJcblx0IG1vdmQgICglJWVheCwlJWVjeCw0KSwgJSVtbTEiICAgLyogbW0xID0gWzB8MHwwfGlmZjJdICovCi0gICAgICAgICAgIlxuXHQgcHVucGNrbHdkICUlbW0xLCAlJW1tMSIKLSAgICAgICAgICAiXG5cdCBwdW5wY2tsYncgJSVtbTcsICUlbW0wIgotICAgICAgICAgICJcblx0IHB1bnBja2xkcSAlJW1tMSwgJSVtbTEiCi0gICAgICAgICAgIlxuXHQgcHNybHcgICAgICQxLCAgICAlJW1tMCIKLSAgICAgICAgICAiXG5cdCBwc3JsdyAgICAgJDIsICAgICUlbW0xIgotICAgICAgICAgICJcblx0IHBtdWxsdyAgICAlJW1tMSwgJSVtbTAiCi0gICAgICAgICAgIlxuXHQgcHNybHcgICAgICQ1LCAgICAlJW1tMCIKLSAgICAgICAgICAiXG5cdCBwYWNrdXN3YiAgJSVtbTcsICUlbW0wIgotICAgICAgICAgICJcblx0IG1vdmQgICAgICAlJW1tMCwgJVtkZXN0XSI6W2Rlc3RdICI9ZyIgKGRlc3RbaV0udmFsKQotICAgICAgICAgIDpbc3JjXSAiZyIgKHNyY1tpXS52YWwpCi0gICAgICAgICAgLFtpZmZ0YWJdICJnIiAoJmlmZnRhYlswXSkKLSAgICAgICAgICA6ImVheCIsICJlY3giKTsKLQotICAgICAgaSsrOwotICAgIH0KLSNlbHNlCi0gICAgZm9yICh4ID0gaW5mby0+c2NyZWVuLndpZHRoOyB4LS07KSB7Ci0KLSAgICAgIGludCBpZmYyOwotICAgICAgdW5zaWduZWQgaW50IGYwLCBmMSwgZjIsIGYzOwotCi0gICAgICB4dGV4ICs9IGM7Ci0gICAgICB5dGV4IC09IHM7Ci0KLSAgICAgIGlmZjIgPQotICAgICAgICAgIGlmZnRhYlsoaW50KSBkYXRhLT5jb252X21vdGlmWyh5dGV4ID4+IDE2KSAmIENPTlZfTU9USUZfV01BU0tdWyh4dGV4Ci0gICAgICAgICAgICAgICAgICA+PiAxNikgJiBDT05WX01PVElGX1dNQVNLXV07Ci0KLSNkZWZpbmUgc2F0KGEpICgoYSk+MHhGRj8weEZGOihhKSkKLSAgICAgIGYwID0gc3JjW2ldLnZhbDsKLSAgICAgIGYxID0gKChmMCA+PiBSX09GRlNFVCkgJiAweEZGKSAqIGlmZjIgPj4gODsKLSAgICAgIGYyID0gKChmMCA+PiBHX09GRlNFVCkgJiAweEZGKSAqIGlmZjIgPj4gODsKLSAgICAgIGYzID0gKChmMCA+PiBCX09GRlNFVCkgJiAweEZGKSAqIGlmZjIgPj4gODsKLSAgICAgIGRlc3RbaV0udmFsID0KLSAgICAgICAgICAoc2F0IChmMSkgPDwgUl9PRkZTRVQpIHwgKHNhdCAoZjIpIDw8IEdfT0ZGU0VUKSB8IChzYXQgKGYzKSA8PAotICAgICAgICAgIEJfT0ZGU0VUKTsKLS8qCi0gICAgICBmMCA9IChzcmNbaV0uY29wWzBdICogaWZmMikgPj4gODsKLSAgICAgIGYxID0gKHNyY1tpXS5jb3BbMV0gKiBpZmYyKSA+PiA4OwotICAgICAgZjIgPSAoc3JjW2ldLmNvcFsyXSAqIGlmZjIpID4+IDg7Ci0gICAgICBmMyA9IChzcmNbaV0uY29wWzNdICogaWZmMikgPj4gODsKLQotICAgICAgZGVzdFtpXS5jb3BbMF0gPSAoZjAgJiAweGZmZmZmZjAwKSA/IDB4ZmYgOiAodW5zaWduZWQgY2hhcilmMDsKLSAgICAgIGRlc3RbaV0uY29wWzFdID0gKGYxICYgMHhmZmZmZmYwMCkgPyAweGZmIDogKHVuc2lnbmVkIGNoYXIpZjE7Ci0gICAgICBkZXN0W2ldLmNvcFsyXSA9IChmMiAmIDB4ZmZmZmZmMDApID8gMHhmZiA6ICh1bnNpZ25lZCBjaGFyKWYyOwotICAgICAgZGVzdFtpXS5jb3BbM10gPSAoZjMgJiAweGZmZmZmZjAwKSA/IDB4ZmYgOiAodW5zaWduZWQgY2hhcilmMzsKLSovCi0gICAgICBpKys7Ci0gICAgfQotI2VuZGlmCi0gIH0KLSNpZmRlZiBIQVZFX01NWAotICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIlxuXHQgZW1tcyIpOwotI2VuZGlmCi0KLSAgY29tcHV0ZV90YWJsZXMgKF90aGlzLCBpbmZvKTsKLX0KLSNlbmRpZgotCi0vKiNpbmNsdWRlIDxzdGRpbnQuaD4KLQotc3RhdGljIHVpbnQ2NF90IEdldFRpY2soKQotewotICB1aW50NjRfdCB4OwotICBhc20gdm9sYXRpbGUgKCJSRFRTQyIgOiAiPUEiICh4KSk7Ci0gIHJldHVybiB4OwotfSovCi0KLQotc3RhdGljIHZvaWQKLWNvbnZvbHZlX2FwcGx5IChWaXN1YWxGWCAqIF90aGlzLCBQaXhlbCAqIHNyYywgUGl4ZWwgKiBkZXN0LCBQbHVnaW5JbmZvICogaW5mbykKLXsKLQotICBDb252RGF0YSAqZGF0YSA9IChDb252RGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLSNpZmRlZiBEUkFXX01PVElGCi0gIGZsb2F0IGZmOwotICBpbnQgaWZmOwotCi0gIGZmID0gKEZWQUwgKGRhdGEtPmZhY3Rvcl9wKSAqIEZWQUwgKGRhdGEtPmZhY3Rvcl9hZGpfcCkgKwotICAgICAgRlZBTCAoZGF0YS0+bGlnaHQpKSAvIDEwMC4wZjsKLSAgaWZmID0gKHVuc2lnbmVkIGludCkgKGZmICogMjU2KTsKLSNlbmRpZgotCi0gIHsKLSAgICBkb3VibGUgZmN5Y2xlID0gKGRvdWJsZSkgaW5mby0+Y3ljbGU7Ci0gICAgZG91YmxlIHJvdGF0ZV9wYXJhbSwgcm90YXRlX2NvZWY7Ci0gICAgZmxvYXQgSU5DUkVBU0VfUkFURSA9IDEuNTsKLSAgICBmbG9hdCBERUNBWV9SQVRFID0gMC45NTU7Ci0KLSAgICBpZiAoRlZBTCAoaW5mby0+c291bmQubGFzdF9nb29tX3ApID4gMC44KQotICAgICAgRlZBTCAoZGF0YS0+ZmFjdG9yX3ApICs9IEZWQUwgKGluZm8tPnNvdW5kLmdvb21fcG93ZXJfcCkgKiBJTkNSRUFTRV9SQVRFOwotICAgIEZWQUwgKGRhdGEtPmZhY3Rvcl9wKSAqPSBERUNBWV9SQVRFOwotCi0gICAgcm90YXRlX3BhcmFtID0gRlZBTCAoaW5mby0+c291bmQubGFzdF9nb29tX3ApOwotICAgIGlmIChyb3RhdGVfcGFyYW0gPCAwLjApCi0gICAgICByb3RhdGVfcGFyYW0gPSAwLjA7Ci0gICAgcm90YXRlX3BhcmFtICs9IEZWQUwgKGluZm8tPnNvdW5kLmdvb21fcG93ZXJfcCk7Ci0KLSAgICByb3RhdGVfY29lZiA9IDQuMCArIEZWQUwgKGluZm8tPnNvdW5kLmdvb21fcG93ZXJfcCkgKiA2LjA7Ci0gICAgZGF0YS0+ZnRoZXRhID0gKGRhdGEtPmZ0aGV0YSArIHJvdGF0ZV9jb2VmICogc2luIChyb3RhdGVfcGFyYW0gKiA2LjMpKTsKLSAgICBkYXRhLT50aGV0YSA9ICgodW5zaWduZWQgaW50KSBkYXRhLT5mdGhldGEpICUgTkJfVEhFVEE7Ci0gICAgZGF0YS0+dmlzaWJpbGl0eSA9Ci0gICAgICAgIChjb3MgKGZjeWNsZSAqIDAuMDAxICsgMS41KSAqIHNpbiAoZmN5Y2xlICogMC4wMDgpICsKLSAgICAgICAgY29zIChmY3ljbGUgKiAwLjAxMSArIDUuMCkgLSAwLjggKyBpbmZvLT5zb3VuZC5zcGVlZHZhcikgKiAxLjU7Ci0gICAgaWYgKGRhdGEtPnZpc2liaWxpdHkgPCAwLjApCi0gICAgICBkYXRhLT52aXNpYmlsaXR5ID0gMC4wOwotICAgIGRhdGEtPmZhY3Rvcl9wLmNoYW5nZV9saXN0ZW5lciAoJmRhdGEtPmZhY3Rvcl9wKTsKLSAgfQotCi0gIGlmIChkYXRhLT52aXNpYmlsaXR5IDwgMC4wMSkgewotICAgIHN3aXRjaCAoZ29vbV9pcmFuZCAoaW5mby0+Z1JhbmRvbSwgMzAwKSkgewotICAgICAgY2FzZSAxOgotICAgICAgICBzZXRfbW90aWYgKGRhdGEsIENPTlZfTU9USUYxKTsKLSAgICAgICAgZGF0YS0+aW52ZXJzZV9tb3RpZiA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyOgotICAgICAgICBzZXRfbW90aWYgKGRhdGEsIENPTlZfTU9USUYyKTsKLSAgICAgICAgZGF0YS0+aW52ZXJzZV9tb3RpZiA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotI2lmZGVmIERSQVdfTU9USUYKLSAgaWYgKChmZiA+IDAuOThmKSAmJiAoZmYgPCAxLjAyZikpCi0gICAgbWVtY3B5IChkZXN0LCBzcmMsIGluZm8tPnNjcmVlbi5zaXplICogc2l6ZW9mIChQaXhlbCkpOwotICBlbHNlCi0gICAgY3JlYXRlX291dHB1dF93aXRoX2JyaWdodG5lc3MgKF90aGlzLCBzcmMsIGRlc3QsIGluZm8sIGlmZik7Ci0jZWxzZQotICBtZW1jcHkgKGRlc3QsIHNyYywgaW5mby0+c2NyZWVuLnNpemUgKiBzaXplb2YgKFBpeGVsKSk7Ci0jZW5kaWYKLQotLyoKLS8vICAgQmVuY2hpbmcgc3VpdGUuLi4KLSAgIHsKLSAgICB1aW50NjRfdCBiZWZvcmUsIGFmdGVyOwotICAgIGRvdWJsZSAgIHRpbWVkOwotICAgIHN0YXRpYyBkb3VibGUgc3RpbWVkID0gMTAwMDAuMDsKLSAgICBiZWZvcmUgPSBHZXRUaWNrKCk7Ci0gICAgZGF0YS0+dmlzaWJpbGl0eSA9IDEuMDsKLSAgICBjcmVhdGVfb3V0cHV0X3dpdGhfYnJpZ2h0bmVzcyhfdGhpcyxzcmMsZGVzdCxpbmZvLGlmZik7Ci0gICAgYWZ0ZXIgID0gR2V0VGljaygpOwotICAgIHRpbWVkID0gKGRvdWJsZSkoKGFmdGVyLWJlZm9yZSkgLyBpbmZvLT5zY3JlZW4uc2l6ZSk7Ci0gICAgaWYgKHRpbWVkIDwgc3RpbWVkKSB7Ci0gICAgICBzdGltZWQgPSB0aW1lZDsKLSAgICAgIHByaW50ZiAoIkNMSyA9ICUzLjBmIENQUFxuIiwgc3RpbWVkKTsKLSAgICB9Ci0gIH0KLSovCi19Ci0KLXZvaWQKLWNvbnZvbHZlX2NyZWF0ZSAoVmlzdWFsRlggKiB2ZngpCi17Ci0gIHZmeC0+aW5pdCA9IGNvbnZvbHZlX2luaXQ7Ci0gIHZmeC0+ZnJlZSA9IGNvbnZvbHZlX2ZyZWU7Ci0gIHZmeC0+YXBwbHkgPSBjb252b2x2ZV9hcHBseTsKLSAgdmZ4LT5meF9kYXRhID0gTlVMTDsKLSAgdmZ4LT5wYXJhbXMgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZHJhd21ldGhvZHMuYyBiL2dzdC9nb29tL2RyYXdtZXRob2RzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjBjZjEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZHJhd21ldGhvZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSAiZHJhd21ldGhvZHMuaCIKLQotI2RlZmluZSBEUkFXTUVUSE9EX1BMVVMoX291dCxfYmFja2J1ZixfY29sKSBcCi17XAotICAgICAgaW50IHRyYT0wLGk9MDtcCi0gICAgICB1bnNpZ25lZCBjaGFyICpicmEgPSAodW5zaWduZWQgY2hhciopJihfYmFja2J1Zik7XAotICAgICAgdW5zaWduZWQgY2hhciAqZHJhID0gKHVuc2lnbmVkIGNoYXIqKSYoX291dCk7XAotICAgICAgdW5zaWduZWQgY2hhciAqY3JhID0gKHVuc2lnbmVkIGNoYXIqKSYoX2NvbCk7XAotICAgICAgZm9yICg7aTw0O2krKykge1wKLQkJCQl0cmEgPSAqY3JhO1wKLQkJCQl0cmEgKz0gKmJyYTtcCi0JCQkJaWYgKHRyYT4yNTUpIHRyYT0yNTU7XAotCQkJCSpkcmEgPSB0cmE7XAotCQkJCSsrZHJhOysrY3JhOysrYnJhO1wKLQkJCX1cCi19Ci0KLSNkZWZpbmUgRFJBV01FVEhPRCBEUkFXTUVUSE9EX1BMVVMoKnAsKnAsY29sKQotCi12b2lkCi1kcmF3X2xpbmUgKFBpeGVsICogZGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sLCBpbnQgc2NyZWVueCwKLSAgICBpbnQgc2NyZWVueSkKLXsKLSAgaW50IHgsIHksIGR4LCBkeSwgeXksIHh4OwotICBQaXhlbCAqcDsKLQotICBpZiAoKHkxIDwgMCkgfHwgKHkyIDwgMCkgfHwgKHgxIDwgMCkgfHwgKHgyIDwgMCkgfHwgKHkxID49IHNjcmVlbnkpCi0gICAgICB8fCAoeTIgPj0gc2NyZWVueSkgfHwgKHgxID49IHNjcmVlbngpIHx8ICh4MiA+PSBzY3JlZW54KSkKLSAgICByZXR1cm47Ci0KLSAgLyogY2xpcCB0byB0b3AgZWRnZSAKLSAgICAgaWYgKCh5MSA8IDApICYmICh5MiA8IDApKQotICAgICByZXR1cm47Ci0KLSAgICAgaWYgKHkxIDwgMCkgewotICAgICB4MSArPSAoeTEgKiAoeDEgLSB4MikpIC8gKHkyIC0geTEpOwotICAgICB5MSA9IDA7Ci0gICAgIH0KLSAgICAgaWYgKHkyIDwgMCkgewotICAgICB4MiArPSAoeTIgKiAoeDEgLSB4MikpIC8gKHkyIC0geTEpOwotICAgICB5MiA9IDA7Ci0gICAgIH0KLQotICAgICBjbGlwIHRvIGJvdHRvbSBlZGdlIAotICAgICBpZiAoKHkxID49IHNjcmVlbnkpICYmICh5MiA+PSBzY3JlZW55KSkKLSAgICAgcmV0dXJuOwotICAgICBpZiAoeTEgPj0gc2NyZWVueSkgewotICAgICB4MSAtPSAoKHNjcmVlbnkgLSB5MSkgKiAoeDEgLSB4MikpIC8gKHkyIC0geTEpOwotICAgICB5MSA9IHNjcmVlbnkgLSAxOwotICAgICB9Ci0gICAgIGlmICh5MiA+PSBzY3JlZW55KSB7Ci0gICAgIHgyIC09ICgoc2NyZWVueSAtIHkyKSAqICh4MSAtIHgyKSkgLyAoeTIgLSB5MSk7Ci0gICAgIHkyID0gc2NyZWVueSAtIDE7Ci0gICAgIH0KLSAgICAgY2xpcCB0byBsZWZ0IGVkZ2UgCi0gICAgIGlmICgoeDEgPCAwKSAmJiAoeDIgPCAwKSkKLSAgICAgcmV0dXJuOwotICAgICBpZiAoeDEgPCAwKSB7Ci0gICAgIHkxICs9ICh4MSAqICh5MSAtIHkyKSkgLyAoeDIgLSB4MSk7Ci0gICAgIHgxID0gMDsKLSAgICAgfQotICAgICBpZiAoeDIgPCAwKSB7Ci0gICAgIHkyICs9ICh4MiAqICh5MSAtIHkyKSkgLyAoeDIgLSB4MSk7Ci0gICAgIHgyID0gMDsKLSAgICAgfQotICAgICBjbGlwIHRvIHJpZ2h0IGVkZ2UgCi0gICAgIGlmICgoeDEgPj0gc2NyZWVueCkgJiYgKHgyID49IHNjcmVlbngpKQotICAgICByZXR1cm47Ci0gICAgIGlmICh4MSA+PSBzY3JlZW54KSB7Ci0gICAgIHkxIC09ICgoc2NyZWVueCAtIHgxKSAqICh5MSAtIHkyKSkgLyAoeDIgLSB4MSk7Ci0gICAgIHgxID0gc2NyZWVueCAtIDE7Ci0gICAgIH0KLSAgICAgaWYgKHgyID49IHNjcmVlbngpIHsKLSAgICAgeTIgLT0gKChzY3JlZW54IC0geDIpICogKHkxIC0geTIpKSAvICh4MiAtIHgxKTsKLSAgICAgeDIgPSBzY3JlZW54IC0gMTsKLSAgICAgfQotICAgKi8KLQotICBkeCA9IHgyIC0geDE7Ci0gIGR5ID0geTIgLSB5MTsKLSAgaWYgKHgxID4geDIpIHsKLSAgICBpbnQgdG1wOwotCi0gICAgdG1wID0geDE7Ci0gICAgeDEgPSB4MjsKLSAgICB4MiA9IHRtcDsKLSAgICB0bXAgPSB5MTsKLSAgICB5MSA9IHkyOwotICAgIHkyID0gdG1wOwotICAgIGR4ID0geDIgLSB4MTsKLSAgICBkeSA9IHkyIC0geTE7Ci0gIH0KLQotICAvKiB2ZXJ0aWNhbCBsaW5lICovCi0gIGlmIChkeCA9PSAwKSB7Ci0gICAgaWYgKHkxIDwgeTIpIHsKLSAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5MSkgKyB4MV0pOwotICAgICAgZm9yICh5ID0geTE7IHkgPD0geTI7IHkrKykgewotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBwICs9IHNjcmVlbng7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5MikgKyB4MV0pOwotICAgICAgZm9yICh5ID0geTI7IHkgPD0geTE7IHkrKykgewotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBwICs9IHNjcmVlbng7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotICAvKiBob3Jpem9udGFsIGxpbmUgKi8KLSAgaWYgKGR5ID09IDApIHsKLSAgICBpZiAoeDEgPCB4MikgewotICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHkxKSArIHgxXSk7Ci0gICAgICBmb3IgKHggPSB4MTsgeCA8PSB4MjsgeCsrKSB7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIHArKzsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHkxKSArIHgyXSk7Ci0gICAgICBmb3IgKHggPSB4MjsgeCA8PSB4MTsgeCsrKSB7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIHArKzsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLSAgLyogMSAgICAqLwotICAvKiBcICAgKi8KLSAgLyogXCAgKi8KLSAgLyogMiAqLwotICBpZiAoeTIgPiB5MSkgewotICAgIC8qIHN0ZWVwICovCi0gICAgaWYgKGR5ID4gZHgpIHsKLSAgICAgIGR4ID0gKChkeCA8PCAxNikgLyBkeSk7Ci0gICAgICB4ID0geDEgPDwgMTY7Ci0gICAgICBmb3IgKHkgPSB5MTsgeSA8PSB5MjsgeSsrKSB7Ci0gICAgICAgIHh4ID0geCA+PiAxNjsKLSAgICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHkpICsgeHhdKTsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgaWYgKHh4IDwgKHNjcmVlbnggLSAxKSkgewotICAgICAgICAgIHArKzsKLSAgICAgICAgICAvKiBEUkFXTUVUSE9EOyAqLwotICAgICAgICB9Ci0gICAgICAgIHggKz0gZHg7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIHNoYWxsb3cgKi8KLSAgICBlbHNlIHsKLSAgICAgIGR5ID0gKChkeSA8PCAxNikgLyBkeCk7Ci0gICAgICB5ID0geTEgPDwgMTY7Ci0gICAgICBmb3IgKHggPSB4MTsgeCA8PSB4MjsgeCsrKSB7Ci0gICAgICAgIHl5ID0geSA+PiAxNjsKLSAgICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHl5KSArIHhdKTsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgaWYgKHl5IDwgKHNjcmVlbnkgLSAxKSkgewotICAgICAgICAgIHAgKz0gc2NyZWVueTsKLSAgICAgICAgICAvKiBEUkFXTUVUSE9EOyAqLwotICAgICAgICB9Ci0gICAgICAgIHkgKz0gZHk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIC8qIDIgKi8KLSAgLyogLyAgKi8KLSAgLyogLyAgICovCi0gIC8qIDEgICAgKi8KLSAgZWxzZSB7Ci0gICAgLyogc3RlZXAgKi8KLSAgICBpZiAoLWR5ID4gZHgpIHsKLSAgICAgIGR4ID0gKChkeCA8PCAxNikgLyAtZHkpOwotICAgICAgeCA9ICh4MSArIDEpIDw8IDE2OwotICAgICAgZm9yICh5ID0geTE7IHkgPj0geTI7IHktLSkgewotICAgICAgICB4eCA9IHggPj4gMTY7Ci0gICAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5KSArIHh4XSk7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIGlmICh4eCA8IChzY3JlZW54IC0gMSkpIHsKLSAgICAgICAgICBwLS07Ci0gICAgICAgICAgLyogRFJBV01FVEhPRDsgKi8KLSAgICAgICAgfQotICAgICAgICB4ICs9IGR4OwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBzaGFsbG93ICovCi0gICAgZWxzZSB7Ci0gICAgICBkeSA9ICgoZHkgPDwgMTYpIC8gZHgpOwotICAgICAgeSA9IHkxIDw8IDE2OwotICAgICAgZm9yICh4ID0geDE7IHggPD0geDI7IHgrKykgewotICAgICAgICB5eSA9IHkgPj4gMTY7Ci0gICAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5eSkgKyB4XSk7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIGlmICh5eSA8IChzY3JlZW55IC0gMSkpIHsKLSAgICAgICAgICBwICs9IHNjcmVlbnk7Ci0gICAgICAgICAgLyogRFJBV01FVEhPRDsgKi8KLSAgICAgICAgfQotICAgICAgICB5ICs9IGR5OwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZHJhd21ldGhvZHMuaCBiL2dzdC9nb29tL2RyYXdtZXRob2RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmODYyNzQuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZHJhd21ldGhvZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX0RSQVdNRVRIT0RTX0gKLSNkZWZpbmUgX0RSQVdNRVRIT0RTX0gKLQotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0jaW5jbHVkZSAiZ29vbV9ncmFwaGljLmgiCi0KLXZvaWQgZHJhd19saW5lIChQaXhlbCAqZGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sLCBpbnQgc2NyZWVueCwgaW50IHNjcmVlbnkpOwotCi0jZW5kaWYgLyogX0RSQVdNRVRIT0RTX0ggKi8KZGlmZiAtLWdpdCBhL2dzdC9nb29tL2ZpbHRlcnMuYyBiL2dzdC9nb29tL2ZpbHRlcnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAzZDIwMi4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9maWx0ZXJzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NjIgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLy8gLS0tIENIVUkgRU4gVFJBSU4gREUgU1VQUFJJTUVSIExFUyBFWFRFUk4gUkVTT0xYIEVUIENfUkVTT0xZIC0tLQotCi0vKiBmaWx0ZXIuYyB2ZXJzaW9uIDAuNwotKiBjb250aWVudCBsZXMgZmlsdHJlcyBhcHBsaWNhYmxlIGEgdW4gYnVmZmVyCi0qIGNyZWF0aW9uIDogMDEvMTAvMjAwMAotKiAgLWFqb3V0IGRlIHNpbkZpbHRlcigpCi0qICAtYWpvdXQgZGUgem9vbUZpbHRlcigpCi0qICAtY29waWUgZGUgem9vbUZpbHRlcigpIGVuIHpvb21GaWx0ZXJSR0IoKSwgZ2VyYW50IGxlcyAzIGNvdWxldXJzCi0qICAtb3B0aW1pc2F0aW9uIGRlIHNpbkZpbHRlciAodXRpbGlzYW50IHVuZSB0YWJsZSBkZSBzaW4pCi0qCS1hc20KLSoJLW9wdGltaXNhdGlvbiBkZSBsYSBwcm9jZWR1cmUgZGUgZ2VuZXJhdGlvbiBkdSBidWZmZXIgZGUgdHJhbnNmb3JtYXRpb24KLSoJCWxhIHZpdGVzc2UgZXN0IG1haW50ZW5hbnQgY29tcHJpc2UgZGFucyBbMC4uMTI4XSBhdSBsaWV1IGRlIFswLi4xMDBdCi0qLwotCi0vKiAjZGVmaW5lIF9ERUJVR19QSVhFTCAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImdvb21fZmlsdGVycy5oIgotI2luY2x1ZGUgImdvb21fZ3JhcGhpYy5oIgotI2luY2x1ZGUgImdvb21fdG9vbHMuaCIKLSNpbmNsdWRlICJnb29tX3BsdWdpbl9pbmZvLmgiCi0jaW5jbHVkZSAiZ29vbV9meC5oIgotI2luY2x1ZGUgInYzZC5oIgotCi0vKiBUT0RPIDogTU9WRSBUSElTIEFXQVkgISEhICovCi0vKiBqZWtvOiBqJ2FpIGVzc2F5ZXIgZGUgbGUgdmlyZXIsIG1haXMgc2kgb24gdmV1dCBsZXMgbGFpc3NlciBpbmxpbmUgYydlc3QgdW4gcGV1IGxvdXJkby4uLiAqLwotc3RhdGljIGlubGluZSB2b2lkCi1zZXRQaXhlbFJHQiAoUGx1Z2luSW5mbyAqIGdvb21JbmZvLCBQaXhlbCAqIGJ1ZmZlciwgVWludCB4LCBVaW50IHksIENvbG9yIGMpCi17Ci0gIFBpeGVsIGk7Ci0KLSAgaS5jaGFubmVscy5iID0gYy5iOwotICBpLmNoYW5uZWxzLmcgPSBjLnY7Ci0gIGkuY2hhbm5lbHMuciA9IGMucjsKLSAgKihidWZmZXIgKyAoeCArIHkgKiBnb29tSW5mby0+c2NyZWVuLndpZHRoKSkgPSBpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNldFBpeGVsUkdCXyAoUGl4ZWwgKiBidWZmZXIsIFVpbnQgeCwgQ29sb3IgYykKLXsKLSAgYnVmZmVyW3hdLmNoYW5uZWxzLnIgPSBjLnI7Ci0gIGJ1ZmZlclt4XS5jaGFubmVscy5nID0gYy52OwotICBidWZmZXJbeF0uY2hhbm5lbHMuYiA9IGMuYjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nZXRQaXhlbFJHQl8gKFBpeGVsICogYnVmZmVyLCBVaW50IHgsIENvbG9yICogYykKLXsKLSAgUGl4ZWwgaSA9ICooYnVmZmVyICsgeCk7Ci0KLSAgYy0+YiA9IGkuY2hhbm5lbHMuYjsKLSAgYy0+diA9IGkuY2hhbm5lbHMuZzsKLSAgYy0+ciA9IGkuY2hhbm5lbHMucjsKLX0KLQotLyogRU5EIFRPRE8gKi8KLQotCi0vKiBERVBSRUNBVEVEICovCi0vLyByZXRvdXJuZSB4Pj5zICwgZW4gdGVzdGFudCBsZSBzaWduZSBkZSB4Ci0vLyNkZWZpbmUgU2hpZnRSaWdodChfeCxfcykgKCgoX3gpPDApID8gLSgtKF94KT4+KF9zKSkgOiAoKF94KT4+KF9zKSkpCi0vLyNkZWZpbmUgRUZGRUNUX0RJU1RPUlMgNAotLy8jZGVmaW5lIEVGRkVDVF9ESVNUT1JTX1NMIDIKLS8vI2RlZmluZSBJTlRFUkxBQ0VfQUREIDkKLS8vI2RlZmluZSBJTlRFUkxBQ0VfQU5EIDB4ZgotLyogRU5EIERFUFJFQ0FURUQgKi8KLQotI2RlZmluZSBCVUZGUE9JTlROQiAxNgotI2RlZmluZSBCVUZGUE9JTlROQkYgMTYuMGYKLSNkZWZpbmUgQlVGRlBPSU5UTUFTSyAweGZmZmYKLQotI2RlZmluZSBzcXJ0cGVydGUgMTYKLS8qIGZhaXJlIDogYSAlIHNxcnRwZXJ0ZSA8PT4gYSAmIHBlcnRlbWFzayAqLwotI2RlZmluZSBQRVJURU1BU0sgMHhmCi0vKiBmYWlyZSA6IGEgLyBzcXJ0cGVydGUgPD0+IGEgPj4gUEVSVEVERUMgKi8KLSNkZWZpbmUgUEVSVEVERUMgNAotCi0vKiBwdXJlIGMgdmVyc2lvbiBvZiB0aGUgem9vbSBmaWx0ZXIgKi8KLXN0YXRpYyB2b2lkIGNfem9vbSAoUGl4ZWwgKiBleHBpeDEsIFBpeGVsICogZXhwaXgyLCB1bnNpZ25lZCBpbnQgcHJldlgsCi0gICAgdW5zaWduZWQgaW50IHByZXZZLCBzaWduZWQgaW50ICpicnV0Uywgc2lnbmVkIGludCAqYnJ1dEQsIGludCBidWZmcmF0aW8sCi0gICAgaW50IHByZWNhbENvZWZbQlVGRlBPSU5UTkJdW0JVRkZQT0lOVE5CXSk7Ci0KLS8qIHNpbXBsZSB3cmFwcGVyIHRvIGdpdmUgaXQgdGhlIHNhbWUgcHJvdG8gdGhhbiB0aGUgb3RoZXJzICovCi12b2lkCi16b29tX2ZpbHRlcl9jIChpbnQgc2l6ZVgsIGludCBzaXplWSwgUGl4ZWwgKiBzcmMsIFBpeGVsICogZGVzdCwgaW50ICpicnV0UywKLSAgICBpbnQgKmJydXRELCBpbnQgYnVmZnJhdGlvLCBpbnQgcHJlY2FsQ29lZlsxNl1bMTZdKQotewotICBjX3pvb20gKHNyYywgZGVzdCwgc2l6ZVgsIHNpemVZLCBicnV0UywgYnJ1dEQsIGJ1ZmZyYXRpbywgcHJlY2FsQ29lZik7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJlY2FsQ29lZiAoaW50IHByZWNhbENvZWZbQlVGRlBPSU5UTkJdW0JVRkZQT0lOVE5CXSk7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgX1pPT01fRklMVEVSX0ZYX1dSQVBQRVJfREFUQQotewotCi0gIFBsdWdpblBhcmFtIGVuYWJsZWRfYnA7Ci0gIFBsdWdpblBhcmFtZXRlcnMgcGFyYW1zOwotCi0gIHVuc2lnbmVkIGludCAqY29lZmZzLCAqZnJlZWNvZWZmczsKLQotICBzaWduZWQgaW50ICpicnV0UywgKmZyZWVicnV0UzsgICAgICAgIC8qIHNvdXJjZSAqLwotICBzaWduZWQgaW50ICpicnV0RCwgKmZyZWVicnV0RDsgICAgICAgIC8qIGRlc3QgKi8KLSAgc2lnbmVkIGludCAqYnJ1dFQsICpmcmVlYnJ1dFQ7ICAgICAgICAvKiB0ZW1wIChlbiBjb3VycyBkZSBnZW5lcmF0aW9uKSAqLwotCi0gIGd1aW50MzIgem9vbV93aWR0aDsKLQotICB1bnNpZ25lZCBpbnQgcHJldlgsIHByZXZZOwotCi0gIGZsb2F0IGdlbmVyYWxfc3BlZWQ7Ci0gIGludCByZXZlcnNlOyAgICAgICAgICAgICAgICAgIC8qIHJldmVyc2UgdGhlIHNwZWVkICovCi0gIGNoYXIgdGhlTW9kZTsKLSAgaW50IHdhdmVFZmZlY3Q7Ci0gIGludCBoeXBlcmNvc0VmZmVjdDsKLSAgaW50IHZQbGFuZUVmZmVjdDsKLSAgaW50IGhQbGFuZUVmZmVjdDsKLSAgY2hhciBub2lzaWZ5OwotICBpbnQgbWlkZGxlWCwgbWlkZGxlWTsKLQotICBpbnQgbXVzdEluaXRCdWZmZXJzOwotICBpbnQgaW50ZXJsYWNlX3N0YXJ0OwotCi0gICAgLyoqIG1vZGlmIGJ5IGpla28gOiBmaXhlZHBvaW50IDogYnVmZnJhdGlvbiA9ICgxNjoxNikgKGRvbmMgMDw9YnVmZnJhdGlvbjw9Ml4xNikgKi8KLSAgaW50IGJ1ZmZyYXRpbzsKLSAgaW50ICpmaXJlZGVjOwotCi0gICAgLyoqIG1vZGlmIGQnb3B0aW0gYnkgSmVrbyA6IHByZWNhbGN1bCBkZXMgNCBjb2VmcyByZXN1bHRhbnQgZGVzIDIgcG9zICovCi0gIGludCBwcmVjYWxDb2VmW0JVRkZQT0lOVE5CXVtCVUZGUE9JTlROQl07Ci0KLSAgICAvKiogY2FsY3VsYXRlUFhhbmRQWSBzdGF0aWNzICovCi0gIGludCB3YXZlOwotICBpbnQgd2F2ZXNwOwotCi19IFpvb21GaWx0ZXJGWFdyYXBwZXJEYXRhOwotCi0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXpvb21WZWN0b3IgKHYyZyAqIHZlY3RldXIsIFpvb21GaWx0ZXJGWFdyYXBwZXJEYXRhICogZGF0YSwgZmxvYXQgWCwgZmxvYXQgWSkKLXsKLSAgZmxvYXQgdngsIHZ5OwotICBmbG9hdCBzcV9kaXN0ID0gWCAqIFggKyBZICogWTsKLQotICAvKiAgICBzeCA9IChYIDwgMC4wZikgPyAtMS4wZiA6IDEuMGY7Ci0gICAgIHN5ID0gKFkgPCAwLjBmKSA/IC0xLjBmIDogMS4wZjsKLSAgICovCi0gIGZsb2F0IGNvZWZWaXRlc3NlID0gKDEuMGYgKyBkYXRhLT5nZW5lcmFsX3NwZWVkKSAvIDUwLjBmOwotCi0gIC8vIEVmZmVjdHMKLQotICAvKiBDZW50cmFsaXplZCBGWCAqLwotCi0gIHN3aXRjaCAoZGF0YS0+dGhlTW9kZSkgewotICAgIGNhc2UgQ1JZU1RBTF9CQUxMX01PREU6Ci0gICAgICBjb2VmVml0ZXNzZSAtPSAoc3FfZGlzdCAtIDAuM2YpIC8gMTUuMGY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFNVUxFVFRFX01PREU6Ci0gICAgICBjb2VmVml0ZXNzZSArPSBzcV9kaXN0ICogMy41ZjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgV0FWRV9NT0RFOgotICAgICAgY29lZlZpdGVzc2UgKz0gc2luIChzcV9kaXN0ICogMjAuMGYpIC8gMTAwLjBmOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTQ1JVTkNIX01PREU6Ci0gICAgICBjb2VmVml0ZXNzZSArPSBzcV9kaXN0IC8gMTAuMGY7Ci0gICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBIWVBFUkNPUzFfTU9ERToKLSAgICAgIGJyZWFrOwotICAgICAgLy9jYXNlIEhZUEVSQ09TMl9NT0RFOgotICAgICAgYnJlYWs7Ci0gICAgICAvL2Nhc2UgWU9OTFlfTU9ERToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU1BFRURXQVlfTU9ERToKLSAgICAgIGNvZWZWaXRlc3NlICo9IDQuMGYgKiBZOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGNvZWZWaXRlc3NlIDwgLTIuMDFmKQotICAgIGNvZWZWaXRlc3NlID0gLTIuMDFmOwotICBpZiAoY29lZlZpdGVzc2UgPiAyLjAxZikKLSAgICBjb2VmVml0ZXNzZSA9IDIuMDFmOwotCi0gIHZ4ID0gY29lZlZpdGVzc2UgKiBYOwotICB2eSA9IGNvZWZWaXRlc3NlICogWTsKLQotICAvKiBBbXVsZXR0ZSAyICovCi0gIC8vIHZ4ID0gWCAqIHRhbihkaXN0KTsKLSAgLy8gdnkgPSBZICogdGFuKGRpc3QpOwotCi0gIC8qIFJvdGF0ZSAqLwotICAvL3Z4ID0gKFgrWSkqMC4xOwotICAvL3Z5ID0gKFktWCkqMC4xOwotCi0KLSAgLy8gRWZmZWN0cyBhZGRzLW9uCi0KLSAgLyogTm9pc2UgKi8KLSAgaWYgKGRhdGEtPm5vaXNpZnkpIHsKLSAgICB2eCArPSAoKChmbG9hdCkgcmFuZCAoKSkgLyAoKGZsb2F0KSBSQU5EX01BWCkgLSAwLjVmKSAvIDUwLjBmOwotICAgIHZ5ICs9ICgoKGZsb2F0KSByYW5kICgpKSAvICgoZmxvYXQpIFJBTkRfTUFYKSAtIDAuNWYpIC8gNTAuMGY7Ci0gIH0KLQotICAvKiBIeXBlcmNvcyAqLwotICBpZiAoZGF0YS0+aHlwZXJjb3NFZmZlY3QpIHsKLSAgICB2eCArPSBzaW4gKFkgKiAxMC4wZikgLyAxMjAuMGY7Ci0gICAgdnkgKz0gc2luIChYICogMTAuMGYpIC8gMTIwLjBmOwotICB9Ci0KLSAgLyogSCBQbGFuZSAqLwotICBpZiAoZGF0YS0+aFBsYW5lRWZmZWN0KQotICAgIHZ4ICs9IFkgKiAwLjAwMjVmICogZGF0YS0+aFBsYW5lRWZmZWN0OwotCi0gIC8qIFYgUGxhbmUgKi8KLSAgaWYgKGRhdGEtPnZQbGFuZUVmZmVjdCkKLSAgICB2eSArPSBYICogMC4wMDI1ZiAqIGRhdGEtPnZQbGFuZUVmZmVjdDsKLQotICAvKiBUT0RPIDogV2F0ZXIgTW9kZSAqLwotICAvLyAgICBpZiAoZGF0YS0+d2F2ZUVmZmVjdCkKLQotICB2ZWN0ZXVyLT54ID0gdng7Ci0gIHZlY3RldXItPnkgPSB2eTsKLX0KLQotCi0vKgotICogTWFrZXMgYSBzdHJpcGUgb2YgYSB0cmFuc2Zvcm0gYnVmZmVyIChicnV0VCkKLSAqCi0gKiBUaGUgdHJhbnNmb3JtIGlzIChpbiBvcmRlcikgOgotICogVHJhbnNsYXRpb24gKC1kYXRhLT5taWRkbGVYLCAtZGF0YS0+bWlkZGxlWSkKLSAqIEhvbW90aGV0aWUgKENlbnRlciA6IDAsMCAgIENvZWZmIDogMi9kYXRhLT5wcmV2WCkKLSAqLwotc3RhdGljIHZvaWQKLW1ha2Vab29tQnVmZmVyU3RyaXBlIChab29tRmlsdGVyRlhXcmFwcGVyRGF0YSAqIGRhdGEsIGludCBJTlRFUkxBQ0VfSU5DUikKLXsKLSAgLy8gUG9zaXRpb24gb2YgdGhlIHBpeGVsIHRvIGNvbXB1dGUgaW4gcGl4bWFwIGNvb3JkaW5hdGVzCi0gIFVpbnQgeCwgeTsKLQotICAvLyBXaGVyZSAodmVydGljYWx5KSB0byBzdG9wIGdlbmVyYXRpbmcgdGhlIGJ1ZmZlciBzdHJpcGUKLSAgaW50IG1heEVuZDsKLQotICAvLyBSYXRpbyBmcm9tIHBpeG1hcCB0byBub3JtYWxpemVkIGNvb3JkaW5hdGVzCi0gIGZsb2F0IHJhdGlvID0gMi4wZiAvICgoZmxvYXQpIGRhdGEtPnByZXZYKTsKLQotICAvLyBSYXRpbyBmcm9tIG5vcm1hbGl6ZWQgdG8gdmlydHVhbCBwaXhtYXAgY29vcmRpbmF0ZXMKLSAgZmxvYXQgaW52X3JhdGlvID0gQlVGRlBPSU5UTkJGIC8gcmF0aW87Ci0gIGZsb2F0IG1pbiA9IHJhdGlvIC8gQlVGRlBPSU5UTkJGOwotCi0gIC8vIFkgcG9zaXRpb24gb2YgdGhlIHBpeGVsIHRvIGNvbXB1dGUgaW4gbm9ybWFsaXplZCBjb29yZGluYXRlcwotICBmbG9hdCBZID0gKChmbG9hdCkgKGRhdGEtPmludGVybGFjZV9zdGFydCAtIGRhdGEtPm1pZGRsZVkpKSAqIHJhdGlvOwotCi0gIG1heEVuZCA9IGRhdGEtPnByZXZZOwotICBpZiAobWF4RW5kID4gKGRhdGEtPmludGVybGFjZV9zdGFydCArIElOVEVSTEFDRV9JTkNSKSkKLSAgICBtYXhFbmQgPSAoZGF0YS0+aW50ZXJsYWNlX3N0YXJ0ICsgSU5URVJMQUNFX0lOQ1IpOwotCi0gIGZvciAoeSA9IGRhdGEtPmludGVybGFjZV9zdGFydDsKLSAgICAgICh5IDwgZGF0YS0+cHJldlkpICYmICgoc2lnbmVkIGludCkgeSA8IG1heEVuZCk7IHkrKykgewotICAgIFVpbnQgcHJlbXVsX3lfcHJldlggPSB5ICogZGF0YS0+cHJldlggKiAyOwotICAgIGZsb2F0IFggPSAtKChmbG9hdCkgZGF0YS0+bWlkZGxlWCkgKiByYXRpbzsKLQotICAgIGZvciAoeCA9IDA7IHggPCBkYXRhLT5wcmV2WDsgeCsrKSB7Ci0gICAgICB2MmcgdmVjdG9yOwotCi0gICAgICB6b29tVmVjdG9yICgmdmVjdG9yLCBkYXRhLCBYLCBZKTsKLQotICAgICAgLyogRmluaXNoIGFuZCBhdm9pZCBudWxsIGRpc3BsYWNlbWVudCAqLwotICAgICAgaWYgKGZhYnMgKHZlY3Rvci54KSA8IG1pbikKLSAgICAgICAgdmVjdG9yLnggPSAodmVjdG9yLnggPCAwLjBmKSA/IC1taW4gOiBtaW47Ci0gICAgICBpZiAoZmFicyAodmVjdG9yLnkpIDwgbWluKQotICAgICAgICB2ZWN0b3IueSA9ICh2ZWN0b3IueSA8IDAuMGYpID8gLW1pbiA6IG1pbjsKLQotICAgICAgZGF0YS0+YnJ1dFRbcHJlbXVsX3lfcHJldlhdID0KLSAgICAgICAgICAoKGludCkgKChYIC0gdmVjdG9yLngpICogaW52X3JhdGlvKSArCi0gICAgICAgICAgKChpbnQpIChkYXRhLT5taWRkbGVYICogQlVGRlBPSU5UTkIpKSk7Ci0gICAgICBkYXRhLT5icnV0VFtwcmVtdWxfeV9wcmV2WCArIDFdID0KLSAgICAgICAgICAoKGludCkgKChZIC0gdmVjdG9yLnkpICogaW52X3JhdGlvKSArCi0gICAgICAgICAgKChpbnQpIChkYXRhLT5taWRkbGVZICogQlVGRlBPSU5UTkIpKSk7Ci0gICAgICBwcmVtdWxfeV9wcmV2WCArPSAyOwotICAgICAgWCArPSByYXRpbzsKLSAgICB9Ci0gICAgWSArPSByYXRpbzsKLSAgfQotICBkYXRhLT5pbnRlcmxhY2Vfc3RhcnQgKz0gSU5URVJMQUNFX0lOQ1I7Ci0gIGlmICh5ID49IGRhdGEtPnByZXZZIC0gMSkKLSAgICBkYXRhLT5pbnRlcmxhY2Vfc3RhcnQgPSAtMTsKLX0KLQotCi0vKgotICogY2FsY3VsZXIgcHggZXQgcHkgZW4gZm9uY3Rpb24gZGUgeCx5LG1pZGRsZVgsbWlkZGxlWSBldCB0aGVNb2RlCi0gKiBweCBldCBweSBpbmRpcXVlIGxhIG5vdXZlbGxlIHBvc2l0aW9uIChlbiBzcXJ0cGVydGUgaWVtZSBkZSBwaXhlbCkKLSAqICh2YWxldXIgKiAxNikKLSAKLSBpbmxpbmUgdm9pZCBjYWxjdWxhdGVQWGFuZFBZIChQbHVnaW5JbmZvICpnb29tSW5mbywgWm9vbUZpbHRlckZYV3JhcHBlckRhdGEgKmRhdGEsIGludCB4LCBpbnQgeSwgaW50ICpweCwgaW50ICpweSkKLSB7Ci0gICAgIGlmIChkYXRhLT50aGVNb2RlID09IFdBVEVSX01PREUpIHsKLSAgICAgICAgIGludCB5eTsKLSAgICAgICAgIAotICAgICAgICAgeXkgPSB5ICsgZ29vbV9pcmFuZChnb29tSW5mby0+Z1JhbmRvbSwgNCkgLSBnb29tX2lyYW5kKGdvb21JbmZvLT5nUmFuZG9tLCA0KSArIGRhdGEtPndhdmUgLyAxMDsKLSAgICAgICAgIGlmICh5eSA8IDApCi0gICAgICAgICAgICAgeXkgPSAwOwotICAgICAgICAgaWYgKHl5ID49IChzaWduZWQgaW50KWdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0KQotICAgICAgICAgICAgIHl5ID0gZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQgLSAxOwotICAgICAgICAgCi0gICAgICAgICAqcHggPSAoeCA8PCA0KSArIGRhdGEtPmZpcmVkZWNbeXldICsgKGRhdGEtPndhdmUgLyAxMCk7Ci0gICAgICAgICAqcHkgPSAoeSA8PCA0KSArIDEzMiAtICgoZGF0YS0+dml0ZXNzZSA8IDEzMSkgPyBkYXRhLT52aXRlc3NlIDogMTMwKTsKLSAgICAgICAgIAotICAgICAgICAgZGF0YS0+d2F2ZXNwICs9IGdvb21faXJhbmQoZ29vbUluZm8tPmdSYW5kb20sIDMpIC0gZ29vbV9pcmFuZChnb29tSW5mby0+Z1JhbmRvbSwgMyk7Ci0gICAgICAgICBpZiAoZGF0YS0+d2F2ZSA8IC0xMCkKLSAgICAgICAgICAgICBkYXRhLT53YXZlc3AgKz0gMjsKLSAgICAgICAgIGlmIChkYXRhLT53YXZlID4gMTApCi0gICAgICAgICAgICAgZGF0YS0+d2F2ZXNwIC09IDI7Ci0gICAgICAgICBkYXRhLT53YXZlICs9IChkYXRhLT53YXZlc3AgLyAxMCkgKyBnb29tX2lyYW5kKGdvb21JbmZvLT5nUmFuZG9tLCAzKSAtIGdvb21faXJhbmQoZ29vbUluZm8tPmdSYW5kb20sIDMpOwotICAgICAgICAgaWYgKGRhdGEtPndhdmVzcCA+IDEwMCkKLSAgICAgICAgICAgICBkYXRhLT53YXZlc3AgPSAoZGF0YS0+d2F2ZXNwICogOSkgLyAxMDsKLSAgICAgfQotICAgICBlbHNlIHsKLSAgICAgICAgIGludCAgICAgZGlzdCA9IDAsIHZ4OSwgdnk5OwotICAgICAgICAgaW50ICAgICB2eCwgdnk7Ci0gICAgICAgICBpbnQgICAgIHBweCwgcHB5OwotICAgICAgICAgaW50ICAgICBmdml0ZXNzZSA9IGRhdGEtPnZpdGVzc2UgPDwgNDsKLSAgICAgICAgIAotICAgICAgICAgaWYgKGRhdGEtPm5vaXNpZnkpIHsKLSAgICAgICAgICAgICB4ICs9IGdvb21faXJhbmQoZ29vbUluZm8tPmdSYW5kb20sIGRhdGEtPm5vaXNpZnkpIC0gZ29vbV9pcmFuZChnb29tSW5mby0+Z1JhbmRvbSwgZGF0YS0+bm9pc2lmeSk7Ci0gICAgICAgICAgICAgeSArPSBnb29tX2lyYW5kKGdvb21JbmZvLT5nUmFuZG9tLCBkYXRhLT5ub2lzaWZ5KSAtIGdvb21faXJhbmQoZ29vbUluZm8tPmdSYW5kb20sIGRhdGEtPm5vaXNpZnkpOwotICAgICAgICAgfQotICAgICAgICAgdnggPSAoeCAtIGRhdGEtPm1pZGRsZVgpIDw8IDk7Ci0gICAgICAgICB2eSA9ICh5IC0gZGF0YS0+bWlkZGxlWSkgPDwgOTsKLSAgICAgICAgIAotICAgICAgICAgaWYgKGRhdGEtPmhQbGFuZUVmZmVjdCkKLSAgICAgICAgICAgICB2eCArPSBkYXRhLT5oUGxhbmVFZmZlY3QgKiAoeSAtIGRhdGEtPm1pZGRsZVkpOwotICAgICAgICAgCi0gICAgICAgICBpZiAoZGF0YS0+dlBsYW5lRWZmZWN0KQotICAgICAgICAgICAgIHZ5ICs9IGRhdGEtPnZQbGFuZUVmZmVjdCAqICh4IC0gZGF0YS0+bWlkZGxlWCk7Ci0gICAgICAgICAKLSAgICAgICAgIGlmIChkYXRhLT53YXZlRWZmZWN0KSB7Ci0gICAgICAgICAgICAgZnZpdGVzc2UgKj0KLSAgICAgICAgICAgICAxMDI0ICsKLSAgICAgICAgICAgICBTaGlmdFJpZ2h0IChnb29tSW5mby0+c2ludGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBbKHVuc2lnbmVkIHNob3J0KSAoZGlzdCAqIDB4ZmZmZiArIEVGRkVDVF9ESVNUT1JTKV0sIDYpOwotICAgICAgICAgICAgIGZ2aXRlc3NlIC89IDEwMjQ7Ci0gICAgICAgICB9Ci0gICAgICAgICAKLSAgICAgICAgIGlmIChkYXRhLT5oeXBlcmNvc0VmZmVjdCkgewotICAgICAgICAgICAgIHZ4ICs9IFNoaWZ0UmlnaHQgKGdvb21JbmZvLT5zaW50YWJsZVsoLXZ5ICsgZGlzdCkgJiAweGZmZmZdLCAxKTsKLSAgICAgICAgICAgICB2eSArPSBTaGlmdFJpZ2h0IChnb29tSW5mby0+c2ludGFibGVbKHZ4ICsgZGlzdCkgJiAweGZmZmZdLCAxKTsKLSAgICAgICAgIH0KLSAgICAgICAgIAotICAgICAgICAgdng5ID0gU2hpZnRSaWdodCAodngsIDkpOwotICAgICAgICAgdnk5ID0gU2hpZnRSaWdodCAodnksIDkpOwotICAgICAgICAgZGlzdCA9IHZ4OSAqIHZ4OSArIHZ5OSAqIHZ5OTsKLSAgICAgICAgIAotICAgICAgICAgc3dpdGNoIChkYXRhLT50aGVNb2RlKSB7Ci0gICAgICAgICAgICAgY2FzZSBXQVZFX01PREU6Ci0gICAgICAgICAgICAgICAgIGZ2aXRlc3NlICo9Ci0gICAgICAgICAgICAgICAgIDEwMjQgKwotICAgICAgICAgICAgICAgICBTaGlmdFJpZ2h0IChnb29tSW5mby0+c2ludGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh1bnNpZ25lZCBzaG9ydCkgKGRpc3QgKiAweGZmZmYgKiBFRkZFQ1RfRElTVE9SUyldLCA2KTsKLSAgICAgICAgICAgICAgICAgZnZpdGVzc2U+Pj0xMDsKLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSBDUllTVEFMX0JBTExfTU9ERToKLSAgICAgICAgICAgICAgICAgZnZpdGVzc2UgKz0gKGRpc3QgPj4gKDEwLUVGRkVDVF9ESVNUT1JTX1NMKSk7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGNhc2UgQU1VTEVUVEVfTU9ERToKLSAgICAgICAgICAgICAgICAgZnZpdGVzc2UgLT0gKGRpc3QgPj4gKDQgLSBFRkZFQ1RfRElTVE9SU19TTCkpOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlIFNDUlVOQ0hfTU9ERToKLSAgICAgICAgICAgICAgICAgZnZpdGVzc2UgLT0gKGRpc3QgPj4gKDEwIC0gRUZGRUNUX0RJU1RPUlNfU0wpKTsKLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgY2FzZSBIWVBFUkNPUzFfTU9ERToKLSAgICAgICAgICAgICAgICAgdnggPSB2eCArIFNoaWZ0UmlnaHQgKGdvb21JbmZvLT5zaW50YWJsZVsoLXZ5ICsgZGlzdCkgJiAweGZmZmZdLCAxKTsKLSAgICAgICAgICAgICAgICAgdnkgPSB2eSArIFNoaWZ0UmlnaHQgKGdvb21JbmZvLT5zaW50YWJsZVsodnggKyBkaXN0KSAmIDB4ZmZmZl0sIDEpOwotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlIEhZUEVSQ09TMl9NT0RFOgotICAgICAgICAgICAgICAgICB2eCA9Ci0gICAgICAgICAgICAgICAgIHZ4ICsgU2hpZnRSaWdodCAoZ29vbUluZm8tPnNpbnRhYmxlWygtU2hpZnRSaWdodCAodnksIDEpICsgZGlzdCkgJiAweGZmZmZdLCAwKTsKLSAgICAgICAgICAgICAgICAgdnkgPQotICAgICAgICAgICAgICAgICAgICAgdnkgKyBTaGlmdFJpZ2h0IChnb29tSW5mby0+c2ludGFibGVbKFNoaWZ0UmlnaHQgKHZ4LCAxKSArIGRpc3QpICYgMHhmZmZmXSwgMCk7Ci0gICAgICAgICAgICAgICAgIGZ2aXRlc3NlID0gMTI4IDw8IDQ7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGNhc2UgWU9OTFlfTU9ERToKLSAgICAgICAgICAgICAgICAgZnZpdGVzc2UgKj0gMTAyNCArIFNoaWZ0UmlnaHQgKGdvb21JbmZvLT5zaW50YWJsZVt2eSAmIDB4ZmZmZl0sIDYpOwotICAgICAgICAgICAgICAgICBmdml0ZXNzZSA+Pj0gMTA7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgIGNhc2UgU1BFRURXQVlfTU9ERToKLSAgICAgICAgICAgICAgICAgZnZpdGVzc2UgLT0gKFNoaWZ0UmlnaHQodnksMTAtRUZGRUNUX0RJU1RPUlNfU0wpKTsKLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0gICAgICAgICAKLSAgICAgICAgIGlmIChmdml0ZXNzZSA8IC0zMDI0KQotICAgICAgICAgICAgIGZ2aXRlc3NlID0gLTMwMjQ7Ci0gICAgICAgICAKLSAgICAgICAgIGlmICh2eCA8IDApCQkJCQkJCQkJLy8gcGIgYXZlYyBkZWNhbGFnZSBzdXIgbmIgbmVnYXRpZgotICAgICAgICAgICAgIHBweCA9IC0oLSh2eCAqIGZ2aXRlc3NlKSA+PiAxNik7Ci0gICAgICAgICAvLyAxNiA9IDkgKyA3ICg3ID0gbmIgY2hpZmZyZSB2aXJndWxlIGRlIHZpdGVzc2UgKiAodiA9IDEyOCA9PiBpbW1vYmlsZSkKLSAgICAgICAgIC8vICAgICogKiAqICogKiA5ID0gbmIgY2hpZmZyZSB2aXJndWxlIGRlIHZ4KSAKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICBwcHggPSAoKHZ4ICogZnZpdGVzc2UpID4+IDE2KTsKLSAgICAgICAgIAotICAgICAgICAgaWYgKHZ5IDwgMCkKLSAgICAgICAgICAgICBwcHkgPSAtKC0odnkgKiBmdml0ZXNzZSkgPj4gMTYpOwotICAgICAgICAgZWxzZQotICAgICAgICAgICAgIHBweSA9ICgodnkgKiBmdml0ZXNzZSkgPj4gMTYpOwotICAgICAgICAgCi0gICAgICAgICAqcHggPSAoZGF0YS0+bWlkZGxlWCA8PCA0KSArIHBweDsKLSAgICAgICAgICpweSA9IChkYXRhLT5taWRkbGVZIDw8IDQpICsgcHB5OwotICAgICB9Ci0gfQotICovCi0KLQotCi1zdGF0aWMgdm9pZAotY196b29tIChQaXhlbCAqIGV4cGl4MSwgUGl4ZWwgKiBleHBpeDIsIHVuc2lnbmVkIGludCBwcmV2WCwgdW5zaWduZWQgaW50IHByZXZZLAotICAgIHNpZ25lZCBpbnQgKmJydXRTLCBzaWduZWQgaW50ICpicnV0RCwgaW50IGJ1ZmZyYXRpbywgaW50IHByZWNhbENvZWZbMTZdWzE2XSkKLXsKLSAgaW50IG15UG9zLCBteVBvczI7Ci0gIENvbG9yIGNvdWxldXI7Ci0KLSAgdW5zaWduZWQgaW50IGF4ID0gKHByZXZYIC0gMSkgPDwgUEVSVEVERUMsIGF5ID0gKHByZXZZIC0gMSkgPDwgUEVSVEVERUM7Ci0KLSAgaW50IGJ1ZnNpemUgPSBwcmV2WCAqIHByZXZZICogMjsKLSAgaW50IGJ1ZndpZHRoID0gcHJldlg7Ci0KLSAgZXhwaXgxWzBdLnZhbCA9IGV4cGl4MVtwcmV2WCAtIDFdLnZhbCA9IGV4cGl4MVtwcmV2WCAqIHByZXZZIC0gMV0udmFsID0KLSAgICAgIGV4cGl4MVtwcmV2WCAqIHByZXZZIC0gcHJldlhdLnZhbCA9IDA7Ci0KLSAgZm9yIChteVBvcyA9IDA7IG15UG9zIDwgYnVmc2l6ZTsgbXlQb3MgKz0gMikgewotICAgIENvbG9yIGNvbDEsIGNvbDIsIGNvbDMsIGNvbDQ7Ci0gICAgaW50IGMxLCBjMiwgYzMsIGM0LCBweCwgcHk7Ci0gICAgaW50IHBvczsKLSAgICBpbnQgY29lZmZzOwotCi0gICAgaW50IGJydXRTbXlwb3MgPSBicnV0U1tteVBvc107Ci0KLSAgICBteVBvczIgPSBteVBvcyArIDE7Ci0KLSAgICBweCA9IGJydXRTbXlwb3MgKyAoKChicnV0RFtteVBvc10gLQotICAgICAgICAgICAgICAgIGJydXRTbXlwb3MpICogYnVmZnJhdGlvKSA+PiBCVUZGUE9JTlROQik7Ci0gICAgYnJ1dFNteXBvcyA9IGJydXRTW215UG9zMl07Ci0gICAgcHkgPSBicnV0U215cG9zICsgKCgoYnJ1dERbbXlQb3MyXSAtCi0gICAgICAgICAgICAgICAgYnJ1dFNteXBvcykgKiBidWZmcmF0aW8pID4+IEJVRkZQT0lOVE5CKTsKLQotICAgIGlmICgocHkgPj0gYXkpIHx8IChweCA+PSBheCkpIHsKLSAgICAgIHBvcyA9IGNvZWZmcyA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBvcyA9ICgocHggPj4gUEVSVEVERUMpICsgcHJldlggKiAocHkgPj4gUEVSVEVERUMpKTsKLSAgICAgIC8qIGNvZWYgZW4gbW9kdWxvIDE1ICovCi0gICAgICBjb2VmZnMgPSBwcmVjYWxDb2VmW3B4ICYgUEVSVEVNQVNLXVtweSAmIFBFUlRFTUFTS107Ci0gICAgfQotICAgIGdldFBpeGVsUkdCXyAoZXhwaXgxLCBwb3MsICZjb2wxKTsKLSAgICBnZXRQaXhlbFJHQl8gKGV4cGl4MSwgcG9zICsgMSwgJmNvbDIpOwotICAgIGdldFBpeGVsUkdCXyAoZXhwaXgxLCBwb3MgKyBidWZ3aWR0aCwgJmNvbDMpOwotICAgIGdldFBpeGVsUkdCXyAoZXhwaXgxLCBwb3MgKyBidWZ3aWR0aCArIDEsICZjb2w0KTsKLQotICAgIGMxID0gY29lZmZzOwotICAgIGMyID0gKGMxID4+IDgpICYgMHhGRjsKLSAgICBjMyA9IChjMSA+PiAxNikgJiAweEZGOwotICAgIGM0ID0gKGMxID4+IDI0KSAmIDB4RkY7Ci0gICAgYzEgPSBjMSAmIDB4ZmY7Ci0KLSAgICBjb3VsZXVyLnIgPSBjb2wxLnIgKiBjMSArIGNvbDIuciAqIGMyICsgY29sMy5yICogYzMgKyBjb2w0LnIgKiBjNDsKLSAgICBpZiAoY291bGV1ci5yID4gNSkKLSAgICAgIGNvdWxldXIuciAtPSA1OwotICAgIGNvdWxldXIuciA+Pj0gODsKLQotICAgIGNvdWxldXIudiA9IGNvbDEudiAqIGMxICsgY29sMi52ICogYzIgKyBjb2wzLnYgKiBjMyArIGNvbDQudiAqIGM0OwotICAgIGlmIChjb3VsZXVyLnYgPiA1KQotICAgICAgY291bGV1ci52IC09IDU7Ci0gICAgY291bGV1ci52ID4+PSA4OwotCi0gICAgY291bGV1ci5iID0gY29sMS5iICogYzEgKyBjb2wyLmIgKiBjMiArIGNvbDMuYiAqIGMzICsgY29sNC5iICogYzQ7Ci0gICAgaWYgKGNvdWxldXIuYiA+IDUpCi0gICAgICBjb3VsZXVyLmIgLT0gNTsKLSAgICBjb3VsZXVyLmIgPj49IDg7Ci0KLSAgICBzZXRQaXhlbFJHQl8gKGV4cGl4MiwgbXlQb3MgPj4gMSwgY291bGV1cik7Ci0gIH0KLX0KLQotLyoqIGdlbmVyYXRlIHRoZSB3YXRlciBmeCBob3Jpem9udGFsIGRpcmVjdGlvbiBidWZmZXIgKi8KLXN0YXRpYyB2b2lkCi1nZW5lcmF0ZVRoZVdhdGVyRlhIb3Jpem9udGFsRGlyZWN0aW9uQnVmZmVyIChQbHVnaW5JbmZvICogZ29vbUluZm8sCi0gICAgWm9vbUZpbHRlckZYV3JhcHBlckRhdGEgKiBkYXRhKQotewotCi0gIGludCBsb29wdjsKLSAgaW50IGRlY2MgPSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgOCkgLSA0OwotICBpbnQgc3BkYyA9IGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCA4KSAtIDQ7Ci0gIGludCBhY2NlbCA9IGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCA4KSAtIDQ7Ci0KLSAgZm9yIChsb29wdiA9IGRhdGEtPnByZXZZOyBsb29wdiAhPSAwOykgewotCi0gICAgbG9vcHYtLTsKLSAgICBkYXRhLT5maXJlZGVjW2xvb3B2XSA9IGRlY2M7Ci0gICAgZGVjYyArPSBzcGRjIC8gMTA7Ci0gICAgc3BkYyArPQotICAgICAgICBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMykgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMyk7Ci0KLSAgICBpZiAoZGVjYyA+IDQpCi0gICAgICBzcGRjIC09IDE7Ci0gICAgaWYgKGRlY2MgPCAtNCkKLSAgICAgIHNwZGMgKz0gMTsKLQotICAgIGlmIChzcGRjID4gMzApCi0gICAgICBzcGRjID0gc3BkYyAtIGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAzKSArIGFjY2VsIC8gMTA7Ci0gICAgaWYgKHNwZGMgPCAtMzApCi0gICAgICBzcGRjID0gc3BkYyArIGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAzKSArIGFjY2VsIC8gMTA7Ci0KLSAgICBpZiAoZGVjYyA+IDggJiYgc3BkYyA+IDEpCi0gICAgICBzcGRjIC09IGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAzKSAtIDI7Ci0KLSAgICBpZiAoZGVjYyA8IC04ICYmIHNwZGMgPCAtMSkKLSAgICAgIHNwZGMgKz0gZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDMpICsgMjsKLQotICAgIGlmIChkZWNjID4gOCB8fCBkZWNjIDwgLTgpCi0gICAgICBkZWNjID0gZGVjYyAqIDggLyA5OwotCi0gICAgYWNjZWwgKz0KLSAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDIpIC0gZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDIpOwotICAgIGlmIChhY2NlbCA+IDIwKQotICAgICAgYWNjZWwgLT0gMjsKLSAgICBpZiAoYWNjZWwgPCAtMjApCi0gICAgICBhY2NlbCArPSAyOwotICB9Ci19Ci0KLQotCi0vKioKLSogTWFpbiB3b3JrIGZvciB0aGUgZHluYW1pYyBkaXNwbGFjZW1lbnQgbWFwLgotICogCi0gKiBSZWFkcyBkYXRhIGZyb20gcGl4MSwgd3JpdGUgdG8gcGl4Mi4KLSAqCi0gKiBVc2VmdWwgZGF0YXMgZm9yIHRoaXMgRlggYXJlIHN0b3JlZCBpbiBab29tRmlsdGVyRGF0YS4KLSAqIAotICogSWYgeW91IHRoaW5rIHRoYXQgdGhpcyBpcyBhIHN0cmFuZ2UgZnVuY3Rpb24gbmFtZSwgbGV0IG1lIHNheSB0aGF0IGEgbG9uZyB0aW1lIGFnbywKLSAqICB0aGVyZSBoYXMgYmVlbiBhIHNsb3cgdmVyc2lvbiBhbmQgYSBncmF5LWxldmVsIG9ubHkgb25lLiBUaGVuIGNhbWUgdGhlc2UgZnVuY3Rpb24sCi0gKiAgZmFzdCBhbmQgd29ya2luIGluIFJHQiBjb2xvcnNwYWNlICEgbmljZSBidXQgaXQgb25seSB3YXMgYXBwbHlpbmcgYSB6b29tIHRvIHRoZSBpbWFnZS4KLSAqICBTbyB0aGF0IGlzIHdoeSB5b3UgaGF2ZSB0aGlzIG5hbWUsIGZvciB0aGUgbm9zdGFsZ3kgb2YgdGhlIGZpcnN0IGRheXMgb2YgZ29vbQotICogIHdoZW4gaXQgd2FzIGp1c3QgYSB0aW55IHByb2dyYW0gd3JpdGVuIGluIFR1cmJvIFBhc2NhbCBvbiBteSBpNDg2Li4uCi0gKi8KLXZvaWQKLXpvb21GaWx0ZXJGYXN0UkdCIChQbHVnaW5JbmZvICogZ29vbUluZm8sIFBpeGVsICogcGl4MSwgUGl4ZWwgKiBwaXgyLAotICAgIFpvb21GaWx0ZXJEYXRhICogemYsIFVpbnQgcmVzeCwgVWludCByZXN5LCBpbnQgc3dpdGNoSW5jciwgZmxvYXQgc3dpdGNoTXVsdCkKLXsKLSAgVWludCB4LCB5OwotCi0gIFpvb21GaWx0ZXJGWFdyYXBwZXJEYXRhICpkYXRhID0KLSAgICAgIChab29tRmlsdGVyRlhXcmFwcGVyRGF0YSAqKSBnb29tSW5mby0+em9vbUZpbHRlcl9meC5meF9kYXRhOwotCi0gIGlmICghQlZBTCAoZGF0YS0+ZW5hYmxlZF9icCkpCi0gICAgcmV0dXJuOwotCi0gICAgLyoqIGNoYW5nZW1lbnQgZGUgdGFpbGxlICoqLwotICBpZiAoKGRhdGEtPnByZXZYICE9IHJlc3gpIHx8IChkYXRhLT5wcmV2WSAhPSByZXN5KSkgewotICAgIGRhdGEtPnByZXZYID0gcmVzeDsKLSAgICBkYXRhLT5wcmV2WSA9IHJlc3k7Ci0KLSAgICBpZiAoZGF0YS0+YnJ1dFMpCi0gICAgICBmcmVlIChkYXRhLT5mcmVlYnJ1dFMpOwotICAgIGRhdGEtPmJydXRTID0gMDsKLSAgICBpZiAoZGF0YS0+YnJ1dEQpCi0gICAgICBmcmVlIChkYXRhLT5mcmVlYnJ1dEQpOwotICAgIGRhdGEtPmJydXREID0gMDsKLSAgICBpZiAoZGF0YS0+YnJ1dFQpCi0gICAgICBmcmVlIChkYXRhLT5mcmVlYnJ1dFQpOwotICAgIGRhdGEtPmJydXRUID0gMDsKLQotICAgIGRhdGEtPm1pZGRsZVggPSByZXN4IC8gMjsKLSAgICBkYXRhLT5taWRkbGVZID0gcmVzeSAvIDI7Ci0gICAgZGF0YS0+bXVzdEluaXRCdWZmZXJzID0gMTsKLSAgICBpZiAoZGF0YS0+ZmlyZWRlYykKLSAgICAgIGZyZWUgKGRhdGEtPmZpcmVkZWMpOwotICAgIGRhdGEtPmZpcmVkZWMgPSAwOwotICB9Ci0KLSAgaWYgKGRhdGEtPmludGVybGFjZV9zdGFydCAhPSAtMikKLSAgICB6ZiA9IE5VTEw7Ci0KLSAgICAvKiogY2hhbmdlbWVudCBkZSBjb25maWcgKiovCi0gIGlmICh6ZikgewotICAgIGRhdGEtPnJldmVyc2UgPSB6Zi0+cmV2ZXJzZTsKLSAgICBkYXRhLT5nZW5lcmFsX3NwZWVkID0gKGZsb2F0KSAoemYtPnZpdGVzc2UgLSAxMjgpIC8gMTI4LjBmOwotICAgIGlmIChkYXRhLT5yZXZlcnNlKQotICAgICAgZGF0YS0+Z2VuZXJhbF9zcGVlZCA9IC1kYXRhLT5nZW5lcmFsX3NwZWVkOwotICAgIGRhdGEtPm1pZGRsZVggPSB6Zi0+bWlkZGxlWDsKLSAgICBkYXRhLT5taWRkbGVZID0gemYtPm1pZGRsZVk7Ci0gICAgZGF0YS0+dGhlTW9kZSA9IHpmLT5tb2RlOwotICAgIGRhdGEtPmhQbGFuZUVmZmVjdCA9IHpmLT5oUGxhbmVFZmZlY3Q7Ci0gICAgZGF0YS0+dlBsYW5lRWZmZWN0ID0gemYtPnZQbGFuZUVmZmVjdDsKLSAgICBkYXRhLT53YXZlRWZmZWN0ID0gemYtPndhdmVFZmZlY3Q7Ci0gICAgZGF0YS0+aHlwZXJjb3NFZmZlY3QgPSB6Zi0+aHlwZXJjb3NFZmZlY3Q7Ci0gICAgZGF0YS0+bm9pc2lmeSA9IHpmLT5ub2lzaWZ5OwotICAgIGRhdGEtPmludGVybGFjZV9zdGFydCA9IDA7Ci0gIH0KLQotCi0gIGlmIChkYXRhLT5tdXN0SW5pdEJ1ZmZlcnMpIHsKLQotICAgIGRhdGEtPm11c3RJbml0QnVmZmVycyA9IDA7Ci0gICAgZGF0YS0+ZnJlZWJydXRTID0KLSAgICAgICAgKHNpZ25lZCBpbnQgKikgY2FsbG9jIChyZXN4ICogcmVzeSAqIDIgKyAxMjgsIHNpemVvZiAodW5zaWduZWQgaW50KSk7Ci0gICAgZGF0YS0+YnJ1dFMgPQotICAgICAgICAoZ2ludDMyICopICgoMSArICgodWludHB0cl90KSAoZGF0YS0+ZnJlZWJydXRTKSkgLyAxMjgpICogMTI4KTsKLQotICAgIGRhdGEtPmZyZWVicnV0RCA9Ci0gICAgICAgIChzaWduZWQgaW50ICopIGNhbGxvYyAocmVzeCAqIHJlc3kgKiAyICsgMTI4LCBzaXplb2YgKHVuc2lnbmVkIGludCkpOwotICAgIGRhdGEtPmJydXREID0KLSAgICAgICAgKGdpbnQzMiAqKSAoKDEgKyAoKHVpbnRwdHJfdCkgKGRhdGEtPmZyZWVicnV0RCkpIC8gMTI4KSAqIDEyOCk7Ci0KLSAgICBkYXRhLT5mcmVlYnJ1dFQgPQotICAgICAgICAoc2lnbmVkIGludCAqKSBjYWxsb2MgKHJlc3ggKiByZXN5ICogMiArIDEyOCwgc2l6ZW9mICh1bnNpZ25lZCBpbnQpKTsKLSAgICBkYXRhLT5icnV0VCA9Ci0gICAgICAgIChnaW50MzIgKikgKCgxICsgKCh1aW50cHRyX3QpIChkYXRhLT5mcmVlYnJ1dFQpKSAvIDEyOCkgKiAxMjgpOwotCi0gICAgZGF0YS0+YnVmZnJhdGlvID0gMDsKLQotICAgIGRhdGEtPmZpcmVkZWMgPSAoaW50ICopIG1hbGxvYyAoZGF0YS0+cHJldlkgKiBzaXplb2YgKGludCkpOwotICAgIGdlbmVyYXRlVGhlV2F0ZXJGWEhvcml6b250YWxEaXJlY3Rpb25CdWZmZXIgKGdvb21JbmZvLCBkYXRhKTsKLQotICAgIGRhdGEtPmludGVybGFjZV9zdGFydCA9IDA7Ci0gICAgbWFrZVpvb21CdWZmZXJTdHJpcGUgKGRhdGEsIHJlc3kpOwotCi0gICAgLyogQ29weSB0aGUgZGF0YSBmcm9tIHRlbXAgdG8gZGVzdCBhbmQgc291cmNlICovCi0gICAgbWVtY3B5IChkYXRhLT5icnV0UywgZGF0YS0+YnJ1dFQsIHJlc3ggKiByZXN5ICogMiAqIHNpemVvZiAoaW50KSk7Ci0gICAgbWVtY3B5IChkYXRhLT5icnV0RCwgZGF0YS0+YnJ1dFQsIHJlc3ggKiByZXN5ICogMiAqIHNpemVvZiAoaW50KSk7Ci0gIH0KLQotICAvKiBnZW5lcmF0aW9uIGR1IGJ1ZmZlciBkZSB0cmFucyAqLwotICBpZiAoZGF0YS0+aW50ZXJsYWNlX3N0YXJ0ID09IC0xKSB7Ci0KLSAgICAvKiBzYXV2ZWdhcmRlIGRlIGwnZXRhdCBhY3R1ZWwgZGFucyBsYSBub3V2ZWxsZSBzb3VyY2UKLSAgICAgKiBUT0RPOiB3cml0ZSB0aGF0IGluIE1NWCAoaGFzIGJlZW4gZG9uZSBpbiBwcmV2aW91cyB2ZXJzaW9uLCBidXQgZGlkIG5vdCBmb2xsb3cgc29tZSBuZXcgZm9uY3Rpb25uYWxpdGllcykgKi8KLSAgICB5ID0gZGF0YS0+cHJldlggKiBkYXRhLT5wcmV2WSAqIDI7Ci0gICAgZm9yICh4ID0gMDsgeCA8IHk7IHggKz0gMikgewotICAgICAgaW50IGJydXRTbXlwb3MgPSBkYXRhLT5icnV0U1t4XTsKLSAgICAgIGludCB4MiA9IHggKyAxOwotCi0gICAgICBkYXRhLT5icnV0U1t4XSA9Ci0gICAgICAgICAgYnJ1dFNteXBvcyArICgoKGRhdGEtPmJydXREW3hdIC0KLSAgICAgICAgICAgICAgICAgIGJydXRTbXlwb3MpICogZGF0YS0+YnVmZnJhdGlvKSA+PiBCVUZGUE9JTlROQik7Ci0gICAgICBicnV0U215cG9zID0gZGF0YS0+YnJ1dFNbeDJdOwotICAgICAgZGF0YS0+YnJ1dFNbeDJdID0KLSAgICAgICAgICBicnV0U215cG9zICsgKCgoZGF0YS0+YnJ1dERbeDJdIC0KLSAgICAgICAgICAgICAgICAgIGJydXRTbXlwb3MpICogZGF0YS0+YnVmZnJhdGlvKSA+PiBCVUZGUE9JTlROQik7Ci0gICAgfQotICAgIGRhdGEtPmJ1ZmZyYXRpbyA9IDA7Ci0gIH0KLQotICBpZiAoZGF0YS0+aW50ZXJsYWNlX3N0YXJ0ID09IC0xKSB7Ci0gICAgc2lnbmVkIGludCAqdG1wOwotCi0gICAgdG1wID0gZGF0YS0+YnJ1dEQ7Ci0gICAgZGF0YS0+YnJ1dEQgPSBkYXRhLT5icnV0VDsKLSAgICBkYXRhLT5icnV0VCA9IHRtcDsKLSAgICB0bXAgPSBkYXRhLT5mcmVlYnJ1dEQ7Ci0gICAgZGF0YS0+ZnJlZWJydXREID0gZGF0YS0+ZnJlZWJydXRUOwotICAgIGRhdGEtPmZyZWVicnV0VCA9IHRtcDsKLSAgICBkYXRhLT5pbnRlcmxhY2Vfc3RhcnQgPSAtMjsKLSAgfQotCi0gIGlmIChkYXRhLT5pbnRlcmxhY2Vfc3RhcnQgPj0gMCkgewotICAgIC8qIGNyZWF0aW9uIGRlIGxhIG5vdXZlbGxlIGRlc3RpbmF0aW9uICovCi0gICAgbWFrZVpvb21CdWZmZXJTdHJpcGUgKGRhdGEsIHJlc3kgLyAxNik7Ci0gIH0KLQotICBpZiAoc3dpdGNoSW5jciAhPSAwKSB7Ci0gICAgZGF0YS0+YnVmZnJhdGlvICs9IHN3aXRjaEluY3I7Ci0gICAgaWYgKGRhdGEtPmJ1ZmZyYXRpbyA+IEJVRkZQT0lOVE1BU0spCi0gICAgICBkYXRhLT5idWZmcmF0aW8gPSBCVUZGUE9JTlRNQVNLOwotICB9Ci0KLSAgaWYgKHN3aXRjaE11bHQgIT0gMS4wZikgewotICAgIGRhdGEtPmJ1ZmZyYXRpbyA9IChpbnQpICgoZmxvYXQpIEJVRkZQT0lOVE1BU0sgKiAoMS4wZiAtIHN3aXRjaE11bHQpICsKLSAgICAgICAgKGZsb2F0KSBkYXRhLT5idWZmcmF0aW8gKiBzd2l0Y2hNdWx0KTsKLSAgfQotCi0gIGRhdGEtPnpvb21fd2lkdGggPSBkYXRhLT5wcmV2WDsKLQotICBnb29tSW5mby0+bWV0aG9kcy56b29tX2ZpbHRlciAoZGF0YS0+cHJldlgsIGRhdGEtPnByZXZZLCBwaXgxLCBwaXgyLAotICAgICAgZGF0YS0+YnJ1dFMsIGRhdGEtPmJydXRELCBkYXRhLT5idWZmcmF0aW8sIGRhdGEtPnByZWNhbENvZWYpOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVQcmVjYWxDb2VmIChpbnQgcHJlY2FsQ29lZlsxNl1bMTZdKQotewotICBpbnQgY29lZmgsIGNvZWZ2OwotCi0gIGZvciAoY29lZmggPSAwOyBjb2VmaCA8IDE2OyBjb2VmaCsrKSB7Ci0gICAgZm9yIChjb2VmdiA9IDA7IGNvZWZ2IDwgMTY7IGNvZWZ2KyspIHsKLQotICAgICAgaW50IGk7Ci0gICAgICBpbnQgZGlmZmNvZWZmaDsKLSAgICAgIGludCBkaWZmY29lZmZ2OwotCi0gICAgICBkaWZmY29lZmZoID0gc3FydHBlcnRlIC0gY29lZmg7Ci0gICAgICBkaWZmY29lZmZ2ID0gc3FydHBlcnRlIC0gY29lZnY7Ci0KLSAgICAgIGlmICghKGNvZWZoIHx8IGNvZWZ2KSkgewotICAgICAgICBpID0gMjU1OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgVWludCBpMSwgaTIsIGkzLCBpNDsKLQotICAgICAgICBpMSA9IGRpZmZjb2VmZmggKiBkaWZmY29lZmZ2OwotICAgICAgICBpMiA9IGNvZWZoICogZGlmZmNvZWZmdjsKLSAgICAgICAgaTMgPSBkaWZmY29lZmZoICogY29lZnY7Ci0gICAgICAgIGk0ID0gY29lZmggKiBjb2VmdjsKLQotICAgICAgICAvLyBUT0RPOiBmYWlyZSBtaWV1eC4uLgotICAgICAgICBpZiAoaTEpCi0gICAgICAgICAgaTEtLTsKLSAgICAgICAgaWYgKGkyKQotICAgICAgICAgIGkyLS07Ci0gICAgICAgIGlmIChpMykKLSAgICAgICAgICBpMy0tOwotICAgICAgICBpZiAoaTQpCi0gICAgICAgICAgaTQtLTsKLQotICAgICAgICBpID0gKGkxKSB8IChpMiA8PCA4KSB8IChpMyA8PCAxNikgfCAoaTQgPDwgMjQpOwotICAgICAgfQotICAgICAgcHJlY2FsQ29lZltjb2VmaF1bY29lZnZdID0gaTsKLSAgICB9Ci0gIH0KLX0KLQotLyogVmlzdWFsRlggV3JhcHBlciAqLwotCi1zdGF0aWMgdm9pZAotem9vbUZpbHRlclZpc3VhbEZYV3JhcHBlcl9pbml0IChzdHJ1Y3QgX1ZJU1VBTF9GWCAqX3RoaXMsIFBsdWdpbkluZm8gKiBpbmZvKQotewotICBab29tRmlsdGVyRlhXcmFwcGVyRGF0YSAqZGF0YSA9Ci0gICAgICAoWm9vbUZpbHRlckZYV3JhcHBlckRhdGEgKikgbWFsbG9jIChzaXplb2YgKFpvb21GaWx0ZXJGWFdyYXBwZXJEYXRhKSk7Ci0KLSAgZGF0YS0+Y29lZmZzID0gMDsKLSAgZGF0YS0+ZnJlZWNvZWZmcyA9IDA7Ci0gIGRhdGEtPmJydXRTID0gMDsKLSAgZGF0YS0+ZnJlZWJydXRTID0gMDsKLSAgZGF0YS0+YnJ1dEQgPSAwOwotICBkYXRhLT5mcmVlYnJ1dEQgPSAwOwotICBkYXRhLT5icnV0VCA9IDA7Ci0gIGRhdGEtPmZyZWVicnV0VCA9IDA7Ci0gIGRhdGEtPnByZXZYID0gMDsKLSAgZGF0YS0+cHJldlkgPSAwOwotCi0gIGRhdGEtPm11c3RJbml0QnVmZmVycyA9IDE7Ci0gIGRhdGEtPmludGVybGFjZV9zdGFydCA9IC0yOwotCi0gIGRhdGEtPmdlbmVyYWxfc3BlZWQgPSAwLjBmOwotICBkYXRhLT5yZXZlcnNlID0gMDsKLSAgZGF0YS0+dGhlTW9kZSA9IEFNVUxFVFRFX01PREU7Ci0gIGRhdGEtPndhdmVFZmZlY3QgPSAwOwotICBkYXRhLT5oeXBlcmNvc0VmZmVjdCA9IDA7Ci0gIGRhdGEtPnZQbGFuZUVmZmVjdCA9IDA7Ci0gIGRhdGEtPmhQbGFuZUVmZmVjdCA9IDA7Ci0gIGRhdGEtPm5vaXNpZnkgPSAyOwotCi0gICAgLyoqIG1vZGlmIGJ5IGpla28gOiBmaXhlZHBvaW50IDogYnVmZnJhdGlvbiA9ICgxNjoxNikgKGRvbmMgMDw9YnVmZnJhdGlvbjw9Ml4xNikgKi8KLSAgZGF0YS0+YnVmZnJhdGlvID0gMDsKLSAgZGF0YS0+ZmlyZWRlYyA9IDA7Ci0KLSAgZGF0YS0+d2F2ZSA9IGRhdGEtPndhdmVzcCA9IDA7Ci0KLSAgc2VjdXJlX2JfcGFyYW0gKCZkYXRhLT5lbmFibGVkX2JwLCAiRW5hYmxlZCIsIDEpOwotCi0gIHBsdWdpbl9wYXJhbWV0ZXJzICgmZGF0YS0+cGFyYW1zLCAiWm9vbSBGaWx0ZXIiLCAxKTsKLSAgZGF0YS0+cGFyYW1zLnBhcmFtc1swXSA9ICZkYXRhLT5lbmFibGVkX2JwOwotCi0gIF90aGlzLT5wYXJhbXMgPSAmZGF0YS0+cGFyYW1zOwotICBfdGhpcy0+ZnhfZGF0YSA9ICh2b2lkICopIGRhdGE7Ci0KLSAgICAvKiogbW9kaWYgZCdvcHRpbSBieSBKZWtvIDogcHJlY2FsY3VsIGRlcyA0IGNvZWZzIHJlc3VsdGFudCBkZXMgMiBwb3MgKi8KLSAgZ2VuZXJhdGVQcmVjYWxDb2VmIChkYXRhLT5wcmVjYWxDb2VmKTsKLX0KLQotc3RhdGljIHZvaWQKLXpvb21GaWx0ZXJWaXN1YWxGWFdyYXBwZXJfZnJlZSAoc3RydWN0IF9WSVNVQUxfRlggKl90aGlzKQotewotICBab29tRmlsdGVyRlhXcmFwcGVyRGF0YSAqZGF0YSA9IChab29tRmlsdGVyRlhXcmFwcGVyRGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLQotICBpZiAoZGF0YS0+ZnJlZWJydXRUKQotICAgIGZyZWUgKGRhdGEtPmZyZWVicnV0VCk7Ci0gIGlmIChkYXRhLT5mcmVlYnJ1dFMpCi0gICAgZnJlZSAoZGF0YS0+ZnJlZWJydXRTKTsKLSAgaWYgKGRhdGEtPmZyZWVicnV0RCkKLSAgICBmcmVlIChkYXRhLT5mcmVlYnJ1dEQpOwotICBpZiAoZGF0YS0+ZmlyZWRlYykKLSAgICBmcmVlIChkYXRhLT5maXJlZGVjKTsKLQotICBnb29tX3BsdWdpbl9wYXJhbWV0ZXJzX2ZyZWUgKF90aGlzLT5wYXJhbXMpOwotCi0gIGZyZWUgKF90aGlzLT5meF9kYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLXpvb21GaWx0ZXJWaXN1YWxGWFdyYXBwZXJfYXBwbHkgKHN0cnVjdCBfVklTVUFMX0ZYICpfdGhpcywgUGl4ZWwgKiBzcmMsCi0gICAgUGl4ZWwgKiBkZXN0LCBQbHVnaW5JbmZvICogaW5mbykKLXsKLX0KLQotdm9pZAotem9vbUZpbHRlclZpc3VhbEZYV3JhcHBlcl9jcmVhdGUgKFZpc3VhbEZYICogZngpCi17Ci0gIGZ4LT5pbml0ID0gem9vbUZpbHRlclZpc3VhbEZYV3JhcHBlcl9pbml0OwotICBmeC0+ZnJlZSA9IHpvb21GaWx0ZXJWaXN1YWxGWFdyYXBwZXJfZnJlZTsKLSAgZngtPmFwcGx5ID0gem9vbUZpbHRlclZpc3VhbEZYV3JhcHBlcl9hcHBseTsKLSAgZngtPnBhcmFtcyA9IE5VTEw7Ci0gIGZ4LT5meF9kYXRhID0gTlVMTDsKLX0KLQotCi0vKiBUT0RPIDogTU9WRSBUSElTIEFXQVkgKi8KLQotdm9pZAotcG9pbnRGaWx0ZXIgKFBsdWdpbkluZm8gKiBnb29tSW5mbywgUGl4ZWwgKiBwaXgxLCBDb2xvciBjLCBmbG9hdCB0MSwgZmxvYXQgdDIsCi0gICAgZmxvYXQgdDMsIGZsb2F0IHQ0LCBVaW50IGN5Y2xlKQotewotICBVaW50IHggPSAoVWludCkgKChpbnQpIChnb29tSW5mby0+c2NyZWVuLndpZHRoIC8gMikKLSAgICAgICsgKGludCkgKHQxICogY29zICgoZmxvYXQpIGN5Y2xlIC8gdDMpKSk7Ci0gIFVpbnQgeSA9IChVaW50KSAoKGludCkgKGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0IC8gMikKLSAgICAgICsgKGludCkgKHQyICogc2luICgoZmxvYXQpIGN5Y2xlIC8gdDQpKSk7Ci0KLSAgaWYgKCh4ID4gMSkgJiYgKHkgPiAxKSAmJiAoeCA8IGdvb21JbmZvLT5zY3JlZW4ud2lkdGggLSAyKQotICAgICAgJiYgKHkgPCBnb29tSW5mby0+c2NyZWVuLmhlaWdodCAtIDIpKSB7Ci0gICAgc2V0UGl4ZWxSR0IgKGdvb21JbmZvLCBwaXgxLCB4ICsgMSwgeSwgYyk7Ci0gICAgc2V0UGl4ZWxSR0IgKGdvb21JbmZvLCBwaXgxLCB4LCB5ICsgMSwgYyk7Ci0gICAgc2V0UGl4ZWxSR0IgKGdvb21JbmZvLCBwaXgxLCB4ICsgMSwgeSArIDEsIFdISVRFKTsKLSAgICBzZXRQaXhlbFJHQiAoZ29vbUluZm8sIHBpeDEsIHggKyAyLCB5ICsgMSwgYyk7Ci0gICAgc2V0UGl4ZWxSR0IgKGdvb21JbmZvLCBwaXgxLCB4ICsgMSwgeSArIDIsIGMpOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZ29vbS9mbHlpbmdfc3RhcnNfZnguYyBiL2dzdC9nb29tL2ZseWluZ19zdGFyc19meC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTM1ZTcyLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL2ZseWluZ19zdGFyc19meC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJnb29tX2Z4LmgiCi0jaW5jbHVkZSAiZ29vbV9wbHVnaW5faW5mby5oIgotI2luY2x1ZGUgImdvb21fdG9vbHMuaCIKLQotI2luY2x1ZGUgIm1hdGh0b29scy5oIgotCi0vKiBUT0RPOi0tIEZBSVJFIFBST1BSRU1FTlQuLi4gQk9BSC4uLiAqLwotI2RlZmluZSBOQ09MIDE1Ci0KLS8qc3RhdGljIGNvbnN0IGludCBjb2x2YWxbXSA9IHsKLTB4ZmRmNmY1LAotMHhmYWU0ZTQsCi0weGY3ZDFkMSwKLTB4ZjNiNmI1LAotMHhlZmEyYTIsCi0weGVjOTE5MCwKLTB4ZWE4MjgyLAotMHhlODc1NzUsCi0weGU0NjA2MCwKLTB4ZTE0YjRjLAotMHhkZTNiM2IsCi0weGRjMmQyZiwKLTB4ZDkyNzI2LAotMHhkODE2MTksCi0weGQ1MGMwOSwKLTAKLX07Ci0qLwotc3RhdGljIGNvbnN0IGludCBjb2x2YWxbXSA9IHsKLSAgMHgxNDE2MTgxYSwKLSAgMHgxNDE5MTgxYSwKLSAgMHgxNDFmMTgxYSwKLSAgMHgxNDI2MTgxYSwKLSAgMHgxNDJhMTgxYSwKLSAgMHgxNDJmMTgxYSwKLSAgMHgxNDM2MTgxYSwKLSAgMHgxNDJmMTgxOSwKLSAgMHgxNDI2MTYxNSwKLSAgMHgxMzIwMTQxMSwKLSAgMHgxMTFhMTAwYSwKLSAgMHgwYzE4MDUwOCwKLSAgMHgwODEwMDMwNCwKLSAgMHgwMDA1MDEwMSwKLSAgMHgwCi19OwotCi0KLS8qIFRoZSBkaWZmZXJlbnQgbW9kZXMgb2YgdGhlIHZpc3VhbCBGWC4KLSAqIFB1dCB0aGlzIHZhbHVlcyBvbiBmeF9tb2RlICovCi0jZGVmaW5lIEZJUkVXT1JLU19GWCAwCi0jZGVmaW5lIFJBSU5fRlggMQotI2RlZmluZSBGT1VOVEFJTl9GWCAyCi0jZGVmaW5lIExBU1RfRlggMwotCi10eXBlZGVmIHN0cnVjdCBfRlNfU1RBUgotewotICBmbG9hdCB4LCB5OwotICBmbG9hdCB2eCwgdnk7Ci0gIGZsb2F0IGF4LCBheTsKLSAgZmxvYXQgYWdlLCB2YWdlOwotfSBTdGFyOwotCi10eXBlZGVmIHN0cnVjdCBfRlNfREFUQQotewotCi0gIGludCBmeF9tb2RlOwotICBpbnQgbmJTdGFyczsKLQotICBpbnQgbWF4U3RhcnM7Ci0gIFN0YXIgKnN0YXJzOwotCi0gIGZsb2F0IG1pbl9hZ2U7Ci0gIGZsb2F0IG1heF9hZ2U7Ci0KLSAgUGx1Z2luUGFyYW0gbWluX2FnZV9wOwotICBQbHVnaW5QYXJhbSBtYXhfYWdlX3A7Ci0gIFBsdWdpblBhcmFtIG5iU3RhcnNfcDsKLSAgUGx1Z2luUGFyYW0gbmJTdGFyc19saW1pdF9wOwotICBQbHVnaW5QYXJhbSBmeF9tb2RlX3A7Ci0KLSAgUGx1Z2luUGFyYW1ldGVycyBwYXJhbXM7Ci19IEZTRGF0YTsKLQotc3RhdGljIHZvaWQKLWZzX2luaXQgKFZpc3VhbEZYICogX3RoaXMsIFBsdWdpbkluZm8gKiBpbmZvKQotewotCi0gIEZTRGF0YSAqZGF0YTsKLQotICBkYXRhID0gKEZTRGF0YSAqKSBtYWxsb2MgKHNpemVvZiAoRlNEYXRhKSk7Ci0KLSAgZGF0YS0+ZnhfbW9kZSA9IEZJUkVXT1JLU19GWDsKLSAgZGF0YS0+bWF4U3RhcnMgPSA0MDk2OwotICBkYXRhLT5zdGFycyA9IChTdGFyICopIG1hbGxvYyAoZGF0YS0+bWF4U3RhcnMgKiBzaXplb2YgKFN0YXIpKTsKLSAgZGF0YS0+bmJTdGFycyA9IDA7Ci0KLSAgc2VjdXJlX2lfcGFyYW0gKCZkYXRhLT5tYXhfYWdlX3AsICJGaXJld29ya3MgU21hbGxlc3QgQm9tYnMiKTsKLSAgSVZBTCAoZGF0YS0+bWF4X2FnZV9wKSA9IDgwOwotICBJTUlOIChkYXRhLT5tYXhfYWdlX3ApID0gMDsKLSAgSU1BWCAoZGF0YS0+bWF4X2FnZV9wKSA9IDEwMDsKLSAgSVNURVAgKGRhdGEtPm1heF9hZ2VfcCkgPSAxOwotCi0gIHNlY3VyZV9pX3BhcmFtICgmZGF0YS0+bWluX2FnZV9wLCAiRmlyZXdvcmtzIExhcmdlc3QgQm9tYnMiKTsKLSAgSVZBTCAoZGF0YS0+bWluX2FnZV9wKSA9IDk5OwotICBJTUlOIChkYXRhLT5taW5fYWdlX3ApID0gMDsKLSAgSU1BWCAoZGF0YS0+bWluX2FnZV9wKSA9IDEwMDsKLSAgSVNURVAgKGRhdGEtPm1pbl9hZ2VfcCkgPSAxOwotCi0gIHNlY3VyZV9pX3BhcmFtICgmZGF0YS0+bmJTdGFyc19saW1pdF9wLCAiTWF4IE51bWJlciBvZiBQYXJ0aWN1bGVzIik7Ci0gIElWQUwgKGRhdGEtPm5iU3RhcnNfbGltaXRfcCkgPSA1MTI7Ci0gIElNSU4gKGRhdGEtPm5iU3RhcnNfbGltaXRfcCkgPSAwOwotICBJTUFYIChkYXRhLT5uYlN0YXJzX2xpbWl0X3ApID0gZGF0YS0+bWF4U3RhcnM7Ci0gIElTVEVQIChkYXRhLT5uYlN0YXJzX2xpbWl0X3ApID0gNjQ7Ci0KLSAgc2VjdXJlX2lfcGFyYW0gKCZkYXRhLT5meF9tb2RlX3AsICJGWCBNb2RlIik7Ci0gIElWQUwgKGRhdGEtPmZ4X21vZGVfcCkgPSBkYXRhLT5meF9tb2RlOwotICBJTUlOIChkYXRhLT5meF9tb2RlX3ApID0gMTsKLSAgSU1BWCAoZGF0YS0+ZnhfbW9kZV9wKSA9IDM7Ci0gIElTVEVQIChkYXRhLT5meF9tb2RlX3ApID0gMTsKLQotICBzZWN1cmVfZl9mZWVkYmFjayAoJmRhdGEtPm5iU3RhcnNfcCwgIk51bWJlciBvZiBQYXJ0aWN1bGVzICglIG9mIE1heCkiKTsKLQotICBwbHVnaW5fcGFyYW1ldGVycyAoJmRhdGEtPnBhcmFtcywgIlBhcnRpY3VsZSBTeXN0ZW0iLCA3KTsKLSAgZGF0YS0+cGFyYW1zLnBhcmFtc1swXSA9ICZkYXRhLT5meF9tb2RlX3A7Ci0gIGRhdGEtPnBhcmFtcy5wYXJhbXNbMV0gPSAmZGF0YS0+bmJTdGFyc19saW1pdF9wOwotICBkYXRhLT5wYXJhbXMucGFyYW1zWzJdID0gMDsKLSAgZGF0YS0+cGFyYW1zLnBhcmFtc1szXSA9ICZkYXRhLT5taW5fYWdlX3A7Ci0gIGRhdGEtPnBhcmFtcy5wYXJhbXNbNF0gPSAmZGF0YS0+bWF4X2FnZV9wOwotICBkYXRhLT5wYXJhbXMucGFyYW1zWzVdID0gMDsKLSAgZGF0YS0+cGFyYW1zLnBhcmFtc1s2XSA9ICZkYXRhLT5uYlN0YXJzX3A7Ci0KLSAgX3RoaXMtPnBhcmFtcyA9ICZkYXRhLT5wYXJhbXM7Ci0gIF90aGlzLT5meF9kYXRhID0gKHZvaWQgKikgZGF0YTsKLX0KLQotc3RhdGljIHZvaWQKLWZzX2ZyZWUgKFZpc3VhbEZYICogX3RoaXMpCi17Ci0gIEZTRGF0YSAqZGF0YSA9IChGU0RhdGEgKikgX3RoaXMtPmZ4X2RhdGE7Ci0KLSAgZ29vbV9wbHVnaW5fcGFyYW1ldGVyc19mcmVlICgmZGF0YS0+cGFyYW1zKTsKLQotICBmcmVlIChkYXRhLT5zdGFycyk7Ci0gIGZyZWUgKF90aGlzLT5meF9kYXRhKTsKLX0KLQotCi0vKioKLSAqIENyZWUgdW5lIG5vdXZlbGxlICdib21iZScsIGMnZXN0IGEgZGlyZSB1bmUgcGFydGljdWxlIGFwcGFydGVuYW50IGEgdW5lIGZ1c2VlIGQnYXJ0aWZpY2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1hZGRBQm9tYiAoRlNEYXRhICogZnMsIGludCBteCwgaW50IG15LCBmbG9hdCByYWRpdXMsIGZsb2F0IHZhZ2UsIGZsb2F0IGdyYXZpdHksCi0gICAgUGx1Z2luSW5mbyAqIGluZm8pCi17Ci0KLSAgaW50IGkgPSBmcy0+bmJTdGFyczsKLSAgZmxvYXQgcm87Ci0gIGludCB0aGV0YTsKLQotICBpZiAoZnMtPm5iU3RhcnMgPj0gZnMtPm1heFN0YXJzKQotICAgIHJldHVybjsKLSAgZnMtPm5iU3RhcnMrKzsKLQotICBmcy0+c3RhcnNbaV0ueCA9IG14OwotICBmcy0+c3RhcnNbaV0ueSA9IG15OwotCi0gIHJvID0gcmFkaXVzICogKGZsb2F0KSBnb29tX2lyYW5kIChpbmZvLT5nUmFuZG9tLCAxMDApIC8gMTAwLjBmOwotICBybyAqPSAoZmxvYXQpIGdvb21faXJhbmQgKGluZm8tPmdSYW5kb20sIDEwMCkgLyAxMDAuMGYgKyAxLjBmOwotICB0aGV0YSA9IGdvb21faXJhbmQgKGluZm8tPmdSYW5kb20sIDI1Nik7Ci0KLSAgZnMtPnN0YXJzW2ldLnZ4ID0gcm8gKiBjb3MyNTZbdGhldGFdOwotICBmcy0+c3RhcnNbaV0udnkgPSAtMC4yZiArIHJvICogc2luMjU2W3RoZXRhXTsKLQotICBmcy0+c3RhcnNbaV0uYXggPSAwOwotICBmcy0+c3RhcnNbaV0uYXkgPSBncmF2aXR5OwotCi0gIGZzLT5zdGFyc1tpXS5hZ2UgPSAwOwotICBpZiAodmFnZSA8IGZzLT5taW5fYWdlKQotICAgIHZhZ2UgPSBmcy0+bWluX2FnZTsKLSAgZnMtPnN0YXJzW2ldLnZhZ2UgPSB2YWdlOwotfQotCi0KLS8qKgotICogTWV0IGEgam91ciBsYSBwb3NpdGlvbiBldCB2aXRlc3NlIGQndW5lIHBhcnRpY3VsZS4KLSAqLwotc3RhdGljIHZvaWQKLXVwZGF0ZVN0YXIgKFN0YXIgKiBzKQotewotICBzLT54ICs9IHMtPnZ4OwotICBzLT55ICs9IHMtPnZ5OwotICBzLT52eCArPSBzLT5heDsKLSAgcy0+dnkgKz0gcy0+YXk7Ci0gIHMtPmFnZSArPSBzLT52YWdlOwotfQotCi0KLS8qKgotICogQWpvdXRlIGRlIG5vdXZlbGxlcyBwYXJ0aWN1bGVzIGF1IG1vbWVudCBkJ3VuIGV2ZW5lbWVudCBzb25vcmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1mc19zb3VuZF9ldmVudF9vY2N1cmVkIChWaXN1YWxGWCAqIF90aGlzLCBQbHVnaW5JbmZvICogaW5mbykKLXsKLQotICBGU0RhdGEgKmRhdGEgPSAoRlNEYXRhICopIF90aGlzLT5meF9kYXRhOwotICBpbnQgaTsKLQotICBpbnQgbWF4ID0gKGludCkgKCgxLjBmICsgaW5mby0+c291bmQuZ29vbVBvd2VyKSAqIGdvb21faXJhbmQgKGluZm8tPmdSYW5kb20sCi0gICAgICAgICAgMTUwKSkgKyAxMDA7Ci0gIGZsb2F0IHJhZGl1cyA9Ci0gICAgICAoMS4wZiArIGluZm8tPnNvdW5kLmdvb21Qb3dlcikgKiAoZmxvYXQpIChnb29tX2lyYW5kIChpbmZvLT5nUmFuZG9tLAotICAgICAgICAgIDE1MCkgKyA1MCkgLyAzMDA7Ci0gIGludCBteDsKLSAgaW50IG15OwotICBmbG9hdCB2YWdlLCBncmF2aXR5ID0gMC4wMmY7Ci0KLSAgc3dpdGNoIChkYXRhLT5meF9tb2RlKSB7Ci0gICAgY2FzZSBGSVJFV09SS1NfRlg6Ci0gICAgewotICAgICAgZG91YmxlIGR4LCBkeTsKLQotICAgICAgZG8gewotICAgICAgICBteCA9IGdvb21faXJhbmQgKGluZm8tPmdSYW5kb20sIGluZm8tPnNjcmVlbi53aWR0aCk7Ci0gICAgICAgIG15ID0gZ29vbV9pcmFuZCAoaW5mby0+Z1JhbmRvbSwgaW5mby0+c2NyZWVuLmhlaWdodCk7Ci0gICAgICAgIGR4ID0gKG14IC0gaW5mby0+c2NyZWVuLndpZHRoIC8gMik7Ci0gICAgICAgIGR5ID0gKG15IC0gaW5mby0+c2NyZWVuLmhlaWdodCAvIDIpOwotICAgICAgfSB3aGlsZSAoZHggKiBkeCArIGR5ICogZHkgPAotICAgICAgICAgIChpbmZvLT5zY3JlZW4uaGVpZ2h0IC8gMikgKiAoaW5mby0+c2NyZWVuLmhlaWdodCAvIDIpKTsKLSAgICAgIHZhZ2UgPSBkYXRhLT5tYXhfYWdlICogKDEuMGYgLSBpbmZvLT5zb3VuZC5nb29tUG93ZXIpOwotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUkFJTl9GWDoKLSAgICAgIG14ID0gZ29vbV9pcmFuZCAoaW5mby0+Z1JhbmRvbSwgaW5mby0+c2NyZWVuLndpZHRoKTsKLSAgICAgIGlmIChteCA+IGluZm8tPnNjcmVlbi53aWR0aCAvIDIpCi0gICAgICAgIG14ID0gaW5mby0+c2NyZWVuLndpZHRoOwotICAgICAgZWxzZQotICAgICAgICBteCA9IDA7Ci0gICAgICBteSA9IC0oaW5mby0+c2NyZWVuLmhlaWdodCAvIDMpIC0gZ29vbV9pcmFuZCAoaW5mby0+Z1JhbmRvbSwKLSAgICAgICAgICBpbmZvLT5zY3JlZW4ud2lkdGggLyAzKTsKLSAgICAgIHJhZGl1cyAqPSAxLjU7Ci0gICAgICB2YWdlID0gMC4wMDJmOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VOVEFJTl9GWDoKLSAgICAgIG15ID0gaW5mby0+c2NyZWVuLmhlaWdodCArIDI7Ci0gICAgICB2YWdlID0gMC4wMDFmOwotICAgICAgcmFkaXVzICs9IDEuMGY7Ci0gICAgICBteCA9IGluZm8tPnNjcmVlbi53aWR0aCAvIDI7Ci0gICAgICBncmF2aXR5ID0gMC4wNGY7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuOwotICAgICAgLyogbXkgPSBpIFIgQSBOIEQgKGluZm8tPnNjcmVlbi5oZWlnaHQpOyB2YWdlID0gMC4wMWY7ICovCi0gIH0KLQotICByYWRpdXMgKj0gaW5mby0+c2NyZWVuLmhlaWdodCAvIDIwMC4wZjsgICAgICAgLyogd2h5IDIwMCA/IGJlY2F1c2UgdGhlIEZYIHdhcyBkZXZlbG9wcGVkIG9uIDMyMHgyMDAgKi8KLSAgbWF4ICo9IGluZm8tPnNjcmVlbi5oZWlnaHQgLyAyMDAuMGY7Ci0KLSAgaWYgKGluZm8tPnNvdW5kLnRpbWVTaW5jZUxhc3RCaWdHb29tIDwgMSkgewotICAgIHJhZGl1cyAqPSAxLjU7Ci0gICAgbWF4ICo9IDI7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IG1heDsgKytpKQotICAgIGFkZEFCb21iIChkYXRhLCBteCwgbXksIHJhZGl1cywgdmFnZSwgZ3Jhdml0eSwgaW5mbyk7Ci19Ci0KLQotLyoqCi0gKiBNYWluIG1ldGhvZGUgb2YgdGhlIEZYLgotICovCi1zdGF0aWMgdm9pZAotZnNfYXBwbHkgKFZpc3VhbEZYICogX3RoaXMsIFBpeGVsICogc3JjLCBQaXhlbCAqIGRlc3QsIFBsdWdpbkluZm8gKiBpbmZvKQotewotCi0gIGludCBpOwotICBpbnQgY29sOwotICBGU0RhdGEgKmRhdGEgPSAoRlNEYXRhICopIF90aGlzLT5meF9kYXRhOwotCi0gIC8qIEdldCB0aGUgbmV3IHBhcmFtZXRlcnMgdmFsdWVzICovCi0gIGRhdGEtPm1pbl9hZ2UgPSAxLjBmIC0gKGZsb2F0KSBJVkFMIChkYXRhLT5taW5fYWdlX3ApIC8gMTAwLjBmOwotICBkYXRhLT5tYXhfYWdlID0gMS4wZiAtIChmbG9hdCkgSVZBTCAoZGF0YS0+bWF4X2FnZV9wKSAvIDEwMC4wZjsKLSAgRlZBTCAoZGF0YS0+bmJTdGFyc19wKSA9IChmbG9hdCkgZGF0YS0+bmJTdGFycyAvIChmbG9hdCkgZGF0YS0+bWF4U3RhcnM7Ci0gIGRhdGEtPm5iU3RhcnNfcC5jaGFuZ2VfbGlzdGVuZXIgKCZkYXRhLT5uYlN0YXJzX3ApOwotICBkYXRhLT5tYXhTdGFycyA9IElWQUwgKGRhdGEtPm5iU3RhcnNfbGltaXRfcCk7Ci0gIGRhdGEtPmZ4X21vZGUgPSBJVkFMIChkYXRhLT5meF9tb2RlX3ApOwotCi0gIC8qIGxvb2sgZm9yIGV2ZW50cyAqLwotICBpZiAoaW5mby0+c291bmQudGltZVNpbmNlTGFzdEdvb20gPCAxKSB7Ci0gICAgZnNfc291bmRfZXZlbnRfb2NjdXJlZCAoX3RoaXMsIGluZm8pOwotICAgIGlmIChnb29tX2lyYW5kIChpbmZvLT5nUmFuZG9tLCAyMCkgPT0gMSkgewotICAgICAgSVZBTCAoZGF0YS0+ZnhfbW9kZV9wKSA9IGdvb21faXJhbmQgKGluZm8tPmdSYW5kb20sIChMQVNUX0ZYICogMykpOwotICAgICAgZGF0YS0+ZnhfbW9kZV9wLmNoYW5nZV9saXN0ZW5lciAoJmRhdGEtPmZ4X21vZGVfcCk7Ci0gICAgfQotICB9Ci0KLSAgLyogdXBkYXRlIHBhcnRpY3VsZXMgKi8KLSAgZm9yIChpID0gMDsgaSA8IGRhdGEtPm5iU3RhcnM7ICsraSkgewotICAgIHVwZGF0ZVN0YXIgKCZkYXRhLT5zdGFyc1tpXSk7Ci0KLSAgICAvKiBkZWFkIHBhcnRpY3VsZSAqLwotICAgIGlmIChkYXRhLT5zdGFyc1tpXS5hZ2UgPj0gTkNPTCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogY2hvb3NlIHRoZSBjb2xvciBvZiB0aGUgcGFydGljdWxlICovCi0gICAgY29sID0gY29sdmFsWyhpbnQpIGRhdGEtPnN0YXJzW2ldLmFnZV07Ci0KLSAgICAvKiBkcmF3cyB0aGUgcGFydGljdWxlICovCi0gICAgaW5mby0+bWV0aG9kcy5kcmF3X2xpbmUgKGRlc3QsIChpbnQpIGRhdGEtPnN0YXJzW2ldLngsCi0gICAgICAgIChpbnQpIGRhdGEtPnN0YXJzW2ldLnksCi0gICAgICAgIChpbnQpIChkYXRhLT5zdGFyc1tpXS54IC0gZGF0YS0+c3RhcnNbaV0udnggKiA2KSwKLSAgICAgICAgKGludCkgKGRhdGEtPnN0YXJzW2ldLnkgLSBkYXRhLT5zdGFyc1tpXS52eSAqIDYpLCBjb2wsCi0gICAgICAgIChpbnQpIGluZm8tPnNjcmVlbi53aWR0aCwgKGludCkgaW5mby0+c2NyZWVuLmhlaWdodCk7Ci0gICAgaW5mby0+bWV0aG9kcy5kcmF3X2xpbmUgKGRlc3QsIChpbnQpIGRhdGEtPnN0YXJzW2ldLngsCi0gICAgICAgIChpbnQpIGRhdGEtPnN0YXJzW2ldLnksCi0gICAgICAgIChpbnQpIChkYXRhLT5zdGFyc1tpXS54IC0gZGF0YS0+c3RhcnNbaV0udnggKiAyKSwKLSAgICAgICAgKGludCkgKGRhdGEtPnN0YXJzW2ldLnkgLSBkYXRhLT5zdGFyc1tpXS52eSAqIDIpLCBjb2wsCi0gICAgICAgIChpbnQpIGluZm8tPnNjcmVlbi53aWR0aCwgKGludCkgaW5mby0+c2NyZWVuLmhlaWdodCk7Ci0gIH0KLQotICAvKiBsb29rIGZvciBkZWFkIHBhcnRpY3VsZXMgKi8KLSAgZm9yIChpID0gMDsgaSA8IGRhdGEtPm5iU3RhcnM7KSB7Ci0KLSAgICBpZiAoKGRhdGEtPnN0YXJzW2ldLnggPiBpbmZvLT5zY3JlZW4ud2lkdGggKyA2NCkKLSAgICAgICAgfHwgKChkYXRhLT5zdGFyc1tpXS52eSA+PSAwKQotICAgICAgICAgICAgJiYgKGRhdGEtPnN0YXJzW2ldLnkgLSAxNiAqIGRhdGEtPnN0YXJzW2ldLnZ5ID4KLSAgICAgICAgICAgICAgICBpbmZvLT5zY3JlZW4uaGVpZ2h0KSkKLSAgICAgICAgfHwgKGRhdGEtPnN0YXJzW2ldLnggPCAtNjQpCi0gICAgICAgIHx8IChkYXRhLT5zdGFyc1tpXS5hZ2UgPj0gTkNPTCkpIHsKLSAgICAgIGRhdGEtPnN0YXJzW2ldID0gZGF0YS0+c3RhcnNbZGF0YS0+bmJTdGFycyAtIDFdOwotICAgICAgZGF0YS0+bmJTdGFycy0tOwotICAgIH0gZWxzZQotICAgICAgKytpOwotICB9Ci19Ci0KLXZvaWQKLWZseWluZ19zdGFyX2NyZWF0ZSAoVmlzdWFsRlggKiB2ZngpCi17Ci0gIHZmeC0+aW5pdCA9IGZzX2luaXQ7Ci0gIHZmeC0+ZnJlZSA9IGZzX2ZyZWU7Ci0gIHZmeC0+YXBwbHkgPSBmc19hcHBseTsKLSAgdmZ4LT5meF9kYXRhID0gTlVMTDsKLSAgdmZ4LT5wYXJhbXMgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ29vbS5oIGIvZ3N0L2dvb20vZ29vbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmEwOTM2Li4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL2dvb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX0dPT01DT1JFX0gKLSNkZWZpbmUgX0dPT01DT1JFX0gKLQotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0jaW5jbHVkZSAiZ29vbV9wbHVnaW5faW5mby5oIgotCi0jZGVmaW5lIE5CX0ZYIDEwCi0KLVBsdWdpbkluZm8gKmdvb21faW5pdCAoZ3VpbnQzMiByZXN4LCBndWludDMyIHJlc3kpOwotdm9pZCBnb29tX3NldF9yZXNvbHV0aW9uIChQbHVnaW5JbmZvICpnb29tSW5mbywgZ3VpbnQzMiByZXN4LCBndWludDMyIHJlc3kpOwotCi0vKgotICogZm9yY2VNb2RlID09IDAgOiBkbyBub3RoaW5nCi0gKiBmb3JjZU1vZGUgPT0gLTEgOiBsb2NrIHRoZSBGWAotICogZm9yY2VNb2RlID09IDEuLk5CX0ZYIDogZm9yY2UgYSBzd2l0Y2ggdG8gRlggbiMgZm9yY2VNb2RlCi0gKi8KLWd1aW50MzIgKmdvb21fdXBkYXRlIChQbHVnaW5JbmZvICpnb29tSW5mbywgZ2ludDE2IGRhdGFbMl1bNTEyXSwgaW50IGZvcmNlTW9kZSwgZmxvYXQgZnBzKTsKLQotLyogcmV0dXJucyAwIGlmIHRoZSBidWZmZXIgd2Fzbid0IGFjY2VwdGVkICovCi1pbnQgZ29vbV9zZXRfc2NyZWVuYnVmZmVyKFBsdWdpbkluZm8gKmdvb21JbmZvLCB2b2lkICpidWZmZXIpOwotCi12b2lkIGdvb21fY2xvc2UgKFBsdWdpbkluZm8gKmdvb21JbmZvKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9nb29tX2NvbmZpZy5oIGIvZ3N0L2dvb20vZ29vbV9jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NGJmZS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9nb29tX2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSNkZWZpbmUgQ09MT1JfQVJHQgotI2Vsc2UKLSNkZWZpbmUgQ09MT1JfQkdSQQotI2VuZGlmCi0KLSNpZiAxCi0vKiBuZGVmIENPTE9SX0JHUkEgKi8KLS8qKiBwb3NpdGlvbiBkZXMgY29tcG9zYW50ZXMgKiovCi0gICAgI2RlZmluZSBCTEVVIDAKLSAgICAjZGVmaW5lIFZFUlQgMQotICAgICNkZWZpbmUgUk9VR0UgMgotICAgICNkZWZpbmUgQUxQSEEgMwotI2Vsc2UKLSAgICAjZGVmaW5lIFJPVUdFIDEKLSAgICAjZGVmaW5lIEJMRVUgMwotICAgICNkZWZpbmUgVkVSVCAyCi0gICAgI2RlZmluZSBBTFBIQSAwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKEJVSUxEX01NWCkgJiYgZGVmaW5lZCAoSEFWRV9HQ0NfQVNNKQotCi0jZGVmaW5lIEhBVkVfTU1YCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ29vbV9jb25maWdfcGFyYW0uaCBiL2dzdC9nb29tL2dvb21fY29uZmlnX3BhcmFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDhkYTkuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV9jb25maWdfcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9DT05GSUdfUEFSQU1fSAotI2RlZmluZSBfQ09ORklHX1BBUkFNX0gKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKgotICogRmlsZSBjcmVhdGVkIG9uIDIwMDMtMDUtMjQgYnkgSmVrby4KLSAqIChjKTIwMDMsIEpDIEhvZWx0IGZvciBpT1Mtc29mdHdhcmUuCi0gKgotICogTEdQTCBMaWNlbmNlLgotICovCi0KLXR5cGVkZWYgZW51bSB7Ci0gIFBBUkFNX0lOVFZBTCwKLSAgUEFSQU1fRkxPQVRWQUwsCi0gIFBBUkFNX0JPT0xWQUwsCi0gIFBBUkFNX1NUUlZBTCwKLSAgUEFSQU1fTElTVFZBTCwKLX0gUGFyYW1UeXBlOwotCi1zdHJ1Y3QgSW50VmFsIHsKLSAgaW50IHZhbHVlOwotICBpbnQgbWluOwotICBpbnQgbWF4OwotICBpbnQgc3RlcDsKLX07Ci1zdHJ1Y3QgRmxvYXRWYWwgewotICBmbG9hdCB2YWx1ZTsKLSAgZmxvYXQgbWluOwotICBmbG9hdCBtYXg7Ci0gIGZsb2F0IHN0ZXA7Ci19Owotc3RydWN0IFN0clZhbCB7Ci0gIGNoYXIgKnZhbHVlOwotfTsKLXN0cnVjdCBMaXN0VmFsIHsKLSAgY2hhciAqdmFsdWU7Ci0gIGludCBuYkNob2ljZXM7Ci0gIGNoYXIgKipjaG9pY2VzOwotfTsKLXN0cnVjdCBCb29sVmFsIHsKLSAgaW50IHZhbHVlOwotfTsKLQotCi10eXBlZGVmIHN0cnVjdCBfUEFSQU0gewotICBjb25zdCBjaGFyICpuYW1lOwotICBjb25zdCBjaGFyICpkZXNjOwotICBjaGFyIHJ3OwotICBQYXJhbVR5cGUgdHlwZTsKLSAgdW5pb24gewotICAgIHN0cnVjdCBJbnRWYWwgaXZhbDsKLSAgICBzdHJ1Y3QgRmxvYXRWYWwgZnZhbDsKLSAgICBzdHJ1Y3QgU3RyVmFsIHN2YWw7Ci0gICAgc3RydWN0IExpc3RWYWwgc2xpc3Q7Ci0gICAgc3RydWN0IEJvb2xWYWwgYnZhbDsKLSAgfSBwYXJhbTsKLSAgCi0gIC8qIHVzZWQgYnkgdGhlIGNvcmUgdG8gaW5mb3JtIHRoZSBHVUkgb2YgYSBjaGFuZ2UgKi8KLSAgdm9pZCAoKmNoYW5nZV9saXN0ZW5lcikoc3RydWN0IF9QQVJBTSAqX3RoaXMpOwotCi0gIC8qIHVzZWQgYnkgdGhlIEdVSSB0byBpbmZvcm0gdGhlIGNvcmUgb2YgYSBjaGFuZ2UgKi8KLSAgdm9pZCAoKmNoYW5nZWQpKHN0cnVjdCBfUEFSQU0gKl90aGlzKTsKLSAgCi0gIHZvaWQgKnVzZXJfZGF0YTsgLyogY2FuIGJlIHVzZWQgYnkgdGhlIEdVSSAqLwotfSBQbHVnaW5QYXJhbTsKLQotI2RlZmluZSBJVkFMKHApICgocCkucGFyYW0uaXZhbC52YWx1ZSkKLSNkZWZpbmUgU1ZBTChwKSAoKHApLnBhcmFtLnN2YWwudmFsdWUpCi0jZGVmaW5lIEZWQUwocCkgKChwKS5wYXJhbS5mdmFsLnZhbHVlKQotI2RlZmluZSBCVkFMKHApICgocCkucGFyYW0uYnZhbC52YWx1ZSkKLSNkZWZpbmUgTFZBTChwKSAoKHApLnBhcmFtLnNsaXN0LnZhbHVlKQotCi0jZGVmaW5lIEZNSU4ocCkgKChwKS5wYXJhbS5mdmFsLm1pbikKLSNkZWZpbmUgRk1BWChwKSAoKHApLnBhcmFtLmZ2YWwubWF4KQotI2RlZmluZSBGU1RFUChwKSAoKHApLnBhcmFtLmZ2YWwuc3RlcCkKLQotI2RlZmluZSBJTUlOKHApICgocCkucGFyYW0uaXZhbC5taW4pCi0jZGVmaW5lIElNQVgocCkgKChwKS5wYXJhbS5pdmFsLm1heCkKLSNkZWZpbmUgSVNURVAocCkgKChwKS5wYXJhbS5pdmFsLnN0ZXApCi0KLXZvaWQgZ29vbV9zZWN1cmVfcGFyYW0oUGx1Z2luUGFyYW0gKnApOwotCi12b2lkIGdvb21fc2VjdXJlX2ZfcGFyYW0oUGx1Z2luUGFyYW0gKnAsIGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBnb29tX3NlY3VyZV9pX3BhcmFtKFBsdWdpblBhcmFtICpwLCBjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgZ29vbV9zZWN1cmVfYl9wYXJhbShQbHVnaW5QYXJhbSAqcCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKLXZvaWQgZ29vbV9zZWN1cmVfc19wYXJhbShQbHVnaW5QYXJhbSAqcCwgY29uc3QgY2hhciAqbmFtZSk7Ci0KLXZvaWQgZ29vbV9zZWN1cmVfZl9mZWVkYmFjayhQbHVnaW5QYXJhbSAqcCwgY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIGdvb21fc2VjdXJlX2lfZmVlZGJhY2soUGx1Z2luUGFyYW0gKnAsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi12b2lkIGdvb21fc2V0X3N0cl9wYXJhbV92YWx1ZShQbHVnaW5QYXJhbSAqcCwgY29uc3QgY2hhciAqc3RyKTsKLXZvaWQgZ29vbV9zZXRfbGlzdF9wYXJhbV92YWx1ZShQbHVnaW5QYXJhbSAqcCwgY29uc3QgY2hhciAqc3RyKTsKLSAgICAKLXR5cGVkZWYgc3RydWN0IF9QQVJBTUVURVJTIHsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgY29uc3QgY2hhciAqZGVzYzsKLSAgaW50IG5iUGFyYW1zOwotICBQbHVnaW5QYXJhbSAqKnBhcmFtczsKLX0gUGx1Z2luUGFyYW1ldGVyczsKLQotdm9pZCBnb29tX3BsdWdpbl9wYXJhbWV0ZXJzKFBsdWdpblBhcmFtZXRlcnMgKnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYik7Ci12b2lkIGdvb21fcGx1Z2luX3BhcmFtZXRlcnNfZnJlZShQbHVnaW5QYXJhbWV0ZXJzICpwKTsKLQotI2RlZmluZSBzZWN1cmVfcGFyYW0gZ29vbV9zZWN1cmVfcGFyYW0KLSNkZWZpbmUgc2VjdXJlX2ZfcGFyYW0gZ29vbV9zZWN1cmVfZl9wYXJhbQotI2RlZmluZSBzZWN1cmVfaV9wYXJhbSBnb29tX3NlY3VyZV9pX3BhcmFtCi0jZGVmaW5lIHNlY3VyZV9iX3BhcmFtIGdvb21fc2VjdXJlX2JfcGFyYW0KLSNkZWZpbmUgc2VjdXJlX3NfcGFyYW0gZ29vbV9zZWN1cmVfc19wYXJhbQotI2RlZmluZSBzZWN1cmVfZl9mZWVkYmFjayBnb29tX3NlY3VyZV9mX2ZlZWRiYWNrCi0jZGVmaW5lIHNlY3VyZV9pX2ZlZWRiYWNrIGdvb21fc2VjdXJlX2lfZmVlZGJhY2sKLSNkZWZpbmUgc2V0X2xpc3RfcGFyYW1fdmFsdWUgZ29vbV9zZXRfbGlzdF9wYXJhbV92YWx1ZQotI2RlZmluZSBzZXRfc3RyX3BhcmFtX3ZhbHVlIGdvb21fc2V0X3N0cl9wYXJhbV92YWx1ZQotI2RlZmluZSBwbHVnaW5fcGFyYW1ldGVycyBnb29tX3BsdWdpbl9wYXJhbWV0ZXJzCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ29vbV9jb3JlLmMgYi9nc3QvZ29vbS9nb29tX2NvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxZDRmNy4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9nb29tX2NvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDg1NiArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IEplYW4tQ2hyaXN0b3BoZSBIb2VsdCA8amVrb0BmcmVlLmZyPgotICoKLSAqIGdvb21fY29yZS5jOkNvbnRhaW5zIHRoZSBjb3JlIG9mIGdvb20ncyB3b3JrLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgSEFWRV9JTlRUWVBFU19ICi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ29vbS5oIgotI2luY2x1ZGUgImdvb21fdG9vbHMuaCIKLSNpbmNsdWRlICJnb29tX2ZpbHRlcnMuaCIKLSNpbmNsdWRlICJsaW5lcy5oIgotI2luY2x1ZGUgImlmcy5oIgotI2luY2x1ZGUgInRlbnRhY2xlM2QuaCIKLQotI2luY2x1ZGUgInNvdW5kX3Rlc3Rlci5oIgotI2luY2x1ZGUgImdvb21fcGx1Z2luX2luZm8uaCIKLSNpbmNsdWRlICJnb29tX2Z4LmgiCi0KLS8qICNkZWZpbmUgVkVSQk9TRSAqLwotCi0jZGVmaW5lIFNUT1BfU1BFRUQgMTI4Ci0vKiBUT0RPOiBwdXQgdGhhdCBhcyB2YXJpYWJsZSBpbiBQbHVnaW5JbmZvICovCi0jZGVmaW5lIFRJTUVfQlRXX0NIRyAzMDAKLQotc3RhdGljIHZvaWQgY2hvb3NlX2FfZ29vbV9saW5lIChQbHVnaW5JbmZvICogZ29vbUluZm8sIGZsb2F0ICpwYXJhbTEsCi0gICAgZmxvYXQgKnBhcmFtMiwgaW50ICpjb3VsZXVyLCBpbnQgKm1vZGUsIGZsb2F0ICphbXBsaXR1ZGUsIGludCBmYXIpOwotCi1zdGF0aWMgdm9pZAotaW5pdF9idWZmZXJzIChQbHVnaW5JbmZvICogZ29vbUluZm8sIGludCBidWZmc2l6ZSkKLXsKLSAgZ29vbUluZm8tPnBpeGVsID0gKGd1aW50MzIgKikgbWFsbG9jIChidWZmc2l6ZSAqIHNpemVvZiAoZ3VpbnQzMikgKyAxMjgpOwotICBtZW1zZXQgKGdvb21JbmZvLT5waXhlbCwgMCwgYnVmZnNpemUgKiBzaXplb2YgKGd1aW50MzIpICsgMTI4KTsKLSAgZ29vbUluZm8tPmJhY2sgPSAoZ3VpbnQzMiAqKSBtYWxsb2MgKGJ1ZmZzaXplICogc2l6ZW9mIChndWludDMyKSArIDEyOCk7Ci0gIG1lbXNldCAoZ29vbUluZm8tPmJhY2ssIDAsIGJ1ZmZzaXplICogc2l6ZW9mIChndWludDMyKSArIDEyOCk7Ci0gIGdvb21JbmZvLT5jb252ID0gKFBpeGVsICopIG1hbGxvYyAoYnVmZnNpemUgKiBzaXplb2YgKGd1aW50MzIpICsgMTI4KTsKLSAgbWVtc2V0IChnb29tSW5mby0+Y29udiwgMCwgYnVmZnNpemUgKiBzaXplb2YgKGd1aW50MzIpICsgMTI4KTsKLQotICBnb29tSW5mby0+b3V0cHV0QnVmID0gZ29vbUluZm8tPmNvbnY7Ci0KLSAgZ29vbUluZm8tPnAxID0gKFBpeGVsICopICgoMSArICgodWludHB0cl90KSAoZ29vbUluZm8tPnBpeGVsKSkgLyAxMjgpICogMTI4KTsKLSAgZ29vbUluZm8tPnAyID0gKFBpeGVsICopICgoMSArICgodWludHB0cl90KSAoZ29vbUluZm8tPmJhY2spKSAvIDEyOCkgKiAxMjgpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgICBJTklUICAgICAgICAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKi8KLVBsdWdpbkluZm8gKgotZ29vbV9pbml0IChndWludDMyIHJlc3gsIGd1aW50MzIgcmVzeSkKLXsKLSAgUGx1Z2luSW5mbyAqZ29vbUluZm8gPSAoUGx1Z2luSW5mbyAqKSBtYWxsb2MgKHNpemVvZiAoUGx1Z2luSW5mbykpOwotCi0jaWZkZWYgVkVSQk9TRQotICBwcmludGYgKCJHT09NOiBpbml0ICglZCwgJWQpO1xuIiwgcmVzeCwgcmVzeSk7Ci0jZW5kaWYKLQotICBwbHVnaW5faW5mb19pbml0IChnb29tSW5mbywgNCk7Ci0KLSAgZ29vbUluZm8tPnNjcmVlbi53aWR0aCA9IHJlc3g7Ci0gIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0ID0gcmVzeTsKLSAgZ29vbUluZm8tPnNjcmVlbi5zaXplID0gcmVzeCAqIHJlc3k7Ci0KLSAgaW5pdF9idWZmZXJzIChnb29tSW5mbywgZ29vbUluZm8tPnNjcmVlbi5zaXplKTsKLSAgZ29vbUluZm8tPmdSYW5kb20gPSBnb29tX3JhbmRvbV9pbml0ICgodWludHB0cl90KSBnb29tSW5mby0+cGl4ZWwpOwotCi0gIGdvb21JbmZvLT5jeWNsZSA9IDA7Ci0KLSAgZmx5aW5nX3N0YXJfY3JlYXRlICgmZ29vbUluZm8tPnN0YXJfZngpOwotICBnb29tSW5mby0+c3Rhcl9meC5pbml0ICgmZ29vbUluZm8tPnN0YXJfZngsIGdvb21JbmZvKTsKLQotICB6b29tRmlsdGVyVmlzdWFsRlhXcmFwcGVyX2NyZWF0ZSAoJmdvb21JbmZvLT56b29tRmlsdGVyX2Z4KTsKLSAgZ29vbUluZm8tPnpvb21GaWx0ZXJfZnguaW5pdCAoJmdvb21JbmZvLT56b29tRmlsdGVyX2Z4LCBnb29tSW5mbyk7Ci0KLSAgdGVudGFjbGVfZnhfY3JlYXRlICgmZ29vbUluZm8tPnRlbnRhY2xlc19meCk7Ci0gIGdvb21JbmZvLT50ZW50YWNsZXNfZnguaW5pdCAoJmdvb21JbmZvLT50ZW50YWNsZXNfZngsIGdvb21JbmZvKTsKLQotICBjb252b2x2ZV9jcmVhdGUgKCZnb29tSW5mby0+Y29udm9sdmVfZngpOwotICBnb29tSW5mby0+Y29udm9sdmVfZnguaW5pdCAoJmdvb21JbmZvLT5jb252b2x2ZV9meCwgZ29vbUluZm8pOwotCi0gIHBsdWdpbl9pbmZvX2FkZF92aXN1YWwgKGdvb21JbmZvLCAwLCAmZ29vbUluZm8tPnpvb21GaWx0ZXJfZngpOwotICBwbHVnaW5faW5mb19hZGRfdmlzdWFsIChnb29tSW5mbywgMSwgJmdvb21JbmZvLT50ZW50YWNsZXNfZngpOwotICBwbHVnaW5faW5mb19hZGRfdmlzdWFsIChnb29tSW5mbywgMiwgJmdvb21JbmZvLT5zdGFyX2Z4KTsKLSAgcGx1Z2luX2luZm9fYWRkX3Zpc3VhbCAoZ29vbUluZm8sIDMsICZnb29tSW5mby0+Y29udm9sdmVfZngpOwotCi0gIGlmc192aXN1YWxmeF9jcmVhdGUgKCZnb29tSW5mby0+aWZzX2Z4KTsKLSAgZ29vbUluZm8tPmlmc19meC5pbml0ICgmZ29vbUluZm8tPmlmc19meCwgZ29vbUluZm8pOwotCi0gIGdvb21JbmZvLT5nbWxpbmUxID0gZ29vbV9saW5lc19pbml0IChnb29tSW5mbywgcmVzeCwgZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQsCi0gICAgICBHTUxfSExJTkUsIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0LCBHTUxfQkxBQ0ssCi0gICAgICBHTUxfQ0lSQ0xFLCAwLjRmICogKGZsb2F0KSBnb29tSW5mby0+c2NyZWVuLmhlaWdodCwgR01MX1ZFUlQpOwotICBnb29tSW5mby0+Z21saW5lMiA9IGdvb21fbGluZXNfaW5pdCAoZ29vbUluZm8sIHJlc3gsIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0LAotICAgICAgR01MX0hMSU5FLCAwLCBHTUxfQkxBQ0ssCi0gICAgICBHTUxfQ0lSQ0xFLCAwLjJmICogKGZsb2F0KSBnb29tSW5mby0+c2NyZWVuLmhlaWdodCwgR01MX1JFRCk7Ci0KLSAgLyogZ29vbV9zZXRfbWFpbl9zY3JpcHQoZ29vbUluZm8sIGdvb21JbmZvLT5tYWluX3NjcmlwdF9zdHIpOyAqLwotCi0gIHJldHVybiBnb29tSW5mbzsKLX0KLQotCi0KLXZvaWQKLWdvb21fc2V0X3Jlc29sdXRpb24gKFBsdWdpbkluZm8gKiBnb29tSW5mbywgZ3VpbnQzMiByZXN4LCBndWludDMyIHJlc3kpCi17Ci0gIGZyZWUgKGdvb21JbmZvLT5waXhlbCk7Ci0gIGZyZWUgKGdvb21JbmZvLT5iYWNrKTsKLSAgZnJlZSAoZ29vbUluZm8tPmNvbnYpOwotCi0gIGdvb21JbmZvLT5zY3JlZW4ud2lkdGggPSByZXN4OwotICBnb29tSW5mby0+c2NyZWVuLmhlaWdodCA9IHJlc3k7Ci0gIGdvb21JbmZvLT5zY3JlZW4uc2l6ZSA9IHJlc3ggKiByZXN5OwotCi0gIGluaXRfYnVmZmVycyAoZ29vbUluZm8sIGdvb21JbmZvLT5zY3JlZW4uc2l6ZSk7Ci0KLSAgLyogaW5pdF9pZnMgKGdvb21JbmZvLCByZXN4LCBnb29tSW5mby0+c2NyZWVuLmhlaWdodCk7ICovCi0gIGdvb21JbmZvLT5pZnNfZnguZnJlZSAoJmdvb21JbmZvLT5pZnNfZngpOwotICBnb29tSW5mby0+aWZzX2Z4LmluaXQgKCZnb29tSW5mby0+aWZzX2Z4LCBnb29tSW5mbyk7Ci0KLSAgZ29vbV9saW5lc19zZXRfcmVzIChnb29tSW5mby0+Z21saW5lMSwgcmVzeCwgZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQpOwotICBnb29tX2xpbmVzX3NldF9yZXMgKGdvb21JbmZvLT5nbWxpbmUyLCByZXN4LCBnb29tSW5mby0+c2NyZWVuLmhlaWdodCk7Ci19Ci0KLWludAotZ29vbV9zZXRfc2NyZWVuYnVmZmVyIChQbHVnaW5JbmZvICogZ29vbUluZm8sIHZvaWQgKmJ1ZmZlcikKLXsKLSAgZ29vbUluZm8tPm91dHB1dEJ1ZiA9IChQaXhlbCAqKSBidWZmZXI7Ci0gIHJldHVybiAxOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgICAgICAgICAgICBVUERBVEUgICAgICAgICAgICAgICAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0qIFdBUk5JTkc6IHRoaXMgaXMgYSA2MDAgbGluZXMgZnVuY3Rpb24gISAoMjEtMTEtMjAwMykKLSovCi1ndWludDMyICoKLWdvb21fdXBkYXRlIChQbHVnaW5JbmZvICogZ29vbUluZm8sIGdpbnQxNiBkYXRhWzJdWzUxMl0sIGludCBmb3JjZU1vZGUsCi0gICAgZmxvYXQgZnBzKQotewotICBQaXhlbCAqcmV0dXJuX3ZhbDsKLSAgZ3VpbnQzMiBwb2ludFdpZHRoOwotICBndWludDMyIHBvaW50SGVpZ2h0OwotICBpbnQgaTsKLSAgZmxvYXQgbGFyZ2ZhY3RvcjsgICAgICAgICAgICAgLyogZWxhcmdpc3NlbWVudCBkZSBsJ2ludGVydmFsbGUgZCfvv712b2x1dGlvbiBkZXMgcG9pbnRzICovCi0gIFBpeGVsICp0bXA7Ci0KLSAgWm9vbUZpbHRlckRhdGEgKnB6ZmQ7Ci0KLSAgLyogdGVzdCBpZiB0aGUgY29uZmlnIGhhcyBjaGFuZ2VkLCB1cGRhdGUgaXQgaWYgc28gKi8KLSAgcG9pbnRXaWR0aCA9IChnb29tSW5mby0+c2NyZWVuLndpZHRoICogMikgLyA1OwotICBwb2ludEhlaWdodCA9ICgoZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQpICogMikgLyA1OwotCi0gIC8qICEgZXR1ZGUgZHUgc2lnbmFsIC4uLiAqLwotICBldmFsdWF0ZV9zb3VuZCAoZGF0YSwgJihnb29tSW5mby0+c291bmQpKTsKLQotICAvKiBnb29tX2V4ZWN1dGVfbWFpbl9zY3JpcHQoZ29vbUluZm8pOyAqLwotCi0gIC8qICEgY2FsY3VsIGR1IGRlcGxhY2VtZW50IGRlcyBwZXRpdHMgcG9pbnRzIC4uLiAqLwotICBsYXJnZmFjdG9yID0KLSAgICAgIGdvb21JbmZvLT5zb3VuZC5zcGVlZHZhciAvIDE1MC4wZiArIGdvb21JbmZvLT5zb3VuZC52b2x1bWUgLyAxLjVmOwotCi0gIGlmIChsYXJnZmFjdG9yID4gMS41ZikKLSAgICBsYXJnZmFjdG9yID0gMS41ZjsKLQotICBnb29tSW5mby0+dXBkYXRlLmRlY2F5X2lmcy0tOwotICBpZiAoZ29vbUluZm8tPnVwZGF0ZS5kZWNheV9pZnMgPiAwKQotICAgIGdvb21JbmZvLT51cGRhdGUuaWZzX2luY3IgKz0gMjsKLSAgaWYgKGdvb21JbmZvLT51cGRhdGUuZGVjYXlfaWZzID09IDApCi0gICAgZ29vbUluZm8tPnVwZGF0ZS5pZnNfaW5jciA9IDA7Ci0KLSAgaWYgKGdvb21JbmZvLT51cGRhdGUucmVjYXlfaWZzKSB7Ci0gICAgZ29vbUluZm8tPnVwZGF0ZS5pZnNfaW5jciAtPSAyOwotICAgIGdvb21JbmZvLT51cGRhdGUucmVjYXlfaWZzLS07Ci0gICAgaWYgKChnb29tSW5mby0+dXBkYXRlLnJlY2F5X2lmcyA9PSAwKSAmJiAoZ29vbUluZm8tPnVwZGF0ZS5pZnNfaW5jciA8PSAwKSkKLSAgICAgIGdvb21JbmZvLT51cGRhdGUuaWZzX2luY3IgPSAxOwotICB9Ci0KLSAgaWYgKGdvb21JbmZvLT51cGRhdGUuaWZzX2luY3IgPiAwKQotICAgIGdvb21JbmZvLT5pZnNfZnguYXBwbHkgKCZnb29tSW5mby0+aWZzX2Z4LCBnb29tSW5mby0+cDIsIGdvb21JbmZvLT5wMSwKLSAgICAgICAgZ29vbUluZm8pOwotCi0gIGlmIChnb29tSW5mby0+Y3VyR1N0YXRlLT5kcmF3UG9pbnRzKSB7Ci0gICAgZm9yIChpID0gMTsgaSAqIDE1IDw9IGdvb21JbmZvLT5zb3VuZC5zcGVlZHZhciAqIDgwLjBmICsgMTU7IGkrKykgewotICAgICAgZ29vbUluZm8tPnVwZGF0ZS5sb29wdmFyICs9IGdvb21JbmZvLT5zb3VuZC5zcGVlZHZhciAqIDUwICsgMTsKLQotICAgICAgcG9pbnRGaWx0ZXIgKGdvb21JbmZvLCBnb29tSW5mby0+cDEsCi0gICAgICAgICAgWUVMTE9XLAotICAgICAgICAgICgocG9pbnRXaWR0aCAtIDYuMGYpICogbGFyZ2ZhY3RvciArIDUuMGYpLAotICAgICAgICAgICgocG9pbnRIZWlnaHQgLSA2LjBmKSAqIGxhcmdmYWN0b3IgKyA1LjBmKSwKLSAgICAgICAgICBpICogMTUyLjBmLCAxMjguMGYsIGdvb21JbmZvLT51cGRhdGUubG9vcHZhciArIGkgKiAyMDMyKTsKLSAgICAgIHBvaW50RmlsdGVyIChnb29tSW5mbywgZ29vbUluZm8tPnAxLCBPUkFOR0UsCi0gICAgICAgICAgKChwb2ludFdpZHRoIC8gMikgKiBsYXJnZmFjdG9yKSAvIGkgKyAxMC4wZiAqIGksCi0gICAgICAgICAgKChwb2ludEhlaWdodCAvIDIpICogbGFyZ2ZhY3RvcikgLyBpICsgMTAuMGYgKiBpLAotICAgICAgICAgIDk2LjBmLCBpICogODAuMGYsIGdvb21JbmZvLT51cGRhdGUubG9vcHZhciAvIGkpOwotICAgICAgcG9pbnRGaWx0ZXIgKGdvb21JbmZvLCBnb29tSW5mby0+cDEsIFZJT0xFVCwKLSAgICAgICAgICAoKHBvaW50SGVpZ2h0IC8gMyArIDUuMGYpICogbGFyZ2ZhY3RvcikgLyBpICsgMTAuMGYgKiBpLAotICAgICAgICAgICgocG9pbnRIZWlnaHQgLyAzICsgNS4wZikgKiBsYXJnZmFjdG9yKSAvIGkgKyAxMC4wZiAqIGksCi0gICAgICAgICAgaSArIDEyMi4wZiwgMTM0LjBmLCBnb29tSW5mby0+dXBkYXRlLmxvb3B2YXIgLyBpKTsKLSAgICAgIHBvaW50RmlsdGVyIChnb29tSW5mbywgZ29vbUluZm8tPnAxLCBCTEFDSywKLSAgICAgICAgICAoKHBvaW50SGVpZ2h0IC8gMykgKiBsYXJnZmFjdG9yICsgMjAuMGYpLAotICAgICAgICAgICgocG9pbnRIZWlnaHQgLyAzKSAqIGxhcmdmYWN0b3IgKyAyMC4wZiksCi0gICAgICAgICAgNTguMGYsIGkgKiA2Ni4wZiwgZ29vbUluZm8tPnVwZGF0ZS5sb29wdmFyIC8gaSk7Ci0gICAgICBwb2ludEZpbHRlciAoZ29vbUluZm8sIGdvb21JbmZvLT5wMSwgV0hJVEUsCi0gICAgICAgICAgKHBvaW50SGVpZ2h0ICogbGFyZ2ZhY3RvciArIDEwLjBmICogaSkgLyBpLAotICAgICAgICAgIChwb2ludEhlaWdodCAqIGxhcmdmYWN0b3IgKyAxMC4wZiAqIGkpIC8gaSwKLSAgICAgICAgICA2Ni4wZiwgNzQuMGYsIGdvb21JbmZvLT51cGRhdGUubG9vcHZhciArIGkgKiA1MDApOwotICAgIH0KLSAgfQotCi0gIC8qIHBhciBk77+9ZmF1dCBwYXMgZGUgY2hhbmdlbWVudCBkZSB6b29tICovCi0gIHB6ZmQgPSBOVUxMOwotCi0gIC8qIAotICAgKiBUZXN0IGZvcmNlTW9kZQotICAgKi8KLSNpZmRlZiBWRVJCT1NFCi0gIGlmIChmb3JjZU1vZGUgIT0gMCkgewotICAgIHByaW50ZiAoImZvcmNlbW9kZSA9ICVkXG4iLCBmb3JjZU1vZGUpOwotICB9Ci0jZW5kaWYKLQotCi0gIC8qIGRpbWludWVyIGRlIDEgbGUgdGVtcHMgZGUgbG9ja2FnZSAqLwotICAvKiBub3RlIHBvdXIgY2V1eCBxdWkgbidvbnQgcGFzIHN1aXZpcyA6IGxlIGxvY2t2YXIgcGVybWV0IGQnZW1wZWNoZXIgdW4gKi8KLSAgLyogY2hhbmdlbWVudCBkJ2V0YXQgZHUgcGx1Z2luIGp1c3RlIGFwcmVzIHVuIGF1dHJlIGNoYW5nZW1lbnQgZCdldGF0LiBva2kgKi8KLSAgaWYgKC0tZ29vbUluZm8tPnVwZGF0ZS5sb2NrdmFyIDwgMCkKLSAgICBnb29tSW5mby0+dXBkYXRlLmxvY2t2YXIgPSAwOwotCi0gIC8qIG9uIHZlcmlmaWUgcXUnaWwgbmUgc2UgcGFzIHVuIHRydWMgaW50ZXJyZXNzYW50IGF2ZWMgbGUgc29uLiAqLwotICBpZiAoKGdvb21JbmZvLT5zb3VuZC50aW1lU2luY2VMYXN0R29vbSA9PSAwKQotICAgICAgfHwgKGZvcmNlTW9kZSA+IDApCi0gICAgICB8fCAoZ29vbUluZm8tPnVwZGF0ZS5jeWNsZXNTaW5jZUxhc3RDaGFuZ2UgPiBUSU1FX0JUV19DSEcpKSB7Ci0KLSAgICAvKiBjaGFuZ2VtZW50IGV2ZW50dWVsIGRlIG1vZGUgKi8KLSAgICBpZiAoZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDE2KSA9PSAwKQotICAgICAgc3dpdGNoIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMzQpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmh5cGVyY29zRWZmZWN0ID0KLSAgICAgICAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDIpOwotICAgICAgICBjYXNlIDEzOgotICAgICAgICBjYXNlIDIwOgotICAgICAgICBjYXNlIDIxOgotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubW9kZSA9IFdBVkVfTU9ERTsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnJldmVyc2UgPSAwOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9Ci0gICAgICAgICAgICAgIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMykgPT0gMCk7Ci0gICAgICAgICAgaWYgKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAyKSkKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSA9Ci0gICAgICAgICAgICAgICAgKGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSArIDEyNykgPj4gMTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICBjYXNlIDExOgotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubW9kZSA9IENSWVNUQUxfQkFMTF9NT0RFOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oeXBlcmNvc0VmZmVjdCA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgY2FzZSAxMjoKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPSBBTVVMRVRURV9NT0RFOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oeXBlcmNvc0VmZmVjdCA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPSBXQVRFUl9NT0RFOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oeXBlcmNvc0VmZmVjdCA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgY2FzZSAxNDoKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPSBTQ1JVTkNIX01PREU7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS53YXZlRWZmZWN0ID0gMDsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmh5cGVyY29zRWZmZWN0ID0gMDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICBjYXNlIDE1OgotICAgICAgICBjYXNlIDIyOgotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubW9kZSA9IEhZUEVSQ09TMV9NT0RFOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oeXBlcmNvc0VmZmVjdCA9Ci0gICAgICAgICAgICAgIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMykgPT0gMCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgY2FzZSAxNjoKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPSBIWVBFUkNPUzJfTU9ERTsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLndhdmVFZmZlY3QgPSAwOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaHlwZXJjb3NFZmZlY3QgPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgIGNhc2UgMTc6Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5tb2RlID0gQ1JZU1RBTF9CQUxMX01PREU7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS53YXZlRWZmZWN0ID0KLSAgICAgICAgICAgICAgKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCA0KSA9PSAwKTsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmh5cGVyY29zRWZmZWN0ID0KLSAgICAgICAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDg6Ci0gICAgICAgIGNhc2UgMTg6Ci0gICAgICAgIGNhc2UgMTk6Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5tb2RlID0gU0NSVU5DSF9NT0RFOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9IDE7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oeXBlcmNvc0VmZmVjdCA9IDE7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjk6Ci0gICAgICAgIGNhc2UgMzA6Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5tb2RlID0gWU9OTFlfTU9ERTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzMToKLSAgICAgICAgY2FzZSAzMjoKLSAgICAgICAgY2FzZSAzMzoKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPSBTUEVFRFdBWV9NT0RFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubW9kZSA9IE5PUk1BTF9NT0RFOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEud2F2ZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oeXBlcmNvc0VmZmVjdCA9IDA7Ci0gICAgICB9Ci0gIH0KLQotICAvKiB0b3V0IGNlY2kgbmUgc2VyYSBmYWl0IHF1J2VuIGNhcyBkZSBub24tYmxvY2FnZSAqLwotICBpZiAoZ29vbUluZm8tPnVwZGF0ZS5sb2NrdmFyID09IDApIHsKLSAgICAvKiByZXBlcmFnZSBkZSBnb29tIChhY2NlbGVyYXRpb24gZm9ydGUgZGUgbCdhY2NlbGVyYXRpb24gZHUgdm9sdW1lKSAqLwotICAgIC8qIC0+IGNvdXAgZGUgYm9vc3QgZGUgbGEgdml0ZXNzZSBzaSBiZXNvaW4uLiAqLwotICAgIGlmIChnb29tSW5mby0+c291bmQudGltZVNpbmNlTGFzdEdvb20gPT0gMCkgewotCi0gICAgICBpbnQgaTsKLQotICAgICAgZ29vbUluZm8tPnVwZGF0ZS5nb29tdmFyKys7Ci0KLSAgICAgIC8qIFNFTEVDVElPTiBPRiBUSEUgR09PTSBTVEFURSAqLwotICAgICAgaWYgKCghZ29vbUluZm8tPnVwZGF0ZS5zdGF0ZVNlbGVjdGlvbkJsb2NrZXIpCi0gICAgICAgICAgJiYgKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAzKSkpIHsKLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zdGF0ZVNlbGVjdGlvblJuZCA9Ci0gICAgICAgICAgICBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgZ29vbUluZm8tPnN0YXRlc1JhbmdlTWF4KTsKLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zdGF0ZVNlbGVjdGlvbkJsb2NrZXIgPSAzOwotICAgICAgfSBlbHNlIGlmIChnb29tSW5mby0+dXBkYXRlLnN0YXRlU2VsZWN0aW9uQmxvY2tlcikKLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zdGF0ZVNlbGVjdGlvbkJsb2NrZXItLTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IGdvb21JbmZvLT5zdGF0ZXNOdW1iZXI7IGkrKykKLSAgICAgICAgaWYgKChnb29tSW5mby0+dXBkYXRlLnN0YXRlU2VsZWN0aW9uUm5kID49IGdvb21JbmZvLT5zdGF0ZXNbaV0ucmFuZ2VtaW4pCi0gICAgICAgICAgICAmJiAoZ29vbUluZm8tPnVwZGF0ZS5zdGF0ZVNlbGVjdGlvblJuZCA8PQotICAgICAgICAgICAgICAgIGdvb21JbmZvLT5zdGF0ZXNbaV0ucmFuZ2VtYXgpKQotICAgICAgICAgIGdvb21JbmZvLT5jdXJHU3RhdGUgPSAmKGdvb21JbmZvLT5zdGF0ZXNbaV0pOwotCi0gICAgICBpZiAoKGdvb21JbmZvLT5jdXJHU3RhdGUtPmRyYXdJRlMpICYmIChnb29tSW5mby0+dXBkYXRlLmlmc19pbmNyIDw9IDApKSB7Ci0gICAgICAgIGdvb21JbmZvLT51cGRhdGUucmVjYXlfaWZzID0gNTsKLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5pZnNfaW5jciA9IDExOwotICAgICAgfQotCi0gICAgICBpZiAoKCFnb29tSW5mby0+Y3VyR1N0YXRlLT5kcmF3SUZTKSAmJiAoZ29vbUluZm8tPnVwZGF0ZS5pZnNfaW5jciA+IDApCi0gICAgICAgICAgJiYgKGdvb21JbmZvLT51cGRhdGUuZGVjYXlfaWZzIDw9IDApKQotICAgICAgICBnb29tSW5mby0+dXBkYXRlLmRlY2F5X2lmcyA9IDEwMDsKLQotICAgICAgaWYgKCFnb29tSW5mby0+Y3VyR1N0YXRlLT5kcmF3U2NvcGUpCi0gICAgICAgIGdvb21JbmZvLT51cGRhdGUuc3RvcF9saW5lcyA9IDB4ZjAwMCAmIDU7Ci0KLSAgICAgIGlmICghZ29vbUluZm8tPmN1ckdTdGF0ZS0+ZHJhd1Njb3BlKSB7Ci0gICAgICAgIGdvb21JbmZvLT51cGRhdGUuc3RvcF9saW5lcyA9IDA7Ci0gICAgICAgIGdvb21JbmZvLT51cGRhdGUubGluZU1vZGUgPSBnb29tSW5mby0+dXBkYXRlLmRyYXdMaW5lc0R1cmF0aW9uOwotICAgICAgfQotCi0gICAgICAvKiBpZiAoZ29vbUluZm8tPnVwZGF0ZS5nb29tdmFyICUgMSA9PSAwKSAqLwotICAgICAgewotICAgICAgICBndWludDMyIHZ0bXA7Ci0gICAgICAgIGd1aW50MzIgbmV3dml0OwotCi0gICAgICAgIGdvb21JbmZvLT51cGRhdGUubG9ja3ZhciA9IDUwOwotICAgICAgICBuZXd2aXQgPQotICAgICAgICAgICAgU1RPUF9TUEVFRCArIDEgLQotICAgICAgICAgICAgKChmbG9hdCkgMy41ZiAqIGxvZzEwIChnb29tSW5mby0+c291bmQuc3BlZWR2YXIgKiA2MCArIDEpKTsKLSAgICAgICAgLyogcmV0YWJsaXIgbGUgem9vbSBhdmFudC4uICovCi0gICAgICAgIGlmICgoZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5yZXZlcnNlKQotICAgICAgICAgICAgJiYgKCEoZ29vbUluZm8tPmN5Y2xlICUgMTMpKSAmJiAocmFuZCAoKSAlIDUgPT0gMCkpIHsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnJldmVyc2UgPSAwOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSA9IFNUT1BfU1BFRUQgLSAyOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUubG9ja3ZhciA9IDc1OwotICAgICAgICB9Ci0gICAgICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTApID09IDApIHsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnJldmVyc2UgPSAxOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUubG9ja3ZhciA9IDEwMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTApID09IDApCi0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlID0gU1RPUF9TUEVFRCAtIDE7Ci0gICAgICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTIpID09IDApCi0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlID0gU1RPUF9TUEVFRCArIDE7Ci0KLSAgICAgICAgLyogY2hhbmdlbWVudCBkZSBtaWxpZXUuLiAqLwotICAgICAgICBzd2l0Y2ggKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAyNSkpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubWlkZGxlWSA9Ci0gICAgICAgICAgICAgICAgZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQgLSAxOwotICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5taWRkbGVYID0KLSAgICAgICAgICAgICAgICBnb29tSW5mby0+c2NyZWVuLndpZHRoIC8gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1pZGRsZVggPQotICAgICAgICAgICAgICAgIGdvb21JbmZvLT5zY3JlZW4ud2lkdGggLSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOgotICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubWlkZGxlWCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5taWRkbGVZID0KLSAgICAgICAgICAgICAgICBnb29tSW5mby0+c2NyZWVuLmhlaWdodCAvIDI7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1pZGRsZVggPQotICAgICAgICAgICAgICAgIGdvb21JbmZvLT5zY3JlZW4ud2lkdGggLyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPT0gV0FURVJfTU9ERSkKLSAgICAgICAgICAgIHx8IChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPT0gWU9OTFlfTU9ERSkKLSAgICAgICAgICAgIHx8IChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1vZGUgPT0gQU1VTEVUVEVfTU9ERSkpIHsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1pZGRsZVggPSBnb29tSW5mby0+c2NyZWVuLndpZHRoIC8gMjsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1pZGRsZVkgPSBnb29tSW5mby0+c2NyZWVuLmhlaWdodCAvIDI7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHZ0bXAgPSAoZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDE1KSkpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDMpCi0gICAgICAgICAgICAgICAgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMyk7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmhQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDMpCi0gICAgICAgICAgICAgICAgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmhQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDgpCi0gICAgICAgICAgICAgICAgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgY2FzZSA1OgotICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDUpCi0gICAgICAgICAgICAgICAgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgNSk7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmhQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgLWdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudlBsYW5lRWZmZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5oUGxhbmVFZmZlY3QgPQotICAgICAgICAgICAgICAgIDUgKyBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgOCk7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgLWdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaFBsYW5lRWZmZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52UGxhbmVFZmZlY3QgPQotICAgICAgICAgICAgICAgIDUgKyBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgOCk7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmhQbGFuZUVmZmVjdCA9Ci0gICAgICAgICAgICAgICAgLWdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaFBsYW5lRWZmZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMzoKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaFBsYW5lRWZmZWN0ID0gMDsKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudlBsYW5lRWZmZWN0ID0KLSAgICAgICAgICAgICAgICBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTApCi0gICAgICAgICAgICAgICAgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxNDoKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaFBsYW5lRWZmZWN0ID0KLSAgICAgICAgICAgICAgICBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTApCi0gICAgICAgICAgICAgICAgLSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMTApOwotICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52UGxhbmVFZmZlY3QgPQotICAgICAgICAgICAgICAgIGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAxMCkKLSAgICAgICAgICAgICAgICAtIGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAxMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZ0bXAgPCAxMCkgewotICAgICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaFBsYW5lRWZmZWN0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgNSkgIT0gMCkKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm5vaXNpZnkgPSAwOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm5vaXNpZnkgPQotICAgICAgICAgICAgICBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMikgKyAxOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUubG9ja3ZhciAqPSAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEubW9kZSA9PSBBTVVMRVRURV9NT0RFKSB7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52UGxhbmVFZmZlY3QgPSAwOwotICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEuaFBsYW5lRWZmZWN0ID0gMDsKLSAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm5vaXNpZnkgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1pZGRsZVggPT0gMSkKLSAgICAgICAgICAgIHx8IChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLm1pZGRsZVggPT0KLSAgICAgICAgICAgICAgICAoc2lnbmVkIGludCkgZ29vbUluZm8tPnNjcmVlbi53aWR0aCAtIDEpKSB7Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52UGxhbmVFZmZlY3QgPSAwOwotICAgICAgICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMikpCi0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLmhQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHNpZ25lZCBpbnQpIG5ld3ZpdCA8IGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSkgeyAgICAvKiBvbiBhY2NlbGVyZSAqLwotICAgICAgICAgIHB6ZmQgPSAmZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YTsKLSAgICAgICAgICBpZiAoKChuZXd2aXQgPCBTVE9QX1NQRUVEIC0gNykgJiYKLSAgICAgICAgICAgICAgICAgIChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZpdGVzc2UgPCBTVE9QX1NQRUVEIC0gNikgJiYKLSAgICAgICAgICAgICAgICAgIChnb29tSW5mby0+Y3ljbGUgJSAzID09IDApKQotICAgICAgICAgICAgICB8fCAoZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDQwKSA9PSAwKSkgewotICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlID0KLSAgICAgICAgICAgICAgICBTVE9QX1NQRUVEIC0gZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDIpCi0gICAgICAgICAgICAgICAgKyBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMik7Ci0gICAgICAgICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnJldmVyc2UgPQotICAgICAgICAgICAgICAgICFnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnJldmVyc2U7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSA9Ci0gICAgICAgICAgICAgICAgKG5ld3ZpdCArIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSAqIDcpIC8gODsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5sb2NrdmFyICs9IDUwOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnb29tSW5mby0+dXBkYXRlLmxvY2t2YXIgPiAxNTApIHsKLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zd2l0Y2hJbmNyID0gZ29vbUluZm8tPnVwZGF0ZS5zd2l0Y2hJbmNyQW1vdW50OwotICAgICAgICBnb29tSW5mby0+dXBkYXRlLnN3aXRjaE11bHQgPSAxLjBmOwotICAgICAgfQotICAgIH0KLSAgICAvKiBtb2RlIG1lZ2EtbGVudCAqLwotICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgNzAwKSA9PSAwKSB7Ci0gICAgICAvKiAKLSAgICAgICAqIHByaW50ZiAoImNvdXAgZHUgc29ydC4uLlxuIikgOwotICAgICAgICovCi0gICAgICBwemZkID0gJmdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGE7Ci0gICAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZpdGVzc2UgPSBTVE9QX1NQRUVEIC0gMTsKLSAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEucGVydGVkZWMgPSA4OwotICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5zcXJ0cGVydGUgPSAxNjsKLSAgICAgIGdvb21JbmZvLT51cGRhdGUuZ29vbXZhciA9IDE7Ci0gICAgICBnb29tSW5mby0+dXBkYXRlLmxvY2t2YXIgKz0gNTA7Ci0gICAgICBnb29tSW5mby0+dXBkYXRlLnN3aXRjaEluY3IgPSBnb29tSW5mby0+dXBkYXRlLnN3aXRjaEluY3JBbW91bnQ7Ci0gICAgICBnb29tSW5mby0+dXBkYXRlLnN3aXRjaE11bHQgPSAxLjBmOwotICAgIH0KLSAgfQotCi0gIC8qCi0gICAqIGdyb3MgZnJlaW4gc2kgbGEgbXVzaXF1ZSBlc3QgY2FsbWUKLSAgICovCi0gIGlmICgoZ29vbUluZm8tPnNvdW5kLnNwZWVkdmFyIDwgMC4wMWYpCi0gICAgICAmJiAoZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlIDwgU1RPUF9TUEVFRCAtIDQpCi0gICAgICAmJiAoZ29vbUluZm8tPmN5Y2xlICUgMTYgPT0gMCkpIHsKLSAgICBwemZkID0gJmdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGE7Ci0gICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlICs9IDM7Ci0gICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5wZXJ0ZWRlYyA9IDg7Ci0gICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5zcXJ0cGVydGUgPSAxNjsKLSAgICBnb29tSW5mby0+dXBkYXRlLmdvb212YXIgPSAwOwotICB9Ci0KLSAgLyoKLSAgICogYmFpc3NlciByZWd1bGllcmVtZW50IGxhIHZpdGVzc2UuLi4KLSAgICovCi0gIGlmICgoZ29vbUluZm8tPmN5Y2xlICUgNzMgPT0gMCkKLSAgICAgICYmIChnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnZpdGVzc2UgPCBTVE9QX1NQRUVEIC0gNSkpIHsKLSAgICBwemZkID0gJmdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGE7Ci0gICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlKys7Ci0gIH0KLQotICAvKgotICAgKiBhcnJldGVyIGRlIGRlY3Lvv71tZW50ZXIgYXUgYm91dCBkJ3VuIGNlcnRhaW4gdGVtcHMKLSAgICovCi0gIGlmICgoZ29vbUluZm8tPmN5Y2xlICUgMTAxID09IDApCi0gICAgICAmJiAoZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS5wZXJ0ZWRlYyA9PSA3KSkgewotICAgIHB6ZmQgPSAmZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YTsKLSAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnBlcnRlZGVjID0gODsKLSAgICBnb29tSW5mby0+dXBkYXRlLnpvb21GaWx0ZXJEYXRhLnNxcnRwZXJ0ZSA9IDE2OwotICB9Ci0KLSAgLyoKLSAgICogUGVybWV0IGRlIGZvcmNlciB1biBlZmZldC4KLSAgICovCi0gIGlmICgoZm9yY2VNb2RlID4gMCkgJiYgKGZvcmNlTW9kZSA8PSBOQl9GWCkpIHsKLSAgICBwemZkID0gJmdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGE7Ci0gICAgcHpmZC0+bW9kZSA9IGZvcmNlTW9kZSAtIDE7Ci0gIH0KLQotICBpZiAoZm9yY2VNb2RlID09IC0xKSB7Ci0gICAgcHpmZCA9IE5VTEw7Ci0gIH0KLQotICAvKgotICAgKiBDaGFuZ2VtZW50IGQnZWZmZXQgZGUgem9vbSAhCi0gICAqLwotICBpZiAocHpmZCAhPSBOVUxMKSB7Ci0gICAgaW50IGRpZjsKLQotICAgIGdvb21JbmZvLT51cGRhdGUuY3ljbGVzU2luY2VMYXN0Q2hhbmdlID0gMDsKLQotICAgIGdvb21JbmZvLT51cGRhdGUuc3dpdGNoSW5jciA9IGdvb21JbmZvLT51cGRhdGUuc3dpdGNoSW5jckFtb3VudDsKLQotICAgIGRpZiA9Ci0gICAgICAgIGdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGEudml0ZXNzZSAtCi0gICAgICAgIGdvb21JbmZvLT51cGRhdGUucHJldmlvdXNab29tU3BlZWQ7Ci0gICAgaWYgKGRpZiA8IDApCi0gICAgICBkaWYgPSAtZGlmOwotCi0gICAgaWYgKGRpZiA+IDIpIHsKLSAgICAgIGdvb21JbmZvLT51cGRhdGUuc3dpdGNoSW5jciAqPSAoZGlmICsgMikgLyAyOwotICAgIH0KLSAgICBnb29tSW5mby0+dXBkYXRlLnByZXZpb3VzWm9vbVNwZWVkID0KLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS56b29tRmlsdGVyRGF0YS52aXRlc3NlOwotICAgIGdvb21JbmZvLT51cGRhdGUuc3dpdGNoTXVsdCA9IDEuMGY7Ci0KLSAgICBpZiAoKChnb29tSW5mby0+c291bmQudGltZVNpbmNlTGFzdEdvb20gPT0gMCkKLSAgICAgICAgICAgICYmIChnb29tSW5mby0+c291bmQudG90YWxnb29tIDwgMikpIHx8IChmb3JjZU1vZGUgPiAwKSkgewotICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zd2l0Y2hJbmNyID0gMDsKLSAgICAgIGdvb21JbmZvLT51cGRhdGUuc3dpdGNoTXVsdCA9IGdvb21JbmZvLT51cGRhdGUuc3dpdGNoTXVsdEFtb3VudDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGdvb21JbmZvLT51cGRhdGUuY3ljbGVzU2luY2VMYXN0Q2hhbmdlID4gVElNRV9CVFdfQ0hHKSB7Ci0gICAgICBwemZkID0gJmdvb21JbmZvLT51cGRhdGUuem9vbUZpbHRlckRhdGE7Ci0gICAgICBnb29tSW5mby0+dXBkYXRlLmN5Y2xlc1NpbmNlTGFzdENoYW5nZSA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICBnb29tSW5mby0+dXBkYXRlLmN5Y2xlc1NpbmNlTGFzdENoYW5nZSsrOwotICB9Ci0KLSNpZmRlZiBWRVJCT1NFCi0gIGlmIChwemZkKSB7Ci0gICAgcHJpbnRmICgiR09PTTogcHpmZC0+bW9kZSA9ICVkXG4iLCBwemZkLT5tb2RlKTsKLSAgfQotI2VuZGlmCi0KLSAgLyogWm9vbSBoZXJlICEgKi8KLSAgem9vbUZpbHRlckZhc3RSR0IgKGdvb21JbmZvLCBnb29tSW5mby0+cDEsIGdvb21JbmZvLT5wMiwgcHpmZCwKLSAgICAgIGdvb21JbmZvLT5zY3JlZW4ud2lkdGgsIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0LAotICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zd2l0Y2hJbmNyLCBnb29tSW5mby0+dXBkYXRlLnN3aXRjaE11bHQpOwotCi0gIC8qCi0gICAqIEFmZmljaGFnZSB0ZW50YWN1bGUKLSAgICovCi0KLSAgZ29vbUluZm8tPnRlbnRhY2xlc19meC5hcHBseSAoJmdvb21JbmZvLT50ZW50YWNsZXNfZngsIGdvb21JbmZvLT5wMSwKLSAgICAgIGdvb21JbmZvLT5wMiwgZ29vbUluZm8pOwotICBnb29tSW5mby0+c3Rhcl9meC5hcHBseSAoJmdvb21JbmZvLT5zdGFyX2Z4LCBnb29tSW5mby0+cDIsIGdvb21JbmZvLT5wMSwKLSAgICAgIGdvb21JbmZvKTsKLQotICAvKgotICAgKiBHZXN0aW9uIGR1IFNjb3BlCi0gICAqLwotCi0gIC8qCi0gICAqIGFycmV0IGRlbWFuZGUKLSAgICovCi0gIGlmICgoZ29vbUluZm8tPnVwZGF0ZS5zdG9wX2xpbmVzICYgMHhmMDAwKQotICAgICAgfHwgKCFnb29tSW5mby0+Y3VyR1N0YXRlLT5kcmF3U2NvcGUpKSB7Ci0gICAgZmxvYXQgcGFyYW0xID0gMCwgcGFyYW0yID0gMCwgYW1wbGl0dWRlOwotICAgIGludCBjb3VsZXVyOwotICAgIGludCBtb2RlOwotCi0gICAgY2hvb3NlX2FfZ29vbV9saW5lIChnb29tSW5mbywgJnBhcmFtMSwgJnBhcmFtMiwgJmNvdWxldXIsICZtb2RlLCAmYW1wbGl0dWRlLAotICAgICAgICAxKTsKLSAgICBjb3VsZXVyID0gR01MX0JMQUNLOwotCi0gICAgZ29vbV9saW5lc19zd2l0Y2hfdG8gKGdvb21JbmZvLT5nbWxpbmUxLCBtb2RlLCBwYXJhbTEsIGFtcGxpdHVkZSwgY291bGV1cik7Ci0gICAgZ29vbV9saW5lc19zd2l0Y2hfdG8gKGdvb21JbmZvLT5nbWxpbmUyLCBtb2RlLCBwYXJhbTIsIGFtcGxpdHVkZSwgY291bGV1cik7Ci0gICAgZ29vbUluZm8tPnVwZGF0ZS5zdG9wX2xpbmVzICY9IDB4MGZmZjsKLSAgfQotCi0gIC8qCi0gICAqIGFycmV0IGFsZWF0b3JlLi4gY2hhbmdlbWVudCBkZSBtb2RlIGRlIGxpZ25lLi4KLSAgICovCi0gIGlmIChnb29tSW5mby0+dXBkYXRlLmxpbmVNb2RlICE9IGdvb21JbmZvLT51cGRhdGUuZHJhd0xpbmVzRHVyYXRpb24pIHsKLSAgICBnb29tSW5mby0+dXBkYXRlLmxpbmVNb2RlLS07Ci0gICAgaWYgKGdvb21JbmZvLT51cGRhdGUubGluZU1vZGUgPT0gLTEpCi0gICAgICBnb29tSW5mby0+dXBkYXRlLmxpbmVNb2RlID0gMDsKLSAgfSBlbHNlIGlmICgoZ29vbUluZm8tPmN5Y2xlICUgODAgPT0gMCkKLSAgICAgICYmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgNSkgPT0gMCkgJiYgZ29vbUluZm8tPnVwZGF0ZS5saW5lTW9kZSkKLSAgICBnb29tSW5mby0+dXBkYXRlLmxpbmVNb2RlLS07Ci0KLSAgaWYgKChnb29tSW5mby0+Y3ljbGUgJSAxMjAgPT0gMCkKLSAgICAgICYmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgNCkgPT0gMCkKLSAgICAgICYmIChnb29tSW5mby0+Y3VyR1N0YXRlLT5kcmF3U2NvcGUpKSB7Ci0gICAgaWYgKGdvb21JbmZvLT51cGRhdGUubGluZU1vZGUgPT0gMCkKLSAgICAgIGdvb21JbmZvLT51cGRhdGUubGluZU1vZGUgPSBnb29tSW5mby0+dXBkYXRlLmRyYXdMaW5lc0R1cmF0aW9uOwotICAgIGVsc2UgaWYgKGdvb21JbmZvLT51cGRhdGUubGluZU1vZGUgPT0gZ29vbUluZm8tPnVwZGF0ZS5kcmF3TGluZXNEdXJhdGlvbikgewotICAgICAgZmxvYXQgcGFyYW0xLCBwYXJhbTIsIGFtcGxpdHVkZTsKLSAgICAgIGludCBjb3VsZXVyMSwgY291bGV1cjI7Ci0gICAgICBpbnQgbW9kZTsKLQotICAgICAgZ29vbUluZm8tPnVwZGF0ZS5saW5lTW9kZS0tOwotICAgICAgY2hvb3NlX2FfZ29vbV9saW5lIChnb29tSW5mbywgJnBhcmFtMSwgJnBhcmFtMiwgJmNvdWxldXIxLAotICAgICAgICAgICZtb2RlLCAmYW1wbGl0dWRlLCBnb29tSW5mby0+dXBkYXRlLnN0b3BfbGluZXMpOwotCi0gICAgICBjb3VsZXVyMiA9IDUgLSBjb3VsZXVyMTsKLSAgICAgIGlmIChnb29tSW5mby0+dXBkYXRlLnN0b3BfbGluZXMpIHsKLSAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5zdG9wX2xpbmVzLS07Ci0gICAgICAgIGlmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMikpCi0gICAgICAgICAgY291bGV1cjIgPSBjb3VsZXVyMSA9IEdNTF9CTEFDSzsKLSAgICAgIH0KLQotICAgICAgZ29vbV9saW5lc19zd2l0Y2hfdG8gKGdvb21JbmZvLT5nbWxpbmUxLCBtb2RlLCBwYXJhbTEsIGFtcGxpdHVkZSwKLSAgICAgICAgICBjb3VsZXVyMSk7Ci0gICAgICBnb29tX2xpbmVzX3N3aXRjaF90byAoZ29vbUluZm8tPmdtbGluZTIsIG1vZGUsIHBhcmFtMiwgYW1wbGl0dWRlLAotICAgICAgICAgIGNvdWxldXIyKTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgKiBzaSBvbiBlc3QgZGFucyB1biBnb29tIDogYWZmaWNoZXIgbGVzIGxpZ25lcy4uLgotICAgKi8KLSAgaWYgKChnb29tSW5mby0+dXBkYXRlLmxpbmVNb2RlICE9IDApCi0gICAgICB8fCAoZ29vbUluZm8tPnNvdW5kLnRpbWVTaW5jZUxhc3RHb29tIDwgNSkpIHsKLSAgICBnb29tSW5mby0+Z21saW5lMi0+cG93ZXIgPSBnb29tSW5mby0+Z21saW5lMS0+cG93ZXI7Ci0KLSAgICBnb29tX2xpbmVzX2RyYXcgKGdvb21JbmZvLCBnb29tSW5mby0+Z21saW5lMSwgZGF0YVswXSwgZ29vbUluZm8tPnAyKTsKLSAgICBnb29tX2xpbmVzX2RyYXcgKGdvb21JbmZvLCBnb29tSW5mby0+Z21saW5lMiwgZGF0YVsxXSwgZ29vbUluZm8tPnAyKTsKLQotICAgIGlmICgoKGdvb21JbmZvLT5jeWNsZSAlIDEyMSkgPT0gOSkKLSAgICAgICAgJiYgKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAzKSA9PSAxKQotICAgICAgICAmJiAoKGdvb21JbmZvLT51cGRhdGUubGluZU1vZGUgPT0gMCkKLSAgICAgICAgICAgIHx8IChnb29tSW5mby0+dXBkYXRlLmxpbmVNb2RlID09Ci0gICAgICAgICAgICAgICAgZ29vbUluZm8tPnVwZGF0ZS5kcmF3TGluZXNEdXJhdGlvbikpKSB7Ci0gICAgICBmbG9hdCBwYXJhbTEsIHBhcmFtMiwgYW1wbGl0dWRlOwotICAgICAgaW50IGNvdWxldXIxLCBjb3VsZXVyMjsKLSAgICAgIGludCBtb2RlOwotCi0gICAgICBjaG9vc2VfYV9nb29tX2xpbmUgKGdvb21JbmZvLCAmcGFyYW0xLCAmcGFyYW0yLCAmY291bGV1cjEsCi0gICAgICAgICAgJm1vZGUsICZhbXBsaXR1ZGUsIGdvb21JbmZvLT51cGRhdGUuc3RvcF9saW5lcyk7Ci0gICAgICBjb3VsZXVyMiA9IDUgLSBjb3VsZXVyMTsKLQotICAgICAgaWYgKGdvb21JbmZvLT51cGRhdGUuc3RvcF9saW5lcykgewotICAgICAgICBnb29tSW5mby0+dXBkYXRlLnN0b3BfbGluZXMtLTsKLSAgICAgICAgaWYgKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAyKSkKLSAgICAgICAgICBjb3VsZXVyMiA9IGNvdWxldXIxID0gR01MX0JMQUNLOwotICAgICAgfQotICAgICAgZ29vbV9saW5lc19zd2l0Y2hfdG8gKGdvb21JbmZvLT5nbWxpbmUxLCBtb2RlLCBwYXJhbTEsIGFtcGxpdHVkZSwKLSAgICAgICAgICBjb3VsZXVyMSk7Ci0gICAgICBnb29tX2xpbmVzX3N3aXRjaF90byAoZ29vbUluZm8tPmdtbGluZTIsIG1vZGUsIHBhcmFtMiwgYW1wbGl0dWRlLAotICAgICAgICAgIGNvdWxldXIyKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm5fdmFsID0gZ29vbUluZm8tPnAxOwotICB0bXAgPSBnb29tSW5mby0+cDE7Ci0gIGdvb21JbmZvLT5wMSA9IGdvb21JbmZvLT5wMjsKLSAgZ29vbUluZm8tPnAyID0gdG1wOwotCi0gIC8qIGFmZmljaGFnZSBldCBzd2FwcGFnZSBkZXMgYnVmZmVycy4uICovCi0gIGdvb21JbmZvLT5jeWNsZSsrOwotCi0gIGdvb21JbmZvLT5jb252b2x2ZV9meC5hcHBseSAoJmdvb21JbmZvLT5jb252b2x2ZV9meCwgcmV0dXJuX3ZhbCwKLSAgICAgIGdvb21JbmZvLT5vdXRwdXRCdWYsIGdvb21JbmZvKTsKLQotICByZXR1cm4gKGd1aW50MzIgKikgZ29vbUluZm8tPm91dHB1dEJ1ZjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgICAgICAgICAgQ0xPU0UgICAgICAgICAgICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1nb29tX2Nsb3NlIChQbHVnaW5JbmZvICogZ29vbUluZm8pCi17Ci0gIGlmIChnb29tSW5mby0+cGl4ZWwgIT0gTlVMTCkKLSAgICBmcmVlIChnb29tSW5mby0+cGl4ZWwpOwotICBpZiAoZ29vbUluZm8tPmJhY2sgIT0gTlVMTCkKLSAgICBmcmVlIChnb29tSW5mby0+YmFjayk7Ci0gIGlmIChnb29tSW5mby0+Y29udiAhPSBOVUxMKQotICAgIGZyZWUgKGdvb21JbmZvLT5jb252KTsKLQotICBnb29tSW5mby0+cGl4ZWwgPSBnb29tSW5mby0+YmFjayA9IE5VTEw7Ci0gIGdvb21JbmZvLT5jb252ID0gTlVMTDsKLSAgZ29vbV9yYW5kb21fZnJlZSAoZ29vbUluZm8tPmdSYW5kb20pOwotICBnb29tX2xpbmVzX2ZyZWUgKCZnb29tSW5mby0+Z21saW5lMSk7Ci0gIGdvb21fbGluZXNfZnJlZSAoJmdvb21JbmZvLT5nbWxpbmUyKTsKLQotICAvKiByZWxlYXNlX2lmcyAoKTsgKi8KLSAgZ29vbUluZm8tPmlmc19meC5mcmVlICgmZ29vbUluZm8tPmlmc19meCk7Ci0gIGdvb21JbmZvLT5jb252b2x2ZV9meC5mcmVlICgmZ29vbUluZm8tPmNvbnZvbHZlX2Z4KTsKLSAgZ29vbUluZm8tPnN0YXJfZnguZnJlZSAoJmdvb21JbmZvLT5zdGFyX2Z4KTsKLSAgZ29vbUluZm8tPnRlbnRhY2xlc19meC5mcmVlICgmZ29vbUluZm8tPnRlbnRhY2xlc19meCk7Ci0gIGdvb21JbmZvLT56b29tRmlsdGVyX2Z4LmZyZWUgKCZnb29tSW5mby0+em9vbUZpbHRlcl9meCk7Ci0KLSAgcGx1Z2luX2luZm9fZnJlZSAoZ29vbUluZm8pOwotICBmcmVlIChnb29tSW5mbyk7Ci19Ci0KLQotLyogKioqICovCi12b2lkCi1jaG9vc2VfYV9nb29tX2xpbmUgKFBsdWdpbkluZm8gKiBnb29tSW5mbywgZmxvYXQgKnBhcmFtMSwgZmxvYXQgKnBhcmFtMiwKLSAgICBpbnQgKmNvdWxldXIsIGludCAqbW9kZSwgZmxvYXQgKmFtcGxpdHVkZSwgaW50IGZhcikKLXsKLSAgKm1vZGUgPSBnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMyk7Ci0gICphbXBsaXR1ZGUgPSAxLjBmOwotICBzd2l0Y2ggKCptb2RlKSB7Ci0gICAgY2FzZSBHTUxfQ0lSQ0xFOgotICAgICAgaWYgKGZhcikgewotICAgICAgICAqcGFyYW0xID0gKnBhcmFtMiA9IDAuNDdmOwotICAgICAgICAqYW1wbGl0dWRlID0gMC44ZjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAoZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDMpID09IDApIHsKLSAgICAgICAgKnBhcmFtMSA9ICpwYXJhbTIgPSAwOwotICAgICAgICAqYW1wbGl0dWRlID0gMy4wZjsKLSAgICAgIH0gZWxzZSBpZiAoZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDIpKSB7Ci0gICAgICAgICpwYXJhbTEgPSAwLjQwZiAqIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0OwotICAgICAgICAqcGFyYW0yID0gMC4yMmYgKiBnb29tSW5mby0+c2NyZWVuLmhlaWdodDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpwYXJhbTEgPSAqcGFyYW0yID0gZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQgKiAwLjM1OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTUxfSExJTkU6Ci0gICAgICBpZiAoZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDQpIHx8IGZhcikgewotICAgICAgICAqcGFyYW0xID0gZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQgLyA3OwotICAgICAgICAqcGFyYW0yID0gNi4wZiAqIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0IC8gNy4wZjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICpwYXJhbTEgPSAqcGFyYW0yID0gZ29vbUluZm8tPnNjcmVlbi5oZWlnaHQgLyAyLjBmOwotICAgICAgICAqYW1wbGl0dWRlID0gMi4wZjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR01MX1ZMSU5FOgotICAgICAgaWYgKGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAzKSB8fCBmYXIpIHsKLSAgICAgICAgKnBhcmFtMSA9IGdvb21JbmZvLT5zY3JlZW4ud2lkdGggLyA3LjBmOwotICAgICAgICAqcGFyYW0yID0gNi4wZiAqIGdvb21JbmZvLT5zY3JlZW4ud2lkdGggLyA3LjBmOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgKnBhcmFtMSA9ICpwYXJhbTIgPSBnb29tSW5mby0+c2NyZWVuLndpZHRoIC8gMi4wZjsKLSAgICAgICAgKmFtcGxpdHVkZSA9IDEuNWY7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgKnBhcmFtMSA9ICpwYXJhbTIgPSAwOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAqY291bGV1ciA9IGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCA2KTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nb29tL2dvb21fZmlsdGVycy5oIGIvZ3N0L2dvb20vZ29vbV9maWx0ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzMDk2ZTIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV9maWx0ZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIEZJTFRFUlNfSAotI2RlZmluZSBGSUxURVJTX0gKLQotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0jaW5jbHVkZSAiZ29vbV90eXBlZGVmcy5oIgotI2luY2x1ZGUgImdvb21fdmlzdWFsX2Z4LmgiCi0jaW5jbHVkZSAiZ29vbV9ncmFwaGljLmgiCi0KLXZvaWQgem9vbUZpbHRlclZpc3VhbEZYV3JhcHBlcl9jcmVhdGUoVmlzdWFsRlggKmZ4KTsKLQotc3RydWN0IF9aT09NX0ZJTFRFUl9EQVRBCi17Ci0JaW50ICAgICB2aXRlc3NlOyAgICAgICAgICAgLyogMTI4ID0gdml0ZXNzZSBudWxlLi4uICogKiAyNTYgPSBlbiBhcnJpZXJlIAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGh5cGVyIHZpdGUuLiAqICogMCA9IGVuIGF2YW50IGh5cGUgdml0ZS4gKi8KLQl1bnNpZ25lZCBjaGFyIHBlcnRlZGVjOwotCXVuc2lnbmVkIGNoYXIgc3FydHBlcnRlOwotCWludCAgICAgbWlkZGxlWCwgbWlkZGxlWTsgIC8qIG1pbGlldSBkZSBsJ2VmZmV0ICovCi0JY2hhciAgICByZXZlcnNlOyAgICAgICAgICAgLyogaW52ZXJzZSBsYSB2aXRlc3NlICovCi0JY2hhciAgICBtb2RlOyAgICAgICAgICAgICAgLyogdHlwZSBkJ2VmZmV0IO+/vSBhcHBsaXF1ZXIgKGNmIGxlcyAjZGVmaW5lKSAqLwotCS8qKiBAc2luY2UgSnVuZSAyMDAxICovCi0JaW50ICAgICBoUGxhbmVFZmZlY3Q7ICAgICAgLyogZGV2aWF0aW9uIGhvcml0b250YWxlICovCi0JaW50ICAgICB2UGxhbmVFZmZlY3Q7ICAgICAgLyogZGV2aWF0aW9uIHZlcnRpY2FsZSAqLwotCS8qKiBAc2luY2UgQXByaWwgMjAwMiAqLwotCWludCAgICAgd2F2ZUVmZmVjdDsgICAgICAgIC8qIGFwcGxpcXVlIHVuZSAic3VyY291Y2hlIiBkZSB3YXZlIGVmZmVjdCAqLwotCWludCAgICAgaHlwZXJjb3NFZmZlY3Q7ICAgIC8qIGFwcGxpcXVlIHVuZSAic3VyY291Y2hlIGRlIGh5cGVyY29zIGVmZmVjdCAqLwotCi0JY2hhciAgICBub2lzaWZ5OyAgICAgICAgICAgLyogYWpvdXRlIHVuIGJydWl0IGEgbGEgdHJhbnNmb3JtYXRpb24gKi8KLX07Ci0KLSNkZWZpbmUgTk9STUFMX01PREUgMAotI2RlZmluZSBXQVZFX01PREUgMQotI2RlZmluZSBDUllTVEFMX0JBTExfTU9ERSAyCi0jZGVmaW5lIFNDUlVOQ0hfTU9ERSAzCi0jZGVmaW5lIEFNVUxFVFRFX01PREUgNAotI2RlZmluZSBXQVRFUl9NT0RFIDUKLSNkZWZpbmUgSFlQRVJDT1MxX01PREUgNgotI2RlZmluZSBIWVBFUkNPUzJfTU9ERSA3Ci0jZGVmaW5lIFlPTkxZX01PREUgOAotI2RlZmluZSBTUEVFRFdBWV9NT0RFIDkKLQotdm9pZCBwb2ludEZpbHRlciAoUGx1Z2luSW5mbyAqZ29vbUluZm8sIFBpeGVsICogcGl4MSwgQ29sb3IgYywKLSAgICAgICAgICAgICAgICAgIGZsb2F0IHQxLCBmbG9hdCB0MiwgZmxvYXQgdDMsIGZsb2F0IHQ0LCBndWludDMyIGN5Y2xlKTsKLQotLyogZmlsdHJlIGRlIHpvb20gOgotICogbGUgY29udGVudSBkZSBwaXgxIGVzdCBjb3BpZSBkYW5zIHBpeDIuCi0gKiB6ZiA6IHNpIG5vbiBOVUxMLCBjb25maWd1cmUgbCdlZmZldC4KLSAqIHJlc3gscmVzeSA6IHRhaWxsZSBkZXMgYnVmZmVycy4KLSAqLwotdm9pZCB6b29tRmlsdGVyRmFzdFJHQiAoUGx1Z2luSW5mbyAqZ29vbUluZm8sIFBpeGVsICogcGl4MSwgUGl4ZWwgKiBwaXgyLCBab29tRmlsdGVyRGF0YSAqIHpmLCBndWludDMyIHJlc3gsCi0gICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHJlc3ksIGludCBzd2l0Y2hJbmNyLCBmbG9hdCBzd2l0Y2hNdWx0KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9nb29tX2Z4LmggYi9nc3QvZ29vbS9nb29tX2Z4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjODJkNmMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV9meC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmbmRlZiBfR09PTV9GWF9ICi0jZGVmaW5lIF9HT09NX0ZYX0gKLQotI2luY2x1ZGUgImdvb21fdmlzdWFsX2Z4LmgiCi0jaW5jbHVkZSAiZ29vbV9wbHVnaW5faW5mby5oIgotCi12b2lkIGNvbnZvbHZlX2NyZWF0ZSAoVmlzdWFsRlggKnZmeCk7Ci12b2lkIGZseWluZ19zdGFyX2NyZWF0ZSAoVmlzdWFsRlggKnZmeCk7Ci0KLXZvaWQgem9vbV9maWx0ZXJfYyhpbnQgc2l6ZVgsIGludCBzaXplWSwgUGl4ZWwgKnNyYywgUGl4ZWwgKmRlc3QsIGludCAqYnJ1dFMsIGludCAqYnJ1dEQsIGludCBidWZmcmF0aW8sIGludCBwcmVjYWxDb2VmWzE2XVsxNl0pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9nb29tL2dvb21fZ3JhcGhpYy5oIGIvZ3N0L2dvb20vZ29vbV9ncmFwaGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0ZGRlMzcuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV9ncmFwaGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIEdSQVBISUNfSAotI2RlZmluZSBHUkFQSElDX0gKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVWludDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgdW5zaWduZWQgc2hvcnQgciwgdiwgYjsKLX0KLUNvbG9yOwotCi1leHRlcm4gY29uc3QgQ29sb3IgQkxBQ0s7Ci1leHRlcm4gY29uc3QgQ29sb3IgV0hJVEU7Ci1leHRlcm4gY29uc3QgQ29sb3IgUkVEOwotZXh0ZXJuIGNvbnN0IENvbG9yIEJMVUU7Ci1leHRlcm4gY29uc3QgQ29sb3IgR1JFRU47Ci1leHRlcm4gY29uc3QgQ29sb3IgWUVMTE9XOwotZXh0ZXJuIGNvbnN0IENvbG9yIE9SQU5HRTsKLWV4dGVybiBjb25zdCBDb2xvciBWSU9MRVQ7Ci0KLQotI2lmZGVmIENPTE9SX0JHUkEKLQotI2RlZmluZSBCX0NIQU5ORUwgMHhGRjAwMDAwMAotI2RlZmluZSBHX0NIQU5ORUwgMHgwMEZGMDAwMAotI2RlZmluZSBSX0NIQU5ORUwgMHgwMDAwRkYwMAotI2RlZmluZSBBX0NIQU5ORUwgMHgwMDAwMDBGRgotI2RlZmluZSBCX09GRlNFVCAgMjQKLSNkZWZpbmUgR19PRkZTRVQgIDE2Ci0jZGVmaW5lIFJfT0ZGU0VUICA4Ci0jZGVmaW5lIEFfT0ZGU0VUICAwCi0KLXR5cGVkZWYgdW5pb24gX1BJWEVMIHsKLSAgc3RydWN0IHsKLSAgICB1bnNpZ25lZCBjaGFyIGI7Ci0gICAgdW5zaWduZWQgY2hhciBnOwotICAgIHVuc2lnbmVkIGNoYXIgcjsKLSAgICB1bnNpZ25lZCBjaGFyIGE7Ci0gIH0gY2hhbm5lbHM7Ci0gIHVuc2lnbmVkIGludCB2YWw7Ci0gIHVuc2lnbmVkIGNoYXIgY29wWzRdOwotfSBQaXhlbDsKLQotI2Vsc2UKLQotI2RlZmluZSBBX0NIQU5ORUwgMHhGRjAwMDAwMAotI2RlZmluZSBSX0NIQU5ORUwgMHgwMEZGMDAwMAotI2RlZmluZSBHX0NIQU5ORUwgMHgwMDAwRkYwMAotI2RlZmluZSBCX0NIQU5ORUwgMHgwMDAwMDBGRgotI2RlZmluZSBBX09GRlNFVCAgMjQKLSNkZWZpbmUgUl9PRkZTRVQgIDE2Ci0jZGVmaW5lIEdfT0ZGU0VUICA4Ci0jZGVmaW5lIEJfT0ZGU0VUICAwCi0KLXR5cGVkZWYgdW5pb24gX1BJWEVMIHsKLSAgc3RydWN0IHsKLSAgICB1bnNpZ25lZCBjaGFyIGE7Ci0gICAgdW5zaWduZWQgY2hhciByOwotICAgIHVuc2lnbmVkIGNoYXIgZzsKLSAgICB1bnNpZ25lZCBjaGFyIGI7Ci0gIH0gY2hhbm5lbHM7Ci0gIHVuc2lnbmVkIGludCB2YWw7Ci0gIHVuc2lnbmVkIGNoYXIgY29wWzRdOwotfSBQaXhlbDsKLQotI2VuZGlmIC8qIENPTE9SX0JHUkEgKi8KLQotLyoKLWlubGluZSB2b2lkIHNldFBpeGVsUkdCIChQaXhlbCAqIGJ1ZmZlciwgVWludCB4LCBVaW50IHksIENvbG9yIGMpOwotaW5saW5lIHZvaWQgZ2V0UGl4ZWxSR0IgKFBpeGVsICogYnVmZmVyLCBVaW50IHgsIFVpbnQgeSwgQ29sb3IgKiBjKTsKLSovCi0KLQotI2VuZGlmIC8qIEdSQVBISUNfSCAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ29vbV9wbHVnaW5faW5mby5oIGIvZ3N0L2dvb20vZ29vbV9wbHVnaW5faW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTBlOTZlLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL2dvb21fcGx1Z2luX2luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9QTFVHSU5fSU5GT19ICi0jZGVmaW5lIF9QTFVHSU5fSU5GT19ICi0KLSNpbmNsdWRlICJnb29tX3R5cGVkZWZzLmgiCi0KLSNpbmNsdWRlICJnb29tX2NvbmZpZy5oIgotCi0jaW5jbHVkZSAiZ29vbV9ncmFwaGljLmgiCi0jaW5jbHVkZSAiZ29vbV9jb25maWdfcGFyYW0uaCIKLSNpbmNsdWRlICJnb29tX3Zpc3VhbF9meC5oIgotI2luY2x1ZGUgImdvb21fZmlsdGVycy5oIgotI2luY2x1ZGUgImdvb21fdG9vbHMuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgewotCWNoYXIgZHJhd0lGUzsKLQljaGFyIGRyYXdQb2ludHM7Ci0JY2hhciBkcmF3VGVudGFjbGU7Ci0KLQljaGFyIGRyYXdTY29wZTsKLQlpbnQgZmFyU2NvcGU7Ci0KLQlpbnQgcmFuZ2VtaW47Ci0JaW50IHJhbmdlbWF4OwotfSBHb29tU3RhdGU7Ci0KLSNkZWZpbmUgU1RBVEVTX01BWF9OQiAxMjgKLQotLyoqCi0gKiBHaXZlcyBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIHNvdW5kLgotICovCi1zdHJ1Y3QgX1NPVU5EX0lORk8gewotCi0JLyogbm90YSA6IGEgR29vbSBpcyBqdXN0IGEgc291bmQgZXZlbnQuLi4gKi8KLQotCWludCB0aW1lU2luY2VMYXN0R29vbTsgICAvKiA+PSAwICovCi0JZmxvYXQgZ29vbVBvd2VyOyAgICAgICAgIC8qIHBvd2VyIG9mIHRoZSBsYXN0IEdvb20gWzAuLjFdICovCi0KLQlpbnQgdGltZVNpbmNlTGFzdEJpZ0dvb207ICAgLyogPj0gMCAqLwotCi0JZmxvYXQgdm9sdW1lOyAgICAgLyogWzAuLjFdICovCi0Jc2hvcnQgc2FtcGxlc1syXVs1MTJdOwotCi0JLyogb3RoZXIgImludGVybmFsIiBkYXRhcyBmb3IgdGhlIHNvdW5kX3Rlc3RlciAqLwotCWZsb2F0IGdvb21fbGltaXQ7IC8qIGF1dG8tdXBkYXRlZCBsaW1pdCBvZiBnb29tX2RldGVjdGlvbiAqLwotCWZsb2F0IGJpZ0dvb21MaW1pdDsKLQlmbG9hdCBhY2NlbHZhcjsgICAvKiBhY2NlbGVyYXRpb24gb2YgdGhlIHNvdW5kIC0gWzAuLjFdICovCi0JZmxvYXQgc3BlZWR2YXI7ICAgLyogc3BlZWQgb2YgdGhlIHNvdW5kIC0gWzAuLjEwMF0gKi8KLQlpbnQgYWxsVGltZXNNYXg7Ci0JaW50IHRvdGFsZ29vbTsgICAgLyogbnVtYmVyIG9mIGdvb20gc2luY2UgbGFzdCByZXNldAotCQkJICAgKiAoYSByZXNldCBldmVyeSA2NCBjeWNsZXMpICovCi0KLQlmbG9hdCBwcm92X21heDsgICAvKiBhY2NlbCBtYXggc2luY2UgbGFzdCByZXNldCAqLwotCi0JaW50IGN5Y2xlOwotCi0JLyogcHJpdmF0ZSAqLwotCVBsdWdpblBhcmFtIHZvbHVtZV9wOwotCVBsdWdpblBhcmFtIHNwZWVkX3A7Ci0JUGx1Z2luUGFyYW0gYWNjZWxfcDsKLQlQbHVnaW5QYXJhbSBnb29tX2xpbWl0X3A7Ci0gICAgICAgIFBsdWdpblBhcmFtIGdvb21fcG93ZXJfcDsKLQlQbHVnaW5QYXJhbSBsYXN0X2dvb21fcDsKLQlQbHVnaW5QYXJhbSBsYXN0X2JpZ2dvb21fcDsKLQlQbHVnaW5QYXJhbSBiaWdnb29tX3NwZWVkX2xpbWl0X3A7Ci0JUGx1Z2luUGFyYW0gYmlnZ29vbV9mYWN0b3JfcDsKLQotCVBsdWdpblBhcmFtZXRlcnMgcGFyYW1zOyAvKiBjb250YWlucyB0aGUgcHJldmlvdXNseSBkZWZpbmVkIHBhcmFtZXRlcnMuICovCi19OwotCi0KLS8qKgotICogQWxsb3dzIEZYcyB0byBrbm93IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwbHVnaW4uCi0gKi8KLXN0cnVjdCBfUExVR0lOX0lORk8gewotCi0JLyogcHVibGljIGRhdGFzICovCi0KLQlpbnQgbmJQYXJhbXM7Ci0JUGx1Z2luUGFyYW1ldGVycyAqcGFyYW1zOwotCi0JLyogcHJpdmF0ZSBkYXRhcyAqLwotCi0Jc3RydWN0IF9TSVpFX1RZUEUgewotCQlpbnQgd2lkdGg7Ci0JCWludCBoZWlnaHQ7Ci0JCWludCBzaXplOyAgIC8qID09IHNjcmVlbi5oZWlnaHQgKiBzY3JlZW4ud2lkdGguICovCi0JfSBzY3JlZW47Ci0KLQlTb3VuZEluZm8gc291bmQ7Ci0KLQlpbnQgbmJWaXN1YWxzOwotCVZpc3VhbEZYICoqdmlzdWFsczsgLyogcG9pbnRlcnMgb24gYWxsIHRoZSB2aXN1YWwgZnggKi8KLQotCS8qKiBUaGUga25vd24gRlggKi8KLQlWaXN1YWxGWCBjb252b2x2ZV9meDsKLQlWaXN1YWxGWCBzdGFyX2Z4OwotCVZpc3VhbEZYIHpvb21GaWx0ZXJfZng7Ci0JVmlzdWFsRlggdGVudGFjbGVzX2Z4OwotCVZpc3VhbEZYIGlmc19meDsKLQotCS8qKiBpbWFnZSBidWZmZXJzICovCi0JZ3VpbnQzMiAqcGl4ZWw7Ci0JZ3VpbnQzMiAqYmFjazsKLQlQaXhlbCAqcDEsICpwMjsKLQlQaXhlbCAqY29udjsKLSAgUGl4ZWwgKm91dHB1dEJ1ZjsKLQotCS8qKiBzdGF0ZSBvZiBnb29tICovCi0JZ3VpbnQzMiBjeWNsZTsKLQlHb29tU3RhdGUgc3RhdGVzW1NUQVRFU19NQVhfTkJdOwotCWludCBzdGF0ZXNOdW1iZXI7Ci0JaW50IHN0YXRlc1JhbmdlTWF4OwotCi0JR29vbVN0YXRlICpjdXJHU3RhdGU7Ci0KLQkvKiogZWZmZXQgZGUgbGlnbmUuLiAqLwotCUdNTGluZSAqZ21saW5lMTsKLQlHTUxpbmUgKmdtbGluZTI7Ci0KLQkvKiogc2ludXMgdGFibGUgKi8KLQlpbnQgc2ludGFibGVbMHgxMDAwMF07Ci0KLQkvKiBJTlRFUk5BTFMgKi8KLQkKLQkvKiogZ29vbV91cGRhdGUgaW50ZXJuYWxzLgotCSAqIEkgdG9vayBhbGwgc3RhdGljIHZhcmlhYmxlcyBmcm9tIGdvb21fdXBkYXRlIGFuZCBwdXQgdGhlbSBoZXJlLi4gZm9yIHRoZSBtb21lbnQuCi0JICovCi0Jc3RydWN0IHsKLQkJaW50IGxvY2t2YXI7ICAgICAgICAgICAgICAgLyogcG91ciBlbXBlY2hlciBkZSBub3V2ZWF1eCBjaGFuZ2VtZW50cyAqLwotCQlpbnQgZ29vbXZhcjsgICAgICAgICAgICAgICAvKiBib3VjbGUgZGVzIGdvb21zICovCi0JCWludCBsb29wdmFyOyAgICAgICAgICAgICAgIC8qIG1vdXZlbWVudCBkZXMgcG9pbnRzICovCi0JCWludCBzdG9wX2xpbmVzOwotCQlpbnQgaWZzX2luY3I7ICAgICAgICAgICAgICAvKiBkZXNzaW5lciBsJ2lmcyAoMCA9IG5vbjogPiA9IGluY3JlbWVudCkgKi8KLQkJaW50IGRlY2F5X2lmczsgICAgICAgICAgICAgLyogZGlzcGFyaXRpb24gZGUgbCdpZnMgKi8KLQkJaW50IHJlY2F5X2lmczsgICAgICAgICAgICAgLyogZGVkaXNwYXJpdGlvbiBkZSBsJ2lmcyAqLwotCQlpbnQgY3ljbGVzU2luY2VMYXN0Q2hhbmdlOyAvKiBub21icmUgZGUgQ3ljbGUgRGVwdWlzIERlcm5pZXIgQ2hhbmdlbWVudCAqLwotCQlpbnQgZHJhd0xpbmVzRHVyYXRpb247ICAgICAvKiBkdXJlZSBkZSBsYSB0cmFuc2l0aW9uIGVudHJlIGFmZmljaGVyIGxlcyBsaWduZXMgb3UgcGFzICovCi0JCWludCBsaW5lTW9kZTsgICAgICAgICAgICAgIC8qIGwnZWZmZXQgbGluZWFpcmUgYSBkZXNzaW5lciAqLwotCQlmbG9hdCBzd2l0Y2hNdWx0QW1vdW50OyAgICAvKiBTV0lUQ0hNVUxUICgyOS4wZi8zMC4wZikgKi8KLQkJaW50IHN3aXRjaEluY3JBbW91bnQ7ICAgICAgLyogMHg3ZiAqLwotCQlmbG9hdCBzd2l0Y2hNdWx0OyAgICAgICAgICAvKiAxLjBmICovCi0JCWludCBzd2l0Y2hJbmNyOyAgICAgICAgICAgIC8qICA9IFNXSVRDSElOQ1I7ICovCi0JCWludCBzdGF0ZVNlbGVjdGlvblJuZDsKLQkJaW50IHN0YXRlU2VsZWN0aW9uQmxvY2tlcjsKLQkJaW50IHByZXZpb3VzWm9vbVNwZWVkOwotCQlab29tRmlsdGVyRGF0YSB6b29tRmlsdGVyRGF0YTsgICAgICAgICAgICAgICAgCi0JfSB1cGRhdGU7Ci0KLQlzdHJ1Y3QgewotCQl2b2lkICgqZHJhd19saW5lKSAoUGl4ZWwgKmRhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IGNvbCwgaW50IHNjcmVlbngsIGludCBzY3JlZW55KTsKLQkJdm9pZCAoKnpvb21fZmlsdGVyKSAoaW50IHNpemVYLCBpbnQgc2l6ZVksIFBpeGVsICpzcmMsIFBpeGVsICpkZXN0LCBpbnQgKmJydXRTLCBpbnQgKmJydXRELCBpbnQgYnVmZnJhdGlvLCBpbnQgcHJlY2FsQ29lZlsxNl1bMTZdKTsKLQl9IG1ldGhvZHM7Ci0JCi0JR29vbVJhbmRvbSAqZ1JhbmRvbTsKLX07Ci0KLXZvaWQgcGx1Z2luX2luZm9faW5pdChQbHVnaW5JbmZvICpwLCBpbnQgbmJWaXN1YWwpOyAKLXZvaWQgcGx1Z2luX2luZm9fZnJlZShQbHVnaW5JbmZvICpwKTsKLQotLyogaSA9IFswLi5wLT5uYlZpc3VhbC0xXSAqLwotdm9pZCBwbHVnaW5faW5mb19hZGRfdmlzdWFsKFBsdWdpbkluZm8gKnAsIGludCBpLCBWaXN1YWxGWCAqdmlzdWFsKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9nb29tX3Rvb2xzLmMgYi9nc3QvZ29vbS9nb29tX3Rvb2xzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNzU4ZmQuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV90b29scy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgImdvb21fdG9vbHMuaCIKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotR29vbVJhbmRvbSAqCi1nb29tX3JhbmRvbV9pbml0IChpbnQgaSkKLXsKLSAgR29vbVJhbmRvbSAqZ3JhbmRvbSA9IChHb29tUmFuZG9tICopIG1hbGxvYyAoc2l6ZW9mIChHb29tUmFuZG9tKSk7Ci0KLSAgc3JhbmQgKGkpOwotICBncmFuZG9tLT5wb3MgPSAxOwotICBnb29tX3JhbmRvbV91cGRhdGVfYXJyYXkgKGdyYW5kb20sIEdPT01fTkJfUkFORCk7Ci0gIHJldHVybiBncmFuZG9tOwotfQotCi12b2lkCi1nb29tX3JhbmRvbV9mcmVlIChHb29tUmFuZG9tICogZ3JhbmRvbSkKLXsKLSAgZnJlZSAoZ3JhbmRvbSk7Ci19Ci0KLXZvaWQKLWdvb21fcmFuZG9tX3VwZGF0ZV9hcnJheSAoR29vbVJhbmRvbSAqIGdyYW5kb20sIGludCBudW1iZXJPZlZhbHVlc1RvQ2hhbmdlKQotewotICB3aGlsZSAobnVtYmVyT2ZWYWx1ZXNUb0NoYW5nZSA+IDApIHsKLSNpZiBSQU5EX01BWCA8IDB4MTAwMDAKLSAgICBncmFuZG9tLT5hcnJheVtncmFuZG9tLT5wb3MrK10gPSAoKHJhbmQgKCkgPDwgMTYpICsgcmFuZCAoKSkgLyAxMjc7Ci0jZWxzZQotICAgIGdyYW5kb20tPmFycmF5W2dyYW5kb20tPnBvcysrXSA9IHJhbmQgKCkgLyAxMjc7Ci0jZW5kaWYKLSAgICBudW1iZXJPZlZhbHVlc1RvQ2hhbmdlLS07Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nb29tL2dvb21fdG9vbHMuaCBiL2dzdC9nb29tL2dvb21fdG9vbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmNTI0MC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9nb29tX3Rvb2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9HT09NVE9PTFNfSAotI2RlZmluZSBfR09PTVRPT0xTX0gKLQotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0KLS8qKgotICogUmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd3JhcHBlciBmb3IgZmFzdGVyIHJhbmRvbSBudW1iZXIuCi0gKi8KLQotI2RlZmluZSBHT09NX05CX1JBTkQgMHgxMDAwMAotCi10eXBlZGVmIHN0cnVjdCBfR09PTV9SQU5ET00gewotCWludCBhcnJheVtHT09NX05CX1JBTkRdOwotCXVuc2lnbmVkIHNob3J0IHBvczsKLX0gR29vbVJhbmRvbTsKLQotR29vbVJhbmRvbSAqZ29vbV9yYW5kb21faW5pdChpbnQgaSk7Ci12b2lkIGdvb21fcmFuZG9tX2ZyZWUoR29vbVJhbmRvbSAqZ3JhbmRvbSk7Ci0KLWlubGluZSBzdGF0aWMgaW50IGdvb21fcmFuZG9tKEdvb21SYW5kb20gKmdyYW5kb20pIHsKLQkKLQlncmFuZG9tLT5wb3MrKzsgLyogd29ya3MgYmVjYXVzZSBwb3MgaXMgYW4gdW5zaWduZWQgc2hvcnQgKi8KLQlyZXR1cm4gZ3JhbmRvbS0+YXJyYXlbZ3JhbmRvbS0+cG9zXTsKLX0KLQotaW5saW5lIHN0YXRpYyBpbnQgZ29vbV9pcmFuZChHb29tUmFuZG9tICpncmFuZG9tLCBpbnQgaSkgewotCi0JZ3JhbmRvbS0+cG9zKys7Ci0JcmV0dXJuIGdyYW5kb20tPmFycmF5W2dyYW5kb20tPnBvc10gJSBpOwotfQotCi0vKiBjYWxsZWQgdG8gY2hhbmdlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHZhbHVlIGluIHRoZSBhcnJheSwgc28gdGhhdCB0aGUgYXJyYXkgZG9lcyBub3QgcmVtYWluIHRoZSBzYW1lKi8KLXZvaWQgZ29vbV9yYW5kb21fdXBkYXRlX2FycmF5KEdvb21SYW5kb20gKmdyYW5kb20sIGludCBudW1iZXJPZlZhbHVlc1RvQ2hhbmdlKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9nb29tX3R5cGVkZWZzLmggYi9nc3QvZ29vbS9nb29tX3R5cGVkZWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYTMzYTkuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV90eXBlZGVmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmbmRlZiBfR09PTV9UWVBFREVGU19ICi0jZGVmaW5lIF9HT09NX1RZUEVERUZTX0gKLQotdHlwZWRlZiBzdHJ1Y3QgX1BMVUdJTl9JTkZPIFBsdWdpbkluZm87Ci10eXBlZGVmIHN0cnVjdCBfU09VTkRfSU5GTyBTb3VuZEluZm87Ci10eXBlZGVmIHN0cnVjdCBfR01MSU5FIEdNTGluZTsKLXR5cGVkZWYgc3RydWN0IF9HTVVOSVRQT0lOVEVSIEdNVW5pdFBvaW50ZXI7Ci10eXBlZGVmIHN0cnVjdCBfWk9PTV9GSUxURVJfREFUQSBab29tRmlsdGVyRGF0YTsKLXR5cGVkZWYgc3RydWN0IF9WSVNVQUxfRlggVmlzdWFsRlg7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ29vbV92aXN1YWxfZnguaCBiL2dzdC9nb29tL2dvb21fdmlzdWFsX2Z4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYjVhNDkuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ29vbV92aXN1YWxfZnguaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gSmVhbi1DaHJpc3RvcGhlIEhvZWx0IDxqZWtvQGZyZWUuZnI+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX1ZJU1VBTF9GWF9ICi0jZGVmaW5lIF9WSVNVQUxfRlhfSAotCi0jaW5jbHVkZSAiZ29vbV9jb25maWdfcGFyYW0uaCIKLSNpbmNsdWRlICJnb29tX2dyYXBoaWMuaCIKLSNpbmNsdWRlICJnb29tX3R5cGVkZWZzLmgiCi0KLXN0cnVjdCBfVklTVUFMX0ZYIHsKLSAgdm9pZCAoKmluaXQpIChzdHJ1Y3QgX1ZJU1VBTF9GWCAqX3RoaXMsIFBsdWdpbkluZm8gKmluZm8pOwotICB2b2lkICgqZnJlZSkgKHN0cnVjdCBfVklTVUFMX0ZYICpfdGhpcyk7Ci0gIHZvaWQgKCphcHBseSkgKHN0cnVjdCBfVklTVUFMX0ZYICpfdGhpcywgUGl4ZWwgKnNyYywgUGl4ZWwgKmRlc3QsIFBsdWdpbkluZm8gKmluZm8pOwotICB2b2lkICpmeF9kYXRhOwotCi0gIFBsdWdpblBhcmFtZXRlcnMgKnBhcmFtczsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ3JhcGhpYy5jIGIvZ3N0L2dvb20vZ3JhcGhpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjMwNDQ4Li4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL2dyYXBoaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJnb29tX2dyYXBoaWMuaCIKLQotY29uc3QgQ29sb3IgQkxBQ0sgPSB7IDAsIDAsIDAgfTsKLWNvbnN0IENvbG9yIFdISVRFID0geyAweGZmLCAweGZmLCAweGZmIH07Ci1jb25zdCBDb2xvciBSRUQgPSB7IDB4ZmYsIDB4MDUsIDB4MDUgfTsKLWNvbnN0IENvbG9yIEdSRUVOID0geyAweDA1LCAweGZmLCAweDA1IH07Ci1jb25zdCBDb2xvciBCTFVFID0geyAweDA1LCAweDA1LCAweGZmIH07Ci1jb25zdCBDb2xvciBZRUxMT1cgPSB7IDB4ZmYsIDB4ZmYsIDB4MzMgfTsKLWNvbnN0IENvbG9yIE9SQU5HRSA9IHsgMHhmZiwgMHhjYywgMHgwNSB9OwotY29uc3QgQ29sb3IgVklPTEVUID0geyAweDU1LCAweDA1LCAweGZmIH07CmRpZmYgLS1naXQgYS9nc3QvZ29vbS9nc3Rnb29tLmMgYi9nc3QvZ29vbS9nc3Rnb29tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYmU5NDEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vZ3N0Z29vbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qIGdzdGdvb20uYzogaW1wbGVtZW50YXRpb24gb2YgZ29vbSBkcmF3aW5nIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgPDIwMDE+IFJpY2hhcmQgQm91bHRvbiA8cmljaGFyZEB0YXJ0YXJ1cy5vcmc+Ci0gKiAgICAgICAgICAgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltIGF0IGZsdWVuZG8gZG90IGNvbT4KLSAqICAgICAgICAgICAoQykgPDIwMTE+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFucyBhdCBnbWFpbCBkb3QgY29tPgotICogICAgICAgICAgIChDKSA8MjAxNT4gTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1nb29tCi0gKiBAc2VlX2Fsc286IHN5bmFlc3RoZXNpYQotICoKLSAqIEdvb20gaXMgYW4gYXVkaW8gdmlzdWFsaXNhdGlvbiBlbGVtZW50LiBJdCBjcmVhdGVzIHdhcnBpbmcgc3RydWN0dXJlcwotICogYmFzZWQgb24gdGhlIGluY29taW5nIGF1ZGlvIHNpZ25hbC4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgZ29vbSAhIHZpZGVvY29udmVydCAhIHh2aW1hZ2VzaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3Rnb29tLmgiCi0jaW5jbHVkZSAiZ29vbS5oIgotCi0jaWYgSEFWRV9PUkMKLSNpbmNsdWRlIDxvcmMvb3JjLmg+Ci0jZW5kaWYKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChnb29tX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdvb21fZGVidWcKLQotI2RlZmluZSBERUZBVUxUX1dJRFRIICAzMjAKLSNkZWZpbmUgREVGQVVMVF9IRUlHSFQgMjQwCi0KLS8qIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBBUkdfMAotICAgICAgLyogRklMTCBNRSAqLwotfTsKLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSNkZWZpbmUgUkdCX09SREVSICJ4UkdCIgotI2Vsc2UKLSNkZWZpbmUgUkdCX09SREVSICJCR1J4IgotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFIChSR0JfT1JERVIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwgICAgLyogdGhlIG5hbWUgb2YgdGhlIHBhZHMgKi8KLSAgICBHU1RfUEFEX1NJTkssICAgICAgICAgICAgICAgLyogdHlwZSBvZiB0aGUgcGFkICovCi0gICAgR1NUX1BBRF9BTFdBWVMsICAgICAgICAgICAgIC8qIEFMV0FZUy9TT01FVElNRVMgKi8KLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikgIiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZDsgIgotICAgICAgICAiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDgwMDAsIDk2MDAwIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMiwgIgotICAgICAgICAiY2hhbm5lbC1tYXNrID0gKGJpdG1hc2spIDB4MywgIiAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQiKQotICAgICk7Ci0KLQotc3RhdGljIHZvaWQgZ3N0X2dvb21fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dvb21fc2V0dXAgKEdzdEF1ZGlvVmlzdWFsaXplciAqIGJhc2UpOwotc3RhdGljIGdib29sZWFuIGdzdF9nb29tX3JlbmRlciAoR3N0QXVkaW9WaXN1YWxpemVyICogYmFzZSwgR3N0QnVmZmVyICogYXVkaW8sCi0gICAgR3N0VmlkZW9GcmFtZSAqIHZpZGVvKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0R29vbSwgZ3N0X2dvb20sIEdTVF9UWVBFX0FVRElPX1ZJU1VBTElaRVIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2dvb21fY2xhc3NfaW5pdCAoR3N0R29vbUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RBdWRpb1Zpc3VhbGl6ZXJDbGFzcyAqdmlzdWFsaXplcl9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIHZpc3VhbGl6ZXJfY2xhc3MgPSAoR3N0QXVkaW9WaXN1YWxpemVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZ29vbV9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiR09PTTogd2hhdCBhIEdPT00hIiwKLSAgICAgICJWaXN1YWxpemF0aW9uIiwKLSAgICAgICJUYWtlcyBmcmFtZXMgb2YgZGF0YSBhbmQgb3V0cHV0cyB2aWRlbyBmcmFtZXMgdXNpbmcgdGhlIEdPT00gZmlsdGVyIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiIpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0KLSAgdmlzdWFsaXplcl9jbGFzcy0+c2V0dXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dvb21fc2V0dXApOwotICB2aXN1YWxpemVyX2NsYXNzLT5yZW5kZXIgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dvb21fcmVuZGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nb29tX2luaXQgKEdzdEdvb20gKiBnb29tKQotewotICBnb29tLT53aWR0aCA9IERFRkFVTFRfV0lEVEg7Ci0gIGdvb20tPmhlaWdodCA9IERFRkFVTFRfSEVJR0hUOwotICBnb29tLT5jaGFubmVscyA9IDA7Ci0KLSAgZ29vbS0+cGx1Z2luID0gZ29vbV9pbml0IChnb29tLT53aWR0aCwgZ29vbS0+aGVpZ2h0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nb29tX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RHb29tICpnb29tID0gR1NUX0dPT00gKG9iamVjdCk7Ci0KLSAgZ29vbV9jbG9zZSAoZ29vbS0+cGx1Z2luKTsKLSAgZ29vbS0+cGx1Z2luID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X2dvb21fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2dvb21fc2V0dXAgKEdzdEF1ZGlvVmlzdWFsaXplciAqIGJhc2UpCi17Ci0gIEdzdEdvb20gKmdvb20gPSBHU1RfR09PTSAoYmFzZSk7Ci0KLSAgZ29vbS0+d2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCAoJmJhc2UtPnZpbmZvKTsKLSAgZ29vbS0+aGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmYmFzZS0+dmluZm8pOwotICBnb29tX3NldF9yZXNvbHV0aW9uIChnb29tLT5wbHVnaW4sIGdvb20tPndpZHRoLCBnb29tLT5oZWlnaHQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9nb29tX3JlbmRlciAoR3N0QXVkaW9WaXN1YWxpemVyICogYmFzZSwgR3N0QnVmZmVyICogYXVkaW8sCi0gICAgR3N0VmlkZW9GcmFtZSAqIHZpZGVvKQotewotICBHc3RHb29tICpnb29tID0gR1NUX0dPT00gKGJhc2UpOwotICBHc3RNYXBJbmZvIGFtYXA7Ci0gIGdpbnQxNiBkYXRhaW5bMl1bR09PTV9TQU1QTEVTXTsKLSAgZ2ludDE2ICphZGF0YTsKLSAgZ2ludCBpOwotCi0gIC8qIGdldCBuZXh0IEdPT01fU0FNUExFUywgd2UgaGF2ZSBhdCBsZWFzdCB0aGlzIGFtb3VudCBvZiBzYW1wbGVzICovCi0gIGdzdF9idWZmZXJfbWFwIChhdWRpbywgJmFtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGFkYXRhID0gKGdpbnQxNiAqKSBhbWFwLmRhdGE7Ci0KLSAgaWYgKGdvb20tPmNoYW5uZWxzID09IDIpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgR09PTV9TQU1QTEVTOyBpKyspIHsKLSAgICAgIGRhdGFpblswXVtpXSA9ICphZGF0YSsrOwotICAgICAgZGF0YWluWzFdW2ldID0gKmFkYXRhKys7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBHT09NX1NBTVBMRVM7IGkrKykgewotICAgICAgZGF0YWluWzBdW2ldID0gKmFkYXRhOwotICAgICAgZGF0YWluWzFdW2ldID0gKmFkYXRhKys7Ci0gICAgfQotICB9Ci0KLSAgdmlkZW8tPmRhdGFbMF0gPSBnb29tX3VwZGF0ZSAoZ29vbS0+cGx1Z2luLCBkYXRhaW4sIDAsIDApOwotICBnc3RfYnVmZmVyX3VubWFwIChhdWRpbywgJmFtYXApOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnb29tX2RlYnVnLCAiZ29vbSIsIDAsICJnb29tIHZpc3VhbGlzYXRpb24gZWxlbWVudCIpOwotCi0jaWYgSEFWRV9PUkMKLSAgb3JjX2luaXQgKCk7Ci0jZW5kaWYKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdvb20iLCBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9HT09NKTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIGdvb20sCi0gICAgIkdPT00gdmlzdWFsaXphdGlvbiBmaWx0ZXIiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vZ3N0Z29vbS5oIGIvZ3N0L2dvb20vZ3N0Z29vbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTk3NWRkLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL2dzdGdvb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIGdzdGdvb20uYzogaW1wbGVtZW50YXRpb24gb2YgZ29vbSBkcmF3aW5nIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgPDIwMDE+IFJpY2hhcmQgQm91bHRvbiA8cmljaGFyZEB0YXJ0YXJ1cy5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDE1PiBMdWlzIGRlIEJldGhlbmNvdXJ0IDxsdWlzQGRlYmV0aGVuY291cnQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfR09PTV9IX18KLSNkZWZpbmUgX19HU1RfR09PTV9IX18KLQotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2dzdGF1ZGlvdmlzdWFsaXplci5oPgotCi0jaW5jbHVkZSAiZ29vbS5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR09PTV9TQU1QTEVTIDUxMgotCi0jZGVmaW5lIEdTVF9UWVBFX0dPT00gICAgICAgICAgICAoZ3N0X2dvb21fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0dPT00ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9HT09NLEdzdEdvb20pKQotI2RlZmluZSBHU1RfR09PTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfR09PTSxHc3RHb29tQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfR09PTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0dPT00pKQotI2RlZmluZSBHU1RfSVNfR09PTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfR09PTSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RHb29tIEdzdEdvb207Ci10eXBlZGVmIHN0cnVjdCBfR3N0R29vbUNsYXNzIEdzdEdvb21DbGFzczsKLQotc3RydWN0IF9Hc3RHb29tCi17Ci0gIEdzdEF1ZGlvVmlzdWFsaXplciBwYXJlbnQ7Ci0KLSAgLyogaW5wdXQgdHJhY2tpbmcgKi8KLSAgZ2ludCBjaGFubmVsczsKLQotICAvKiB2aWRlbyBzdGF0ZSAqLwotICBnaW50IHdpZHRoOwotICBnaW50IGhlaWdodDsKLQotICAvKiBnb29tIHN0dWZmICovCi0gIFBsdWdpbkluZm8gKnBsdWdpbjsKLX07Ci0KLXN0cnVjdCBfR3N0R29vbUNsYXNzCi17Ci0gIEdzdEF1ZGlvVmlzdWFsaXplckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9nb29tX2dldF90eXBlICh2b2lkKTsKLWdib29sZWFuIGdzdF9nb29tX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfR09PTV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vaWZzLmMgYi9nc3QvZ29vbS9pZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQzOGUzMS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9pZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDc3NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5NyBieSBNYXNzaW1pbm8gUGFzY2FsIDxQYXNjYWwuTWFzc2ltb25AZW5zLmZyPgotICoKLSAqIGlmcy5jOiBtb2RpZmllZCBpdGVyYXRlZCBmdW5jdGlvbnMgc3lzdGVtIGZvciBnb29tLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotICogYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi0gKiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIEFTIElTIHdpdGggbm8gd2FycmFudGllcyBvZiBhbnkga2luZC4gIFRoZSBhdXRob3IKLSAqIHNoYWxsIGhhdmUgbm8gbGlhYmlsaXR5IHdpdGggcmVzcGVjdCB0byB0aGUgaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodHMsCi0gKiB0cmFkZSBzZWNyZXRzIG9yIGFueSBwYXRlbnRzIGJ5IHRoaXMgZmlsZSBvciBhbnkgcGFydCB0aGVyZW9mLiAgSW4gbm8KLSAqIGV2ZW50IHdpbGwgdGhlIGF1dGhvciBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUgb3IgcHJvZml0cyBvcgotICogb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcy4KLSAqCi0gKiBJZiB0aGlzIG1vZGUgaXMgd2VpcmQgYW5kIHlvdSBoYXZlIGFuIG9sZCBNZXRyb1ggc2VydmVyLCBpdCBpcyBidWdneS4KLSAqIFRoZXJlIGlzIGEgZnJlZSBTdVNFLWVuaGFuY2VkIE1ldHJvWCBYIHNlcnZlciB0aGF0IGlzIGZpbmUuCi0gKgotICogV2hlbiBzaG93biBpZnMsIERpYW5hIFJvc2UgKDQgeWVhcnMgb2xkKSBzYWlkLCAiSXQgbG9va3MgbGlrZSBkYW5jaW5nLiIKLSAqCi0gKiBSZXZpc2lvbiBIaXN0b3J5OgotICogMTMtRGVjLTIwMDM6IEFkZGVkIHNvbWUgZ29vbSBzcGVjaWZpYyBzdHVmZnMgKHRvIG1ha2UgaWZzIGEgVmlzdWFsRlgpLgotICogMTEtQXByLTIwMDI6IGpla29AaW9zLXNvZnR3YXJlLmNvbTogTWFrZSBpZnMuYyBzeXN0ZW0taW5kZW5kYW50LiAoaWZzLmggYWRkZWQpCi0gKiAwMS1Ob3YtMjAwMDogQWxsb2NhdGlvbiBjaGVja3MKLSAqIDEwLU1heS0xOTk3OiBqd3pAand6Lm9yZzogdHVybmVkIGludG8gYSBzdGFuZGFsb25lIHByb2dyYW0uCi0gKiAgICAgICAgICAgICAgTWFkZSBpdCByZW5kZXIgaW50byBhbiBvZmZzY3JlZW4gYml0bWFwIGFuZCB0aGVuIGNvcHkKLSAqICAgICAgICAgICAgICB0aGF0IG9udG8gdGhlIHNjcmVlbiwgdG8gcmVkdWNlIGZsaWNrZXIuCi0gKi8KLQotLyogI2lmZGVmIFNUQU5EQUxPTkUgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiZ29vbV9jb25maWcuaCIKLQotI2lmZGVmIEhBVkVfTU1YCi0jaW5jbHVkZSAibW14LmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdvb21fZ3JhcGhpYy5oIgotI2luY2x1ZGUgImlmcy5oIgotI2luY2x1ZGUgImdvb21fdG9vbHMuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgX2lmc1BvaW50Ci17Ci0gIGdpbnQzMiB4LCB5OwotfQotSUZTUG9pbnQ7Ci0KLQotI2RlZmluZSBNT0RFX2lmcwotCi0jZGVmaW5lIFBST0dDTEFTUyAiSUZTIgotCi0jZGVmaW5lIEhBQ0tfSU5JVCBpbml0X2lmcwotI2RlZmluZSBIQUNLX0RSQVcgZHJhd19pZnMKLQotI2RlZmluZSBpZnNfb3B0cyB4bG9ja21vcmVfb3B0cwotCi0jZGVmaW5lIERFRkFVTFRTICIqZGVsYXk6IDIwMDAwIFxuIiBcCi0iKm5jb2xvcnM6IDEwMCBcbiIKLQotI2RlZmluZSBTTU9PVEhfQ09MT1JTCi0KLSNkZWZpbmUgTFJBTkQoKSAgICAgICAgICAgICgobG9uZykgKGdvb21fcmFuZG9tKGdvb21JbmZvLT5nUmFuZG9tKSAmIDB4N2ZmZmZmZmYpKQotI2RlZmluZSBOUkFORChuKSAgICAgICAgICAgKChpbnQpIChMUkFORCgpICUgKG4pKSkKLQotI2lmIFJBTkRfTUFYIDwgMHgxMDAwMAotI2RlZmluZSBNQVhSQU5EICgoKGZsb2F0KShSQU5EX01BWDwxNikrKChmbG9hdClSQU5EX01BWCkrMS4wZikvMTI3LjBmKQotI2Vsc2UKLSNkZWZpbmUgTUFYUkFORCAgICAgICAgICAgICgyMTQ3NDgzNjQ4LjAvMTI3LjApIC8qIHVuc2lnbmVkIDE8PDMxIC8gMTI3LjAgKGNmIGdvb21fdG9vbHMpIGFzIGEgZmxvYXQgKi8KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgZmxvYXQgREJMOwotdHlwZWRlZiBpbnQgRl9QVDsKLQotLyogdHlwZWRlZiBmbG9hdCAgICAgICAgICAgICAgIEZfUFQ7ICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBGSVggMTIKLSNkZWZpbmUgVU5JVCAgICggMTw8RklYICkKLSNkZWZpbmUgTUFYX1NJTUkgIDYKLQotI2RlZmluZSBNQVhfREVQVEhfMiAgMTAKLSNkZWZpbmUgTUFYX0RFUFRIXzMgIDYKLSNkZWZpbmUgTUFYX0RFUFRIXzQgIDQKLSNkZWZpbmUgTUFYX0RFUFRIXzUgIDIKLQotLyogUFJFVklPVVMgVkFMVUUgCi0jZGVmaW5lIE1BWF9TSU1JICA2Ci0KLSAqIHNldHRpbmdzIGZvciBhIFBDIDEyME1oei4uLiAqCi0jZGVmaW5lIE1BWF9ERVBUSF8yICAxMAotI2RlZmluZSBNQVhfREVQVEhfMyAgNgotI2RlZmluZSBNQVhfREVQVEhfNCAgNAotI2RlZmluZSBNQVhfREVQVEhfNSAgMwotKi8KLQotI2RlZmluZSBEQkxfVG9fRl9QVCh4KSAgKEZfUFQpKCAoREJMKShVTklUKSooeCkgKQotCi10eXBlZGVmIHN0cnVjdCBTaW1pbGl0dWRlX1N0cnVjdCBTSU1JOwotdHlwZWRlZiBzdHJ1Y3QgRnJhY3RhbF9TdHJ1Y3QgRlJBQ1RBTDsKLQotc3RydWN0IFNpbWlsaXR1ZGVfU3RydWN0Ci17Ci0KLSAgREJMIGNfeCwgY195OwotICBEQkwgciwgcjIsIEEsIEEyOwotICBGX1BUIEN0LCBTdCwgQ3QyLCBTdDI7Ci0gIEZfUFQgQ3gsIEN5OwotICBGX1BUIFIsIFIyOwotfTsKLQotCi1zdHJ1Y3QgRnJhY3RhbF9TdHJ1Y3QKLXsKLQotICBpbnQgTmJfU2ltaTsKLSAgU0lNSSBDb21wb25lbnRzWzUgKiBNQVhfU0lNSV07Ci0gIGludCBEZXB0aCwgQ29sOwotICBpbnQgQ291bnQsIFNwZWVkOwotICBpbnQgV2lkdGgsIEhlaWdodCwgTHgsIEx5OwotICBEQkwgcl9tZWFuLCBkcl9tZWFuLCBkcjJfbWVhbjsKLSAgaW50IEN1cl9QdCwgTWF4X1B0OwotCi0gIElGU1BvaW50ICpCdWZmZXIxLCAqQnVmZmVyMjsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9JRlNfREFUQQotewotICBGUkFDVEFMICpSb290OwotICBGUkFDVEFMICpDdXJfRjsKLQotICAvKiBVc2VkIGJ5IHRoZSBUcmFjZSByZWN1cnNpdmUgbWV0aG9kICovCi0gIElGU1BvaW50ICpCdWY7Ci0gIGludCBDdXJfUHQ7Ci0gIGludCBpbml0YWxpemVkOwotfSBJZnNEYXRhOwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIERCTAotR2F1c3NfUmFuZCAoUGx1Z2luSW5mbyAqIGdvb21JbmZvLCBEQkwgYywgREJMIEEsIERCTCBTKQotewotICBEQkwgeTsKLQotICB5ID0gKERCTCkgTFJBTkQgKCkgLyBNQVhSQU5EOwotICB5ID0gQSAqICgxLjAgLSBleHAgKC15ICogeSAqIFMpKSAvICgxLjAgLSBleHAgKC1TKSk7Ci0gIGlmIChOUkFORCAoMikpCi0gICAgcmV0dXJuIChjICsgeSk7Ci0gIHJldHVybiAoYyAtIHkpOwotfQotCi1zdGF0aWMgREJMCi1IYWxmX0dhdXNzX1JhbmQgKFBsdWdpbkluZm8gKiBnb29tSW5mbywgREJMIGMsIERCTCBBLCBEQkwgUykKLXsKLSAgREJMIHk7Ci0KLSAgeSA9IChEQkwpIExSQU5EICgpIC8gTUFYUkFORDsKLSAgeSA9IEEgKiAoMS4wIC0gZXhwICgteSAqIHkgKiBTKSkgLyAoMS4wIC0gZXhwICgtUykpOwotICByZXR1cm4gKGMgKyB5KTsKLX0KLQotc3RhdGljIHZvaWQKLVJhbmRvbV9TaW1pcyAoUGx1Z2luSW5mbyAqIGdvb21JbmZvLCBGUkFDVEFMICogRiwgU0lNSSAqIEN1ciwgaW50IGkpCi17Ci0gIHdoaWxlIChpLS0pIHsKLSAgICBDdXItPmNfeCA9IEdhdXNzX1JhbmQgKGdvb21JbmZvLCAwLjAsIC44LCA0LjApOwotICAgIEN1ci0+Y195ID0gR2F1c3NfUmFuZCAoZ29vbUluZm8sIDAuMCwgLjgsIDQuMCk7Ci0gICAgQ3VyLT5yID0gR2F1c3NfUmFuZCAoZ29vbUluZm8sIEYtPnJfbWVhbiwgRi0+ZHJfbWVhbiwgMy4wKTsKLSAgICBDdXItPnIyID0gSGFsZl9HYXVzc19SYW5kIChnb29tSW5mbywgMC4wLCBGLT5kcjJfbWVhbiwgMi4wKTsKLSAgICBDdXItPkEgPSBHYXVzc19SYW5kIChnb29tSW5mbywgMC4wLCAzNjAuMCwgNC4wKSAqIChHX1BJIC8gMTgwLjApOwotICAgIEN1ci0+QTIgPSBHYXVzc19SYW5kIChnb29tSW5mbywgMC4wLCAzNjAuMCwgNC4wKSAqIChHX1BJIC8gMTgwLjApOwotICAgIEN1cisrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2lmc19idWZmZXJzIChGUkFDVEFMICogRnJhY3RhbCkKLXsKLSAgaWYgKEZyYWN0YWwtPkJ1ZmZlcjEgIT0gTlVMTCkgewotICAgICh2b2lkKSBmcmVlICgodm9pZCAqKSBGcmFjdGFsLT5CdWZmZXIxKTsKLSAgICBGcmFjdGFsLT5CdWZmZXIxID0gKElGU1BvaW50ICopIE5VTEw7Ci0gIH0KLSAgaWYgKEZyYWN0YWwtPkJ1ZmZlcjIgIT0gTlVMTCkgewotICAgICh2b2lkKSBmcmVlICgodm9pZCAqKSBGcmFjdGFsLT5CdWZmZXIyKTsKLSAgICBGcmFjdGFsLT5CdWZmZXIyID0gKElGU1BvaW50ICopIE5VTEw7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZnJlZV9pZnMgKEZSQUNUQUwgKiBGcmFjdGFsKQotewotICBmcmVlX2lmc19idWZmZXJzIChGcmFjdGFsKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWluaXRfaWZzIChQbHVnaW5JbmZvICogZ29vbUluZm8sIElmc0RhdGEgKiBkYXRhKQotewotICBpbnQgaTsKLSAgRlJBQ1RBTCAqRnJhY3RhbDsKLSAgaW50IHdpZHRoID0gZ29vbUluZm8tPnNjcmVlbi53aWR0aDsKLSAgaW50IGhlaWdodCA9IGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0OwotCi0gIGlmIChkYXRhLT5Sb290ID09IE5VTEwpIHsKLSAgICBkYXRhLT5Sb290ID0gKEZSQUNUQUwgKikgbWFsbG9jIChzaXplb2YgKEZSQUNUQUwpKTsKLSAgICBpZiAoZGF0YS0+Um9vdCA9PSBOVUxMKQotICAgICAgcmV0dXJuOwotICAgIGRhdGEtPlJvb3QtPkJ1ZmZlcjEgPSAoSUZTUG9pbnQgKikgTlVMTDsKLSAgICBkYXRhLT5Sb290LT5CdWZmZXIyID0gKElGU1BvaW50ICopIE5VTEw7Ci0gIH0KLSAgRnJhY3RhbCA9IGRhdGEtPlJvb3Q7Ci0KLSAgZnJlZV9pZnNfYnVmZmVycyAoRnJhY3RhbCk7Ci0KLSAgaSA9IChOUkFORCAoNCkpICsgMjsgICAgICAgICAgLyogTnVtYmVyIG9mIGNlbnRlcnMgKi8KLSAgc3dpdGNoIChpKSB7Ci0gICAgY2FzZSAzOgotICAgICAgRnJhY3RhbC0+RGVwdGggPSBNQVhfREVQVEhfMzsKLSAgICAgIEZyYWN0YWwtPnJfbWVhbiA9IC42OwotICAgICAgRnJhY3RhbC0+ZHJfbWVhbiA9IC40OwotICAgICAgRnJhY3RhbC0+ZHIyX21lYW4gPSAuMzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSA0OgotICAgICAgRnJhY3RhbC0+RGVwdGggPSBNQVhfREVQVEhfNDsKLSAgICAgIEZyYWN0YWwtPnJfbWVhbiA9IC41OwotICAgICAgRnJhY3RhbC0+ZHJfbWVhbiA9IC40OwotICAgICAgRnJhY3RhbC0+ZHIyX21lYW4gPSAuMzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSA1OgotICAgICAgRnJhY3RhbC0+RGVwdGggPSBNQVhfREVQVEhfNTsKLSAgICAgIEZyYWN0YWwtPnJfbWVhbiA9IC41OwotICAgICAgRnJhY3RhbC0+ZHJfbWVhbiA9IC40OwotICAgICAgRnJhY3RhbC0+ZHIyX21lYW4gPSAuMzsKLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICBjYXNlIDI6Ci0gICAgICBGcmFjdGFsLT5EZXB0aCA9IE1BWF9ERVBUSF8yOwotICAgICAgRnJhY3RhbC0+cl9tZWFuID0gLjc7Ci0gICAgICBGcmFjdGFsLT5kcl9tZWFuID0gLjM7Ci0gICAgICBGcmFjdGFsLT5kcjJfbWVhbiA9IC40OwotICAgICAgYnJlYWs7Ci0gIH0KLSAgRnJhY3RhbC0+TmJfU2ltaSA9IGk7Ci0gIEZyYWN0YWwtPk1heF9QdCA9IEZyYWN0YWwtPk5iX1NpbWkgLSAxOwotICBmb3IgKGkgPSAwOyBpIDw9IEZyYWN0YWwtPkRlcHRoICsgMjsgKytpKQotICAgIEZyYWN0YWwtPk1heF9QdCAqPSBGcmFjdGFsLT5OYl9TaW1pOwotCi0gIGlmICgoRnJhY3RhbC0+QnVmZmVyMSA9IChJRlNQb2ludCAqKSBjYWxsb2MgKEZyYWN0YWwtPk1heF9QdCwKLSAgICAgICAgICAgICAgc2l6ZW9mIChJRlNQb2ludCkpKSA9PSBOVUxMKSB7Ci0gICAgZnJlZV9pZnMgKEZyYWN0YWwpOwotICAgIHJldHVybjsKLSAgfQotICBpZiAoKEZyYWN0YWwtPkJ1ZmZlcjIgPSAoSUZTUG9pbnQgKikgY2FsbG9jIChGcmFjdGFsLT5NYXhfUHQsCi0gICAgICAgICAgICAgIHNpemVvZiAoSUZTUG9pbnQpKSkgPT0gTlVMTCkgewotICAgIGZyZWVfaWZzIChGcmFjdGFsKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBGcmFjdGFsLT5TcGVlZCA9IDY7Ci0gIEZyYWN0YWwtPldpZHRoID0gd2lkdGg7ICAgICAgIC8qIG1vZGlmIGJ5IEplS28gKi8KLSAgRnJhY3RhbC0+SGVpZ2h0ID0gaGVpZ2h0OyAgICAgLyogbW9kaWYgYnkgSmVLbyAqLwotICBGcmFjdGFsLT5DdXJfUHQgPSAwOwotICBGcmFjdGFsLT5Db3VudCA9IDA7Ci0gIEZyYWN0YWwtPkx4ID0gKEZyYWN0YWwtPldpZHRoIC0gMSkgLyAyOwotICBGcmFjdGFsLT5MeSA9IChGcmFjdGFsLT5IZWlnaHQgLSAxKSAvIDI7Ci0gIEZyYWN0YWwtPkNvbCA9IHJhbmQgKCkgJSAod2lkdGggKiBoZWlnaHQpOyAgICAvKiBtb2RpZiBieSBKZUtvICovCi0KLSAgUmFuZG9tX1NpbWlzIChnb29tSW5mbywgRnJhY3RhbCwgRnJhY3RhbC0+Q29tcG9uZW50cywgNSAqIE1BWF9TSU1JKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLVRyYW5zZm9ybSAoU0lNSSAqIFNpbWksIEZfUFQgeG8sIEZfUFQgeW8sIEZfUFQgKiB4LCBGX1BUICogeSkKLXsKLSAgRl9QVCB4eCwgeXk7Ci0KLSAgeG8gPSB4byAtIFNpbWktPkN4OwotICB4byA9ICh4byAqIFNpbWktPlIpID4+IEZJWDsgICAvKiAvIFVOSVQ7ICovCi0gIHlvID0geW8gLSBTaW1pLT5DeTsKLSAgeW8gPSAoeW8gKiBTaW1pLT5SKSA+PiBGSVg7ICAgLyogLyBVTklUOyAqLwotCi0gIHh4ID0geG8gLSBTaW1pLT5DeDsKLSAgeHggPSAoeHggKiBTaW1pLT5SMikgPj4gRklYOyAgLyogLyBVTklUOyAqLwotICB5eSA9IC15byAtIFNpbWktPkN5OwotICB5eSA9ICh5eSAqIFNpbWktPlIyKSA+PiBGSVg7ICAvKiAvIFVOSVQ7ICovCi0KLSAgKnggPSAoKHhvICogU2ltaS0+Q3QgLSB5byAqIFNpbWktPlN0ICsgeHggKiBTaW1pLT5DdDIgLSB5eSAqIFNpbWktPlN0MikKLSAgICAgID4+IEZJWCAvKiAvIFVOSVQgKi8gKSArIFNpbWktPkN4OwotICAqeSA9ICgoeG8gKiBTaW1pLT5TdCArIHlvICogU2ltaS0+Q3QgKyB4eCAqIFNpbWktPlN0MiArIHl5ICogU2ltaS0+Q3QyKQotICAgICAgPj4gRklYIC8qIC8gVU5JVCAqLyApICsgU2ltaS0+Q3k7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1UcmFjZSAoRlJBQ1RBTCAqIEYsIEZfUFQgeG8sIEZfUFQgeW8sIElmc0RhdGEgKiBkYXRhKQotewotICBGX1BUIHgsIHksIGk7Ci0gIFNJTUkgKkN1cjsKLQotICBDdXIgPSBkYXRhLT5DdXJfRi0+Q29tcG9uZW50czsKLSAgZm9yIChpID0gZGF0YS0+Q3VyX0YtPk5iX1NpbWk7IGk7IC0taSwgQ3VyKyspIHsKLSAgICBUcmFuc2Zvcm0gKEN1ciwgeG8sIHlvLCAmeCwgJnkpOwotCi0gICAgZGF0YS0+QnVmLT54ID0gRi0+THggKyAoKHggKiBGLT5MeCkgPj4gKEZJWCArIDEpIC8qIC8oVU5JVCoyKSAqLyApOwotICAgIGRhdGEtPkJ1Zi0+eSA9IEYtPkx5IC0gKCh5ICogRi0+THkpID4+IChGSVggKyAxKSAvKiAvKFVOSVQqMikgKi8gKTsKLSAgICBkYXRhLT5CdWYrKzsKLQotICAgIGRhdGEtPkN1cl9QdCsrOwotCi0gICAgaWYgKEYtPkRlcHRoICYmICgoeCAtIHhvKSA+PiA0KSAmJiAoKHkgLSB5bykgPj4gNCkpIHsKLSAgICAgIEYtPkRlcHRoLS07Ci0gICAgICBUcmFjZSAoRiwgeCwgeSwgZGF0YSk7Ci0gICAgICBGLT5EZXB0aCsrOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotRHJhd19GcmFjdGFsIChJZnNEYXRhICogZGF0YSkKLXsKLSAgRlJBQ1RBTCAqRiA9IGRhdGEtPlJvb3Q7Ci0gIGludCBpLCBqOwotICBGX1BUIHgsIHksIHhvLCB5bzsKLSAgU0lNSSAqQ3VyLCAqU2ltaTsKLQotICBmb3IgKEN1ciA9IEYtPkNvbXBvbmVudHMsIGkgPSBGLT5OYl9TaW1pOyBpOyAtLWksIEN1cisrKSB7Ci0gICAgQ3VyLT5DeCA9IERCTF9Ub19GX1BUIChDdXItPmNfeCk7Ci0gICAgQ3VyLT5DeSA9IERCTF9Ub19GX1BUIChDdXItPmNfeSk7Ci0KLSAgICBDdXItPkN0ID0gREJMX1RvX0ZfUFQgKGNvcyAoQ3VyLT5BKSk7Ci0gICAgQ3VyLT5TdCA9IERCTF9Ub19GX1BUIChzaW4gKEN1ci0+QSkpOwotICAgIEN1ci0+Q3QyID0gREJMX1RvX0ZfUFQgKGNvcyAoQ3VyLT5BMikpOwotICAgIEN1ci0+U3QyID0gREJMX1RvX0ZfUFQgKHNpbiAoQ3VyLT5BMikpOwotCi0gICAgQ3VyLT5SID0gREJMX1RvX0ZfUFQgKEN1ci0+cik7Ci0gICAgQ3VyLT5SMiA9IERCTF9Ub19GX1BUIChDdXItPnIyKTsKLSAgfQotCi0KLSAgZGF0YS0+Q3VyX1B0ID0gMDsKLSAgZGF0YS0+Q3VyX0YgPSBGOwotICBkYXRhLT5CdWYgPSBGLT5CdWZmZXIyOwotICBmb3IgKEN1ciA9IEYtPkNvbXBvbmVudHMsIGkgPSBGLT5OYl9TaW1pOyBpOyAtLWksIEN1cisrKSB7Ci0gICAgeG8gPSBDdXItPkN4OwotICAgIHlvID0gQ3VyLT5DeTsKLSAgICBmb3IgKFNpbWkgPSBGLT5Db21wb25lbnRzLCBqID0gRi0+TmJfU2ltaTsgajsgLS1qLCBTaW1pKyspIHsKLSAgICAgIGlmIChTaW1pID09IEN1cikKLSAgICAgICAgY29udGludWU7Ci0gICAgICBUcmFuc2Zvcm0gKFNpbWksIHhvLCB5bywgJngsICZ5KTsKLSAgICAgIFRyYWNlIChGLCB4LCB5LCBkYXRhKTsKLSAgICB9Ci0gIH0KLQotICAvKiBFcmFzZSBwcmV2aW91cyAqLwotCi0gIEYtPkN1cl9QdCA9IGRhdGEtPkN1cl9QdDsKLSAgZGF0YS0+QnVmID0gRi0+QnVmZmVyMTsKLSAgRi0+QnVmZmVyMSA9IEYtPkJ1ZmZlcjI7Ci0gIEYtPkJ1ZmZlcjIgPSBkYXRhLT5CdWY7Ci19Ci0KLQotc3RhdGljIElGU1BvaW50ICoKLWRyYXdfaWZzIChQbHVnaW5JbmZvICogZ29vbUluZm8sIGludCAqbmJwdCwgSWZzRGF0YSAqIGRhdGEpCi17Ci0gIGludCBpOwotICBEQkwgdSwgdXUsIHYsIHZ2LCB1MCwgdTEsIHUyLCB1MzsKLSAgU0lNSSAqUywgKlMxLCAqUzIsICpTMywgKlM0OwotICBGUkFDVEFMICpGOwotCi0gIGlmIChkYXRhLT5Sb290ID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIEYgPSBkYXRhLT5Sb290OwotICBpZiAoRi0+QnVmZmVyMSA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIHUgPSAoREJMKSAoRi0+Q291bnQpICogKERCTCkgKEYtPlNwZWVkKSAvIDEwMDAuMDsKLSAgdXUgPSB1ICogdTsKLSAgdiA9IDEuMCAtIHU7Ci0gIHZ2ID0gdiAqIHY7Ci0gIHUwID0gdnYgKiB2OwotICB1MSA9IDMuMCAqIHZ2ICogdTsKLSAgdTIgPSAzLjAgKiB2ICogdXU7Ci0gIHUzID0gdSAqIHV1OwotCi0gIFMgPSBGLT5Db21wb25lbnRzOwotICBTMSA9IFMgKyBGLT5OYl9TaW1pOwotICBTMiA9IFMxICsgRi0+TmJfU2ltaTsKLSAgUzMgPSBTMiArIEYtPk5iX1NpbWk7Ci0gIFM0ID0gUzMgKyBGLT5OYl9TaW1pOwotCi0gIGZvciAoaSA9IEYtPk5iX1NpbWk7IGk7IC0taSwgUysrLCBTMSsrLCBTMisrLCBTMysrLCBTNCsrKSB7Ci0gICAgUy0+Y194ID0gdTAgKiBTMS0+Y194ICsgdTEgKiBTMi0+Y194ICsgdTIgKiBTMy0+Y194ICsgdTMgKiBTNC0+Y194OwotICAgIFMtPmNfeSA9IHUwICogUzEtPmNfeSArIHUxICogUzItPmNfeSArIHUyICogUzMtPmNfeSArIHUzICogUzQtPmNfeTsKLSAgICBTLT5yID0gdTAgKiBTMS0+ciArIHUxICogUzItPnIgKyB1MiAqIFMzLT5yICsgdTMgKiBTNC0+cjsKLSAgICBTLT5yMiA9IHUwICogUzEtPnIyICsgdTEgKiBTMi0+cjIgKyB1MiAqIFMzLT5yMiArIHUzICogUzQtPnIyOwotICAgIFMtPkEgPSB1MCAqIFMxLT5BICsgdTEgKiBTMi0+QSArIHUyICogUzMtPkEgKyB1MyAqIFM0LT5BOwotICAgIFMtPkEyID0gdTAgKiBTMS0+QTIgKyB1MSAqIFMyLT5BMiArIHUyICogUzMtPkEyICsgdTMgKiBTNC0+QTI7Ci0gIH0KLQotICBEcmF3X0ZyYWN0YWwgKGRhdGEpOwotCi0gIGlmIChGLT5Db3VudCA+PSAxMDAwIC8gRi0+U3BlZWQpIHsKLSAgICBTID0gRi0+Q29tcG9uZW50czsKLSAgICBTMSA9IFMgKyBGLT5OYl9TaW1pOwotICAgIFMyID0gUzEgKyBGLT5OYl9TaW1pOwotICAgIFMzID0gUzIgKyBGLT5OYl9TaW1pOwotICAgIFM0ID0gUzMgKyBGLT5OYl9TaW1pOwotCi0gICAgZm9yIChpID0gRi0+TmJfU2ltaTsgaTsgLS1pLCBTKyssIFMxKyssIFMyKyssIFMzKyssIFM0KyspIHsKLSAgICAgIFMyLT5jX3ggPSAyLjAgKiBTNC0+Y194IC0gUzMtPmNfeDsKLSAgICAgIFMyLT5jX3kgPSAyLjAgKiBTNC0+Y195IC0gUzMtPmNfeTsKLSAgICAgIFMyLT5yID0gMi4wICogUzQtPnIgLSBTMy0+cjsKLSAgICAgIFMyLT5yMiA9IDIuMCAqIFM0LT5yMiAtIFMzLT5yMjsKLSAgICAgIFMyLT5BID0gMi4wICogUzQtPkEgLSBTMy0+QTsKLSAgICAgIFMyLT5BMiA9IDIuMCAqIFM0LT5BMiAtIFMzLT5BMjsKLQotICAgICAgKlMxID0gKlM0OwotICAgIH0KLSAgICBSYW5kb21fU2ltaXMgKGdvb21JbmZvLCBGLCBGLT5Db21wb25lbnRzICsgMyAqIEYtPk5iX1NpbWksIEYtPk5iX1NpbWkpOwotCi0gICAgUmFuZG9tX1NpbWlzIChnb29tSW5mbywgRiwgRi0+Q29tcG9uZW50cyArIDQgKiBGLT5OYl9TaW1pLCBGLT5OYl9TaW1pKTsKLQotICAgIEYtPkNvdW50ID0gMDsKLSAgfSBlbHNlCi0gICAgRi0+Q291bnQrKzsKLQotICBGLT5Db2wrKzsKLQotICAoKm5icHQpID0gZGF0YS0+Q3VyX1B0OwotICByZXR1cm4gRi0+QnVmZmVyMjsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9pZnMgKElmc0RhdGEgKiBkYXRhKQotewotICBpZiAoZGF0YS0+Um9vdCAhPSBOVUxMKSB7Ci0gICAgZnJlZV9pZnMgKGRhdGEtPlJvb3QpOwotICAgICh2b2lkKSBmcmVlICgodm9pZCAqKSBkYXRhLT5Sb290KTsKLSAgICBkYXRhLT5Sb290ID0gKEZSQUNUQUwgKikgTlVMTDsKLSAgfQotfQotCi0jZGVmaW5lIFJBTkQoKSBnb29tX3JhbmRvbShnb29tSW5mby0+Z1JhbmRvbSkKLQotc3RhdGljIHZvaWQKLWlmc191cGRhdGUgKFBsdWdpbkluZm8gKiBnb29tSW5mbywgUGl4ZWwgKiBkYXRhLCBQaXhlbCAqIGJhY2ssIGludCBpbmNyZW1lbnQsCi0gICAgSWZzRGF0YSAqIGZ4X2RhdGEpCi17Ci0gIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bGV1ciA9IDB4YzBjMGMwYzA7Ci0gIHN0YXRpYyBpbnQgdls0XSA9IHsgMiwgNCwgMywgMiB9OwotICBzdGF0aWMgaW50IGNvbFs0XSA9IHsgMiwgNCwgMywgMiB9OwotCi0jZGVmaW5lIE1PRF9NRVIgMAotI2RlZmluZSBNT0RfRkVVIDEKLSNkZWZpbmUgTU9EX01FUlZFUiAyCi0gIHN0YXRpYyBpbnQgbW9kZSA9IE1PRF9NRVJWRVI7Ci0gIHN0YXRpYyBpbnQganVzdENoYW5nZWQgPSAwOwotICBzdGF0aWMgaW50IGN5Y2xlID0gMDsKLSAgaW50IGN5Y2xlMTA7Ci0KLSAgaW50IG5icHQgPSAwOwotICBJRlNQb2ludCAqcG9pbnRzOwotICBpbnQgaTsKLQotICB1bnNpZ25lZCBpbnQgY291bGV1cnNsID0gY291bGV1cjsKLSAgaW50IHdpZHRoID0gZ29vbUluZm8tPnNjcmVlbi53aWR0aDsKLSAgaW50IGhlaWdodCA9IGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0OwotCi0gIGN5Y2xlKys7Ci0gIGlmIChjeWNsZSA+PSA4MCkKLSAgICBjeWNsZSA9IDA7Ci0KLSAgaWYgKGN5Y2xlIDwgNDApCi0gICAgY3ljbGUxMCA9IGN5Y2xlIC8gMTA7Ci0gIGVsc2UKLSAgICBjeWNsZTEwID0gNyAtIGN5Y2xlIC8gMTA7Ci0KLSAgewotICAgIHVuc2lnbmVkIGNoYXIgKnRtcCA9ICh1bnNpZ25lZCBjaGFyICopICZjb3VsZXVyc2w7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAqdG1wID0gKCp0bXApID4+IGN5Y2xlMTA7Ci0gICAgICB0bXArKzsKLSAgICB9Ci0gIH0KLQotICBwb2ludHMgPSBkcmF3X2lmcyAoZ29vbUluZm8sICZuYnB0LCBmeF9kYXRhKTsKLSAgbmJwdC0tOwotCi0jaWZkZWYgSEFWRV9NTVgKLSAgbW92ZF9tMnIgKGNvdWxldXJzbCwgbW0xKTsKLSAgcHVucGNrbGRxX3IyciAobW0xLCBtbTEpOwotICBmb3IgKGkgPSAwOyBpIDwgbmJwdDsgaSArPSBpbmNyZW1lbnQpIHsKLSAgICBpbnQgeCA9IHBvaW50c1tpXS54OwotICAgIGludCB5ID0gcG9pbnRzW2ldLnk7Ci0KLSAgICBpZiAoKHggPCB3aWR0aCkgJiYgKHkgPCBoZWlnaHQpICYmICh4ID4gMCkgJiYgKHkgPiAwKSkgewotICAgICAgaW50IHBvcyA9IHggKyAoeSAqIHdpZHRoKTsKLQotICAgICAgbW92ZF9tMnIgKGJhY2tbcG9zXSwgbW0wKTsKLSAgICAgIHBhZGR1c2JfcjJyIChtbTEsIG1tMCk7Ci0gICAgICBtb3ZkX3IybSAobW0wLCBkYXRhW3Bvc10pOwotICAgIH0KLSAgfQotICBlbW1zICgpOyAgICAgLypfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiKTsqLwotI2Vsc2UKLSAgZm9yIChpID0gMDsgaSA8IG5icHQ7IGkgKz0gaW5jcmVtZW50KSB7Ci0gICAgaW50IHggPSAoaW50KSBwb2ludHNbaV0ueCAmIDB4N2ZmZmZmZmY7Ci0gICAgaW50IHkgPSAoaW50KSBwb2ludHNbaV0ueSAmIDB4N2ZmZmZmZmY7Ci0KLSAgICBpZiAoKHggPCB3aWR0aCkgJiYgKHkgPCBoZWlnaHQpKSB7Ci0gICAgICBpbnQgcG9zID0geCArIChpbnQpICh5ICogd2lkdGgpOwotICAgICAgaW50IHRyYSA9IDAsIGkgPSAwOwotICAgICAgdW5zaWduZWQgY2hhciAqYnJhID0gKHVuc2lnbmVkIGNoYXIgKikgJmJhY2tbcG9zXTsKLSAgICAgIHVuc2lnbmVkIGNoYXIgKmRyYSA9ICh1bnNpZ25lZCBjaGFyICopICZkYXRhW3Bvc107Ci0gICAgICB1bnNpZ25lZCBjaGFyICpjcmEgPSAodW5zaWduZWQgY2hhciAqKSAmY291bGV1cnNsOwotCi0gICAgICBmb3IgKDsgaSA8IDQ7IGkrKykgewotICAgICAgICB0cmEgPSAqY3JhOwotICAgICAgICB0cmEgKz0gKmJyYTsKLSAgICAgICAgaWYgKHRyYSA+IDI1NSkKLSAgICAgICAgICB0cmEgPSAyNTU7Ci0gICAgICAgICpkcmEgPSB0cmE7Ci0gICAgICAgICsrZHJhOwotICAgICAgICArK2NyYTsKLSAgICAgICAgKyticmE7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0jZW5kaWYgLypNTVgqLwotICAgICAganVzdENoYW5nZWQtLTsKLQotICBjb2xbQUxQSEFdID0gY291bGV1ciA+PiAoQUxQSEEgKiA4KSAmIDB4ZmY7Ci0gIGNvbFtCTEVVXSA9IGNvdWxldXIgPj4gKEJMRVUgKiA4KSAmIDB4ZmY7Ci0gIGNvbFtWRVJUXSA9IGNvdWxldXIgPj4gKFZFUlQgKiA4KSAmIDB4ZmY7Ci0gIGNvbFtST1VHRV0gPSBjb3VsZXVyID4+IChST1VHRSAqIDgpICYgMHhmZjsKLQotICBpZiAobW9kZSA9PSBNT0RfTUVSKSB7Ci0gICAgY29sW0JMRVVdICs9IHZbQkxFVV07Ci0gICAgaWYgKGNvbFtCTEVVXSA+IDI1NSkgewotICAgICAgY29sW0JMRVVdID0gMjU1OwotICAgICAgdltCTEVVXSA9IC0oUkFORCAoKSAlIDQpIC0gMTsKLSAgICB9Ci0gICAgaWYgKGNvbFtCTEVVXSA8IDMyKSB7Ci0gICAgICBjb2xbQkxFVV0gPSAzMjsKLSAgICAgIHZbQkxFVV0gPSAoUkFORCAoKSAlIDQpICsgMTsKLSAgICB9Ci0KLSAgICBjb2xbVkVSVF0gKz0gdltWRVJUXTsKLSAgICBpZiAoY29sW1ZFUlRdID4gMjAwKSB7Ci0gICAgICBjb2xbVkVSVF0gPSAyMDA7Ci0gICAgICB2W1ZFUlRdID0gLShSQU5EICgpICUgMykgLSAyOwotICAgIH0KLSAgICBpZiAoY29sW1ZFUlRdID4gY29sW0JMRVVdKSB7Ci0gICAgICBjb2xbVkVSVF0gPSBjb2xbQkxFVV07Ci0gICAgICB2W1ZFUlRdID0gdltCTEVVXTsKLSAgICB9Ci0gICAgaWYgKGNvbFtWRVJUXSA8IDMyKSB7Ci0gICAgICBjb2xbVkVSVF0gPSAzMjsKLSAgICAgIHZbVkVSVF0gPSAoUkFORCAoKSAlIDMpICsgMjsKLSAgICB9Ci0KLSAgICBjb2xbUk9VR0VdICs9IHZbUk9VR0VdOwotICAgIGlmIChjb2xbUk9VR0VdID4gNjQpIHsKLSAgICAgIGNvbFtST1VHRV0gPSA2NDsKLSAgICAgIHZbUk9VR0VdID0gLShSQU5EICgpICUgNCkgLSAxOwotICAgIH0KLSAgICBpZiAoY29sW1JPVUdFXSA8IDApIHsKLSAgICAgIGNvbFtST1VHRV0gPSAwOwotICAgICAgdltST1VHRV0gPSAoUkFORCAoKSAlIDQpICsgMTsKLSAgICB9Ci0KLSAgICBjb2xbQUxQSEFdICs9IHZbQUxQSEFdOwotICAgIGlmIChjb2xbQUxQSEFdID4gMCkgewotICAgICAgY29sW0FMUEhBXSA9IDA7Ci0gICAgICB2W0FMUEhBXSA9IC0oUkFORCAoKSAlIDQpIC0gMTsKLSAgICB9Ci0gICAgaWYgKGNvbFtBTFBIQV0gPCAwKSB7Ci0gICAgICBjb2xbQUxQSEFdID0gMDsKLSAgICAgIHZbQUxQSEFdID0gKFJBTkQgKCkgJSA0KSArIDE7Ci0gICAgfQotCi0gICAgaWYgKCgoY29sW1ZFUlRdID4gMzIpICYmIChjb2xbUk9VR0VdIDwgY29sW1ZFUlRdICsgNDApCi0gICAgICAgICAgICAmJiAoY29sW1ZFUlRdIDwgY29sW1JPVUdFXSArIDIwKSAmJiAoY29sW0JMRVVdIDwgNjQpCi0gICAgICAgICAgICAmJiAoUkFORCAoKSAlIDIwID09IDApKSAmJiAoanVzdENoYW5nZWQgPCAwKSkgewotICAgICAgbW9kZSA9IChSQU5EICgpICUgMykgPyBNT0RfRkVVIDogTU9EX01FUlZFUjsKLSAgICAgIGp1c3RDaGFuZ2VkID0gMjUwOwotICAgIH0KLSAgfSBlbHNlIGlmIChtb2RlID09IE1PRF9NRVJWRVIpIHsKLSAgICBjb2xbQkxFVV0gKz0gdltCTEVVXTsKLSAgICBpZiAoY29sW0JMRVVdID4gMTI4KSB7Ci0gICAgICBjb2xbQkxFVV0gPSAxMjg7Ci0gICAgICB2W0JMRVVdID0gLShSQU5EICgpICUgNCkgLSAxOwotICAgIH0KLSAgICBpZiAoY29sW0JMRVVdIDwgMTYpIHsKLSAgICAgIGNvbFtCTEVVXSA9IDE2OwotICAgICAgdltCTEVVXSA9IChSQU5EICgpICUgNCkgKyAxOwotICAgIH0KLQotICAgIGNvbFtWRVJUXSArPSB2W1ZFUlRdOwotICAgIGlmIChjb2xbVkVSVF0gPiAyMDApIHsKLSAgICAgIGNvbFtWRVJUXSA9IDIwMDsKLSAgICAgIHZbVkVSVF0gPSAtKFJBTkQgKCkgJSAzKSAtIDI7Ci0gICAgfQotICAgIGlmIChjb2xbVkVSVF0gPiBjb2xbQUxQSEFdKSB7Ci0gICAgICBjb2xbVkVSVF0gPSBjb2xbQUxQSEFdOwotICAgICAgdltWRVJUXSA9IHZbQUxQSEFdOwotICAgIH0KLSAgICBpZiAoY29sW1ZFUlRdIDwgMzIpIHsKLSAgICAgIGNvbFtWRVJUXSA9IDMyOwotICAgICAgdltWRVJUXSA9IChSQU5EICgpICUgMykgKyAyOwotICAgIH0KLQotICAgIGNvbFtST1VHRV0gKz0gdltST1VHRV07Ci0gICAgaWYgKGNvbFtST1VHRV0gPiAxMjgpIHsKLSAgICAgIGNvbFtST1VHRV0gPSAxMjg7Ci0gICAgICB2W1JPVUdFXSA9IC0oUkFORCAoKSAlIDQpIC0gMTsKLSAgICB9Ci0gICAgaWYgKGNvbFtST1VHRV0gPCAwKSB7Ci0gICAgICBjb2xbUk9VR0VdID0gMDsKLSAgICAgIHZbUk9VR0VdID0gKFJBTkQgKCkgJSA0KSArIDE7Ci0gICAgfQotCi0gICAgY29sW0FMUEhBXSArPSB2W0FMUEhBXTsKLSAgICBpZiAoY29sW0FMUEhBXSA+IDI1NSkgewotICAgICAgY29sW0FMUEhBXSA9IDI1NTsKLSAgICAgIHZbQUxQSEFdID0gLShSQU5EICgpICUgNCkgLSAxOwotICAgIH0KLSAgICBpZiAoY29sW0FMUEhBXSA8IDApIHsKLSAgICAgIGNvbFtBTFBIQV0gPSAwOwotICAgICAgdltBTFBIQV0gPSAoUkFORCAoKSAlIDQpICsgMTsKLSAgICB9Ci0KLSAgICBpZiAoKChjb2xbVkVSVF0gPiAzMikgJiYgKGNvbFtST1VHRV0gPCBjb2xbVkVSVF0gKyA0MCkKLSAgICAgICAgICAgICYmIChjb2xbVkVSVF0gPCBjb2xbUk9VR0VdICsgMjApICYmIChjb2xbQkxFVV0gPCA2NCkKLSAgICAgICAgICAgICYmIChSQU5EICgpICUgMjAgPT0gMCkpICYmIChqdXN0Q2hhbmdlZCA8IDApKSB7Ci0gICAgICBtb2RlID0gKFJBTkQgKCkgJSAzKSA/IE1PRF9GRVUgOiBNT0RfTUVSOwotICAgICAganVzdENoYW5nZWQgPSAyNTA7Ci0gICAgfQotICB9IGVsc2UgaWYgKG1vZGUgPT0gTU9EX0ZFVSkgewotCi0gICAgY29sW0JMRVVdICs9IHZbQkxFVV07Ci0gICAgaWYgKGNvbFtCTEVVXSA+IDY0KSB7Ci0gICAgICBjb2xbQkxFVV0gPSA2NDsKLSAgICAgIHZbQkxFVV0gPSAtKFJBTkQgKCkgJSA0KSAtIDE7Ci0gICAgfQotICAgIGlmIChjb2xbQkxFVV0gPCAwKSB7Ci0gICAgICBjb2xbQkxFVV0gPSAwOwotICAgICAgdltCTEVVXSA9IChSQU5EICgpICUgNCkgKyAxOwotICAgIH0KLQotICAgIGNvbFtWRVJUXSArPSB2W1ZFUlRdOwotICAgIGlmIChjb2xbVkVSVF0gPiAyMDApIHsKLSAgICAgIGNvbFtWRVJUXSA9IDIwMDsKLSAgICAgIHZbVkVSVF0gPSAtKFJBTkQgKCkgJSAzKSAtIDI7Ci0gICAgfQotICAgIGlmIChjb2xbVkVSVF0gPiBjb2xbUk9VR0VdICsgMjApIHsKLSAgICAgIGNvbFtWRVJUXSA9IGNvbFtST1VHRV0gKyAyMDsKLSAgICAgIHZbVkVSVF0gPSAtKFJBTkQgKCkgJSAzKSAtIDI7Ci0gICAgICB2W1JPVUdFXSA9IChSQU5EICgpICUgNCkgKyAxOwotICAgICAgdltCTEVVXSA9IChSQU5EICgpICUgNCkgKyAxOwotICAgIH0KLSAgICBpZiAoY29sW1ZFUlRdIDwgMCkgewotICAgICAgY29sW1ZFUlRdID0gMDsKLSAgICAgIHZbVkVSVF0gPSAoUkFORCAoKSAlIDMpICsgMjsKLSAgICB9Ci0KLSAgICBjb2xbUk9VR0VdICs9IHZbUk9VR0VdOwotICAgIGlmIChjb2xbUk9VR0VdID4gMjU1KSB7Ci0gICAgICBjb2xbUk9VR0VdID0gMjU1OwotICAgICAgdltST1VHRV0gPSAtKFJBTkQgKCkgJSA0KSAtIDE7Ci0gICAgfQotICAgIGlmIChjb2xbUk9VR0VdID4gY29sW1ZFUlRdICsgNDApIHsKLSAgICAgIGNvbFtST1VHRV0gPSBjb2xbVkVSVF0gKyA0MDsKLSAgICAgIHZbUk9VR0VdID0gLShSQU5EICgpICUgNCkgLSAxOwotICAgIH0KLSAgICBpZiAoY29sW1JPVUdFXSA8IDApIHsKLSAgICAgIGNvbFtST1VHRV0gPSAwOwotICAgICAgdltST1VHRV0gPSAoUkFORCAoKSAlIDQpICsgMTsKLSAgICB9Ci0KLSAgICBjb2xbQUxQSEFdICs9IHZbQUxQSEFdOwotICAgIGlmIChjb2xbQUxQSEFdID4gMCkgewotICAgICAgY29sW0FMUEhBXSA9IDA7Ci0gICAgICB2W0FMUEhBXSA9IC0oUkFORCAoKSAlIDQpIC0gMTsKLSAgICB9Ci0gICAgaWYgKGNvbFtBTFBIQV0gPCAwKSB7Ci0gICAgICBjb2xbQUxQSEFdID0gMDsKLSAgICAgIHZbQUxQSEFdID0gKFJBTkQgKCkgJSA0KSArIDE7Ci0gICAgfQotCi0gICAgaWYgKCgoY29sW1JPVUdFXSA8IDY0KSAmJiAoY29sW1ZFUlRdID4gMzIpICYmIChjb2xbVkVSVF0gPCBjb2xbQkxFVV0pCi0gICAgICAgICAgICAmJiAoY29sW0JMRVVdID4gMzIpCi0gICAgICAgICAgICAmJiAoUkFORCAoKSAlIDIwID09IDApKSAmJiAoanVzdENoYW5nZWQgPCAwKSkgewotICAgICAgbW9kZSA9IChSQU5EICgpICUgMikgPyBNT0RfTUVSIDogTU9EX01FUlZFUjsKLSAgICAgIGp1c3RDaGFuZ2VkID0gMjUwOwotICAgIH0KLSAgfQotCi0gIGNvdWxldXIgPSAoY29sW0FMUEhBXSA8PCAoQUxQSEEgKiA4KSkKLSAgICAgIHwgKGNvbFtCTEVVXSA8PCAoQkxFVSAqIDgpKQotICAgICAgfCAoY29sW1ZFUlRdIDw8IChWRVJUICogOCkpCi0gICAgICB8IChjb2xbUk9VR0VdIDw8IChST1VHRSAqIDgpKTsKLX0KLQotLyoqIFZJU1VBTF9GWCBXUkFQUEVSIEZPUiBJRlMgKi8KLQotc3RhdGljIHZvaWQKLWlmc192ZnhfYXBwbHkgKFZpc3VhbEZYICogX3RoaXMsIFBpeGVsICogc3JjLCBQaXhlbCAqIGRlc3QsCi0gICAgUGx1Z2luSW5mbyAqIGdvb21JbmZvKQotewotCi0gIElmc0RhdGEgKmRhdGEgPSAoSWZzRGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLQotICBpZiAoIWRhdGEtPmluaXRhbGl6ZWQpIHsKLSAgICBkYXRhLT5pbml0YWxpemVkID0gMTsKLSAgICBpbml0X2lmcyAoZ29vbUluZm8sIGRhdGEpOwotICB9Ci0gIGlmc191cGRhdGUgKGdvb21JbmZvLCBkZXN0LCBzcmMsIGdvb21JbmZvLT51cGRhdGUuaWZzX2luY3IsIGRhdGEpOwotICAvKlRPRE86IHRyb3V2ZXIgbWVpbGxldXIgc29sdWNlIHBvdXIgaW5jcmVtZW50IChtZXR0cmUgbGUgY29kZSBkZSBnZXN0aW9uIGRlIGwnaWZzIGRhbnMgY2UgZmljaGllcjogaWZzX3ZmeF9hcHBseSkgKi8KLX0KLQotc3RhdGljIHZvaWQKLWlmc192ZnhfaW5pdCAoVmlzdWFsRlggKiBfdGhpcywgUGx1Z2luSW5mbyAqIGluZm8pCi17Ci0KLSAgSWZzRGF0YSAqZGF0YSA9IChJZnNEYXRhICopIG1hbGxvYyAoc2l6ZW9mIChJZnNEYXRhKSk7Ci0KLSAgZGF0YS0+Um9vdCA9IChGUkFDVEFMICopIE5VTEw7Ci0gIGRhdGEtPmluaXRhbGl6ZWQgPSAwOwotICBfdGhpcy0+ZnhfZGF0YSA9IGRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pZnNfdmZ4X2ZyZWUgKFZpc3VhbEZYICogX3RoaXMpCi17Ci0gIElmc0RhdGEgKmRhdGEgPSAoSWZzRGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLQotICByZWxlYXNlX2lmcyAoZGF0YSk7Ci0gIGZyZWUgKGRhdGEpOwotfQotCi12b2lkCi1pZnNfdmlzdWFsZnhfY3JlYXRlIChWaXN1YWxGWCAqIHZmeCkKLXsKLQotICB2ZngtPmluaXQgPSBpZnNfdmZ4X2luaXQ7Ci0gIHZmeC0+ZnJlZSA9IGlmc192ZnhfZnJlZTsKLSAgdmZ4LT5hcHBseSA9IGlmc192ZnhfYXBwbHk7Ci0gIHZmeC0+ZnhfZGF0YSA9IE5VTEw7Ci0gIHZmeC0+cGFyYW1zID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nb29tL2lmcy5oIGIvZ3N0L2dvb20vaWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMDM3NzMuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vaWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5NyBieSBNYXNzaW1pbm8gUGFzY2FsIDxQYXNjYWwuTWFzc2ltb25AZW5zLmZyPgotICoKLSAqIGlmcy5oOiBtb2RpZmllZCBpdGVyYXRlZCBmdW5jdGlvbnMgc3lzdGVtIGZvciBnb29tLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotICogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotICogYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi0gKiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCi0gKgotICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIEFTIElTIHdpdGggbm8gd2FycmFudGllcyBvZiBhbnkga2luZC4gIFRoZSBhdXRob3IKLSAqIHNoYWxsIGhhdmUgbm8gbGlhYmlsaXR5IHdpdGggcmVzcGVjdCB0byB0aGUgaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodHMsCi0gKiB0cmFkZSBzZWNyZXRzIG9yIGFueSBwYXRlbnRzIGJ5IHRoaXMgZmlsZSBvciBhbnkgcGFydCB0aGVyZW9mLiAgSW4gbm8KLSAqIGV2ZW50IHdpbGwgdGhlIGF1dGhvciBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUgb3IgcHJvZml0cyBvcgotICogb3RoZXIgc3BlY2lhbCwgaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcy4KLSAqCi0gKiBJZiB0aGlzIG1vZGUgaXMgd2VpcmQgYW5kIHlvdSBoYXZlIGFuIG9sZCBNZXRyb1ggc2VydmVyLCBpdCBpcyBidWdneS4KLSAqIFRoZXJlIGlzIGEgZnJlZSBTdVNFLWVuaGFuY2VkIE1ldHJvWCBYIHNlcnZlciB0aGF0IGlzIGZpbmUuCi0gKgotICogV2hlbiBzaG93biBpZnMsIERpYW5hIFJvc2UgKDQgeWVhcnMgb2xkKSBzYWlkLCAiSXQgbG9va3MgbGlrZSBkYW5jaW5nLiIKLSAqCi0gKiBSZXZpc2lvbiBIaXN0b3J5OgotICogMTMtRGVjLTIwMDM6IEFkZGVkIHNvbWUgZ29vbSBzcGVjaWZpYyBzdHVmZnMgKHRvIG1ha2UgaWZzIGEgVmlzdWFsRlgpLgotICogMTEtQXByLTIwMDI6IGpla29AaW9zLXNvZnR3YXJlLmNvbTogTWFrZSBpZnMuYyBzeXN0ZW0taW5kZW5kYW50LiAoaWZzLmggYWRkZWQpCi0gKiAwMS1Ob3YtMjAwMDogQWxsb2NhdGlvbiBjaGVja3MKLSAqIDEwLU1heS0xOTk3OiBqd3pAand6Lm9yZzogdHVybmVkIGludG8gYSBzdGFuZGFsb25lIHByb2dyYW0uCi0gKiAgICAgICAgICAgICAgTWFkZSBpdCByZW5kZXIgaW50byBhbiBvZmZzY3JlZW4gYml0bWFwIGFuZCB0aGVuIGNvcHkKLSAqICAgICAgICAgICAgICB0aGF0IG9udG8gdGhlIHNjcmVlbiwgdG8gcmVkdWNlIGZsaWNrZXIuCi0gKi8KLQotI2lmbmRlZiBJRlNfSAotI2RlZmluZSBJRlNfSAotCi0jaW5jbHVkZSAiZ29vbV9jb25maWcuaCIKLSNpbmNsdWRlICJnb29tX2dyYXBoaWMuaCIKLSNpbmNsdWRlICJnb29tX3BsdWdpbl9pbmZvLmgiCi0jaW5jbHVkZSAiZ29vbV92aXN1YWxfZnguaCIKLQotdm9pZCBpZnNfdmlzdWFsZnhfY3JlYXRlKFZpc3VhbEZYICp2ZngpOwotCi0vKiBpbml0IGlmcyBmb3IgYSAod2lkdGgpeChoZWlnaHQpIG91dHB1dC4gKiAvCi12b2lkIGluaXRfaWZzIChQbHVnaW5JbmZvICpnb29tSW5mbywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotLyAqIGRyYXcgYW4gaWZzIG9uIHRoZSBidWZmZXIgKHdoaWNoIHNpemUgaXMgd2lkdGggKiBoZWlnaHQpCi0gICBpbmNyZW1lbnQgbWVhbnMgdGhhdCB3ZSBkcmF3IDEvaW5jcmVtZW50IG9mIHRoZSBpZnMncyBwb2ludHMgKiAvCi12b2lkIGlmc191cGRhdGUgKFBsdWdpbkluZm8gKmdvb21JbmZvLCBQaXhlbCAqIGJ1ZmZlciwgUGl4ZWwgKiBiYWNrLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpbmNyZW1lbnQpOwotCi0vICogZnJlZSBhbGwgaWZzJ3MgZGF0YS4gKiAvCi12b2lkIHJlbGVhc2VfaWZzICh2b2lkKTsKLSovCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9saW5lcy5jIGIvZ3N0L2dvb20vbGluZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjMWVkYS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9saW5lcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImxpbmVzLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiZ29vbV90b29scy5oIgotI2luY2x1ZGUgImRyYXdtZXRob2RzLmgiCi0jaW5jbHVkZSAiZ29vbV9wbHVnaW5faW5mby5oIgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKLWxpZ2h0ZW4gKHVuc2lnbmVkIGNoYXIgdmFsdWUsIGZsb2F0IHBvd2VyKQotewotICBpbnQgdmFsID0gdmFsdWU7Ci0gIGZsb2F0IHQgPSAoZmxvYXQpIHZhbCAqIGxvZzEwIChwb3dlcikgLyAyLjA7Ci0KLSAgaWYgKHQgPiAwKSB7Ci0gICAgdmFsID0gKGludCkgdDsgICAgICAgICAgICAgIC8qICgzMi4wZiAqIGxvZyAodCkpOyAqLwotICAgIGlmICh2YWwgPiAyNTUpCi0gICAgICB2YWwgPSAyNTU7Ci0gICAgaWYgKHZhbCA8IDApCi0gICAgICB2YWwgPSAwOwotICAgIHJldHVybiB2YWw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWxpZ2h0ZW5jb2xvciAoZ3VpbnQzMiAqIGNvbCwgZmxvYXQgcG93ZXIpCi17Ci0gIHVuc2lnbmVkIGNoYXIgKmNvbG9yOwotCi0gIGNvbG9yID0gKHVuc2lnbmVkIGNoYXIgKikgY29sOwotICAqY29sb3IgPSBsaWdodGVuICgqY29sb3IsIHBvd2VyKTsKLSAgY29sb3IrKzsKLSAgKmNvbG9yID0gbGlnaHRlbiAoKmNvbG9yLCBwb3dlcik7Ci0gIGNvbG9yKys7Ci0gICpjb2xvciA9IGxpZ2h0ZW4gKCpjb2xvciwgcG93ZXIpOwotICBjb2xvcisrOwotICAqY29sb3IgPSBsaWdodGVuICgqY29sb3IsIHBvd2VyKTsKLX0KLQotCi0KLXN0YXRpYyB2b2lkCi1nZW5saW5lIChpbnQgaWQsIGZsb2F0IHBhcmFtLCBHTVVuaXRQb2ludGVyICogbCwgaW50IHJ4LCBpbnQgcnkpCi17Ci0gIGludCBpOwotCi0gIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIEdNTF9ITElORToKLSAgICAgIGZvciAoaSA9IDA7IGkgPCA1MTI7IGkrKykgewotICAgICAgICBsW2ldLnggPSAoKGZsb2F0KSBpICogcngpIC8gNTEyLjBmOwotICAgICAgICBsW2ldLnkgPSBwYXJhbTsKLSAgICAgICAgbFtpXS5hbmdsZSA9IEdfUEkgLyAyLjBmOwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIGNhc2UgR01MX1ZMSU5FOgotICAgICAgZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKSB7Ci0gICAgICAgIGxbaV0ueSA9ICgoZmxvYXQpIGkgKiByeSkgLyA1MTIuMGY7Ci0gICAgICAgIGxbaV0ueCA9IHBhcmFtOwotICAgICAgICBsW2ldLmFuZ2xlID0gMC4wZjsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICBjYXNlIEdNTF9DSVJDTEU6Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLSAgICAgICAgZmxvYXQgY29zYSwgc2luYTsKLQotICAgICAgICBsW2ldLmFuZ2xlID0gMi4wZiAqIEdfUEkgKiAoZmxvYXQpIGkgLyA1MTIuMGY7Ci0gICAgICAgIGNvc2EgPSBwYXJhbSAqIGNvcyAobFtpXS5hbmdsZSk7Ci0gICAgICAgIHNpbmEgPSBwYXJhbSAqIHNpbiAobFtpXS5hbmdsZSk7Ci0gICAgICAgIGxbaV0ueCA9ICgoZmxvYXQpIHJ4IC8gMi4wZikgKyBjb3NhOwotICAgICAgICBsW2ldLnkgPSAoZmxvYXQpIHJ5IC8gMi4wZiArIHNpbmE7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50MzIKLWdldGNvdWxldXIgKGludCBtb2RlKQotewotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdNTF9SRUQ6Ci0gICAgICByZXR1cm4gKDIzMCA8PCAoUk9VR0UgKiA4KSkgfCAoMTIwIDw8IChWRVJUICogOCkpIHwgKDE4IDw8IChCTEVVICogOCkpOwotICAgIGNhc2UgR01MX09SQU5HRV9KOgotICAgICAgcmV0dXJuICgxMjAgPDwgKFZFUlQgKiA4KSkgfCAoMjUyIDw8IChST1VHRSAqIDgpKSB8ICgxOCA8PCAoQkxFVSAqIDgpKTsKLSAgICBjYXNlIEdNTF9PUkFOR0VfVjoKLSAgICAgIHJldHVybiAoMTYwIDw8IChWRVJUICogOCkpIHwgKDIzNiA8PCAoUk9VR0UgKiA4KSkgfCAoNDAgPDwgKEJMRVUgKiA4KSk7Ci0gICAgY2FzZSBHTUxfQkxFVUJMQU5DOgotICAgICAgcmV0dXJuICg0MCA8PCAoQkxFVSAqIDgpKSB8ICgyMjAgPDwgKFJPVUdFICogOCkpIHwgKDE0MCA8PCAoVkVSVCAqIDgpKTsKLSAgICBjYXNlIEdNTF9WRVJUOgotICAgICAgcmV0dXJuICgyMDAgPDwgKFZFUlQgKiA4KSkgfCAoODAgPDwgKFJPVUdFICogOCkpIHwgKDE4IDw8IChCTEVVICogOCkpOwotICAgIGNhc2UgR01MX0JMRVU6Ci0gICAgICByZXR1cm4gKDI1MCA8PCAoQkxFVSAqIDgpKSB8ICgzMCA8PCAoVkVSVCAqIDgpKSB8ICg4MCA8PCAoUk9VR0UgKiA4KSk7Ci0gICAgY2FzZSBHTUxfQkxBQ0s6Ci0gICAgICByZXR1cm4gKDE2IDw8IChCTEVVICogOCkpIHwgKDE2IDw8IChWRVJUICogOCkpIHwgKDE2IDw8IChST1VHRSAqIDgpKTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotdm9pZAotZ29vbV9saW5lc19zZXRfcmVzIChHTUxpbmUgKiBnbWwsIGludCByeCwgaW50IHJ5KQotewotICBpZiAoZ21sICE9IE5VTEwpIHsKLSAgICBnbWwtPnNjcmVlblggPSByeDsKLSAgICBnbWwtPnNjcmVlblkgPSByeTsKLQotICAgIGdlbmxpbmUgKGdtbC0+SURkZXN0LCBnbWwtPnBhcmFtLCBnbWwtPnBvaW50czIsIHJ4LCByeSk7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ29vbV9saW5lc19tb3ZlIChHTUxpbmUgKiBsKQotewotICBpbnQgaTsKLSAgdW5zaWduZWQgY2hhciAqYzEsICpjMjsKLQotICBmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLSAgICBsLT5wb2ludHNbaV0ueCA9IChsLT5wb2ludHMyW2ldLnggKyAzOS4wZiAqIGwtPnBvaW50c1tpXS54KSAvIDQwLjBmOwotICAgIGwtPnBvaW50c1tpXS55ID0gKGwtPnBvaW50czJbaV0ueSArIDM5LjBmICogbC0+cG9pbnRzW2ldLnkpIC8gNDAuMGY7Ci0gICAgbC0+cG9pbnRzW2ldLmFuZ2xlID0KLSAgICAgICAgKGwtPnBvaW50czJbaV0uYW5nbGUgKyAzOS4wZiAqIGwtPnBvaW50c1tpXS5hbmdsZSkgLyA0MC4wZjsKLSAgfQotCi0gIGMxID0gKHVuc2lnbmVkIGNoYXIgKikgJmwtPmNvbG9yOwotICBjMiA9ICh1bnNpZ25lZCBjaGFyICopICZsLT5jb2xvcjI7Ci0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICBpbnQgY2MxLCBjYzI7Ci0KLSAgICBjYzEgPSAqYzE7Ci0gICAgY2MyID0gKmMyOwotICAgICpjMSA9ICh1bnNpZ25lZCBjaGFyKSAoKGNjMSAqIDYzICsgY2MyKSA+PiA2KTsKLSAgICArK2MxOwotICAgICsrYzI7Ci0gIH0KLQotICBsLT5wb3dlciArPSBsLT5wb3dpbmM7Ci0gIGlmIChsLT5wb3dlciA8IDEuMWYpIHsKLSAgICBsLT5wb3dlciA9IDEuMWY7Ci0gICAgbC0+cG93aW5jID0gKGZsb2F0KSAoZ29vbV9pcmFuZCAobC0+Z29vbUluZm8tPmdSYW5kb20sIDIwKSArIDEwKSAvIDMwMC4wZjsKLSAgfQotICBpZiAobC0+cG93ZXIgPiAxNy41ZikgewotICAgIGwtPnBvd2VyID0gMTcuNWY7Ci0gICAgbC0+cG93aW5jID0gLShmbG9hdCkgKGdvb21faXJhbmQgKGwtPmdvb21JbmZvLT5nUmFuZG9tLCAyMCkgKyAxMCkgLyAzMDAuMGY7Ci0gIH0KLQotICBsLT5hbXBsaXR1ZGUgPSAoOTkuMGYgKiBsLT5hbXBsaXR1ZGUgKyBsLT5hbXBsaXR1ZGVGKSAvIDEwMC4wZjsKLX0KLQotdm9pZAotZ29vbV9saW5lc19zd2l0Y2hfdG8gKEdNTGluZSAqIGdtbCwgaW50IElEZGVzdCwKLSAgICBmbG9hdCBwYXJhbSwgZmxvYXQgYW1wbGl0dWRlLCBpbnQgY29sKQotewotICBnZW5saW5lIChJRGRlc3QsIHBhcmFtLCBnbWwtPnBvaW50czIsIGdtbC0+c2NyZWVuWCwgZ21sLT5zY3JlZW5ZKTsKLSAgZ21sLT5JRGRlc3QgPSBJRGRlc3Q7Ci0gIGdtbC0+cGFyYW0gPSBwYXJhbTsKLSAgZ21sLT5hbXBsaXR1ZGVGID0gYW1wbGl0dWRlOwotICBnbWwtPmNvbG9yMiA9IGdldGNvdWxldXIgKGNvbCk7Ci19Ci0KLUdNTGluZSAqCi1nb29tX2xpbmVzX2luaXQgKFBsdWdpbkluZm8gKiBnb29tSW5mbywgaW50IHJ4LCBpbnQgcnksCi0gICAgaW50IElEc3JjLCBmbG9hdCBwYXJhbVMsIGludCBjb3VsUywgaW50IElEZGVzdCwgZmxvYXQgcGFyYW1ELCBpbnQgY291bEQpCi17Ci0gIEdNTGluZSAqbCA9IChHTUxpbmUgKikgbWFsbG9jIChzaXplb2YgKEdNTGluZSkpOwotCi0gIGwtPmdvb21JbmZvID0gZ29vbUluZm87Ci0KLSAgbC0+cG9pbnRzID0gKEdNVW5pdFBvaW50ZXIgKikgbWFsbG9jICg1MTIgKiBzaXplb2YgKEdNVW5pdFBvaW50ZXIpKTsKLSAgbC0+cG9pbnRzMiA9IChHTVVuaXRQb2ludGVyICopIG1hbGxvYyAoNTEyICogc2l6ZW9mIChHTVVuaXRQb2ludGVyKSk7Ci0gIGwtPm5iUG9pbnRzID0gNTEyOwotCi0gIGwtPklEZGVzdCA9IElEZGVzdDsKLSAgbC0+cGFyYW0gPSBwYXJhbUQ7Ci0KLSAgbC0+YW1wbGl0dWRlID0gbC0+YW1wbGl0dWRlRiA9IDEuMGY7Ci0KLSAgZ2VubGluZSAoSURzcmMsIHBhcmFtUywgbC0+cG9pbnRzLCByeCwgcnkpOwotICBnZW5saW5lIChJRGRlc3QsIHBhcmFtRCwgbC0+cG9pbnRzMiwgcngsIHJ5KTsKLQotICBsLT5jb2xvciA9IGdldGNvdWxldXIgKGNvdWxTKTsKLSAgbC0+Y29sb3IyID0gZ2V0Y291bGV1ciAoY291bEQpOwotCi0gIGwtPnNjcmVlblggPSByeDsKLSAgbC0+c2NyZWVuWSA9IHJ5OwotCi0gIGwtPnBvd2VyID0gMC4wZjsKLSAgbC0+cG93aW5jID0gMC4wMWY7Ci0KLSAgZ29vbV9saW5lc19zd2l0Y2hfdG8gKGwsIElEZGVzdCwgcGFyYW1ELCAxLjBmLCBjb3VsRCk7Ci0KLSAgcmV0dXJuIGw7Ci19Ci0KLXZvaWQKLWdvb21fbGluZXNfZnJlZSAoR01MaW5lICoqIGwpCi17Ci0gIGZyZWUgKCgqbCktPnBvaW50czIpOwotICBmcmVlICgoKmwpLT5wb2ludHMpOwotICBmcmVlICgqbCk7Ci0gIGwgPSBOVUxMOwotfQotCi12b2lkCi1nb29tX2xpbmVzX2RyYXcgKFBsdWdpbkluZm8gKiBwbHVnLCBHTUxpbmUgKiBsaW5lLCBnaW50MTYgZGF0YVs1MTJdLCBQaXhlbCAqIHApCi17Ci0gIGlmIChsaW5lICE9IE5VTEwpIHsKLSAgICBpbnQgaSwgeDEsIHkxOwotICAgIGd1aW50MzIgY29sb3IgPSBsaW5lLT5jb2xvcjsKLSAgICBHTVVuaXRQb2ludGVyICpwdCA9ICYobGluZS0+cG9pbnRzWzBdKTsKLQotICAgIGZsb2F0IGNvc2EgPSBjb3MgKHB0LT5hbmdsZSkgLyAxMDAwLjBmOwotICAgIGZsb2F0IHNpbmEgPSBzaW4gKHB0LT5hbmdsZSkgLyAxMDAwLjBmOwotCi0gICAgbGlnaHRlbmNvbG9yICgmY29sb3IsIGxpbmUtPnBvd2VyKTsKLQotICAgIHgxID0gKGludCkgKHB0LT54ICsgY29zYSAqIGxpbmUtPmFtcGxpdHVkZSAqIGRhdGFbMF0pOwotICAgIHkxID0gKGludCkgKHB0LT55ICsgc2luYSAqIGxpbmUtPmFtcGxpdHVkZSAqIGRhdGFbMF0pOwotCi0gICAgZm9yIChpID0gMTsgaSA8IDUxMjsgaSsrKSB7Ci0gICAgICBpbnQgeDIsIHkyOwotICAgICAgR01Vbml0UG9pbnRlciAqcHQgPSAmKGxpbmUtPnBvaW50c1tpXSk7Ci0KLSAgICAgIGZsb2F0IGNvc2EgPSBjb3MgKHB0LT5hbmdsZSkgLyAxMDAwLjBmOwotICAgICAgZmxvYXQgc2luYSA9IHNpbiAocHQtPmFuZ2xlKSAvIDEwMDAuMGY7Ci0KLSAgICAgIHgyID0gKGludCkgKHB0LT54ICsgY29zYSAqIGxpbmUtPmFtcGxpdHVkZSAqIGRhdGFbaV0pOwotICAgICAgeTIgPSAoaW50KSAocHQtPnkgKyBzaW5hICogbGluZS0+YW1wbGl0dWRlICogZGF0YVtpXSk7Ci0KLSAgICAgIHBsdWctPm1ldGhvZHMuZHJhd19saW5lIChwLCB4MSwgeTEsIHgyLCB5MiwgY29sb3IsIGxpbmUtPnNjcmVlblgsCi0gICAgICAgICAgbGluZS0+c2NyZWVuWSk7Ci0KLSAgICAgIHgxID0geDI7Ci0gICAgICB5MSA9IHkyOwotICAgIH0KLSAgICBnb29tX2xpbmVzX21vdmUgKGxpbmUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZ29vbS9saW5lcy5oIGIvZ3N0L2dvb20vbGluZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNkNTBkOC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9MSU5FU19ICi0jZGVmaW5lIF9MSU5FU19ICi0KLSNpbmNsdWRlICJnb29tX3R5cGVkZWZzLmgiCi0jaW5jbHVkZSAiZ29vbV9ncmFwaGljLmgiCi0jaW5jbHVkZSAiZ29vbV9jb25maWcuaCIKLQotc3RydWN0IF9HTVVOSVRQT0lOVEVSCi17Ci0JZmxvYXQgICB4OwotCWZsb2F0ICAgeTsKLQlmbG9hdCAgIGFuZ2xlOwotfTsKLQotLyogdGFibGVhdSBkZSBwb2ludHMgKi8KLXN0cnVjdCBfR01MSU5FCi17Ci0KLQlHTVVuaXRQb2ludGVyICpwb2ludHM7Ci0JR01Vbml0UG9pbnRlciAqcG9pbnRzMjsKLQlpbnQgICAgIElEZGVzdDsKLQlmbG9hdCAgIHBhcmFtOwotCWZsb2F0ICAgYW1wbGl0dWRlRjsKLQlmbG9hdCAgIGFtcGxpdHVkZTsKLQotCWludCAgICAgbmJQb2ludHM7Ci0JZ3VpbnQzMiBjb2xvcjsgICAgIC8qIHBvdXIgbCdpbnN0YW50IGplIHN0b2NrZSBsYSBjb3VsZXVyIGEgdGVybWUsIG9uIHN0b2NrZXJhIGxlIG1vZGUgY291bGV1ciBldCBsJ29uIGFuaW1lcmEgKi8KLQlndWludDMyIGNvbG9yMjsKLQotCWludCAgICAgc2NyZWVuWDsKLQlpbnQgICAgIHNjcmVlblk7Ci0KLQlmbG9hdCAgIHBvd2VyOwotCWZsb2F0ICAgcG93aW5jOwotCi0JUGx1Z2luSW5mbyAqZ29vbUluZm87Ci19OwotCi0vKiBsZXMgSUQgcG9zc2libGVzICovCi0KLSNkZWZpbmUgR01MX0NJUkNMRSAwCi0vKiAocGFyYW0gPSByYWRpdXMpICovCi0KLSNkZWZpbmUgR01MX0hMSU5FIDEKLS8qIChwYXJhbSA9IHkpICovCi0KLSNkZWZpbmUgR01MX1ZMSU5FIDIKLS8qIChwYXJhbSA9IHgpICovCi0KLS8qIGxlcyBtb2RlcyBjb3VsZXVyIHBvc3NpYmxlIChzaSB0dSBtZXRzIHVuIGF1dHJlIGMnZXN0IG5vaXIpICovCi0KLSNkZWZpbmUgR01MX0JMRVVCTEFOQyAwCi0jZGVmaW5lIEdNTF9SRUQgMQotI2RlZmluZSBHTUxfT1JBTkdFX1YgMgotI2RlZmluZSBHTUxfT1JBTkdFX0ogMwotI2RlZmluZSBHTUxfVkVSVCA0Ci0jZGVmaW5lIEdNTF9CTEVVIDUKLSNkZWZpbmUgR01MX0JMQUNLIDYKLQotLyogY29uc3RydWl0IHVuIGVmZmV0IGRlIGxpbmUgKHVuZSBsaWduZSBob3JpdG9udGFsZSBwb3VyIGNvbW1lbmNlcikgKi8KLUdNTGluZSAqZ29vbV9saW5lc19pbml0IChQbHVnaW5JbmZvICpnb29tSW5mbywgaW50IHJ4LCBpbnQgcnksCi0JCQkgaW50IElEc3JjLCBmbG9hdCBwYXJhbVMsIGludCBtb2RlQ291bFNyYywKLQkJCSBpbnQgSURkZXN0LCBmbG9hdCBwYXJhbUQsIGludCBtb2RlQ291bERlc3QpOwotCi12b2lkICAgIGdvb21fbGluZXNfc3dpdGNoX3RvIChHTUxpbmUgKiBnbWwsIGludCBJRGRlc3QsIGZsb2F0IHBhcmFtLAotCQkJZmxvYXQgYW1wbGl0dWRlLAotCQkJaW50IG1vZGVDb3VsKTsKLQotdm9pZCAgICBnb29tX2xpbmVzX3NldF9yZXMgKEdNTGluZSAqIGdtbCwgaW50IHJ4LCBpbnQgcnkpOwotCi12b2lkICAgIGdvb21fbGluZXNfZnJlZSAoR01MaW5lICoqIGdtbCk7Ci0KLXZvaWQgICAgZ29vbV9saW5lc19kcmF3IChQbHVnaW5JbmZvICpwbHVnSW5mbywgR01MaW5lICogZ21sLCBnaW50MTYgZGF0YVs1MTJdLCBQaXhlbCAqcCk7Ci0KLSNlbmRpZiAvKiBfTElORVNfSCAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vbWF0aHRvb2xzLmMgYi9nc3QvZ29vbS9tYXRodG9vbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQxOTBiZi4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9tYXRodG9vbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IEplYW4tQ2hyaXN0b3BoZSBIb2VsdCA8amVrb0BmcmVlLmZyPgotICoKLSAqIGdvb21fY29yZS5jOkNvbnRhaW5zIHRoZSBjb3JlIG9mIGdvb20ncyB3b3JrLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJtYXRodG9vbHMuaCIKLQotZmxvYXQgc2luMjU2WzI1Nl0gPSB7Ci0gIDAsIDAuMDI0NTQxMiwgMC4wNDkwNjc3LCAwLjA3MzU2NDYsIDAuMDk4MDE3MSwgMC4xMjI0MTEsIDAuMTQ2NzMsIDAuMTcwOTYyLAotICAwLjE5NTA5LCAwLjIxOTEwMSwgMC4yNDI5OCwgMC4yNjY3MTMsIDAuMjkwMjg1LCAwLjMxMzY4MiwgMC4zMzY4OSwKLSAgMC4zNTk4OTUsIDAuMzgyNjgzLCAwLjQwNTI0MSwgMC40Mjc1NTUsIDAuNDQ5NjExLCAwLjQ3MTM5NywgMC40OTI4OTgsCi0gIDAuNTE0MTAzLCAwLjUzNDk5OCwgMC41NTU1NywgMC41NzU4MDgsIDAuNTk1Njk5LCAwLjYxNTIzMiwgMC42MzQzOTMsCi0gIDAuNjUzMTczLCAwLjY3MTU1OSwgMC42ODk1NDEsIDAuNzA3MTA3LCAwLjcyNDI0NywgMC43NDA5NTEsIDAuNzU3MjA5LAotICAwLjc3MzAxLCAwLjc4ODM0NiwgMC44MDMyMDgsIDAuODE3NTg1LCAwLjgzMTQ3LCAwLjg0NDg1NCwgMC44NTc3MjksCi0gIDAuODcwMDg3LCAwLjg4MTkyMSwgMC44OTMyMjQsIDAuOTAzOTg5LCAwLjkxNDIxLCAwLjkyMzg4LCAwLjkzMjk5MywKLSAgMC45NDE1NDQsIDAuOTQ5NTI4LCAwLjk1Njk0LCAwLjk2Mzc3NiwgMC45NzAwMzEsIDAuOTc1NzAyLCAwLjk4MDc4NSwKLSAgMC45ODUyNzgsIDAuOTg5MTc3LCAwLjk5MjQ4LCAwLjk5NTE4NSwgMC45OTcyOSwgMC45OTg3OTUsIDAuOTk5Njk5LCAxLAotICAwLjk5OTY5OSwgMC45OTg3OTUsIDAuOTk3MjksIDAuOTk1MTg1LCAwLjk5MjQ4LCAwLjk4OTE3NywgMC45ODUyNzgsCi0gIDAuOTgwNzg1LCAwLjk3NTcwMiwgMC45NzAwMzEsIDAuOTYzNzc2LCAwLjk1Njk0LCAwLjk0OTUyOCwgMC45NDE1NDQsCi0gIDAuOTMyOTkzLCAwLjkyMzg4LCAwLjkxNDIxLCAwLjkwMzk4OSwgMC44OTMyMjQsIDAuODgxOTIxLCAwLjg3MDA4NywKLSAgMC44NTc3MjksIDAuODQ0ODU0LCAwLjgzMTQ3LCAwLjgxNzU4NSwgMC44MDMyMDgsIDAuNzg4MzQ2LCAwLjc3MzAxLAotICAwLjc1NzIwOSwgMC43NDA5NTEsIDAuNzI0MjQ3LCAwLjcwNzEwNywgMC42ODk1NDEsIDAuNjcxNTU5LCAwLjY1MzE3MywKLSAgMC42MzQzOTMsIDAuNjE1MjMyLCAwLjU5NTY5OSwgMC41NzU4MDgsIDAuNTU1NTcsIDAuNTM0OTk4LCAwLjUxNDEwMywKLSAgMC40OTI4OTgsIDAuNDcxMzk3LCAwLjQ0OTYxMSwgMC40Mjc1NTUsIDAuNDA1MjQxLCAwLjM4MjY4MywgMC4zNTk4OTUsCi0gIDAuMzM2ODksIDAuMzEzNjgyLCAwLjI5MDI4NSwgMC4yNjY3MTMsIDAuMjQyOTgsIDAuMjE5MTAxLCAwLjE5NTA5LAotICAwLjE3MDk2MiwgMC4xNDY3MywgMC4xMjI0MTEsIDAuMDk4MDE3MSwgMC4wNzM1NjQ2LCAwLjA0OTA2NzcsIDAuMDI0NTQxMiwKLSAgMS4yMjQ2NWUtMTYsIC0wLjAyNDU0MTIsIC0wLjA0OTA2NzcsIC0wLjA3MzU2NDYsIC0wLjA5ODAxNzEsIC0wLjEyMjQxMSwKLSAgLTAuMTQ2NzMsIC0wLjE3MDk2MiwgLTAuMTk1MDksIC0wLjIxOTEwMSwgLTAuMjQyOTgsIC0wLjI2NjcxMywgLTAuMjkwMjg1LAotICAtMC4zMTM2ODIsIC0wLjMzNjg5LCAtMC4zNTk4OTUsIC0wLjM4MjY4MywgLTAuNDA1MjQxLCAtMC40Mjc1NTUsCi0gIC0wLjQ0OTYxMSwgLTAuNDcxMzk3LCAtMC40OTI4OTgsIC0wLjUxNDEwMywgLTAuNTM0OTk4LCAtMC41NTU1NywKLSAgLTAuNTc1ODA4LCAtMC41OTU2OTksIC0wLjYxNTIzMiwgLTAuNjM0MzkzLCAtMC42NTMxNzMsIC0wLjY3MTU1OSwKLSAgLTAuNjg5NTQxLCAtMC43MDcxMDcsIC0wLjcyNDI0NywgLTAuNzQwOTUxLCAtMC43NTcyMDksIC0wLjc3MzAxLAotICAtMC43ODgzNDYsIC0wLjgwMzIwOCwgLTAuODE3NTg1LCAtMC44MzE0NywgLTAuODQ0ODU0LCAtMC44NTc3MjksCi0gIC0wLjg3MDA4NywgLTAuODgxOTIxLCAtMC44OTMyMjQsIC0wLjkwMzk4OSwgLTAuOTE0MjEsIC0wLjkyMzg4LCAtMC45MzI5OTMsCi0gIC0wLjk0MTU0NCwgLTAuOTQ5NTI4LCAtMC45NTY5NCwgLTAuOTYzNzc2LCAtMC45NzAwMzEsIC0wLjk3NTcwMiwKLSAgLTAuOTgwNzg1LCAtMC45ODUyNzgsIC0wLjk4OTE3NywgLTAuOTkyNDgsIC0wLjk5NTE4NSwgLTAuOTk3MjksIC0wLjk5ODc5NSwKLSAgLTAuOTk5Njk5LCAtMSwgLTAuOTk5Njk5LCAtMC45OTg3OTUsIC0wLjk5NzI5LCAtMC45OTUxODUsIC0wLjk5MjQ4LAotICAtMC45ODkxNzcsIC0wLjk4NTI3OCwgLTAuOTgwNzg1LCAtMC45NzU3MDIsIC0wLjk3MDAzMSwgLTAuOTYzNzc2LAotICAtMC45NTY5NCwgLTAuOTQ5NTI4LCAtMC45NDE1NDQsIC0wLjkzMjk5MywgLTAuOTIzODgsIC0wLjkxNDIxLCAtMC45MDM5ODksCi0gIC0wLjg5MzIyNCwgLTAuODgxOTIxLCAtMC44NzAwODcsIC0wLjg1NzcyOSwgLTAuODQ0ODU0LCAtMC44MzE0NywKLSAgLTAuODE3NTg1LCAtMC44MDMyMDgsIC0wLjc4ODM0NiwgLTAuNzczMDEsIC0wLjc1NzIwOSwgLTAuNzQwOTUxLAotICAtMC43MjQyNDcsIC0wLjcwNzEwNywgLTAuNjg5NTQxLCAtMC42NzE1NTksIC0wLjY1MzE3MywgLTAuNjM0MzkzLAotICAtMC42MTUyMzIsIC0wLjU5NTY5OSwgLTAuNTc1ODA4LCAtMC41NTU1NywgLTAuNTM0OTk4LCAtMC41MTQxMDMsCi0gIC0wLjQ5Mjg5OCwgLTAuNDcxMzk3LCAtMC40NDk2MTEsIC0wLjQyNzU1NSwgLTAuNDA1MjQxLCAtMC4zODI2ODMsCi0gIC0wLjM1OTg5NSwgLTAuMzM2ODksIC0wLjMxMzY4MiwgLTAuMjkwMjg1LCAtMC4yNjY3MTMsIC0wLjI0Mjk4LCAtMC4yMTkxMDEsCi0gIC0wLjE5NTA5LCAtMC4xNzA5NjIsIC0wLjE0NjczLCAtMC4xMjI0MTEsIC0wLjA5ODAxNzEsIC0wLjA3MzU2NDYsCi0gIC0wLjA0OTA2NzcsIC0wLjAyNDU0MTIKLX07Ci0KLWZsb2F0IGNvczI1NlsyNTZdID0gewotICAwLCAwLjk5OTY5OSwgMC45OTg3OTUsIDAuOTk3MjksIDAuOTk1MTg1LCAwLjk5MjQ4LCAwLjk4OTE3NywgMC45ODUyNzgsCi0gIDAuOTgwNzg1LCAwLjk3NTcwMiwgMC45NzAwMzEsIDAuOTYzNzc2LCAwLjk1Njk0LCAwLjk0OTUyOCwgMC45NDE1NDQsCi0gIDAuOTMyOTkzLCAwLjkyMzg4LCAwLjkxNDIxLCAwLjkwMzk4OSwgMC44OTMyMjQsIDAuODgxOTIxLCAwLjg3MDA4NywKLSAgMC44NTc3MjksIDAuODQ0ODU0LCAwLjgzMTQ3LCAwLjgxNzU4NSwgMC44MDMyMDgsIDAuNzg4MzQ2LCAwLjc3MzAxLAotICAwLjc1NzIwOSwgMC43NDA5NTEsIDAuNzI0MjQ3LCAwLjcwNzEwNywgMC42ODk1NDEsIDAuNjcxNTU5LCAwLjY1MzE3MywKLSAgMC42MzQzOTMsIDAuNjE1MjMyLCAwLjU5NTY5OSwgMC41NzU4MDgsIDAuNTU1NTcsIDAuNTM0OTk4LCAwLjUxNDEwMywKLSAgMC40OTI4OTgsIDAuNDcxMzk3LCAwLjQ0OTYxMSwgMC40Mjc1NTUsIDAuNDA1MjQxLCAwLjM4MjY4MywgMC4zNTk4OTUsCi0gIDAuMzM2ODksIDAuMzEzNjgyLCAwLjI5MDI4NSwgMC4yNjY3MTMsIDAuMjQyOTgsIDAuMjE5MTAxLCAwLjE5NTA5LAotICAwLjE3MDk2MiwgMC4xNDY3MywgMC4xMjI0MTEsIDAuMDk4MDE3MSwgMC4wNzM1NjQ2LCAwLjA0OTA2NzcsIDAuMDI0NTQxMiwKLSAgNi4xMjMyM2UtMTcsIC0wLjAyNDU0MTIsIC0wLjA0OTA2NzcsIC0wLjA3MzU2NDYsIC0wLjA5ODAxNzEsIC0wLjEyMjQxMSwKLSAgLTAuMTQ2NzMsIC0wLjE3MDk2MiwgLTAuMTk1MDksIC0wLjIxOTEwMSwgLTAuMjQyOTgsIC0wLjI2NjcxMywgLTAuMjkwMjg1LAotICAtMC4zMTM2ODIsIC0wLjMzNjg5LCAtMC4zNTk4OTUsIC0wLjM4MjY4MywgLTAuNDA1MjQxLCAtMC40Mjc1NTUsCi0gIC0wLjQ0OTYxMSwgLTAuNDcxMzk3LCAtMC40OTI4OTgsIC0wLjUxNDEwMywgLTAuNTM0OTk4LCAtMC41NTU1NywKLSAgLTAuNTc1ODA4LCAtMC41OTU2OTksIC0wLjYxNTIzMiwgLTAuNjM0MzkzLCAtMC42NTMxNzMsIC0wLjY3MTU1OSwKLSAgLTAuNjg5NTQxLCAtMC43MDcxMDcsIC0wLjcyNDI0NywgLTAuNzQwOTUxLCAtMC43NTcyMDksIC0wLjc3MzAxLAotICAtMC43ODgzNDYsIC0wLjgwMzIwOCwgLTAuODE3NTg1LCAtMC44MzE0NywgLTAuODQ0ODU0LCAtMC44NTc3MjksCi0gIC0wLjg3MDA4NywgLTAuODgxOTIxLCAtMC44OTMyMjQsIC0wLjkwMzk4OSwgLTAuOTE0MjEsIC0wLjkyMzg4LCAtMC45MzI5OTMsCi0gIC0wLjk0MTU0NCwgLTAuOTQ5NTI4LCAtMC45NTY5NCwgLTAuOTYzNzc2LCAtMC45NzAwMzEsIC0wLjk3NTcwMiwKLSAgLTAuOTgwNzg1LCAtMC45ODUyNzgsIC0wLjk4OTE3NywgLTAuOTkyNDgsIC0wLjk5NTE4NSwgLTAuOTk3MjksIC0wLjk5ODc5NSwKLSAgLTAuOTk5Njk5LCAtMSwgLTAuOTk5Njk5LCAtMC45OTg3OTUsIC0wLjk5NzI5LCAtMC45OTUxODUsIC0wLjk5MjQ4LAotICAtMC45ODkxNzcsIC0wLjk4NTI3OCwgLTAuOTgwNzg1LCAtMC45NzU3MDIsIC0wLjk3MDAzMSwgLTAuOTYzNzc2LAotICAtMC45NTY5NCwgLTAuOTQ5NTI4LCAtMC45NDE1NDQsIC0wLjkzMjk5MywgLTAuOTIzODgsIC0wLjkxNDIxLCAtMC45MDM5ODksCi0gIC0wLjg5MzIyNCwgLTAuODgxOTIxLCAtMC44NzAwODcsIC0wLjg1NzcyOSwgLTAuODQ0ODU0LCAtMC44MzE0NywKLSAgLTAuODE3NTg1LCAtMC44MDMyMDgsIC0wLjc4ODM0NiwgLTAuNzczMDEsIC0wLjc1NzIwOSwgLTAuNzQwOTUxLAotICAtMC43MjQyNDcsIC0wLjcwNzEwNywgLTAuNjg5NTQxLCAtMC42NzE1NTksIC0wLjY1MzE3MywgLTAuNjM0MzkzLAotICAtMC42MTUyMzIsIC0wLjU5NTY5OSwgLTAuNTc1ODA4LCAtMC41NTU1NywgLTAuNTM0OTk4LCAtMC41MTQxMDMsCi0gIC0wLjQ5Mjg5OCwgLTAuNDcxMzk3LCAtMC40NDk2MTEsIC0wLjQyNzU1NSwgLTAuNDA1MjQxLCAtMC4zODI2ODMsCi0gIC0wLjM1OTg5NSwgLTAuMzM2ODksIC0wLjMxMzY4MiwgLTAuMjkwMjg1LCAtMC4yNjY3MTMsIC0wLjI0Mjk4LCAtMC4yMTkxMDEsCi0gIC0wLjE5NTA5LCAtMC4xNzA5NjIsIC0wLjE0NjczLCAtMC4xMjI0MTEsIC0wLjA5ODAxNzEsIC0wLjA3MzU2NDYsCi0gIC0wLjA0OTA2NzcsIC0wLjAyNDU0MTIsIC0xLjgzNjk3ZS0xNiwgMC4wMjQ1NDEyLCAwLjA0OTA2NzcsIDAuMDczNTY0NiwKLSAgMC4wOTgwMTcxLCAwLjEyMjQxMSwgMC4xNDY3MywgMC4xNzA5NjIsIDAuMTk1MDksIDAuMjE5MTAxLCAwLjI0Mjk4LAotICAwLjI2NjcxMywgMC4yOTAyODUsIDAuMzEzNjgyLCAwLjMzNjg5LCAwLjM1OTg5NSwgMC4zODI2ODMsIDAuNDA1MjQxLAotICAwLjQyNzU1NSwgMC40NDk2MTEsIDAuNDcxMzk3LCAwLjQ5Mjg5OCwgMC41MTQxMDMsIDAuNTM0OTk4LCAwLjU1NTU3LAotICAwLjU3NTgwOCwgMC41OTU2OTksIDAuNjE1MjMyLCAwLjYzNDM5MywgMC42NTMxNzMsIDAuNjcxNTU5LCAwLjY4OTU0MSwKLSAgMC43MDcxMDcsIDAuNzI0MjQ3LCAwLjc0MDk1MSwgMC43NTcyMDksIDAuNzczMDEsIDAuNzg4MzQ2LCAwLjgwMzIwOCwKLSAgMC44MTc1ODUsIDAuODMxNDcsIDAuODQ0ODU0LCAwLjg1NzcyOSwgMC44NzAwODcsIDAuODgxOTIxLCAwLjg5MzIyNCwKLSAgMC45MDM5ODksIDAuOTE0MjEsIDAuOTIzODgsIDAuOTMyOTkzLCAwLjk0MTU0NCwgMC45NDk1MjgsIDAuOTU2OTQsCi0gIDAuOTYzNzc2LCAwLjk3MDAzMSwgMC45NzU3MDIsIDAuOTgwNzg1LCAwLjk4NTI3OCwgMC45ODkxNzcsIDAuOTkyNDgsCi0gIDAuOTk1MTg1LCAwLjk5NzI5LCAwLjk5ODc5NSwgMC45OTk2OTkKLX07CmRpZmYgLS1naXQgYS9nc3QvZ29vbS9tYXRodG9vbHMuaCBiL2dzdC9nb29tL21hdGh0b29scy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzQwZGFiLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL21hdGh0b29scy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBKZWFuLUNocmlzdG9waGUgSG9lbHQgPGpla29AZnJlZS5mcj4KLSAqCi0gKiBnb29tX2NvcmUuYzpDb250YWlucyB0aGUgY29yZSBvZiBnb29tJ3Mgd29yay4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0gI2lmbmRlZiBNQVRIVE9PTFNfSAotI2RlZmluZSBNQVRIVE9PTFNfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jZGVmaW5lIF9kb3VibGUyZml4bWFnaWMgKDY4NzE5NDc2NzM2LjAqMS41KQotLyogMl4zNiAqIDEuNSwgICg1Mi1fc2hpZnRhbXQ9MzYpIHVzZXMgbGltaXRlZCBwcmVjaXNpY2lvbiB0byBmbG9vciAqLwotI2RlZmluZSBfc2hpZnRhbXQgMTYKLS8qIDE2LjE2IGZpeGVkIHBvaW50IHJlcHJlc2VudGF0aW9uICovCi0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOCi0jZGVmaW5lIGlleHBfCQkJCTAKLSNkZWZpbmUgaW1hbl8JCQkJMQotI2Vsc2UKLSNkZWZpbmUgaWV4cF8JCQkJMQotI2RlZmluZSBpbWFuXwkJCQkwCi0jZW5kaWYgLyogQmlnRW5kaWFuXyAqLwotCi0vKiBUT0RPOiB0aGlzIG9wdGltaXphdGlvbiBpcyB2ZXJ5IGVmZmljaWVudDogcHV0IGl0IGFnYWluIHdoZW4gYWxsIHdvcmtzCi0jaWZkZWYgSEFWRV9NTVgKLSNkZWZpbmUgRjJJKGRibCxpKSB7ZG91YmxlIGQgPSBkYmwgKyBfZG91YmxlMmZpeG1hZ2ljOyBpID0gKChpbnQqKSZkKVtpbWFuX10gPj4gX3NoaWZ0YW10O30KLSNlbHNlKi8KLSNkZWZpbmUgRjJJKGRibCxpKSBpPShpbnQpZGJsOwotLyojZW5kaWYqLwotCi0jaWYgMAotI2RlZmluZSBTSU5DT1MoZixzLGMpIFwKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmc2luY29zIiA6ICI9dCIgKGMpLCAiPXUiIChzKSA6ICIwIiAoZikpCi0jZWxzZQotI2RlZmluZSBTSU5DT1MoZixzLGMpIHtzPXNpbihmKTtjPWNvcyhmKTt9Ci0jZW5kaWYKLQotZXh0ZXJuIGZsb2F0IHNpbjI1NlsyNTZdOwotZXh0ZXJuIGZsb2F0IGNvczI1NlsyNTZdOwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vbW14LmMgYi9nc3QvZ29vbS9tbXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMyYTZjNC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9tbXguYworKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgltbXguYwotCi0JTXVsdGlNZWRpYSBlWHRlbnNpb25zIEdDQyBpbnRlcmZhY2UgbGlicmFyeSBmb3IgSUEzMi4KLQotCVRvIHVzZSB0aGlzIGxpYnJhcnksIHNpbXBseSBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUKLQlhbmQgY29tcGlsZSB3aXRoIEdDQy4gIFlvdSBNVVNUIGhhdmUgaW5saW5pbmcgZW5hYmxlZAotCWluIG9yZGVyIGZvciBtbXhfb2soKSB0byB3b3JrOyB0aGlzIGNhbiBiZSBkb25lIGJ5Ci0Jc2ltcGx5IHVzaW5nIC1PIG9uIHRoZSBHQ0MgY29tbWFuZCBsaW5lLgotCi0JQ29tcGlsaW5nIHdpdGggLURNTVhfVFJBQ0Ugd2lsbCBjYXVzZSBkZXRhaWxlZCB0cmFjZQotCW91dHB1dCB0byBiZSBzZW50IHRvIHN0ZGVyciBmb3IgZWFjaCBtbXggb3BlcmF0aW9uLgotCVRoaXMgYWRkcyBsb3RzIG9mIGNvZGUsIGFuZCBvYnZpb3VzbHkgc2xvd3MgZXhlY3V0aW9uIHRvCi0JYSBjcmF3bCwgYnV0IGNhbiBiZSB2ZXJ5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotCi0JVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZCi0JRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVAotCUxJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCi0JQU5EIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLQkxOTk3LTk5IGJ5IEguIERpZXR6IGFuZCBSLiBGaXNoZXIKLQotIE5vdGVzOgotCUl0IGFwcGVhcnMgdGhhdCB0aGUgbGF0ZXN0IGdhcyBoYXMgdGhlIHBhbmQgcHJvYmxlbSBmaXhlZCwgdGhlcmVmb3JlCi0JICBJJ2xsIHVuZGVmaW5lIEJST0tFTl9QQU5EIGJ5IGRlZmF1bHQuCi0qLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnb29tX2NvbmZpZy5oIgotCi0jaWZkZWYgSEFWRV9NTVgKLQotI2RlZmluZSBCVUZGUE9JTlROQiAxNgotI2RlZmluZSBCVUZGUE9JTlRNQVNLIDB4ZmZmZgotI2RlZmluZSBCVUZGSU5DUiAweGZmCi0KLSNpbmNsdWRlICJtbXguaCIKLSNpbmNsdWRlICJnb29tX2dyYXBoaWMuaCIKLQotI2RlZmluZSBzcXJ0cGVydGUgMTYKLS8vIGZhaXJlIDogYSAlIHNxcnRwZXJ0ZSA8PT4gYSAmIHBlcnRlbWFzawotI2RlZmluZSBQRVJURU1BU0sgMHhmCi0vLyBmYWlyZSA6IGEgLyBzcXJ0cGVydGUgPD0+IGEgPj4gUEVSVEVERUMKLSNkZWZpbmUgUEVSVEVERUMgNAotCi1pbnQKLW1teF9zdXBwb3J0ZWQgKHZvaWQpCi17Ci0gIHJldHVybiAobW1fc3VwcG9ydCAoKSAmIDB4MSk7Ci19Ci0KLXZvaWQKLXpvb21fZmlsdGVyX21teCAoaW50IHByZXZYLCBpbnQgcHJldlksCi0gICAgUGl4ZWwgKiBleHBpeDEsIFBpeGVsICogZXhwaXgyLAotICAgIGludCAqYnJ1dFMsIGludCAqYnJ1dEQsIGludCBidWZmcmF0aW8sIGludCBwcmVjYWxDb2VmWzE2XVsxNl0pCi17Ci0gIHVuc2lnbmVkIGludCBheCA9IChwcmV2WCAtIDEpIDw8IFBFUlRFREVDLCBheSA9IChwcmV2WSAtIDEpIDw8IFBFUlRFREVDOwotCi0gIGludCBidWZzaXplID0gcHJldlggKiBwcmV2WTsKLSAgaW50IGxvb3A7Ci0KLSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJweG9yICVtbTcsJW1tNyIpOwotCi0gIGZvciAobG9vcCA9IDA7IGxvb3AgPCBidWZzaXplOyBsb29wKyspIHsKLSAgICAvKiAgICAgIGludCBjb3VsZXVyOyAqLwotICAgIGludCBweCwgcHk7Ci0gICAgaW50IHBvczsKLSAgICBpbnQgY29lZmZzOwotCi0gICAgaW50IG15UG9zID0gbG9vcCA8PCAxLCBteVBvczIgPSBteVBvcyArIDE7Ci0gICAgaW50IGJydXRTbXlwb3MgPSBicnV0U1tteVBvc107Ci0KLSAgICBweCA9IGJydXRTbXlwb3MgKyAoKChicnV0RFtteVBvc10gLQotICAgICAgICAgICAgICAgIGJydXRTbXlwb3MpICogYnVmZnJhdGlvKSA+PiBCVUZGUE9JTlROQik7Ci0gICAgYnJ1dFNteXBvcyA9IGJydXRTW215UG9zMl07Ci0gICAgcHkgPSBicnV0U215cG9zICsgKCgoYnJ1dERbbXlQb3MyXSAtCi0gICAgICAgICAgICAgICAgYnJ1dFNteXBvcykgKiBidWZmcmF0aW8pID4+IEJVRkZQT0lOVE5CKTsKLQotICAgIGlmICgocHkgPj0gYXkpIHx8IChweCA+PSBheCkpIHsKLSAgICAgIHBvcyA9IGNvZWZmcyA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBvcyA9ICgocHggPj4gUEVSVEVERUMpICsgcHJldlggKiAocHkgPj4gUEVSVEVERUMpKTsKLSAgICAgIC8vIGNvZWYgZW4gbW9kdWxvIDE1Ci0gICAgICBjb2VmZnMgPSBwcmVjYWxDb2VmW3B4ICYgUEVSVEVNQVNLXVtweSAmIFBFUlRFTUFTS107Ci0gICAgfQotCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZkICUyLCAlJW1tNiBcblx0IgotICAgICAgICAvKiByZWN1cGVyYXRpb24gZGVzIGRldXggcHJlbWllcnMgcGl4ZWxzIGRhbnMgbW0wIGV0IG1tMSAqLwotICAgICAgICAibW92cSAoJTMsJTEsNCksICUlbW0wIFxuXHQiICAgIC8qIGIxLXYxLXIxLWExLWIyLXYyLXIyLWEyICovCi0gICAgICAgICJtb3ZxICUlbW0wLCAlJW1tMSBcblx0IiAgICAgICAgLyogYjEtdjEtcjEtYTEtYjItdjItcjItYTIgKi8KLSAgICAgICAgLyogZGVwYWNrYWdlIGR1IHByZW1pZXIgcGl4ZWwgKi8KLSAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTAgXG5cdCIgICAvKiAwMC1iMi0wMC12Mi0wMC1yMi0wMC1hMiAqLwotICAgICAgICAibW92cSAlJW1tNiwgJSVtbTUgXG5cdCIgICAgICAgIC8qID8/LT8/LT8/LT8/LWM0LWMzLWMyLWMxICovCi0gICAgICAgIC8qIGRlcGFja2FnZSBkdSAyaWVtZSBwaXhlbCAqLwotICAgICAgICAicHVucGNraGJ3ICUlbW03LCAlJW1tMSBcblx0IiAgIC8qIDAwLWIxLTAwLXYxLTAwLXIxLTAwLWExICovCi0gICAgICAgIC8qIGV4dHJhY3Rpb24gZGVzIGNvZWZmaWNpZW50cy4uLiAqLwotICAgICAgICAicHVucGNrbGJ3ICUlbW01LCAlJW1tNiBcblx0IiAgIC8qIGM0LWM0LWMzLWMzLWMyLWMyLWMxLWMxICovCi0gICAgICAgICJtb3ZxICUlbW02LCAlJW1tNCBcblx0IiAgICAgICAgLyogYzQtYzQtYzMtYzMtYzItYzItYzEtYzEgKi8KLSAgICAgICAgIm1vdnEgJSVtbTYsICUlbW01IFxuXHQiICAgICAgICAvKiBjNC1jNC1jMy1jMy1jMi1jMi1jMS1jMSAqLwotICAgICAgICAicHVucGNrbGJ3ICUlbW01LCAlJW1tNiBcblx0IiAgIC8qIGMyLWMyLWMyLWMyLWMxLWMxLWMxLWMxICovCi0gICAgICAgICJwdW5wY2toYncgJSVtbTUsICUlbW00IFxuXHQiICAgLyogYzQtYzQtYzQtYzQtYzMtYzMtYzMtYzMgKi8KLSAgICAgICAgIm1vdnEgJSVtbTYsICUlbW0zIFxuXHQiICAgICAgICAvKiBjMi1jMi1jMi1jMi1jMS1jMS1jMS1jMSAqLwotICAgICAgICAicHVucGNrbGJ3ICUlbW03LCAlJW1tNiBcblx0IiAgIC8qIDAwLWMxLTAwLWMxLTAwLWMxLTAwLWMxICovCi0gICAgICAgICJwdW5wY2toYncgJSVtbTcsICUlbW0zIFxuXHQiICAgLyogMDAtYzItMDAtYzItMDAtYzItMDAtYzIgKi8KLSAgICAgICAgLyogbXVsdGlwbGljYXRpb24gZGVzIHBpeGVscyBwYXIgbGVzIGNvZWZmaWNpZW50cyAqLwotICAgICAgICAicG11bGx3ICUlbW02LCAlJW1tMCBcblx0IiAgICAgIC8qIGMxKmIyLWMxKnYyLWMxKnIyLWMxKmEyICovCi0gICAgICAgICJwbXVsbHcgJSVtbTMsICUlbW0xIFxuXHQiICAgICAgLyogYzIqYjEtYzIqdjEtYzIqcjEtYzIqYTEgKi8KLSAgICAgICAgInBhZGR3ICUlbW0xLCAlJW1tMCBcblx0IgotICAgICAgICAvKiAuLi5leHRyYWN0aW9uIGRlcyAyIGRlcm5pZXJzIGNvZWZmaWNpZW50cyAqLwotICAgICAgICAibW92cSAlJW1tNCwgJSVtbTUgXG5cdCIgICAgICAgIC8qIGM0LWM0LWM0LWM0LWMzLWMzLWMzLWMzICovCi0gICAgICAgICJwdW5wY2tsYncgJSVtbTcsICUlbW00IFxuXHQiICAgLyogMDAtYzMtMDAtYzMtMDAtYzMtMDAtYzMgKi8KLSAgICAgICAgInB1bnBja2hidyAlJW1tNywgJSVtbTUgXG5cdCIgICAvKiAwMC1jNC0wMC1jNC0wMC1jNC0wMC1jNCAqLwotICAgICAgICAvKiBham91dGVyIGxhIGxvbmd1ZXVyIGRlIGxpZ25lIGEgZXNpICovCi0gICAgICAgICJhZGRsIDgoJSVlYnApLCUxIFxuXHQiCi0gICAgICAgIC8qIHJlY3VwZXJhdGlvbiBkZXMgMiBkZXJuaWVycyBwaXhlbHMgKi8KLSAgICAgICAgIm1vdnEgKCUzLCUxLDQpLCAlJW1tMSBcblx0IiAibW92cSAlJW1tMSwgJSVtbTIgXG5cdCIKLSAgICAgICAgLyogZGVwYWNrYWdlIGRlcyBwaXhlbHMgKi8KLSAgICAgICAgInB1bnBja2xidyAlJW1tNywgJSVtbTEgXG5cdCIgInB1bnBja2hidyAlJW1tNywgJSVtbTIgXG5cdCIKLSAgICAgICAgLyogbXVsdGlwbGljYXRpb24gcGFzIGxlcyBjb2VmZnMgKi8KLSAgICAgICAgInBtdWxsdyAlJW1tNCwgJSVtbTEgXG5cdCIgInBtdWxsdyAlJW1tNSwgJSVtbTIgXG5cdCIKLSAgICAgICAgLyogYWpvdXQgZGVzIHZhbGV1cnMgb2J0ZW51ZXMgPyBsYSB2YWxldXIgZmluYWxlICovCi0gICAgICAgICJwYWRkdyAlJW1tMSwgJSVtbTAgXG5cdCIgInBhZGR3ICUlbW0yLCAlJW1tMCBcblx0IgotICAgICAgICAvKiBkaXZpc2lvbiBwYXIgMjU2ID0gMTYrMTYrMTYrMTYsIHB1aXMgcmVwYWNrYWdlIGR1IHBpeGVsIGZpbmFsICovCi0gICAgICAgICJwc3JsdyAkOCwgJSVtbTAgXG5cdCIKLSAgICAgICAgInBhY2t1c3diICUlbW03LCAlJW1tMCBcblx0IiAibW92ZCAlJW1tMCwlMCBcblx0IjoiPWciIChleHBpeDJbbG9vcF0pCi0gICAgICAgIDoiciIgKHBvcyksICJyIiAoY29lZmZzKSwgInIiIChleHBpeDEpCi0KLSAgICAgICAgKTsKLQotICAgIGVtbXMgKCk7Ci0gIH0KLX0KLQotI2RlZmluZSBEUkFXTUVUSE9EX1BMVVNfTU1YKF9vdXQsX2JhY2tidWYsX2NvbCkgXAoteyBcCi0JbW92ZF9tMnIoX2JhY2tidWYsIG1tMCk7IFwKLQlwYWRkdXNiX20ycihfY29sLCBtbTApOyBcCi0JbW92ZF9yMm0obW0wLCBfb3V0KTsgXAotfQotCi0jZGVmaW5lIERSQVdNRVRIT0QgRFJBV01FVEhPRF9QTFVTX01NWCgqcCwqcCxjb2wpCi0KLXZvaWQKLWRyYXdfbGluZV9tbXggKFBpeGVsICogZGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sLAotICAgIGludCBzY3JlZW54LCBpbnQgc2NyZWVueSkKLXsKLSAgaW50IHgsIHksIGR4LCBkeSwgeXksIHh4OwotICBQaXhlbCAqcDsKLQotICBpZiAoKHkxIDwgMCkgfHwgKHkyIDwgMCkgfHwgKHgxIDwgMCkgfHwgKHgyIDwgMCkgfHwgKHkxID49IHNjcmVlbnkpCi0gICAgICB8fCAoeTIgPj0gc2NyZWVueSkgfHwgKHgxID49IHNjcmVlbngpIHx8ICh4MiA+PSBzY3JlZW54KSkKLSAgICBnb3RvIGVuZF9vZl9saW5lOwotCi0gIGR4ID0geDIgLSB4MTsKLSAgZHkgPSB5MiAtIHkxOwotICBpZiAoeDEgPj0geDIpIHsKLSAgICBpbnQgdG1wOwotCi0gICAgdG1wID0geDE7Ci0gICAgeDEgPSB4MjsKLSAgICB4MiA9IHRtcDsKLSAgICB0bXAgPSB5MTsKLSAgICB5MSA9IHkyOwotICAgIHkyID0gdG1wOwotICAgIGR4ID0geDIgLSB4MTsKLSAgICBkeSA9IHkyIC0geTE7Ci0gIH0KLQotICAvKiB2ZXJ0aWNhbCBsaW5lICovCi0gIGlmIChkeCA9PSAwKSB7Ci0gICAgaWYgKHkxIDwgeTIpIHsKLSAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5MSkgKyB4MV0pOwotICAgICAgZm9yICh5ID0geTE7IHkgPD0geTI7IHkrKykgewotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBwICs9IHNjcmVlbng7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5MikgKyB4MV0pOwotICAgICAgZm9yICh5ID0geTI7IHkgPD0geTE7IHkrKykgewotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBwICs9IHNjcmVlbng7Ci0gICAgICB9Ci0gICAgfQotICAgIGdvdG8gZW5kX29mX2xpbmU7Ci0gIH0KLSAgLyogaG9yaXpvbnRhbCBsaW5lICovCi0gIGlmIChkeSA9PSAwKSB7Ci0gICAgaWYgKHgxIDwgeDIpIHsKLSAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5MSkgKyB4MV0pOwotICAgICAgZm9yICh4ID0geDE7IHggPD0geDI7IHgrKykgewotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBwKys7Ci0gICAgICB9Ci0gICAgICBnb3RvIGVuZF9vZl9saW5lOwotICAgIH0gZWxzZSB7Ci0gICAgICBwID0gJihkYXRhWyhzY3JlZW54ICogeTEpICsgeDJdKTsKLSAgICAgIGZvciAoeCA9IHgyOyB4IDw9IHgxOyB4KyspIHsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgcCsrOwotICAgICAgfQotICAgICAgZ290byBlbmRfb2ZfbGluZTsKLSAgICB9Ci0gIH0KLSAgLyogMSAgICAqLwotICAvKiAgXCAgICovCi0gIC8qICAgXCAgKi8KLSAgLyogICAgMiAqLwotICBpZiAoeTIgPiB5MSkgewotICAgIC8qIHN0ZWVwICovCi0gICAgaWYgKGR5ID4gZHgpIHsKLSAgICAgIGR4ID0gKChkeCA8PCAxNikgLyBkeSk7Ci0gICAgICB4ID0geDEgPDwgMTY7Ci0gICAgICBmb3IgKHkgPSB5MTsgeSA8PSB5MjsgeSsrKSB7Ci0gICAgICAgIHh4ID0geCA+PiAxNjsKLSAgICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHkpICsgeHhdKTsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgaWYgKHh4IDwgKHNjcmVlbnggLSAxKSkgewotICAgICAgICAgIHArKzsKLSAgICAgICAgICAvKiBEUkFXTUVUSE9EOyAqLwotICAgICAgICB9Ci0gICAgICAgIHggKz0gZHg7Ci0gICAgICB9Ci0gICAgICBnb3RvIGVuZF9vZl9saW5lOwotICAgIH0KLSAgICAvKiBzaGFsbG93ICovCi0gICAgZWxzZSB7Ci0gICAgICBkeSA9ICgoZHkgPDwgMTYpIC8gZHgpOwotICAgICAgeSA9IHkxIDw8IDE2OwotICAgICAgZm9yICh4ID0geDE7IHggPD0geDI7IHgrKykgewotICAgICAgICB5eSA9IHkgPj4gMTY7Ci0gICAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5eSkgKyB4XSk7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIGlmICh5eSA8IChzY3JlZW55IC0gMSkpIHsKLSAgICAgICAgICBwICs9IHNjcmVlbnk7Ci0gICAgICAgICAgLyogRFJBV01FVEhPRDsgKi8KLSAgICAgICAgfQotICAgICAgICB5ICs9IGR5OwotICAgICAgfQotICAgIH0KLSAgfQotICAvKiAgICAyICovCi0gIC8qICAgLyAgKi8KLSAgLyogIC8gICAqLwotICAvKiAxICAgICovCi0gIGVsc2UgewotICAgIC8qIHN0ZWVwICovCi0gICAgaWYgKC1keSA+IGR4KSB7Ci0gICAgICBkeCA9ICgoZHggPDwgMTYpIC8gLWR5KTsKLSAgICAgIHggPSAoeDEgKyAxKSA8PCAxNjsKLSAgICAgIGZvciAoeSA9IHkxOyB5ID49IHkyOyB5LS0pIHsKLSAgICAgICAgeHggPSB4ID4+IDE2OwotICAgICAgICBwID0gJihkYXRhWyhzY3JlZW54ICogeSkgKyB4eF0pOwotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBpZiAoeHggPCAoc2NyZWVueCAtIDEpKSB7Ci0gICAgICAgICAgcC0tOwotICAgICAgICAgIC8qIERSQVdNRVRIT0Q7ICovCi0gICAgICAgIH0KLSAgICAgICAgeCArPSBkeDsKLSAgICAgIH0KLSAgICAgIGdvdG8gZW5kX29mX2xpbmU7Ci0gICAgfQotICAgIC8qIHNoYWxsb3cgKi8KLSAgICBlbHNlIHsKLSAgICAgIGR5ID0gKChkeSA8PCAxNikgLyBkeCk7Ci0gICAgICB5ID0geTEgPDwgMTY7Ci0gICAgICBmb3IgKHggPSB4MTsgeCA8PSB4MjsgeCsrKSB7Ci0gICAgICAgIHl5ID0geSA+PiAxNjsKLSAgICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHl5KSArIHhdKTsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgaWYgKHl5IDwgKHNjcmVlbnkgLSAxKSkgewotICAgICAgICAgIHAgKz0gc2NyZWVueTsKLSAgICAgICAgICAvKiBEUkFXTUVUSE9EOyAqLwotICAgICAgICB9Ci0gICAgICAgIHkgKz0gZHk7Ci0gICAgICB9Ci0gICAgICBnb3RvIGVuZF9vZl9saW5lOwotICAgIH0KLSAgfQotZW5kX29mX2xpbmU6Ci0gIGVtbXMgKCk7Ci0gIC8qIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIpOyAqLwotfQotI2Vsc2UKLWludAotbW14X3N1cHBvcnRlZCAodm9pZCkKLXsKLSAgcmV0dXJuICgwKTsKLX0KLSNlbmRpZiAvKiBIQVZFX01NWCAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vbW14LmggYi9nc3QvZ29vbS9tbXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0OWUxMC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9tbXguaAorKysgL2Rldi9udWxsCkBAIC0xLDc0MSArMCwwIEBACi0vKgltbXguaAotCi0JTXVsdGlNZWRpYSBlWHRlbnNpb25zIEdDQyBpbnRlcmZhY2UgbGlicmFyeSBmb3IgSUEzMi4KLQotCVRvIHVzZSB0aGlzIGxpYnJhcnksIHNpbXBseSBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUKLQlhbmQgY29tcGlsZSB3aXRoIEdDQy4gIFlvdSBNVVNUIGhhdmUgaW5saW5pbmcgZW5hYmxlZAotCWluIG9yZGVyIGZvciBtbXhfb2soKSB0byB3b3JrOyB0aGlzIGNhbiBiZSBkb25lIGJ5Ci0Jc2ltcGx5IHVzaW5nIC1PIG9uIHRoZSBHQ0MgY29tbWFuZCBsaW5lLgotCi0JQ29tcGlsaW5nIHdpdGggLURNTVhfVFJBQ0Ugd2lsbCBjYXVzZSBkZXRhaWxlZCB0cmFjZQotCW91dHB1dCB0byBiZSBzZW50IHRvIHN0ZGVyciBmb3IgZWFjaCBtbXggb3BlcmF0aW9uLgotCVRoaXMgYWRkcyBsb3RzIG9mIGNvZGUsIGFuZCBvYnZpb3VzbHkgc2xvd3MgZXhlY3V0aW9uIHRvCi0JYSBjcmF3bCwgYnV0IGNhbiBiZSB2ZXJ5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotCi0JVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZCi0JRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVAotCUxJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCi0JQU5EIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLQkxOTk3LTk5IGJ5IEguIERpZXR6IGFuZCBSLiBGaXNoZXIKLQotIE5vdGVzOgotCUl0IGFwcGVhcnMgdGhhdCB0aGUgbGF0ZXN0IGdhcyBoYXMgdGhlIHBhbmQgcHJvYmxlbSBmaXhlZCwgdGhlcmVmb3JlCi0JICBJJ2xsIHVuZGVmaW5lIEJST0tFTl9QQU5EIGJ5IGRlZmF1bHQuCi0qLwotCi0jaWZuZGVmIF9NTVhfSAotI2RlZmluZSBfTU1YX0gKLQotI2luY2x1ZGUgImdvb21fZ3JhcGhpYy5oIgotCi0vKglXYXJuaW5nOiAgYXQgdGhpcyB3cml0aW5nLCB0aGUgdmVyc2lvbiBvZiBHQVMgcGFja2FnZWQKLQl3aXRoIG1vc3QgTGludXggZGlzdHJpYnV0aW9ucyBkb2VzIG5vdCBoYW5kbGUgdGhlCi0JcGFyYWxsZWwgQU5EIG9wZXJhdGlvbiBtbmVtb25pYyBjb3JyZWN0bHkuICBJZiB0aGUKLQlzeW1ib2wgQlJPS0VOX1BBTkQgaXMgZGVmaW5lZCwgYSBzbG93ZXIgYWx0ZXJuYXRpdmUKLQljb2Rpbmcgd2lsbCBiZSB1c2VkLiAgSWYgZXhlY3V0aW9uIG9mIG1teHRlc3QgcmVzdWx0cwotCWluIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gZmF1bHQsIGRlZmluZSB0aGlzIHN5bWJvbC4KLSovCi0jdW5kZWYJQlJPS0VOX1BBTkQKLQotCi0vKglUaGUgdHlwZSBvZiBhbiB2YWx1ZSB0aGF0IGZpdHMgaW4gYW4gTU1YIHJlZ2lzdGVyCi0JKG5vdGUgdGhhdCBsb25nIGxvbmcgY29uc3RhbnQgdmFsdWVzIE1VU1QgYmUgc3VmZml4ZWQKLQkgYnkgTEwgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZXMgYnkgVUxMLCBsZXN0Ci0JIHRoZXkgYmUgdHJ1bmNhdGVkIGJ5IHRoZSBjb21waWxlcikKLSovCi10eXBlZGVmCXVuaW9uIHsKLQlsb25nIGxvbmcJCXE7CS8qIFF1YWR3b3JkICg2NC1iaXQpIHZhbHVlICovCi0JdW5zaWduZWQgbG9uZyBsb25nCXVxOwkvKiBVbnNpZ25lZCBRdWFkd29yZCAqLwotCWludAkJCWRbMl07CS8qIDIgRG91Ymxld29yZCAoMzItYml0KSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBpbnQJCXVkWzJdOwkvKiAyIFVuc2lnbmVkIERvdWJsZXdvcmQgKi8KLQlzaG9ydAkJCXdbNF07CS8qIDQgV29yZCAoMTYtYml0KSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBzaG9ydAkJdXdbNF07CS8qIDQgVW5zaWduZWQgV29yZCAqLwotCWNoYXIJCQliWzhdOwkvKiA4IEJ5dGUgKDgtYml0KSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBjaGFyCQl1Yls4XTsJLyogOCBVbnNpZ25lZCBCeXRlICovCi0JZmxvYXQJCQlzWzJdOwkvKiBTaW5nbGUtcHJlY2lzaW9uICgzMi1iaXQpIHZhbHVlICovCi19IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpIG1teF90OwkvKiBPbiBhbiA4LWJ5dGUgKDY0LWJpdCkgYm91bmRhcnkgKi8KLQotCi0KLS8qCUZ1bmN0aW9uIHRvIHRlc3QgaWYgbXVsdGltZWRpYSBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4uLgotKi8KLXN0YXRpYyBpbnQKLW1tX3N1cHBvcnQodm9pZCkKLXsKLQkvKiBSZXR1cm5zIDEgaWYgTU1YIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkLAotCSAgIDMgaWYgQ3lyaXggTU1YIGFuZCBFeHRlbmRlZCBNTVggaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQKLQkgICA1IGlmIEFNRCBNTVggYW5kIDNETm93ISBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZAotCQkgMTMgaWYgQU1EIEV4dGVuZGVkIE1NWCwgJjNkTm93IHN1cHBvcnRlZAotCSAgIDAgaWYgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBhbnkgb2YgdGhlc2UKLQkqLwotCXJlZ2lzdGVyIGludCBydmFsID0gMDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJLyogU2VlIGlmIENQVUlEIGluc3RydWN0aW9uIGlzIHN1cHBvcnRlZCAuLi4gKi8KLQkJLyogLi4uIEdldCBjb3BpZXMgb2YgRUZMQUdTIGludG8gZWF4IGFuZCBlY3ggKi8KLSAgICAicHVzaGwgJSVlYnhcblx0IgotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0JCSJtb3ZsICUlZWF4LCAlJWVjeFxuXHQiCi0KLQkJLyogLi4uIFRvZ2dsZSB0aGUgSUQgYml0IGluIG9uZSBjb3B5IGFuZCBzdG9yZSAqLwotCQkvKiAgICAgdG8gdGhlIEVGTEFHUyByZWcgKi8KLQkJInhvcmwgJDB4MjAwMDAwLCAlJWVheFxuXHQiCi0JCSJwdXNoICUlZWF4XG5cdCIKLQkJInBvcGZcblx0IgotCi0JCS8qIC4uLiBHZXQgdGhlIChob3BlZnVsbHkgbW9kaWZpZWQpIEVGTEFHUyAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0KLQkJLyogLi4uIENvbXBhcmUgYW5kIHRlc3QgcmVzdWx0ICovCi0JCSJ4b3JsICUlZWF4LCAlJWVjeFxuXHQiCi0JCSJ0ZXN0bCAkMHgyMDAwMDAsICUlZWN4XG5cdCIKLQkJImp6IE5vdFN1cHBvcnRlZDFcblx0IgkJLyogQ1BVSUQgbm90IHN1cHBvcnRlZCAqLwotCi0KLQkJLyogR2V0IHN0YW5kYXJkIENQVUlEIGluZm9ybWF0aW9uLCBhbmQKLQkJICAgICAgIGdvIHRvIGEgc3BlY2lmaWMgdmVuZG9yIHNlY3Rpb24gKi8KLQkJIm1vdmwgJDAsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQotCQkvKiBDaGVjayBmb3IgSW50ZWwgKi8KLQkJImNtcGwgJDB4NzU2ZTY1NDcsICUlZWJ4XG5cdCIKLQkJImpuZSBUcnlBTURcblx0IgotCQkiY21wbCAkMHg0OTY1NmU2OSwgJSVlZHhcblx0IgotCQkiam5lIFRyeUFNRFxuXHQiCi0JCSJjbXBsICQweDZjNjU3NDZlLCAlJWVjeFxuIgotCQkiam5lIFRyeUFNRFxuXHQiCi0JCSJqbXAgSW50ZWxcblx0IgotCi0JCS8qIENoZWNrIGZvciBBTUQgKi8KLQkJIlxuVHJ5QU1EOlxuXHQiCi0JCSJjbXBsICQweDY4NzQ3NTQxLCAlJWVieFxuXHQiCi0JCSJqbmUgVHJ5Q3lyaXhcblx0IgotCQkiY21wbCAkMHg2OTc0NmU2NSwgJSVlZHhcblx0IgotCQkiam5lIFRyeUN5cml4XG5cdCIKLQkJImNtcGwgJDB4NDQ0ZDQxNjMsICUlZWN4XG4iCi0JCSJqbmUgVHJ5Q3lyaXhcblx0IgotCQkiam1wIEFNRFxuXHQiCi0KLQkJLyogQ2hlY2sgZm9yIEN5cml4ICovCi0JCSJcblRyeUN5cml4OlxuXHQiCi0JCSJjbXBsICQweDY5NzI3OTQzLCAlJWVieFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkMlxuXHQiCi0JCSJjbXBsICQweDczNmU0OTc4LCAlJWVkeFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkM1xuXHQiCi0JCSJjbXBsICQweDY0NjE2NTc0LCAlJWVjeFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkNFxuXHQiCi0JCS8qIERyb3AgdGhyb3VnaCB0byBDeXJpeC4uLiAqLwotCi0KLQkJLyogQ3lyaXggU2VjdGlvbiAqLwotCQkvKiBTZWUgaWYgZXh0ZW5kZWQgQ1BVSUQgbGV2ZWwgODAwMDAwMDEgaXMgc3VwcG9ydGVkICovCi0JCS8qIFRoZSB2YWx1ZSBvZiBDUFVJRC84MDAwMDAwMSBmb3IgdGhlIDZ4ODZNWCBpcyB1bmRlZmluZWQKLQkJICAgYWNjb3JkaW5nIHRvIHRoZSBDeXJpeCBDUFUgRGV0ZWN0aW9uIEd1aWRlIChQcmVsaW1pbmFyeQotCQkgICBSZXYuIDEuMDEgdGFibGUgMSksIHNvIHdlJ2xsIGNoZWNrIHRoZSB2YWx1ZSBvZiBlYXggZm9yCi0JCSAgIENQVUlELzAgdG8gc2VlIGlmIHN0YW5kYXJkIENQVUlEIGxldmVsIDIgaXMgc3VwcG9ydGVkLgotCQkgICBBY2NvcmRpbmcgdG8gdGhlIHRhYmxlLCB0aGUgb25seSBDUFUgd2hpY2ggc3VwcG9ydHMgbGV2ZWwKLQkJICAgMiBpcyBhbHNvIHRoZSBvbmx5IG9uZSB3aGljaCBzdXBwb3J0cyBleHRlbmRlZCBDUFVJRCBsZXZlbHMuCi0JCSovCi0JCSJjbXBsICQweDIsICUlZWF4XG5cdCIKLQkJImpuZSBNTVh0ZXN0XG5cdCIJLyogVXNlIHN0YW5kYXJkIENQVUlEIGluc3RlYWQgKi8KLQotCQkvKiBFeHRlbmRlZCBDUFVJRCBzdXBwb3J0ZWQgKGluIHRoZW9yeSksIHNvIGdldCBleHRlbmRlZAotCQkgICBmZWF0dXJlcyAqLwotCQkibW92bCAkMHg4MDAwMDAwMSwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkidGVzdGwgJDB4MDA4MDAwMDAsICUlZWF4XG5cdCIJLyogVGVzdCBmb3IgTU1YICovCi0JCSJqeiBOb3RTdXBwb3J0ZWQ1XG5cdCIJCS8qIE1NWCBub3Qgc3VwcG9ydGVkICovCi0JCSJ0ZXN0bCAkMHgwMTAwMDAwMCwgJSVlYXhcblx0IgkvKiBUZXN0IGZvciBFeHQnZCBNTVggKi8KLQkJImpueiBFTU1YU3VwcG9ydGVkXG5cdCIKLQkJIm1vdmwgJDEsICUwXG5cblx0IgkJLyogTU1YIFN1cHBvcnRlZCAqLwotCQkiam1wIFJldHVyblxuXG4iCi0JCSJFTU1YU3VwcG9ydGVkOlxuXHQiCi0JCSJtb3ZsICQzLCAlMFxuXG5cdCIJCS8qIEVNTVggYW5kIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblx0IgotCi0KLQkJLyogQU1EIFNlY3Rpb24gKi8KLQkJIkFNRDpcblx0IgotCi0JCS8qIFNlZSBpZiBleHRlbmRlZCBDUFVJRCBpcyBzdXBwb3J0ZWQgKi8KLQkJIm1vdmwgJDB4ODAwMDAwMDAsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQkJImNtcGwgJDB4ODAwMDAwMDAsICUlZWF4XG5cdCIKLQkJImpsIE1NWHRlc3Rcblx0IgkvKiBVc2Ugc3RhbmRhcmQgQ1BVSUQgaW5zdGVhZCAqLwotCi0JCS8qIEV4dGVuZGVkIENQVUlEIHN1cHBvcnRlZCwgc28gZ2V0IGV4dGVuZGVkIGZlYXR1cmVzICovCi0JCSJtb3ZsICQweDgwMDAwMDAxLCAlJWVheFxuXHQiCi0JCSJjcHVpZFxuXHQiCi0JCSJ0ZXN0bCAkMHgwMDgwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciBNTVggKi8KLQkJImp6IE5vdFN1cHBvcnRlZDZcblx0IgkJLyogTU1YIG5vdCBzdXBwb3J0ZWQgKi8KLQkJInRlc3RsICQweDgwMDAwMDAwLCAlJWVkeFxuXHQiCS8qIFRlc3QgZm9yIDNETm93ISAqLwotCQkiam56IFRocmVlRE5vd1N1cHBvcnRlZFxuXHQiCi0JCSJtb3ZsICQxLCAlMFxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblxuIgotCQkiVGhyZWVETm93U3VwcG9ydGVkOlxuXHQiCi0JCSJ0ZXN0bCAkMHg0MDAwMDAwMCwgJSVlZHhcblx0IiAvKiBUZXN0IEFNRCBFeHRlbmRlZCBNTVggKi8KLQkJImpueiBBTURYTU1YU3VwcG9ydGVkXG5cdCIKLQkJIm1vdmwgJDUsICUwXG5cblx0IgkJLyogM0ROb3chIGFuZCBNTVggU3VwcG9ydGVkICovCi0JCSJqbXAgUmV0dXJuXG5cdCIKLQkJIkFNRFhNTVhTdXBwb3J0ZWQ6XG5cdCIKLQkJIm1vdmwgJDEzLCAlMFxuXG5cdCIJCS8qIFhNTVgsIDNETm93ISBhbmQgTU1YIFN1cHBvcnRlZCAqLwotCQkiam1wIFJldHVyblxuXHQiCi0KLQotCQkvKiBJbnRlbCBTZWN0aW9uICovCi0JCSJJbnRlbDpcblx0IgotCi0JCS8qIENoZWNrIGZvciBNTVggKi8KLQkJIk1NWHRlc3Q6XG5cdCIKLQkJIm1vdmwgJDEsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQkJInRlc3RsICQweDAwODAwMDAwLCAlJWVkeFxuXHQiCS8qIFRlc3QgZm9yIE1NWCAqLwotCQkianogTm90U3VwcG9ydGVkN1xuXHQiCQkvKiBNTVggTm90IHN1cHBvcnRlZCAqLwotCQkibW92bCAkMSwgJTBcblxuXHQiCQkvKiBNTVggU3VwcG9ydGVkICovCi0JCSJqbXAgUmV0dXJuXG5cdCIKLQotCQkvKiBOb3RoaW5nIHN1cHBvcnRlZCAqLwotCQkiXG5Ob3RTdXBwb3J0ZWQxOlxuXHQiCi0JCSIjbW92bCAkMTAxLCAlMFxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkMjpcblx0IgotCQkiI21vdmwgJDEwMiwgJTBcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDM6XG5cdCIKLQkJIiNtb3ZsICQxMDMsICUwXG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQ0OlxuXHQiCi0JCSIjbW92bCAkMTA0LCAlMFxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkNTpcblx0IgotCQkiI21vdmwgJDEwNSwgJTBcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDY6XG5cdCIKLQkJIiNtb3ZsICQxMDYsICUwXG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQ3OlxuXHQiCi0JCSIjbW92bCAkMTA3LCAlMFxuXG5cdCIKLQkJIm1vdmwgJDAsICUwXG5cblx0IgotCi0JCSJSZXR1cm46XG5cdCIKLSAgICAicG9wbCAlJWVieFxuXHQiCi0JCTogIj1YIiAocnZhbCkKLQkJOiAvKiBubyBpbnB1dCAqLwotCQk6ICJlYXgiLCAiZWN4IiwgImVkeCIKLQkpOwotCi0JLyogUmV0dXJuICovCi0JcmV0dXJuKHJ2YWwpOwotfQotCi0vKglGdW5jdGlvbiB0byB0ZXN0IGlmIG1teCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4uLgotKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1tbXhfb2sodm9pZCkKLXsKLQkvKiBSZXR1cm5zIDEgaWYgTU1YIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkLCAwIG90aGVyd2lzZSAqLwotCXJldHVybiAoIG1tX3N1cHBvcnQoKSAmIDB4MSApOwotfQotCi1pbnQgbW14X3N1cHBvcnRlZCAodm9pZCk7Ci1pbnQgeG1teF9zdXBwb3J0ZWQgKHZvaWQpOwotCi0KLS8qIE1NWCBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb25zICovCi12b2lkIGRyYXdfbGluZV9tbXggKFBpeGVsICpkYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIGludCBjb2wsIGludCBzY3JlZW54LCBpbnQgc2NyZWVueSk7Ci12b2lkIGRyYXdfbGluZV94bW14IChQaXhlbCAqZGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sLCBpbnQgc2NyZWVueCwgaW50IHNjcmVlbnkpOwotdm9pZCB6b29tX2ZpbHRlcl9tbXggKGludCBwcmV2WCwgaW50IHByZXZZLCBQaXhlbCAqZXhwaXgxLCBQaXhlbCAqZXhwaXgyLAotCQkgICAgICBpbnQgKmJydXRTLCBpbnQgKmJydXRELCBpbnQgYnVmZnJhdGlvLCBpbnQgcHJlY2FsQ29lZlsxNl1bMTZdKTsKLXZvaWQgem9vbV9maWx0ZXJfeG1teCAoaW50IHByZXZYLCBpbnQgcHJldlksIFBpeGVsICpleHBpeDEsIFBpeGVsICpleHBpeDIsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCAqbGJydVMsIGludCAqbGJydUQsIGludCBidWZmcmF0aW8sIGludCBwcmVjYWxDb2VmWzE2XVsxNl0pOwotCi0KLS8qCUhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBpbnN0cnVjdGlvbiBtYWNyb3MgdGhhdCBmb2xsb3cuLi4KLQkobm90ZSB0aGF0IG1lbW9yeS10by1yZWdpc3RlciwgbTJyLCBpbnN0cnVjdGlvbnMgYXJlIG5lYXJseQotCSBhcyBlZmZpY2llbnQgYXMgcmVnaXN0ZXItdG8tcmVnaXN0ZXIsIHIyciwgaW5zdHJ1Y3Rpb25zOwotCSBob3dldmVyLCBtZW1vcnktdG8tbWVtb3J5IGluc3RydWN0aW9ucyBhcmUgcmVhbGx5IHNpbXVsYXRlZAotCSBhcyBhIGNvbnZlbmllbmNlLCBhbmQgYXJlIG9ubHkgMS8zIGFzIGVmZmljaWVudCkKLSovCi0jaWZkZWYJTU1YX1RSQUNFCi0KLS8qCUluY2x1ZGUgdGhlIHN0dWZmIGZvciBwcmludGluZyBhIHRyYWNlIHRvIHN0ZGVyci4uLgotKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUJbW14X2kycihvcCwgaW1tLCByZWcpIFwKLQl7IFwKLQkJbW14X3QgbW14X3RyYWNlOyBcCi0JCW1teF90cmFjZS51cSA9IChpbW0pOyBcCi0JCXByaW50Zigjb3AgIl9pMnIoIiAjaW1tICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCXByaW50ZigjcmVnICI9MHglMDh4JTA4eCkgPT4gIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJCSAgICAgIDogIlgiIChpbW0pKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCXByaW50ZigjcmVnICI9MHglMDh4JTA4eFxuIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCX0KLQotI2RlZmluZQltbXhfbTJyKG9wLCBtZW0sIHJlZykgXAotCXsgXAotCQltbXhfdCBtbXhfdHJhY2U7IFwKLQkJbW14X3RyYWNlID0gKG1lbSk7IFwKLQkJcHJpbnRmKCNvcCAiX20ycigiICNtZW0gIj0weCUwOHglMDh4LCAiLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJcHJpbnRmKCNyZWcgIj0weCUwOHglMDh4KSA9PiAiLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkJICAgICAgOiAibSIgKG1lbSkpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJcHJpbnRmKCNyZWcgIj0weCUwOHglMDh4XG4iLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JfQotCi0jZGVmaW5lCW1teF9yMm0ob3AsIHJlZywgbWVtKSBcCi0JeyBcCi0JCW1teF90IG1teF90cmFjZTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCXByaW50Zigjb3AgIl9yMm0oIiAjcmVnICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQltbXhfdHJhY2UgPSAobWVtKTsgXAotCQlwcmludGYoI21lbSAiPTB4JTA4eCUwOHgpID0+ICIsIFwKLQkJCW1teF90cmFjZS5kWzFdLCBtbXhfdHJhY2UuZFswXSk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkJICAgICAgOiAiPW0iIChtZW0pIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQltbXhfdHJhY2UgPSAobWVtKTsgXAotCQlwcmludGYoI21lbSAiPTB4JTA4eCUwOHhcbiIsIFwKLQkJCW1teF90cmFjZS5kWzFdLCBtbXhfdHJhY2UuZFswXSk7IFwKLQl9Ci0KLSNkZWZpbmUJbW14X3IycihvcCwgcmVncywgcmVnZCkgXAotCXsgXAotCQltbXhfdCBtbXhfdHJhY2U7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVncyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJcHJpbnRmKCNvcCAiX3IycigiICNyZWdzICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWdkICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtbXhfdHJhY2UpIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQlwcmludGYoI3JlZ2QgIj0weCUwOHglMDh4KSA9PiAiLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlIiAjcmVncyAiLCAlIiAjcmVnZCk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVnZCAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJcHJpbnRmKCNyZWdkICI9MHglMDh4JTA4eFxuIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCX0KLQotI2RlZmluZQltbXhfbTJtKG9wLCBtZW1zLCBtZW1kKSBcCi0JeyBcCi0JCW1teF90IG1teF90cmFjZTsgXAotCQltbXhfdHJhY2UgPSAobWVtcyk7IFwKLQkJcHJpbnRmKCNvcCAiX20ybSgiICNtZW1zICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQltbXhfdHJhY2UgPSAobWVtZCk7IFwKLQkJcHJpbnRmKCNtZW1kICI9MHglMDh4JTA4eCkgPT4gIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJCSAgICAgICNvcCAiICUxLCAlJW1tMFxuXHQiIFwKLQkJCQkgICAgICAibW92cSAlJW1tMCwgJTAiIFwKLQkJCQkgICAgICA6ICI9bSIgKG1lbWQpIFwKLQkJCQkgICAgICA6ICJtIiAobWVtcykpOyBcCi0JCW1teF90cmFjZSA9IChtZW1kKTsgXAotCQlwcmludGYoI21lbWQgIj0weCUwOHglMDh4XG4iLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JfQotCi0jZWxzZQotCi0vKglUaGVzZSBtYWNyb3MgYXJlIGEgbG90IHNpbXBsZXIgd2l0aG91dCB0aGUgdHJhY2luZy4uLgotKi8KLQotI2RlZmluZQltbXhfaTJyKG9wLCBpbW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChpbW0pICkKLQotI2RlZmluZQltbXhfbTJyKG9wLCBtZW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIm0iIChtZW0pKQotCi0jZGVmaW5lCW1teF9yMm0ob3AsIHJlZywgbWVtKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkgICAgICA6ICI9bSIgKG1lbSkgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovICkKLQotI2RlZmluZQltbXhfcjJyKG9wLCByZWdzLCByZWdkKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUiICNyZWdzICIsICUiICNyZWdkKQotCi0jZGVmaW5lCW1teF9tMm0ob3AsIG1lbXMsIG1lbWQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJICAgICAgI29wICIgJTEsICUlbW0wXG5cdCIgXAotCQkJICAgICAgIm1vdnEgJSVtbTAsICUwIiBcCi0JCQkgICAgICA6ICI9bSIgKG1lbWQpIFwKLQkJCSAgICAgIDogIm0iIChtZW1zKSkKLQotI2VuZGlmCi0KLQotLyoJMXg2NCBNT1ZlIFF1YWR3b3JkCi0JKHRoaXMgaXMgYm90aCBhIGxvYWQgYW5kIGEgc3RvcmUuLi4KLQkgaW4gZmFjdCwgaXQgaXMgdGhlIG9ubHkgd2F5IHRvIHN0b3JlKQotKi8KLSNkZWZpbmUJbW92cV9tMnIodmFyLCByZWcpCW1teF9tMnIobW92cSwgdmFyLCByZWcpCi0jZGVmaW5lCW1vdnFfcjJtKHJlZywgdmFyKQltbXhfcjJtKG1vdnEsIHJlZywgdmFyKQotI2RlZmluZQltb3ZxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKG1vdnEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCW1vdnEodmFycywgdmFyZCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlMSwgJSVtbTBcblx0IiBcCi0JCQkgICAgICAibW92cSAlJW1tMCwgJTAiIFwKLQkJCSAgICAgIDogIj1YIiAodmFyZCkgXAotCQkJICAgICAgOiAiWCIgKHZhcnMpKQotCi0KLS8qCTF4MzIgTU9WZSBEb3VibGV3b3JkCi0JKGxpa2UgbW92cSwgdGhpcyBpcyBib3RoIGxvYWQgYW5kIHN0b3JlLi4uCi0JIGJ1dCBpcyBtb3N0IHVzZWZ1bCBmb3IgbW92aW5nIHRoaW5ncyBiZXR3ZWVuCi0JIG1teCByZWdpc3RlcnMgYW5kIG9yZGluYXJ5IHJlZ2lzdGVycykKLSovCi0jZGVmaW5lCW1vdmRfbTJyKHZhciwgcmVnKQltbXhfbTJyKG1vdmQsIHZhciwgcmVnKQotI2RlZmluZQltb3ZkX3IybShyZWcsIHZhcikJbW14X3IybShtb3ZkLCByZWcsIHZhcikKLSNkZWZpbmUJbW92ZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihtb3ZkLCByZWdzLCByZWdkKQotI2RlZmluZQltb3ZkKHZhcnMsIHZhcmQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmQgJTEsICUlbW0wXG5cdCIgXAotCQkJICAgICAgIm1vdmQgJSVtbTAsICUwIiBcCi0JCQkgICAgICA6ICI9WCIgKHZhcmQpIFwKLQkJCSAgICAgIDogIlgiICh2YXJzKSkKLQotCi0vKgkyeDMyLCA0eDE2LCBhbmQgOHg4IFBhcmFsbGVsIEFERHMKLSovCi0jZGVmaW5lCXBhZGRkX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBhZGRkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRkLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBhZGRkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBhZGR3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdywgdmFyLCByZWcpCi0jZGVmaW5lCXBhZGR3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkdyh2YXJzLCB2YXJkKQltbXhfbTJtKHBhZGR3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBhZGRiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkYiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhZGRiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRiLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkYih2YXJzLCB2YXJkKQltbXhfbTJtKHBhZGRiLCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgYW5kIDh4OCBQYXJhbGxlbCBBRERzIHVzaW5nIFNhdHVyYXRpb24gYXJpdGhtZXRpYwotKi8KLSNkZWZpbmUJcGFkZHN3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkc3csIHZhciwgcmVnKQotI2RlZmluZQlwYWRkc3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZHN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkc3codmFycywgdmFyZCkJbW14X20ybShwYWRkc3csIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcGFkZHNiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkc2IsIHZhciwgcmVnKQotI2RlZmluZQlwYWRkc2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZHNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkc2IodmFycywgdmFyZCkJbW14X20ybShwYWRkc2IsIHZhcnMsIHZhcmQpCi0KLQotLyoJNHgxNiBhbmQgOHg4IFBhcmFsbGVsIEFERHMgdXNpbmcgVW5zaWduZWQgU2F0dXJhdGlvbiBhcml0aG1ldGljCi0qLwotI2RlZmluZQlwYWRkdXN3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdXN3LCB2YXIsIHJlZykKLSNkZWZpbmUJcGFkZHVzd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdXN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkdXN3KHZhcnMsIHZhcmQpCW1teF9tMm0ocGFkZHVzdywgdmFycywgdmFyZCkKLQotI2RlZmluZQlwYWRkdXNiX20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdXNiLCB2YXIsIHJlZykKLSNkZWZpbmUJcGFkZHVzYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkdXNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWRkdXNiKHZhcnMsIHZhcmQpCW1teF9tMm0ocGFkZHVzYiwgdmFycywgdmFyZCkKLQotCi0vKgkyeDMyLCA0eDE2LCBhbmQgOHg4IFBhcmFsbGVsIFNVQnMKLSovCi0jZGVmaW5lCXBzdWJkX20ycih2YXIsIHJlZykJbW14X20ycihwc3ViZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBzdWJkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJkLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3ViZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBzdWJkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBzdWJ3X20ycih2YXIsIHJlZykJbW14X20ycihwc3VidywgdmFyLCByZWcpCi0jZGVmaW5lCXBzdWJ3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJ3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Vidyh2YXJzLCB2YXJkKQltbXhfbTJtKHBzdWJ3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBzdWJiX20ycih2YXIsIHJlZykJbW14X20ycihwc3ViYiwgdmFyLCByZWcpCi0jZGVmaW5lCXBzdWJiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJiLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3ViYih2YXJzLCB2YXJkKQltbXhfbTJtKHBzdWJiLCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgYW5kIDh4OCBQYXJhbGxlbCBTVUJzIHVzaW5nIFNhdHVyYXRpb24gYXJpdGhtZXRpYwotKi8KLSNkZWZpbmUJcHN1YnN3X20ycih2YXIsIHJlZykJbW14X20ycihwc3Vic3csIHZhciwgcmVnKQotI2RlZmluZQlwc3Vic3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Vic3codmFycywgdmFyZCkJbW14X20ybShwc3Vic3csIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcHN1YnNiX20ycih2YXIsIHJlZykJbW14X20ycihwc3Vic2IsIHZhciwgcmVnKQotI2RlZmluZQlwc3Vic2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Vic2IodmFycywgdmFyZCkJbW14X20ybShwc3Vic2IsIHZhcnMsIHZhcmQpCi0KLQotLyoJNHgxNiBhbmQgOHg4IFBhcmFsbGVsIFNVQnMgdXNpbmcgVW5zaWduZWQgU2F0dXJhdGlvbiBhcml0aG1ldGljCi0qLwotI2RlZmluZQlwc3VidXN3X20ycih2YXIsIHJlZykJbW14X20ycihwc3VidXN3LCB2YXIsIHJlZykKLSNkZWZpbmUJcHN1YnVzd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3VidXN3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3VidXN3KHZhcnMsIHZhcmQpCW1teF9tMm0ocHN1YnVzdywgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc3VidXNiX20ycih2YXIsIHJlZykJbW14X20ycihwc3VidXNiLCB2YXIsIHJlZykKLSNkZWZpbmUJcHN1YnVzYl9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3VidXNiLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3VidXNiKHZhcnMsIHZhcmQpCW1teF9tMm0ocHN1YnVzYiwgdmFycywgdmFyZCkKLQotCi0vKgk0eDE2IFBhcmFsbGVsIE1VTHMgZ2l2aW5nIExvdyA0eDE2IHBvcnRpb25zIG9mIHJlc3VsdHMKLSovCi0jZGVmaW5lCXBtdWxsd19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGx3LCB2YXIsIHJlZykKLSNkZWZpbmUJcG11bGx3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxsdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcG11bGx3KHZhcnMsIHZhcmQpCW1teF9tMm0ocG11bGx3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgUGFyYWxsZWwgTVVMcyBnaXZpbmcgSGlnaCA0eDE2IHBvcnRpb25zIG9mIHJlc3VsdHMKLSovCi0jZGVmaW5lCXBtdWxod19tMnIodmFyLCByZWcpCW1teF9tMnIocG11bGh3LCB2YXIsIHJlZykKLSNkZWZpbmUJcG11bGh3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxodywgcmVncywgcmVnZCkKLSNkZWZpbmUJcG11bGh3KHZhcnMsIHZhcmQpCW1teF9tMm0ocG11bGh3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYtPjJ4MzIgUGFyYWxsZWwgTXVsLUFERAotCShtdWxzIGxpa2UgcG11bGx3LCB0aGVuIGFkZHMgYWRqYWNlbnQgMTYtYml0IGZpZWxkcwotCSBpbiB0aGUgbXVsdGlwbHkgcmVzdWx0IHRvIG1ha2UgdGhlIGZpbmFsIDJ4MzIgcmVzdWx0KQotKi8KLSNkZWZpbmUJcG1hZGR3ZF9tMnIodmFyLCByZWcpCW1teF9tMnIocG1hZGR3ZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBtYWRkd2RfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1hZGR3ZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcG1hZGR3ZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBtYWRkd2QsIHZhcnMsIHZhcmQpCi0KLQotLyoJMXg2NCBiaXR3aXNlIEFORAotKi8KLSNpZmRlZglCUk9LRU5fUEFORAotI2RlZmluZQlwYW5kX20ycih2YXIsIHJlZykgXAotCXsgXAotCQltbXhfbTJyKHBhbmRuLCAobW14X3QpIC0xTEwsIHJlZyk7IFwKLQkJbW14X20ycihwYW5kbiwgdmFyLCByZWcpOyBcCi0JfQotI2RlZmluZQlwYW5kX3IycihyZWdzLCByZWdkKSBcCi0JeyBcCi0JCW1teF9tMnIocGFuZG4sIChtbXhfdCkgLTFMTCwgcmVnZCk7IFwKLQkJbW14X3IycihwYW5kbiwgcmVncywgcmVnZCkgXAotCX0KLSNkZWZpbmUJcGFuZCh2YXJzLCB2YXJkKSBcCi0JeyBcCi0JCW1vdnFfbTJyKHZhcmQsIG1tMCk7IFwKLQkJbW14X20ycihwYW5kbiwgKG1teF90KSAtMUxMLCBtbTApOyBcCi0JCW1teF9tMnIocGFuZG4sIHZhcnMsIG1tMCk7IFwKLQkJbW92cV9yMm0obW0wLCB2YXJkKTsgXAotCX0KLSNlbHNlCi0jZGVmaW5lCXBhbmRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhbmQsIHZhciwgcmVnKQotI2RlZmluZQlwYW5kX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhbmQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBhbmQodmFycywgdmFyZCkJbW14X20ybShwYW5kLCB2YXJzLCB2YXJkKQotI2VuZGlmCi0KLQotLyoJMXg2NCBiaXR3aXNlIEFORCB3aXRoIE5vdCB0aGUgZGVzdGluYXRpb24KLSovCi0jZGVmaW5lCXBhbmRuX20ycih2YXIsIHJlZykJbW14X20ycihwYW5kbiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhbmRuX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhbmRuLCByZWdzLCByZWdkKQotI2RlZmluZQlwYW5kbih2YXJzLCB2YXJkKQltbXhfbTJtKHBhbmRuLCB2YXJzLCB2YXJkKQotCi0KLS8qCTF4NjQgYml0d2lzZSBPUgotKi8KLSNkZWZpbmUJcG9yX20ycih2YXIsIHJlZykJbW14X20ycihwb3IsIHZhciwgcmVnKQotI2RlZmluZQlwb3JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG9yLCByZWdzLCByZWdkKQotI2RlZmluZQlwb3IodmFycywgdmFyZCkJbW14X20ybShwb3IsIHZhcnMsIHZhcmQpCi0KLQotLyoJMXg2NCBiaXR3aXNlIGVYY2x1c2l2ZSBPUgotKi8KLSNkZWZpbmUJcHhvcl9tMnIodmFyLCByZWcpCW1teF9tMnIocHhvciwgdmFyLCByZWcpCi0jZGVmaW5lCXB4b3JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHhvciwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHhvcih2YXJzLCB2YXJkKQltbXhfbTJtKHB4b3IsIHZhcnMsIHZhcmQpCi0KLQotLyoJMngzMiwgNHgxNiwgYW5kIDh4OCBQYXJhbGxlbCBDb01QYXJlIGZvciBFUXVhbGl0eQotCShyZXN1bHRpbmcgZmllbGRzIGFyZSBlaXRoZXIgMCBvciAtMSkKLSovCi0jZGVmaW5lCXBjbXBlcWRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBlcWQsIHZhciwgcmVnKQotI2RlZmluZQlwY21wZXFkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBlcWQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBjbXBlcWQodmFycywgdmFyZCkJbW14X20ybShwY21wZXFkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBjbXBlcXdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBlcXcsIHZhciwgcmVnKQotI2RlZmluZQlwY21wZXF3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBlcXcsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBjbXBlcXcodmFycywgdmFyZCkJbW14X20ybShwY21wZXF3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBjbXBlcWJfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBjbXBlcWIsIHZhciwgcmVnKQotI2RlZmluZQlwY21wZXFiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBjbXBlcWIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBjbXBlcWIodmFycywgdmFyZCkJbW14X20ybShwY21wZXFiLCB2YXJzLCB2YXJkKQotCi0KLS8qCTJ4MzIsIDR4MTYsIGFuZCA4eDggUGFyYWxsZWwgQ29NUGFyZSBmb3IgR3JlYXRlciBUaGFuCi0JKHJlc3VsdGluZyBmaWVsZHMgYXJlIGVpdGhlciAwIG9yIC0xKQotKi8KLSNkZWZpbmUJcGNtcGd0ZF9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGd0ZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBjbXBndGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGd0ZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcGNtcGd0ZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBjbXBndGQsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcGNtcGd0d19tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGd0dywgdmFyLCByZWcpCi0jZGVmaW5lCXBjbXBndHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGd0dywgcmVncywgcmVnZCkKLSNkZWZpbmUJcGNtcGd0dyh2YXJzLCB2YXJkKQltbXhfbTJtKHBjbXBndHcsIHZhcnMsIHZhcmQpCi0KLSNkZWZpbmUJcGNtcGd0Yl9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGd0YiwgdmFyLCByZWcpCi0jZGVmaW5lCXBjbXBndGJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGd0YiwgcmVncywgcmVnZCkKLSNkZWZpbmUJcGNtcGd0Yih2YXJzLCB2YXJkKQltbXhfbTJtKHBjbXBndGIsIHZhcnMsIHZhcmQpCi0KLQotLyoJMXg2NCwgMngzMiwgYW5kIDR4MTYgUGFyYWxsZWwgU2hpZnQgTGVmdCBMb2dpY2FsCi0qLwotI2RlZmluZQlwc2xscV9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNsbHEsIGltbSwgcmVnKQotI2RlZmluZQlwc2xscV9tMnIodmFyLCByZWcpCW1teF9tMnIocHNsbHEsIHZhciwgcmVnKQotI2RlZmluZQlwc2xscV9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc2xscSwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNsbHEodmFycywgdmFyZCkJbW14X20ybShwc2xscSwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc2xsZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNsbGQsIGltbSwgcmVnKQotI2RlZmluZQlwc2xsZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNsbGQsIHZhciwgcmVnKQotI2RlZmluZQlwc2xsZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc2xsZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNsbGQodmFycywgdmFyZCkJbW14X20ybShwc2xsZCwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc2xsd19pMnIoaW1tLCByZWcpCW1teF9pMnIocHNsbHcsIGltbSwgcmVnKQotI2RlZmluZQlwc2xsd19tMnIodmFyLCByZWcpCW1teF9tMnIocHNsbHcsIHZhciwgcmVnKQotI2RlZmluZQlwc2xsd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc2xsdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNsbHcodmFycywgdmFyZCkJbW14X20ybShwc2xsdywgdmFycywgdmFyZCkKLQotCi0vKgkxeDY0LCAyeDMyLCBhbmQgNHgxNiBQYXJhbGxlbCBTaGlmdCBSaWdodCBMb2dpY2FsCi0qLwotI2RlZmluZQlwc3JscV9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybHEsIGltbSwgcmVnKQotI2RlZmluZQlwc3JscV9tMnIodmFyLCByZWcpCW1teF9tMnIocHNybHEsIHZhciwgcmVnKQotI2RlZmluZQlwc3JscV9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JscSwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNybHEodmFycywgdmFyZCkJbW14X20ybShwc3JscSwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc3JsZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybGQsIGltbSwgcmVnKQotI2RlZmluZQlwc3JsZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNybGQsIHZhciwgcmVnKQotI2RlZmluZQlwc3JsZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JsZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNybGQodmFycywgdmFyZCkJbW14X20ybShwc3JsZCwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwc3Jsd19pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybHcsIGltbSwgcmVnKQotI2RlZmluZQlwc3Jsd19tMnIodmFyLCByZWcpCW1teF9tMnIocHNybHcsIHZhciwgcmVnKQotI2RlZmluZQlwc3Jsd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JsdywgcmVncywgcmVnZCkKLSNkZWZpbmUJcHNybHcodmFycywgdmFyZCkJbW14X20ybShwc3JsdywgdmFycywgdmFyZCkKLQotCi0vKgkyeDMyIGFuZCA0eDE2IFBhcmFsbGVsIFNoaWZ0IFJpZ2h0IEFyaXRobWV0aWMKLSovCi0jZGVmaW5lCXBzcmFkX2kycihpbW0sIHJlZykJbW14X2kycihwc3JhZCwgaW1tLCByZWcpCi0jZGVmaW5lCXBzcmFkX20ycih2YXIsIHJlZykJbW14X20ycihwc3JhZCwgdmFyLCByZWcpCi0jZGVmaW5lCXBzcmFkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmFkLCByZWdzLCByZWdkKQotI2RlZmluZQlwc3JhZCh2YXJzLCB2YXJkKQltbXhfbTJtKHBzcmFkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBzcmF3X2kycihpbW0sIHJlZykJbW14X2kycihwc3JhdywgaW1tLCByZWcpCi0jZGVmaW5lCXBzcmF3X20ycih2YXIsIHJlZykJbW14X20ycihwc3JhdywgdmFyLCByZWcpCi0jZGVmaW5lCXBzcmF3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmF3LCByZWdzLCByZWdkKQotI2RlZmluZQlwc3Jhdyh2YXJzLCB2YXJkKQltbXhfbTJtKHBzcmF3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTJ4MzItPjR4MTYgYW5kIDR4MTYtPjh4OCBQQUNLIGFuZCBTaWduZWQgU2F0dXJhdGUKLQkocGFja3Mgc291cmNlIGFuZCBkZXN0IGZpZWxkcyBpbnRvIGRlc3QgaW4gdGhhdCBvcmRlcikKLSovCi0jZGVmaW5lCXBhY2tzc2R3X20ycih2YXIsIHJlZykJbW14X20ycihwYWNrc3NkdywgdmFyLCByZWcpCi0jZGVmaW5lCXBhY2tzc2R3X3IycihyZWdzLCByZWdkKSBtbXhfcjJyKHBhY2tzc2R3LCByZWdzLCByZWdkKQotI2RlZmluZQlwYWNrc3Nkdyh2YXJzLCB2YXJkKQltbXhfbTJtKHBhY2tzc2R3LCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXBhY2tzc3diX20ycih2YXIsIHJlZykJbW14X20ycihwYWNrc3N3YiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhY2tzc3diX3IycihyZWdzLCByZWdkKSBtbXhfcjJyKHBhY2tzc3diLCByZWdzLCByZWdkKQotI2RlZmluZQlwYWNrc3N3Yih2YXJzLCB2YXJkKQltbXhfbTJtKHBhY2tzc3diLCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYtPjh4OCBQQUNLIGFuZCBVbnNpZ25lZCBTYXR1cmF0ZQotCShwYWNrcyBzb3VyY2UgYW5kIGRlc3QgZmllbGRzIGludG8gZGVzdCBpbiB0aGF0IG9yZGVyKQotKi8KLSNkZWZpbmUJcGFja3Vzd2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhY2t1c3diLCB2YXIsIHJlZykKLSNkZWZpbmUJcGFja3Vzd2JfcjJyKHJlZ3MsIHJlZ2QpIG1teF9yMnIocGFja3Vzd2IsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBhY2t1c3diKHZhcnMsIHZhcmQpCW1teF9tMm0ocGFja3Vzd2IsIHZhcnMsIHZhcmQpCi0KLQotLyoJMngzMi0+MXg2NCwgNHgxNi0+MngzMiwgYW5kIDh4OC0+NHgxNiBVTlBhQ0sgTG93Ci0JKGludGVybGVhdmVzIGxvdyBoYWxmIG9mIGRlc3Qgd2l0aCBsb3cgaGFsZiBvZiBzb3VyY2UKLQkgYXMgcGFkZGluZyBpbiBlYWNoIHJlc3VsdCBmaWVsZCkKLSovCi0jZGVmaW5lCXB1bnBja2xkcV9tMnIodmFyLCByZWcpCW1teF9tMnIocHVucGNrbGRxLCB2YXIsIHJlZykKLSNkZWZpbmUJcHVucGNrbGRxX3IycihyZWdzLCByZWdkKSBtbXhfcjJyKHB1bnBja2xkcSwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHVucGNrbGRxKHZhcnMsIHZhcmQpCW1teF9tMm0ocHVucGNrbGRxLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXB1bnBja2x3ZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHVucGNrbHdkLCB2YXIsIHJlZykKLSNkZWZpbmUJcHVucGNrbHdkX3IycihyZWdzLCByZWdkKSBtbXhfcjJyKHB1bnBja2x3ZCwgcmVncywgcmVnZCkKLSNkZWZpbmUJcHVucGNrbHdkKHZhcnMsIHZhcmQpCW1teF9tMm0ocHVucGNrbHdkLCB2YXJzLCB2YXJkKQotCi0jZGVmaW5lCXB1bnBja2xid19tMnIodmFyLCByZWcpCW1teF9tMnIocHVucGNrbGJ3LCB2YXIsIHJlZykKLSNkZWZpbmUJcHVucGNrbGJ3X3IycihyZWdzLCByZWdkKSBtbXhfcjJyKHB1bnBja2xidywgcmVncywgcmVnZCkKLSNkZWZpbmUJcHVucGNrbGJ3KHZhcnMsIHZhcmQpCW1teF9tMm0ocHVucGNrbGJ3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTJ4MzItPjF4NjQsIDR4MTYtPjJ4MzIsIGFuZCA4eDgtPjR4MTYgVU5QYUNLIEhpZ2gKLQkoaW50ZXJsZWF2ZXMgaGlnaCBoYWxmIG9mIGRlc3Qgd2l0aCBoaWdoIGhhbGYgb2Ygc291cmNlCi0JIGFzIHBhZGRpbmcgaW4gZWFjaCByZXN1bHQgZmllbGQpCi0qLwotI2RlZmluZQlwdW5wY2toZHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB1bnBja2hkcSwgdmFyLCByZWcpCi0jZGVmaW5lCXB1bnBja2hkcV9yMnIocmVncywgcmVnZCkgbW14X3IycihwdW5wY2toZHEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB1bnBja2hkcSh2YXJzLCB2YXJkKQltbXhfbTJtKHB1bnBja2hkcSwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwdW5wY2tod2RfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB1bnBja2h3ZCwgdmFyLCByZWcpCi0jZGVmaW5lCXB1bnBja2h3ZF9yMnIocmVncywgcmVnZCkgbW14X3IycihwdW5wY2tod2QsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB1bnBja2h3ZCh2YXJzLCB2YXJkKQltbXhfbTJtKHB1bnBja2h3ZCwgdmFycywgdmFyZCkKLQotI2RlZmluZQlwdW5wY2toYndfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB1bnBja2hidywgdmFyLCByZWcpCi0jZGVmaW5lCXB1bnBja2hid19yMnIocmVncywgcmVnZCkgbW14X3IycihwdW5wY2toYncsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXB1bnBja2hidyh2YXJzLCB2YXJkKQltbXhfbTJtKHB1bnBja2hidywgdmFycywgdmFyZCkKLQotCi0vKglFbXB0eSBNTXggU3RhdGUKLQkodXNlZCB0byBjbGVhbi11cCB3aGVuIGdvaW5nIGZyb20gbW14IHRvIGZsb2F0IHVzZQotCSBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIHNoYXJlZCBieSBib3RoOyBub3RlIHRoYXQKLQkgdGhlcmUgaXMgbm8gZmxvYXQtdG8tbW14IG9wZXJhdGlvbiBuZWVkZWQsIGJlY2F1c2UKLQkgb25seSB0aGUgZmxvYXQgdGFnIHdvcmQgaW5mbyBpcyBjb3JydXB0aWJsZSkKLSovCi0jaWZkZWYJTU1YX1RSQUNFCi0KLSNpZmRlZiBfX2NsYW5nX18KLSNkZWZpbmUgZW1tcygpIFwKLQl7IFwKLQkJcHJpbnRmKCJlbW1zKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIpOyBcCi0JfQotI2Vsc2UKLSNkZWZpbmUJZW1tcygpIFwKLQl7IFwKLQkJcHJpbnRmKCJlbW1zKClcbiIpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIgXAotICAgICAgICAgICAgICAgICAgICAgICAgInN0KDEpIiwic3QoMikiLCJzdCgzKSIsInN0KDQpIiwic3QoNSkiLCJzdCg2KSIsInN0KDcpIik7IFwKLQl9Ci0jZW5kaWYKLQotI2Vsc2UKLQotI2lmZGVmIF9fY2xhbmdfXwotI2RlZmluZQllbW1zKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlbW1zIikKLSNlbHNlCi0jZGVmaW5lCWVtbXMoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImVtbXMiOjo6IFwKLSAgICAgICAgICAgICAgICAgICAgICAic3QoMSkiLCJzdCgyKSIsInN0KDMpIiwic3QoNCkiLCJzdCg1KSIsInN0KDYpIiwic3QoNykiKQotI2VuZGlmCi0KLSNlbmRpZgotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vbW90aWZfZ29vbTEuaCBiL2dzdC9nb29tL21vdGlmX2dvb20xLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZjM4MWIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vbW90aWZfZ29vbTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNDQgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotc3RhdGljIE1vdGlmIENPTlZfTU9USUYxID0gewotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDEzLDksOSw3LDIsMiw5LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLAotCTExLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTIsNyw0LDAsMCwwLDIsMCwwLDMsMTQsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTIsMTAsOSw5LDQsMSwwLAotCTEsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxMCwzLDAsMCwwLDEsMSwzLDUsMCwwLDEsMTQsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsNiwzLDEsMSw0LDksMSwKLQkxLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTAsMywwLDAsMiw3LDEzLDE0LDE0LDE0LDcsMCwwLDIsMTQsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTIsMSw5LDE1LDE1LDE1LDE1LDMsCi0JMCwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDQsCi0JMCwwLDIsMTAsMTUsMTUsMTUsMTUsMTUsMTUsMSwwLDAsMTAsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsOSwwLDIsMTQsMTUsMTUsMTUsNywKLQkwLDksMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCw2LDAsMCwKLQkyLDksMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTMsMCwwLDMsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTEsMCwwLDEwLDE1LDE1LDE1LDksCi0JMCw5LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTMsMywwLDEsNSwKLQk1LDQsNCw0LDYsMTIsMTUsMTUsMTUsMTMsMCwwLDcsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMCwwLDUsMTUsMTUsMTUsMTAsCi0JMCw3LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTEsMSwwLDMsMywxLAotCTAsMCwwLDAsMCwwLDUsMTMsMTUsMTIsMCwwLDEzLDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEzLDE0LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDAsMCwxLDE1LDE1LDE1LDEyLAotCTAsMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEwLDEsMiw0LDAsMCwxLAotCTksMTIsMTIsMTIsOSwzLDAsMiwxNCw1LDAsNywxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCw3LDQsNCwxLDEsMTIsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMSwwLDAsMTIsMTUsMTUsMTUsCi0JMSwwLDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsMCwzLDIsMCwwLDMsMTIsCi0JMTUsMTUsMTUsMTUsMTUsMTQsMiwxLDEzLDIsMCwxMiwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCwzLDAsMCwwLDAsMCwyLAotCTEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDEsMCwwLDgsMTUsMTUsMTUsCi0JMSwwLDksMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwyLDEsMCwwLDAsOSwxNCwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNCwxLDEsMTEsMCwzLDE0LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDcsNCwxMSwxMiwxMCwxLDAsCi0JMywxMiwxNSwxNSwxNSwxNSwxNSwxNSwxMywxLDEsMCw0LDE1LDE1LDE1LAotCTIsMCwxMCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE0LDIsMSwwLDAsMywxMiwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxMSwwLDUsOSwxLDEyLDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDUsMSwxMywxNSwxNSwxMiwxLAotCTAsMSw5LDE1LDE1LDE1LDE1LDE1LDE0LDIsNSwwLDEsMTQsMTUsMTUsCi0JMiwwLDcsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNCwzLDAsMCwwLDcsMTQsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsOSwwLDgsNyw0LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDcsMCw3LDgsMTEsMTUsMTMsCi0JMiwwLDAsMywxMCwxNSwxNSwxNSwxNSw1LDExLDAsMCwxMSwxNSwxNSwKLQk2LDAsMiwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDYsMCwwLDAsOCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSw2LDAsNCwwLDYsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTQsOSwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMSwwLDMsMywwLDgsMTUsCi0JMTQsNSwwLDAsMCw0LDEyLDE1LDE1LDUsMTMsMiwwLDYsMTUsMTUsCi0JMTIsMCwwLDExLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTAsMCwwLDAsOCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxMCwxLDcsNiw0LDEzLDE1LDE1LDE1LDE1LDEzLDExLAotCTYsMCw4LDExLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEsMSwxMSwyLDAsNSwKLQkxNCwxNSw4LDAsMCwwLDAsNywxNSw1LDE0LDYsMCwyLDE1LDE1LAotCTE1LDMsMCw1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTMsMSwwLDAsNywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSw3LDksMTUsMTUsMTUsMTUsMTUsMTUsMTIsNiwyLDEsCi0JMSwxLDgsNiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw0LDAsNiwxMiwxLDAsCi0JMywxMywxNSwxMSwyLDAsMCwwLDgsNCwxNCwxMCwwLDAsMTMsMTUsCi0JMTUsNywwLDEsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSw1LDAsMCw1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDEzLDE1LDE1LDE1LDE1LDE0LDgsMywxLDIsNywxMSwKLQk1LDQsNSw2LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDgsMCwxLDE0LDExLDAsCi0JMCwxLDksMTUsMTQsNSwwLDAsMiw0LDE0LDEzLDAsMCwxMCwxNSwKLQkxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxMCwwLDAsMSwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNCwxMyw3LDIsMCw1LDksMTUsMTUsMTUsCi0JNSwzLDYsOSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywwLDAsOSwxNSwxMiwKLQkyLDAsMCw0LDEzLDE0LDQsMCwzLDIsMTIsMTUsMSwwLDUsMTUsCi0JMTUsMTQsMSwwLDgsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwyLDAsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDEyLDExLDYsMSwwLDIsMywxMCwxNSwxNSwxNSwxNSw3LAotCTEsMiw0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDUsMCwzLDE0LDE1LAotCTksMiwwLDAsMSw2LDEyLDEzLDEzLDEsOSwxMiwwLDAsMiwxNCwKLQkxNSwxNSw0LDAsNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDEwLDAsMCwyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTEzLDksNiwwLDEsMiw5LDEwLDE1LDE1LDE1LDE1LDE0LDcsMSwwLAotCTYsMiw0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLDAsMCw5LDE1LAotCTQsNCwxMSw2LDEsMCwwLDEsMSwwLDEwLDQsMCwwLDAsMTIsCi0JMTUsMTUsOSwwLDEsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwzLDAsMCw4LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEzLDEyLDQsNCwKLQkxLDEsMywxMCwxMiwxNSwxNSwxNSwxNSwxNSw5LDIsMSwwLDEsNiwKLQk2LDAsMTAsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNCwwLDMsMTQsCi0JNCwzLDE1LDE1LDE0LDksNyw5LDEsMCwwLDAsMCwxLDAsNywKLQkxNSwxNSwxMywwLDAsOSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTEzLDAsMCwxLDE0LDE1LDE1LDE1LDE1LDE1LDEyLDksMSwwLDEsNCwKLQk3LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDgsMiwwLDAsMCwyLDEzLDksCi0JMCw0LDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLDAsMCw5LAotCTMsMCw4LDE0LDE1LDE1LDE1LDE1LDEwLDUsNCw0LDcsNCwwLDMsCi0JMTUsMTUsMTUsNCwwLDMsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQk1LDAsMCw1LDE1LDE1LDE1LDE1LDE0LDgsNyw4LDEwLDEyLDE0LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDExLDEsMCwwLDAsNSwxMSwxNSwxMywxLAotCTEsMTMsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMywwLDQsCi0JNCwwLDAsMiw2LDEwLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEwLDAsMCwKLQkxMiwxNSwxNSw5LDAsMCwxMiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTEsMCwwLDEwLDE1LDE1LDE1LDE1LDE1LDEzLDE0LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE0LDcsMSwwLDAsMywxMiwxNSwxNSwxNSw2LDAsCi0JNywxNSwxNSwxNSwxMiwxMCw5LDEwLDEyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDksMCwwLAotCTgsMywxLDQsMSwwLDEsMTIsMTUsMTUsMTUsMTUsMTUsMTQsMiwwLAotCTYsMTUsMTUsMTUsMiwwLDYsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkwLDAsMSwxNCwxNSwxNSwxNSwxNSwxNCw1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDcsMiwwLDAsMSw4LDE1LDE1LDE1LDE1LDEyLDAsMiwKLQkxNCwxNSwxMiw0LDAsMCwwLDAsMCwxLDUsMTAsMTQsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMCwwLAotCTUsNCwxLDE0LDE1LDEwLDcsMTMsMTUsMTUsMTUsMTUsMTUsMTUsOCwwLAotCTEsMTQsMTUsMTUsNywwLDEsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywKLQkwLDAsNCwxNSwxNSwxNSwxNSwxNSwxMywyLDEzLDE1LDE1LDE1LDE1LDE1LAotCTEyLDcsMCwwLDAsMCw1LDEyLDE1LDE1LDE1LDE1LDE0LDMsMCw5LAotCTExLDEsMCwwLDEsMSwwLDEsMCwwLDAsMCwyLDEyLDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDE1LDE1LDE1LDE1LDE1LDE1LDIsMCwKLQk1LDIsMSwxNCwxNSwxNCwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwwLAotCTAsMTAsMTUsMTUsMTMsMCwwLDksMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwKLQkwLDAsNCwxNSwxNSwxNSwxNSwxNSwxMiwwLDEyLDE1LDE1LDE1LDEyLDYsCi0JMCwwLDAsMCw2LDE0LDE1LDE1LDE1LDE1LDE1LDE1LDcsMCwwLDEyLAotCTEsMCwwLDIsMiwxLDEsNywxMiw4LDMsMCwwLDEsMTMsMTUsCi0JMTUsMTUsMTUsMTUsMTUsOCw0LDgsMTIsMTUsMTUsMTUsMTUsMTUsOCwwLAotCTQsMiwwLDE0LDE1LDExLDksMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMywKLQkwLDUsMTUsMTUsMTUsNSwwLDMsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwKLQkwLDAsNCwxNSwxNSwxNSwxNSwxNSwxMiwwLDEyLDE1LDEzLDMsMSwwLAotCTAsMCw1LDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDAsMCw3LDcsCi0JMCwwLDAsMCwwLDAsMCwxLDEyLDE1LDE1LDEyLDMsMCw1LDE1LAotCTE1LDE1LDE1LDE0LDUsMCwwLDAsMCwyLDIsMyw3LDE0LDksOCwKLQkxNCwyLDEsMTQsMTUsMiwxMiwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSw5LAotCTAsMCwxMywxNSwxNSwxMCwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywKLQkwLDAsNSwxNSwxNSwxNSwxNSwxNSwxMiwwLDExLDEwLDEsMCwwLDEsCi0JNSwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw2LDAsMiw3LDAsCi0JMCwwLDAsMSwyLDcsNCwwLDMsMTQsMTUsMTUsMTQsMiwwLDEyLAotCTE1LDE1LDE1LDksMCwxLDIsMSwwLDAsMCwwLDAsMSwzLDcsCi0JMTUsMywwLDE0LDE1LDQsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsCi0JMSwwLDgsMTUsMTUsMTQsMSwwLDgsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywKLQkwLDAsNCwxNSwxNSwxNSwxNSwxNSwxMiwwLDIsMCwwLDEsMTAsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTIsMCwwLDYsMCwwLAotCTAsMSwxMCwxNCwxNSwxNSwxMSwxLDAsOSwxNSwxNSwxNSw4LDAsOSwKLQkxNSwxNSwxMiw0LDgsMTQsMTUsOCwxLDAsMCwwLDAsMCwxLDksCi0JMTUsMiwwLDEzLDE1LDEsOSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQk2LDAsMSwxNCwxNSwxNCwxLDAsMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LAotCTEsMCwxLDE0LDE1LDE1LDE1LDE1LDEyLDEsMyw3LDksMTMsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMywwLDIsMywwLDQsCi0JMCw4LDE1LDE1LDE1LDE1LDE1LDEzLDEsMiwxNCwxNSwxNSwxMCwwLDYsCi0JMTUsMTQsMiw2LDE1LDE1LDE1LDEsMyw3LDMsMCwwLDAsMCwxLAotCTExLDEsMCwxMSwxMiwwLDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTExLDAsMCw5LDE1LDE1LDQsMCwwLDEyLDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JNiwwLDAsOSwxNSwxNSwxNSwxNSwxNSwxMiwxNCwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMSwwLDAsMywwLDgsMTQsCi0JMiw1LDE1LDE1LDE1LDE1LDE1LDE1LDUsMCw4LDE1LDE1LDEyLDAsNCwKLQkxNSw1LDIsMTQsMTUsMTUsMTAsMCwxMywxNSwxMywyLDQsNSw1LDAsCi0JOSwxLDAsMTAsOSwxLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTEzLDAsMCwzLDE1LDE1LDksMCwwLDgsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxMiwwLDAsMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwzLDAsMSwxLDUsMTQsMTUsCi0JMTEsMCwxMiwxNSwxNSwxNSwxNSwxNSwxNCwxLDEsMTQsMTUsMTIsMCw0LAotCTEwLDAsOSwxNSwxNSwxMSwxLDgsMTUsMTUsOCwxLDE0LDE1LDE0LDIsCi0JNSwwLDAsMTAsNiwyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDMsMCwwLDEyLDE1LDEzLDAsMCwyLDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMywwLDAsMTAsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsMCwwLDEsMCwxMSwxNSwxNSwKLQkxNSwyLDYsMTUsMTUsMTUsMTUsMTUsMTUsNiwwLDksMTUsMTMsMCw2LAotCTMsMCwxMywxNSwxNCwyLDYsMTUsMTUsMTMsMSw4LDE1LDE1LDE1LDQsCi0JMywxLDAsMTAsNywyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDksMCwwLDYsMTUsMTUsMywwLDAsMTMsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSw5LDAsMCwyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDExLDEwLDIsMCwzLDAsMywxNSwxNSwxNSwKLQkxNSw4LDEsMTQsMTUsMTUsMTUsMTUsMTUsMTMsMCwyLDE1LDksMSwxMCwKLQkwLDMsMTUsMTUsNiwyLDE0LDE1LDE0LDMsMSwxNCwxNSwxNSwxNSwyLAotCTQsMCwwLDEyLDUsMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNCwxLDAsMSwxNCwxNSw1LDAsMCwxMiwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDQsMCwwLDYsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTIsCi0JMTIsOSw1LDQsNCwzLDAsMCwwLDAsNCwwLDgsMTUsMTUsMTUsCi0JMTUsMTMsMSwxMCwxNSwxNSwxNSwxNSwxNSwxNSwyLDAsMTEsMyw1LDEwLAotCTAsNywxNSw5LDEsMTEsMTUsMTUsOCwwLDYsMTUsMTUsMTUsMTAsMCwKLQkzLDAsMCwxMywzLDYsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsNiwwLDAsMTIsMTUsNSwwLDAsNywxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDEzLDEsMCwwLDgsMTQsMTUsMTUsMTMsNiw0LDQsMSwwLAotCTAsMCwwLDAsMCwwLDIsMCwwLDQsMywwLDEyLDE1LDE1LDE1LAotCTE1LDE1LDUsMywxNSwxNSwxNSwxNSwxNCw4LDAsMCwxLDEsMTIsOSwKLQkwLDksMTAsMCw2LDE1LDE1LDE1LDIsMiwxNCwxNSwxNSwxMywyLDAsCi0JNCwwLDEsMTMsMCwxMCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxMywxLDAsMTAsMTUsMTAsMCwwLDUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSw5LDAsMCwwLDMsMiwyLDEsMCwwLDAsMSw0LAotCTQsNSwxMCwxMiwxMiwxMiwxMSwwLDAsMTEsNCwwLDEyLDE1LDE1LDE1LAotCTE1LDE1LDEyLDAsNywxMywxNSwxNSw1LDAsMCwwLDEsNiwxNSw5LAotCTAsMywwLDAsMSw2LDE0LDEwLDAsMTIsMTUsMTUsMTEsMiwwLDIsCi0JMywwLDMsMTIsMSwxMSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwzLDAsNiw4LDcsMCwwLDUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSw5LDEsMCwwLDAsMiw2LDEwLDEyLDEyLDE0LDE1LAotCTE1LDE1LDE1LDE1LDExLDUsNCwwLDIsMTQsNCwwLDEyLDE1LDE1LDE1LAotCTE1LDE1LDE1LDQsMCwzLDEzLDYsMCwwLDAsMSwyLDE0LDE1LDEyLAotCTAsMCwwLDAsMCwwLDIsMiw2LDE1LDE0LDgsMCwwLDAsNywKLQk0LDAsNCwxMiwwLDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDEyLDAsMCwwLDAsMCwwLDEsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxMiwyLDAsMCwwLDEsNiwxMSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwyLDEsMCwwLDksMTUsNiwwLDcsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTMsMiwwLDAsMCwwLDAsMCwxLDEyLDE1LDE1LDE1LAotCTQsMCwwLDAsMCwwLDAsNiwxMyw2LDEsMCwwLDQsMTMsMTUsCi0JNiwwLDYsMTIsMCwxMiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNCw1LDAsMCwwLDAsMCw1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTQsNSwwLDAsMCwwLDAsMiw0LDUsCi0JNywzLDYsMywwLDIsMCwyLDE1LDE1LDExLDAsMCw5LDE1LDE1LAotCTE1LDE1LDE1LDE1LDExLDAsMCwwLDAsMCwyLDExLDE1LDE1LDE1LDE1LAotCTEyLDEsMCwwLDEsNCw2LDEwLDIsMCwwLDAsNywxNCwxNSwxNSwKLQk5LDAsOSw5LDAsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTMsOSw4LDksNywxMywxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDYsMSwwLDAsMCwwLDAsCi0JMCwwLDAsMiw4LDAsMCw5LDE1LDE1LDE0LDQsMCwwLDMsMTAsCi0JMTQsMTUsMTUsMTUsMTUsMTMsMywwLDAsNCwxNCwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxMSwyLDAsMCwxLDEsMCwwLDAsMSwxMSwxNSwxNSwxNSwxNSwKLQk5LDAsMTAsNSwzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTIsMTAsNSw0LDYsCi0JMiw0LDEwLDE0LDgsMCwxLDE0LDE1LDE1LDE1LDE0LDUsMCwwLDAsCi0JMSwyLDQsNCw0LDMsMSwyLDksMTQsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTEsMTEsMTMsMTAsOSw5LDExLDE1LDE1LDE1LDE1LDE1LDE1LAotCTEwLDAsOCwyLDQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkyLDcsMTUsMTQsMSwwLDYsMTUsMTUsMTUsMTUsMTUsMTUsMTAsNiw0LAotCTIsMiw0LDQsNCwzLDksMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTEsMCwzLDEsNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLAotCTEsMTAsMTUsOSwwLDAsMTMsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTEsMCwxMSwxMSwxMSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDIsCi0JNSwxNSwxNCwyLDAsNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNCwxLDEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsMSwKLQkxMywxNSwxMSwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDgsMSwKLQkxNSwxNSw1LDAsMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxMCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDIsMywKLQkxNSwxNCwxLDAsNywxNSwxNSwxNSwxNSwxNSwxMywxNSwxNSwxNSwxNSwxNCwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxMiwxMiwxMSw5LDQsNywxNCwxNSwKLQkxNCwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDMsMCwxMCwKLQkxNSw5LDAsMCw4LDcsNCwyLDIsMSwwLDMsNCwzLDQsOSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNCwxMywxMSw3LDQsMiwwLDAsMCwwLDAsMCwxLDEyLDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE0LDEzLDExLDcsNCwyLDIsMTMsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwwLDMsMTEsCi0JNywxLDAsMCwwLDAsMCwxLDQsOSwxMSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCwxMiwxMSw5LDcsNCwKLQkzLDEsMCwwLDAsMCwwLDAsMCwwLDAsMiwxMSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxMSw4LAotCTQsMywxLDAsMCwwLDAsMyw4LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTEsMywwLDAsMCwKLQkwLDAsMCwyLDYsOSwxMiwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxMyw5LDYsMywxLDAsMCwwLDAsMCwwLAotCTAsMCwwLDAsMSw0LDcsMTEsMTIsMTIsMTIsMTQsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTIsMTEsNyw0LDIsMCwwLDAsCi0JMCwwLDAsMSw1LDEwLDEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTIsNywzLDEsMCwwLDAsMiw1LAotCTIsMCwyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDEzLDEyLAotCTExLDksNiw0LDIsMCwwLDAsMCwwLDAsMCwwLDEsMiw0LAotCTUsOSwxMSwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNCwxMiwxMSw3LDQsMywxLDAsMCwwLDAsMCwwLDAsMSwKLQk0LDUsMTAsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxMywxMCw1LDEsMCwwLDAsMSwwLDAsMiwxMywxNCwKLQkxLDAsOCwxNSwxNSwxNCwxMiwxMSw5LDgsNCwzLDIsMSwwLDAsCi0JMCwwLDAsMCwxLDMsMiwzLDUsOSwxMCwxMiwxMywxNCwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxMSwxMCw2LDQsCi0JMywxLDAsMCwwLDAsMCwwLDAsMCwxLDQsNywxMSwxMywxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDExLDQsMCwwLDAsMSw0LDksMTMsMTMsMSwwLDAsMSw3LAotCTAsMCw3LDgsNSwyLDAsMCwwLDAsMCwwLDEsMiwzLDQsCi0JNSw5LDEwLDEyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE0LDExLDgsNCwzLDEsMCwwLDAsMCwwLAotCTAsMCwwLDAsMSw0LDUsOSwxMiwxMywxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNCwxMiw5LDgsOCw3LDQsMiw1LDQsNSw1LDEyLDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTAsNSwKLQkxLDAsMSwzLDYsMTEsMTQsMTUsMTUsMTUsMTUsMTMsMTIsOCwzLDIsCi0JMCwwLDEsMSwzLDMsNCw1LDgsMTAsMTIsMTMsMTQsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTMsCi0JMTEsOSw2LDQsMiwxLDAsMCwwLDAsMCwwLDAsMSwyLDQsCi0JNiwxMCwxMSwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxMSw5LDcsCi0JNCwyLDEsMCwwLDAsMCwyLDQsNywxMiwxNCwxNCwxNCwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEwLDUsMSwxLDMsCi0JOCwxMiwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw5LAotCTMsMTEsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsOCw2LDksOSw5LDksOSw4LDUsNCw0LDMsMSwwLAotCTAsMCwwLDAsMSwyLDMsMiw0LDUsOSwxMSwxMiwxNCwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCwxMiw5LDUsMiwwLDAsMCwwLAotCTAsMSwyLDQsNywxMCwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDksNCwxLDMsOSwxMywxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywKLQkxMSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxMywzLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwyLDMsCi0JNSw4LDEwLDEyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDEyLDUsMiwwLDAsMCwxLDMsNCw3LDEwLAotCTEyLDEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTMsMTEsMTMsMTMsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTIsMTIsMTIsMTMsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsOCwxLDAsMSw0LDcsMTEsMTMsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxMyw3LDgsMTEsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0KLQl9OwpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vbW90aWZfZ29vbTIuaCBiL2dzdC9nb29tL21vdGlmX2dvb20yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZTkyYWYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vbW90aWZfZ29vbTIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNDQgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotc3RhdGljIE1vdGlmIENPTlZfTU9USUYyID0gewotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDUsMTQsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxMiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMCwxLDE0LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTAsMCwxMiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw2LDAsMTIsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSw3LDAsOCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywyLDAsMTAsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSw2LDAsMiwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw1LDAsMCwxMCwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDksMCwwLDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDksMCwwLDEsMTQsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSw4LDAsMCw4LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDgsMywwLDAsMCw5LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTEsMCwwLDIsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTMsOSw1LDMsNCwxLDAsMCwwLDAsNywxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE0LDQsMCwwLDQsMTEsMTMsMTMsMTUsMTUsMTQsMTIsMTAsOCw1LAotCTYsNCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxMiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotCTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxMyw5LDEwLDEzLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDEyLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotCTAsMCwwLDAsMCwyLDUsNiwwLDAsMCwwLDEyLDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JNSwwLDAsMCwzLDEwLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE0LDksMiwxLDAsMCwwLDEsNCw2LDYsMSwKLQkwLDAsMCw4LDEzLDE1LDE1LDE1LDEyLDEsMCwyLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsCi0JMiwwLDAsMCwwLDAsNCwxMiwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwzLDAsMCwxMCwxNSwxNSwxNSwxMCwKLQkwLDAsNCwxNSwxNSwxNSwxNSwxNSwxNSwyLDAsNiwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDUsCi0JMywxMSw1LDAsMCwwLDAsMCw0LDExLDE0LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDcsMCwwLDEzLDE1LDE1LDE1LDExLAotCTAsMCw3LDE1LDE1LDE1LDE1LDE1LDE1LDEsMCw5LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsOSwwLAotCTEzLDE1LDE1LDEyLDUsMCwwLDAsMCwwLDEsOCwxNCwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw3LDAsMSwxNCwxNSwxNSwxNSwxMSwKLQkwLDAsNywxNSwxNSwxNSwxNSwxNSwxNCwwLDAsOSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLDEsMTAsCi0JMTUsMTUsMTUsMTUsMTUsMTEsNSwwLDAsMCwwLDAsMSw2LDEzLDE1LAotCTE1LDE1LDE1LDE1LDE0LDgsMTEsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNiwwLDIsMTUsMTUsMTUsMTUsMTEsCi0JMCwwLDYsMTUsMTUsMTUsMTUsMTUsMTMsMCwwLDExLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTEsMSw2LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDUsMCwwLDAsMCwwLDAsNiwKLQkxNCwxNSwxNSwxNSw2LDAsNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw3LDAsNSwxNSwxNSwxNSwxNSwxMSwKLQkwLDAsNSwxNSwxNSwxNSwxNSwxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywyLDEsMTMsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTIsMiwwLDAsMCwwLDAsCi0JMSw2LDExLDcsMCwwLDQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNywwLDcsMTUsMTUsMTUsMTUsMTEsCi0JMCwwLDYsMTUsMTUsMTUsMTUsMTUsMTIsMCwwLDEyLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNSwwLDcsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTEsNSwwLDAsMCwKLQkwLDAsMCwwLDAsMSwxMSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw3LDAsMTAsMTUsMTUsMTUsMTUsMTEsCi0JMCwwLDYsMTUsMTUsMTUsMTUsMTUsMTIsMCwwLDEyLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsMCw0LDE0LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEzLDcsMCwKLQkwLDAsMCwwLDAsMSw2LDEyLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDcsMCwxMCwxNSwxNSwxNSwxNSwxMSwKLQkwLDAsNywxNSwxNSwxNSwxNSwxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxLDEsMTIsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTMsCi0JNSwwLDAsMCwwLDAsMCwwLDMsMTAsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNywwLDEwLDE1LDE1LDE1LDE1LDExLAotCTAsMCw3LDE1LDE1LDE1LDE1LDE1LDExLDAsMCwxMywxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDQsMCw4LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTEzLDAsMCwwLDEsMCwwLDAsMCwxLDEzLDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDcsMCwxMCwxNSwxNSwxNSwxNSwxMSwKLQkwLDAsOCwxNSwxNSwxNSwxNSwxNSw4LDAsMiwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDksMCw0LDE0LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LAotCTQsMCwwLDUsMTMsMTIsNiwyLDAsMiwxMywxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw3LDAsMTAsMTUsMTUsMTUsMTUsMTEsCi0JMCwwLDcsMTUsMTUsMTUsMTUsMTUsNCwwLDQsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxLDEsMTMsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTEsCi0JMCwwLDEsMTMsMTUsMTUsMTUsMTQsOSwxMywxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw1LDAsNiwxNSwxNSwxNSwxNSwxMSwKLQkwLDAsOCwxNSwxNSwxNSwxNSwxNSwyLDAsOCwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDUsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE0LDExLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDksCi0JMCwwLDEwLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDQsMCw0LDE1LDE1LDE1LDE1LDExLAotCTAsMCw3LDE1LDE1LDE1LDE1LDEzLDAsMCwxMSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDEwLDAsMywxNCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNCwzLDAsMTMsMTUsMTUsMTUsMTUsMTUsMTUsMTQsCi0JOSwxMSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw0LDAsNCwxNSwxNSwxNSwxNSwxMSwKLQkwLDAsOCwxNSwxNSwxNSwxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNCwyLDEsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTQsMywwLDAsOSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw2LDAsMywxNSwxNSwxNSwxNSwxMywKLQkxLDAsOCwxNSwxNSwxNSwxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSw5LDAsNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNCw0LDAsMCwwLDEwLDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDgsMCwyLDE1LDE1LDE1LDE1LDE1LAotCTMsMCwxMywxNSwxNSwxNSwxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxMywyLDEsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsNywwLDAsMCwwLDgsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsMCwxLDE0LDE1LDE1LDE1LDE1LAotCTExLDUsMTUsMTUsMTUsMTUsMTUsMTIsMCwwLDExLDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsNiwwLDcsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsOCwwLDAsMCwwLDAsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDAsMCwxMiwxNSwxNSwxNSwxNSwKLQkxNSwxNCwxNSwxNSwxNSwxNSwxNSwxMCwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxMywxLDIsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTAsMCwwLDAsNiw2LDAsMCwwLDUsMTIsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTIsMTIsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTMsMCwwLDExLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDksMCwxLDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsNywwLDgsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsOSwwLDAsNCwxNSwxNSw4LDAsMCwwLDEsNSwxMywxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiw4LDcsNiw1LDMsCi0JMywzLDQsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNywwLDYsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsMSwwLDEwLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDYsMCwzLDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTMsMSwwLDEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE0LDcsOCwxMywxNSwxNSwxNSwxMSwyLDAsMCwwLDAsNSwxMSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywzLDAsMCwwLDAsMCwwLAotCTAsMCwwLDUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTIsMSwwLDAsCi0JMywxMSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxLDAsMTAsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMywwLDUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSw5LDAsNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCw4LDEsMCwwLDAsMCwKLQk0LDEyLDE1LDE1LDE1LDE1LDE1LDE1LDQsMCwwLDAsMCwwLDAsMCwKLQkwLDAsMCwyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDQsMCwwLDAsCi0JMCwwLDksMTUsMTUsMTUsMTUsMTUsMTQsMSwwLDEwLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDIsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTQsNCwwLDExLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDgsMiwwLDAsCi0JMCwwLDQsMTAsMTQsMTUsMTUsMTUsNCwwLDAsMCwwLDAsMCwwLAotCTAsMCwwLDMsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNiwwLDAsMCwyLAotCTMsMCwwLDgsMTUsMTUsMTUsMTUsMTQsMSwwLDEwLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDEsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTQsNSwwLDQsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsOSwzLAotCTAsMCwwLDAsMiw1LDEwLDE1LDUsMCwxLDExLDExLDEyLDEzLDE1LAotCTExLDAsMCw3LDE1LDE1LDE1LDE1LDE1LDE1LDgsMCwwLDAsMSwxMiwKLQkxNCw2LDAsMCw3LDE0LDE1LDE1LDE0LDEsMCw5LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDIsMCwxMCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTksMCwxLDEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LAotCTEwLDIsMCwwLDAsMCwxLDE0LDQsMCwxLDE0LDE1LDE1LDE1LDE1LAotCTksMCwwLDksMTUsMTUsMTUsMTUsMTUsOSwwLDAsMCwwLDksMTUsCi0JMTUsMTUsNywwLDAsNiwxNCwxNSwxNSwzLDAsNiwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxLDAsOSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDksCi0JMCwwLDEsMTAsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTMsMSwwLDAsMCwxLDE0LDMsMCwwLDE0LDE1LDE1LDE1LDE1LAotCTUsMCwwLDExLDE1LDE1LDE1LDE1LDEzLDEsMCwwLDAsNiwxNSwxNSwKLQkxNSwxNSwxNSw4LDAsMCwyLDEwLDE1LDYsMCwzLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDIsMCwxMCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEzLDEsCi0JMCwwLDAsMCwzLDksMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsNiwxLDAsMCwwLDgsMTUsMSwwLDAsMTQsMTUsMTUsMTUsMTUsCi0JNCwwLDAsMTMsMTUsMTUsMTUsMTQsNCwwLDAsMCwzLDE0LDE1LDE1LAotCTE1LDE1LDE1LDE1LDUsMCwwLDEsMTQsOSwwLDEsMTQsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMSwwLDksMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMywxLAotCTAsMCwwLDAsMCwwLDQsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JOSwwLDAsMCwwLDcsMTUsMTUsMSwwLDAsMTQsMTUsMTUsMTUsMTQsCi0JMiwwLDEsMTQsMTUsMTUsMTUsMTIsMCwwLDAsMywxMywxNSwxNSwxNSwKLQkxNSwxNSwxNSw5LDAsMCwwLDEsMTQsMTIsMCwwLDEyLDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE0LDEsMCwxMCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLAotCTMsMCwwLDAsMCwwLDAsMSw4LDE0LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDksCi0JMCwwLDAsMCw3LDE1LDE1LDE1LDEsMCwwLDE0LDE1LDE1LDE1LDEzLAotCTAsMCwxLDE1LDE1LDE1LDE1LDEyLDAsMCwwLDYsMTQsMTUsMTUsMTUsCi0JMTUsMTUsMTIsMCwwLDAsMCwzLDE0LDEyLDAsMCwxMiwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxMiwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxMywzLDAsMCwwLDAsMCwwLDEsNiwxMywxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwwLAotCTAsMCwwLDMsMTUsMTUsMTUsMTIsMCwwLDAsMTQsMTUsMTUsMTUsMTEsCi0JMCwwLDMsMTUsMTUsMTUsMTUsMTUsMTIsNywwLDAsNCwxNCwxNSwxNSwKLQkxNSwxMSwxLDAsMCwwLDQsMTMsMTUsMTIsMCwwLDEyLDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDEwLDAsMSwxNCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDEyLDcsMCwwLDAsMCwwLDAsMCwzLDgsMTIsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNCwwLAotCTAsMCwxLDEzLDE1LDE1LDE1LDYsMCwwLDAsMTQsMTUsMTUsMTUsOCwKLQkwLDAsNywxNSwxNSwxNSwxNSwxNSwxNSwxNSw4LDEsMCwyLDEzLDE1LAotCTE0LDIsMCwwLDAsNCwxNCwxNSwxNSwxMywxLDAsMTAsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsOSwwLDIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxMSw2LDIsMCwwLDAsMCwwLDAsMCwxLAotCTEwLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDgsMCwwLAotCTAsMCwxMCwxNSwxNSwxNSwxNSw0LDAsMCwxLDE1LDE1LDE1LDE1LDQsCi0JMCwwLDgsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsMSwwLDEsOCwKLQkyLDAsMCwwLDUsMTUsMTUsMTUsMTUsMTUsMiwwLDYsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsOSwwLDEsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw5LDEsMCwwLDAsMCwwLDAsCi0JMCwxLDcsMTMsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsOSwwLDAsMCwKLQkwLDYsMTUsMTUsMTUsMTUsMTUsNCwwLDAsNCwxNSwxNSwxNSwxNCwxLAotCTAsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDIsMCwwLAotCTAsMCwwLDQsMTQsMTUsMTUsMTUsMTUsMTUsNCwwLDQsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsNywwLDAsMTQsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNCwxMSw2LDIsMCwwLDAsCi0JMCwwLDAsMCwxLDksMTIsMTUsMTUsMTUsMTUsMTQsMywwLDAsMCwKLQk0LDE1LDE1LDE1LDE1LDE1LDE1LDQsMCwwLDMsNiw0LDQsMiwwLAotCTAsMCwxMywxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwxLDAsCi0JMCwwLDMsMTQsMTUsMTUsMTUsMTUsMTUsMTUsNCwwLDQsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsNSwwLDAsMTIsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw4LDIsMCwKLQkwLDAsMCwwLDAsMCwwLDEsOSwxNSwxNSw1LDAsMCwwLDAsCi0JMTIsMTUsMTUsMTUsMTUsMTUsMTUsNCwwLDAsMCwwLDAsMCwwLDAsCi0JMCwzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDQsMCwKLQkwLDEsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNiwwLDEsMTQsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsNSwwLDAsMTMsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMiwKLQk3LDEsMCwwLDAsMCwwLDAsMCw1LDcsMCwwLDAsMCwxMCwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSw3LDAsMCwwLDAsMCwwLDAsMCwKLQkxLDEwLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDMsMCwKLQkzLDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDAsMCwxMiwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSw1LDAsMCwxLDEsNCwxMSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDExLDYsMSwwLDAsMCwwLDAsMCwwLDAsMCw3LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDcsNCw0LDQsNSw5LDEyLDEzLAotCTE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLDksCi0JMTQsMTUsMTUsMTQsMTIsMTEsMTEsMTEsMTAsOSw3LDAsMCw1LDEzLDE1LAotCTE1LDE1LDE1LDE1LDE1LDEyLDEsMCwwLDAsMCwwLDAsMTAsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNCw3LDEsMCwwLDAsMCwwLDMsMTQsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTMsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwKLQkxNSwxNSwxNSwxNSwxNSwxMSwwLDAsMCwwLDAsMCwwLDksMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMyw1LDAsMCwwLDAsMTIsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDEwLDUsNiw3LDcsNyw5LDE0LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsOCwzLDIsMiwyLDIsNSwxNCwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMCwzLDAsNiwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxMywzLDEsMCwxLDAsMSwxLDIsNCw0LDMsOSwxNCwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDEyLDQsMCwxLDYsNyw3LDQsMSwzLDEzLAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE0LDEwLDEzLDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLDExLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE0LDE0LDE0LDE0LDE0LDE0LDE0LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTQsMiwwLDQsMTMsMTUsMTUsMTUsMTUsMTAsMCwxMiwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNCwxMywxNCwxMiwxMiwxMiwxMiwxMiwxMiwxMiwKLQkxMiwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSw0LDE0LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsNywxLDUsMTQsMTUsMTUsMTUsMTUsMTUsMTIsMSwxMSwKLQkxNSwxNSwxNSwxMywxMiwxMywxNSwxNSwxNCwxMSwxMywxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxMSw2LDMsMSwxLDEsMCwwLDAsMCwwLDAsMCwKLQkwLDEsNCw3LDExLDE0LDE1LDE1LDE1LDE0LDQsMTUsMTMsMTAsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTQsNyw0LDUsCi0JMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxMywxLDEsMTQsMTUsMTUsMTQsMTAsMTIsMTUsMTEsMSwxMiwKLQkxNSwxNSwxMSwxLDAsNCwxNSwxNSw2LDAsMiwxNCwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNCw4LDYsMywzLDIsMiwxLDAsMCwwLDAsMCwwLAotCTAsMCwwLDAsMCwzLDExLDE1LDE1LDExLDgsMTUsMTIsNiwxNSw5LAotCTgsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTAsNCw0LDEsCi0JNCwxNSwxNSwxNSwxNSwxMSw2LDIsOCwxNCwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDEyLDAsNCwxNSwxNSwxNSwxMSwyLDEwLDE1LDksMSwxMywKLQkxNSwxMywxLDcsNiwyLDE0LDE0LDEsMiwxLDE0LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEzLDEyLDEyLDEyLDEyLDEyLDEyLAotCTExLDExLDExLDEwLDksMTAsMTIsMTUsMTUsNiw3LDE1LDksNCwxNSw0LAotCTEsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMiwxMSwxNSw0LAotCTQsMTUsMTUsMTUsMTUsMyw5LDQsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTIsMCw0LDE1LDE1LDE1LDUsMCw2LDYsMSw5LDE1LAotCTE1LDQsMSwxMywxMCwxLDEzLDksMiw3LDEsMTQsMTQsMTQsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMyw1LDE1LDMsNSwxNCwxLAotCTAsMTIsMTMsOSwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxNSwyLDIsNCwxLAotCTYsMTUsMTUsMTUsMTQsMSw1LDYsMCw5LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTIsMCw0LDE1LDE1LDE1LDEyLDQsMiwyLDEwLDE1LDE1LAotCTExLDAsNiwxNSwxMiwwLDEwLDcsOSwxMCwxLDE0LDcsMTQsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTMsMTIsMTEsMTEsMTAsOSw5LDEwLDExLDEzLAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEsOSwxNSwyLDcsMTQsMSwKLQkwLDEwLDcsMCw4LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDExLDQsNCw0LAotCTEzLDE1LDE1LDE1LDE1LDEwLDIsMiw0LDE0LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTIsMCw0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTQsMiwxNCwxNSwxNSwxLDksNSwxNCw5LDEsMTQsOCwxNCwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxMCwzLDAsMSwwLDAsMCwwLDAsMCw1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEsOSwxNCwxLDgsMTQsMSwKLQkwLDExLDEzLDYsMTEsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxMiwwLDQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTEsCi0JMCw2LDE1LDE1LDE1LDEsNSwzLDEzLDEwLDAsNiw4LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDEzLDEyLDEyLDExLDEwLDksOSwxMCwxMSwxMywKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxLDksMTIsMSwxMSwxNSw0LAotCTEsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTQsMTAsNCwyLDEyLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTIsMSwzLDE0LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDQsCi0JMywxNCwxNSwxNSwxNSw1LDEsOCwxNSwxNCw1LDIsOSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxMSw5LDEzLDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEsOSwxMiwxLDEyLDE1LDEzLAotCTExLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTEwLDIsOSwyLDMsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNCw0LDAsNSwxNCwxNSwxNSwxNSwxNSwxNSwxNSwxMSwwLAotCTYsMTUsMTUsMTUsMTUsMTUsMTQsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsOCwxLDAsMywxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxLDksMTUsMTEsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JNywxLDEyLDYsMSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDExLDEsMCwzLDgsOSw5LDEwLDExLDksNSw0LAotCTEzLDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDEyLDksMTMsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsNSwxMSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxMCwzLDQsMSw1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTIsMiwwLDAsMCwwLDAsMCwxLDgsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTQsMTIsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxMyw4LDgsMTAsOSwxMCwxMSwxNCwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fSwKLQl7MTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsCi0JMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTUsMTV9LAotCXsxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwKLQkxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNSwxNX0sCi0JezE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LAotCTE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1LDE1fQotCX07CmRpZmYgLS1naXQgYS9nc3QvZ29vbS9wbHVnaW5faW5mby5jIGIvZ3N0L2dvb20vcGx1Z2luX2luZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZkNTcwYy4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9wbHVnaW5faW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0KLSNpbmNsdWRlICJnb29tX3BsdWdpbl9pbmZvLmgiCi0jaW5jbHVkZSAiZ29vbV9meC5oIgotI2luY2x1ZGUgImRyYXdtZXRob2RzLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9PUkMKLSNpbmNsdWRlIDxvcmMvb3JjLmg+Ci0jZW5kaWYKLQotCi0jaWYgZGVmaW5lZCAoSEFWRV9DUFVfUFBDNjQpIHx8IGRlZmluZWQgKEhBVkVfQ1BVX1BQQykKLSNpbmNsdWRlICJwcGNfem9vbV91bHRpbWF0ZS5oIgotI2luY2x1ZGUgInBwY19kcmF3aW5ncy5oIgotI2VuZGlmIC8qIEhBVkVfQ1BVX1BQQzY0IHx8IEhBVkVfQ1BVX1BQQyAqLwotCi0KLSNpZmRlZiBIQVZFX01NWAotI2luY2x1ZGUgIm1teC5oIgotI2VuZGlmIC8qIEhBVkVfTU1YICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoZ29vbV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnb29tX2RlYnVnCi0KLXN0YXRpYyB2b2lkCi1zZXRPcHRpbWl6ZWRNZXRob2RzIChQbHVnaW5JbmZvICogcCkKLXsKLSNpZmRlZiBIQVZFX09SQwotICB1bnNpZ25lZCBpbnQgY3B1Rmxhdm91ciA9Ci0gICAgICBvcmNfdGFyZ2V0X2dldF9kZWZhdWx0X2ZsYWdzIChvcmNfdGFyZ2V0X2dldF9ieV9uYW1lICgibW14IikpOwotI2Vsc2UKLSAgdW5zaWduZWQgaW50IGNwdUZsYXZvdXIgPSAwOwotI2VuZGlmCi0KLSAgLyogc2V0IGRlZmF1bHQgbWV0aG9kcyAqLwotICBwLT5tZXRob2RzLmRyYXdfbGluZSA9IGRyYXdfbGluZTsKLSAgcC0+bWV0aG9kcy56b29tX2ZpbHRlciA9IHpvb21fZmlsdGVyX2M7Ci0vKiAgICBwLT5tZXRob2RzLmNyZWF0ZV9vdXRwdXRfd2l0aF9icmlnaHRuZXNzID0gY3JlYXRlX291dHB1dF93aXRoX2JyaWdodG5lc3M7Ki8KLQotICBHU1RfSU5GTyAoIm9yYyBjcHUgZmxhZ3M6IDB4JTA4eCIsIGNwdUZsYXZvdXIpOwotCi0vKiBGSVhNRTogd2hhdCBhYm91dCBIQVZFX0NQVV9YODZfNjQgPyAqLwotI2lmZGVmIEhBVkVfQ1BVX0kzODYKLSNpZmRlZiBIQVZFX01NWAotI2lmZGVmIEhBVkVfT1JDCi0gIEdTVF9JTkZPICgiaGF2ZSBhbiB4ODYiKTsKLSAgaWYgKGNwdUZsYXZvdXIgJiBPUkNfVEFSR0VUX01NWF9NTVhFWFQpIHsKLSAgICBHU1RfSU5GTyAoIkV4dGVuZGVkIE1NWCBkZXRlY3RlZC4gVXNpbmcgdGhlIGZhc3Rlc3QgbWV0aG9kcyEiKTsKLSAgICBwLT5tZXRob2RzLmRyYXdfbGluZSA9IGRyYXdfbGluZV94bW14OwotICAgIHAtPm1ldGhvZHMuem9vbV9maWx0ZXIgPSB6b29tX2ZpbHRlcl94bW14OwotICB9IGVsc2UgaWYgKGNwdUZsYXZvdXIgJiBPUkNfVEFSR0VUX01NWF9NTVgpIHsKLSAgICBHU1RfSU5GTyAoIk1NWCBkZXRlY3RlZC4gVXNpbmcgZmFzdCBtZXRob2RzISIpOwotICAgIHAtPm1ldGhvZHMuZHJhd19saW5lID0gZHJhd19saW5lX21teDsKLSAgICBwLT5tZXRob2RzLnpvb21fZmlsdGVyID0gem9vbV9maWx0ZXJfbW14OwotICB9IGVsc2UgewotICAgIEdTVF9JTkZPICgiVG9vIGJhZCAhIE5vIFNJTUQgb3B0aW1pemF0aW9uIGF2YWlsYWJsZSBmb3IgeW91ciBDUFUuIik7Ci0gIH0KLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYgLyogSEFWRV9DUFVfSTM4NiAqLwotCi0vKiBkaXNhYmxlIGFsbCBQUEMgc3R1ZmYgdW50aWwgc29tZW9uZSBmaW5kcyBvdXQgd2hhdCB0byB1c2UgaGVyZSBpbnN0ZWFkIG9mCi0gKiBDUFVfT1BUSU9OXzY0X0JJVFMsIGFuZCB1bnRpbCBzb21lb25lIGZpeGVzIHRoZSBhc3NlbWJseSBidWlsZCBmb3IgcHBjICovCi0jaWYgMAotI2lmZGVmIEhBVkVfQ1BVX1BQQzY0Ci0gIGlmICgoY3B1Rmxhdm91ciAmIENQVV9PUFRJT05fNjRfQklUUykgIT0gMCkgewotLyogICAgICAgICAgICBwLT5tZXRob2RzLmNyZWF0ZV9vdXRwdXRfd2l0aF9icmlnaHRuZXNzID0gcHBjX2JyaWdodG5lc3NfRzU7ICAgICAgICAqLwotICAgIHAtPm1ldGhvZHMuem9vbV9maWx0ZXIgPSBwcGNfem9vbV9nZW5lcmljOwotICB9Ci0jZW5kaWYgLyogSEFWRV9DUFVfUFBDNjQgKi8KLQotI2lmZGVmIEhBVkVfQ1BVX1BQQwotICBpZiAoKGNwdUZsYXZvdXIgJiBPUkNfVEFSR0VUX0FMVElWRUNfQUxUSVZFQykgIT0gMCkgewotLyogICAgICAgICAgICBwLT5tZXRob2RzLmNyZWF0ZV9vdXRwdXRfd2l0aF9icmlnaHRuZXNzID0gcHBjX2JyaWdodG5lc3NfRzQ7ICAgICAgICAqLwotICAgIHAtPm1ldGhvZHMuem9vbV9maWx0ZXIgPSBwcGNfem9vbV9HNDsKLSAgfSBlbHNlIHsKLS8qICAgICAgICAgICAgcC0+bWV0aG9kcy5jcmVhdGVfb3V0cHV0X3dpdGhfYnJpZ2h0bmVzcyA9IHBwY19icmlnaHRuZXNzX2dlbmVyaWM7Ki8KLSAgICBwLT5tZXRob2RzLnpvb21fZmlsdGVyID0gcHBjX3pvb21fZ2VuZXJpYzsKLSAgfQotI2VuZGlmIC8qIEhBVkVfQ1BVX1BQQyAqLwotI2VuZGlmCi19Ci0KLXZvaWQKLXBsdWdpbl9pbmZvX2luaXQgKFBsdWdpbkluZm8gKiBwcCwgaW50IG5iVmlzdWFscykKLXsKLQotICBpbnQgaTsKLQotICBtZW1zZXQgKHBwLCAwLCBzaXplb2YgKFBsdWdpbkluZm8pKTsKLQotICBwcC0+c291bmQuc3BlZWR2YXIgPSBwcC0+c291bmQuYWNjZWx2YXIgPSBwcC0+c291bmQudG90YWxnb29tID0gMDsKLSAgcHAtPnNvdW5kLnByb3ZfbWF4ID0gMDsKLSAgcHAtPnNvdW5kLmdvb21fbGltaXQgPSAxOwotICBwcC0+c291bmQuYWxsVGltZXNNYXggPSAxOwotICBwcC0+c291bmQudGltZVNpbmNlTGFzdEdvb20gPSAxOwotICBwcC0+c291bmQudGltZVNpbmNlTGFzdEJpZ0dvb20gPSAxOwotICBwcC0+c291bmQuY3ljbGUgPSAwOwotCi0gIHNlY3VyZV9mX2ZlZWRiYWNrICgmcHAtPnNvdW5kLnZvbHVtZV9wLCAiU291bmQgVm9sdW1lIik7Ci0gIHNlY3VyZV9mX2ZlZWRiYWNrICgmcHAtPnNvdW5kLmFjY2VsX3AsICJTb3VuZCBBY2NlbGVyYXRpb24iKTsKLSAgc2VjdXJlX2ZfZmVlZGJhY2sgKCZwcC0+c291bmQuc3BlZWRfcCwgIlNvdW5kIFNwZWVkIik7Ci0gIHNlY3VyZV9mX2ZlZWRiYWNrICgmcHAtPnNvdW5kLmdvb21fbGltaXRfcCwgIkdvb20gTGltaXQiKTsKLSAgc2VjdXJlX2ZfZmVlZGJhY2sgKCZwcC0+c291bmQubGFzdF9nb29tX3AsICJHb29tIERldGVjdGlvbiIpOwotICBzZWN1cmVfZl9mZWVkYmFjayAoJnBwLT5zb3VuZC5sYXN0X2JpZ2dvb21fcCwgIkJpZyBHb29tIERldGVjdGlvbiIpOwotICBzZWN1cmVfZl9mZWVkYmFjayAoJnBwLT5zb3VuZC5nb29tX3Bvd2VyX3AsICJHb29tIFBvd2VyIik7Ci0KLSAgc2VjdXJlX2lfcGFyYW0gKCZwcC0+c291bmQuYmlnZ29vbV9zcGVlZF9saW1pdF9wLCAiQmlnIEdvb20gU3BlZWQgTGltaXQiKTsKLSAgSVZBTCAocHAtPnNvdW5kLmJpZ2dvb21fc3BlZWRfbGltaXRfcCkgPSAxMDsKLSAgSU1JTiAocHAtPnNvdW5kLmJpZ2dvb21fc3BlZWRfbGltaXRfcCkgPSAwOwotICBJTUFYIChwcC0+c291bmQuYmlnZ29vbV9zcGVlZF9saW1pdF9wKSA9IDEwMDsKLSAgSVNURVAgKHBwLT5zb3VuZC5iaWdnb29tX3NwZWVkX2xpbWl0X3ApID0gMTsKLQotICBzZWN1cmVfaV9wYXJhbSAoJnBwLT5zb3VuZC5iaWdnb29tX2ZhY3Rvcl9wLCAiQmlnIEdvb20gRmFjdG9yIik7Ci0gIElWQUwgKHBwLT5zb3VuZC5iaWdnb29tX2ZhY3Rvcl9wKSA9IDEwOwotICBJTUlOIChwcC0+c291bmQuYmlnZ29vbV9mYWN0b3JfcCkgPSAwOwotICBJTUFYIChwcC0+c291bmQuYmlnZ29vbV9mYWN0b3JfcCkgPSAxMDA7Ci0gIElTVEVQIChwcC0+c291bmQuYmlnZ29vbV9mYWN0b3JfcCkgPSAxOwotCi0gIHBsdWdpbl9wYXJhbWV0ZXJzICgmcHAtPnNvdW5kLnBhcmFtcywgIlNvdW5kIiwgMTEpOwotCi0gIHBwLT5uYlBhcmFtcyA9IDA7Ci0gIHBwLT5wYXJhbXMgPSBOVUxMOwotICBwcC0+bmJWaXN1YWxzID0gbmJWaXN1YWxzOwotICBwcC0+dmlzdWFscyA9IChWaXN1YWxGWCAqKikgbWFsbG9jIChzaXplb2YgKFZpc3VhbEZYICopICogbmJWaXN1YWxzKTsKLQotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1swXSA9ICZwcC0+c291bmQuYmlnZ29vbV9zcGVlZF9saW1pdF9wOwotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1sxXSA9ICZwcC0+c291bmQuYmlnZ29vbV9mYWN0b3JfcDsKLSAgcHAtPnNvdW5kLnBhcmFtcy5wYXJhbXNbMl0gPSAwOwotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1szXSA9ICZwcC0+c291bmQudm9sdW1lX3A7Ci0gIHBwLT5zb3VuZC5wYXJhbXMucGFyYW1zWzRdID0gJnBwLT5zb3VuZC5hY2NlbF9wOwotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1s1XSA9ICZwcC0+c291bmQuc3BlZWRfcDsKLSAgcHAtPnNvdW5kLnBhcmFtcy5wYXJhbXNbNl0gPSAwOwotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1s3XSA9ICZwcC0+c291bmQuZ29vbV9saW1pdF9wOwotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1s4XSA9ICZwcC0+c291bmQuZ29vbV9wb3dlcl9wOwotICBwcC0+c291bmQucGFyYW1zLnBhcmFtc1s5XSA9ICZwcC0+c291bmQubGFzdF9nb29tX3A7Ci0gIHBwLT5zb3VuZC5wYXJhbXMucGFyYW1zWzEwXSA9ICZwcC0+c291bmQubGFzdF9iaWdnb29tX3A7Ci0KLSAgcHAtPnN0YXRlc051bWJlciA9IDg7Ci0gIHBwLT5zdGF0ZXNSYW5nZU1heCA9IDUxMDsKLSAgewotICAgIEdvb21TdGF0ZSBzdGF0ZXNbOF0gPSB7Ci0gICAgICB7MSwgMCwgMCwgMSwgNCwgMCwgMTAwfQotICAgICAgLAotICAgICAgezEsIDAsIDAsIDAsIDEsIDEwMSwgMTQwfQotICAgICAgLAotICAgICAgezEsIDAsIDAsIDEsIDIsIDE0MSwgMjAwfQotICAgICAgLAotICAgICAgezAsIDEsIDAsIDEsIDIsIDIwMSwgMjYwfQotICAgICAgLAotICAgICAgezAsIDEsIDAsIDEsIDAsIDI2MSwgMzMwfQotICAgICAgLAotICAgICAgezAsIDEsIDEsIDEsIDQsIDMzMSwgNDAwfQotICAgICAgLAotICAgICAgezAsIDAsIDEsIDAsIDUsIDQwMSwgNDUwfQotICAgICAgLAotICAgICAgezAsIDAsIDEsIDEsIDEsIDQ1MSwgNTEwfQotICAgIH07Ci0gICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKLSAgICAgIHBwLT5zdGF0ZXNbaV0gPSBzdGF0ZXNbaV07Ci0gIH0KLSAgcHAtPmN1ckdTdGF0ZSA9ICYocHAtPnN0YXRlc1s2XSk7Ci0KLSAgLyogZGF0YXMgZm9yIHRoZSB1cGRhdGUgbG9vcCAqLwotICBwcC0+dXBkYXRlLmxvY2t2YXIgPSAwOwotICBwcC0+dXBkYXRlLmdvb212YXIgPSAwOwotICBwcC0+dXBkYXRlLmxvb3B2YXIgPSAwOwotICBwcC0+dXBkYXRlLnN0b3BfbGluZXMgPSAwOwotICBwcC0+dXBkYXRlLmlmc19pbmNyID0gMTsgICAgICAvKiBkZXNzaW5lciBsJ2lmcyAoMCA9IG5vbjogPiA9IGluY3JlbWVudCkgKi8KLSAgcHAtPnVwZGF0ZS5kZWNheV9pZnMgPSAwOyAgICAgLyogZGlzcGFyaXRpb24gZGUgbCdpZnMgKi8KLSAgcHAtPnVwZGF0ZS5yZWNheV9pZnMgPSAwOyAgICAgLyogZGVkaXNwYXJpdGlvbiBkZSBsJ2lmcyAqLwotICBwcC0+dXBkYXRlLmN5Y2xlc1NpbmNlTGFzdENoYW5nZSA9IDA7Ci0gIHBwLT51cGRhdGUuZHJhd0xpbmVzRHVyYXRpb24gPSA4MDsKLSAgcHAtPnVwZGF0ZS5saW5lTW9kZSA9IHBwLT51cGRhdGUuZHJhd0xpbmVzRHVyYXRpb247Ci0KLSAgcHAtPnVwZGF0ZS5zd2l0Y2hNdWx0QW1vdW50ID0gKDI5LjBmIC8gMzAuMGYpOwotICBwcC0+dXBkYXRlLnN3aXRjaEluY3JBbW91bnQgPSAweDdmOwotICBwcC0+dXBkYXRlLnN3aXRjaE11bHQgPSAxLjBmOwotICBwcC0+dXBkYXRlLnN3aXRjaEluY3IgPSBwcC0+dXBkYXRlLnN3aXRjaEluY3JBbW91bnQ7Ci0KLSAgcHAtPnVwZGF0ZS5zdGF0ZVNlbGVjdGlvblJuZCA9IDA7Ci0gIHBwLT51cGRhdGUuc3RhdGVTZWxlY3Rpb25CbG9ja2VyID0gMDsKLSAgcHAtPnVwZGF0ZS5wcmV2aW91c1pvb21TcGVlZCA9IDEyODsKLQotICB7Ci0gICAgWm9vbUZpbHRlckRhdGEgemZkID0gewotICAgICAgMTI3LCA4LCAxNiwKLSAgICAgIDEsIDEsIDAsIE5PUk1BTF9NT0RFLAotICAgICAgMCwgMCwgMCwgMCwgMAotICAgIH07Ci0gICAgcHAtPnVwZGF0ZS56b29tRmlsdGVyRGF0YSA9IHpmZDsKLSAgfQotCi0gIHNldE9wdGltaXplZE1ldGhvZHMgKHBwKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMHhmZmZmOyBpKyspIHsKLSAgICBwcC0+c2ludGFibGVbaV0gPQotICAgICAgICAoaW50KSAoMTAyNCAqIHNpbiAoKGRvdWJsZSkgaSAqIDM2MCAvIChzaXplb2YgKHBwLT5zaW50YWJsZSkgLwotICAgICAgICAgICAgICAgIHNpemVvZiAocHAtPnNpbnRhYmxlWzBdKSAtIDEpICogMy4xNDE1OTIgLyAxODApICsgLjUpOwotICAgIC8qIHNpbnRhYmxlIFt1c10gPSAoaW50KSgxMDI0LjBmICogc2luICh1cyoyKjMuMzE0MTVmLzB4ZmZmZikpIDsgKi8KLSAgfQotfQotCi12b2lkCi1wbHVnaW5faW5mb19hZGRfdmlzdWFsIChQbHVnaW5JbmZvICogcCwgaW50IGksIFZpc3VhbEZYICogdmlzdWFsKQotewotICBwLT52aXN1YWxzW2ldID0gdmlzdWFsOwotICBpZiAoaSA9PSBwLT5uYlZpc3VhbHMgLSAxKSB7Ci0gICAgKytpOwotICAgIHAtPm5iUGFyYW1zID0gMTsKLSAgICB3aGlsZSAoaS0tKSB7Ci0gICAgICBpZiAocC0+dmlzdWFsc1tpXS0+cGFyYW1zKQotICAgICAgICBwLT5uYlBhcmFtcysrOwotICAgIH0KLSAgICBwLT5wYXJhbXMgPQotICAgICAgICAoUGx1Z2luUGFyYW1ldGVycyAqKSBtYWxsb2MgKHNpemVvZiAoUGx1Z2luUGFyYW1ldGVycykgKiBwLT5uYlBhcmFtcyk7Ci0gICAgaSA9IHAtPm5iVmlzdWFsczsKLSAgICBwLT5uYlBhcmFtcyA9IDE7Ci0gICAgcC0+cGFyYW1zWzBdID0gcC0+c291bmQucGFyYW1zOwotICAgIHdoaWxlIChpLS0pIHsKLSAgICAgIGlmIChwLT52aXN1YWxzW2ldLT5wYXJhbXMpCi0gICAgICAgIHAtPnBhcmFtc1twLT5uYlBhcmFtcysrXSA9ICoocC0+dmlzdWFsc1tpXS0+cGFyYW1zKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZAotcGx1Z2luX2luZm9fZnJlZSAoUGx1Z2luSW5mbyAqIHApCi17Ci0gIGdvb21fcGx1Z2luX3BhcmFtZXRlcnNfZnJlZSAoJnAtPnNvdW5kLnBhcmFtcyk7Ci0KLSAgaWYgKHAtPnBhcmFtcykKLSAgICBmcmVlIChwLT5wYXJhbXMpOwotICBmcmVlIChwLT52aXN1YWxzKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9nb29tL3BwY19kcmF3aW5ncy5oIGIvZ3N0L2dvb20vcHBjX2RyYXdpbmdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNWFkZjYuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20vcHBjX2RyYXdpbmdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IEd1aWxsYXVtZSBCb3Jpb3MsIGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEdlbmVyaWMgUG93ZXJQQyBDb2RlICovCi12b2lkIHBwY19icmlnaHRuZXNzX2dlbmVyaWMoUGl4ZWwgKnNyYywgUGl4ZWwgKmRlc3QsIGludCBzaXplLCBpbnQgY29lZmYpOwotCi0vKiBHNCBTcGVjaWZpYyBQb3dlclBDIENvZGUgKFBvc3NpYmxlIHVzZSBvZiBBbHRpdmVjIGFuZCBEYXRhIFN0cmVhbXMpICovCi12b2lkIHBwY19icmlnaHRuZXNzX0c0KFBpeGVsICpzcmMsIFBpeGVsICpkZXN0LCBpbnQgc2l6ZSwgaW50IGNvZWZmKTsKLQotLyogRzUgU3BlY2lmaWMgUG93ZXJQQyBDb2RlIChQb3NzaWJsZSB1c2Ugb2YgQWx0aXZlYykgKi8KLXZvaWQgcHBjX2JyaWdodG5lc3NfRzUoUGl4ZWwgKnNyYywgUGl4ZWwgKmRlc3QsIGludCBzaXplLCBpbnQgY29lZmYpOwotCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9wcGNfZHJhd2luZ3MucyBiL2dzdC9nb29tL3BwY19kcmF3aW5ncy5zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDNjY2U3Li4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL3BwY19kcmF3aW5ncy5zCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLTsgUG93ZXJQQyBvcHRpbWl6ZWQgZHJhd2luZyBtZXRob2RzIGZvciBHb29tCi07IMKpIDIwMDMgR3VpbGxhdW1lIEJvcmlvcwotOyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi07IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi07IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi07Ci07IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotOyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotOyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotOyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLTsKLTsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLTsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLTsgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi07IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi07IENoYW5nZSBsb2cgOgotOyAzMCBNYXkgMjAwMyA6IEZpbGUgY3JlYXRpb24KLQotOyBTZWN0aW9uIGRlZmluaXRpb24gOiBXZSB1c2UgYSByZWFkIG9ubHkgY29kZSBzZWN0aW9uIGZvciB0aGUgd2hvbGUgZmlsZQotLnNlY3Rpb24gX19URVhULF9fdGV4dCxyZWd1bGFyLHB1cmVfaW5zdHJ1Y3Rpb25zCi0KLQotOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotOyBTaW5nbGUgMzJiIHBpeGVsIGRyYXdpbmcgbWFjcm9zCi07IFVzYWdlIDoKLTsgCURSQVdNRVRIT0RfWFhYWF9NQUNSTyAqcGl4ZWxJTiwgKnBpeGVsT1VULCBDT0xPUiwgV1IxLCBXUjIsIFdSMywgV1I0Ci07CU9ubHkgdGhlIHdvcmsgcmVnaXN0ZXJzIChXUikgY2FuIGJlIHRvdWNoZWQgYnkgdGhlIG1hY3JvcwotOwotOyBBdmFpbGFibGUgbWV0aG9kcyA6Ci07CURSQVdNRVRIT0RfREZMVF9NQUNSTyA6IERlZmF1bHQgZHJhd2luZyBtZXRob2QgKEFjdHVhbGx5IE9WUlcpCi07CURSQVdNRVRIT0RfUExVU19NQUNSTyA6IFJWQiBTYXR1cmF0ZWQgcGVyIGNoYW5uZWwgYWRkaXRpb24gKFNMT1dFU1QpCi07CURSQVdNRVRIT0RfSEFMRl9NQUNSTyA6IDUwJSBUcmFuc3BhcmVuY3kgY29sb3IgZHJhd2luZwotOwlEUkFXTUVUSE9EX09WUldfTUFDUk8gOiBEaXJlY3QgQ09MT1IgZHJhd2luZyAoRkFTVEVTVCkKLTsJRFJBV01FVEhPRF9CX09SX01BQ1JPIDogQml0d2lzZSBPUgotOwlEUkFXTUVUSE9EX0JBTkRfTUFDUk8gOiBCaXR3aXNlIEFORAotOwlEUkFXTUVUSE9EX0JYT1JfTUFDUk8gOiBCaXR3aXNlIFhPUgotOwlEUkFXTUVUSE9EX0JOT1RfTUFDUk8gOiBCaXR3aXNlIE5PVAotOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0ubWFjcm8gRFJBV01FVEhPRF9PVlJXX01BQ1JPCi0gICAgc3R3CQkkMiwwKCQxKQk7OyAqJDEgPC0gJDIKLS5lbmRtYWNybwotCi0ubWFjcm8gRFJBV01FVEhPRF9CX09SX01BQ1JPCi0gICAgbHd6CQkkMywwKCQwKQk7OyAkMyA8LSAqJDAKLSAgICBvcgkJJDMsJDMsJDIJOzsgJDMgPC0gJDMgfCAkMgotICAgIHN0dwkJJDMsMCgkMSkJOzsgKiQxIDwtICQzCi0uZW5kbWFjcm8KLQotLm1hY3JvIERSQVdNRVRIT0RfQkFORF9NQUNSTwotICAgIGx3egkJJDMsMCgkMCkJOzsgJDMgPC0gKiQwCi0gICAgYW5kCQkkMywkMywkMgk7OyAkMyA8LSAkMyAmICQyCi0gICAgc3R3CQkkMywwKCQxKQk7OyAqJDEgPC0gJDMKLS5lbmRtYWNybwotCi0ubWFjcm8gRFJBV01FVEhPRF9CWE9SX01BQ1JPCi0gICAgbHd6CQkkMywwKCQwKQk7OyAkMyA8LSAqJDAKLSAgICB4b3IJCSQzLCQzLCQyCTs7ICQzIDwtICQzIF4gJDIKLSAgICBzdHcJCSQzLDAoJDEpCTs7ICokMSA8LSAkMwotLmVuZG1hY3JvCi0KLS5tYWNybyBEUkFXTUVUSE9EX0JOT1RfTUFDUk8KLSAgICBsd3oJCSQzLDAoJDApCTs7ICQzIDwtICokMAotICAgIG5hbmQJJDMsJDMsJDMJOzsgJDMgPC0gfiQzCi0gICAgc3R3CQkkMywwKCQxKQk7OyAqJDEgPC0gJDMKLS5lbmRtYWNybwotCi0ubWFjcm8gRFJBV01FVEhPRF9QTFVTX01BQ1JPCi0gICAgbHd6CQkkNCwwKCQwKQk7OyAkNCA8LSAqJDAKLSAgICBhbmRpLgkkMywkNCwweEZGMDAJOzsgJDMgPC0gJDQgJiAweDAwMDBGRjAwCi0gICAgYW5kaS4JJDUsJDIsMHhGRjAwCTs7ICQ1IDwtICQyICYgMHgwMDAwRkYwMAotICAgIGFkZAkJJDMsJDMsJDUJOzsgJDMgPC0gJDMgKyAkNQotICAgIHJsd2lubQkkNSwkMywxNSwwLDAJOzsgJDUgPC0gMCB8ICgkM1sxNV0gPDwgMTUpCi0gICAgc3Jhd2kJJDUsJDUsMjMJOzsgJDUgPC0gJDUgPj4gMjMgKGFsZ2VicmFpYyBmb3Igc2lnbiBleHRlbnNpb24pCi0gICAgb3IJCSQzLCQzLCQ1CTs7ICQzIDwtICQzIHwgJDUKLSAgICBsaXMJCSQ1LDB4RkYJCTs7ICQ1IDwtIDB4MDBGRjAwRkYKLSAgICBhZGRpCSQ1LCQ1LDB4RkYKLSAgICBhbmQJCSQ0LCQ0LCQ1CTs7ICQ0IDwtICQ0ICYgJDUKLSAgICBhbmQJCSQ2LCQyLCQ1CTs7ICQ2IDwtICQyICYgJDUKLSAgICBhZGQJCSQ0LCQ0LCQ2CTs7ICQ0IDwtICQ0ICsgJDYKLSAgICBybHdpbm0JJDYsJDQsNywwLDAJOzsgJDYgPC0gMCB8ICgkNFs3XSA8PCA3KQotICAgIHNyYXdpCSQ2LCQ2LDE1CTs7ICQ2IDwtICQ2ID4+IDE1IChhbGdlYnJhaWMgZm9yIHNpZ24gZXh0ZW5zaW9uKQotICAgIHJsd2lubQkkNSwkNCwyMywwLDAJOzsgJDUgPC0gMCB8ICgkNFsyM10gPDwgMjMpCi0gICAgc3Jhd2kJJDUsJDUsMzEJOzsgJDUgPC0gJDUgPj4gMzEgKGFsZ2VicmFpYyBmb3Igc2lnbiBleHRlbnNpb24pCi0gICAgcmx3aW1pCSQ2LCQ1LDAsMjQsMzEJOzsgJDZbMjQuLjMxXSA8LSAkNVsyNC4uMzFdCi0gICAgb3IJCSQ0LCQ0LCQ2CTs7ICQ0IDwtICQ0IHwgJDYKLSAgICBybHdpbWkJJDQsJDMsMCwxNiwyMwk7OyAkNFsxNi4uMjNdIDwtICQzWzE2Li4yM10KLSAgICBzdHcJCSQ0LDAoJDEpCTs7ICokMSA8LSAkNAotLmVuZG1hY3JvCi0KLS5tYWNybwlEUkFXTUVUSE9EX0hBTEZfTUFDUk8KLSAgICBsd3oJCSQ0LDAoJDApCTs7ICQ0IDwtICokMAotICAgIGFuZGkuCSQzLCQ0LDB4RkYwMAk7OyAkMyA8LSAkNCAmIDB4MDAwMEZGMDAKLSAgICBhbmRpLgkkNSwkMiwweEZGMDAJOzsgJDUgPC0gJDIgJiAweDAwMDBGRjAwCi0gICAgYWRkCQkkMywkMywkNQk7OyAkMyA8LSAkMyArICQ1Ci0gICAgbGlzCQkkNSwweEZGCQk7OyAkNSA8LSAweDAwRkYwMEZGCi0gICAgYWRkaQkkNSwkNSwweEZGCi0gICAgYW5kCQkkNCwkNCwkNQk7OyAkNCA8LSAkNCAmICQ1Ci0gICAgYW5kCQkkNSwkMiwkNQk7OyAkNSA8LSAkMiAmICQ1Ci0gICAgYWRkCQkkNCwkNCwkNQk7OyAkNCA8LSAkNCArICQ1Ci0gICAgc3J3aQkkNCwkNCwxCQk7OyAkNCA8LSAkNCA+PiAxCi0gICAgcmx3aW1pCSQ0LCQzLDMxLDE2LDIzCTs7ICQ0WzE2Li4yM10gPC0gJDNbMTUuLjIyXQotICAgIHN0dwkJJDQsMCgkMSkJOzsgKiQxIDwtICQ0Ci0uZW5kbWFjcm8KLQotLm1hY3JvIERSQVdNRVRIT0RfREZMVF9NQUNSTwotICAgIERSQVdNRVRIT0RfUExVU19NQUNSTwotLmVuZG1hY3JvCi0KLTsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi0KLTsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLTsgdm9pZCBEUkFXTUVUSE9EX1BMVVNfUFBDKHVuc2lnbmVkIGludCAqIGJ1ZiwgdW5zaWduZWQgaW50IF9jb2wpOwotOyB2b2lkIERSQVdNRVRIT0RfUExVU18yX1BQQyh1bnNpZ25lZCAqIGluLCB1bnNpZ25lZCBpbnQgKiBvdXQsIHVuc2lnbmVkIGludCBfY29sKTsKLTsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS5nbG9ibCBfRFJBV01FVEhPRF9QTFVTXzJfUFBDCi0uYWxpZ24gMwotX0RSQVdNRVRIT0RfUExVU18yX1BQQzoKLSAgICBEUkFXTUVUSE9EX1BMVVNfTUFDUk8JcjMscjQscjUscjYscjcscjgscjkKLSAgICBibHIJCQkJOzsgcmV0dXJuCi0KLS5nbG9ibCBfRFJBV01FVEhPRF9QTFVTX1BQQwotLmFsaWduIDMKLV9EUkFXTUVUSE9EX1BMVVNfUFBDOgotICAgIERSQVdNRVRIT0RfUExVU19NQUNSTwlyMyxyMyxyNCxyNSxyNixyNyxyOQotICAgIGJscgkJCQk7OyByZXR1cm4KLQotCi07ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi07IHZvaWQgRFJBV01FVEhPRF9IQUxGX1BQQyh1bnNpZ25lZCBpbnQgKiBidWYsIHVuc2lnbmVkIGludCBfY29sKTsKLTsgdm9pZCBEUkFXTUVUSE9EX0hBTEZfMl9QUEModW5zaWduZWQgKiBpbiwgdW5zaWduZWQgaW50ICogb3V0LCB1bnNpZ25lZCBpbnQgX2NvbCk7Ci07ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0uZ2xvYmwgX0RSQVdNRVRIT0RfSEFMRl8yX1BQQwotLmFsaWduIDMKLV9EUkFXTUVUSE9EX0hBTEZfMl9QUEM6Ci0gICAgRFJBV01FVEhPRF9IQUxGX01BQ1JPCXIzLHI0LHI1LHI2LHI3LHI4Ci0gICAgYmxyCQkJCTs7IHJldHVybgotCi0uZ2xvYmwgX0RSQVdNRVRIT0RfSEFMRl9QUEMKLS5hbGlnbiAzCi1fRFJBV01FVEhPRF9IQUxGX1BQQzoKLSAgICBEUkFXTUVUSE9EX0hBTEZfTUFDUk8JcjMscjMscjQscjUscjYscjcKLSAgICBibHIJCQkJOzsgcmV0dXJuCi0KLQotOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotOyB2b2lkIERSQVdfTElORV9QUEModW5zaWduZWQgaW50ICpkYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIHVuc2lnbmVkIGludCBjb2wsCi07IAkJCXVuc2lnbmVkIGludCBzY3JlZW54LCB1bnNpZ25lZCBpbnQgc2NyZWVueSkKLTsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS5nbG9ibCBfRFJBV19MSU5FX1BQQwotLmFsaWduIDMKLV9EUkFXX0xJTkVfUFBDOgotICAgIDs7IE5PVCBJTVBMRU1FTlRFRCBZRVQKLSAgICBibHIJCQkJOzsgcmV0dXJuCi0KLQotOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotOyB2b2lkIF9wcGNfYnJpZ2h0bmVzcyhQaXhlbCAqIHNyYywgUGl4ZWwgKiBkZXN0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGNvZWZmKQotOyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0KLS5jb25zdAotLmFsaWduIDQKLXZlY3RvclpFUk86Ci0gICAgLmxvbmcgMCwwLDAsMAotICAgIC5sb25nIDB4MTAxMDEwMDAsIDB4MTAxMDEwMDEsIDB4MTAxMDEwMDIsIDB4MTAxMDEwMDMKLSAgICAubG9uZyAweDEwMTAxMDA0LCAweDEwMTAxMDA1LCAweDEwMTAxMDA2LCAweDEwMTAxMDA3Ci0gICAgLmxvbmcgMHgxMDEwMTAwOCwgMHgxMDEwMTAwOSwgMHgxMDEwMTAwQSwgMHgxMDEwMTAwQgotICAgIC5sb25nIDB4MTAxMDEwMEMsIDB4MTAxMDEwMEQsIDB4MTAxMDEwMEUsIDB4MTAxMDEwMEYKLQotCi0uc2VjdGlvbiBfX1RFWFQsX190ZXh0LHJlZ3VsYXIscHVyZV9pbnN0cnVjdGlvbnMKLQotLmdsb2JsIF9wcGNfYnJpZ2h0bmVzc19HNAotLmFsaWduIDMKLV9wcGNfYnJpZ2h0bmVzc19HNDoKLQotCi07OyBQb3dlclBDIEFsdGl2ZWMgY29kZQotICAgIHNyd2kgICAgcjUscjUsMgotICAgIG10Y3RyICAgcjUKLQotOzt2cnNhdmUKLSAgICBtZnNwciAgIHIxMSwyNTYKLSAgICBsaXMgICAgIHIxMiwweENGRkMKLSAgICBtdHNwciAgIDI1NixyMTIKLQotICAgICAgICBtZmxyIHIwCi0gICAgICAgIGJjbCAyMCwzMSwiTDAwMDAwMDAwMDAxJHBiIgotIkwwMDAwMDAwMDAwMSRwYiI6Ci0gICAgICAgIG1mbHIgcjEwCi0gICAgICAgIG10bHIgcjAKLQotICAgIGFkZGlzICAgcjkscjEwLGhhMTYodmVjdG9yWkVSTy0iTDAwMDAwMDAwMDAxJHBiIikKLSAgICBhZGRpICAgIHI5LHI5LGxvMTYodmVjdG9yWkVSTy0iTDAwMDAwMDAwMDAxJHBiIikKLSAgICAKLSAgICB2eG9yICAgIHYwLHYwLHYwIDs7IFYwID0gTlVMTCB2ZWN0b3IKLQotICAgIGFkZGkgICAgcjkscjksMTYKLSAgICBsdnggICAgIHYxMCwwLHI5Ci0gICAgYWRkaSAgICByOSxyOSwxNgotICAgIGx2eCAgICAgdjExLDAscjkKLSAgICBhZGRpICAgIHI5LHI5LDE2Ci0gICAgbHZ4ICAgICB2MTIsMCxyOQotICAgIGFkZGkgICAgcjkscjksMTYKLSAgICBsdnggICAgIHYxMywwLHI5Ci0KLSAgICBhZGRpcyAgIHI5LHIxMCxoYTE2KHZlY3RvcnRtcHdvcmstIkwwMDAwMDAwMDAwMSRwYiIpCi0gICAgYWRkaSAgICByOSxyOSxsbzE2KHZlY3RvcnRtcHdvcmstIkwwMDAwMDAwMDAwMSRwYiIpCi0gICAgc3R3ICAgICByNiwwKHI5KQotICAgIGxpICAgICAgcjYsOAotICAgIHN0dyAgICAgcjYsNChyOSkKLSAgICBsdnggICAgIHY5LDAscjkKLSAgICBsaSAgICAgIHI5LDEyOAotICAgIHZzcGx0dyAgdjgsdjksMAotICAgIHZzcGx0dyAgdjksdjksMQotCi07OyBlbHQgY291bnRlcgotICAgIGxpICAgICAgcjksMAotICAgIGxpcyAgICAgcjcsMHgwRjAxCi0gICAgYiBMNwotLmFsaWduIDQKLUw3OgotICAgIGx2eCAgICAgdjEscjkscjMKLQotICAgIHZwZXJtICAgdjQsdjEsdjAsdjEwCi0gICAgOyoqKioqKioqKioqKioqKioqKioqKgotICAgICBhZGQgcjEwLHI5LHIzCi0gICAgOyoqKioqKioqKioqKioqKioqKioqKgotICAgIHZwZXJtICAgdjUsdjEsdjAsdjExCi0gICAgdnBlcm0gICB2Nix2MSx2MCx2MTIKLSAgICB2cGVybSAgIHY3LHYxLHYwLHYxMwotCi0gICAgdm11bG91aCAgdjQsdjQsdjgKLSAgICA7KioqKioqKioqKioqKioqKioqKioqCi0gICAgIGRzdCAgICAgcjEwLHI3LDMKLSAgICA7KioqKioqKioqKioqKioqKioqKioqCi0gICAgdm11bG91aCAgdjUsdjUsdjgKLSAgICB2bXVsb3VoICB2Nix2Nix2OAotICAgIHZtdWxvdWggIHY3LHY3LHY4Ci0gICAgdnNydyAgICAgdjQsdjQsdjkKLSAgICB2c3J3ICAgICB2NSx2NSx2OQotICAgIHZzcncgICAgIHY2LHY2LHY5Ci0gICAgdnNydyAgICAgdjcsdjcsdjkgCi0gICAgCi0gICAgdnBrdXd1cyB2NCx2NCx2NQotICAgIHZwa3V3dXMgdjYsdjYsdjcKLSAgICB2cGt1aHVzIHYxLHY0LHY2Ci0KLSAgICBzdHZ4ICAgIHYxLHI5LHI0Ci0gICAgYWRkaSAgICByOSxyOSwxNgotCi0gICAgYmRueiBMNwotCi0gICAgbXRzcHIgICAyNTYscjExCi0gICAgYmxyCi0KLQotLmdsb2JsIF9wcGNfYnJpZ2h0bmVzc19HNQotLmFsaWduIDMKLV9wcGNfYnJpZ2h0bmVzc19HNToKLQotOzsgUG93ZXJQQyBBbHRpdmVjIEc1IGNvZGUKLSAgICBzcndpICAgIHI1LHI1LDIKLSAgICBtdGN0ciAgIHI1Ci0KLTs7dnJzYXZlCi0gICAgbWZzcHIgICByMTEsMjU2Ci0gICAgbGlzICAgICByMTIsMHhDRkZDCi0gICAgbXRzcHIgICAyNTYscjEyCi0KLSAgICAgICAgbWZsciByMAotICAgICAgICBiY2wgMjAsMzEsIkwwMDAwMDAwMDAwMiRwYiIKLSJMMDAwMDAwMDAwMDIkcGIiOgotICAgICAgICBtZmxyIHIxMAotICAgICAgICBtdGxyIHIwCi0KLSAgICBhZGRpcyAgIHI5LHIxMCxoYTE2KHZlY3RvclpFUk8tIkwwMDAwMDAwMDAwMiRwYiIpCi0gICAgYWRkaSAgICByOSxyOSxsbzE2KHZlY3RvclpFUk8tIkwwMDAwMDAwMDAwMiRwYiIpCi0gICAgCi0gICAgdnhvciAgICB2MCx2MCx2MCA7OyBWMCA9IE5VTEwgdmVjdG9yCi0KLSAgICBhZGRpICAgIHI5LHI5LDE2Ci0gICAgbHZ4ICAgICB2MTAsMCxyOQotICAgIGFkZGkgICAgcjkscjksMTYKLSAgICBsdnggICAgIHYxMSwwLHI5Ci0gICAgYWRkaSAgICByOSxyOSwxNgotICAgIGx2eCAgICAgdjEyLDAscjkKLSAgICBhZGRpICAgIHI5LHI5LDE2Ci0gICAgbHZ4ICAgICB2MTMsMCxyOQotCi0gICAgYWRkaXMgICByOSxyMTAsaGExNih2ZWN0b3J0bXB3b3JrLSJMMDAwMDAwMDAwMDIkcGIiKQotICAgIGFkZGkgICAgcjkscjksbG8xNih2ZWN0b3J0bXB3b3JrLSJMMDAwMDAwMDAwMDIkcGIiKQotICAgIHN0dyAgICAgcjYsMChyOSkKLSAgICBsaSAgICAgIHI2LDgKLSAgICBzdHcgICAgIHI2LDQocjkpCi0gICAgbHZ4ICAgICB2OSwwLHI5Ci0gICAgbGkgICAgICByOSwxMjgKLSAgICB2c3BsdHcgIHY4LHY5LDAKLSAgICB2c3BsdHcgIHY5LHY5LDEKLQotOzsgZWx0IGNvdW50ZXIKLSAgICBsaSAgICAgIHI5LDAKLSAgICBsaXMgICAgIHI3LDB4MEYwMQotICAgIGIgTDYKLS5hbGlnbiA0Ci1MNjoKLSAgICBsdnggICAgIHYxLHI5LHIzCi0KLSAgICB2cGVybSAgIHY0LHYxLHYwLHYxMAotICAgIDsqKioqKioqKioqKioqKioqKioqKioKLSAgICBhZGQgcjEwLHI5LHIzCi0gICAgOyoqKioqKioqKioqKioqKioqKioqKgotICAgIHZwZXJtICAgdjUsdjEsdjAsdjExCi0gICAgdnBlcm0gICB2Nix2MSx2MCx2MTIKLSAgICB2cGVybSAgIHY3LHYxLHYwLHYxMwotCi0gICAgdm11bG91aCAgdjQsdjQsdjgKLSAgICB2bXVsb3VoICB2NSx2NSx2OAotICAgIHZtdWxvdWggIHY2LHY2LHY4Ci0gICAgdm11bG91aCAgdjcsdjcsdjgKLSAgICB2c3J3ICAgICB2NCx2NCx2OQotICAgIHZzcncgICAgIHY1LHY1LHY5Ci0gICAgdnNydyAgICAgdjYsdjYsdjkKLSAgICB2c3J3ICAgICB2Nyx2Nyx2OSAKLSAgICAKLSAgICB2cGt1d3VzIHY0LHY0LHY1Ci0gICAgdnBrdXd1cyB2Nix2Nix2NwotICAgIHZwa3VodXMgdjEsdjQsdjYKLQotICAgIHN0dnggICAgdjEscjkscjQKLSAgICBhZGRpICAgIHI5LHI5LDE2Ci0KLSAgICBiZG56IEw2Ci0KLSAgICBtdHNwciAgIDI1NixyMTEKLSAgICBibHIKLQotCi0uZ2xvYmwgX3BwY19icmlnaHRuZXNzX2dlbmVyaWMKLS5hbGlnbiAzCi1fcHBjX2JyaWdodG5lc3NfZ2VuZXJpYzoKLSAgICBsaXMgICByMTIsMHgwMEZGCi0gICAgb3JpICAgcjEyLHIxMiwweDAwRkYKLSAgICBzdWJpICByMyxyMyw0Ci0gICAgc3ViaSAgcjQscjQsNAotICAgIG10Y3RyIHI1Ci0gICAgYiBMMQotLmFsaWduIDQKLUwxOgotICAgIGx3enUgIHI3LDQocjMpCi0KLSAgICBybHdpbm0gIHI4LHI3LDE2LDI0LDMxCi0gICAgcmx3aW5tICByOSxyNywyNCwyNCwzMQotICAgIG11bGx3ICAgcjgscjgscjYKLSAgICBybHdpbm0gIHIxMCxyNywwLDI0LDMxCi0gICAgbXVsbHcgICByOSxyOSxyNgotICAgIHNyd2kgICAgcjgscjgsOAotICAgIG11bGx3ICAgcjEwLHIxMCxyNgotICAgIHNyd2kgICAgcjkscjksOAotCi0gICAgcmx3aW5tLiByMTEscjgsMCwwLDIzCi0gICAgYmVxICAgICBMMgotICAgIGxpICAgICAgcjgsMHhGRgotTDI6Ci0gICAgc3J3aSAgICByMTAscjEwLDgKLSAgICBybHdpbm0uIHIxMSxyOSwwLDAsMjMKLSAgICBiZXEgICAgIEwzCi0gICAgbGkgICAgICByOSwweEZGCi1MMzoKLSAgICBybHdpbm0gIHI3LHI4LDE2LDgsMTUKLSAgICBybHdpbm0uIHIxMSxyMTAsMCwwLDIzCi0gICAgYmVxICAgICBMNAotICAgIGxpICAgICAgcjEwLDB4RkYKLUw0OgotICAgIHJsd2ltaSAgcjcscjksOCwxNiwyMwotICAgIHJsd2ltaSAgcjcscjEwLDAsMjQsMzEKLQotICAgIHN0d3UgICAgcjcsNChyNCkKLSAgICBiZG56IEwxCi0KLSAgICBibHIKLQotCi0KLS5zdGF0aWNfZGF0YQotLmFsaWduIDQKLXZlY3RvcnRtcHdvcms6Ci0gICAgLmxvbmcgMCwwLDAsMAotCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9wcGNfem9vbV91bHRpbWF0ZS5oIGIvZ3N0L2dvb20vcHBjX3pvb21fdWx0aW1hdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QyYzhhMi4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9wcGNfem9vbV91bHRpbWF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBHdWlsbGF1bWUgQm9yaW9zLCBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBHZW5lcmljIFBvd2VyUEMgQ29kZSAqLwotdm9pZCBwcGNfem9vbV9nZW5lcmljIChpbnQgc2l6ZVgsIGludCBzaXplWSwgUGl4ZWwgKnNyYywgUGl4ZWwgKmRlc3QsIGludCAqYnJ1dFMsIGludCAqYnJ1dEQsIGludCBidWZmcmF0aW8sIGludCBwcmVjYWxDb2VmWzE2XVsxNl0pOwotCi0vKiBHNCBTcGVjaWZpYyBQb3dlclBDIENvZGUgKFBvc3NpYmxlIHVzZSBvZiBBbHRpdmVjIGFuZCBEYXRhIFN0cmVhbXMpICovCi12b2lkIHBwY196b29tX0c0IChpbnQgc2l6ZVgsIGludCBzaXplWSwgUGl4ZWwgKnNyYywgUGl4ZWwgKmRlc3QsIGludCAqYnJ1dFMsIGludCAqYnJ1dEQsIGludCBidWZmcmF0aW8sIGludCBwcmVjYWxDb2VmWzE2XVsxNl0pOwotCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9wcGNfem9vbV91bHRpbWF0ZS5zIGIvZ3N0L2dvb20vcHBjX3pvb21fdWx0aW1hdGUucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM3ZWM1MC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9wcGNfem9vbV91bHRpbWF0ZS5zCisrKyAvZGV2L251bGwKQEAgLTEsMzM2ICswLDAgQEAKLTsgUG93ZXJQQyBvcHRpbWl6ZWQgem9vbSBmb3IgR29vbQotOyDCqSAyMDAxLTIwMDMgR3VpbGxhdW1lIEJvcmlvcwotOyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi07IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi07IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi07Ci07IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotOyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotOyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotOyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLTsKLTsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLTsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLTsgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi07IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi07IENoYW5nZSBsb2cgOgotOyAyMSBEZWMgMjAwMyA6IFVzZSBvZiBhbHRpdmVjIGlzIG5vdyBkZXRlcm1pbmVkIHdpdGggYSBwYXJhbWV0ZXIKLQotOyBTZWN0aW9uIGRlZmluaXRpb24gOiBXZSB1c2UgYSByZWFkIG9ubHkgc2VjdGlvbgotLnRleHQKLQotOyBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGJ5IEMgcHJvZ3JhbSA6IHBwY196b29tCi07IFdlIGRlY2xhcmUgdGhpcyBsYWJlbCBhcyBhIGdsb2JhbCB0byBleHRlbmQgaXRzIHNjb3BlIG91dHNpZGUgdGhpcyBmaWxlCi0uZ2xvYmwgX3BwY196b29tX2dlbmVyaWMKLS5nbG9ibCBfcHBjX3pvb21fRzQKLQotOyBEZXNjcmlwdGlvbiA6Ci07IFRoaXMgcm91dGluZSBkeW5hbWljYWxseSBjb21wdXRlcyBhbmQgYXBwbGllcyBhIHpvb20gZmlsdGVyCi0KLTsgcGFyYW1ldGVycyA6Ci07IHIzICA8PT4gdW5zaWduZWQgaW50IHNpemVYIChpbiBwaXhlbHMpCi07IHI0ICA8PT4gdW5zaWduZWQgaW50IHNpemVZIChpbiBwaXhlbHMpCi07IHI1ICA8PT4gdW5zaWduZWQgaW50ICogZnJvbXBpeG1hcAotOyByNiAgPD0+IHVuc2lnbmVkIGludCAqIHRvcGl4bWFwCi07IHI3ICA8PT4gdW5zaWduZWQgaW50ICogYnJ1dFMKLTsgcjggIDw9PiB1bnNpZ25lZCBpbnQgKiBicnV0RAotOyByOSAgPD0+IHVuc2lnbmVkIGludCBidWZmcmF0aW8KLTsgcjEwIDw9PiBpbnQgWzE2XVsxNl0gcHJlY2FsY2NvZWZmcwotCi07IGdsb2JhbHMgYWZ0ZXIgaW5pdAotOyByNSAgPD0+IGZyb21waXhtYXAgLSAxIGJ5dGUgbmVlZGVkIGZvciBwcmVpbmNyZW1lbnRhbCBmZXRjaCAocmVwbGFjZXMgcjUpCi07IHI2ICA8PT4gdG9waXhtYXAgLSAxIGJ5dGUgbmVlZGVkIGZvciBwcmVpbmNyZW1lbnRhbCBmZXRjaCAocmVwbGFjZXMgcjYpCi07IHIzIDw9PiBheCA9IHggbWF4IGluIDE2dGggb2YgcGl4ZWxzIChyZXBsYWNlcyBvbGQgcjMpCi07IHI0IDw9PiBheSA9IHkgbWF4IGluIDE2dGggb2YgcGl4ZWxzIChyZXBsYWNlcyBvbGQgcjQpCi07IHIyMCA8PT4gcm93IHNpemUgaW4gYnl0ZXMKLTsgcjEyIDw9PiAweEZGMDBGRiAobWFzayBmb3IgcGFyYWxsZWwgMzIgYml0cyBwaXhzIGNvbXB1dGluZykKLTsgcjMwIDw9PiBicnV0UyAtIDEgYnl0ZSBuZWVkZWQgZm9yIHByZWluY3JlbWVudGFsIGZldGNoIChyZXBsYWNlcyByNykKLTsgcjMxIDw9PiBicnV0RCAtIDEgYnl0ZSBuZWVkZWQgZm9yIHByZWluY3JlbWVudGFsIGZldGNoIChyZXBsYWNlcyByOCkKLQotOyBBQkkgbm90ZXMgOgotOyByMSBpcyB0aGUgU3RhY2sgUG9pbnRlciAoU1ApID0+IERvIG5vdCB1c2UKLTsgcjEzLi5yMzEgYXJlIG5vbi12b2xhdGlsZXMgPT4gRG8gbm90IHVzZQotCi1fcHBjX3pvb21fZ2VuZXJpYzoKLQotOyBTYXZlcyB0aGUgdXNlZCBub24gdm9sYXRpbGUgcmVnaXN0ZXJzIGluIHRoZSBNYWNoLU8gc3RhY2sgcyBSZWQtWm9uZQotc3RtdyAJcjE4LC01NihyMSkKLQotOyBpbml0Ci1saSAgICAgIHIxOCwwCQk7IERlZmF1bHQgdmFsdWUgaWYgb3V0IG9mIHJhbmdlIDogMCAoQmxhY2spCi1tciAgICAgIHIxMSxyMTAKLWxpcyAgICAgcjEyLDB4RkYKLW11bGx3ICAgcjIscjMscjQJOyBOdW1iZXIgb2YgcGl4ZWxzIHRvIGNvbXB1dGUKLXN1YmkgICAgcjMwLHI4LDAKLXNsd2kJcjIwLHIzLDIKLXNyYXdpICAgcjE5LHIyMCwyCi1vcmkgICAgIHIxMixyMTIsMHhGRgotc3ViaSAgICByMyxyMywxCi1zdWJpICAgIHI0LHI0LDEKLW10c3ByCWN0cixyMgkJOyBJbml0IHRoZSBsb29wIGNvdW50IChvbmUgbG9vcCBwZXIgcGl4ZWwgY29tcHV0ZWQpCi1zdWJpICAgIHIzMSxyNywwCi1zdWJpICAgIHI2LHI2LDQKLXNsd2kJcjMscjMsNAotc2x3aQlyNCxyNCw0Ci0KLTtwcmUgaW5pdCBmb3IgbG9vcAotbHd6CXIyLDAocjMxKSAgICA7IHB4Ci1sd3oJcjI5LDQocjMxKSAgIDsgcHkKLWx3eglyOCwwKHIzMCkgICAgOyBweDIKLWx3eglyMTAsNChyMzApICAgOyBweTIKLQotYiAgICAgICBMMQotLmFsaWduICA1Ci1MMToKLQotOyBjb21wdXRlcyBkeW5hbWljYWxseSB0aGUgcG9zaXRpb24gdG8gZmV0Y2gKLXN1YiAgICAgcjgscjgscjIKLXN1YiAgICAgcjEwLHIxMCxyMjkKLW11bGx3ICAgcjgscjgscjkKLWFkZGkgICAgcjMxLHIzMSw4Ci1tdWxsdyAgIHIxMCxyMTAscjkKLWFkZGkgICAgcjMwLHIzMCw4Ci0KLXNyYXdpICAgcjgscjgsMTYKLXNyYXdpICAgcjEwLHIxMCwxNgotYWRkICAgICByMixyMixyOAotYWRkICAgICByMjkscjI5LHIxMAotCi07IGlmIHB4PmF4IG9yIHB5PmF5IGdvdG8gb3V0b2ZyYW5nZQotOyBjb21wdXRlcyB0aGUgYXR0ZW51YXRpb24gY29lZmZzIGFuZCB0aGUgb3JpZ2luYWwgcG9pbnQgYWRkcmVzcwotcmx3aW5tICByMTAscjIsNiwyOC02LDMxLTYgOyByMTAgPC0gKHIyIDw8IDIpICYgMHgwMDAwMDJEMCAgIChyMTA9KHIyJTE2KSo0KjE2KQotY21wbCAgICBjcjQsMCxyMixyMwotcmx3aW1pICByMTAsIHIyOSwgMiwgMjgtMiwgMzEtMiA7IHIxMCA8LSAoKHIyOSA8PCAyKSAmIDB4MDAwMDAwMkQpIHwgKHIxMCAmICEweDAwMDAwMDJEKSAgICAgIChyMTA9KHIxMCUxNikqNCB8IHIxMCkKLWNtcGwgICAgY3I3LDAscjI5LHI0Ci1zcmF3aSAgIHIyOSxyMjksNCAgICAgOyBwb3MgY29tcHV0aW5nCi1iZ2UtCWNyNCxMNAotc3Jhd2kgICByMixyMiw0ICAgICAgIDsgcG9zIGNvbXB1dGluZwotbXVsbHcgICByMjksIHIyOSxyMTkgIDsgcG9zIGNvbXB1dGluZwotYmdlLQljcjcsTDQKLQotOyBDaGFubmVscyBub3RhdGlvbiA6IDAwMTEyMjMzIChBQVJSVlZCQikKLQotYWRkICAgICByMixyMixyMjkgICAgCQk7IHBvcyBjb21wdXRpbmcKLWx3enggICAgcjEwLHIxMSxyMTAJCTsgTG9hZHMgY29lZnMKLXNsd2kgICAgcjIscjIsMiAgICAgIAkJOyBwb3MgY29tcHV0aW5nCi1hZGQJcjIscjIscjUgICAgIAkJOyBwb3MgY29tcHV0aW5nCi1ybHdpbm0gIHIyMSxyMTAsMCwyNCwzMQkgICAgICAgIDsgSXNvbGF0ZXMgY29lZjEgKD8/Pz8/PzExIC0+IDAwMDAwMDExKQotbHd6CXIyNSwwKHIyKQkJOyBMb2FkcyBjb2wxIC0+IHIyNQotbHd6CXIyNiw0KHIyKQkJOyBMb2FkcyBjb2wyIC0+IHIyNgotcmx3aW5tICByMjIscjEwLDI0LDI0LDMxCTsgSXNvbGF0ZXMgY29lZjIgKD8/Pz8yMj8/IC0+IDAwMDAwMDIyKQotcmx3aW5tICByMjMscjEwLDE2LDI0LDMxCTsgSXNvbGF0ZXMgY29lZjMgKD8/MzM/Pz8/IC0+IDAwMDAwMDMzKQotYWRkCXIyLHIyLHIyMAkJOyBBZGRzIG9uZSBsaW5lIGZvciBmdXR1cmUgbG9hZCBvZiBjb2wzIGFuZCBjb2w0Ci1hbmQJcjgsIHIyNSxyMTIJCTsgTWFza3MgY29sMSBjaGFubmVscyAxICYgMyA6IDB4MDBYWDAwWFgKLXJsd2lubSAgcjI0LHIxMCw4LDI0LDMxCQk7IElzb2xhdGVzIGNvZWY0ICg0ND8/Pz8/PyAtPiAwMDAwMDA0NCkKLWFuZGkuCXIyNSxyMjUsMHhGRjAwCQk7IE1hc2tzIGNvbDEgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotbXVsbHcJcjgsIHI4LCByMjEJCTsgQXBwbGllcyBjb2VmMSBvbiBjb2wxIGNoYW5uZWxzIDEgJiAzCi0KLQotOyBjb21wdXRlcyBmaW5hbCBwaXhlbCBjb2xvcgotYW5kCXIxMCxyMjYscjEyCQk7IE1hc2tzIGNvbDIgY2hhbm5lbHMgMSAmIDMgOiAweDAwWFgwMFhYCi1sd3oJcjI3LDAocjIpCQk7IExvYWRzIGNvbDMgLT4gcjI3Ci1tdWxsdwlyMTAscjEwLHIyMgkJOyBBcHBsaWVzIGNvZWYyIG9uIGNvbDIgY2hhbm5lbHMgMSAmIDMKLW11bGx3CXIyNSxyMjUscjIxCQk7IEFwcGxpZXMgY29lZjEgb24gY29sMSBjaGFubmVsIDIKLWFuZGkuCXIyOSxyMjYsMHhGRjAwCQk7IE1hc2tzIGNvbDIgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotbXVsbHcJcjI5LHIyOSxyMjIJCTsgQXBwbGllcyBjb2VmMiBvbiBjb2wyIGNoYW5uZWwgMgotbHd6CXIyOCw0KHIyKQkJOyBMb2FkcyBjb2w0IC0+IHIyOAotYWRkCXI4ICxyOCAscjEwCQk7IEFkZHMgY29sMSAmIGNvbDIgY2hhbm5lbHMgMSAmIDMKLWFuZAlyMTAscjI3LHIxMgkJOyBNYXNrcyBjb2wzIGNoYW5uZWxzIDEgJiAzIDogMHgwMFhYMDBYWAotYWRkCXIyNSxyMjUscjI5CQk7IEFkZHMgY29sMSAmIGNvbDIgY2hhbm5lbCAyCi1tdWxsdwlyMTAscjEwLHIyMwkJOyBBcHBsaWVzIGNvZWYzIG9uIGNvbDMgY2hhbm5lbHMgMSAmIDMKLWFuZGkuCXIyOSxyMjcsMHhGRjAwCQk7IE1hc2tzIGNvbDMgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotbXVsbHcJcjI5LHIyOSxyMjMJCTsgQXBwbGllcyBjb2VmMyBvbiBjb2wzIGNoYW5uZWwgMgotbHd6CXIyLDAocjMxKQkJOyBweAotYWRkCXI3ICxyOCAscjEwCQk7IEFkZHMgY29sMyB0byAoY29sMSArIGNvbDIpIGNoYW5uZWxzIDEgJiAzCi1hbmQJcjEwLHIyOCxyMTIJCTsgTWFza3MgY29sNCBjaGFubmVscyAxICYgMyA6IDB4MDBYWDAwWFgKLW11bGx3CXIxMCxyMTAscjI0CQk7IEFwcGxpZXMgY29lZjQgb24gY29sNCBjaGFubmVscyAxICYgMwotYWRkCXIyNSxyMjUscjI5CQk7IEFkZHMgY29sIDMgdG8gKGNvbDEgKyBjb2wyKSBjaGFubmVsIDIKLWx3eiAJcjgsMChyMzApICAgIAkJOyBweDIKLWFuZGkuCXIyOCxyMjgsMHhGRjAwCQk7IE1hc2tzIGNvbDQgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotYWRkCXI3ICxyNyAscjEwCQk7IEFkZHMgY29sNCB0byAoY29sMSArIGNvbDIgKyBjb2wzKSBjaGFubmVscyAxICYgMwotbHd6CXIxMCw0KHIzMCkgICAJCTsgcHkyCi1tdWxsdwlyMjgscjI4LHIyNAkJOyBBcHBsaWVzIGNvZWY0IG9uIGNvbDQgY2hhbm5lbCAyCi1zcmF3aQlyNywgcjcsIDgJCTsgKHN1bSBvZiBjaGFubmVscyAxICYgMykgPj4gOAotbHd6CXIyOSw0KHIzMSkgICAgICAgICAgICAgIDsgcHkKLWFkZAlyMjUscjI1LHIyOAkJOyBBZGRzIGNvbCA0IHRvIChjb2wxICsgY29sMiArIGNvbDMpIGNoYW5uZWwgMgotcmx3aW1pICByNywgcjI1LCAyNCwgMTYsIDIzCTsgKCgoc3VtIG9mIGNoYW5uZWxzIDIpID4+IDggKSAmIDB4MDAwMEZGMDApIHwgKChzdW0gb2YgY2hhbm5lbHMgMSBhbmQgMykgJiAweEZGRkYwMEZGKQotc3R3dQlyNyw0KHI2KQkJOyBTdG9yZXMgdGhlIGNvbXB1dGVkIHBpeGVsCi1iZG56CUwxCQkJOyBJdGVyYXRlIGFnYWluIGlmIG5lZWRlZAotYiAgICAgICBMMwk7Z290byBlbmQJOyBJZiBub3QsIHJldHVybnMgZnJvbSB0aGUgZnVuY3Rpb24KLQotCi07IGlmIG91dCBvZiByYW5nZQotTDQ6Ci1zdHd1CXIxOCw0KHI2KQotbHd6CXI4LDAocjMwKSAgICA7IHB4MgotbHd6CXIxMCw0KHIzMCkgICA7IHB5MgotbHd6CXIyLDAocjMxKSAgICA7IHB4Ci1sd3oJcjI5LDQocjMxKSAgIDsgcHkKLWJkbnoJTDEKLQotCi1MMzoKLQotOyBSZXN0b3JlIHNhdmVkIHJlZ2lzdGVycyBhbmQgcmV0dXJuCi1sbXcJcjE4LC01NihyMSkKLWJscgotCi0KLQotCi0KLQotCi0KLV9wcGNfem9vbV9HNDoKLQotOyBTYXZlcyB0aGUgdXNlZCBub24gdm9sYXRpbGUgcmVnaXN0ZXJzIGluIHRoZSBNYWNoLU8gc3RhY2sgcyBSZWQtWm9uZQotc3RtdyAJcjE3LC02MChyMSkKLQotOyBpbml0Ci1saSAgICAgIHIxOCwwCQk7IERlZmF1bHQgdmFsdWUgaWYgb3V0IG9mIHJhbmdlIDogMCAoQmxhY2spCi1tciAgICAgIHIxMSxyMTAKLWxpcyAgICAgcjEyLDB4RkYKLW11bGx3ICAgcjIscjMscjQJOyBOdW1iZXIgb2YgcGl4ZWxzIHRvIGNvbXB1dGUKLXN1YmkgICAgcjMwLHI4LDAKLXNsd2kJcjIwLHIzLDIKLXNyYXdpICAgcjE5LHIyMCwyCi1vcmkgICAgIHIxMixyMTIsMHhGRgotc3ViaSAgICByMyxyMywxCi1zdWJpICAgIHI0LHI0LDEKLW10c3ByCWN0cixyMgkJOyBJbml0IHRoZSBsb29wIGNvdW50IChvbmUgbG9vcCBwZXIgcGl4ZWwgY29tcHV0ZWQpCi1zdWJpICAgIHIzMSxyNywwCi1zdWJpICAgIHI2LHI2LDQKLXNsd2kJcjMscjMsNAotc2x3aQlyNCxyNCw0Ci0KLTtwcmUgaW5pdCBmb3IgbG9vcAotbHd6CXIyLDAocjMxKSAgICA7IHB4Ci1sd3oJcjI5LDQocjMxKSAgIDsgcHkKLWx3eglyOCwwKHIzMCkgICAgOyBweDIKLWx3eglyMTAsNChyMzApICAgOyBweTIKLQotOyoqKioqKioqKioqKioqKioqKioqKgotbGlzICAgICByMTcsMHgwRjAxCi0KLWIgICAgICAgTDEwMAotLmFsaWduICA1Ci1MMTAwOgotCi1hZGRpICAgIHI2LHI2LDQKLQotOyBPcHRpbWl6YXRpb24gdG8gZW5zdXJlIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKLTsgd29uJ3QgYmUgbG9hZGVkIGludG8gdGhlIGRhdGEgY2FjaGUKLXJsd2lubS4gcjAscjYsMCwyNywzMQotYm5lKyAgICBMNTAwCi1kY2J6ICAgIDAscjYKLTtkY2JhICAgIDAscjYKLUw1MDA6Ci0KLTsgY29tcHV0ZXMgZHluYW1pY2FsbHkgdGhlIHBvc2l0aW9uIHRvIGZldGNoCi07bXVsbHcgICByOCxyOCxyMjkKLTttdWxsdyAgIHIyLHIyLHIyOQotO2FkZCAgICAgcjIscjgscjIKLTtzcmF3aSAgIHIyLHIyLDE3Ci0KLXN1YiAgICAgcjgscjgscjIKLXN1YiAgICAgcjEwLHIxMCxyMjkKLW11bGx3ICAgcjgscjgscjkKLWFkZGkgICAgcjMxLHIzMSw4Ci1tdWxsdyAgIHIxMCxyMTAscjkKLWFkZGkgICAgcjMwLHIzMCw4Ci0KLWRzdCAgICAgcjMwLHIxNywwCi0KLXNyYXdpICAgIHI4LHI4LDE2Ci1zcmF3aSAgICByMTAscjEwLDE2Ci1hZGQgICAgIHIyLHIyLHI4Ci1hZGQgICAgIHIyOSxyMjkscjEwCi0KLWRzdCAgICAgcjMxLHIxNywxCi0KLTsgaWYgcHg+YXggb3IgcHk+YXkgZ290byBvdXRvZnJhbmdlCi07IGNvbXB1dGVzIHRoZSBhdHRlbnVhdGlvbiBjb2VmZnMgYW5kIHRoZSBvcmlnaW5hbCBwb2ludCBhZGRyZXNzCi1ybHdpbm0gIHIxMCxyMiw2LDI4LTYsMzEtNiA7IHIxMCA8LSAocjIgPDwgMikgJiAweDAwMDAwMkQwICAgKHIxMD0ocjIlMTYpKjQqMTYpCi1jbXBsICAgIGNyNCwwLHIyLHIzCi1ybHdpbWkgIHIxMCwgcjI5LCAyLCAyOC0yLCAzMS0yIDsgcjEwIDwtICgocjI5IDw8IDIpICYgMHgwMDAwMDAyRCkgfCAocjEwICYgITB4MDAwMDAwMkQpICAgICAgKHIxMD0ocjI5JTE2KSo0IHwgcjEwKQotY21wbCAgICBjcjcsMCxyMjkscjQKLXNyYXdpICAgcjI5LHIyOSw0ICAgICA7IHBvcyBjb21wdXRpbmcKLWJnZS0JY3I0LEw0MDAKLXNyYXdpICAgcjIscjIsNCAgICAgICA7IHBvcyBjb21wdXRpbmcKLW11bGx3ICAgcjI5LCByMjkscjE5ICA7IHBvcyBjb21wdXRpbmcKLWJnZS0JY3I3LEw0MDAKLQotOyBDaGFubmVscyBub3RhdGlvbiA6IDAwMTEyMjMzIChBQVJSVlZCQikKLQotYWRkICAgICByMixyMixyMjkgICAgCQk7IHBvcyBjb21wdXRpbmcKLWx3enggICAgcjEwLHIxMSxyMTAJCTsgTG9hZHMgY29lZnMKLXNsd2kgICAgcjIscjIsMiAgICAgIAkJOyBwb3MgY29tcHV0aW5nCi1hZGQJcjIscjIscjUgICAgIAkJOyBwb3MgY29tcHV0aW5nCi1ybHdpbm0gIHIyMSxyMTAsMCwyNCwzMQkgICAgICAgIDsgSXNvbGF0ZXMgY29lZjEgKD8/Pz8/PzExIC0+IDAwMDAwMDExKQotbHd6CXIyNSwwKHIyKQkJOyBMb2FkcyBjb2wxIC0+IHIyNQotbHd6CXIyNiw0KHIyKQkJOyBMb2FkcyBjb2wyIC0+IHIyNgotcmx3aW5tICByMjIscjEwLDI0LDI0LDMxCTsgSXNvbGF0ZXMgY29lZjIgKD8/Pz8yMj8/IC0+IDAwMDAwMDIyKQotcmx3aW5tICByMjMscjEwLDE2LDI0LDMxCTsgSXNvbGF0ZXMgY29lZjMgKD8/MzM/Pz8/IC0+IDAwMDAwMDMzKQotYWRkCXIyLHIyLHIyMAkJOyBBZGRzIG9uZSBsaW5lIGZvciBmdXR1cmUgbG9hZCBvZiBjb2wzIGFuZCBjb2w0Ci1hbmQJcjgsIHIyNSxyMTIJCTsgTWFza3MgY29sMSBjaGFubmVscyAxICYgMyA6IDB4MDBYWDAwWFgKLXJsd2lubSAgcjI0LHIxMCw4LDI0LDMxCQk7IElzb2xhdGVzIGNvZWY0ICg0ND8/Pz8/PyAtPiAwMDAwMDA0NCkKLWRzdCAgICAgcjIscjE3LDIKLXJsd2lubSAgcjI1LHIyNSwwLDE2LDIzCQk7IE1hc2tzIGNvbDEgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotO2FuZGkuCXIyNSxyMjUsMHhGRjAwCQk7IE1hc2tzIGNvbDEgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotbXVsbHcJcjgsIHI4LCByMjEJCTsgQXBwbGllcyBjb2VmMSBvbiBjb2wxIGNoYW5uZWxzIDEgJiAzCi0KLQotOyBjb21wdXRlcyBmaW5hbCBwaXhlbCBjb2xvcgotYW5kCXIxMCxyMjYscjEyCQk7IE1hc2tzIGNvbDIgY2hhbm5lbHMgMSAmIDMgOiAweDAwWFgwMFhYCi1sd3oJcjI3LDAocjIpCQk7IExvYWRzIGNvbDMgLT4gcjI3Ci1tdWxsdwlyMTAscjEwLHIyMgkJOyBBcHBsaWVzIGNvZWYyIG9uIGNvbDIgY2hhbm5lbHMgMSAmIDMKLW11bGx3CXIyNSxyMjUscjIxCQk7IEFwcGxpZXMgY29lZjEgb24gY29sMSBjaGFubmVsIDIKLXJsd2lubSAgcjI5LHIyNiwwLDE2LDIzCQk7IE1hc2tzIGNvbDIgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotO2FuZGkuCXIyOSxyMjYsMHhGRjAwCQk7IE1hc2tzIGNvbDIgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotbXVsbHcJcjI5LHIyOSxyMjIJCTsgQXBwbGllcyBjb2VmMiBvbiBjb2wyIGNoYW5uZWwgMgotbHd6CXIyOCw0KHIyKQkJOyBMb2FkcyBjb2w0IC0+IHIyOAotYWRkCXI4ICxyOCAscjEwCQk7IEFkZHMgY29sMSAmIGNvbDIgY2hhbm5lbHMgMSAmIDMKLWFuZAlyMTAscjI3LHIxMgkJOyBNYXNrcyBjb2wzIGNoYW5uZWxzIDEgJiAzIDogMHgwMFhYMDBYWAotYWRkCXIyNSxyMjUscjI5CQk7IEFkZHMgY29sMSAmIGNvbDIgY2hhbm5lbCAyCi1tdWxsdwlyMTAscjEwLHIyMwkJOyBBcHBsaWVzIGNvZWYzIG9uIGNvbDMgY2hhbm5lbHMgMSAmIDMKLXJsd2lubSAgcjI5LHIyNywwLDE2LDIzCQk7IE1hc2tzIGNvbDMgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotO2FuZGkuCXIyOSxyMjcsMHhGRjAwCQk7IE1hc2tzIGNvbDMgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotbXVsbHcJcjI5LHIyOSxyMjMJCTsgQXBwbGllcyBjb2VmMyBvbiBjb2wzIGNoYW5uZWwgMgotbHd6CXIyLDAocjMxKQkJOyBweAotYWRkCXI3ICxyOCAscjEwCQk7IEFkZHMgY29sMyB0byAoY29sMSArIGNvbDIpIGNoYW5uZWxzIDEgJiAzCi1hbmQJcjEwLHIyOCxyMTIJCTsgTWFza3MgY29sNCBjaGFubmVscyAxICYgMyA6IDB4MDBYWDAwWFgKLW11bGx3CXIxMCxyMTAscjI0CQk7IEFwcGxpZXMgY29lZjQgb24gY29sNCBjaGFubmVscyAxICYgMwotYWRkCXIyNSxyMjUscjI5CQk7IEFkZHMgY29sIDMgdG8gKGNvbDEgKyBjb2wyKSBjaGFubmVsIDIKLWx3eiAJcjgsMChyMzApICAgIAkJOyBweDIKLXJsd2lubSAgcjI4LHIyOCwwLDE2LDIzCQk7IE1hc2tzIGNvbDQgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotO2FuZGkuCXIyOCxyMjgsMHhGRjAwCQk7IE1hc2tzIGNvbDQgY2hhbm5lbCAyIDogMHgwMDAwWFgwMAotYWRkCXI3ICxyNyAscjEwCQk7IEFkZHMgY29sNCB0byAoY29sMSArIGNvbDIgKyBjb2wzKSBjaGFubmVscyAxICYgMwotbHd6CXIxMCw0KHIzMCkgICAJCTsgcHkyCi1tdWxsdwlyMjgscjI4LHIyNAkJOyBBcHBsaWVzIGNvZWY0IG9uIGNvbDQgY2hhbm5lbCAyCi1zcmF3aQlyNywgcjcsIDgJCTsgKHN1bSBvZiBjaGFubmVscyAxICYgMykgPj4gOAotbHd6CXIyOSw0KHIzMSkgICAgICAgICAgICAgIDsgcHkKLWFkZAlyMjUscjI1LHIyOAkJOyBBZGRzIGNvbCA0IHRvIChjb2wxICsgY29sMiArIGNvbDMpIGNoYW5uZWwgMgotcmx3aW1pICByNywgcjI1LCAyNCwgMTYsIDIzCTsgKCgoc3VtIG9mIGNoYW5uZWxzIDIpID4+IDggKSAmIDB4MDAwMEZGMDApIHwgKChzdW0gb2YgY2hhbm5lbHMgMSBhbmQgMykgJiAweEZGRkYwMEZGKQotc3R3CXI3LDAocjYpCQk7IFN0b3JlcyB0aGUgY29tcHV0ZWQgcGl4ZWwKLWJkbnoJTDEwMAkJCTsgSXRlcmF0ZSBhZ2FpbiBpZiBuZWVkZWQKLWIgICAgICAgTDMwMAk7Z290byBlbmQJOyBJZiBub3QsIHJldHVybnMgZnJvbSB0aGUgZnVuY3Rpb24KLQotCi07IGlmIG91dCBvZiByYW5nZQotTDQwMDoKLXN0dwlyMTgsMChyNikKLWx3eglyOCwwKHIzMCkgICAgOyBweDIKLWx3eglyMTAsNChyMzApICAgOyBweTIKLWx3eglyMiwwKHIzMSkgICAgOyBweAotbHd6CXIyOSw0KHIzMSkgICA7IHB5Ci1iZG56CUwxMDAKLQotCi1MMzAwOgotCi07IFJlc3RvcmUgc2F2ZWQgcmVnaXN0ZXJzIGFuZCByZXR1cm4KLWxtdwlyMTcsLTYwKHIxKQotYmxyCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9zb3VuZF90ZXN0ZXIuYyBiL2dzdC9nb29tL3NvdW5kX3Rlc3Rlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDJmMGI1Li4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL3NvdW5kX3Rlc3Rlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJzb3VuZF90ZXN0ZXIuaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKiBzb21lIGNvbnN0YW50cyAqLwotI2RlZmluZSBCSUdfR09PTV9EVVJBVElPTiAxMDAKLSNkZWZpbmUgQklHX0dPT01fU1BFRURfTElNSVQgMC4xZgotCi0jZGVmaW5lIEFDQ0VMX01VTFQgMC45NWYKLSNkZWZpbmUgU1BFRURfTVVMVCAwLjk5ZgotCi0KLXZvaWQKLWV2YWx1YXRlX3NvdW5kIChnaW50MTYgZGF0YVsyXVs1MTJdLCBTb3VuZEluZm8gKiBpbmZvKQotewotCi0gIGludCBpOwotICBmbG9hdCBkaWZhY2NlbDsKLSAgZmxvYXQgcHJldnNwZWVkOwotCi0gIC8qIGZpbmQgdGhlIG1heCAqLwotICBpbnQgaW5jdmFyID0gMDsKLQotICBmb3IgKGkgPSAwOyBpIDwgNTEyOyBpICs9IDIpIHsKLSAgICBpZiAoaW5jdmFyIDwgZGF0YVswXVtpXSkKLSAgICAgIGluY3ZhciA9IGRhdGFbMF1baV07Ci0gIH0KLQotICBpZiAoaW5jdmFyID4gaW5mby0+YWxsVGltZXNNYXgpCi0gICAgaW5mby0+YWxsVGltZXNNYXggPSBpbmN2YXI7Ci0KLSAgLyogdm9sdW1lIHNvbm9yZSAqLwotICBpbmZvLT52b2x1bWUgPSAoZmxvYXQpIGluY3ZhciAvIChmbG9hdCkgaW5mby0+YWxsVGltZXNNYXg7Ci0gIG1lbWNweSAoaW5mby0+c2FtcGxlc1swXSwgZGF0YVswXSwgNTEyICogc2l6ZW9mIChzaG9ydCkpOwotICBtZW1jcHkgKGluZm8tPnNhbXBsZXNbMV0sIGRhdGFbMV0sIDUxMiAqIHNpemVvZiAoc2hvcnQpKTsKLQotICBkaWZhY2NlbCA9IGluZm8tPmFjY2VsdmFyOwotICBpbmZvLT5hY2NlbHZhciA9IGluZm8tPnZvbHVtZTsgICAgICAgIC8qIGFjY2VsIGVudHJlIDAgZXQgMSAqLwotCi0gIC8qIHRyYW5zZm9ybWF0aW9ucyBzdXIgbGEgdml0ZXNzZSBkdSBzb24gKi8KLSAgaWYgKGluZm8tPnNwZWVkdmFyID4gMS4wZikKLSAgICBpbmZvLT5zcGVlZHZhciA9IDEuMGY7Ci0KLSAgaWYgKGluZm8tPnNwZWVkdmFyIDwgMC4xZikKLSAgICBpbmZvLT5hY2NlbHZhciAqPSAoMS4wZiAtIChmbG9hdCkgaW5mby0+c3BlZWR2YXIpOwotICBlbHNlIGlmIChpbmZvLT5zcGVlZHZhciA8IDAuM2YpCi0gICAgaW5mby0+YWNjZWx2YXIgKj0gKDAuOWYgLSAoZmxvYXQpIChpbmZvLT5zcGVlZHZhciAtIDAuMWYpIC8gMi4wZik7Ci0gIGVsc2UKLSAgICBpbmZvLT5hY2NlbHZhciAqPSAoMC44ZiAtIChmbG9hdCkgKGluZm8tPnNwZWVkdmFyIC0gMC4zZikgLyA0LjBmKTsKLQotICAvKiBhZG91Y2lzc2VtZW50IGRlIGwnYWNjZWxlcmF0aW9uICovCi0gIGluZm8tPmFjY2VsdmFyICo9IEFDQ0VMX01VTFQ7Ci0gIGlmIChpbmZvLT5hY2NlbHZhciA8IDApCi0gICAgaW5mby0+YWNjZWx2YXIgPSAwOwotCi0gIGRpZmFjY2VsID0gaW5mby0+YWNjZWx2YXIgLSBkaWZhY2NlbDsKLSAgaWYgKGRpZmFjY2VsIDwgMCkKLSAgICBkaWZhY2NlbCA9IC1kaWZhY2NlbDsKLQotICAvKiBtaXNlIGEgam91ciBkZSBsYSB2aXRlc3NlICovCi0gIHByZXZzcGVlZCA9IGluZm8tPnNwZWVkdmFyOwotICBpbmZvLT5zcGVlZHZhciA9IChpbmZvLT5zcGVlZHZhciArIGRpZmFjY2VsICogMC41ZikgLyAyOwotICBpbmZvLT5zcGVlZHZhciAqPSBTUEVFRF9NVUxUOwotICBpbmZvLT5zcGVlZHZhciA9IChpbmZvLT5zcGVlZHZhciArIDMuMGYgKiBwcmV2c3BlZWQpIC8gNC4wZjsKLSAgaWYgKGluZm8tPnNwZWVkdmFyIDwgMCkKLSAgICBpbmZvLT5zcGVlZHZhciA9IDA7Ci0gIGlmIChpbmZvLT5zcGVlZHZhciA+IDEpCi0gICAgaW5mby0+c3BlZWR2YXIgPSAxOwotCi0gIC8qIHRlbXBzIGR1IGdvb20gKi8KLSAgaW5mby0+dGltZVNpbmNlTGFzdEdvb20rKzsKLSAgaW5mby0+dGltZVNpbmNlTGFzdEJpZ0dvb20rKzsKLSAgaW5mby0+Y3ljbGUrKzsKLQotICAvKiBkZXRlY3Rpb24gZGVzIG5vdXZlYXV4IGdvb21zICovCi0gIGlmICgoaW5mby0+c3BlZWR2YXIgPiAoZmxvYXQpIElWQUwgKGluZm8tPmJpZ2dvb21fc3BlZWRfbGltaXRfcCkgLyAxMDAuMGYpCi0gICAgICAmJiAoaW5mby0+YWNjZWx2YXIgPiBpbmZvLT5iaWdHb29tTGltaXQpCi0gICAgICAmJiAoaW5mby0+dGltZVNpbmNlTGFzdEJpZ0dvb20gPiBCSUdfR09PTV9EVVJBVElPTikpIHsKLSAgICBpbmZvLT50aW1lU2luY2VMYXN0QmlnR29vbSA9IDA7Ci0gIH0KLQotICBpZiAoaW5mby0+YWNjZWx2YXIgPiBpbmZvLT5nb29tX2xpbWl0KSB7Ci0gICAgLyogVE9ETzogdGVzdGVyICYmIChpbmZvLT50aW1lU2luY2VMYXN0R29vbSA+IDIwKSkgeyAqLwotICAgIGluZm8tPnRvdGFsZ29vbSsrOwotICAgIGluZm8tPnRpbWVTaW5jZUxhc3RHb29tID0gMDsKLSAgICBpbmZvLT5nb29tUG93ZXIgPSBpbmZvLT5hY2NlbHZhciAtIGluZm8tPmdvb21fbGltaXQ7Ci0gIH0KLQotICBpZiAoaW5mby0+YWNjZWx2YXIgPiBpbmZvLT5wcm92X21heCkKLSAgICBpbmZvLT5wcm92X21heCA9IGluZm8tPmFjY2VsdmFyOwotCi0gIGlmIChpbmZvLT5nb29tX2xpbWl0ID4gMSkKLSAgICBpbmZvLT5nb29tX2xpbWl0ID0gMTsKLQotICAvKiB0b3V0ZSBsZXMgMiBzZWNvbmRlcyA6IHbvv71yaWZpZXIgc2kgbGUgdGF1eCBkZSBnb29tIGVzdCBjb3JyZWN0Ci0gICAqIGV0IGxlIG1vZGlmaWVyIHNpbm9uLi4gKi8KLSAgaWYgKGluZm8tPmN5Y2xlICUgNjQgPT0gMCkgewotICAgIGlmIChpbmZvLT5zcGVlZHZhciA8IDAuMDFmKQotICAgICAgaW5mby0+Z29vbV9saW1pdCAqPSAwLjkxOwotICAgIGlmIChpbmZvLT50b3RhbGdvb20gPiA0KSB7Ci0gICAgICBpbmZvLT5nb29tX2xpbWl0ICs9IDAuMDI7Ci0gICAgfQotICAgIGlmIChpbmZvLT50b3RhbGdvb20gPiA3KSB7Ci0gICAgICBpbmZvLT5nb29tX2xpbWl0ICo9IDEuMDNmOwotICAgICAgaW5mby0+Z29vbV9saW1pdCArPSAwLjAzOwotICAgIH0KLSAgICBpZiAoaW5mby0+dG90YWxnb29tID4gMTYpIHsKLSAgICAgIGluZm8tPmdvb21fbGltaXQgKj0gMS4wNWY7Ci0gICAgICBpbmZvLT5nb29tX2xpbWl0ICs9IDAuMDQ7Ci0gICAgfQotICAgIGlmIChpbmZvLT50b3RhbGdvb20gPT0gMCkgewotICAgICAgaW5mby0+Z29vbV9saW1pdCA9IGluZm8tPnByb3ZfbWF4IC0gMC4wMjsKLSAgICB9Ci0gICAgaWYgKChpbmZvLT50b3RhbGdvb20gPT0gMSkgJiYgKGluZm8tPmdvb21fbGltaXQgPiAwLjAyKSkKLSAgICAgIGluZm8tPmdvb21fbGltaXQgLT0gMC4wMTsKLSAgICBpbmZvLT50b3RhbGdvb20gPSAwOwotICAgIGluZm8tPmJpZ0dvb21MaW1pdCA9Ci0gICAgICAgIGluZm8tPmdvb21fbGltaXQgKiAoMS4wZiArCi0gICAgICAgIChmbG9hdCkgSVZBTCAoaW5mby0+YmlnZ29vbV9mYWN0b3JfcCkgLyA1MDAuMGYpOwotICAgIGluZm8tPnByb3ZfbWF4ID0gMDsKLSAgfQotCi0gIC8qIG1pc2UgYSBqb3VyIGRlcyBwYXJhbWV0cmVzIHBvdXIgbGEgR1VJICovCi0gIEZWQUwgKGluZm8tPnZvbHVtZV9wKSA9IGluZm8tPnZvbHVtZTsKLSAgaW5mby0+dm9sdW1lX3AuY2hhbmdlX2xpc3RlbmVyICgmaW5mby0+dm9sdW1lX3ApOwotICBGVkFMIChpbmZvLT5zcGVlZF9wKSA9IGluZm8tPnNwZWVkdmFyICogNDsKLSAgaW5mby0+c3BlZWRfcC5jaGFuZ2VfbGlzdGVuZXIgKCZpbmZvLT5zcGVlZF9wKTsKLSAgRlZBTCAoaW5mby0+YWNjZWxfcCkgPSBpbmZvLT5hY2NlbHZhcjsKLSAgaW5mby0+YWNjZWxfcC5jaGFuZ2VfbGlzdGVuZXIgKCZpbmZvLT5hY2NlbF9wKTsKLQotICBGVkFMIChpbmZvLT5nb29tX2xpbWl0X3ApID0gaW5mby0+Z29vbV9saW1pdDsKLSAgaW5mby0+Z29vbV9saW1pdF9wLmNoYW5nZV9saXN0ZW5lciAoJmluZm8tPmdvb21fbGltaXRfcCk7Ci0gIEZWQUwgKGluZm8tPmdvb21fcG93ZXJfcCkgPSBpbmZvLT5nb29tUG93ZXI7Ci0gIGluZm8tPmdvb21fcG93ZXJfcC5jaGFuZ2VfbGlzdGVuZXIgKCZpbmZvLT5nb29tX3Bvd2VyX3ApOwotICBGVkFMIChpbmZvLT5sYXN0X2dvb21fcCkgPSAxLjAgLSAoKGZsb2F0KSBpbmZvLT50aW1lU2luY2VMYXN0R29vbSAvIDIwLjBmKTsKLSAgaW5mby0+bGFzdF9nb29tX3AuY2hhbmdlX2xpc3RlbmVyICgmaW5mby0+bGFzdF9nb29tX3ApOwotICBGVkFMIChpbmZvLT5sYXN0X2JpZ2dvb21fcCkgPQotICAgICAgMS4wIC0gKChmbG9hdCkgaW5mby0+dGltZVNpbmNlTGFzdEJpZ0dvb20gLyA0MC4wZik7Ci0gIGluZm8tPmxhc3RfYmlnZ29vbV9wLmNoYW5nZV9saXN0ZW5lciAoJmluZm8tPmxhc3RfYmlnZ29vbV9wKTsKLQotICAvKiBiaWdHb29tTGltaXQgPT1nb29tTGltaXQqOS84KzcgPyAqLwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vc291bmRfdGVzdGVyLmggYi9nc3QvZ29vbS9zb3VuZF90ZXN0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY1MWQ1Zi4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9zb3VuZF90ZXN0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX1NPVU5EX1RFU1RFUl9ICi0jZGVmaW5lIF9TT1VORF9URVNURVJfSAotCi0jaW5jbHVkZSAiZ29vbV9wbHVnaW5faW5mby5oIgotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0KLS8qKiBjaGFuZ2UgbGVzIGRvbm5lZXMgZHUgU291bmRJbmZvICovCi12b2lkIGV2YWx1YXRlX3NvdW5kKGdpbnQxNiBkYXRhWzJdWzUxMl0sIFNvdW5kSW5mbyAqc25kSW5mbyk7Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9nc3QvZ29vbS9zdXJmM2QuYyBiL2dzdC9nb29tL3N1cmYzZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDcyODRiLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL3N1cmYzZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlICJzdXJmM2QuaCIKLSNpbmNsdWRlICJnb29tX3BsdWdpbl9pbmZvLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotZ3JpZDNkICoKLWdyaWQzZF9uZXcgKGludCBzaXpleCwgaW50IGRlZngsIGludCBzaXpleiwgaW50IGRlZnosIHYzZCBjZW50ZXIpCi17Ci0gIGludCB4ID0gZGVmeDsKLSAgaW50IHkgPSBkZWZ6OwotICBncmlkM2QgKmcgPSBtYWxsb2MgKHNpemVvZiAoZ3JpZDNkKSk7Ci0gIHN1cmYzZCAqcyA9ICYoZy0+c3VyZik7Ci0KLSAgcy0+bmJ2ZXJ0ZXggPSB4ICogeTsKLSAgcy0+dmVydGV4ID0gbWFsbG9jICh4ICogeSAqIHNpemVvZiAodjNkKSk7Ci0gIHMtPnN2ZXJ0ZXggPSBtYWxsb2MgKHggKiB5ICogc2l6ZW9mICh2M2QpKTsKLSAgcy0+Y2VudGVyID0gY2VudGVyOwotCi0gIGctPmRlZnggPSBkZWZ4OwotICBnLT5zaXpleCA9IHNpemV4OwotICBnLT5kZWZ6ID0gZGVmejsKLSAgZy0+c2l6ZXogPSBzaXplejsKLSAgZy0+bW9kZSA9IDA7Ci0KLSAgd2hpbGUgKHkpIHsKLSAgICAtLXk7Ci0gICAgeCA9IGRlZng7Ci0gICAgd2hpbGUgKHgpIHsKLSAgICAgIC0teDsKLSAgICAgIHMtPnZlcnRleFt4ICsgZGVmeCAqIHldLnggPSAoZmxvYXQpICh4IC0gZGVmeCAvIDIpICogc2l6ZXggLyBkZWZ4OwotICAgICAgcy0+dmVydGV4W3ggKyBkZWZ4ICogeV0ueSA9IDA7Ci0gICAgICBzLT52ZXJ0ZXhbeCArIGRlZnggKiB5XS56ID0gKGZsb2F0KSAoeSAtIGRlZnogLyAyKSAqIHNpemV6IC8gZGVmejsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGc7Ci19Ci0KLXZvaWQKLWdyaWQzZF9mcmVlIChncmlkM2QgKiBnKQotewotICBzdXJmM2QgKnMgPSAmKGctPnN1cmYpOwotCi0gIGZyZWUgKHMtPnZlcnRleCk7Ci0gIGZyZWUgKHMtPnN2ZXJ0ZXgpOwotCi0gIGZyZWUgKGcpOwotfQotCi12b2lkCi1ncmlkM2RfZHJhdyAoUGx1Z2luSW5mbyAqIHBsdWcsIGdyaWQzZCAqIGcsIGludCBjb2xvciwgaW50IGNvbG9ybG93LAotICAgIGludCBkaXN0LCBQaXhlbCAqIGJ1ZiwgUGl4ZWwgKiBiYWNrLCBpbnQgVywgaW50IEgpCi17Ci0KLSAgaW50IHg7Ci0gIHYyZCB2MiwgdjJ4OwotCi0gIHYyZCAqdjJfYXJyYXkgPSBtYWxsb2MgKGctPnN1cmYubmJ2ZXJ0ZXggKiBzaXplb2YgKHYyZCkpOwotCi0gIHYzZF90b192MmQgKGctPnN1cmYuc3ZlcnRleCwgZy0+c3VyZi5uYnZlcnRleCwgVywgSCwgZGlzdCwgdjJfYXJyYXkpOwotCi0gIGZvciAoeCA9IDA7IHggPCBnLT5kZWZ4OyB4KyspIHsKLSAgICBpbnQgejsKLQotICAgIHYyeCA9IHYyX2FycmF5W3hdOwotCi0gICAgZm9yICh6ID0gMTsgeiA8IGctPmRlZno7IHorKykgewotICAgICAgdjIgPSB2Ml9hcnJheVt6ICogZy0+ZGVmeCArIHhdOwotICAgICAgaWYgKCgodjIueCAhPSAtNjY2KSB8fCAodjIueSAhPSAtNjY2KSkKLSAgICAgICAgICAmJiAoKHYyeC54ICE9IC02NjYpIHx8ICh2MngueSAhPSAtNjY2KSkpIHsKLSAgICAgICAgcGx1Zy0+bWV0aG9kcy5kcmF3X2xpbmUgKGJ1ZiwgdjJ4LngsIHYyeC55LCB2Mi54LCB2Mi55LCBjb2xvcmxvdywgVywgSCk7Ci0gICAgICAgIHBsdWctPm1ldGhvZHMuZHJhd19saW5lIChiYWNrLCB2MngueCwgdjJ4LnksIHYyLngsIHYyLnksIGNvbG9yLCBXLCBIKTsKLSAgICAgIH0KLSAgICAgIHYyeCA9IHYyOwotICAgIH0KLSAgfQotCi0gIGZyZWUgKHYyX2FycmF5KTsKLX0KLQotdm9pZAotc3VyZjNkX3JvdGF0ZSAoc3VyZjNkICogcywgZmxvYXQgYW5nbGUpCi17Ci0gIGludCBpOwotICBmbG9hdCBjb3NhOwotICBmbG9hdCBzaW5hOwotCi0gIFNJTkNPUyAoYW5nbGUsIHNpbmEsIGNvc2EpOwotICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJ2ZXJ0ZXg7IGkrKykgewotICAgIFlfUk9UQVRFX1YzRCAocy0+dmVydGV4W2ldLCBzLT5zdmVydGV4W2ldLCBjb3NhLCBzaW5hKTsKLSAgfQotfQotCi12b2lkCi1zdXJmM2RfdHJhbnNsYXRlIChzdXJmM2QgKiBzKQotewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgcy0+bmJ2ZXJ0ZXg7IGkrKykgewotICAgIFRSQU5TTEFURV9WM0QgKHMtPmNlbnRlciwgcy0+c3ZlcnRleFtpXSk7Ci0gIH0KLX0KLQotdm9pZAotZ3JpZDNkX3VwZGF0ZSAoZ3JpZDNkICogZywgZmxvYXQgYW5nbGUsIGZsb2F0ICp2YWxzLCBmbG9hdCBkaXN0KQotewotICBpbnQgaTsKLSAgZmxvYXQgY29zYTsKLSAgZmxvYXQgc2luYTsKLSAgc3VyZjNkICpzID0gJihnLT5zdXJmKTsKLSAgdjNkIGNhbSA9IHMtPmNlbnRlcjsKLQotICBjYW0ueiArPSBkaXN0OwotCi0gIFNJTkNPUyAoKGFuZ2xlIC8gNC4zZiksIHNpbmEsIGNvc2EpOwotICBjYW0ueSArPSBzaW5hICogMi4wZjsKLSAgU0lOQ09TIChhbmdsZSwgc2luYSwgY29zYSk7Ci0KLSAgaWYgKGctPm1vZGUgPT0gMCkgewotICAgIGlmICh2YWxzKQotICAgICAgZm9yIChpID0gMDsgaSA8IGctPmRlZng7IGkrKykKLSAgICAgICAgcy0+dmVydGV4W2ldLnkgPSBzLT52ZXJ0ZXhbaV0ueSAqIDAuMiArIHZhbHNbaV0gKiAwLjg7Ci0KLSAgICBmb3IgKGkgPSBnLT5kZWZ4OyBpIDwgcy0+bmJ2ZXJ0ZXg7IGkrKykgewotICAgICAgcy0+dmVydGV4W2ldLnkgKj0gMC4yNTVmOwotICAgICAgcy0+dmVydGV4W2ldLnkgKz0gKHMtPnZlcnRleFtpIC0gZy0+ZGVmeF0ueSAqIDAuNzc3Zik7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IHMtPm5idmVydGV4OyBpKyspIHsKLSAgICBZX1JPVEFURV9WM0QgKHMtPnZlcnRleFtpXSwgcy0+c3ZlcnRleFtpXSwgY29zYSwgc2luYSk7Ci0gICAgVFJBTlNMQVRFX1YzRCAoY2FtLCBzLT5zdmVydGV4W2ldKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vc3VyZjNkLmggYi9nc3QvZ29vbS9zdXJmM2QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhhMjE4MC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS9zdXJmM2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX1NVUkYzRF9ICi0jZGVmaW5lIF9TVVJGM0RfSAotCi0jaW5jbHVkZSAidjNkLmgiCi0jaW5jbHVkZSAiZ29vbV9ncmFwaGljLmgiCi0jaW5jbHVkZSAiZ29vbV90eXBlZGVmcy5oIgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdjNkICp2ZXJ0ZXg7Ci0JdjNkICpzdmVydGV4OwotCWludCBuYnZlcnRleDsKLQotCXYzZCBjZW50ZXI7Ci19IHN1cmYzZDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXN1cmYzZCBzdXJmOwotCQotCWludCBkZWZ4OwotCWludCBzaXpleDsKLQlpbnQgZGVmejsKLQlpbnQgc2l6ZXo7Ci0JaW50IG1vZGU7Ci19IGdyaWQzZDsKLQotLyogaGktbGV2ZWwgKi8KLQotLyogd29ya3Mgb24gZ3JpZDNkICovCi1ncmlkM2QgKmdyaWQzZF9uZXcgKGludCBzaXpleCwgaW50IGRlZngsIGludCBzaXpleiwgaW50IGRlZnosIHYzZCBjZW50ZXIpOwotdm9pZCBncmlkM2RfZnJlZSAoZ3JpZDNkICpnKTsKLXZvaWQgZ3JpZDNkX3VwZGF0ZSAoZ3JpZDNkICpzLCBmbG9hdCBhbmdsZSwgZmxvYXQgKnZhbHMsIGZsb2F0IGRpc3QpOwotCi0vKiBsb3cgbGV2ZWwgKi8KLXZvaWQgc3VyZjNkX2RyYXcgKHN1cmYzZCAqcywgaW50IGNvbG9yLCBpbnQgZGlzdCwgaW50ICpidWYsIGludCAqYmFjaywgaW50IFcsaW50IEgpOwotdm9pZCBncmlkM2RfZHJhdyAoUGx1Z2luSW5mbyAqcGx1ZywgZ3JpZDNkICpnLCBpbnQgY29sb3IsIGludCBjb2xvcmxvdywgaW50IGRpc3QsIFBpeGVsICpidWYsIFBpeGVsICpiYWNrLCBpbnQgVyxpbnQgSCk7Ci12b2lkIHN1cmYzZF9yb3RhdGUgKHN1cmYzZCAqcywgZmxvYXQgYW5nbGUpOwotdm9pZCBzdXJmM2RfdHJhbnNsYXRlIChzdXJmM2QgKnMpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9nb29tL3RlbnRhY2xlM2QuYyBiL2dzdC9nb29tL3RlbnRhY2xlM2QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgyZmZiYS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS90ZW50YWNsZTNkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSAidjNkLmgiCi0jaW5jbHVkZSAic3VyZjNkLmgiCi0jaW5jbHVkZSAiZ29vbV90b29scy5oIgotI2luY2x1ZGUgImdvb21fY29uZmlnLmgiCi0jaW5jbHVkZSAiZ29vbV9wbHVnaW5faW5mby5oIgotI2luY2x1ZGUgInRlbnRhY2xlM2QuaCIKLQotI2RlZmluZSBEIDI1Ni4wZgotCi0jZGVmaW5lIG5iZ3JpZCA2Ci0jZGVmaW5lIGRlZmluaXRpb254IDE1Ci0jZGVmaW5lIGRlZmluaXRpb256IDQ1Ci0KLXR5cGVkZWYgc3RydWN0IF9URU5UQUNMRV9GWF9EQVRBCi17Ci0gIFBsdWdpblBhcmFtIGVuYWJsZWRfYnA7Ci0gIFBsdWdpblBhcmFtZXRlcnMgcGFyYW1zOwotCi0gIGZsb2F0IGN5Y2xlOwotICBncmlkM2QgKmdyaWxsZVtuYmdyaWRdOwotICBmbG9hdCAqdmFsczsKLQotI2RlZmluZSBOQl9URU5UQUNMRV9DT0xPUlMgNAotICBpbnQgY29sb3JzW05CX1RFTlRBQ0xFX0NPTE9SU107Ci0KLSAgaW50IGNvbDsKLSAgaW50IGRzdGNvbDsKLSAgZmxvYXQgbGlnOwotICBmbG9hdCBsaWdzOwotCi0gIC8qIHN0YXRpY3MgZnJvbSBwcmV0dHlfbW92ZSAqLwotICBmbG9hdCBkaXN0dDsKLSAgZmxvYXQgZGlzdHQyOwotICBmbG9hdCByb3Q7ICAgICAgICAgICAgICAgICAgICAvKiBlbnRyZSAwIGV0IDIgKiBHX1BJICovCi0gIGludCBoYXBwZW5zOwotICBpbnQgcm90YXRpb247Ci0gIGludCBsb2NrOwotfSBUZW50YWNsZUZYRGF0YTsKLQotc3RhdGljIHZvaWQgdGVudGFjbGVfbmV3IChUZW50YWNsZUZYRGF0YSAqIGRhdGEpOwotc3RhdGljIHZvaWQgdGVudGFjbGVfdXBkYXRlIChQbHVnaW5JbmZvICogZ29vbUluZm8sIFBpeGVsICogYnVmLCBQaXhlbCAqIGJhY2ssCi0gICAgaW50IFcsIGludCBILCBzaG9ydFsyXVs1MTJdLCBmbG9hdCwgaW50IGRyYXdpdCwgVGVudGFjbGVGWERhdGEgKiBkYXRhKTsKLXN0YXRpYyB2b2lkIHRlbnRhY2xlX2ZyZWUgKFRlbnRhY2xlRlhEYXRhICogZGF0YSk7Ci0KLS8qIAotICogVmlzdWFsRlggd3JhcHBlciBmb3IgdGhlIHRlbnRhY2xlcwotICovCi0KLXN0YXRpYyB2b2lkCi10ZW50YWNsZV9meF9pbml0IChWaXN1YWxGWCAqIF90aGlzLCBQbHVnaW5JbmZvICogaW5mbykKLXsKLQotICBUZW50YWNsZUZYRGF0YSAqZGF0YSA9IChUZW50YWNsZUZYRGF0YSAqKSBtYWxsb2MgKHNpemVvZiAoVGVudGFjbGVGWERhdGEpKTsKLQotICBzZWN1cmVfYl9wYXJhbSAoJmRhdGEtPmVuYWJsZWRfYnAsICJFbmFibGVkIiwgMSk7Ci0gIHBsdWdpbl9wYXJhbWV0ZXJzICgmZGF0YS0+cGFyYW1zLCAiM0QgVGVudGFjbGVzIiwgMSk7Ci0gIGRhdGEtPnBhcmFtcy5wYXJhbXNbMF0gPSAmZGF0YS0+ZW5hYmxlZF9icDsKLQotICBkYXRhLT5jeWNsZSA9IDAuMGY7Ci0gIGRhdGEtPmNvbCA9Ci0gICAgICAoMHgyOCA8PCAoUk9VR0UgKiA4KSkgfCAoMHgyYyA8PCAoVkVSVCAqIDgpKSB8ICgweDVmIDw8IChCTEVVICogOCkpOwotICBkYXRhLT5kc3Rjb2wgPSAwOwotICBkYXRhLT5saWcgPSAxLjE1ZjsKLSAgZGF0YS0+bGlncyA9IDAuMWY7Ci0KLSAgZGF0YS0+ZGlzdHQgPSAxMC4wZjsKLSAgZGF0YS0+ZGlzdHQyID0gMC4wZjsKLSAgZGF0YS0+cm90ID0gMC4wZjsgICAgICAgICAgICAgLyogZW50cmUgMCBldCAyICogR19QSSAqLwotICBkYXRhLT5oYXBwZW5zID0gMDsKLQotICBkYXRhLT5yb3RhdGlvbiA9IDA7Ci0gIGRhdGEtPmxvY2sgPSAwOwotICBkYXRhLT5jb2xvcnNbMF0gPQotICAgICAgKDB4MTggPDwgKFJPVUdFICogOCkpIHwgKDB4NGMgPDwgKFZFUlQgKiA4KSkgfCAoMHgyZiA8PCAoQkxFVSAqIDgpKTsKLSAgZGF0YS0+Y29sb3JzWzFdID0KLSAgICAgICgweDQ4IDw8IChST1VHRSAqIDgpKSB8ICgweDJjIDw8IChWRVJUICogOCkpIHwgKDB4NmYgPDwgKEJMRVUgKiA4KSk7Ci0gIGRhdGEtPmNvbG9yc1syXSA9Ci0gICAgICAoMHg1OCA8PCAoUk9VR0UgKiA4KSkgfCAoMHgzYyA8PCAoVkVSVCAqIDgpKSB8ICgweDBmIDw8IChCTEVVICogOCkpOwotICBkYXRhLT5jb2xvcnNbM10gPQotICAgICAgKDB4ODcgPDwgKFJPVUdFICogOCkpIHwgKDB4NTUgPDwgKFZFUlQgKiA4KSkgfCAoMHg3NCA8PCAoQkxFVSAqIDgpKTsKLSAgdGVudGFjbGVfbmV3IChkYXRhKTsKLQotICBfdGhpcy0+cGFyYW1zID0gJmRhdGEtPnBhcmFtczsKLSAgX3RoaXMtPmZ4X2RhdGEgPSAodm9pZCAqKSBkYXRhOwotfQotCi1zdGF0aWMgdm9pZAotdGVudGFjbGVfZnhfYXBwbHkgKFZpc3VhbEZYICogX3RoaXMsIFBpeGVsICogc3JjLCBQaXhlbCAqIGRlc3QsCi0gICAgUGx1Z2luSW5mbyAqIGdvb21JbmZvKQotewotICBUZW50YWNsZUZYRGF0YSAqZGF0YSA9IChUZW50YWNsZUZYRGF0YSAqKSBfdGhpcy0+ZnhfZGF0YTsKLQotICBpZiAoQlZBTCAoZGF0YS0+ZW5hYmxlZF9icCkpIHsKLSAgICB0ZW50YWNsZV91cGRhdGUgKGdvb21JbmZvLCBkZXN0LCBzcmMsIGdvb21JbmZvLT5zY3JlZW4ud2lkdGgsCi0gICAgICAgIGdvb21JbmZvLT5zY3JlZW4uaGVpZ2h0LCBnb29tSW5mby0+c291bmQuc2FtcGxlcywKLSAgICAgICAgKGZsb2F0KSBnb29tSW5mby0+c291bmQuYWNjZWx2YXIsCi0gICAgICAgIGdvb21JbmZvLT5jdXJHU3RhdGUtPmRyYXdUZW50YWNsZSwgZGF0YSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXRlbnRhY2xlX2Z4X2ZyZWUgKFZpc3VhbEZYICogX3RoaXMpCi17Ci0gIHRlbnRhY2xlX2ZyZWUgKChUZW50YWNsZUZYRGF0YSAqKSBfdGhpcy0+ZnhfZGF0YSk7Ci0gIGZyZWUgKF90aGlzLT5meF9kYXRhKTsKLX0KLQotdm9pZAotdGVudGFjbGVfZnhfY3JlYXRlIChWaXN1YWxGWCAqIGZ4KQotewotICBmeC0+aW5pdCA9IHRlbnRhY2xlX2Z4X2luaXQ7Ci0gIGZ4LT5hcHBseSA9IHRlbnRhY2xlX2Z4X2FwcGx5OwotICBmeC0+ZnJlZSA9IHRlbnRhY2xlX2Z4X2ZyZWU7Ci0gIGZ4LT5meF9kYXRhID0gTlVMTDsKLSAgZngtPnBhcmFtcyA9IE5VTEw7Ci19Ci0KLS8qIC0tLS0tICovCi0KLXN0YXRpYyB2b2lkCi10ZW50YWNsZV9mcmVlIChUZW50YWNsZUZYRGF0YSAqIGRhdGEpCi17Ci0gIGludCB0bXA7Ci0KLSAgLyogRlJFRSBHUklEICovCi0gIGZvciAodG1wID0gMDsgdG1wIDwgbmJncmlkOyB0bXArKykKLSAgICBncmlkM2RfZnJlZSAoZGF0YS0+Z3JpbGxlW3RtcF0pOwotICBmcmVlIChkYXRhLT52YWxzKTsKLQotICBnb29tX3BsdWdpbl9wYXJhbWV0ZXJzX2ZyZWUgKCZkYXRhLT5wYXJhbXMpOwotfQotCi1zdGF0aWMgdm9pZAotdGVudGFjbGVfbmV3IChUZW50YWNsZUZYRGF0YSAqIGRhdGEpCi17Ci0gIGludCB0bXA7Ci0KLSAgdjNkIGNlbnRlciA9IHsgMCwgLTE3LjAsIDAgfTsKLSAgZGF0YS0+dmFscyA9IChmbG9hdCAqKSBtYWxsb2MgKChkZWZpbml0aW9ueCArIDIwKSAqIHNpemVvZiAoZmxvYXQpKTsKLQotICBmb3IgKHRtcCA9IDA7IHRtcCA8IG5iZ3JpZDsgdG1wKyspIHsKLSAgICBpbnQgeCwgejsKLQotICAgIHogPSA0NSArIHJhbmQgKCkgJSAzMDsKLSAgICB4ID0gODUgKyByYW5kICgpICUgNTsKLSAgICBjZW50ZXIueiA9IHo7Ci0gICAgZGF0YS0+Z3JpbGxlW3RtcF0gPQotICAgICAgICBncmlkM2RfbmV3ICh4LCBkZWZpbml0aW9ueCwgeiwgZGVmaW5pdGlvbnogKyByYW5kICgpICUgMTAsIGNlbnRlcik7Ci0gICAgY2VudGVyLnkgKz0gODsKLSAgfQotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKLWxpZ2h0ZW4gKHVuc2lnbmVkIGNoYXIgdmFsdWUsIGZsb2F0IHBvd2VyKQotewotICBpbnQgdmFsID0gdmFsdWU7Ci0gIGZsb2F0IHQgPSAoZmxvYXQpIHZhbCAqIGxvZzEwIChwb3dlcikgLyAyLjA7Ci0KLSAgaWYgKHQgPiAwKSB7Ci0gICAgdmFsID0gKGludCkgdDsgICAgICAgICAgICAgIC8qICgzMi4wZiAqIGxvZyAodCkpOyAqLwotICAgIGlmICh2YWwgPiAyNTUpCi0gICAgICB2YWwgPSAyNTU7Ci0gICAgaWYgKHZhbCA8IDApCi0gICAgICB2YWwgPSAwOwotICAgIHJldHVybiB2YWw7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWxpZ2h0ZW5jb2xvciAoaW50ICpjb2wsIGZsb2F0IHBvd2VyKQotewotICB1bnNpZ25lZCBjaGFyICpjb2xvcjsKLQotICBjb2xvciA9ICh1bnNpZ25lZCBjaGFyICopIGNvbDsKLSAgKmNvbG9yID0gbGlnaHRlbiAoKmNvbG9yLCBwb3dlcik7Ci0gIGNvbG9yKys7Ci0gICpjb2xvciA9IGxpZ2h0ZW4gKCpjb2xvciwgcG93ZXIpOwotICBjb2xvcisrOwotICAqY29sb3IgPSBsaWdodGVuICgqY29sb3IsIHBvd2VyKTsKLSAgY29sb3IrKzsKLSAgKmNvbG9yID0gbGlnaHRlbiAoKmNvbG9yLCBwb3dlcik7Ci19Ci0KLS8qIHJldG91cm5lIHg+PnMgLCBlbiB0ZXN0YW50IGxlIHNpZ25lIGRlIHggKi8KLSNkZWZpbmUgU2hpZnRSaWdodChfeCxfcykgKChfeDwwKSA/IC0oLV94Pj5fcykgOiAoX3g+Pl9zKSkKLQotc3RhdGljIGludAotZXZvbHV0ZWNvbG9yICh1bnNpZ25lZCBpbnQgc3JjLCB1bnNpZ25lZCBpbnQgZGVzdCwKLSAgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGluY3IpCi17Ci0KLSAgaW50IGNvbG9yID0gc3JjICYgKH5tYXNrKTsKLQotICBzcmMgJj0gbWFzazsKLSAgZGVzdCAmPSBtYXNrOwotCi0gIGlmICgoc3JjICE9IG1hc2spCi0gICAgICAmJiAoc3JjIDwgZGVzdCkpCi0gICAgc3JjICs9IGluY3I7Ci0KLSAgaWYgKHNyYyA+IGRlc3QpCi0gICAgc3JjIC09IGluY3I7Ci0gIHJldHVybiAoc3JjICYgbWFzaykgfCBjb2xvcjsKLX0KLQotc3RhdGljIHZvaWQKLXByZXR0eV9tb3ZlIChQbHVnaW5JbmZvICogZ29vbUluZm8sIGZsb2F0IGN5Y2xlLCBmbG9hdCAqZGlzdCwgZmxvYXQgKmRpc3QyLAotICAgIGZsb2F0ICpyb3RhbmdsZSwgVGVudGFjbGVGWERhdGEgKiBmeF9kYXRhKQotewotCi0gIGZsb2F0IHRtcDsKLQotICAvKiBtYW55IG1hZ2ljIG51bWJlcnMgaGVyZS4uLiBJIGRvbid0IHJlYWxseSBsaWtlIHRoYXQuICovCi0gIGlmIChmeF9kYXRhLT5oYXBwZW5zKQotICAgIGZ4X2RhdGEtPmhhcHBlbnMgLT0gMTsKLSAgZWxzZSBpZiAoZnhfZGF0YS0+bG9jayA9PSAwKSB7Ci0gICAgZnhfZGF0YS0+aGFwcGVucyA9Ci0gICAgICAgIGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLAotICAgICAgICAyMDApID8gMCA6IDEwMCArIGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCA2MCk7Ci0gICAgZnhfZGF0YS0+bG9jayA9IGZ4X2RhdGEtPmhhcHBlbnMgKiAzIC8gMjsKLSAgfSBlbHNlCi0gICAgZnhfZGF0YS0+bG9jay0tOwotCi0gIHRtcCA9IGZ4X2RhdGEtPmhhcHBlbnMgPyA4LjBmIDogMDsKLSAgKmRpc3QyID0gZnhfZGF0YS0+ZGlzdHQyID0gKHRtcCArIDE1LjBmICogZnhfZGF0YS0+ZGlzdHQyKSAvIDE2LjBmOwotCi0gIHRtcCA9IDMwICsgRCAtIDkwLjBmICogKDEuMGYgKyBzaW4gKGN5Y2xlICogMTkgLyAyMCkpOwotICBpZiAoZnhfZGF0YS0+aGFwcGVucykKLSAgICB0bXAgKj0gMC42ZjsKLQotICAqZGlzdCA9IGZ4X2RhdGEtPmRpc3R0ID0gKHRtcCArIDMuMGYgKiBmeF9kYXRhLT5kaXN0dCkgLyA0LjBmOwotCi0gIGlmICghZnhfZGF0YS0+aGFwcGVucykgewotICAgIHRtcCA9IEdfUEkgKiBzaW4gKGN5Y2xlKSAvIDMyICsgMyAqIEdfUEkgLyAyOwotICB9IGVsc2UgewotICAgIGZ4X2RhdGEtPnJvdGF0aW9uID0KLSAgICAgICAgZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sCi0gICAgICAgIDUwMCkgPyBmeF9kYXRhLT5yb3RhdGlvbiA6IGdvb21faXJhbmQgKGdvb21JbmZvLT5nUmFuZG9tLCAyKTsKLSAgICBpZiAoZnhfZGF0YS0+cm90YXRpb24pCi0gICAgICBjeWNsZSAqPSAyLjBmICogR19QSTsKLSAgICBlbHNlCi0gICAgICBjeWNsZSAqPSAtMS4wZiAqIEdfUEk7Ci0gICAgdG1wID0gY3ljbGUgLSAoR19QSSAqIDIuMCkgKiBmbG9vciAoY3ljbGUgLyAoR19QSSAqIDIuMCkpOwotICB9Ci0KLSAgaWYgKGZhYnMgKHRtcCAtIGZ4X2RhdGEtPnJvdCkgPiBmYWJzICh0bXAgLSAoZnhfZGF0YS0+cm90ICsgMi4wICogR19QSSkpKSB7Ci0gICAgZnhfZGF0YS0+cm90ID0gKHRtcCArIDE1LjBmICogKGZ4X2RhdGEtPnJvdCArIDIgKiBHX1BJKSkgLyAxNi4wZjsKLSAgICBpZiAoZnhfZGF0YS0+cm90ID4gMi4wICogR19QSSkKLSAgICAgIGZ4X2RhdGEtPnJvdCAtPSAyLjAgKiBHX1BJOwotICAgICpyb3RhbmdsZSA9IGZ4X2RhdGEtPnJvdDsKLSAgfSBlbHNlIGlmIChmYWJzICh0bXAgLSBmeF9kYXRhLT5yb3QpID4KLSAgICAgIGZhYnMgKHRtcCAtIChmeF9kYXRhLT5yb3QgLSAyLjAgKiBHX1BJKSkpIHsKLSAgICBmeF9kYXRhLT5yb3QgPSAodG1wICsgMTUuMGYgKiAoZnhfZGF0YS0+cm90IC0gMi4wICogR19QSSkpIC8gMTYuMGY7Ci0gICAgaWYgKGZ4X2RhdGEtPnJvdCA8IDAuMGYpCi0gICAgICBmeF9kYXRhLT5yb3QgKz0gMi4wICogR19QSTsKLSAgICAqcm90YW5nbGUgPSBmeF9kYXRhLT5yb3Q7Ci0gIH0gZWxzZQotICAgICpyb3RhbmdsZSA9IGZ4X2RhdGEtPnJvdCA9ICh0bXAgKyAxNS4wZiAqIGZ4X2RhdGEtPnJvdCkgLyAxNi4wZjsKLX0KLQotc3RhdGljIHZvaWQKLXRlbnRhY2xlX3VwZGF0ZSAoUGx1Z2luSW5mbyAqIGdvb21JbmZvLCBQaXhlbCAqIGJ1ZiwgUGl4ZWwgKiBiYWNrLCBpbnQgVywgaW50IEgsCi0gICAgc2hvcnQgZGF0YVsyXVs1MTJdLCBmbG9hdCByYXBwb3J0LCBpbnQgZHJhd2l0LCBUZW50YWNsZUZYRGF0YSAqIGZ4X2RhdGEpCi17Ci0KLSAgaW50IHRtcDsKLSAgaW50IHRtcDI7Ci0KLSAgaW50IGNvbG9yOwotICBpbnQgY29sb3Jsb3c7Ci0KLSAgZmxvYXQgZGlzdCwgZGlzdDIsIHJvdGFuZ2xlOwotCi0gIGlmICgoIWRyYXdpdCkgJiYgKGZ4X2RhdGEtPmxpZ3MgPiAwLjBmKSkKLSAgICBmeF9kYXRhLT5saWdzID0gLWZ4X2RhdGEtPmxpZ3M7Ci0KLSAgZnhfZGF0YS0+bGlnICs9IGZ4X2RhdGEtPmxpZ3M7Ci0KLSAgaWYgKGZ4X2RhdGEtPmxpZyA+IDEuMDFmKSB7Ci0gICAgaWYgKChmeF9kYXRhLT5saWcgPiAxMC4wZikgfCAoZnhfZGF0YS0+bGlnIDwgMS4xZikpCi0gICAgICBmeF9kYXRhLT5saWdzID0gLWZ4X2RhdGEtPmxpZ3M7Ci0KLSAgICBpZiAoKGZ4X2RhdGEtPmxpZyA8IDYuM2YpICYmIChnb29tX2lyYW5kIChnb29tSW5mby0+Z1JhbmRvbSwgMzApID09IDApKQotICAgICAgZnhfZGF0YS0+ZHN0Y29sID0gZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIE5CX1RFTlRBQ0xFX0NPTE9SUyk7Ci0KLSAgICBmeF9kYXRhLT5jb2wgPQotICAgICAgICBldm9sdXRlY29sb3IgKGZ4X2RhdGEtPmNvbCwgZnhfZGF0YS0+Y29sb3JzW2Z4X2RhdGEtPmRzdGNvbF0sIDB4ZmYsCi0gICAgICAgIDB4MDEpOwotICAgIGZ4X2RhdGEtPmNvbCA9Ci0gICAgICAgIGV2b2x1dGVjb2xvciAoZnhfZGF0YS0+Y29sLCBmeF9kYXRhLT5jb2xvcnNbZnhfZGF0YS0+ZHN0Y29sXSwgMHhmZjAwLAotICAgICAgICAweDAxMDApOwotICAgIGZ4X2RhdGEtPmNvbCA9Ci0gICAgICAgIGV2b2x1dGVjb2xvciAoZnhfZGF0YS0+Y29sLCBmeF9kYXRhLT5jb2xvcnNbZnhfZGF0YS0+ZHN0Y29sXSwgMHhmZjAwMDAsCi0gICAgICAgIDB4MDEwMDAwKTsKLSAgICBmeF9kYXRhLT5jb2wgPQotICAgICAgICBldm9sdXRlY29sb3IgKGZ4X2RhdGEtPmNvbCwgZnhfZGF0YS0+Y29sb3JzW2Z4X2RhdGEtPmRzdGNvbF0sCi0gICAgICAgIDB4ZmYwMDAwMDAsIDB4MDEwMDAwMDApOwotCi0gICAgY29sb3IgPSBmeF9kYXRhLT5jb2w7Ci0gICAgY29sb3Jsb3cgPSBmeF9kYXRhLT5jb2w7Ci0KLSAgICBsaWdodGVuY29sb3IgKCZjb2xvciwgZnhfZGF0YS0+bGlnICogMi4wZiArIDIuMGYpOwotICAgIGxpZ2h0ZW5jb2xvciAoJmNvbG9ybG93LCAoZnhfZGF0YS0+bGlnIC8gMy4wZikgKyAwLjY3Zik7Ci0KLSAgICByYXBwb3J0ID0gMS4wZiArIDIuMGYgKiAocmFwcG9ydCAtIDEuMGYpOwotICAgIHJhcHBvcnQgKj0gMS4yZjsKLSAgICBpZiAocmFwcG9ydCA+IDEuMTJmKQotICAgICAgcmFwcG9ydCA9IDEuMTJmOwotCi0gICAgcHJldHR5X21vdmUgKGdvb21JbmZvLCBmeF9kYXRhLT5jeWNsZSwgJmRpc3QsICZkaXN0MiwgJnJvdGFuZ2xlLCBmeF9kYXRhKTsKLQotICAgIGZvciAodG1wID0gMDsgdG1wIDwgbmJncmlkOyB0bXArKykgewotICAgICAgZm9yICh0bXAyID0gMDsgdG1wMiA8IGRlZmluaXRpb254OyB0bXAyKyspIHsKLSAgICAgICAgZmxvYXQgdmFsID0KLSAgICAgICAgICAgIChmbG9hdCkgKFNoaWZ0UmlnaHQgKGRhdGFbMF1bZ29vbV9pcmFuZCAoZ29vbUluZm8tPmdSYW5kb20sIDUxMSldLAotICAgICAgICAgICAgICAgIDEwKSkgKiByYXBwb3J0OwotCi0gICAgICAgIGZ4X2RhdGEtPnZhbHNbdG1wMl0gPSB2YWw7Ci0gICAgICB9Ci0KLSAgICAgIGdyaWQzZF91cGRhdGUgKGZ4X2RhdGEtPmdyaWxsZVt0bXBdLCByb3RhbmdsZSwgZnhfZGF0YS0+dmFscywgZGlzdDIpOwotICAgIH0KLSAgICBmeF9kYXRhLT5jeWNsZSArPSAwLjAxZjsKLSAgICBmb3IgKHRtcCA9IDA7IHRtcCA8IG5iZ3JpZDsgdG1wKyspCi0gICAgICBncmlkM2RfZHJhdyAoZ29vbUluZm8sIGZ4X2RhdGEtPmdyaWxsZVt0bXBdLCBjb2xvciwgY29sb3Jsb3csIGRpc3QsIGJ1ZiwKLSAgICAgICAgICBiYWNrLCBXLCBIKTsKLSAgfSBlbHNlIHsKLSAgICBmeF9kYXRhLT5saWcgPSAxLjA1ZjsKLSAgICBpZiAoZnhfZGF0YS0+bGlncyA8IDAuMGYpCi0gICAgICBmeF9kYXRhLT5saWdzID0gLWZ4X2RhdGEtPmxpZ3M7Ci0gICAgcHJldHR5X21vdmUgKGdvb21JbmZvLCBmeF9kYXRhLT5jeWNsZSwgJmRpc3QsICZkaXN0MiwgJnJvdGFuZ2xlLCBmeF9kYXRhKTsKLSAgICBmeF9kYXRhLT5jeWNsZSArPSAwLjFmOwotICAgIGlmIChmeF9kYXRhLT5jeWNsZSA+IDEwMDApCi0gICAgICBmeF9kYXRhLT5jeWNsZSA9IDA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9nb29tL3RlbnRhY2xlM2QuaCBiL2dzdC9nb29tL3RlbnRhY2xlM2QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYzYmE5Mi4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS90ZW50YWNsZTNkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKiBHb29tIFByb2plY3QKLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IGlPUy1Tb2Z0d2FyZQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9URU5UQUNMRTNEX0gKLSNkZWZpbmUgX1RFTlRBQ0xFM0RfSAotCi0jaW5jbHVkZSAiZ29vbV92aXN1YWxfZnguaCIKLQotdm9pZCB0ZW50YWNsZV9meF9jcmVhdGUoVmlzdWFsRlggKmZ4KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS92M2QuYyBiL2dzdC9nb29tL3YzZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGY0ZjEzLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL3YzZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogR29vbSBQcm9qZWN0Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBpT1MtU29mdHdhcmUKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgInYzZC5oIgotCi12b2lkCi12M2RfdG9fdjJkICh2M2QgKiB2MywgaW50IG5idmVydGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGZsb2F0IGRpc3RhbmNlLAotICAgIHYyZCAqIHYyKQotewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbmJ2ZXJ0ZXg7ICsraSkgewotICAgIGlmICh2M1tpXS56ID4gMikgewotICAgICAgaW50IFhwLCBZcDsKLQotICAgICAgRjJJICgoZGlzdGFuY2UgKiB2M1tpXS54IC8gdjNbaV0ueiksIFhwKTsKLSAgICAgIEYySSAoKGRpc3RhbmNlICogdjNbaV0ueSAvIHYzW2ldLnopLCBZcCk7Ci0gICAgICB2MltpXS54ID0gWHAgKyAod2lkdGggPj4gMSk7Ci0gICAgICB2MltpXS55ID0gLVlwICsgKGhlaWdodCA+PiAxKTsKLSAgICB9IGVsc2UKLSAgICAgIHYyW2ldLnggPSB2MltpXS55ID0gLTY2NjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20vdjNkLmggYi9nc3QvZ29vbS92M2QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1ZjkzOS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbS92M2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIEdvb20gUHJvamVjdAotICogQ29weXJpZ2h0IChDKSA8MjAwMz4gaU9TLVNvZnR3YXJlCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX1YzRF9ICi0jZGVmaW5lIF9WM0RfSAotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlICJtYXRodG9vbHMuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGZsb2F0IHgseSx6OwotfSB2M2Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgeCx5OwotfSB2MmQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBkb3VibGUgeCx5OwotfSB2Mmc7Ci0KLS8qIAotICogcHJvamV0ZSBsZSB2ZXJ0ZXggM0Qgc3VyIGxlIHBsYW4gZCdhZmZpY2hhZ2UKLSAqIHJldG91cm5lICgwLDApIHNpIGxlIHBvaW50IG5lIGRvaXQgcGFzIGV0cmUgYWZmaWNoZS4KLSAqCi0gKiBib25uZSB2YWxldXIgcG91ciBkaXN0YW5jZSA6IDI1NgotICovCi0jZGVmaW5lIFYzRF9UT19WMkQodjMsdjIsd2lkdGgsaGVpZ2h0LGRpc3RhbmNlKSBcCi17IFwKLSAgaW50IFhwLCBZcDsgXAotICBpZiAodjMueiA+IDIpIHsgXAotCSBGMkkoKGRpc3RhbmNlICogdjMueCAvIHYzLnopLFhwKSA7IFwKLSAJIEYySSgoZGlzdGFuY2UgKiB2My55IC8gdjMueiksWXApIDsgXAotIAkgdjIueCA9IFhwICsgKHdpZHRoPj4xKTsgXAotCSB2Mi55ID0gLVlwICsgKGhlaWdodD4+MSk7IFwKLSAgfSBcCi0gIGVsc2UgdjIueD12Mi55PS02NjY7IFwKLX0KLQotdm9pZCB2M2RfdG9fdjJkKHYzZCAqc3JjLCBpbnQgbmJ2ZXJ0ZXgsIGludCB3aWR0aCwgaW50IGhlaWdodCwgZmxvYXQgZGlzdGFuY2UsIHYyZCAqdjJfYXJyYXkpOwotCi0vKgotICogcm90YXRpb24gc2Vsb24gWSBkdSB2M2QgdmkgZCdhbmdsZSBhIChjb3NhPWNvcyhhKSwgc2luYT1zaW4oYSkpCi0gKiBjZW50ZXJ6ID0gY2VudHJlIGRlIHJvdGF0aW9uIGVuIHoKLSAqLwotI2RlZmluZSBZX1JPVEFURV9WM0QodmksdmYsc2luYSxjb3NhKVwKLXtcCi0gdmYueCA9IHZpLnggKiBjb3NhIC0gdmkueiAqIHNpbmE7XAotIHZmLnogPSB2aS54ICogc2luYSArIHZpLnogKiBjb3NhO1wKLSB2Zi55ID0gdmkueTtcCi19Ci0KLS8qCi0gKiB0cmFuc2xhdGlvbgotICovCi0jZGVmaW5lIFRSQU5TTEFURV9WM0QodnNyYyx2ZGVzdClcCi17XAotIHZkZXN0LnggKz0gdnNyYy54O1wKLSB2ZGVzdC55ICs9IHZzcmMueTtcCi0gdmRlc3QueiArPSB2c3JjLno7XAotfQotCi0jZGVmaW5lIE1VTF9WM0QobGYsdikge3YueCo9bGY7di55Kj1sZjt2LnoqPWxmO30KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvZ29vbS94bW14LmMgYi9nc3QvZ29vbS94bW14LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhODdjZjkuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20veG1teC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAyICswLDAgQEAKLS8qCXhtbXguYwotCi0JZVh0ZW5kZWQgTXVsdGlNZWRpYSBlWHRlbnNpb25zIEdDQyBpbnRlcmZhY2UgbGlicmFyeSBmb3IgSUEzMi4KLQotCVRvIHVzZSB0aGlzIGxpYnJhcnksIHNpbXBseSBpbmNsdWRlIHRoaXMgaGVhZGVyIGZpbGUKLQlhbmQgY29tcGlsZSB3aXRoIEdDQy4gIFlvdSBNVVNUIGhhdmUgaW5saW5pbmcgZW5hYmxlZAotCWluIG9yZGVyIGZvciB4bW14X29rKCkgdG8gd29yazsgdGhpcyBjYW4gYmUgZG9uZSBieQotCXNpbXBseSB1c2luZyAtTyBvbiB0aGUgR0NDIGNvbW1hbmQgbGluZS4KLQotCUNvbXBpbGluZyB3aXRoIC1EWE1NWF9UUkFDRSB3aWxsIGNhdXNlIGRldGFpbGVkIHRyYWNlCi0Jb3V0cHV0IHRvIGJlIHNlbnQgdG8gc3RkZXJyIGZvciBlYWNoIG1teCBvcGVyYXRpb24uCi0JVGhpcyBhZGRzIGxvdHMgb2YgY29kZSwgYW5kIG9idmlvdXNseSBzbG93cyBleGVjdXRpb24gdG8KLQlhIGNyYXdsLCBidXQgY2FuIGJlIHZlcnkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCi0KLQlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkKLQlFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUCi0JTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKLQlBTkQgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotCTE5OTkgYnkgUi4gRmlzaGVyCi0JQmFzZWQgb24gbGlibW14LCAxOTk3LTk5IGJ5IEguIERpZXR6IGFuZCBSLiBGaXNoZXIKLQotIE5vdGVzOgotCUl0IGFwcGVhcnMgdGhhdCB0aGUgbGF0ZXN0IGdhcyBoYXMgdGhlIHBhbmQgcHJvYmxlbSBmaXhlZCwgdGhlcmVmb3JlCi0JICBJJ2xsIHVuZGVmaW5lIEJST0tFTl9QQU5EIGJ5IGRlZmF1bHQuCi0qLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ29vbV9jb25maWcuaCIKLQotI2lmZGVmIEhBVkVfTU1YCi0KLS8qIGEgZGVmaW5pciBwb3VyIGF2b2lyIGV4YWN0ZW1lbnQgbGUgbWVtZSByZXN1bHRhdCBxdWUgbGEgZm9uY3Rpb24gQwotICogKHVuIGNob3VpbGxhdCBwbHVzIGxlbnQpLi4gbWFpcyBsYSBkaWZmZXJlbmNlIGVzdCBhc3NleiBwZXUgbm90YWJsZS4KLSAqLwotLy8gI2RlZmluZSBTVFJJQ1RfQ09NUEFUCi0KLSNkZWZpbmUgQlVGRlBPSU5UTkIgMTYKLSNkZWZpbmUgQlVGRlBPSU5UTUFTSyAweGZmZmYKLSNkZWZpbmUgQlVGRklOQ1IgMHhmZgotCi0jZGVmaW5lIHNxcnRwZXJ0ZSAxNgotLyogZmFpcmUgOiBhICUgc3FydHBlcnRlIDw9PiBhICYgcGVydGVtYXNrKi8KLSNkZWZpbmUgUEVSVEVNQVNLIDB4ZgotLyogZmFpcmUgOiBhIC8gc3FydHBlcnRlIDw9PiBhID4+IFBFUlRFREVDKi8KLSNkZWZpbmUgUEVSVEVERUMgNAotCi0KLS8qI2RlZmluZSBNTVhfVFJBQ0UqLwotI2luY2x1ZGUgIm1teC5oIgotLyojaW5jbHVkZSAieG1teC5oIiovCi0jaW5jbHVkZSAiZ29vbV9ncmFwaGljLmgiCi0KLWludAoteG1teF9zdXBwb3J0ZWQgKHZvaWQpCi17Ci0gIHJldHVybiAobW1fc3VwcG9ydCAoKSAmIDB4OCkgPj4gMzsKLX0KLQotdm9pZAotem9vbV9maWx0ZXJfeG1teCAoaW50IHByZXZYLCBpbnQgcHJldlksCi0gICAgUGl4ZWwgKiBleHBpeDEsIFBpeGVsICogZXhwaXgyLAotICAgIGludCAqbGJydVMsIGludCAqbGJydUQsIGludCBidWZmcmF0aW8sIGludCBwcmVjYWxDb2VmWzE2XVsxNl0pCi17Ci0gIGludCBidWZzaXplID0gcHJldlggKiBwcmV2WTsgIC8qIHRhaWxsZSBkdSBidWZmZXIgKi8KLSAgdm9sYXRpbGUgaW50IGxvb3A7ICAgICAgICAgICAgLyogdmFyaWFibGUgZGUgYm91Y2xlICovCi0KLSAgbW14X3QgKmJydXRTID0gKG1teF90ICopIGxicnVTOyAgICAgICAvKiBidWZmZXIgZGUgdHJhbnNmb3JtYXRpb24gc291cmNlICovCi0gIG1teF90ICpicnV0RCA9IChtbXhfdCAqKSBsYnJ1RDsgICAgICAgLyogYnVmZmVyIGRlIHRyYW5zZm9ybWF0aW9uIGRlc3QgKi8KLQotICB2b2xhdGlsZSBtbXhfdCBwcmV2WFk7Ci0gIHZvbGF0aWxlIG1teF90IHJhdGlveDsKLQotICAvKiAgICAgIHZvbGF0aWxlIG1teF90IGludGVycGl4OyAqLwotCi0gIGV4cGl4MVswXS52YWwgPSBleHBpeDFbcHJldlggLSAxXS52YWwgPSBleHBpeDFbcHJldlggKiBwcmV2WSAtIDFdLnZhbCA9Ci0gICAgICBleHBpeDFbcHJldlggKiBwcmV2WSAtIHByZXZYXS52YWwgPSAwOwotCi0gIHByZXZYWS51ZFswXSA9IChwcmV2WCAtIDEpIDw8IFBFUlRFREVDOwotICBwcmV2WFkudWRbMV0gPSAocHJldlkgLSAxKSA8PCBQRVJURURFQzsKLQotICByYXRpb3guZFswXSA9IGJ1ZmZyYXRpbzsKLSAgcmF0aW94LmRbMV0gPSBidWZmcmF0aW87Ci0KLSAgYXNtIHZvbGF0aWxlICgiXG5cdCBtb3ZxICAlW3JhdGlvXSwgJSVtbTYiICJcblx0IHBzbGxkICQxNiwgICAgICAlJW1tNiIgICAgICAgLyogbW02ID0gW3JhdDE2PWJ1ZmZyYXRpbzw8MTYgfCByYXQxNj1idWZmcmF0aW88PDE2XSAqLwotICAgICAgIlxuXHQgcHhvciAgJSVtbTcsICAgICUlbW03IiAgICAgIC8qIG1tNyA9IDAgKi8KLSAgICAgIDo6W3JhdGlvXSAibSIgKHJhdGlveCkpOwotCi0gIGxvb3AgPSAwOwotCi0gIC8qCi0gICAqIE5PVEUgOiBtbTYgZXQgbW03IG5lIHNvbnQgcGFzIG1vZGlmaWVzIGRhbnMgbGEgYm91Y2xlLgotICAgKi8KLSAgd2hpbGUgKGxvb3AgPCBidWZzaXplKSB7Ci0gICAgLyogVGhyZWFkICMxCi0gICAgICogcHJlIDogIG1tNiA9IFtyYXQxNnxyYXQxNl0KLSAgICAgKiBwb3N0IDogbW0wID0gUyArICgoRC1TKSpyYXQxNiBmb3JtYXQgW1h8WV0KLSAgICAgKiBtb2RpZmllZCA9IG1tMCxtbTEsbW0yCi0gICAgICovCi0KLSAgICBhc20gdm9sYXRpbGUgKCIjMSBcblx0IG1vdnEgMCglW2JydXRTXSksICUlbW0wIiAiIzEgXG5cdCBtb3ZxIDAoJVticnV0RF0pLCAlJW1tMSIgIiMxIFxuXHQgcHN1YmQgICAlJW1tMCwgJSVtbTEiICAgIC8qIG1tMSA9IEQgLSBTICovCi0gICAgICAgICIjMSBcblx0IG1vdnEgICAgJSVtbTEsICUlbW0yIiAgLyogbW0yID0gRCAtIFMgKi8KLSAgICAgICAgIiMxIFxuXHQgcHNsbGQgICAgICQxNiwgJSVtbTEiICIjMSBcblx0IHBtdWxsdyAgJSVtbTYsICUlbW0yIiAiIzEgXG5cdCBwbXVsaHV3ICUlbW02LCAlJW1tMSIgIiMxIFxuXHQgcHNsbGQgICAkMTYsICAgJSVtbTAiICIjMSBcblx0IHBhZGRkICAgJSVtbTIsICUlbW0xIiAgICAgIC8qIG1tMSA9IChEIC0gUykgKiBidWZmcmF0aW8gPj4gMTYgKi8KLSAgICAgICAgIiMxIFxuXHQgcGFkZGQgICAlJW1tMSwgJSVtbTAiICAvKiBtbTAgPSBTICsgbW0xICovCi0gICAgICAgICIjMSBcblx0IHBzcmxkICAgJDE2LCAgICUlbW0wIjo6W2JydXRTXSAiciIgKCZicnV0U1tsb29wXSksCi0gICAgICAgIFticnV0RF0gInIiICgmYnJ1dERbbG9vcF0pCi0gICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgIC8qIG1tMCA9IFMgKi8KLQotICAgIC8qCi0gICAgICogcHJlIDogbW0wIDogcG9zaXRpb24gdmVjdG9yIG9uIHNjcmVlbgotICAgICAqICAgICAgIHByZXZYWSA6IGNvb3JkaW5hdGUgb2YgdGhlIGxvd2VyLXJpZ2h0IHBvaW50IG9uIHNjcmVlbgotICAgICAqIHBvc3QgOiBjbGlwcGVkIG1tMAotICAgICAqIG1vZGlmaWVkIDogbW0wLG1tMSxtbTIKLSAgICAgKi8KLSAgICBhc20gdm9sYXRpbGUKLSAgICAgICAgKCIjMSBcblx0IG1vdnEgJVtwcmV2WFldLCAlJW1tMSIgIiMxIFxuXHQgcGNtcGd0ZCAlJW1tMCwgICUlbW0xIgotICAgICAgICAvKiBtbTAgZW4gWCBjb250aWVudCAoaWRlbSBwb3VyIFkpIDoKLSAgICAgICAgICogICAxMTExIHNpIHByZXZYWSA+IHB4Ci0gICAgICAgICAqICAgMDAwMCBzaSBwcmV2WFkgPD0gcHggKi8KLSNpZmRlZiBTVFJJQ1RfQ09NUEFUCi0gICAgICAgICIjMSBcblx0IG1vdnEgICAgICAlJW1tMSwgJSVtbTIiCi0gICAgICAgICIjMSBcblx0IHB1bnBja2hkcSAlJW1tMiwgJSVtbTIiCi0gICAgICAgICIjMSBcblx0IHB1bnBja2xkcSAlJW1tMSwgJSVtbTEiICIjMSBcblx0IHBhbmQgICAgICAlJW1tMiwgJSVtbTAiCi0jZW5kaWYKLSAgICAgICAgIiMxIFxuXHQgcGFuZCAlJW1tMSwgJSVtbTAiICAgICAvKiBvbiBtZXQgYSB6ZXJvIGxhIHBhcnRpZSBxdWkgZGVib3JkZSAqLwotICAgICAgICA6OltwcmV2WFldICJtIiAocHJldlhZKSk7Ci0KLSAgICAvKiBUaHJlYWQgIzIKLSAgICAgKiBwcmUgOiAgbW0wIDogY2xpcHBlZCBwb3NpdGlvbiBvbiBzY3JlZW4KLSAgICAgKgotICAgICAqIHBvc3QgOiBtbTMgOiBjb2VmcyBmb3IgdGhpcyBwb3NpdGlvbgotICAgICAqICAgICAgICBtbTEgOiBYIHZlY3RvciBbMHxYXQotICAgICAqCi0gICAgICogbW9kaWYgOiBlYXgsZXNpCi0gICAgICovCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIjMiBcblx0IG1vdmQgJSVtbTAsJSVlc2kiCi0gICAgICAgICIjMiBcblx0IG1vdnEgJSVtbTAsJSVtbTEiCi0gICAgICAgICIjMiBcblx0IGFuZGwgJDE1LCUlZXNpIgotICAgICAgICAiIzIgXG5cdCBwc3JscSAkMzIsJSVtbTEiCi0gICAgICAgICIjMiBcblx0IHNobGwgJDYsJSVlc2kiCi0gICAgICAgICIjMiBcblx0IG1vdmQgJSVtbTEsJSVlYXgiCi0gICAgICAgICIjMiBcblx0IGFkZGwgJVtwcmVjYWxDb2VmXSwlJWVzaSIKLSAgICAgICAgIiMyIFxuXHQgYW5kbCAkMTUsJSVlYXgiCi0gICAgICAgICIjMiBcblx0IG1vdmQgKCUlZXNpLCUlZWF4LDQpLCUlbW0zIjo6W3ByZWNhbENvZWZdCi0gICAgICAgICJnIiAocHJlY2FsQ29lZik6ImVheCIsICJlc2kiKTsKLQotICAgIC8qCi0gICAgICogZXh0cmFjdGlvbiBkZXMgY29lZmZpY2llbnRzLi4uIChUaHJlYWQgIzMpCi0gICAgICoKLSAgICAgKiBwcmUgOiBjb2VmIGRhbnMgbW0zCi0gICAgICoKLSAgICAgKiBwb3N0IDogY29lZiBleHRyYWl0cyBkYW5zIG1tMyAoYzEgJiBjMikKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV0IG1tNCAoYzMgJiBjNCkKLSAgICAgKgotICAgICAqIG1vZGlmIDogbW01Ci0gICAgICovCi0KLSAgICAvKiAoVGhyZWFkICM0KQotICAgICAqIHByZSA6IG1tMCA6IFkgcG9zIFsqfFldCi0gICAgICogICAgICAgbW0xIDogWCBwb3MgWyp8WF0KLSAgICAgKgotICAgICAqIHBvc3QgOiBtbTAgOiBleHBpeDFbcG9zaXRpb25dCi0gICAgICogICAgICAgIG1tMiA6IGV4cGl4MVtwb3NpdGlvbitsYXJnZXVyXQotICAgICAqCi0gICAgICogbW9kaWYgOiBlYXgsIGVzaQotICAgICAqLwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiIzIgXG5cdCBwc3JsZCAkNCwgJSVtbTAiICIjMiBcblx0IHBzcmxkICQ0LCAlJW1tMSIgICAvKiBQRVJURURFQyA9ICQ0ICovCi0gICAgICAgICIjNCBcblx0IG1vdmQgJSVtbTEsJSVlYXgiCi0gICAgICAgICIjMyBcblx0IG1vdnEgJSVtbTMsJSVtbTUiCi0gICAgICAgICIjNCBcblx0IG11bGwgJVtwcmV2WF0iCi0gICAgICAgICIjNCBcblx0IG1vdmQgJSVtbTAsJSVlc2kiCi0gICAgICAgICIjMyBcblx0IHB1bnBja2xidyAlJW1tNSwgJSVtbTMiCi0gICAgICAgICIjNCBcblx0IGFkZGwgJSVlc2ksICUlZWF4IgotICAgICAgICAiIzMgXG5cdCBtb3ZxICUlbW0zLCAlJW1tNCIKLSAgICAgICAgIiMzIFxuXHQgbW92cSAlJW1tMywgJSVtbTUiCi0gICAgICAgICIjNCBcblx0IG1vdmwgJVtleHBpeDFdLCAlJWVzaSIKLSAgICAgICAgIiMzIFxuXHQgcHVucGNrbGJ3ICUlbW01LCAlJW1tMyIKLSAgICAgICAgIiM0IFxuXHQgbW92cSAoJSVlc2ksJSVlYXgsNCksJSVtbTAiCi0gICAgICAgICIjMyBcblx0IHB1bnBja2hidyAlJW1tNSwgJSVtbTQiCi0gICAgICAgICIjNCBcblx0IGFkZGwgJVtwcmV2WF0sJSVlYXgiCi0gICAgICAgICIjNCBcblx0IG1vdnEgKCUlZXNpLCUlZWF4LDQpLCUlbW0yIjo6W2V4cGl4MV0gImciIChleHBpeDEpCi0gICAgICAgICxbcHJldlhdICJnIiAocHJldlgpCi0gICAgICAgIDoiZWF4IiwgImVzaSIsICJlZHgiKTsKLQotICAgIC8qCi0gICAgICogcHJlIDogICAgICAgbW0wIDogZXhwaXgxW3Bvc2l0aW9uXQotICAgICAqICAgICAgICAgICAgIG1tMiA6IGV4cGl4MVtwb3NpdGlvbitsYXJnZXVyXQotICAgICAqICAgICAgIG1tMyAmIG1tNCA6IGNvZWZzCi0gICAgICovCi0KLSAgICAvKiByZWNvcGllIGRlcyBkZXV4IHByZW1pZXJzIHBpeGVscyBkYW5zIG1tMCBldCBtbTEgKi8KLSAgICBtb3ZxX3IyciAobW0wLCBtbTEpOyAgICAgICAgLyogYjEtdjEtcjEtYTEtYjItdjItcjItYTIgKi8KLQotICAgIC8qIGRlcGFja2FnZSBkdSBwcmVtaWVyIHBpeGVsICovCi0gICAgcHVucGNrbGJ3X3IyciAobW03LCBtbTApOyAgIC8qIDAwLWIyLTAwLXYyLTAwLXIyLTAwLWEyICovCi0KLSAgICAvKiBleHRyYWN0aW9uIGRlcyBjb2VmZmljaWVudHMuLi4gKi8KLQotICAgIG1vdnFfcjJyIChtbTMsIG1tNSk7ICAgICAgICAvKiBjMi1jMi1jMi1jMi1jMS1jMS1jMS1jMSAqLwotCi0gICAgLypeZW4gcGFycmFsbGVsZV4gKi8vKiBkZXBhY2thZ2UgZHUgMmllbWUgcGl4ZWwgKi8KLSAgICAvKl4gKi8gcHVucGNraGJ3X3IyciAobW03LCBtbTEpOwotICAgIC8qIDAwLWIxLTAwLXYxLTAwLXIxLTAwLWExICovCi0KLSAgICBwdW5wY2tsYndfcjJyIChtbTcsIG1tNSk7ICAgLyogMDAtYzEtMDAtYzEtMDAtYzEtMDAtYzEgKi8KLSAgICBwdW5wY2toYndfcjJyIChtbTcsIG1tMyk7ICAgLyogMDAtYzItMDAtYzItMDAtYzItMDAtYzIgKi8KLQotICAgIC8qIG11bHRpcGxpY2F0aW9uIGRlcyBwaXhlbHMgcGFyIGxlcyBjb2VmZmljaWVudHMgKi8KLSAgICBwbXVsbHdfcjJyIChtbTUsIG1tMCk7ICAgICAgLyogYzEqYjItYzEqdjItYzEqcjItYzEqYTIgKi8KLSAgICBwbXVsbHdfcjJyIChtbTMsIG1tMSk7ICAgICAgLyogYzIqYjEtYzIqdjEtYzIqcjEtYzIqYTEgKi8KLSAgICBwYWRkd19yMnIgKG1tMSwgbW0wKTsKLQotICAgIC8qIC4uLmV4dHJhY3Rpb24gZGVzIDIgZGVybmllcnMgY29lZmZpY2llbnRzICovCi0gICAgbW92cV9yMnIgKG1tNCwgbW01KTsgICAgICAgIC8qIGM0LWM0LWM0LWM0LWMzLWMzLWMzLWMzICovCi0gICAgcHVucGNrbGJ3X3IyciAobW03LCBtbTQpOyAgIC8qIDAwLWMzLTAwLWMzLTAwLWMzLTAwLWMzICovCi0gICAgcHVucGNraGJ3X3IyciAobW03LCBtbTUpOyAgIC8qIDAwLWM0LTAwLWM0LTAwLWM0LTAwLWM0ICovCi0KLSAgICAvKiByZWN1cGVyYXRpb24gZGVzIDIgZGVybmllcnMgcGl4ZWxzICovCi0gICAgbW92cV9yMnIgKG1tMiwgbW0xKTsKLQotICAgIC8qIGRlcGFja2FnZSBkZXMgcGl4ZWxzICovCi0gICAgcHVucGNrbGJ3X3IyciAobW03LCBtbTEpOwotICAgIHB1bnBja2hid19yMnIgKG1tNywgbW0yKTsKLQotICAgIC8qIG11bHRpcGxpY2F0aW9uIHBhcyBsZXMgY29lZmZzICovCi0gICAgcG11bGx3X3IyciAobW00LCBtbTEpOwotICAgIHBtdWxsd19yMnIgKG1tNSwgbW0yKTsKLQotICAgIC8qIGFqb3V0IGRlcyB2YWxldXJzIG9idGVudWVzIO+/vSBsYSB2YWxldXIgZmluYWxlICovCi0gICAgcGFkZHdfcjJyIChtbTEsIG1tMCk7Ci0gICAgcGFkZHdfcjJyIChtbTIsIG1tMCk7Ci0KLSAgICAvKiBkaXZpc2lvbiBwYXIgMjU2ID0gMTYrMTYrMTYrMTYsIHB1aXMgcmVwYWNrYWdlIGR1IHBpeGVsIGZpbmFsICovCi0gICAgcHNybHdfaTJyICg4LCBtbTApOwotICAgIHBhY2t1c3diX3IyciAobW03LCBtbTApOwotCi0gICAgbW92ZF9yMm0gKG1tMCwgZXhwaXgyW2xvb3BdKTsKLQotICAgICsrbG9vcDsKLSAgfQotICAvKiB0aGlzIHdhcyBmZW1tcywgd2hpY2ggaXMgQU1EIDNkbm93ICovCi0gIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tc1xuIik7Ci19Ci0KLSNkZWZpbmUgRFJBV01FVEhPRF9QTFVTX1hNTVgoX291dCxfYmFja2J1ZixfY29sKSBcCi17IFwKLQltb3ZkX20ycihfYmFja2J1ZiwgbW0wKTsgXAotCXBhZGR1c2JfbTJyKF9jb2wsIG1tMCk7IFwKLQltb3ZkX3IybShtbTAsIF9vdXQpOyBcCi19Ci0KLSNkZWZpbmUgRFJBV01FVEhPRCBEUkFXTUVUSE9EX1BMVVNfWE1NWCgqcCwqcCxjb2wpCi0KLXZvaWQKLWRyYXdfbGluZV94bW14IChQaXhlbCAqIGRhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IGNvbCwKLSAgICBpbnQgc2NyZWVueCwgaW50IHNjcmVlbnkpCi17Ci0gIGludCB4LCB5LCBkeCwgZHksIHl5LCB4eDsKLSAgUGl4ZWwgKnA7Ci0KLSAgaWYgKCh5MSA8IDApIHx8ICh5MiA8IDApIHx8ICh4MSA8IDApIHx8ICh4MiA8IDApIHx8ICh5MSA+PSBzY3JlZW55KQotICAgICAgfHwgKHkyID49IHNjcmVlbnkpIHx8ICh4MSA+PSBzY3JlZW54KSB8fCAoeDIgPj0gc2NyZWVueCkpCi0gICAgZ290byBlbmRfb2ZfbGluZTsKLQotICBkeCA9IHgyIC0geDE7Ci0gIGR5ID0geTIgLSB5MTsKLSAgaWYgKHgxID49IHgyKSB7Ci0gICAgaW50IHRtcDsKLQotICAgIHRtcCA9IHgxOwotICAgIHgxID0geDI7Ci0gICAgeDIgPSB0bXA7Ci0gICAgdG1wID0geTE7Ci0gICAgeTEgPSB5MjsKLSAgICB5MiA9IHRtcDsKLSAgICBkeCA9IHgyIC0geDE7Ci0gICAgZHkgPSB5MiAtIHkxOwotICB9Ci0KLSAgLyogdmVydGljYWwgbGluZSAqLwotICBpZiAoZHggPT0gMCkgewotICAgIGlmICh5MSA8IHkyKSB7Ci0gICAgICBwID0gJihkYXRhWyhzY3JlZW54ICogeTEpICsgeDFdKTsKLSAgICAgIGZvciAoeSA9IHkxOyB5IDw9IHkyOyB5KyspIHsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgcCArPSBzY3JlZW54OwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBwID0gJihkYXRhWyhzY3JlZW54ICogeTIpICsgeDFdKTsKLSAgICAgIGZvciAoeSA9IHkyOyB5IDw9IHkxOyB5KyspIHsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgcCArPSBzY3JlZW54OwotICAgICAgfQotICAgIH0KLSAgICBnb3RvIGVuZF9vZl9saW5lOwotICB9Ci0gIC8qIGhvcml6b250YWwgbGluZSAqLwotICBpZiAoZHkgPT0gMCkgewotICAgIGlmICh4MSA8IHgyKSB7Ci0gICAgICBwID0gJihkYXRhWyhzY3JlZW54ICogeTEpICsgeDFdKTsKLSAgICAgIGZvciAoeCA9IHgxOyB4IDw9IHgyOyB4KyspIHsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgcCsrOwotICAgICAgfQotICAgICAgZ290byBlbmRfb2ZfbGluZTsKLSAgICB9IGVsc2UgewotICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHkxKSArIHgyXSk7Ci0gICAgICBmb3IgKHggPSB4MjsgeCA8PSB4MTsgeCsrKSB7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIHArKzsKLSAgICAgIH0KLSAgICAgIGdvdG8gZW5kX29mX2xpbmU7Ci0gICAgfQotICB9Ci0gIC8qIDEgICAgKi8KLSAgLyogIFwgICAqLwotICAvKiAgIFwgICovCi0gIC8qICAgIDIgKi8KLSAgaWYgKHkyID4geTEpIHsKLSAgICAvKiBzdGVlcCAqLwotICAgIGlmIChkeSA+IGR4KSB7Ci0gICAgICBkeCA9ICgoZHggPDwgMTYpIC8gZHkpOwotICAgICAgeCA9IHgxIDw8IDE2OwotICAgICAgZm9yICh5ID0geTE7IHkgPD0geTI7IHkrKykgewotICAgICAgICB4eCA9IHggPj4gMTY7Ci0gICAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5KSArIHh4XSk7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIGlmICh4eCA8IChzY3JlZW54IC0gMSkpIHsKLSAgICAgICAgICBwKys7Ci0gICAgICAgICAgLyogRFJBV01FVEhPRDsgKi8KLSAgICAgICAgfQotICAgICAgICB4ICs9IGR4OwotICAgICAgfQotICAgICAgZ290byBlbmRfb2ZfbGluZTsKLSAgICB9Ci0gICAgLyogc2hhbGxvdyAqLwotICAgIGVsc2UgewotICAgICAgZHkgPSAoKGR5IDw8IDE2KSAvIGR4KTsKLSAgICAgIHkgPSB5MSA8PCAxNjsKLSAgICAgIGZvciAoeCA9IHgxOyB4IDw9IHgyOyB4KyspIHsKLSAgICAgICAgeXkgPSB5ID4+IDE2OwotICAgICAgICBwID0gJihkYXRhWyhzY3JlZW54ICogeXkpICsgeF0pOwotICAgICAgICBEUkFXTUVUSE9EOwotICAgICAgICBpZiAoeXkgPCAoc2NyZWVueSAtIDEpKSB7Ci0gICAgICAgICAgcCArPSBzY3JlZW55OwotICAgICAgICAgIC8qIERSQVdNRVRIT0Q7ICovCi0gICAgICAgIH0KLSAgICAgICAgeSArPSBkeTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyogICAgMiAqLwotICAvKiAgIC8gICovCi0gIC8qICAvICAgKi8KLSAgLyogMSAgICAqLwotICBlbHNlIHsKLSAgICAvKiBzdGVlcCAqLwotICAgIGlmICgtZHkgPiBkeCkgewotICAgICAgZHggPSAoKGR4IDw8IDE2KSAvIC1keSk7Ci0gICAgICB4ID0gKHgxICsgMSkgPDwgMTY7Ci0gICAgICBmb3IgKHkgPSB5MTsgeSA+PSB5MjsgeS0tKSB7Ci0gICAgICAgIHh4ID0geCA+PiAxNjsKLSAgICAgICAgcCA9ICYoZGF0YVsoc2NyZWVueCAqIHkpICsgeHhdKTsKLSAgICAgICAgRFJBV01FVEhPRDsKLSAgICAgICAgaWYgKHh4IDwgKHNjcmVlbnggLSAxKSkgewotICAgICAgICAgIHAtLTsKLSAgICAgICAgICAvKiBEUkFXTUVUSE9EOyAqLwotICAgICAgICB9Ci0gICAgICAgIHggKz0gZHg7Ci0gICAgICB9Ci0gICAgICBnb3RvIGVuZF9vZl9saW5lOwotICAgIH0KLSAgICAvKiBzaGFsbG93ICovCi0gICAgZWxzZSB7Ci0gICAgICBkeSA9ICgoZHkgPDwgMTYpIC8gZHgpOwotICAgICAgeSA9IHkxIDw8IDE2OwotICAgICAgZm9yICh4ID0geDE7IHggPD0geDI7IHgrKykgewotICAgICAgICB5eSA9IHkgPj4gMTY7Ci0gICAgICAgIHAgPSAmKGRhdGFbKHNjcmVlbnggKiB5eSkgKyB4XSk7Ci0gICAgICAgIERSQVdNRVRIT0Q7Ci0gICAgICAgIGlmICh5eSA8IChzY3JlZW55IC0gMSkpIHsKLSAgICAgICAgICBwICs9IHNjcmVlbnk7Ci0gICAgICAgICAgLyogRFJBV01FVEhPRDsgKi8KLSAgICAgICAgfQotICAgICAgICB5ICs9IGR5OwotICAgICAgfQotICAgICAgZ290byBlbmRfb2ZfbGluZTsKLSAgICB9Ci0gIH0KLWVuZF9vZl9saW5lOgotICAvKiB0aGlzIHdhcyBmZW1tcywgd2hpY2ggaXMgQU1EIDNkbm93ICovCi0gIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tc1xuIik7Ci19Ci0jZWxzZQotaW50Ci14bW14X3N1cHBvcnRlZCAodm9pZCkKLXsKLSAgcmV0dXJuICgwKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20veG1teC5oIGIvZ3N0L2dvb20veG1teC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGVmMzYxLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tL3htbXguaAorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi0vKgl4bW14LmgKLQotCWVYdGVuZGVkIE11bHRpTWVkaWEgZVh0ZW5zaW9ucyBHQ0MgaW50ZXJmYWNlIGxpYnJhcnkgZm9yIElBMzIuCi0KLQlUbyB1c2UgdGhpcyBsaWJyYXJ5LCBzaW1wbHkgaW5jbHVkZSB0aGlzIGhlYWRlciBmaWxlCi0JYW5kIGNvbXBpbGUgd2l0aCBHQ0MuICBZb3UgTVVTVCBoYXZlIGlubGluaW5nIGVuYWJsZWQKLQlpbiBvcmRlciBmb3IgeG1teF9vaygpIHRvIHdvcms7IHRoaXMgY2FuIGJlIGRvbmUgYnkKLQlzaW1wbHkgdXNpbmcgLU8gb24gdGhlIEdDQyBjb21tYW5kIGxpbmUuCi0KLQlDb21waWxpbmcgd2l0aCAtRFhNTVhfVFJBQ0Ugd2lsbCBjYXVzZSBkZXRhaWxlZCB0cmFjZQotCW91dHB1dCB0byBiZSBzZW50IHRvIHN0ZGVyciBmb3IgZWFjaCBtbXggb3BlcmF0aW9uLgotCVRoaXMgYWRkcyBsb3RzIG9mIGNvZGUsIGFuZCBvYnZpb3VzbHkgc2xvd3MgZXhlY3V0aW9uIHRvCi0JYSBjcmF3bCwgYnV0IGNhbiBiZSB2ZXJ5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLgotCi0JVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZCi0JRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVAotCUxJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCi0JQU5EIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLQkxOTk5IGJ5IFIuIEZpc2hlcgotCUJhc2VkIG9uIGxpYm1teCwgMTk5Ny05OSBieSBILiBEaWV0eiBhbmQgUi4gRmlzaGVyCi0KLSBOb3RlczoKLQlJdCBhcHBlYXJzIHRoYXQgdGhlIGxhdGVzdCBnYXMgaGFzIHRoZSBwYW5kIHByb2JsZW0gZml4ZWQsIHRoZXJlZm9yZQotCSAgSSdsbCB1bmRlZmluZSBCUk9LRU5fUEFORCBieSBkZWZhdWx0LgotKi8KLQotI2lmbmRlZiBfWE1NWF9ICi0jZGVmaW5lIF9YTU1YX0gKLQotCi0vKglXYXJuaW5nOiAgYXQgdGhpcyB3cml0aW5nLCB0aGUgdmVyc2lvbiBvZiBHQVMgcGFja2FnZWQKLQl3aXRoIG1vc3QgTGludXggZGlzdHJpYnV0aW9ucyBkb2VzIG5vdCBoYW5kbGUgdGhlCi0JcGFyYWxsZWwgQU5EIG9wZXJhdGlvbiBtbmVtb25pYyBjb3JyZWN0bHkuICBJZiB0aGUKLQlzeW1ib2wgQlJPS0VOX1BBTkQgaXMgZGVmaW5lZCwgYSBzbG93ZXIgYWx0ZXJuYXRpdmUKLQljb2Rpbmcgd2lsbCBiZSB1c2VkLiAgSWYgZXhlY3V0aW9uIG9mIG1teHRlc3QgcmVzdWx0cwotCWluIGFuIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gZmF1bHQsIGRlZmluZSB0aGlzIHN5bWJvbC4KLSovCi0jdW5kZWYJQlJPS0VOX1BBTkQKLQotCi0vKglUaGUgdHlwZSBvZiBhbiB2YWx1ZSB0aGF0IGZpdHMgaW4gYW4gKEV4dGVuZGVkKSBNTVggcmVnaXN0ZXIKLQkobm90ZSB0aGF0IGxvbmcgbG9uZyBjb25zdGFudCB2YWx1ZXMgTVVTVCBiZSBzdWZmaXhlZAotCSBieSBMTCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlcyBieSBVTEwsIGxlc3QKLQkgdGhleSBiZSB0cnVuY2F0ZWQgYnkgdGhlIGNvbXBpbGVyKQotKi8KLSNpZm5kZWYgX01NWF9ICi10eXBlZGVmCXVuaW9uIHsKLQlsb25nIGxvbmcJCXE7CS8qIFF1YWR3b3JkICg2NC1iaXQpIHZhbHVlICovCi0JdW5zaWduZWQgbG9uZyBsb25nCXVxOwkvKiBVbnNpZ25lZCBRdWFkd29yZCAqLwotCWludAkJCWRbMl07CS8qIDIgRG91Ymxld29yZCAoMzItYml0KSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBpbnQJCXVkWzJdOwkvKiAyIFVuc2lnbmVkIERvdWJsZXdvcmQgKi8KLQlzaG9ydAkJCXdbNF07CS8qIDQgV29yZCAoMTYtYml0KSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBzaG9ydAkJdXdbNF07CS8qIDQgVW5zaWduZWQgV29yZCAqLwotCWNoYXIJCQliWzhdOwkvKiA4IEJ5dGUgKDgtYml0KSB2YWx1ZXMgKi8KLQl1bnNpZ25lZCBjaGFyCQl1Yls4XTsJLyogOCBVbnNpZ25lZCBCeXRlICovCi0JZmxvYXQJCQlzWzJdOwkvKiBTaW5nbGUtcHJlY2lzaW9uICgzMi1iaXQpIHZhbHVlICovCi19IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpIG1teF90OwkvKiBPbiBhbiA4LWJ5dGUgKDY0LWJpdCkgYm91bmRhcnkgKi8KLSNlbmRpZgotCi0KLQotLyoJRnVuY3Rpb24gdG8gdGVzdCBpZiBtdWx0aW1lZGlhIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkLi4uCi0qLwotc3RhdGljIGludAotbW1fc3VwcG9ydCh2b2lkKQotewotCS8qIFJldHVybnMgMSBpZiBNTVggaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQsCi0JICAgMyBpZiBDeXJpeCBNTVggYW5kIEV4dGVuZGVkIE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZAotCSAgIDUgaWYgQU1EIE1NWCBhbmQgM0ROb3chIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkCi0JICAgMCBpZiBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBvZiB0aGVzZQotCSovCi0JcmVnaXN0ZXIgaW50IHJ2YWwgPSAwOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkvKiBTZWUgaWYgQ1BVSUQgaW5zdHJ1Y3Rpb24gaXMgc3VwcG9ydGVkIC4uLiAqLwotCQkvKiAuLi4gR2V0IGNvcGllcyBvZiBFRkxBR1MgaW50byBlYXggYW5kIGVjeCAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0JCSJtb3ZsICUlZWF4LCAlJWVjeFxuXHQiCi0KLQkJLyogLi4uIFRvZ2dsZSB0aGUgSUQgYml0IGluIG9uZSBjb3B5IGFuZCBzdG9yZSAqLwotCQkvKiAgICAgdG8gdGhlIEVGTEFHUyByZWcgKi8KLQkJInhvcmwgJDB4MjAwMDAwLCAlJWVheFxuXHQiCi0JCSJwdXNoICUlZWF4XG5cdCIKLQkJInBvcGZcblx0IgotCi0JCS8qIC4uLiBHZXQgdGhlIChob3BlZnVsbHkgbW9kaWZpZWQpIEVGTEFHUyAqLwotCQkicHVzaGZcblx0IgotCQkicG9wbCAlJWVheFxuXHQiCi0KLQkJLyogLi4uIENvbXBhcmUgYW5kIHRlc3QgcmVzdWx0ICovCi0JCSJ4b3JsICUlZWF4LCAlJWVjeFxuXHQiCi0JCSJ0ZXN0bCAkMHgyMDAwMDAsICUlZWN4XG5cdCIKLQkJImp6IE5vdFN1cHBvcnRlZDFcblx0IgkJLyogQ1BVSUQgbm90IHN1cHBvcnRlZCAqLwotCi0KLQkJLyogR2V0IHN0YW5kYXJkIENQVUlEIGluZm9ybWF0aW9uLCBhbmQKLQkJICAgICAgIGdvIHRvIGEgc3BlY2lmaWMgdmVuZG9yIHNlY3Rpb24gKi8KLQkJIm1vdmwgJDAsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQotCQkvKiBDaGVjayBmb3IgSW50ZWwgKi8KLQkJImNtcGwgJDB4NzU2ZTY1NDcsICUlZWJ4XG5cdCIKLQkJImpuZSBUcnlBTURcblx0IgotCQkiY21wbCAkMHg0OTY1NmU2OSwgJSVlZHhcblx0IgotCQkiam5lIFRyeUFNRFxuXHQiCi0JCSJjbXBsICQweDZjNjU3NDZlLCAlJWVjeFxuIgotCQkiam5lIFRyeUFNRFxuXHQiCi0JCSJqbXAgSW50ZWxcblx0IgotCi0JCS8qIENoZWNrIGZvciBBTUQgKi8KLQkJIlxuVHJ5QU1EOlxuXHQiCi0JCSJjbXBsICQweDY4NzQ3NTQxLCAlJWVieFxuXHQiCi0JCSJqbmUgVHJ5Q3lyaXhcblx0IgotCQkiY21wbCAkMHg2OTc0NmU2NSwgJSVlZHhcblx0IgotCQkiam5lIFRyeUN5cml4XG5cdCIKLQkJImNtcGwgJDB4NDQ0ZDQxNjMsICUlZWN4XG4iCi0JCSJqbmUgVHJ5Q3lyaXhcblx0IgotCQkiam1wIEFNRFxuXHQiCi0KLQkJLyogQ2hlY2sgZm9yIEN5cml4ICovCi0JCSJcblRyeUN5cml4OlxuXHQiCi0JCSJjbXBsICQweDY5NzI3OTQzLCAlJWVieFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkMlxuXHQiCi0JCSJjbXBsICQweDczNmU0OTc4LCAlJWVkeFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkM1xuXHQiCi0JCSJjbXBsICQweDY0NjE2NTc0LCAlJWVjeFxuXHQiCi0JCSJqbmUgTm90U3VwcG9ydGVkNFxuXHQiCi0JCS8qIERyb3AgdGhyb3VnaCB0byBDeXJpeC4uLiAqLwotCi0KLQkJLyogQ3lyaXggU2VjdGlvbiAqLwotCQkvKiBTZWUgaWYgZXh0ZW5kZWQgQ1BVSUQgbGV2ZWwgODAwMDAwMDEgaXMgc3VwcG9ydGVkICovCi0JCS8qIFRoZSB2YWx1ZSBvZiBDUFVJRC84MDAwMDAwMSBmb3IgdGhlIDZ4ODZNWCBpcyB1bmRlZmluZWQKLQkJICAgYWNjb3JkaW5nIHRvIHRoZSBDeXJpeCBDUFUgRGV0ZWN0aW9uIEd1aWRlIChQcmVsaW1pbmFyeQotCQkgICBSZXYuIDEuMDEgdGFibGUgMSksIHNvIHdlJ2xsIGNoZWNrIHRoZSB2YWx1ZSBvZiBlYXggZm9yCi0JCSAgIENQVUlELzAgdG8gc2VlIGlmIHN0YW5kYXJkIENQVUlEIGxldmVsIDIgaXMgc3VwcG9ydGVkLgotCQkgICBBY2NvcmRpbmcgdG8gdGhlIHRhYmxlLCB0aGUgb25seSBDUFUgd2hpY2ggc3VwcG9ydHMgbGV2ZWwKLQkJICAgMiBpcyBhbHNvIHRoZSBvbmx5IG9uZSB3aGljaCBzdXBwb3J0cyBleHRlbmRlZCBDUFVJRCBsZXZlbHMuCi0JCSovCi0JCSJjbXBsICQweDIsICUlZWF4XG5cdCIKLQkJImpuZSBNTVh0ZXN0XG5cdCIJLyogVXNlIHN0YW5kYXJkIENQVUlEIGluc3RlYWQgKi8KLQotCQkvKiBFeHRlbmRlZCBDUFVJRCBzdXBwb3J0ZWQgKGluIHRoZW9yeSksIHNvIGdldCBleHRlbmRlZAotCQkgICBmZWF0dXJlcyAqLwotCQkibW92bCAkMHg4MDAwMDAwMSwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkidGVzdGwgJDB4MDA4MDAwMDAsICUlZWF4XG5cdCIJLyogVGVzdCBmb3IgTU1YICovCi0JCSJqeiBOb3RTdXBwb3J0ZWQ1XG5cdCIJCS8qIE1NWCBub3Qgc3VwcG9ydGVkICovCi0JCSJ0ZXN0bCAkMHgwMTAwMDAwMCwgJSVlYXhcblx0IgkvKiBUZXN0IGZvciBFeHQnZCBNTVggKi8KLQkJImpueiBFTU1YU3VwcG9ydGVkXG5cdCIKLQkJIm1vdmwgJDEsICUwOlxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblxuIgotCQkiRU1NWFN1cHBvcnRlZDpcblx0IgotCQkibW92bCAkMywgJTA6XG5cblx0IgkJLyogRU1NWCBhbmQgTU1YIFN1cHBvcnRlZCAqLwotCQkiam1wIFJldHVyblxuXHQiCi0KLQotCQkvKiBBTUQgU2VjdGlvbiAqLwotCQkiQU1EOlxuXHQiCi0KLQkJLyogU2VlIGlmIGV4dGVuZGVkIENQVUlEIGlzIHN1cHBvcnRlZCAqLwotCQkibW92bCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgotCQkiY3B1aWRcblx0IgotCQkiY21wbCAkMHg4MDAwMDAwMCwgJSVlYXhcblx0IgotCQkiamwgTU1YdGVzdFxuXHQiCS8qIFVzZSBzdGFuZGFyZCBDUFVJRCBpbnN0ZWFkICovCi0KLQkJLyogRXh0ZW5kZWQgQ1BVSUQgc3VwcG9ydGVkLCBzbyBnZXQgZXh0ZW5kZWQgZmVhdHVyZXMgKi8KLQkJIm1vdmwgJDB4ODAwMDAwMDEsICUlZWF4XG5cdCIKLQkJImNwdWlkXG5cdCIKLQkJInRlc3RsICQweDAwODAwMDAwLCAlJWVkeFxuXHQiCS8qIFRlc3QgZm9yIE1NWCAqLwotCQkianogTm90U3VwcG9ydGVkNlxuXHQiCQkvKiBNTVggbm90IHN1cHBvcnRlZCAqLwotCQkidGVzdGwgJDB4ODAwMDAwMDAsICUlZWR4XG5cdCIJLyogVGVzdCBmb3IgM0ROb3chICovCi0JCSJqbnogVGhyZWVETm93U3VwcG9ydGVkXG5cdCIKLQkJIm1vdmwgJDEsICUwOlxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblxuIgotCQkiVGhyZWVETm93U3VwcG9ydGVkOlxuXHQiCi0JCSJtb3ZsICQ1LCAlMDpcblxuXHQiCQkvKiAzRE5vdyEgYW5kIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblx0IgotCi0KLQkJLyogSW50ZWwgU2VjdGlvbiAqLwotCQkiSW50ZWw6XG5cdCIKLQotCQkvKiBDaGVjayBmb3IgTU1YICovCi0JCSJNTVh0ZXN0OlxuXHQiCi0JCSJtb3ZsICQxLCAlJWVheFxuXHQiCi0JCSJjcHVpZFxuXHQiCi0JCSJ0ZXN0bCAkMHgwMDgwMDAwMCwgJSVlZHhcblx0IgkvKiBUZXN0IGZvciBNTVggKi8KLQkJImp6IE5vdFN1cHBvcnRlZDdcblx0IgkJLyogTU1YIE5vdCBzdXBwb3J0ZWQgKi8KLQkJIm1vdmwgJDEsICUwOlxuXG5cdCIJCS8qIE1NWCBTdXBwb3J0ZWQgKi8KLQkJImptcCBSZXR1cm5cblx0IgotCi0JCS8qIE5vdGhpbmcgc3VwcG9ydGVkICovCi0JCSJcbk5vdFN1cHBvcnRlZDE6XG5cdCIKLQkJIiNtb3ZsICQxMDEsICUwOlxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkMjpcblx0IgotCQkiI21vdmwgJDEwMiwgJTA6XG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQzOlxuXHQiCi0JCSIjbW92bCAkMTAzLCAlMDpcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDQ6XG5cdCIKLQkJIiNtb3ZsICQxMDQsICUwOlxuXG5cdCIKLQkJIlxuTm90U3VwcG9ydGVkNTpcblx0IgotCQkiI21vdmwgJDEwNSwgJTA6XG5cblx0IgotCQkiXG5Ob3RTdXBwb3J0ZWQ2OlxuXHQiCi0JCSIjbW92bCAkMTA2LCAlMDpcblxuXHQiCi0JCSJcbk5vdFN1cHBvcnRlZDc6XG5cdCIKLQkJIiNtb3ZsICQxMDcsICUwOlxuXG5cdCIKLQkJIm1vdmwgJDAsICUwOlxuXG5cdCIKLQotCQkiUmV0dXJuOlxuXHQiCi0JCTogIj1hIiAocnZhbCkKLQkJOiAvKiBubyBpbnB1dCAqLwotCQk6ICJlYXgiLCAiZWJ4IiwgImVjeCIsICJlZHgiCi0JKTsKLQotCS8qIFJldHVybiAqLwotCXJldHVybihydmFsKTsKLX0KLQotLyoJRnVuY3Rpb24gdG8gdGVzdCBpZiBtbXggaW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQuLi4KLSovCi0jaWZuZGVmIF9YTU1YX0gKLWlubGluZSBleHRlcm4gaW50Ci1tbXhfb2sodm9pZCkKLXsKLQkvKiBSZXR1cm5zIDEgaWYgTU1YIGluc3RydWN0aW9ucyBhcmUgc3VwcG9ydGVkLCAwIG90aGVyd2lzZSAqLwotCXJldHVybiAoIG1tX3N1cHBvcnQoKSAmIDB4MSApOwotfQotI2VuZGlmCi0KLS8qCUZ1bmN0aW9uIHRvIHRlc3QgaWYgeG1teCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZC4uLgotKi8KLWlubGluZSBleHRlcm4gaW50Ci14bW14X29rKHZvaWQpCi17Ci0JLyogUmV0dXJucyAxIGlmIEV4dGVuZGVkIE1NWCBpbnN0cnVjdGlvbnMgYXJlIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UgKi8KLQlyZXR1cm4gKCAobW1fc3VwcG9ydCgpICYgMHgyKSA+PiAxICk7Ci19Ci0KLQotLyoJSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGluc3RydWN0aW9uIG1hY3JvcyB0aGF0IGZvbGxvdy4uLgotCShub3RlIHRoYXQgbWVtb3J5LXRvLXJlZ2lzdGVyLCBtMnIsIGluc3RydWN0aW9ucyBhcmUgbmVhcmx5Ci0JIGFzIGVmZmljaWVudCBhcyByZWdpc3Rlci10by1yZWdpc3RlciwgcjJyLCBpbnN0cnVjdGlvbnM7Ci0JIGhvd2V2ZXIsIG1lbW9yeS10by1tZW1vcnkgaW5zdHJ1Y3Rpb25zIGFyZSByZWFsbHkgc2ltdWxhdGVkCi0JIGFzIGEgY29udmVuaWVuY2UsIGFuZCBhcmUgb25seSAxLzMgYXMgZWZmaWNpZW50KQotKi8KLSNpZmRlZglYTU1YX1RSQUNFCi0KLS8qCUluY2x1ZGUgdGhlIHN0dWZmIGZvciBwcmludGluZyBhIHRyYWNlIHRvIHN0ZGVyci4uLgotKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUJbW14X2kycihvcCwgaW1tLCByZWcpIFwKLQl7IFwKLQkJbW14X3QgbW14X3RyYWNlOyBcCi0JCW1teF90cmFjZS51cSA9IChpbW0pOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9pMnIoIiAjaW1tICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjcmVnICI9MHglMDh4JTA4eCkgPT4gIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotCQkJCSAgICAgIDogIlgiIChpbW0pKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjcmVnICI9MHglMDh4JTA4eFxuIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCX0KLQotI2RlZmluZQltbXhfbTJyKG9wLCBtZW0sIHJlZykgXAotCXsgXAotCQltbXhfdCBtbXhfdHJhY2U7IFwKLQkJbW14X3RyYWNlID0gKG1lbSk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNvcCAiX20ycigiICNtZW0gIj0weCUwOHglMDh4LCAiLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWcgIj0weCUwOHglMDh4KSA9PiAiLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkJICAgICAgOiAiWCIgKG1lbSkpOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92cSAlJSIgI3JlZyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWcgIj0weCUwOHglMDh4XG4iLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JfQotCi0jZGVmaW5lCW1teF9yMm0ob3AsIHJlZywgbWVtKSBcCi0JeyBcCi0JCW1teF90IG1teF90cmFjZTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWcgIiwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1teF90cmFjZSkgXAotCQkJCSAgICAgIDogLyogbm90aGluZyAqLyApOyBcCi0JCWZwcmludGYoc3RkZXJyLCAjb3AgIl9yMm0oIiAjcmVnICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQltbXhfdHJhY2UgPSAobWVtKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbSAiPTB4JTA4eCUwOHgpID0+ICIsIFwKLQkJCW1teF90cmFjZS5kWzFdLCBtbXhfdHJhY2UuZFswXSk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtZW0pIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQltbXhfdHJhY2UgPSAobWVtKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbSAiPTB4JTA4eCUwOHhcbiIsIFwKLQkJCW1teF90cmFjZS5kWzFdLCBtbXhfdHJhY2UuZFswXSk7IFwKLQl9Ci0KLSNkZWZpbmUJbW14X3IycihvcCwgcmVncywgcmVnZCkgXAotCXsgXAotCQltbXhfdCBtbXhfdHJhY2U7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVncyAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNvcCAiX3IycigiICNyZWdzICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJSUiICNyZWdkICIsICUwIiBcCi0JCQkJICAgICAgOiAiPVgiIChtbXhfdHJhY2UpIFwKLQkJCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI3JlZ2QgIj0weCUwOHglMDh4KSA9PiAiLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlIiAjcmVncyAiLCAlIiAjcmVnZCk7IFwKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUlIiAjcmVnZCAiLCAlMCIgXAotCQkJCSAgICAgIDogIj1YIiAobW14X3RyYWNlKSBcCi0JCQkJICAgICAgOiAvKiBub3RoaW5nICovICk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNyZWdkICI9MHglMDh4JTA4eFxuIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCX0KLQotI2RlZmluZQltbXhfbTJtKG9wLCBtZW1zLCBtZW1kKSBcCi0JeyBcCi0JCW1teF90IG1teF90cmFjZTsgXAotCQltbXhfdHJhY2UgPSAobWVtcyk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNvcCAiX20ybSgiICNtZW1zICI9MHglMDh4JTA4eCwgIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQltbXhfdHJhY2UgPSAobWVtZCk7IFwKLQkJZnByaW50ZihzdGRlcnIsICNtZW1kICI9MHglMDh4JTA4eCkgPT4gIiwgXAotCQkJbW14X3RyYWNlLmRbMV0sIG1teF90cmFjZS5kWzBdKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJCSAgICAgICNvcCAiICUxLCAlJW1tMFxuXHQiIFwKLQkJCQkgICAgICAibW92cSAlJW1tMCwgJTAiIFwKLQkJCQkgICAgICA6ICI9WCIgKG1lbWQpIFwKLQkJCQkgICAgICA6ICJYIiAobWVtcykpOyBcCi0JCW1teF90cmFjZSA9IChtZW1kKTsgXAotCQlmcHJpbnRmKHN0ZGVyciwgI21lbWQgIj0weCUwOHglMDh4XG4iLCBcCi0JCQltbXhfdHJhY2UuZFsxXSwgbW14X3RyYWNlLmRbMF0pOyBcCi0JfQotCi0jZWxzZQotCi0vKglUaGVzZSBtYWNyb3MgYXJlIGEgbG90IHNpbXBsZXIgd2l0aG91dCB0aGUgdHJhY2luZy4uLgotKi8KLQotI2RlZmluZQltbXhfaTJyKG9wLCBpbW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChpbW0pICkKLQotI2RlZmluZQltbXhfbTJyKG9wLCBtZW0sIHJlZykgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWcgXAotCQkJICAgICAgOiAvKiBub3RoaW5nICovIFwKLQkJCSAgICAgIDogIlgiIChtZW0pKQotCi0jZGVmaW5lCW1teF9tMmlyKG9wLCBtZW0sIHJzKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JzIFwKLQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkgICAgICA6ICJYIiAobWVtKSApCi0KLSNkZWZpbmUJbW14X3IybShvcCwgcmVnLCBtZW0pIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSUiICNyZWcgIiwgJTAiIFwKLQkJCSAgICAgIDogIj1YIiAobWVtKSBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKQotCi0jZGVmaW5lCW1teF9yMnIob3AsIHJlZ3MsIHJlZ2QpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSIgI3JlZ3MgIiwgJSIgI3JlZ2QpCi0KLSNkZWZpbmUJbW14X3IyaXIob3AsIHJzMSwgcnMyKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcnMxICIsICUlIiAjcnMyIFwKLQkJCSAgICAgIDogLyogbm90aGluZyAqLyBcCi0JCQkgICAgICA6IC8qIG5vdGhpbmcgKi8gKQotCi0jZGVmaW5lCW1teF9tMm0ob3AsIG1lbXMsIG1lbWQpIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJTAsICUlbW0wXG5cdCIgXAotCQkJICAgICAgI29wICIgJTEsICUlbW0wXG5cdCIgXAotCQkJICAgICAgIm1vdnEgJSVtbTAsICUwIiBcCi0JCQkgICAgICA6ICI9WCIgKG1lbWQpIFwKLQkJCSAgICAgIDogIlgiIChtZW1zKSkKLQotI2VuZGlmCi0KLQotCi0vKgkxeDY0IE1PVmUgUXVhZHdvcmQKLQkodGhpcyBpcyBib3RoIGEgbG9hZCBhbmQgYSBzdG9yZS4uLgotCSBpbiBmYWN0LCBpdCBpcyB0aGUgb25seSB3YXkgdG8gc3RvcmUpCi0qLwotI2RlZmluZQltb3ZxX20ycih2YXIsIHJlZykJbW14X20ycihtb3ZxLCB2YXIsIHJlZykKLSNkZWZpbmUJbW92cV9yMm0ocmVnLCB2YXIpCW1teF9yMm0obW92cSwgcmVnLCB2YXIpCi0jZGVmaW5lCW1vdnFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92cSwgcmVncywgcmVnZCkKLSNkZWZpbmUJbW92cSh2YXJzLCB2YXJkKSBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZxICUxLCAlJW1tMFxuXHQiIFwKLQkJCSAgICAgICJtb3ZxICUlbW0wLCAlMCIgXAotCQkJICAgICAgOiAiPVgiICh2YXJkKSBcCi0JCQkgICAgICA6ICJYIiAodmFycykpCi0KLQotLyoJMXgzMiBNT1ZlIERvdWJsZXdvcmQKLQkobGlrZSBtb3ZxLCB0aGlzIGlzIGJvdGggbG9hZCBhbmQgc3RvcmUuLi4KLQkgYnV0IGlzIG1vc3QgdXNlZnVsIGZvciBtb3ZpbmcgdGhpbmdzIGJldHdlZW4KLQkgbW14IHJlZ2lzdGVycyBhbmQgb3JkaW5hcnkgcmVnaXN0ZXJzKQotKi8KLSNkZWZpbmUJbW92ZF9tMnIodmFyLCByZWcpCW1teF9tMnIobW92ZCwgdmFyLCByZWcpCi0jZGVmaW5lCW1vdmRfcjJtKHJlZywgdmFyKQltbXhfcjJtKG1vdmQsIHJlZywgdmFyKQotI2RlZmluZQltb3ZkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKG1vdmQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCW1vdmQodmFycywgdmFyZCkgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZCAlMSwgJSVtbTBcblx0IiBcCi0JCQkgICAgICAibW92ZCAlJW1tMCwgJTAiIFwKLQkJCSAgICAgIDogIj1YIiAodmFyZCkgXAotCQkJICAgICAgOiAiWCIgKHZhcnMpKQotCi0KLQotLyoJNHgxNiBQYXJhbGxlbCBNQUduaXR1ZGUKLSovCi0jZGVmaW5lCXBtYWd3X20ycih2YXIsIHJlZykJbW14X20ycihwbWFndywgdmFyLCByZWcpCi0jZGVmaW5lCXBtYWd3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtYWd3LCByZWdzLCByZWdkKQotI2RlZmluZQlwbWFndyh2YXJzLCB2YXJkKQltbXhfbTJtKHBtYWd3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgUGFyYWxsZWwgQUREcyB1c2luZyBTYXR1cmF0aW9uIGFyaXRobWV0aWMKLQlhbmQgSW1wbGllZCBkZXN0aW5hdGlvbgotKi8KLSNkZWZpbmUJcGFkZHNpd19tMmlyKHZhciwgcnMpCQltbXhfbTJpcihwYWRkc2l3LCB2YXIsIHJzKQotI2RlZmluZQlwYWRkc2l3X3IyaXIocnMxLCByczIpCQltbXhfcjJpcihwYWRkc2l3LCByczEsIHJzMikKLSNkZWZpbmUJcGFkZHNpdyh2YXJzLCB2YXJkKQkJbW14X20ybShwYWRkc2l3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgUGFyYWxsZWwgU1VCcyB1c2luZyBTYXR1cmF0aW9uIGFyaXRobWV0aWMKLQlhbmQgSW1wbGllZCBkZXN0aW5hdGlvbgotKi8KLSNkZWZpbmUJcHN1YnNpd19tMmlyKHZhciwgcnMpCQltbXhfbTJpcihwc3Vic2l3LCB2YXIsIHJzKQotI2RlZmluZQlwc3Vic2l3X3IyaXIocnMxLCByczIpCQltbXhfcjJpcihwc3Vic2l3LCByczEsIHJzMikKLSNkZWZpbmUJcHN1YnNpdyh2YXJzLCB2YXJkKQkJbW14X20ybShwc3Vic2l3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgUGFyYWxsZWwgTVVMcyBnaXZpbmcgSGlnaCA0eDE2IHBvcnRpb25zIG9mIHJlc3VsdHMKLQlSb3VuZGVkIHdpdGggMS8yIGJpdCAxNS4KLSovCi0jZGVmaW5lCXBtdWxocndfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBtdWxocncsIHZhciwgcmVnKQotI2RlZmluZQlwbXVsaHJ3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBtdWxocncsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lCXBtdWxocncodmFycywgdmFyZCkJbW14X20ybShwbXVsaHJ3LCB2YXJzLCB2YXJkKQotCi0KLS8qCTR4MTYgUGFyYWxsZWwgTVVMcyBnaXZpbmcgSGlnaCA0eDE2IHBvcnRpb25zIG9mIHJlc3VsdHMKLQlSb3VuZGVkIHdpdGggMS8yIGJpdCAxNSwgc3RvcmluZyB0byBJbXBsaWVkIHJlZ2lzdGVyCi0qLwotI2RlZmluZQlwbXVsaHJpd19tMmlyKHZhciwgcnMpCQltbXhfbTJpcihwbXVsaHJpdywgdmFyLCBycykKLSNkZWZpbmUJcG11bGhyaXdfcjJpcihyczEsIHJzMikJCW1teF9yMmlyKHBtdWxocml3LCByczEsIHJzMikKLSNkZWZpbmUJcG11bGhyaXcodmFycywgdmFyZCkJCW1teF9tMm0ocG11bGhyaXcsIHZhcnMsIHZhcmQpCi0KLQotLyoJNHgxNiBQYXJhbGxlbCBNdWxzIChhbmQgQUNjdW11bGF0ZSkgZ2l2aW5nIEhpZ2ggNHgxNiBwb3J0aW9ucwotCW9mIHJlc3VsdHMgUm91bmRlZCB3aXRoIDEvMiBiaXQgMTUsIGFjY3VtdWxhdGluZyB3aXRoIEltcGxpZWQgcmVnaXN0ZXIKLSovCi0jZGVmaW5lCXBtYWNocml3X20yaXIodmFyLCBycykJCW1teF9tMmlyKHBtYWNocml3LCB2YXIsIHJzKQotI2RlZmluZQlwbWFjaHJpd19yMmlyKHJzMSwgcnMyKQkJbW14X3IyaXIocG1hY2hyaXcsIHJzMSwgcnMyKQotI2RlZmluZQlwbWFjaHJpdyh2YXJzLCB2YXJkKQkJbW14X20ybShwbWFjaHJpdywgdmFycywgdmFyZCkKLQotCi0vKgk4eDh1IFBhcmFsbGVsIEFWRXJhZ2UKLSovCi0jZGVmaW5lCXBhdmViX20ycih2YXIsIHJlZykJbW14X20ycihwYXZlYiwgdmFyLCByZWcpCi0jZGVmaW5lCXBhdmViX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhdmViLCByZWdzLCByZWdkKQotI2RlZmluZQlwYXZlYih2YXJzLCB2YXJkKQltbXhfbTJtKHBhdmViLCB2YXJzLCB2YXJkKQotCi0KLS8qCTh4OHUgUGFyYWxsZWwgRElTVGFuY2UgYW5kIGFjY3VtdWxhdGUgd2l0aAotCXVuc2lnbmVkIHNhdHVyYXRpb24gdG8gSW1wbGllZCByZWdpc3RlcgotKi8KLSNkZWZpbmUJcGRpc3RpYl9tMmlyKHZhciwgcnMpCQltbXhfbTJpcihwZGlzdGliLCB2YXIsIHJzKQotI2RlZmluZQlwZGlzdGliKHZhcnMsIHZhcmQpCQltbXhfbTJtKHBkaXN0aWIsIHZhcnMsIHZhcmQpCi0KLQotLyoJOHg4IFBhcmFsbGVsIGNvbmRpdGlvbmFsIE1vVmUKLQlpZiBpbXBsaWVkIHJlZ2lzdGVyIGZpZWxkIGlzIFplcm8KLSovCi0jZGVmaW5lCXBtdnpiX20yaXIodmFyLCBycykJCW1teF9tMmlyKHBtdnpiLCB2YXIsIHJzKQotCi0KLS8qCTh4OCBQYXJhbGxlbCBjb25kaXRpb25hbCBNb1ZlCi0JaWYgaW1wbGllZCByZWdpc3RlciBmaWVsZCBpcyBOb3QgWmVybwotKi8KLSNkZWZpbmUJcG12bnpiX20yaXIodmFyLCBycykJCW1teF9tMmlyKHBtdm56YiwgdmFyLCBycykKLQotCi0vKgk4eDggUGFyYWxsZWwgY29uZGl0aW9uYWwgTW9WZQotCWlmIGltcGxpZWQgcmVnaXN0ZXIgZmllbGQgaXMgTGVzcyB0aGFuIFplcm8KLSovCi0jZGVmaW5lCXBtdmx6Yl9tMmlyKHZhciwgcnMpCQltbXhfbTJpcihwbXZsemIsIHZhciwgcnMpCi0KLQotLyoJOHg4IFBhcmFsbGVsIGNvbmRpdGlvbmFsIE1vVmUKLQlpZiBpbXBsaWVkIHJlZ2lzdGVyIGZpZWxkIGlzIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCB0byBaZXJvCi0qLwotI2RlZmluZQlwbXZnZXpiX20yaXIodmFyLCBycykJCW1teF9tMmlyKHBtdmdlemIsIHZhciwgcnMpCi0KLQotLyoJRmFzdCBFbXB0eSBNTXggU3RhdGUKLQkodXNlZCB0byBjbGVhbi11cCB3aGVuIGdvaW5nIGZyb20gbW14IHRvIGZsb2F0IHVzZQotCSBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIHNoYXJlZCBieSBib3RoOyBub3RlIHRoYXQKLQkgdGhlcmUgaXMgbm8gZmxvYXQtdG8teG1teCBvcGVyYXRpb24gbmVlZGVkLCBiZWNhdXNlCi0JIG9ubHkgdGhlIGZsb2F0IHRhZyB3b3JkIGluZm8gaXMgY29ycnVwdGlibGUpCi0qLwotI2lmZGVmCVhNTVhfVFJBQ0UKLQotI2RlZmluZQlmZW1tcygpIFwKLQl7IFwKLQkJZnByaW50ZihzdGRlcnIsICJmZW1tcygpXG4iKTsgXAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZlbW1zIik7IFwKLQl9Ci0KLSNlbHNlCi0KLSNkZWZpbmUJZmVtbXMoKQkJCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmVtbXMiKQotCi0jZW5kaWYKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2dzdC9nb29tMmsxL01ha2VmaWxlLmFtIGIvZ3N0L2dvb20yazEvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZWFiNGEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20yazEvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rnb29tMmsxLmxhCi0KLUdPT01fRklMVEVSX0ZJTEVTID0gZmlsdGVycy5jCi1HT09NX0ZJTFRFUl9DRkxBR1MgPSAtVU1NWCAtVVVTRV9BU00KLQotbm9pbnN0X0hFQURFUlMgPSBnc3Rnb29tLmggZmlsdGVycy5oIGdvb21fY29yZS5oIGdvb21fdG9vbHMuaCBncmFwaGljLmggbGluZXMuaAotCi1saWJnc3Rnb29tMmsxX2xhX1NPVVJDRVMgPSBnc3Rnb29tLmMgZ29vbV9jb3JlLmMgJChHT09NX0ZJTFRFUl9GSUxFUykgZ3JhcGhpYy5jIFwKLSAgICAgICAgIGxpbmVzLmMKLQotbGliZ3N0Z29vbTJrMV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdPT01fRklMVEVSX0NGTEFHUykgXAotCS1EZ3N0X2dvb21fZ2V0X3R5cGU9Z3N0X2dvb20yazFfZ2V0X3R5cGUJCVwKLQktRGdvb21faW5pdD1nb29tMmsxX2luaXQJCQkJXAotCS1EZ29vbV9jbG9zZT1nb29tMmsxX2Nsb3NlIC1EZ29vbV91cGRhdGU9Z29vbTJrMV91cGRhdGUJXAotCS1EZ29vbV9zZXRfcmVzb2x1dGlvbj1nb29tMmsxX3NldF9yZXNvbHV0aW9uCQlcCi0JLURnb29tX2xpbmVzPWdvb20yazFfbGluZXMJCQkJXAotCS1EQkxBQ0s9R09PTTJLMV9CTEFDSyAtRFdISVRFPUdPT00ySzFfV0hJVEUJCVwKLQktRFJFRD1HT09NMksxX1JFRCAtREJMVUU9R09PTTJLMV9CTFVFCQkJXAotCS1ER1JFRU49R09PTTJLMV9HUkVFTiAtRFlFTExPVz1HT09NMksxX1lFTExPVwkJXAotCS1ET1JBTkdFPUdPT00ySzFfT1JBTkdFIC1EVklPTEVUPUdPT00ySzFfVklPTEVUCQlcCi0JLUR6b29tRmlsdGVyRmFzdFJHQj16b29tRmlsdGVyRmFzdFJHQjJrMQkJXAotCS1EcG9pbnRGaWx0ZXI9cG9pbnRGaWx0ZXIyazEJCQkJXAotCS1Eem9vbUZpbHRlckRlc3Ryb3k9em9vbUZpbHRlckRlc3Ryb3kyazEJCVwKLQktRHpvb21GaWx0ZXJOZXc9em9vbUZpbHRlck5ldzJrMQotCi1saWJnc3Rnb29tMmsxX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJNKQotbGliZ3N0Z29vbTJrMV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3Rnb29tMmsxX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLUVYVFJBX0RJU1QgPSBmaWx0ZXJzLmMKZGlmZiAtLWdpdCBhL2dzdC9nb29tMmsxL01ha2VmaWxlLmluIGIvZ3N0L2dvb20yazEvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjU1YTEuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20yazEvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NjQgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2dvb20yazEKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3Rnb29tMmsxX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9fb2JqZWN0c18xID0gbGliZ3N0Z29vbTJrMV9sYS1maWx0ZXJzLmxvCi1hbV9saWJnc3Rnb29tMmsxX2xhX09CSkVDVFMgPSBsaWJnc3Rnb29tMmsxX2xhLWdzdGdvb20ubG8gXAotCWxpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLmxvICQoYW1fX29iamVjdHNfMSkgXAotCWxpYmdzdGdvb20yazFfbGEtZ3JhcGhpYy5sbyBsaWJnc3Rnb29tMmsxX2xhLWxpbmVzLmxvCi1saWJnc3Rnb29tMmsxX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGdvb20yazFfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdGdvb20yazFfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3Rnb29tMmsxX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0Z29vbTJrMV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3Rnb29tMmsxX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGdvb20yazFfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0Z29vbTJrMV9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0Z29vbTJrMS5sYQotR09PTV9GSUxURVJfRklMRVMgPSBmaWx0ZXJzLmMKLUdPT01fRklMVEVSX0NGTEFHUyA9IC1VTU1YIC1VVVNFX0FTTQotbm9pbnN0X0hFQURFUlMgPSBnc3Rnb29tLmggZmlsdGVycy5oIGdvb21fY29yZS5oIGdvb21fdG9vbHMuaCBncmFwaGljLmggbGluZXMuaAotbGliZ3N0Z29vbTJrMV9sYV9TT1VSQ0VTID0gZ3N0Z29vbS5jIGdvb21fY29yZS5jICQoR09PTV9GSUxURVJfRklMRVMpIGdyYXBoaWMuYyBcCi0gICAgICAgICBsaW5lcy5jCi0KLWxpYmdzdGdvb20yazFfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHT09NX0ZJTFRFUl9DRkxBR1MpIFwKLQktRGdzdF9nb29tX2dldF90eXBlPWdzdF9nb29tMmsxX2dldF90eXBlCQlcCi0JLURnb29tX2luaXQ9Z29vbTJrMV9pbml0CQkJCVwKLQktRGdvb21fY2xvc2U9Z29vbTJrMV9jbG9zZSAtRGdvb21fdXBkYXRlPWdvb20yazFfdXBkYXRlCVwKLQktRGdvb21fc2V0X3Jlc29sdXRpb249Z29vbTJrMV9zZXRfcmVzb2x1dGlvbgkJXAotCS1EZ29vbV9saW5lcz1nb29tMmsxX2xpbmVzCQkJCVwKLQktREJMQUNLPUdPT00ySzFfQkxBQ0sgLURXSElURT1HT09NMksxX1dISVRFCQlcCi0JLURSRUQ9R09PTTJLMV9SRUQgLURCTFVFPUdPT00ySzFfQkxVRQkJCVwKLQktREdSRUVOPUdPT00ySzFfR1JFRU4gLURZRUxMT1c9R09PTTJLMV9ZRUxMT1cJCVwKLQktRE9SQU5HRT1HT09NMksxX09SQU5HRSAtRFZJT0xFVD1HT09NMksxX1ZJT0xFVAkJXAotCS1Eem9vbUZpbHRlckZhc3RSR0I9em9vbUZpbHRlckZhc3RSR0IyazEJCVwKLQktRHBvaW50RmlsdGVyPXBvaW50RmlsdGVyMmsxCQkJCVwKLQktRHpvb21GaWx0ZXJEZXN0cm95PXpvb21GaWx0ZXJEZXN0cm95MmsxCQlcCi0JLUR6b29tRmlsdGVyTmV3PXpvb21GaWx0ZXJOZXcyazEKLQotbGliZ3N0Z29vbTJrMV9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RwYnV0aWxzLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoTElCTSkKLWxpYmdzdGdvb20yazFfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0Z29vbTJrMV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotRVhUUkFfRElTVCA9IGZpbHRlcnMuYwotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2dvb20yazEvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2dvb20yazEvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3Rnb29tMmsxLmxhOiAkKGxpYmdzdGdvb20yazFfbGFfT0JKRUNUUykgJChsaWJnc3Rnb29tMmsxX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3Rnb29tMmsxX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3Rnb29tMmsxX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3Rnb29tMmsxX2xhX09CSkVDVFMpICQobGliZ3N0Z29vbTJrMV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb20yazFfbGEtZmlsdGVycy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1ncmFwaGljLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1nc3Rnb29tLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1saW5lcy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0Z29vbTJrMV9sYS1nc3Rnb29tLmxvOiBnc3Rnb29tLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tMmsxX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb20yazFfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb20yazFfbGEtZ3N0Z29vbS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1nc3Rnb29tLlRwbyAtYyAtbyBsaWJnc3Rnb29tMmsxX2xhLWdzdGdvb20ubG8gYHRlc3QgLWYgJ2dzdGdvb20uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z29vbS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWdzdGdvb20uVHBvICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWdzdGdvb20uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0Z29vbS5jJyBvYmplY3Q9J2xpYmdzdGdvb20yazFfbGEtZ3N0Z29vbS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb20yazFfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbTJrMV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tMmsxX2xhLWdzdGdvb20ubG8gYHRlc3QgLWYgJ2dzdGdvb20uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z29vbS5jCi0KLWxpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLmxvOiBnb29tX2NvcmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb20yazFfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbTJrMV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0Z29vbTJrMV9sYS1nb29tX2NvcmUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLlRwbyAtYyAtbyBsaWJnc3Rnb29tMmsxX2xhLWdvb21fY29yZS5sbyBgdGVzdCAtZiAnZ29vbV9jb3JlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdvb21fY29yZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWdvb21fY29yZS5UcG8gJChERVBESVIpL2xpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dvb21fY29yZS5jJyBvYmplY3Q9J2xpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbTJrMV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tMmsxX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGdvb20yazFfbGEtZ29vbV9jb3JlLmxvIGB0ZXN0IC1mICdnb29tX2NvcmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ29vbV9jb3JlLmMKLQotbGliZ3N0Z29vbTJrMV9sYS1maWx0ZXJzLmxvOiBmaWx0ZXJzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tMmsxX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb20yazFfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGdvb20yazFfbGEtZmlsdGVycy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1maWx0ZXJzLlRwbyAtYyAtbyBsaWJnc3Rnb29tMmsxX2xhLWZpbHRlcnMubG8gYHRlc3QgLWYgJ2ZpbHRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlsdGVycy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWZpbHRlcnMuVHBvICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWZpbHRlcnMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZmlsdGVycy5jJyBvYmplY3Q9J2xpYmdzdGdvb20yazFfbGEtZmlsdGVycy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGdvb20yazFfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0Z29vbTJrMV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rnb29tMmsxX2xhLWZpbHRlcnMubG8gYHRlc3QgLWYgJ2ZpbHRlcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZmlsdGVycy5jCi0KLWxpYmdzdGdvb20yazFfbGEtZ3JhcGhpYy5sbzogZ3JhcGhpYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbTJrMV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tMmsxX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rnb29tMmsxX2xhLWdyYXBoaWMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGdvb20yazFfbGEtZ3JhcGhpYy5UcG8gLWMgLW8gbGliZ3N0Z29vbTJrMV9sYS1ncmFwaGljLmxvIGB0ZXN0IC1mICdncmFwaGljLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdyYXBoaWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1ncmFwaGljLlRwbyAkKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1ncmFwaGljLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dyYXBoaWMuYycgb2JqZWN0PSdsaWJnc3Rnb29tMmsxX2xhLWdyYXBoaWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tMmsxX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb20yazFfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z29vbTJrMV9sYS1ncmFwaGljLmxvIGB0ZXN0IC1mICdncmFwaGljLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdyYXBoaWMuYwotCi1saWJnc3Rnb29tMmsxX2xhLWxpbmVzLmxvOiBsaW5lcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0Z29vbTJrMV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rnb29tMmsxX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rnb29tMmsxX2xhLWxpbmVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWxpbmVzLlRwbyAtYyAtbyBsaWJnc3Rnb29tMmsxX2xhLWxpbmVzLmxvIGB0ZXN0IC1mICdsaW5lcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsaW5lcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rnb29tMmsxX2xhLWxpbmVzLlRwbyAkKERFUERJUikvbGliZ3N0Z29vbTJrMV9sYS1saW5lcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdsaW5lcy5jJyBvYmplY3Q9J2xpYmdzdGdvb20yazFfbGEtbGluZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rnb29tMmsxX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGdvb20yazFfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0Z29vbTJrMV9sYS1saW5lcy5sbyBgdGVzdCAtZiAnbGluZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbGluZXMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvZ29vbTJrMS9SRUFETUUgYi9nc3QvZ29vbTJrMS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMmNmMWIuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20yazEvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1UaGUgR29vbSBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIEdvb20gdmlzdWFsaXphdGlvbiBjb2RlIGZyb20KLXRoZSBHb29tIGhvbWVwYWdlIGZvdW5kIGF0OiAKLWh0dHA6Ly9pb3MuZnJlZS5mci8/cGFnZT1wcm9qZXQmcXVvaT0xIAotCi1MaWtlIHRoZSBvcmlnaW5hbCBsaWJyYXJ5IHNvIGlzIHRoZSBHb29tIHBsdWdpbiBhdmFpbGFibGUgdW5kZXIgdGhlIExHUEwgbGljZW5zZQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20yazEvZmlsdGVycy5jIGIvZ3N0L2dvb20yazEvZmlsdGVycy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzNjNzdjLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tMmsxL2ZpbHRlcnMuYworKysgL2Rldi9udWxsCkBAIC0xLDUzMSArMCwwIEBACi0vKiBmaWx0ZXIuYyB2ZXJzaW9uIDAuNwotICogY29udGllbnQgbGVzIGZpbHRyZXMgYXBwbGljYWJsZSBhIHVuIGJ1ZmZlcgotICogY3JlYXRpb24gOiAwMS8xMC8yMDAwCi0gKiAgLWFqb3V0IGRlIHNpbkZpbHRlcigpCi0gKiAgLWFqb3V0IGRlIHpvb21GaWx0ZXIoKQotICogIC1jb3BpZSBkZSB6b29tRmlsdGVyKCkgZW4gem9vbUZpbHRlclJHQigpLCBn6XJhbnQgbGVzIDMgY291bGV1cnMKLSAqICAtb3B0aW1pc2F0aW9uIGRlIHNpbkZpbHRlciAodXRpbGlzYW50IHVuZSB0YWJsZSBkZSBzaW4pCi0gKiAgICAgIC1hc20KLSAqICAgICAgLW9wdGltaXNhdGlvbiBkZSBsYSBwcm9jZWR1cmUgZGUgZ+lu6XJhdGlvbiBkdSBidWZmZXIgZGUgdHJhbnNmb3JtYXRpb24KLSAqICAgICAgICAgICAgICBsYSB2aXRlc3NlIGVzdCBtYWludGVuYW50IGNvbXByaXNlIGRhbnMgWzAuLjEyOF0gYXUgbGlldSBkZSBbMC4uMTAwXQotKi8KLQotLyojZGVmaW5lIF9ERUJVR19QSVhFTDsgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZmlsdGVycy5oIgotI2luY2x1ZGUgImdyYXBoaWMuaCIKLSNpbmNsdWRlICJnb29tX3Rvb2xzLmgiCi0jaW5jbHVkZSAiZ29vbV9jb3JlLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBNTVgKLSNkZWZpbmUgVVNFX0FTTQotI2VuZGlmCi0jaWZkZWYgUE9XRVJQQwotI2RlZmluZSBVU0VfQVNNCi0jZW5kaWYKLQotI2lmZGVmIFVTRV9BU00KLSNkZWZpbmUgRUZGRUNUX0RJU1RPUlMgNAotI2Vsc2UKLSNkZWZpbmUgRUZGRUNUX0RJU1RPUlMgMTAKLSNlbmRpZgotCi0KLSNpZmRlZiBVU0VfQVNNCi0KLSNpZmRlZiBNTVgKLWludCBtbXhfem9vbSAoKTsKLWd1aW50MzIgbW14X3pvb21fc2l6ZTsKLSNlbmRpZiAvKiBNTVggKi8KLQotI2lmZGVmIFBPV0VSUEMKLWV4dGVybiB1bnNpZ25lZCBpbnQgdXNlQWx0aXZlYzsKLWV4dGVybiB2b2lkIHBwY196b29tICh2b2lkKTsKLWV4dGVybiB2b2lkIHBwY196b29tX2FsdGl2ZWMgKHZvaWQpOwotdW5zaWduZWQgaW50IHBwY3NpemU0OwotI2VuZGlmIC8qIFBvd2VyUEMgKi8KLQotCi11bnNpZ25lZCBpbnQgKmNvZWZmcyA9IDAsICpmcmVlY29lZmZzID0gMDsKLWd1aW50MzIgKmV4cGl4MSA9IDA7ICAgICAgICAgICAgLyogcG9pbnRldXIgZXhwb3J0ZSB2ZXJzIHAxICovCi1ndWludDMyICpleHBpeDIgPSAwOyAgICAgICAgICAgIC8qIHBvaW50ZXVyIGV4cG9ydGUgdmVycyBwMiAqLwotZ3VpbnQzMiB6b29tX3dpZHRoOwotI2VuZGlmIC8qIEFTTSAqLwotCi0KLXN0YXRpYyBpbnQgZmlyc3RUaW1lID0gMTsKLXN0YXRpYyBpbnQgc2ludGFibGVbMHhmZmZmXTsKLQotWm9vbUZpbHRlckRhdGEgKgotem9vbUZpbHRlck5ldyAodm9pZCkKLXsKLSAgWm9vbUZpbHRlckRhdGEgKnpmID0gbWFsbG9jIChzaXplb2YgKFpvb21GaWx0ZXJEYXRhKSk7Ci0KLSAgemYtPnZpdGVzc2UgPSAxMjg7Ci0gIHpmLT5wZXJ0ZWRlYyA9IDg7Ci0gIHpmLT5zcXJ0cGVydGUgPSAxNjsKLSAgemYtPm1pZGRsZVggPSAxOwotICB6Zi0+bWlkZGxlWSA9IDE7Ci0gIHpmLT5yZXZlcnNlID0gMDsKLSAgemYtPm1vZGUgPSBXQVZFX01PREU7Ci0gIHpmLT5oUGxhbmVFZmZlY3QgPSAwOwotICB6Zi0+dlBsYW5lRWZmZWN0ID0gMDsKLSAgemYtPm5vaXNpZnkgPSAwOwotICB6Zi0+YnVmZnNpemUgPSAwOwotICB6Zi0+cmVzX3ggPSAwOwotICB6Zi0+cmVzX3kgPSAwOwotCi0gIHpmLT5idWZmZXIgPSBOVUxMOwotICB6Zi0+ZmlyZWRlYyA9IE5VTEw7Ci0KLSAgemYtPndhdmUgPSAwOwotICB6Zi0+d2F2ZXNwID0gMDsKLQotICByZXR1cm4gemY7Ci19Ci0KLS8qIHJldG91cm5lIHg+PnMgLCBlbiB0ZXN0YW50IGxlIHNpZ25lIGRlIHggKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1TaGlmdFJpZ2h0IChpbnQgeCwgY29uc3QgdW5zaWduZWQgY2hhciBzKQotewotICBpZiAoeCA8IDApCi0gICAgcmV0dXJuIC0oLXggPj4gcyk7Ci0gIGVsc2UKLSAgICByZXR1cm4geCA+PiBzOwotfQotCi0vKgotICBjYWxjdWxlciBweCBldCBweSBlbiBmb25jdGlvbiBkZSB4LHksbWlkZGxlWCxtaWRkbGVZIGV0IHRoZU1vZGUKLSAgcHggZXQgcHkgaW5kaXF1ZSBsYSBub3V2ZWxsZSBwb3NpdGlvbiAoZW4gc3FydHBlcnRlIGllbWUgZGUgcGl4ZWwpCi0gICh2YWxldXIgKiAxNikKLSovCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlUFhhbmRQWSAoR29vbURhdGEgKiBnZCwgaW50IHgsIGludCB5LCBpbnQgKnB4LCBpbnQgKnB5KQotewotICBab29tRmlsdGVyRGF0YSAqemYgPSBnZC0+emZkOwotICBpbnQgbWlkZGxlWCwgbWlkZGxlWTsKLSAgZ3VpbnQzMiByZXNvbHkgPSB6Zi0+cmVzX3k7Ci0gIGludCB2UGxhbmVFZmZlY3QgPSB6Zi0+dlBsYW5lRWZmZWN0OwotICBpbnQgaFBsYW5lRWZmZWN0ID0gemYtPmhQbGFuZUVmZmVjdDsKLSAgaW50IHZpdGVzc2UgPSB6Zi0+dml0ZXNzZTsKLSAgY2hhciB0aGVNb2RlID0gemYtPm1vZGU7Ci0KLSAgaWYgKHRoZU1vZGUgPT0gV0FURVJfTU9ERSkgewotICAgIGludCB3YXZlc3AgPSB6Zi0+d2F2ZXNwOwotICAgIGludCB3YXZlID0gemYtPndhdmU7Ci0gICAgaW50IHl5ID0geSArIFJBTkQgKGdkKSAlIDQgKyB3YXZlIC8gMTA7Ci0KLSAgICB5eSAtPSBSQU5EIChnZCkgJSA0OwotICAgIGlmICh5eSA8IDApCi0gICAgICB5eSA9IDA7Ci0gICAgaWYgKHl5ID49IHJlc29seSkKLSAgICAgIHl5ID0gcmVzb2x5IC0gMTsKLQotICAgICpweCA9ICh4IDw8IDQpICsgemYtPmZpcmVkZWNbeXldICsgKHdhdmUgLyAxMCk7Ci0gICAgKnB5ID0gKHkgPDwgNCkgKyAxMzIgLSAoKHZpdGVzc2UgPCAxMzIpID8gdml0ZXNzZSA6IDEzMSk7Ci0KLSAgICB3YXZlc3AgKz0gUkFORCAoZ2QpICUgMzsKLSAgICB3YXZlc3AgLT0gUkFORCAoZ2QpICUgMzsKLSAgICBpZiAod2F2ZSA8IC0xMCkKLSAgICAgIHdhdmVzcCArPSAyOwotICAgIGlmICh3YXZlID4gMTApCi0gICAgICB3YXZlc3AgLT0gMjsKLSAgICB3YXZlICs9ICh3YXZlc3AgLyAxMCkgKyBSQU5EIChnZCkgJSAzOwotICAgIHdhdmUgLT0gUkFORCAoZ2QpICUgMzsKLSAgICBpZiAod2F2ZXNwID4gMTAwKQotICAgICAgd2F2ZXNwID0gKHdhdmVzcCAqIDkpIC8gMTA7Ci0KLSAgICB6Zi0+d2F2ZXNwID0gd2F2ZXNwOwotICAgIHpmLT53YXZlID0gd2F2ZTsKLSAgfSBlbHNlIHsKLSAgICBpbnQgZGlzdDsKLSAgICByZWdpc3RlciBpbnQgdngsIHZ5OwotICAgIGludCBmdml0ZXNzZSA9IHZpdGVzc2UgPDwgNDsKLQotICAgIG1pZGRsZVggPSB6Zi0+bWlkZGxlWDsKLSAgICBtaWRkbGVZID0gemYtPm1pZGRsZVk7Ci0KLSAgICBpZiAoemYtPm5vaXNpZnkpIHsKLSAgICAgIHggKz0gUkFORCAoZ2QpICUgemYtPm5vaXNpZnk7Ci0gICAgICB4IC09IFJBTkQgKGdkKSAlIHpmLT5ub2lzaWZ5OwotICAgICAgeSArPSBSQU5EIChnZCkgJSB6Zi0+bm9pc2lmeTsKLSAgICAgIHkgLT0gUkFORCAoZ2QpICUgemYtPm5vaXNpZnk7Ci0gICAgfQotCi0gICAgaWYgKGhQbGFuZUVmZmVjdCkKLSAgICAgIHZ4ID0gKCh4IC0gbWlkZGxlWCkgPDwgOSkgKyBoUGxhbmVFZmZlY3QgKiAoeSAtIG1pZGRsZVkpOwotICAgIGVsc2UKLSAgICAgIHZ4ID0gKHggLSBtaWRkbGVYKSA8PCA5OwotCi0gICAgaWYgKHZQbGFuZUVmZmVjdCkKLSAgICAgIHZ5ID0gKCh5IC0gbWlkZGxlWSkgPDwgOSkgKyB2UGxhbmVFZmZlY3QgKiAoeCAtIG1pZGRsZVgpOwotICAgIGVsc2UKLSAgICAgIHZ5ID0gKHkgLSBtaWRkbGVZKSA8PCA5OwotCi0gICAgc3dpdGNoICh0aGVNb2RlKSB7Ci0gICAgICBjYXNlIFdBVkVfTU9ERToKLSAgICAgICAgZGlzdCA9Ci0gICAgICAgICAgICBTaGlmdFJpZ2h0ICh2eCwgOSkgKiBTaGlmdFJpZ2h0ICh2eCwgOSkgKyBTaGlmdFJpZ2h0ICh2eSwKLSAgICAgICAgICAgIDkpICogU2hpZnRSaWdodCAodnksIDkpOwotICAgICAgICBmdml0ZXNzZSAqPQotICAgICAgICAgICAgMTAyNCArCi0gICAgICAgICAgICBTaGlmdFJpZ2h0IChzaW50YWJsZVsodW5zaWduZWQgc2hvcnQpICgweGZmZmYgKiBkaXN0ICoKLSAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0RJU1RPUlMpXSwgNik7Ci0gICAgICAgIGZ2aXRlc3NlIC89IDEwMjQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDUllTVEFMX0JBTExfTU9ERToKLSAgICAgICAgZGlzdCA9Ci0gICAgICAgICAgICBTaGlmdFJpZ2h0ICh2eCwgOSkgKiBTaGlmdFJpZ2h0ICh2eCwgOSkgKyBTaGlmdFJpZ2h0ICh2eSwKLSAgICAgICAgICAgIDkpICogU2hpZnRSaWdodCAodnksIDkpOwotICAgICAgICBmdml0ZXNzZSArPSAoZGlzdCAqIEVGRkVDVF9ESVNUT1JTID4+IDEwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEFNVUxFVFRFX01PREU6Ci0gICAgICAgIGRpc3QgPQotICAgICAgICAgICAgU2hpZnRSaWdodCAodngsIDkpICogU2hpZnRSaWdodCAodngsIDkpICsgU2hpZnRSaWdodCAodnksCi0gICAgICAgICAgICA5KSAqIFNoaWZ0UmlnaHQgKHZ5LCA5KTsKLSAgICAgICAgZnZpdGVzc2UgLT0gKGRpc3QgKiBFRkZFQ1RfRElTVE9SUyA+PiA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNDUlVOQ0hfTU9ERToKLSAgICAgICAgZGlzdCA9Ci0gICAgICAgICAgICBTaGlmdFJpZ2h0ICh2eCwgOSkgKiBTaGlmdFJpZ2h0ICh2eCwgOSkgKyBTaGlmdFJpZ2h0ICh2eSwKLSAgICAgICAgICAgIDkpICogU2hpZnRSaWdodCAodnksIDkpOwotICAgICAgICBmdml0ZXNzZSAtPSAoZGlzdCAqIEVGRkVDVF9ESVNUT1JTID4+IDkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHZ4IDwgMCkKLSAgICAgICpweCA9IChtaWRkbGVYIDw8IDQpIC0gKC0odnggKiBmdml0ZXNzZSkgPj4gMTYpOwotICAgIGVsc2UKLSAgICAgICpweCA9IChtaWRkbGVYIDw8IDQpICsgKCh2eCAqIGZ2aXRlc3NlKSA+PiAxNik7Ci0gICAgaWYgKHZ5IDwgMCkKLSAgICAgICpweSA9IChtaWRkbGVZIDw8IDQpIC0gKC0odnkgKiBmdml0ZXNzZSkgPj4gMTYpOwotICAgIGVsc2UKLSAgICAgICpweSA9IChtaWRkbGVZIDw8IDQpICsgKCh2eSAqIGZ2aXRlc3NlKSA+PiAxNik7Ci0gIH0KLX0KLQotLyojZGVmaW5lIF9ERUJVRyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNldFBpeGVsUkdCIChVaW50ICogYnVmZmVyLCBVaW50IHgsIFVpbnQgeSwgQ29sb3IgYywKLSAgICBndWludDMyIHJlc29seCwgZ3VpbnQzMiByZXNvbHkpCi17Ci0vKiAgICAgICAgICAgICAgYnVmZmVyWyB5KldJRFRIICsgeCBdID0gKGMucjw8MTYpfChjLnY8PDgpfGMuYiAqLwotI2lmZGVmIF9ERUJVR19QSVhFTAotICBpZiAoeCArIHkgKiByZXNvbHggPj0gcmVzb2x4ICogcmVzb2x5KSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAic2V0UGl4ZWwgRVJST1IgOiBob3JzIGR1IHRhYmxlYXUuLi4gJWksICVpXG4iLCB4LCB5KTsKLSAgICAvKmV4aXQgKDEpIDsgKi8KLSAgfQotI2VuZGlmCi0KLSNpZmRlZiBVU0VfREdBCi0gIGJ1ZmZlclt5ICogcmVzb2x4ICsgeF0gPSAoYy5iIDw8IDE2KSB8IChjLnYgPDwgOCkgfCBjLnI7Ci0jZWxzZQotICBidWZmZXJbeSAqIHJlc29seCArIHhdID0gKGMuciA8PCAxNikgfCAoYy52IDw8IDgpIHwgYy5iOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkCi1zZXRQaXhlbFJHQl8gKFVpbnQgKiBidWZmZXIsIFVpbnQgeCwgQ29sb3IgYywgZ3VpbnQzMiByZXNvbHgsIGd1aW50MzIgcmVzb2x5KQotewotI2lmZGVmIF9ERUJVRwotICBpZiAoeCA+PSByZXNvbHggKiByZXNvbHkpIHsKLSAgICBwcmludGYgKCJzZXRQaXhlbCBFUlJPUiA6IGhvcnMgZHUgdGFibGVhdS4uLiAlaSA+PSAlaSolaSAoJWkpXG4iLCB4LCByZXNvbHgsCi0gICAgICAgIHJlc29seSwgcmVzb2x4ICogcmVzb2x5KTsKLSAgICBleGl0ICgxKTsKLSAgfQotI2VuZGlmCi0KLSNpZmRlZiBVU0VfREdBCi0gIGJ1ZmZlclt4XSA9IChjLmIgPDwgMTYpIHwgKGMudiA8PCA4KSB8IGMucjsKLSNlbHNlCi0gIGJ1ZmZlclt4XSA9IChjLnIgPDwgMTYpIHwgKGMudiA8PCA4KSB8IGMuYjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdldFBpeGVsUkdCXyAoVWludCAqIGJ1ZmZlciwgVWludCB4LCBDb2xvciAqIGMsIGd1aW50MzIgcmVzb2x4LCBndWludDMyIHJlc29seSkKLXsKLSAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqdG1wODsKLQotI2lmZGVmIF9ERUJVRwotICBpZiAoeCA+PSByZXNvbHggKiByZXNvbHkpIHsKLSAgICBwcmludGYgKCJnZXRQaXhlbCBFUlJPUiA6IGhvcnMgZHUgdGFibGVhdS4uLiAlaVxuIiwgeCk7Ci0gICAgZXhpdCAoMSk7Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgX19CSUdfRU5ESUFOX18KLSAgYy0+YiA9ICoodW5zaWduZWQgY2hhciAqKSAodG1wOCA9ICh1bnNpZ25lZCBjaGFyICopIChidWZmZXIgKyB4KSk7Ci0gIGMtPnIgPSAqKHVuc2lnbmVkIGNoYXIgKikgKCsrdG1wOCk7Ci0gIGMtPnYgPSAqKHVuc2lnbmVkIGNoYXIgKikgKCsrdG1wOCk7Ci0gIGMtPmIgPSAqKHVuc2lnbmVkIGNoYXIgKikgKCsrdG1wOCk7Ci0KLSNlbHNlCi0gIC8qIEFUVEVOVElPTiBBVSBQRVRJVCBJTkRJRU4gICovCi0gIHRtcDggPSAodW5zaWduZWQgY2hhciAqKSAoYnVmZmVyICsgeCk7Ci0gIGMtPmIgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHRtcDgrKyk7Ci0gIGMtPnYgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHRtcDgrKyk7Ci0gIGMtPnIgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHRtcDgpOwotLyogICAgICAqYyA9IChDb2xvcikgYnVmZmVyW3greSpXSURUSF0gOyAqLwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi16b29tRmlsdGVyU2V0UmVzb2x1dGlvbiAoR29vbURhdGEgKiBnZCwgWm9vbUZpbHRlckRhdGEgKiB6ZikKLXsKLSAgdW5zaWduZWQgc2hvcnQgdXM7Ci0KLSAgaWYgKHpmLT5idWZmc2l6ZSA+PSBnZC0+YnVmZnNpemUpIHsKLSAgICB6Zi0+cmVzX3ggPSBnZC0+cmVzb2x4OwotICAgIHpmLT5yZXNfeSA9IGdkLT5yZXNvbHk7Ci0gICAgemYtPm1pZGRsZVggPSBnZC0+cmVzb2x4IC8gMjsKLSAgICB6Zi0+bWlkZGxlWSA9IGdkLT5yZXNvbHkgLSAxOwotCi0gICAgcmV0dXJuOwotICB9Ci0jaWZuZGVmIFVTRV9BU00KLSAgaWYgKHpmLT5idWZmZXIpCi0gICAgZnJlZSAoemYtPmJ1ZmZlcik7Ci0gIHpmLT5idWZmZXIgPSAwOwotI2Vsc2UKLSAgaWYgKGNvZWZmcykKLSAgICBmcmVlIChmcmVlY29lZmZzKTsKLSAgY29lZmZzID0gMDsKLSNlbmRpZgotICB6Zi0+bWlkZGxlWCA9IGdkLT5yZXNvbHggLyAyOwotICB6Zi0+bWlkZGxlWSA9IGdkLT5yZXNvbHkgLSAxOwotICB6Zi0+cmVzX3ggPSBnZC0+cmVzb2x4OwotICB6Zi0+cmVzX3kgPSBnZC0+cmVzb2x5OwotCi0gIGlmICh6Zi0+ZmlyZWRlYykKLSAgICBmcmVlICh6Zi0+ZmlyZWRlYyk7Ci0gIHpmLT5maXJlZGVjID0gMDsKLQotICB6Zi0+YnVmZnNpemUgPSBnZC0+cmVzb2x4ICogZ2QtPnJlc29seSAqIHNpemVvZiAodW5zaWduZWQgaW50KTsKLQotI2lmZGVmIFVTRV9BU00KLSAgZnJlZWNvZWZmcyA9ICh1bnNpZ25lZCBpbnQgKikKLSAgICAgIG1hbGxvYyAocmVzeCAqIHJlc3kgKiAyICogc2l6ZW9mICh1bnNpZ25lZCBpbnQpICsgMTI4KTsKLSAgY29lZmZzID0gKGd1aW50MzIgKikgKCgxICsgKCh1bnNpZ25lZCBpbnQpIChmcmVlY29lZmZzKSkgLyAxMjgpICogMTI4KTsKLQotI2Vsc2UKLSAgemYtPmJ1ZmZlciA9IGNhbGxvYyAoc2l6ZW9mIChndWludDMyKSwgemYtPmJ1ZmZzaXplICogNSk7Ci0gIHpmLT5wb3MxMCA9IHpmLT5idWZmZXI7Ci0gIHpmLT5jWzBdID0gemYtPnBvczEwICsgemYtPmJ1ZmZzaXplOwotICB6Zi0+Y1sxXSA9IHpmLT5jWzBdICsgemYtPmJ1ZmZzaXplOwotICB6Zi0+Y1syXSA9IHpmLT5jWzFdICsgemYtPmJ1ZmZzaXplOwotICB6Zi0+Y1szXSA9IHpmLT5jWzJdICsgemYtPmJ1ZmZzaXplOwotI2VuZGlmCi0gIHpmLT5maXJlZGVjID0gKGludCAqKSBtYWxsb2MgKHpmLT5yZXNfeSAqIHNpemVvZiAoaW50KSk7Ci0KLSAgaWYgKGZpcnN0VGltZSkgewotICAgIGZpcnN0VGltZSA9IDA7Ci0KLSAgICAvKiBnZW5lcmF0aW9uIGQndW5lIHRhYmxlIGRlIHNpbnVzICovCi0gICAgZm9yICh1cyA9IDA7IHVzIDwgMHhmZmZmOyB1cysrKSB7Ci0gICAgICBzaW50YWJsZVt1c10gPSAoaW50KSAoMTAyNC4wZiAqIHNpbiAodXMgKiAyICogMy4zMTQxNWYgLyAweGZmZmYpKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZAotem9vbUZpbHRlckRlc3Ryb3kgKFpvb21GaWx0ZXJEYXRhICogemYpCi17Ci0gIGlmICh6ZikgewotICAgIGlmICh6Zi0+ZmlyZWRlYykKLSAgICAgIGZyZWUgKHpmLT5maXJlZGVjKTsKLSAgICBpZiAoemYtPmJ1ZmZlcikKLSAgICAgIGZyZWUgKHpmLT5idWZmZXIpOwotICAgIGZyZWUgKHpmKTsKLSAgfQotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi12b2lkCi16b29tRmlsdGVyRmFzdFJHQiAoR29vbURhdGEgKiBnb29tZGF0YSwgWm9vbUZpbHRlckRhdGEgKiB6ZiwgaW50IHpmZF91cGRhdGUpCi17Ci0gIGd1aW50MzIgcHJldlggPSBnb29tZGF0YS0+cmVzb2x4OwotICBndWludDMyIHByZXZZID0gZ29vbWRhdGEtPnJlc29seTsKLQotICBndWludDMyICpwaXgxID0gZ29vbWRhdGEtPnAxOwotICBndWludDMyICpwaXgyID0gZ29vbWRhdGEtPnAyOwotICB1bnNpZ25lZCBpbnQgKnBvczEwOwotICB1bnNpZ25lZCBpbnQgKipjOwotCi0gIFVpbnQgeCwgeTsKLQotLyogIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHJldlggPSAwLCBwcmV2WSA9IDA7ICovCi0KLSNpZmRlZiBVU0VfQVNNCi0gIGV4cGl4MSA9IHBpeDE7Ci0gIGV4cGl4MiA9IHBpeDI7Ci0jZWxzZQotICBDb2xvciBjb3VsZXVyOwotICBDb2xvciBjb2wxLCBjb2wyLCBjb2wzLCBjb2w0OwotICBVaW50IHBvc2l0aW9uOwotI2VuZGlmCi0KLSAgaWYgKChnb29tZGF0YS0+cmVzb2x4ICE9IHpmLT5yZXNfeCkgfHwgKGdvb21kYXRhLT5yZXNvbHkgIT0gemYtPnJlc195KSkgewotICAgIHpvb21GaWx0ZXJTZXRSZXNvbHV0aW9uIChnb29tZGF0YSwgemYpOwotICB9Ci0KLSAgcG9zMTAgPSB6Zi0+cG9zMTA7Ci0gIGMgPSB6Zi0+YzsKLQotICBpZiAoemZkX3VwZGF0ZSkgewotICAgIGd1Y2hhciBzcXJ0cGVydGUgPSB6Zi0+c3FydHBlcnRlOwotICAgIGdpbnQgc3RhcnRfeSA9IDA7Ci0KLSAgICBpZiAoemYtPnJldmVyc2UpCi0gICAgICB6Zi0+dml0ZXNzZSA9IDI1NiAtIHpmLT52aXRlc3NlOwotCi0gICAgLyogZ2VuZXJhdGlvbiBkdSBidWZmZXIgKi8KLSAgICBmb3IgKHkgPSAwOyB5IDwgemYtPnJlc195OyB5KyspIHsKLSAgICAgIGdpbnQgeV8xNiA9IHkgPDwgNDsKLSAgICAgIGdpbnQgbWF4X3B4ID0gKHByZXZYIC0gMSkgKiBzcXJ0cGVydGU7Ci0gICAgICBnaW50IG1heF9weSA9IChwcmV2WSAtIDEpICogc3FydHBlcnRlOwotCi0gICAgICBmb3IgKHggPSAwOyB4IDwgemYtPnJlc194OyB4KyspIHsKLSAgICAgICAgZ2ludCBweCwgcHk7Ci0gICAgICAgIGd1Y2hhciBjb2VmdiwgY29lZmg7Ci0KLSAgICAgICAgLyogY2FsY3VsZXIgcHggZXQgcHkgZW4gZm9uY3Rpb24gZGUgKi8KLSAgICAgICAgLyogICB4LHksbWlkZGxlWCxtaWRkbGVZIGV0IHRoZU1vZGUgKi8KLSAgICAgICAgY2FsY3VsYXRlUFhhbmRQWSAoZ29vbWRhdGEsIHgsIHksICZweCwgJnB5KTsKLQotICAgICAgICBpZiAoKHB4ID09IHggPDwgNCkgJiYgKHB5ID09IHlfMTYpKQotICAgICAgICAgIHB5ICs9IDg7Ci0KLSAgICAgICAgaWYgKChweSA8IDApIHx8IChweCA8IDApIHx8IChweSA+PSBtYXhfcHkpIHx8IChweCA+PSBtYXhfcHgpKSB7Ci0jaWZkZWYgVVNFX0FTTQotICAgICAgICAgIGNvZWZmc1soeSAqIHByZXZYICsgeCkgKiAyXSA9IDA7Ci0gICAgICAgICAgY29lZmZzWyh5ICogcHJldlggKyB4KSAqIDIgKyAxXSA9IDA7Ci0jZWxzZQotICAgICAgICAgIHBvczEwW3N0YXJ0X3kgKyB4XSA9IDA7Ci0gICAgICAgICAgY1swXVtzdGFydF95ICsgeF0gPSAwOwotICAgICAgICAgIGNbMV1bc3RhcnRfeSArIHhdID0gMDsKLSAgICAgICAgICBjWzJdW3N0YXJ0X3kgKyB4XSA9IDA7Ci0gICAgICAgICAgY1szXVtzdGFydF95ICsgeF0gPSAwOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaW50IG5weDEwOwotICAgICAgICAgIGludCBucHkxMDsKLSAgICAgICAgICBpbnQgcG9zOwotCi0gICAgICAgICAgbnB4MTAgPSAocHggLyBzcXJ0cGVydGUpOwotICAgICAgICAgIG5weTEwID0gKHB5IC8gc3FydHBlcnRlKTsKLQotLyogICAgICAgICAgICAgICAgICAgICAgICBpZiAobnB4MTAgPj0gcHJldlgpIGZwcmludGYoc3RkZXJyLCJlcnJvciBucHg6JWQiLG5weDEwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5weTEwID49IHByZXZZKSBmcHJpbnRmKHN0ZGVyciwiZXJyb3IgbnB5OiVkIixucHkxMCk7Ci0qLwotICAgICAgICAgIGNvZWZoID0gcHggJSBzcXJ0cGVydGU7Ci0gICAgICAgICAgY29lZnYgPSBweSAlIHNxcnRwZXJ0ZTsKLSNpZmRlZiBVU0VfQVNNCi0gICAgICAgICAgcG9zID0gKHkgKiBwcmV2WCArIHgpICogMjsKLSAgICAgICAgICBjb2VmZnNbcG9zXSA9IChucHgxMCArIHByZXZYICogbnB5MTApICogNDsKLQotICAgICAgICAgIGlmICghKGNvZWZoIHx8IGNvZWZ2KSkKLSAgICAgICAgICAgIGNvZWZmc1twb3MgKyAxXSA9IChzcXJ0cGVydGUgKiBzcXJ0cGVydGUgLSAxKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2VmZnNbcG9zICsgMV0gPSAoKHNxcnRwZXJ0ZSAtIGNvZWZoKSAqIChzcXJ0cGVydGUgLSBjb2VmdikpOwotCi0gICAgICAgICAgY29lZmZzW3BvcyArIDFdIHw9IChjb2VmaCAqIChzcXJ0cGVydGUgLSBjb2VmdikpIDw8IDg7Ci0gICAgICAgICAgY29lZmZzW3BvcyArIDFdIHw9ICgoc3FydHBlcnRlIC0gY29lZmgpICogY29lZnYpIDw8IDE2OwotICAgICAgICAgIGNvZWZmc1twb3MgKyAxXSB8PSAoY29lZmggKiBjb2VmdikgPDwgMjQ7Ci0jZWxzZQotICAgICAgICAgIHBvcyA9IHN0YXJ0X3kgKyB4OwotICAgICAgICAgIHBvczEwW3Bvc10gPSBucHgxMCArIHByZXZYICogbnB5MTA7Ci0KLSAgICAgICAgICBpZiAoIShjb2VmaCB8fCBjb2VmdikpCi0gICAgICAgICAgICBjWzBdW3Bvc10gPSBzcXJ0cGVydGUgKiBzcXJ0cGVydGUgLSAxOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNbMF1bcG9zXSA9IChzcXJ0cGVydGUgLSBjb2VmaCkgKiAoc3FydHBlcnRlIC0gY29lZnYpOwotCi0gICAgICAgICAgY1sxXVtwb3NdID0gY29lZmggKiAoc3FydHBlcnRlIC0gY29lZnYpOwotICAgICAgICAgIGNbMl1bcG9zXSA9IChzcXJ0cGVydGUgLSBjb2VmaCkgKiBjb2VmdjsKLSAgICAgICAgICBjWzNdW3Bvc10gPSBjb2VmaCAqIGNvZWZ2OwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEFkdmFuY2Ugc3RhcnQgb2YgbGluZSBpbmRleCAqLwotICAgICAgc3RhcnRfeSArPSBwcmV2WDsKLSAgICB9Ci0gIH0KLSNpZmRlZiBVU0VfQVNNCi0jaWZkZWYgTU1YCi0gIHpvb21fd2lkdGggPSBwcmV2WDsKLSAgbW14X3pvb21fc2l6ZSA9IHByZXZYICogcHJldlk7Ci0gIG1teF96b29tICgpOwotI2VuZGlmCi0KLSNpZmRlZiBQT1dFUlBDCi0gIHpvb21fd2lkdGggPSBwcmV2WDsKLSAgaWYgKHVzZUFsdGl2ZWMpIHsKLSAgICBwcGNzaXplNCA9ICgodW5zaWduZWQgaW50KSAocHJldlggKiBwcmV2WSkpIC8gNDsKLSAgICBwcGNfem9vbV9hbHRpdmVjICgpOwotICB9IGVsc2UgewotICAgIHBwY3NpemU0ID0gKCh1bnNpZ25lZCBpbnQpIChwcmV2WCAqIHByZXZZKSk7Ci0gICAgcHBjX3pvb20gKCk7Ci0gIH0KLSNlbmRpZgotI2Vsc2UKLSAgZm9yIChwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcHJldlggKiBwcmV2WTsgcG9zaXRpb24rKykgewotICAgIGdldFBpeGVsUkdCXyAocGl4MSwgcG9zMTBbcG9zaXRpb25dLCAmY29sMSwgZ29vbWRhdGEtPnJlc29seCwKLSAgICAgICAgZ29vbWRhdGEtPnJlc29seSk7Ci0gICAgZ2V0UGl4ZWxSR0JfIChwaXgxLCBwb3MxMFtwb3NpdGlvbl0gKyAxLCAmY29sMiwgZ29vbWRhdGEtPnJlc29seCwKLSAgICAgICAgZ29vbWRhdGEtPnJlc29seSk7Ci0gICAgZ2V0UGl4ZWxSR0JfIChwaXgxLCBwb3MxMFtwb3NpdGlvbl0gKyBwcmV2WCwgJmNvbDMsIGdvb21kYXRhLT5yZXNvbHgsCi0gICAgICAgIGdvb21kYXRhLT5yZXNvbHkpOwotICAgIGdldFBpeGVsUkdCXyAocGl4MSwgcG9zMTBbcG9zaXRpb25dICsgcHJldlggKyAxLCAmY29sNCwgZ29vbWRhdGEtPnJlc29seCwKLSAgICAgICAgZ29vbWRhdGEtPnJlc29seSk7Ci0KLSAgICBjb3VsZXVyLnIgPSBjb2wxLnIgKiBjWzBdW3Bvc2l0aW9uXQotICAgICAgICArIGNvbDIuciAqIGNbMV1bcG9zaXRpb25dCi0gICAgICAgICsgY29sMy5yICogY1syXVtwb3NpdGlvbl0KLSAgICAgICAgKyBjb2w0LnIgKiBjWzNdW3Bvc2l0aW9uXTsKLSAgICBjb3VsZXVyLnIgPj49IHpmLT5wZXJ0ZWRlYzsKLQotICAgIGNvdWxldXIudiA9IGNvbDEudiAqIGNbMF1bcG9zaXRpb25dCi0gICAgICAgICsgY29sMi52ICogY1sxXVtwb3NpdGlvbl0KLSAgICAgICAgKyBjb2wzLnYgKiBjWzJdW3Bvc2l0aW9uXQotICAgICAgICArIGNvbDQudiAqIGNbM11bcG9zaXRpb25dOwotICAgIGNvdWxldXIudiA+Pj0gemYtPnBlcnRlZGVjOwotCi0gICAgY291bGV1ci5iID0gY29sMS5iICogY1swXVtwb3NpdGlvbl0KLSAgICAgICAgKyBjb2wyLmIgKiBjWzFdW3Bvc2l0aW9uXQotICAgICAgICArIGNvbDMuYiAqIGNbMl1bcG9zaXRpb25dCi0gICAgICAgICsgY29sNC5iICogY1szXVtwb3NpdGlvbl07Ci0gICAgY291bGV1ci5iID4+PSB6Zi0+cGVydGVkZWM7Ci0KLSAgICBzZXRQaXhlbFJHQl8gKHBpeDIsIHBvc2l0aW9uLCBjb3VsZXVyLCBnb29tZGF0YS0+cmVzb2x4LCBnb29tZGF0YS0+cmVzb2x5KTsKLSAgfQotI2VuZGlmCi19Ci0KLQotdm9pZAotcG9pbnRGaWx0ZXIgKEdvb21EYXRhICogZ29vbWRhdGEsIENvbG9yIGMsCi0gICAgZmxvYXQgdDEsIGZsb2F0IHQyLCBmbG9hdCB0MywgZmxvYXQgdDQsIFVpbnQgY3ljbGUpCi17Ci0gIFVpbnQgKnBpeDEgPSBnb29tZGF0YS0+cDE7Ci0gIFpvb21GaWx0ZXJEYXRhICp6ZiA9IGdvb21kYXRhLT56ZmQ7Ci0gIFVpbnQgeCA9IChVaW50KSAoemYtPm1pZGRsZVggKyAoaW50KSAodDEgKiBjb3MgKChmbG9hdCkgY3ljbGUgLyB0MykpKTsKLSAgVWludCB5ID0gKFVpbnQpICh6Zi0+bWlkZGxlWSArIChpbnQpICh0MiAqIHNpbiAoKGZsb2F0KSBjeWNsZSAvIHQ0KSkpOwotCi0gIGlmICgoeCA+IDEpICYmICh5ID4gMSkgJiYgKHggPCBnb29tZGF0YS0+cmVzb2x4IC0gMikKLSAgICAgICYmICh5IDwgZ29vbWRhdGEtPnJlc29seSAtIDIpKSB7Ci0gICAgc2V0UGl4ZWxSR0IgKHBpeDEsIHggKyAxLCB5LCBjLCBnb29tZGF0YS0+cmVzb2x4LCBnb29tZGF0YS0+cmVzb2x5KTsKLSAgICBzZXRQaXhlbFJHQiAocGl4MSwgeCwgeSArIDEsIGMsIGdvb21kYXRhLT5yZXNvbHgsIGdvb21kYXRhLT5yZXNvbHkpOwotICAgIHNldFBpeGVsUkdCIChwaXgxLCB4ICsgMSwgeSArIDEsIFdISVRFLCBnb29tZGF0YS0+cmVzb2x4LCBnb29tZGF0YS0+cmVzb2x5KTsKLSAgICBzZXRQaXhlbFJHQiAocGl4MSwgeCArIDIsIHkgKyAxLCBjLCBnb29tZGF0YS0+cmVzb2x4LCBnb29tZGF0YS0+cmVzb2x5KTsKLSAgICBzZXRQaXhlbFJHQiAocGl4MSwgeCArIDEsIHkgKyAyLCBjLCBnb29tZGF0YS0+cmVzb2x4LCBnb29tZGF0YS0+cmVzb2x5KTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20yazEvZmlsdGVycy5oIGIvZ3N0L2dvb20yazEvZmlsdGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzZmNjJlLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tMmsxL2ZpbHRlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLSNpZm5kZWYgRklMVEVSU19ICi0jZGVmaW5lIEZJTFRFUlNfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSAiZ3JhcGhpYy5oIgotI2luY2x1ZGUgImdvb21fY29yZS5oIgotCi0jZGVmaW5lIE5PUk1BTF9NT0RFIDAKLSNkZWZpbmUgV0FWRV9NT0RFIDEKLSNkZWZpbmUgQ1JZU1RBTF9CQUxMX01PREUgMgotI2RlZmluZSBTQ1JVTkNIX01PREUgMwotI2RlZmluZSBBTVVMRVRURV9NT0RFIDQKLSNkZWZpbmUgV0FURVJfTU9ERSA1Ci0KLXN0cnVjdCBab29tRmlsdGVyRGF0YQotewotICBpbnQgdml0ZXNzZTsKLSAgdW5zaWduZWQgY2hhciBwZXJ0ZWRlYzsKLSAgdW5zaWduZWQgY2hhciBzcXJ0cGVydGU7Ci0gIGludCBtaWRkbGVYOwotICBpbnQgbWlkZGxlWTsKLSAgY2hhciByZXZlcnNlOwotICBjaGFyIG1vZGU7Ci0gICAgICAgIC8qKiBAc2luY2UgSnVuZSAyMDAxICovCi0gIGludCBoUGxhbmVFZmZlY3Q7Ci0gIGludCB2UGxhbmVFZmZlY3Q7Ci0gIGNoYXIgbm9pc2lmeTsKLQotICBndWludDMyIHJlc194OwotICBndWludDMyIHJlc195OwotICBndWludDMyIGJ1ZmZzaXplOwotCi0gIGd1aW50MzIgKmJ1ZmZlcjsKLSAgZ3VpbnQzMiAqcG9zMTA7Ci0gIGd1aW50MzIgKmNbNF07Ci0gIGludCAgICAgKmZpcmVkZWM7Ci0KLSAgaW50ICAgICB3YXZlOwotICBpbnQgICAgIHdhdmVzcDsKLX07Ci0KLXZvaWQgcG9pbnRGaWx0ZXIoR29vbURhdGEgKmdvb21kYXRhLCBDb2xvciBjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdDEsIGZsb2F0IHQyLCBmbG9hdCB0MywgZmxvYXQgdDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIGN5Y2xlKTsKLQotLyogZmlsdHJlIGRlIHpvb20gOgotIGxlIGNvbnRlbnUgZGUgcGl4MSBlc3QgY29waWUgZGFucyBwaXgyLCBhdmVjIGwnZWZmZXQgYXBwbGlxdekKLSBtaWR4IGV0IG1pZHkgcmVwcmVzZW50ZSBsZSBjZW50cmUgZHUgem9vbQotCi12b2lkIHpvb21GaWx0ZXIoVWludCAqcGl4MSwgVWludCAqcGl4MiwgVWludCBtaWRkbGVYLCBVaW50IG1pZGRsZVkpOwotdm9pZCB6b29tRmlsdGVyUkdCKFVpbnQgKnBpeDEsCi1VaW50ICpwaXgyLAotVWludCBtaWRkbGVYLAotVWludCBtaWRkbGVZKTsKLSovCi0KLVpvb21GaWx0ZXJEYXRhICp6b29tRmlsdGVyTmV3ICh2b2lkKTsKLXZvaWQgem9vbUZpbHRlckRlc3Ryb3kgKFpvb21GaWx0ZXJEYXRhICp6Zik7Ci12b2lkIHpvb21GaWx0ZXJGYXN0UkdCIChHb29tRGF0YSAqZ29vbWRhdGEsIFpvb21GaWx0ZXJEYXRhICp6ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB6ZmRfdXBkYXRlKTsKLQotLyogZmlsdHJlIHNpbiA6Ci0gbGUgY29udGVudSBkZSBwaXgxIGVzdCBjb3BpZSBkYW5zIHBpeDIsIGF2ZWMgbCdlZmZldCBhcHBsaXF16QotIGN5Y2xlIGVzdCBsYSB2YXJpYWJsZSBkZSB0ZW1wcy4KLSBtb2RlIHZhdXQgU0lOX01VTCBvdSBTSU5fQURECi0gcmF0ZSBlc3QgbGUgcG91cmNlbnRhZ2UgZGUgbCdlZmZldCBhcHBsaXF16QotIGxlbmdodCA6IGxhIGxvbmd1ZXVyIGQnb25kZSAoMS4uMTApIFs1XQotIHNwZWVkIDogbGEgdml0ZXNzZSAoMS4uMTAwKSBbMTBdCi0qLwotLyoKLXZvaWQgc2luRmlsdGVyKFVpbnQgKnBpeDEsVWludCAqcGl4MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQgY3ljbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50IG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50IHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGxlbmdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQgc3BlZWQpOwotKi8KLQotI2RlZmluZSBTSU5fTVVMIDEKLSNkZWZpbmUgU0lOX0FERCAyCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20yazEvZ29vbV9jb3JlLmMgYi9nc3QvZ29vbTJrMS9nb29tX2NvcmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU4OTNmNC4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbTJrMS9nb29tX2NvcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDQxMSArMCwwIEBACi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ29vbV9jb3JlLmgiCi0jaW5jbHVkZSAiZ29vbV90b29scy5oIgotI2luY2x1ZGUgImZpbHRlcnMuaCIKLSNpbmNsdWRlICJsaW5lcy5oIgotCi0vKiNkZWZpbmUgVkVSQk9TRSAqLwotCi0jaWZkZWYgVkVSQk9TRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBTVE9QX1NQRUVEIDEyOAotCi12b2lkCi1nb29tX2luaXQgKEdvb21EYXRhICogZ29vbWRhdGEsIGd1aW50MzIgcmVzeCwgZ3VpbnQzMiByZXN5KQotewotI2lmZGVmIFZFUkJPU0UKLSAgcHJpbnRmICgiR09PTTogaW5pdCAoJWQsICVkKTtcbiIsIHJlc3gsIHJlc3kpOwotI2VuZGlmCi0gIGdvb21kYXRhLT5yZXNvbHggPSAwOwotICBnb29tZGF0YS0+cmVzb2x5ID0gMDsKLSAgZ29vbWRhdGEtPmJ1ZmZzaXplID0gMDsKLQotICBnb29tZGF0YS0+cGl4ZWwgPSBOVUxMOwotICBnb29tZGF0YS0+YmFjayA9IE5VTEw7Ci0gIGdvb21kYXRhLT5wMSA9IE5VTEw7Ci0gIGdvb21kYXRhLT5wMiA9IE5VTEw7Ci0KLSAgZ29vbV9zZXRfcmVzb2x1dGlvbiAoZ29vbWRhdGEsIHJlc3gsIHJlc3kpOwotICBSQU5EX0lOSVQgKGdvb21kYXRhLCBHUE9JTlRFUl9UT19JTlQgKGdvb21kYXRhLT5waXhlbCkpOwotICBnb29tZGF0YS0+Y3ljbGUgPSAwOwotCi0KLSAgZ29vbWRhdGEtPmdvb21saW1pdCA9IDI7ICAgICAgLyogc2Vuc2liaWxpdOkgZHUgZ29vbSAqLwotICBnb29tZGF0YS0+emZkID0gem9vbUZpbHRlck5ldyAoKTsKLSAgZ29vbWRhdGEtPmxvY2t2YXIgPSAwOyAgICAgICAgLyogcG91ciBlbXBlY2hlciBkZSBub3V2ZWF1eCBjaGFuZ2VtZW50cyAqLwotICBnb29tZGF0YS0+Z29vbXZhciA9IDA7ICAgICAgICAvKiBib3VjbGUgZGVzIGdvb21zICovCi0gIGdvb21kYXRhLT50b3RhbGdvb20gPSAwOyAgICAgIC8qIG5vbWJyZSBkZSBnb29tcyBwYXIgc2Vjb25kcyAqLwotICBnb29tZGF0YS0+YWdvb20gPSAwOyAgICAgICAgICAvKiB1biBnb29tIGEgZXUgbGlldS4uICAgICAgICovCi0gIGdvb21kYXRhLT5sb29wdmFyID0gMDsgICAgICAgIC8qIG1vdXZlbWVudCBkZXMgcG9pbnRzICovCi0gIGdvb21kYXRhLT5zcGVlZHZhciA9IDA7ICAgICAgIC8qIHZpdGVzc2UgZGVzIHBhcnRpY3VsZXMgKi8KLSAgZ29vbWRhdGEtPmxpbmVNb2RlID0gMDsgICAgICAgLyogbCdlZmZldCBsaW5lYWlyZSBhIGRlc3NpbmVyICovCi19Ci0KLXZvaWQKLWdvb21fc2V0X3Jlc29sdXRpb24gKEdvb21EYXRhICogZ29vbWRhdGEsIGd1aW50MzIgcmVzeCwgZ3VpbnQzMiByZXN5KQotewotICBndWludDMyIGJ1ZmZzaXplID0gcmVzeCAqIHJlc3k7Ci0KLSAgaWYgKChnb29tZGF0YS0+cmVzb2x4ID09IHJlc3gpICYmIChnb29tZGF0YS0+cmVzb2x5ID09IHJlc3kpKQotICAgIHJldHVybjsKLQotICBpZiAoZ29vbWRhdGEtPmJ1ZmZzaXplIDwgYnVmZnNpemUpIHsKLSAgICBpZiAoZ29vbWRhdGEtPnBpeGVsKQotICAgICAgZnJlZSAoZ29vbWRhdGEtPnBpeGVsKTsKLSAgICBpZiAoZ29vbWRhdGEtPmJhY2spCi0gICAgICBmcmVlIChnb29tZGF0YS0+YmFjayk7Ci0gICAgZ29vbWRhdGEtPnBpeGVsID0gKGd1aW50MzIgKikgbWFsbG9jIChidWZmc2l6ZSAqIHNpemVvZiAoZ3VpbnQzMikgKyAxMjgpOwotICAgIGdvb21kYXRhLT5iYWNrID0gKGd1aW50MzIgKikgbWFsbG9jIChidWZmc2l6ZSAqIHNpemVvZiAoZ3VpbnQzMikgKyAxMjgpOwotICAgIGdvb21kYXRhLT5idWZmc2l6ZSA9IGJ1ZmZzaXplOwotCi0gICAgZ29vbWRhdGEtPnAxID0gKHZvaWQgKikgKCgoZ3VpbnRwdHIpIGdvb21kYXRhLT5waXhlbCArIDB4N2YpICYgKH4weDdmKSk7Ci0gICAgZ29vbWRhdGEtPnAyID0gKHZvaWQgKikgKCgoZ3VpbnRwdHIpIGdvb21kYXRhLT5iYWNrICsgMHg3ZikgJiAofjB4N2YpKTsKLSAgfQotCi0gIGdvb21kYXRhLT5yZXNvbHggPSByZXN4OwotICBnb29tZGF0YS0+cmVzb2x5ID0gcmVzeTsKLQotICBtZW1zZXQgKGdvb21kYXRhLT5waXhlbCwgMCwgYnVmZnNpemUgKiBzaXplb2YgKGd1aW50MzIpICsgMTI4KTsKLSAgbWVtc2V0IChnb29tZGF0YS0+YmFjaywgMCwgYnVmZnNpemUgKiBzaXplb2YgKGd1aW50MzIpICsgMTI4KTsKLX0KLQotZ3VpbnQzMiAqCi1nb29tX3VwZGF0ZSAoR29vbURhdGEgKiBnb29tZGF0YSwgZ2ludDE2IGRhdGFbMl1bNTEyXSkKLXsKLSAgZ3VpbnQzMiAqcmV0dXJuX3ZhbDsKLSAgZ3VpbnQzMiBwb2ludFdpZHRoOwotICBndWludDMyIHBvaW50SGVpZ2h0OwotICBpbnQgaW5jdmFyOyAgICAgICAgICAgICAgICAgICAvKiB2b2x1bWUgZHUgc29uICovCi0gIGludCBhY2NlbHZhcjsgICAgICAgICAgICAgICAgIC8qIGFjY2VsZXJhdGlvbiBkZXMgcGFydGljdWxlcyAqLwotICBpbnQgaTsKLSAgZmxvYXQgbGFyZ2ZhY3RvcjsgICAgICAgICAgICAgLyogZWxhcmdpc3NlbWVudCBkZSBsJ2ludGVydmFsbGUgZCfpdm9sdXRpb24gZGVzIHBvaW50cyAqLwotICBpbnQgemZkX3VwZGF0ZSA9IDA7Ci0gIGludCByZXNvbHggPSBnb29tZGF0YS0+cmVzb2x4OwotICBpbnQgcmVzb2x5ID0gZ29vbWRhdGEtPnJlc29seTsKLSAgWm9vbUZpbHRlckRhdGEgKnB6ZmQgPSBnb29tZGF0YS0+emZkOwotICBndWludDMyICp0bXA7Ci0KLSAgLyogdGVzdCBpZiB0aGUgY29uZmlnIGhhcyBjaGFuZ2VkLCB1cGRhdGUgaXQgaWYgc28gKi8KLQotICBwb2ludFdpZHRoID0gKHJlc29seCAqIDIpIC8gNTsKLSAgcG9pbnRIZWlnaHQgPSAocmVzb2x5ICogMikgLyA1OwotCi0gIC8qICEgZXR1ZGUgZHUgc2lnbmFsIC4uLiAqLwotICBpbmN2YXIgPSAwOwotICBmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLSAgICBpZiAoaW5jdmFyIDwgZGF0YVswXVtpXSkKLSAgICAgIGluY3ZhciA9IGRhdGFbMF1baV07Ci0gIH0KLQotICBhY2NlbHZhciA9IGluY3ZhciAvIDUwMDA7Ci0gIGlmIChnb29tZGF0YS0+c3BlZWR2YXIgPiA1KSB7Ci0gICAgYWNjZWx2YXItLTsKLSAgICBpZiAoZ29vbWRhdGEtPnNwZWVkdmFyID4gMjApCi0gICAgICBhY2NlbHZhci0tOwotICAgIGlmIChnb29tZGF0YS0+c3BlZWR2YXIgPiA0MCkKLSAgICAgIGdvb21kYXRhLT5zcGVlZHZhciA9IDQwOwotICB9Ci0gIGFjY2VsdmFyLS07Ci0gIGdvb21kYXRhLT5zcGVlZHZhciArPSBhY2NlbHZhcjsKLQotICBpZiAoZ29vbWRhdGEtPnNwZWVkdmFyIDwgMCkKLSAgICBnb29tZGF0YS0+c3BlZWR2YXIgPSAwOwotICBpZiAoZ29vbWRhdGEtPnNwZWVkdmFyID4gNDApCi0gICAgZ29vbWRhdGEtPnNwZWVkdmFyID0gNDA7Ci0KLQotICAvKiAhIGNhbGN1bCBkdSBkZXBsYWNlbWVudCBkZXMgcGV0aXRzIHBvaW50cyAuLi4gKi8KLQotICBsYXJnZmFjdG9yID0KLSAgICAgICgoZmxvYXQpIGdvb21kYXRhLT5zcGVlZHZhciAvIDQwLjBmICsgKGZsb2F0KSBpbmN2YXIgLyA1MDAwMC4wZikgLyAxLjVmOwotICBpZiAobGFyZ2ZhY3RvciA+IDEuNWYpCi0gICAgbGFyZ2ZhY3RvciA9IDEuNWY7Ci0KLSAgZm9yIChpID0gMTsgaSAqIDE1IDw9IGdvb21kYXRhLT5zcGVlZHZhciArIDE1OyBpKyspIHsKLSAgICBnb29tZGF0YS0+bG9vcHZhciArPSBnb29tZGF0YS0+c3BlZWR2YXIgKyAxOwotCi0gICAgcG9pbnRGaWx0ZXIgKGdvb21kYXRhLAotICAgICAgICBZRUxMT1csCi0gICAgICAgICgocG9pbnRXaWR0aCAtIDYuMGYpICogbGFyZ2ZhY3RvciArIDUuMGYpLAotICAgICAgICAoKHBvaW50SGVpZ2h0IC0gNi4wZikgKiBsYXJnZmFjdG9yICsgNS4wZiksCi0gICAgICAgIGkgKiAxNTIuMGYsIDEyOC4wZiwgZ29vbWRhdGEtPmxvb3B2YXIgKyBpICogMjAzMik7Ci0gICAgcG9pbnRGaWx0ZXIgKGdvb21kYXRhLCBPUkFOR0UsCi0gICAgICAgICgocG9pbnRXaWR0aCAvIDIpICogbGFyZ2ZhY3RvcikgLyBpICsgMTAuMGYgKiBpLAotICAgICAgICAoKHBvaW50SGVpZ2h0IC8gMikgKiBsYXJnZmFjdG9yKSAvIGkgKyAxMC4wZiAqIGksCi0gICAgICAgIDk2LjBmLCBpICogODAuMGYsIGdvb21kYXRhLT5sb29wdmFyIC8gaSk7Ci0gICAgcG9pbnRGaWx0ZXIgKGdvb21kYXRhLCBWSU9MRVQsCi0gICAgICAgICgocG9pbnRIZWlnaHQgLyAzICsgNS4wZikgKiBsYXJnZmFjdG9yKSAvIGkgKyAxMC4wZiAqIGksCi0gICAgICAgICgocG9pbnRIZWlnaHQgLyAzICsgNS4wZikgKiBsYXJnZmFjdG9yKSAvIGkgKyAxMC4wZiAqIGksCi0gICAgICAgIGkgKyAxMjIuMGYsIDEzNC4wZiwgZ29vbWRhdGEtPmxvb3B2YXIgLyBpKTsKLSAgICBwb2ludEZpbHRlciAoZ29vbWRhdGEsIEJMQUNLLAotICAgICAgICAoKHBvaW50SGVpZ2h0IC8gMykgKiBsYXJnZmFjdG9yICsgMjAuMGYpLAotICAgICAgICAoKHBvaW50SGVpZ2h0IC8gMykgKiBsYXJnZmFjdG9yICsgMjAuMGYpLAotICAgICAgICA1OC4wZiwgaSAqIDY2LjBmLCBnb29tZGF0YS0+bG9vcHZhciAvIGkpOwotICAgIHBvaW50RmlsdGVyIChnb29tZGF0YSwgV0hJVEUsCi0gICAgICAgIChwb2ludEhlaWdodCAqIGxhcmdmYWN0b3IgKyAxMC4wZiAqIGkpIC8gaSwKLSAgICAgICAgKHBvaW50SGVpZ2h0ICogbGFyZ2ZhY3RvciArIDEwLjBmICogaSkgLyBpLAotICAgICAgICA2Ni4wZiwgNzQuMGYsIGdvb21kYXRhLT5sb29wdmFyICsgaSAqIDUwMCk7Ci0gIH0KLQotICAvKiBkaW1pbnVlciBkZSAxIGxlIHRlbXBzIGRlIGxvY2thZ2UgKi8KLSAgLyogbm90ZSBwb3VyIGNldXggcXVpIG4nb250IHBhcyBzdWl2aXMgOiBsZSBsb2NrdmFyIHBlcm1ldCBkJ2VtcGVjaGVyIHVuICovCi0gIC8qIGNoYW5nZW1lbnQgZCdldGF0IGR1IHBsdWdpbnMganVzdGUgYXByZXMgdW4gYXV0cmUgY2hhbmdlbWVudCBkJ2V0YXQuIG9raSA/ICovCi0gIGlmICgtLWdvb21kYXRhLT5sb2NrdmFyIDwgMCkKLSAgICBnb29tZGF0YS0+bG9ja3ZhciA9IDA7Ci0KLSAgLyogdGVtcHMgZHUgZ29vbSAqLwotICBpZiAoLS1nb29tZGF0YS0+YWdvb20gPCAwKQotICAgIGdvb21kYXRhLT5hZ29vbSA9IDA7Ci0KLSAgLyogb24gdmVyaWZpZSBxdSdpbCBuZSBzZSBwYXMgdW4gdHJ1YyBpbnRlcnJlc3NhbnQgYXZlYyBsZSBzb24uICovCi0gIGlmICgoYWNjZWx2YXIgPiBnb29tZGF0YS0+Z29vbWxpbWl0KSB8fCAoYWNjZWx2YXIgPCAtZ29vbWRhdGEtPmdvb21saW1pdCkpIHsKLSAgICAvKiBVTiBHT09NICEhISBZQUhPTyAhICovCi0gICAgZ29vbWRhdGEtPnRvdGFsZ29vbSsrOwotICAgIGdvb21kYXRhLT5hZ29vbSA9IDIwOyAgICAgICAvKiBtYWlzIHBkdCAyMCBjeWNsZXMsIGlsIG4neSBlbiBhdXJhIHBsdXMuICovCi0gICAgZ29vbWRhdGEtPmxpbmVNb2RlID0gKGdvb21kYXRhLT5saW5lTW9kZSArIDEpICUgMjA7IC8qIFRvdXMgbGVzIDEwIGdvb21zIG9uIGNoYW5nZSBkZSBtb2RlIGxpbmVhaXJlICovCi0KLSAgICAvKiBjaGFuZ2VtZW50IGV2ZW50dWVsIGRlIG1vZGUgKi8KLSAgICBzd2l0Y2ggKGlSQU5EIChnb29tZGF0YSwgMTApKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICBjYXNlIDE6Ci0gICAgICBjYXNlIDI6Ci0gICAgICAgIHB6ZmQtPm1vZGUgPSBXQVZFX01PREU7Ci0gICAgICAgIHB6ZmQtPnZpdGVzc2UgPSBTVE9QX1NQRUVEIC0gMTsKLSAgICAgICAgcHpmZC0+cmV2ZXJzZSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOgotICAgICAgY2FzZSA0OgotICAgICAgICBwemZkLT5tb2RlID0gQ1JZU1RBTF9CQUxMX01PREU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA1OgotICAgICAgICBwemZkLT5tb2RlID0gQU1VTEVUVEVfTU9ERTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDY6Ci0gICAgICAgIHB6ZmQtPm1vZGUgPSBXQVRFUl9NT0RFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNzoKLSAgICAgICAgcHpmZC0+bW9kZSA9IFNDUlVOQ0hfTU9ERTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBwemZkLT5tb2RlID0gTk9STUFMX01PREU7Ci0gICAgfQotICB9Ci0KLSAgLyogdG91dCBjZWNpIG5lIHNlcmEgZmFpdCBxdSdlbiBjYXMgZGUgbm9uLWJsb2NhZ2UgKi8KLSAgaWYgKGdvb21kYXRhLT5sb2NrdmFyID09IDApIHsKLSAgICAvKiByZXBlcmFnZSBkZSBnb29tIChhY2NlbGVyYXRpb24gZm9ydGUgZGUgbCdhY2NlbGVyYXRpb24gZHUgdm9sdW1lKSAqLwotICAgIC8qIC0+IGNvdXAgZGUgYm9vc3QgZGUgbGEgdml0ZXNzZSBzaSBiZXNvaW4uLiAqLwotICAgIGlmICgoYWNjZWx2YXIgPiBnb29tZGF0YS0+Z29vbWxpbWl0KSB8fCAoYWNjZWx2YXIgPCAtZ29vbWRhdGEtPmdvb21saW1pdCkpIHsKLSAgICAgIGdvb21kYXRhLT5nb29tdmFyKys7Ci0gICAgICAvKmlmIChnb29tdmFyICUgMSA9PSAwKSAqLwotICAgICAgewotICAgICAgICBndWludDMyIHZ0bXA7Ci0gICAgICAgIGd1aW50MzIgbmV3dml0OwotCi0gICAgICAgIG5ld3ZpdCA9IFNUT1BfU1BFRUQgLSBnb29tZGF0YS0+c3BlZWR2YXIgLyAyOwotICAgICAgICAvKiByZXRhYmxpciBsZSB6b29tIGF2YW50Li4gKi8KLSAgICAgICAgaWYgKChwemZkLT5yZXZlcnNlKSAmJiAoIShnb29tZGF0YS0+Y3ljbGUgJSAxMikpICYmIChyYW5kICgpICUgMyA9PSAwKSkgewotICAgICAgICAgIHB6ZmQtPnJldmVyc2UgPSAwOwotICAgICAgICAgIHB6ZmQtPnZpdGVzc2UgPSBTVE9QX1NQRUVEIC0gMjsKLSAgICAgICAgICBnb29tZGF0YS0+bG9ja3ZhciA9IDUwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpUkFORCAoZ29vbWRhdGEsIDEwKSA9PSAwKSB7Ci0gICAgICAgICAgcHpmZC0+cmV2ZXJzZSA9IDE7Ci0gICAgICAgICAgZ29vbWRhdGEtPmxvY2t2YXIgPSAxMDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjaGFuZ2VtZW50IGRlIG1pbGlldS4uICovCi0gICAgICAgIHN3aXRjaCAoaVJBTkQgKGdvb21kYXRhLCAyMCkpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBwemZkLT5taWRkbGVZID0gcmVzb2x5IC0gMTsKLSAgICAgICAgICAgIHB6ZmQtPm1pZGRsZVggPSByZXNvbHggLyAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcHpmZC0+bWlkZGxlWCA9IHJlc29seCAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBwemZkLT5taWRkbGVYID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwemZkLT5taWRkbGVZID0gcmVzb2x5IC8gMjsKLSAgICAgICAgICAgIHB6ZmQtPm1pZGRsZVggPSByZXNvbHggLyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHB6ZmQtPm1vZGUgPT0gV0FURVJfTU9ERSkgewotICAgICAgICAgIHB6ZmQtPm1pZGRsZVggPSByZXNvbHggLyAyOwotICAgICAgICAgIHB6ZmQtPm1pZGRsZVkgPSByZXNvbHkgLyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh2dG1wID0gKGlSQU5EIChnb29tZGF0YSwgMjcpKSkgewotICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHB6ZmQtPnZQbGFuZUVmZmVjdCA9IGlSQU5EIChnb29tZGF0YSwgMyk7Ci0gICAgICAgICAgICBwemZkLT52UGxhbmVFZmZlY3QgLT0gaVJBTkQgKGdvb21kYXRhLCAzKTsKLSAgICAgICAgICAgIHB6ZmQtPmhQbGFuZUVmZmVjdCA9IGlSQU5EIChnb29tZGF0YSwgMyk7Ci0gICAgICAgICAgICBwemZkLT5oUGxhbmVFZmZlY3QgLT0gaVJBTkQgKGdvb21kYXRhLCAzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHB6ZmQtPnZQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgICBwemZkLT5oUGxhbmVFZmZlY3QgPSBpUkFORCAoZ29vbWRhdGEsIDgpOwotICAgICAgICAgICAgcHpmZC0+aFBsYW5lRWZmZWN0IC09IGlSQU5EIChnb29tZGF0YSwgOCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgY2FzZSA1OgotICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBwemZkLT52UGxhbmVFZmZlY3QgPSBpUkFORCAoZ29vbWRhdGEsIDUpOwotICAgICAgICAgICAgcHpmZC0+dlBsYW5lRWZmZWN0IC09IGlSQU5EIChnb29tZGF0YSwgNSk7Ci0gICAgICAgICAgICBwemZkLT5oUGxhbmVFZmZlY3QgPSAtcHpmZC0+dlBsYW5lRWZmZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA4OgotICAgICAgICAgICAgcHpmZC0+aFBsYW5lRWZmZWN0ID0gNSArIGlSQU5EIChnb29tZGF0YSwgOCk7Ci0gICAgICAgICAgICBwemZkLT52UGxhbmVFZmZlY3QgPSAtcHpmZC0+aFBsYW5lRWZmZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgcHpmZC0+dlBsYW5lRWZmZWN0ID0gNSArIGlSQU5EIChnb29tZGF0YSwgOCk7Ci0gICAgICAgICAgICBwemZkLT5oUGxhbmVFZmZlY3QgPSAtcHpmZC0+aFBsYW5lRWZmZWN0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxMzoKLSAgICAgICAgICAgIHB6ZmQtPmhQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgICBwemZkLT52UGxhbmVFZmZlY3QgPSBpUkFORCAoZ29vbWRhdGEsIDEwKTsKLSAgICAgICAgICAgIHB6ZmQtPnZQbGFuZUVmZmVjdCAtPSBpUkFORCAoZ29vbWRhdGEsIDEwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodnRtcCA8IDEwKSB7Ci0gICAgICAgICAgICAgIHB6ZmQtPnZQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgICAgIHB6ZmQtPmhQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaVJBTkQgKGdvb21kYXRhLCAzKSAhPSAwKQotICAgICAgICAgIHB6ZmQtPm5vaXNpZnkgPSAwOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBwemZkLT5ub2lzaWZ5ID0gaVJBTkQgKGdvb21kYXRhLCAzKSArIDI7Ci0gICAgICAgICAgZ29vbWRhdGEtPmxvY2t2YXIgKj0gMzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwemZkLT5tb2RlID09IEFNVUxFVFRFX01PREUpIHsKLSAgICAgICAgICBwemZkLT52UGxhbmVFZmZlY3QgPSAwOwotICAgICAgICAgIHB6ZmQtPmhQbGFuZUVmZmVjdCA9IDA7Ci0gICAgICAgICAgcHpmZC0+bm9pc2lmeSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHB6ZmQtPm1pZGRsZVggPT0gMSkgfHwgKHB6ZmQtPm1pZGRsZVggPT0gcmVzb2x4IC0gMSkpIHsKLSAgICAgICAgICBwemZkLT52UGxhbmVFZmZlY3QgPSAwOwotICAgICAgICAgIHB6ZmQtPmhQbGFuZUVmZmVjdCA9IGlSQU5EIChnb29tZGF0YSwgMikgPyAwIDogcHpmZC0+aFBsYW5lRWZmZWN0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5ld3ZpdCA8IHB6ZmQtPnZpdGVzc2UpIHsgICAvKiBvbiBhY2NlbGVyZSAqLwotICAgICAgICAgIHpmZF91cGRhdGUgPSAxOwotICAgICAgICAgIGlmICgoKG5ld3ZpdCA8IFNUT1BfU1BFRUQgLSA3KSAmJgotICAgICAgICAgICAgICAgICAgKHB6ZmQtPnZpdGVzc2UgPCBTVE9QX1NQRUVEIC0gNikgJiYKLSAgICAgICAgICAgICAgICAgIChnb29tZGF0YS0+Y3ljbGUgJSAzID09IDApKSB8fCAoaVJBTkQgKGdvb21kYXRhLCA0MCkgPT0gMCkpIHsKLSAgICAgICAgICAgIHB6ZmQtPnZpdGVzc2UgPSBTVE9QX1NQRUVEIC0gMTsKLSAgICAgICAgICAgIHB6ZmQtPnJldmVyc2UgPSAhcHpmZC0+cmV2ZXJzZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHpmZC0+dml0ZXNzZSA9IChuZXd2aXQgKyBwemZkLT52aXRlc3NlICogNCkgLyA1OwotICAgICAgICAgIH0KLSAgICAgICAgICBnb29tZGF0YS0+bG9ja3ZhciArPSA1MDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICAvKiBtb2RlIG1lZ2EtbGVudCAqLwotICAgIGlmIChpUkFORCAoZ29vbWRhdGEsIDEwMDApID09IDApIHsKLSAgICAgIC8qIAotICAgICAgICAgcHJpbnRmICgiY291cCBkdSBzb3J0Li4uXG4iKSA7Ci0gICAgICAgKi8KLSAgICAgIHpmZF91cGRhdGUgPSAxOwotICAgICAgcHpmZC0+dml0ZXNzZSA9IFNUT1BfU1BFRUQgLSAxOwotICAgICAgcHpmZC0+cGVydGVkZWMgPSA4OwotICAgICAgcHpmZC0+c3FydHBlcnRlID0gMTY7Ci0gICAgICBnb29tZGF0YS0+Z29vbXZhciA9IDE7Ci0gICAgICBnb29tZGF0YS0+bG9ja3ZhciArPSA3MDsKLSAgICB9Ci0gIH0KLQotICAvKiBncm9zIGZyZWluIHNpIGxhIG11c2lxdWUgZXN0IGNhbG1lICovCi0gIGlmICgoZ29vbWRhdGEtPnNwZWVkdmFyIDwgMSkgJiYgKHB6ZmQtPnZpdGVzc2UgPCBTVE9QX1NQRUVEIC0gNCkKLSAgICAgICYmIChnb29tZGF0YS0+Y3ljbGUgJSAxNiA9PSAwKSkgewotICAgIC8qCi0gICAgICAgcHJpbnRmICgiKytzbG93IHBhcnQuLi4gJWlcbiIsIHpmZC52aXRlc3NlKSA7Ci0gICAgICovCi0gICAgemZkX3VwZGF0ZSA9IDE7Ci0gICAgcHpmZC0+dml0ZXNzZSArPSAzOwotICAgIHB6ZmQtPnBlcnRlZGVjID0gODsKLSAgICBwemZkLT5zcXJ0cGVydGUgPSAxNjsKLSAgICBnb29tZGF0YS0+Z29vbXZhciA9IDA7Ci0gICAgLyoKLSAgICAgICBwcmludGYgKCItLXNsb3cgcGFydC4uLiAlaVxuIiwgemZkLnZpdGVzc2UpIDsKLSAgICAgKi8KLSAgfQotCi0gIC8qIGJhaXNzZXIgcmVndWxpZXJlbWVudCBsYSB2aXRlc3NlLi4uICovCi0gIGlmICgoZ29vbWRhdGEtPmN5Y2xlICUgNzMgPT0gMCkgJiYgKHB6ZmQtPnZpdGVzc2UgPCBTVE9QX1NQRUVEIC0gNSkpIHsKLSAgICAvKgotICAgICAgIHByaW50ZiAoInNsb3cgZG93bi4uLlxuIikgOwotICAgICAqLwotICAgIHpmZF91cGRhdGUgPSAxOwotICAgIHB6ZmQtPnZpdGVzc2UrKzsKLSAgfQotCi0gIC8qIGFycmV0ZXIgZGUgZGVjcultZW50ZXIgYXUgYm91dCBkJ3VuIGNlcnRhaW4gdGVtcHMgKi8KLSAgaWYgKChnb29tZGF0YS0+Y3ljbGUgJSAxMDEgPT0gMCkgJiYgKHB6ZmQtPnBlcnRlZGVjID09IDcpKSB7Ci0gICAgemZkX3VwZGF0ZSA9IDE7Ci0gICAgcHpmZC0+cGVydGVkZWMgPSA4OwotICAgIHB6ZmQtPnNxcnRwZXJ0ZSA9IDE2OwotICB9Ci0KLSAgLyogWm9vbSBoZXJlICEgKi8KLSAgem9vbUZpbHRlckZhc3RSR0IgKGdvb21kYXRhLCBwemZkLCB6ZmRfdXBkYXRlKTsKLQotICAvKiBzaSBvbiBlc3QgZGFucyB1biBnb29tIDogYWZmaWNoZXIgbGVzIGxpZ25lcy4uLiAqLwotICBpZiAoZ29vbWRhdGEtPmFnb29tID4gMTUpCi0gICAgZ29vbV9saW5lcyAoZ29vbWRhdGEsIGRhdGEsICgocHpmZC0+bWlkZGxlWCA9PSByZXNvbHggLyAyKQotICAgICAgICAgICAgJiYgKHB6ZmQtPm1pZGRsZVkgPT0gcmVzb2x5IC8gMikKLSAgICAgICAgICAgICYmIChwemZkLT5tb2RlICE9IFdBVEVSX01PREUpKQotICAgICAgICA/IChnb29tZGF0YS0+bGluZU1vZGUgLyAxMCkgOiAwLCBnb29tZGF0YS0+cDIsIGdvb21kYXRhLT5hZ29vbSAtIDE1KTsKLQotICByZXR1cm5fdmFsID0gZ29vbWRhdGEtPnAyOwotICB0bXAgPSBnb29tZGF0YS0+cDE7Ci0gIGdvb21kYXRhLT5wMSA9IGdvb21kYXRhLT5wMjsKLSAgZ29vbWRhdGEtPnAyID0gdG1wOwotCi0gIC8qIGFmZmljaGFnZSBldCBzd2FwcGFnZSBkZXMgYnVmZmVycy4uICovCi0gIGdvb21kYXRhLT5jeWNsZSsrOwotCi0gIC8qIHRvdXMgbGVzIDEwMCBjeWNsZXMgOiB26XJpZmllciBzaSBsZSB0YXV4IGRlIGdvb20gZXN0IGNvcnJlY3QgKi8KLSAgLyogZXQgbGUgbW9kaWZpZXIgc2lub24uLiAqLwotICBpZiAoIShnb29tZGF0YS0+Y3ljbGUgJSAxMDApKSB7Ci0gICAgaWYgKGdvb21kYXRhLT50b3RhbGdvb20gPiAxNSkgewotICAgICAgLyogIHByaW50ZiAoImxlc3MgZ29vbXNcbiIpIDsgKi8KLSAgICAgIGdvb21kYXRhLT5nb29tbGltaXQrKzsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKChnb29tZGF0YS0+dG90YWxnb29tID09IDApICYmIChnb29tZGF0YS0+Z29vbWxpbWl0ID4gMSkpCi0gICAgICAgIGdvb21kYXRhLT5nb29tbGltaXQtLTsKLSAgICB9Ci0gICAgZ29vbWRhdGEtPnRvdGFsZ29vbSA9IDA7Ci0gIH0KLSAgcmV0dXJuIHJldHVybl92YWw7Ci19Ci0KLXZvaWQKLWdvb21fY2xvc2UgKEdvb21EYXRhICogZ29vbWRhdGEpCi17Ci0gIGlmIChnb29tZGF0YS0+cGl4ZWwgIT0gTlVMTCkKLSAgICBmcmVlIChnb29tZGF0YS0+cGl4ZWwpOwotICBpZiAoZ29vbWRhdGEtPmJhY2sgIT0gTlVMTCkKLSAgICBmcmVlIChnb29tZGF0YS0+YmFjayk7Ci0gIGlmIChnb29tZGF0YS0+emZkICE9IE5VTEwpIHsKLSAgICB6b29tRmlsdGVyRGVzdHJveSAoZ29vbWRhdGEtPnpmZCk7Ci0gICAgZ29vbWRhdGEtPnpmZCA9IE5VTEw7Ci0gIH0KLSAgZ29vbWRhdGEtPnBpeGVsID0gZ29vbWRhdGEtPmJhY2sgPSBOVUxMOwotICBSQU5EX0NMT1NFIChnb29tZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvZ29vbTJrMS9nb29tX2NvcmUuaCBiL2dzdC9nb29tMmsxL2dvb21fY29yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmJjMGVlLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tMmsxL2dvb21fY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotI2lmbmRlZiBfR09PTUNPUkVfSAotI2RlZmluZSBfR09PTUNPUkVfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi10eXBlZGVmIHN0cnVjdCBab29tRmlsdGVyRGF0YSBab29tRmlsdGVyRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKioKLSAqKiAgU0hBUkVEIERBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioKLSAqKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiovCi0gIGd1aW50MzIgKnBpeGVsOwotICBndWludDMyICpiYWNrOwotICBndWludDMyICpwMSwgKnAyOwotICBndWludDMyIGN5Y2xlOwotCi0gIGd1aW50MzIgcmVzb2x4LCByZXNvbHksIGJ1ZmZzaXplOwotCi0gIGludCBsb2NrdmFyOyAgICAgICAvKiBwb3VyIGVtcGVjaGVyIGRlIG5vdXZlYXV4IGNoYW5nZW1lbnRzICovCi0gIGludCBnb29tdmFyOyAgICAgICAvKiBib3VjbGUgZGVzIGdvb21zICovCi0gIGludCB0b3RhbGdvb207ICAgICAvKiBub21icmUgZGUgZ29vbXMgcGFyIHNlY29uZHMgKi8KLSAgaW50IGFnb29tOyAgICAgICAgIC8qIHVuIGdvb20gYSBldSBsaWV1Li4gICAgICAgKi8KLSAgaW50IGxvb3B2YXI7ICAgICAgIC8qIG1vdXZlbWVudCBkZXMgcG9pbnRzICovCi0gIGludCBzcGVlZHZhcjsgICAgICAvKiB2aXRlc3NlIGRlcyBwYXJ0aWN1bGVzICovCi0gIGludCBsaW5lTW9kZTsgICAgICAvKiBsJ2VmZmV0IGxpbmVhaXJlIGEgZGVzc2luZXIgKi8KLSAgY2hhciBnb29tbGltaXQ7ICAgIC8qIHNlbnNpYmlsaXTDqSBkdSBnb29tICovCi0KLSAgWm9vbUZpbHRlckRhdGEgKnpmZDsKLSAgCi0gIC8qIFJhbmRvbSB0YWJsZSAqLwotICBnaW50ICAqcmFuZF90YWI7Ci0gIGd1aW50ICByYW5kX3BvczsKLX0gR29vbURhdGE7Ci0KLXZvaWQgZ29vbV9pbml0IChHb29tRGF0YSAqZ29vbWRhdGEsIGd1aW50MzIgcmVzeCwgZ3VpbnQzMiByZXN5KTsKLXZvaWQgZ29vbV9zZXRfcmVzb2x1dGlvbiAoR29vbURhdGEgKmdvb21kYXRhLCBndWludDMyIHJlc3gsIGd1aW50MzIgcmVzeSk7Ci0KLWd1aW50MzIgKmdvb21fdXBkYXRlIChHb29tRGF0YSAqZ29vbWRhdGEsIGdpbnQxNiBkYXRhIFsyXVs1MTJdKTsKLQotdm9pZCBnb29tX2Nsb3NlIChHb29tRGF0YSAqZ29vbWRhdGEpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9nb29tMmsxL2dvb21fdG9vbHMuaCBiL2dzdC9nb29tMmsxL2dvb21fdG9vbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE3OGRiYS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbTJrMS9nb29tX3Rvb2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIF9HT09NVE9PTFNfSAotI2RlZmluZSBfR09PTVRPT0xTX0gKLQotI2RlZmluZSBOQl9SQU5EIDB4MTAwMDAKLQotI2RlZmluZSBSQU5EX0lOSVQoZ2QsaSkgXAotICAgICAgICBzcmFuZCAoaSk7IFwKLSAgICAgICAgaWYgKGdkLT5yYW5kX3RhYiA9PSBOVUxMKSBcCi0gICAgICAgICAgICAgICAgZ2QtPnJhbmRfdGFiID0gZ19tYWxsb2MgKE5CX1JBTkQgKiBzaXplb2YoZ2ludCkpIDtcCi0gICAgICAgIGdkLT5yYW5kX3BvcyA9IDA7IFwKLSAgICAgICAgd2hpbGUgKGdkLT5yYW5kX3BvcyA8IE5CX1JBTkQpIFwKLSAgICAgICAgICAgICAgICBnZC0+cmFuZF90YWIgW2dkLT5yYW5kX3BvcysrXSA9IHJhbmQgKCk7Ci0KLSNkZWZpbmUgUkFORChnZCkgXAotICAgICAgICAoZ2QtPnJhbmRfdGFiW2dkLT5yYW5kX3BvcyA9ICgoZ2QtPnJhbmRfcG9zICsgMSkgJSBOQl9SQU5EKV0pCi0KLSNkZWZpbmUgUkFORF9DTE9TRShnZCkgXAotICAgICAgICBnX2ZyZWUgKGdkLT5yYW5kX3RhYik7IFwKLSAgICAgICAgZ2QtPnJhbmRfdGFiID0gTlVMTDsKLQotLyojZGVmaW5lIGlSQU5EKGkpICgoZ3VpbnQzMikoKGZsb2F0KWkgKiBSQU5EKCkvUkFORF9NQVgpKSAqLwotI2RlZmluZSBpUkFORChnZCxpKSAoUkFORChnZCkgJSBpKQotICAgICAgICAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20yazEvZ3JhcGhpYy5jIGIvZ3N0L2dvb20yazEvZ3JhcGhpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBmOTg3Li4wMDAwMDAwCi0tLSBhL2dzdC9nb29tMmsxL2dyYXBoaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdyYXBoaWMuaCIKLQotY29uc3QgQ29sb3IgQkxBQ0sgPSB7IDAsIDAsIDAgfTsKLWNvbnN0IENvbG9yIFdISVRFID0geyAweGZmLCAweGZmLCAweGZmIH07Ci1jb25zdCBDb2xvciBSRUQgPSB7IDB4ZmYsIDAsIDAgfTsKLWNvbnN0IENvbG9yIEdSRUVOID0geyAwLCAweGZmLCAwIH07Ci1jb25zdCBDb2xvciBCTFVFID0geyAwLCAwLCAweGZmIH07Ci1jb25zdCBDb2xvciBZRUxMT1cgPSB7IDB4ZmYsIDB4ZmYsIDB4MzMgfTsKLWNvbnN0IENvbG9yIE9SQU5HRSA9IHsgMHhmZiwgMHhjYywgMHgwMCB9OwotY29uc3QgQ29sb3IgVklPTEVUID0geyAweDU1LCAweDAwLCAweGZmIH07CmRpZmYgLS1naXQgYS9nc3QvZ29vbTJrMS9ncmFwaGljLmggYi9nc3QvZ29vbTJrMS9ncmFwaGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNTRkN2YuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20yazEvZ3JhcGhpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBHUkFQSElDX0gKLSNkZWZpbmUgR1JBUEhJQ19ICi0KLSNpbmNsdWRlIDxnbGliLmg+ICAvKiBkZWZpbmVzIGlubGluZSBmb3IgYmV0dGVyIHBvcnRhYmlsaXR5ICovCi0KLXR5cGVkZWYgdW5zaWduZWQgaW50IFVpbnQ7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHVuc2lnbmVkIHNob3J0IHIsdixiOwotfQotQ29sb3I7Ci0KLWV4dGVybiBjb25zdCBDb2xvciBCTEFDSzsKLWV4dGVybiBjb25zdCBDb2xvciBXSElURTsKLWV4dGVybiBjb25zdCBDb2xvciBSRUQ7Ci1leHRlcm4gY29uc3QgQ29sb3IgQkxVRTsKLWV4dGVybiBjb25zdCBDb2xvciBHUkVFTjsKLWV4dGVybiBjb25zdCBDb2xvciBZRUxMT1c7Ci1leHRlcm4gY29uc3QgQ29sb3IgT1JBTkdFOwotZXh0ZXJuIGNvbnN0IENvbG9yIFZJT0xFVDsKLQotI2VuZGlmIC8qR1JBUEhJQ19IKi8KZGlmZiAtLWdpdCBhL2dzdC9nb29tMmsxL2dzdGdvb20uYyBiL2dzdC9nb29tMmsxL2dzdGdvb20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiZmNiYy4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbTJrMS9nc3Rnb29tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyogZ3N0Z29vbS5jOiBpbXBsZW1lbnRhdGlvbiBvZiBnb29tIGRyYXdpbmcgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSA8MjAwMT4gUmljaGFyZCBCb3VsdG9uIDxyaWNoYXJkQHRhcnRhcnVzLm9yZz4KLSAqICAgICAgICAgICAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0gYXQgZmx1ZW5kbyBkb3QgY29tPgotICogICAgICAgICAgIChDKSA8MjAxNT4gTHVpcyBkZSBCZXRoZW5jb3VydCA8bHVpc0BkZWJldGhlbmNvdXJ0LmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1nb29tMmsxCi0gKiBAc2VlX2Fsc286IGdvb20sIHN5bmFlc3RoZXNpYQotICoKLSAqIEdvb20yazEgaXMgYW4gYXVkaW8gdmlzdWFsaXNhdGlvbiBlbGVtZW50LiBJdCBjcmVhdGVzIHdhcnBpbmcgc3RydWN0dXJlcwotICogYmFzZWQgb24gdGhlIGluY29tbWluZyBhdWRpbyBzaWduYWwuIEdvb20yazEgaXMgdGhlIG9sZGVyIHZlcnNpb24gb2YgdGhlCi0gKiB2aXN1YWxpc2F0aW9uLiBBbHNvIGF2YWlsYWJsZSBpcyBnb29tMms0LCB3aXRoIGEgZGlmZmVyZW50IGxvb2suCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyAhIGdvb20yazEgISB2aWRlb2NvbnZlcnQgISB4dmltYWdlc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0Z29vbS5oIgotI2luY2x1ZGUgImdvb21fY29yZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnb29tMmsxX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdvb20yazFfZGVidWcKLQotI2RlZmluZSBERUZBVUxUX1dJRFRIICAzMjAKLSNkZWZpbmUgREVGQVVMVF9IRUlHSFQgMjQwCi0jZGVmaW5lIERFRkFVTFRfRlBTX04gIDI1Ci0jZGVmaW5lIERFRkFVTFRfRlBTX0QgIDEKLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSNkZWZpbmUgUkdCX09SREVSICJ4UkdCIgotI2Vsc2UKLSNkZWZpbmUgUkdCX09SREVSICJCR1J4IgotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFIChSR0JfT1JERVIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwgICAgLyogdGhlIG5hbWUgb2YgdGhlIHBhZHMgKi8KLSAgICBHU1RfUEFEX1NJTkssICAgICAgICAgICAgICAgLyogdHlwZSBvZiB0aGUgcGFkICovCi0gICAgR1NUX1BBRF9BTFdBWVMsICAgICAgICAgICAgIC8qIEFMV0FZUy9TT01FVElNRVMgKi8KLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikgIiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZDsgIgotICAgICAgICAiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDgwMDAsIDk2MDAwIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMiwgIgotICAgICAgICAiY2hhbm5lbC1tYXNrID0gKGJpdG1hc2spIDB4MywgIiAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQiKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9nb29tMmsxX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9nb29tMmsxX3NldHVwIChHc3RBdWRpb1Zpc3VhbGl6ZXIgKiBiYXNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZ29vbTJrMV9yZW5kZXIgKEdzdEF1ZGlvVmlzdWFsaXplciAqIGJhc2UsCi0gICAgR3N0QnVmZmVyICogYXVkaW8sIEdzdFZpZGVvRnJhbWUgKiB2aWRlbyk7Ci0KLQotR19ERUZJTkVfVFlQRSAoR3N0R29vbTJrMSwgZ3N0X2dvb20yazEsIEdTVF9UWVBFX0FVRElPX1ZJU1VBTElaRVIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2dvb20yazFfY2xhc3NfaW5pdCAoR3N0R29vbTJrMUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RBdWRpb1Zpc3VhbGl6ZXJDbGFzcyAqdmlzdWFsaXplcl9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIHZpc3VhbGl6ZXJfY2xhc3MgPSAoR3N0QXVkaW9WaXN1YWxpemVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfZ29vbTJrMV9maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkdPT006IHdoYXQgYSBHT09NISAyazEgZWRpdGlvbiIsICJWaXN1YWxpemF0aW9uIiwKLSAgICAgICJUYWtlcyBmcmFtZXMgb2YgZGF0YSBhbmQgb3V0cHV0cyB2aWRlbyBmcmFtZXMgdXNpbmcgdGhlIEdPT00gMmsxIGZpbHRlciIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnb29tMmsxX2RlYnVnLCAiZ29vbTJrMSIsIDAsCi0gICAgICAiZ29vbTJrMSB2aXN1YWxpc2F0aW9uIGVsZW1lbnQiKTsKLQotICB2aXN1YWxpemVyX2NsYXNzLT5zZXR1cCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ29vbTJrMV9zZXR1cCk7Ci0gIHZpc3VhbGl6ZXJfY2xhc3MtPnJlbmRlciA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ29vbTJrMV9yZW5kZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dvb20yazFfaW5pdCAoR3N0R29vbTJrMSAqIGdvb20pCi17Ci0gIGdvb20tPndpZHRoID0gREVGQVVMVF9XSURUSDsKLSAgZ29vbS0+aGVpZ2h0ID0gREVGQVVMVF9IRUlHSFQ7Ci0gIGdvb20tPmNoYW5uZWxzID0gMDsKLQotICBnb29tX2luaXQgKCYoZ29vbS0+Z29vbWRhdGEpLCBnb29tLT53aWR0aCwgZ29vbS0+aGVpZ2h0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nb29tMmsxX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RHb29tMmsxICpnb29tID0gR1NUX0dPT00ySzEgKG9iamVjdCk7Ci0KLSAgZ29vbV9jbG9zZSAoJihnb29tLT5nb29tZGF0YSkpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfZ29vbTJrMV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ29vbTJrMV9zZXR1cCAoR3N0QXVkaW9WaXN1YWxpemVyICogYmFzZSkKLXsKLSAgR3N0R29vbTJrMSAqZ29vbSA9IEdTVF9HT09NMksxIChiYXNlKTsKLQotICBnb29tLT53aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIICgmYmFzZS0+dmluZm8pOwotICBnb29tLT5oZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZiYXNlLT52aW5mbyk7Ci0KLSAgZ29vbV9zZXRfcmVzb2x1dGlvbiAoJihnb29tLT5nb29tZGF0YSksIGdvb20tPndpZHRoLCBnb29tLT5oZWlnaHQpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9nb29tMmsxX3JlbmRlciAoR3N0QXVkaW9WaXN1YWxpemVyICogYmFzZSwgR3N0QnVmZmVyICogYXVkaW8sCi0gICAgR3N0VmlkZW9GcmFtZSAqIHZpZGVvKQotewotICBHc3RHb29tMmsxICpnb29tID0gR1NUX0dPT00ySzEgKGJhc2UpOwotICBHc3RNYXBJbmZvIGFtYXA7Ci0gIGdpbnQxNiBkYXRhaW5bMl1bR09PTTJLMV9TQU1QTEVTXTsKLSAgZ2ludDE2ICphZGF0YTsKLSAgZ2ludCBpOwotCi0gIC8qIGdldCBuZXh0IEdPT00ySzFfU0FNUExFUywgd2UgaGF2ZSBhdCBsZWFzdCB0aGlzIGFtb3VudCBvZiBzYW1wbGVzICovCi0gIGdzdF9idWZmZXJfbWFwIChhdWRpbywgJmFtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGFkYXRhID0gKGdpbnQxNiAqKSBhbWFwLmRhdGE7Ci0KLSAgaWYgKGdvb20tPmNoYW5uZWxzID09IDIpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgR09PTTJLMV9TQU1QTEVTOyBpKyspIHsKLSAgICAgIGRhdGFpblswXVtpXSA9ICphZGF0YSsrOwotICAgICAgZGF0YWluWzFdW2ldID0gKmFkYXRhKys7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBHT09NMksxX1NBTVBMRVM7IGkrKykgewotICAgICAgZGF0YWluWzBdW2ldID0gKmFkYXRhOwotICAgICAgZGF0YWluWzFdW2ldID0gKmFkYXRhKys7Ci0gICAgfQotICB9Ci0KLSAgdmlkZW8tPmRhdGFbMF0gPSBnb29tX3VwZGF0ZSAoJihnb29tLT5nb29tZGF0YSksIGRhdGFpbik7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGF1ZGlvLCAmYW1hcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJnb29tMmsxIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX0dPT00ySzEpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgZ29vbTJrMSwKLSAgICAiR09PTSAyazEgdmlzdWFsaXphdGlvbiBmaWx0ZXIiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20yazEvZ3N0Z29vbS5oIGIvZ3N0L2dvb20yazEvZ3N0Z29vbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWI4MThiLi4wMDAwMDAwCi0tLSBhL2dzdC9nb29tMmsxL2dzdGdvb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIGdzdGdvb20uYzogaW1wbGVtZW50YXRpb24gb2YgZ29vbSBkcmF3aW5nIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgPDIwMDE+IFJpY2hhcmQgQm91bHRvbiA8cmljaGFyZEB0YXJ0YXJ1cy5vcmc+Ci0gKiAgICAgICAgICAgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltIGF0IGZsdWVuZG8gZG90IGNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMTU+IEx1aXMgZGUgQmV0aGVuY291cnQgPGx1aXNAZGViZXRoZW5jb3VydC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9HT09NX0hfXwotI2RlZmluZSBfX0dTVF9HT09NX0hfXwotCi0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvZ3N0YXVkaW92aXN1YWxpemVyLmg+Ci0KLSNpbmNsdWRlICJnb29tX2NvcmUuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdPT00ySzFfU0FNUExFUyA1MTIKLQotI2RlZmluZSBHU1RfVFlQRV9HT09NMksxICAgICAgICAgICAgKGdzdF9nb29tMmsxX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9HT09NMksxKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfR09PTTJLMSxHc3RHb29tMmsxKSkKLSNkZWZpbmUgR1NUX0dPT00ySzFfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0dPT00ySzEsR3N0R29vbTJrMUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0dPT00ySzEob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9HT09NMksxKSkKLSNkZWZpbmUgR1NUX0lTX0dPT00ySzFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0dPT00ySzEpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0R29vbTJrMSBHc3RHb29tMmsxOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdvb20yazFDbGFzcyBHc3RHb29tMmsxQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0R29vbTJrMQotewotICBHc3RBdWRpb1Zpc3VhbGl6ZXIgcGFyZW50OwotCi0gIC8qIGlucHV0IHRyYWNraW5nICovCi0gIGdpbnQgY2hhbm5lbHM7Ci0KLSAgLyogdmlkZW8gc3RhdGUgKi8KLSAgZ2ludCB3aWR0aDsKLSAgZ2ludCBoZWlnaHQ7Ci0KLSAgLyogZ29vbSBzdHVmZiAqLwotICBHb29tRGF0YSBnb29tZGF0YTsKLX07Ci0KLXN0cnVjdCBfR3N0R29vbTJrMUNsYXNzCi17Ci0gIEdzdEF1ZGlvVmlzdWFsaXplckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9nb29tMmsxX2dldF90eXBlICh2b2lkKTsKLWdib29sZWFuIGdzdF9nb29tMmsxX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfR09PTV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2dvb20yazEvbGluZXMuYyBiL2dzdC9nb29tMmsxL2xpbmVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNGI2OGUuLjAwMDAwMDAKLS0tIGEvZ3N0L2dvb20yazEvbGluZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogIGxpbmVzLmMKLSAqICBpVHVuZXNYUGx1Z0luCi0gKgotICogIENyZWF0ZWQgYnkgZ3VpbGxhdW0gb24gVHVlIEF1ZyAxNCAyMDAxLgotICogIENvcHlyaWdodCAoYykgMjAwMSBfX0NvbXBhbnlOYW1lX18uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImxpbmVzLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIKLWxpZ2h0ZW4gKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGNoYXIgcG93ZXIpCi17Ci0gIHVuc2lnbmVkIGNoYXIgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgcG93ZXI7IGkrKykKLSAgICB2YWx1ZSArPSAoMjU1IC0gdmFsdWUpIC8gNTsKLSAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkCi1nb29tX2xpbmVzIChHb29tRGF0YSAqIGdvb21kYXRhLCBnaW50MTYgZGF0YVsyXVs1MTJdLCB1bnNpZ25lZCBpbnQgSUQsCi0gICAgdW5zaWduZWQgaW50ICpwLCBndWludDMyIHBvd2VyKQotewotICBndWludDMyIGNvbG9yMTsKLSAgZ3VpbnQzMiBjb2xvcjI7Ci0gIGd1aW50MzIgcmVzb2x4ID0gZ29vbWRhdGEtPnJlc29seDsKLSAgZ3VpbnQzMiByZXNvbHkgPSBnb29tZGF0YS0+cmVzb2x5OwotICB1bnNpZ25lZCBjaGFyICpjb2xvciA9IDEgKyAodW5zaWduZWQgY2hhciAqKSAmY29sb3IxOwotCi0gIHN3aXRjaCAoSUQpIHsKLSAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBIb3Jpem9udGFsIHN0ZXJlbyBsaW5lcyAqLwotICAgIHsKLSAgICAgIGNvbG9yMSA9IDB4MDAwMEFBMDA7Ci0gICAgICBjb2xvcjIgPSAweDAwQUEwMDAwOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogU3RlcmVvIGNpcmNsZXMgKi8KLSAgICB7Ci0gICAgICBjb2xvcjEgPSAweDAwQUEzM0REOwotICAgICAgY29sb3IyID0gMHgwMEFBMzNERDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OnsKLSAgICAgIGNvbG9yMSA9IGNvbG9yMiA9IDA7Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAqY29sb3IgPSBsaWdodGVuICgqY29sb3IsIHBvd2VyKTsKLSAgY29sb3IrKzsKLSAgKmNvbG9yID0gbGlnaHRlbiAoKmNvbG9yLCBwb3dlcik7Ci0gIGNvbG9yKys7Ci0gICpjb2xvciA9IGxpZ2h0ZW4gKCpjb2xvciwgcG93ZXIpOwotICBjb2xvciA9IDEgKyAodW5zaWduZWQgY2hhciAqKSAmY29sb3IyOwotICAqY29sb3IgPSBsaWdodGVuICgqY29sb3IsIHBvd2VyKTsKLSAgY29sb3IrKzsKLSAgKmNvbG9yID0gbGlnaHRlbiAoKmNvbG9yLCBwb3dlcik7Ci0gIGNvbG9yKys7Ci0gICpjb2xvciA9IGxpZ2h0ZW4gKCpjb2xvciwgcG93ZXIpOwotCi0gIHN3aXRjaCAoSUQpIHsKLSAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBIb3Jpem9udGFsIHN0ZXJlbyBsaW5lcyAqLwotICAgIHsKLSAgICAgIHVuc2lnbmVkIGludCBpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLSAgICAgICAgZ3VpbnQzMiBwbG90OwotCi0gICAgICAgIHBsb3QgPSBpICogcmVzb2x4IC8gNTEyICsgKHJlc29seSAvIDQgKyBkYXRhWzBdW2ldIC8gMTYwMCkgKiByZXNvbHg7Ci0gICAgICAgIHBbcGxvdF0gPSBjb2xvcjE7Ci0gICAgICAgIHBbcGxvdCArIDFdID0gY29sb3IxOwotICAgICAgICBwbG90ID0gaSAqIHJlc29seCAvIDUxMiArIChyZXNvbHkgKiAzIC8gNCAtIGRhdGFbMV1baV0gLyAxNjAwKSAqIHJlc29seDsKLSAgICAgICAgcFtwbG90XSA9IGNvbG9yMjsKLSAgICAgICAgcFtwbG90ICsgMV0gPSBjb2xvcjI7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAvKiBTdGVyZW8gY2lyY2xlcyAqLwotICAgIHsKLSAgICAgIGZsb2F0IHo7Ci0gICAgICB1bnNpZ25lZCBpbnQgbW9uWCA9IHJlc29seCAvIDI7Ci0gICAgICBmbG9hdCBtb25ZID0gKGZsb2F0KSByZXNvbHkgLyA0OwotICAgICAgZmxvYXQgbW9uWTIgPSAoZmxvYXQpIHJlc29seSAvIDI7Ci0KLSAgICAgIGZvciAoeiA9IDA7IHogPCA2LjI4MzJmOyB6ICs9IDEuMGYgLyBtb25ZKSB7Ci0gICAgICAgIC8qIGZsb2F0IG9mZnNldDEgPSAxMjgrZGF0YVsxXVsodW5zaWduZWQgaW50KSh6KjgxLjMzZildKS8yMDAwMDA7ICovCi0gICAgICAgIHBbbW9uWCArICh1bnNpZ25lZCBpbnQpICgobW9uWSArICgoZmxvYXQpIHJlc29seSkgKiAoMTI4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV1bKHVuc2lnbmVkIGludCkgKHogKiA4MS4zM2YpXSkgLyAyMDAwMDApICoKLSAgICAgICAgICAgICAgICBjb3MgKHopICsgcmVzb2x4ICogKHVuc2lnbmVkIGludCkgKG1vblkyICsgKG1vblkgKwotICAgICAgICAgICAgICAgICAgICAgICAgKChmbG9hdCkgcmVzb2x5KSAqICgxMjggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV1bKHVuc2lnbmVkIGludCkgKHogKiA4MS4zM2YpXSkgLyA0MDAwMDApICoKLSAgICAgICAgICAgICAgICAgICAgc2luICh6KSkpXSA9IGNvbG9yMTsKLSAgICAgICAgcFttb25YICsgKHVuc2lnbmVkIGludCkgKChtb25ZIC0gKChmbG9hdCkgcmVzb2x5KSAqICgxMjggKwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXVsodW5zaWduZWQgaW50KSAoeiAqIDgxLjMzZildKSAvIDIwMDAwMCkgKgotICAgICAgICAgICAgICAgIGNvcyAoeikgKyByZXNvbHggKiAodW5zaWduZWQgaW50KSAobW9uWTIgKyAobW9uWSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAoKGZsb2F0KSByZXNvbHkpICogKDEyOCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXVsodW5zaWduZWQgaW50KSAoeiAqIDgxLjMzZildKSAvIDQwMDAwMCkgKgotICAgICAgICAgICAgICAgICAgICBzaW4gKHopKSldID0gY29sb3IyOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvZ29vbTJrMS9saW5lcy5oIGIvZ3N0L2dvb20yazEvbGluZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZjMzOS4uMDAwMDAwMAotLS0gYS9nc3QvZ29vbTJrMS9saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoKLSAqICBsaW5lcy5oCi0gKiAgaUdvb20KLSAqCi0gKiAgQ3JlYXRlZCBieSBndWlsbGF1bSBvbiBUdWUgQXVnIDE0IDIwMDEuCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAxIGlvcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKi8KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpbmNsdWRlICJncmFwaGljLmgiCi0jaW5jbHVkZSAiZ29vbV9jb3JlLmgiCi0KLXZvaWQgZ29vbV9saW5lcyhHb29tRGF0YSAqZ29vbWRhdGEsIGdpbnQxNiBkYXRhIFsyXVs1MTJdLCB1bnNpZ25lZCBpbnQgSUQsdW5zaWduZWQgaW50KiBwLCBndWludDMyIHBvd2VyKTsKLQotCmRpZmYgLS1naXQgYS9nc3QvaWN5ZGVtdXgvTWFrZWZpbGUuYW0gYi9nc3QvaWN5ZGVtdXgvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZWQ2NDkuLjAwMDAwMDAKLS0tIGEvZ3N0L2ljeWRlbXV4L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RpY3lkZW11eC5sYQotCi1saWJnc3RpY3lkZW11eF9sYV9TT1VSQ0VTID0gZ3N0aWN5ZGVtdXguYwotbGliZ3N0aWN5ZGVtdXhfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGljeWRlbXV4X2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHRhZy1AR1NUX0FQSV9WRVJTSU9OQCAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi1saWJnc3RpY3lkZW11eF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RpY3lkZW11eF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGljeWRlbXV4LmgKZGlmZiAtLWdpdCBhL2dzdC9pY3lkZW11eC9NYWtlZmlsZS5pbiBiL2dzdC9pY3lkZW11eC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5ZmI4Ni4uMDAwMDAwMAotLS0gYS9nc3QvaWN5ZGVtdXgvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MDkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2ljeWRlbXV4Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0aWN5ZGVtdXhfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RpY3lkZW11eF9sYV9PQkpFQ1RTID0gbGliZ3N0aWN5ZGVtdXhfbGEtZ3N0aWN5ZGVtdXgubG8KLWxpYmdzdGljeWRlbXV4X2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGljeWRlbXV4X2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RpY3lkZW11eF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGljeWRlbXV4X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0aWN5ZGVtdXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0aWN5ZGVtdXhfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0aWN5ZGVtdXhfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0aWN5ZGVtdXhfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0aWN5ZGVtdXgubGEKLWxpYmdzdGljeWRlbXV4X2xhX1NPVVJDRVMgPSBnc3RpY3lkZW11eC5jCi1saWJnc3RpY3lkZW11eF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0aWN5ZGVtdXhfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLWxpYmdzdGljeWRlbXV4X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGljeWRlbXV4X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGljeWRlbXV4LmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9pY3lkZW11eC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvaWN5ZGVtdXgvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RpY3lkZW11eC5sYTogJChsaWJnc3RpY3lkZW11eF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGljeWRlbXV4X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RpY3lkZW11eF9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0aWN5ZGVtdXhfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGljeWRlbXV4X2xhX09CSkVDVFMpICQobGliZ3N0aWN5ZGVtdXhfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RpY3lkZW11eF9sYS1nc3RpY3lkZW11eC5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0aWN5ZGVtdXhfbGEtZ3N0aWN5ZGVtdXgubG86IGdzdGljeWRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RpY3lkZW11eF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RpY3lkZW11eF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aWN5ZGVtdXhfbGEtZ3N0aWN5ZGVtdXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGljeWRlbXV4X2xhLWdzdGljeWRlbXV4LlRwbyAtYyAtbyBsaWJnc3RpY3lkZW11eF9sYS1nc3RpY3lkZW11eC5sbyBgdGVzdCAtZiAnZ3N0aWN5ZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aWN5ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aWN5ZGVtdXhfbGEtZ3N0aWN5ZGVtdXguVHBvICQoREVQRElSKS9saWJnc3RpY3lkZW11eF9sYS1nc3RpY3lkZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RpY3lkZW11eC5jJyBvYmplY3Q9J2xpYmdzdGljeWRlbXV4X2xhLWdzdGljeWRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aWN5ZGVtdXhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aWN5ZGVtdXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aWN5ZGVtdXhfbGEtZ3N0aWN5ZGVtdXgubG8gYHRlc3QgLWYgJ2dzdGljeWRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGljeWRlbXV4LmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmMgYi9nc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJmZGFkMi4uMDAwMDAwMAotLS0gYS9nc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDY3NyArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KLS8qIENvcHlyaWdodCAyMDA1IEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotICogICAgICAgICAgIDIwMDYgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtaWN5ZGVtdXgKLSAqCi0gKiBpY3lkZW11eCBhY2NlcHRzIGRhdGEgc3RyZWFtcyB3aXRoIElDWSBtZXRhZGF0YSBhdCBrbm93biBpbnRlcnZhbHMsIGFzCi0gKiB0cmFuc21pdHRlZCBmcm9tIGFuIHVwc3RyZWFtIGVsZW1lbnQgKHVzdWFsbHkgcmVhZCBhcyByZXNwb25zZSBoZWFkZXJzIGZyb20KLSAqIGFuIEhUVFAgc3RyZWFtKS4gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZGF0YSBiZXR3ZWVuIHRoZSB0YWcgYmxvY2tzIGlzCi0gKiBkZXRlY3RlZCB1c2luZyB0eXBlZmluZCBmdW5jdGlvbnMsIGFuZCB0aGUgYXBwcm9wcmlhdGUgb3V0cHV0IG1pbWUgdHlwZSBzZXQKLSAqIG9uIG91dGdvaW5nIGJ1ZmZlcnMuIAotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBzb3VwaHR0cHNyYyBsb2NhdGlvbj1odHRwOi8vc29tZS5zZXJ2ZXIvIGlyYWRpby1tb2RlPXRydWUgISBpY3lkZW11eCAhIGZha2VzaW5rIC10Ci0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3VsZCByZWFkIGFueSBhdmFpbGFibGUgSUNZIHRhZyBpbmZvcm1hdGlvbiBhbmQgb3V0cHV0IGl0LgotICogVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJlYW0gc2hvdWxkIGJlIGRldGVjdGVkLCBhbmQgdGhlIGFwcHJvcHJpYXRlIG1pbWUKLSAqIHR5cGUgc2V0IG9uIGJ1ZmZlcnMgcHJvZHVjZWQgZnJvbSBpY3lkZW11eC4gKFVzaW5nIGdub21ldmZzc3JjLCBuZW9uaHR0cHNyYwotICogb3IgZ2lvc3JjIGluc3RlYWQgb2Ygc291cGh0dHBzcmMgc2hvdWxkIGFsc28gd29yay4pCi0gKiA8L3JlZnNlY3QyPgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotCi0jaW5jbHVkZSAiZ3N0aWN5ZGVtdXguaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIElDWV9UWVBFX0ZJTkRfTUFYX1NJWkUgKDQwKjEwMjQpCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGljeWRlbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChpY3lkZW11eF9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtaWN5LCBtZXRhZGF0YS1pbnRlcnZhbCA9IChpbnQpWzAsIE1BWF0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJBTlkiKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9pY3lkZW11eF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ljeWRlbXV4X2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9pY3lkZW11eF9oYW5kbGVfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ljeWRlbXV4X2FkZF9zcmNwYWQgKEdzdElDWURlbXV4ICogaWN5ZGVtdXgsCi0gICAgR3N0Q2FwcyAqIG5ld19jYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaWN5ZGVtdXhfcmVtb3ZlX3NyY3BhZCAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfaWN5ZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaWN5ZGVtdXhfc2lua19zZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9pY3lkZW11eF9zZW5kX3RhZ19ldmVudCAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCwKLSAgICBHc3RUYWdMaXN0ICogdGFnbGlzdCk7Ci0KLQotI2RlZmluZSBnc3RfaWN5ZGVtdXhfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0SUNZRGVtdXgsIGdzdF9pY3lkZW11eCwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWN5ZGVtdXhfY2xhc3NfaW5pdCAoR3N0SUNZRGVtdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3JlZiAoR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9pY3lkZW11eF9kaXNwb3NlOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9pY3lkZW11eF9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiSUNZIHRhZyBkZW11eGVyIiwKLSAgICAgICJDb2RlYy9EZW11eGVyL01ldGFkYXRhIiwKLSAgICAgICJSZWFkIGFuZCBvdXRwdXQgSUNZIHRhZ3Mgd2hpbGUgZGVtdXhpbmcgdGhlIGNvbnRlbnRzIiwKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4sICIKLSAgICAgICJNaWNoYWVsIFNtaXRoIDxtc21pdGhAZmx1ZW5kby5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWN5ZGVtdXhfcmVzZXQgKEdzdElDWURlbXV4ICogaWN5ZGVtdXgpCi17Ci0gIC8qIFVua25vd24gYXQgdGhlIG1vbWVudCAodGhpcyBpcyBhIGZhdGFsIGVycm9yIGlmIGRvbid0IGhhdmUgYSB2YWx1ZSBieSB0aGUKLSAgICogdGltZSB3ZSBnZXQgdG8gb3VyIGNoYWluIGZ1bmN0aW9uKQotICAgKi8KLSAgaWN5ZGVtdXgtPm1ldGFfaW50ZXJ2YWwgPSAtMTsKLSAgaWN5ZGVtdXgtPnJlbWFpbmluZyA9IDA7Ci0KLSAgaWN5ZGVtdXgtPnR5cGVmaW5kaW5nID0gVFJVRTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmKGljeWRlbXV4LT5zcmNfY2FwcyksIE5VTEwpOwotCi0gIGdzdF9pY3lkZW11eF9yZW1vdmVfc3JjcGFkIChpY3lkZW11eCk7Ci0KLSAgaWYgKGljeWRlbXV4LT5jYWNoZWRfdGFncykgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoaWN5ZGVtdXgtPmNhY2hlZF90YWdzKTsKLSAgICBpY3lkZW11eC0+Y2FjaGVkX3RhZ3MgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGljeWRlbXV4LT5jYWNoZWRfZXZlbnRzKSB7Ci0gICAgZ19saXN0X2ZvcmVhY2ggKGljeWRlbXV4LT5jYWNoZWRfZXZlbnRzLAotICAgICAgICAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gICAgZ19saXN0X2ZyZWUgKGljeWRlbXV4LT5jYWNoZWRfZXZlbnRzKTsKLSAgICBpY3lkZW11eC0+Y2FjaGVkX2V2ZW50cyA9IE5VTEw7Ci0gIH0KLQotICBpZiAoaWN5ZGVtdXgtPm1ldGFfYWRhcHRlcikgewotICAgIGdzdF9hZGFwdGVyX2NsZWFyIChpY3lkZW11eC0+bWV0YV9hZGFwdGVyKTsKLSAgICBnX29iamVjdF91bnJlZiAoaWN5ZGVtdXgtPm1ldGFfYWRhcHRlcik7Ci0gICAgaWN5ZGVtdXgtPm1ldGFfYWRhcHRlciA9IE5VTEw7Ci0gIH0KLQotICBpZiAoaWN5ZGVtdXgtPnR5cGVmaW5kX2J1ZikgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGljeWRlbXV4LT50eXBlZmluZF9idWYpOwotICAgIGljeWRlbXV4LT50eXBlZmluZF9idWYgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGljeWRlbXV4LT5jb250ZW50X3R5cGUpIHsKLSAgICBnX2ZyZWUgKGljeWRlbXV4LT5jb250ZW50X3R5cGUpOwotICAgIGljeWRlbXV4LT5jb250ZW50X3R5cGUgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWN5ZGVtdXhfaW5pdCAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCkKLXsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoaWN5ZGVtdXgpOwotCi0gIGljeWRlbXV4LT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzaW5rIiksICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChpY3lkZW11eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWN5ZGVtdXhfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGljeWRlbXV4LT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pY3lkZW11eF9oYW5kbGVfZXZlbnQpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGljeWRlbXV4KSwgaWN5ZGVtdXgtPnNpbmtwYWQpOwotCi0gIGdzdF9pY3lkZW11eF9yZXNldCAoaWN5ZGVtdXgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pY3lkZW11eF9zaW5rX3NldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdElDWURlbXV4ICppY3lkZW11eCA9IEdTVF9JQ1lERU1VWCAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBjb25zdCBnY2hhciAqdG1wOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJtZXRhZGF0YS1pbnRlcnZhbCIsCi0gICAgICAgICAgJmljeWRlbXV4LT5tZXRhX2ludGVydmFsKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogSWYgaW5jb21pbmcgY2FwcyBoYXZlIHRoZSBIVFRQIENvbnRlbnQtVHlwZSwgY29weSB0aGF0IG92ZXIgKi8KLSAgaWYgKCh0bXAgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImNvbnRlbnQtdHlwZSIpKSkKLSAgICBpY3lkZW11eC0+Y29udGVudF90eXBlID0gZ19zdHJkdXAgKHRtcCk7Ci0KLSAgLyogV2UgaGF2ZSBhIG1ldGEgaW50ZXJ2YWwsIHNvIGluaXRpYWxpc2UgdGhlIHJlc3QgKi8KLSAgaWN5ZGVtdXgtPnJlbWFpbmluZyA9IGljeWRlbXV4LT5tZXRhX2ludGVydmFsOwotICBpY3lkZW11eC0+bWV0YV9yZW1haW5pbmcgPSAwOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pY3lkZW11eF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RJQ1lEZW11eCAqaWN5ZGVtdXggPSBHU1RfSUNZREVNVVggKG9iamVjdCk7Ci0KLSAgZ3N0X2ljeWRlbXV4X3Jlc2V0IChpY3lkZW11eCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZCAqcGFkOwotfSBDb3B5U3RpY2t5RXZlbnRzRGF0YTsKLQotc3RhdGljIGdib29sZWFuCi1jb3B5X3N0aWNreV9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQ29weVN0aWNreUV2ZW50c0RhdGEgKmRhdGEgPSB1c2VyX2RhdGE7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFICgqZXZlbnQpID49IEdTVF9FVkVOVF9DQVBTICYmIGRhdGEtPmNhcHMpIHsKLSAgICBnc3RfcGFkX3NldF9jYXBzIChkYXRhLT5wYWQsIGRhdGEtPmNhcHMpOwotICAgIGRhdGEtPmNhcHMgPSBOVUxMOwotICB9Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFICgqZXZlbnQpICE9IEdTVF9FVkVOVF9DQVBTKQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGF0YS0+cGFkLCBnc3RfZXZlbnRfcmVmICgqZXZlbnQpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaWN5ZGVtdXhfYWRkX3NyY3BhZCAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCwgR3N0Q2FwcyAqIG5ld19jYXBzKQotewotICBpZiAoaWN5ZGVtdXgtPnNyY19jYXBzID09IE5VTEwgfHwKLSAgICAgICFnc3RfY2Fwc19pc19lcXVhbCAobmV3X2NhcHMsIGljeWRlbXV4LT5zcmNfY2FwcykpIHsKLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmKGljeWRlbXV4LT5zcmNfY2FwcyksIG5ld19jYXBzKTsKLSAgICBpZiAoaWN5ZGVtdXgtPnNyY3BhZCAhPSBOVUxMKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChpY3lkZW11eCwgIkNoYW5naW5nIHNyYyBwYWQgY2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgICBpY3lkZW11eC0+c3JjX2NhcHMpOwotCi0gICAgICBnc3RfcGFkX3NldF9jYXBzIChpY3lkZW11eC0+c3JjcGFkLCBpY3lkZW11eC0+c3JjX2NhcHMpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBDYXBzIG5ldmVyIGNoYW5nZWQgKi8KLSAgICBnc3RfY2Fwc191bnJlZiAobmV3X2NhcHMpOwotICB9Ci0KLSAgaWYgKGljeWRlbXV4LT5zcmNwYWQgPT0gTlVMTCkgewotICAgIENvcHlTdGlja3lFdmVudHNEYXRhIGRhdGE7Ci0KLSAgICBpY3lkZW11eC0+c3JjcGFkID0KLSAgICAgICAgZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZQotICAgICAgICAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChpY3lkZW11eCksICJzcmMiKSwgInNyYyIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpY3lkZW11eC0+c3JjcGFkICE9IE5VTEwsIEZBTFNFKTsKLQotICAgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGljeWRlbXV4LT5zcmNwYWQpOwotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoaWN5ZGVtdXgtPnNyY3BhZCwgVFJVRSk7Ci0KLSAgICBkYXRhLnBhZCA9IGljeWRlbXV4LT5zcmNwYWQ7Ci0gICAgZGF0YS5jYXBzID0gaWN5ZGVtdXgtPnNyY19jYXBzOwotICAgIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChpY3lkZW11eC0+c2lua3BhZCwgY29weV9zdGlja3lfZXZlbnRzLAotICAgICAgICAmZGF0YSk7Ci0gICAgaWYgKGRhdGEuY2FwcykKLSAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKGRhdGEucGFkLCBkYXRhLmNhcHMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoaWN5ZGVtdXgsICJBZGRpbmcgc3JjIHBhZCB3aXRoIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIGljeWRlbXV4LT5zcmNfY2Fwcyk7Ci0KLSAgICBpZiAoIShnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoaWN5ZGVtdXgpLCBpY3lkZW11eC0+c3JjcGFkKSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzIChHU1RfRUxFTUVOVCAoaWN5ZGVtdXgpKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pY3lkZW11eF9yZW1vdmVfc3JjcGFkIChHc3RJQ1lEZW11eCAqIGljeWRlbXV4KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGlmIChpY3lkZW11eC0+c3JjcGFkICE9IE5VTEwpIHsKLSAgICByZXMgPSBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVCAoaWN5ZGVtdXgpLCBpY3lkZW11eC0+c3JjcGFkKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzICE9IEZBTFNFLCBGQUxTRSk7Ci0gICAgaWN5ZGVtdXgtPnNyY3BhZCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfTsKLQotc3RhdGljIGdjaGFyICoKLWdzdF9pY3lkZW11eF91bmljb2RpZnkgKGNvbnN0IGdjaGFyICogc3RyKQotewotICBjb25zdCBnY2hhciAqZW52X3ZhcnNbXSA9IHsgIkdTVF9JQ1lfVEFHX0VOQ09ESU5HIiwKLSAgICAiR1NUX1RBR19FTkNPRElORyIsIE5VTEwKLSAgfTsKLQotICByZXR1cm4gZ3N0X3RhZ19mcmVlZm9ybV9zdHJpbmdfdG9fdXRmOCAoc3RyLCAtMSwgZW52X3ZhcnMpOwotfQotCi0vKiB0YWtlcyBvd25lcnNoaXAgb2YgdGFnIGxpc3QgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ljeWRlbXV4X3RhZ19mb3VuZCAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCwgR3N0VGFnTGlzdCAqIHRhZ3MpCi17Ci0gIC8qIHNlbmQgdGhlIHRhZyBldmVudCBpZiB3ZSBoYXZlIGZpbmlzaGVkIHR5cGVmaW5kaW5nIGFuZCBoYXZlIGEgc3JjIHBhZCAqLwotICBpZiAoaWN5ZGVtdXgtPnNyY3BhZCkKLSAgICByZXR1cm4gZ3N0X2ljeWRlbXV4X3NlbmRfdGFnX2V2ZW50IChpY3lkZW11eCwgdGFncyk7Ci0KLSAgLyogaWYgd2UgaGF2ZW4ndCBhIHNvdXJjZSBwYWQgeWV0LCBjYWNoZSB0aGUgdGFncyAqLwotICBpZiAoIWljeWRlbXV4LT5jYWNoZWRfdGFncykgewotICAgIGljeWRlbXV4LT5jYWNoZWRfdGFncyA9IHRhZ3M7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3RhZ19saXN0X2luc2VydCAoaWN5ZGVtdXgtPmNhY2hlZF90YWdzLCB0YWdzLAotICAgICAgICBHU1RfVEFHX01FUkdFX1JFUExBQ0VfQUxMKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWN5ZGVtdXhfcGFyc2VfYW5kX3NlbmRfdGFncyAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCkKLXsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICBpbnQgbGVuZ3RoLCBpOwotICBnYm9vbGVhbiB0YWdzX2ZvdW5kID0gRkFMU0U7Ci0gIGdjaGFyICpidWZmZXI7Ci0gIGdjaGFyICoqc3RyaW5nczsKLQotICBsZW5ndGggPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGljeWRlbXV4LT5tZXRhX2FkYXB0ZXIpOwotCi0gIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKGljeWRlbXV4LT5tZXRhX2FkYXB0ZXIsIGxlbmd0aCk7Ci0KLSAgLyogTm93LCBjb3B5IHRoaXMgdG8gYSBidWZmZXIgd2hlcmUgd2UgY2FuIE5VTEwtdGVybWluYXRlIGl0IHRvIG1ha2UgdGhpbmdzCi0gICAqIGEgYml0IGVhc2llciwgdGhlbiBkbyB0aGF0IHBhcnNpbmcuICovCi0gIGJ1ZmZlciA9IGdfc3RybmR1cCAoKGNvbnN0IGdjaGFyICopIGRhdGEsIGxlbmd0aCk7Ci0KLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIHN0cmluZ3MgPSBnX3N0cnNwbGl0IChidWZmZXIsICInOyIsIDApOwotCi0gIGZvciAoaSA9IDA7IHN0cmluZ3NbaV07IGkrKykgewotICAgIGlmICghZ19hc2NpaV9zdHJuY2FzZWNtcCAoc3RyaW5nc1tpXSwgIlN0cmVhbVRpdGxlPSIsIDEyKSkgewotICAgICAgY2hhciAqdGl0bGUgPSBnc3RfaWN5ZGVtdXhfdW5pY29kaWZ5IChzdHJpbmdzW2ldICsgMTMpOwotICAgICAgdGFnc19mb3VuZCA9IFRSVUU7Ci0KLSAgICAgIGlmICh0aXRsZSAmJiAqdGl0bGUpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJVExFLAotICAgICAgICAgICAgdGl0bGUsIE5VTEwpOwotICAgICAgICBnX2ZyZWUgKHRpdGxlKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFnX2FzY2lpX3N0cm5jYXNlY21wIChzdHJpbmdzW2ldLCAiU3RyZWFtVXJsPSIsIDEwKSkgewotICAgICAgY2hhciAqdXJsID0gZ3N0X2ljeWRlbXV4X3VuaWNvZGlmeSAoc3RyaW5nc1tpXSArIDExKTsKLSAgICAgIHRhZ3NfZm91bmQgPSBUUlVFOwotCi0gICAgICBpZiAodXJsICYmICp1cmwpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX0hPTUVQQUdFLAotICAgICAgICAgICAgdXJsLCBOVUxMKTsKLSAgICAgICAgZ19mcmVlICh1cmwpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGdfc3RyZnJlZXYgKHN0cmluZ3MpOwotICBnX2ZyZWUgKGJ1ZmZlcik7Ci0gIGdzdF9hZGFwdGVyX3VubWFwIChpY3lkZW11eC0+bWV0YV9hZGFwdGVyKTsKLSAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGljeWRlbXV4LT5tZXRhX2FkYXB0ZXIsIGxlbmd0aCk7Ci0KLSAgaWYgKHRhZ3NfZm91bmQpCi0gICAgZ3N0X2ljeWRlbXV4X3RhZ19mb3VuZCAoaWN5ZGVtdXgsIHRhZ3MpOwotICBlbHNlCi0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaWN5ZGVtdXhfaGFuZGxlX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SUNZRGVtdXggKmljeWRlbXV4ID0gR1NUX0lDWURFTVVYIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgIHsKLSAgICAgIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFncyk7Ci0gICAgICByZXN1bHQgPSBnc3RfaWN5ZGVtdXhfdGFnX2ZvdW5kIChpY3lkZW11eCwgZ3N0X3RhZ19saXN0X2NvcHkgKHRhZ3MpKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIHJlc3VsdCA9IGdzdF9pY3lkZW11eF9zaW5rX3NldGNhcHMgKHBhZCwgY2Fwcyk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChpY3lkZW11eC0+dHlwZWZpbmRpbmcpIHsKLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICAgIGdfbGlzdF9mb3JlYWNoIChpY3lkZW11eC0+Y2FjaGVkX2V2ZW50cywKLSAgICAgICAgICAgIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgICAgICAgZ19saXN0X2ZyZWUgKGljeWRlbXV4LT5jYWNoZWRfZXZlbnRzKTsKLSAgICAgICAgaWN5ZGVtdXgtPmNhY2hlZF9ldmVudHMgPSBOVUxMOwotCi0gICAgICAgIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIUdTVF9FVkVOVF9JU19TVElDS1kgKGV2ZW50KSkgewotICAgICAgICAgIGljeWRlbXV4LT5jYWNoZWRfZXZlbnRzID0KLSAgICAgICAgICAgICAgZ19saXN0X2FwcGVuZCAoaWN5ZGVtdXgtPmNhY2hlZF9ldmVudHMsIGV2ZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ljeWRlbXV4X3NlbmRfY2FjaGVkX2V2ZW50cyAoR3N0SUNZRGVtdXggKiBpY3lkZW11eCkKLXsKLSAgR0xpc3QgKmw7Ci0KLSAgZm9yIChsID0gaWN5ZGVtdXgtPmNhY2hlZF9ldmVudHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfRVZFTlQgKGwtPmRhdGEpOwotCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChpY3lkZW11eC0+c3JjcGFkLCBldmVudCk7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKGljeWRlbXV4LT5jYWNoZWRfZXZlbnRzKTsKLSAgaWN5ZGVtdXgtPmNhY2hlZF9ldmVudHMgPSBOVUxMOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ljeWRlbXV4X3R5cGVmaW5kX29yX2ZvcndhcmQgKEdzdElDWURlbXV4ICogaWN5ZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgaWYgKGljeWRlbXV4LT50eXBlZmluZGluZykgewotICAgIEdzdEJ1ZmZlciAqdGZfYnVmOwotICAgIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgcHJvYjsKLQotICAgIC8qIElmIHdlIGhhdmUgYSBjb250ZW50LXR5cGUgZnJvbSB1cHN0cmVhbSwgbGV0J3Mgc2VlIGlmIHdlIGNhbiBzaG9ydGN1dAotICAgICAqIHR5cGVmaW5kaW5nICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGljeWRlbXV4LT5jb250ZW50X3R5cGUpKSB7Ci0gICAgICBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcCAoaWN5ZGVtdXgtPmNvbnRlbnRfdHlwZSwgInZpZGVvL25zdiIpKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIldlIGhhdmUgYSBOU1Ygc3RyZWFtIik7Ci0gICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1uc3YiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIlVwc3RyZWFtIENvbnRlbnQtVHlwZSBpc24ndCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgZ19mcmVlIChpY3lkZW11eC0+Y29udGVudF90eXBlKTsKLSAgICAgICAgaWN5ZGVtdXgtPmNvbnRlbnRfdHlwZSA9IE5VTEw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGljeWRlbXV4LT50eXBlZmluZF9idWYpIHsKLSAgICAgIGljeWRlbXV4LT50eXBlZmluZF9idWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAoaWN5ZGVtdXgtPnR5cGVmaW5kX2J1ZiwgYnVmKTsKLSAgICB9IGVsc2UgewotICAgICAgaWN5ZGVtdXgtPnR5cGVmaW5kX2J1ZiA9IGJ1ZjsKLSAgICB9Ci0KLSAgICAvKiBPbmx5IHR5cGVmaW5kIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBnb3Qgc29tZSBjYXBzICovCi0gICAgaWYgKGNhcHMgPT0gTlVMTCkgewotICAgICAgY2FwcyA9IGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgKEdTVF9PQkpFQ1QgKGljeWRlbXV4KSwKLSAgICAgICAgICBpY3lkZW11eC0+dHlwZWZpbmRfYnVmLCAmcHJvYik7Ci0KLSAgICAgIGlmIChjYXBzID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGljeWRlbXV4LT50eXBlZmluZF9idWYpIDwKLSAgICAgICAgICAgIElDWV9UWVBFX0ZJTkRfTUFYX1NJWkUpIHsKLSAgICAgICAgICAvKiBKdXN0IGJyZWFrIGZvciBtb3JlIGRhdGEgKi8KLSAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBXZSBmYWlsZWQgdHlwZWZpbmQgKi8KLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGljeWRlbXV4LCBTVFJFQU0sIFRZUEVfTk9UX0ZPVU5ELCAoTlVMTCksCi0gICAgICAgICAgICAoIk5vIGNhcHMgZm91bmQgZm9yIGNvbnRlbnRzIHdpdGhpbiBhbiBJQ1kgc3RyZWFtIikpOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChpY3lkZW11eC0+dHlwZWZpbmRfYnVmKTsKLSAgICAgICAgaWN5ZGVtdXgtPnR5cGVmaW5kX2J1ZiA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWdzdF9pY3lkZW11eF9hZGRfc3JjcGFkIChpY3lkZW11eCwgY2FwcykpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGljeWRlbXV4LCAiRmFpbGVkIHRvIGFkZCBzcmNwYWQiKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGljeWRlbXV4LT50eXBlZmluZF9idWYpOwotICAgICAgaWN5ZGVtdXgtPnR5cGVmaW5kX2J1ZiA9IE5VTEw7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChpY3lkZW11eC0+Y2FjaGVkX2V2ZW50cykgewotICAgICAgZ3N0X2ljeWRlbXV4X3NlbmRfY2FjaGVkX2V2ZW50cyAoaWN5ZGVtdXgpOwotICAgIH0KLQotICAgIGlmIChpY3lkZW11eC0+Y2FjaGVkX3RhZ3MpIHsKLSAgICAgIGdzdF9pY3lkZW11eF9zZW5kX3RhZ19ldmVudCAoaWN5ZGVtdXgsIGljeWRlbXV4LT5jYWNoZWRfdGFncyk7Ci0gICAgICBpY3lkZW11eC0+Y2FjaGVkX3RhZ3MgPSBOVUxMOwotICAgIH0KLQotICAgIC8qIE1vdmUgb250byBzdHJlYW1pbmc6IGNhbGwgb3Vyc2VsdmVzIHJlY3Vyc2l2ZWx5IHdpdGggdGhlIHR5cGVmaW5kIGJ1ZmZlcgotICAgICAqIHRvIGdldCB0aGF0IGZvcndhcmRlZC4gKi8KLSAgICBpY3lkZW11eC0+dHlwZWZpbmRpbmcgPSBGQUxTRTsKLQotICAgIHRmX2J1ZiA9IGljeWRlbXV4LT50eXBlZmluZF9idWY7Ci0gICAgaWN5ZGVtdXgtPnR5cGVmaW5kX2J1ZiA9IE5VTEw7Ci0gICAgcmV0dXJuIGdzdF9pY3lkZW11eF90eXBlZmluZF9vcl9mb3J3YXJkIChpY3lkZW11eCwgdGZfYnVmKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoaWN5ZGVtdXgtPnNyY3BhZCA9PSBOVUxMKSkgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0KLSAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0KLSAgICAvKiBNb3N0IHRoaW5ncyBkb24ndCBjYXJlLCBhbmQgaXQncyBhIHBhaW4gdG8gdHJhY2sgKHdlIHNob3VsZCBwcmVzZXJ2ZSBhCi0gICAgICogMCBvZmZzZXQgb24gdGhlIGZpcnN0IGJ1ZmZlciB0aG91Z2ggaWYgaXQncyB0aGVyZSwgZm9yIGlkM2RlbXV4IGV0Yy4pICovCi0gICAgaWYgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpICE9IDApIHsKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3N0X3BhZF9wdXNoIChpY3lkZW11eC0+c3JjcGFkLCBidWYpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaWN5ZGVtdXhfYWRkX21ldGEgKEdzdElDWURlbXV4ICogaWN5ZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgaWYgKCFpY3lkZW11eC0+bWV0YV9hZGFwdGVyKQotICAgIGljeWRlbXV4LT5tZXRhX2FkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoaWN5ZGVtdXgtPm1ldGFfYWRhcHRlciwgYnVmKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9pY3lkZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0SUNZRGVtdXggKmljeWRlbXV4OwotICBndWludCBzaXplLCBjaHVuaywgb2Zmc2V0OwotICBHc3RCdWZmZXIgKnN1YjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBpY3lkZW11eCA9IEdTVF9JQ1lERU1VWCAocGFyZW50KTsKLQotICBpZiAoR19VTkxJS0VMWSAoaWN5ZGVtdXgtPm1ldGFfaW50ZXJ2YWwgPCAwKSkKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIGlmIChpY3lkZW11eC0+bWV0YV9pbnRlcnZhbCA9PSAwKSB7Ci0gICAgcmV0ID0gZ3N0X2ljeWRlbXV4X3R5cGVmaW5kX29yX2ZvcndhcmQgKGljeWRlbXV4LCBidWYpOwotICAgIGJ1ZiA9IE5VTEw7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogR28gdGhyb3VnaCB0aGUgYnVmZmVyLCBjaG9wcGluZyBpdCBpbnRvIGFwcHJvcHJpYXRlIGNodW5rcy4gRm9yd2FyZCBhcwotICAgKiB0YWdzIG9yIGJ1ZmZlcnMsIGFzIGFwcHJvcHJpYXRlCi0gICAqLwotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgb2Zmc2V0ID0gMDsKLSAgd2hpbGUgKHNpemUpIHsKLSAgICBpZiAoaWN5ZGVtdXgtPnJlbWFpbmluZykgewotICAgICAgY2h1bmsgPSAoc2l6ZSA8PSBpY3lkZW11eC0+cmVtYWluaW5nKSA/IHNpemUgOiBpY3lkZW11eC0+cmVtYWluaW5nOwotICAgICAgaWYgKG9mZnNldCA9PSAwICYmIGNodW5rID09IHNpemUpIHsKLSAgICAgICAgc3ViID0gYnVmOwotICAgICAgICBidWYgPSBOVUxMOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3ViID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBvZmZzZXQsIGNodW5rKTsKLSAgICAgIH0KLSAgICAgIG9mZnNldCArPSBjaHVuazsKLSAgICAgIGljeWRlbXV4LT5yZW1haW5pbmcgLT0gY2h1bms7Ci0gICAgICBzaXplIC09IGNodW5rOwotCi0gICAgICAvKiBUaGlzIGJ1ZmZlciBnb2VzIG9udG8gdHlwZWZpbmRpbmcsIGFuZC9vciBkaXJlY3RseSBwdXNoZWQgb3V0ICovCi0gICAgICByZXQgPSBnc3RfaWN5ZGVtdXhfdHlwZWZpbmRfb3JfZm9yd2FyZCAoaWN5ZGVtdXgsIHN1Yik7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfSBlbHNlIGlmIChpY3lkZW11eC0+bWV0YV9yZW1haW5pbmcpIHsKLSAgICAgIGNodW5rID0gKHNpemUgPD0gaWN5ZGVtdXgtPm1ldGFfcmVtYWluaW5nKSA/Ci0gICAgICAgICAgc2l6ZSA6IGljeWRlbXV4LT5tZXRhX3JlbWFpbmluZzsKLSAgICAgIHN1YiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgb2Zmc2V0LCBjaHVuayk7Ci0gICAgICBnc3RfaWN5ZGVtdXhfYWRkX21ldGEgKGljeWRlbXV4LCBzdWIpOwotCi0gICAgICBvZmZzZXQgKz0gY2h1bms7Ci0gICAgICBpY3lkZW11eC0+bWV0YV9yZW1haW5pbmcgLT0gY2h1bms7Ci0gICAgICBzaXplIC09IGNodW5rOwotCi0gICAgICBpZiAoaWN5ZGVtdXgtPm1ldGFfcmVtYWluaW5nID09IDApIHsKLSAgICAgICAgLyogUGFyc2UgdGFncyBmcm9tIG1ldGFfYWRhcHRlciwgc2VuZCBvZmYgYXMgdGFnIG1lc3NhZ2VzICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGljeWRlbXV4LCAiTm8gcmVtYWluaW5nIG1ldGFkYXRhLCBwYXJzaW5nIGZvciB0YWdzIik7Ci0gICAgICAgIGdzdF9pY3lkZW11eF9wYXJzZV9hbmRfc2VuZF90YWdzIChpY3lkZW11eCk7Ci0KLSAgICAgICAgaWN5ZGVtdXgtPnJlbWFpbmluZyA9IGljeWRlbXV4LT5tZXRhX2ludGVydmFsOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBndWludDggYnl0ZTsKLSAgICAgIC8qIFdlIG5lZWQgdG8gcmVhZCBhIHNpbmdsZSBieXRlIChhbHdheXMgc2FmZSBhdCB0aGlzIHBvaW50IGluIHRoZSBsb29wKQotICAgICAgICogdG8gZmlndXJlIG91dCBob3cgbWFueSBieXRlcyBvZiBtZXRhZGF0YSBleGlzdC4gCi0gICAgICAgKiBUaGUgJ3NwZWMnIHRlbGxzIHVzIHRvIHJlYWQgMTYgKiAoYnl0ZV92YWx1ZSkgYnl0ZXMgb2YgbWV0YWRhdGEgYWZ0ZXIKLSAgICAgICAqIHRoaXMgKHplcm8gaXMgY29tbW9uLCBhbmQgbWVhbnMgdGhlIG1ldGFkYXRhIGhhc24ndCBjaGFuZ2VkKS4KLSAgICAgICAqLwotICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWYsIG9mZnNldCwgJmJ5dGUsIDEpOwotICAgICAgaWN5ZGVtdXgtPm1ldGFfcmVtYWluaW5nID0gMTYgKiBieXRlOwotICAgICAgaWYgKGljeWRlbXV4LT5tZXRhX3JlbWFpbmluZyA9PSAwKQotICAgICAgICBpY3lkZW11eC0+cmVtYWluaW5nID0gaWN5ZGVtdXgtPm1ldGFfaW50ZXJ2YWw7Ci0KLSAgICAgIG9mZnNldCArPSAxOwotICAgICAgc2l6ZSAtPSAxOwotICAgIH0KLSAgfQotCi1kb25lOgotICBpZiAoYnVmKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChpY3lkZW11eCwgIm1ldGFfaW50ZXJ2YWwgbm90IHNldCwgYnVmZmVyIHByb2JhYmx5IGhhZCAiCi0gICAgICAgICJubyBjYXBzIHNldC4gVHJ5IGVuYWJsaW5nIGlyYWRpby1tb2RlIG9uIHRoZSBodHRwIHNvdXJjZSBlbGVtZW50Iik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfaWN5ZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RJQ1lEZW11eCAqaWN5ZGVtdXggPSBHU1RfSUNZREVNVVggKGVsZW1lbnQpOwotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfaWN5ZGVtdXhfcmVzZXQgKGljeWRlbXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0vKiB0YWtlcyBvd25lcnNoaXAgb2YgdGFnIGxpc3QgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ljeWRlbXV4X3NlbmRfdGFnX2V2ZW50IChHc3RJQ1lEZW11eCAqIGljeWRlbXV4LCBHc3RUYWdMaXN0ICogdGFncykKLXsKLSAgR3N0RXZlbnQgKmV2ZW50OwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld190YWcgKHRhZ3MpOwotICBHU1RfRVZFTlRfVElNRVNUQU1QIChldmVudCkgPSAwOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGljeWRlbXV4LCAiU2VuZGluZyB0YWcgZXZlbnQgb24gc3JjIHBhZCIpOwotICByZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50IChpY3lkZW11eC0+c3JjcGFkLCBldmVudCk7Ci0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoaWN5ZGVtdXhfZGVidWcsICJpY3lkZW11eCIsIDAsCi0gICAgICAiR1N0cmVhbWVyIElDWSB0YWcgZGVtdXhlciIpOwotCi0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiaWN5ZGVtdXgiLAotICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfSUNZREVNVVgpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgaWN5ZGVtdXgsCi0gICAgIkRlbXV4IElDWSB0YWdzIGZyb20gYSBzdHJlYW0iLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2ljeWRlbXV4L2dzdGljeWRlbXV4LmggYi9nc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YwNTIxOC4uMDAwMDAwMAotLS0gYS9nc3QvaWN5ZGVtdXgvZ3N0aWN5ZGVtdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qIENvcHlyaWdodCAyMDA1IEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotICogICAgICAgICAgIDIwMDYgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgQmVuamFtaW4gT3R0ZSA8b3R0ZUBnbm9tZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9JQ1lERU1VWF9IX18KLSNkZWZpbmUgX19HU1RfSUNZREVNVVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdHR5cGVmaW5kaGVscGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9JQ1lERU1VWCBcCi0gIChnc3RfaWN5ZGVtdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lDWURFTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSUNZREVNVVgsR3N0SUNZRGVtdXgpKQotI2RlZmluZSBHU1RfSUNZREVNVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfSUNZREVNVVgsR3N0SUNZRGVtdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19JQ1lERU1VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0lDWURFTVVYKSkKLSNkZWZpbmUgR1NUX0lTX0lDWURFTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0lDWURFTVVYKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdElDWURlbXV4ICAgICAgR3N0SUNZRGVtdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SUNZRGVtdXhDbGFzcyBHc3RJQ1lEZW11eENsYXNzOwotCi1zdHJ1Y3QgX0dzdElDWURlbXV4Ci17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQ7Ci0KLSAgLyogSW50ZXJ2YWwgYmV0d2VlbiBtZXRhZGF0YSB1cGRhdGVzICovCi0gIGdpbnQgbWV0YV9pbnRlcnZhbDsKLQotICAvKiBSZW1haW5pbmcgYnl0ZXMgdW50aWwgdGhlIG5leHQgbWV0YWRhdGEgdXBkYXRlICovCi0gIGdpbnQgcmVtYWluaW5nOwotCi0gIC8qIFdoZW4gJ3JlbWFpbmluZycgaXMgemVybywgdGhpcyBob2xkcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIG1ldGFkYXRhIHdlCi0gICAqIHN0aWxsIG5lZWQgdG8gcmVhZCwgb3IgemVybyBpZiB3ZSBkb24ndCB5ZXQga25vdyAod2hpY2ggbWVhbnMgd2UgbmVlZCB0bwotICAgKiByZWFkIG9uZSBieXRlLCBhZnRlciB3aGljaCB3ZSBjYW4gaW5pdGlhbGlzZSB0aGlzIHByb3Blcmx5KSAqLwotICBnaW50IG1ldGFfcmVtYWluaW5nOwotCi0gIC8qIENhcHMgZm9yIHRoZSBkYXRhIGVuY2xvc2VkICovCi0gIEdzdENhcHMgKnNyY19jYXBzOwotCi0gIC8qIFRydWUgaWYgd2UncmUgc3RpbGwgdHlwZWZpbmRpbmcgKi8KLSAgZ2Jvb2xlYW4gdHlwZWZpbmRpbmc7Ci0KLSAgR3N0VGFnTGlzdCAqY2FjaGVkX3RhZ3M7Ci0gIEdMaXN0ICpjYWNoZWRfZXZlbnRzOwotCi0gIEdzdEFkYXB0ZXIgKm1ldGFfYWRhcHRlcjsKLQotICBHc3RCdWZmZXIgKnR5cGVmaW5kX2J1ZjsKLQotICAvKiB1cHN0cmVhbSBIVFRQIENvbnRlbnQtVHlwZSAqLwotICBnY2hhciAqY29udGVudF90eXBlOwotfTsKLQotc3RydWN0IF9Hc3RJQ1lEZW11eENsYXNzIAotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2ljeWRlbXV4X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0lDWURFTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmFtIGIvZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDc5NGU1Li4wMDAwMDAwCi0tLSBhL2dzdC9pZDNkZW11eC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGlkM2RlbXV4LmxhCi0KLWxpYmdzdGlkM2RlbXV4X2xhX1NPVVJDRVMgPSBnc3RpZDNkZW11eC5jCi1saWJnc3RpZDNkZW11eF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAKLWxpYmdzdGlkM2RlbXV4X2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHRhZy1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3RwYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05AICQoR1NUX0JBU0VfTElCUykKLWxpYmdzdGlkM2RlbXV4X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGlkM2RlbXV4X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0aWQzZGVtdXguaApkaWZmIC0tZ2l0IGEvZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmluIGIvZ3N0L2lkM2RlbXV4L01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzkxZWVkLi4wMDAwMDAwCi0tLSBhL2dzdC9pZDNkZW11eC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkxMSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvaWQzZGVtdXgKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RpZDNkZW11eF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0aWQzZGVtdXhfbGFfT0JKRUNUUyA9IGxpYmdzdGlkM2RlbXV4X2xhLWdzdGlkM2RlbXV4LmxvCi1saWJnc3RpZDNkZW11eF9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RpZDNkZW11eF9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0aWQzZGVtdXhfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RpZDNkZW11eF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdGlkM2RlbXV4X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGlkM2RlbXV4X2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGlkM2RlbXV4X2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGlkM2RlbXV4X2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGlkM2RlbXV4LmxhCi1saWJnc3RpZDNkZW11eF9sYV9TT1VSQ0VTID0gZ3N0aWQzZGVtdXguYwotbGliZ3N0aWQzZGVtdXhfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgCi1saWJnc3RpZDNkZW11eF9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0cGJ1dGlscy1AR1NUX0FQSV9WRVJTSU9OQCAkKEdTVF9CQVNFX0xJQlMpCi0KLWxpYmdzdGlkM2RlbXV4X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGlkM2RlbXV4X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGlkM2RlbXV4LmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9pZDNkZW11eC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvaWQzZGVtdXgvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RpZDNkZW11eC5sYTogJChsaWJnc3RpZDNkZW11eF9sYV9PQkpFQ1RTKSAkKGxpYmdzdGlkM2RlbXV4X2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RpZDNkZW11eF9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0aWQzZGVtdXhfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGlkM2RlbXV4X2xhX09CSkVDVFMpICQobGliZ3N0aWQzZGVtdXhfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RpZDNkZW11eF9sYS1nc3RpZDNkZW11eC5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0aWQzZGVtdXhfbGEtZ3N0aWQzZGVtdXgubG86IGdzdGlkM2RlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RpZDNkZW11eF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RpZDNkZW11eF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aWQzZGVtdXhfbGEtZ3N0aWQzZGVtdXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGlkM2RlbXV4X2xhLWdzdGlkM2RlbXV4LlRwbyAtYyAtbyBsaWJnc3RpZDNkZW11eF9sYS1nc3RpZDNkZW11eC5sbyBgdGVzdCAtZiAnZ3N0aWQzZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aWQzZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aWQzZGVtdXhfbGEtZ3N0aWQzZGVtdXguVHBvICQoREVQRElSKS9saWJnc3RpZDNkZW11eF9sYS1nc3RpZDNkZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RpZDNkZW11eC5jJyBvYmplY3Q9J2xpYmdzdGlkM2RlbXV4X2xhLWdzdGlkM2RlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aWQzZGVtdXhfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aWQzZGVtdXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aWQzZGVtdXhfbGEtZ3N0aWQzZGVtdXgubG8gYHRlc3QgLWYgJ2dzdGlkM2RlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGlkM2RlbXV4LmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmMgYi9nc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MWJiOC4uMDAwMDAwMAotLS0gYS9nc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KLS8qIEdTdHJlYW1lciBJRDMgdGFnIGRlbXV4ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWlkM2RlbXV4Ci0gKgotICogaWQzZGVtdXggYWNjZXB0cyBkYXRhIHN0cmVhbXMgd2l0aCBlaXRoZXIgKG9yIGJvdGgpIElEM3YyIHJlZ2lvbnMgYXQgdGhlCi0gKiBzdGFydCwgb3IgSUQzdjEgYXQgdGhlIGVuZC4gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZGF0YSBiZXR3ZWVuIHRoZSB0YWcgYmxvY2tzCi0gKiBpcyBkZXRlY3RlZCB1c2luZyB0eXBlZmluZCBmdW5jdGlvbnMsIGFuZCB0aGUgYXBwcm9wcmlhdGUgb3V0cHV0IG1pbWUgdHlwZQotICogc2V0IG9uIG91dGdvaW5nIGJ1ZmZlcnMuIAotICoKLSAqIFRoZSBlbGVtZW50IGlzIG9ubHkgYWJsZSB0byByZWFkIElEM3YxIHRhZ3MgZnJvbSBhIHNlZWthYmxlIHN0cmVhbSwgYmVjYXVzZQotICogdGhleSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBUaGF0IGlzLCB3aGVuIGdldF9yYW5nZSBtb2RlIGlzIHN1cHBvcnRlZAotICogYnkgdGhlIHVwc3RyZWFtIGVsZW1lbnRzLiBJZiBnZXRfcmFuZ2Ugb3BlcmF0aW9uIGlzIGF2YWlsYWJsZSwgaWQzZGVtdXggbWFrZXMKLSAqIGl0IGF2YWlsYWJsZSBkb3duc3RyZWFtLiBUaGlzIG1lYW5zIHRoYXQgZWxlbWVudHMgd2hpY2ggcmVxdWlyZSBnZXRfcmFuZ2UKLSAqIG1vZGUsIHN1Y2ggYXMgd2F2cGFyc2UsIGNhbiBvcGVyYXRlIG9uIGZpbGVzIGNvbnRhaW5pbmcgSUQzIHRhZyBpbmZvcm1hdGlvbi4KLSAqCi0gKiBUaGlzIGlkM2RlbXV4IGVsZW1lbnQgcmVwbGFjZWQgYW4gb2xkZXIgZWxlbWVudCB3aXRoIHRoZSBzYW1lIG5hbWUgd2hpY2gKLSAqIHJlbGllZCBvbiBsaWJpZDN0YWcgZnJvbSB0aGUgTUFEIHByb2plY3QuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249ZmlsZS5tcDMgISBpZDNkZW11eCAhIGZha2VzaW5rIC10Ci0gKiBdfCBUaGlzIHBpcGVsaW5lIHNob3VsZCByZWFkIGFueSBhdmFpbGFibGUgSUQzIHRhZyBpbmZvcm1hdGlvbiBhbmQgb3V0cHV0IGl0LgotICogVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGluc2lkZSB0aGUgSUQzIHRhZyByZWdpb25zIHNob3VsZCBiZSBkZXRlY3RlZCwgYW5kCi0gKiB0aGUgYXBwcm9wcmlhdGUgbWltZSB0eXBlIHNldCBvbiBidWZmZXJzIHByb2R1Y2VkIGZyb20gaWQzZGVtdXguCi0gKiA8L3JlZnNlY3QyPgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3QtaTE4bi1wbHVnaW4uaD4KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdGlkM2RlbXV4LmgiCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1BSRUZFUl9WMQotfTsKLQotI2RlZmluZSBERUZBVUxUX1BSRUZFUl9WMSAgRkFMU0UKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChpZDNkZW11eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAoaWQzZGVtdXhfZGVidWcpCi0KLSNkZWZpbmUgSUQzVjFfVEFHX1NJWkUgMTI4Ci0jZGVmaW5lIElEM1YyX0hEUl9TSVpFIEdTVF9UQUdfSUQzVjJfSEVBREVSX1NJWkUKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtaWQzIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2lkM2RlbXV4X2lkZW50aWZ5X3RhZyAoR3N0VGFnRGVtdXggKiBkZW11eCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIGdib29sZWFuIHN0YXJ0X3RhZywgZ3VpbnQgKiB0YWdfc2l6ZSk7Ci1zdGF0aWMgR3N0VGFnRGVtdXhSZXN1bHQgZ3N0X2lkM2RlbXV4X3BhcnNlX3RhZyAoR3N0VGFnRGVtdXggKiBkZW11eCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIGdib29sZWFuIHN0YXJ0X3RhZywgZ3VpbnQgKiB0YWdfc2l6ZSwKLSAgICBHc3RUYWdMaXN0ICoqIHRhZ3MpOwotc3RhdGljIEdzdFRhZ0xpc3QgKmdzdF9pZDNkZW11eF9tZXJnZV90YWdzIChHc3RUYWdEZW11eCAqIHRhZ2RlbXV4LAotICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBzdGFydF90YWdzLCBjb25zdCBHc3RUYWdMaXN0ICogZW5kX3RhZ3MpOwotCi1zdGF0aWMgdm9pZCBnc3RfaWQzZGVtdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2lkM2RlbXV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotI2RlZmluZSBnc3RfaWQzZGVtdXhfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0SUQzRGVtdXgsIGdzdF9pZDNkZW11eCwgR1NUX1RZUEVfVEFHX0RFTVVYKTsKLQotc3RhdGljIHZvaWQKLWdzdF9pZDNkZW11eF9jbGFzc19pbml0IChHc3RJRDNEZW11eENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdFRhZ0RlbXV4Q2xhc3MgKnRhZ2RlbXV4X2NsYXNzID0gKEdzdFRhZ0RlbXV4Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2lkM2RlbXV4X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X2lkM2RlbXV4X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BSRUZFUl9WMSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicHJlZmVyLXYxIiwgIlByZWZlciB2ZXJzaW9uIDEgdGFnIiwKLSAgICAgICAgICAiUHJlZmVyIHRhZ3MgZnJvbSBJRDN2MSB0YWcgYXQgZW5kIG9mIGZpbGUgd2hlbiBib3RoIElEM3YxICIKLSAgICAgICAgICAiYW5kIElEM3YyIHRhZ3MgYXJlIHByZXNlbnQiLCBERUZBVUxUX1BSRUZFUl9WMSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiSUQzIHRhZyBkZW11eGVyIiwKLSAgICAgICJDb2RlYy9EZW11eGVyL01ldGFkYXRhIiwKLSAgICAgICJSZWFkIGFuZCBvdXRwdXQgSUQzdjEgYW5kIElEM3YyIHRhZ3Mgd2hpbGUgZGVtdXhpbmcgdGhlIGNvbnRlbnRzIiwKLSAgICAgICJKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4iKTsKLQotICB0YWdkZW11eF9jbGFzcy0+aWRlbnRpZnlfdGFnID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pZDNkZW11eF9pZGVudGlmeV90YWcpOwotICB0YWdkZW11eF9jbGFzcy0+cGFyc2VfdGFnID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pZDNkZW11eF9wYXJzZV90YWcpOwotICB0YWdkZW11eF9jbGFzcy0+bWVyZ2VfdGFncyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaWQzZGVtdXhfbWVyZ2VfdGFncyk7Ci0KLSAgdGFnZGVtdXhfY2xhc3MtPm1pbl9zdGFydF9zaXplID0gSUQzVjJfSERSX1NJWkU7Ci0gIHRhZ2RlbXV4X2NsYXNzLT5taW5fZW5kX3NpemUgPSBJRDNWMV9UQUdfU0laRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pZDNkZW11eF9pbml0IChHc3RJRDNEZW11eCAqIGlkM2RlbXV4KQotewotICBpZDNkZW11eC0+cHJlZmVyX3YxID0gREVGQVVMVF9QUkVGRVJfVjE7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2lkM2RlbXV4X2lkZW50aWZ5X3RhZyAoR3N0VGFnRGVtdXggKiBkZW11eCwgR3N0QnVmZmVyICogYnVmLAotICAgIGdib29sZWFuIHN0YXJ0X3RhZywgZ3VpbnQgKiB0YWdfc2l6ZSkKLXsKLSAgZ3VpbnQ4IGRhdGFbM107Ci0KLSAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWYsIDAsIGRhdGEsIDMpOwotCi0gIGlmIChzdGFydF90YWcpIHsKLSAgICBpZiAoZGF0YVswXSAhPSAnSScgfHwgZGF0YVsxXSAhPSAnRCcgfHwgZGF0YVsyXSAhPSAnMycpCi0gICAgICBnb3RvIG5vX21hcmtlcjsKLQotICAgICp0YWdfc2l6ZSA9IGdzdF90YWdfZ2V0X2lkM3YyX3RhZ19zaXplIChidWYpOwotICB9IGVsc2UgewotICAgIGlmIChkYXRhWzBdICE9ICdUJyB8fCBkYXRhWzFdICE9ICdBJyB8fCBkYXRhWzJdICE9ICdHJykKLSAgICAgIGdvdG8gbm9fbWFya2VyOwotCi0gICAgKnRhZ19zaXplID0gSUQzVjFfVEFHX1NJWkU7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKGRlbXV4LCAiRm91bmQgSUQzdiV1IG1hcmtlciwgdGFnX3NpemUgPSAldSIsCi0gICAgICAoc3RhcnRfdGFnKSA/IDIgOiAxLCAqdGFnX3NpemUpOwotCi0gIHJldHVybiBUUlVFOwotCi1ub19tYXJrZXI6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIk5vIElEM3YldSBtYXJrZXIgZm91bmQiLCAoc3RhcnRfdGFnKSA/IDIgOiAxKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pZDNkZW11eF9hZGRfY29udGFpbmVyX2Zvcm1hdCAoR3N0VGFnTGlzdCAqIHRhZ3MpCi17Ci0gIEdzdENhcHMgKnNpbmtfY2FwczsKLQotICBzaW5rX2NhcHMgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAoJnNpbmtfZmFjdG9yeSk7Ci0gIGdzdF9wYl91dGlsc19hZGRfY29kZWNfZGVzY3JpcHRpb25fdG9fdGFnX2xpc3QgKHRhZ3MsCi0gICAgICBHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQsIHNpbmtfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzaW5rX2NhcHMpOwotfQotCi1zdGF0aWMgR3N0VGFnRGVtdXhSZXN1bHQKLWdzdF9pZDNkZW11eF9wYXJzZV90YWcgKEdzdFRhZ0RlbXV4ICogZGVtdXgsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBnYm9vbGVhbiBzdGFydF90YWcsIGd1aW50ICogdGFnX3NpemUsIEdzdFRhZ0xpc3QgKiogdGFncykKLXsKLSAgaWYgKHN0YXJ0X3RhZykgewotICAgICp0YWdfc2l6ZSA9IGdzdF90YWdfZ2V0X2lkM3YyX3RhZ19zaXplIChidWZmZXIpOwotICAgICp0YWdzID0gZ3N0X3RhZ19saXN0X2Zyb21faWQzdjJfdGFnIChidWZmZXIpOwotCi0gICAgaWYgKEdfTElLRUxZICgqdGFncyAhPSBOVUxMKSkgewotICAgICAgZ3N0X2lkM2RlbXV4X2FkZF9jb250YWluZXJfZm9ybWF0ICgqdGFncyk7Ci0gICAgICByZXR1cm4gR1NUX1RBR19ERU1VWF9SRVNVTFRfT0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBHU1RfVEFHX0RFTVVYX1JFU1VMVF9CUk9LRU5fVEFHOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgKnRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2Zyb21faWQzdjEgKG1hcC5kYXRhKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCp0YWdzID09IE5VTEwpKQotICAgICAgcmV0dXJuIEdTVF9UQUdfREVNVVhfUkVTVUxUX0JST0tFTl9UQUc7Ci0KLSAgICBnc3RfaWQzZGVtdXhfYWRkX2NvbnRhaW5lcl9mb3JtYXQgKCp0YWdzKTsKLSAgICAqdGFnX3NpemUgPSBJRDNWMV9UQUdfU0laRTsKLSAgICByZXR1cm4gR1NUX1RBR19ERU1VWF9SRVNVTFRfT0s7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFRhZ0xpc3QgKgotZ3N0X2lkM2RlbXV4X21lcmdlX3RhZ3MgKEdzdFRhZ0RlbXV4ICogdGFnZGVtdXgsIGNvbnN0IEdzdFRhZ0xpc3QgKiBzdGFydF90YWdzLAotICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiBlbmRfdGFncykKLXsKLSAgR3N0SUQzRGVtdXggKmlkM2RlbXV4OwotICBHc3RUYWdMaXN0ICptZXJnZWQ7Ci0gIGdib29sZWFuIHByZWZlcl92MTsKLQotICBpZDNkZW11eCA9IEdTVF9JRDNERU1VWCAodGFnZGVtdXgpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoaWQzZGVtdXgpOwotICBwcmVmZXJfdjEgPSBpZDNkZW11eC0+cHJlZmVyX3YxOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoaWQzZGVtdXgpOwotCi0gIC8qIHdlIG1lcmdlIGluIFJFUExBQ0UgbW9kZSwgc28gcHV0IHRoZSBsZXNzIGltcG9ydGFudCB0YWdzIGZpcnN0ICovCi0gIGlmIChwcmVmZXJfdjEpCi0gICAgbWVyZ2VkID0gZ3N0X3RhZ19saXN0X21lcmdlIChzdGFydF90YWdzLCBlbmRfdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgZWxzZQotICAgIG1lcmdlZCA9IGdzdF90YWdfbGlzdF9tZXJnZSAoZW5kX3RhZ3MsIHN0YXJ0X3RhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGlkM2RlbXV4LCAic3RhcnQgIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCBzdGFydF90YWdzKTsKLSAgR1NUX0xPR19PQkpFQ1QgKGlkM2RlbXV4LCAiZW5kICAgIHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCBlbmRfdGFncyk7Ci0gIEdTVF9MT0dfT0JKRUNUIChpZDNkZW11eCwgIm1lcmdlZCB0YWdzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbWVyZ2VkKTsKLQotICByZXR1cm4gbWVyZ2VkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lkM2RlbXV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJRDNEZW11eCAqaWQzZGVtdXg7Ci0KLSAgaWQzZGVtdXggPSBHU1RfSUQzREVNVVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BSRUZFUl9WMTp7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGlkM2RlbXV4KTsKLSAgICAgIGlkM2RlbXV4LT5wcmVmZXJfdjEgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaWQzZGVtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pZDNkZW11eF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SUQzRGVtdXggKmlkM2RlbXV4OwotCi0gIGlkM2RlbXV4ID0gR1NUX0lEM0RFTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QUkVGRVJfVjE6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGlkM2RlbXV4KTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBpZDNkZW11eC0+cHJlZmVyX3YxKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChpZDNkZW11eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGlkM2RlbXV4X2RlYnVnLCAiaWQzZGVtdXgiLCAwLAotICAgICAgIkdTdHJlYW1lciBJRDMgdGFnIGRlbXV4ZXIiKTsKLQotICBnc3RfdGFnX3JlZ2lzdGVyX211c2ljYnJhaW56X3RhZ3MgKCk7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJpZDNkZW11eCIsCi0gICAgICBHU1RfUkFOS19QUklNQVJZLCBHU1RfVFlQRV9JRDNERU1VWCk7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBpZDNkZW11eCwKLSAgICAiRGVtdXggSUQzdjEgYW5kIElEM3YyIHRhZ3MgZnJvbSBhIGZpbGUiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2lkM2RlbXV4L2dzdGlkM2RlbXV4LmggYi9nc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2MWRmZC4uMDAwMDAwMAotLS0gYS9nc3QvaWQzZGVtdXgvZ3N0aWQzZGVtdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBJRDMgdGFnIGRlbXV4ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSBKYW4gU2NobWlkdCA8dGhheXRhbkBtYWQuc2NpZW50aXN0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEJlbmphbWluIE90dGUgPG90dGVAZ25vbWUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfSUQzREVNVVhfSF9fCi0jZGVmaW5lIF9fR1NUX0lEM0RFTVVYX0hfXwotCi0jaW5jbHVkZSA8Z3N0L3RhZy9nc3R0YWdkZW11eC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfSUQzREVNVVggXAotICAoZ3N0X2lkM2RlbXV4X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JRDNERU1VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0lEM0RFTVVYLEdzdElEM0RlbXV4KSkKLSNkZWZpbmUgR1NUX0lEM0RFTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0lEM0RFTVVYLEdzdElEM0RlbXV4Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSUQzREVNVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9JRDNERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19JRDNERU1VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9JRDNERU1VWCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJRDNEZW11eCAgICAgIEdzdElEM0RlbXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElEM0RlbXV4Q2xhc3MgR3N0SUQzRGVtdXhDbGFzczsKLQotc3RydWN0IF9Hc3RJRDNEZW11eAotewotICBHc3RUYWdEZW11eCB0YWdkZW11eDsKLQotICBnYm9vbGVhbiBwcmVmZXJfdjE7ICAgICAvKiBwcmVmZXIgSUQzdjEgdGFncyBvdmVyIElEM3YyIHRhZ3M/ICovCi19OwotCi1zdHJ1Y3QgX0dzdElEM0RlbXV4Q2xhc3MgCi17Ci0gIEdzdFRhZ0RlbXV4Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2lkM2RlbXV4X2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0lEM0RFTVVYX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvaW1hZ2VmcmVlemUvTWFrZWZpbGUuYW0gYi9nc3QvaW1hZ2VmcmVlemUvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjE1YTUuLjAwMDAwMDAKLS0tIGEvZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0aW1hZ2VmcmVlemUubGEKLQotbGliZ3N0aW1hZ2VmcmVlemVfbGFfU09VUkNFUyA9IGdzdGltYWdlZnJlZXplLmMKLQotbGliZ3N0aW1hZ2VmcmVlemVfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotbGliZ3N0aW1hZ2VmcmVlemVfbGFfTElCQUREID0gJChHU1RfTElCUykKLWxpYmdzdGltYWdlZnJlZXplX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGltYWdlZnJlZXplX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0aW1hZ2VmcmVlemUuaApkaWZmIC0tZ2l0IGEvZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlLmluIGIvZ3N0L2ltYWdlZnJlZXplL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODdkY2M4Li4wMDAwMDAwCi0tLSBhL2dzdC9pbWFnZWZyZWV6ZS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkwOSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvaW1hZ2VmcmVlemUKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RpbWFnZWZyZWV6ZV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdGltYWdlZnJlZXplX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdGltYWdlZnJlZXplX2xhLWdzdGltYWdlZnJlZXplLmxvCi1saWJnc3RpbWFnZWZyZWV6ZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RpbWFnZWZyZWV6ZV9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0aW1hZ2VmcmVlemVfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RpbWFnZWZyZWV6ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmdzdGltYWdlZnJlZXplX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGltYWdlZnJlZXplX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGltYWdlZnJlZXplX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGltYWdlZnJlZXplX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdGltYWdlZnJlZXplLmxhCi1saWJnc3RpbWFnZWZyZWV6ZV9sYV9TT1VSQ0VTID0gZ3N0aW1hZ2VmcmVlemUuYwotbGliZ3N0aW1hZ2VmcmVlemVfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotbGliZ3N0aW1hZ2VmcmVlemVfbGFfTElCQUREID0gJChHU1RfTElCUykKLWxpYmdzdGltYWdlZnJlZXplX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGltYWdlZnJlZXplX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGltYWdlZnJlZXplLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9pbWFnZWZyZWV6ZS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvaW1hZ2VmcmVlemUvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RpbWFnZWZyZWV6ZS5sYTogJChsaWJnc3RpbWFnZWZyZWV6ZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdGltYWdlZnJlZXplX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RpbWFnZWZyZWV6ZV9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0aW1hZ2VmcmVlemVfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGltYWdlZnJlZXplX2xhX09CSkVDVFMpICQobGliZ3N0aW1hZ2VmcmVlemVfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RpbWFnZWZyZWV6ZV9sYS1nc3RpbWFnZWZyZWV6ZS5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0aW1hZ2VmcmVlemVfbGEtZ3N0aW1hZ2VmcmVlemUubG86IGdzdGltYWdlZnJlZXplLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RpbWFnZWZyZWV6ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RpbWFnZWZyZWV6ZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aW1hZ2VmcmVlemVfbGEtZ3N0aW1hZ2VmcmVlemUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGltYWdlZnJlZXplX2xhLWdzdGltYWdlZnJlZXplLlRwbyAtYyAtbyBsaWJnc3RpbWFnZWZyZWV6ZV9sYS1nc3RpbWFnZWZyZWV6ZS5sbyBgdGVzdCAtZiAnZ3N0aW1hZ2VmcmVlemUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0aW1hZ2VmcmVlemUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aW1hZ2VmcmVlemVfbGEtZ3N0aW1hZ2VmcmVlemUuVHBvICQoREVQRElSKS9saWJnc3RpbWFnZWZyZWV6ZV9sYS1nc3RpbWFnZWZyZWV6ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RpbWFnZWZyZWV6ZS5jJyBvYmplY3Q9J2xpYmdzdGltYWdlZnJlZXplX2xhLWdzdGltYWdlZnJlZXplLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aW1hZ2VmcmVlemVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aW1hZ2VmcmVlemVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aW1hZ2VmcmVlemVfbGEtZ3N0aW1hZ2VmcmVlemUubG8gYHRlc3QgLWYgJ2dzdGltYWdlZnJlZXplLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGltYWdlZnJlZXplLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmMgYi9nc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMzMWJmZi4uMDAwMDAwMAotLS0gYS9nc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuYworKysgL2Rldi9udWxsCkBAIC0xLDkxMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoYykgMjAwNSBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWltYWdlZnJlZXplCi0gKgotICogVGhlIGltYWdlZnJlZXplIGVsZW1lbnQgZ2VuZXJhdGVzIGEgc3RpbGwgZnJhbWUgdmlkZW8gc3RyZWFtIGZyb20KLSAqIHRoZSBpbnB1dC4gSXQgZHVwbGljYXRlcyB0aGUgZmlyc3QgZnJhbWUgd2l0aCB0aGUgZnJhbWVyYXRlIHJlcXVlc3RlZAotICogYnkgZG93bnN0cmVhbSwgYWxsb3dzIHNlZWtpbmcgYW5kIGFuc3dlcnMgcXVlcmllcy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmlsZXNyYyBsb2NhdGlvbj1zb21lLnBuZyAhIGRlY29kZWJpbiAhIGltYWdlZnJlZXplICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBwaXBlbGluZSBzaG93cyBhIHN0aWxsIGZyYW1lIHN0cmVhbSBvZiBhIFBORyBmaWxlLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBpbWFnZWZyZWV6ZSBlbGVtZW50IGZyb20gUGlUaVZpOgotICogaHR0cDovL2dpdC5nbm9tZS5vcmcvYnJvd3NlL3BpdGl2aS90cmVlL3BpdGl2aS9lbGVtZW50cy9pbWFnZWZyZWV6ZS5weQotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg+Ci0KLSNpbmNsdWRlICJnc3RpbWFnZWZyZWV6ZS5oIgotCi1zdGF0aWMgdm9pZCBnc3RfaW1hZ2VfZnJlZXplX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X2ltYWdlX2ZyZWV6ZV9yZXNldCAoR3N0SW1hZ2VGcmVlemUgKiBzZWxmKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9pbWFnZV9mcmVlemVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ltYWdlX2ZyZWV6ZV9zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9pbWFnZV9mcmVlemVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ltYWdlX2ZyZWV6ZV9zaW5rX3NldGNhcHMgKEdzdEltYWdlRnJlZXplICogc2VsZiwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X2ltYWdlX2ZyZWV6ZV9zaW5rX2dldGNhcHMgKEdzdEltYWdlRnJlZXplICogc2VsZiwKLSAgICBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaW1hZ2VfZnJlZXplX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIHZvaWQgZ3N0X2ltYWdlX2ZyZWV6ZV9zcmNfbG9vcCAoR3N0UGFkICogcGFkKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaW1hZ2VfZnJlZXplX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ltYWdlX2ZyZWV6ZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19wYWRfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXJhdyIpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19wYWRfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXciKSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9pbWFnZV9mcmVlemVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2ltYWdlX2ZyZWV6ZV9kZWJ1ZwotCi0jZGVmaW5lIGdzdF9pbWFnZV9mcmVlemVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0SW1hZ2VGcmVlemUsIGdzdF9pbWFnZV9mcmVlemUsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi0KLXN0YXRpYyB2b2lkCi1nc3RfaW1hZ2VfZnJlZXplX2NsYXNzX2luaXQgKEdzdEltYWdlRnJlZXplQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9pbWFnZV9mcmVlemVfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW1hZ2VfZnJlZXplX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJTdGlsbCBmcmFtZSBzdHJlYW0gZ2VuZXJhdG9yIiwKLSAgICAgICJGaWx0ZXIvVmlkZW8iLAotICAgICAgIkdlbmVyYXRlcyBhIHN0aWxsIGZyYW1lIHN0cmVhbSBmcm9tIGFuIGltYWdlIiwKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZzaW5rX3BhZF90ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnNyY19wYWRfdGVtcGxhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ltYWdlX2ZyZWV6ZV9pbml0IChHc3RJbWFnZUZyZWV6ZSAqIHNlbGYpCi17Ci0gIHNlbGYtPnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmtfcGFkX3RlbXBsYXRlLCAic2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2VsZi0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW1hZ2VfZnJlZXplX3NpbmtfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ltYWdlX2ZyZWV6ZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzZWxmLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pbWFnZV9mcmVlemVfc2lua19xdWVyeSkpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OIChzZWxmLT5zaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbGYpLCBzZWxmLT5zaW5rcGFkKTsKLQotICBzZWxmLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY19wYWRfdGVtcGxhdGUsICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW1hZ2VfZnJlZXplX3NyY19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc2VsZi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pbWFnZV9mcmVlemVfc3JjX3F1ZXJ5KSk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHNlbGYtPnNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWxmKSwgc2VsZi0+c3JjcGFkKTsKLQotICBnX211dGV4X2luaXQgKCZzZWxmLT5sb2NrKTsKLQotICBnc3RfaW1hZ2VfZnJlZXplX3Jlc2V0IChzZWxmKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbWFnZV9mcmVlemVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEltYWdlRnJlZXplICpzZWxmID0gR1NUX0lNQUdFX0ZSRUVaRSAob2JqZWN0KTsKLQotICBnc3RfaW1hZ2VfZnJlZXplX3Jlc2V0IChzZWxmKTsKLQotICBnX211dGV4X2NsZWFyICgmc2VsZi0+bG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ltYWdlX2ZyZWV6ZV9yZXNldCAoR3N0SW1hZ2VGcmVlemUgKiBzZWxmKQotewotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUmVzZXR0aW5nIGludGVybmFsIHN0YXRlIik7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJnNlbGYtPmJ1ZmZlciwgTlVMTCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlbGYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIHNlbGYtPm5lZWRfc2VnbWVudCA9IFRSVUU7Ci0KLSAgc2VsZi0+ZnBzX24gPSBzZWxmLT5mcHNfZCA9IDA7Ci0gIHNlbGYtPm9mZnNldCA9IDA7Ci0gIHNlbGYtPnNlcW51bSA9IDA7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgZ19hdG9taWNfaW50X3NldCAoJnNlbGYtPnNlZWtpbmcsIDApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbWFnZV9mcmVlemVfc2lua19zZXRjYXBzIChHc3RJbWFnZUZyZWV6ZSAqIHNlbGYsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnaW50IGZwc19uLCBmcHNfZDsKLSAgR3N0Q2FwcyAqb3RoZXJjYXBzLCAqaW50ZXJzZWN0aW9uOwotICBndWludCBpLCBuOwotICBHc3RQYWQgKnBhZDsKLQotICBwYWQgPSBzZWxmLT5zaW5rcGFkOwotICBjYXBzID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiU2V0dGluZyBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIC8qIDEuIFJlbW92ZSBmcmFtZXJhdGUgKi8KLSAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJmcmFtZXJhdGUiKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgR19NQVhJTlQsIDEsCi0gICAgICBOVUxMKTsKLQotICAvKiAyLiBJbnRlcnNlY3Qgd2l0aCB0ZW1wbGF0ZSBjYXBzICovCi0gIG90aGVyY2FwcyA9IChHc3RDYXBzICopIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpOwotICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGNhcHMsIG90aGVyY2Fwcyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIkludGVyc2VjdGluZzogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJ3aXRoOiAlIiBHU1RfUFRSX0ZPUk1BVCwgb3RoZXJjYXBzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiZ2F2ZTogJSIgR1NUX1BUUl9GT1JNQVQsIGludGVyc2VjdGlvbik7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKG90aGVyY2Fwcyk7Ci0gIGNhcHMgPSBpbnRlcnNlY3Rpb247Ci0gIGludGVyc2VjdGlvbiA9IG90aGVyY2FwcyA9IE5VTEw7Ci0KLSAgLyogMy4gSW50ZXJzZWN0IHdpdGggZG93bnN0cmVhbSBwZWVyIGNhcHMgKi8KLSAgb3RoZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKHNlbGYtPnNyY3BhZCwgY2Fwcyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlBlZXIgcXVlcnkgcmVzdWx0ZWQ6ICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGNhcHMgPSBvdGhlcmNhcHM7Ci0gIG90aGVyY2FwcyA9IE5VTEw7Ci0KLSAgLyogNC4gRm9yIGV2ZXJ5IGNhbmRpZGF0ZSB0cnkgdG8gdXNlIGl0IGRvd25zdHJlYW0gd2l0aCBmcmFtZXJhdGUgYXMKLSAgICogbmVhciBhcyBwb3NzaWJsZSB0byAyNS8xICovCi0gIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBHc3RDYXBzICpjYW5kaWRhdGUgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKSk7Ci0KLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYW5kaWRhdGUsIHMpOwotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZF90eXBlZCAocywgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OKSB8fAotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uIChzLCAiZnJhbWVyYXRlIiwgMjUsIDEpKSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAocywgImZyYW1lcmF0ZSIsICZmcHNfbiwgJmZwc19kKTsKLSAgICAgIGlmIChmcHNfZCAhPSAwKSB7Ci0gICAgICAgIGlmIChnc3RfcGFkX3NldF9jYXBzIChzZWxmLT5zcmNwYWQsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgICBzZWxmLT5mcHNfbiA9IGZwc19uOwotICAgICAgICAgIHNlbGYtPmZwc19kID0gZnBzX2Q7Ci0gICAgICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJTZXR0aW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2FuZGlkYXRlKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJJbnZhbGlkIGNhcHMgd2l0aCBmcmFtZXJhdGUgJWQvJWQiLCBmcHNfbiwKLSAgICAgICAgICAgIGZwc19kKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhbmRpZGF0ZSk7Ci0gIH0KLQotICBpZiAoIXJldCkKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwYWQsICJObyB1c2FibGUgY2FwcyBmb3VuZCIpOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiByZW1vdmUgZnJhbWVyYXRlIGluIHdyaXRhYmxlIEBjYXBzICovCi1zdGF0aWMgdm9pZAotZ3N0X2ltYWdlX2ZyZWV6ZV9yZW1vdmVfZnBzIChHc3RJbWFnZUZyZWV6ZSAqIHNlbGYsIEdzdENhcHMgKiBjYXBzKQotewotICBnaW50IGksIG47Ci0KLSAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJmcmFtZXJhdGUiKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCAwLCAxLCBHX01BWElOVCwKLSAgICAgICAgMSwgTlVMTCk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2ltYWdlX2ZyZWV6ZV9zaW5rX2dldGNhcHMgKEdzdEltYWdlRnJlZXplICogc2VsZiwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmV0LCAqdG1wLCAqdGVtcGw7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHBhZCA9IHNlbGYtPnNpbmtwYWQ7Ci0gIHJldCA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgaWYgKHJldCAhPSBOVUxMKSB7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIGZpbHRlciA9IGdzdF9jYXBzX2NvcHkgKGZpbHRlcik7Ci0gICAgZ3N0X2ltYWdlX2ZyZWV6ZV9yZW1vdmVfZnBzIChzZWxmLCBmaWx0ZXIpOwotICB9Ci0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gIHRtcCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChzZWxmLT5zcmNwYWQsIGZpbHRlcik7Ci0gIGlmICh0bXApIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInBlZXIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgdG1wKTsKLSAgICByZXQgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRtcCwgdGVtcGwpOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAiZ29pbmcgdG8gY29weSIpOwotICAgIHJldCA9IGdzdF9jYXBzX2NvcHkgKHRlbXBsKTsKLSAgfQotICBpZiAodGVtcGwpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsKTsKLSAgaWYgKGZpbHRlcikKLSAgICBnc3RfY2Fwc191bnJlZiAoZmlsdGVyKTsKLQotICByZXQgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChyZXQpOwotICBnc3RfaW1hZ2VfZnJlZXplX3JlbW92ZV9mcHMgKHNlbGYsIHJldCk7Ci0KLWRvbmU6Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZXR1cm5pbmcgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW1hZ2VfZnJlZXplX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RJbWFnZUZyZWV6ZSAqc2VsZiA9IEdTVF9JTUFHRV9GUkVFWkUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiSGFuZGxpbmcgcXVlcnkgb2YgdHlwZSAnJXMnIiwKLSAgICAgIGdzdF9xdWVyeV90eXBlX2dldF9uYW1lIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZjYXBzKTsKLSAgICAgIGNhcHMgPSBnc3RfaW1hZ2VfZnJlZXplX3NpbmtfZ2V0Y2FwcyAoc2VsZiwgY2Fwcyk7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbWFnZV9mcmVlemVfY29udmVydCAoR3N0SW1hZ2VGcmVlemUgKiBzZWxmLAotICAgIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgc3JjX3ZhbHVlLAotICAgIEdzdEZvcm1hdCAqIGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBpZiAoc3JjX2Zvcm1hdCA9PSAqZGVzdF9mb3JtYXQpIHsKLSAgICAqZGVzdF92YWx1ZSA9IHNyY192YWx1ZTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmIChzcmNfdmFsdWUgPT0gLTEpIHsKLSAgICAqZGVzdF92YWx1ZSA9IC0xOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgc3dpdGNoIChzcmNfZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6ewotICAgICAgc3dpdGNoICgqZGVzdF9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgaWYgKHNlbGYtPmZwc19uID09IDApCi0gICAgICAgICAgICAqZGVzdF92YWx1ZSA9IC0xOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0KLSAgICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwgR1NUX1NFQ09ORCAqIHNlbGYtPmZwc19kLAotICAgICAgICAgICAgICAgIHNlbGYtPmZwc19uKTsKLSAgICAgICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6ewotICAgICAgc3dpdGNoICgqZGVzdF9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgKmRlc3RfdmFsdWUgPQotICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwgc2VsZi0+ZnBzX24sCi0gICAgICAgICAgICAgIHNlbGYtPmZwc19kICogR1NUX1NFQ09ORCk7Ci0gICAgICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgICByZXQgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ltYWdlX2ZyZWV6ZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RJbWFnZUZyZWV6ZSAqc2VsZiA9IEdTVF9JTUFHRV9GUkVFWkUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJIYW5kbGluZyBxdWVyeSBvZiB0eXBlICclcyciLAotICAgICAgZ3N0X3F1ZXJ5X3R5cGVfZ2V0X25hbWUgKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOnsKLSAgICAgIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBkZXN0X2Zvcm1hdDsKLSAgICAgIGdpbnQ2NCBzcmNfdmFsdWUsIGRlc3RfdmFsdWU7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0IChxdWVyeSwgJnNyY19mb3JtYXQsICZzcmNfdmFsdWUsICZkZXN0X2Zvcm1hdCwKLSAgICAgICAgICAmZGVzdF92YWx1ZSk7Ci0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9pbWFnZV9mcmVlemVfY29udmVydCAoc2VsZiwgc3JjX2Zvcm1hdCwgc3JjX3ZhbHVlLCAmZGVzdF9mb3JtYXQsCi0gICAgICAgICAgJmRlc3RfdmFsdWUpOwotICAgICAgaWYgKHJldCkKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0IChxdWVyeSwgc3JjX2Zvcm1hdCwgc3JjX3ZhbHVlLCBkZXN0X2Zvcm1hdCwKLSAgICAgICAgICAgIGRlc3RfdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOnsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICBnaW50NjQgcG9zaXRpb247Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6ewotICAgICAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgICAgIHBvc2l0aW9uID0gc2VsZi0+b2Zmc2V0OwotICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRTp7Ci0gICAgICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgcG9zaXRpb24gPSBzZWxmLT5zZWdtZW50LnBvc2l0aW9uOwotICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgcmV0ID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAocmV0KSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIHBvc2l0aW9uKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLAotICAgICAgICAgICAgIlJldHVybmluZyBwb3NpdGlvbiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBpbiBmb3JtYXQgJXMiLCBwb3NpdGlvbiwKLSAgICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUG9zaXRpb24gcXVlcnkgZmFpbGVkIik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046ewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdpbnQ2NCBkdXJhdGlvbjsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0gICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRTp7Ci0gICAgICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICAgICAgZHVyYXRpb24gPSBzZWxmLT5zZWdtZW50LnN0b3A7Ci0gICAgICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgICByZXQgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOnsKLSAgICAgICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLSAgICAgICAgICBkdXJhdGlvbiA9IHNlbGYtPnNlZ21lbnQuc3RvcDsKLSAgICAgICAgICBpZiAoZHVyYXRpb24gIT0gLTEpCi0gICAgICAgICAgICBkdXJhdGlvbiA9Ci0gICAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChkdXJhdGlvbiwgc2VsZi0+ZnBzX24sCi0gICAgICAgICAgICAgICAgR1NUX1NFQ09ORCAqIHNlbGYtPmZwc19kKTsKLSAgICAgICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYgKHJldCkgewotICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm9ybWF0LCBkdXJhdGlvbik7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwKLSAgICAgICAgICAgICJSZXR1cm5pbmcgZHVyYXRpb24gJSIgR19HSU5UNjRfRk9STUFUICIgaW4gZm9ybWF0ICVzIiwgZHVyYXRpb24sCi0gICAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIkR1cmF0aW9uIHF1ZXJ5IGZhaWxlZCIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6ewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdib29sZWFuIHNlZWthYmxlOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgc2Vla2FibGUgPSAoZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSB8fCBmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKTsKLQotICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgZm9ybWF0LCBzZWVrYWJsZSwgKHNlZWthYmxlID8gMCA6IC0xKSwgLTEpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgICAgLyogVGhpcyB3aWxsIG9ubHkgcmV0dXJuIGFuIGFjY3VyYXRlIGxhdGVuY3kgZm9yIHRoZSBmaXJzdCBidWZmZXIgc2luY2UKLSAgICAgICAqIGFsbCBmdXJ0aGVyIGJ1ZmZlcnMgb3V0cHV0dGVkIGJ5IHVzIGFyZSBqdXN0IGNvcGllcyBvZiB0aGF0IG9uZSwgYW5kCi0gICAgICAgKiB0aGUgbGF0ZW5jeSBpcyAwIGluIHRoYXQgY2FzZS4gSG93ZXZlciwgbGF0ZW5jeSBjaGFuZ2VzIGFyZSBub3QKLSAgICAgICAqIHN0cmFpZ2h0Zm9yd2FyZCwgc28gbGV0J3MgZG8gdGhlIGNvbnNlcnZhdGl2ZSBmaXggZm9yIG5vdy4gKi8KLSAgICAgIHJldCA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbWFnZV9mcmVlemVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEltYWdlRnJlZXplICpzZWxmID0gR1NUX0lNQUdFX0ZSRUVaRSAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJHb3QgJXMgZXZlbnQiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICBnc3RfaW1hZ2VfZnJlZXplX3Npbmtfc2V0Y2FwcyAoc2VsZiwgY2Fwcyk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgaWYgKCFzZWxmLT5idWZmZXIpIHsKLSAgICAgICAgLyogaWYgd2UgcmVjZWl2ZSBFT1MgYmVmb3JlIGEgYnVmZmVyIGFycml2ZXMsIHRoZW4gbGV0IGl0IHBhc3MgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkVPUyB3aXRob3V0IGlucHV0IGJ1ZmZlciwgcGFzc2luZyBvbiIpOwotICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJEcm9wcGluZyBldmVudCIpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICBnc3RfaW1hZ2VfZnJlZXplX3Jlc2V0IChzZWxmKTsKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbWFnZV9mcmVlemVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SW1hZ2VGcmVlemUgKnNlbGYgPSBHU1RfSU1BR0VfRlJFRVpFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkdvdCAlcyBldmVudCIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKLSAgICBjYXNlIEdTVF9FVkVOVF9RT1M6Ci0gICAgY2FzZSBHU1RfRVZFTlRfTEFURU5DWToKLSAgICBjYXNlIEdTVF9FVkVOVF9TVEVQOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiRHJvcHBpbmcgZXZlbnQiKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6ewotICAgICAgZ2RvdWJsZSByYXRlOwotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgICAgIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIHN0b3BfdHlwZTsKLSAgICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgICAgIGdpbnQ2NCBsYXN0X3N0b3A7Ci0gICAgICBnYm9vbGVhbiBzdGFydF90YXNrOwotICAgICAgZ2Jvb2xlYW4gZmx1c2g7Ci0gICAgICBndWludDMyIHNlcW51bTsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLCAmc3RhcnRfdHlwZSwgJnN0YXJ0LAotICAgICAgICAgICZzdG9wX3R5cGUsICZzdG9wKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gICAgICBmbHVzaCA9ICEgIShmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0gpOwotCi0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSAmJiBmb3JtYXQgIT0gR1NUX0ZPUk1BVF9ERUZBVUxUKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwgIlNlZWsgaW4gaW52YWxpZCBmb3JtYXQ6ICVzIiwKLSAgICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOwotICAgICAgICByZXQgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKSB7Ci0gICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICAgICAgaWYgKCFnc3RfaW1hZ2VfZnJlZXplX2NvbnZlcnQgKHNlbGYsIEdTVF9GT1JNQVRfREVGQVVMVCwgc3RhcnQsICZmb3JtYXQsCi0gICAgICAgICAgICAgICAgJnN0YXJ0KQotICAgICAgICAgICAgfHwgIWdzdF9pbWFnZV9mcmVlemVfY29udmVydCAoc2VsZiwgR1NUX0ZPUk1BVF9ERUZBVUxULCBzdG9wLAotICAgICAgICAgICAgICAgICZmb3JtYXQsICZzdG9wKQotICAgICAgICAgICAgfHwgc3RhcnQgPT0gLTEgfHwgc3RvcCA9PSAtMSkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwKLSAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb252ZXJ0IHNlZWsgZnJvbSBERUZBVUxUIGZvcm1hdCBpbnRvIFRJTUUgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLSAgICAgIGlmIChmbHVzaCkgewotICAgICAgICBHc3RFdmVudCAqZTsKLQotICAgICAgICBnX2F0b21pY19pbnRfc2V0ICgmc2VsZi0+c2Vla2luZywgMSk7Ci0gICAgICAgIGUgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZSwgc2VxbnVtKTsKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X3BhZF9wYXVzZV90YXNrIChzZWxmLT5zcmNwYWQpOwotICAgICAgfQotCi0gICAgICBHU1RfUEFEX1NUUkVBTV9MT0NLIChzZWxmLT5zcmNwYWQpOwotCi0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5sb2NrKTsKLQotICAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlbGYtPnNlZ21lbnQsIHJhdGUsIGZvcm1hdCwgZmxhZ3MsIHN0YXJ0X3R5cGUsCi0gICAgICAgICAgc3RhcnQsIHN0b3BfdHlwZSwgc3RvcCwgTlVMTCk7Ci0gICAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBUUlVFOwotICAgICAgbGFzdF9zdG9wID0gc2VsZi0+c2VnbWVudC5wb3NpdGlvbjsKLQotICAgICAgc3RhcnRfdGFzayA9IHNlbGYtPmJ1ZmZlciAhPSBOVUxMOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICAgICAgaWYgKGZsdXNoKSB7Ci0gICAgICAgIEdzdEV2ZW50ICplOwotCi0gICAgICAgIGUgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKFRSVUUpOwotICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZSwgc2VxbnVtKTsKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGUpOwotICAgICAgICBnX2F0b21pY19pbnRfc2V0ICgmc2VsZi0+c2Vla2luZywgMCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICBHc3RNZXNzYWdlICptOwotCi0gICAgICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoR1NUX09CSkVDVCAoc2VsZiksCi0gICAgICAgICAgICBmb3JtYXQsIGxhc3Rfc3RvcCk7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNlbGYpLCBtKTsKLSAgICAgIH0KLQotICAgICAgc2VsZi0+c2VxbnVtID0gc2VxbnVtOwotICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChzZWxmLT5zcmNwYWQpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJTZWVrIHN1Y2Nlc3NmdWwiKTsKLQotICAgICAgaWYgKHN0YXJ0X3Rhc2spIHsKLSAgICAgICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgICAgICAgaWYgKHNlbGYtPmJ1ZmZlciAhPSBOVUxMKQotICAgICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAoc2VsZi0+c3JjcGFkLAotICAgICAgICAgICAgICAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfaW1hZ2VfZnJlZXplX3NyY19sb29wLCBzZWxmLT5zcmNwYWQsIE5VTEwpOwotCi0gICAgICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0gICAgICB9Ci0KLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICBnc3RfaW1hZ2VfZnJlZXplX3Jlc2V0IChzZWxmKTsKLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9pbWFnZV9mcmVlemVfc2lua19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RJbWFnZUZyZWV6ZSAqc2VsZiA9IEdTVF9JTUFHRV9GUkVFWkUgKHBhcmVudCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gIGlmIChzZWxmLT5idWZmZXIpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJBbHJlYWR5IGhhdmUgYSBidWZmZXIsIGRyb3BwaW5nIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLQotICBzZWxmLT5idWZmZXIgPSBidWZmZXI7Ci0KLSAgZ3N0X3BhZF9zdGFydF90YXNrIChzZWxmLT5zcmNwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9pbWFnZV9mcmVlemVfc3JjX2xvb3AsCi0gICAgICBzZWxmLT5zcmNwYWQsIE5VTEwpOwotICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ltYWdlX2ZyZWV6ZV9zcmNfbG9vcCAoR3N0UGFkICogcGFkKQotewotICBHc3RJbWFnZUZyZWV6ZSAqc2VsZiA9IEdTVF9JTUFHRV9GUkVFWkUgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50NjQgb2Zmc2V0OwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCB0aW1lc3RhbXBfZW5kOwotICBndWludDY0IGNzdGFydCwgY3N0b3A7Ci0gIGdib29sZWFuIGluX3NlZywgZW9zOwotICBHc3RGbG93UmV0dXJuIGZsb3dfcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bG9jayk7Ci0gIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChzZWxmLT5zcmNwYWQpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocGFkLCAiTm90IG5lZ290aWF0ZWQgeWV0Iik7Ci0gICAgZmxvd19yZXQgPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIGdvdG8gcGF1c2VfdGFzazsKLSAgfQotCi0gIGlmICghc2VsZi0+YnVmZmVyKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocGFkLCAiSGF2ZSBubyBidWZmZXIgeWV0Iik7Ci0gICAgZmxvd19yZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPmxvY2spOwotICAgIGdvdG8gcGF1c2VfdGFzazsKLSAgfQotICBidWZmZXIgPSBnc3RfYnVmZmVyX2NvcHkgKHNlbGYtPmJ1ZmZlcik7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5sb2NrKTsKLQotICBpZiAoc2VsZi0+bmVlZF9zZWdtZW50KSB7Ci0gICAgR3N0RXZlbnQgKmU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJQdXNoaW5nIFNFR01FTlQgZXZlbnQ6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgJnNlbGYtPnNlZ21lbnQpOwotICAgIGUgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWxmLT5zZWdtZW50KTsKLQotICAgIGlmIChzZWxmLT5zZXFudW0pCi0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZSwgc2VsZi0+c2VxbnVtKTsKLQotICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICAgIGlmIChzZWxmLT5zZWdtZW50LnJhdGUgPj0gMCkgewotICAgICAgc2VsZi0+b2Zmc2V0ID0KLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNlbGYtPnNlZ21lbnQuc3RhcnQsIHNlbGYtPmZwc19uLAotICAgICAgICAgIHNlbGYtPmZwc19kICogR1NUX1NFQ09ORCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNlbGYtPm9mZnNldCA9Ci0gICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzZWxmLT5zZWdtZW50LnN0b3AsIHNlbGYtPmZwc19uLAotICAgICAgICAgIHNlbGYtPmZwc19kICogR1NUX1NFQ09ORCk7Ci0gICAgfQotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgICBzZWxmLT5uZWVkX3NlZ21lbnQgPSBGQUxTRTsKLQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBlKTsKLSAgfQotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPmxvY2spOwotICBvZmZzZXQgPSBzZWxmLT5vZmZzZXQ7Ci0KLSAgaWYgKHNlbGYtPmZwc19uICE9IDApIHsKLSAgICB0aW1lc3RhbXAgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG9mZnNldCwgc2VsZi0+ZnBzX2QgKiBHU1RfU0VDT05ELCBzZWxmLT5mcHNfbik7Ci0gICAgdGltZXN0YW1wX2VuZCA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAob2Zmc2V0ICsgMSwgc2VsZi0+ZnBzX2QgKiBHU1RfU0VDT05ELAotICAgICAgICBzZWxmLT5mcHNfbik7Ci0gIH0gZWxzZSB7Ci0gICAgdGltZXN0YW1wID0gc2VsZi0+c2VnbWVudC5zdGFydDsKLSAgICB0aW1lc3RhbXBfZW5kID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIGVvcyA9IChzZWxmLT5mcHNfbiA9PSAwICYmIG9mZnNldCA+IDApIHx8Ci0gICAgICAoc2VsZi0+c2VnbWVudC5yYXRlID49IDAgJiYgc2VsZi0+c2VnbWVudC5zdG9wICE9IC0xCi0gICAgICAmJiB0aW1lc3RhbXAgPiBzZWxmLT5zZWdtZW50LnN0b3ApIHx8IChzZWxmLT5zZWdtZW50LnJhdGUgPCAwCi0gICAgICAmJiBvZmZzZXQgPT0gMCkgfHwgKHNlbGYtPnNlZ21lbnQucmF0ZSA8IDAKLSAgICAgICYmIHNlbGYtPnNlZ21lbnQuc3RhcnQgIT0gLTEgJiYgdGltZXN0YW1wX2VuZCA8IHNlbGYtPnNlZ21lbnQuc3RhcnQpOwotCi0gIGlmIChzZWxmLT5mcHNfbiA9PSAwICYmIG9mZnNldCA+IDApCi0gICAgaW5fc2VnID0gRkFMU0U7Ci0gIGVsc2UKLSAgICBpbl9zZWcgPQotICAgICAgICBnc3Rfc2VnbWVudF9jbGlwICgmc2VsZi0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXAsCi0gICAgICAgIHRpbWVzdGFtcF9lbmQsICZjc3RhcnQsICZjc3RvcCk7Ci0KLSAgaWYgKGluX3NlZykgewotICAgIHNlbGYtPnNlZ21lbnQucG9zaXRpb24gPSBjc3RhcnQ7Ci0gICAgaWYgKHNlbGYtPnNlZ21lbnQucmF0ZSA+PSAwKQotICAgICAgc2VsZi0+c2VnbWVudC5wb3NpdGlvbiA9IGNzdG9wOwotICB9Ci0KLSAgaWYgKHNlbGYtPnNlZ21lbnQucmF0ZSA+PSAwKQotICAgIHNlbGYtPm9mZnNldCsrOwotICBlbHNlCi0gICAgc2VsZi0+b2Zmc2V0LS07Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bG9jayk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiSGFuZGxpbmcgYnVmZmVyIHdpdGggdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChpbl9zZWcpIHsKLSAgICBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSBjc3RhcnQ7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IGNzdG9wIC0gY3N0YXJ0OwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpID0gb2Zmc2V0OwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9IG9mZnNldCArIDE7Ci0gICAgZmxvd19yZXQgPSBnc3RfcGFkX3B1c2ggKHNlbGYtPnNyY3BhZCwgYnVmZmVyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJQdXNoaW5nIGJ1ZmZlciByZXN1bHRlZCBpbiAlcyIsCi0gICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChmbG93X3JldCkpOwotICAgIGlmIChmbG93X3JldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIGdvdG8gcGF1c2VfdGFzazsKLSAgfSBlbHNlIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICB9Ci0KLSAgaWYgKGVvcykgewotICAgIGZsb3dfcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gcGF1c2VfdGFzazsKLSAgfQotCi0gIHJldHVybjsKLQotcGF1c2VfdGFzazoKLSAgewotICAgIGNvbnN0IGdjaGFyICpyZWFzb24gPSBnc3RfZmxvd19nZXRfbmFtZSAoZmxvd19yZXQpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsIHJlYXNvbik7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChwYWQpOwotCi0gICAgaWYgKGZsb3dfcmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgaWYgKChzZWxmLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSkgewotICAgICAgICBHc3RNZXNzYWdlICptOwotICAgICAgICBHc3RFdmVudCAqZTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJTZW5kaW5nIHNlZ21lbnQgZG9uZSBhdCBlbmQgb2Ygc2VnbWVudCIpOwotICAgICAgICBpZiAoc2VsZi0+c2VnbWVudC5yYXRlID49IDApIHsKLSAgICAgICAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChzZWxmKSwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzZWxmLT5zZWdtZW50LnN0b3ApOwotICAgICAgICAgIGUgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX0ZPUk1BVF9USU1FLCBzZWxmLT5zZWdtZW50LnN0b3ApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG0gPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUX0NBU1QgKHNlbGYpLAotICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHNlbGYtPnNlZ21lbnQuc3RhcnQpOwotICAgICAgICAgIGUgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX0ZPUk1BVF9USU1FLCBzZWxmLT5zZWdtZW50LnN0YXJ0KTsKLSAgICAgICAgfQotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbGYpLCBtKTsKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmNwYWQsIGUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR3N0RXZlbnQgKmUgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJTZW5kaW5nIEVPUyBhdCBlbmQgb2Ygc2VnbWVudCIpOwotCi0gICAgICAgIGlmIChzZWxmLT5zZXFudW0pCi0gICAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGUsIHNlbGYtPnNlcW51bSk7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBlKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGZsb3dfcmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgfHwgZmxvd19yZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIEdzdEV2ZW50ICplID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0KLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHNlbGYsIGZsb3dfcmV0KTsKLQotICAgICAgaWYgKHNlbGYtPnNlcW51bSkKLSAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGUsIHNlbGYtPnNlcW51bSk7Ci0KLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2ltYWdlX2ZyZWV6ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RJbWFnZUZyZWV6ZSAqc2VsZiA9IEdTVF9JTUFHRV9GUkVFWkUgKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9pbWFnZV9mcmVlemVfcmVzZXQgKHNlbGYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9wYWRfc3RvcF90YXNrIChzZWxmLT5zcmNwYWQpOwotICAgICAgZ3N0X2ltYWdlX2ZyZWV6ZV9yZXNldCAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSkKLSAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfaW1hZ2VfZnJlZXplX2RlYnVnLCAiaW1hZ2VmcmVlemUiLCAwLAotICAgICAgImltYWdlZnJlZXplIGVsZW1lbnQiKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJpbWFnZWZyZWV6ZSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfSU1BR0VfRlJFRVpFKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBpbWFnZWZyZWV6ZSwKLSAgICAiU3RpbGwgZnJhbWUgc3RyZWFtIGdlbmVyYXRvciIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2ltYWdlZnJlZXplL2dzdGltYWdlZnJlZXplLmggYi9nc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllODAzYi4uMDAwMDAwMAotLS0gYS9nc3QvaW1hZ2VmcmVlemUvZ3N0aW1hZ2VmcmVlemUuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfSU1BR0VfRlJFRVpFX0hfXwotI2RlZmluZSBfX0dTVF9JTUFHRV9GUkVFWkVfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9JTUFHRV9GUkVFWkUgXAotICAoZ3N0X2ltYWdlX2ZyZWV6ZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSU1BR0VfRlJFRVpFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSU1BR0VfRlJFRVpFLEdzdEltYWdlRnJlZXplKSkKLSNkZWZpbmUgR1NUX0lNQUdFX0ZSRUVaRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9JTUFHRV9GUkVFWkUsR3N0SW1hZ2VGcmVlemVDbGFzcykpCi0jZGVmaW5lIEdTVF9JTUFHRV9GUkVFWkVfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLEdTVF9UWVBFX0lNQUdFX0ZSRUVaRSxHc3RJbWFnZUZyZWV6ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lNQUdFX0ZSRUVaRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0lNQUdFX0ZSRUVaRSkpCi0jZGVmaW5lIEdTVF9JU19JTUFHRV9GUkVFWkVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSU1BR0VfRlJFRVpFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEltYWdlRnJlZXplIEdzdEltYWdlRnJlZXplOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEltYWdlRnJlZXplQ2xhc3MgR3N0SW1hZ2VGcmVlemVDbGFzczsKLQotc3RydWN0IF9Hc3RJbWFnZUZyZWV6ZQotewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIEdNdXRleCBsb2NrOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgZ2ludCBmcHNfbiwgZnBzX2Q7Ci0KLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBnYm9vbGVhbiBuZWVkX3NlZ21lbnQ7Ci0gIGd1aW50IHNlcW51bTsKLQotICBndWludDY0IG9mZnNldDsKLQotICAvKiBUUlVFIGlmIGN1cnJlbnRseSBkb2luZyBhIGZsdXNoaW5nIHNlZWssIHByb3RlY3RlZAotICAgKiBieSBzcmNwYWQncyBzdHJlYW0gbG9jayAqLwotICBnaW50IHNlZWtpbmc7Ci19OwotCi1zdHJ1Y3QgX0dzdEltYWdlRnJlZXplQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9pbWFnZV9mcmVlemVfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSU1BR0VfRlJFRVpFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2ludGVybGVhdmUvTWFrZWZpbGUuYW0gYi9nc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkYWVmYS4uMDAwMDAwMAotLS0gYS9nc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0aW50ZXJsZWF2ZS5sYQotCi1saWJnc3RpbnRlcmxlYXZlX2xhX1NPVVJDRVMgPSBwbHVnaW4uYyBpbnRlcmxlYXZlLmMgZGVpbnRlcmxlYXZlLmMKLWxpYmdzdGludGVybGVhdmVfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGludGVybGVhdmVfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLWxpYmdzdGludGVybGVhdmVfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0aW50ZXJsZWF2ZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IHBsdWdpbi5oIGludGVybGVhdmUuaCBkZWludGVybGVhdmUuaApkaWZmIC0tZ2l0IGEvZ3N0L2ludGVybGVhdmUvTWFrZWZpbGUuaW4gYi9nc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE0MmY5Ni4uMDAwMDAwMAotLS0gYS9nc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkyNyArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvaW50ZXJsZWF2ZQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGludGVybGVhdmVfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RpbnRlcmxlYXZlX2xhX09CSkVDVFMgPSBsaWJnc3RpbnRlcmxlYXZlX2xhLXBsdWdpbi5sbyBcCi0JbGliZ3N0aW50ZXJsZWF2ZV9sYS1pbnRlcmxlYXZlLmxvIFwKLQlsaWJnc3RpbnRlcmxlYXZlX2xhLWRlaW50ZXJsZWF2ZS5sbwotbGliZ3N0aW50ZXJsZWF2ZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RpbnRlcmxlYXZlX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RpbnRlcmxlYXZlX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0aW50ZXJsZWF2ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmdzdGludGVybGVhdmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0aW50ZXJsZWF2ZV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RpbnRlcmxlYXZlX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGludGVybGVhdmVfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0aW50ZXJsZWF2ZS5sYQotbGliZ3N0aW50ZXJsZWF2ZV9sYV9TT1VSQ0VTID0gcGx1Z2luLmMgaW50ZXJsZWF2ZS5jIGRlaW50ZXJsZWF2ZS5jCi1saWJnc3RpbnRlcmxlYXZlX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RpbnRlcmxlYXZlX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi1saWJnc3RpbnRlcmxlYXZlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdGludGVybGVhdmVfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gcGx1Z2luLmggaW50ZXJsZWF2ZS5oIGRlaW50ZXJsZWF2ZS5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvaW50ZXJsZWF2ZS9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGludGVybGVhdmUubGE6ICQobGliZ3N0aW50ZXJsZWF2ZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdGludGVybGVhdmVfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGludGVybGVhdmVfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdGludGVybGVhdmVfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGludGVybGVhdmVfbGFfT0JKRUNUUykgJChsaWJnc3RpbnRlcmxlYXZlX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0aW50ZXJsZWF2ZV9sYS1kZWludGVybGVhdmUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RpbnRlcmxlYXZlX2xhLWludGVybGVhdmUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RpbnRlcmxlYXZlX2xhLXBsdWdpbi5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0aW50ZXJsZWF2ZV9sYS1wbHVnaW4ubG86IHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aW50ZXJsZWF2ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RpbnRlcmxlYXZlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RpbnRlcmxlYXZlX2xhLXBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aW50ZXJsZWF2ZV9sYS1wbHVnaW4uVHBvIC1jIC1vIGxpYmdzdGludGVybGVhdmVfbGEtcGx1Z2luLmxvIGB0ZXN0IC1mICdwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGx1Z2luLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGludGVybGVhdmVfbGEtcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0aW50ZXJsZWF2ZV9sYS1wbHVnaW4uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncGx1Z2luLmMnIG9iamVjdD0nbGliZ3N0aW50ZXJsZWF2ZV9sYS1wbHVnaW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RpbnRlcmxlYXZlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGludGVybGVhdmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aW50ZXJsZWF2ZV9sYS1wbHVnaW4ubG8gYHRlc3QgLWYgJ3BsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbHVnaW4uYwotCi1saWJnc3RpbnRlcmxlYXZlX2xhLWludGVybGVhdmUubG86IGludGVybGVhdmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGludGVybGVhdmVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aW50ZXJsZWF2ZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aW50ZXJsZWF2ZV9sYS1pbnRlcmxlYXZlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RpbnRlcmxlYXZlX2xhLWludGVybGVhdmUuVHBvIC1jIC1vIGxpYmdzdGludGVybGVhdmVfbGEtaW50ZXJsZWF2ZS5sbyBgdGVzdCAtZiAnaW50ZXJsZWF2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpbnRlcmxlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGludGVybGVhdmVfbGEtaW50ZXJsZWF2ZS5UcG8gJChERVBESVIpL2xpYmdzdGludGVybGVhdmVfbGEtaW50ZXJsZWF2ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdpbnRlcmxlYXZlLmMnIG9iamVjdD0nbGliZ3N0aW50ZXJsZWF2ZV9sYS1pbnRlcmxlYXZlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aW50ZXJsZWF2ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RpbnRlcmxlYXZlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGludGVybGVhdmVfbGEtaW50ZXJsZWF2ZS5sbyBgdGVzdCAtZiAnaW50ZXJsZWF2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpbnRlcmxlYXZlLmMKLQotbGliZ3N0aW50ZXJsZWF2ZV9sYS1kZWludGVybGVhdmUubG86IGRlaW50ZXJsZWF2ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aW50ZXJsZWF2ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RpbnRlcmxlYXZlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RpbnRlcmxlYXZlX2xhLWRlaW50ZXJsZWF2ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aW50ZXJsZWF2ZV9sYS1kZWludGVybGVhdmUuVHBvIC1jIC1vIGxpYmdzdGludGVybGVhdmVfbGEtZGVpbnRlcmxlYXZlLmxvIGB0ZXN0IC1mICdkZWludGVybGVhdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVpbnRlcmxlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGludGVybGVhdmVfbGEtZGVpbnRlcmxlYXZlLlRwbyAkKERFUERJUikvbGliZ3N0aW50ZXJsZWF2ZV9sYS1kZWludGVybGVhdmUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZGVpbnRlcmxlYXZlLmMnIG9iamVjdD0nbGliZ3N0aW50ZXJsZWF2ZV9sYS1kZWludGVybGVhdmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RpbnRlcmxlYXZlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGludGVybGVhdmVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aW50ZXJsZWF2ZV9sYS1kZWludGVybGVhdmUubG8gYHRlc3QgLWYgJ2RlaW50ZXJsZWF2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkZWludGVybGVhdmUuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuYyBiL2dzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODk3NDQ5Li4wMDAwMDAwCi0tLSBhL2dzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxOSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDcgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGRlaW50ZXJsZWF2ZS5jOiBkZWludGVybGVhdmUgc2FtcGxlcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIFRPRE86IAotICogICAgICAgLSBoYW5kbGUgY2hhbmdlcyBpbiBudW1iZXIgb2YgY2hhbm5lbHMKLSAqICAgICAgIC0gaGFuZGxlIGNoYW5nZXMgaW4gY2hhbm5lbCBwb3NpdGlvbnMKLSAqICAgICAgIC0gYmV0dGVyIGNhcHNuZWdvIGJ5IHVzaW5nIGEgYnVmZmVyIGFsbG9jIGZ1bmN0aW9uCi0gKiAgICAgICAgIGFuZCBwYXNzaW5nIGRvd25zdHJlYW0gY2FwcyBjaGFuZ2VzIHVwc3RyZWFtIHRoZXJlCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZGVpbnRlcmxlYXZlCi0gKiBAc2VlX2Fsc286IGludGVybGVhdmUKLSAqCi0gKiBTcGxpdHMgb25lIGludGVybGVhdmVkIG11bHRpY2hhbm5lbCBhdWRpbyBzdHJlYW0gaW50byBtYW55IG1vbm8gYXVkaW8gc3RyZWFtcy4KLSAqIAotICogVGhpcyBlbGVtZW50IGhhbmRsZXMgYWxsIHJhdyBhdWRpbyBmb3JtYXRzIGFuZCBzdXBwb3J0cyBjaGFuZ2luZyB0aGUgaW5wdXQgY2FwcyBhcyBsb25nIGFzCi0gKiBhbGwgZG93bnN0cmVhbSBlbGVtZW50cyBjYW4gaGFuZGxlIHRoZSBuZXcgY2FwcyBhbmQgdGhlIG51bWJlciBvZiBjaGFubmVscyBhbmQgdGhlIGNoYW5uZWwKLSAqIHBvc2l0aW9ucyBzdGF5IHRoZSBzYW1lLiBUaGlzIHJlc3RyaWN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBsYXRlciB2ZXJzaW9ucyBieSBhZGRpbmcgb3IKLSAqIHJlbW92aW5nIHNvbWUgc291cmNlIHBhZHMgYXMgcmVxdWlyZWQuCi0gKiAKLSAqIEluIG1vc3QgY2FzZXMgYSBxdWV1ZSBhbmQgYW4gYXVkaW9jb252ZXJ0IGVsZW1lbnQgc2hvdWxkIGJlIGFkZGVkIGFmdGVyIGVhY2ggc291cmNlIHBhZAotICogYmVmb3JlIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiB0aGUgYXVkaW8gZGF0YS4KLSAqIAotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249L3BhdGgvdG8vZmlsZS5tcDMgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgISAiYXVkaW8veC1yYXcsY2hhbm5lbHM9MiAhIGRlaW50ZXJsZWF2ZSBuYW1lPWQgIGQuc3JjXzAgISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIHZvcmJpc2VuYyAhIG9nZ211eCAhIGZpbGVzaW5rIGxvY2F0aW9uPWNoYW5uZWwxLm9nZyAgZC5zcmNfMSAhIHF1ZXVlICEgYXVkaW9jb252ZXJ0ICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249Y2hhbm5lbDIub2dnCi0gKiBdfCBEZWNvZGVzIGFuIE1QMyBmaWxlIGFuZCBlbmNvZGVzIHRoZSBsZWZ0IGFuZCByaWdodCBjaGFubmVsIGludG8gc2VwYXJhdGUKLSAqIE9nZyBWb3JiaXMgZmlsZXMuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1maWxlLm1wMyAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCAhICJhdWRpby94LXJhdyxjaGFubmVscz0yIiAhIGRlaW50ZXJsZWF2ZSBuYW1lPWQgIGludGVybGVhdmUgbmFtZT1pICEgYXVkaW9jb252ZXJ0ICEgd2F2ZW5jICEgZmlsZXNpbmsgbG9jYXRpb249dGVzdC53YXYgICAgZC5zcmNfMCAhIHF1ZXVlICEgYXVkaW9jb252ZXJ0ICEgaS5zaW5rXzEgICAgZC5zcmNfMSAhIHF1ZXVlICEgYXVkaW9jb252ZXJ0ICEgaS5zaW5rXzAKLSAqIF18IERlY29kZXMgYW5kIGRlaW50ZXJsZWF2ZXMgYSBTdGVyZW8gTVAzIGZpbGUgaW50byBzZXBhcmF0ZSBjaGFubmVscyBhbmQKLSAqIHRoZW4gaW50ZXJsZWF2ZXMgdGhlIGNoYW5uZWxzIGFnYWluIHRvIGEgV0FWIGZpbGUgd2l0aCB0aGUgY2hhbm5lbCB3aXRoIHRoZQotICogY2hhbm5lbHMgZXhjaGFuZ2VkLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJkZWludGVybGVhdmUuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2RlaW50ZXJsZWF2ZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZGVpbnRlcmxlYXZlX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyY18ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX0ZPUk1BVFNfQUxMICIsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsIGxheW91dCA9IChzdHJpbmcpIHtub24taW50ZXJsZWF2ZWQsIGludGVybGVhdmVkfSIpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fRk9STUFUU19BTEwgIiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSwgbGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQiKSk7Ci0KLSNkZWZpbmUgTUFLRV9GVU5DKHR5cGUpIFwKLXN0YXRpYyB2b2lkIGRlaW50ZXJsZWF2ZV8jI3R5cGUgKGd1aW50IyN0eXBlICpvdXQsIGd1aW50IyN0eXBlICppbiwgXAotICAgIGd1aW50IHN0cmlkZSwgZ3VpbnQgbmZyYW1lcykgXAoteyBcCi0gIGdpbnQgaTsgXAotICBcCi0gIGZvciAoaSA9IDA7IGkgPCBuZnJhbWVzOyBpKyspIHsgXAotICAgIG91dFtpXSA9ICppbjsgXAotICAgIGluICs9IHN0cmlkZTsgXAotICB9IFwKLX0KLQotTUFLRV9GVU5DICg4KTsKLU1BS0VfRlVOQyAoMTYpOwotTUFLRV9GVU5DICgzMik7Ci1NQUtFX0ZVTkMgKDY0KTsKLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsZWF2ZV8yNCAoZ3VpbnQ4ICogb3V0LCBndWludDggKiBpbiwgZ3VpbnQgc3RyaWRlLCBndWludCBuZnJhbWVzKQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5mcmFtZXM7IGkrKykgewotICAgIG1lbWNweSAob3V0LCBpbiwgMyk7Ci0gICAgb3V0ICs9IDM7Ci0gICAgaW4gKz0gc3RyaWRlICogMzsKLSAgfQotfQotCi0jZGVmaW5lIGdzdF9kZWludGVybGVhdmVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0RGVpbnRlcmxlYXZlLCBnc3RfZGVpbnRlcmxlYXZlLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfS0VFUF9QT1NJVElPTlMKLX07Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9kZWludGVybGVhdmVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGVpbnRlcmxlYXZlX3Npbmtfc2V0Y2FwcyAoR3N0RGVpbnRlcmxlYXZlICogc2VsZiwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X2RlaW50ZXJsZWF2ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9kZWludGVybGVhdmVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9kZWludGVybGVhdmVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIHZvaWQgZ3N0X2RlaW50ZXJsZWF2ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZGVpbnRlcmxlYXZlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X2RlaW50ZXJsZWF2ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iaikKLXsKLSAgR3N0RGVpbnRlcmxlYXZlICpzZWxmID0gR1NUX0RFSU5URVJMRUFWRSAob2JqKTsKLQotICBpZiAoc2VsZi0+cGVuZGluZ19ldmVudHMpIHsKLSAgICBnX2xpc3RfZm9yZWFjaCAoc2VsZi0+cGVuZGluZ19ldmVudHMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgICBnX2xpc3RfZnJlZSAoc2VsZi0+cGVuZGluZ19ldmVudHMpOwotICAgIHNlbGYtPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGVhdmVfY2xhc3NfaW5pdCAoR3N0RGVpbnRlcmxlYXZlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2RlaW50ZXJsZWF2ZV9kZWJ1ZywgImRlaW50ZXJsZWF2ZSIsIDAsCi0gICAgICAiZGVpbnRlcmxlYXZlIGVsZW1lbnQiKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIkF1ZGlvIGRlaW50ZXJsZWF2ZXIiLCAiRmlsdGVyL0NvbnZlcnRlci9BdWRpbyIsCi0gICAgICAiU3BsaXRzIG9uZSBpbnRlcmxlYXZlZCBtdWx0aWNoYW5uZWwgYXVkaW8gc3RyZWFtIGludG8gbWFueSBtb25vIGF1ZGlvIHN0cmVhbXMiLAotICAgICAgIkFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4sICIgIklhaW4gPGlhaW5AcHJldHR5cGVvcGxlLm9yZz4sICIKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9kZWludGVybGVhdmVfY2hhbmdlX3N0YXRlOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2RlaW50ZXJsZWF2ZV9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2RlaW50ZXJsZWF2ZV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9kZWludGVybGVhdmVfZ2V0X3Byb3BlcnR5OwotCi0gIC8qKgotICAgKiBHc3REZWludGVybGVhdmU6a2VlcC1wb3NpdGlvbnMKLSAgICogCi0gICAqIEtlZXAgcG9zaXRpb25zOiBXaGVuIGVuYWJsZSB0aGUgY2FwcyBvbiB0aGUgb3V0cHV0IGJ1ZmZlcnMgd2lsbAotICAgKiBjb250YWluIHRoZSBvcmlnaW5hbCBjaGFubmVsIHBvc2l0aW9ucy4gVGhpcyBjYW4gYmUgdXNlZCB0byBjb3JyZWN0bHkKLSAgICogaW50ZXJsZWF2ZSB0aGUgb3V0cHV0IGFnYWluIGxhdGVyIGJ1dCBjYW4gYWxzbyBsZWFkIHRvIHVud2FudGVkIGVmZmVjdHMKLSAgICogaWYgdGhlIG91dHB1dCBzaG91bGQgYmUgaGFuZGxlZCBhcyBNb25vLgotICAgKgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9LRUVQX1BPU0lUSU9OUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgia2VlcC1wb3NpdGlvbnMiLCAiS2VlcCBwb3NpdGlvbnMiLAotICAgICAgICAgICJLZWVwIHRoZSBvcmlnaW5hbCBjaGFubmVsIHBvc2l0aW9ucyBvbiB0aGUgb3V0cHV0IGJ1ZmZlcnMiLAotICAgICAgICAgIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGVhdmVfaW5pdCAoR3N0RGVpbnRlcmxlYXZlICogc2VsZikKLXsKLSAgc2VsZi0+a2VlcF9wb3NpdGlvbnMgPSBGQUxTRTsKLSAgc2VsZi0+ZnVuYyA9IE5VTEw7Ci0gIGdzdF9hdWRpb19pbmZvX2luaXQgKCZzZWxmLT5hdWRpb19pbmZvKTsKLQotICAvKiBBZGQgc2luayBwYWQgKi8KLSAgc2VsZi0+c2luayA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlbGYtPnNpbmssCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RlaW50ZXJsZWF2ZV9jaGFpbikpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2VsZi0+c2luaywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGVpbnRlcmxlYXZlX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNlbGYtPnNpbmssCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX3F1ZXJ5KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzZWxmKSwgc2VsZi0+c2luayk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZCAqcGFkOwotfSBDb3B5U3RpY2t5RXZlbnRzRGF0YTsKLQotc3RhdGljIGdib29sZWFuCi1jb3B5X3N0aWNreV9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQ29weVN0aWNreUV2ZW50c0RhdGEgKmRhdGEgPSB1c2VyX2RhdGE7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFICgqZXZlbnQpID49IEdTVF9FVkVOVF9DQVBTICYmIGRhdGEtPmNhcHMpIHsKLSAgICBnc3RfcGFkX3NldF9jYXBzIChkYXRhLT5wYWQsIGRhdGEtPmNhcHMpOwotICAgIGRhdGEtPmNhcHMgPSBOVUxMOwotICB9Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFICgqZXZlbnQpICE9IEdTVF9FVkVOVF9DQVBTKQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGF0YS0+cGFkLCBnc3RfZXZlbnRfcmVmICgqZXZlbnQpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGVhdmVfYWRkX25ld19wYWRzIChHc3REZWludGVybGVhdmUgKiBzZWxmLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGd1aW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTICgmc2VsZi0+YXVkaW9faW5mbyk7IGkrKykgewotICAgIGdjaGFyICpuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyV1IiwgaSk7Ci0gICAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgICBHc3RBdWRpb0Zvcm1hdCBmb3JtYXQgPSBHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZzZWxmLT5hdWRpb19pbmZvKTsKLSAgICBnaW50IHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmc2VsZi0+YXVkaW9faW5mbyk7Ci0gICAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05POwotICAgIENvcHlTdGlja3lFdmVudHNEYXRhIGRhdGE7Ci0KLSAgICAvKiBTZXQgY2hhbm5lbCBwb3NpdGlvbiBpZiB3ZSBrbm93IGl0ICovCi0gICAgaWYgKHNlbGYtPmtlZXBfcG9zaXRpb25zKQotICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fSU5GT19QT1NJVElPTiAoJnNlbGYtPmF1ZGlvX2luZm8sIGkpOwotCi0gICAgZ3N0X2F1ZGlvX2luZm9faW5pdCAoJmluZm8pOwotICAgIGdzdF9hdWRpb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLCBmb3JtYXQsIHJhdGUsIDEsICZwb3NpdGlvbik7Ci0KLSAgICBzcmNjYXBzID0gZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcyAoJmluZm8pOwotCi0gICAgcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcGxhdGUsIG5hbWUpOwotICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChwYWQpOwotICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChwYWQsCi0gICAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGVpbnRlcmxlYXZlX3NyY19xdWVyeSkpOwotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLQotICAgIGRhdGEucGFkID0gcGFkOwotICAgIGRhdGEuY2FwcyA9IHNyY2NhcHM7Ci0gICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHNlbGYtPnNpbmssIGNvcHlfc3RpY2t5X2V2ZW50cywgJmRhdGEpOwotICAgIGlmIChkYXRhLmNhcHMpCi0gICAgICBnc3RfcGFkX3NldF9jYXBzIChwYWQsIGRhdGEuY2Fwcyk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbGYpLCBwYWQpOwotICAgIHNlbGYtPnNyY3BhZHMgPSBnX2xpc3RfcHJlcGVuZCAoc2VsZi0+c3JjcGFkcywgZ3N0X29iamVjdF9yZWYgKHBhZCkpOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfbm9fbW9yZV9wYWRzIChHU1RfRUxFTUVOVCAoc2VsZikpOwotICBzZWxmLT5zcmNwYWRzID0gZ19saXN0X3JldmVyc2UgKHNlbGYtPnNyY3BhZHMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGVhdmVfc2V0X3BhZHNfY2FwcyAoR3N0RGVpbnRlcmxlYXZlICogc2VsZiwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdMaXN0ICpsOwotICBnaW50IGk7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgZm9yIChsID0gc2VsZi0+c3JjcGFkcywgaSA9IDA7IGw7IGwgPSBsLT5uZXh0LCBpKyspIHsKLSAgICBHc3RQYWQgKnBhZCA9IEdTVF9QQUQgKGwtPmRhdGEpOwotICAgIEdzdENhcHMgKnNyY2NhcHM7Ci0gICAgR3N0QXVkaW9JbmZvIGluZm87Ci0KLSAgICBpZiAoIWdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGNhcHMpKSB7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoc2VsZi0+a2VlcF9wb3NpdGlvbnMpCi0gICAgICBHU1RfQVVESU9fSU5GT19QT1NJVElPTiAoJmluZm8sIDApID0KLSAgICAgICAgICBHU1RfQVVESU9fSU5GT19QT1NJVElPTiAoJnNlbGYtPmF1ZGlvX2luZm8sIGkpOwotCi0gICAgc3JjY2FwcyA9IGdzdF9hdWRpb19pbmZvX3RvX2NhcHMgKCZpbmZvKTsKLQotICAgIGdzdF9wYWRfc2V0X2NhcHMgKHBhZCwgc3JjY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxlYXZlX3JlbW92ZV9wYWRzIChHc3REZWludGVybGVhdmUgKiBzZWxmKQotewotICBHTGlzdCAqbDsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJyZW1vdmluZyBwYWRzIik7Ci0KLSAgZm9yIChsID0gc2VsZi0+c3JjcGFkczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RQYWQgKnBhZCA9IEdTVF9QQUQgKGwtPmRhdGEpOwotCi0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsZiksIHBhZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgfQotICBnX2xpc3RfZnJlZSAoc2VsZi0+c3JjcGFkcyk7Ci0gIHNlbGYtPnNyY3BhZHMgPSBOVUxMOwotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5zaW5rY2FwcywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RlaW50ZXJsZWF2ZV9zZXRfcHJvY2Vzc19mdW5jdGlvbiAoR3N0RGVpbnRlcmxlYXZlICogc2VsZikKLXsKLSAgc3dpdGNoIChHU1RfQVVESU9fSU5GT19XSURUSCAoJnNlbGYtPmF1ZGlvX2luZm8pKSB7Ci0gICAgY2FzZSA4OgotICAgICAgc2VsZi0+ZnVuYyA9IChHc3REZWludGVybGVhdmVGdW5jKSBkZWludGVybGVhdmVfODsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTY6Ci0gICAgICBzZWxmLT5mdW5jID0gKEdzdERlaW50ZXJsZWF2ZUZ1bmMpIGRlaW50ZXJsZWF2ZV8xNjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjQ6Ci0gICAgICBzZWxmLT5mdW5jID0gKEdzdERlaW50ZXJsZWF2ZUZ1bmMpIGRlaW50ZXJsZWF2ZV8yNDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzI6Ci0gICAgICBzZWxmLT5mdW5jID0gKEdzdERlaW50ZXJsZWF2ZUZ1bmMpIGRlaW50ZXJsZWF2ZV8zMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNjQ6Ci0gICAgICBzZWxmLT5mdW5jID0gKEdzdERlaW50ZXJsZWF2ZUZ1bmMpIGRlaW50ZXJsZWF2ZV82NDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RlaW50ZXJsZWF2ZV9jaGVja19jYXBzX2NoYW5nZSAoR3N0RGVpbnRlcmxlYXZlICogc2VsZiwKLSAgICBHc3RBdWRpb0luZm8gKiBvbGRfaW5mbywgR3N0QXVkaW9JbmZvICogbmV3X2luZm8pCi17Ci0gIGdpbnQgaTsKLSAgZ2Jvb2xlYW4gc2FtZV9sYXlvdXQgPSBUUlVFOwotICBnYm9vbGVhbiB3YXNfdW5wb3NpdGlvbmVkOwotICBnYm9vbGVhbiBpc191bnBvc2l0aW9uZWQgPSBHU1RfQVVESU9fSU5GT19JU19VTlBPU0lUSU9ORUQgKG5ld19pbmZvKTsKLSAgZ2ludCBuZXdfY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAobmV3X2luZm8pOwotICBnaW50IG9sZF9jaGFubmVsczsKLQotICB3YXNfdW5wb3NpdGlvbmVkID0gR1NUX0FVRElPX0lORk9fSVNfVU5QT1NJVElPTkVEIChvbGRfaW5mbyk7Ci0gIG9sZF9jaGFubmVscyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTIChvbGRfaW5mbyk7Ci0KLSAgLyogV2UgYWxsb3cgY2FwcyBjaGFuZ2VzIGFzIGxvbmcgYXMgdGhlIG51bWJlciBvZiBjaGFubmVscyBkb2Vzbid0IGNoYW5nZQotICAgKiBhbmQgdGhlIGNoYW5uZWwgcG9zaXRpb25zIHN0YXkgdGhlIHNhbWUuIF9nZXRjYXBzKCkgc2hvdWxkJ3ZlIGNhcmVkCi0gICAqIGZvciB0aGlzIGFscmVhZHkgYnV0IGJldHRlciBiZSBzYWZlLgotICAgKi8KLSAgaWYgKG5ld19jaGFubmVscyAhPSBvbGRfY2hhbm5lbHMpCi0gICAgZ290byBjYW5ub3RfY2hhbmdlX2NhcHM7Ci0KLSAgLyogTm93IGNoZWNrIHRoZSBjaGFubmVsIHBvc2l0aW9ucy4gSWYgd2UgaGFkIG5vIGNoYW5uZWwgcG9zaXRpb25zCi0gICAqIGFuZCBnZXQgdGhlbSBvciB0aGUgb3RoZXIgd2F5IGFyb3VuZCB0aGluZ3MgaGF2ZSBjaGFuZ2VkLgotICAgKiBJZiB3ZSBoYWQgY2hhbm5lbCBwb3NpdGlvbnMgYW5kIGdldCBkaWZmZXJlbnQgb25lcyB0aGluZ3MgaGF2ZQotICAgKiBjaGFuZ2VkIHRvbyBvZiBjb3Vyc2UKLSAgICovCi0gIGlmICgoIXdhc191bnBvc2l0aW9uZWQgJiYgaXNfdW5wb3NpdGlvbmVkKSB8fCAod2FzX3VucG9zaXRpb25lZAotICAgICAgICAgICYmICFpc191bnBvc2l0aW9uZWQpKQotICAgIGdvdG8gY2Fubm90X2NoYW5nZV9jYXBzOwotCi0gIGlmICghaXNfdW5wb3NpdGlvbmVkKSB7Ci0gICAgaWYgKEdTVF9BVURJT19JTkZPX0NIQU5ORUxTIChvbGRfaW5mbykgIT0KLSAgICAgICAgR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKG5ld19pbmZvKSkKLSAgICAgIGdvdG8gY2Fubm90X2NoYW5nZV9jYXBzOwotICAgIGZvciAoaSA9IDA7IGkgPCBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAob2xkX2luZm8pOyBpKyspIHsKLSAgICAgIGlmIChuZXdfaW5mby0+cG9zaXRpb25baV0gIT0gb2xkX2luZm8tPnBvc2l0aW9uW2ldKSB7Ci0gICAgICAgIHNhbWVfbGF5b3V0ID0gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIXNhbWVfbGF5b3V0KQotICAgICAgZ290byBjYW5ub3RfY2hhbmdlX2NhcHM7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotY2Fubm90X2NoYW5nZV9jYXBzOgotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX3NldGNhcHMgKEdzdERlaW50ZXJsZWF2ZSAqIHNlbGYsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImdvdCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgaWYgKCFnc3RfYXVkaW9faW5mb19mcm9tX2NhcHMgKCZzZWxmLT5hdWRpb19pbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBpZiAoIWdzdF9kZWludGVybGVhdmVfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKHNlbGYpKQotICAgIGdvdG8gdW5zdXBwb3J0ZWRfY2FwczsKLQotICBpZiAoc2VsZi0+c2lua2NhcHMgJiYgIWdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBzZWxmLT5zaW5rY2FwcykpIHsKLSAgICBHc3RBdWRpb0luZm8gb2xkX2luZm87Ci0KLSAgICBnc3RfYXVkaW9faW5mb19pbml0ICgmb2xkX2luZm8pOwotICAgIGlmICghZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmb2xkX2luZm8sIHNlbGYtPnNpbmtjYXBzKSkKLSAgICAgIGdvdG8gaW5mb19mcm9tX2NhcHNfZmFpbGVkOwotCi0gICAgaWYgKGdzdF9kZWludGVybGVhdmVfY2hlY2tfY2Fwc19jaGFuZ2UgKHNlbGYsICZvbGRfaW5mbywgJnNlbGYtPmF1ZGlvX2luZm8pKSB7Ci0gICAgICBpZiAoIWdzdF9kZWludGVybGVhdmVfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKHNlbGYpKQotICAgICAgICBnb3RvIGNhbm5vdF9jaGFuZ2VfY2FwczsKLSAgICB9IGVsc2UKLSAgICAgIGdvdG8gY2Fubm90X2NoYW5nZV9jYXBzOwotCi0gIH0KLQotICBnc3RfY2Fwc19yZXBsYWNlICgmc2VsZi0+c2lua2NhcHMsIGNhcHMpOwotCi0gIC8qIEdldCBzcmNwYWQgY2FwcyAqLwotICBzcmNjYXBzID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNjYXBzLCAwKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNoYW5uZWwtbWFzayIpOwotCi0gIC8qIElmIHdlIGFscmVhZHkgaGF2ZSBwYWRzLCB1cGRhdGUgdGhlIGNhcHMgb3RoZXJ3aXNlCi0gICAqIGFkZCBuZXcgcGFkcyAqLwotICBpZiAoc2VsZi0+c3JjcGFkcykgewotICAgIGlmICghZ3N0X2RlaW50ZXJsZWF2ZV9zZXRfcGFkc19jYXBzIChzZWxmLCBzcmNjYXBzKSkKLSAgICAgIGdvdG8gc2V0X2NhcHNfZmFpbGVkOwotICB9IGVsc2UgewotICAgIGdzdF9kZWludGVybGVhdmVfYWRkX25ld19wYWRzIChzZWxmLCBzcmNjYXBzKTsKLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gVFJVRTsKLQotY2Fubm90X2NoYW5nZV9jYXBzOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAiY2FwcyBjaGFuZ2UgZnJvbSAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgICAiIHRvICUiIEdTVF9QVFJfRk9STUFUICIgbm90IHN1cHBvcnRlZDogY2hhbm5lbCBudW1iZXIgb3IgY2hhbm5lbCAiCi0gICAgICAgICJwb3NpdGlvbnMgY2hhbmdlIiwgc2VsZi0+c2lua2NhcHMsIGNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5zdXBwb3J0ZWRfY2FwczoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJjYXBzIG5vdCBzdXBwb3J0ZWQ6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfY2FwczoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJpbnZhbGlkIGNhcHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXNldF9jYXBzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJzZXRfY2FwcyBmYWlsZWQiKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbmZvX2Zyb21fY2Fwc19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiY291ZCBub3QgZ2V0IGluZm8gZnJvbSBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX3JlbW92ZV9jaGFubmVscyAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2ludCBpLCBzaXplOwotCi0gIHNpemUgPSBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJjaGFubmVsLW1hc2siKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNoYW5uZWxzIik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLV9fc2V0X2NoYW5uZWxzIChHc3RDYXBzICogY2FwcywgZ2ludCBjaGFubmVscykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnaW50IGksIHNpemU7Ci0KLSAgc2l6ZSA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLSAgICBpZiAoY2hhbm5lbHMgPiAwKQotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLCBOVUxMKTsKLSAgICBlbHNlCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImNoYW5uZWxzIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCBHX01BWElOVCwgTlVMTCk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGVpbnRlcmxlYXZlX3NpbmtfYWNjZXB0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdERlaW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEVBVkUgKHBhcmVudCk7Ci0gIEdzdENhcHMgKnRlbXBsX2NhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHJldCA9IGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKHRlbXBsX2NhcHMsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAodGVtcGxfY2Fwcyk7Ci0gIGlmIChyZXQgJiYgc2VsZi0+c2lua2NhcHMpIHsKLSAgICBHc3RBdWRpb0luZm8gbmV3X2luZm87Ci0KLSAgICBnc3RfYXVkaW9faW5mb19pbml0ICgmbmV3X2luZm8pOwotICAgIGlmICghZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmbmV3X2luZm8sIGNhcHMpKQotICAgICAgZ290byBpbmZvX2Zyb21fY2Fwc19mYWlsZWQ7Ci0gICAgcmV0ID0KLSAgICAgICAgZ3N0X2RlaW50ZXJsZWF2ZV9jaGVja19jYXBzX2NoYW5nZSAoc2VsZiwgJnNlbGYtPmF1ZGlvX2luZm8sICZuZXdfaW5mbyk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi1pbmZvX2Zyb21fY2Fwc19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiY291ZCBub3QgZ2V0IGluZm8gZnJvbSBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9kZWludGVybGVhdmVfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdERlaW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEVBVkUgKHBhcmVudCk7Ci0gIEdzdENhcHMgKnJldDsKLSAgR3N0SXRlcmF0b3IgKml0OwotICBHc3RJdGVyYXRvclJlc3VsdCByZXM7Ci0gIEdWYWx1ZSB2ID0gR19WQUxVRV9JTklUOwotCi0gIGlmIChwYWQgIT0gc2VsZi0+c2luaykgewotICAgIHJldCA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgICBpZiAocmV0KSB7Ci0gICAgICBpZiAoZmlsdGVyKSB7Ci0gICAgICAgIEdzdENhcHMgKnRtcCA9Ci0gICAgICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmIChyZXQpOwotICAgICAgICByZXQgPSB0bXA7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgfQotCi0gIC8qIEludGVyc2VjdCBhbGwgb2Ygb3VyIHBhZCB0ZW1wbGF0ZSBjYXBzIHdpdGggdGhlIHBlZXIgY2FwcyBvZiB0aGUgcGFkCi0gICAqIHRvIGdldCBhbGwgZm9ybWF0cyB0aGF0IGFyZSBwb3NzaWJsZSB1cC0gYW5kIGRvd25zdHJlYW0uCi0gICAqCi0gICAqIEZvciB0aGUgcGFkIGZvciB3aGljaCB0aGUgY2FwcyBhcmUgcmVxdWVzdGVkIHdlIGRvbid0IHJlbW92ZSB0aGUgY2hhbm5lbAotICAgKiBpbmZvcm1hdGlvbnMgYXMgdGhleSBtdXN0IGJlIGluIHRoZSByZXR1cm5lZCBjYXBzIGFuZCBpbmNvbXBhdGliaWxpdGllcwotICAgKiB3aWxsIGJlIGRldGVjdGVkIGhlcmUgYWxyZWFkeQotICAgKi8KLSAgcmV0ID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgaXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbGYpKTsKLQotICBkbyB7Ci0gICAgcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmdik7Ci0gICAgc3dpdGNoIChyZXMpIHsKLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOnsKLSAgICAgICAgR3N0UGFkICpvdXJwYWQgPSBHU1RfUEFEIChnX3ZhbHVlX2dldF9vYmplY3QgKCZ2KSk7Ci0gICAgICAgIEdzdENhcHMgKnBlZXJjYXBzID0gTlVMTCwgKm91cmNhcHM7Ci0gICAgICAgIEdzdENhcHMgKnRlbXBsX2NhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAob3VycGFkKTsKLQotICAgICAgICBvdXJjYXBzID0gZ3N0X2NhcHNfY29weSAodGVtcGxfY2Fwcyk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbF9jYXBzKTsKLQotICAgICAgICBpZiAocGFkID09IG91cnBhZCkgewotICAgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTiAocGFkKSA9PSBHU1RfUEFEX1NJTkspCi0gICAgICAgICAgICBfX3NldF9jaGFubmVscyAob3VyY2FwcywKLSAgICAgICAgICAgICAgICBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJnNlbGYtPmF1ZGlvX2luZm8pKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBfX3NldF9jaGFubmVscyAob3VyY2FwcywgMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgX19yZW1vdmVfY2hhbm5lbHMgKG91cmNhcHMpOwotICAgICAgICAgIC8qIE9ubHkgYXNrIGZvciBwZWVyIGNhcHMgZm9yIG90aGVyIHBhZHMgdGhhbiBwYWQKLSAgICAgICAgICAgKiBhcyBvdGhlcndpc2UgZ3N0X3BhZF9wZWVyX2dldF9jYXBzKCkgbWlnaHQgY2FsbAotICAgICAgICAgICAqIGJhY2sgaW50byB0aGlzIGZ1bmN0aW9uIGFuZCBkZWFkbG9jawotICAgICAgICAgICAqLwotICAgICAgICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKG91cnBhZCwgTlVMTCk7Ci0gICAgICAgICAgcGVlcmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChwZWVyY2Fwcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBJZiB0aGUgcGVlciBleGlzdHMgYW5kIGhhcyBjYXBzIGFkZCB0aGVtIHRvIHRoZSBpbnRlcnNlY3Rpb24sCi0gICAgICAgICAqIG90aGVyd2lzZSBhc3N1bWUgdGhhdCB0aGUgcGVlciBhY2NlcHRzIGV2ZXJ5dGhpbmcgKi8KLSAgICAgICAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgICAgICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotICAgICAgICAgIEdzdENhcHMgKm9sZHJldCA9IHJldDsKLQotICAgICAgICAgIF9fcmVtb3ZlX2NoYW5uZWxzIChwZWVyY2Fwcyk7Ci0KLSAgICAgICAgICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHBlZXJjYXBzLCBvdXJjYXBzKTsKLQotICAgICAgICAgIHJldCA9IGdzdF9jYXBzX2ludGVyc2VjdCAocmV0LCBpbnRlcnNlY3Rpb24pOwotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChpbnRlcnNlY3Rpb24pOwotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gICAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKG9sZHJldCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR3N0Q2FwcyAqb2xkcmV0ID0gcmV0OwotCi0gICAgICAgICAgcmV0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChyZXQsIG91cmNhcHMpOwotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChvbGRyZXQpOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmIChvdXJjYXBzKTsKLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJnYpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmIChyZXQpOwotICAgICAgICByZXQgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICBnc3RfY2Fwc191bnJlZiAocmV0KTsKLSAgICAgICAgcmV0ID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUgKHJlcyAhPSBHU1RfSVRFUkFUT1JfRE9ORSAmJiByZXMgIT0gR1NUX0lURVJBVE9SX0VSUk9SKTsKLSAgZ192YWx1ZV91bnNldCAoJnYpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICphdXg7Ci0KLSAgICBhdXggPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gYXV4OwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiSW50ZXJzZWN0ZWQgY2FwcyB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGVhdmVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdERlaW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEVBVkUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfREVCVUcgKCJHb3QgJXMgZXZlbnQgb24gcGFkICVzOiVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICAvKiBTZW5kIEZMVVNIX1NUT1AsIEZMVVNIX1NUQVJUIGFuZCBFT1MgaW1tZWRpYXRlbHksIG5vIG1hdHRlciBpZgotICAgKiB3ZSBoYXZlIHNyYyBwYWRzIGFscmVhZHkgb3Igbm90LiBRdWV1ZSBhbGwgb3RoZXIgZXZlbnRzIGFuZAotICAgKiBwdXNoIHRoZW0gYWZ0ZXIgd2UgaGF2ZSBzcmMgcGFkcwotICAgKi8KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgcmV0ID0gZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX3NldGNhcHMgKHNlbGYsIGNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgaWYgKCFzZWxmLT5zcmNwYWRzICYmICFHU1RfRVZFTlRfSVNfU1RJQ0tZIChldmVudCkpIHsKLSAgICAgICAgLyogU3RpY2t5IGV2ZW50cyBhcmUgY29waWVkIHdoZW4gY3JlYXRpbmcgYSBuZXcgcGFkICovCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICAgICAgIHNlbGYtPnBlbmRpbmdfZXZlbnRzID0gZ19saXN0X2FwcGVuZCAoc2VsZi0+cGVuZGluZ19ldmVudHMsIGV2ZW50KTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kZWludGVybGVhdmVfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOnsKLSAgICAgIEdzdENhcHMgKmZpbHRlcjsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBjYXBzID0gZ3N0X2RlaW50ZXJsZWF2ZV9nZXRjYXBzIChwYWQsIHBhcmVudCwgZmlsdGVyKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfQUNDRVBUX0NBUFM6ewotICAgICAgR3N0Q2FwcyAqY2FwczsKLSAgICAgIGdib29sZWFuIHJldDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzIChxdWVyeSwgJmNhcHMpOwotICAgICAgcmV0ID0gZ3N0X2RlaW50ZXJsZWF2ZV9zaW5rX2FjY2VwdGNhcHMgKHBhZCwgcGFyZW50LCBjYXBzKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0IChxdWVyeSwgcmV0KTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGVpbnRlcmxlYXZlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdERlaW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEVBVkUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlczsKLQotICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0KLSAgaWYgKHJlcyAmJiBHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9EVVJBVElPTikgewotICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgZ2ludDY0IGR1cjsKLQotICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsICZkdXIpOwotCi0gICAgLyogTmVlZCB0byBkaXZpZGUgYnkgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbiBieXRlIGZvcm1hdAotICAgICAqIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS4gQWxsIG90aGVyIGZvcm1hdHMgc2hvdWxkIGJlIGZpbmUKLSAgICAgKi8KLSAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMgJiYgZHVyICE9IC0xKQotICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIGZvcm1hdCwKLSAgICAgICAgICBkdXIgLyBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJnNlbGYtPmF1ZGlvX2luZm8pKTsKLSAgfSBlbHNlIGlmIChyZXMgJiYgR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSA9PSBHU1RfUVVFUllfUE9TSVRJT04pIHsKLSAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgIGdpbnQ2NCBwb3M7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCAmcG9zKTsKLQotICAgIC8qIE5lZWQgdG8gZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW4gYnl0ZSBmb3JtYXQKLSAgICAgKiB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUuIEFsbCBvdGhlciBmb3JtYXRzIHNob3VsZCBiZSBmaW5lCi0gICAgICovCi0gICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIHBvcyAhPSAtMSkKLSAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsCi0gICAgICAgICAgcG9zIC8gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzZWxmLT5hdWRpb19pbmZvKSk7Ci0gIH0gZWxzZSBpZiAocmVzICYmIEdTVF9RVUVSWV9UWVBFIChxdWVyeSkgPT0gR1NUX1FVRVJZX0NBUFMpIHsKLSAgICBHc3RDYXBzICpmaWx0ZXIsICpjYXBzOwotCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICBjYXBzID0gZ3N0X2RlaW50ZXJsZWF2ZV9nZXRjYXBzIChwYWQsIHBhcmVudCwgZmlsdGVyKTsKLSAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kZWludGVybGVhdmVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERlaW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEVBVkUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0tFRVBfUE9TSVRJT05TOgotICAgICAgc2VsZi0+a2VlcF9wb3NpdGlvbnMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGVpbnRlcmxlYXZlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REZWludGVybGVhdmUgKnNlbGYgPSBHU1RfREVJTlRFUkxFQVZFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9LRUVQX1BPU0lUSU9OUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWxmLT5rZWVwX3Bvc2l0aW9ucyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZGVpbnRlcmxlYXZlX3Byb2Nlc3MgKEdzdERlaW50ZXJsZWF2ZSAqIHNlbGYsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJnNlbGYtPmF1ZGlvX2luZm8pOwotICBndWludCBwYWRzX3B1c2hlZCA9IDAsIGJ1ZmZlcnNfYWxsb2NhdGVkID0gMDsKLSAgZ3VpbnQgbmZyYW1lcyA9Ci0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpIC8gY2hhbm5lbHMgLwotICAgICAgKEdTVF9BVURJT19JTkZPX1dJRFRIICgmc2VsZi0+YXVkaW9faW5mbykgLyA4KTsKLSAgZ3VpbnQgYnVmc2l6ZSA9IG5mcmFtZXMgKiAoR1NUX0FVRElPX0lORk9fV0lEVEggKCZzZWxmLT5hdWRpb19pbmZvKSAvIDgpOwotICBndWludCBpOwotICBHTGlzdCAqc3JjczsKLSAgR3N0QnVmZmVyICoqYnVmZmVyc19vdXQgPSBnX25ldzAgKEdzdEJ1ZmZlciAqLCBjaGFubmVscyk7Ci0gIGd1aW50OCAqaW4sICpvdXQ7Ci0gIEdzdE1hcEluZm8gcmVhZF9pbmZvOwotICBHTGlzdCAqcGVuZGluZ19ldmVudHMsICpsOwotCi0gIC8qIFNlbmQgYW55IHBlbmRpbmcgZXZlbnRzIHRvIGFsbCBzcmMgcGFkcyAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICBwZW5kaW5nX2V2ZW50cyA9IHNlbGYtPnBlbmRpbmdfZXZlbnRzOwotICBzZWxmLT5wZW5kaW5nX2V2ZW50cyA9IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLQotICBpZiAocGVuZGluZ19ldmVudHMpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiU2VuZGluZyBwZW5kaW5nIGV2ZW50cyB0byBhbGwgc3JjIHBhZHMiKTsKLSAgICBmb3IgKGwgPSBwZW5kaW5nX2V2ZW50czsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICAgIGV2ZW50ID0gbC0+ZGF0YTsKLSAgICAgIGZvciAoc3JjcyA9IHNlbGYtPnNyY3BhZHM7IHNyY3MgIT0gTlVMTDsgc3JjcyA9IHNyY3MtPm5leHQpCi0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX1BBRCAoc3Jjcy0+ZGF0YSksIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICB9Ci0gICAgZ19saXN0X2ZyZWUgKHBlbmRpbmdfZXZlbnRzKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZyZWFkX2luZm8sIEdTVF9NQVBfUkVBRCk7Ci0KLSAgLyogQWxsb2NhdGUgYnVmZmVycyAqLwotICBmb3IgKHNyY3MgPSBzZWxmLT5zcmNwYWRzLCBpID0gMDsgc3Jjczsgc3JjcyA9IHNyY3MtPm5leHQsIGkrKykgewotICAgIGJ1ZmZlcnNfb3V0W2ldID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIGJ1ZnNpemUsIE5VTEwpOwotCi0gICAgLyogTWFrZSBzdXJlIHdlIGdvdCBhIGNvcnJlY3QgYnVmZmVyLiBUaGUgb25seSBvdGhlciBjYXNlIHdlIGFsbG93Ci0gICAgICogaGVyZSBpcyBhbiB1bmxpa2VkIHBhZCAqLwotICAgIGlmICghYnVmZmVyc19vdXRbaV0pCi0gICAgICBnb3RvIGFsbG9jX2J1ZmZlcl9mYWlsZWQ7Ci0gICAgZWxzZSBpZiAoYnVmZmVyc19vdXRbaV0KLSAgICAgICAgJiYgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyc19vdXRbaV0pICE9IGJ1ZnNpemUpCi0gICAgICBnb3RvIGFsbG9jX2J1ZmZlcl9iYWRfc2l6ZTsKLQotICAgIGlmIChidWZmZXJzX291dFtpXSkgewotICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKGJ1ZmZlcnNfb3V0W2ldLCBidWYsIEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSwgMCwKLSAgICAgICAgICAtMSk7Ci0gICAgICBidWZmZXJzX2FsbG9jYXRlZCsrOwotICAgIH0KLSAgfQotCi0gIC8qIFJldHVybiBOT1RfTElOS0VEIGlmIG5vIHBhZCB3YXMgbGlua2VkICovCi0gIGlmICghYnVmZmVyc19hbGxvY2F0ZWQpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJDb3VsZG4ndCBhbGxvY2F0ZSBhbnkgYnVmZmVycyBiZWNhdXNlIG5vIHBhZCB3YXMgbGlua2VkIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICAvKiBkZWludGVybGVhdmUgKi8KLSAgZm9yIChzcmNzID0gc2VsZi0+c3JjcGFkcywgaSA9IDA7IHNyY3M7IHNyY3MgPSBzcmNzLT5uZXh0LCBpKyspIHsKLSAgICBHc3RQYWQgKnBhZCA9IChHc3RQYWQgKikgc3Jjcy0+ZGF0YTsKLSAgICBHc3RNYXBJbmZvIHdyaXRlX2luZm87Ci0KLSAgICBpbiA9IChndWludDggKikgcmVhZF9pbmZvLmRhdGE7Ci0gICAgaW4gKz0gaSAqIChHU1RfQVVESU9fSU5GT19XSURUSCAoJnNlbGYtPmF1ZGlvX2luZm8pIC8gOCk7Ci0gICAgaWYgKGJ1ZmZlcnNfb3V0W2ldKSB7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyc19vdXRbaV0sICZ3cml0ZV9pbmZvLCBHU1RfTUFQX1dSSVRFKTsKLSAgICAgIG91dCA9IChndWludDggKikgd3JpdGVfaW5mby5kYXRhOwotICAgICAgc2VsZi0+ZnVuYyAob3V0LCBpbiwgY2hhbm5lbHMsIG5mcmFtZXMpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyc19vdXRbaV0sICZ3cml0ZV9pbmZvKTsKLQotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYWQsIGJ1ZmZlcnNfb3V0W2ldKTsKLSAgICAgIGJ1ZmZlcnNfb3V0W2ldID0gTlVMTDsKLSAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIHBhZHNfcHVzaGVkKys7Ci0gICAgICBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICBlbHNlCi0gICAgICAgIGdvdG8gcHVzaF9mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgLyogUmV0dXJuIE5PVF9MSU5LRUQgaWYgbm8gcGFkIHdhcyBsaW5rZWQgKi8KLSAgaWYgKCFwYWRzX3B1c2hlZCkKLSAgICByZXQgPSBHU1RfRkxPV19OT1RfTElOS0VEOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJQdXNoZWQgb24gJWQgcGFkcyIsIHBhZHNfcHVzaGVkKTsKLQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmcmVhZF9pbmZvKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgZ19mcmVlIChidWZmZXJzX291dCk7Ci0gIHJldHVybiByZXQ7Ci0KLWFsbG9jX2J1ZmZlcl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoImdzdF9wYWRfYWxsb2NfYnVmZmVyKCkgcmV0dXJuZWQgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgZ290byBjbGVhbl9idWZmZXJzOwotCi0gIH0KLWFsbG9jX2J1ZmZlcl9iYWRfc2l6ZToKLSAgewotICAgIEdTVF9XQVJOSU5HICgiY2FsbGVkIGFsbG9jX2J1ZmZlcigpLCBidXQgZGlkbid0IGdldCByZXF1ZXN0ZWQgYnl0ZXMiKTsKLSAgICByZXQgPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICBnb3RvIGNsZWFuX2J1ZmZlcnM7Ci0gIH0KLXB1c2hfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHICgicHVzaCgpIGZhaWxlZCwgZmxvdyA9ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdvdG8gY2xlYW5fYnVmZmVyczsKLSAgfQotY2xlYW5fYnVmZmVyczoKLSAgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJnJlYWRfaW5mbyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHsKLSAgICAgIGlmIChidWZmZXJzX291dFtpXSkKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyc19vdXRbaV0pOwotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGdfZnJlZSAoYnVmZmVyc19vdXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9kZWludGVybGVhdmVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdERlaW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9ERUlOVEVSTEVBVkUgKHBhcmVudCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmLT5mdW5jICE9IE5VTEwsIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9BVURJT19JTkZPX1dJRFRIICgmc2VsZi0+YXVkaW9faW5mbykgPiAwLAotICAgICAgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzZWxmLT5hdWRpb19pbmZvKSA+IDAsCi0gICAgICBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0KLSAgcmV0ID0gZ3N0X2RlaW50ZXJsZWF2ZV9wcm9jZXNzIChzZWxmLCBidWZmZXIpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImZsb3cgcmV0dXJuOiAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9kZWludGVybGVhdmVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3REZWludGVybGVhdmUgKnNlbGYgPSBHU1RfREVJTlRFUkxFQVZFIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfZGVpbnRlcmxlYXZlX3JlbW92ZV9wYWRzIChzZWxmKTsKLQotICAgICAgc2VsZi0+ZnVuYyA9IE5VTEw7Ci0KLSAgICAgIGlmIChzZWxmLT5wZW5kaW5nX2V2ZW50cykgewotICAgICAgICBnX2xpc3RfZm9yZWFjaCAoc2VsZi0+cGVuZGluZ19ldmVudHMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGdfbGlzdF9mcmVlIChzZWxmLT5wZW5kaW5nX2V2ZW50cyk7Ci0gICAgICAgIHNlbGYtPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfZGVpbnRlcmxlYXZlX3JlbW92ZV9wYWRzIChzZWxmKTsKLQotICAgICAgc2VsZi0+ZnVuYyA9IE5VTEw7Ci0KLSAgICAgIGlmIChzZWxmLT5wZW5kaW5nX2V2ZW50cykgewotICAgICAgICBnX2xpc3RfZm9yZWFjaCAoc2VsZi0+cGVuZGluZ19ldmVudHMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGdfbGlzdF9mcmVlIChzZWxmLT5wZW5kaW5nX2V2ZW50cyk7Ci0gICAgICAgIHNlbGYtPnBlbmRpbmdfZXZlbnRzID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvaW50ZXJsZWF2ZS9kZWludGVybGVhdmUuaCBiL2dzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2MxODg1Li4wMDAwMDAwCi0tLSBhL2dzdC9pbnRlcmxlYXZlL2RlaW50ZXJsZWF2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICogICAgICAgICAgICAgICAgICAgIDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA3IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBkZWludGVybGVhdmUuYzogZGVpbnRlcmxlYXZlIHNhbXBsZXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fREVJTlRFUkxFQVZFX0hfXwotI2RlZmluZSBfX0RFSU5URVJMRUFWRV9IX18KLQotR19CRUdJTl9ERUNMUwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX0RFSU5URVJMRUFWRSAgICAgICAgICAgIChnc3RfZGVpbnRlcmxlYXZlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9ERUlOVEVSTEVBVkUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9ERUlOVEVSTEVBVkUsR3N0RGVpbnRlcmxlYXZlKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMRUFWRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfREVJTlRFUkxFQVZFLEdzdERlaW50ZXJsZWF2ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0RFSU5URVJMRUFWRV9HRVRfQ0xBU1Mob2JqKSBcCi0gICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSxHU1RfVFlQRV9ERUlOVEVSTEVBVkUsR3N0RGVpbnRlcmxlYXZlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfREVJTlRFUkxFQVZFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfREVJTlRFUkxFQVZFKSkKLSNkZWZpbmUgR1NUX0lTX0RFSU5URVJMRUFWRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfREVJTlRFUkxFQVZFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdERlaW50ZXJsZWF2ZSBHc3REZWludGVybGVhdmU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0RGVpbnRlcmxlYXZlQ2xhc3MgR3N0RGVpbnRlcmxlYXZlQ2xhc3M7Ci0KLXR5cGVkZWYgdm9pZCAoKkdzdERlaW50ZXJsZWF2ZUZ1bmMpIChncG9pbnRlciBvdXQsIGdwb2ludGVyIGluLCBndWludCBzdHJpZGUsIGd1aW50IG5mcmFtZXMpOwotCi1zdHJ1Y3QgX0dzdERlaW50ZXJsZWF2ZQotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiAqLwotICBHTGlzdCAqc3JjcGFkczsKLSAgR3N0Q2FwcyAqc2lua2NhcHM7Ci0gIEdzdEF1ZGlvSW5mbyBhdWRpb19pbmZvOwotICBnYm9vbGVhbiBrZWVwX3Bvc2l0aW9uczsKLQotICBHc3RQYWQgKnNpbms7Ci0KLSAgR3N0RGVpbnRlcmxlYXZlRnVuYyBmdW5jOwotCi0gIEdMaXN0ICpwZW5kaW5nX2V2ZW50czsKLX07Ci0KLXN0cnVjdCBfR3N0RGVpbnRlcmxlYXZlQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9kZWludGVybGVhdmVfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19ERUlOVEVSTEVBVkVfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmMgYi9nc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYWM3NmUuLjAwMDAwMDAKLS0tIGEvZ3N0L2ludGVybGVhdmUvaW50ZXJsZWF2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDcgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mucmc+Ci0gKgotICogaW50ZXJsZWF2ZS5jOiBpbnRlcmxlYXZlIHNhbXBsZXMsIG1vc3RseSBiYXNlZCBvbiBhZGRlci4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBUT0RPOgotICogICAgICAgLSBoYW5kbGUgY2FwcyBjaGFuZ2VzCi0gKiAgICAgICAtIGhhbmRsZSBtb3JlIHF1ZXJpZXMvZXZlbnRzCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtaW50ZXJsZWF2ZQotICogQHNlZV9hbHNvOiBkZWludGVybGVhdmUKLSAqCi0gKiBNZXJnZXMgc2VwYXJhdGUgbW9ubyBpbnB1dHMgaW50byBvbmUgaW50ZXJsZWF2ZWQgc3RyZWFtLgotICogCi0gKiBUaGlzIGVsZW1lbnQgaGFuZGxlcyBhbGwgcmF3IGZsb2F0aW5nIHBvaW50IHNhbXBsZSBmb3JtYXRzIGFuZCBhbGwgc2lnbmVkIGludGVnZXIgc2FtcGxlIGZvcm1hdHMuIFRoZSBmaXJzdAotICogY2FwcyBvbiBvbmUgb2YgdGhlIHNpbmtwYWRzIHdpbGwgc2V0IHRoZSBjYXBzIG9mIHRoZSBvdXRwdXQgc28gdXN1YWxseSBhbiBhdWRpb2NvbnZlcnQgZWxlbWVudCBzaG91bGQgYmUKLSAqIHBsYWNlZCBiZWZvcmUgZXZlcnkgc2lua3BhZCBvZiBpbnRlcmxlYXZlLgotICogCi0gKiBJdCdzIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHdoaWxlIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nIGJ5IGFkZGluZyBvciByZW1vdmluZwotICogc29tZSBvZiB0aGUgcmVxdWVzdCBwYWRzIGJ1dCB0aGlzIHdpbGwgY2hhbmdlIHRoZSBjYXBzIG9mIHRoZSBvdXRwdXQgYnVmZmVycy4gQ2hhbmdpbmcgdGhlIGlucHV0Ci0gKiBjYXBzIGlzIF9ub3RfIHN1cHBvcnRlZCB5ZXQuCi0gKiAKLSAqIFRoZSBjaGFubmVsIG51bWJlciBvZiBldmVyeSBzaW5rcGFkIGluIHRoZSBvdXQgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSAiY2hhbm5lbCIgcHJvcGVydHkgb2YgdGhlIHBhZC4KLSAqIAotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGZpbGVzcmMgbG9jYXRpb249ZmlsZS5tcDMgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgISAiYXVkaW8veC1yYXcsY2hhbm5lbHM9MiIgISBkZWludGVybGVhdmUgbmFtZT1kICBpbnRlcmxlYXZlIG5hbWU9aSAhIGF1ZGlvY29udmVydCAhIHdhdmVuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3Qud2F2ICAgIGQuc3JjXzAgISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGkuc2lua18xICAgIGQuc3JjXzEgISBxdWV1ZSAhIGF1ZGlvY29udmVydCAhIGkuc2lua18wCi0gKiBdfCBEZWNvZGVzIGFuZCBkZWludGVybGVhdmVzIGEgU3RlcmVvIE1QMyBmaWxlIGludG8gc2VwYXJhdGUgY2hhbm5lbHMgYW5kCi0gKiB0aGVuIGludGVybGVhdmVzIHRoZSBjaGFubmVscyBhZ2FpbiB0byBhIFdBViBmaWxlIHdpdGggdGhlIGNoYW5uZWxzCi0gKiBleGNoYW5nZWQuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgaW50ZXJsZWF2ZSBuYW1lPWkgISBhdWRpb2NvbnZlcnQgISB3YXZlbmMgISBmaWxlc2luayBsb2NhdGlvbj1maWxlLndhdiAgZmlsZXNyYyBsb2NhdGlvbj1maWxlMS53YXYgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgISAiYXVkaW8veC1yYXcsY2hhbm5lbHM9MSxjaGFubmVsLW1hc2s9KGJpdG1hc2spMHgxIiAhIHF1ZXVlICEgaS5zaW5rXzAgICBmaWxlc3JjIGxvY2F0aW9uPWZpbGUyLndhdiAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCAhICJhdWRpby94LXJhdyxjaGFubmVscz0xLGNoYW5uZWwtbWFzaz0oYml0bWFzaykweDIiICEgcXVldWUgISBpLnNpbmtfMQotICogXXwgSW50ZXJsZWF2ZXMgdHdvIE1vbm8gV0FWIGZpbGVzIHRvIGEgc2luZ2xlIFN0ZXJlbyBXQVYgZmlsZS4gSGF2aW5nCi0gKiBjaGFubmVsLW1hc2tzIGRlZmluZWQgaW4gdGhlIHNpbmsgcGFkcyBlbnN1cmVzIGEgc2FuZSBtYXBwaW5nIG9mIHRoZSBtb25vCi0gKiBzdHJlYW1zIGludG8gdGhlIHN0ZXJlbyBzdHJlYW0uIE5PVEU6IHRoZSBwcm9wZXIgd2F5IHRvIG1hcCBjaGFubmVscyBpbgotICogY29kZSBpcyBieSB1c2luZyB0aGUgY2hhbm5lbC1wb3NpdGlvbnMgcHJvcGVydHkgb2YgdGhlIGludGVybGVhdmUgZWxlbWVudC4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotLyogRklYTUUgMC4xMTogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoPj0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiaW50ZXJsZWF2ZS5oIgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWVudW10eXBlcy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfaW50ZXJsZWF2ZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfaW50ZXJsZWF2ZV9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fRk9STUFUU19BTEwgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykge25vbi1pbnRlcmxlYXZlZCwgaW50ZXJsZWF2ZWR9IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19GT1JNQVRTX0FMTCAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCIpCi0gICAgKTsKLQotI2RlZmluZSBNQUtFX0ZVTkModHlwZSkgXAotc3RhdGljIHZvaWQgaW50ZXJsZWF2ZV8jI3R5cGUgKGd1aW50IyN0eXBlICpvdXQsIGd1aW50IyN0eXBlICppbiwgXAotICAgIGd1aW50IHN0cmlkZSwgZ3VpbnQgbmZyYW1lcykgXAoteyBcCi0gIGdpbnQgaTsgXAotICBcCi0gIGZvciAoaSA9IDA7IGkgPCBuZnJhbWVzOyBpKyspIHsgXAotICAgICpvdXQgPSBpbltpXTsgXAotICAgIG91dCArPSBzdHJpZGU7IFwKLSAgfSBcCi19Ci0KLU1BS0VfRlVOQyAoOCk7Ci1NQUtFX0ZVTkMgKDE2KTsKLU1BS0VfRlVOQyAoMzIpOwotTUFLRV9GVU5DICg2NCk7Ci0KLXN0YXRpYyB2b2lkCi1pbnRlcmxlYXZlXzI0IChndWludDggKiBvdXQsIGd1aW50OCAqIGluLCBndWludCBzdHJpZGUsIGd1aW50IG5mcmFtZXMpCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbmZyYW1lczsgaSsrKSB7Ci0gICAgbWVtY3B5IChvdXQsIGluLCAzKTsKLSAgICBvdXQgKz0gc3RyaWRlICogMzsKLSAgICBpbiArPSAzOwotICB9Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFBhZCBwYXJlbnQ7Ci0gIGd1aW50IGNoYW5uZWw7Ci19IEdzdEludGVybGVhdmVQYWQ7Ci0KLWVudW0KLXsKLSAgUFJPUF9QQURfMCwKLSAgUFJPUF9QQURfQ0hBTk5FTAotfTsKLQotc3RhdGljIHZvaWQgZ3N0X2ludGVybGVhdmVfcGFkX2NsYXNzX2luaXQgKEdzdFBhZENsYXNzICoga2xhc3MpOwotCi0jZGVmaW5lIEdTVF9UWVBFX0lOVEVSTEVBVkVfUEFEIChnc3RfaW50ZXJsZWF2ZV9wYWRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lOVEVSTEVBVkVfUEFEKHBhZCkgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChwYWQpLEdTVF9UWVBFX0lOVEVSTEVBVkVfUEFELEdzdEludGVybGVhdmVQYWQpKQotI2RlZmluZSBHU1RfSU5URVJMRUFWRV9QQURfQ0FTVChwYWQpICgoR3N0SW50ZXJsZWF2ZVBhZCAqKSBwYWQpCi0jZGVmaW5lIEdTVF9JU19JTlRFUkxFQVZFX1BBRChwYWQpIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgocGFkKSxHU1RfVFlQRV9JTlRFUkxFQVZFX1BBRCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9pbnRlcmxlYXZlX3BhZF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHR5cGUgPSAwOwotCi0gIGlmIChHX1VOTElLRUxZICh0eXBlID09IDApKSB7Ci0gICAgdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWNfc2ltcGxlIChHU1RfVFlQRV9QQUQsCi0gICAgICAgIGdfaW50ZXJuX3N0YXRpY19zdHJpbmcgKCJHc3RJbnRlcmxlYXZlUGFkIiksIHNpemVvZiAoR3N0UGFkQ2xhc3MpLAotICAgICAgICAoR0NsYXNzSW5pdEZ1bmMpIGdzdF9pbnRlcmxlYXZlX3BhZF9jbGFzc19pbml0LAotICAgICAgICBzaXplb2YgKEdzdEludGVybGVhdmVQYWQpLCBOVUxMLCAwKTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbnRlcmxlYXZlX3BhZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SW50ZXJsZWF2ZVBhZCAqc2VsZiA9IEdTVF9JTlRFUkxFQVZFX1BBRCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUEFEX0NIQU5ORUw6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgc2VsZi0+Y2hhbm5lbCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW50ZXJsZWF2ZV9wYWRfY2xhc3NfaW5pdCAoR3N0UGFkQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaW50ZXJsZWF2ZV9wYWRfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX1BBRF9DSEFOTkVMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjaGFubmVsIiwKLSAgICAgICAgICAiQ2hhbm5lbCBudW1iZXIiLAotICAgICAgICAgICJOdW1iZXIgb2YgdGhlIGNoYW5uZWwgb2YgdGhpcyBwYWQgaW4gdGhlIG91dHB1dCIsIDAsIEdfTUFYVUlOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi0jZGVmaW5lIGdzdF9pbnRlcmxlYXZlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEludGVybGVhdmUsIGdzdF9pbnRlcmxlYXZlLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ0hBTk5FTF9QT1NJVElPTlMsCi0gIFBST1BfQ0hBTk5FTF9QT1NJVElPTlNfRlJPTV9JTlBVVAotfTsKLQotc3RhdGljIHZvaWQgZ3N0X2ludGVybGVhdmVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2ludGVybGVhdmVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0UGFkICpnc3RfaW50ZXJsZWF2ZV9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X2ludGVybGVhdmVfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X2ludGVybGVhdmVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9pbnRlcmxlYXZlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfaW50ZXJsZWF2ZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ludGVybGVhdmVfc2lua19ldmVudCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0RXZlbnQgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfaW50ZXJsZWF2ZV9zaW5rX3F1ZXJ5IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdERhdGEgKiBkYXRhLCBHc3RRdWVyeSAqIHF1ZXJ5LCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2ludGVybGVhdmVfc2lua19zZXRjYXBzIChHc3RJbnRlcmxlYXZlICogc2VsZiwKLSAgICBHc3RQYWQgKiBwYWQsIGNvbnN0IEdzdENhcHMgKiBjYXBzLCBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9pbnRlcmxlYXZlX3NpbmtfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RJbnRlcmxlYXZlICogc2VsZiwKLSAgICBHc3RDYXBzICogZmlsdGVyKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2ludGVybGVhdmVfY29sbGVjdGVkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0SW50ZXJsZWF2ZSAqIHNlbGYpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2ludGVybGVhdmVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEludGVybGVhdmUgKnNlbGYgPSBHU1RfSU5URVJMRUFWRSAob2JqZWN0KTsKLQotICBpZiAoc2VsZi0+Y29sbGVjdCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbGYtPmNvbGxlY3QpOwotICAgIHNlbGYtPmNvbGxlY3QgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zCi0gICAgICAmJiBzZWxmLT5jaGFubmVsX3Bvc2l0aW9ucyAhPSBzZWxmLT5pbnB1dF9jaGFubmVsX3Bvc2l0aW9ucykgewotICAgIGdfdmFsdWVfYXJyYXlfZnJlZSAoc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMpOwotICAgIHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zID0gTlVMTDsKLSAgfQotCi0gIGlmIChzZWxmLT5pbnB1dF9jaGFubmVsX3Bvc2l0aW9ucykgewotICAgIGdfdmFsdWVfYXJyYXlfZnJlZSAoc2VsZi0+aW5wdXRfY2hhbm5lbF9wb3NpdGlvbnMpOwotICAgIHNlbGYtPmlucHV0X2NoYW5uZWxfcG9zaXRpb25zID0gTlVMTDsKLSAgfQotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5zaW5rY2FwcywgTlVMTCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2ludAotY29tcGFyZV9wb3NpdGlvbnMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGNvbnN0IGdpbnQgaSA9ICooY29uc3QgZ2ludCAqKSBhOwotICBjb25zdCBnaW50IGogPSAqKGNvbnN0IGdpbnQgKikgYjsKLSAgY29uc3QgZ2ludCAqcG9zID0gKGNvbnN0IGdpbnQgKikgdXNlcl9kYXRhOwotCi0gIGlmIChwb3NbaV0gPCBwb3Nbal0pCi0gICAgcmV0dXJuIC0xOwotICBlbHNlIGlmIChwb3NbaV0gPiBwb3Nbal0pCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW50ZXJsZWF2ZV9jaGFubmVsX3Bvc2l0aW9uc190b19tYXNrIChHVmFsdWVBcnJheSAqIHBvc2l0aW9ucywKLSAgICBnaW50IGRlZmF1bHRfb3JkZXJpbmdfbWFwWzY0XSwgZ3VpbnQ2NCAqIG1hc2spCi17Ci0gIGdpbnQgaTsKLSAgZ3VpbnQgY2hhbm5lbHM7Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICpwb3M7Ci0gIGdib29sZWFuIHJldDsKLQotICBjaGFubmVscyA9IHBvc2l0aW9ucy0+bl92YWx1ZXM7Ci0gIHBvcyA9IGdfbmV3IChHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiwgY2hhbm5lbHMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgaSsrKSB7Ci0gICAgR1ZhbHVlICp2YWw7Ci0KLSAgICB2YWwgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKHBvc2l0aW9ucywgaSk7Ci0gICAgcG9zW2ldID0gZ192YWx1ZV9nZXRfZW51bSAodmFsKTsKLSAgfQotCi0gIC8qIHNvcnQgdGhlIGRlZmF1bHQgb3JkZXJpbmcgbWFwIGFjY29yZGluZyB0byB0aGUgcG9zaXRpb24gb3JkZXIgKi8KLSAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHsKLSAgICBkZWZhdWx0X29yZGVyaW5nX21hcFtpXSA9IGk7Ci0gIH0KLSAgZ19xc29ydF93aXRoX2RhdGEgKGRlZmF1bHRfb3JkZXJpbmdfbWFwLCBjaGFubmVscywKLSAgICAgIHNpemVvZiAoKmRlZmF1bHRfb3JkZXJpbmdfbWFwKSwgY29tcGFyZV9wb3NpdGlvbnMsIHBvcyk7Ci0KLSAgcmV0ID0gZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX21hc2sgKHBvcywgY2hhbm5lbHMsIEZBTFNFLCBtYXNrKTsKLSAgZ19mcmVlIChwb3MpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW50ZXJsZWF2ZV9zZXRfY2hhbm5lbF9wb3NpdGlvbnMgKEdzdEludGVybGVhdmUgKiBzZWxmLCBHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBndWludDY0IGNoYW5uZWxfbWFzayA9IDA7Ci0KLSAgaWYgKHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zICE9IE5VTEwgJiYKLSAgICAgIHNlbGYtPmNoYW5uZWxzID09IHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zLT5uX3ZhbHVlcykgewotICAgIGlmICghZ3N0X2ludGVybGVhdmVfY2hhbm5lbF9wb3NpdGlvbnNfdG9fbWFzayAoc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMsCi0gICAgICAgICAgICBzZWxmLT5kZWZhdWx0X2NoYW5uZWxzX29yZGVyaW5nX21hcCwgJmNoYW5uZWxfbWFzaykpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgIkludmFsaWQgY2hhbm5lbCBwb3NpdGlvbnMsIHVzaW5nIE5PTkUiKTsKLSAgICAgIGNoYW5uZWxfbWFzayA9IDA7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgIlVzaW5nIE5PTkUgY2hhbm5lbCBwb3NpdGlvbnMiKTsKLSAgfQotICBnc3Rfc3RydWN0dXJlX3NldCAocywgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssIGNoYW5uZWxfbWFzaywgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW50ZXJsZWF2ZV9zZW5kX3N0cmVhbV9zdGFydCAoR3N0SW50ZXJsZWF2ZSAqIHNlbGYpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gIGlmIChzZWxmLT5zZW5kX3N0cmVhbV9zdGFydCkgewotICAgIGdjaGFyIHNfaWRbMzJdOwotCi0gICAgc2VsZi0+c2VuZF9zdHJlYW1fc3RhcnQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0KLSAgICAvKiBzdHJlYW0tc3RhcnQgKEZJWE1FOiBjcmVhdGUgaWQgYmFzZWQgb24gaW5wdXQgaWRzKSAqLwotICAgIGdfc25wcmludGYgKHNfaWQsIHNpemVvZiAoc19pZCksICJpbnRlcmxlYXZlLSUwOHgiLCBnX3JhbmRvbV9pbnQgKCkpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc19pZCkpOwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ludGVybGVhdmVfY2xhc3NfaW5pdCAoR3N0SW50ZXJsZWF2ZUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2ludGVybGVhdmVfZGVidWcsICJpbnRlcmxlYXZlIiwgMCwKLSAgICAgICJpbnRlcmxlYXZlIGVsZW1lbnQiKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiQXVkaW8gaW50ZXJsZWF2ZXIiLAotICAgICAgIkZpbHRlci9Db252ZXJ0ZXIvQXVkaW8iLAotICAgICAgIkZvbGRzIG1hbnkgbW9ubyBjaGFubmVscyBpbnRvIG9uZSBpbnRlcmxlYXZlZCBhdWRpbyBzdHJlYW0iLAotICAgICAgIkFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4sICIKLSAgICAgICJTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotCi0gIC8qIFJlZmVyZW5jZSBHc3RJbnRlcmxlYXZlUGFkIGNsYXNzIHRvIGhhdmUgdGhlIHR5cGUgcmVnaXN0ZXJlZCBmcm9tCi0gICAqIGEgdGhyZWFkc2FmZSBjb250ZXh0Ci0gICAqLwotICBnX3R5cGVfY2xhc3NfcmVmIChHU1RfVFlQRV9JTlRFUkxFQVZFX1BBRCk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfaW50ZXJsZWF2ZV9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2ludGVybGVhdmVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaW50ZXJsZWF2ZV9nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdEludGVybGVhdmU6Y2hhbm5lbC1wb3NpdGlvbnMKLSAgICogCi0gICAqIENoYW5uZWwgcG9zaXRpb25zOiBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBjaGFubmVsIHBvc2l0aW9ucwotICAgKiB0aGF0IGFyZSB1c2VkIG9uIHRoZSBzcmMgY2Fwcy4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBzaG91bGQgYmUKLSAgICogdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBzaW5rIHBhZHMgYW5kIHRoZSBhcnJheSBzaG91bGQgY29udGFpbgotICAgKiBhIHZhbGlkIGxpc3Qgb2YgY2hhbm5lbCBwb3NpdGlvbnMuIFRoZSBuLXRoIGVsZW1lbnQgb2YgdGhlIGFycmF5Ci0gICAqIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbi10aCBzaW5rIHBhZC4KLSAgICoKLSAgICogVGhlc2UgY2hhbm5lbCBwb3NpdGlvbnMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgdGhleSdyZSB2YWxpZCBhbmQgdGhlCi0gICAqIG51bWJlciBvZiBlbGVtZW50cyBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzLiBJZiB0aGlzCi0gICAqIGlzIG5vdCBnaXZlbiBhIE5PTkUgbGF5b3V0IHdpbGwgYmUgdXNlZC4KLSAgICoKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0hBTk5FTF9QT1NJVElPTlMsCi0gICAgICBnX3BhcmFtX3NwZWNfdmFsdWVfYXJyYXkgKCJjaGFubmVsLXBvc2l0aW9ucyIsICJDaGFubmVsIHBvc2l0aW9ucyIsCi0gICAgICAgICAgIkNoYW5uZWwgcG9zaXRpb25zIHVzZWQgb24gdGhlIG91dHB1dCIsCi0gICAgICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJjaGFubmVsLXBvc2l0aW9uIiwgIkNoYW5uZWwgcG9zaXRpb24iLAotICAgICAgICAgICAgICAiQ2hhbm5lbCBwb3NpdGlvbiBvZiB0aGUgbi10aCBpbnB1dCIsCi0gICAgICAgICAgICAgIEdTVF9UWVBFX0FVRElPX0NIQU5ORUxfUE9TSVRJT04sCi0gICAgICAgICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUsCi0gICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdEludGVybGVhdmU6Y2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dAotICAgKiAKLSAgICogQ2hhbm5lbCBwb3NpdGlvbnMgZnJvbSBpbnB1dDogSWYgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gJVRSVUUgdGhlIGNoYW5uZWwKLSAgICogcG9zaXRpb25zIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgaW5wdXQgY2FwcyBpZiB2YWxpZCBjaGFubmVsIHBvc2l0aW9ucyBmb3IKLSAgICogdGhlIG91dHB1dCBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGVtLiBJZiB0aGlzIGlzIHNldCB0byAlVFJVRSBzZXR0aW5nIHRoZQotICAgKiBjaGFubmVsLXBvc2l0aW9ucyBwcm9wZXJ0eSBvdmVyd3JpdGVzIHRoaXMgcHJvcGVydHkgYWdhaW4uCi0gICAqCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9DSEFOTkVMX1BPU0lUSU9OU19GUk9NX0lOUFVULAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjaGFubmVsLXBvc2l0aW9ucy1mcm9tLWlucHV0IiwKLSAgICAgICAgICAiQ2hhbm5lbCBwb3NpdGlvbnMgZnJvbSBpbnB1dCIsCi0gICAgICAgICAgIlRha2UgY2hhbm5lbCBwb3NpdGlvbnMgZnJvbSB0aGUgaW5wdXQiLCBUUlVFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ludGVybGVhdmVfcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pbnRlcmxlYXZlX3JlbGVhc2VfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW50ZXJsZWF2ZV9jaGFuZ2Vfc3RhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ludGVybGVhdmVfaW5pdCAoR3N0SW50ZXJsZWF2ZSAqIHNlbGYpCi17Ci0gIHNlbGYtPnNyYyA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0KLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNlbGYtPnNyYywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW50ZXJsZWF2ZV9zcmNfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPnNyYywKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfaW50ZXJsZWF2ZV9zcmNfZXZlbnQpKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyYyk7Ci0KLSAgc2VsZi0+Y29sbGVjdCA9IGdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9mdW5jdGlvbiAoc2VsZi0+Y29sbGVjdCwKLSAgICAgIChHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uKSBnc3RfaW50ZXJsZWF2ZV9jb2xsZWN0ZWQsIHNlbGYpOwotCi0gIHNlbGYtPmlucHV0X2NoYW5uZWxfcG9zaXRpb25zID0gZ192YWx1ZV9hcnJheV9uZXcgKDApOwotICBzZWxmLT5jaGFubmVsX3Bvc2l0aW9uc19mcm9tX2lucHV0ID0gVFJVRTsKLSAgc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMgPSBzZWxmLT5pbnB1dF9jaGFubmVsX3Bvc2l0aW9uczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbnRlcmxlYXZlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RJbnRlcmxlYXZlICpzZWxmID0gR1NUX0lOVEVSTEVBVkUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NIQU5ORUxfUE9TSVRJT05TOgotICAgICAgaWYgKHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zICYmCi0gICAgICAgICAgc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMgIT0gc2VsZi0+aW5wdXRfY2hhbm5lbF9wb3NpdGlvbnMpCi0gICAgICAgIGdfdmFsdWVfYXJyYXlfZnJlZSAoc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMpOwotCi0gICAgICBzZWxmLT5jaGFubmVsX3Bvc2l0aW9ucyA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7Ci0gICAgICBzZWxmLT5jaGFubmVsX3Bvc2l0aW9uc19mcm9tX2lucHV0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0hBTk5FTF9QT1NJVElPTlNfRlJPTV9JTlBVVDoKLSAgICAgIHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zX2Zyb21faW5wdXQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0KLSAgICAgIGlmIChzZWxmLT5jaGFubmVsX3Bvc2l0aW9uc19mcm9tX2lucHV0KSB7Ci0gICAgICAgIGlmIChzZWxmLT5jaGFubmVsX3Bvc2l0aW9ucyAmJgotICAgICAgICAgICAgc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMgIT0gc2VsZi0+aW5wdXRfY2hhbm5lbF9wb3NpdGlvbnMpCi0gICAgICAgICAgZ192YWx1ZV9hcnJheV9mcmVlIChzZWxmLT5jaGFubmVsX3Bvc2l0aW9ucyk7Ci0gICAgICAgIHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zID0gc2VsZi0+aW5wdXRfY2hhbm5lbF9wb3NpdGlvbnM7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaW50ZXJsZWF2ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0SW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9JTlRFUkxFQVZFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DSEFOTkVMX1BPU0lUSU9OUzoKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NIQU5ORUxfUE9TSVRJT05TX0ZST01fSU5QVVQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnNfZnJvbV9pbnB1dCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X2ludGVybGVhdmVfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwKLSAgICBjb25zdCBnY2hhciAqIHJlcV9uYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0SW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9JTlRFUkxFQVZFIChlbGVtZW50KTsKLSAgR3N0UGFkICpuZXdfcGFkOwotICBnY2hhciAqcGFkX25hbWU7Ci0gIGdpbnQgY2hhbm5lbCwgcGFkbnVtYmVyOwotICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gIGlmICh0ZW1wbC0+ZGlyZWN0aW9uICE9IEdTVF9QQURfU0lOSykKLSAgICBnb3RvIG5vdF9zaW5rX3BhZDsKLQotICBwYWRudW1iZXIgPSBnX2F0b21pY19pbnRfYWRkICgmc2VsZi0+cGFkY291bnRlciwgMSk7Ci0KLSAgY2hhbm5lbCA9IGdfYXRvbWljX2ludF9hZGQgKCZzZWxmLT5jaGFubmVscywgMSk7Ci0gIGlmICghc2VsZi0+Y2hhbm5lbF9wb3NpdGlvbnNfZnJvbV9pbnB1dCkKLSAgICBjaGFubmVsID0gcGFkbnVtYmVyOwotCi0gIHBhZF9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic2lua18ldSIsIHBhZG51bWJlcik7Ci0gIG5ld19wYWQgPSBHU1RfUEFEX0NBU1QgKGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfSU5URVJMRUFWRV9QQUQsCi0gICAgICAgICAgIm5hbWUiLCBwYWRfbmFtZSwgImRpcmVjdGlvbiIsIHRlbXBsLT5kaXJlY3Rpb24sCi0gICAgICAgICAgInRlbXBsYXRlIiwgdGVtcGwsIE5VTEwpKTsKLSAgR1NUX0lOVEVSTEVBVkVfUEFEX0NBU1QgKG5ld19wYWQpLT5jaGFubmVsID0gY2hhbm5lbDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInJlcXVlc3RlZCBuZXcgcGFkICVzIiwgcGFkX25hbWUpOwotICBnX2ZyZWUgKHBhZF9uYW1lKTsKLQotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChuZXdfcGFkKTsKLQotICBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKHNlbGYtPmNvbGxlY3QsIG5ld19wYWQsIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLAotICAgICAgTlVMTCwgVFJVRSk7Ci0KLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPmNvbGxlY3QsCi0gICAgICAoR3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uKQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9pbnRlcmxlYXZlX3NpbmtfZXZlbnQpLCBzZWxmKTsKLQotICBnc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbiAoc2VsZi0+Y29sbGVjdCwKLSAgICAgIChHc3RDb2xsZWN0UGFkc1F1ZXJ5RnVuY3Rpb24pCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2ludGVybGVhdmVfc2lua19xdWVyeSksIHNlbGYpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgbmV3X3BhZCkpCi0gICAgZ290byBjb3VsZF9ub3RfYWRkOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfQVVESU9fQ0hBTk5FTF9QT1NJVElPTik7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKCZ2YWwsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUpOwotICBzZWxmLT5pbnB1dF9jaGFubmVsX3Bvc2l0aW9ucyA9Ci0gICAgICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoc2VsZi0+aW5wdXRfY2hhbm5lbF9wb3NpdGlvbnMsICZ2YWwpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICAvKiBVcGRhdGUgdGhlIHNyYyBjYXBzIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGVtICovCi0gIGlmIChzZWxmLT5zaW5rY2FwcykgewotICAgIEdzdENhcHMgKnNyY2NhcHM7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgLyogVGFrZSBsb2NrIHRvIG1ha2Ugc3VyZSBwcm9jZXNzaW5nIGZpbmlzaGVzIGZpcnN0ICovCi0gICAgR1NUX09CSkVDVF9MT0NLIChzZWxmLT5jb2xsZWN0KTsKLQotICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19jb3B5IChzZWxmLT5zaW5rY2Fwcyk7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHNyY2NhcHMsIDApOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIHNlbGYtPmNoYW5uZWxzLCBOVUxMKTsKLSAgICBnc3RfaW50ZXJsZWF2ZV9zZXRfY2hhbm5lbF9wb3NpdGlvbnMgKHNlbGYsIHMpOwotCi0gICAgZ3N0X2ludGVybGVhdmVfc2VuZF9zdHJlYW1fc3RhcnQgKHNlbGYpOwotICAgIGdzdF9wYWRfc2V0X2NhcHMgKHNlbGYtPnNyYywgc3JjY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYtPmNvbGxlY3QpOwotICB9Ci0KLSAgcmV0dXJuIG5ld19wYWQ7Ci0KLSAgLyogZXJyb3JzICovCi1ub3Rfc2lua19wYWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJpbnRlcmxlYXZlOiByZXF1ZXN0ZWQgbmV3IHBhZCB0aGF0IGlzIG5vdCBhIFNJTksgcGFkXG4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotY291bGRfbm90X2FkZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJjb3VsZCBub3QgYWRkIHBhZCAlcyIsIEdTVF9QQURfTkFNRSAobmV3X3BhZCkpOwotICAgIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoc2VsZi0+Y29sbGVjdCwgbmV3X3BhZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAobmV3X3BhZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbnRlcmxlYXZlX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RJbnRlcmxlYXZlICpzZWxmID0gR1NUX0lOVEVSTEVBVkUgKGVsZW1lbnQpOwotICBHTGlzdCAqbDsKLSAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zaXRpb247Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0lOVEVSTEVBVkVfUEFEIChwYWQpKTsKLQotICAvKiBUYWtlIGxvY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGlzIHdoZW4gcHJvY2Vzc2luZyBidWZmZXJzICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZi0+Y29sbGVjdCk7Ci0KLSAgZ19hdG9taWNfaW50X2FkZCAoJnNlbGYtPmNoYW5uZWxzLCAtMSk7Ci0KLSAgaWYgKGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAocGFkKSkKLSAgICBnX2F0b21pY19pbnRfYWRkICgmc2VsZi0+Y29uZmlndXJlZF9zaW5rcGFkc19jb3VudGVyLCAtMSk7Ci0KLSAgcG9zaXRpb24gPSBHU1RfSU5URVJMRUFWRV9QQURfQ0FTVCAocGFkKS0+Y2hhbm5lbDsKLSAgZ192YWx1ZV9hcnJheV9yZW1vdmUgKHNlbGYtPmlucHV0X2NoYW5uZWxfcG9zaXRpb25zLCBwb3NpdGlvbik7Ci0KLSAgLyogVXBkYXRlIGNoYW5uZWwgbnVtYmVycyAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICBmb3IgKGwgPSBHU1RfRUxFTUVOVF9DQVNUIChzZWxmKS0+c2lua3BhZHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RJbnRlcmxlYXZlUGFkICppcGFkID0gR1NUX0lOVEVSTEVBVkVfUEFEIChsLT5kYXRhKTsKLQotICAgIGlmIChHU1RfSU5URVJMRUFWRV9QQURfQ0FTVCAocGFkKS0+Y2hhbm5lbCA8IGlwYWQtPmNoYW5uZWwpCi0gICAgICBpcGFkLT5jaGFubmVsLS07Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotCi0gIC8qIFVwZGF0ZSB0aGUgc3JjIGNhcHMgaWYgd2UgYWxyZWFkeSBoYXZlIHRoZW0gKi8KLSAgaWYgKHNlbGYtPnNpbmtjYXBzKSB7Ci0gICAgaWYgKHNlbGYtPmNoYW5uZWxzID4gMCkgewotICAgICAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgICAgc3JjY2FwcyA9IGdzdF9jYXBzX2NvcHkgKHNlbGYtPnNpbmtjYXBzKTsKLSAgICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNjYXBzLCAwKTsKLQotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIHNlbGYtPmNoYW5uZWxzLCBOVUxMKTsKLSAgICAgIGdzdF9pbnRlcmxlYXZlX3NldF9jaGFubmVsX3Bvc2l0aW9ucyAoc2VsZiwgcyk7Ci0KLSAgICAgIGdzdF9pbnRlcmxlYXZlX3NlbmRfc3RyZWFtX3N0YXJ0IChzZWxmKTsKLSAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKHNlbGYtPnNyYywgc3JjY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5zaW5rY2FwcywgTlVMTCk7Ci0gICAgfQotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYtPmNvbGxlY3QpOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAoc2VsZi0+Y29sbGVjdCwgcGFkKTsKLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgcGFkKTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfaW50ZXJsZWF2ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RJbnRlcmxlYXZlICpzZWxmOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc2VsZiA9IEdTVF9JTlRFUkxFQVZFIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBzZWxmLT50aW1lc3RhbXAgPSAwOwotICAgICAgc2VsZi0+b2Zmc2V0ID0gMDsKLSAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmc2VsZi0+cGVuZGluZ19zZWdtZW50LCBOVUxMKTsKLSAgICAgIHNlbGYtPnNlbmRfc3RyZWFtX3N0YXJ0ID0gVFJVRTsKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKHNlbGYtPmNvbGxlY3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogU3RvcCBiZWZvcmUgY2FsbGluZyB0aGUgcGFyZW50J3Mgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uIGFzCi0gICAqIEdzdENvbGxlY3RQYWRzIG1pZ2h0IHRha2UgbG9ja3MgYW5kIHdlIHdvdWxkIGRlYWRsb2NrIGluIHRoYXQKLSAgICogY2FzZQotICAgKi8KLSAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFkpCi0gICAgZ3N0X2NvbGxlY3RfcGFkc19zdG9wIChzZWxmLT5jb2xsZWN0KTsKLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPnNpbmtjYXBzLCBOVUxMKTsKLSAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmc2VsZi0+cGVuZGluZ19zZWdtZW50LCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLV9fcmVtb3ZlX2NoYW5uZWxzIChHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnaW50IGksIHNpemU7Ci0KLSAgc2l6ZSA9IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsKLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNoYW5uZWwtbWFzayIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiY2hhbm5lbHMiKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotX19zZXRfY2hhbm5lbHMgKEdzdENhcHMgKiBjYXBzLCBnaW50IGNoYW5uZWxzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGdpbnQgaSwgc2l6ZTsKLQotICBzaXplID0gZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotICAgIGlmIChjaGFubmVscyA+IDApCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgY2hhbm5lbHMsIE5VTEwpOwotICAgIGVsc2UKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiY2hhbm5lbHMiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIEdfTUFYSU5ULCBOVUxMKTsKLSAgfQotfQotCi0vKiB3ZSBjYW4gb25seSBhY2NlcHQgY2FwcyB0aGF0IHdlIGFuZCBkb3duc3RyZWFtIGNhbiBoYW5kbGUuICovCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfaW50ZXJsZWF2ZV9zaW5rX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0SW50ZXJsZWF2ZSAqIHNlbGYsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmVzdWx0LCAqcGVlcmNhcHMsICpzaW5rY2FwczsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotCi0gIC8qIElmIHdlIGFscmVhZHkgaGF2ZSBjYXBzIG9uIG9uZSBvZiB0aGUgc2luayBwYWRzIHJldHVybiB0aGVtICovCi0gIGlmIChzZWxmLT5zaW5rY2FwcykgewotICAgIHJlc3VsdCA9IGdzdF9jYXBzX2NvcHkgKHNlbGYtPnNpbmtjYXBzKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBnZXQgdGhlIGRvd25zdHJlYW0gcG9zc2libGUgY2FwcyAqLwotICAgIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKHNlbGYtPnNyYywgTlVMTCk7Ci0KLSAgICAvKiBnZXQgdGhlIGFsbG93ZWQgY2FwcyBvbiB0aGlzIHNpbmtwYWQgKi8KLSAgICBzaW5rY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpKTsKLSAgICBfX3JlbW92ZV9jaGFubmVscyAoc2lua2NhcHMpOwotICAgIGlmIChwZWVyY2FwcykgewotICAgICAgcGVlcmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChwZWVyY2Fwcyk7Ci0gICAgICBfX3JlbW92ZV9jaGFubmVscyAocGVlcmNhcHMpOwotICAgICAgLyogaWYgdGhlIHBlZXIgaGFzIGNhcHMsIGludGVyc2VjdCAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiaW50ZXJzZWN0aW5nIHBlZXIgYW5kIHRlbXBsYXRlIGNhcHMiKTsKLSAgICAgIHJlc3VsdCA9IGdzdF9jYXBzX2ludGVyc2VjdCAocGVlcmNhcHMsIHNpbmtjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoc2lua2NhcHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiB0aGUgcGVlciBoYXMgbm8gY2FwcyAob3IgdGhlcmUgaXMgbm8gcGVlciksIGp1c3QgdXNlIHRoZSBhbGxvd2VkIGNhcHMKLSAgICAgICAqIG9mIHRoaXMgc2lua3BhZC4gKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIm5vIHBlZXIgY2FwcywgdXNpbmcgc2lua2NhcHMiKTsKLSAgICAgIHJlc3VsdCA9IHNpbmtjYXBzOwotICAgIH0KLSAgICBfX3NldF9jaGFubmVscyAocmVzdWx0LCAxKTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLQotICBpZiAoZmlsdGVyICE9IE5VTEwpIHsKLSAgICBHc3RDYXBzICpjYXBzID0gcmVzdWx0OwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImludGVyc2VjdGluZyBmaWx0ZXIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIHdpdGggIgotICAgICAgICAicHJlbGltaW5hcnkgcmVzdWx0ICUiIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIsIGNhcHMpOwotCi0gICAgcmVzdWx0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJSZXR1cm5pbmcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2ludGVybGVhdmVfc2V0X3Byb2Nlc3NfZnVuY3Rpb24gKEdzdEludGVybGVhdmUgKiBzZWxmKQotewotICBzd2l0Y2ggKHNlbGYtPndpZHRoKSB7Ci0gICAgY2FzZSA4OgotICAgICAgc2VsZi0+ZnVuYyA9IChHc3RJbnRlcmxlYXZlRnVuYykgaW50ZXJsZWF2ZV84OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNjoKLSAgICAgIHNlbGYtPmZ1bmMgPSAoR3N0SW50ZXJsZWF2ZUZ1bmMpIGludGVybGVhdmVfMTY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI0OgotICAgICAgc2VsZi0+ZnVuYyA9IChHc3RJbnRlcmxlYXZlRnVuYykgaW50ZXJsZWF2ZV8yNDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzI6Ci0gICAgICBzZWxmLT5mdW5jID0gKEdzdEludGVybGVhdmVGdW5jKSBpbnRlcmxlYXZlXzMyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA2NDoKLSAgICAgIHNlbGYtPmZ1bmMgPSAoR3N0SW50ZXJsZWF2ZUZ1bmMpIGludGVybGVhdmVfNjQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9pbnRlcmxlYXZlX3Npbmtfc2V0Y2FwcyAoR3N0SW50ZXJsZWF2ZSAqIHNlbGYsIEdzdFBhZCAqIHBhZCwKLSAgICBjb25zdCBHc3RDYXBzICogY2FwcywgY29uc3QgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19JTlRFUkxFQVZFX1BBRCAocGFkKSwgRkFMU0UpOwotCi0gIC8qIFRPRE86IGhhbmRsZSBjYXBzIGNoYW5nZXMgKi8KLSAgaWYgKHNlbGYtPnNpbmtjYXBzICYmICFnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMsIHNlbGYtPnNpbmtjYXBzKSkgewotICAgIGdvdG8gY2Fubm90X2NoYW5nZV9jYXBzOwotICB9IGVsc2UgewotICAgIEdzdENhcHMgKnNyY2NhcHM7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotICAgIGdib29sZWFuIHJlczsKLQotICAgIHNlbGYtPndpZHRoID0gR1NUX0FVRElPX0lORk9fV0lEVEggKGluZm8pOwotICAgIHNlbGYtPnJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFIChpbmZvKTsKLQotICAgIGdzdF9pbnRlcmxlYXZlX3NldF9wcm9jZXNzX2Z1bmN0aW9uIChzZWxmKTsKLQotICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3JjY2FwcywgMCk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNoYW5uZWwtbWFzayIpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIHNlbGYtPmNoYW5uZWxzLCAibGF5b3V0IiwKLSAgICAgICAgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0gICAgZ3N0X2ludGVybGVhdmVfc2V0X2NoYW5uZWxfcG9zaXRpb25zIChzZWxmLCBzKTsKLQotICAgIGdzdF9pbnRlcmxlYXZlX3NlbmRfc3RyZWFtX3N0YXJ0IChzZWxmKTsKLSAgICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChzZWxmLT5zcmMsIHNyY2NhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICAgIGlmICghcmVzKQotICAgICAgZ290byBzcmNfZGlkX25vdF9hY2NlcHQ7Ci0gIH0KLQotICBpZiAoIXNlbGYtPnNpbmtjYXBzKSB7Ci0gICAgR3N0Q2FwcyAqc2lua2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzaW5rY2FwcywgMCk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNoYW5uZWwtbWFzayIpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNldHRpbmcgc2lua2NhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHNpbmtjYXBzKTsKLQotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5zaW5rY2Fwcywgc2lua2NhcHMpOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtjYXBzKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi1jYW5ub3RfY2hhbmdlX2NhcHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNlbGYsICJjYXBzIG9mICUiIEdTVF9QVFJfRk9STUFUICIgYWxyZWFkeSBzZXQsIGNhbid0ICIKLSAgICAgICAgImNoYW5nZSIsIHNlbGYtPnNpbmtjYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXNyY19kaWRfbm90X2FjY2VwdDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgInNyYyBkaWQgbm90IGFjY2VwdCBzZXRjYXBzKCkiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW50ZXJsZWF2ZV9zaW5rX2V2ZW50IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKLSAgICBHc3RFdmVudCAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEludGVybGVhdmUgKnNlbGYgPSBHU1RfSU5URVJMRUFWRSAodXNlcl9kYXRhKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBHU1RfREVCVUcgKCJHb3QgJXMgZXZlbnQgb24gcGFkICVzOiVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChkYXRhLT5wYWQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmc2VsZi0+cGVuZGluZ19zZWdtZW50LCBOVUxMKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmc2VsZi0+cGVuZGluZ19zZWdtZW50LCBldmVudCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotICAgICAgR3N0QXVkaW9JbmZvIGluZm87Ci0gICAgICBHVmFsdWUgKnZhbDsKLSAgICAgIGd1aW50IGNoYW5uZWw7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotCi0gICAgICBpZiAoIWdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGNhcHMpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2VsZiwgImludmFsaWQgc2luayBjYXBzIik7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBldmVudCA9IE5VTEw7Ci0gICAgICAgIHJldCA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYgKHNlbGYtPmNoYW5uZWxfcG9zaXRpb25zX2Zyb21faW5wdXQKLSAgICAgICAgICAmJiBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJmluZm8pID09IDEpIHsKLSAgICAgICAgY2hhbm5lbCA9IEdTVF9JTlRFUkxFQVZFX1BBRF9DQVNUIChkYXRhLT5wYWQpLT5jaGFubmVsOwotICAgICAgICB2YWwgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKHNlbGYtPmlucHV0X2NoYW5uZWxfcG9zaXRpb25zLCBjaGFubmVsKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsLCBHU1RfQVVESU9fSU5GT19QT1NJVElPTiAoJmluZm8sIDApKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKGRhdGEtPnBhZCkpCi0gICAgICAgIGdfYXRvbWljX2ludF9hZGQgKCZzZWxmLT5jb25maWd1cmVkX3NpbmtwYWRzX2NvdW50ZXIsIDEpOwotCi0gICAgICAvKiBMYXN0IGNhcHMgdGhhdCBhcmUgc2V0IG9uIGEgc2luayBwYWQgYXJlIHVzZWQgYXMgb3V0cHV0IGNhcHMgKi8KLSAgICAgIGlmIChnX2F0b21pY19pbnRfZ2V0ICgmc2VsZi0+Y29uZmlndXJlZF9zaW5rcGFkc19jb3VudGVyKSA9PQotICAgICAgICAgIHNlbGYtPmNoYW5uZWxzKSB7Ci0gICAgICAgIHJldCA9IGdzdF9pbnRlcmxlYXZlX3Npbmtfc2V0Y2FwcyAoc2VsZiwgZGF0YS0+cGFkLCBjYXBzLCAmaW5mbyk7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBldmVudCA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgICAgR1NUX0ZJWE1FX09CSkVDVCAoc2VsZiwgIkZJWE1FOiBtZXJnZSB0YWdzIGFuZCBzZW5kIGFmdGVyIHN0cmVhbS1zdGFydCIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogbm93IEdzdENvbGxlY3RQYWRzIGNhbiB0YWtlIGNhcmUgb2YgdGhlIHJlc3QsIGUuZy4gRU9TICovCi0gIGlmIChldmVudCAhPSBOVUxMKQotICAgIHJldHVybiBnc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQgKHBhZHMsIGRhdGEsIGV2ZW50LCBGQUxTRSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW50ZXJsZWF2ZV9zaW5rX3F1ZXJ5IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdERhdGEgKiBkYXRhLCBHc3RRdWVyeSAqIHF1ZXJ5LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEludGVybGVhdmUgKnNlbGYgPSBHU1RfSU5URVJMRUFWRSAodXNlcl9kYXRhKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBHU1RfREVCVUcgKCJHb3QgJXMgcXVlcnkgb24gcGFkICVzOiVzIiwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChkYXRhLT5wYWQpKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKmNhcHM7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBjYXBzID0gZ3N0X2ludGVybGVhdmVfc2lua19nZXRjYXBzIChkYXRhLT5wYWQsIHNlbGYsIGZpbHRlcik7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfY29sbGVjdF9wYWRzX3F1ZXJ5X2RlZmF1bHQgKHBhZHMsIGRhdGEsIHF1ZXJ5LCBGQUxTRSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ludGVybGVhdmVfc3JjX3F1ZXJ5X2R1cmF0aW9uIChHc3RJbnRlcmxlYXZlICogc2VsZiwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2ludDY0IG1heDsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBHc3RJdGVyYXRvciAqaXQ7Ci0gIGdib29sZWFuIGRvbmU7Ci0KLSAgLyogcGFyc2UgZm9ybWF0ICovCi0gIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gIG1heCA9IC0xOwotICByZXMgPSBUUlVFOwotICBkb25lID0gRkFMU0U7Ci0KLSAgLyogVGFrZSBtYXhpbXVtIG9mIGFsbCBkdXJhdGlvbnMgKi8KLSAgaXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsZikpOwotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBHc3RJdGVyYXRvclJlc3VsdCBpcmVzOwotCi0gICAgR1ZhbHVlIGl0ZW0gPSB7IDAsIH07Ci0KLSAgICBpcmVzID0gZ3N0X2l0ZXJhdG9yX25leHQgKGl0LCAmaXRlbSk7Ci0gICAgc3dpdGNoIChpcmVzKSB7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzoKLSAgICAgIHsKLSAgICAgICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKGdfdmFsdWVfZHVwX29iamVjdCAoJml0ZW0pKTsKLQotICAgICAgICBnaW50NjQgZHVyYXRpb247Ci0KLSAgICAgICAgLyogYXNrIHNpbmsgcGVlciBmb3IgZHVyYXRpb24gKi8KLSAgICAgICAgcmVzICY9IGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAocGFkLCBmb3JtYXQsICZkdXJhdGlvbik7Ci0gICAgICAgIC8qIHRha2UgbWF4IGZyb20gYWxsIHZhbGlkIHJldHVybiB2YWx1ZXMgKi8KLSAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgIC8qIHZhbGlkIHVua25vd24gbGVuZ3RoLCBzdG9wIHNlYXJjaGluZyAqLwotICAgICAgICAgIGlmIChkdXJhdGlvbiA9PSAtMSkgewotICAgICAgICAgICAgbWF4ID0gZHVyYXRpb247Ci0gICAgICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZWxzZSBzZWUgaWYgYmlnZ2VyIHRoYW4gY3VycmVudCBtYXggKi8KLSAgICAgICAgICBlbHNlIGlmIChkdXJhdGlvbiA+IG1heCkKLSAgICAgICAgICAgIG1heCA9IGR1cmF0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgIG1heCA9IC0xOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLQotICBpZiAocmVzKSB7Ci0gICAgLyogSWYgaW4gYnl0ZXMgZm9ybWF0IHdlIGhhdmUgdG8gbXVsdGlwbHkgd2l0aCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCi0gICAgICogdG8gZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdHMuIEFsbCBvdGhlciBmb3JtYXRzIHNob3VsZCBiZSBmaW5lICovCi0gICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIG1heCAhPSAtMSkKLSAgICAgIG1heCAqPSBzZWxmLT5jaGFubmVsczsKLQotICAgIC8qIGFuZCBzdG9yZSB0aGUgbWF4ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlRvdGFsIGR1cmF0aW9uIGluIGZvcm1hdCAlczogJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpLCBHU1RfVElNRV9BUkdTIChtYXgpKTsKLSAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm9ybWF0LCBtYXgpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfaW50ZXJsZWF2ZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RJbnRlcmxlYXZlICpzZWxmID0gR1NUX0lOVEVSTEVBVkUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICAvKiBGSVhNRSwgYnJpbmcgdG8gc3RyZWFtIHRpbWUsIG1pZ2h0IGJlIHRyaWNreSAqLwotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIHNlbGYtPnRpbWVzdGFtcCk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsCi0gICAgICAgICAgICAgIHNlbGYtPm9mZnNldCAqIHNlbGYtPmNoYW5uZWxzICogc2VsZi0+d2lkdGgpOwotICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsIHNlbGYtPm9mZnNldCk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICAgIHJlcyA9IGdzdF9pbnRlcmxlYXZlX3NyY19xdWVyeV9kdXJhdGlvbiAoc2VsZiwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIEZJWE1FLCBuZWVkcyBhIGN1c3RvbSBxdWVyeSBoYW5kbGVyIGJlY2F1c2Ugd2UgaGF2ZSBtdWx0aXBsZQotICAgICAgICogc2lua3BhZHMgKi8KLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3J3YXJkX2V2ZW50X2Z1bmMgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKGdfdmFsdWVfZHVwX29iamVjdCAoaXRlbSkpOwotICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJBYm91dCB0byBzZW5kIGV2ZW50ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgaWYgKCFnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpKSB7Ci0gICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0LCBGQUxTRSk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJTZW5kaW5nIGV2ZW50ICAlcCAoJXMpIGZhaWxlZC4iLAotICAgICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiU2VudCBldmVudCAgJXAgKCVzKS4iLAotICAgICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3J3YXJkX2V2ZW50IChHc3RJbnRlcmxlYXZlICogc2VsZiwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SXRlcmF0b3IgKml0OwotICBHVmFsdWUgdnJldCA9IHsgMCB9OwotCi0gIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAiRm9yd2FyZGluZyBldmVudCAlcCAoJXMpIiwgZXZlbnQsCi0gICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZyZXQsIEdfVFlQRV9CT09MRUFOKTsKLSAgZ192YWx1ZV9zZXRfYm9vbGVhbiAoJnZyZXQsIFRSVUUpOwotICBpdCA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSk7Ci0gIGdzdF9pdGVyYXRvcl9mb2xkIChpdCwgKEdzdEl0ZXJhdG9yRm9sZEZ1bmN0aW9uKSBmb3J3YXJkX2V2ZW50X2Z1bmMsICZ2cmV0LAotICAgICAgZXZlbnQpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gZ192YWx1ZV9nZXRfYm9vbGVhbiAoJnZyZXQpOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ludGVybGVhdmVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SW50ZXJsZWF2ZSAqc2VsZiA9IEdTVF9JTlRFUkxFQVZFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfUU9TOgotICAgICAgLyogUW9TIG1pZ2h0IGJlIHRyaWNreSAqLwotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgIHsKLSAgICAgIEdzdFNlZWtGbGFncyBmbGFnczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCBOVUxMLCBOVUxMLCAmZmxhZ3MsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgICAvKiBjaGVjayBpZiB3ZSBhcmUgZmx1c2hpbmcgKi8KLSAgICAgIGlmIChmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0gpIHsKLSAgICAgICAgLyogbWFrZSBzdXJlIHdlIGFjY2VwdCBub3RoaW5nIGFueW1vcmUgYW5kIHJldHVybiBXUk9OR19TVEFURSAqLwotICAgICAgICBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaGluZyAoc2VsZi0+Y29sbGVjdCwgVFJVRSk7Ci0KLSAgICAgICAgLyogZmx1c2hpbmcgc2Vlaywgc3RhcnQgZmx1c2ggZG93bnN0cmVhbSwgdGhlIGZsdXNoIHdpbGwgYmUgZG9uZQotICAgICAgICAgKiB3aGVuIGFsbCBwYWRzIHJlY2VpdmVkIGEgRkxVU0hfU1RPUC4gKi8KLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmMsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICAgICAgfQotICAgICAgcmVzdWx0ID0gZm9yd2FyZF9ldmVudCAoc2VsZiwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX05BVklHQVRJT046Ci0gICAgICAvKiBuYXZpZ2F0aW9uIGlzIHJhdGhlciBwb2ludGxlc3MuICovCi0gICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBqdXN0IGZvcndhcmQgdGhlIHJlc3QgZm9yIG5vdyAqLwotICAgICAgcmVzdWx0ID0gZm9yd2FyZF9ldmVudCAoc2VsZiwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2ludGVybGVhdmVfY29sbGVjdGVkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdEludGVybGVhdmUgKiBzZWxmKQotewotICBndWludCBzaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdTTGlzdCAqY29sbGVjdGVkOwotICBndWludCBuc2FtcGxlczsKLSAgZ3VpbnQgbmNvbGxlY3RlZCA9IDA7Ci0gIGdib29sZWFuIGVtcHR5ID0gVFJVRTsKLSAgZ2ludCB3aWR0aCA9IHNlbGYtPndpZHRoIC8gODsKLSAgR3N0TWFwSW5mbyB3cml0ZV9pbmZvOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wID0gLTE7Ci0KLSAgc2l6ZSA9IGdzdF9jb2xsZWN0X3BhZHNfYXZhaWxhYmxlIChwYWRzKTsKLSAgaWYgKHNpemUgPT0gMCkKLSAgICBnb3RvIGVvczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZi0+ZnVuYyAhPSBOVUxMLCBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmLT53aWR0aCA+IDAsIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYtPmNoYW5uZWxzID4gMCwgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZi0+cmF0ZSA+IDAsIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2l6ZSAlIHdpZHRoID09IDAsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiU3RhcnRpbmcgdG8gY29sbGVjdCAldSBieXRlcyBmcm9tICVkIGNoYW5uZWxzIiwgc2l6ZSwKLSAgICAgIHNlbGYtPmNoYW5uZWxzKTsKLQotICBuc2FtcGxlcyA9IHNpemUgLyB3aWR0aDsKLQotICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgc2l6ZSAqIHNlbGYtPmNoYW5uZWxzLCBOVUxMKTsKLQotICBpZiAob3V0YnVmID09IE5VTEwgfHwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSA8IHNpemUgKiBzZWxmLT5jaGFubmVscykgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJndyaXRlX2luZm8sIEdTVF9NQVBfV1JJVEUpOwotICBtZW1zZXQgKHdyaXRlX2luZm8uZGF0YSwgMCwgc2l6ZSAqIHNlbGYtPmNoYW5uZWxzKTsKLQotICBmb3IgKGNvbGxlY3RlZCA9IHBhZHMtPmRhdGE7IGNvbGxlY3RlZCAhPSBOVUxMOyBjb2xsZWN0ZWQgPSBjb2xsZWN0ZWQtPm5leHQpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqY2RhdGE7Ci0gICAgR3N0QnVmZmVyICppbmJ1ZjsKLSAgICBndWludDggKm91dGRhdGE7Ci0gICAgR3N0TWFwSW5mbyBpbnB1dF9pbmZvOwotICAgIGdpbnQgY2hhbm5lbDsKLQotICAgIGNkYXRhID0gKEdzdENvbGxlY3REYXRhICopIGNvbGxlY3RlZC0+ZGF0YTsKLQotICAgIGluYnVmID0gZ3N0X2NvbGxlY3RfcGFkc190YWtlX2J1ZmZlciAocGFkcywgY2RhdGEsIHNpemUpOwotICAgIGlmIChpbmJ1ZiA9PSBOVUxMKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChjZGF0YS0+cGFkLCAiTm8gYnVmZmVyIGF2YWlsYWJsZSIpOwotICAgICAgZ290byBuZXh0OwotICAgIH0KLSAgICBuY29sbGVjdGVkKys7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmLCAmaW5wdXRfaW5mbywgR1NUX01BUF9SRUFEKTsKLQotICAgIGlmICh0aW1lc3RhbXAgPT0gLTEpCi0gICAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWYpOwotCi0gICAgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGluYnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKSkKLSAgICAgIGdvdG8gbmV4dDsKLQotICAgIGVtcHR5ID0gRkFMU0U7Ci0gICAgY2hhbm5lbCA9IEdTVF9JTlRFUkxFQVZFX1BBRF9DQVNUIChjZGF0YS0+cGFkKS0+Y2hhbm5lbDsKLSAgICBvdXRkYXRhID0KLSAgICAgICAgd3JpdGVfaW5mby5kYXRhICsgd2lkdGggKiBzZWxmLT5kZWZhdWx0X2NoYW5uZWxzX29yZGVyaW5nX21hcFtjaGFubmVsXTsKLQotICAgIHNlbGYtPmZ1bmMgKG91dGRhdGEsIGlucHV0X2luZm8uZGF0YSwgc2VsZi0+Y2hhbm5lbHMsIG5zYW1wbGVzKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZiwgJmlucHV0X2luZm8pOwotCi0gIG5leHQ6Ci0gICAgaWYgKGluYnVmKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWYpOwotICB9Ci0KLSAgaWYgKG5jb2xsZWN0ZWQgPT0gMCkgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJndyaXRlX2luZm8pOwotICAgIGdvdG8gZW9zOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgaWYgKHNlbGYtPnBlbmRpbmdfc2VnbWVudCkgewotICAgIEdzdEV2ZW50ICpldmVudDsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICBldmVudCA9IHNlbGYtPnBlbmRpbmdfc2VnbWVudDsKLSAgICBzZWxmLT5wZW5kaW5nX3NlZ21lbnQgPSBOVUxMOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzZWxmKTsKLQotICAgIC8qIGNvbnZlcnQgdGhlIGlucHV0IHNlZ21lbnQgdG8gdGltZSBub3cgKi8KLSAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotCi0gICAgaWYgKHNlZ21lbnQuZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICAgIC8qIG5vdCB0aW1lLCBjb252ZXJ0ICovCi0gICAgICBzd2l0Y2ggKHNlZ21lbnQuZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgICBzZWdtZW50LnN0YXJ0ICo9IHdpZHRoOwotICAgICAgICAgIGlmIChzZWdtZW50LnN0b3AgIT0gLTEpCi0gICAgICAgICAgICBzZWdtZW50LnN0b3AgKj0gd2lkdGg7Ci0gICAgICAgICAgaWYgKHNlZ21lbnQucG9zaXRpb24gIT0gLTEpCi0gICAgICAgICAgICBzZWdtZW50LnBvc2l0aW9uICo9IHdpZHRoOwotICAgICAgICAgIC8qIGZhbGx0aHJvdWdoIGZvciB0aGUgc2FtcGxlcyBjYXNlICovCi0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgotICAgICAgICAgIHNlZ21lbnQuc3RhcnQgPQotICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzZWdtZW50LnN0YXJ0LCBHU1RfU0VDT05ELCBzZWxmLT5yYXRlKTsKLSAgICAgICAgICBpZiAoc2VnbWVudC5zdG9wICE9IC0xKQotICAgICAgICAgICAgc2VnbWVudC5zdG9wID0KLSAgICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzZWdtZW50LnN0b3AsIEdTVF9TRUNPTkQsCi0gICAgICAgICAgICAgICAgc2VsZi0+cmF0ZSk7Ci0gICAgICAgICAgaWYgKHNlZ21lbnQucG9zaXRpb24gIT0gLTEpCi0gICAgICAgICAgICBzZWdtZW50LnBvc2l0aW9uID0KLSAgICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzZWdtZW50LnBvc2l0aW9uLCBHU1RfU0VDT05ELAotICAgICAgICAgICAgICAgIHNlbGYtPnJhdGUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEdTVF9XQVJOSU5HICgiY2FuJ3QgY29udmVydCBzZWdtZW50IHZhbHVlcyIpOwotICAgICAgICAgIHNlZ21lbnQuc3RhcnQgPSAwOwotICAgICAgICAgIHNlZ21lbnQuc3RvcCA9IC0xOwotICAgICAgICAgIHNlZ21lbnQucG9zaXRpb24gPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLSAgICB9Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZWxmLT5zcmMsIGV2ZW50KTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotCi0gIGlmICh0aW1lc3RhbXAgIT0gLTEpIHsKLSAgICBzZWxmLT5vZmZzZXQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh0aW1lc3RhbXAsIHNlbGYtPnJhdGUsCi0gICAgICAgIEdTVF9TRUNPTkQpOwotICAgIHNlbGYtPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gc2VsZi0+dGltZXN0YW1wOwotICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9IHNlbGYtPm9mZnNldDsKLQotICBzZWxmLT5vZmZzZXQgKz0gbnNhbXBsZXM7Ci0gIHNlbGYtPnRpbWVzdGFtcCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNlbGYtPm9mZnNldCwKLSAgICAgIEdTVF9TRUNPTkQsIHNlbGYtPnJhdGUpOwotCi0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPQotICAgICAgc2VsZi0+dGltZXN0YW1wIC0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1Zik7Ci0KLSAgaWYgKGVtcHR5KQotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0dBUCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmd3JpdGVfaW5mbyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJwdXNoaW5nIG91dGJ1ZiwgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpKSk7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaCAoc2VsZi0+c3JjLCBvdXRidWYpOwotCi0gIHJldHVybiByZXQ7Ci0KLWVvczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJubyBkYXRhIGF2YWlsYWJsZSwgbXVzdCBiZSBFT1MiKTsKLSAgICBpZiAob3V0YnVmKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNyYywgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaCBiL2dzdC9pbnRlcmxlYXZlL2ludGVybGVhdmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5OTM2YS4uMDAwMDAwMAotLS0gYS9nc3QvaW50ZXJsZWF2ZS9pbnRlcmxlYXZlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d3RheUBjaGVsbG8uYmU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDcgQW5keSBXaW5nbyA8d2luZ28gYXQgcG9ib3guY29tPgotICogICAgICAgICAgICAgICAgICAgIDIwMDggU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIGludGVybGVhdmUuYzogaW50ZXJsZWF2ZSBzYW1wbGVzLCBtb3N0bHkgYmFzZWQgb24gYWRkZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fSU5URVJMRUFWRV9IX18KLSNkZWZpbmUgX19JTlRFUkxFQVZFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9JTlRFUkxFQVZFICAgICAgICAgICAgKGdzdF9pbnRlcmxlYXZlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JTlRFUkxFQVZFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfSU5URVJMRUFWRSxHc3RJbnRlcmxlYXZlKSkKLSNkZWZpbmUgR1NUX0lOVEVSTEVBVkVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0lOVEVSTEVBVkUsR3N0SW50ZXJsZWF2ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lOVEVSTEVBVkVfR0VUX0NMQVNTKG9iaikgXAotICAgICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksR1NUX1RZUEVfSU5URVJMRUFWRSxHc3RJbnRlcmxlYXZlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfSU5URVJMRUFWRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0lOVEVSTEVBVkUpKQotI2RlZmluZSBHU1RfSVNfSU5URVJMRUFWRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfSU5URVJMRUFWRSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RJbnRlcmxlYXZlIEdzdEludGVybGVhdmU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SW50ZXJsZWF2ZUNsYXNzIEdzdEludGVybGVhdmVDbGFzczsKLQotdHlwZWRlZiB2b2lkICgqR3N0SW50ZXJsZWF2ZUZ1bmMpIChncG9pbnRlciBvdXQsIGdwb2ludGVyIGluLCBndWludCBzdHJpZGUsIGd1aW50IG5mcmFtZXMpOwotCi1zdHJ1Y3QgX0dzdEludGVybGVhdmUKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RDb2xsZWN0UGFkcyAqY29sbGVjdDsKLQotICBnaW50IGNoYW5uZWxzOwotICBnaW50IHBhZGNvdW50ZXI7Ci0gIGdpbnQgcmF0ZTsKLSAgZ2ludCB3aWR0aDsKLQotICBHVmFsdWVBcnJheSAqY2hhbm5lbF9wb3NpdGlvbnM7Ci0gIEdWYWx1ZUFycmF5ICppbnB1dF9jaGFubmVsX3Bvc2l0aW9uczsKLSAgZ2Jvb2xlYW4gY2hhbm5lbF9wb3NpdGlvbnNfZnJvbV9pbnB1dDsKLQotICBnaW50IGRlZmF1bHRfY2hhbm5lbHNfb3JkZXJpbmdfbWFwWzY0XTsKLQotICBHc3RDYXBzICpzaW5rY2FwczsKLSAgZ2ludCBjb25maWd1cmVkX3NpbmtwYWRzX2NvdW50ZXI7Ci0KLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0KLSAgR3N0RXZlbnQgKnBlbmRpbmdfc2VnbWVudDsKLQotICBHc3RJbnRlcmxlYXZlRnVuYyBmdW5jOwotCi0gIEdzdFBhZCAqc3JjOwotCi0gIGdib29sZWFuIHNlbmRfc3RyZWFtX3N0YXJ0OwotfTsKLQotc3RydWN0IF9Hc3RJbnRlcmxlYXZlQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9pbnRlcmxlYXZlX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fSU5URVJMRUFWRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9pbnRlcmxlYXZlL3BsdWdpbi5jIGIvZ3N0L2ludGVybGVhdmUvcGx1Z2luLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjcyOTAuLjAwMDAwMDAKLS0tIGEvZ3N0L2ludGVybGVhdmUvcGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKiBHU3RyZWFtZXIgaW50ZXJsZWF2ZSBwbHVnaW4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA3IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4KLSAqCi0gKiBwbHVnaW4uYzogdGhlIHN0dWJzIGZvciB0aGUgaW50ZXJsZWF2ZSBwbHVnaW4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJwbHVnaW4uaCIKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJpbnRlcmxlYXZlIiwKLSAgICAgICAgICBHU1RfUkFOS19OT05FLCBnc3RfaW50ZXJsZWF2ZV9nZXRfdHlwZSAoKSkgfHwKLSAgICAgICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZGVpbnRlcmxlYXZlIiwKLSAgICAgICAgICBHU1RfUkFOS19OT05FLCBnc3RfZGVpbnRlcmxlYXZlX2dldF90eXBlICgpKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgaW50ZXJsZWF2ZSwKLSAgICAiQXVkaW8gaW50ZXJsZWF2ZXIvZGVpbnRlcmxlYXZlciIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2dzdC9pbnRlcmxlYXZlL3BsdWdpbi5oIGIvZ3N0L2ludGVybGVhdmUvcGx1Z2luLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NTY4MjcuLjAwMDAwMDAKLS0tIGEvZ3N0L2ludGVybGVhdmUvcGx1Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiBHU3RyZWFtZXIgaW50ZXJsZWF2ZSBwbHVnaW4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA3IEFuZHkgV2luZ28gPHdpbmdvIGF0IHBvYm94LmNvbT4KLSAqCi0gKiBwbHVnaW4uaDogdGhlIHN0dWJzIGZvciB0aGUgaW50ZXJsZWF2ZSBwbHVnaW4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUExVR0lOX0lOVEVSTEVBVkVfSF9fCi0jZGVmaW5lIF9fR1NUX1BMVUdJTl9JTlRFUkxFQVZFX0hfXwotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiaW50ZXJsZWF2ZS5oIgotI2luY2x1ZGUgImRlaW50ZXJsZWF2ZS5oIgotCi0jZW5kaWYgLyogX19HU1RfUExVR0lOX0lOVEVSTEVBVkVfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L0dzdFFUTXV4LnBycyBiL2dzdC9pc29tcDQvR3N0UVRNdXgucHJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTFlNjQ0Li4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvR3N0UVRNdXgucHJzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1bX3ByZXNldHNfXQotdmVyc2lvbj0xLjYuMAotZWxlbWVudC1uYW1lPUdzdFFUTXV4Ci0KLVtQcm9maWxlIFlvdVR1YmVdCi1mYXN0c3RhcnQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9NYWtlZmlsZS5hbSBiL2dzdC9pc29tcDQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNTYwYTIuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0aXNvbXA0LmxhCi0KLWxpYmdzdGlzb21wNF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0aXNvbXA0X2xhX0xJQkFERCA9IFwKLSAgICAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotICAgIC1sZ3N0cmlmZi1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgLWxnc3RydHAtQEdTVF9BUElfVkVSU0lPTkAgXAotICAgIC1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLSAgICAtbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotICAgICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChaTElCX0xJQlMpCi1saWJnc3Rpc29tcDRfbGFfTERGTEFHUyA9ICR7R1NUX1BMVUdJTl9MREZMQUdTfQotbGliZ3N0aXNvbXA0X2xhX1NPVVJDRVMgPSBpc29tcDQtcGx1Z2luLmMgZ3N0cnRweHF0ZGVwYXkuYyBcCi0JcXRkZW11eC5jIHF0ZGVtdXhfdHlwZXMuYyBxdGRlbXV4X2R1bXAuYyBxdGRlbXV4X2xhbmcuYyBcCi0JZ3N0cXRtdXguYyBnc3RxdG1vb3ZyZWNvdmVyLmMgYXRvbXMuYyBhdG9tc3JlY292ZXJ5LmMgZGVzY3JpcHRvcnMuYyBcCi0JcHJvcGVydGllcy5jIGdzdHF0bXV4bWFwLmMgZ3N0aXNvZmYuYwotbGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLXByZXNldGRpciA9ICQoZGF0YWRpcikvZ3N0cmVhbWVyLSQoR1NUX0FQSV9WRVJTSU9OKS9wcmVzZXRzCi1wcmVzZXRfREFUQSA9IEdzdFFUTXV4LnBycwotCi1ub2luc3RfSEVBREVSUyA9IFwKLQlxdGF0b21wYXJzZXIuaCAgIFwKLQlxdGRlbXV4LmggICAgICAgIFwKLQlxdGRlbXV4X3R5cGVzLmggIFwKLQlxdGRlbXV4X2R1bXAuaCAgIFwKLQlxdGRlbXV4X2xhbmcuaCAgIFwKLQlxdHBhbGV0dGUuaCAgICAgIFwKLQlnc3RydHB4cXRkZXBheS5oIFwKLQlnc3RxdG11eC5oICAgICAgIFwKLQlnc3RxdG1vb3ZyZWNvdmVyLmggXAotCWF0b21zLmggICAgICAgICAgXAotCWF0b21zcmVjb3ZlcnkuaCAgXAotCWRlc2NyaXB0b3JzLmggICAgXAotCXByb3BlcnRpZXMuaCAgICAgXAotCWZvdXJjYy5oICAgICAgICAgXAotCWdzdGlzb2ZmLmggICAgICAgXAotCWdzdHF0bXV4bWFwLmgKLQotRVhUUkFfRElTVCA9IFwKLQlnc3RxdG11eC1kb2MuYyBcCi0JZ3N0cXRtdXgtZG9jLmggXAotCSQocHJlc2V0X0RBVEEpCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L01ha2VmaWxlLmluIGIvZ3N0L2lzb21wNC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ0NjFiMS4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTA4MiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9pc29tcDQKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiAiJChERVNURElSKSQocHJlc2V0ZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0aXNvbXA0X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3Rpc29tcDRfbGFfT0JKRUNUUyA9IGxpYmdzdGlzb21wNF9sYS1pc29tcDQtcGx1Z2luLmxvIFwKLQlsaWJnc3Rpc29tcDRfbGEtZ3N0cnRweHF0ZGVwYXkubG8gbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXgubG8gXAotCWxpYmdzdGlzb21wNF9sYS1xdGRlbXV4X3R5cGVzLmxvIFwKLQlsaWJnc3Rpc29tcDRfbGEtcXRkZW11eF9kdW1wLmxvIFwKLQlsaWJnc3Rpc29tcDRfbGEtcXRkZW11eF9sYW5nLmxvIGxpYmdzdGlzb21wNF9sYS1nc3RxdG11eC5sbyBcCi0JbGliZ3N0aXNvbXA0X2xhLWdzdHF0bW9vdnJlY292ZXIubG8gbGliZ3N0aXNvbXA0X2xhLWF0b21zLmxvIFwKLQlsaWJnc3Rpc29tcDRfbGEtYXRvbXNyZWNvdmVyeS5sbyBcCi0JbGliZ3N0aXNvbXA0X2xhLWRlc2NyaXB0b3JzLmxvIGxpYmdzdGlzb21wNF9sYS1wcm9wZXJ0aWVzLmxvIFwKLQlsaWJnc3Rpc29tcDRfbGEtZ3N0cXRtdXhtYXAubG8gbGliZ3N0aXNvbXA0X2xhLWdzdGlzb2ZmLmxvCi1saWJnc3Rpc29tcDRfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0aXNvbXA0X2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3Rpc29tcDRfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0aXNvbXA0X2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGlzb21wNF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3Rpc29tcDRfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1EQVRBID0gJChwcmVzZXRfREFUQSkKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rpc29tcDQubGEKLWxpYmdzdGlzb21wNF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0aXNvbXA0X2xhX0xJQkFERCA9IFwKLSAgICAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotICAgIC1sZ3N0cmlmZi1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgLWxnc3RydHAtQEdTVF9BUElfVkVSU0lPTkAgXAotICAgIC1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLSAgICAtbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotICAgICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChaTElCX0xJQlMpCi0KLWxpYmdzdGlzb21wNF9sYV9MREZMQUdTID0gJHtHU1RfUExVR0lOX0xERkxBR1N9Ci1saWJnc3Rpc29tcDRfbGFfU09VUkNFUyA9IGlzb21wNC1wbHVnaW4uYyBnc3RydHB4cXRkZXBheS5jIFwKLQlxdGRlbXV4LmMgcXRkZW11eF90eXBlcy5jIHF0ZGVtdXhfZHVtcC5jIHF0ZGVtdXhfbGFuZy5jIFwKLQlnc3RxdG11eC5jIGdzdHF0bW9vdnJlY292ZXIuYyBhdG9tcy5jIGF0b21zcmVjb3ZlcnkuYyBkZXNjcmlwdG9ycy5jIFwKLQlwcm9wZXJ0aWVzLmMgZ3N0cXRtdXhtYXAuYyBnc3Rpc29mZi5jCi0KLWxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotcHJlc2V0ZGlyID0gJChkYXRhZGlyKS9nc3RyZWFtZXItJChHU1RfQVBJX1ZFUlNJT04pL3ByZXNldHMKLXByZXNldF9EQVRBID0gR3N0UVRNdXgucHJzCi1ub2luc3RfSEVBREVSUyA9IFwKLQlxdGF0b21wYXJzZXIuaCAgIFwKLQlxdGRlbXV4LmggICAgICAgIFwKLQlxdGRlbXV4X3R5cGVzLmggIFwKLQlxdGRlbXV4X2R1bXAuaCAgIFwKLQlxdGRlbXV4X2xhbmcuaCAgIFwKLQlxdHBhbGV0dGUuaCAgICAgIFwKLQlnc3RydHB4cXRkZXBheS5oIFwKLQlnc3RxdG11eC5oICAgICAgIFwKLQlnc3RxdG1vb3ZyZWNvdmVyLmggXAotCWF0b21zLmggICAgICAgICAgXAotCWF0b21zcmVjb3ZlcnkuaCAgXAotCWRlc2NyaXB0b3JzLmggICAgXAotCXByb3BlcnRpZXMuaCAgICAgXAotCWZvdXJjYy5oICAgICAgICAgXAotCWdzdGlzb2ZmLmggICAgICAgXAotCWdzdHF0bXV4bWFwLmgKLQotRVhUUkFfRElTVCA9IFwKLQlnc3RxdG11eC1kb2MuYyBcCi0JZ3N0cXRtdXgtZG9jLmggXAotCSQocHJlc2V0X0RBVEEpCi0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9pc29tcDQvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2lzb21wNC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGlzb21wNC5sYTogJChsaWJnc3Rpc29tcDRfbGFfT0JKRUNUUykgJChsaWJnc3Rpc29tcDRfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGlzb21wNF9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0aXNvbXA0X2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3Rpc29tcDRfbGFfT0JKRUNUUykgJChsaWJnc3Rpc29tcDRfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtYXRvbXMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtYXRvbXNyZWNvdmVyeS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1kZXNjcmlwdG9ycy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3Rpc29mZi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RxdG1vb3ZyZWNvdmVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHF0bXV4LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHF0bXV4bWFwLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHJ0cHhxdGRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWlzb21wNC1wbHVnaW4uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcHJvcGVydGllcy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfZHVtcC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2xhbmcuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcXRkZW11eF90eXBlcy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0aXNvbXA0X2xhLWlzb21wNC1wbHVnaW4ubG86IGlzb21wNC1wbHVnaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1pc29tcDQtcGx1Z2luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtaXNvbXA0LXBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWlzb21wNC1wbHVnaW4ubG8gYHRlc3QgLWYgJ2lzb21wNC1wbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaXNvbXA0LXBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtaXNvbXA0LXBsdWdpbi5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1pc29tcDQtcGx1Z2luLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lzb21wNC1wbHVnaW4uYycgb2JqZWN0PSdsaWJnc3Rpc29tcDRfbGEtaXNvbXA0LXBsdWdpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWlzb21wNC1wbHVnaW4ubG8gYHRlc3QgLWYgJ2lzb21wNC1wbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgaXNvbXA0LXBsdWdpbi5jCi0KLWxpYmdzdGlzb21wNF9sYS1nc3RydHB4cXRkZXBheS5sbzogZ3N0cnRweHF0ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1nc3RydHB4cXRkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHJ0cHhxdGRlcGF5LlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtZ3N0cnRweHF0ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHhxdGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHhxdGRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RydHB4cXRkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RydHB4cXRkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHB4cXRkZXBheS5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1nc3RydHB4cXRkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWdzdHJ0cHhxdGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHB4cXRkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB4cXRkZXBheS5jCi0KLWxpYmdzdGlzb21wNF9sYS1xdGRlbXV4LmxvOiBxdGRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rpc29tcDRfbGEtcXRkZW11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXguVHBvIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1xdGRlbXV4LmxvIGB0ZXN0IC1mICdxdGRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF0ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXguVHBvICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcXRkZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdxdGRlbXV4LmMnIG9iamVjdD0nbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1xdGRlbXV4LmxvIGB0ZXN0IC1mICdxdGRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF0ZGVtdXguYwotCi1saWJnc3Rpc29tcDRfbGEtcXRkZW11eF90eXBlcy5sbzogcXRkZW11eF90eXBlcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGlzb21wNF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfdHlwZXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X3R5cGVzLlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtcXRkZW11eF90eXBlcy5sbyBgdGVzdCAtZiAncXRkZW11eF90eXBlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdGRlbXV4X3R5cGVzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X3R5cGVzLlRwbyAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfdHlwZXMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncXRkZW11eF90eXBlcy5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X3R5cGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGlzb21wNF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtcXRkZW11eF90eXBlcy5sbyBgdGVzdCAtZiAncXRkZW11eF90eXBlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdGRlbXV4X3R5cGVzLmMKLQotbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfZHVtcC5sbzogcXRkZW11eF9kdW1wLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rpc29tcDRfbGEtcXRkZW11eF9kdW1wLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcXRkZW11eF9kdW1wLlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtcXRkZW11eF9kdW1wLmxvIGB0ZXN0IC1mICdxdGRlbXV4X2R1bXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcXRkZW11eF9kdW1wLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2R1bXAuVHBvICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcXRkZW11eF9kdW1wLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3F0ZGVtdXhfZHVtcC5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2R1bXAubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2R1bXAubG8gYHRlc3QgLWYgJ3F0ZGVtdXhfZHVtcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdGRlbXV4X2R1bXAuYwotCi1saWJnc3Rpc29tcDRfbGEtcXRkZW11eF9sYW5nLmxvOiBxdGRlbXV4X2xhbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2xhbmcubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2xhbmcuVHBvIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2xhbmcubG8gYHRlc3QgLWYgJ3F0ZGVtdXhfbGFuZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BxdGRlbXV4X2xhbmcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfbGFuZy5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1xdGRlbXV4X2xhbmcuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncXRkZW11eF9sYW5nLmMnIG9iamVjdD0nbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfbGFuZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLXF0ZGVtdXhfbGFuZy5sbyBgdGVzdCAtZiAncXRkZW11eF9sYW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHF0ZGVtdXhfbGFuZy5jCi0KLWxpYmdzdGlzb21wNF9sYS1nc3RxdG11eC5sbzogZ3N0cXRtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1nc3RxdG11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHF0bXV4LlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtZ3N0cXRtdXgubG8gYHRlc3QgLWYgJ2dzdHF0bXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF0bXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RxdG11eC5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RxdG11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RxdG11eC5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1nc3RxdG11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWdzdHF0bXV4LmxvIGB0ZXN0IC1mICdnc3RxdG11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdG11eC5jCi0KLWxpYmdzdGlzb21wNF9sYS1nc3RxdG1vb3ZyZWNvdmVyLmxvOiBnc3RxdG1vb3ZyZWNvdmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rpc29tcDRfbGEtZ3N0cXRtb292cmVjb3Zlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHF0bW9vdnJlY292ZXIuVHBvIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1nc3RxdG1vb3ZyZWNvdmVyLmxvIGB0ZXN0IC1mICdnc3RxdG1vb3ZyZWNvdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF0bW9vdnJlY292ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHF0bW9vdnJlY292ZXIuVHBvICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtZ3N0cXRtb292cmVjb3Zlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RxdG1vb3ZyZWNvdmVyLmMnIG9iamVjdD0nbGliZ3N0aXNvbXA0X2xhLWdzdHF0bW9vdnJlY292ZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1nc3RxdG1vb3ZyZWNvdmVyLmxvIGB0ZXN0IC1mICdnc3RxdG1vb3ZyZWNvdmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF0bW9vdnJlY292ZXIuYwotCi1saWJnc3Rpc29tcDRfbGEtYXRvbXMubG86IGF0b21zLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rpc29tcDRfbGEtYXRvbXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1hdG9tcy5UcG8gLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWF0b21zLmxvIGB0ZXN0IC1mICdhdG9tcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdG9tcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtYXRvbXMuVHBvICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtYXRvbXMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXRvbXMuYycgb2JqZWN0PSdsaWJnc3Rpc29tcDRfbGEtYXRvbXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rpc29tcDRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0aXNvbXA0X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1hdG9tcy5sbyBgdGVzdCAtZiAnYXRvbXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYXRvbXMuYwotCi1saWJnc3Rpc29tcDRfbGEtYXRvbXNyZWNvdmVyeS5sbzogYXRvbXNyZWNvdmVyeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGlzb21wNF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aXNvbXA0X2xhLWF0b21zcmVjb3ZlcnkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1hdG9tc3JlY292ZXJ5LlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtYXRvbXNyZWNvdmVyeS5sbyBgdGVzdCAtZiAnYXRvbXNyZWNvdmVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdG9tc3JlY292ZXJ5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1hdG9tc3JlY292ZXJ5LlRwbyAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWF0b21zcmVjb3ZlcnkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYXRvbXNyZWNvdmVyeS5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1hdG9tc3JlY292ZXJ5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGlzb21wNF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtYXRvbXNyZWNvdmVyeS5sbyBgdGVzdCAtZiAnYXRvbXNyZWNvdmVyeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhdG9tc3JlY292ZXJ5LmMKLQotbGliZ3N0aXNvbXA0X2xhLWRlc2NyaXB0b3JzLmxvOiBkZXNjcmlwdG9ycy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGlzb21wNF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0aXNvbXA0X2xhLWRlc2NyaXB0b3JzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtZGVzY3JpcHRvcnMuVHBvIC1jIC1vIGxpYmdzdGlzb21wNF9sYS1kZXNjcmlwdG9ycy5sbyBgdGVzdCAtZiAnZGVzY3JpcHRvcnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVzY3JpcHRvcnMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWRlc2NyaXB0b3JzLlRwbyAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWRlc2NyaXB0b3JzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Rlc2NyaXB0b3JzLmMnIG9iamVjdD0nbGliZ3N0aXNvbXA0X2xhLWRlc2NyaXB0b3JzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0aXNvbXA0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGlzb21wNF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtZGVzY3JpcHRvcnMubG8gYHRlc3QgLWYgJ2Rlc2NyaXB0b3JzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRlc2NyaXB0b3JzLmMKLQotbGliZ3N0aXNvbXA0X2xhLXByb3BlcnRpZXMubG86IHByb3BlcnRpZXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1wcm9wZXJ0aWVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcHJvcGVydGllcy5UcG8gLWMgLW8gbGliZ3N0aXNvbXA0X2xhLXByb3BlcnRpZXMubG8gYHRlc3QgLWYgJ3Byb3BlcnRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJvcGVydGllcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rpc29tcDRfbGEtcHJvcGVydGllcy5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1wcm9wZXJ0aWVzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Byb3BlcnRpZXMuYycgb2JqZWN0PSdsaWJnc3Rpc29tcDRfbGEtcHJvcGVydGllcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLXByb3BlcnRpZXMubG8gYHRlc3QgLWYgJ3Byb3BlcnRpZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcHJvcGVydGllcy5jCi0KLWxpYmdzdGlzb21wNF9sYS1nc3RxdG11eG1hcC5sbzogZ3N0cXRtdXhtYXAuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1nc3RxdG11eG1hcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdHF0bXV4bWFwLlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtZ3N0cXRtdXhtYXAubG8gYHRlc3QgLWYgJ2dzdHF0bXV4bWFwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHF0bXV4bWFwLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RxdG11eG1hcC5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3RxdG11eG1hcC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RxdG11eG1hcC5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1nc3RxdG11eG1hcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWdzdHF0bXV4bWFwLmxvIGB0ZXN0IC1mICdnc3RxdG11eG1hcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RxdG11eG1hcC5jCi0KLWxpYmdzdGlzb21wNF9sYS1nc3Rpc29mZi5sbzogZ3N0aXNvZmYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdGlzb21wNF9sYS1nc3Rpc29mZi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0aXNvbXA0X2xhLWdzdGlzb2ZmLlRwbyAtYyAtbyBsaWJnc3Rpc29tcDRfbGEtZ3N0aXNvZmYubG8gYHRlc3QgLWYgJ2dzdGlzb2ZmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGlzb2ZmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3Rpc29mZi5UcG8gJChERVBESVIpL2xpYmdzdGlzb21wNF9sYS1nc3Rpc29mZi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rpc29mZi5jJyBvYmplY3Q9J2xpYmdzdGlzb21wNF9sYS1nc3Rpc29mZi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGlzb21wNF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rpc29tcDRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0aXNvbXA0X2xhLWdzdGlzb2ZmLmxvIGB0ZXN0IC1mICdnc3Rpc29mZi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rpc29mZi5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi1pbnN0YWxsLXByZXNldERBVEE6ICQocHJlc2V0X0RBVEEpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocHJlc2V0X0RBVEEpJzsgdGVzdCAtbiAiJChwcmVzZXRkaXIpIiB8fCBsaXN0PTsgXAotCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHByZXNldGRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocHJlc2V0ZGlyKSIgfHwgZXhpdCAxOyBcCi0JZmk7IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBlY2hvICIkJGQkJHAiOyBcCi0JZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCi0Jd2hpbGUgcmVhZCBmaWxlczsgZG8gXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChwcmVzZXRkaXIpJyI7IFwKLQkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChwcmVzZXRkaXIpIiB8fCBleGl0ICQkPzsgXAotCWRvbmUKLQotdW5pbnN0YWxsLXByZXNldERBVEE6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwcmVzZXRfREFUQSknOyB0ZXN0IC1uICIkKHByZXNldGRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKLQlkaXI9JyQoREVTVERJUikkKHByZXNldGRpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKERBVEEpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiICIkKERFU1RESVIpJChwcmVzZXRkaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcmVzZXREQVRBCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyB1bmluc3RhbGwtcHJlc2V0REFUQQotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcmVzZXREQVRBIGluc3RhbGwtcHMgXAotCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKLQlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyB1bmluc3RhbGwtcHJlc2V0REFUQQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9hdG9tcy5jIGIvZ3N0L2lzb21wNC9hdG9tcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDQ1NTQzLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvYXRvbXMuYworKysgL2Rldi9udWxsCkBAIC0xLDUyMTkgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qCi0gKiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgU291cmNlIENvZGUgaXMgbGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBTZWUgZnVydGhlciBleHBsYW5hdGlvbiBhdHRhY2hlZCBpbiBMaWNlbnNlIFN0YXRlbWVudCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGZpbGUKLSAqIExJQ0VOU0UpLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSAiYXRvbXMuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oPgotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLS8qCi0gKiBDcmVhdGVzIGEgbmV3IEF0b21zQ29udGV4dCBmb3IgdGhlIGdpdmVuIGZsYXZvci4KLSAqLwotQXRvbXNDb250ZXh0ICoKLWF0b21zX2NvbnRleHRfbmV3IChBdG9tc1RyZWVGbGF2b3IgZmxhdm9yKQotewotICBBdG9tc0NvbnRleHQgKmNvbnRleHQgPSBnX25ldzAgKEF0b21zQ29udGV4dCwgMSk7Ci0gIGNvbnRleHQtPmZsYXZvciA9IGZsYXZvcjsKLSAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLS8qCi0gKiBGcmVlcyBhbiBBdG9tc0NvbnRleHQgYW5kIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0Ci0gKi8KLXZvaWQKLWF0b21zX2NvbnRleHRfZnJlZSAoQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgZ19mcmVlIChjb250ZXh0KTsKLX0KLQotLyogLS0gY3JlYXRpb24sIGluaXRpYWxpemF0aW9uLCBjbGVhciBhbmQgZnJlZSBmdW5jdGlvbnMgLS0gKi8KLQotI2RlZmluZSBTRUNTX1BFUl9EQVkgKDI0ICogNjAgKiA2MCkKLSNkZWZpbmUgTEVBUF9ZRUFSU19GUk9NXzE5MDRfVE9fMTk3MCAxNwotCi1zdGF0aWMgZ3VpbnQ2NAotZ2V0X2N1cnJlbnRfcXRfdGltZSAodm9pZCkKLXsKLSAgR1RpbWVWYWwgdGltZXZhbDsKLQotICBnX2dldF9jdXJyZW50X3RpbWUgKCZ0aW1ldmFsKTsKLSAgLyogRklYTUUgdGhpcyBzaG91bGQgdXNlIFVUQyBjb29yZGluYXRlZCB0aW1lICovCi0gIHJldHVybiB0aW1ldmFsLnR2X3NlYyArICgoKDE5NzAgLSAxOTA0KSAqIChndWludDY0KSAzNjUpICsKLSAgICAgIExFQVBfWUVBUlNfRlJPTV8xOTA0X1RPXzE5NzApICogU0VDU19QRVJfREFZOwotfQotCi1zdGF0aWMgdm9pZAotY29tbW9uX3RpbWVfaW5mb19pbml0IChUaW1lSW5mbyAqIHRpKQotewotICB0aS0+Y3JlYXRpb25fdGltZSA9IHRpLT5tb2RpZmljYXRpb25fdGltZSA9IGdldF9jdXJyZW50X3F0X3RpbWUgKCk7Ci0gIHRpLT50aW1lc2NhbGUgPSAwOwotICB0aS0+ZHVyYXRpb24gPSAwOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9oZWFkZXJfc2V0IChBdG9tICogaGVhZGVyLCBndWludDMyIGZvdXJjYywgZ2ludDMyIHNpemUsIGdpbnQ2NCBleHRfc2l6ZSkKLXsKLSAgaGVhZGVyLT50eXBlID0gZm91cmNjOwotICBoZWFkZXItPnNpemUgPSBzaXplOwotICBoZWFkZXItPmV4dGVuZGVkX3NpemUgPSBleHRfc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fY2xlYXIgKEF0b20gKiBhdG9tKQotewotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9mdWxsX2luaXQgKEF0b21GdWxsICogZnVsbCwgZ3VpbnQzMiBmb3VyY2MsIGdpbnQzMiBzaXplLCBnaW50NjQgZXh0X3NpemUsCi0gICAgZ3VpbnQ4IHZlcnNpb24sIGd1aW50OCBmbGFnc1szXSkKLXsKLSAgYXRvbV9oZWFkZXJfc2V0ICgmKGZ1bGwtPmhlYWRlciksIGZvdXJjYywgc2l6ZSwgZXh0X3NpemUpOwotICBmdWxsLT52ZXJzaW9uID0gdmVyc2lvbjsKLSAgZnVsbC0+ZmxhZ3NbMF0gPSBmbGFnc1swXTsKLSAgZnVsbC0+ZmxhZ3NbMV0gPSBmbGFnc1sxXTsKLSAgZnVsbC0+ZmxhZ3NbMl0gPSBmbGFnc1syXTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZnVsbF9jbGVhciAoQXRvbUZ1bGwgKiBmdWxsKQotewotICBhdG9tX2NsZWFyICgmZnVsbC0+aGVhZGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZnVsbF9mcmVlIChBdG9tRnVsbCAqIGZ1bGwpCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoZnVsbCk7Ci0gIGdfZnJlZSAoZnVsbCk7Ci19Ci0KLXN0YXRpYyBndWludDMyCi1hdG9tX2Z1bGxfZ2V0X2ZsYWdzX2FzX3VpbnQgKEF0b21GdWxsICogZnVsbCkKLXsKLSAgcmV0dXJuIGZ1bGwtPmZsYWdzWzBdIDw8IDE2IHwgZnVsbC0+ZmxhZ3NbMV0gPDwgOCB8IGZ1bGwtPmZsYWdzWzJdOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9mdWxsX3NldF9mbGFnc19hc191aW50IChBdG9tRnVsbCAqIGZ1bGwsIGd1aW50MzIgZmxhZ3NfYXNfdWludCkKLXsKLSAgZnVsbC0+ZmxhZ3NbMl0gPSBmbGFnc19hc191aW50ICYgMHhGRjsKLSAgZnVsbC0+ZmxhZ3NbMV0gPSAoZmxhZ3NfYXNfdWludCAmIDB4RkYwMCkgPj4gODsKLSAgZnVsbC0+ZmxhZ3NbMF0gPSAoZmxhZ3NfYXNfdWludCAmIDB4RkYwMDAwKSA+PiAxNjsKLX0KLQotc3RhdGljIEF0b21JbmZvICoKLWJ1aWxkX2F0b21faW5mb193cmFwcGVyIChBdG9tICogYXRvbSwgZ3BvaW50ZXIgY29weV9mdW5jLCBncG9pbnRlciBmcmVlX2Z1bmMpCi17Ci0gIEF0b21JbmZvICppbmZvID0gTlVMTDsKLQotICBpZiAoYXRvbSkgewotICAgIGluZm8gPSBnX25ldzAgKEF0b21JbmZvLCAxKTsKLQotICAgIGluZm8tPmF0b20gPSBhdG9tOwotICAgIGluZm8tPmNvcHlfZGF0YV9mdW5jID0gY29weV9mdW5jOwotICAgIGluZm8tPmZyZWVfZnVuYyA9IGZyZWVfZnVuYzsKLSAgfQotCi0gIHJldHVybiBpbmZvOwotfQotCi1zdGF0aWMgR0xpc3QgKgotYXRvbV9pbmZvX2xpc3RfcHJlcGVuZF9hdG9tIChHTGlzdCAqIGFpLCBBdG9tICogYXRvbSwKLSAgICBBdG9tQ29weURhdGFGdW5jIGNvcHlfZnVuYywgQXRvbUZyZWVGdW5jIGZyZWVfZnVuYykKLXsKLSAgaWYgKGF0b20pCi0gICAgcmV0dXJuIGdfbGlzdF9wcmVwZW5kIChhaSwKLSAgICAgICAgYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKGF0b20sIGNvcHlfZnVuYywgZnJlZV9mdW5jKSk7Ci0gIGVsc2UKLSAgICByZXR1cm4gYWk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2luZm9fbGlzdF9mcmVlIChHTGlzdCAqIGFpKQotewotICB3aGlsZSAoYWkpIHsKLSAgICBBdG9tSW5mbyAqaW5mbyA9IChBdG9tSW5mbyAqKSBhaS0+ZGF0YTsKLQotICAgIGluZm8tPmZyZWVfZnVuYyAoaW5mby0+YXRvbSk7Ci0gICAgZ19mcmVlIChpbmZvKTsKLSAgICBhaSA9IGdfbGlzdF9kZWxldGVfbGluayAoYWksIGFpKTsKLSAgfQotfQotCi1zdGF0aWMgQXRvbURhdGEgKgotYXRvbV9kYXRhX25ldyAoZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIEF0b21EYXRhICpkYXRhID0gZ19uZXcwIChBdG9tRGF0YSwgMSk7Ci0KLSAgYXRvbV9oZWFkZXJfc2V0ICgmZGF0YS0+aGVhZGVyLCBmb3VyY2MsIDAsIDApOwotICByZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZGF0YV9hbGxvY19tZW0gKEF0b21EYXRhICogZGF0YSwgZ3VpbnQzMiBzaXplKQotewotICBnX2ZyZWUgKGRhdGEtPmRhdGEpOwotICBkYXRhLT5kYXRhID0gZ19uZXcwIChndWludDgsIHNpemUpOwotICBkYXRhLT5kYXRhbGVuID0gc2l6ZTsKLX0KLQotc3RhdGljIEF0b21EYXRhICoKLWF0b21fZGF0YV9uZXdfZnJvbV9kYXRhIChndWludDMyIGZvdXJjYywgY29uc3QgZ3VpbnQ4ICogbWVtLCBnc2l6ZSBzaXplKQotewotICBBdG9tRGF0YSAqZGF0YSA9IGF0b21fZGF0YV9uZXcgKGZvdXJjYyk7Ci0KLSAgYXRvbV9kYXRhX2FsbG9jX21lbSAoZGF0YSwgc2l6ZSk7Ci0gIG1lbWNweSAoZGF0YS0+ZGF0YSwgbWVtLCBzaXplKTsKLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyBBdG9tRGF0YSAqCi1hdG9tX2RhdGFfbmV3X2Zyb21fZ3N0X2J1ZmZlciAoZ3VpbnQzMiBmb3VyY2MsIGNvbnN0IEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgQXRvbURhdGEgKmRhdGEgPSBhdG9tX2RhdGFfbmV3IChmb3VyY2MpOwotICBnc2l6ZSBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKEdzdEJ1ZmZlciAqKSBidWYpOwotCi0gIGF0b21fZGF0YV9hbGxvY19tZW0gKGRhdGEsIHNpemUpOwotICBnc3RfYnVmZmVyX2V4dHJhY3QgKChHc3RCdWZmZXIgKikgYnVmLCAwLCBkYXRhLT5kYXRhLCBzaXplKTsKLSAgcmV0dXJuIGRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2RhdGFfZnJlZSAoQXRvbURhdGEgKiBkYXRhKQotewotICBhdG9tX2NsZWFyICgmZGF0YS0+aGVhZGVyKTsKLSAgZ19mcmVlIChkYXRhLT5kYXRhKTsKLSAgZ19mcmVlIChkYXRhKTsKLX0KLQotc3RhdGljIEF0b21VVUlEICoKLWF0b21fdXVpZF9uZXcgKHZvaWQpCi17Ci0gIEF0b21VVUlEICp1dWlkID0gZ19uZXcwIChBdG9tVVVJRCwgMSk7Ci0KLSAgYXRvbV9oZWFkZXJfc2V0ICgmdXVpZC0+aGVhZGVyLCBGT1VSQ0NfdXVpZCwgMCwgMCk7Ci0gIHJldHVybiB1dWlkOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV91dWlkX2ZyZWUgKEF0b21VVUlEICogZGF0YSkKLXsKLSAgYXRvbV9jbGVhciAoJmRhdGEtPmhlYWRlcik7Ci0gIGdfZnJlZSAoZGF0YS0+ZGF0YSk7Ci0gIGdfZnJlZSAoZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2Z0eXBfaW5pdCAoQXRvbUZUWVAgKiBmdHlwLCBndWludDMyIG1ham9yLCBndWludDMyIHZlcnNpb24sIEdMaXN0ICogYnJhbmRzKQotewotICBnaW50IGluZGV4OwotICBHTGlzdCAqaXQgPSBOVUxMOwotCi0gIGF0b21faGVhZGVyX3NldCAoJmZ0eXAtPmhlYWRlciwgRk9VUkNDX2Z0eXAsIDE2LCAwKTsKLSAgZnR5cC0+bWFqb3JfYnJhbmQgPSBtYWpvcjsKLSAgZnR5cC0+dmVyc2lvbiA9IHZlcnNpb247Ci0KLSAgLyogYWx3YXlzIGluY2x1ZGUgbWFqb3IgYnJhbmQgYXMgY29tcGF0aWJsZSBicmFuZCAqLwotICBmdHlwLT5jb21wYXRpYmxlX2JyYW5kc19zaXplID0gZ19saXN0X2xlbmd0aCAoYnJhbmRzKSArIDE7Ci0gIGZ0eXAtPmNvbXBhdGlibGVfYnJhbmRzID0gZ19uZXcgKGd1aW50MzIsIGZ0eXAtPmNvbXBhdGlibGVfYnJhbmRzX3NpemUpOwotCi0gIGZ0eXAtPmNvbXBhdGlibGVfYnJhbmRzWzBdID0gbWFqb3I7Ci0gIGluZGV4ID0gMTsKLSAgZm9yIChpdCA9IGJyYW5kczsgaXQgIT0gTlVMTDsgaXQgPSBnX2xpc3RfbmV4dCAoaXQpKSB7Ci0gICAgZnR5cC0+Y29tcGF0aWJsZV9icmFuZHNbaW5kZXgrK10gPSBHUE9JTlRFUl9UT19VSU5UIChpdC0+ZGF0YSk7Ci0gIH0KLX0KLQotQXRvbUZUWVAgKgotYXRvbV9mdHlwX25ldyAoQXRvbXNDb250ZXh0ICogY29udGV4dCwgZ3VpbnQzMiBtYWpvciwgZ3VpbnQzMiB2ZXJzaW9uLAotICAgIEdMaXN0ICogYnJhbmRzKQotewotICBBdG9tRlRZUCAqZnR5cCA9IGdfbmV3MCAoQXRvbUZUWVAsIDEpOwotCi0gIGF0b21fZnR5cF9pbml0IChmdHlwLCBtYWpvciwgdmVyc2lvbiwgYnJhbmRzKTsKLSAgcmV0dXJuIGZ0eXA7Ci19Ci0KLXZvaWQKLWF0b21fZnR5cF9mcmVlIChBdG9tRlRZUCAqIGZ0eXApCi17Ci0gIGF0b21fY2xlYXIgKCZmdHlwLT5oZWFkZXIpOwotICBnX2ZyZWUgKGZ0eXAtPmNvbXBhdGlibGVfYnJhbmRzKTsKLSAgZnR5cC0+Y29tcGF0aWJsZV9icmFuZHMgPSBOVUxMOwotICBnX2ZyZWUgKGZ0eXApOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9lc2RzX2luaXQgKEF0b21FU0RTICogZXNkcykKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZlc2RzLT5oZWFkZXIsIEZPVVJDQ19lc2RzLCAwLCAwLCAwLCBmbGFncyk7Ci0gIGRlc2NfZXNfaW5pdCAoJmVzZHMtPmVzKTsKLX0KLQotc3RhdGljIEF0b21FU0RTICoKLWF0b21fZXNkc19uZXcgKHZvaWQpCi17Ci0gIEF0b21FU0RTICplc2RzID0gZ19uZXcwIChBdG9tRVNEUywgMSk7Ci0KLSAgYXRvbV9lc2RzX2luaXQgKGVzZHMpOwotICByZXR1cm4gZXNkczsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZXNkc19mcmVlIChBdG9tRVNEUyAqIGVzZHMpCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoJmVzZHMtPmhlYWRlcik7Ci0gIGRlc2NfZXNfZGVzY3JpcHRvcl9jbGVhciAoJmVzZHMtPmVzKTsKLSAgZ19mcmVlIChlc2RzKTsKLX0KLQotc3RhdGljIEF0b21GUk1BICoKLWF0b21fZnJtYV9uZXcgKHZvaWQpCi17Ci0gIEF0b21GUk1BICpmcm1hID0gZ19uZXcwIChBdG9tRlJNQSwgMSk7Ci0KLSAgYXRvbV9oZWFkZXJfc2V0ICgmZnJtYS0+aGVhZGVyLCBGT1VSQ0NfZnJtYSwgMCwgMCk7Ci0gIHJldHVybiBmcm1hOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9mcm1hX2ZyZWUgKEF0b21GUk1BICogZnJtYSkKLXsKLSAgYXRvbV9jbGVhciAoJmZybWEtPmhlYWRlcik7Ci0gIGdfZnJlZSAoZnJtYSk7Ci19Ci0KLXN0YXRpYyBBdG9tV0FWRSAqCi1hdG9tX3dhdmVfbmV3ICh2b2lkKQotewotICBBdG9tV0FWRSAqd2F2ZSA9IGdfbmV3MCAoQXRvbVdBVkUsIDEpOwotCi0gIGF0b21faGVhZGVyX3NldCAoJndhdmUtPmhlYWRlciwgRk9VUkNDX3dhdmUsIDAsIDApOwotICByZXR1cm4gd2F2ZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fd2F2ZV9mcmVlIChBdG9tV0FWRSAqIHdhdmUpCi17Ci0gIGF0b21fY2xlYXIgKCZ3YXZlLT5oZWFkZXIpOwotICBhdG9tX2luZm9fbGlzdF9mcmVlICh3YXZlLT5leHRlbnNpb25fYXRvbXMpOwotICBnX2ZyZWUgKHdhdmUpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9lbHN0X2luaXQgKEF0b21FTFNUICogZWxzdCkKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0gIGF0b21fZnVsbF9pbml0ICgmZWxzdC0+aGVhZGVyLCBGT1VSQ0NfZWxzdCwgMCwgMCwgMCwgZmxhZ3MpOwotICBlbHN0LT5lbnRyaWVzID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZWxzdF9jbGVhciAoQXRvbUVMU1QgKiBlbHN0KQotewotICBHU0xpc3QgKndhbGtlcjsKLQotICBhdG9tX2Z1bGxfY2xlYXIgKCZlbHN0LT5oZWFkZXIpOwotICB3YWxrZXIgPSBlbHN0LT5lbnRyaWVzOwotICB3aGlsZSAod2Fsa2VyKSB7Ci0gICAgZ19mcmVlICgoRWRpdExpc3RFbnRyeSAqKSB3YWxrZXItPmRhdGEpOwotICAgIHdhbGtlciA9IGdfc2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotICBnX3NsaXN0X2ZyZWUgKGVsc3QtPmVudHJpZXMpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9lZHRzX2luaXQgKEF0b21FRFRTICogZWR0cykKLXsKLSAgYXRvbV9oZWFkZXJfc2V0ICgmZWR0cy0+aGVhZGVyLCBGT1VSQ0NfZWR0cywgMCwgMCk7Ci0gIGF0b21fZWxzdF9pbml0ICgmZWR0cy0+ZWxzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2VkdHNfY2xlYXIgKEF0b21FRFRTICogZWR0cykKLXsKLSAgYXRvbV9jbGVhciAoJmVkdHMtPmhlYWRlcik7Ci0gIGF0b21fZWxzdF9jbGVhciAoJmVkdHMtPmVsc3QpOwotfQotCi1zdGF0aWMgQXRvbUVEVFMgKgotYXRvbV9lZHRzX25ldyAodm9pZCkKLXsKLSAgQXRvbUVEVFMgKmVkdHMgPSBnX25ldzAgKEF0b21FRFRTLCAxKTsKLSAgYXRvbV9lZHRzX2luaXQgKGVkdHMpOwotICByZXR1cm4gZWR0czsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZWR0c19mcmVlIChBdG9tRURUUyAqIGVkdHMpCi17Ci0gIGF0b21fZWR0c19jbGVhciAoZWR0cyk7Ci0gIGdfZnJlZSAoZWR0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RjbWlfaW5pdCAoQXRvbVRDTUkgKiB0Y21pKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJnRjbWktPmhlYWRlciwgRk9VUkNDX3RjbWksIDAsIDAsIDAsIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdGNtaV9jbGVhciAoQXRvbVRDTUkgKiB0Y21pKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZ0Y21pLT5oZWFkZXIpOwotICB0Y21pLT50ZXh0X2ZvbnQgPSAwOwotICB0Y21pLT50ZXh0X2ZhY2UgPSAwOwotICB0Y21pLT50ZXh0X3NpemUgPSAwOwotICB0Y21pLT50ZXh0X2NvbG9yWzBdID0gMDsKLSAgdGNtaS0+dGV4dF9jb2xvclsxXSA9IDA7Ci0gIHRjbWktPnRleHRfY29sb3JbMl0gPSAwOwotICB0Y21pLT5iZ19jb2xvclswXSA9IDA7Ci0gIHRjbWktPmJnX2NvbG9yWzFdID0gMDsKLSAgdGNtaS0+YmdfY29sb3JbMl0gPSAwOwotICBnX2ZyZWUgKHRjbWktPmZvbnRfbmFtZSk7Ci0gIHRjbWktPmZvbnRfbmFtZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RtY2RfaW5pdCAoQXRvbVRNQ0QgKiB0bWNkKQotewotICBhdG9tX2hlYWRlcl9zZXQgKCZ0bWNkLT5oZWFkZXIsIEZPVVJDQ190bWNkLCAwLCAwKTsKLSAgYXRvbV90Y21pX2luaXQgKCZ0bWNkLT50Y21pKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdG1jZF9jbGVhciAoQXRvbVRNQ0QgKiB0bWNkKQotewotICBhdG9tX2NsZWFyICgmdG1jZC0+aGVhZGVyKTsKLSAgYXRvbV90Y21pX2NsZWFyICgmdG1jZC0+dGNtaSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2dtaW5faW5pdCAoQXRvbUdNSU4gKiBnbWluKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJmdtaW4tPmhlYWRlciwgRk9VUkNDX2dtaW4sIDAsIDAsIDAsIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZ21pbl9jbGVhciAoQXRvbUdNSU4gKiBnbWluKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZnbWluLT5oZWFkZXIpOwotICBnbWluLT5ncmFwaGljc19tb2RlID0gMDsKLSAgZ21pbi0+b3Bjb2xvclswXSA9IDA7Ci0gIGdtaW4tPm9wY29sb3JbMV0gPSAwOwotICBnbWluLT5vcGNvbG9yWzJdID0gMDsKLSAgZ21pbi0+YmFsYW5jZSA9IDA7Ci0gIGdtaW4tPnJlc2VydmVkID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZ21oZF9pbml0IChBdG9tR01IRCAqIGdtaGQpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJmdtaGQtPmhlYWRlciwgRk9VUkNDX2dtaGQsIDAsIDApOwotICBhdG9tX2dtaW5faW5pdCAoJmdtaGQtPmdtaW4pOwotICBhdG9tX3RtY2RfaW5pdCAoJmdtaGQtPnRtY2QpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9nbWhkX2NsZWFyIChBdG9tR01IRCAqIGdtaGQpCi17Ci0gIGF0b21fY2xlYXIgKCZnbWhkLT5oZWFkZXIpOwotICBhdG9tX2dtaW5fY2xlYXIgKCZnbWhkLT5nbWluKTsKLSAgYXRvbV90bWNkX2NsZWFyICgmZ21oZC0+dG1jZCk7Ci19Ci0KLXN0YXRpYyBBdG9tR01IRCAqCi1hdG9tX2dtaGRfbmV3ICh2b2lkKQotewotICBBdG9tR01IRCAqZ21oZCA9IGdfbmV3MCAoQXRvbUdNSEQsIDEpOwotICBhdG9tX2dtaGRfaW5pdCAoZ21oZCk7Ci0gIHJldHVybiBnbWhkOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9nbWhkX2ZyZWUgKEF0b21HTUhEICogZ21oZCkKLXsKLSAgYXRvbV9nbWhkX2NsZWFyIChnbWhkKTsKLSAgZ19mcmVlIChnbWhkKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc2FtcGxlX2VudHJ5X2luaXQgKFNhbXBsZVRhYmxlRW50cnkgKiBzZSwgZ3VpbnQzMiB0eXBlKQotewotICBhdG9tX2hlYWRlcl9zZXQgKCZzZS0+aGVhZGVyLCB0eXBlLCAwLCAwKTsKLQotICBtZW1zZXQgKHNlLT5yZXNlcnZlZCwgMCwgc2l6ZW9mIChndWludDgpICogNik7Ci0gIHNlLT5kYXRhX3JlZmVyZW5jZV9pbmRleCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3NhbXBsZV9lbnRyeV9mcmVlIChTYW1wbGVUYWJsZUVudHJ5ICogc2UpCi17Ci0gIGF0b21fY2xlYXIgKCZzZS0+aGVhZGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLXNhbXBsZV9lbnRyeV9tcDRhX2luaXQgKFNhbXBsZVRhYmxlRW50cnlNUDRBICogbXA0YSkKLXsKLSAgYXRvbV9zYW1wbGVfZW50cnlfaW5pdCAoJm1wNGEtPnNlLCBGT1VSQ0NfbXA0YSk7Ci0KLSAgbXA0YS0+dmVyc2lvbiA9IDA7Ci0gIG1wNGEtPnJldmlzaW9uX2xldmVsID0gMDsKLSAgbXA0YS0+dmVuZG9yID0gMDsKLSAgbXA0YS0+Y2hhbm5lbHMgPSAyOwotICBtcDRhLT5zYW1wbGVfc2l6ZSA9IDE2OwotICBtcDRhLT5jb21wcmVzc2lvbl9pZCA9IDA7Ci0gIG1wNGEtPnBhY2tldF9zaXplID0gMDsKLSAgbXA0YS0+c2FtcGxlX3JhdGUgPSAwOwotICAvKiBmb2xsb3dpbmcgb25seSB1c2VkIGlmIHZlcnNpb24gaXMgMSAqLwotICBtcDRhLT5zYW1wbGVzX3Blcl9wYWNrZXQgPSAwOwotICBtcDRhLT5ieXRlc19wZXJfcGFja2V0ID0gMDsKLSAgbXA0YS0+Ynl0ZXNfcGVyX2ZyYW1lID0gMDsKLSAgbXA0YS0+Ynl0ZXNfcGVyX3NhbXBsZSA9IDA7Ci0KLSAgbXA0YS0+ZXh0ZW5zaW9uX2F0b21zID0gTlVMTDsKLX0KLQotc3RhdGljIFNhbXBsZVRhYmxlRW50cnlNUDRBICoKLXNhbXBsZV9lbnRyeV9tcDRhX25ldyAodm9pZCkKLXsKLSAgU2FtcGxlVGFibGVFbnRyeU1QNEEgKm1wNGEgPSBnX25ldzAgKFNhbXBsZVRhYmxlRW50cnlNUDRBLCAxKTsKLQotICBzYW1wbGVfZW50cnlfbXA0YV9pbml0IChtcDRhKTsKLSAgcmV0dXJuIG1wNGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zYW1wbGVfZW50cnlfbXA0YV9mcmVlIChTYW1wbGVUYWJsZUVudHJ5TVA0QSAqIG1wNGEpCi17Ci0gIGF0b21fc2FtcGxlX2VudHJ5X2ZyZWUgKCZtcDRhLT5zZSk7Ci0gIGF0b21faW5mb19saXN0X2ZyZWUgKG1wNGEtPmV4dGVuc2lvbl9hdG9tcyk7Ci0gIGdfZnJlZSAobXA0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zYW1wbGVfZW50cnlfdG1jZF9pbml0IChTYW1wbGVUYWJsZUVudHJ5VE1DRCAqIHRtY2QpCi17Ci0gIGF0b21fc2FtcGxlX2VudHJ5X2luaXQgKCZ0bWNkLT5zZSwgRk9VUkNDX3RtY2QpOwotCi0gIHRtY2QtPnRjX2ZsYWdzID0gMDsKLSAgdG1jZC0+dGltZXNjYWxlID0gMDsKLSAgdG1jZC0+ZnJhbWVfZHVyYXRpb24gPSAwOwotICB0bWNkLT5uX2ZyYW1lcyA9IDA7Ci0KLSAgdG1jZC0+bmFtZS5sYW5ndWFnZV9jb2RlID0gMDsKLSAgZ19mcmVlICh0bWNkLT5uYW1lLm5hbWUpOwotICB0bWNkLT5uYW1lLm5hbWUgPSBOVUxMOwotfQotCi1zdGF0aWMgU2FtcGxlVGFibGVFbnRyeVRNQ0QgKgotc2FtcGxlX2VudHJ5X3RtY2RfbmV3ICh2b2lkKQotewotICBTYW1wbGVUYWJsZUVudHJ5VE1DRCAqdG1jZCA9IGdfbmV3MCAoU2FtcGxlVGFibGVFbnRyeVRNQ0QsIDEpOwotCi0gIHNhbXBsZV9lbnRyeV90bWNkX2luaXQgKHRtY2QpOwotICByZXR1cm4gdG1jZDsKLX0KLQotc3RhdGljIHZvaWQKLXNhbXBsZV9lbnRyeV9tcDR2X2luaXQgKFNhbXBsZVRhYmxlRW50cnlNUDRWICogbXA0diwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9zYW1wbGVfZW50cnlfaW5pdCAoJm1wNHYtPnNlLCBGT1VSQ0NfbXA0dik7Ci0KLSAgbXA0di0+dmVyc2lvbiA9IDA7Ci0gIG1wNHYtPnJldmlzaW9uX2xldmVsID0gMDsKLSAgbXA0di0+dmVuZG9yID0gMDsKLQotICBtcDR2LT50ZW1wb3JhbF9xdWFsaXR5ID0gMDsKLSAgbXA0di0+c3BhdGlhbF9xdWFsaXR5ID0gMDsKLQotICAvKiBxdCBhbmQgSVNPIGJhc2UgbWVkaWEgZG8gbm90IGNvbnRyYWRpY3QsIGFuZCBleGFtcGxlcyBhZ3JlZSAqLwotICBtcDR2LT5ob3Jpem9udGFsX3Jlc29sdXRpb24gPSAweDAwNDgwMDAwOwotICBtcDR2LT52ZXJ0aWNhbF9yZXNvbHV0aW9uID0gMHgwMDQ4MDAwMDsKLQotICBtcDR2LT5kYXRhc2l6ZSA9IDA7Ci0gIG1wNHYtPmZyYW1lX2NvdW50ID0gMTsKLQotICBtZW1zZXQgKG1wNHYtPmNvbXByZXNzb3IsIDAsIHNpemVvZiAoZ3VpbnQ4KSAqIDMyKTsKLQotICBtcDR2LT5kZXB0aCA9IDA7Ci0gIG1wNHYtPmNvbG9yX3RhYmxlX2lkID0gMDsKLQotICBtcDR2LT5leHRlbnNpb25fYXRvbXMgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotc2FtcGxlX2VudHJ5X21wNHZfZnJlZSAoU2FtcGxlVGFibGVFbnRyeU1QNFYgKiBtcDR2KQotewotICBhdG9tX3NhbXBsZV9lbnRyeV9mcmVlICgmbXA0di0+c2UpOwotICBhdG9tX2luZm9fbGlzdF9mcmVlIChtcDR2LT5leHRlbnNpb25fYXRvbXMpOwotICBnX2ZyZWUgKG1wNHYpOwotfQotCi1zdGF0aWMgU2FtcGxlVGFibGVFbnRyeU1QNFYgKgotc2FtcGxlX2VudHJ5X21wNHZfbmV3IChBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBTYW1wbGVUYWJsZUVudHJ5TVA0ViAqbXA0diA9IGdfbmV3MCAoU2FtcGxlVGFibGVFbnRyeU1QNFYsIDEpOwotCi0gIHNhbXBsZV9lbnRyeV9tcDR2X2luaXQgKG1wNHYsIGNvbnRleHQpOwotICByZXR1cm4gbXA0djsKLX0KLQotc3RhdGljIHZvaWQKLXNhbXBsZV9lbnRyeV90eDNnX2luaXQgKFNhbXBsZVRhYmxlRW50cnlUWDNHICogdHgzZykKLXsKLSAgYXRvbV9zYW1wbGVfZW50cnlfaW5pdCAoJnR4M2ctPnNlLCBGT1VSQ0NfdHgzZyk7Ci0KLSAgdHgzZy0+ZGlzcGxheV9mbGFncyA9IDA7Ci0gIHR4M2ctPmZvbnRfaWQgPSAxOyAgICAgICAgICAgIC8qIG11c3QgYmUgMSBhcyB0aGVyZSBpcyBhIHNpbmdsZSBmb250ICovCi0gIHR4M2ctPmZvbnRfZmFjZSA9IDA7Ci0gIHR4M2ctPmZvcmVncm91bmRfY29sb3JfcmdiYSA9IDB4RkZGRkZGRkY7ICAgICAvKiB3aGl0ZSwgb3BhcXVlICovCi0KLSAgLyogY2FuJ3Qgc2V0IHRoaXMgbm93ICovCi0gIHR4M2ctPmRlZmF1bHRfdGV4dF9ib3ggPSAwOwotICB0eDNnLT5mb250X3NpemUgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotc2FtcGxlX2VudHJ5X3R4M2dfZnJlZSAoU2FtcGxlVGFibGVFbnRyeVRYM0cgKiB0eDNnKQotewotICBhdG9tX3NhbXBsZV9lbnRyeV9mcmVlICgmdHgzZy0+c2UpOwotICBnX2ZyZWUgKHR4M2cpOwotfQotCi1zdGF0aWMgU2FtcGxlVGFibGVFbnRyeVRYM0cgKgotc2FtcGxlX2VudHJ5X3R4M2dfbmV3ICh2b2lkKQotewotICBTYW1wbGVUYWJsZUVudHJ5VFgzRyAqdHgzZyA9IGdfbmV3MCAoU2FtcGxlVGFibGVFbnRyeVRYM0csIDEpOwotCi0gIHNhbXBsZV9lbnRyeV90eDNnX2luaXQgKHR4M2cpOwotICByZXR1cm4gdHgzZzsKLX0KLQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHNkX2luaXQgKEF0b21TVFNEICogc3RzZCkKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZzdHNkLT5oZWFkZXIsIEZPVVJDQ19zdHNkLCAwLCAwLCAwLCBmbGFncyk7Ci0gIHN0c2QtPmVudHJpZXMgPSBOVUxMOwotICBzdHNkLT5uX2VudHJpZXMgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHNkX3JlbW92ZV9lbnRyaWVzIChBdG9tU1RTRCAqIHN0c2QpCi17Ci0gIEdMaXN0ICp3YWxrZXI7Ci0KLSAgd2Fsa2VyID0gc3RzZC0+ZW50cmllczsKLSAgd2hpbGUgKHdhbGtlcikgewotICAgIEdMaXN0ICphdXggPSB3YWxrZXI7Ci0gICAgU2FtcGxlVGFibGVFbnRyeSAqc2UgPSAoU2FtcGxlVGFibGVFbnRyeSAqKSBhdXgtPmRhdGE7Ci0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgICBzdHNkLT5lbnRyaWVzID0gZ19saXN0X3JlbW92ZV9saW5rIChzdHNkLT5lbnRyaWVzLCBhdXgpOwotCi0gICAgc3dpdGNoIChzZS0+a2luZCkgewotICAgICAgY2FzZSBBVURJTzoKLSAgICAgICAgc2FtcGxlX2VudHJ5X21wNGFfZnJlZSAoKFNhbXBsZVRhYmxlRW50cnlNUDRBICopIHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFZJREVPOgotICAgICAgICBzYW1wbGVfZW50cnlfbXA0dl9mcmVlICgoU2FtcGxlVGFibGVFbnRyeU1QNFYgKikgc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU1VCVElUTEU6Ci0gICAgICAgIHNhbXBsZV9lbnRyeV90eDNnX2ZyZWUgKChTYW1wbGVUYWJsZUVudHJ5VFgzRyAqKSBzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLyogYmVzdCBwb3NzaWJsZSBjbGVhbnVwICovCi0gICAgICAgIGF0b21fc2FtcGxlX2VudHJ5X2ZyZWUgKHNlKTsKLSAgICB9Ci0gICAgZ19saXN0X2ZyZWUgKGF1eCk7Ci0gIH0KLSAgc3RzZC0+bl9lbnRyaWVzID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc3RzZF9jbGVhciAoQXRvbVNUU0QgKiBzdHNkKQotewotICBhdG9tX3N0c2RfcmVtb3ZlX2VudHJpZXMgKHN0c2QpOwotICBhdG9tX2Z1bGxfY2xlYXIgKCZzdHNkLT5oZWFkZXIpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9jdHRzX2luaXQgKEF0b21DVFRTICogY3R0cykKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZjdHRzLT5oZWFkZXIsIEZPVVJDQ19jdHRzLCAwLCAwLCAwLCBmbGFncyk7Ci0gIGF0b21fYXJyYXlfaW5pdCAoJmN0dHMtPmVudHJpZXMsIDEyOCk7Ci0gIGN0dHMtPmRvX3B0cyA9IEZBTFNFOwotfQotCi1zdGF0aWMgQXRvbUNUVFMgKgotYXRvbV9jdHRzX25ldyAodm9pZCkKLXsKLSAgQXRvbUNUVFMgKmN0dHMgPSBnX25ldzAgKEF0b21DVFRTLCAxKTsKLQotICBhdG9tX2N0dHNfaW5pdCAoY3R0cyk7Ci0gIHJldHVybiBjdHRzOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9jdHRzX2ZyZWUgKEF0b21DVFRTICogY3R0cykKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmY3R0cy0+aGVhZGVyKTsKLSAgYXRvbV9hcnJheV9jbGVhciAoJmN0dHMtPmVudHJpZXMpOwotICBnX2ZyZWUgKGN0dHMpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHRzX2luaXQgKEF0b21TVFRTICogc3R0cykKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZzdHRzLT5oZWFkZXIsIEZPVVJDQ19zdHRzLCAwLCAwLCAwLCBmbGFncyk7Ci0gIGF0b21fYXJyYXlfaW5pdCAoJnN0dHMtPmVudHJpZXMsIDUxMik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3N0dHNfY2xlYXIgKEF0b21TVFRTICogc3R0cykKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmc3R0cy0+aGVhZGVyKTsKLSAgYXRvbV9hcnJheV9jbGVhciAoJnN0dHMtPmVudHJpZXMpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHN6X2luaXQgKEF0b21TVFNaICogc3RzeikKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZzdHN6LT5oZWFkZXIsIEZPVVJDQ19zdHN6LCAwLCAwLCAwLCBmbGFncyk7Ci0gIGF0b21fYXJyYXlfaW5pdCAoJnN0c3otPmVudHJpZXMsIDEwMjQpOwotICBzdHN6LT5zYW1wbGVfc2l6ZSA9IDA7Ci0gIHN0c3otPnRhYmxlX3NpemUgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHN6X2NsZWFyIChBdG9tU1RTWiAqIHN0c3opCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoJnN0c3otPmhlYWRlcik7Ci0gIGF0b21fYXJyYXlfY2xlYXIgKCZzdHN6LT5lbnRyaWVzKTsKLSAgc3Rzei0+dGFibGVfc2l6ZSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3N0c2NfaW5pdCAoQXRvbVNUU0MgKiBzdHNjKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJnN0c2MtPmhlYWRlciwgRk9VUkNDX3N0c2MsIDAsIDAsIDAsIGZsYWdzKTsKLSAgYXRvbV9hcnJheV9pbml0ICgmc3RzYy0+ZW50cmllcywgMTI4KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc3RzY19jbGVhciAoQXRvbVNUU0MgKiBzdHNjKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZzdHNjLT5oZWFkZXIpOwotICBhdG9tX2FycmF5X2NsZWFyICgmc3RzYy0+ZW50cmllcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2NvNjRfaW5pdCAoQXRvbVNUQ082NCAqIGNvNjQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmY282NC0+aGVhZGVyLCBGT1VSQ0Nfc3RjbywgMCwgMCwgMCwgZmxhZ3MpOwotICBhdG9tX2FycmF5X2luaXQgKCZjbzY0LT5lbnRyaWVzLCAyNTYpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdGNvNjRfY2xlYXIgKEF0b21TVENPNjQgKiBzdGNvNjQpCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoJnN0Y282NC0+aGVhZGVyKTsKLSAgYXRvbV9hcnJheV9jbGVhciAoJnN0Y282NC0+ZW50cmllcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3N0c3NfaW5pdCAoQXRvbVNUU1MgKiBzdHNzKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJnN0c3MtPmhlYWRlciwgRk9VUkNDX3N0c3MsIDAsIDAsIDAsIGZsYWdzKTsKLSAgYXRvbV9hcnJheV9pbml0ICgmc3Rzcy0+ZW50cmllcywgMTI4KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc3Rzc19jbGVhciAoQXRvbVNUU1MgKiBzdHNzKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZzdHNzLT5oZWFkZXIpOwotICBhdG9tX2FycmF5X2NsZWFyICgmc3Rzcy0+ZW50cmllcyk7Ci19Ci0KLXZvaWQKLWF0b21fc3RibF9pbml0IChBdG9tU1RCTCAqIHN0YmwpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJnN0YmwtPmhlYWRlciwgRk9VUkNDX3N0YmwsIDAsIDApOwotCi0gIGF0b21fc3R0c19pbml0ICgmc3RibC0+c3R0cyk7Ci0gIGF0b21fc3Rzc19pbml0ICgmc3RibC0+c3Rzcyk7Ci0gIGF0b21fc3RzZF9pbml0ICgmc3RibC0+c3RzZCk7Ci0gIGF0b21fc3Rzel9pbml0ICgmc3RibC0+c3Rzeik7Ci0gIGF0b21fc3RzY19pbml0ICgmc3RibC0+c3RzYyk7Ci0gIHN0YmwtPmN0dHMgPSBOVUxMOwotCi0gIGF0b21fY282NF9pbml0ICgmc3RibC0+c3RjbzY0KTsKLX0KLQotdm9pZAotYXRvbV9zdGJsX2NsZWFyIChBdG9tU1RCTCAqIHN0YmwpCi17Ci0gIGF0b21fY2xlYXIgKCZzdGJsLT5oZWFkZXIpOwotICBhdG9tX3N0c2RfY2xlYXIgKCZzdGJsLT5zdHNkKTsKLSAgYXRvbV9zdHRzX2NsZWFyICgmc3RibC0+c3R0cyk7Ci0gIGF0b21fc3Rzc19jbGVhciAoJnN0YmwtPnN0c3MpOwotICBhdG9tX3N0c2NfY2xlYXIgKCZzdGJsLT5zdHNjKTsKLSAgYXRvbV9zdHN6X2NsZWFyICgmc3RibC0+c3Rzeik7Ci0gIGlmIChzdGJsLT5jdHRzKSB7Ci0gICAgYXRvbV9jdHRzX2ZyZWUgKHN0YmwtPmN0dHMpOwotICB9Ci0gIGF0b21fc3RjbzY0X2NsZWFyICgmc3RibC0+c3RjbzY0KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdm1oZF9pbml0IChBdG9tVk1IRCAqIHZtaGQsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMSB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmdm1oZC0+aGVhZGVyLCBGT1VSQ0Nfdm1oZCwgMCwgMCwgMCwgZmxhZ3MpOwotICB2bWhkLT5ncmFwaGljc19tb2RlID0gMHgwOwotICBtZW1zZXQgKHZtaGQtPm9wY29sb3IsIDAsIHNpemVvZiAoZ3VpbnQxNikgKiAzKTsKLQotICBpZiAoY29udGV4dC0+Zmxhdm9yID09IEFUT01TX1RSRUVfRkxBVk9SX01PVikgewotICAgIHZtaGQtPmdyYXBoaWNzX21vZGUgPSAweDQwOwotICAgIHZtaGQtPm9wY29sb3JbMF0gPSAzMjc2ODsKLSAgICB2bWhkLT5vcGNvbG9yWzFdID0gMzI3Njg7Ci0gICAgdm1oZC0+b3Bjb2xvclsyXSA9IDMyNzY4OwotICB9Ci19Ci0KLXN0YXRpYyBBdG9tVk1IRCAqCi1hdG9tX3ZtaGRfbmV3IChBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBBdG9tVk1IRCAqdm1oZCA9IGdfbmV3MCAoQXRvbVZNSEQsIDEpOwotCi0gIGF0b21fdm1oZF9pbml0ICh2bWhkLCBjb250ZXh0KTsKLSAgcmV0dXJuIHZtaGQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3ZtaGRfZnJlZSAoQXRvbVZNSEQgKiB2bWhkKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZ2bWhkLT5oZWFkZXIpOwotICBnX2ZyZWUgKHZtaGQpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zbWhkX2luaXQgKEF0b21TTUhEICogc21oZCkKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZzbWhkLT5oZWFkZXIsIEZPVVJDQ19zbWhkLCAwLCAwLCAwLCBmbGFncyk7Ci0gIHNtaGQtPmJhbGFuY2UgPSAwOwotICBzbWhkLT5yZXNlcnZlZCA9IDA7Ci19Ci0KLXN0YXRpYyBBdG9tU01IRCAqCi1hdG9tX3NtaGRfbmV3ICh2b2lkKQotewotICBBdG9tU01IRCAqc21oZCA9IGdfbmV3MCAoQXRvbVNNSEQsIDEpOwotCi0gIGF0b21fc21oZF9pbml0IChzbWhkKTsKLSAgcmV0dXJuIHNtaGQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3NtaGRfZnJlZSAoQXRvbVNNSEQgKiBzbWhkKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZzbWhkLT5oZWFkZXIpOwotICBnX2ZyZWUgKHNtaGQpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9obWhkX2ZyZWUgKEF0b21ITUhEICogaG1oZCkKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmaG1oZC0+aGVhZGVyKTsKLSAgZ19mcmVlIChobWhkKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21faGRscl9pbml0IChBdG9tSERMUiAqIGhkbHIsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmaGRsci0+aGVhZGVyLCBGT1VSQ0NfaGRsciwgMCwgMCwgMCwgZmxhZ3MpOwotCi0gIGhkbHItPmNvbXBvbmVudF90eXBlID0gMDsKLSAgaGRsci0+aGFuZGxlcl90eXBlID0gMDsKLSAgaGRsci0+bWFudWZhY3R1cmVyID0gMDsKLSAgaGRsci0+ZmxhZ3MgPSAwOwotICBoZGxyLT5mbGFnc19tYXNrID0gMDsKLSAgaGRsci0+bmFtZSA9IGdfc3RyZHVwICgiIik7Ci0KLSAgLyogU3RvcmUgdGhlIGZsYXZvciB0byBrbm93IGhvdyB0byBzZXJpYWxpemUgdGhlICduYW1lJyBzdHJpbmcgKi8KLSAgaGRsci0+Zmxhdm9yID0gY29udGV4dC0+Zmxhdm9yOwotfQotCi1zdGF0aWMgQXRvbUhETFIgKgotYXRvbV9oZGxyX25ldyAoQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgQXRvbUhETFIgKmhkbHIgPSBnX25ldzAgKEF0b21IRExSLCAxKTsKLQotICBhdG9tX2hkbHJfaW5pdCAoaGRsciwgY29udGV4dCk7Ci0gIHJldHVybiBoZGxyOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9oZGxyX2NsZWFyIChBdG9tSERMUiAqIGhkbHIpCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoJmhkbHItPmhlYWRlcik7Ci0gIGlmIChoZGxyLT5uYW1lKSB7Ci0gICAgZ19mcmVlIChoZGxyLT5uYW1lKTsKLSAgICBoZGxyLT5uYW1lID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9oZGxyX2ZyZWUgKEF0b21IRExSICogaGRscikKLXsKLSAgYXRvbV9oZGxyX2NsZWFyIChoZGxyKTsKLSAgZ19mcmVlIChoZGxyKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdXJsX2luaXQgKEF0b21VUkwgKiB1cmwpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMSB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmdXJsLT5oZWFkZXIsIEZPVVJDQ191cmxfLCAwLCAwLCAwLCBmbGFncyk7Ci0gIHVybC0+bG9jYXRpb24gPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV91cmxfZnJlZSAoQXRvbVVSTCAqIHVybCkKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmdXJsLT5oZWFkZXIpOwotICBpZiAodXJsLT5sb2NhdGlvbikgewotICAgIGdfZnJlZSAodXJsLT5sb2NhdGlvbik7Ci0gICAgdXJsLT5sb2NhdGlvbiA9IE5VTEw7Ci0gIH0KLSAgZ19mcmVlICh1cmwpOwotfQotCi1zdGF0aWMgQXRvbVVSTCAqCi1hdG9tX3VybF9uZXcgKHZvaWQpCi17Ci0gIEF0b21VUkwgKnVybCA9IGdfbmV3MCAoQXRvbVVSTCwgMSk7Ci0KLSAgYXRvbV91cmxfaW5pdCAodXJsKTsKLSAgcmV0dXJuIHVybDsKLX0KLQotc3RhdGljIEF0b21GdWxsICoKLWF0b21fYWxpc19uZXcgKHZvaWQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMSB9OwotICBBdG9tRnVsbCAqYWxpcyA9IGdfbmV3MCAoQXRvbUZ1bGwsIDEpOwotCi0gIGF0b21fZnVsbF9pbml0IChhbGlzLCBGT1VSQ0NfYWxpcywgMCwgMCwgMCwgZmxhZ3MpOwotICByZXR1cm4gYWxpczsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZHJlZl9pbml0IChBdG9tRFJFRiAqIGRyZWYsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmZHJlZi0+aGVhZGVyLCBGT1VSQ0NfZHJlZiwgMCwgMCwgMCwgZmxhZ3MpOwotCi0gIC8qIGluIGVpdGhlciBjYXNlLCBhbGlzIG9yIHVybCBpbml0IGFycmFuZ2VzIHRvIHNldCBzZWxmLWNvbnRhaW5lZCBmbGFnICovCi0gIGlmIChjb250ZXh0LT5mbGF2b3IgPT0gQVRPTVNfVFJFRV9GTEFWT1JfTU9WKSB7Ci0gICAgLyogYWxpcyBkcmVmIGZvciBxdCAqLwotICAgIEF0b21GdWxsICphbGlzID0gYXRvbV9hbGlzX25ldyAoKTsKLSAgICBkcmVmLT5lbnRyaWVzID0gZ19saXN0X2FwcGVuZCAoZHJlZi0+ZW50cmllcywgYWxpcyk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogdXJsIGZvciBpc28gc3BlYywgYXMgJ2FsaXMnIG5vdCBzcGVjaWZpZWQgdGhlcmUgKi8KLSAgICBBdG9tVVJMICp1cmwgPSBhdG9tX3VybF9uZXcgKCk7Ci0gICAgZHJlZi0+ZW50cmllcyA9IGdfbGlzdF9hcHBlbmQgKGRyZWYtPmVudHJpZXMsIHVybCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWF0b21fZHJlZl9jbGVhciAoQXRvbURSRUYgKiBkcmVmKQotewotICBHTGlzdCAqd2Fsa2VyOwotCi0gIGF0b21fZnVsbF9jbGVhciAoJmRyZWYtPmhlYWRlcik7Ci0gIHdhbGtlciA9IGRyZWYtPmVudHJpZXM7Ci0gIHdoaWxlICh3YWxrZXIpIHsKLSAgICBHTGlzdCAqYXV4ID0gd2Fsa2VyOwotICAgIEF0b20gKmF0b20gPSAoQXRvbSAqKSBhdXgtPmRhdGE7Ci0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgICBkcmVmLT5lbnRyaWVzID0gZ19saXN0X3JlbW92ZV9saW5rIChkcmVmLT5lbnRyaWVzLCBhdXgpOwotICAgIHN3aXRjaCAoYXRvbS0+dHlwZSkgewotICAgICAgY2FzZSBGT1VSQ0NfYWxpczoKLSAgICAgICAgYXRvbV9mdWxsX2ZyZWUgKChBdG9tRnVsbCAqKSBhdG9tKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZPVVJDQ191cmxfOgotICAgICAgICBhdG9tX3VybF9mcmVlICgoQXRvbVVSTCAqKSBhdG9tKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiB3ZSBkbyBub3RoaW5nLCBiZXR0ZXIgbGVhayB0aGFuIGNyYXNoICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBnX2xpc3RfZnJlZSAoYXV4KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9kaW5mX2luaXQgKEF0b21ESU5GICogZGluZiwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9oZWFkZXJfc2V0ICgmZGluZi0+aGVhZGVyLCBGT1VSQ0NfZGluZiwgMCwgMCk7Ci0gIGF0b21fZHJlZl9pbml0ICgmZGluZi0+ZHJlZiwgY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2RpbmZfY2xlYXIgKEF0b21ESU5GICogZGluZikKLXsKLSAgYXRvbV9jbGVhciAoJmRpbmYtPmhlYWRlcik7Ci0gIGF0b21fZHJlZl9jbGVhciAoJmRpbmYtPmRyZWYpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9taW5mX2luaXQgKEF0b21NSU5GICogbWluZiwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9oZWFkZXJfc2V0ICgmbWluZi0+aGVhZGVyLCBGT1VSQ0NfbWluZiwgMCwgMCk7Ci0KLSAgbWluZi0+dm1oZCA9IE5VTEw7Ci0gIG1pbmYtPnNtaGQgPSBOVUxMOwotICBtaW5mLT5obWhkID0gTlVMTDsKLSAgbWluZi0+Z21oZCA9IE5VTEw7Ci0KLSAgaWYgKGNvbnRleHQtPmZsYXZvciA9PSBBVE9NU19UUkVFX0ZMQVZPUl9NT1YpIHsKLSAgICBtaW5mLT5oZGxyID0gYXRvbV9oZGxyX25ldyAoY29udGV4dCk7Ci0gICAgbWluZi0+aGRsci0+Y29tcG9uZW50X3R5cGUgPSBGT1VSQ0NfZGhscjsKLSAgICBtaW5mLT5oZGxyLT5oYW5kbGVyX3R5cGUgPSBGT1VSQ0NfYWxpczsKLSAgfSBlbHNlIHsKLSAgICBtaW5mLT5oZGxyID0gTlVMTDsKLSAgfQotICBhdG9tX2RpbmZfaW5pdCAoJm1pbmYtPmRpbmYsIGNvbnRleHQpOwotICBhdG9tX3N0YmxfaW5pdCAoJm1pbmYtPnN0YmwpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9taW5mX2NsZWFyX2hhbmRsZXJzIChBdG9tTUlORiAqIG1pbmYpCi17Ci0gIGlmIChtaW5mLT52bWhkKSB7Ci0gICAgYXRvbV92bWhkX2ZyZWUgKG1pbmYtPnZtaGQpOwotICAgIG1pbmYtPnZtaGQgPSBOVUxMOwotICB9Ci0gIGlmIChtaW5mLT5zbWhkKSB7Ci0gICAgYXRvbV9zbWhkX2ZyZWUgKG1pbmYtPnNtaGQpOwotICAgIG1pbmYtPnNtaGQgPSBOVUxMOwotICB9Ci0gIGlmIChtaW5mLT5obWhkKSB7Ci0gICAgYXRvbV9obWhkX2ZyZWUgKG1pbmYtPmhtaGQpOwotICAgIG1pbmYtPmhtaGQgPSBOVUxMOwotICB9Ci0gIGlmIChtaW5mLT5nbWhkKSB7Ci0gICAgYXRvbV9nbWhkX2ZyZWUgKG1pbmYtPmdtaGQpOwotICAgIG1pbmYtPmdtaGQgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21pbmZfY2xlYXIgKEF0b21NSU5GICogbWluZikKLXsKLSAgYXRvbV9jbGVhciAoJm1pbmYtPmhlYWRlcik7Ci0gIGF0b21fbWluZl9jbGVhcl9oYW5kbGVycyAobWluZik7Ci0gIGlmIChtaW5mLT5oZGxyKSB7Ci0gICAgYXRvbV9oZGxyX2ZyZWUgKG1pbmYtPmhkbHIpOwotICB9Ci0gIGF0b21fZGluZl9jbGVhciAoJm1pbmYtPmRpbmYpOwotICBhdG9tX3N0YmxfY2xlYXIgKCZtaW5mLT5zdGJsKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWRoZF9pbml0IChBdG9tTURIRCAqIG1kaGQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmbWRoZC0+aGVhZGVyLCBGT1VSQ0NfbWRoZCwgMCwgMCwgMCwgZmxhZ3MpOwotICBjb21tb25fdGltZV9pbmZvX2luaXQgKCZtZGhkLT50aW1lX2luZm8pOwotICBtZGhkLT5sYW5ndWFnZV9jb2RlID0gMDsKLSAgbWRoZC0+cXVhbGl0eSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21kaGRfY2xlYXIgKEF0b21NREhEICogbWRoZCkKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmbWRoZC0+aGVhZGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWRpYV9pbml0IChBdG9tTURJQSAqIG1kaWEsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJm1kaWEtPmhlYWRlciwgRk9VUkNDX21kaWEsIDAsIDApOwotCi0gIGF0b21fbWRoZF9pbml0ICgmbWRpYS0+bWRoZCk7Ci0gIGF0b21faGRscl9pbml0ICgmbWRpYS0+aGRsciwgY29udGV4dCk7Ci0gIGF0b21fbWluZl9pbml0ICgmbWRpYS0+bWluZiwgY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21kaWFfY2xlYXIgKEF0b21NRElBICogbWRpYSkKLXsKLSAgYXRvbV9jbGVhciAoJm1kaWEtPmhlYWRlcik7Ci0gIGF0b21fbWRoZF9jbGVhciAoJm1kaWEtPm1kaGQpOwotICBhdG9tX2hkbHJfY2xlYXIgKCZtZGlhLT5oZGxyKTsKLSAgYXRvbV9taW5mX2NsZWFyICgmbWRpYS0+bWluZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RraGRfaW5pdCAoQXRvbVRLSEQgKiB0a2hkLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICAvKgotICAgKiBmbGFncyBpbmZvCi0gICAqIDEgLT4gdHJhY2sgZW5hYmxlZAotICAgKiAyIC0+IHRyYWNrIGluIG1vdmllCi0gICAqIDQgLT4gdHJhY2sgaW4gcHJldmlldwotICAgKi8KLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCA3IH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZ0a2hkLT5oZWFkZXIsIEZPVVJDQ190a2hkLCAwLCAwLCAwLCBmbGFncyk7Ci0KLSAgdGtoZC0+Y3JlYXRpb25fdGltZSA9IHRraGQtPm1vZGlmaWNhdGlvbl90aW1lID0gZ2V0X2N1cnJlbnRfcXRfdGltZSAoKTsKLSAgdGtoZC0+ZHVyYXRpb24gPSAwOwotICB0a2hkLT50cmFja19JRCA9IDA7Ci0gIHRraGQtPnJlc2VydmVkID0gMDsKLQotICB0a2hkLT5yZXNlcnZlZDJbMF0gPSB0a2hkLT5yZXNlcnZlZDJbMV0gPSAwOwotICB0a2hkLT5sYXllciA9IDA7Ci0gIHRraGQtPmFsdGVybmF0ZV9ncm91cCA9IDA7Ci0gIHRraGQtPnZvbHVtZSA9IDA7Ci0gIHRraGQtPnJlc2VydmVkMyA9IDA7Ci0gIG1lbXNldCAodGtoZC0+bWF0cml4LCAwLCBzaXplb2YgKGd1aW50MzIpICogOSk7Ci0gIHRraGQtPm1hdHJpeFswXSA9IDEgPDwgMTY7Ci0gIHRraGQtPm1hdHJpeFs0XSA9IDEgPDwgMTY7Ci0gIHRraGQtPm1hdHJpeFs4XSA9IDE2Mzg0IDw8IDE2OwotICB0a2hkLT53aWR0aCA9IDA7Ci0gIHRraGQtPmhlaWdodCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RraGRfY2xlYXIgKEF0b21US0hEICogdGtoZCkKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmdGtoZC0+aGVhZGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21faWxzdF9pbml0IChBdG9tSUxTVCAqIGlsc3QpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJmlsc3QtPmhlYWRlciwgRk9VUkNDX2lsc3QsIDAsIDApOwotICBpbHN0LT5lbnRyaWVzID0gTlVMTDsKLX0KLQotc3RhdGljIEF0b21JTFNUICoKLWF0b21faWxzdF9uZXcgKHZvaWQpCi17Ci0gIEF0b21JTFNUICppbHN0ID0gZ19uZXcwIChBdG9tSUxTVCwgMSk7Ci0KLSAgYXRvbV9pbHN0X2luaXQgKGlsc3QpOwotICByZXR1cm4gaWxzdDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21faWxzdF9mcmVlIChBdG9tSUxTVCAqIGlsc3QpCi17Ci0gIGlmIChpbHN0LT5lbnRyaWVzKQotICAgIGF0b21faW5mb19saXN0X2ZyZWUgKGlsc3QtPmVudHJpZXMpOwotICBhdG9tX2NsZWFyICgmaWxzdC0+aGVhZGVyKTsKLSAgZ19mcmVlIChpbHN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWV0YV9pbml0IChBdG9tTUVUQSAqIG1ldGEsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmbWV0YS0+aGVhZGVyLCBGT1VSQ0NfbWV0YSwgMCwgMCwgMCwgZmxhZ3MpOwotICBhdG9tX2hkbHJfaW5pdCAoJm1ldGEtPmhkbHIsIGNvbnRleHQpOwotICAvKiBGSVhNRSAoSVNPTSBzYXlzIHRoaXMgaXMgYWx3YXlzIDApICovCi0gIG1ldGEtPmhkbHIuY29tcG9uZW50X3R5cGUgPSBGT1VSQ0NfbWhscjsKLSAgbWV0YS0+aGRsci5oYW5kbGVyX3R5cGUgPSBGT1VSQ0NfbWRpcjsKLSAgbWV0YS0+aWxzdCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBBdG9tTUVUQSAqCi1hdG9tX21ldGFfbmV3IChBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBBdG9tTUVUQSAqbWV0YSA9IGdfbmV3MCAoQXRvbU1FVEEsIDEpOwotCi0gIGF0b21fbWV0YV9pbml0IChtZXRhLCBjb250ZXh0KTsKLSAgcmV0dXJuIG1ldGE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21ldGFfZnJlZSAoQXRvbU1FVEEgKiBtZXRhKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZtZXRhLT5oZWFkZXIpOwotICBhdG9tX2hkbHJfY2xlYXIgKCZtZXRhLT5oZGxyKTsKLSAgaWYgKG1ldGEtPmlsc3QpCi0gICAgYXRvbV9pbHN0X2ZyZWUgKG1ldGEtPmlsc3QpOwotICBtZXRhLT5pbHN0ID0gTlVMTDsKLSAgZ19mcmVlIChtZXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdWR0YV9pbml0X21ldGF0YWdzIChBdG9tVURUQSAqIHVkdGEsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGlmIChjb250ZXh0LT5mbGF2b3IgIT0gQVRPTVNfVFJFRV9GTEFWT1JfM0dQKSB7Ci0gICAgaWYgKCF1ZHRhLT5tZXRhKSB7Ci0gICAgICB1ZHRhLT5tZXRhID0gYXRvbV9tZXRhX25ldyAoY29udGV4dCk7Ci0gICAgfQotICAgIGlmICghdWR0YS0+bWV0YS0+aWxzdCkgewotICAgICAgdWR0YS0+bWV0YS0+aWxzdCA9IGF0b21faWxzdF9uZXcgKCk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3VkdGFfaW5pdCAoQXRvbVVEVEEgKiB1ZHRhLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBhdG9tX2hlYWRlcl9zZXQgKCZ1ZHRhLT5oZWFkZXIsIEZPVVJDQ191ZHRhLCAwLCAwKTsKLSAgdWR0YS0+bWV0YSA9IE5VTEw7Ci0gIHVkdGEtPmNvbnRleHQgPSBjb250ZXh0OwotCi0gIGF0b21fdWR0YV9pbml0X21ldGF0YWdzICh1ZHRhLCBjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdWR0YV9jbGVhciAoQXRvbVVEVEEgKiB1ZHRhKQotewotICBhdG9tX2NsZWFyICgmdWR0YS0+aGVhZGVyKTsKLSAgaWYgKHVkdGEtPm1ldGEpCi0gICAgYXRvbV9tZXRhX2ZyZWUgKHVkdGEtPm1ldGEpOwotICB1ZHRhLT5tZXRhID0gTlVMTDsKLSAgaWYgKHVkdGEtPmVudHJpZXMpCi0gICAgYXRvbV9pbmZvX2xpc3RfZnJlZSAodWR0YS0+ZW50cmllcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyZWZfaW5pdCAoQXRvbVRSRUYgKiB0cmVmLCBndWludDMyIHJlZnR5cGUpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJnRyZWYtPmhlYWRlciwgRk9VUkNDX3RyZWYsIDAsIDApOwotICB0cmVmLT5yZWZ0eXBlID0gcmVmdHlwZTsKLSAgYXRvbV9hcnJheV9pbml0ICgmdHJlZi0+ZW50cmllcywgMTI4KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJlZl9jbGVhciAoQXRvbVRSRUYgKiB0cmVmKQotewotICBhdG9tX2NsZWFyICgmdHJlZi0+aGVhZGVyKTsKLSAgdHJlZi0+cmVmdHlwZSA9IDA7Ci0gIGF0b21fYXJyYXlfY2xlYXIgKCZ0cmVmLT5lbnRyaWVzKTsKLX0KLQotQXRvbVRSRUYgKgotYXRvbV90cmVmX25ldyAoZ3VpbnQzMiByZWZ0eXBlKQotewotICBBdG9tVFJFRiAqdHJlZjsKLQotICB0cmVmID0gZ19uZXcwIChBdG9tVFJFRiwgMSk7Ci0gIGF0b21fdHJlZl9pbml0ICh0cmVmLCByZWZ0eXBlKTsKLQotICByZXR1cm4gdHJlZjsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJlZl9mcmVlIChBdG9tVFJFRiAqIHRyZWYpCi17Ci0gIGF0b21fdHJlZl9jbGVhciAodHJlZik7Ci0gIGdfZnJlZSAodHJlZik7Ci19Ci0KLS8qIENsZWFyIGFkZGVkIHRhZ3MsIGJ1dCBrZWVwIHRoZSBjb250ZXh0L2ZsYXZvciB0aGUgc2FtZSAqLwotdm9pZAotYXRvbV91ZHRhX2NsZWFyX3RhZ3MgKEF0b21VRFRBICogdWR0YSkKLXsKLSAgaWYgKHVkdGEtPmVudHJpZXMpIHsKLSAgICBhdG9tX2luZm9fbGlzdF9mcmVlICh1ZHRhLT5lbnRyaWVzKTsKLSAgICB1ZHRhLT5lbnRyaWVzID0gTlVMTDsKLSAgfQotICBpZiAodWR0YS0+bWV0YSAmJiB1ZHRhLT5tZXRhLT5pbHN0LT5lbnRyaWVzKSB7Ci0gICAgYXRvbV9pbmZvX2xpc3RfZnJlZSAodWR0YS0+bWV0YS0+aWxzdC0+ZW50cmllcyk7Ci0gICAgdWR0YS0+bWV0YS0+aWxzdC0+ZW50cmllcyA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdGFnX2RhdGFfaW5pdCAoQXRvbVRhZ0RhdGEgKiBkYXRhKQotewotICBndWludDggZmxhZ3NbXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmZGF0YS0+aGVhZGVyLCBGT1VSQ0NfZGF0YSwgMCwgMCwgMCwgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90YWdfZGF0YV9jbGVhciAoQXRvbVRhZ0RhdGEgKiBkYXRhKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZkYXRhLT5oZWFkZXIpOwotICBnX2ZyZWUgKGRhdGEtPmRhdGEpOwotICBkYXRhLT5kYXRhbGVuID0gMDsKLX0KLQotLyoKLSAqIEZvdXJjYyBpcyB0aGUgdGFnIGZvdXJjYwotICogZmxhZ3Mgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gMjRiaXRzCi0gKi8KLXN0YXRpYyBBdG9tVGFnICoKLWF0b21fdGFnX25ldyAoZ3VpbnQzMiBmb3VyY2MsIGd1aW50MzIgZmxhZ3NfYXNfdWludCkKLXsKLSAgQXRvbVRhZyAqdGFnID0gZ19uZXcwIChBdG9tVGFnLCAxKTsKLQotICB0YWctPmhlYWRlci50eXBlID0gZm91cmNjOwotICBhdG9tX3RhZ19kYXRhX2luaXQgKCZ0YWctPmRhdGEpOwotICBhdG9tX2Z1bGxfc2V0X2ZsYWdzX2FzX3VpbnQgKCZ0YWctPmRhdGEuaGVhZGVyLCBmbGFnc19hc191aW50KTsKLSAgcmV0dXJuIHRhZzsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdGFnX2ZyZWUgKEF0b21UYWcgKiB0YWcpCi17Ci0gIGF0b21fY2xlYXIgKCZ0YWctPmhlYWRlcik7Ci0gIGF0b21fdGFnX2RhdGFfY2xlYXIgKCZ0YWctPmRhdGEpOwotICBnX2ZyZWUgKHRhZyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX212aGRfaW5pdCAoQXRvbU1WSEQgKiBtdmhkKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJihtdmhkLT5oZWFkZXIpLCBGT1VSQ0NfbXZoZCwgc2l6ZW9mIChBdG9tTVZIRCksIDAsIDAsIGZsYWdzKTsKLQotICBjb21tb25fdGltZV9pbmZvX2luaXQgKCZtdmhkLT50aW1lX2luZm8pOwotCi0gIG12aGQtPnByZWZlcmVkX3JhdGUgPSAxIDw8IDE2OwotICBtdmhkLT52b2x1bWUgPSAxIDw8IDg7Ci0gIG12aGQtPnJlc2VydmVkMyA9IDA7Ci0gIG1lbXNldCAobXZoZC0+cmVzZXJ2ZWQ0LCAwLCBzaXplb2YgKGd1aW50MzJbMl0pKTsKLQotICBtZW1zZXQgKG12aGQtPm1hdHJpeCwgMCwgc2l6ZW9mIChndWludDMyWzldKSk7Ci0gIG12aGQtPm1hdHJpeFswXSA9IDEgPDwgMTY7Ci0gIG12aGQtPm1hdHJpeFs0XSA9IDEgPDwgMTY7Ci0gIG12aGQtPm1hdHJpeFs4XSA9IDE2Mzg0IDw8IDE2OwotCi0gIG12aGQtPnByZXZpZXdfdGltZSA9IDA7Ci0gIG12aGQtPnByZXZpZXdfZHVyYXRpb24gPSAwOwotICBtdmhkLT5wb3N0ZXJfdGltZSA9IDA7Ci0gIG12aGQtPnNlbGVjdGlvbl90aW1lID0gMDsKLSAgbXZoZC0+c2VsZWN0aW9uX2R1cmF0aW9uID0gMDsKLSAgbXZoZC0+Y3VycmVudF90aW1lID0gMDsKLQotICBtdmhkLT5uZXh0X3RyYWNrX2lkID0gMTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbXZoZF9jbGVhciAoQXRvbU1WSEQgKiBtdmhkKQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZtdmhkLT5oZWFkZXIpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9tZWhkX2luaXQgKEF0b21NRUhEICogbWVoZCkKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZtZWhkLT5oZWFkZXIsIEZPVVJDQ19tZWhkLCAwLCAwLCAxLCBmbGFncyk7Ci0gIG1laGQtPmZyYWdtZW50X2R1cmF0aW9uID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbXZleF9pbml0IChBdG9tTVZFWCAqIG12ZXgpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJm12ZXgtPmhlYWRlciwgRk9VUkNDX212ZXgsIDAsIDApOwotICBhdG9tX21laGRfaW5pdCAoJm12ZXgtPm1laGQpOwotICBtdmV4LT50cmV4cyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyYWtfaW5pdCAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBhdG9tX2hlYWRlcl9zZXQgKCZ0cmFrLT5oZWFkZXIsIEZPVVJDQ190cmFrLCAwLCAwKTsKLQotICBhdG9tX3RraGRfaW5pdCAoJnRyYWstPnRraGQsIGNvbnRleHQpOwotICB0cmFrLT5jb250ZXh0ID0gY29udGV4dDsKLSAgYXRvbV91ZHRhX2luaXQgKCZ0cmFrLT51ZHRhLCBjb250ZXh0KTsKLSAgdHJhay0+ZWR0cyA9IE5VTEw7Ci0gIGF0b21fbWRpYV9pbml0ICgmdHJhay0+bWRpYSwgY29udGV4dCk7Ci0gIHRyYWstPnRyZWYgPSBOVUxMOwotfQotCi1BdG9tVFJBSyAqCi1hdG9tX3RyYWtfbmV3IChBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBBdG9tVFJBSyAqdHJhayA9IGdfbmV3MCAoQXRvbVRSQUssIDEpOwotCi0gIGF0b21fdHJha19pbml0ICh0cmFrLCBjb250ZXh0KTsKLSAgcmV0dXJuIHRyYWs7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyYWtfY2xlYXIgKEF0b21UUkFLICogdHJhaykKLXsKLSAgYXRvbV9jbGVhciAoJnRyYWstPmhlYWRlcik7Ci0gIGF0b21fdGtoZF9jbGVhciAoJnRyYWstPnRraGQpOwotICBpZiAodHJhay0+ZWR0cykKLSAgICBhdG9tX2VkdHNfZnJlZSAodHJhay0+ZWR0cyk7Ci0gIGF0b21fdWR0YV9jbGVhciAoJnRyYWstPnVkdGEpOwotICBhdG9tX21kaWFfY2xlYXIgKCZ0cmFrLT5tZGlhKTsKLSAgaWYgKHRyYWstPnRyZWYpCi0gICAgYXRvbV90cmVmX2ZyZWUgKHRyYWstPnRyZWYpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90cmFrX2ZyZWUgKEF0b21UUkFLICogdHJhaykKLXsKLSAgYXRvbV90cmFrX2NsZWFyICh0cmFrKTsKLSAgZ19mcmVlICh0cmFrKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotYXRvbV9tb292X2luaXQgKEF0b21NT09WICogbW9vdiwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9oZWFkZXJfc2V0ICgmKG1vb3YtPmhlYWRlciksIEZPVVJDQ19tb292LCAwLCAwKTsKLSAgYXRvbV9tdmhkX2luaXQgKCYobW9vdi0+bXZoZCkpOwotICBhdG9tX212ZXhfaW5pdCAoJihtb292LT5tdmV4KSk7Ci0gIGF0b21fdWR0YV9pbml0ICgmbW9vdi0+dWR0YSwgY29udGV4dCk7Ci0gIG1vb3YtPnRyYWtzID0gTlVMTDsKLSAgbW9vdi0+Y29udGV4dCA9ICpjb250ZXh0OwotfQotCi1BdG9tTU9PViAqCi1hdG9tX21vb3ZfbmV3IChBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBBdG9tTU9PViAqbW9vdiA9IGdfbmV3MCAoQXRvbU1PT1YsIDEpOwotCi0gIGF0b21fbW9vdl9pbml0IChtb292LCBjb250ZXh0KTsKLSAgcmV0dXJuIG1vb3Y7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyZXhfZnJlZSAoQXRvbVRSRVggKiB0cmV4KQotewotICBhdG9tX2Z1bGxfY2xlYXIgKCZ0cmV4LT5oZWFkZXIpOwotICBnX2ZyZWUgKHRyZXgpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9tdmV4X2NsZWFyIChBdG9tTVZFWCAqIG12ZXgpCi17Ci0gIEdMaXN0ICp3YWxrZXI7Ci0KLSAgYXRvbV9jbGVhciAoJm12ZXgtPmhlYWRlcik7Ci0gIHdhbGtlciA9IG12ZXgtPnRyZXhzOwotICB3aGlsZSAod2Fsa2VyKSB7Ci0gICAgYXRvbV90cmV4X2ZyZWUgKChBdG9tVFJFWCAqKSB3YWxrZXItPmRhdGEpOwotICAgIHdhbGtlciA9IGdfbGlzdF9uZXh0ICh3YWxrZXIpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChtdmV4LT50cmV4cyk7Ci0gIG12ZXgtPnRyZXhzID0gTlVMTDsKLX0KLQotdm9pZAotYXRvbV9tb292X2ZyZWUgKEF0b21NT09WICogbW9vdikKLXsKLSAgR0xpc3QgKndhbGtlcjsKLQotICBhdG9tX2NsZWFyICgmbW9vdi0+aGVhZGVyKTsKLSAgYXRvbV9tdmhkX2NsZWFyICgmbW9vdi0+bXZoZCk7Ci0KLSAgd2Fsa2VyID0gbW9vdi0+dHJha3M7Ci0gIHdoaWxlICh3YWxrZXIpIHsKLSAgICBhdG9tX3RyYWtfZnJlZSAoKEF0b21UUkFLICopIHdhbGtlci0+ZGF0YSk7Ci0gICAgd2Fsa2VyID0gZ19saXN0X25leHQgKHdhbGtlcik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKG1vb3YtPnRyYWtzKTsKLSAgbW9vdi0+dHJha3MgPSBOVUxMOwotCi0gIGF0b21fdWR0YV9jbGVhciAoJm1vb3YtPnVkdGEpOwotICBhdG9tX212ZXhfY2xlYXIgKCZtb292LT5tdmV4KTsKLQotICBnX2ZyZWUgKG1vb3YpOwotfQotCi0vKiAtLSBlbmQgb2YgaW5pdCAvIGZyZWUgLS0gKi8KLQotLyogLS0gY29weSBkYXRhIGZ1bmN0aW9ucyAtLSAqLwotCi1zdGF0aWMgZ3VpbnQ4Ci1hdG9tX2Z1bGxfZ2V0X3ZlcnNpb24gKEF0b21GdWxsICogZnVsbCkKLXsKLSAgcmV0dXJuIGZ1bGwtPnZlcnNpb247Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1jb21tb25fdGltZV9pbmZvX2NvcHlfZGF0YSAoVGltZUluZm8gKiB0aSwgZ2Jvb2xlYW4gdHJ1bmNfdG9fMzIsCi0gICAgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAodHJ1bmNfdG9fMzIpIHsKLSAgICBwcm9wX2NvcHlfdWludDMyICgoZ3VpbnQzMikgdGktPmNyZWF0aW9uX3RpbWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyICgoZ3VpbnQzMikgdGktPm1vZGlmaWNhdGlvbl90aW1lLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAodGktPnRpbWVzY2FsZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50MzIgKChndWludDMyKSB0aS0+ZHVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgfSBlbHNlIHsKLSAgICBwcm9wX2NvcHlfdWludDY0ICh0aS0+Y3JlYXRpb25fdGltZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50NjQgKHRpLT5tb2RpZmljYXRpb25fdGltZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50MzIgKHRpLT50aW1lc2NhbGUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDY0ICh0aS0+ZHVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgfQotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fd3JpdGVfc2l6ZSAoZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQsCi0gICAgZ3VpbnQ2NCBhdG9tX3BvcykKLXsKLSAgLyogdGhpcyBvbmx5IHdvcmtzIGZvciBub24tZXh0ZW5kZWQgYXRvbSBzaXplLCB3aGljaCBpcyBPSwotICAgKiAodGhvdWdoIGl0IGNvdWxkIGJlIG1hZGUgdG8gZG8gbWVtX21vdmUsIGV0YyBhbmQgd3JpdGUgZXh0ZW5kZWQgc2l6ZSkgKi8KLSAgcHJvcF9jb3B5X3VpbnQzMiAoKm9mZnNldCAtIGF0b21fcG9zLCBidWZmZXIsIHNpemUsICZhdG9tX3Bvcyk7Ci19Ci0KLWd1aW50NjQKLWF0b21fY29weV9kYXRhIChBdG9tICogYXRvbSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICAvKiBjb3BpZXMgdHlwZSBhbmQgc2l6ZSAqLwotICBwcm9wX2NvcHlfdWludDMyIChhdG9tLT5zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV9mb3VyY2MgKGF0b20tPnR5cGUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICAvKiBleHRlbmRlZCBzaXplIG5lZWRlZCAqLwotICBpZiAoYXRvbS0+c2l6ZSA9PSAxKSB7Ci0gICAgLyogcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuIG90aGVyIHRoYW4gd2l0aCBtZGF0IGF0b207Ci0gICAgICogd291bGQgYmUgYSBwcm9ibGVtIGZvciBzaXplIChyZSl3cml0ZSBjb2RlLCBub3QgdG8gbWVudGlvbiBtZW1vcnkgKi8KLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoYXRvbS0+dHlwZSA9PSBGT1VSQ0NfbWRhdCwgMCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQ2NCAoYXRvbS0+ZXh0ZW5kZWRfc2l6ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0KLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2Z1bGxfY29weV9kYXRhIChBdG9tRnVsbCAqIGF0b20sIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmYXRvbS0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50OCAoYXRvbS0+dmVyc2lvbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDhfYXJyYXkgKGF0b20tPmZsYWdzLCAzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2luZm9fbGlzdF9jb3B5X2RhdGEgKEdMaXN0ICogYWksIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICB3aGlsZSAoYWkpIHsKLSAgICBBdG9tSW5mbyAqaW5mbyA9IChBdG9tSW5mbyAqKSBhaS0+ZGF0YTsKLQotICAgIGlmICghaW5mby0+Y29weV9kYXRhX2Z1bmMgKGluZm8tPmF0b20sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGFpID0gZ19saXN0X25leHQgKGFpKTsKLSAgfQotCi0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV9kYXRhX2NvcHlfZGF0YSAoQXRvbURhdGEgKiBkYXRhLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX2NvcHlfZGF0YSAoJmRhdGEtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKGRhdGEtPmRhdGFsZW4pCi0gICAgcHJvcF9jb3B5X3VpbnQ4X2FycmF5IChkYXRhLT5kYXRhLCBkYXRhLT5kYXRhbGVuLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3V1aWRfY29weV9kYXRhIChBdG9tVVVJRCAqIHV1aWQsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmdXVpZC0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBwcm9wX2NvcHlfdWludDhfYXJyYXkgKHV1aWQtPnV1aWQsIDE2LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIGlmICh1dWlkLT5kYXRhbGVuKQotICAgIHByb3BfY29weV91aW50OF9hcnJheSAodXVpZC0+ZGF0YSwgdXVpZC0+ZGF0YWxlbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1ndWludDY0Ci1hdG9tX2Z0eXBfY29weV9kYXRhIChBdG9tRlRZUCAqIGZ0eXAsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmZnR5cC0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBwcm9wX2NvcHlfZm91cmNjIChmdHlwLT5tYWpvcl9icmFuZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChmdHlwLT52ZXJzaW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgcHJvcF9jb3B5X2ZvdXJjY19hcnJheSAoZnR5cC0+Y29tcGF0aWJsZV9icmFuZHMsIGZ0eXAtPmNvbXBhdGlibGVfYnJhbmRzX3NpemUsCi0gICAgICBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLWd1aW50NjQKLWF0b21fbXZoZF9jb3B5X2RhdGEgKEF0b21NVkhEICogYXRvbSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ4IHZlcnNpb247Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCYoYXRvbS0+aGVhZGVyKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICB2ZXJzaW9uID0gYXRvbV9mdWxsX2dldF92ZXJzaW9uICgmKGF0b20tPmhlYWRlcikpOwotICBpZiAodmVyc2lvbiA9PSAwKSB7Ci0gICAgY29tbW9uX3RpbWVfaW5mb19jb3B5X2RhdGEgKCZhdG9tLT50aW1lX2luZm8sIFRSVUUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgfSBlbHNlIGlmICh2ZXJzaW9uID09IDEpIHsKLSAgICBjb21tb25fdGltZV9pbmZvX2NvcHlfZGF0YSAoJmF0b20tPnRpbWVfaW5mbywgRkFMU0UsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgfSBlbHNlIHsKLSAgICAqb2Zmc2V0ID0gb3JpZ2luYWxfb2Zmc2V0OwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbS0+cHJlZmVyZWRfcmF0ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2IChhdG9tLT52b2x1bWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAoYXRvbS0+cmVzZXJ2ZWQzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzJfYXJyYXkgKGF0b20tPnJlc2VydmVkNCwgMiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyX2FycmF5IChhdG9tLT5tYXRyaXgsIDksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbS0+cHJldmlld190aW1lLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKGF0b20tPnByZXZpZXdfZHVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbS0+cG9zdGVyX3RpbWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbS0+c2VsZWN0aW9uX3RpbWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbS0+c2VsZWN0aW9uX2R1cmF0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKGF0b20tPmN1cnJlbnRfdGltZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIHByb3BfY29weV91aW50MzIgKGF0b20tPm5leHRfdHJhY2tfaWQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fdGtoZF9jb3B5X2RhdGEgKEF0b21US0hEICogdGtoZCwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJnRraGQtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpZiAoYXRvbV9mdWxsX2dldF92ZXJzaW9uICgmdGtoZC0+aGVhZGVyKSA9PSAwKSB7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAoKGd1aW50MzIpIHRraGQtPmNyZWF0aW9uX3RpbWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyICgoZ3VpbnQzMikgdGtoZC0+bW9kaWZpY2F0aW9uX3RpbWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyICh0a2hkLT50cmFja19JRCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50MzIgKHRraGQtPnJlc2VydmVkLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAoKGd1aW50MzIpIHRraGQtPmR1cmF0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJvcF9jb3B5X3VpbnQ2NCAodGtoZC0+Y3JlYXRpb25fdGltZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50NjQgKHRraGQtPm1vZGlmaWNhdGlvbl90aW1lLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAodGtoZC0+dHJhY2tfSUQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyICh0a2hkLT5yZXNlcnZlZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50NjQgKHRraGQtPmR1cmF0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyX2FycmF5ICh0a2hkLT5yZXNlcnZlZDIsIDIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAodGtoZC0+bGF5ZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAodGtoZC0+YWx0ZXJuYXRlX2dyb3VwLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKHRraGQtPnZvbHVtZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2ICh0a2hkLT5yZXNlcnZlZDMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMl9hcnJheSAodGtoZC0+bWF0cml4LCA5LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAodGtoZC0+d2lkdGgsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAodGtoZC0+aGVpZ2h0LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2hkbHJfY29weV9kYXRhIChBdG9tSERMUiAqIGhkbHIsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZoZGxyLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X2ZvdXJjYyAoaGRsci0+Y29tcG9uZW50X3R5cGUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X2ZvdXJjYyAoaGRsci0+aGFuZGxlcl90eXBlLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV9mb3VyY2MgKGhkbHItPm1hbnVmYWN0dXJlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChoZGxyLT5mbGFncywgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChoZGxyLT5mbGFnc19tYXNrLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgaWYgKGhkbHItPmZsYXZvciA9PSBBVE9NU19UUkVFX0ZMQVZPUl9NT1YpIHsKLSAgICBwcm9wX2NvcHlfc2l6ZV9zdHJpbmcgKChndWludDggKikgaGRsci0+bmFtZSwgc3RybGVuIChoZGxyLT5uYW1lKSwgYnVmZmVyLAotICAgICAgICBzaXplLCBvZmZzZXQpOwotICB9IGVsc2UgewotICAgIC8qIGFzc3VtZSBpc29tZWRpYSBiYXNlIGlzIG1vcmUgZ2VuZXJpYyBhbmQgdXNlIG51bGwgdGVybWluYXRlZCAqLwotICAgIHByb3BfY29weV9udWxsX3Rlcm1pbmF0ZWRfc3RyaW5nIChoZGxyLT5uYW1lLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fdm1oZF9jb3B5X2RhdGEgKEF0b21WTUhEICogdm1oZCwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJnZtaGQtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcHJvcF9jb3B5X3VpbnQxNiAodm1oZC0+Z3JhcGhpY3NfbW9kZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2X2FycmF5ICh2bWhkLT5vcGNvbG9yLCAzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuIG9yaWdpbmFsX29mZnNldCAtICpvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3NtaGRfY29weV9kYXRhIChBdG9tU01IRCAqIHNtaGQsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZzbWhkLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIHByb3BfY29weV91aW50MTYgKHNtaGQtPmJhbGFuY2UsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAoc21oZC0+cmVzZXJ2ZWQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gb3JpZ2luYWxfb2Zmc2V0IC0gKm9mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21faG1oZF9jb3B5X2RhdGEgKEF0b21ITUhEICogaG1oZCwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJmhtaGQtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcHJvcF9jb3B5X3VpbnQxNiAoaG1oZC0+bWF4X3BkdV9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKGhtaGQtPmF2Z19wZHVfc2l6ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChobWhkLT5tYXhfYml0cmF0ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChobWhkLT5hdmdfYml0cmF0ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChobWhkLT5zbGlkaW5nX2F2Z19iaXRyYXRlLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuIG9yaWdpbmFsX29mZnNldCAtICpvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3RjbWlfY29weV9kYXRhIChBdG9tVENNSSAqIHRjbWksIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZ0Y21pLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIHByb3BfY29weV91aW50MTYgKHRjbWktPnRleHRfZm9udCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2ICh0Y21pLT50ZXh0X2ZhY2UsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAodGNtaS0+dGV4dF9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKHRjbWktPnRleHRfY29sb3JbMF0sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAodGNtaS0+dGV4dF9jb2xvclsxXSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2ICh0Y21pLT50ZXh0X2NvbG9yWzJdLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKHRjbWktPmJnX2NvbG9yWzBdLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKHRjbWktPmJnX2NvbG9yWzFdLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKHRjbWktPmJnX2NvbG9yWzJdLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIC8qIHJlc2VydmVkICovCi0gIHByb3BfY29weV91aW50MTYgKDAsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3NpemVfc3RyaW5nICgoZ3VpbnQ4ICopIHRjbWktPmZvbnRfbmFtZSwgc3RybGVuICh0Y21pLT5mb250X25hbWUpLAotICAgICAgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiBvcmlnaW5hbF9vZmZzZXQgLSAqb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV90bWNkX2NvcHlfZGF0YSAoQXRvbVRNQ0QgKiB0bWNkLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX2NvcHlfZGF0YSAoJnRtY2QtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFhdG9tX3RjbWlfY29weV9kYXRhICgmdG1jZC0+dGNtaSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gb3JpZ2luYWxfb2Zmc2V0IC0gKm9mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fZ21pbl9jb3B5X2RhdGEgKEF0b21HTUlOICogZ21pbiwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJmdtaW4tPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcHJvcF9jb3B5X3VpbnQxNiAoZ21pbi0+Z3JhcGhpY3NfbW9kZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2IChnbWluLT5vcGNvbG9yWzBdLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKGdtaW4tPm9wY29sb3JbMV0sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAoZ21pbi0+b3Bjb2xvclsyXSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDggKGdtaW4tPmJhbGFuY2UsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgLyogcmVzZXJ2ZWQgKi8KLSAgcHJvcF9jb3B5X3VpbnQ4ICgwLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuIG9yaWdpbmFsX29mZnNldCAtICpvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2dtaGRfY29weV9kYXRhIChBdG9tR01IRCAqIGdtaGQsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmZ21oZC0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21fZ21pbl9jb3B5X2RhdGEgKCZnbWhkLT5nbWluLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21fdG1jZF9jb3B5X2RhdGEgKCZnbWhkLT50bWNkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiBvcmlnaW5hbF9vZmZzZXQgLSAqb2Zmc2V0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWF0b21fdXJsX3NhbWVfZmlsZV9mbGFnIChBdG9tVVJMICogdXJsKQotewotICByZXR1cm4gKHVybC0+aGVhZGVyLmZsYWdzWzJdICYgMHgxKSA9PSAxOwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV91cmxfY29weV9kYXRhIChBdG9tVVJMICogdXJsLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgmdXJsLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKCFhdG9tX3VybF9zYW1lX2ZpbGVfZmxhZyAodXJsKSkgewotICAgIHByb3BfY29weV9udWxsX3Rlcm1pbmF0ZWRfc3RyaW5nICh1cmwtPmxvY2F0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gb3JpZ2luYWxfb2Zmc2V0IC0gKm9mZnNldDsKLX0KLQotZ3VpbnQ2NAotYXRvbV9zdHRzX2NvcHlfZGF0YSAoQXRvbVNUVFMgKiBzdHRzLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0gIGd1aW50IGk7Ci0KLSAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgmc3R0cy0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50MzIgKGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0dHMtPmVudHJpZXMpLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIC8qIG1pbmltaXplIHJlYWxsb2MgKi8KLSAgcHJvcF9jb3B5X2Vuc3VyZV9idWZmZXIgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LAotICAgICAgOCAqIGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0dHMtPmVudHJpZXMpKTsKLSAgZm9yIChpID0gMDsgaSA8IGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0dHMtPmVudHJpZXMpOyBpKyspIHsKLSAgICBTVFRTRW50cnkgKmVudHJ5ID0gJmF0b21fYXJyYXlfaW5kZXggKCZzdHRzLT5lbnRyaWVzLCBpKTsKLQotICAgIHByb3BfY29weV91aW50MzIgKGVudHJ5LT5zYW1wbGVfY291bnQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfaW50MzIgKGVudHJ5LT5zYW1wbGVfZGVsdGEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV9zYW1wbGVfZW50cnlfY29weV9kYXRhIChTYW1wbGVUYWJsZUVudHJ5ICogc2UsIGd1aW50OCAqKiBidWZmZXIsCi0gICAgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmc2UtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDhfYXJyYXkgKHNlLT5yZXNlcnZlZCwgNiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2IChzZS0+ZGF0YV9yZWZlcmVuY2VfaW5kZXgsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fZXNkc19jb3B5X2RhdGEgKEF0b21FU0RTICogZXNkcywgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJmVzZHMtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFkZXNjX2VzX2Rlc2NyaXB0b3JfY29weV9kYXRhICgmZXNkcy0+ZXMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2ZybWFfY29weV9kYXRhIChBdG9tRlJNQSAqIGZybWEsIGd1aW50OCAqKiBidWZmZXIsCi0gICAgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmKGZybWEtPmhlYWRlciksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICBwcm9wX2NvcHlfZm91cmNjIChmcm1hLT5tZWRpYV90eXBlLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2hpbnRfc2FtcGxlX2VudHJ5X2NvcHlfZGF0YSAoQXRvbUhpbnRTYW1wbGVFbnRyeSAqIGhzZSwgZ3VpbnQ4ICoqIGJ1ZmZlciwKLSAgICBndWludDY0ICogc2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9zYW1wbGVfZW50cnlfY29weV9kYXRhICgmaHNlLT5zZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyIChoc2UtPnNpemUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQ4X2FycmF5IChoc2UtPmRhdGEsIGhzZS0+c2l6ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotc2FtcGxlX2VudHJ5X21wNGFfY29weV9kYXRhIChTYW1wbGVUYWJsZUVudHJ5TVA0QSAqIG1wNGEsIGd1aW50OCAqKiBidWZmZXIsCi0gICAgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fc2FtcGxlX2VudHJ5X2NvcHlfZGF0YSAoJm1wNGEtPnNlLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50MTYgKG1wNGEtPnZlcnNpb24sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAobXA0YS0+cmV2aXNpb25fbGV2ZWwsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAobXA0YS0+dmVuZG9yLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKG1wNGEtPmNoYW5uZWxzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKG1wNGEtPnNhbXBsZV9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKG1wNGEtPmNvbXByZXNzaW9uX2lkLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKG1wNGEtPnBhY2tldF9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKG1wNGEtPnNhbXBsZV9yYXRlLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgLyogdGhpcyBzaG91bGQgYWx3YXlzIGJlIDAgZm9yIG1wNCBmbGF2b3IgKi8KLSAgaWYgKG1wNGEtPnZlcnNpb24gPT0gMSkgewotICAgIHByb3BfY29weV91aW50MzIgKG1wNGEtPnNhbXBsZXNfcGVyX3BhY2tldCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50MzIgKG1wNGEtPmJ5dGVzX3Blcl9wYWNrZXQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyIChtcDRhLT5ieXRlc19wZXJfZnJhbWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyIChtcDRhLT5ieXRlc19wZXJfc2FtcGxlLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIH0KLQotICBpZiAobXA0YS0+ZXh0ZW5zaW9uX2F0b21zKSB7Ci0gICAgaWYgKCFhdG9tX2luZm9fbGlzdF9jb3B5X2RhdGEgKG1wNGEtPmV4dGVuc2lvbl9hdG9tcywgYnVmZmVyLCBzaXplLCBvZmZzZXQpKQotICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLXNhbXBsZV9lbnRyeV9tcDR2X2NvcHlfZGF0YSAoU2FtcGxlVGFibGVFbnRyeU1QNFYgKiBtcDR2LCBndWludDggKiogYnVmZmVyLAotICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX3NhbXBsZV9lbnRyeV9jb3B5X2RhdGEgKCZtcDR2LT5zZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDE2IChtcDR2LT52ZXJzaW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKG1wNHYtPnJldmlzaW9uX2xldmVsLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV9mb3VyY2MgKG1wNHYtPnZlbmRvciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChtcDR2LT50ZW1wb3JhbF9xdWFsaXR5LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKG1wNHYtPnNwYXRpYWxfcXVhbGl0eSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIHByb3BfY29weV91aW50MTYgKG1wNHYtPndpZHRoLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MTYgKG1wNHYtPmhlaWdodCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIHByb3BfY29weV91aW50MzIgKG1wNHYtPmhvcml6b250YWxfcmVzb2x1dGlvbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChtcDR2LT52ZXJ0aWNhbF9yZXNvbHV0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKG1wNHYtPmRhdGFzaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgcHJvcF9jb3B5X3VpbnQxNiAobXA0di0+ZnJhbWVfY291bnQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBwcm9wX2NvcHlfZml4ZWRfc2l6ZV9zdHJpbmcgKChndWludDggKikgbXA0di0+Y29tcHJlc3NvciwgMzIsIGJ1ZmZlciwgc2l6ZSwKLSAgICAgIG9mZnNldCk7Ci0KLSAgcHJvcF9jb3B5X3VpbnQxNiAobXA0di0+ZGVwdGgsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQxNiAobXA0di0+Y29sb3JfdGFibGVfaWQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICAvKiBleHRyYSBhdG9tcyAqLwotICBpZiAobXA0di0+ZXh0ZW5zaW9uX2F0b21zICYmCi0gICAgICAhYXRvbV9pbmZvX2xpc3RfY29weV9kYXRhIChtcDR2LT5leHRlbnNpb25fYXRvbXMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLXNhbXBsZV9lbnRyeV90eDNnX2NvcHlfZGF0YSAoU2FtcGxlVGFibGVFbnRyeVRYM0cgKiB0eDNnLCBndWludDggKiogYnVmZmVyLAotICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX3NhbXBsZV9lbnRyeV9jb3B5X2RhdGEgKCZ0eDNnLT5zZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyICh0eDNnLT5kaXNwbGF5X2ZsYWdzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgLyogcmVzZXJ2ZWQgKi8KLSAgcHJvcF9jb3B5X3VpbnQ4ICgxLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50OCAoLTEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAoMCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIHByb3BfY29weV91aW50NjQgKHR4M2ctPmRlZmF1bHRfdGV4dF9ib3gsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICAvKiByZXNlcnZlZCAqLwotICBwcm9wX2NvcHlfdWludDMyICgwLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgcHJvcF9jb3B5X3VpbnQxNiAodHgzZy0+Zm9udF9pZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDggKHR4M2ctPmZvbnRfZmFjZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDggKHR4M2ctPmZvbnRfc2l6ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyICh0eDNnLT5mb3JlZ3JvdW5kX2NvbG9yX3JnYmEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICAvKiBpdCBtdXN0IGhhdmUgYSBmb250dGFibGUgYXRvbSAqLwotICB7Ci0gICAgQXRvbSBhdG9tOwotCi0gICAgYXRvbV9oZWFkZXJfc2V0ICgmYXRvbSwgRk9VUkNDX2Z0YWIsIDE4LCAwKTsKLSAgICBpZiAoIWF0b21fY29weV9kYXRhICgmYXRvbSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgcHJvcF9jb3B5X3VpbnQxNiAoMSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOyAvKiBDb3VudCBtdXN0IGJlIDEgKi8KLSAgICBwcm9wX2NvcHlfdWludDE2ICgxLCBidWZmZXIsIHNpemUsIG9mZnNldCk7IC8qIEZvbnQgaWQ6IDEgKi8KLSAgICBwcm9wX2NvcHlfc2l6ZV9zdHJpbmcgKChndWludDggKikgIlNlcmlmIiwgNSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1zYW1wbGVfZW50cnlfdG1jZF9jb3B5X2RhdGEgKFNhbXBsZVRhYmxlRW50cnlUTUNEICogdG1jZCwgZ3VpbnQ4ICoqIGJ1ZmZlciwKLSAgICBndWludDY0ICogc2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9zYW1wbGVfZW50cnlfY29weV9kYXRhICgmdG1jZC0+c2UsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogcmVzZXJ2ZWQgKi8KLSAgcHJvcF9jb3B5X3VpbnQzMiAoMCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIHByb3BfY29weV91aW50MzIgKHRtY2QtPnRjX2ZsYWdzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKHRtY2QtPnRpbWVzY2FsZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyICh0bWNkLT5mcmFtZV9kdXJhdGlvbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDggKHRtY2QtPm5fZnJhbWVzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgLyogcmVzZXJ2ZWQgKi8KLSAgcHJvcF9jb3B5X3VpbnQ4ICgwLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHsKLSAgICBBdG9tIGF0b207Ci0gICAgZ3VpbnQ2NCBuYW1lX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgICBhdG9tX2hlYWRlcl9zZXQgKCZhdG9tLCBGT1VSQ0NfbmFtZSwgMCwgMCk7Ci0gICAgaWYgKCFhdG9tX2NvcHlfZGF0YSAoJmF0b20sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICAgIHJldHVybiAwOwotICAgIHByb3BfY29weV91aW50MTYgKHN0cmxlbiAodG1jZC0+bmFtZS5uYW1lKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50MTYgKHRtY2QtPm5hbWUubGFuZ3VhZ2VfY29kZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV9maXhlZF9zaXplX3N0cmluZyAoKGd1aW50OCAqKSB0bWNkLT5uYW1lLm5hbWUsCi0gICAgICAgIHN0cmxlbiAodG1jZC0+bmFtZS5uYW1lKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gICAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgbmFtZV9vZmZzZXQpOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLWd1aW50NjQKLWF0b21fc3Rzel9jb3B5X2RhdGEgKEF0b21TVFNaICogc3RzeiwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBndWludCBpOwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJnN0c3otPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyIChzdHN6LT5zYW1wbGVfc2l6ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChzdHN6LT50YWJsZV9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIGlmIChzdHN6LT5zYW1wbGVfc2l6ZSA9PSAwKSB7Ci0gICAgLyogbWluaW1pemUgcmVhbGxvYyAqLwotICAgIHByb3BfY29weV9lbnN1cmVfYnVmZmVyIChidWZmZXIsIHNpemUsIG9mZnNldCwgNCAqIHN0c3otPnRhYmxlX3NpemUpOwotICAgIC8qIGVudHJ5IGNvdW50IG11c3QgbWF0Y2ggc2FtcGxlIGNvdW50ICovCi0gICAgZ19hc3NlcnQgKGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0c3otPmVudHJpZXMpID09IHN0c3otPnRhYmxlX3NpemUpOwotICAgIGZvciAoaSA9IDA7IGkgPCBhdG9tX2FycmF5X2dldF9sZW4gKCZzdHN6LT5lbnRyaWVzKTsgaSsrKSB7Ci0gICAgICBwcm9wX2NvcHlfdWludDMyIChhdG9tX2FycmF5X2luZGV4ICgmc3Rzei0+ZW50cmllcywgaSksIGJ1ZmZlciwgc2l6ZSwKLSAgICAgICAgICBvZmZzZXQpOwotICAgIH0KLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1ndWludDY0Ci1hdG9tX3N0c2NfY29weV9kYXRhIChBdG9tU1RTQyAqIHN0c2MsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgZ3VpbnQgaTsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZzdHNjLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbV9hcnJheV9nZXRfbGVuICgmc3RzYy0+ZW50cmllcyksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgLyogbWluaW1pemUgcmVhbGxvYyAqLwotICBwcm9wX2NvcHlfZW5zdXJlX2J1ZmZlciAoYnVmZmVyLCBzaXplLCBvZmZzZXQsCi0gICAgICAxMiAqIGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0c2MtPmVudHJpZXMpKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXRvbV9hcnJheV9nZXRfbGVuICgmc3RzYy0+ZW50cmllcyk7IGkrKykgewotICAgIFNUU0NFbnRyeSAqZW50cnkgPSAmYXRvbV9hcnJheV9pbmRleCAoJnN0c2MtPmVudHJpZXMsIGkpOwotCi0gICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPmZpcnN0X2NodW5rLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPnNhbXBsZXNfcGVyX2NodW5rLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPnNhbXBsZV9kZXNjcmlwdGlvbl9pbmRleCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLWd1aW50NjQKLWF0b21fY3R0c19jb3B5X2RhdGEgKEF0b21DVFRTICogY3R0cywgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBndWludCBpOwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJmN0dHMtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyIChhdG9tX2FycmF5X2dldF9sZW4gKCZjdHRzLT5lbnRyaWVzKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAvKiBtaW5pbWl6ZSByZWFsbG9jICovCi0gIHByb3BfY29weV9lbnN1cmVfYnVmZmVyIChidWZmZXIsIHNpemUsIG9mZnNldCwKLSAgICAgIDggKiBhdG9tX2FycmF5X2dldF9sZW4gKCZjdHRzLT5lbnRyaWVzKSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBhdG9tX2FycmF5X2dldF9sZW4gKCZjdHRzLT5lbnRyaWVzKTsgaSsrKSB7Ci0gICAgQ1RUU0VudHJ5ICplbnRyeSA9ICZhdG9tX2FycmF5X2luZGV4ICgmY3R0cy0+ZW50cmllcywgaSk7Ci0KLSAgICBwcm9wX2NvcHlfdWludDMyIChlbnRyeS0+c2FtcGxlY291bnQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBwcm9wX2NvcHlfdWludDMyIChlbnRyeS0+c2FtcGxlb2Zmc2V0LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotZ3VpbnQ2NAotYXRvbV9zdGNvNjRfY29weV9kYXRhIChBdG9tU1RDTzY0ICogc3RjbzY0LCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0gIGd1aW50IGk7Ci0gIGdib29sZWFuIHRydW5jX3RvXzMyID0gc3RjbzY0LT5oZWFkZXIuaGVhZGVyLnR5cGUgPT0gRk9VUkNDX3N0Y287Ci0KLSAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgmc3RjbzY0LT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbV9hcnJheV9nZXRfbGVuICgmc3RjbzY0LT5lbnRyaWVzKSwgYnVmZmVyLCBzaXplLAotICAgICAgb2Zmc2V0KTsKLQotICAvKiBtaW5pbWl6ZSByZWFsbG9jICovCi0gIHByb3BfY29weV9lbnN1cmVfYnVmZmVyIChidWZmZXIsIHNpemUsIG9mZnNldCwKLSAgICAgIDggKiBhdG9tX2FycmF5X2dldF9sZW4gKCZzdGNvNjQtPmVudHJpZXMpKTsKLSAgZm9yIChpID0gMDsgaSA8IGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0Y282NC0+ZW50cmllcyk7IGkrKykgewotICAgIGd1aW50NjQgdmFsdWUgPQotICAgICAgICBhdG9tX2FycmF5X2luZGV4ICgmc3RjbzY0LT5lbnRyaWVzLCBpKSArIHN0Y282NC0+Y2h1bmtfb2Zmc2V0OwotCi0gICAgaWYgKHRydW5jX3RvXzMyKSB7Ci0gICAgICBwcm9wX2NvcHlfdWludDMyICgoZ3VpbnQzMikgdmFsdWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgcHJvcF9jb3B5X3VpbnQ2NCAodmFsdWUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICB9Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotZ3VpbnQ2NAotYXRvbV9zdHNzX2NvcHlfZGF0YSAoQXRvbVNUU1MgKiBzdHNzLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0gIGd1aW50IGk7Ci0KLSAgaWYgKGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0c3MtPmVudHJpZXMpID09IDApIHsKLSAgICAvKiBGSVhNRSBub3QgbmVlZGluZyB0aGlzIGF0b20gbWlnaHQgYmUgY29uZnVzZWQgd2l0aCBlcnJvciB3aGlsZSBjb3B5aW5nICovCi0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZzdHNzLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbV9hcnJheV9nZXRfbGVuICgmc3Rzcy0+ZW50cmllcyksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgLyogbWluaW1pemUgcmVhbGxvYyAqLwotICBwcm9wX2NvcHlfZW5zdXJlX2J1ZmZlciAoYnVmZmVyLCBzaXplLCBvZmZzZXQsCi0gICAgICA0ICogYXRvbV9hcnJheV9nZXRfbGVuICgmc3Rzcy0+ZW50cmllcykpOwotICBmb3IgKGkgPSAwOyBpIDwgYXRvbV9hcnJheV9nZXRfbGVuICgmc3Rzcy0+ZW50cmllcyk7IGkrKykgewotICAgIHByb3BfY29weV91aW50MzIgKGF0b21fYXJyYXlfaW5kZXggKCZzdHNzLT5lbnRyaWVzLCBpKSwgYnVmZmVyLCBzaXplLAotICAgICAgICBvZmZzZXQpOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3N0c2RfY29weV9kYXRhIChBdG9tU1RTRCAqIHN0c2QsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgR0xpc3QgKndhbGtlcjsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZzdHNkLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoc3RzZC0+bl9lbnRyaWVzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgZm9yICh3YWxrZXIgPSBnX2xpc3RfbGFzdCAoc3RzZC0+ZW50cmllcyk7IHdhbGtlciAhPSBOVUxMOwotICAgICAgd2Fsa2VyID0gZ19saXN0X3ByZXZpb3VzICh3YWxrZXIpKSB7Ci0gICAgU2FtcGxlVGFibGVFbnRyeSAqc2UgPSAoU2FtcGxlVGFibGVFbnRyeSAqKSB3YWxrZXItPmRhdGE7Ci0KLSAgICBzd2l0Y2ggKCgoQXRvbSAqKSB3YWxrZXItPmRhdGEpLT50eXBlKSB7Ci0gICAgICBjYXNlIEZPVVJDQ19tcDRhOgotICAgICAgICBpZiAoIXNhbXBsZV9lbnRyeV9tcDRhX2NvcHlfZGF0YSAoKFNhbXBsZVRhYmxlRW50cnlNUDRBICopIHdhbGtlci0+ZGF0YSwKLSAgICAgICAgICAgICAgICBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk9VUkNDX21wNHY6Ci0gICAgICAgIGlmICghc2FtcGxlX2VudHJ5X21wNHZfY29weV9kYXRhICgoU2FtcGxlVGFibGVFbnRyeU1QNFYgKikgd2Fsa2VyLT5kYXRhLAotICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKHNlLT5raW5kID09IFZJREVPKSB7Ci0gICAgICAgICAgaWYgKCFzYW1wbGVfZW50cnlfbXA0dl9jb3B5X2RhdGEgKChTYW1wbGVUYWJsZUVudHJ5TVA0ViAqKQotICAgICAgICAgICAgICAgICAgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzZS0+a2luZCA9PSBBVURJTykgewotICAgICAgICAgIGlmICghc2FtcGxlX2VudHJ5X21wNGFfY29weV9kYXRhICgoU2FtcGxlVGFibGVFbnRyeU1QNEEgKikKLSAgICAgICAgICAgICAgICAgIHdhbGtlci0+ZGF0YSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc2UtPmtpbmQgPT0gU1VCVElUTEUpIHsKLSAgICAgICAgICBpZiAoIXNhbXBsZV9lbnRyeV90eDNnX2NvcHlfZGF0YSAoKFNhbXBsZVRhYmxlRW50cnlUWDNHICopCi0gICAgICAgICAgICAgICAgICB3YWxrZXItPmRhdGEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNlLT5raW5kID09IFRJTUVDT0RFKSB7Ci0gICAgICAgICAgaWYgKCFzYW1wbGVfZW50cnlfdG1jZF9jb3B5X2RhdGEgKChTYW1wbGVUYWJsZUVudHJ5VE1DRCAqKQotICAgICAgICAgICAgICAgICAgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoIWF0b21faGludF9zYW1wbGVfZW50cnlfY29weV9kYXRhICgKLSAgICAgICAgICAgICAgICAgIChBdG9tSGludFNhbXBsZUVudHJ5ICopIHdhbGtlci0+ZGF0YSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3N0YmxfY29weV9kYXRhIChBdG9tU1RCTCAqIHN0YmwsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmc3RibC0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGlmICghYXRvbV9zdHNkX2NvcHlfZGF0YSAoJnN0YmwtPnN0c2QsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIGlmICghYXRvbV9zdHRzX2NvcHlfZGF0YSAoJnN0YmwtPnN0dHMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIC8qIHRoaXMgYXRvbSBpcyBvcHRpb25hbCwgc28gbGV0J3MgY2hlY2sgaWYgd2UgbmVlZCBpdAotICAgKiAodG8gYXZvaWQgZmFsc2UgZXJyb3IpICovCi0gIGlmIChhdG9tX2FycmF5X2dldF9sZW4gKCZzdGJsLT5zdHNzLmVudHJpZXMpKSB7Ci0gICAgaWYgKCFhdG9tX3N0c3NfY29weV9kYXRhICgmc3RibC0+c3RzcywgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBpZiAoIWF0b21fc3RzY19jb3B5X2RhdGEgKCZzdGJsLT5zdHNjLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21fc3Rzel9jb3B5X2RhdGEgKCZzdGJsLT5zdHN6LCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoc3RibC0+Y3R0cyAmJiBzdGJsLT5jdHRzLT5kb19wdHMpIHsKLSAgICBpZiAoIWF0b21fY3R0c19jb3B5X2RhdGEgKHN0YmwtPmN0dHMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0gIGlmICghYXRvbV9zdGNvNjRfY29weV9kYXRhICgmc3RibC0+c3RjbzY0LCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiBvcmlnaW5hbF9vZmZzZXQgLSAqb2Zmc2V0OwotfQotCi0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2RyZWZfY29weV9kYXRhIChBdG9tRFJFRiAqIGRyZWYsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgR0xpc3QgKndhbGtlcjsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZkcmVmLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoZ19saXN0X2xlbmd0aCAoZHJlZi0+ZW50cmllcyksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICB3YWxrZXIgPSBkcmVmLT5lbnRyaWVzOwotICB3aGlsZSAod2Fsa2VyICE9IE5VTEwpIHsKLSAgICBBdG9tICphdG9tID0gKEF0b20gKikgd2Fsa2VyLT5kYXRhOwotCi0gICAgaWYgKGF0b20tPnR5cGUgPT0gRk9VUkNDX3VybF8pIHsKLSAgICAgIGlmICghYXRvbV91cmxfY29weV9kYXRhICgoQXRvbVVSTCAqKSBhdG9tLCBidWZmZXIsIHNpemUsIG9mZnNldCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAoYXRvbS0+dHlwZSA9PSBGT1VSQ0NfYWxpcykgewotICAgICAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgoQXRvbUZ1bGwgKikgYXRvbSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICB9IGVsc2UgewotICAgICAgZ19lcnJvciAoIlVuc3VwcG9ydGVkIGF0b20gdXNlZCBpbnNpZGUgZHJlZiBhdG9tIik7Ci0gICAgfQotICAgIHdhbGtlciA9IGdfbGlzdF9uZXh0ICh3YWxrZXIpOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2RpbmZfY29weV9kYXRhIChBdG9tRElORiAqIGRpbmYsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmZGluZi0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGlmICghYXRvbV9kcmVmX2NvcHlfZGF0YSAoJmRpbmYtPmRyZWYsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuIG9yaWdpbmFsX29mZnNldCAtICpvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX21pbmZfY29weV9kYXRhIChBdG9tTUlORiAqIG1pbmYsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmbWluZi0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGlmIChtaW5mLT52bWhkKSB7Ci0gICAgaWYgKCFhdG9tX3ZtaGRfY29weV9kYXRhIChtaW5mLT52bWhkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfSBlbHNlIGlmIChtaW5mLT5zbWhkKSB7Ci0gICAgaWYgKCFhdG9tX3NtaGRfY29weV9kYXRhIChtaW5mLT5zbWhkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfSBlbHNlIGlmIChtaW5mLT5obWhkKSB7Ci0gICAgaWYgKCFhdG9tX2htaGRfY29weV9kYXRhIChtaW5mLT5obWhkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfSBlbHNlIGlmIChtaW5mLT5nbWhkKSB7Ci0gICAgaWYgKCFhdG9tX2dtaGRfY29weV9kYXRhIChtaW5mLT5nbWhkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotCi0gIGlmIChtaW5mLT5oZGxyKSB7Ci0gICAgaWYgKCFhdG9tX2hkbHJfY29weV9kYXRhIChtaW5mLT5oZGxyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotCi0gIGlmICghYXRvbV9kaW5mX2NvcHlfZGF0YSAoJm1pbmYtPmRpbmYsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIGlmICghYXRvbV9zdGJsX2NvcHlfZGF0YSAoJm1pbmYtPnN0YmwsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX21kaGRfY29weV9kYXRhIChBdG9tTURIRCAqIG1kaGQsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZtZGhkLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKCFjb21tb25fdGltZV9pbmZvX2NvcHlfZGF0YSAoJm1kaGQtPnRpbWVfaW5mbywKLSAgICAgICAgICBhdG9tX2Z1bGxfZ2V0X3ZlcnNpb24gKCZtZGhkLT5oZWFkZXIpID09IDAsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQxNiAobWRoZC0+bGFuZ3VhZ2VfY29kZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDE2IChtZGhkLT5xdWFsaXR5LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX21kaWFfY29weV9kYXRhIChBdG9tTURJQSAqIG1kaWEsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmbWRpYS0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21fbWRoZF9jb3B5X2RhdGEgKCZtZGlhLT5tZGhkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21faGRscl9jb3B5X2RhdGEgKCZtZGlhLT5oZGxyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGlmICghYXRvbV9taW5mX2NvcHlfZGF0YSAoJm1kaWEtPm1pbmYsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX2Vsc3RfY29weV9kYXRhIChBdG9tRUxTVCAqIGVsc3QsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgR1NMaXN0ICp3YWxrZXI7Ci0KLSAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgmZWxzdC0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50MzIgKGdfc2xpc3RfbGVuZ3RoIChlbHN0LT5lbnRyaWVzKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGZvciAod2Fsa2VyID0gZWxzdC0+ZW50cmllczsgd2Fsa2VyICE9IE5VTEw7IHdhbGtlciA9IGdfc2xpc3RfbmV4dCAod2Fsa2VyKSkgewotICAgIEVkaXRMaXN0RW50cnkgKmVudHJ5ID0gKEVkaXRMaXN0RW50cnkgKikgd2Fsa2VyLT5kYXRhOwotICAgIHByb3BfY29weV91aW50MzIgKGVudHJ5LT5kdXJhdGlvbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIHByb3BfY29weV91aW50MzIgKGVudHJ5LT5tZWRpYV90aW1lLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPm1lZGlhX3JhdGUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgfQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fdHJlZl9jb3B5X2RhdGEgKEF0b21UUkVGICogdHJlZiwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBndWludCBpOwotCi0gIGdfYXNzZXJ0IChhdG9tX2FycmF5X2dldF9sZW4gKCZ0cmVmLT5lbnRyaWVzKSA+IDApOwotCi0gIGlmICghYXRvbV9jb3B5X2RhdGEgKCZ0cmVmLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAoOCArIDQgKiBhdG9tX2FycmF5X2dldF9sZW4gKCZ0cmVmLT5lbnRyaWVzKSwgYnVmZmVyLCBzaXplLAotICAgICAgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X2ZvdXJjYyAodHJlZi0+cmVmdHlwZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAvKiBtaW5pbWl6ZSByZWFsbG9jICovCi0gIHByb3BfY29weV9lbnN1cmVfYnVmZmVyIChidWZmZXIsIHNpemUsIG9mZnNldCwKLSAgICAgIDQgKiBhdG9tX2FycmF5X2dldF9sZW4gKCZ0cmVmLT5lbnRyaWVzKSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBhdG9tX2FycmF5X2dldF9sZW4gKCZ0cmVmLT5lbnRyaWVzKTsgaSsrKSB7Ci0gICAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbV9hcnJheV9pbmRleCAoJnRyZWYtPmVudHJpZXMsIGkpLCBidWZmZXIsIHNpemUsCi0gICAgICAgIG9mZnNldCk7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fZWR0c19jb3B5X2RhdGEgKEF0b21FRFRTICogZWR0cywgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9jb3B5X2RhdGEgKCYoZWR0cy0+aGVhZGVyKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKQotICAgIHJldHVybiAwOwotCi0gIGlmICghYXRvbV9lbHN0X2NvcHlfZGF0YSAoJihlZHRzLT5lbHN0KSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKQotICAgIHJldHVybiAwOwotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV90YWdfZGF0YV9jb3B5X2RhdGEgKEF0b21UYWdEYXRhICogZGF0YSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJmRhdGEtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyIChkYXRhLT5yZXNlcnZlZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDhfYXJyYXkgKGRhdGEtPmRhdGEsIGRhdGEtPmRhdGFsZW4sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fdGFnX2NvcHlfZGF0YSAoQXRvbVRhZyAqIHRhZywgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9jb3B5X2RhdGEgKCZ0YWctPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpZiAoIWF0b21fdGFnX2RhdGFfY29weV9kYXRhICgmdGFnLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV9pbHN0X2NvcHlfZGF0YSAoQXRvbUlMU1QgKiBpbHN0LCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX2NvcHlfZGF0YSAoJmlsc3QtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgLyogZXh0cmEgYXRvbXMgKi8KLSAgaWYgKGlsc3QtPmVudHJpZXMgJiYKLSAgICAgICFhdG9tX2luZm9fbGlzdF9jb3B5X2RhdGEgKGlsc3QtPmVudHJpZXMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fbWV0YV9jb3B5X2RhdGEgKEF0b21NRVRBICogbWV0YSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJm1ldGEtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFhdG9tX2hkbHJfY29weV9kYXRhICgmbWV0YS0+aGRsciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKG1ldGEtPmlsc3QpIHsKLSAgICBpZiAoIWF0b21faWxzdF9jb3B5X2RhdGEgKG1ldGEtPmlsc3QsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3VkdGFfY29weV9kYXRhIChBdG9tVURUQSAqIHVkdGEsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmdWR0YS0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAodWR0YS0+bWV0YSkgewotICAgIGlmICghYXRvbV9tZXRhX2NvcHlfZGF0YSAodWR0YS0+bWV0YSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLSAgaWYgKHVkdGEtPmVudHJpZXMpIHsKLSAgICAvKiBleHRyYSBhdG9tcyAqLwotICAgIGlmICghYXRvbV9pbmZvX2xpc3RfY29weV9kYXRhICh1ZHRhLT5lbnRyaWVzLCBidWZmZXIsIHNpemUsIG9mZnNldCkpCi0gICAgICByZXR1cm4gMDsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV9tZWhkX2NvcHlfZGF0YSAoQXRvbU1FSEQgKiBtZWhkLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgmbWVoZC0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50NjQgKG1laGQtPmZyYWdtZW50X2R1cmF0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3RyZXhfY29weV9kYXRhIChBdG9tVFJFWCAqIHRyZXgsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZ0cmV4LT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAodHJleC0+dHJhY2tfSUQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAodHJleC0+ZGVmYXVsdF9zYW1wbGVfZGVzY3JpcHRpb25faW5kZXgsIGJ1ZmZlciwgc2l6ZSwKLSAgICAgIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKHRyZXgtPmRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKHRyZXgtPmRlZmF1bHRfc2FtcGxlX3NpemUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAodHJleC0+ZGVmYXVsdF9zYW1wbGVfZmxhZ3MsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fbXZleF9jb3B5X2RhdGEgKEF0b21NVkVYICogbXZleCwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBHTGlzdCAqd2Fsa2VyOwotCi0gIGlmICghYXRvbV9jb3B5X2RhdGEgKCZtdmV4LT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKCFhdG9tX21laGRfY29weV9kYXRhICgmbXZleC0+bWVoZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICB3YWxrZXIgPSBnX2xpc3RfZmlyc3QgKG12ZXgtPnRyZXhzKTsKLSAgd2hpbGUgKHdhbGtlciAhPSBOVUxMKSB7Ci0gICAgaWYgKCFhdG9tX3RyZXhfY29weV9kYXRhICgoQXRvbVRSRVggKikgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1ndWludDY0Ci1hdG9tX3RyYWtfY29weV9kYXRhIChBdG9tVFJBSyAqIHRyYWssIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmdHJhay0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21fdGtoZF9jb3B5X2RhdGEgKCZ0cmFrLT50a2hkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAodHJhay0+ZWR0cykgewotICAgIGlmICghYXRvbV9lZHRzX2NvcHlfZGF0YSAodHJhay0+ZWR0cywgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLSAgaWYgKHRyYWstPnRyZWYpIHsKLSAgICAvKiBNYWtlIHN1cmUgd2UgbmVlZCB0aGlzIGF0b20gKHRoZXJlIGlzIGEgcmVmZXJlbmNlZCB0cmFjayAqLwotICAgIGlmIChhdG9tX2FycmF5X2dldF9sZW4gKCZ0cmFrLT50cmVmLT5lbnRyaWVzKSA+IDApIHsKLSAgICAgIGlmICghYXRvbV90cmVmX2NvcHlfZGF0YSAodHJhay0+dHJlZiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICghYXRvbV9tZGlhX2NvcHlfZGF0YSAoJnRyYWstPm1kaWEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKCFhdG9tX3VkdGFfY29weV9kYXRhICgmdHJhay0+dWR0YSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotCi1ndWludDY0Ci1hdG9tX21vb3ZfY29weV9kYXRhIChBdG9tTU9PViAqIGF0b20sIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgR0xpc3QgKndhbGtlcjsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmKGF0b20tPmhlYWRlciksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICBpZiAoIWF0b21fbXZoZF9jb3B5X2RhdGEgKCYoYXRvbS0+bXZoZCksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICB3YWxrZXIgPSBnX2xpc3RfZmlyc3QgKGF0b20tPnRyYWtzKTsKLSAgd2hpbGUgKHdhbGtlciAhPSBOVUxMKSB7Ci0gICAgaWYgKCFhdG9tX3RyYWtfY29weV9kYXRhICgoQXRvbVRSQUsgKikgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotCi0gIGlmICghYXRvbV91ZHRhX2NvcHlfZGF0YSAoJmF0b20tPnVkdGEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKGF0b20tPmZyYWdtZW50ZWQpIHsKLSAgICBpZiAoIWF0b21fbXZleF9jb3B5X2RhdGEgKCZhdG9tLT5tdmV4LCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV93YXZlX2NvcHlfZGF0YSAoQXRvbVdBVkUgKiB3YXZlLCBndWludDggKiogYnVmZmVyLAotICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFhdG9tX2NvcHlfZGF0YSAoJih3YXZlLT5oZWFkZXIpLCBidWZmZXIsIHNpemUsIG9mZnNldCkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKHdhdmUtPmV4dGVuc2lvbl9hdG9tcykgewotICAgIGlmICghYXRvbV9pbmZvX2xpc3RfY29weV9kYXRhICh3YXZlLT5leHRlbnNpb25fYXRvbXMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLS8qIC0tIGVuZCBvZiBjb3B5IGRhdGEgZnVuY3Rpb25zIC0tICovCi0KLS8qIC0tIGdlbmVyYWwgZnVuY3Rpb25zLCBBUEkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zICovCi0KLS8qIGFkZCBzYW1wbGVzIHRvIHRhYmxlcyAqLwotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHNjX2FkZF9uZXdfZW50cnkgKEF0b21TVFNDICogc3RzYywgZ3VpbnQzMiBmaXJzdF9jaHVuaywgZ3VpbnQzMiBuc2FtcGxlcykKLXsKLSAgU1RTQ0VudHJ5IG5lbnRyeTsKLSAgZ2ludCBsZW47Ci0KLSAgaWYgKChsZW4gPSBhdG9tX2FycmF5X2dldF9sZW4gKCZzdHNjLT5lbnRyaWVzKSkgJiYKLSAgICAgICgoYXRvbV9hcnJheV9pbmRleCAoJnN0c2MtPmVudHJpZXMsIGxlbiAtIDEpKS5zYW1wbGVzX3Blcl9jaHVuayA9PQotICAgICAgICAgIG5zYW1wbGVzKSkKLSAgICByZXR1cm47Ci0KLSAgbmVudHJ5LmZpcnN0X2NodW5rID0gZmlyc3RfY2h1bms7Ci0gIG5lbnRyeS5zYW1wbGVzX3Blcl9jaHVuayA9IG5zYW1wbGVzOwotICBuZW50cnkuc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4ID0gMTsKLSAgYXRvbV9hcnJheV9hcHBlbmQgKCZzdHNjLT5lbnRyaWVzLCBuZW50cnksIDEyOCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3N0dHNfYWRkX2VudHJ5IChBdG9tU1RUUyAqIHN0dHMsIGd1aW50MzIgc2FtcGxlX2NvdW50LCBnaW50MzIgc2FtcGxlX2RlbHRhKQotewotICBTVFRTRW50cnkgKmVudHJ5ID0gTlVMTDsKLQotICBpZiAoR19MSUtFTFkgKGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0dHMtPmVudHJpZXMpICE9IDApKQotICAgIGVudHJ5ID0gJmF0b21fYXJyYXlfaW5kZXggKCZzdHRzLT5lbnRyaWVzLAotICAgICAgICBhdG9tX2FycmF5X2dldF9sZW4gKCZzdHRzLT5lbnRyaWVzKSAtIDEpOwotCi0gIGlmIChlbnRyeSAmJiBlbnRyeS0+c2FtcGxlX2RlbHRhID09IHNhbXBsZV9kZWx0YSkgewotICAgIGVudHJ5LT5zYW1wbGVfY291bnQgKz0gc2FtcGxlX2NvdW50OwotICB9IGVsc2UgewotICAgIFNUVFNFbnRyeSBuZW50cnk7Ci0KLSAgICBuZW50cnkuc2FtcGxlX2NvdW50ID0gc2FtcGxlX2NvdW50OwotICAgIG5lbnRyeS5zYW1wbGVfZGVsdGEgPSBzYW1wbGVfZGVsdGE7Ci0gICAgYXRvbV9hcnJheV9hcHBlbmQgKCZzdHRzLT5lbnRyaWVzLCBuZW50cnksIDI1Nik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc3Rzel9hZGRfZW50cnkgKEF0b21TVFNaICogc3RzeiwgZ3VpbnQzMiBuc2FtcGxlcywgZ3VpbnQzMiBzaXplKQotewotICBndWludDMyIGk7Ci0KLSAgc3Rzei0+dGFibGVfc2l6ZSArPSBuc2FtcGxlczsKLSAgaWYgKHN0c3otPnNhbXBsZV9zaXplICE9IDApIHsKLSAgICAvKiBpdCBpcyBjb25zdGFudCBzaXplLCB3ZSBkb24ndCBuZWVkIGVudHJpZXMgKi8KLSAgICByZXR1cm47Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IG5zYW1wbGVzOyBpKyspIHsKLSAgICBhdG9tX2FycmF5X2FwcGVuZCAoJnN0c3otPmVudHJpZXMsIHNpemUsIDEwMjQpOwotICB9Ci19Ci0KLXN0YXRpYyBndWludDMyCi1hdG9tX3N0Y282NF9nZXRfZW50cnlfY291bnQgKEF0b21TVENPNjQgKiBzdGNvNjQpCi17Ci0gIHJldHVybiBhdG9tX2FycmF5X2dldF9sZW4gKCZzdGNvNjQtPmVudHJpZXMpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdGNvNjRfYWRkX2VudHJ5IChBdG9tU1RDTzY0ICogc3RjbzY0LCBndWludDY0IGVudHJ5KQotewotICBhdG9tX2FycmF5X2FwcGVuZCAoJnN0Y282NC0+ZW50cmllcywgZW50cnksIDI1Nik7Ci0gIGlmIChlbnRyeSA+IEdfTUFYVUlOVDMyKQotICAgIHN0Y282NC0+aGVhZGVyLmhlYWRlci50eXBlID0gRk9VUkNDX2NvNjQ7Ci19Ci0KLXZvaWQKLWF0b21fdHJlZl9hZGRfZW50cnkgKEF0b21UUkVGICogdHJlZiwgZ3VpbnQzMiBzYW1wbGUpCi17Ci0gIGF0b21fYXJyYXlfYXBwZW5kICgmdHJlZi0+ZW50cmllcywgc2FtcGxlLCA1MTIpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zdHNzX2FkZF9lbnRyeSAoQXRvbVNUU1MgKiBzdHNzLCBndWludDMyIHNhbXBsZSkKLXsKLSAgYXRvbV9hcnJheV9hcHBlbmQgKCZzdHNzLT5lbnRyaWVzLCBzYW1wbGUsIDUxMik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3N0YmxfYWRkX3N0c3NfZW50cnkgKEF0b21TVEJMICogc3RibCkKLXsKLSAgZ3VpbnQzMiBzYW1wbGVfaW5kZXggPSBzdGJsLT5zdHN6LnRhYmxlX3NpemU7Ci0KLSAgYXRvbV9zdHNzX2FkZF9lbnRyeSAoJnN0YmwtPnN0c3MsIHNhbXBsZV9pbmRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX2N0dHNfYWRkX2VudHJ5IChBdG9tQ1RUUyAqIGN0dHMsIGd1aW50MzIgbnNhbXBsZXMsIGd1aW50MzIgb2Zmc2V0KQotewotICBDVFRTRW50cnkgKmVudHJ5ID0gTlVMTDsKLQotICBpZiAoR19MSUtFTFkgKGF0b21fYXJyYXlfZ2V0X2xlbiAoJmN0dHMtPmVudHJpZXMpICE9IDApKQotICAgIGVudHJ5ID0gJmF0b21fYXJyYXlfaW5kZXggKCZjdHRzLT5lbnRyaWVzLAotICAgICAgICBhdG9tX2FycmF5X2dldF9sZW4gKCZjdHRzLT5lbnRyaWVzKSAtIDEpOwotCi0gIGlmIChlbnRyeSA9PSBOVUxMIHx8IGVudHJ5LT5zYW1wbGVvZmZzZXQgIT0gb2Zmc2V0KSB7Ci0gICAgQ1RUU0VudHJ5IG5lbnRyeTsKLQotICAgIG5lbnRyeS5zYW1wbGVjb3VudCA9IG5zYW1wbGVzOwotICAgIG5lbnRyeS5zYW1wbGVvZmZzZXQgPSBvZmZzZXQ7Ci0gICAgYXRvbV9hcnJheV9hcHBlbmQgKCZjdHRzLT5lbnRyaWVzLCBuZW50cnksIDI1Nik7Ci0gICAgaWYgKG9mZnNldCAhPSAwKQotICAgICAgY3R0cy0+ZG9fcHRzID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBlbnRyeS0+c2FtcGxlY291bnQgKz0gbnNhbXBsZXM7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc3RibF9hZGRfY3R0c19lbnRyeSAoQXRvbVNUQkwgKiBzdGJsLCBndWludDMyIG5zYW1wbGVzLCBndWludDMyIG9mZnNldCkKLXsKLSAgaWYgKHN0YmwtPmN0dHMgPT0gTlVMTCkgewotICAgIHN0YmwtPmN0dHMgPSBhdG9tX2N0dHNfbmV3ICgpOwotICB9Ci0gIGF0b21fY3R0c19hZGRfZW50cnkgKHN0YmwtPmN0dHMsIG5zYW1wbGVzLCBvZmZzZXQpOwotfQotCi12b2lkCi1hdG9tX3N0YmxfYWRkX3NhbXBsZXMgKEF0b21TVEJMICogc3RibCwgZ3VpbnQzMiBuc2FtcGxlcywgZ3VpbnQzMiBkZWx0YSwKLSAgICBndWludDMyIHNpemUsIGd1aW50NjQgY2h1bmtfb2Zmc2V0LCBnYm9vbGVhbiBzeW5jLCBnaW50NjQgcHRzX29mZnNldCkKLXsKLSAgYXRvbV9zdHRzX2FkZF9lbnRyeSAoJnN0YmwtPnN0dHMsIG5zYW1wbGVzLCBkZWx0YSk7Ci0gIGF0b21fc3Rzel9hZGRfZW50cnkgKCZzdGJsLT5zdHN6LCBuc2FtcGxlcywgc2l6ZSk7Ci0gIGF0b21fc3RjbzY0X2FkZF9lbnRyeSAoJnN0YmwtPnN0Y282NCwgY2h1bmtfb2Zmc2V0KTsKLSAgYXRvbV9zdHNjX2FkZF9uZXdfZW50cnkgKCZzdGJsLT5zdHNjLAotICAgICAgYXRvbV9zdGNvNjRfZ2V0X2VudHJ5X2NvdW50ICgmc3RibC0+c3RjbzY0KSwgbnNhbXBsZXMpOwotICBpZiAoc3luYykKLSAgICBhdG9tX3N0YmxfYWRkX3N0c3NfZW50cnkgKHN0YmwpOwotICAvKiBhbHdheXMgc3RvcmUgdG8gYXJyYW5nZSBmb3IgY29uc2lzdGVudCBjb250ZW50ICovCi0gIGF0b21fc3RibF9hZGRfY3R0c19lbnRyeSAoc3RibCwgbnNhbXBsZXMsIHB0c19vZmZzZXQpOwotfQotCi12b2lkCi1hdG9tX3RyYWtfYWRkX3NhbXBsZXMgKEF0b21UUkFLICogdHJhaywgZ3VpbnQzMiBuc2FtcGxlcywgZ3VpbnQzMiBkZWx0YSwKLSAgICBndWludDMyIHNpemUsIGd1aW50NjQgY2h1bmtfb2Zmc2V0LCBnYm9vbGVhbiBzeW5jLCBnaW50NjQgcHRzX29mZnNldCkKLXsKLSAgQXRvbVNUQkwgKnN0YmwgPSAmdHJhay0+bWRpYS5taW5mLnN0Ymw7Ci0gIGF0b21fc3RibF9hZGRfc2FtcGxlcyAoc3RibCwgbnNhbXBsZXMsIGRlbHRhLCBzaXplLCBjaHVua19vZmZzZXQsIHN5bmMsCi0gICAgICBwdHNfb2Zmc2V0KTsKLX0KLQotLyogdHJhayBhbmQgbW9vdiBtb2xkaW5nICovCi0KLWd1aW50MzIKLWF0b21fdHJha19nZXRfdGltZXNjYWxlIChBdG9tVFJBSyAqIHRyYWspCi17Ci0gIHJldHVybiB0cmFrLT5tZGlhLm1kaGQudGltZV9pbmZvLnRpbWVzY2FsZTsKLX0KLQotZ3VpbnQzMgotYXRvbV90cmFrX2dldF9pZCAoQXRvbVRSQUsgKiB0cmFrKQotewotICByZXR1cm4gdHJhay0+dGtoZC50cmFja19JRDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJha19zZXRfaWQgKEF0b21UUkFLICogdHJhaywgZ3VpbnQzMiBpZCkKLXsKLSAgdHJhay0+dGtoZC50cmFja19JRCA9IGlkOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9tb292X2FkZF90cmV4IChBdG9tTU9PViAqIG1vb3YsIEF0b21UUkVYICogdHJleCkKLXsKLSAgbW9vdi0+bXZleC50cmV4cyA9IGdfbGlzdF9hcHBlbmQgKG1vb3YtPm12ZXgudHJleHMsIHRyZXgpOwotfQotCi1zdGF0aWMgQXRvbVRSRVggKgotYXRvbV90cmV4X25ldyAoQXRvbVRSQUsgKiB0cmFrKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLSAgQXRvbVRSRVggKnRyZXggPSBnX25ldzAgKEF0b21UUkVYLCAxKTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJnRyZXgtPmhlYWRlciwgRk9VUkNDX3RyZXgsIDAsIDAsIDAsIGZsYWdzKTsKLQotICB0cmV4LT50cmFja19JRCA9IHRyYWstPnRraGQudHJhY2tfSUQ7Ci0gIHRyZXgtPmRlZmF1bHRfc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4ID0gMTsKLSAgdHJleC0+ZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24gPSAwOwotICB0cmV4LT5kZWZhdWx0X3NhbXBsZV9zaXplID0gMDsKLSAgdHJleC0+ZGVmYXVsdF9zYW1wbGVfZmxhZ3MgPSAwOwotCi0gIHJldHVybiB0cmV4OwotfQotCi12b2lkCi1hdG9tX21vb3ZfYWRkX3RyYWsgKEF0b21NT09WICogbW9vdiwgQXRvbVRSQUsgKiB0cmFrKQotewotICBhdG9tX3RyYWtfc2V0X2lkICh0cmFrLCBtb292LT5tdmhkLm5leHRfdHJhY2tfaWQrKyk7Ci0gIG1vb3YtPnRyYWtzID0gZ19saXN0X2FwcGVuZCAobW9vdi0+dHJha3MsIHRyYWspOwotICAvKiBhZGRpdGlvbmFsIHRyYWsgbWVhbnMgYWxzbyBuZXcgdHJleCAqLwotICBhdG9tX21vb3ZfYWRkX3RyZXggKG1vb3YsIGF0b21fdHJleF9uZXcgKHRyYWspKTsKLX0KLQotZ3VpbnQKLWF0b21fbW9vdl9nZXRfdHJha19jb3VudCAoQXRvbU1PT1YgKiBtb292KQotewotICByZXR1cm4gZ19saXN0X2xlbmd0aCAobW9vdi0+dHJha3MpOwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV90cmFrX2dldF9kdXJhdGlvbiAoQXRvbVRSQUsgKiB0cmFrKQotewotICByZXR1cm4gdHJhay0+dGtoZC5kdXJhdGlvbjsKLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fc3R0c19nZXRfdG90YWxfZHVyYXRpb24gKEF0b21TVFRTICogc3R0cykKLXsKLSAgZ3VpbnQgaTsKLSAgZ3VpbnQ2NCBzdW0gPSAwOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhdG9tX2FycmF5X2dldF9sZW4gKCZzdHRzLT5lbnRyaWVzKTsgaSsrKSB7Ci0gICAgU1RUU0VudHJ5ICplbnRyeSA9ICZhdG9tX2FycmF5X2luZGV4ICgmc3R0cy0+ZW50cmllcywgaSk7Ci0KLSAgICBzdW0gKz0gKGd1aW50NjQpIChlbnRyeS0+c2FtcGxlX2NvdW50KSAqIGVudHJ5LT5zYW1wbGVfZGVsdGE7Ci0gIH0KLSAgcmV0dXJuIHN1bTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJha191cGRhdGVfZHVyYXRpb24gKEF0b21UUkFLICogdHJhaywgZ3VpbnQ2NCBtb292X3RpbWVzY2FsZSkKLXsKLSAgdHJhay0+bWRpYS5tZGhkLnRpbWVfaW5mby5kdXJhdGlvbiA9Ci0gICAgICBhdG9tX3N0dHNfZ2V0X3RvdGFsX2R1cmF0aW9uICgmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3R0cyk7Ci0gIGlmICh0cmFrLT5tZGlhLm1kaGQudGltZV9pbmZvLnRpbWVzY2FsZSAhPSAwKSB7Ci0gICAgdHJhay0+dGtoZC5kdXJhdGlvbiA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAodHJhay0+bWRpYS5tZGhkLnRpbWVfaW5mby5kdXJhdGlvbiwKLSAgICAgICAgbW9vdl90aW1lc2NhbGUsIHRyYWstPm1kaWEubWRoZC50aW1lX2luZm8udGltZXNjYWxlKTsKLSAgfSBlbHNlIHsKLSAgICB0cmFrLT50a2hkLmR1cmF0aW9uID0gMDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotdGltZWNvZGVfYXRvbV90cmFrX3NldF9kdXJhdGlvbiAoQXRvbVRSQUsgKiB0cmFrLCBndWludDY0IGR1cmF0aW9uLAotICAgIGd1aW50NjQgdGltZXNjYWxlKQotewotICBTVFRTRW50cnkgKmVudHJ5OwotICBHTGlzdCAqaXRlcjsKLQotICAvKiBTYW5pdHkgY2hlY2tzIHRvIGVuc3VyZSB3ZSBoYXZlIGEgdGltZWNvZGUgKi8KLSAgZ19hc3NlcnQgKHRyYWstPm1kaWEubWluZi5nbWhkICE9IE5VTEwpOwotICBnX2Fzc2VydCAoYXRvbV9hcnJheV9nZXRfbGVuICgmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3R0cy5lbnRyaWVzKSA9PSAxKTsKLQotICBmb3IgKGl0ZXIgPSB0cmFrLT5tZGlhLm1pbmYuc3RibC5zdHNkLmVudHJpZXM7IGl0ZXI7Ci0gICAgICBpdGVyID0gZ19saXN0X25leHQgKGl0ZXIpKSB7Ci0gICAgU2FtcGxlVGFibGVFbnRyeSAqZW50cnkgPSBpdGVyLT5kYXRhOwotICAgIGlmIChlbnRyeS0+a2luZCA9PSBUSU1FQ09ERSkgewotICAgICAgU2FtcGxlVGFibGVFbnRyeVRNQ0QgKnRtY2QgPSAoU2FtcGxlVGFibGVFbnRyeVRNQ0QgKikgZW50cnk7Ci0KLSAgICAgIGR1cmF0aW9uID0gZHVyYXRpb24gKiB0bWNkLT50aW1lc2NhbGUgLyB0aW1lc2NhbGU7Ci0gICAgICB0aW1lc2NhbGUgPSB0bWNkLT50aW1lc2NhbGU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICB0cmFrLT50a2hkLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gIHRyYWstPm1kaWEubWRoZC50aW1lX2luZm8uZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgdHJhay0+bWRpYS5tZGhkLnRpbWVfaW5mby50aW1lc2NhbGUgPSB0aW1lc2NhbGU7Ci0KLSAgZW50cnkgPSAmYXRvbV9hcnJheV9pbmRleCAoJnRyYWstPm1kaWEubWluZi5zdGJsLnN0dHMuZW50cmllcywgMCk7Ci0gIGVudHJ5LT5zYW1wbGVfZGVsdGEgPSBkdXJhdGlvbjsKLX0KLQotc3RhdGljIGd1aW50MzIKLWF0b21fbW9vdl9nZXRfdGltZXNjYWxlIChBdG9tTU9PViAqIG1vb3YpCi17Ci0gIHJldHVybiBtb292LT5tdmhkLnRpbWVfaW5mby50aW1lc2NhbGU7Ci19Ci0KLXZvaWQKLWF0b21fbW9vdl91cGRhdGVfdGltZXNjYWxlIChBdG9tTU9PViAqIG1vb3YsIGd1aW50MzIgdGltZXNjYWxlKQotewotICBtb292LT5tdmhkLnRpbWVfaW5mby50aW1lc2NhbGUgPSB0aW1lc2NhbGU7Ci19Ci0KLXZvaWQKLWF0b21fbW9vdl91cGRhdGVfZHVyYXRpb24gKEF0b21NT09WICogbW9vdikKLXsKLSAgR0xpc3QgKnRyYWtzID0gbW9vdi0+dHJha3M7Ci0gIGd1aW50NjQgZHVyLCBkdXJhdGlvbiA9IDA7Ci0KLSAgd2hpbGUgKHRyYWtzKSB7Ci0gICAgQXRvbVRSQUsgKnRyYWsgPSAoQXRvbVRSQUsgKikgdHJha3MtPmRhdGE7Ci0KLSAgICAvKiBTa2lwIHRpbWVjb2RlcyBmb3Igbm93OiB0aGV5IGhhdmUgYSBwbGFjZWhvbGRlciBkdXJhdGlvbiAqLwotICAgIGlmICh0cmFrLT5tZGlhLm1pbmYuZ21oZCA9PSBOVUxMKSB7Ci0gICAgICBhdG9tX3RyYWtfdXBkYXRlX2R1cmF0aW9uICh0cmFrLCBhdG9tX21vb3ZfZ2V0X3RpbWVzY2FsZSAobW9vdikpOwotICAgICAgZHVyID0gYXRvbV90cmFrX2dldF9kdXJhdGlvbiAodHJhayk7Ci0gICAgICBpZiAoZHVyID4gZHVyYXRpb24pCi0gICAgICAgIGR1cmF0aW9uID0gZHVyOwotICAgIH0KLSAgICB0cmFrcyA9IGdfbGlzdF9uZXh0ICh0cmFrcyk7Ci0gIH0KLSAgLyogTm93IHVwZGF0ZSB0aGUgZHVyYXRpb24gb2YgdGhlIHRpbWVjb2RlcyAqLwotICB0cmFrcyA9IG1vb3YtPnRyYWtzOwotICB3aGlsZSAodHJha3MpIHsKLSAgICBBdG9tVFJBSyAqdHJhayA9IChBdG9tVFJBSyAqKSB0cmFrcy0+ZGF0YTsKLQotICAgIGlmICh0cmFrLT5tZGlhLm1pbmYuZ21oZCAhPSBOVUxMKQotICAgICAgdGltZWNvZGVfYXRvbV90cmFrX3NldF9kdXJhdGlvbiAodHJhaywgZHVyYXRpb24sCi0gICAgICAgICAgYXRvbV9tb292X2dldF90aW1lc2NhbGUgKG1vb3YpKTsKLSAgICB0cmFrcyA9IGdfbGlzdF9uZXh0ICh0cmFrcyk7Ci0gIH0KLSAgbW9vdi0+bXZoZC50aW1lX2luZm8uZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgbW9vdi0+bXZleC5tZWhkLmZyYWdtZW50X2R1cmF0aW9uID0gZHVyYXRpb247Ci19Ci0KLXZvaWQKLWF0b21fbW9vdl9zZXRfZnJhZ21lbnRlZCAoQXRvbU1PT1YgKiBtb292LCBnYm9vbGVhbiBmcmFnbWVudGVkKQotewotICBtb292LT5mcmFnbWVudGVkID0gZnJhZ21lbnRlZDsKLX0KLQotdm9pZAotYXRvbV9zdGNvNjRfY2h1bmtzX3NldF9vZmZzZXQgKEF0b21TVENPNjQgKiBzdGNvNjQsIGd1aW50MzIgb2Zmc2V0KQotewotICBzdGNvNjQtPmNodW5rX29mZnNldCA9IG9mZnNldDsKLX0KLQotdm9pZAotYXRvbV9tb292X2NodW5rc19zZXRfb2Zmc2V0IChBdG9tTU9PViAqIG1vb3YsIGd1aW50MzIgb2Zmc2V0KQotewotICBHTGlzdCAqdHJha3MgPSBtb292LT50cmFrczsKLQotICBpZiAob2Zmc2V0ID09IG1vb3YtPmNodW5rc19vZmZzZXQpCi0gICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KLQotICB3aGlsZSAodHJha3MpIHsKLSAgICBBdG9tVFJBSyAqdHJhayA9IChBdG9tVFJBSyAqKSB0cmFrcy0+ZGF0YTsKLQotICAgIGF0b21fc3RjbzY0X2NodW5rc19zZXRfb2Zmc2V0ICgmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3RjbzY0LCBvZmZzZXQpOwotICAgIHRyYWtzID0gZ19saXN0X25leHQgKHRyYWtzKTsKLSAgfQotCi0gIG1vb3YtPmNodW5rc19vZmZzZXQgPSBvZmZzZXQ7Ci19Ci0KLXZvaWQKLWF0b21fdHJha191cGRhdGVfYml0cmF0ZXMgKEF0b21UUkFLICogdHJhaywgZ3VpbnQzMiBhdmdfYml0cmF0ZSwKLSAgICBndWludDMyIG1heF9iaXRyYXRlKQotewotICBBdG9tRVNEUyAqZXNkcyA9IE5VTEw7Ci0gIEF0b21EYXRhICpidHJ0ID0gTlVMTDsKLSAgQXRvbVdBVkUgKndhdmUgPSBOVUxMOwotICBBdG9tU1RTRCAqc3RzZDsKLSAgR0xpc3QgKml0ZXI7Ci0gIEdMaXN0ICpleHRlbnNpb25pdGVyID0gTlVMTDsKLQotICBnX3JldHVybl9pZl9mYWlsICh0cmFrICE9IE5VTEwpOwotCi0gIGlmIChhdmdfYml0cmF0ZSA9PSAwICYmIG1heF9iaXRyYXRlID09IDApCi0gICAgcmV0dXJuOwotCi0gIHN0c2QgPSAmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3RzZDsKLSAgZm9yIChpdGVyID0gc3RzZC0+ZW50cmllczsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0IChpdGVyKSkgewotICAgIFNhbXBsZVRhYmxlRW50cnkgKmVudHJ5ID0gaXRlci0+ZGF0YTsKLQotICAgIHN3aXRjaCAoZW50cnktPmtpbmQpIHsKLSAgICAgIGNhc2UgQVVESU86ewotICAgICAgICBTYW1wbGVUYWJsZUVudHJ5TVA0QSAqYXVkaW9lbnRyeSA9IChTYW1wbGVUYWJsZUVudHJ5TVA0QSAqKSBlbnRyeTsKLSAgICAgICAgZXh0ZW5zaW9uaXRlciA9IGF1ZGlvZW50cnktPmV4dGVuc2lvbl9hdG9tczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFZJREVPOnsKLSAgICAgICAgU2FtcGxlVGFibGVFbnRyeU1QNFYgKnZpZGVvZW50cnkgPSAoU2FtcGxlVGFibGVFbnRyeU1QNFYgKikgZW50cnk7Ci0gICAgICAgIGV4dGVuc2lvbml0ZXIgPSB2aWRlb2VudHJ5LT5leHRlbnNpb25fYXRvbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgZm9yICg7IGV4dGVuc2lvbml0ZXI7IGV4dGVuc2lvbml0ZXIgPSBnX2xpc3RfbmV4dCAoZXh0ZW5zaW9uaXRlcikpIHsKLSAgICBBdG9tSW5mbyAqYXRvbWluZm8gPSBleHRlbnNpb25pdGVyLT5kYXRhOwotICAgIGlmIChhdG9taW5mby0+YXRvbS0+dHlwZSA9PSBGT1VSQ0NfZXNkcykgewotICAgICAgZXNkcyA9IChBdG9tRVNEUyAqKSBhdG9taW5mby0+YXRvbTsKLSAgICB9IGVsc2UgaWYgKGF0b21pbmZvLT5hdG9tLT50eXBlID09IEZPVVJDQ19idHJ0KSB7Ci0gICAgICBidHJ0ID0gKEF0b21EYXRhICopIGF0b21pbmZvLT5hdG9tOwotICAgIH0gZWxzZSBpZiAoYXRvbWluZm8tPmF0b20tPnR5cGUgPT0gRk9VUkNDX3dhdmUpIHsKLSAgICAgIHdhdmUgPSAoQXRvbVdBVkUgKikgYXRvbWluZm8tPmF0b207Ci0gICAgfQotICB9Ci0KLSAgLyogd2F2ZSBtaWdodCBoYXZlIGFuIGVzZHMgaW50ZXJuYWxseSAqLwotICBpZiAod2F2ZSkgewotICAgIGZvciAoZXh0ZW5zaW9uaXRlciA9IHdhdmUtPmV4dGVuc2lvbl9hdG9tczsgZXh0ZW5zaW9uaXRlcjsKLSAgICAgICAgZXh0ZW5zaW9uaXRlciA9IGdfbGlzdF9uZXh0IChleHRlbnNpb25pdGVyKSkgewotICAgICAgQXRvbUluZm8gKmF0b21pbmZvID0gZXh0ZW5zaW9uaXRlci0+ZGF0YTsKLSAgICAgIGlmIChhdG9taW5mby0+YXRvbS0+dHlwZSA9PSBGT1VSQ0NfZXNkcykgewotICAgICAgICBlc2RzID0gKEF0b21FU0RTICopIGF0b21pbmZvLT5hdG9tOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoZXNkcykgewotICAgIGlmIChhdmdfYml0cmF0ZSAmJiBlc2RzLT5lcy5kZWNfY29uZl9kZXNjLmF2Z19iaXRyYXRlID09IDApCi0gICAgICBlc2RzLT5lcy5kZWNfY29uZl9kZXNjLmF2Z19iaXRyYXRlID0gYXZnX2JpdHJhdGU7Ci0gICAgaWYgKG1heF9iaXRyYXRlICYmIGVzZHMtPmVzLmRlY19jb25mX2Rlc2MubWF4X2JpdHJhdGUgPT0gMCkKLSAgICAgIGVzZHMtPmVzLmRlY19jb25mX2Rlc2MubWF4X2JpdHJhdGUgPSBtYXhfYml0cmF0ZTsKLSAgfQotICBpZiAoYnRydCkgewotICAgIC8qIHR5cGUoNGJ5dGVzKSArIHNpemUoNGJ5dGVzKSArIGJ1ZmZlcnNpemUoNGJ5dGVzKSArCi0gICAgICogbWF4Yml0cmF0ZShieXRlcykgKyBhdmdiaXRyYXRlKGJ5dGVzKSAqLwotICAgIGlmIChtYXhfYml0cmF0ZSAmJiBHU1RfUkVBRF9VSU5UMzJfQkUgKGJ0cnQtPmRhdGEgKyA0KSA9PSAwKQotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoYnRydC0+ZGF0YSArIDQsIG1heF9iaXRyYXRlKTsKLSAgICBpZiAoYXZnX2JpdHJhdGUgJiYgR1NUX1JFQURfVUlOVDMyX0JFIChidHJ0LT5kYXRhICsgOCkgPT0gMCkKLSAgICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKGJ0cnQtPmRhdGEgKyA4LCBhdmdfYml0cmF0ZSk7Ci0gIH0KLX0KLQotdm9pZAotYXRvbV90cmFrX3R4M2dfdXBkYXRlX2RpbWVuc2lvbiAoQXRvbVRSQUsgKiB0cmFrLCBndWludDMyIHdpZHRoLCBndWludDMyIGhlaWdodCkKLXsKLSAgQXRvbVNUU0QgKnN0c2Q7Ci0gIEdMaXN0ICppdGVyOwotICBTYW1wbGVUYWJsZUVudHJ5VFgzRyAqdHgzZyA9IE5VTEw7Ci0KLSAgc3RzZCA9ICZ0cmFrLT5tZGlhLm1pbmYuc3RibC5zdHNkOwotICBmb3IgKGl0ZXIgPSBzdHNkLT5lbnRyaWVzOyBpdGVyICYmIHR4M2cgPT0gTlVMTDsgaXRlciA9IGdfbGlzdF9uZXh0IChpdGVyKSkgewotICAgIFNhbXBsZVRhYmxlRW50cnkgKmVudHJ5ID0gaXRlci0+ZGF0YTsKLQotICAgIHN3aXRjaCAoZW50cnktPmtpbmQpIHsKLSAgICAgIGNhc2UgU1VCVElUTEU6ewotICAgICAgICB0eDNnID0gKFNhbXBsZVRhYmxlRW50cnlUWDNHICopIGVudHJ5OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIEN1cnJlbnRseSB3ZSBuZXZlciBzZXQgdGhlIHZlcnRpY2FsIHBsYWNlbWVudCBmbGFnLCBzbyB3ZSBkb24ndAotICAgKiBjaGVjayBmb3IgaXQgdG8gc2V0IHRoZSBkaW1lbnNpb25zIGRpZmZlcmVudGx5IGFzIHRoZSBzcGVjIHNheXMuCi0gICAqIEFsd2F5cyBkbyBpdCBmb3IgdGhlIG5vdCBzZXQgY2FzZSAqLwotICBpZiAodHgzZykgewotICAgIHR4M2ctPmZvbnRfc2l6ZSA9IDAuMDUgKiBoZWlnaHQ7Ci0KLSAgICBoZWlnaHQgPSAwLjE1ICogaGVpZ2h0OwotICAgIHRyYWstPnRraGQud2lkdGggPSB3aWR0aCA8PCAxNjsKLSAgICB0cmFrLT50a2hkLmhlaWdodCA9IGhlaWdodCA8PCAxNjsKLSAgICB0eDNnLT5kZWZhdWx0X3RleHRfYm94ID0gd2lkdGggfCAoaGVpZ2h0IDw8IDE2KTsKLSAgfQotfQotCi0vKgotICogTWV0YSB0YWdzIGZ1bmN0aW9ucwotICovCi1zdGF0aWMgdm9pZAotYXRvbV90YWdfZGF0YV9hbGxvY19kYXRhIChBdG9tVGFnRGF0YSAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIGdfZnJlZSAoZGF0YS0+ZGF0YSk7Ci0gIGRhdGEtPmRhdGEgPSBnX25ldzAgKGd1aW50OCwgc2l6ZSk7Ci0gIGRhdGEtPmRhdGFsZW4gPSBzaXplOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV91ZHRhX2FwcGVuZF90YWcgKEF0b21VRFRBICogdWR0YSwgQXRvbUluZm8gKiB0YWcpCi17Ci0gIEdMaXN0ICoqZW50cmllczsKLQotICBpZiAodWR0YS0+bWV0YSkKLSAgICBlbnRyaWVzID0gJnVkdGEtPm1ldGEtPmlsc3QtPmVudHJpZXM7Ci0gIGVsc2UKLSAgICBlbnRyaWVzID0gJnVkdGEtPmVudHJpZXM7Ci0gICplbnRyaWVzID0gZ19saXN0X2FwcGVuZCAoKmVudHJpZXMsIHRhZyk7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfdGFnIChBdG9tVURUQSAqIHVkdGEsIGd1aW50MzIgZm91cmNjLCBndWludDMyIGZsYWdzLAotICAgIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIEF0b21UYWcgKnRhZzsKLSAgQXRvbVRhZ0RhdGEgKnRkYXRhOwotCi0gIHRhZyA9IGF0b21fdGFnX25ldyAoZm91cmNjLCBmbGFncyk7Ci0gIHRkYXRhID0gJnRhZy0+ZGF0YTsKLSAgYXRvbV90YWdfZGF0YV9hbGxvY19kYXRhICh0ZGF0YSwgc2l6ZSk7Ci0gIG1lbW1vdmUgKHRkYXRhLT5kYXRhLCBkYXRhLCBzaXplKTsKLQotICBhdG9tX3VkdGFfYXBwZW5kX3RhZyAodWR0YSwKLSAgICAgIGJ1aWxkX2F0b21faW5mb193cmFwcGVyICgoQXRvbSAqKSB0YWcsIGF0b21fdGFnX2NvcHlfZGF0YSwKLSAgICAgICAgICBhdG9tX3RhZ19mcmVlKSk7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfc3RyX3RhZyAoQXRvbVVEVEEgKiB1ZHRhLCBndWludDMyIGZvdXJjYywgY29uc3QgZ2NoYXIgKiB2YWx1ZSkKLXsKLSAgZ2ludCBsZW4gPSBzdHJsZW4gKHZhbHVlKTsKLQotICBpZiAobGVuID4gMCkKLSAgICBhdG9tX3VkdGFfYWRkX3RhZyAodWR0YSwgZm91cmNjLCBNRVRBREFUQV9URVhUX0ZMQUcsIChndWludDggKikgdmFsdWUsIGxlbik7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfdWludF90YWcgKEF0b21VRFRBICogdWR0YSwgZ3VpbnQzMiBmb3VyY2MsIGd1aW50MzIgZmxhZ3MsCi0gICAgZ3VpbnQzMiB2YWx1ZSkKLXsKLSAgZ3VpbnQ4IGRhdGFbOF0gPSB7IDAsIH07Ci0KLSAgaWYgKGZsYWdzKSB7Ci0gICAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSwgdmFsdWUpOwotICAgIGF0b21fdWR0YV9hZGRfdGFnICh1ZHRhLCBmb3VyY2MsIGZsYWdzLCBkYXRhLCAyKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgMiwgdmFsdWUpOwotICAgIGF0b21fdWR0YV9hZGRfdGFnICh1ZHRhLCBmb3VyY2MsIGZsYWdzLCBkYXRhLCA4KTsKLSAgfQotfQotCi0jZGVmaW5lIEdTVF9CVUZGRVJfTkVXX1JFQURPTkxZKG1lbSwgc2l6ZSkgXAotICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBtZW0sIHNpemUsIFwKLSAgICAwLCBzaXplLCBtZW0sIE5VTEwpCi0KLXZvaWQKLWF0b21fdWR0YV9hZGRfYmxvYl90YWcgKEF0b21VRFRBICogdWR0YSwgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgQXRvbURhdGEgKmRhdGFfYXRvbTsKLSAgZ3VpbnQgbGVuOwotICBndWludDMyIGZvdXJjYzsKLQotICBpZiAoc2l6ZSA8IDgpCi0gICAgcmV0dXJuOwotCi0gIC8qIGJsb2IgaXMgdW5wYXJzZWQgYXRvbTsKLSAgICogZXh0cmFjdCBzaXplIGFuZCBmb3VyY2MsIGFuZCB3cmFwIHJlbWFpbmRlciBpbiBkYXRhIGF0b20gKi8KLSAgbGVuID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgZm91cmNjID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgNCk7Ci0gIGlmIChsZW4gPiBzaXplKQotICAgIHJldHVybjsKLQotICBkYXRhX2F0b20gPSBhdG9tX2RhdGFfbmV3X2Zyb21fZGF0YSAoZm91cmNjLCBkYXRhICsgOCwgbGVuIC0gOCk7Ci0KLSAgYXRvbV91ZHRhX2FwcGVuZF90YWcgKHVkdGEsCi0gICAgICBidWlsZF9hdG9tX2luZm9fd3JhcHBlciAoKEF0b20gKikgZGF0YV9hdG9tLCBhdG9tX2RhdGFfY29weV9kYXRhLAotICAgICAgICAgIGF0b21fZGF0YV9mcmVlKSk7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfM2dwX3RhZyAoQXRvbVVEVEEgKiB1ZHRhLCBndWludDMyIGZvdXJjYywgZ3VpbnQ4ICogZGF0YSwKLSAgICBndWludCBzaXplKQotewotICBBdG9tRGF0YSAqZGF0YV9hdG9tOwotCi0gIGRhdGFfYXRvbSA9IGF0b21fZGF0YV9uZXcgKGZvdXJjYyk7Ci0KLSAgLyogbmVlZCBmdWxsIGF0b20gKi8KLSAgYXRvbV9kYXRhX2FsbG9jX21lbSAoZGF0YV9hdG9tLCBzaXplICsgNCk7Ci0KLSAgLyogZnVsbCBhdG9tOiB2ZXJzaW9uIGFuZCBmbGFncyAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhX2F0b20tPmRhdGEsIDApOwotICBtZW1jcHkgKGRhdGFfYXRvbS0+ZGF0YSArIDQsIGRhdGEsIHNpemUpOwotCi0gIGF0b21fdWR0YV9hcHBlbmRfdGFnICh1ZHRhLAotICAgICAgYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGRhdGFfYXRvbSwgYXRvbV9kYXRhX2NvcHlfZGF0YSwKLSAgICAgICAgICBhdG9tX2RhdGFfZnJlZSkpOwotfQotCi1ndWludDE2Ci1sYW5ndWFnZV9jb2RlIChjb25zdCBjaGFyICpsYW5nKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAobGFuZyAhPSBOVUxMLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cmxlbiAobGFuZykgPT0gMywgMCk7Ci0KLSAgcmV0dXJuICgoKGxhbmdbMF0gLSAweDYwKSAmIDB4MUYpIDw8IDEwKSArICgoKGxhbmdbMV0gLSAweDYwKSAmIDB4MUYpIDw8IDUpICsKLSAgICAgICgobGFuZ1syXSAtIDB4NjApICYgMHgxRik7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfM2dwX3N0cl9pbnRfdGFnIChBdG9tVURUQSAqIHVkdGEsIGd1aW50MzIgZm91cmNjLAotICAgIGNvbnN0IGdjaGFyICogdmFsdWUsIGdpbnQxNiBpdmFsdWUpCi17Ci0gIGdpbnQgbGVuID0gMCwgc2l6ZSA9IDA7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBpZiAodmFsdWUpIHsKLSAgICBsZW4gPSBzdHJsZW4gKHZhbHVlKTsKLSAgICBzaXplID0gbGVuICsgMzsKLSAgfQotCi0gIGlmIChpdmFsdWUgPj0gMCkKLSAgICBzaXplICs9IDI7Ci0KLSAgZGF0YSA9IGdfbWFsbG9jIChzaXplICsgMyk7Ci0gIC8qIGxhbmd1YWdlIHRhZyBhbmQgbnVsbC10ZXJtaW5hdGVkIFVURi04IHN0cmluZyAqLwotICBpZiAodmFsdWUpIHsKLSAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhLCBsYW5ndWFnZV9jb2RlIChHU1RfUVRfTVVYX0RFRkFVTFRfVEFHX0xBTkdVQUdFKSk7Ci0gICAgLyogaW5jbHVkZSAwIHRlcm1pbmF0b3IgKi8KLSAgICBtZW1jcHkgKGRhdGEgKyAyLCB2YWx1ZSwgbGVuICsgMSk7Ci0gIH0KLSAgLyogMTYtYml0IHVuc2lnbmVkIGludCBpZiBzdGFuZGFsb25lLCBvdGhlcndpc2UgOC1iaXQgKi8KLSAgaWYgKGl2YWx1ZSA+PSAwKSB7Ci0gICAgaWYgKHNpemUgPT0gMikKLSAgICAgIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEgKyBzaXplIC0gMiwgaXZhbHVlKTsKLSAgICBlbHNlIHsKLSAgICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSArIHNpemUgLSAyLCBpdmFsdWUgJiAweEZGKTsKLSAgICAgIHNpemUtLTsKLSAgICB9Ci0gIH0KLQotICBhdG9tX3VkdGFfYWRkXzNncF90YWcgKHVkdGEsIGZvdXJjYywgZGF0YSwgc2l6ZSk7Ci0gIGdfZnJlZSAoZGF0YSk7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfM2dwX3N0cl90YWcgKEF0b21VRFRBICogdWR0YSwgZ3VpbnQzMiBmb3VyY2MsIGNvbnN0IGdjaGFyICogdmFsdWUpCi17Ci0gIGF0b21fdWR0YV9hZGRfM2dwX3N0cl9pbnRfdGFnICh1ZHRhLCBmb3VyY2MsIHZhbHVlLCAtMSk7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfM2dwX3VpbnRfdGFnIChBdG9tVURUQSAqIHVkdGEsIGd1aW50MzIgZm91cmNjLCBndWludDE2IHZhbHVlKQotewotICBhdG9tX3VkdGFfYWRkXzNncF9zdHJfaW50X3RhZyAodWR0YSwgZm91cmNjLCBOVUxMLCB2YWx1ZSk7Ci19Ci0KLXZvaWQKLWF0b21fdWR0YV9hZGRfeG1wX3RhZ3MgKEF0b21VRFRBICogdWR0YSwgR3N0QnVmZmVyICogeG1wYnVmZmVyKQotewotICBBdG9tRGF0YSAqZGF0YV9hdG9tID0gTlVMTDsKLQotICBpZiAodWR0YS0+Y29udGV4dC0+Zmxhdm9yID09IEFUT01TX1RSRUVfRkxBVk9SX01PVikgewotICAgIGlmICh4bXBidWZmZXIpIHsKLSAgICAgIGRhdGFfYXRvbSA9IGF0b21fZGF0YV9uZXdfZnJvbV9nc3RfYnVmZmVyIChGT1VSQ0NfWE1QXywgeG1wYnVmZmVyKTsKLSAgICAgIHVkdGEtPmVudHJpZXMgPSBnX2xpc3RfYXBwZW5kICh1ZHRhLT5lbnRyaWVzLAotICAgICAgICAgIGJ1aWxkX2F0b21faW5mb193cmFwcGVyICgoQXRvbSAqKSBkYXRhX2F0b20sIGF0b21fZGF0YV9jb3B5X2RhdGEsCi0gICAgICAgICAgICAgIGF0b21fZGF0YV9mcmVlKSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVRyAoIk5vdCBhZGRpbmcgeG1wIHRvIG1vb3YgYXRvbSwgaXQgaXMgb25seSB1c2VkIGluICdtb3YnIGZvcm1hdCIpOwotICB9Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIHNwZWNpZnlpbmcgbWVkaWEgdHlwZXMKLSAqLwotCi1zdGF0aWMgdm9pZAotYXRvbV9taW5mX3NldF9hdWRpbyAoQXRvbU1JTkYgKiBtaW5mKQotewotICBhdG9tX21pbmZfY2xlYXJfaGFuZGxlcnMgKG1pbmYpOwotICBtaW5mLT5zbWhkID0gYXRvbV9zbWhkX25ldyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWluZl9zZXRfdmlkZW8gKEF0b21NSU5GICogbWluZiwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9taW5mX2NsZWFyX2hhbmRsZXJzIChtaW5mKTsKLSAgbWluZi0+dm1oZCA9IGF0b21fdm1oZF9uZXcgKGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9taW5mX3NldF9zdWJ0aXRsZSAoQXRvbU1JTkYgKiBtaW5mKQotewotICBhdG9tX21pbmZfY2xlYXJfaGFuZGxlcnMgKG1pbmYpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9oZGxyX3NldF90eXBlIChBdG9tSERMUiAqIGhkbHIsIEF0b21zQ29udGV4dCAqIGNvbnRleHQsIGd1aW50MzIgY29tcF90eXBlLAotICAgIGd1aW50MzIgaGRscl90eXBlKQotewotICBpZiAoY29udGV4dC0+Zmxhdm9yID09IEFUT01TX1RSRUVfRkxBVk9SX01PVikgewotICAgIGhkbHItPmNvbXBvbmVudF90eXBlID0gY29tcF90eXBlOwotICB9Ci0gIGhkbHItPmhhbmRsZXJfdHlwZSA9IGhkbHJfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21faGRscl9zZXRfbmFtZSAoQXRvbUhETFIgKiBoZGxyLCBjb25zdCBjaGFyICpuYW1lKQotewotICBnX2ZyZWUgKGhkbHItPm5hbWUpOwotICBoZGxyLT5uYW1lID0gZ19zdHJkdXAgKG5hbWUpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9tZGlhX3NldF9oZGxyX3R5cGVfYXVkaW8gKEF0b21NRElBICogbWRpYSwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9oZGxyX3NldF90eXBlICgmbWRpYS0+aGRsciwgY29udGV4dCwgRk9VUkNDX21obHIsIEZPVVJDQ19zb3VuKTsKLSAgLyogU29tZSBwbGF5ZXJzIChsb3ctZW5kIGhhcmR3YXJlKSBjaGVjayBmb3IgdGhpcyBuYW1lLCB3aGljaCBpcyB3aGF0Ci0gICAqIFF1aWNrVGltZSBpdHNlbGYgc2V0cyAqLwotICBhdG9tX2hkbHJfc2V0X25hbWUgKCZtZGlhLT5oZGxyLCAiU291bmRIYW5kbGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21kaWFfc2V0X2hkbHJfdHlwZV92aWRlbyAoQXRvbU1ESUEgKiBtZGlhLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBhdG9tX2hkbHJfc2V0X3R5cGUgKCZtZGlhLT5oZGxyLCBjb250ZXh0LCBGT1VSQ0NfbWhsciwgRk9VUkNDX3ZpZGUpOwotICAvKiBTb21lIHBsYXllcnMgKGxvdy1lbmQgaGFyZHdhcmUpIGNoZWNrIGZvciB0aGlzIG5hbWUsIHdoaWNoIGlzIHdoYXQKLSAgICogUXVpY2tUaW1lIGl0c2VsZiBzZXRzICovCi0gIGF0b21faGRscl9zZXRfbmFtZSAoJm1kaWEtPmhkbHIsICJWaWRlb0hhbmRsZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWRpYV9zZXRfaGRscl90eXBlX3N1YnRpdGxlIChBdG9tTURJQSAqIG1kaWEsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGF0b21faGRscl9zZXRfdHlwZSAoJm1kaWEtPmhkbHIsIGNvbnRleHQsIEZPVVJDQ19taGxyLCBGT1VSQ0Nfc2J0bCk7Ci0KLSAgLyogSnVzdCBmb2xsb3dzIHRoZSBwYXR0ZXJuIGZyb20gdmlkZW8gYW5kIGF1ZGlvIGFib3ZlICovCi0gIGF0b21faGRscl9zZXRfbmFtZSAoJm1kaWEtPmhkbHIsICJTdWJ0aXRsZUhhbmRsZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWRpYV9zZXRfYXVkaW8gKEF0b21NRElBICogbWRpYSwgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV9tZGlhX3NldF9oZGxyX3R5cGVfYXVkaW8gKG1kaWEsIGNvbnRleHQpOwotICBhdG9tX21pbmZfc2V0X2F1ZGlvICgmbWRpYS0+bWluZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21kaWFfc2V0X3ZpZGVvIChBdG9tTURJQSAqIG1kaWEsIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGF0b21fbWRpYV9zZXRfaGRscl90eXBlX3ZpZGVvIChtZGlhLCBjb250ZXh0KTsKLSAgYXRvbV9taW5mX3NldF92aWRlbyAoJm1kaWEtPm1pbmYsIGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9tZGlhX3NldF9zdWJ0aXRsZSAoQXRvbU1ESUEgKiBtZGlhLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBhdG9tX21kaWFfc2V0X2hkbHJfdHlwZV9zdWJ0aXRsZSAobWRpYSwgY29udGV4dCk7Ci0gIGF0b21fbWluZl9zZXRfc3VidGl0bGUgKCZtZGlhLT5taW5mKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdGtoZF9zZXRfYXVkaW8gKEF0b21US0hEICogdGtoZCkKLXsKLSAgdGtoZC0+dm9sdW1lID0gMHgwMTAwOwotICB0a2hkLT53aWR0aCA9IHRraGQtPmhlaWdodCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RraGRfc2V0X3ZpZGVvIChBdG9tVEtIRCAqIHRraGQsIEF0b21zQ29udGV4dCAqIGNvbnRleHQsIGd1aW50MzIgd2lkdGgsCi0gICAgZ3VpbnQzMiBoZWlnaHQpCi17Ci0gIHRraGQtPnZvbHVtZSA9IDA7Ci0KLSAgLyogcXQgYW5kIElTTyBiYXNlIG1lZGlhIGRvIG5vdCBjb250cmFkaWN0LCBhbmQgZXhhbXBsZXMgYWdyZWUgKi8KLSAgdGtoZC0+d2lkdGggPSB3aWR0aDsKLSAgdGtoZC0+aGVpZ2h0ID0gaGVpZ2h0OwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90a2hkX3NldF9zdWJ0aXRsZSAoQXRvbVRLSEQgKiB0a2hkLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LCBndWludDMyIHdpZHRoLAotICAgIGd1aW50MzIgaGVpZ2h0KQotewotICB0a2hkLT52b2x1bWUgPSAwOwotCi0gIC8qIHF0IGFuZCBJU08gYmFzZSBtZWRpYSBkbyBub3QgY29udHJhZGljdCwgYW5kIGV4YW1wbGVzIGFncmVlICovCi0gIHRraGQtPndpZHRoID0gd2lkdGg7Ci0gIHRraGQtPmhlaWdodCA9IGhlaWdodDsKLX0KLQotCi1zdGF0aWMgdm9pZAotYXRvbV9lZHRzX2FkZF9lbnRyeSAoQXRvbUVEVFMgKiBlZHRzLCBnaW50IGluZGV4LCBFZGl0TGlzdEVudHJ5ICogZW50cnkpCi17Ci0gIEVkaXRMaXN0RW50cnkgKmUgPQotICAgICAgKEVkaXRMaXN0RW50cnkgKikgZ19zbGlzdF9udGhfZGF0YSAoZWR0cy0+ZWxzdC5lbnRyaWVzLCBpbmRleCk7Ci0gIC8qIENyZWF0ZSBhIG5ldyBlbnRyeSBpZiBtaXNzaW5nIChhcHBlbmRzIHRvIHRoZSBsaXN0IGlmIGluZGV4IGlzIGxhcmdlcikgKi8KLSAgaWYgKGUgPT0gTlVMTCkgewotICAgIGUgPSBnX25ldyAoRWRpdExpc3RFbnRyeSwgMSk7Ci0gICAgZWR0cy0+ZWxzdC5lbnRyaWVzID0gZ19zbGlzdF9pbnNlcnQgKGVkdHMtPmVsc3QuZW50cmllcywgZSwgaW5kZXgpOwotICB9Ci0KLSAgLyogVXBkYXRlIHRoZSBlbnRyeSAqLwotICAqZSA9ICplbnRyeTsKLX0KLQotLyoKLSAqIFVwZGF0ZSBhbiBlbnRyeSBpbiB0aGlzIHRyYWsgZWRpdHMgbGlzdCwgY3JlYXRpbmcgaXQgaWYgbmVlZGVkLgotICogaW5kZXggaXMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSB0byB1cGRhdGUsIG9yIGNyZWF0ZSBpZiBpdCdzIHBhc3QgdGhlIGVuZC4KLSAqIGR1cmF0aW9uIGlzIGluIHRoZSBtb292J3MgdGltZXNjYWxlCi0gKiBtZWRpYV90aW1lIGlzIHRoZSBvZmZzZXQgaW4gdGhlIG1lZGlhIHRpbWUgdG8gc3RhcnQgZnJvbSAobWVkaWEncyB0aW1lc2NhbGUpCi0gKiByYXRlIGlzIGEgMzIgYml0cyBmaXhlZC1wb2ludAotICovCi12b2lkCi1hdG9tX3RyYWtfc2V0X2Vsc3RfZW50cnkgKEF0b21UUkFLICogdHJhaywgZ2ludCBpbmRleCwKLSAgICBndWludDMyIGR1cmF0aW9uLCBndWludDMyIG1lZGlhX3RpbWUsIGd1aW50MzIgcmF0ZSkKLXsKLSAgRWRpdExpc3RFbnRyeSBlbnRyeTsKLQotICBlbnRyeS5kdXJhdGlvbiA9IGR1cmF0aW9uOwotICBlbnRyeS5tZWRpYV90aW1lID0gbWVkaWFfdGltZTsKLSAgZW50cnkubWVkaWFfcmF0ZSA9IHJhdGU7Ci0KLSAgaWYgKHRyYWstPmVkdHMgPT0gTlVMTCkKLSAgICB0cmFrLT5lZHRzID0gYXRvbV9lZHRzX25ldyAoKTsKLQotICBhdG9tX2VkdHNfYWRkX2VudHJ5ICh0cmFrLT5lZHRzLCBpbmRleCwgJmVudHJ5KTsKLX0KLQotLyogcmUtbmVnb3RpYXRpb24gaXMgcHJldmVudGVkIGF0IHRvcC1sZXZlbCwgc28gb25seSAxIGVudHJ5IGV4cGVjdGVkLgotICogUXVpdGUgc29tZSBtb3JlIGNhcmUgaGVyZSBhbmQgZWxzZXdoZXJlIG1heSBiZSBuZWVkZWQgdG8KLSAqIHN1cHBvcnQgc2V2ZXJhbCBlbnRyaWVzICovCi1zdGF0aWMgU2FtcGxlVGFibGVFbnRyeU1QNEEgKgotYXRvbV90cmFrX2FkZF9hdWRpb19lbnRyeSAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LAotICAgIGd1aW50MzIgdHlwZSkKLXsKLSAgQXRvbVNUU0QgKnN0c2QgPSAmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3RzZDsKLSAgU2FtcGxlVGFibGVFbnRyeU1QNEEgKm1wNGEgPSBzYW1wbGVfZW50cnlfbXA0YV9uZXcgKCk7Ci0KLSAgbXA0YS0+c2UuaGVhZGVyLnR5cGUgPSB0eXBlOwotICBtcDRhLT5zZS5raW5kID0gQVVESU87Ci0gIG1wNGEtPmNvbXByZXNzaW9uX2lkID0gLTE7Ci0gIG1wNGEtPnNlLmRhdGFfcmVmZXJlbmNlX2luZGV4ID0gMTsKLQotICBzdHNkLT5lbnRyaWVzID0gZ19saXN0X3ByZXBlbmQgKHN0c2QtPmVudHJpZXMsIG1wNGEpOwotICBzdHNkLT5uX2VudHJpZXMrKzsKLSAgcmV0dXJuIG1wNGE7Ci19Ci0KLXN0YXRpYyBTYW1wbGVUYWJsZUVudHJ5VE1DRCAqCi1hdG9tX3RyYWtfYWRkX3RpbWVjb2RlX2VudHJ5IChBdG9tVFJBSyAqIHRyYWssIEF0b21zQ29udGV4dCAqIGNvbnRleHQsCi0gICAgR3N0VmlkZW9UaW1lQ29kZSAqIHRjKQotewotICBBdG9tU1RTRCAqc3RzZCA9ICZ0cmFrLT5tZGlhLm1pbmYuc3RibC5zdHNkOwotICBTYW1wbGVUYWJsZUVudHJ5VE1DRCAqdG1jZCA9IHNhbXBsZV9lbnRyeV90bWNkX25ldyAoKTsKLQotICB0cmFrLT5tZGlhLmhkbHIuY29tcG9uZW50X3R5cGUgPSBGT1VSQ0NfbWhscjsKLSAgdHJhay0+bWRpYS5oZGxyLmhhbmRsZXJfdHlwZSA9IEZPVVJDQ190bWNkOwotICB0cmFrLT5tZGlhLmhkbHIubmFtZSA9IGdfc3RyZHVwICgiVGltZSBDb2RlIE1lZGlhIEhhbmRsZXIiKTsKLSAgdHJhay0+bWRpYS5tZGhkLnRpbWVfaW5mby50aW1lc2NhbGUgPSB0Yy0+Y29uZmlnLmZwc19uIC8gdGMtPmNvbmZpZy5mcHNfZDsKLQotICB0bWNkLT5zZS5raW5kID0gVElNRUNPREU7Ci0gIHRtY2QtPnNlLmRhdGFfcmVmZXJlbmNlX2luZGV4ID0gMTsKLSAgdG1jZC0+dGNfZmxhZ3MgPSBUQ18yNEhfTUFYOwotICBpZiAodGMtPmNvbmZpZy5mbGFncyAmPSBHU1RfVklERU9fVElNRV9DT0RFX0ZMQUdTX0RST1BfRlJBTUUpCi0gICAgdG1jZC0+dGNfZmxhZ3MgfD0gVENfRFJPUF9GUkFNRTsKLSAgdG1jZC0+bmFtZS5sYW5ndWFnZV9jb2RlID0gMDsKLSAgdG1jZC0+bmFtZS5uYW1lID0gZ19zdHJkdXAgKCJUYXBlIik7Ci0gIHRtY2QtPnRpbWVzY2FsZSA9IHRjLT5jb25maWcuZnBzX247Ci0gIHRtY2QtPmZyYW1lX2R1cmF0aW9uID0gdGMtPmNvbmZpZy5mcHNfZDsKLSAgaWYgKHRjLT5jb25maWcuZnBzX2QgPT0gMTAwMSkKLSAgICB0bWNkLT5uX2ZyYW1lcyA9IHRjLT5jb25maWcuZnBzX24gLyAxMDAwOwotICBlbHNlCi0gICAgdG1jZC0+bl9mcmFtZXMgPSB0Yy0+Y29uZmlnLmZwc19uIC8gdGMtPmNvbmZpZy5mcHNfZDsKLQotICBzdHNkLT5lbnRyaWVzID0gZ19saXN0X3ByZXBlbmQgKHN0c2QtPmVudHJpZXMsIHRtY2QpOwotICBzdHNkLT5uX2VudHJpZXMrKzsKLSAgcmV0dXJuIHRtY2Q7Ci19Ci0KLXN0YXRpYyBTYW1wbGVUYWJsZUVudHJ5TVA0ViAqCi1hdG9tX3RyYWtfYWRkX3ZpZGVvX2VudHJ5IChBdG9tVFJBSyAqIHRyYWssIEF0b21zQ29udGV4dCAqIGNvbnRleHQsCi0gICAgZ3VpbnQzMiB0eXBlKQotewotICBTYW1wbGVUYWJsZUVudHJ5TVA0ViAqbXA0diA9IHNhbXBsZV9lbnRyeV9tcDR2X25ldyAoY29udGV4dCk7Ci0gIEF0b21TVFNEICpzdHNkID0gJnRyYWstPm1kaWEubWluZi5zdGJsLnN0c2Q7Ci0KLSAgbXA0di0+c2UuaGVhZGVyLnR5cGUgPSB0eXBlOwotICBtcDR2LT5zZS5raW5kID0gVklERU87Ci0gIG1wNHYtPnNlLmRhdGFfcmVmZXJlbmNlX2luZGV4ID0gMTsKLSAgbXA0di0+aG9yaXpvbnRhbF9yZXNvbHV0aW9uID0gNzIgPDwgMTY7Ci0gIG1wNHYtPnZlcnRpY2FsX3Jlc29sdXRpb24gPSA3MiA8PCAxNjsKLSAgaWYgKGNvbnRleHQtPmZsYXZvciA9PSBBVE9NU19UUkVFX0ZMQVZPUl9NT1YpIHsKLSAgICBtcDR2LT5zcGF0aWFsX3F1YWxpdHkgPSA1MTI7Ci0gICAgbXA0di0+dGVtcG9yYWxfcXVhbGl0eSA9IDUxMjsKLSAgfQotCi0gIHN0c2QtPmVudHJpZXMgPSBnX2xpc3RfcHJlcGVuZCAoc3RzZC0+ZW50cmllcywgbXA0dik7Ci0gIHN0c2QtPm5fZW50cmllcysrOwotICByZXR1cm4gbXA0djsKLX0KLQotc3RhdGljIFNhbXBsZVRhYmxlRW50cnlUWDNHICoKLWF0b21fdHJha19hZGRfc3VidGl0bGVfZW50cnkgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCwKLSAgICBndWludDMyIHR5cGUpCi17Ci0gIFNhbXBsZVRhYmxlRW50cnlUWDNHICp0eDNnID0gc2FtcGxlX2VudHJ5X3R4M2dfbmV3ICgpOwotICBBdG9tU1RTRCAqc3RzZCA9ICZ0cmFrLT5tZGlhLm1pbmYuc3RibC5zdHNkOwotCi0gIHR4M2ctPnNlLmhlYWRlci50eXBlID0gdHlwZTsKLSAgdHgzZy0+c2Uua2luZCA9IFNVQlRJVExFOwotICB0eDNnLT5zZS5kYXRhX3JlZmVyZW5jZV9pbmRleCA9IDE7Ci0KLSAgc3RzZC0+ZW50cmllcyA9IGdfbGlzdF9wcmVwZW5kIChzdHNkLT5lbnRyaWVzLCB0eDNnKTsKLSAgc3RzZC0+bl9lbnRyaWVzKys7Ci0gIHJldHVybiB0eDNnOwotfQotCi0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyYWtfc2V0X2NvbnN0YW50X3NpemVfc2FtcGxlcyAoQXRvbVRSQUsgKiB0cmFrLCBndWludDMyIHNhbXBsZV9zaXplKQotewotICB0cmFrLT5tZGlhLm1pbmYuc3RibC5zdHN6LnNhbXBsZV9zaXplID0gc2FtcGxlX3NpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyYWtfc2V0X2F1ZGlvIChBdG9tVFJBSyAqIHRyYWssIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGF0b21fdGtoZF9zZXRfYXVkaW8gKCZ0cmFrLT50a2hkKTsKLSAgYXRvbV9tZGlhX3NldF9hdWRpbyAoJnRyYWstPm1kaWEsIGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90cmFrX3NldF92aWRlbyAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LCBndWludDMyIHdpZHRoLAotICAgIGd1aW50MzIgaGVpZ2h0KQotewotICBhdG9tX3RraGRfc2V0X3ZpZGVvICgmdHJhay0+dGtoZCwgY29udGV4dCwgd2lkdGgsIGhlaWdodCk7Ci0gIGF0b21fbWRpYV9zZXRfdmlkZW8gKCZ0cmFrLT5tZGlhLCBjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJha19zZXRfc3VidGl0bGUgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCkKLXsKLSAgYXRvbV90a2hkX3NldF9zdWJ0aXRsZSAoJnRyYWstPnRraGQsIGNvbnRleHQsIDAsIDApOwotICBhdG9tX21kaWFfc2V0X3N1YnRpdGxlICgmdHJhay0+bWRpYSwgY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyYWtfc2V0X2F1ZGlvX2NvbW1vbnMgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCwKLSAgICBndWludDMyIHJhdGUpCi17Ci0gIGF0b21fdHJha19zZXRfYXVkaW8gKHRyYWssIGNvbnRleHQpOwotICB0cmFrLT5tZGlhLm1kaGQudGltZV9pbmZvLnRpbWVzY2FsZSA9IHJhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RyYWtfc2V0X3ZpZGVvX2NvbW1vbnMgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCwKLSAgICBndWludDMyIHJhdGUsIGd1aW50MzIgd2lkdGgsIGd1aW50MzIgaGVpZ2h0KQotewotICBhdG9tX3RyYWtfc2V0X3ZpZGVvICh0cmFrLCBjb250ZXh0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgdHJhay0+bWRpYS5tZGhkLnRpbWVfaW5mby50aW1lc2NhbGUgPSByYXRlOwotICB0cmFrLT50a2hkLndpZHRoID0gd2lkdGggPDwgMTY7Ci0gIHRyYWstPnRraGQuaGVpZ2h0ID0gaGVpZ2h0IDw8IDE2OwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90cmFrX3NldF9zdWJ0aXRsZV9jb21tb25zIChBdG9tVFJBSyAqIHRyYWssIEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIGF0b21fdHJha19zZXRfc3VidGl0bGUgKHRyYWssIGNvbnRleHQpOwotICB0cmFrLT5tZGlhLm1kaGQudGltZV9pbmZvLnRpbWVzY2FsZSA9IDEwMDA7Ci0KLSAgdHJhay0+dGtoZC5hbHRlcm5hdGVfZ3JvdXAgPSAyOyAgICAgICAvKiBzYW1lIGZvciBhbGwgc3VidGl0bGVzICovCi0gIHRyYWstPnRraGQubGF5ZXIgPSAtMTsgICAgICAgIC8qIGFib3ZlIHZpZGVvIChsYXllciAwKSAqLwotfQotCi12b2lkCi1zYW1wbGVfdGFibGVfZW50cnlfYWRkX2V4dF9hdG9tIChTYW1wbGVUYWJsZUVudHJ5ICogc3RlLCBBdG9tSW5mbyAqIGV4dCkKLXsKLSAgR0xpc3QgKipsaXN0ID0gTlVMTDsKLSAgaWYgKHN0ZS0+a2luZCA9PSBBVURJTykgewotICAgIGxpc3QgPSAmKCgoU2FtcGxlVGFibGVFbnRyeU1QNEEgKikgc3RlKS0+ZXh0ZW5zaW9uX2F0b21zKTsKLSAgfSBlbHNlIGlmIChzdGUtPmtpbmQgPT0gVklERU8pIHsKLSAgICBsaXN0ID0gJigoKFNhbXBsZVRhYmxlRW50cnlNUDRWICopIHN0ZSktPmV4dGVuc2lvbl9hdG9tcyk7Ci0gIH0gZWxzZSB7Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgKmxpc3QgPSBnX2xpc3RfcHJlcGVuZCAoKmxpc3QsIGV4dCk7Ci19Ci0KLVNhbXBsZVRhYmxlRW50cnlNUDRBICoKLWF0b21fdHJha19zZXRfYXVkaW9fdHlwZSAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LAotICAgIEF1ZGlvU2FtcGxlRW50cnkgKiBlbnRyeSwgZ3VpbnQzMiBzY2FsZSwgQXRvbUluZm8gKiBleHQsIGdpbnQgc2FtcGxlX3NpemUpCi17Ci0gIFNhbXBsZVRhYmxlRW50cnlNUDRBICpzdGU7Ci0KLSAgYXRvbV90cmFrX3NldF9hdWRpb19jb21tb25zICh0cmFrLCBjb250ZXh0LCBzY2FsZSk7Ci0gIGF0b21fc3RzZF9yZW1vdmVfZW50cmllcyAoJnRyYWstPm1kaWEubWluZi5zdGJsLnN0c2QpOwotICBzdGUgPSBhdG9tX3RyYWtfYWRkX2F1ZGlvX2VudHJ5ICh0cmFrLCBjb250ZXh0LCBlbnRyeS0+Zm91cmNjKTsKLQotICB0cmFrLT5pc192aWRlbyA9IEZBTFNFOwotICB0cmFrLT5pc19oMjY0ID0gRkFMU0U7Ci0KLSAgc3RlLT52ZXJzaW9uID0gZW50cnktPnZlcnNpb247Ci0gIHN0ZS0+Y29tcHJlc3Npb25faWQgPSBlbnRyeS0+Y29tcHJlc3Npb25faWQ7Ci0gIHN0ZS0+c2FtcGxlX3NpemUgPSBlbnRyeS0+c2FtcGxlX3NpemU7Ci0gIHN0ZS0+c2FtcGxlX3JhdGUgPSBlbnRyeS0+c2FtcGxlX3JhdGUgPDwgMTY7Ci0gIHN0ZS0+Y2hhbm5lbHMgPSBlbnRyeS0+Y2hhbm5lbHM7Ci0KLSAgc3RlLT5zYW1wbGVzX3Blcl9wYWNrZXQgPSBlbnRyeS0+c2FtcGxlc19wZXJfcGFja2V0OwotICBzdGUtPmJ5dGVzX3Blcl9zYW1wbGUgPSBlbnRyeS0+Ynl0ZXNfcGVyX3NhbXBsZTsKLSAgc3RlLT5ieXRlc19wZXJfcGFja2V0ID0gZW50cnktPmJ5dGVzX3Blcl9wYWNrZXQ7Ci0gIHN0ZS0+Ynl0ZXNfcGVyX2ZyYW1lID0gZW50cnktPmJ5dGVzX3Blcl9mcmFtZTsKLQotICBpZiAoZXh0KQotICAgIHN0ZS0+ZXh0ZW5zaW9uX2F0b21zID0gZ19saXN0X3ByZXBlbmQgKHN0ZS0+ZXh0ZW5zaW9uX2F0b21zLCBleHQpOwotCi0gIC8qIDAgc2l6ZSBtZWFucyB2YXJpYWJsZSBzaXplICovCi0gIGF0b21fdHJha19zZXRfY29uc3RhbnRfc2l6ZV9zYW1wbGVzICh0cmFrLCBzYW1wbGVfc2l6ZSk7Ci0KLSAgcmV0dXJuIHN0ZTsKLX0KLQotU2FtcGxlVGFibGVFbnRyeVRNQ0QgKgotYXRvbV90cmFrX3NldF90aW1lY29kZV90eXBlIChBdG9tVFJBSyAqIHRyYWssIEF0b21zQ29udGV4dCAqIGNvbnRleHQsCi0gICAgR3N0VmlkZW9UaW1lQ29kZSAqIHRjKQotewotICBTYW1wbGVUYWJsZUVudHJ5VE1DRCAqc3RlOwotICBBdG9tR01IRCAqZ21oZCA9IHRyYWstPm1kaWEubWluZi5nbWhkOwotCi0gIGlmIChjb250ZXh0LT5mbGF2b3IgIT0gQVRPTVNfVFJFRV9GTEFWT1JfTU9WKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzdGUgPSBhdG9tX3RyYWtfYWRkX3RpbWVjb2RlX2VudHJ5ICh0cmFrLCBjb250ZXh0LCB0Yyk7Ci0KLSAgZ21oZCA9IGF0b21fZ21oZF9uZXcgKCk7Ci0gIGdtaGQtPmdtaW4uZ3JhcGhpY3NfbW9kZSA9IDB4MDA0MDsKLSAgZ21oZC0+Z21pbi5vcGNvbG9yWzBdID0gMHg4MDAwOwotICBnbWhkLT5nbWluLm9wY29sb3JbMV0gPSAweDgwMDA7Ci0gIGdtaGQtPmdtaW4ub3Bjb2xvclsyXSA9IDB4ODAwMDsKLSAgZ21oZC0+dG1jZC50Y21pLnRleHRfc2l6ZSA9IDEyOwotICBnbWhkLT50bWNkLnRjbWkuZm9udF9uYW1lID0gZ19zdHJkdXAgKCJDaGljYWdvIik7ICAgICAvKiBQYXNjYWwgc3RyaW5nICovCi0KLSAgdHJhay0+bWRpYS5taW5mLmdtaGQgPSBnbWhkOwotICB0cmFrLT5pc192aWRlbyA9IEZBTFNFOwotICB0cmFrLT5pc19oMjY0ID0gRkFMU0U7Ci0KLSAgcmV0dXJuIHN0ZTsKLX0KLQotc3RhdGljIEF0b21JbmZvICoKLWJ1aWxkX3Bhc3BfZXh0ZW5zaW9uIChnaW50IHBhcl93aWR0aCwgZ2ludCBwYXJfaGVpZ2h0KQotewotICBBdG9tRGF0YSAqYXRvbV9kYXRhID0gYXRvbV9kYXRhX25ldyAoRk9VUkNDX3Bhc3ApOwotICBndWludDggKmRhdGE7Ci0KLSAgYXRvbV9kYXRhX2FsbG9jX21lbSAoYXRvbV9kYXRhLCA4KTsKLSAgZGF0YSA9IGF0b21fZGF0YS0+ZGF0YTsKLQotICAvKiBpaGRyID0gaW1hZ2UgaGVhZGVyIGJveCAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhLCBwYXJfd2lkdGgpOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgNCwgcGFyX2hlaWdodCk7Ci0KLSAgcmV0dXJuIGJ1aWxkX2F0b21faW5mb193cmFwcGVyICgoQXRvbSAqKSBhdG9tX2RhdGEsIGF0b21fZGF0YV9jb3B5X2RhdGEsCi0gICAgICBhdG9tX2RhdGFfZnJlZSk7Ci19Ci0KLVNhbXBsZVRhYmxlRW50cnlNUDRWICoKLWF0b21fdHJha19zZXRfdmlkZW9fdHlwZSAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LAotICAgIFZpc3VhbFNhbXBsZUVudHJ5ICogZW50cnksIGd1aW50MzIgc2NhbGUsIEdMaXN0ICogZXh0X2F0b21zX2xpc3QpCi17Ci0gIFNhbXBsZVRhYmxlRW50cnlNUDRWICpzdGU7Ci0gIGd1aW50IGR3aWR0aCwgZGhlaWdodDsKLSAgZ2ludCBwYXJfbiA9IDAsIHBhcl9kID0gMDsKLQotICBpZiAoKGVudHJ5LT5wYXJfbiAhPSAxIHx8IGVudHJ5LT5wYXJfZCAhPSAxKSAmJgotICAgICAgKGVudHJ5LT5wYXJfbiAhPSBlbnRyeS0+cGFyX2QpKSB7Ci0gICAgcGFyX24gPSBlbnRyeS0+cGFyX247Ci0gICAgcGFyX2QgPSBlbnRyeS0+cGFyX2Q7Ci0gIH0KLQotICBkd2lkdGggPSBlbnRyeS0+d2lkdGg7Ci0gIGRoZWlnaHQgPSBlbnRyeS0+aGVpZ2h0OwotICAvKiBJU08gZmlsZSBzcGVjIHNheXMgdHJhY2sgaGVhZGVyIHcvaCBpbmRpY2F0ZXMgdHJhY2sncyB2aXN1YWwgcHJlc2VudGF0aW9uCi0gICAqIChzbyB0aGlzIHRvZ2V0aGVyIHdpdGggcGl4ZWxzIHcvaCBpbXBsaWNpdGx5IGRlZmluZXMgUEFSKSAqLwotICBpZiAocGFyX24gJiYgKGNvbnRleHQtPmZsYXZvciAhPSBBVE9NU19UUkVFX0ZMQVZPUl9NT1YpKSB7Ci0gICAgLyogQXNzdW1lcyBzcXVhcmUgcGl4ZWxzIGRpc3BsYXkgKi8KLSAgICBpZiAoIWdzdF92aWRlb19jYWxjdWxhdGVfZGlzcGxheV9yYXRpbyAoJmR3aWR0aCwgJmRoZWlnaHQsIGVudHJ5LT53aWR0aCwKLSAgICAgICAgICAgIGVudHJ5LT5oZWlnaHQsIHBhcl9uLCBwYXJfZCwgMSwgMSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiQ291bGQgbm90IGNhbGN1bGF0ZSBkaXNwbGF5IHJhdGlvIik7Ci0gICAgfQotICB9Ci0KLSAgYXRvbV90cmFrX3NldF92aWRlb19jb21tb25zICh0cmFrLCBjb250ZXh0LCBzY2FsZSwgZHdpZHRoLCBkaGVpZ2h0KTsKLSAgYXRvbV9zdHNkX3JlbW92ZV9lbnRyaWVzICgmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3RzZCk7Ci0gIHN0ZSA9IGF0b21fdHJha19hZGRfdmlkZW9fZW50cnkgKHRyYWssIGNvbnRleHQsIGVudHJ5LT5mb3VyY2MpOwotCi0gIHRyYWstPmlzX3ZpZGVvID0gVFJVRTsKLSAgdHJhay0+aXNfaDI2NCA9IChlbnRyeS0+Zm91cmNjID09IEZPVVJDQ19hdmMxCi0gICAgICB8fCBlbnRyeS0+Zm91cmNjID09IEZPVVJDQ19hdmMzKTsKLQotICBzdGUtPnZlcnNpb24gPSBlbnRyeS0+dmVyc2lvbjsKLSAgc3RlLT53aWR0aCA9IGVudHJ5LT53aWR0aDsKLSAgc3RlLT5oZWlnaHQgPSBlbnRyeS0+aGVpZ2h0OwotICBzdGUtPmRlcHRoID0gZW50cnktPmRlcHRoOwotICBzdGUtPmNvbG9yX3RhYmxlX2lkID0gZW50cnktPmNvbG9yX3RhYmxlX2lkOwotICBzdGUtPmZyYW1lX2NvdW50ID0gZW50cnktPmZyYW1lX2NvdW50OwotCi0gIGlmIChleHRfYXRvbXNfbGlzdCkKLSAgICBzdGUtPmV4dGVuc2lvbl9hdG9tcyA9IGdfbGlzdF9jb25jYXQgKHN0ZS0+ZXh0ZW5zaW9uX2F0b21zLCBleHRfYXRvbXNfbGlzdCk7Ci0KLSAgLyogUVQgc3BlYyBoYXMgYSBwYXNwIGV4dGVuc2lvbiBhdG9tIGluIHN0c2QgdGhhdCBjYW4gaG9sZCBQQVIgKi8KLSAgaWYgKHBhcl9uICYmIChjb250ZXh0LT5mbGF2b3IgPT0gQVRPTVNfVFJFRV9GTEFWT1JfTU9WKSkgewotICAgIHN0ZS0+ZXh0ZW5zaW9uX2F0b21zID0gZ19saXN0X2FwcGVuZCAoc3RlLT5leHRlbnNpb25fYXRvbXMsCi0gICAgICAgIGJ1aWxkX3Bhc3BfZXh0ZW5zaW9uIChwYXJfbiwgcGFyX2QpKTsKLSAgfQotCi0gIHJldHVybiBzdGU7Ci19Ci0KLXZvaWQKLXN1YnRpdGxlX3NhbXBsZV9lbnRyeV9pbml0IChTdWJ0aXRsZVNhbXBsZUVudHJ5ICogZW50cnkpCi17Ci0gIGVudHJ5LT5mb250X3NpemUgPSAwOwotICBlbnRyeS0+Zm9udF9mYWNlID0gMDsKLSAgZW50cnktPmZvcmVncm91bmRfY29sb3JfcmdiYSA9IDB4RkZGRkZGRkY7ICAgIC8qIGFsbCB3aGl0ZSwgb3BhcXVlICovCi19Ci0KLVNhbXBsZVRhYmxlRW50cnlUWDNHICoKLWF0b21fdHJha19zZXRfc3VidGl0bGVfdHlwZSAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LAotICAgIFN1YnRpdGxlU2FtcGxlRW50cnkgKiBlbnRyeSkKLXsKLSAgU2FtcGxlVGFibGVFbnRyeVRYM0cgKnR4M2c7Ci0KLSAgYXRvbV90cmFrX3NldF9zdWJ0aXRsZV9jb21tb25zICh0cmFrLCBjb250ZXh0KTsKLSAgYXRvbV9zdHNkX3JlbW92ZV9lbnRyaWVzICgmdHJhay0+bWRpYS5taW5mLnN0Ymwuc3RzZCk7Ci0gIHR4M2cgPSBhdG9tX3RyYWtfYWRkX3N1YnRpdGxlX2VudHJ5ICh0cmFrLCBjb250ZXh0LCBlbnRyeS0+Zm91cmNjKTsKLQotICB0eDNnLT5mb250X2ZhY2UgPSBlbnRyeS0+Zm9udF9mYWNlOwotICB0eDNnLT5mb250X3NpemUgPSBlbnRyeS0+Zm9udF9zaXplOwotICB0eDNnLT5mb3JlZ3JvdW5kX2NvbG9yX3JnYmEgPSBlbnRyeS0+Zm9yZWdyb3VuZF9jb2xvcl9yZ2JhOwotCi0gIHRyYWstPmlzX3ZpZGVvID0gRkFMU0U7Ci0gIHRyYWstPmlzX2gyNjQgPSBGQUxTRTsKLQotICByZXR1cm4gdHgzZzsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fbWZoZF9pbml0IChBdG9tTUZIRCAqIG1maGQsIGd1aW50MzIgc2VxdWVuY2VfbnVtYmVyKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJihtZmhkLT5oZWFkZXIpLCBGT1VSQ0NfbWZoZCwgMCwgMCwgMCwgZmxhZ3MpOwotICBtZmhkLT5zZXF1ZW5jZV9udW1iZXIgPSBzZXF1ZW5jZV9udW1iZXI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX21vb2ZfaW5pdCAoQXRvbU1PT0YgKiBtb29mLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LAotICAgIGd1aW50MzIgc2VxdWVuY2VfbnVtYmVyKQotewotICBhdG9tX2hlYWRlcl9zZXQgKCZtb29mLT5oZWFkZXIsIEZPVVJDQ19tb29mLCAwLCAwKTsKLSAgYXRvbV9tZmhkX2luaXQgKCZtb29mLT5tZmhkLCBzZXF1ZW5jZV9udW1iZXIpOwotICBtb29mLT50cmFmcyA9IE5VTEw7Ci19Ci0KLUF0b21NT09GICoKLWF0b21fbW9vZl9uZXcgKEF0b21zQ29udGV4dCAqIGNvbnRleHQsIGd1aW50MzIgc2VxdWVuY2VfbnVtYmVyKQotewotICBBdG9tTU9PRiAqbW9vZiA9IGdfbmV3MCAoQXRvbU1PT0YsIDEpOwotCi0gIGF0b21fbW9vZl9pbml0IChtb29mLCBjb250ZXh0LCBzZXF1ZW5jZV9udW1iZXIpOwotICByZXR1cm4gbW9vZjsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJ1bl9mcmVlIChBdG9tVFJVTiAqIHRydW4pCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoJnRydW4tPmhlYWRlcik7Ci0gIGF0b21fYXJyYXlfY2xlYXIgKCZ0cnVuLT5lbnRyaWVzKTsKLSAgZ19mcmVlICh0cnVuKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fc2R0cF9mcmVlIChBdG9tU0RUUCAqIHNkdHApCi17Ci0gIGF0b21fZnVsbF9jbGVhciAoJnNkdHAtPmhlYWRlcik7Ci0gIGF0b21fYXJyYXlfY2xlYXIgKCZzZHRwLT5lbnRyaWVzKTsKLSAgZ19mcmVlIChzZHRwKTsKLX0KLQotdm9pZAotYXRvbV90cmFmX2ZyZWUgKEF0b21UUkFGICogdHJhZikKLXsKLSAgR0xpc3QgKndhbGtlcjsKLQotICB3YWxrZXIgPSB0cmFmLT50cnVuczsKLSAgd2hpbGUgKHdhbGtlcikgewotICAgIGF0b21fdHJ1bl9mcmVlICgoQXRvbVRSVU4gKikgd2Fsa2VyLT5kYXRhKTsKLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotICBnX2xpc3RfZnJlZSAodHJhZi0+dHJ1bnMpOwotICB0cmFmLT50cnVucyA9IE5VTEw7Ci0KLSAgd2Fsa2VyID0gdHJhZi0+c2R0cHM7Ci0gIHdoaWxlICh3YWxrZXIpIHsKLSAgICBhdG9tX3NkdHBfZnJlZSAoKEF0b21TRFRQICopIHdhbGtlci0+ZGF0YSk7Ci0gICAgd2Fsa2VyID0gZ19saXN0X25leHQgKHdhbGtlcik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKHRyYWYtPnNkdHBzKTsKLSAgdHJhZi0+c2R0cHMgPSBOVUxMOwotCi0gIGdfZnJlZSAodHJhZik7Ci19Ci0KLXZvaWQKLWF0b21fbW9vZl9mcmVlIChBdG9tTU9PRiAqIG1vb2YpCi17Ci0gIEdMaXN0ICp3YWxrZXI7Ci0KLSAgd2Fsa2VyID0gbW9vZi0+dHJhZnM7Ci0gIHdoaWxlICh3YWxrZXIpIHsKLSAgICBhdG9tX3RyYWZfZnJlZSAoKEF0b21UUkFGICopIHdhbGtlci0+ZGF0YSk7Ci0gICAgd2Fsa2VyID0gZ19saXN0X25leHQgKHdhbGtlcik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKG1vb2YtPnRyYWZzKTsKLSAgbW9vZi0+dHJhZnMgPSBOVUxMOwotCi0gIGdfZnJlZSAobW9vZik7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX21maGRfY29weV9kYXRhIChBdG9tTUZIRCAqIG1maGQsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZtZmhkLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAobWZoZC0+c2VxdWVuY2VfbnVtYmVyLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3RmaGRfY29weV9kYXRhIChBdG9tVEZIRCAqIHRmaGQsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgZ3VpbnQzMiBmbGFnczsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZ0ZmhkLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHJvcF9jb3B5X3VpbnQzMiAodGZoZC0+dHJhY2tfSUQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBmbGFncyA9IGF0b21fZnVsbF9nZXRfZmxhZ3NfYXNfdWludCAoJnRmaGQtPmhlYWRlcik7Ci0KLSAgaWYgKGZsYWdzICYgVEZfQkFTRV9EQVRBX09GRlNFVCkKLSAgICBwcm9wX2NvcHlfdWludDY0ICh0ZmhkLT5iYXNlX2RhdGFfb2Zmc2V0LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIGlmIChmbGFncyAmIFRGX1NBTVBMRV9ERVNDUklQVElPTl9JTkRFWCkKLSAgICBwcm9wX2NvcHlfdWludDMyICh0ZmhkLT5zYW1wbGVfZGVzY3JpcHRpb25faW5kZXgsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgaWYgKGZsYWdzICYgVEZfREVGQVVMVF9TQU1QTEVfRFVSQVRJT04pCi0gICAgcHJvcF9jb3B5X3VpbnQzMiAodGZoZC0+ZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24sIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgaWYgKGZsYWdzICYgVEZfREVGQVVMVF9TQU1QTEVfU0laRSkKLSAgICBwcm9wX2NvcHlfdWludDMyICh0ZmhkLT5kZWZhdWx0X3NhbXBsZV9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIGlmIChmbGFncyAmIFRGX0RFRkFVTFRfU0FNUExFX0ZMQUdTKQotICAgIHByb3BfY29weV91aW50MzIgKHRmaGQtPmRlZmF1bHRfc2FtcGxlX2ZsYWdzLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3RydW5fY29weV9kYXRhIChBdG9tVFJVTiAqIHRydW4sIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQsIGd1aW50MzIgKiBkYXRhX29mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBndWludDMyIGZsYWdzLCBpOwotCi0gIGZsYWdzID0gYXRvbV9mdWxsX2dldF9mbGFnc19hc191aW50ICgmdHJ1bi0+aGVhZGVyKTsKLQotICAvKiBpZiBmaXJzdCB0cnVuIGluIG1vb2YsIGZvcmNpYmx5IGFkZCBkYXRhX29mZnNldCBhbmQgcmVjb3JkCi0gICAqIHdoZXJlIGl0IG11c3QgYmUgd3JpdHRlbiBsYXRlciBvbiAqLwotICBpZiAoZGF0YV9vZmZzZXQgJiYgISpkYXRhX29mZnNldCkgewotICAgIGZsYWdzIHw9IFRSX0RBVEFfT0ZGU0VUOwotICB9IGVsc2UgewotICAgIGZsYWdzICY9IH5UUl9EQVRBX09GRlNFVDsKLSAgfQotCi0gIGF0b21fZnVsbF9zZXRfZmxhZ3NfYXNfdWludCAoJnRydW4tPmhlYWRlciwgZmxhZ3MpOwotCi0gIGlmICghYXRvbV9mdWxsX2NvcHlfZGF0YSAoJnRydW4tPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBwcm9wX2NvcHlfdWludDMyICh0cnVuLT5zYW1wbGVfY291bnQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBpZiAoZmxhZ3MgJiBUUl9EQVRBX09GRlNFVCkgewotICAgICpkYXRhX29mZnNldCA9ICpvZmZzZXQ7Ci0gICAgcHJvcF9jb3B5X2ludDMyICh0cnVuLT5kYXRhX29mZnNldCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0gIGlmIChmbGFncyAmIFRSX0ZJUlNUX1NBTVBMRV9GTEFHUykKLSAgICBwcm9wX2NvcHlfdWludDMyICh0cnVuLT5maXJzdF9zYW1wbGVfZmxhZ3MsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXRvbV9hcnJheV9nZXRfbGVuICgmdHJ1bi0+ZW50cmllcyk7IGkrKykgewotICAgIFRSVU5TYW1wbGVFbnRyeSAqZW50cnkgPSAmYXRvbV9hcnJheV9pbmRleCAoJnRydW4tPmVudHJpZXMsIGkpOwotCi0gICAgaWYgKGZsYWdzICYgVFJfU0FNUExFX0RVUkFUSU9OKQotICAgICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPnNhbXBsZV9kdXJhdGlvbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIGlmIChmbGFncyAmIFRSX1NBTVBMRV9TSVpFKQotICAgICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPnNhbXBsZV9zaXplLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgaWYgKGZsYWdzICYgVFJfU0FNUExFX0ZMQUdTKQotICAgICAgcHJvcF9jb3B5X3VpbnQzMiAoZW50cnktPnNhbXBsZV9mbGFncywgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgIGlmIChmbGFncyAmIFRSX0NPTVBPU0lUSU9OX1RJTUVfT0ZGU0VUUykKLSAgICAgIHByb3BfY29weV91aW50MzIgKGVudHJ5LT5zYW1wbGVfY29tcG9zaXRpb25fdGltZV9vZmZzZXQsCi0gICAgICAgICAgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0KLSAgYXRvbV93cml0ZV9zaXplIChidWZmZXIsIHNpemUsIG9mZnNldCwgb3JpZ2luYWxfb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1hdG9tX3NkdHBfY29weV9kYXRhIChBdG9tU0RUUCAqIHNkdHAsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZzZHRwLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogYWxsIGVudHJpZXMgYXQgb25jZSAqLwotICBwcm9wX2NvcHlfZml4ZWRfc2l6ZV9zdHJpbmcgKCZhdG9tX2FycmF5X2luZGV4ICgmc2R0cC0+ZW50cmllcywgMCksCi0gICAgICBhdG9tX2FycmF5X2dldF9sZW4gKCZzZHRwLT5lbnRyaWVzKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV90cmFmX2NvcHlfZGF0YSAoQXRvbVRSQUYgKiB0cmFmLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0LCBndWludDMyICogZGF0YV9vZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgR0xpc3QgKndhbGtlcjsKLQotICBpZiAoIWF0b21fY29weV9kYXRhICgmdHJhZi0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWF0b21fdGZoZF9jb3B5X2RhdGEgKCZ0cmFmLT50ZmhkLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHdhbGtlciA9IGdfbGlzdF9maXJzdCAodHJhZi0+dHJ1bnMpOwotICB3aGlsZSAod2Fsa2VyICE9IE5VTEwpIHsKLSAgICBpZiAoIWF0b21fdHJ1bl9jb3B5X2RhdGEgKChBdG9tVFJVTiAqKSB3YWxrZXItPmRhdGEsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LAotICAgICAgICAgICAgZGF0YV9vZmZzZXQpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgd2Fsa2VyID0gZ19saXN0X25leHQgKHdhbGtlcik7Ci0gIH0KLQotICB3YWxrZXIgPSBnX2xpc3RfZmlyc3QgKHRyYWYtPnNkdHBzKTsKLSAgd2hpbGUgKHdhbGtlciAhPSBOVUxMKSB7Ci0gICAgaWYgKCFhdG9tX3NkdHBfY29weV9kYXRhICgoQXRvbVNEVFAgKikgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi0vKiBjcmVhdGVzIG1vb2YgYXRvbTsgbWV0YWRhdGEgaXMgd3JpdHRlbiBleHBlY3RpbmcgYWN0dWFsIGJ1ZmZlciBkYXRhCi0gKiBpcyBpbiBtZGF0YSBkaXJlY3RseSBhZnRlciBtb29mLCBhbmQgaXMgY29uc2VjdXRpdmVseSB3cml0dGVuIHBlciB0cmFrICovCi1ndWludDY0Ci1hdG9tX21vb2ZfY29weV9kYXRhIChBdG9tTU9PRiAqIG1vb2YsIGd1aW50OCAqKiBidWZmZXIsCi0gICAgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgR0xpc3QgKndhbGtlcjsKLSAgZ3VpbnQzMiBkYXRhX29mZnNldCA9IDA7Ci0KLSAgaWYgKCFhdG9tX2NvcHlfZGF0YSAoJm1vb2YtPmhlYWRlciwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKQotICAgIHJldHVybiAwOwotCi0gIGlmICghYXRvbV9tZmhkX2NvcHlfZGF0YSAoJm1vb2YtPm1maGQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICB3YWxrZXIgPSBnX2xpc3RfZmlyc3QgKG1vb2YtPnRyYWZzKTsKLSAgd2hpbGUgKHdhbGtlciAhPSBOVUxMKSB7Ci0gICAgaWYgKCFhdG9tX3RyYWZfY29weV9kYXRhICgoQXRvbVRSQUYgKikgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCwKLSAgICAgICAgICAgICZkYXRhX29mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0KLSAgaWYgKCpidWZmZXIgJiYgZGF0YV9vZmZzZXQpIHsKLSAgICAvKiBmaXJzdCB0cnVuIG5lZWRzIGEgZGF0YS1vZmZzZXQgcmVsYXRpdmUgdG8gbW9vZiBzdGFydAotICAgICAqICAgPSBtb29mIHNpemUgKyBtZGF0IHByZWZpeCAqLwotICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKCpidWZmZXIgKyBkYXRhX29mZnNldCwgKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldCArIDgpOwotICB9Ci0KLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3RmaGRfaW5pdCAoQXRvbVRGSEQgKiB0ZmhkLCBndWludDMyIHRyYWNrX0lEKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJnRmaGQtPmhlYWRlciwgRk9VUkNDX3RmaGQsIDAsIDAsIDAsIGZsYWdzKTsKLSAgdGZoZC0+dHJhY2tfSUQgPSB0cmFja19JRDsKLSAgdGZoZC0+YmFzZV9kYXRhX29mZnNldCA9IDA7Ci0gIHRmaGQtPnNhbXBsZV9kZXNjcmlwdGlvbl9pbmRleCA9IDE7Ci0gIHRmaGQtPmRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uID0gMDsKLSAgdGZoZC0+ZGVmYXVsdF9zYW1wbGVfc2l6ZSA9IDA7Ci0gIHRmaGQtPmRlZmF1bHRfc2FtcGxlX2ZsYWdzID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJ1bl9pbml0IChBdG9tVFJVTiAqIHRydW4pCi17Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotCi0gIGF0b21fZnVsbF9pbml0ICgmdHJ1bi0+aGVhZGVyLCBGT1VSQ0NfdHJ1biwgMCwgMCwgMCwgZmxhZ3MpOwotICB0cnVuLT5zYW1wbGVfY291bnQgPSAwOwotICB0cnVuLT5kYXRhX29mZnNldCA9IDA7Ci0gIHRydW4tPmZpcnN0X3NhbXBsZV9mbGFncyA9IDA7Ci0gIGF0b21fYXJyYXlfaW5pdCAoJnRydW4tPmVudHJpZXMsIDUxMik7Ci19Ci0KLXN0YXRpYyBBdG9tVFJVTiAqCi1hdG9tX3RydW5fbmV3ICh2b2lkKQotewotICBBdG9tVFJVTiAqdHJ1biA9IGdfbmV3MCAoQXRvbVRSVU4sIDEpOwotCi0gIGF0b21fdHJ1bl9pbml0ICh0cnVuKTsKLSAgcmV0dXJuIHRydW47Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdG9tX3NkdHBfaW5pdCAoQXRvbVNEVFAgKiBzZHRwKQotewotICBndWludDggZmxhZ3NbM10gPSB7IDAsIDAsIDAgfTsKLQotICBhdG9tX2Z1bGxfaW5pdCAoJnNkdHAtPmhlYWRlciwgRk9VUkNDX3NkdHAsIDAsIDAsIDAsIGZsYWdzKTsKLSAgYXRvbV9hcnJheV9pbml0ICgmc2R0cC0+ZW50cmllcywgNTEyKTsKLX0KLQotc3RhdGljIEF0b21TRFRQICoKLWF0b21fc2R0cF9uZXcgKEF0b21zQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEF0b21TRFRQICpzZHRwID0gZ19uZXcwIChBdG9tU0RUUCwgMSk7Ci0KLSAgYXRvbV9zZHRwX2luaXQgKHNkdHApOwotICByZXR1cm4gc2R0cDsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJhZl9hZGRfc2R0cCAoQXRvbVRSQUYgKiB0cmFmLCBBdG9tU0RUUCAqIHNkdHApCi17Ci0gIHRyYWYtPnNkdHBzID0gZ19saXN0X2FwcGVuZCAodHJhZi0+c2R0cHMsIHNkdHApOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV9zZHRwX2FkZF9zYW1wbGVzIChBdG9tU0RUUCAqIHNkdHAsIGd1aW50OCB2YWwpCi17Ci0gIC8qIGl0IGRvZXMgbm90IG1ha2UgbXVjaC9hbnkgc2Vuc2UgYWNjb3JkaW5nIHRvIHNwZWNzLAotICAgKiBidXQgdGhhdCdzIGhvdyBNUyBpc21sIHNhbXBsZXMgc2VlbSB0byBkbyBpdCAqLwotICBhdG9tX2FycmF5X2FwcGVuZCAoJnNkdHAtPmVudHJpZXMsIHZhbCwgMjU2KTsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJ1bl9hZGRfc2FtcGxlcyAoQXRvbVRSVU4gKiB0cnVuLCBndWludDMyIGRlbHRhLCBndWludDMyIHNpemUsCi0gICAgZ3VpbnQzMiBmbGFncywgZ2ludDY0IHB0c19vZmZzZXQpCi17Ci0gIFRSVU5TYW1wbGVFbnRyeSBuZW50cnk7Ci0KLSAgaWYgKHB0c19vZmZzZXQgIT0gMCkKLSAgICB0cnVuLT5oZWFkZXIuZmxhZ3NbMV0gfD0gKFRSX0NPTVBPU0lUSU9OX1RJTUVfT0ZGU0VUUyA+PiA4KTsKLQotICBuZW50cnkuc2FtcGxlX2R1cmF0aW9uID0gZGVsdGE7Ci0gIG5lbnRyeS5zYW1wbGVfc2l6ZSA9IHNpemU7Ci0gIG5lbnRyeS5zYW1wbGVfZmxhZ3MgPSBmbGFnczsKLSAgbmVudHJ5LnNhbXBsZV9jb21wb3NpdGlvbl90aW1lX29mZnNldCA9IHB0c19vZmZzZXQ7Ci0gIGF0b21fYXJyYXlfYXBwZW5kICgmdHJ1bi0+ZW50cmllcywgbmVudHJ5LCAyNTYpOwotICB0cnVuLT5zYW1wbGVfY291bnQrKzsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJhZl9pbml0IChBdG9tVFJBRiAqIHRyYWYsIEF0b21zQ29udGV4dCAqIGNvbnRleHQsIGd1aW50MzIgdHJhY2tfSUQpCi17Ci0gIGF0b21faGVhZGVyX3NldCAoJnRyYWYtPmhlYWRlciwgRk9VUkNDX3RyYWYsIDAsIDApOwotICBhdG9tX3RmaGRfaW5pdCAoJnRyYWYtPnRmaGQsIHRyYWNrX0lEKTsKLSAgdHJhZi0+dHJ1bnMgPSBOVUxMOwotCi0gIGlmIChjb250ZXh0LT5mbGF2b3IgPT0gQVRPTVNfVFJFRV9GTEFWT1JfSVNNTCkKLSAgICBhdG9tX3RyYWZfYWRkX3NkdHAgKHRyYWYsIGF0b21fc2R0cF9uZXcgKGNvbnRleHQpKTsKLX0KLQotQXRvbVRSQUYgKgotYXRvbV90cmFmX25ldyAoQXRvbXNDb250ZXh0ICogY29udGV4dCwgZ3VpbnQzMiB0cmFja19JRCkKLXsKLSAgQXRvbVRSQUYgKnRyYWYgPSBnX25ldzAgKEF0b21UUkFGLCAxKTsKLQotICBhdG9tX3RyYWZfaW5pdCAodHJhZiwgY29udGV4dCwgdHJhY2tfSUQpOwotICByZXR1cm4gdHJhZjsKLX0KLQotc3RhdGljIHZvaWQKLWF0b21fdHJhZl9hZGRfdHJ1biAoQXRvbVRSQUYgKiB0cmFmLCBBdG9tVFJVTiAqIHRydW4pCi17Ci0gIHRyYWYtPnRydW5zID0gZ19saXN0X2FwcGVuZCAodHJhZi0+dHJ1bnMsIHRydW4pOwotfQotCi12b2lkCi1hdG9tX3RyYWZfYWRkX3NhbXBsZXMgKEF0b21UUkFGICogdHJhZiwgZ3VpbnQzMiBkZWx0YSwgZ3VpbnQzMiBzaXplLAotICAgIGdib29sZWFuIHN5bmMsIGdpbnQ2NCBwdHNfb2Zmc2V0LCBnYm9vbGVhbiBzZHRwX3N5bmMpCi17Ci0gIEF0b21UUlVOICp0cnVuOwotICBndWludDMyIGZsYWdzOwotCi0gIC8qIDB4MTAwMDAgaXMgc2FtcGxlLWlzLWRpZmZlcmVuY2Utc2FtcGxlIGZsYWcKLSAgICogbG93IGJ5dGUgc3R1ZmYgaXMgd2hhdCBpc212IHVzZXMgKi8KLSAgZmxhZ3MgPSAoc3luYyA/IDB4MCA6IDB4MTAwMDApIHwgKHNkdHBfc3luYyA/IDB4NDAgOiAweGMwKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIXRyYWYtPnRydW5zKSkgewotICAgIHRydW4gPSBhdG9tX3RydW5fbmV3ICgpOwotICAgIGF0b21fdHJhZl9hZGRfdHJ1biAodHJhZiwgdHJ1bik7Ci0gICAgLyogb3B0aW1pc3RpYzsgaW5kaWNhdGUgYWxsIGRlZmF1bHRzIHByZXNlbnQgaW4gdGZoZCAqLwotICAgIHRyYWYtPnRmaGQuaGVhZGVyLmZsYWdzWzJdID0gVEZfREVGQVVMVF9TQU1QTEVfRFVSQVRJT04gfAotICAgICAgICBURl9ERUZBVUxUX1NBTVBMRV9TSVpFIHwgVEZfREVGQVVMVF9TQU1QTEVfRkxBR1M7Ci0gICAgdHJhZi0+dGZoZC5kZWZhdWx0X3NhbXBsZV9kdXJhdGlvbiA9IGRlbHRhOwotICAgIHRyYWYtPnRmaGQuZGVmYXVsdF9zYW1wbGVfc2l6ZSA9IHNpemU7Ci0gICAgdHJhZi0+dGZoZC5kZWZhdWx0X3NhbXBsZV9mbGFncyA9IGZsYWdzOwotICAgIHRydW4tPmZpcnN0X3NhbXBsZV9mbGFncyA9IGZsYWdzOwotICB9Ci0KLSAgdHJ1biA9IHRyYWYtPnRydW5zLT5kYXRhOwotCi0gIC8qIGNoZWNrIGlmIHN0aWxsIG1hdGNoaW5nIGRlZmF1bHRzLAotICAgKiBpZiBub3QsIGFiYW5kb24gZGVmYXVsdCBhbmQgbmVlZCBlbnRyeSBmb3IgZWFjaCBzYW1wbGUgKi8KLSAgaWYgKHRyYWYtPnRmaGQuZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24gIT0gZGVsdGEpIHsKLSAgICB0cmFmLT50ZmhkLmhlYWRlci5mbGFnc1syXSAmPSB+VEZfREVGQVVMVF9TQU1QTEVfRFVSQVRJT047Ci0gICAgdHJ1bi0+aGVhZGVyLmZsYWdzWzFdIHw9IChUUl9TQU1QTEVfRFVSQVRJT04gPj4gOCk7Ci0gIH0KLSAgaWYgKHRyYWYtPnRmaGQuZGVmYXVsdF9zYW1wbGVfc2l6ZSAhPSBzaXplKSB7Ci0gICAgdHJhZi0+dGZoZC5oZWFkZXIuZmxhZ3NbMl0gJj0gflRGX0RFRkFVTFRfU0FNUExFX1NJWkU7Ci0gICAgdHJ1bi0+aGVhZGVyLmZsYWdzWzFdIHw9IChUUl9TQU1QTEVfU0laRSA+PiA4KTsKLSAgfQotICBpZiAodHJhZi0+dGZoZC5kZWZhdWx0X3NhbXBsZV9mbGFncyAhPSBmbGFncykgewotICAgIGlmICh0cnVuLT5zYW1wbGVfY291bnQgPT0gMSkgewotICAgICAgLyogYXQgbGVhc3Qgd2lsbCBuZWVkIGZpcnN0IHNhbXBsZSBmbGFnICovCi0gICAgICB0cmFmLT50ZmhkLmRlZmF1bHRfc2FtcGxlX2ZsYWdzID0gZmxhZ3M7Ci0gICAgICB0cnVuLT5oZWFkZXIuZmxhZ3NbMl0gfD0gVFJfRklSU1RfU0FNUExFX0ZMQUdTOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBub3cgd2UgbmVlZCBzYW1wbGUgZmxhZ3MgZm9yIGVhY2ggc2FtcGxlICovCi0gICAgICB0cmFmLT50ZmhkLmhlYWRlci5mbGFnc1syXSAmPSB+VEZfREVGQVVMVF9TQU1QTEVfRkxBR1M7Ci0gICAgICB0cnVuLT5oZWFkZXIuZmxhZ3NbMV0gfD0gKFRSX1NBTVBMRV9GTEFHUyA+PiA4KTsKLSAgICAgIHRydW4tPmhlYWRlci5mbGFnc1syXSAmPSB+VFJfRklSU1RfU0FNUExFX0ZMQUdTOwotICAgIH0KLSAgfQotCi0gIGF0b21fdHJ1bl9hZGRfc2FtcGxlcyAodHJhZi0+dHJ1bnMtPmRhdGEsIGRlbHRhLCBzaXplLCBmbGFncywgcHRzX29mZnNldCk7Ci0KLSAgaWYgKHRyYWYtPnNkdHBzKQotICAgIGF0b21fc2R0cF9hZGRfc2FtcGxlcyAodHJhZi0+c2R0cHMtPmRhdGEsIDB4MTAgfCAoKGZsYWdzICYgMHhmZikgPj4gNCkpOwotfQotCi1ndWludDMyCi1hdG9tX3RyYWZfZ2V0X3NhbXBsZV9udW0gKEF0b21UUkFGICogdHJhZikKLXsKLSAgQXRvbVRSVU4gKnRydW47Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCF0cmFmLT50cnVucykpCi0gICAgcmV0dXJuIDA7Ci0KLSAgdHJ1biA9IHRyYWYtPnRydW5zLT5kYXRhOwotICByZXR1cm4gYXRvbV9hcnJheV9nZXRfbGVuICgmdHJ1bi0+ZW50cmllcyk7Ci19Ci0KLXZvaWQKLWF0b21fbW9vZl9hZGRfdHJhZiAoQXRvbU1PT0YgKiBtb29mLCBBdG9tVFJBRiAqIHRyYWYpCi17Ci0gIG1vb2YtPnRyYWZzID0gZ19saXN0X2FwcGVuZCAobW9vZi0+dHJhZnMsIHRyYWYpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90ZnJhX2ZyZWUgKEF0b21URlJBICogdGZyYSkKLXsKLSAgYXRvbV9mdWxsX2NsZWFyICgmdGZyYS0+aGVhZGVyKTsKLSAgYXRvbV9hcnJheV9jbGVhciAoJnRmcmEtPmVudHJpZXMpOwotICBnX2ZyZWUgKHRmcmEpOwotfQotCi1BdG9tTUZSQSAqCi1hdG9tX21mcmFfbmV3IChBdG9tc0NvbnRleHQgKiBjb250ZXh0KQotewotICBBdG9tTUZSQSAqbWZyYSA9IGdfbmV3MCAoQXRvbU1GUkEsIDEpOwotCi0gIGF0b21faGVhZGVyX3NldCAoJm1mcmEtPmhlYWRlciwgRk9VUkNDX21mcmEsIDAsIDApOwotICByZXR1cm4gbWZyYTsKLX0KLQotdm9pZAotYXRvbV9tZnJhX2FkZF90ZnJhIChBdG9tTUZSQSAqIG1mcmEsIEF0b21URlJBICogdGZyYSkKLXsKLSAgbWZyYS0+dGZyYXMgPSBnX2xpc3RfYXBwZW5kIChtZnJhLT50ZnJhcywgdGZyYSk7Ci19Ci0KLXZvaWQKLWF0b21fbWZyYV9mcmVlIChBdG9tTUZSQSAqIG1mcmEpCi17Ci0gIEdMaXN0ICp3YWxrZXI7Ci0KLSAgd2Fsa2VyID0gbWZyYS0+dGZyYXM7Ci0gIHdoaWxlICh3YWxrZXIpIHsKLSAgICBhdG9tX3RmcmFfZnJlZSAoKEF0b21URlJBICopIHdhbGtlci0+ZGF0YSk7Ci0gICAgd2Fsa2VyID0gZ19saXN0X25leHQgKHdhbGtlcik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKG1mcmEtPnRmcmFzKTsKLSAgbWZyYS0+dGZyYXMgPSBOVUxMOwotCi0gIGF0b21fY2xlYXIgKCZtZnJhLT5oZWFkZXIpOwotICBnX2ZyZWUgKG1mcmEpOwotfQotCi1zdGF0aWMgdm9pZAotYXRvbV90ZnJhX2luaXQgKEF0b21URlJBICogdGZyYSwgZ3VpbnQzMiB0cmFja19JRCkKLXsKLSAgZ3VpbnQ4IGZsYWdzWzNdID0geyAwLCAwLCAwIH07Ci0KLSAgYXRvbV9mdWxsX2luaXQgKCZ0ZnJhLT5oZWFkZXIsIEZPVVJDQ190ZnJhLCAwLCAwLCAwLCBmbGFncyk7Ci0gIHRmcmEtPnRyYWNrX0lEID0gdHJhY2tfSUQ7Ci0gIGF0b21fYXJyYXlfaW5pdCAoJnRmcmEtPmVudHJpZXMsIDUxMik7Ci19Ci0KLUF0b21URlJBICoKLWF0b21fdGZyYV9uZXcgKEF0b21zQ29udGV4dCAqIGNvbnRleHQsIGd1aW50MzIgdHJhY2tfSUQpCi17Ci0gIEF0b21URlJBICp0ZnJhID0gZ19uZXcwIChBdG9tVEZSQSwgMSk7Ci0KLSAgYXRvbV90ZnJhX2luaXQgKHRmcmEsIHRyYWNrX0lEKTsKLSAgcmV0dXJuIHRmcmE7Ci0KLX0KLQotc3RhdGljIGlubGluZSBnaW50Ci1uZWVkX2J5dGVzIChndWludDMyIG51bSkKLXsKLSAgZ2ludCBuID0gMDsKLQotICB3aGlsZSAobnVtID4+PSA4KQotICAgIG4rKzsKLQotICByZXR1cm4gbjsKLX0KLQotdm9pZAotYXRvbV90ZnJhX2FkZF9lbnRyeSAoQXRvbVRGUkEgKiB0ZnJhLCBndWludDY0IGR0cywgZ3VpbnQzMiBzYW1wbGVfbnVtKQotewotICBURlJBRW50cnkgZW50cnk7Ci0KLSAgZW50cnkudGltZSA9IGR0czsKLSAgLyogZmlsbCBpbiBsYXRlciAqLwotICBlbnRyeS5tb29mX29mZnNldCA9IDA7Ci0gIC8qIGFsd2F5cyB3cml0ZSBhIHNpbmdsZSB0cnVuIGluIGEgc2luZ2xlIHRyYWYgKi8KLSAgZW50cnkudHJhZl9udW1iZXIgPSAxOwotICBlbnRyeS50cnVuX251bWJlciA9IDE7Ci0gIGVudHJ5LnNhbXBsZV9udW1iZXIgPSBzYW1wbGVfbnVtOwotCi0gIC8qIGF1dG8tdXNlIDY0IGJpdHMgaWYgbmVlZGVkICovCi0gIGlmIChkdHMgPiBHX01BWFVJTlQzMikKLSAgICB0ZnJhLT5oZWFkZXIudmVyc2lvbiA9IDE7Ci0KLSAgLyogMSBieXRlIHdpbGwgYWx3YXlzIGRvIGZvciB0cmFmIGFuZCB0cnVuIG51bWJlciwKLSAgICogY2hlY2sgaG93IG11Y2ggc2FtcGxlX251bSBuZWVkcyAqLwotICB0ZnJhLT5sZW5ndGhzID0gKHRmcmEtPmxlbmd0aHMgJiAweGZjKSB8fAotICAgICAgTUFYICh0ZnJhLT5sZW5ndGhzLCBuZWVkX2J5dGVzIChzYW1wbGVfbnVtKSk7Ci0KLSAgYXRvbV9hcnJheV9hcHBlbmQgKCZ0ZnJhLT5lbnRyaWVzLCBlbnRyeSwgMjU2KTsKLX0KLQotdm9pZAotYXRvbV90ZnJhX3VwZGF0ZV9vZmZzZXQgKEF0b21URlJBICogdGZyYSwgZ3VpbnQ2NCBvZmZzZXQpCi17Ci0gIGdpbnQgaTsKLQotICAvKiBhdXRvLXVzZSA2NCBiaXRzIGlmIG5lZWRlZCAqLwotICBpZiAob2Zmc2V0ID4gR19NQVhVSU5UMzIpCi0gICAgdGZyYS0+aGVhZGVyLnZlcnNpb24gPSAxOwotCi0gIGZvciAoaSA9IGF0b21fYXJyYXlfZ2V0X2xlbiAoJnRmcmEtPmVudHJpZXMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICBURlJBRW50cnkgKmVudHJ5ID0gJmF0b21fYXJyYXlfaW5kZXggKCZ0ZnJhLT5lbnRyaWVzLCBpKTsKLQotICAgIGlmIChlbnRyeS0+bW9vZl9vZmZzZXQpCi0gICAgICBicmVhazsKLSAgICBlbnRyeS0+bW9vZl9vZmZzZXQgPSBvZmZzZXQ7Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50NjQKLWF0b21fdGZyYV9jb3B5X2RhdGEgKEF0b21URlJBICogdGZyYSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBndWludDMyIGk7Ci0gIFRGUkFFbnRyeSAqZW50cnk7Ci0gIGd1aW50MzIgZGF0YTsKLSAgZ3VpbnQgYnl0ZXM7Ci0gIGd1aW50IHZlcnNpb247Ci0KLSAgaWYgKCFhdG9tX2Z1bGxfY29weV9kYXRhICgmdGZyYS0+aGVhZGVyLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50MzIgKHRmcmEtPnRyYWNrX0lELCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50MzIgKHRmcmEtPmxlbmd0aHMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQzMiAoYXRvbV9hcnJheV9nZXRfbGVuICgmdGZyYS0+ZW50cmllcyksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICB2ZXJzaW9uID0gdGZyYS0+aGVhZGVyLnZlcnNpb247Ci0gIGZvciAoaSA9IDA7IGkgPCBhdG9tX2FycmF5X2dldF9sZW4gKCZ0ZnJhLT5lbnRyaWVzKTsgKytpKSB7Ci0gICAgZW50cnkgPSAmYXRvbV9hcnJheV9pbmRleCAoJnRmcmEtPmVudHJpZXMsIGkpOwotICAgIGlmICh2ZXJzaW9uKSB7Ci0gICAgICBwcm9wX2NvcHlfdWludDY0IChlbnRyeS0+dGltZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICAgICAgcHJvcF9jb3B5X3VpbnQ2NCAoZW50cnktPm1vb2Zfb2Zmc2V0LCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByb3BfY29weV91aW50MzIgKGVudHJ5LT50aW1lLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gICAgICBwcm9wX2NvcHlfdWludDMyIChlbnRyeS0+bW9vZl9vZmZzZXQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBieXRlcyA9ICh0ZnJhLT5sZW5ndGhzICYgKDB4MyA8PCA0KSkgKyAxOwotICAgIGRhdGEgPSBHVUlOVDMyX1RPX0JFIChlbnRyeS0+dHJhZl9udW1iZXIpOwotICAgIHByb3BfY29weV9maXhlZF9zaXplX3N0cmluZyAoKChndWludDggKikgJiBkYXRhKSArIDQgLSBieXRlcywgYnl0ZXMsCi0gICAgICAgIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICAgIGJ5dGVzID0gKHRmcmEtPmxlbmd0aHMgJiAoMHgzIDw8IDIpKSArIDE7Ci0gICAgZGF0YSA9IEdVSU5UMzJfVE9fQkUgKGVudHJ5LT50cnVuX251bWJlcik7Ci0gICAgcHJvcF9jb3B5X2ZpeGVkX3NpemVfc3RyaW5nICgoKGd1aW50OCAqKSAmIGRhdGEpICsgNCAtIGJ5dGVzLCBieXRlcywKLSAgICAgICAgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gICAgYnl0ZXMgPSAodGZyYS0+bGVuZ3RocyAmICgweDMpKSArIDE7Ci0gICAgZGF0YSA9IEdVSU5UMzJfVE9fQkUgKGVudHJ5LT5zYW1wbGVfbnVtYmVyKTsKLSAgICBwcm9wX2NvcHlfZml4ZWRfc2l6ZV9zdHJpbmcgKCgoZ3VpbnQ4ICopICYgZGF0YSkgKyA0IC0gYnl0ZXMsIGJ5dGVzLAotICAgICAgICBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0KLSAgfQotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotYXRvbV9tZnJvX2NvcHlfZGF0YSAoZ3VpbnQzMiBzLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0gIGd1aW50OCBmbGFnc1szXSA9IHsgMCwgMCwgMCB9OwotICBBdG9tRnVsbCBtZnJvOwotCi0gIGF0b21fZnVsbF9pbml0ICgmbWZybywgRk9VUkNDX21mcm8sIDAsIDAsIDAsIGZsYWdzKTsKLQotICBpZiAoIWF0b21fZnVsbF9jb3B5X2RhdGEgKCZtZnJvLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50MzIgKHMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBhdG9tX3dyaXRlX3NpemUgKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0LCBvcmlnaW5hbF9vZmZzZXQpOwotCi0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi0KLWd1aW50NjQKLWF0b21fbWZyYV9jb3B5X2RhdGEgKEF0b21NRlJBICogbWZyYSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotICBHTGlzdCAqd2Fsa2VyOwotCi0gIGlmICghYXRvbV9jb3B5X2RhdGEgKCZtZnJhLT5oZWFkZXIsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkKLSAgICByZXR1cm4gMDsKLQotICB3YWxrZXIgPSBnX2xpc3RfZmlyc3QgKG1mcmEtPnRmcmFzKTsKLSAgd2hpbGUgKHdhbGtlciAhPSBOVUxMKSB7Ci0gICAgaWYgKCFhdG9tX3RmcmFfY29weV9kYXRhICgoQXRvbVRGUkEgKikgd2Fsa2VyLT5kYXRhLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB3YWxrZXIgPSBnX2xpc3RfbmV4dCAod2Fsa2VyKTsKLSAgfQotCi0gIC8qIDE2IGlzIHRoZSBzaXplIG9mIHRoZSBtZnJvIGF0b20gKi8KLSAgaWYgKCFhdG9tX21mcm9fY29weV9kYXRhICgqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0ICsgMTYsIGJ1ZmZlciwKLSAgICAgICAgICBzaXplLCBvZmZzZXQpKQotICAgIHJldHVybiAwOwotCi0gIGF0b21fd3JpdGVfc2l6ZSAoYnVmZmVyLCBzaXplLCBvZmZzZXQsIG9yaWdpbmFsX29mZnNldCk7Ci0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi0vKiBzb21lIHNhbXBsZSBkZXNjcmlwdGlvbiBjb25zdHJ1Y3Rpb24gaGVscGVycyAqLwotCi1BdG9tSW5mbyAqCi1idWlsZF9lc2RzX2V4dGVuc2lvbiAoQXRvbVRSQUsgKiB0cmFrLCBndWludDggb2JqZWN0X3R5cGUsIGd1aW50OCBzdHJlYW1fdHlwZSwKLSAgICBjb25zdCBHc3RCdWZmZXIgKiBjb2RlY19kYXRhLCBndWludDMyIGF2Z19iaXRyYXRlLCBndWludDMyIG1heF9iaXRyYXRlKQotewotICBndWludDMyIHRyYWNrX2lkOwotICBBdG9tRVNEUyAqZXNkczsKLQotICB0cmFja19pZCA9IHRyYWstPnRraGQudHJhY2tfSUQ7Ci0KLSAgZXNkcyA9IGF0b21fZXNkc19uZXcgKCk7Ci0gIGVzZHMtPmVzLmlkID0gdHJhY2tfaWQgJiAweEZGRkY7Ci0gIGVzZHMtPmVzLmRlY19jb25mX2Rlc2Mub2JqZWN0X3R5cGUgPSBvYmplY3RfdHlwZTsKLSAgZXNkcy0+ZXMuZGVjX2NvbmZfZGVzYy5zdHJlYW1fdHlwZSA9IHN0cmVhbV90eXBlIDw8IDIgfCAweDAxOwotCi0gIGlmIChhdmdfYml0cmF0ZSA+IDApCi0gICAgZXNkcy0+ZXMuZGVjX2NvbmZfZGVzYy5hdmdfYml0cmF0ZSA9IGF2Z19iaXRyYXRlOwotICBpZiAobWF4X2JpdHJhdGUgPiAwKQotICAgIGVzZHMtPmVzLmRlY19jb25mX2Rlc2MubWF4X2JpdHJhdGUgPSBtYXhfYml0cmF0ZTsKLQotICAvKiBvcHRpb25hbCBEZWNvZGVyU3BlY2lmaWNJbmZvICovCi0gIGlmIChjb2RlY19kYXRhKSB7Ci0gICAgRGVjb2RlclNwZWNpZmljSW5mb0Rlc2NyaXB0b3IgKmRlc2M7Ci0gICAgZ3NpemUgc2l6ZTsKLQotICAgIGVzZHMtPmVzLmRlY19jb25mX2Rlc2MuZGVjX3NwZWNpZmljX2luZm8gPSBkZXNjID0KLSAgICAgICAgZGVzY19kZWNfc3BlY2lmaWNfaW5mb19uZXcgKCk7Ci0gICAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKChHc3RCdWZmZXIgKikgY29kZWNfZGF0YSk7Ci0gICAgZGVzY19kZWNfc3BlY2lmaWNfaW5mb19hbGxvY19kYXRhIChkZXNjLCBzaXplKTsKLSAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKChHc3RCdWZmZXIgKikgY29kZWNfZGF0YSwgMCwgZGVzYy0+ZGF0YSwgc2l6ZSk7Ci0gIH0KLQotICByZXR1cm4gYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGVzZHMsIGF0b21fZXNkc19jb3B5X2RhdGEsCi0gICAgICBhdG9tX2VzZHNfZnJlZSk7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX2J0cnRfZXh0ZW5zaW9uIChndWludDMyIGJ1ZmZlcl9zaXplX2RiLCBndWludDMyIGF2Z19iaXRyYXRlLAotICAgIGd1aW50MzIgbWF4X2JpdHJhdGUpCi17Ci0gIEF0b21EYXRhICphdG9tX2RhdGEgPSBhdG9tX2RhdGFfbmV3IChGT1VSQ0NfYnRydCk7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBhdG9tX2RhdGFfYWxsb2NfbWVtIChhdG9tX2RhdGEsIDEyKTsKLSAgZGF0YSA9IGF0b21fZGF0YS0+ZGF0YTsKLQotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhLCBidWZmZXJfc2l6ZV9kYik7Ci0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyA0LCBtYXhfYml0cmF0ZSk7Ci0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyA4LCBhdmdfYml0cmF0ZSk7Ci0KLSAgcmV0dXJuIGJ1aWxkX2F0b21faW5mb193cmFwcGVyICgoQXRvbSAqKSBhdG9tX2RhdGEsIGF0b21fZGF0YV9jb3B5X2RhdGEsCi0gICAgICBhdG9tX2RhdGFfZnJlZSk7Ci19Ci0KLXN0YXRpYyBBdG9tSW5mbyAqCi1idWlsZF9tb3Zfd2F2ZV9leHRlbnNpb24gKGd1aW50MzIgZm91cmNjLCBBdG9tSW5mbyAqIGF0b20xLCBBdG9tSW5mbyAqIGF0b20yLAotICAgIGdib29sZWFuIHRlcm1pbmF0b3IpCi17Ci0gIEF0b21XQVZFICp3YXZlOwotICBBdG9tRlJNQSAqZnJtYTsKLSAgQXRvbSAqZXh0X2F0b207Ci0KLSAgLyogQnVpbGQgV0FWRSBhdG9tIGZvciBzYW1wbGUgdGFibGUgZW50cnkgKi8KLSAgd2F2ZSA9IGF0b21fd2F2ZV9uZXcgKCk7Ci0KLSAgLyogUHJlcGVuZCBUZXJtaW5hdG9yIGF0b20gdG8gdGhlIFdBVkUgbGlzdCBmaXJzdCwgc28gaXQgZW5kcyB1cCBsYXN0ICovCi0gIGlmICh0ZXJtaW5hdG9yKSB7Ci0gICAgZXh0X2F0b20gPSAoQXRvbSAqKSBhdG9tX2RhdGFfbmV3IChGT1VSQ0NfbnVsbCk7Ci0gICAgd2F2ZS0+ZXh0ZW5zaW9uX2F0b21zID0KLSAgICAgICAgYXRvbV9pbmZvX2xpc3RfcHJlcGVuZF9hdG9tICh3YXZlLT5leHRlbnNpb25fYXRvbXMsIChBdG9tICopIGV4dF9hdG9tLAotICAgICAgICAoQXRvbUNvcHlEYXRhRnVuYykgYXRvbV9kYXRhX2NvcHlfZGF0YSwgKEF0b21GcmVlRnVuYykgYXRvbV9kYXRhX2ZyZWUpOwotICB9Ci0KLSAgLyogQWRkIHN1cHBsaWVkIGF0b21zIHRvIFdBVkUgKi8KLSAgaWYgKGF0b20yKQotICAgIHdhdmUtPmV4dGVuc2lvbl9hdG9tcyA9IGdfbGlzdF9wcmVwZW5kICh3YXZlLT5leHRlbnNpb25fYXRvbXMsIGF0b20yKTsKLSAgaWYgKGF0b20xKQotICAgIHdhdmUtPmV4dGVuc2lvbl9hdG9tcyA9IGdfbGlzdF9wcmVwZW5kICh3YXZlLT5leHRlbnNpb25fYXRvbXMsIGF0b20xKTsKLQotICAvKiBBZGQgRlJNQSB0byB0aGUgV0FWRSAqLwotICBmcm1hID0gYXRvbV9mcm1hX25ldyAoKTsKLSAgZnJtYS0+bWVkaWFfdHlwZSA9IGZvdXJjYzsKLQotICB3YXZlLT5leHRlbnNpb25fYXRvbXMgPQotICAgICAgYXRvbV9pbmZvX2xpc3RfcHJlcGVuZF9hdG9tICh3YXZlLT5leHRlbnNpb25fYXRvbXMsIChBdG9tICopIGZybWEsCi0gICAgICAoQXRvbUNvcHlEYXRhRnVuYykgYXRvbV9mcm1hX2NvcHlfZGF0YSwgKEF0b21GcmVlRnVuYykgYXRvbV9mcm1hX2ZyZWUpOwotCi0gIHJldHVybiBidWlsZF9hdG9tX2luZm9fd3JhcHBlciAoKEF0b20gKikgd2F2ZSwgYXRvbV93YXZlX2NvcHlfZGF0YSwKLSAgICAgIGF0b21fd2F2ZV9mcmVlKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfbW92X2FhY19leHRlbnNpb24gKEF0b21UUkFLICogdHJhaywgY29uc3QgR3N0QnVmZmVyICogY29kZWNfZGF0YSwKLSAgICBndWludDMyIGF2Z19iaXRyYXRlLCBndWludDMyIG1heF9iaXRyYXRlKQotewotICBBdG9tSW5mbyAqZXNkcywgKm1wNGE7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludDMyIHRtcCA9IDA7Ci0KLSAgLyogQWRkIEVTRFMgYXRvbSB0byBXQVZFICovCi0gIGVzZHMgPSBidWlsZF9lc2RzX2V4dGVuc2lvbiAodHJhaywgRVNEU19PQkpFQ1RfVFlQRV9NUEVHNF9QMywKLSAgICAgIEVTRFNfU1RSRUFNX1RZUEVfQVVESU8sIGNvZGVjX2RhdGEsIGF2Z19iaXRyYXRlLCBtYXhfYml0cmF0ZSk7Ci0KLSAgLyogQWRkIE1QNEEgYXRvbSB0byB0aGUgV0FWRToKLSAgICogbm90IHJlYWxseSBpbiBzcGVjLCBidXQgbWFrZXMgb2Zmc2V0IGJhc2VkIHBsYXllcnMgaGFwcHkgKi8KLSAgYnVmID0gR1NUX0JVRkZFUl9ORVdfUkVBRE9OTFkgKCZ0bXAsIDQpOwotICBtcDRhID0gYnVpbGRfY29kZWNfZGF0YV9leHRlbnNpb24gKEZPVVJDQ19tcDRhLCBidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIHJldHVybiBidWlsZF9tb3Zfd2F2ZV9leHRlbnNpb24gKEZPVVJDQ19tcDRhLCBtcDRhLCBlc2RzLCBUUlVFKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfbW92X2FsYWNfZXh0ZW5zaW9uIChjb25zdCBHc3RCdWZmZXIgKiBjb2RlY19kYXRhKQotewotICBBdG9tSW5mbyAqYWxhYzsKLQotICBhbGFjID0gYnVpbGRfY29kZWNfZGF0YV9leHRlbnNpb24gKEZPVVJDQ19hbGFjLCBjb2RlY19kYXRhKTsKLQotICByZXR1cm4gYnVpbGRfbW92X3dhdmVfZXh0ZW5zaW9uIChGT1VSQ0NfYWxhYywgTlVMTCwgYWxhYywgVFJVRSk7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX2ZpZWxfZXh0ZW5zaW9uIChnaW50IGZpZWxkcykKLXsKLSAgQXRvbURhdGEgKmF0b21fZGF0YTsKLSAgZ3VpbnQ4IGYgPSBmaWVsZHM7Ci0KLSAgaWYgKGZpZWxkcyA9PSAxKSB7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBhdG9tX2RhdGEgPSBhdG9tX2RhdGFfbmV3X2Zyb21fZGF0YSAoRk9VUkNDX2ZpZWwsICZmLCAxKTsKLQotICByZXR1cm4gYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGF0b21fZGF0YSwgYXRvbV9kYXRhX2NvcHlfZGF0YSwKLSAgICAgIGF0b21fZGF0YV9mcmVlKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfanAyeF9leHRlbnNpb24gKGNvbnN0IEdzdEJ1ZmZlciAqIHByZWZpeCkKLXsKLSAgQXRvbURhdGEgKmF0b21fZGF0YTsKLQotICBpZiAoIXByZWZpeCkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgYXRvbV9kYXRhID0gYXRvbV9kYXRhX25ld19mcm9tX2dzdF9idWZmZXIgKEZPVVJDQ19qcDJ4LCBwcmVmaXgpOwotCi0gIHJldHVybiBidWlsZF9hdG9tX2luZm9fd3JhcHBlciAoKEF0b20gKikgYXRvbV9kYXRhLCBhdG9tX2RhdGFfY29weV9kYXRhLAotICAgICAgYXRvbV9kYXRhX2ZyZWUpOwotfQotCi1BdG9tSW5mbyAqCi1idWlsZF9qcDJoX2V4dGVuc2lvbiAoZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsIGNvbnN0IGdjaGFyICogY29sb3JzcGFjZSwKLSAgICBnaW50IG5jb21wLCBjb25zdCBHVmFsdWUgKiBjbWFwX2FycmF5LCBjb25zdCBHVmFsdWUgKiBjZGVmX2FycmF5KQotewotICBBdG9tRGF0YSAqYXRvbV9kYXRhOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQ4IGNlbnVtOwotICBnaW50IGk7Ci0gIGdpbnQgaWRocl9zaXplID0gMjI7Ci0gIGdpbnQgY29scl9zaXplID0gMTU7Ci0gIGdpbnQgY21hcF9zaXplID0gMCwgY2RlZl9zaXplID0gMDsKLSAgZ2ludCBjbWFwX2FycmF5X3NpemUgPSAwOwotICBnaW50IGNkZWZfYXJyYXlfc2l6ZSA9IDA7Ci0gIEdzdEJ5dGVXcml0ZXIgd3JpdGVyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjbWFwX2FycmF5ID09IE5VTEwgfHwKLSAgICAgIEdTVF9WQUxVRV9IT0xEU19BUlJBWSAoY21hcF9hcnJheSksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2RlZl9hcnJheSA9PSBOVUxMIHx8Ci0gICAgICBHU1RfVkFMVUVfSE9MRFNfQVJSQVkgKGNkZWZfYXJyYXkpLCBOVUxMKTsKLQotICBpZiAoZ19zdHJfZXF1YWwgKGNvbG9yc3BhY2UsICJzUkdCIikpIHsKLSAgICBjZW51bSA9IDB4MTA7Ci0gICAgaWYgKG5jb21wID09IDApCi0gICAgICBuY29tcCA9IDM7Ci0gIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKGNvbG9yc3BhY2UsICJHUkFZIikpIHsKLSAgICBjZW51bSA9IDB4MTE7Ci0gICAgaWYgKG5jb21wID09IDApCi0gICAgICBuY29tcCA9IDE7Ci0gIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKGNvbG9yc3BhY2UsICJzWVVWIikpIHsKLSAgICBjZW51bSA9IDB4MTI7Ci0gICAgaWYgKG5jb21wID09IDApCi0gICAgICBuY29tcCA9IDM7Ci0gIH0gZWxzZQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmIChjbWFwX2FycmF5KSB7Ci0gICAgY21hcF9hcnJheV9zaXplID0gZ3N0X3ZhbHVlX2FycmF5X2dldF9zaXplIChjbWFwX2FycmF5KTsKLSAgICBjbWFwX3NpemUgPSA4ICsgY21hcF9hcnJheV9zaXplICogNDsKLSAgfQotICBpZiAoY2RlZl9hcnJheSkgewotICAgIGNkZWZfYXJyYXlfc2l6ZSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoY2RlZl9hcnJheSk7Ci0gICAgY2RlZl9zaXplID0gOCArIDIgKyBjZGVmX2FycmF5X3NpemUgKiA2OwotICB9Ci0KLSAgZ3N0X2J5dGVfd3JpdGVyX2luaXRfd2l0aF9zaXplICgmd3JpdGVyLAotICAgICAgaWRocl9zaXplICsgY29scl9zaXplICsgY21hcF9zaXplICsgY2RlZl9zaXplLCBUUlVFKTsKLQotICAvKiBpaGRyID0gaW1hZ2UgaGVhZGVyIGJveCAqLwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZ3cml0ZXIsIDIyKTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkICgmd3JpdGVyLCBGT1VSQ0NfaWhkcik7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJndyaXRlciwgaGVpZ2h0KTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkICgmd3JpdGVyLCB3aWR0aCk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgbmNvbXApOwotICAvKiA4IGJpdHMgcGVyIGNvbXBvbmVudCwgdW5zaWduZWQgKi8KLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCZ3cml0ZXIsIDB4Nyk7Ci0gIC8qIGNvbXByZXNzaW9uIHR5cGU7IHJlc2VydmVkICovCi0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkICgmd3JpdGVyLCAweDcpOwotICAvKiBjb2xvdXIgc3BhY2UgKHVuKWtub3duICovCi0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkICgmd3JpdGVyLCAweDApOwotICAvKiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgKGJveCBwcmVzZW50KSAqLwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoJndyaXRlciwgMHgwKTsKLQotICAvKiBjb2xvdXIgc3BlY2lmaWNhdGlvbiBib3ggKi8KLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkICgmd3JpdGVyLCAxNSk7Ci0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJndyaXRlciwgRk9VUkNDX2NvbHIpOwotCi0gIC8qIHNwZWNpZmljYXRpb24gbWV0aG9kOiBlbnVtZXJhdGVkICovCi0gIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDhfdW5jaGVja2VkICgmd3JpdGVyLCAweDEpOwotICAvKiBwcmVjZWRlbmNlOyByZXNlcnZlZCAqLwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4X3VuY2hlY2tlZCAoJndyaXRlciwgMHgwKTsKLSAgLyogYXBwcm94aW1hdGlvbjsgcmVzZXJ2ZWQgKi8KLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCZ3cml0ZXIsIDB4MCk7Ci0gIC8qIGVudW1lcmF0ZWQgY29sb3Vyc3BhY2UgKi8KLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkICgmd3JpdGVyLCBjZW51bSk7Ci0KLSAgaWYgKGNtYXBfYXJyYXkpIHsKLSAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZ3cml0ZXIsIGNtYXBfc2l6ZSk7Ci0gICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGVfdW5jaGVja2VkICgmd3JpdGVyLCBGT1VSQ0NfY21hcCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNtYXBfYXJyYXlfc2l6ZTsgaSsrKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKml0ZW07Ci0gICAgICBnaW50IHZhbHVlOwotICAgICAgZ3VpbnQxNiBjbXA7Ci0gICAgICBndWludDggbXR5cDsKLSAgICAgIGd1aW50OCBwY29sOwotICAgICAgaXRlbSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKGNtYXBfYXJyYXksIGkpOwotICAgICAgdmFsdWUgPSBnX3ZhbHVlX2dldF9pbnQgKGl0ZW0pOwotCi0gICAgICAvKiB2YWx1ZSBpcyAnKG10eXAgPDwgMjQpIHwgKHBjb2wgPDwgMTYpIHwgY21wJyAqLwotICAgICAgY21wID0gdmFsdWUgJiAweEZGRkY7Ci0gICAgICBtdHlwID0gdmFsdWUgPj4gMjQ7Ci0gICAgICBwY29sID0gKHZhbHVlID4+IDE2KSAmIDB4RkY7Ci0KLSAgICAgIGlmIChtdHlwID09IDEpCi0gICAgICAgIEdTVF9XQVJOSU5HICgiTVRZUCBvZiBjbWFwIGF0b20gc2lnbmFscyBQYWxsZXRlIE1hcHBpbmcsIGJ1dCB3ZSBkb24ndCAiCi0gICAgICAgICAgICAiaGFuZGxlIFBhbGxldGUgbWFwcGluZyBhdG9tcyB5ZXQiKTsKLQotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgmd3JpdGVyLCBjbXApOwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCZ3cml0ZXIsIG10eXApOwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OF91bmNoZWNrZWQgKCZ3cml0ZXIsIHBjb2wpOwotICAgIH0KLSAgfQotCi0gIGlmIChjZGVmX2FycmF5KSB7Ci0gICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfYmVfdW5jaGVja2VkICgmd3JpdGVyLCBjZGVmX3NpemUpOwotICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJndyaXRlciwgRk9VUkNDX2NkZWYpOwotICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgY2RlZl9hcnJheV9zaXplKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY2RlZl9hcnJheV9zaXplOyBpKyspIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqaXRlbTsKLSAgICAgIGdpbnQgdmFsdWU7Ci0gICAgICBpdGVtID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoY2RlZl9hcnJheSwgaSk7Ci0gICAgICB2YWx1ZSA9IGdfdmFsdWVfZ2V0X2ludCAoaXRlbSk7Ci0KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgaSk7Ci0gICAgICBpZiAodmFsdWUgPiAwKSB7Ci0gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgMCk7Ci0gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJndyaXRlciwgdmFsdWUpOwotICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDApIHsKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgmd3JpdGVyLCAtdmFsdWUpOwotICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9iZV91bmNoZWNrZWQgKCZ3cml0ZXIsIDApOyAgIC8qIFRPRE8gd2hhdCBoZXJlPyAqLwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgmd3JpdGVyLCAxKTsKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfYmVfdW5jaGVja2VkICgmd3JpdGVyLCAwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBnX2Fzc2VydCAoZ3N0X2J5dGVfd3JpdGVyX2dldF9yZW1haW5pbmcgKCZ3cml0ZXIpID09IDApOwotICBidWYgPSBnc3RfYnl0ZV93cml0ZXJfcmVzZXRfYW5kX2dldF9idWZmZXIgKCZ3cml0ZXIpOwotCi0gIGF0b21fZGF0YSA9IGF0b21fZGF0YV9uZXdfZnJvbV9nc3RfYnVmZmVyIChGT1VSQ0NfanAyaCwgYnVmKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGF0b21fZGF0YSwgYXRvbV9kYXRhX2NvcHlfZGF0YSwKLSAgICAgIGF0b21fZGF0YV9mcmVlKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfY29kZWNfZGF0YV9leHRlbnNpb24gKGd1aW50MzIgZm91cmNjLCBjb25zdCBHc3RCdWZmZXIgKiBjb2RlY19kYXRhKQotewotICBBdG9tRGF0YSAqZGF0YTsKLSAgQXRvbUluZm8gKnJlc3VsdCA9IE5VTEw7Ci0KLSAgaWYgKGNvZGVjX2RhdGEpIHsKLSAgICBkYXRhID0gYXRvbV9kYXRhX25ld19mcm9tX2dzdF9idWZmZXIgKGZvdXJjYywgY29kZWNfZGF0YSk7Ci0gICAgcmVzdWx0ID0gYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGRhdGEsIGF0b21fZGF0YV9jb3B5X2RhdGEsCi0gICAgICAgIGF0b21fZGF0YV9mcmVlKTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX2Ftcl9leHRlbnNpb24gKHZvaWQpCi17Ci0gIGd1aW50OCBleHRbOV07Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBBdG9tSW5mbyAqcmVzOwotCi0gIC8qIHZlbmRvciAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChleHQsIDApOwotICAvKiBkZWNvZGVyIHZlcnNpb24gKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChleHQgKyA0LCAwKTsKLSAgLyogbW9kZSBzZXQgKGFsbCBtb2RlcykgKi8KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZXh0ICsgNSwgMHg4MUZGKTsKLSAgLyogbW9kZSBjaGFuZ2UgcGVyaW9kIChubyByZXN0cmljdGlvbikgKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChleHQgKyA3LCAwKTsKLSAgLyogZnJhbWVzIHBlciBzYW1wbGUgKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChleHQgKyA4LCAxKTsKLQotICBidWYgPSBHU1RfQlVGRkVSX05FV19SRUFET05MWSAoZXh0LCBzaXplb2YgKGV4dCkpOwotICByZXMgPSBidWlsZF9jb2RlY19kYXRhX2V4dGVuc2lvbiAoRk9VUkNDX2RhbXIsIGJ1Zik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIHJldHVybiByZXM7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX2gyNjNfZXh0ZW5zaW9uICh2b2lkKQotewotICBndWludDggZXh0WzddOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgQXRvbUluZm8gKnJlczsKLQotICAvKiB2ZW5kb3IgKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZXh0LCAwKTsKLSAgLyogZGVjb2RlciB2ZXJzaW9uICovCi0gIEdTVF9XUklURV9VSU5UOCAoZXh0ICsgNCwgMCk7Ci0gIC8qIGxldmVsIC8gcHJvZmlsZSAqLwotICAvKiBGSVhNRSA/IG1heWJlID8gb2J0YWluIHNvbWV3aGVyZTsgYmFzZWxpbmUgZm9yIG5vdyAqLwotICBHU1RfV1JJVEVfVUlOVDggKGV4dCArIDUsIDEwKTsKLSAgR1NUX1dSSVRFX1VJTlQ4IChleHQgKyA2LCAwKTsKLQotICBidWYgPSBHU1RfQlVGRkVSX05FV19SRUFET05MWSAoZXh0LCBzaXplb2YgKGV4dCkpOwotICByZXMgPSBidWlsZF9jb2RlY19kYXRhX2V4dGVuc2lvbiAoRk9VUkNDX2QyNjMsIGJ1Zik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIHJldHVybiByZXM7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX2dhbWFfYXRvbSAoZ2RvdWJsZSBnYW1tYSkKLXsKLSAgQXRvbUluZm8gKnJlczsKLSAgZ3VpbnQzMiBnYW1tYV9mcDsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgLyogY29udmVydCB0byB1aW50MzIgZnJvbSBmaXhlZCBwb2ludCAqLwotICBnYW1tYV9mcCA9IChndWludDMyKSA2NTUzNiAqZ2FtbWE7Ci0KLSAgZ2FtbWFfZnAgPSBHVUlOVDMyX1RPX0JFIChnYW1tYV9mcCk7Ci0gIGJ1ZiA9IEdTVF9CVUZGRVJfTkVXX1JFQURPTkxZICgmZ2FtbWFfZnAsIDQpOwotICByZXMgPSBidWlsZF9jb2RlY19kYXRhX2V4dGVuc2lvbiAoRk9VUkNDX2dhbWEsIGJ1Zik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIHJldHVybiByZXM7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX1NNSV9hdG9tIChjb25zdCBHc3RCdWZmZXIgKiBzZXFoKQotewotICBBdG9tSW5mbyAqcmVzOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIC8qIHRoZSBzZXFoIHBsdXMgaXRzIHNpemUgYW5kIGZvdXJjYyAqLwotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKEdzdEJ1ZmZlciAqKSBzZXFoKTsKLSAgZGF0YSA9IGdfbWFsbG9jIChzaXplICsgOCk7Ci0KLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgRk9VUkNDX1NFUUgpOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhICsgNCwgc2l6ZSArIDgpOwotICBnc3RfYnVmZmVyX2V4dHJhY3QgKChHc3RCdWZmZXIgKikgc2VxaCwgMCwgZGF0YSArIDgsIHNpemUpOwotICBidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCBzaXplICsgOCk7Ci0gIHJlcyA9IGJ1aWxkX2NvZGVjX2RhdGFfZXh0ZW5zaW9uIChGT1VSQ0NfU01JXywgYnVmKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEF0b21JbmZvICoKLWJ1aWxkX2ltYV9hZHBjbV9hdG9tIChnaW50IGNoYW5uZWxzLCBnaW50IHJhdGUsIGdpbnQgYmxvY2tzaXplKQotewotI2RlZmluZSBJTUFfQURQQ01fQVRPTV9TSVpFIDIwCi0gIEF0b21EYXRhICphdG9tX2RhdGE7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0gIGdpbnQgc2FtcGxlc3BlcmJsb2NrOwotICBnaW50IGJ5dGVzcGVyc2VjOwotCi0gIC8qIFRoZSBGT1VSQ0MgZm9yIFdBViBjb2RlY3MgaW4gUVQgaXMgJ21zJyBmb2xsb3dlZCBieSB0aGUgMTYgYml0IHdhdmUgY29kZWMKLSAgICAgaWRlbnRpZmllci4gTm90ZSB0aGF0IHRoZSBpZGVudGlmaWVyIGhlcmUgaXMgYmlnLWVuZGlhbiwgYnV0IHdoZW4gdXNlZAotICAgICB3aXRoaW4gdGhlIFdBVkUgaGVhZGVyIChiZWxvdyksIGl0J3MgbGl0dGxlIGVuZGlhbi4gKi8KLSAgZm91cmNjID0gTVNfV0FWRV9GT1VSQ0MgKDB4MTEpOwotCi0gIGF0b21fZGF0YSA9IGF0b21fZGF0YV9uZXcgKGZvdXJjYyk7Ci0gIGF0b21fZGF0YV9hbGxvY19tZW0gKGF0b21fZGF0YSwgSU1BX0FEUENNX0FUT01fU0laRSk7Ci0gIGRhdGEgPSBhdG9tX2RhdGEtPmRhdGE7Ci0KLSAgLyogVGhpcyBhdG9tJ3MgY29udGVudCBpcyBhIFdBVkUgaGVhZGVyLCBpbmNsdWRpbmcgMiBieXRlcyBvZiBleHRyYSBkYXRhLgotICAgICBOb3RlIHRoYXQgYWxsIG9mIHRoaXMgaXMgbGl0dGxlLWVuZGlhbiwgdW5saWtlIG1vc3Qgc3R1ZmYgaW4gcXQuICovCi0gIC8qIDQgYnl0ZXMgaGVhZGVyIHBlciBjaGFubmVsIChpbmNsdWRpbmcgMSBzYW1wbGUpLiBUaGVuIDIgc2FtcGxlcyBwZXIgYnl0ZQotICAgICBmb3IgdGhlIHJlc3QuIFNpbXBsaWZpZXMgdG8gdGhpcy4gKi8KLSAgc2FtcGxlc3BlcmJsb2NrID0gMiAqIGJsb2Nrc2l6ZSAvIGNoYW5uZWxzIC0gNzsKLSAgYnl0ZXNwZXJzZWMgPSByYXRlICogYmxvY2tzaXplIC8gc2FtcGxlc3BlcmJsb2NrOwotICBHU1RfV1JJVEVfVUlOVDE2X0xFIChkYXRhLCAweDExKTsKLSAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoZGF0YSArIDIsIGNoYW5uZWxzKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSArIDQsIHJhdGUpOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChkYXRhICsgOCwgYnl0ZXNwZXJzZWMpOwotICBHU1RfV1JJVEVfVUlOVDE2X0xFIChkYXRhICsgMTIsIGJsb2Nrc2l6ZSk7Ci0gIEdTVF9XUklURV9VSU5UMTZfTEUgKGRhdGEgKyAxNCwgNCk7Ci0gIEdTVF9XUklURV9VSU5UMTZfTEUgKGRhdGEgKyAxNiwgMik7ICAgLyogVHdvIGV4dHJhIGJ5dGVzICovCi0gIEdTVF9XUklURV9VSU5UMTZfTEUgKGRhdGEgKyAxOCwgc2FtcGxlc3BlcmJsb2NrKTsKLQotICByZXR1cm4gYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGF0b21fZGF0YSwgYXRvbV9kYXRhX2NvcHlfZGF0YSwKLSAgICAgIGF0b21fZGF0YV9mcmVlKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfaW1hX2FkcGNtX2V4dGVuc2lvbiAoZ2ludCBjaGFubmVscywgZ2ludCByYXRlLCBnaW50IGJsb2Nrc2l6ZSkKLXsKLSAgQXRvbVdBVkUgKndhdmU7Ci0gIEF0b21GUk1BICpmcm1hOwotICBBdG9tICpleHRfYXRvbTsKLQotICAvKiBBZGQgV0FWRSBhdG9tICovCi0gIHdhdmUgPSBhdG9tX3dhdmVfbmV3ICgpOwotCi0gIC8qIFByZXBlbmQgVGVybWluYXRvciBhdG9tIHRvIHRoZSBXQVZFIGxpc3QgZmlyc3QsIHNvIGl0IGVuZHMgdXAgbGFzdCAqLwotICBleHRfYXRvbSA9IChBdG9tICopIGF0b21fZGF0YV9uZXcgKEZPVVJDQ19udWxsKTsKLSAgd2F2ZS0+ZXh0ZW5zaW9uX2F0b21zID0KLSAgICAgIGF0b21faW5mb19saXN0X3ByZXBlbmRfYXRvbSAod2F2ZS0+ZXh0ZW5zaW9uX2F0b21zLCAoQXRvbSAqKSBleHRfYXRvbSwKLSAgICAgIChBdG9tQ29weURhdGFGdW5jKSBhdG9tX2RhdGFfY29weV9kYXRhLCAoQXRvbUZyZWVGdW5jKSBhdG9tX2RhdGFfZnJlZSk7Ci0KLSAgLyogQWRkIHdhdmUgaW1hIGFkcGNtIGF0b20gdG8gV0FWRSAqLwotICB3YXZlLT5leHRlbnNpb25fYXRvbXMgPSBnX2xpc3RfcHJlcGVuZCAod2F2ZS0+ZXh0ZW5zaW9uX2F0b21zLAotICAgICAgYnVpbGRfaW1hX2FkcGNtX2F0b20gKGNoYW5uZWxzLCByYXRlLCBibG9ja3NpemUpKTsKLQotICAvKiBBZGQgRlJNQSB0byB0aGUgV0FWRSAqLwotICBmcm1hID0gYXRvbV9mcm1hX25ldyAoKTsKLSAgZnJtYS0+bWVkaWFfdHlwZSA9IE1TX1dBVkVfRk9VUkNDICgweDExKTsKLQotICB3YXZlLT5leHRlbnNpb25fYXRvbXMgPQotICAgICAgYXRvbV9pbmZvX2xpc3RfcHJlcGVuZF9hdG9tICh3YXZlLT5leHRlbnNpb25fYXRvbXMsIChBdG9tICopIGZybWEsCi0gICAgICAoQXRvbUNvcHlEYXRhRnVuYykgYXRvbV9mcm1hX2NvcHlfZGF0YSwgKEF0b21GcmVlRnVuYykgYXRvbV9mcm1hX2ZyZWUpOwotCi0gIHJldHVybiBidWlsZF9hdG9tX2luZm9fd3JhcHBlciAoKEF0b20gKikgd2F2ZSwgYXRvbV93YXZlX2NvcHlfZGF0YSwKLSAgICAgIGF0b21fd2F2ZV9mcmVlKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfYWMzX2V4dGVuc2lvbiAoZ3VpbnQ4IGZzY29kLCBndWludDggYnNpZCwgZ3VpbnQ4IGJzbW9kLCBndWludDggYWNtb2QsCi0gICAgZ3VpbnQ4IGxmZV9vbiwgZ3VpbnQ4IGJpdHJhdGVfY29kZSkKLXsKLSAgQXRvbURhdGEgKmF0b21fZGF0YSA9IGF0b21fZGF0YV9uZXcgKEZPVVJDQ19kYWMzKTsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIGF0b21fZGF0YV9hbGxvY19tZW0gKGF0b21fZGF0YSwgMyk7Ci0gIGRhdGEgPSBhdG9tX2RhdGEtPmRhdGE7Ci0KLSAgLyogQml0cyBmcm9tIHRoZSBzcGVjCi0gICAqIGZzY29kIDIKLSAgICogYnNpZCAgNQotICAgKiBic21vZCAzCi0gICAqIGFjbW9kIDMKLSAgICogbGZlb24gMQotICAgKiBiaXRfcmF0ZV9jb2RlIDUKLSAgICogcmVzZXJ2ZWQgNQotICAgKi8KLQotICAvKiBTb21lIGJpdCBtYW5pcHVsYXRpb24gbWFnaWMuIE5lZWQgYml0d3JpdGVyICovCi0gIGRhdGFbMF0gPSAoZnNjb2QgPDwgNikgfCAoYnNpZCA8PCAxKSB8ICgoYnNtb2QgPj4gMikgJiAxKTsKLSAgZGF0YVsxXSA9Ci0gICAgICAoKGJzbW9kICYgMHgzKSA8PCA2KSB8IChhY21vZCA8PCAzKSB8ICgobGZlX29uICYgMSkgPDwgMikgfCAoKGJpdHJhdGVfY29kZQotICAgICAgICAgID4+IDMpICYgMHgzKTsKLSAgZGF0YVsyXSA9ICgoYml0cmF0ZV9jb2RlICYgMHg3KSA8PCA1KTsKLQotICByZXR1cm4gYnVpbGRfYXRvbV9pbmZvX3dyYXBwZXIgKChBdG9tICopIGF0b21fZGF0YSwgYXRvbV9kYXRhX2NvcHlfZGF0YSwKLSAgICAgIGF0b21fZGF0YV9mcmVlKTsKLX0KLQotQXRvbUluZm8gKgotYnVpbGRfb3B1c19leHRlbnNpb24gKGd1aW50MzIgcmF0ZSwgZ3VpbnQ4IGNoYW5uZWxzLCBndWludDggbWFwcGluZ19mYW1pbHksCi0gICAgZ3VpbnQ4IHN0cmVhbV9jb3VudCwgZ3VpbnQ4IGNvdXBsZWRfY291bnQsIGd1aW50OCBjaGFubmVsX21hcHBpbmdbMjU2XSwKLSAgICBndWludDE2IHByZV9za2lwLCBndWludDE2IG91dHB1dF9nYWluKQotewotICBBdG9tRGF0YSAqYXRvbV9kYXRhOwotICBndWludDggKmRhdGFfYmxvY2s7Ci0gIEdzdEJ5dGVXcml0ZXIgYnc7Ci0gIGdib29sZWFuIGhkbCA9IFRSVUU7Ci0gIGd1aW50IGRhdGFfYmxvY2tfbGVuOwotCi0gIGdzdF9ieXRlX3dyaXRlcl9pbml0ICgmYncpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50OCAoJmJ3LCAweDAwKTsgLyogdmVyc2lvbiBudW1iZXIgKi8KLSAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCZidywgY2hhbm5lbHMpOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MTZfbGUgKCZidywgcHJlX3NraXApOwotICBoZGwgJj0gZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgcmF0ZSk7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQxNl9sZSAoJmJ3LCBvdXRwdXRfZ2Fpbik7Ci0gIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmYncsIG1hcHBpbmdfZmFtaWx5KTsKLSAgaWYgKG1hcHBpbmdfZmFtaWx5ID4gMCkgewotICAgIGhkbCAmPSBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQ4ICgmYncsIHN0cmVhbV9jb3VudCk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfdWludDggKCZidywgY291cGxlZF9jb3VudCk7Ci0gICAgaGRsICY9IGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YSAoJmJ3LCBjaGFubmVsX21hcHBpbmcsIGNoYW5uZWxzKTsKLSAgfQotCi0gIGlmICghaGRsKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJFcnJvciBjcmVhdGluZyBoZWFkZXIiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGRhdGFfYmxvY2tfbGVuID0gZ3N0X2J5dGVfd3JpdGVyX2dldF9zaXplICgmYncpOwotICBkYXRhX2Jsb2NrID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfZGF0YSAoJmJ3KTsKLSAgYXRvbV9kYXRhID0gYXRvbV9kYXRhX25ld19mcm9tX2RhdGEgKEZPVVJDQ19kb3BzLCBkYXRhX2Jsb2NrLCBkYXRhX2Jsb2NrX2xlbik7Ci0gIGdfZnJlZSAoZGF0YV9ibG9jayk7Ci0KLSAgcmV0dXJuIGJ1aWxkX2F0b21faW5mb193cmFwcGVyICgoQXRvbSAqKSBhdG9tX2RhdGEsIGF0b21fZGF0YV9jb3B5X2RhdGEsCi0gICAgICBhdG9tX2RhdGFfZnJlZSk7Ci19Ci0KLUF0b21JbmZvICoKLWJ1aWxkX3V1aWRfeG1wX2F0b20gKEdzdEJ1ZmZlciAqIHhtcF9kYXRhKQotewotICBBdG9tVVVJRCAqdXVpZDsKLSAgZ3NpemUgc2l6ZTsKLSAgc3RhdGljIGNvbnN0IGd1aW50OCB4bXBfdXVpZFtdID0geyAweEJFLCAweDdBLCAweENGLCAweENCLAotICAgIDB4OTcsIDB4QTksIDB4NDIsIDB4RTgsCi0gICAgMHg5QywgMHg3MSwgMHg5OSwgMHg5NCwKLSAgICAweDkxLCAweEUzLCAweEFGLCAweEFDCi0gIH07Ci0KLSAgaWYgKHhtcF9kYXRhID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgdXVpZCA9IGF0b21fdXVpZF9uZXcgKCk7Ci0gIG1lbWNweSAodXVpZC0+dXVpZCwgeG1wX3V1aWQsIDE2KTsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoeG1wX2RhdGEpOwotICB1dWlkLT5kYXRhID0gZ19tYWxsb2MgKHNpemUpOwotICB1dWlkLT5kYXRhbGVuID0gc2l6ZTsKLSAgZ3N0X2J1ZmZlcl9leHRyYWN0ICh4bXBfZGF0YSwgMCwgdXVpZC0+ZGF0YSwgc2l6ZSk7Ci0KLSAgcmV0dXJuIGJ1aWxkX2F0b21faW5mb193cmFwcGVyICgoQXRvbSAqKSB1dWlkLCBhdG9tX3V1aWRfY29weV9kYXRhLAotICAgICAgYXRvbV91dWlkX2ZyZWUpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9hdG9tcy5oIGIvZ3N0L2lzb21wNC9hdG9tcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODNkOWNmLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvYXRvbXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOTAgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgX19BVE9NU19IX18KLSNkZWZpbmUgX19BVE9NU19IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgImRlc2NyaXB0b3JzLmgiCi0jaW5jbHVkZSAicHJvcGVydGllcy5oIgotI2luY2x1ZGUgImZvdXJjYy5oIgotCi0vKiBoZWxwZXIgc3RvcmFnZSBzdHJ1Y3QgKi8KLSNkZWZpbmUgQVRPTV9BUlJBWShzdHJ1Y3RfdHlwZSkgXAotc3RydWN0IHsgXAotICBndWludCBzaXplOyBcCi0gIGd1aW50IGxlbjsgXAotICBzdHJ1Y3RfdHlwZSAqZGF0YTsgXAotfQotCi0vKiBzdG9yYWdlIGhlbHBlcnMgKi8KLQotI2RlZmluZSBhdG9tX2FycmF5X2luaXQoYXJyYXksIHJlc2VydmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoYXJyYXkpLT5sZW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoYXJyYXkpLT5zaXplID0gcmVzZXJ2ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoYXJyYXkpLT5kYXRhID0gZ19tYWxsb2MgKHNpemVvZiAoKihhcnJheSktPmRhdGEpICogcmVzZXJ2ZSk7ICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgYXRvbV9hcnJheV9hcHBlbmQoYXJyYXksIGVsbXQsIGluYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19hc3NlcnQgKChhcnJheSktPmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19hc3NlcnQgKGluYyA+IDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKEdfVU5MSUtFTFkgKChhcnJheSktPmxlbiA9PSAoYXJyYXkpLT5zaXplKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXJyYXkpLT5zaXplICs9IGluYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXJyYXkpLT5kYXRhID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ19yZWFsbG9jICgoYXJyYXkpLT5kYXRhLCBzaXplb2YgKCooKGFycmF5KS0+ZGF0YSkpICogKGFycmF5KS0+c2l6ZSk7IFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKGFycmF5KS0+ZGF0YVsoYXJyYXkpLT5sZW5dID0gZWxtdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKGFycmF5KS0+bGVuKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIGF0b21fYXJyYXlfZ2V0X2xlbihhcnJheSkgICAgICAgICAgICAgICAgICAoKGFycmF5KS0+bGVuKQotI2RlZmluZSBhdG9tX2FycmF5X2luZGV4KGFycmF5LCBpbmRleCkgICAgICAgICAgICAgKChhcnJheSktPmRhdGFbaW5kZXhdKQotCi0jZGVmaW5lIGF0b21fYXJyYXlfY2xlYXIoYXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChhcnJheSktPnNpemUgPSAoYXJyYXkpLT5sZW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfZnJlZSAoKGFycmF5KS0+ZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChhcnJheSktPmRhdGEgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotLyogbGlnaHQtd2VpZ2h0IGNvbnRleHQgdGhhdCBtYXkgaW5mbHVlbmNlIGhlYWRlciBhdG9tIHRyZWUgY29uc3RydWN0aW9uICovCi10eXBlZGVmIGVudW0gX0F0b21zVHJlZUZsYXZvcgotewotICBBVE9NU19UUkVFX0ZMQVZPUl9NT1YsCi0gIEFUT01TX1RSRUVfRkxBVk9SX0lTT00sCi0gIEFUT01TX1RSRUVfRkxBVk9SXzNHUCwKLSAgQVRPTVNfVFJFRV9GTEFWT1JfSVNNTAotfSBBdG9tc1RyZWVGbGF2b3I7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tc0NvbnRleHQKLXsKLSAgQXRvbXNUcmVlRmxhdm9yIGZsYXZvcjsKLX0gQXRvbXNDb250ZXh0OwotCi1BdG9tc0NvbnRleHQqIGF0b21zX2NvbnRleHRfbmV3ICAoQXRvbXNUcmVlRmxhdm9yIGZsYXZvcik7Ci12b2lkICAgICAgICAgIGF0b21zX2NvbnRleHRfZnJlZSAoQXRvbXNDb250ZXh0ICpjb250ZXh0KTsKLQotI2RlZmluZSBNRVRBREFUQV9EQVRBX0ZMQUcgMHgwCi0jZGVmaW5lIE1FVEFEQVRBX1RFWFRfRkxBRyAweDEKLQotLyogYXRvbSBkZWZzIGFuZCBmdW5jdGlvbnMgKi8KLQotLyoKLSAqIFVzZWQgZm9yIHN0b3JpbmcgdGltZSByZWxhdGVkIHZhbHVlcyBmb3Igc29tZSBhdG9tcy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX1RpbWVJbmZvCi17Ci0gIGd1aW50NjQgY3JlYXRpb25fdGltZTsKLSAgZ3VpbnQ2NCBtb2RpZmljYXRpb25fdGltZTsKLSAgZ3VpbnQzMiB0aW1lc2NhbGU7Ci0gIGd1aW50NjQgZHVyYXRpb247Ci19IFRpbWVJbmZvOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbQotewotICBndWludDMyIHNpemU7Ci0gIGd1aW50MzIgdHlwZTsKLSAgZ3VpbnQ2NCBleHRlbmRlZF9zaXplOwotfSBBdG9tOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbUZ1bGwKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgZ3VpbnQ4IHZlcnNpb247Ci0gIGd1aW50OCBmbGFnc1szXTsKLX0gQXRvbUZ1bGw7Ci0KLS8qCi0gKiBHZW5lcmljIGV4dGVuc2lvbiBhdG9tCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9BdG9tRGF0YQotewotICBBdG9tIGhlYWRlcjsKLQotICAvKiBub3Qgd3JpdHRlbiAqLwotICBndWludDMyIGRhdGFsZW47Ci0KLSAgZ3VpbnQ4ICpkYXRhOwotfSBBdG9tRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21VVUlECi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIGd1aW50OCB1dWlkWzE2XTsKLQotICAvKiBub3Qgd3JpdHRlbiAqLwotICBndWludDMyIGRhdGFsZW47Ci0KLSAgZ3VpbnQ4ICpkYXRhOwotfSBBdG9tVVVJRDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21GVFlQCi17Ci0gIEF0b20gaGVhZGVyOwotICBndWludDMyIG1ham9yX2JyYW5kOwotICBndWludDMyIHZlcnNpb247Ci0gIGd1aW50MzIgKmNvbXBhdGlibGVfYnJhbmRzOwotCi0gIC8qIG5vdCB3cml0dGVuICovCi0gIGd1aW50MzIgY29tcGF0aWJsZV9icmFuZHNfc2l6ZTsKLX0gQXRvbUZUWVA7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tTVZIRAotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgLyogdmVyc2lvbiAwOiAzMiBiaXRzICovCi0gIFRpbWVJbmZvIHRpbWVfaW5mbzsKLQotICBndWludDMyIHByZWZlcmVkX3JhdGU7ICAgICAgLyogSVNPOiAweDAwMDEwMDAwICovCi0gIGd1aW50MTYgdm9sdW1lOyAgICAgICAgICAgICAvKiBJU086IDB4MDEwMCAqLwotICBndWludDE2IHJlc2VydmVkMzsgICAgICAgICAgLyogSVNPOiAweDAgKi8KLSAgZ3VpbnQzMiByZXNlcnZlZDRbMl07ICAgICAgIC8qIElTTzogMCwgMCAqLwotICAvKiBJU086IGlkZW50aXR5IG1hdHJpeCA9Ci0gICAqIHsgMHgwMDAxMDAwMCwgMCwgMCwgMCwgMHgwMDAxMDAwMCwgMCwgMCwgMCwgMHg0MDAwMDAwMCB9ICovCi0gIGd1aW50MzIgbWF0cml4WzldOwotCi0gIC8qIElTTzogYWxsIDAgKi8KLSAgZ3VpbnQzMiBwcmV2aWV3X3RpbWU7Ci0gIGd1aW50MzIgcHJldmlld19kdXJhdGlvbjsKLSAgZ3VpbnQzMiBwb3N0ZXJfdGltZTsKLSAgZ3VpbnQzMiBzZWxlY3Rpb25fdGltZTsKLSAgZ3VpbnQzMiBzZWxlY3Rpb25fZHVyYXRpb247Ci0gIGd1aW50MzIgY3VycmVudF90aW1lOwotCi0gIGd1aW50MzIgbmV4dF90cmFja19pZDsKLX0gQXRvbU1WSEQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tVEtIRAotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgLyogdmVyc2lvbiAwOiAzMiBiaXRzICovCi0gIC8qIGxpa2UgdGhlIFRpbWVJbmZvIHN0cnVjdCwgYnV0IGl0IGhhcyB0aGlzIHRyYWNrX0lEIGluc2lkZSAqLwotICBndWludDY0IGNyZWF0aW9uX3RpbWU7Ci0gIGd1aW50NjQgbW9kaWZpY2F0aW9uX3RpbWU7Ci0gIGd1aW50MzIgdHJhY2tfSUQ7Ci0gIGd1aW50MzIgcmVzZXJ2ZWQ7Ci0gIGd1aW50NjQgZHVyYXRpb247Ci0KLSAgZ3VpbnQzMiByZXNlcnZlZDJbMl07Ci0gIGd1aW50MTYgbGF5ZXI7Ci0gIGd1aW50MTYgYWx0ZXJuYXRlX2dyb3VwOwotICBndWludDE2IHZvbHVtZTsKLSAgZ3VpbnQxNiByZXNlcnZlZDM7Ci0KLSAgLyogSVNPOiBpZGVudGl0eSBtYXRyaXggPQotICAgKiB7IDB4MDAwMTAwMDAsIDAsIDAsIDAsIDB4MDAwMTAwMDAsIDAsIDAsIDAsIDB4NDAwMDAwMDAgfSAqLwotICBndWludDMyIG1hdHJpeFs5XTsKLSAgZ3VpbnQzMiB3aWR0aDsKLSAgZ3VpbnQzMiBoZWlnaHQ7Ci19IEF0b21US0hEOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbU1ESEQKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIC8qIHZlcnNpb24gMDogMzIgYml0cyAqLwotICBUaW1lSW5mbyB0aW1lX2luZm87Ci0KLSAgLyogSVNPOiBwYWNrZWQgSVNPLTYzOS0yL1QgbGFuZ3VhZ2UgY29kZSAoZmlyc3QgYml0IG11c3QgYmUgMCkgKi8KLSAgZ3VpbnQxNiBsYW5ndWFnZV9jb2RlOwotICAvKiBJU086IDAgKi8KLSAgZ3VpbnQxNiBxdWFsaXR5OwotfSBBdG9tTURIRDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21IRExSCi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLQotICAvKiBJU086IDAgKi8KLSAgZ3VpbnQzMiBjb21wb25lbnRfdHlwZTsKLSAgZ3VpbnQzMiBoYW5kbGVyX3R5cGU7Ci0gIGd1aW50MzIgbWFudWZhY3R1cmVyOwotICBndWludDMyIGZsYWdzOwotICBndWludDMyIGZsYWdzX21hc2s7Ci0gIGdjaGFyICpuYW1lOwotCi0gIEF0b21zVHJlZUZsYXZvciBmbGF2b3I7Ci19IEF0b21IRExSOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbVZNSEQKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOyAgICAgICAgICAvKiBJU086IGZsYWdzID0gMSAqLwotCi0gIGd1aW50MTYgZ3JhcGhpY3NfbW9kZTsKLSAgLyogUkdCICovCi0gIGd1aW50MTYgb3Bjb2xvclszXTsKLX0gQXRvbVZNSEQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tU01IRAotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgZ3VpbnQxNiBiYWxhbmNlOwotICBndWludDE2IHJlc2VydmVkOwotfSBBdG9tU01IRDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21ITUhECi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLQotICBndWludDE2IG1heF9wZHVfc2l6ZTsKLSAgZ3VpbnQxNiBhdmdfcGR1X3NpemU7Ci0gIGd1aW50MzIgbWF4X2JpdHJhdGU7Ci0gIGd1aW50MzIgYXZnX2JpdHJhdGU7Ci0gIGd1aW50MzIgc2xpZGluZ19hdmdfYml0cmF0ZTsKLX0gQXRvbUhNSEQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tVENNSQotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgZ3VpbnQxNiB0ZXh0X2ZvbnQ7Ci0gIGd1aW50MTYgdGV4dF9mYWNlOwotICBndWludDE2IHRleHRfc2l6ZTsKLSAgZ3VpbnQxNiB0ZXh0X2NvbG9yWzNdOwotICBndWludDE2IGJnX2NvbG9yWzNdOwotICBnY2hhciAqZm9udF9uYW1lOwotfSBBdG9tVENNSTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21UTUNECi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIEF0b21UQ01JIHRjbWk7Ci19IEF0b21UTUNEOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbUdNSU4KLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIGd1aW50MTYgZ3JhcGhpY3NfbW9kZTsKLSAgZ3VpbnQxNiBvcGNvbG9yWzNdOwotICBndWludDggYmFsYW5jZTsKLSAgZ3VpbnQ4IHJlc2VydmVkOwotCi19IEF0b21HTUlOOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbUdNSEQKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgQXRvbUdNSU4gZ21pbjsKLSAgQXRvbVRNQ0QgdG1jZDsKLQotfSBBdG9tR01IRDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21VUkwKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIGdjaGFyICpsb2NhdGlvbjsKLX0gQXRvbVVSTDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21EUkVGCi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLQotICBHTGlzdCAqZW50cmllczsKLX0gQXRvbURSRUY7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tRElORgotewotICBBdG9tIGhlYWRlcjsKLQotICBBdG9tRFJFRiBkcmVmOwotfSBBdG9tRElORjsKLQotdHlwZWRlZiBzdHJ1Y3QgX1NUVFNFbnRyeQotewotICBndWludDMyIHNhbXBsZV9jb3VudDsKLSAgZ2ludDMyIHNhbXBsZV9kZWx0YTsKLX0gU1RUU0VudHJ5OwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbVNUVFMKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIEFUT01fQVJSQVkgKFNUVFNFbnRyeSkgZW50cmllczsKLX0gQXRvbVNUVFM7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tU1RTUwotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgQVRPTV9BUlJBWSAoZ3VpbnQzMikgZW50cmllczsKLX0gQXRvbVNUU1M7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tRVNEUwotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgRVNEZXNjcmlwdG9yIGVzOwotfSBBdG9tRVNEUzsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21GUk1BCi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIGd1aW50MzIgbWVkaWFfdHlwZTsKLX0gQXRvbUZSTUE7Ci0KLXR5cGVkZWYgZW51bSBfU2FtcGxlRW50cnlLaW5kCi17Ci0gIFVOS05PV04sCi0gIEFVRElPLAotICBWSURFTywKLSAgU1VCVElUTEUsCi0gIFRJTUVDT0RFCi19IFNhbXBsZUVudHJ5S2luZDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1NhbXBsZVRhYmxlRW50cnkKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgZ3VpbnQ4IHJlc2VydmVkWzZdOwotICBndWludDE2IGRhdGFfcmVmZXJlbmNlX2luZGV4OwotCi0gIC8qIHR5cGUgb2YgZW50cnkgKi8KLSAgU2FtcGxlRW50cnlLaW5kIGtpbmQ7Ci19IFNhbXBsZVRhYmxlRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tSGludFNhbXBsZUVudHJ5Ci17Ci0gIFNhbXBsZVRhYmxlRW50cnkgc2U7Ci0gIGd1aW50MzIgc2l6ZTsKLSAgZ3VpbnQ4ICpkYXRhOwotfSBBdG9tSGludFNhbXBsZUVudHJ5OwotCi10eXBlZGVmIHN0cnVjdCBfU2FtcGxlVGFibGVFbnRyeU1QNFYKLXsKLSAgU2FtcGxlVGFibGVFbnRyeSBzZTsKLQotICBndWludDE2IHZlcnNpb247Ci0gIGd1aW50MTYgcmV2aXNpb25fbGV2ZWw7Ci0KLSAgZ3VpbnQzMiB2ZW5kb3I7ICAgICAgICAgICAgICAgICAvKiBmb3VyY2MgY29kZSAqLwotICBndWludDMyIHRlbXBvcmFsX3F1YWxpdHk7Ci0gIGd1aW50MzIgc3BhdGlhbF9xdWFsaXR5OwotCi0gIGd1aW50MTYgd2lkdGg7Ci0gIGd1aW50MTYgaGVpZ2h0OwotCi0gIGd1aW50MzIgaG9yaXpvbnRhbF9yZXNvbHV0aW9uOwotICBndWludDMyIHZlcnRpY2FsX3Jlc29sdXRpb247Ci0gIGd1aW50MzIgZGF0YXNpemU7Ci0KLSAgZ3VpbnQxNiBmcmFtZV9jb3VudDsgICAgICAgICAgICAvKiB1c3VhbGx5IDEgKi8KLQotICBndWludDggY29tcHJlc3NvclszMl07ICAgICAgICAgLyogcGFzY2FsIHN0cmluZywgaS5lLiBmaXJzdCBieXRlID0gbGVuZ3RoICovCi0KLSAgZ3VpbnQxNiBkZXB0aDsKLSAgZ3VpbnQxNiBjb2xvcl90YWJsZV9pZDsKLQotICAvKiAob3B0aW9uYWwpIGxpc3Qgb2YgQXRvbUluZm8gKi8KLSAgR0xpc3QgKmV4dGVuc2lvbl9hdG9tczsKLX0gU2FtcGxlVGFibGVFbnRyeU1QNFY7Ci0KLXR5cGVkZWYgc3RydWN0IF9TYW1wbGVUYWJsZUVudHJ5TVA0QQotewotICBTYW1wbGVUYWJsZUVudHJ5IHNlOwotCi0gIGd1aW50MTYgdmVyc2lvbjsKLSAgZ3VpbnQxNiByZXZpc2lvbl9sZXZlbDsKLSAgZ3VpbnQzMiB2ZW5kb3I7Ci0KLSAgZ3VpbnQxNiBjaGFubmVsczsKLSAgZ3VpbnQxNiBzYW1wbGVfc2l6ZTsKLSAgZ3VpbnQxNiBjb21wcmVzc2lvbl9pZDsKLSAgZ3VpbnQxNiBwYWNrZXRfc2l6ZTsKLQotICBndWludDMyIHNhbXBsZV9yYXRlOyAgICAgICAgICAgIC8qIGZpeGVkIHBvaW50IDE2LjE2ICovCi0KLSAgZ3VpbnQzMiBzYW1wbGVzX3Blcl9wYWNrZXQ7Ci0gIGd1aW50MzIgYnl0ZXNfcGVyX3BhY2tldDsKLSAgZ3VpbnQzMiBieXRlc19wZXJfZnJhbWU7Ci0gIGd1aW50MzIgYnl0ZXNfcGVyX3NhbXBsZTsKLQotICAvKiAob3B0aW9uYWwpIGxpc3Qgb2YgQXRvbUluZm8gKi8KLSAgR0xpc3QgKmV4dGVuc2lvbl9hdG9tczsKLX0gU2FtcGxlVGFibGVFbnRyeU1QNEE7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tTkFNRQotewotICBBdG9tIGhlYWRlcjsKLQotICBndWludDggbGFuZ3VhZ2VfY29kZTsKLSAgZ2NoYXIgKm5hbWU7Ci19IEF0b21OQU1FOwotCi10eXBlZGVmIHN0cnVjdCBfU2FtcGxlVGFibGVFbnRyeVRNQ0QKLXsKLSAgU2FtcGxlVGFibGVFbnRyeSBzZTsKLQotICBndWludDMyIHRjX2ZsYWdzOwotICBndWludDMyIHRpbWVzY2FsZTsKLSAgZ3VpbnQzMiBmcmFtZV9kdXJhdGlvbjsKLSAgZ3VpbnQ4IG5fZnJhbWVzOwotCi0gIEF0b21OQU1FIG5hbWU7Ci0KLX0gU2FtcGxlVGFibGVFbnRyeVRNQ0Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9TYW1wbGVUYWJsZUVudHJ5VFgzRwotewotICBTYW1wbGVUYWJsZUVudHJ5IHNlOwotCi0gIGd1aW50MzIgZGlzcGxheV9mbGFnczsKLSAgZ3VpbnQ2NCBkZWZhdWx0X3RleHRfYm94OwotICBndWludDE2IGZvbnRfaWQ7Ci0gIGd1aW50OCAgZm9udF9mYWNlOyAvKiBib2xkPTB4MSwgaXRhbGljPTB4MiwgdW5kZXJsaW5lPTB4NCAqLwotICBndWludDggIGZvbnRfc2l6ZTsgLyogc2hvdWxkIGFsd2F5cyBiZSAwLjA1IG11bHRpcGxpZWQgYnkgdGhlIHZpZGVvIHRyYWNrIGhlYWRlciBoZWlnaHQgKi8KLSAgZ3VpbnQzMiBmb3JlZ3JvdW5kX2NvbG9yX3JnYmE7Ci0KLX0gU2FtcGxlVGFibGVFbnRyeVRYM0c7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tU1RTRAotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgZ3VpbnQgbl9lbnRyaWVzOwotICAvKiBsaXN0IG9mIHN1YmNsYXNzZXMgb2YgU2FtcGxlVGFibGVFbnRyeSAqLwotICBHTGlzdCAqZW50cmllczsKLX0gQXRvbVNUU0Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tU1RTWgotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgZ3VpbnQzMiBzYW1wbGVfc2l6ZTsKLQotICAvKiBuZWVkIHRoZSBzaXplIGhlcmUgYmVjYXVzZSB3aGVuIHNhbXBsZV9zaXplIGlzIGNvbnN0YW50LAotICAgKiB0aGUgbGlzdCBpcyBlbXB0eSAqLwotICBndWludDMyIHRhYmxlX3NpemU7Ci0gIEFUT01fQVJSQVkgKGd1aW50MzIpIGVudHJpZXM7Ci19IEF0b21TVFNaOwotCi10eXBlZGVmIHN0cnVjdCBfU1RTQ0VudHJ5Ci17Ci0gIGd1aW50MzIgZmlyc3RfY2h1bms7Ci0gIGd1aW50MzIgc2FtcGxlc19wZXJfY2h1bms7Ci0gIGd1aW50MzIgc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4OwotfSBTVFNDRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tU1RTQwotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgQVRPTV9BUlJBWSAoU1RTQ0VudHJ5KSBlbnRyaWVzOwotfSBBdG9tU1RTQzsKLQotLyogRklYTUU6IHRoaXMgY2FuIHN1cHBvcnQgbXVsdGlwbGUgdHJhY2tzICovCi10eXBlZGVmIHN0cnVjdCBfQXRvbVRSRUYKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgZ3VpbnQzMiByZWZ0eXBlOwotICBBVE9NX0FSUkFZIChndWludDMyKSBlbnRyaWVzOwotfSBBdG9tVFJFRjsKLQotLyoKLSAqIHVzZWQgZm9yIGJvdGggU1RDTyBhbmQgQ082NAotICogaWYgdXNlZCBhcyBTVENPLCBlbnRyaWVzIHNob3VsZCBiZSB0cnVuY2F0ZWQgdG8gdXNlIG9ubHkgMzJiaXRzCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9BdG9tU1RDTzY0Ci17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLSAgLyogR2xvYmFsIG9mZnNldCB0byBhZGQgdG8gZW50cmllcyB3aGVuIHNlcmlhbGlzaW5nICovCi0gIGd1aW50MzIgY2h1bmtfb2Zmc2V0OwotICBBVE9NX0FSUkFZIChndWludDY0KSBlbnRyaWVzOwotfSBBdG9tU1RDTzY0OwotCi10eXBlZGVmIHN0cnVjdCBfQ1RUU0VudHJ5Ci17Ci0gIGd1aW50MzIgc2FtcGxlY291bnQ7Ci0gIGd1aW50MzIgc2FtcGxlb2Zmc2V0OwotfSBDVFRTRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tQ1RUUwotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgLyogYWxzbyBlbnRyeSBjb3VudCBoZXJlICovCi0gIEFUT01fQVJSQVkgKENUVFNFbnRyeSkgZW50cmllczsKLSAgZ2Jvb2xlYW4gZG9fcHRzOwotfSBBdG9tQ1RUUzsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21TVEJMCi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIEF0b21TVFNEIHN0c2Q7Ci0gIEF0b21TVFRTIHN0dHM7Ci0gIEF0b21TVFNTIHN0c3M7Ci0gIEF0b21TVFNDIHN0c2M7Ci0gIEF0b21TVFNaIHN0c3o7Ci0gIC8qIE5VTEwgaWYgbm90IHByZXNlbnQgKi8KLSAgQXRvbUNUVFMgKmN0dHM7Ci0KLSAgQXRvbVNUQ082NCBzdGNvNjQ7Ci19IEF0b21TVEJMOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbU1JTkYKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgLyogb25seSAoZXhhY3RseSkgb25lIG9mIHRob3NlIG11c3QgYmUgcHJlc2VudCAqLwotICBBdG9tVk1IRCAqdm1oZDsKLSAgQXRvbVNNSEQgKnNtaGQ7Ci0gIEF0b21ITUhEICpobWhkOwotICBBdG9tR01IRCAqZ21oZDsKLQotICBBdG9tSERMUiAqaGRscjsKLSAgQXRvbURJTkYgZGluZjsKLSAgQXRvbVNUQkwgc3RibDsKLX0gQXRvbU1JTkY7Ci0KLXR5cGVkZWYgc3RydWN0IF9FZGl0TGlzdEVudHJ5Ci17Ci0gIC8qIGR1cmF0aW9uIGluIG1vdmllJ3MgdGltZXNjYWxlICovCi0gIGd1aW50MzIgZHVyYXRpb247Ci0gIC8qIHN0YXJ0IHRpbWUgaW4gbWVkaWEncyB0aW1lc2NhbGUsIC0xIGZvciBlbXB0eSAqLwotICBndWludDMyIG1lZGlhX3RpbWU7Ci0gIGd1aW50MzIgbWVkaWFfcmF0ZTsgIC8qIGZpeGVkIHBvaW50IDMyIGJpdCAqLwotfSBFZGl0TGlzdEVudHJ5OwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbUVMU1QKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIC8qIG51bWJlciBvZiBlbnRyaWVzIGlzIGltcGxpY2l0ICovCi0gIEdTTGlzdCAqZW50cmllczsKLX0gQXRvbUVMU1Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tRURUUwotewotICBBdG9tIGhlYWRlcjsKLSAgQXRvbUVMU1QgZWxzdDsKLX0gQXRvbUVEVFM7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tTURJQQotewotICBBdG9tIGhlYWRlcjsKLQotICBBdG9tTURIRCBtZGhkOwotICBBdG9tSERMUiBoZGxyOwotICBBdG9tTUlORiBtaW5mOwotfSBBdG9tTURJQTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21JTFNUCi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIC8qIGxpc3Qgb2YgQXRvbUluZm8gKi8KLSAgR0xpc3QqIGVudHJpZXM7Ci19IEF0b21JTFNUOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbVRhZ0RhdGEKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotICBndWludDMyIHJlc2VydmVkOwotCi0gIGd1aW50MzIgZGF0YWxlbjsKLSAgZ3VpbnQ4KiBkYXRhOwotfSBBdG9tVGFnRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21UYWcKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgQXRvbVRhZ0RhdGEgZGF0YTsKLX0gQXRvbVRhZzsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21NRVRBCi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLSAgQXRvbUhETFIgaGRscjsKLSAgQXRvbUlMU1QgKmlsc3Q7Ci19IEF0b21NRVRBOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbVVEVEEKLXsKLSAgQXRvbSBoZWFkZXI7Ci0KLSAgLyogbGlzdCBvZiBBdG9tSW5mbyAqLwotICBHTGlzdCogZW50cmllczsKLSAgLyogb3IgbGlzdCBpcyBmdXJ0aGVyIGRvd24gKi8KLSAgQXRvbU1FVEEgKm1ldGE7Ci0KLSAgQXRvbXNDb250ZXh0ICpjb250ZXh0OwotfSBBdG9tVURUQTsKLQotZW51bSBUckZsYWdzCi17Ci0gIFRSX0RBVEFfT0ZGU0VUICAgICAgICAgICAgICA9IDB4MDEsICAgICAvKiBkYXRhLW9mZnNldC1wcmVzZW50ICovCi0gIFRSX0ZJUlNUX1NBTVBMRV9GTEFHUyAgICAgICA9IDB4MDQsICAgICAvKiBmaXJzdC1zYW1wbGUtZmxhZ3MtcHJlc2VudCAqLwotICBUUl9TQU1QTEVfRFVSQVRJT04gICAgICAgICAgPSAweDAxMDAsICAgLyogc2FtcGxlLWR1cmF0aW9uLXByZXNlbnQgKi8KLSAgVFJfU0FNUExFX1NJWkUgICAgICAgICAgICAgID0gMHgwMjAwLCAgIC8qIHNhbXBsZS1zaXplLXByZXNlbnQgKi8KLSAgVFJfU0FNUExFX0ZMQUdTICAgICAgICAgICAgID0gMHgwNDAwLCAgIC8qIHNhbXBsZS1mbGFncy1wcmVzZW50ICovCi0gIFRSX0NPTVBPU0lUSU9OX1RJTUVfT0ZGU0VUUyA9IDB4MDgwMCAgICAvKiBzYW1wbGUtY29tcG9zaXRpb24tdGltZS1vZmZzZXRzLXByZXNlbnRzICovCi19OwotCi1lbnVtIFRmRmxhZ3MKLXsKLSAgVEZfQkFTRV9EQVRBX09GRlNFVCAgICAgICAgID0gMHgwMSwgICAgIC8qIGJhc2UtZGF0YS1vZmZzZXQtcHJlc2VudCAqLwotICBURl9TQU1QTEVfREVTQ1JJUFRJT05fSU5ERVggPSAweDAyLCAgICAgLyogc2FtcGxlLWRlc2NyaXB0aW9uLWluZGV4LXByZXNlbnQgKi8KLSAgVEZfREVGQVVMVF9TQU1QTEVfRFVSQVRJT04gID0gMHgwOCwgICAgIC8qIGRlZmF1bHQtc2FtcGxlLWR1cmF0aW9uLXByZXNlbnQgKi8KLSAgVEZfREVGQVVMVF9TQU1QTEVfU0laRSAgICAgID0gMHgwMTAsICAgIC8qIGRlZmF1bHQtc2FtcGxlLXNpemUtcHJlc2VudCAqLwotICBURl9ERUZBVUxUX1NBTVBMRV9GTEFHUyAgICAgPSAweDAyMCwgICAgLyogZGVmYXVsdC1zYW1wbGUtZmxhZ3MtcHJlc2VudCAqLwotICBURl9EVVJBVElPTl9JU19FTVBUWSAgICAgICAgPSAweDAxMDAwMCwgLyogc2FtcGxlLWNvbXBvc2l0aW9uLXRpbWUtb2Zmc2V0cy1wcmVzZW50cyAqLwotICBURl9ERUZBVUxUX0JBU0VfSVNfTU9PRiAgICAgPSAweDAyMDAwMCAgLyogZGVmYXVsdC1iYXNlLWlzLW1vb2YgKi8KLX07Ci0KLS8qIFRpbWVjb2RlIGZsYWdzICovCi1lbnVtIFRjRmxhZ3MKLXsKLSAgVENfRFJPUF9GUkFNRSA9IDB4MDAwMSwgICAvKiBEcm9wLWZyYW1lIHRpbWVjb2RlICovCi0gIFRDXzI0SF9NQVggPSAweDAwMDIsICAgICAgLyogV2hldGhlciB0aGUgdGltZWNvZGUgd3JhcHMgYWZ0ZXIgMjQgaG91cnMgKi8KLSAgVENfTkVHQVRJVkVfT0sgPSAweDAwMDQsICAvKiBXaGV0aGVyIG5lZ2F0aXZlIHRpbWUgdmFsdWVzIGFyZSBPSyAqLwotICBUQ19DT1VOVEVSID0gMHgwMDA4ICAgICAgIC8qIFdoZXRoZXIgdGhlIHRpbWUgdmFsdWUgY29ycmVzcG9uZHMgdG8gYSB0YXBlIGNvdW50ZXIgdmFsdWUgKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tVFJBSwotewotICBBdG9tIGhlYWRlcjsKLQotICBBdG9tVEtIRCB0a2hkOwotICBBdG9tRURUUyAqZWR0czsKLSAgQXRvbU1ESUEgbWRpYTsKLSAgQXRvbVVEVEEgdWR0YTsKLSAgQXRvbVRSRUYgKnRyZWY7Ci0KLSAgLyogc29tZSBoZWxwZXIgaW5mbyBmb3Igc3RydWN0dXJhbCBjb25mb3JtaXR5IGNoZWNrcyAqLwotICBnYm9vbGVhbiBpc192aWRlbzsKLSAgZ2Jvb2xlYW4gaXNfaDI2NDsKLQotICBBdG9tc0NvbnRleHQgKmNvbnRleHQ7Ci19IEF0b21UUkFLOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbVRSRVgKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIGd1aW50MzIgdHJhY2tfSUQ7Ci0gIGd1aW50MzIgZGVmYXVsdF9zYW1wbGVfZGVzY3JpcHRpb25faW5kZXg7Ci0gIGd1aW50MzIgZGVmYXVsdF9zYW1wbGVfZHVyYXRpb247Ci0gIGd1aW50MzIgZGVmYXVsdF9zYW1wbGVfc2l6ZTsKLSAgZ3VpbnQzMiBkZWZhdWx0X3NhbXBsZV9mbGFnczsKLX0gQXRvbVRSRVg7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tTUVIRAotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgZ3VpbnQ2NCBmcmFnbWVudF9kdXJhdGlvbjsKLX0gQXRvbU1FSEQ7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21NVkVYCi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIEF0b21NRUhEIG1laGQ7Ci0KLSAgLyogbGlzdCBvZiBBdG9tVFJFWCAqLwotICBHTGlzdCAqdHJleHM7Ci19IEF0b21NVkVYOwotCi10eXBlZGVmIHN0cnVjdCBfQXRvbU1GSEQKLXsKLSAgQXRvbUZ1bGwgaGVhZGVyOwotCi0gIGd1aW50MzIgc2VxdWVuY2VfbnVtYmVyOwotfSBBdG9tTUZIRDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21URkhECi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLQotICBndWludDMyIHRyYWNrX0lEOwotICBndWludDY0IGJhc2VfZGF0YV9vZmZzZXQ7Ci0gIGd1aW50MzIgc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4OwotICBndWludDMyIGRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uOwotICBndWludDMyIGRlZmF1bHRfc2FtcGxlX3NpemU7Ci0gIGd1aW50MzIgZGVmYXVsdF9zYW1wbGVfZmxhZ3M7Ci19IEF0b21URkhEOwotCi10eXBlZGVmIHN0cnVjdCBfVFJVTlNhbXBsZUVudHJ5Ci17Ci0gIGd1aW50MzIgc2FtcGxlX2R1cmF0aW9uOwotICBndWludDMyIHNhbXBsZV9zaXplOwotICBndWludDMyIHNhbXBsZV9mbGFnczsKLSAgZ3VpbnQzMiBzYW1wbGVfY29tcG9zaXRpb25fdGltZV9vZmZzZXQ7Ci19IFRSVU5TYW1wbGVFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21UUlVOCi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLQotICBndWludDMyIHNhbXBsZV9jb3VudDsKLSAgZ2ludDMyIGRhdGFfb2Zmc2V0OwotICBndWludDMyIGZpcnN0X3NhbXBsZV9mbGFnczsKLQotICAvKiBhcnJheSBvZiBmaWVsZHMgKi8KLSAgQVRPTV9BUlJBWSAoVFJVTlNhbXBsZUVudHJ5KSBlbnRyaWVzOwotfSBBdG9tVFJVTjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21TRFRQCi17Ci0gIEF0b21GdWxsIGhlYWRlcjsKLQotICAvKiBub3Qgc2VyaWFsaXplZCAqLwotICBndWludDMyIHNhbXBsZV9jb3VudDsKLQotICAvKiBhcnJheSBvZiBmaWVsZHMgKi8KLSAgQVRPTV9BUlJBWSAoZ3VpbnQ4KSBlbnRyaWVzOwotfSBBdG9tU0RUUDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21UUkFGCi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIEF0b21URkhEIHRmaGQ7Ci0KLSAgLyogbGlzdCBvZiBBdG9tVFJVTiAqLwotICBHTGlzdCAqdHJ1bnM7Ci0gIC8qIGxpc3Qgb2YgQXRvbVNEVFAgKi8KLSAgR0xpc3QgKnNkdHBzOwotfSBBdG9tVFJBRjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0F0b21NT09GCi17Ci0gIEF0b20gaGVhZGVyOwotCi0gIEF0b21NRkhEIG1maGQ7Ci0KLSAgLyogbGlzdCBvZiBBdG9tVFJBRiAqLwotICBHTGlzdCAqdHJhZnM7Ci19IEF0b21NT09GOwotCi0KLXR5cGVkZWYgc3RydWN0IF9BdG9tTU9PVgotewotICAvKiBzdHlsZSAqLwotICBBdG9tc0NvbnRleHQgY29udGV4dDsKLQotICBBdG9tIGhlYWRlcjsKLQotICBBdG9tTVZIRCBtdmhkOwotICBBdG9tTVZFWCBtdmV4OwotCi0gIC8qIGxpc3Qgb2YgQXRvbVRSQUsgKi8KLSAgR0xpc3QgKnRyYWtzOwotICBBdG9tVURUQSB1ZHRhOwotCi0gIGdib29sZWFuIGZyYWdtZW50ZWQ7Ci0gIGd1aW50MzIgY2h1bmtzX29mZnNldDsKLX0gQXRvbU1PT1Y7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tV0FWRQotewotICBBdG9tIGhlYWRlcjsKLQotICAvKiBsaXN0IG9mIEF0b21JbmZvICovCi0gIEdMaXN0ICpleHRlbnNpb25fYXRvbXM7Ci19IEF0b21XQVZFOwotCi10eXBlZGVmIHN0cnVjdCBfVEZSQUVudHJ5Ci17Ci0gIGd1aW50NjQgdGltZTsKLSAgZ3VpbnQ2NCBtb29mX29mZnNldDsKLSAgZ3VpbnQzMiB0cmFmX251bWJlcjsKLSAgZ3VpbnQzMiB0cnVuX251bWJlcjsKLSAgZ3VpbnQzMiBzYW1wbGVfbnVtYmVyOwotfSBURlJBRW50cnk7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tVEZSQQotewotICBBdG9tRnVsbCBoZWFkZXI7Ci0KLSAgZ3VpbnQzMiB0cmFja19JRDsKLSAgZ3VpbnQzMiBsZW5ndGhzOwotICAvKiBhcnJheSBvZiBlbnRyaWVzICovCi0gIEFUT01fQVJSQVkgKFRGUkFFbnRyeSkgZW50cmllczsKLX0gQXRvbVRGUkE7Ci0KLXR5cGVkZWYgc3RydWN0IF9BdG9tTUZSQQotewotICBBdG9tIGhlYWRlcjsKLQotICAvKiBsaXN0IG9mIHRmcmEgKi8KLSAgR0xpc3QgKnRmcmFzOwotfSBBdG9tTUZSQTsKLQotLyoKLSAqIEZ1bmN0aW9uIHRvIHNlcmlhbGl6ZSBhbiBhdG9tCi0gKi8KLXR5cGVkZWYgZ3VpbnQ2NCAoKkF0b21Db3B5RGF0YUZ1bmMpIChBdG9tICphdG9tLCBndWludDggKipidWZmZXIsIGd1aW50NjQgKnNpemUsIGd1aW50NjQgKm9mZnNldCk7Ci0KLS8qCi0gKiBSZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGFuIGF0b20KLSAqLwotdHlwZWRlZiBndWludDY0ICgqQXRvbUZyZWVGdW5jKSAoQXRvbSAqYXRvbSk7Ci0KLS8qCi0gKiBTb21lIGF0b21zIG1pZ2h0IGhhdmUgbWFueSBvcHRpb25hbCBkaWZmZXJlbnQga2luZHMgb2YgY2hpbGQgYXRvbXMsIHNvIHRoaXMKLSAqIGlzIHVzZWZ1bCBmb3IgZW5hYmxpbmcgZ2VuZXJpYyBoYW5kbGluZyBvZiBhbnkgYXRvbS4KLSAqIEFsbCB3ZSBuZWVkIGFyZSB0aGUgdHdvIGZ1bmN0aW9ucyAoY29weWluZyBpdCB0byBhbiBhcnJheQotICogZm9yIHNlcmlhbGl6YXRpb24gYW5kIHRoZSBtZW1vcnkgcmVsZWFzaW5nIGZ1bmN0aW9uKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0F0b21JbmZvCi17Ci0gIEF0b20gKmF0b207Ci0gIEF0b21Db3B5RGF0YUZ1bmMgY29weV9kYXRhX2Z1bmM7Ci0gIEF0b21GcmVlRnVuYyBmcmVlX2Z1bmM7Ci19IEF0b21JbmZvOwotCi0KLWd1aW50NjQgICAgYXRvbV9jb3B5X2RhdGEgICAgICAgICAgICAgIChBdG9tICphdG9tLCBndWludDggKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCogb2Zmc2V0KTsKLQotQXRvbUZUWVAqICBhdG9tX2Z0eXBfbmV3ICAgICAgICAgICAgICAgKEF0b21zQ29udGV4dCAqY29udGV4dCwgZ3VpbnQzMiBtYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHZlcnNpb24sIEdMaXN0ICpicmFuZHMpOwotZ3VpbnQ2NCAgICBhdG9tX2Z0eXBfY29weV9kYXRhICAgICAgICAgKEF0b21GVFlQICpmdHlwLCBndWludDggKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLXZvaWQgICAgICAgYXRvbV9mdHlwX2ZyZWUgICAgICAgICAgICAgIChBdG9tRlRZUCAqZnR5cCk7Ci0KLUF0b21UUkFLKiAgYXRvbV90cmFrX25ldyAgICAgICAgICAgICAgIChBdG9tc0NvbnRleHQgKmNvbnRleHQpOwotdm9pZCAgICAgICBhdG9tX3RyYWtfYWRkX3NhbXBsZXMgICAgICAgKEF0b21UUkFLICogdHJhaywgZ3VpbnQzMiBuc2FtcGxlcywgZ3VpbnQzMiBkZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHNpemUsIGd1aW50NjQgY2h1bmtfb2Zmc2V0LCBnYm9vbGVhbiBzeW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCBwdHNfb2Zmc2V0KTsKLXZvaWQgICAgICAgYXRvbV90cmFrX3NldF9lbHN0X2VudHJ5ICAgIChBdG9tVFJBSyAqIHRyYWssIGdpbnQgaW5kZXgsIGd1aW50MzIgZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBtZWRpYV90aW1lLCBndWludDMyIHJhdGUpOwotZ3VpbnQzMiAgICBhdG9tX3RyYWtfZ2V0X3RpbWVzY2FsZSAgICAgKEF0b21UUkFLICp0cmFrKTsKLWd1aW50MzIgICAgYXRvbV90cmFrX2dldF9pZCAgICAgICAgICAgIChBdG9tVFJBSyAqIHRyYWspOwotdm9pZCAgICAgICBhdG9tX3N0YmxfYWRkX3NhbXBsZXMgICAgICAgKEF0b21TVEJMICogc3RibCwgZ3VpbnQzMiBuc2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIGRlbHRhLCBndWludDMyIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCBjaHVua19vZmZzZXQsIGdib29sZWFuIHN5bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDY0IHB0c19vZmZzZXQpOwotCi1BdG9tTU9PViogIGF0b21fbW9vdl9uZXcgICAgICAgICAgICAgICAoQXRvbXNDb250ZXh0ICpjb250ZXh0KTsKLXZvaWQgICAgICAgYXRvbV9tb292X2ZyZWUgICAgICAgICAgICAgIChBdG9tTU9PViAqbW9vdik7Ci1ndWludDY0ICAgIGF0b21fbW9vdl9jb3B5X2RhdGEgICAgICAgICAoQXRvbU1PT1YgKmF0b20sIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCogb2Zmc2V0KTsKLXZvaWQgICAgICAgYXRvbV9tb292X3VwZGF0ZV90aW1lc2NhbGUgIChBdG9tTU9PViAqbW9vdiwgZ3VpbnQzMiB0aW1lc2NhbGUpOwotdm9pZCAgICAgICBhdG9tX21vb3ZfdXBkYXRlX2R1cmF0aW9uICAgKEF0b21NT09WICptb292KTsKLXZvaWQgICAgICAgYXRvbV9tb292X3NldF9mcmFnbWVudGVkICAgIChBdG9tTU9PViAqbW9vdiwgZ2Jvb2xlYW4gZnJhZ21lbnRlZCk7Ci12b2lkICAgICAgIGF0b21fbW9vdl9jaHVua3Nfc2V0X29mZnNldCAoQXRvbU1PT1YgKm1vb3YsIGd1aW50MzIgb2Zmc2V0KTsKLXZvaWQgICAgICAgYXRvbV9tb292X2FkZF90cmFrICAgICAgICAgIChBdG9tTU9PViAqbW9vdiwgQXRvbVRSQUsgKnRyYWspOwotZ3VpbnQgICAgICBhdG9tX21vb3ZfZ2V0X3RyYWtfY291bnQgICAgKEF0b21NT09WICptb292KTsKLQotZ3VpbnQ2NCAgICBhdG9tX212aGRfY29weV9kYXRhICAgICAgICAgKEF0b21NVkhEICogYXRvbSwgZ3VpbnQ4ICoqIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICogc2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCk7Ci12b2lkICAgICAgIGF0b21fc3RjbzY0X2NodW5rc19zZXRfb2Zmc2V0IChBdG9tU1RDTzY0ICogc3RjbzY0LCBndWludDMyIG9mZnNldCk7Ci1ndWludDY0ICAgIGF0b21fdHJha19jb3B5X2RhdGEgICAgICAgICAoQXRvbVRSQUsgKiBhdG9tLCBndWludDggKiogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KTsKLXZvaWQgICAgICAgYXRvbV9zdGJsX2NsZWFyICAgICAgICAgICAgIChBdG9tU1RCTCAqIHN0YmwpOwotdm9pZCAgICAgICBhdG9tX3N0YmxfaW5pdCAgICAgICAgICAgICAgKEF0b21TVEJMICogc3RibCk7Ci1ndWludDY0ICAgIGF0b21fc3Rzc19jb3B5X2RhdGEgICAgICAgICAoQXRvbVNUU1MgKmF0b20sIGd1aW50OCAqKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICpzaXplLCBndWludDY0KiBvZmZzZXQpOwotZ3VpbnQ2NCAgICBhdG9tX3N0dHNfY29weV9kYXRhICAgICAgICAgKEF0b21TVFRTICphdG9tLCBndWludDggKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCogb2Zmc2V0KTsKLWd1aW50NjQgICAgYXRvbV9zdHNjX2NvcHlfZGF0YSAgICAgICAgIChBdG9tU1RTQyAqYXRvbSwgZ3VpbnQ4ICoqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKnNpemUsIGd1aW50NjQqIG9mZnNldCk7Ci1ndWludDY0ICAgIGF0b21fc3Rzel9jb3B5X2RhdGEgICAgICAgICAoQXRvbVNUU1ogKmF0b20sIGd1aW50OCAqKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICpzaXplLCBndWludDY0KiBvZmZzZXQpOwotZ3VpbnQ2NCAgICBhdG9tX2N0dHNfY29weV9kYXRhICAgICAgICAgKEF0b21DVFRTICphdG9tLCBndWludDggKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCogb2Zmc2V0KTsKLWd1aW50NjQgICAgYXRvbV9zdGNvNjRfY29weV9kYXRhICAgICAgIChBdG9tU1RDTzY0ICphdG9tLCBndWludDggKipidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCogb2Zmc2V0KTsKLUF0b21NT09GKiAgYXRvbV9tb29mX25ldyAgICAgICAgICAgICAgIChBdG9tc0NvbnRleHQgKmNvbnRleHQsIGd1aW50MzIgc2VxdWVuY2VfbnVtYmVyKTsKLXZvaWQgICAgICAgYXRvbV9tb29mX2ZyZWUgICAgICAgICAgICAgIChBdG9tTU9PRiAqbW9vZik7Ci1ndWludDY0ICAgIGF0b21fbW9vZl9jb3B5X2RhdGEgICAgICAgICAoQXRvbU1PT0YgKm1vb2YsIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCogb2Zmc2V0KTsKLUF0b21UUkFGICogYXRvbV90cmFmX25ldyAgICAgICAgICAgICAgIChBdG9tc0NvbnRleHQgKiBjb250ZXh0LCBndWludDMyIHRyYWNrX0lEKTsKLXZvaWQgICAgICAgYXRvbV90cmFmX2ZyZWUgICAgICAgICAgICAgIChBdG9tVFJBRiAqIHRyYWYpOwotdm9pZCAgICAgICBhdG9tX3RyYWZfYWRkX3NhbXBsZXMgICAgICAgKEF0b21UUkFGICogdHJhZiwgZ3VpbnQzMiBkZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHNpemUsIGdib29sZWFuIHN5bmMsIGdpbnQ2NCBwdHNfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHNkdHBfc3luYyk7Ci1ndWludDMyICAgIGF0b21fdHJhZl9nZXRfc2FtcGxlX251bSAgICAoQXRvbVRSQUYgKiB0cmFmKTsKLXZvaWQgICAgICAgYXRvbV9tb29mX2FkZF90cmFmICAgICAgICAgIChBdG9tTU9PRiAqbW9vZiwgQXRvbVRSQUYgKnRyYWYpOwotCi1BdG9tTUZSQSogIGF0b21fbWZyYV9uZXcgICAgICAgICAgICAgICAoQXRvbXNDb250ZXh0ICpjb250ZXh0KTsKLXZvaWQgICAgICAgYXRvbV9tZnJhX2ZyZWUgICAgICAgICAgICAgIChBdG9tTUZSQSAqbWZyYSk7Ci1BdG9tVEZSQSogIGF0b21fdGZyYV9uZXcgICAgICAgICAgICAgICAoQXRvbXNDb250ZXh0ICpjb250ZXh0LCBndWludDMyIHRyYWNrX0lEKTsKLXZvaWQgICAgICAgYXRvbV90ZnJhX2FkZF9lbnRyeSAgICAgICAgIChBdG9tVEZSQSAqdGZyYSwgZ3VpbnQ2NCBkdHMsIGd1aW50MzIgc2FtcGxlX251bSk7Ci12b2lkICAgICAgIGF0b21fdGZyYV91cGRhdGVfb2Zmc2V0ICAgICAoQXRvbVRGUkEgKiB0ZnJhLCBndWludDY0IG9mZnNldCk7Ci12b2lkICAgICAgIGF0b21fbWZyYV9hZGRfdGZyYSAgICAgICAgICAoQXRvbU1GUkEgKm1mcmEsIEF0b21URlJBICp0ZnJhKTsKLWd1aW50NjQgICAgYXRvbV9tZnJhX2NvcHlfZGF0YSAgICAgICAgIChBdG9tTUZSQSAqbWZyYSwgZ3VpbnQ4ICoqYnVmZmVyLCBndWludDY0ICpzaXplLCBndWludDY0KiBvZmZzZXQpOwotCi0KLS8qIG1lZGlhIHNhbXBsZSBkZXNjcmlwdGlvbiByZWxhdGVkIGhlbHBlcnMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQxNiB2ZXJzaW9uOwotICBndWludDMyIGZvdXJjYzsKLSAgZ3VpbnQgd2lkdGg7Ci0gIGd1aW50IGhlaWdodDsKLSAgZ3VpbnQgZGVwdGg7Ci0gIGd1aW50IGZyYW1lX2NvdW50OwotICBnaW50IGNvbG9yX3RhYmxlX2lkOwotICBndWludCBwYXJfbjsKLSAgZ3VpbnQgcGFyX2Q7Ci0KLSAgR3N0QnVmZmVyICpjb2RlY19kYXRhOwotfSBWaXN1YWxTYW1wbGVFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0gIGd1aW50IHZlcnNpb247Ci0gIGdpbnQgY29tcHJlc3Npb25faWQ7Ci0gIGd1aW50IHNhbXBsZV9yYXRlOwotICBndWludCBjaGFubmVsczsKLSAgZ3VpbnQgc2FtcGxlX3NpemU7Ci0gIGd1aW50IGJ5dGVzX3Blcl9wYWNrZXQ7Ci0gIGd1aW50IHNhbXBsZXNfcGVyX3BhY2tldDsKLSAgZ3VpbnQgYnl0ZXNfcGVyX3NhbXBsZTsKLSAgZ3VpbnQgYnl0ZXNfcGVyX2ZyYW1lOwotCi0gIEdzdEJ1ZmZlciAqY29kZWNfZGF0YTsKLX0gQXVkaW9TYW1wbGVFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0KLSAgZ3VpbnQ4ICBmb250X2ZhY2U7IC8qIGJvbGQ9MHgxLCBpdGFsaWM9MHgyLCB1bmRlcmxpbmU9MHg0ICovCi0gIGd1aW50OCAgZm9udF9zaXplOwotICBndWludDMyIGZvcmVncm91bmRfY29sb3JfcmdiYTsKLX0gU3VidGl0bGVTYW1wbGVFbnRyeTsKLQotdm9pZCBzdWJ0aXRsZV9zYW1wbGVfZW50cnlfaW5pdCAoU3VidGl0bGVTYW1wbGVFbnRyeSAqIGVudHJ5KTsKLQotU2FtcGxlVGFibGVFbnRyeU1QNEEgKiBhdG9tX3RyYWtfc2V0X2F1ZGlvX3R5cGUgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1NhbXBsZUVudHJ5ICogZW50cnksIGd1aW50MzIgc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbUluZm8gKiBleHQsIGdpbnQgc2FtcGxlX3NpemUpOwotCi1TYW1wbGVUYWJsZUVudHJ5TVA0ViAqIGF0b21fdHJha19zZXRfdmlkZW9fdHlwZSAoQXRvbVRSQUsgKiB0cmFrLCBBdG9tc0NvbnRleHQgKiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbFNhbXBsZUVudHJ5ICogZW50cnksIGd1aW50MzIgcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqIGV4dF9hdG9tc19saXN0KTsKLQotU2FtcGxlVGFibGVFbnRyeVRYM0cgKiBhdG9tX3RyYWtfc2V0X3N1YnRpdGxlX3R5cGUgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJ0aXRsZVNhbXBsZUVudHJ5ICogZW50cnkpOwotCi1TYW1wbGVUYWJsZUVudHJ5VE1DRCAqCi1hdG9tX3RyYWtfc2V0X3RpbWVjb2RlX3R5cGUgKEF0b21UUkFLICogdHJhaywgQXRvbXNDb250ZXh0ICogY29udGV4dCwgR3N0VmlkZW9UaW1lQ29kZSAqIHRjKTsKLQotdm9pZCBhdG9tX3RyYWtfdXBkYXRlX2JpdHJhdGVzIChBdG9tVFJBSyAqIHRyYWssIGd1aW50MzIgYXZnX2JpdHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgbWF4X2JpdHJhdGUpOwotCi12b2lkIGF0b21fdHJha190eDNnX3VwZGF0ZV9kaW1lbnNpb24gKEF0b21UUkFLICogdHJhaywgZ3VpbnQzMiB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBoZWlnaHQpOwotCi12b2lkIHNhbXBsZV90YWJsZV9lbnRyeV9hZGRfZXh0X2F0b20gKFNhbXBsZVRhYmxlRW50cnkgKiBzdGUsIEF0b21JbmZvICogZXh0KTsKLQotQXRvbUluZm8gKiAgIGJ1aWxkX2NvZGVjX2RhdGFfZXh0ZW5zaW9uICAoZ3VpbnQzMiBmb3VyY2MsIGNvbnN0IEdzdEJ1ZmZlciAqIGNvZGVjX2RhdGEpOwotQXRvbUluZm8gKiAgIGJ1aWxkX21vdl9hYWNfZXh0ZW5zaW9uICAgICAoQXRvbVRSQUsgKiB0cmFrLCBjb25zdCBHc3RCdWZmZXIgKiBjb2RlY19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBhdmdfYml0cmF0ZSwgZ3VpbnQzMiBtYXhfYml0cmF0ZSk7Ci1BdG9tSW5mbyAqICAgYnVpbGRfbW92X2FsYWNfZXh0ZW5zaW9uICAgIChjb25zdCBHc3RCdWZmZXIgKiBjb2RlY19kYXRhKTsKLUF0b21JbmZvICogICBidWlsZF9lc2RzX2V4dGVuc2lvbiAgICAgICAgKEF0b21UUkFLICogdHJhaywgZ3VpbnQ4IG9iamVjdF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4IHN0cmVhbV90eXBlLCBjb25zdCBHc3RCdWZmZXIgKiBjb2RlY19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBhdmdfYml0cmF0ZSwgZ3VpbnQzMiBtYXhfYml0cmF0ZSk7Ci1BdG9tSW5mbyAqICAgYnVpbGRfYnRydF9leHRlbnNpb24gICAgICAgIChndWludDMyIGJ1ZmZlcl9zaXplX2RiLCBndWludDMyIGF2Z19iaXRyYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBtYXhfYml0cmF0ZSk7Ci1BdG9tSW5mbyAqICAgYnVpbGRfanAyaF9leHRlbnNpb24gICAgICAgIChnaW50IHdpZHRoLCBnaW50IGhlaWdodCwgY29uc3QgZ2NoYXIgKmNvbG9yc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IG5jb21wLCBjb25zdCBHVmFsdWUgKiBjbWFwX2FycmF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogY2RlZl9hcnJheSk7Ci0KLUF0b21JbmZvICogICBidWlsZF9qcDJ4X2V4dGVuc2lvbiAgICAgICAgKGNvbnN0IEdzdEJ1ZmZlciAqIHByZWZpeCk7Ci1BdG9tSW5mbyAqICAgYnVpbGRfZmllbF9leHRlbnNpb24gICAgICAgIChnaW50IGZpZWxkcyk7Ci1BdG9tSW5mbyAqICAgYnVpbGRfYWMzX2V4dGVuc2lvbiAgICAgICAgIChndWludDggZnNjb2QsIGd1aW50OCBic2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4IGJzbW9kLCBndWludDggYWNtb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDggbGZlX29uLCBndWludDggYml0cmF0ZV9jb2RlKTsKLUF0b21JbmZvICogICBidWlsZF9vcHVzX2V4dGVuc2lvbiAgICAgICAgKGd1aW50MzIgcmF0ZSwgZ3VpbnQ4IGNoYW5uZWxzLCBndWludDggbWFwcGluZ19mYW1pbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDggc3RyZWFtX2NvdW50LCBndWludDggY291cGxlZF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50OCBjaGFubmVsX21hcHBpbmdbMjU2XSwgZ3VpbnQxNiBwcmVfc2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MTYgb3V0cHV0X2dhaW4pOwotCi1BdG9tSW5mbyAqICAgYnVpbGRfYW1yX2V4dGVuc2lvbiAgICAgICAgICh2b2lkKTsKLUF0b21JbmZvICogICBidWlsZF9oMjYzX2V4dGVuc2lvbiAgICAgICAgKHZvaWQpOwotQXRvbUluZm8gKiAgIGJ1aWxkX2dhbWFfYXRvbSAgICAgICAgICAgICAoZ2RvdWJsZSBnYW1tYSk7Ci1BdG9tSW5mbyAqICAgYnVpbGRfU01JX2F0b20gICAgICAgICAgICAgIChjb25zdCBHc3RCdWZmZXIgKnNlcWgpOwotQXRvbUluZm8gKiAgIGJ1aWxkX2ltYV9hZHBjbV9leHRlbnNpb24gICAoZ2ludCBjaGFubmVscywgZ2ludCByYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBibG9ja3NpemUpOwotQXRvbUluZm8gKiAgIGJ1aWxkX3V1aWRfeG1wX2F0b20gICAgICAgICAoR3N0QnVmZmVyICogeG1wKTsKLQotCi0vKgotICogTWV0YSB0YWdzIGZ1bmN0aW9ucwotICovCi12b2lkIGF0b21fdWR0YV9jbGVhcl90YWdzIChBdG9tVURUQSAqdWR0YSk7Ci12b2lkIGF0b21fdWR0YV9hZGRfc3RyX3RhZyAgICAoQXRvbVVEVEEgKnVkdGEsIGd1aW50MzIgZm91cmNjLCBjb25zdCBnY2hhciAqdmFsdWUpOwotdm9pZCBhdG9tX3VkdGFfYWRkX3VpbnRfdGFnICAgKEF0b21VRFRBICp1ZHRhLCBndWludDMyIGZvdXJjYywgZ3VpbnQzMiBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHZhbHVlKTsKLXZvaWQgYXRvbV91ZHRhX2FkZF90YWcgICAgICAgIChBdG9tVURUQSAqdWR0YSwgZ3VpbnQzMiBmb3VyY2MsIGd1aW50MzIgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSk7Ci12b2lkIGF0b21fdWR0YV9hZGRfYmxvYl90YWcgICAoQXRvbVVEVEEgKnVkdGEsIGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7Ci0KLXZvaWQgYXRvbV91ZHRhX2FkZF8zZ3Bfc3RyX3RhZyAgICAgICAoQXRvbVVEVEEgKnVkdGEsIGd1aW50MzIgZm91cmNjLCBjb25zdCBnY2hhciAqIHZhbHVlKTsKLXZvaWQgYXRvbV91ZHRhX2FkZF8zZ3BfdWludF90YWcgICAgICAoQXRvbVVEVEEgKnVkdGEsIGd1aW50MzIgZm91cmNjLCBndWludDE2IHZhbHVlKTsKLXZvaWQgYXRvbV91ZHRhX2FkZF8zZ3Bfc3RyX2ludF90YWcgICAoQXRvbVVEVEEgKnVkdGEsIGd1aW50MzIgZm91cmNjLCBjb25zdCBnY2hhciAqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50MTYgaXZhbHVlKTsKLXZvaWQgYXRvbV91ZHRhX2FkZF8zZ3BfdGFnICAgICAgICAgICAoQXRvbVVEVEEgKnVkdGEsIGd1aW50MzIgZm91cmNjLCBndWludDggKiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzaXplKTsKLQotdm9pZCBhdG9tX3VkdGFfYWRkX3htcF90YWdzICAgICAgICAgIChBdG9tVURUQSAqdWR0YSwgR3N0QnVmZmVyICogeG1wKTsKLQotQXRvbVRSRUYgKiBhdG9tX3RyZWZfbmV3IChndWludDMyIHJlZnR5cGUpOwotdm9pZCBhdG9tX3RyZWZfYWRkX2VudHJ5IChBdG9tVFJFRiAqIHRyZWYsIGd1aW50MzIgc2FtcGxlKTsKLQotI2RlZmluZSBHU1RfUVRfTVVYX0RFRkFVTFRfVEFHX0xBTkdVQUdFICAgInVuZCIgLyogdW5kZWZpbmVkL3Vua25vd24gKi8KLWd1aW50MTYgIGxhbmd1YWdlX2NvZGUgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGxhbmcpOwotCi0jZW5kaWYgLyogX19BVE9NU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvYXRvbXNyZWNvdmVyeS5jIGIvZ3N0L2lzb21wNC9hdG9tc3JlY292ZXJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMWVlOWMuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9hdG9tc3JlY292ZXJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTA5ICswLDAgQEAKLS8qIFF1aWNrdGltZSBtdXhlciBwbHVnaW4gZm9yIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3Igc2VyaWFsaXppbmcgcGFydGlhbCBpbmZvcm1hdGlvbiBmcm9tCi0gKiBhIG11eCBpbiBwcm9ncmVzcyAoYnkgcXRtdXggZWxlbWVudHMpLiBUaGlzIGVuYWJsZXMgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlCi0gKiBtb292IGJveCBpZiBhIGNyYXNoIGhhcHBlbnMgYW5kIHRodXMgcmVjb3ZlcmluZyB0aGUgbW92aWUgZmlsZS4KLSAqCi0gKiBVc2FnZToKLSAqIDEpIHBpcGVsaW5lOiAuLi55b3VyZWxlbWVudHMgISBxdG11eCBtb292LXJlY292ZXJ5LWZpbGU9cGF0aC5tcmYgISBcCi0gKiBmaWxlc2luayBsb2NhdGlvbj1tb292aWUubW92Ci0gKgotICogMikgQ1JBU0ghCi0gKgotICogMykgZ3N0LWxhdW5jaC0xLjAgcXRtb292cmVjb3ZlciByZWNvdmVyeS1pbnB1dD1wYXRoLm1yZiBicm9rZW4taW5wdXQ9bW9vdmllLm1vdiBcCi0gICAgICAgIGZpeGVkLW91dHB1dD1yZWNvdmVyZWQubW92Ci0gKgotICogNCkgKEhvcGVmdWxseSkgZW5qb3kgcmVjb3ZlcmVkLm1vdi4KLSAqCi0gKiAtLS0gUmVjb3ZlcnkgZmlsZSBsYXlvdXQgLS0tCi0gKiAxKSBWZXJzaW9uIChhIGd1aW50MTYpCi0gKiAyKSBQcmVmaXggYXRvbSAoaWYgcHJlc2VudCkKLSAqIDMpIGZ0eXAgYXRvbQotICogNCkgTVZIRCBhdG9tICh3aXRob3V0IHRpbWVzY2FsZS9kdXJhdGlvbiBzZXQpCi0gKiA1KSBtb292aWUgdGltZXNjYWxlCi0gKiA2KSBudW1iZXIgb2YgdHJha3MKLSAqIDcpIGxpc3Qgb2YgdHJhayBhdG9tcyAoc3RibCBkYXRhIGlzIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHN0c2QgYXRvbSkKLSAqIDgpIEJ1ZmZlcnMgbWV0YWRhdGEgKG1ldGFkYXRhIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhlIGNvbnRhaW5lcikKLSAqICAgIEJ1ZmZlcnMgbWV0YWRhdGEgYXJlIHN0b3JlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgYWRkZWQgdG8gdGhlIG1kYXQsCi0gKiAgICBlYWNoIGVudHJlIGhhcyBhIGZpeGVkIHNpemUgYW5kIGlzIHN0b3JlZCBpbiBCRS4gYm9vbGVhbnMgYXJlIHN0b3JlZAotICogICAgYXMgYSBzaW5nbGUgYnl0ZSB3aGVyZSAwIG1lYW5zIGZhbHNlLCBvdGhlcndpc2UgaXMgdHJ1ZS4KLSAqICAgTWV0YWRhdGE6Ci0gKiAgIC0gZ3VpbnQzMiAgIHRyYWNrX2lkOwotICogICAtIGd1aW50MzIgICBuc2FtcGxlczsKLSAqICAgLSBndWludDMyICAgZGVsdGE7Ci0gKiAgIC0gZ3VpbnQzMiAgIHNpemU7Ci0gKiAgIC0gZ3VpbnQ2NCAgIGNodW5rX29mZnNldDsKLSAqICAgLSBnYm9vbGVhbiAgc3luYzsKLSAqICAgLSBnYm9vbGVhbiAgZG9fcHRzOwotICogICAtIGd1aW50NjQgICBwdHNfb2Zmc2V0OyAoYWx3YXlzIHByZXNlbnQsIGlnbm9yZWQgaWYgZG9fcHRzIGlzIGZhbHNlKQotICoKLSAqIFRoZSBtZGF0IGZpbGUgbWlnaHQgY29udGFpbiBmdHlwIGFuZCB0aGVuIG1kYXQsIGluIGNhc2UgdGhpcyBpcyB0aGUgZmFzdHN0YXJ0Ci0gKiB0ZW1wb3JhcnkgZmlsZSB0aGVyZSBpcyBubyBmdHlwIGFuZCBubyBtZGF0IGhlYWRlciwgb25seSB0aGUgYnVmZmVycyBkYXRhLgotICoKLSAqIE5vdGVzIGFib3V0IHJlY292ZXJ5IGZpbGUgbGF5b3V0OiBXZSBzdGlsbCBkb24ndCBzdG9yZSB0YWdzIG5vciBFRFRTIGRhdGEuCi0gKgotICogSU1QT1JUQU5UOiB0aGlzIGlzIHN0aWxsIGF0IGEgZXhwZXJpbWVudGFsIHN0YXRlLgotICovCi0KLSNpbmNsdWRlICJhdG9tc3JlY292ZXJ5LmgiCi0KLSNkZWZpbmUgQVRPTVNfUkVDT1ZfT1VUUFVUX1dSSVRFX0VSUk9SKGVycikgXAotICAgIGdfc2V0X2Vycm9yIChlcnIsIEFUT01TX1JFQ09WX1FVQVJLLCBBVE9NU19SRUNPVl9FUlJfRklMRSwgXAotICAgICAgICAiRmFpbGVkIHRvIHdyaXRlIHRvIG91dHB1dCBmaWxlOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkKLQotc3RhdGljIGdib29sZWFuCi1hdG9tc19yZWNvdl93cml0ZV92ZXJzaW9uIChGSUxFICogZikKLXsKLSAgZ3VpbnQ4IGRhdGFbMl07Ci0gIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIEFUT01TX1JFQ09WX0ZJTEVfVkVSU0lPTik7Ci0gIHJldHVybiBmd3JpdGUgKGRhdGEsIDIsIDEsIGYpID09IDE7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotYXRvbXNfcmVjb3Zfd3JpdGVfZnR5cF9pbmZvIChGSUxFICogZiwgQXRvbUZUWVAgKiBmdHlwLCBHc3RCdWZmZXIgKiBwcmVmaXgpCi17Ci0gIGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gIGd1aW50NjQgb2Zmc2V0ID0gMDsKLSAgZ3VpbnQ2NCBzaXplID0gMDsKLQotICBpZiAocHJlZml4KSB7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAocHJlZml4LCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmIChmd3JpdGUgKG1hcC5kYXRhLCAxLCBtYXAuc2l6ZSwgZikgIT0gbWFwLnNpemUpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHByZWZpeCwgJm1hcCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKHByZWZpeCwgJm1hcCk7Ci0gIH0KLSAgaWYgKCFhdG9tX2Z0eXBfY29weV9kYXRhIChmdHlwLCAmZGF0YSwgJnNpemUsICZvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmIChmd3JpdGUgKGRhdGEsIDEsIG9mZnNldCwgZikgIT0gb2Zmc2V0KSB7Ci0gICAgZ19mcmVlIChkYXRhKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgZ19mcmVlIChkYXRhKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBXcml0ZXMgaW1wb3J0YW50IGluZm8gb24gdGhlICdtb292JyBhdG9tIChub24tdHJhayByZWxhdGVkKQotICogdG8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBtb292IHN0cnVjdHVyZSBhZnRlciBhIGNyYXNoLgotICoKLSAqIEN1cnJlbnRseSwgaXQgd3JpdGVzIHRoZSBNVkhEIGF0b20uCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotYXRvbXNfcmVjb3Zfd3JpdGVfbW9vdl9pbmZvIChGSUxFICogZiwgQXRvbU1PT1YgKiBtb292KQotewotICBndWludDggKmRhdGE7Ci0gIGd1aW50NjQgc2l6ZTsKLSAgZ3VpbnQ2NCBvZmZzZXQgPSAwOwotICBndWludDY0IGF0b21fc2l6ZSA9IDA7Ci0gIGdpbnQgd3JpdGVuID0gMDsKLQotICAvKiBsaWtlbHkgZW5vdWdoICovCi0gIHNpemUgPSAyNTY7Ci0gIGRhdGEgPSBnX21hbGxvYyAoc2l6ZSk7Ci0gIGF0b21fc2l6ZSA9IGF0b21fbXZoZF9jb3B5X2RhdGEgKCZtb292LT5tdmhkLCAmZGF0YSwgJnNpemUsICZvZmZzZXQpOwotICBpZiAoYXRvbV9zaXplID4gMCkKLSAgICB3cml0ZW4gPSBmd3JpdGUgKGRhdGEsIDEsIGF0b21fc2l6ZSwgZik7Ci0gIGdfZnJlZSAoZGF0YSk7Ci0gIHJldHVybiBhdG9tX3NpemUgPiAwICYmIHdyaXRlbiA9PSBhdG9tX3NpemU7Ci19Ci0KLS8qCi0gKiBXcml0ZXMgdGhlIG51bWJlciBvZiB0cmFrcyB0byB0aGUgZmlsZS4KLSAqIFRoaXMgc2ltcGx5IHdyaXRlcyBhIGd1aW50MzIgaW4gQkUuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotYXRvbXNfcmVjb3Zfd3JpdGVfdHJha3NfbnVtYmVyIChGSUxFICogZiwgZ3VpbnQzMiB0cmFrcykKLXsKLSAgZ3VpbnQ4IGRhdGFbNF07Ci0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEsIHRyYWtzKTsKLSAgcmV0dXJuIGZ3cml0ZSAoZGF0YSwgNCwgMSwgZikgPT0gMTsKLX0KLQotLyoKLSAqIFdyaXRlcyB0aGUgbW9vdidzIHRpbWVzY2FsZSB0byB0aGUgZmlsZQotICogVGhpcyBzaW1wbHkgd3JpdGVzIGEgZ3VpbnQzMiBpbiBCRS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1hdG9tc19yZWNvdl93cml0ZV9tb292X3RpbWVzY2FsZSAoRklMRSAqIGYsIGd1aW50MzIgdGltZXNjYWxlKQotewotICBndWludDggZGF0YVs0XTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSwgdGltZXNjYWxlKTsKLSAgcmV0dXJuIGZ3cml0ZSAoZGF0YSwgNCwgMSwgZikgPT0gMTsKLX0KLQotLyoKLSAqIFdyaXRlcyB0aGUgdHJhayBhdG9tIHRvIHRoZSBmaWxlLgotICovCi1nYm9vbGVhbgotYXRvbXNfcmVjb3Zfd3JpdGVfdHJha19pbmZvIChGSUxFICogZiwgQXRvbVRSQUsgKiB0cmFrKQotewotICBndWludDggKmRhdGE7Ci0gIGd1aW50NjQgc2l6ZTsKLSAgZ3VpbnQ2NCBvZmZzZXQgPSAwOwotICBndWludDY0IGF0b21fc2l6ZSA9IDA7Ci0gIGdpbnQgd3JpdGVuID0gMDsKLQotICAvKiBidWZmZXIgaXMgcmVhbGxvY2VkIHRvIGEgbGFyZ2VyIHNpemUgaWYgbmVlZGVkICovCi0gIHNpemUgPSA0ICogMTAyNDsKLSAgZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKLSAgYXRvbV9zaXplID0gYXRvbV90cmFrX2NvcHlfZGF0YSAodHJhaywgJmRhdGEsICZzaXplLCAmb2Zmc2V0KTsKLSAgaWYgKGF0b21fc2l6ZSA+IDApCi0gICAgd3JpdGVuID0gZndyaXRlIChkYXRhLCBhdG9tX3NpemUsIDEsIGYpOwotICBnX2ZyZWUgKGRhdGEpOwotICByZXR1cm4gYXRvbV9zaXplID4gMCAmJiB3cml0ZW4gPT0gYXRvbV9zaXplOwotfQotCi1nYm9vbGVhbgotYXRvbXNfcmVjb3Zfd3JpdGVfdHJha19zYW1wbGVzIChGSUxFICogZiwgQXRvbVRSQUsgKiB0cmFrLCBndWludDMyIG5zYW1wbGVzLAotICAgIGd1aW50MzIgZGVsdGEsIGd1aW50MzIgc2l6ZSwgZ3VpbnQ2NCBjaHVua19vZmZzZXQsIGdib29sZWFuIHN5bmMsCi0gICAgZ2Jvb2xlYW4gZG9fcHRzLCBnaW50NjQgcHRzX29mZnNldCkKLXsKLSAgZ3VpbnQ4IGRhdGFbVFJBS19CVUZGRVJfRU5UUllfSU5GT19TSVpFXTsKLSAgLyoKLSAgICogV2UgaGF2ZSB0byB3cml0ZSBhIFRyYWtCdWZmZXJFbnRyeUluZm8KLSAgICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEgKyAwLCB0cmFrLT50a2hkLnRyYWNrX0lEKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSArIDQsIG5zYW1wbGVzKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSArIDgsIGRlbHRhKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSArIDEyLCBzaXplKTsKLSAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoZGF0YSArIDE2LCBjaHVua19vZmZzZXQpOwotICBpZiAoc3luYykKLSAgICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAyNCwgMSk7Ci0gIGVsc2UKLSAgICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAyNCwgMCk7Ci0gIGlmIChkb19wdHMpIHsKLSAgICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAyNSwgMSk7Ci0gICAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoZGF0YSArIDI2LCBwdHNfb2Zmc2V0KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAyNSwgMCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoZGF0YSArIDI2LCAwKTsKLSAgfQotCi0gIHJldHVybiBmd3JpdGUgKGRhdGEsIDEsIFRSQUtfQlVGRkVSX0VOVFJZX0lORk9fU0laRSwgZikgPT0KLSAgICAgIFRSQUtfQlVGRkVSX0VOVFJZX0lORk9fU0laRTsKLX0KLQotZ2Jvb2xlYW4KLWF0b21zX3JlY292X3dyaXRlX2hlYWRlcnMgKEZJTEUgKiBmLCBBdG9tRlRZUCAqIGZ0eXAsIEdzdEJ1ZmZlciAqIHByZWZpeCwKLSAgICBBdG9tTU9PViAqIG1vb3YsIGd1aW50MzIgdGltZXNjYWxlLCBndWludDMyIHRyYWtzX251bWJlcikKLXsKLSAgaWYgKCFhdG9tc19yZWNvdl93cml0ZV92ZXJzaW9uIChmKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICghYXRvbXNfcmVjb3Zfd3JpdGVfZnR5cF9pbmZvIChmLCBmdHlwLCBwcmVmaXgpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCFhdG9tc19yZWNvdl93cml0ZV9tb292X2luZm8gKGYsIG1vb3YpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCFhdG9tc19yZWNvdl93cml0ZV9tb292X3RpbWVzY2FsZSAoZiwgdGltZXNjYWxlKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICghYXRvbXNfcmVjb3Zfd3JpdGVfdHJha3NfbnVtYmVyIChmLCB0cmFrc19udW1iZXIpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVhZF9hdG9tX2hlYWRlciAoRklMRSAqIGYsIGd1aW50MzIgKiBmb3VyY2MsIGd1aW50MzIgKiBzaXplKQotewotICBndWludDggYXV4WzhdOwotCi0gIGlmIChmcmVhZCAoYXV4LCAxLCA4LCBmKSAhPSA4KQotICAgIHJldHVybiBGQUxTRTsKLSAgKnNpemUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGF1eCk7Ci0gICpmb3VyY2MgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGF1eCArIDQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tb292X3JlY292X2ZpbGVfcGFyc2VfcHJlZml4IChNb292UmVjb3ZGaWxlICogbW9vdnJmKQotewotICBndWludDMyIGZvdXJjYzsKLSAgZ3VpbnQzMiBzaXplOwotICBndWludDMyIHRvdGFsX3NpemUgPSAwOwotICBpZiAoZnNlZWsgKG1vb3ZyZi0+ZmlsZSwgMiwgU0VFS19TRVQpICE9IDApCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIXJlYWRfYXRvbV9oZWFkZXIgKG1vb3ZyZi0+ZmlsZSwgJmZvdXJjYywgJnNpemUpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKGZvdXJjYyAhPSBGT1VSQ0NfZnR5cCkgewotICAgIC8qIHdlIG1pZ2h0IGhhdmUgYSBwcmVmaXggaGVyZSAqLwotICAgIGlmIChmc2VlayAobW9vdnJmLT5maWxlLCBzaXplIC0gOCwgU0VFS19DVVIpICE9IDApCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICB0b3RhbF9zaXplICs9IHNpemU7Ci0KLSAgICAvKiBub3cgcmVhZCB0aGUgZnR5cCAqLwotICAgIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmc2l6ZSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiB0aGlzIGhhcyB0byBiZSB0aGUgZnR5cCAqLwotICBpZiAoZm91cmNjICE9IEZPVVJDQ19mdHlwKQotICAgIHJldHVybiBGQUxTRTsKLSAgdG90YWxfc2l6ZSArPSBzaXplOwotICBtb292cmYtPnByZWZpeF9zaXplID0gdG90YWxfc2l6ZTsKLSAgcmV0dXJuIGZzZWVrIChtb292cmYtPmZpbGUsIHNpemUgLSA4LCBTRUVLX0NVUikgPT0gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tb292X3JlY292X2ZpbGVfcGFyc2VfbXZoZCAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZikKLXsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0gIGd1aW50MzIgc2l6ZTsKLSAgaWYgKCFyZWFkX2F0b21faGVhZGVyIChtb292cmYtPmZpbGUsICZmb3VyY2MsICZzaXplKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICAvKiBjaGVjayBmb3Igc2FuaXR5ICovCi0gIGlmIChmb3VyY2MgIT0gRk9VUkNDX212aGQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG1vb3ZyZi0+bXZoZF9zaXplID0gc2l6ZTsKLSAgbW9vdnJmLT5tdmhkX3BvcyA9IGZ0ZWxsIChtb292cmYtPmZpbGUpIC0gODsKLQotICAvKiBza2lwIHRoZSByZW1haW5pbmcgb2YgdGhlIG12aGQgaW4gdGhlIGZpbGUgKi8KLSAgcmV0dXJuIGZzZWVrIChtb292cmYtPmZpbGUsIHNpemUgLSA4LCBTRUVLX0NVUikgPT0gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tZGF0X3JlY292X2ZpbGVfcGFyc2VfbWRhdF9zdGFydCAoTWRhdFJlY292RmlsZSAqIG1kYXRyZikKLXsKLSAgZ3VpbnQzMiBmb3VyY2MsIHNpemU7Ci0KLSAgaWYgKCFyZWFkX2F0b21faGVhZGVyIChtZGF0cmYtPmZpbGUsICZmb3VyY2MsICZzaXplKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgbWRhdHJmLT5tZGF0X2hlYWRlcl9zaXplID0gMTY7Ci0gICAgbWRhdHJmLT5tZGF0X3NpemUgPSAxNjsKLSAgfSBlbHNlIHsKLSAgICBtZGF0cmYtPm1kYXRfaGVhZGVyX3NpemUgPSA4OwotICAgIG1kYXRyZi0+bWRhdF9zaXplID0gODsKLSAgfQotICBtZGF0cmYtPm1kYXRfc3RhcnQgPSBmdGVsbCAobWRhdHJmLT5maWxlKSAtIDg7Ci0KLSAgcmV0dXJuIGZvdXJjYyA9PSBGT1VSQ0NfbWRhdDsKLX0KLQotTWRhdFJlY292RmlsZSAqCi1tZGF0X3JlY292X2ZpbGVfY3JlYXRlIChGSUxFICogZmlsZSwgZ2Jvb2xlYW4gZGF0YWZpbGUsIEdFcnJvciAqKiBlcnIpCi17Ci0gIE1kYXRSZWNvdkZpbGUgKm1yZiA9IGdfbmV3MCAoTWRhdFJlY292RmlsZSwgMSk7Ci0gIGd1aW50MzIgZm91cmNjLCBzaXplOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlICE9IE5VTEwsIE5VTEwpOwotCi0gIG1yZi0+ZmlsZSA9IGZpbGU7Ci0gIG1yZi0+cmF3ZmlsZSA9IGRhdGFmaWxlOwotCi0gIC8qIGdldCB0aGUgZmlsZS9kYXRhIGxlbmd0aCAqLwotICBpZiAoZnNlZWsgKGZpbGUsIDAsIFNFRUtfRU5EKSAhPSAwKQotICAgIGdvdG8gZmlsZV9sZW5ndGhfZXJyb3I7Ci0gIC8qIHN0aWxsIG5lZWRzIHRvIGRlZHVjZSB0aGUgbWRhdCBoZWFkZXIgYW5kIGZ0eXAgc2l6ZSAqLwotICBtcmYtPmRhdGFfc2l6ZSA9IGZ0ZWxsIChmaWxlKTsKLSAgaWYgKG1yZi0+ZGF0YV9zaXplID09IC0xTCkKLSAgICBnb3RvIGZpbGVfbGVuZ3RoX2Vycm9yOwotCi0gIGlmIChmc2VlayAoZmlsZSwgMCwgU0VFS19TRVQpICE9IDApCi0gICAgZ290byBmaWxlX3NlZWtfZXJyb3I7Ci0KLSAgaWYgKGRhdGFmaWxlKSB7Ci0gICAgLyogdGhpcyBmaWxlIGNvbnRhaW5zIG5vIGF0b21zLCBvbmx5IHJhdyBkYXRhIHRvIGJlIHBsYWNlZCBvbiB0aGUgbWRhdAotICAgICAqIHRoaXMgaGFwcGVucyB3aGVuIGZhc3RzdGFydCBtb2RlIGlzIHVzZWQgKi8KLSAgICBtcmYtPm1kYXRfc3RhcnQgPSAwOwotICAgIG1yZi0+bWRhdF9oZWFkZXJfc2l6ZSA9IDE2OwotICAgIG1yZi0+bWRhdF9zaXplID0gMTY7Ci0gICAgcmV0dXJuIG1yZjsKLSAgfQotCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAoZmlsZSwgJmZvdXJjYywgJnNpemUpKSB7Ci0gICAgZ290byBwYXJzZV9lcnJvcjsKLSAgfQotICBpZiAoZm91cmNjICE9IEZPVVJDQ19mdHlwKSB7Ci0gICAgLyogdGhpcyBjb3VsZCBiZSBhIHByZWZpeCBhdG9tLCBsZXQncyBza2lwIGl0IGFuZCB0cnkgYWdhaW4gKi8KLSAgICBpZiAoZnNlZWsgKGZpbGUsIHNpemUgLSA4LCBTRUVLX0NVUikgIT0gMCkgewotICAgICAgZ290byBmaWxlX3NlZWtfZXJyb3I7Ci0gICAgfQotICAgIGlmICghcmVhZF9hdG9tX2hlYWRlciAoZmlsZSwgJmZvdXJjYywgJnNpemUpKSB7Ci0gICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICAgIH0KLSAgfQotCi0gIGlmIChmb3VyY2MgIT0gRk9VUkNDX2Z0eXApIHsKLSAgICBnb3RvIHBhcnNlX2Vycm9yOwotICB9Ci0gIGlmIChmc2VlayAoZmlsZSwgc2l6ZSAtIDgsIFNFRUtfQ1VSKSAhPSAwKQotICAgIGdvdG8gZmlsZV9zZWVrX2Vycm9yOwotCi0gIC8qIHdlIGRvbid0IHBhcnNlIHRoaXMgaWYgd2UgaGF2ZSBhIHRtcGRhdGFmaWxlICovCi0gIGlmICghbWRhdF9yZWNvdl9maWxlX3BhcnNlX21kYXRfc3RhcnQgKG1yZikpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX1BBUlNJTkcsCi0gICAgICAgICJFcnJvciB3aGlsZSBwYXJzaW5nIG1kYXQgYXRvbSIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIHJldHVybiBtcmY7Ci0KLXBhcnNlX2Vycm9yOgotICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX0ZJTEUsCi0gICAgICAiRmFpbGVkIHRvIHBhcnNlIGF0b20iKTsKLSAgZ290byBmYWlsOwotCi1maWxlX3NlZWtfZXJyb3I6Ci0gIGdfc2V0X2Vycm9yIChlcnIsIEFUT01TX1JFQ09WX1FVQVJLLCBBVE9NU19SRUNPVl9FUlJfRklMRSwKLSAgICAgICJGYWlsZWQgdG8gc2VlayB0byBzdGFydCBvZiB0aGUgZmlsZSIpOwotICBnb3RvIGZhaWw7Ci0KLWZpbGVfbGVuZ3RoX2Vycm9yOgotICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX0ZJTEUsCi0gICAgICAiRmFpbGVkIHRvIGRldGVybWluZSBmaWxlIHNpemUiKTsKLSAgZ290byBmYWlsOwotCi1mYWlsOgotICBtZGF0X3JlY292X2ZpbGVfZnJlZSAobXJmKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQKLW1kYXRfcmVjb3ZfZmlsZV9mcmVlIChNZGF0UmVjb3ZGaWxlICogbXJmKQotewotICBmY2xvc2UgKG1yZi0+ZmlsZSk7Ci0gIGdfZnJlZSAobXJmKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tb292X3JlY292X3BhcnNlX251bV90cmFrcyAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZikKLXsKLSAgZ3VpbnQ4IHRyYWtzWzRdOwotICBpZiAoZnJlYWQgKHRyYWtzLCAxLCA0LCBtb292cmYtPmZpbGUpICE9IDQpCi0gICAgcmV0dXJuIEZBTFNFOwotICBtb292cmYtPm51bV90cmFrcyA9IEdTVF9SRUFEX1VJTlQzMl9CRSAodHJha3MpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tb292X3JlY292X3BhcnNlX21vb3ZfdGltZXNjYWxlIChNb292UmVjb3ZGaWxlICogbW9vdnJmKQotewotICBndWludDggdHNbNF07Ci0gIGlmIChmcmVhZCAodHMsIDEsIDQsIG1vb3ZyZi0+ZmlsZSkgIT0gNCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIG1vb3ZyZi0+dGltZXNjYWxlID0gR1NUX1JFQURfVUlOVDMyX0JFICh0cyk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNraXBfYXRvbSAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZiwgZ3VpbnQzMiBleHBlY3RlZF9mb3VyY2MpCi17Ci0gIGd1aW50MzIgc2l6ZTsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0KLSAgaWYgKCFyZWFkX2F0b21faGVhZGVyIChtb292cmYtPmZpbGUsICZmb3VyY2MsICZzaXplKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChmb3VyY2MgIT0gZXhwZWN0ZWRfZm91cmNjKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gKGZzZWVrIChtb292cmYtPmZpbGUsIHNpemUgLSA4LCBTRUVLX0NVUikgPT0gMCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbW9vdl9yZWNvdl9wYXJzZV90a2hkIChNb292UmVjb3ZGaWxlICogbW9vdnJmLCBUcmFrUmVjb3ZEYXRhICogdHJha3JkKQotewotICBndWludDMyIHNpemU7Ci0gIGd1aW50MzIgZm91cmNjOwotICBndWludDggZGF0YVs0XTsKLQotICAvKiBtYWtlIHN1cmUgd2UgYXJlIG9uIGEgdGtoZCBhdG9tICovCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjICE9IEZPVVJDQ190a2hkKQotICAgIHJldHVybiBGQUxTRTsKLQotICB0cmFrcmQtPnRraGRfZmlsZV9vZmZzZXQgPSBmdGVsbCAobW9vdnJmLT5maWxlKSAtIDg7Ci0KLSAgLyogbW92ZSA4IGJ5dGVzIGZvcndhcmQgdG8gdGhlIHRyYWtfaWQgcG9zICovCi0gIGlmIChmc2VlayAobW9vdnJmLT5maWxlLCAxMiwgU0VFS19DVVIpICE9IDApCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZnJlYWQgKGRhdGEsIDEsIDQsIG1vb3ZyZi0+ZmlsZSkgIT0gNCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogYWR2YW5jZSB0aGUgcmVzdCBvZiB0a2hkICovCi0gIGlmIChmc2VlayAobW9vdnJmLT5maWxlLCA2OCwgU0VFS19DVVIpICE9IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHRyYWtyZC0+dHJha19pZCA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW1vb3ZfcmVjb3ZfcGFyc2Vfc3RibCAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZiwgVHJha1JlY292RGF0YSAqIHRyYWtyZCkKLXsKLSAgZ3VpbnQzMiBzaXplOwotICBndWludDMyIGZvdXJjYzsKLSAgZ3VpbnQzMiBhdXhzaXplOwotCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjICE9IEZPVVJDQ19zdGJsKQotICAgIHJldHVybiBGQUxTRTsKLQotICB0cmFrcmQtPnN0YmxfZmlsZV9vZmZzZXQgPSBmdGVsbCAobW9vdnJmLT5maWxlKSAtIDg7Ci0gIHRyYWtyZC0+c3RibF9zaXplID0gc2l6ZTsKLQotICAvKiBza2lwIHRoZSBzdHNkICovCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmYXV4c2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjICE9IEZPVVJDQ19zdHNkKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKGZzZWVrIChtb292cmYtPmZpbGUsIGF1eHNpemUgLSA4LCBTRUVLX0NVUikgIT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgdHJha3JkLT5zdHNkX3NpemUgPSBhdXhzaXplOwotICB0cmFrcmQtPnBvc3Rfc3RzZF9vZmZzZXQgPSBmdGVsbCAobW9vdnJmLT5maWxlKTsKLQotICAvKiBhcyB0aGlzIGlzIHRoZSBsYXN0IGF0b20gd2UgcGFyc2UsIHdlIGRvbid0IHNraXAgZm9yd2FyZCAqLwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW1vb3ZfcmVjb3ZfcGFyc2VfbWluZiAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZiwgVHJha1JlY292RGF0YSAqIHRyYWtyZCkKLXsKLSAgZ3VpbnQzMiBzaXplOwotICBndWludDMyIGZvdXJjYzsKLSAgZ3VpbnQzMiBhdXhzaXplOwotCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjICE9IEZPVVJDQ19taW5mKQotICAgIHJldHVybiBGQUxTRTsKLQotICB0cmFrcmQtPm1pbmZfZmlsZV9vZmZzZXQgPSBmdGVsbCAobW9vdnJmLT5maWxlKSAtIDg7Ci0gIHRyYWtyZC0+bWluZl9zaXplID0gc2l6ZTsKLQotICAvKiBza2lwIGVpdGhlciBvZiB2bWhkLCBzbWhkLCBobWhkIHRoYXQgbWlnaHQgZm9sbG93ICovCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmYXV4c2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjICE9IEZPVVJDQ192bWhkICYmIGZvdXJjYyAhPSBGT1VSQ0Nfc21oZCAmJiBmb3VyY2MgIT0gRk9VUkNDX2htaGQgJiYKLSAgICAgIGZvdXJjYyAhPSBGT1VSQ0NfZ21oZCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChmc2VlayAobW9vdnJmLT5maWxlLCBhdXhzaXplIC0gOCwgU0VFS19DVVIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBza2lwIGEgcG9zc2libGUgaGRsciBhbmQgdGhlIGZvbGxvd2luZyBkaW5mICovCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmYXV4c2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjID09IEZPVVJDQ19oZGxyKSB7Ci0gICAgaWYgKGZzZWVrIChtb292cmYtPmZpbGUsIGF1eHNpemUgLSA4LCBTRUVLX0NVUikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKCFyZWFkX2F0b21faGVhZGVyIChtb292cmYtPmZpbGUsICZmb3VyY2MsICZhdXhzaXplKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAoZm91cmNjICE9IEZPVVJDQ19kaW5mKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKGZzZWVrIChtb292cmYtPmZpbGUsIGF1eHNpemUgLSA4LCBTRUVLX0NVUikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIG5vdyB3ZSBhcmUgcmVhZHkgdG8gcmVhZCB0aGUgc3RibCAqLwotICBpZiAoIW1vb3ZfcmVjb3ZfcGFyc2Vfc3RibCAobW9vdnJmLCB0cmFrcmQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1tb292X3JlY292X3BhcnNlX21kaGQgKE1vb3ZSZWNvdkZpbGUgKiBtb292cmYsIFRyYWtSZWNvdkRhdGEgKiB0cmFrcmQpCi17Ci0gIGd1aW50MzIgc2l6ZTsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0gIGd1aW50OCBkYXRhWzRdOwotCi0gIC8qIG1ha2Ugc3VyZSB3ZSBhcmUgb24gYSB0a2hkIGF0b20gKi8KLSAgaWYgKCFyZWFkX2F0b21faGVhZGVyIChtb292cmYtPmZpbGUsICZmb3VyY2MsICZzaXplKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChmb3VyY2MgIT0gRk9VUkNDX21kaGQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHRyYWtyZC0+bWRoZF9maWxlX29mZnNldCA9IGZ0ZWxsIChtb292cmYtPmZpbGUpIC0gODsKLQotICAvKiBnZXQgdGhlIHRpbWVzY2FsZSAqLwotICBpZiAoZnNlZWsgKG1vb3ZyZi0+ZmlsZSwgMTIsIFNFRUtfQ1VSKSAhPSAwKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKGZyZWFkIChkYXRhLCAxLCA0LCBtb292cmYtPmZpbGUpICE9IDQpCi0gICAgcmV0dXJuIEZBTFNFOwotICB0cmFrcmQtPnRpbWVzY2FsZSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSk7Ci0gIGlmIChmc2VlayAobW9vdnJmLT5maWxlLCA4LCBTRUVLX0NVUikgIT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW1vb3ZfcmVjb3ZfcGFyc2VfbWRpYSAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZiwgVHJha1JlY292RGF0YSAqIHRyYWtyZCkKLXsKLSAgZ3VpbnQzMiBzaXplOwotICBndWludDMyIGZvdXJjYzsKLQotICAvKiBtYWtlIHN1cmUgd2UgYXJlIG9uIGEgdGtoZCBhdG9tICovCi0gIGlmICghcmVhZF9hdG9tX2hlYWRlciAobW9vdnJmLT5maWxlLCAmZm91cmNjLCAmc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoZm91cmNjICE9IEZPVVJDQ19tZGlhKQotICAgIHJldHVybiBGQUxTRTsKLQotICB0cmFrcmQtPm1kaWFfZmlsZV9vZmZzZXQgPSBmdGVsbCAobW9vdnJmLT5maWxlKSAtIDg7Ci0gIHRyYWtyZC0+bWRpYV9zaXplID0gc2l6ZTsKLQotICBpZiAoIW1vb3ZfcmVjb3ZfcGFyc2VfbWRoZCAobW9vdnJmLCB0cmFrcmQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIXNraXBfYXRvbSAobW9vdnJmLCBGT1VSQ0NfaGRscikpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIW1vb3ZfcmVjb3ZfcGFyc2VfbWluZiAobW9vdnJmLCB0cmFrcmQpKQotICAgIHJldHVybiBGQUxTRTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbW9vdl9yZWNvdl9wYXJzZV90cmFrIChNb292UmVjb3ZGaWxlICogbW9vdnJmLCBUcmFrUmVjb3ZEYXRhICogdHJha3JkKQotewotICBndWludDY0IG9mZnNldDsKLSAgZ3VpbnQzMiBzaXplOwotICBndWludDMyIGZvdXJjYzsKLQotICBvZmZzZXQgPSBmdGVsbCAobW9vdnJmLT5maWxlKTsKLSAgaWYgKG9mZnNldCA9PSAtMSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIG1ha2Ugc3VyZSB3ZSBhcmUgb24gYSB0cmFrIGF0b20gKi8KLSAgaWYgKCFyZWFkX2F0b21faGVhZGVyIChtb292cmYtPmZpbGUsICZmb3VyY2MsICZzaXplKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAoZm91cmNjICE9IEZPVVJDQ190cmFrKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHRyYWtyZC0+dHJha19zaXplID0gc2l6ZTsKLQotICAvKiBub3cgd2Ugc2hvdWxkIGhhdmUgYSB0cmFrIGhlYWRlciAndGtoZCcgKi8KLSAgaWYgKCFtb292X3JlY292X3BhcnNlX3RraGQgKG1vb3ZyZiwgdHJha3JkKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogRklYTUUgYWRkIGVkdHMgaGFuZGxpbmcgaGVyZSBhbmQgaW4gcXRtdXgsIGFzIHRoaXMgaXMgb25seSBkZXRlY3RlZAotICAgKiBhZnRlciBidWZmZXJzIHN0YXJ0IGZsb3dpbmcgKi8KLQotICBpZiAoIW1vb3ZfcmVjb3ZfcGFyc2VfbWRpYSAobW9vdnJmLCB0cmFrcmQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICB0cmFrcmQtPmZpbGVfb2Zmc2V0ID0gb2Zmc2V0OwotICAvKiBwb3NpdGlvbiBhZnRlciB0aGUgdHJhayAqLwotICByZXR1cm4gZnNlZWsgKG1vb3ZyZi0+ZmlsZSwgKGxvbmcgaW50KSBvZmZzZXQgKyBzaXplLCBTRUVLX1NFVCkgPT0gMDsKLX0KLQotTW9vdlJlY292RmlsZSAqCi1tb292X3JlY292X2ZpbGVfY3JlYXRlIChGSUxFICogZmlsZSwgR0Vycm9yICoqIGVycikKLXsKLSAgZ2ludCBpOwotICBNb292UmVjb3ZGaWxlICptb292cmYgPSBnX25ldzAgKE1vb3ZSZWNvdkZpbGUsIDEpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWxlICE9IE5VTEwsIE5VTEwpOwotCi0gIG1vb3ZyZi0+ZmlsZSA9IGZpbGU7Ci0KLSAgLyogbG9vayBmb3IgZnR5cCBhbmQgcHJlZml4IGF0IHRoZSBzdGFydCAqLwotICBpZiAoIW1vb3ZfcmVjb3ZfZmlsZV9wYXJzZV9wcmVmaXggKG1vb3ZyZikpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX1BBUlNJTkcsCi0gICAgICAgICJFcnJvciB3aGlsZSBwYXJzaW5nIHByZWZpeCBhdG9tcyIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIC8qIHBhcnNlIHRoZSBtdmhkICovCi0gIGlmICghbW9vdl9yZWNvdl9maWxlX3BhcnNlX212aGQgKG1vb3ZyZikpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX1BBUlNJTkcsCi0gICAgICAgICJFcnJvciB3aGlsZSBwYXJzaW5nIG12aGQgYXRvbSIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIGlmICghbW9vdl9yZWNvdl9wYXJzZV9tb292X3RpbWVzY2FsZSAobW9vdnJmKSkgewotICAgIGdfc2V0X2Vycm9yIChlcnIsIEFUT01TX1JFQ09WX1FVQVJLLCBBVE9NU19SRUNPVl9FUlJfUEFSU0lORywKLSAgICAgICAgIkVycm9yIHdoaWxlIHBhcnNpbmcgdGltZXNjYWxlIik7Ci0gICAgZ290byBmYWlsOwotICB9Ci0gIGlmICghbW9vdl9yZWNvdl9wYXJzZV9udW1fdHJha3MgKG1vb3ZyZikpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX1BBUlNJTkcsCi0gICAgICAgICJFcnJvciB3aGlsZSBwYXJzaW5nIHBhcnNpbmcgbnVtYmVyIG9mIHRyYWtzIik7Ci0gICAgZ290byBmYWlsOwotICB9Ci0KLSAgLyogc2FuaXR5IGNoZWNrICovCi0gIGlmIChtb292cmYtPm51bV90cmFrcyA+IDEwMjQpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX1BBUlNJTkcsCi0gICAgICAgICJVbnN1cHBvcnRlZCBudW1iZXIgb2YgdHJha3MiKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICAvKiBpbml0IHRoZSB0cmFrcyAqLwotICBtb292cmYtPnRyYWtzX3JkID0gZ19uZXcwIChUcmFrUmVjb3ZEYXRhLCBtb292cmYtPm51bV90cmFrcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBtb292cmYtPm51bV90cmFrczsgaSsrKSB7Ci0gICAgYXRvbV9zdGJsX2luaXQgKCYobW9vdnJmLT50cmFrc19yZFtpXS5zdGJsKSk7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IG1vb3ZyZi0+bnVtX3RyYWtzOyBpKyspIHsKLSAgICBpZiAoIW1vb3ZfcmVjb3ZfcGFyc2VfdHJhayAobW9vdnJmLCAmKG1vb3ZyZi0+dHJha3NfcmRbaV0pKSkgewotICAgICAgZ19zZXRfZXJyb3IgKGVyciwgQVRPTVNfUkVDT1ZfUVVBUkssIEFUT01TX1JFQ09WX0VSUl9QQVJTSU5HLAotICAgICAgICAgICJFcnJvciB3aGlsZSBwYXJzaW5nIHRyYWsgYXRvbSIpOwotICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBtb292cmY7Ci0KLWZhaWw6Ci0gIG1vb3ZfcmVjb3ZfZmlsZV9mcmVlIChtb292cmYpOwotICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZAotbW9vdl9yZWNvdl9maWxlX2ZyZWUgKE1vb3ZSZWNvdkZpbGUgKiBtb292cmYpCi17Ci0gIGdpbnQgaTsKLSAgZmNsb3NlIChtb292cmYtPmZpbGUpOwotICBpZiAobW9vdnJmLT50cmFrc19yZCkgewotICAgIGZvciAoaSA9IDA7IGkgPCBtb292cmYtPm51bV90cmFrczsgaSsrKSB7Ci0gICAgICBhdG9tX3N0YmxfY2xlYXIgKCYobW9vdnJmLT50cmFrc19yZFtpXS5zdGJsKSk7Ci0gICAgfQotICAgIGdfZnJlZSAobW9vdnJmLT50cmFrc19yZCk7Ci0gIH0KLSAgZ19mcmVlIChtb292cmYpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLW1vb3ZfcmVjb3ZfcGFyc2VfYnVmZmVyX2VudHJ5IChNb292UmVjb3ZGaWxlICogbW9vdnJmLCBUcmFrQnVmZmVyRW50cnlJbmZvICogYikKLXsKLSAgZ3VpbnQ4IGRhdGFbVFJBS19CVUZGRVJfRU5UUllfSU5GT19TSVpFXTsKLSAgZ2ludCByZWFkOwotCi0gIHJlYWQgPSBmcmVhZCAoZGF0YSwgMSwgVFJBS19CVUZGRVJfRU5UUllfSU5GT19TSVpFLCBtb292cmYtPmZpbGUpOwotICBpZiAocmVhZCAhPSBUUkFLX0JVRkZFUl9FTlRSWV9JTkZPX1NJWkUpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGItPnRyYWNrX2lkID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgYi0+bnNhbXBsZXMgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGRhdGEgKyA0KTsKLSAgYi0+ZGVsdGEgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGRhdGEgKyA4KTsKLSAgYi0+c2l6ZSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSArIDEyKTsKLSAgYi0+Y2h1bmtfb2Zmc2V0ID0gR1NUX1JFQURfVUlOVDY0X0JFIChkYXRhICsgMTYpOwotICBiLT5zeW5jID0gZGF0YVsyNF0gIT0gMDsKLSAgYi0+ZG9fcHRzID0gZGF0YVsyNV0gIT0gMDsKLSAgYi0+cHRzX29mZnNldCA9IEdTVF9SRUFEX1VJTlQ2NF9CRSAoZGF0YSArIDI2KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbWRhdF9yZWNvdl9hZGRfc2FtcGxlIChNZGF0UmVjb3ZGaWxlICogbWRhdHJmLCBndWludDMyIHNpemUpCi17Ci0gIC8qIHRlc3QgaWYgdGhpcyBkYXRhIGV4aXN0cyAqLwotICBpZiAobWRhdHJmLT5tZGF0X3NpemUgLSBtZGF0cmYtPm1kYXRfaGVhZGVyX3NpemUgKyBzaXplID4gbWRhdHJmLT5kYXRhX3NpemUpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG1kYXRyZi0+bWRhdF9zaXplICs9IHNpemU7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgVHJha1JlY292RGF0YSAqCi1tb292X3JlY292X2dldF90cmFrIChNb292UmVjb3ZGaWxlICogbW9vdnJmLCBndWludDMyIGlkKQotewotICBnaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBtb292cmYtPm51bV90cmFrczsgaSsrKSB7Ci0gICAgaWYgKG1vb3ZyZi0+dHJha3NfcmRbaV0udHJha19pZCA9PSBpZCkKLSAgICAgIHJldHVybiAmKG1vb3ZyZi0+dHJha3NfcmRbaV0pOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotdHJha19yZWNvdl9kYXRhX2FkZF9zYW1wbGUgKFRyYWtSZWNvdkRhdGEgKiB0cmFrLCBUcmFrQnVmZmVyRW50cnlJbmZvICogYikKLXsKLSAgdHJhay0+ZHVyYXRpb24gKz0gYi0+bnNhbXBsZXMgKiBiLT5kZWx0YTsKLSAgYXRvbV9zdGJsX2FkZF9zYW1wbGVzICgmdHJhay0+c3RibCwgYi0+bnNhbXBsZXMsIGItPmRlbHRhLCBiLT5zaXplLAotICAgICAgYi0+Y2h1bmtfb2Zmc2V0LCBiLT5zeW5jLCBiLT5wdHNfb2Zmc2V0KTsKLX0KLQotLyoKLSAqIFBhcnNlcyB0aGUgYnVmZmVyIGVudHJpZXMgaW4gdGhlIE1vb3ZSZWNvdkZpbGUgYW5kIG1hdGNoZXMgdGhlIGlucHV0cwotICogd2l0aCB0aGUgZGF0YSBpbiB0aGUgTWRhdFJlY292RmlsZS4gV2hlbmV2ZXIgYSBidWZmZXIgZW50cnkgb2YgdGhhdAotICogcmVwcmVzZW50cyAneCcgYnl0ZXMgb2YgZGF0YSwgdGhlIHNhbWUgYW1vdW50IG9mIGRhdGEgaXMgJ3ZhbGlkYXRlZCcgaW4KLSAqIHRoZSBNZGF0UmVjb3ZGaWxlIGFuZCB3aWxsIGJlIGlubHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBtb292aWUgZmlsZS4KLSAqLwotZ2Jvb2xlYW4KLW1vb3ZfcmVjb3ZfcGFyc2VfYnVmZmVycyAoTW9vdlJlY292RmlsZSAqIG1vb3ZyZiwgTWRhdFJlY292RmlsZSAqIG1kYXRyZiwKLSAgICBHRXJyb3IgKiogZXJyKQotewotICBUcmFrQnVmZmVyRW50cnlJbmZvIGVudHJ5OwotICBUcmFrUmVjb3ZEYXRhICp0cmFrOwotCi0gIC8qIHdlIGFzc3VtZSBib3RoIG1vb3ZyZiBhbmQgbWRhdHJmIGFyZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnRzIG9mIHRoZWlyCi0gICAqIGRhdGEgcmVhZGluZyAqLwotICB3aGlsZSAobW9vdl9yZWNvdl9wYXJzZV9idWZmZXJfZW50cnkgKG1vb3ZyZiwgJmVudHJ5KSkgewotICAgIC8qIGJlIHN1cmUgd2Ugc3RpbGwgaGF2ZSB0aGlzIGRhdGEgaW4gbWRhdCAqLwotICAgIHRyYWsgPSBtb292X3JlY292X2dldF90cmFrIChtb292cmYsIGVudHJ5LnRyYWNrX2lkKTsKLSAgICBpZiAodHJhayA9PSBOVUxMKSB7Ci0gICAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX1BBUlNJTkcsCi0gICAgICAgICAgIkludmFsaWQgdHJhayBpZCBmb3VuZCBpbiBidWZmZXIgZW50cnkiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgaWYgKCFtZGF0X3JlY292X2FkZF9zYW1wbGUgKG1kYXRyZiwgZW50cnkuc2l6ZSkpCi0gICAgICBicmVhazsKLSAgICB0cmFrX3JlY292X2RhdGFfYWRkX3NhbXBsZSAodHJhaywgJmVudHJ5KTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGd1aW50MzIKLXRyYWtfcmVjb3ZfZGF0YV9nZXRfdHJha19hdG9tX3NpemUgKFRyYWtSZWNvdkRhdGEgKiB0cmFrKQotewotICBBdG9tU1RCTCAqc3RibCA9ICZ0cmFrLT5zdGJsOwotICBndWludDY0IG9mZnNldDsKLQotICAvKiB3cml0ZSBvdXQgb3VyIHN0YmwgY2hpbGQgYXRvbXMgKi8KLSAgb2Zmc2V0ID0gMDsKLQotICBpZiAoIWF0b21fc3R0c19jb3B5X2RhdGEgKCZzdGJsLT5zdHRzLCBOVUxMLCBOVUxMLCAmb2Zmc2V0KSkgewotICAgIGdvdG8gZmFpbDsKLSAgfQotICBpZiAoYXRvbV9hcnJheV9nZXRfbGVuICgmc3RibC0+c3Rzcy5lbnRyaWVzKSA+IDApIHsKLSAgICBpZiAoIWF0b21fc3Rzc19jb3B5X2RhdGEgKCZzdGJsLT5zdHNzLCBOVUxMLCBOVUxMLCAmb2Zmc2V0KSkgewotICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgfQotICBpZiAoIWF0b21fc3RzY19jb3B5X2RhdGEgKCZzdGJsLT5zdHNjLCBOVUxMLCBOVUxMLCAmb2Zmc2V0KSkgewotICAgIGdvdG8gZmFpbDsKLSAgfQotICBpZiAoIWF0b21fc3Rzel9jb3B5X2RhdGEgKCZzdGJsLT5zdHN6LCBOVUxMLCBOVUxMLCAmb2Zmc2V0KSkgewotICAgIGdvdG8gZmFpbDsKLSAgfQotICBpZiAoc3RibC0+Y3R0cykgewotICAgIGlmICghYXRvbV9jdHRzX2NvcHlfZGF0YSAoc3RibC0+Y3R0cywgTlVMTCwgTlVMTCwgJm9mZnNldCkpIHsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gIH0KLSAgaWYgKCFhdG9tX3N0Y282NF9jb3B5X2RhdGEgKCZzdGJsLT5zdGNvNjQsIE5VTEwsIE5VTEwsICZvZmZzZXQpKSB7Ci0gICAgZ290byBmYWlsOwotICB9Ci0KLSAgcmV0dXJuIHRyYWstPnRyYWtfc2l6ZSArICgodHJhay0+c3RzZF9zaXplICsgb2Zmc2V0ICsgOCkgLSB0cmFrLT5zdGJsX3NpemUpOwotCi1mYWlsOgotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGd1aW50OCAqCi1tb292X3JlY292X2dldF9zdGJsX2NoaWxkcmVuX2RhdGEgKE1vb3ZSZWNvdkZpbGUgKiBtb292cmYsIFRyYWtSZWNvdkRhdGEgKiB0cmFrLAotICAgIGd1aW50NjQgKiBwX3NpemUpCi17Ci0gIEF0b21TVEJMICpzdGJsID0gJnRyYWstPnN0Ymw7Ci0gIGd1aW50OCAqYnVmZmVyOwotICBndWludDY0IHNpemU7Ci0gIGd1aW50NjQgb2Zmc2V0OwotCi0gIC8qIHdyaXRlIG91dCBvdXIgc3RibCBjaGlsZCBhdG9tcwotICAgKgotICAgKiBVc2UgMU1CIGFzIGEgc3RhcnRpbmcgc2l6ZSwgKl9jb3B5X2RhdGEgZnVuY3Rpb25zCi0gICAqIHdpbGwgZ3JvdyB0aGUgYnVmZmVyIGlmIG5lZWRlZC4KLSAgICovCi0gIHNpemUgPSAxMDI0ICogMTAyNDsKLSAgYnVmZmVyID0gZ19tYWxsb2MwIChzaXplKTsKLSAgb2Zmc2V0ID0gMDsKLQotICBpZiAoIWF0b21fc3R0c19jb3B5X2RhdGEgKCZzdGJsLT5zdHRzLCAmYnVmZmVyLCAmc2l6ZSwgJm9mZnNldCkpIHsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLSAgaWYgKGF0b21fYXJyYXlfZ2V0X2xlbiAoJnN0YmwtPnN0c3MuZW50cmllcykgPiAwKSB7Ci0gICAgaWYgKCFhdG9tX3N0c3NfY29weV9kYXRhICgmc3RibC0+c3RzcywgJmJ1ZmZlciwgJnNpemUsICZvZmZzZXQpKSB7Ci0gICAgICBnb3RvIGZhaWw7Ci0gICAgfQotICB9Ci0gIGlmICghYXRvbV9zdHNjX2NvcHlfZGF0YSAoJnN0YmwtPnN0c2MsICZidWZmZXIsICZzaXplLCAmb2Zmc2V0KSkgewotICAgIGdvdG8gZmFpbDsKLSAgfQotICBpZiAoIWF0b21fc3Rzel9jb3B5X2RhdGEgKCZzdGJsLT5zdHN6LCAmYnVmZmVyLCAmc2l6ZSwgJm9mZnNldCkpIHsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLSAgaWYgKHN0YmwtPmN0dHMpIHsKLSAgICBpZiAoIWF0b21fY3R0c19jb3B5X2RhdGEgKHN0YmwtPmN0dHMsICZidWZmZXIsICZzaXplLCAmb2Zmc2V0KSkgewotICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgfQotICBpZiAoIWF0b21fc3RjbzY0X2NvcHlfZGF0YSAoJnN0YmwtPnN0Y282NCwgJmJ1ZmZlciwgJnNpemUsICZvZmZzZXQpKSB7Ci0gICAgZ290byBmYWlsOwotICB9Ci0gICpwX3NpemUgPSBvZmZzZXQ7Ci0gIHJldHVybiBidWZmZXI7Ci0KLWZhaWw6Ci0gIGdfZnJlZSAoYnVmZmVyKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWdib29sZWFuCi1tb292X3JlY292X3dyaXRlX2ZpbGUgKE1vb3ZSZWNvdkZpbGUgKiBtb292cmYsIE1kYXRSZWNvdkZpbGUgKiBtZGF0cmYsCi0gICAgRklMRSAqIG91dGYsIEdFcnJvciAqKiBlcnIpCi17Ci0gIGd1aW50OCBhdXhkYXRhWzE2XTsKLSAgZ3VpbnQ4ICpkYXRhID0gTlVMTDsKLSAgZ3VpbnQ4ICpwcmVmaXhfZGF0YSA9IE5VTEw7Ci0gIGd1aW50OCAqbXZoZF9kYXRhID0gTlVMTDsKLSAgZ3VpbnQ4ICp0cmFrX2RhdGEgPSBOVUxMOwotICBndWludDMyIG1vb3Zfc2l6ZSA9IDA7Ci0gIGdpbnQgaTsKLSAgZ3VpbnQ2NCBzdGJsX2NoaWxkcmVuX3NpemUgPSAwOwotICBndWludDggKnN0YmxfY2hpbGRyZW4gPSBOVUxMOwotICBndWludDMyIGxvbmdlc3RfZHVyYXRpb24gPSAwOwotICBndWludDE2IHZlcnNpb247Ci0KLSAgLyogY2hlY2sgdGhlIHZlcnNpb24gKi8KLSAgaWYgKGZzZWVrIChtb292cmYtPmZpbGUsIDAsIFNFRUtfU0VUKSAhPSAwKSB7Ci0gICAgZ19zZXRfZXJyb3IgKGVyciwgQVRPTVNfUkVDT1ZfUVVBUkssIEFUT01TX1JFQ09WX0VSUl9GSUxFLAotICAgICAgICAiRmFpbGVkIHRvIHNlZWsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtb292IHJlY292ZXJ5IGZpbGUiKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLSAgaWYgKGZyZWFkIChhdXhkYXRhLCAxLCAyLCBtb292cmYtPmZpbGUpICE9IDIpIHsKLSAgICBnX3NldF9lcnJvciAoZXJyLCBBVE9NU19SRUNPVl9RVUFSSywgQVRPTVNfUkVDT1ZfRVJSX0ZJTEUsCi0gICAgICAgICJGYWlsZWQgdG8gcmVhZCB2ZXJzaW9uIGZyb20gZmlsZSIpOwotICB9Ci0KLSAgdmVyc2lvbiA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoYXV4ZGF0YSk7Ci0gIGlmICh2ZXJzaW9uICE9IEFUT01TX1JFQ09WX0ZJTEVfVkVSU0lPTikgewotICAgIGdfc2V0X2Vycm9yIChlcnIsIEFUT01TX1JFQ09WX1FVQVJLLCBBVE9NU19SRUNPVl9FUlJfVkVSU0lPTiwKLSAgICAgICAgIklucHV0IGZpbGUgdmVyc2lvbiAoJXUpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uICgldSkiLAotICAgICAgICB2ZXJzaW9uLCBBVE9NU19SRUNPVl9GSUxFX1ZFUlNJT04pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIHdyaXRlIHRoZSBmdHlwICovCi0gIHByZWZpeF9kYXRhID0gZ19tYWxsb2MgKG1vb3ZyZi0+cHJlZml4X3NpemUpOwotICBpZiAoZnJlYWQgKHByZWZpeF9kYXRhLCAxLCBtb292cmYtPnByZWZpeF9zaXplLAotICAgICAgICAgIG1vb3ZyZi0+ZmlsZSkgIT0gbW9vdnJmLT5wcmVmaXhfc2l6ZSkgewotICAgIGdfc2V0X2Vycm9yIChlcnIsIEFUT01TX1JFQ09WX1FVQVJLLCBBVE9NU19SRUNPVl9FUlJfRklMRSwKLSAgICAgICAgIkZhaWxlZCB0byByZWFkIHRoZSBmdHlwIGF0b20gZnJvbSBmaWxlIik7Ci0gICAgZ290byBmYWlsOwotICB9Ci0gIGlmIChmd3JpdGUgKHByZWZpeF9kYXRhLCAxLCBtb292cmYtPnByZWZpeF9zaXplLCBvdXRmKSAhPSBtb292cmYtPnByZWZpeF9zaXplKSB7Ci0gICAgQVRPTVNfUkVDT1ZfT1VUUFVUX1dSSVRFX0VSUk9SIChlcnIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotICBnX2ZyZWUgKHByZWZpeF9kYXRhKTsKLSAgcHJlZml4X2RhdGEgPSBOVUxMOwotCi0gIC8qIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBtb292IHNpemUgYmVmb3JlaGFuZCB0byBhZGQgdGhlIG9mZnNldCB0bwotICAgKiBjaHVuayBvZmZzZXQgZW50cmllcyAqLwotICBtb292X3NpemUgKz0gbW9vdnJmLT5tdmhkX3NpemUgKyA4OyAgIC8qIG12aGQgKyBtb292IHNpemUgKyBmb3VyY2MgKi8KLSAgZm9yIChpID0gMDsgaSA8IG1vb3ZyZi0+bnVtX3RyYWtzOyBpKyspIHsKLSAgICBUcmFrUmVjb3ZEYXRhICp0cmFrID0gJihtb292cmYtPnRyYWtzX3JkW2ldKTsKLSAgICBndWludDMyIGR1cmF0aW9uOyAgICAgICAgICAgLyogaW4gbW9vdidzIHRpbWVzY2FsZSAqLwotICAgIGd1aW50MzIgdHJha19zaXplOwotCi0gICAgLyogY29udmVydCB0cmFrIGR1cmF0aW9uIHRvIG1vb3YncyBkdXJhdGlvbiAqLwotICAgIGR1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICh0cmFrLT5kdXJhdGlvbiwgbW9vdnJmLT50aW1lc2NhbGUsCi0gICAgICAgIHRyYWstPnRpbWVzY2FsZSk7Ci0KLSAgICBpZiAoZHVyYXRpb24gPiBsb25nZXN0X2R1cmF0aW9uKQotICAgICAgbG9uZ2VzdF9kdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgIHRyYWtfc2l6ZSA9IHRyYWtfcmVjb3ZfZGF0YV9nZXRfdHJha19hdG9tX3NpemUgKHRyYWspOwotICAgIGlmICh0cmFrX3NpemUgPT0gMCkgewotICAgICAgZ19zZXRfZXJyb3IgKGVyciwgQVRPTVNfUkVDT1ZfUVVBUkssIEFUT01TX1JFQ09WX0VSUl9HRU5FUklDLAotICAgICAgICAgICJGYWlsZWQgdG8gZXN0aW1hdGUgdHJhayBhdG9tIHNpemUiKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgbW9vdl9zaXplICs9IHRyYWtfc2l6ZTsKLSAgfQotCi0gIC8qIGFkZCBjaHVua3Mgb2Zmc2V0cyAqLwotICBmb3IgKGkgPSAwOyBpIDwgbW9vdnJmLT5udW1fdHJha3M7IGkrKykgewotICAgIFRyYWtSZWNvdkRhdGEgKnRyYWsgPSAmKG1vb3ZyZi0+dHJha3NfcmRbaV0pOwotICAgIC8qIDE2IGZvciB0aGUgbWRhdCBoZWFkZXIgKi8KLSAgICBnaW50NjQgb2Zmc2V0ID0gbW9vdl9zaXplICsgZnRlbGwgKG91dGYpICsgMTY7Ci0gICAgYXRvbV9zdGNvNjRfY2h1bmtzX3NldF9vZmZzZXQgKCZ0cmFrLT5zdGJsLnN0Y282NCwgb2Zmc2V0KTsKLSAgfQotCi0gIC8qIHdyaXRlIHRoZSBtb292ICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKGF1eGRhdGEsIG1vb3Zfc2l6ZSk7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGF1eGRhdGEgKyA0LCBGT1VSQ0NfbW9vdik7Ci0gIGlmIChmd3JpdGUgKGF1eGRhdGEsIDEsIDgsIG91dGYpICE9IDgpIHsKLSAgICBBVE9NU19SRUNPVl9PVVRQVVRfV1JJVEVfRVJST1IgKGVycik7Ci0gICAgZ290byBmYWlsOwotICB9Ci0KLSAgLyogd3JpdGUgdGhlIG12aGQgKi8KLSAgbXZoZF9kYXRhID0gZ19tYWxsb2MgKG1vb3ZyZi0+bXZoZF9zaXplKTsKLSAgaWYgKGZzZWVrIChtb292cmYtPmZpbGUsIG1vb3ZyZi0+bXZoZF9wb3MsIFNFRUtfU0VUKSAhPSAwKQotICAgIGdvdG8gZmFpbDsKLSAgaWYgKGZyZWFkIChtdmhkX2RhdGEsIDEsIG1vb3ZyZi0+bXZoZF9zaXplLAotICAgICAgICAgIG1vb3ZyZi0+ZmlsZSkgIT0gbW9vdnJmLT5tdmhkX3NpemUpCi0gICAgZ290byBmYWlsOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChtdmhkX2RhdGEgKyAyMCwgbW9vdnJmLT50aW1lc2NhbGUpOwotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChtdmhkX2RhdGEgKyAyNCwgbG9uZ2VzdF9kdXJhdGlvbik7Ci0gIGlmIChmd3JpdGUgKG12aGRfZGF0YSwgMSwgbW9vdnJmLT5tdmhkX3NpemUsIG91dGYpICE9IG1vb3ZyZi0+bXZoZF9zaXplKSB7Ci0gICAgQVRPTVNfUkVDT1ZfT1VUUFVUX1dSSVRFX0VSUk9SIChlcnIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotICBnX2ZyZWUgKG12aGRfZGF0YSk7Ci0gIG12aGRfZGF0YSA9IE5VTEw7Ci0KLSAgLyogd3JpdGUgdGhlIHRyYWtzLCB0aGlzIGlzIHRoZSB0b3VnaCBwYXJ0IGJlY2F1c2Ugd2UgbmVlZCB0byB1cGRhdGU6Ci0gICAqIC0gc3RibCBhdG9tCi0gICAqIC0gc2l6ZXMgb2YgYXRvbXMgZnJvbSBzdGJsIHRvIHRyYWsKLSAgICogLSB0cmFrIGR1cmF0aW9uCi0gICAqLwotICBmb3IgKGkgPSAwOyBpIDwgbW9vdnJmLT5udW1fdHJha3M7IGkrKykgewotICAgIFRyYWtSZWNvdkRhdGEgKnRyYWsgPSAmKG1vb3ZyZi0+dHJha3NfcmRbaV0pOwotICAgIGd1aW50IHRyYWtfZGF0YV9zaXplOwotICAgIGd1aW50MzIgc3RibF9uZXdfc2l6ZTsKLSAgICBndWludDMyIG1pbmZfbmV3X3NpemU7Ci0gICAgZ3VpbnQzMiBtZGlhX25ld19zaXplOwotICAgIGd1aW50MzIgdHJha19uZXdfc2l6ZTsKLSAgICBndWludDMyIHNpemVfZGlmZjsKLSAgICBndWludDMyIGR1cmF0aW9uOyAgICAgICAgICAgLyogaW4gbW9vdidzIHRpbWVzY2FsZSAqLwotCi0gICAgLyogY29udmVydCB0cmFrIGR1cmF0aW9uIHRvIG1vb3YncyBkdXJhdGlvbiAqLwotICAgIGR1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICh0cmFrLT5kdXJhdGlvbiwgbW9vdnJmLT50aW1lc2NhbGUsCi0gICAgICAgIHRyYWstPnRpbWVzY2FsZSk7Ci0KLSAgICBzdGJsX2NoaWxkcmVuID0gbW9vdl9yZWNvdl9nZXRfc3RibF9jaGlsZHJlbl9kYXRhIChtb292cmYsIHRyYWssCi0gICAgICAgICZzdGJsX2NoaWxkcmVuX3NpemUpOwotICAgIGlmIChzdGJsX2NoaWxkcmVuID09IE5VTEwpCi0gICAgICBnb3RvIGZhaWw7Ci0KLSAgICAvKiBjYWxjIHRoZSBuZXcgc2l6ZSBvZiB0aGUgYXRvbXMgZnJvbSBzdGJsIHRvIHRyYWsgaW4gdGhlIGF0b21zIHRyZWUgKi8KLSAgICBzdGJsX25ld19zaXplID0gdHJhay0+c3RzZF9zaXplICsgc3RibF9jaGlsZHJlbl9zaXplICsgODsKLSAgICBzaXplX2RpZmYgPSBzdGJsX25ld19zaXplIC0gdHJhay0+c3RibF9zaXplOwotICAgIG1pbmZfbmV3X3NpemUgPSB0cmFrLT5taW5mX3NpemUgKyBzaXplX2RpZmY7Ci0gICAgbWRpYV9uZXdfc2l6ZSA9IHRyYWstPm1kaWFfc2l6ZSArIHNpemVfZGlmZjsKLSAgICB0cmFrX25ld19zaXplID0gdHJhay0+dHJha19zaXplICsgc2l6ZV9kaWZmOwotCi0gICAgaWYgKGZzZWVrIChtb292cmYtPmZpbGUsIHRyYWstPmZpbGVfb2Zmc2V0LCBTRUVLX1NFVCkgIT0gMCkKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB0cmFrX2RhdGFfc2l6ZSA9IHRyYWstPnBvc3Rfc3RzZF9vZmZzZXQgLSB0cmFrLT5maWxlX29mZnNldDsKLSAgICB0cmFrX2RhdGEgPSBnX21hbGxvYyAodHJha19kYXRhX3NpemUpOwotICAgIGlmIChmcmVhZCAodHJha19kYXRhLCAxLCB0cmFrX2RhdGFfc2l6ZSwgbW9vdnJmLT5maWxlKSAhPSB0cmFrX2RhdGFfc2l6ZSkgewotICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgICAvKiB1cGRhdGUgdGhlIHNpemUgdmFsdWVzIGluIHRob3NlIHJlYWQgYXRvbXMgYmVmb3JlIHdyaXRpbmcgKi8KLSAgICBHU1RfV1JJVEVfVUlOVDMyX0JFICh0cmFrX2RhdGEsIHRyYWtfbmV3X3NpemUpOwotICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKHRyYWtfZGF0YSArICh0cmFrLT5tZGlhX2ZpbGVfb2Zmc2V0IC0KLSAgICAgICAgICAgIHRyYWstPmZpbGVfb2Zmc2V0KSwgbWRpYV9uZXdfc2l6ZSk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAodHJha19kYXRhICsgKHRyYWstPm1pbmZfZmlsZV9vZmZzZXQgLQotICAgICAgICAgICAgdHJhay0+ZmlsZV9vZmZzZXQpLCBtaW5mX25ld19zaXplKTsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0JFICh0cmFrX2RhdGEgKyAodHJhay0+c3RibF9maWxlX29mZnNldCAtCi0gICAgICAgICAgICB0cmFrLT5maWxlX29mZnNldCksIHN0YmxfbmV3X3NpemUpOwotCi0gICAgLyogdXBkYXRlIGR1cmF0aW9uIHZhbHVlcyBpbiB0a2hkIGFuZCBtZGhkICovCi0gICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAodHJha19kYXRhICsgKHRyYWstPnRraGRfZmlsZV9vZmZzZXQgLQotICAgICAgICAgICAgdHJhay0+ZmlsZV9vZmZzZXQpICsgMjgsIGR1cmF0aW9uKTsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0JFICh0cmFrX2RhdGEgKyAodHJhay0+bWRoZF9maWxlX29mZnNldCAtCi0gICAgICAgICAgICB0cmFrLT5maWxlX29mZnNldCkgKyAyNCwgdHJhay0+ZHVyYXRpb24pOwotCi0gICAgaWYgKGZ3cml0ZSAodHJha19kYXRhLCAxLCB0cmFrX2RhdGFfc2l6ZSwgb3V0ZikgIT0gdHJha19kYXRhX3NpemUpIHsKLSAgICAgIEFUT01TX1JFQ09WX09VVFBVVF9XUklURV9FUlJPUiAoZXJyKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgaWYgKGZ3cml0ZSAoc3RibF9jaGlsZHJlbiwgMSwgc3RibF9jaGlsZHJlbl9zaXplLCBvdXRmKSAhPQotICAgICAgICBzdGJsX2NoaWxkcmVuX3NpemUpIHsKLSAgICAgIEFUT01TX1JFQ09WX09VVFBVVF9XUklURV9FUlJPUiAoZXJyKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgZ19mcmVlICh0cmFrX2RhdGEpOwotICAgIHRyYWtfZGF0YSA9IE5VTEw7Ci0gICAgZ19mcmVlIChzdGJsX2NoaWxkcmVuKTsKLSAgICBzdGJsX2NoaWxkcmVuID0gTlVMTDsKLSAgfQotCi0gIC8qIHdyaXRlIHRoZSBtZGF0ICovCi0gIC8qIHdyaXRlIHRoZSBoZWFkZXIgZmlyc3QgKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoYXV4ZGF0YSwgMSk7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGF1eGRhdGEgKyA0LCBGT1VSQ0NfbWRhdCk7Ci0gIEdTVF9XUklURV9VSU5UNjRfQkUgKGF1eGRhdGEgKyA4LCBtZGF0cmYtPm1kYXRfc2l6ZSk7Ci0gIGlmIChmd3JpdGUgKGF1eGRhdGEsIDEsIDE2LCBvdXRmKSAhPSAxNikgewotICAgIEFUT01TX1JFQ09WX09VVFBVVF9XUklURV9FUlJPUiAoZXJyKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICAvKiBub3cgcmVhZCB0aGUgbWRhdCBkYXRhIGFuZCBvdXRwdXQgdG8gdGhlIGZpbGUgKi8KLSAgaWYgKGZzZWVrIChtZGF0cmYtPmZpbGUsIG1kYXRyZi0+bWRhdF9zdGFydCArCi0gICAgICAgICAgKG1kYXRyZi0+cmF3ZmlsZSA/IDAgOiBtZGF0cmYtPm1kYXRfaGVhZGVyX3NpemUpLCBTRUVLX1NFVCkgIT0gMCkKLSAgICBnb3RvIGZhaWw7Ci0KLSAgZGF0YSA9IGdfbWFsbG9jICg0MDk2KTsKLSAgd2hpbGUgKCFmZW9mIChtZGF0cmYtPmZpbGUpKSB7Ci0gICAgZ2ludCByZWFkLCB3cml0ZTsKLQotICAgIHJlYWQgPSBmcmVhZCAoZGF0YSwgMSwgNDA5NiwgbWRhdHJmLT5maWxlKTsKLSAgICB3cml0ZSA9IGZ3cml0ZSAoZGF0YSwgMSwgcmVhZCwgb3V0Zik7Ci0KLSAgICBpZiAod3JpdGUgIT0gcmVhZCkgewotICAgICAgZ19zZXRfZXJyb3IgKGVyciwgQVRPTVNfUkVDT1ZfUVVBUkssIEFUT01TX1JFQ09WX0VSUl9GSUxFLAotICAgICAgICAgICJGYWlsZWQgdG8gY29weSBkYXRhIHRvIG91dHB1dCBmaWxlOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgICBnb3RvIGZhaWw7Ci0gICAgfQotICB9Ci0gIGdfZnJlZSAoZGF0YSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWZhaWw6Ci0gIGdfZnJlZSAoc3RibF9jaGlsZHJlbik7Ci0gIGdfZnJlZSAobXZoZF9kYXRhKTsKLSAgZ19mcmVlIChwcmVmaXhfZGF0YSk7Ci0gIGdfZnJlZSAodHJha19kYXRhKTsKLSAgZ19mcmVlIChkYXRhKTsKLSAgcmV0dXJuIEZBTFNFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9hdG9tc3JlY292ZXJ5LmggYi9nc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4ZDQyOC4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2F0b21zcmVjb3ZlcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKiBRdWlja3RpbWUgbXV4ZXIgcGx1Z2luIGZvciBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgX19BVE9NU19SRUNPVkVSWV9IX18KLSNkZWZpbmUgX19BVE9NU19SRUNPVkVSWV9IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImF0b21zLmgiCi0KLS8qIFZlcnNpb24gdG8gYmUgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHdlIGRlY2lkZQotICogdG8gY2hhbmdlIHRoZSBmaWxlIGxheW91dCAqLwotI2RlZmluZSBBVE9NU19SRUNPVl9GSUxFX1ZFUlNJT04gICAgICAgICAgMQotCi0jZGVmaW5lIEFUT01TX1JFQ09WX1FVQVJLIChnX3F1YXJrX2Zyb21fc3RyaW5nICgicXRtdXgtYXRvbXMtcmVjb3ZlcnkiKSkKLQotLyogZ2Vycm9yIGVycm9yIGNvZGVzICovCi0jZGVmaW5lIEFUT01TX1JFQ09WX0VSUl9HRU5FUklDICAgICAgICAgICAxCi0jZGVmaW5lIEFUT01TX1JFQ09WX0VSUl9GSUxFICAgICAgICAgICAgICAyCi0jZGVmaW5lIEFUT01TX1JFQ09WX0VSUl9QQVJTSU5HICAgICAgICAgICAzCi0jZGVmaW5lIEFUT01TX1JFQ09WX0VSUl9WRVJTSU9OICAgICAgICAgICA0Ci0KLS8qIHRoaXMgc3RydWN0IHJlcHJlc2VudHMgZWFjaCBidWZmZXIgaW4gYSBtb292IGZpbGUsIGNvbnRhaW5pbmcgdGhlIGluZm8KLSAqIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBzdHNkIGNoaWxkcmVuIGF0b21zCi0gKiBGaWVsZHMgc2hvdWxkIGJlIHdyaXRlbiBpbiBCRSBvcmRlciwgYW5kIGJvb2xlYW5zIHNob3VsZCBiZSB3cml0ZW4gYXMKLSAqIDFieXRlIHdpdGggMCBmb3IgZmFsc2UsIGFueXRoaW5nIG90aGVyd2lzZSAqLwotI2RlZmluZSBUUkFLX0JVRkZFUl9FTlRSWV9JTkZPX1NJWkUgMzQKLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50MzIgICB0cmFja19pZDsKLSAgZ3VpbnQzMiAgIG5zYW1wbGVzOwotICBndWludDMyICAgZGVsdGE7Ci0gIGd1aW50MzIgICBzaXplOwotICBndWludDY0ICAgY2h1bmtfb2Zmc2V0OwotICBndWludDY0ICAgcHRzX29mZnNldDsKLSAgZ2Jvb2xlYW4gIHN5bmM7Ci0gIGdib29sZWFuICBkb19wdHM7Ci19IFRyYWtCdWZmZXJFbnRyeUluZm87Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50MzIgdHJha19pZDsKLSAgZ3VpbnQzMiBkdXJhdGlvbjsgIC8qIGR1cmF0aW9uIGluIHRyYWsgdGltZXNjYWxlICovCi0gIGd1aW50MzIgdGltZXNjYWxlOyAvKiB0cmFrJ3MgdGltZXNjYWxlICovCi0KLSAgZ3VpbnQ2NCBmaWxlX29mZnNldDsKLQotICAvKiBuZWVkIGZvciBsYXRlciB1cGRhdGluZyBkdXJhdGlvbiAqLwotICBndWludDY0IHRraGRfZmlsZV9vZmZzZXQ7Ci0gIGd1aW50NjQgbWRoZF9maWxlX29mZnNldDsKLQotICAvKiBuZWVkIHRoZXNlIG9mZnNldHMgdG8gdXBkYXRlIHNpemUgKi8KLSAgZ3VpbnQzMiB0cmFrX3NpemU7Ci0gIGd1aW50NjQgbWRpYV9maWxlX29mZnNldDsKLSAgZ3VpbnQzMiBtZGlhX3NpemU7Ci0gIGd1aW50NjQgbWluZl9maWxlX29mZnNldDsKLSAgZ3VpbnQzMiBtaW5mX3NpemU7Ci0gIGd1aW50NjQgc3RibF9maWxlX29mZnNldDsKLSAgZ3VpbnQzMiBzdGJsX3NpemU7Ci0KLSAgZ3VpbnQ2NCBwb3N0X3N0c2Rfb2Zmc2V0OwotICBndWludDMyIHN0c2Rfc2l6ZTsKLQotICAvKiBmb3Igc3RvcmluZyB0aGUgc2FtcGxlcyBpbmZvICovCi0gIEF0b21TVEJMIHN0Ymw7Ci19IFRyYWtSZWNvdkRhdGE7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEZJTEUgKiBmaWxlOwotICBnYm9vbGVhbiByYXdmaWxlOwotCi0gIC8qIHJlc3VsdHMgZnJvbSBwYXJzaW5nIHRoZSBpbnB1dCBmaWxlICovCi0gIGd1aW50NjQgICBkYXRhX3NpemU7Ci0gIGd1aW50MzIgICBtZGF0X2hlYWRlcl9zaXplOwotICBndWludCAgICAgbWRhdF9zdGFydDsKLQotICBndWludDY0ICAgbWRhdF9zaXplOwotfSBNZGF0UmVjb3ZGaWxlOwotCi10eXBlZGVmIHN0cnVjdAotewotICBGSUxFICogZmlsZTsKLSAgZ3VpbnQzMiB0aW1lc2NhbGU7Ci0KLSAgZ3VpbnQzMiBtdmhkX3BvczsKLSAgZ3VpbnQzMiBtdmhkX3NpemU7Ci0gIGd1aW50MzIgcHJlZml4X3NpemU7IC8qIHByZWZpeCArIGZ0eXAgdG90YWwgc2l6ZSAqLwotCi0gIGdpbnQgbnVtX3RyYWtzOwotICBUcmFrUmVjb3ZEYXRhICp0cmFrc19yZDsKLX0gTW9vdlJlY292RmlsZTsKLQotZ2Jvb2xlYW4gYXRvbXNfcmVjb3Zfd3JpdGVfdHJha19pbmZvICAgICAgKEZJTEUgKiBmLCBBdG9tVFJBSyAqIHRyYWspOwotZ2Jvb2xlYW4gYXRvbXNfcmVjb3Zfd3JpdGVfaGVhZGVycyAgICAgICAgKEZJTEUgKiBmLCBBdG9tRlRZUCAqIGZ0eXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QnVmZmVyICogcHJlZml4LCBBdG9tTU9PViAqIG1vb3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiB0aW1lc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiB0cmFrc19udW1iZXIpOwotZ2Jvb2xlYW4gYXRvbXNfcmVjb3Zfd3JpdGVfdHJha19zYW1wbGVzICAgKEZJTEUgKiBmLCBBdG9tVFJBSyAqIHRyYWssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiBuc2FtcGxlcywgZ3VpbnQzMiBkZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHNpemUsIGd1aW50NjQgY2h1bmtfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHN5bmMsIGdib29sZWFuIGRvX3B0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgcHRzX29mZnNldCk7Ci0KLU1kYXRSZWNvdkZpbGUgKiBtZGF0X3JlY292X2ZpbGVfY3JlYXRlICAgKEZJTEUgKiBmaWxlLCBnYm9vbGVhbiBkYXRhZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKiBlcnIpOwotdm9pZCAgICAgICAgICAgIG1kYXRfcmVjb3ZfZmlsZV9mcmVlICAgICAoTWRhdFJlY292RmlsZSAqIG1yZik7Ci1Nb292UmVjb3ZGaWxlICogbW9vdl9yZWNvdl9maWxlX2NyZWF0ZSAgIChGSUxFICogZmlsZSwgR0Vycm9yICoqIGVycik7Ci12b2lkICAgICAgICAgICAgbW9vdl9yZWNvdl9maWxlX2ZyZWUgICAgIChNb292UmVjb3ZGaWxlICogbW9vdnJmKTsKLWdib29sZWFuICAgICAgICBtb292X3JlY292X3BhcnNlX2J1ZmZlcnMgKE1vb3ZSZWNvdkZpbGUgKiBtb292cmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZGF0UmVjb3ZGaWxlICogbWRhdHJmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqIGVycik7Ci1nYm9vbGVhbiAgICAgICAgbW9vdl9yZWNvdl93cml0ZV9maWxlICAgIChNb292UmVjb3ZGaWxlICogbW9vdnJmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWRhdFJlY292RmlsZSAqIG1kYXRyZiwgRklMRSAqIG91dGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiogZXJyKTsKLQotI2VuZGlmIC8qIF9fQVRPTVNfUkVDT1ZFUllfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L2Rlc2NyaXB0b3JzLmMgYi9nc3QvaXNvbXA0L2Rlc2NyaXB0b3JzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxM2ZmZGMuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9kZXNjcmlwdG9ycy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDU3ICswLDAgQEAKLS8qIFF1aWNrdGltZSBtdXhlciBwbHVnaW4gZm9yIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgImRlc2NyaXB0b3JzLmgiCi0KLS8qCi0gKiBTb21lIG1wNCBzdHJ1Y3R1cmVzIChkZXNjcmlwdG9ycykgdXNlIGEgY29kaW5nIHNjaGVtZSBmb3IKLSAqIHJlcHJlc2VudGluZyBpdHMgc2l6ZS4KLSAqIEl0IGlzIGdyb3VwZWQgaW4gYnl0ZXMuIFRoZSAxc3QgYml0IHNldCB0byAxIG1lYW5zIHdlIG5lZWQgYW5vdGhlciBieXRlLAotICogMCBvdGhlcndpc2UuIFRoZSByZW1haW5pbmcgNyBiaXRzIGFyZSB0aGUgdXNlZnVsIHZhbHVlcy4KLSAqCi0gKiBUaGUgbmV4dCBzZXQgb2YgZnVuY3Rpb25zIGhhbmRsZSB0aG9zZSB2YWx1ZXMKLSAqLwotCi0vKgotICogR2V0cyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGFuZCBwYWNrcyBpdCBpbnRvIGEgJ2V4cGFuZGFibGUgc2l6ZScgZm9ybWF0Ci0gKiAoYXMgdXNlZCBieSBtcDQgZGVzY3JpcHRvcnMpCi0gKiBAc2l6ZTogdGhlIGludGVnZXIgdG8gYmUgcGFyc2VkCi0gKiBAcHRyOiB0aGUgYXJyYXkgdG8gcGxhY2UgdGhlIHJlc3VsdAotICogQGFycmF5X3NpemU6IHRoZSBzaXplIG9mIHB0ciBhcnJheQotICovCi1zdGF0aWMgdm9pZAotZXhwYW5kYWJsZV9zaXplX3BhcnNlIChndWludDY0IHNpemUsIGd1aW50OCAqIHB0ciwgZ3VpbnQzMiBhcnJheV9zaXplKQotewotICBpbnQgaW5kZXggPSAwOwotCi0gIG1lbXNldCAocHRyLCAwLCBzaXplb2YgKGFycmF5X3NpemUpKTsKLSAgd2hpbGUgKHNpemUgPiAwICYmIGluZGV4IDwgYXJyYXlfc2l6ZSkgewotICAgIHB0cltpbmRleCsrXSA9IChzaXplID4gMHg3RiA/IDB4ODAgOiAweDApIHwgKHNpemUgJiAweDdGKTsKLSAgICBzaXplID0gc2l6ZSA+PiA3OwotICB9Ci19Ci0KLS8qCi0gKiBHZXRzIGhvdyBtYW55IHBvc2l0aW9ucyBpbiBhbiBhcnJheSBob2xkaW5nIGFuICdleHBhbmRhYmxlIHNpemUnCi0gKiBhcmUgcmVhbGx5IHVzZWQKLSAqCi0gKiBAcHRyOiB0aGUgYXJyYXkgd2l0aCB0aGUgJ2V4cGFuZGFibGUgc2l6ZScKLSAqIEBhcnJheV9zaXplOiB0aGUgc2l6ZSBvZiBwdHIgYXJyYXkKLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHJlYWxseSB1c2VkIHBvc2l0aW9ucwotICovCi1zdGF0aWMgZ3VpbnQ2NAotZXhwYW5kYWJsZV9zaXplX2dldF9sZW5ndGggKGd1aW50OCAqIHB0ciwgZ3VpbnQzMiBhcnJheV9zaXplKQotewotICBnYm9vbGVhbiBuZXh0ID0gVFJVRTsKLSAgZ3VpbnQzMiBpbmRleCA9IDA7Ci0KLSAgd2hpbGUgKG5leHQgJiYgaW5kZXggPCBhcnJheV9zaXplKSB7Ci0gICAgbmV4dCA9IChwdHJbaW5kZXhdICYgMHg4MCk7Ci0gICAgaW5kZXgrKzsKLSAgfQotICByZXR1cm4gaW5kZXg7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplcnMgYmVsb3cKLSAqLwotCi1zdGF0aWMgdm9pZAotZGVzY19iYXNlX2Rlc2NyaXB0b3JfaW5pdCAoQmFzZURlc2NyaXB0b3IgKiBiZCwgZ3VpbnQ4IHRhZywgZ3VpbnQzMiBzaXplKQotewotICBiZC0+dGFnID0gdGFnOwotICBleHBhbmRhYmxlX3NpemVfcGFyc2UgKHNpemUsIGJkLT5zaXplLCA0KTsKLX0KLQotc3RhdGljIHZvaWQKLWRlc2NfZGVjX3NwZWNpZmljX2luZm9faW5pdCAoRGVjb2RlclNwZWNpZmljSW5mb0Rlc2NyaXB0b3IgKiBkc2lkKQotewotICBkZXNjX2Jhc2VfZGVzY3JpcHRvcl9pbml0ICgmZHNpZC0+YmFzZSwgREVDT0RFUl9TUEVDSUZJQ19JTkZPX1RBRywgMCk7Ci0gIGRzaWQtPmxlbmd0aCA9IDA7Ci0gIGRzaWQtPmRhdGEgPSBOVUxMOwotfQotCi1EZWNvZGVyU3BlY2lmaWNJbmZvRGVzY3JpcHRvciAqCi1kZXNjX2RlY19zcGVjaWZpY19pbmZvX25ldyAodm9pZCkKLXsKLSAgRGVjb2RlclNwZWNpZmljSW5mb0Rlc2NyaXB0b3IgKmRlc2MgPQotICAgICAgZ19uZXcwIChEZWNvZGVyU3BlY2lmaWNJbmZvRGVzY3JpcHRvciwgMSk7Ci0gIGRlc2NfZGVjX3NwZWNpZmljX2luZm9faW5pdCAoZGVzYyk7Ci0gIHJldHVybiBkZXNjOwotfQotCi1zdGF0aWMgdm9pZAotZGVzY19kZWNfY29uZl9kZXNjX2luaXQgKERlY29kZXJDb25maWdEZXNjcmlwdG9yICogZGNkKQotewotICBkZXNjX2Jhc2VfZGVzY3JpcHRvcl9pbml0ICgmZGNkLT5iYXNlLCBERUNPREVSX0NPTkZJR19ERVNDX1RBRywgMCk7Ci0gIGRjZC0+ZGVjX3NwZWNpZmljX2luZm8gPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZGVzY19zbF9jb25mX2Rlc2NfaW5pdCAoU0xDb25maWdEZXNjcmlwdG9yICogc2wpCi17Ci0gIGRlc2NfYmFzZV9kZXNjcmlwdG9yX2luaXQgKCZzbC0+YmFzZSwgU0xfQ09ORklHX0RFU0NfVEFHLCAwKTsKLSAgc2wtPnByZWRlZmluZWQgPSAweDI7Ci19Ci0KLXZvaWQKLWRlc2NfZXNfaW5pdCAoRVNEZXNjcmlwdG9yICogZXMpCi17Ci0gIGRlc2NfYmFzZV9kZXNjcmlwdG9yX2luaXQgKCZlcy0+YmFzZSwgRVNfREVTQ1JJUFRPUl9UQUcsIDApOwotCi0gIGVzLT5pZCA9IDA7Ci0gIGVzLT5mbGFncyA9IDA7Ci0gIGVzLT5kZXBlbmRzX29uX2VzX2lkID0gMDsKLSAgZXMtPm9jcl9lc19pZCA9IDA7Ci0gIGVzLT51cmxfbGVuZ3RoID0gMDsKLSAgZXMtPnVybF9zdHJpbmcgPSBOVUxMOwotCi0gIGRlc2NfZGVjX2NvbmZfZGVzY19pbml0ICgmZXMtPmRlY19jb25mX2Rlc2MpOwotICBkZXNjX3NsX2NvbmZfZGVzY19pbml0ICgmZXMtPnNsX2NvbmZfZGVzYyk7Ci19Ci0KLUVTRGVzY3JpcHRvciAqCi1kZXNjX2VzX2Rlc2NyaXB0b3JfbmV3ICh2b2lkKQotewotICBFU0Rlc2NyaXB0b3IgKmVzID0gZ19uZXcwIChFU0Rlc2NyaXB0b3IsIDEpOwotCi0gIGRlc2NfZXNfaW5pdCAoZXMpOwotICByZXR1cm4gZXM7Ci19Ci0KLS8qCi0gKiBEZWluaXRpYWxpemVycy9EZXN0cnVjdG9ycyBiZWxvdwotICovCi0KLXN0YXRpYyB2b2lkCi1kZXNjX2Jhc2VfZGVzY3JpcHRvcl9jbGVhciAoQmFzZURlc2NyaXB0b3IgKiBiYXNlKQotewotfQotCi12b2lkCi1kZXNjX2RlY19zcGVjaWZpY19pbmZvX2ZyZWUgKERlY29kZXJTcGVjaWZpY0luZm9EZXNjcmlwdG9yICogZHNpZCkKLXsKLSAgZGVzY19iYXNlX2Rlc2NyaXB0b3JfY2xlYXIgKCZkc2lkLT5iYXNlKTsKLSAgaWYgKGRzaWQtPmRhdGEpIHsKLSAgICBnX2ZyZWUgKGRzaWQtPmRhdGEpOwotICAgIGRzaWQtPmRhdGEgPSBOVUxMOwotICB9Ci0gIGdfZnJlZSAoZHNpZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZXNjX2RlY19jb25mX2Rlc2NfY2xlYXIgKERlY29kZXJDb25maWdEZXNjcmlwdG9yICogZGVjKQotewotICBkZXNjX2Jhc2VfZGVzY3JpcHRvcl9jbGVhciAoJmRlYy0+YmFzZSk7Ci0gIGlmIChkZWMtPmRlY19zcGVjaWZpY19pbmZvKSB7Ci0gICAgZGVzY19kZWNfc3BlY2lmaWNfaW5mb19mcmVlIChkZWMtPmRlY19zcGVjaWZpY19pbmZvKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZGVzY19zbF9jb25maWdfZGVzY3JpcHRvcl9jbGVhciAoU0xDb25maWdEZXNjcmlwdG9yICogc2wpCi17Ci0gIGRlc2NfYmFzZV9kZXNjcmlwdG9yX2NsZWFyICgmc2wtPmJhc2UpOwotfQotCi12b2lkCi1kZXNjX2VzX2Rlc2NyaXB0b3JfY2xlYXIgKEVTRGVzY3JpcHRvciAqIGVzKQotewotICBkZXNjX2Jhc2VfZGVzY3JpcHRvcl9jbGVhciAoJmVzLT5iYXNlKTsKLSAgaWYgKGVzLT51cmxfc3RyaW5nKSB7Ci0gICAgZ19mcmVlIChlcy0+dXJsX3N0cmluZyk7Ci0gICAgZXMtPnVybF9zdHJpbmcgPSBOVUxMOwotICB9Ci0gIGRlc2NfZGVjX2NvbmZfZGVzY19jbGVhciAoJmVzLT5kZWNfY29uZl9kZXNjKTsKLSAgZGVzY19zbF9jb25maWdfZGVzY3JpcHRvcl9jbGVhciAoJmVzLT5zbF9jb25mX2Rlc2MpOwotfQotCi0vKgotICogU2l6ZSBoYW5kbGluZyBmdW5jdGlvbnMgYmVsb3cKLSAqLwotCi12b2lkCi1kZXNjX2RlY19zcGVjaWZpY19pbmZvX2FsbG9jX2RhdGEgKERlY29kZXJTcGVjaWZpY0luZm9EZXNjcmlwdG9yICogZHNpZCwKLSAgICBndWludDMyIHNpemUpCi17Ci0gIGlmIChkc2lkLT5kYXRhKSB7Ci0gICAgZ19mcmVlIChkc2lkLT5kYXRhKTsKLSAgfQotICBkc2lkLT5kYXRhID0gZ19uZXcwIChndWludDgsIHNpemUpOwotICBkc2lkLT5sZW5ndGggPSBzaXplOwotfQotCi1zdGF0aWMgdm9pZAotZGVzY19iYXNlX2Rlc2NyaXB0b3Jfc2V0X3NpemUgKEJhc2VEZXNjcmlwdG9yICogYmQsIGd1aW50MzIgc2l6ZSkKLXsKLSAgZXhwYW5kYWJsZV9zaXplX3BhcnNlIChzaXplLCBiZC0+c2l6ZSwgNCk7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1kZXNjX2Jhc2VfZGVzY3JpcHRvcl9nZXRfc2l6ZSAoQmFzZURlc2NyaXB0b3IgKiBiZCkKLXsKLSAgZ3VpbnQ2NCBzaXplID0gMDsKLQotICBzaXplICs9IHNpemVvZiAoZ3VpbnQ4KTsKLSAgc2l6ZSArPSBleHBhbmRhYmxlX3NpemVfZ2V0X2xlbmd0aCAoYmQtPnNpemUsIDQpICogc2l6ZW9mIChndWludDgpOwotICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGd1aW50NjQKLWRlc2Nfc2xfY29uZmlnX2Rlc2NyaXB0b3JfZ2V0X3NpemUgKFNMQ29uZmlnRGVzY3JpcHRvciAqIHNsX2Rlc2MpCi17Ci0gIGd1aW50NjQgc2l6ZSA9IDA7Ci0gIGd1aW50NjQgZXh0cmFfc2l6ZSA9IDA7Ci0KLSAgc2l6ZSArPSBkZXNjX2Jhc2VfZGVzY3JpcHRvcl9nZXRfc2l6ZSAoJnNsX2Rlc2MtPmJhc2UpOwotICAvKiBwcmVkZWZpbmVkICovCi0gIGV4dHJhX3NpemUgKz0gc2l6ZW9mIChndWludDgpOwotCi0gIGRlc2NfYmFzZV9kZXNjcmlwdG9yX3NldF9zaXplICgmc2xfZGVzYy0+YmFzZSwgZXh0cmFfc2l6ZSk7Ci0KLSAgcmV0dXJuIHNpemUgKyBleHRyYV9zaXplOwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZGVzY19kZWNfc3BlY2lmaWNfaW5mb19nZXRfc2l6ZSAoRGVjb2RlclNwZWNpZmljSW5mb0Rlc2NyaXB0b3IgKiBkc2lkKQotewotICBndWludDY0IHNpemUgPSAwOwotICBndWludDY0IGV4dHJhX3NpemUgPSAwOwotCi0gIHNpemUgKz0gZGVzY19iYXNlX2Rlc2NyaXB0b3JfZ2V0X3NpemUgKCZkc2lkLT5iYXNlKTsKLSAgZXh0cmFfc2l6ZSArPSBzaXplb2YgKGd1aW50OCkgKiBkc2lkLT5sZW5ndGg7Ci0gIGRlc2NfYmFzZV9kZXNjcmlwdG9yX3NldF9zaXplICgmZHNpZC0+YmFzZSwgZXh0cmFfc2l6ZSk7Ci0gIHJldHVybiBzaXplICsgZXh0cmFfc2l6ZTsKLX0KLQotc3RhdGljIGd1aW50NjQKLWRlc2NfZGVjX2NvbmZpZ19kZXNjcmlwdG9yX2dldF9zaXplIChEZWNvZGVyQ29uZmlnRGVzY3JpcHRvciAqIGRlY19kZXNjKQotewotICBndWludDY0IHNpemUgPSAwOwotICBndWludDY0IGV4dHJhX3NpemUgPSAwOwotCi0gIHNpemUgKz0gZGVzY19iYXNlX2Rlc2NyaXB0b3JfZ2V0X3NpemUgKCZkZWNfZGVzYy0+YmFzZSk7Ci0gIC8qIG9iamVjdCB0eXBlICovCi0gIGV4dHJhX3NpemUgKz0gc2l6ZW9mIChndWludDgpOwotICAvKiBzdHJlYW0gdHlwZSAqLwotICBleHRyYV9zaXplICs9IHNpemVvZiAoZ3VpbnQ4KTsKLSAgLyogYnVmZmVyIHNpemUgKi8KLSAgZXh0cmFfc2l6ZSArPSBzaXplb2YgKGd1aW50OCkgKiAzOwotICAvKiBtYXggYml0cmF0ZSAqLwotICBleHRyYV9zaXplICs9IHNpemVvZiAoZ3VpbnQzMik7Ci0gIC8qIGF2ZyBiaXRyYXRlICovCi0gIGV4dHJhX3NpemUgKz0gc2l6ZW9mIChndWludDMyKTsKLSAgaWYgKGRlY19kZXNjLT5kZWNfc3BlY2lmaWNfaW5mbykgewotICAgIGV4dHJhX3NpemUgKz0gZGVzY19kZWNfc3BlY2lmaWNfaW5mb19nZXRfc2l6ZSAoZGVjX2Rlc2MtPmRlY19zcGVjaWZpY19pbmZvKTsKLSAgfQotCi0gIGRlc2NfYmFzZV9kZXNjcmlwdG9yX3NldF9zaXplICgmZGVjX2Rlc2MtPmJhc2UsIGV4dHJhX3NpemUpOwotICByZXR1cm4gc2l6ZSArIGV4dHJhX3NpemU7Ci19Ci0KLXN0YXRpYyBndWludDY0Ci1kZXNjX2VzX2Rlc2NyaXB0b3JfZ2V0X3NpemUgKEVTRGVzY3JpcHRvciAqIGVzKQotewotICBndWludDY0IHNpemUgPSAwOwotICBndWludDY0IGV4dHJhX3NpemUgPSAwOwotCi0gIHNpemUgKz0gZGVzY19iYXNlX2Rlc2NyaXB0b3JfZ2V0X3NpemUgKCZlcy0+YmFzZSk7Ci0gIC8qIGlkICovCi0gIGV4dHJhX3NpemUgKz0gc2l6ZW9mIChndWludDE2KTsKLSAgLyogZmxhZ3MgKi8KLSAgZXh0cmFfc2l6ZSArPSBzaXplb2YgKGd1aW50OCk7Ci0gIC8qIGRlcGVuZHNfb25fZXNfaWQgKi8KLSAgaWYgKGVzLT5mbGFncyAmIDB4ODApIHsKLSAgICBleHRyYV9zaXplICs9IHNpemVvZiAoZ3VpbnQxNik7Ci0gIH0KLSAgaWYgKGVzLT5mbGFncyAmIDB4NDApIHsKLSAgICAvKiB1cmxfbGVuZ3RoICovCi0gICAgZXh0cmFfc2l6ZSArPSBzaXplb2YgKGd1aW50OCk7Ci0gICAgLyogdXJsICovCi0gICAgZXh0cmFfc2l6ZSArPSBzaXplb2YgKGdjaGFyKSAqIGVzLT51cmxfbGVuZ3RoOwotICB9Ci0gIGlmIChlcy0+ZmxhZ3MgJiAweDIwKSB7Ci0gICAgLyogb2NyX2VzX2lkICovCi0gICAgZXh0cmFfc2l6ZSArPSBzaXplb2YgKGd1aW50MTYpOwotICB9Ci0KLSAgZXh0cmFfc2l6ZSArPSBkZXNjX2RlY19jb25maWdfZGVzY3JpcHRvcl9nZXRfc2l6ZSAoJmVzLT5kZWNfY29uZl9kZXNjKTsKLSAgZXh0cmFfc2l6ZSArPSBkZXNjX3NsX2NvbmZpZ19kZXNjcmlwdG9yX2dldF9zaXplICgmZXMtPnNsX2NvbmZfZGVzYyk7Ci0KLSAgZGVzY19iYXNlX2Rlc2NyaXB0b3Jfc2V0X3NpemUgKCZlcy0+YmFzZSwgZXh0cmFfc2l6ZSk7Ci0KLSAgcmV0dXJuIHNpemUgKyBleHRyYV9zaXplOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlc2NfZXNfZGVzY3JpcHRvcl9jaGVja19zdHJlYW1fZGVwZW5kZW5jeSAoRVNEZXNjcmlwdG9yICogZXMpCi17Ci0gIHJldHVybiBlcy0+ZmxhZ3MgJiAweDgwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlc2NfZXNfZGVzY3JpcHRvcl9jaGVja191cmxfZmxhZyAoRVNEZXNjcmlwdG9yICogZXMpCi17Ci0gIHJldHVybiBlcy0+ZmxhZ3MgJiAweDQwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlc2NfZXNfZGVzY3JpcHRvcl9jaGVja19vY3IgKEVTRGVzY3JpcHRvciAqIGVzKQotewotICByZXR1cm4gZXMtPmZsYWdzICYgMHgyMDsKLX0KLQotLyogQ29weS9TZXJpYWxpemF0aW9ucyBGdW5jdGlvbnMgYmVsb3cgKi8KLQotc3RhdGljIGd1aW50NjQKLWRlc2NfYmFzZV9kZXNjcmlwdG9yX2NvcHlfZGF0YSAoQmFzZURlc2NyaXB0b3IgKiBkZXNjLCBndWludDggKiogYnVmZmVyLAotICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgcHJvcF9jb3B5X3VpbnQ4IChkZXNjLT50YWcsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQ4X2FycmF5IChkZXNjLT5zaXplLCBleHBhbmRhYmxlX3NpemVfZ2V0X2xlbmd0aCAoZGVzYy0+c2l6ZSwgNCksCi0gICAgICBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHJldHVybiBvcmlnaW5hbF9vZmZzZXQgLSAqb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZGVzY19zbF9jb25maWdfZGVzY3JpcHRvcl9jb3B5X2RhdGEgKFNMQ29uZmlnRGVzY3JpcHRvciAqIGRlc2MsCi0gICAgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLQotICBpZiAoIWRlc2NfYmFzZV9kZXNjcmlwdG9yX2NvcHlfZGF0YSAoJmRlc2MtPmJhc2UsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIC8qIHByZWRlZmluZWQgYXR0cmlidXRlICovCi0gIHByb3BfY29weV91aW50OCAoZGVzYy0+cHJlZGVmaW5lZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZGVzY19kZWNfc3BlY2lmaWNfaW5mb19jb3B5X2RhdGEgKERlY29kZXJTcGVjaWZpY0luZm9EZXNjcmlwdG9yICogZGVzYywKLSAgICBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIGlmICghZGVzY19iYXNlX2Rlc2NyaXB0b3JfY29weV9kYXRhICgmZGVzYy0+YmFzZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcHJvcF9jb3B5X3VpbnQ4X2FycmF5IChkZXNjLT5kYXRhLCBkZXNjLT5sZW5ndGgsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotc3RhdGljIGd1aW50NjQKLWRlc2NfZGVjX2NvbmZpZ19kZXNjcmlwdG9yX2NvcHlfZGF0YSAoRGVjb2RlckNvbmZpZ0Rlc2NyaXB0b3IgKiBkZXNjLAotICAgIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgaWYgKCFkZXNjX2Jhc2VfZGVzY3JpcHRvcl9jb3B5X2RhdGEgKCZkZXNjLT5iYXNlLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHByb3BfY29weV91aW50OCAoZGVzYy0+b2JqZWN0X3R5cGUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBwcm9wX2NvcHlfdWludDggKGRlc2MtPnN0cmVhbV90eXBlLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci0gIHByb3BfY29weV91aW50OF9hcnJheSAoZGVzYy0+YnVmZmVyX3NpemVfREIsIDMsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLQotICBwcm9wX2NvcHlfdWludDMyIChkZXNjLT5tYXhfYml0cmF0ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDMyIChkZXNjLT5hdmdfYml0cmF0ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGlmIChkZXNjLT5kZWNfc3BlY2lmaWNfaW5mbykgewotICAgIGlmICghZGVzY19kZWNfc3BlY2lmaWNfaW5mb19jb3B5X2RhdGEgKGRlc2MtPmRlY19zcGVjaWZpY19pbmZvLCBidWZmZXIsCi0gICAgICAgICAgICBzaXplLCBvZmZzZXQpKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gKm9mZnNldCAtIG9yaWdpbmFsX29mZnNldDsKLX0KLQotZ3VpbnQ2NAotZGVzY19lc19kZXNjcmlwdG9yX2NvcHlfZGF0YSAoRVNEZXNjcmlwdG9yICogZGVzYywgZ3VpbnQ4ICoqIGJ1ZmZlciwKLSAgICBndWludDY0ICogc2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgZ3VpbnQ2NCBvcmlnaW5hbF9vZmZzZXQgPSAqb2Zmc2V0OwotCi0gIC8qIG11c3QgY2FsbCB0aGlzIHR3aWNlIHRvIGhhdmUgc2l6ZSBmaWVsZHMgb2YgYWxsIGNvbnRhaW5lZCBkZXNjcmlwdG9ycyBzZXQKLSAgICogY29ycmVjdGx5LCBhbmQgdG8gaGF2ZSB0aGUgc2l6ZSBvZiB0aGUgc2l6ZSBmaWVsZHMgdGFrZW4gaW50byBhY2NvdW50ICovCi0gIGRlc2NfZXNfZGVzY3JpcHRvcl9nZXRfc2l6ZSAoZGVzYyk7Ci0gIGRlc2NfZXNfZGVzY3JpcHRvcl9nZXRfc2l6ZSAoZGVzYyk7Ci0KLSAgaWYgKCFkZXNjX2Jhc2VfZGVzY3JpcHRvcl9jb3B5X2RhdGEgKCZkZXNjLT5iYXNlLCBidWZmZXIsIHNpemUsIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICAvKiBpZCBhbmQgZmxhZ3MgKi8KLSAgcHJvcF9jb3B5X3VpbnQxNiAoZGVzYy0+aWQsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcHJvcF9jb3B5X3VpbnQ4IChkZXNjLT5mbGFncywgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotCi0gIGlmIChkZXNjX2VzX2Rlc2NyaXB0b3JfY2hlY2tfc3RyZWFtX2RlcGVuZGVuY3kgKGRlc2MpKSB7Ci0gICAgcHJvcF9jb3B5X3VpbnQxNiAoZGVzYy0+ZGVwZW5kc19vbl9lc19pZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0KLSAgaWYgKGRlc2NfZXNfZGVzY3JpcHRvcl9jaGVja191cmxfZmxhZyAoZGVzYykpIHsKLSAgICBwcm9wX2NvcHlfc2l6ZV9zdHJpbmcgKGRlc2MtPnVybF9zdHJpbmcsIGRlc2MtPnVybF9sZW5ndGgsIGJ1ZmZlciwgc2l6ZSwKLSAgICAgICAgb2Zmc2V0KTsKLSAgfQotCi0gIGlmIChkZXNjX2VzX2Rlc2NyaXB0b3JfY2hlY2tfb2NyIChkZXNjKSkgewotICAgIHByb3BfY29weV91aW50MTYgKGRlc2MtPm9jcl9lc19pZCwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICB9Ci0KLSAgaWYgKCFkZXNjX2RlY19jb25maWdfZGVzY3JpcHRvcl9jb3B5X2RhdGEgKCZkZXNjLT5kZWNfY29uZl9kZXNjLCBidWZmZXIsIHNpemUsCi0gICAgICAgICAgb2Zmc2V0KSkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaWYgKCFkZXNjX3NsX2NvbmZpZ19kZXNjcmlwdG9yX2NvcHlfZGF0YSAoJmRlc2MtPnNsX2NvbmZfZGVzYywgYnVmZmVyLCBzaXplLAotICAgICAgICAgIG9mZnNldCkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHJldHVybiAqb2Zmc2V0IC0gb3JpZ2luYWxfb2Zmc2V0OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9kZXNjcmlwdG9ycy5oIGIvZ3N0L2lzb21wNC9kZXNjcmlwdG9ycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDcyNTIzLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvZGVzY3JpcHRvcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKiBRdWlja3RpbWUgbXV4ZXIgcGx1Z2luIGZvciBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgX19ERVNDUklQVE9SU19IX18KLSNkZWZpbmUgX19ERVNDUklQVE9SU19IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJwcm9wZXJ0aWVzLmgiCi0KLS8qCi0gKiBUYWdzIGZvciBkZXNjcmlwdG9yIChlYWNoIGtpbmQgaXMgcmVwcmVzZW50ZWQgYnkgYSBudW1iZXIsIGluc3RlYWQgb2YgZm91cmNjIGFzIGluIGF0b21zKQotICovCi0jZGVmaW5lIE9CSkVDVF9ERVNDX1RBRyAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgSU5JVF9PQkpFQ1RfREVTQ19UQUcgICAgICAgMHgwMgotI2RlZmluZSBFU19ERVNDUklQVE9SX1RBRyAgICAgICAgICAweDAzCi0jZGVmaW5lIERFQ09ERVJfQ09ORklHX0RFU0NfVEFHICAgIDB4MDQKLSNkZWZpbmUgREVDT0RFUl9TUEVDSUZJQ19JTkZPX1RBRyAgMHgwNQotI2RlZmluZSBTTF9DT05GSUdfREVTQ19UQUcgICAgICAgICAweDA2Ci0jZGVmaW5lIEVTX0lEX0lOQ19UQUcgICAgICAgICAgICAgIDB4MEUKLSNkZWZpbmUgTVA0X0lOSVRfT0JKRUNUX0RFU0NfVEFHICAgMHgxMAotCi0jZGVmaW5lIEVTRFNfT0JKRUNUX1RZUEVfTVBFRzFfUDMgICAgICAgMHg2QgotI2RlZmluZSBFU0RTX09CSkVDVF9UWVBFX01QRUcyX1A3X01BSU4gIDB4NjYKLSNkZWZpbmUgRVNEU19PQkpFQ1RfVFlQRV9NUEVHNF9QN19MQyAgICAweDY3Ci0jZGVmaW5lIEVTRFNfT0JKRUNUX1RZUEVfTVBFRzRfUDdfU1NSICAgMHg2OAotI2RlZmluZSBFU0RTX09CSkVDVF9UWVBFX01QRUc0X1AyICAgICAgIDB4MjAKLSNkZWZpbmUgRVNEU19PQkpFQ1RfVFlQRV9NUEVHNF9QMyAgICAgICAweDQwCi0KLSNkZWZpbmUgRVNEU19TVFJFQU1fVFlQRV9WSVNVQUwgICAgICAgICAweDA0Ci0jZGVmaW5lIEVTRFNfU1RSRUFNX1RZUEVfQVVESU8gICAgICAgICAgMHgwNQotCi0KLXR5cGVkZWYgc3RydWN0IF9CYXNlRGVzY3JpcHRvcgotewotICBndWludDggdGFnOwotICAvKiB0aGUgZmlyc3QgYml0IG9mIGVhY2ggYnl0ZSBpbmRpY2F0ZXMgaWYgdGhlIG5leHQgYnl0ZSBzaG91bGQgYmUgdXNlZCAqLwotICBndWludDggc2l6ZVs0XTsKLX0gQmFzZURlc2NyaXB0b3I7Ci0KLXR5cGVkZWYgc3RydWN0IF9TTENvbmZpZ0Rlc2NyaXB0b3IKLXsKLSAgQmFzZURlc2NyaXB0b3IgYmFzZTsKLQotICBndWludDggcHJlZGVmaW5lZDsgICAgICAgICAgICAgIC8qIGV2ZXJ5dGhpbmcgaXMgc3VwcG9zZWQgcHJlZGVmaW5lZCAqLwotfSBTTENvbmZpZ0Rlc2NyaXB0b3I7Ci0KLXR5cGVkZWYgc3RydWN0IF9EZWNvZGVyU3BlY2lmaWNJbmZvRGVzY3JpcHRvcgotewotICBCYXNlRGVzY3JpcHRvciBiYXNlOwotICBndWludDMyIGxlbmd0aDsKLSAgZ3VpbnQ4ICpkYXRhOwotfSBEZWNvZGVyU3BlY2lmaWNJbmZvRGVzY3JpcHRvcjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0RlY29kZXJDb25maWdEZXNjcmlwdG9yIHsKLSAgQmFzZURlc2NyaXB0b3IgYmFzZTsKLQotICBndWludDggb2JqZWN0X3R5cGU7Ci0KLSAgLyogZm9sbG93aW5nIGFyZSBjb25kZW5zZWQgaW50byBzdHJlYW1UeXBlOgotICAgKiBiaXQoNikgc3RyZWFtVHlwZTsKLSAgICogYml0KDEpIHVwU3RyZWFtOwotICAgKiBjb25zdCBiaXQoMSkgcmVzZXJ2ZWQ9MTsKLSAgKi8KLSAgZ3VpbnQ4IHN0cmVhbV90eXBlOwotCi0gIGd1aW50OCBidWZmZXJfc2l6ZV9EQlszXTsKLSAgZ3VpbnQzMiBtYXhfYml0cmF0ZTsKLSAgZ3VpbnQzMiBhdmdfYml0cmF0ZTsKLQotICBEZWNvZGVyU3BlY2lmaWNJbmZvRGVzY3JpcHRvciAqZGVjX3NwZWNpZmljX2luZm87Ci19IERlY29kZXJDb25maWdEZXNjcmlwdG9yOwotCi10eXBlZGVmIHN0cnVjdCBfRVNEZXNjcmlwdG9yCi17Ci0gIEJhc2VEZXNjcmlwdG9yIGJhc2U7Ci0KLSAgZ3VpbnQxNiBpZDsKLQotICAvKiBmbGFncyBjb250YWlucyB0aGUgZm9sbG93aW5nOgotICAgKiBiaXQoMSkgc3RyZWFtRGVwZW5kZW5jZUZsYWc7Ci0gICAqIGJpdCgxKSBVUkxfRmxhZzsKLSAgICogYml0KDEpIE9DUnN0cmVhbUZsYWc7Ci0gICAqIGJpdCg1KSBzdHJlYW1Qcmlvcml0eTsKLSAgICovCi0gIGd1aW50OCBmbGFnczsKLQotICBndWludDE2IGRlcGVuZHNfb25fZXNfaWQ7Ci0gIGd1aW50OCB1cmxfbGVuZ3RoOyAgICAgICAgICAgICAgLyogb25seSBpZiBVUkxfZmxhZyBpcyBzZXQgKi8KLSAgZ3VpbnQ4ICp1cmxfc3RyaW5nOyAgICAgICAgICAgICAvKiBzaXplIGlzIHVybF9sZW5ndGggKi8KLQotICBndWludDE2IG9jcl9lc19pZDsgICAgICAgICAgICAgIC8qIG9ubHkgaWYgT0NSc3RyZWFtRmxhZyBpcyBzZXQgKi8KLQotICBEZWNvZGVyQ29uZmlnRGVzY3JpcHRvciBkZWNfY29uZl9kZXNjOwotICBTTENvbmZpZ0Rlc2NyaXB0b3Igc2xfY29uZl9kZXNjOwotCi0gIC8qIG9wdGlvbmFsIHJlbWFpbmRlciBvZiBFU0Rlc2NyaXB0b3IgaXMgbm90IHVzZWQgKi8KLX0gRVNEZXNjcmlwdG9yOwotCi0vKiAtLS0gRlVOQ1RJT05TIC0tLSAqLwotdm9pZCAgICBkZXNjX2VzX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVTRGVzY3JpcHRvciAqZXMpOwotRVNEZXNjcmlwdG9yICpkZXNjX2VzX2Rlc2NyaXB0b3JfbmV3ICAgICAgICAgICAgICAgKHZvaWQpOwotZ3VpbnQ2NCBkZXNjX2VzX2Rlc2NyaXB0b3JfY29weV9kYXRhICAgICAgICAgICAgICAgKEVTRGVzY3JpcHRvciAqZXMsIGd1aW50OCAqKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICpzaXplLCBndWludDY0ICpvZmZzZXQpOwotdm9pZCAgICBkZXNjX2VzX2Rlc2NyaXB0b3JfY2xlYXIgICAgICAgICAgICAgICAgICAgKEVTRGVzY3JpcHRvciAqZXMpOwotCi1EZWNvZGVyU3BlY2lmaWNJbmZvRGVzY3JpcHRvciAqZGVzY19kZWNfc3BlY2lmaWNfaW5mb19uZXcodm9pZCk7Ci12b2lkICAgIGRlc2NfZGVjX3NwZWNpZmljX2luZm9fZnJlZSAgICAgICAgICAgICAgICAoRGVjb2RlclNwZWNpZmljSW5mb0Rlc2NyaXB0b3IgKmRzaWQpOwotdm9pZCAgICBkZXNjX2RlY19zcGVjaWZpY19pbmZvX2FsbG9jX2RhdGEgICAgICAgICAgKERlY29kZXJTcGVjaWZpY0luZm9EZXNjcmlwdG9yICpkc2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgc2l6ZSk7Ci0KLSNlbmRpZiAvKiBfX0RFU0NSSVBUT1JTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9mb3VyY2MuaCBiL2dzdC9pc29tcDQvZm91cmNjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNzQwOGIuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9mb3VyY2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSAvKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotCi0jaWZuZGVmIF9fRk9VUkNDX0hfXwotI2RlZmluZSBfX0ZPVVJDQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEZPVVJDQ19udWxsICAgICAweDAKLQotI2RlZmluZSBGT1VSQ0NfMnZ1eSAgICAgR1NUX01BS0VfRk9VUkNDKCcyJywndicsJ3UnLCd5JykKLSNkZWZpbmUgRk9VUkNDX0ZNUDQgICAgIEdTVF9NQUtFX0ZPVVJDQygnRicsJ00nLCdQJywnNCcpCi0jZGVmaW5lIEZPVVJDQ19IMjY0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ0gnLCcyJywnNicsJzQnKQotI2RlZmluZSBGT1VSQ0NfSDI2NSAgICAgR1NUX01BS0VfRk9VUkNDKCdIJywnMicsJzYnLCc1JykKLSNkZWZpbmUgRk9VUkNDX01BQzMgICAgIEdTVF9NQUtFX0ZPVVJDQygnTScsJ0EnLCdDJywnMycpCi0jZGVmaW5lIEZPVVJDQ19NQUM2ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ00nLCdBJywnQycsJzYnKQotI2RlZmluZSBGT1VSQ0NfTVA0ViAgICAgR1NUX01BS0VfRk9VUkNDKCdNJywnUCcsJzQnLCdWJykKLSNkZWZpbmUgRk9VUkNDX1BJQ1QgICAgIEdTVF9NQUtFX0ZPVVJDQygnUCcsJ0knLCdDJywnVCcpCi0jZGVmaW5lIEZPVVJDQ19RRE0yICAgICBHU1RfTUFLRV9GT1VSQ0MoJ1EnLCdEJywnTScsJzInKQotI2RlZmluZSBGT1VSQ0NfU1ZRMyAgICAgR1NUX01BS0VfRk9VUkNDKCdTJywnVicsJ1EnLCczJykKLSNkZWZpbmUgRk9VUkNDX1ZQMzEgICAgIEdTVF9NQUtFX0ZPVVJDQygnVicsJ1AnLCczJywnMScpCi0jZGVmaW5lIEZPVVJDQ19WUDgwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ1YnLCdQJywnOCcsJzAnKQotI2RlZmluZSBGT1VSQ0NfV1JMRSAgICAgR1NUX01BS0VfRk9VUkNDKCdXJywnUicsJ0wnLCdFJykKLSNkZWZpbmUgRk9VUkNDX1hNUF8gICAgIEdTVF9NQUtFX0ZPVVJDQygnWCcsJ00nLCdQJywnXycpCi0jZGVmaW5lIEZPVVJDQ19fQVJUICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwnQScsJ1InLCdUJykKLSNkZWZpbmUgRk9VUkNDX19fX18gICAgIEdTVF9NQUtFX0ZPVVJDQygnLScsJy0nLCctJywnLScpCi0jZGVmaW5lIEZPVVJDQ19fX2luICAgICBHU1RfTUFLRV9GT1VSQ0MoJyAnLCcgJywnaScsJ24nKQotI2RlZmluZSBGT1VSQ0NfX190eSAgICAgR1NUX01BS0VfRk9VUkNDKCcgJywnICcsJ3QnLCd5JykKLSNkZWZpbmUgRk9VUkNDX19hbGIgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCdhJywnbCcsJ2InKQotI2RlZmluZSBGT1VSQ0NfX2NweSAgICAgR1NUX01BS0VfRk9VUkNDKDB4YTksJ2MnLCdwJywneScpCi0jZGVmaW5lIEZPVVJDQ19fZGF5ICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwnZCcsJ2EnLCd5JykKLSNkZWZpbmUgRk9VUkNDX19kZXMgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCdkJywnZScsJ3MnKQotI2RlZmluZSBGT1VSQ0NfX2VuYyAgICAgR1NUX01BS0VfRk9VUkNDKDB4YTksJ2UnLCduJywnYycpCi0jZGVmaW5lIEZPVVJDQ19fZ2VuICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwgJ2cnLCAnZScsICduJykKLSNkZWZpbmUgRk9VUkNDX19ncnAgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCdnJywncicsJ3AnKQotI2RlZmluZSBGT1VSQ0NfX2luZiAgICAgR1NUX01BS0VfRk9VUkNDKDB4YTksJ2knLCduJywnZicpCi0jZGVmaW5lIEZPVVJDQ19fbHlyICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwnbCcsJ3knLCdyJykKLSNkZWZpbmUgRk9VUkNDX19tcDMgICAgIEdTVF9NQUtFX0ZPVVJDQygnLicsJ20nLCdwJywnMycpCi0jZGVmaW5lIEZPVVJDQ19fbmFtICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwnbicsJ2EnLCdtJykKLSNkZWZpbmUgRk9VUkNDX19yZXEgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCdyJywnZScsJ3EnKQotI2RlZmluZSBGT1VSQ0NfX3RvbyAgICAgR1NUX01BS0VfRk9VUkNDKDB4YTksJ3QnLCdvJywnbycpCi0jZGVmaW5lIEZPVVJDQ19fd3J0ICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwndycsJ3InLCd0JykKLSNkZWZpbmUgRk9VUkNDX2FBUlQgICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ0EnLCdSJywnVCcpCi0jZGVmaW5lIEZPVVJDQ19hY18zICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2EnLCdjJywnLScsJzMnKQotI2RlZmluZSBGT1VSQ0NfYWdzbSAgICAgR1NUX01BS0VfRk9VUkNDKCdhJywnZycsJ3MnLCdtJykKLSNkZWZpbmUgRk9VUkNDX2FsYWMgICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ2wnLCdhJywnYycpCi0jZGVmaW5lIEZPVVJDQ19hbGF3ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2EnLCdsJywnYScsJ3cnKQotI2RlZmluZSBGT1VSQ0NfYWxpcyAgICAgR1NUX01BS0VfRk9VUkNDKCdhJywnbCcsJ2knLCdzJykKLSNkZWZpbmUgRk9VUkNDX2FwcGwgICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ3AnLCdwJywnbCcpCi0jZGVmaW5lIEZPVVJDQ19hdmMxICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2EnLCd2JywnYycsJzEnKQotI2RlZmluZSBGT1VSQ0NfYXZjMyAgICAgR1NUX01BS0VfRk9VUkNDKCdhJywndicsJ2MnLCczJykKLSNkZWZpbmUgRk9VUkNDX2F2Y0MgICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ3YnLCdjJywnQycpCi0jZGVmaW5lIEZPVVJDQ19jbGlwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdsJywnaScsJ3AnKQotI2RlZmluZSBGT1VSQ0NfY21vdiAgICAgR1NUX01BS0VfRk9VUkNDKCdjJywnbScsJ28nLCd2JykKLSNkZWZpbmUgRk9VUkNDX2NtdmQgICAgIEdTVF9NQUtFX0ZPVVJDQygnYycsJ20nLCd2JywnZCcpCi0jZGVmaW5lIEZPVVJDQ19jbzY0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdvJywnNicsJzQnKQotI2RlZmluZSBGT1VSQ0NfY292ciAgICAgR1NUX01BS0VfRk9VUkNDKCdjJywnbycsJ3YnLCdyJykKLSNkZWZpbmUgRk9VUkNDX2NwaWwgICAgIEdTVF9NQUtFX0ZPVVJDQygnYycsJ3AnLCdpJywnbCcpCi0jZGVmaW5lIEZPVVJDQ19jcHJ0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdwJywncicsJ3QnKQotI2RlZmluZSBGT1VSQ0NfY3JnbiAgICAgR1NUX01BS0VfRk9VUkNDKCdjJywncicsJ2cnLCduJykKLSNkZWZpbmUgRk9VUkNDX2N0YWIgICAgIEdTVF9NQUtFX0ZPVVJDQygnYycsJ3QnLCdhJywnYicpCi0jZGVmaW5lIEZPVVJDQ19jdHRzICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCd0JywndCcsJ3MnKQotI2RlZmluZSBGT1VSQ0NfY3NsZyAgICAgR1NUX01BS0VfRk9VUkNDKCdjJywncycsJ2wnLCdnJykKLSNkZWZpbmUgRk9VUkNDX2QyNjMgICAgIEdTVF9NQUtFX0ZPVVJDQygnZCcsJzInLCc2JywnMycpCi0jZGVmaW5lIEZPVVJDQ19kYWMzICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCdhJywnYycsJzMnKQotI2RlZmluZSBGT1VSQ0NfZGFtciAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywnYScsJ20nLCdyJykKLSNkZWZpbmUgRk9VUkNDX2RhdGEgICAgIEdTVF9NQUtFX0ZPVVJDQygnZCcsJ2EnLCd0JywnYScpCi0jZGVmaW5lIEZPVVJDQ19kY29tICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCdjJywnbycsJ20nKQotI2RlZmluZSBGT1VSQ0NfZGVzYyAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywnZScsJ3MnLCdjJykKLSNkZWZpbmUgRk9VUkNDX2RobHIgICAgIEdTVF9NQUtFX0ZPVVJDQygnZCcsJ2gnLCdsJywncicpCi0jZGVmaW5lIEZPVVJDQ19kaW5mICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCdpJywnbicsJ2YnKQotI2RlZmluZSBGT1VSQ0NfZGlzYyAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywnaScsJ3MnLCdjJykKLSNkZWZpbmUgRk9VUkNDX2Rpc2sgICAgIEdTVF9NQUtFX0ZPVVJDQygnZCcsJ2knLCdzJywnaycpCi0jZGVmaW5lIEZPVVJDQ19kcmFjICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCdyJywnYScsJ2MnKQotI2RlZmluZSBGT1VSQ0NfZHJlZiAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywncicsJ2UnLCdmJykKLSNkZWZpbmUgRk9VUkNDX2RybWkgICAgIEdTVF9NQUtFX0ZPVVJDQygnZCcsJ3InLCdtJywnaScpCi0jZGVmaW5lIEZPVVJDQ19kcm1zICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCdyJywnbScsJ3MnKQotI2RlZmluZSBGT1VSQ0NfZHZjcCAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywndicsJ2MnLCdwJykKLSNkZWZpbmUgRk9VUkNDX2R2Y18gICAgIEdTVF9NQUtFX0ZPVVJDQygnZCcsJ3YnLCdjJywnICcpCi0jZGVmaW5lIEZPVVJDQ19kdjVwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCd2JywnNScsJ3AnKQotI2RlZmluZSBGT1VSQ0NfZHY1biAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywndicsJzUnLCduJykKLSNkZWZpbmUgRk9VUkNDX2VkdHMgICAgIEdTVF9NQUtFX0ZPVVJDQygnZScsJ2QnLCd0JywncycpCi0jZGVmaW5lIEZPVVJDQ19lbHN0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2UnLCdsJywncycsJ3QnKQotI2RlZmluZSBGT1VSQ0NfZW5kYSAgICAgR1NUX01BS0VfRk9VUkNDKCdlJywnbicsJ2QnLCdhJykKLSNkZWZpbmUgRk9VUkNDX2VzZHMgICAgIEdTVF9NQUtFX0ZPVVJDQygnZScsJ3MnLCdkJywncycpCi0jZGVmaW5lIEZPVVJDQ19mbXA0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2YnLCdtJywncCcsJzQnKQotI2RlZmluZSBGT1VSQ0NfZnJlZSAgICAgR1NUX01BS0VfRk9VUkNDKCdmJywncicsJ2UnLCdlJykKLSNkZWZpbmUgRk9VUkNDX2ZybWEgICAgIEdTVF9NQUtFX0ZPVVJDQygnZicsJ3InLCdtJywnYScpCi0jZGVmaW5lIEZPVVJDQ19mdHlwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2YnLCd0JywneScsJ3AnKQotI2RlZmluZSBGT1VSQ0NfZnRhYiAgICAgR1NUX01BS0VfRk9VUkNDKCdmJywndCcsJ2EnLCdiJykKLSNkZWZpbmUgRk9VUkNDX2dhbWEgICAgIEdTVF9NQUtFX0ZPVVJDQygnZycsJ2EnLCdtJywnYScpCi0jZGVmaW5lIEZPVVJDQ19nbGJsICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2cnLCdsJywnYicsJ2wnKQotI2RlZmluZSBGT1VSQ0NfZ21oZCAgICAgR1NUX01BS0VfRk9VUkNDKCdnJywnbScsJ2gnLCdkJykKLSNkZWZpbmUgRk9VUkNDX2dtaW4gICAgIEdTVF9NQUtFX0ZPVVJDQygnZycsJ20nLCdpJywnbicpCi0jZGVmaW5lIEZPVVJDQ19nbnJlICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2cnLCduJywncicsJ2UnKQotI2RlZmluZSBGT1VSQ0NfaDI2MyAgICAgR1NUX01BS0VfRk9VUkNDKCdoJywnMicsJzYnLCczJykKLSNkZWZpbmUgRk9VUkNDX2hkbHIgICAgIEdTVF9NQUtFX0ZPVVJDQygnaCcsJ2QnLCdsJywncicpCi0jZGVmaW5lIEZPVVJDQ19oZXYxICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2gnLCdlJywndicsJzEnKQotI2RlZmluZSBGT1VSQ0NfaGludCAgICAgR1NUX01BS0VfRk9VUkNDKCdoJywnaScsJ24nLCd0JykKLSNkZWZpbmUgRk9VUkNDX2htaGQgICAgIEdTVF9NQUtFX0ZPVVJDQygnaCcsJ20nLCdoJywnZCcpCi0jZGVmaW5lIEZPVVJDQ19obmRsICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2gnLCduJywnZCcsJ2wnKQotI2RlZmluZSBGT1VSQ0NfaG50aSAgICAgR1NUX01BS0VfRk9VUkNDKCdoJywnbicsJ3QnLCdpJykKLSNkZWZpbmUgRk9VUkNDX2h2YzEgICAgIEdTVF9NQUtFX0ZPVVJDQygnaCcsJ3YnLCdjJywnMScpCi0jZGVmaW5lIEZPVVJDQ19odmNDICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2gnLCd2JywnYycsJ0MnKQotI2RlZmluZSBGT1VSQ0NfaWxzdCAgICAgR1NUX01BS0VfRk9VUkNDKCdpJywnbCcsJ3MnLCd0JykKLSNkZWZpbmUgRk9VUkNDX2ltYTQgICAgIEdTVF9NQUtFX0ZPVVJDQygnaScsJ20nLCdhJywnNCcpCi0jZGVmaW5lIEZPVVJDQ19pbWFwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2knLCdtJywnYScsJ3AnKQotI2RlZmluZSBGT1VSQ0NfaW4yNCAgICAgR1NUX01BS0VfRk9VUkNDKCdpJywnbicsJzInLCc0JykKLSNkZWZpbmUgRk9VUkNDX2pwMmMgICAgIEdTVF9NQUtFX0ZPVVJDQygnaicsJ3AnLCcyJywnYycpCi0jZGVmaW5lIEZPVVJDQ19qcGVnICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2onLCdwJywnZScsJ2cnKQotI2RlZmluZSBGT1VSQ0Nfa2V5dyAgICAgR1NUX01BS0VfRk9VUkNDKCdrJywnZScsJ3knLCd3JykKLSNkZWZpbmUgRk9VUkNDX2ttYXQgICAgIEdTVF9NQUtFX0ZPVVJDQygnaycsJ20nLCdhJywndCcpCi0jZGVmaW5lIEZPVVJDQ19reXdkICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2snLCd5JywndycsJ2QnKQotI2RlZmluZSBGT1VSQ0NfbG9hZCAgICAgR1NUX01BS0VfRk9VUkNDKCdsJywnbycsJ2EnLCdkJykKLSNkZWZpbmUgRk9VUkNDX21hdHQgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ2EnLCd0JywndCcpCi0jZGVmaW5lIEZPVVJDQ19tZGF0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdkJywnYScsJ3QnKQotI2RlZmluZSBGT1VSQ0NfbWRoZCAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywnZCcsJ2gnLCdkJykKLSNkZWZpbmUgRk9VUkNDX21kaWEgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ2QnLCdpJywnYScpCi0jZGVmaW5lIEZPVVJDQ19tZGlyICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdkJywnaScsJ3InKQotI2RlZmluZSBGT1VSQ0NfbWVhbiAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywnZScsJ2EnLCduJykKLSNkZWZpbmUgRk9VUkNDX21ldGEgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ2UnLCd0JywnYScpCi0jZGVmaW5lIEZPVVJDQ19taGxyICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdoJywnbCcsJ3InKQotI2RlZmluZSBGT1VSQ0NfbWluZiAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywnaScsJ24nLCdmJykKLSNkZWZpbmUgRk9VUkNDX21vb3YgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ28nLCdvJywndicpCi0jZGVmaW5lIEZPVVJDQ19tcDRhICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdwJywnNCcsJ2EnKQotI2RlZmluZSBGT1VSQ0NfbXA0cyAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywncCcsJzQnLCdzJykKLSNkZWZpbmUgRk9VUkNDX21wNHMgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ3AnLCc0JywncycpCi0jZGVmaW5lIEZPVVJDQ19tcDR2ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdwJywnNCcsJ3YnKQotI2RlZmluZSBGT1VSQ0NfbmFtZSAgICAgR1NUX01BS0VfRk9VUkNDKCduJywnYScsJ20nLCdlJykKLSNkZWZpbmUgRk9VUkNDX29wdXMgICAgIEdTVF9NQUtFX0ZPVVJDQygnTycsJ3AnLCd1JywncycpCi0jZGVmaW5lIEZPVVJDQ19kb3BzICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2QnLCdPJywncCcsJ3MnKQotI2RlZmluZSBGT1VSQ0NfcGFzcCAgICAgR1NUX01BS0VfRk9VUkNDKCdwJywnYScsJ3MnLCdwJykKLSNkZWZpbmUgRk9VUkNDX3Bjc3QgICAgIEdTVF9NQUtFX0ZPVVJDQygncCcsJ2MnLCdzJywndCcpCi0jZGVmaW5lIEZPVVJDQ19wZ2FwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3AnLCdnJywnYScsJ3AnKQotI2RlZmluZSBGT1VSQ0NfcG5vdCAgICAgR1NUX01BS0VfRk9VUkNDKCdwJywnbicsJ28nLCd0JykKLSNkZWZpbmUgRk9VUkNDX3F0X18gICAgIEdTVF9NQUtFX0ZPVVJDQygncScsJ3QnLCcgJywnICcpCi0jZGVmaW5lIEZPVVJDQ19xdGltICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3EnLCd0JywnaScsJ20nKQotI2RlZmluZSBGT1VSQ0NfcmF3XyAgICAgR1NUX01BS0VfRk9VUkNDKCdyJywnYScsJ3cnLCcgJykKLSNkZWZpbmUgRk9VUkNDX3JkcmYgICAgIEdTVF9NQUtFX0ZPVVJDQygncicsJ2QnLCdyJywnZicpCi0jZGVmaW5lIEZPVVJDQ19ybGVfICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3InLCdsJywnZScsJyAnKQotI2RlZmluZSBGT1VSQ0Nfcm1kYSAgICAgR1NUX01BS0VfRk9VUkNDKCdyJywnbScsJ2QnLCdhJykKLSNkZWZpbmUgRk9VUkNDX3JtZHIgICAgIEdTVF9NQUtFX0ZPVVJDQygncicsJ20nLCdkJywncicpCi0jZGVmaW5lIEZPVVJDQ19ybXJhICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3InLCdtJywncicsJ2EnKQotI2RlZmluZSBGT1VSQ0Nfcm12YyAgICAgR1NUX01BS0VfRk9VUkNDKCdyJywnbScsJ3YnLCdjJykKLSNkZWZpbmUgRk9VUkNDX3J0cF8gICAgIEdTVF9NQUtFX0ZPVVJDQygncicsJ3QnLCdwJywnICcpCi0jZGVmaW5lIEZPVVJDQ19ydHNwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3InLCd0JywncycsJ3AnKQotI2RlZmluZSBGT1VSQ0NfczI2MyAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnMicsJzYnLCczJykKLSNkZWZpbmUgRk9VUkNDX3NhbXIgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ2EnLCdtJywncicpCi0jZGVmaW5lIEZPVVJDQ19zYXdiICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdhJywndycsJ2InKQotI2RlZmluZSBGT1VSQ0Nfc2J0bCAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnYicsJ3QnLCdsJykKLSNkZWZpbmUgRk9VUkNDX3NkcF8gICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ2QnLCdwJywnICcpCi0jZGVmaW5lIEZPVVJDQ19zaWR4ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdpJywnZCcsJ3gnKQotI2RlZmluZSBGT1VSQ0Nfc21oZCAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnbScsJ2gnLCdkJykKLSNkZWZpbmUgRk9VUkNDX3NvYWEgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ28nLCdhJywnYScpCi0jZGVmaW5lIEZPVVJDQ19zb2FsICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdvJywnYScsJ2wnKQotI2RlZmluZSBGT1VSQ0Nfc29hciAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnbycsJ2EnLCdyJykKLSNkZWZpbmUgRk9VUkNDX3NvY28gICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ28nLCdjJywnbycpCi0jZGVmaW5lIEZPVVJDQ19zb25tICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdvJywnbicsJ20nKQotI2RlZmluZSBGT1VSQ0Nfc29zbiAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnbycsJ3MnLCduJykKLSNkZWZpbmUgRk9VUkNDX3NvdW4gICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ28nLCd1JywnbicpCi0jZGVmaW5lIEZPVVJDQ19zb3d0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdvJywndycsJ3QnKQotI2RlZmluZSBGT1VSQ0Nfc3RibCAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywndCcsJ2InLCdsJykKLSNkZWZpbmUgRk9VUkNDX3N0Y28gICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ3QnLCdjJywnbycpCi0jZGVmaW5lIEZPVVJDQ19zdHBwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCd0JywncCcsJ3AnKQotI2RlZmluZSBGT1VSQ0Nfc3RwcyAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywndCcsJ3AnLCdzJykKLSNkZWZpbmUgRk9VUkNDX3N0cmYgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ3QnLCdyJywnZicpCi0jZGVmaW5lIEZPVVJDQ19zdHJtICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCd0JywncicsJ20nKQotI2RlZmluZSBGT1VSQ0Nfc3RzYyAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywndCcsJ3MnLCdjJykKLSNkZWZpbmUgRk9VUkNDX3N0c2QgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ3QnLCdzJywnZCcpCi0jZGVmaW5lIEZPVVJDQ19zdHNzICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCd0JywncycsJ3MnKQotI2RlZmluZSBGT1VSQ0Nfc3RzeiAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywndCcsJ3MnLCd6JykKLSNkZWZpbmUgRk9VUkNDX3N0dHMgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ3QnLCd0JywncycpCi0jZGVmaW5lIEZPVVJDQ19zdWJwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCd1JywnYicsJ3AnKQotI2RlZmluZSBGT1VSQ0Nfc3VidCAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywndScsJ2InLCd0JykKLSNkZWZpbmUgRk9VUkNDX3RleHQgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ2UnLCd4JywndCcpCi0jZGVmaW5lIEZPVVJDQ190Y21pICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdjJywnbScsJ2knKQotI2RlZmluZSBGT1VSQ0NfdGtoZCAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywnaycsJ2gnLCdkJykKLSNkZWZpbmUgRk9VUkNDX3RtY2QgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ20nLCdjJywnZCcpCi0jZGVmaW5lIEZPVVJDQ190bXBvICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdtJywncCcsJ28nKQotI2RlZmluZSBGT1VSQ0NfdHJhayAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywncicsJ2EnLCdrJykKLSNkZWZpbmUgRk9VUkNDX3RyZWYgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ3InLCdlJywnZicpCi0jZGVmaW5lIEZPVVJDQ190cmtuICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdyJywnaycsJ24nKQotI2RlZmluZSBGT1VSQ0NfdHZlbiAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywndicsJ2UnLCduJykKLSNkZWZpbmUgRk9VUkNDX3R2ZXMgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ3YnLCdlJywncycpCi0jZGVmaW5lIEZPVVJDQ190dnNoICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCd2JywncycsJ2gnKQotI2RlZmluZSBGT1VSQ0NfdHZzbiAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywndicsJ3MnLCduJykKLSNkZWZpbmUgRk9VUkNDX3R3b3MgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ3cnLCdvJywncycpCi0jZGVmaW5lIEZPVVJDQ190eDNnICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCd4JywnMycsJ2cnKQotI2RlZmluZSBGT1VSQ0NfdWR0YSAgICAgR1NUX01BS0VfRk9VUkNDKCd1JywnZCcsJ3QnLCdhJykKLSNkZWZpbmUgRk9VUkNDX3VsYXcgICAgIEdTVF9NQUtFX0ZPVVJDQygndScsJ2wnLCdhJywndycpCi0jZGVmaW5lIEZPVVJDQ191cmxfICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3UnLCdyJywnbCcsJyAnKQotI2RlZmluZSBGT1VSQ0NfdXVpZCAgICAgR1NUX01BS0VfRk9VUkNDKCd1JywndScsJ2knLCdkJykKLSNkZWZpbmUgRk9VUkNDX3YyMTAgICAgIEdTVF9NQUtFX0ZPVVJDQygndicsJzInLCcxJywnMCcpCi0jZGVmaW5lIEZPVVJDQ192Y18xICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3YnLCdjJywnLScsJzEnKQotI2RlZmluZSBGT1VSQ0NfdmlkZSAgICAgR1NUX01BS0VfRk9VUkNDKCd2JywnaScsJ2QnLCdlJykKLSNkZWZpbmUgRk9VUkNDX3ZtaGQgICAgIEdTVF9NQUtFX0ZPVVJDQygndicsJ20nLCdoJywnZCcpCi0jZGVmaW5lIEZPVVJDQ193YXZlICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3cnLCdhJywndicsJ2UnKQotI2RlZmluZSBGT1VSQ0Nfd2lkZSAgICAgR1NUX01BS0VfRk9VUkNDKCd3JywnaScsJ2QnLCdlJykKLSNkZWZpbmUgRk9VUkNDX3psaWIgICAgIEdTVF9NQUtFX0ZPVVJDQygneicsJ2wnLCdpJywnYicpCi0KLSNkZWZpbmUgRk9VUkNDX2FwNGggICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ3AnLCc0JywnaCcpCi0jZGVmaW5lIEZPVVJDQ19hcGNoICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2EnLCdwJywnYycsJ2gnKQotI2RlZmluZSBGT1VSQ0NfYXBjbiAgICAgR1NUX01BS0VfRk9VUkNDKCdhJywncCcsJ2MnLCduJykKLSNkZWZpbmUgRk9VUkNDX2FwY28gICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ3AnLCdjJywnbycpCi0jZGVmaW5lIEZPVVJDQ19hcGNzICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2EnLCdwJywnYycsJ3MnKQotI2RlZmluZSBGT1VSQ0NfbTF2ICAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywnMScsJ3YnLCcgJykKLSNkZWZpbmUgRk9VUkNDX3Zpdm8gICAgIEdTVF9NQUtFX0ZPVVJDQygndicsJ2knLCd2JywnbycpCi0jZGVmaW5lIEZPVVJDQ19zYWl6ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdhJywnaScsJ3onKQotI2RlZmluZSBGT1VSQ0Nfc2FpbyAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnYScsJ2knLCdvJykKLQotI2RlZmluZSBGT1VSQ0NfM2dnNiAgICAgR1NUX01BS0VfRk9VUkNDKCczJywnZycsJ2cnLCc2JykKLSNkZWZpbmUgRk9VUkNDXzNnZzcgICAgIEdTVF9NQUtFX0ZPVVJDQygnMycsJ2cnLCdnJywnNycpCi0jZGVmaW5lIEZPVVJDQ18zZ3A0ICAgICBHU1RfTUFLRV9GT1VSQ0MoJzMnLCdnJywncCcsJzQnKQotI2RlZmluZSBGT1VSQ0NfM2dwNiAgICAgR1NUX01BS0VfRk9VUkNDKCczJywnZycsJ3AnLCc2JykKLSNkZWZpbmUgRk9VUkNDXzNncjYgICAgIEdTVF9NQUtFX0ZPVVJDQygnMycsJ2cnLCdyJywnNicpCi0jZGVmaW5lIEZPVVJDQ18zZ19fICAgICBHU1RfTUFLRV9GT1VSQ0MoJzMnLCdnJywwLDApCi0jZGVmaW5lIEZPVVJDQ19pc21sICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2knLCdzJywnbScsJ2wnKQotI2RlZmluZSBGT1VSQ0NfaXNvMiAgICAgR1NUX01BS0VfRk9VUkNDKCdpJywncycsJ28nLCcyJykKLSNkZWZpbmUgRk9VUkNDX2lzb20gICAgIEdTVF9NQUtFX0ZPVVJDQygnaScsJ3MnLCdvJywnbScpCi0jZGVmaW5lIEZPVVJDQ19tcDQxICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdwJywnNCcsJzEnKQotI2RlZmluZSBGT1VSQ0NfbXA0MiAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywncCcsJzQnLCcyJykKLSNkZWZpbmUgRk9VUkNDX3BpZmYgICAgIEdTVF9NQUtFX0ZPVVJDQygncCcsJ2knLCdmJywnZicpCi0jZGVmaW5lIEZPVVJDQ190aXRsICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdpJywndCcsJ2wnKQotCi0vKiBTVlEzIGZvdXJjYyAqLwotI2RlZmluZSBGT1VSQ0NfU0VRSCAgICAgR1NUX01BS0VfRk9VUkNDKCdTJywnRScsJ1EnLCdIJykKLSNkZWZpbmUgRk9VUkNDX1NNSV8gICAgIEdTVF9NQUtFX0ZPVVJDQygnUycsJ00nLCdJJywnICcpCi0KLS8qIDNncHAgYXNzZXQgbWV0YSBkYXRhIGZvdXJjYyAqLwotI2RlZmluZSBGT1VSQ0NfYWxibSAgICAgR1NUX01BS0VfRk9VUkNDKCdhJywnbCcsJ2InLCdtJykKLSNkZWZpbmUgRk9VUkNDX2F1dGggICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ3UnLCd0JywnaCcpCi0jZGVmaW5lIEZPVVJDQ19jbHNmICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdsJywncycsJ2YnKQotI2RlZmluZSBGT1VSQ0NfZHNjcCAgICAgR1NUX01BS0VfRk9VUkNDKCdkJywncycsJ2MnLCdwJykKLSNkZWZpbmUgRk9VUkNDX2xvY2kgICAgIEdTVF9NQUtFX0ZPVVJDQygnbCcsJ28nLCdjJywnaScpCi0jZGVmaW5lIEZPVVJDQ19wZXJmICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3AnLCdlJywncicsJ2YnKQotI2RlZmluZSBGT1VSQ0NfcnRuZyAgICAgR1NUX01BS0VfRk9VUkNDKCdyJywndCcsJ24nLCdnJykKLSNkZWZpbmUgRk9VUkNDX3lycmMgICAgIEdTVF9NQUtFX0ZPVVJDQygneScsJ3InLCdyJywnYycpCi0KLS8qIG1pc2MgdGFnIHN0dWZmICovCi0jZGVmaW5lIEZPVVJDQ19JRDMyICAgICBHU1RfTUFLRV9GT1VSQ0MoJ0knLCAnRCcsJzMnLCcyJykKLQotLyogSVNPIE1vdGlvbiBKUEVHIDIwMDAgZm91cmNjICovCi0jZGVmaW5lIEZPVVJDQ19jZGVmICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdkJywnZScsJ2YnKQotI2RlZmluZSBGT1VSQ0NfY21hcCAgICAgR1NUX01BS0VfRk9VUkNDKCdjJywnbScsJ2EnLCdwJykKLSNkZWZpbmUgRk9VUkNDX2NvbHIgICAgIEdTVF9NQUtFX0ZPVVJDQygnYycsJ28nLCdsJywncicpCi0jZGVmaW5lIEZPVVJDQ19maWVsICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2YnLCdpJywnZScsJ2wnKQotI2RlZmluZSBGT1VSQ0NfaWhkciAgICAgR1NUX01BS0VfRk9VUkNDKCdpJywnaCcsJ2QnLCdyJykKLSNkZWZpbmUgRk9VUkNDX2pwMmggICAgIEdTVF9NQUtFX0ZPVVJDQygnaicsJ3AnLCcyJywnaCcpCi0jZGVmaW5lIEZPVVJDQ19qcDJ4ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2onLCdwJywnMicsJ3gnKQotI2RlZmluZSBGT1VSQ0NfbWpwMiAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywnaicsJ3AnLCcyJykKLQotLyogc29tZSBidWdneSBoYXJkd2FyZSdzIG5vdGlvbiBvZiBtZGhkICovCi0jZGVmaW5lIEZPVVJDQ19taGRyICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdoJywnZCcsJ3InKQotCi0vKiBGcmFnbWVudGVkIE1QNCAqLwotI2RlZmluZSBGT1VSQ0NfYnRydCAgICAgR1NUX01BS0VfRk9VUkNDKCdiJywndCcsJ3InLCd0JykKLSNkZWZpbmUgRk9VUkNDX21laGQgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ2UnLCdoJywnZCcpCi0jZGVmaW5lIEZPVVJDQ19tZmhkICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdmJywnaCcsJ2QnKQotI2RlZmluZSBGT1VSQ0NfbWZyYSAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywnZicsJ3InLCdhJykKLSNkZWZpbmUgRk9VUkNDX21mcm8gICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ2YnLCdyJywnbycpCi0jZGVmaW5lIEZPVVJDQ19tb29mICAgICBHU1RfTUFLRV9GT1VSQ0MoJ20nLCdvJywnbycsJ2YnKQotI2RlZmluZSBGT1VSQ0NfbXZleCAgICAgR1NUX01BS0VfRk9VUkNDKCdtJywndicsJ2UnLCd4JykKLSNkZWZpbmUgRk9VUkNDX212aGQgICAgIEdTVF9NQUtFX0ZPVVJDQygnbScsJ3YnLCdoJywnZCcpCi0jZGVmaW5lIEZPVVJDQ19vdmMxICAgICBHU1RfTUFLRV9GT1VSQ0MoJ28nLCd2JywnYycsJzEnKQotI2RlZmluZSBGT1VSQ0Nfb3dtYSAgICAgR1NUX01BS0VfRk9VUkNDKCdvJywndycsJ20nLCdhJykKLSNkZWZpbmUgRk9VUkNDX3NkdHAgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ2QnLCd0JywncCcpCi0jZGVmaW5lIEZPVVJDQ190ZmhkICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdmJywnaCcsJ2QnKQotI2RlZmluZSBGT1VSQ0NfdGZyYSAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywnZicsJ3InLCdhJykKLSNkZWZpbmUgRk9VUkNDX3RyYWYgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ3InLCdhJywnZicpCi0jZGVmaW5lIEZPVVJDQ190cmV4ICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdyJywnZScsJ3gnKQotI2RlZmluZSBGT1VSQ0NfdHJ1biAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywncicsJ3UnLCduJykKLSNkZWZpbmUgRk9VUkNDX3dtYV8gICAgIEdTVF9NQUtFX0ZPVVJDQygndycsJ20nLCdhJywnICcpCi0KLS8qIE1QRUcgREFTSCAqLwotI2RlZmluZSBGT1VSQ0NfdGZkdCAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywnZicsJ2QnLCd0JykKLQotLyogWGlwaCBmb3VyY2MgKi8KLSNkZWZpbmUgRk9VUkNDX1hkeFQgICAgIEdTVF9NQUtFX0ZPVVJDQygnWCcsJ2QnLCd4JywnVCcpCi0jZGVmaW5lIEZPVVJDQ19YaVRoICAgICBHU1RfTUFLRV9GT1VSQ0MoJ1gnLCdpJywnVCcsJ2gnKQotI2RlZmluZSBGT1VSQ0NfdEN0QyAgICAgR1NUX01BS0VfRk9VUkNDKCd0JywnQycsJ3QnLCdDJykKLSNkZWZpbmUgRk9VUkNDX3RDdEggICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ0MnLCd0JywnSCcpCi0jZGVmaW5lIEZPVVJDQ190Q3RfICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3QnLCdDJywndCcsJyMnKQotCi0vKiBpbHN0IG1ldGF0YWdzICovCi0jZGVmaW5lIEZPVVJDQ19fY210ICAgICBHU1RfTUFLRV9GT1VSQ0MoMHhhOSwgJ2MnLCdtJywndCcpCi0KLS8qIGFwcGxlIHRhZ3MgKi8KLSNkZWZpbmUgRk9VUkNDX19tYWsgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCAnbScsJ2EnLCdrJykKLSNkZWZpbmUgRk9VUkNDX19tb2QgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCAnbScsJ28nLCdkJykKLSNkZWZpbmUgRk9VUkNDX19zd3IgICAgIEdTVF9NQUtFX0ZPVVJDQygweGE5LCAncycsJ3cnLCdyJykKLQotLyogQ2hhcHRlcnMgcmVmZXJlbmNlICovCi0jZGVmaW5lIEZPVVJDQ19jaGFwICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdoJywnYScsJ3AnKQotCi0vKiBGb3IgTWljcm9zb2Z0IFdhdmUgZm9ybWF0cyBlbWJlZGRlZCBpbiBxdWlja3RpbWUsIHRoZSBGT1VSQ0MgaXMKLSAgICdtJywgJ3MnLCB0aGVuIHRoZSAxNiBiaXQgd2F2ZSBjb2RlYyBpZCAqLwotI2RlZmluZSBNU19XQVZFX0ZPVVJDQyhjb2RlY2lkKSAgR1NUX01BS0VfRk9VUkNDKCBcCi0gICAgICAgICdtJywgJ3MnLCAoKGNvZGVjaWQpPj44KSYweGZmLCAoKGNvZGVjaWQpJjB4ZmYpKQotCi0vKiBNUEVHIEFwcGxpY2F0aW9uIEZvcm1hdCAsIFN0ZXJlbyBWaWRlbyAqLwotI2RlZmluZSBGT1VSQ0Nfc3MwMSAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywncycsJzAnLCcxJykKLSNkZWZpbmUgRk9VUkNDX3NzMDIgICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ3MnLCcwJywnMicpCi0jZGVmaW5lIEZPVVJDQ19zdm1pICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCd2JywnbScsJ2knKQotI2RlZmluZSBGT1VSQ0Nfc2NkaSAgICAgR1NUX01BS0VfRk9VUkNDKCdzJywnYycsJ2QnLCdpJykKLQotLyogUHJvdGVjdGVkIHN0cmVhbXMgKi8KLSNkZWZpbmUgRk9VUkNDX2VuY3YgICAgIEdTVF9NQUtFX0ZPVVJDQygnZScsJ24nLCdjJywndicpCi0jZGVmaW5lIEZPVVJDQ19lbmNhICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2UnLCduJywnYycsJ2EnKQotI2RlZmluZSBGT1VSQ0NfZW5jdCAgICAgR1NUX01BS0VfRk9VUkNDKCdlJywnbicsJ2MnLCd0JykKLSNkZWZpbmUgRk9VUkNDX2VuY3MgICAgIEdTVF9NQUtFX0ZPVVJDQygnZScsJ24nLCdjJywncycpCi0jZGVmaW5lIEZPVVJDQ19zaW5mICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdpJywnbicsJ2YnKQotI2RlZmluZSBGT1VSQ0NfZnJtYSAgICAgR1NUX01BS0VfRk9VUkNDKCdmJywncicsJ20nLCdhJykKLSNkZWZpbmUgRk9VUkNDX3NjaG0gICAgIEdTVF9NQUtFX0ZPVVJDQygncycsJ2MnLCdoJywnbScpCi0jZGVmaW5lIEZPVVJDQ19zY2hpICAgICBHU1RfTUFLRV9GT1VSQ0MoJ3MnLCdjJywnaCcsJ2knKQotCi0vKiBDb21tb24gRW5jcnlwdGlvbiAqLwotI2RlZmluZSBGT1VSQ0NfcHNzaCAgICAgR1NUX01BS0VfRk9VUkNDKCdwJywncycsJ3MnLCdoJykKLSNkZWZpbmUgRk9VUkNDX3RlbmMgICAgIEdTVF9NQUtFX0ZPVVJDQygndCcsJ2UnLCduJywnYycpCi0jZGVmaW5lIEZPVVJDQ19jZW5jICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2MnLCdlJywnbicsJ2MnKQotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19GT1VSQ0NfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L2dzdGlzb2ZmLmMgYi9nc3QvaXNvbXA0L2dzdGlzb2ZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjOWYxZWQuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9nc3Rpc29mZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qCi0gKiBJU08gRmlsZSBGb3JtYXQgcGFyc2luZyBsaWJyYXJ5Ci0gKgotICogZ3N0aXNvZmYuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBBdXRob3I6IFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQG9zZy5zYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkgKENPUFlJTkcpOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiZ3N0aXNvZmYuaCIKLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+Ci0KLXZvaWQKLWdzdF9pc29mZl9xdF9zaWR4X3BhcnNlcl9pbml0IChHc3RTaWR4UGFyc2VyICogcGFyc2VyKQotewotICBwYXJzZXItPnN0YXR1cyA9IEdTVF9JU09GRl9RVF9TSURYX1BBUlNFUl9JTklUOwotICBwYXJzZXItPmN1bXVsYXRpdmVfZW50cnlfc2l6ZSA9IDA7Ci0gIHBhcnNlci0+c2lkeC5lbnRyaWVzID0gTlVMTDsKLSAgcGFyc2VyLT5zaWR4LmVudHJpZXNfY291bnQgPSAwOwotfQotCi12b2lkCi1nc3RfaXNvZmZfcXRfc2lkeF9wYXJzZXJfY2xlYXIgKEdzdFNpZHhQYXJzZXIgKiBwYXJzZXIpCi17Ci0gIGdfZnJlZSAocGFyc2VyLT5zaWR4LmVudHJpZXMpOwotICBwYXJzZXItPnNpZHguZW50cmllcyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaXNvZmZfcXRfcGFyc2Vfc2lkeF9lbnRyeSAoR3N0U2lkeEJveEVudHJ5ICogZW50cnksIEdzdEJ5dGVSZWFkZXIgKiByZWFkZXIpCi17Ci0gIGd1aW50MzIgYXV4OwotCi0gIGF1eCA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgZW50cnktPnJlZl90eXBlID0gYXV4ID4+IDMxOwotICBlbnRyeS0+c2l6ZSA9IGF1eCAmIDB4N0ZGRkZGRkY7Ci0gIGVudHJ5LT5kdXJhdGlvbiA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgYXV4ID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBlbnRyeS0+c3RhcnRzX3dpdGhfc2FwID0gYXV4ID4+IDMxOwotICBlbnRyeS0+c2FwX3R5cGUgPSAoKGF1eCA+PiAyOCkgJiAweDcpOwotICBlbnRyeS0+c2FwX2RlbHRhX3RpbWUgPSBhdXggJiAweEZGRkZGRkY7Ci19Ci0KLUdzdElzb2ZmUGFyc2VyUmVzdWx0Ci1nc3RfaXNvZmZfcXRfc2lkeF9wYXJzZXJfYWRkX2RhdGEgKEdzdFNpZHhQYXJzZXIgKiBwYXJzZXIsCi0gICAgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBnaW50IGxlbmd0aCwgZ3VpbnQgKiBjb25zdW1lZCkKLXsKLSAgR3N0SXNvZmZQYXJzZXJSZXN1bHQgcmVzID0gR1NUX0lTT0ZGX1FUX1BBUlNFUl9PSzsKLSAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0gIGdzaXplIHJlbWFpbmluZzsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0KLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGJ1ZmZlciwgbGVuZ3RoKTsKLQotICBzd2l0Y2ggKHBhcnNlci0+c3RhdHVzKSB7Ci0gICAgY2FzZSBHU1RfSVNPRkZfUVRfU0lEWF9QQVJTRVJfSU5JVDoKLSAgICAgIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlcikgPCBHU1RfSVNPRkZfUVRfRlVMTF9CT1hfU0laRSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgcGFyc2VyLT5zaXplID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSAgICAgIGZvdXJjYyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2xlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0gICAgICBpZiAoZm91cmNjICE9IEdTVF9JU09GRl9RVF9GT1VSQ0NfU0lEWCkgewotICAgICAgICByZXMgPSBHU1RfSVNPRkZfUVRfUEFSU0VSX1VORVhQRUNURUQ7Ci0gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmcmVhZGVyLCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAocGFyc2VyLT5zaXplID09IDEpIHsKLSAgICAgICAgaWYgKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKSA8IDEyKSB7Ci0gICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NldF9wb3MgKCZyZWFkZXIsIDApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyc2VyLT5zaXplID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSAgICAgIH0KLSAgICAgIGlmIChwYXJzZXItPnNpemUgPT0gMCkgewotICAgICAgICByZXMgPSBHU1RfSVNPRkZfUVRfUEFSU0VSX0VSUk9SOwotICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfc2V0X3BvcyAoJnJlYWRlciwgMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgcGFyc2VyLT5zaWR4LnZlcnNpb24gPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0gICAgICBwYXJzZXItPnNpZHguZmxhZ3MgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9sZV91bmNoZWNrZWQgKCZyZWFkZXIpOwotCi0gICAgICBwYXJzZXItPnN0YXR1cyA9IEdTVF9JU09GRl9RVF9TSURYX1BBUlNFUl9IRUFERVI7Ci0KLSAgICBjYXNlIEdTVF9JU09GRl9RVF9TSURYX1BBUlNFUl9IRUFERVI6Ci0gICAgICByZW1haW5pbmcgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlcik7Ci0gICAgICBpZiAocmVtYWluaW5nIDwgMTIgKyAocGFyc2VyLT5zaWR4LnZlcnNpb24gPT0gMCA/IDggOiAxNikpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIHBhcnNlci0+c2lkeC5yZWZfaWQgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZyZWFkZXIpOwotICAgICAgcGFyc2VyLT5zaWR4LnRpbWVzY2FsZSA9Ci0gICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSAgICAgIGlmIChwYXJzZXItPnNpZHgudmVyc2lvbiA9PSAwKSB7Ci0gICAgICAgIHBhcnNlci0+c2lkeC5lYXJsaWVzdF9wdHMgPQotICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSAgICAgICAgcGFyc2VyLT5zaWR4LmZpcnN0X29mZnNldCA9IHBhcnNlci0+c2lkeC5lYXJsaWVzdF9wdHMgPQotICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcnNlci0+c2lkeC5lYXJsaWVzdF9wdHMgPQotICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkICgmcmVhZGVyKTsKLSAgICAgICAgcGFyc2VyLT5zaWR4LmZpcnN0X29mZnNldCA9Ci0gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZV91bmNoZWNrZWQgKCZyZWFkZXIpOwotICAgICAgfQotICAgICAgLyogc2tpcCAyIHJlc2VydmVkIGJ5dGVzICovCi0gICAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZyZWFkZXIsIDIpOwotICAgICAgcGFyc2VyLT5zaWR4LmVudHJpZXNfY291bnQgPQotICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAoJnJlYWRlcik7Ci0KLSAgICAgIEdTVF9MT0cgKCJUaW1lc2NhbGU6ICUiIEdfR1VJTlQzMl9GT1JNQVQsIHBhcnNlci0+c2lkeC50aW1lc2NhbGUpOwotICAgICAgR1NUX0xPRyAoIkVhcmxpZXN0IHB0czogJSIgR19HVUlOVDY0X0ZPUk1BVCwgcGFyc2VyLT5zaWR4LmVhcmxpZXN0X3B0cyk7Ci0gICAgICBHU1RfTE9HICgiRmlyc3Qgb2Zmc2V0OiAlIiBHX0dVSU5UNjRfRk9STUFULCBwYXJzZXItPnNpZHguZmlyc3Rfb2Zmc2V0KTsKLQotICAgICAgcGFyc2VyLT5jdW11bGF0aXZlX3B0cyA9Ci0gICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAocGFyc2VyLT5zaWR4LmVhcmxpZXN0X3B0cywKLSAgICAgICAgICBHU1RfU0VDT05ELCBwYXJzZXItPnNpZHgudGltZXNjYWxlKTsKLQotICAgICAgaWYgKHBhcnNlci0+c2lkeC5lbnRyaWVzX2NvdW50KSB7Ci0gICAgICAgIHBhcnNlci0+c2lkeC5lbnRyaWVzID0KLSAgICAgICAgICAgIGdfbWFsbG9jIChzaXplb2YgKEdzdFNpZHhCb3hFbnRyeSkgKiBwYXJzZXItPnNpZHguZW50cmllc19jb3VudCk7Ci0gICAgICB9Ci0gICAgICBwYXJzZXItPnNpZHguZW50cnlfaW5kZXggPSAwOwotCi0gICAgICBwYXJzZXItPnN0YXR1cyA9IEdTVF9JU09GRl9RVF9TSURYX1BBUlNFUl9EQVRBOwotCi0gICAgY2FzZSBHU1RfSVNPRkZfUVRfU0lEWF9QQVJTRVJfREFUQToKLSAgICAgIHdoaWxlIChwYXJzZXItPnNpZHguZW50cnlfaW5kZXggPCBwYXJzZXItPnNpZHguZW50cmllc19jb3VudCkgewotICAgICAgICBHc3RTaWR4Qm94RW50cnkgKmVudHJ5ID0KLSAgICAgICAgICAgICZwYXJzZXItPnNpZHguZW50cmllc1twYXJzZXItPnNpZHguZW50cnlfaW5kZXhdOwotCi0gICAgICAgIHJlbWFpbmluZyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nICgmcmVhZGVyKTsKLSAgICAgICAgaWYgKHJlbWFpbmluZyA8IDEyKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGVudHJ5LT5vZmZzZXQgPSBwYXJzZXItPmN1bXVsYXRpdmVfZW50cnlfc2l6ZTsKLSAgICAgICAgZW50cnktPnB0cyA9IHBhcnNlci0+Y3VtdWxhdGl2ZV9wdHM7Ci0gICAgICAgIGdzdF9pc29mZl9xdF9wYXJzZV9zaWR4X2VudHJ5IChlbnRyeSwgJnJlYWRlcik7Ci0gICAgICAgIGVudHJ5LT5kdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQgKGVudHJ5LT5kdXJhdGlvbiwKLSAgICAgICAgICAgIEdTVF9TRUNPTkQsIHBhcnNlci0+c2lkeC50aW1lc2NhbGUpOwotICAgICAgICBwYXJzZXItPmN1bXVsYXRpdmVfZW50cnlfc2l6ZSArPSBlbnRyeS0+c2l6ZTsKLSAgICAgICAgcGFyc2VyLT5jdW11bGF0aXZlX3B0cyArPSBlbnRyeS0+ZHVyYXRpb247Ci0KLSAgICAgICAgR1NUX0xPRyAoIlNpZHggZW50cnkgJWQpIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBwdHM6ICUiCi0gICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIgLSBzaXplICUiCi0gICAgICAgICAgICBHX0dVSU5UMzJfRk9STUFULCBwYXJzZXItPnNpZHguZW50cnlfaW5kZXgsIGVudHJ5LT5vZmZzZXQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChlbnRyeS0+cHRzKSwgR1NUX1RJTUVfQVJHUyAoZW50cnktPmR1cmF0aW9uKSwKLSAgICAgICAgICAgIGVudHJ5LT5zaXplKTsKLQotICAgICAgICBwYXJzZXItPnNpZHguZW50cnlfaW5kZXgrKzsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhcnNlci0+c2lkeC5lbnRyeV9pbmRleCA9PSBwYXJzZXItPnNpZHguZW50cmllc19jb3VudCkKLSAgICAgICAgcGFyc2VyLT5zdGF0dXMgPSBHU1RfSVNPRkZfUVRfU0lEWF9QQVJTRVJfRklOSVNIRUQ7Ci0gICAgICBlbHNlCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0lTT0ZGX1FUX1NJRFhfUEFSU0VSX0ZJTklTSEVEOgotICAgICAgcGFyc2VyLT5zaWR4LmVudHJ5X2luZGV4ID0gMDsKLSAgICAgIHJlcyA9IEdTVF9JU09GRl9RVF9QQVJTRVJfRE9ORTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgKmNvbnN1bWVkID0gZ3N0X2J5dGVfcmVhZGVyX2dldF9wb3MgKCZyZWFkZXIpOwotICByZXR1cm4gcmVzOwotfQotCi1Hc3RJc29mZlBhcnNlclJlc3VsdAotZ3N0X2lzb2ZmX3F0X3NpZHhfcGFyc2VyX2FkZF9idWZmZXIgKEdzdFNpZHhQYXJzZXIgKiBwYXJzZXIsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBndWludCAqIGNvbnN1bWVkKQotewotICBHc3RJc29mZlBhcnNlclJlc3VsdCByZXMgPSBHU1RfSVNPRkZfUVRfUEFSU0VSX09LOwotICBHc3RNYXBJbmZvIGluZm87Ci0KLSAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKSkgewotICAgICpjb25zdW1lZCA9IDA7Ci0gICAgcmV0dXJuIEdTVF9JU09GRl9RVF9QQVJTRVJfRVJST1I7Ci0gIH0KLQotICByZXMgPQotICAgICAgZ3N0X2lzb2ZmX3F0X3NpZHhfcGFyc2VyX2FkZF9kYXRhIChwYXJzZXIsIGluZm8uZGF0YSwgaW5mby5zaXplLAotICAgICAgY29uc3VtZWQpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmluZm8pOwotICByZXR1cm4gcmVzOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9nc3Rpc29mZi5oIGIvZ3N0L2lzb21wNC9nc3Rpc29mZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmZiZjMzLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvZ3N0aXNvZmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogSVNPIEZpbGUgRm9ybWF0IHBhcnNpbmcgbGlicmFyeQotICoKLSAqIGdzdGlzb2ZmLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgQXV0aG9yOiBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0Bvc2cuc2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5IChDT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9JU09GRl9RVF9IX18KLSNkZWZpbmUgX19HU1RfSVNPRkZfUVRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX0lTT0ZGX1FUX1BBUlNFUl9PSywKLSAgR1NUX0lTT0ZGX1FUX1BBUlNFUl9ET05FLAotICBHU1RfSVNPRkZfUVRfUEFSU0VSX1VORVhQRUNURUQsCi0gIEdTVF9JU09GRl9RVF9QQVJTRVJfRVJST1IKLX0gR3N0SXNvZmZQYXJzZXJSZXN1bHQ7Ci0KLS8qIHRoaXMgaXMgdGhlIG1pbmltdW0gc2l6ZSwgaXQgY2FuIGJlIGxhcmdlciBpZiBpdAotICogdXNlcyBleHRlbmRlZCBzaXplIG9yIHR5cGUgKi8KLSNkZWZpbmUgR1NUX0lTT0ZGX1FUX0ZVTExfQk9YX1NJWkUgMTIKLQotI2RlZmluZSBHU1RfSVNPRkZfUVRfRk9VUkNDX1NJRFggR1NUX01BS0VfRk9VUkNDKCdzJywnaScsJ2QnLCd4JykKLXR5cGVkZWYgc3RydWN0IF9Hc3RTaWR4Qm94RW50cnkKLXsKLSAgZ2Jvb2xlYW4gcmVmX3R5cGU7Ci0gIGd1aW50MzIgc2l6ZTsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotICBnYm9vbGVhbiBzdGFydHNfd2l0aF9zYXA7Ci0gIGd1aW50OCBzYXBfdHlwZTsKLSAgZ3VpbnQzMiBzYXBfZGVsdGFfdGltZTsKLQotICBndWludDY0IG9mZnNldDsKLSAgR3N0Q2xvY2tUaW1lIHB0czsKLX0gR3N0U2lkeEJveEVudHJ5OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0U2lkeEJveAotewotICBndWludDggdmVyc2lvbjsKLSAgZ3VpbnQzMiBmbGFnczsKLQotICBndWludDMyIHJlZl9pZDsKLSAgZ3VpbnQzMiB0aW1lc2NhbGU7Ci0gIGd1aW50NjQgZWFybGllc3RfcHRzOwotICBndWludDY0IGZpcnN0X29mZnNldDsKLQotICBnaW50IGVudHJ5X2luZGV4OwotICBnaW50IGVudHJpZXNfY291bnQ7Ci0KLSAgR3N0U2lkeEJveEVudHJ5ICplbnRyaWVzOwotfSBHc3RTaWR4Qm94OwotCi10eXBlZGVmIGVudW0gX0dzdFNpZHhQYXJzZXJTdGF0dXMKLXsKLSAgR1NUX0lTT0ZGX1FUX1NJRFhfUEFSU0VSX0lOSVQsCi0gIEdTVF9JU09GRl9RVF9TSURYX1BBUlNFUl9IRUFERVIsCi0gIEdTVF9JU09GRl9RVF9TSURYX1BBUlNFUl9EQVRBLAotICBHU1RfSVNPRkZfUVRfU0lEWF9QQVJTRVJfRklOSVNIRUQKLX0gR3N0U2lkeFBhcnNlclN0YXR1czsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNpZHhQYXJzZXIKLXsKLSAgR3N0U2lkeFBhcnNlclN0YXR1cyBzdGF0dXM7Ci0KLSAgZ3VpbnQ2NCBzaXplOwotICBndWludDY0IGN1bXVsYXRpdmVfZW50cnlfc2l6ZTsKLSAgZ3VpbnQ2NCBjdW11bGF0aXZlX3B0czsKLQotICBHc3RTaWR4Qm94IHNpZHg7Ci19IEdzdFNpZHhQYXJzZXI7Ci0KLXZvaWQgZ3N0X2lzb2ZmX3F0X3NpZHhfcGFyc2VyX2luaXQgKEdzdFNpZHhQYXJzZXIgKiBwYXJzZXIpOwotdm9pZCBnc3RfaXNvZmZfcXRfc2lkeF9wYXJzZXJfY2xlYXIgKEdzdFNpZHhQYXJzZXIgKiBwYXJzZXIpOwotR3N0SXNvZmZQYXJzZXJSZXN1bHQgZ3N0X2lzb2ZmX3F0X3NpZHhfcGFyc2VyX2FkZF9kYXRhIChHc3RTaWR4UGFyc2VyICogcGFyc2VyLCBjb25zdCBndWludDggKiBidWZmZXIsIGdpbnQgbGVuZ3RoLCBndWludCAqIGNvbnN1bWVkKTsKLUdzdElzb2ZmUGFyc2VyUmVzdWx0IGdzdF9pc29mZl9xdF9zaWR4X3BhcnNlcl9hZGRfYnVmZmVyIChHc3RTaWR4UGFyc2VyICogcGFyc2VyLCBHc3RCdWZmZXIgKiBidWYsIGd1aW50ICogY29uc3VtZWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfSVNPRkZfUVRfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvZ3N0cXRtb292cmVjb3Zlci5jIGIvZ3N0L2lzb21wNC9nc3RxdG1vb3ZyZWNvdmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYjIyZWIuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9nc3RxdG1vb3ZyZWNvdmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODEgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qCi0gKiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgU291cmNlIENvZGUgaXMgbGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBTZWUgZnVydGhlciBleHBsYW5hdGlvbiBhdHRhY2hlZCBpbiBMaWNlbnNlIFN0YXRlbWVudCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGZpbGUKLSAqIExJQ0VOU0UpLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXF0bW9vdnJlY292ZXIKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogVXRpbGl0eSBlbGVtZW50IGZvciByZWNvdmVyaW5nIHVuZmluaXNoZWQgcXVpY2t0aW1lIGZpbGVzCi0gKgotICogPHJlZnNlY3QyPgotICogPHBhcmE+Ci0gKiBUaGlzIGVsZW1lbnQgcmVjb3ZlcnMgcXVpY2t0aW1lIGZpbGVzIGNyZWF0ZWQgd2l0aCBxdG11eCB1c2luZyB0aGUgbW9vdgotICogcmVjb3ZlcnkgZmVhdHVyZS4KLSAqIDwvcGFyYT4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiA8cGFyYT4KLSAqIDxwcm9ncmFtbGlzdGluZz4KLSAqIFRPRE8KLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gKiA8L3BhcmE+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAiZ3N0cXRtb292cmVjb3Zlci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcXRfbW9vdl9yZWNvdmVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9xdF9tb292X3JlY292ZXJfZGVidWcKLQotLyogUVRNb292UmVjb3ZlciBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1JFQ09WRVJZX0lOUFVULAotICBQUk9QX0JST0tFTl9JTlBVVCwKLSAgUFJPUF9GSVhFRF9PVVRQVVQsCi0gIFBST1BfRkFTVF9TVEFSVF9NT0RFCi19OwotCi0jZGVmaW5lIGdzdF9xdF9tb292X3JlY292ZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UVRNb292UmVjb3ZlciwgZ3N0X3F0X21vb3ZfcmVjb3ZlciwgR1NUX1RZUEVfUElQRUxJTkUpOwotCi0vKiBwcm9wZXJ0eSBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGdzdF9xdF9tb292X3JlY292ZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3F0X21vb3ZfcmVjb3Zlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcXRfbW9vdl9yZWNvdmVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9xdF9tb292X3JlY292ZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X21vb3ZfcmVjb3Zlcl9jbGFzc19pbml0IChHc3RRVE1vb3ZSZWNvdmVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3F0X21vb3ZfcmVjb3Zlcl9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3F0X21vb3ZfcmVjb3Zlcl9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9xdF9tb292X3JlY292ZXJfc2V0X3Byb3BlcnR5OwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9xdF9tb292X3JlY292ZXJfY2hhbmdlX3N0YXRlOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRklYRURfT1VUUFVULAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImZpeGVkLW91dHB1dCIsCi0gICAgICAgICAgIlBhdGggdG8gd3JpdGUgdGhlIGZpeGVkIGZpbGUiLAotICAgICAgICAgICJQYXRoIHRvIHdyaXRlIHRoZSBmaXhlZCBmaWxlIHRvICh1c2VkIGFzIG91dHB1dCkiLAotICAgICAgICAgIE5VTEwsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JST0tFTl9JTlBVVCwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJicm9rZW4taW5wdXQiLAotICAgICAgICAgICJQYXRoIHRvIGJyb2tlbiBpbnB1dCBmaWxlIiwKLSAgICAgICAgICAiUGF0aCB0byBicm9rZW4gaW5wdXQgZmlsZS4gKElmIHF0bXV4IHdhcyBvbiBmYXN0c3RhcnQgbW9kZSwgdGhpcyAiCi0gICAgICAgICAgImZpbGUgaXMgdGhlIGZhc3RzdGFydCBmaWxlKSIsIE5VTEwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVDT1ZFUllfSU5QVVQsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgicmVjb3ZlcnktaW5wdXQiLAotICAgICAgICAgICJQYXRoIHRvIHJlY292ZXJ5IGZpbGUiLAotICAgICAgICAgICJQYXRoIHRvIHJlY292ZXJ5IGZpbGUgKHVzZWQgYXMgaW5wdXQpIiwgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GQVNUX1NUQVJUX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImZhc3RzdGFydC1tb2RlIiwKLSAgICAgICAgICAiSWYgdGhlIGJyb2tlbiBpbnB1dCBpcyBmcm9tIGZhc3RzdGFydCBtb2RlIiwKLSAgICAgICAgICAiSWYgdGhlIGJyb2tlbiBpbnB1dCBpcyBmcm9tIGZhc3RzdGFydCBtb2RlIiwKLSAgICAgICAgICBGQUxTRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9xdF9tb292X3JlY292ZXJfZGVidWcsICJxdG1vb3ZyZWNvdmVyIiwgMCwKLSAgICAgICJRVCBNb292aWUgUmVjb3ZlciIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJRVCBNb292IFJlY292ZXIiLAotICAgICAgIlV0aWwiLCAiUmVjb3ZlcnMgdW5maW5pc2hlZCBxdG11eCBmaWxlcyIsCi0gICAgICAiVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbW9vdl9yZWNvdmVyX2luaXQgKEdzdFFUTW9vdlJlY292ZXIgKiBxdG1yKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X21vb3ZfcmVjb3Zlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X21vb3ZfcmVjb3Zlcl9ydW4gKHZvaWQgKmRhdGEpCi17Ci0gIEZJTEUgKm1vb3ZyZWMgPSBOVUxMOwotICBGSUxFICptZGF0aW5wdXQgPSBOVUxMOwotICBGSUxFICpvdXRwdXQgPSBOVUxMOwotICBNZGF0UmVjb3ZGaWxlICptZGF0X3JlY292ID0gTlVMTDsKLSAgTW9vdlJlY292RmlsZSAqbW9vdl9yZWNvdiA9IE5VTEw7Ci0gIEdzdFFUTW9vdlJlY292ZXIgKnF0bXIgPSBHU1RfUVRfTU9PVl9SRUNPVkVSX0NBU1QgKGRhdGEpOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0bXIsICJTdGFydGluZyB0YXNrIik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtciwgIlZhbGlkYXRpbmcgcHJvcGVydGllcyIpOwotICBHU1RfT0JKRUNUX0xPQ0sgKHF0bXIpOwotICAvKiB2YWxpZGF0ZSBwcm9wZXJ0aWVzICovCi0gIGlmIChxdG1yLT5icm9rZW5faW5wdXQgPT0gTlVMTCkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG1yKTsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtciwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoIlBsZWFzZSBzZXQgYnJva2VuLWlucHV0IHByb3BlcnR5IiksIChOVUxMKSk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLSAgaWYgKHF0bXItPnJlY292ZXJ5X2lucHV0ID09IE5VTEwpIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtcik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0bXIsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKCJQbGVhc2Ugc2V0IHJlY292ZXJ5LWlucHV0IHByb3BlcnR5IiksIChOVUxMKSk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLSAgaWYgKHF0bXItPmZpeGVkX291dHB1dCA9PSBOVUxMKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG1yLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICgiUGxlYXNlIHNldCBmaXhlZC1vdXRwdXQgcHJvcGVydHkiKSwgKE5VTEwpKTsKLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXIsICJPcGVuaW5nIGlucHV0L291dHB1dCBmaWxlcyIpOwotICAvKiBvcGVuIGZpbGVzICovCi0gIG1vb3ZyZWMgPSBnX2ZvcGVuIChxdG1yLT5yZWNvdmVyeV9pbnB1dCwgInJiIik7Ci0gIGlmIChtb292cmVjID09IE5VTEwpIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtcik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0bXIsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICgiRmFpbGVkIHRvIG9wZW4gcmVjb3ZlcnktaW5wdXQgZmlsZSIpLCAoTlVMTCkpOwotICAgIGdvdG8gZW5kOwotICB9Ci0KLSAgbWRhdGlucHV0ID0gZ19mb3BlbiAocXRtci0+YnJva2VuX2lucHV0LCAicmIiKTsKLSAgaWYgKG1kYXRpbnB1dCA9PSBOVUxMKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG1yLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoIkZhaWxlZCB0byBvcGVuIGJyb2tlbi1pbnB1dCBmaWxlIiksIChOVUxMKSk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLSAgb3V0cHV0ID0gZ19mb3BlbiAocXRtci0+Zml4ZWRfb3V0cHV0LCAid2IrIik7Ci0gIGlmIChvdXRwdXQgPT0gTlVMTCkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG1yKTsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtciwgUkVTT1VSQ0UsIE9QRU5fUkVBRF9XUklURSwKLSAgICAgICAgKCJGYWlsZWQgdG8gb3BlbiBmaXhlZC1vdXRwdXQgZmlsZSIpLCAoTlVMTCkpOwotICAgIGdvdG8gZW5kOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG1yKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG1yLCAiUGFyc2luZyBpbnB1dCBmaWxlcyIpOwotICAvKiBub3cgY3JlYXRlIG91ciBzdHJ1Y3R1cmVzICovCi0gIG1kYXRfcmVjb3YgPSBtZGF0X3JlY292X2ZpbGVfY3JlYXRlIChtZGF0aW5wdXQsIHF0bXItPmZhc3RzdGFydF9tb2RlLCAmZXJyKTsKLSAgbWRhdGlucHV0ID0gTlVMTDsKLSAgaWYgKG1kYXRfcmVjb3YgPT0gTlVMTCkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG1yLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoIkJyb2tlbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQgY29ycmVjdGx5IiksIChOVUxMKSk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLSAgbW9vdl9yZWNvdiA9IG1vb3ZfcmVjb3ZfZmlsZV9jcmVhdGUgKG1vb3ZyZWMsICZlcnIpOwotICBtb292cmVjID0gTlVMTDsKLSAgaWYgKG1vb3ZfcmVjb3YgPT0gTlVMTCkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG1yLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAoIlJlY292ZXJ5IGZpbGUgY291bGQgbm90IGJlIHBhcnNlZCBjb3JyZWN0bHkiKSwgKE5VTEwpKTsKLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIC8qIG5vdyBwYXJzZSB0aGUgYnVmZmVycyBkYXRhIGZyb20gbW9vdnJlYyAqLwotICBpZiAoIW1vb3ZfcmVjb3ZfcGFyc2VfYnVmZmVycyAobW9vdl9yZWNvdiwgbWRhdF9yZWNvdiwgJmVycikpIHsKLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXIsICJXcml0aW5nIGZpeGVkIGZpbGUgdG8gb3V0cHV0Iik7Ci0gIGlmICghbW9vdl9yZWNvdl93cml0ZV9maWxlIChtb292X3JlY292LCBtZGF0X3JlY292LCBvdXRwdXQsICZlcnIpKSB7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLQotICAvKiBoZXJlIG1lYW5zIHN1Y2Nlc3MgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtciwgIkZpbmlzaGVkIHN1Y2Nlc3NmdWxseSwgcG9zdGluZyBFT1MiKTsKLSAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChxdG1yKSwKLSAgICAgIGdzdF9tZXNzYWdlX25ld19lb3MgKEdTVF9PQkpFQ1RfQ0FTVCAocXRtcikpKTsKLQotZW5kOgotICBHU1RfTE9HX09CSkVDVCAocXRtciwgIkZpbmFsaXppbmcgdGFzayIpOwotICBpZiAoZXJyKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0bXIsIFJFU09VUkNFLCBGQUlMRUQsICgiJXMiLCBlcnItPm1lc3NhZ2UpLCAoTlVMTCkpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgfQotCi0gIGlmIChtb292X3JlY292KQotICAgIG1vb3ZfcmVjb3ZfZmlsZV9mcmVlIChtb292X3JlY292KTsKLSAgaWYgKG1vb3ZyZWMpCi0gICAgZmNsb3NlIChtb292cmVjKTsKLQotICBpZiAobWRhdF9yZWNvdikKLSAgICBtZGF0X3JlY292X2ZpbGVfZnJlZSAobWRhdF9yZWNvdik7Ci0gIGlmIChtZGF0aW5wdXQpCi0gICAgZmNsb3NlIChtZGF0aW5wdXQpOwotCi0gIGlmIChvdXRwdXQpCi0gICAgZmNsb3NlIChvdXRwdXQpOwotICBHU1RfTE9HX09CSkVDVCAocXRtciwgIkxlYXZpbmcgdGFzayIpOwotICBnc3RfdGFza19zdG9wIChxdG1yLT50YXNrKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tb292X3JlY292ZXJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFFUTW9vdlJlY292ZXIgKnF0bXIgPSBHU1RfUVRfTU9PVl9SRUNPVkVSX0NBU1QgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdG1yKTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZBU1RfU1RBUlRfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBxdG1yLT5mYXN0c3RhcnRfbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQlJPS0VOX0lOUFVUOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgcXRtci0+YnJva2VuX2lucHV0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUNPVkVSWV9JTlBVVDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHF0bXItPnJlY292ZXJ5X2lucHV0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GSVhFRF9PVVRQVVQ6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBxdG1yLT5maXhlZF9vdXRwdXQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbW9vdl9yZWNvdmVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RRVE1vb3ZSZWNvdmVyICpxdG1yID0gR1NUX1FUX01PT1ZfUkVDT1ZFUl9DQVNUIChvYmplY3QpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocXRtcik7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GQVNUX1NUQVJUX01PREU6Ci0gICAgICBxdG1yLT5mYXN0c3RhcnRfbW9kZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CUk9LRU5fSU5QVVQ6Ci0gICAgICBnX2ZyZWUgKHF0bXItPmJyb2tlbl9pbnB1dCk7Ci0gICAgICBxdG1yLT5icm9rZW5faW5wdXQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUNPVkVSWV9JTlBVVDoKLSAgICAgIGdfZnJlZSAocXRtci0+cmVjb3ZlcnlfaW5wdXQpOwotICAgICAgcXRtci0+cmVjb3ZlcnlfaW5wdXQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GSVhFRF9PVVRQVVQ6Ci0gICAgICBnX2ZyZWUgKHF0bXItPmZpeGVkX291dHB1dCk7Ci0gICAgICBxdG1yLT5maXhlZF9vdXRwdXQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXIpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9xdF9tb292X3JlY292ZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFFUTW9vdlJlY292ZXIgKnF0bXIgPSBHU1RfUVRfTU9PVl9SRUNPVkVSX0NBU1QgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgcXRtci0+dGFzayA9IGdzdF90YXNrX25ldyAoZ3N0X3F0X21vb3ZfcmVjb3Zlcl9ydW4sIHF0bXIsIE5VTEwpOwotICAgICAgZ19yZWNfbXV0ZXhfaW5pdCAoJnF0bXItPnRhc2tfbXV0ZXgpOwotICAgICAgZ3N0X3Rhc2tfc2V0X2xvY2sgKHF0bXItPnRhc2ssICZxdG1yLT50YXNrX211dGV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGdzdF90YXNrX3N0YXJ0IChxdG1yLT50YXNrKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGdzdF90YXNrX3N0b3AgKHF0bXItPnRhc2spOwotICAgICAgZ3N0X3Rhc2tfam9pbiAocXRtci0+dGFzayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGlmIChnc3RfdGFza19nZXRfc3RhdGUgKHF0bXItPnRhc2spICE9IEdTVF9UQVNLX1NUT1BQRUQpCi0gICAgICAgIEdTVF9FUlJPUiAoInRhc2sgJXAgc2hvdWxkIGJlIHN0b3BwZWQgYnkgbm93IiwgcXRtci0+dGFzayk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChxdG1yLT50YXNrKTsKLSAgICAgIHF0bXItPnRhc2sgPSBOVUxMOwotICAgICAgZ19yZWNfbXV0ZXhfY2xlYXIgKCZxdG1yLT50YXNrX211dGV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0KLWdib29sZWFuCi1nc3RfcXRfbW9vdl9yZWNvdmVyX3JlZ2lzdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicXRtb292cmVjb3ZlciIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9RVF9NT09WX1JFQ09WRVIpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9nc3RxdG1vb3ZyZWNvdmVyLmggYi9nc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg2YzIyMy4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2dzdHF0bW9vdnJlY292ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qIFF1aWNrdGltZSBtdXhlciBwbHVnaW4gZm9yIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9RVF9NT09WX1JFQ09WRVJfSF9fCi0jZGVmaW5lIF9fR1NUX1FUX01PT1ZfUkVDT1ZFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImF0b21zLmgiCi0jaW5jbHVkZSAiYXRvbXNyZWNvdmVyeS5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUVRfTU9PVl9SRUNPVkVSIChnc3RfcXRfbW9vdl9yZWNvdmVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9RVF9NT09WX1JFQ09WRVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUVRfTU9PVl9SRUNPVkVSLCBHc3RRVE1vb3ZSZWNvdmVyKSkKLSNkZWZpbmUgR1NUX1FUX01PT1ZfUkVDT1ZFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUVRfTU9PVl9SRUNPVkVSLCBHc3RRVE1vb3ZSZWNvdmVyKSkKLSNkZWZpbmUgR1NUX0lTX1FUX01PT1ZfUkVDT1ZFUihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9RVF9NT09WX1JFQ09WRVIpKQotI2RlZmluZSBHU1RfSVNfUVRfTU9PVl9SRUNPVkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9RVF9NT09WX1JFQ09WRVIpKQotI2RlZmluZSBHU1RfUVRfTU9PVl9SRUNPVkVSX0NBU1Qob2JqKSAoKEdzdFFUTW9vdlJlY292ZXIqKShvYmopKQotCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RRVE1vb3ZSZWNvdmVyIEdzdFFUTW9vdlJlY292ZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UVRNb292UmVjb3ZlckNsYXNzIEdzdFFUTW9vdlJlY292ZXJDbGFzczsKLQotc3RydWN0IF9Hc3RRVE1vb3ZSZWNvdmVyCi17Ci0gIEdzdFBpcGVsaW5lIHBpcGVsaW5lOwotCi0gIEdzdFRhc2sgKnRhc2s7Ci0gIEdSZWNNdXRleCB0YXNrX211dGV4OwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2Jvb2xlYW4gIGZhc3RzdGFydF9tb2RlOwotICBnY2hhciAgICAqcmVjb3ZlcnlfaW5wdXQ7Ci0gIGdjaGFyICAgICpmaXhlZF9vdXRwdXQ7Ci0gIGdjaGFyICAgICpicm9rZW5faW5wdXQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFFUTW9vdlJlY292ZXJDbGFzcwotewotICBHc3RQaXBlbGluZUNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9xdF9tb292X3JlY292ZXJfZ2V0X3R5cGUgKHZvaWQpOwotZ2Jvb2xlYW4gZ3N0X3F0X21vb3ZfcmVjb3Zlcl9yZWdpc3RlciAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1FUX01PT1ZfUkVDT1ZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmMgYi9nc3QvaXNvbXA0L2dzdHF0bXV4LWRvYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjg1N2Q4Li4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvZ3N0cXRtdXgtZG9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIGRvY3VtZW50YXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNmLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qCi0gKiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgU291cmNlIENvZGUgaXMgbGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBTZWUgZnVydGhlciBleHBsYW5hdGlvbiBhdHRhY2hlZCBpbiBMaWNlbnNlIFN0YXRlbWVudCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGZpbGUKLSAqIExJQ0VOU0UpLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBtcDRtdXggPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW1wNG11eAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBNdXhlciBmb3IgSVNPIE1QRUctNCAoLm1wNCkgZmlsZXMKLSAqCi0gKiBUaGlzIGVsZW1lbnQgbWVyZ2VzIHN0cmVhbXMgKGF1ZGlvIGFuZCB2aWRlbykgaW50byBJU08gTVBFRy00ICgubXA0KSBmaWxlcy4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGJhY2tncm91bmQgaW50ZW5kcyB0byBleHBsYWluIHdoeSB2YXJpb3VzIHNpbWlsYXIgbXV4ZXJzCi0gKiBhcmUgcHJlc2VudCBpbiB0aGlzIHBsdWdpbi4KLSAqCi0gKiBUaGUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL3Jlc291cmNlcy9xdGZpbGVmb3JtYXQucGRmIj4KLSAqIFF1aWNrVGltZSBmaWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uPC91bGluaz4gc2VydmVkIGFzIGJhc2lzIGZvciB0aGUgTVA0IGZpbGUKLSAqIGZvcm1hdCBzcGVjaWZpY2F0aW9uIChtcDRtdXgpLCBhbmQgYXMgc3VjaCB0aGUgUXVpY2tUaW1lIGZpbGUgc3RydWN0dXJlIGlzCi0gKiBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBzby1jYWxsZWQgSVNPIEJhc2UgTWVkaWEgZmlsZSBmb3JtYXQgZGVmaW5lZCBpbgotICogSVNPIDE0NDk2LTEyIChleGNlcHQgZm9yIHNvbWUgbWVkaWEgc3BlY2lmaWMgcGFydHMpLgotICogSW4gdHVybiwgdGhlIGxhdHRlciBJU08gQmFzZSBNZWRpYSBmb3JtYXQgd2FzIGZ1cnRoZXIgc3BlY2lhbGl6ZWQgYXMgYQotICogTW90aW9uIEpQRUctMjAwMCBmaWxlIGZvcm1hdCBpbiBJU08gMTU0NDQtMyAobWoybXV4KQotICogYW5kIGluIHZhcmlvdXMgM0dQUCgyKSBzcGVjcyAoM2dwcG11eCkuCi0gKiBUaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci0gKiBJU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuCi0gKgotICogQSBmZXcgcHJvcGVydGllcyAoI0dzdE1wNE11eDptb3ZpZS10aW1lc2NhbGUsICNHc3RNcDRNdXg6dHJhay10aW1lc2NhbGUpCi0gKiBhbGxvdyBhZGp1c3Rpbmcgc29tZSB0ZWNobmljYWwgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGluIChyYXJlKQotICogY2FzZXMgdG8gcmVzb2x2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBzb21lIHNpdHVhdGlvbnMuCi0gKgotICogU29tZSBvdGhlciBwcm9wZXJ0aWVzIGluZmx1ZW5jZSB0aGUgcmVzdWx0IG1vcmUgZnVuZGFtZW50YWxseS4KLSAqIEEgdHlwaWNhbCBtb3YvbXA0IGZpbGUncyBtZXRhZGF0YSAoYWthIG1vb3YpIGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUKLSAqIGZpbGUsIHNvbWV3aGF0IGNvbnRyYXJ5IHRvIHRoaXMgdXN1YWxseSBiZWluZyBjYWxsZWQgInRoZSBoZWFkZXIiLgotICogSG93ZXZlciwgYSAjR3N0TXA0TXV4OmZhc3RzdGFydCBmaWxlIHdpbGwgKHdpdGggc29tZSBlZmZvcnQpIGFycmFuZ2UgdGhpcyB0bwotICogYmUgbG9jYXRlZCBuZWFyIHN0YXJ0IG9mIHRoZSBmaWxlLCB3aGljaCB0aGVuIGFsbG93cyBpdCBlLmcuIHRvIGJlIHBsYXllZAotICogd2hpbGUgZG93bmxvYWRpbmcuIEFsdGVybmF0aXZlbHksIHJhdGhlciB0aGFuIGhhdmluZyBvbmUgY2h1bmsgb2YgbWV0YWRhdGEgYXQKLSAqIHN0YXJ0IChvciBlbmQpLCB0aGVyZSBjYW4gYmUgc29tZSBtZXRhZGF0YSBhdCBzdGFydCBhbmQgbW9zdCBvZiB0aGUgb3RoZXIKLSAqIGRhdGEgY2FuIGJlIHNwcmVhZCBvdXQgaW50byBmcmFnbWVudHMgb2YgI0dzdE1wNE11eDpmcmFnbWVudC1kdXJhdGlvbi4KLSAqIElmIHN1Y2ggZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotICogI0dzdE1wNE11eDpzdHJlYW1hYmxlIGFsbG93cyBmb3JlZ29pbmcgdG8gYWRkIGluZGV4IG1ldGFkYXRhIChhdCB0aGUgZW5kIG9mCi0gKiBmaWxlKS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGdzdC1sYXVuY2gtMS4wIHY0bDJzcmMgbnVtLWJ1ZmZlcnM9NTAgISBxdWV1ZSAhIHgyNjRlbmMgISBtcDRtdXggISBmaWxlc2luayBsb2NhdGlvbj12aWRlby5tcDQKLSAqIF18Ci0gKiBSZWNvcmRzIGEgdmlkZW8gc3RyZWFtIGNhcHR1cmVkIGZyb20gYSB2NGwyIGRldmljZSwgZW5jb2RlcyBpdCBpbnRvIEguMjY0Ci0gKiBhbmQgbXV4ZXMgaXQgaW50byBhbiBtcDQgZmlsZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gM2dwcG11eCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtM2dwcG11eAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBNdXhlciBmb3IgM0dQUCAoLjNncCkgZmlsZXMKLSAqCi0gKiBUaGlzIGVsZW1lbnQgbWVyZ2VzIHN0cmVhbXMgKGF1ZGlvIGFuZCB2aWRlbykgaW50byAzR1BQICguM2dwKSBmaWxlcy4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGJhY2tncm91bmQgaW50ZW5kcyB0byBleHBsYWluIHdoeSB2YXJpb3VzIHNpbWlsYXIgbXV4ZXJzCi0gKiBhcmUgcHJlc2VudCBpbiB0aGlzIHBsdWdpbi4KLSAqCi0gKiBUaGUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL3Jlc291cmNlcy9xdGZpbGVmb3JtYXQucGRmIj4KLSAqIFF1aWNrVGltZSBmaWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uPC91bGluaz4gc2VydmVkIGFzIGJhc2lzIGZvciB0aGUgTVA0IGZpbGUKLSAqIGZvcm1hdCBzcGVjaWZpY2F0aW9uIChtcDRtdXgpLCBhbmQgYXMgc3VjaCB0aGUgUXVpY2tUaW1lIGZpbGUgc3RydWN0dXJlIGlzCi0gKiBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBzby1jYWxsZWQgSVNPIEJhc2UgTWVkaWEgZmlsZSBmb3JtYXQgZGVmaW5lZCBpbgotICogSVNPIDE0NDk2LTEyIChleGNlcHQgZm9yIHNvbWUgbWVkaWEgc3BlY2lmaWMgcGFydHMpLgotICogSW4gdHVybiwgdGhlIGxhdHRlciBJU08gQmFzZSBNZWRpYSBmb3JtYXQgd2FzIGZ1cnRoZXIgc3BlY2lhbGl6ZWQgYXMgYQotICogTW90aW9uIEpQRUctMjAwMCBmaWxlIGZvcm1hdCBpbiBJU08gMTU0NDQtMyAobWoybXV4KQotICogYW5kIGluIHZhcmlvdXMgM0dQUCgyKSBzcGVjcyAoM2dwcG11eCkuCi0gKiBUaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci0gKiBJU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuCi0gKgotICogQSBmZXcgcHJvcGVydGllcyAoI0dzdDNHUFBNdXg6bW92aWUtdGltZXNjYWxlLCAjR3N0M0dQUE11eDp0cmFrLXRpbWVzY2FsZSkKLSAqIGFsbG93IGFkanVzdGluZyBzb21lIHRlY2huaWNhbCBwYXJhbWV0ZXJzLCB3aGljaCBtaWdodCBiZSB1c2VmdWwgaW4gKHJhcmUpCi0gKiBjYXNlcyB0byByZXNvbHZlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGluIHNvbWUgc2l0dWF0aW9ucy4KLSAqCi0gKiBTb21lIG90aGVyIHByb3BlcnRpZXMgaW5mbHVlbmNlIHRoZSByZXN1bHQgbW9yZSBmdW5kYW1lbnRhbGx5LgotICogQSB0eXBpY2FsIG1vdi9tcDQgZmlsZSdzIG1ldGFkYXRhIChha2EgbW9vdikgaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLAotICogc29tZXdoYXQgY29udHJhcnkgdG8gdGhpcyB1c3VhbGx5IGJlaW5nIGNhbGxlZCAidGhlIGhlYWRlciIuIEhvd2V2ZXIsIGEKLSAqICNHc3QzR1BQTXV4OmZhc3RzdGFydCBmaWxlIHdpbGwgKHdpdGggc29tZSBlZmZvcnQpIGFycmFuZ2UgdGhpcyB0byBiZSBsb2NhdGVkCi0gKiBuZWFyIHN0YXJ0IG9mIHRoZSBmaWxlLCB3aGljaCB0aGVuIGFsbG93cyBpdCBlLmcuIHRvIGJlIHBsYXllZCB3aGlsZQotICogZG93bmxvYWRpbmcuIEFsdGVybmF0aXZlbHksIHJhdGhlciB0aGFuIGhhdmluZyBvbmUgY2h1bmsgb2YgbWV0YWRhdGEgYXQgc3RhcnQKLSAqIChvciBlbmQpLCB0aGVyZSBjYW4gYmUgc29tZSBtZXRhZGF0YSBhdCBzdGFydCBhbmQgbW9zdCBvZiB0aGUgb3RoZXIgZGF0YSBjYW4KLSAqIGJlIHNwcmVhZCBvdXQgaW50byBmcmFnbWVudHMgb2YgI0dzdDNHUFBNdXg6ZnJhZ21lbnQtZHVyYXRpb24uIElmIHN1Y2gKLSAqIGZyYWdtZW50ZWQgbGF5b3V0IGlzIGludGVuZGVkIGZvciBzdHJlYW1pbmcgcHVycG9zZXMsIHRoZW4KLSAqICNHc3QzR1BQTXV4OnN0cmVhbWFibGUgYWxsb3dzIGZvcmVnb2luZyB0byBhZGQgaW5kZXggbWV0YWRhdGEgKGF0IHRoZSBlbmQgb2YKLSAqIGZpbGUpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdjRsMnNyYyBudW0tYnVmZmVycz01MCAhIHF1ZXVlICEgZmZlbmNfaDI2MyAhIDNncHBtdXggISBmaWxlc2luayBsb2NhdGlvbj12aWRlby4zZ3AKLSAqIF18Ci0gKiBSZWNvcmRzIGEgdmlkZW8gc3RyZWFtIGNhcHR1cmVkIGZyb20gYSB2NGwyIGRldmljZSwgZW5jb2RlcyBpdCBpbnRvIEguMjYzCi0gKiBhbmQgbXV4ZXMgaXQgaW50byBhbiAzZ3AgZmlsZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKgotICogRG9jdW1lbnRhdGlvbiBsYXN0IHJldmlld2VkIG9uIDIwMTEtMDQtMjEKLSAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBtajJwbXV4ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tajJtdXgKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTXV4ZXIgZm9yIE1vdGlvbiBKUEVHLTIwMDAgKC5tajIpIGZpbGVzCi0gKgotICogVGhpcyBlbGVtZW50IG1lcmdlcyBzdHJlYW1zIChhdWRpbyBhbmQgdmlkZW8pIGludG8gTUoyICgubWoyKSBmaWxlcy4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGJhY2tncm91bmQgaW50ZW5kcyB0byBleHBsYWluIHdoeSB2YXJpb3VzIHNpbWlsYXIgbXV4ZXJzCi0gKiBhcmUgcHJlc2VudCBpbiB0aGlzIHBsdWdpbi4KLSAqCi0gKiBUaGUgPHVsaW5rIHVybD0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL3Jlc291cmNlcy9xdGZpbGVmb3JtYXQucGRmIj4KLSAqIFF1aWNrVGltZSBmaWxlIGZvcm1hdCBzcGVjaWZpY2F0aW9uPC91bGluaz4gc2VydmVkIGFzIGJhc2lzIGZvciB0aGUgTVA0IGZpbGUKLSAqIGZvcm1hdCBzcGVjaWZpY2F0aW9uIChtcDRtdXgpLCBhbmQgYXMgc3VjaCB0aGUgUXVpY2tUaW1lIGZpbGUgc3RydWN0dXJlIGlzCi0gKiBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBzby1jYWxsZWQgSVNPIEJhc2UgTWVkaWEgZmlsZSBmb3JtYXQgZGVmaW5lZCBpbgotICogSVNPIDE0NDk2LTEyIChleGNlcHQgZm9yIHNvbWUgbWVkaWEgc3BlY2lmaWMgcGFydHMpLgotICogSW4gdHVybiwgdGhlIGxhdHRlciBJU08gQmFzZSBNZWRpYSBmb3JtYXQgd2FzIGZ1cnRoZXIgc3BlY2lhbGl6ZWQgYXMgYQotICogTW90aW9uIEpQRUctMjAwMCBmaWxlIGZvcm1hdCBpbiBJU08gMTU0NDQtMyAobWoybXV4KQotICogYW5kIGluIHZhcmlvdXMgM0dQUCgyKSBzcGVjcyAoM2dwcG11eCkuCi0gKiBUaGUgZnJhZ21lbnRlZCBmaWxlIGZlYXR1cmVzIGRlZmluZWQgKG9ubHkpIGluIElTTyBCYXNlIE1lZGlhIGFyZSB1c2VkIGJ5Ci0gKiBJU01WIGZpbGVzIG1ha2luZyB1cCAoYS5vLikgU21vb3RoIFN0cmVhbWluZyAoaXNtbG11eCkuCi0gKgotICogQSBmZXcgcHJvcGVydGllcyAoI0dzdE1KMk11eDptb3ZpZS10aW1lc2NhbGUsICNHc3RNSjJNdXg6dHJhay10aW1lc2NhbGUpCi0gKiBhbGxvdyBhZGp1c3Rpbmcgc29tZSB0ZWNobmljYWwgcGFyYW1ldGVycywgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGluIChyYXJlKQotICogY2FzZXMgdG8gcmVzb2x2ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBpbiBzb21lIHNpdHVhdGlvbnMuCi0gKgotICogU29tZSBvdGhlciBwcm9wZXJ0aWVzIGluZmx1ZW5jZSB0aGUgcmVzdWx0IG1vcmUgZnVuZGFtZW50YWxseS4KLSAqIEEgdHlwaWNhbCBtb3YvbXA0IGZpbGUncyBtZXRhZGF0YSAoYWthIG1vb3YpIGlzIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKLSAqIHNvbWV3aGF0IGNvbnRyYXJ5IHRvIHRoaXMgdXN1YWxseSBiZWluZyBjYWxsZWQgInRoZSBoZWFkZXIiLiBIb3dldmVyLCBhCi0gKiAjR3N0TUoyTXV4OmZhc3RzdGFydCBmaWxlIHdpbGwgKHdpdGggc29tZSBlZmZvcnQpIGFycmFuZ2UgdGhpcyB0byBiZSBsb2NhdGVkCi0gKiBuZWFyIHN0YXJ0IG9mIHRoZSBmaWxlLCB3aGljaCB0aGVuIGFsbG93cyBpdCBlLmcuIHRvIGJlIHBsYXllZCB3aGlsZQotICogZG93bmxvYWRpbmcuIEFsdGVybmF0aXZlbHksIHJhdGhlciB0aGFuIGhhdmluZyBvbmUgY2h1bmsgb2YgbWV0YWRhdGEgYXQgc3RhcnQKLSAqIChvciBlbmQpLCB0aGVyZSBjYW4gYmUgc29tZSBtZXRhZGF0YSBhdCBzdGFydCBhbmQgbW9zdCBvZiB0aGUgb3RoZXIgZGF0YSBjYW4KLSAqIGJlIHNwcmVhZCBvdXQgaW50byBmcmFnbWVudHMgb2YgI0dzdE1KMk11eDpmcmFnbWVudC1kdXJhdGlvbi4gSWYgc3VjaAotICogZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotICogI0dzdE1KMk11eDpzdHJlYW1hYmxlIGFsbG93cyBmb3JlZ29pbmcgdG8gYWRkIGluZGV4IG1ldGFkYXRhIChhdCB0aGUgZW5kIG9mCi0gKiBmaWxlKS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHY0bDJzcmMgbnVtLWJ1ZmZlcnM9NTAgISBxdWV1ZSAhIGpwMmtlbmMgISBtajJtdXggISBmaWxlc2luayBsb2NhdGlvbj12aWRlby5tajIKLSAqIF18Ci0gKiBSZWNvcmRzIGEgdmlkZW8gc3RyZWFtIGNhcHR1cmVkIGZyb20gYSB2NGwyIGRldmljZSwgZW5jb2RlcyBpdCBpbnRvIEpQRUctMjAwMAotICogYW5kIG11eGVzIGl0IGludG8gYW4gbWoyIGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICoKLSAqIERvY3VtZW50YXRpb24gbGFzdCByZXZpZXdlZCBvbiAyMDExLTA0LTIxCi0gKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gaXNtbG11eCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtaXNtbG11eAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBNdXhlciBmb3IgSVNNTCBzbW9vdGggc3RyZWFtaW5nICguaXNtbCkgZmlsZXMKLSAqCi0gKiBUaGlzIGVsZW1lbnQgbWVyZ2VzIHN0cmVhbXMgKGF1ZGlvIGFuZCB2aWRlbykgaW50byBNSjIgKC5tajIpIGZpbGVzLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCBpbnRlbmRzIHRvIGV4cGxhaW4gd2h5IHZhcmlvdXMgc2ltaWxhciBtdXhlcnMKLSAqIGFyZSBwcmVzZW50IGluIHRoaXMgcGx1Z2luLgotICoKLSAqIFRoZSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvcmVzb3VyY2VzL3F0ZmlsZWZvcm1hdC5wZGYiPgotICogUXVpY2tUaW1lIGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb248L3VsaW5rPiBzZXJ2ZWQgYXMgYmFzaXMgZm9yIHRoZSBNUDQgZmlsZQotICogZm9ybWF0IHNwZWNpZmljYXRpb24gKG1wNG11eCksIGFuZCBhcyBzdWNoIHRoZSBRdWlja1RpbWUgZmlsZSBzdHJ1Y3R1cmUgaXMKLSAqIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIHNvLWNhbGxlZCBJU08gQmFzZSBNZWRpYSBmaWxlIGZvcm1hdCBkZWZpbmVkIGluCi0gKiBJU08gMTQ0OTYtMTIgKGV4Y2VwdCBmb3Igc29tZSBtZWRpYSBzcGVjaWZpYyBwYXJ0cykuCi0gKiBJbiB0dXJuLCB0aGUgbGF0dGVyIElTTyBCYXNlIE1lZGlhIGZvcm1hdCB3YXMgZnVydGhlciBzcGVjaWFsaXplZCBhcyBhCi0gKiBNb3Rpb24gSlBFRy0yMDAwIGZpbGUgZm9ybWF0IGluIElTTyAxNTQ0NC0zIChtajJtdXgpCi0gKiBhbmQgaW4gdmFyaW91cyAzR1BQKDIpIHNwZWNzICgzZ3BwbXV4KS4KLSAqIFRoZSBmcmFnbWVudGVkIGZpbGUgZmVhdHVyZXMgZGVmaW5lZCAob25seSkgaW4gSVNPIEJhc2UgTWVkaWEgYXJlIHVzZWQgYnkKLSAqIElTTVYgZmlsZXMgbWFraW5nIHVwIChhLm8uKSBTbW9vdGggU3RyZWFtaW5nIChpc21sbXV4KS4KLSAqCi0gKiBBIGZldyBwcm9wZXJ0aWVzICgjR3N0SVNNTE11eDptb3ZpZS10aW1lc2NhbGUsICNHc3RJU01MTXV4OnRyYWstdGltZXNjYWxlKQotICogYWxsb3cgYWRqdXN0aW5nIHNvbWUgdGVjaG5pY2FsIHBhcmFtZXRlcnMsIHdoaWNoIG1pZ2h0IGJlIHVzZWZ1bCBpbiAocmFyZSkKLSAqIGNhc2VzIHRvIHJlc29sdmUgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gc29tZSBzaXR1YXRpb25zLgotICoKLSAqIFNvbWUgb3RoZXIgcHJvcGVydGllcyBpbmZsdWVuY2UgdGhlIHJlc3VsdCBtb3JlIGZ1bmRhbWVudGFsbHkuCi0gKiBBIHR5cGljYWwgbW92L21wNCBmaWxlJ3MgbWV0YWRhdGEgKGFrYSBtb292KSBpcyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsCi0gKiBzb21ld2hhdCBjb250cmFyeSB0byB0aGlzIHVzdWFsbHkgYmVpbmcgY2FsbGVkICJ0aGUgaGVhZGVyIi4gSG93ZXZlciwgYQotICogI0dzdElTTUxNdXg6ZmFzdHN0YXJ0IGZpbGUgd2lsbCAod2l0aCBzb21lIGVmZm9ydCkgYXJyYW5nZSB0aGlzIHRvIGJlIGxvY2F0ZWQKLSAqIG5lYXIgc3RhcnQgb2YgdGhlIGZpbGUsIHdoaWNoIHRoZW4gYWxsb3dzIGl0IGUuZy4gdG8gYmUgcGxheWVkIHdoaWxlCi0gKiBkb3dubG9hZGluZy4gQWx0ZXJuYXRpdmVseSwgcmF0aGVyIHRoYW4gaGF2aW5nIG9uZSBjaHVuayBvZiBtZXRhZGF0YSBhdCBzdGFydAotICogKG9yIGVuZCksIHRoZXJlIGNhbiBiZSBzb21lIG1ldGFkYXRhIGF0IHN0YXJ0IGFuZCBtb3N0IG9mIHRoZSBvdGhlciBkYXRhIGNhbgotICogYmUgc3ByZWFkIG91dCBpbnRvIGZyYWdtZW50cyBvZiAjR3N0SVNNTE11eDpmcmFnbWVudC1kdXJhdGlvbi4gSWYgc3VjaAotICogZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotICogI0dzdElTTUxNdXg6c3RyZWFtYWJsZSBhbGxvd3MgZm9yZWdvaW5nIHRvIGFkZCBpbmRleCBtZXRhZGF0YSAoYXQgdGhlIGVuZCBvZgotICogZmlsZSkuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2NGwyc3JjIG51bS1idWZmZXJzPTUwICEgcXVldWUgISBqcDJrZW5jICEgbWoybXV4ICEgZmlsZXNpbmsgbG9jYXRpb249dmlkZW8ubWoyCi0gKiBdfAotICogUmVjb3JkcyBhIHZpZGVvIHN0cmVhbSBjYXB0dXJlZCBmcm9tIGEgdjRsMiBkZXZpY2UsIGVuY29kZXMgaXQgaW50byBKUEVHLTIwMDAKLSAqIGFuZCBtdXhlcyBpdCBpbnRvIGFuIG1qMiBmaWxlLgotICogPC9yZWZzZWN0Mj4KLSAqCi0gKiBEb2N1bWVudGF0aW9uIGxhc3QgcmV2aWV3ZWQgb24gMjAxMS0wNC0yMQotICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L2dzdHF0bXV4LWRvYy5oIGIvZ3N0L2lzb21wNC9nc3RxdG11eC1kb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxMjE2NC4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2dzdHF0bXV4LWRvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIGRvY3VtZW50YXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNmLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qCi0gKiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgU291cmNlIENvZGUgaXMgbGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBTZWUgZnVydGhlciBleHBsYW5hdGlvbiBhdHRhY2hlZCBpbiBMaWNlbnNlIFN0YXRlbWVudCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGZpbGUKLSAqIExJQ0VOU0UpLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jZXJyb3IgIlRoaXMgaGVhZGVyIGlzIGZvciBndGstZG9jIG9ubHkgYW5kIG5vdCBzdXBwb3NlZCB0byBiZSBpbmNsdWRlZCIKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1QNE11eCBHc3RNUDRNdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0M0dQUE11eCBHc3QzR1BQTXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElTTUxNdXggR3N0SVNNTE11eDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RNSjJNdXggR3N0TUoyTXV4OwotCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L2dzdHF0bXV4LmMgYi9nc3QvaXNvbXA0L2dzdHF0bXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlM2NlMTYuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9nc3RxdG11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgxNCArMCwwIEBACi0vKiBRdWlja3RpbWUgbXV4ZXIgcGx1Z2luIGZvciBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRoaWFnbyBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNmLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0KLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1xdG11eAotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBNdXhlciBmb3IgcXVpY2t0aW1lKC5tb3YpIGZpbGVzCi0gKgotICogVGhpcyBlbGVtZW50IG1lcmdlcyBzdHJlYW1zIChhdWRpbyBhbmQgdmlkZW8pIGludG8gUXVpY2tUaW1lKC5tb3YpIGZpbGVzLgotICoKLSAqIFRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCBpbnRlbmRzIHRvIGV4cGxhaW4gd2h5IHZhcmlvdXMgc2ltaWxhciBtdXhlcnMKLSAqIGFyZSBwcmVzZW50IGluIHRoaXMgcGx1Z2luLgotICoKLSAqIFRoZSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvcmVzb3VyY2VzL3F0ZmlsZWZvcm1hdC5wZGYiPgotICogUXVpY2tUaW1lIGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb248L3VsaW5rPiBzZXJ2ZWQgYXMgYmFzaXMgZm9yIHRoZSBNUDQgZmlsZQotICogZm9ybWF0IHNwZWNpZmljYXRpb24gKG1wNG11eCksIGFuZCBhcyBzdWNoIHRoZSBRdWlja1RpbWUgZmlsZSBzdHJ1Y3R1cmUgaXMKLSAqIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIHNvLWNhbGxlZCBJU08gQmFzZSBNZWRpYSBmaWxlIGZvcm1hdCBkZWZpbmVkIGluCi0gKiBJU08gMTQ0OTYtMTIgKGV4Y2VwdCBmb3Igc29tZSBtZWRpYSBzcGVjaWZpYyBwYXJ0cykuCi0gKiBJbiB0dXJuLCB0aGUgbGF0dGVyIElTTyBCYXNlIE1lZGlhIGZvcm1hdCB3YXMgZnVydGhlciBzcGVjaWFsaXplZCBhcyBhCi0gKiBNb3Rpb24gSlBFRy0yMDAwIGZpbGUgZm9ybWF0IGluIElTTyAxNTQ0NC0zIChtajJtdXgpCi0gKiBhbmQgaW4gdmFyaW91cyAzR1BQKDIpIHNwZWNzIChncHBtdXgpLgotICogVGhlIGZyYWdtZW50ZWQgZmlsZSBmZWF0dXJlcyBkZWZpbmVkIChvbmx5KSBpbiBJU08gQmFzZSBNZWRpYSBhcmUgdXNlZCBieQotICogSVNNViBmaWxlcyBtYWtpbmcgdXAgKGEuby4pIFNtb290aCBTdHJlYW1pbmcgKGlzbWxtdXgpLgotICoKLSAqIEEgZmV3IHByb3BlcnRpZXMgKCNHc3RRVE11eDptb3ZpZS10aW1lc2NhbGUsICNHc3RRVE11eDp0cmFrLXRpbWVzY2FsZSkgYWxsb3cKLSAqIGFkanVzdGluZyBzb21lIHRlY2huaWNhbCBwYXJhbWV0ZXJzLCB3aGljaCBtaWdodCBiZSB1c2VmdWwgaW4gKHJhcmUpIGNhc2VzIHRvCi0gKiByZXNvbHZlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGluIHNvbWUgc2l0dWF0aW9ucy4KLSAqCi0gKiBTb21lIG90aGVyIHByb3BlcnRpZXMgaW5mbHVlbmNlIHRoZSByZXN1bHQgbW9yZSBmdW5kYW1lbnRhbGx5LgotICogQSB0eXBpY2FsIG1vdi9tcDQgZmlsZSdzIG1ldGFkYXRhIChha2EgbW9vdikgaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIHRoZQotICogZmlsZSwgc29tZXdoYXQgY29udHJhcnkgdG8gdGhpcyB1c3VhbGx5IGJlaW5nIGNhbGxlZCAidGhlIGhlYWRlciIuCi0gKiBIb3dldmVyLCBhICNHc3RRVE11eDpmYXN0c3RhcnQgZmlsZSB3aWxsICh3aXRoIHNvbWUgZWZmb3J0KSBhcnJhbmdlIHRoaXMgdG8KLSAqIGJlIGxvY2F0ZWQgbmVhciBzdGFydCBvZiB0aGUgZmlsZSwgd2hpY2ggdGhlbiBhbGxvd3MgaXQgZS5nLiB0byBiZSBwbGF5ZWQKLSAqIHdoaWxlIGRvd25sb2FkaW5nLiBBbHRlcm5hdGl2ZWx5LCByYXRoZXIgdGhhbiBoYXZpbmcgb25lIGNodW5rIG9mIG1ldGFkYXRhIGF0Ci0gKiBzdGFydCAob3IgZW5kKSwgdGhlcmUgY2FuIGJlIHNvbWUgbWV0YWRhdGEgYXQgc3RhcnQgYW5kIG1vc3Qgb2YgdGhlIG90aGVyCi0gKiBkYXRhIGNhbiBiZSBzcHJlYWQgb3V0IGludG8gZnJhZ21lbnRzIG9mICNHc3RRVE11eDpmcmFnbWVudC1kdXJhdGlvbi4KLSAqIElmIHN1Y2ggZnJhZ21lbnRlZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yIHN0cmVhbWluZyBwdXJwb3NlcywgdGhlbgotICogI0dzdFFUTXV4OnN0cmVhbWFibGUgYWxsb3dzIGZvcmVnb2luZyB0byBhZGQgaW5kZXggbWV0YWRhdGEgKGF0IHRoZSBlbmQgb2YKLSAqIGZpbGUpLgotICoKLSAqIFdoZW4gdGhlIG1heGltdW0gZHVyYXRpb24gdG8gYmUgcmVjb3JkZWQgY2FuIGJlIGtub3duIGluIGFkdmFuY2UsICNHc3RRVE11eAotICogYWxzbyBzdXBwb3J0cyBhICdSb2J1c3QgTXV4aW5nJyBtb2RlLiBJbiByb2J1c3QgbXV4aW5nIG1vZGUsICBzcGFjZSBmb3IgdGhlCi0gKiBoZWFkZXJzIGFyZSByZXNlcnZlZCBhdCB0aGUgc3RhcnQgb2YgbXV4aW5nLCBhbmQgcmV3cml0dGVuIGF0IGEgY29uZmlndXJhYmxlCi0gKiBpbnRlcnZhbCwgc28gdGhhdCB0aGUgb3V0cHV0IGZpbGUgaXMgYWx3YXlzIHBsYXlhYmxlLCBldmVuIGlmIHRoZSByZWNvcmRpbmcKLSAqIGlzIGludGVycnVwdGVkIHVuY2xlYW5seSBieSBhIGNyYXNoLiBSb2J1c3QgbXV4aW5nIG1vZGUgcmVxdWlyZXMgYSBzZWVrYWJsZQotICogb3V0cHV0LCBzdWNoIGFzIGZpbGVzaW5rLCBiZWNhdXNlIGl0IG5lZWRzIHRvIHJld3JpdGUgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgotICoKLSAqIFRvIGVuYWJsZSByb2J1c3QgbXV4aW5nIG1vZGUsIHNldCB0aGUgI0dzdFFUTXV4OjpyZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QKLSAqIGFuZCAjR3N0UVRNdXg6OnJlc2VydmVkLW1heC1kdXJhdGlvbiBwcm9wZXJ0eS4gQWxzbyBwcmVzZW50IGlzIHRoZQotICogI0dzdFFUTXV4OjpyZXNlcnZlZC1ieXRlcy1wZXItc2VjIHByb3BlcnR5LCB3aGljaCBjYW4gYmUgaW5jcmVhc2VkIGlmCi0gKiBmb3Igc29tZSByZWFzb24gdGhlIGRlZmF1bHQgaXMgbm90IGxhcmdlIGVub3VnaCBhbmQgdGhlIGluaXRpYWwgcmVzZXJ2ZWQKLSAqIHNwYWNlIGZvciBoZWFkZXJzIGlzIHRvbyBzbWFsbC4gQXBwbGljYXRpb25zIGNhbiBtb25pdG9yIHRoZQotICogI0dzdFFUTXV4OjpyZXNlcnZlZC1kdXJhdGlvbi1yZW1haW5pbmcgcHJvcGVydHkgdG8gc2VlIGhvdyBjbG9zZSB0byBmdWxsCi0gKiB0aGUgcmVzZXJ2ZWQgc3BhY2UgaXMgYmVjb21pbmcuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2NGwyc3JjIG51bS1idWZmZXJzPTUwMCAhIHZpZGVvL3gtcmF3LHdpZHRoPTMyMCxoZWlnaHQ9MjQwICEgdmlkZW9jb252ZXJ0ICEgcXRtdXggISBmaWxlc2luayBsb2NhdGlvbj12aWRlby5tb3YKLSAqIF18Ci0gKiBSZWNvcmRzIGEgdmlkZW8gc3RyZWFtIGNhcHR1cmVkIGZyb20gYSB2NGwyIGRldmljZSBhbmQgbXV4ZXMgaXQgaW50byBhIHF0IGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qCi0gKiBCYXNlZCBvbiBhdmltdXgKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgR19PU19XSU4zMgotI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgICAvKiBsc2Vlaywgb3BlbiwgY2xvc2UsIHJlYWQgKi8KLSN1bmRlZiBsc2VlawotI2RlZmluZSBsc2VlayBfbHNlZWtpNjQKLSN1bmRlZiBvZmZfdAotI2RlZmluZSBvZmZfdCBndWludDY0Ci0jZW5kaWYKLQotI2lmZGVmIF9NU0NfVkVSCi0jZGVmaW5lIGZ0cnVuY2F0ZSBnX3dpbjMyX2Z0cnVuY2F0ZQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jICBpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cXRtdXguaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3F0X211eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcXRfbXV4X2RlYnVnCi0KLS8qIEhhY2tlciBub3Rlcy4KLSAqCi0gKiBUaGUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzIG9mIE1QNCBmaWxlcyBhcmU6Ci0gKiAgLSBhbiAnZnR5cCcgYm94IGF0IHRoZSB2ZXJ5IHN0YXJ0Ci0gKiAgLSBhbiAnbWRhdCcgYm94IHdoaWNoIGNvbnRhaW5zIHRoZSByYXcgYXVkaW8vdmlkZW8vc3VidGl0bGUgZGF0YTsKLSAqICAgIHRoaXMgaXMganVzdCBhIGJ1bmNoIG9mIGJ5dGVzLCBjb21wbGV0ZWx5IHVuZnJhbWVkIGFuZCBwb3NzaWJseQotICogICAgdW5vcmRlcmVkIHdpdGggbm8gYWRkaXRpb25hbCBtZXRhLWluZm9ybWF0aW9uCi0gKiAgLSBhICdtb292JyBib3ggdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlmZmVyZW50IHN0cmVhbXMKLSAqICAgIGFuZCB3aGF0IHRoZXkgY29udGFpbiwgYXMgd2VsbCBhcyBzYW1wbGUgdGFibGVzIGZvciBlYWNoIHN0cmVhbQotICogICAgdGhhdCB0ZWxsIHRoZSBkZW11eGVyIHdoZXJlIGluIHRoZSBtZGF0IGJveCBlYWNoIGJ1ZmZlci9zYW1wbGUgaXMKLSAqICAgIGFuZCB3aGF0IGl0cyBkdXJhdGlvbi90aW1lc3RhbXAgZXRjLiBpcywgYW5kIHdoZXRoZXIgaXQncyBhCi0gKiAgICBrZXlmcmFtZSBldGMuCi0gKiBBZGRpdGlvbmFsbHksIGZyYWdtZW50ZWQgTVA0IHdvcmtzIGJ5IHdyaXRpbmcgY2h1bmtzIG9mIGRhdGEgaW4KLSAqIHBhaXJzIG9mICdtb29mJyBhbmQgJ21kYXQnIGJveGVzOgotICogIC0gJ21vb2YnIGJveGVzLCBoZWFkZXIgcHJlY2VkaW5nIGVhY2ggbWRhdCBmcmFnbWVudCBkZXNjcmliaW5nIHRoZQotICogICAgY29udGVudHMsIGxpa2UgYSBtb292IGJ1dCBvbmx5IGZvciB0aGF0IGZyYWdtZW50LgotICogIC0gYSAnbWZyYScgYm94IGZvciBGcmFnbWVudGVkIE1QNCwgd2hpY2ggaXMgd3JpdHRlbiBhdCB0aGUgZW5kIGFuZAotICogICAgY29udGFpbnMgYSBzdW1tYXJ5IG9mIGFsbCBmcmFnbWVudHMgYW5kIHNlZWsgdGFibGVzLgotICoKLSAqIEN1cnJlbnRseSBtcDRtdXggY2FuIHdvcmsgaW4gNCBkaWZmZXJlbnQgbW9kZXMgLyBnZW5lcmF0ZSA0IHR5cGVzCi0gKiBvZiBvdXRwdXQgZmlsZXMvc3RyZWFtczoKLSAqCi0gKiAtIE5vcm1hbCBtcDQ6IG1wNG11eCB3aWxsIHdyaXRlIGEgbGl0dGxlIGZ0eXAgaWRlbnRpZmllciBhdCB0aGUKLSAqICAgYmVnaW5uaW5nLCB0aGVuIHN0YXJ0IGFuIG1kYXQgYm94IGludG8gd2hpY2ggaXQgd2lsbCB3cml0ZSBhbGwgdGhlCi0gKiAgIHNhbXBsZSBkYXRhLiBBdCBFT1MgaXQgd2lsbCB0aGVuIHdyaXRlIHRoZSBtb292IGhlYWRlciB3aXRoIHRyYWNrCi0gKiAgIGhlYWRlcnMgYW5kIHNhbXBsZSB0YWJsZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYW5kIHJld3JpdGUgdGhlCi0gKiAgIHN0YXJ0IG9mIHRoZSBmaWxlIHRvIGZpeCB1cCB0aGUgbWRhdCBib3ggc2l6ZSBhdCB0aGUgYmVnaW5uaW5nLgotICogICBJdCBoYXMgdG8gd2FpdCBmb3IgRU9TIHRvIHdyaXRlIHRoZSBtb292ICh3aGljaCBpbmNsdWRlcyB0aGUKLSAqICAgc2FtcGxlIHRhYmxlcykgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IG11Y2ggc3BhY2UgdGhvc2UKLSAqICAgdGFibGVzIHdpbGwgYmUuIFRoZSBvdXRwdXQgZG93bnN0cmVhbSBtdXN0IGJlIHNlZWthYmxlIHRvIHJld3JpdGUKLSAqICAgdGhlIG1kYXQgYm94IGF0IEVPUy4KLSAqCi0gKiAtIEZyYWdtZW50ZWQgbXA0OiBtb292IGhlYWRlciB3aXRoIHRyYWNrIGhlYWRlcnMgYXQgc3RhcnQKLSAqICAgYnV0IG5vIHNhbXBsZSB0YWJsZSwgZm9sbG93ZWQgYnkgTiBmcmFnbWVudHMsIGVhY2ggY29udGFpbmluZwotICogICB0cmFjayBoZWFkZXJzIHdpdGggc2FtcGxlIHRhYmxlcyBmb2xsb3dlZCBieSBzb21lIGRhdGEuIERvd25zdHJlYW0KLSAqICAgZG9lcyBub3QgbmVlZCB0byBiZSBzZWVrYWJsZSBpZiB0aGUgJ3N0cmVhbWFibGUnIGZsYWcgaXMgVFJVRSwKLSAqICAgYXMgdGhlIGZpbmFsIG1mcmEgYW5kIHRvdGFsIGR1cmF0aW9uIHdpbGwgYmUgb21pdHRlZC4KLSAqCi0gKiAtIEZhc3Qtc3RhcnQgbXA0OiB0aGUgZ29hbCBoZXJlIGlzIHRvIGNyZWF0ZSBhIGZpbGUgd2hlcmUgdGhlIG1vb3YKLSAqICAgaGVhZGVycyBhcmUgYXQgdGhlIGJlZ2lubmluZzsgd2hhdCBtcDRtdXggd2lsbCBkbyBpcyB3cml0ZSBhbGwKLSAqICAgc2FtcGxlIGRhdGEgaW50byBhIHRlbXAgZmlsZSBhbmQgYnVpbGQgbW9vdiBoZWFkZXIgcGx1cyBzYW1wbGUKLSAqICAgdGFibGVzIGluIG1lbW9yeSBhbmQgdGhlbiB3aGVuIEVPUyBjb21lcywgaXQgd2lsbCBwdXNoIG91dCB0aGUKLSAqICAgbW9vdiBoZWFkZXIgcGx1cyBzYW1wbGUgdGFibGVzIGF0IHRoZSBiZWdpbm5pbmcsIGZvbGxvd2VkIGJ5IHRoZQotICogICBtZGF0IHNhbXBsZSBkYXRhIGF0IHRoZSBlbmQgd2hpY2ggaXMgcmVhZCBpbiBmcm9tIHRoZSB0ZW1wIGZpbGUKLSAqICAgRmlsZXMgY3JlYXRlZCBpbiB0aGlzIG1vZGUgYXJlIGJldHRlciBmb3Igc3RyZWFtaW5nIG92ZXIgdGhlCi0gKiAgIG5ldHdvcmssIHNpbmNlIHRoZSBjbGllbnQgZG9lc24ndCBoYXZlIHRvIHNlZWsgdG8gdGhlIGVuZCBvZiB0aGUKLSAqICAgZmlsZSB0byBnZXQgdGhlIGhlYWRlcnMsIGJ1dCBpdCByZXF1aXJlcyBjb3B5aW5nIGFsbCBzYW1wbGUgZGF0YQotICogICBvdXQgb2YgdGhlIHRlbXAgZmlsZSBhdCBFT1MsIHdoaWNoIGNhbiBiZSBleHBlbnNpdmUuIERvd25zdHJlYW0gZG9lcwotICogICBub3QgbmVlZCB0byBiZSBzZWVrYWJsZSwgYmVjYXVzZSBvZiB0aGUgdXNlIG9mIHRoZSB0ZW1wIGZpbGUuCi0gKgotICogLSBSb2J1c3QgTXV4aW5nIG1vZGU6IEluIHRoaXMgbW9kZSwgcXRtdXggdXNlcyB0aGUgcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uCi0gKiAgIGFuZCByZXNlcnZlZC1tb292LXVwZGF0ZS1wZXJpb2QgcHJvcGVydGllcyB0byByZXNlcnZlIGZyZWUgc3BhY2UKLSAqICAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIGFuZCBwZXJpb2RpY2FsbHkgd3JpdGUgdGhlIE1PT1YgYXRvbSBvdXQKLSAqICAgdG8gaXQuIFRoYXQgbWVhbnMgdGhhdCBraWxsaW5nIHRoZSBtdXhpbmcgYXQgYW55IHBvaW50IHN0aWxsCi0gKiAgIHJlc3VsdHMgaW4gYSBwbGF5YWJsZSBmaWxlLCBhdCB0aGUgY29zdCBvZiB3YXN0aW5nIHNvbWUgYW1vdW50IG9mCi0gKiAgIGZyZWUgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIGZpbGUuIFRoZSBhcHByb3hpbWF0ZSByZWNvcmRpbmcgZHVyYXRpb24KLSAqICAgaGFzIHRvIGJlIGtub3duIGluIGFkdmFuY2UgdG8gZXN0aW1hdGUgaG93IG11Y2ggZnJlZSBzcGFjZSB0byByZXNlcnZlCi0gKiAgIGZvciB0aGUgbW9vdiwgYW5kIHRoZSBkb3duc3RyZWFtIG11c3QgYmUgc2Vla2FibGUuCi0gKiAgIElmIHRoZSBtb292IGhlYWRlciBncm93cyBsYXJnZXIgdGhhbiB0aGUgcmVzZXJ2ZWQgc3BhY2UsIGFuIGVycm9yCi0gKiAgIGlzIGdlbmVyYXRlZCAtIHNvIGl0J3MgYmV0dGVyIHRvIG92ZXItZXN0aW1hdGUgdGhlIGFtb3VudCBvZiBzcGFjZQotICogICB0byByZXNlcnZlLiBUbyBlbnN1cmUgdGhlIGZpbGUgaXMgcGxheWFibGUgYXQgYW55IHBvaW50LCB0aGUgbW9vdgotICogICBpcyB1cGRhdGVkIHVzaW5nIGEgJ3BpbmctcG9uZycgc3RyYXRlZ3ksIHNvIHRoZSBvdXRwdXQgaXMgbmV2ZXIgaW4KLSAqICAgYW4gaW52YWxpZCBzdGF0ZS4KLSAqLwotCi0jaWZuZGVmIEdTVF9SRU1PVkVfREVQUkVDQVRFRAotZW51bQotewotICBEVFNfTUVUSE9EX0RELAotICBEVFNfTUVUSE9EX1JFT1JERVIsCi0gIERUU19NRVRIT0RfQVNDCi19OwotCi1zdGF0aWMgR1R5cGUKLWdzdF9xdF9tdXhfZHRzX21ldGhvZF9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGdzdF9xdF9tdXhfZHRzX21ldGhvZCA9IDA7Ci0KLSAgaWYgKCFnc3RfcXRfbXV4X2R0c19tZXRob2QpIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBkdHNfbWV0aG9kc1tdID0gewotICAgICAge0RUU19NRVRIT0RfREQsICJkZWx0YS9kdXJhdGlvbiIsICJkZCJ9LAotICAgICAge0RUU19NRVRIT0RfUkVPUkRFUiwgInJlb3JkZXIiLCAicmVvcmRlciJ9LAotICAgICAge0RUU19NRVRIT0RfQVNDLCAiYXNjZW5kaW5nIiwgImFzYyJ9LAotICAgICAgezAsIE5VTEwsIE5VTEx9LAotICAgIH07Ci0KLSAgICBnc3RfcXRfbXV4X2R0c19tZXRob2QgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UVRNdXhEdHNNZXRob2RzIiwgZHRzX21ldGhvZHMpOwotICB9Ci0KLSAgcmV0dXJuIGdzdF9xdF9tdXhfZHRzX21ldGhvZDsKLX0KLQotI2RlZmluZSBHU1RfVFlQRV9RVF9NVVhfRFRTX01FVEhPRCBcCi0gIChnc3RfcXRfbXV4X2R0c19tZXRob2RfZ2V0X3R5cGUgKCkpCi0jZW5kaWYKLQotLyogUVRNdXggc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9NT1ZJRV9USU1FU0NBTEUsCi0gIFBST1BfVFJBS19USU1FU0NBTEUsCi0gIFBST1BfRkFTVF9TVEFSVCwKLSAgUFJPUF9GQVNUX1NUQVJUX1RFTVBfRklMRSwKLSAgUFJPUF9NT09WX1JFQ09WX0ZJTEUsCi0gIFBST1BfRlJBR01FTlRfRFVSQVRJT04sCi0gIFBST1BfU1RSRUFNQUJMRSwKLSAgUFJPUF9SRVNFUlZFRF9NQVhfRFVSQVRJT04sCi0gIFBST1BfUkVTRVJWRURfRFVSQVRJT05fUkVNQUlOSU5HLAotICBQUk9QX1JFU0VSVkVEX01PT1ZfVVBEQVRFX1BFUklPRCwKLSAgUFJPUF9SRVNFUlZFRF9CWVRFU19QRVJfU0VDLAotI2lmbmRlZiBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKLSAgUFJPUF9EVFNfTUVUSE9ELAotI2VuZGlmCi0gIFBST1BfRE9fQ1RUUywKLX07Ci0KLS8qIHNvbWUgc3BhcmUgZm9yIGhlYWRlciBzaXplIGFzIHdlbGwgKi8KLSNkZWZpbmUgTURBVF9MQVJHRV9GSUxFX0xJTUlUICAgICAgICAgICAoKGd1aW50NjQpIDEwMjQgKiAxMDI0ICogMTAyNCAqIDIpCi0KLSNkZWZpbmUgREVGQVVMVF9NT1ZJRV9USU1FU0NBTEUgICAgICAgICAxODAwCi0jZGVmaW5lIERFRkFVTFRfVFJBS19USU1FU0NBTEUgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX0RPX0NUVFMgICAgICAgICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9GQVNUX1NUQVJUICAgICAgICAgICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX0ZBU1RfU1RBUlRfVEVNUF9GSUxFICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9NT09WX1JFQ09WX0ZJTEUgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfRlJBR01FTlRfRFVSQVRJT04gICAgICAgMAotI2RlZmluZSBERUZBVUxUX1NUUkVBTUFCTEUgICAgICAgICAgICAgIFRSVUUKLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0jZGVmaW5lIERFRkFVTFRfRFRTX01FVEhPRCAgICAgICAgICAgICAgRFRTX01FVEhPRF9SRU9SREVSCi0jZW5kaWYKLSNkZWZpbmUgREVGQVVMVF9SRVNFUlZFRF9NQVhfRFVSQVRJT04gICBHU1RfQ0xPQ0tfVElNRV9OT05FCi0jZGVmaW5lIERFRkFVTFRfUkVTRVJWRURfTU9PVl9VUERBVEVfUEVSSU9EICAgR1NUX0NMT0NLX1RJTUVfTk9ORQotI2RlZmluZSBERUZBVUxUX1JFU0VSVkVEX0JZVEVTX1BFUl9TRUNfUEVSX1RSQUsgNTUwCi0KLXN0YXRpYyB2b2lkIGdzdF9xdF9tdXhfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3F0X211eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0vKiBwcm9wZXJ0eSBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGdzdF9xdF9tdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3F0X211eF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLS8qIHBhZCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBHc3RQYWQgKmdzdF9xdF9tdXhfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyB2b2lkIGdzdF9xdF9tdXhfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotCi0vKiBldmVudCAqLwotc3RhdGljIGdib29sZWFuIGdzdF9xdF9tdXhfc2lua19ldmVudCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0RXZlbnQgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F0X211eF9oYW5kbGVfYnVmZmVyIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdERhdGEgKiBjZGF0YSwgR3N0QnVmZmVyICogYnVmLCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F0X211eF9hZGRfYnVmZmVyIChHc3RRVE11eCAqIHF0bXV4LCBHc3RRVFBhZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0X211eF9yb2J1c3RfcmVjb3JkaW5nX3Jld3JpdGVfbW9vdiAoR3N0UVRNdXggKiBxdG11eCk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X2Jhc2VfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdfY2xhc3MpOwotICBHc3RRVE11eENsYXNzICprbGFzcyA9IChHc3RRVE11eENsYXNzICopIGdfY2xhc3M7Ci0gIEdzdFFUTXV4Q2xhc3NQYXJhbXMgKnBhcmFtczsKLSAgR3N0UGFkVGVtcGxhdGUgKnZpZGVvc2lua3RlbXBsLCAqYXVkaW9zaW5rdGVtcGwsICpzdWJ0aXRsZXNpbmt0ZW1wbDsKLSAgR3N0UGFkVGVtcGxhdGUgKnNyY3RlbXBsOwotICBnY2hhciAqbG9uZ25hbWUsICpkZXNjcmlwdGlvbjsKLQotICBwYXJhbXMgPQotICAgICAgKEdzdFFUTXV4Q2xhc3NQYXJhbXMgKikgZ190eXBlX2dldF9xZGF0YSAoR19PQkpFQ1RfQ0xBU1NfVFlQRSAoZ19jbGFzcyksCi0gICAgICBHU1RfUVRfTVVYX1BBUkFNU19RREFUQSk7Ci0gIGdfYXNzZXJ0IChwYXJhbXMgIT0gTlVMTCk7Ci0KLSAgLyogY29uc3RydWN0IHRoZSBlbGVtZW50IGRldGFpbHMgc3RydWN0ICovCi0gIGxvbmduYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXMgTXV4ZXIiLCBwYXJhbXMtPnByb3AtPmxvbmdfbmFtZSk7Ci0gIGRlc2NyaXB0aW9uID0gZ19zdHJkdXBfcHJpbnRmICgiTXVsdGlwbGV4IGF1ZGlvIGFuZCB2aWRlbyBpbnRvIGEgJXMgZmlsZSIsCi0gICAgICBwYXJhbXMtPnByb3AtPmxvbmdfbmFtZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsIGxvbmduYW1lLAotICAgICAgIkNvZGVjL011eGVyIiwgZGVzY3JpcHRpb24sCi0gICAgICAiVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Iik7Ci0gIGdfZnJlZSAobG9uZ25hbWUpOwotICBnX2ZyZWUgKGRlc2NyaXB0aW9uKTsKLQotICAvKiBwYWQgdGVtcGxhdGVzICovCi0gIHNyY3RlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBwYXJhbXMtPnNyY19jYXBzKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgc3JjdGVtcGwpOwotCi0gIGlmIChwYXJhbXMtPmF1ZGlvX3NpbmtfY2FwcykgewotICAgIGF1ZGlvc2lua3RlbXBsID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJhdWRpb18ldSIsCi0gICAgICAgIEdTVF9QQURfU0lOSywgR1NUX1BBRF9SRVFVRVNULCBwYXJhbXMtPmF1ZGlvX3NpbmtfY2Fwcyk7Ci0gICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgYXVkaW9zaW5rdGVtcGwpOwotICB9Ci0KLSAgaWYgKHBhcmFtcy0+dmlkZW9fc2lua19jYXBzKSB7Ci0gICAgdmlkZW9zaW5rdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInZpZGVvXyV1IiwKLSAgICAgICAgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX1JFUVVFU1QsIHBhcmFtcy0+dmlkZW9fc2lua19jYXBzKTsKLSAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCB2aWRlb3Npbmt0ZW1wbCk7Ci0gIH0KLQotICBpZiAocGFyYW1zLT5zdWJ0aXRsZV9zaW5rX2NhcHMpIHsKLSAgICBzdWJ0aXRsZXNpbmt0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3VidGl0bGVfJXUiLAotICAgICAgICBHU1RfUEFEX1NJTkssIEdTVF9QQURfUkVRVUVTVCwgcGFyYW1zLT5zdWJ0aXRsZV9zaW5rX2NhcHMpOwotICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsIHN1YnRpdGxlc2lua3RlbXBsKTsKLSAgfQotCi0gIGtsYXNzLT5mb3JtYXQgPSBwYXJhbXMtPnByb3AtPmZvcm1hdDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfY2xhc3NfaW5pdCAoR3N0UVRNdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR1BhcmFtRmxhZ3Mgc3RyZWFtYWJsZV9mbGFnczsKLSAgY29uc3QgZ2NoYXIgKnN0cmVhbWFibGVfZGVzYzsKLSAgZ2Jvb2xlYW4gc3RyZWFtYWJsZTsKLSNkZWZpbmUgU1RSRUFNQUJMRV9ERVNDICJJZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgdG8gIlwKLSAgImJlIHN0cmVhbWVkIGFuZCBoZW5jZSBubyBpbmRleGVzIHdyaXR0ZW4gb3IgZHVyYXRpb24gd3JpdHRlbi4iCi0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3F0X211eF9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3F0X211eF9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9xdF9tdXhfc2V0X3Byb3BlcnR5OwotCi0gIHN0cmVhbWFibGVfZmxhZ3MgPSBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUOwotICBpZiAoa2xhc3MtPmZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9JU01MKSB7Ci0gICAgc3RyZWFtYWJsZV9kZXNjID0gU1RSRUFNQUJMRV9ERVNDOwotICAgIHN0cmVhbWFibGUgPSBERUZBVUxUX1NUUkVBTUFCTEU7Ci0gIH0gZWxzZSB7Ci0gICAgc3RyZWFtYWJsZV9kZXNjID0KLSAgICAgICAgU1RSRUFNQUJMRV9ERVNDICIgKERFUFJFQ0FURUQsIG9ubHkgdmFsaWQgZm9yIGZyYWdtZW50ZWQgTVA0KSI7Ci0gICAgc3RyZWFtYWJsZV9mbGFncyB8PSBHX1BBUkFNX0RFUFJFQ0FURUQ7Ci0gICAgc3RyZWFtYWJsZSA9IEZBTFNFOwotICB9Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NT1ZJRV9USU1FU0NBTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1vdmllLXRpbWVzY2FsZSIsICJNb3ZpZSB0aW1lc2NhbGUiLAotICAgICAgICAgICJUaW1lc2NhbGUgdG8gdXNlIGluIHRoZSBtb3ZpZSAodW5pdHMgcGVyIHNlY29uZCkiLAotICAgICAgICAgIDEsIEdfTUFYVUlOVDMyLCBERUZBVUxUX01PVklFX1RJTUVTQ0FMRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RSQUtfVElNRVNDQUxFLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJ0cmFrLXRpbWVzY2FsZSIsICJUcmFjayB0aW1lc2NhbGUiLAotICAgICAgICAgICJUaW1lc2NhbGUgdG8gdXNlIGZvciB0aGUgdHJhY2tzICh1bml0cyBwZXIgc2Vjb25kLCAwIGlzIGF1dG9tYXRpYykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDMyLCBERUZBVUxUX1RSQUtfVElNRVNDQUxFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9fQ1RUUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicHJlc2VudGF0aW9uLXRpbWUiLAotICAgICAgICAgICJJbmNsdWRlIHByZXNlbnRhdGlvbi10aW1lIGluZm8iLAotICAgICAgICAgICJDYWxjdWxhdGUgYW5kIGluY2x1ZGUgcHJlc2VudGF0aW9uL2NvbXBvc2l0aW9uIHRpbWUgIgotICAgICAgICAgICIoaW4gYWRkaXRpb24gdG8gZGVjb2RpbmcgdGltZSkiLCBERUZBVUxUX0RPX0NUVFMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFRTX01FVEhPRCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiZHRzLW1ldGhvZCIsICJkdHMtbWV0aG9kIiwKLSAgICAgICAgICAiTWV0aG9kIHRvIGRldGVybWluZSBEVFMgdGltZSAoREVQUkVDQVRFRCkiLAotICAgICAgICAgIEdTVF9UWVBFX1FUX01VWF9EVFNfTUVUSE9ELCBERUZBVUxUX0RUU19NRVRIT0QsCi0gICAgICAgICAgR19QQVJBTV9ERVBSRUNBVEVEIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8Ci0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotI2VuZGlmCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkFTVF9TVEFSVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZmFzdHN0YXJ0IiwgIkZvcm1hdCBmaWxlIHRvIGZhc3RzdGFydCIsCi0gICAgICAgICAgIklmIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JtYXR0ZWQgZm9yIGZhc3RzdGFydCAoaGVhZGVycyBmaXJzdCkiLAotICAgICAgICAgIERFRkFVTFRfRkFTVF9TVEFSVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkFTVF9TVEFSVF9URU1QX0ZJTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZmFzdHN0YXJ0LWZpbGUiLCAiRmlsZSB0byB1c2UgZm9yIHN0b3JpbmcgYnVmZmVycyIsCi0gICAgICAgICAgIkZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdGVtcG9yYXJpbHkgdG8gc3RvcmUgZGF0YSBmcm9tIHRoZSBzdHJlYW0gIgotICAgICAgICAgICJ3aGVuIGNyZWF0aW5nIGEgZmFzdHN0YXJ0IGZpbGUuIElmIG51bGwgYSBmaWxlcGF0aCB3aWxsIGJlICIKLSAgICAgICAgICAiY3JlYXRlZCBhdXRvbWF0aWNhbGx5IiwgREVGQVVMVF9GQVNUX1NUQVJUX1RFTVBfRklMRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01PT1ZfUkVDT1ZfRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJtb292LXJlY292ZXJ5LWZpbGUiLAotICAgICAgICAgICJGaWxlIHRvIHN0b3JlIGRhdGEgZm9yIHBvc3RlcmlvciBtb292IGF0b20gcmVjb3ZlcnkiLAotICAgICAgICAgICJGaWxlIHRvIGJlIHVzZWQgdG8gc3RvcmUgIgotICAgICAgICAgICJkYXRhIGZvciBtb292IGF0b20gbWFraW5nIG1vdmllIGZpbGUgcmVjb3ZlcnkgcG9zc2libGUgaW4gY2FzZSAiCi0gICAgICAgICAgIm9mIGEgY3Jhc2ggZHVyaW5nIG11eGluZy4gTnVsbCBmb3IgZGlzYWJsZWQuIChFeHBlcmltZW50YWwpIiwKLSAgICAgICAgICBERUZBVUxUX01PT1ZfUkVDT1ZfRklMRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZSQUdNRU5UX0RVUkFUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJmcmFnbWVudC1kdXJhdGlvbiIsICJGcmFnbWVudCBkdXJhdGlvbiIsCi0gICAgICAgICAgIkZyYWdtZW50IGR1cmF0aW9ucyBpbiBtcyAocHJvZHVjZSBhIGZyYWdtZW50ZWQgZmlsZSBpZiA+IDApIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQzMiwga2xhc3MtPmZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9JU01MID8KLSAgICAgICAgICAyMDAwIDogREVGQVVMVF9GUkFHTUVOVF9EVVJBVElPTiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUUkVBTUFCTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInN0cmVhbWFibGUiLCAiU3RyZWFtYWJsZSIsIHN0cmVhbWFibGVfZGVzYywKLSAgICAgICAgICBzdHJlYW1hYmxlLCBzdHJlYW1hYmxlX2ZsYWdzIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JFU0VSVkVEX01BWF9EVVJBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJyZXNlcnZlZC1tYXgtZHVyYXRpb24iLAotICAgICAgICAgICJSZXNlcnZlZCBtYXhpbXVtIGZpbGUgZHVyYXRpb24gKG5zKSIsCi0gICAgICAgICAgIldoZW4gc2V0IHRvIGEgdmFsdWUgPiAwLCByZXNlcnZlcyBzcGFjZSBmb3IgaW5kZXggdGFibGVzIGF0IHRoZSAiCi0gICAgICAgICAgImJlZ2lubmluZyBvZiB0aGUgZmlsZS4iLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1JFU0VSVkVEX01BWF9EVVJBVElPTiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfUkVTRVJWRURfRFVSQVRJT05fUkVNQUlOSU5HLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInJlc2VydmVkLWR1cmF0aW9uLXJlbWFpbmluZyIsCi0gICAgICAgICAgIlJlcG9ydCB0aGUgYXBwcm94aW1hdGUgYW1vdW50IG9mIHJlbWFpbmluZyByZWNvcmRpbmcgc3BhY2UgKG5zKSIsCi0gICAgICAgICAgIlJlcG9ydHMgdGhlIGFwcHJveGltYXRlIGFtb3VudCBvZiByZW1haW5pbmcgbW9vdiBoZWFkZXIgc3BhY2UgIgotICAgICAgICAgICJyZXNlcnZlZCB1c2luZyByZXNlcnZlZC1tYXgtZHVyYXRpb24iLCAwLCBHX01BWFVJTlQ2NCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9SRVNFUlZFRF9NT09WX1VQREFURV9QRVJJT0QsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgicmVzZXJ2ZWQtbW9vdi11cGRhdGUtcGVyaW9kIiwKLSAgICAgICAgICAiSW50ZXJ2YWwgYXQgd2hpY2ggdG8gdXBkYXRlIGluZGV4IHRhYmxlcyAobnMpIiwKLSAgICAgICAgICAiV2hlbiB1c2VkIHdpdGggcmVzZXJ2ZWQtbWF4LWR1cmF0aW9uLCBwZXJpb2RpY2FsbHkgdXBkYXRlcyB0aGUgIgotICAgICAgICAgICJpbmRleCB0YWJsZXMgd2l0aCBpbmZvcm1hdGlvbiBtdXhlZCBzbyBmYXIuIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9SRVNFUlZFRF9NT09WX1VQREFURV9QRVJJT0QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVTRVJWRURfQllURVNfUEVSX1NFQywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgicmVzZXJ2ZWQtYnl0ZXMtcGVyLXNlYyIsCi0gICAgICAgICAgIlJlc2VydmVkIE1PT1YgYnl0ZXMgcGVyIHNlY29uZCwgcGVyIHRyYWNrIiwKLSAgICAgICAgICAiTXVsdGlwbGllciBmb3IgY29udmVydGluZyByZXNlcnZlZC1tYXgtZHVyYXRpb24gaW50byBieXRlcyBvZiBoZWFkZXIgdG8gcmVzZXJ2ZSwgcGVyIHNlY29uZCwgcGVyIHRyYWNrIiwKLSAgICAgICAgICAwLCAxMDAwMCwgREVGQVVMVF9SRVNFUlZFRF9CWVRFU19QRVJfU0VDX1BFUl9UUkFLLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXRfbXV4X3JlcXVlc3RfbmV3X3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXRfbXV4X2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdF9tdXhfcmVsZWFzZV9wYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9wYWRfcmVzZXQgKEdzdFFUUGFkICogcXRwYWQpCi17Ci0gIHF0cGFkLT5mb3VyY2MgPSAwOwotICBxdHBhZC0+aXNfb3V0X29mX29yZGVyID0gRkFMU0U7Ci0gIHF0cGFkLT5zYW1wbGVfc2l6ZSA9IDA7Ci0gIHF0cGFkLT5zeW5jID0gRkFMU0U7Ci0gIHF0cGFkLT5sYXN0X2R0cyA9IDA7Ci0gIHF0cGFkLT5kdHNfYWRqdXN0bWVudCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHF0cGFkLT5maXJzdF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHF0cGFkLT5maXJzdF9kdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBxdHBhZC0+cHJlcGFyZV9idWZfZnVuYyA9IE5VTEw7Ci0gIHF0cGFkLT5jcmVhdGVfZW1wdHlfYnVmZmVyID0gTlVMTDsKLSAgcXRwYWQtPmF2Z19iaXRyYXRlID0gMDsKLSAgcXRwYWQtPm1heF9iaXRyYXRlID0gMDsKLSAgcXRwYWQtPnRvdGFsX2R1cmF0aW9uID0gMDsKLSAgcXRwYWQtPnRvdGFsX2J5dGVzID0gMDsKLSAgcXRwYWQtPnNwYXJzZSA9IEZBTFNFOwotICBxdHBhZC0+dGNfdHJhayA9IE5VTEw7Ci0KLSAgcXRwYWQtPmJ1Zl9oZWFkID0gMDsKLSAgcXRwYWQtPmJ1Zl90YWlsID0gMDsKLQotICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZxdHBhZC0+bGFzdF9idWYsIE5VTEwpOwotCi0gIGlmIChxdHBhZC0+dGFncykgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAocXRwYWQtPnRhZ3MpOwotICAgIHF0cGFkLT50YWdzID0gTlVMTDsKLSAgfQotCi0gIC8qIHJlZmVyZW5jZSBvd25lZCBlbHNld2hlcmUgKi8KLSAgcXRwYWQtPnRyYWsgPSBOVUxMOwotCi0gIGlmIChxdHBhZC0+dHJhZikgewotICAgIGF0b21fdHJhZl9mcmVlIChxdHBhZC0+dHJhZik7Ci0gICAgcXRwYWQtPnRyYWYgPSBOVUxMOwotICB9Ci0gIGF0b21fYXJyYXlfY2xlYXIgKCZxdHBhZC0+ZnJhZ21lbnRfYnVmZmVycyk7Ci0KLSAgLyogcmVmZXJlbmNlIG93bmVkIGVsc2V3aGVyZSAqLwotICBxdHBhZC0+dGZyYSA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBUYWtlcyBHc3RRVE11eCBiYWNrIHRvIGl0cyBpbml0aWFsIHN0YXRlCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X3Jlc2V0IChHc3RRVE11eCAqIHF0bXV4LCBnYm9vbGVhbiBhbGxvYykKLXsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIHF0bXV4LT5zdGF0ZSA9IEdTVF9RVF9NVVhfU1RBVEVfTk9ORTsKLSAgcXRtdXgtPmhlYWRlcl9zaXplID0gMDsKLSAgcXRtdXgtPm1kYXRfc2l6ZSA9IDA7Ci0gIHF0bXV4LT5tb292X3BvcyA9IDA7Ci0gIHF0bXV4LT5tZGF0X3BvcyA9IDA7Ci0gIHF0bXV4LT5sb25nZXN0X2NodW5rID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcXRtdXgtPmZyYWdtZW50X3NlcXVlbmNlID0gMDsKLQotICBpZiAocXRtdXgtPmZ0eXApIHsKLSAgICBhdG9tX2Z0eXBfZnJlZSAocXRtdXgtPmZ0eXApOwotICAgIHF0bXV4LT5mdHlwID0gTlVMTDsKLSAgfQotICBpZiAocXRtdXgtPm1vb3YpIHsKLSAgICBhdG9tX21vb3ZfZnJlZSAocXRtdXgtPm1vb3YpOwotICAgIHF0bXV4LT5tb292ID0gTlVMTDsKLSAgfQotICBpZiAocXRtdXgtPm1mcmEpIHsKLSAgICBhdG9tX21mcmFfZnJlZSAocXRtdXgtPm1mcmEpOwotICAgIHF0bXV4LT5tZnJhID0gTlVMTDsKLSAgfQotICBpZiAocXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSkgewotICAgIGZjbG9zZSAocXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSk7Ci0gICAgZ19yZW1vdmUgKHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGVfcGF0aCk7Ci0gICAgcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSA9IE5VTEw7Ci0gIH0KLSAgaWYgKHF0bXV4LT5tb292X3JlY292X2ZpbGUpIHsKLSAgICBmY2xvc2UgKHF0bXV4LT5tb292X3JlY292X2ZpbGUpOwotICAgIHF0bXV4LT5tb292X3JlY292X2ZpbGUgPSBOVUxMOwotICB9Ci0gIGZvciAod2FsayA9IHF0bXV4LT5leHRyYV9hdG9tczsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBBdG9tSW5mbyAqYWluZm8gPSAoQXRvbUluZm8gKikgd2Fsay0+ZGF0YTsKLSAgICBhaW5mby0+ZnJlZV9mdW5jIChhaW5mby0+YXRvbSk7Ci0gICAgZ19mcmVlIChhaW5mbyk7Ci0gIH0KLSAgZ19zbGlzdF9mcmVlIChxdG11eC0+ZXh0cmFfYXRvbXMpOwotICBxdG11eC0+ZXh0cmFfYXRvbXMgPSBOVUxMOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocXRtdXgpOwotICBnc3RfdGFnX3NldHRlcl9yZXNldF90YWdzIChHU1RfVEFHX1NFVFRFUiAocXRtdXgpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXV4KTsKLQotICAvKiByZXNldCBwYWQgZGF0YSAqLwotICBmb3IgKHdhbGsgPSBxdG11eC0+c2lua3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UVRQYWQgKnF0cGFkID0gKEdzdFFUUGFkICopIHdhbGstPmRhdGE7Ci0gICAgZ3N0X3F0X211eF9wYWRfcmVzZXQgKHF0cGFkKTsKLQotICAgIC8qIGhtLCBtb292X2ZyZWUgYWJvdmUgeWFua2VkIHRoZSB0cmFrcyBhd2F5IGZyb20gdXMsCi0gICAgICogc28gZG8gbm90IGZyZWUsIGJ1dCBkbyBjbGVhciAqLwotICAgIHF0cGFkLT50cmFrID0gTlVMTDsKLSAgfQotCi0gIGlmIChhbGxvYykgewotICAgIHF0bXV4LT5tb292ID0gYXRvbV9tb292X25ldyAocXRtdXgtPmNvbnRleHQpOwotICAgIC8qIGVuc3VyZSBhbGwgaXMgYXMgbmljZSBhbmQgZnJlc2ggYXMgcmVxdWVzdF9uZXdfcGFkIHdvdWxkIHByb3ZpZGUgaXQgKi8KLSAgICBmb3IgKHdhbGsgPSBxdG11eC0+c2lua3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgICBHc3RRVFBhZCAqcXRwYWQgPSAoR3N0UVRQYWQgKikgd2Fsay0+ZGF0YTsKLQotICAgICAgcXRwYWQtPnRyYWsgPSBhdG9tX3RyYWtfbmV3IChxdG11eC0+Y29udGV4dCk7Ci0gICAgICBhdG9tX21vb3ZfYWRkX3RyYWsgKHF0bXV4LT5tb292LCBxdHBhZC0+dHJhayk7Ci0gICAgfQotICB9Ci0KLSAgcXRtdXgtPnJlc2VydmVkX21vb3Zfc2l6ZSA9IDA7Ci0gIHF0bXV4LT5sYXN0X21vb3ZfdXBkYXRlID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcXRtdXgtPm11eGVkX3NpbmNlX2xhc3RfdXBkYXRlID0gMDsKLSAgcXRtdXgtPnJlc2VydmVkX2R1cmF0aW9uX3JlbWFpbmluZyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHF0bXV4LT5maXJzdF9wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBxdG11eC0+dGNfcG9zID0gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X2luaXQgKEdzdFFUTXV4ICogcXRtdXgsIEdzdFFUTXV4Q2xhc3MgKiBxdG11eF9rbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChxdG11eF9rbGFzcyk7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLQotICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic3JjIik7Ci0gIHF0bXV4LT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbCwgInNyYyIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChxdG11eC0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHF0bXV4KSwgcXRtdXgtPnNyY3BhZCk7Ci0KLSAgcXRtdXgtPnNpbmtwYWRzID0gTlVMTDsKLSAgcXRtdXgtPmNvbGxlY3QgPSBnc3RfY29sbGVjdF9wYWRzX25ldyAoKTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfYnVmZmVyX2Z1bmN0aW9uIChxdG11eC0+Y29sbGVjdCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXRfbXV4X2hhbmRsZV9idWZmZXIpLCBxdG11eCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2V2ZW50X2Z1bmN0aW9uIChxdG11eC0+Y29sbGVjdCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcXRfbXV4X3NpbmtfZXZlbnQpLCBxdG11eCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24gKHF0bXV4LT5jb2xsZWN0LAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9jb2xsZWN0X3BhZHNfY2xpcF9ydW5uaW5nX3RpbWUpLCBxdG11eCk7Ci0KLSAgLyogcHJvcGVydGllcyBzZXQgdG8gZGVmYXVsdCB1cG9uIGNvbnN0cnVjdGlvbiAqLwotCi0gIHF0bXV4LT5yZXNlcnZlZF9tYXhfZHVyYXRpb24gPSBERUZBVUxUX1JFU0VSVkVEX01BWF9EVVJBVElPTjsKLSAgcXRtdXgtPnJlc2VydmVkX21vb3ZfdXBkYXRlX3BlcmlvZCA9IERFRkFVTFRfUkVTRVJWRURfTU9PVl9VUERBVEVfUEVSSU9EOwotICBxdG11eC0+cmVzZXJ2ZWRfYnl0ZXNfcGVyX3NlY19wZXJfdHJhayA9Ci0gICAgICBERUZBVUxUX1JFU0VSVkVEX0JZVEVTX1BFUl9TRUNfUEVSX1RSQUs7Ci0KLSAgLyogYWx3YXlzIG5lZWQgdGhpcyAqLwotICBxdG11eC0+Y29udGV4dCA9Ci0gICAgICBhdG9tc19jb250ZXh0X25ldyAoZ3N0X3F0X211eF9tYXBfZm9ybWF0X3RvX2ZsYXZvciAocXRtdXhfa2xhc3MtPmZvcm1hdCkpOwotCi0gIC8qIGludGVybmFscyB0byBpbml0aWFsIHN0YXRlICovCi0gIGdzdF9xdF9tdXhfcmVzZXQgKHF0bXV4LCBUUlVFKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UVRNdXggKnF0bXV4ID0gR1NUX1FUX01VWF9DQVNUIChvYmplY3QpOwotCi0gIGdzdF9xdF9tdXhfcmVzZXQgKHF0bXV4LCBGQUxTRSk7Ci0KLSAgZ19mcmVlIChxdG11eC0+ZmFzdF9zdGFydF9maWxlX3BhdGgpOwotICBnX2ZyZWUgKHF0bXV4LT5tb292X3JlY292X2ZpbGVfcGF0aCk7Ci0KLSAgYXRvbXNfY29udGV4dF9mcmVlIChxdG11eC0+Y29udGV4dCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHF0bXV4LT5jb2xsZWN0KTsKLQotICBnX3NsaXN0X2ZyZWUgKHF0bXV4LT5zaW5rcGFkcyk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9xdF9tdXhfcHJlcGFyZV9qcGNfYnVmZmVyIChHc3RRVFBhZCAqIHF0cGFkLCBHc3RCdWZmZXIgKiBidWYsCi0gICAgR3N0UVRNdXggKiBxdG11eCkKLXsKLSAgR3N0QnVmZmVyICpuZXdidWY7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnc2l6ZSBzaXplOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdG11eCwgIlByZXBhcmluZyBqcGMgYnVmZmVyIik7Ci0KLSAgaWYgKGJ1ZiA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICBuZXdidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUgKyA4KTsKLSAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld2J1ZiwgYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCA4LCBzaXplKTsKLQotICBnc3RfYnVmZmVyX21hcCAobmV3YnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAobWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAobWFwLmRhdGEgKyA0LCBGT1VSQ0NfanAyYyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gbmV3YnVmOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9xdF9tdXhfcHJlcGFyZV90eDNnX2J1ZmZlciAoR3N0UVRQYWQgKiBxdHBhZCwgR3N0QnVmZmVyICogYnVmLAotICAgIEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIEdzdEJ1ZmZlciAqbmV3YnVmOwotICBHc3RNYXBJbmZvIGZyb21tYXA7Ci0gIEdzdE1hcEluZm8gdG9tYXA7Ci0gIGdzaXplIHNpemU7Ci0gIGNvbnN0IGd1aW50OCAqZGF0YWVuZDsKLQotICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJQcmVwYXJpbmcgdHgzZyBidWZmZXIgJSIgR1NUX1BUUl9GT1JNQVQsIGJ1Zik7Ci0KLSAgaWYgKGJ1ZiA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZmcm9tbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIGRhdGFlbmQgPSBtZW1jaHIgKGZyb21tYXAuZGF0YSwgMCwgZnJvbW1hcC5zaXplKTsKLSAgc2l6ZSA9IGRhdGFlbmQgPyBkYXRhZW5kIC0gZnJvbW1hcC5kYXRhIDogZnJvbW1hcC5zaXplOwotICBuZXdidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUgKyAyKTsKLQotICBnc3RfYnVmZmVyX21hcCAobmV3YnVmLCAmdG9tYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gIEdTVF9XUklURV9VSU5UMTZfQkUgKHRvbWFwLmRhdGEsIHNpemUpOwotICBtZW1jcHkgKHRvbWFwLmRhdGEgKyAyLCBmcm9tbWFwLmRhdGEsIHNpemUpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG5ld2J1ZiwgJnRvbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmZnJvbW1hcCk7Ci0KLSAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld2J1ZiwgYnVmLCBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEsIDAsIHNpemUpOwotCi0gIC8qIGdzdF9idWZmZXJfY29weV9pbnRvIGlzIHRyeWluZyB0byBiZSB0b28gY2xldmVyIGFuZAotICAgKiB3b24ndCBjb3B5IGR1cmF0aW9uIHdoZW4gc2l6ZSBpcyBkaWZmZXJlbnQgKi8KLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAobmV3YnVmKSA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICByZXR1cm4gbmV3YnVmOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9wYWRfYWRkX2FjM19leHRlbnNpb24gKEdzdFFUTXV4ICogcXRtdXgsIEdzdFFUUGFkICogcXRwYWQsCi0gICAgZ3VpbnQ4IGZzY29kLCBndWludDggZnJtc2l6Y29kLCBndWludDggYnNpZCwgZ3VpbnQ4IGJzbW9kLCBndWludDggYWNtb2QsCi0gICAgZ3VpbnQ4IGxmZV9vbikKLXsKLSAgQXRvbUluZm8gKmV4dDsKLQotICBnX3JldHVybl9pZl9mYWlsIChxdHBhZC0+dHJha19zdGUpOwotCi0gIGV4dCA9IGJ1aWxkX2FjM19leHRlbnNpb24gKGZzY29kLCBic2lkLCBic21vZCwgYWNtb2QsIGxmZV9vbiwgZnJtc2l6Y29kID4+IDEpOyAgICAgICAgLyogYml0cmF0ZV9jb2RlIGlzIGluc2lkZSBmcm1zaXpjb2QgKi8KLQotICBzYW1wbGVfdGFibGVfZW50cnlfYWRkX2V4dF9hdG9tIChxdHBhZC0+dHJha19zdGUsIGV4dCk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3F0X211eF9wcmVwYXJlX3BhcnNlX2FjM19mcmFtZSAoR3N0UVRQYWQgKiBxdHBhZCwgR3N0QnVmZmVyICogYnVmLAotICAgIEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHc3RCeXRlUmVhZGVyIHJlYWRlcjsKLSAgZ3VpbnQgb2ZmOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRwYWQtPmNvbGxlY3QucGFkLCAiRmFpbGVkIHRvIG1hcCBidWZmZXIiKTsKLSAgICByZXR1cm4gYnVmOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG1hcC5zaXplIDwgOCkpCi0gICAgZ290byBkb25lOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcmVhZGVyLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICBvZmYgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgmcmVhZGVyLCAweGZmZmYwMDAwLCAweDBiNzcwMDAwLAotICAgICAgMCwgbWFwLnNpemUpOwotCi0gIGlmIChvZmYgIT0gLTEpIHsKLSAgICBHc3RCaXRSZWFkZXIgYml0czsKLSAgICBndWludDggZnNjb2QsIGZybXNpemNvZCwgYnNpZCwgYnNtb2QsIGFjbW9kLCBsZmVfb247Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdHBhZC0+Y29sbGVjdC5wYWQsICJGb3VuZCBhYzMgc3luYyBwb2ludCBhdCBvZmZzZXQ6ICV1IiwKLSAgICAgICAgb2ZmKTsKLQotICAgIGdzdF9iaXRfcmVhZGVyX2luaXQgKCZiaXRzLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotCi0gICAgLyogb2ZmICsgc3luYyArIGNyYyAqLwotICAgIGdzdF9iaXRfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmYml0cywgb2ZmICogOCArIDE2ICsgMTYpOwotCi0gICAgZnNjb2QgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAyKTsKLSAgICBmcm1zaXpjb2QgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCA2KTsKLSAgICBic2lkID0gZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDhfdW5jaGVja2VkICgmYml0cywgNSk7Ci0gICAgYnNtb2QgPSBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OF91bmNoZWNrZWQgKCZiaXRzLCAzKTsKLSAgICBhY21vZCA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJmJpdHMsIDMpOwotCi0gICAgaWYgKChhY21vZCAmIDB4MSkgJiYgKGFjbW9kICE9IDB4MSkpICAgICAgICAvKiAzIGZyb250IGNoYW5uZWxzICovCi0gICAgICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJmJpdHMsIDIpOwotICAgIGlmICgoYWNtb2QgJiAweDQpKSAgICAgICAgICAvKiBpZiBhIHN1cnJvdW5kIGNoYW5uZWwgZXhpc3RzICovCi0gICAgICBnc3RfYml0X3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoJmJpdHMsIDIpOwotICAgIGlmIChhY21vZCA9PSAweDIpICAgICAgICAgICAvKiBpZiBpbiAyLzAgbW9kZSAqLwotICAgICAgZ3N0X2JpdF9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZiaXRzLCAyKTsKLQotICAgIGxmZV9vbiA9IGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4X3VuY2hlY2tlZCAoJmJpdHMsIDEpOwotCi0gICAgZ3N0X3F0X211eF9wYWRfYWRkX2FjM19leHRlbnNpb24gKHF0bXV4LCBxdHBhZCwgZnNjb2QsIGZybXNpemNvZCwgYnNpZCwKLSAgICAgICAgYnNtb2QsIGFjbW9kLCBsZmVfb24pOwotCi0gICAgLyogQUMtMyBzcGVjIHNheXMgdGhhdCB0aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIGNvbnN0YW50IGZvciB0aGUKLSAgICAgKiB3aG9sZSBzdHJlYW0gd2hlbiBtdXhlZCBpbiBtcDQuIFdlIHRydXN0IHRoZSBpbnB1dCBmb2xsb3dzIGl0ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRwYWQtPmNvbGxlY3QucGFkLCAiRGF0YSBwYXJzZWQsIHJlbW92aW5nICIKLSAgICAgICAgInByZXBhcmUgYnVmZmVyIGZ1bmN0aW9uIik7Ci0gICAgcXRwYWQtPnByZXBhcmVfYnVmX2Z1bmMgPSBOVUxMOwotICB9Ci0KLWRvbmU6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3F0X211eF9jcmVhdGVfZW1wdHlfdHgzZ19idWZmZXIgKEdzdFFUUGFkICogcXRwYWQsIGdpbnQ2NCBkdXJhdGlvbikKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotCi0gIGRhdGEgPSBnX21hbGxvYyAoMik7Ci0gIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIDApOwotCi0gIHJldHVybiBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCAyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfYWRkX21wNF90YWcgKEdzdFFUTXV4ICogcXRtdXgsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIEF0b21VRFRBICogdWR0YSwgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBndWludDMyIGZvdXJjYykKLXsKLSAgc3dpdGNoIChnc3RfdGFnX2dldF90eXBlICh0YWcpKSB7Ci0gICAgICAvKiBzdHJpbmdzICovCi0gICAgY2FzZSBHX1RZUEVfU1RSSU5HOgotICAgIHsKLSAgICAgIGdjaGFyICpzdHIgPSBOVUxMOwotCi0gICAgICBpZiAoIWdzdF90YWdfbGlzdF9nZXRfc3RyaW5nIChsaXN0LCB0YWcsICZzdHIpIHx8ICFzdHIpCi0gICAgICAgIGJyZWFrOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJBZGRpbmcgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgLT4gJXMiLAotICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgc3RyKTsKLSAgICAgIGF0b21fdWR0YV9hZGRfc3RyX3RhZyAodWR0YSwgZm91cmNjLCBzdHIpOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgLyogZG91YmxlICovCi0gICAgY2FzZSBHX1RZUEVfRE9VQkxFOgotICAgIHsKLSAgICAgIGdkb3VibGUgdmFsdWU7Ci0KLSAgICAgIGlmICghZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKGxpc3QsIHRhZywgJnZhbHVlKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiAtPiAldSIsCi0gICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCAoZ2ludCkgdmFsdWUpOwotICAgICAgYXRvbV91ZHRhX2FkZF91aW50X3RhZyAodWR0YSwgZm91cmNjLCAyMSwgKGdpbnQpIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdfVFlQRV9VSU5UOgotICAgIHsKLSAgICAgIGd1aW50IHZhbHVlID0gMDsKLSAgICAgIGlmICh0YWcyKSB7Ci0gICAgICAgIC8qIHBhaXJlZCB1bnNpZ25lZCBpbnRlZ2VycyAqLwotICAgICAgICBndWludCBjb3VudCA9IDA7Ci0gICAgICAgIGdib29sZWFuIGdvdF90YWc7Ci0KLSAgICAgICAgZ290X3RhZyA9IGdzdF90YWdfbGlzdF9nZXRfdWludCAobGlzdCwgdGFnLCAmdmFsdWUpOwotICAgICAgICBnb3RfdGFnID0gZ3N0X3RhZ19saXN0X2dldF91aW50IChsaXN0LCB0YWcyLCAmY291bnQpIHx8IGdvdF90YWc7Ci0gICAgICAgIGlmICghZ290X3RhZykKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJBZGRpbmcgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgLT4gJXUvJXUiLAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCB2YWx1ZSwgY291bnQpOwotICAgICAgICBhdG9tX3VkdGFfYWRkX3VpbnRfdGFnICh1ZHRhLCBmb3VyY2MsIDAsCi0gICAgICAgICAgICB2YWx1ZSA8PCAxNiB8IChjb3VudCAmIDB4RkZGRikpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogdW5wYWlyZWQgdW5zaWduZWQgaW50ZWdlcnMgKi8KLSAgICAgICAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKGxpc3QsIHRhZywgJnZhbHVlKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJBZGRpbmcgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgLT4gJXUiLAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCB2YWx1ZSk7Ci0gICAgICAgIGF0b21fdWR0YV9hZGRfdWludF90YWcgKHVkdGEsIGZvdXJjYywgMSwgdmFsdWUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X2FkZF9tcDRfZGF0ZSAoR3N0UVRNdXggKiBxdG11eCwgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgQXRvbVVEVEEgKiB1ZHRhLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGd1aW50MzIgZm91cmNjKQotewotICBHRGF0ZSAqZGF0ZSA9IE5VTEw7Ci0gIEdEYXRlWWVhciB5ZWFyOwotICBHRGF0ZU1vbnRoIG1vbnRoOwotICBHRGF0ZURheSBkYXk7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3RhZ19nZXRfdHlwZSAodGFnKSA9PSBHX1RZUEVfREFURSk7Ci0KLSAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X2RhdGUgKGxpc3QsIHRhZywgJmRhdGUpIHx8ICFkYXRlKQotICAgIHJldHVybjsKLQotICB5ZWFyID0gZ19kYXRlX2dldF95ZWFyIChkYXRlKTsKLSAgbW9udGggPSBnX2RhdGVfZ2V0X21vbnRoIChkYXRlKTsKLSAgZGF5ID0gZ19kYXRlX2dldF9kYXkgKGRhdGUpOwotCi0gIGdfZGF0ZV9mcmVlIChkYXRlKTsKLQotICBpZiAoeWVhciA9PSBHX0RBVEVfQkFEX1lFQVIgJiYgbW9udGggPT0gR19EQVRFX0JBRF9NT05USCAmJgotICAgICAgZGF5ID09IEdfREFURV9CQURfREFZKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgImludmFsaWQgZGF0ZSBpbiB0YWciKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCIldS0ldS0ldSIsIHllYXIsIG1vbnRoLCBkYXkpOwotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiAtPiAlcyIsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksIHN0cik7Ci0gIGF0b21fdWR0YV9hZGRfc3RyX3RhZyAodWR0YSwgZm91cmNjLCBzdHIpOwotICBnX2ZyZWUgKHN0cik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X2FkZF9tcDRfY292ZXIgKEdzdFFUTXV4ICogcXRtdXgsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIEF0b21VRFRBICogdWR0YSwgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBndWludDMyIGZvdXJjYykKLXsKLSAgR1ZhbHVlIHZhbHVlID0geyAwLCB9OwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0U2FtcGxlICpzYW1wbGU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IGZsYWdzID0gMDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZ3N0X3RhZ19nZXRfdHlwZSAodGFnKSA9PSBHU1RfVFlQRV9TQU1QTEUpOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2NvcHlfdmFsdWUgKCZ2YWx1ZSwgbGlzdCwgdGFnKSkKLSAgICByZXR1cm47Ci0KLSAgc2FtcGxlID0gZ3N0X3ZhbHVlX2dldF9zYW1wbGUgKCZ2YWx1ZSk7Ci0KLSAgaWYgKCFzYW1wbGUpCi0gICAgZ290byBkb25lOwotCi0gIGJ1ZiA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoc2FtcGxlKTsKLSAgaWYgKCFidWYpCi0gICAgZ290byBkb25lOwotCi0gIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpOwotICBpZiAoIWNhcHMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAicHJldmlldyBpbWFnZSB3aXRob3V0IGNhcHMiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgInByZXZpZXcgaW1hZ2UgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJpbWFnZS9qcGVnIikpCi0gICAgZmxhZ3MgPSAxMzsKLSAgZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoc3RydWN0dXJlLCAiaW1hZ2UvcG5nIikpCi0gICAgZmxhZ3MgPSAxNDsKLQotICBpZiAoIWZsYWdzKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgInByZXZpZXcgaW1hZ2UgZm9ybWF0IG5vdCBzdXBwb3J0ZWQiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQKLSAgICAgICIgLT4gaW1hZ2Ugc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIiwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCBtYXAuc2l6ZSk7Ci0gIGF0b21fdWR0YV9hZGRfdGFnICh1ZHRhLCBmb3VyY2MsIGZsYWdzLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotZG9uZToKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfYWRkXzNncF9zdHIgKEdzdFFUTXV4ICogcXRtdXgsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIEF0b21VRFRBICogdWR0YSwgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBndWludDMyIGZvdXJjYykKLXsKLSAgZ2NoYXIgKnN0ciA9IE5VTEw7Ci0gIGd1aW50IG51bWJlcjsKLQotICBnX3JldHVybl9pZl9mYWlsIChnc3RfdGFnX2dldF90eXBlICh0YWcpID09IEdfVFlQRV9TVFJJTkcpOwotICBnX3JldHVybl9pZl9mYWlsICghdGFnMiB8fCBnc3RfdGFnX2dldF90eXBlICh0YWcyKSA9PSBHX1RZUEVfVUlOVCk7Ci0KLSAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAobGlzdCwgdGFnLCAmc3RyKSB8fCAhc3RyKQotICAgIHJldHVybjsKLQotICBpZiAodGFnMikKLSAgICBpZiAoIWdzdF90YWdfbGlzdF9nZXRfdWludCAobGlzdCwgdGFnMiwgJm51bWJlcikpCi0gICAgICB0YWcyID0gTlVMTDsKLQotICBpZiAoIXRhZzIpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiAtPiAlcyIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgc3RyKTsKLSAgICBhdG9tX3VkdGFfYWRkXzNncF9zdHJfdGFnICh1ZHRhLCBmb3VyY2MsIHN0cik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJBZGRpbmcgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgLT4gJXMvJWQiLAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksIHN0ciwgbnVtYmVyKTsKLSAgICBhdG9tX3VkdGFfYWRkXzNncF9zdHJfaW50X3RhZyAodWR0YSwgZm91cmNjLCBzdHIsIG51bWJlcik7Ci0gIH0KLQotICBnX2ZyZWUgKHN0cik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X2FkZF8zZ3BfZGF0ZSAoR3N0UVRNdXggKiBxdG11eCwgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsCi0gICAgQXRvbVVEVEEgKiB1ZHRhLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGd1aW50MzIgZm91cmNjKQotewotICBHRGF0ZSAqZGF0ZSA9IE5VTEw7Ci0gIEdEYXRlWWVhciB5ZWFyOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF90YWdfZ2V0X3R5cGUgKHRhZykgPT0gR19UWVBFX0RBVEUpOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2dldF9kYXRlIChsaXN0LCB0YWcsICZkYXRlKSB8fCAhZGF0ZSkKLSAgICByZXR1cm47Ci0KLSAgeWVhciA9IGdfZGF0ZV9nZXRfeWVhciAoZGF0ZSk7Ci0gIGdfZGF0ZV9mcmVlIChkYXRlKTsKLQotICBpZiAoeWVhciA9PSBHX0RBVEVfQkFEX1lFQVIpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAiaW52YWxpZCBkYXRlIGluIHRhZyIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiQWRkaW5nIHRhZyAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIC0+ICVkIiwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgeWVhcik7Ci0gIGF0b21fdWR0YV9hZGRfM2dwX3VpbnRfdGFnICh1ZHRhLCBmb3VyY2MsIHllYXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9hZGRfM2dwX2xvY2F0aW9uIChHc3RRVE11eCAqIHF0bXV4LCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBBdG9tVURUQSAqIHVkdGEsIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnMiwgZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIGdkb3VibGUgbGF0aXR1ZGUgPSAtMzYwLCBsb25naXR1ZGUgPSAtMzYwLCBhbHRpdHVkZSA9IDA7Ci0gIGdjaGFyICpsb2NhdGlvbiA9IE5VTEw7Ci0gIGd1aW50OCAqZGF0YSwgKmRkYXRhOwotICBnaW50IHNpemUgPSAwLCBsZW4gPSAwOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBnX3JldHVybl9pZl9mYWlsIChzdHJjbXAgKHRhZywgR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRSkgPT0gMCk7Ci0KLSAgcmV0ID0gZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIHRhZywgJmxvY2F0aW9uKTsKLSAgcmV0IHw9IGdzdF90YWdfbGlzdF9nZXRfZG91YmxlIChsaXN0LCBHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREUsCi0gICAgICAmbG9uZ2l0dWRlKTsKLSAgcmV0IHw9IGdzdF90YWdfbGlzdF9nZXRfZG91YmxlIChsaXN0LCBHU1RfVEFHX0dFT19MT0NBVElPTl9MQVRJVFVERSwKLSAgICAgICZsYXRpdHVkZSk7Ci0gIHJldCB8PSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAobGlzdCwgR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OLAotICAgICAgJmFsdGl0dWRlKTsKLQotICBpZiAoIXJldCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKGxvY2F0aW9uKQotICAgIGxlbiA9IHN0cmxlbiAobG9jYXRpb24pOwotICBzaXplICs9IGxlbiArIDEgKyAyOwotCi0gIC8qIHJvbGUgKyAobG9uZywgbGF0LCBhbHQpICsgYm9keSArIG5vdGVzICovCi0gIHNpemUgKz0gMSArIDMgKiA0ICsgMSArIDE7Ci0KLSAgZGF0YSA9IGRkYXRhID0gZ19tYWxsb2MgKHNpemUpOwotCi0gIC8qIGxhbmd1YWdlIHRhZyAqLwotICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhLCBsYW5ndWFnZV9jb2RlIChHU1RfUVRfTVVYX0RFRkFVTFRfVEFHX0xBTkdVQUdFKSk7Ci0gIC8qIGxvY2F0aW9uICovCi0gIGlmIChsb2NhdGlvbikKLSAgICBtZW1jcHkgKGRhdGEgKyAyLCBsb2NhdGlvbiwgbGVuKTsKLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhICsgMiArIGxlbiwgMCk7Ci0gIGRhdGEgKz0gbGVuICsgMSArIDI7Ci0gIC8qIHJvbGUgKi8KLSAgR1NUX1dSSVRFX1VJTlQ4IChkYXRhLCAwKTsKLSAgLyogbG9uZywgbGF0LCBhbHQgKi8KLSNkZWZpbmUgUVRfV1JJVEVfU0ZQMzIoZGF0YSwgZnApIEdTVF9XUklURV9VSU5UMzJfQkUoZGF0YSwgKGd1aW50MzIpICgoZ2ludCkgKGZwICogNjU1MzYuMCkpKQotICBRVF9XUklURV9TRlAzMiAoZGF0YSArIDEsIGxvbmdpdHVkZSk7Ci0gIFFUX1dSSVRFX1NGUDMyIChkYXRhICsgNSwgbGF0aXR1ZGUpOwotICBRVF9XUklURV9TRlAzMiAoZGF0YSArIDksIGFsdGl0dWRlKTsKLSAgLyogbmVpdGhlciBhc3Ryb25vbWljYWwgYm9keSBub3Igbm90ZXMgKi8KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSArIDEzLCAwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB0YWcgJ2xvY2knIik7Ci0gIGF0b21fdWR0YV9hZGRfM2dwX3RhZyAodWR0YSwgZm91cmNjLCBkZGF0YSwgc2l6ZSk7Ci0gIGdfZnJlZSAoZGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9hZGRfM2dwX2tleXdvcmRzIChHc3RRVE11eCAqIHF0bXV4LCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBBdG9tVURUQSAqIHVkdGEsIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnMiwgZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIGdjaGFyICprZXl3b3JkcyA9IE5VTEw7Ci0gIGd1aW50OCAqZGF0YSwgKmRkYXRhOwotICBnaW50IHNpemUgPSAwLCBpOwotICBnY2hhciAqKmt3ZHM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoc3RyY21wICh0YWcsIEdTVF9UQUdfS0VZV09SRFMpID09IDApOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIHRhZywgJmtleXdvcmRzKSB8fCAha2V5d29yZHMpCi0gICAgcmV0dXJuOwotCi0gIGt3ZHMgPSBnX3N0cnNwbGl0IChrZXl3b3JkcywgIiwiLCAwKTsKLSAgZ19mcmVlIChrZXl3b3Jkcyk7Ci0KLSAgc2l6ZSA9IDA7Ci0gIGZvciAoaSA9IDA7IGt3ZHNbaV07IGkrKykgewotICAgIC8qIHNpemUgYnl0ZSArIG51bGwtdGVybWluYXRvciAqLwotICAgIHNpemUgKz0gc3RybGVuIChrd2RzW2ldKSArIDEgKyAxOwotICB9Ci0KLSAgLyogbGFuZ3VhZ2UgdGFnICsgY291bnQgKyBrZXl3b3JkcyAqLwotICBzaXplICs9IDIgKyAxOwotCi0gIGRhdGEgPSBkZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKLQotICAvKiBsYW5ndWFnZSB0YWcgKi8KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSwgbGFuZ3VhZ2VfY29kZSAoR1NUX1FUX01VWF9ERUZBVUxUX1RBR19MQU5HVUFHRSkpOwotICAvKiBjb3VudCAqLwotICBHU1RfV1JJVEVfVUlOVDggKGRhdGEgKyAyLCBpKTsKLSAgZGF0YSArPSAzOwotICAvKiBrZXl3b3JkcyAqLwotICBmb3IgKGkgPSAwOyBrd2RzW2ldOyArK2kpIHsKLSAgICBnaW50IGxlbiA9IHN0cmxlbiAoa3dkc1tpXSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiAtPiAlcyIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwga3dkc1tpXSk7Ci0gICAgLyogc2l6ZSAqLwotICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSwgbGVuICsgMSk7Ci0gICAgbWVtY3B5IChkYXRhICsgMSwga3dkc1tpXSwgbGVuICsgMSk7Ci0gICAgZGF0YSArPSBsZW4gKyAyOwotICB9Ci0KLSAgZ19zdHJmcmVldiAoa3dkcyk7Ci0KLSAgYXRvbV91ZHRhX2FkZF8zZ3BfdGFnICh1ZHRhLCBmb3VyY2MsIGRkYXRhLCBzaXplKTsKLSAgZ19mcmVlIChkZGF0YSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0X211eF9wYXJzZV9jbGFzc2lmaWNhdGlvbl9zdHJpbmcgKEdzdFFUTXV4ICogcXRtdXgsIGNvbnN0IGdjaGFyICogaW5wdXQsCi0gICAgZ3VpbnQzMiAqIHBfZm91cmNjLCBndWludDE2ICogcF90YWJsZSwgZ2NoYXIgKiogcF9jb250ZW50KQotewotICBndWludDMyIGZvdXJjYzsKLSAgZ2ludCB0YWJsZTsKLSAgZ2ludCBzaXplOwotICBjb25zdCBnY2hhciAqZGF0YTsKLQotICBkYXRhID0gaW5wdXQ7Ci0gIHNpemUgPSBzdHJsZW4gKGlucHV0KTsKLQotICBpZiAoc2l6ZSA8IDQgKyAzICsgMSArIDEgKyAxKSB7Ci0gICAgLyogYXQgbGVhc3QgdGhlIG1pbmltdW0geHh4eDovL3kveiAqLwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJDbGFzc2lmaWNhdGlvbiB0YWcgaW5wdXQgKCVzKSB0b28gc2hvcnQsICIKLSAgICAgICAgImlnbm9yaW5nIiwgaW5wdXQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIHJlYWQgdGhlIGZvdXJjYyAqLwotICBtZW1jcHkgKCZmb3VyY2MsIGRhdGEsIDQpOwotICBzaXplIC09IDQ7Ci0gIGRhdGEgKz0gNDsKLQotICBpZiAoc3RybmNtcCAoZGF0YSwgIjovLyIsIDMpICE9IDApIHsKLSAgICBnb3RvIG1pc21hdGNoOwotICB9Ci0gIGRhdGEgKz0gMzsKLSAgc2l6ZSAtPSAzOwotCi0gIC8qIHJlYWQgdGhlIHRhYmxlIG51bWJlciAqLwotICBpZiAoc3NjYW5mIChkYXRhLCAiJWQiLCAmdGFibGUpICE9IDEpIHsKLSAgICBnb3RvIG1pc21hdGNoOwotICB9Ci0gIGlmICh0YWJsZSA8IDApIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAiSW52YWxpZCB0YWJsZSBudW1iZXIgaW4gY2xhc3NpZmljYXRpb24gdGFnICglZCkiCi0gICAgICAgICIsIHRhYmxlIG51bWJlcnMgc2hvdWxkIGJlIHBvc2l0aXZlLCBpZ25vcmluZyB0YWciLCB0YWJsZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogZmluZCB0aGUgbmV4dCAvICovCi0gIHdoaWxlIChzaXplID4gMCAmJiBkYXRhWzBdICE9ICcvJykgewotICAgIGRhdGEgKz0gMTsKLSAgICBzaXplIC09IDE7Ci0gIH0KLSAgaWYgKHNpemUgPT0gMCkgewotICAgIGdvdG8gbWlzbWF0Y2g7Ci0gIH0KLSAgZ19hc3NlcnQgKGRhdGFbMF0gPT0gJy8nKTsKLQotICAvKiBza2lwIHRoZSAnLycgKi8KLSAgZGF0YSArPSAxOwotICBzaXplIC09IDE7Ci0gIGlmIChzaXplID09IDApIHsKLSAgICBnb3RvIG1pc21hdGNoOwotICB9Ci0KLSAgLyogcmVhZCB1cCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nICovCi0gICpwX2NvbnRlbnQgPSBnX3N0cmR1cCAoZGF0YSk7Ci0gICpwX3RhYmxlID0gKGd1aW50MTYpIHRhYmxlOwotICAqcF9mb3VyY2MgPSBmb3VyY2M7Ci0gIHJldHVybiBUUlVFOwotCi1taXNtYXRjaDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJJZ25vcmluZyBjbGFzc2lmaWNhdGlvbiB0YWcgYXMgIgotICAgICAgICAiaW5wdXQgKCVzKSBkaWRuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGVudGl0eWNvZGU6Ly90YWJsZS9jb250ZW50IiwKLSAgICAgICAgaW5wdXQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9hZGRfM2dwX2NsYXNzaWZpY2F0aW9uIChHc3RRVE11eCAqIHF0bXV4LCBjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwKLSAgICBBdG9tVURUQSAqIHVkdGEsIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnMiwgZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIGdjaGFyICpjbHNmX2RhdGEgPSBOVUxMOwotICBnaW50IHNpemUgPSAwOwotICBndWludDMyIGVudGl0eSA9IDA7Ci0gIGd1aW50MTYgdGFibGUgPSAwOwotICBnY2hhciAqY29udGVudCA9IE5VTEw7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBnX3JldHVybl9pZl9mYWlsIChzdHJjbXAgKHRhZywgR1NUX1RBR18zR1BfQ0xBU1NJRklDQVRJT04pID09IDApOwotCi0gIGlmICghZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIHRhZywgJmNsc2ZfZGF0YSkgfHwgIWNsc2ZfZGF0YSkKLSAgICByZXR1cm47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJBZGRpbmcgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgLT4gJXMiLAotICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCBjbHNmX2RhdGEpOwotCi0gIC8qIHBhcnNlIHRoZSBzdHJpbmcsIGZvcm1hdCBpczoKLSAgICogZW50aXR5Zm91cmNjOi8vdGFibGUvY29udGVudAotICAgKi8KLSAgZ3N0X3F0X211eF9wYXJzZV9jbGFzc2lmaWNhdGlvbl9zdHJpbmcgKHF0bXV4LCBjbHNmX2RhdGEsICZlbnRpdHksICZ0YWJsZSwKLSAgICAgICZjb250ZW50KTsKLSAgZ19mcmVlIChjbHNmX2RhdGEpOwotICAvKiArMSBmb3IgdGhlIFwwICovCi0gIHNpemUgPSBzdHJsZW4gKGNvbnRlbnQpICsgMTsKLQotICAvKiBub3cgd2UgaGF2ZSBldmVyeXRoaW5nLCBidWlsZCB0aGUgYXRvbQotICAgKiBhdG9tIGRlc2NyaXB0aW9uIGlzIGF0IDNHUFAgVFMgMjYuMjQ0IFY4LjIuMCAoMjAwOS0wOSkgKi8KLSAgZGF0YSA9IGdfbWFsbG9jICg0ICsgMiArIDIgKyBzaXplKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgZW50aXR5KTsKLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSArIDQsIChndWludDE2KSB0YWJsZSk7Ci0gIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEgKyA2LCAwKTsKLSAgbWVtY3B5IChkYXRhICsgOCwgY29udGVudCwgc2l6ZSk7Ci0gIGdfZnJlZSAoY29udGVudCk7Ci0KLSAgYXRvbV91ZHRhX2FkZF8zZ3BfdGFnICh1ZHRhLCBmb3VyY2MsIGRhdGEsIDQgKyAyICsgMiArIHNpemUpOwotICBnX2ZyZWUgKGRhdGEpOwotfQotCi10eXBlZGVmIHZvaWQgKCpHc3RRVE11eEFkZFVkdGFUYWdGdW5jKSAoR3N0UVRNdXggKiBtdXgsCi0gICAgY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIEF0b21VRFRBICogdWR0YSwgY29uc3QgY2hhciAqdGFnLAotICAgIGNvbnN0IGNoYXIgKnRhZzIsIGd1aW50MzIgZm91cmNjKTsKLQotLyoKLSAqIFN0cnVjdCB0byByZWNvcmQgbWFwcGluZ3MgZnJvbSBnc3RyZWFtZXIgdGFncyB0byBmb3VyY2MgY29kZXMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhZ1RvRm91cmNjCi17Ci0gIGd1aW50MzIgZm91cmNjOwotICBjb25zdCBnY2hhciAqZ3N0dGFnOwotICBjb25zdCBnY2hhciAqZ3N0dGFnMjsKLSAgY29uc3QgR3N0UVRNdXhBZGRVZHRhVGFnRnVuYyBmdW5jOwotfSBHc3RUYWdUb0ZvdXJjYzsKLQotLyogdGFnIGxpc3QgdGFncyB0byBmb3VyY2MgbWF0Y2hpbmcgKi8KLXN0YXRpYyBjb25zdCBHc3RUYWdUb0ZvdXJjYyB0YWdfbWF0Y2hlc19tcDRbXSA9IHsKLSAge0ZPVVJDQ19fYWxiLCBHU1RfVEFHX0FMQlVNLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19zb2FsLCBHU1RfVEFHX0FMQlVNX1NPUlROQU1FLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19fQVJULCBHU1RfVEFHX0FSVElTVCwgTlVMTCwgZ3N0X3F0X211eF9hZGRfbXA0X3RhZ30sCi0gIHtGT1VSQ0Nfc29hciwgR1NUX1RBR19BUlRJU1RfU09SVE5BTUUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX2FBUlQsIEdTVF9UQUdfQUxCVU1fQVJUSVNULCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19zb2FhLCBHU1RfVEFHX0FMQlVNX0FSVElTVF9TT1JUTkFNRSwgTlVMTCwgZ3N0X3F0X211eF9hZGRfbXA0X3RhZ30sCi0gIHtGT1VSQ0NfX3N3ciwgR1NUX1RBR19BUFBMSUNBVElPTl9OQU1FLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19fY210LCBHU1RfVEFHX0NPTU1FTlQsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX193cnQsIEdTVF9UQUdfQ09NUE9TRVIsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX3NvY28sIEdTVF9UQUdfQ09NUE9TRVJfU09SVE5BTUUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX3R2c2gsIEdTVF9UQUdfU0hPV19OQU1FLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19zb3NuLCBHU1RfVEFHX1NIT1dfU09SVE5BTUUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX3R2c24sIEdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ190dmVzLCBHU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVIsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX19nZW4sIEdTVF9UQUdfR0VOUkUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX19uYW0sIEdTVF9UQUdfVElUTEUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX3Nvbm0sIEdTVF9UQUdfVElUTEVfU09SVE5BTUUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX3BlcmYsIEdTVF9UQUdfUEVSRk9STUVSLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19fZ3JwLCBHU1RfVEFHX0dST1VQSU5HLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19fZGVzLCBHU1RfVEFHX0RFU0NSSVBUSU9OLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19fbHlyLCBHU1RfVEFHX0xZUklDUywgTlVMTCwgZ3N0X3F0X211eF9hZGRfbXA0X3RhZ30sCi0gIHtGT1VSQ0NfX3RvbywgR1NUX1RBR19FTkNPREVSLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19jcHJ0LCBHU1RfVEFHX0NPUFlSSUdIVCwgTlVMTCwgZ3N0X3F0X211eF9hZGRfbXA0X3RhZ30sCi0gIHtGT1VSQ0Nfa2V5dywgR1NUX1RBR19LRVlXT1JEUywgTlVMTCwgZ3N0X3F0X211eF9hZGRfbXA0X3RhZ30sCi0gIHtGT1VSQ0NfX2RheSwgR1NUX1RBR19EQVRFLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfZGF0ZX0sCi0gIHtGT1VSQ0NfdG1wbywgR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFLCBOVUxMLCBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ190cmtuLCBHU1RfVEFHX1RSQUNLX05VTUJFUiwgR1NUX1RBR19UUkFDS19DT1VOVCwKLSAgICAgIGdzdF9xdF9tdXhfYWRkX21wNF90YWd9LAotICB7Rk9VUkNDX2Rpc2ssIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUiwgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQsCi0gICAgICBnc3RfcXRfbXV4X2FkZF9tcDRfdGFnfSwKLSAge0ZPVVJDQ19jb3ZyLCBHU1RfVEFHX1BSRVZJRVdfSU1BR0UsIE5VTEwsIGdzdF9xdF9tdXhfYWRkX21wNF9jb3Zlcn0sCi0gIHtGT1VSQ0NfY292ciwgR1NUX1RBR19JTUFHRSwgTlVMTCwgZ3N0X3F0X211eF9hZGRfbXA0X2NvdmVyfSwKLSAgezAsIE5VTEwsfQotfTsKLQotc3RhdGljIGNvbnN0IEdzdFRhZ1RvRm91cmNjIHRhZ19tYXRjaGVzXzNncFtdID0gewotICB7Rk9VUkNDX3RpdGwsIEdTVF9UQUdfVElUTEUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkXzNncF9zdHJ9LAotICB7Rk9VUkNDX2RzY3AsIEdTVF9UQUdfREVTQ1JJUFRJT04sIE5VTEwsIGdzdF9xdF9tdXhfYWRkXzNncF9zdHJ9LAotICB7Rk9VUkNDX2NwcnQsIEdTVF9UQUdfQ09QWVJJR0hULCBOVUxMLCBnc3RfcXRfbXV4X2FkZF8zZ3Bfc3RyfSwKLSAge0ZPVVJDQ19wZXJmLCBHU1RfVEFHX0FSVElTVCwgTlVMTCwgZ3N0X3F0X211eF9hZGRfM2dwX3N0cn0sCi0gIHtGT1VSQ0NfYXV0aCwgR1NUX1RBR19DT01QT1NFUiwgTlVMTCwgZ3N0X3F0X211eF9hZGRfM2dwX3N0cn0sCi0gIHtGT1VSQ0NfZ25yZSwgR1NUX1RBR19HRU5SRSwgTlVMTCwgZ3N0X3F0X211eF9hZGRfM2dwX3N0cn0sCi0gIHtGT1VSQ0Nfa3l3ZCwgR1NUX1RBR19LRVlXT1JEUywgTlVMTCwgZ3N0X3F0X211eF9hZGRfM2dwX2tleXdvcmRzfSwKLSAge0ZPVVJDQ195cnJjLCBHU1RfVEFHX0RBVEUsIE5VTEwsIGdzdF9xdF9tdXhfYWRkXzNncF9kYXRlfSwKLSAge0ZPVVJDQ19hbGJtLCBHU1RfVEFHX0FMQlVNLCBHU1RfVEFHX1RSQUNLX05VTUJFUiwgZ3N0X3F0X211eF9hZGRfM2dwX3N0cn0sCi0gIHtGT1VSQ0NfbG9jaSwgR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRSwgTlVMTCwgZ3N0X3F0X211eF9hZGRfM2dwX2xvY2F0aW9ufSwKLSAge0ZPVVJDQ19jbHNmLCBHU1RfVEFHXzNHUF9DTEFTU0lGSUNBVElPTiwgTlVMTCwKLSAgICAgIGdzdF9xdF9tdXhfYWRkXzNncF9jbGFzc2lmaWNhdGlvbn0sCi0gIHswLCBOVUxMLH0KLX07Ci0KLS8qIHF0ZGVtdXggcHJvZHVjZXMgdGhlc2UgZm9yIGF0b21zIGl0IGNhbm5vdCBwYXJzZSAqLwotI2RlZmluZSBHU1RfUVRfREVNVVhfUFJJVkFURV9UQUcgInByaXZhdGUtcXQtdGFnIgotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9hZGRfeG1wX3RhZ3MgKEdzdFFUTXV4ICogcXRtdXgsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KQotewotICBHc3RRVE11eENsYXNzICpxdG11eF9rbGFzcyA9IChHc3RRVE11eENsYXNzICopIChHX09CSkVDVF9HRVRfQ0xBU1MgKHF0bXV4KSk7Ci0gIEdzdEJ1ZmZlciAqeG1wID0gTlVMTDsKLQotICAvKiBhZG9iZSBzcGVjcyBvbmx5IGhhdmUgJ3F1aWNrdGltZScgYW5kICdtcDQnLAotICAgKiBidXQgSSBndWVzcyB3ZSBjYW4gZXh0cmFwb2xhdGUgdG8gZ3BwLgotICAgKiBLZWVwIG1qMiBvdXQgZm9yIG5vdyBhcyB3ZSBkb24ndCBhZGQgYW55IHRhZ3MgZm9yIGl0IHlldC4KLSAgICogSWYgeW91IGhhdmUgZnVydGhlciBpbmZvIGFib3V0IHhtcCBvbiB0aGVzZSBmb3JtYXRzLCBwbGVhc2Ugc2hhcmUgKi8KLSAgaWYgKHF0bXV4X2tsYXNzLT5mb3JtYXQgPT0gR1NUX1FUX01VWF9GT1JNQVRfTUoyKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyB4bXAgdGFncyIpOwotCi0gIGlmIChxdG11eF9rbGFzcy0+Zm9ybWF0ID09IEdTVF9RVF9NVVhfRk9STUFUX1FUKSB7Ci0gICAgeG1wID0gZ3N0X3RhZ194bXBfd3JpdGVyX3RhZ19saXN0X3RvX3htcF9idWZmZXIgKEdTVF9UQUdfWE1QX1dSSVRFUiAocXRtdXgpLAotICAgICAgICBsaXN0LCBUUlVFKTsKLSAgICBpZiAoeG1wKQotICAgICAgYXRvbV91ZHRhX2FkZF94bXBfdGFncyAoJnF0bXV4LT5tb292LT51ZHRhLCB4bXApOwotICB9IGVsc2UgewotICAgIEF0b21JbmZvICphaW5mbzsKLSAgICAvKiBmb3IgaXNvbS9tcDQsIGl0IGlzIGEgdG9wIGxldmVsIHV1aWQgYXRvbSAqLwotICAgIHhtcCA9IGdzdF90YWdfeG1wX3dyaXRlcl90YWdfbGlzdF90b194bXBfYnVmZmVyIChHU1RfVEFHX1hNUF9XUklURVIgKHF0bXV4KSwKLSAgICAgICAgbGlzdCwgVFJVRSk7Ci0gICAgaWYgKHhtcCkgewotICAgICAgYWluZm8gPSBidWlsZF91dWlkX3htcF9hdG9tICh4bXApOwotICAgICAgaWYgKGFpbmZvKSB7Ci0gICAgICAgIHF0bXV4LT5leHRyYV9hdG9tcyA9IGdfc2xpc3RfcHJlcGVuZCAocXRtdXgtPmV4dHJhX2F0b21zLCBhaW5mbyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmICh4bXApCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoeG1wKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfYWRkX21ldGFkYXRhX3RhZ3MgKEdzdFFUTXV4ICogcXRtdXgsIGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIEF0b21VRFRBICogdWR0YSkKLXsKLSAgR3N0UVRNdXhDbGFzcyAqcXRtdXhfa2xhc3MgPSAoR3N0UVRNdXhDbGFzcyAqKSAoR19PQkpFQ1RfR0VUX0NMQVNTIChxdG11eCkpOwotICBndWludDMyIGZvdXJjYzsKLSAgZ2ludCBpOwotICBjb25zdCBnY2hhciAqdGFnLCAqdGFnMjsKLSAgY29uc3QgR3N0VGFnVG9Gb3VyY2MgKnRhZ19tYXRjaGVzOwotCi0gIHN3aXRjaCAocXRtdXhfa2xhc3MtPmZvcm1hdCkgewotICAgIGNhc2UgR1NUX1FUX01VWF9GT1JNQVRfM0dQOgotICAgICAgdGFnX21hdGNoZXMgPSB0YWdfbWF0Y2hlc18zZ3A7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVF9NVVhfRk9STUFUX01KMjoKLSAgICAgIHRhZ19tYXRjaGVzID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBzb3J0IG9mIGlUdW5lcyBzdHlsZSBmb3IgbXA0IGFuZCBRVCAoPykgKi8KLSAgICAgIHRhZ19tYXRjaGVzID0gdGFnX21hdGNoZXNfbXA0OwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoIXRhZ19tYXRjaGVzKQotICAgIHJldHVybjsKLQotICAvKiBDbGVhciBleGlzdGluZyB0YWdzIHNvIHdlIGRvbid0IGFkZCB0aGVtIG92ZXIgYW5kIG92ZXIgKi8KLSAgYXRvbV91ZHRhX2NsZWFyX3RhZ3MgKHVkdGEpOwotCi0gIGZvciAoaSA9IDA7IHRhZ19tYXRjaGVzW2ldLmZvdXJjYzsgaSsrKSB7Ci0gICAgZm91cmNjID0gdGFnX21hdGNoZXNbaV0uZm91cmNjOwotICAgIHRhZyA9IHRhZ19tYXRjaGVzW2ldLmdzdHRhZzsKLSAgICB0YWcyID0gdGFnX21hdGNoZXNbaV0uZ3N0dGFnMjsKLQotICAgIGdfYXNzZXJ0ICh0YWdfbWF0Y2hlc1tpXS5mdW5jKTsKLSAgICB0YWdfbWF0Y2hlc1tpXS5mdW5jIChxdG11eCwgbGlzdCwgdWR0YSwgdGFnLCB0YWcyLCBmb3VyY2MpOwotICB9Ci0KLSAgLyogYWRkIHVucGFyc2VkIGJsb2JzIGlmIHByZXNlbnQgKi8KLSAgaWYgKGdzdF90YWdfZXhpc3RzIChHU1RfUVRfREVNVVhfUFJJVkFURV9UQUcpKSB7Ci0gICAgZ3VpbnQgbnVtX3RhZ3M7Ci0KLSAgICBudW1fdGFncyA9IGdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKGxpc3QsIEdTVF9RVF9ERU1VWF9QUklWQVRFX1RBRyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bV90YWdzOyArK2kpIHsKLSAgICAgIEdzdFNhbXBsZSAqc2FtcGxlID0gTlVMTDsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICBpZiAoIWdzdF90YWdfbGlzdF9nZXRfc2FtcGxlX2luZGV4IChsaXN0LCBHU1RfUVRfREVNVVhfUFJJVkFURV9UQUcsIGksCi0gICAgICAgICAgICAgICZzYW1wbGUpKQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGJ1ZiA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoc2FtcGxlKTsKLQotICAgICAgaWYgKGJ1ZiAmJiAocyA9IGdzdF9zYW1wbGVfZ2V0X2luZm8gKHNhbXBsZSkpKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpzdHlsZSA9IE5VTEw7Ci0gICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LAotICAgICAgICAgICAgIkZvdW5kIHByaXZhdGUgdGFnICVkLyVkOyBzaXplICUiIEdfR1NJWkVfRk9STUFUICIsIGluZm8gJSIKLSAgICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBpLCBudW1fdGFncywgbWFwLnNpemUsIHMpOwotICAgICAgICBpZiAocyAmJiAoc3R5bGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJzdHlsZSIpKSkgewotICAgICAgICAgIC8qIHRyeSB0byBwcmV2ZW50IHNvbWUgc3R5bGUgdGFnIGVuZGluZyB1cCBpbnRvIGFub3RoZXIgdmFyaWFudAotICAgICAgICAgICAqICh0b2RvOiBtYWtlIGludG8gYSBsaXN0IGlmIG1vcmUgY2FzZXMpICovCi0gICAgICAgICAgaWYgKChzdHJjbXAgKHN0eWxlLCAiaXR1bmVzIikgPT0gMCAmJgotICAgICAgICAgICAgICAgICAgcXRtdXhfa2xhc3MtPmZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9NUDQpIHx8Ci0gICAgICAgICAgICAgIChzdHJjbXAgKHN0eWxlLCAiaXNvIikgPT0gMCAmJgotICAgICAgICAgICAgICAgICAgcXRtdXhfa2xhc3MtPmZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF8zR1ApKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkFkZGluZyBwcml2YXRlIHRhZyIpOwotICAgICAgICAgICAgYXRvbV91ZHRhX2FkZF9ibG9iX3RhZyAodWR0YSwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgIH0KLSAgICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuOwotfQotCi0vKgotICogR2V0cyB0aGUgdGFnc2V0dGVyIGlmYWNlIHRhZ2xpc3QgYW5kIHB1dHMgdGhlIGtub3duIHRhZ3MKLSAqIGludG8gdGhlIG91dHB1dCBzdHJlYW0KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfc2V0dXBfbWV0YWRhdGEgKEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIGNvbnN0IEdzdFRhZ0xpc3QgKnRhZ3MgPSBOVUxMOwotICBHU0xpc3QgKndhbGs7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdG11eCk7Ci0gIGlmIChxdG11eC0+dGFnc19jaGFuZ2VkKSB7Ci0gICAgdGFncyA9IGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAoR1NUX1RBR19TRVRURVIgKHF0bXV4KSk7Ci0gICAgcXRtdXgtPnRhZ3NfY2hhbmdlZCA9IEZBTFNFOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG11eCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAidGFnczogJSIgR1NUX1BUUl9GT1JNQVQsIHRhZ3MpOwotCi0gIGlmICh0YWdzICYmICFnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKHRhZ3MpKSB7Ci0gICAgR3N0VGFnTGlzdCAqY29weSA9IGdzdF90YWdfbGlzdF9jb3B5ICh0YWdzKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiUmVtb3ZpbmcgYm9ndXMgdGFncyIpOwotICAgIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnIChjb3B5LCBHU1RfVEFHX1ZJREVPX0NPREVDKTsKLSAgICBnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZyAoY29weSwgR1NUX1RBR19BVURJT19DT0RFQyk7Ci0gICAgZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKGNvcHksIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkZvcm1hdHRpbmcgdGFncyIpOwotICAgIGdzdF9xdF9tdXhfYWRkX21ldGFkYXRhX3RhZ3MgKHF0bXV4LCBjb3B5LCAmcXRtdXgtPm1vb3YtPnVkdGEpOwotICAgIGdzdF9xdF9tdXhfYWRkX3htcF90YWdzIChxdG11eCwgY29weSk7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChjb3B5KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIk5vIG5ldyB0YWdzIHJlY2VpdmVkIik7Ci0gIH0KLQotICBmb3IgKHdhbGsgPSBxdG11eC0+c2lua3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0Q29sbGVjdERhdGEgKmNkYXRhID0gKEdzdENvbGxlY3REYXRhICopIHdhbGstPmRhdGE7Ci0gICAgR3N0UVRQYWQgKnFwYWQgPSAoR3N0UVRQYWQgKikgY2RhdGE7Ci0gICAgR3N0UGFkICpwYWQgPSBxcGFkLT5jb2xsZWN0LnBhZDsKLQotICAgIGlmIChxcGFkLT50YWdzX2NoYW5nZWQgJiYgcXBhZC0+dGFncykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiQWRkaW5nIHRhZ3MiKTsKLSAgICAgIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnIChxcGFkLT50YWdzLCBHU1RfVEFHX0NPTlRBSU5FUl9GT1JNQVQpOwotICAgICAgZ3N0X3F0X211eF9hZGRfbWV0YWRhdGFfdGFncyAocXRtdXgsIHFwYWQtPnRhZ3MsICZxcGFkLT50cmFrLT51ZHRhKTsKLSAgICAgIHFwYWQtPnRhZ3NfY2hhbmdlZCA9IEZBTFNFOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiVGFncyBhZGRlZCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJObyBuZXcgdGFncyByZWNlaXZlZCIpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgaW5saW5lIEdzdEJ1ZmZlciAqCi1fZ3N0X2J1ZmZlcl9uZXdfdGFrZV9kYXRhIChndWludDggKiBkYXRhLCBndWludCBzaXplKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsCi0gICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkYXRhLCBzaXplLCAwLCBzaXplLCBkYXRhLCBnX2ZyZWUpKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0X211eF9zZW5kX2J1ZmZlciAoR3N0UVRNdXggKiBxdG11eCwgR3N0QnVmZmVyICogYnVmLCBndWludDY0ICogb2Zmc2V0LAotICAgIGdib29sZWFuIG1pbmRfZmFzdCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIGdzaXplIHNpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZiAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdG11eCwgInNlbmRpbmcgYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQsIHNpemUpOwotCi0gIGlmIChtaW5kX2Zhc3QgJiYgcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSkgewotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGdpbnQgcmV0OwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAidG8gdGVtcG9yYXJ5IGZpbGUiKTsKLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJldCA9IGZ3cml0ZSAobWFwLmRhdGEsIHNpemVvZiAoZ3VpbnQ4KSwgbWFwLnNpemUsIHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBpZiAocmV0ICE9IHNpemUpCi0gICAgICBnb3RvIHdyaXRlX2Vycm9yOwotICAgIGVsc2UKLSAgICAgIHJlcyA9IEdTVF9GTE9XX09LOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdG11eCwgImRvd25zdHJlYW0iKTsKLSAgICByZXMgPSBnc3RfcGFkX3B1c2ggKHF0bXV4LT5zcmNwYWQsIGJ1Zik7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKG9mZnNldCkpCi0gICAgKm9mZnNldCArPSBzaXplOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi13cml0ZV9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgUkVTT1VSQ0UsIFdSSVRFLAotICAgICAgICAoIkZhaWxlZCB0byB3cml0ZSB0byB0ZW1wb3JhcnkgZmlsZSIpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRfbXV4X3NlZWtfdG9fYmVnaW5uaW5nIChGSUxFICogZikKLXsKLSNpZmRlZiBIQVZFX0ZTRUVLTwotICBpZiAoZnNlZWtvIChmLCAob2ZmX3QpIDAsIFNFRUtfU0VUKSAhPSAwKQotICAgIHJldHVybiBGQUxTRTsKLSNlbGlmIGRlZmluZWQgKEdfT1NfVU5JWCkgfHwgZGVmaW5lZCAoR19PU19XSU4zMikKLSAgaWYgKGxzZWVrIChmaWxlbm8gKGYpLCAob2ZmX3QpIDAsIFNFRUtfU0VUKSA9PSAob2ZmX3QpIC0gMSkKLSAgICByZXR1cm4gRkFMU0U7Ci0jZWxzZQotICBpZiAoZnNlZWsgKGYsIChsb25nKSAwLCBTRUVLX1NFVCkgIT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0jZW5kaWYKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X3NlbmRfYnVmZmVyZWRfZGF0YSAoR3N0UVRNdXggKiBxdG11eCwgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotCi0gIGlmIChmZmx1c2ggKHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGUpKQotICAgIGdvdG8gZmx1c2hfZmFpbGVkOwotCi0gIGlmICghZ3N0X3F0X211eF9zZWVrX3RvX2JlZ2lubmluZyAocXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSkpCi0gICAgZ290byBzZWVrX2ZhaWxlZDsKLQotICAvKiBobSwgdGhpcyBjb3VsZCBhbGwgdGFrZSBhIHJlYWxseSByZWFsbHkgbG9uZyB0aW1lLAotICAgKiBidXQgdGhlcmUgbWF5IG5vdCBiZSBhbm90aGVyIHdheSB0byBnZXQgbW9vdiBhdG9tIGZpcnN0Ci0gICAqIChzb21laG93IG9wdGltaXplIGNvcHk/KSAqLwotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlNlbmRpbmcgYnVmZmVyZWQgZGF0YSIpOwotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LKSB7Ci0gICAgY29uc3QgaW50IGJ1ZnNpemUgPSA0MDk2OwotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGdzaXplIHNpemU7Ci0KLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGJ1ZnNpemUpOwotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIHNpemUgPSBmcmVhZCAobWFwLmRhdGEsIHNpemVvZiAoZ3VpbnQ4KSwgYnVmc2l6ZSwgcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSk7Ci0gICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJQdXNoaW5nIGJ1ZmZlcmVkIGJ1ZmZlciBvZiBzaXplICVkIiwgKGdpbnQpIHNpemUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgaWYgKHNpemUgIT0gYnVmc2l6ZSkKLSAgICAgIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1Ziwgc2l6ZSk7Ci0gICAgcmV0ID0gZ3N0X3F0X211eF9zZW5kX2J1ZmZlciAocXRtdXgsIGJ1Ziwgb2Zmc2V0LCBGQUxTRSk7Ci0gICAgYnVmID0gTlVMTDsKLSAgfQotICBpZiAoYnVmKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgaWYgKGZ0cnVuY2F0ZSAoZmlsZW5vIChxdG11eC0+ZmFzdF9zdGFydF9maWxlKSwgMCkpCi0gICAgZ290byBzZWVrX2ZhaWxlZDsKLSAgaWYgKCFnc3RfcXRfbXV4X3NlZWtfdG9fYmVnaW5uaW5nIChxdG11eC0+ZmFzdF9zdGFydF9maWxlKSkKLSAgICBnb3RvIHNlZWtfZmFpbGVkOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1mbHVzaF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtdXgsIFJFU09VUkNFLCBXUklURSwKLSAgICAgICAgKCJGYWlsZWQgdG8gZmx1c2ggdGVtcG9yYXJ5IGZpbGUiKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBmYWlsOwotICB9Ci1zZWVrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgUkVTT1VSQ0UsIFNFRUssCi0gICAgICAgICgiRmFpbGVkIHRvIHNlZWsgdGVtcG9yYXJ5IGZpbGUiKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBmYWlsOwotICB9Ci1mYWlsOgotICB7Ci0gICAgLyogY2xlYXIgZGVzY3JpcHRvciBzbyB3ZSBkb24ndCByZW1vdmUgdGVtcCBmaWxlIGxhdGVyIG9uLAotICAgICAqIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHJlY292ZXIgKi8KLSAgICBmY2xvc2UgKHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGUpOwotICAgIHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGUgPSBOVUxMOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotLyoKLSAqIFNlbmRzIHRoZSBpbml0aWFsIG1kYXQgYXRvbSBmaWVsZHMgKHNpemUgZmllbGRzIGFuZCBmb3VyY2MgdHlwZSksCi0gKiB0aGUgc3Vic2VxdWVudCBidWZmZXJzIGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgaXQncyBkYXRhLgotICogQXMgd2UgY2FuJ3QgcHJlZGljdCB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gcGxhY2UgaW4gbWRhdAotICogd2UgbmVlZCB0byByZWNvcmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBzaXplIGZpZWxkIGluIHRoZSBzdHJlYW0gc28gd2UgY2FuCi0gKiBzZWVrIGJhY2sgdG8gaXQgbGF0ZXIgYW5kIHVwZGF0ZSB3aGVuIHRoZSBzdHJlYW1zIGhhdmUgZmluaXNoZWQuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X3NlbmRfbWRhdF9oZWFkZXIgKEdzdFFUTXV4ICogcXRtdXgsIGd1aW50NjQgKiBvZmYsIGd1aW50NjQgc2l6ZSwKLSAgICBnYm9vbGVhbiBleHRlbmRlZCwgZ2Jvb2xlYW4gZnN5bmNfYWZ0ZXIpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlNlbmRpbmcgbWRhdCdzIGF0b20gaGVhZGVyLCAiCi0gICAgICAic2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplKTsKLQotICAvKiBpZiB0aGUgcXRtdXggc3RhdGUgaXMgRU9TLCByZWFsbHkgd3JpdGUgdGhlIG1kYXQsIG90aGVyd2lzZQotICAgKiBhbGxvdyBzaXplID09IDAgZm9yIGEgcGxhY2Vob2xkZXIgYXRvbSAqLwotICBpZiAocXRtdXgtPnN0YXRlID09IEdTVF9RVF9NVVhfU1RBVEVfRU9TIHx8IHNpemUgPiAwKQotICAgIHNpemUgKz0gODsKLQotICBpZiAoZXh0ZW5kZWQpIHsKLSAgICBnYm9vbGVhbiBsYXJnZV9maWxlID0gKHNpemUgPiBNREFUX0xBUkdFX0ZJTEVfTElNSVQpOwotICAgIC8qIEFsd2F5cyB3cml0ZSAxNi1ieXRlcywgYnV0IHB1dCBhIGZyZWUgYXRvbSBmaXJzdAotICAgICAqIGlmIHRoZSBzaXplIGlzIDwgNEdCLiAqLwotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTYpOwotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gICAgaWYgKGxhcmdlX2ZpbGUpIHsKLSAgICAgIC8qIFdyaXRlIGV4dGVuZGVkIG1kYXQgaGVhZGVyIGFuZCBsYXJnZV9zaXplIGZpZWxkICovCi0gICAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChtYXAuZGF0YSwgMSk7Ci0gICAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChtYXAuZGF0YSArIDQsIEZPVVJDQ19tZGF0KTsKLSAgICAgIEdTVF9XUklURV9VSU5UNjRfQkUgKG1hcC5kYXRhICsgOCwgc2l6ZSArIDgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBXcml0ZSBhbiBlbXB0eSBmcmVlIGF0b20sIHRoZW4gc3RhbmRhcmQgMzItYml0IG1kYXQgKi8KLSAgICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKG1hcC5kYXRhLCA4KTsKLSAgICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCwgRk9VUkNDX2ZyZWUpOwotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAobWFwLmRhdGEgKyA4LCBzaXplKTsKLSAgICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKG1hcC5kYXRhICsgMTIsIEZPVVJDQ19tZGF0KTsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgfSBlbHNlIHsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDgpOwotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gICAgLyogVmFuaWxsYSAzMi1iaXQgbWRhdCAqLwotICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKG1hcC5kYXRhLCBzaXplKTsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChtYXAuZGF0YSArIDQsIEZPVVJDQ19tZGF0KTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAiUHVzaGluZyBtZGF0IGhlYWRlciIpOwotICBpZiAoZnN5bmNfYWZ0ZXIpCi0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfU1lOQ19BRlRFUik7Ci0KLSAgcmV0dXJuIGdzdF9xdF9tdXhfc2VuZF9idWZmZXIgKHF0bXV4LCBidWYsIG9mZiwgRkFMU0UpOwotCi19Ci0KLS8qCi0gKiBXZSBnZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtZGF0IHNpemUgZmllbGQsIHNlZWsgYmFjayB0byBpdAotICogYW5kIG92ZXJ3cml0ZSB3aXRoIHRoZSByZWFsIHZhbHVlCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X3VwZGF0ZV9tZGF0X3NpemUgKEdzdFFUTXV4ICogcXRtdXgsIGd1aW50NjQgbWRhdF9wb3MsCi0gICAgZ3VpbnQ2NCBtZGF0X3NpemUsIGd1aW50NjQgKiBvZmZzZXQsIGdib29sZWFuIGZzeW5jX2FmdGVyKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgLyogV2UgbXVzdCBoYXZlIHJlY29yZGVkIHRoZSBtZGF0IHBvc2l0aW9uIGZvciB0aGlzIHRvIHdvcmsgKi8KLSAgZ19hc3NlcnQgKG1kYXRfcG9zICE9IDApOwotCi0gIC8qIHNlZWsgYW5kIHJld3JpdGUgdGhlIGhlYWRlciAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIHNlZ21lbnQuc3RhcnQgPSBtZGF0X3BvczsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChxdG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgcmV0dXJuIGdzdF9xdF9tdXhfc2VuZF9tZGF0X2hlYWRlciAocXRtdXgsIG9mZnNldCwgbWRhdF9zaXplLCBUUlVFLAotICAgICAgZnN5bmNfYWZ0ZXIpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0X211eF9zZW5kX2Z0eXAgKEdzdFFUTXV4ICogcXRtdXgsIGd1aW50NjQgKiBvZmYpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludDY0IHNpemUgPSAwLCBvZmZzZXQgPSAwOwotICBndWludDggKmRhdGEgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiU2VuZGluZyBmdHlwIGF0b20iKTsKLQotICBpZiAoIWF0b21fZnR5cF9jb3B5X2RhdGEgKHF0bXV4LT5mdHlwLCAmZGF0YSwgJnNpemUsICZvZmZzZXQpKQotICAgIGdvdG8gc2VyaWFsaXplX2Vycm9yOwotCi0gIGJ1ZiA9IF9nc3RfYnVmZmVyX25ld190YWtlX2RhdGEgKGRhdGEsIG9mZnNldCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAiUHVzaGluZyBmdHlwIik7Ci0gIHJldHVybiBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgYnVmLCBvZmYsIEZBTFNFKTsKLQotICAvKiBFUlJPUlMgKi8KLXNlcmlhbGl6ZV9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgU1RSRUFNLCBNVVgsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gc2VyaWFsaXplIGZ0eXAiKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X3ByZXBhcmVfZnR5cCAoR3N0UVRNdXggKiBxdG11eCwgQXRvbUZUWVAgKiogcF9mdHlwLAotICAgIEdzdEJ1ZmZlciAqKiBwX3ByZWZpeCkKLXsKLSAgR3N0UVRNdXhDbGFzcyAqcXRtdXhfa2xhc3MgPSAoR3N0UVRNdXhDbGFzcyAqKSAoR19PQkpFQ1RfR0VUX0NMQVNTIChxdG11eCkpOwotICBndWludDMyIG1ham9yLCB2ZXJzaW9uOwotICBHTGlzdCAqY29tcDsKLSAgR3N0QnVmZmVyICpwcmVmaXggPSBOVUxMOwotICBBdG9tRlRZUCAqZnR5cCA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJQcmVwYXJpbmcgZnR5cCBhbmQgcG9zc2libGUgcHJlZml4IGF0b20iKTsKLQotICAvKiBpbml0IGFuZCBzZW5kIGNvbnRleHQgYW5kIGZ0eXAgYmFzZWQgb24gY3VycmVudCBwcm9wZXJ0eSBzdGF0ZSAqLwotICBnc3RfcXRfbXV4X21hcF9mb3JtYXRfdG9faGVhZGVyIChxdG11eF9rbGFzcy0+Zm9ybWF0LCAmcHJlZml4LCAmbWFqb3IsCi0gICAgICAmdmVyc2lvbiwgJmNvbXAsIHF0bXV4LT5tb292LCBxdG11eC0+bG9uZ2VzdF9jaHVuaywKLSAgICAgIHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGUgIT0gTlVMTCk7Ci0gIGZ0eXAgPSBhdG9tX2Z0eXBfbmV3IChxdG11eC0+Y29udGV4dCwgbWFqb3IsIHZlcnNpb24sIGNvbXApOwotICBpZiAoY29tcCkKLSAgICBnX2xpc3RfZnJlZSAoY29tcCk7Ci0gIGlmIChwcmVmaXgpIHsKLSAgICBpZiAocF9wcmVmaXgpCi0gICAgICAqcF9wcmVmaXggPSBwcmVmaXg7Ci0gICAgZWxzZQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocHJlZml4KTsKLSAgfQotICAqcF9mdHlwID0gZnR5cDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfcHJlcGFyZV9hbmRfc2VuZF9mdHlwIChHc3RRVE11eCAqIHF0bXV4KQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RCdWZmZXIgKnByZWZpeCA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJQcmVwYXJpbmcgdG8gc2VuZCBmdHlwIGF0b20iKTsKLQotICAvKiBpbml0IGFuZCBzZW5kIGNvbnRleHQgYW5kIGZ0eXAgYmFzZWQgb24gY3VycmVudCBwcm9wZXJ0eSBzdGF0ZSAqLwotICBpZiAocXRtdXgtPmZ0eXApIHsKLSAgICBhdG9tX2Z0eXBfZnJlZSAocXRtdXgtPmZ0eXApOwotICAgIHF0bXV4LT5mdHlwID0gTlVMTDsKLSAgfQotICBnc3RfcXRfbXV4X3ByZXBhcmVfZnR5cCAocXRtdXgsICZxdG11eC0+ZnR5cCwgJnByZWZpeCk7Ci0gIGlmIChwcmVmaXgpIHsKLSAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgcHJlZml4LCAmcXRtdXgtPmhlYWRlcl9zaXplLCBGQUxTRSk7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIHJldHVybiByZXQ7Ci0gIH0KLSAgcmV0dXJuIGdzdF9xdF9tdXhfc2VuZF9mdHlwIChxdG11eCwgJnF0bXV4LT5oZWFkZXJfc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X3NldF9oZWFkZXJfb25fY2FwcyAoR3N0UVRNdXggKiBtdXgsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdWYWx1ZSBhcnJheSA9IHsgMCB9OwotICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLSAgR3N0Q2FwcyAqY2FwcywgKnRjYXBzOwotCi0gIHRjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChtdXgtPnNyY3BhZCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19jb3B5ICh0Y2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmICh0Y2Fwcyk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmYXJyYXksIEdTVF9UWVBFX0FSUkFZKTsKLQotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgZ3N0X3ZhbHVlX3Rha2VfYnVmZmVyICgmdmFsdWUsIGdzdF9idWZmZXJfcmVmIChidWYpKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJmFycmF5LCAmdmFsdWUpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJzdHJlYW1oZWFkZXIiLCAmYXJyYXkpOwotICBnX3ZhbHVlX3Vuc2V0ICgmYXJyYXkpOwotICBnc3RfcGFkX3NldF9jYXBzIChtdXgtPnNyY3BhZCwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotLyoKLSAqIFdyaXRlIG91dCBhIGZyZWUgc3BhY2UgYXRvbS4gVGhlIG9mZnNldCBpcyBhZGp1c3RlZCBieSB0aGUgZnVsbAotICogc2l6ZSwgYnV0IGEgc21hbGxlciBidWZmZXIgaXMgc2VudAotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0X211eF9zZW5kX2ZyZWVfYXRvbSAoR3N0UVRNdXggKiBxdG11eCwgZ3VpbnQ2NCAqIG9mZiwgZ3VpbnQzMiBzaXplLAotICAgIGdib29sZWFuIGZzeW5jX2FmdGVyKQotewotICBBdG9tICpub2RlX2hlYWRlcjsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gIGd1aW50NjQgb2Zmc2V0ID0gMCwgYnNpemUgPSAwOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlNlbmRpbmcgZnJlZSBhdG9tIGhlYWRlciBvZiBzaXplICV1Iiwgc2l6ZSk7Ci0KLSAgLyogV2UgY2FuJ3QgbWFrZSBhIGZyZWUgc3BhY2UgYXRvbSBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciAqLwotICBpZiAoc2l6ZSA8IDgpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgbm9kZV9oZWFkZXIgPSBnX21hbGxvYzAgKHNpemVvZiAoQXRvbSkpOwotICBub2RlX2hlYWRlci0+dHlwZSA9IEZPVVJDQ19mcmVlOwotICBub2RlX2hlYWRlci0+c2l6ZSA9IHNpemU7Ci0KLSAgYnNpemUgPSBvZmZzZXQgPSAwOwotICBpZiAoYXRvbV9jb3B5X2RhdGEgKG5vZGVfaGVhZGVyLCAmZGF0YSwgJmJzaXplLCAmb2Zmc2V0KSA9PSAwKQotICAgIGdvdG8gc2VyaWFsaXplX2Vycm9yOwotCi0gIGJ1ZiA9IF9nc3RfYnVmZmVyX25ld190YWtlX2RhdGEgKGRhdGEsIG9mZnNldCk7Ci0gIGdfZnJlZSAobm9kZV9oZWFkZXIpOwotCi0gIGlmIChmc3luY19hZnRlcikKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19TWU5DX0FGVEVSKTsKLQotICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJQdXNoaW5nIGZyZWUgYXRvbSIpOwotICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgYnVmLCBvZmYsIEZBTFNFKTsKLQotICBpZiAob2ZmKSB7Ci0gICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgKm9mZiArPSBzaXplIC0gODsKLQotICAgIC8qIE1ha2Ugc3VyZSBkb3duc3RyZWFtIHBvc2l0aW9uIGVuZHMgdXAgYXQgdGhlIGVuZCBvZiB0aGlzIGZyZWUgYm94ICovCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICAgIHNlZ21lbnQuc3RhcnQgPSAqb2ZmOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgU1RSRUFNLCBNVVgsIChOVUxMKSwKLSAgICAgICAgKCJOb3QgZW5vdWdoIGZyZWUgcmVzZXJ2ZWQgc3BhY2UiKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1zZXJpYWxpemVfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtdXgsIFNUUkVBTSwgTVVYLCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIHNlcmlhbGl6ZSBtZGF0IikpOwotICAgIGdfZnJlZSAobm9kZV9oZWFkZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9jb25maWd1cmVfbW9vdiAoR3N0UVRNdXggKiBxdG11eCkKLXsKLSAgZ2Jvb2xlYW4gZnJhZ21lbnRlZCA9IEZBTFNFOwotICBndWludDMyIHRpbWVzY2FsZTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHF0bXV4KTsKLSAgdGltZXNjYWxlID0gcXRtdXgtPnRpbWVzY2FsZTsKLSAgaWYgKHF0bXV4LT5tdXhfbW9kZSA9PSBHU1RfUVRfTVVYX01PREVfRlJBR01FTlRFRCB8fAotICAgICAgcXRtdXgtPm11eF9tb2RlID09IEdTVF9RVF9NVVhfTU9ERV9GUkFHTUVOVEVEX1NUUkVBTUFCTEUpCi0gICAgZnJhZ21lbnRlZCA9IFRSVUU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG11eCk7Ci0KLSAgLyogaW5mb3JtIGxvd2VyIGxheWVycyBvZiBvdXIgcHJvcGVydHkgd2lzaGVzLCBhbmQgZGV0ZXJtaW5lIGR1cmF0aW9uLgotICAgKiBMZXQgbW9vdiB0YWtlIGNhcmUgb2YgdGhpcyB1c2luZyBpdHMgbGlzdCBvZiB0cmFrczsKLSAgICogc28gdGhhdCByZWxlYXNlZCBwYWRzIGFyZSBhbHNvIGluY2x1ZGVkICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiVXBkYXRpbmcgdGltZXNjYWxlIHRvICUiIEdfR1VJTlQzMl9GT1JNQVQsCi0gICAgICB0aW1lc2NhbGUpOwotICBhdG9tX21vb3ZfdXBkYXRlX3RpbWVzY2FsZSAocXRtdXgtPm1vb3YsIHRpbWVzY2FsZSk7Ci0gIGF0b21fbW9vdl9zZXRfZnJhZ21lbnRlZCAocXRtdXgtPm1vb3YsIGZyYWdtZW50ZWQpOwotCi0gIGF0b21fbW9vdl91cGRhdGVfZHVyYXRpb24gKHF0bXV4LT5tb292KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfc2VuZF9tb292IChHc3RRVE11eCAqIHF0bXV4LCBndWludDY0ICogX29mZnNldCwKLSAgICBndWludDY0IHBhZGRlZF9tb292X3NpemUsIGdib29sZWFuIG1pbmRfZmFzdCwgZ2Jvb2xlYW4gZnN5bmNfYWZ0ZXIpCi17Ci0gIGd1aW50NjQgb2Zmc2V0ID0gMCwgc2l6ZSA9IDA7Ci0gIGd1aW50OCAqZGF0YTsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogc2VyaWFsaXplIG1vb3YgKi8KLSAgb2Zmc2V0ID0gc2l6ZSA9IDA7Ci0gIGRhdGEgPSBOVUxMOwotICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJDb3B5aW5nIG1vdmllIGhlYWRlciBpbnRvIGJ1ZmZlciIpOwotICBpZiAoIWF0b21fbW9vdl9jb3B5X2RhdGEgKHF0bXV4LT5tb292LCAmZGF0YSwgJnNpemUsICZvZmZzZXQpKQotICAgIGdvdG8gc2VyaWFsaXplX2Vycm9yOwotICBxdG11eC0+bGFzdF9tb292X3NpemUgPSBvZmZzZXQ7Ci0KLSAgLyogQ2hlY2sgd2UgaGF2ZSBlbm91Z2ggcmVzZXJ2ZWQgc3BhY2UgZm9yIHRoaXMgYW5kIGEgRnJlZSBhdG9tICovCi0gIGlmIChwYWRkZWRfbW9vdl9zaXplID4gMCAmJiBvZmZzZXQgKyA4ID4gcGFkZGVkX21vb3Zfc2l6ZSkKLSAgICBnb3RvIHRvb19zbWFsbF9yZXNlcnZlZDsKLSAgYnVmID0gX2dzdF9idWZmZXJfbmV3X3Rha2VfZGF0YSAoZGF0YSwgb2Zmc2V0KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJQdXNoaW5nIG1vb3YgYXRvbXMiKTsKLQotICAvKiBJZiBhdCBFT1MsIHRoaXMgaXMgdGhlIGZpbmFsIG1vb3YsIHB1dCBpbiB0aGUgc3RyZWFtaGVhZGVyCi0gICAqIChhcHBhcmVudGx5IHVzZWQgYnkgYSBmbHVtb3Rpb24gdXRpbCkgKi8KLSAgaWYgKHF0bXV4LT5zdGF0ZSA9PSBHU1RfUVRfTVVYX1NUQVRFX0VPUykKLSAgICBnc3RfcXRfbXV4X3NldF9oZWFkZXJfb25fY2FwcyAocXRtdXgsIGJ1Zik7Ci0KLSAgaWYgKGZzeW5jX2FmdGVyKQotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX1NZTkNfQUZURVIpOwotICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgYnVmLCBfb2Zmc2V0LCBtaW5kX2Zhc3QpOwotCi0gIC8qIFdyaXRlIG91dCBhIGZyZWUgYXRvbSBpZiBuZWVkZWQgKi8KLSAgaWYgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBvZmZzZXQgPCBwYWRkZWRfbW9vdl9zaXplKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAiV3JpdGluZyBvdXQgZnJlZSBhdG9tIG9mIHNpemUgJXUiLAotICAgICAgICAoZ3VpbnQzMikgKHBhZGRlZF9tb292X3NpemUgLSBvZmZzZXQpKTsKLSAgICByZXQgPQotICAgICAgICBnc3RfcXRfbXV4X3NlbmRfZnJlZV9hdG9tIChxdG11eCwgX29mZnNldCwgcGFkZGVkX21vb3Zfc2l6ZSAtIG9mZnNldCwKLSAgICAgICAgZnN5bmNfYWZ0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLXRvb19zbWFsbF9yZXNlcnZlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgU1RSRUFNLCBNVVgsCi0gICAgICAgICgiTm90IGVub3VnaCBmcmVlIHJlc2VydmVkIGhlYWRlciBzcGFjZSIpLAotICAgICAgICAoIk5lZWRlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMsIHJlc2VydmVkICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICBvZmZzZXQsIHBhZGRlZF9tb292X3NpemUpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXNlcmlhbGl6ZV9lcnJvcjoKLSAgewotICAgIGdfZnJlZSAoZGF0YSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLS8qIGVpdGhlciBjYWxjdWxhdGVzIHNpemUgb2YgZXh0cmEgYXRvbXMgb3IgcHVzaGVzIHRoZW0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X3NlbmRfZXh0cmFfYXRvbXMgKEdzdFFUTXV4ICogcXRtdXgsIGdib29sZWFuIHNlbmQsIGd1aW50NjQgKiBvZmZzZXQsCi0gICAgZ2Jvb2xlYW4gbWluZF9mYXN0KQotewotICBHU0xpc3QgKndhbGs7Ci0gIGd1aW50NjQgbG9mZnNldCA9IDAsIHNpemUgPSAwOwotICBndWludDggKmRhdGE7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgZm9yICh3YWxrID0gcXRtdXgtPmV4dHJhX2F0b21zOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEF0b21JbmZvICphaW5mbyA9IChBdG9tSW5mbyAqKSB3YWxrLT5kYXRhOwotCi0gICAgbG9mZnNldCA9IHNpemUgPSAwOwotICAgIGRhdGEgPSBOVUxMOwotICAgIGlmICghYWluZm8tPmNvcHlfZGF0YV9mdW5jIChhaW5mby0+YXRvbSwKLSAgICAgICAgICAgIHNlbmQgPyAmZGF0YSA6IE5VTEwsICZzaXplLCAmbG9mZnNldCkpCi0gICAgICBnb3RvIHNlcmlhbGl6ZV9lcnJvcjsKLQotICAgIGlmIChzZW5kKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZjsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsCi0gICAgICAgICAgIlB1c2hpbmcgZXh0cmEgdG9wLWxldmVsIGF0b20gJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChhaW5mby0+YXRvbS0+dHlwZSkpOwotICAgICAgYnVmID0gX2dzdF9idWZmZXJfbmV3X3Rha2VfZGF0YSAoZGF0YSwgbG9mZnNldCk7Ci0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgYnVmLCBvZmZzZXQsIEZBTFNFKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGJyZWFrOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAob2Zmc2V0KQotICAgICAgICAqb2Zmc2V0ICs9IGxvZmZzZXQ7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotc2VyaWFsaXplX2Vycm9yOgotICB7Ci0gICAgZ19mcmVlIChkYXRhKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRfbXV4X2Rvd25zdHJlYW1faXNfc2Vla2FibGUgKEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIGdib29sZWFuIHNlZWthYmxlID0gRkFMU0U7Ci0gIEdzdFF1ZXJ5ICpxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUyk7Ci0KLSAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeSAocXRtdXgtPnNyY3BhZCwgcXVlcnkpKSB7Ci0gICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsIE5VTEwsIE5VTEwpOwotICAgIEdTVF9JTkZPX09CSkVDVCAocXRtdXgsICJkb3duc3RyZWFtIGlzICVzc2Vla2FibGUiLCBzZWVrYWJsZSA/ICIiIDogIm5vdCAiKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBoYXZlIHRvIGFzc3VtZSBzZWVraW5nIGlzIG5vdCBzdXBwb3J0ZWQgaWYgcXVlcnkgbm90IGhhbmRsZWQgZG93bnN0cmVhbSAqLwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJkb3duc3RyZWFtIGRpZCBub3QgaGFuZGxlIHNlZWtpbmcgcXVlcnkiKTsKLSAgICBzZWVrYWJsZSA9IEZBTFNFOwotICB9Ci0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiBzZWVrYWJsZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfcHJlcGFyZV9tb292X3JlY292ZXJ5IChHc3RRVE11eCAqIHF0bXV4KQotewotICBHU0xpc3QgKndhbGs7Ci0gIGdib29sZWFuIGZhaWwgPSBGQUxTRTsKLSAgQXRvbUZUWVAgKmZ0eXAgPSBOVUxMOwotICBHc3RCdWZmZXIgKnByZWZpeCA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJPcGVuaW5nIG1vb3YgcmVjb3ZlcnkgZmlsZTogJXMiLAotICAgICAgcXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZV9wYXRoKTsKLQotICBxdG11eC0+bW9vdl9yZWNvdl9maWxlID0gZ19mb3BlbiAocXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZV9wYXRoLCAid2IrIik7Ci0gIGlmIChxdG11eC0+bW9vdl9yZWNvdl9maWxlID09IE5VTEwpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAiRmFpbGVkIHRvIG9wZW4gbW9vdiByZWNvdmVyeSBmaWxlIGluICVzIiwKLSAgICAgICAgcXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZV9wYXRoKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnc3RfcXRfbXV4X3ByZXBhcmVfZnR5cCAocXRtdXgsICZmdHlwLCAmcHJlZml4KTsKLQotICBpZiAoIWF0b21zX3JlY292X3dyaXRlX2hlYWRlcnMgKHF0bXV4LT5tb292X3JlY292X2ZpbGUsIGZ0eXAsIHByZWZpeCwKLSAgICAgICAgICBxdG11eC0+bW9vdiwgcXRtdXgtPnRpbWVzY2FsZSwgZ19zbGlzdF9sZW5ndGggKHF0bXV4LT5zaW5rcGFkcykpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgIkZhaWxlZCB0byB3cml0ZSBtb292IHJlY292ZXJ5IGZpbGUgIiAiaGVhZGVycyIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIGF0b21fZnR5cF9mcmVlIChmdHlwKTsKLSAgaWYgKHByZWZpeCkKLSAgICBnc3RfYnVmZmVyX3VucmVmIChwcmVmaXgpOwotCi0gIGZvciAod2FsayA9IHF0bXV4LT5zaW5rcGFkczsgd2FsayAmJiAhZmFpbDsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqY2RhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgd2Fsay0+ZGF0YTsKLSAgICBHc3RRVFBhZCAqcXBhZCA9IChHc3RRVFBhZCAqKSBjZGF0YTsKLSAgICAvKiB3cml0ZSBpbmZvIGZvciBlYWNoIHN0cmVhbSAqLwotICAgIGZhaWwgPSBhdG9tc19yZWNvdl93cml0ZV90cmFrX2luZm8gKHF0bXV4LT5tb292X3JlY292X2ZpbGUsIHFwYWQtPnRyYWspOwotICAgIGlmIChmYWlsKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAiRmFpbGVkIHRvIHdyaXRlIHRyYWsgaW5mbyB0byByZWNvdmVyeSAiCi0gICAgICAgICAgImZpbGUiKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi1mYWlsOgotICAvKiBjbGVhbnVwICovCi0gIGZjbG9zZSAocXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZSk7Ci0gIHF0bXV4LT5tb292X3JlY292X2ZpbGUgPSBOVUxMOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0X211eF9zdGFydF9maWxlIChHc3RRVE11eCAqIHF0bXV4KQotewotICBHc3RRVE11eENsYXNzICpxdG11eF9rbGFzcyA9IChHc3RRVE11eENsYXNzICopIChHX09CSkVDVF9HRVRfQ0xBU1MgKHF0bXV4KSk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ2NoYXIgc19pZFszMl07Ci0gIEdzdENsb2NrVGltZSByZXNlcnZlZF9tYXhfZHVyYXRpb247Ci0gIGd1aW50IHJlc2VydmVkX2J5dGVzX3Blcl9zZWNfcGVyX3RyYWs7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJzdGFydGluZyBmaWxlIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdG11eCk7Ci0gIHJlc2VydmVkX21heF9kdXJhdGlvbiA9IHF0bXV4LT5yZXNlcnZlZF9tYXhfZHVyYXRpb247Ci0gIHJlc2VydmVkX2J5dGVzX3Blcl9zZWNfcGVyX3RyYWsgPSBxdG11eC0+cmVzZXJ2ZWRfYnl0ZXNfcGVyX3NlY19wZXJfdHJhazsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXV4KTsKLQotICAvKiBzdHJlYW0tc3RhcnQgKEZJWE1FOiBjcmVhdGUgaWQgYmFzZWQgb24gaW5wdXQgaWRzKSAqLwotICBnX3NucHJpbnRmIChzX2lkLCBzaXplb2YgKHNfaWQpLCAicXRtdXgtJTA4eCIsIGdfcmFuZG9tX2ludCAoKSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHNfaWQpKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfY29weSAoZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHF0bXV4LT5zcmNwYWQpKTsKLSAgLyogcXRtdXggaGFzIHN0cnVjdHVyZSB3aXRoIGFuZCB3aXRob3V0IHZhcmlhbnQsIHJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCAqLwotICB3aGlsZSAoZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpID4gMSkKLSAgICBnc3RfY2Fwc19yZW1vdmVfc3RydWN0dXJlIChjYXBzLCAxKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAocXRtdXgtPnNyY3BhZCwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBEZWZhdWx0IGlzICdub3JtYWwnIG1vZGUgKi8KLSAgcXRtdXgtPm11eF9tb2RlID0gR1NUX1FUX01VWF9NT0RFX01PT1ZfQVRfRU5EOwotCi0gIC8qIFJlcXVpcmUgYSBzZW5zaWJsZSBmcmFnbWVudCBkdXJhdGlvbiB3aGVuIG11eGluZwotICAgKiB1c2luZyB0aGUgSVNNTCBtdXhlciAqLwotICBpZiAocXRtdXhfa2xhc3MtPmZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9JU01MICYmCi0gICAgICBxdG11eC0+ZnJhZ21lbnRfZHVyYXRpb24gPT0gMCkKLSAgICBnb3RvIGludmFsaWRfaXNtbDsKLQotICBpZiAocXRtdXgtPmZyYWdtZW50X2R1cmF0aW9uID4gMCkgewotICAgIGlmIChxdG11eC0+c3RyZWFtYWJsZSkKLSAgICAgIHF0bXV4LT5tdXhfbW9kZSA9IEdTVF9RVF9NVVhfTU9ERV9GUkFHTUVOVEVEX1NUUkVBTUFCTEU7Ci0gICAgZWxzZQotICAgICAgcXRtdXgtPm11eF9tb2RlID0gR1NUX1FUX01VWF9NT0RFX0ZSQUdNRU5URUQ7Ci0gIH0gZWxzZSBpZiAocXRtdXgtPmZhc3Rfc3RhcnQpIHsKLSAgICBxdG11eC0+bXV4X21vZGUgPSBHU1RfUVRfTVVYX01PREVfRkFTVF9TVEFSVDsKLSAgfSBlbHNlIGlmIChyZXNlcnZlZF9tYXhfZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgIHF0bXV4LT5tdXhfbW9kZSA9IEdTVF9RVF9NVVhfTU9ERV9ST0JVU1RfUkVDT1JESU5HOwotICB9Ci0KLSAgc3dpdGNoIChxdG11eC0+bXV4X21vZGUpIHsKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9NT09WX0FUX0VORDoKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9ST0JVU1RfUkVDT1JESU5HOgotICAgICAgLyogV2UgaGF2ZSB0byBiZSBhYmxlIHRvIHNlZWsgdG8gcmV3cml0ZSB0aGUgbWRhdCBoZWFkZXIsIG9yIGFueQotICAgICAgICogbW9vdiBhdG9tIHdlIHdyaXRlIHdpbGwgbm90IGJlIHZpc2libGUgaW4gdGhlIGZpbGUsIGJlY2F1c2UgYW4KLSAgICAgICAqIE1EQVQgd2l0aCAwIGFzIHRoZSBzaXplIGNvdmVycyB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gQSBmaWxlCi0gICAgICAgKiB3aXRoIG5vIG1vb3YgaXMgbm90IHBsYXlhYmxlLCBzbyBlcnJvciBvdXQgbm93LiAqLwotICAgICAgaWYgKCFnc3RfcXRfbXV4X2Rvd25zdHJlYW1faXNfc2Vla2FibGUgKHF0bXV4KSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtdXgsIFNUUkVBTSwgTVVYLAotICAgICAgICAgICAgKCJEb3duc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSAtIHdpbGwgbm90IGJlIGFibGUgdG8gY3JlYXRlIGEgcGxheWFibGUgZmlsZSIpLAotICAgICAgICAgICAgKE5VTEwpKTsKLSAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVRfTVVYX01PREVfRkFTVF9TVEFSVDoKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9GUkFHTUVOVEVEX1NUUkVBTUFCTEU6Ci0gICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IG5lZWQgc2Vla2FiaWxpdHksIGlnbm9yZSAqLwotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX0ZSQUdNRU5URUQ6Ci0gICAgICBpZiAoIWdzdF9xdF9tdXhfZG93bnN0cmVhbV9pc19zZWVrYWJsZSAocXRtdXgpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJkb3duc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSwgYnV0ICIKLSAgICAgICAgICAgICJzdHJlYW1hYmxlPWZhbHNlLiBXaWxsIGlnbm9yZSB0aGF0IGFuZCBjcmVhdGUgc3RyZWFtYWJsZSBvdXRwdXQgIgotICAgICAgICAgICAgImluc3RlYWQiKTsKLSAgICAgICAgcXRtdXgtPnN0cmVhbWFibGUgPSBUUlVFOwotICAgICAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChxdG11eCksICJzdHJlYW1hYmxlIik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIGxldCBkb3duc3RyZWFtIGtub3cgd2UgdGhpbmsgaW4gQllURVMgYW5kIGV4cGVjdCB0byBkbyBzZWVraW5nIGxhdGVyIG9uICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChxdG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgLyogaW5pdGlhbGl6ZSBvdXIgbW9vdiByZWNvdmVyeSBmaWxlICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocXRtdXgpOwotICBpZiAocXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZV9wYXRoKSB7Ci0gICAgZ3N0X3F0X211eF9wcmVwYXJlX21vb3ZfcmVjb3ZlcnkgKHF0bXV4KTsKLSAgfQotCi0gIC8qIE1ha2Ugc3VyZSB0aGUgZmlyc3QgdGltZSB3ZSB1cGRhdGUgdGhlIG1vb3YsIHdlJ2xsCi0gICAqIGluY2x1ZGUgYW55IHRhZ3NldHRlciB0YWdzICovCi0gIHF0bXV4LT50YWdzX2NoYW5nZWQgPSBUUlVFOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG11eCk7Ci0KLSAgLyoKLSAgICogc2VuZCBtZGF0IGhlYWRlciBpZiBhbHJlYWR5IG5lZWRlZCwgYW5kIG1hcmsgcG9zaXRpb24gZm9yIGxhdGVyIHVwZGF0ZS4KLSAgICogV2UgZG9uJ3Qgc2VuZCBmdHlwIG5vdyBpZiB3ZSBhcmUgb24gZmFzdCBzdGFydCBtb2RlLCBiZWNhdXNlIHdlIGNhbgotICAgKiBiZXR0ZXIgZmluZSB0dW5lIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiB3ZSBnYXRoZXIgdG8gY3JlYXRlIHRoZSB3aG9sZSBtb292Ci0gICAqIGF0b20uCi0gICAqLwotICBzd2l0Y2ggKHF0bXV4LT5tdXhfbW9kZSkgewotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX01PT1ZfQVRfRU5EOgotICAgICAgcmV0ID0gZ3N0X3F0X211eF9wcmVwYXJlX2FuZF9zZW5kX2Z0eXAgKHF0bXV4KTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGJyZWFrOwotCi0gICAgICAvKiBTdG9yZSB0aGlzIGFzIHRoZSBtZGF0IG9mZnNldCBmb3IgbGF0ZXIgdXBkYXRpbmcKLSAgICAgICAqIHdoZW4gd2Ugd3JpdGUgdGhlIG1vb3YgKi8KLSAgICAgIHF0bXV4LT5tZGF0X3BvcyA9IHF0bXV4LT5oZWFkZXJfc2l6ZTsKLSAgICAgIC8qIGV4dGVuZGVkIGF0b20gaW4gY2FzZSB3ZSBnbyBvdmVyIDRHQiB3aGlsZSB3cml0aW5nIGFuZCBuZWVkCi0gICAgICAgKiB0aGUgZnVsbCA2NC1iaXQgYXRvbSAqLwotICAgICAgcmV0ID0KLSAgICAgICAgICBnc3RfcXRfbXV4X3NlbmRfbWRhdF9oZWFkZXIgKHF0bXV4LCAmcXRtdXgtPmhlYWRlcl9zaXplLCAwLCBUUlVFLAotICAgICAgICAgIEZBTFNFKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX1JPQlVTVF9SRUNPUkRJTkc6Ci0KLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfcHJlcGFyZV9hbmRfc2VuZF9mdHlwIChxdG11eCk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBicmVhazsKLQotICAgICAgLyogUGFkIGZ0eXAgb3V0IHRvIGFuIDgtYnl0ZSBib3VuZGFyeSBiZWZvcmUgc3RhcnRpbmcgdGhlIG1vb3YKLSAgICAgICAqIHBpbmcgcG9uZyByZWdpb24uIEl0IHNob3VsZCBiZSB3ZWxsIGxlc3MgdGhhbiAxIGRpc2sgc2VjdG9yLAotICAgICAgICogdW5sZXNzIHRoZXJlJ3MgYSBiYWppbGxpb24gY29tcGF0aWJsZSB0eXBlcyBsaXN0ZWQsCi0gICAgICAgKiBidXQgbGV0J3MgYmUgc3VyZSB0aGUgZnJlZSBhdG9tIGRvZXNuJ3QgY3Jvc3MgYSBzZWN0b3IKLSAgICAgICAqIGJvdW5kYXJ5IGFueXdheSAqLwotICAgICAgaWYgKHF0bXV4LT5oZWFkZXJfc2l6ZSAlIDgpIHsKLSAgICAgICAgLyogRXh0cmEgOCBieXRlcyBmb3IgdGhlIHBhZGRpbmcgZnJlZSBhdG9tIGhlYWRlciAqLwotICAgICAgICBndWludCBwYWRkaW5nID0gKGd1aW50KSAoMTYgLSAocXRtdXgtPmhlYWRlcl9zaXplICUgOCkpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJSb3VuZGluZyBmdHlwIGJ5ICV1IGJ5dGVzIiwgcGFkZGluZyk7Ci0gICAgICAgIHJldCA9Ci0gICAgICAgICAgICBnc3RfcXRfbXV4X3NlbmRfZnJlZV9hdG9tIChxdG11eCwgJnF0bXV4LT5oZWFkZXJfc2l6ZSwgcGFkZGluZywKLSAgICAgICAgICAgIEZBTFNFKTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfQotCi0gICAgICAvKiBTdG9yZSB0aGlzIGFzIHRoZSBtb292IG9mZnNldCBmb3IgbGF0ZXIgdXBkYXRpbmcuCi0gICAgICAgKiBXZSByZWNvcmQgbWRhdCBwb3NpdGlvbiBiZWxvdyAqLwotICAgICAgcXRtdXgtPm1vb3ZfcG9zID0gcXRtdXgtPmhlYWRlcl9zaXplOwotCi0gICAgICAvKiBTZXQgdXAgdGhlIGluaXRpYWwgJ3BpbmcnIHN0YXRlIG9mIHRoZSBwaW5nLXBvbmcgYnVmZmVycyAqLwotICAgICAgcXRtdXgtPnJlc2VydmVkX21vb3ZfZmlyc3RfYWN0aXZlID0gVFJVRTsKLQotICAgICAgZ3N0X3F0X211eF9jb25maWd1cmVfbW9vdiAocXRtdXgpOwotICAgICAgZ3N0X3F0X211eF9zZXR1cF9tZXRhZGF0YSAocXRtdXgpOwotICAgICAgLyogRW1wdHkgZnJlZSBhdG9tIHRvIGJlZ2luLCBzdGFydGluZyBvbiBhbiA4LWJ5dGUgYm91bmRhcnkgKi8KLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfc2VuZF9mcmVlX2F0b20gKHF0bXV4LCAmcXRtdXgtPmhlYWRlcl9zaXplLCA4LCBGQUxTRSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgLyogTW9vdiBoZWFkZXIsIG5vdCBwYWRkZWQgeWV0ICovCi0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfbW9vdiAocXRtdXgsICZxdG11eC0+aGVhZGVyX3NpemUsIDAsIEZBTFNFLCBGQUxTRSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgLyogVGhlIG1vb3Ygd2UganVzdCBzZW50IGNvbnRhaW5zIHRoZSAnYmFzZScgc2l6ZSBvZiB0aGUgbW9vdiwgYmVmb3JlCi0gICAgICAgKiB3ZSBwdXQgaW4gYW55IHRpbWUtZGVwZW5kZW50IHBlci10cmFrIGRhdGEuIFVzZSB0aGF0IHRvIG1ha2UKLSAgICAgICAqIGEgZ29vZCBlc3RpbWF0ZSBvZiBob3cgbXVjaCBleHRyYSB0byByZXNlcnZlICovCi0gICAgICAvKiBDYWxjdWxhdGUgaG93IG11Y2ggc3BhY2UgdG8gcmVzZXJ2ZSBmb3Igb3VyIE1PT1YgYXRvbS4KLSAgICAgICAqIFdlIGFjdHVhbGx5IHJlc2VydmUgdHdpY2UgdGhhdCwgZm9yIHBpbmctcG9uZyBidWZmZXJzICovCi0gICAgICBxdG11eC0+YmFzZV9tb292X3NpemUgPSBxdG11eC0+bGFzdF9tb292X3NpemU7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJCYXNlIG1vb3Ygc2l6ZSBpcyAldSBiZWZvcmUgYW55IGluZGV4ZXMiLAotICAgICAgICAgIHF0bXV4LT5iYXNlX21vb3Zfc2l6ZSk7Ci0gICAgICBxdG11eC0+cmVzZXJ2ZWRfbW9vdl9zaXplID0gcXRtdXgtPmJhc2VfbW9vdl9zaXplICsKLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHJlc2VydmVkX21heF9kdXJhdGlvbiwKLSAgICAgICAgICByZXNlcnZlZF9ieXRlc19wZXJfc2VjX3Blcl90cmFrICoKLSAgICAgICAgICBhdG9tX21vb3ZfZ2V0X3RyYWtfY291bnQgKHF0bXV4LT5tb292KSwgR1NUX1NFQ09ORCk7Ci0KLSAgICAgIC8qIE5lZWQgc3BhY2UgZm9yIGF0IGxlYXN0IDQgYXRvbSBoZWFkZXJzLiBNb3JlIHJlYWxseSwgYnV0Ci0gICAgICAgKiB0aGlzIGFzIGFuIGFic29sdXRlIG1pbmltdW0gKi8KLSAgICAgIGlmIChxdG11eC0+cmVzZXJ2ZWRfbW9vdl9zaXplIDwgNCAqIDgpCi0gICAgICAgIGdvdG8gcmVzZXJ2ZWRfbW9vdl90b29fc21hbGw7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAicmVzZXJ2aW5nIGhlYWRlciBhcmVhIG9mIHNpemUgJXUiLAotICAgICAgICAgIDIgKiBxdG11eC0+cmVzZXJ2ZWRfbW9vdl9zaXplICsgMTYpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHF0bXV4KTsKLSAgICAgIHF0bXV4LT5yZXNlcnZlZF9kdXJhdGlvbl9yZW1haW5pbmcgPQotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAocXRtdXgtPnJlc2VydmVkX21vb3Zfc2l6ZSAtCi0gICAgICAgICAgcXRtdXgtPmJhc2VfbW9vdl9zaXplLCBHU1RfU0VDT05ELAotICAgICAgICAgIHJlc2VydmVkX2J5dGVzX3Blcl9zZWNfcGVyX3RyYWsgKgotICAgICAgICAgIGF0b21fbW9vdl9nZXRfdHJha19jb3VudCAocXRtdXgtPm1vb3YpKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG11eCk7Ci0KLSAgICAgIC8qIE5vdyB0aGF0IHdlIGtub3cgaG93IG11Y2ggcmVzZXJ2ZWQgc3BhY2UgaXMgdGFyZ2V0dGVkLAotICAgICAgICogb3V0cHV0IGEgZnJlZSBhdG9tIHRvIGZpbGwgdGhlIGV4dHJhIHJlc2VydmVkICovCi0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfZnJlZV9hdG9tIChxdG11eCwgJnF0bXV4LT5oZWFkZXJfc2l6ZSwKLSAgICAgICAgICBxdG11eC0+cmVzZXJ2ZWRfbW9vdl9zaXplIC0gcXRtdXgtPmJhc2VfbW9vdl9zaXplLCBGQUxTRSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAvKiBUaGVuIGEgZnJlZSBhdG9tIGNvbnRhaW5pbmcgJ3BvbmcnIGJ1ZmZlciwgd2l0aCBhbgotICAgICAgICogZXh0cmEgOCBieXRlcyB0byBhY2NvdW50IGZvciB0aGUgZnJlZSBhdG9tIGhlYWRlciBpdHNlbGYgKi8KLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfc2VuZF9mcmVlX2F0b20gKHF0bXV4LCAmcXRtdXgtPmhlYWRlcl9zaXplLAotICAgICAgICAgIHF0bXV4LT5yZXNlcnZlZF9tb292X3NpemUgKyA4LCBGQUxTRSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAvKiBleHRyYSBhdG9tcyBnbyBhZnRlciB0aGUgZnJlZS9tb292KHMpLCBiZWZvcmUgdGhlIG1kYXQgKi8KLSAgICAgIHJldCA9Ci0gICAgICAgICAgZ3N0X3F0X211eF9zZW5kX2V4dHJhX2F0b21zIChxdG11eCwgVFJVRSwgJnF0bXV4LT5oZWFkZXJfc2l6ZSwgRkFMU0UpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgcmV0dXJuIHJldDsKLQotICAgICAgcXRtdXgtPm1kYXRfcG9zID0gcXRtdXgtPmhlYWRlcl9zaXplOwotICAgICAgLyogZXh0ZW5kZWQgYXRvbSBpbiBjYXNlIHdlIGdvIG92ZXIgNEdCIHdoaWxlIHdyaXRpbmcgYW5kIG5lZWQKLSAgICAgICAqIHRoZSBmdWxsIDY0LWJpdCBhdG9tICovCi0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9xdF9tdXhfc2VuZF9tZGF0X2hlYWRlciAocXRtdXgsICZxdG11eC0+aGVhZGVyX3NpemUsIDAsIFRSVUUsCi0gICAgICAgICAgRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVRfTVVYX01PREVfRkFTVF9TVEFSVDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocXRtdXgpOwotICAgICAgcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZSA9IGdfZm9wZW4gKHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGVfcGF0aCwgIndiKyIpOwotICAgICAgaWYgKCFxdG11eC0+ZmFzdF9zdGFydF9maWxlKQotICAgICAgICBnb3RvIG9wZW5fZmFpbGVkOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXV4KTsKLSAgICAgIC8qIHNlbmQgYSBkdW1teSBidWZmZXIgZm9yIHByZXJvbGwgKi8KLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfc2VuZF9idWZmZXIgKHF0bXV4LCBnc3RfYnVmZmVyX25ldyAoKSwgTlVMTCwgRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUVRfTVVYX01PREVfRlJBR01FTlRFRDoKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9GUkFHTUVOVEVEX1NUUkVBTUFCTEU6Ci0gICAgICByZXQgPSBnc3RfcXRfbXV4X3ByZXBhcmVfYW5kX3NlbmRfZnR5cCAocXRtdXgpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgYnJlYWs7Ci0gICAgICAvKiBzdG9yZSB0aGUgbW9vdiBwb3Mgc28gd2UgY2FuIHVwZGF0ZSB0aGUgZHVyYXRpb24gbGF0ZXIKLSAgICAgICAqIGluIG5vbi1zdHJlYW1hYmxlIG1vZGUgKi8KLSAgICAgIHF0bXV4LT5tb292X3BvcyA9IHF0bXV4LT5oZWFkZXJfc2l6ZTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJmcmFnbWVudCBkdXJhdGlvbiAlZCBtcywgd3JpdGluZyBoZWFkZXJzIiwKLSAgICAgICAgICBxdG11eC0+ZnJhZ21lbnRfZHVyYXRpb24pOwotICAgICAgLyogYWxzbyB1c2VkIGFzIHNuYXBzaG90IG1hcmtlciB0byBpbmRpY2F0ZSBmcmFnbWVudGVkIGZpbGUgKi8KLSAgICAgIHF0bXV4LT5mcmFnbWVudF9zZXF1ZW5jZSA9IDE7Ci0gICAgICAvKiBwcmVwYXJlIG1vb3YgYW5kL29yIHRhZ3MgKi8KLSAgICAgIGdzdF9xdF9tdXhfY29uZmlndXJlX21vb3YgKHF0bXV4KTsKLSAgICAgIGdzdF9xdF9tdXhfc2V0dXBfbWV0YWRhdGEgKHF0bXV4KTsKLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfc2VuZF9tb292IChxdG11eCwgJnF0bXV4LT5oZWFkZXJfc2l6ZSwgMCwgRkFMU0UsIEZBTFNFKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAvKiBleHRyYSBhdG9tcyAqLwotICAgICAgcmV0ID0KLSAgICAgICAgICBnc3RfcXRfbXV4X3NlbmRfZXh0cmFfYXRvbXMgKHF0bXV4LCBUUlVFLCAmcXRtdXgtPmhlYWRlcl9zaXplLCBGQUxTRSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBicmVhazsKLSAgICAgIC8qIHByZXBhcmUgaW5kZXggaWYgbm90IHN0cmVhbWFibGUgKi8KLSAgICAgIGlmIChxdG11eC0+bXV4X21vZGUgPT0gR1NUX1FUX01VWF9NT0RFX0ZSQUdNRU5URUQpCi0gICAgICAgIHF0bXV4LT5tZnJhID0gYXRvbV9tZnJhX25ldyAocXRtdXgtPmNvbnRleHQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfaXNtbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgU1RSRUFNLCBNVVgsCi0gICAgICAgICgiQ2Fubm90IGNyZWF0ZSBhbiBJU01MIGZpbGUgd2l0aCAwIGZyYWdtZW50IGR1cmF0aW9uIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1yZXNlcnZlZF9tb292X3Rvb19zbWFsbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgU1RSRUFNLCBNVVgsCi0gICAgICAgICgiTm90IGVub3VnaCByZXNlcnZlZCBzcGFjZSBmb3IgY3JlYXRpbmcgaGVhZGVycyIpLCAoTlVMTCkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtdXgsIFJFU09VUkNFLCBPUEVOX1JFQURfV1JJVEUsCi0gICAgICAgICgoIkNvdWxkIG5vdCBvcGVuIHRlbXBvcmFyeSBmaWxlIFwiJXNcIiIpLAotICAgICAgICAgICAgcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZV9wYXRoKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXV4KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfc2VuZF9sYXN0X2J1ZmZlcnMgKEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdTTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBxdG11eC0+Y29sbGVjdC0+ZGF0YTsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqY2RhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgd2Fsay0+ZGF0YTsKLSAgICBHc3RRVFBhZCAqcXRwYWQgPSAoR3N0UVRQYWQgKikgY2RhdGE7Ci0KLSAgICAvKiBhdm9pZCBhZGRfYnVmZmVyIGNvbXBsYWluaW5nIGlmIG5vdCBuZWdvdGlhdGVkCi0gICAgICogaW4gd2hpY2ggY2FzZSBubyBidWZmZXJzIGVpdGhlciwgc28gc2tpcHBpbmcgKi8KLSAgICBpZiAoIXF0cGFkLT5mb3VyY2MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiUGFkICVzIGhhcyBuZXZlciBoYWQgYnVmZmVycyIsCi0gICAgICAgICAgR1NUX1BBRF9OQU1FIChxdHBhZC0+Y29sbGVjdC5wYWQpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIHNlbmQgbGFzdCBidWZmZXI7IGFsc28gZmx1c2hlcyBwb3NzaWJseSBxdWV1ZWQgYnVmZmVycy90cyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiU2VuZGluZyB0aGUgbGFzdCBidWZmZXIgZm9yIHBhZCAlcyIsCi0gICAgICAgIEdTVF9QQURfTkFNRSAocXRwYWQtPmNvbGxlY3QucGFkKSk7Ci0gICAgcmV0ID0gZ3N0X3F0X211eF9hZGRfYnVmZmVyIChxdG11eCwgcXRwYWQsIE5VTEwpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJGYWlsZWQgdG8gc2VuZCBsYXN0IGJ1ZmZlciBmb3IgJXMsICIKLSAgICAgICAgICAiZmxvdyByZXR1cm46ICVzIiwgR1NUX1BBRF9OQU1FIChxdHBhZC0+Y29sbGVjdC5wYWQpLAotICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF91cGRhdGVfZ2xvYmFsX3N0YXRpc3RpY3MgKEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIEdTTGlzdCAqd2FsazsKLQotICAvKiBmb3Igc2V0dGluZyBzb21lIHN1YnRpdGxlcyBmaWVsZHMgKi8KLSAgZ3VpbnQgbWF4X3dpZHRoID0gMDsKLSAgZ3VpbnQgbWF4X2hlaWdodCA9IDA7Ci0KLSAgcXRtdXgtPmZpcnN0X3RzID0gcXRtdXgtPmxhc3RfZHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBmb3IgKHdhbGsgPSBxdG11eC0+Y29sbGVjdC0+ZGF0YTsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqY2RhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgd2Fsay0+ZGF0YTsKLSAgICBHc3RRVFBhZCAqcXRwYWQgPSAoR3N0UVRQYWQgKikgY2RhdGE7Ci0KLSAgICBpZiAoIXF0cGFkLT5mb3VyY2MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiUGFkICVzIGhhcyBuZXZlciBoYWQgYnVmZmVycyIsCi0gICAgICAgICAgR1NUX1BBRF9OQU1FIChxdHBhZC0+Y29sbGVjdC5wYWQpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGhhdmluZyBmbHVzaGVkIGFib3ZlLCBjYW4gY2hlY2sgZm9yIGJ1ZmZlcnMgbm93ICovCi0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChxdHBhZC0+Zmlyc3RfdHMpKSB7Ci0gICAgICAvKiBkZXRlcm1pbmUgbWF4IHN0cmVhbSBkdXJhdGlvbiAqLwotICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocXRtdXgtPmxhc3RfZHRzKQotICAgICAgICAgIHx8IHF0cGFkLT5sYXN0X2R0cyA+IHF0bXV4LT5sYXN0X2R0cykgewotICAgICAgICBxdG11eC0+bGFzdF9kdHMgPSBxdHBhZC0+bGFzdF9kdHM7Ci0gICAgICB9Ci0gICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChxdG11eC0+Zmlyc3RfdHMpCi0gICAgICAgICAgfHwgcXRwYWQtPmZpcnN0X3RzIDwgcXRtdXgtPmZpcnN0X3RzKSB7Ci0gICAgICAgIHF0bXV4LT5maXJzdF90cyA9IHF0cGFkLT5maXJzdF90czsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBzdWJ0aXRsZXMgbmVlZCB0byBrbm93IHRoZSB2aWRlbyB3aWR0aC9oZWlnaHQsCi0gICAgICogaXQgaXMgc3RvcmVkIHNoaWZ0ZWQgMTYgYml0cyB0byB0aGUgbGVmdCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICogc3BlYyAqLwotICAgIG1heF93aWR0aCA9IE1BWCAobWF4X3dpZHRoLCAocXRwYWQtPnRyYWstPnRraGQud2lkdGggPj4gMTYpKTsKLSAgICBtYXhfaGVpZ2h0ID0gTUFYIChtYXhfaGVpZ2h0LCAocXRwYWQtPnRyYWstPnRraGQuaGVpZ2h0ID4+IDE2KSk7Ci0KLSAgICAvKiB1cGRhdGUgYXZlcmFnZSBiaXRyYXRlIG9mIHN0cmVhbXMgaWYgbmVlZGVkICovCi0gICAgewotICAgICAgZ3VpbnQzMiBhdmdiaXRyYXRlID0gMDsKLSAgICAgIGd1aW50MzIgbWF4Yml0cmF0ZSA9IHF0cGFkLT5tYXhfYml0cmF0ZTsKLQotICAgICAgaWYgKHF0cGFkLT5hdmdfYml0cmF0ZSkKLSAgICAgICAgYXZnYml0cmF0ZSA9IHF0cGFkLT5hdmdfYml0cmF0ZTsKLSAgICAgIGVsc2UgaWYgKHF0cGFkLT50b3RhbF9kdXJhdGlvbiA+IDApCi0gICAgICAgIGF2Z2JpdHJhdGUgPSAoZ3VpbnQzMikgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChxdHBhZC0+dG90YWxfYnl0ZXMsCi0gICAgICAgICAgICA4ICogR1NUX1NFQ09ORCwgcXRwYWQtPnRvdGFsX2R1cmF0aW9uKTsKLQotICAgICAgYXRvbV90cmFrX3VwZGF0ZV9iaXRyYXRlcyAocXRwYWQtPnRyYWssIGF2Z2JpdHJhdGUsIG1heGJpdHJhdGUpOwotICAgIH0KLSAgfQotCi0gIC8qIG5lZWQgdG8gdXBkYXRlIHZhbHVlcyBvbiBzdWJ0aXRsZSB0cmFrcyBub3cgdGhhdCB3ZSBrbm93IHRoZQotICAgKiBtYXggd2lkdGggYW5kIGhlaWdodCAqLwotICBmb3IgKHdhbGsgPSBxdG11eC0+Y29sbGVjdC0+ZGF0YTsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqY2RhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgd2Fsay0+ZGF0YTsKLSAgICBHc3RRVFBhZCAqcXRwYWQgPSAoR3N0UVRQYWQgKikgY2RhdGE7Ci0KLSAgICBpZiAoIXF0cGFkLT5mb3VyY2MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiUGFkICVzIGhhcyBuZXZlciBoYWQgYnVmZmVycyIsCi0gICAgICAgICAgR1NUX1BBRF9OQU1FIChxdHBhZC0+Y29sbGVjdC5wYWQpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChxdHBhZC0+Zm91cmNjID09IEZPVVJDQ190eDNnKSB7Ci0gICAgICBhdG9tX3RyYWtfdHgzZ191cGRhdGVfZGltZW5zaW9uIChxdHBhZC0+dHJhaywgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKLSAgICB9Ci0gIH0KLX0KLQotLyogQ2FsbGVkIGFmdGVyIGdzdF9xdF9tdXhfdXBkYXRlX2dsb2JhbF9zdGF0aXN0aWNzKCkgdXBkYXRlcyB0aGUKLSAqIGZpcnN0X3RzIHRyYWNraW5nLCB0byBjcmVhdGUvc2V0IGVkaXQgbGlzdHMgZm9yIGRlbGF5ZWQgc3RyZWFtcyAqLwotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfdXBkYXRlX2VkaXRfbGlzdHMgKEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIEdTTGlzdCAqd2FsazsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIk1lZGlhIGZpcnN0IHRzIHNlbGVjdGVkOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChxdG11eC0+Zmlyc3RfdHMpKTsKLSAgLyogYWRkL3VwZGF0ZSBFRFRTcyBmb3IgbGF0ZSBzdHJlYW1zLiBjb25maWd1cmVfbW9vdiB3aWxsIGhhdmUKLSAgICogc2V0IHRoZSB0cmFrIGR1cmF0aW9ucyBhYm92ZSBieSBzdW1taW5nIHRoZSBzYW1wbGUgdGFibGVzLAotICAgKiBoZXJlIHdlIGV4dGVuZCB0aGF0IGlmIG5lZWRpbmcgdG8gaW5zZXJ0IGFuIGVtcHR5IHNlZ21lbnQgKi8KLSAgZm9yICh3YWxrID0gcXRtdXgtPmNvbGxlY3QtPmRhdGE7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0Q29sbGVjdERhdGEgKmNkYXRhID0gKEdzdENvbGxlY3REYXRhICopIHdhbGstPmRhdGE7Ci0gICAgR3N0UVRQYWQgKnF0cGFkID0gKEdzdFFUUGFkICopIGNkYXRhOwotCi0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChxdHBhZC0+Zmlyc3RfdHMpKSB7Ci0gICAgICBndWludDMyIGxhdGVuZXNzID0gMDsKLSAgICAgIGd1aW50MzIgZHVyYXRpb24gPSBxdHBhZC0+dHJhay0+dGtoZC5kdXJhdGlvbjsKLSAgICAgIGdib29sZWFuIGhhc19nYXA7Ci0KLSAgICAgIGhhc19nYXAgPSAocXRwYWQtPmZpcnN0X3RzID4gKHF0bXV4LT5maXJzdF90cyArIHF0cGFkLT5kdHNfYWRqdXN0bWVudCkpOwotCi0gICAgICBpZiAoaGFzX2dhcCkgewotICAgICAgICBHc3RDbG9ja1RpbWUgZGlmZjsKLQotICAgICAgICBkaWZmID0gcXRwYWQtPmZpcnN0X3RzIC0gKHF0bXV4LT5maXJzdF90cyArIHF0cGFkLT5kdHNfYWRqdXN0bWVudCk7Ci0gICAgICAgIGxhdGVuZXNzID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChkaWZmLAotICAgICAgICAgICAgcXRtdXgtPnRpbWVzY2FsZSwgR1NUX1NFQ09ORCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJQYWQgJXMgaXMgYSBsYXRlIHN0cmVhbSBieSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfUEFEX05BTUUgKHF0cGFkLT5jb2xsZWN0LnBhZCksIEdTVF9USU1FX0FSR1MgKGxhdGVuZXNzKSk7Ci0KLSAgICAgICAgYXRvbV90cmFrX3NldF9lbHN0X2VudHJ5IChxdHBhZC0+dHJhaywgMCwgbGF0ZW5lc3MsIChndWludDMyKSAtIDEsCi0gICAgICAgICAgICAoZ3VpbnQzMikgKDEgKiA2NTUzNi4wKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGhhcyBzaGlmdCAqLwotICAgICAgaWYgKGhhc19nYXAgfHwgKHF0cGFkLT5kdHNfYWRqdXN0bWVudCA+IDApKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBjdHRzID0gMDsKLSAgICAgICAgZ3VpbnQzMiBtZWRpYV9zdGFydDsKLQotICAgICAgICBpZiAocXRwYWQtPmZpcnN0X3RzID4gcXRwYWQtPmZpcnN0X2R0cykKLSAgICAgICAgICBjdHRzID0gcXRwYWQtPmZpcnN0X3RzIC0gcXRwYWQtPmZpcnN0X2R0czsKLQotICAgICAgICBtZWRpYV9zdGFydCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoY3R0cywKLSAgICAgICAgICAgIGF0b21fdHJha19nZXRfdGltZXNjYWxlIChxdHBhZC0+dHJhayksIEdTVF9TRUNPTkQpOwotCi0gICAgICAgIGF0b21fdHJha19zZXRfZWxzdF9lbnRyeSAocXRwYWQtPnRyYWssIDEsIGR1cmF0aW9uLCBtZWRpYV9zdGFydCwKLSAgICAgICAgICAgIChndWludDMyKSAoMSAqIDY1NTM2LjApKTsKLSAgICAgIH0KLQotICAgICAgLyogbmVlZCB0byBhZGQgdGhlIGVtcHR5IHRpbWUgdG8gdGhlIHRyYWsgZHVyYXRpb24gKi8KLSAgICAgIGR1cmF0aW9uICs9IGxhdGVuZXNzOwotCi0gICAgICBxdHBhZC0+dHJhay0+dGtoZC5kdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgICAgaWYgKHF0cGFkLT50Y190cmFrKSB7Ci0gICAgICAgIHF0cGFkLT50Y190cmFrLT50a2hkLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgICAgIHF0cGFkLT50Y190cmFrLT5tZGlhLm1kaGQudGltZV9pbmZvLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgICB9Ci0KLSAgICAgIC8qIEFuZCBwb3NzaWJseSBncm93IHRoZSBtb292IGR1cmF0aW9uICovCi0gICAgICBpZiAoZHVyYXRpb24gPiBxdG11eC0+bW9vdi0+bXZoZC50aW1lX2luZm8uZHVyYXRpb24pIHsKLSAgICAgICAgcXRtdXgtPm1vb3YtPm12aGQudGltZV9pbmZvLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgICAgIHF0bXV4LT5tb292LT5tdmV4Lm1laGQuZnJhZ21lbnRfZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfdXBkYXRlX3RpbWVjb2RlIChHc3RRVE11eCAqIHF0bXV4KQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ2NCBvZmZzZXQgPSBxdG11eC0+dGNfcG9zOwotCi0gIGdfYXNzZXJ0IChxdG11eC0+dGNfcG9zICE9IC0xKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIHNlZ21lbnQuc3RhcnQgPSBvZmZzZXQ7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKG1hcC5kYXRhLAotICAgICAgZ3N0X3ZpZGVvX3RpbWVfY29kZV9mcmFtZXNfc2luY2VfZGFpbHlfamFtIChxdG11eC0+Zmlyc3RfdGMpKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICAvKiBSZXNldCB0aGlzIHZhbHVlLCBzbyB0aGUgdGltZWNvZGUgd29uJ3QgYmUgcmUtcmV3cml0dGVuICovCi0gIHF0bXV4LT50Y19wb3MgPSAtMTsKLQotICByZXR1cm4gZ3N0X3F0X211eF9zZW5kX2J1ZmZlciAocXRtdXgsIGJ1ZiwgJm9mZnNldCwgRkFMU0UpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0X211eF9zdG9wX2ZpbGUgKEdzdFFUTXV4ICogcXRtdXgpCi17Ci0gIGdib29sZWFuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDY0IG9mZnNldCA9IDAsIHNpemUgPSAwOwotICBnYm9vbGVhbiBsYXJnZV9maWxlOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiVXBkYXRpbmcgcmVtYWluaW5nIHZhbHVlcyBhbmQgc2VuZGluZyBsYXN0IGRhdGEiKTsKLQotICAvKiBwdXNoaW5nIGxhc3QgYnVmZmVycyBmb3IgZWFjaCBwYWQgKi8KLSAgaWYgKChyZXQgPSBnc3RfcXRfbXV4X3NlbmRfbGFzdF9idWZmZXJzIChxdG11eCkpICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgaWYgKHF0bXV4LT5tdXhfbW9kZSA9PSBHU1RfUVRfTVVYX01PREVfRlJBR01FTlRFRF9TVFJFQU1BQkxFKSB7Ci0gICAgLyogU3RyZWFtYWJsZSBtb2RlOyBubyBuZWVkIHRvIHdyaXRlIGR1cmF0aW9uIG9yIE1GUkEgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgInN0cmVhbWFibGUgZmlsZTsgbm90aGluZyB0byBzdG9wIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0KLSAgZ3N0X3F0X211eF91cGRhdGVfZ2xvYmFsX3N0YXRpc3RpY3MgKHF0bXV4KTsKLSAgaWYgKHF0bXV4LT50Y19wb3MgIT0gLTEpIHsKLSAgICAvKiBGaWxlIGlzIGJlaW5nIHN0b3BwZWQgYW5kIHRpbWVjb2RlIGhhc24ndCBiZWVuIHVwZGF0ZWQuIFVwZGF0ZSBpdCBub3cKLSAgICAgKiB3aXRoIHdoYXRldmVyIHdlIGhhdmUgKi8KLSAgICByZXQgPSBnc3RfcXRfbXV4X3VwZGF0ZV90aW1lY29kZSAocXRtdXgpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgc3dpdGNoIChxdG11eC0+bXV4X21vZGUpIHsKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9GUkFHTUVOVEVEOnsKLSAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICAgIGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZjsKLQotICAgICAgc2l6ZSA9IG9mZnNldCA9IDA7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgImFkZGluZyBtZnJhIik7Ci0gICAgICBpZiAoIWF0b21fbWZyYV9jb3B5X2RhdGEgKHF0bXV4LT5tZnJhLCAmZGF0YSwgJnNpemUsICZvZmZzZXQpKQotICAgICAgICBnb3RvIHNlcmlhbGl6ZV9lcnJvcjsKLSAgICAgIGJ1ZiA9IF9nc3RfYnVmZmVyX25ld190YWtlX2RhdGEgKGRhdGEsIG9mZnNldCk7Ci0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgYnVmLCBOVUxMLCBGQUxTRSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAvKiBvbmx5IG12ZXggZHVyYXRpb24gaXMgdXBkYXRlZCwKLSAgICAgICAqIG12aGQgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBlbXB0eSBtb292Ci0gICAgICAgKiAoYnV0IFRPRE8gbWF5YmUgc29tZSBjbGllbnRzIGRvIG5vdCBoYW5kbGUgdGhhdCB3ZWxsID8pICovCi0gICAgICBxdG11eC0+bW9vdi0+bXZleC5tZWhkLmZyYWdtZW50X2R1cmF0aW9uID0KLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHF0bXV4LT5sYXN0X2R0cywgcXRtdXgtPnRpbWVzY2FsZSwgR1NUX1NFQ09ORCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgInJld3JpdGluZyBtb292IHdpdGggbXZleCBkdXJhdGlvbiAlIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocXRtdXgtPmxhc3RfZHRzKSk7Ci0gICAgICAvKiBzZWVrIGFuZCByZXdyaXRlIHRoZSBoZWFkZXIgKi8KLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgICAgIHNlZ21lbnQuc3RhcnQgPSBxdG11eC0+bW9vdl9wb3M7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF0bXV4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgICAgIC8qIG5vIG5lZWQgdG8gc2VlayBiYWNrICovCi0gICAgICByZXR1cm4gZ3N0X3F0X211eF9zZW5kX21vb3YgKHF0bXV4LCBOVUxMLCAwLCBGQUxTRSwgRkFMU0UpOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9ST0JVU1RfUkVDT1JESU5HOnsKLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfcm9idXN0X3JlY29yZGluZ19yZXdyaXRlX21vb3YgKHF0bXV4KTsKLSAgICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgLyogRmluYWxpc2UgYnkgd3JpdGluZyB0aGUgZmluYWwgc2l6ZSBpbnRvIHRoZSBtZGF0LiBVcCB1bnRpbCBub3cKLSAgICAgICAqIGl0J3MgYmVlbiAwLCB3aGljaCBtZWFucyAncmVzdCBvZiB0aGUgZmlsZScKLSAgICAgICAqIE5vIG5lZWQgdG8gc2VlayBiYWNrIGFmdGVyIHRoaXMsIHdlIHdvbid0IHdyaXRlIGFueSBtb3JlICovCi0gICAgICByZXR1cm4gZ3N0X3F0X211eF91cGRhdGVfbWRhdF9zaXplIChxdG11eCwgcXRtdXgtPm1kYXRfcG9zLAotICAgICAgICAgIHF0bXV4LT5tZGF0X3NpemUsIE5VTEwsIFRSVUUpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBNb292LWF0LWVuZCBvciBmYXN0LXN0YXJ0IG1vZGUgZnJvbSBoZXJlIGRvd24gKi8KLSAgZ3N0X3F0X211eF9jb25maWd1cmVfbW9vdiAocXRtdXgpOwotCi0gIGdzdF9xdF9tdXhfdXBkYXRlX2VkaXRfbGlzdHMgKHF0bXV4KTsKLQotICAvKiB0YWdzIGludG8gZmlsZSBtZXRhZGF0YSAqLwotICBnc3RfcXRfbXV4X3NldHVwX21ldGFkYXRhIChxdG11eCk7Ci0KLSAgbGFyZ2VfZmlsZSA9IChxdG11eC0+bWRhdF9zaXplID4gTURBVF9MQVJHRV9GSUxFX0xJTUlUKTsKLQotICBzd2l0Y2ggKHF0bXV4LT5tdXhfbW9kZSkgewotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX0ZBU1RfU1RBUlQ6ewotICAgICAgLyogaWYgZmFzdHN0YXJ0LCB1cGRhdGUgdGhlIG9mZnNldCBvZiB0aGUgYXRvbXMgaW4gdGhlIG1vdmllIHdpdGggdGhlIG9mZnNldAotICAgICAgICogdGhhdCB0aGUgbW92aWUgaGVhZGVycyBiZWZvcmUgbWRhdCB3aWxsIGNhdXNlLgotICAgICAgICogQWxzbywgc2VuZCB0aGUgZnR5cCAqLwotICAgICAgb2Zmc2V0ID0gc2l6ZSA9IDA7Ci0KLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfcHJlcGFyZV9hbmRfc2VuZF9mdHlwIChxdG11eCk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIGdvdG8gZnR5cF9lcnJvcjsKLSAgICAgIH0KLSAgICAgIC8qIGNvcHkgaW50byBOVUxMIHRvIG9idGFpbiBzaXplICovCi0gICAgICBpZiAoIWF0b21fbW9vdl9jb3B5X2RhdGEgKHF0bXV4LT5tb292LCBOVUxMLCAmc2l6ZSwgJm9mZnNldCkpCi0gICAgICAgIGdvdG8gc2VyaWFsaXplX2Vycm9yOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJjYWxjdWxhdGVkIG1vb3YgYXRvbSBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgb2Zmc2V0KTsKLSAgICAgIG9mZnNldCArPSBxdG11eC0+aGVhZGVyX3NpemUgKyAobGFyZ2VfZmlsZSA/IDE2IDogOCk7Ci0KLSAgICAgIC8qIHN1bSB1cCB3aXRoIHRoZSBleHRyYSBhdG9tcyBzaXplICovCi0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfZXh0cmFfYXRvbXMgKHF0bXV4LCBGQUxTRSwgJm9mZnNldCwgRkFMU0UpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgb2Zmc2V0ID0gcXRtdXgtPmhlYWRlcl9zaXplOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBOb3cgdGhhdCB3ZSBrbm93IHRoZSBzaXplIG9mIG1vb3YgKyBleHRyYSBhdG9tcywgd2UgY2FuIGFkanVzdAotICAgKiB0aGUgY2h1bmsgb2Zmc2V0cyBzdG9yZWQgaW50byB0aGUgbW9vdiAqLwotICBhdG9tX21vb3ZfY2h1bmtzX3NldF9vZmZzZXQgKHF0bXV4LT5tb292LCBvZmZzZXQpOwotCi0gIC8qIHdyaXRlIG91dCBtb292IGFuZCBleHRyYSBhdG9tcyAqLwotICAvKiBub3RlOiBhcyBvZiB0aGlzIHBvaW50LCB3ZSBubyBsb25nZXIgY2FyZSBhYm91dCB0cmFja2luZyB3cml0dGVuIGRhdGEgc2l6ZSwKLSAgICogc2luY2UgdGhlcmUgaXMgbm8gbW9yZSB1c2UgZm9yIGl0IGFueXdheSAqLwotICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfbW9vdiAocXRtdXgsIE5VTEwsIDAsIEZBTFNFLCBGQUxTRSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICAvKiBleHRyYSBhdG9tcyAqLwotICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfZXh0cmFfYXRvbXMgKHF0bXV4LCBUUlVFLCBOVUxMLCBGQUxTRSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHF0bXV4LT5tdXhfbW9kZSkgewotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX01PT1ZfQVRfRU5EOgotICAgIHsKLSAgICAgIC8qIG1kYXQgbmVlZHMgdXBkYXRlIGlmZiBub3QgdXNpbmcgZmFzdHN0YXJ0ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgInVwZGF0aW5nIG1kYXQgc2l6ZSIpOwotICAgICAgcmV0ID0gZ3N0X3F0X211eF91cGRhdGVfbWRhdF9zaXplIChxdG11eCwgcXRtdXgtPm1kYXRfcG9zLAotICAgICAgICAgIHF0bXV4LT5tZGF0X3NpemUsIE5VTEwsIEZBTFNFKTsKLSAgICAgIC8qIG5vdGU7IG5vIHNlZWtpbmcgYmFjayB0byB0aGUgZW5kIG9mIGZpbGUgaXMgZG9uZSwKLSAgICAgICAqIHNpbmNlIHdlIG5vIGxvbmdlciB3cml0ZSBhbnl0aGluZyBhbnl3YXkgKi8KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9GQVNUX1NUQVJUOgotICAgIHsKLSAgICAgIC8qIHNlbmQgbWRhdCBhdG9tIGFuZCBtb3ZlIGJ1ZmZlcmVkIGRhdGEgaW50byBpdCAqLwotICAgICAgLyogbWRhdF9zaXplID0gYWNjdW11bGF0ZWQgKGJ1ZmZlcmVkIGRhdGEpICovCi0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfbWRhdF9oZWFkZXIgKHF0bXV4LCBOVUxMLCBxdG11eC0+bWRhdF9zaXplLAotICAgICAgICAgIGxhcmdlX2ZpbGUsIEZBTFNFKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyZWRfZGF0YSAocXRtdXgsIE5VTEwpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotc2VyaWFsaXplX2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0bXV4LCBTVFJFQU0sIE1VWCwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBzZXJpYWxpemUgbW9vdiIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWZ0eXBfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRtdXgsIFNUUkVBTSwgTVVYLCAoTlVMTCksICgiRmFpbGVkIHRvIHNlbmQgZnR5cCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfcGFkX2ZyYWdtZW50X2FkZF9idWZmZXIgKEdzdFFUTXV4ICogcXRtdXgsIEdzdFFUUGFkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZiwgZ2Jvb2xlYW4gZm9yY2UsIGd1aW50MzIgbnNhbXBsZXMsIGdpbnQ2NCBkdHMsCi0gICAgZ3VpbnQzMiBkZWx0YSwgZ3VpbnQzMiBzaXplLCBnYm9vbGVhbiBzeW5jLCBnaW50NjQgcHRzX29mZnNldCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICAvKiBzZXR1cCBpZiBuZWVkZWQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFwYWQtPnRyYWYgfHwgZm9yY2UpKQotICAgIGdvdG8gaW5pdDsKLQotZmx1c2g6Ci0gIC8qIGZsdXNoIHBhZCBmcmFnbWVudCBpZiB0aHJlc2hvbGQgcmVhY2hlZCwKLSAgICogb3IgYXQgbmV3IGtleWZyYW1lIGlmIHdlIHNob3VsZCBiZSBtaW5kaW5nIHRob3NlIGluIHRoZSBmaXJzdCBwbGFjZSAqLwotICBpZiAoR19VTkxJS0VMWSAoZm9yY2UgfHwgKHN5bmMgJiYgcGFkLT5zeW5jKSB8fAotICAgICAgICAgIHBhZC0+ZnJhZ21lbnRfZHVyYXRpb24gPCAoZ2ludDY0KSBkZWx0YSkpIHsKLSAgICBBdG9tTU9PRiAqbW9vZjsKLSAgICBndWludDY0IHNpemUgPSAwLCBvZmZzZXQgPSAwOwotICAgIGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0gICAgZ3VpbnQgaSwgdG90YWxfc2l6ZTsKLQotICAgIC8qIG5vdyB3ZSBrbm93IHdoZXJlIG1vb2YgZW5kcyB1cCwgdXBkYXRlIG9mZnNldCBpbiB0ZnJhICovCi0gICAgaWYgKHBhZC0+dGZyYSkKLSAgICAgIGF0b21fdGZyYV91cGRhdGVfb2Zmc2V0IChwYWQtPnRmcmEsIHF0bXV4LT5oZWFkZXJfc2l6ZSk7Ci0KLSAgICBtb29mID0gYXRvbV9tb29mX25ldyAocXRtdXgtPmNvbnRleHQsIHF0bXV4LT5mcmFnbWVudF9zZXF1ZW5jZSk7Ci0gICAgLyogdGFrZXMgb3duZXJzaGlwICovCi0gICAgYXRvbV9tb29mX2FkZF90cmFmIChtb29mLCBwYWQtPnRyYWYpOwotICAgIHBhZC0+dHJhZiA9IE5VTEw7Ci0gICAgYXRvbV9tb29mX2NvcHlfZGF0YSAobW9vZiwgJmRhdGEsICZzaXplLCAmb2Zmc2V0KTsKLSAgICBidWZmZXIgPSBfZ3N0X2J1ZmZlcl9uZXdfdGFrZV9kYXRhIChkYXRhLCBvZmZzZXQpOwotICAgIEdTVF9MT0dfT0JKRUNUIChxdG11eCwgIndyaXRpbmcgbW9vZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpKTsKLSAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwgYnVmZmVyLCAmcXRtdXgtPmhlYWRlcl9zaXplLCBGQUxTRSk7Ci0KLSAgICAvKiBhbmQgYWN0dWFsIGRhdGEgKi8KLSAgICB0b3RhbF9zaXplID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXRvbV9hcnJheV9nZXRfbGVuICgmcGFkLT5mcmFnbWVudF9idWZmZXJzKTsgaSsrKSB7Ci0gICAgICB0b3RhbF9zaXplICs9Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYXRvbV9hcnJheV9pbmRleCAoJnBhZC0+ZnJhZ21lbnRfYnVmZmVycywgaSkpOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUIChxdG11eCwgIndyaXRpbmcgJWQgYnVmZmVycywgdG90YWxfc2l6ZSAlZCIsCi0gICAgICAgIGF0b21fYXJyYXlfZ2V0X2xlbiAoJnBhZC0+ZnJhZ21lbnRfYnVmZmVycyksIHRvdGFsX3NpemUpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfbWRhdF9oZWFkZXIgKHF0bXV4LCAmcXRtdXgtPmhlYWRlcl9zaXplLCB0b3RhbF9zaXplLAotICAgICAgICAgIEZBTFNFLCBGQUxTRSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGF0b21fYXJyYXlfZ2V0X2xlbiAoJnBhZC0+ZnJhZ21lbnRfYnVmZmVycyk7IGkrKykgewotICAgICAgaWYgKEdfTElLRUxZIChyZXQgPT0gR1NUX0ZMT1dfT0spKQotICAgICAgICByZXQgPSBnc3RfcXRfbXV4X3NlbmRfYnVmZmVyIChxdG11eCwKLSAgICAgICAgICAgIGF0b21fYXJyYXlfaW5kZXggKCZwYWQtPmZyYWdtZW50X2J1ZmZlcnMsIGkpLCAmcXRtdXgtPmhlYWRlcl9zaXplLAotICAgICAgICAgICAgRkFMU0UpOwotICAgICAgZWxzZQotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChhdG9tX2FycmF5X2luZGV4ICgmcGFkLT5mcmFnbWVudF9idWZmZXJzLCBpKSk7Ci0gICAgfQotCi0gICAgYXRvbV9hcnJheV9jbGVhciAoJnBhZC0+ZnJhZ21lbnRfYnVmZmVycyk7Ci0gICAgYXRvbV9tb29mX2ZyZWUgKG1vb2YpOwotICAgIHF0bXV4LT5mcmFnbWVudF9zZXF1ZW5jZSsrOwotICAgIGZvcmNlID0gRkFMU0U7Ci0gIH0KLQotaW5pdDoKLSAgaWYgKEdfVU5MSUtFTFkgKCFwYWQtPnRyYWYpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAic2V0dGluZyB1cCBuZXcgZnJhZ21lbnQiKTsKLSAgICBwYWQtPnRyYWYgPSBhdG9tX3RyYWZfbmV3IChxdG11eC0+Y29udGV4dCwgYXRvbV90cmFrX2dldF9pZCAocGFkLT50cmFrKSk7Ci0gICAgYXRvbV9hcnJheV9pbml0ICgmcGFkLT5mcmFnbWVudF9idWZmZXJzLCA1MTIpOwotICAgIHBhZC0+ZnJhZ21lbnRfZHVyYXRpb24gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHF0bXV4LT5mcmFnbWVudF9kdXJhdGlvbiwKLSAgICAgICAgYXRvbV90cmFrX2dldF90aW1lc2NhbGUgKHBhZC0+dHJhayksIDEwMDApOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHF0bXV4LT5tZnJhICYmICFwYWQtPnRmcmEpKSB7Ci0gICAgICBwYWQtPnRmcmEgPSBhdG9tX3RmcmFfbmV3IChxdG11eC0+Y29udGV4dCwgYXRvbV90cmFrX2dldF9pZCAocGFkLT50cmFrKSk7Ci0gICAgICBhdG9tX21mcmFfYWRkX3RmcmEgKHF0bXV4LT5tZnJhLCBwYWQtPnRmcmEpOwotICAgIH0KLSAgfQotCi0gIC8qIGFkZCBidWZmZXIgYW5kIG1ldGFkYXRhICovCi0gIGF0b21fdHJhZl9hZGRfc2FtcGxlcyAocGFkLT50cmFmLCBkZWx0YSwgc2l6ZSwgc3luYywgcHRzX29mZnNldCwKLSAgICAgIHBhZC0+c3luYyAmJiBzeW5jKTsKLSAgYXRvbV9hcnJheV9hcHBlbmQgKCZwYWQtPmZyYWdtZW50X2J1ZmZlcnMsIGJ1ZiwgMjU2KTsKLSAgcGFkLT5mcmFnbWVudF9kdXJhdGlvbiAtPSBkZWx0YTsKLQotICBpZiAocGFkLT50ZnJhKSB7Ci0gICAgZ3VpbnQzMiBzbiA9IGF0b21fdHJhZl9nZXRfc2FtcGxlX251bSAocGFkLT50cmFmKTsKLQotICAgIGlmICgoc3luYyAmJiBwYWQtPnN5bmMpIHx8IChzbiA9PSAxICYmICFwYWQtPnN5bmMpKQotICAgICAgYXRvbV90ZnJhX2FkZF9lbnRyeSAocGFkLT50ZnJhLCBkdHMsIHNuKTsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZIChmb3JjZSkpCi0gICAgZ290byBmbHVzaDsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBIZXJlJ3MgdGhlIGNsZXZlciBiaXQgb2Ygcm9idXN0IHJlY29yZGluZzogVXBkYXRpbmcgdGhlIG1vb3YKLSAqIGhlYWRlciBpcyBkb25lIHVzaW5nIGEgcGluZy1wb25nIHNjaGVtZSBpbnNpZGUgMiBibG9ja3Mgb2Ygc2l6ZQotICogJ3Jlc2VydmVkX21vb3Zfc2l6ZScgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlCi0gKiBmaWxlIG9uLWRpc2sgaXMgYWx3YXlzIHZhbGlkIGlmIGludGVycnVwdGVkLgotICogSW5zaWRlIHRoZSByZXNlcnZlZCBzcGFjZSwgd2UgaGF2ZSAyIHBhaXJzIG9mIGZyZWUgKyBtb292IGF0b21zCi0gKiAoaW4gdGhhdCBvcmRlciksIGZyZWUtQSArIG1vb3YtQSBAIG9mZnNldCAwIGFuZCBmcmVlLUIgKyBtb292LUIgYXQKLSAqIGF0IG9mZnNldCAicmVzZXJ2ZWRfbW9vdl9zaXplIi4KLSAqCi0gKiAxLiBGcmVlLUEgaGFzIDAgc2l6ZSBwYXlsb2FkLCBtb292LUEgaW1tZWRpYXRlbHkgYWZ0ZXIgaXMKLSAqICAgIGFjdGl2ZS9jdXJyZW50LCBhbmQgaXMgcGFkZGVkIHdpdGggYW4gaW50ZXJuYWwgRnJlZSBhdG9tIHRvCi0gKiAgICBlbmQgYXQgcmVzZXJ2ZWRfc3BhY2UvMi4gRnJlZS1CIGlzIGF0IHJlc2VydmVkX3NwYWNlLzIsIHNpemVkCi0gKiAgICB0byBjb3ZlciB0aGUgcmVtYWluaW5nIGZyZWUgc3BhY2UgKGluY2x1ZGluZyBtb292LUIpLgotICogMi4gV2Ugd3JpdGUgbW9vdi1CICh3aGljaCBpcyBpbnZpc2libGUgaW5zaWRlIGZyZWUtQiksIGFuZCBwYWQgaXQgdG8KLSAqICAgIGVuZCBhdCB0aGUgZW5kIG9mIGZyZWUgc3BhY2UuIFRoZW4sIHdlIHVwZGF0ZSBmcmVlLUEgdG8gc2l6ZQotICogICAgcmVzZXJ2ZWRfc3BhY2UvMiArIHNpemVvZihmcmVlLUIpLCB3aGljaCBoaWRlcyBtb292LUEgYW5kIHRoZQotICogICAgZnJlZS1CIGhlYWRlciwgYW5kIG1ha2VzIG1vb3YtQiBhY3RpdmUuCi0gKiAzLiBSZXdyaXRlIG1vb3YtQSBpbnNpZGUgZnJlZS1BLCB3aXRoIHBhZGRpbmcgb3V0IHRvIGZyZWUtQi4KLSAqICAgIENoYW5nZSB0aGUgc2l6ZSBvZiBmcmVlLUEgdG8gbWFrZSBtb292LUEgYWN0aXZlIGFnYWluLgotICogNC4gUmluc2UgYW5kIHJlcGVhdC4KLSAqCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X3JvYnVzdF9yZWNvcmRpbmdfcmV3cml0ZV9tb292IChHc3RRVE11eCAqIHF0bXV4KQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludDY0IGZyZWVBX29mZnNldDsKLSAgZ3VpbnQzMiBuZXdfZnJlZUFfc2l6ZTsKLSAgZ3VpbnQ2NCBuZXdfbW9vdl9vZmZzZXQ7Ci0KLSAgLyogVXBkYXRlIG1vb3YgaW5mbywgdGhlbiBzZWVrIGFuZCByZXdyaXRlIHRoZSBNT09WIGF0b20gKi8KLSAgZ3N0X3F0X211eF91cGRhdGVfZ2xvYmFsX3N0YXRpc3RpY3MgKHF0bXV4KTsKLSAgZ3N0X3F0X211eF9jb25maWd1cmVfbW9vdiAocXRtdXgpOwotCi0gIGdzdF9xdF9tdXhfdXBkYXRlX2VkaXRfbGlzdHMgKHF0bXV4KTsKLQotICAvKiB0YWdzIGludG8gZmlsZSBtZXRhZGF0YSAqLwotICBnc3RfcXRfbXV4X3NldHVwX21ldGFkYXRhIChxdG11eCk7Ci0KLSAgLyogY2h1bmtzIHBvc2l0aW9uIGlzIHNldCByZWxhdGl2ZSB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKLSAgICogTURBVCBhdG9tIHBheWxvYWQuIFNldCB0aGUgb3ZlcmFsbCBvZmZzZXQgaW50byB0aGUgZmlsZSAqLwotICBhdG9tX21vb3ZfY2h1bmtzX3NldF9vZmZzZXQgKHF0bXV4LT5tb292LCBxdG11eC0+aGVhZGVyX3NpemUpOwotCi0gIC8qIENhbGN1bGF0ZSB3aGljaCBtb292IHRvIHJld3JpdGUuIHF0bXV4LT5tb292X3BvcyBwb2ludHMgdG8KLSAgICogdGhlIHN0YXJ0IG9mIHRoZSBmcmVlLUEgaGVhZGVyICovCi0gIGZyZWVBX29mZnNldCA9IHF0bXV4LT5tb292X3BvczsKLSAgaWYgKHF0bXV4LT5yZXNlcnZlZF9tb292X2ZpcnN0X2FjdGl2ZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiVXBkYXRpbmcgcG9uZyBtb292IGhlYWRlciIpOwotICAgIC8qIEFmdGVyIHRoaXMsIGZyZWVBIHdpbGwgaW5jbHVkZSBpdHNlbGYsIG1vb3ZBLCBwbHVzIHRoZSBmcmVlQgotICAgICAqIGhlYWRlciAqLwotICAgIG5ld19mcmVlQV9zaXplID0gcXRtdXgtPnJlc2VydmVkX21vb3Zfc2l6ZSArIDE2OwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiVXBkYXRpbmcgcGluZyBtb292IGhlYWRlciIpOwotICAgIG5ld19mcmVlQV9zaXplID0gODsKLSAgfQotICAvKiB0aGUgbW9vdiB3ZSB1cGRhdGUgaXMgYWZ0ZXIgZnJlZS1BLCBjYWxjdWxhdGUgaXRzIG9mZnNldCAqLwotICBuZXdfbW9vdl9vZmZzZXQgPSBmcmVlQV9vZmZzZXQgKyBuZXdfZnJlZUFfc2l6ZTsKLQotICAvKiBTd2FwIHBpbmctcG9uZyBjYWRlbmNlIG1hcmtlciAqLwotICBxdG11eC0+cmVzZXJ2ZWRfbW9vdl9maXJzdF9hY3RpdmUgPSAhcXRtdXgtPnJlc2VydmVkX21vb3ZfZmlyc3RfYWN0aXZlOwotCi0gIC8qIHNlZWsgYW5kIHJld3JpdGUgdGhlIE1PT1YgYXRvbSAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIHNlZ21lbnQuc3RhcnQgPSBuZXdfbW9vdl9vZmZzZXQ7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIHJldCA9Ci0gICAgICBnc3RfcXRfbXV4X3NlbmRfbW9vdiAocXRtdXgsIE5VTEwsIHF0bXV4LT5yZXNlcnZlZF9tb292X3NpemUsIEZBTFNFLAotICAgICAgVFJVRSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICAvKiBVcGRhdGUgdGhlIGVzdGltYXRlZCByZWNvcmRpbmcgc3BhY2UgcmVtYWluaW5nLCBiYXNlZCBvbiBhbW91bnQgdXNlZCBzbwotICAgKiBmYXIgYW5kIGR1cmF0aW9uIG11eGVkIHNvIGZhciAqLwotICBpZiAocXRtdXgtPmxhc3RfbW9vdl9zaXplID4gcXRtdXgtPmJhc2VfbW9vdl9zaXplICYmIHF0bXV4LT5sYXN0X2R0cyA+IDApIHsKLSAgICBHc3RDbG9ja1RpbWUgcmVtYWluOwotICAgIEdzdENsb2NrVGltZSB0aW1lX211eGVkID0gcXRtdXgtPmxhc3RfZHRzOwotCi0gICAgcmVtYWluID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChxdG11eC0+cmVzZXJ2ZWRfbW9vdl9zaXplIC0KLSAgICAgICAgcXRtdXgtPmxhc3RfbW9vdl9zaXplLCB0aW1lX211eGVkLAotICAgICAgICBxdG11eC0+bGFzdF9tb292X3NpemUgLSBxdG11eC0+YmFzZV9tb292X3NpemUpOwotICAgIC8qIEFsd2F5cyB1bmRlci1lc3RpbWF0ZSBzbGlnaHRseSwgc28gdXNlcnMKLSAgICAgKiBoYXZlIHRpbWUgdG8gc3RvcCBtdXhpbmcgYmVmb3JlIHdlIHJ1biBvdXQgKi8KLSAgICBpZiAocmVtYWluIDwgR1NUX1NFQ09ORCAvIDIpCi0gICAgICByZW1haW4gPSAwOwotICAgIGVsc2UKLSAgICAgIHJlbWFpbiAtPSBHU1RfU0VDT05EIC8gMjsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAocXRtdXgsCi0gICAgICAgICJSZXNlcnZlZCAldSBoZWFkZXIgYnl0ZXMuIFVzZWQgJXUgaW4gJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIuIFJlbWFpbmluZyBub3cgJXUgb3IgYXBwcm94ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBuc1xuIiwKLSAgICAgICAgcXRtdXgtPnJlc2VydmVkX21vb3Zfc2l6ZSwgcXRtdXgtPmxhc3RfbW9vdl9zaXplLAotICAgICAgICBHU1RfVElNRV9BUkdTIChxdG11eC0+bGFzdF9kdHMpLAotICAgICAgICBxdG11eC0+cmVzZXJ2ZWRfbW9vdl9zaXplIC0gcXRtdXgtPmxhc3RfbW9vdl9zaXplLCByZW1haW4pOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChxdG11eCk7Ci0gICAgcXRtdXgtPnJlc2VydmVkX2R1cmF0aW9uX3JlbWFpbmluZyA9IHJlbWFpbjsKLSAgICBxdG11eC0+bXV4ZWRfc2luY2VfbGFzdF91cGRhdGUgPSAwOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAicmVzZXJ2ZWQgcmVtYWluaW5nIGR1cmF0aW9uIG5vdyAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBxdG11eC0+cmVzZXJ2ZWRfZHVyYXRpb25fcmVtYWluaW5nKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtdXgpOwotICB9Ci0KLQotICAvKiBOb3cgdXBkYXRlIHRoZSBtb292LUEgc2l6ZS4gRG9uJ3QgcGFzcyBvZmZzZXQsIHNpbmNlIHdlIGRvbid0IG5lZWQKLSAgICogc2VuZF9mcmVlX2F0b20oKSB0byBzZWVrIGZvciB1cyAtIGFsbCBvdXIgY2FsbGVycyBzZWVrIGJhY2sgdG8KLSAgICogd2hlcmUgdGhleSBuZWVkIGFmdGVyIHRoaXMsIG9yIHRoZXkgZG9uJ3QgbmVlZCBpdCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIHNlZ21lbnQuc3RhcnQgPSBmcmVlQV9vZmZzZXQ7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIHJldCA9IGdzdF9xdF9tdXhfc2VuZF9mcmVlX2F0b20gKHF0bXV4LCBOVUxMLCBuZXdfZnJlZUFfc2l6ZSwgVFJVRSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfcm9idXN0X3JlY29yZGluZ191cGRhdGUgKEdzdFFUTXV4ICogcXRtdXgsIEdzdENsb2NrVGltZSBwb3NpdGlvbikKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RGbG93UmV0dXJuIGZsb3dfcmV0OwotCi0gIGd1aW50NjQgbWRhdF9vZmZzZXQgPSBxdG11eC0+bWRhdF9wb3MgKyAxNiArIHF0bXV4LT5tZGF0X3NpemU7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdG11eCk7Ci0gIGlmIChxdG11eC0+cmVzZXJ2ZWRfbW9vdl91cGRhdGVfcGVyaW9kID09IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtdXgpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIC8qIFVwZGF0ZSBpZiBwb3NpdGlvbiBpcyA+IHRoZSB0aHJlc2hvbGQgb3IgdGhlcmUncyBiZWVuIG5vIHVwZGF0ZSB5ZXQgKi8KLSAgaWYgKHF0bXV4LT5sYXN0X21vb3ZfdXBkYXRlICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYKLSAgICAgIChwb3NpdGlvbiA8PSBxdG11eC0+bGFzdF9tb292X3VwZGF0ZSB8fAotICAgICAgICAgIChwb3NpdGlvbiAtIHF0bXV4LT5sYXN0X21vb3ZfdXBkYXRlKSA8Ci0gICAgICAgICAgcXRtdXgtPnJlc2VydmVkX21vb3ZfdXBkYXRlX3BlcmlvZCkpIHsKLSAgICAvKiBVcGRhdGUgdGhlIG9mZnNldCBvZiBob3cgbXVjaCB3ZSd2ZSBtdXhlZCwgc28gdGhlCi0gICAgICogcmVwb3J0IG9mIHJlbWFpbmluZyBzcGFjZSBrZWVwcyBjb3VudGluZyBkb3duICovCi0gICAgaWYgKHBvc2l0aW9uID4gcXRtdXgtPmxhc3RfbW9vdl91cGRhdGUgJiYKLSAgICAgICAgcG9zaXRpb24gLSBxdG11eC0+bGFzdF9tb292X3VwZGF0ZSA+IHF0bXV4LT5tdXhlZF9zaW5jZV9sYXN0X3VwZGF0ZSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LAotICAgICAgICAgICJNdXhlZCB0aW1lICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBzaW5jZSBsYXN0IG1vb3YgdXBkYXRlIiwKLSAgICAgICAgICBxdG11eC0+bXV4ZWRfc2luY2VfbGFzdF91cGRhdGUpOwotICAgICAgcXRtdXgtPm11eGVkX3NpbmNlX2xhc3RfdXBkYXRlID0gcG9zaXRpb24gLSBxdG11eC0+bGFzdF9tb292X3VwZGF0ZTsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0bXV4KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7ICAgICAgICAgLyogTm8gdXBkYXRlIG5lZWRlZCB5ZXQgKi8KLSAgfQotCi0gIHF0bXV4LT5sYXN0X21vb3ZfdXBkYXRlID0gcG9zaXRpb247Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG11eCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJVcGRhdGUgbW9vdiBhdG9tLCBwb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgbWRhdCBzdGFydHMgQCAlIiBHX0dVSU5UNjRfRk9STUFUICIgd2Ugd2VyZSBhICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwb3NpdGlvbiksIHF0bXV4LT5tZGF0X3BvcywgbWRhdF9vZmZzZXQpOwotCi0gIGZsb3dfcmV0ID0gZ3N0X3F0X211eF9yb2J1c3RfcmVjb3JkaW5nX3Jld3JpdGVfbW9vdiAocXRtdXgpOwotICBpZiAoR19VTkxJS0VMWSAoZmxvd19yZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIHJldHVybiBmbG93X3JldDsKLQotICAvKiBTZWVrIGJhY2sgdG8gcHJldmlvdXMgcG9zaXRpb24gKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBzZWdtZW50LnN0YXJ0ID0gbWRhdF9vZmZzZXQ7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIHJldHVybiBmbG93X3JldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdF9tdXhfcmVnaXN0ZXJfYW5kX3B1c2hfc2FtcGxlIChHc3RRVE11eCAqIHF0bXV4LCBHc3RRVFBhZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIGdib29sZWFuIGlzX2xhc3RfYnVmZmVyLCBndWludCBuc2FtcGxlcywKLSAgICBnaW50NjQgbGFzdF9kdHMsIGdpbnQ2NCBzY2FsZWRfZHVyYXRpb24sIGd1aW50IHNhbXBsZV9zaXplLAotICAgIGd1aW50NjQgY2h1bmtfb2Zmc2V0LCBnYm9vbGVhbiBzeW5jLCBnYm9vbGVhbiBkb19wdHMsIGdpbnQ2NCBwdHNfb2Zmc2V0KQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIG5vdGUgdGhhdCBhIG5ldyBjaHVuayBpcyBzdGFydGVkIGVhY2ggdGltZSAobm90IGZhbmN5IGJ1dCB3b3JrcykgKi8KLSAgaWYgKHF0bXV4LT5tb292X3JlY292X2ZpbGUpIHsKLSAgICBpZiAoIWF0b21zX3JlY292X3dyaXRlX3RyYWtfc2FtcGxlcyAocXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZSwgcGFkLT50cmFrLAotICAgICAgICAgICAgbnNhbXBsZXMsIChnaW50MzIpIHNjYWxlZF9kdXJhdGlvbiwgc2FtcGxlX3NpemUsIGNodW5rX29mZnNldCwgc3luYywKLSAgICAgICAgICAgIGRvX3B0cywgcHRzX29mZnNldCkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJGYWlsZWQgdG8gd3JpdGUgc2FtcGxlIGluZm9ybWF0aW9uIHRvICIKLSAgICAgICAgICAicmVjb3ZlcnkgZmlsZSwgZGlzYWJsaW5nIHJlY292ZXJ5Iik7Ci0gICAgICBmY2xvc2UgKHF0bXV4LT5tb292X3JlY292X2ZpbGUpOwotICAgICAgcXRtdXgtPm1vb3ZfcmVjb3ZfZmlsZSA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgc3dpdGNoIChxdG11eC0+bXV4X21vZGUpIHsKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9NT09WX0FUX0VORDoKLSAgICBjYXNlIEdTVF9RVF9NVVhfTU9ERV9GQVNUX1NUQVJUOgotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX1JPQlVTVF9SRUNPUkRJTkc6Ci0gICAgICBhdG9tX3RyYWtfYWRkX3NhbXBsZXMgKHBhZC0+dHJhaywgbnNhbXBsZXMsIChnaW50MzIpIHNjYWxlZF9kdXJhdGlvbiwKLSAgICAgICAgICBzYW1wbGVfc2l6ZSwgY2h1bmtfb2Zmc2V0LCBzeW5jLCBwdHNfb2Zmc2V0KTsKLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfc2VuZF9idWZmZXIgKHF0bXV4LCBidWZmZXIsICZxdG11eC0+bWRhdF9zaXplLCBUUlVFKTsKLSAgICAgIC8qIENoZWNrIGlmIGl0J3MgdGltZSB0byByZS13cml0ZSB0aGUgaGVhZGVycyBpbiByb2J1c3QtcmVjb3JkaW5nIG1vZGUgKi8KLSAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sKLSAgICAgICAgICAmJiBxdG11eC0+bXV4X21vZGUgPT0gR1NUX1FUX01VWF9NT0RFX1JPQlVTVF9SRUNPUkRJTkcpCi0gICAgICAgIHJldCA9IGdzdF9xdF9tdXhfcm9idXN0X3JlY29yZGluZ191cGRhdGUgKHF0bXV4LCBwYWQtPnRvdGFsX2R1cmF0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FUX01VWF9NT0RFX0ZSQUdNRU5URUQ6Ci0gICAgY2FzZSBHU1RfUVRfTVVYX01PREVfRlJBR01FTlRFRF9TVFJFQU1BQkxFOgotICAgICAgLyogZW5zdXJlIHRoYXQgYWx3YXlzIHN5bmMgc2FtcGxlcyBhcmUgbWFya2VkIGFzIHN1Y2ggKi8KLSAgICAgIHJldCA9IGdzdF9xdF9tdXhfcGFkX2ZyYWdtZW50X2FkZF9idWZmZXIgKHF0bXV4LCBwYWQsIGJ1ZmZlciwKLSAgICAgICAgICBpc19sYXN0X2J1ZmZlciwgbnNhbXBsZXMsIGxhc3RfZHRzLCAoZ2ludDMyKSBzY2FsZWRfZHVyYXRpb24sCi0gICAgICAgICAgc2FtcGxlX3NpemUsICFwYWQtPnN5bmMgfHwgc3luYywgcHRzX29mZnNldCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X2NoZWNrX2FuZF91cGRhdGVfdGltZWNvZGUgKEdzdFFUTXV4ICogcXRtdXgsIEdzdFFUUGFkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0Rmxvd1JldHVybiByZXQpCi17Ci0gIGlmIChidWYgIT0gTlVMTCAmJiAocGFkLT50Y190cmFrID09IE5VTEwgfHwgcXRtdXgtPnRjX3BvcyAhPSAtMSkpIHsKLSAgICBHc3RWaWRlb1RpbWVDb2RlTWV0YSAqdGNfbWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX3RpbWVfY29kZV9tZXRhIChidWYpOwotICAgIGlmICh0Y19tZXRhKSB7Ci0gICAgICBHc3RWaWRlb1RpbWVDb2RlICp0YyA9ICZ0Y19tZXRhLT50YzsKLSAgICAgIEdzdEJ1ZmZlciAqdGNfYnVmOwotICAgICAgZ3NpemUgc3pyZXQ7Ci0gICAgICBndWludDMyIGZyYW1lc19zaW5jZV9kYWlseV9qYW07Ci0KLSAgICAgIC8qIFRoaXMgbWVhbnMgd2UgbmV2ZXIgZ290IGEgdGltZWNvZGUgYmVmb3JlICovCi0gICAgICBpZiAocXRtdXgtPmZpcnN0X3RjID09IE5VTEwpIHsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgICAgIGdjaGFyICp0Y19zdHIgPSBnc3RfdmlkZW9fdGltZV9jb2RlX3RvX3N0cmluZyAodGMpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIkZvdW5kIGZpcnN0IHRpbWVjb2RlICVzIiwgdGNfc3RyKTsKLSAgICAgICAgZ19mcmVlICh0Y19zdHIpOwotI2VuZGlmCi0gICAgICAgIGdfYXNzZXJ0IChwYWQtPnRjX3RyYWsgPT0gTlVMTCk7Ci0gICAgICAgIHRjX2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCA0LCBOVUxMKTsKLSAgICAgICAgcXRtdXgtPmZpcnN0X3RjID0gZ3N0X3ZpZGVvX3RpbWVfY29kZV9jb3B5ICh0Yyk7Ci0gICAgICAgIC8qIElmIGZyYW1lcyBhcmUgb3V0IG9mIG9yZGVyLCB0aGUgZnJhbWUgd2UncmUgY3VycmVudGx5IGdldHRpbmcgbWlnaHQKLSAgICAgICAgICogbm90IGJlIHRoZSBmaXJzdCBvbmUuIEp1c3Qgd3JpdGUgYSAwIHRpbWVjb2RlIGZvciBub3cgYW5kIHdhaXQKLSAgICAgICAgICogdW50aWwgd2UgcmVjZWl2ZSBhIHRpbWVjb2RlIHRoYXQncyBsb3dlciB0aGFuIHRoZSBjdXJyZW50IG9uZSAqLwotICAgICAgICBpZiAocGFkLT5pc19vdXRfb2Zfb3JkZXIpIHsKLSAgICAgICAgICBxdG11eC0+Zmlyc3RfcHRzID0gR1NUX0JVRkZFUl9QVFMgKGJ1Zik7Ci0gICAgICAgICAgZnJhbWVzX3NpbmNlX2RhaWx5X2phbSA9IDA7Ci0gICAgICAgICAgLyogUG9zaXRpb24gdG8gcmV3cml0ZSAqLwotICAgICAgICAgIHF0bXV4LT50Y19wb3MgPSBxdG11eC0+bWRhdF9zaXplOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZyYW1lc19zaW5jZV9kYWlseV9qYW0gPQotICAgICAgICAgICAgICBnc3RfdmlkZW9fdGltZV9jb2RlX2ZyYW1lc19zaW5jZV9kYWlseV9qYW0gKHF0bXV4LT5maXJzdF90Yyk7Ci0gICAgICAgICAgZnJhbWVzX3NpbmNlX2RhaWx5X2phbSA9IEdVSU5UMzJfVE9fQkUgKGZyYW1lc19zaW5jZV9kYWlseV9qYW0pOwotICAgICAgICB9Ci0gICAgICAgIC8qIFdyaXRlIHRoZSB0aW1lY29kZSB0cmFrIG5vdyAqLwotICAgICAgICBwYWQtPnRjX3RyYWsgPSBhdG9tX3RyYWtfbmV3IChxdG11eC0+Y29udGV4dCk7Ci0gICAgICAgIGF0b21fbW9vdl9hZGRfdHJhayAocXRtdXgtPm1vb3YsIHBhZC0+dGNfdHJhayk7Ci0KLSAgICAgICAgcGFkLT50cmFrLT50cmVmID0gYXRvbV90cmVmX25ldyAoRk9VUkNDX3RtY2QpOwotICAgICAgICBhdG9tX3RyZWZfYWRkX2VudHJ5IChwYWQtPnRyYWstPnRyZWYsIHBhZC0+dGNfdHJhay0+dGtoZC50cmFja19JRCk7Ci0KLSAgICAgICAgYXRvbV90cmFrX3NldF90aW1lY29kZV90eXBlIChwYWQtPnRjX3RyYWssIHF0bXV4LT5jb250ZXh0LAotICAgICAgICAgICAgcXRtdXgtPmZpcnN0X3RjKTsKLQotICAgICAgICBzenJldCA9IGdzdF9idWZmZXJfZmlsbCAodGNfYnVmLCAwLCAmZnJhbWVzX3NpbmNlX2RhaWx5X2phbSwgNCk7Ci0gICAgICAgIGdfYXNzZXJ0IChzenJldCA9PSA0KTsKLQotICAgICAgICBhdG9tX3RyYWtfYWRkX3NhbXBsZXMgKHBhZC0+dGNfdHJhaywgMSwgMSwgNCwgcXRtdXgtPm1kYXRfc2l6ZSwgRkFMU0UsCi0gICAgICAgICAgICAwKTsKLSAgICAgICAgcmV0ID0gZ3N0X3F0X211eF9zZW5kX2J1ZmZlciAocXRtdXgsIHRjX2J1ZiwgJnF0bXV4LT5tZGF0X3NpemUsIFRSVUUpOwotICAgICAgfSBlbHNlIGlmIChwYWQtPmlzX291dF9vZl9vcmRlcikgewotICAgICAgICAvKiBDaGVjayBmb3IgYSBsb3dlciB0aW1lY29kZSB0aGFuIHRoZSBvbmUgc3RvcmVkICovCi0gICAgICAgIGdfYXNzZXJ0IChwYWQtPnRjX3RyYWsgIT0gTlVMTCk7Ci0gICAgICAgIGlmIChHU1RfQlVGRkVSX0RUUyAoYnVmKSA8PSBxdG11eC0+Zmlyc3RfcHRzKSB7Ci0gICAgICAgICAgaWYgKGdzdF92aWRlb190aW1lX2NvZGVfY29tcGFyZSAodGMsIHF0bXV4LT5maXJzdF90YykgPT0gLTEpIHsKLSAgICAgICAgICAgIGdzdF92aWRlb190aW1lX2NvZGVfZnJlZSAocXRtdXgtPmZpcnN0X3RjKTsKLSAgICAgICAgICAgIHF0bXV4LT5maXJzdF90YyA9IGdzdF92aWRlb190aW1lX2NvZGVfY29weSAodGMpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBndWludDY0IGJrX3NpemUgPSBxdG11eC0+bWRhdF9zaXplOwotICAgICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICAgICAgICAvKiBJZiB0aGlzIGZyYW1lJ3MgRFRTIGlzIGFmdGVyIHRoZSBmaXJzdCBQVFMgcmVjZWl2ZWQsIGl0IG1lYW5zCi0gICAgICAgICAgICogd2UndmUgYWxyZWFkeSByZWNlaXZlZCB0aGUgZmlyc3QgZnJhbWUgdG8gYmUgcHJlc2VudGVkLiBPdGhlcndpc2UKLSAgICAgICAgICAgKiB0aGUgZGVjb2RlciB3b3VsZCBuZWVkIHRvIGdvIGJhY2sgaW4gdGltZSAqLwotICAgICAgICAgIGdzdF9xdF9tdXhfdXBkYXRlX3RpbWVjb2RlIChxdG11eCk7Ci0KLSAgICAgICAgICAvKiBSZXNldCB3cml0aW5nIHBvc2l0aW9uICovCi0gICAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgICAgIHNlZ21lbnQuc3RhcnQgPSBia19zaXplOwotICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXRtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBIZXJlIHdlIHB1c2ggdGhlIGJ1ZmZlciBhbmQgdXBkYXRlIHRoZSB0YWJsZXMgaW4gdGhlIHRyYWNrIGF0b21zCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X2FkZF9idWZmZXIgKEdzdFFUTXV4ICogcXRtdXgsIEdzdFFUUGFkICogcGFkLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEJ1ZmZlciAqbGFzdF9idWYgPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0gIGd1aW50IG5zYW1wbGVzLCBzYW1wbGVfc2l6ZTsKLSAgZ3VpbnQ2NCBjaHVua19vZmZzZXQ7Ci0gIGdpbnQ2NCBsYXN0X2R0cywgc2NhbGVkX2R1cmF0aW9uOwotICBnaW50NjQgcHRzX29mZnNldCA9IDA7Ci0gIGdib29sZWFuIHN5bmMgPSBGQUxTRTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBpZiAoIXBhZC0+Zm91cmNjKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgLyogaWYgdGhpcyBwYWQgaGFzIGEgcHJlcGFyZSBmdW5jdGlvbiwgY2FsbCBpdCAqLwotICBpZiAocGFkLT5wcmVwYXJlX2J1Zl9mdW5jICE9IE5VTEwpIHsKLSAgICBidWYgPSBwYWQtPnByZXBhcmVfYnVmX2Z1bmMgKHBhZCwgYnVmLCBxdG11eCk7Ci0gIH0KLQotICBsYXN0X2J1ZiA9IHBhZC0+bGFzdF9idWY7Ci0KLSAgLyogRFRTIGRlbHRhIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHNhbXBsZSBkdXJhdGlvbi4KLSAgICogSWYgYnVmZmVyIGhhcyBtaXNzaW5nIERUUywgd2UgdGFrZSBlaXRoZXIgc2VnbWVudCBzdGFydCBvcgotICAgKiAgcHJldmlvdXMgYnVmZmVyIGVuZCB0aW1lLCB3aGljaGV2ZXIgaXMgbGF0ZXIuCi0gICAqIFRoaXMgbXVzdCBvbmx5IGJlIGRvbmUgZm9yIG5vbiBzcGFyc2Ugc3RyZWFtcywgc3BhcnNlIHN0cmVhbXMKLSAgICogY2FuIGhhdmUgZ2FwcyBiZXR3ZWVuIGJ1ZmZlcnMgKHdoaWNoIGlzIGhhbmRsZWQgbGF0ZXIgYnkgYWRkaW5nCi0gICAqIGV4dHJhIGVtcHR5IGJ1ZmZlciB3aXRoIGR1cmF0aW9uIHRoYXQgZmlsbHMgdGhlIGdhcCkuICovCi0gIGlmICghcGFkLT5zcGFyc2UgJiYgYnVmICYmICFHU1RfQlVGRkVSX0RUU19JU19WQUxJRCAoYnVmKSkgewotICAgIEdzdENsb2NrVGltZSBsYXN0X2J1Zl9kdXJhdGlvbiA9IGxhc3RfYnVmCi0gICAgICAgICYmIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGxhc3RfYnVmKSA/Ci0gICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGxhc3RfYnVmKSA6IDA7Ci0KLSAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKGJ1ZikgPSAwOyAgIC8qIHJ1bm5pbmctdGltZSAwICovCi0KLSAgICBpZiAobGFzdF9idWYKLSAgICAgICAgJiYgKEdTVF9CVUZGRVJfRFRTIChsYXN0X2J1ZikgKyBsYXN0X2J1Zl9kdXJhdGlvbikgPgotICAgICAgICBHU1RfQlVGRkVSX0RUUyAoYnVmKSkgewotICAgICAgR1NUX0JVRkZFUl9EVFMgKGJ1ZikgPSBHU1RfQlVGRkVSX0RUUyAobGFzdF9idWYpICsgbGFzdF9idWZfZHVyYXRpb247Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gZ3N0X3F0X211eF9jaGVja19hbmRfdXBkYXRlX3RpbWVjb2RlIChxdG11eCwgcGFkLCBidWYsIHJldCk7Ci0KLSAgaWYgKGxhc3RfYnVmICYmICFidWYgJiYgIUdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGxhc3RfYnVmKSkgewotICAgIC8qIHRoaXMgaXMgbGFzdCBidWZmZXI7IHRoZXJlIGlzIG5vIG5leHQgYnVmZmVyIHNvIHdlIG5lZWQgdmFsaWQgbnVtYmVyIGFzIGR1cmF0aW9uICovCi0gICAgbGFzdF9idWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGxhc3RfYnVmKTsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChsYXN0X2J1ZikgPSAwOwotICB9Ci0KLSAgaWYgKGxhc3RfYnVmID09IE5VTEwpIHsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlBhZCAlcyBoYXMgbm8gcHJldmlvdXMgYnVmZmVyIHN0b3JlZCBhbmQgIgotICAgICAgICAgICJyZWNlaXZlZCBOVUxMIGJ1ZmZlciwgZG9pbmcgbm90aGluZyIsCi0gICAgICAgICAgR1NUX1BBRF9OQU1FIChwYWQtPmNvbGxlY3QucGFkKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdG11eCwKLSAgICAgICAgICAiUGFkICVzIGhhcyBubyBwcmV2aW91cyBidWZmZXIgc3RvcmVkLCBzdG9yaW5nIG5vdyIsCi0gICAgICAgICAgR1NUX1BBRF9OQU1FIChwYWQtPmNvbGxlY3QucGFkKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgcGFkLT5sYXN0X2J1ZiA9IGJ1ZjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0gZWxzZQotICAgIGdzdF9idWZmZXJfcmVmIChsYXN0X2J1Zik7Ci0KLSAgLyogaWYgdGhpcyBpcyB0aGUgZmlyc3QgYnVmZmVyLCBzdG9yZSB0aGUgdGltZXN0YW1wICovCi0gIGlmIChHX1VOTElLRUxZIChwYWQtPmZpcnN0X3RzID09IEdTVF9DTE9DS19USU1FX05PTkUpICYmIGxhc3RfYnVmKSB7Ci0gICAgaWYgKEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEIChsYXN0X2J1ZikpIHsKLSAgICAgIHBhZC0+Zmlyc3RfdHMgPSBHU1RfQlVGRkVSX1BUUyAobGFzdF9idWYpOwotICAgIH0gZWxzZSBpZiAoR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQgKGxhc3RfYnVmKSkgewotICAgICAgcGFkLT5maXJzdF90cyA9IEdTVF9CVUZGRVJfRFRTIChsYXN0X2J1Zik7Ci0gICAgfQotCi0gICAgaWYgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChsYXN0X2J1ZikpIHsKLSAgICAgIHBhZC0+Zmlyc3RfZHRzID0gcGFkLT5sYXN0X2R0cyA9IEdTVF9CVUZGRVJfRFRTIChsYXN0X2J1Zik7Ci0gICAgfSBlbHNlIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAobGFzdF9idWYpKSB7Ci0gICAgICBwYWQtPmZpcnN0X2R0cyA9IHBhZC0+bGFzdF9kdHMgPSBHU1RfQlVGRkVSX1BUUyAobGFzdF9idWYpOwotICAgIH0KLQotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFkLT5maXJzdF90cykpIHsKLSAgICAgIEdTVF9ERUJVRyAoInNldHRpbmcgZmlyc3RfdHMgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcGFkLT5maXJzdF90cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJGaXJzdCBidWZmZXIgZm9yIHBhZCAlcyBoYXMgbm8gdGltZXN0YW1wLCAiCi0gICAgICAgICAgInVzaW5nIDAgYXMgZmlyc3QgdGltZXN0YW1wIiwgR1NUX1BBRF9OQU1FIChwYWQtPmNvbGxlY3QucGFkKSk7Ci0gICAgICBwYWQtPmZpcnN0X3RzID0gcGFkLT5maXJzdF9kdHMgPSAwOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlN0b3JlZCBmaXJzdCB0aW1lc3RhbXAgZm9yIHBhZCAlcyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9QQURfTkFNRSAocGFkLT5jb2xsZWN0LnBhZCksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHBhZC0+Zmlyc3RfdHMpKTsKLSAgfQotCi0gIGlmIChsYXN0X2J1ZiAmJiBidWYgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfRFRTIChidWYpKSAmJgotICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKEdTVF9CVUZGRVJfRFRTIChsYXN0X2J1ZikpICYmCi0gICAgICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA8IEdTVF9CVUZGRVJfRFRTIChsYXN0X2J1ZikpIHsKLSAgICBHU1RfRVJST1IgKCJkZWNyZWFzaW5nIERUUyB2YWx1ZSAlIiBHU1RfVElNRV9GT1JNQVQgIiA8ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVFMgKGJ1ZikpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RUUyAobGFzdF9idWYpKSk7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKGJ1ZikgPSBHU1RfQlVGRkVSX0RUUyAobGFzdF9idWYpOwotICB9Ci0KLSAgLyogZHVyYXRpb24gYWN0dWFsbHkgbWVhbnMgdGltZSBkZWx0YSBiZXR3ZWVuIHNhbXBsZXMsIHNvIHdlIGNhbGN1bGF0ZQotICAgKiB0aGUgZHVyYXRpb24gYmFzZWQgb24gdGhlIGRpZmZlcmVuY2UgaW4gRFRTIG9yIFBUUywgZmFsbGluZyBiYWNrCi0gICAqIHRvIERVUkFUSU9OIGlmIHRoZSBvdGhlciB0d28gZG9uJ3QgZXhpc3QsIHN1Y2ggYXMgd2l0aCB0aGUgbGFzdAotICAgKiBzYW1wbGUgYmVmb3JlIEVPUy4gKi8KLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChsYXN0X2J1Zik7Ci0gIGlmICghcGFkLT5zcGFyc2UpIHsKLSAgICBpZiAobGFzdF9idWYgJiYgYnVmICYmIEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChidWYpCi0gICAgICAgICYmIEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChsYXN0X2J1ZikpCi0gICAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFRTIChidWYpIC0gR1NUX0JVRkZFUl9EVFMgKGxhc3RfYnVmKTsKLSAgICBlbHNlIGlmIChsYXN0X2J1ZiAmJiBidWYgJiYgR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZikKLSAgICAgICAgJiYgR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGxhc3RfYnVmKSkKLSAgICAgIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZikgLSBHU1RfQlVGRkVSX1BUUyAobGFzdF9idWYpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmcGFkLT5sYXN0X2J1ZiwgYnVmKTsKLQotICAvKiBmb3IgY29tcHV0aW5nIHRoZSBhdmcgYml0cmF0ZSAqLwotICBpZiAoR19MSUtFTFkgKGxhc3RfYnVmKSkgewotICAgIHBhZC0+dG90YWxfYnl0ZXMgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAobGFzdF9idWYpOwotICAgIHBhZC0+dG90YWxfZHVyYXRpb24gKz0gZHVyYXRpb247Ci0gIH0KLQotICBsYXN0X2R0cyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAocGFkLT5sYXN0X2R0cywKLSAgICAgIGF0b21fdHJha19nZXRfdGltZXNjYWxlIChwYWQtPnRyYWspLCBHU1RfU0VDT05EKTsKLQotICAvKiBmcmFnbWVudHMgb25seSBkZWFsIHdpdGggMSBidWZmZXIgPT0gMSBjaHVuayAoPT0gMSBzYW1wbGUpICovCi0gIGlmIChwYWQtPnNhbXBsZV9zaXplICYmICFxdG11eC0+ZnJhZ21lbnRfc2VxdWVuY2UpIHsKLSAgICAvKiBDb25zdGFudCBzaXplIHBhY2tldHM6IHVzdWFsbHkgcmF3IGF1ZGlvICh3aXRoIG1hbnkgc2FtcGxlcyBwZXIKLSAgICAgICBidWZmZXIgKD0gY2h1bmspKSwgYnV0IGNhbiBhbHNvIGJlIGZpeGVkLXBhY2tldC1zaXplIGNvZGVjcyBsaWtlIEFEUENNCi0gICAgICovCi0gICAgc2FtcGxlX3NpemUgPSBwYWQtPnNhbXBsZV9zaXplOwotICAgIGlmIChnc3RfYnVmZmVyX2dldF9zaXplIChsYXN0X2J1ZikgJSBzYW1wbGVfc2l6ZSAhPSAwKQotICAgICAgZ290byBmcmFnbWVudGVkX3NhbXBsZTsKLSAgICAvKiBub3RlOiBxdCByYXcgYXVkaW8gc3RvcmFnZSB3YXJwcyBpdCBpbXBsaWNpdGx5IGludG8gYSB0aW1ld2lzZQotICAgICAqIHBlcmZlY3Qgc3RyZWFtLCBkaXNjYXJkaW5nIGJ1ZmZlciB0aW1lcyAqLwotICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OIChsYXN0X2J1ZikgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgbnNhbXBsZXMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGxhc3RfYnVmKSwKLSAgICAgICAgICBhdG9tX3RyYWtfZ2V0X3RpbWVzY2FsZSAocGFkLT50cmFrKSwgR1NUX1NFQ09ORCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5zYW1wbGVzID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAobGFzdF9idWYpIC8gc2FtcGxlX3NpemU7Ci0gICAgfQotICAgIGlmIChuc2FtcGxlcyA+IDApCi0gICAgICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGxhc3RfYnVmKSAvIG5zYW1wbGVzOwotICAgIGVsc2UKLSAgICAgIGR1cmF0aW9uID0gMDsKLQotICAgIC8qIHRpbWVzY2FsZSA9IHNhbXBsZXJhdGUgKi8KLSAgICBzY2FsZWRfZHVyYXRpb24gPSAxOwotICAgIHBhZC0+bGFzdF9kdHMgKz0gZHVyYXRpb24gKiBuc2FtcGxlczsKLSAgfSBlbHNlIHsKLSAgICBuc2FtcGxlcyA9IDE7Ci0gICAgc2FtcGxlX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChsYXN0X2J1Zik7Ci0gICAgaWYgKChwYWQtPmxhc3RfYnVmICYmIEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChwYWQtPmxhc3RfYnVmKSkKLSAgICAgICAgfHwgR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQgKGxhc3RfYnVmKSkgewotICAgICAgZ2ludDY0IHNjYWxlZF9kdHM7Ci0gICAgICBpZiAocGFkLT5sYXN0X2J1ZiAmJiBHU1RfQlVGRkVSX0RUU19JU19WQUxJRCAocGFkLT5sYXN0X2J1ZikpIHsKLSAgICAgICAgcGFkLT5sYXN0X2R0cyA9IEdTVF9CVUZGRVJfRFRTIChwYWQtPmxhc3RfYnVmKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhZC0+bGFzdF9kdHMgPSBHU1RfQlVGRkVSX0RUUyAobGFzdF9idWYpICsKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGxhc3RfYnVmKTsKLSAgICAgIH0KLSAgICAgIGlmICgoZ2ludDY0KSAocGFkLT5sYXN0X2R0cykgPCAwKSB7Ci0gICAgICAgIHNjYWxlZF9kdHMgPSAtZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kICgtcGFkLT5sYXN0X2R0cywKLSAgICAgICAgICAgIGF0b21fdHJha19nZXRfdGltZXNjYWxlIChwYWQtPnRyYWspLCBHU1RfU0VDT05EKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNjYWxlZF9kdHMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKHBhZC0+bGFzdF9kdHMsCi0gICAgICAgICAgICBhdG9tX3RyYWtfZ2V0X3RpbWVzY2FsZSAocGFkLT50cmFrKSwgR1NUX1NFQ09ORCk7Ci0gICAgICB9Ci0gICAgICBzY2FsZWRfZHVyYXRpb24gPSBzY2FsZWRfZHRzIC0gbGFzdF9kdHM7Ci0gICAgICBsYXN0X2R0cyA9IHNjYWxlZF9kdHM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGZpcnN0IGNvbnZlcnQgaW50ZW5kZWQgdGltZXN0YW1wIChpbiBHc3RDbG9ja1RpbWUgcmVzb2x1dGlvbikgdG8KLSAgICAgICAqIHRyYWsgdGltZXNjYWxlLCB0aGVuIGRlcml2ZSBkZWx0YTsKLSAgICAgICAqIHRoaXMgZW5zdXJlcyBzdW1zIG9mIChzY2FsZSlkZWx0YSBhZGQgdXAgdG8gY29udmVydGVkIHRpbWVzdGFtcCwKLSAgICAgICAqIHdoaWNoIG9ubHkgZGV2aWF0ZXMgYXQgbW9zdCAxL3NjYWxlIGZyb20gdGltZXN0YW1wIGl0c2VsZiAqLwotICAgICAgc2NhbGVkX2R1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChwYWQtPmxhc3RfZHRzICsgZHVyYXRpb24sCi0gICAgICAgICAgYXRvbV90cmFrX2dldF90aW1lc2NhbGUgKHBhZC0+dHJhayksIEdTVF9TRUNPTkQpIC0gbGFzdF9kdHM7Ci0gICAgICBwYWQtPmxhc3RfZHRzICs9IGR1cmF0aW9uOwotICAgIH0KLSAgfQotICBjaHVua19vZmZzZXQgPSBxdG11eC0+bWRhdF9zaXplOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdG11eCwKLSAgICAgICJQYWQgKCVzKSBkdHMgdXBkYXRlZCB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfUEFEX05BTUUgKHBhZC0+Y29sbGVjdC5wYWQpLCBHU1RfVElNRV9BUkdTIChwYWQtPmxhc3RfZHRzKSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdG11eCwKLSAgICAgICJBZGRpbmcgJWQgc2FtcGxlcyB0byB0cmFjaywgZHVyYXRpb246ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICIgc2l6ZTogJSIgR19HVUlOVDMyX0ZPUk1BVCAiIGNodW5rIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIG5zYW1wbGVzLCBzY2FsZWRfZHVyYXRpb24sIHNhbXBsZV9zaXplLCBjaHVua19vZmZzZXQpOwotCi0gIC8qIG1pZ2h0IGJlIGEgc3luYyBzYW1wbGUgKi8KLSAgaWYgKHBhZC0+c3luYyAmJgotICAgICAgIUdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGxhc3RfYnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJBZGRpbmcgbmV3IHN5bmMgc2FtcGxlIGVudHJ5IGZvciB0cmFjayBvZiBwYWQgJXMiLAotICAgICAgICBHU1RfUEFEX05BTUUgKHBhZC0+Y29sbGVjdC5wYWQpKTsKLSAgICBzeW5jID0gVFJVRTsKLSAgfQotCi0gIGlmICghR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGxhc3RfYnVmKSkKLSAgICBnb3RvIG5vX3B0czsKLQotICBpZiAoR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQgKGxhc3RfYnVmKSkgewotICAgIGxhc3RfZHRzID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChHU1RfQlVGRkVSX0RUUyAobGFzdF9idWYpLAotICAgICAgICBhdG9tX3RyYWtfZ2V0X3RpbWVzY2FsZSAocGFkLT50cmFrKSwgR1NUX1NFQ09ORCk7Ci0gICAgcHRzX29mZnNldCA9Ci0gICAgICAgIChnaW50NjQpIChnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKEdTVF9CVUZGRVJfUFRTIChsYXN0X2J1ZiksCi0gICAgICAgICAgICBhdG9tX3RyYWtfZ2V0X3RpbWVzY2FsZSAocGFkLT50cmFrKSwgR1NUX1NFQ09ORCkgLSBsYXN0X2R0cyk7Ci0gIH0gZWxzZSB7Ci0gICAgcHRzX29mZnNldCA9IDA7Ci0gICAgbGFzdF9kdHMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKEdTVF9CVUZGRVJfUFRTIChsYXN0X2J1ZiksCi0gICAgICAgIGF0b21fdHJha19nZXRfdGltZXNjYWxlIChwYWQtPnRyYWspLCBHU1RfU0VDT05EKTsKLSAgfQotICBHU1RfREVCVUcgKCJkdHM6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIHB0czogJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiIHRpbWViYXNlX2R0czogJWQgcHRzX29mZnNldDogJWQiLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVFMgKGxhc3RfYnVmKSksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAobGFzdF9idWYpKSwKLSAgICAgIChpbnQpIChsYXN0X2R0cyksIChpbnQpIChwdHNfb2Zmc2V0KSk7Ci0KLSAgLyoKLSAgICogRWFjaCBidWZmZXIgc3RhcnRzIGEgbmV3IGNodW5rLCBzbyB3ZSBjYW4gYXNzdW1lIHRoZSBidWZmZXIKLSAgICogZHVyYXRpb24gaXMgdGhlIGNodW5rIGR1cmF0aW9uCi0gICAqLwotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSAmJiAoZHVyYXRpb24gPiBxdG11eC0+bG9uZ2VzdF9jaHVuayB8fAotICAgICAgICAgICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocXRtdXgtPmxvbmdlc3RfY2h1bmspKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiTmV3IGxvbmdlc3QgY2h1bmsgZm91bmQ6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiLCBwYWQgJXMiLCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbiksIEdTVF9QQURfTkFNRSAocGFkLT5jb2xsZWN0LnBhZCkpOwotICAgIHF0bXV4LT5sb25nZXN0X2NodW5rID0gZHVyYXRpb247Ci0gIH0KLQotICAvKiBub3cgd2UgZ28gYW5kIHJlZ2lzdGVyIHRoaXMgYnVmZmVyL3NhbXBsZSBhbGwgb3ZlciAqLwotICByZXQgPSBnc3RfcXRfbXV4X3JlZ2lzdGVyX2FuZF9wdXNoX3NhbXBsZSAocXRtdXgsIHBhZCwgbGFzdF9idWYsCi0gICAgICBidWYgPT0gTlVMTCwgbnNhbXBsZXMsIGxhc3RfZHRzLCBzY2FsZWRfZHVyYXRpb24sIHNhbXBsZV9zaXplLAotICAgICAgY2h1bmtfb2Zmc2V0LCBzeW5jLCBUUlVFLCBwdHNfb2Zmc2V0KTsKLQotICAvKiBpZiB0aGlzIGlzIHNwYXJzZSBhbmQgd2UgaGF2ZSBhIG5leHQgYnVmZmVyLCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgZ2FwCi0gICAqIGJldHdlZW4gdGhlbSB0byBpbnNlcnQgYW4gZW1wdHkgc2FtcGxlICovCi0gIGlmIChwYWQtPnNwYXJzZSAmJiBidWYpIHsKLSAgICBpZiAocGFkLT5jcmVhdGVfZW1wdHlfYnVmZmVyKSB7Ci0gICAgICBHc3RCdWZmZXIgKmVtcHR5X2J1ZjsKLSAgICAgIGdpbnQ2NCBlbXB0eV9kdXJhdGlvbiA9Ci0gICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgLSAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGxhc3RfYnVmKSArCi0gICAgICAgICAgZHVyYXRpb24pOwotICAgICAgZ2ludDY0IGVtcHR5X2R1cmF0aW9uX3NjYWxlZDsKLQotICAgICAgZW1wdHlfYnVmID0gcGFkLT5jcmVhdGVfZW1wdHlfYnVmZmVyIChwYWQsIGVtcHR5X2R1cmF0aW9uKTsKLQotICAgICAgZW1wdHlfZHVyYXRpb25fc2NhbGVkID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChlbXB0eV9kdXJhdGlvbiwKLSAgICAgICAgICBhdG9tX3RyYWtfZ2V0X3RpbWVzY2FsZSAocGFkLT50cmFrKSwgR1NUX1NFQ09ORCk7Ci0KLSAgICAgIHBhZC0+dG90YWxfYnl0ZXMgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZW1wdHlfYnVmKTsKLSAgICAgIHBhZC0+dG90YWxfZHVyYXRpb24gKz0gZHVyYXRpb247Ci0KLSAgICAgIHJldCA9Ci0gICAgICAgICAgZ3N0X3F0X211eF9yZWdpc3Rlcl9hbmRfcHVzaF9zYW1wbGUgKHF0bXV4LCBwYWQsIGVtcHR5X2J1ZiwgRkFMU0UsIDEsCi0gICAgICAgICAgbGFzdF9kdHMgKyBzY2FsZWRfZHVyYXRpb24sIGVtcHR5X2R1cmF0aW9uX3NjYWxlZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChlbXB0eV9idWYpLCBxdG11eC0+bWRhdF9zaXplLCBzeW5jLCBUUlVFLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogb3VyIG9ubHkgY2FzZSBjdXJyZW50bHkgaXMgdHgzZyBzdWJ0aXRsZXMsIHNvIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBmaWxsIHRoaXMgeWV0ICovCi0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsCi0gICAgICAgICAgIm5vIGVtcHR5IGJ1ZmZlciBjcmVhdGlvbiBmdW5jdGlvbiBmb3VuZCBmb3IgcGFkICVzIiwKLSAgICAgICAgICBHU1RfUEFEX05BTUUgKHBhZC0+Y29sbGVjdC5wYWQpKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoYnVmKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLWV4aXQ6Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWJhaWw6Ci0gIHsKLSAgICBpZiAoYnVmKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChsYXN0X2J1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1mcmFnbWVudGVkX3NhbXBsZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdG11eCwgU1RSRUFNLCBNVVgsIChOVUxMKSwKLSAgICAgICAgKCJBdWRpbyBidWZmZXIgY29udGFpbnMgZnJhZ21lbnRlZCBzYW1wbGUuIikpOwotICAgIGdvdG8gYmFpbDsKLSAgfQotbm9fcHRzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0bXV4LCBTVFJFQU0sIE1VWCwgKE5VTEwpLCAoIkJ1ZmZlciBoYXMgbm8gUFRTLiIpKTsKLSAgICBnb3RvIGJhaWw7Ci0gIH0KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0bXV4LCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAotICAgICAgICAoImZvcm1hdCB3YXNuJ3QgbmVnb3RpYXRlZCBiZWZvcmUgYnVmZmVyIGZsb3cgb24gcGFkICVzIiwKLSAgICAgICAgICAgIEdTVF9QQURfTkFNRSAocGFkLT5jb2xsZWN0LnBhZCkpKTsKLSAgICBpZiAoYnVmKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotLyoKLSAqIERUUyBydW5uaW5nIHRpbWUgY2FuIGJlIG5lZ2F0aXZlLiBUaGVyZSBpcyBubyB3YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4KLSAqIE1QNCBob3dldmVyLCB0aHVzIHdlIG5lZWQgdG8gb2Zmc2V0IERUUyBzbyB0aGF0IGl0IHN0YXJ0cyBmcm9tIDAuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRfcGFkX2FkanVzdF9idWZmZXJfZHRzIChHc3RRVE11eCAqIHF0bXV4LCBHc3RRVFBhZCAqIHBhZCwKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGNkYXRhLCBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RDbG9ja1RpbWUgcHRzOwotICBnaW50NjQgZHRzOwotCi0gIHB0cyA9IEdTVF9CVUZGRVJfUFRTICgqYnVmKTsKLSAgZHRzID0gR1NUX0NPTExFQ1RfUEFEU19EVFMgKGNkYXRhKTsKLQotICBHU1RfTE9HX09CSkVDVCAocXRtdXgsICJzZWxlY3RlZCBwYWQgJXMgd2l0aCBQVFMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiIGFuZCBEVFMgJSIgR1NUX1NUSU1FX0ZPUk1BVCwgR1NUX1BBRF9OQU1FIChjZGF0YS0+cGFkKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHB0cyksIEdTVF9TVElNRV9BUkdTIChkdHMpKTsKLQotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYWQtPmR0c19hZGp1c3RtZW50KSkgewotICAgIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKGR0cykgJiYgZHRzIDwgMCkKLSAgICAgIHBhZC0+ZHRzX2FkanVzdG1lbnQgPSAtZHRzOwotICAgIGVsc2UKLSAgICAgIHBhZC0+ZHRzX2FkanVzdG1lbnQgPSAwOwotICB9Ci0KLSAgaWYgKHBhZC0+ZHRzX2FkanVzdG1lbnQgPiAwKSB7Ci0gICAgKmJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoKmJ1Zik7Ci0KLSAgICBkdHMgKz0gcGFkLT5kdHNfYWRqdXN0bWVudDsKLQotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocHRzKSkKLSAgICAgIHB0cyArPSBwYWQtPmR0c19hZGp1c3RtZW50OwotCi0gICAgaWYgKEdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoZHRzKSAmJiBkdHMgPCAwKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhZCwgIkRlY3JlYXNpbmcgRFRTLiIpOwotICAgICAgZHRzID0gMDsKLSAgICB9Ci0KLSAgICBpZiAocHRzIDwgZHRzKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhZCwgIkRUUyBpcyBiaWdnZXIgdGhlbiBQVFMiKTsKLSAgICAgIHB0cyA9IGR0czsKLSAgICB9Ci0KLSAgICBHU1RfQlVGRkVSX1BUUyAoKmJ1ZikgPSBwdHM7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKCpidWYpID0gZHRzOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHF0bXV4LCAidGltZSBhZGp1c3RlZCB0byBQVFMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIgYW5kIERUUyAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHB0cyksIEdTVF9USU1FX0FSR1MgKGR0cykpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRfbXV4X2hhbmRsZV9idWZmZXIgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBjZGF0YSwKLSAgICBHc3RCdWZmZXIgKiBidWYsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0UVRNdXggKnF0bXV4ID0gR1NUX1FUX01VWF9DQVNUICh1c2VyX2RhdGEpOwotICBHc3RRVFBhZCAqYmVzdF9wYWQgPSBOVUxMOwotCi0gIGlmIChHX1VOTElLRUxZIChxdG11eC0+c3RhdGUgPT0gR1NUX1FUX01VWF9TVEFURV9TVEFSVEVEKSkgewotICAgIGlmICgocmV0ID0gZ3N0X3F0X211eF9zdGFydF9maWxlIChxdG11eCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgcmV0dXJuIHJldDsKLQotICAgIHF0bXV4LT5zdGF0ZSA9IEdTVF9RVF9NVVhfU1RBVEVfREFUQTsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZIChxdG11eC0+c3RhdGUgPT0gR1NUX1FUX01VWF9TVEFURV9FT1MpKQotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0KLSAgYmVzdF9wYWQgPSAoR3N0UVRQYWQgKikgY2RhdGE7Ci0KLSAgLyogY2xpcHBpbmcgYWxyZWFkeSBjb252ZXJ0ZWQgdG8gcnVubmluZyB0aW1lICovCi0gIGlmIChiZXN0X3BhZCAhPSBOVUxMKSB7Ci0gICAgZ19hc3NlcnQgKGJ1Zik7Ci0gICAgZ3N0X3F0X3BhZF9hZGp1c3RfYnVmZmVyX2R0cyAocXRtdXgsIGJlc3RfcGFkLCBjZGF0YSwgJmJ1Zik7Ci0gICAgcmV0ID0gZ3N0X3F0X211eF9hZGRfYnVmZmVyIChxdG11eCwgYmVzdF9wYWQsIGJ1Zik7Ci0gIH0gZWxzZSB7Ci0gICAgcXRtdXgtPnN0YXRlID0gR1NUX1FUX01VWF9TVEFURV9FT1M7Ci0gICAgcmV0ID0gZ3N0X3F0X211eF9zdG9wX2ZpbGUgKHF0bXV4KTsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlB1c2hpbmcgZW9zIik7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF0bXV4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgIkZhaWxlZCB0byBzdG9wIGZpbGU6ICVzIiwKLSAgICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jaGVja19maWVsZCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IChHc3RTdHJ1Y3R1cmUgKikgdXNlcl9kYXRhOwotICBjb25zdCBHVmFsdWUgKm90aGVyID0gZ3N0X3N0cnVjdHVyZV9pZF9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRfaWQpOwotICBpZiAob3RoZXIgPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHJldHVybiBnc3RfdmFsdWVfY29tcGFyZSAodmFsdWUsIG90aGVyKSA9PSBHU1RfVkFMVUVfRVFVQUw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0bXV4X2NhcHNfaXNfc3Vic2V0X2Z1bGwgKEdzdFFUTXV4ICogcXRtdXgsIEdzdENhcHMgKiBzdWJzZXQsCi0gICAgR3N0Q2FwcyAqIHN1cGVyc2V0KQotewotICBHc3RTdHJ1Y3R1cmUgKnN1Yl9zID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3Vic2V0LCAwKTsKLSAgR3N0U3RydWN0dXJlICpzdXBfcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHN1cGVyc2V0LCAwKTsKLQotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChzdWJfcywgY2hlY2tfZmllbGQsIHN1cF9zKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRfbXV4X2F1ZGlvX3Npbmtfc2V0X2NhcHMgKEdzdFFUUGFkICogcXRwYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RQYWQgKnBhZCA9IHF0cGFkLT5jb2xsZWN0LnBhZDsKLSAgR3N0UVRNdXggKnF0bXV4ID0gR1NUX1FUX01VWF9DQVNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBHc3RRVE11eENsYXNzICpxdG11eF9rbGFzcyA9IChHc3RRVE11eENsYXNzICopIChHX09CSkVDVF9HRVRfQ0xBU1MgKHF0bXV4KSk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBnY2hhciAqbWltZXR5cGU7Ci0gIGdpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWUgPSBOVUxMOwotICBjb25zdCBHc3RCdWZmZXIgKmNvZGVjX2RhdGEgPSBOVUxMOwotICBHc3RRVE11eEZvcm1hdCBmb3JtYXQ7Ci0gIEF1ZGlvU2FtcGxlRW50cnkgZW50cnkgPSB7IDAsIH07Ci0gIEF0b21JbmZvICpleHRfYXRvbSA9IE5VTEw7Ci0gIGdpbnQgY29uc3RhbnRfc2l6ZSA9IDA7Ci0gIGNvbnN0IGdjaGFyICpzdHJlYW1fZm9ybWF0OwotCi0gIHF0cGFkLT5wcmVwYXJlX2J1Zl9mdW5jID0gTlVMTDsKLQotICAvKiBkb2VzIG5vdCBnbyB3ZWxsIHRvIHJlbmVnb3RpYXRlIHN0cmVhbSBtaWQtd2F5LCB1bmxlc3MKLSAgICogdGhlIG9sZCBjYXBzIGFyZSBhIHN1YnNldCBvZiB0aGUgbmV3IG9uZSAodGhpcyBtZWFucyB1cHN0cmVhbQotICAgKiBhZGRlZCBtb3JlIGluZm8gdG8gdGhlIGNhcHMsIGFzIGJvdGggc2hvdWxkIGJlICdmaXhlZCcgY2FwcykgKi8KLSAgaWYgKHF0cGFkLT5mb3VyY2MpIHsKLSAgICBHc3RDYXBzICpjdXJyZW50X2NhcHM7Ci0KLSAgICBjdXJyZW50X2NhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gICAgZ19hc3NlcnQgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgICBpZiAoIWdzdF9xdG11eF9jYXBzX2lzX3N1YnNldF9mdWxsIChxdG11eCwgY3VycmVudF9jYXBzLCBjYXBzKSkgewotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGN1cnJlbnRfY2Fwcyk7Ci0gICAgICBnb3RvIHJlZnVzZV9yZW5lZ290aWF0aW9uOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwKLSAgICAgICAgInBhZCAlcyBhY2NlcHRlZCByZW5lZ290aWF0aW9uIHRvICUiIEdTVF9QVFJfRk9STUFUICIgZnJvbSAlIgotICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgR1NUX1BBRF9OQU1FIChwYWQpLCBjYXBzLCBjdXJyZW50X2NhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjdXJyZW50X2NhcHMpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICIlczolcywgY2Fwcz0lIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSwgY2Fwcyk7Ci0KLSAgZm9ybWF0ID0gcXRtdXhfa2xhc3MtPmZvcm1hdDsKLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIG1pbWV0eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKLQotICAvKiBjb21tb24gaW5mbyAqLwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2hhbm5lbHMiLCAmY2hhbm5lbHMpIHx8Ci0gICAgICAhZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJyYXRlIiwgJnJhdGUpKSB7Ci0gICAgZ290byByZWZ1c2VfY2FwczsKLSAgfQotCi0gIC8qIG9wdGlvbmFsICovCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvZGVjX2RhdGEiKTsKLSAgaWYgKHZhbHVlICE9IE5VTEwpCi0gICAgY29kZWNfZGF0YSA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0KLSAgcXRwYWQtPmlzX291dF9vZl9vcmRlciA9IEZBTFNFOwotCi0gIC8qIHNldCBjb21tb24gcHJvcGVydGllcyAqLwotICBlbnRyeS5zYW1wbGVfcmF0ZSA9IHJhdGU7Ci0gIGVudHJ5LmNoYW5uZWxzID0gY2hhbm5lbHM7Ci0gIC8qIGRlZmF1bHQgKi8KLSAgZW50cnkuc2FtcGxlX3NpemUgPSAxNjsKLSAgLyogdGhpcyBpcyB0aGUgdHlwaWNhbCBjb21wcmVzc2VkIGNhc2UgKi8KLSAgaWYgKGZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9RVCkgewotICAgIGVudHJ5LnZlcnNpb24gPSAxOwotICAgIGVudHJ5LmNvbXByZXNzaW9uX2lkID0gLTI7Ci0gIH0KLQotICAvKiBub3cgbWFwIG9udG8gYSBmb3VyY2MsIGFuZCBzb21lIGV4dHJhIHByb3BlcnRpZXMgKi8KLSAgaWYgKHN0cmNtcCAobWltZXR5cGUsICJhdWRpby9tcGVnIikgPT0gMCkgewotICAgIGdpbnQgbXBlZ3ZlcnNpb24gPSAwLCBtcGVnYXVkaW92ZXJzaW9uID0gMDsKLSAgICBnaW50IGxheWVyID0gLTE7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJm1wZWd2ZXJzaW9uKTsKLSAgICBzd2l0Y2ggKG1wZWd2ZXJzaW9uKSB7Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibGF5ZXIiLCAmbGF5ZXIpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIm1wZWdhdWRpb3ZlcnNpb24iLAotICAgICAgICAgICAgJm1wZWdhdWRpb3ZlcnNpb24pOwotCi0gICAgICAgIC8qIG1wMS8yLzMgKi8KLSAgICAgICAgLyogbm90ZTogUXVpY2tUaW1lIHBsYXllciBkb2VzIG5vdCBsaWtlIG1wMyBlaXRoZXIgd2F5IGluIGlzby9tcDQgKi8KLSAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9RVCkKLSAgICAgICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfX21wMzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX21wNGE7Ci0gICAgICAgICAgZXh0X2F0b20gPQotICAgICAgICAgICAgICBidWlsZF9lc2RzX2V4dGVuc2lvbiAocXRwYWQtPnRyYWssIEVTRFNfT0JKRUNUX1RZUEVfTVBFRzFfUDMsCi0gICAgICAgICAgICAgIEVTRFNfU1RSRUFNX1RZUEVfQVVESU8sIGNvZGVjX2RhdGEsIHF0cGFkLT5hdmdfYml0cmF0ZSwKLSAgICAgICAgICAgICAgcXRwYWQtPm1heF9iaXRyYXRlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGF5ZXIgPT0gMSkgewotICAgICAgICAgIGdfd2Fybl9pZl9mYWlsIChmb3JtYXQgPT0gR1NUX1FUX01VWF9GT1JNQVRfTVA0KTsKLSAgICAgICAgICBlbnRyeS5zYW1wbGVzX3Blcl9wYWNrZXQgPSAzODQ7Ci0gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgPT0gMikgewotICAgICAgICAgIGdfd2Fybl9pZl9mYWlsIChmb3JtYXQgPT0gR1NUX1FUX01VWF9GT1JNQVRfTVA0KTsKLSAgICAgICAgICBlbnRyeS5zYW1wbGVzX3Blcl9wYWNrZXQgPSAxMTUyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdfd2Fybl9pZl9mYWlsIChsYXllciA9PSAzKTsKLSAgICAgICAgICBlbnRyeS5zYW1wbGVzX3Blcl9wYWNrZXQgPSAobXBlZ2F1ZGlvdmVyc2lvbiA8PSAxKSA/IDExNTIgOiA1NzY7Ci0gICAgICAgIH0KLSAgICAgICAgZW50cnkuYnl0ZXNfcGVyX3NhbXBsZSA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA0OgotCi0gICAgICAgIC8qIGNoZWNrIHN0cmVhbS1mb3JtYXQgKi8KLSAgICAgICAgc3RyZWFtX2Zvcm1hdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAic3RyZWFtLWZvcm1hdCIpOwotICAgICAgICBpZiAoc3RyZWFtX2Zvcm1hdCkgewotICAgICAgICAgIGlmIChzdHJjbXAgKHN0cmVhbV9mb3JtYXQsICJyYXciKSAhPSAwKSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAiVW5zdXBwb3J0ZWQgQUFDIHN0cmVhbS1mb3JtYXQgJXMsICIKLSAgICAgICAgICAgICAgICAicGxlYXNlIHVzZSAncmF3JyIsIHN0cmVhbV9mb3JtYXQpOwotICAgICAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgIk5vIHN0cmVhbS1mb3JtYXQgcHJlc2VudCBpbiBjYXBzLCAiCi0gICAgICAgICAgICAgICJhc3N1bWluZyAncmF3JyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjb2RlY19kYXRhIHx8IGdzdF9idWZmZXJfZ2V0X3NpemUgKChHc3RCdWZmZXIgKikgY29kZWNfZGF0YSkgPCAyKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgIm5vICh2YWxpZCkgY29kZWNfZGF0YSBmb3IgQUFDIGF1ZGlvIik7Ci0gICAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBndWludDggcHJvZmlsZTsKLQotICAgICAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoKEdzdEJ1ZmZlciAqKSBjb2RlY19kYXRhLCAwLCAmcHJvZmlsZSwgMSk7Ci0gICAgICAgICAgLyogd2FybiBpZiBub3QgTG93IENvbXBsZXhpdHkgcHJvZmlsZSAqLwotICAgICAgICAgIHByb2ZpbGUgPj49IDM7Ci0gICAgICAgICAgaWYgKHByb2ZpbGUgIT0gMikKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsCi0gICAgICAgICAgICAgICAgIm5vbi1MQyBBQUMgbWF5IG5vdCBydW4gd2VsbCBvbiAoQXBwbGUpIFF1aWNrVGltZS9pVHVuZXMiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEFBQyAqLwotICAgICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfbXA0YTsKLQotICAgICAgICBpZiAoZm9ybWF0ID09IEdTVF9RVF9NVVhfRk9STUFUX1FUKQotICAgICAgICAgIGV4dF9hdG9tID0gYnVpbGRfbW92X2FhY19leHRlbnNpb24gKHF0cGFkLT50cmFrLCBjb2RlY19kYXRhLAotICAgICAgICAgICAgICBxdHBhZC0+YXZnX2JpdHJhdGUsIHF0cGFkLT5tYXhfYml0cmF0ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBleHRfYXRvbSA9Ci0gICAgICAgICAgICAgIGJ1aWxkX2VzZHNfZXh0ZW5zaW9uIChxdHBhZC0+dHJhaywgRVNEU19PQkpFQ1RfVFlQRV9NUEVHNF9QMywKLSAgICAgICAgICAgICAgRVNEU19TVFJFQU1fVFlQRV9BVURJTywgY29kZWNfZGF0YSwgcXRwYWQtPmF2Z19iaXRyYXRlLAotICAgICAgICAgICAgICBxdHBhZC0+bWF4X2JpdHJhdGUpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8vQU1SIikgPT0gMCkgewotICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ19zYW1yOwotICAgIGVudHJ5LnNhbXBsZV9zaXplID0gMTY7Ci0gICAgZW50cnkuc2FtcGxlc19wZXJfcGFja2V0ID0gMTYwOwotICAgIGVudHJ5LmJ5dGVzX3Blcl9zYW1wbGUgPSAyOwotICAgIGV4dF9hdG9tID0gYnVpbGRfYW1yX2V4dGVuc2lvbiAoKTsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8vQU1SLVdCIikgPT0gMCkgewotICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ19zYXdiOwotICAgIGVudHJ5LnNhbXBsZV9zaXplID0gMTY7Ci0gICAgZW50cnkuc2FtcGxlc19wZXJfcGFja2V0ID0gMzIwOwotICAgIGVudHJ5LmJ5dGVzX3Blcl9zYW1wbGUgPSAyOwotICAgIGV4dF9hdG9tID0gYnVpbGRfYW1yX2V4dGVuc2lvbiAoKTsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1yYXciKSA9PSAwKSB7Ci0gICAgR3N0QXVkaW9JbmZvIGluZm87Ci0KLSAgICBnc3RfYXVkaW9faW5mb19pbml0ICgmaW5mbyk7Ci0gICAgaWYgKCFnc3RfYXVkaW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0KLSAgICAvKiBzcGVjIGhhcyBubyBwbGFjZSBmb3IgYSBkaXN0aW5jdGlvbiBpbiB0aGVzZSAqLwotICAgIGlmIChpbmZvLmZpbmZvLT53aWR0aCAhPSBpbmZvLmZpbmZvLT5kZXB0aCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJ3aWR0aCBtdXN0IGJlIHNhbWUgYXMgZGVwdGghIik7Ci0gICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLQotICAgIGlmICgoaW5mby5maW5mby0+ZmxhZ3MgJiBHU1RfQVVESU9fRk9STUFUX0ZMQUdfU0lHTkVEKSkgewotICAgICAgaWYgKGluZm8uZmluZm8tPmVuZGlhbm5lc3MgPT0gR19MSVRUTEVfRU5ESUFOKQotICAgICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0Nfc293dDsKLSAgICAgIGVsc2UgaWYgKGluZm8uZmluZm8tPmVuZGlhbm5lc3MgPT0gR19CSUdfRU5ESUFOKQotICAgICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfdHdvczsKLSAgICAgIGVsc2UKLSAgICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX3Nvd3Q7Ci0gICAgICAvKiBtYXhpbXVtIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk7IG9ubHkgbmV3IHZlcnNpb24gZm9yID4gMTYgYml0ICovCi0gICAgICBpZiAoaW5mby5maW5mby0+ZGVwdGggPD0gMTYpCi0gICAgICAgIGVudHJ5LnZlcnNpb24gPSAwOwotICAgICAgLyogbm90IGNvbXByZXNzZWQgaW4gYW55IGNhc2UgKi8KLSAgICAgIGVudHJ5LmNvbXByZXNzaW9uX2lkID0gMDsKLSAgICAgIC8qIFFUIHNwZWMgc2F5czogbWF4IGF0IDE2IGJpdCBldmVuIGlmIHNhbXBsZSBzaXplIHdlcmUgYWN0dWFsbHkgbGFyZ2VyLAotICAgICAgICogaG93ZXZlciwgbW9zdCBwbGF5ZXJzIChlLmcuIFF1aWNrVGltZSEpIHNlZW0gdG8gZGlzYWdyZWUsIHNvIC4uLiAqLwotICAgICAgZW50cnkuc2FtcGxlX3NpemUgPSBpbmZvLmZpbmZvLT5kZXB0aDsKLSAgICAgIGVudHJ5LmJ5dGVzX3Blcl9zYW1wbGUgPSBpbmZvLmZpbmZvLT5kZXB0aCAvIDg7Ci0gICAgICBlbnRyeS5zYW1wbGVzX3Blcl9wYWNrZXQgPSAxOwotICAgICAgZW50cnkuYnl0ZXNfcGVyX3BhY2tldCA9IGluZm8uZmluZm8tPmRlcHRoIC8gODsKLSAgICAgIGVudHJ5LmJ5dGVzX3Blcl9mcmFtZSA9IGVudHJ5LmJ5dGVzX3Blcl9wYWNrZXQgKiBpbmZvLmNoYW5uZWxzOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoaW5mby5maW5mby0+d2lkdGggPT0gOCAmJiBpbmZvLmZpbmZvLT5kZXB0aCA9PSA4KSB7Ci0gICAgICAgIC8qIGZhbGwgYmFjayB0byBvbGQgOC1iaXQgdmVyc2lvbiAqLwotICAgICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfcmF3XzsKLSAgICAgICAgZW50cnkudmVyc2lvbiA9IDA7Ci0gICAgICAgIGVudHJ5LmNvbXByZXNzaW9uX2lkID0gMDsKLSAgICAgICAgZW50cnkuc2FtcGxlX3NpemUgPSA4OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJub24gOC1iaXQgUENNIG11c3QgYmUgc2lnbmVkIik7Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbnN0YW50X3NpemUgPSAoaW5mby5maW5mby0+ZGVwdGggLyA4KSAqIGluZm8uY2hhbm5lbHM7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtYWxhdyIpID09IDApIHsKLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfYWxhdzsKLSAgICBlbnRyeS5zYW1wbGVzX3Blcl9wYWNrZXQgPSAxMDIzOwotICAgIGVudHJ5LmJ5dGVzX3Blcl9zYW1wbGUgPSAyOwotICB9IGVsc2UgaWYgKHN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LW11bGF3IikgPT0gMCkgewotICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ191bGF3OwotICAgIGVudHJ5LnNhbXBsZXNfcGVyX3BhY2tldCA9IDEwMjM7Ci0gICAgZW50cnkuYnl0ZXNfcGVyX3NhbXBsZSA9IDI7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtYWRwY20iKSA9PSAwKSB7Ci0gICAgZ2ludCBibG9ja3NpemU7Ci0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImJsb2NrX2FsaWduIiwgJmJsb2Nrc2l6ZSkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiYnJva2VuIGNhcHMsIGJsb2NrX2FsaWduIG1pc3NpbmciKTsKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotICAgIC8qIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFdBVi1zdHlsZSBJTUEgQURQQ00sIGZvciB3aGljaCB0aGUgY29kZWMgaWQgaXMKLSAgICAgICAweDExICovCi0gICAgZW50cnkuZm91cmNjID0gTVNfV0FWRV9GT1VSQ0MgKDB4MTEpOwotICAgIC8qIDQgYnl0ZSBoZWFkZXIgcGVyIGNoYW5uZWwgKGluY2x1ZGluZyBvbmUgc2FtcGxlKS4gMiBzYW1wbGVzIHBlciBieXRlCi0gICAgICAgcmVtYWluaW5nLiBTaW1wbGlmeWluZyBnaXZlcyB0aGUgZm9sbG93aW5nIChzYW1wbGVzIHBlciBibG9jayBwZXIKLSAgICAgICBjaGFubmVsKSAqLwotICAgIGVudHJ5LnNhbXBsZXNfcGVyX3BhY2tldCA9IDIgKiBibG9ja3NpemUgLyBjaGFubmVscyAtIDc7Ci0gICAgZW50cnkuYnl0ZXNfcGVyX3NhbXBsZSA9IDI7Ci0KLSAgICBlbnRyeS5ieXRlc19wZXJfZnJhbWUgPSBibG9ja3NpemU7Ci0gICAgZW50cnkuYnl0ZXNfcGVyX3BhY2tldCA9IGJsb2Nrc2l6ZSAvIGNoYW5uZWxzOwotICAgIC8qIEFEUENNIGhhcyBjb25zdGFudCBzaXplIHBhY2tldHMgKi8KLSAgICBjb25zdGFudF9zaXplID0gMTsKLSAgICAvKiBUT0RPOiBJIGRvbid0IHJlYWxseSB1bmRlcnN0YW5kIHdoeSB0aGlzIGhlbHBzLCBidXQgaXQgZG9lcyEgQ29uc3RhbnQKLSAgICAgKiBzaXplIGFuZCBjb21wcmVzc2lvbl9pZCBvZiAtMiBzZWVtIHRvIGJlIGluY29tcGF0aWJsZSwgYW5kIG90aGVyIGZpbGVzCi0gICAgICogaW4gdGhlIHdpbGQgdXNlIHRoaXMgdG9vLiAqLwotICAgIGVudHJ5LmNvbXByZXNzaW9uX2lkID0gLTE7Ci0KLSAgICBleHRfYXRvbSA9IGJ1aWxkX2ltYV9hZHBjbV9leHRlbnNpb24gKGNoYW5uZWxzLCByYXRlLCBibG9ja3NpemUpOwotICB9IGVsc2UgaWYgKHN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LWFsYWMiKSA9PSAwKSB7Ci0gICAgR3N0QnVmZmVyICpjb2RlY19jb25maWc7Ci0gICAgZ2ludCBsZW47Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfYWxhYzsKLSAgICBnc3RfYnVmZmVyX21hcCAoKEdzdEJ1ZmZlciAqKSBjb2RlY19kYXRhLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIC8qIGxldCdzIGNoZWNrIGlmIGNvZGVjIGRhdGEgYWxyZWFkeSBjb21lcyB3aXRoICdhbGFjJyBhdG9tIHByZWZpeCAqLwotICAgIGlmICghY29kZWNfZGF0YSB8fCAobGVuID0gbWFwLnNpemUpIDwgMjgpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiYnJva2VuIGNhcHMsIGNvZGVjIGRhdGEgbWlzc2luZyIpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoKEdzdEJ1ZmZlciAqKSBjb2RlY19kYXRhLCAmbWFwKTsKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotICAgIGlmIChHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCkgPT0gRk9VUkNDX2FsYWMpIHsKLSAgICAgIGxlbiAtPSA4OwotICAgICAgY29kZWNfY29uZmlnID0KLSAgICAgICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uICgoR3N0QnVmZmVyICopIGNvZGVjX2RhdGEsCi0gICAgICAgICAgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSwgOCwgbGVuKTsKLSAgICB9IGVsc2UgewotICAgICAgY29kZWNfY29uZmlnID0gZ3N0X2J1ZmZlcl9yZWYgKChHc3RCdWZmZXIgKikgY29kZWNfZGF0YSk7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKChHc3RCdWZmZXIgKikgY29kZWNfZGF0YSwgJm1hcCk7Ci0gICAgaWYgKGxlbiAhPSAyOCkgewotICAgICAgLyogZG9lcyBub3QgbG9vayBnb29kLCBidXQgcGVyaGFwcyBzb21lIHRyYWlsaW5nIHVubmVlZGVkIHN0dWZmICovCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAidW5leHBlY3RlZCBjb2RlYy1kYXRhIHNpemUsIHBvc3NpYmx5IGJyb2tlbiIpOwotICAgIH0KLSAgICBpZiAoZm9ybWF0ID09IEdTVF9RVF9NVVhfRk9STUFUX1FUKQotICAgICAgZXh0X2F0b20gPSBidWlsZF9tb3ZfYWxhY19leHRlbnNpb24gKGNvZGVjX2NvbmZpZyk7Ci0gICAgZWxzZQotICAgICAgZXh0X2F0b20gPSBidWlsZF9jb2RlY19kYXRhX2V4dGVuc2lvbiAoRk9VUkNDX2FsYWMsIGNvZGVjX2NvbmZpZyk7Ci0gICAgLyogc2V0IHNvbWUgbW9yZSBpbmZvICovCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGNvZGVjX2NvbmZpZywgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBlbnRyeS5ieXRlc19wZXJfc2FtcGxlID0gMjsKLSAgICBlbnRyeS5zYW1wbGVzX3Blcl9wYWNrZXQgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKG1hcC5kYXRhICsgNCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoY29kZWNfY29uZmlnLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChjb2RlY19jb25maWcpOwotICB9IGVsc2UgaWYgKHN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LWFjMyIpID09IDApIHsKLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfYWNfMzsKLQotICAgIC8qIEZpeGVkIHZhbHVlcyBhY2NvcmRpbmcgdG8gVFMgMTAyIDM2NiBidXQgaXQgYWxzbyBtZW50aW9ucyB0aGF0Ci0gICAgICogdGhleSBzaG91bGQgYmUgaWdub3JlZCAqLwotICAgIGVudHJ5LmNoYW5uZWxzID0gMjsKLSAgICBlbnRyeS5zYW1wbGVfc2l6ZSA9IDE2OwotCi0gICAgLyogQUMtMyBuZWVkcyBhbiBleHRlbnNpb24gYXRvbSBidXQgaXRzIGRhdGEgY2FuIG9ubHkgYmUgb2J0YWluZWQgZnJvbQotICAgICAqIHRoZSBzdHJlYW0gaXRzZWxmLiBBYnVzZSB0aGUgcHJlcGFyZV9idWZfZnVuYyBzbyB3ZSBwYXJzZSBhIGZyYW1lCi0gICAgICogYW5kIGdldCB0aGUgbmVlZGVkIGRhdGEgKi8KLSAgICBxdHBhZC0+cHJlcGFyZV9idWZfZnVuYyA9IGdzdF9xdF9tdXhfcHJlcGFyZV9wYXJzZV9hYzNfZnJhbWU7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtb3B1cyIpID09IDApIHsKLSAgICAvKiBCYXNlZCBvbiB0aGUgc3BlY2lmaWNhdGlvbiBkZWZpbmVkIGluOgotICAgICAqIGh0dHBzOi8vd3d3Lm9wdXMtY29kZWMub3JnL2RvY3Mvb3B1c19pbl9pc29ibWZmLmh0bWwgKi8KLSAgICBndWludDggY2hhbm5lbHMsIG1hcHBpbmdfZmFtaWx5LCBzdHJlYW1fY291bnQsIGNvdXBsZWRfY291bnQ7Ci0gICAgZ3VpbnQxNiBwcmVfc2tpcDsKLSAgICBnaW50MTYgb3V0cHV0X2dhaW47Ci0gICAgZ3VpbnQzMiByYXRlOwotICAgIGd1aW50OCBjaGFubmVsX21hcHBpbmdbMjU2XTsKLSAgICBjb25zdCBHVmFsdWUgKnN0cmVhbWhlYWRlcjsKLSAgICBjb25zdCBHVmFsdWUgKmZpcnN0X2VsZW1lbnQ7Ci0gICAgR3N0QnVmZmVyICpoZWFkZXI7Ci0KLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0Nfb3B1czsKLSAgICBlbnRyeS5zYW1wbGVfc2l6ZSA9IDE2OwotCi0gICAgc3RyZWFtaGVhZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInN0cmVhbWhlYWRlciIpOwotICAgIGlmIChzdHJlYW1oZWFkZXIgJiYgR1NUX1ZBTFVFX0hPTERTX0FSUkFZIChzdHJlYW1oZWFkZXIpICYmCi0gICAgICAgIGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3RyZWFtaGVhZGVyKSAhPSAwKSB7Ci0gICAgICBmaXJzdF9lbGVtZW50ID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoc3RyZWFtaGVhZGVyLCAwKTsKLSAgICAgIGhlYWRlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChmaXJzdF9lbGVtZW50KTsKLSAgICAgIGlmICghZ3N0X2NvZGVjX3V0aWxzX29wdXNfcGFyc2VfaGVhZGVyIChoZWFkZXIsICZyYXRlLCAmY2hhbm5lbHMsCi0gICAgICAgICAgICAgICZtYXBwaW5nX2ZhbWlseSwgJnN0cmVhbV9jb3VudCwgJmNvdXBsZWRfY291bnQsIGNoYW5uZWxfbWFwcGluZywKLSAgICAgICAgICAgICAgJnByZV9za2lwLCAmb3V0cHV0X2dhaW4pKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0bXV4LCAiSW5jb21wbGV0ZSBPcHVzSGVhZCIpOwotICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LAotICAgICAgICAgICJubyBzdHJlYW1oZWFkZXIgZmllbGQgaW4gY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgICAgIGlmICghZ3N0X2NvZGVjX3V0aWxzX29wdXNfcGFyc2VfY2FwcyAoY2FwcywgJnJhdGUsICZjaGFubmVscywKLSAgICAgICAgICAgICAgJm1hcHBpbmdfZmFtaWx5LCAmc3RyZWFtX2NvdW50LCAmY291cGxlZF9jb3VudCwKLSAgICAgICAgICAgICAgY2hhbm5lbF9tYXBwaW5nKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChxdG11eCwgIkluY29tcGxldGUgT3B1cyBjYXBzIik7Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgICB9Ci0gICAgICBwcmVfc2tpcCA9IDA7Ci0gICAgICBvdXRwdXRfZ2FpbiA9IDA7Ci0gICAgfQotCi0gICAgZW50cnkuY2hhbm5lbHMgPSBjaGFubmVsczsKLSAgICBleHRfYXRvbSA9IGJ1aWxkX29wdXNfZXh0ZW5zaW9uIChyYXRlLCBjaGFubmVscywgbWFwcGluZ19mYW1pbHksCi0gICAgICAgIHN0cmVhbV9jb3VudCwgY291cGxlZF9jb3VudCwgY2hhbm5lbF9tYXBwaW5nLCBwcmVfc2tpcCwgb3V0cHV0X2dhaW4pOwotICB9Ci0KLSAgaWYgKCFlbnRyeS5mb3VyY2MpCi0gICAgZ290byByZWZ1c2VfY2FwczsKLQotICAvKiBvaywgc2V0IHRoZSBwYWQgaW5mbyBhY2NvcmRpbmdseSAqLwotICBxdHBhZC0+Zm91cmNjID0gZW50cnkuZm91cmNjOwotICBxdHBhZC0+c2FtcGxlX3NpemUgPSBjb25zdGFudF9zaXplOwotICBxdHBhZC0+dHJha19zdGUgPQotICAgICAgKFNhbXBsZVRhYmxlRW50cnkgKikgYXRvbV90cmFrX3NldF9hdWRpb190eXBlIChxdHBhZC0+dHJhaywKLSAgICAgIHF0bXV4LT5jb250ZXh0LCAmZW50cnksCi0gICAgICBxdG11eC0+dHJha190aW1lc2NhbGUgPyBxdG11eC0+dHJha190aW1lc2NhbGUgOiBlbnRyeS5zYW1wbGVfcmF0ZSwKLSAgICAgIGV4dF9hdG9tLCBjb25zdGFudF9zaXplKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChxdG11eCk7Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotcmVmdXNlX2NhcHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAicGFkICVzIHJlZnVzZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgR1NUX1BBRF9OQU1FIChwYWQpLCBjYXBzKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChxdG11eCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1yZWZ1c2VfcmVuZWdvdGlhdGlvbjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsCi0gICAgICAgICJwYWQgJXMgcmVmdXNlZCByZW5lZ290aWF0aW9uIHRvICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBHU1RfUEFEX05BTUUgKHBhZCksIGNhcHMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHF0bXV4KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogc2NhbGUgcmF0ZSB1cCBvciBkb3duIGJ5IGZhY3RvciBvZiAxMCB0byBmaXQgaW50byBbMTAwMCwxMDAwMF0gaW50ZXJ2YWwgKi8KLXN0YXRpYyBndWludDMyCi1hZGp1c3RfcmF0ZSAoZ3VpbnQ2NCByYXRlKQotewotICBpZiAocmF0ZSA9PSAwKQotICAgIHJldHVybiAxMDAwMDsKLQotICB3aGlsZSAocmF0ZSA+PSAxMDAwMCkKLSAgICByYXRlIC89IDEwOwotCi0gIHdoaWxlIChyYXRlIDwgMTAwMCkKLSAgICByYXRlICo9IDEwOwotCi0gIHJldHVybiAoZ3VpbnQzMikgcmF0ZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRfbXV4X3ZpZGVvX3Npbmtfc2V0X2NhcHMgKEdzdFFUUGFkICogcXRwYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RQYWQgKnBhZCA9IHF0cGFkLT5jb2xsZWN0LnBhZDsKLSAgR3N0UVRNdXggKnF0bXV4ID0gR1NUX1FUX01VWF9DQVNUIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBHc3RRVE11eENsYXNzICpxdG11eF9rbGFzcyA9IChHc3RRVE11eENsYXNzICopIChHX09CSkVDVF9HRVRfQ0xBU1MgKHF0bXV4KSk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBnY2hhciAqbWltZXR5cGU7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodCwgZGVwdGggPSAtMTsKLSAgZ2ludCBmcmFtZXJhdGVfbnVtLCBmcmFtZXJhdGVfZGVuOwotICBndWludDMyIHJhdGU7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWUgPSBOVUxMOwotICBjb25zdCBHc3RCdWZmZXIgKmNvZGVjX2RhdGEgPSBOVUxMOwotICBWaXN1YWxTYW1wbGVFbnRyeSBlbnRyeSA9IHsgMCwgfTsKLSAgR3N0UVRNdXhGb3JtYXQgZm9ybWF0OwotICBBdG9tSW5mbyAqZXh0X2F0b20gPSBOVUxMOwotICBHTGlzdCAqZXh0X2F0b21fbGlzdCA9IE5VTEw7Ci0gIGdib29sZWFuIHN5bmMgPSBGQUxTRTsKLSAgaW50IHBhcl9udW0sIHBhcl9kZW47Ci0KLSAgcXRwYWQtPnByZXBhcmVfYnVmX2Z1bmMgPSBOVUxMOwotCi0gIC8qIGRvZXMgbm90IGdvIHdlbGwgdG8gcmVuZWdvdGlhdGUgc3RyZWFtIG1pZC13YXksIHVubGVzcwotICAgKiB0aGUgb2xkIGNhcHMgYXJlIGEgc3Vic2V0IG9mIHRoZSBuZXcgb25lICh0aGlzIG1lYW5zIHVwc3RyZWFtCi0gICAqIGFkZGVkIG1vcmUgaW5mbyB0byB0aGUgY2FwcywgYXMgYm90aCBzaG91bGQgYmUgJ2ZpeGVkJyBjYXBzKSAqLwotICBpZiAocXRwYWQtPmZvdXJjYykgewotICAgIEdzdENhcHMgKmN1cnJlbnRfY2FwczsKLQotICAgIGN1cnJlbnRfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgICBnX2Fzc2VydCAoY2FwcyAhPSBOVUxMKTsKLQotICAgIGlmICghZ3N0X3F0bXV4X2NhcHNfaXNfc3Vic2V0X2Z1bGwgKHF0bXV4LCBjdXJyZW50X2NhcHMsIGNhcHMpKSB7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY3VycmVudF9jYXBzKTsKLSAgICAgIGdvdG8gcmVmdXNlX3JlbmVnb3RpYXRpb247Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LAotICAgICAgICAicGFkICVzIGFjY2VwdGVkIHJlbmVnb3RpYXRpb24gdG8gJSIgR1NUX1BUUl9GT1JNQVQgIiBmcm9tICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBHU1RfUEFEX05BTUUgKHBhZCksIGNhcHMsIGN1cnJlbnRfY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGN1cnJlbnRfY2Fwcyk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIiVzOiVzLCBjYXBzPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBjYXBzKTsKLQotICBmb3JtYXQgPSBxdG11eF9rbGFzcy0+Zm9ybWF0OwotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgbWltZXR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOwotCi0gIC8qIHJlcXVpcmVkIHBhcnRzICovCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJ3aWR0aCIsICZ3aWR0aCkgfHwKLSAgICAgICFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpKQotICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0KLSAgLyogb3B0aW9uYWwgKi8KLSAgZGVwdGggPSAtMTsKLSAgLyogd29ya3MgYXMgYSBkZWZhdWx0IHRpbWViYXNlICovCi0gIGZyYW1lcmF0ZV9udW0gPSAxMDAwMDsKLSAgZnJhbWVyYXRlX2RlbiA9IDE7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAmZnJhbWVyYXRlX251bSwKLSAgICAgICZmcmFtZXJhdGVfZGVuKTsKLSAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJkZXB0aCIsICZkZXB0aCk7Ci0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvZGVjX2RhdGEiKTsKLSAgaWYgKHZhbHVlICE9IE5VTEwpCi0gICAgY29kZWNfZGF0YSA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0KLSAgcGFyX251bSA9IDE7Ci0gIHBhcl9kZW4gPSAxOwotICBnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgJnBhcl9udW0sCi0gICAgICAmcGFyX2Rlbik7Ci0KLSAgcXRwYWQtPmlzX291dF9vZl9vcmRlciA9IEZBTFNFOwotCi0gIC8qIGJyaW5nIGZyYW1lIG51bWVyYXRvciBpbnRvIGEgcmFuZ2UgdGhhdCBlbnN1cmVzIGJvdGggcmVhc29uYWJsZSByZXNvbHV0aW9uCi0gICAqIGFzIHdlbGwgYXMgYSBmYWlyIGR1cmF0aW9uICovCi0gIHJhdGUgPSBxdG11eC0+dHJha190aW1lc2NhbGUgPwotICAgICAgcXRtdXgtPnRyYWtfdGltZXNjYWxlIDogYWRqdXN0X3JhdGUgKGZyYW1lcmF0ZV9udW0pOwotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIlJhdGUgb2YgdmlkZW8gdHJhY2sgc2VsZWN0ZWQ6ICUiIEdfR1VJTlQzMl9GT1JNQVQsCi0gICAgICByYXRlKTsKLQotICAvKiBzZXQgY29tbW9uIHByb3BlcnRpZXMgKi8KLSAgZW50cnkud2lkdGggPSB3aWR0aDsKLSAgZW50cnkuaGVpZ2h0ID0gaGVpZ2h0OwotICBlbnRyeS5wYXJfbiA9IHBhcl9udW07Ci0gIGVudHJ5LnBhcl9kID0gcGFyX2RlbjsKLSAgLyogc2hvdWxkIGJlIE9LIGFjY29yZGluZyB0byBxdCBhbmQgaXNvIHNwZWMsIG92ZXJyaWRlIGlmIHJlYWxseSBuZWVkZWQgKi8KLSAgZW50cnkuY29sb3JfdGFibGVfaWQgPSAtMTsKLSAgZW50cnkuZnJhbWVfY291bnQgPSAxOwotICBlbnRyeS5kZXB0aCA9IDI0OwotCi0gIC8qIHN5bmMgZW50cmllcyBieSBkZWZhdWx0ICovCi0gIHN5bmMgPSBUUlVFOwotCi0gIC8qIG5vdyBtYXAgb250byBhIGZvdXJjYywgYW5kIHNvbWUgZXh0cmEgcHJvcGVydGllcyAqLwotICBpZiAoc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtcmF3IikgPT0gMCkgewotICAgIGNvbnN0IGdjaGFyICpmb3JtYXQ7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm10OwotICAgIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqdmluZm87Ci0KLSAgICBmb3JtYXQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImZvcm1hdCIpOwotICAgIGZtdCA9IGdzdF92aWRlb19mb3JtYXRfZnJvbV9zdHJpbmcgKGZvcm1hdCk7Ci0gICAgdmluZm8gPSBnc3RfdmlkZW9fZm9ybWF0X2dldF9pbmZvIChmbXQpOwotCi0gICAgc3dpdGNoIChmbXQpIHsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgICBpZiAoZGVwdGggPT0gLTEpCi0gICAgICAgICAgZGVwdGggPSAyNDsKLSAgICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDXzJ2dXk7Ci0gICAgICAgIGVudHJ5LmRlcHRoID0gZGVwdGg7Ci0gICAgICAgIHN5bmMgPSBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfdjIxMDoKLSAgICAgICAgaWYgKGRlcHRoID09IC0xKQotICAgICAgICAgIGRlcHRoID0gMjQ7Ci0gICAgICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ192MjEwOwotICAgICAgICBlbnRyeS5kZXB0aCA9IGRlcHRoOwotICAgICAgICBzeW5jID0gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKEdTVF9WSURFT19GT1JNQVRfSU5GT19GTEFHUyAodmluZm8pICYgR1NUX1ZJREVPX0ZPUk1BVF9GTEFHX1JHQikgewotICAgICAgICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ19yYXdfOwotICAgICAgICAgIGVudHJ5LmRlcHRoID0gR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1BTVFJJREUgKHZpbmZvLCAwKSAqIDg7Ci0gICAgICAgICAgc3luYyA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1oMjYzIikgPT0gMCkgewotICAgIGV4dF9hdG9tID0gTlVMTDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9RVF9NVVhfRk9STUFUX1FUKQotICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX2gyNjM7Ci0gICAgZWxzZQotICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX3MyNjM7Ci0gICAgZXh0X2F0b20gPSBidWlsZF9oMjYzX2V4dGVuc2lvbiAoKTsKLSAgICBpZiAoZXh0X2F0b20gIT0gTlVMTCkKLSAgICAgIGV4dF9hdG9tX2xpc3QgPSBnX2xpc3RfcHJlcGVuZCAoZXh0X2F0b21fbGlzdCwgZXh0X2F0b20pOwotICB9IGVsc2UgaWYgKHN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWRpdngiKSA9PSAwIHx8Ci0gICAgICBzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8vbXBlZyIpID09IDApIHsKLSAgICBnaW50IHZlcnNpb24gPSAwOwotCi0gICAgaWYgKHN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWRpdngiKSA9PSAwKSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImRpdnh2ZXJzaW9uIiwgJnZlcnNpb24pOwotICAgICAgdmVyc2lvbiA9IHZlcnNpb24gPT0gNSA/IDEgOiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIm1wZWd2ZXJzaW9uIiwgJnZlcnNpb24pOwotICAgICAgdmVyc2lvbiA9IHZlcnNpb24gPT0gNCA/IDEgOiAwOwotICAgIH0KLSAgICBpZiAodmVyc2lvbikgewotICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX21wNHY7Ci0gICAgICBleHRfYXRvbSA9Ci0gICAgICAgICAgYnVpbGRfZXNkc19leHRlbnNpb24gKHF0cGFkLT50cmFrLCBFU0RTX09CSkVDVF9UWVBFX01QRUc0X1AyLAotICAgICAgICAgIEVTRFNfU1RSRUFNX1RZUEVfVklTVUFMLCBjb2RlY19kYXRhLCBxdHBhZC0+YXZnX2JpdHJhdGUsCi0gICAgICAgICAgcXRwYWQtPm1heF9iaXRyYXRlKTsKLSAgICAgIGlmIChleHRfYXRvbSAhPSBOVUxMKQotICAgICAgICBleHRfYXRvbV9saXN0ID0gZ19saXN0X3ByZXBlbmQgKGV4dF9hdG9tX2xpc3QsIGV4dF9hdG9tKTsKLSAgICAgIGlmICghY29kZWNfZGF0YSkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgIm5vIGNvZGVjX2RhdGEgZm9yIE1QRUc0IHZpZGVvOyAiCi0gICAgICAgICAgICAib3V0cHV0IG1pZ2h0IG5vdCBwbGF5IGluIEFwcGxlIFF1aWNrVGltZSAodHJ5IGdsb2JhbC1oZWFkZXJzPykiKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtaDI2NCIpID09IDApIHsKLSAgICAvKiBjaGVjayBpZiB3ZSBhY2NlcHQgdGhlc2UgY2FwcyAqLwotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCAic3RyZWFtLWZvcm1hdCIpKSB7Ci0gICAgICBjb25zdCBnY2hhciAqZm9ybWF0OwotICAgICAgY29uc3QgZ2NoYXIgKmFsaWdubWVudDsKLQotICAgICAgZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzdHJlYW0tZm9ybWF0Iik7Ci0gICAgICBhbGlnbm1lbnQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImFsaWdubWVudCIpOwotCi0gICAgICBpZiAoc3RyY21wIChmb3JtYXQsICJhdmMiKSAhPSAwIHx8IGFsaWdubWVudCA9PSBOVUxMIHx8Ci0gICAgICAgICAgc3RyY21wIChhbGlnbm1lbnQsICJhdSIpICE9IDApIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgIlJlamVjdGluZyBoMjY0IGNhcHMsIHF0bXV4IG9ubHkgYWNjZXB0cyAiCi0gICAgICAgICAgICAiYXZjIGZvcm1hdCB3aXRoIEFVIGFsaWduZWQgc2FtcGxlcyIpOwotICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAibm8gc3RyZWFtLWZvcm1hdCBmaWVsZCBpbiBoMjY0IGNhcHMiKTsKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotCi0gICAgaWYgKCFjb2RlY19kYXRhKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAibm8gY29kZWNfZGF0YSBpbiBoMjY0IGNhcHMiKTsKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotCi0gICAgZW50cnkuZm91cmNjID0gRk9VUkNDX2F2YzE7Ci0gICAgaWYgKHF0cGFkLT5hdmdfYml0cmF0ZSA9PSAwKSB7Ci0gICAgICBnaW50IGF2Z19iaXRyYXRlID0gMDsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiYml0cmF0ZSIsICZhdmdfYml0cmF0ZSk7Ci0gICAgICBxdHBhZC0+YXZnX2JpdHJhdGUgPSBhdmdfYml0cmF0ZTsKLSAgICB9Ci0gICAgZXh0X2F0b20gPSBidWlsZF9idHJ0X2V4dGVuc2lvbiAoMCwgcXRwYWQtPmF2Z19iaXRyYXRlLCBxdHBhZC0+bWF4X2JpdHJhdGUpOwotICAgIGlmIChleHRfYXRvbSAhPSBOVUxMKQotICAgICAgZXh0X2F0b21fbGlzdCA9IGdfbGlzdF9wcmVwZW5kIChleHRfYXRvbV9saXN0LCBleHRfYXRvbSk7Ci0gICAgZXh0X2F0b20gPSBidWlsZF9jb2RlY19kYXRhX2V4dGVuc2lvbiAoRk9VUkNDX2F2Y0MsIGNvZGVjX2RhdGEpOwotICAgIGlmIChleHRfYXRvbSAhPSBOVUxMKQotICAgICAgZXh0X2F0b21fbGlzdCA9IGdfbGlzdF9wcmVwZW5kIChleHRfYXRvbV9saXN0LCBleHRfYXRvbSk7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtc3ZxIikgPT0gMCkgewotICAgIGdpbnQgdmVyc2lvbiA9IDA7Ci0gICAgY29uc3QgR3N0QnVmZmVyICpzZXFoID0gTlVMTDsKLSAgICBjb25zdCBHVmFsdWUgKnNlcWhfdmFsdWU7Ci0gICAgZ2RvdWJsZSBnYW1tYSA9IDA7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInN2cXZlcnNpb24iLCAmdmVyc2lvbik7Ci0gICAgaWYgKHZlcnNpb24gPT0gMykgewotICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX1NWUTM7Ci0gICAgICBlbnRyeS52ZXJzaW9uID0gMzsKLSAgICAgIGVudHJ5LmRlcHRoID0gMzI7Ci0KLSAgICAgIHNlcWhfdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAic2VxaCIpOwotICAgICAgaWYgKHNlcWhfdmFsdWUpIHsKLSAgICAgICAgc2VxaCA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChzZXFoX3ZhbHVlKTsKLSAgICAgICAgZXh0X2F0b20gPSBidWlsZF9TTUlfYXRvbSAoc2VxaCk7Ci0gICAgICAgIGlmIChleHRfYXRvbSkKLSAgICAgICAgICBleHRfYXRvbV9saXN0ID0gZ19saXN0X3ByZXBlbmQgKGV4dF9hdG9tX2xpc3QsIGV4dF9hdG9tKTsKLSAgICAgIH0KLQotICAgICAgLyogd2UgbmVlZCB0byBhZGQgdGhlIGdhbW1hIGFueXdheSBiZWNhdXNlIHF1aWNrdGltZSBtaWdodCBjcmFzaAotICAgICAgICogd2hlbiBpdCBkb2Vzbid0IGZpbmQgaXQgKi8KLSAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlIChzdHJ1Y3R1cmUsICJhcHBsaWVkLWdhbW1hIiwgJmdhbW1hKSkgewotICAgICAgICAvKiBpdCBzZWVtcyB0aGF0IHVzaW5nIDAgaGVyZSBtYWtlcyBpdCBpZ25vcmVkICovCi0gICAgICAgIGdhbW1hID0gMC4wOwotICAgICAgfQotICAgICAgZXh0X2F0b20gPSBidWlsZF9nYW1hX2F0b20gKGdhbW1hKTsKLSAgICAgIGlmIChleHRfYXRvbSkKLSAgICAgICAgZXh0X2F0b21fbGlzdCA9IGdfbGlzdF9wcmVwZW5kIChleHRfYXRvbV9saXN0LCBleHRfYXRvbSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJTVlEgdmVyc2lvbiAlZCBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgZmlsZSAiCi0gICAgICAgICAgImEgYnVnIGF0IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciLCB2ZXJzaW9uKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtZHYiKSA9PSAwKSB7Ci0gICAgZ2ludCB2ZXJzaW9uID0gMDsKLSAgICBnYm9vbGVhbiBwYWwgPSBUUlVFOwotCi0gICAgc3luYyA9IEZBTFNFOwotICAgIGlmIChmcmFtZXJhdGVfbnVtICE9IDI1IHx8IGZyYW1lcmF0ZV9kZW4gIT0gMSkKLSAgICAgIHBhbCA9IEZBTFNFOwotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiZHZ2ZXJzaW9uIiwgJnZlcnNpb24pOwotICAgIC8qIGZhbGwgYmFjayB0byB0eXBpY2FsIG9uZSAqLwotICAgIGlmICghdmVyc2lvbikKLSAgICAgIHZlcnNpb24gPSAyNTsKLSAgICBzd2l0Y2ggKHZlcnNpb24pIHsKLSAgICAgIGNhc2UgMjU6Ci0gICAgICAgIGlmIChwYWwpCi0gICAgICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX2R2Y3A7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfZHZjXzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDUwOgotICAgICAgICBpZiAocGFsKQotICAgICAgICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ19kdjVwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX2R2NW47Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwgInVucmVjb2duaXplZCBkdiB2ZXJzaW9uIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAiaW1hZ2UvanBlZyIpID09IDApIHsKLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfanBlZzsKLSAgICBzeW5jID0gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgImltYWdlL3gtajJjIikgPT0gMCB8fAotICAgICAgc3RyY21wIChtaW1ldHlwZSwgImltYWdlL3gtanBjIikgPT0gMCkgewotICAgIGNvbnN0IGdjaGFyICpjb2xvcnNwYWNlOwotICAgIGNvbnN0IEdWYWx1ZSAqY21hcF9hcnJheTsKLSAgICBjb25zdCBHVmFsdWUgKmNkZWZfYXJyYXk7Ci0gICAgZ2ludCBuY29tcCA9IDA7Ci0gICAgZ2ludCBmaWVsZHMgPSAxOwotCi0gICAgaWYgKHN0cmNtcCAobWltZXR5cGUsICJpbWFnZS94LWpwYyIpID09IDApIHsKLSAgICAgIHF0cGFkLT5wcmVwYXJlX2J1Zl9mdW5jID0gZ3N0X3F0X211eF9wcmVwYXJlX2pwY19idWZmZXI7Ci0gICAgfQotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJudW0tY29tcG9uZW50cyIsICZuY29tcCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJmaWVsZHMiLCAmZmllbGRzKTsKLSAgICBjbWFwX2FycmF5ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvbXBvbmVudC1tYXAiKTsKLSAgICBjZGVmX2FycmF5ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNoYW5uZWwtZGVmaW5pdGlvbnMiKTsKLQotICAgIGV4dF9hdG9tID0gTlVMTDsKLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfbWpwMjsKLSAgICBzeW5jID0gRkFMU0U7Ci0KLSAgICBjb2xvcnNwYWNlID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJjb2xvcnNwYWNlIik7Ci0gICAgaWYgKGNvbG9yc3BhY2UgJiYKLSAgICAgICAgKGV4dF9hdG9tID0KLSAgICAgICAgICAgIGJ1aWxkX2pwMmhfZXh0ZW5zaW9uICh3aWR0aCwgaGVpZ2h0LCBjb2xvcnNwYWNlLCBuY29tcCwgY21hcF9hcnJheSwKLSAgICAgICAgICAgICAgICBjZGVmX2FycmF5KSkgIT0gTlVMTCkgewotICAgICAgZXh0X2F0b21fbGlzdCA9IGdfbGlzdF9hcHBlbmQgKGV4dF9hdG9tX2xpc3QsIGV4dF9hdG9tKTsKLQotICAgICAgZXh0X2F0b20gPSBidWlsZF9maWVsX2V4dGVuc2lvbiAoZmllbGRzKTsKLSAgICAgIGlmIChleHRfYXRvbSkKLSAgICAgICAgZXh0X2F0b21fbGlzdCA9IGdfbGlzdF9hcHBlbmQgKGV4dF9hdG9tX2xpc3QsIGV4dF9hdG9tKTsKLQotICAgICAgZXh0X2F0b20gPSBidWlsZF9qcDJ4X2V4dGVuc2lvbiAoY29kZWNfZGF0YSk7Ci0gICAgICBpZiAoZXh0X2F0b20pCi0gICAgICAgIGV4dF9hdG9tX2xpc3QgPSBnX2xpc3RfYXBwZW5kIChleHRfYXRvbV9saXN0LCBleHRfYXRvbSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAibWlzc2luZyBvciBpbnZhbGlkIGZvdXJjYyBpbiBqcDIgY2FwcyIpOwotICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtdnA4IikgPT0gMCkgewotICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ19WUDgwOwotICAgIHN5bmMgPSBGQUxTRTsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1kaXJhYyIpID09IDApIHsKLSAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfZHJhYzsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1xdC1wYXJ0IikgPT0gMCkgewotICAgIGd1aW50MzIgZm91cmNjOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoc3RydWN0dXJlLCAiZm9ybWF0IiwgJmZvdXJjYyk7Ci0gICAgZW50cnkuZm91cmNjID0gZm91cmNjOwotICB9IGVsc2UgaWYgKHN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LW1wNC1wYXJ0IikgPT0gMCkgewotICAgIGd1aW50MzIgZm91cmNjOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoc3RydWN0dXJlLCAiZm9ybWF0IiwgJmZvdXJjYyk7Ci0gICAgZW50cnkuZm91cmNjID0gZm91cmNjOwotICB9IGVsc2UgaWYgKHN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LXByb3JlcyIpID09IDApIHsKLSAgICBjb25zdCBnY2hhciAqdmFyaWFudDsKLQotICAgIHZhcmlhbnQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgInZhcmlhbnQiKTsKLSAgICBpZiAoIXZhcmlhbnQgfHwgIWdfc3RyY21wMCAodmFyaWFudCwgInN0YW5kYXJkIikpCi0gICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfYXBjbjsKLSAgICBlbHNlIGlmICghZ19zdHJjbXAwICh2YXJpYW50LCAibHQiKSkKLSAgICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ19hcGNzOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKHZhcmlhbnQsICJocSIpKQotICAgICAgZW50cnkuZm91cmNjID0gRk9VUkNDX2FwY2g7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMCAodmFyaWFudCwgInByb3h5IikpCi0gICAgICBlbnRyeS5mb3VyY2MgPSBGT1VSQ0NfYXBjbzsKLSAgfQotCi0gIGlmICghZW50cnkuZm91cmNjKQotICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0KLSAgLyogb2ssIHNldCB0aGUgcGFkIGluZm8gYWNjb3JkaW5nbHkgKi8KLSAgcXRwYWQtPmZvdXJjYyA9IGVudHJ5LmZvdXJjYzsKLSAgcXRwYWQtPnN5bmMgPSBzeW5jOwotICBxdHBhZC0+dHJha19zdGUgPQotICAgICAgKFNhbXBsZVRhYmxlRW50cnkgKikgYXRvbV90cmFrX3NldF92aWRlb190eXBlIChxdHBhZC0+dHJhaywKLSAgICAgIHF0bXV4LT5jb250ZXh0LCAmZW50cnksIHJhdGUsIGV4dF9hdG9tX2xpc3QpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHF0bXV4KTsKLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1yZWZ1c2VfY2FwczoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJwYWQgJXMgcmVmdXNlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBHU1RfUEFEX05BTUUgKHBhZCksIGNhcHMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHF0bXV4KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXJlZnVzZV9yZW5lZ290aWF0aW9uOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdG11eCwKLSAgICAgICAgInBhZCAlcyByZWZ1c2VkIHJlbmVnb3RpYXRpb24gdG8gJSIgR1NUX1BUUl9GT1JNQVQsIEdTVF9QQURfTkFNRSAocGFkKSwKLSAgICAgICAgY2Fwcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocXRtdXgpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdF9tdXhfc3VidGl0bGVfc2lua19zZXRfY2FwcyAoR3N0UVRQYWQgKiBxdHBhZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFBhZCAqcGFkID0gcXRwYWQtPmNvbGxlY3QucGFkOwotICBHc3RRVE11eCAqcXRtdXggPSBHU1RfUVRfTVVYX0NBU1QgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBTdWJ0aXRsZVNhbXBsZUVudHJ5IGVudHJ5ID0geyAwLCB9OwotCi0gIC8qIGRvZXMgbm90IGdvIHdlbGwgdG8gcmVuZWdvdGlhdGUgc3RyZWFtIG1pZC13YXksIHVubGVzcwotICAgKiB0aGUgb2xkIGNhcHMgYXJlIGEgc3Vic2V0IG9mIHRoZSBuZXcgb25lICh0aGlzIG1lYW5zIHVwc3RyZWFtCi0gICAqIGFkZGVkIG1vcmUgaW5mbyB0byB0aGUgY2FwcywgYXMgYm90aCBzaG91bGQgYmUgJ2ZpeGVkJyBjYXBzKSAqLwotICBpZiAocXRwYWQtPmZvdXJjYykgewotICAgIEdzdENhcHMgKmN1cnJlbnRfY2FwczsKLQotICAgIGN1cnJlbnRfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgICBnX2Fzc2VydCAoY2FwcyAhPSBOVUxMKTsKLQotICAgIGlmICghZ3N0X3F0bXV4X2NhcHNfaXNfc3Vic2V0X2Z1bGwgKHF0bXV4LCBjdXJyZW50X2NhcHMsIGNhcHMpKSB7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY3VycmVudF9jYXBzKTsKLSAgICAgIGdvdG8gcmVmdXNlX3JlbmVnb3RpYXRpb247Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LAotICAgICAgICAicGFkICVzIGFjY2VwdGVkIHJlbmVnb3RpYXRpb24gdG8gJSIgR1NUX1BUUl9GT1JNQVQgIiBmcm9tICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBHU1RfUEFEX05BTUUgKHBhZCksIGNhcHMsIGN1cnJlbnRfY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGN1cnJlbnRfY2Fwcyk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdG11eCwgIiVzOiVzLCBjYXBzPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBjYXBzKTsKLQotICAvKiBzdWJ0aXRsZXMgZGVmYXVsdCAqLwotICBzdWJ0aXRsZV9zYW1wbGVfZW50cnlfaW5pdCAoJmVudHJ5KTsKLSAgcXRwYWQtPmlzX291dF9vZl9vcmRlciA9IEZBTFNFOwotICBxdHBhZC0+c3luYyA9IEZBTFNFOwotICBxdHBhZC0+c3BhcnNlID0gVFJVRTsKLSAgcXRwYWQtPnByZXBhcmVfYnVmX2Z1bmMgPSBOVUxMOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJ0ZXh0L3gtcmF3IikpIHsKLSAgICBjb25zdCBnY2hhciAqZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJmb3JtYXQiKTsKLSAgICBpZiAoZm9ybWF0ICYmIHN0cmNtcCAoZm9ybWF0LCAidXRmOCIpID09IDApIHsKLSAgICAgIGVudHJ5LmZvdXJjYyA9IEZPVVJDQ190eDNnOwotICAgICAgcXRwYWQtPnByZXBhcmVfYnVmX2Z1bmMgPSBnc3RfcXRfbXV4X3ByZXBhcmVfdHgzZ19idWZmZXI7Ci0gICAgICBxdHBhZC0+Y3JlYXRlX2VtcHR5X2J1ZmZlciA9IGdzdF9xdF9tdXhfY3JlYXRlX2VtcHR5X3R4M2dfYnVmZmVyOwotICAgIH0KLSAgfQotCi0gIGlmICghZW50cnkuZm91cmNjKQotICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0KLSAgcXRwYWQtPmZvdXJjYyA9IGVudHJ5LmZvdXJjYzsKLSAgcXRwYWQtPnRyYWtfc3RlID0KLSAgICAgIChTYW1wbGVUYWJsZUVudHJ5ICopIGF0b21fdHJha19zZXRfc3VidGl0bGVfdHlwZSAocXRwYWQtPnRyYWssCi0gICAgICBxdG11eC0+Y29udGV4dCwgJmVudHJ5KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChxdG11eCk7Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotcmVmdXNlX2NhcHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAicGFkICVzIHJlZnVzZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgR1NUX1BBRF9OQU1FIChwYWQpLCBjYXBzKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChxdG11eCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1yZWZ1c2VfcmVuZWdvdGlhdGlvbjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsCi0gICAgICAgICJwYWQgJXMgcmVmdXNlZCByZW5lZ290aWF0aW9uIHRvICUiIEdTVF9QVFJfRk9STUFULCBHU1RfUEFEX05BTUUgKHBhZCksCi0gICAgICAgIGNhcHMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHF0bXV4KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRfbXV4X3NpbmtfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0Q29sbGVjdERhdGEgKiBkYXRhLAotICAgIEdzdEV2ZW50ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UVRNdXggKnF0bXV4OwotICBndWludDMyIGF2Z19iaXRyYXRlID0gMCwgbWF4X2JpdHJhdGUgPSAwOwotICBHc3RQYWQgKnBhZCA9IGRhdGEtPnBhZDsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBxdG11eCA9IEdTVF9RVF9NVVhfQ0FTVCAodXNlcl9kYXRhKTsKLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotICAgICAgR3N0UVRQYWQgKmNvbGxlY3RfcGFkOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLQotICAgICAgLyogZmluZCBzdHJlYW0gZGF0YSAqLwotICAgICAgY29sbGVjdF9wYWQgPSAoR3N0UVRQYWQgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICAgICAgZ19hc3NlcnQgKGNvbGxlY3RfcGFkKTsKLSAgICAgIGdfYXNzZXJ0IChjb2xsZWN0X3BhZC0+c2V0X2NhcHMpOwotCi0gICAgICByZXQgPSBjb2xsZWN0X3BhZC0+c2V0X2NhcHMgKGNvbGxlY3RfcGFkLCBjYXBzKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzp7Ci0gICAgICBHc3RUYWdMaXN0ICpsaXN0OwotICAgICAgR3N0VGFnU2V0dGVyICpzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAocXRtdXgpOwotICAgICAgR3N0VGFnTWVyZ2VNb2RlIG1vZGU7Ci0gICAgICBnY2hhciAqY29kZTsKLSAgICAgIEdzdFFUUGFkICpjb2xsZWN0X3BhZDsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChxdG11eCk7Ci0gICAgICBtb2RlID0gZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChzZXR0ZXIpOwotICAgICAgY29sbGVjdF9wYWQgPSAoR3N0UVRQYWQgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJmxpc3QpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRtdXgsICJyZWNlaXZlZCB0YWcgZXZlbnQgb24gcGFkICVzOiVzIDogJSIKLSAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBsaXN0KTsKLQotICAgICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfc2NvcGUgKGxpc3QpID09IEdTVF9UQUdfU0NPUEVfR0xPQkFMKSB7Ci0gICAgICAgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgbGlzdCwgbW9kZSk7Ci0gICAgICAgIHF0bXV4LT50YWdzX2NoYW5nZWQgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb2xsZWN0X3BhZC0+dGFncykKLSAgICAgICAgICBjb2xsZWN0X3BhZC0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKGNvbGxlY3RfcGFkLT50YWdzLCBsaXN0LCBtb2RlKTsKLSAgICAgICAgY29sbGVjdF9wYWQtPnRhZ3NfY2hhbmdlZCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtdXgpOwotCi0gICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF91aW50IChsaXN0LCBHU1RfVEFHX0JJVFJBVEUsICZhdmdfYml0cmF0ZSkgfAotICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdWludCAobGlzdCwgR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUsICZtYXhfYml0cmF0ZSkpIHsKLSAgICAgICAgR3N0UVRQYWQgKnF0cGFkID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICAgICAgICBnX2Fzc2VydCAocXRwYWQpOwotCi0gICAgICAgIGlmIChhdmdfYml0cmF0ZSA+IDAgJiYgYXZnX2JpdHJhdGUgPCBHX01BWFVJTlQzMikKLSAgICAgICAgICBxdHBhZC0+YXZnX2JpdHJhdGUgPSBhdmdfYml0cmF0ZTsKLSAgICAgICAgaWYgKG1heF9iaXRyYXRlID4gMCAmJiBtYXhfYml0cmF0ZSA8IEdfTUFYVUlOVDMyKQotICAgICAgICAgIHF0cGFkLT5tYXhfYml0cmF0ZSA9IG1heF9iaXRyYXRlOwotICAgICAgfQotCi0gICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSwgJmNvZGUpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlzb19jb2RlID0gZ3N0X3RhZ19nZXRfbGFuZ3VhZ2VfY29kZV9pc29fNjM5XzJUIChjb2RlKTsKLSAgICAgICAgaWYgKGlzb19jb2RlKSB7Ci0gICAgICAgICAgR3N0UVRQYWQgKnF0cGFkID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICAgICAgICAgIGdfYXNzZXJ0IChxdHBhZCk7Ci0gICAgICAgICAgaWYgKHF0cGFkLT50cmFrKSB7Ci0gICAgICAgICAgICAvKiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvI2RvY3VtZW50YXRpb24vUXVpY2tUaW1lL1FURkYvUVRGRkNoYXA0L3F0ZmY0Lmh0bWwgKi8KLSAgICAgICAgICAgIHF0cGFkLT50cmFrLT5tZGlhLm1kaGQubGFuZ3VhZ2VfY29kZSA9Ci0gICAgICAgICAgICAgICAgKGlzb19jb2RlWzBdIC0gMHg2MCkgKiAweDQwMCArIChpc29fY29kZVsxXSAtIDB4NjApICogMHgyMCArCi0gICAgICAgICAgICAgICAgKGlzb19jb2RlWzJdIC0gMHg2MCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGdfZnJlZSAoY29kZSk7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZXZlbnQgIT0gTlVMTCkKLSAgICByZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0IChwYWRzLCBkYXRhLCBldmVudCwgRkFMU0UpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RRVE11eCAqbXV4ID0gR1NUX1FUX01VWF9DQVNUIChlbGVtZW50KTsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJSZWxlYXNpbmcgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGZvciAod2FsayA9IG11eC0+c2lua3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UVRQYWQgKnF0cGFkID0gKEdzdFFUUGFkICopIHdhbGstPmRhdGE7Ci0gICAgR1NUX0RFQlVHICgiQ2hlY2tpbmcgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHF0cGFkLT5jb2xsZWN0LnBhZCkpOwotICAgIGlmIChxdHBhZC0+Y29sbGVjdC5wYWQgPT0gcGFkKSB7Ci0gICAgICAvKiB0aGlzIGlzIGl0LCByZW1vdmUgKi8KLSAgICAgIG11eC0+c2lua3BhZHMgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChtdXgtPnNpbmtwYWRzLCB3YWxrKTsKLSAgICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBnc3RfY29sbGVjdF9wYWRzX3JlbW92ZV9wYWQgKG11eC0+Y29sbGVjdCwgcGFkKTsKLQotICBpZiAobXV4LT5zaW5rcGFkcyA9PSBOVUxMKSB7Ci0gICAgLyogTm8gbW9yZSBvdXRzdGFuZGluZyByZXF1ZXN0IHBhZHMsIHJlc2V0IG91ciBjb3VudGVycyAqLwotICAgIG11eC0+dmlkZW9fcGFkcyA9IDA7Ci0gICAgbXV4LT5hdWRpb19wYWRzID0gMDsKLSAgICBtdXgtPnN1YnRpdGxlX3BhZHMgPSAwOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X3F0X211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogcmVxX25hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgR3N0UVRNdXggKnF0bXV4ID0gR1NUX1FUX01VWF9DQVNUIChlbGVtZW50KTsKLSAgR3N0UVRQYWQgKmNvbGxlY3RfcGFkOwotICBHc3RQYWQgKm5ld3BhZDsKLSAgR3N0UVRQYWRTZXRDYXBzRnVuYyBzZXRjYXBzX2Z1bmM7Ci0gIGdjaGFyICpuYW1lOwotICBnaW50IHBhZF9pZDsKLSAgZ2Jvb2xlYW4gbG9jayA9IFRSVUU7Ci0KLSAgaWYgKHRlbXBsLT5kaXJlY3Rpb24gIT0gR1NUX1BBRF9TSU5LKQotICAgIGdvdG8gd3JvbmdfZGlyZWN0aW9uOwotCi0gIGlmIChxdG11eC0+c3RhdGUgPiBHU1RfUVRfTVVYX1NUQVRFX1NUQVJURUQpCi0gICAgZ290byB0b29fbGF0ZTsKLQotICBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJhdWRpb18ldSIpKSB7Ci0gICAgc2V0Y2Fwc19mdW5jID0gZ3N0X3F0X211eF9hdWRpb19zaW5rX3NldF9jYXBzOwotICAgIGlmIChyZXFfbmFtZSAhPSBOVUxMICYmIHNzY2FuZiAocmVxX25hbWUsICJhdWRpb18ldSIsICZwYWRfaWQpID09IDEpIHsKLSAgICAgIG5hbWUgPSBnX3N0cmR1cCAocmVxX25hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiYXVkaW9fJXUiLCBxdG11eC0+YXVkaW9fcGFkcysrKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJ2aWRlb18ldSIpKSB7Ci0gICAgc2V0Y2Fwc19mdW5jID0gZ3N0X3F0X211eF92aWRlb19zaW5rX3NldF9jYXBzOwotICAgIGlmIChyZXFfbmFtZSAhPSBOVUxMICYmIHNzY2FuZiAocmVxX25hbWUsICJ2aWRlb18ldSIsICZwYWRfaWQpID09IDEpIHsKLSAgICAgIG5hbWUgPSBnX3N0cmR1cCAocmVxX25hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgidmlkZW9fJXUiLCBxdG11eC0+dmlkZW9fcGFkcysrKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzdWJ0aXRsZV8ldSIpKSB7Ci0gICAgc2V0Y2Fwc19mdW5jID0gZ3N0X3F0X211eF9zdWJ0aXRsZV9zaW5rX3NldF9jYXBzOwotICAgIGlmIChyZXFfbmFtZSAhPSBOVUxMICYmIHNzY2FuZiAocmVxX25hbWUsICJzdWJ0aXRsZV8ldSIsICZwYWRfaWQpID09IDEpIHsKLSAgICAgIG5hbWUgPSBnX3N0cmR1cCAocmVxX25hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3VidGl0bGVfJXUiLCBxdG11eC0+c3VidGl0bGVfcGFkcysrKTsKLSAgICB9Ci0gICAgbG9jayA9IEZBTFNFOwotICB9IGVsc2UKLSAgICBnb3RvIHdyb25nX3RlbXBsYXRlOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0bXV4LCAiUmVxdWVzdGVkIHBhZDogJXMiLCBuYW1lKTsKLQotICAvKiBjcmVhdGUgcGFkIGFuZCBhZGQgdG8gY29sbGVjdGlvbnMgKi8KLSAgbmV3cGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotICBjb2xsZWN0X3BhZCA9IChHc3RRVFBhZCAqKQotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChxdG11eC0+Y29sbGVjdCwgbmV3cGFkLCBzaXplb2YgKEdzdFFUUGFkKSwKLSAgICAgIChHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkpIChnc3RfcXRfbXV4X3BhZF9yZXNldCksIGxvY2spOwotICAvKiBzZXQgdXAgcGFkICovCi0gIGdzdF9xdF9tdXhfcGFkX3Jlc2V0IChjb2xsZWN0X3BhZCk7Ci0gIGNvbGxlY3RfcGFkLT50cmFrID0gYXRvbV90cmFrX25ldyAocXRtdXgtPmNvbnRleHQpOwotICBhdG9tX21vb3ZfYWRkX3RyYWsgKHF0bXV4LT5tb292LCBjb2xsZWN0X3BhZC0+dHJhayk7Ci0KLSAgcXRtdXgtPnNpbmtwYWRzID0gZ19zbGlzdF9hcHBlbmQgKHF0bXV4LT5zaW5rcGFkcywgY29sbGVjdF9wYWQpOwotCi0gIC8qIHNldCB1cCBwYWQgZnVuY3Rpb25zICovCi0gIGNvbGxlY3RfcGFkLT5zZXRfY2FwcyA9IHNldGNhcHNfZnVuYzsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG5ld3BhZCwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIG5ld3BhZCk7Ci0KLSAgcmV0dXJuIG5ld3BhZDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX2RpcmVjdGlvbjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJSZXF1ZXN0IHBhZCB0aGF0IGlzIG5vdCBhIFNJTksgcGFkLiIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci10b29fbGF0ZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRtdXgsICJOb3QgcHJvdmlkaW5nIHJlcXVlc3QgcGFkIGFmdGVyIHN0cmVhbSBzdGFydC4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotd3JvbmdfdGVtcGxhdGU6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0bXV4LCAiVGhpcyBpcyBub3Qgb3VyIHRlbXBsYXRlISIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RRVE11eCAqcXRtdXggPSBHU1RfUVRfTVVYX0NBU1QgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdG11eCk7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT1ZJRV9USU1FU0NBTEU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXRtdXgtPnRpbWVzY2FsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFJBS19USU1FU0NBTEU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXRtdXgtPnRyYWtfdGltZXNjYWxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET19DVFRTOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHF0bXV4LT5ndWVzc19wdHMpOwotICAgICAgYnJlYWs7Ci0jaWZuZGVmIEdTVF9SRU1PVkVfREVQUkVDQVRFRAotICAgIGNhc2UgUFJPUF9EVFNfTUVUSE9EOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHF0bXV4LT5kdHNfbWV0aG9kKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBQUk9QX0ZBU1RfU1RBUlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcXRtdXgtPmZhc3Rfc3RhcnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZBU1RfU1RBUlRfVEVNUF9GSUxFOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZV9wYXRoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT09WX1JFQ09WX0ZJTEU6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBxdG11eC0+bW9vdl9yZWNvdl9maWxlX3BhdGgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZSQUdNRU5UX0RVUkFUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHF0bXV4LT5mcmFnbWVudF9kdXJhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSRUFNQUJMRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBxdG11eC0+c3RyZWFtYWJsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVTRVJWRURfTUFYX0RVUkFUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcXRtdXgtPnJlc2VydmVkX21heF9kdXJhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVTRVJWRURfRFVSQVRJT05fUkVNQUlOSU5HOgotICAgICAgaWYgKHF0bXV4LT5yZXNlcnZlZF9kdXJhdGlvbl9yZW1haW5pbmcgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcXRtdXgtPnJlc2VydmVkX21heF9kdXJhdGlvbik7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIHJlbWFpbmluZyA9IHF0bXV4LT5yZXNlcnZlZF9kdXJhdGlvbl9yZW1haW5pbmc7Ci0KLSAgICAgICAgLyogUmVwb3J0IHRoZSByZW1haW5pbmcgc3BhY2UgYXMgdGhlIGNhbGN1bGF0ZWQgcmVtYWluaW5nLCBtaW51cwotICAgICAgICAgKiBob3dldmVyIG11Y2ggd2UndmUgbXV4ZWQgc2luY2UgdGhlIGxhc3QgdXBkYXRlICovCi0gICAgICAgIGlmIChyZW1haW5pbmcgPiBxdG11eC0+bXV4ZWRfc2luY2VfbGFzdF91cGRhdGUpCi0gICAgICAgICAgcmVtYWluaW5nIC09IHF0bXV4LT5tdXhlZF9zaW5jZV9sYXN0X3VwZGF0ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJlbWFpbmluZyA9IDA7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdG11eCwgInJlc2VydmVkIGR1cmF0aW9uIHJlbWFpbmluZyAtIHJlcG9ydGluZyAlIgotICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAtICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICByZW1haW5pbmcsIHF0bXV4LT5yZXNlcnZlZF9kdXJhdGlvbl9yZW1haW5pbmcsCi0gICAgICAgICAgICBxdG11eC0+bXV4ZWRfc2luY2VfbGFzdF91cGRhdGUpOwotICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCByZW1haW5pbmcpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFU0VSVkVEX01PT1ZfVVBEQVRFX1BFUklPRDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHF0bXV4LT5yZXNlcnZlZF9tb292X3VwZGF0ZV9wZXJpb2QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFU0VSVkVEX0JZVEVTX1BFUl9TRUM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcXRtdXgtPnJlc2VydmVkX2J5dGVzX3Blcl9zZWNfcGVyX3RyYWspOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocXRtdXgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0X211eF9nZW5lcmF0ZV9mYXN0X3N0YXJ0X2ZpbGVfcGF0aCAoR3N0UVRNdXggKiBxdG11eCkKLXsKLSAgZ2NoYXIgKnRtcDsKLQotICBnX2ZyZWUgKHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGVfcGF0aCk7Ci0gIHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGVfcGF0aCA9IE5VTEw7Ci0KLSAgdG1wID0gZ19zdHJkdXBfcHJpbnRmICgiJXMlZCIsICJxdG11eCIsIGdfcmFuZG9tX2ludCAoKSk7Ci0gIHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGVfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksIHRtcCwgTlVMTCk7Ci0gIGdfZnJlZSAodG1wKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdF9tdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFFUTXV4ICpxdG11eCA9IEdTVF9RVF9NVVhfQ0FTVCAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHF0bXV4KTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01PVklFX1RJTUVTQ0FMRToKLSAgICAgIHF0bXV4LT50aW1lc2NhbGUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFJBS19USU1FU0NBTEU6Ci0gICAgICBxdG11eC0+dHJha190aW1lc2NhbGUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fQ1RUUzoKLSAgICAgIHF0bXV4LT5ndWVzc19wdHMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0gICAgY2FzZSBQUk9QX0RUU19NRVRIT0Q6Ci0gICAgICBxdG11eC0+ZHRzX21ldGhvZCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBQUk9QX0ZBU1RfU1RBUlQ6Ci0gICAgICBxdG11eC0+ZmFzdF9zdGFydCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GQVNUX1NUQVJUX1RFTVBfRklMRToKLSAgICAgIGdfZnJlZSAocXRtdXgtPmZhc3Rfc3RhcnRfZmlsZV9wYXRoKTsKLSAgICAgIHF0bXV4LT5mYXN0X3N0YXJ0X2ZpbGVfcGF0aCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgLyogTlVMTCBtZWFucyB0byBnZW5lcmF0ZSBhIHJhbmRvbSBvbmUgKi8KLSAgICAgIGlmICghcXRtdXgtPmZhc3Rfc3RhcnRfZmlsZV9wYXRoKSB7Ci0gICAgICAgIGdzdF9xdF9tdXhfZ2VuZXJhdGVfZmFzdF9zdGFydF9maWxlX3BhdGggKHF0bXV4KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT09WX1JFQ09WX0ZJTEU6Ci0gICAgICBnX2ZyZWUgKHF0bXV4LT5tb292X3JlY292X2ZpbGVfcGF0aCk7Ci0gICAgICBxdG11eC0+bW9vdl9yZWNvdl9maWxlX3BhdGggPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GUkFHTUVOVF9EVVJBVElPTjoKLSAgICAgIHF0bXV4LT5mcmFnbWVudF9kdXJhdGlvbiA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVFJFQU1BQkxFOnsKLSAgICAgIEdzdFFUTXV4Q2xhc3MgKnF0bXV4X2tsYXNzID0KLSAgICAgICAgICAoR3N0UVRNdXhDbGFzcyAqKSAoR19PQkpFQ1RfR0VUX0NMQVNTIChxdG11eCkpOwotICAgICAgaWYgKHF0bXV4X2tsYXNzLT5mb3JtYXQgPT0gR1NUX1FUX01VWF9GT1JNQVRfSVNNTCkgewotICAgICAgICBxdG11eC0+c3RyZWFtYWJsZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVTRVJWRURfTUFYX0RVUkFUSU9OOgotICAgICAgcXRtdXgtPnJlc2VydmVkX21heF9kdXJhdGlvbiA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFU0VSVkVEX01PT1ZfVVBEQVRFX1BFUklPRDoKLSAgICAgIHF0bXV4LT5yZXNlcnZlZF9tb292X3VwZGF0ZV9wZXJpb2QgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVNFUlZFRF9CWVRFU19QRVJfU0VDOgotICAgICAgcXRtdXgtPnJlc2VydmVkX2J5dGVzX3Blcl9zZWNfcGVyX3RyYWsgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChxdG11eCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3F0X211eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFFUTXV4ICpxdG11eCA9IEdTVF9RVF9NVVhfQ0FTVCAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zdGFydCAocXRtdXgtPmNvbGxlY3QpOwotICAgICAgcXRtdXgtPnN0YXRlID0gR1NUX1FUX01VWF9TVEFURV9TVEFSVEVEOwotICAgICAgcXRtdXgtPmZpcnN0X3RjID0gTlVMTDsKLSAgICAgIHF0bXV4LT50Y19wb3MgPSAtMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKHF0bXV4LT5jb2xsZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfcXRfbXV4X3Jlc2V0IChxdG11eCwgVFJVRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcXRfbXV4X3JlZ2lzdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdUeXBlSW5mbyB0eXBlaW5mbyA9IHsKLSAgICBzaXplb2YgKEdzdFFUTXV4Q2xhc3MpLAotICAgIChHQmFzZUluaXRGdW5jKSBnc3RfcXRfbXV4X2Jhc2VfaW5pdCwKLSAgICBOVUxMLAotICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X3F0X211eF9jbGFzc19pbml0LAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBzaXplb2YgKEdzdFFUTXV4KSwKLSAgICAwLAotICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X3F0X211eF9pbml0LAotICB9OwotICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gdGFnX3NldHRlcl9pbmZvID0gewotICAgIE5VTEwsIE5VTEwsIE5VTEwKLSAgfTsKLSAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIHRhZ194bXBfd3JpdGVyX2luZm8gPSB7Ci0gICAgTlVMTCwgTlVMTCwgTlVMTAotICB9OwotICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gcHJlc2V0X2luZm8gPSB7Ci0gICAgTlVMTCwgTlVMTCwgTlVMTAotICB9OwotICBHVHlwZSB0eXBlOwotICBHc3RRVE11eEZvcm1hdCBmb3JtYXQ7Ci0gIEdzdFFUTXV4Q2xhc3NQYXJhbXMgKnBhcmFtczsKLSAgZ3VpbnQgaSA9IDA7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9xdF9tdXhfZGVidWcsICJxdG11eCIsIDAsICJRVCBNdXhlciIpOwotCi0gIEdTVF9MT0cgKCJSZWdpc3RlcmluZyBtdXhlcnMiKTsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIEdzdFFUTXV4Rm9ybWF0UHJvcCAqcHJvcDsKLSAgICBHc3RDYXBzICpzdWJ0aXRsZV9jYXBzOwotCi0gICAgcHJvcCA9ICZnc3RfcXRfbXV4X2Zvcm1hdF9saXN0W2ldOwotICAgIGZvcm1hdCA9IHByb3AtPmZvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9RVF9NVVhfRk9STUFUX05PTkUpCi0gICAgICBicmVhazsKLQotICAgIC8qIGNyZWF0ZSBhIGNhY2hlIGZvciB0aGVzZSBwcm9wZXJ0aWVzICovCi0gICAgcGFyYW1zID0gZ19uZXcwIChHc3RRVE11eENsYXNzUGFyYW1zLCAxKTsKLSAgICBwYXJhbXMtPnByb3AgPSBwcm9wOwotICAgIHBhcmFtcy0+c3JjX2NhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmcHJvcC0+c3JjX2NhcHMpOwotICAgIHBhcmFtcy0+dmlkZW9fc2lua19jYXBzID0gZ3N0X3N0YXRpY19jYXBzX2dldCAoJnByb3AtPnZpZGVvX3NpbmtfY2Fwcyk7Ci0gICAgcGFyYW1zLT5hdWRpb19zaW5rX2NhcHMgPSBnc3Rfc3RhdGljX2NhcHNfZ2V0ICgmcHJvcC0+YXVkaW9fc2lua19jYXBzKTsKLSAgICBzdWJ0aXRsZV9jYXBzID0gZ3N0X3N0YXRpY19jYXBzX2dldCAoJnByb3AtPnN1YnRpdGxlX3NpbmtfY2Fwcyk7Ci0gICAgaWYgKCFnc3RfY2Fwc19pc19lcXVhbCAoc3VidGl0bGVfY2FwcywgR1NUX0NBUFNfTk9ORSkpIHsKLSAgICAgIHBhcmFtcy0+c3VidGl0bGVfc2lua19jYXBzID0gc3VidGl0bGVfY2FwczsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHN1YnRpdGxlX2NhcHMpOwotICAgIH0KLQotICAgIC8qIGNyZWF0ZSB0aGUgdHlwZSBub3cgKi8KLSAgICB0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfRUxFTUVOVCwgcHJvcC0+dHlwZV9uYW1lLCAmdHlwZWluZm8sCi0gICAgICAgIDApOwotICAgIGdfdHlwZV9zZXRfcWRhdGEgKHR5cGUsIEdTVF9RVF9NVVhfUEFSQU1TX1FEQVRBLCAoZ3BvaW50ZXIpIHBhcmFtcyk7Ci0gICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljICh0eXBlLCBHU1RfVFlQRV9UQUdfU0VUVEVSLCAmdGFnX3NldHRlcl9pbmZvKTsKLSAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKHR5cGUsIEdTVF9UWVBFX1RBR19YTVBfV1JJVEVSLAotICAgICAgICAmdGFnX3htcF93cml0ZXJfaW5mbyk7Ci0gICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljICh0eXBlLCBHU1RfVFlQRV9QUkVTRVQsICZwcmVzZXRfaW5mbyk7Ci0KLSAgICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sIHByb3AtPm5hbWUsIHByb3AtPnJhbmssIHR5cGUpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaSsrOwotICB9Ci0KLSAgR1NUX0xPRyAoIkZpbmlzaGVkIHJlZ2lzdGVyaW5nIG11eGVycyIpOwotCi0gIC8qIEZJWE1FOiBpZGVhbGx5IGNsYXNzaWZpY2F0aW9uIHRhZyBzaG91bGQgYmUgYWRkZWQgYW5kCi0gICAgIHJlZ2lzdGVyZWQgaW4gZ3N0cmVhbWVyIGNvcmUgZ3N0dGFnbGlzdAotICAgKi8KLQotICBHU1RfTE9HICgiUmVnaXN0ZXJpbmcgdGFncyIpOwotCi0gIGdzdF90YWdfcmVnaXN0ZXIgKEdTVF9UQUdfM0dQX0NMQVNTSUZJQ0FUSU9OLCBHU1RfVEFHX0ZMQUdfTUVUQSwKLSAgICAgIEdfVFlQRV9TVFJJTkcsIEdTVF9UQUdfM0dQX0NMQVNTSUZJQ0FUSU9OLCAiY29udGVudCBjbGFzc2lmaWNhdGlvbiIsCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0KLSAgR1NUX0xPRyAoIkZpbmlzaGVkIHJlZ2lzdGVyaW5nIHRhZ3MiKTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvZ3N0cXRtdXguaCBiL2dzdC9pc29tcDQvZ3N0cXRtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZkN2RmOS4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2dzdHF0bXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDMgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgX19HU1RfUVRfTVVYX0hfXwotI2RlZmluZSBfX0dTVF9RVF9NVVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLQotI2luY2x1ZGUgImZvdXJjYy5oIgotI2luY2x1ZGUgImF0b21zLmgiCi0jaW5jbHVkZSAiYXRvbXNyZWNvdmVyeS5oIgotI2luY2x1ZGUgImdzdHF0bXV4bWFwLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9RVF9NVVggKGdzdF9xdF9tdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1FUX01VWChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9RVF9NVVgsIEdzdFFUTXV4KSkKLSNkZWZpbmUgR1NUX1FUX01VWF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUVRfTVVYLCBHc3RRVE11eCkpCi0jZGVmaW5lIEdTVF9JU19RVF9NVVgob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUVRfTVVYKSkKLSNkZWZpbmUgR1NUX0lTX1FUX01VWF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUVRfTVVYKSkKLSNkZWZpbmUgR1NUX1FUX01VWF9DQVNUKG9iaikgKChHc3RRVE11eCopKG9iaikpCi0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFFUTXV4IEdzdFFUTXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFFUTXV4Q2xhc3MgR3N0UVRNdXhDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RRVFBhZCBHc3RRVFBhZDsKLQotLyoKLSAqIEdzdFFUUGFkUHJlcGFyZUJ1ZmZlckZ1bmMKLSAqCi0gKiBSZWNlaXZlcyBhIGJ1ZmZlciAodGFrZXMgcmVmKSBhbmQgcmV0dXJucyBhIG5ldyBidWZmZXIgdGhhdCBzaG91bGQKLSAqIHJlcGxhY2UgdGhlIHBhc3NlZCBvbmUuCi0gKgotICogVXNlZnVsIGZvciB3aGVuIHRoZSBwYWQvZGF0YXR5cGUgbmVlZHMgc29tZSBtYW5pcHVsYXRpb24gYmVmb3JlCi0gKiBiZWluZyBtdXhlZC4gKE9yaWdpbmFsbHkgYWRkZWQgZm9yIGltYWdlL3gtanBjIHN1cHBvcnQsIGZvciB3aGljaCBidWZmZXJzCi0gKiBuZWVkIHRvIGJlIHdyYXBwZWQgaW50byBhIGlzb20gYm94KQotICovCi10eXBlZGVmIEdzdEJ1ZmZlciAqICgqR3N0UVRQYWRQcmVwYXJlQnVmZmVyRnVuYykgKEdzdFFUUGFkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0UVRNdXggKiBxdG11eCk7Ci0KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHc3RRVFBhZFNldENhcHNGdW5jKSAoR3N0UVRQYWQgKiBwYWQsIEdzdENhcHMgKiBjYXBzKTsKLXR5cGVkZWYgR3N0QnVmZmVyICogKCpHc3RRVFBhZENyZWF0ZUVtcHR5QnVmZmVyRnVuYykgKEdzdFFUUGFkICogcGFkLCBnaW50NjQgZHVyYXRpb24pOwotCi0jZGVmaW5lIFFUTVVYX05PX09GX1RTICAgMTAKLQotc3RydWN0IF9Hc3RRVFBhZAotewotICBHc3RDb2xsZWN0RGF0YSBjb2xsZWN0OyAgICAgICAvKiB3ZSBleHRlbmQgdGhlIENvbGxlY3REYXRhICovCi0KLSAgLyogZm91cmNjIGlkIG9mIHN0cmVhbSAqLwotICBndWludDMyIGZvdXJjYzsKLSAgLyogd2hldGhlciB1c2luZyBmb3JtYXQgdGhhdCBoYXZlIG91dCBvZiBvcmRlciBidWZmZXJzICovCi0gIGdib29sZWFuIGlzX291dF9vZl9vcmRlcjsKLSAgLyogaWYgbm90IDAsIHRyYWNrIHdpdGggY29uc3RhbnQgc2l6ZWQgc2FtcGxlcywgZS5nLiByYXcgYXVkaW8gKi8KLSAgZ3VpbnQgc2FtcGxlX3NpemU7Ci0gIC8qIG1ha2Ugc3luYyB0YWJsZSBlbnRyeSAqLwotICBnYm9vbGVhbiBzeW5jOwotICAvKiBpZiBpdCBpcyBhIHNwYXJzZSBzdHJlYW0KLSAgICogKG1lYW5pbmcgd2UgY2FuJ3QgdXNlIFBUUyBkaWZmZXJlbmNlcyB0byBjb21wdXRlIGR1cmF0aW9uKSAqLwotICBnYm9vbGVhbiBzcGFyc2U7Ci0gIC8qIGJpdHJhdGVzICovCi0gIGd1aW50MzIgYXZnX2JpdHJhdGUsIG1heF9iaXRyYXRlOwotCi0gIC8qIGZvciBhdmcgYml0cmF0ZSBjYWxjdWxhdGlvbiAqLwotICBndWludDY0IHRvdGFsX2J5dGVzOwotICBndWludDY0IHRvdGFsX2R1cmF0aW9uOwotCi0gIEdzdEJ1ZmZlciAqbGFzdF9idWY7Ci0gIC8qIGR0cyBvZiBsYXN0X2J1ZiAqLwotICBHc3RDbG9ja1RpbWUgbGFzdF9kdHM7Ci0KLSAgLyogVGhpcyBpcyBjb21wZW5zYXRlIGZvciBDVFRTICovCi0gIEdzdENsb2NrVGltZSBkdHNfYWRqdXN0bWVudDsKLQotICAvKiBzdG9yZSB0aGUgZmlyc3QgdGltZXN0YW1wIGZvciBjb21wYXJpbmcgd2l0aCBvdGhlciBzdHJlYW1zIGFuZAotICAgKiBrbm93IGlmIHRoZXJlIGFyZSBsYXRlIHN0cmVhbXMgKi8KLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X3RzOwotICBHc3RDbG9ja1RpbWUgZmlyc3RfZHRzOwotCi0gIGd1aW50IGJ1Zl9oZWFkOwotICBndWludCBidWZfdGFpbDsKLQotICAvKiBhbGwgdGhlIGF0b20gYW5kIGNodW5rIGJvb2sta2VlcGluZyBpcyBkZWxlZ2F0ZWQgaGVyZQotICAgKiB1bm93bmVkL3VuY291bnRlZCByZWZlcmVuY2UsIHBhcmVudCBNT09WIG93bnMgKi8KLSAgQXRvbVRSQUsgKnRyYWs7Ci0gIEF0b21UUkFLICp0Y190cmFrOwotICBTYW1wbGVUYWJsZUVudHJ5ICp0cmFrX3N0ZTsKLSAgLyogZnJhZ21lbnRlZCBzdXBwb3J0ICovCi0gIC8qIG1ldGEgZGF0YSBib29rLWtlZXBpbmcgZGVsZWdhdGVkIGhlcmUgKi8KLSAgQXRvbVRSQUYgKnRyYWY7Ci0gIC8qIGZyYWdtZW50IGJ1ZmZlcnMgKi8KLSAgQVRPTV9BUlJBWSAoR3N0QnVmZmVyICopIGZyYWdtZW50X2J1ZmZlcnM7Ci0gIC8qIHJ1bm5pbmcgZnJhZ21lbnQgZHVyYXRpb24gKi8KLSAgZ2ludDY0IGZyYWdtZW50X2R1cmF0aW9uOwotICAvKiBvcHRpb25hbCBmcmFnbWVudCBpbmRleCBib29rLWtlZXBpbmcgKi8KLSAgQXRvbVRGUkEgKnRmcmE7Ci0KLSAgLyogU2V0IHdoZW4gdGFncyBhcmUgcmVjZWl2ZWQsIGNsZWFyZWQgd2hlbiB3cml0dGVuIHRvIG1vb3YgKi8KLSAgZ2Jvb2xlYW4gdGFnc19jaGFuZ2VkOwotCi0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgLyogaWYgbm90aGluZyBpcyBzZXQsIGl0IHdvbid0IGJlIGNhbGxlZCAqLwotICBHc3RRVFBhZFByZXBhcmVCdWZmZXJGdW5jIHByZXBhcmVfYnVmX2Z1bmM7Ci0gIEdzdFFUUGFkU2V0Q2Fwc0Z1bmMgc2V0X2NhcHM7Ci0gIEdzdFFUUGFkQ3JlYXRlRW1wdHlCdWZmZXJGdW5jIGNyZWF0ZV9lbXB0eV9idWZmZXI7Ci19OwotCi10eXBlZGVmIGVudW0gX0dzdFFUTXV4U3RhdGUKLXsKLSAgR1NUX1FUX01VWF9TVEFURV9OT05FLAotICBHU1RfUVRfTVVYX1NUQVRFX1NUQVJURUQsCi0gIEdTVF9RVF9NVVhfU1RBVEVfREFUQSwKLSAgR1NUX1FUX01VWF9TVEFURV9FT1MKLX0gR3N0UVRNdXhTdGF0ZTsKLQotdHlwZWRlZiBlbnVtIF9Hc3RRdE11eE1vZGUgewotICAgIEdTVF9RVF9NVVhfTU9ERV9NT09WX0FUX0VORCwKLSAgICBHU1RfUVRfTVVYX01PREVfRlJBR01FTlRFRCwKLSAgICBHU1RfUVRfTVVYX01PREVfRlJBR01FTlRFRF9TVFJFQU1BQkxFLAotICAgIEdTVF9RVF9NVVhfTU9ERV9GQVNUX1NUQVJULAotICAgIEdTVF9RVF9NVVhfTU9ERV9ST0JVU1RfUkVDT1JESU5HCi19IEdzdFF0TXV4TW9kZTsKLQotc3RydWN0IF9Hc3RRVE11eAotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdENvbGxlY3RQYWRzICpjb2xsZWN0OwotICBHU0xpc3QgKnNpbmtwYWRzOwotCi0gIC8qIHN0YXRlICovCi0gIEdzdFFUTXV4U3RhdGUgc3RhdGU7Ci0KLSAgLyogTXV4IG1vZGUsIGluZmVycmVkIGZyb20gcHJvcGVydHkKLSAgICogc2V0IGluIGdzdF9xdF9tdXhfc3RhcnRfZmlsZSgpICovCi0gIEdzdFF0TXV4TW9kZSBtdXhfbW9kZTsKLQotICAvKiBzaXplIG9mIGhlYWRlciAocHJlZml4LCBhdG9tcyAoZnR5cCwgcG9zc2libHkgbW9vdiwgbWRhdCBoZWFkZXIpKSAqLwotICBndWludDY0IGhlYWRlcl9zaXplOwotICAvKiBhY2N1bXVsYXRlZCBzaXplIG9mIHJhdyBtZWRpYSBkYXRhIChub3QgaW5jbHVkaW5nIG1kYXQgaGVhZGVyKSAqLwotICBndWludDY0IG1kYXRfc2l6ZTsKLSAgLyogcG9zaXRpb24gb2YgdGhlIG1vb3YgKGZvciBmcmFnbWVudGVkIG1vZGUpIG9yIHJlc2VydmVkIG1vb3YgYXRvbQotICAgKiBhcmVhIChmb3Igcm9idXN0LW11eGluZyBtb2RlKSAqLwotICBndWludDY0IG1vb3ZfcG9zOwotICAvKiBwb3NpdGlvbiBvZiBtZGF0IGF0b20gaGVhZGVyIChmb3IgbGF0ZXIgdXBkYXRpbmcgb2Ygc2l6ZSkgaW4KLSAgICogbW9vdi1hdC1lbmQsIGZyYWdtZW50ZWQgYW5kIHJvYnVzdC1tdXhpbmcgbW9kZXMgKi8KLSAgZ3VpbnQ2NCBtZGF0X3BvczsKLQotICAvKiBrZWVwIHRyYWNrIG9mIHRoZSBsYXJnZXN0IGNodW5rIHRvIGZpbmUtdHVuZSBicmFuZHMgKi8KLSAgR3N0Q2xvY2tUaW1lIGxvbmdlc3RfY2h1bms7Ci0KLSAgLyogRWFybGllc3QgdGltZXN0YW1wIGFjcm9zcyBhbGwgcGFkcy90cmFrcyAqLwotICBHc3RDbG9ja1RpbWUgZmlyc3RfdHM7Ci0gIC8qIExhc3QgRFRTIGFjcm9zcyBhbGwgcGFkcyAoPSBkdXJhdGlvbikgKi8KLSAgR3N0Q2xvY2tUaW1lIGxhc3RfZHRzOwotCi0gIC8qIGF0b20gaGVscGVyIG9iamVjdHMgKi8KLSAgQXRvbXNDb250ZXh0ICpjb250ZXh0OwotICBBdG9tRlRZUCAqZnR5cDsKLSAgQXRvbU1PT1YgKm1vb3Y7Ci0gIEdTTGlzdCAqZXh0cmFfYXRvbXM7IC8qIGxpc3Qgb2YgZXh0cmEgdG9wLWxldmVsIGF0b21zIChlLmcuIFVVSUQgZm9yIHhtcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICogU3RvcmVkIGFzIEF0b21JbmZvIHN0cnVjdHMgKi8KLQotICAvKiBTZXQgd2hlbiB0YWdzIGFyZSByZWNlaXZlZCwgY2xlYXJlZCB3aGVuIHdyaXR0ZW4gdG8gbW9vdiAqLwotICBnYm9vbGVhbiB0YWdzX2NoYW5nZWQ7Ci0KLSAgLyogU01QVEUgdGltZWNvZGUgKi8KLSAgR3N0VmlkZW9UaW1lQ29kZSAqZmlyc3RfdGM7Ci0gIEdzdENsb2NrVGltZSBmaXJzdF9wdHM7Ci0gIGd1aW50NjQgdGNfcG9zOwotCi0gIC8qIGZyYWdtZW50ZWQgZmlsZSBpbmRleCAqLwotICBBdG9tTUZSQSAqbWZyYTsKLQotICAvKiBmYXN0IHN0YXJ0ICovCi0gIEZJTEUgKmZhc3Rfc3RhcnRfZmlsZTsKLQotICAvKiBtb292IHJlY292ZXJ5ICovCi0gIEZJTEUgKm1vb3ZfcmVjb3ZfZmlsZTsKLQotICAvKiBmcmFnbWVudCBzZXF1ZW5jZSAqLwotICBndWludDMyIGZyYWdtZW50X3NlcXVlbmNlOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ3VpbnQzMiB0aW1lc2NhbGU7Ci0gIGd1aW50MzIgdHJha190aW1lc2NhbGU7Ci0gIEF0b21zVHJlZUZsYXZvciBmbGF2b3I7Ci0gIGdib29sZWFuIGZhc3Rfc3RhcnQ7Ci0gIGdib29sZWFuIGd1ZXNzX3B0czsKLSNpZm5kZWYgR1NUX1JFTU9WRV9ERVBSRUNBVEVECi0gIGdpbnQgZHRzX21ldGhvZDsKLSNlbmRpZgotICBnY2hhciAqZmFzdF9zdGFydF9maWxlX3BhdGg7Ci0gIGdjaGFyICptb292X3JlY292X2ZpbGVfcGF0aDsKLSAgZ3VpbnQzMiBmcmFnbWVudF9kdXJhdGlvbjsKLSAgLyogV2hldGhlciBvciBub3QgdG8gd29yayBpbiAnc3RyZWFtYWJsZScgbW9kZSBhbmQgbm90Ci0gICAqIHNlZWsgdG8gcmV3cml0ZSBoZWFkZXJzIC0gb25seSB2YWxpZCBmb3IgZnJhZ21lbnRlZAotICAgKiBtb2RlLiAqLwotICBnYm9vbGVhbiBzdHJlYW1hYmxlOwotCi0gIC8qIFJlcXVlc3RlZCB0YXJnZXQgbWF4aW11bSBkdXJhdGlvbiAqLwotICBHc3RDbG9ja1RpbWUgcmVzZXJ2ZWRfbWF4X2R1cmF0aW9uOwotICAvKiBFc3RpbWF0ZSBvZiByZW1haW5pbmcgcmVzZXJ2ZWQgaGVhZGVyIHNwYWNlIChpbiBucyBvZiByZWNvcmRpbmcpICovCi0gIEdzdENsb2NrVGltZSByZXNlcnZlZF9kdXJhdGlvbl9yZW1haW5pbmc7Ci0gIC8qIE11bHRpcGxpZXIgZm9yIGNvbnZlcnNpb24gZnJvbSByZXNlcnZlZF9tYXhfZHVyYXRpb24gdG8gYnl0ZXMgKi8KLSAgZ3VpbnQgcmVzZXJ2ZWRfYnl0ZXNfcGVyX3NlY19wZXJfdHJhazsKLQotICAvKiBSZXNlcnZlZCBtaW5pbXVtIE1PT1Ygc2l6ZSBpbiBieXRlcwotICAgKiBUaGlzIGlzIGNvbnZlcnRlZCBmcm9tIHJlc2VydmVkX21heF9kdXJhdGlvbgotICAgKiB1c2luZyB0aGUgYnl0ZXMvdHJhay9zZWMgZXN0aW1hdGUgKi8KLSAgZ3VpbnQzMiByZXNlcnZlZF9tb292X3NpemU7Ci0gIC8qIEJhc2ljIHNpemUgb2YgdGhlIG1vb3YgKHN0YXRpYyBoZWFkZXJzICsgdGFncykgKi8KLSAgZ3VpbnQzMiBiYXNlX21vb3Zfc2l6ZTsKLSAgLyogU2l6ZSBvZiB0aGUgbW9zdCByZWNlbnRseSBnZW5lcmF0ZWQgbW9vdiBoZWFkZXIgKi8KLSAgZ3VpbnQzMiBsYXN0X21vb3Zfc2l6ZTsKLSAgLyogVHJ1ZSBpZiB0aGUgZmlyc3QgbW9vdiBpbiB0aGUgcGluZy1wb25nIGJ1ZmZlcnMKLSAgICogaXMgdGhlIGFjdGl2ZSBvbmUuIFNlZSBnc3RfcXRfbXV4X3JvYnVzdF9yZWNvcmRpbmdfcmV3cml0ZV9tb292KCkgKi8KLSAgZ2Jvb2xlYW4gcmVzZXJ2ZWRfbW9vdl9maXJzdF9hY3RpdmU7Ci0KLSAgLyogVHJhY2tpbmcgb2YgcGVyaW9kaWMgTU9PViB1cGRhdGVzICovCi0gIEdzdENsb2NrVGltZSBsYXN0X21vb3ZfdXBkYXRlOwotICBHc3RDbG9ja1RpbWUgcmVzZXJ2ZWRfbW9vdl91cGRhdGVfcGVyaW9kOwotICBHc3RDbG9ja1RpbWUgbXV4ZWRfc2luY2VfbGFzdF91cGRhdGU7Ci0KLSAgLyogZm9yIHJlcXVlc3QgcGFkIG5hbWluZyAqLwotICBndWludCB2aWRlb19wYWRzLCBhdWRpb19wYWRzLCBzdWJ0aXRsZV9wYWRzOwotfTsKLQotc3RydWN0IF9Hc3RRVE11eENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgR3N0UVRNdXhGb3JtYXQgZm9ybWF0OwotfTsKLQotLyogdHlwZSByZWdpc3RlciBoZWxwZXIgc3RydWN0ICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UVRNdXhDbGFzc1BhcmFtcwotewotICBHc3RRVE11eEZvcm1hdFByb3AgKnByb3A7Ci0gIEdzdENhcHMgKnNyY19jYXBzOwotICBHc3RDYXBzICp2aWRlb19zaW5rX2NhcHM7Ci0gIEdzdENhcHMgKmF1ZGlvX3NpbmtfY2FwczsKLSAgR3N0Q2FwcyAqc3VidGl0bGVfc2lua19jYXBzOwotfSBHc3RRVE11eENsYXNzUGFyYW1zOwotCi0jZGVmaW5lIEdTVF9RVF9NVVhfUEFSQU1TX1FEQVRBIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJxdC1tdXgtcGFyYW1zIikKLQotR1R5cGUgZ3N0X3F0X211eF9nZXRfdHlwZSAodm9pZCk7Ci1nYm9vbGVhbiBnc3RfcXRfbXV4X3JlZ2lzdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi0vKiBGSVhNRTogaWRlYWxseSBjbGFzc2lmaWNhdGlvbiB0YWcgc2hvdWxkIGJlIGFkZGVkIGFuZAotICogcmVnaXN0ZXJlZCBpbiBnc3RyZWFtZXIgY29yZSBnc3R0YWdsaXN0Ci0gKgotICogdGhpcyB0YWcgaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdDogZW50aXR5Zm91cmNjOi8vdGFibGVfbnVtL2NvbnRlbnQKLSAqIEZJWE1FIFNob3VsZG4ndCB3ZSBhZGQgYSBmaWVsZCBmb3IgJ2xhbmd1YWdlJz8KLSAqLwotI2RlZmluZSBHU1RfVEFHXzNHUF9DTEFTU0lGSUNBVElPTiAiY2xhc3NpZmljYXRpb24iCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9RVF9NVVhfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmMgYi9nc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYWJjOTIuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9nc3RxdG11eG1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLS8qIFF1aWNrdGltZSBtdXhlciBwbHVnaW4gZm9yIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlICJnc3RxdG11eG1hcC5oIgotI2luY2x1ZGUgImZvdXJjYy5oIgotCi0vKiBzdGF0aWMgaW5mbyByZWxhdGVkIHRvIHZhcmlvdXMgZm9ybWF0ICovCi0KLSNkZWZpbmUgQ09NTU9OX1ZJREVPX0NBUFMgXAotICAid2lkdGggPSAoaW50KSBbIDE2LCBNQVggXSwgIiBcCi0gICJoZWlnaHQgPSAoaW50KSBbIDE2LCBNQVggXSIKLQotI2RlZmluZSBDT01NT05fVklERU9fQ0FQU19OT19GUkFNRVJBVEUgXAotICAid2lkdGggPSAoaW50KSBbIDE2LCBNQVggXSwgIiBcCi0gICJoZWlnaHQgPSAoaW50KSBbIDE2LCBNQVggXSAiCi0KLSNkZWZpbmUgSDI2M19DQVBTIFwKLSAgInZpZGVvL3gtaDI2MywgIiBcCi0gIENPTU1PTl9WSURFT19DQVBTCi0KLSNkZWZpbmUgSDI2NF9DQVBTIFwKLSAgInZpZGVvL3gtaDI2NCwgIiBcCi0gICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgYXZjLCAiIFwKLSAgImFsaWdubWVudCA9IChzdHJpbmcpIGF1LCAiIFwKLSAgQ09NTU9OX1ZJREVPX0NBUFMKLQotI2RlZmluZSBNUEVHNFZfQ0FQUyBcCi0gICJ2aWRlby9tcGVnLCAiIFwKLSAgIm1wZWd2ZXJzaW9uID0gKGludCkgNCwgIlwKLSAgInN5c3RlbXN0cmVhbSA9IChib29sZWFuKSBmYWxzZSwgIiBcCi0gIENPTU1PTl9WSURFT19DQVBTICI7ICIgXAotICAidmlkZW8veC1kaXZ4LCAiIFwKLSAgImRpdnh2ZXJzaW9uID0gKGludCkgNSwgIlwKLSAgQ09NTU9OX1ZJREVPX0NBUFMKLQotI2RlZmluZSBQUk9SRVNfQ0FQUyBcCi0gICJ2aWRlby94LXByb3JlcywgdmFyaWFudCA9IChzdHJpbmcpIHtzdGFuZGFyZCwgbHQsIGhxLCBwcm94eX0sICIgXAotICBDT01NT05fVklERU9fQ0FQUwotCi0jZGVmaW5lIFNWUV9DQVBTIFwKLSAgInZpZGVvL3gtc3ZxLCAiIFwKLSAgInN2cXZlcnNpb24gPSAoaW50KSAzLCAiIFwKLSAgQ09NTU9OX1ZJREVPX0NBUFMKLQotI2RlZmluZSBDT01NT05fQVVESU9fQ0FQUyhjLCByKSBcCi0gICJjaGFubmVscyA9IChpbnQpIFsgMSwgIiBHX1NUUklOR0lGWSAoYykgIiBdLCAiIFwKLSAgInJhdGUgPSAoaW50KSBbIDEsICIgR19TVFJJTkdJRlkgKHIpICIgXSIKLQotI2RlZmluZSBQQ01fQ0FQUyBcCi0gICJhdWRpby94LXJhdywgIiBcCi0gICJmb3JtYXQgPSAoc3RyaW5nKSB7IFMxNkxFLCBTMTZCRSwgUzgsIFU4IH0sICIgXAotICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgXAotICBDT01NT05fQVVESU9fQ0FQUyAoMiwgTUFYKQotCi0jZGVmaW5lIFBDTV9DQVBTX0ZVTEwgXAotICAiYXVkaW8veC1yYXcsICIgXAotICAiZm9ybWF0ID0gKHN0cmluZykgeyBTMzJMRSwgUzMyQkUsIFMyNExFLCBTMjRCRSwgUzE2TEUsIFMxNkJFLCBTOCwgVTggfSwgIiBcCi0gICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gIENPTU1PTl9BVURJT19DQVBTICgyLCBNQVgpCi0KLSNkZWZpbmUgTVAzX0NBUFMgXAotICAiYXVkaW8vbXBlZywgIiBcCi0gICJtcGVndmVyc2lvbiA9IChpbnQpIDEsICIgXAotICAibGF5ZXIgPSAoaW50KSAzLCAiIFwKLSAgQ09NTU9OX0FVRElPX0NBUFMgKDIsIE1BWCkKLQotI2RlZmluZSBNUDEyM19DQVBTIFwKLSAgImF1ZGlvL21wZWcsICIgXAotICAibXBlZ3ZlcnNpb24gPSAoaW50KSAxLCAiIFwKLSAgImxheWVyID0gKGludCkgWzEsIDNdLCAiIFwKLSAgQ09NTU9OX0FVRElPX0NBUFMgKDIsIE1BWCkKLQotI2RlZmluZSBBQUNfQ0FQUyBcCi0gICJhdWRpby9tcGVnLCAiIFwKLSAgIm1wZWd2ZXJzaW9uID0gKGludCkgNCwgIiBcCi0gICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgcmF3LCAiIFwKLSAgQ09NTU9OX0FVRElPX0NBUFMgKDgsIE1BWCkKLQotI2RlZmluZSBBQzNfQ0FQUyBcCi0gICJhdWRpby94LWFjMywgIiBcCi0gIENPTU1PTl9BVURJT19DQVBTICg2LCBNQVgpCi0KLSNkZWZpbmUgQU1SX0NBUFMgXAotICAiYXVkaW8vQU1SLCAiIFwKLSAgInJhdGUgPSAoaW50KSA4MDAwLCAiIFwKLSAgImNoYW5uZWxzID0gWyAxLCAyIF07ICIgXAotICAiYXVkaW8vQU1SLVdCLCAiIFwKLSAgInJhdGUgPSAoaW50KSAxNjAwMCwgIiBcCi0gICJjaGFubmVscyA9IFsgMSwgMiBdICIKLQotI2RlZmluZSBBRFBDTV9DQVBTICBcCi0gICJhdWRpby94LWFkcGNtLCAiIFwKLSAgImxheW91dCA9IChzdHJpbmcpZHZpLCAiIFwKLSAgImJsb2NrX2FsaWduID0gKGludClbNjQsIDgwOTZdLCAiIFwKLSAgQ09NTU9OX0FVRElPX0NBUFMoMiwgTUFYKQotCi0jZGVmaW5lIEFMQUNfQ0FQUyBcCi0gICJhdWRpby94LWFsYWMsICIgXAotICBDT01NT05fQVVESU9fQ0FQUygyLCBNQVgpCi0KLSNkZWZpbmUgT1BVU19DQVBTIFwKLSAgImF1ZGlvL3gtb3B1cywgIiBcCi0gICJjaGFubmVsLW1hcHBpbmctZmFtaWx5ID0gKGludCkgWzAsIDI1NV0sICIgXAotICBDT01NT05fQVVESU9fQ0FQUyg4LCBNQVgpCi0KLQotI2RlZmluZSBURVhUX1VURjggXAotICAidGV4dC94LXJhdywgIiBcCi0gICJmb3JtYXQ9KHN0cmluZyl1dGY4IgotCi0vKiBGSVhNRSAwLjExIC0gdGFrZSBhIGxvb2sgYXQgYnVncyAjNTgwMDA1IGFuZCAjMzQwMzc1ICovCi1Hc3RRVE11eEZvcm1hdFByb3AgZ3N0X3F0X211eF9mb3JtYXRfbGlzdFtdID0gewotICAvKiBvcmlnaW5hbCBRdWlja1RpbWUgZm9ybWF0OyBzZWUgQXBwbGUgc2l0ZSAoZS5nLiBxdGZmLnBkZikgKi8KLSAgewotICAgICAgICBHU1RfUVRfTVVYX0ZPUk1BVF9RVCwKLSAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgInF0bXV4IiwKLSAgICAgICAgIlF1aWNrVGltZSIsCi0gICAgICAgICJHc3RRVE11eCIsCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3F1aWNrdGltZSwgdmFyaWFudCA9IChzdHJpbmcpIGFwcGxlOyAiCi0gICAgICAgICAgICAidmlkZW8vcXVpY2t0aW1lIiksCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtcmF3LCAiCi0gICAgICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgeyBSR0IsIFVZVlksIHYyMTAgfSwgIgotICAgICAgICAgICAgQ09NTU9OX1ZJREVPX0NBUFMgIjsgIgotICAgICAgICAgICAgTVBFRzRWX0NBUFMgIjsgIgotICAgICAgICAgICAgUFJPUkVTX0NBUFMgIjsgIgotICAgICAgICAgICAgSDI2M19DQVBTICI7ICIKLSAgICAgICAgICAgIEgyNjRfQ0FQUyAiOyAiCi0gICAgICAgICAgICBTVlFfQ0FQUyAiOyAiCi0gICAgICAgICAgICAidmlkZW8veC1kdiwgIgotICAgICAgICAgICAgInN5c3RlbXN0cmVhbSA9IChib29sZWFuKSBmYWxzZSwgIgotICAgICAgICAgICAgQ09NTU9OX1ZJREVPX0NBUFMgIjsgIgotICAgICAgICAgICAgImltYWdlL2pwZWcsICIKLSAgICAgICAgICAgIENPTU1PTl9WSURFT19DQVBTX05PX0ZSQU1FUkFURSAiOyAiCi0gICAgICAgICAgICAidmlkZW8veC12cDgsICIKLSAgICAgICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgICAgICJ2aWRlby94LWRpcmFjLCAiCi0gICAgICAgICAgICBDT01NT05fVklERU9fQ0FQUyAiOyAiICJ2aWRlby94LXF0LXBhcnQsICIgQ09NTU9OX1ZJREVPX0NBUFMpLAotICAgICAgICBHU1RfU1RBVElDX0NBUFMgKFBDTV9DQVBTX0ZVTEwgIjsgIgotICAgICAgICAgICAgTVAzX0NBUFMgIiA7ICIKLSAgICAgICAgICAgIEFBQ19DQVBTICIgOyAiCi0gICAgICAgICAgICBBRFBDTV9DQVBTICIgOyAiCi0gICAgICAgICAgICAiYXVkaW8veC1hbGF3LCAiIENPTU1PTl9BVURJT19DQVBTICgyLCBNQVgpICI7ICIKLSAgICAgICAgICAgICJhdWRpby94LW11bGF3LCAiIENPTU1PTl9BVURJT19DQVBTICgyLCBNQVgpICI7ICIKLSAgICAgICAgICAgIEFNUl9DQVBTICIgOyAiIEFMQUNfQ0FQUyksCi0gICAgICBHU1RfU1RBVElDX0NBUFMgKFRFWFRfVVRGOCl9Ci0gICwKLSAgLyogSVNPIDE0NDk2LTE0OiBtcDQyIGFzIElTTyBiYXNlIG1lZGlhIGV4dGVuc2lvbgotICAgKiAoc3VwZXJzZWRlcyBvcmlnaW5hbCBJU08gMTQ0OTk2LTEgbXA0MSkgKi8KLSAgewotICAgICAgICBHU1RfUVRfTVVYX0ZPUk1BVF9NUDQsCi0gICAgICAgIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICJtcDRtdXgiLAotICAgICAgICAiTVA0IiwKLSAgICAgICAgIkdzdE1QNE11eCIsCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3F1aWNrdGltZSwgdmFyaWFudCA9IChzdHJpbmcpIGlzbyIpLAotICAgICAgICBHU1RfU1RBVElDX0NBUFMgKE1QRUc0Vl9DQVBTICI7ICIgSDI2NF9DQVBTICI7IgotICAgICAgICAgICAgInZpZGVvL3gtbXA0LXBhcnQsIiBDT01NT05fVklERU9fQ0FQUyksCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoTVAxMjNfQ0FQUyAiOyAiCi0gICAgICAgICAgICBBQUNfQ0FQUyAiIDsgIiBBQzNfQ0FQUyAiIDsgIiBBTEFDX0NBUFMgIiA7ICIgT1BVU19DQVBTKSwKLSAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoVEVYVF9VVEY4KX0KLSAgLAotICAvKiBNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZyBmbXA0L2lzbWwgKi8KLSAgLyogVE9ETyBhZGQgV01WL1dNQSBzdXBwb3J0ICovCi0gIHsKLSAgICAgICAgR1NUX1FUX01VWF9GT1JNQVRfSVNNTCwKLSAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgImlzbWxtdXgiLAotICAgICAgICAiSVNNTCIsCi0gICAgICAgICJHc3RJU01MTXV4IiwKLSAgICAgICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vcXVpY2t0aW1lLCB2YXJpYW50ID0gKHN0cmluZykgaXNvLWZyYWdtZW50ZWQiKSwKLSAgICAgICAgR1NUX1NUQVRJQ19DQVBTIChNUEVHNFZfQ0FQUyAiOyAiIEgyNjRfQ0FQUyksCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoTVAzX0NBUFMgIjsgIiBBQUNfQ0FQUyksCi0gICAgICBHU1RfU1RBVElDX0NBUFNfTk9ORX0KLSAgLAotICAvKiAzR1BQIFRlY2huaWNhbCBTcGVjaWZpY2F0aW9uIDI2LjI0NCBWNy4zLjAKLSAgICogKGV4dGVuZGVkIGluIDNHUFAyIEZpbGUgRm9ybWF0cyBmb3IgTXVsdGltZWRpYSBTZXJ2aWNlcykgKi8KLSAgewotICAgICAgICBHU1RfUVRfTVVYX0ZPUk1BVF8zR1AsCi0gICAgICAgIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICIzZ3BwbXV4IiwKLSAgICAgICAgIjNHUFAiLAotICAgICAgICAiR3N0M0dQUE11eCIsCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3F1aWNrdGltZSwgdmFyaWFudCA9IChzdHJpbmcpIDNncHAiKSwKLSAgICAgICAgR1NUX1NUQVRJQ19DQVBTIChIMjYzX0NBUFMgIjsgIiBNUEVHNFZfQ0FQUyAiOyAiIEgyNjRfQ0FQUyksCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoQU1SX0NBUFMgIjsgIiBNUDNfQ0FQUyAiOyAiIEFBQ19DQVBTICI7ICIgQUMzX0NBUFMpLAotICAgICAgR1NUX1NUQVRJQ19DQVBTIChURVhUX1VURjgpfQotICAsCi0gIC8qIElTTyAxNTQ0NC0zOiBNb3Rpb24tSlBFRy0yMDAwIChhbHNvIElTTyBiYXNlIG1lZGlhIGV4dGVuc2lvbikgKi8KLSAgewotICAgICAgICBHU1RfUVRfTVVYX0ZPUk1BVF9NSjIsCi0gICAgICAgIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICJtajJtdXgiLAotICAgICAgICAiTUoyIiwKLSAgICAgICAgIkdzdE1KMk11eCIsCi0gICAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL21qMiIpLAotICAgICAgICBHU1RfU1RBVElDX0NBUFMgKCJpbWFnZS94LWoyYywgIiBDT01NT05fVklERU9fQ0FQUyAiOyAiCi0gICAgICAgICAgICAiaW1hZ2UveC1qcGMsICIgQ09NTU9OX1ZJREVPX0NBUFMpLAotICAgICAgICBHU1RfU1RBVElDX0NBUFMgKFBDTV9DQVBTKSwKLSAgICAgIEdTVF9TVEFUSUNfQ0FQU19OT05FfQotICAsCi0gIHsKLSAgICAgICAgR1NUX1FUX01VWF9GT1JNQVRfTk9ORSwKLSAgICAgIH0KLX07Ci0KLS8qIHByZXR0eSBzdGF0aWMsIGJ1dCBtYXkgdHVybiBvdXQgbmVlZGVkIGEgZmV3IHRpbWVzICovCi1BdG9tc1RyZWVGbGF2b3IKLWdzdF9xdF9tdXhfbWFwX2Zvcm1hdF90b19mbGF2b3IgKEdzdFFUTXV4Rm9ybWF0IGZvcm1hdCkKLXsKLSAgaWYgKGZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9RVCkKLSAgICByZXR1cm4gQVRPTVNfVFJFRV9GTEFWT1JfTU9WOwotICBlbHNlIGlmIChmb3JtYXQgPT0gR1NUX1FUX01VWF9GT1JNQVRfM0dQKQotICAgIHJldHVybiBBVE9NU19UUkVFX0ZMQVZPUl8zR1A7Ci0gIGVsc2UgaWYgKGZvcm1hdCA9PSBHU1RfUVRfTVVYX0ZPUk1BVF9JU01MKQotICAgIHJldHVybiBBVE9NU19UUkVFX0ZMQVZPUl9JU01MOwotICBlbHNlCi0gICAgcmV0dXJuIEFUT01TX1RSRUVfRkxBVk9SX0lTT007Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRfbXV4X21hcF9jaGVja190cmFja3MgKEF0b21NT09WICogbW9vdiwgZ2ludCAqIF92aWRlbywgZ2ludCAqIF9hdWRpbywKLSAgICBnYm9vbGVhbiAqIF9oYXNfaDI2NCkKLXsKLSAgR0xpc3QgKml0OwotICBnaW50IHZpZGVvID0gMCwgYXVkaW8gPSAwOwotICBnYm9vbGVhbiBoYXNfaDI2NCA9IEZBTFNFOwotCi0gIGZvciAoaXQgPSBtb292LT50cmFrczsgaXQgIT0gTlVMTDsgaXQgPSBnX2xpc3RfbmV4dCAoaXQpKSB7Ci0gICAgQXRvbVRSQUsgKnRyYWNrID0gaXQtPmRhdGE7Ci0KLSAgICBpZiAodHJhY2stPmlzX3ZpZGVvKSB7Ci0gICAgICB2aWRlbysrOwotICAgICAgaWYgKHRyYWNrLT5pc19oMjY0KQotICAgICAgICBoYXNfaDI2NCA9IFRSVUU7Ci0gICAgfSBlbHNlCi0gICAgICBhdWRpbysrOwotICB9Ci0KLSAgaWYgKF92aWRlbykKLSAgICAqX3ZpZGVvID0gdmlkZW87Ci0gIGlmIChfYXVkaW8pCi0gICAgKl9hdWRpbyA9IGF1ZGlvOwotICBpZiAoX2hhc19oMjY0KQotICAgICpfaGFzX2gyNjQgPSBoYXNfaDI2NDsKLX0KLQotLyogcHJldHR5IHN0YXRpYywgYnV0IHBvc3NpYmx5IGR5bmFtaWMgZm9ybWF0IGluZm8gKi8KLQotLyogbm90ZXM6Ci0gKiAtIGF2YzEgYnJhbmQgaXMgbm90IHVzZWQsIHNpbmNlIHRoZSBzcGVjaWZpYyBleHRlbnNpb25zIGluZGljYXRlZCBieSBpdAotICogICBhcmUgbm90IHVzZWQgKGUuZy4gc2FtcGxlIGdyb3VwaW5ncywgZXRjKQotICogLSBUT0RPOiBtYXliZSBldmVuIG1vcmUgM0dQUCBicmFuZCBmaW5lLXR1bmluZyA/PwotICogICAoYnV0IHRoYXQgbWlnaHQgbmVlZCBmdHlwIHJld3JpdGluZyBhdCB0aGUgZW5kKSAqLwotdm9pZAotZ3N0X3F0X211eF9tYXBfZm9ybWF0X3RvX2hlYWRlciAoR3N0UVRNdXhGb3JtYXQgZm9ybWF0LCBHc3RCdWZmZXIgKiogX3ByZWZpeCwKLSAgICBndWludDMyICogX21ham9yLCBndWludDMyICogX3ZlcnNpb24sIEdMaXN0ICoqIF9jb21wYXRpYmxlLCBBdG9tTU9PViAqIG1vb3YsCi0gICAgR3N0Q2xvY2tUaW1lIGxvbmdlc3RfY2h1bmssIGdib29sZWFuIGZhc3RzdGFydCkKLXsKLSAgc3RhdGljIGNvbnN0IGd1aW50MzIgcXRfYnJhbmRzW10gPSB7IDAgfTsKLSAgc3RhdGljIGNvbnN0IGd1aW50MzIgbXA0X2JyYW5kc1tdID0KLSAgICAgIHsgRk9VUkNDX21wNDEsIEZPVVJDQ19pc29tLCBGT1VSQ0NfaXNvMiwgMCB9OwotICBzdGF0aWMgY29uc3QgZ3VpbnQzMiBpc21sX2JyYW5kc1tdID0geyBGT1VSQ0NfaXNvMiwgMCB9OwotICBzdGF0aWMgY29uc3QgZ3VpbnQzMiBncHBfYnJhbmRzW10gPSB7IEZPVVJDQ19pc29tLCBGT1VSQ0NfaXNvMiwgMCB9OwotICBzdGF0aWMgY29uc3QgZ3VpbnQzMiBtanAyX2JyYW5kc1tdID0geyBGT1VSQ0NfaXNvbSwgRk9VUkNDX2lzbzIsIDAgfTsKLSAgc3RhdGljIGNvbnN0IGd1aW50OCBtanAyX3ByZWZpeFtdID0KLSAgICAgIHsgMCwgMCwgMCwgMTIsICdqJywgJ1AnLCAnICcsICcgJywgMHgwRCwgMHgwQSwgMHg4NywgMHgwQSB9OwotICBjb25zdCBndWludDMyICpjb21wID0gTlVMTDsKLSAgZ3VpbnQzMiBtYWpvciA9IDAsIHZlcnNpb24gPSAwOwotICBHc3RCdWZmZXIgKnByZWZpeCA9IE5VTEw7Ci0gIEdMaXN0ICpyZXN1bHQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKF9wcmVmaXggIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKF9tYWpvciAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoX3ZlcnNpb24gIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKF9jb21wYXRpYmxlICE9IE5VTEwpOwotCi0gIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfUVRfTVVYX0ZPUk1BVF9RVDoKLSAgICAgIG1ham9yID0gRk9VUkNDX3F0X187Ci0gICAgICBjb21wID0gcXRfYnJhbmRzOwotICAgICAgdmVyc2lvbiA9IDB4MjAwNTAzMDA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVF9NVVhfRk9STUFUX01QNDoKLSAgICAgIG1ham9yID0gRk9VUkNDX21wNDI7Ci0gICAgICBjb21wID0gbXA0X2JyYW5kczsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FUX01VWF9GT1JNQVRfSVNNTDoKLSAgICAgIG1ham9yID0gRk9VUkNDX2lzbWw7Ci0gICAgICBjb21wID0gaXNtbF9icmFuZHM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVF9NVVhfRk9STUFUXzNHUDoKLSAgICB7Ci0gICAgICBnaW50IHZpZGVvLCBhdWRpbzsKLSAgICAgIGdib29sZWFuIGhhc19oMjY0OwotCi0gICAgICBnc3RfcXRfbXV4X21hcF9jaGVja190cmFja3MgKG1vb3YsICZ2aWRlbywgJmF1ZGlvLCAmaGFzX2gyNjQpOwotICAgICAgLyogb25seSB0cmFjayByZXN0cmljdGlvbiByZWFsbHkgbWF0dGVycyBmb3IgQmFzaWMgUHJvZmlsZSAqLwotICAgICAgaWYgKHZpZGVvIDw9IDEgJiYgYXVkaW8gPD0gMSkgewotICAgICAgICAvKiBpdCBzZWVtcyBvbmx5IG5ld2VyIHNwZWMga25vd3MgYWJvdXQgSDI2NCAqLwotICAgICAgICBtYWpvciA9IGhhc19oMjY0ID8gRk9VUkNDXzNncDYgOiBGT1VSQ0NfM2dwNDsKLSAgICAgICAgdmVyc2lvbiA9IGhhc19oMjY0ID8gMHgxMDAgOiAweDIwMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1ham9yID0gRk9VUkNDXzNnZzY7Ci0gICAgICAgIHZlcnNpb24gPSAweDEwMDsKLSAgICAgIH0KLSAgICAgIGNvbXAgPSBncHBfYnJhbmRzOwotCi0gICAgICAvKgotICAgICAgICogV2UgYXNzdW1lIHRoYXQgd2UgaGF2ZSBjaHVua3MgaW4gZHRzIG9yZGVyCi0gICAgICAgKi8KLSAgICAgIGlmIChmYXN0c3RhcnQgJiYgbG9uZ2VzdF9jaHVuayA8PSBHU1RfU0VDT05EKSB7Ci0gICAgICAgIC8qIGFkZCBwcm9ncmVzc2l2ZSBkb3dubG9hZCBwcm9maWxlICovCi0gICAgICAgIHJlc3VsdCA9IGdfbGlzdF9hcHBlbmQgKHJlc3VsdCwgR1VJTlRfVE9fUE9JTlRFUiAoRk9VUkNDXzNncjYpKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVF9NVVhfRk9STUFUX01KMjoKLSAgICB7Ci0gICAgICBtYWpvciA9IEZPVVJDQ19tanAyOwotICAgICAgY29tcCA9IG1qcDJfYnJhbmRzOwotICAgICAgdmVyc2lvbiA9IDA7Ci0gICAgICBwcmVmaXggPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAobWpwMl9wcmVmaXgpKTsKLSAgICAgIGdzdF9idWZmZXJfZmlsbCAocHJlZml4LCAwLCBtanAyX3ByZWZpeCwgc2l6ZW9mIChtanAyX3ByZWZpeCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogY29udmVydCBsaXN0IHRvIGxpc3QsIGhtICovCi0gIHdoaWxlIChjb21wICYmICpjb21wICE9IDApIHsKLSAgICAvKiBvcmRlciBtYXR0ZXJzIG92ZXIgZWZmaWNpZW5jeSAqLwotICAgIHJlc3VsdCA9IGdfbGlzdF9hcHBlbmQgKHJlc3VsdCwgR1VJTlRfVE9fUE9JTlRFUiAoKmNvbXApKTsKLSAgICBjb21wKys7Ci0gIH0KLQotICAqX21ham9yID0gbWFqb3I7Ci0gICpfdmVyc2lvbiA9IHZlcnNpb247Ci0gICpfcHJlZml4ID0gcHJlZml4OwotICAqX2NvbXBhdGlibGUgPSByZXN1bHQ7Ci0KLSAgLyogVE9ETyAzR1BQIG1heSBpbmNsdWRlIG1wNDIgYXMgY29tcGF0aWJsZSBpZiBhcHBsaWNhYmxlICovCi0gIC8qIFRPRE8gM0dQUCBtYWpvciBicmFuZCAzZ3A3IGlmIGF0IG1vc3QgMSB2aWRlbyBhbmQgYXVkaW8gdHJhY2sgKi8KLX0KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvZ3N0cXRtdXhtYXAuaCBiL2dzdC9pc29tcDQvZ3N0cXRtdXhtYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3OGEzNi4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2dzdHF0bXV4bWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiBRdWlja3RpbWUgbXV4ZXIgcGx1Z2luIGZvciBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGlhZ28gU291c2EgU2FudG9zIDx0aGlhZ29zc0BlbWJlZGRlZC51ZmNnLmVkdS5icj4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qCi0gKiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgU291cmNlIENvZGUgaXMgbGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBTZWUgZnVydGhlciBleHBsYW5hdGlvbiBhdHRhY2hlZCBpbiBMaWNlbnNlIFN0YXRlbWVudCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGZpbGUKLSAqIExJQ0VOU0UpLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1FUX01VWF9NQVBfSF9fCi0jZGVmaW5lIF9fR1NUX1FUX01VWF9NQVBfSF9fCi0KLSNpbmNsdWRlICJhdG9tcy5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotdHlwZWRlZiBlbnVtIF9Hc3RRVE11eEZvcm1hdAotewotICBHU1RfUVRfTVVYX0ZPUk1BVF9OT05FID0gMCwKLSAgR1NUX1FUX01VWF9GT1JNQVRfUVQsCi0gIEdTVF9RVF9NVVhfRk9STUFUX01QNCwKLSAgR1NUX1FUX01VWF9GT1JNQVRfM0dQLAotICBHU1RfUVRfTVVYX0ZPUk1BVF9NSjIsCi0gIEdTVF9RVF9NVVhfRk9STUFUX0lTTUwKLX0gR3N0UVRNdXhGb3JtYXQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RRVE11eEZvcm1hdFByb3AKLXsKLSAgR3N0UVRNdXhGb3JtYXQgZm9ybWF0OwotICBHc3RSYW5rIHJhbms7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBjb25zdCBnY2hhciAqbG9uZ19uYW1lOwotICBjb25zdCBnY2hhciAqdHlwZV9uYW1lOwotICBHc3RTdGF0aWNDYXBzIHNyY19jYXBzOwotICBHc3RTdGF0aWNDYXBzIHZpZGVvX3NpbmtfY2FwczsKLSAgR3N0U3RhdGljQ2FwcyBhdWRpb19zaW5rX2NhcHM7Ci0gIEdzdFN0YXRpY0NhcHMgc3VidGl0bGVfc2lua19jYXBzOwotfSBHc3RRVE11eEZvcm1hdFByb3A7Ci0KLWV4dGVybiBHc3RRVE11eEZvcm1hdFByb3AgZ3N0X3F0X211eF9mb3JtYXRfbGlzdFtdOwotCi12b2lkICAgICAgICAgICAgZ3N0X3F0X211eF9tYXBfZm9ybWF0X3RvX2hlYWRlciAgICAgIChHc3RRVE11eEZvcm1hdCBmb3JtYXQsIEdzdEJ1ZmZlciAqKiBfcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAqIF9tYWpvciwgZ3VpbnQzMiAqIHZlcnNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaXN0ICoqIF9jb21wYXRpYmxlLCBBdG9tTU9PViAqIG1vb3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbG9uZ2VzdF9jaHVuaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGZhc3RzdGFydCk7Ci0KLUF0b21zVHJlZUZsYXZvciBnc3RfcXRfbXV4X21hcF9mb3JtYXRfdG9fZmxhdm9yICAgICAgKEdzdFFUTXV4Rm9ybWF0IGZvcm1hdCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9RVF9NVVhfTUFQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5jIGIvZ3N0L2lzb21wNC9nc3RydHB4cXRkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTNjNjBlLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDY4NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIGJhc2VkIG9uIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3F1aWNrdGltZS9pY2VmbG9lL2Rpc3BhdGNoMDI2Lmh0bWwKLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRweHF0ZGVwYXkuaCIKLQotI2RlZmluZSBNQUtFX1RMVihhLGIpICAoKChhKTw8OCl8KGIpKQotCi0jZGVmaW5lIFRMVl9zZAlNQUtFX1RMViAoJ3MnLCdkJykKLSNkZWZpbmUgVExWX3F0CU1BS0VfVExWICgncScsJ3QnKQotI2RlZmluZSBUTFZfdGkJTUFLRV9UTFYgKCd0JywnaScpCi0jZGVmaW5lIFRMVl9seQlNQUtFX1RMViAoJ2wnLCd5JykKLSNkZWZpbmUgVExWX3ZvCU1BS0VfVExWICgndicsJ28nKQotI2RlZmluZSBUTFZfbXgJTUFLRV9UTFYgKCdtJywneCcpCi0jZGVmaW5lIFRMVl90cglNQUtFX1RMViAoJ3QnLCdyJykKLSNkZWZpbmUgVExWX3R3CU1BS0VfVExWICgndCcsJ3cnKQotI2RlZmluZSBUTFZfdGgJTUFLRV9UTFYgKCd0JywnaCcpCi0jZGVmaW5lIFRMVl9sYQlNQUtFX1RMViAoJ2wnLCdhJykKLSNkZWZpbmUgVExWX3J0CU1BS0VfVExWICgncicsJ3QnKQotI2RlZmluZSBUTFZfZ20JTUFLRV9UTFYgKCdnJywnbScpCi0jZGVmaW5lIFRMVl9vYwlNQUtFX1RMViAoJ28nLCdjJykKLSNkZWZpbmUgVExWX2NyCU1BS0VfVExWICgnYycsJ3InKQotI2RlZmluZSBUTFZfZHUJTUFLRV9UTFYgKCdkJywndScpCi0jZGVmaW5lIFRMVl9wbwlNQUtFX1RMViAoJ3AnLCdvJykKLQotI2RlZmluZSBRVF9VSU5UMzIoYSkgIChHU1RfUkVBRF9VSU5UMzJfQkUoYSkpCi0jZGVmaW5lIFFUX1VJTlQyNChhKSAgKEdTVF9SRUFEX1VJTlQzMl9CRShhKSA+PiA4KQotI2RlZmluZSBRVF9VSU5UMTYoYSkgIChHU1RfUkVBRF9VSU5UMTZfQkUoYSkpCi0jZGVmaW5lIFFUX1VJTlQ4KGEpICAgKEdTVF9SRUFEX1VJTlQ4KGEpKQotI2RlZmluZSBRVF9GUDMyKGEpICAgICgoR1NUX1JFQURfVUlOVDMyX0JFKGEpKS82NTUzNi4wKQotI2RlZmluZSBRVF9GUDE2KGEpICAgICgoR1NUX1JFQURfVUlOVDE2X0JFKGEpKS8yNTYuMCkKLSNkZWZpbmUgUVRfRk9VUkNDKGEpICAoR1NUX1JFQURfVUlOVDMyX0xFKGEpKQotI2RlZmluZSBRVF9VSU5UNjQoYSkgICgoKChndWludDY0KVFUX1VJTlQzMihhKSk8PDMyKXxRVF9VSU5UMzIoKChndWludDggKilhKSs0KSkKLQotI2RlZmluZSBGT1VSQ0NfYXZjMSAgICAgR1NUX01BS0VfRk9VUkNDKCdhJywndicsJ2MnLCcxJykKLSNkZWZpbmUgRk9VUkNDX2F2YzMgICAgIEdTVF9NQUtFX0ZPVVJDQygnYScsJ3YnLCdjJywnMycpCi0jZGVmaW5lIEZPVVJDQ19hdmNDICAgICBHU1RfTUFLRV9GT1VSQ0MoJ2EnLCd2JywnYycsJ0MnKQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHB4cXRkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRweHF0ZGVwYXlfZGVidWcpCi0KLS8qIFJ0cFhRVERlcGF5IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF94cXRfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfeHF0X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIHsgXCJhdWRpb1wiLCBcInZpZGVvXCIgfSwgY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVhdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgeyBcIlgtUVRcIiwgXCJYLVFVSUNLVElNRVwiIH0iKQotICAgICk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF94cXRfZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwWFFURGVwYXksIGdzdF9ydHBfeHF0X2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3hxdF9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3hxdF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfeHF0X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfeHF0X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfeHF0X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFhRVERlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF94cXRfZGVwYXlfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF94cXRfZGVwYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF94cXRfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2VzcyA9IGdzdF9ydHBfeHF0X2RlcGF5X3Byb2Nlc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cHhxdGRlcGF5X2RlYnVnLCAicnRweHF0ZGVwYXkiLCAwLAotICAgICAgIlFUIE1lZGlhIFJUUCBEZXBheWxvYWRlciIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfeHF0X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfeHF0X2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIHBhY2tldCBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrIiwKLSAgICAgICJFeHRyYWN0cyBRdWlja3RpbWUgYXVkaW8vdmlkZW8gZnJvbSBSVFAgcGFja2V0cyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfeHF0X2RlcGF5X2luaXQgKEdzdFJ0cFhRVERlcGF5ICogcnRweHF0ZGVwYXkpCi17Ci0gIHJ0cHhxdGRlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF94cXRfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFhRVERlcGF5ICpydHB4cXRkZXBheTsKLQotICBydHB4cXRkZXBheSA9IEdTVF9SVFBfWFFUX0RFUEFZIChvYmplY3QpOwotCi0gIGdfb2JqZWN0X3VucmVmIChydHB4cXRkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cHhxdGRlcGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9xdWlja3RpbWVfcGFyc2Vfc2QgKEdzdFJ0cFhRVERlcGF5ICogcnRweHF0ZGVwYXksIGd1aW50OCAqIGRhdGEsCi0gICAgZ3VpbnQgZGF0YV9sZW4pCi17Ci0gIGdpbnQgbGVuOwotICBndWludDMyIGZvdXJjYzsKLQotICBpZiAoZGF0YV9sZW4gPCA4KQotICAgIGdvdG8gdG9vX3Nob3J0OwotCi0gIGxlbiA9IChkYXRhWzBdIDw8IDI0KSB8IChkYXRhWzFdIDw8IDE2KSB8IChkYXRhWzJdIDw8IDgpIHwgZGF0YVszXTsKLSAgaWYgKGxlbiA+IGRhdGFfbGVuKQotICAgIGdvdG8gdG9vX3Nob3J0OwotCi0gIGZvdXJjYyA9IFFUX0ZPVVJDQyAoZGF0YSArIDQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHhxdGRlcGF5LCAicGFyc2luZyAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0KLSAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICBjYXNlIEZPVVJDQ19hdmMxOgotICAgIGNhc2UgRk9VUkNDX2F2YzM6Ci0gICAgewotICAgICAgZ3VpbnQzMiBjaGxlbjsKLQotICAgICAgaWYgKGxlbiA8IDB4NTYpCi0gICAgICAgIGdvdG8gdG9vX3Nob3J0OwotICAgICAgbGVuIC09IDB4NTY7Ci0gICAgICBkYXRhICs9IDB4NTY7Ci0KLSAgICAgIC8qIGZpbmQgYXZjQyAqLwotICAgICAgd2hpbGUgKGxlbiA+PSA4KSB7Ci0gICAgICAgIGNobGVuID0gUVRfVUlOVDMyIChkYXRhKTsKLSAgICAgICAgZm91cmNjID0gUVRfRk9VUkNDIChkYXRhICsgNCk7Ci0gICAgICAgIGlmIChmb3VyY2MgPT0gRk9VUkNDX2F2Y0MpIHsKLSAgICAgICAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICAgICAgICBnaW50IHNpemU7Ci0gICAgICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHhxdGRlcGF5LCAiZm91bmQgYXZjQyBjb2RlY19kYXRhIGluIHNkLCAldSIsCi0gICAgICAgICAgICAgIGNobGVuKTsKLQotICAgICAgICAgIC8qIHBhcnNlLCBpZiBmb3VuZCAqLwotICAgICAgICAgIGlmIChjaGxlbiA8IGxlbikKLSAgICAgICAgICAgIHNpemUgPSBjaGxlbiAtIDg7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2l6ZSA9IGxlbiAtIDg7Ci0KLSAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBkYXRhICsgOCwgc2l6ZSk7Ci0gICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWgyNjQiLAotICAgICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQUQgKHJ0cHhxdGRlcGF5KS0+c3JjcGFkLCBjYXBzKTsKLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuIC09IGNobGVuOwotICAgICAgICBkYXRhICs9IGNobGVuOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zaG9ydDoKLSAgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfeHF0X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgLyogZGVmYXVsdCAqLwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKTsKLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX3hxdF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFJ0cFhRVERlcGF5ICpydHB4cXRkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBnYm9vbGVhbiBtOwotICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0KLSAgcnRweHF0ZGVwYXkgPSBHU1RfUlRQX1hRVF9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9SRUFELCAmcnRwKTsKLQotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWYpKSB7Ci0gICAgLyogZGlzY29udCwgY2xlYXIgYWRhcHRlciBhbmQgdHJ5IHRvIGZpbmQgYSBuZXcgcGFja2V0IHN0YXJ0ICovCi0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cHhxdGRlcGF5LT5hZGFwdGVyKTsKLSAgICBydHB4cXRkZXBheS0+bmVlZF9yZXN5bmMgPSBUUlVFOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHhxdGRlcGF5LCAid2UgbmVlZCByZXN5bmMiKTsKLSAgfQotCi0gIG0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyICgmcnRwKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cHhxdGRlcGF5LCAibWFya2VyOiAlZCIsIG0pOwotCi0gIHsKLSAgICBnaW50IHBheWxvYWRfbGVuOwotICAgIGd1aW50IGF2YWlsOwotICAgIGd1aW50OCAqcGF5bG9hZDsKLSAgICBndWludDggdmVyLCBwY2s7Ci0gICAgZ2Jvb2xlYW4gcywgcSwgbCwgZDsKLQotICAgIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuICgmcnRwKTsKLSAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotCi0gICAgLyogICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMgCi0gICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfCBWRVIgICB8UENLfFN8UXxMfCBSRVMgICAgICAgICB8RHwgUXVpY2tUaW1lIFBheWxvYWQgSUQgICAgICAgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqLwotICAgIGlmIChwYXlsb2FkX2xlbiA8PSA0KQotICAgICAgZ290byB3cm9uZ19sZW5ndGg7Ci0KLSAgICB2ZXIgPSAocGF5bG9hZFswXSAmIDB4ZjApID4+IDQ7Ci0gICAgaWYgKHZlciA+IDEpCi0gICAgICBnb3RvIHdyb25nX3ZlcnNpb247Ci0KLSAgICBwY2sgPSAocGF5bG9hZFswXSAmIDB4MGMpID4+IDI7Ci0gICAgaWYgKHBjayA9PSAwKQotICAgICAgZ290byBwY2tfcmVzZXJ2ZWQ7Ci0KLSAgICBzID0gKHBheWxvYWRbMF0gJiAweDAyKSAhPSAwOyAgICAgICAvKiBjb250YWlucyBzeW5jIHNhbXBsZSAqLwotICAgIHEgPSAocGF5bG9hZFswXSAmIDB4MDEpICE9IDA7ICAgICAgIC8qIGhhcyBwYXlsb2FkIGRlc2NyaXB0aW9uICovCi0gICAgbCA9IChwYXlsb2FkWzFdICYgMHg4MCkgIT0gMDsgICAgICAgLyogaGFzIHBhY2tldCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBkZXNjcmlwdGlvbiAqLwotICAgIGQgPSAocGF5bG9hZFsyXSAmIDB4ODApICE9IDA7ICAgICAgIC8qIGRvbid0IGNhY2hlIGluZm8gZm9yIHBheWxvYWQgaWQgKi8KLSAgICAvKiBpZCB1c2VkIGZvciBjYWNoaW5nIGluZm8gKi8KLSAgICBydHB4cXRkZXBheS0+Y3VycmVudF9pZCA9ICgocGF5bG9hZFsyXSAmIDB4N2YpIDw8IDgpIHwgcGF5bG9hZFszXTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChydHB4cXRkZXBheSwKLSAgICAgICAgIlZFUjogJWQsIFBDSzogJWQsIFM6ICVkLCBROiAlZCwgTDogJWQsIEQ6ICVkLCBJRDogJWQiLCB2ZXIsIHBjaywgcywgcSwKLSAgICAgICAgbCwgZCwgcnRweHF0ZGVwYXktPmN1cnJlbnRfaWQpOwotCi0gICAgaWYgKHJ0cHhxdGRlcGF5LT5uZWVkX3Jlc3luYykgewotICAgICAgLyogd2UgbmVlZCB0byBmaW5kIHRoZSBib3VuZGFyeSBvZiBhIG5ldyBwYWNrZXQgYWZ0ZXIgYSBESVNDT05UICovCi0gICAgICBpZiAocGNrICE9IDMgfHwgcSkgewotICAgICAgICAvKiBub24tZnJhZ21lbnRlZCBwYWNrZXQgb3IgcGF5bG9hZCBkZXNjcmlwdGlvbiBwcmVzZW50LCBwYWNrZXQgc3RhcnRzCi0gICAgICAgICAqIGhlcmUuICovCi0gICAgICAgIHJ0cHhxdGRlcGF5LT5uZWVkX3Jlc3luYyA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogZnJhZ21lbnRlZCBwYWNrZXQgd2l0aG91dCBkZXNjcmlwdGlvbiAqLwotICAgICAgICBpZiAobSkgewotICAgICAgICAgIC8qIG1hcmtlciBiaXQgc2V0LCBuZXh0IHBhY2tldCBpcyBzdGFydCBvZiBuZXcgb25lICovCi0gICAgICAgICAgcnRweHF0ZGVwYXktPm5lZWRfcmVzeW5jID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgZ290byBuZWVkX3Jlc3luYzsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwYXlsb2FkICs9IDQ7Ci0gICAgcGF5bG9hZF9sZW4gLT0gNDsKLQotICAgIGlmIChxKSB7Ci0gICAgICBnYm9vbGVhbiBrLCBmLCBhLCB6OwotICAgICAgZ3VpbnQgcGRsZW4sIHBkcGFkZGVkOwotICAgICAgZ2ludCBwYWRkaW5nOwotICAgICAgLyogbWVkaWFfdHlwZSBvbmx5IHVzZWQgZm9yIHByaW50aW5nICovCi0gICAgICBndWludDMyIEdfR05VQ19VTlVTRUQgbWVkaWFfdHlwZTsKLSAgICAgIGd1aW50MzIgdGltZXNjYWxlOwotCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHxLfEZ8QXxafCBSRVMgICAgICAgICAgICAgICAgICAgfCBRdWlja1RpbWUgUGF5bG9hZCBEZXNjIExlbmd0aCB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICogLiBRdWlja1RpbWUgUGF5bG9hZCBEZXNjIERhdGEgLi4uIC4gCi0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICovCi0gICAgICBpZiAocGF5bG9hZF9sZW4gPD0gNCkKLSAgICAgICAgZ290byB3cm9uZ19sZW5ndGg7Ci0KLSAgICAgIGsgPSAocGF5bG9hZFswXSAmIDB4ODApICE9IDA7ICAgICAvKiBrZXlmcmFtZSAqLwotICAgICAgZiA9IChwYXlsb2FkWzBdICYgMHg0MCkgIT0gMDsgICAgIC8qIHNwYXJzZSAqLwotICAgICAgYSA9IChwYXlsb2FkWzBdICYgMHgyMCkgIT0gMDsgICAgIC8qIHN0YXJ0IG9mIHBheWxvYWQgKi8KLSAgICAgIHogPSAocGF5bG9hZFswXSAmIDB4MTApICE9IDA7ICAgICAvKiBlbmQgb2YgcGF5bG9hZCAqLwotICAgICAgcGRsZW4gPSAocGF5bG9hZFsyXSA8PCA4KSB8IHBheWxvYWRbM107Ci0KLSAgICAgIGlmIChwZGxlbiA8IDEyKQotICAgICAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAgICAgLyogY2FsYyBwYWRkaW5nICovCi0gICAgICBwZHBhZGRlZCA9IHBkbGVuICsgMzsKLSAgICAgIHBkcGFkZGVkIC09IHBkcGFkZGVkICUgNDsKLSAgICAgIGlmIChwYXlsb2FkX2xlbiA8IHBkcGFkZGVkKQotICAgICAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAgICAgcGFkZGluZyA9IHBkcGFkZGVkIC0gcGRsZW47Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRweHF0ZGVwYXksCi0gICAgICAgICAgIks6ICVkLCBGOiAlZCwgQTogJWQsIFo6ICVkLCBsZW46ICVkLCBwYWRkaW5nICVkIiwgaywgZiwgYSwgeiwgcGRsZW4sCi0gICAgICAgICAgcGFkZGluZyk7Ci0KLSAgICAgIHBheWxvYWQgKz0gNDsKLSAgICAgIHBheWxvYWRfbGVuIC09IDQ7Ci0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHwgUXVpY2tUaW1lIE1lZGlhIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICogfCBUaW1lc2NhbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKiAuIFF1aWNrVGltZSBUTFZzIC4uLiAuCi0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICovCi0gICAgICBtZWRpYV90eXBlID0KLSAgICAgICAgICAocGF5bG9hZFswXSA8PCAyNCkgfCAocGF5bG9hZFsxXSA8PCAxNikgfCAocGF5bG9hZFsyXSA8PCA4KSB8Ci0gICAgICAgICAgcGF5bG9hZFszXTsKLSAgICAgIHRpbWVzY2FsZSA9Ci0gICAgICAgICAgKHBheWxvYWRbNF0gPDwgMjQpIHwgKHBheWxvYWRbNV0gPDwgMTYpIHwgKHBheWxvYWRbNl0gPDwgOCkgfAotICAgICAgICAgIHBheWxvYWRbN107Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHB4cXRkZXBheSwgIm1lZGlhX3R5cGU6ICVjJWMlYyVjLCB0aW1lc2NhbGUgJXUiLAotICAgICAgICAgIHBheWxvYWRbMF0sIHBheWxvYWRbMV0sIHBheWxvYWRbMl0sIHBheWxvYWRbM10sIHRpbWVzY2FsZSk7Ci0KLSAgICAgIHBheWxvYWQgKz0gODsKLSAgICAgIHBheWxvYWRfbGVuIC09IDg7Ci0gICAgICBwZGxlbiAtPSAxMjsKLQotICAgICAgLyogcGFyc2UgVExWICh0eXBlLWxlbmd0aC12YWx1ZSB0cmlwbGV0cyAqLwotICAgICAgd2hpbGUgKHBkbGVuID4gMykgewotICAgICAgICBndWludDE2IHRsdl9sZW4sIHRsdl90eXBlOwotCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAgICAgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogfCBRdWlja1RpbWUgVExWIExlbmd0aCAgICAgICAgICB8IFF1aWNrVGltZSBUTFYgVHlwZSAgICAgICAgICAgIHwKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogLiBRdWlja1RpbWUgVExWIFZhbHVlIC4uLiAuCi0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAqLwotICAgICAgICB0bHZfbGVuID0gKHBheWxvYWRbMF0gPDwgOCkgfCBwYXlsb2FkWzFdOwotICAgICAgICB0bHZfdHlwZSA9IChwYXlsb2FkWzJdIDw8IDgpIHwgcGF5bG9hZFszXTsKLSAgICAgICAgcGRsZW4gLT0gNDsKLSAgICAgICAgaWYgKHRsdl9sZW4gPiBwZGxlbikKLSAgICAgICAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRweHF0ZGVwYXksICJUTFYgJyVjJWMnLCBsZW4gJWQiLCBwYXlsb2FkWzJdLAotICAgICAgICAgICAgcGF5bG9hZFszXSwgdGx2X2xlbik7Ci0KLSAgICAgICAgcGF5bG9hZCArPSA0OwotICAgICAgICBwYXlsb2FkX2xlbiAtPSA0OwotCi0gICAgICAgIHN3aXRjaCAodGx2X3R5cGUpIHsKLSAgICAgICAgICBjYXNlIFRMVl9zZDoKLSAgICAgICAgICAgIC8qIFNlc3Npb24gZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgIGlmICghZ3N0X3J0cF9xdWlja3RpbWVfcGFyc2Vfc2QgKHJ0cHhxdGRlcGF5LCBwYXlsb2FkLCB0bHZfbGVuKSkKLSAgICAgICAgICAgICAgZ290byB1bmtub3duX2Zvcm1hdDsKLSAgICAgICAgICAgIHJ0cHhxdGRlcGF5LT5oYXZlX3NkID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVExWX3F0OgotICAgICAgICAgIGNhc2UgVExWX3RpOgotICAgICAgICAgIGNhc2UgVExWX2x5OgotICAgICAgICAgIGNhc2UgVExWX3ZvOgotICAgICAgICAgIGNhc2UgVExWX214OgotICAgICAgICAgIGNhc2UgVExWX3RyOgotICAgICAgICAgIGNhc2UgVExWX3R3OgotICAgICAgICAgIGNhc2UgVExWX3RoOgotICAgICAgICAgIGNhc2UgVExWX2xhOgotICAgICAgICAgIGNhc2UgVExWX3J0OgotICAgICAgICAgIGNhc2UgVExWX2dtOgotICAgICAgICAgIGNhc2UgVExWX29jOgotICAgICAgICAgIGNhc2UgVExWX2NyOgotICAgICAgICAgIGNhc2UgVExWX2R1OgotICAgICAgICAgIGNhc2UgVExWX3BvOgotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHBkbGVuIC09IHRsdl9sZW47Ci0gICAgICAgIHBheWxvYWQgKz0gdGx2X2xlbjsKLSAgICAgICAgcGF5bG9hZF9sZW4gLT0gdGx2X2xlbjsKLSAgICAgIH0KLSAgICAgIHBheWxvYWQgKz0gcGFkZGluZzsKLSAgICAgIHBheWxvYWRfbGVuIC09IHBhZGRpbmc7Ci0gICAgfQotCi0gICAgaWYgKGwpIHsKLSAgICAgIGd1aW50IHNzaWxlbiwgc3NpcGFkZGVkOwotICAgICAgZ2ludCBwYWRkaW5nOwotCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHwgUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTYW1wbGUtU3BlY2lmaWMgSW5mbyBMZW5ndGggICB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICogLiBRdWlja1RpbWUgVExWcyAuLi4gCi0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICovCi0gICAgICBpZiAocGF5bG9hZF9sZW4gPD0gNCkKLSAgICAgICAgZ290byB3cm9uZ19sZW5ndGg7Ci0KLSAgICAgIHNzaWxlbiA9IChwYXlsb2FkWzJdIDw8IDgpIHwgcGF5bG9hZFszXTsKLSAgICAgIGlmIChzc2lsZW4gPCA0KQotICAgICAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAgICAgLyogY2FsYyBwYWRkaW5nICovCi0gICAgICBzc2lwYWRkZWQgPSBzc2lsZW4gKyAzOwotICAgICAgc3NpcGFkZGVkIC09IHNzaXBhZGRlZCAlIDQ7Ci0gICAgICBpZiAocGF5bG9hZF9sZW4gPCBzc2lwYWRkZWQpCi0gICAgICAgIGdvdG8gd3JvbmdfbGVuZ3RoOwotCi0gICAgICBwYWRkaW5nID0gc3NpcGFkZGVkIC0gc3NpbGVuOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHhxdGRlcGF5LCAibGVuOiAlZCwgcGFkZGluZyAlZCIsIHNzaWxlbiwgcGFkZGluZyk7Ci0KLSAgICAgIHBheWxvYWQgKz0gNDsKLSAgICAgIHBheWxvYWRfbGVuIC09IDQ7Ci0gICAgICBzc2lsZW4gLT0gNDsKLQotICAgICAgLyogcGFyc2UgVExWICh0eXBlLWxlbmd0aC12YWx1ZSB0cmlwbGV0cyAqLwotICAgICAgd2hpbGUgKHNzaWxlbiA+IDMpIHsKLSAgICAgICAgZ3VpbnQxNiB0bHZfbGVuLCB0bHZfdHlwZTsKLQotICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAqIHwgUXVpY2tUaW1lIFRMViBMZW5ndGggICAgICAgICAgfCBRdWlja1RpbWUgVExWIFR5cGUgICAgICAgICAgICB8Ci0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAqIC4gUXVpY2tUaW1lIFRMViBWYWx1ZSAuLi4gLgotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgKi8KLSAgICAgICAgdGx2X2xlbiA9IChwYXlsb2FkWzBdIDw8IDgpIHwgcGF5bG9hZFsxXTsKLSAgICAgICAgdGx2X3R5cGUgPSAocGF5bG9hZFsyXSA8PCA4KSB8IHBheWxvYWRbM107Ci0gICAgICAgIHNzaWxlbiAtPSA0OwotICAgICAgICBpZiAodGx2X2xlbiA+IHNzaWxlbikKLSAgICAgICAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRweHF0ZGVwYXksICJUTFYgJyVjJWMnLCBsZW4gJWQiLCBwYXlsb2FkWzJdLAotICAgICAgICAgICAgcGF5bG9hZFszXSwgdGx2X2xlbik7Ci0KLSAgICAgICAgcGF5bG9hZCArPSA0OwotICAgICAgICBwYXlsb2FkX2xlbiAtPSA0OwotCi0gICAgICAgIHN3aXRjaCAodGx2X3R5cGUpIHsKLSAgICAgICAgICBjYXNlIFRMVl9zZDoKLSAgICAgICAgICBjYXNlIFRMVl9xdDoKLSAgICAgICAgICBjYXNlIFRMVl90aToKLSAgICAgICAgICBjYXNlIFRMVl9seToKLSAgICAgICAgICBjYXNlIFRMVl92bzoKLSAgICAgICAgICBjYXNlIFRMVl9teDoKLSAgICAgICAgICBjYXNlIFRMVl90cjoKLSAgICAgICAgICBjYXNlIFRMVl90dzoKLSAgICAgICAgICBjYXNlIFRMVl90aDoKLSAgICAgICAgICBjYXNlIFRMVl9sYToKLSAgICAgICAgICBjYXNlIFRMVl9ydDoKLSAgICAgICAgICBjYXNlIFRMVl9nbToKLSAgICAgICAgICBjYXNlIFRMVl9vYzoKLSAgICAgICAgICBjYXNlIFRMVl9jcjoKLSAgICAgICAgICBjYXNlIFRMVl9kdToKLSAgICAgICAgICBjYXNlIFRMVl9wbzoKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBzc2lsZW4gLT0gdGx2X2xlbjsKLSAgICAgICAgcGF5bG9hZCArPSB0bHZfbGVuOwotICAgICAgICBwYXlsb2FkX2xlbiAtPSB0bHZfbGVuOwotICAgICAgfQotICAgICAgcGF5bG9hZCArPSBwYWRkaW5nOwotICAgICAgcGF5bG9hZF9sZW4gLT0gcGFkZGluZzsKLSAgICB9Ci0KLSAgICBydHB4cXRkZXBheS0+cHJldmlvdXNfaWQgPSBydHB4cXRkZXBheS0+Y3VycmVudF9pZDsKLQotICAgIHN3aXRjaCAocGNrKSB7Ci0gICAgICBjYXNlIDE6Ci0gICAgICB7Ci0gICAgICAgIC8qIG11bHRpcGxlIHNhbXBsZXMgcGVyIHBhY2tldC4gKi8KLSAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChwYXlsb2FkX2xlbik7Ci0gICAgICAgIGdzdF9idWZmZXJfZmlsbCAob3V0YnVmLCAwLCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgICAgY2FzZSAyOgotICAgICAgewotICAgICAgICBndWludCBzbGVuOwotCi0gICAgICAgIC8qIG11bHRpcGxlIHNhbXBsZXMgcGVyIHBhY2tldC4gCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAgICAgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogfFN8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICB8IFNhbXBsZSBMZW5ndGggICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogfCBTYW1wbGUgVGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogLiBTYW1wbGUgRGF0YSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogfFN8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICB8IFNhbXBsZSBMZW5ndGggICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogfCBTYW1wbGUgVGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogLiBTYW1wbGUgRGF0YSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICogLiAuLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICovCi0gICAgICAgIHdoaWxlIChwYXlsb2FkX2xlbiA+IDgpIHsKLSAgICAgICAgICBzID0gKHBheWxvYWRbMF0gJiAweDgwKSAhPSAwOyAvKiBjb250YWlucyBzeW5jIHNhbXBsZSAqLwotICAgICAgICAgIHNsZW4gPSAocGF5bG9hZFsyXSA8PCA4KSB8IHBheWxvYWRbM107Ci0gICAgICAgICAgLyogdGltZXN0YW1wID0KLSAgICAgICAgICAgKiAgICAocGF5bG9hZFs0XSA8PCAyNCkgfCAocGF5bG9hZFs1XSA8PCAxNikgfCAocGF5bG9hZFs2XSA8PCA4KSB8Ci0gICAgICAgICAgICogICAgcGF5bG9hZFs3XTsKLSAgICAgICAgICAgKi8KLQotICAgICAgICAgIHBheWxvYWQgKz0gODsKLSAgICAgICAgICBwYXlsb2FkX2xlbiAtPSA4OwotCi0gICAgICAgICAgaWYgKHNsZW4gPiBwYXlsb2FkX2xlbikKLSAgICAgICAgICAgIHNsZW4gPSBwYXlsb2FkX2xlbjsKLQotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2xlbik7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChvdXRidWYsIDAsIHBheWxvYWQsIHNsZW4pOwotICAgICAgICAgIGlmICghcykKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIG91dGJ1Zik7Ci0KLSAgICAgICAgICAvKiBhbGlnbmVkIG9uIDMyIGJpdCBib3VuZGFyeSAqLwotICAgICAgICAgIHNsZW4gPSBHU1RfUk9VTkRfVVBfNCAoc2xlbik7Ci0KLSAgICAgICAgICBwYXlsb2FkICs9IHNsZW47Ci0gICAgICAgICAgcGF5bG9hZF9sZW4gLT0gc2xlbjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgMzoKLSAgICAgIHsKLSAgICAgICAgLyogb25lIHNhbXBsZSBwZXIgcGFja2V0LCB1c2UgYWRhcHRlciB0byBjb21iaW5lIGJhc2VkIG9uIG1hcmtlciBiaXQuICovCi0gICAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAocGF5bG9hZF9sZW4pOwotICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKG91dGJ1ZiwgMCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotCi0gICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cHhxdGRlcGF5LT5hZGFwdGVyLCBvdXRidWYpOwotICAgICAgICBvdXRidWYgPSBOVUxMOwotCi0gICAgICAgIGlmICghbSkKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0KLSAgICAgICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cHhxdGRlcGF5LT5hZGFwdGVyKTsKLSAgICAgICAgb3V0YnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHJ0cHhxdGRlcGF5LT5hZGFwdGVyLCBhdmFpbCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRweHF0ZGVwYXksCi0gICAgICAgICAgICAiZ3N0X3J0cF94cXRfZGVwYXlfY2hhaW46IHB1c2hpbmcgYnVmZmVyIG9mIHNpemUgJXUiLCBhdmFpbCk7Ci0KLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgIH0KLSAgfQotCi1kb25lOgotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gIHJldHVybiBvdXRidWY7Ci0KLW5lZWRfcmVzeW5jOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRweHF0ZGVwYXksICJ3YWl0aW5nIGZvciBtYXJrZXIiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXdyb25nX3ZlcnNpb246Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHB4cXRkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiVW5rbm93biBwYXlsb2FkIHZlcnNpb24uIiksIChOVUxMKSk7Ci0gICAgZ290byBkb25lOwotICB9Ci1wY2tfcmVzZXJ2ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHB4cXRkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiUENLIHJlc2VydmVkIDAuIiksIChOVUxMKSk7Ci0gICAgZ290byBkb25lOwotICB9Ci13cm9uZ19sZW5ndGg6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHB4cXRkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiV3JvbmcgcGF5bG9hZCBsZW5ndGguIiksIChOVUxMKSk7Ci0gICAgZ290byBkb25lOwotICB9Ci11bmtub3duX2Zvcm1hdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cHhxdGRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJVbmtub3duIHBheWxvYWQgZm9ybWF0LiIpLCAoTlVMTCkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfeHF0X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cFhRVERlcGF5ICpydHB4cXRkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cHhxdGRlcGF5ID0gR1NUX1JUUF9YUVRfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRweHF0ZGVwYXktPmFkYXB0ZXIpOwotICAgICAgcnRweHF0ZGVwYXktPnByZXZpb3VzX2lkID0gLTE7Ci0gICAgICBydHB4cXRkZXBheS0+Y3VycmVudF9pZCA9IC0xOwotICAgICAgcnRweHF0ZGVwYXktPm5lZWRfcmVzeW5jID0gVFJVRTsKLSAgICAgIHJ0cHhxdGRlcGF5LT5oYXZlX3NkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cHhxdGRlcGF5LT5hZGFwdGVyKTsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuaCBiL2dzdC9pc29tcDQvZ3N0cnRweHF0ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E0ZTQxYS4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2dzdHJ0cHhxdGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfWFFUX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfWFFUX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9YUVRfREVQQVkgXAotICAoZ3N0X3J0cF94cXRfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9YUVRfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfWFFUX0RFUEFZLEdzdFJ0cFhRVERlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9YUVRfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1hRVF9ERVBBWSxHc3RSdHBYUVREZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9YUVRfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfWFFUX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9YUVRfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1hRVF9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBYUVREZXBheSBHc3RSdHBYUVREZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBYUVREZXBheUNsYXNzIEdzdFJ0cFhRVERlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwWFFURGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLQotICBnYm9vbGVhbiBuZWVkX3Jlc3luYzsKLSAgZ3VpbnQxNiBwcmV2aW91c19pZDsKLSAgZ3VpbnQxNiBjdXJyZW50X2lkOwotICBnYm9vbGVhbiBoYXZlX3NkOwotfTsKLQotc3RydWN0IF9Hc3RSdHBYUVREZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3hxdF9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfWFFUX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9pc29tcDQtcGx1Z2luLmMgYi9nc3QvaXNvbXA0L2lzb21wNC1wbHVnaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmNzhjZS4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L2lzb21wNC1wbHVnaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi0jaW5jbHVkZSAicXRkZW11eC5oIgotI2luY2x1ZGUgImdzdHJ0cHhxdGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cXRtdXguaCIKLSNpbmNsdWRlICJnc3RxdG1vb3ZyZWNvdmVyLmgiCi0KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSNpZmRlZiBFTkFCTEVfTkxTCi0gIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7Ci0gIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOwotI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KLQotICBnc3RfcGJfdXRpbHNfaW5pdCAoKTsKLQotICAvKiBlbnN1cmUgcHJpdmF0ZSB0YWcgaXMgcmVnaXN0ZXJlZCAqLwotICBnc3RfdGFnX3JlZ2lzdGVyIChHU1RfUVRfREVNVVhfUFJJVkFURV9UQUcsIEdTVF9UQUdfRkxBR19NRVRBLAotICAgICAgR1NUX1RZUEVfU0FNUExFLCAiUVQgYXRvbSIsICJ1bnBhcnNlZCBRVCB0YWcgYXRvbSIsCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0KLSAgZ3N0X3RhZ19yZWdpc3RlciAoR1NUX1FUX0RFTVVYX0NMQVNTSUZJQ0FUSU9OX1RBRywgR1NUX1RBR19GTEFHX01FVEEsCi0gICAgICBHX1RZUEVfU1RSSU5HLCBHU1RfUVRfREVNVVhfQ0xBU1NJRklDQVRJT05fVEFHLCAiY29udGVudCBjbGFzc2lmaWNhdGlvbiIsCi0gICAgICBnc3RfdGFnX21lcmdlX3VzZV9maXJzdCk7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicXRkZW11eCIsCi0gICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfUVRERU1VWCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHhxdGRlcGF5IiwKLSAgICAgICAgICBHU1RfUkFOS19NQVJHSU5BTCwgR1NUX1RZUEVfUlRQX1hRVF9ERVBBWSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3F0X211eF9yZWdpc3RlciAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X3F0X21vb3ZfcmVjb3Zlcl9yZWdpc3RlciAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBpc29tcDQsCi0gICAgIklTTyBiYXNlIG1lZGlhIGZpbGUgZm9ybWF0IHN1cHBvcnQgKG1wNCwgM2dwcCwgcXQsIG1qMikiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7CmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3Byb3BlcnRpZXMuYyBiL2dzdC9pc29tcDQvcHJvcGVydGllcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQzZTI5Li4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvcHJvcGVydGllcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qIFF1aWNrdGltZSBtdXhlciBwbHVnaW4gZm9yIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQGVtYmVkZGVkLnVmY2cuZWR1LmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgInByb3BlcnRpZXMuaCIKLQotLyogaWYgbmVlZGVkLCByZS1hbGxvY2F0ZSBidWZmZXIgdG8gZW5zdXJlIHNpemUgYnl0ZXMgY2FuIGJlIHdyaXR0ZW4gaW50byBpdAotICogYXQgb2Zmc2V0ICovCi12b2lkCi1wcm9wX2NvcHlfZW5zdXJlX2J1ZmZlciAoZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIGJzaXplLCBndWludDY0ICogb2Zmc2V0LAotICAgIGd1aW50NjQgc2l6ZSkKLXsKLSAgaWYgKGJ1ZmZlciAmJiAqYnNpemUgLSAqb2Zmc2V0IDwgc2l6ZSkgewotICAgICpic2l6ZSArPSBzaXplICsgMTAgKiAxMDI0OwotICAgICpidWZmZXIgPSBnX3JlYWxsb2MgKCpidWZmZXIsICpic2l6ZSk7Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50NjQKLWNvcHlfZnVuYyAodm9pZCAqcHJvcCwgZ3VpbnQgc2l6ZSwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIGJzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGlmIChidWZmZXIpIHsKLSAgICBwcm9wX2NvcHlfZW5zdXJlX2J1ZmZlciAoYnVmZmVyLCBic2l6ZSwgb2Zmc2V0LCBzaXplKTsKLSAgICBtZW1jcHkgKCpidWZmZXIgKyAqb2Zmc2V0LCBwcm9wLCBzaXplKTsKLSAgfQotICAqb2Zmc2V0ICs9IHNpemU7Ci0gIHJldHVybiBzaXplOwotfQotCi0jZGVmaW5lIElOVF9BUlJBWV9DT1BZX0ZVTkNfRkFTVChuYW1lLCBkYXRhdHlwZSkgCQkJXAotZ3VpbnQ2NCBwcm9wX2NvcHlfICMjIG5hbWUgIyMgX2FycmF5IChkYXRhdHlwZSAqcHJvcCwgZ3VpbnQgc2l6ZSwJXAotICAgIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBic2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCkgeyAJCVwKLSAgcmV0dXJuIGNvcHlfZnVuYyAocHJvcCwgc2l6ZW9mIChkYXRhdHlwZSkgKiBzaXplLCBidWZmZXIsIGJzaXplLCBvZmZzZXQpO1wKLX0KLQotI2RlZmluZSBJTlRfQVJSQVlfQ09QWV9GVU5DKG5hbWUsIGRhdGF0eXBlKSAJCQkJXAotZ3VpbnQ2NCBwcm9wX2NvcHlfICMjIG5hbWUgIyMgX2FycmF5IChkYXRhdHlwZSAqcHJvcCwgZ3VpbnQgc2l6ZSwJXAotICAgIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBic2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCkgeyAJCVwKLSAgZ3VpbnQgaTsJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewkJCQkJCVwKLSAgICBwcm9wX2NvcHlfICMjIG5hbWUgKHByb3BbaV0sIGJ1ZmZlciwgYnNpemUsIG9mZnNldCk7CQlcCi0gIH0JCQkJCQkJCQlcCi0gIHJldHVybiBzaXplb2YgKGRhdGF0eXBlKSAqIHNpemU7CQkJCQlcCi19Ci0KLS8qIElOVEVHRVJTICovCi1ndWludDY0Ci1wcm9wX2NvcHlfdWludDggKGd1aW50OCBwcm9wLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICByZXR1cm4gY29weV9mdW5jICgmcHJvcCwgc2l6ZW9mIChndWludDgpLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci19Ci0KLWd1aW50NjQKLXByb3BfY29weV91aW50MTYgKGd1aW50MTYgcHJvcCwgZ3VpbnQ4ICoqIGJ1ZmZlciwgZ3VpbnQ2NCAqIHNpemUsCi0gICAgZ3VpbnQ2NCAqIG9mZnNldCkKLXsKLSAgcHJvcCA9IEdVSU5UMTZfVE9fQkUgKHByb3ApOwotICByZXR1cm4gY29weV9mdW5jICgmcHJvcCwgc2l6ZW9mIChndWludDE2KSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotfQotCi1ndWludDY0Ci1wcm9wX2NvcHlfdWludDMyIChndWludDMyIHByb3AsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIHByb3AgPSBHVUlOVDMyX1RPX0JFIChwcm9wKTsKLSAgcmV0dXJuIGNvcHlfZnVuYyAoJnByb3AsIHNpemVvZiAoZ3VpbnQzMiksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLX0KLQotZ3VpbnQ2NAotcHJvcF9jb3B5X3VpbnQ2NCAoZ3VpbnQ2NCBwcm9wLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBwcm9wID0gR1VJTlQ2NF9UT19CRSAocHJvcCk7Ci0gIHJldHVybiBjb3B5X2Z1bmMgKCZwcm9wLCBzaXplb2YgKGd1aW50NjQpLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci19Ci0KLWd1aW50NjQKLXByb3BfY29weV9pbnQzMiAoZ2ludDMyIHByb3AsIGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBzaXplLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIHByb3AgPSBHSU5UMzJfVE9fQkUgKHByb3ApOwotICByZXR1cm4gY29weV9mdW5jICgmcHJvcCwgc2l6ZW9mIChndWludDMyKSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotfQotCi0vKiB1aW50OCBjYW4gdXNlIGRpcmVjdCBjb3B5IGluIGFueSBjYXNlLCBhbmQgbWF5IGJlIHVzZWQgZm9yIGxhcmdlIHF1YW50aXR5ICovCi1JTlRfQVJSQVlfQ09QWV9GVU5DX0ZBU1QgKHVpbnQ4LCBndWludDgpOwotLyogbm90IHVzZWQgaW4gbGFyZ2UgcXVhbnRpdHkgYW55d2F5ICovCi1JTlRfQVJSQVlfQ09QWV9GVU5DICh1aW50MTYsIGd1aW50MTYpOwotSU5UX0FSUkFZX0NPUFlfRlVOQyAodWludDMyLCBndWludDMyKTsKLUlOVF9BUlJBWV9DT1BZX0ZVTkMgKHVpbnQ2NCwgZ3VpbnQ2NCk7Ci0KLS8qIEZPVVJDQyAqLwotZ3VpbnQ2NAotcHJvcF9jb3B5X2ZvdXJjYyAoZ3VpbnQzMiBwcm9wLCBndWludDggKiogYnVmZmVyLCBndWludDY0ICogc2l6ZSwKLSAgICBndWludDY0ICogb2Zmc2V0KQotewotICBwcm9wID0gR0lOVDMyX1RPX0xFIChwcm9wKTsKLSAgcmV0dXJuIGNvcHlfZnVuYyAoJnByb3AsIHNpemVvZiAoZ3VpbnQzMiksIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLX0KLQotSU5UX0FSUkFZX0NPUFlfRlVOQyAoZm91cmNjLCBndWludDMyKTsKLQotLyoqCi0gKiBwcm9wX2NvcHlfZml4ZWRfc2l6ZV9zdHJpbmc6Ci0gKiBAc3RyaW5nOiB0aGUgc3RyaW5nIHRvIGJlIGNvcGllZAotICogQHN0cl9zaXplOiBzaXplIG9mIHRoZSBzdHJpbmcKLSAqIEBidWZmZXI6IHRoZSBhcnJheSB0byBjb3B5IHRoZSBzdHJpbmcgdG8KLSAqIEBvZmZzZXQ6IHRoZSBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyIGFycmF5LgotICogVGhpcyB2YWx1ZSBpcyB1cGRhdGVkIHRvIHRoZSBwb2ludCByaWdodCBhZnRlciB0aGUgY29waWVkIHN0cmluZy4KLSAqCi0gKiBDb3BpZXMgYSBzdHJpbmcgb2YgYnl0ZXMgd2l0aG91dCBwbGFjaW5nIGl0cyBzaXplIGF0IHRoZSBiZWdpbm5pbmcuCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQKLSAqLwotZ3VpbnQ2NAotcHJvcF9jb3B5X2ZpeGVkX3NpemVfc3RyaW5nIChndWludDggKiBzdHJpbmcsIGd1aW50IHN0cl9zaXplLCBndWludDggKiogYnVmZmVyLAotICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICByZXR1cm4gY29weV9mdW5jIChzdHJpbmcsIHN0cl9zaXplICogc2l6ZW9mIChndWludDgpLCBidWZmZXIsIHNpemUsIG9mZnNldCk7Ci19Ci0KLS8qKgotICogcHJvcF9jb3B5X3NpemVfc3RyaW5nOgotICoKLSAqIEBzdHJpbmc6IHRoZSBzdHJpbmcgdG8gYmUgY29waWVkCi0gKiBAc3RyX3NpemU6IHNpemUgb2YgdGhlIHN0cmluZwotICogQGJ1ZmZlcjogdGhlIGFycmF5IHRvIGNvcHkgdGhlIHN0cmluZyB0bwotICogQG9mZnNldDogdGhlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgYXJyYXkuCi0gKiBUaGlzIHZhbHVlIGlzIHVwZGF0ZWQgdG8gdGhlIHBvaW50IHJpZ2h0IGFmdGVyIHRoZSBjb3BpZWQgc3RyaW5nLgotICoKLSAqIENvcGllcyBhIHN0cmluZyBhbmQgaXRzIHNpemUgdG8gYW4gYXJyYXkuIEV4YW1wbGU6Ci0gKiBzdHJpbmcgPSAnYWJjXDAnCi0gKiByZXN1bHQgaW4gdGhlIGFycmF5OiBbM11bYV1bYl1bY10gIChlYWNoIFt4XSByZXByZXNlbnRzIGEgcG9zaXRpb24pCi0gKgotICogUmV0dXJuczogdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQKLSAqLwotZ3VpbnQ2NAotcHJvcF9jb3B5X3NpemVfc3RyaW5nIChndWludDggKiBzdHJpbmcsIGd1aW50IHN0cl9zaXplLCBndWludDggKiogYnVmZmVyLAotICAgIGd1aW50NjQgKiBzaXplLCBndWludDY0ICogb2Zmc2V0KQotewotICBndWludDY0IG9yaWdpbmFsX29mZnNldCA9ICpvZmZzZXQ7Ci0KLSAgcHJvcF9jb3B5X3VpbnQ4IChzdHJfc2l6ZSwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfZml4ZWRfc2l6ZV9zdHJpbmcgKHN0cmluZywgc3RyX3NpemUsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19Ci0KLS8qKgotICogcHJvcF9jb3B5X251bGxfdGVybWluYXRlZF9zdHJpbmc6Ci0gKiBAc3RyaW5nOiB0aGUgc3RyaW5nIHRvIGJlIGNvcGllZAotICogQGJ1ZmZlcjogdGhlIGFycmF5IHRvIGNvcHkgdGhlIHN0cmluZyB0bwotICogQG9mZnNldDogdGhlIHBvc2l0aW9uIGluIHRoZSBidWZmZXIgYXJyYXkuCi0gKiBUaGlzIHZhbHVlIGlzIHVwZGF0ZWQgdG8gdGhlIHBvaW50IHJpZ2h0IGFmdGVyIHRoZSBjb3BpZWQgc3RyaW5nLgotICoKLSAqIENvcGllcyBhIHN0cmluZyBpbmNsdWRpbmcgaXRzIG51bGwgdGVybWluYXRpbmcgY2hhciB0byBhbiBhcnJheS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZAotICovCi1ndWludDY0Ci1wcm9wX2NvcHlfbnVsbF90ZXJtaW5hdGVkX3N0cmluZyAoZ2NoYXIgKiBzdHJpbmcsIGd1aW50OCAqKiBidWZmZXIsCi0gICAgZ3VpbnQ2NCAqIHNpemUsIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50NjQgb3JpZ2luYWxfb2Zmc2V0ID0gKm9mZnNldDsKLSAgZ3VpbnQgbGVuID0gc3RybGVuIChzdHJpbmcpOwotCi0gIHByb3BfY29weV9maXhlZF9zaXplX3N0cmluZyAoKGd1aW50OCAqKSBzdHJpbmcsIGxlbiwgYnVmZmVyLCBzaXplLCBvZmZzZXQpOwotICBwcm9wX2NvcHlfdWludDggKCdcMCcsIGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKLSAgcmV0dXJuICpvZmZzZXQgLSBvcmlnaW5hbF9vZmZzZXQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3Byb3BlcnRpZXMuaCBiL2dzdC9pc29tcDQvcHJvcGVydGllcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzZmZTQ4Li4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvcHJvcGVydGllcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogUXVpY2t0aW1lIG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhpYWdvIFNvdXNhIFNhbnRvcyA8dGhpYWdvc3NAZW1iZWRkZWQudWZjZy5lZHUuYnI+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qCi0gKiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgU291cmNlIENvZGUgaXMgbGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UuCi0gKiBTZWUgZnVydGhlciBleHBsYW5hdGlvbiBhdHRhY2hlZCBpbiBMaWNlbnNlIFN0YXRlbWVudCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGZpbGUKLSAqIExJQ0VOU0UpLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKLSAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCi0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi0gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIF9fUFJPUEVSVElFU19IX18KLSNkZWZpbmUgX19QUk9QRVJUSUVTX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKgotICogRnVuY3Rpb25zIGZvciBjb3B5aW5nIGF0b21zIHByb3BlcnRpZXMuCi0gKgotICogQWxsIG9mIHRoZW0gcmVjZWl2ZSwgYXMgdGhlIGlucHV0LCB0aGUgcHJvcGVydHkgdG8gYmUgY29waWVkLCB0aGUgZGVzdGluYXRpb24KLSAqIGJ1ZmZlciwgYW5kIGEgcG9pbnRlciB0byBhbiBvZmZzZXQgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciB0byBjb3B5IHRvIHRoZSByaWdodCBwbGFjZS4KLSAqIFRoaXMgb2Zmc2V0IHdpbGwgYmUgdXBkYXRlZCB0byB0aGUgbmV3IHZhbHVlIChvZmZzZXQgKyBjb3BpZWRfc2l6ZSkKLSAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGhhcyBiZWVuIGNvcGllZCBvciAwCi0gKiBpZiBpdCBjb3VsZG4ndCBjb3B5LgotICovCi0KLXZvaWQgICAgcHJvcF9jb3B5X2Vuc3VyZV9idWZmZXIgICAgICAgICAgKGd1aW50OCAqKiBidWZmZXIsIGd1aW50NjQgKiBic2l6ZSwgZ3VpbnQ2NCAqIG9mZnNldCwgZ3VpbnQ2NCBzaXplKTsKLQotZ3VpbnQ2NCBwcm9wX2NvcHlfdWludDggICAgICAgICAgICAgICAgICAoZ3VpbnQ4IHByb3AsIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLWd1aW50NjQgcHJvcF9jb3B5X3VpbnQxNiAgICAgICAgICAgICAgICAgKGd1aW50MTYgcHJvcCwgZ3VpbnQ4ICoqYnVmZmVyLCBndWludDY0ICpzaXplLCBndWludDY0ICpvZmZzZXQpOwotZ3VpbnQ2NCBwcm9wX2NvcHlfdWludDMyICAgICAgICAgICAgICAgICAoZ3VpbnQzMiBwcm9wLCBndWludDggKipidWZmZXIsIGd1aW50NjQgKnNpemUsIGd1aW50NjQgKm9mZnNldCk7Ci1ndWludDY0IHByb3BfY29weV91aW50NjQgICAgICAgICAgICAgICAgIChndWludDY0IHByb3AsIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLQotZ3VpbnQ2NCBwcm9wX2NvcHlfaW50MzIgICAgICAgICAgICAgICAgICAoZ2ludDMyIHByb3AsIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLQotZ3VpbnQ2NCBwcm9wX2NvcHlfdWludDhfYXJyYXkgICAgICAgICAgICAoZ3VpbnQ4ICpwcm9wLCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4ICoqYnVmZmVyLCBndWludDY0ICpic2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLWd1aW50NjQgcHJvcF9jb3B5X3VpbnQxNl9hcnJheSAgICAgICAgICAgKGd1aW50MTYgKnByb3AsIGd1aW50IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDggKipidWZmZXIsIGd1aW50NjQgKmJzaXplLCBndWludDY0ICpvZmZzZXQpOwotZ3VpbnQ2NCBwcm9wX2NvcHlfdWludDMyX2FycmF5ICAgICAgICAgICAoZ3VpbnQzMiAqcHJvcCwgZ3VpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqYnNpemUsIGd1aW50NjQgKm9mZnNldCk7Ci1ndWludDY0IHByb3BfY29weV91aW50NjRfYXJyYXkgICAgICAgICAgIChndWludDY0ICpwcm9wLCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4ICoqYnVmZmVyLCBndWludDY0ICpic2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLQotZ3VpbnQ2NCBwcm9wX2NvcHlfZm91cmNjICAgICAgICAgICAgICAgICAoZ3VpbnQzMiBwcm9wLCBndWludDggKipidWZmZXIsIGd1aW50NjQgKnNpemUsIGd1aW50NjQgKm9mZnNldCk7Ci1ndWludDY0IHByb3BfY29weV9mb3VyY2NfYXJyYXkgICAgICAgICAgIChndWludDMyICpwcm9wLCBndWludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4ICoqYnVmZmVyLCBndWludDY0ICpic2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLWd1aW50NjQgcHJvcF9jb3B5X2ZpeGVkX3NpemVfc3RyaW5nICAgICAgKGd1aW50OCAqc3RyaW5nLCBndWludCBzdHJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLWd1aW50NjQgcHJvcF9jb3B5X3NpemVfc3RyaW5nICAgICAgICAgICAgKGd1aW50OCAqc3RyaW5nLCBndWludCBzdHJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50OCAqKmJ1ZmZlciwgZ3VpbnQ2NCAqc2l6ZSwgZ3VpbnQ2NCAqb2Zmc2V0KTsKLWd1aW50NjQgcHJvcF9jb3B5X251bGxfdGVybWluYXRlZF9zdHJpbmcgKGdjaGFyICpzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDggKipidWZmZXIsIGd1aW50NjQgKnNpemUsIGd1aW50NjQgKm9mZnNldCk7Ci0KLSNlbmRpZiAvKiBfX1BST1BFUlRJRVNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0YXRvbXBhcnNlci5oIGIvZ3N0L2lzb21wNC9xdGF0b21wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODliYWI1MC4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L3F0YXRvbXBhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBRdWlja1RpbWUgYXRvbSBwYXJzZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU1RFcmljc3NvbiA8YmVuamFtaW4uZ2FpZ25hcmRAc3Rlcmljc3Nvbi5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBRVF9BVE9NX1BBUlNFUl9ICi0jZGVmaW5lIFFUX0FUT01fUEFSU0VSX0gKLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLQotLyogb3VyIGlubGluZWQgdmVyc2lvbiBvZiBHc3RCeXRlUmVhZGVyICovCi0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLXF0X2F0b21fcGFyc2VyX2hhc19yZW1haW5pbmcgKEdzdEJ5dGVSZWFkZXIgKiBwYXJzZXIsIGd1aW50NjQgYnl0ZXNfbmVlZGVkKQotewotICByZXR1cm4gR19MSUtFTFkgKHBhcnNlci0+c2l6ZSA+PSBieXRlc19uZWVkZWQpICYmCi0gICAgICBHX0xJS0VMWSAoKHBhcnNlci0+c2l6ZSAtIGJ5dGVzX25lZWRlZCkgPj0gcGFyc2VyLT5ieXRlKTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoR3N0Qnl0ZVJlYWRlciAqIHBhcnNlciwgZ3VpbnQzMiBuX2NodW5rcywKLSAgICBndWludDMyIGNodW5rX3NpemUpCi17Ci0gIC8qIGFzc3VtcHRpb246IG5fY2h1bmtzIGFuZCBjaHVua19zaXplIGFyZSAzMi1iaXQsIHdlIGNhc3QgdG8gNjQtYml0IGhlcmUKLSAgICogdG8gYXZvaWQgb3ZlcmZsb3dzLCB0byBoYW5kbGUgZS5nLiAoZ3VpbnQzMiktMSAqIHNpemUgY29ycmVjdGx5ICovCi0gIHJldHVybiBxdF9hdG9tX3BhcnNlcl9oYXNfcmVtYWluaW5nIChwYXJzZXIsIChndWludDY0KSBuX2NodW5rcyAqIGNodW5rX3NpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1xdF9hdG9tX3BhcnNlcl9wZWVrX3N1YiAoR3N0Qnl0ZVJlYWRlciAqIHBhcnNlciwgZ3VpbnQgb2Zmc2V0LCBndWludCBzaXplLAotICAgIEdzdEJ5dGVSZWFkZXIgKiBzdWIpCi17Ci0gICpzdWIgPSAqcGFyc2VyOwotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKHN1Yiwgb2Zmc2V0KSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiAoZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKHN1YikgPj0gc2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLXF0X2F0b21fcGFyc2VyX3NraXBuX2FuZF9nZXRfdWludDMyIChHc3RCeXRlUmVhZGVyICogcGFyc2VyLAotICAgIGd1aW50IGJ5dGVzX3RvX3NraXAsIGd1aW50MzIgKiB2YWwpCi17Ci0gIGlmIChHX1VOTElLRUxZIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocGFyc2VyKSA8IChieXRlc190b19za2lwICsgNCkpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKHBhcnNlciwgYnl0ZXNfdG9fc2tpcCk7Ci0gICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKHBhcnNlcik7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBvZmZfc2l6ZSBtdXN0IGJlIGVpdGhlciA0IG9yIDggKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLXF0X2F0b21fcGFyc2VyX2dldF9vZmZzZXQgKEdzdEJ5dGVSZWFkZXIgKiBwYXJzZXIsIGd1aW50IG9mZl9zaXplLAotICAgIGd1aW50NjQgKiB2YWwpCi17Ci0gIGlmIChHX1VOTElLRUxZIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocGFyc2VyKSA8IG9mZl9zaXplKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKG9mZl9zaXplID09IHNpemVvZiAoZ3VpbnQ2NCkpIHsKLSAgICAqdmFsID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkIChwYXJzZXIpOwotICB9IGVsc2UgewotICAgICp2YWwgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKHBhcnNlcik7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIG9mZl9zaXplIG11c3QgYmUgZWl0aGVyIDQgb3IgOCAqLwotc3RhdGljIGlubGluZSBndWludDY0Ci1xdF9hdG9tX3BhcnNlcl9nZXRfb2Zmc2V0X3VuY2hlY2tlZCAoR3N0Qnl0ZVJlYWRlciAqIHBhcnNlciwgZ3VpbnQgb2ZmX3NpemUpCi17Ci0gIGlmIChvZmZfc2l6ZSA9PSBzaXplb2YgKGd1aW50NjQpKSB7Ci0gICAgcmV0dXJuIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlX3VuY2hlY2tlZCAocGFyc2VyKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChwYXJzZXIpOwotICB9Ci19Ci0KLS8qIHNpemUgbXVzdCBiZSBmcm9tIDEgdG8gNCAqLwotc3RhdGljIGlubGluZSBndWludDMyCi1xdF9hdG9tX3BhcnNlcl9nZXRfdWludF93aXRoX3NpemVfdW5jaGVja2VkIChHc3RCeXRlUmVhZGVyICogcGFyc2VyLAotICAgIGd1aW50IHNpemUpCi17Ci0gIHN3aXRjaCAoc2l6ZSkgewotICBjYXNlIDE6Ci0gICAgcmV0dXJuIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkIChwYXJzZXIpOwotICBjYXNlIDI6Ci0gICAgcmV0dXJuIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZCAocGFyc2VyKTsKLSAgY2FzZSAzOgotICAgIHJldHVybiBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZV91bmNoZWNrZWQgKHBhcnNlcik7Ci0gIGNhc2UgNDoKLSAgICByZXR1cm4gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChwYXJzZXIpOwotICBkZWZhdWx0OgotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAocGFyc2VyLCBzaXplKTsKLSAgICBicmVhazsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotcXRfYXRvbV9wYXJzZXJfZ2V0X2ZvdXJjYyAoR3N0Qnl0ZVJlYWRlciAqIHBhcnNlciwgZ3VpbnQzMiAqIGZvdXJjYykKLXsKLSAgZ3VpbnQzMiBmX2JlOwotCi0gIGlmIChHX1VOTElLRUxZIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocGFyc2VyKSA8IDQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmX2JlID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChwYXJzZXIpOwotICAqZm91cmNjID0gR1VJTlQzMl9TV0FQX0xFX0JFIChmX2JlKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQzMgotcXRfYXRvbV9wYXJzZXJfZ2V0X2ZvdXJjY191bmNoZWNrZWQgKEdzdEJ5dGVSZWFkZXIgKiBwYXJzZXIpCi17Ci0gIGd1aW50MzIgZm91cmNjOwotCi0gIGZvdXJjYyA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAocGFyc2VyKTsKLSAgcmV0dXJuIEdVSU5UMzJfU1dBUF9MRV9CRSAoZm91cmNjKTsKLX0KLQotI2VuZGlmIC8qIFFUX0FUT01fUEFSU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvcXRkZW11eC5jIGIvZ3N0L2lzb21wNC9xdGRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMzZhOWUuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzc0NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBKdWxpZW4gTW91dHRlIDxqdWxpZW5AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU1RFcmljc3NvbiA8YmVuamFtaW4uZ2FpZ25hcmRAc3Rlcmljc3Nvbi5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEzPiBTcmVlcmVuaiBCYWxhY2hhbmRyYW4gPHNyZWVyZW5qLmJhbGFjaGFuZHJhbkBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEzPiBJbnRlbCBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSA8MjAxND4gQ2VudHJpY3VsYXIgTHRkCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE1PiBZb3VWaWV3IFRWIEx0ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1xdGRlbXV4Ci0gKgotICogRGVtdXhlcyBhIC5tb3YgZmlsZSBpbnRvIHJhdyBvciBjb21wcmVzc2VkIGF1ZGlvIGFuZC9vciB2aWRlbyBzdHJlYW1zLgotICoKLSAqIFRoaXMgZWxlbWVudCBzdXBwb3J0cyBib3RoIHB1c2ggYW5kIHB1bGwtYmFzZWQgc2NoZWR1bGluZywgZGVwZW5kaW5nIG9uIHRoZQotICogY2FwYWJpbGl0aWVzIG9mIHRoZSB1cHN0cmVhbSBlbGVtZW50cy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj10ZXN0Lm1vdiAhIHF0ZGVtdXggbmFtZT1kZW11eCAgZGVtdXguYXVkaW9fMCAhIHF1ZXVlICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsgICBkZW11eC52aWRlb18wICEgcXVldWUgISBkZWNvZGViaW4gISB2aWRlb2NvbnZlcnQgISB2aWRlb3NjYWxlICEgYXV0b3ZpZGVvc2luawotICogXXwgUGxheSAocGFyc2UgYW5kIGRlY29kZSkgYSAubW92IGZpbGUgYW5kIHRyeSB0byBvdXRwdXQgaXQgdG8KLSAqIGFuIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgc291bmRjYXJkIGFuZCB2aWRlb3NpbmsuIElmIHRoZSBNT1YgZmlsZSBjb250YWlucwotICogY29tcHJlc3NlZCBhdWRpbyBvciB2aWRlbyBkYXRhLCB0aGlzIHdpbGwgb25seSB3b3JrIGlmIHlvdSBoYXZlIHRoZQotICogcmlnaHQgZGVjb2RlciBlbGVtZW50cy9wbHVnaW5zIGluc3RhbGxlZC4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi0jaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+Ci0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgInF0YXRvbXBhcnNlci5oIgotI2luY2x1ZGUgInF0ZGVtdXhfdHlwZXMuaCIKLSNpbmNsdWRlICJxdGRlbXV4X2R1bXAuaCIKLSNpbmNsdWRlICJmb3VyY2MuaCIKLSNpbmNsdWRlICJkZXNjcmlwdG9ycy5oIgotI2luY2x1ZGUgInF0ZGVtdXhfbGFuZy5oIgotI2luY2x1ZGUgInF0ZGVtdXguaCIKLSNpbmNsdWRlICJxdHBhbGV0dGUuaCIKLQotI2luY2x1ZGUgImdzdC9yaWZmL3JpZmYtbWVkaWEuaCIKLSNpbmNsdWRlICJnc3QvcmlmZi9yaWZmLXJlYWQuaCIKLQotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Z3N0L21hdGgtY29tcGF0Lmg+Ci0KLSNpZmRlZiBIQVZFX1pMSUIKLSMgaW5jbHVkZSA8emxpYi5oPgotI2VuZGlmCi0KLS8qIG1heC4gc2l6ZSBjb25zaWRlcmVkICdzYW5lJyBmb3Igbm9uLW1kYXQgYXRvbXMgKi8KLSNkZWZpbmUgUVRERU1VWF9NQVhfQVRPTV9TSVpFICgyNSoxMDI0KjEwMjQpCi0KLS8qIGlmIHRoZSBzYW1wbGUgaW5kZXggaXMgbGFyZ2VyIHRoYW4gdGhpcywgc29tZXRoaW5nIGlzIGxpa2VseSB3cm9uZyAqLwotI2RlZmluZSBRVERFTVVYX01BWF9TQU1QTEVfSU5ERVhfU0laRSAoNTAqMTAyNCoxMDI0KQotCi0vKiBGb3IgY29udmVydGluZyBxdCBjcmVhdGlvbiB0aW1lcyB0byB1bml4IGVwb2NoIHRpbWVzICovCi0jZGVmaW5lIFFUREVNVVhfU0VDT05EU19QRVJfREFZICg2MCAqIDYwICogMjQpCi0jZGVmaW5lIFFUREVNVVhfTEVBUF9ZRUFSU19GUk9NXzE5MDRfVE9fMTk3MCAxNwotI2RlZmluZSBRVERFTVVYX1NFQ09ORFNfRlJPTV8xOTA0X1RPXzE5NzAgKCgoMTk3MCAtIDE5MDQpICogKGd1aW50NjQpIDM2NSArIFwKLSAgICBRVERFTVVYX0xFQVBfWUVBUlNfRlJPTV8xOTA0X1RPXzE5NzApICogUVRERU1VWF9TRUNPTkRTX1BFUl9EQVkpCi0KLSNkZWZpbmUgU1RSRUFNX0lTX0VPUyhzKSAocy0+dGltZV9wb3NpdGlvbiA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotCi0jZGVmaW5lIEFCU0RJRkYoeCwgeSkgKCAoeCkgPiAoeSkgPyAoKHgpIC0gKHkpKSA6ICgoeSkgLSAoeCkpICkKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChxdGRlbXV4X2RlYnVnKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1F0RGVtdXhTZWdtZW50IFF0RGVtdXhTZWdtZW50OwotdHlwZWRlZiBzdHJ1Y3QgX1F0RGVtdXhTYW1wbGUgUXREZW11eFNhbXBsZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1F0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbyBRdERlbXV4Q2VuY1NhbXBsZVNldEluZm87Ci0KLXN0cnVjdCBfUXREZW11eFNhbXBsZQotewotICBndWludDMyIHNpemU7Ci0gIGdpbnQzMiBwdHNfb2Zmc2V0OyAgICAgICAgICAgIC8qIEFkZCB0aGlzIHZhbHVlIHRvIHRpbWVzdGFtcCB0byBnZXQgdGhlIHB0cyAqLwotICBndWludDY0IG9mZnNldDsKLSAgZ3VpbnQ2NCB0aW1lc3RhbXA7ICAgICAgICAgICAgLyogRFRTIEluIG1vdiB0aW1lICovCi0gIGd1aW50MzIgZHVyYXRpb247ICAgICAgICAgICAgIC8qIEluIG1vdiB0aW1lICovCi0gIGdib29sZWFuIGtleWZyYW1lOyAgICAgICAgICAgIC8qIFRSVUUgd2hlbiB0aGlzIHBhY2tldCBpcyBhIGtleWZyYW1lICovCi19OwotCi0vKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgdG8vZnJvbSB0aW1lc2NhbGUgKi8KLSNkZWZpbmUgUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUoc3RyZWFtLCB2YWx1ZSkgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgodmFsdWUpLCBHU1RfU0VDT05ELCAoc3RyZWFtKS0+dGltZXNjYWxlKSkKLSNkZWZpbmUgR1NUVElNRV9UT19RVFNUUkVBTVRJTUUoc3RyZWFtLCB2YWx1ZSkgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgodmFsdWUpLCAoc3RyZWFtKS0+dGltZXNjYWxlLCBHU1RfU0VDT05EKSkKLQotI2RlZmluZSBRVFRJTUVfVE9fR1NUVElNRShxdGRlbXV4LCB2YWx1ZSkgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSgodmFsdWUpLCBHU1RfU0VDT05ELCAocXRkZW11eCktPnRpbWVzY2FsZSkpCi0jZGVmaW5lIEdTVFRJTUVfVE9fUVRUSU1FKHF0ZGVtdXgsIHZhbHVlKSAoZ3N0X3V0aWxfdWludDY0X3NjYWxlKCh2YWx1ZSksIChxdGRlbXV4KS0+dGltZXNjYWxlLCBHU1RfU0VDT05EKSkKLQotLyogdGltZXN0YW1wIGlzIHRoZSBEVFMgKi8KLSNkZWZpbmUgUVRTQU1QTEVfRFRTKHN0cmVhbSxzYW1wbGUpIChRVFNUUkVBTVRJTUVfVE9fR1NUVElNRSgoc3RyZWFtKSwgKHNhbXBsZSktPnRpbWVzdGFtcCkpCi0vKiB0aW1lc3RhbXAgKyBvZmZzZXQgaXMgdGhlIFBUUyAqLwotI2RlZmluZSBRVFNBTVBMRV9QVFMoc3RyZWFtLHNhbXBsZSkgKFFUU1RSRUFNVElNRV9UT19HU1RUSU1FKChzdHJlYW0pLCAoc2FtcGxlKS0+dGltZXN0YW1wICsgKHN0cmVhbSktPmNzbGdfc2hpZnQgKyAoc2FtcGxlKS0+cHRzX29mZnNldCkpCi0vKiB0aW1lc3RhbXAgKyBkdXJhdGlvbiAtIGR0cyBpcyB0aGUgZHVyYXRpb24gKi8KLSNkZWZpbmUgUVRTQU1QTEVfRFVSX0RUUyhzdHJlYW0sIHNhbXBsZSwgZHRzKSAoUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKChzdHJlYW0pLCAoc2FtcGxlKS0+dGltZXN0YW1wICsgKHNhbXBsZSktPmR1cmF0aW9uKSAtIChkdHMpKQotCi0jZGVmaW5lIFFUU0FNUExFX0tFWUZSQU1FKHN0cmVhbSxzYW1wbGUpICgoc3RyZWFtKS0+YWxsX2tleWZyYW1lIHx8IChzYW1wbGUpLT5rZXlmcmFtZSkKLQotLyoKLSAqIFF1aWNrdGltZSBoYXMgdHJhY2tzIGFuZCBzZWdtZW50cy4gQSB0cmFjayBpcyBhIGNvbnRpbnVvdXMgcGllY2Ugb2YKLSAqIG11bHRpbWVkaWEgY29udGVudC4gVGhlIHRyYWNrIGlzIG5vdCBhbHdheXMgcGxheWVkIGZyb20gc3RhcnQgdG8gZmluaXNoIGJ1dAotICogaW5zdGVhZCwgcGllY2VzIG9mIHRoZSB0cmFjayBhcmUgJ2N1dCBvdXQnIGFuZCBwbGF5ZWQgaW4gc2VxdWVuY2UuIFRoaXMgaXMKLSAqIHdoYXQgdGhlIHNlZ21lbnRzIGRvLgotICoKLSAqIEluc2lkZSB0aGUgdHJhY2sgd2UgaGF2ZSBrZXlmcmFtZXMgKEspIGFuZCBkZWx0YSBmcmFtZXMuIFRoZSB0cmFjayBoYXMgaXRzCi0gKiBvd24gdGltaW5nLCB3aGljaCBzdGFydHMgZnJvbSAwIGFuZCBleHRlbmRzIHRvIGVuZC4gVGhlIHBvc2l0aW9uIGluIHRoZSB0cmFjawotICogaXMgY2FsbGVkIHRoZSBtZWRpYV90aW1lLgotICoKLSAqIFRoZSBzZWdtZW50cyBub3cgZGVzY3JpYmUgdGhlIHBpZWNlcyB0aGF0IHNob3VsZCBiZSBwbGF5ZWQgZnJvbSB0aGlzIHRyYWNrCi0gKiBhbmQgYXJlIGJhc2ljYWxseSB0dXBsZXMgb2YgbWVkaWFfdGltZS9kdXJhdGlvbi9yYXRlIGVudHJpZXMuIFdlIGNhbiBoYXZlCi0gKiBtdWx0aXBsZSBzZWdtZW50cyBhbmQgdGhleSBhcmUgYWxsIHBsYXllZCBhZnRlciBvbmUgYW5vdGhlci4gQW4gZXhhbXBsZToKLSAqCi0gKiBzZWdtZW50IDE6IG1lZGlhX3RpbWU6IDEgc2Vjb25kLCBkdXJhdGlvbjogMSBzZWNvbmQsIHJhdGUgMQotICogc2VnbWVudCAyOiBtZWRpYV90aW1lOiAzIHNlY29uZCwgZHVyYXRpb246IDIgc2Vjb25kLCByYXRlIDIKLSAqCi0gKiBUbyBjb3JyZWN0bHkgcGxheSBiYWNrIHRoaXMgdHJhY2ssIG9uZSBtdXN0IHBsYXk6IDEgc2Vjb25kIG9mIG1lZGlhIHN0YXJ0aW5nCi0gKiBmcm9tIG1lZGlhX3RpbWUgMSBmb2xsb3dlZCBieSAyIHNlY29uZHMgb2YgbWVkaWEgc3RhcnRpbmcgZnJvbSBtZWRpYV90aW1lIDMKLSAqIGF0IGEgcmF0ZSBvZiAyLgotICoKLSAqIEVhY2ggb2YgdGhlIHNlZ21lbnRzIHdpbGwgYmUgcGxheWVkIGF0IGEgc3BlY2lmaWMgdGltZSwgdGhlIGZpcnN0IHNlZ21lbnQgYXQKLSAqIHRpbWUgMCwgdGhlIHNlY29uZCBvbmUgYWZ0ZXIgdGhlIGR1cmF0aW9uIG9mIHRoZSBmaXJzdCBvbmUsIGV0Yy4uIE5vdGUgdGhhdAotICogdGhlIHRpbWUgaW4gcmVzdWx0aW5nIHBsYXliYWNrIGlzIG5vdCBpZGVudGljYWwgdG8gdGhlIG1lZGlhX3RpbWUgb2YgdGhlCi0gKiB0cmFjayBhbnltb3JlLgotICoKLSAqIFZpc3VhbGx5LCBhc3N1bWluZyB0aGUgdHJhY2sgaGFzIDQgc2Vjb25kIG9mIG1lZGlhX3RpbWU6Ci0gKgotICogICAgICAgICAgICAgICAgKGEpICAgICAgICAgICAgICAgICAgIChiKSAgICAgICAgICAoYykgICAgICAgICAgICAgIChkKQotICogICAgICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi0gKiB0cmFjazogIHwgSy4uLi4uSy4uLi4uLi4uLksuLi4uLi4uLksuLi4uLi4uSy4uLi4uLi5LLi4uLi4uLi4uLi5LLi4uIHwKLSAqICAgICAgICAgJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotICogICAgICAgICAwICAgICAgICAgICAgICAxICAgICAgICAgICAgICAyICAgICAgICAgICAgICAzICAgICAgICAgICAgICA0Ci0gKiAgICAgICAgICAgLi0tLS0tLS0tLS0tLV4gICAgICAgICAgICAgIF4gICAuLS0tLS0tLS0tLV4gICAgICAgICAgICAgIF4KLSAqICAgICAgICAgIC8gICAgICAgICAgICAgIC4tLS0tLS0tLS0tLS0tJyAgLyAgICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tJwotICogICAgICAgICAvICAgICAgICAgICAgICAvICAgICAgICAgIC4tLS0tLScgICAgICAgLwotICogICAgICAgICAuLS0tLS0tLS0tLS0tLS0uICAgICAgICAgLi0tLS0tLS0tLS0tLS0tLgotICogICAgICAgICB8IHNlZ21lbnQgMSAgICB8ICAgICAgICAgfCBzZWdtZW50IDIgICAgfAotICogICAgICAgICAnLS0tLS0tLS0tLS0tLS0nICAgICAgICAgJy0tLS0tLS0tLS0tLS0tJwotICoKLSAqIFRoZSBjaGFsbGVuZ2UgaGVyZSBpcyB0byBjdXQgb3V0IHRoZSByaWdodCBwaWVjZXMgb2YgdGhlIHRyYWNrIGZvciBlYWNoIG9mCi0gKiB0aGUgcGxheWJhY2sgc2VnbWVudHMuIFRoaXMgZm9ydHVuYXRlbHkgY2FuIGVhc2lseSBiZSBkb25lIHdpdGggdGhlIFNFR01FTlQKLSAqIGV2ZW50cyBvZiBHU3RyZWFtZXIuCi0gKgotICogRm9yIHBsYXliYWNrIG9mIHNlZ21lbnQgMSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkZWNvZGVyIHdpdGggdGhlIGtleWZyYW1lCi0gKiAoYSksIGluIHRoZSBhYm92ZSBmaWd1cmUsIGJ1dCB3ZSBtdXN0IGluc3RydWN0IGl0IG9ubHkgdG8gb3V0cHV0IHRoZSBkZWNvZGVkCi0gKiBkYXRhIGJldHdlZW4gc2Vjb25kIDEgYW5kIDIuIFdlIGRvIHRoaXMgd2l0aCBhIFNFR01FTlQgZXZlbnQgZm9yIDEgdG8gMiwgdGltZQotICogcG9zaXRpb24gc2V0IHRvIHRoZSB0aW1lIG9mIHRoZSBzZWdtZW50OiAwLgotICoKLSAqIFdlIHRoZW4gcHJvY2VlZCB0byBwdXNoIGRhdGEgZnJvbSBrZXlmcmFtZSAoYSkgdG8gZnJhbWUgKGIpLiBUaGUgZGVjb2RlcgotICogZGVjb2RlcyBidXQgY2xpcHMgYWxsIGJlZm9yZSBtZWRpYV90aW1lIDEuCi0gKgotICogQWZ0ZXIgZmluaXNoaW5nIGEgc2VnbWVudCwgd2UgcHVzaCBvdXQgYSBuZXcgU0VHTUVOVCBldmVudCB3aXRoIHRoZSBjbGlwcGluZwotICogYm91bmRhcmllcyBvZiB0aGUgbmV3IGRhdGEuCi0gKgotICogVGhpcyBpcyBhIGdvb2QgdXNlY2FzZSBmb3IgdGhlIEdTdHJlYW1lciBhY2N1bXVsYXRlZCBTRUdNRU5UIGV2ZW50cy4KLSAqLwotCi1zdHJ1Y3QgX1F0RGVtdXhTZWdtZW50Ci17Ci0gIC8qIGdsb2JhbCB0aW1lIGFuZCBkdXJhdGlvbiwgYWxsIGdzdCB0aW1lICovCi0gIEdzdENsb2NrVGltZSB0aW1lOwotICBHc3RDbG9ja1RpbWUgc3RvcF90aW1lOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0gIC8qIG1lZGlhIHRpbWUgb2YgdHJhaywgYWxsIGdzdCB0aW1lICovCi0gIEdzdENsb2NrVGltZSBtZWRpYV9zdGFydDsKLSAgR3N0Q2xvY2tUaW1lIG1lZGlhX3N0b3A7Ci0gIGdkb3VibGUgcmF0ZTsKLSAgLyogTWVkaWEgc3RhcnQgdGltZSBpbiB0cmFrIHRpbWVzY2FsZSB1bml0cyAqLwotICBndWludDMyIHRyYWtfbWVkaWFfc3RhcnQ7Ci19OwotCi0jZGVmaW5lIFFUU0VHTUVOVF9JU19FTVBUWShzKSAoKHMpLT5tZWRpYV9zdGFydCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotCi0vKiBVc2VkIHdpdGggZnJhZ21lbnRlZCBNUDQgZmlsZXMgKG1mcmEgYXRvbSkgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdENsb2NrVGltZSB0czsKLSAgZ3VpbnQ2NCBtb29mX29mZnNldDsKLX0gUXREZW11eFJhbmRvbUFjY2Vzc0VudHJ5OwotCi1zdHJ1Y3QgX1F0RGVtdXhTdHJlYW0KLXsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgLyogc3RyZWFtIHR5cGUgKi8KLSAgZ3VpbnQzMiBzdWJ0eXBlOwotICBHc3RDYXBzICpjYXBzOwotICBndWludDMyIGZvdXJjYzsKLSAgZ2Jvb2xlYW4gc3BhcnNlOwotCi0gIGdib29sZWFuIG5ld19jYXBzOyAgICAgICAgICAgIC8qIElmIFRSVUUsIGNhcHMgbmVlZCB0byBiZSBnZW5lcmF0ZWQgKGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNhbGxpbmcgX2NvbmZpZ3VyZV9zdHJlYW0oKSkgVGhpcyBoYXBwZW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZvciBNU1MgYW5kIGZyYWdtZW50ZWQgc3RyZWFtcyAqLwotCi0gIGdib29sZWFuIG5ld19zdHJlYW07ICAgICAgICAgIC8qIHNpZ25hbHMgdGhhdCBhIHN0cmVhbV9zdGFydCBpcyByZXF1aXJlZCAqLwotICBnYm9vbGVhbiBvbl9rZXlmcmFtZTsgICAgICAgICAvKiBpZiB0aGlzIHN0cmVhbSBsYXN0IHB1c2hlZCBidWZmZXIgd2FzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoga2V5ZnJhbWUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGlkZW50aWZ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdoZXJlIHRvIHN0b3AgcHVzaGluZyBidWZmZXJzIGFmdGVyIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2VnbWVudCBzdG9wIHRpbWUgKi8KLQotICAvKiBpZiB0aGUgc3RyZWFtIGhhcyBhIHJlZGlyZWN0IFVSSSBpbiBpdHMgaGVhZGVycywgd2Ugc3RvcmUgaXQgaGVyZSAqLwotICBnY2hhciAqcmVkaXJlY3RfdXJpOwotCi0gIC8qIHRyYWNrIGlkICovCi0gIGd1aW50IHRyYWNrX2lkOwotCi0gIC8qIGR1cmF0aW9uL3NjYWxlICovCi0gIGd1aW50NjQgZHVyYXRpb247ICAgICAgICAgICAgIC8qIGluIHRpbWVzY2FsZSB1bml0cyAqLwotICBndWludDMyIHRpbWVzY2FsZTsKLQotICAvKiBsYW5ndWFnZSAqLwotICBnY2hhciBsYW5nX2lkWzRdOyAgICAgICAgICAgICAvKiBJU08gNjM5LTJUIGxhbmd1YWdlIGNvZGUgKi8KLQotICAvKiBvdXIgc2FtcGxlcyAqLwotICBndWludDMyIG5fc2FtcGxlczsKLSAgUXREZW11eFNhbXBsZSAqc2FtcGxlczsKLSAgZ2Jvb2xlYW4gYWxsX2tleWZyYW1lOyAgICAgICAgLyogVFJVRSB3aGVuIGFsbCBzYW1wbGVzIGFyZSBrZXlmcmFtZXMgKG5vIHN0c3MpICovCi0gIGd1aW50MzIgZmlyc3RfZHVyYXRpb247ICAgICAgIC8qIGR1cmF0aW9uIGluIHRpbWVzY2FsZSBvZiBmaXJzdCBzYW1wbGUsIHVzZWQgZm9yIGZpZ3VyaW5nIG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJhbWVyYXRlICovCi0gIGd1aW50MzIgbl9zYW1wbGVzX21vb2Y7ICAgICAgIC8qIHNhbXBsZSBjb3VudCBpbiBhIG1vb2YgKi8KLSAgZ3VpbnQ2NCBkdXJhdGlvbl9tb29mOyAgICAgICAgLyogZHVyYXRpb24gaW4gdGltZXNjYWxlIG9mIGEgbW9vZiwgdXNlZCBmb3IgZmlndXJlIG91dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgZnJhbWVyYXRlIG9mIGZyYWdtZW50ZWQgZm9ybWF0IHN0cmVhbSAqLwotICBndWludDY0IGR1cmF0aW9uX2xhc3RfbW9vZjsKLQotICBndWludDMyIG9mZnNldF9pbl9zYW1wbGU7ICAgICAvKiBPZmZzZXQgaW4gdGhlIGN1cnJlbnQgc2FtcGxlLCB1c2VkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdHJlYW1zIHdoaWNoIGhhdmUgZ290IGV4Y2VlZGluZ2x5IGJpZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzYW1wbGUgc2l6ZSAoc3VjaCBhcyAyNHMgb2YgcmF3IGF1ZGlvKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogT25seSB1c2VkIHdoZW4gbWF4X2J1ZmZlcl9zaXplIGlzIG5vbi1OVUxMICovCi0gIGd1aW50MzIgbWF4X2J1ZmZlcl9zaXplOyAgICAgIC8qIE1heGltdW0gYWxsb3dlZCBzaXplIGZvciBvdXRwdXQgYnVmZmVycy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ3VycmVudGx5IG9ubHkgc2V0IGZvciByYXcgYXVkaW8gc3RyZWFtcyovCi0KLSAgLyogaWYgd2UgdXNlIGNodW5rcyBvciBzYW1wbGVzICovCi0gIGdib29sZWFuIHNhbXBsZWQ7Ci0gIGd1aW50IHBhZGRpbmc7Ci0KLSAgLyogdmlkZW8gaW5mbyAqLwotICBnaW50IHdpZHRoOwotICBnaW50IGhlaWdodDsKLSAgLyogYXNwZWN0IHJhdGlvICovCi0gIGdpbnQgZGlzcGxheV93aWR0aDsKLSAgZ2ludCBkaXNwbGF5X2hlaWdodDsKLSAgZ2ludCBwYXJfdzsKLSAgZ2ludCBwYXJfaDsKLSAgLyogTnVtZXJhdG9yL2Rlbm9taW5hdG9yIGZyYW1lcmF0ZSAqLwotICBnaW50IGZwc19uOwotICBnaW50IGZwc19kOwotICBndWludDE2IGJpdHNfcGVyX3NhbXBsZTsKLSAgZ3VpbnQxNiBjb2xvcl90YWJsZV9pZDsKLSAgR3N0TWVtb3J5ICpyZ2I4X3BhbGV0dGU7Ci0KLSAgLyogYXVkaW8gaW5mbyAqLwotICBnZG91YmxlIHJhdGU7Ci0gIGdpbnQgbl9jaGFubmVsczsKLSAgZ3VpbnQgc2FtcGxlc19wZXJfcGFja2V0OwotICBndWludCBzYW1wbGVzX3Blcl9mcmFtZTsKLSAgZ3VpbnQgYnl0ZXNfcGVyX3BhY2tldDsKLSAgZ3VpbnQgYnl0ZXNfcGVyX3NhbXBsZTsKLSAgZ3VpbnQgYnl0ZXNfcGVyX2ZyYW1lOwotICBndWludCBjb21wcmVzc2lvbjsKLQotICAvKiBhbGxvY2F0aW9uICovCi0gIGdib29sZWFuIHVzZV9hbGxvY2F0b3I7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLQotICBnc2l6ZSBhbGlnbm1lbnQ7Ci0KLSAgLyogd2hlbiBhIGRpc2NvbnRpbnVpdHkgaXMgcGVuZGluZyAqLwotICBnYm9vbGVhbiBkaXNjb250OwotCi0gIC8qIGxpc3Qgb2YgYnVmZmVycyB0byBwdXNoIGZpcnN0ICovCi0gIEdTTGlzdCAqYnVmZmVyczsKLQotICAvKiBpZiB3ZSBuZWVkIHRvIGNsaXAgdGhpcyBidWZmZXIuIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIHVuY29tcHJlc3NlZAotICAgKiBkYXRhICovCi0gIGdib29sZWFuIG5lZWRfY2xpcDsKLQotICAvKiBidWZmZXIgbmVlZHMgc29tZSBjdXN0b20gcHJvY2Vzc2luZywgZS5nLiBzdWJ0aXRsZXMgKi8KLSAgZ2Jvb2xlYW4gbmVlZF9wcm9jZXNzOwotCi0gIC8qIGN1cnJlbnQgcG9zaXRpb24gKi8KLSAgZ3VpbnQzMiBzZWdtZW50X2luZGV4OwotICBndWludDMyIHNhbXBsZV9pbmRleDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVfcG9zaXRpb247ICAgLyogaW4gZ3N0IHRpbWUgKi8KLSAgZ3VpbnQ2NCBhY2N1bXVsYXRlZF9iYXNlOwotCi0gIC8qIHRoZSBHc3Qgc2VnbWVudCB3ZSBhcmUgcHJvY2Vzc2luZyBvdXQsIHVzZWQgZm9yIGNsaXBwaW5nICovCi0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAvKiBxdWlja3RpbWUgc2VnbWVudHMgKi8KLSAgZ3VpbnQzMiBuX3NlZ21lbnRzOwotICBRdERlbXV4U2VnbWVudCAqc2VnbWVudHM7Ci0gIGdib29sZWFuIGR1bW15X3NlZ21lbnQ7Ci0gIGd1aW50MzIgZnJvbV9zYW1wbGU7Ci0gIGd1aW50MzIgdG9fc2FtcGxlOwotCi0gIGdib29sZWFuIHNlbnRfZW9zOwotICBHc3RUYWdMaXN0ICpwZW5kaW5nX3RhZ3M7Ci0gIGdib29sZWFuIHNlbmRfZ2xvYmFsX3RhZ3M7Ci0KLSAgR3N0RXZlbnQgKnBlbmRpbmdfZXZlbnQ7Ci0KLSAgR3N0Qnl0ZVJlYWRlciBzdGNvOwotICBHc3RCeXRlUmVhZGVyIHN0c3o7Ci0gIEdzdEJ5dGVSZWFkZXIgc3RzYzsKLSAgR3N0Qnl0ZVJlYWRlciBzdHRzOwotICBHc3RCeXRlUmVhZGVyIHN0c3M7Ci0gIEdzdEJ5dGVSZWFkZXIgc3RwczsKLSAgR3N0Qnl0ZVJlYWRlciBjdHRzOwotCi0gIGdib29sZWFuIGNodW5rc19hcmVfc2FtcGxlczsgIC8qIFRSVUUgbWVhbnMgdHJlYXQgY2h1bmtzIGFzIHNhbXBsZXMgKi8KLSAgZ2ludDY0IHN0YmxfaW5kZXg7Ci0gIC8qIHN0Y28gKi8KLSAgZ3VpbnQgY29fc2l6ZTsKLSAgR3N0Qnl0ZVJlYWRlciBjb19jaHVuazsKLSAgZ3VpbnQzMiBmaXJzdF9jaHVuazsKLSAgZ3VpbnQzMiBjdXJyZW50X2NodW5rOwotICBndWludDMyIGxhc3RfY2h1bms7Ci0gIGd1aW50MzIgc2FtcGxlc19wZXJfY2h1bms7Ci0gIGd1aW50MzIgc3Rjb19zYW1wbGVfaW5kZXg7Ci0gIC8qIHN0c3ogKi8KLSAgZ3VpbnQzMiBzYW1wbGVfc2l6ZTsgICAgICAgICAgLyogMCBtZWFucyB2YXJpYWJsZSBzaXplcyBhcmUgc3RvcmVkIGluIHN0c3ogKi8KLSAgLyogc3RzYyAqLwotICBndWludDMyIHN0c2NfaW5kZXg7Ci0gIGd1aW50MzIgbl9zYW1wbGVzX3Blcl9jaHVuazsKLSAgZ3VpbnQzMiBzdHNjX2NodW5rX2luZGV4OwotICBndWludDMyIHN0c2Nfc2FtcGxlX2luZGV4OwotICBndWludDY0IGNodW5rX29mZnNldDsKLSAgLyogc3R0cyAqLwotICBndWludDMyIHN0dHNfaW5kZXg7Ci0gIGd1aW50MzIgc3R0c19zYW1wbGVzOwotICBndWludDMyIG5fc2FtcGxlX3RpbWVzOwotICBndWludDMyIHN0dHNfc2FtcGxlX2luZGV4OwotICBndWludDY0IHN0dHNfdGltZTsKLSAgZ3VpbnQzMiBzdHRzX2R1cmF0aW9uOwotICAvKiBzdHNzICovCi0gIGdib29sZWFuIHN0c3NfcHJlc2VudDsKLSAgZ3VpbnQzMiBuX3NhbXBsZV9zeW5jczsKLSAgZ3VpbnQzMiBzdHNzX2luZGV4OwotICAvKiBzdHBzICovCi0gIGdib29sZWFuIHN0cHNfcHJlc2VudDsKLSAgZ3VpbnQzMiBuX3NhbXBsZV9wYXJ0aWFsX3N5bmNzOwotICBndWludDMyIHN0cHNfaW5kZXg7Ci0gIFF0RGVtdXhSYW5kb21BY2Nlc3NFbnRyeSAqcmFfZW50cmllczsKLSAgZ3VpbnQgbl9yYV9lbnRyaWVzOwotCi0gIGNvbnN0IFF0RGVtdXhSYW5kb21BY2Nlc3NFbnRyeSAqcGVuZGluZ19zZWVrOwotCi0gIC8qIGN0dHMgKi8KLSAgZ2Jvb2xlYW4gY3R0c19wcmVzZW50OwotICBndWludDMyIG5fY29tcG9zaXRpb25fdGltZXM7Ci0gIGd1aW50MzIgY3R0c19pbmRleDsKLSAgZ3VpbnQzMiBjdHRzX3NhbXBsZV9pbmRleDsKLSAgZ3VpbnQzMiBjdHRzX2NvdW50OwotICBnaW50MzIgY3R0c19zb2Zmc2V0OwotCi0gIC8qIGNzbGcgKi8KLSAgZ3VpbnQzMiBjc2xnX3NoaWZ0OwotCi0gIC8qIGZyYWdtZW50ZWQgKi8KLSAgZ2Jvb2xlYW4gcGFyc2VkX3RyZXg7Ci0gIGd1aW50MzIgZGVmX3NhbXBsZV9kdXJhdGlvbjsKLSAgZ3VpbnQzMiBkZWZfc2FtcGxlX3NpemU7Ci0gIGd1aW50MzIgZGVmX3NhbXBsZV9mbGFnczsKLQotICBnYm9vbGVhbiBkaXNhYmxlZDsKLQotICAvKiBzdGVyZW9zY29waWMgdmlkZW8gc3RyZWFtcyAqLwotICBHc3RWaWRlb011bHRpdmlld01vZGUgbXVsdGl2aWV3X21vZGU7Ci0gIEdzdFZpZGVvTXVsdGl2aWV3RmxhZ3MgbXVsdGl2aWV3X2ZsYWdzOwotCi0gIC8qIHByb3RlY3RlZCBzdHJlYW1zICovCi0gIGdib29sZWFuIHByb3RlY3RlZDsKLSAgZ3VpbnQzMiBwcm90ZWN0aW9uX3NjaGVtZV90eXBlOwotICBndWludDMyIHByb3RlY3Rpb25fc2NoZW1lX3ZlcnNpb247Ci0gIGdwb2ludGVyIHByb3RlY3Rpb25fc2NoZW1lX2luZm87ICAgICAgLyogc3BlY2lmaWMgdG8gdGhlIHByb3RlY3Rpb24gc2NoZW1lICovCi0gIEdRdWV1ZSBwcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZTsKLX07Ci0KLS8qIENvbnRhaW5zIHByb3BlcnRpZXMgYW5kIGNyeXB0b2dyYXBoaWMgaW5mbyBmb3IgYSBzZXQgb2Ygc2FtcGxlcyBmcm9tIGEKLSAqIHRyYWNrIHByb3RlY3RlZCB1c2luZyBDb21tb24gRW5jcnlwdGlvbiAoY2VuYykgKi8KLXN0cnVjdCBfUXREZW11eENlbmNTYW1wbGVTZXRJbmZvCi17Ci0gIEdzdFN0cnVjdHVyZSAqZGVmYXVsdF9wcm9wZXJ0aWVzOwotCi0gIC8qIEBjcnlwdG9faW5mbyBob2xkcyBvbmUgR3N0U3RydWN0dXJlIHBlciBzYW1wbGUgKi8KLSAgR1B0ckFycmF5ICpjcnlwdG9faW5mbzsKLX07Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1xdF9kZW11eF9zdGF0ZV9zdHJpbmcgKGVudW0gUXREZW11eFN0YXRlIHN0YXRlKQotewotICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBRVERFTVVYX1NUQVRFX0lOSVRJQUw6Ci0gICAgICByZXR1cm4gIjxJTklUSUFMPiI7Ci0gICAgY2FzZSBRVERFTVVYX1NUQVRFX0hFQURFUjoKLSAgICAgIHJldHVybiAiPEhFQURFUj4iOwotICAgIGNhc2UgUVRERU1VWF9TVEFURV9NT1ZJRToKLSAgICAgIHJldHVybiAiPE1PVklFPiI7Ci0gICAgY2FzZSBRVERFTVVYX1NUQVRFX0JVRkZFUl9NREFUOgotICAgICAgcmV0dXJuICI8QlVGRkVSX01EQVQ+IjsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuICI8VU5LTk9XTj4iOwotICB9Ci19Ci0KLXN0YXRpYyBHTm9kZSAqcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChHTm9kZSAqIG5vZGUsIGd1aW50MzIgZm91cmNjKTsKLXN0YXRpYyBHTm9kZSAqcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKEdOb2RlICogbm9kZSwKLSAgICBndWludDMyIGZvdXJjYywgR3N0Qnl0ZVJlYWRlciAqIHBhcnNlcik7Ci1zdGF0aWMgR05vZGUgKnF0ZGVtdXhfdHJlZV9nZXRfc2libGluZ19ieV90eXBlIChHTm9kZSAqIG5vZGUsIGd1aW50MzIgZm91cmNjKTsKLXN0YXRpYyBHTm9kZSAqcXRkZW11eF90cmVlX2dldF9zaWJsaW5nX2J5X3R5cGVfZnVsbCAoR05vZGUgKiBub2RlLAotICAgIGd1aW50MzIgZm91cmNjLCBHc3RCeXRlUmVhZGVyICogcGFyc2VyKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gcXRkZW11eF9hZGRfZnJhZ21lbnRlZF9zYW1wbGVzIChHc3RRVERlbXV4ICogcXRkZW11eCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcXRkZW11eF9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby9xdWlja3RpbWU7IHZpZGVvL21qMjsgYXVkaW8veC1tNGE7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtM2dwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3F0ZGVtdXhfdmlkZW9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJ2aWRlb18ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcXRkZW11eF9hdWRpb3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoImF1ZGlvXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9xdGRlbXV4X3N1YnNyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInN1YnRpdGxlXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotI2RlZmluZSBnc3RfcXRkZW11eF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RRVERlbXV4LCBnc3RfcXRkZW11eCwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9xdGRlbXV4X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ3VpbnQzMgotZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9saW5lYXIgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyLAotICAgIEdzdENsb2NrVGltZSBtZWRpYV90aW1lKTsKLXN0YXRpYyBndWludDMyCi1nc3RfcXRkZW11eF9maW5kX2luZGV4X2Zvcl9naXZlbl9tZWRpYV9vZmZzZXRfbGluZWFyIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyLCBnaW50NjQgbWVkaWFfb2Zmc2V0KTsKLQotI2lmIDAKLXN0YXRpYyB2b2lkIGdzdF9xdGRlbXV4X3NldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEluZGV4ICogaW5kZXgpOwotc3RhdGljIEdzdEluZGV4ICpnc3RfcXRkZW11eF9nZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLSNlbmRpZgotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gcXRkZW11eF9zaW5rX2FjdGl2YXRlIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpOwotc3RhdGljIGdib29sZWFuIHF0ZGVtdXhfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBzaW5rcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotCi1zdGF0aWMgdm9pZCBnc3RfcXRkZW11eF9sb29wIChHc3RQYWQgKiBwYWQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3F0ZGVtdXhfY2hhaW4gKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBpbmJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F0ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9xdGRlbXV4X3NldGNhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3N0cmVhbSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcXRkZW11eF9wcm9jZXNzX2FkYXB0ZXIgKEdzdFFURGVtdXggKiBkZW11eCwKLSAgICBnYm9vbGVhbiBmb3JjZSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBxdGRlbXV4X3BhcnNlX21vb3YgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIGNvbnN0IGd1aW50OCAqIGJ1ZmZlciwgZ3VpbnQgbGVuZ3RoKTsKLXN0YXRpYyBnYm9vbGVhbiBxdGRlbXV4X3BhcnNlX25vZGUgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHTm9kZSAqIG5vZGUsCi0gICAgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBndWludCBsZW5ndGgpOwotc3RhdGljIGdib29sZWFuIHF0ZGVtdXhfcGFyc2VfdHJlZSAoR3N0UVREZW11eCAqIHF0ZGVtdXgpOwotc3RhdGljIHZvaWQgcXRkZW11eF9wYXJzZV91ZHRhIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0VGFnTGlzdCAqIHRhZ2xpc3QsCi0gICAgR05vZGUgKiB1ZHRhKTsKLQotc3RhdGljIHZvaWQgZ3N0X3F0ZGVtdXhfaGFuZGxlX2VzZHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIEdOb2RlICogZXNkcywgR3N0VGFnTGlzdCAqIGxpc3QpOwotc3RhdGljIEdzdENhcHMgKnF0ZGVtdXhfdmlkZW9fY2FwcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwgZ3VpbnQzMiBmb3VyY2MsIGNvbnN0IGd1aW50OCAqIHN0c2RfZGF0YSwKLSAgICBnY2hhciAqKiBjb2RlY19uYW1lKTsKLXN0YXRpYyBHc3RDYXBzICpxdGRlbXV4X2F1ZGlvX2NhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGd1aW50MzIgZm91cmNjLCBjb25zdCBndWludDggKiBkYXRhLCBpbnQgbGVuLAotICAgIGdjaGFyICoqIGNvZGVjX25hbWUpOwotc3RhdGljIEdzdENhcHMgKnF0ZGVtdXhfc3ViX2NhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGd1aW50MzIgZm91cmNjLCBjb25zdCBndWludDggKiBkYXRhLAotICAgIGdjaGFyICoqIGNvZGVjX25hbWUpOwotc3RhdGljIEdzdENhcHMgKnF0ZGVtdXhfZ2VuZXJpY19jYXBzIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtLCBndWludDMyIGZvdXJjYywgY29uc3QgZ3VpbnQ4ICogc3RzZF9kYXRhLAotICAgIGdjaGFyICoqIGNvZGVjX25hbWUpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gcXRkZW11eF9wYXJzZV9zYW1wbGVzIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtLCBndWludDMyIG4pOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gcXRkZW11eF9leHBvc2Vfc3RyZWFtcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgpOwotc3RhdGljIHZvaWQgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZyZWUgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0pOwotc3RhdGljIHZvaWQgZ3N0X3F0ZGVtdXhfc3RyZWFtX2NsZWFyIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtKTsKLXN0YXRpYyB2b2lkIGdzdF9xdGRlbXV4X3JlbW92ZV9zdHJlYW0gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBpbnQgaW5kZXgpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gcXRkZW11eF9wcmVwYXJlX3N0cmVhbXMgKEdzdFFURGVtdXggKiBxdGRlbXV4KTsKLXN0YXRpYyB2b2lkIHF0ZGVtdXhfZG9fYWxsb2NhdGlvbiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwgZ3VpbnQzMiBzZWdfaWR4LCBHc3RDbG9ja1RpbWUgb2Zmc2V0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcXRkZW11eF9zdHJlYW1fdXBkYXRlX3NlZ21lbnQgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGdpbnQgc2VnX2lkeCwgR3N0Q2xvY2tUaW1lIG9mZnNldCwKLSAgICBHc3RDbG9ja1RpbWUgKiBfc3RhcnQsIEdzdENsb2NrVGltZSAqIF9zdG9wKTsKLXN0YXRpYyB2b2lkIGdzdF9xdGRlbXV4X3NlbmRfZ2FwX2Zvcl9zZWdtZW50IChHc3RRVERlbXV4ICogZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwgZ2ludCBzZWdtZW50X2luZGV4LCBHc3RDbG9ja1RpbWUgcG9zKTsKLQotc3RhdGljIGdib29sZWFuIHF0ZGVtdXhfcHVsbF9tZnJvX21mcmEgKEdzdFFURGVtdXggKiBxdGRlbXV4KTsKLXN0YXRpYyB2b2lkIGNoZWNrX3VwZGF0ZV9kdXJhdGlvbiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdENsb2NrVGltZSBkdXJhdGlvbik7Ci0KLXN0YXRpYyBnY2hhciAqcXRkZW11eF91dWlkX2J5dGVzX3RvX3N0cmluZyAoZ2NvbnN0cG9pbnRlciB1dWlkX2J5dGVzKTsKLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqcXRkZW11eF9nZXRfY2VuY19zYW1wbGVfcHJvcGVydGllcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwgZ3VpbnQgc2FtcGxlX2luZGV4KTsKLXN0YXRpYyB2b2lkIGdzdF9xdGRlbXV4X2FwcGVuZF9wcm90ZWN0aW9uX3N5c3RlbV9pZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgY29uc3QgZ2NoYXIgKiBpZCk7Ci1zdGF0aWMgdm9pZCBxdGRlbXV4X2dzdF9zdHJ1Y3R1cmVfZnJlZSAoR3N0U3RydWN0dXJlICogZ3N0c3RydWN0dXJlKTsKLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X2NsYXNzX2luaXQgKEdzdFFURGVtdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9xdGRlbXV4X2Rpc3Bvc2U7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSk7Ci0jaWYgMAotICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfaW5kZXggPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3F0ZGVtdXhfc2V0X2luZGV4KTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Z2V0X2luZGV4ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9xdGRlbXV4X2dldF9pbmRleCk7Ci0jZW5kaWYKLQotICBnc3RfdGFnX3JlZ2lzdGVyX211c2ljYnJhaW56X3RhZ3MgKCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3F0ZGVtdXhfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9xdGRlbXV4X3ZpZGVvc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3F0ZGVtdXhfYXVkaW9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcXRkZW11eF9zdWJzcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUXVpY2tUaW1lIGRlbXV4ZXIiLAotICAgICAgIkNvZGVjL0RlbXV4ZXIiLAotICAgICAgIkRlbXVsdGlwbGV4IGEgUXVpY2tUaW1lIGZpbGUgaW50byBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtcyIsCi0gICAgICAiRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+LCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChxdGRlbXV4X2RlYnVnLCAicXRkZW11eCIsIDAsICJxdGRlbXV4IHBsdWdpbiIpOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9pbml0IChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgcXRkZW11eC0+c2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmdzdF9xdGRlbXV4X3NpbmtfdGVtcGxhdGUsICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlX2Z1bmN0aW9uIChxdGRlbXV4LT5zaW5rcGFkLCBxdGRlbXV4X3NpbmtfYWN0aXZhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZW1vZGVfZnVuY3Rpb24gKHF0ZGVtdXgtPnNpbmtwYWQsCi0gICAgICBxdGRlbXV4X3NpbmtfYWN0aXZhdGVfbW9kZSk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChxdGRlbXV4LT5zaW5rcGFkLCBnc3RfcXRkZW11eF9jaGFpbik7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChxdGRlbXV4LT5zaW5rcGFkLCBnc3RfcXRkZW11eF9oYW5kbGVfc2lua19ldmVudCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHF0ZGVtdXgpLCBxdGRlbXV4LT5zaW5rcGFkKTsKLQotICBxdGRlbXV4LT5zdGF0ZSA9IFFUREVNVVhfU1RBVEVfSU5JVElBTDsKLSAgcXRkZW11eC0+cHVsbGJhc2VkID0gRkFMU0U7Ci0gIHF0ZGVtdXgtPnBvc3RlZF9yZWRpcmVjdCA9IEZBTFNFOwotICBxdGRlbXV4LT5uZWVkZWRieXRlcyA9IDE2OwotICBxdGRlbXV4LT50b2Ryb3AgPSAwOwotICBxdGRlbXV4LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBxdGRlbXV4LT5vZmZzZXQgPSAwOwotICBxdGRlbXV4LT5maXJzdF9tZGF0ID0gLTE7Ci0gIHF0ZGVtdXgtPmdvdF9tb292ID0gRkFMU0U7Ci0gIHF0ZGVtdXgtPm1kYXRvZmZzZXQgPSAtMTsKLSAgcXRkZW11eC0+bWRhdGJ1ZmZlciA9IE5VTEw7Ci0gIHF0ZGVtdXgtPnJlc3RvcmVkYXRhX2J1ZmZlciA9IE5VTEw7Ci0gIHF0ZGVtdXgtPnJlc3RvcmVkYXRhX29mZnNldCA9IC0xOwotICBxdGRlbXV4LT5mcmFnbWVudF9zdGFydCA9IC0xOwotICBxdGRlbXV4LT5mcmFnbWVudF9zdGFydF9vZmZzZXQgPSAtMTsKLSAgcXRkZW11eC0+bWVkaWFfY2FwcyA9IE5VTEw7Ci0gIHF0ZGVtdXgtPmV4cG9zZWQgPSBGQUxTRTsKLSAgcXRkZW11eC0+bXNzX21vZGUgPSBGQUxTRTsKLSAgcXRkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50ID0gTlVMTDsKLSAgcXRkZW11eC0+dXBzdHJlYW1fZm9ybWF0X2lzX3RpbWUgPSBGQUxTRTsKLSAgcXRkZW11eC0+aGF2ZV9ncm91cF9pZCA9IEZBTFNFOwotICBxdGRlbXV4LT5ncm91cF9pZCA9IEdfTUFYVUlOVDsKLSAgcXRkZW11eC0+Y2VuY19hdXhfaW5mb19vZmZzZXQgPSAwOwotICBxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzID0gTlVMTDsKLSAgcXRkZW11eC0+Y2VuY19hdXhfc2FtcGxlX2NvdW50ID0gMDsKLSAgcXRkZW11eC0+cHJvdGVjdGlvbl9zeXN0ZW1faWRzID0gTlVMTDsKLSAgZ19xdWV1ZV9pbml0ICgmcXRkZW11eC0+cHJvdGVjdGlvbl9ldmVudF9xdWV1ZSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZxdGRlbXV4LT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBxdGRlbXV4LT5mbG93Y29tYmluZXIgPSBnc3RfZmxvd19jb21iaW5lcl9uZXcgKCk7Ci0KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAocXRkZW11eCwgR1NUX0VMRU1FTlRfRkxBR19JTkRFWEFCTEUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UVREZW11eCAqcXRkZW11eCA9IEdTVF9RVERFTVVYIChvYmplY3QpOwotCi0gIGlmIChxdGRlbXV4LT5hZGFwdGVyKSB7Ci0gICAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChxdGRlbXV4LT5hZGFwdGVyKSk7Ci0gICAgcXRkZW11eC0+YWRhcHRlciA9IE5VTEw7Ci0gIH0KLSAgZ3N0X2Zsb3dfY29tYmluZXJfZnJlZSAocXRkZW11eC0+Zmxvd2NvbWJpbmVyKTsKLSAgZ19xdWV1ZV9mb3JlYWNoICgmcXRkZW11eC0+cHJvdGVjdGlvbl9ldmVudF9xdWV1ZSwgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsCi0gICAgICBOVUxMKTsKLSAgZ19xdWV1ZV9jbGVhciAoJnF0ZGVtdXgtPnByb3RlY3Rpb25fZXZlbnRfcXVldWUpOwotCi0gIGdfZnJlZSAocXRkZW11eC0+Y2VuY19hdXhfaW5mb19zaXplcyk7Ci0gIHF0ZGVtdXgtPmNlbmNfYXV4X2luZm9fc2l6ZXMgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfcG9zdF9ub19wbGF5YWJsZV9zdHJlYW1fZXJyb3IgKEdzdFFURGVtdXggKiBxdGRlbXV4KQotewotICBpZiAocXRkZW11eC0+cG9zdGVkX3JlZGlyZWN0KSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0ZGVtdXgsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgIChfKCJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iKSksCi0gICAgICAgICgibm8ga25vd24gc3RyZWFtcyBmb3VuZCwgYSByZWRpcmVjdCBtZXNzYWdlIGhhcyBiZWVuIHBvc3RlZCIpKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRkZW11eCwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgKF8oIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIpKSwKLSAgICAgICAgKCJubyBrbm93biBzdHJlYW1zIGZvdW5kIikpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotX2dzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdwb2ludGVyIG1lbSwgZ3NpemUgc2l6ZSwgR0ZyZWVGdW5jIGZyZWVfZnVuYykKLXsKLSAgcmV0dXJuIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoZnJlZV9mdW5jID8gMCA6IEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgIG1lbSwgc2l6ZSwgMCwgc2l6ZSwgbWVtLCBmcmVlX2Z1bmMpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0ZGVtdXhfcHVsbF9hdG9tIChHc3RRVERlbXV4ICogcXRkZW11eCwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50NjQgc2l6ZSwKLSAgICBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnc2l6ZSBic2l6ZTsKLQotICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA9PSAwKSkgewotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotICAgIEdzdEJ1ZmZlciAqdG1wID0gTlVMTDsKLQotICAgIHJldCA9IGdzdF9xdGRlbXV4X3B1bGxfYXRvbSAocXRkZW11eCwgb2Zmc2V0LCBzaXplb2YgKGd1aW50MzIpLCAmdG1wKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgcmV0dXJuIHJldDsKLQotICAgIGdzdF9idWZmZXJfbWFwICh0bXAsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgc2l6ZSA9IFFUX1VJTlQzMiAobWFwLmRhdGEpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzaXplIDB4JTA4IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIHNpemUpOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAodG1wLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmICh0bXApOwotICB9Ci0KLSAgLyogU2FuaXR5IGNoZWNrOiBjYXRjaCBib2d1cyBzaXplcyAoZnV6emVkL2Jyb2tlbiBmaWxlcykgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPiBRVERFTVVYX01BWF9BVE9NX1NJWkUpKSB7Ci0gICAgaWYgKHF0ZGVtdXgtPnN0YXRlICE9IFFUREVNVVhfU1RBVEVfTU9WSUUgJiYgcXRkZW11eC0+Z290X21vb3YpIHsKLSAgICAgIC8qIHdlJ3JlIHB1bGxpbmcgaGVhZGVyIGJ1dCBhbHJlYWR5IGdvdCBtb3N0IGludGVyZXN0aW5nIGJpdHMsCi0gICAgICAgKiBzbyBuZXZlciBtaW5kIHRoZSByZXN0IChlLmcuIHRhZ3MpICh0aGF0IG11Y2gpICovCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJhdG9tIGhhcyBib2d1cyBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgc2l6ZSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRkZW11eCwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgICAoXygiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIikpLAotICAgICAgICAgICgiYXRvbSBoYXMgYm9ndXMgc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBzaXplKSk7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgZmxvdyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAocXRkZW11eC0+c2lua3BhZCwgb2Zmc2V0LCBzaXplLCBidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChmbG93ICE9IEdTVF9GTE9XX09LKSkKLSAgICByZXR1cm4gZmxvdzsKLQotICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWYpOwotICAvKiBDYXRjaCBzaG9ydCByZWFkcyAtIHdlIGRvbid0IHdhbnQgYW55IHBhcnRpYWwgYXRvbXMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGJzaXplIDwgc2l6ZSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJzaG9ydCByZWFkOiAlIiBHX0dTSVpFX0ZPUk1BVCAiIDwgJSIgR19HVUlOVDY0X0ZPUk1BVCwgYnNpemUsIHNpemUpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWYpOwotICAgICpidWYgPSBOVUxMOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLQotICByZXR1cm4gZmxvdzsKLX0KLQotI2lmIDEKLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfc3JjX2NvbnZlcnQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Rm9ybWF0IHNyY19mb3JtYXQsIGdpbnQ2NCBzcmNfdmFsdWUsIEdzdEZvcm1hdCBkZXN0X2Zvcm1hdCwKLSAgICBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIGdpbnQzMiBpbmRleDsKLQotICBpZiAoc3RyZWFtLT5zdWJ0eXBlICE9IEZPVVJDQ192aWRlKSB7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgc3dpdGNoIChzcmNfZm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICBzd2l0Y2ggKGRlc3RfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzp7Ci0gICAgICAgICAgaW5kZXggPSBnc3RfcXRkZW11eF9maW5kX2luZGV4X2xpbmVhciAocXRkZW11eCwgc3RyZWFtLCBzcmNfdmFsdWUpOwotICAgICAgICAgIGlmICgtMSA9PSBpbmRleCkgewotICAgICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgKmRlc3RfdmFsdWUgPSBzdHJlYW0tPnNhbXBsZXNbaW5kZXhdLm9mZnNldDsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJGb3JtYXQgQ29udmVyc2lvbiBUaW1lLT5PZmZzZXQgOiUiCi0gICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLT4lIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzcmNfdmFsdWUpLCAqZGVzdF92YWx1ZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgIHN3aXRjaCAoZGVzdF9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6ewotICAgICAgICAgIGluZGV4ID0KLSAgICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9mb3JfZ2l2ZW5fbWVkaWFfb2Zmc2V0X2xpbmVhciAocXRkZW11eCwKLSAgICAgICAgICAgICAgc3RyZWFtLCBzcmNfdmFsdWUpOwotCi0gICAgICAgICAgaWYgKC0xID09IGluZGV4KSB7Ci0gICAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAqZGVzdF92YWx1ZSA9Ci0gICAgICAgICAgICAgIFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sCi0gICAgICAgICAgICAgIHN0cmVhbS0+c2FtcGxlc1tpbmRleF0udGltZXN0YW1wKTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgICAiRm9ybWF0IENvbnZlcnNpb24gT2Zmc2V0LT5UaW1lIDolIiBHX0dVSU5UNjRfRk9STUFUICItPiUiCi0gICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgc3JjX3ZhbHVlLCBHU1RfVElNRV9BUkdTICgqZGVzdF92YWx1ZSkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfZ2V0X2R1cmF0aW9uIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Q2xvY2tUaW1lICogZHVyYXRpb24pCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gICpkdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgaWYgKHF0ZGVtdXgtPmR1cmF0aW9uICE9IDAgJiYKLSAgICAgIHF0ZGVtdXgtPmR1cmF0aW9uICE9IEdfTUFYSU5UNjQgJiYgcXRkZW11eC0+dGltZXNjYWxlICE9IDApIHsKLSAgICAqZHVyYXRpb24gPSBRVFRJTUVfVE9fR1NUVElNRSAocXRkZW11eCwgcXRkZW11eC0+ZHVyYXRpb24pOwotICAgIHJlcyA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgKmR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdFFURGVtdXggKnF0ZGVtdXggPSBHU1RfUVRERU1VWCAocGFyZW50KTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiJXMgcXVlcnkiLCBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOnsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmbXQsIE5VTEwpOwotICAgICAgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUKLSAgICAgICAgICAmJiBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocXRkZW11eC0+c2VnbWVudC5wb3NpdGlvbikpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9wb3NpdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgIHF0ZGVtdXgtPnNlZ21lbnQucG9zaXRpb24pOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOnsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmbXQsIE5VTEwpOwotICAgICAgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgLyogRmlyc3QgdHJ5IHRvIHF1ZXJ5IHVwc3RyZWFtICovCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgICAgaWYgKCFyZXMpIHsKLSAgICAgICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0gICAgICAgICAgaWYgKGdzdF9xdGRlbXV4X2dldF9kdXJhdGlvbiAocXRkZW11eCwgJmR1cmF0aW9uKSAmJiBkdXJhdGlvbiA+IDApIHsKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX1RJTUUsIGR1cmF0aW9uKTsKLSAgICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfQ09OVkVSVDp7Ci0gICAgICBHc3RGb3JtYXQgc3JjX2ZtdCwgZGVzdF9mbXQ7Ci0gICAgICBnaW50NjQgc3JjX3ZhbHVlLCBkZXN0X3ZhbHVlID0gMDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NvbnZlcnQgKHF1ZXJ5LCAmc3JjX2ZtdCwgJnNyY192YWx1ZSwgJmRlc3RfZm10LCBOVUxMKTsKLQotICAgICAgcmVzID0gZ3N0X3F0ZGVtdXhfc3JjX2NvbnZlcnQgKHF0ZGVtdXgsIHBhZCwKLSAgICAgICAgICBzcmNfZm10LCBzcmNfdmFsdWUsIGRlc3RfZm10LCAmZGVzdF92YWx1ZSk7Ci0gICAgICBpZiAocmVzKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfY29udmVydCAocXVlcnksIHNyY19mbXQsIHNyY192YWx1ZSwgZGVzdF9mbXQsIGRlc3RfdmFsdWUpOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0ZPUk1BVFM6Ci0gICAgICBnc3RfcXVlcnlfc2V0X2Zvcm1hdHMgKHF1ZXJ5LCAyLCBHU1RfRk9STUFUX1RJTUUsIEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1FVRVJZX1NFRUtJTkc6ewotICAgICAgR3N0Rm9ybWF0IGZtdDsKLSAgICAgIGdib29sZWFuIHNlZWthYmxlOwotCi0gICAgICAvKiB0cnkgdXBzdHJlYW0gZmlyc3QgKi8KLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLQotICAgICAgaWYgKCFyZXMpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCAmZm10LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0KLSAgICAgICAgICBnc3RfcXRkZW11eF9nZXRfZHVyYXRpb24gKHF0ZGVtdXgsICZkdXJhdGlvbik7Ci0gICAgICAgICAgc2Vla2FibGUgPSBUUlVFOwotICAgICAgICAgIGlmICghcXRkZW11eC0+cHVsbGJhc2VkKSB7Ci0gICAgICAgICAgICBHc3RRdWVyeSAqcTsKLQotICAgICAgICAgICAgLyogd2UgbWlnaHQgYmUgYWJsZSB3aXRoIGhlbHAgZnJvbSB1cHN0cmVhbSAqLwotICAgICAgICAgICAgc2Vla2FibGUgPSBGQUxTRTsKLSAgICAgICAgICAgIHEgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgICAgICAgaWYgKGdzdF9wYWRfcGVlcl9xdWVyeSAocXRkZW11eC0+c2lua3BhZCwgcSkpIHsKLSAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHEsICZmbXQsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAidXBzdHJlYW0gQllURSBzZWVrYWJsZSAlZCIsIHNlZWthYmxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdzdF9xdWVyeV91bnJlZiAocSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgc2Vla2FibGUsIDAsIGR1cmF0aW9uKTsKLSAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotICAgICAgZ2ludDY0IHN0YXJ0LCBzdG9wOwotCi0gICAgICBmb3JtYXQgPSBxdGRlbXV4LT5zZWdtZW50LmZvcm1hdDsKLQotICAgICAgc3RhcnQgPQotICAgICAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmcXRkZW11eC0+c2VnbWVudCwgZm9ybWF0LAotICAgICAgICAgIHF0ZGVtdXgtPnNlZ21lbnQuc3RhcnQpOwotICAgICAgaWYgKChzdG9wID0gcXRkZW11eC0+c2VnbWVudC5zdG9wKSA9PSAtMSkKLSAgICAgICAgc3RvcCA9IHF0ZGVtdXgtPnNlZ21lbnQuZHVyYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIHN0b3AgPSBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnF0ZGVtdXgtPnNlZ21lbnQsIGZvcm1hdCwgc3RvcCk7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAocXVlcnksIHF0ZGVtdXgtPnNlZ21lbnQucmF0ZSwgZm9ybWF0LCBzdGFydCwgc3RvcCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9wdXNoX3RhZ3MgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtKQotewotICBpZiAoR19MSUtFTFkgKHN0cmVhbS0+cGFkKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJDaGVja2luZyBwYWQgJXM6JXMgZm9yIHRhZ3MiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHN0cmVhbS0+cGFkKSk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5wZW5kaW5nX3RhZ3MpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiU2VuZGluZyB0YWdzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgIHN0cmVhbS0+cGVuZGluZ190YWdzKTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5wYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKHN0cmVhbS0+cGVuZGluZ190YWdzKSk7Ci0gICAgICBzdHJlYW0tPnBlbmRpbmdfdGFncyA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHN0cmVhbS0+c2VuZF9nbG9iYWxfdGFncyAmJiBxdGRlbXV4LT50YWdfbGlzdCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJTZW5kaW5nIGdsb2JhbCB0YWdzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgIHF0ZGVtdXgtPnRhZ19saXN0KTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5wYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKHF0ZGVtdXgtPnRhZ19saXN0KSkpOwotICAgICAgc3RyZWFtLT5zZW5kX2dsb2JhbF90YWdzID0gRkFMU0U7Ci0gICAgfQotICB9Ci19Ci0KLS8qIHB1c2ggZXZlbnQgb24gYWxsIHNvdXJjZSBwYWRzOyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGV2ZW50ICovCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfcHVzaF9ldmVudCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGd1aW50IG47Ci0gIGdib29sZWFuIGhhc192YWxpZF9zdHJlYW0gPSBGQUxTRTsKLSAgR3N0RXZlbnRUeXBlIGV0eXBlID0gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicHVzaGluZyAlcyBldmVudCBvbiBhbGwgc291cmNlIHBhZHMiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBmb3IgKG4gPSAwOyBuIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBuKyspIHsKLSAgICBHc3RQYWQgKnBhZDsKLSAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zW25dOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJwdXNoaW5nIG9uIHBhZCAlaSIsIG4pOwotCi0gICAgaWYgKChwYWQgPSBzdHJlYW0tPnBhZCkpIHsKLSAgICAgIGhhc192YWxpZF9zdHJlYW0gPSBUUlVFOwotCi0gICAgICBpZiAoZXR5cGUgPT0gR1NUX0VWRU5UX0VPUykgewotICAgICAgICAvKiBsZXQncyBub3Qgc2VuZCB0d2ljZSAqLwotICAgICAgICBpZiAoc3RyZWFtLT5zZW50X2VvcykKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgc3RyZWFtLT5zZW50X2VvcyA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotICAgIH0KLSAgfQotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIC8qIGlmIGl0IGlzIEVPUyBhbmQgdGhlcmUgYXJlIG5vIHBhZHMsIHBvc3QgYW4gZXJyb3IgKi8KLSAgaWYgKCFoYXNfdmFsaWRfc3RyZWFtICYmIGV0eXBlID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICBnc3RfcXRkZW11eF9wb3N0X25vX3BsYXlhYmxlX3N0cmVhbV9lcnJvciAocXRkZW11eCk7Ci0gIH0KLX0KLQotLyogcHVzaCBhIHBlbmRpbmcgbmV3c2VnbWVudCBldmVudCwgaWYgYW55IGZyb20gdGhlIHN0cmVhbWluZyB0aHJlYWQgKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9wdXNoX3BlbmRpbmdfbmV3c2VnbWVudCAoR3N0UVREZW11eCAqIHF0ZGVtdXgpCi17Ci0gIGlmIChxdGRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQpIHsKLSAgICBnc3RfcXRkZW11eF9wdXNoX2V2ZW50IChxdGRlbXV4LCBxdGRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQpOwotICAgIHF0ZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCA9IE5VTEw7Ci0gIH0KLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQ2NCBtZWRpYV90aW1lOwotfSBGaW5kRGF0YTsKLQotc3RhdGljIGdpbnQKLWZpbmRfZnVuYyAoUXREZW11eFNhbXBsZSAqIHMxLCBnaW50NjQgKiBtZWRpYV90aW1lLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmICgoZ2ludDY0KSBzMS0+dGltZXN0YW1wICsgczEtPnB0c19vZmZzZXQgPiAqbWVkaWFfdGltZSkKLSAgICByZXR1cm4gMTsKLSAgaWYgKChnaW50NjQpIHMxLT50aW1lc3RhbXAgKyBzMS0+cHRzX29mZnNldCA9PSAqbWVkaWFfdGltZSkKLSAgICByZXR1cm4gMDsKLQotICByZXR1cm4gLTE7Ci19Ci0KLS8qIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUgdGhhdCBpbmNsdWRlcyB0aGUgZGF0YSBmb3IgQG1lZGlhX3RpbWUgdXNpbmcgYQotICogYmluYXJ5IHNlYXJjaC4gIE9ubHkgdG8gYmUgY2FsbGVkIGluIG9wdGltaXplZCBjYXNlcyBvZiBsaW5lYXIgc2VhcmNoIGJlbG93LgotICoKLSAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUuCi0gKi8KLXN0YXRpYyBndWludDMyCi1nc3RfcXRkZW11eF9maW5kX2luZGV4IChHc3RRVERlbXV4ICogcXRkZW11eCwgUXREZW11eFN0cmVhbSAqIHN0ciwKLSAgICBndWludDY0IG1lZGlhX3RpbWUpCi17Ci0gIFF0RGVtdXhTYW1wbGUgKnJlc3VsdDsKLSAgZ3VpbnQzMiBpbmRleDsKLQotICAvKiBjb252ZXJ0IG1lZGlhX3RpbWUgdG8gbW92IGZvcm1hdCAqLwotICBtZWRpYV90aW1lID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsIChtZWRpYV90aW1lLCBzdHItPnRpbWVzY2FsZSwgR1NUX1NFQ09ORCk7Ci0KLSAgcmVzdWx0ID0gZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoc3RyLT5zYW1wbGVzLCBzdHItPnN0YmxfaW5kZXggKyAxLAotICAgICAgc2l6ZW9mIChRdERlbXV4U2FtcGxlKSwgKEdDb21wYXJlRGF0YUZ1bmMpIGZpbmRfZnVuYywKLSAgICAgIEdTVF9TRUFSQ0hfTU9ERV9CRUZPUkUsICZtZWRpYV90aW1lLCBOVUxMKTsKLQotICBpZiAoR19MSUtFTFkgKHJlc3VsdCkpCi0gICAgaW5kZXggPSByZXN1bHQgLSBzdHItPnNhbXBsZXM7Ci0gIGVsc2UKLSAgICBpbmRleCA9IDA7Ci0KLSAgcmV0dXJuIGluZGV4OwotfQotCi0KLQotLyogZmluZCB0aGUgaW5kZXggb2YgdGhlIHNhbXBsZSB0aGF0IGluY2x1ZGVzIHRoZSBkYXRhIGZvciBAbWVkaWFfb2Zmc2V0IHVzaW5nIGEKLSAqIGxpbmVhciBzZWFyY2gKLSAqCi0gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgc2FtcGxlLgotICovCi1zdGF0aWMgZ3VpbnQzMgotZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9mb3JfZ2l2ZW5fbWVkaWFfb2Zmc2V0X2xpbmVhciAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0ciwgZ2ludDY0IG1lZGlhX29mZnNldCkKLXsKLSAgUXREZW11eFNhbXBsZSAqcmVzdWx0ID0gc3RyLT5zYW1wbGVzOwotICBndWludDMyIGluZGV4ID0gMDsKLQotICBpZiAocmVzdWx0ID09IE5VTEwgfHwgc3RyLT5uX3NhbXBsZXMgPT0gMCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgaWYgKG1lZGlhX29mZnNldCA9PSByZXN1bHQtPm9mZnNldCkKLSAgICByZXR1cm4gaW5kZXg7Ci0KLSAgcmVzdWx0Kys7Ci0gIHdoaWxlIChpbmRleCA8IHN0ci0+bl9zYW1wbGVzIC0gMSkgewotICAgIGlmICghcXRkZW11eF9wYXJzZV9zYW1wbGVzIChxdGRlbXV4LCBzdHIsIGluZGV4ICsgMSkpCi0gICAgICBnb3RvIHBhcnNlX2ZhaWxlZDsKLQotICAgIGlmIChtZWRpYV9vZmZzZXQgPCByZXN1bHQtPm9mZnNldCkKLSAgICAgIGJyZWFrOwotCi0gICAgaW5kZXgrKzsKLSAgICByZXN1bHQrKzsKLSAgfQotICByZXR1cm4gaW5kZXg7Ci0KLSAgLyogRVJST1JTICovCi1wYXJzZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIlBhcnNpbmcgb2YgaW5kZXggJXUgZmFpbGVkISIsIGluZGV4ICsgMSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci19Ci0KLS8qIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUgdGhhdCBpbmNsdWRlcyB0aGUgZGF0YSBmb3IgQG1lZGlhX3RpbWUgdXNpbmcgYQotICogbGluZWFyIHNlYXJjaCwgYW5kIGtlZXBpbmcgaW4gbWluZCB0aGF0IG5vdCBhbGwgc2FtcGxlcyBtYXkgaGF2ZSBiZWVuIHBhcnNlZAotICogeWV0LiAgSWYgcG9zc2libGUsIGl0IHdpbGwgZGVsZWdhdGUgdG8gYmluYXJ5IHNlYXJjaC4KLSAqCi0gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgc2FtcGxlLgotICovCi1zdGF0aWMgZ3VpbnQzMgotZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9saW5lYXIgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyLAotICAgIEdzdENsb2NrVGltZSBtZWRpYV90aW1lKQotewotICBndWludDMyIGluZGV4ID0gMDsKLSAgZ3VpbnQ2NCBtb3ZfdGltZTsKLSAgUXREZW11eFNhbXBsZSAqc2FtcGxlOwotCi0gIC8qIGNvbnZlcnQgbWVkaWFfdGltZSB0byBtb3YgZm9ybWF0ICovCi0gIG1vdl90aW1lID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsIChtZWRpYV90aW1lLCBzdHItPnRpbWVzY2FsZSwgR1NUX1NFQ09ORCk7Ci0KLSAgc2FtcGxlID0gc3RyLT5zYW1wbGVzOwotICBpZiAobW92X3RpbWUgPT0gc2FtcGxlLT50aW1lc3RhbXAgKyBzYW1wbGUtPnB0c19vZmZzZXQpCi0gICAgcmV0dXJuIGluZGV4OwotCi0gIC8qIHVzZSBmYXN0ZXIgc2VhcmNoIGlmIHJlcXVlc3RlZCB0aW1lIGluIGFscmVhZHkgcGFyc2VkIHJhbmdlICovCi0gIHNhbXBsZSA9IHN0ci0+c2FtcGxlcyArIHN0ci0+c3RibF9pbmRleDsKLSAgaWYgKHN0ci0+c3RibF9pbmRleCA+PSAwICYmCi0gICAgICBtb3ZfdGltZSA8PSAoc2FtcGxlLT50aW1lc3RhbXAgKyBzYW1wbGUtPnB0c19vZmZzZXQpKQotICAgIHJldHVybiBnc3RfcXRkZW11eF9maW5kX2luZGV4IChxdGRlbXV4LCBzdHIsIG1lZGlhX3RpbWUpOwotCi0gIHdoaWxlIChpbmRleCA8IHN0ci0+bl9zYW1wbGVzIC0gMSkgewotICAgIGlmICghcXRkZW11eF9wYXJzZV9zYW1wbGVzIChxdGRlbXV4LCBzdHIsIGluZGV4ICsgMSkpCi0gICAgICBnb3RvIHBhcnNlX2ZhaWxlZDsKLQotICAgIHNhbXBsZSA9IHN0ci0+c2FtcGxlcyArIGluZGV4ICsgMTsKLSAgICBpZiAobW92X3RpbWUgPCAoc2FtcGxlLT50aW1lc3RhbXAgKyBzYW1wbGUtPnB0c19vZmZzZXQpKQotICAgICAgYnJlYWs7Ci0KLSAgICBpbmRleCsrOwotICB9Ci0gIHJldHVybiBpbmRleDsKLQotICAvKiBFUlJPUlMgKi8KLXBhcnNlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiUGFyc2luZyBvZiBpbmRleCAldSBmYWlsZWQhIiwgaW5kZXggKyAxKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLX0KLQotLyogZmluZCB0aGUgaW5kZXggb2YgdGhlIGtleWZyYW1lIG5lZWRlZCB0byBkZWNvZGUgdGhlIHNhbXBsZSBhdCBAaW5kZXgKLSAqIG9mIHN0cmVhbSBAc3RyLgotICoKLSAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBrZXlmcmFtZS4KLSAqLwotc3RhdGljIGd1aW50MzIKLWdzdF9xdGRlbXV4X2ZpbmRfa2V5ZnJhbWUgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyLAotICAgIGd1aW50MzIgaW5kZXgpCi17Ci0gIGd1aW50MzIgbmV3X2luZGV4ID0gaW5kZXg7Ci0KLSAgaWYgKGluZGV4ID49IHN0ci0+bl9zYW1wbGVzKSB7Ci0gICAgbmV3X2luZGV4ID0gc3RyLT5uX3NhbXBsZXM7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIC8qIGFsbCBrZXlmcmFtZXMsIHJldHVybiBpbmRleCAqLwotICBpZiAoc3RyLT5hbGxfa2V5ZnJhbWUpIHsKLSAgICBuZXdfaW5kZXggPSBpbmRleDsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgLyogZWxzZSBnbyBiYWNrIHVudGlsIHdlIGhhdmUgYSBrZXlmcmFtZSAqLwotICB3aGlsZSAoVFJVRSkgewotICAgIGlmIChzdHItPnNhbXBsZXNbbmV3X2luZGV4XS5rZXlmcmFtZSkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKG5ld19pbmRleCA9PSAwKQotICAgICAgYnJlYWs7Ci0KLSAgICBuZXdfaW5kZXgtLTsKLSAgfQotCi1iZWFjaDoKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInNlYXJjaGluZyBmb3Iga2V5ZnJhbWUgaW5kZXggYmVmb3JlIGluZGV4ICV1ICIKLSAgICAgICJnYXZlICV1IiwgaW5kZXgsIG5ld19pbmRleCk7Ci0KLSAgcmV0dXJuIG5ld19pbmRleDsKLX0KLQotLyogZmluZCB0aGUgc2VnbWVudCBmb3IgQHRpbWVfcG9zaXRpb24gZm9yIEBzdHJlYW0KLSAqCi0gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgc2VnbWVudCBjb250YWluaW5nIEB0aW1lX3Bvc2l0aW9uLgotICogUmV0dXJucyB0aGUgbGFzdCBzZWdtZW50IGFuZCBzZXRzIHRoZSBAZW9zIHZhcmlhYmxlIHRvIFRSVUUKLSAqIGlmIHRoZSB0aW1lIGlzIGJleW9uZCB0aGUgZW5kLiBAZW9zIG1heSBiZSBOVUxMCi0gKi8KLXN0YXRpYyBndWludDMyCi1nc3RfcXRkZW11eF9maW5kX3NlZ21lbnQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIEdzdENsb2NrVGltZSB0aW1lX3Bvc2l0aW9uKQotewotICBnaW50IGk7Ci0gIGd1aW50MzIgc2VnX2lkeDsKLQotICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLT5wYWQsICJmaW5kaW5nIHNlZ21lbnQgZm9yICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVfcG9zaXRpb24pKTsKLQotICBzZWdfaWR4ID0gLTE7Ci0gIGZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPm5fc2VnbWVudHM7IGkrKykgewotICAgIFF0RGVtdXhTZWdtZW50ICpzZWdtZW50ID0gJnN0cmVhbS0+c2VnbWVudHNbaV07Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLT5wYWQsCi0gICAgICAgICJsb29raW5nIGF0IHNlZ21lbnQgJSIgR1NUX1RJTUVfRk9STUFUICItJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT50aW1lKSwgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+c3RvcF90aW1lKSk7Ci0KLSAgICAvKiBGb3IgdGhlIGxhc3Qgc2VnbWVudCB3ZSBpbmNsdWRlIHN0b3BfdGltZSBpbiB0aGUgbGFzdCBzZWdtZW50ICovCi0gICAgaWYgKGkgPCBzdHJlYW0tPm5fc2VnbWVudHMgLSAxKSB7Ci0gICAgICBpZiAoc2VnbWVudC0+dGltZSA8PSB0aW1lX3Bvc2l0aW9uICYmIHRpbWVfcG9zaXRpb24gPCBzZWdtZW50LT5zdG9wX3RpbWUpIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAic2VnbWVudCAlZCBtYXRjaGVzIiwgaSk7Ci0gICAgICAgIHNlZ19pZHggPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogTGFzdCBzZWdtZW50IGFsd2F5cyBtYXRjaGVzICovCi0gICAgICBzZWdfaWR4ID0gaTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICByZXR1cm4gc2VnX2lkeDsKLX0KLQotLyogbW92ZSB0aGUgc3RyZWFtIEBzdHIgdG8gdGhlIHNhbXBsZSBwb3NpdGlvbiBAaW5kZXguCi0gKgotICogVXBkYXRlcyBAc3RyLT5zYW1wbGVfaW5kZXggYW5kIG1hcmtzIGRpc2NvbnRpbnVpdHkgaWYgbmVlZGVkLgotICovCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfbW92ZV9zdHJlYW0gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyLAotICAgIGd1aW50MzIgaW5kZXgpCi17Ci0gIC8qIG5vIGNoYW5nZSBuZWVkZWQgKi8KLSAgaWYgKGluZGV4ID09IHN0ci0+c2FtcGxlX2luZGV4KQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAibW92aW5nIHRvIHNhbXBsZSAldSBvZiAldSIsIGluZGV4LAotICAgICAgc3RyLT5uX3NhbXBsZXMpOwotCi0gIC8qIHBvc2l0aW9uIGNoYW5nZWQsIHdlIGhhdmUgYSBkaXNjb250ICovCi0gIHN0ci0+c2FtcGxlX2luZGV4ID0gaW5kZXg7Ci0gIHN0ci0+b2Zmc2V0X2luX3NhbXBsZSA9IDA7Ci0gIC8qIEVhY2ggdGltZSB3ZSBtb3ZlIGluIHRoZSBzdHJlYW0gd2Ugc3RvcmUgdGhlIHBvc2l0aW9uIHdoZXJlIHdlIGFyZQotICAgKiBzdGFydGluZyBmcm9tICovCi0gIHN0ci0+ZnJvbV9zYW1wbGUgPSBpbmRleDsKLSAgc3RyLT5kaXNjb250ID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X2FkanVzdF9zZWVrIChHc3RRVERlbXV4ICogcXRkZW11eCwgZ2ludDY0IGRlc2lyZWRfdGltZSwKLSAgICBnYm9vbGVhbiB1c2Vfc3BhcnNlLCBnaW50NjQgKiBrZXlfdGltZSwgZ2ludDY0ICoga2V5X29mZnNldCkKLXsKLSAgZ3VpbnQ2NCBtaW5fb2Zmc2V0OwotICBnaW50NjQgbWluX2J5dGVfb2Zmc2V0ID0gLTE7Ci0gIGdpbnQgbjsKLQotICBtaW5fb2Zmc2V0ID0gZGVzaXJlZF90aW1lOwotCi0gIC8qIGZvciBlYWNoIHN0cmVhbSwgZmluZCB0aGUgaW5kZXggb2YgdGhlIHNhbXBsZSBpbiB0aGUgc2VnbWVudAotICAgKiBhbmQgbW92ZSBiYWNrIHRvIHRoZSBwcmV2aW91cyBrZXlmcmFtZS4gKi8KLSAgZm9yIChuID0gMDsgbiA8IHF0ZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyOwotICAgIGd1aW50MzIgaW5kZXgsIGtpbmRleDsKLSAgICBndWludDMyIHNlZ19pZHg7Ci0gICAgR3N0Q2xvY2tUaW1lIG1lZGlhX3N0YXJ0OwotICAgIEdzdENsb2NrVGltZSBtZWRpYV90aW1lOwotICAgIEdzdENsb2NrVGltZSBzZWdfdGltZTsKLSAgICBRdERlbXV4U2VnbWVudCAqc2VnOwotICAgIGdib29sZWFuIGVtcHR5X3NlZ21lbnQgPSBGQUxTRTsKLQotICAgIHN0ciA9IHF0ZGVtdXgtPnN0cmVhbXNbbl07Ci0KLSAgICBpZiAoc3RyLT5zcGFyc2UgJiYgIXVzZV9zcGFyc2UpCi0gICAgICBjb250aW51ZTsKLQotICAgIHNlZ19pZHggPSBnc3RfcXRkZW11eF9maW5kX3NlZ21lbnQgKHF0ZGVtdXgsIHN0ciwgZGVzaXJlZF90aW1lKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYWxpZ24gc2VnbWVudCAlZCIsIHNlZ19pZHgpOwotCi0gICAgLyogZ2V0IHNlZ21lbnQgYW5kIHRpbWUgaW4gdGhlIHNlZ21lbnQgKi8KLSAgICBzZWcgPSAmc3RyLT5zZWdtZW50c1tzZWdfaWR4XTsKLSAgICBzZWdfdGltZSA9IChkZXNpcmVkX3RpbWUgLSBzZWctPnRpbWUpICogc2VnLT5yYXRlOwotCi0gICAgd2hpbGUgKFFUU0VHTUVOVF9JU19FTVBUWSAoc2VnKSkgewotICAgICAgc2VnX3RpbWUgPSAwOwotICAgICAgZW1wdHlfc2VnbWVudCA9IFRSVUU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzdHItPnBhZCwgIlNlZ21lbnQgJWQgaXMgZW1wdHksIG1vdmluZyB0byBuZXh0IG9uZSIsCi0gICAgICAgICAgc2VnX2lkeCk7Ci0gICAgICBzZWdfaWR4Kys7Ci0gICAgICBpZiAoc2VnX2lkeCA9PSBzdHItPm5fc2VnbWVudHMpCi0gICAgICAgIGJyZWFrOwotICAgICAgc2VnID0gJnN0ci0+c2VnbWVudHNbc2VnX2lkeF07Ci0gICAgfQotCi0gICAgaWYgKHNlZ19pZHggPT0gc3RyLT5uX3NlZ21lbnRzKSB7Ci0gICAgICAvKiBGSVhNRSB0cmFjayBzaG91bGRuJ3QgaGF2ZSB0aGUgbGFzdCBzZWdtZW50IGFzIGVtcHR5LCBidXQgaWYgaXQKLSAgICAgICAqIGhhcHBlbnMgd2UgYmV0dGVyIGhhbmRsZSBpdCAqLwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogZ2V0IHRoZSBtZWRpYSB0aW1lIGluIHRoZSBzZWdtZW50ICovCi0gICAgbWVkaWFfc3RhcnQgPSBzZWctPm1lZGlhX3N0YXJ0ICsgc2VnX3RpbWU7Ci0KLSAgICAvKiBnZXQgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUgd2l0aCBtZWRpYSB0aW1lICovCi0gICAgaW5kZXggPSBnc3RfcXRkZW11eF9maW5kX2luZGV4X2xpbmVhciAocXRkZW11eCwgc3RyLCBtZWRpYV9zdGFydCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInNhbXBsZSBmb3IgJSIgR1NUX1RJTUVfRk9STUFUICIgYXQgJXUiCi0gICAgICAgICIgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoZW1wdHkgc2VnbWVudDogJWQpIiwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAobWVkaWFfc3RhcnQpLCBpbmRleCwgc3RyLT5zYW1wbGVzW2luZGV4XS5vZmZzZXQsCi0gICAgICAgIGVtcHR5X3NlZ21lbnQpOwotCi0gICAgaWYgKCFlbXB0eV9zZWdtZW50KSB7Ci0gICAgICAvKiBmaW5kIHByZXZpb3VzIGtleWZyYW1lICovCi0gICAgICBraW5kZXggPSBnc3RfcXRkZW11eF9maW5kX2tleWZyYW1lIChxdGRlbXV4LCBzdHIsIGluZGV4KTsKLQotICAgICAgLyogaWYgdGhlIGtleWZyYW1lIGlzIGF0IGEgZGlmZmVyZW50IHBvc2l0aW9uLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUKLSAgICAgICAqIHJlcXVlc3RlZCBzZWVrIHRpbWUgKi8KLSAgICAgIGlmIChpbmRleCAhPSBraW5kZXgpIHsKLSAgICAgICAgaW5kZXggPSBraW5kZXg7Ci0KLSAgICAgICAgLyogZ2V0IHRpbWVzdGFtcCBvZiBrZXlmcmFtZSAqLwotICAgICAgICBtZWRpYV90aW1lID0gUVRTQU1QTEVfUFRTIChzdHIsICZzdHItPnNhbXBsZXNba2luZGV4XSk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAia2V5ZnJhbWUgYXQgJXUgd2l0aCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiIGF0IG9mZnNldCAlIgotICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwga2luZGV4LCBHU1RfVElNRV9BUkdTIChtZWRpYV90aW1lKSwKLSAgICAgICAgICAgIHN0ci0+c2FtcGxlc1traW5kZXhdLm9mZnNldCk7Ci0KLSAgICAgICAgLyoga2V5ZnJhbWVzIGluIHRoZSBzZWdtZW50IGdldCBhIGNoYW5jZSB0byBjaGFuZ2UgdGhlCi0gICAgICAgICAqIGRlc2lyZWRfb2Zmc2V0LiBrZXlmcmFtZXMgb3V0IG9mIHRoZSBzZWdtZW50IGFyZQotICAgICAgICAgKiBpZ25vcmVkLiAqLwotICAgICAgICBpZiAobWVkaWFfdGltZSA+PSBzZWctPm1lZGlhX3N0YXJ0KSB7Ci0gICAgICAgICAgR3N0Q2xvY2tUaW1lIHNlZ190aW1lOwotCi0gICAgICAgICAgLyogdGhpcyBrZXlmcmFtZSBpcyBpbnNpZGUgdGhlIHNlZ21lbnQsIGNvbnZlcnQgYmFjayB0bwotICAgICAgICAgICAqIHNlZ21lbnQgdGltZSAqLwotICAgICAgICAgIHNlZ190aW1lID0gKG1lZGlhX3RpbWUgLSBzZWctPm1lZGlhX3N0YXJ0KSArIHNlZy0+dGltZTsKLSAgICAgICAgICBpZiAoc2VnX3RpbWUgPCBtaW5fb2Zmc2V0KQotICAgICAgICAgICAgbWluX29mZnNldCA9IHNlZ190aW1lOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1pbl9ieXRlX29mZnNldCA8IDAgfHwgc3RyLT5zYW1wbGVzW2luZGV4XS5vZmZzZXQgPCBtaW5fYnl0ZV9vZmZzZXQpCi0gICAgICBtaW5fYnl0ZV9vZmZzZXQgPSBzdHItPnNhbXBsZXNbaW5kZXhdLm9mZnNldDsKLSAgfQotCi0gIGlmIChrZXlfdGltZSkKLSAgICAqa2V5X3RpbWUgPSBtaW5fb2Zmc2V0OwotICBpZiAoa2V5X29mZnNldCkKLSAgICAqa2V5X29mZnNldCA9IG1pbl9ieXRlX29mZnNldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRkZW11eF9jb252ZXJ0X3NlZWsgKEdzdFBhZCAqIHBhZCwgR3N0Rm9ybWF0ICogZm9ybWF0LAotICAgIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBnaW50NjQgKiBjdXIsIEdzdFNlZWtUeXBlIHN0b3BfdHlwZSwgZ2ludDY0ICogc3RvcCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmb3JtYXQgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY3VyICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0b3AgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmICgqZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXMgPSBUUlVFOwotICBpZiAoY3VyX3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FKQotICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfY29udmVydCAocGFkLCAqZm9ybWF0LCAqY3VyLCBHU1RfRk9STUFUX1RJTUUsIGN1cik7Ci0gIGlmIChyZXMgJiYgc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkKLSAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHBhZCwgKmZvcm1hdCwgKnN0b3AsIEdTVF9GT1JNQVRfVElNRSwgc3RvcCk7Ci0KLSAgaWYgKHJlcykKLSAgICAqZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qIHBlcmZvcm0gc2VlayBpbiBwdXNoIGJhc2VkIG1vZGU6Ci0gICBmaW5kIEJZVEUgcG9zaXRpb24gdG8gbW92ZSB0byBiYXNlZCBvbiB0aW1lIGFuZCBkZWxlZ2F0ZSB0byB1cHN0cmVhbQotKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfZG9fcHVzaF9zZWVrIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnZG91YmxlIHJhdGU7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgR3N0U2Vla1R5cGUgY3VyX3R5cGUsIHN0b3BfdHlwZTsKLSAgZ2ludDY0IGN1ciwgc3RvcCwga2V5X2N1cjsKLSAgZ2Jvb2xlYW4gcmVzOwotICBnaW50NjQgYnl0ZV9jdXI7Ci0gIGdpbnQ2NCBvcmlnaW5hbF9zdG9wOwotICBndWludDMyIHNlcW51bTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZG9pbmcgcHVzaC1iYXNlZCBzZWVrIik7Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLAotICAgICAgJmN1cl90eXBlLCAmY3VyLCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0gIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0KLSAgLyogb25seSBmb3J3YXJkIHN0cmVhbWluZyBhbmQgc2Vla2luZyBpcyBwb3NzaWJsZSAqLwotICBpZiAocmF0ZSA8PSAwKQotICAgIGdvdG8gdW5zdXBwb3J0ZWRfc2VlazsKLQotICAvKiBjb252ZXJ0IHRvIFRJTUUgaWYgbmVlZGVkIGFuZCBwb3NzaWJsZSAqLwotICBpZiAoIWdzdF9xdGRlbXV4X2NvbnZlcnRfc2VlayAocGFkLCAmZm9ybWF0LCBjdXJfdHlwZSwgJmN1ciwKLSAgICAgICAgICBzdG9wX3R5cGUsICZzdG9wKSkKLSAgICBnb3RvIG5vX2Zvcm1hdDsKLQotICAvKiBVcHN0cmVhbSBzZWVrIGluIGJ5dGVzIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3RvcCwgYnV0IHF0ZGVtdXggc3RvcmVzCi0gICAqIHRoZSBvcmlnaW5hbCBzdG9wIHBvc2l0aW9uIHRvIHVzZSB3aGVuIHVwc3RyZWFtIHB1c2hlcyB0aGUgbmV3IHNlZ21lbnQKLSAgICogZm9yIHRoaXMgc2VlayAqLwotICBvcmlnaW5hbF9zdG9wID0gc3RvcDsKLSAgc3RvcCA9IC0xOwotCi0gIC8qIGZpbmQgcmVhc29uYWJsZSBjb3JyZXNwb25kaW5nIEJZVEUgcG9zaXRpb24sCi0gICAqIGFsc28gdHJ5IHRvIG1pbmQgYWJvdXQga2V5ZnJhbWVzLCBzaW5jZSB3ZSBjYW4gbm90IGdvIGJhY2sgYSBiaXQgZm9yIHRoZW0KLSAgICogbGF0ZXIgb24gKi8KLSAgZ3N0X3F0ZGVtdXhfYWRqdXN0X3NlZWsgKHF0ZGVtdXgsIGN1ciwgRkFMU0UsICZrZXlfY3VyLCAmYnl0ZV9jdXIpOwotCi0gIGlmIChieXRlX2N1ciA9PSAtMSkKLSAgICBnb3RvIGFib3J0X3NlZWs7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIlB1c2hpbmcgQllURSBzZWVrIHJhdGUgJWcsICIKLSAgICAgICJzdGFydCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgc3RvcCAlIiBHX0dJTlQ2NF9GT1JNQVQsIHJhdGUsIGJ5dGVfY3VyLAotICAgICAgc3RvcCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdGRlbXV4KTsKLSAgcXRkZW11eC0+c2Vla19vZmZzZXQgPSBieXRlX2N1cjsKLSAgaWYgKCEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0tFWV9VTklUKSkgewotICAgIHF0ZGVtdXgtPnB1c2hfc2Vla19zdGFydCA9IGN1cjsKLSAgfSBlbHNlIHsKLSAgICBxdGRlbXV4LT5wdXNoX3NlZWtfc3RhcnQgPSBrZXlfY3VyOwotICB9Ci0KLSAgaWYgKHN0b3BfdHlwZSA9PSBHU1RfU0VFS19UWVBFX05PTkUpIHsKLSAgICBxdGRlbXV4LT5wdXNoX3NlZWtfc3RvcCA9IHF0ZGVtdXgtPnNlZ21lbnQuc3RvcDsKLSAgfSBlbHNlIHsKLSAgICBxdGRlbXV4LT5wdXNoX3NlZWtfc3RvcCA9IG9yaWdpbmFsX3N0b3A7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0ZGVtdXgpOwotCi0gIC8qIEJZVEUgc2VlayBldmVudCAqLwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAocmF0ZSwgR1NUX0ZPUk1BVF9CWVRFUywgZmxhZ3MsIGN1cl90eXBlLCBieXRlX2N1ciwKLSAgICAgIHN0b3BfdHlwZSwgc3RvcCk7Ci0gIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgc2VxbnVtKTsKLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChxdGRlbXV4LT5zaW5rcGFkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWFib3J0X3NlZWs6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY291bGQgbm90IGRldGVybWluZSBieXRlIHBvc2l0aW9uIHRvIHNlZWsgdG8sICIKLSAgICAgICAgInNlZWsgYWJvcnRlZC4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXVuc3VwcG9ydGVkX3NlZWs6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAidW5zdXBwb3J0ZWQgc2Vlaywgc2VlayBhYm9ydGVkLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fZm9ybWF0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInVuc3VwcG9ydGVkIGZvcm1hdCBnaXZlbiwgc2VlayBhYm9ydGVkLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBwZXJmb3JtIHRoZSBzZWVrLgotICoKLSAqIFdlIHNldCBhbGwgc2VnbWVudF9pbmRleGVzIGluIHRoZSBzdHJlYW1zIHRvIHVua25vd24gYW5kCi0gKiBhZGp1c3QgdGhlIHRpbWVfcG9zaXRpb24gdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uIHRoaXMgaXMgZW5vdWdoCi0gKiB0byB0cmlnZ2VyIGEgc2VnbWVudCBzd2l0Y2ggaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQgdG8gc3RhcnQKLSAqIHN0cmVhbWluZyBmcm9tIHRoZSBkZXNpcmVkIHBvc2l0aW9uLgotICoKLSAqIEtleWZyYW1lIHNlZWtpbmcgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZCB3aGVuIGRlYWxpbmcgd2l0aAotICogc2VnbWVudHMuIElkZWFsbHkgd2Ugd2FudCB0byBtb3ZlIHRvIHRoZSBwcmV2aW91cyBrZXlmcmFtZSBpbgotICogdGhlIHNlZ21lbnQgYnV0IHRoZXJlIG1pZ2h0IG5vdCBiZSBhIGtleWZyYW1lIGluIHRoZSBzZWdtZW50LiBJbgotICogZmFjdCwgbm9uZSBvZiB0aGUgc2VnbWVudHMgY291bGQgY29udGFpbiBhIGtleWZyYW1lLiBXZSB0YWtlIGEKLSAqIHByYWN0aWNhbCBhcHByb2FjaDogc2VlayB0byB0aGUgcHJldmlvdXMga2V5ZnJhbWUgaW4gdGhlIHNlZ21lbnQsCi0gKiBpZiB0aGVyZSBpcyBub25lLCBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnQuCi0gKgotICogQ2FsbGVkIHdpdGggU1RSRUFNX0xPQ0sKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcXRkZW11eF9wZXJmb3JtX3NlZWsgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RTZWdtZW50ICogc2VnbWVudCwKLSAgICBndWludDMyIHNlcW51bSwgR3N0U2Vla0ZsYWdzIGZsYWdzKQotewotICBnaW50NjQgZGVzaXJlZF9vZmZzZXQ7Ci0gIGdpbnQgbjsKLQotICBkZXNpcmVkX29mZnNldCA9IHNlZ21lbnQtPnBvc2l0aW9uOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzZWVraW5nIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGRlc2lyZWRfb2Zmc2V0KSk7Ci0KLSAgLyogbWF5IG5vdCBoYXZlIGVub3VnaCBmcmFnbWVudGVkIGluZm8gdG8gZG8gdGhpcyBhZGp1c3RtZW50LAotICAgKiBhbmQgd2UgY2FuJ3Qgc2NhbiAoYW5kIHByb2JhYmx5IHNob3VsZCBub3QpIGF0IHRoaXMgdGltZSB3aXRoCi0gICAqIHBvc3NpYmx5IGZsdXNoaW5nIHVwc3RyZWFtICovCi0gIGlmICgoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0tFWV9VTklUKSAmJiAhcXRkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgIGdpbnQ2NCBtaW5fb2Zmc2V0OwotCi0gICAgZ3N0X3F0ZGVtdXhfYWRqdXN0X3NlZWsgKHF0ZGVtdXgsIGRlc2lyZWRfb2Zmc2V0LCBUUlVFLCAmbWluX29mZnNldCwgTlVMTCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImtleWZyYW1lIHNlZWssIGFsaWduIHRvICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobWluX29mZnNldCkpOwotICAgIGRlc2lyZWRfb2Zmc2V0ID0gbWluX29mZnNldDsKLSAgfQotCi0gIC8qIGFuZCBzZXQgYWxsIHN0cmVhbXMgdG8gdGhlIGZpbmFsIHBvc2l0aW9uICovCi0gIGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0IChxdGRlbXV4LT5mbG93Y29tYmluZXIpOwotICBxdGRlbXV4LT5zZWdtZW50X3NlcW51bSA9IHNlcW51bTsKLSAgZm9yIChuID0gMDsgbiA8IHF0ZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gcXRkZW11eC0+c3RyZWFtc1tuXTsKLQotICAgIHN0cmVhbS0+dGltZV9wb3NpdGlvbiA9IGRlc2lyZWRfb2Zmc2V0OwotICAgIHN0cmVhbS0+YWNjdW11bGF0ZWRfYmFzZSA9IDA7Ci0gICAgc3RyZWFtLT5zYW1wbGVfaW5kZXggPSAtMTsKLSAgICBzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUgPSAwOwotICAgIHN0cmVhbS0+c2VnbWVudF9pbmRleCA9IC0xOwotICAgIHN0cmVhbS0+c2VudF9lb3MgPSBGQUxTRTsKLQotICAgIGlmIChzZWdtZW50LT5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0gpCi0gICAgICBnc3Rfc2VnbWVudF9pbml0ICgmc3RyZWFtLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICB9Ci0gIHNlZ21lbnQtPnBvc2l0aW9uID0gZGVzaXJlZF9vZmZzZXQ7Ci0gIHNlZ21lbnQtPnRpbWUgPSBkZXNpcmVkX29mZnNldDsKLSAgaWYgKHNlZ21lbnQtPnJhdGUgPj0gMCkgewotICAgIHNlZ21lbnQtPnN0YXJ0ID0gZGVzaXJlZF9vZmZzZXQ7Ci0KLSAgICAvKiB3ZSBzdG9wIGF0IHRoZSBlbmQgKi8KLSAgICBpZiAoc2VnbWVudC0+c3RvcCA9PSAtMSkKLSAgICAgIHNlZ21lbnQtPnN0b3AgPSBzZWdtZW50LT5kdXJhdGlvbjsKLSAgfSBlbHNlIHsKLSAgICBzZWdtZW50LT5zdG9wID0gZGVzaXJlZF9vZmZzZXQ7Ci0gIH0KLQotICBpZiAocXRkZW11eC0+ZnJhZ21lbnRlZCkKLSAgICBxdGRlbXV4LT5mcmFnbWVudGVkX3NlZWtfcGVuZGluZyA9IFRSVUU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIGRvIGEgc2VlayBpbiBwdWxsIGJhc2VkIG1vZGUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfZG9fc2VlayAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2RvdWJsZSByYXRlOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBzdG9wX3R5cGU7Ci0gIGdpbnQ2NCBjdXIsIHN0b3A7Ci0gIGdib29sZWFuIGZsdXNoOwotICBnYm9vbGVhbiB1cGRhdGU7Ci0gIEdzdFNlZ21lbnQgc2Vla3NlZ21lbnQ7Ci0gIGd1aW50MzIgc2VxbnVtID0gMDsKLSAgR3N0RXZlbnQgKmZsdXNoX2V2ZW50OwotCi0gIGlmIChldmVudCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJkb2luZyBzZWVrIHdpdGggZXZlbnQiKTsKLQotICAgIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgJnJhdGUsICZmb3JtYXQsICZmbGFncywKLSAgICAgICAgJmN1cl90eXBlLCAmY3VyLCAmc3RvcF90eXBlLCAmc3RvcCk7Ci0gICAgc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLQotICAgIC8qIHdlIGhhdmUgdG8gaGF2ZSBhIGZvcm1hdCBhcyB0aGUgc2VnbWVudCBmb3JtYXQuIFRyeSB0byBjb252ZXJ0Ci0gICAgICogaWYgbm90LiAqLwotICAgIGlmICghZ3N0X3F0ZGVtdXhfY29udmVydF9zZWVrIChwYWQsICZmb3JtYXQsIGN1cl90eXBlLCAmY3VyLAotICAgICAgICAgICAgc3RvcF90eXBlLCAmc3RvcCkpCi0gICAgICBnb3RvIG5vX2Zvcm1hdDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzZWVrIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUgKGZvcm1hdCkpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJkb2luZyBzZWVrIHdpdGhvdXQgZXZlbnQiKTsKLSAgICBmbGFncyA9IDA7Ci0gIH0KLQotICBmbHVzaCA9IGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSDsKLQotICAvKiBzdG9wIHN0cmVhbWluZywgZWl0aGVyIGJ5IGZsdXNoaW5nIG9yIGJ5IHBhdXNpbmcgdGhlIHRhc2sgKi8KLSAgaWYgKGZsdXNoKSB7Ci0gICAgZmx1c2hfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpOwotICAgIGlmIChzZXFudW0pCi0gICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZmx1c2hfZXZlbnQsIHNlcW51bSk7Ci0gICAgLyogdW5sb2NrIHVwc3RyZWFtIHB1bGxfcmFuZ2UgKi8KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHF0ZGVtdXgtPnNpbmtwYWQsIGdzdF9ldmVudF9yZWYgKGZsdXNoX2V2ZW50KSk7Ci0gICAgLyogbWFrZSBzdXJlIG91dCBsb29wIGZ1bmN0aW9uIGV4aXRzICovCi0gICAgZ3N0X3F0ZGVtdXhfcHVzaF9ldmVudCAocXRkZW11eCwgZmx1c2hfZXZlbnQpOwotICB9IGVsc2UgewotICAgIC8qIG5vbiBmbHVzaGluZyBzZWVrLCBwYXVzZSB0aGUgdGFzayAqLwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocXRkZW11eC0+c2lua3BhZCk7Ci0gIH0KLQotICAvKiB3YWl0IGZvciBzdHJlYW1pbmcgdG8gZmluaXNoICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHF0ZGVtdXgtPnNpbmtwYWQpOwotCi0gIC8qIGNvcHkgc2VnbWVudCwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0aGUgb2xkCi0gICAqIHNlZ21lbnQgd2hlbiB3ZSBjbG9zZSB0aGUgY3VycmVudCBzZWdtZW50LiAqLwotICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJnF0ZGVtdXgtPnNlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotCi0gIGlmIChldmVudCkgewotICAgIC8qIGNvbmZpZ3VyZSB0aGUgc2VnbWVudCB3aXRoIHRoZSBzZWVrIHZhcmlhYmxlcyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJjb25maWd1cmluZyBzZWVrIik7Ci0gICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAotICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICB9Ci0KLSAgLyogbm93IGRvIHRoZSBzZWVrLCB0aGlzIGFjdHVhbGx5IG5ldmVyIHJldHVybnMgRkFMU0UgKi8KLSAgZ3N0X3F0ZGVtdXhfcGVyZm9ybV9zZWVrIChxdGRlbXV4LCAmc2Vla3NlZ21lbnQsIHNlcW51bSwgZmxhZ3MpOwotCi0gIC8qIHByZXBhcmUgZm9yIHN0cmVhbWluZyBhZ2FpbiAqLwotICBpZiAoZmx1c2gpIHsKLSAgICBmbHVzaF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSk7Ci0gICAgaWYgKHNlcW51bSkKLSAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChmbHVzaF9ldmVudCwgc2VxbnVtKTsKLQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocXRkZW11eC0+c2lua3BhZCwgZ3N0X2V2ZW50X3JlZiAoZmx1c2hfZXZlbnQpKTsKLSAgICBnc3RfcXRkZW11eF9wdXNoX2V2ZW50IChxdGRlbXV4LCBmbHVzaF9ldmVudCk7Ci0gIH0KLQotICAvKiBjb21taXQgdGhlIG5ldyBzZWdtZW50ICovCi0gIG1lbWNweSAoJnF0ZGVtdXgtPnNlZ21lbnQsICZzZWVrc2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgaWYgKHF0ZGVtdXgtPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHsKLSAgICBHc3RNZXNzYWdlICptc2cgPSBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9zdGFydCAoR1NUX09CSkVDVF9DQVNUIChxdGRlbXV4KSwKLSAgICAgICAgcXRkZW11eC0+c2VnbWVudC5mb3JtYXQsIHF0ZGVtdXgtPnNlZ21lbnQucG9zaXRpb24pOwotICAgIGlmIChzZXFudW0pCi0gICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtc2csIHNlcW51bSk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChxdGRlbXV4KSwgbXNnKTsKLSAgfQotCi0gIC8qIHJlc3RhcnQgc3RyZWFtaW5nLCBORVdTRUdNRU5UIHdpbGwgYmUgc2VudCBmcm9tIHRoZSBzdHJlYW1pbmcgdGhyZWFkLiAqLwotICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHF0ZGVtdXgtPnNpbmtwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdGRlbXV4X2xvb3AsCi0gICAgICBxdGRlbXV4LT5zaW5rcGFkLCBOVUxMKTsKLQotICBHU1RfUEFEX1NUUkVBTV9VTkxPQ0sgKHF0ZGVtdXgtPnNpbmtwYWQpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fZm9ybWF0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInVuc3VwcG9ydGVkIGZvcm1hdCBnaXZlbiwgc2VlayBhYm9ydGVkLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfZW5zdXJlX2luZGV4IChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgZ3VpbnQgaTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY29sbGVjdGluZyBhbGwgbWV0YWRhdGEgZm9yIGFsbCBzdHJlYW1zIik7Ci0KLSAgLyogQnVpbGQgY29tcGxldGUgaW5kZXggKi8KLSAgZm9yIChpID0gMDsgaSA8IHF0ZGVtdXgtPm5fc3RyZWFtczsgaSsrKSB7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gcXRkZW11eC0+c3RyZWFtc1tpXTsKLQotICAgIGlmICghcXRkZW11eF9wYXJzZV9zYW1wbGVzIChxdGRlbXV4LCBzdHJlYW0sIHN0cmVhbS0+bl9zYW1wbGVzIC0gMSkpCi0gICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotcGFyc2VfZXJyb3I6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgIkJ1aWxkaW5nIGNvbXBsZXRlIGluZGV4IG9mIHN0cmVhbSAldSBmb3Igc2Vla2luZyBmYWlsZWQhIiwgaSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0UVREZW11eCAqcXRkZW11eCA9IEdTVF9RVERFTVVYIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgewotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICAgIEdzdENsb2NrVGltZSB0cyA9IGdzdF91dGlsX2dldF90aW1lc3RhbXAgKCk7Ci0jZW5kaWYKLQotICAgICAgaWYgKHF0ZGVtdXgtPnVwc3RyZWFtX2Zvcm1hdF9pc190aW1lICYmIHF0ZGVtdXgtPmZyYWdtZW50ZWQpIHsKLSAgICAgICAgLyogc2VlayBzaG91bGQgYmUgaGFuZGxlZCBieSB1cHN0cmVhbSwgd2UgbWlnaHQgbmVlZCB0byByZS1kb3dubG9hZCBmcmFnbWVudHMgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAgICJsZXQgdXBzdHJlYW0gaGFuZGxlIHNlZWsgZm9yIGZyYWdtZW50ZWQgcGxheWJhY2siKTsKLSAgICAgICAgZ290byB1cHN0cmVhbTsKLSAgICAgIH0KLQotICAgICAgLyogQnVpbGQgY29tcGxldGUgaW5kZXggZm9yIHNlZWtpbmc7Ci0gICAgICAgKiBpZiBub3QgYSBmcmFnbWVudGVkIGZpbGUgYXQgbGVhc3QgKi8KLSAgICAgIGlmICghcXRkZW11eC0+ZnJhZ21lbnRlZCkKLSAgICAgICAgaWYgKCFxdGRlbXV4X2Vuc3VyZV9pbmRleCAocXRkZW11eCkpCi0gICAgICAgICAgZ290byBpbmRleF9mYWlsZWQ7Ci0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAgICAgdHMgPSBnc3RfdXRpbF9nZXRfdGltZXN0YW1wICgpIC0gdHM7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgIlRpbWUgdGFrZW4gdG8gcGFyc2UgaW5kZXggJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0cykpOwotI2VuZGlmCi0gICAgfQotICAgICAgaWYgKHF0ZGVtdXgtPnB1bGxiYXNlZCkgewotICAgICAgICByZXMgPSBnc3RfcXRkZW11eF9kb19zZWVrIChxdGRlbXV4LCBwYWQsIGV2ZW50KTsKLSAgICAgIH0gZWxzZSBpZiAoZ3N0X3BhZF9wdXNoX2V2ZW50IChxdGRlbXV4LT5zaW5rcGFkLCBnc3RfZXZlbnRfcmVmIChldmVudCkpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJVcHN0cmVhbSBzdWNjZXNzZnVsbHkgc2Vla2VkIik7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKHF0ZGVtdXgtPnN0YXRlID09IFFUREVNVVhfU1RBVEVfTU9WSUUgJiYgcXRkZW11eC0+bl9zdHJlYW1zCi0gICAgICAgICAgJiYgIXF0ZGVtdXgtPmZyYWdtZW50ZWQpIHsKLSAgICAgICAgcmVzID0gZ3N0X3F0ZGVtdXhfZG9fcHVzaF9zZWVrIChxdGRlbXV4LCBwYWQsIGV2ZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAiaWdub3Jpbmcgc2VlayBpbiBwdXNoIG1vZGUgaW4gY3VycmVudCBzdGF0ZSIpOwotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICB1cHN0cmVhbToKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1pbmRleF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiSW5kZXggZmFpbGVkIik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qIHN0cmVhbS9pbmRleCByZXR1cm4gc2FtcGxlIHRoYXQgaXMgbWluL21heCB3LnIudC4gYnl0ZSBwb3NpdGlvbiwKLSAqIHRpbWUgaXMgbWluL21heCB3LnIudC4gdGltZSBvZiBzYW1wbGVzLAotICogdGhlIGxhdHRlciBuZWVkIG5vdCBiZSB0aW1lIG9mIHRoZSBmb3JtZXIgc2FtcGxlICovCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfZmluZF9zYW1wbGUgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBnaW50NjQgYnl0ZV9wb3MsIGdib29sZWFuIGZ3LAotICAgIGdib29sZWFuIHNldCwgUXREZW11eFN0cmVhbSAqKiBfc3RyZWFtLCBnaW50ICogX2luZGV4LCBnaW50NjQgKiBfdGltZSkKLXsKLSAgZ2ludCBpLCBuLCBpbmRleDsKLSAgZ2ludDY0IHRpbWUsIG1pbl90aW1lOwotICBRdERlbXV4U3RyZWFtICpzdHJlYW07Ci0KLSAgbWluX3RpbWUgPSAtMTsKLSAgc3RyZWFtID0gTlVMTDsKLSAgaW5kZXggPSAtMTsKLQotICBmb3IgKG4gPSAwOyBuIDwgcXRkZW11eC0+bl9zdHJlYW1zOyArK24pIHsKLSAgICBRdERlbXV4U3RyZWFtICpzdHI7Ci0gICAgZ2ludCBpbmM7Ci0gICAgZ2Jvb2xlYW4gc2V0X3NhbXBsZTsKLQotICAgIHN0ciA9IHF0ZGVtdXgtPnN0cmVhbXNbbl07Ci0gICAgc2V0X3NhbXBsZSA9ICFzZXQ7Ci0KLSAgICBpZiAoZncpIHsKLSAgICAgIGkgPSAwOwotICAgICAgaW5jID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgaSA9IHN0ci0+bl9zYW1wbGVzIC0gMTsKLSAgICAgIGluYyA9IC0xOwotICAgIH0KLQotICAgIGZvciAoOyAoaSA+PSAwKSAmJiAoaSA8IHN0ci0+bl9zYW1wbGVzKTsgaSArPSBpbmMpIHsKLSAgICAgIGlmIChzdHItPnNhbXBsZXNbaV0uc2l6ZSA9PSAwKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgaWYgKGZ3ICYmIChzdHItPnNhbXBsZXNbaV0ub2Zmc2V0IDwgYnl0ZV9wb3MpKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgaWYgKCFmdyAmJiAoc3RyLT5zYW1wbGVzW2ldLm9mZnNldCArIHN0ci0+c2FtcGxlc1tpXS5zaXplID4gYnl0ZV9wb3MpKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgLyogbW92ZSBzdHJlYW0gdG8gZmlyc3QgYXZhaWxhYmxlIHNhbXBsZSAqLwotICAgICAgaWYgKHNldCkgewotICAgICAgICBnc3RfcXRkZW11eF9tb3ZlX3N0cmVhbSAocXRkZW11eCwgc3RyLCBpKTsKLSAgICAgICAgc2V0X3NhbXBsZSA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGF2b2lkIGluZGV4IGZyb20gc3BhcnNlIHN0cmVhbXMgc2luY2UgdGhleSBtaWdodCBiZSBmYXIgYXdheSAqLwotICAgICAgaWYgKCFzdHItPnNwYXJzZSkgewotICAgICAgICAvKiBkZXRlcm1pbmUgbWluL21heCB0aW1lICovCi0gICAgICAgIHRpbWUgPSBRVFNBTVBMRV9QVFMgKHN0ciwgJnN0ci0+c2FtcGxlc1tpXSk7Ci0gICAgICAgIGlmIChtaW5fdGltZSA9PSAtMSB8fCAoIWZ3ICYmIHRpbWUgPiBtaW5fdGltZSkgfHwKLSAgICAgICAgICAgIChmdyAmJiB0aW1lIDwgbWluX3RpbWUpKSB7Ci0gICAgICAgICAgbWluX3RpbWUgPSB0aW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZGV0ZXJtaW5lIHN0cmVhbSB3aXRoIGxlYWRpbmcgc2FtcGxlLCB0byBnZXQgaXRzIHBvc2l0aW9uICovCi0gICAgICAgIGlmICghc3RyZWFtIHx8Ci0gICAgICAgICAgICAoZncgJiYgKHN0ci0+c2FtcGxlc1tpXS5vZmZzZXQgPCBzdHJlYW0tPnNhbXBsZXNbaW5kZXhdLm9mZnNldCkpIHx8Ci0gICAgICAgICAgICAoIWZ3ICYmIChzdHItPnNhbXBsZXNbaV0ub2Zmc2V0ID4gc3RyZWFtLT5zYW1wbGVzW2luZGV4XS5vZmZzZXQpKSkgewotICAgICAgICAgIHN0cmVhbSA9IHN0cjsKLSAgICAgICAgICBpbmRleCA9IGk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qIG5vIHNhbXBsZSBmb3IgdGhpcyBzdHJlYW0sIG1hcmsgZW9zICovCi0gICAgaWYgKCFzZXRfc2FtcGxlKQotICAgICAgZ3N0X3F0ZGVtdXhfbW92ZV9zdHJlYW0gKHF0ZGVtdXgsIHN0ciwgc3RyLT5uX3NhbXBsZXMpOwotICB9Ci0KLSAgaWYgKF90aW1lKQotICAgICpfdGltZSA9IG1pbl90aW1lOwotICBpZiAoX3N0cmVhbSkKLSAgICAqX3N0cmVhbSA9IHN0cmVhbTsKLSAgaWYgKF9pbmRleCkKLSAgICAqX2luZGV4ID0gaW5kZXg7Ci19Ci0KLXN0YXRpYyBRdERlbXV4U3RyZWFtICoKLV9jcmVhdGVfc3RyZWFtICh2b2lkKQotewotICBRdERlbXV4U3RyZWFtICpzdHJlYW07Ci0KLSAgc3RyZWFtID0gZ19uZXcwIChRdERlbXV4U3RyZWFtLCAxKTsKLSAgLyogbmV3IHN0cmVhbXMgYWx3YXlzIG5lZWQgYSBkaXNjb250ICovCi0gIHN0cmVhbS0+ZGlzY29udCA9IFRSVUU7Ci0gIC8qIHdlIGVuYWJsZSBjbGlwcGluZyBmb3IgcmF3IGF1ZGlvL3ZpZGVvIHN0cmVhbXMgKi8KLSAgc3RyZWFtLT5uZWVkX2NsaXAgPSBGQUxTRTsKLSAgc3RyZWFtLT5uZWVkX3Byb2Nlc3MgPSBGQUxTRTsKLSAgc3RyZWFtLT5zZWdtZW50X2luZGV4ID0gLTE7Ci0gIHN0cmVhbS0+dGltZV9wb3NpdGlvbiA9IDA7Ci0gIHN0cmVhbS0+c2FtcGxlX2luZGV4ID0gLTE7Ci0gIHN0cmVhbS0+b2Zmc2V0X2luX3NhbXBsZSA9IDA7Ci0gIHN0cmVhbS0+bmV3X3N0cmVhbSA9IFRSVUU7Ci0gIHN0cmVhbS0+bXVsdGl2aWV3X21vZGUgPSBHU1RfVklERU9fTVVMVElWSUVXX01PREVfTk9ORTsKLSAgc3RyZWFtLT5tdWx0aXZpZXdfZmxhZ3MgPSBHU1RfVklERU9fTVVMVElWSUVXX0ZMQUdTX05PTkU7Ci0gIHN0cmVhbS0+cHJvdGVjdGVkID0gRkFMU0U7Ci0gIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfdHlwZSA9IDA7Ci0gIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfdmVyc2lvbiA9IDA7Ci0gIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbyA9IE5VTEw7Ci0gIHN0cmVhbS0+bl9zYW1wbGVzX21vb2YgPSAwOwotICBzdHJlYW0tPmR1cmF0aW9uX21vb2YgPSAwOwotICBzdHJlYW0tPmFsaWdubWVudCA9IDE7Ci0gIHN0cmVhbS0+ZHVyYXRpb25fbGFzdF9tb29mID0gMDsKLSAgZ19xdWV1ZV9pbml0ICgmc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZSk7Ci0gIHJldHVybiBzdHJlYW07Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfc2V0Y2FwcyAoR3N0UVREZW11eCAqIGRlbXV4LCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGdjaGFyICp2YXJpYW50OwotICBjb25zdCBHc3RDYXBzICptZWRpYWNhcHMgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU2luayBzZXQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICB2YXJpYW50ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJ2YXJpYW50Iik7Ci0KLSAgaWYgKHZhcmlhbnQgJiYgc3RyY21wICh2YXJpYW50LCAibXNzLWZyYWdtZW50ZWQiKSA9PSAwKSB7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyZWFtOwotICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgICBkZW11eC0+ZnJhZ21lbnRlZCA9IFRSVUU7Ci0gICAgZGVtdXgtPm1zc19tb2RlID0gVFJVRTsKLQotICAgIGlmIChkZW11eC0+bl9zdHJlYW1zID4gMSkgewotICAgICAgLyogY2FuJ3QgZG8gdGhpcywgd2UgY2FuIG9ubHkgcmVuZWdvdGlhdGUgZm9yIGFub3RoZXIgbXNzIGZvcm1hdCAqLwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgIm1lZGlhLWNhcHMiKTsKLSAgICAvKiBjcmVhdGUgc3RyZWFtICovCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICBjb25zdCBHVmFsdWUgKnRpbWVzY2FsZV92OwotCi0gICAgICAvKiBUT0RPIHVwZGF0ZSB3aGVuIHN0cmVhbSBjaGFuZ2VzIGR1cmluZyBwbGF5YmFjayAqLwotCi0gICAgICBpZiAoZGVtdXgtPm5fc3RyZWFtcyA9PSAwKSB7Ci0gICAgICAgIHN0cmVhbSA9IF9jcmVhdGVfc3RyZWFtICgpOwotICAgICAgICBkZW11eC0+c3RyZWFtc1tkZW11eC0+bl9zdHJlYW1zXSA9IHN0cmVhbTsKLSAgICAgICAgZGVtdXgtPm5fc3RyZWFtcyA9IDE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdHJlYW0gPSBkZW11eC0+c3RyZWFtc1swXTsKLSAgICAgIH0KLQotICAgICAgdGltZXNjYWxlX3YgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAidGltZXNjYWxlIik7Ci0gICAgICBpZiAodGltZXNjYWxlX3YpIHsKLSAgICAgICAgc3RyZWFtLT50aW1lc2NhbGUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHRpbWVzY2FsZV92KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGRlZmF1bHQgbXNzIHRpbWVzY2FsZSAqLwotICAgICAgICBzdHJlYW0tPnRpbWVzY2FsZSA9IDEwMDAwMDAwOwotICAgICAgfQotICAgICAgZGVtdXgtPnRpbWVzY2FsZSA9IHN0cmVhbS0+dGltZXNjYWxlOwotCi0gICAgICBtZWRpYWNhcHMgPSBnc3RfdmFsdWVfZ2V0X2NhcHMgKHZhbHVlKTsKLSAgICAgIGlmICghc3RyZWFtLT5jYXBzIHx8ICFnc3RfY2Fwc19pc19lcXVhbF9maXhlZCAobWVkaWFjYXBzLCBzdHJlYW0tPmNhcHMpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiV2UgaGF2ZSBhIG5ldyBjYXBzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgICAgbWVkaWFjYXBzKTsKLSAgICAgICAgc3RyZWFtLT5uZXdfY2FwcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBnc3RfY2Fwc19yZXBsYWNlICgmc3RyZWFtLT5jYXBzLCAoR3N0Q2FwcyAqKSBtZWRpYWNhcHMpOwotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAobWVkaWFjYXBzLCAwKTsKLSAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4IChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpLCAidmlkZW8iKSkgewotICAgICAgICBzdHJlYW0tPnN1YnR5cGUgPSBGT1VSQ0NfdmlkZTsKLQotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJnN0cmVhbS0+d2lkdGgpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImhlaWdodCIsICZzdHJlYW0tPmhlaWdodCk7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAmc3RyZWFtLT5mcHNfbiwKLSAgICAgICAgICAgICZzdHJlYW0tPmZwc19kKTsKLSAgICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSwgImF1ZGlvIikpIHsKLSAgICAgICAgZ2ludCByYXRlID0gMDsKLSAgICAgICAgc3RyZWFtLT5zdWJ0eXBlID0gRk9VUkNDX3NvdW47Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2hhbm5lbHMiLCAmc3RyZWFtLT5uX2NoYW5uZWxzKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJyYXRlIiwgJnJhdGUpOwotICAgICAgICBzdHJlYW0tPnJhdGUgPSByYXRlOwotICAgICAgfQotICAgIH0KLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmZGVtdXgtPm1lZGlhX2NhcHMsIChHc3RDYXBzICopIG1lZGlhY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgZGVtdXgtPm1zc19tb2RlID0gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X3Jlc2V0IChHc3RRVERlbXV4ICogcXRkZW11eCwgZ2Jvb2xlYW4gaGFyZCkKLXsKLSAgZ2ludCBuOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJSZXNldHRpbmcgZGVtdXgiKTsKLSAgZ3N0X3BhZF9zdG9wX3Rhc2sgKHF0ZGVtdXgtPnNpbmtwYWQpOwotCi0gIGlmIChoYXJkIHx8IHF0ZGVtdXgtPnVwc3RyZWFtX2Zvcm1hdF9pc190aW1lKSB7Ci0gICAgcXRkZW11eC0+c3RhdGUgPSBRVERFTVVYX1NUQVRFX0lOSVRJQUw7Ci0gICAgcXRkZW11eC0+bmVlZGVkYnl0ZXMgPSAxNjsKLSAgICBxdGRlbXV4LT50b2Ryb3AgPSAwOwotICAgIHF0ZGVtdXgtPnB1bGxiYXNlZCA9IEZBTFNFOwotICAgIHF0ZGVtdXgtPnBvc3RlZF9yZWRpcmVjdCA9IEZBTFNFOwotICAgIHF0ZGVtdXgtPmZpcnN0X21kYXQgPSAtMTsKLSAgICBxdGRlbXV4LT5oZWFkZXJfc2l6ZSA9IDA7Ci0gICAgcXRkZW11eC0+bWRhdG9mZnNldCA9IC0xOwotICAgIHF0ZGVtdXgtPnJlc3RvcmVkYXRhX29mZnNldCA9IC0xOwotICAgIGlmIChxdGRlbXV4LT5tZGF0YnVmZmVyKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocXRkZW11eC0+bWRhdGJ1ZmZlcik7Ci0gICAgaWYgKHF0ZGVtdXgtPnJlc3RvcmVkYXRhX2J1ZmZlcikKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHF0ZGVtdXgtPnJlc3RvcmVkYXRhX2J1ZmZlcik7Ci0gICAgcXRkZW11eC0+bWRhdGJ1ZmZlciA9IE5VTEw7Ci0gICAgcXRkZW11eC0+cmVzdG9yZWRhdGFfYnVmZmVyID0gTlVMTDsKLSAgICBxdGRlbXV4LT5tZGF0bGVmdCA9IDA7Ci0gICAgaWYgKHF0ZGVtdXgtPmNvbXBfYnJhbmRzKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocXRkZW11eC0+Y29tcF9icmFuZHMpOwotICAgIHF0ZGVtdXgtPmNvbXBfYnJhbmRzID0gTlVMTDsKLSAgICBxdGRlbXV4LT5sYXN0X21vb3Zfb2Zmc2V0ID0gLTE7Ci0gICAgaWYgKHF0ZGVtdXgtPm1vb3Zfbm9kZV9jb21wcmVzc2VkKSB7Ci0gICAgICBnX25vZGVfZGVzdHJveSAocXRkZW11eC0+bW9vdl9ub2RlX2NvbXByZXNzZWQpOwotICAgICAgaWYgKHF0ZGVtdXgtPm1vb3Zfbm9kZSkKLSAgICAgICAgZ19mcmVlIChxdGRlbXV4LT5tb292X25vZGUtPmRhdGEpOwotICAgIH0KLSAgICBxdGRlbXV4LT5tb292X25vZGVfY29tcHJlc3NlZCA9IE5VTEw7Ci0gICAgaWYgKHF0ZGVtdXgtPm1vb3Zfbm9kZSkKLSAgICAgIGdfbm9kZV9kZXN0cm95IChxdGRlbXV4LT5tb292X25vZGUpOwotICAgIHF0ZGVtdXgtPm1vb3Zfbm9kZSA9IE5VTEw7Ci0gICAgaWYgKHF0ZGVtdXgtPnRhZ19saXN0KQotICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAocXRkZW11eC0+dGFnX2xpc3QpKTsKLSAgICBxdGRlbXV4LT50YWdfbGlzdCA9IE5VTEw7Ci0jaWYgMAotICAgIGlmIChxdGRlbXV4LT5lbGVtZW50X2luZGV4KQotICAgICAgZ3N0X29iamVjdF91bnJlZiAocXRkZW11eC0+ZWxlbWVudF9pbmRleCk7Ci0gICAgcXRkZW11eC0+ZWxlbWVudF9pbmRleCA9IE5VTEw7Ci0jZW5kaWYKLSAgICBxdGRlbXV4LT5tYWpvcl9icmFuZCA9IDA7Ci0gICAgaWYgKHF0ZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCkKLSAgICAgIGdzdF9ldmVudF91bnJlZiAocXRkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50KTsKLSAgICBxdGRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQgPSBOVUxMOwotICAgIHF0ZGVtdXgtPnVwc3RyZWFtX2Zvcm1hdF9pc190aW1lID0gRkFMU0U7Ci0gICAgcXRkZW11eC0+dXBzdHJlYW1fc2Vla2FibGUgPSBGQUxTRTsKLSAgICBxdGRlbXV4LT51cHN0cmVhbV9zaXplID0gMDsKLQotICAgIHF0ZGVtdXgtPmZyYWdtZW50X3N0YXJ0ID0gLTE7Ci0gICAgcXRkZW11eC0+ZnJhZ21lbnRfc3RhcnRfb2Zmc2V0ID0gLTE7Ci0gICAgcXRkZW11eC0+ZHVyYXRpb24gPSAwOwotICAgIHF0ZGVtdXgtPm1vb2Zfb2Zmc2V0ID0gMDsKLSAgICBxdGRlbXV4LT5jaGFwdGVyc190cmFja19pZCA9IDA7Ci0gICAgcXRkZW11eC0+aGF2ZV9ncm91cF9pZCA9IEZBTFNFOwotICAgIHF0ZGVtdXgtPmdyb3VwX2lkID0gR19NQVhVSU5UOwotCi0gICAgZ19xdWV1ZV9mb3JlYWNoICgmcXRkZW11eC0+cHJvdGVjdGlvbl9ldmVudF9xdWV1ZSwgKEdGdW5jKSBnc3RfZXZlbnRfdW5yZWYsCi0gICAgICAgIE5VTEwpOwotICAgIGdfcXVldWVfY2xlYXIgKCZxdGRlbXV4LT5wcm90ZWN0aW9uX2V2ZW50X3F1ZXVlKTsKLSAgfQotICBxdGRlbXV4LT5vZmZzZXQgPSAwOwotICBnc3RfYWRhcHRlcl9jbGVhciAocXRkZW11eC0+YWRhcHRlcik7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZxdGRlbXV4LT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBxdGRlbXV4LT5zZWdtZW50X3NlcW51bSA9IDA7Ci0KLSAgaWYgKGhhcmQpIHsKLSAgICBmb3IgKG4gPSAwOyBuIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBuKyspIHsKLSAgICAgIGdzdF9xdGRlbXV4X3N0cmVhbV9mcmVlIChxdGRlbXV4LCBxdGRlbXV4LT5zdHJlYW1zW25dKTsKLSAgICAgIHF0ZGVtdXgtPnN0cmVhbXNbbl0gPSBOVUxMOwotICAgIH0KLSAgICBxdGRlbXV4LT5uX3N0cmVhbXMgPSAwOwotICAgIHF0ZGVtdXgtPm5fdmlkZW9fc3RyZWFtcyA9IDA7Ci0gICAgcXRkZW11eC0+bl9hdWRpb19zdHJlYW1zID0gMDsKLSAgICBxdGRlbXV4LT5uX3N1Yl9zdHJlYW1zID0gMDsKLSAgICBxdGRlbXV4LT5leHBvc2VkID0gRkFMU0U7Ci0gICAgcXRkZW11eC0+ZnJhZ21lbnRlZCA9IEZBTFNFOwotICAgIHF0ZGVtdXgtPm1zc19tb2RlID0gRkFMU0U7Ci0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJnF0ZGVtdXgtPm1lZGlhX2NhcHMsIE5VTEwpOwotICAgIHF0ZGVtdXgtPnRpbWVzY2FsZSA9IDA7Ci0gICAgcXRkZW11eC0+Z290X21vb3YgPSBGQUxTRTsKLSAgICBpZiAocXRkZW11eC0+cHJvdGVjdGlvbl9zeXN0ZW1faWRzKSB7Ci0gICAgICBnX3B0cl9hcnJheV9mcmVlIChxdGRlbXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMsIFRSVUUpOwotICAgICAgcXRkZW11eC0+cHJvdGVjdGlvbl9zeXN0ZW1faWRzID0gTlVMTDsKLSAgICB9Ci0gIH0gZWxzZSBpZiAocXRkZW11eC0+bXNzX21vZGUpIHsKLSAgICBnc3RfZmxvd19jb21iaW5lcl9yZXNldCAocXRkZW11eC0+Zmxvd2NvbWJpbmVyKTsKLSAgICBmb3IgKG4gPSAwOyBuIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBuKyspCi0gICAgICBnc3RfcXRkZW11eF9zdHJlYW1fY2xlYXIgKHF0ZGVtdXgsIHF0ZGVtdXgtPnN0cmVhbXNbbl0pOwotICB9IGVsc2UgewotICAgIGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0IChxdGRlbXV4LT5mbG93Y29tYmluZXIpOwotICAgIGZvciAobiA9IDA7IG4gPCBxdGRlbXV4LT5uX3N0cmVhbXM7IG4rKykgewotICAgICAgcXRkZW11eC0+c3RyZWFtc1tuXS0+c2VudF9lb3MgPSBGQUxTRTsKLSAgICAgIHF0ZGVtdXgtPnN0cmVhbXNbbl0tPnRpbWVfcG9zaXRpb24gPSAwOwotICAgICAgcXRkZW11eC0+c3RyZWFtc1tuXS0+YWNjdW11bGF0ZWRfYmFzZSA9IDA7Ci0gICAgfQotICAgIGlmICghcXRkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50KSB7Ci0gICAgICBxdGRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZxdGRlbXV4LT5zZWdtZW50KTsKLSAgICAgIGlmIChxdGRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKHF0ZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCwKLSAgICAgICAgICAgIHF0ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICB9Ci0gIH0KLX0KLQotCi0vKiBNYXBzIHRoZSBAc2VnbWVudCB0byB0aGUgcXQgZWR0cyBpbnRlcm5hbCBzZWdtZW50cyBhbmQgcHVzaGVzCi0gKiB0aGUgY29ycmVzcG5kaW5nIHNlZ21lbnQgZXZlbnQuCi0gKgotICogSWYgaXQgZW5kcyB1cCBiZWluZyBhdCBhIGVtcHR5IHNlZ21lbnQsIGEgZ2FwIHdpbGwgYmUgcHVzaGVkIGFuZCB0aGUgbmV4dAotICogZWR0cyBzZWdtZW50IHdpbGwgYmUgYWN0aXZhdGVkIGluIHNlcXVlbmNlLgotICoKLSAqIFRvIGJlIHVzZWQgaW4gcHVzaC1tb2RlIG9ubHkgKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9tYXBfYW5kX3B1c2hfc2VnbWVudHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgZ2ludCBuLCBpOwotCi0gIGZvciAobiA9IDA7IG4gPCBxdGRlbXV4LT5uX3N0cmVhbXM7IG4rKykgewotICAgIFF0RGVtdXhTdHJlYW0gKnN0cmVhbSA9IHF0ZGVtdXgtPnN0cmVhbXNbbl07Ci0KLSAgICBzdHJlYW0tPnRpbWVfcG9zaXRpb24gPSBzZWdtZW50LT5zdGFydDsKLQotICAgIC8qIGluIHB1c2ggbW9kZSB3ZSBzaG91bGQgYmUgZ3VhcmFudGVlZCB0aGF0IHdlIHdpbGwgaGF2ZSBlbXB0eSBzZWdtZW50cwotICAgICAqIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZW4gb25lIHNlZ21lbnQgYWZ0ZXIsIG90aGVyIHNjZW5hcmlvcyBhcmUgbm90Ci0gICAgICogc3VwcG9ydGVkIGFuZCBhcmUgZGlzY2FyZGVkIHdoZW4gcGFyc2luZyB0aGUgZWR0cyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPm5fc2VnbWVudHM7IGkrKykgewotICAgICAgaWYgKHN0cmVhbS0+c2VnbWVudHNbaV0uc3RvcF90aW1lID4gc2VnbWVudC0+c3RhcnQpIHsKLSAgICAgICAgZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCAocXRkZW11eCwgc3RyZWFtLCBpLAotICAgICAgICAgICAgc3RyZWFtLT50aW1lX3Bvc2l0aW9uKTsKLSAgICAgICAgaWYgKFFUU0VHTUVOVF9JU19FTVBUWSAoJnN0cmVhbS0+c2VnbWVudHNbaV0pKSB7Ci0gICAgICAgICAgLyogcHVzaCB0aGUgZW1wdHkgc2VnbWVudCBhbmQgbW92ZSB0byB0aGUgbmV4dCBvbmUgKi8KLSAgICAgICAgICBnc3RfcXRkZW11eF9zZW5kX2dhcF9mb3Jfc2VnbWVudCAocXRkZW11eCwgc3RyZWFtLCBpLAotICAgICAgICAgICAgICBzdHJlYW0tPnRpbWVfcG9zaXRpb24pOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19hc3NlcnQgKGkgPT0gc3RyZWFtLT5uX3NlZ21lbnRzIC0gMSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHNpbmtwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RRVERlbXV4ICpkZW11eCA9IEdTVF9RVERFTVVYIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImhhbmRsaW5nICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIGdpbnQ2NCBvZmZzZXQgPSAwOwotICAgICAgUXREZW11eFN0cmVhbSAqc3RyZWFtOwotICAgICAgZ2ludCBpZHg7Ci0gICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICAgIC8qIHNvbWUgZGVidWcgb3V0cHV0ICovCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJyZWNlaXZlZCBuZXdzZWdtZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICAmc2VnbWVudCk7Ci0KLSAgICAgIC8qIGVyYXNlIGFueSBwcmV2aW91c2x5IHNldCBzZWdtZW50ICovCi0gICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQsIE5VTEwpOwotCi0gICAgICBpZiAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibmV3IHBlbmRpbmdfbmV3c2VnbWVudCIpOwotICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJmRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQsIGV2ZW50KTsKLSAgICAgICAgZGVtdXgtPnVwc3RyZWFtX2Zvcm1hdF9pc190aW1lID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiTm90IHN0b3JpbmcgdXBzdHJlYW0gbmV3c2VnbWVudCwgIgotICAgICAgICAgICAgIm5vdCBpbiB0aW1lIGZvcm1hdCIpOwotCi0gICAgICAgIC8qIGNoYWluIHdpbGwgc2VuZCBpbml0aWFsIG5ld3NlZ21lbnQgYWZ0ZXIgcGFkcyBoYXZlIGJlZW4gYWRkZWQgKi8KLSAgICAgICAgaWYgKGRlbXV4LT5zdGF0ZSAhPSBRVERFTVVYX1NUQVRFX01PVklFIHx8ICFkZW11eC0+bl9zdHJlYW1zKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzdGlsbCBzdGFydGluZywgZWF0aW5nIGV2ZW50Iik7Ci0gICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIGNoZWNrIGlmIHRoaXMgbWF0Y2hlcyBhIHRpbWUgc2VlayB3ZSByZWNlaXZlZCBwcmV2aW91c2x5Ci0gICAgICAgKiBGSVhNRSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSB1c2UgdGhlCi0gICAgICAgKiBzZWVrX29mZnNldCBoZXJlIHRvIGNvbXBhcmUuIEluIHRoZSBmdXR1cmUgd2UgbWlnaHQgd2FudCB0bwotICAgICAgICogY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBzZXFudW0gYXMgaXQgdW5pcXVlbHkgc2hvdWxkIGlkZW50aWZ5Ci0gICAgICAgKiB0aGUgc2VnbWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzZWVrLiAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTdG9yZWQgc2VlayBvZmZzZXQ6ICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICIsIHJlY2VpdmVkIHNlZ21lbnQgb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVCwKLSAgICAgICAgICBkZW11eC0+c2Vla19vZmZzZXQsIHNlZ21lbnQuc3RhcnQpOwotICAgICAgaWYgKHNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMKLSAgICAgICAgICAmJiBkZW11eC0+c2Vla19vZmZzZXQgPT0gc2VnbWVudC5zdGFydCkgewotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgb2Zmc2V0ID0gc2VnbWVudC5zdGFydDsKLQotICAgICAgICBzZWdtZW50LmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICAgICAgc2VnbWVudC5zdGFydCA9IGRlbXV4LT5wdXNoX3NlZWtfc3RhcnQ7Ci0gICAgICAgIHNlZ21lbnQuc3RvcCA9IGRlbXV4LT5wdXNoX3NlZWtfc3RvcDsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZXBsYWNlZCBzZWdtZW50IHdpdGggc3RvcmVkIHNlZWsgIgotICAgICAgICAgICAgInNlZ21lbnQgJSIgR1NUX1RJTUVfRk9STUFUICIgLSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LnN0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC5zdG9wKSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdlIG9ubHkgZXhwZWN0IGEgQllURSBzZWdtZW50LCBlLmcuIGZvbGxvd2luZyBhIHNlZWsgKi8KLSAgICAgIGlmIChzZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc2VnbWVudC5zdGFydCkpIHsKLSAgICAgICAgICBvZmZzZXQgPSBzZWdtZW50LnN0YXJ0OwotCi0gICAgICAgICAgZ3N0X3F0ZGVtdXhfZmluZF9zYW1wbGUgKGRlbXV4LCBzZWdtZW50LnN0YXJ0LCBUUlVFLCBGQUxTRSwgTlVMTCwKLSAgICAgICAgICAgICAgTlVMTCwgKGdpbnQ2NCAqKSAmIHNlZ21lbnQuc3RhcnQpOwotICAgICAgICAgIGlmICgoZ2ludDY0KSBzZWdtZW50LnN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHNlZ21lbnQuc3RhcnQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc2VnbWVudC5zdG9wKSkgewotICAgICAgICAgIGdzdF9xdGRlbXV4X2ZpbmRfc2FtcGxlIChkZW11eCwgc2VnbWVudC5zdG9wLCBGQUxTRSwgRkFMU0UsIE5VTEwsCi0gICAgICAgICAgICAgIE5VTEwsIChnaW50NjQgKikgJiBzZWdtZW50LnN0b3ApOwotICAgICAgICAgIC8qIGtleWZyYW1lIHNlZWtpbmcgc2hvdWxkIGFscmVhZHkgYXJyYW5nZSBmb3Igc3RhcnQgPj0gc3RvcCwKLSAgICAgICAgICAgKiBidXQgbWFrZSBzdXJlIGluIG90aGVyIHJhcmUgY2FzZXMgKi8KLSAgICAgICAgICBzZWdtZW50LnN0b3AgPSBNQVggKHNlZ21lbnQuc3RvcCwgc2VnbWVudC5zdGFydCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIC8qIHB1c2ggYWxsIGRhdGEgb24gdGhlIGFkYXB0ZXIgYmVmb3JlIHN0YXJ0aW5nIHRoaXMKLSAgICAgICAgICogbmV3IHNlZ21lbnQgKi8KLSAgICAgICAgZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChkZW11eCwgVFJVRSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInVuc3VwcG9ydGVkIHNlZ21lbnQgZm9ybWF0LCBpZ25vcmluZyIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGFjY2VwdCB1cHN0cmVhbSdzIG5vdGlvbiBvZiBzZWdtZW50IGFuZCBkaXN0cmlidXRlIGFsb25nICovCi0gICAgICBzZWdtZW50LmZvcm1hdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgICAgIHNlZ21lbnQucG9zaXRpb24gPSBzZWdtZW50LnRpbWUgPSBzZWdtZW50LnN0YXJ0OwotICAgICAgc2VnbWVudC5kdXJhdGlvbiA9IGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uOwotICAgICAgc2VnbWVudC5iYXNlID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmZGVtdXgtPnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBkZW11eC0+c2VnbWVudC5wb3NpdGlvbik7Ci0KLSAgICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoJnNlZ21lbnQsICZkZW11eC0+c2VnbWVudCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlB1c2hpbmcgbmV3c2VnICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnNlZ21lbnQpOwotCi0gICAgICAvKiBtYXAgc2VnbWVudCB0byBpbnRlcm5hbCBxdCBzZWdtZW50cyBhbmQgcHVzaCBvbiBlYWNoIHN0cmVhbSAqLwotICAgICAgaWYgKGRlbXV4LT5uX3N0cmVhbXMpIHsKLSAgICAgICAgaWYgKGRlbXV4LT5mcmFnbWVudGVkKSB7Ci0gICAgICAgICAgR3N0RXZlbnQgKnNlZ21lbnRfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLQotICAgICAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCwgTlVMTCk7Ci0gICAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKHNlZ21lbnRfZXZlbnQsIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICAgICAgZ3N0X3F0ZGVtdXhfcHVzaF9ldmVudCAoZGVtdXgsIHNlZ21lbnRfZXZlbnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCwgTlVMTCk7Ci0gICAgICAgICAgZ3N0X3F0ZGVtdXhfbWFwX2FuZF9wdXNoX3NlZ21lbnRzIChkZW11eCwgJnNlZ21lbnQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIGNsZWFyIGxlZnRvdmVyIGluIGN1cnJlbnQgc2VnbWVudCwgaWYgYW55ICovCi0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAoZGVtdXgtPmFkYXB0ZXIpOwotCi0gICAgICAvKiBzZXQgdXAgc3RyZWFtaW5nIHRocmVhZCAqLwotICAgICAgZGVtdXgtPm9mZnNldCA9IG9mZnNldDsKLSAgICAgIGlmIChkZW11eC0+dXBzdHJlYW1fZm9ybWF0X2lzX3RpbWUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJVcHN0cmVhbSBpcyBkcml2aW5nIGluIHRpbWUgZm9ybWF0LCAiCi0gICAgICAgICAgICAic2V0IHZhbHVlcyB0byByZXN0YXJ0IHJlYWRpbmcgZnJvbSBhIG5ldyBhdG9tIik7Ci0gICAgICAgIGRlbXV4LT5uZWVkZWRieXRlcyA9IDE2OwotICAgICAgICBkZW11eC0+dG9kcm9wID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9xdGRlbXV4X2ZpbmRfc2FtcGxlIChkZW11eCwgb2Zmc2V0LCBUUlVFLCBUUlVFLCAmc3RyZWFtLCAmaWR4LAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGlmIChzdHJlYW0pIHsKLSAgICAgICAgICBkZW11eC0+dG9kcm9wID0gc3RyZWFtLT5zYW1wbGVzW2lkeF0ub2Zmc2V0IC0gb2Zmc2V0OwotICAgICAgICAgIGRlbXV4LT5uZWVkZWRieXRlcyA9IGRlbXV4LT50b2Ryb3AgKyBzdHJlYW0tPnNhbXBsZXNbaWR4XS5zaXplOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIHNldCB1cCBmb3IgRU9TICovCi0gICAgICAgICAgZGVtdXgtPm5lZWRlZGJ5dGVzID0gLTE7Ci0gICAgICAgICAgZGVtdXgtPnRvZHJvcCA9IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICBleGl0OgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgZ290byBkcm9wOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICB7Ci0gICAgICBpZiAoZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KSA9PSBkZW11eC0+b2Zmc2V0X3NlZWtfc2VxbnVtKSB7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBnb3RvIGRyb3A7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICB7Ci0gICAgICBndWludDY0IGR1cjsKLQotICAgICAgZHVyID0gZGVtdXgtPnNlZ21lbnQuZHVyYXRpb247Ci0gICAgICBnc3RfcXRkZW11eF9yZXNldCAoZGVtdXgsIEZBTFNFKTsKLSAgICAgIGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uID0gZHVyOwotCi0gICAgICBpZiAoZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KSA9PSBkZW11eC0+b2Zmc2V0X3NlZWtfc2VxbnVtKSB7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBnb3RvIGRyb3A7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgLyogSWYgd2UgYXJlIGluIHB1c2ggbW9kZSwgYW5kIGdldCBhbiBFT1MgYmVmb3JlIHdlJ3ZlIHNlZW4gYW55IHN0cmVhbXMsCi0gICAgICAgKiB0aGVuIGVycm9yIG91dCAtIHdlIGhhdmUgbm93aGVyZSB0byBzZW5kIHRoZSBFT1MgKi8KLSAgICAgIGlmICghZGVtdXgtPnB1bGxiYXNlZCkgewotICAgICAgICBnaW50IGk7Ci0gICAgICAgIGdib29sZWFuIGhhc192YWxpZF9zdHJlYW0gPSBGQUxTRTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGRlbXV4LT5uX3N0cmVhbXM7IGkrKykgewotICAgICAgICAgIGlmIChkZW11eC0+c3RyZWFtc1tpXS0+cGFkICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGhhc192YWxpZF9zdHJlYW0gPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGFzX3ZhbGlkX3N0cmVhbSkKLSAgICAgICAgICBnc3RfcXRkZW11eF9wb3N0X25vX3BsYXlhYmxlX3N0cmVhbV9lcnJvciAoZGVtdXgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkRhdGEgc3RpbGwgYXZhaWxhYmxlIGFmdGVyIEVPUzogJXUiLAotICAgICAgICAgICAgICAoZ3VpbnQpIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmFkYXB0ZXIpKTsKLSAgICAgICAgICBpZiAoZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChkZW11eCwgVFJVRSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzp7Ci0gICAgICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICBnc3RfcXRkZW11eF9zZXRjYXBzIChkZW11eCwgY2Fwcyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBnb3RvIGRyb3A7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1BST1RFQ1RJT046Ci0gICAgewotICAgICAgY29uc3QgZ2NoYXIgKnN5c3RlbV9pZCA9IE5VTEw7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uIChldmVudCwgJnN5c3RlbV9pZCwgTlVMTCwgTlVMTCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlJlY2VpdmVkIHByb3RlY3Rpb24gZXZlbnQgZm9yIHN5c3RlbSBJRCAlcyIsCi0gICAgICAgICAgc3lzdGVtX2lkKTsKLSAgICAgIGdzdF9xdGRlbXV4X2FwcGVuZF9wcm90ZWN0aW9uX3N5c3RlbV9pZCAoZGVtdXgsIHN5c3RlbV9pZCk7Ci0gICAgICAvKiBzYXZlIHRoZSBldmVudCBmb3IgbGF0ZXIsIGZvciBzb3VyY2UgcGFkcyB0aGF0IGhhdmUgbm90IGJlZW4gY3JlYXRlZCAqLwotICAgICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZkZW11eC0+cHJvdGVjdGlvbl9ldmVudF9xdWV1ZSwgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpKTsKLSAgICAgIC8qIHNlbmQgaXQgdG8gYWxsIHBhZHMgdGhhdCBhbHJlYWR5IGV4aXN0ICovCi0gICAgICBnc3RfcXRkZW11eF9wdXNoX2V2ZW50IChkZW11eCwgZXZlbnQpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGdvdG8gZHJvcDsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChkZW11eC0+c2lua3BhZCwgcGFyZW50LCBldmVudCkgJiByZXM7Ci0KLWRyb3A6Ci0gIHJldHVybiByZXM7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfc2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgR3N0UVREZW11eCAqZGVtdXggPSBHU1RfUVRERU1VWCAoZWxlbWVudCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gIGlmIChkZW11eC0+ZWxlbWVudF9pbmRleCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChkZW11eC0+ZWxlbWVudF9pbmRleCk7Ci0gIGlmIChpbmRleCkgewotICAgIGRlbXV4LT5lbGVtZW50X2luZGV4ID0gZ3N0X29iamVjdF9yZWYgKGluZGV4KTsKLSAgfSBlbHNlIHsKLSAgICBkZW11eC0+ZWxlbWVudF9pbmRleCA9IE5VTEw7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgLyogb2JqZWN0IGxvY2sgbWlnaHQgYmUgdGFrZW4gYWdhaW4gKi8KLSAgaWYgKGluZGV4KQotICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChpbmRleCwgR1NUX09CSkVDVCAoZWxlbWVudCksICZkZW11eC0+aW5kZXhfaWQpOwotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlNldCBpbmRleCAlIiBHU1RfUFRSX0ZPUk1BVCAiZm9yIHdyaXRlciBpZCAlZCIsCi0gICAgICBkZW11eC0+ZWxlbWVudF9pbmRleCwgZGVtdXgtPmluZGV4X2lkKTsKLX0KLQotc3RhdGljIEdzdEluZGV4ICoKLWdzdF9xdGRlbXV4X2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEluZGV4ICpyZXN1bHQgPSBOVUxMOwotICBHc3RRVERlbXV4ICpkZW11eCA9IEdTVF9RVERFTVVYIChlbGVtZW50KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgaWYgKGRlbXV4LT5lbGVtZW50X2luZGV4KQotICAgIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChkZW11eC0+ZWxlbWVudF9pbmRleCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZXR1cm5pbmcgaW5kZXggJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfc3RibF9mcmVlIChRdERlbXV4U3RyZWFtICogc3RyZWFtKQotewotICBnX2ZyZWUgKChncG9pbnRlcikgc3RyZWFtLT5zdGNvLmRhdGEpOwotICBzdHJlYW0tPnN0Y28uZGF0YSA9IE5VTEw7Ci0gIGdfZnJlZSAoKGdwb2ludGVyKSBzdHJlYW0tPnN0c3ouZGF0YSk7Ci0gIHN0cmVhbS0+c3Rzei5kYXRhID0gTlVMTDsKLSAgZ19mcmVlICgoZ3BvaW50ZXIpIHN0cmVhbS0+c3RzYy5kYXRhKTsKLSAgc3RyZWFtLT5zdHNjLmRhdGEgPSBOVUxMOwotICBnX2ZyZWUgKChncG9pbnRlcikgc3RyZWFtLT5zdHRzLmRhdGEpOwotICBzdHJlYW0tPnN0dHMuZGF0YSA9IE5VTEw7Ci0gIGdfZnJlZSAoKGdwb2ludGVyKSBzdHJlYW0tPnN0c3MuZGF0YSk7Ci0gIHN0cmVhbS0+c3Rzcy5kYXRhID0gTlVMTDsKLSAgZ19mcmVlICgoZ3BvaW50ZXIpIHN0cmVhbS0+c3Rwcy5kYXRhKTsKLSAgc3RyZWFtLT5zdHBzLmRhdGEgPSBOVUxMOwotICBnX2ZyZWUgKChncG9pbnRlcikgc3RyZWFtLT5jdHRzLmRhdGEpOwotICBzdHJlYW0tPmN0dHMuZGF0YSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2VnbWVudHNfZGF0YSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ19mcmVlIChzdHJlYW0tPnNlZ21lbnRzKTsKLSAgc3RyZWFtLT5zZWdtZW50cyA9IE5VTEw7Ci0gIHN0cmVhbS0+c2VnbWVudF9pbmRleCA9IC0xOwotICBzdHJlYW0tPmFjY3VtdWxhdGVkX2Jhc2UgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NhbXBsZXNfZGF0YSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ19mcmVlIChzdHJlYW0tPnNhbXBsZXMpOwotICBzdHJlYW0tPnNhbXBsZXMgPSBOVUxMOwotICBnc3RfcXRkZW11eF9zdGJsX2ZyZWUgKHN0cmVhbSk7Ci0KLSAgLyogZnJhZ21lbnRzICovCi0gIGdfZnJlZSAoc3RyZWFtLT5yYV9lbnRyaWVzKTsKLSAgc3RyZWFtLT5yYV9lbnRyaWVzID0gTlVMTDsKLSAgc3RyZWFtLT5uX3JhX2VudHJpZXMgPSAwOwotCi0gIHN0cmVhbS0+c2FtcGxlX2luZGV4ID0gLTE7Ci0gIHN0cmVhbS0+c3RibF9pbmRleCA9IC0xOwotICBzdHJlYW0tPm5fc2FtcGxlcyA9IDA7Ci0gIHN0cmVhbS0+dGltZV9wb3NpdGlvbiA9IDA7Ci0KLSAgc3RyZWFtLT5uX3NhbXBsZXNfbW9vZiA9IDA7Ci0gIHN0cmVhbS0+ZHVyYXRpb25fbW9vZiA9IDA7Ci0gIHN0cmVhbS0+ZHVyYXRpb25fbGFzdF9tb29mID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X3N0cmVhbV9jbGVhciAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIGlmIChzdHJlYW0tPmFsbG9jYXRvcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPmFsbG9jYXRvcik7Ci0gIHdoaWxlIChzdHJlYW0tPmJ1ZmZlcnMpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChHU1RfQlVGRkVSX0NBU1QgKHN0cmVhbS0+YnVmZmVycy0+ZGF0YSkpOwotICAgIHN0cmVhbS0+YnVmZmVycyA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKHN0cmVhbS0+YnVmZmVycywgc3RyZWFtLT5idWZmZXJzKTsKLSAgfQotICBpZiAoc3RyZWFtLT5yZ2I4X3BhbGV0dGUpIHsKLSAgICBnc3RfbWVtb3J5X3VucmVmIChzdHJlYW0tPnJnYjhfcGFsZXR0ZSk7Ci0gICAgc3RyZWFtLT5yZ2I4X3BhbGV0dGUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHN0cmVhbS0+cGVuZGluZ190YWdzKQotICAgIGdzdF90YWdfbGlzdF91bnJlZiAoc3RyZWFtLT5wZW5kaW5nX3RhZ3MpOwotICBzdHJlYW0tPnBlbmRpbmdfdGFncyA9IE5VTEw7Ci0gIGdfZnJlZSAoc3RyZWFtLT5yZWRpcmVjdF91cmkpOwotICBzdHJlYW0tPnJlZGlyZWN0X3VyaSA9IE5VTEw7Ci0gIHN0cmVhbS0+c2VudF9lb3MgPSBGQUxTRTsKLSAgc3RyZWFtLT5zcGFyc2UgPSBGQUxTRTsKLSAgc3RyZWFtLT5wcm90ZWN0ZWQgPSBGQUxTRTsKLSAgaWYgKHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbykgewotICAgIGlmIChzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX3R5cGUgPT0gRk9VUkNDX2NlbmMpIHsKLSAgICAgIFF0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbyAqaW5mbyA9Ci0gICAgICAgICAgKFF0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbyAqKSBzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2luZm87Ci0gICAgICBpZiAoaW5mby0+ZGVmYXVsdF9wcm9wZXJ0aWVzKQotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGluZm8tPmRlZmF1bHRfcHJvcGVydGllcyk7Ci0gICAgICBpZiAoaW5mby0+Y3J5cHRvX2luZm8pCi0gICAgICAgIGdfcHRyX2FycmF5X2ZyZWUgKGluZm8tPmNyeXB0b19pbmZvLCBUUlVFKTsKLSAgICB9Ci0gICAgZ19mcmVlIChzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2luZm8pOwotICAgIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbyA9IE5VTEw7Ci0gIH0KLSAgc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV90eXBlID0gMDsKLSAgc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV92ZXJzaW9uID0gMDsKLSAgZ19xdWV1ZV9mb3JlYWNoICgmc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZSwKLSAgICAgIChHRnVuYykgZ3N0X2V2ZW50X3VucmVmLCBOVUxMKTsKLSAgZ19xdWV1ZV9jbGVhciAoJnN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfZXZlbnRfcXVldWUpOwotICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2VnbWVudHNfZGF0YSAocXRkZW11eCwgc3RyZWFtKTsKLSAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NhbXBsZXNfZGF0YSAocXRkZW11eCwgc3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X3N0cmVhbV9mcmVlIChHc3RRVERlbXV4ICogcXRkZW11eCwgUXREZW11eFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2NsZWFyIChxdGRlbXV4LCBzdHJlYW0pOwotICBpZiAoc3RyZWFtLT5jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChzdHJlYW0tPmNhcHMpOwotICBzdHJlYW0tPmNhcHMgPSBOVUxMOwotICBpZiAoc3RyZWFtLT5wYWQpIHsKLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChxdGRlbXV4KSwgc3RyZWFtLT5wYWQpOwotICAgIGdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWQgKHF0ZGVtdXgtPmZsb3djb21iaW5lciwgc3RyZWFtLT5wYWQpOwotICB9Ci0gIGdfZnJlZSAoc3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X3JlbW92ZV9zdHJlYW0gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBpbnQgaSkKLXsKLSAgZ19hc3NlcnQgKGkgPj0gMCAmJiBpIDwgcXRkZW11eC0+bl9zdHJlYW1zICYmIHF0ZGVtdXgtPnN0cmVhbXNbaV0gIT0gTlVMTCk7Ci0KLSAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZyZWUgKHF0ZGVtdXgsIHF0ZGVtdXgtPnN0cmVhbXNbaV0pOwotICBxdGRlbXV4LT5zdHJlYW1zW2ldID0gcXRkZW11eC0+c3RyZWFtc1txdGRlbXV4LT5uX3N0cmVhbXMgLSAxXTsKLSAgcXRkZW11eC0+c3RyZWFtc1txdGRlbXV4LT5uX3N0cmVhbXMgLSAxXSA9IE5VTEw7Ci0gIHF0ZGVtdXgtPm5fc3RyZWFtcy0tOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9xdGRlbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFFURGVtdXggKnF0ZGVtdXggPSBHU1RfUVRERU1VWCAoZWxlbWVudCk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmVzdWx0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWTp7Ci0gICAgICBnc3RfcXRkZW11eF9yZXNldCAocXRkZW11eCwgVFJVRSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfcGFyc2VfZnR5cCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIGNvbnN0IGd1aW50OCAqIGJ1ZmZlciwgZ2ludCBsZW5ndGgpCi17Ci0gIC8qIGNvdW50cyBhcyBoZWFkZXIgZGF0YSAqLwotICBxdGRlbXV4LT5oZWFkZXJfc2l6ZSArPSBsZW5ndGg7Ci0KLSAgLyogb25seSBjb25zaWRlciBhdCBsZWFzdCBhIHN1ZmZpY2llbnRseSBjb21wbGV0ZSBmdHlwIGF0b20gKi8KLSAgaWYgKGxlbmd0aCA+PSAyMCkgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgcXRkZW11eC0+bWFqb3JfYnJhbmQgPSBRVF9GT1VSQ0MgKGJ1ZmZlciArIDgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJtYWpvciBicmFuZDogJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAocXRkZW11eC0+bWFqb3JfYnJhbmQpKTsKLSAgICBpZiAocXRkZW11eC0+Y29tcF9icmFuZHMpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChxdGRlbXV4LT5jb21wX2JyYW5kcyk7Ci0gICAgYnVmID0gcXRkZW11eC0+Y29tcF9icmFuZHMgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbmd0aCAtIDE2KTsKLSAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgYnVmZmVyICsgMTYsIGxlbmd0aCAtIDE2KTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcXRkZW11eF9oYW5kbGVfeG1wX3RhZ2xpc3QgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBHc3RUYWdMaXN0ICogeG1wdGFnbGlzdCkKLXsKLSAgLyogU3RyaXAgb3V0IGJvZ3VzIGZpZWxkcyAqLwotICBpZiAoeG1wdGFnbGlzdCkgewotICAgIGlmIChnc3RfdGFnX2xpc3RfZ2V0X3Njb3BlICh0YWdsaXN0KSA9PSBHU1RfVEFHX1NDT1BFX0dMT0JBTCkgewotICAgICAgZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKHhtcHRhZ2xpc3QsIEdTVF9UQUdfVklERU9fQ09ERUMpOwotICAgICAgZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKHhtcHRhZ2xpc3QsIEdTVF9UQUdfQVVESU9fQ09ERUMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZyAoeG1wdGFnbGlzdCwgR1NUX1RBR19DT05UQUlORVJfRk9STUFUKTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiRm91bmQgWE1QIHRhZ3MgJSIgR1NUX1BUUl9GT1JNQVQsIHhtcHRhZ2xpc3QpOwotCi0gICAgLyogcHJpb3JpdGl6ZSBuYXRpdmUgdGFncyB1c2luZyBfS0VFUCBtb2RlICovCi0gICAgZ3N0X3RhZ19saXN0X2luc2VydCAodGFnbGlzdCwgeG1wdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9LRUVQKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHhtcHRhZ2xpc3QpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3BhcnNlX3BpZmYgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBjb25zdCBndWludDggKiBidWZmZXIsIGdpbnQgbGVuZ3RoLAotICAgIGd1aW50IG9mZnNldCkKLXsKLSAgR3N0Qnl0ZVJlYWRlciBicjsKLSAgZ3VpbnQ4IHZlcnNpb247Ci0gIGd1aW50MzIgZmxhZ3MgPSAwOwotICBndWludCBpOwotICBndWludDggaXZfc2l6ZSA9IDg7Ci0gIFF0RGVtdXhTdHJlYW0gKnN0cmVhbTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIFF0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbyAqc3NfaW5mbyA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpzeXN0ZW1faWQ7Ci0gIGdib29sZWFuIHVzZXNfc3ViX3NhbXBsZV9lbmNyeXB0aW9uID0gRkFMU0U7Ci0KLSAgaWYgKHF0ZGVtdXgtPm5fc3RyZWFtcyA9PSAwKQotICAgIHJldHVybjsKLQotICBzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zWzBdOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHN0cmVhbS0+Y2FwcywgMCk7Ci0gIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1jZW5jIikpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJBdHRlbXB0aW5nIFBJRkYgYm94IHBhcnNpbmcgb24gYW4gdW5lbmNyeXB0ZWQgc3RyZWFtLiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzdHJ1Y3R1cmUsIEdTVF9QUk9URUNUSU9OX1NZU1RFTV9JRF9DQVBTX0ZJRUxELAotICAgICAgR19UWVBFX1NUUklORywgJnN5c3RlbV9pZCwgTlVMTCk7Ci0gIGdzdF9xdGRlbXV4X2FwcGVuZF9wcm90ZWN0aW9uX3N5c3RlbV9pZCAocXRkZW11eCwgc3lzdGVtX2lkKTsKLQotICBzdHJlYW0tPnByb3RlY3RlZCA9IFRSVUU7Ci0gIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfdHlwZSA9IEZPVVJDQ19jZW5jOwotCi0gIGlmICghc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9pbmZvKQotICAgIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbyA9IGdfbmV3MCAoUXREZW11eENlbmNTYW1wbGVTZXRJbmZvLCAxKTsKLQotICBzc19pbmZvID0gKFF0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbyAqKSBzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2luZm87Ci0KLSAgaWYgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcykKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcyk7Ci0KLSAgc3NfaW5mby0+ZGVmYXVsdF9wcm9wZXJ0aWVzID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1jZW5jIiwKLSAgICAgICJpdl9zaXplIiwgR19UWVBFX1VJTlQsIGl2X3NpemUsICJlbmNyeXB0ZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0KLSAgaWYgKHNzX2luZm8tPmNyeXB0b19pbmZvKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJ1bnJlZmZpbmcgZXhpc3RpbmcgY3J5cHRvX2luZm8iKTsKLSAgICBnX3B0cl9hcnJheV9mcmVlIChzc19pbmZvLT5jcnlwdG9faW5mbywgVFJVRSk7Ci0gICAgc3NfaW5mby0+Y3J5cHRvX2luZm8gPSBOVUxMOwotICB9Ci0KLSAgLyogc2tpcCBVVUlEICovCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmYnIsIGJ1ZmZlciArIG9mZnNldCArIDE2LCBsZW5ndGggLSBvZmZzZXQgLSAxNik7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmYnIsICZ2ZXJzaW9uKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJFcnJvciBnZXR0aW5nIGJveCdzIHZlcnNpb24gZmllbGQiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlICgmYnIsICZmbGFncykpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiRXJyb3IgZ2V0dGluZyBib3gncyBmbGFncyBmaWVsZCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICgoZmxhZ3MgJiAweDAwMDAwMSkpIHsKLSAgICBndWludDMyIGFsZ29yaXRobV9pZCA9IDA7Ci0gICAgY29uc3QgZ3VpbnQ4ICpraWQ7Ci0gICAgR3N0QnVmZmVyICpraWRfYnVmOwotICAgIGdib29sZWFuIGlzX2VuY3J5cHRlZCA9IFRSVUU7Ci0KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2xlICgmYnIsICZhbGdvcml0aG1faWQpKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiRXJyb3IgZ2V0dGluZyBib3gncyBhbGdvcml0aG0gSUQgZmllbGQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhbGdvcml0aG1faWQgPj49IDg7Ci0gICAgaWYgKGFsZ29yaXRobV9pZCA9PSAwKSB7Ci0gICAgICBpc19lbmNyeXB0ZWQgPSBGQUxTRTsKLSAgICB9IGVsc2UgaWYgKGFsZ29yaXRobV9pZCA9PSAxKSB7Ci0gICAgICAvKiBGSVhNRTogbWF5YmUgc3RvcmUgdGhpcyBpbiBwcm9wZXJ0aWVzPyAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIkFFUyAxMjgtYml0cyBDVFIgZW5jcnlwdGVkIHN0cmVhbSIpOwotICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtX2lkID09IDIpIHsKLSAgICAgIC8qIEZJWE1FOiBtYXliZSBzdG9yZSB0aGlzIGluIHByb3BlcnRpZXM/ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiQUVTIDEyOC1iaXRzIENCQyBlbmNyeXB0ZWQgc3RyZWFtIik7Ci0gICAgfQotCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmYnIsICZpdl9zaXplKSkKLSAgICAgIHJldHVybjsKLQotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhICgmYnIsIDE2LCAma2lkKSkKLSAgICAgIHJldHVybjsKLQotICAgIGtpZF9idWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTYsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfZmlsbCAoa2lkX2J1ZiwgMCwga2lkLCAxNik7Ci0gICAgaWYgKHNzX2luZm8tPmRlZmF1bHRfcHJvcGVydGllcykKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3NfaW5mby0+ZGVmYXVsdF9wcm9wZXJ0aWVzKTsKLSAgICBzc19pbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMgPQotICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtY2VuYyIsCi0gICAgICAgICJpdl9zaXplIiwgR19UWVBFX1VJTlQsIGl2X3NpemUsCi0gICAgICAgICJlbmNyeXB0ZWQiLCBHX1RZUEVfQk9PTEVBTiwgaXNfZW5jcnlwdGVkLAotICAgICAgICAia2lkIiwgR1NUX1RZUEVfQlVGRkVSLCBraWRfYnVmLCBOVUxMKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZGVmYXVsdCBzYW1wbGUgcHJvcGVydGllczogIgotICAgICAgICAiaXNfZW5jcnlwdGVkPSV1LCBpdl9zaXplPSV1IiwgaXNfZW5jcnlwdGVkLCBpdl9zaXplKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChraWRfYnVmKTsKLSAgfSBlbHNlIGlmICgoZmxhZ3MgJiAweDAwMDAwMikpIHsKLSAgICB1c2VzX3N1Yl9zYW1wbGVfZW5jcnlwdGlvbiA9IFRSVUU7Ci0gIH0KLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmYnIsICZxdGRlbXV4LT5jZW5jX2F1eF9zYW1wbGVfY291bnQpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgIkVycm9yIGdldHRpbmcgYm94J3Mgc2FtcGxlIGNvdW50IGZpZWxkIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3NfaW5mby0+Y3J5cHRvX2luZm8gPQotICAgICAgZ19wdHJfYXJyYXlfbmV3X2Z1bGwgKHF0ZGVtdXgtPmNlbmNfYXV4X3NhbXBsZV9jb3VudCwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgcXRkZW11eF9nc3Rfc3RydWN0dXJlX2ZyZWUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBxdGRlbXV4LT5jZW5jX2F1eF9zYW1wbGVfY291bnQ7ICsraSkgewotICAgIEdzdFN0cnVjdHVyZSAqcHJvcGVydGllczsKLSAgICBndWludDggKmRhdGE7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICBwcm9wZXJ0aWVzID0gcXRkZW11eF9nZXRfY2VuY19zYW1wbGVfcHJvcGVydGllcyAocXRkZW11eCwgc3RyZWFtLCBpKTsKLSAgICBpZiAocHJvcGVydGllcyA9PSBOVUxMKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIGdldCBwcm9wZXJ0aWVzIGZvciBzYW1wbGUgJXUiLCBpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9kdXBfZGF0YSAoJmJyLCBpdl9zaXplLCAmZGF0YSkpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJJViBkYXRhIG5vdCBwcmVzZW50IGZvciBzYW1wbGUgJXUiLCBpKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHJvcGVydGllcyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGRhdGEsIGl2X3NpemUpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wZXJ0aWVzLCAiaXYiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZiwgTlVMTCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAgIGlmICh1c2VzX3N1Yl9zYW1wbGVfZW5jcnlwdGlvbikgewotICAgICAgZ3VpbnQxNiBuX3N1YnNhbXBsZXM7Ci0KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKCZiciwgJm5fc3Vic2FtcGxlcykKLSAgICAgICAgICB8fCBuX3N1YnNhbXBsZXMgPT0gMCkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgImZhaWxlZCB0byBnZXQgc3Vic2FtcGxlIGNvdW50IGZvciBzYW1wbGUgJXUiLCBpKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwcm9wZXJ0aWVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJzdWJzYW1wbGUgY291bnQ6ICV1Iiwgbl9zdWJzYW1wbGVzKTsKLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhICgmYnIsIG5fc3Vic2FtcGxlcyAqIDYsICZkYXRhKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIGdldCBzdWJzYW1wbGUgZGF0YSBmb3Igc2FtcGxlICV1IiwKLSAgICAgICAgICAgIGkpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHByb3BlcnRpZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCBuX3N1YnNhbXBsZXMgKiA2KTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wZXJ0aWVzLAotICAgICAgICAgICJzdWJzYW1wbGVfY291bnQiLCBHX1RZUEVfVUlOVCwgbl9zdWJzYW1wbGVzLAotICAgICAgICAgICJzdWJzYW1wbGVzIiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsIE5VTEwpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BlcnRpZXMsICJzdWJzYW1wbGVfY291bnQiLCBHX1RZUEVfVUlOVCwgMCwgTlVMTCk7Ci0gICAgfQotCi0gICAgZ19wdHJfYXJyYXlfYWRkIChzc19pbmZvLT5jcnlwdG9faW5mbywgcHJvcGVydGllcyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfcGFyc2VfdXVpZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIGNvbnN0IGd1aW50OCAqIGJ1ZmZlciwgZ2ludCBsZW5ndGgpCi17Ci0gIHN0YXRpYyBjb25zdCBndWludDggeG1wX3V1aWRbXSA9IHsgMHhCRSwgMHg3QSwgMHhDRiwgMHhDQiwKLSAgICAweDk3LCAweEE5LCAweDQyLCAweEU4LAotICAgIDB4OUMsIDB4NzEsIDB4OTksIDB4OTQsCi0gICAgMHg5MSwgMHhFMywgMHhBRiwgMHhBQwotICB9OwotICBzdGF0aWMgY29uc3QgZ3VpbnQ4IHBsYXlyZWFkeV91dWlkW10gPSB7Ci0gICAgMHhkMCwgMHg4YSwgMHg0ZiwgMHgxOCwgMHgxMCwgMHhmMywgMHg0YSwgMHg4MiwKLSAgICAweGI2LCAweGM4LCAweDMyLCAweGQ4LCAweGFiLCAweGExLCAweDgzLCAweGQzCi0gIH07Ci0KLSAgc3RhdGljIGNvbnN0IGd1aW50OCBwaWZmX3NhbXBsZV9lbmNyeXB0aW9uX3V1aWRbXSA9IHsKLSAgICAweGEyLCAweDM5LCAweDRmLCAweDUyLCAweDVhLCAweDliLCAweDRmLCAweDE0LAotICAgIDB4YTIsIDB4NDQsIDB4NmMsIDB4NDIsIDB4N2MsIDB4NjQsIDB4OGQsIDB4ZjQKLSAgfTsKLQotICBndWludCBvZmZzZXQ7Ci0KLSAgLyogY291bnRzIGFzIGhlYWRlciBkYXRhICovCi0gIHF0ZGVtdXgtPmhlYWRlcl9zaXplICs9IGxlbmd0aDsKLQotICBvZmZzZXQgPSAoUVRfVUlOVDMyIChidWZmZXIpID09IDApID8gMTYgOiA4OwotCi0gIGlmIChsZW5ndGggPD0gb2Zmc2V0ICsgMTYpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAidXVpZCBhdG9tIGlzIHRvbyBzaG9ydCwgc2tpcHBpbmciKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAobWVtY21wIChidWZmZXIgKyBvZmZzZXQsIHhtcF91dWlkLCAxNikgPT0gMCkgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0KLSAgICBidWYgPSBfZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoKGd1aW50OCAqKSBidWZmZXIgKyBvZmZzZXQgKyAxNiwKLSAgICAgICAgbGVuZ3RoIC0gb2Zmc2V0IC0gMTYsIE5VTEwpOwotICAgIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfZnJvbV94bXBfYnVmZmVyIChidWYpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgICBxdGRlbXV4X2hhbmRsZV94bXBfdGFnbGlzdCAocXRkZW11eCwgcXRkZW11eC0+dGFnX2xpc3QsIHRhZ2xpc3QpOwotCi0gIH0gZWxzZSBpZiAobWVtY21wIChidWZmZXIgKyBvZmZzZXQsIHBsYXlyZWFkeV91dWlkLCAxNikgPT0gMCkgewotICAgIGludCBsZW47Ci0gICAgY29uc3QgZ3VuaWNoYXIyICpzX3V0ZjE2OwotICAgIGNoYXIgKmNvbnRlbnRzOwotCi0gICAgbGVuID0gR1NUX1JFQURfVUlOVDE2X0xFIChidWZmZXIgKyBvZmZzZXQgKyAweDMwKTsKLSAgICBzX3V0ZjE2ID0gKGNvbnN0IGd1bmljaGFyMiAqKSAoYnVmZmVyICsgb2Zmc2V0ICsgMHgzMik7Ci0gICAgY29udGVudHMgPSBnX3V0ZjE2X3RvX3V0ZjggKHNfdXRmMTYsIGxlbiAvIDIsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJjb250ZW50czogJXMiLCBjb250ZW50cyk7Ci0KLSAgICBnX2ZyZWUgKGNvbnRlbnRzKTsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdGRlbXV4LCBTVFJFQU0sIERFQ1JZUFQsCi0gICAgICAgIChfKCJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIpKSwKLSAgICAgICAgKE5VTEwpKTsKLSAgfSBlbHNlIGlmIChtZW1jbXAgKGJ1ZmZlciArIG9mZnNldCwgcGlmZl9zYW1wbGVfZW5jcnlwdGlvbl91dWlkLCAxNikgPT0gMCkgewotICAgIHF0ZGVtdXhfcGFyc2VfcGlmZiAocXRkZW11eCwgYnVmZmVyLCBsZW5ndGgsIG9mZnNldCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIklnbm9yaW5nIHVua25vd24gdXVpZDogJTA4eC0lMDh4LSUwOHgtJTA4eCIsCi0gICAgICAgIEdTVF9SRUFEX1VJTlQzMl9MRSAoYnVmZmVyICsgb2Zmc2V0KSwKLSAgICAgICAgR1NUX1JFQURfVUlOVDMyX0xFIChidWZmZXIgKyBvZmZzZXQgKyA0KSwKLSAgICAgICAgR1NUX1JFQURfVUlOVDMyX0xFIChidWZmZXIgKyBvZmZzZXQgKyA4KSwKLSAgICAgICAgR1NUX1JFQURfVUlOVDMyX0xFIChidWZmZXIgKyBvZmZzZXQgKyAxMikpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3BhcnNlX3NpZHggKEdzdFFURGVtdXggKiBxdGRlbXV4LCBjb25zdCBndWludDggKiBidWZmZXIsIGdpbnQgbGVuZ3RoKQotewotICBHc3RTaWR4UGFyc2VyIHNpZHhfcGFyc2VyOwotICBHc3RJc29mZlBhcnNlclJlc3VsdCByZXM7Ci0gIGd1aW50IGNvbnN1bWVkOwotCi0gIGdzdF9pc29mZl9xdF9zaWR4X3BhcnNlcl9pbml0ICgmc2lkeF9wYXJzZXIpOwotCi0gIHJlcyA9Ci0gICAgICBnc3RfaXNvZmZfcXRfc2lkeF9wYXJzZXJfYWRkX2RhdGEgKCZzaWR4X3BhcnNlciwgYnVmZmVyLCBsZW5ndGgsCi0gICAgICAmY29uc3VtZWQpOwotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic2lkeCBwYXJzZSByZXN1bHQ6ICVkIiwgcmVzKTsKLSAgaWYgKHJlcyA9PSBHU1RfSVNPRkZfUVRfUEFSU0VSX0RPTkUpIHsKLSAgICBjaGVja191cGRhdGVfZHVyYXRpb24gKHF0ZGVtdXgsIHNpZHhfcGFyc2VyLmN1bXVsYXRpdmVfcHRzKTsKLSAgfQotICBnc3RfaXNvZmZfcXRfc2lkeF9wYXJzZXJfY2xlYXIgKCZzaWR4X3BhcnNlcik7Ci19Ci0KLS8qIGNhbGxlciB2ZXJpZmllcyBhdCBsZWFzdCA4IGJ5dGVzIGluIGJ1ZiAqLwotc3RhdGljIHZvaWQKLWV4dHJhY3RfaW5pdGlhbF9sZW5ndGhfYW5kX2ZvdXJjYyAoY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwKLSAgICBndWludDY0ICogcGxlbmd0aCwgZ3VpbnQzMiAqIHBmb3VyY2MpCi17Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludDMyIGZvdXJjYzsKLQotICBsZW5ndGggPSBRVF9VSU5UMzIgKGRhdGEpOwotICBHU1RfREVCVUcgKCJsZW5ndGggMHglMDgiIEdfR0lOVDY0X01PRElGSUVSICJ4IiwgbGVuZ3RoKTsKLSAgZm91cmNjID0gUVRfRk9VUkNDIChkYXRhICsgNCk7Ci0gIEdTVF9ERUJVRyAoImF0b20gdHlwZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLQotICBpZiAobGVuZ3RoID09IDApIHsKLSAgICBsZW5ndGggPSBHX01BWFVJTlQ2NDsKLSAgfSBlbHNlIGlmIChsZW5ndGggPT0gMSAmJiBzaXplID49IDE2KSB7Ci0gICAgLyogdGhpcyBtZWFucyB3ZSBoYXZlIGFuIGV4dGVuZGVkIHNpemUsIHdoaWNoIGlzIHRoZSA2NCBiaXQgdmFsdWUgb2YKLSAgICAgKiB0aGUgbmV4dCA4IGJ5dGVzICovCi0gICAgbGVuZ3RoID0gUVRfVUlOVDY0IChkYXRhICsgOCk7Ci0gICAgR1NUX0RFQlVHICgibGVuZ3RoIDB4JTA4IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIGxlbmd0aCk7Ci0gIH0KLQotICBpZiAocGxlbmd0aCkKLSAgICAqcGxlbmd0aCA9IGxlbmd0aDsKLSAgaWYgKHBmb3VyY2MpCi0gICAgKnBmb3VyY2MgPSBmb3VyY2M7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9tZWhkIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGJyKQotewotICBndWludDMyIHZlcnNpb24gPSAwOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24gPSAwOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGJyLCAmdmVyc2lvbikpCi0gICAgZ290byBmYWlsZWQ7Ci0KLSAgdmVyc2lvbiA+Pj0gMjQ7Ci0gIGlmICh2ZXJzaW9uID09IDEpIHsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlIChiciwgJmR1cmF0aW9uKSkKLSAgICAgIGdvdG8gZmFpbGVkOwotICB9IGVsc2UgewotICAgIGd1aW50MzIgZHVyID0gMDsKLQotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGJyLCAmZHVyKSkKLSAgICAgIGdvdG8gZmFpbGVkOwotICAgIGR1cmF0aW9uID0gZHVyOwotICB9Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAibWVoZCBkdXJhdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCwgZHVyYXRpb24pOwotICBxdGRlbXV4LT5kdXJhdGlvbiA9IGR1cmF0aW9uOwotCi0gIHJldHVybiBUUlVFOwotCi1mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicGFyc2luZyBtZWhkIGZhaWxlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2VfdHJleCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgZ3VpbnQzMiAqIGRzX2R1cmF0aW9uLCBndWludDMyICogZHNfc2l6ZSwgZ3VpbnQzMiAqIGRzX2ZsYWdzKQotewotICBpZiAoIXN0cmVhbS0+cGFyc2VkX3RyZXggJiYgcXRkZW11eC0+bW9vdl9ub2RlKSB7Ci0gICAgR05vZGUgKm12ZXgsICp0cmV4OwotICAgIEdzdEJ5dGVSZWFkZXIgdHJleF9kYXRhOwotCi0gICAgbXZleCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAocXRkZW11eC0+bW9vdl9ub2RlLCBGT1VSQ0NfbXZleCk7Ci0gICAgaWYgKG12ZXgpIHsKLSAgICAgIHRyZXggPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGVfZnVsbCAobXZleCwgRk9VUkNDX3RyZXgsCi0gICAgICAgICAgJnRyZXhfZGF0YSk7Ci0gICAgICB3aGlsZSAodHJleCkgewotICAgICAgICBndWludDMyIGlkID0gMCwgZHVyID0gMCwgc2l6ZSA9IDAsIGZsYWdzID0gMCwgZHVtbXkgPSAwOwotCi0gICAgICAgIC8qIHNraXAgdmVyc2lvbi9mbGFncyAqLwotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmdHJleF9kYXRhLCA0KSkKLSAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZ0cmV4X2RhdGEsICZpZCkpCi0gICAgICAgICAgZ290byBuZXh0OwotICAgICAgICBpZiAoaWQgIT0gc3RyZWFtLT50cmFja19pZCkKLSAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIC8qIHNhbXBsZSBkZXNjcmlwdGlvbiBpbmRleDsgaWdub3JlICovCi0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZ0cmV4X2RhdGEsICZkdW1teSkpCi0gICAgICAgICAgZ290byBuZXh0OwotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmdHJleF9kYXRhLCAmZHVyKSkKLSAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZ0cmV4X2RhdGEsICZzaXplKSkKLSAgICAgICAgICBnb3RvIG5leHQ7Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZ0cmV4X2RhdGEsICZmbGFncykpCi0gICAgICAgICAgZ290byBuZXh0OwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmcmFnbWVudCBkZWZhdWx0cyBmb3Igc3RyZWFtICVkOyAiCi0gICAgICAgICAgICAiZHVyYXRpb24gJWQsICBzaXplICVkLCBmbGFncyAweCV4Iiwgc3RyZWFtLT50cmFja19pZCwKLSAgICAgICAgICAgIGR1ciwgc2l6ZSwgZmxhZ3MpOwotCi0gICAgICAgIHN0cmVhbS0+cGFyc2VkX3RyZXggPSBUUlVFOwotICAgICAgICBzdHJlYW0tPmRlZl9zYW1wbGVfZHVyYXRpb24gPSBkdXI7Ci0gICAgICAgIHN0cmVhbS0+ZGVmX3NhbXBsZV9zaXplID0gc2l6ZTsKLSAgICAgICAgc3RyZWFtLT5kZWZfc2FtcGxlX2ZsYWdzID0gZmxhZ3M7Ci0KLSAgICAgIG5leHQ6Ci0gICAgICAgIC8qIGl0ZXJhdGUgYWxsIHNpYmxpbmdzICovCi0gICAgICAgIHRyZXggPSBxdGRlbXV4X3RyZWVfZ2V0X3NpYmxpbmdfYnlfdHlwZV9mdWxsICh0cmV4LCBGT1VSQ0NfdHJleCwKLSAgICAgICAgICAgICZ0cmV4X2RhdGEpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gICpkc19kdXJhdGlvbiA9IHN0cmVhbS0+ZGVmX3NhbXBsZV9kdXJhdGlvbjsKLSAgKmRzX3NpemUgPSBzdHJlYW0tPmRlZl9zYW1wbGVfc2l6ZTsKLSAgKmRzX2ZsYWdzID0gc3RyZWFtLT5kZWZfc2FtcGxlX2ZsYWdzOwotCi0gIC8qIGV2ZW4gdGhlbiwgYWJvdmUgdmFsdWVzIGFyZSBiZXR0ZXIgdGhhbiByYW5kb20gLi4uICovCi0gIGlmIChHX1VOTElLRUxZICghc3RyZWFtLT5wYXJzZWRfdHJleCkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJmYWlsZWQgdG8gZmluZCBmcmFnbWVudCBkZWZhdWx0cyBmb3Igc3RyZWFtICVkIiwgc3RyZWFtLT50cmFja19pZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb3JlIGFjY3VyYXRlIGR1cmF0aW9uIG1pZ2h0Ci0gKiBoYXZlIGJlZW4gZm91bmQuIEl0IHdpbGwgdXBkYXRlIGFsbCByZWxldmFudCB2YXJpYWJsZXMgaWYvd2hlcmUgbmVlZGVkCi0gKi8KLXN0YXRpYyB2b2lkCi1jaGVja191cGRhdGVfZHVyYXRpb24gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RDbG9ja1RpbWUgZHVyYXRpb24pCi17Ci0gIGd1aW50IGk7Ci0gIGd1aW50NjQgbW92ZHVyOwotICBHc3RDbG9ja1RpbWUgcHJldmR1cjsKLQotICBtb3ZkdXIgPSBHU1RUSU1FX1RPX1FUVElNRSAocXRkZW11eCwgZHVyYXRpb24pOwotCi0gIGlmIChtb3ZkdXIgPiBxdGRlbXV4LT5kdXJhdGlvbikgewotICAgIHByZXZkdXIgPSBRVFRJTUVfVE9fR1NUVElNRSAocXRkZW11eCwgcXRkZW11eC0+ZHVyYXRpb24pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJVcGRhdGluZyB0b3RhbCBkdXJhdGlvbiB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiB3YXMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChkdXJhdGlvbiksIEdTVF9USU1FX0FSR1MgKHByZXZkdXIpKTsKLSAgICBxdGRlbXV4LT5kdXJhdGlvbiA9IG1vdmR1cjsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAicXRkZW11eC0+c2VnbWVudC5kdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFUICIgLnN0b3A6ICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocXRkZW11eC0+c2VnbWVudC5kdXJhdGlvbiksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHF0ZGVtdXgtPnNlZ21lbnQuc3RvcCkpOwotICAgIGlmIChxdGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uID09IHByZXZkdXIpIHsKLSAgICAgIC8qIElmIHRoZSBjdXJyZW50IHNlZ21lbnQgaGFzIGR1cmF0aW9uL3N0b3AgaWRlbnRpY2FsIHRvIHByZXZpb3VzIGR1cmF0aW9uCi0gICAgICAgKiB1cGRhdGUgdGhlbSBhbHNvIChiZWNhdXNlIHRoZXkgd2VyZSBzZXQgYXQgdGhhdCBwb2ludCBpbiB0aW1lIHdpdGgKLSAgICAgICAqIHRoZSB3cm9uZyBkdXJhdGlvbiAqLwotICAgICAgLyogV2UgY29udmVydCB0aGUgdmFsdWUgKmZyb20qIHRoZSB0aW1lc2NhbGUgdmVyc2lvbiB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMgKi8KLSAgICAgIEdzdENsb2NrVGltZSBmaXhlZGR1ciA9IFFUVElNRV9UT19HU1RUSU1FIChxdGRlbXV4LCBtb3ZkdXIpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIlVwZGF0ZWQgc2VnbWVudC5kdXJhdGlvbiBhbmQgc2VnbWVudC5zdG9wIik7Ci0gICAgICBxdGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uID0gZml4ZWRkdXI7Ci0gICAgICBxdGRlbXV4LT5zZWdtZW50LnN0b3AgPSBmaXhlZGR1cjsKLSAgICB9Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IHF0ZGVtdXgtPm5fc3RyZWFtczsgaSsrKSB7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gcXRkZW11eC0+c3RyZWFtc1tpXTsKLSAgICBpZiAoc3RyZWFtKSB7Ci0gICAgICBtb3ZkdXIgPSBHU1RUSU1FX1RPX1FUU1RSRUFNVElNRSAoc3RyZWFtLCBkdXJhdGlvbik7Ci0gICAgICBpZiAobW92ZHVyID4gc3RyZWFtLT5kdXJhdGlvbikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgIlVwZGF0aW5nIHN0cmVhbSAjJWQgZHVyYXRpb24gdG8gJSIgR1NUX1RJTUVfRk9STUFULCBpLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKLSAgICAgICAgc3RyZWFtLT5kdXJhdGlvbiA9IG1vdmR1cjsKLSAgICAgICAgaWYgKHN0cmVhbS0+ZHVtbXlfc2VnbWVudCkgewotICAgICAgICAgIC8qIFVwZGF0ZSBhbGwgZHVtbXkgdmFsdWVzIHRvIG5ldyBkdXJhdGlvbiAqLwotICAgICAgICAgIHN0cmVhbS0+c2VnbWVudHNbMF0uc3RvcF90aW1lID0gZHVyYXRpb247Ci0gICAgICAgICAgc3RyZWFtLT5zZWdtZW50c1swXS5kdXJhdGlvbiA9IGR1cmF0aW9uOwotICAgICAgICAgIHN0cmVhbS0+c2VnbWVudHNbMF0ubWVkaWFfc3RvcCA9IGR1cmF0aW9uOwotCi0gICAgICAgICAgLyogbGV0IGRvd25zdHJlYW0ga25vdyB3ZSBwb3NzaWJseSBoYXZlIGEgbmV3IHN0b3AgdGltZSAqLwotICAgICAgICAgIGlmIChzdHJlYW0tPnNlZ21lbnRfaW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgIEdzdENsb2NrVGltZSBwb3M7Ci0KLSAgICAgICAgICAgIGlmIChxdGRlbXV4LT5zZWdtZW50LnJhdGUgPj0gMCkgewotICAgICAgICAgICAgICBwb3MgPSBzdHJlYW0tPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBwb3MgPSBzdHJlYW0tPnNlZ21lbnQuc3RvcDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX3VwZGF0ZV9zZWdtZW50IChxdGRlbXV4LCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgc3RyZWFtLT5zZWdtZW50X2luZGV4LCBwb3MsIE5VTEwsIE5VTEwpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2VfdHJ1biAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiB0cnVuLAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGd1aW50MzIgZF9zYW1wbGVfZHVyYXRpb24sIGd1aW50MzIgZF9zYW1wbGVfc2l6ZSwKLSAgICBndWludDMyIGRfc2FtcGxlX2ZsYWdzLCBnaW50NjQgbW9vZl9vZmZzZXQsIGdpbnQ2NCBtb29mX2xlbmd0aCwKLSAgICBnaW50NjQgKiBiYXNlX29mZnNldCwgZ2ludDY0ICogcnVubmluZ19vZmZzZXQsIGdpbnQ2NCBkZWNvZGVfdHMpCi17Ci0gIEdzdENsb2NrVGltZSBnc3RfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBndWludDY0IHRpbWVzdGFtcDsKLSAgZ2ludDMyIGRhdGFfb2Zmc2V0ID0gMDsKLSAgZ3VpbnQzMiBmbGFncyA9IDAsIGZpcnN0X2ZsYWdzID0gMCwgc2FtcGxlc19jb3VudCA9IDA7Ci0gIGdpbnQgaTsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludCBlbnRyeV9zaXplLCBkdXJfb2Zmc2V0LCBzaXplX29mZnNldCwgZmxhZ3Nfb2Zmc2V0ID0gMCwgY3Rfb2Zmc2V0ID0gMDsKLSAgUXREZW11eFNhbXBsZSAqc2FtcGxlOwotICBnYm9vbGVhbiBpc212ID0gRkFMU0U7Ci0gIGdpbnQ2NCBpbml0aWFsX29mZnNldDsKLQotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgdHJ1biBzdHJlYW0gJWQ7ICIKLSAgICAgICJkZWZhdWx0IGR1ciAlZCwgc2l6ZSAlZCwgZmxhZ3MgMHgleCwgYmFzZSBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFUICIsICIKLSAgICAgICJkZWNvZGUgdHMgJSIgR19HSU5UNjRfRk9STUFULCBzdHJlYW0tPnRyYWNrX2lkLCBkX3NhbXBsZV9kdXJhdGlvbiwKLSAgICAgIGRfc2FtcGxlX3NpemUsIGRfc2FtcGxlX2ZsYWdzLCAqYmFzZV9vZmZzZXQsIGRlY29kZV90cyk7Ci0KLSAgaWYgKHN0cmVhbS0+cGVuZGluZ19zZWVrICYmIG1vb2Zfb2Zmc2V0IDwgc3RyZWFtLT5wZW5kaW5nX3NlZWstPm1vb2Zfb2Zmc2V0KSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzdHJlYW0tPnBhZCwgInNraXBwaW5nIHRydW4gYmVmb3JlIHNlZWsgdGFyZ2V0IGZyYWdtZW50Iik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBwcmVzZW5jZSBvZiBzdHNzIG9yIG5vdCBjYW4ndCByZWFsbHkgdGVsbCB1cyBtdWNoLAotICAgKiBhbmQgZmxhZ3MgYW5kIHNvIG9uIHRlbmQgdG8gYmUgbWFyZ2luYWxseSByZWxpYWJsZSBpbiB0aGVzZSBmaWxlcyAqLwotICBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ19zb3VuKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgInNvdW5kIHRyYWNrIGluIGZyYWdtZW50ZWQgZmlsZTsgbWFya2luZyBhbGwga2V5ZnJhbWVzIik7Ci0gICAgc3RyZWFtLT5hbGxfa2V5ZnJhbWUgPSBUUlVFOwotICB9Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAodHJ1biwgMSkgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAodHJ1biwgJmZsYWdzKSkKLSAgICBnb3RvIGZhaWw7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAodHJ1biwgJnNhbXBsZXNfY291bnQpKQotICAgIGdvdG8gZmFpbDsKLQotICBpZiAoZmxhZ3MgJiBUUl9EQVRBX09GRlNFVCkgewotICAgIC8qIG5vdGUgdGhpcyBpcyByZWFsbHkgc2lnbmVkICovCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlICh0cnVuLCAmZGF0YV9vZmZzZXQpKQotICAgICAgZ290byBmYWlsOwotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAidHJ1biBkYXRhIG9mZnNldCAlZCIsIGRhdGFfb2Zmc2V0KTsKLSAgICAvKiBkZWZhdWx0IGJhc2Ugb2Zmc2V0ID0gZmlyc3QgYnl0ZSBvZiBtb29mICovCi0gICAgaWYgKCpiYXNlX29mZnNldCA9PSAtMSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJiYXNlX29mZnNldCBhdCBtb29mIik7Ci0gICAgICAqYmFzZV9vZmZzZXQgPSBtb29mX29mZnNldDsKLSAgICB9Ci0gICAgKnJ1bm5pbmdfb2Zmc2V0ID0gKmJhc2Vfb2Zmc2V0ICsgZGF0YV9vZmZzZXQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogaWYgbm8gb2Zmc2V0IGF0IGFsbCwgdGhhdCB3b3VsZCBtZWFuIGRhdGEgc3RhcnRzIGF0IG1vb2Ygc3RhcnQsCi0gICAgICogd2hpY2ggaXMgYSBiaXQgd3JvbmcgYW5kIGlzIGlzbXYgY3JhcHB5IHdheSwgc28gY29tcGVuc2F0ZQotICAgICAqIGFzc3VtaW5nIGRhdGEgaXMgaW4gbWRhdCBmb2xsb3dpbmcgbW9vZiAqLwotICAgIGlmICgqYmFzZV9vZmZzZXQgPT0gLTEpIHsKLSAgICAgICpiYXNlX29mZnNldCA9IG1vb2Zfb2Zmc2V0ICsgbW9vZl9sZW5ndGggKyA4OwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJiYXNlX29mZnNldCBhc3N1bWVkIGluIG1kYXQgYWZ0ZXIgbW9vZiIpOwotICAgICAgaXNtdiA9IFRSVUU7Ci0gICAgfQotICAgIGlmICgqcnVubmluZ19vZmZzZXQgPT0gLTEpCi0gICAgICAqcnVubmluZ19vZmZzZXQgPSAqYmFzZV9vZmZzZXQ7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInJ1bm5pbmcgb2Zmc2V0IG5vdyAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAqcnVubmluZ19vZmZzZXQpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInRydW4gb2Zmc2V0ICVkLCBmbGFncyAweCV4LCBlbnRyaWVzICVkIiwKLSAgICAgIGRhdGFfb2Zmc2V0LCBmbGFncywgc2FtcGxlc19jb3VudCk7Ci0KLSAgaWYgKGZsYWdzICYgVFJfRklSU1RfU0FNUExFX0ZMQUdTKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGZsYWdzICYgVFJfU0FNUExFX0ZMQUdTKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAiaW52YWxpZCBmbGFnczsgU0FNUExFIGFuZCBGSVJTVF9TQU1QTEUgcHJlc2VudCwgZGlzY2FyZGluZyBsYXR0ZXIiKTsKLSAgICAgIGZsYWdzIF49IFRSX0ZJUlNUX1NBTVBMRV9GTEFHUzsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAodHJ1biwgJmZpcnN0X2ZsYWdzKSkKLSAgICAgICAgZ290byBmYWlsOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJmaXJzdCBmbGFnczogMHgleCIsIGZpcnN0X2ZsYWdzKTsKLSAgICB9Ci0gIH0KLQotICAvKiBGSVhNRSA/IHNwZWMgc2F5cyBvdGhlciBiaXRzIHNob3VsZCBhbHNvIGJlIGNoZWNrZWQgdG8gZGV0ZXJtaW5lCi0gICAqIGVudHJ5IHNpemUgKGFuZCBwcmVmaXggc2l6ZSBmb3IgdGhhdCBtYXR0ZXIpICovCi0gIGVudHJ5X3NpemUgPSAwOwotICBkdXJfb2Zmc2V0ID0gc2l6ZV9vZmZzZXQgPSAwOwotICBpZiAoZmxhZ3MgJiBUUl9TQU1QTEVfRFVSQVRJT04pIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImVudHJ5IGR1cmF0aW9uIHByZXNlbnQiKTsKLSAgICBkdXJfb2Zmc2V0ID0gZW50cnlfc2l6ZTsKLSAgICBlbnRyeV9zaXplICs9IDQ7Ci0gIH0KLSAgaWYgKGZsYWdzICYgVFJfU0FNUExFX1NJWkUpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImVudHJ5IHNpemUgcHJlc2VudCIpOwotICAgIHNpemVfb2Zmc2V0ID0gZW50cnlfc2l6ZTsKLSAgICBlbnRyeV9zaXplICs9IDQ7Ci0gIH0KLSAgaWYgKGZsYWdzICYgVFJfU0FNUExFX0ZMQUdTKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJlbnRyeSBmbGFncyBwcmVzZW50Iik7Ci0gICAgZmxhZ3Nfb2Zmc2V0ID0gZW50cnlfc2l6ZTsKLSAgICBlbnRyeV9zaXplICs9IDQ7Ci0gIH0KLSAgaWYgKGZsYWdzICYgVFJfQ09NUE9TSVRJT05fVElNRV9PRkZTRVRTKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJlbnRyeSBjdCBvZmZzZXQgcHJlc2VudCIpOwotICAgIGN0X29mZnNldCA9IGVudHJ5X3NpemU7Ci0gICAgZW50cnlfc2l6ZSArPSA0OwotICB9Ci0KLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfY2h1bmtzICh0cnVuLCBzYW1wbGVzX2NvdW50LCBlbnRyeV9zaXplKSkKLSAgICBnb3RvIGZhaWw7Ci0gIGRhdGEgPSAoZ3VpbnQ4ICopIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkICh0cnVuKTsKLQotICBpZiAoc3RyZWFtLT5uX3NhbXBsZXMgKyBzYW1wbGVzX2NvdW50ID49Ci0gICAgICBRVERFTVVYX01BWF9TQU1QTEVfSU5ERVhfU0laRSAvIHNpemVvZiAoUXREZW11eFNhbXBsZSkpCi0gICAgZ290byBpbmRleF90b29fYmlnOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJhbGxvY2F0aW5nIG5fc2FtcGxlcyAldSAqICV1ICglLjJmIE1CKSIsCi0gICAgICBzdHJlYW0tPm5fc2FtcGxlcyArIHNhbXBsZXNfY291bnQsIChndWludCkgc2l6ZW9mIChRdERlbXV4U2FtcGxlKSwKLSAgICAgIChzdHJlYW0tPm5fc2FtcGxlcyArIHNhbXBsZXNfY291bnQpICoKLSAgICAgIHNpemVvZiAoUXREZW11eFNhbXBsZSkgLyAoMTAyNC4wICogMTAyNC4wKSk7Ci0KLSAgLyogY3JlYXRlIGEgbmV3IGFycmF5IG9mIHNhbXBsZXMgaWYgaXQncyB0aGUgZmlyc3Qgc2FtcGxlIHBhcnNlZCAqLwotICBpZiAoc3RyZWFtLT5uX3NhbXBsZXMgPT0gMCkgewotICAgIGdfYXNzZXJ0IChzdHJlYW0tPnNhbXBsZXMgPT0gTlVMTCk7Ci0gICAgc3RyZWFtLT5zYW1wbGVzID0gZ190cnlfbmV3MCAoUXREZW11eFNhbXBsZSwgc2FtcGxlc19jb3VudCk7Ci0gICAgLyogb3IgdHJ5IHRvIHJlYWxsb2NhdGUgaXQgd2l0aCBzcGFjZSBlbm91Z2ggdG8gaW5zZXJ0IHRoZSBuZXcgc2FtcGxlcyAqLwotICB9IGVsc2UKLSAgICBzdHJlYW0tPnNhbXBsZXMgPSBnX3RyeV9yZW5ldyAoUXREZW11eFNhbXBsZSwgc3RyZWFtLT5zYW1wbGVzLAotICAgICAgICBzdHJlYW0tPm5fc2FtcGxlcyArIHNhbXBsZXNfY291bnQpOwotICBpZiAoc3RyZWFtLT5zYW1wbGVzID09IE5VTEwpCi0gICAgZ290byBvdXRfb2ZfbWVtb3J5OwotCi0gIGlmIChxdGRlbXV4LT5mcmFnbWVudF9zdGFydCAhPSAtMSkgewotICAgIHRpbWVzdGFtcCA9IEdTVFRJTUVfVE9fUVRTVFJFQU1USU1FIChzdHJlYW0sIHF0ZGVtdXgtPmZyYWdtZW50X3N0YXJ0KTsKLSAgICBxdGRlbXV4LT5mcmFnbWVudF9zdGFydCA9IC0xOwotICB9IGVsc2UgewotICAgIGlmIChzdHJlYW0tPm5fc2FtcGxlcyA9PSAwKSB7Ci0gICAgICBpZiAoZGVjb2RlX3RzID4gMCkgewotICAgICAgICB0aW1lc3RhbXAgPSBkZWNvZGVfdHM7Ci0gICAgICB9IGVsc2UgaWYgKHN0cmVhbS0+cGVuZGluZ19zZWVrICE9IE5VTEwpIHsKLSAgICAgICAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIHRpbWVzdGFtcCBmcm9tIGEgdGZkdCBib3gsIHdlJ2xsIHVzZSB0aGUgb25lCi0gICAgICAgICAqIGZyb20gdGhlIG1mcmEgc2VlayB0YWJsZSAqLwotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAicGVuZGluZyBzZWVrIHRzID0gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3RyZWFtLT5wZW5kaW5nX3NlZWstPnRzKSk7Ci0KLSAgICAgICAgLyogRklYTUU6IHRoaXMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsIHRoZSB0aW1lc3RhbXAgcmVmZXJzIHRvIHRoZSByYW5kb20KLSAgICAgICAgICogYWNjZXNzIHNhbXBsZSByZWZlcmVkIHRvIGluIHRoZSB0ZnJhIGVudHJ5LCB3aGljaCBtYXkgbm90IG5lY2Vzc2FyaWx5Ci0gICAgICAgICAqIGJlIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIHRmcmFnL3RydW4gKGJ1dCBob3BlZnVsbHkvdXN1YWxseSBpcykgKi8KLSAgICAgICAgdGltZXN0YW1wID0gR1NUVElNRV9UT19RVFNUUkVBTVRJTUUgKHN0cmVhbSwgc3RyZWFtLT5wZW5kaW5nX3NlZWstPnRzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRpbWVzdGFtcCA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF90cyA9IFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sIHRpbWVzdGFtcCk7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAiZmlyc3Qgc2FtcGxlIHRzICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChnc3RfdHMpKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogc3Vic2VxdWVudCBmcmFnbWVudHMgZXh0ZW5kIHN0cmVhbSAqLwotICAgICAgdGltZXN0YW1wID0KLSAgICAgICAgICBzdHJlYW0tPnNhbXBsZXNbc3RyZWFtLT5uX3NhbXBsZXMgLSAxXS50aW1lc3RhbXAgKwotICAgICAgICAgIHN0cmVhbS0+c2FtcGxlc1tzdHJlYW0tPm5fc2FtcGxlcyAtIDFdLmR1cmF0aW9uOwotCi0gICAgICAvKiBJZiB0aGlzIGlzIGEgR1NUX0ZPUk1BVF9CWVRFUyBzdHJlYW0gYW5kIHRoZXJlJ3MgYSBzaWduaWZpY2FudAotICAgICAgICogZGlmZmVyZW5jZSAoMSBzZWMuKSBiZXR3ZWVuIGRlY29kZV90cyBhbmQgdGltZXN0YW1wLCBwcmVmZXIgdGhlCi0gICAgICAgKiBmb3JtZXIgKi8KLSAgICAgIGlmIChkZWNvZGVfdHMgIT0gMCAmJiAhcXRkZW11eC0+dXBzdHJlYW1fZm9ybWF0X2lzX3RpbWUKLSAgICAgICAgICAmJiBBQlNESUZGIChkZWNvZGVfdHMsIHRpbWVzdGFtcCkgPgotICAgICAgICAgIE1BWCAoc3RyZWFtLT5kdXJhdGlvbl9sYXN0X21vb2YgLyAyLAotICAgICAgICAgICAgICBHU1RUSU1FX1RPX1FUU1RSRUFNVElNRSAoc3RyZWFtLCBHU1RfU0VDT05EKSkpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgImRlY29kZV90cyAoJSIgR1NUX1RJTUVfRk9STUFUICIpIGFuZCB0aW1lc3RhbXAgKCUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICAgIikgYXJlIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IChtb3JlIHRoYW4gJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgICAiKSwgdXNpbmcgZGVjb2RlX3RzIiwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sIGRlY29kZV90cykpLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKHN0cmVhbSwgdGltZXN0YW1wKSksCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChRVFNUUkVBTVRJTUVfVE9fR1NUVElNRSAoc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICBNQVggKHN0cmVhbS0+ZHVyYXRpb25fbGFzdF9tb29mIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdTVFRJTUVfVE9fUVRTVFJFQU1USU1FIChzdHJlYW0sIEdTVF9TRUNPTkQpKSkpKTsKLSAgICAgICAgdGltZXN0YW1wID0gZGVjb2RlX3RzOwotICAgICAgfQotCi0gICAgICBnc3RfdHMgPSBRVFNUUkVBTVRJTUVfVE9fR1NUVElNRSAoc3RyZWFtLCB0aW1lc3RhbXApOwotICAgICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiZmlyc3Qgc2FtcGxlIHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIgKGV4dGVuZHMgcHJldmlvdXMgc2FtcGxlcykiLCBHU1RfVElNRV9BUkdTIChnc3RfdHMpKTsKLSAgICB9Ci0gIH0KLQotICBpbml0aWFsX29mZnNldCA9ICpydW5uaW5nX29mZnNldDsKLQotICBzYW1wbGUgPSBzdHJlYW0tPnNhbXBsZXMgKyBzdHJlYW0tPm5fc2FtcGxlczsKLSAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXNfY291bnQ7IGkrKykgewotICAgIGd1aW50MzIgZHVyLCBzaXplLCBzZmxhZ3MsIGN0OwotCi0gICAgLyogZmlyc3QgcmVhZCBzYW1wbGUgZGF0YSAqLwotICAgIGlmIChmbGFncyAmIFRSX1NBTVBMRV9EVVJBVElPTikgewotICAgICAgZHVyID0gUVRfVUlOVDMyIChkYXRhICsgZHVyX29mZnNldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGR1ciA9IGRfc2FtcGxlX2R1cmF0aW9uOwotICAgIH0KLSAgICBpZiAoZmxhZ3MgJiBUUl9TQU1QTEVfU0laRSkgewotICAgICAgc2l6ZSA9IFFUX1VJTlQzMiAoZGF0YSArIHNpemVfb2Zmc2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgc2l6ZSA9IGRfc2FtcGxlX3NpemU7Ci0gICAgfQotICAgIGlmIChmbGFncyAmIFRSX0ZJUlNUX1NBTVBMRV9GTEFHUykgewotICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICBzZmxhZ3MgPSBmaXJzdF9mbGFnczsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNmbGFncyA9IGRfc2FtcGxlX2ZsYWdzOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBUUl9TQU1QTEVfRkxBR1MpIHsKLSAgICAgIHNmbGFncyA9IFFUX1VJTlQzMiAoZGF0YSArIGZsYWdzX29mZnNldCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNmbGFncyA9IGRfc2FtcGxlX2ZsYWdzOwotICAgIH0KLSAgICBpZiAoZmxhZ3MgJiBUUl9DT01QT1NJVElPTl9USU1FX09GRlNFVFMpIHsKLSAgICAgIGN0ID0gUVRfVUlOVDMyIChkYXRhICsgY3Rfb2Zmc2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgY3QgPSAwOwotICAgIH0KLSAgICBkYXRhICs9IGVudHJ5X3NpemU7Ci0KLSAgICAvKiBmaWxsIHRoZSBzYW1wbGUgaW5mb3JtYXRpb24gKi8KLSAgICBzYW1wbGUtPm9mZnNldCA9ICpydW5uaW5nX29mZnNldDsKLSAgICBzYW1wbGUtPnB0c19vZmZzZXQgPSBjdDsKLSAgICBzYW1wbGUtPnNpemUgPSBzaXplOwotICAgIHNhbXBsZS0+dGltZXN0YW1wID0gdGltZXN0YW1wOwotICAgIHNhbXBsZS0+ZHVyYXRpb24gPSBkdXI7Ci0gICAgLyogc2FtcGxlLWlzLWRpZmZlcmVuY2Utc2FtcGxlICovCi0gICAgLyogaXNtdiBzZWVtcyB0byB1c2UgMHg0MCBmb3Iga2V5ZnJhbWUsIDB4YzAgZm9yIG5vbi1rZXlmcmFtZSwKLSAgICAgKiBub3cgaWRlYSBob3cgaXQgcmVsYXRlcyB0byBiaXRmaWVsZCBvdGhlciB0aGFuIG1hc3NpdmUgTEUvQkUgY29uZnVzaW9uICovCi0gICAgc2FtcGxlLT5rZXlmcmFtZSA9IGlzbXYgPyAoKHNmbGFncyAmIDB4ZmYpID09IDB4NDApIDogIShzZmxhZ3MgJiAweDEwMDAwKTsKLSAgICAqcnVubmluZ19vZmZzZXQgKz0gc2l6ZTsKLSAgICB0aW1lc3RhbXAgKz0gZHVyOwotICAgIHN0cmVhbS0+ZHVyYXRpb25fbW9vZiArPSBkdXI7Ci0gICAgc2FtcGxlKys7Ci0gIH0KLQotICAvKiBVcGRhdGUgdG90YWwgZHVyYXRpb24gaWYgbmVlZGVkICovCi0gIGNoZWNrX3VwZGF0ZV9kdXJhdGlvbiAocXRkZW11eCwgUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKHN0cmVhbSwgdGltZXN0YW1wKSk7Ci0KLSAgLyogUHJlLWVtcHRpdmVseSBmaWd1cmUgb3V0IHNpemUgb2YgbWRhdCBiYXNlZCBvbiB0cnVuIGluZm9ybWF0aW9uLgotICAgKiBJZiB0aGUgW21kYXRdIGF0b20gaXMgZWZmZWN0aXZlbGx5IHJlYWQsIGl0IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbAotICAgKiBzaXplLCBlbHNlIHdlIHdpbGwgc3RpbGwgYmUgYWJsZSB0byB1c2UgdGhpcyB3aGVuIGRlYWxpbmcgd2l0aCBnYXAnZWQKLSAgICogaW5wdXQgKi8KLSAgcXRkZW11eC0+bWRhdGxlZnQgPSAqcnVubmluZ19vZmZzZXQgLSBpbml0aWFsX29mZnNldDsKLQotICBzdHJlYW0tPm5fc2FtcGxlcyArPSBzYW1wbGVzX2NvdW50OwotICBzdHJlYW0tPm5fc2FtcGxlc19tb29mICs9IHNhbXBsZXNfY291bnQ7Ci0KLSAgaWYgKHN0cmVhbS0+cGVuZGluZ19zZWVrICE9IE5VTEwpCi0gICAgc3RyZWFtLT5wZW5kaW5nX3NlZWsgPSBOVUxMOwotCi0gIHJldHVybiBUUlVFOwotCi1mYWlsOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIHBhcnNlIHRydW4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW91dF9vZl9tZW1vcnk6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgc2FtcGxlcyIsCi0gICAgICAgIHN0cmVhbS0+bl9zYW1wbGVzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWluZGV4X3Rvb19iaWc6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJub3QgYWxsb2NhdGluZyBpbmRleCBvZiAlZCBzYW1wbGVzLCB3b3VsZCAiCi0gICAgICAgICJiZSBsYXJnZXIgdGhhbiAldU1CIChicm9rZW4gZmlsZT8pIiwgc3RyZWFtLT5uX3NhbXBsZXMsCi0gICAgICAgIFFUREVNVVhfTUFYX1NBTVBMRV9JTkRFWF9TSVpFID4+IDIwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogZmluZCBzdHJlYW0gd2l0aCBAaWQgKi8KLXN0YXRpYyBpbmxpbmUgUXREZW11eFN0cmVhbSAqCi1xdGRlbXV4X2ZpbmRfc3RyZWFtIChHc3RRVERlbXV4ICogcXRkZW11eCwgZ3VpbnQzMiBpZCkKLXsKLSAgUXREZW11eFN0cmVhbSAqc3RyZWFtOwotICBnaW50IGk7Ci0KLSAgLyogY2hlY2sgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFpZCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiaW52YWxpZCB0cmFjayBpZCAwIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvKiB0cnkgdG8gZ2V0IGl0IGZhc3QgYW5kIHNpbXBsZSAqLwotICBpZiAoR19MSUtFTFkgKGlkIDw9IHF0ZGVtdXgtPm5fc3RyZWFtcykpIHsKLSAgICBzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zW2lkIC0gMV07Ci0gICAgaWYgKEdfTElLRUxZIChzdHJlYW0tPnRyYWNrX2lkID09IGlkKSkKLSAgICAgIHJldHVybiBzdHJlYW07Ci0gIH0KLQotICAvKiBsaW5lYXIgc2VhcmNoIG90aGVyd2lzZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICBzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zW2ldOwotICAgIGlmIChzdHJlYW0tPnRyYWNrX2lkID09IGlkKQotICAgICAgcmV0dXJuIHN0cmVhbTsKLSAgfQotICBpZiAocXRkZW11eC0+bXNzX21vZGUpIHsKLSAgICAvKiBtc3Mgc2hvdWxkIGhhdmUgb25seSAxIHN0cmVhbSBhbnl3YXkgKi8KLSAgICByZXR1cm4gcXRkZW11eC0+c3RyZWFtc1swXTsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2VfbWZoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBtZmhkLAotICAgIGd1aW50MzIgKiBmcmFnbWVudF9udW1iZXIpCi17Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKG1maGQsIDQpKQotICAgIGdvdG8gZmFpbDsKLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAobWZoZCwgZnJhZ21lbnRfbnVtYmVyKSkKLSAgICBnb3RvIGZhaWw7Ci0gIHJldHVybiBUUlVFOwotZmFpbDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIkZhaWxlZCB0byBwYXJzZSBtZmhkIGF0b20iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1xdGRlbXV4X3BhcnNlX3RmaGQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogdGZoZCwKLSAgICBRdERlbXV4U3RyZWFtICoqIHN0cmVhbSwgZ3VpbnQzMiAqIGRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uLAotICAgIGd1aW50MzIgKiBkZWZhdWx0X3NhbXBsZV9zaXplLCBndWludDMyICogZGVmYXVsdF9zYW1wbGVfZmxhZ3MsCi0gICAgZ2ludDY0ICogYmFzZV9vZmZzZXQpCi17Ci0gIGd1aW50MzIgZmxhZ3MgPSAwOwotICBndWludDMyIHRyYWNrX2lkID0gMDsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICh0ZmhkLCAxKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlICh0ZmhkLCAmZmxhZ3MpKQotICAgIGdvdG8gaW52YWxpZF90cmFjazsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICh0ZmhkLCAmdHJhY2tfaWQpKQotICAgIGdvdG8gaW52YWxpZF90cmFjazsKLQotICAqc3RyZWFtID0gcXRkZW11eF9maW5kX3N0cmVhbSAocXRkZW11eCwgdHJhY2tfaWQpOwotICBpZiAoR19VTkxJS0VMWSAoISpzdHJlYW0pKQotICAgIGdvdG8gdW5rbm93bl9zdHJlYW07Ci0KLSAgaWYgKGZsYWdzICYgVEZfREVGQVVMVF9CQVNFX0lTX01PT0YpCi0gICAgKmJhc2Vfb2Zmc2V0ID0gcXRkZW11eC0+bW9vZl9vZmZzZXQ7Ci0KLSAgaWYgKGZsYWdzICYgVEZfQkFTRV9EQVRBX09GRlNFVCkKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDY0X2JlICh0ZmhkLCAoZ3VpbnQ2NCAqKSBiYXNlX29mZnNldCkpCi0gICAgICBnb3RvIGludmFsaWRfdHJhY2s7Ci0KLSAgLyogb2J0YWluIHN0cmVhbSBkZWZhdWx0cyAqLwotICBxdGRlbXV4X3BhcnNlX3RyZXggKHF0ZGVtdXgsICpzdHJlYW0sCi0gICAgICBkZWZhdWx0X3NhbXBsZV9kdXJhdGlvbiwgZGVmYXVsdF9zYW1wbGVfc2l6ZSwgZGVmYXVsdF9zYW1wbGVfZmxhZ3MpOwotCi0gIC8qIEZJWE1FOiBIYW5kbGUgVEZfU0FNUExFX0RFU0NSSVBUSU9OX0lOREVYIHByb3Blcmx5ICovCi0gIGlmIChmbGFncyAmIFRGX1NBTVBMRV9ERVNDUklQVElPTl9JTkRFWCkKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICh0ZmhkLCA0KSkKLSAgICAgIGdvdG8gaW52YWxpZF90cmFjazsKLQotICBpZiAoZmxhZ3MgJiBURl9ERUZBVUxUX1NBTVBMRV9EVVJBVElPTikKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICh0ZmhkLCBkZWZhdWx0X3NhbXBsZV9kdXJhdGlvbikpCi0gICAgICBnb3RvIGludmFsaWRfdHJhY2s7Ci0KLSAgaWYgKGZsYWdzICYgVEZfREVGQVVMVF9TQU1QTEVfU0laRSkKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICh0ZmhkLCBkZWZhdWx0X3NhbXBsZV9zaXplKSkKLSAgICAgIGdvdG8gaW52YWxpZF90cmFjazsKLQotICBpZiAoZmxhZ3MgJiBURl9ERUZBVUxUX1NBTVBMRV9GTEFHUykKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICh0ZmhkLCBkZWZhdWx0X3NhbXBsZV9mbGFncykpCi0gICAgICBnb3RvIGludmFsaWRfdHJhY2s7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWludmFsaWRfdHJhY2s6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJpbnZhbGlkIHRyYWNrIGZyYWdtZW50IGhlYWRlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5rbm93bl9zdHJlYW06Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAidW5rbm93biBzdHJlYW0gaW4gdGZoZCIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV90ZmR0IChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGJyLAotICAgIGd1aW50NjQgKiBkZWNvZGVfdGltZSkKLXsKLSAgZ3VpbnQzMiB2ZXJzaW9uID0gMDsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChiciwgJnZlcnNpb24pKQotICAgIHJldHVybiBGQUxTRTsKLQotICB2ZXJzaW9uID4+PSAyNDsKLSAgaWYgKHZlcnNpb24gPT0gMSkgewotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUgKGJyLCBkZWNvZGVfdGltZSkpCi0gICAgICBnb3RvIGZhaWxlZDsKLSAgfSBlbHNlIHsKLSAgICBndWludDMyIGRlY190aW1lID0gMDsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChiciwgJmRlY190aW1lKSkKLSAgICAgIGdvdG8gZmFpbGVkOwotICAgICpkZWNvZGVfdGltZSA9IGRlY190aW1lOwotICB9Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiVHJhY2sgZnJhZ21lbnQgZGVjb2RlIHRpbWU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAqZGVjb2RlX3RpbWUpOwotCi0gIHJldHVybiBUUlVFOwotCi1mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicGFyc2luZyB0ZmR0IGZhaWxlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIEdzdFN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG9mCi0gKiB0aGUgc3RyZWFtIHNhbXBsZSBpZGVudGlmaWVkIGJ5IEBzYW1wbGVfaW5kZXguIFRoZSBjYWxsZXIgbXVzdCB1bnJlZgotICogdGhlIHJldHVybmVkIG9iamVjdCBhZnRlciB1c2UuIFJldHVybnMgTlVMTCBpZiB1bnN1Y2Nlc3NmdWwuICovCi1zdGF0aWMgR3N0U3RydWN0dXJlICoKLXF0ZGVtdXhfZ2V0X2NlbmNfc2FtcGxlX3Byb3BlcnRpZXMgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGd1aW50IHNhbXBsZV9pbmRleCkKLXsKLSAgUXREZW11eENlbmNTYW1wbGVTZXRJbmZvICppbmZvID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyZWFtICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyZWFtLT5wcm90ZWN0ZWQsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9pbmZvICE9IE5VTEwsIE5VTEwpOwotCi0gIGluZm8gPSAoUXREZW11eENlbmNTYW1wbGVTZXRJbmZvICopIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbzsKLQotICAvKiBDdXJyZW50bHksIGNlbmMgcHJvcGVydGllcyBmb3IgZ3JvdXBzIG9mIHNhbXBsZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvCi0gICAqIHNpbXBseSByZXR1cm4gYSBjb3B5IG9mIHRoZSBkZWZhdWx0IHNhbXBsZSBwcm9wZXJ0aWVzICovCi0gIHJldHVybiBnc3Rfc3RydWN0dXJlX2NvcHkgKGluZm8tPmRlZmF1bHRfcHJvcGVydGllcyk7Ci19Ci0KLS8qIFBhcnNlcyB0aGUgc2l6ZXMgb2Ygc2FtcGxlIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBjb250YWluZWQgd2l0aGluIGEgc3RyZWFtLAotICogYXMgZ2l2ZW4gaW4gYSBzYWl6IGJveC4gUmV0dXJucyBhcnJheSBvZiBzYW1wbGVfY291bnQgZ3VpbnQ4IHNpemUgdmFsdWVzLAotICogb3IgTlVMTCBvbiBmYWlsdXJlICovCi1zdGF0aWMgZ3VpbnQ4ICoKLXF0ZGVtdXhfcGFyc2Vfc2FpeiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgR3N0Qnl0ZVJlYWRlciAqIGJyLCBndWludDMyICogc2FtcGxlX2NvdW50KQotewotICBndWludDMyIGZsYWdzID0gMDsKLSAgZ3VpbnQ4ICppbmZvX3NpemVzOwotICBndWludDggZGVmYXVsdF9pbmZvX3NpemU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHF0ZGVtdXggIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJlYW0gIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChiciAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNhbXBsZV9jb3VudCAhPSBOVUxMLCBOVUxMKTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChiciwgJmZsYWdzKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoZmxhZ3MgJiAweDEpIHsKLSAgICAvKiBhdXhfaW5mb190eXBlIGFuZCBhdXhfaW5mb190eXBlX3BhcmFtZXRlciBhcmUgaWdub3JlZCAqLwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKGJyLCA4KSkKLSAgICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4IChiciwgJmRlZmF1bHRfaW5mb19zaXplKSkKLSAgICByZXR1cm4gTlVMTDsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImRlZmF1bHRfaW5mb19zaXplOiAldSIsIGRlZmF1bHRfaW5mb19zaXplKTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChiciwgc2FtcGxlX2NvdW50KSkKLSAgICByZXR1cm4gTlVMTDsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInNhbXBsZV9jb3VudDogJXUiLCAqc2FtcGxlX2NvdW50KTsKLQotCi0gIGlmIChkZWZhdWx0X2luZm9fc2l6ZSA9PSAwKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKGJyLCAqc2FtcGxlX2NvdW50LCAmaW5mb19zaXplcykpIHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpbmZvX3NpemVzID0gZ19uZXcgKGd1aW50OCwgKnNhbXBsZV9jb3VudCk7Ci0gICAgbWVtc2V0IChpbmZvX3NpemVzLCBkZWZhdWx0X2luZm9fc2l6ZSwgKnNhbXBsZV9jb3VudCk7Ci0gIH0KLQotICByZXR1cm4gaW5mb19zaXplczsKLX0KLQotLyogUGFyc2VzIHRoZSBvZmZzZXQgb2Ygc2FtcGxlIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBjb250YWluZWQgd2l0aGluIGEgc3RyZWFtLAotICogYXMgZ2l2ZW4gaW4gYSBzYWlvIGJveC4gUmV0dXJucyBUUlVFIGlmIHN1Y2Nlc3NmdWw7IEZBTFNFIG90aGVyd2lzZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9zYWlvIChHc3RRVERlbXV4ICogcXRkZW11eCwgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RCeXRlUmVhZGVyICogYnIsIGd1aW50MzIgKiBpbmZvX3R5cGUsIGd1aW50MzIgKiBpbmZvX3R5cGVfcGFyYW1ldGVyLAotICAgIGd1aW50NjQgKiBvZmZzZXQpCi17Ci0gIGd1aW50OCB2ZXJzaW9uID0gMDsKLSAgZ3VpbnQzMiBmbGFncyA9IDA7Ci0gIGd1aW50MzIgYXV4X2luZm9fdHlwZSA9IDA7Ci0gIGd1aW50MzIgYXV4X2luZm9fdHlwZV9wYXJhbWV0ZXIgPSAwOwotICBndWludDMyIGVudHJ5X2NvdW50OwotICBndWludDMyIG9mZl8zMjsKLSAgZ3VpbnQ2NCBvZmZfNjQ7Ci0gIGNvbnN0IGd1aW50OCAqYXV4X2luZm9fdHlwZV9kYXRhID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocXRkZW11eCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJlYW0gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYnIgIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAob2Zmc2V0ICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKGJyLCAmdmVyc2lvbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUgKGJyLCAmZmxhZ3MpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoZmxhZ3MgJiAweDEpIHsKLQotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhIChiciwgNCwgJmF1eF9pbmZvX3R5cGVfZGF0YSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgYXV4X2luZm9fdHlwZSA9IFFUX0ZPVVJDQyAoYXV4X2luZm9fdHlwZV9kYXRhKTsKLQotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGJyLCAmYXV4X2luZm9fdHlwZV9wYXJhbWV0ZXIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+cHJvdGVjdGVkKSB7Ci0gICAgYXV4X2luZm9fdHlwZSA9IHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfdHlwZTsKLSAgfSBlbHNlIHsKLSAgICBhdXhfaW5mb190eXBlID0gc3RyZWFtLT5mb3VyY2M7Ci0gIH0KLQotICBpZiAoaW5mb190eXBlKQotICAgICppbmZvX3R5cGUgPSBhdXhfaW5mb190eXBlOwotICBpZiAoaW5mb190eXBlX3BhcmFtZXRlcikKLSAgICAqaW5mb190eXBlX3BhcmFtZXRlciA9IGF1eF9pbmZvX3R5cGVfcGFyYW1ldGVyOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJhdXhfaW5mb190eXBlOiAnJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIicsICIKLSAgICAgICJhdXhfaW5mb190eXBlX3BhcmFtZXRlcjogICUjMDZ4IiwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoYXV4X2luZm9fdHlwZSksIGF1eF9pbmZvX3R5cGVfcGFyYW1ldGVyKTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChiciwgJmVudHJ5X2NvdW50KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGVudHJ5X2NvdW50ICE9IDEpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAibXVsdGlwbGUgb2Zmc2V0cyBhcmUgbm90IHN1cHBvcnRlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICh2ZXJzaW9uID09IDApIHsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChiciwgJm9mZl8zMikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgKm9mZnNldCA9IChndWludDY0KSBvZmZfMzI7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ2NF9iZSAoYnIsICZvZmZfNjQpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgICpvZmZzZXQgPSBvZmZfNjQ7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAib2Zmc2V0OiAlIiBHX0dVSU5UNjRfRk9STUFULCAqb2Zmc2V0KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X2dzdF9zdHJ1Y3R1cmVfZnJlZSAoR3N0U3RydWN0dXJlICogZ3N0c3RydWN0dXJlKQotewotICBpZiAoZ3N0c3RydWN0dXJlKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChnc3RzdHJ1Y3R1cmUpOwotICB9Ci19Ci0KLS8qIFBhcnNlcyBhdXhpbGlhcnkgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gc2FtcGxlcyBwcm90ZWN0ZWQgdXNpbmcgQ29tbW9uCi0gKiBFbmNyeXB0aW9uIChjZW5jKTsgdGhlIGZvcm1hdCBvZiB0aGlzIGluZm9ybWF0aW9uIGlzIGRlZmluZWQgaW4KLSAqIElTTy9JRUMgMjMwMDEtNy4gUmV0dXJucyBUUlVFIGlmIHN1Y2Nlc3NmdWw7IEZBTFNFIG90aGVyd2lzZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9jZW5jX2F1eF9pbmZvIChHc3RRVERlbXV4ICogcXRkZW11eCwgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RCeXRlUmVhZGVyICogYnIsIGd1aW50OCAqIGluZm9fc2l6ZXMsIGd1aW50MzIgc2FtcGxlX2NvdW50KQotewotICBRdERlbXV4Q2VuY1NhbXBsZVNldEluZm8gKnNzX2luZm8gPSBOVUxMOwotICBndWludDggc2l6ZTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChxdGRlbXV4ICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cmVhbSAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChiciAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJlYW0tPnByb3RlY3RlZCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9pbmZvICE9IE5VTEwsIEZBTFNFKTsKLQotICBzc19pbmZvID0gKFF0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbyAqKSBzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX2luZm87Ci0KLSAgaWYgKHNzX2luZm8tPmNyeXB0b19pbmZvKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJ1bnJlZmZpbmcgZXhpc3RpbmcgY3J5cHRvX2luZm8iKTsKLSAgICBnX3B0cl9hcnJheV9mcmVlIChzc19pbmZvLT5jcnlwdG9faW5mbywgVFJVRSk7Ci0gIH0KLQotICBzc19pbmZvLT5jcnlwdG9faW5mbyA9Ci0gICAgICBnX3B0cl9hcnJheV9uZXdfZnVsbCAoc2FtcGxlX2NvdW50LAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBxdGRlbXV4X2dzdF9zdHJ1Y3R1cmVfZnJlZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHNhbXBsZV9jb3VudDsgKytpKSB7Ci0gICAgR3N0U3RydWN0dXJlICpwcm9wZXJ0aWVzOwotICAgIGd1aW50MTYgbl9zdWJzYW1wbGVzID0gMDsKLSAgICBndWludDggKmRhdGE7Ci0gICAgZ3VpbnQgaXZfc2l6ZTsKLSAgICBHc3RCdWZmZXIgKmJ1ZjsKLQotICAgIHByb3BlcnRpZXMgPSBxdGRlbXV4X2dldF9jZW5jX3NhbXBsZV9wcm9wZXJ0aWVzIChxdGRlbXV4LCBzdHJlYW0sIGkpOwotICAgIGlmIChwcm9wZXJ0aWVzID09IE5VTEwpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gZ2V0IHByb3BlcnRpZXMgZm9yIHNhbXBsZSAldSIsIGkpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHByb3BlcnRpZXMsICJpdl9zaXplIiwgJml2X3NpemUpKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIGdldCBpdl9zaXplIGZvciBzYW1wbGUgJXUiLCBpKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHJvcGVydGllcyk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2R1cF9kYXRhIChiciwgaXZfc2l6ZSwgJmRhdGEpKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIGdldCBJViBmb3Igc2FtcGxlICV1IiwgaSk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHByb3BlcnRpZXMpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCBpdl9zaXplKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcGVydGllcywgIml2IiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgc2l6ZSA9IGluZm9fc2l6ZXNbaV07Ci0gICAgaWYgKHNpemUgPiBpdl9zaXplKSB7Ci0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlIChiciwgJm5fc3Vic2FtcGxlcykKLSAgICAgICAgICB8fCAhKG5fc3Vic2FtcGxlcyA+IDApKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHJvcGVydGllcyk7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAiZmFpbGVkIHRvIGdldCBzdWJzYW1wbGUgY291bnQgZm9yIHNhbXBsZSAldSIsIGkpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInN1YnNhbXBsZSBjb3VudDogJXUiLCBuX3N1YnNhbXBsZXMpOwotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZHVwX2RhdGEgKGJyLCBuX3N1YnNhbXBsZXMgKiA2LCAmZGF0YSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgImZhaWxlZCB0byBnZXQgc3Vic2FtcGxlIGRhdGEgZm9yIHNhbXBsZSAldSIsCi0gICAgICAgICAgICBpKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwcm9wZXJ0aWVzKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZGF0YSwgbl9zdWJzYW1wbGVzICogNik7Ci0gICAgICBpZiAoIWJ1ZikgewotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHByb3BlcnRpZXMpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcGVydGllcywKLSAgICAgICAgICAic3Vic2FtcGxlX2NvdW50IiwgR19UWVBFX1VJTlQsIG5fc3Vic2FtcGxlcywKLSAgICAgICAgICAic3Vic2FtcGxlcyIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wZXJ0aWVzLCAic3Vic2FtcGxlX2NvdW50IiwgR19UWVBFX1VJTlQsIDAsIE5VTEwpOwotICAgIH0KLSAgICBnX3B0cl9hcnJheV9hZGQgKHNzX2luZm8tPmNyeXB0b19pbmZvLCBwcm9wZXJ0aWVzKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogQ29udmVydHMgYSBVVUlEIGluIHJhdyBieXRlIGZvcm0gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGRlZmluZWQgaW4KLSAqIFJGQyA0MTIyLiBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgc3RyaW5nIGFuZCBpcwotICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQgYWZ0ZXIgdXNlLiAqLwotc3RhdGljIGdjaGFyICoKLXF0ZGVtdXhfdXVpZF9ieXRlc190b19zdHJpbmcgKGdjb25zdHBvaW50ZXIgdXVpZF9ieXRlcykKLXsKLSAgY29uc3QgZ3VpbnQ4ICp1dWlkID0gKGNvbnN0IGd1aW50OCAqKSB1dWlkX2J5dGVzOwotCi0gIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCIlMDJ4JTAyeCUwMnglMDJ4LSUwMnglMDJ4LSUwMnglMDJ4LSIKLSAgICAgICIlMDJ4JTAyeC0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLAotICAgICAgdXVpZFswXSwgdXVpZFsxXSwgdXVpZFsyXSwgdXVpZFszXSwKLSAgICAgIHV1aWRbNF0sIHV1aWRbNV0sIHV1aWRbNl0sIHV1aWRbN10sCi0gICAgICB1dWlkWzhdLCB1dWlkWzldLCB1dWlkWzEwXSwgdXVpZFsxMV0sCi0gICAgICB1dWlkWzEyXSwgdXVpZFsxM10sIHV1aWRbMTRdLCB1dWlkWzE1XSk7Ci19Ci0KLS8qIFBhcnNlcyBhIFByb3RlY3Rpb24gU3lzdGVtIFNwZWNpZmljIEhlYWRlciBib3ggKHBzc2gpLCBhcyBkZWZpbmVkIGluIHRoZQotICogQ29tbW9uIEVuY3J5cHRpb24gKGNlbmMpIHN0YW5kYXJkIChJU08vSUVDIDIzMDAxLTcpLCB3aGljaCBjb250YWlucwotICogaW5mb3JtYXRpb24gbmVlZGVkIGJ5IGEgc3BlY2lmaWMgY29udGVudCBwcm90ZWN0aW9uIHN5c3RlbSBpbiBvcmRlciB0bwotICogZGVjcnlwdCBjZW5jLXByb3RlY3RlZCB0cmFja3MuIFJldHVybnMgVFJVRSBpZiBzdWNjZXNzZnVsOyBGQUxTRQotICogb3RoZXJ3aXNlLiAqLwotc3RhdGljIGdib29sZWFuCi1xdGRlbXV4X3BhcnNlX3Bzc2ggKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHTm9kZSAqIG5vZGUpCi17Ci0gIGdjaGFyICpzeXNpZF9zdHJpbmc7Ci0gIGd1aW50MzIgcHNzaF9zaXplID0gUVRfVUlOVDMyIChub2RlLT5kYXRhKTsKLSAgR3N0QnVmZmVyICpwc3NoID0gTlVMTDsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gTlVMTDsKLSAgZ3VpbnQzMiBwYXJlbnRfYm94X3R5cGU7Ci0gIGdpbnQgaTsKLQotICBpZiAoR19VTkxJS0VMWSAocHNzaF9zaXplIDwgMzJVKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJpbnZhbGlkIGJveCBzaXplIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgc3lzaWRfc3RyaW5nID0KLSAgICAgIHF0ZGVtdXhfdXVpZF9ieXRlc190b19zdHJpbmcgKChjb25zdCBndWludDggKikgbm9kZS0+ZGF0YSArIDEyKTsKLQotICBnc3RfcXRkZW11eF9hcHBlbmRfcHJvdGVjdGlvbl9zeXN0ZW1faWQgKHF0ZGVtdXgsIHN5c2lkX3N0cmluZyk7Ci0KLSAgcHNzaCA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChub2RlLT5kYXRhLCBwc3NoX3NpemUpLCBwc3NoX3NpemUpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImNlbmMgcHNzaCBzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHBzc2gpKTsKLQotICBwYXJlbnRfYm94X3R5cGUgPSBRVF9GT1VSQ0MgKChjb25zdCBndWludDggKikgbm9kZS0+cGFyZW50LT5kYXRhICsgNCk7Ci0KLSAgLyogUHVzaCBhbiBldmVudCBjb250YWluaW5nIHRoZSBwc3NoIGJveCBvbnRvIHRoZSBxdWV1ZXMgb2YgYWxsIHN0cmVhbXMuICovCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19wcm90ZWN0aW9uIChzeXNpZF9zdHJpbmcsIHBzc2gsCi0gICAgICAocGFyZW50X2JveF90eXBlID09IEZPVVJDQ19tb292KSA/ICJpc29ibWZmL21vb3YiIDogImlzb2JtZmYvbW9vZiIpOwotICBmb3IgKGkgPSAwOyBpIDwgcXRkZW11eC0+bl9zdHJlYW1zOyArK2kpIHsKLSAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoJnF0ZGVtdXgtPnN0cmVhbXNbaV0tPnByb3RlY3Rpb25fc2NoZW1lX2V2ZW50X3F1ZXVlLAotICAgICAgICBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotICB9Ci0gIGdfZnJlZSAoc3lzaWRfc3RyaW5nKTsKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKHBzc2gpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1xdGRlbXV4X3BhcnNlX21vb2YgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBjb25zdCBndWludDggKiBidWZmZXIsIGd1aW50IGxlbmd0aCwKLSAgICBndWludDY0IG1vb2Zfb2Zmc2V0LCBRdERlbXV4U3RyZWFtICogc3RyZWFtKQotewotICBHTm9kZSAqbW9vZl9ub2RlLCAqdHJhZl9ub2RlLCAqdGZoZF9ub2RlLCAqdHJ1bl9ub2RlLCAqdGZkdF9ub2RlLCAqbWZoZF9ub2RlOwotICBHTm9kZSAqdXVpZF9ub2RlOwotICBHc3RCeXRlUmVhZGVyIG1maGRfZGF0YSwgdHJ1bl9kYXRhLCB0ZmhkX2RhdGEsIHRmZHRfZGF0YTsKLSAgR05vZGUgKnNhaXpfbm9kZSwgKnNhaW9fbm9kZSwgKnBzc2hfbm9kZTsKLSAgR3N0Qnl0ZVJlYWRlciBzYWl6X2RhdGEsIHNhaW9fZGF0YTsKLSAgZ3VpbnQzMiBkc19zaXplID0gMCwgZHNfZHVyYXRpb24gPSAwLCBkc19mbGFncyA9IDA7Ci0gIGdpbnQ2NCBiYXNlX29mZnNldCwgcnVubmluZ19vZmZzZXQ7Ci0gIGd1aW50MzIgZnJhZ19udW07Ci0KLSAgLyogTk9URSBAc3RyZWFtIGlnbm9yZWQgKi8KLQotICBtb29mX25vZGUgPSBnX25vZGVfbmV3ICgoZ3VpbnQ4ICopIGJ1ZmZlcik7Ci0gIHF0ZGVtdXhfcGFyc2Vfbm9kZSAocXRkZW11eCwgbW9vZl9ub2RlLCBidWZmZXIsIGxlbmd0aCk7Ci0gIHF0ZGVtdXhfbm9kZV9kdW1wIChxdGRlbXV4LCBtb29mX25vZGUpOwotCi0gIC8qIEdldCBmcmFnbWVudCBudW1iZXIgZnJvbSBtZmhkIGFuZCBjaGVjayBpdCdzIHZhbGlkICovCi0gIG1maGRfbm9kZSA9Ci0gICAgICBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGVfZnVsbCAobW9vZl9ub2RlLCBGT1VSQ0NfbWZoZCwgJm1maGRfZGF0YSk7Ci0gIGlmIChtZmhkX25vZGUgPT0gTlVMTCkKLSAgICBnb3RvIG1pc3NpbmdfbWZoZDsKLSAgaWYgKCFxdGRlbXV4X3BhcnNlX21maGQgKHF0ZGVtdXgsICZtZmhkX2RhdGEsICZmcmFnX251bSkpCi0gICAgZ290byBmYWlsOwotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiRnJhZ21lbnQgIyVkIiwgZnJhZ19udW0pOwotCi0gIC8qIHVua25vd24gYmFzZV9vZmZzZXQgdG8gc3RhcnQgd2l0aCAqLwotICBiYXNlX29mZnNldCA9IHJ1bm5pbmdfb2Zmc2V0ID0gLTE7Ci0gIHRyYWZfbm9kZSA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobW9vZl9ub2RlLCBGT1VSQ0NfdHJhZik7Ci0gIHdoaWxlICh0cmFmX25vZGUpIHsKLSAgICBndWludDY0IGRlY29kZV90aW1lID0gMDsKLQotICAgIC8qIEZyYWdtZW50IEhlYWRlciBub2RlICovCi0gICAgdGZoZF9ub2RlID0KLSAgICAgICAgcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKHRyYWZfbm9kZSwgRk9VUkNDX3RmaGQsCi0gICAgICAgICZ0ZmhkX2RhdGEpOwotICAgIGlmICghdGZoZF9ub2RlKQotICAgICAgZ290byBtaXNzaW5nX3RmaGQ7Ci0gICAgaWYgKCFxdGRlbXV4X3BhcnNlX3RmaGQgKHF0ZGVtdXgsICZ0ZmhkX2RhdGEsICZzdHJlYW0sICZkc19kdXJhdGlvbiwKLSAgICAgICAgICAgICZkc19zaXplLCAmZHNfZmxhZ3MsICZiYXNlX29mZnNldCkpCi0gICAgICBnb3RvIG1pc3NpbmdfdGZoZDsKLQotICAgIC8qIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIGF0IG1vc3QgYSBzaW5nbGUgc2V0IG9mIHNhbXBsZSBhdXhpbGlhcnkKLSAgICAgKiBkYXRhIGluIHRoZSBmcmFnbWVudCAoY29uc2lzdGluZyBvZiBhIHNhaXogYm94IGFuZCBhIGNvcnJlc3BvbmRpbmcgc2FpbwotICAgICAqIGJveCk7IGluIHRoZW9yeSwgaG93ZXZlciwgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgc2V0cyBvZiBzYW1wbGUKLSAgICAgKiBhdXhpbGlhcnkgZGF0YSBpbiBhIGZyYWdtZW50LiAqLwotICAgIHNhaXpfbm9kZSA9Ci0gICAgICAgIHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsICh0cmFmX25vZGUsIEZPVVJDQ19zYWl6LAotICAgICAgICAmc2Fpel9kYXRhKTsKLSAgICBpZiAoc2Fpel9ub2RlKSB7Ci0gICAgICBndWludDMyIGluZm9fdHlwZSA9IDA7Ci0gICAgICBndWludDY0IG9mZnNldCA9IDA7Ci0gICAgICBndWludDMyIGluZm9fdHlwZV9wYXJhbWV0ZXIgPSAwOwotCi0gICAgICBnX2ZyZWUgKHF0ZGVtdXgtPmNlbmNfYXV4X2luZm9fc2l6ZXMpOwotCi0gICAgICBxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzID0KLSAgICAgICAgICBxdGRlbXV4X3BhcnNlX3NhaXogKHF0ZGVtdXgsIHN0cmVhbSwgJnNhaXpfZGF0YSwKLSAgICAgICAgICAmcXRkZW11eC0+Y2VuY19hdXhfc2FtcGxlX2NvdW50KTsKLSAgICAgIGlmIChxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzID09IE5VTEwpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgImZhaWxlZCB0byBwYXJzZSBzYWl6IGJveCIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICB9Ci0gICAgICBzYWlvX25vZGUgPQotICAgICAgICAgIHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsICh0cmFmX25vZGUsIEZPVVJDQ19zYWlvLAotICAgICAgICAgICZzYWlvX2RhdGEpOwotICAgICAgaWYgKCFzYWlvX25vZGUpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgInNhaXogYm94IHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIHNhaW8gYm94Iik7Ci0gICAgICAgIGdfZnJlZSAocXRkZW11eC0+Y2VuY19hdXhfaW5mb19zaXplcyk7Ci0gICAgICAgIHF0ZGVtdXgtPmNlbmNfYXV4X2luZm9fc2l6ZXMgPSBOVUxMOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChHX1VOTElLRUxZICghcXRkZW11eF9wYXJzZV9zYWlvIChxdGRlbXV4LCBzdHJlYW0sICZzYWlvX2RhdGEsCi0gICAgICAgICAgICAgICAgICAmaW5mb190eXBlLCAmaW5mb190eXBlX3BhcmFtZXRlciwgJm9mZnNldCkpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gcGFyc2Ugc2FpbyBib3giKTsKLSAgICAgICAgZ19mcmVlIChxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzKTsKLSAgICAgICAgcXRkZW11eC0+Y2VuY19hdXhfaW5mb19zaXplcyA9IE5VTEw7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICAgIH0KLSAgICAgIGlmIChiYXNlX29mZnNldCA+IC0xICYmIGJhc2Vfb2Zmc2V0ID4gcXRkZW11eC0+bW9vZl9vZmZzZXQpCi0gICAgICAgIG9mZnNldCArPSAoZ3VpbnQ2NCkgKGJhc2Vfb2Zmc2V0IC0gcXRkZW11eC0+bW9vZl9vZmZzZXQpOwotICAgICAgaWYgKGluZm9fdHlwZSA9PSBGT1VSQ0NfY2VuYyAmJiBpbmZvX3R5cGVfcGFyYW1ldGVyID09IDBVKSB7Ci0gICAgICAgIEdzdEJ5dGVSZWFkZXIgYnI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBsZW5ndGgpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY2VuYyBhdXhpbGlhcnkgaW5mbyBzdG9yZWQgb3V0IG9mIG1vb2YiKTsKLSAgICAgICAgICBxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJmJyLCBidWZmZXIgKyBvZmZzZXQsIGxlbmd0aCAtIG9mZnNldCk7Ci0gICAgICAgICAgaWYgKCFxdGRlbXV4X3BhcnNlX2NlbmNfYXV4X2luZm8gKHF0ZGVtdXgsIHN0cmVhbSwgJmJyLAotICAgICAgICAgICAgICAgICAgcXRkZW11eC0+Y2VuY19hdXhfaW5mb19zaXplcywKLSAgICAgICAgICAgICAgICAgIHF0ZGVtdXgtPmNlbmNfYXV4X3NhbXBsZV9jb3VudCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gcGFyc2UgY2VuYyBhdXhpbGlhcnkgaW5mbyIpOwotICAgICAgICAgICAgZ19mcmVlIChxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzKTsKLSAgICAgICAgICAgIHF0ZGVtdXgtPmNlbmNfYXV4X2luZm9fc2l6ZXMgPSBOVUxMOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHRmZHRfbm9kZSA9Ci0gICAgICAgIHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsICh0cmFmX25vZGUsIEZPVVJDQ190ZmR0LAotICAgICAgICAmdGZkdF9kYXRhKTsKLSAgICBpZiAodGZkdF9ub2RlKSB7Ci0gICAgICAvKiBXZSdsbCB1c2UgZGVjb2RlX3RpbWUgdG8gaW50ZXJwb2xhdGUgdGltZXN0YW1wcwotICAgICAgICogaW4gY2FzZSB0aGUgaW5wdXQgdGltZXN0YW1wcyBhcmUgbWlzc2luZyAqLwotICAgICAgcXRkZW11eF9wYXJzZV90ZmR0IChxdGRlbXV4LCAmdGZkdF9kYXRhLCAmZGVjb2RlX3RpbWUpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZGVjb2RlIHRpbWUgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiAoJSIgR1NUX1RJTUVfRk9STUFUICIpIiwgZGVjb2RlX3RpbWUsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKHN0cmVhbSwgZGVjb2RlX3RpbWUpKSk7Ci0KLSAgICAgIC8qIERpc2NhcmQgdGhlIGZyYWdtZW50IGJ1ZmZlciB0aW1lc3RhbXAgaW5mbyB0byBhdm9pZCB1c2luZyBpdC4KLSAgICAgICAqIFJlbHkgb24gdGZkdCBpbnN0ZWFkIGFzIGl0IGlzIG1vcmUgYWNjdXJhdGUgdGhhbiB0aGUgdGltZXN0YW1wCi0gICAgICAgKiB0aGF0IGlzIGZldGNoZWQgZnJvbSBhIG1hbmlmZXN0L3BsYXlsaXN0IGFuZCBpcyB1c3VhbGx5Ci0gICAgICAgKiBsZXNzIGFjY3VyYXRlLiAqLwotICAgICAgcXRkZW11eC0+ZnJhZ21lbnRfc3RhcnQgPSAtMTsKLSAgICB9Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIXN0cmVhbSkpIHsKLSAgICAgIC8qIHdlIGxvc3QgdHJhY2sgb2Ygb2Zmc2V0LCB3ZSdsbCBuZWVkIHRvIHJlZ2FpbiBpdCwKLSAgICAgICAqIGJ1dCBjYW4gZGVsYXkgY29tcGxhaW5pbmcgdW50aWwgbGF0ZXIgb3IgYXZvaWQgZG9pbmcgc28gYWx0b2dldGhlciAqLwotICAgICAgYmFzZV9vZmZzZXQgPSAtMjsKLSAgICAgIGdvdG8gbmV4dDsKLSAgICB9Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGJhc2Vfb2Zmc2V0IDwgLTEpKQotICAgICAgZ290byBsb3N0X29mZnNldDsKLQotICAgIGlmIChxdGRlbXV4LT51cHN0cmVhbV9mb3JtYXRfaXNfdGltZSkKLSAgICAgIGdzdF9xdGRlbXV4X3N0cmVhbV9mbHVzaF9zYW1wbGVzX2RhdGEgKHF0ZGVtdXgsIHN0cmVhbSk7Ci0KLSAgICAvKiBpbml0aWFsaXNlIG1vb2Ygc2FtcGxlIGRhdGEgKi8KLSAgICBzdHJlYW0tPm5fc2FtcGxlc19tb29mID0gMDsKLSAgICBzdHJlYW0tPmR1cmF0aW9uX2xhc3RfbW9vZiA9IHN0cmVhbS0+ZHVyYXRpb25fbW9vZjsKLSAgICBzdHJlYW0tPmR1cmF0aW9uX21vb2YgPSAwOwotCi0gICAgLyogVHJhY2sgUnVuIG5vZGUgKi8KLSAgICB0cnVuX25vZGUgPQotICAgICAgICBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGVfZnVsbCAodHJhZl9ub2RlLCBGT1VSQ0NfdHJ1biwKLSAgICAgICAgJnRydW5fZGF0YSk7Ci0gICAgd2hpbGUgKHRydW5fbm9kZSkgewotICAgICAgcXRkZW11eF9wYXJzZV90cnVuIChxdGRlbXV4LCAmdHJ1bl9kYXRhLCBzdHJlYW0sCi0gICAgICAgICAgZHNfZHVyYXRpb24sIGRzX3NpemUsIGRzX2ZsYWdzLCBtb29mX29mZnNldCwgbGVuZ3RoLCAmYmFzZV9vZmZzZXQsCi0gICAgICAgICAgJnJ1bm5pbmdfb2Zmc2V0LCBkZWNvZGVfdGltZSk7Ci0gICAgICAvKiBpdGVyYXRlIGFsbCBzaWJsaW5ncyAqLwotICAgICAgdHJ1bl9ub2RlID0gcXRkZW11eF90cmVlX2dldF9zaWJsaW5nX2J5X3R5cGVfZnVsbCAodHJ1bl9ub2RlLCBGT1VSQ0NfdHJ1biwKLSAgICAgICAgICAmdHJ1bl9kYXRhKTsKLSAgICB9Ci0KLSAgICB1dWlkX25vZGUgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHRyYWZfbm9kZSwgRk9VUkNDX3V1aWQpOwotICAgIGlmICh1dWlkX25vZGUpIHsKLSAgICAgIGd1aW50OCAqdXVpZF9idWZmZXIgPSAoZ3VpbnQ4ICopIHV1aWRfbm9kZS0+ZGF0YTsKLSAgICAgIGd1aW50MzIgYm94X2xlbmd0aCA9IFFUX1VJTlQzMiAodXVpZF9idWZmZXIpOwotCi0gICAgICBxdGRlbXV4X3BhcnNlX3V1aWQgKHF0ZGVtdXgsIHV1aWRfYnVmZmVyLCBib3hfbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvKiBpZiBubyBuZXcgYmFzZV9vZmZzZXQgcHJvdmlkZWQgZm9yIG5leHQgdHJhZiwKLSAgICAgKiBiYXNlIGlzIGVuZCBvZiBjdXJyZW50IHRyYWYgKi8KLSAgICBiYXNlX29mZnNldCA9IHJ1bm5pbmdfb2Zmc2V0OwotICAgIHJ1bm5pbmdfb2Zmc2V0ID0gLTE7Ci0KLSAgICBpZiAoc3RyZWFtLT5uX3NhbXBsZXNfbW9vZiAmJiBzdHJlYW0tPmR1cmF0aW9uX21vb2YpCi0gICAgICBzdHJlYW0tPm5ld19jYXBzID0gVFJVRTsKLQotICBuZXh0OgotICAgIC8qIGl0ZXJhdGUgYWxsIHNpYmxpbmdzICovCi0gICAgdHJhZl9ub2RlID0gcXRkZW11eF90cmVlX2dldF9zaWJsaW5nX2J5X3R5cGUgKHRyYWZfbm9kZSwgRk9VUkNDX3RyYWYpOwotICB9Ci0KLSAgLyogcGFyc2UgYW55IHByb3RlY3Rpb24gc3lzdGVtIGluZm8gKi8KLSAgcHNzaF9ub2RlID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChtb29mX25vZGUsIEZPVVJDQ19wc3NoKTsKLSAgd2hpbGUgKHBzc2hfbm9kZSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiUGFyc2luZyBwc3NoIGJveC4iKTsKLSAgICBxdGRlbXV4X3BhcnNlX3Bzc2ggKHF0ZGVtdXgsIHBzc2hfbm9kZSk7Ci0gICAgcHNzaF9ub2RlID0gcXRkZW11eF90cmVlX2dldF9zaWJsaW5nX2J5X3R5cGUgKHBzc2hfbm9kZSwgRk9VUkNDX3Bzc2gpOwotICB9Ci0KLSAgZ19ub2RlX2Rlc3Ryb3kgKG1vb2Zfbm9kZSk7Ci0gIHJldHVybiBUUlVFOwotCi1taXNzaW5nX3RmaGQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAibWlzc2luZyB0ZmhkIGJveCIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotbWlzc2luZ19tZmhkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIk1pc3NpbmcgbWZoZCBib3giKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLWxvc3Rfb2Zmc2V0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImxvc3Qgb2Zmc2V0Iik7Ci0gICAgZ290byBmYWlsOwotICB9Ci1mYWlsOgotICB7Ci0gICAgZ19ub2RlX2Rlc3Ryb3kgKG1vb2Zfbm9kZSk7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0ZGVtdXgsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgIChfKCJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iKSksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLSNpZiAwCi0vKiBtaWdodCBiZSB1c2VkIGlmIHNvbWUgZGF5IHdlIGFjdHVhbGx5IHVzZSBtZnJhICYgY28KLSAqIGZvciByYW5kb20gYWNjZXNzIHRvIGZyYWdtZW50cywKLSAqIGJ1dCB0aGF0IHdpbGwgcmVxdWlyZSBxdWl0ZSBzb21lIG1vZGlmaWNhdGlvbnMgYW5kIG11Y2ggbGVzcyByZWx5aW5nCi0gKiBvbiBhIHNhbXBsZSBhcnJheSAqLwotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV90ZnJhIChHc3RRVERlbXV4ICogcXRkZW11eCwgR05vZGUgKiB0ZnJhX25vZGUpCi17Ci0gIFF0RGVtdXhTdHJlYW0gKnN0cmVhbTsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MsIHRyYWNrX2lkLCBsZW4sIG51bV9lbnRyaWVzLCBpOwotICBndWludCB2YWx1ZV9zaXplLCB0cmFmX3NpemUsIHRydW5fc2l6ZSwgc2FtcGxlX3NpemU7Ci0gIGd1aW50NjQgdGltZSA9IDAsIG1vb2Zfb2Zmc2V0ID0gMDsKLSNpZiAwCi0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0jZW5kaWYKLSAgR3N0Qnl0ZVJlYWRlciB0ZnJhOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmdGZyYSwgdGZyYV9ub2RlLT5kYXRhLCBRVF9VSU5UMzIgKHRmcmFfbm9kZS0+ZGF0YSkpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZ0ZnJhLCA4KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnRmcmEsICZ2ZXJfZmxhZ3MpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmdGZyYSwgJnRyYWNrX2lkKQotICAgICAgfHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmdGZyYSwgJmxlbikKLSAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnRmcmEsICZudW1fZW50cmllcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXJzaW5nIHRmcmEgYm94IGZvciB0cmFjayBpZCAldSIsIHRyYWNrX2lkKTsKLQotICBzdHJlYW0gPSBxdGRlbXV4X2ZpbmRfc3RyZWFtIChxdGRlbXV4LCB0cmFja19pZCk7Ci0gIGlmIChzdHJlYW0gPT0gTlVMTCkKLSAgICBnb3RvIHVua25vd25fdHJhY2tpZDsKLQotICB2YWx1ZV9zaXplID0gKCh2ZXJfZmxhZ3MgPj4gMjQpID09IDEpID8gc2l6ZW9mIChndWludDY0KSA6IHNpemVvZiAoZ3VpbnQzMik7Ci0gIHNhbXBsZV9zaXplID0gKGxlbiAmIDMpICsgMTsKLSAgdHJ1bl9zaXplID0gKChsZW4gJiAxMikgPj4gMikgKyAxOwotICB0cmFmX3NpemUgPSAoKGxlbiAmIDQ4KSA+PiA0KSArIDE7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIiV1IGVudHJpZXMsIHNpemVzOiB2YWx1ZSAldSwgdHJhZiAldSwgdHJ1biAldSwgIgotICAgICAgInNhbXBsZSAldSIsIG51bV9lbnRyaWVzLCB2YWx1ZV9zaXplLCB0cmFmX3NpemUsIHRydW5fc2l6ZSwgc2FtcGxlX3NpemUpOwotCi0gIGlmIChudW1fZW50cmllcyA9PSAwKQotICAgIGdvdG8gbm9fc2FtcGxlczsKLQotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19jaHVua3MgKCZ0ZnJhLCBudW1fZW50cmllcywKLSAgICAgICAgICB2YWx1ZV9zaXplICsgdmFsdWVfc2l6ZSArIHRyYWZfc2l6ZSArIHRydW5fc2l6ZSArIHNhbXBsZV9zaXplKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICBnX2ZyZWUgKHN0cmVhbS0+cmFfZW50cmllcyk7Ci0gIHN0cmVhbS0+cmFfZW50cmllcyA9IGdfbmV3IChRdERlbXV4UmFuZG9tQWNjZXNzRW50cnksIG51bV9lbnRyaWVzKTsKLSAgc3RyZWFtLT5uX3JhX2VudHJpZXMgPSBudW1fZW50cmllczsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgewotICAgIHF0X2F0b21fcGFyc2VyX2dldF9vZmZzZXQgKCZ0ZnJhLCB2YWx1ZV9zaXplLCAmdGltZSk7Ci0gICAgcXRfYXRvbV9wYXJzZXJfZ2V0X29mZnNldCAoJnRmcmEsIHZhbHVlX3NpemUsICZtb29mX29mZnNldCk7Ci0gICAgcXRfYXRvbV9wYXJzZXJfZ2V0X3VpbnRfd2l0aF9zaXplX3VuY2hlY2tlZCAoJnRmcmEsIHRyYWZfc2l6ZSk7Ci0gICAgcXRfYXRvbV9wYXJzZXJfZ2V0X3VpbnRfd2l0aF9zaXplX3VuY2hlY2tlZCAoJnRmcmEsIHRydW5fc2l6ZSk7Ci0gICAgcXRfYXRvbV9wYXJzZXJfZ2V0X3VpbnRfd2l0aF9zaXplX3VuY2hlY2tlZCAoJnRmcmEsIHNhbXBsZV9zaXplKTsKLQotICAgIHRpbWUgPSBRVFNUUkVBTVRJTUVfVE9fR1NUVElNRSAoc3RyZWFtLCB0aW1lKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiZnJhZ21lbnQgdGltZTogJSIgR1NUX1RJTUVfRk9STUFUICIsICIKLSAgICAgICAgIiBtb29mX29mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZSksIG1vb2Zfb2Zmc2V0KTsKLQotICAgIHN0cmVhbS0+cmFfZW50cmllc1tpXS50cyA9IHRpbWU7Ci0gICAgc3RyZWFtLT5yYV9lbnRyaWVzW2ldLm1vb2Zfb2Zmc2V0ID0gbW9vZl9vZmZzZXQ7Ci0KLSAgICAvKiBkb24ndCB3YW50IHRvIGdvIHRocm91Z2ggdGhlIGVudGlyZSBmaWxlIGFuZCByZWFkIGFsbCBtb29mcyBhdCBzdGFydHVwICovCi0jaWYgMAotICAgIHJldCA9IGdzdF9xdGRlbXV4X3B1bGxfYXRvbSAocXRkZW11eCwgbW9vZl9vZmZzZXQsIDAsICZidWYpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgICBxdGRlbXV4X3BhcnNlX21vb2YgKHF0ZGVtdXgsIEdTVF9CVUZGRVJfREFUQSAoYnVmKSwgR1NUX0JVRkZFUl9TSVpFIChidWYpLAotICAgICAgICBtb29mX29mZnNldCwgc3RyZWFtKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotI2VuZGlmCi0gIH0KLQotICBjaGVja191cGRhdGVfZHVyYXRpb24gKHF0ZGVtdXgsIHRpbWUpOwotCi0gIHJldHVybiBUUlVFOwotCi0vKiBFUlJPUlMgKi8KLXVua25vd25fdHJhY2tpZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIkNvdWxkbid0IGZpbmQgc3RyZWFtIGZvciB0cmFjayAldSIsIHRyYWNrX2lkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNvcnJ1cHRfZmlsZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgImJyb2tlbiB0cmFmIGJveCwgaWdub3JpbmciKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3NhbXBsZXM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJzdHJlYW0gaGFzIG5vIHNhbXBsZXMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1xdGRlbXV4X3B1bGxfbWZyb19tZnJhIChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgR3N0TWFwSW5mbyBtZnJvX21hcCA9IEdTVF9NQVBfSU5GT19JTklUOwotICBHc3RNYXBJbmZvIG1mcmFfbWFwID0gR1NUX01BUF9JTkZPX0lOSVQ7Ci0gIEdzdEJ1ZmZlciAqbWZybyA9IE5VTEwsICptZnJhID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiBmbG93OwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgR05vZGUgKm1mcmFfbm9kZSwgKnRmcmFfbm9kZTsKLSAgZ3VpbnQ2NCBtZnJhX29mZnNldCA9IDA7Ci0gIGd1aW50MzIgZm91cmNjLCBtZnJhX3NpemU7Ci0gIGdpbnQ2NCBsZW47Ci0KLSAgLyogcXVlcnkgdXBzdHJlYW0gc2l6ZSBpbiBieXRlcyAqLwotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAocXRkZW11eC0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywgJmxlbikpCi0gICAgZ290byBzaXplX3F1ZXJ5X2ZhaWxlZDsKLQotICAvKiBtZnJvIGJveCBzaG91bGQgYmUgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBmaWxlICovCi0gIGZsb3cgPSBnc3RfcXRkZW11eF9wdWxsX2F0b20gKHF0ZGVtdXgsIGxlbiAtIDE2LCAxNiwgJm1mcm8pOwotICBpZiAoZmxvdyAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIGV4aXQ7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG1mcm8sICZtZnJvX21hcCwgR1NUX01BUF9SRUFEKTsKLQotICBmb3VyY2MgPSBRVF9GT1VSQ0MgKG1mcm9fbWFwLmRhdGEgKyA0KTsKLSAgaWYgKGZvdXJjYyAhPSBGT1VSQ0NfbWZybykKLSAgICBnb3RvIGV4aXQ7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiRm91bmQgbWZybyBib3giKTsKLSAgaWYgKG1mcm9fbWFwLnNpemUgPCAxNikKLSAgICBnb3RvIGludmFsaWRfbWZyb19zaXplOwotCi0gIG1mcmFfc2l6ZSA9IFFUX1VJTlQzMiAobWZyb19tYXAuZGF0YSArIDEyKTsKLSAgaWYgKG1mcmFfc2l6ZSA+PSBsZW4pCi0gICAgZ290byBpbnZhbGlkX21mcmFfc2l6ZTsKLQotICBtZnJhX29mZnNldCA9IGxlbiAtIG1mcmFfc2l6ZTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJtZnJhIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBzaXplICV1IiwKLSAgICAgIG1mcmFfb2Zmc2V0LCBtZnJhX3NpemUpOwotCi0gIC8qIG5vdyBnZXQgYW5kIHBhcnNlIG1mcmEgYm94ICovCi0gIGZsb3cgPSBnc3RfcXRkZW11eF9wdWxsX2F0b20gKHF0ZGVtdXgsIG1mcmFfb2Zmc2V0LCBtZnJhX3NpemUsICZtZnJhKTsKLSAgaWYgKGZsb3cgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBicm9rZW5fZmlsZTsKLQotICBnc3RfYnVmZmVyX21hcCAobWZyYSwgJm1mcmFfbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIG1mcmFfbm9kZSA9IGdfbm9kZV9uZXcgKChndWludDggKikgbWZyYV9tYXAuZGF0YSk7Ci0gIHF0ZGVtdXhfcGFyc2Vfbm9kZSAocXRkZW11eCwgbWZyYV9ub2RlLCBtZnJhX21hcC5kYXRhLCBtZnJhX21hcC5zaXplKTsKLQotICB0ZnJhX25vZGUgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG1mcmFfbm9kZSwgRk9VUkNDX3RmcmEpOwotCi0gIHdoaWxlICh0ZnJhX25vZGUpIHsKLSAgICBxdGRlbXV4X3BhcnNlX3RmcmEgKHF0ZGVtdXgsIHRmcmFfbm9kZSk7Ci0gICAgLyogaXRlcmF0ZSBhbGwgc2libGluZ3MgKi8KLSAgICB0ZnJhX25vZGUgPSBxdGRlbXV4X3RyZWVfZ2V0X3NpYmxpbmdfYnlfdHlwZSAodGZyYV9ub2RlLCBGT1VSQ0NfdGZyYSk7Ci0gIH0KLSAgZ19ub2RlX2Rlc3Ryb3kgKG1mcmFfbm9kZSk7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAicGFyc2VkIG1vdmllIGZyYWdtZW50IHJhbmRvbSBhY2Nlc3MgYm94IChtZnJhKSIpOwotICByZXQgPSBUUlVFOwotCi1leGl0OgotCi0gIGlmIChtZnJvKSB7Ci0gICAgaWYgKG1mcm9fbWFwLm1lbW9yeSAhPSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobWZybywgJm1mcm9fbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChtZnJvKTsKLSAgfQotICBpZiAobWZyYSkgewotICAgIGlmIChtZnJhX21hcC5tZW1vcnkgIT0gTlVMTCkKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG1mcmEsICZtZnJhX21hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAobWZyYSk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLQotLyogRVJST1JTICovCi1zaXplX3F1ZXJ5X2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgImNvdWxkIG5vdCBxdWVyeSB1cHN0cmVhbSBzaXplIik7Ci0gICAgZ290byBleGl0OwotICB9Ci1pbnZhbGlkX21mcm9fc2l6ZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIm1mcm8gc2l6ZSBpcyB0b28gc21hbGwiKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLWludmFsaWRfbWZyYV9zaXplOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAibWZyYV9zaXplIGluIG1mcm8gYm94IGlzIGludmFsaWQiKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLWJyb2tlbl9maWxlOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiYm9ndXMgbWZyYSBvZmZzZXQgb3Igc2l6ZSwgYnJva2VuIGZpbGUiKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50NjQKLWFkZF9vZmZzZXQgKGd1aW50NjQgb2Zmc2V0LCBndWludDY0IGFkdmFuY2UpCi17Ci0gIC8qIEF2b2lkIDY0LWJpdCBvdmVyZmxvdyBieSBjbGFtcGluZyAqLwotICBpZiAob2Zmc2V0ID4gR19NQVhVSU5UNjQgLSBhZHZhbmNlKQotICAgIHJldHVybiBHX01BWFVJTlQ2NDsKLSAgcmV0dXJuIG9mZnNldCArIGFkdmFuY2U7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRkZW11eF9sb29wX3N0YXRlX2hlYWRlciAoR3N0UVREZW11eCAqIHF0ZGVtdXgpCi17Ci0gIGd1aW50NjQgbGVuZ3RoID0gMDsKLSAgZ3VpbnQzMiBmb3VyY2MgPSAwOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50NjQgY3VyX29mZnNldCA9IHF0ZGVtdXgtPm9mZnNldDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChxdGRlbXV4LT5zaW5rcGFkLCBjdXJfb2Zmc2V0LCAxNiwgJmJ1Zik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gYmVhY2g7Ci0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGlmIChHX0xJS0VMWSAobWFwLnNpemUgPj0gOCkpCi0gICAgZXh0cmFjdF9pbml0aWFsX2xlbmd0aF9hbmRfZm91cmNjIChtYXAuZGF0YSwgbWFwLnNpemUsICZsZW5ndGgsICZmb3VyY2MpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIC8qIG1heWJlIHdlIGFscmVhZHkgZ290IG1vc3Qgd2UgbmVlZGVkLCBzbyBvbmx5IGNvbnNpZGVyIHRoaXMgZW9mICovCi0gIGlmIChHX1VOTElLRUxZIChsZW5ndGggPT0gMCkpIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChxdGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAoXygiSW52YWxpZCBhdG9tIHNpemUuIikpLAotICAgICAgICAoIkhlYWRlciBhdG9tICclIiBHU1RfRk9VUkNDX0ZPUk1BVCAiJyBoYXMgZW1wdHkgbGVuZ3RoIiwKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSkpOwotICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICBjYXNlIEZPVVJDQ19tb29mOgotICAgICAgLyogcmVjb3JkIGZvciBsYXRlciBwYXJzaW5nIHdoZW4gbmVlZGVkICovCi0gICAgICBpZiAoIXF0ZGVtdXgtPm1vb2Zfb2Zmc2V0KSB7Ci0gICAgICAgIHF0ZGVtdXgtPm1vb2Zfb2Zmc2V0ID0gcXRkZW11eC0+b2Zmc2V0OwotICAgICAgfQotICAgICAgaWYgKHF0ZGVtdXhfcHVsbF9tZnJvX21mcmEgKHF0ZGVtdXgpKSB7Ci0gICAgICAgIC8qIEZJWE1FICovCi0gICAgICB9IGVsc2UgewotICAgICAgICBxdGRlbXV4LT5vZmZzZXQgKz0gbGVuZ3RoOyAgICAgIC8qIHNraXAgbW9vZiBhbmQga2VlcCBnb2luZyAqLwotICAgICAgfQotICAgICAgaWYgKHF0ZGVtdXgtPmdvdF9tb292KSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAocXRkZW11eCwgIm1vb2YgaGVhZGVyLCBnb3QgbW9vdiwgZG9uZSB3aXRoIGhlYWRlcnMiKTsKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfbWRhdDoKLSAgICBjYXNlIEZPVVJDQ19mcmVlOgotICAgIGNhc2UgRk9VUkNDX3dpZGU6Ci0gICAgY2FzZSBGT1VSQ0NfUElDVDoKLSAgICBjYXNlIEZPVVJDQ19wbm90OgotICAgIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICJza2lwcGluZyBhdG9tICclIiBHU1RfRk9VUkNDX0ZPUk1BVCAiJyBhdCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgY3VyX29mZnNldCk7Ci0gICAgICBxdGRlbXV4LT5vZmZzZXQgPSBhZGRfb2Zmc2V0IChxdGRlbXV4LT5vZmZzZXQsIGxlbmd0aCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGT1VSQ0NfbW9vdjoKLSAgICB7Ci0gICAgICBHc3RCdWZmZXIgKm1vb3YgPSBOVUxMOwotCi0gICAgICBpZiAocXRkZW11eC0+Z290X21vb3YpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIlNraXBwaW5nIG1vb3YgYXRvbSBhcyB3ZSBoYXZlIG9uZSBhbHJlYWR5Iik7Ci0gICAgICAgIHF0ZGVtdXgtPm9mZnNldCA9IGFkZF9vZmZzZXQgKHF0ZGVtdXgtPm9mZnNldCwgbGVuZ3RoKTsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLQotICAgICAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChxdGRlbXV4LT5zaW5rcGFkLCBjdXJfb2Zmc2V0LCBsZW5ndGgsICZtb292KTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAobW9vdiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICAgICAgaWYgKGxlbmd0aCAhPSBtYXAuc2l6ZSkgewotICAgICAgICAvKiBTb21lIGZpbGVzIGhhdmUgYSAnbW9vdicgYXRvbSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIHdoaWNoIGNvbnRhaW5zCi0gICAgICAgICAqIGEgdGVybWluYWwgJ2ZyZWUnIGF0b20gd2hlcmUgdGhlIGJvZHkgb2YgdGhlIGF0b20gaXMgbWlzc2luZy4KLSAgICAgICAgICogQ2hlY2sgZm9yLCBhbmQgcGVybWl0LCB0aGlzIHNwZWNpYWwgY2FzZS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChtYXAuc2l6ZSA+PSA4KSB7Ci0gICAgICAgICAgZ3VpbnQ4ICpmaW5hbF9kYXRhID0gbWFwLmRhdGEgKyAobWFwLnNpemUgLSA4KTsKLSAgICAgICAgICBndWludDMyIGZpbmFsX2xlbmd0aCA9IFFUX1VJTlQzMiAoZmluYWxfZGF0YSk7Ci0gICAgICAgICAgZ3VpbnQzMiBmaW5hbF9mb3VyY2MgPSBRVF9GT1VSQ0MgKGZpbmFsX2RhdGEgKyA0KTsKLQotICAgICAgICAgIGlmIChmaW5hbF9mb3VyY2MgPT0gRk9VUkNDX2ZyZWUKLSAgICAgICAgICAgICAgJiYgbWFwLnNpemUgKyBmaW5hbF9sZW5ndGggLSA4ID09IGxlbmd0aCkgewotICAgICAgICAgICAgLyogT2ssIHdlJ3ZlIGZvdW5kIHRoYXQgc3BlY2lhbCBjYXNlLiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgd2l0aAotICAgICAgICAgICAgICogdGhhdCBmcmVlIGF0b20gYWN0dWFsbHkgcHJlc2VudC4gKi8KLSAgICAgICAgICAgIEdzdEJ1ZmZlciAqbmV3bW9vdiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuZ3RoKTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAobmV3bW9vdiwgMCwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfbWVtc2V0IChuZXdtb292LCBtYXAuc2l6ZSwgMCwgZmluYWxfbGVuZ3RoIC0gOCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChtb292LCAmbWFwKTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG1vb3YpOwotICAgICAgICAgICAgbW9vdiA9IG5ld21vb3Y7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX21hcCAobW9vdiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGxlbmd0aCAhPSBtYXAuc2l6ZSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRkZW11eCwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgICAgIChfKCJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iKSksCi0gICAgICAgICAgICAoIldlIGdvdCBsZXNzIHRoYW4gZXhwZWN0ZWQgKHJlY2VpdmVkICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAgICAgICAgICAgIiwgd2FudGVkICV1LCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIG1hcC5zaXplLAotICAgICAgICAgICAgICAgIChndWludCkgbGVuZ3RoLCBjdXJfb2Zmc2V0KSk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG1vb3YsICZtYXApOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChtb292KTsKLSAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgICBxdGRlbXV4LT5vZmZzZXQgKz0gbGVuZ3RoOwotCi0gICAgICBxdGRlbXV4X3BhcnNlX21vb3YgKHF0ZGVtdXgsIG1hcC5kYXRhLCBsZW5ndGgpOwotICAgICAgcXRkZW11eF9ub2RlX2R1bXAgKHF0ZGVtdXgsIHF0ZGVtdXgtPm1vb3Zfbm9kZSk7Ci0KLSAgICAgIHF0ZGVtdXhfcGFyc2VfdHJlZSAocXRkZW11eCk7Ci0gICAgICBpZiAocXRkZW11eC0+bW9vdl9ub2RlX2NvbXByZXNzZWQpIHsKLSAgICAgICAgZ19ub2RlX2Rlc3Ryb3kgKHF0ZGVtdXgtPm1vb3Zfbm9kZV9jb21wcmVzc2VkKTsKLSAgICAgICAgZ19mcmVlIChxdGRlbXV4LT5tb292X25vZGUtPmRhdGEpOwotICAgICAgfQotICAgICAgcXRkZW11eC0+bW9vdl9ub2RlX2NvbXByZXNzZWQgPSBOVUxMOwotICAgICAgZ19ub2RlX2Rlc3Ryb3kgKHF0ZGVtdXgtPm1vb3Zfbm9kZSk7Ci0gICAgICBxdGRlbXV4LT5tb292X25vZGUgPSBOVUxMOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobW9vdiwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChtb292KTsKLSAgICAgIHF0ZGVtdXgtPmdvdF9tb292ID0gVFJVRTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRk9VUkNDX2Z0eXA6Ci0gICAgewotICAgICAgR3N0QnVmZmVyICpmdHlwID0gTlVMTDsKLQotICAgICAgLyogZXh0cmFjdCBtYWpvciBicmFuZDsgbWlnaHQgY29tZSBpbiBoYW5keSBmb3IgSVNPIHZzIFFUIGlzc3VlcyAqLwotICAgICAgcmV0ID0gZ3N0X3F0ZGVtdXhfcHVsbF9hdG9tIChxdGRlbXV4LCBjdXJfb2Zmc2V0LCBsZW5ndGgsICZmdHlwKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICBxdGRlbXV4LT5vZmZzZXQgKz0gbGVuZ3RoOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGZ0eXAsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBxdGRlbXV4X3BhcnNlX2Z0eXAgKHF0ZGVtdXgsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChmdHlwLCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGZ0eXApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRk9VUkNDX3V1aWQ6Ci0gICAgewotICAgICAgR3N0QnVmZmVyICp1dWlkID0gTlVMTDsKLQotICAgICAgLyogdXVpZCBhcmUgZXh0ZW5zaW9uIGF0b21zICovCi0gICAgICByZXQgPSBnc3RfcXRkZW11eF9wdWxsX2F0b20gKHF0ZGVtdXgsIGN1cl9vZmZzZXQsIGxlbmd0aCwgJnV1aWQpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIHF0ZGVtdXgtPm9mZnNldCArPSBsZW5ndGg7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAodXVpZCwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIHF0ZGVtdXhfcGFyc2VfdXVpZCAocXRkZW11eCwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHV1aWQsICZtYXApOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodXVpZCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGT1VSQ0Nfc2lkeDoKLSAgICB7Ci0gICAgICBHc3RCdWZmZXIgKnNpZHggPSBOVUxMOwotICAgICAgcmV0ID0gZ3N0X3F0ZGVtdXhfcHVsbF9hdG9tIChxdGRlbXV4LCBjdXJfb2Zmc2V0LCBsZW5ndGgsICZzaWR4KTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICBxdGRlbXV4LT5vZmZzZXQgKz0gbGVuZ3RoOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHNpZHgsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBxdGRlbXV4X3BhcnNlX3NpZHggKHF0ZGVtdXgsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChzaWR4LCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHNpZHgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgewotICAgICAgR3N0QnVmZmVyICp1bmtub3duID0gTlVMTDsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgInVua25vd24gJTA4eCAnJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIicgb2Ygc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiBhdCAlIiBHX0dVSU5UNjRfRk9STUFULCBmb3VyY2MsIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgbGVuZ3RoLAotICAgICAgICAgIGN1cl9vZmZzZXQpOwotICAgICAgcmV0ID0gZ3N0X3F0ZGVtdXhfcHVsbF9hdG9tIChxdGRlbXV4LCBjdXJfb2Zmc2V0LCBsZW5ndGgsICZ1bmtub3duKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAodW5rbm93biwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIEdTVF9NRU1EVU1QICgiVW5rbm93biB0YWciLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAodW5rbm93biwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmICh1bmtub3duKTsKLSAgICAgIHF0ZGVtdXgtPm9mZnNldCArPSBsZW5ndGg7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotYmVhY2g6Ci0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfRU9TICYmIChxdGRlbXV4LT5nb3RfbW9vdiB8fCBxdGRlbXV4LT5tZWRpYV9jYXBzKSkgewotICAgIC8qIGRpZ2VzdGVkIGFsbCBkYXRhLCBzaG93IHdoYXQgd2UgaGF2ZSAqLwotICAgIHF0ZGVtdXhfcHJlcGFyZV9zdHJlYW1zIChxdGRlbXV4KTsKLSAgICByZXQgPSBxdGRlbXV4X2V4cG9zZV9zdHJlYW1zIChxdGRlbXV4KTsKLQotICAgIHF0ZGVtdXgtPnN0YXRlID0gUVRERU1VWF9TVEFURV9NT1ZJRTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic3dpdGNoaW5nIHN0YXRlIHRvIFNUQVRFX01PVklFICglZCkiLAotICAgICAgICBxdGRlbXV4LT5zdGF0ZSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0vKiBTZWVrcyB0byB0aGUgcHJldmlvdXMga2V5ZnJhbWUgb2YgdGhlIGluZGV4ZWQgc3RyZWFtIGFuZAotICogYWxpZ25zIG90aGVyIHN0cmVhbXMgd2l0aCByZXNwZWN0IHRvIHRoZSBrZXlmcmFtZSB0aW1lc3RhbXAKLSAqIG9mIGluZGV4ZWQgc3RyZWFtLiBPbmx5IGNhbGxlZCBpbiBjYXNlIG9mIFJldmVyc2UgUGxheWJhY2sKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdGRlbXV4X3NlZWtfdG9fcHJldmlvdXNfa2V5ZnJhbWUgKEdzdFFURGVtdXggKiBxdGRlbXV4KQotewotICBndWludDggbiA9IDA7Ci0gIGd1aW50MzIgc2VnX2lkeCA9IDAsIGtfaW5kZXggPSAwOwotICBndWludDMyIHJlZl9zZWdfaWR4LCByZWZfa19pbmRleDsKLSAgR3N0Q2xvY2tUaW1lIGtfcG9zID0gMCwgbGFzdF9zdG9wID0gMDsKLSAgUXREZW11eFNlZ21lbnQgKnNlZyA9IE5VTEw7Ci0gIFF0RGVtdXhTdHJlYW0gKnJlZl9zdHIgPSBOVUxMOwotICBndWludDY0IHNlZ19tZWRpYV9zdGFydF9tb3Y7ICAvKiBzZWdtZW50IG1lZGlhIHN0YXJ0IHRpbWUgaW4gbW92IGZvcm1hdCAqLwotICBndWludDY0IHRhcmdldF90czsKLQotICAvKiBOb3cgd2UgY2hvb3NlIGFuIGFyYml0cmFyeSBzdHJlYW0sIGdldCB0aGUgcHJldmlvdXMga2V5ZnJhbWUgdGltZXN0YW1wCi0gICAqIGFuZCBmaW5hbGx5IGFsaWduIGFsbCB0aGUgb3RoZXIgc3RyZWFtcyBvbiB0aGF0IHRpbWVzdGFtcCB3aXRoIHRoZWlyCi0gICAqIHJlc3BlY3RpdmUga2V5ZnJhbWVzICovCi0gIGZvciAobiA9IDA7IG4gPCBxdGRlbXV4LT5uX3N0cmVhbXM7IG4rKykgewotICAgIFF0RGVtdXhTdHJlYW0gKnN0ciA9IHF0ZGVtdXgtPnN0cmVhbXNbbl07Ci0KLSAgICAvKiBObyBjYW5kaWRhdGUgeWV0LCB0YWtlIHRoZSBmaXJzdCBzdHJlYW0gKi8KLSAgICBpZiAoIXJlZl9zdHIpIHsKLSAgICAgIHJlZl9zdHIgPSBzdHI7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBTbyB0aGF0IHN0cmVhbSBoYXMgYSBzZWdtZW50LCB3ZSBwcmVmZXIgdmlkZW8gc3RyZWFtcyAqLwotICAgIGlmIChzdHItPnN1YnR5cGUgPT0gRk9VUkNDX3ZpZGUpIHsKLSAgICAgIHJlZl9zdHIgPSBzdHI7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoIXJlZl9zdHIpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImNvdWxkbid0IGZpbmQgYW55IHN0cmVhbSIpOwotICAgIGdvdG8gZW9zOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFyZWZfc3RyLT5mcm9tX3NhbXBsZSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicmVhY2hlZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIik7Ci0gICAgZ290byBlb3M7Ci0gIH0KLQotICAvKiBTbyB0aGF0IHN0cmVhbSBoYXMgYmVlbiBwbGF5aW5nIGZyb20gZnJvbV9zYW1wbGUgdG8gdG9fc2FtcGxlLiBXZSB3aWxsCi0gICAqIGdldCB0aGUgdGltZXN0YW1wIG9mIHRoZSBwcmV2aW91cyBzYW1wbGUgYW5kIHNlYXJjaCBmb3IgYSBrZXlmcmFtZSBiZWZvcmUKLSAgICogdGhhdC4gRm9yIGF1ZGlvIHN0cmVhbXMgd2UgZG8gYW4gYXJiaXRyYXJ5IGp1bXAgaW4gdGhlIHBhc3QgKDEwIHNhbXBsZXMpICovCi0gIGlmIChyZWZfc3RyLT5zdWJ0eXBlID09IEZPVVJDQ192aWRlKSB7Ci0gICAga19pbmRleCA9IGdzdF9xdGRlbXV4X2ZpbmRfa2V5ZnJhbWUgKHF0ZGVtdXgsIHJlZl9zdHIsCi0gICAgICAgIHJlZl9zdHItPmZyb21fc2FtcGxlIC0gMSk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKHJlZl9zdHItPmZyb21fc2FtcGxlID49IDEwKQotICAgICAga19pbmRleCA9IHJlZl9zdHItPmZyb21fc2FtcGxlIC0gMTA7Ci0gICAgZWxzZQotICAgICAga19pbmRleCA9IDA7Ci0gIH0KLQotICB0YXJnZXRfdHMgPQotICAgICAgcmVmX3N0ci0+c2FtcGxlc1trX2luZGV4XS50aW1lc3RhbXAgKwotICAgICAgcmVmX3N0ci0+c2FtcGxlc1trX2luZGV4XS5wdHNfb2Zmc2V0OwotCi0gIC8qIGdldCBjdXJyZW50IHNlZ21lbnQgZm9yIHRoYXQgc3RyZWFtICovCi0gIHNlZyA9ICZyZWZfc3RyLT5zZWdtZW50c1tyZWZfc3RyLT5zZWdtZW50X2luZGV4XTsKLSAgLyogVXNlIHNlZ21lbnQgc3RhcnQgaW4gb3JpZ2luYWwgdGltZXNjYWxlIGZvciBjb21wYXJpc29ucyAqLwotICBzZWdfbWVkaWFfc3RhcnRfbW92ID0gc2VnLT50cmFrX21lZGlhX3N0YXJ0OwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAia2V5ZnJhbWUgaW5kZXggJXUgdHMgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgIiBzZWcgc3RhcnQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiICUiIEdTVF9USU1FX0ZPUk1BVCAiXG4iLAotICAgICAga19pbmRleCwgdGFyZ2V0X3RzLCBzZWdfbWVkaWFfc3RhcnRfbW92LAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnLT5tZWRpYV9zdGFydCkpOwotCi0gIC8qIENyYXdsIGJhY2sgdGhyb3VnaCBzZWdtZW50cyB0byBmaW5kIHRoZSBvbmUgY29udGFpbmluZyB0aGlzIEkgZnJhbWUgKi8KLSAgd2hpbGUgKHRhcmdldF90cyA8IHNlZ19tZWRpYV9zdGFydF9tb3YpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAia2V5ZnJhbWUgcG9zaXRpb24gKHNhbXBsZSAldSkgaXMgb3V0IG9mIHNlZ21lbnQgJXUgIiAiIHRhcmdldCAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgc2VnIHN0YXJ0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGtfaW5kZXgsCi0gICAgICAgIHJlZl9zdHItPnNlZ21lbnRfaW5kZXgsIHRhcmdldF90cywgc2VnX21lZGlhX3N0YXJ0X21vdik7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIXJlZl9zdHItPnNlZ21lbnRfaW5kZXgpKSB7Ci0gICAgICAvKiBSZWFjaGVkIGZpcnN0IHNlZ21lbnQsIGxldCdzIGNvbnNpZGVyIGl0J3MgRU9TICovCi0gICAgICBnb3RvIGVvczsKLSAgICB9Ci0gICAgcmVmX3N0ci0+c2VnbWVudF9pbmRleC0tOwotICAgIHNlZyA9ICZyZWZfc3RyLT5zZWdtZW50c1tyZWZfc3RyLT5zZWdtZW50X2luZGV4XTsKLSAgICAvKiBVc2Ugc2VnbWVudCBzdGFydCBpbiBvcmlnaW5hbCB0aW1lc2NhbGUgZm9yIGNvbXBhcmlzb25zICovCi0gICAgc2VnX21lZGlhX3N0YXJ0X21vdiA9IHNlZy0+dHJha19tZWRpYV9zdGFydDsKLSAgfQotICAvKiBDYWxjdWxhdGUgdGltZSBwb3NpdGlvbiBvZiB0aGUga2V5ZnJhbWUgYW5kIHdoZXJlIHdlIHNob3VsZCBzdG9wICovCi0gIGtfcG9zID0KLSAgICAgIFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChyZWZfc3RyLAotICAgICAgdGFyZ2V0X3RzIC0gc2VnLT50cmFrX21lZGlhX3N0YXJ0KSArIHNlZy0+dGltZTsKLSAgbGFzdF9zdG9wID0KLSAgICAgIFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChyZWZfc3RyLAotICAgICAgcmVmX3N0ci0+c2FtcGxlc1tyZWZfc3RyLT5mcm9tX3NhbXBsZV0udGltZXN0YW1wIC0KLSAgICAgIHNlZy0+dHJha19tZWRpYV9zdGFydCkgKyBzZWctPnRpbWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInByZWZlcnJlZCBzdHJlYW0gcGxheWVkIGZyb20gc2FtcGxlICV1LCAiCi0gICAgICAibm93IGdvaW5nIHRvIHNhbXBsZSAldSAocHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsIHJlZl9zdHItPmZyb21fc2FtcGxlLAotICAgICAga19pbmRleCwgR1NUX1RJTUVfQVJHUyAoa19wb3MpKTsKLQotICAvKiBTZXQgbGFzdF9zdG9wIHdpdGggdGhlIGtleWZyYW1lIHRpbWVzdGFtcCB3ZSBwdXNoZWQgb2YgdGhhdCBzdHJlYW0gKi8KLSAgcXRkZW11eC0+c2VnbWVudC5wb3NpdGlvbiA9IGxhc3Rfc3RvcDsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImxhc3Rfc3RvcCBub3cgaXMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAobGFzdF9zdG9wKSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGxhc3Rfc3RvcCA8IHF0ZGVtdXgtPnNlZ21lbnQuc3RhcnQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInJlYWNoZWQgdGhlIGJlZ2lubmluZyBvZiBzZWdtZW50Iik7Ci0gICAgZ290byBlb3M7Ci0gIH0KLQotICByZWZfc2VnX2lkeCA9IHJlZl9zdHItPnNlZ21lbnRfaW5kZXg7Ci0gIHJlZl9rX2luZGV4ID0ga19pbmRleDsKLQotICAvKiBBbGlnbiB0aGVtIGFsbCBvbiB0aGlzICovCi0gIGZvciAobiA9IDA7IG4gPCBxdGRlbXV4LT5uX3N0cmVhbXM7IG4rKykgewotICAgIGd1aW50MzIgaW5kZXggPSAwOwotICAgIEdzdENsb2NrVGltZSBzZWdfdGltZSA9IDA7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyID0gcXRkZW11eC0+c3RyZWFtc1tuXTsKLQotICAgIC8qIGFsaWduaW5nIHJlZmVyZW5jZSBzdHJlYW0gYWdhaW4gbWlnaHQgbGVhZCB0byBiYWNraW5nIHVwIHRvIHlldCBhbm90aGVyCi0gICAgICoga2V5ZnJhbWUgKGR1ZSB0byB0aW1lc3RhbXAgcm91bmRpbmcgaXNzdWVzKSwKLSAgICAgKiBwb3RlbnRpYWxseSBwdXR0aW5nIG1vcmUgbG9hZCBvbiBkb3duc3RyZWFtOyBzbyBsZXQncyB0cnkgdG8gYXZvaWQgKi8KLSAgICBpZiAoc3RyID09IHJlZl9zdHIpIHsKLSAgICAgIHNlZ19pZHggPSByZWZfc2VnX2lkeDsKLSAgICAgIHNlZyA9ICZzdHItPnNlZ21lbnRzW3NlZ19pZHhdOwotICAgICAga19pbmRleCA9IHJlZl9rX2luZGV4OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInJlZmVyZW5jZSBzdHJlYW0gJWQgc2VnbWVudCAlZCwgIgotICAgICAgICAgICJzYW1wbGUgYXQgaW5kZXggJWQiLCBuLCByZWZfc3RyLT5zZWdtZW50X2luZGV4LCBrX2luZGV4KTsKLSAgICB9IGVsc2UgewotICAgICAgc2VnX2lkeCA9IGdzdF9xdGRlbXV4X2ZpbmRfc2VnbWVudCAocXRkZW11eCwgc3RyLCBrX3Bvcyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICJzdHJlYW0gJWQgYWxpZ24gc2VnbWVudCAlZCBmb3Iga2V5ZnJhbWUgcG9zICUiIEdTVF9USU1FX0ZPUk1BVCwgbiwKLSAgICAgICAgICBzZWdfaWR4LCBHU1RfVElNRV9BUkdTIChrX3BvcykpOwotCi0gICAgICAvKiBnZXQgc2VnbWVudCBhbmQgdGltZSBpbiB0aGUgc2VnbWVudCAqLwotICAgICAgc2VnID0gJnN0ci0+c2VnbWVudHNbc2VnX2lkeF07Ci0gICAgICBzZWdfdGltZSA9IGtfcG9zIC0gc2VnLT50aW1lOwotCi0gICAgICAvKiBnZXQgdGhlIG1lZGlhIHRpbWUgaW4gdGhlIHNlZ21lbnQuCi0gICAgICAgKiBObyBhZGp1c3RtZW50IGZvciBlbXB0eSAiZmlsbGVyIiBzZWdtZW50cyAqLwotICAgICAgaWYgKHNlZy0+bWVkaWFfc3RhcnQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgc2VnX3RpbWUgKz0gc2VnLT5tZWRpYV9zdGFydDsKLQotICAgICAgLyogZ2V0IHRoZSBpbmRleCBvZiB0aGUgc2FtcGxlIHdpdGggbWVkaWEgdGltZSAqLwotICAgICAgaW5kZXggPSBnc3RfcXRkZW11eF9maW5kX2luZGV4X2xpbmVhciAocXRkZW11eCwgc3RyLCBzZWdfdGltZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICJzdHJlYW0gJWQgc2FtcGxlIGZvciAlIiBHU1RfVElNRV9GT1JNQVQgIiBhdCAldSIsIG4sCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnX3RpbWUpLCBpbmRleCk7Ci0KLSAgICAgIC8qIGZpbmQgcHJldmlvdXMga2V5ZnJhbWUgKi8KLSAgICAgIGtfaW5kZXggPSBnc3RfcXRkZW11eF9maW5kX2tleWZyYW1lIChxdGRlbXV4LCBzdHIsIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvKiBSZW1lbWJlciB1bnRpbCB3aGVyZSB3ZSB3YW50IHRvIGdvICovCi0gICAgc3RyLT50b19zYW1wbGUgPSBzdHItPmZyb21fc2FtcGxlIC0gMTsKLSAgICAvKiBEZWZpbmUgb3VyIHRpbWUgcG9zaXRpb24gKi8KLSAgICB0YXJnZXRfdHMgPQotICAgICAgICBzdHItPnNhbXBsZXNba19pbmRleF0udGltZXN0YW1wICsgc3RyLT5zYW1wbGVzW2tfaW5kZXhdLnB0c19vZmZzZXQ7Ci0gICAgc3RyLT50aW1lX3Bvc2l0aW9uID0gUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKHN0ciwgdGFyZ2V0X3RzKSArIHNlZy0+dGltZTsKLSAgICBpZiAoc2VnLT5tZWRpYV9zdGFydCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgc3RyLT50aW1lX3Bvc2l0aW9uIC09IHNlZy0+bWVkaWFfc3RhcnQ7Ci0KLSAgICAvKiBOb3cgc2VlayBiYWNrIGluIHRpbWUgKi8KLSAgICBnc3RfcXRkZW11eF9tb3ZlX3N0cmVhbSAocXRkZW11eCwgc3RyLCBrX2luZGV4KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic3RyZWFtICVkIGtleWZyYW1lIGF0ICV1LCB0aW1lIHBvc2l0aW9uICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIHBsYXlpbmcgZnJvbSBzYW1wbGUgJXUgdG8gJXUiLCBuLCBrX2luZGV4LAotICAgICAgICBHU1RfVElNRV9BUkdTIChzdHItPnRpbWVfcG9zaXRpb24pLCBzdHItPmZyb21fc2FtcGxlLCBzdHItPnRvX3NhbXBsZSk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLWVvczoKLSAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLX0KLQotLyoKLSAqIEdldHMgdGhlIGN1cnJlbnQgcXQgc2VnbWVudCBzdGFydCwgc3RvcCBhbmQgcG9zaXRpb24gZm9yIHRoZQotICogZ2l2ZW4gdGltZSBvZmZzZXQuIFRoaXMgaXMgdXNlZCBpbiB1cGRhdGVfc2VnbWVudCgpCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9zdHJlYW1fc2VnbWVudF9nZXRfYm91bmRhcmllcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwgR3N0Q2xvY2tUaW1lIG9mZnNldCwKLSAgICBHc3RDbG9ja1RpbWUgKiBfc3RhcnQsIEdzdENsb2NrVGltZSAqIF9zdG9wLCBHc3RDbG9ja1RpbWUgKiBfdGltZSkKLXsKLSAgR3N0Q2xvY2tUaW1lIHNlZ190aW1lOwotICBHc3RDbG9ja1RpbWUgc3RhcnQsIHN0b3AsIHRpbWU7Ci0gIFF0RGVtdXhTZWdtZW50ICpzZWdtZW50OwotCi0gIHNlZ21lbnQgPSAmc3RyZWFtLT5zZWdtZW50c1tzdHJlYW0tPnNlZ21lbnRfaW5kZXhdOwotCi0gIC8qIGdldCB0aW1lIGluIHRoaXMgc2VnbWVudCAqLwotICBzZWdfdGltZSA9IChvZmZzZXQgLSBzZWdtZW50LT50aW1lKSAqIHNlZ21lbnQtPnJhdGU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAic2VnX3RpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnX3RpbWUpKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc2VnX3RpbWUgPiBzZWdtZW50LT5kdXJhdGlvbikpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3RyZWFtLT5wYWQsCi0gICAgICAgICJzZWdfdGltZSA+IHNlZ21lbnQtPmR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+ZHVyYXRpb24pKTsKLSAgICBzZWdfdGltZSA9IHNlZ21lbnQtPmR1cmF0aW9uOwotICB9Ci0KLSAgLyogcXRkZW11eC0+c2VnbWVudC5zdG9wIGlzIGluIG91dHNpZGUtdGltZS1yZWFsbSwgd2hlcmVhcwotICAgKiBzZWdtZW50LT5tZWRpYV9zdG9wIGlzIGluIHRyYWNrLXRpbWUtcmVhbG0uCi0gICAqCi0gICAqIEluIG9yZGVyIHRvIGNvbXBhcmUgdGhlIHR3bywgd2UgbmVlZCB0byBicmluZyBzZWdtZW50LnN0b3AKLSAgICogaW50byB0aGUgdHJhY2stdGltZS1yZWFsbQotICAgKgotICAgKiBGSVhNRSAtIGRvZXMgdGhpcyBjb21tZW50IHN0aWxsIGhvbGQ/IERvbid0IHNlZSBhbnkgY29udmVyc2lvbiBoZXJlICovCi0KLSAgc3RvcCA9IHF0ZGVtdXgtPnNlZ21lbnQuc3RvcDsKLSAgaWYgKHN0b3AgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBzdG9wID0gcXRkZW11eC0+c2VnbWVudC5kdXJhdGlvbjsKLSAgaWYgKHN0b3AgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBzdG9wID0gc2VnbWVudC0+bWVkaWFfc3RvcDsKLSAgZWxzZQotICAgIHN0b3AgPQotICAgICAgICBNSU4gKHNlZ21lbnQtPm1lZGlhX3N0b3AsIHN0b3AgLSBzZWdtZW50LT50aW1lICsgc2VnbWVudC0+bWVkaWFfc3RhcnQpOwotCi0gIGlmIChHX1VOTElLRUxZIChRVFNFR01FTlRfSVNfRU1QVFkgKHNlZ21lbnQpKSkgewotICAgIHN0YXJ0ID0gc2VnbWVudC0+dGltZSArIHNlZ190aW1lOwotICAgIHRpbWUgPSBvZmZzZXQ7Ci0gICAgc3RvcCA9IHN0YXJ0IC0gc2VnX3RpbWUgKyBzZWdtZW50LT5kdXJhdGlvbjsKLSAgfSBlbHNlIGlmIChxdGRlbXV4LT5zZWdtZW50LnJhdGUgPj0gMCkgewotICAgIHN0YXJ0ID0gTUlOIChzZWdtZW50LT5tZWRpYV9zdGFydCArIHNlZ190aW1lLCBzdG9wKTsKLSAgICB0aW1lID0gb2Zmc2V0OwotICB9IGVsc2UgewotICAgIGlmIChzZWdtZW50LT5tZWRpYV9zdGFydCA+PSBxdGRlbXV4LT5zZWdtZW50LnN0YXJ0KSB7Ci0gICAgICB0aW1lID0gc2VnbWVudC0+dGltZTsKLSAgICB9IGVsc2UgewotICAgICAgdGltZSA9IHNlZ21lbnQtPnRpbWUgKyAocXRkZW11eC0+c2VnbWVudC5zdGFydCAtIHNlZ21lbnQtPm1lZGlhX3N0YXJ0KTsKLSAgICB9Ci0KLSAgICBzdGFydCA9IE1BWCAoc2VnbWVudC0+bWVkaWFfc3RhcnQsIHF0ZGVtdXgtPnNlZ21lbnQuc3RhcnQpOwotICAgIHN0b3AgPSBNSU4gKHNlZ21lbnQtPm1lZGlhX3N0YXJ0ICsgc2VnX3RpbWUsIHN0b3ApOwotICB9Ci0KLSAgKl9zdGFydCA9IHN0YXJ0OwotICAqX3N0b3AgPSBzdG9wOwotICAqX3RpbWUgPSB0aW1lOwotfQotCi0vKgotICogVXBkYXRlcyB0aGUgcXQgc2VnbWVudCB1c2VkIGZvciB0aGUgc3RyZWFtIGFuZCBwdXNoZXMgYSBuZXcgc2VnbWVudCBldmVudAotICogZG93bnN0cmVhbSBvbiB0aGlzIHN0cmVhbSdzIHBhZC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcXRkZW11eF9zdHJlYW1fdXBkYXRlX3NlZ21lbnQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIGdpbnQgc2VnX2lkeCwgR3N0Q2xvY2tUaW1lIG9mZnNldCwgR3N0Q2xvY2tUaW1lICogX3N0YXJ0LAotICAgIEdzdENsb2NrVGltZSAqIF9zdG9wKQotewotICBRdERlbXV4U2VnbWVudCAqc2VnbWVudDsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0ID0gMCwgc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkUsIHRpbWUgPSAwOwotICBnZG91YmxlIHJhdGU7Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICAvKiB1cGRhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCAqLwotICBzdHJlYW0tPnNlZ21lbnRfaW5kZXggPSBzZWdfaWR4OwotCi0gIC8qIGdldCB0aGUgc2VnbWVudCAqLwotICBzZWdtZW50ID0gJnN0cmVhbS0+c2VnbWVudHNbc2VnX2lkeF07Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG9mZnNldCA8IHNlZ21lbnQtPnRpbWUpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzdHJlYW0tPnBhZCwgIm9mZnNldCA8IHNlZ21lbnQtPnRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT50aW1lKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogc2VnbWVudCBsaWVzIGJleW9uZCB0b3RhbCBpbmRpY2F0ZWQgZHVyYXRpb24gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHF0ZGVtdXgtPnNlZ21lbnQuZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgotICAgICAgICAgIHNlZ21lbnQtPnRpbWUgPiBxdGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3RyZWFtLT5wYWQsICJmaWxlIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiIDwgc2VnbWVudC0+dGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHF0ZGVtdXgtPnNlZ21lbnQuZHVyYXRpb24pLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT50aW1lKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZ3N0X3F0ZGVtdXhfc3RyZWFtX3NlZ21lbnRfZ2V0X2JvdW5kYXJpZXMgKHF0ZGVtdXgsIHN0cmVhbSwgb2Zmc2V0LAotICAgICAgJnN0YXJ0LCAmc3RvcCwgJnRpbWUpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAibmV3IHNlZ21lbnQgJWQgZnJvbSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgdG8gJSIgR1NUX1RJTUVfRk9STUFUICIsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULCBzZWdfaWR4LAotICAgICAgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLCBHU1RfVElNRV9BUkdTIChzdG9wKSwgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotCi0gIC8qIGNvbWJpbmUgZ2xvYmFsIHJhdGUgd2l0aCB0aGF0IG9mIHRoZSBzZWdtZW50ICovCi0gIHJhdGUgPSBzZWdtZW50LT5yYXRlICogcXRkZW11eC0+c2VnbWVudC5yYXRlOwotCi0gIC8qIENvcHkgZmxhZ3MgZnJvbSBtYWluIHNlZ21lbnQgKi8KLSAgc3RyZWFtLT5zZWdtZW50LmZsYWdzID0gcXRkZW11eC0+c2VnbWVudC5mbGFnczsKLQotICAvKiB1cGRhdGUgdGhlIHNlZ21lbnQgdmFsdWVzIHVzZWQgZm9yIGNsaXBwaW5nICovCi0gIHN0cmVhbS0+c2VnbWVudC5vZmZzZXQgPSBxdGRlbXV4LT5zZWdtZW50Lm9mZnNldDsKLSAgc3RyZWFtLT5zZWdtZW50LmJhc2UgPSBxdGRlbXV4LT5zZWdtZW50LmJhc2UgKyBzdHJlYW0tPmFjY3VtdWxhdGVkX2Jhc2U7Ci0gIHN0cmVhbS0+c2VnbWVudC5hcHBsaWVkX3JhdGUgPSBxdGRlbXV4LT5zZWdtZW50LmFwcGxpZWRfcmF0ZTsKLSAgc3RyZWFtLT5zZWdtZW50LnJhdGUgPSByYXRlOwotICBzdHJlYW0tPnNlZ21lbnQuc3RhcnQgPSBzdGFydCArIFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sCi0gICAgICBzdHJlYW0tPmNzbGdfc2hpZnQpOwotICBzdHJlYW0tPnNlZ21lbnQuc3RvcCA9IHN0b3AgKyBRVFNUUkVBTVRJTUVfVE9fR1NUVElNRSAoc3RyZWFtLAotICAgICAgc3RyZWFtLT5jc2xnX3NoaWZ0KTsKLSAgc3RyZWFtLT5zZWdtZW50LnRpbWUgPSB0aW1lOwotICBzdHJlYW0tPnNlZ21lbnQucG9zaXRpb24gPSBzdHJlYW0tPnNlZ21lbnQuc3RhcnQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3RyZWFtLT5wYWQsICJOZXcgc2VnbWVudDogJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgJnN0cmVhbS0+c2VnbWVudCk7Ci0KLSAgLyogbm93IHByZXBhcmUgYW5kIHNlbmQgdGhlIHNlZ21lbnQgKi8KLSAgaWYgKHN0cmVhbS0+cGFkKSB7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzdHJlYW0tPnNlZ21lbnQpOwotICAgIGlmIChxdGRlbXV4LT5zZWdtZW50X3NlcW51bSkgewotICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBxdGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgfQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5wYWQsIGV2ZW50KTsKLSAgICAvKiBhc3N1bWUgd2UgY2FuIHNlbmQgbW9yZSBkYXRhIG5vdyAqLwotICAgIEdTVF9QQURfTEFTVF9GTE9XX1JFVFVSTiAoc3RyZWFtLT5wYWQpID0gR1NUX0ZMT1dfT0s7Ci0gICAgLyogY2xlYXIgdG8gc2VuZCB0YWdzIG9uIHRoaXMgcGFkIG5vdyAqLwotICAgIGdzdF9xdGRlbXV4X3B1c2hfdGFncyAocXRkZW11eCwgc3RyZWFtKTsKLSAgfQotCi0gIGlmIChfc3RhcnQpCi0gICAgKl9zdGFydCA9IHN0YXJ0OwotICBpZiAoX3N0b3ApCi0gICAgKl9zdG9wID0gc3RvcDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogYWN0aXZhdGUgdGhlIGdpdmVuIHNlZ21lbnQgbnVtYmVyIEBzZWdfaWR4IG9mIEBzdHJlYW0gYXQgdGltZSBAb2Zmc2V0LgotICogQG9mZnNldCBpcyBhbiBhYnNvbHV0ZSBnbG9iYWwgcG9zaXRpb24gb3ZlciBhbGwgdGhlIHNlZ21lbnRzLgotICoKLSAqIFRoaXMgd2lsbCBwdXNoIG91dCBhIE5FV1NFR01FTlQgZXZlbnQgd2l0aCB0aGUgcmlnaHQgdmFsdWVzIGFuZAotICogcG9zaXRpb24gdGhlIHN0cmVhbSBpbmRleCB0byB0aGUgZmlyc3QgZGVjb2RhYmxlIHNhbXBsZSBiZWZvcmUKLSAqIEBvZmZzZXQuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfYWN0aXZhdGVfc2VnbWVudCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgZ3VpbnQzMiBzZWdfaWR4LCBHc3RDbG9ja1RpbWUgb2Zmc2V0KQotewotICBRdERlbXV4U2VnbWVudCAqc2VnbWVudDsKLSAgZ3VpbnQzMiBpbmRleCwga2ZfaW5kZXg7Ci0gIEdzdENsb2NrVGltZSBzdGFydCA9IDAsIHN0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIEdTVF9MT0dfT0JKRUNUIChzdHJlYW0tPnBhZCwgImFjdGl2YXRlIHNlZ21lbnQgJWQsIG9mZnNldCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBzZWdfaWR4LCBHU1RfVElNRV9BUkdTIChvZmZzZXQpKTsKLQotICBpZiAoIWdzdF9xdGRlbXV4X3N0cmVhbV91cGRhdGVfc2VnbWVudCAocXRkZW11eCwgc3RyZWFtLCBzZWdfaWR4LCBvZmZzZXQsCi0gICAgICAgICAgJnN0YXJ0LCAmc3RvcCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHNlZ21lbnQgPSAmc3RyZWFtLT5zZWdtZW50c1tzdHJlYW0tPnNlZ21lbnRfaW5kZXhdOwotCi0gIC8qIGluIHRoZSBmcmFnbWVudGVkIGNhc2UsIHdlIHBpY2sgYSBmcmFnbWVudCB0aGF0IHN0YXJ0cyBiZWZvcmUgb3VyCi0gICAqIGRlc2lyZWQgcG9zaXRpb24gYW5kIHJlbHkgb24gZG93bnN0cmVhbSB0byB3YWl0IGZvciBhIGtleWZyYW1lCi0gICAqIChGSVhNRTogZG9lc24ndCBzZWVtIHRvIHdvcmsgc28gd2VsbCB3aXRoIGlzbXYgYW5kIHdtdiwgYXMgbm8gcGFyc2VyOyB0aGUKLSAgICogdGZyYSBlbnRyaWVzIHRlbGxzIHVzIHdoaWNoIHRydW4vc2FtcGxlIHRoZSBrZXkgdW5pdCBpcyBpbiwgYnV0IHdlIGRvbid0Ci0gICAqIG1ha2UgdXNlIG9mIHRoaXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhdCB0aGUgbW9tZW50KSAqLwotICBpZiAocXRkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgIHN0cmVhbS0+dG9fc2FtcGxlID0gR19NQVhVSU5UMzI7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBXZSBkb24ndCBuZWVkIHRvIGxvb2sgZm9yIGEgc2FtcGxlIGluIHB1c2gtYmFzZWQgKi8KLSAgaWYgKCFxdGRlbXV4LT5wdWxsYmFzZWQpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogYW5kIG1vdmUgdG8gdGhlIGtleWZyYW1lIGJlZm9yZSB0aGUgaW5kaWNhdGVkIG1lZGlhIHRpbWUgb2YgdGhlCi0gICAqIHNlZ21lbnQgKi8KLSAgaWYgKEdfTElLRUxZICghUVRTRUdNRU5UX0lTX0VNUFRZIChzZWdtZW50KSkpIHsKLSAgICBpZiAocXRkZW11eC0+c2VnbWVudC5yYXRlID49IDApIHsKLSAgICAgIGluZGV4ID0gZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9saW5lYXIgKHF0ZGVtdXgsIHN0cmVhbSwgc3RhcnQpOwotICAgICAgc3RyZWFtLT50b19zYW1wbGUgPSBHX01BWFVJTlQzMjsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHN0cmVhbS0+cGFkLAotICAgICAgICAgICJtb3ZpbmcgZGF0YSBwb2ludGVyIHRvICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBpbmRleDogJXUsIHB0cyAlIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLCBpbmRleCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChRVFNBTVBMRV9QVFMgKHN0cmVhbSwgJnN0cmVhbS0+c2FtcGxlc1tpbmRleF0pKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGluZGV4ID0gZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9saW5lYXIgKHF0ZGVtdXgsIHN0cmVhbSwgc3RvcCk7Ci0gICAgICBzdHJlYW0tPnRvX3NhbXBsZSA9IGluZGV4OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3RyZWFtLT5wYWQsCi0gICAgICAgICAgIm1vdmluZyBkYXRhIHBvaW50ZXIgdG8gJSIgR1NUX1RJTUVfRk9STUFUICIsIGluZGV4OiAldSwgcHRzICUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdG9wKSwgaW5kZXgsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoUVRTQU1QTEVfUFRTIChzdHJlYW0sICZzdHJlYW0tPnNhbXBsZXNbaW5kZXhdKSkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzdHJlYW0tPnBhZCwgIk5vIG5lZWQgdG8gbG9vayBmb3Iga2V5ZnJhbWUsICIKLSAgICAgICAgInRoaXMgaXMgYW4gZW1wdHkgc2VnbWVudCIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogZ3N0X3F0ZGVtdXhfcGFyc2Vfc2FtcGxlICgpIGNhbGxlZCBmcm9tIGdzdF9xdGRlbXV4X2ZpbmRfaW5kZXhfbGluZWFyICgpCi0gICAqIGVuY291bnRlcmVkIGFuIGVycm9yIGFuZCBwcmludGVkIGEgbWVzc2FnZSBzbyB3ZSByZXR1cm4gYXBwcm9wcmlhdGVseSAqLwotICBpZiAoaW5kZXggPT0gLTEpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIHdlJ3JlIGF0IHRoZSByaWdodCBzcG90ICovCi0gIGlmIChpbmRleCA9PSBzdHJlYW0tPnNhbXBsZV9pbmRleCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHN0cmVhbS0+cGFkLCAid2UgYXJlIGF0IHRoZSByaWdodCBpbmRleCIpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogZmluZCBrZXlmcmFtZSBvZiB0aGUgdGFyZ2V0IGluZGV4ICovCi0gIGtmX2luZGV4ID0gZ3N0X3F0ZGVtdXhfZmluZF9rZXlmcmFtZSAocXRkZW11eCwgc3RyZWFtLCBpbmRleCk7Ci0KLS8qICpJTkRFTlQtT0ZGKiAqLwotLyogaW5kZW50IGRvZXMgc3R1cGlkIHN0dWZmIHdpdGggc3RyZWFtLT5zYW1wbGVzW10udGltZXN0YW1wICovCi0KLSAgLyogaWYgd2UgbW92ZSBmb3J3YXJkcywgd2UgZG9uJ3QgaGF2ZSB0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cwotICAgKiBrZXlmcmFtZSBzaW5jZSB3ZSBhbHJlYWR5IHNlbnQgdGhhdC4gV2UgY2FuIGFsc28ganVzdCBqdW1wIHRvCi0gICAqIHRoZSBrZXlmcmFtZSByaWdodCBiZWZvcmUgdGhlIHRhcmdldCBpbmRleCBpZiB0aGVyZSBpcyBvbmUuICovCi0gIGlmIChpbmRleCA+IHN0cmVhbS0+c2FtcGxlX2luZGV4KSB7Ci0gICAgLyogbW92aW5nIGZvcndhcmRzIGNoZWNrIGlmIHdlIG1vdmUgcGFzdCBhIGtleWZyYW1lICovCi0gICAgaWYgKGtmX2luZGV4ID4gc3RyZWFtLT5zYW1wbGVfaW5kZXgpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHN0cmVhbS0+cGFkLAotICAgICAgICAgICAibW92aW5nIGZvcndhcmRzIHRvIGtleWZyYW1lIGF0ICV1IChwdHMgJSIgR1NUX1RJTUVfRk9STUFUICIgZHRzICUiR1NUX1RJTUVfRk9STUFUIiApIiwga2ZfaW5kZXgsCi0gICAgICAgICAgIEdTVF9USU1FX0FSR1MgKFFUU0FNUExFX1BUUyhzdHJlYW0sICZzdHJlYW0tPnNhbXBsZXNba2ZfaW5kZXhdKSksCi0gICAgICAgICAgIEdTVF9USU1FX0FSR1MgKFFUU0FNUExFX0RUUyhzdHJlYW0sICZzdHJlYW0tPnNhbXBsZXNba2ZfaW5kZXhdKSkpOwotICAgICAgZ3N0X3F0ZGVtdXhfbW92ZV9zdHJlYW0gKHF0ZGVtdXgsIHN0cmVhbSwga2ZfaW5kZXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzdHJlYW0tPnBhZCwKLSAgICAgICAgICAibW92aW5nIGZvcndhcmRzLCBrZXlmcmFtZSBhdCAldSAocHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR0cyAlIkdTVF9USU1FX0ZPUk1BVCIgKSBhbHJlYWR5IHNlbnQiLCBrZl9pbmRleCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChRVFNBTVBMRV9QVFMgKHN0cmVhbSwgJnN0cmVhbS0+c2FtcGxlc1trZl9pbmRleF0pKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChRVFNBTVBMRV9EVFMgKHN0cmVhbSwgJnN0cmVhbS0+c2FtcGxlc1trZl9pbmRleF0pKSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHN0cmVhbS0+cGFkLAotICAgICAgICAibW92aW5nIGJhY2t3YXJkcyB0byBrZXlmcmFtZSBhdCAldSAocHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR0cyAlIkdTVF9USU1FX0ZPUk1BVCIgKSIsIGtmX2luZGV4LAotICAgICAgICBHU1RfVElNRV9BUkdTIChRVFNBTVBMRV9QVFMoc3RyZWFtLCAmc3RyZWFtLT5zYW1wbGVzW2tmX2luZGV4XSkpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChRVFNBTVBMRV9EVFMoc3RyZWFtLCAmc3RyZWFtLT5zYW1wbGVzW2tmX2luZGV4XSkpKTsKLSAgICBnc3RfcXRkZW11eF9tb3ZlX3N0cmVhbSAocXRkZW11eCwgc3RyZWFtLCBrZl9pbmRleCk7Ci0gIH0KLQotLyogKklOREVOVC1PTiogKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogcHJlcGFyZSB0byBnZXQgdGhlIGN1cnJlbnQgc2FtcGxlIG9mIEBzdHJlYW0sIGdldHRpbmcgZXNzZW50aWFsIHZhbHVlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBwcmVwYXJlIGFuZCBzZW5kIHRoZSBzZWdtZW50IHdoZW4gbmVlZGVkLgotICoKLSAqIFJldHVybiBGQUxTRSBpZiB0aGUgc3RyZWFtIGlzIEVPUy4KLSAqCi0gKiBQVUxMLUJBU0VECi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3F0ZGVtdXhfcHJlcGFyZV9jdXJyZW50X3NhbXBsZSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsCi0gICAgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwgZ2Jvb2xlYW4gKiBlbXB0eSwgZ3VpbnQ2NCAqIG9mZnNldCwgZ3VpbnQgKiBzaXplLAotICAgIEdzdENsb2NrVGltZSAqIGR0cywgR3N0Q2xvY2tUaW1lICogcHRzLCBHc3RDbG9ja1RpbWUgKiBkdXJhdGlvbiwKLSAgICBnYm9vbGVhbiAqIGtleWZyYW1lKQotewotICBRdERlbXV4U2FtcGxlICpzYW1wbGU7Ci0gIEdzdENsb2NrVGltZSB0aW1lX3Bvc2l0aW9uOwotICBndWludDMyIHNlZ19pZHg7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHN0cmVhbSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgdGltZV9wb3NpdGlvbiA9IHN0cmVhbS0+dGltZV9wb3NpdGlvbjsKLSAgaWYgKEdfVU5MSUtFTFkgKHRpbWVfcG9zaXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkpCi0gICAgZ290byBlb3M7Ci0KLSAgc2VnX2lkeCA9IHN0cmVhbS0+c2VnbWVudF9pbmRleDsKLSAgaWYgKEdfVU5MSUtFTFkgKHNlZ19pZHggPT0gLTEpKSB7Ci0gICAgLyogZmluZCBzZWdtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGltZV9wb3NpdGlvbiBpZiB3ZSBhcmUgbG9va2luZwotICAgICAqIGZvciBhIHNlZ21lbnQuICovCi0gICAgc2VnX2lkeCA9IGdzdF9xdGRlbXV4X2ZpbmRfc2VnbWVudCAocXRkZW11eCwgc3RyZWFtLCB0aW1lX3Bvc2l0aW9uKTsKLSAgfQotCi0gIC8qIGRpZmZlcmVudCBzZWdtZW50LCBhY3RpdmF0ZSBpdCwgc2FtcGxlX2luZGV4IHdpbGwgYmUgc2V0LiAqLwotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5zZWdtZW50X2luZGV4ICE9IHNlZ19pZHgpKQotICAgIGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQgKHF0ZGVtdXgsIHN0cmVhbSwgc2VnX2lkeCwgdGltZV9wb3NpdGlvbik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKFFUU0VHTUVOVF9JU19FTVBUWSAoJnN0cmVhbS0+c2VnbWVudHNbc3RyZWFtLT4KLSAgICAgICAgICAgICAgICAgIHNlZ21lbnRfaW5kZXhdKSkpIHsKLSAgICBRdERlbXV4U2VnbWVudCAqc2VnID0gJnN0cmVhbS0+c2VnbWVudHNbc3RyZWFtLT5zZWdtZW50X2luZGV4XTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiRW1wdHkgc2VnbWVudCBhY3RpdmF0ZWQsIgotICAgICAgICAiIHByZXBhcmUgZW1wdHkgc2FtcGxlIik7Ci0KLSAgICAqZW1wdHkgPSBUUlVFOwotICAgICpwdHMgPSAqZHRzID0gdGltZV9wb3NpdGlvbjsKLSAgICAqZHVyYXRpb24gPSBzZWctPmR1cmF0aW9uIC0gKHRpbWVfcG9zaXRpb24gLSBzZWctPnRpbWUpOwotCi0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAqZW1wdHkgPSBGQUxTRTsKLQotICBpZiAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPT0gLTEpCi0gICAgc3RyZWFtLT5zYW1wbGVfaW5kZXggPSAwOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAic2VnbWVudCBhY3RpdmUsIGluZGV4ID0gJXUgb2YgJXUiLAotICAgICAgc3RyZWFtLT5zYW1wbGVfaW5kZXgsIHN0cmVhbS0+bl9zYW1wbGVzKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPj0gc3RyZWFtLT5uX3NhbXBsZXMpKSB7Ci0gICAgaWYgKCFxdGRlbXV4LT5mcmFnbWVudGVkKQotICAgICAgZ290byBlb3M7Ci0KLSAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJvdXQgb2Ygc2FtcGxlcywgdHJ5aW5nIHRvIGFkZCBtb3JlIik7Ci0gICAgZG8gewotICAgICAgR3N0Rmxvd1JldHVybiBmbG93OwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHF0ZGVtdXgpOwotICAgICAgZmxvdyA9IHF0ZGVtdXhfYWRkX2ZyYWdtZW50ZWRfc2FtcGxlcyAocXRkZW11eCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRkZW11eCk7Ci0KLSAgICAgIGlmIChmbG93ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIGVvczsKLSAgICB9Ci0gICAgd2hpbGUgKHN0cmVhbS0+c2FtcGxlX2luZGV4ID49IHN0cmVhbS0+bl9zYW1wbGVzKTsKLSAgfQotCi0gIGlmICghcXRkZW11eF9wYXJzZV9zYW1wbGVzIChxdGRlbXV4LCBzdHJlYW0sIHN0cmVhbS0+c2FtcGxlX2luZGV4KSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiUGFyc2luZyBvZiBpbmRleCAldSBmYWlsZWQhIiwKLSAgICAgICAgc3RyZWFtLT5zYW1wbGVfaW5kZXgpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIG5vdyBnZXQgdGhlIGluZm8gZm9yIHRoZSBzYW1wbGUgd2UncmUgYXQgKi8KLSAgc2FtcGxlID0gJnN0cmVhbS0+c2FtcGxlc1tzdHJlYW0tPnNhbXBsZV9pbmRleF07Ci0KLSAgKmR0cyA9IFFUU0FNUExFX0RUUyAoc3RyZWFtLCBzYW1wbGUpOwotICAqcHRzID0gUVRTQU1QTEVfUFRTIChzdHJlYW0sIHNhbXBsZSk7Ci0gICpvZmZzZXQgPSBzYW1wbGUtPm9mZnNldDsKLSAgKnNpemUgPSBzYW1wbGUtPnNpemU7Ci0gICpkdXJhdGlvbiA9IFFUU0FNUExFX0RVUl9EVFMgKHN0cmVhbSwgc2FtcGxlLCAqZHRzKTsKLSAgKmtleWZyYW1lID0gUVRTQU1QTEVfS0VZRlJBTUUgKHN0cmVhbSwgc2FtcGxlKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBzcGVjaWFsIGNhc2VzICovCi1lb3M6Ci0gIHsKLSAgICBzdHJlYW0tPnRpbWVfcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBtb3ZlIHRvIHRoZSBuZXh0IHNhbXBsZSBpbiBAc3RyZWFtLgotICoKLSAqIE1vdmVzIHRvIHRoZSBuZXh0IHNlZ21lbnQgd2hlbiBuZWVkZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9hZHZhbmNlX3NhbXBsZSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIFF0RGVtdXhTYW1wbGUgKnNhbXBsZTsKLSAgUXREZW11eFNlZ21lbnQgKnNlZ21lbnQ7Ci0KLSAgLyogZ2V0IGN1cnJlbnQgc2VnbWVudCAqLwotICBzZWdtZW50ID0gJnN0cmVhbS0+c2VnbWVudHNbc3RyZWFtLT5zZWdtZW50X2luZGV4XTsKLQotICBpZiAoR19VTkxJS0VMWSAoUVRTRUdNRU5UX0lTX0VNUFRZIChzZWdtZW50KSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiRW1wdHkgc2VnbWVudCwgbm8gc2FtcGxlcyB0byBhZHZhbmNlIik7Ci0gICAgZ290byBuZXh0X3NlZ21lbnQ7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPj0gc3RyZWFtLT50b19zYW1wbGUpKSB7Ci0gICAgLyogTWFyayB0aGUgc3RyZWFtIGFzIEVPUyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJyZWFjaGVkIG1heCBhbGxvd2VkIHNhbXBsZSAldSwgbWFyayBFT1MiLCBzdHJlYW0tPnRvX3NhbXBsZSk7Ci0gICAgc3RyZWFtLT50aW1lX3Bvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBtb3ZlIHRvIG5leHQgc2FtcGxlICovCi0gIHN0cmVhbS0+c2FtcGxlX2luZGV4Kys7Ci0gIHN0cmVhbS0+b2Zmc2V0X2luX3NhbXBsZSA9IDA7Ci0KLSAgLyogcmVhY2hlZCB0aGUgbGFzdCBzYW1wbGUsIHdlIG5lZWQgdGhlIG5leHQgc2VnbWVudCAqLwotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPj0gc3RyZWFtLT5uX3NhbXBsZXMpKQotICAgIGdvdG8gbmV4dF9zZWdtZW50OwotCi0gIGlmICghcXRkZW11eF9wYXJzZV9zYW1wbGVzIChxdGRlbXV4LCBzdHJlYW0sIHN0cmVhbS0+c2FtcGxlX2luZGV4KSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiUGFyc2luZyBvZiBpbmRleCAldSBmYWlsZWQhIiwKLSAgICAgICAgc3RyZWFtLT5zYW1wbGVfaW5kZXgpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIGdldCBuZXh0IHNhbXBsZSAqLwotICBzYW1wbGUgPSAmc3RyZWFtLT5zYW1wbGVzW3N0cmVhbS0+c2FtcGxlX2luZGV4XTsKLQotICAvKiBzZWUgaWYgd2UgYXJlIHBhc3QgdGhlIHNlZ21lbnQgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKFFUU0FNUExFX0RUUyAoc3RyZWFtLCBzYW1wbGUpID49IHNlZ21lbnQtPm1lZGlhX3N0b3ApKQotICAgIGdvdG8gbmV4dF9zZWdtZW50OwotCi0gIGlmIChRVFNBTVBMRV9EVFMgKHN0cmVhbSwgc2FtcGxlKSA+PSBzZWdtZW50LT5tZWRpYV9zdGFydCkgewotICAgIC8qIGluc2lkZSB0aGUgc2VnbWVudCwgdXBkYXRlIHRpbWVfcG9zaXRpb24sIGxvb2tzIHZlcnkgZmFtaWxpYXIgdG8KLSAgICAgKiBHU3RyZWFtZXIgc2VnbWVudHMsIGRvZXNuJ3QgaXQ/ICovCi0gICAgc3RyZWFtLT50aW1lX3Bvc2l0aW9uID0KLSAgICAgICAgUVRTQU1QTEVfRFRTIChzdHJlYW0sIHNhbXBsZSkgLSBzZWdtZW50LT5tZWRpYV9zdGFydCArIHNlZ21lbnQtPnRpbWU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogbm90IHlldCBpbiBzZWdtZW50LCB0aW1lIGRvZXMgbm90IHlldCBpbmNyZW1lbnQuIFRoaXMgbWVhbnMKLSAgICAgKiB0aGF0IHdlIGFyZSBzdGlsbCBwcmVyb2xsaW5nIGtleWZyYW1lcyB0byB0aGUgZGVjb2RlciBzbyBpdCBjYW4KLSAgICAgKiBkZWNvZGUgdGhlIGZpcnN0IHNhbXBsZSBvZiB0aGUgc2VnbWVudC4gKi8KLSAgICBzdHJlYW0tPnRpbWVfcG9zaXRpb24gPSBzZWdtZW50LT50aW1lOwotICB9Ci0gIHJldHVybjsKLQotICAvKiBtb3ZlIHRvIHRoZSBuZXh0IHNlZ21lbnQgKi8KLW5leHRfc2VnbWVudDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzZWdtZW50ICVkIGVuZGVkICIsIHN0cmVhbS0+c2VnbWVudF9pbmRleCk7Ci0KLSAgICBpZiAoc3RyZWFtLT5zZWdtZW50X2luZGV4ID09IHN0cmVhbS0+bl9zZWdtZW50cyAtIDEpIHsKLSAgICAgIC8qIGFyZSB3ZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IHNlZ21lbnQsIHdlJ3JlIEVPUyAqLwotICAgICAgc3RyZWFtLT50aW1lX3Bvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICB9IGVsc2UgewotICAgICAgLyogZWxzZSB3ZSdyZSBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2VnbWVudCAqLwotICAgICAgc3RyZWFtLT50aW1lX3Bvc2l0aW9uID0gc2VnbWVudC0+c3RvcF90aW1lOwotICAgIH0KLSAgICAvKiBtYWtlIHN1cmUgd2Ugc2VsZWN0IGEgbmV3IHNlZ21lbnQgKi8KLQotICAgIC8qIGFjY3VtdWxhdGUgcHJldmlvdXMgc2VnbWVudHMgKi8KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbS0+c2VnbWVudC5zdG9wKSkKLSAgICAgIHN0cmVhbS0+YWNjdW11bGF0ZWRfYmFzZSArPQotICAgICAgICAgIChzdHJlYW0tPnNlZ21lbnQuc3RvcCAtCi0gICAgICAgICAgc3RyZWFtLT5zZWdtZW50LnN0YXJ0KSAvIEFCUyAoc3RyZWFtLT5zZWdtZW50LnJhdGUpOwotCi0gICAgc3RyZWFtLT5zZWdtZW50X2luZGV4ID0gLTE7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X3N5bmNfc3RyZWFtcyAoR3N0UVREZW11eCAqIGRlbXV4KQotewotICBnaW50IGk7Ci0KLSAgaWYgKGRlbXV4LT5uX3N0cmVhbXMgPD0gMSkKLSAgICByZXR1cm47Ci0KLSAgZm9yIChpID0gMDsgaSA8IGRlbXV4LT5uX3N0cmVhbXM7IGkrKykgewotICAgIFF0RGVtdXhTdHJlYW0gKnN0cmVhbTsKLSAgICBHc3RDbG9ja1RpbWUgZW5kX3RpbWU7Ci0KLSAgICBzdHJlYW0gPSBkZW11eC0+c3RyZWFtc1tpXTsKLQotICAgIGlmICghc3RyZWFtLT5wYWQpCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIFRPRE8gYWR2YW5jZSB0aW1lIG9uIHN1YnRpdGxlIHN0cmVhbXMgaGVyZSwgaWYgYW55IHNvbWUgZGF5ICovCi0KLSAgICAvKiBzb21lIGNsaXBzL3RyYWlsZXJzIG1heSBoYXZlIHVuYmFsYW5jZWQgc3RyZWFtcyBhdCB0aGUgZW5kLAotICAgICAqIHNvIHNlbmQgRU9TIG9uIHNob3J0ZXIgc3RyZWFtIHRvIHByZXZlbnQgc3RhbGxpbmcgb3RoZXJzICovCi0KLSAgICAvKiBkbyBub3QgbWVzcyB3aXRoIEVPUyBpZiBTRUdNRU5UIHNlZWtpbmcgKi8KLSAgICBpZiAoZGVtdXgtPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChkZW11eC0+cHVsbGJhc2VkKSB7Ci0gICAgICAvKiBsb29wIG1vZGUgaXMgc2FtcGxlIHRpbWUgYmFzZWQgKi8KLSAgICAgIGlmICghU1RSRUFNX0lTX0VPUyAoc3RyZWFtKSkKLSAgICAgICAgY29udGludWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHB1c2ggbW9kZSBpcyBieXRlIHBvc2l0aW9uIGJhc2VkICovCi0gICAgICBpZiAoc3RyZWFtLT5uX3NhbXBsZXMgJiYKLSAgICAgICAgICBzdHJlYW0tPnNhbXBsZXNbc3RyZWFtLT5uX3NhbXBsZXMgLSAxXS5vZmZzZXQgPj0gZGVtdXgtPm9mZnNldCkKLSAgICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKHN0cmVhbS0+c2VudF9lb3MpCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIG9ubHkgYWN0IGlmIHNvbWUgZ2FwICovCi0gICAgZW5kX3RpbWUgPSBzdHJlYW0tPnNlZ21lbnRzW3N0cmVhbS0+bl9zZWdtZW50cyAtIDFdLnN0b3BfdGltZTsKLSAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJjdXJyZW50IHBvc2l0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIiwgc3RyZWFtIGVuZDogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChkZW11eC0+c2VnbWVudC5wb3NpdGlvbiksIEdTVF9USU1FX0FSR1MgKGVuZF90aW1lKSk7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChlbmRfdGltZSkKLSAgICAgICAgJiYgKGVuZF90aW1lICsgMiAqIEdTVF9TRUNPTkQgPCBkZW11eC0+c2VnbWVudC5wb3NpdGlvbikpIHsKLSAgICAgIEdzdEV2ZW50ICpldmVudDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzZW5kaW5nIEVPUyBmb3Igc3RyZWFtICVzIiwKLSAgICAgICAgICBHU1RfUEFEX05BTUUgKHN0cmVhbS0+cGFkKSk7Ci0gICAgICBzdHJlYW0tPnNlbnRfZW9zID0gVFJVRTsKLSAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gICAgICBpZiAoZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBldmVudCk7Ci0gICAgfQotICB9Ci19Ci0KLS8qIEVPUyBhbmQgTk9UX0xJTktFRCBuZWVkIHRvIGJlIGNvbWJpbmVkLiBUaGlzIG1lYW5zIHRoYXQgd2UgcmV0dXJuOgotICoKLSAqICBHU1RfRkxPV19OT1RfTElOS0VEOiB3aGVuIGFsbCBwYWRzIE5PVF9MSU5LRUQuCi0gKiAgR1NUX0ZMT1dfRU9TOiB3aGVuIGFsbCBwYWRzIEVPUyBvciBOT1RfTElOS0VELgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0ZGVtdXhfY29tYmluZV9mbG93cyAoR3N0UVREZW11eCAqIGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIEdzdEZsb3dSZXR1cm4gcmV0KQotewotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJmbG93IHJldHVybjogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0KLSAgaWYgKHN0cmVhbS0+cGFkKQotICAgIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9wYWRfZmxvdyAoZGVtdXgtPmZsb3djb21iaW5lciwgc3RyZWFtLT5wYWQsCi0gICAgICAgIHJldCk7Ci0gIGVsc2UKLSAgICByZXQgPSBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfZmxvdyAoZGVtdXgtPmZsb3djb21iaW5lciwgcmV0KTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJjb21iaW5lZCBmbG93IHJldHVybjogJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIHRoZSBpbnB1dCBidWZmZXIgbWV0YWRhdGEgbXVzdCBiZSB3cml0YWJsZS4gUmV0dXJucyBOVUxMIHdoZW4gdGhlIGJ1ZmZlciBpcwotICogY29tcGxldGVseSBjbGlwcGVkCi0gKgotICogU2hvdWxkIGJlIHVzZWQgb25seSB3aXRoIHJhdyBidWZmZXJzICovCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9xdGRlbXV4X2NsaXBfYnVmZmVyIChHc3RRVERlbXV4ICogcXRkZW11eCwgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGd1aW50NjQgc3RhcnQsIHN0b3AsIGNzdGFydCwgY3N0b3AsIGRpZmY7Ci0gIEdzdENsb2NrVGltZSBwdHMsIGR1cmF0aW9uOwotICBnc2l6ZSBzaXplLCBvc2l6ZTsKLSAgZ2ludCBudW1fcmF0ZSwgZGVub21fcmF0ZTsKLSAgZ2ludCBmcmFtZV9zaXplOwotICBnYm9vbGVhbiBjbGlwX2RhdGE7Ci0gIGd1aW50IG9mZnNldDsKLQotICBvc2l6ZSA9IHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICBvZmZzZXQgPSAwOwotCi0gIC8qIGRlcGVuZGluZyBvbiB0aGUgdHlwZSwgc2V0dXAgdGhlIGNsaXAgcGFyYW1ldGVycyAqLwotICBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ19zb3VuKSB7Ci0gICAgZnJhbWVfc2l6ZSA9IHN0cmVhbS0+Ynl0ZXNfcGVyX2ZyYW1lOwotICAgIG51bV9yYXRlID0gR1NUX1NFQ09ORDsKLSAgICBkZW5vbV9yYXRlID0gKGdpbnQpIHN0cmVhbS0+cmF0ZTsKLSAgICBjbGlwX2RhdGEgPSBUUlVFOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0NfdmlkZSkgewotICAgIGZyYW1lX3NpemUgPSBzaXplOwotICAgIG51bV9yYXRlID0gc3RyZWFtLT5mcHNfbjsKLSAgICBkZW5vbV9yYXRlID0gc3RyZWFtLT5mcHNfZDsKLSAgICBjbGlwX2RhdGEgPSBGQUxTRTsKLSAgfSBlbHNlCi0gICAgZ290byB3cm9uZ190eXBlOwotCi0gIGlmIChmcmFtZV9zaXplIDw9IDApCi0gICAgZ290byBiYWRfZnJhbWVfc2l6ZTsKLQotICAvKiB3ZSBjYW4gb25seSBjbGlwIGlmIHdlIGhhdmUgYSB2YWxpZCBwdHMgKi8KLSAgcHRzID0gR1NUX0JVRkZFUl9QVFMgKGJ1Zik7Ci0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHB0cykpKQotICAgIGdvdG8gbm9fcHRzOwotCi0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpKSB7Ci0gICAgZHVyYXRpb24gPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzaXplIC8gZnJhbWVfc2l6ZSwgbnVtX3JhdGUsIGRlbm9tX3JhdGUpOwotICB9Ci0KLSAgc3RhcnQgPSBwdHM7Ci0gIHN0b3AgPSBzdGFydCArIGR1cmF0aW9uOwotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X3NlZ21lbnRfY2xpcCAoJnN0cmVhbS0+c2VnbWVudCwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzdGFydCwgc3RvcCwgJmNzdGFydCwgJmNzdG9wKSkpCi0gICAgZ290byBjbGlwcGVkOwotCi0gIC8qIHNlZSBpZiBzb21lIGNsaXBwaW5nIGhhcHBlbmVkICovCi0gIGRpZmYgPSBjc3RhcnQgLSBzdGFydDsKLSAgaWYgKGRpZmYgPiAwKSB7Ci0gICAgcHRzICs9IGRpZmY7Ci0gICAgZHVyYXRpb24gLT0gZGlmZjsKLQotICAgIGlmIChjbGlwX2RhdGEpIHsKLSAgICAgIC8qIGJyaW5nIGNsaXBwZWQgdGltZSB0byBzYW1wbGVzIGFuZCB0byBieXRlcyAqLwotICAgICAgZGlmZiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGRpZmYsIGRlbm9tX3JhdGUsIG51bV9yYXRlKTsKLSAgICAgIGRpZmYgKj0gZnJhbWVfc2l6ZTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAiY2xpcHBpbmcgc3RhcnQgdG8gJSIgR1NUX1RJTUVfRk9STUFUICIgJSIKLSAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMiLCBHU1RfVElNRV9BUkdTIChjc3RhcnQpLCBkaWZmKTsKLQotICAgICAgb2Zmc2V0ID0gZGlmZjsKLSAgICAgIHNpemUgLT0gZGlmZjsKLSAgICB9Ci0gIH0KLSAgZGlmZiA9IHN0b3AgLSBjc3RvcDsKLSAgaWYgKGRpZmYgPiAwKSB7Ci0gICAgZHVyYXRpb24gLT0gZGlmZjsKLQotICAgIGlmIChjbGlwX2RhdGEpIHsKLSAgICAgIC8qIGJyaW5nIGNsaXBwZWQgdGltZSB0byBzYW1wbGVzIGFuZCB0aGVuIHRvIGJ5dGVzICovCi0gICAgICBkaWZmID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoZGlmZiwgZGVub21fcmF0ZSwgbnVtX3JhdGUpOwotICAgICAgZGlmZiAqPSBmcmFtZV9zaXplOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAiY2xpcHBpbmcgc3RvcCB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiBieXRlcyIsIEdTVF9USU1FX0FSR1MgKGNzdG9wKSwgZGlmZik7Ci0gICAgICBzaXplIC09IGRpZmY7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG9mZnNldCAhPSAwIHx8IHNpemUgIT0gb3NpemUpCi0gICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1Ziwgb2Zmc2V0LCBzaXplKTsKLQotICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gcHRzOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gZHVyYXRpb247Ci0KLSAgcmV0dXJuIGJ1ZjsKLQotICAvKiBkcm9wcGVkIGJ1ZmZlciAqLwotd3JvbmdfdHlwZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJ1bmtub3duIHN0cmVhbSB0eXBlIik7Ci0gICAgcmV0dXJuIGJ1ZjsKLSAgfQotYmFkX2ZyYW1lX3NpemU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYmFkIGZyYW1lIHNpemUiKTsKLSAgICByZXR1cm4gYnVmOwotICB9Ci1ub19wdHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAibm8gcHRzIG9uIGJ1ZmZlciIpOwotICAgIHJldHVybiBidWY7Ci0gIH0KLWNsaXBwZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY2xpcHBlZCBidWZmZXIiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3F0ZGVtdXhfYWxpZ25fYnVmZmVyIChHc3RRVERlbXV4ICogZGVtdXgsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBhbGlnbm1lbnQpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG1hcC5zaXplIDwgc2l6ZW9mIChndWludHB0cikpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBidWZmZXI7Ci0gIH0KLQotICBpZiAoKChndWludHB0cikgbWFwLmRhdGEpICYgKGFsaWdubWVudCAtIDEpKSB7Ci0gICAgR3N0QnVmZmVyICpuZXdfYnVmZmVyOwotICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zID0geyAwLCBhbGlnbm1lbnQgLSAxLCAwLCAwLCB9OwotCi0gICAgbmV3X2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLCAmcGFyYW1zKTsKLQotICAgIC8qIENvcHkgZGF0YSAiYnkgaGFuZCIsIHNvIGVuc3VyZSBhbGlnbm1lbnQgaXMga2VwdDogKi8KLSAgICBnc3RfYnVmZmVyX2ZpbGwgKG5ld19idWZmZXIsIDAsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAobmV3X2J1ZmZlciwgYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEsIDAsIC0xKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgIldlIHdhbnQgb3V0cHV0IGFsaWduZWQgb24gJSIgR19HU0laRV9GT1JNQVQgIiwgcmVhbGxvY2F0ZWQiLAotICAgICAgICBhbGlnbm1lbnQpOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gICAgcmV0dXJuIG5ld19idWZmZXI7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gYnVmZmVyOwotfQotCi0vKiB0aGUgaW5wdXQgYnVmZmVyIG1ldGFkYXRhIG11c3QgYmUgd3JpdGFibGUsCi0gKiBidXQgdGltZS9kdXJhdGlvbiBldGMgbm90IHlldCBzZXQgYW5kIG5lZWQgbm90IGJlIHByZXNlcnZlZCAqLwotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcXRkZW11eF9wcm9jZXNzX2J1ZmZlciAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQgbnNpemUgPSAwOwotICBnY2hhciAqc3RyOwotCi0gIC8qIG5vdCBtYW55IGNhc2VzIGZvciBub3cgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHN0cmVhbS0+Zm91cmNjID09IEZPVVJDQ19tcDRzKSkgewotICAgIC8qIHNlbmQgYSBvbmUgdGltZSBkdmQgY2x1dCBldmVudCAqLwotICAgIGlmIChzdHJlYW0tPnBlbmRpbmdfZXZlbnQgJiYgc3RyZWFtLT5wYWQpCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBzdHJlYW0tPnBlbmRpbmdfZXZlbnQpOwotICAgIHN0cmVhbS0+cGVuZGluZ19ldmVudCA9IE5VTEw7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5zdWJ0eXBlICE9IEZPVVJDQ190ZXh0Ci0gICAgICAgICAgJiYgc3RyZWFtLT5zdWJ0eXBlICE9IEZPVVJDQ19zYnRsICYmCi0gICAgICAgICAgc3RyZWFtLT5zdWJ0eXBlICE9IEZPVVJDQ19zdWJwKSkgewotICAgIHJldHVybiBidWY7Ci0gIH0KLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIC8qIGVtcHR5IGJ1ZmZlciBpcyBzZW50IHRvIHRlcm1pbmF0ZSBwcmV2aW91cyBzdWJ0aXRsZSAqLwotICBpZiAobWFwLnNpemUgPD0gMikgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ19zdWJwKSB7Ci0gICAgLyogVGhhdCdzIGFsbCB0aGUgcHJvY2Vzc2luZyBuZWVkZWQgZm9yIHN1YnBpY3R1cmVzICovCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gYnVmOwotICB9Ci0KLSAgbnNpemUgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKG1hcC5kYXRhKTsKLSAgbnNpemUgPSBNSU4gKG5zaXplLCBtYXAuc2l6ZSAtIDIpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiM0dQUCB0aW1lZCB0ZXh0IHN1YnRpdGxlOiAlZC8lIiBHX0dTSVpFX0ZPUk1BVCAiIiwKLSAgICAgIG5zaXplLCBtYXAuc2l6ZSk7Ci0KLSAgLyogdGFrZXMgY2FyZSBvZiBVVEYtOCB2YWxpZGF0aW9uIG9yIFVURi0xNiByZWNvZ25pdGlvbiwKLSAgICogbm8gb3RoZXIgZW5jb2RpbmcgZXhwZWN0ZWQgKi8KLSAgc3RyID0gZ3N0X3RhZ19mcmVlZm9ybV9zdHJpbmdfdG9fdXRmOCAoKGdjaGFyICopIG1hcC5kYXRhICsgMiwgbnNpemUsIE5VTEwpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBpZiAoc3RyKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBidWYgPSBfZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoc3RyLCBzdHJsZW4gKHN0ciksIGdfZnJlZSk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogdGhpcyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4gdW5sZXNzIHRoZSBzdWJ0aXRsZSBpcyBjb3JydXB0ZWQgKi8KLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGJ1ZiA9IE5VTEw7Ci0gIH0KLQotICAvKiBGSVhNRSA/IGNvbnZlcnQgb3B0aW9uYWwgc3Vic2VxdWVudCBzdHlsZSBpbmZvIHRvIG1hcmt1cCAqLwotCi0gIHJldHVybiBidWY7Ci19Ci0KLS8qIFNldHMgYSBidWZmZXIncyBhdHRyaWJ1dGVzIHByb3Blcmx5IGFuZCBwdXNoZXMgaXQgZG93bnN0cmVhbS4KLSAqIEFsc28gY2hlY2tzIGZvciBhZGRpdGlvbmFsIGFjdGlvbnMgYW5kIGN1c3RvbSBwcm9jZXNzaW5nIHRoYXQgbWF5Ci0gKiBuZWVkIHRvIGJlIGRvbmUgZmlyc3QuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcXRkZW11eF9kZWNvcmF0ZV9hbmRfcHVzaF9idWZmZXIgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIEdzdEJ1ZmZlciAqIGJ1ZiwKLSAgICBHc3RDbG9ja1RpbWUgZHRzLCBHc3RDbG9ja1RpbWUgcHRzLCBHc3RDbG9ja1RpbWUgZHVyYXRpb24sCi0gICAgZ2Jvb2xlYW4ga2V5ZnJhbWUsIEdzdENsb2NrVGltZSBwb3NpdGlvbiwgZ3VpbnQ2NCBieXRlX3Bvc2l0aW9uKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIG9mZnNldCB0aGUgdGltZXN0YW1wcyBhY2NvcmRpbmcgdG8gdGhlIGVkaXQgbGlzdCAqLwotCi0gIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPmZvdXJjYyA9PSBGT1VSQ0NfcnRzcCkpIHsKLSAgICBnY2hhciAqdXJsOwotICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICB1cmwgPSBnX3N0cm5kdXAgKChnY2hhciAqKSBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgaWYgKHVybCAhPSBOVUxMICYmIHN0cmxlbiAodXJsKSAhPSAwKSB7Ci0gICAgICAvKiB3ZSBoYXZlIFJUU1AgcmVkaXJlY3Qgbm93ICovCi0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHF0ZGVtdXgpLAotICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKHF0ZGVtdXgpLAotICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoInJlZGlyZWN0IiwKLSAgICAgICAgICAgICAgICAgICJuZXctbG9jYXRpb24iLCBHX1RZUEVfU1RSSU5HLCB1cmwsIE5VTEwpKSk7Ci0gICAgICBxdGRlbXV4LT5wb3N0ZWRfcmVkaXJlY3QgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJSZWRpcmVjdCBVUkkgb2Ygc3RyZWFtIGlzIGVtcHR5LCBub3QgIgotICAgICAgICAgICJwb3N0aW5nIik7Ci0gICAgfQotICAgIGdfZnJlZSAodXJsKTsKLSAgfQotCi0gIC8qIHBvc2l0aW9uIHJlcG9ydGluZyAqLwotICBpZiAocXRkZW11eC0+c2VnbWVudC5yYXRlID49IDApIHsKLSAgICBxdGRlbXV4LT5zZWdtZW50LnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgZ3N0X3F0ZGVtdXhfc3luY19zdHJlYW1zIChxdGRlbXV4KTsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZICghc3RyZWFtLT5wYWQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIk5vIG91dHB1dCBwYWQgZm9yIHN0cmVhbSwgaWdub3JpbmciKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIC8qIHNlbmQgb3V0IHBlbmRpbmcgYnVmZmVycyAqLwotICB3aGlsZSAoc3RyZWFtLT5idWZmZXJzKSB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXIgPSAoR3N0QnVmZmVyICopIHN0cmVhbS0+YnVmZmVycy0+ZGF0YTsKLQotICAgIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPmRpc2NvbnQpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIm1hcmtpbmcgZGlzY29udCBidWZmZXIiKTsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgc3RyZWFtLT5kaXNjb250ID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgfQotCi0gICAgaWYgKHN0cmVhbS0+YWxpZ25tZW50ID4gMSkKLSAgICAgIGJ1ZmZlciA9IGdzdF9xdGRlbXV4X2FsaWduX2J1ZmZlciAocXRkZW11eCwgYnVmZmVyLCBzdHJlYW0tPmFsaWdubWVudCk7Ci0gICAgZ3N0X3BhZF9wdXNoIChzdHJlYW0tPnBhZCwgYnVmZmVyKTsKLQotICAgIHN0cmVhbS0+YnVmZmVycyA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKHN0cmVhbS0+YnVmZmVycywgc3RyZWFtLT5idWZmZXJzKTsKLSAgfQotCi0gIC8qIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgbWV0YWRhdGEgKi8KLSAgYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPm5lZWRfcHJvY2VzcykpCi0gICAgYnVmID0gZ3N0X3F0ZGVtdXhfcHJvY2Vzc19idWZmZXIgKHF0ZGVtdXgsIHN0cmVhbSwgYnVmKTsKLQotICBpZiAoIWJ1ZikgewotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gZHRzOwotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IHB0czsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGR1cmF0aW9uOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IC0xOwotICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPSAtMTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5yZ2I4X3BhbGV0dGUpKQotICAgIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmLCBnc3RfbWVtb3J5X3JlZiAoc3RyZWFtLT5yZ2I4X3BhbGV0dGUpKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5wYWRkaW5nKSkgewotICAgIGdzdF9idWZmZXJfcmVzaXplIChidWYsIHN0cmVhbS0+cGFkZGluZywgLTEpOwotICB9Ci0jaWYgMAotICBpZiAoR19VTkxJS0VMWSAocXRkZW11eC0+ZWxlbWVudF9pbmRleCkpIHsKLSAgICBHc3RDbG9ja1RpbWUgc3RyZWFtX3RpbWU7Ci0KLSAgICBzdHJlYW1fdGltZSA9Ci0gICAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmc3RyZWFtLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgIHRpbWVzdGFtcCk7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICJhZGRpbmcgYXNzb2NpYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICItPiAlIgotICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHN0cmVhbV90aW1lKSwgYnl0ZV9wb3NpdGlvbik7Ci0gICAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uIChxdGRlbXV4LT5lbGVtZW50X2luZGV4LAotICAgICAgICAgIHF0ZGVtdXgtPmluZGV4X2lkLAotICAgICAgICAgIGtleWZyYW1lID8gR1NUX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQgOgotICAgICAgICAgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0RFTFRBX1VOSVQsIEdTVF9GT1JNQVRfVElNRSwgc3RyZWFtX3RpbWUsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgYnl0ZV9wb3NpdGlvbiwgTlVMTCk7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICBpZiAoc3RyZWFtLT5uZWVkX2NsaXApCi0gICAgYnVmID0gZ3N0X3F0ZGVtdXhfY2xpcF9idWZmZXIgKHF0ZGVtdXgsIHN0cmVhbSwgYnVmKTsKLQotICBpZiAoR19VTkxJS0VMWSAoYnVmID09IE5VTEwpKQotICAgIGdvdG8gZXhpdDsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5kaXNjb250KSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAibWFya2luZyBkaXNjb250IGJ1ZmZlciIpOwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgIHN0cmVhbS0+ZGlzY29udCA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIEdTVF9CVUZGRVJfRkxBR19VTlNFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gIH0KLQotICBpZiAoIWtleWZyYW1lKSB7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCk7Ci0gICAgc3RyZWFtLT5vbl9rZXlmcmFtZSA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIHN0cmVhbS0+b25fa2V5ZnJhbWUgPSBUUlVFOwotICB9Ci0KLQotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICJQdXNoaW5nIGJ1ZmZlciB3aXRoIGR0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcHRzICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIgb24gcGFkICVzIiwgR1NUX1RJTUVfQVJHUyAoZHRzKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHB0cyksIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSwKLSAgICAgIEdTVF9QQURfTkFNRSAoc3RyZWFtLT5wYWQpKTsKLQotICBpZiAoc3RyZWFtLT5wcm90ZWN0ZWQgJiYgc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV90eXBlID09IEZPVVJDQ19jZW5jKSB7Ci0gICAgR3N0U3RydWN0dXJlICpjcnlwdG9faW5mbzsKLSAgICBRdERlbXV4Q2VuY1NhbXBsZVNldEluZm8gKmluZm8gPQotICAgICAgICAoUXREZW11eENlbmNTYW1wbGVTZXRJbmZvICopIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbzsKLSAgICBnaW50IGluZGV4OwotICAgIEdzdEV2ZW50ICpldmVudDsKLQotICAgIHdoaWxlICgoZXZlbnQgPSBnX3F1ZXVlX3BvcF9oZWFkICgmc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9ldmVudF9xdWV1ZSkpKSB7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBldmVudCk7Ci0gICAgfQotCi0gICAgaWYgKGluZm8tPmNyeXB0b19pbmZvID09IE5VTEwpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJjZW5jIG1ldGFkYXRhIGhhc24ndCBiZWVuIHBhcnNlZCB5ZXQiKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgaW5kZXggPSBzdHJlYW0tPnNhbXBsZV9pbmRleCAtIChzdHJlYW0tPm5fc2FtcGxlcyAtIGluZm8tPmNyeXB0b19pbmZvLT5sZW4pOwotICAgIGlmIChHX0xJS0VMWSAoaW5kZXggPj0gMCAmJiBpbmRleCA8IGluZm8tPmNyeXB0b19pbmZvLT5sZW4pKSB7Ci0gICAgICAvKiBzdGVhbCBzdHJ1Y3R1cmUgZnJvbSBhcnJheSAqLwotICAgICAgY3J5cHRvX2luZm8gPSBnX3B0cl9hcnJheV9pbmRleCAoaW5mby0+Y3J5cHRvX2luZm8sIGluZGV4KTsKLSAgICAgIGdfcHRyX2FycmF5X2luZGV4IChpbmZvLT5jcnlwdG9faW5mbywgaW5kZXgpID0gTlVMTDsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiYXR0YWNoaW5nIGNlbmMgbWV0YWRhdGEgWyV1XSIsIGluZGV4KTsKLSAgICAgIGlmICghY3J5cHRvX2luZm8gfHwgIWdzdF9idWZmZXJfYWRkX3Byb3RlY3Rpb25fbWV0YSAoYnVmLCBjcnlwdG9faW5mbykpCi0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gYXR0YWNoIGNlbmMgbWV0YWRhdGEgdG8gYnVmZmVyIik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHN0cmVhbS0+YWxpZ25tZW50ID4gMSkKLSAgICBidWYgPSBnc3RfcXRkZW11eF9hbGlnbl9idWZmZXIgKHF0ZGVtdXgsIGJ1Ziwgc3RyZWFtLT5hbGlnbm1lbnQpOwotCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoc3RyZWFtLT5wYWQsIGJ1Zik7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwdHMpICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdXJhdGlvbikpIHsKLSAgICAvKiBtYXJrIHBvc2l0aW9uIGluIHN0cmVhbSwgd2UnbGwgbmVlZCB0aGlzIHRvIGtub3cgd2hlbiB0byBzZW5kIEdBUCBldmVudCAqLwotICAgIHN0cmVhbS0+c2VnbWVudC5wb3NpdGlvbiA9IHB0cyArIGR1cmF0aW9uOwotICB9Ci0KLWV4aXQ6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBRdERlbXV4UmFuZG9tQWNjZXNzRW50cnkgKgotZ3N0X3F0ZGVtdXhfc3RyZWFtX3NlZWtfZnJhZ21lbnQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIEdzdENsb2NrVGltZSBwb3MsIGdib29sZWFuIGFmdGVyKQotewotICBRdERlbXV4UmFuZG9tQWNjZXNzRW50cnkgKmVudHJpZXMgPSBzdHJlYW0tPnJhX2VudHJpZXM7Ci0gIGd1aW50IG5fZW50cmllcyA9IHN0cmVhbS0+bl9yYV9lbnRyaWVzOwotICBndWludCBpOwotCi0gIC8qIHdlIGFzc3VtZSB0aGUgdGFibGUgaXMgc29ydGVkICovCi0gIGZvciAoaSA9IDA7IGkgPCBuX2VudHJpZXM7ICsraSkgewotICAgIGlmIChlbnRyaWVzW2ldLnRzID4gcG9zKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBGSVhNRTogbWF5YmUgc2F2ZSBmaXJzdCBtb29mX29mZnNldCBzb21ld2hlcmUgaW5zdGVhZCwgYnV0IGZvciBub3cgaXQncwotICAgKiBwcm9iYWJseSBva2F5IHRvIGFzc3VtZSB0aGF0IHRoZSBpbmRleCBsaXN0cyB0aGUgdmVyeSBmaXJzdCBmcmFnbWVudCAqLwotICBpZiAoaSA9PSAwKQotICAgIHJldHVybiAmZW50cmllc1swXTsKLQotICBpZiAoYWZ0ZXIpCi0gICAgcmV0dXJuICZlbnRyaWVzW2ldOwotICBlbHNlCi0gICAgcmV0dXJuICZlbnRyaWVzW2kgLSAxXTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRkZW11eF9kb19mcmFnbWVudGVkX3NlZWsgKEdzdFFURGVtdXggKiBxdGRlbXV4KQotewotICBjb25zdCBRdERlbXV4UmFuZG9tQWNjZXNzRW50cnkgKmJlc3RfZW50cnkgPSBOVUxMOwotICBndWludCBpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocXRkZW11eCk7Ci0KLSAgZ19hc3NlcnQgKHF0ZGVtdXgtPm5fc3RyZWFtcyA+IDApOwotCi0gIGZvciAoaSA9IDA7IGkgPCBxdGRlbXV4LT5uX3N0cmVhbXM7IGkrKykgewotICAgIGNvbnN0IFF0RGVtdXhSYW5kb21BY2Nlc3NFbnRyeSAqZW50cnk7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyZWFtOwotICAgIGdib29sZWFuIGlzX2F1ZGlvX29yX3ZpZGVvOwotCi0gICAgc3RyZWFtID0gcXRkZW11eC0+c3RyZWFtc1tpXTsKLQotICAgIGdfZnJlZSAoc3RyZWFtLT5zYW1wbGVzKTsKLSAgICBzdHJlYW0tPnNhbXBsZXMgPSBOVUxMOwotICAgIHN0cmVhbS0+bl9zYW1wbGVzID0gMDsKLSAgICBzdHJlYW0tPnN0YmxfaW5kZXggPSAtMTsgICAgLyogbm8gc2FtcGxlcyBoYXZlIHlldCBiZWVuIHBhcnNlZCAqLwotICAgIHN0cmVhbS0+c2FtcGxlX2luZGV4ID0gLTE7Ci0KLSAgICBpZiAoc3RyZWFtLT5yYV9lbnRyaWVzID09IE5VTEwpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3ZpZGUgfHwgc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ19zb3VuKQotICAgICAgaXNfYXVkaW9fb3JfdmlkZW8gPSBUUlVFOwotICAgIGVsc2UKLSAgICAgIGlzX2F1ZGlvX29yX3ZpZGVvID0gRkFMU0U7Ci0KLSAgICBlbnRyeSA9Ci0gICAgICAgIGdzdF9xdGRlbXV4X3N0cmVhbV9zZWVrX2ZyYWdtZW50IChxdGRlbXV4LCBzdHJlYW0sCi0gICAgICAgIHN0cmVhbS0+dGltZV9wb3NpdGlvbiwgIWlzX2F1ZGlvX29yX3ZpZGVvKTsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAoc3RyZWFtLT5wYWQsICIlIiBHU1RfVElNRV9GT1JNQVQgIiBhdCBvZmZzZXQgIgotICAgICAgICAiJSIgR19HVUlOVDY0X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoZW50cnktPnRzKSwgZW50cnktPm1vb2Zfb2Zmc2V0KTsKLQotICAgIHN0cmVhbS0+cGVuZGluZ19zZWVrID0gZW50cnk7Ci0KLSAgICAvKiBkZWNpZGUgcG9zaXRpb24gdG8ganVtcCB0byBqdXN0IGJhc2VkIG9uIGF1ZGlvL3ZpZGVvIHRyYWNrcywgbm90IHN1YnMgKi8KLSAgICBpZiAoIWlzX2F1ZGlvX29yX3ZpZGVvKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoYmVzdF9lbnRyeSA9PSBOVUxMIHx8IGVudHJ5LT5tb29mX29mZnNldCA8IGJlc3RfZW50cnktPm1vb2Zfb2Zmc2V0KQotICAgICAgYmVzdF9lbnRyeSA9IGVudHJ5OwotICB9Ci0KLSAgaWYgKGJlc3RfZW50cnkgPT0gTlVMTCkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdGRlbXV4KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJzZWVrIHRvICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBiZXN0IGZyYWdtZW50ICIKLSAgICAgICJtb29mIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChxdGRlbXV4LT5zdHJlYW1zWzBdLT50aW1lX3Bvc2l0aW9uKSwKLSAgICAgIGJlc3RfZW50cnktPm1vb2Zfb2Zmc2V0LCBHU1RfVElNRV9BUkdTIChiZXN0X2VudHJ5LT50cykpOwotCi0gIHF0ZGVtdXgtPm1vb2Zfb2Zmc2V0ID0gYmVzdF9lbnRyeS0+bW9vZl9vZmZzZXQ7Ci0KLSAgcXRkZW11eF9hZGRfZnJhZ21lbnRlZF9zYW1wbGVzIChxdGRlbXV4KTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocXRkZW11eCk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSAoR3N0UVREZW11eCAqIHF0ZGVtdXgpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLSAgUXREZW11eFN0cmVhbSAqc3RyZWFtOwotICBHc3RDbG9ja1RpbWUgbWluX3RpbWU7Ci0gIGd1aW50NjQgb2Zmc2V0ID0gMDsKLSAgR3N0Q2xvY2tUaW1lIGR0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdzdENsb2NrVGltZSBwdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24gPSAwOwotICBnYm9vbGVhbiBrZXlmcmFtZSA9IEZBTFNFOwotICBndWludCBzYW1wbGVfc2l6ZSA9IDA7Ci0gIGdib29sZWFuIGVtcHR5ID0gMDsKLSAgZ3VpbnQgc2l6ZTsKLSAgZ2ludCBpbmRleDsKLSAgZ2ludCBpOwotCi0gIGdzdF9xdGRlbXV4X3B1c2hfcGVuZGluZ19uZXdzZWdtZW50IChxdGRlbXV4KTsKLQotICBpZiAocXRkZW11eC0+ZnJhZ21lbnRlZF9zZWVrX3BlbmRpbmcpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJwZW5kaW5nIGZyYWdtZW50ZWQgc2VlayIpOwotICAgIGdzdF9xdGRlbXV4X2RvX2ZyYWdtZW50ZWRfc2VlayAocXRkZW11eCk7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiZnJhZ21lbnRlZCBzZWVrIGRvbmUhIik7Ci0gICAgcXRkZW11eC0+ZnJhZ21lbnRlZF9zZWVrX3BlbmRpbmcgPSBGQUxTRTsKLSAgfQotCi0gIC8qIEZpZ3VyZSBvdXQgdGhlIG5leHQgc3RyZWFtIHNhbXBsZSB0byBvdXRwdXQsIG1pbl90aW1lIGlzIGV4cHJlc3NlZCBpbgotICAgKiBnbG9iYWwgdGltZSBhbmQgcnVucyBvdmVyIHRoZSBlZGl0IGxpc3Qgc2VnbWVudHMuICovCi0gIG1pbl90aW1lID0gR19NQVhVSU5UNjQ7Ci0gIGluZGV4ID0gLTE7Ci0gIGZvciAoaSA9IDA7IGkgPCBxdGRlbXV4LT5uX3N0cmVhbXM7IGkrKykgewotICAgIEdzdENsb2NrVGltZSBwb3NpdGlvbjsKLQotICAgIHN0cmVhbSA9IHF0ZGVtdXgtPnN0cmVhbXNbaV07Ci0gICAgcG9zaXRpb24gPSBzdHJlYW0tPnRpbWVfcG9zaXRpb247Ci0KLSAgICAvKiBwb3NpdGlvbiBvZiAtMSBpcyBFT1MgKi8KLSAgICBpZiAocG9zaXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBwb3NpdGlvbiA8IG1pbl90aW1lKSB7Ci0gICAgICBtaW5fdGltZSA9IHBvc2l0aW9uOwotICAgICAgaW5kZXggPSBpOwotICAgIH0KLSAgfQotICAvKiBhbGwgYXJlIEVPUyAqLwotICBpZiAoR19VTkxJS0VMWSAoaW5kZXggPT0gLTEpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFsbCBzdHJlYW1zIGFyZSBFT1MiKTsKLSAgICBnb3RvIGVvczsKLSAgfQotCi0gIC8qIGNoZWNrIGZvciBzZWdtZW50IGVuZCAqLwotICBpZiAoR19VTkxJS0VMWSAocXRkZW11eC0+c2VnbWVudC5zdG9wICE9IC0xCi0gICAgICAgICAgJiYgKChxdGRlbXV4LT5zZWdtZW50LnJhdGUgPj0gMCAmJiBxdGRlbXV4LT5zZWdtZW50LnN0b3AgPD0gbWluX3RpbWUpCi0gICAgICAgICAgICAgIHx8IChxdGRlbXV4LT5zZWdtZW50LnJhdGUgPCAwCi0gICAgICAgICAgICAgICAgICAmJiBxdGRlbXV4LT5zZWdtZW50LnN0YXJ0ID4gbWluX3RpbWUpKQotICAgICAgICAgICYmIHF0ZGVtdXgtPnN0cmVhbXNbaW5kZXhdLT5vbl9rZXlmcmFtZSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAid2UgcmVhY2hlZCB0aGUgZW5kIG9mIG91ciBzZWdtZW50LiIpOwotICAgIHF0ZGVtdXgtPnN0cmVhbXNbaW5kZXhdLT50aW1lX3Bvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBnb3RvIGVvc19zdHJlYW07Ci0gIH0KLQotICAvKiBnYXAgZXZlbnRzIGZvciBzdWJ0aXRsZSBzdHJlYW1zICovCi0gIGZvciAoaSA9IDA7IGkgPCBxdGRlbXV4LT5uX3N0cmVhbXM7IGkrKykgewotICAgIHN0cmVhbSA9IHF0ZGVtdXgtPnN0cmVhbXNbaV07Ci0gICAgaWYgKHN0cmVhbS0+cGFkICYmIChzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3N1YnAKLSAgICAgICAgICAgIHx8IHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0NfdGV4dAotICAgICAgICAgICAgfHwgc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ19zYnRsKSkgewotICAgICAgLyogc2VuZCBvbmUgc2Vjb25kIGdhcCBldmVudHMgdW50aWwgdGhlIHN0cmVhbSBjYXRjaGVzIHVwICovCi0gICAgICAvKiBnYXBzIGNhbiBvbmx5IGJlIHNlbnQgYWZ0ZXIgc2VnbWVudCBpcyBhY3RpdmF0ZWQgKHNlZ21lbnQuc3RvcCBpcyBubyBsb25nZXIgLTEpICovCi0gICAgICB3aGlsZSAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbS0+c2VnbWVudC5zdG9wKSAmJgotICAgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW0tPnNlZ21lbnQucG9zaXRpb24pICYmCi0gICAgICAgICAgc3RyZWFtLT5zZWdtZW50LnBvc2l0aW9uICsgR1NUX1NFQ09ORCA8IG1pbl90aW1lKSB7Ci0gICAgICAgIEdzdEV2ZW50ICpnYXAgPQotICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19nYXAgKHN0cmVhbS0+c2VnbWVudC5wb3NpdGlvbiwgR1NUX1NFQ09ORCk7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5wYWQsIGdhcCk7Ci0gICAgICAgIHN0cmVhbS0+c2VnbWVudC5wb3NpdGlvbiArPSBHU1RfU0VDT05EOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHN0cmVhbSA9IHF0ZGVtdXgtPnN0cmVhbXNbaW5kZXhdOwotICBpZiAoc3RyZWFtLT5uZXdfY2FwcykgewotICAgIGdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0gKHF0ZGVtdXgsIHN0cmVhbSk7Ci0gICAgcXRkZW11eF9kb19hbGxvY2F0aW9uIChxdGRlbXV4LCBzdHJlYW0pOwotICB9Ci0KLSAgLyogZmV0Y2ggaW5mbyBmb3IgdGhlIGN1cnJlbnQgc2FtcGxlIG9mIHRoaXMgc3RyZWFtICovCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X3F0ZGVtdXhfcHJlcGFyZV9jdXJyZW50X3NhbXBsZSAocXRkZW11eCwgc3RyZWFtLCAmZW1wdHksCi0gICAgICAgICAgICAgICZvZmZzZXQsICZzYW1wbGVfc2l6ZSwgJmR0cywgJnB0cywgJmR1cmF0aW9uLCAma2V5ZnJhbWUpKSkKLSAgICBnb3RvIGVvc19zdHJlYW07Ci0KLSAgLyogSWYgd2UncmUgZG9pbmcgYSBrZXlmcmFtZS1vbmx5IHRyaWNrbW9kZSwgb25seSBwdXNoIGtleWZyYW1lcyBvbiB2aWRlbyBzdHJlYW1zICovCi0gIGlmIChHX1VOTElLRUxZIChxdGRlbXV4LT4KLSAgICAgICAgICBzZWdtZW50LmZsYWdzICYgR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfS0VZX1VOSVRTKSkgewotICAgIGlmIChzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3ZpZGUgJiYgIWtleWZyYW1lKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIlNraXBwaW5nIG5vbi1rZXlmcmFtZSBvbiBzdHJlYW0gJWQiLCBpbmRleCk7Ci0gICAgICBnb3RvIG5leHQ7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICJwdXNoaW5nIGZyb20gc3RyZWFtICVkLCBlbXB0eSAlZCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgIiwgc2l6ZSAlZCwgZHRzPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwdHM9JSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIGluZGV4LCBlbXB0eSwgb2Zmc2V0LCBzYW1wbGVfc2l6ZSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGR0cyksIEdTVF9USU1FX0FSR1MgKHB0cyksIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGVtcHR5KSkgewotICAgIC8qIGVtcHR5IHNlZ21lbnQsIHB1c2ggYSBnYXAgYW5kIG1vdmUgdG8gdGhlIG5leHQgb25lICovCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzdHJlYW0tPnBhZCwgZ3N0X2V2ZW50X25ld19nYXAgKHB0cywgZHVyYXRpb24pKTsKLSAgICBzdHJlYW0tPnNlZ21lbnQucG9zaXRpb24gPSBwdHMgKyBkdXJhdGlvbjsKLSAgICBnb3RvIG5leHQ7Ci0gIH0KLQotICAvKiBobW0sIGVtcHR5IHNhbXBsZSwgc2tpcCBhbmQgbW92ZSB0byBuZXh0IHNhbXBsZSAqLwotICBpZiAoR19VTkxJS0VMWSAoc2FtcGxlX3NpemUgPD0gMCkpCi0gICAgZ290byBuZXh0OwotCi0gIC8qIGxhc3QgcHVzaGVkIHNhbXBsZSB3YXMgb3V0IG9mIGJvdW5kYXJ5LCBnb3RvIG5leHQgc2FtcGxlICovCi0gIGlmIChHX1VOTElLRUxZIChHU1RfUEFEX0xBU1RfRkxPV19SRVRVUk4gKHN0cmVhbS0+cGFkKSA9PSBHU1RfRkxPV19FT1MpKQotICAgIGdvdG8gbmV4dDsKLQotICBpZiAoc3RyZWFtLT5tYXhfYnVmZmVyX3NpemUgPT0gMCB8fCBzYW1wbGVfc2l6ZSA8PSBzdHJlYW0tPm1heF9idWZmZXJfc2l6ZSkgewotICAgIHNpemUgPSBzYW1wbGVfc2l6ZTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAic2l6ZSAlZCBsYXJnZXIgdGhhbiBzdHJlYW0gbWF4X2J1ZmZlcl9zaXplICVkLCB0cmltbWluZyIsCi0gICAgICAgIHNhbXBsZV9zaXplLCBzdHJlYW0tPm1heF9idWZmZXJfc2l6ZSk7Ci0gICAgc2l6ZSA9Ci0gICAgICAgIE1JTiAoc2FtcGxlX3NpemUgLSBzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUsIHN0cmVhbS0+bWF4X2J1ZmZlcl9zaXplKTsKLSAgfQotCi0gIGlmIChxdGRlbXV4LT5jZW5jX2F1eF9pbmZvX29mZnNldCA+IDApIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBHc3RCeXRlUmVhZGVyIGJyOwotICAgIEdzdEJ1ZmZlciAqYXV4X2luZm8gPSBOVUxMOwotCi0gICAgLyogcHVsbCB0aGUgZGF0YSBzdG9yZWQgYmVmb3JlIHRoZSBzYW1wbGUgKi8KLSAgICByZXQgPQotICAgICAgICBnc3RfcXRkZW11eF9wdWxsX2F0b20gKHF0ZGVtdXgsIHF0ZGVtdXgtPm9mZnNldCwKLSAgICAgICAgb2Zmc2V0ICsgc3RyZWFtLT5vZmZzZXRfaW5fc2FtcGxlIC0gcXRkZW11eC0+b2Zmc2V0LCAmYXV4X2luZm8pOwotICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgICAgZ290byBiZWFjaDsKLSAgICBnc3RfYnVmZmVyX21hcCAoYXV4X2luZm8sICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgY2VuYyBhdXhpbGlhcnkgaW5mbyIpOwotICAgIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmYnIsIG1hcC5kYXRhICsgOCwgbWFwLnNpemUpOwotICAgIGlmICghcXRkZW11eF9wYXJzZV9jZW5jX2F1eF9pbmZvIChxdGRlbXV4LCBzdHJlYW0sICZiciwKLSAgICAgICAgICAgIHF0ZGVtdXgtPmNlbmNfYXV4X2luZm9fc2l6ZXMsIHF0ZGVtdXgtPmNlbmNfYXV4X3NhbXBsZV9jb3VudCkpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gcGFyc2UgY2VuYyBhdXhpbGlhcnkgaW5mbyIpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYXV4X2luZm8sICZtYXApOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYXV4X2luZm8pOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICBnb3RvIGJlYWNoOwotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChhdXhfaW5mbywgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYXV4X2luZm8pOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJyZWFkaW5nICVkIGJ5dGVzIEAgJSIgR19HVUlOVDY0X0ZPUk1BVCwgc2l6ZSwKLSAgICAgIG9mZnNldCk7Ci0KLSAgaWYgKHN0cmVhbS0+dXNlX2FsbG9jYXRvcikgewotICAgIC8qIGlmIHdlIGhhdmUgYSBwZXItc3RyZWFtIGFsbG9jYXRvciwgdXNlIGl0ICovCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKHN0cmVhbS0+YWxsb2NhdG9yLCBzaXplLCAmc3RyZWFtLT5wYXJhbXMpOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3F0ZGVtdXhfcHVsbF9hdG9tIChxdGRlbXV4LCBvZmZzZXQgKyBzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUsCi0gICAgICBzaXplLCAmYnVmKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgZ290byBiZWFjaDsKLQotICBpZiAoc2l6ZSAhPSBzYW1wbGVfc2l6ZSkgewotICAgIHB0cyArPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHU1RfU0VDT05ELAotICAgICAgICBzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUgLyBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSwgc3RyZWFtLT50aW1lc2NhbGUpOwotICAgIGR0cyArPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChHU1RfU0VDT05ELAotICAgICAgICBzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUgLyBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSwgc3RyZWFtLT50aW1lc2NhbGUpOwotICAgIGR1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwKLSAgICAgICAgc2l6ZSAvIHN0cmVhbS0+Ynl0ZXNfcGVyX2ZyYW1lLCBzdHJlYW0tPnRpbWVzY2FsZSk7Ci0gIH0KLQotICByZXQgPSBnc3RfcXRkZW11eF9kZWNvcmF0ZV9hbmRfcHVzaF9idWZmZXIgKHF0ZGVtdXgsIHN0cmVhbSwgYnVmLAotICAgICAgZHRzLCBwdHMsIGR1cmF0aW9uLCBrZXlmcmFtZSwgbWluX3RpbWUsIG9mZnNldCk7Ci0KLSAgaWYgKHNpemUgIT0gc2FtcGxlX3NpemUpIHsKLSAgICBRdERlbXV4U2FtcGxlICpzYW1wbGUgPSAmc3RyZWFtLT5zYW1wbGVzW3N0cmVhbS0+c2FtcGxlX2luZGV4XTsKLSAgICBRdERlbXV4U2VnbWVudCAqc2VnbWVudCA9ICZzdHJlYW0tPnNlZ21lbnRzW3N0cmVhbS0+c2VnbWVudF9pbmRleF07Ci0KLSAgICBHc3RDbG9ja1RpbWUgdGltZV9wb3NpdGlvbiA9IFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sCi0gICAgICAgIHNhbXBsZS0+dGltZXN0YW1wICsgc3RyZWFtLT5vZmZzZXRfaW5fc2FtcGxlIC8gc3RyZWFtLT5ieXRlc19wZXJfZnJhbWUpOwotICAgIGlmICh0aW1lX3Bvc2l0aW9uID49IHNlZ21lbnQtPm1lZGlhX3N0YXJ0KSB7Ci0gICAgICAvKiBpbnNpZGUgdGhlIHNlZ21lbnQsIHVwZGF0ZSB0aW1lX3Bvc2l0aW9uLCBsb29rcyB2ZXJ5IGZhbWlsaWFyIHRvCi0gICAgICAgKiBHU3RyZWFtZXIgc2VnbWVudHMsIGRvZXNuJ3QgaXQ/ICovCi0gICAgICBzdHJlYW0tPnRpbWVfcG9zaXRpb24gPSAodGltZV9wb3NpdGlvbiAtIHNlZ21lbnQtPm1lZGlhX3N0YXJ0KSArCi0gICAgICAgICAgc2VnbWVudC0+dGltZTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm90IHlldCBpbiBzZWdtZW50LCB0aW1lIGRvZXMgbm90IHlldCBpbmNyZW1lbnQuIFRoaXMgbWVhbnMKLSAgICAgICAqIHRoYXQgd2UgYXJlIHN0aWxsIHByZXJvbGxpbmcga2V5ZnJhbWVzIHRvIHRoZSBkZWNvZGVyIHNvIGl0IGNhbgotICAgICAgICogZGVjb2RlIHRoZSBmaXJzdCBzYW1wbGUgb2YgdGhlIHNlZ21lbnQuICovCi0gICAgICBzdHJlYW0tPnRpbWVfcG9zaXRpb24gPSBzZWdtZW50LT50aW1lOwotICAgIH0KLSAgfQotCi0gIC8qIGNvbWJpbmUgZmxvd3MgKi8KLSAgcmV0ID0gZ3N0X3F0ZGVtdXhfY29tYmluZV9mbG93cyAocXRkZW11eCwgc3RyZWFtLCByZXQpOwotICAvKiBpZ25vcmUgdW5saW5rZWQsIHdlIHdpbGwgbm90IHB1c2ggb24gdGhlIHBhZCBhbnltb3JlIGFuZCB3ZSB3aWxsIEVPUyB3aGVuCi0gICAqIHdlIGhhdmUgbm8gbW9yZSBkYXRhIGZvciB0aGUgcGFkIHRvIHB1c2ggKi8KLSAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpCi0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgc3RyZWFtLT5vZmZzZXRfaW5fc2FtcGxlICs9IHNpemU7Ci0gIGlmIChzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUgPj0gc2FtcGxlX3NpemUpIHsKLSAgICBnc3RfcXRkZW11eF9hZHZhbmNlX3NhbXBsZSAocXRkZW11eCwgc3RyZWFtKTsKLSAgfQotICBnb3RvIGJlYWNoOwotCi1uZXh0OgotICBnc3RfcXRkZW11eF9hZHZhbmNlX3NhbXBsZSAocXRkZW11eCwgc3RyZWFtKTsKLQotYmVhY2g6Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogc3BlY2lhbCBjYXNlcyAqLwotZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIk5vIHNhbXBsZXMgbGVmdCBmb3IgYW55IHN0cmVhbXMgLSBFT1MiKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotZW9zX3N0cmVhbToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJObyBzYW1wbGVzIGxlZnQgZm9yIHN0cmVhbSIpOwotICAgIC8qIEVPUyB3aWxsIGJlIHJhaXNlZCBpZiBhbGwgYXJlIEVPUyAqLwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X2xvb3AgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0UVREZW11eCAqcXRkZW11eDsKLSAgZ3VpbnQ2NCBjdXJfb2Zmc2V0OwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBxdGRlbXV4ID0gR1NUX1FUREVNVVggKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0KLSAgY3VyX29mZnNldCA9IHF0ZGVtdXgtPm9mZnNldDsKLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJsb29wIGF0IHBvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgc3RhdGUgJXMiLAotICAgICAgY3VyX29mZnNldCwgcXRfZGVtdXhfc3RhdGVfc3RyaW5nIChxdGRlbXV4LT5zdGF0ZSkpOwotCi0gIHN3aXRjaCAocXRkZW11eC0+c3RhdGUpIHsKLSAgICBjYXNlIFFUREVNVVhfU1RBVEVfSU5JVElBTDoKLSAgICBjYXNlIFFUREVNVVhfU1RBVEVfSEVBREVSOgotICAgICAgcmV0ID0gZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9oZWFkZXIgKHF0ZGVtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRVERFTVVYX1NUQVRFX01PVklFOgotICAgICAgcmV0ID0gZ3N0X3F0ZGVtdXhfbG9vcF9zdGF0ZV9tb3ZpZSAocXRkZW11eCk7Ci0gICAgICBpZiAocXRkZW11eC0+c2VnbWVudC5yYXRlIDwgMCAmJiByZXQgPT0gR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAgIHJldCA9IGdzdF9xdGRlbXV4X3NlZWtfdG9fcHJldmlvdXNfa2V5ZnJhbWUgKHF0ZGVtdXgpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIG91Y2ggKi8KLSAgICAgIGdvdG8gaW52YWxpZF9zdGF0ZTsKLSAgfQotCi0gIC8qIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nLCBwYXVzZSAqLwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gcGF1c2U7Ci0KLWRvbmU6Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHF0ZGVtdXgpOwotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX3N0YXRlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0ZGVtdXgsIFNUUkVBTSwgRkFJTEVELAotICAgICAgICAoTlVMTCksICgic3RyZWFtaW5nIHN0b3BwZWQsIGludmFsaWQgc3RhdGUiKSk7Ci0gICAgZ3N0X3BhZF9wYXVzZV90YXNrIChwYWQpOwotICAgIGdzdF9xdGRlbXV4X3B1c2hfZXZlbnQgKHF0ZGVtdXgsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXBhdXNlOgotICB7Ci0gICAgY29uc3QgZ2NoYXIgKnJlYXNvbiA9IGdzdF9mbG93X2dldF9uYW1lIChyZXQpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsIHJlYXNvbik7Ci0KLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHBhZCk7Ci0KLSAgICAvKiBmYXRhbCBlcnJvcnMgbmVlZCBzcGVjaWFsIGFjdGlvbnMgKi8KLSAgICAvKiBjaGVjayBFT1MgKi8KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgaWYgKHF0ZGVtdXgtPm5fc3RyZWFtcyA9PSAwKSB7Ci0gICAgICAgIC8qIHdlIGhhdmUgbm8gc3RyZWFtcywgcG9zdCBhbiBlcnJvciAqLwotICAgICAgICBnc3RfcXRkZW11eF9wb3N0X25vX3BsYXlhYmxlX3N0cmVhbV9lcnJvciAocXRkZW11eCk7Ci0gICAgICB9Ci0gICAgICBpZiAocXRkZW11eC0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICBnaW50NjQgc3RvcDsKLQotICAgICAgICBpZiAoKHN0b3AgPSBxdGRlbXV4LT5zZWdtZW50LnN0b3ApID09IC0xKQotICAgICAgICAgIHN0b3AgPSBxdGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uOwotCi0gICAgICAgIGlmIChxdGRlbXV4LT5zZWdtZW50LnJhdGUgPj0gMCkgewotICAgICAgICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gICAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJTZW5kaW5nIHNlZ21lbnQgZG9uZSwgYXQgZW5kIG9mIHNlZ21lbnQiKTsKLSAgICAgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChxdGRlbXV4KSwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBzdG9wKTsKLSAgICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChHU1RfRk9STUFUX1RJTUUsIHN0b3ApOwotICAgICAgICAgIGlmIChxdGRlbXV4LT5zZWdtZW50X3NlcW51bSkgewotICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgcXRkZW11eC0+c2VnbWVudF9zZXFudW0pOwotICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBxdGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAocXRkZW11eCksIG1lc3NhZ2UpOwotICAgICAgICAgIGdzdF9xdGRlbXV4X3B1c2hfZXZlbnQgKHF0ZGVtdXgsIGV2ZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotICAgICAgICAgIEdzdEV2ZW50ICpldmVudDsKLQotICAgICAgICAgIC8qICBGb3IgUmV2ZXJzZSBQbGF5YmFjayAqLwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiU2VuZGluZyBzZWdtZW50IGRvbmUsIGF0IHN0YXJ0IG9mIHNlZ21lbnQiKTsKLSAgICAgICAgICBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChxdGRlbXV4KSwKLSAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBxdGRlbXV4LT5zZWdtZW50LnN0YXJ0KTsKLSAgICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICAgIHF0ZGVtdXgtPnNlZ21lbnQuc3RhcnQpOwotICAgICAgICAgIGlmIChxdGRlbXV4LT5zZWdtZW50X3NlcW51bSkgewotICAgICAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X3NlcW51bSAobWVzc2FnZSwgcXRkZW11eC0+c2VnbWVudF9zZXFudW0pOwotICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBxdGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAocXRkZW11eCksIG1lc3NhZ2UpOwotICAgICAgICAgIGdzdF9xdGRlbXV4X3B1c2hfZXZlbnQgKHF0ZGVtdXgsIGV2ZW50KTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiU2VuZGluZyBFT1MgYXQgZW5kIG9mIHNlZ21lbnQiKTsKLSAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgICAgICAgaWYgKHF0ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgcXRkZW11eC0+c2VnbWVudF9zZXFudW0pOwotICAgICAgICBnc3RfcXRkZW11eF9wdXNoX2V2ZW50IChxdGRlbXV4LCBldmVudCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHF0ZGVtdXgsIHJldCk7Ci0gICAgICBnc3RfcXRkZW11eF9wdXNoX2V2ZW50IChxdGRlbXV4LCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgfQotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi0vKgotICogaGFzX25leHRfZW50cnkKLSAqCi0gKiBSZXR1cm5zIGlmIHRoZXJlIGFyZSBzYW1wbGVzIHRvIGJlIHBsYXllZC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1oYXNfbmV4dF9lbnRyeSAoR3N0UVREZW11eCAqIGRlbXV4KQotewotICBRdERlbXV4U3RyZWFtICpzdHJlYW07Ci0gIGludCBpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIHNhbXBsZXMgbm90IHBsYXllZCB5ZXQiKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgZGVtdXgtPm5fc3RyZWFtczsgaSsrKSB7Ci0gICAgc3RyZWFtID0gZGVtdXgtPnN0cmVhbXNbaV07Ci0KLSAgICBpZiAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPT0gLTEpIHsKLSAgICAgIHN0cmVhbS0+c2FtcGxlX2luZGV4ID0gMDsKLSAgICAgIHN0cmVhbS0+b2Zmc2V0X2luX3NhbXBsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHN0cmVhbS0+c2FtcGxlX2luZGV4ID49IHN0cmVhbS0+bl9zYW1wbGVzKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJzdHJlYW0gJWQgc2FtcGxlcyBleGhhdXN0ZWQiLCBpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkZvdW5kIGEgc2FtcGxlIik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRoZXJlIHdhc24ndCBhbnkgbmV4dCBzYW1wbGUiKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKgotICogbmV4dF9lbnRyeV9zaXplCi0gKgotICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgZW50cnkgYXQgdGhlIGN1cnJlbnQgb2Zmc2V0LgotICogSWYgLTEsIHRoZXJlIGFyZSBub25lICh3aGljaCBtZWFucyBFT1Mgb3IgZW1wdHkgZmlsZSkuCi0gKi8KLXN0YXRpYyBndWludDY0Ci1uZXh0X2VudHJ5X3NpemUgKEdzdFFURGVtdXggKiBkZW11eCkKLXsKLSAgUXREZW11eFN0cmVhbSAqc3RyZWFtOwotICBpbnQgaTsKLSAgaW50IHNtYWxsaWR4ID0gLTE7Ci0gIGd1aW50NjQgc21hbGxvZmZzID0gKGd1aW50NjQpIC0gMTsKLSAgUXREZW11eFNhbXBsZSAqc2FtcGxlOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIkZpbmRpbmcgZW50cnkgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBkZW11eC0+b2Zmc2V0KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgZGVtdXgtPm5fc3RyZWFtczsgaSsrKSB7Ci0gICAgc3RyZWFtID0gZGVtdXgtPnN0cmVhbXNbaV07Ci0KLSAgICBpZiAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPT0gLTEpIHsKLSAgICAgIHN0cmVhbS0+c2FtcGxlX2luZGV4ID0gMDsKLSAgICAgIHN0cmVhbS0+b2Zmc2V0X2luX3NhbXBsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHN0cmVhbS0+c2FtcGxlX2luZGV4ID49IHN0cmVhbS0+bl9zYW1wbGVzKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJzdHJlYW0gJWQgc2FtcGxlcyBleGhhdXN0ZWQiLCBpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmICghcXRkZW11eF9wYXJzZV9zYW1wbGVzIChkZW11eCwgc3RyZWFtLCBzdHJlYW0tPnNhbXBsZV9pbmRleCkpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIlBhcnNpbmcgb2YgaW5kZXggJXUgZnJvbSBzdGJsIGF0b20gZmFpbGVkISIsCi0gICAgICAgICAgc3RyZWFtLT5zYW1wbGVfaW5kZXgpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHNhbXBsZSA9ICZzdHJlYW0tPnNhbXBsZXNbc3RyZWFtLT5zYW1wbGVfaW5kZXhdOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAiQ2hlY2tpbmcgU3RyZWFtICVkIChzYW1wbGVfaW5kZXg6JWQgLyBvZmZzZXQ6JSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIC8gc2l6ZTolIiBHX0dVSU5UMzJfRk9STUFUICIpIiwgaSwgc3RyZWFtLT5zYW1wbGVfaW5kZXgsCi0gICAgICAgIHNhbXBsZS0+b2Zmc2V0LCBzYW1wbGUtPnNpemUpOwotCi0gICAgaWYgKCgoc21hbGxvZmZzID09IC0xKQotICAgICAgICAgICAgfHwgKHNhbXBsZS0+b2Zmc2V0IDwgc21hbGxvZmZzKSkgJiYgKHNhbXBsZS0+c2l6ZSkpIHsKLSAgICAgIHNtYWxsaWR4ID0gaTsKLSAgICAgIHNtYWxsb2ZmcyA9IHNhbXBsZS0+b2Zmc2V0OwotICAgIH0KLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwKLSAgICAgICJzdHJlYW0gJWQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBkZW11eC0+b2Zmc2V0IDolIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgc21hbGxpZHgsIHNtYWxsb2ZmcywgZGVtdXgtPm9mZnNldCk7Ci0KLSAgaWYgKHNtYWxsaWR4ID09IC0xKQotICAgIHJldHVybiAtMTsKLQotICBzdHJlYW0gPSBkZW11eC0+c3RyZWFtc1tzbWFsbGlkeF07Ci0gIHNhbXBsZSA9ICZzdHJlYW0tPnNhbXBsZXNbc3RyZWFtLT5zYW1wbGVfaW5kZXhdOwotCi0gIGlmIChzYW1wbGUtPm9mZnNldCA+PSBkZW11eC0+b2Zmc2V0KSB7Ci0gICAgZGVtdXgtPnRvZHJvcCA9IHNhbXBsZS0+b2Zmc2V0IC0gZGVtdXgtPm9mZnNldDsKLSAgICByZXR1cm4gc2FtcGxlLT5zaXplICsgZGVtdXgtPnRvZHJvcDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgIlRoZXJlIHdhc24ndCBhbnkgZW50cnkgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlbXV4LT5vZmZzZXQpOwotICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9wb3N0X3Byb2dyZXNzIChHc3RRVERlbXV4ICogZGVtdXgsIGdpbnQgbnVtLCBnaW50IGRlbm9tKQotewotICBnaW50IHBlcmMgPSAoZ2ludCkgKChnZG91YmxlKSBudW0gKiAxMDAuMCAvIChnZG91YmxlKSBkZW5vbSk7Ci0KLSAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChkZW11eCksCi0gICAgICBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVF9DQVNUIChkZW11eCksCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJwcm9ncmVzcyIsICJwZXJjZW50IiwgR19UWVBFX0lOVCwgcGVyYywgTlVMTCkpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1xdGRlbXV4X3NlZWtfb2Zmc2V0IChHc3RRVERlbXV4ICogZGVtdXgsIGd1aW50NjQgb2Zmc2V0KQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlcyA9IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgZXZlbnQgPQotICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwgR1NUX1NFRUtfVFlQRV9TRVQsIG9mZnNldCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOwotCi0gIC8qIHN0b3JlIHNlcW51bSB0byBkcm9wIGZsdXNoIGV2ZW50cywgdGhleSBkb24ndCBuZWVkIHRvIHJlYWNoIGRvd25zdHJlYW0gKi8KLSAgZGVtdXgtPm9mZnNldF9zZWVrX3NlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPnNpbmtwYWQsIGV2ZW50KTsKLSAgZGVtdXgtPm9mZnNldF9zZWVrX3NlcW51bSA9IDA7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogY2hlY2sgZm9yIHNlZWthYmxlIHVwc3RyZWFtLCBhYm92ZSBhbmQgYmV5b25kIGEgbWVyZSBxdWVyeSAqLwotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X2NoZWNrX3NlZWthYmlsaXR5IChHc3RRVERlbXV4ICogZGVtdXgpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gc2Vla2FibGUgPSBGQUxTRTsKLSAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3AgPSAtMTsKLQotICBpZiAoZGVtdXgtPnVwc3RyZWFtX3NpemUpCi0gICAgcmV0dXJuOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zZWVraW5nIChHU1RfRk9STUFUX0JZVEVTKTsKLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKGRlbXV4LT5zaW5rcGFkLCBxdWVyeSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZWtpbmcgcXVlcnkgZmFpbGVkIik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCBOVUxMLCAmc2Vla2FibGUsICZzdGFydCwgJnN0b3ApOwotCi0gIC8qIHRyeSBoYXJkZXIgdG8gcXVlcnkgdXBzdHJlYW0gc2l6ZSBpZiB3ZSBkaWRuJ3QgZ2V0IGl0IHRoZSBmaXJzdCB0aW1lICovCi0gIGlmIChzZWVrYWJsZSAmJiBzdG9wID09IC0xKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJkb2luZyBkdXJhdGlvbiBxdWVyeSB0byBmaXggdXAgdW5zZXQgc3RvcCIpOwotICAgIGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAoZGVtdXgtPnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsICZzdG9wKTsKLSAgfQotCi0gIC8qIGlmIHVwc3RyZWFtIGRvZXNuJ3Qga25vdyB0aGUgc2l6ZSwgaXQncyBsaWtlbHkgdGhhdCBpdCdzIG5vdCBzZWVrYWJsZSBpbgotICAgKiBwcmFjdGljZSBldmVuIGlmIGl0IHRlY2huaWNhbGx5IG1heSBiZSBzZWVrYWJsZSAqLwotICBpZiAoc2Vla2FibGUgJiYgKHN0YXJ0ICE9IDAgfHwgc3RvcCA8PSBzdGFydCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZWthYmxlIGJ1dCB1bmtub3duIHN0YXJ0L3N0b3AgLT4gZGlzYWJsZSIpOwotICAgIHNlZWthYmxlID0gRkFMU0U7Ci0gIH0KLQotZG9uZToKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzZWVrYWJsZTogJWQgKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAtICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFUICIpIiwgc2Vla2FibGUsIHN0YXJ0LCBzdG9wKTsKLSAgZGVtdXgtPnVwc3RyZWFtX3NlZWthYmxlID0gc2Vla2FibGU7Ci0gIGRlbXV4LT51cHN0cmVhbV9zaXplID0gc2Vla2FibGUgPyBzdG9wIDogLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9kcm9wX2RhdGEgKEdzdFFURGVtdXggKiBkZW11eCwgZ2ludCBieXRlcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoYnl0ZXMgPD0gZGVtdXgtPnRvZHJvcCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiRHJvcHBpbmcgJWQgYnl0ZXMiLCBieXRlcyk7Ci0gIGdzdF9hZGFwdGVyX2ZsdXNoIChkZW11eC0+YWRhcHRlciwgYnl0ZXMpOwotICBkZW11eC0+bmVlZGVkYnl0ZXMgLT0gYnl0ZXM7Ci0gIGRlbXV4LT5vZmZzZXQgKz0gYnl0ZXM7Ci0gIGRlbXV4LT50b2Ryb3AgLT0gYnl0ZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9jaGVja19zZW5kX3BlbmRpbmdfc2VnbWVudCAoR3N0UVREZW11eCAqIGRlbXV4KQotewotICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCkpIHsKLSAgICBnaW50IGk7Ci0KLSAgICBnc3RfcXRkZW11eF9wdXNoX3BlbmRpbmdfbmV3c2VnbWVudCAoZGVtdXgpOwotICAgIC8qIGNsZWFyIHRvIHNlbmQgdGFncyBvbiBhbGwgc3RyZWFtcyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICAgIFF0RGVtdXhTdHJlYW0gKnN0cmVhbTsKLSAgICAgIHN0cmVhbSA9IGRlbXV4LT5zdHJlYW1zW2ldOwotICAgICAgZ3N0X3F0ZGVtdXhfcHVzaF90YWdzIChkZW11eCwgc3RyZWFtKTsKLSAgICAgIGlmIChzdHJlYW0tPnNwYXJzZSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKGRlbXV4LCAiU2VuZGluZyBnYXAgZXZlbnQgb24gc3RyZWFtICVkIiwgaSk7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5wYWQsCi0gICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2dhcCAoc3RyZWFtLT5zZWdtZW50LnBvc2l0aW9uLCBHU1RfQ0xPQ0tfVElNRV9OT05FKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9zZW5kX2dhcF9mb3Jfc2VnbWVudCAoR3N0UVREZW11eCAqIGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGdpbnQgc2VnbWVudF9pbmRleCwgR3N0Q2xvY2tUaW1lIHBvcykKLXsKLSAgR3N0Q2xvY2tUaW1lIHRzLCBkdXI7Ci0gIEdzdEV2ZW50ICpnYXA7Ci0KLSAgdHMgPSBwb3M7Ci0gIGR1ciA9Ci0gICAgICBzdHJlYW0tPnNlZ21lbnRzW3NlZ21lbnRfaW5kZXhdLmR1cmF0aW9uIC0gKHBvcyAtCi0gICAgICBzdHJlYW0tPnNlZ21lbnRzW3NlZ21lbnRfaW5kZXhdLnRpbWUpOwotICBnYXAgPSBnc3RfZXZlbnRfbmV3X2dhcCAodHMsIGR1cik7Ci0gIHN0cmVhbS0+dGltZV9wb3NpdGlvbiArPSBkdXI7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3RyZWFtLT5wYWQsICJQdXNoaW5nIGdhcCBmb3IgZW1wdHkgIgotICAgICAgInNlZ21lbnQ6ICUiIEdTVF9QVFJfRk9STUFULCBnYXApOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBnYXApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfc3RyZWFtX3NlbmRfaW5pdGlhbF9nYXBfc2VnbWVudHMgKEdzdFFURGVtdXggKiBkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtKQotewotICBnaW50IGk7Ci0KLSAgLyogUHVzaCBhbnkgaW5pdGlhbCBnYXAgc2VnbWVudHMgYmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlCi0gICAqICdyZWFsJyBkYXRhICovCi0gIGZvciAoaSA9IDA7IGkgPCBzdHJlYW0tPm5fc2VnbWVudHM7IGkrKykgewotICAgIGdzdF9xdGRlbXV4X2FjdGl2YXRlX3NlZ21lbnQgKGRlbXV4LCBzdHJlYW0sIGksIHN0cmVhbS0+dGltZV9wb3NpdGlvbik7Ci0KLSAgICBpZiAoUVRTRUdNRU5UX0lTX0VNUFRZICgmc3RyZWFtLT5zZWdtZW50c1tpXSkpIHsKLSAgICAgIGdzdF9xdGRlbXV4X3NlbmRfZ2FwX2Zvcl9zZWdtZW50IChkZW11eCwgc3RyZWFtLCBpLAotICAgICAgICAgIHN0cmVhbS0+dGltZV9wb3NpdGlvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIE9ubHkgc3VwcG9ydCBlbXB0eSBzZWdtZW50IGF0IHRoZSBiZWdpbm5pbmcgZm9sbG93ZWQgYnkKLSAgICAgICAqIG9uZSBub24tZW1wdHkgc2VnbWVudCwgdGhpcyB3YXMgY2hlY2tlZCB3aGVuIHBhcnNpbmcgdGhlCi0gICAgICAgKiBlZHRzIGF0b20sIGFycml2aW5nIGhlcmUgaXMgdW5leHBlY3RlZCAqLwotICAgICAgZ19hc3NlcnQgKGkgKyAxID09IHN0cmVhbS0+bl9zZWdtZW50cyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9xdGRlbXV4X2NoYWluIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGluYnVmKQotewotICBHc3RRVERlbXV4ICpkZW11eDsKLQotICBkZW11eCA9IEdTVF9RVERFTVVYIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgIlJlY2VpdmVkIGJ1ZmZlciBwdHM6JSIgR1NUX1RJTUVfRk9STUFUICIgZHRzOiUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiBvZmZzZXQ6JSIgR19HVUlOVDY0X0ZPUk1BVCAiIHNpemU6JSIgR19HU0laRV9GT1JNQVQgIiBkZW11eCBvZmZzZXQ6JSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChpbmJ1ZikpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVFMgKGluYnVmKSksIEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1ZiksCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChpbmJ1ZiksIGRlbXV4LT5vZmZzZXQpOwotCi0gIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChpbmJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKSB7Ci0gICAgZ2Jvb2xlYW4gaXNfZ2FwX2lucHV0ID0gRkFMU0U7Ci0gICAgZ2ludCBpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJHb3QgRElTQ09OVCwgbWFya2luZyBhbGwgc3RyZWFtcyBhcyBESVNDT05UIik7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZGVtdXgtPm5fc3RyZWFtczsgaSsrKSB7Ci0gICAgICBkZW11eC0+c3RyZWFtc1tpXS0+ZGlzY29udCA9IFRSVUU7Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgaWYgd2UgY2FuIGxhbmQgYmFjayBvbiBvdXIgZmVldCBpbiB0aGUgY2FzZSB3aGVyZSB1cHN0cmVhbSBpcwotICAgICAqIGhhbmRsaW5nIHRoZSBzZWVraW5nL3B1c2hpbmcgb2Ygc2FtcGxlcyB3aXRoIGdhcHMgaW4gYmV0d2VlbiAobGlrZQotICAgICAqIGluIHRoZSBjYXNlIG9mIHRyaWNrLW1vZGUgREFTSCBmb3IgZXhhbXBsZSkgKi8KLSAgICBpZiAoZGVtdXgtPnVwc3RyZWFtX2Zvcm1hdF9pc190aW1lCi0gICAgICAgICYmIEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1ZikgIT0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSkgewotICAgICAgZ2ludCBpOwotICAgICAgZm9yIChpID0gMDsgaSA8IGRlbXV4LT5uX3N0cmVhbXM7IGkrKykgewotICAgICAgICBndWludDMyIHJlczsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgIlN0cmVhbSAjJWQgLCBjaGVja2luZyBpZiBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAgICAgIiBpcyBhIHNhbXBsZSBzdGFydCIsIGksIEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1ZikpOwotICAgICAgICByZXMgPQotICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfZmluZF9pbmRleF9mb3JfZ2l2ZW5fbWVkaWFfb2Zmc2V0X2xpbmVhciAoZGVtdXgsCi0gICAgICAgICAgICBkZW11eC0+c3RyZWFtc1tpXSwgR1NUX0JVRkZFUl9PRkZTRVQgKGluYnVmKSk7Ci0gICAgICAgIGlmIChyZXMgIT0gLTEpIHsKLSAgICAgICAgICBRdERlbXV4U2FtcGxlICpzYW1wbGUgPSAmZGVtdXgtPnN0cmVhbXNbaV0tPnNhbXBsZXNbcmVzXTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJDaGVja2luZyBpZiBzYW1wbGUgJWQgZnJvbSBzdHJlYW0gJWQgaXMgdmFsaWQgKG9mZnNldDolIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgc2l6ZTolIiBHX0dVSU5UMzJfRk9STUFUICIpIiwgcmVzLCBpLAotICAgICAgICAgICAgICBzYW1wbGUtPm9mZnNldCwgc2FtcGxlLT5zaXplKTsKLSAgICAgICAgICBpZiAoc2FtcGxlLT5vZmZzZXQgPT0gR1NUX0JVRkZFUl9PRkZTRVQgKGluYnVmKSkgewotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICJuZXcgYnVmZmVyIGNvcnJlc3BvbmRzIHRvIGEgdmFsaWQgc2FtcGxlIDogJSIgR19HVUlOVDMyX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICByZXMpOwotICAgICAgICAgICAgaXNfZ2FwX2lucHV0ID0gVFJVRTsKLSAgICAgICAgICAgIC8qIFdlIGNhbiBnbyBiYWNrIHRvIHN0YW5kYXJkIHBsYXliYWNrIG1vZGUgKi8KLSAgICAgICAgICAgIGRlbXV4LT5zdGF0ZSA9IFFUREVNVVhfU1RBVEVfTU9WSUU7Ci0gICAgICAgICAgICAvKiBSZW1lbWJlciB3aGljaCBzYW1wbGUgdGhpcyBzdHJlYW0gaXMgYXQgKi8KLSAgICAgICAgICAgIGRlbXV4LT5zdHJlYW1zW2ldLT5zYW1wbGVfaW5kZXggPSByZXM7Ci0gICAgICAgICAgICAvKiBGaW5hbGx5IHVwZGF0ZSBhbGwgcHVzaC1iYXNlZCB2YWx1ZXMgdG8gdGhlIGV4cGVjdGVkIHZhbHVlcyAqLwotICAgICAgICAgICAgZGVtdXgtPm5lZWRlZGJ5dGVzID0gZGVtdXgtPnN0cmVhbXNbaV0tPnNhbXBsZXNbcmVzXS5zaXplOwotICAgICAgICAgICAgZGVtdXgtPnRvZHJvcCA9IDA7Ci0gICAgICAgICAgICBkZW11eC0+b2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGluYnVmKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghaXNfZ2FwX2lucHV0KSB7Ci0gICAgICAgIC8qIFJlc2V0IHN0YXRlIGlmIGl0J3MgYSByZWFsIGRpc2NvbnQgKi8KLSAgICAgICAgZGVtdXgtPm5lZWRlZGJ5dGVzID0gMTY7Ci0gICAgICAgIGRlbXV4LT5zdGF0ZSA9IFFUREVNVVhfU1RBVEVfSU5JVElBTDsKLSAgICAgICAgZGVtdXgtPm9mZnNldCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1Zik7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIFJldmVyc2UgZnJhZ21lbnRlZCBwbGF5YmFjaywgbmVlZCB0byBmbHVzaCBhbGwgd2UgaGF2ZSBiZWZvcmUKLSAgICAgKiBjb25zdW1pbmcgYSBuZXcgZnJhZ21lbnQuCi0gICAgICogVGhlIHNhbXBsZXMgYXJyYXkgaGF2ZSB0aGUgdGltZXN0YW1wcyBjYWxjdWxhdGVkIGJ5IGFjY3VtdWxhdGluZyB0aGUKLSAgICAgKiBkdXJhdGlvbnMgYnV0IHRoaXMgd29uJ3Qgd29yayBmb3IgcmV2ZXJzZSBwbGF5YmFjayBvZiBmcmFnbWVudHMgYXMKLSAgICAgKiB0aGUgdGltZXN0YW1wcyBvZiBhIHN1YnNlcXVlbnQgZnJhZ21lbnQgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgKiBwcmV2aW91c2x5IHJlY2VpdmVkIG9uZS4gKi8KLSAgICBpZiAoIWlzX2dhcF9pbnB1dCAmJiBkZW11eC0+ZnJhZ21lbnRlZCAmJiBkZW11eC0+c2VnbWVudC5yYXRlIDwgMCkgewotICAgICAgZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChkZW11eCwgVFJVRSk7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgZGVtdXgtPm5fc3RyZWFtczsgaSsrKQotICAgICAgICBnc3RfcXRkZW11eF9zdHJlYW1fZmx1c2hfc2FtcGxlc19kYXRhIChkZW11eCwgZGVtdXgtPnN0cmVhbXNbaV0pOwotICAgIH0KLSAgfQotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKGRlbXV4LT5hZGFwdGVyLCBpbmJ1Zik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAicHVzaGluZyBpbiBpbmJ1ZiAlcCwgbmVlZGVkYnl0ZXM6JXUsIGF2YWlsYWJsZTolIiBHX0dTSVpFX0ZPUk1BVCwgaW5idWYsCi0gICAgICBkZW11eC0+bmVlZGVkYnl0ZXMsIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmFkYXB0ZXIpKTsKLQotICByZXR1cm4gZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChkZW11eCwgRkFMU0UpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3F0ZGVtdXhfcHJvY2Vzc19hZGFwdGVyIChHc3RRVERlbXV4ICogZGVtdXgsIGdib29sZWFuIGZvcmNlKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIHdlIG5ldmVyIHJlYWxseSBtZWFuIHRvIGJ1ZmZlciB0aGF0IG11Y2ggKi8KLSAgaWYgKGRlbXV4LT5uZWVkZWRieXRlcyA9PSAtMSkgewotICAgIGdvdG8gZW9zOwotICB9Ci0KLSAgd2hpbGUgKCgoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcikpID49IGRlbXV4LT5uZWVkZWRieXRlcykgJiYKLSAgICAgIChyZXQgPT0gR1NUX0ZMT1dfT0sgfHwgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEICYmIGZvcmNlKSkpIHsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICB7Ci0gICAgICBndWludDY0IGRpc2NvbnRfb2Zmc2V0LCBkaXN0YW5jZV9mcm9tX2Rpc2NvbnQ7Ci0KLSAgICAgIGRpc2NvbnRfb2Zmc2V0ID0gZ3N0X2FkYXB0ZXJfb2Zmc2V0X2F0X2Rpc2NvbnQgKGRlbXV4LT5hZGFwdGVyKTsKLSAgICAgIGRpc3RhbmNlX2Zyb21fZGlzY29udCA9Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250IChkZW11eC0+YWRhcHRlcik7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICJzdGF0ZTolcyAsIGRlbXV4LT5uZWVkZWRieXRlczolZCwgZGVtdXgtPm9mZnNldDolIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiBhZGFwdGVyIG9mZnNldCA6JSIgR19HVUlOVDY0X0ZPUk1BVCAiICgrICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAiIGJ5dGVzKSIsIHF0X2RlbXV4X3N0YXRlX3N0cmluZyAoZGVtdXgtPnN0YXRlKSwgZGVtdXgtPm5lZWRlZGJ5dGVzLAotICAgICAgICAgIGRlbXV4LT5vZmZzZXQsIGRpc2NvbnRfb2Zmc2V0LCBkaXN0YW5jZV9mcm9tX2Rpc2NvbnQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3dpdGNoIChkZW11eC0+c3RhdGUpIHsKLSAgICAgIGNhc2UgUVRERU1VWF9TVEFURV9JTklUSUFMOnsKLSAgICAgICAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICAgICAgICBndWludDMyIGZvdXJjYzsKLSAgICAgICAgZ3VpbnQ2NCBzaXplOwotCi0gICAgICAgIGdzdF9xdGRlbXV4X2NoZWNrX3NlZWthYmlsaXR5IChkZW11eCk7Ci0KLSAgICAgICAgZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAoZGVtdXgtPmFkYXB0ZXIsIGRlbXV4LT5uZWVkZWRieXRlcyk7Ci0KLSAgICAgICAgLyogZ2V0IGZvdXJjYy9sZW5ndGgsIHNldCBuZWVkZWRieXRlcyAqLwotICAgICAgICBleHRyYWN0X2luaXRpYWxfbGVuZ3RoX2FuZF9mb3VyY2MgKChndWludDggKikgZGF0YSwgZGVtdXgtPm5lZWRlZGJ5dGVzLAotICAgICAgICAgICAgJnNpemUsICZmb3VyY2MpOwotICAgICAgICBnc3RfYWRhcHRlcl91bm1hcCAoZGVtdXgtPmFkYXB0ZXIpOwotICAgICAgICBkYXRhID0gTlVMTDsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJQZWVraW5nIGZvdW5kIFslIiBHU1RfRk9VUkNDX0ZPUk1BVCAiXSAiCi0gICAgICAgICAgICAic2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCBzaXplKTsKLSAgICAgICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgICAgICAgKF8oIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIpKSwKLSAgICAgICAgICAgICAgKCJpbml0aWFsIGF0b20gJyUiIEdTVF9GT1VSQ0NfRk9STUFUICInIGhhcyBlbXB0eSBsZW5ndGgiLAotICAgICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKSk7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZvdXJjYyA9PSBGT1VSQ0NfbWRhdCkgewotICAgICAgICAgIGdpbnQgbmV4dF9lbnRyeSA9IG5leHRfZW50cnlfc2l6ZSAoZGVtdXgpOwotICAgICAgICAgIGlmIChkZW11eC0+bl9zdHJlYW1zID4gMCAmJiAobmV4dF9lbnRyeSAhPSAtMSB8fCAhZGVtdXgtPmZyYWdtZW50ZWQpKSB7Ci0gICAgICAgICAgICAvKiB3ZSBoYXZlIHRoZSBoZWFkZXJzLCBzdGFydCBwbGF5YmFjayAqLwotICAgICAgICAgICAgZGVtdXgtPnN0YXRlID0gUVRERU1VWF9TVEFURV9NT1ZJRTsKLSAgICAgICAgICAgIGRlbXV4LT5uZWVkZWRieXRlcyA9IG5leHRfZW50cnk7Ci0gICAgICAgICAgICBkZW11eC0+bWRhdGxlZnQgPSBzaXplOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBubyBoZWFkZXJzIHlldCwgdHJ5IHRvIGdldCB0aGVtICovCi0gICAgICAgICAgICBndWludCBiczsKLSAgICAgICAgICAgIGdib29sZWFuIHJlczsKLSAgICAgICAgICAgIGd1aW50NjQgb2xkLCB0YXJnZXQ7Ci0KLSAgICAgICAgICBidWZmZXJfZGF0YToKLSAgICAgICAgICAgIG9sZCA9IGRlbXV4LT5vZmZzZXQ7Ci0gICAgICAgICAgICB0YXJnZXQgPSBvbGQgKyBzaXplOwotCi0gICAgICAgICAgICAvKiB0cnkgdG8ganVtcCBvdmVyIHRoZSBhdG9tIHdpdGggYSBzZWVrICovCi0gICAgICAgICAgICAvKiBvbmx5IGJvdGhlciBpZiBpdCBzZWVtcyB3b3J0aCBkb2luZyBzbywKLSAgICAgICAgICAgICAqIGFuZCBhdm9pZHMgcG9zc2libGUgdXBzdHJlYW0vc2VydmVyIHByb2JsZW1zICovCi0gICAgICAgICAgICBpZiAoZGVtdXgtPnVwc3RyZWFtX3NlZWthYmxlICYmCi0gICAgICAgICAgICAgICAgZGVtdXgtPnVwc3RyZWFtX3NpemUgPiA0ICogKDEgPDwgMjApKSB7Ci0gICAgICAgICAgICAgIHJlcyA9IHF0ZGVtdXhfc2Vla19vZmZzZXQgKGRlbXV4LCB0YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJza2lwcGluZyBzZWVrIik7Ci0gICAgICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2VlayBzdWNjZXNzIik7Ci0gICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRoZSBvZmZzZXQgZm8gdGhlIGZpcnN0IG1kYXQgc28gd2UgY2FuIHNlZWsgYmFjayB0byBpdAotICAgICAgICAgICAgICAgKiBhZnRlciB3ZSBoYXZlIHRoZSBoZWFkZXJzICovCi0gICAgICAgICAgICAgIGlmIChmb3VyY2MgPT0gRk9VUkNDX21kYXQgJiYgZGVtdXgtPmZpcnN0X21kYXQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBkZW11eC0+Zmlyc3RfbWRhdCA9IG9sZDsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImZpcnN0IG1kYXQgYXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgICAgICAgICAgZGVtdXgtPmZpcnN0X21kYXQpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIC8qIHNlZWsgd29ya2VkLCBjb250aW51ZSByZWFkaW5nICovCi0gICAgICAgICAgICAgIGRlbXV4LT5vZmZzZXQgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgIGRlbXV4LT5uZWVkZWRieXRlcyA9IDE2OwotICAgICAgICAgICAgICBkZW11eC0+c3RhdGUgPSBRVERFTVVYX1NUQVRFX0lOSVRJQUw7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvKiBzZWVrIGZhaWxlZCwgbmVlZCB0byBidWZmZXIgKi8KLSAgICAgICAgICAgICAgZGVtdXgtPm9mZnNldCA9IG9sZDsKLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzZWVrIGZhaWxlZC9za2lwcGVkIik7Ci0gICAgICAgICAgICAgIC8qIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBtZGF0IChvciBhbGlrZSkgYnVmZmVycyAqLwotICAgICAgICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi8KLSAgICAgICAgICAgICAgaWYgKGRlbXV4LT5tZGF0YnVmZmVyKQotICAgICAgICAgICAgICAgIGJzID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZGVtdXgtPm1kYXRidWZmZXIpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnMgPSAwOwotICAgICAgICAgICAgICBpZiAoc2l6ZSArIGJzID4gMTAgKiAoMSA8PCAyMCkpCi0gICAgICAgICAgICAgICAgZ290byBub19tb292OwotICAgICAgICAgICAgICBkZW11eC0+c3RhdGUgPSBRVERFTVVYX1NUQVRFX0JVRkZFUl9NREFUOwotICAgICAgICAgICAgICBkZW11eC0+bmVlZGVkYnl0ZXMgPSBzaXplOwotICAgICAgICAgICAgICBpZiAoIWRlbXV4LT5tZGF0YnVmZmVyKQotICAgICAgICAgICAgICAgIGRlbXV4LT5tZGF0b2Zmc2V0ID0gZGVtdXgtPm9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoc2l6ZSA+IFFUREVNVVhfTUFYX0FUT01fU0laRSkpIHsKLSAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgICAgICAgIChfKCJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iKSksCi0gICAgICAgICAgICAgICgiYXRvbSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIGhhcyBib2d1cyBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksIHNpemUpKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiB0aGlzIG1lYW5zIHdlIGFscmVhZHkgc3RhcnRlZCBidWZmZXJpbmcgYW5kIHN0aWxsIG5vIG1vb3YgaGVhZGVyLAotICAgICAgICAgICAqIGxldCdzIGNvbnRpbnVlIGJ1ZmZlcmluZyBldmVyeXRoaW5nIHRpbGwgd2UgZ2V0IG1vb3YgKi8KLSAgICAgICAgICBpZiAoZGVtdXgtPm1kYXRidWZmZXIgJiYgIShmb3VyY2MgPT0gRk9VUkNDX21vb3YKLSAgICAgICAgICAgICAgICAgIHx8IGZvdXJjYyA9PSBGT1VSQ0NfbW9vZikpCi0gICAgICAgICAgICBnb3RvIGJ1ZmZlcl9kYXRhOwotICAgICAgICAgIGRlbXV4LT5uZWVkZWRieXRlcyA9IHNpemU7Ci0gICAgICAgICAgZGVtdXgtPnN0YXRlID0gUVRERU1VWF9TVEFURV9IRUFERVI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFFUREVNVVhfU1RBVEVfSEVBREVSOnsKLSAgICAgICAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICAgICAgICBndWludDMyIGZvdXJjYzsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkluIGhlYWRlciIpOwotCi0gICAgICAgIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKGRlbXV4LT5hZGFwdGVyLCBkZW11eC0+bmVlZGVkYnl0ZXMpOwotCi0gICAgICAgIC8qIHBhcnNlIHRoZSBoZWFkZXIgKi8KLSAgICAgICAgZXh0cmFjdF9pbml0aWFsX2xlbmd0aF9hbmRfZm91cmNjIChkYXRhLCBkZW11eC0+bmVlZGVkYnl0ZXMsIE5VTEwsCi0gICAgICAgICAgICAmZm91cmNjKTsKLSAgICAgICAgaWYgKGZvdXJjYyA9PSBGT1VSQ0NfbW9vdikgewotICAgICAgICAgIGdpbnQgbjsKLQotICAgICAgICAgIC8qIGluIHVzdWFsIGZyYWdtZW50ZWQgc2V0dXAgd2UgY291bGQgdHJ5IHRvIHNjYW4gZm9yIG1vcmUKLSAgICAgICAgICAgKiBhbmQgZW5kIHVwIGF0IHRoZSB0aGUgbW9vdiAoYWZ0ZXIgbWRhdCkgYWdhaW4gKi8KLSAgICAgICAgICBpZiAoZGVtdXgtPmdvdF9tb292ICYmIGRlbXV4LT5uX3N0cmVhbXMgPiAwICYmCi0gICAgICAgICAgICAgICghZGVtdXgtPmZyYWdtZW50ZWQKLSAgICAgICAgICAgICAgICAgIHx8IGRlbXV4LT5sYXN0X21vb3Zfb2Zmc2V0ID09IGRlbXV4LT5vZmZzZXQpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAiU2tpcHBpbmcgbW9vdiBhdG9tIGFzIHdlIGhhdmUgKHRoaXMpIG9uZSBhbHJlYWR5Iik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiUGFyc2luZyBbbW9vdl0iKTsKLQotICAgICAgICAgICAgaWYgKGRlbXV4LT5nb3RfbW9vdiAmJiBkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJHb3QgYSBzZWNvbmQgbW9vdiwgY2xlYW4gdXAgZGF0YSBmcm9tIG9sZCBvbmUiKTsKLSAgICAgICAgICAgICAgaWYgKGRlbXV4LT5tb292X25vZGVfY29tcHJlc3NlZCkgewotICAgICAgICAgICAgICAgIGdfbm9kZV9kZXN0cm95IChkZW11eC0+bW9vdl9ub2RlX2NvbXByZXNzZWQpOwotICAgICAgICAgICAgICAgIGlmIChkZW11eC0+bW9vdl9ub2RlKQotICAgICAgICAgICAgICAgICAgZ19mcmVlIChkZW11eC0+bW9vdl9ub2RlLT5kYXRhKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBkZW11eC0+bW9vdl9ub2RlX2NvbXByZXNzZWQgPSBOVUxMOwotICAgICAgICAgICAgICBpZiAoZGVtdXgtPm1vb3Zfbm9kZSkKLSAgICAgICAgICAgICAgICBnX25vZGVfZGVzdHJveSAoZGVtdXgtPm1vb3Zfbm9kZSk7Ci0gICAgICAgICAgICAgIGRlbXV4LT5tb292X25vZGUgPSBOVUxMOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLyogcHJlcGFyZSBuZXdzZWdtZW50IHRvIHNlbmQgd2hlbiBzdHJlYW1pbmcgYWN0dWFsbHkgc3RhcnRzICovCi0gICAgICAgICAgICAgIGlmICghZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCkgewotICAgICAgICAgICAgICAgIGRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQgPQotICAgICAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZkZW11eC0+c2VnbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgICAgICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50LAotICAgICAgICAgICAgICAgICAgICAgIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVtdXgtPmxhc3RfbW9vdl9vZmZzZXQgPSBkZW11eC0+b2Zmc2V0OwotCi0gICAgICAgICAgICBxdGRlbXV4X3BhcnNlX21vb3YgKGRlbXV4LCBkYXRhLCBkZW11eC0+bmVlZGVkYnl0ZXMpOwotICAgICAgICAgICAgcXRkZW11eF9ub2RlX2R1bXAgKGRlbXV4LCBkZW11eC0+bW9vdl9ub2RlKTsKLSAgICAgICAgICAgIHF0ZGVtdXhfcGFyc2VfdHJlZSAoZGVtdXgpOwotICAgICAgICAgICAgcXRkZW11eF9wcmVwYXJlX3N0cmVhbXMgKGRlbXV4KTsKLSAgICAgICAgICAgIGlmICghZGVtdXgtPmdvdF9tb292KQotICAgICAgICAgICAgICBxdGRlbXV4X2V4cG9zZV9zdHJlYW1zIChkZW11eCk7Ci0gICAgICAgICAgICBlbHNlIHsKLQotICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7Ci0gICAgICAgICAgICAgICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gZGVtdXgtPnN0cmVhbXNbbl07Ci0KLSAgICAgICAgICAgICAgICBnc3RfcXRkZW11eF9jb25maWd1cmVfc3RyZWFtIChkZW11eCwgc3RyZWFtKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZW11eC0+Z290X21vb3YgPSBUUlVFOwotICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfY2hlY2tfc2VuZF9wZW5kaW5nX3NlZ21lbnQgKGRlbXV4KTsKLQotICAgICAgICAgICAgLyogZnJhZ21lbnRlZCBzdHJlYW1zIGhlYWRlcnMgc2hvdWxkbid0IGNvbnRhaW4gZWR0cyBhdG9tcyAqLwotICAgICAgICAgICAgaWYgKCFkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgZGVtdXgtPm5fc3RyZWFtczsgbisrKSB7Ci0gICAgICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX3NlbmRfaW5pdGlhbF9nYXBfc2VnbWVudHMgKGRlbXV4LAotICAgICAgICAgICAgICAgICAgICBkZW11eC0+c3RyZWFtc1tuXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRlbXV4LT5tb292X25vZGVfY29tcHJlc3NlZCkgewotICAgICAgICAgICAgICBnX25vZGVfZGVzdHJveSAoZGVtdXgtPm1vb3Zfbm9kZV9jb21wcmVzc2VkKTsKLSAgICAgICAgICAgICAgZ19mcmVlIChkZW11eC0+bW9vdl9ub2RlLT5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbXV4LT5tb292X25vZGVfY29tcHJlc3NlZCA9IE5VTEw7Ci0gICAgICAgICAgICBnX25vZGVfZGVzdHJveSAoZGVtdXgtPm1vb3Zfbm9kZSk7Ci0gICAgICAgICAgICBkZW11eC0+bW9vdl9ub2RlID0gTlVMTDsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiRmluaXNoZWQgcGFyc2luZyB0aGUgaGVhZGVyIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGZvdXJjYyA9PSBGT1VSQ0NfbW9vZikgewotICAgICAgICAgIGlmICgoZGVtdXgtPmdvdF9tb292IHx8IGRlbXV4LT5tZWRpYV9jYXBzKSAmJiBkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgICAgICAgICAgZ3VpbnQ2NCBkaXN0ID0gMDsKLSAgICAgICAgICAgIEdzdENsb2NrVGltZSBwcmV2X3B0czsKLSAgICAgICAgICAgIGd1aW50NjQgcHJldl9vZmZzZXQ7Ci0gICAgICAgICAgICBndWludDY0IGFkYXB0ZXJfZGlzY29udF9vZmZzZXQsIGFkYXB0ZXJfZGlzY29udF9kaXN0OwotCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlBhcnNpbmcgW21vb2ZdIik7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBtb29mIGJ1ZmZlciBpcyByZWxldmFudCBhcyBzb21lIHNjZW5hcmlvcwotICAgICAgICAgICAgICogd29uJ3QgaGF2ZSB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaW4gdGhlIGF0b21zLiBXaGVuZXZlciBhIG5ldwotICAgICAgICAgICAgICogYnVmZmVyIGhhcyBzdGFydGVkLCB3ZSBnZXQgdGhhdCBidWZmZXIncyBQVFMgYW5kIHVzZSBpdCBhcyBhIGJhc2UKLSAgICAgICAgICAgICAqIHRpbWVzdGFtcCBmb3IgdGhlIHRydW4gZW50cmllcy4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciB0aW1lc3RhbXAgYW5kIHN0YXJ0aW5nIHBvaW50Ci0gICAgICAgICAgICAgKiB3ZSB1c2UgZ3N0X2FkYXB0ZXJfcHJldl9wdHMgdGhhdCBnaXZlcyB1cyB0aGUgUFRTIGFuZCB0aGUgZGlzdGFuY2UKLSAgICAgICAgICAgICAqIGZyb20gdGhlIGJlZ2dpbmluZyBvZiB0aGUgYnVmZmVyLCB3aXRoIHRoZSBkaXN0YW5jZSBhbmQgZGVtdXgtPm9mZnNldAotICAgICAgICAgICAgICogd2Uga25vdyBpZiBpdCBpcyBzdGlsbCB0aGUgc2FtZSBidWZmZXIgb3Igbm90LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcmV2X3B0cyA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChkZW11eC0+YWRhcHRlciwgJmRpc3QpOwotICAgICAgICAgICAgcHJldl9vZmZzZXQgPSBkZW11eC0+b2Zmc2V0IC0gZGlzdDsKLSAgICAgICAgICAgIGlmIChkZW11eC0+ZnJhZ21lbnRfc3RhcnRfb2Zmc2V0ID09IC0xCi0gICAgICAgICAgICAgICAgfHwgcHJldl9vZmZzZXQgPiBkZW11eC0+ZnJhZ21lbnRfc3RhcnRfb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgIGRlbXV4LT5mcmFnbWVudF9zdGFydF9vZmZzZXQgPSBwcmV2X29mZnNldDsKLSAgICAgICAgICAgICAgZGVtdXgtPmZyYWdtZW50X3N0YXJ0ID0gcHJldl9wdHM7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICAgIk5ldyBmcmFnbWVudCBzdGFydCBmb3VuZCBhdDogJSIgR19HVUlOVDY0X0ZPUk1BVCAiIDogJSIKLSAgICAgICAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgZGVtdXgtPmZyYWdtZW50X3N0YXJ0X29mZnNldCwKLSAgICAgICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5mcmFnbWVudF9zdGFydCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBXZSBjYW4ndCB1c2UgcHJldl9vZmZzZXQoKSBoZXJlIGJlY2F1c2UgdGhpcyB3b3VsZCByZXF1aXJlCi0gICAgICAgICAgICAgKiB1cHN0cmVhbSB0byBzZXQgY29uc2lzdGVudCBhbmQgY29ycmVjdCBvZmZzZXRzIG9uIGFsbCBidWZmZXJzCi0gICAgICAgICAgICAgKiBzaW5jZSB0aGUgZGlzY29udC4gTm90aGluZyBldmVyIGRpZCB0aGF0IGluIHRoZSBwYXN0IGFuZCB3ZQotICAgICAgICAgICAgICogd291bGQgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGVyZSB0aGVuLgotICAgICAgICAgICAgICogSW5zdGVhZCB0YWtlIHRoZSBvZmZzZXQgd2UgaGFkIGF0IHRoZSBsYXN0IGRpc2NvbnQgYW5kIGNvdW50Ci0gICAgICAgICAgICAgKiB0aGUgYnl0ZXMgZnJvbSB0aGVyZS4gVGhpcyB3b3JrcyB3aXRoIG9sZCBjb2RlIGFzIHRoZXJlIHdvdWxkCi0gICAgICAgICAgICAgKiBiZSBubyBkaXNjb250IGJldHdlZW4gbW9vdiBhbmQgbW9vZiwgYW5kIGFsc28gd29ya3Mgd2l0aAotICAgICAgICAgICAgICogYWRhcHRpdmVkZW11eCB3aGljaCBjb3JyZWN0bHkgc2V0cyBvZmZzZXQgYW5kIHdpbGwgc2V0IHRoZQotICAgICAgICAgICAgICogRElTQ09OVCBmbGFnIGFjY29yZGluZ2x5IHdoZW4gbmVlZGVkLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIFdlIGFsc28gb25seSBkbyB0aGlzIGZvciB1cHN0cmVhbSBUSU1FIHNlZ21lbnRzIGFzIG90aGVyd2lzZQotICAgICAgICAgICAgICogdGhlcmUgYXJlIHBvdGVudGlhbCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwcm9ibGVtcyB3aXRoCi0gICAgICAgICAgICAgKiBzZWVraW5nIGluIFBVU0ggbW9kZSBhbmQgdXBzdHJlYW0gcHJvdmlkaW5nIGluY29uc2lzdGVudAotICAgICAgICAgICAgICogdGltZXN0YW1wcy4gKi8KLSAgICAgICAgICAgIGFkYXB0ZXJfZGlzY29udF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX29mZnNldF9hdF9kaXNjb250IChkZW11eC0+YWRhcHRlcik7Ci0gICAgICAgICAgICBhZGFwdGVyX2Rpc2NvbnRfZGlzdCA9Ci0gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZGlzdGFuY2VfZnJvbV9kaXNjb250IChkZW11eC0+YWRhcHRlcik7Ci0KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICJkZW11eCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGFkYXB0ZXIgb2Zmc2V0ICUiCi0gICAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiICgrICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieXRlcykiLAotICAgICAgICAgICAgICAgIGRlbXV4LT5vZmZzZXQsIGFkYXB0ZXJfZGlzY29udF9vZmZzZXQsIGFkYXB0ZXJfZGlzY29udF9kaXN0KTsKLQotICAgICAgICAgICAgaWYgKGRlbXV4LT51cHN0cmVhbV9mb3JtYXRfaXNfdGltZSkgewotICAgICAgICAgICAgICBkZW11eC0+bW9vZl9vZmZzZXQgPSBhZGFwdGVyX2Rpc2NvbnRfb2Zmc2V0OwotICAgICAgICAgICAgICBpZiAoZGVtdXgtPm1vb2Zfb2Zmc2V0ICE9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpCi0gICAgICAgICAgICAgICAgZGVtdXgtPm1vb2Zfb2Zmc2V0ICs9IGFkYXB0ZXJfZGlzY29udF9kaXN0OwotICAgICAgICAgICAgICBpZiAoZGVtdXgtPm1vb2Zfb2Zmc2V0ID09IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUpCi0gICAgICAgICAgICAgICAgZGVtdXgtPm1vb2Zfb2Zmc2V0ID0gZGVtdXgtPm9mZnNldDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGRlbXV4LT5tb29mX29mZnNldCA9IGRlbXV4LT5vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcXRkZW11eF9wYXJzZV9tb29mIChkZW11eCwgZGF0YSwgZGVtdXgtPm5lZWRlZGJ5dGVzLAotICAgICAgICAgICAgICAgICAgICBkZW11eC0+bW9vZl9vZmZzZXQsIE5VTEwpKSB7Ci0gICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3VubWFwIChkZW11eC0+YWRhcHRlcik7Ci0gICAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBpbiBNU1Mgd2UgbmVlZCB0byBleHBvc2UgdGhlIHBhZHMgYWZ0ZXIgdGhlIGZpcnN0IG1vb2YgYXMgd2Ugd29uJ3QgZ2V0IGEgbW9vdiAqLwotICAgICAgICAgICAgaWYgKGRlbXV4LT5tc3NfbW9kZSAmJiAhZGVtdXgtPmV4cG9zZWQpIHsKLSAgICAgICAgICAgICAgaWYgKCFkZW11eC0+cGVuZGluZ19uZXdzZWdtZW50KSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJuZXcgcGVuZGluZ19uZXdzZWdtZW50Iik7Ci0gICAgICAgICAgICAgICAgZGVtdXgtPnBlbmRpbmdfbmV3c2VnbWVudCA9Ci0gICAgICAgICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmRlbXV4LT5zZWdtZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGRlbXV4LT5wZW5kaW5nX25ld3NlZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBxdGRlbXV4X2V4cG9zZV9zdHJlYW1zIChkZW11eCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiRGlzY2FyZGluZyBbbW9vZl0iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZm91cmNjID09IEZPVVJDQ19mdHlwKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJQYXJzaW5nIFtmdHlwXSIpOwotICAgICAgICAgIHF0ZGVtdXhfcGFyc2VfZnR5cCAoZGVtdXgsIGRhdGEsIGRlbXV4LT5uZWVkZWRieXRlcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZm91cmNjID09IEZPVVJDQ191dWlkKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJQYXJzaW5nIFt1dWlkXSIpOwotICAgICAgICAgIHF0ZGVtdXhfcGFyc2VfdXVpZCAoZGVtdXgsIGRhdGEsIGRlbXV4LT5uZWVkZWRieXRlcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZm91cmNjID09IEZPVVJDQ19zaWR4KSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJQYXJzaW5nIFtzaWR4XSIpOwotICAgICAgICAgIHF0ZGVtdXhfcGFyc2Vfc2lkeCAoZGVtdXgsIGRhdGEsIGRlbXV4LT5uZWVkZWRieXRlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgIlVua25vd24gZm91cmNjIHdoaWxlIHBhcnNpbmcgaGVhZGVyIDogJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0gICAgICAgICAgLyogTGV0J3MganVtcCB0aGF0IG9uZSBhbmQgZ28gYmFjayB0byBpbml0aWFsIHN0YXRlICovCi0gICAgICAgIH0KLSAgICAgICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGRlbXV4LT5hZGFwdGVyKTsKLSAgICAgICAgZGF0YSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKGRlbXV4LT5tZGF0YnVmZmVyICYmIGRlbXV4LT5uX3N0cmVhbXMpIHsKLSAgICAgICAgICBnc2l6ZSByZW1haW5pbmdfZGF0YV9zaXplID0gMDsKLQotICAgICAgICAgIC8qIHRoZSBtZGF0IHdhcyBiZWZvcmUgdGhlIGhlYWRlciAqLwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiV2UgaGF2ZSBuX3N0cmVhbXM6JWQgYW5kIG1kYXRidWZmZXI6JXAiLAotICAgICAgICAgICAgICBkZW11eC0+bl9zdHJlYW1zLCBkZW11eC0+bWRhdGJ1ZmZlcik7Ci0gICAgICAgICAgLyogcmVzdG9yZSBvdXIgYWRhcHRlci9vZmZzZXQgdmlldyBvZiB0aGluZ3Mgd2l0aCB1cHN0cmVhbTsKLSAgICAgICAgICAgKiBwdXQgcHJlY2VkaW5nIGJ1ZmZlcmVkIGRhdGEgYWhlYWQgb2YgY3VycmVudCBtb292IGRhdGEuCi0gICAgICAgICAgICogVGhpcyBzaG91bGQgYWxzbyBoYW5kbGUgZXZpbCBtZGF0LCBtb292LCBtZGF0IGNhc2VzIGFuZCBhbGlrZSAqLwotICAgICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChkZW11eC0+YWRhcHRlciwgZGVtdXgtPm5lZWRlZGJ5dGVzKTsKLQotICAgICAgICAgIC8qIFN0b3JlIGFueSByZW1haW5pbmcgZGF0YSBhZnRlciB0aGUgbWRhdCBmb3IgbGF0ZXIgdXNhZ2UgKi8KLSAgICAgICAgICByZW1haW5pbmdfZGF0YV9zaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcik7Ci0gICAgICAgICAgaWYgKHJlbWFpbmluZ19kYXRhX3NpemUgPiAwKSB7Ci0gICAgICAgICAgICBnX2Fzc2VydCAoZGVtdXgtPnJlc3RvcmVkYXRhX2J1ZmZlciA9PSBOVUxMKTsKLSAgICAgICAgICAgIGRlbXV4LT5yZXN0b3JlZGF0YV9idWZmZXIgPQotICAgICAgICAgICAgICAgIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkZW11eC0+YWRhcHRlciwgcmVtYWluaW5nX2RhdGFfc2l6ZSk7Ci0gICAgICAgICAgICBkZW11eC0+cmVzdG9yZWRhdGFfb2Zmc2V0ID0gZGVtdXgtPm9mZnNldCArIGRlbXV4LT5uZWVkZWRieXRlczsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICJTdG9yZWQgJSIgR19HU0laRV9GT1JNQVQgIiBwb3N0IG1kYXQgYnl0ZXMgYXQgb2Zmc2V0ICUiCi0gICAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgcmVtYWluaW5nX2RhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICBkZW11eC0+cmVzdG9yZWRhdGFfb2Zmc2V0KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBnc3RfYWRhcHRlcl9wdXNoIChkZW11eC0+YWRhcHRlciwgZGVtdXgtPm1kYXRidWZmZXIpOwotICAgICAgICAgIGRlbXV4LT5tZGF0YnVmZmVyID0gTlVMTDsKLSAgICAgICAgICBkZW11eC0+b2Zmc2V0ID0gZGVtdXgtPm1kYXRvZmZzZXQ7Ci0gICAgICAgICAgZGVtdXgtPm5lZWRlZGJ5dGVzID0gbmV4dF9lbnRyeV9zaXplIChkZW11eCk7Ci0gICAgICAgICAgZGVtdXgtPnN0YXRlID0gUVRERU1VWF9TVEFURV9NT1ZJRTsKLSAgICAgICAgICBkZW11eC0+bWRhdGxlZnQgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGRlbXV4LT5hZGFwdGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkNhcnJ5aW5nIG9uIG5vcm1hbGx5Iik7Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKGRlbXV4LT5hZGFwdGVyLCBkZW11eC0+bmVlZGVkYnl0ZXMpOwotCi0gICAgICAgICAgLyogb25seSBnbyBiYWNrIHRvIHRoZSBtZGF0IGlmIHRoZXJlIGFyZSBzYW1wbGVzIHRvIHBsYXkgKi8KLSAgICAgICAgICBpZiAoZGVtdXgtPmdvdF9tb292ICYmIGRlbXV4LT5maXJzdF9tZGF0ICE9IC0xCi0gICAgICAgICAgICAgICYmIGhhc19uZXh0X2VudHJ5IChkZW11eCkpIHsKLSAgICAgICAgICAgIGdib29sZWFuIHJlczsKLQotICAgICAgICAgICAgLyogd2UgbmVlZCB0byBzZWVrIGJhY2sgKi8KLSAgICAgICAgICAgIHJlcyA9IHF0ZGVtdXhfc2Vla19vZmZzZXQgKGRlbXV4LCBkZW11eC0+Zmlyc3RfbWRhdCk7Ci0gICAgICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICAgIGRlbXV4LT5vZmZzZXQgPSBkZW11eC0+Zmlyc3RfbWRhdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU2VlayBiYWNrIGZhaWxlZCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZW11eC0+b2Zmc2V0ICs9IGRlbXV4LT5uZWVkZWRieXRlczsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVtdXgtPm5lZWRlZGJ5dGVzID0gMTY7Ci0gICAgICAgICAgZGVtdXgtPnN0YXRlID0gUVRERU1VWF9TVEFURV9JTklUSUFMOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIFFUREVNVVhfU1RBVEVfQlVGRkVSX01EQVQ6ewotICAgICAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICAgICAgZ3VpbnQ4IGZvdXJjY1s0XTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkdvdCBvdXIgYnVmZmVyIGF0IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgZGVtdXgtPm9mZnNldCk7Ci0gICAgICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkZW11eC0+YWRhcHRlciwgZGVtdXgtPm5lZWRlZGJ5dGVzKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWYsIDAsIGZvdXJjYywgNCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibWRhdGJ1ZmZlciBzdGFydHMgd2l0aCAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoUVRfRk9VUkNDIChmb3VyY2MpKSk7Ci0gICAgICAgIGlmIChkZW11eC0+bWRhdGJ1ZmZlcikKLSAgICAgICAgICBkZW11eC0+bWRhdGJ1ZmZlciA9IGdzdF9idWZmZXJfYXBwZW5kIChkZW11eC0+bWRhdGJ1ZmZlciwgYnVmKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGRlbXV4LT5tZGF0YnVmZmVyID0gYnVmOwotICAgICAgICBkZW11eC0+b2Zmc2V0ICs9IGRlbXV4LT5uZWVkZWRieXRlczsKLSAgICAgICAgZGVtdXgtPm5lZWRlZGJ5dGVzID0gMTY7Ci0gICAgICAgIGRlbXV4LT5zdGF0ZSA9IFFUREVNVVhfU1RBVEVfSU5JVElBTDsKLSAgICAgICAgZ3N0X3F0ZGVtdXhfcG9zdF9wcm9ncmVzcyAoZGVtdXgsIDEsIDEpOwotCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBRVERFTVVYX1NUQVRFX01PVklFOnsKLSAgICAgICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKLSAgICAgICAgUXREZW11eFNhbXBsZSAqc2FtcGxlOwotICAgICAgICBpbnQgaSA9IC0xOwotICAgICAgICBHc3RDbG9ja1RpbWUgZHRzLCBwdHMsIGR1cmF0aW9uOwotICAgICAgICBnYm9vbGVhbiBrZXlmcmFtZTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICJCRUdJTiAvLyBpbiBNT1ZJRSBmb3Igb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlbXV4LT5vZmZzZXQpOwotCi0gICAgICAgIGlmIChkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibWRhdCByZW1haW5pbmcgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgICAgZGVtdXgtPm1kYXRsZWZ0KTsKLSAgICAgICAgICBpZiAoR19MSUtFTFkgKGRlbXV4LT50b2Ryb3AgPCBkZW11eC0+bWRhdGxlZnQpKSB7Ci0gICAgICAgICAgICAvKiBpZiBuZWVkZWQgZGF0YSBzdGFydHMgd2l0aGluIHRoaXMgYXRvbSwKLSAgICAgICAgICAgICAqIHRoZW4gaXQgc2hvdWxkIG5vdCBleGNlZWQgdGhpcyBhdG9tICovCi0gICAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPm5lZWRlZGJ5dGVzID4gZGVtdXgtPm1kYXRsZWZ0KSkgewotICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgICAgICAgICAgICAoXygiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIikpLAotICAgICAgICAgICAgICAgICAgKCJzYW1wbGUgZGF0YSBjcm9zc2VzIGF0b20gYm91bmRhcnkiKSk7Ci0gICAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbXV4LT5tZGF0bGVmdCAtPSBkZW11eC0+bmVlZGVkYnl0ZXM7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZGF0YSBhdG9tIGVtcHRpZWQ7IHJlc3VtaW5nIGF0b20gc2NhbiIpOwotICAgICAgICAgICAgLyogc28gd2UgYXJlIGRyb3BwaW5nIG1vcmUgdGhhbiBsZWZ0IGluIHRoaXMgYXRvbSAqLwotICAgICAgICAgICAgZ3N0X3F0ZGVtdXhfZHJvcF9kYXRhIChkZW11eCwgZGVtdXgtPm1kYXRsZWZ0KTsKLSAgICAgICAgICAgIGRlbXV4LT5tZGF0bGVmdCA9IDA7Ci0KLSAgICAgICAgICAgIC8qIG5lZWQgdG8gcmVzdW1lIGF0b20gcGFyc2luZyBzbyB3ZSBkbyBub3QgbWlzcyBhbnkgb3RoZXIgcGllY2VzICovCi0gICAgICAgICAgICBkZW11eC0+c3RhdGUgPSBRVERFTVVYX1NUQVRFX0lOSVRJQUw7Ci0gICAgICAgICAgICBkZW11eC0+bmVlZGVkYnl0ZXMgPSAxNjsKLQotICAgICAgICAgICAgLyogY2hlY2sgaWYgdGhlcmUgd2FzIGFueSBzdG9yZWQgcG9zdCBtZGF0IGRhdGEgZnJvbSBwcmV2aW91cyBidWZmZXJzICovCi0gICAgICAgICAgICBpZiAoZGVtdXgtPnJlc3RvcmVkYXRhX2J1ZmZlcikgewotICAgICAgICAgICAgICBnX2Fzc2VydCAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcikgPT0gMCk7Ci0KLSAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAoZGVtdXgtPmFkYXB0ZXIsIGRlbXV4LT5yZXN0b3JlZGF0YV9idWZmZXIpOwotICAgICAgICAgICAgICBkZW11eC0+cmVzdG9yZWRhdGFfYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgICAgZGVtdXgtPm9mZnNldCA9IGRlbXV4LT5yZXN0b3JlZGF0YV9vZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZW11eC0+dG9kcm9wKSB7Ci0gICAgICAgICAgaWYgKGRlbXV4LT5jZW5jX2F1eF9pbmZvX29mZnNldCA+IDApIHsKLSAgICAgICAgICAgIEdzdEJ5dGVSZWFkZXIgYnI7Ci0gICAgICAgICAgICBjb25zdCBndWludDggKmRhdGE7Ci0KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicGFyc2luZyBjZW5jIGF1eGlsaWFyeSBpbmZvIik7Ci0gICAgICAgICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChkZW11eC0+YWRhcHRlciwgZGVtdXgtPnRvZHJvcCk7Ci0gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJmJyLCBkYXRhICsgOCwgZGVtdXgtPnRvZHJvcCk7Ci0gICAgICAgICAgICBpZiAoIXF0ZGVtdXhfcGFyc2VfY2VuY19hdXhfaW5mbyAoZGVtdXgsIGRlbXV4LT5zdHJlYW1zWzBdLCAmYnIsCi0gICAgICAgICAgICAgICAgICAgIGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzLCBkZW11eC0+Y2VuY19hdXhfc2FtcGxlX2NvdW50KSkgewotICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChkZW11eCwgImZhaWxlZCB0byBwYXJzZSBjZW5jIGF1eGlsaWFyeSBpbmZvIik7Ci0gICAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgICAgICBnc3RfYWRhcHRlcl91bm1hcCAoZGVtdXgtPmFkYXB0ZXIpOwotICAgICAgICAgICAgICBnX2ZyZWUgKGRlbXV4LT5jZW5jX2F1eF9pbmZvX3NpemVzKTsKLSAgICAgICAgICAgICAgZGVtdXgtPmNlbmNfYXV4X2luZm9fc2l6ZXMgPSBOVUxMOwotICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZW11eC0+Y2VuY19hdXhfaW5mb19vZmZzZXQgPSAwOwotICAgICAgICAgICAgZ19mcmVlIChkZW11eC0+Y2VuY19hdXhfaW5mb19zaXplcyk7Ci0gICAgICAgICAgICBkZW11eC0+Y2VuY19hdXhfaW5mb19zaXplcyA9IE5VTEw7Ci0gICAgICAgICAgICBnc3RfYWRhcHRlcl91bm1hcCAoZGVtdXgtPmFkYXB0ZXIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfcXRkZW11eF9kcm9wX2RhdGEgKGRlbXV4LCBkZW11eC0+dG9kcm9wKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGZpcnN0IGJ1ZmZlcj8gKi8KLSAgICAgICAgLyogaW5pdGlhbCBuZXdzZWdtZW50IHNlbnQgaGVyZSBhZnRlciBoYXZpbmcgYWRkZWQgcGFkcywKLSAgICAgICAgICogcG9zc2libGUgb3RoZXJzIGluIHNpbmtfZXZlbnQgKi8KLSAgICAgICAgZ3N0X3F0ZGVtdXhfY2hlY2tfc2VuZF9wZW5kaW5nX3NlZ21lbnQgKGRlbXV4KTsKLQotICAgICAgICAvKiBGaWd1cmUgb3V0IHdoaWNoIHN0cmVhbSB0aGlzIHBhY2tldCBiZWxvbmdzIHRvICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAgICBzdHJlYW0gPSBkZW11eC0+c3RyZWFtc1tpXTsKLSAgICAgICAgICBpZiAoc3RyZWFtLT5zYW1wbGVfaW5kZXggPj0gc3RyZWFtLT5uX3NhbXBsZXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJDaGVja2luZyBzdHJlYW0gJWQgKHNhbXBsZV9pbmRleDolZCAvIG9mZnNldDolIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAgICIgLyBzaXplOiVkKSIsIGksIHN0cmVhbS0+c2FtcGxlX2luZGV4LAotICAgICAgICAgICAgICBzdHJlYW0tPnNhbXBsZXNbc3RyZWFtLT5zYW1wbGVfaW5kZXhdLm9mZnNldCwKLSAgICAgICAgICAgICAgc3RyZWFtLT5zYW1wbGVzW3N0cmVhbS0+c2FtcGxlX2luZGV4XS5zaXplKTsKLQotICAgICAgICAgIGlmIChzdHJlYW0tPnNhbXBsZXNbc3RyZWFtLT5zYW1wbGVfaW5kZXhdLm9mZnNldCA9PSBkZW11eC0+b2Zmc2V0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtID09IE5VTEwgfHwgaSA9PSBkZW11eC0+bl9zdHJlYW1zKSkKLSAgICAgICAgICBnb3RvIHVua25vd25fc3RyZWFtOwotCi0gICAgICAgIGlmIChzdHJlYW0tPm5ld19jYXBzKSB7Ci0gICAgICAgICAgZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3N0cmVhbSAoZGVtdXgsIHN0cmVhbSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBQdXQgZGF0YSBpbiBhIGJ1ZmZlciwgc2V0IHRpbWVzdGFtcHMsIGNhcHMsIC4uLiAqLwotICAgICAgICBzYW1wbGUgPSAmc3RyZWFtLT5zYW1wbGVzW3N0cmVhbS0+c2FtcGxlX2luZGV4XTsKLQotICAgICAgICBpZiAoR19MSUtFTFkgKCEoU1RSRUFNX0lTX0VPUyAoc3RyZWFtKSkpKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJzdHJlYW0gOiAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChzdHJlYW0tPmZvdXJjYykpOwotCi0gICAgICAgICAgZHRzID0gUVRTQU1QTEVfRFRTIChzdHJlYW0sIHNhbXBsZSk7Ci0gICAgICAgICAgcHRzID0gUVRTQU1QTEVfUFRTIChzdHJlYW0sIHNhbXBsZSk7Ci0gICAgICAgICAgZHVyYXRpb24gPSBRVFNBTVBMRV9EVVJfRFRTIChzdHJlYW0sIHNhbXBsZSwgZHRzKTsKLSAgICAgICAgICBrZXlmcmFtZSA9IFFUU0FNUExFX0tFWUZSQU1FIChzdHJlYW0sIHNhbXBsZSk7Ci0KLSAgICAgICAgICAvKiBjaGVjayBmb3Igc2VnbWVudCBlbmQgKi8KLSAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPnNlZ21lbnQuc3RvcCAhPSAtMQotICAgICAgICAgICAgICAgICAgJiYgZGVtdXgtPnNlZ21lbnQuc3RvcCA8PSBwdHMgJiYgc3RyZWFtLT5vbl9rZXlmcmFtZSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAid2UgcmVhY2hlZCB0aGUgZW5kIG9mIG91ciBzZWdtZW50LiIpOwotICAgICAgICAgICAgc3RyZWFtLT50aW1lX3Bvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsgICAgICAgIC8qIHRoaXMgbWVhbnMgRU9TICovCi0KLSAgICAgICAgICAgIC8qIHNraXAgdGhpcyBkYXRhLCBzdHJlYW0gaXMgRU9TICovCi0gICAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoZGVtdXgtPmFkYXB0ZXIsIGRlbXV4LT5uZWVkZWRieXRlcyk7Ci0KLSAgICAgICAgICAgIC8qIGNoZWNrIGlmIGFsbCBzdHJlYW1zIGFyZSBlb3MgKi8KLSAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAgICAgICAgaWYgKCFTVFJFQU1fSVNfRU9TIChkZW11eC0+c3RyZWFtc1tpXSkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkFsbCBzdHJlYW1zIGFyZSBFT1MsIHNpZ25hbCB1cHN0cmVhbSIpOwotICAgICAgICAgICAgICBnb3RvIGVvczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR3N0QnVmZmVyICpvdXRidWY7Ci0KLSAgICAgICAgICAgIG91dGJ1ZiA9Ci0gICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGRlbXV4LT5hZGFwdGVyLCBkZW11eC0+bmVlZGVkYnl0ZXMpOwotCi0gICAgICAgICAgICAvKiBGSVhNRTogc2hvdWxkIGVpdGhlciBiZSBhbiBhc3NlcnQgb3IgYSBwbGFpbiBjaGVjayAqLwotICAgICAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG91dGJ1ZiAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgICAgICAgICAgIHJldCA9IGdzdF9xdGRlbXV4X2RlY29yYXRlX2FuZF9wdXNoX2J1ZmZlciAoZGVtdXgsIHN0cmVhbSwgb3V0YnVmLAotICAgICAgICAgICAgICAgIGR0cywgcHRzLCBkdXJhdGlvbiwga2V5ZnJhbWUsIGR0cywgZGVtdXgtPm9mZnNldCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogY29tYmluZSBmbG93cyAqLwotICAgICAgICAgIHJldCA9IGdzdF9xdGRlbXV4X2NvbWJpbmVfZmxvd3MgKGRlbXV4LCBzdHJlYW0sIHJldCk7Ci0gICAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAmJiByZXQgIT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKLSAgICAgICAgICAgIGdvdG8gbm9uX29rX3VubGlua2VkX2Zsb3c7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogc2tpcCB0aGlzIGRhdGEsIHN0cmVhbSBpcyBFT1MgKi8KLSAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoZGVtdXgtPmFkYXB0ZXIsIGRlbXV4LT5uZWVkZWRieXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJlYW0tPnNhbXBsZV9pbmRleCsrOwotICAgICAgICBzdHJlYW0tPm9mZnNldF9pbl9zYW1wbGUgPSAwOwotCi0gICAgICAgIC8qIHVwZGF0ZSBjdXJyZW50IG9mZnNldCBhbmQgZmlndXJlIG91dCBzaXplIG9mIG5leHQgYnVmZmVyICovCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgImluY3JlYXNpbmcgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBieSAldSIsCi0gICAgICAgICAgICBkZW11eC0+b2Zmc2V0LCBkZW11eC0+bmVlZGVkYnl0ZXMpOwotICAgICAgICBkZW11eC0+b2Zmc2V0ICs9IGRlbXV4LT5uZWVkZWRieXRlczsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAib2Zmc2V0IGlzIG5vdyAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgZGVtdXgtPm9mZnNldCk7Ci0KLSAgICAgICAgaWYgKChkZW11eC0+bmVlZGVkYnl0ZXMgPSBuZXh0X2VudHJ5X3NpemUgKGRlbXV4KSkgPT0gLTEpIHsKLSAgICAgICAgICBpZiAoZGVtdXgtPmZyYWdtZW50ZWQpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiKHRlbXBvcmFyaWx5KSBvdXQgb2YgZnJhZ21lbnRlZCBzYW1wbGVzIik7Ci0gICAgICAgICAgICAvKiB0aGVyZSBtYXkgYmUgbW9yZSB0byBmb2xsb3csIG9ubHkgZmluaXNoIHRoaXMgYXRvbSAqLwotICAgICAgICAgICAgZGVtdXgtPnRvZHJvcCA9IGRlbXV4LT5tZGF0bGVmdDsKLSAgICAgICAgICAgIGRlbXV4LT5uZWVkZWRieXRlcyA9IGRlbXV4LT50b2Ryb3A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ290byBlb3M7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnb3RvIGludmFsaWRfc3RhdGU7Ci0gICAgfQotICB9Ci0KLSAgLyogd2hlbiBidWZmZXJpbmcgbW92aWUgZGF0YSwgYXQgbGVhc3Qgc2hvdyB1c2VyIHNvbWV0aGluZyBpcyBoYXBwZW5pbmcgKi8KLSAgaWYgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBkZW11eC0+c3RhdGUgPT0gUVRERU1VWF9TVEFURV9CVUZGRVJfTURBVCAmJgotICAgICAgZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZW11eC0+YWRhcHRlcikgPD0gZGVtdXgtPm5lZWRlZGJ5dGVzKSB7Ci0gICAgZ3N0X3F0ZGVtdXhfcG9zdF9wcm9ncmVzcyAoZGVtdXgsIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmFkYXB0ZXIpLAotICAgICAgICBkZW11eC0+bmVlZGVkYnl0ZXMpOwotICB9Ci1kb25lOgotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub25fb2tfdW5saW5rZWRfZmxvdzoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU3RvcHBpbmcsIGNvbWJpbmVkIHJldHVybiBmbG93ICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLXVua25vd25fc3RyZWFtOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLCAoInVua25vd24gc3RyZWFtIGZvdW5kIikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZG9uZTsKLSAgfQotZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJubyBuZXh0IGVudHJ5LCBFT1MiKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBkb25lOwotICB9Ci1pbnZhbGlkX3N0YXRlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIEZBSUxFRCwKLSAgICAgICAgKE5VTEwpLCAoInF0ZGVtdXhlciBpbnZhbGlkIHN0YXRlICVkIiwgZGVtdXgtPnN0YXRlKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBkb25lOwotICB9Ci1ub19tb292OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIEZBSUxFRCwKLSAgICAgICAgKE5VTEwpLCAoIm5vICdtb292JyBhdG9tIHdpdGhpbiB0aGUgZmlyc3QgMTAgTUIiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9zaW5rX2FjdGl2YXRlIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gcHVsbF9tb2RlOwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICgpOwotCi0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzaW5rcGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICBnb3RvIGFjdGl2YXRlX3B1c2g7Ci0gIH0KLQotICBwdWxsX21vZGUgPSBnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzIChxdWVyeSwKLSAgICAgIEdTVF9QQURfTU9ERV9QVUxMLCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgaWYgKCFwdWxsX21vZGUpCi0gICAgZ290byBhY3RpdmF0ZV9wdXNoOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmtwYWQsICJhY3RpdmF0aW5nIHB1bGwiKTsKLSAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc2lua3BhZCwgR1NUX1BBRF9NT0RFX1BVTEwsIFRSVUUpOwotCi1hY3RpdmF0ZV9wdXNoOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2lua3BhZCwgImFjdGl2YXRpbmcgcHVzaCIpOwotICAgIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHNpbmtwYWQsIEdTVF9QQURfTU9ERV9QVVNILCBUUlVFKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0UVREZW11eCAqZGVtdXggPSBHU1RfUVRERU1VWCAocGFyZW50KTsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVVNIOgotICAgICAgZGVtdXgtPnB1bGxiYXNlZCA9IEZBTFNFOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIGRlbXV4LT5wdWxsYmFzZWQgPSBUUlVFOwotICAgICAgICByZXMgPSBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHNpbmtwYWQsIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9xdGRlbXV4X2xvb3AsCi0gICAgICAgICAgICBzaW5rcGFkLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RvcF90YXNrIChzaW5rcGFkKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLSNpZmRlZiBIQVZFX1pMSUIKLXN0YXRpYyB2b2lkICoKLXF0ZGVtdXhfaW5mbGF0ZSAodm9pZCAqel9idWZmZXIsIGd1aW50IHpfbGVuZ3RoLCBndWludCAqIGxlbmd0aCkKLXsKLSAgZ3VpbnQ4ICpidWZmZXI7Ci0gIHpfc3RyZWFtIHo7Ci0gIGludCByZXQ7Ci0KLSAgbWVtc2V0ICgmeiwgMCwgc2l6ZW9mICh6KSk7Ci0gIHouemFsbG9jID0gTlVMTDsKLSAgei56ZnJlZSA9IE5VTEw7Ci0gIHoub3BhcXVlID0gTlVMTDsKLQotICBpZiAoKHJldCA9IGluZmxhdGVJbml0ICgmeikpICE9IFpfT0spIHsKLSAgICBHU1RfRVJST1IgKCJpbmZsYXRlSW5pdCgpIHJldHVybmVkICVkIiwgcmV0KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHoubmV4dF9pbiA9IHpfYnVmZmVyOwotICB6LmF2YWlsX2luID0gel9sZW5ndGg7Ci0KLSAgYnVmZmVyID0gKGd1aW50OCAqKSBnX21hbGxvYyAoKmxlbmd0aCk7Ci0gIHouYXZhaWxfb3V0ID0gKmxlbmd0aDsKLSAgei5uZXh0X291dCA9IChCeXRlZiAqKSBidWZmZXI7Ci0gIGRvIHsKLSAgICByZXQgPSBpbmZsYXRlICgmeiwgWl9OT19GTFVTSCk7Ci0gICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAocmV0ICE9IFpfT0spIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiaW5mbGF0ZSgpIHJldHVybmVkICVkIiwgcmV0KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgICpsZW5ndGggKz0gNDA5NjsKLSAgICBidWZmZXIgPSAoZ3VpbnQ4ICopIGdfcmVhbGxvYyAoYnVmZmVyLCAqbGVuZ3RoKTsKLSAgICB6Lm5leHRfb3V0ID0gKEJ5dGVmICopIChidWZmZXIgKyB6LnRvdGFsX291dCk7Ci0gICAgei5hdmFpbF9vdXQgKz0gNDA5NjsKLSAgfSB3aGlsZSAoei5hdmFpbF9pbiA+IDApOwotCi0gIGlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgZ19mcmVlIChidWZmZXIpOwotICAgIGJ1ZmZlciA9IE5VTEw7Ci0gICAgKmxlbmd0aCA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgKmxlbmd0aCA9IHoudG90YWxfb3V0OwotICB9Ci0KLSAgaW5mbGF0ZUVuZCAoJnopOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0jZW5kaWYgLyogSEFWRV9aTElCICovCi0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9tb292IChHc3RRVERlbXV4ICogcXRkZW11eCwgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLCBndWludCBsZW5ndGgpCi17Ci0gIEdOb2RlICpjbW92OwotCi0gIHF0ZGVtdXgtPm1vb3Zfbm9kZSA9IGdfbm9kZV9uZXcgKChndWludDggKikgYnVmZmVyKTsKLQotICAvKiBjb3VudHMgYXMgaGVhZGVyIGRhdGEgKi8KLSAgcXRkZW11eC0+aGVhZGVyX3NpemUgKz0gbGVuZ3RoOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXJzaW5nICdtb292JyBhdG9tIik7Ci0gIHF0ZGVtdXhfcGFyc2Vfbm9kZSAocXRkZW11eCwgcXRkZW11eC0+bW9vdl9ub2RlLCBidWZmZXIsIGxlbmd0aCk7Ci0KLSAgY21vdiA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAocXRkZW11eC0+bW9vdl9ub2RlLCBGT1VSQ0NfY21vdik7Ci0gIGlmIChjbW92KSB7Ci0gICAgZ3VpbnQzMiBtZXRob2Q7Ci0gICAgR05vZGUgKmRjb207Ci0gICAgR05vZGUgKmNtdmQ7Ci0gICAgZ3VpbnQzMiBkY29tX2xlbjsKLQotICAgIGRjb20gPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGNtb3YsIEZPVVJDQ19kY29tKTsKLSAgICBjbXZkID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChjbW92LCBGT1VSQ0NfY212ZCk7Ci0gICAgaWYgKGRjb20gPT0gTlVMTCB8fCBjbXZkID09IE5VTEwpCi0gICAgICBnb3RvIGludmFsaWRfY29tcHJlc3Npb247Ci0KLSAgICBkY29tX2xlbiA9IFFUX1VJTlQzMiAoZGNvbS0+ZGF0YSk7Ci0gICAgaWYgKGRjb21fbGVuIDwgMTIpCi0gICAgICBnb3RvIGludmFsaWRfY29tcHJlc3Npb247Ci0KLSAgICBtZXRob2QgPSBRVF9GT1VSQ0MgKChndWludDggKikgZGNvbS0+ZGF0YSArIDgpOwotICAgIHN3aXRjaCAobWV0aG9kKSB7Ci0jaWZkZWYgSEFWRV9aTElCCi0gICAgICBjYXNlIEZPVVJDQ196bGliOnsKLSAgICAgICAgZ3VpbnQgdW5jb21wcmVzc2VkX2xlbmd0aDsKLSAgICAgICAgZ3VpbnQgY29tcHJlc3NlZF9sZW5ndGg7Ci0gICAgICAgIGd1aW50OCAqYnVmOwotICAgICAgICBndWludDMyIGNtdmRfbGVuOwotCi0gICAgICAgIGNtdmRfbGVuID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIGNtdmQtPmRhdGEpOwotICAgICAgICBpZiAoY212ZF9sZW4gPCAxMikKLSAgICAgICAgICBnb3RvIGludmFsaWRfY29tcHJlc3Npb247Ci0KLSAgICAgICAgdW5jb21wcmVzc2VkX2xlbmd0aCA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBjbXZkLT5kYXRhICsgOCk7Ci0gICAgICAgIGNvbXByZXNzZWRfbGVuZ3RoID0gY212ZF9sZW4gLSAxMjsKLSAgICAgICAgR1NUX0xPRyAoImxlbmd0aCA9ICV1IiwgdW5jb21wcmVzc2VkX2xlbmd0aCk7Ci0KLSAgICAgICAgYnVmID0KLSAgICAgICAgICAgIChndWludDggKikgcXRkZW11eF9pbmZsYXRlICgoZ3VpbnQ4ICopIGNtdmQtPmRhdGEgKyAxMiwKLSAgICAgICAgICAgIGNvbXByZXNzZWRfbGVuZ3RoLCAmdW5jb21wcmVzc2VkX2xlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGJ1ZikgewotICAgICAgICAgIHF0ZGVtdXgtPm1vb3Zfbm9kZV9jb21wcmVzc2VkID0gcXRkZW11eC0+bW9vdl9ub2RlOwotICAgICAgICAgIHF0ZGVtdXgtPm1vb3Zfbm9kZSA9IGdfbm9kZV9uZXcgKGJ1Zik7Ci0KLSAgICAgICAgICBxdGRlbXV4X3BhcnNlX25vZGUgKHF0ZGVtdXgsIHF0ZGVtdXgtPm1vb3Zfbm9kZSwgYnVmLAotICAgICAgICAgICAgICB1bmNvbXByZXNzZWRfbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX1pMSUIgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgInVua25vd24gb3IgdW5oYW5kbGVkIGhlYWRlciBjb21wcmVzc2lvbiAiCi0gICAgICAgICAgICAidHlwZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTIChtZXRob2QpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9jb21wcmVzc2lvbjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJpbnZhbGlkIGNvbXByZXNzZWQgaGVhZGVyIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9jb250YWluZXIgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHTm9kZSAqIG5vZGUsIGNvbnN0IGd1aW50OCAqIGJ1ZiwKLSAgICBjb25zdCBndWludDggKiBlbmQpCi17Ci0gIHdoaWxlIChHX1VOTElLRUxZIChidWYgPCBlbmQpKSB7Ci0gICAgR05vZGUgKmNoaWxkOwotICAgIGd1aW50MzIgbGVuOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGJ1ZiArIDQgPiBlbmQpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImJ1ZmZlciBvdmVycnVuIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgbGVuID0gUVRfVUlOVDMyIChidWYpOwotICAgIGlmIChHX1VOTElLRUxZIChsZW4gPT0gMCkpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiZW1wdHkgY29udGFpbmVyIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGxlbiA8IDgpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJsZW5ndGggdG9vIHNob3J0ICglZCA8IDgpIiwgbGVuKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoR19VTkxJS0VMWSAobGVuID4gKGVuZCAtIGJ1ZikpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJsZW5ndGggdG9vIGxvbmcgKCVkID4gJWQpIiwgbGVuLAotICAgICAgICAgIChnaW50KSAoZW5kIC0gYnVmKSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjaGlsZCA9IGdfbm9kZV9uZXcgKChndWludDggKikgYnVmKTsKLSAgICBnX25vZGVfYXBwZW5kIChub2RlLCBjaGlsZCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJhZGRpbmcgbmV3IG5vZGUgb2YgbGVuICVkIiwgbGVuKTsKLSAgICBxdGRlbXV4X3BhcnNlX25vZGUgKHF0ZGVtdXgsIGNoaWxkLCBidWYsIGxlbik7Ci0KLSAgICBidWYgKz0gbGVuOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2VfdGhlb3JhX2V4dGVuc2lvbiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgR05vZGUgKiB4ZHh0KQotewotICBpbnQgbGVuID0gUVRfVUlOVDMyICh4ZHh0LT5kYXRhKTsKLSAgZ3VpbnQ4ICpidWYgPSB4ZHh0LT5kYXRhOwotICBndWludDggKmVuZCA9IGJ1ZiArIGxlbjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgLyogc2tpcCBzaXplIGFuZCB0eXBlICovCi0gIGJ1ZiArPSA4OwotICBlbmQgLT0gODsKLQotICB3aGlsZSAoYnVmIDwgZW5kKSB7Ci0gICAgZ2ludCBzaXplOwotICAgIGd1aW50MzIgdHlwZTsKLQotICAgIHNpemUgPSBRVF9VSU5UMzIgKGJ1Zik7Ci0gICAgdHlwZSA9IFFUX0ZPVVJDQyAoYnVmICsgNCk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIiVwICVwIiwgYnVmLCBlbmQpOwotCi0gICAgaWYgKGJ1ZiArIHNpemUgPiBlbmQgfHwgc2l6ZSA8PSAwKQotICAgICAgYnJlYWs7Ci0KLSAgICBidWYgKz0gODsKLSAgICBzaXplIC09IDg7Ci0KLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJoYXZlIGNvb2tpZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0eXBlKSk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgIGNhc2UgRk9VUkNDX3RDdEg6Ci0gICAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7Ci0gICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyLCAwLCBidWYsIHNpemUpOwotICAgICAgICBzdHJlYW0tPmJ1ZmZlcnMgPSBnX3NsaXN0X2FwcGVuZCAoc3RyZWFtLT5idWZmZXJzLCBidWZmZXIpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgdGhlb3JhIGhlYWRlciIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk9VUkNDX3RDdF86Ci0gICAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7Ci0gICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyLCAwLCBidWYsIHNpemUpOwotICAgICAgICBzdHJlYW0tPmJ1ZmZlcnMgPSBnX3NsaXN0X2FwcGVuZCAoc3RyZWFtLT5idWZmZXJzLCBidWZmZXIpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgdGhlb3JhIGNvbW1lbnQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEZPVVJDQ190Q3RDOgotICAgICAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZmZlciwgMCwgYnVmLCBzaXplKTsKLSAgICAgICAgc3RyZWFtLT5idWZmZXJzID0gZ19zbGlzdF9hcHBlbmQgKHN0cmVhbS0+YnVmZmVycywgYnVmZmVyKTsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXJzaW5nIHRoZW9yYSBjb2RlYm9vayIpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAgICJ1bmtub3duIHRoZW9yYSBjb29raWUgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHR5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGJ1ZiArPSBzaXplOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2Vfbm9kZSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdOb2RlICogbm9kZSwgY29uc3QgZ3VpbnQ4ICogYnVmZmVyLAotICAgIGd1aW50IGxlbmd0aCkKLXsKLSAgZ3VpbnQzMiBmb3VyY2MgPSAwOwotICBndWludDMyIG5vZGVfbGVuZ3RoID0gMDsKLSAgY29uc3QgUXROb2RlVHlwZSAqdHlwZTsKLSAgY29uc3QgZ3VpbnQ4ICplbmQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJxdGRlbXV4X3BhcnNlIGJ1ZmZlciAlcCBsZW5ndGggJXUiLCBidWZmZXIsIGxlbmd0aCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGxlbmd0aCA8IDgpKQotICAgIGdvdG8gbm90X2Vub3VnaF9kYXRhOwotCi0gIG5vZGVfbGVuZ3RoID0gUVRfVUlOVDMyIChidWZmZXIpOwotICBmb3VyY2MgPSBRVF9GT1VSQ0MgKGJ1ZmZlciArIDQpOwotCi0gIC8qIGlnbm9yZSBlbXB0eSBub2RlcyAqLwotICBpZiAoR19VTkxJS0VMWSAoZm91cmNjID09IDAgfHwgbm9kZV9sZW5ndGggPT0gOCkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgdHlwZSA9IHF0ZGVtdXhfdHlwZV9nZXQgKGZvdXJjYyk7Ci0KLSAgZW5kID0gYnVmZmVyICsgbGVuZ3RoOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LAotICAgICAgInBhcnNpbmcgJyUiIEdTVF9GT1VSQ0NfRk9STUFUICInLCBsZW5ndGg9JXUsIG5hbWUgJyVzJyIsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksIG5vZGVfbGVuZ3RoLCB0eXBlLT5uYW1lKTsKLQotICBpZiAobm9kZV9sZW5ndGggPiBsZW5ndGgpCi0gICAgZ290byBicm9rZW5fYXRvbV9zaXplOwotCi0gIGlmICh0eXBlLT5mbGFncyAmIFFUX0ZMQUdfQ09OVEFJTkVSKSB7Ci0gICAgcXRkZW11eF9wYXJzZV9jb250YWluZXIgKHF0ZGVtdXgsIG5vZGUsIGJ1ZmZlciArIDgsIGVuZCk7Ci0gIH0gZWxzZSB7Ci0gICAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICAgIGNhc2UgRk9VUkNDX3N0c2Q6Ci0gICAgICB7Ci0gICAgICAgIGlmIChub2RlX2xlbmd0aCA8IDIwKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJza2lwcGluZyBzbWFsbCBzdHNkIGJveCIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAicGFyc2luZyBzdHNkIChzYW1wbGUgdGFibGUsIHNhbXBsZSBkZXNjcmlwdGlvbikgYXRvbSIpOwotICAgICAgICAvKiBTa2lwIG92ZXIgOCBieXRlIGF0b20gaGRyICsgMSBieXRlIHZlcnNpb24sIDMgYnl0ZXMgZmxhZ3MsIDQgYnl0ZSBudW1fZW50cmllcyAqLwotICAgICAgICBxdGRlbXV4X3BhcnNlX2NvbnRhaW5lciAocXRkZW11eCwgbm9kZSwgYnVmZmVyICsgMTYsIGVuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBGT1VSQ0NfbXA0YToKLSAgICAgIGNhc2UgRk9VUkNDX2FsYWM6Ci0gICAgICB7Ci0gICAgICAgIGd1aW50MzIgdmVyc2lvbjsKLSAgICAgICAgZ3VpbnQzMiBvZmZzZXQ7Ci0gICAgICAgIGd1aW50IG1pbl9zaXplOwotCi0gICAgICAgIC8qIGFsc28gcmVhZCBhbGFjIChvciB3aGF0ZXZlcikgaW4gc3RlYWQgb2YgbXA0YSBpbiB0aGUgZm9sbG93aW5nLAotICAgICAgICAgKiBzaW5jZSBhIHNpbWlsYXIgbGF5b3V0IGlzIHVzZWQgaW4gb3RoZXIgY2FzZXMgYXMgd2VsbCAqLwotICAgICAgICBpZiAoZm91cmNjID09IEZPVVJDQ19tcDRhKQotICAgICAgICAgIG1pbl9zaXplID0gMjA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBtaW5fc2l6ZSA9IDQwOwotCi0gICAgICAgIC8qIFRoZXJlIGFyZSB0d28gdGhpbmdzIHdlIG1pZ2h0IGVuY291bnRlciBoZXJlOiBhIHRydWUgbXA0YSBhdG9tLCBhbmQKLSAgICAgICAgICAgYW4gbXA0YSBlbnRyeSBpbiBhbiBzdHNkIGF0b20uIFRoZSBsYXR0ZXIgaXMgd2hhdCB3ZSdyZSBpbnRlcmVzdGVkCi0gICAgICAgICAgIGluLCBhbmQgaXQgbG9va3MgbGlrZSBhbiBhdG9tLCBidXQgaXNuJ3QgcmVhbGx5IG9uZS4gVGhlIHRydWUgbXA0YQotICAgICAgICAgICBhdG9tIGlzIHNob3J0LCBzbyB3ZSBkZXRlY3QgaXQgYmFzZWQgb24gbGVuZ3RoIGhlcmUuICovCi0gICAgICAgIGlmIChsZW5ndGggPCBtaW5fc2l6ZSkgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAic2tpcHBpbmcgc21hbGwgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBib3giLAotICAgICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogJ3ZlcnNpb24nIGhlcmUgaXMgdGhlIHNvdW5kIHNhbXBsZSBkZXNjcmlwdGlvbiB2ZXJzaW9uLiBUeXBlcyAwIGFuZAotICAgICAgICAgICAxIGFyZSBkb2N1bWVudGVkIGluIHRoZSBRVEZGIHJlZmVyZW5jZSwgYnV0IHR5cGUgMiBpcyBub3Q6IGl0J3MKLSAgICAgICAgICAgZGVzY3JpYmVkIGluIEFwcGxlIGhlYWRlciBmaWxlcyBpbnN0ZWFkIChzdHJ1Y3QgU291bmREZXNjcmlwdGlvblYyCi0gICAgICAgICAgIGluIE1vdmllcy5oKSAqLwotICAgICAgICB2ZXJzaW9uID0gUVRfVUlOVDE2IChidWZmZXIgKyAxNik7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIiUiIEdTVF9GT1VSQ0NfRk9STUFUICIgdmVyc2lvbiAweCUwOHgiLAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCB2ZXJzaW9uKTsKLQotICAgICAgICAvKiBwYXJzZSBhbnkgZXNkcyBkZXNjcmlwdG9ycyAqLwotICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBvZmZzZXQgPSAweDI0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgb2Zmc2V0ID0gMHgzNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG9mZnNldCA9IDB4NDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgICAgICJ1bmhhbmRsZWQgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiB2ZXJzaW9uIDB4JTA4eCIsCi0gICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCB2ZXJzaW9uKTsKLSAgICAgICAgICAgIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0KQotICAgICAgICAgIHF0ZGVtdXhfcGFyc2VfY29udGFpbmVyIChxdGRlbXV4LCBub2RlLCBidWZmZXIgKyBvZmZzZXQsIGVuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBGT1VSQ0NfbXA0djoKLSAgICAgIGNhc2UgRk9VUkNDX01QNFY6Ci0gICAgICBjYXNlIEZPVVJDQ19mbXA0OgotICAgICAgY2FzZSBGT1VSQ0NfRk1QNDoKLSAgICAgIGNhc2UgRk9VUkNDX2FwY3M6Ci0gICAgICBjYXNlIEZPVVJDQ19hcGNoOgotICAgICAgY2FzZSBGT1VSQ0NfYXBjbjoKLSAgICAgIGNhc2UgRk9VUkNDX2FwY286Ci0gICAgICBjYXNlIEZPVVJDQ19hcDRoOgotICAgICAgY2FzZSBGT1VSQ0NfSDI2NDoKLSAgICAgIGNhc2UgRk9VUkNDX2F2YzE6Ci0gICAgICBjYXNlIEZPVVJDQ19hdmMzOgotICAgICAgY2FzZSBGT1VSQ0NfSDI2NToKLSAgICAgIGNhc2UgRk9VUkNDX2h2YzE6Ci0gICAgICBjYXNlIEZPVVJDQ19oZXYxOgotICAgICAgY2FzZSBGT1VSQ0NfbWpwMjoKLSAgICAgIGNhc2UgRk9VUkNDX2VuY3Y6Ci0gICAgICB7Ci0gICAgICAgIGd1aW50MzIgdmVyc2lvbjsKLSAgICAgICAgZ3VpbnQzMiBzdHJfbGVuOwotCi0gICAgICAgIC8qIGNvZGVjX2RhdGEgaXMgY29udGFpbmVkIGluc2lkZSB0aGVzZSBhdG9tcywgd2hpY2ggYWxsIGhhdmUKLSAgICAgICAgICogdGhlIHNhbWUgZm9ybWF0LiAqLwotICAgICAgICAvKiB2aWRlbyBzYW1wbGUgZGVzY3JpcHRpb24gc2l6ZSBpcyA4NiBieXRlcyB3aXRob3V0IGV4dGVuc2lvbi4KLSAgICAgICAgICogbm9kZV9sZW5ndGggaGF2ZSB0byBiZSBiaWdnZXIgdGhhbiA4NiBieXRlcyBiZWNhdXNlIHZpZGVvIHNhbXBsZQotICAgICAgICAgKiBkZXNjcmlwdGlvbiBjYW4gaW5jbHVkZSBleHRlbnN0aW9ucyBzdWNoIGFzIGVzZHMsIGZpZWwsIGdsYmwsIGV0Yy4gKi8KLSAgICAgICAgaWYgKG5vZGVfbGVuZ3RoIDwgODYpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICIlIiBHU1RfRk9VUkNDX0ZPUk1BVAotICAgICAgICAgICAgICAiIHNhbXBsZSBkZXNjcmlwdGlvbiBsZW5ndGggdG9vIHNob3J0ICgldSA8IDg2KSIsCi0gICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgbm9kZV9sZW5ndGgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgaW4gJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotCi0gICAgICAgIC8qIHZlcnNpb24gKDIgYnl0ZXMpIDogdGhpcyBpcyBzZXQgdG8gMCwgdW5sZXNzIGEgY29tcHJlc3NvciBoYXMgY2hhbmdlZAotICAgICAgICAgKiAgICAgICAgICAgICAgaXRzIGRhdGEgZm9ybWF0LgotICAgICAgICAgKiByZXZpc2lvbiBsZXZlbCAoMiBieXRlcykgOiBtdXN0IGJlIHNldCB0byAwLiAqLwotICAgICAgICB2ZXJzaW9uID0gUVRfVUlOVDMyIChidWZmZXIgKyAxNik7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJ2ZXJzaW9uICUwOHgiLCB2ZXJzaW9uKTsKLQotICAgICAgICAvKiBjb21wcmVzc29yIG5hbWUgOiBQQVNDQUwgc3RyaW5nIGFuZCBpbmZvcm1hdGl2ZSBwdXJwb3NlcwotICAgICAgICAgKiBmaXJzdCBieXRlIDogdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSBkaXNwbGF5ZWQuCi0gICAgICAgICAqICAgICAgICAgICAgICBpdCBoYXMgdG8gYmUgbGVzcyB0aGFuIDMyIGJlY2F1c2UgaXQgaXMgcmVzZXJ2ZWQKLSAgICAgICAgICogICAgICAgICAgICAgIHNwYWNlIG9mIDMyIGJ5dGVzIHRvdGFsIGluY2x1ZGluZyBpdHNlbGYuICovCi0gICAgICAgIHN0cl9sZW4gPSBRVF9VSU5UOCAoYnVmZmVyICsgNTApOwotICAgICAgICBpZiAoc3RyX2xlbiA8IDMyKQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJjb21wcmVzc29ybmFtZSA9ICUuKnMiLCBzdHJfbGVuLAotICAgICAgICAgICAgICAoY2hhciAqKSBidWZmZXIgKyA1MSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAgICJjb21wcmVzc29ybmFtZSBsZW5ndGggdG9vIGJpZyAoJXUgPiAzMSkiLCBzdHJfbGVuKTsKLQotICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKHF0ZGVtdXgsICJ2aWRlbyBzYW1wbGUgZGVzY3JpcHRpb24iLCBidWZmZXIsCi0gICAgICAgICAgICBlbmQgLSBidWZmZXIpOwotICAgICAgICBxdGRlbXV4X3BhcnNlX2NvbnRhaW5lciAocXRkZW11eCwgbm9kZSwgYnVmZmVyICsgODYsIGVuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBGT1VSQ0NfbWV0YToKLSAgICAgIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgbWV0YSBhdG9tIik7Ci0gICAgICAgIHF0ZGVtdXhfcGFyc2VfY29udGFpbmVyIChxdGRlbXV4LCBub2RlLCBidWZmZXIgKyAxMiwgZW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ19tcDRzOgotICAgICAgewotICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKHF0ZGVtdXgsICJtcDRzIiwgYnVmZmVyLCBlbmQgLSBidWZmZXIpOwotICAgICAgICAvKiBTa2lwIDggYnl0ZSBoZWFkZXIsIHBsdXMgOCBieXRlIHZlcnNpb24gKyBmbGFncyArIGVudHJ5X2NvdW50ICovCi0gICAgICAgIHF0ZGVtdXhfcGFyc2VfY29udGFpbmVyIChxdGRlbXV4LCBub2RlLCBidWZmZXIgKyAxNiwgZW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ19YaVRoOgotICAgICAgewotICAgICAgICBndWludDMyIHZlcnNpb247Ci0gICAgICAgIGd1aW50MzIgb2Zmc2V0OwotCi0gICAgICAgIGlmIChsZW5ndGggPCAxNikgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAic2tpcHBpbmcgc21hbGwgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBib3giLAotICAgICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVyc2lvbiA9IFFUX1VJTlQzMiAoYnVmZmVyICsgMTIpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicGFyc2luZyBYaVRoIGF0b20gdmVyc2lvbiAweCUwOHgiLCB2ZXJzaW9uKTsKLQotICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHsKLSAgICAgICAgICBjYXNlIDB4MDAwMDAwMDE6Ci0gICAgICAgICAgICBvZmZzZXQgPSAweDYyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJ1bmtub3duIHZlcnNpb24gMHglMDh4IiwgdmVyc2lvbik7Ci0gICAgICAgICAgICBvZmZzZXQgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldCkgewotICAgICAgICAgIGlmIChsZW5ndGggPCBvZmZzZXQpIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAgICAgICAic2tpcHBpbmcgdG9vIHNtYWxsICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgYm94IiwKLSAgICAgICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIHF0ZGVtdXhfcGFyc2VfY29udGFpbmVyIChxdGRlbXV4LCBub2RlLCBidWZmZXIgKyBvZmZzZXQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ19pbjI0OgotICAgICAgewotICAgICAgICBxdGRlbXV4X3BhcnNlX2NvbnRhaW5lciAocXRkZW11eCwgbm9kZSwgYnVmZmVyICsgMHgzNCwgZW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ191dWlkOgotICAgICAgewotICAgICAgICBxdGRlbXV4X3BhcnNlX3V1aWQgKHF0ZGVtdXgsIGJ1ZmZlciwgZW5kIC0gYnVmZmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ19lbmNhOgotICAgICAgewotICAgICAgICBxdGRlbXV4X3BhcnNlX2NvbnRhaW5lciAocXRkZW11eCwgbm9kZSwgYnVmZmVyICsgMzYsIGVuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKCFzdHJjbXAgKHR5cGUtPm5hbWUsICJ1bmtub3duIikpCi0gICAgICAgICAgR1NUX01FTURVTVAgKCJVbmtub3duIHRhZyIsIGJ1ZmZlciArIDQsIGVuZCAtIGJ1ZmZlciAtIDQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXJzZWQgJyUiIEdTVF9GT1VSQ0NfRk9STUFUICInIiwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0gIHJldHVybiBUUlVFOwotCi0vKiBFUlJPUlMgKi8KLW5vdF9lbm91Z2hfZGF0YToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAoXygiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIikpLAotICAgICAgICAoIk5vdCBlbm91Z2ggZGF0YSBmb3IgYW4gYXRvbSBoZWFkZXIsIGdvdCBvbmx5ICV1IGJ5dGVzIiwgbGVuZ3RoKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1icm9rZW5fYXRvbV9zaXplOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHF0ZGVtdXgsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgIChfKCJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iKSksCi0gICAgICAgICgiQXRvbSAnJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIicgaGFzIHNpemUgb2YgJXUgYnl0ZXMsIGJ1dCB3ZSBoYXZlIG9ubHkgIgotICAgICAgICAgICAgIiV1IGJ5dGVzIGF2YWlsYWJsZS4iLCBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksIG5vZGVfbGVuZ3RoLAotICAgICAgICAgICAgbGVuZ3RoKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHTm9kZSAqCi1xdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKEdOb2RlICogbm9kZSwgZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIEdOb2RlICpjaGlsZDsKLSAgZ3VpbnQ4ICpidWZmZXI7Ci0gIGd1aW50MzIgY2hpbGRfZm91cmNjOwotCi0gIGZvciAoY2hpbGQgPSBnX25vZGVfZmlyc3RfY2hpbGQgKG5vZGUpOyBjaGlsZDsKLSAgICAgIGNoaWxkID0gZ19ub2RlX25leHRfc2libGluZyAoY2hpbGQpKSB7Ci0gICAgYnVmZmVyID0gKGd1aW50OCAqKSBjaGlsZC0+ZGF0YTsKLQotICAgIGNoaWxkX2ZvdXJjYyA9IFFUX0ZPVVJDQyAoYnVmZmVyICsgNCk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoY2hpbGRfZm91cmNjID09IGZvdXJjYykpIHsKLSAgICAgIHJldHVybiBjaGlsZDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHTm9kZSAqCi1xdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGVfZnVsbCAoR05vZGUgKiBub2RlLCBndWludDMyIGZvdXJjYywKLSAgICBHc3RCeXRlUmVhZGVyICogcGFyc2VyKQotewotICBHTm9kZSAqY2hpbGQ7Ci0gIGd1aW50OCAqYnVmZmVyOwotICBndWludDMyIGNoaWxkX2ZvdXJjYywgY2hpbGRfbGVuOwotCi0gIGZvciAoY2hpbGQgPSBnX25vZGVfZmlyc3RfY2hpbGQgKG5vZGUpOyBjaGlsZDsKLSAgICAgIGNoaWxkID0gZ19ub2RlX25leHRfc2libGluZyAoY2hpbGQpKSB7Ci0gICAgYnVmZmVyID0gKGd1aW50OCAqKSBjaGlsZC0+ZGF0YTsKLQotICAgIGNoaWxkX2xlbiA9IFFUX1VJTlQzMiAoYnVmZmVyKTsKLSAgICBjaGlsZF9mb3VyY2MgPSBRVF9GT1VSQ0MgKGJ1ZmZlciArIDQpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGNoaWxkX2ZvdXJjYyA9PSBmb3VyY2MpKSB7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoY2hpbGRfbGVuIDwgKDQgKyA0KSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgLyogRklYTUU6IG11c3QgdmVyaWZ5IGlmIGF0b20gbGVuZ3RoIDwgcGFyZW50IGF0b20gbGVuZ3RoICovCi0gICAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAocGFyc2VyLCBidWZmZXIgKyAoNCArIDQpLCBjaGlsZF9sZW4gLSAoNCArIDQpKTsKLSAgICAgIHJldHVybiBjaGlsZDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHTm9kZSAqCi1xdGRlbXV4X3RyZWVfZ2V0X3NpYmxpbmdfYnlfdHlwZV9mdWxsIChHTm9kZSAqIG5vZGUsIGd1aW50MzIgZm91cmNjLAotICAgIEdzdEJ5dGVSZWFkZXIgKiBwYXJzZXIpCi17Ci0gIEdOb2RlICpjaGlsZDsKLSAgZ3VpbnQ4ICpidWZmZXI7Ci0gIGd1aW50MzIgY2hpbGRfZm91cmNjLCBjaGlsZF9sZW47Ci0KLSAgZm9yIChjaGlsZCA9IGdfbm9kZV9uZXh0X3NpYmxpbmcgKG5vZGUpOyBjaGlsZDsKLSAgICAgIGNoaWxkID0gZ19ub2RlX25leHRfc2libGluZyAoY2hpbGQpKSB7Ci0gICAgYnVmZmVyID0gKGd1aW50OCAqKSBjaGlsZC0+ZGF0YTsKLQotICAgIGNoaWxkX2ZvdXJjYyA9IFFUX0ZPVVJDQyAoYnVmZmVyICsgNCk7Ci0KLSAgICBpZiAoY2hpbGRfZm91cmNjID09IGZvdXJjYykgewotICAgICAgaWYgKHBhcnNlcikgewotICAgICAgICBjaGlsZF9sZW4gPSBRVF9VSU5UMzIgKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChjaGlsZF9sZW4gPCAoNCArIDQpKSkKLSAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogRklYTUU6IG11c3QgdmVyaWZ5IGlmIGF0b20gbGVuZ3RoIDwgcGFyZW50IGF0b20gbGVuZ3RoICovCi0gICAgICAgIGdzdF9ieXRlX3JlYWRlcl9pbml0IChwYXJzZXIsIGJ1ZmZlciArICg0ICsgNCksIGNoaWxkX2xlbiAtICg0ICsgNCkpOwotICAgICAgfQotICAgICAgcmV0dXJuIGNoaWxkOwotICAgIH0KLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIEdOb2RlICoKLXF0ZGVtdXhfdHJlZV9nZXRfc2libGluZ19ieV90eXBlIChHTm9kZSAqIG5vZGUsIGd1aW50MzIgZm91cmNjKQotewotICByZXR1cm4gcXRkZW11eF90cmVlX2dldF9zaWJsaW5nX2J5X3R5cGVfZnVsbCAobm9kZSwgZm91cmNjLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfZG9fYWxsb2NhdGlvbiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0pCi17Ci0vKiBGSVhNRTogVGhpcyBjYW4gb25seSByZWxpYWJseSB3b3JrIGlmIGRlbXV4ZXJzIGhhdmUgYQotICogc2VwYXJhdGUgc3RyZWFtaW5nIHRocmVhZCBwZXIgc3JjcGFkLiBUaGlzIHNob3VsZCBiZQotICogZG9uZSBpbiBhIGRlbXV4ZXIgYmFzZSBjbGFzcywgd2hpY2ggaW50ZWdyYXRlcyBwYXJ0cwotICogb2YgbXVsdGlxdWV1ZQotICoKLSAqIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MDE4NTYKLSAqLwotI2lmIDAKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uIChzdHJlYW0tPmNhcHMsIEZBTFNFKTsKLQotICBpZiAoIWdzdF9wYWRfcGVlcl9xdWVyeSAoc3RyZWFtLT5wYWQsIHF1ZXJ5KSkgewotICAgIC8qIG5vdCBhIHByb2JsZW0sIGp1c3QgZGVidWcgYSBsaXR0bGUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicGVlciBBTExPQ0FUSU9OIHF1ZXJ5IGZhaWxlZCIpOwotICB9Ci0KLSAgaWYgKHN0cmVhbS0+YWxsb2NhdG9yKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbS0+YWxsb2NhdG9yKTsKLQotICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zIChxdWVyeSkgPiAwKSB7Ci0gICAgLyogdHJ5IHRoZSBhbGxvY2F0b3IgKi8KLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCAwLCAmc3RyZWFtLT5hbGxvY2F0b3IsCi0gICAgICAgICZzdHJlYW0tPnBhcmFtcyk7Ci0gICAgc3RyZWFtLT51c2VfYWxsb2NhdG9yID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBzdHJlYW0tPmFsbG9jYXRvciA9IE5VTEw7Ci0gICAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZzdHJlYW0tPnBhcmFtcyk7Ci0gICAgc3RyZWFtLT51c2VfYWxsb2NhdG9yID0gRkFMU0U7Ci0gIH0KLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRkZW11eF9jb25maWd1cmVfcHJvdGVjdGVkX2NhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LAotICAgIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY29uc3QgZ2NoYXIgKnNlbGVjdGVkX3N5c3RlbTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAocXRkZW11eCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJlYW0gIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X2NhcHNfZ2V0X3NpemUgKHN0cmVhbS0+Y2FwcykgPT0gMSwgRkFMU0UpOwotCi0gIGlmIChzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX3R5cGUgIT0gRk9VUkNDX2NlbmMpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChxdGRlbXV4LCAidW5zdXBwb3J0ZWQgcHJvdGVjdGlvbiBzY2hlbWUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKHF0ZGVtdXgtPnByb3RlY3Rpb25fc3lzdGVtX2lkcyA9PSBOVUxMKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgInN0cmVhbSBpcyBwcm90ZWN0ZWQgdXNpbmcgY2VuYywgYnV0IG5vICIKLSAgICAgICAgImNlbmMgcHJvdGVjdGlvbiBzeXN0ZW0gaW5mb3JtYXRpb24gaGFzIGJlZW4gZm91bmQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgZ19wdHJfYXJyYXlfYWRkIChxdGRlbXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMsIE5VTEwpOwotICBzZWxlY3RlZF9zeXN0ZW0gPSBnc3RfcHJvdGVjdGlvbl9zZWxlY3Rfc3lzdGVtICgoY29uc3QgZ2NoYXIgKiopCi0gICAgICBxdGRlbXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMtPnBkYXRhKTsKLSAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4IChxdGRlbXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMsCi0gICAgICBxdGRlbXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMtPmxlbiAtIDEpOwotICBpZiAoIXNlbGVjdGVkX3N5c3RlbSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJzdHJlYW0gaXMgcHJvdGVjdGVkLCBidXQgbm8gIgotICAgICAgICAic3VpdGFibGUgZGVjcnlwdG9yIGVsZW1lbnQgaGFzIGJlZW4gZm91bmQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3RyZWFtLT5jYXBzLCAwKTsKLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXBwbGljYXRpb24veC1jZW5jIikpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywKLSAgICAgICAgIm9yaWdpbmFsLW1lZGlhLXR5cGUiLCBHX1RZUEVfU1RSSU5HLCBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKSwKLSAgICAgICAgR1NUX1BST1RFQ1RJT05fU1lTVEVNX0lEX0NBUFNfRklFTEQsIEdfVFlQRV9TVFJJTkcsIHNlbGVjdGVkX3N5c3RlbSwKLSAgICAgICAgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAocywgImFwcGxpY2F0aW9uL3gtY2VuYyIpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtKQotewotICBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ192aWRlKSB7Ci0gICAgLyogZnBzIGlzIGNhbGN1bGF0ZWQgYmFzZSBvbiB0aGUgZHVyYXRpb24gb2YgdGhlIGF2ZXJhZ2UgZnJhbWVyYXRlIHNpbmNlCi0gICAgICogcXQgZG9lcyBub3QgaGF2ZSBhIGZpeGVkIGZyYW1lcmF0ZS4gKi8KLSAgICBnYm9vbGVhbiBmcHNfYXZhaWxhYmxlID0gVFJVRTsKLQotICAgIGlmICgoc3RyZWFtLT5uX3NhbXBsZXMgPT0gMSkgJiYgKHN0cmVhbS0+Zmlyc3RfZHVyYXRpb24gPT0gMCkpIHsKLSAgICAgIC8qIHN0aWxsIGZyYW1lICovCi0gICAgICBzdHJlYW0tPmZwc19uID0gMDsKLSAgICAgIHN0cmVhbS0+ZnBzX2QgPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoc3RyZWFtLT5kdXJhdGlvbiA9PSAwIHx8IHN0cmVhbS0+bl9zYW1wbGVzIDwgMikgewotICAgICAgICBzdHJlYW0tPmZwc19uID0gc3RyZWFtLT50aW1lc2NhbGU7Ci0gICAgICAgIHN0cmVhbS0+ZnBzX2QgPSAxOwotICAgICAgICBmcHNfYXZhaWxhYmxlID0gRkFMU0U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHc3RDbG9ja1RpbWUgYXZnX2R1cmF0aW9uOwotICAgICAgICBndWludDY0IGR1cmF0aW9uOwotICAgICAgICBndWludDMyIG5fc2FtcGxlczsKLQotICAgICAgICAvKiBkdXJhdGlvbiBhbmQgbl9zYW1wbGVzIGNhbiBiZSB1cGRhdGVkIGZvciBmcmFnbWVudGVkIGZvcm1hdAotICAgICAgICAgKiBzbywgZnJhbWVyYXRlIG9mIGZyYWdtZW50ZWQgZm9ybWF0IGlzIGNhbGN1bGF0ZWQgdXNpbmcgZGF0YSBpbiBhIG1vb2YgKi8KLSAgICAgICAgaWYgKHF0ZGVtdXgtPmZyYWdtZW50ZWQgJiYgc3RyZWFtLT5uX3NhbXBsZXNfbW9vZiA+IDAKLSAgICAgICAgICAgICYmIHN0cmVhbS0+ZHVyYXRpb25fbW9vZiA+IDApIHsKLSAgICAgICAgICBuX3NhbXBsZXMgPSBzdHJlYW0tPm5fc2FtcGxlc19tb29mOwotICAgICAgICAgIGR1cmF0aW9uID0gc3RyZWFtLT5kdXJhdGlvbl9tb29mOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG5fc2FtcGxlcyA9IHN0cmVhbS0+bl9zYW1wbGVzOwotICAgICAgICAgIGR1cmF0aW9uID0gc3RyZWFtLT5kdXJhdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIENhbGN1bGF0ZSBhIGZyYW1lcmF0ZSwgaWdub3JpbmcgdGhlIGZpcnN0IHNhbXBsZSB3aGljaCBpcyBzb21ldGltZXMgdHJ1bmNhdGVkICovCi0gICAgICAgIC8qIHN0cmVhbS0+ZHVyYXRpb24gaXMgZ3VpbnQ2NCwgdGltZXNjYWxlLCBuX3NhbXBsZXMgYXJlIGd1aW50MzIgKi8KLSAgICAgICAgYXZnX2R1cmF0aW9uID0KLSAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoZHVyYXRpb24gLQotICAgICAgICAgICAgc3RyZWFtLT5maXJzdF9kdXJhdGlvbiwgR1NUX1NFQ09ORCwKLSAgICAgICAgICAgIChndWludDY0KSAoc3RyZWFtLT50aW1lc2NhbGUpICogKG5fc2FtcGxlcyAtIDEpKTsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAgICJDYWxjdWxhdGluZyBhdmcgc2FtcGxlIGR1cmF0aW9uIGJhc2VkIG9uIHN0cmVhbSAob3IgbW9vZikgZHVyYXRpb24gJSIKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAgICIgbWludXMgZmlyc3Qgc2FtcGxlICV1LCBsZWF2aW5nICVkIHNhbXBsZXMgZ2l2ZXMgJSIKLSAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgZHVyYXRpb24sIHN0cmVhbS0+Zmlyc3RfZHVyYXRpb24sCi0gICAgICAgICAgICBuX3NhbXBsZXMgLSAxLCBHU1RfVElNRV9BUkdTIChhdmdfZHVyYXRpb24pKTsKLQotICAgICAgICBnc3RfdmlkZW9fZ3Vlc3NfZnJhbWVyYXRlIChhdmdfZHVyYXRpb24sICZzdHJlYW0tPmZwc19uLAotICAgICAgICAgICAgJnN0cmVhbS0+ZnBzX2QpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAiQ2FsY3VsYXRpbmcgZnJhbWVyYXRlLCB0aW1lc2NhbGUgJXUgZ2F2ZSBmcHNfbiAlZCBmcHNfZCAlZCIsCi0gICAgICAgICAgICBzdHJlYW0tPnRpbWVzY2FsZSwgc3RyZWFtLT5mcHNfbiwgc3RyZWFtLT5mcHNfZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0cmVhbS0+Y2FwcykgewotICAgICAgc3RyZWFtLT5jYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoc3RyZWFtLT5jYXBzKTsKLQotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHN0cmVhbS0+d2lkdGgsCi0gICAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIHN0cmVhbS0+aGVpZ2h0LCBOVUxMKTsKLQotICAgICAgLyogc2V0IGZyYW1lcmF0ZSBpZiBjYWxjdWxhdGVkIGZyYW1lcmF0ZSBpcyByZWxpYWJsZSAqLwotICAgICAgaWYgKGZwc19hdmFpbGFibGUpIHsKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBzdHJlYW0tPmZwc19uLCBzdHJlYW0tPmZwc19kLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgLyogY2FsY3VsYXRlIHBpeGVsLWFzcGVjdC1yYXRpbyB1c2luZyBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgInZpZGVvIHNpemUgJWR4JWQsIHRhcmdldCBkaXNwbGF5IHNpemUgJWR4JWQiLCBzdHJlYW0tPndpZHRoLAotICAgICAgICAgIHN0cmVhbS0+aGVpZ2h0LCBzdHJlYW0tPmRpc3BsYXlfd2lkdGgsIHN0cmVhbS0+ZGlzcGxheV9oZWlnaHQpOwotICAgICAgLyogcXQgZmlsZSBtaWdodCBoYXZlIHBhc3AgYXRvbSAqLwotICAgICAgaWYgKHN0cmVhbS0+cGFyX3cgPiAwICYmIHN0cmVhbS0+cGFyX2ggPiAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXIgJWQ6JWQiLCBzdHJlYW0tPnBhcl93LCBzdHJlYW0tPnBhcl9oKTsKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICAgIEdTVF9UWVBFX0ZSQUNUSU9OLCBzdHJlYW0tPnBhcl93LCBzdHJlYW0tPnBhcl9oLCBOVUxMKTsKLSAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLT5kaXNwbGF5X3dpZHRoID4gMCAmJiBzdHJlYW0tPmRpc3BsYXlfaGVpZ2h0ID4gMCAmJgotICAgICAgICAgIHN0cmVhbS0+d2lkdGggPiAwICYmIHN0cmVhbS0+aGVpZ2h0ID4gMCkgewotICAgICAgICBnaW50IG4sIGQ7Ci0KLSAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gdXNpbmcgdGhlIGRpc3BsYXkgYW5kIHBpeGVsIHcvaCAqLwotICAgICAgICBuID0gc3RyZWFtLT5kaXNwbGF5X3dpZHRoICogc3RyZWFtLT5oZWlnaHQ7Ci0gICAgICAgIGQgPSBzdHJlYW0tPmRpc3BsYXlfaGVpZ2h0ICogc3RyZWFtLT53aWR0aDsKLSAgICAgICAgaWYgKG4gPT0gZCkKLSAgICAgICAgICBuID0gZCA9IDE7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzZXR0aW5nIFBBUiB0byAlZC8lZCIsIG4sIGQpOwotICAgICAgICBzdHJlYW0tPnBhcl93ID0gbjsKLSAgICAgICAgc3RyZWFtLT5wYXJfaCA9IGQ7Ci0gICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHN0cmVhbS0+Y2FwcywgInBpeGVsLWFzcGVjdC1yYXRpbyIsCi0gICAgICAgICAgICBHU1RfVFlQRV9GUkFDVElPTiwgc3RyZWFtLT5wYXJfdywgc3RyZWFtLT5wYXJfaCwgTlVMTCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzdHJlYW0tPm11bHRpdmlld19tb2RlICE9IEdTVF9WSURFT19NVUxUSVZJRVdfTU9ERV9OT05FKSB7Ci0gICAgICAgIGd1aW50IHBhcl93ID0gMSwgcGFyX2ggPSAxOwotCi0gICAgICAgIGlmIChzdHJlYW0tPnBhcl93ID4gMCAmJiBzdHJlYW0tPnBhcl9oID4gMCkgewotICAgICAgICAgIHBhcl93ID0gc3RyZWFtLT5wYXJfdzsKLSAgICAgICAgICBwYXJfaCA9IHN0cmVhbS0+cGFyX2g7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ3N0X3ZpZGVvX211bHRpdmlld19ndWVzc19oYWxmX2FzcGVjdCAoc3RyZWFtLT5tdWx0aXZpZXdfbW9kZSwKLSAgICAgICAgICAgICAgICBzdHJlYW0tPndpZHRoLCBzdHJlYW0tPmhlaWdodCwgcGFyX3csIHBhcl9oKSkgewotICAgICAgICAgIHN0cmVhbS0+bXVsdGl2aWV3X2ZsYWdzIHw9IEdTVF9WSURFT19NVUxUSVZJRVdfRkxBR1NfSEFMRl9BU1BFQ1Q7Ci0gICAgICAgIH0KLQotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAibXVsdGl2aWV3LW1vZGUiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgZ3N0X3ZpZGVvX211bHRpdmlld19tb2RlX3RvX2NhcHNfc3RyaW5nIChzdHJlYW0tPm11bHRpdmlld19tb2RlKSwKLSAgICAgICAgICAgICJtdWx0aXZpZXctZmxhZ3MiLCBHU1RfVFlQRV9WSURFT19NVUxUSVZJRVdfRkxBR1NFVCwKLSAgICAgICAgICAgIHN0cmVhbS0+bXVsdGl2aWV3X2ZsYWdzLCBHU1RfRkxBR19TRVRfTUFTS19FWEFDVCwgTlVMTCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZWxzZSBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ19zb3VuKSB7Ci0gICAgaWYgKHN0cmVhbS0+Y2FwcykgewotICAgICAgc3RyZWFtLT5jYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoc3RyZWFtLT5jYXBzKTsKLSAgICAgIGlmIChzdHJlYW0tPnJhdGUgPiAwKQotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIChpbnQpIHN0cmVhbS0+cmF0ZSwgTlVMTCk7Ci0gICAgICBpZiAoc3RyZWFtLT5uX2NoYW5uZWxzID4gMCkKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgc3RyZWFtLT5uX2NoYW5uZWxzLCBOVUxMKTsKLSAgICAgIGlmIChzdHJlYW0tPm5fY2hhbm5lbHMgPiAyKSB7Ci0gICAgICAgIC8qIEZJWE1FOiBOZWVkIHRvIHBhcnNlIHRoZSAnY2hhbicgYXRvbSB0byBnZXQgY2hhbm5lbCBsYXlvdXRzCi0gICAgICAgICAqIGNvcnJlY3RseTsgdGhpcyBpcyBqdXN0IHRoZSBtaW5pbXVtIHdlIGNhbiBkbyAtIGFzc3VtZQotICAgICAgICAgKiB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGFueSBjaGFubmVsIHBvc2l0aW9ucy4gKi8KLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssIEdfR1VJTlQ2NF9DT05TVEFOVCAoMCksIE5VTEwpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChzdHJlYW0tPnBhZCkgewotICAgIEdzdENhcHMgKnByZXZfY2FwcyA9IE5VTEw7Ci0KLSAgICBHU1RfUEFEX0VMRU1FTlRfUFJJVkFURSAoc3RyZWFtLT5wYWQpID0gc3RyZWFtOwotICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzdHJlYW0tPnBhZCwgZ3N0X3F0ZGVtdXhfaGFuZGxlX3NyY19ldmVudCk7Ci0gICAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHN0cmVhbS0+cGFkLCBnc3RfcXRkZW11eF9oYW5kbGVfc3JjX3F1ZXJ5KTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHN0cmVhbS0+cGFkLCBUUlVFKTsKLQotICAgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHN0cmVhbS0+cGFkKTsKLQotICAgIGlmIChzdHJlYW0tPnByb3RlY3RlZCkgewotICAgICAgaWYgKCFnc3RfcXRkZW11eF9jb25maWd1cmVfcHJvdGVjdGVkX2NhcHMgKHF0ZGVtdXgsIHN0cmVhbSkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAgICJGYWlsZWQgdG8gY29uZmlndXJlIHByb3RlY3RlZCBzdHJlYW0gY2Fwcy4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdHJlYW0tPm5ld19zdHJlYW0pIHsKLSAgICAgIGdjaGFyICpzdHJlYW1faWQ7Ci0gICAgICBHc3RFdmVudCAqZXZlbnQ7Ci0gICAgICBHc3RTdHJlYW1GbGFncyBzdHJlYW1fZmxhZ3M7Ci0KLSAgICAgIGV2ZW50ID0KLSAgICAgICAgICBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKHF0ZGVtdXgtPnNpbmtwYWQsIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsCi0gICAgICAgICAgMCk7Ci0gICAgICBpZiAoZXZlbnQpIHsKLSAgICAgICAgaWYgKGdzdF9ldmVudF9wYXJzZV9ncm91cF9pZCAoZXZlbnQsICZxdGRlbXV4LT5ncm91cF9pZCkpCi0gICAgICAgICAgcXRkZW11eC0+aGF2ZV9ncm91cF9pZCA9IFRSVUU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBxdGRlbXV4LT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgfSBlbHNlIGlmICghcXRkZW11eC0+aGF2ZV9ncm91cF9pZCkgewotICAgICAgICBxdGRlbXV4LT5oYXZlX2dyb3VwX2lkID0gVFJVRTsKLSAgICAgICAgcXRkZW11eC0+Z3JvdXBfaWQgPSBnc3RfdXRpbF9ncm91cF9pZF9uZXh0ICgpOwotICAgICAgfQotCi0gICAgICBzdHJlYW0tPm5ld19zdHJlYW0gPSBGQUxTRTsKLSAgICAgIHN0cmVhbV9pZCA9Ci0gICAgICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZiAoc3RyZWFtLT5wYWQsCi0gICAgICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAocXRkZW11eCksICIlMDN1Iiwgc3RyZWFtLT50cmFja19pZCk7Ci0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICAgICAgaWYgKHF0ZGVtdXgtPmhhdmVfZ3JvdXBfaWQpCi0gICAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQgKGV2ZW50LCBxdGRlbXV4LT5ncm91cF9pZCk7Ci0gICAgICBzdHJlYW1fZmxhZ3MgPSBHU1RfU1RSRUFNX0ZMQUdfTk9ORTsKLSAgICAgIGlmIChzdHJlYW0tPmRpc2FibGVkKQotICAgICAgICBzdHJlYW1fZmxhZ3MgfD0gR1NUX1NUUkVBTV9GTEFHX1VOU0VMRUNUOwotICAgICAgaWYgKHN0cmVhbS0+c3BhcnNlKQotICAgICAgICBzdHJlYW1fZmxhZ3MgfD0gR1NUX1NUUkVBTV9GTEFHX1NQQVJTRTsKLSAgICAgIGdzdF9ldmVudF9zZXRfc3RyZWFtX2ZsYWdzIChldmVudCwgc3RyZWFtX2ZsYWdzKTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5wYWQsIGV2ZW50KTsKLSAgICAgIGdfZnJlZSAoc3RyZWFtX2lkKTsKLSAgICB9Ci0KLSAgICBwcmV2X2NhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHN0cmVhbS0+cGFkKTsKLQotICAgIGlmICghcHJldl9jYXBzIHx8ICFnc3RfY2Fwc19pc19lcXVhbF9maXhlZCAocHJldl9jYXBzLCBzdHJlYW0tPmNhcHMpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic2V0dGluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBzdHJlYW0tPmNhcHMpOwotICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAoc3RyZWFtLT5wYWQsIHN0cmVhbS0+Y2Fwcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJpZ25vcmUgZHVwbGljYXRlZCBjYXBzIik7Ci0gICAgfQotCi0gICAgaWYgKHByZXZfY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChwcmV2X2NhcHMpOwotICAgIHN0cmVhbS0+bmV3X2NhcHMgPSBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcXRkZW11eF9hZGRfc3RyZWFtIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtLCBHc3RUYWdMaXN0ICogbGlzdCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgLyogY29uc2lzdGVudCBkZWZhdWx0IGZvciBwdXNoIGJhc2VkIG1vZGUgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnN0cmVhbS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ192aWRlKSB7Ci0gICAgZ2NoYXIgKm5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJ2aWRlb18ldSIsIHF0ZGVtdXgtPm5fdmlkZW9fc3RyZWFtcyk7Ci0KLSAgICBzdHJlYW0tPnBhZCA9Ci0gICAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZ3N0X3F0ZGVtdXhfdmlkZW9zcmNfdGVtcGxhdGUsIG5hbWUpOwotICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgICBpZiAoIWdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0gKHF0ZGVtdXgsIHN0cmVhbSkpIHsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbS0+cGFkKTsKLSAgICAgIHN0cmVhbS0+cGFkID0gTlVMTDsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIHF0ZGVtdXgtPm5fdmlkZW9fc3RyZWFtcysrOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc291bikgewotICAgIGdjaGFyICpuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiYXVkaW9fJXUiLCBxdGRlbXV4LT5uX2F1ZGlvX3N0cmVhbXMpOwotCi0gICAgc3RyZWFtLT5wYWQgPQotICAgICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmdzdF9xdGRlbXV4X2F1ZGlvc3JjX3RlbXBsYXRlLCBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGlmICghZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3N0cmVhbSAocXRkZW11eCwgc3RyZWFtKSkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3RyZWFtLT5wYWQpOwotICAgICAgc3RyZWFtLT5wYWQgPSBOVUxMOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICAgIHF0ZGVtdXgtPm5fYXVkaW9fc3RyZWFtcysrOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc3RybSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzdHJlYW0gdHlwZSwgbm90IGNyZWF0aW5nIHBhZCIpOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc3VicCB8fCBzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3RleHQKLSAgICAgIHx8IHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc2J0bCB8fCBzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3N1YnQpIHsKLSAgICBnY2hhciAqbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInN1YnRpdGxlXyV1IiwgcXRkZW11eC0+bl9zdWJfc3RyZWFtcyk7Ci0KLSAgICBzdHJlYW0tPnBhZCA9Ci0gICAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZ3N0X3F0ZGVtdXhfc3Vic3JjX3RlbXBsYXRlLCBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGlmICghZ3N0X3F0ZGVtdXhfY29uZmlndXJlX3N0cmVhbSAocXRkZW11eCwgc3RyZWFtKSkgewotICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3RyZWFtLT5wYWQpOwotICAgICAgc3RyZWFtLT5wYWQgPSBOVUxMOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICAgIHF0ZGVtdXgtPm5fc3ViX3N0cmVhbXMrKzsKLSAgfSBlbHNlIGlmIChzdHJlYW0tPmNhcHMpIHsKLSAgICBnY2hhciAqbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInZpZGVvXyV1IiwgcXRkZW11eC0+bl92aWRlb19zdHJlYW1zKTsKLQotICAgIHN0cmVhbS0+cGFkID0KLSAgICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZnc3RfcXRkZW11eF92aWRlb3NyY190ZW1wbGF0ZSwgbmFtZSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLSAgICBpZiAoIWdzdF9xdGRlbXV4X2NvbmZpZ3VyZV9zdHJlYW0gKHF0ZGVtdXgsIHN0cmVhbSkpIHsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbS0+cGFkKTsKLSAgICAgIHN0cmVhbS0+cGFkID0gTlVMTDsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBxdGRlbXV4LT5uX3ZpZGVvX3N0cmVhbXMrKzsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAidW5rbm93biBzdHJlYW0gdHlwZSIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGlmIChzdHJlYW0tPnBhZCkgewotICAgIEdMaXN0ICpsOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyBwYWQgJXMgJXAgdG8gcXRkZW11eCAlcCIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAoc3RyZWFtLT5wYWQpLCBzdHJlYW0tPnBhZCwgcXRkZW11eCk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocXRkZW11eCksIHN0cmVhbS0+cGFkKTsKLSAgICBnc3RfZmxvd19jb21iaW5lcl9hZGRfcGFkIChxdGRlbXV4LT5mbG93Y29tYmluZXIsIHN0cmVhbS0+cGFkKTsKLQotICAgIGlmIChzdHJlYW0tPnBlbmRpbmdfdGFncykKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAoc3RyZWFtLT5wZW5kaW5nX3RhZ3MpOwotICAgIHN0cmVhbS0+cGVuZGluZ190YWdzID0gbGlzdDsKLSAgICBsaXN0ID0gTlVMTDsKLSAgICAvKiBnbG9iYWwgdGFncyBnbyBvbiBlYWNoIHBhZCBhbnl3YXkgKi8KLSAgICBzdHJlYW0tPnNlbmRfZ2xvYmFsX3RhZ3MgPSBUUlVFOwotICAgIC8qIHNlbmQgdXBzdHJlYW0gR1NUX0VWRU5UX1BST1RFQ1RJT04gZXZlbnRzIHRoYXQgd2VyZSByZWNlaXZlZCBiZWZvcmUKLSAgICAgICB0aGlzIHNvdXJjZSBwYWQgd2FzIGNyZWF0ZWQgKi8KLSAgICBmb3IgKGwgPSBxdGRlbXV4LT5wcm90ZWN0aW9uX2V2ZW50X3F1ZXVlLmhlYWQ7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBnc3RfZXZlbnRfcmVmIChsLT5kYXRhKSk7Ci0gIH0KLWRvbmU6Ci0gIGlmIChsaXN0KQotICAgIGdzdF90YWdfbGlzdF91bnJlZiAobGlzdCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIGZpbmQgbmV4dCBhdG9tIHdpdGggQGZvdXJjYyBzdGFydGluZyBhdCBAb2Zmc2V0ICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotcXRkZW11eF9maW5kX2F0b20gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBndWludDY0ICogb2Zmc2V0LAotICAgIGd1aW50NjQgKiBsZW5ndGgsIGd1aW50MzIgZm91cmNjKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQzMiBsZm91cmNjOwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImZpbmRpbmcgZm91cmNjICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgYXQgb2Zmc2V0ICUiCi0gICAgICBHX0dVSU5UNjRfRk9STUFULCBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksICpvZmZzZXQpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICBidWYgPSBOVUxMOwotICAgIHJldCA9IGdzdF9wYWRfcHVsbF9yYW5nZSAocXRkZW11eC0+c2lua3BhZCwgKm9mZnNldCwgMTYsICZidWYpOwotICAgIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgICAgZ290byBsb2NhdGVfZmFpbGVkOwotICAgIGlmIChHX1VOTElLRUxZIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpICE9IDE2KSkgewotICAgICAgLyogbGlrZWx5IEVPRiAqLwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgIGdvdG8gbG9jYXRlX2ZhaWxlZDsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBleHRyYWN0X2luaXRpYWxfbGVuZ3RoX2FuZF9mb3VyY2MgKG1hcC5kYXRhLCAxNiwgbGVuZ3RoLCAmbGZvdXJjYyk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCpsZW5ndGggPT0gMCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJpbnZhbGlkIGxlbmd0aCAwIik7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gbG9jYXRlX2ZhaWxlZDsKLSAgICB9Ci0KLSAgICBpZiAobGZvdXJjYyA9PSBmb3VyY2MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCBmb3VyY2MgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgKm9mZnNldCk7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgInNraXBwaW5nIGF0b20gJyUiIEdTVF9GT1VSQ0NfRk9STUFUICInIGF0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCAqb2Zmc2V0KTsKLSAgICAgICpvZmZzZXQgKz0gKmxlbmd0aDsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLWxvY2F0ZV9mYWlsZWQ6Ci0gIHsKLSAgICAvKiBtaWdodCBzaW1wbHkgaGF2ZSBoYWQgbGFzdCBvbmUgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZm91cmNjIG5vdCBmb3VuZCIpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotLyogc2hvdWxkIG9ubHkgZG8gc29tZXRoaW5nIGluIHB1bGwgbW9kZSAqLwotLyogY2FsbCB3aXRoIE9CSkVDVCBsb2NrICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotcXRkZW11eF9hZGRfZnJhZ21lbnRlZF9zYW1wbGVzIChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgZ3VpbnQ2NCBsZW5ndGgsIG9mZnNldDsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX09LOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBvZmZzZXQgPSBxdGRlbXV4LT5tb29mX29mZnNldDsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIm5leHQgbW9vZiBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLQotICBpZiAoIW9mZnNldCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJubyBuZXh0IG1vb2YiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci0KLSAgLyogYmVzdCBub3QgZG8gcHVsbCBldGMgd2l0aCBsb2NrIGhlbGQgKi8KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0ZGVtdXgpOwotCi0gIHJldCA9IHF0ZGVtdXhfZmluZF9hdG9tIChxdGRlbXV4LCAmb2Zmc2V0LCAmbGVuZ3RoLCBGT1VSQ0NfbW9vZik7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBmbG93X2ZhaWxlZDsKLQotICByZXQgPSBnc3RfcXRkZW11eF9wdWxsX2F0b20gKHF0ZGVtdXgsIG9mZnNldCwgbGVuZ3RoLCAmYnVmKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgZ290byBmbG93X2ZhaWxlZDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgaWYgKCFxdGRlbXV4X3BhcnNlX21vb2YgKHF0ZGVtdXgsIG1hcC5kYXRhLCBtYXAuc2l6ZSwgb2Zmc2V0LCBOVUxMKSkgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBidWYgPSBOVUxMOwotICAgIGdvdG8gcGFyc2VfZmFpbGVkOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgYnVmID0gTlVMTDsKLQotICBvZmZzZXQgKz0gbGVuZ3RoOwotICAvKiBsb29rIGZvciBuZXh0IG1vb2YgKi8KLSAgcmV0ID0gcXRkZW11eF9maW5kX2F0b20gKHF0ZGVtdXgsICZvZmZzZXQsICZsZW5ndGgsIEZPVVJDQ19tb29mKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgZ290byBmbG93X2ZhaWxlZDsKLQotZXhpdDoKLSAgR1NUX09CSkVDVF9MT0NLIChxdGRlbXV4KTsKLQotICBxdGRlbXV4LT5tb29mX29mZnNldCA9IG9mZnNldDsKLQotICByZXR1cm4gcmVzOwotCi1wYXJzZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIHBhcnNlIG1vb2YiKTsKLSAgICBvZmZzZXQgPSAwOwotICAgIHJlcyA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotZmxvd19mYWlsZWQ6Ci0gIHsKLSAgICAvKiBtYXliZSB1cHN0cmVhbSB0ZW1wb3JhcmlseSBmbHVzaGluZyAqLwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJubyBuZXh0IG1vb2YiKTsKLSAgICAgIG9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJ1cHN0cmVhbSBXUk9OR19TVEFURSIpOwotICAgICAgLyogcmVzdW1lIGF0IGN1cnJlbnQgcG9zaXRpb24gbmV4dCB0aW1lICovCi0gICAgfQotICAgIHJlcyA9IHJldDsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLX0KLQotLyogaW5pdGlhbGlzZSBieXRlcmVhZGVycyBmb3Igc3RibCBzdWItYXRvbXMgKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9zdGJsX2luaXQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLCBHTm9kZSAqIHN0YmwpCi17Ci0gIHN0cmVhbS0+c3RibF9pbmRleCA9IC0xOyAgICAgIC8qIG5vIHNhbXBsZXMgaGF2ZSB5ZXQgYmVlbiBwYXJzZWQgKi8KLSAgc3RyZWFtLT5zYW1wbGVfaW5kZXggPSAtMTsKLQotICAvKiB0aW1lLXRvLXNhbXBsZSBhdG9tICovCi0gIGlmICghcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKHN0YmwsIEZPVVJDQ19zdHRzLCAmc3RyZWFtLT5zdHRzKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAvKiBjb3B5IGF0b20gZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciBmb3IgbGF0ZXIgdXNlICovCi0gIHN0cmVhbS0+c3R0cy5kYXRhID0gZ19tZW1kdXAgKHN0cmVhbS0+c3R0cy5kYXRhLCBzdHJlYW0tPnN0dHMuc2l6ZSk7Ci0KLSAgLyogc2tpcCB2ZXJzaW9uICsgZmxhZ3MgKi8KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnN0cmVhbS0+c3R0cywgMSArIDMpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZzdHJlYW0tPnN0dHMsICZzdHJlYW0tPm5fc2FtcGxlX3RpbWVzKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICIldSB0aW1lc3RhbXAgYmxvY2tzIiwgc3RyZWFtLT5uX3NhbXBsZV90aW1lcyk7Ci0KLSAgLyogbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgKi8KLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfY2h1bmtzICgmc3RyZWFtLT5zdHRzLCBzdHJlYW0tPm5fc2FtcGxlX3RpbWVzLCA4KSkgewotICAgIHN0cmVhbS0+bl9zYW1wbGVfdGltZXMgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnN0cmVhbS0+c3R0cykgLyA4OwotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAib3ZlcnJpZGluZyB0byAldSB0aW1lc3RhbXAgYmxvY2tzIiwKLSAgICAgICAgc3RyZWFtLT5uX3NhbXBsZV90aW1lcyk7Ci0gICAgaWYgKCFzdHJlYW0tPm5fc2FtcGxlX3RpbWVzKQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0gIH0KLQotICAvKiBzeW5jIHNhbXBsZSBhdG9tICovCi0gIHN0cmVhbS0+c3Rwc19wcmVzZW50ID0gRkFMU0U7Ci0gIGlmICgoc3RyZWFtLT5zdHNzX3ByZXNlbnQgPQotICAgICAgICAgICEgIXF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsIChzdGJsLCBGT1VSQ0Nfc3RzcywKLSAgICAgICAgICAgICAgJnN0cmVhbS0+c3RzcykgPyBUUlVFIDogRkFMU0UpID09IFRSVUUpIHsKLSAgICAvKiBjb3B5IGF0b20gZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciBmb3IgbGF0ZXIgdXNlICovCi0gICAgc3RyZWFtLT5zdHNzLmRhdGEgPSBnX21lbWR1cCAoc3RyZWFtLT5zdHNzLmRhdGEsIHN0cmVhbS0+c3Rzcy5zaXplKTsKLQotICAgIC8qIHNraXAgdmVyc2lvbiArIGZsYWdzICovCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnN0cmVhbS0+c3RzcywgMSArIDMpIHx8Ci0gICAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnN0cmVhbS0+c3RzcywgJnN0cmVhbS0+bl9zYW1wbGVfc3luY3MpKQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICBpZiAoc3RyZWFtLT5uX3NhbXBsZV9zeW5jcykgewotICAgICAgLyogbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgKi8KLSAgICAgIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoJnN0cmVhbS0+c3Rzcywgc3RyZWFtLT5uX3NhbXBsZV9zeW5jcywgNCkpCi0gICAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotICAgIH0KLQotICAgIC8qIHBhcnRpYWwgc3luYyBzYW1wbGUgYXRvbSAqLwotICAgIGlmICgoc3RyZWFtLT5zdHBzX3ByZXNlbnQgPQotICAgICAgICAgICAgISAhcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKHN0YmwsIEZPVVJDQ19zdHBzLAotICAgICAgICAgICAgICAgICZzdHJlYW0tPnN0cHMpID8gVFJVRSA6IEZBTFNFKSA9PSBUUlVFKSB7Ci0gICAgICAvKiBjb3B5IGF0b20gZGF0YSBpbnRvIGEgbmV3IGJ1ZmZlciBmb3IgbGF0ZXIgdXNlICovCi0gICAgICBzdHJlYW0tPnN0cHMuZGF0YSA9IGdfbWVtZHVwIChzdHJlYW0tPnN0cHMuZGF0YSwgc3RyZWFtLT5zdHBzLnNpemUpOwotCi0gICAgICAvKiBza2lwIHZlcnNpb24gKyBmbGFncyAqLwotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnN0cmVhbS0+c3RwcywgMSArIDMpIHx8Ci0gICAgICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmc3RyZWFtLT5zdHBzLAotICAgICAgICAgICAgICAmc3RyZWFtLT5uX3NhbXBsZV9wYXJ0aWFsX3N5bmNzKSkKLSAgICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICAgIC8qIGlmIHRoZXJlIGFyZSBubyBlbnRyaWVzLCB0aGUgc3RzcyB0YWJsZSBjb250YWlucyB0aGUgcmVhbAotICAgICAgICogc3luYyBzYW1wbGVzICovCi0gICAgICBpZiAoc3RyZWFtLT5uX3NhbXBsZV9wYXJ0aWFsX3N5bmNzKSB7Ci0gICAgICAgIC8qIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhICovCi0gICAgICAgIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoJnN0cmVhbS0+c3RwcywKLSAgICAgICAgICAgICAgICBzdHJlYW0tPm5fc2FtcGxlX3BhcnRpYWxfc3luY3MsIDQpKQotICAgICAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIHNhbXBsZSBzaXplICovCi0gIGlmICghcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKHN0YmwsIEZPVVJDQ19zdHN6LCAmc3RyZWFtLT5zdHN6KSkKLSAgICBnb3RvIG5vX3NhbXBsZXM7Ci0KLSAgLyogY29weSBhdG9tIGRhdGEgaW50byBhIG5ldyBidWZmZXIgZm9yIGxhdGVyIHVzZSAqLwotICBzdHJlYW0tPnN0c3ouZGF0YSA9IGdfbWVtZHVwIChzdHJlYW0tPnN0c3ouZGF0YSwgc3RyZWFtLT5zdHN6LnNpemUpOwotCi0gIC8qIHNraXAgdmVyc2lvbiArIGZsYWdzICovCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZzdHJlYW0tPnN0c3osIDEgKyAzKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmc3RyZWFtLT5zdHN6LCAmc3RyZWFtLT5zYW1wbGVfc2l6ZSkpCi0gICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnN0cmVhbS0+c3RzeiwgJnN0cmVhbS0+bl9zYW1wbGVzKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICBpZiAoIXN0cmVhbS0+bl9zYW1wbGVzKQotICAgIGdvdG8gbm9fc2FtcGxlczsKLQotICAvKiBzYW1wbGUtdG8tY2h1bmsgYXRvbSAqLwotICBpZiAoIXF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsIChzdGJsLCBGT1VSQ0Nfc3RzYywgJnN0cmVhbS0+c3RzYykpCi0gICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgLyogY29weSBhdG9tIGRhdGEgaW50byBhIG5ldyBidWZmZXIgZm9yIGxhdGVyIHVzZSAqLwotICBzdHJlYW0tPnN0c2MuZGF0YSA9IGdfbWVtZHVwIChzdHJlYW0tPnN0c2MuZGF0YSwgc3RyZWFtLT5zdHNjLnNpemUpOwotCi0gIC8qIHNraXAgdmVyc2lvbiArIGZsYWdzICovCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZzdHJlYW0tPnN0c2MsIDEgKyAzKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmc3RyZWFtLT5zdHNjLAotICAgICAgICAgICZzdHJlYW0tPm5fc2FtcGxlc19wZXJfY2h1bmspKQotICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJuX3NhbXBsZXNfcGVyX2NodW5rICV1IiwKLSAgICAgIHN0cmVhbS0+bl9zYW1wbGVzX3Blcl9jaHVuayk7Ci0KLSAgLyogbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgKi8KLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfY2h1bmtzICgmc3RyZWFtLT5zdHNjLCBzdHJlYW0tPm5fc2FtcGxlc19wZXJfY2h1bmssCi0gICAgICAgICAgMTIpKQotICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0KLSAgLyogY2h1bmsgb2Zmc2V0ICovCi0gIGlmIChxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGVfZnVsbCAoc3RibCwgRk9VUkNDX3N0Y28sICZzdHJlYW0tPnN0Y28pKQotICAgIHN0cmVhbS0+Y29fc2l6ZSA9IHNpemVvZiAoZ3VpbnQzMik7Ci0gIGVsc2UgaWYgKHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsIChzdGJsLCBGT1VSQ0NfY282NCwKLSAgICAgICAgICAmc3RyZWFtLT5zdGNvKSkKLSAgICBzdHJlYW0tPmNvX3NpemUgPSBzaXplb2YgKGd1aW50NjQpOwotICBlbHNlCi0gICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgLyogY29weSBhdG9tIGRhdGEgaW50byBhIG5ldyBidWZmZXIgZm9yIGxhdGVyIHVzZSAqLwotICBzdHJlYW0tPnN0Y28uZGF0YSA9IGdfbWVtZHVwIChzdHJlYW0tPnN0Y28uZGF0YSwgc3RyZWFtLT5zdGNvLnNpemUpOwotCi0gIC8qIHNraXAgdmVyc2lvbiArIGZsYWdzICovCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZzdHJlYW0tPnN0Y28sIDEgKyAzKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAvKiBjaHVua3NfYXJlX3NhbXBsZXMgPT0gVFJVRSBtZWFucyB0cmVhdCBjaHVua3MgYXMgc2FtcGxlcyAqLwotICBzdHJlYW0tPmNodW5rc19hcmVfc2FtcGxlcyA9IHN0cmVhbS0+c2FtcGxlX3NpemUgJiYgIXN0cmVhbS0+c2FtcGxlZDsKLSAgaWYgKHN0cmVhbS0+Y2h1bmtzX2FyZV9zYW1wbGVzKSB7Ci0gICAgLyogdHJlYXQgY2h1bmtzIGFzIHNhbXBsZXMgKi8KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmc3RyZWFtLT5zdGNvLCAmc3RyZWFtLT5uX3NhbXBsZXMpKQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0gIH0gZWxzZSB7Ci0gICAgLyogc2tpcCBudW1iZXIgb2YgZW50cmllcyAqLwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZzdHJlYW0tPnN0Y28sIDQpKQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICAvKiBtYWtlIHN1cmUgdGhlcmUgYXJlIGVub3VnaCBkYXRhIGluIHRoZSBzdHN6IGF0b20gKi8KLSAgICBpZiAoIXN0cmVhbS0+c2FtcGxlX3NpemUpIHsKLSAgICAgIC8qIGRpZmZlcmVudCBzaXplcyBmb3IgZWFjaCBzYW1wbGUgKi8KLSAgICAgIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoJnN0cmVhbS0+c3Rzeiwgc3RyZWFtLT5uX3NhbXBsZXMsIDQpKQotICAgICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYWxsb2NhdGluZyBuX3NhbXBsZXMgJXUgKiAldSAoJS4yZiBNQikiLAotICAgICAgc3RyZWFtLT5uX3NhbXBsZXMsIChndWludCkgc2l6ZW9mIChRdERlbXV4U2FtcGxlKSwKLSAgICAgIHN0cmVhbS0+bl9zYW1wbGVzICogc2l6ZW9mIChRdERlbXV4U2FtcGxlKSAvICgxMDI0LjAgKiAxMDI0LjApKTsKLQotICBpZiAoc3RyZWFtLT5uX3NhbXBsZXMgPj0KLSAgICAgIFFUREVNVVhfTUFYX1NBTVBMRV9JTkRFWF9TSVpFIC8gc2l6ZW9mIChRdERlbXV4U2FtcGxlKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIm5vdCBhbGxvY2F0aW5nIGluZGV4IG9mICVkIHNhbXBsZXMsIHdvdWxkICIKLSAgICAgICAgImJlIGxhcmdlciB0aGFuICV1TUIgKGJyb2tlbiBmaWxlPykiLCBzdHJlYW0tPm5fc2FtcGxlcywKLSAgICAgICAgUVRERU1VWF9NQVhfU0FNUExFX0lOREVYX1NJWkUgPj4gMjApOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGdfYXNzZXJ0IChzdHJlYW0tPnNhbXBsZXMgPT0gTlVMTCk7Ci0gIHN0cmVhbS0+c2FtcGxlcyA9IGdfdHJ5X25ldzAgKFF0RGVtdXhTYW1wbGUsIHN0cmVhbS0+bl9zYW1wbGVzKTsKLSAgaWYgKCFzdHJlYW0tPnNhbXBsZXMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgc2FtcGxlcyIsCi0gICAgICAgIHN0cmVhbS0+bl9zYW1wbGVzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBjb21wb3NpdGlvbiB0aW1lLXRvLXNhbXBsZSAqLwotICBpZiAoKHN0cmVhbS0+Y3R0c19wcmVzZW50ID0KLSAgICAgICAgICAhICFxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGVfZnVsbCAoc3RibCwgRk9VUkNDX2N0dHMsCi0gICAgICAgICAgICAgICZzdHJlYW0tPmN0dHMpID8gVFJVRSA6IEZBTFNFKSA9PSBUUlVFKSB7Ci0gICAgR3N0Qnl0ZVJlYWRlciBjc2xnID0gR1NUX0JZVEVfUkVBREVSX0lOSVQgKE5VTEwsIDApOwotCi0gICAgLyogY29weSBhdG9tIGRhdGEgaW50byBhIG5ldyBidWZmZXIgZm9yIGxhdGVyIHVzZSAqLwotICAgIHN0cmVhbS0+Y3R0cy5kYXRhID0gZ19tZW1kdXAgKHN0cmVhbS0+Y3R0cy5kYXRhLCBzdHJlYW0tPmN0dHMuc2l6ZSk7Ci0KLSAgICAvKiBza2lwIHZlcnNpb24gKyBmbGFncyAqLwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZzdHJlYW0tPmN0dHMsIDEgKyAzKQotICAgICAgICB8fCAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZzdHJlYW0tPmN0dHMsCi0gICAgICAgICAgICAmc3RyZWFtLT5uX2NvbXBvc2l0aW9uX3RpbWVzKSkKLSAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gICAgLyogbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIGRhdGEgKi8KLSAgICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19jaHVua3MgKCZzdHJlYW0tPmN0dHMsIHN0cmVhbS0+bl9jb21wb3NpdGlvbl90aW1lcywKLSAgICAgICAgICAgIDQgKyA0KSkKLSAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gICAgLyogVGhpcyBpcyBvcHRpb25hbCwgaWYgbWlzc2luZyB3ZSBpdGVyYXRlIHRoZSBjdHRzICovCi0gICAgaWYgKHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsIChzdGJsLCBGT1VSQ0NfY3NsZywgJmNzbGcpKSB7Ci0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmY3NsZywgMSArIDMpCi0gICAgICAgICAgfHwgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmY3NsZywgJnN0cmVhbS0+Y3NsZ19zaGlmdCkpIHsKLSAgICAgICAgZ19mcmVlICgoZ3BvaW50ZXIpIGNzbGcuZGF0YSk7Ci0gICAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBnaW50MzIgY3NsZ19sZWFzdCA9IDA7Ci0gICAgICBndWludCBudW1fZW50cmllcywgcG9zOwotICAgICAgZ2ludCBpOwotCi0gICAgICBwb3MgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3BvcyAoJnN0cmVhbS0+Y3R0cyk7Ci0gICAgICBudW1fZW50cmllcyA9IHN0cmVhbS0+bl9jb21wb3NpdGlvbl90aW1lczsKLQotICAgICAgc3RyZWFtLT5jc2xnX3NoaWZ0ID0gMDsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKLSAgICAgICAgZ2ludDMyIG9mZnNldDsKLQotICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKCZzdHJlYW0tPmN0dHMsIDQpOwotICAgICAgICBvZmZzZXQgPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X2ludDMyX2JlX3VuY2hlY2tlZCAoJnN0cmVhbS0+Y3R0cyk7Ci0KLSAgICAgICAgaWYgKG9mZnNldCA8IGNzbGdfbGVhc3QpCi0gICAgICAgICAgY3NsZ19sZWFzdCA9IG9mZnNldDsKLSAgICAgIH0KLQotICAgICAgaWYgKGNzbGdfbGVhc3QgPCAwKQotICAgICAgICBzdHJlYW0tPmNzbGdfc2hpZnQgPSBBQlMgKGNzbGdfbGVhc3QpOwotICAgICAgZWxzZQotICAgICAgICBzdHJlYW0tPmNzbGdfc2hpZnQgPSAwOwotCi0gICAgICAvKiByZXNldCB0aGUgcmVhZGVyIHNvIHdlIGNhbiBnZW5lcmF0ZSBzYW1wbGUgdGFibGUgKi8KLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9zZXRfcG9zICgmc3RyZWFtLT5jdHRzLCBwb3MpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBFbnN1cmUgdGhlIGNzbGdfc2hpZnQgdmFsdWUgaXMgY29uc2lzdGVudCBzbyB3ZSBjYW4gdXNlIGl0Ci0gICAgICogdW5jb25kaXRpb25uYWxseSB0byBwcm9kdWNlIFRTIGFuZCBTZWdtZW50ICovCi0gICAgc3RyZWFtLT5jc2xnX3NoaWZ0ID0gMDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi1jb3JydXB0X2ZpbGU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRkZW11eCwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgKF8oIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIpKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3NhbXBsZXM6Ci0gIHsKLSAgICBnc3RfcXRkZW11eF9zdGJsX2ZyZWUgKHN0cmVhbSk7Ci0gICAgaWYgKCFxdGRlbXV4LT5mcmFnbWVudGVkKSB7Ci0gICAgICAvKiBub3QgcXVpdGUgZ29vZCAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAic3RyZWFtIGhhcyBubyBzYW1wbGVzIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG1heSBwaWNrIHVwIHNhbXBsZXMgZWxzZXdoZXJlICovCi0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gIH0KLX0KLQotLyogY29sbGVjdCBzYW1wbGVzIGZyb20gdGhlIG5leHQgc2FtcGxlIHRvIGJlIHBhcnNlZCB1cCB0byBzYW1wbGUgQG4gZm9yIEBzdHJlYW0KLSAqIGJ5IHJlYWRpbmcgdGhlIGluZm8gZnJvbSBAc3RibAotICoKLSAqIFRoaXMgY29kZSBjYW4gYmUgZXhlY3V0ZWQgZnJvbSBib3RoIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGFuZCB0aGUgc2Vla2luZwotICogdGhyZWFkIHNvIGl0IHRha2VzIHRoZSBvYmplY3QgbG9jayB0byBwcm90ZWN0IGl0c2VsZgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2Vfc2FtcGxlcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sIGd1aW50MzIgbikKLXsKLSAgZ2ludCBpLCBqLCBrOwotICBRdERlbXV4U2FtcGxlICpzYW1wbGVzLCAqZmlyc3QsICpjdXIsICpsYXN0OwotICBndWludDMyIG5fc2FtcGxlc19wZXJfY2h1bms7Ci0gIGd1aW50MzIgbl9zYW1wbGVzOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAicGFyc2luZyBzYW1wbGVzIGZvciBzdHJlYW0gZm91cmNjICUiCi0gICAgICBHU1RfRk9VUkNDX0ZPUk1BVCAiLCBwYWQgJXMiLCBHU1RfRk9VUkNDX0FSR1MgKHN0cmVhbS0+Zm91cmNjKSwKLSAgICAgIHN0cmVhbS0+cGFkID8gR1NUX1BBRF9OQU1FIChzdHJlYW0tPnBhZCkgOiAiKE5VTEwpIik7Ci0KLSAgbl9zYW1wbGVzID0gc3RyZWFtLT5uX3NhbXBsZXM7Ci0KLSAgaWYgKG4gPj0gbl9zYW1wbGVzKQotICAgIGdvdG8gb3V0X29mX3NhbXBsZXM7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChxdGRlbXV4KTsKLSAgaWYgKG4gPD0gc3RyZWFtLT5zdGJsX2luZGV4KQotICAgIGdvdG8gYWxyZWFkeV9wYXJzZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInBhcnNpbmcgdXAgdG8gc2FtcGxlICV1Iiwgbik7Ci0KLSAgaWYgKCFzdHJlYW0tPnN0c3ouZGF0YSkgewotICAgIC8qIHNvIHdlIGFscmVhZHkgcGFyc2VkIGFuZCBwYXNzZWQgYWxsIHRoZSBtb292IHNhbXBsZXM7Ci0gICAgICogb250byBmcmFnbWVudGVkIG9uZXMgKi8KLSAgICBnX2Fzc2VydCAocXRkZW11eC0+ZnJhZ21lbnRlZCk7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogcG9pbnRlciB0byB0aGUgc2FtcGxlIHRhYmxlICovCi0gIHNhbXBsZXMgPSBzdHJlYW0tPnNhbXBsZXM7Ci0KLSAgLyogc3RhcnRzIGZyb20gLTEsIG1vdmVzIHRvIHRoZSBuZXh0IHNhbXBsZSBpbmRleCB0byBwYXJzZSAqLwotICBzdHJlYW0tPnN0YmxfaW5kZXgrKzsKLQotICAvKiBrZWVwIHRyYWNrIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBzYW1wbGUgdG8gZmlsbCAqLwotICBmaXJzdCA9ICZzYW1wbGVzW3N0cmVhbS0+c3RibF9pbmRleF07Ci0gIGxhc3QgPSAmc2FtcGxlc1tuXTsKLQotICBpZiAoIXN0cmVhbS0+Y2h1bmtzX2FyZV9zYW1wbGVzKSB7Ci0gICAgLyogc2V0IHRoZSBzYW1wbGUgc2l6ZXMgKi8KLSAgICBpZiAoc3RyZWFtLT5zYW1wbGVfc2l6ZSA9PSAwKSB7Ci0gICAgICAvKiBkaWZmZXJlbnQgc2l6ZXMgZm9yIGVhY2ggc2FtcGxlICovCi0gICAgICBmb3IgKGN1ciA9IGZpcnN0OyBjdXIgPD0gbGFzdDsgY3VyKyspIHsKLSAgICAgICAgY3VyLT5zaXplID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkICgmc3RyZWFtLT5zdHN6KTsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJzYW1wbGUgJWQgaGFzIHNpemUgJXUiLAotICAgICAgICAgICAgKGd1aW50KSAoY3VyIC0gc2FtcGxlcyksIGN1ci0+c2l6ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHNhbXBsZXMgaGF2ZSB0aGUgc2FtZSBzaXplICovCi0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImFsbCBzYW1wbGVzIGhhdmUgc2l6ZSAldSIsIHN0cmVhbS0+c2FtcGxlX3NpemUpOwotICAgICAgZm9yIChjdXIgPSBmaXJzdDsgY3VyIDw9IGxhc3Q7IGN1cisrKQotICAgICAgICBjdXItPnNpemUgPSBzdHJlYW0tPnNhbXBsZV9zaXplOwotICAgIH0KLSAgfQotCi0gIG5fc2FtcGxlc19wZXJfY2h1bmsgPSBzdHJlYW0tPm5fc2FtcGxlc19wZXJfY2h1bms7Ci0gIGN1ciA9IGZpcnN0OwotCi0gIGZvciAoaSA9IHN0cmVhbS0+c3RzY19pbmRleDsgaSA8IG5fc2FtcGxlc19wZXJfY2h1bms7IGkrKykgewotICAgIGd1aW50MzIgbGFzdF9jaHVuazsKLQotICAgIGlmIChzdHJlYW0tPnN0c2NfY2h1bmtfaW5kZXggPj0gc3RyZWFtLT5sYXN0X2NodW5rCi0gICAgICAgIHx8IHN0cmVhbS0+c3RzY19jaHVua19pbmRleCA8IHN0cmVhbS0+Zmlyc3RfY2h1bmspIHsKLSAgICAgIHN0cmVhbS0+Zmlyc3RfY2h1bmsgPQotICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJnN0cmVhbS0+c3RzYyk7Ci0gICAgICBzdHJlYW0tPnNhbXBsZXNfcGVyX2NodW5rID0KLSAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZzdHJlYW0tPnN0c2MpOwotICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXBfdW5jaGVja2VkICgmc3RyZWFtLT5zdHNjLCA0KTsKLQotICAgICAgLyogY2h1bmsgbnVtYmVycyBhcmUgY291bnRlZCBmcm9tIDEgaXQgc2VlbXMgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPmZpcnN0X2NodW5rID09IDApKQotICAgICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAgICAgLS1zdHJlYW0tPmZpcnN0X2NodW5rOwotCi0gICAgICAvKiB0aGUgbGFzdCBjaHVuayBvZiBlYWNoIGVudHJ5IGlzIGNhbGN1bGF0ZWQgYnkgdGFraW5nIHRoZSBmaXJzdCBjaHVuawotICAgICAgICogb2YgdGhlIG5leHQgZW50cnk7IGV4Y2VwdCBpZiB0aGVyZSBpcyBubyBuZXh0LCB3aGVyZSB3ZSBmYWtlIGl0IHdpdGgKLSAgICAgICAqIElOVF9NQVggKi8KLSAgICAgIGlmIChHX1VOTElLRUxZIChpID09IChzdHJlYW0tPm5fc2FtcGxlc19wZXJfY2h1bmsgLSAxKSkpIHsKLSAgICAgICAgc3RyZWFtLT5sYXN0X2NodW5rID0gR19NQVhVSU5UMzI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdHJlYW0tPmxhc3RfY2h1bmsgPQotICAgICAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3BlZWtfdWludDMyX2JlX3VuY2hlY2tlZCAoJnN0cmVhbS0+c3RzYyk7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPmxhc3RfY2h1bmsgPT0gMCkpCi0gICAgICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICAgICAgLS1zdHJlYW0tPmxhc3RfY2h1bms7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICJlbnRyeSAlZCBoYXMgZmlyc3RfY2h1bmsgJWQsIGxhc3RfY2h1bmsgJWQsIHNhbXBsZXNfcGVyX2NodW5rICVkIiwgaSwKLSAgICAgICAgICBzdHJlYW0tPmZpcnN0X2NodW5rLCBzdHJlYW0tPmxhc3RfY2h1bmssIHN0cmVhbS0+c2FtcGxlc19wZXJfY2h1bmspOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT5sYXN0X2NodW5rIDwgc3RyZWFtLT5maXJzdF9jaHVuaykpCi0gICAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gICAgICBpZiAoc3RyZWFtLT5sYXN0X2NodW5rICE9IEdfTUFYVUlOVDMyKSB7Ci0gICAgICAgIGlmICghcXRfYXRvbV9wYXJzZXJfcGVla19zdWIgKCZzdHJlYW0tPnN0Y28sCi0gICAgICAgICAgICAgICAgc3RyZWFtLT5maXJzdF9jaHVuayAqIHN0cmVhbS0+Y29fc2l6ZSwKLSAgICAgICAgICAgICAgICAoc3RyZWFtLT5sYXN0X2NodW5rIC0gc3RyZWFtLT5maXJzdF9jaHVuaykgKiBzdHJlYW0tPmNvX3NpemUsCi0gICAgICAgICAgICAgICAgJnN0cmVhbS0+Y29fY2h1bmspKQotICAgICAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gICAgICB9IGVsc2UgewotICAgICAgICBzdHJlYW0tPmNvX2NodW5rID0gc3RyZWFtLT5zdGNvOwotICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmc3RyZWFtLT5jb19jaHVuaywKLSAgICAgICAgICAgICAgICBzdHJlYW0tPmZpcnN0X2NodW5rICogc3RyZWFtLT5jb19zaXplKSkKLSAgICAgICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgICAgIH0KLQotICAgICAgc3RyZWFtLT5zdHNjX2NodW5rX2luZGV4ID0gc3RyZWFtLT5maXJzdF9jaHVuazsKLSAgICB9Ci0KLSAgICBsYXN0X2NodW5rID0gc3RyZWFtLT5sYXN0X2NodW5rOwotCi0gICAgaWYgKHN0cmVhbS0+Y2h1bmtzX2FyZV9zYW1wbGVzKSB7Ci0gICAgICBjdXIgPSAmc2FtcGxlc1tzdHJlYW0tPnN0c2NfY2h1bmtfaW5kZXhdOwotCi0gICAgICBmb3IgKGogPSBzdHJlYW0tPnN0c2NfY2h1bmtfaW5kZXg7IGogPCBsYXN0X2NodW5rOyBqKyspIHsKLSAgICAgICAgaWYgKGogPiBuKSB7Ci0gICAgICAgICAgLyogc2F2ZSBzdGF0ZSAqLwotICAgICAgICAgIHN0cmVhbS0+c3RzY19jaHVua19pbmRleCA9IGo7Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VyLT5vZmZzZXQgPQotICAgICAgICAgICAgcXRfYXRvbV9wYXJzZXJfZ2V0X29mZnNldF91bmNoZWNrZWQgKCZzdHJlYW0tPmNvX2NodW5rLAotICAgICAgICAgICAgc3RyZWFtLT5jb19zaXplKTsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIkNyZWF0ZWQgZW50cnkgJWQgd2l0aCBvZmZzZXQgIgotICAgICAgICAgICAgIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIGosIGN1ci0+b2Zmc2V0KTsKLQotICAgICAgICBpZiAoc3RyZWFtLT5zYW1wbGVzX3Blcl9mcmFtZSAqIHN0cmVhbS0+Ynl0ZXNfcGVyX2ZyYW1lKSB7Ci0gICAgICAgICAgY3VyLT5zaXplID0KLSAgICAgICAgICAgICAgKHN0cmVhbS0+c2FtcGxlc19wZXJfY2h1bmsgKiBzdHJlYW0tPm5fY2hhbm5lbHMpIC8KLSAgICAgICAgICAgICAgc3RyZWFtLT5zYW1wbGVzX3Blcl9mcmFtZSAqIHN0cmVhbS0+Ynl0ZXNfcGVyX2ZyYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGN1ci0+c2l6ZSA9IHN0cmVhbS0+c2FtcGxlc19wZXJfY2h1bms7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgImtleWZyYW1lIHNhbXBsZSAlZDogdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzaXplICV1IiwKLSAgICAgICAgICAgIGosIEdTVF9USU1FX0FSR1MgKFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+c3Rjb19zYW1wbGVfaW5kZXgpKSwgY3VyLT5zaXplKTsKLQotICAgICAgICBjdXItPnRpbWVzdGFtcCA9IHN0cmVhbS0+c3Rjb19zYW1wbGVfaW5kZXg7Ci0gICAgICAgIGN1ci0+ZHVyYXRpb24gPSBzdHJlYW0tPnNhbXBsZXNfcGVyX2NodW5rOwotICAgICAgICBjdXItPmtleWZyYW1lID0gVFJVRTsKLSAgICAgICAgY3VyKys7Ci0KLSAgICAgICAgc3RyZWFtLT5zdGNvX3NhbXBsZV9pbmRleCArPSBzdHJlYW0tPnNhbXBsZXNfcGVyX2NodW5rOwotICAgICAgfQotICAgICAgc3RyZWFtLT5zdHNjX2NodW5rX2luZGV4ID0gajsKLSAgICB9IGVsc2UgewotICAgICAgZm9yIChqID0gc3RyZWFtLT5zdHNjX2NodW5rX2luZGV4OyBqIDwgbGFzdF9jaHVuazsgaisrKSB7Ci0gICAgICAgIGd1aW50MzIgc2FtcGxlc19wZXJfY2h1bms7Ci0gICAgICAgIGd1aW50NjQgY2h1bmtfb2Zmc2V0OwotCi0gICAgICAgIGlmICghc3RyZWFtLT5zdHNjX3NhbXBsZV9pbmRleAotICAgICAgICAgICAgJiYgIXF0X2F0b21fcGFyc2VyX2dldF9vZmZzZXQgKCZzdHJlYW0tPmNvX2NodW5rLCBzdHJlYW0tPmNvX3NpemUsCi0gICAgICAgICAgICAgICAgJnN0cmVhbS0+Y2h1bmtfb2Zmc2V0KSkKLSAgICAgICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAgICAgICBzYW1wbGVzX3Blcl9jaHVuayA9IHN0cmVhbS0+c2FtcGxlc19wZXJfY2h1bms7Ci0gICAgICAgIGNodW5rX29mZnNldCA9IHN0cmVhbS0+Y2h1bmtfb2Zmc2V0OwotCi0gICAgICAgIGZvciAoayA9IHN0cmVhbS0+c3RzY19zYW1wbGVfaW5kZXg7IGsgPCBzYW1wbGVzX3Blcl9jaHVuazsgaysrKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJjcmVhdGluZyBlbnRyeSAlZCB3aXRoIG9mZnNldCAlIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgYW5kIHNpemUgJWQiLAotICAgICAgICAgICAgICAoZ3VpbnQpIChjdXIgLSBzYW1wbGVzKSwgY2h1bmtfb2Zmc2V0LCBjdXItPnNpemUpOwotCi0gICAgICAgICAgY3VyLT5vZmZzZXQgPSBjaHVua19vZmZzZXQ7Ci0gICAgICAgICAgY2h1bmtfb2Zmc2V0ICs9IGN1ci0+c2l6ZTsKLSAgICAgICAgICBjdXIrKzsKLQotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChjdXIgPiBsYXN0KSkgewotICAgICAgICAgICAgLyogc2F2ZSBzdGF0ZSAqLwotICAgICAgICAgICAgc3RyZWFtLT5zdHNjX3NhbXBsZV9pbmRleCA9IGsgKyAxOwotICAgICAgICAgICAgc3RyZWFtLT5jaHVua19vZmZzZXQgPSBjaHVua19vZmZzZXQ7Ci0gICAgICAgICAgICBzdHJlYW0tPnN0c2NfY2h1bmtfaW5kZXggPSBqOwotICAgICAgICAgICAgZ290byBkb25lMjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RyZWFtLT5zdHNjX3NhbXBsZV9pbmRleCA9IDA7Ci0gICAgICB9Ci0gICAgICBzdHJlYW0tPnN0c2NfY2h1bmtfaW5kZXggPSBqOwotICAgIH0KLSAgICBzdHJlYW0tPnN0c2NfaW5kZXgrKzsKLSAgfQotCi0gIGlmIChzdHJlYW0tPmNodW5rc19hcmVfc2FtcGxlcykKLSAgICBnb3RvIGN0dHM7Ci1kb25lMjoKLSAgewotICAgIGd1aW50MzIgbl9zYW1wbGVfdGltZXM7Ci0KLSAgICBuX3NhbXBsZV90aW1lcyA9IHN0cmVhbS0+bl9zYW1wbGVfdGltZXM7Ci0gICAgY3VyID0gZmlyc3Q7Ci0KLSAgICBmb3IgKGkgPSBzdHJlYW0tPnN0dHNfaW5kZXg7IGkgPCBuX3NhbXBsZV90aW1lczsgaSsrKSB7Ci0gICAgICBndWludDMyIHN0dHNfc2FtcGxlczsKLSAgICAgIGdpbnQzMiBzdHRzX2R1cmF0aW9uOwotICAgICAgZ2ludDY0IHN0dHNfdGltZTsKLQotICAgICAgaWYgKHN0cmVhbS0+c3R0c19zYW1wbGVfaW5kZXggPj0gc3RyZWFtLT5zdHRzX3NhbXBsZXMKLSAgICAgICAgICB8fCAhc3RyZWFtLT5zdHRzX3NhbXBsZV9pbmRleCkgewotCi0gICAgICAgIHN0cmVhbS0+c3R0c19zYW1wbGVzID0KLSAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJnN0cmVhbS0+c3R0cyk7Ci0gICAgICAgIHN0cmVhbS0+c3R0c19kdXJhdGlvbiA9Ci0gICAgICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZzdHJlYW0tPnN0dHMpOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiYmxvY2sgJWQsICV1IHRpbWVzdGFtcHMsIGR1cmF0aW9uICV1IiwKLSAgICAgICAgICAgIGksIHN0cmVhbS0+c3R0c19zYW1wbGVzLCBzdHJlYW0tPnN0dHNfZHVyYXRpb24pOwotCi0gICAgICAgIHN0cmVhbS0+c3R0c19zYW1wbGVfaW5kZXggPSAwOwotICAgICAgfQotCi0gICAgICBzdHRzX3NhbXBsZXMgPSBzdHJlYW0tPnN0dHNfc2FtcGxlczsKLSAgICAgIHN0dHNfZHVyYXRpb24gPSBzdHJlYW0tPnN0dHNfZHVyYXRpb247Ci0gICAgICBzdHRzX3RpbWUgPSBzdHJlYW0tPnN0dHNfdGltZTsKLQotICAgICAgZm9yIChqID0gc3RyZWFtLT5zdHRzX3NhbXBsZV9pbmRleDsgaiA8IHN0dHNfc2FtcGxlczsgaisrKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAic2FtcGxlICVkOiBpbmRleCAlZCwgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIChndWludCkgKGN1ciAtIHNhbXBsZXMpLCBqLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKHN0cmVhbSwgc3R0c190aW1lKSkpOwotCi0gICAgICAgIGN1ci0+dGltZXN0YW1wID0gc3R0c190aW1lOwotICAgICAgICBjdXItPmR1cmF0aW9uID0gc3R0c19kdXJhdGlvbjsKLQotICAgICAgICAvKiBhdm9pZCAzMi1iaXQgd3JhcC1hcm91bmQsCi0gICAgICAgICAqIGJ1dCBzdGlsbCBtaW5kIHBvc3NpYmxlICduZWdhdGl2ZScgZHVyYXRpb24gKi8KLSAgICAgICAgc3R0c190aW1lICs9IChnaW50NjQpIHN0dHNfZHVyYXRpb247Ci0gICAgICAgIGN1cisrOwotCi0gICAgICAgIGlmIChHX1VOTElLRUxZIChjdXIgPiBsYXN0KSkgewotICAgICAgICAgIC8qIHNhdmUgdmFsdWVzICovCi0gICAgICAgICAgc3RyZWFtLT5zdHRzX3RpbWUgPSBzdHRzX3RpbWU7Ci0gICAgICAgICAgc3RyZWFtLT5zdHRzX3NhbXBsZV9pbmRleCA9IGogKyAxOwotICAgICAgICAgIGlmIChzdHJlYW0tPnN0dHNfc2FtcGxlX2luZGV4ID49IHN0cmVhbS0+c3R0c19zYW1wbGVzKQotICAgICAgICAgICAgc3RyZWFtLT5zdHRzX2luZGV4Kys7Ci0gICAgICAgICAgZ290byBkb25lMzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3RyZWFtLT5zdHRzX3NhbXBsZV9pbmRleCA9IDA7Ci0gICAgICBzdHJlYW0tPnN0dHNfdGltZSA9IHN0dHNfdGltZTsKLSAgICAgIHN0cmVhbS0+c3R0c19pbmRleCsrOwotICAgIH0KLSAgICAvKiBmaWxsIHVwIGVtcHR5IHRpbWVzdGFtcHMgd2l0aCB0aGUgbGFzdCB0aW1lc3RhbXAsIHRoaXMgY2FuIGhhcHBlbiB3aGVuCi0gICAgICogdGhlIGxhc3Qgc2FtcGxlcyBkbyBub3QgZGVjb2RlIGFuZCBzbyB3ZSBkb24ndCBoYXZlIHRpbWVzdGFtcHMgZm9yIHRoZW0uCi0gICAgICogV2UgaG93ZXZlciBsb29rIGF0IHRoZSBsYXN0IHRpbWVzdGFtcCB0byBlc3RpbWF0ZSB0aGUgdHJhY2sgbGVuZ3RoIHNvIHdlCi0gICAgICogbmVlZCBzb21ldGhpbmcgaW4gaGVyZS4gKi8KLSAgICBmb3IgKDsgY3VyIDwgbGFzdDsgY3VyKyspIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgImZpbGwgc2FtcGxlICVkOiB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIChndWludCkgKGN1ciAtIHNhbXBsZXMpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKFFUU1RSRUFNVElNRV9UT19HU1RUSU1FIChzdHJlYW0sIHN0cmVhbS0+c3R0c190aW1lKSkpOwotICAgICAgY3VyLT50aW1lc3RhbXAgPSBzdHJlYW0tPnN0dHNfdGltZTsKLSAgICAgIGN1ci0+ZHVyYXRpb24gPSAtMTsKLSAgICB9Ci0gIH0KLWRvbmUzOgotICB7Ci0gICAgLyogc2FtcGxlIHN5bmMsIGNhbiBiZSBOVUxMICovCi0gICAgaWYgKHN0cmVhbS0+c3Rzc19wcmVzZW50ID09IFRSVUUpIHsKLSAgICAgIGd1aW50MzIgbl9zYW1wbGVfc3luY3M7Ci0KLSAgICAgIG5fc2FtcGxlX3N5bmNzID0gc3RyZWFtLT5uX3NhbXBsZV9zeW5jczsKLQotICAgICAgaWYgKCFuX3NhbXBsZV9zeW5jcykgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYWxsIHNhbXBsZXMgYXJlIGtleWZyYW1lcyIpOwotICAgICAgICBzdHJlYW0tPmFsbF9rZXlmcmFtZSA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSBzdHJlYW0tPnN0c3NfaW5kZXg7IGkgPCBuX3NhbXBsZV9zeW5jczsgaSsrKSB7Ci0gICAgICAgICAgLyogbm90ZSB0aGF0IHRoZSBmaXJzdCBzYW1wbGUgaXMgaW5kZXggMSwgbm90IDAgKi8KLSAgICAgICAgICBndWludDMyIGluZGV4OwotCi0gICAgICAgICAgaW5kZXggPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKCZzdHJlYW0tPnN0c3MpOwotCi0gICAgICAgICAgaWYgKEdfTElLRUxZIChpbmRleCA+IDAgJiYgaW5kZXggPD0gbl9zYW1wbGVzKSkgewotICAgICAgICAgICAgaW5kZXggLT0gMTsKLSAgICAgICAgICAgIHNhbXBsZXNbaW5kZXhdLmtleWZyYW1lID0gVFJVRTsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzYW1wbGVzIGF0ICV1IGlzIGtleWZyYW1lIiwgaW5kZXgpOwotICAgICAgICAgICAgLyogYW5kIGV4aXQgaWYgd2UgaGF2ZSBlbm91Z2ggc2FtcGxlcyAqLwotICAgICAgICAgICAgaWYgKEdfVU5MSUtFTFkgKGluZGV4ID49IG4pKSB7Ci0gICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIHNhdmUgc3RhdGUgKi8KLSAgICAgICAgc3RyZWFtLT5zdHNzX2luZGV4ID0gaTsKLSAgICAgIH0KLQotICAgICAgLyogc3RwcyBtYXJrcyBwYXJ0aWFsIHN5bmMgZnJhbWVzIGxpa2Ugb3BlbiBHT1AgSS1GcmFtZXMgKi8KLSAgICAgIGlmIChzdHJlYW0tPnN0cHNfcHJlc2VudCA9PSBUUlVFKSB7Ci0gICAgICAgIGd1aW50MzIgbl9zYW1wbGVfcGFydGlhbF9zeW5jczsKLQotICAgICAgICBuX3NhbXBsZV9wYXJ0aWFsX3N5bmNzID0gc3RyZWFtLT5uX3NhbXBsZV9wYXJ0aWFsX3N5bmNzOwotCi0gICAgICAgIC8qIGlmIHRoZXJlIGFyZSBubyBlbnRyaWVzLCB0aGUgc3RzcyB0YWJsZSBjb250YWlucyB0aGUgcmVhbAotICAgICAgICAgKiBzeW5jIHNhbXBsZXMgKi8KLSAgICAgICAgaWYgKG5fc2FtcGxlX3BhcnRpYWxfc3luY3MpIHsKLSAgICAgICAgICBmb3IgKGkgPSBzdHJlYW0tPnN0cHNfaW5kZXg7IGkgPCBuX3NhbXBsZV9wYXJ0aWFsX3N5bmNzOyBpKyspIHsKLSAgICAgICAgICAgIC8qIG5vdGUgdGhhdCB0aGUgZmlyc3Qgc2FtcGxlIGlzIGluZGV4IDEsIG5vdCAwICovCi0gICAgICAgICAgICBndWludDMyIGluZGV4OwotCi0gICAgICAgICAgICBpbmRleCA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJnN0cmVhbS0+c3Rwcyk7Ci0KLSAgICAgICAgICAgIGlmIChHX0xJS0VMWSAoaW5kZXggPiAwICYmIGluZGV4IDw9IG5fc2FtcGxlcykpIHsKLSAgICAgICAgICAgICAgaW5kZXggLT0gMTsKLSAgICAgICAgICAgICAgc2FtcGxlc1tpbmRleF0ua2V5ZnJhbWUgPSBUUlVFOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic2FtcGxlcyBhdCAldSBpcyBrZXlmcmFtZSIsIGluZGV4KTsKLSAgICAgICAgICAgICAgLyogYW5kIGV4aXQgaWYgd2UgaGF2ZSBlbm91Z2ggc2FtcGxlcyAqLwotICAgICAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoaW5kZXggPj0gbikpIHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogc2F2ZSBzdGF0ZSAqLwotICAgICAgICAgIHN0cmVhbS0+c3Rwc19pbmRleCA9IGk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogbm8gc3RzcywgYWxsIHNhbXBsZXMgYXJlIGtleWZyYW1lcyAqLwotICAgICAgc3RyZWFtLT5hbGxfa2V5ZnJhbWUgPSBUUlVFOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInNldHRpbmcgYWxsIGtleWZyYW1lcyIpOwotICAgIH0KLSAgfQotCi1jdHRzOgotICAvKiBjb21wb3NpdGlvbiB0aW1lIHRvIHNhbXBsZSAqLwotICBpZiAoc3RyZWFtLT5jdHRzX3ByZXNlbnQgPT0gVFJVRSkgewotICAgIGd1aW50MzIgbl9jb21wb3NpdGlvbl90aW1lczsKLSAgICBndWludDMyIGN0dHNfY291bnQ7Ci0gICAgZ2ludDMyIGN0dHNfc29mZnNldDsKLQotICAgIC8qIEZpbGwgaW4gdGhlIHB0c19vZmZzZXRzICovCi0gICAgY3VyID0gZmlyc3Q7Ci0gICAgbl9jb21wb3NpdGlvbl90aW1lcyA9IHN0cmVhbS0+bl9jb21wb3NpdGlvbl90aW1lczsKLQotICAgIGZvciAoaSA9IHN0cmVhbS0+Y3R0c19pbmRleDsgaSA8IG5fY29tcG9zaXRpb25fdGltZXM7IGkrKykgewotICAgICAgaWYgKHN0cmVhbS0+Y3R0c19zYW1wbGVfaW5kZXggPj0gc3RyZWFtLT5jdHRzX2NvdW50Ci0gICAgICAgICAgfHwgIXN0cmVhbS0+Y3R0c19zYW1wbGVfaW5kZXgpIHsKLSAgICAgICAgc3RyZWFtLT5jdHRzX2NvdW50ID0KLSAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAoJnN0cmVhbS0+Y3R0cyk7Ci0gICAgICAgIHN0cmVhbS0+Y3R0c19zb2Zmc2V0ID0KLSAgICAgICAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmVfdW5jaGVja2VkICgmc3RyZWFtLT5jdHRzKTsKLSAgICAgICAgc3RyZWFtLT5jdHRzX3NhbXBsZV9pbmRleCA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIGN0dHNfY291bnQgPSBzdHJlYW0tPmN0dHNfY291bnQ7Ci0gICAgICBjdHRzX3NvZmZzZXQgPSBzdHJlYW0tPmN0dHNfc29mZnNldDsKLQotICAgICAgZm9yIChqID0gc3RyZWFtLT5jdHRzX3NhbXBsZV9pbmRleDsgaiA8IGN0dHNfY291bnQ7IGorKykgewotICAgICAgICBjdXItPnB0c19vZmZzZXQgPSBjdHRzX3NvZmZzZXQ7Ci0gICAgICAgIGN1cisrOwotCi0gICAgICAgIGlmIChHX1VOTElLRUxZIChjdXIgPiBsYXN0KSkgewotICAgICAgICAgIC8qIHNhdmUgc3RhdGUgKi8KLSAgICAgICAgICBzdHJlYW0tPmN0dHNfc2FtcGxlX2luZGV4ID0gaiArIDE7Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzdHJlYW0tPmN0dHNfc2FtcGxlX2luZGV4ID0gMDsKLSAgICAgIHN0cmVhbS0+Y3R0c19pbmRleCsrOwotICAgIH0KLSAgfQotZG9uZToKLSAgc3RyZWFtLT5zdGJsX2luZGV4ID0gbjsKLSAgLyogaWYgaW5kZXggaGFzIGJlZW4gY29tcGxldGVseSBwYXJzZWQsIGZyZWUgZGF0YSB0aGF0IGlzIG5vLWxvbmdlciBuZWVkZWQgKi8KLSAgaWYgKG4gKyAxID09IHN0cmVhbS0+bl9zYW1wbGVzKSB7Ci0gICAgZ3N0X3F0ZGVtdXhfc3RibF9mcmVlIChzdHJlYW0pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXJzZWQgYWxsIGF2YWlsYWJsZSBzYW1wbGVzOyIpOwotICAgIGlmIChxdGRlbXV4LT5wdWxsYmFzZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJjaGVja2luZyBmb3IgbW9yZSBzYW1wbGVzIik7Ci0gICAgICB3aGlsZSAobiArIDEgPT0gc3RyZWFtLT5uX3NhbXBsZXMpCi0gICAgICAgIGlmIChxdGRlbXV4X2FkZF9mcmFnbWVudGVkX3NhbXBsZXMgKHF0ZGVtdXgpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocXRkZW11eCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogU1VDQ0VTUyAqLwotYWxyZWFkeV9wYXJzZWQ6Ci0gIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgIlRyaWVkIHRvIHBhcnNlIHVwIHRvIHNhbXBsZSAldSBidXQgdGhpcyBzYW1wbGUgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQiLAotICAgICAgICBuKTsKLSAgICAvKiBpZiBmcmFnbWVudGVkLCB0aGVyZSBtYXkgYmUgbW9yZSAqLwotICAgIGlmIChxdGRlbXV4LT5mcmFnbWVudGVkICYmIG4gPT0gc3RyZWFtLT5zdGJsX2luZGV4KQotICAgICAgZ290byBkb25lOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChxdGRlbXV4KTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICAvKiBFUlJPUlMgKi8KLW91dF9vZl9zYW1wbGVzOgotICB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJUcmllZCB0byBwYXJzZSB1cCB0byBzYW1wbGUgJXUgYnV0IHRoZXJlIGFyZSBvbmx5ICV1IHNhbXBsZXMiLCBuICsgMSwKLSAgICAgICAgc3RyZWFtLT5uX3NhbXBsZXMpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAoXygiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotY29ycnVwdF9maWxlOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHF0ZGVtdXgpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAoXygiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBjb2xsZWN0IGFsbCBzZWdtZW50IGluZm8gZm9yIEBzdHJlYW0uCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9zZWdtZW50cyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgR05vZGUgKiB0cmFrKQotewotICBHTm9kZSAqZWR0czsKLSAgLyogYWNjZXB0IGVkdHMgaWYgdGhleSBjb250YWluIGdhcHMgYXQgc3RhcnQgYW5kIHRoZXJlIGlzIG9ubHkKLSAgICogb25lIG1lZGlhIHNlZ21lbnQgKi8KLSAgZ2Jvb2xlYW4gYWxsb3dfcHVzaGJhc2VkX2VkdHMgPSBUUlVFOwotICBnaW50IG1lZGlhX3NlZ21lbnRzX2NvdW50ID0gMDsKLQotICAvKiBwYXJzZSBhbmQgcHJlcGFyZSBzZWdtZW50IGluZm8gZnJvbSB0aGUgZWRpdCBsaXN0ICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJsb29raW5nIGZvciBlZGl0IGxpc3QgY29udGFpbmVyIik7Ci0gIHN0cmVhbS0+bl9zZWdtZW50cyA9IDA7Ci0gIHN0cmVhbS0+c2VnbWVudHMgPSBOVUxMOwotICBpZiAoKGVkdHMgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHRyYWssIEZPVVJDQ19lZHRzKSkpIHsKLSAgICBHTm9kZSAqZWxzdDsKLSAgICBnaW50IG5fc2VnbWVudHM7Ci0gICAgZ2ludCBpLCBjb3VudCwgZW50cnlfc2l6ZTsKLSAgICBndWludDY0IHRpbWU7Ci0gICAgR3N0Q2xvY2tUaW1lIHN0aW1lOwotICAgIGNvbnN0IGd1aW50OCAqYnVmZmVyOwotICAgIGd1aW50OCB2ZXJzaW9uOwotICAgIGd1aW50MzIgc2l6ZTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJsb29raW5nIGZvciBlZGl0IGxpc3QiKTsKLSAgICBpZiAoIShlbHN0ID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChlZHRzLCBGT1VSQ0NfZWxzdCkpKQotICAgICAgZ290byBkb25lOwotCi0gICAgYnVmZmVyID0gZWxzdC0+ZGF0YTsKLQotICAgIHNpemUgPSBRVF9VSU5UMzIgKGJ1ZmZlcik7Ci0gICAgLyogdmVyc2lvbiwgZmxhZ3MsIG5fc2VnbWVudHMgKi8KLSAgICBpZiAoc2l6ZSA8IDE2KSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJJbnZhbGlkIGVkaXQgbGlzdCIpOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICB2ZXJzaW9uID0gUVRfVUlOVDggKGJ1ZmZlciArIDgpOwotICAgIGVudHJ5X3NpemUgPSAodmVyc2lvbiA9PSAxKSA/IDIwIDogMTI7Ci0KLSAgICBuX3NlZ21lbnRzID0gUVRfVUlOVDMyIChidWZmZXIgKyAxMik7Ci0KLSAgICBpZiAobl9zZWdtZW50cyA+IDEwMDAwMCB8fCBzaXplIDwgMTYgKyBuX3NlZ21lbnRzICogZW50cnlfc2l6ZSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiSW52YWxpZCBlZGl0IGxpc3QiKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICAvKiB3ZSBtaWdodCBhbGxvY2F0ZSBhIGJpdCB0b28gbXVjaCwgYXQgbGVhc3QgYWxsb2NhdGUgMSBzZWdtZW50ICovCi0gICAgc3RyZWFtLT5zZWdtZW50cyA9IGdfbmV3IChRdERlbXV4U2VnbWVudCwgTUFYIChuX3NlZ21lbnRzLCAxKSk7Ci0KLSAgICAvKiBzZWdtZW50cyBhbHdheXMgc3RhcnQgZnJvbSAwICovCi0gICAgdGltZSA9IDA7Ci0gICAgc3RpbWUgPSAwOwotICAgIGNvdW50ID0gMDsKLSAgICBidWZmZXIgKz0gMTY7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5fc2VnbWVudHM7IGkrKykgewotICAgICAgZ3VpbnQ2NCBkdXJhdGlvbjsKLSAgICAgIGd1aW50NjQgbWVkaWFfdGltZTsKLSAgICAgIGdib29sZWFuIHRpbWVfdmFsaWQgPSBUUlVFOwotICAgICAgUXREZW11eFNlZ21lbnQgKnNlZ21lbnQ7Ci0gICAgICBndWludDMyIHJhdGVfaW50OwotICAgICAgR3N0Q2xvY2tUaW1lIG1lZGlhX3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAgICAgaWYgKHZlcnNpb24gPT0gMSkgewotICAgICAgICBtZWRpYV90aW1lID0gUVRfVUlOVDY0IChidWZmZXIgKyA4KTsKLSAgICAgICAgZHVyYXRpb24gPSBRVF9VSU5UNjQgKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChtZWRpYV90aW1lID09IEdfTUFYVUlOVDY0KQotICAgICAgICAgIHRpbWVfdmFsaWQgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lZGlhX3RpbWUgPSBRVF9VSU5UMzIgKGJ1ZmZlciArIDQpOwotICAgICAgICBkdXJhdGlvbiA9IFFUX1VJTlQzMiAoYnVmZmVyKTsKLSAgICAgICAgaWYgKG1lZGlhX3RpbWUgPT0gR19NQVhVSU5UMzIpCi0gICAgICAgICAgdGltZV92YWxpZCA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBpZiAodGltZV92YWxpZCkKLSAgICAgICAgbWVkaWFfc3RhcnQgPSBRVFNUUkVBTVRJTUVfVE9fR1NUVElNRSAoc3RyZWFtLCBtZWRpYV90aW1lKTsKLQotICAgICAgc2VnbWVudCA9ICZzdHJlYW0tPnNlZ21lbnRzW2NvdW50KytdOwotCi0gICAgICAvKiB0aW1lIGFuZCBkdXJhdGlvbiBleHByZXNzZWQgaW4gZ2xvYmFsIHRpbWVzY2FsZSAqLwotICAgICAgc2VnbWVudC0+dGltZSA9IHN0aW1lOwotICAgICAgLyogYWRkIG5vbiBzY2FsZWQgdmFsdWVzIHNvIHdlIGRvbid0IGNhdXNlIHJvdW5kb2ZmIGVycm9ycyAqLwotICAgICAgaWYgKGR1cmF0aW9uIHx8IG1lZGlhX3N0YXJ0ID09IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgICAgdGltZSArPSBkdXJhdGlvbjsKLSAgICAgICAgc3RpbWUgPSBRVFRJTUVfVE9fR1NUVElNRSAocXRkZW11eCwgdGltZSk7Ci0gICAgICAgIHNlZ21lbnQtPmR1cmF0aW9uID0gc3RpbWUgLSBzZWdtZW50LT50aW1lOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogemVybyBkdXJhdGlvbiBkb2VzIG5vdCBpbXBseSBtZWRpYV9zdGFydCA9PSBtZWRpYV9zdG9wCi0gICAgICAgICAqIGJ1dCwgb25seSBzcGVjaWZ5IG1lZGlhX3N0YXJ0LiovCi0gICAgICAgIHN0aW1lID0gUVRUSU1FX1RPX0dTVFRJTUUgKHF0ZGVtdXgsIHF0ZGVtdXgtPmR1cmF0aW9uKTsKLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdGltZSkgJiYgdGltZV92YWxpZAotICAgICAgICAgICAgJiYgc3RpbWUgPj0gbWVkaWFfc3RhcnQpIHsKLSAgICAgICAgICBzZWdtZW50LT5kdXJhdGlvbiA9IHN0aW1lIC0gbWVkaWFfc3RhcnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc2VnbWVudC0+ZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzZWdtZW50LT5zdG9wX3RpbWUgPSBzdGltZTsKLQotICAgICAgc2VnbWVudC0+dHJha19tZWRpYV9zdGFydCA9IG1lZGlhX3RpbWU7Ci0gICAgICAvKiBtZWRpYV90aW1lIGV4cHJlc3NlZCBpbiBzdHJlYW0gdGltZXNjYWxlICovCi0gICAgICBpZiAodGltZV92YWxpZCkgewotICAgICAgICBzZWdtZW50LT5tZWRpYV9zdGFydCA9IG1lZGlhX3N0YXJ0OwotICAgICAgICBzZWdtZW50LT5tZWRpYV9zdG9wID0gc2VnbWVudC0+bWVkaWFfc3RhcnQgKyBzZWdtZW50LT5kdXJhdGlvbjsKLSAgICAgICAgbWVkaWFfc2VnbWVudHNfY291bnQrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlZ21lbnQtPm1lZGlhX3N0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgICAgc2VnbWVudC0+bWVkaWFfc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICB9Ci0gICAgICByYXRlX2ludCA9IFFUX1VJTlQzMiAoYnVmZmVyICsgKCh2ZXJzaW9uID09IDEpID8gMTYgOiA4KSk7Ci0KLSAgICAgIGlmIChyYXRlX2ludCA8PSAxKSB7Ci0gICAgICAgIC8qIDAgaXMgbm90IGFsbG93ZWQsIHNvbWUgcHJvZ3JhbXMgd3JpdGUgMSBpbnN0ZWFkIG9mIHRoZSBmbG9hdGluZyBwb2ludAotICAgICAgICAgKiB2YWx1ZSAqLwotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCBzdXNwaWNpb3VzIHJhdGUgJSIgR19HVUlOVDMyX0ZPUk1BVCwKLSAgICAgICAgICAgIHJhdGVfaW50KTsKLSAgICAgICAgc2VnbWVudC0+cmF0ZSA9IDE7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzZWdtZW50LT5yYXRlID0gcmF0ZV9pbnQgLyA2NTUzNi4wOwotICAgICAgfQotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY3JlYXRlZCBzZWdtZW50ICVkIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIsIG1lZGlhX3N0YXJ0ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIgKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIikgLCBtZWRpYV9zdG9wICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIgc3RvcF90aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiIHJhdGUgJWcsICglZCkgdGltZXNjYWxlICV1IiwKLSAgICAgICAgICBpLCBHU1RfVElNRV9BUkdTIChzZWdtZW50LT50aW1lKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5kdXJhdGlvbiksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2VnbWVudC0+bWVkaWFfc3RhcnQpLCBtZWRpYV90aW1lLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPm1lZGlhX3N0b3ApLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlZ21lbnQtPnN0b3BfdGltZSksIHNlZ21lbnQtPnJhdGUsIHJhdGVfaW50LAotICAgICAgICAgIHN0cmVhbS0+dGltZXNjYWxlKTsKLSAgICAgIGlmIChzZWdtZW50LT5zdG9wX3RpbWUgPiBxdGRlbXV4LT5zZWdtZW50LnN0b3ApIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiU2VnbWVudCAlZCAiCi0gICAgICAgICAgICAiIGV4dGVuZHMgdG8gJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgICAiIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZSBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAgICIgaXQgd2lsbCBiZSB0cnVuY2F0ZWQiLCBpLCBHU1RfVElNRV9BUkdTIChzZWdtZW50LT5zdG9wX3RpbWUpLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocXRkZW11eC0+c2VnbWVudC5zdG9wKSk7Ci0gICAgICAgIHF0ZGVtdXgtPnNlZ21lbnQuc3RvcCA9IHNlZ21lbnQtPnN0b3BfdGltZTsKLSAgICAgIH0KLQotICAgICAgYnVmZmVyICs9IGVudHJ5X3NpemU7Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCAlZCBzZWdtZW50cyIsIGNvdW50KTsKLSAgICBzdHJlYW0tPm5fc2VnbWVudHMgPSBjb3VudDsKLSAgICBpZiAobWVkaWFfc2VnbWVudHNfY291bnQgIT0gMSkKLSAgICAgIGFsbG93X3B1c2hiYXNlZF9lZHRzID0gRkFMU0U7Ci0gIH0KLWRvbmU6Ci0KLSAgLyogcHVzaCBiYXNlZCBkb2VzIG5vdCBoYW5kbGUgc2VnbWVudHMsIHNvIGFjdCBhY2NvcmRpbmdseSBoZXJlLAotICAgKiBhbmQgd2FybiBpZiBhcHBsaWNhYmxlICovCi0gIGlmICghcXRkZW11eC0+cHVsbGJhc2VkICYmICFhbGxvd19wdXNoYmFzZWRfZWR0cykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgInN0cmVhbWluZzsgZGlzY2FyZGluZyBlZGl0IGxpc3Qgc2VnbWVudHMiKTsKLSAgICAvKiByZW1vdmUgYW5kIHVzZSBkZWZhdWx0IG9uZSBiZWxvdywgd2Ugc3RyZWFtIGxpa2UgaXQgYW55d2F5ICovCi0gICAgZ19mcmVlIChzdHJlYW0tPnNlZ21lbnRzKTsKLSAgICBzdHJlYW0tPnNlZ21lbnRzID0gTlVMTDsKLSAgICBzdHJlYW0tPm5fc2VnbWVudHMgPSAwOwotICB9Ci0KLSAgLyogbm8gc2VnbWVudHMsIGNyZWF0ZSBvbmUgdG8gcGxheSB0aGUgY29tcGxldGUgdHJhayAqLwotICBpZiAoc3RyZWFtLT5uX3NlZ21lbnRzID09IDApIHsKLSAgICBHc3RDbG9ja1RpbWUgc3RyZWFtX2R1cmF0aW9uID0KLSAgICAgICAgUVRTVFJFQU1USU1FX1RPX0dTVFRJTUUgKHN0cmVhbSwgc3RyZWFtLT5kdXJhdGlvbik7Ci0KLSAgICBpZiAoc3RyZWFtLT5zZWdtZW50cyA9PSBOVUxMKQotICAgICAgc3RyZWFtLT5zZWdtZW50cyA9IGdfbmV3IChRdERlbXV4U2VnbWVudCwgMSk7Ci0KLSAgICAvKiByZXByZXNlbnQgdW5rbm93biBvdXIgd2F5ICovCi0gICAgaWYgKHN0cmVhbV9kdXJhdGlvbiA9PSAwKQotICAgICAgc3RyZWFtX2R1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAgIHN0cmVhbS0+c2VnbWVudHNbMF0udGltZSA9IDA7Ci0gICAgc3RyZWFtLT5zZWdtZW50c1swXS5zdG9wX3RpbWUgPSBzdHJlYW1fZHVyYXRpb247Ci0gICAgc3RyZWFtLT5zZWdtZW50c1swXS5kdXJhdGlvbiA9IHN0cmVhbV9kdXJhdGlvbjsKLSAgICBzdHJlYW0tPnNlZ21lbnRzWzBdLm1lZGlhX3N0YXJ0ID0gMDsKLSAgICBzdHJlYW0tPnNlZ21lbnRzWzBdLm1lZGlhX3N0b3AgPSBzdHJlYW1fZHVyYXRpb247Ci0gICAgc3RyZWFtLT5zZWdtZW50c1swXS5yYXRlID0gMS4wOwotICAgIHN0cmVhbS0+c2VnbWVudHNbMF0udHJha19tZWRpYV9zdGFydCA9IDA7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY3JlYXRlZCBkdW1teSBzZWdtZW50ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3RyZWFtX2R1cmF0aW9uKSk7Ci0gICAgc3RyZWFtLT5uX3NlZ21lbnRzID0gMTsKLSAgICBzdHJlYW0tPmR1bW15X3NlZ21lbnQgPSBUUlVFOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJ1c2luZyAlZCBzZWdtZW50cyIsIHN0cmVhbS0+bl9zZWdtZW50cyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBQYXJzZXMgdGhlIHN0c2QgYXRvbSBvZiBhIHN2cTMgdHJhayBsb29raW5nIGZvcgotICogdGhlIFNNSSBhbmQgZ2FtYSBhdG9tcy4KLSAqLwotc3RhdGljIHZvaWQKLXF0ZGVtdXhfcGFyc2Vfc3ZxM19zdHNkX2RhdGEgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHTm9kZSAqIHN0c2QsCi0gICAgZ3VpbnQ4ICoqIGdhbW1hLCBHc3RCdWZmZXIgKiogc2VxaCkKLXsKLSAgZ3VpbnQ4ICpfZ2FtbWEgPSBOVUxMOwotICBHc3RCdWZmZXIgKl9zZXFoID0gTlVMTDsKLSAgZ3VpbnQ4ICpzdHNkX2RhdGEgPSBzdHNkLT5kYXRhOwotICBndWludDMyIGxlbmd0aCA9IFFUX1VJTlQzMiAoc3RzZF9kYXRhKTsKLSAgZ3VpbnQxNiB2ZXJzaW9uOwotCi0gIGlmIChsZW5ndGggPCAzMikgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgInN0c2QgdG9vIHNob3J0Iik7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLQotICBzdHNkX2RhdGEgKz0gMzI7Ci0gIGxlbmd0aCAtPSAzMjsKLSAgdmVyc2lvbiA9IFFUX1VJTlQxNiAoc3RzZF9kYXRhKTsKLSAgaWYgKHZlcnNpb24gPT0gMykgewotICAgIGlmIChsZW5ndGggPj0gNzApIHsKLSAgICAgIGxlbmd0aCAtPSA3MDsKLSAgICAgIHN0c2RfZGF0YSArPSA3MDsKLSAgICAgIHdoaWxlIChsZW5ndGggPiA4KSB7Ci0gICAgICAgIGd1aW50MzIgZm91cmNjLCBzaXplOwotICAgICAgICBndWludDggKmRhdGE7Ci0gICAgICAgIHNpemUgPSBRVF9VSU5UMzIgKHN0c2RfZGF0YSk7Ci0gICAgICAgIGZvdXJjYyA9IFFUX0ZPVVJDQyAoc3RzZF9kYXRhICsgNCk7Ci0gICAgICAgIGRhdGEgPSBzdHNkX2RhdGEgKyA4OwotCi0gICAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJBdG9tIG9mIHNpemUgMCBmb3VuZCwgYWJvcnRpbmcgIgotICAgICAgICAgICAgICAic3ZxMyBhdG9tIHBhcnNpbmciKTsKLSAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgICAgICAgY2FzZSBGT1VSQ0NfZ2FtYTp7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAxMikgewotICAgICAgICAgICAgICBfZ2FtbWEgPSBkYXRhOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiVW5leHBlY3RlZCBzaXplICUiIEdfR1VJTlQzMl9GT1JNQVQKLSAgICAgICAgICAgICAgICAgICIgZm9yIGdhbWEgYXRvbSwgZXhwZWN0ZWQgMTIiLCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEZPVVJDQ19TTUlfOnsKLSAgICAgICAgICAgIGlmIChzaXplID4gMTYgJiYgUVRfRk9VUkNDIChkYXRhKSA9PSBGT1VSQ0NfU0VRSCkgewotICAgICAgICAgICAgICBndWludDMyIHNlcWhfc2l6ZTsKLSAgICAgICAgICAgICAgaWYgKF9zZXFoICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJVbmV4cGVjdGVkIHNlY29uZCBTRVFIIFNNSSBhdG9tICIKLSAgICAgICAgICAgICAgICAgICAgIiBmb3VuZCwgaWdub3JpbmciKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXFoX3NpemUgPSBRVF9VSU5UMzIgKGRhdGEgKyA0KTsKLSAgICAgICAgICAgICAgICBpZiAoc2VxaF9zaXplID4gMCkgewotICAgICAgICAgICAgICAgICAgX3NlcWggPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNlcWhfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKF9zZXFoLCAwLCBkYXRhICsgOCwgc2VxaF9zaXplKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBkZWZhdWx0OnsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIlVuaGFuZGxlZCBhdG9tICUiIEdTVF9GT1VSQ0NfRk9STUFUCi0gICAgICAgICAgICAgICAgIiBpbiBTVlEzIGVudHJ5IGluIHN0c2QgYXRvbSIsIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNpemUgPD0gbGVuZ3RoKSB7Ci0gICAgICAgICAgbGVuZ3RoIC09IHNpemU7Ci0gICAgICAgICAgc3RzZF9kYXRhICs9IHNpemU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiU1ZRMyBlbnRyeSB0b28gc2hvcnQgaW4gc3RzZCBhdG9tIik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIlVuZXhwZWN0ZWQgdmVyc2lvbiBmb3IgU1ZRMyBlbnRyeSAlIgotICAgICAgICBHX0dVSU5UMTZfRk9STUFULCB2ZXJzaW9uKTsKLSAgICBnb3RvIGVuZDsKLSAgfQotCi1lbmQ6Ci0gIGlmIChnYW1tYSkgewotICAgICpnYW1tYSA9IF9nYW1tYTsKLSAgfQotICBpZiAoc2VxaCkgewotICAgICpzZXFoID0gX3NlcWg7Ci0gIH0gZWxzZSBpZiAoX3NlcWgpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChfc2VxaCk7Ci0gIH0KLX0KLQotc3RhdGljIGdjaGFyICoKLXF0ZGVtdXhfZ2V0X3J0c3BfdXJpX2Zyb21faG5kbCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdOb2RlICogbWluZikKLXsKLSAgR05vZGUgKmRpbmY7Ci0gIEdzdEJ5dGVSZWFkZXIgZHJlZjsKLSAgZ2NoYXIgKnVyaSA9IE5VTEw7Ci0KLSAgLyoKLSAgICogR2V0ICdkaW5mJywgdG8gZ2V0IGl0cyBjaGlsZCAnZHJlZicsIHRoYXQgbWlnaHQgY29udGFpbiBhICdobmRsJwotICAgKiBhdG9tIHRoYXQgbWlnaHQgY29udGFpbiBhICdkYXRhJyBhdG9tIHdpdGggdGhlIHJ0c3AgdXJpLgotICAgKiBUaGlzIGNhc2Ugd2FzIHJlcG9ydGVkIGluIGJ1ZyAjNTk3NDk3LCBzb21lIGluZm8gYWJvdXQKLSAgICogdGhlIGhuZGwgYXRvbSBjYW4gYmUgZm91bmQgaW4gVE4xMTk1Ci0gICAqLwotICBkaW5mID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChtaW5mLCBGT1VSQ0NfZGluZik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJUcnlpbmcgdG8gb2J0YWluIHJ0c3AgVVJJIGZvciBzdHJlYW0gdHJhayIpOwotCi0gIGlmIChkaW5mKSB7Ci0gICAgZ3VpbnQzMiBkcmVmX251bV9lbnRyaWVzID0gMDsKLSAgICBpZiAocXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKGRpbmYsIEZPVVJDQ19kcmVmLCAmZHJlZikgJiYKLSAgICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZkcmVmLCA0KSAmJgotICAgICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJmRyZWYsICZkcmVmX251bV9lbnRyaWVzKSkgewotICAgICAgZ2ludCBpOwotCi0gICAgICAvKiBzZWFyY2ggZHJlZiBlbnRyaWVzIGZvciBobmRsIGF0b20gKi8KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBkcmVmX251bV9lbnRyaWVzOyBpKyspIHsKLSAgICAgICAgZ3VpbnQzMiBzaXplID0gMCwgdHlwZTsKLSAgICAgICAgZ3VpbnQ4IHN0cmluZ19sZW4gPSAwOwotICAgICAgICBpZiAoZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZkcmVmLCAmc2l6ZSkgJiYKLSAgICAgICAgICAgIHF0X2F0b21fcGFyc2VyX2dldF9mb3VyY2MgKCZkcmVmLCAmdHlwZSkpIHsKLSAgICAgICAgICBpZiAodHlwZSA9PSBGT1VSQ0NfaG5kbCkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIkZvdW5kIGhuZGwgYXRvbSIpOwotCi0gICAgICAgICAgICAvKiBza2lwIGRhdGEgcmVmZXJlbmNlIGhhbmRsZSBieXRlcyBhbmQgdGhlCi0gICAgICAgICAgICAgKiBmb2xsb3dpbmcgcGFzY2FsIHN0cmluZyBhbmQgc29tZSBleHRyYSA0Ci0gICAgICAgICAgICAgKiBieXRlcyBJIGhhdmUgbm8gaWRlYSB3aGF0IGFyZSAqLwotICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJmRyZWYsIDQpIHx8Ci0gICAgICAgICAgICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDggKCZkcmVmLCAmc3RyaW5nX2xlbikgfHwKLSAgICAgICAgICAgICAgICAhZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZkcmVmLCBzdHJpbmdfbGVuICsgNCkpIHsKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiRmFpbGVkIHRvIHBhcnNlIGhuZGwgYXRvbSIpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSBhdG9tcyB0byBmaW5kIHRoZSBkYXRhIGF0b20gKi8KLSAgICAgICAgICAgIHdoaWxlIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJmRyZWYpID49IDgpIHsKLSAgICAgICAgICAgICAgZ3VpbnQzMiBhdG9tX3NpemU7Ci0gICAgICAgICAgICAgIGd1aW50MzIgYXRvbV90eXBlOwotCi0gICAgICAgICAgICAgIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJmRyZWYsICZhdG9tX3NpemUpICYmCi0gICAgICAgICAgICAgICAgICBxdF9hdG9tX3BhcnNlcl9nZXRfZm91cmNjICgmZHJlZiwgJmF0b21fdHlwZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXRvbV90eXBlID09IEZPVVJDQ19kYXRhKSB7Ci0gICAgICAgICAgICAgICAgICBjb25zdCBndWludDggKnVyaV9hdXggPSBOVUxMOwotCi0gICAgICAgICAgICAgICAgICAvKiBmb3VuZCB0aGUgZGF0YSBhdG9tIHRoYXQgbWlnaHQgY29udGFpbiB0aGUgcnRzcCB1cmkgKi8KLSAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJGb3VuZCBkYXRhIGF0b20gaW5zaWRlICIKLSAgICAgICAgICAgICAgICAgICAgICAiaG5kbCBhdG9tLCBpbnRlcnByZXRpbmcgaXQgYXMgYW4gVVJJIik7Ci0gICAgICAgICAgICAgICAgICBpZiAoZ3N0X2J5dGVfcmVhZGVyX3BlZWtfZGF0YSAoJmRyZWYsIGF0b21fc2l6ZSAtIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ1cmlfYXV4KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZ19zdHJzdHJfbGVuICgoZ2NoYXIgKikgdXJpX2F1eCwgNywgInJ0c3A6Ly8iKSAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgIHVyaSA9IGdfc3RybmR1cCAoKGdjaGFyICopIHVyaV9hdXgsIGF0b21fc2l6ZSAtIDgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiRGF0YSBhdG9tIGluIGhuZGwgYXRvbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJkaWRuJ3QgY29udGFpbiBhIHJ0c3AgYWRkcmVzcyIpOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiRmFpbGVkIHRvIGdldCB0aGUgZGF0YSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXRvbSBjb250ZW50cyIpOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIHNraXBwaW5nIHRvIHRoZSBuZXh0IGVudHJ5ICovCi0gICAgICAgICAgICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJmRyZWYsIGF0b21fc2l6ZSAtIDgpKQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiRmFpbGVkIHRvIHBhcnNlIGhuZGwgY2hpbGQgIgotICAgICAgICAgICAgICAgICAgICAiYXRvbSBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIHNraXAgdG8gdGhlIG5leHQgZW50cnkgKi8KLSAgICAgICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwICgmZHJlZiwgc2l6ZSAtIDgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiRXJyb3IgcGFyc2luZyBkcmVmIGF0b20iKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIkZpbmlzaGVkIHBhcnNpbmcgZHJlZiBhdG9tIik7Ci0gICAgfQotICB9Ci0gIHJldHVybiB1cmk7Ci19Ci0KLSNkZWZpbmUgQU1SX05CX0FMTF9NT0RFUyAgICAgICAgMHg4MWZmCi0jZGVmaW5lIEFNUl9XQl9BTExfTU9ERVMgICAgICAgIDB4ODNmZgotc3RhdGljIGd1aW50Ci1xdGRlbXV4X3BhcnNlX2Ftcl9iaXRyYXRlIChHc3RCdWZmZXIgKiBidWYsIGdib29sZWFuIHdiKQotewotICAvKiBUaGUgJ2RhbXInIGF0b20gaXMgb2YgdGhlIGZvcm06Ci0gICAqCi0gICAqIHwgdmVuZG9yIHwgZGVjb2Rlcl92ZXIgfCBtb2RlX3NldCB8IG1vZGVfY2hhbmdlX3BlcmlvZCB8IGZyYW1lcy9zYW1wbGUgfAotICAgKiAgICAzMiBiICAgICAgIDggYiAgICAgICAgICAxNiBiICAgICAgICAgICA4IGIgICAgICAgICAgICAgICAgIDggYgotICAgKgotICAgKiBUaGUgaGlnaGVzdCBzZXQgYml0IG9mIHRoZSBmaXJzdCA3IChBTVItTkIpIG9yIDggKEFNUi1XQikgYml0cyBvZiBtb2RlX3NldAotICAgKiByZXByZXNlbnRzIHRoZSBoaWdoZXN0IG1vZGUgdXNlZCBpbiB0aGUgc3RyZWFtIChhbmQgdGh1cyB0aGUgbWF4aW11bQotICAgKiBiaXRyYXRlKSwgd2l0aCBhIGNvdXBsZSBvZiBzcGVjaWFsIGNhc2VzIGFzIHNlZW4gYmVsb3cuCi0gICAqLwotCi0gIC8qIE1hcCBvZiBmcmFtZSB0eXBlIElEIC0+IGJpdHJhdGUgKi8KLSAgc3RhdGljIGNvbnN0IGd1aW50IG5iX2JpdHJhdGVzW10gPSB7Ci0gICAgNDc1MCwgNTE1MCwgNTkwMCwgNjcwMCwgNzQwMCwgNzk1MCwgMTAyMDAsIDEyMjAwCi0gIH07Ci0gIHN0YXRpYyBjb25zdCBndWludCB3Yl9iaXRyYXRlc1tdID0gewotICAgIDY2MDAsIDg4NTAsIDEyNjUwLCAxNDI1MCwgMTU4NTAsIDE4MjUwLCAxOTg1MCwgMjMwNTAsIDIzODUwCi0gIH07Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnc2l6ZSBtYXhfbW9kZTsKLSAgZ3VpbnQxNiBtb2RlX3NldDsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIGlmIChtYXAuc2l6ZSAhPSAweDExKSB7Ci0gICAgR1NUX0RFQlVHICgiQXRvbSBzaG91bGQgaGF2ZSBzaXplIDB4MTEsIG5vdCAlIiBHX0dTSVpFX0ZPUk1BVCwgbWFwLnNpemUpOwotICAgIGdvdG8gYmFkX2RhdGE7Ci0gIH0KLQotICBpZiAoUVRfRk9VUkNDIChtYXAuZGF0YSArIDQpICE9IEZPVVJDQ19kYW1yKSB7Ci0gICAgR1NUX0RFQlVHICgiVW5rbm93biBhdG9tIGluICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKFFUX1VJTlQzMiAobWFwLmRhdGEgKyA0KSkpOwotICAgIGdvdG8gYmFkX2RhdGE7Ci0gIH0KLQotICBtb2RlX3NldCA9IFFUX1VJTlQxNiAobWFwLmRhdGEgKyAxMyk7Ci0KLSAgaWYgKG1vZGVfc2V0ID09ICh3YiA/IEFNUl9XQl9BTExfTU9ERVMgOiBBTVJfTkJfQUxMX01PREVTKSkKLSAgICBtYXhfbW9kZSA9IDcgKyAod2IgPyAxIDogMCk7Ci0gIGVsc2UKLSAgICAvKiBBTVItTkIgbW9kZXMgZm8gZnJvbSAwLTcsIGFuZCBBTVItV0IgbW9kZXMgZ28gZnJvbSAwLTggKi8KLSAgICBtYXhfbW9kZSA9IGdfYml0X250aF9tc2YgKChndWxvbmcpIG1vZGVfc2V0ICYgKHdiID8gMHgxZmYgOiAweGZmKSwgLTEpOwotCi0gIGlmIChtYXhfbW9kZSA9PSAtMSkgewotICAgIEdTVF9ERUJVRyAoIk5vIG1vZGUgaW5kaWNhdGlvbiB3YXMgZm91bmQgKG1vZGUgc2V0KSA9ICV4IiwKLSAgICAgICAgKGd1aW50KSBtb2RlX3NldCk7Ci0gICAgZ290byBiYWRfZGF0YTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIHJldHVybiB3YiA/IHdiX2JpdHJhdGVzW21heF9tb2RlXSA6IG5iX2JpdHJhdGVzW21heF9tb2RlXTsKLQotYmFkX2RhdGE6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2VfdHJhbnNmb3JtYXRpb25fbWF0cml4IChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBHc3RCeXRlUmVhZGVyICogcmVhZGVyLCBndWludDMyICogbWF0cml4LCBjb25zdCBnY2hhciAqIGF0b20pCi17Ci0gIC8qCi0gICAqIDkgdmFsdWVzIG9mIDMyIGJpdHMgKGZpeGVkIHBvaW50IDE2LjE2LCBleGNlcHQgMiA1IGFuZCA4IHRoYXQgYXJlIDIuMzApCi0gICAqIFswIDEgMl0KLSAgICogWzMgNCA1XQotICAgKiBbNiA3IDhdCi0gICAqLwotCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAocmVhZGVyKSA8IDM2KQotICAgIHJldHVybiBGQUxTRTsKLQotICBtYXRyaXhbMF0gPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIG1hdHJpeFsxXSA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbWF0cml4WzJdID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBtYXRyaXhbM10gPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIG1hdHJpeFs0XSA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbWF0cml4WzVdID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotICBtYXRyaXhbNl0gPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQgKHJlYWRlcik7Ci0gIG1hdHJpeFs3XSA9IGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZCAocmVhZGVyKTsKLSAgbWF0cml4WzhdID0gZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmVfdW5jaGVja2VkIChyZWFkZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJUcmFuc2Zvcm1hdGlvbiBtYXRyaXggZnJvbSBhdG9tICVzIiwgYXRvbSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICIldS4ldSAldS4ldSAldS4ldSIsIG1hdHJpeFswXSA+PiAxNiwKLSAgICAgIG1hdHJpeFswXSAmIDB4RkZGRiwgbWF0cml4WzFdID4+IDE2LCBtYXRyaXhbMV0gJiAweEZGLCBtYXRyaXhbMl0gPj4gMTYsCi0gICAgICBtYXRyaXhbMl0gJiAweEZGKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIiV1LiV1ICV1LiV1ICV1LiV1IiwgbWF0cml4WzNdID4+IDE2LAotICAgICAgbWF0cml4WzNdICYgMHhGRkZGLCBtYXRyaXhbNF0gPj4gMTYsIG1hdHJpeFs0XSAmIDB4RkYsIG1hdHJpeFs1XSA+PiAxNiwKLSAgICAgIG1hdHJpeFs1XSAmIDB4RkYpOwotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiJXUuJXUgJXUuJXUgJXUuJXUiLCBtYXRyaXhbNl0gPj4gMTYsCi0gICAgICBtYXRyaXhbNl0gJiAweEZGRkYsIG1hdHJpeFs3XSA+PiAxNiwgbWF0cml4WzddICYgMHhGRiwgbWF0cml4WzhdID4+IDE2LAotICAgICAgbWF0cml4WzhdICYgMHhGRik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X2luc3BlY3RfdHJhbnNmb3JtYXRpb25fbWF0cml4IChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtLCBndWludDMyICogbWF0cml4LCBHc3RUYWdMaXN0ICoqIHRhZ2xpc3QpCi17Ci0KLS8qIFthIGIgY10KLSAqIFtkIGUgZl0KLSAqIFtnIGggaV0KLSAqCi0gKiBUaGlzIG1hY3JvIHdpbGwgb25seSBjb21wYXJlIHZhbHVlIGFiZGVnaCwgaXQgZXhwZWN0cyBjZmkgdG8gaGF2ZSBhbHJlYWR5Ci0gKiBiZWVuIGNoZWNrZWQKLSAqLwotI2RlZmluZSBRVENIRUNLX01BVFJJWChtLGEsYixkLGUpICgobSlbMF0gPT0gKGEgPDwgMTYpICYmIChtKVsxXSA9PSAoYiA8PCAxNikgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobSlbM10gPT0gKGQgPDwgMTYpICYmIChtKVs0XSA9PSAoZSA8PCAxNikpCi0KLSAgLyogb25seSBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIHRoZSBsYXN0IGNvbHVtbiBoYXMgc3RhbmRhcmQgdmFsdWVzICovCi0gIGlmIChtYXRyaXhbMl0gPT0gMCAmJiBtYXRyaXhbNV0gPT0gMCAmJiBtYXRyaXhbOF0gPT0gMSA8PCAzMCkgewotICAgIGNvbnN0IGdjaGFyICpyb3RhdGlvbl90YWcgPSBOVUxMOwotCi0gICAgLyogbm8gcm90YXRpb24gbmVlZGVkICovCi0gICAgaWYgKFFUQ0hFQ0tfTUFUUklYIChtYXRyaXgsIDEsIDAsIDAsIDEpKSB7Ci0gICAgICAvKiBOT1AgKi8KLSAgICB9IGVsc2UgaWYgKFFUQ0hFQ0tfTUFUUklYIChtYXRyaXgsIDAsIDEsIEdfTUFYVUlOVDE2LCAwKSkgewotICAgICAgcm90YXRpb25fdGFnID0gInJvdGF0ZS05MCI7Ci0gICAgfSBlbHNlIGlmIChRVENIRUNLX01BVFJJWCAobWF0cml4LCBHX01BWFVJTlQxNiwgMCwgMCwgR19NQVhVSU5UMTYpKSB7Ci0gICAgICByb3RhdGlvbl90YWcgPSAicm90YXRlLTE4MCI7Ci0gICAgfSBlbHNlIGlmIChRVENIRUNLX01BVFJJWCAobWF0cml4LCAwLCBHX01BWFVJTlQxNiwgMSwgMCkpIHsKLSAgICAgIHJvdGF0aW9uX3RhZyA9ICJyb3RhdGUtMjcwIjsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0ZJWE1FX09CSkVDVCAocXRkZW11eCwgIlVuaGFuZGxlZCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdmFsdWVzIik7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIlRyYW5zZm9ybWF0aW9uIG1hdHJpeCByb3RhdGlvbiAlcyIsCi0gICAgICAgIHJvdGF0aW9uX3RhZyk7Ci0gICAgaWYgKHJvdGF0aW9uX3RhZyAhPSBOVUxMKSB7Ci0gICAgICBpZiAoKnRhZ2xpc3QgPT0gTlVMTCkKLSAgICAgICAgKnRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoKnRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICBHU1RfVEFHX0lNQUdFX09SSUVOVEFUSU9OLCByb3RhdGlvbl90YWcsIE5VTEwpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfRklYTUVfT0JKRUNUIChxdGRlbXV4LCAiVW5oYW5kbGVkIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB2YWx1ZXMiKTsKLSAgfQotfQotCi0vKiBQYXJzZXMgdGhlIGJveGVzIGRlZmluZWQgaW4gSVNPL0lFQyAxNDQ5Ni0xMiB0aGF0IGVuYWJsZSBzdXBwb3J0IGZvcgotICogcHJvdGVjdGVkIHN0cmVhbXMgKHNpbmYsIGZybWEsIHNjaG0gYW5kIHNjaGkpOyBpZiB0aGUgcHJvdGVjdGlvbiBzY2hlbWUgaXMKLSAqIENvbW1vbiBFbmNyeXB0aW9uIChjZW5jKSwgdGhlIGZ1bmN0aW9uIHdpbGwgYWxzbyBwYXJzZSB0aGUgdGVuYyBib3ggKGRlZmluZWQKLSAqIGluIElTTy9JRUMgMjMwMDEtNykuIEBjb250YWluZXIgcG9pbnRzIHRvIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlc2UgYm94ZXMKLSAqICh0eXBpY2FsbHkgYW4gZW5jW3Z8YXx0fHNdIHNhbXBsZSBlbnRyeSk7IHRoZSBmdW5jdGlvbiB3aWxsIHNldAotICogQG9yaWdpbmFsX2ZtdCB0byB0aGUgZm91cmNjIG9mIHRoZSBvcmlnaW5hbCB1bmVuY3J5cHRlZCBzdHJlYW0gZm9ybWF0LgotICogUmV0dXJucyBUUlVFIGlmIHN1Y2Nlc3NmdWw7IEZBTFNFIG90aGVyd2lzZS4gKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV9wcm90ZWN0aW9uX3NjaGVtZV9pbmZvIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBRdERlbXV4U3RyZWFtICogc3RyZWFtLCBHTm9kZSAqIGNvbnRhaW5lciwgZ3VpbnQzMiAqIG9yaWdpbmFsX2ZtdCkKLXsKLSAgR05vZGUgKnNpbmY7Ci0gIEdOb2RlICpmcm1hOwotICBHTm9kZSAqc2NobTsKLSAgR05vZGUgKnNjaGk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHF0ZGVtdXggIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc3RyZWFtICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGNvbnRhaW5lciAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvcmlnaW5hbF9mbXQgIT0gTlVMTCwgRkFMU0UpOwotCi0gIHNpbmYgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGNvbnRhaW5lciwgRk9VUkNDX3NpbmYpOwotICBpZiAoR19VTkxJS0VMWSAoIXNpbmYpKSB7Ci0gICAgaWYgKHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfdHlwZSA9PSBGT1VSQ0NfY2VuYykgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgInNpbmYgYm94IGRvZXMgbm90IGNvbnRhaW4gc2NoaSBib3gsIHdoaWNoIGlzICIKLSAgICAgICAgICAibWFuZGF0b3J5IGZvciBDb21tb24gRW5jcnlwdGlvbiIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGZybWEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHNpbmYsIEZPVVJDQ19mcm1hKTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFmcm1hKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJzaW5mIGJveCBkb2VzIG5vdCBjb250YWluIG1hbmRhdG9yeSBmcm1hIGJveCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gICpvcmlnaW5hbF9mbXQgPSBRVF9GT1VSQ0MgKChjb25zdCBndWludDggKikgZnJtYS0+ZGF0YSArIDgpOwotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAib3JpZ2luYWwgc3RyZWFtIGZvcm1hdDogJyUiIEdTVF9GT1VSQ0NfRk9STUFUICInIiwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoKm9yaWdpbmFsX2ZtdCkpOwotCi0gIHNjaG0gPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHNpbmYsIEZPVVJDQ19zY2htKTsKLSAgaWYgKCFzY2htKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInNpbmYgYm94IGRvZXMgbm90IGNvbnRhaW4gc2NobSBib3giKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV90eXBlID0gUVRfRk9VUkNDICgoY29uc3QgZ3VpbnQ4ICopIHNjaG0tPmRhdGEgKyAxMik7Ci0gIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfdmVyc2lvbiA9Ci0gICAgICBRVF9VSU5UMzIgKChjb25zdCBndWludDggKikgc2NobS0+ZGF0YSArIDE2KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgInByb3RlY3Rpb25fc2NoZW1lX3R5cGU6ICUiIEdTVF9GT1VSQ0NfRk9STUFUICIsICIKLSAgICAgICJwcm90ZWN0aW9uX3NjaGVtZV92ZXJzaW9uOiAlIzAxMHgiLAotICAgICAgR1NUX0ZPVVJDQ19BUkdTIChzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX3R5cGUpLAotICAgICAgc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV92ZXJzaW9uKTsKLQotICBzY2hpID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChzaW5mLCBGT1VSQ0Nfc2NoaSk7Ci0gIGlmICghc2NoaSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzaW5mIGJveCBkb2VzIG5vdCBjb250YWluIHNjaGkgYm94Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmIChzdHJlYW0tPnByb3RlY3Rpb25fc2NoZW1lX3R5cGUgPT0gRk9VUkNDX2NlbmMpIHsKLSAgICBRdERlbXV4Q2VuY1NhbXBsZVNldEluZm8gKmluZm87Ci0gICAgR05vZGUgKnRlbmM7Ci0gICAgY29uc3QgZ3VpbnQ4ICp0ZW5jX2RhdGE7Ci0gICAgZ3VpbnQzMiBpc0VuY3J5cHRlZDsKLSAgICBndWludDggaXZfc2l6ZTsKLSAgICBjb25zdCBndWludDggKmRlZmF1bHRfa2lkOwotICAgIEdzdEJ1ZmZlciAqa2lkX2J1ZjsKLQotICAgIGlmIChHX1VOTElLRUxZICghc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9pbmZvKSkKLSAgICAgIHN0cmVhbS0+cHJvdGVjdGlvbl9zY2hlbWVfaW5mbyA9Ci0gICAgICAgICAgZ19tYWxsb2MwIChzaXplb2YgKFF0RGVtdXhDZW5jU2FtcGxlU2V0SW5mbykpOwotCi0gICAgaW5mbyA9IChRdERlbXV4Q2VuY1NhbXBsZVNldEluZm8gKikgc3RyZWFtLT5wcm90ZWN0aW9uX3NjaGVtZV9pbmZvOwotCi0gICAgdGVuYyA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc2NoaSwgRk9VUkNDX3RlbmMpOwotICAgIGlmICghdGVuYykgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAocXRkZW11eCwgInNjaGkgYm94IGRvZXMgbm90IGNvbnRhaW4gdGVuYyBib3gsICIKLSAgICAgICAgICAid2hpY2ggaXMgbWFuZGF0b3J5IGZvciBDb21tb24gRW5jcnlwdGlvbiIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICB0ZW5jX2RhdGEgPSAoY29uc3QgZ3VpbnQ4ICopIHRlbmMtPmRhdGEgKyAxMjsKLSAgICBpc0VuY3J5cHRlZCA9IFFUX1VJTlQyNCAodGVuY19kYXRhKTsKLSAgICBpdl9zaXplID0gUVRfVUlOVDggKHRlbmNfZGF0YSArIDMpOwotICAgIGRlZmF1bHRfa2lkID0gKHRlbmNfZGF0YSArIDQpOwotICAgIGtpZF9idWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTYsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfZmlsbCAoa2lkX2J1ZiwgMCwgZGVmYXVsdF9raWQsIDE2KTsKLSAgICBpZiAoaW5mby0+ZGVmYXVsdF9wcm9wZXJ0aWVzKQotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChpbmZvLT5kZWZhdWx0X3Byb3BlcnRpZXMpOwotICAgIGluZm8tPmRlZmF1bHRfcHJvcGVydGllcyA9Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1jZW5jIiwKLSAgICAgICAgIml2X3NpemUiLCBHX1RZUEVfVUlOVCwgaXZfc2l6ZSwKLSAgICAgICAgImVuY3J5cHRlZCIsIEdfVFlQRV9CT09MRUFOLCAoaXNFbmNyeXB0ZWQgPT0gMSksCi0gICAgICAgICJraWQiLCBHU1RfVFlQRV9CVUZGRVIsIGtpZF9idWYsIE5VTEwpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJkZWZhdWx0IHNhbXBsZSBwcm9wZXJ0aWVzOiAiCi0gICAgICAgICJpc19lbmNyeXB0ZWQ9JXUsIGl2X3NpemU9JXUiLCBpc0VuY3J5cHRlZCwgaXZfc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoa2lkX2J1Zik7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHBhcnNlIHRoZSB0cmFrcy4KLSAqIFdpdGggZWFjaCB0cmFjayB3ZSBhc3NvY2lhdGUgYSBuZXcgUXREZW11eFN0cmVhbSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mbwotICogYWJvdXQgdGhlIHRyYWsuCi0gKiB0cmFrcyB0aGF0IGRvIG5vdCBkZWNvZGUgdG8gc29tZXRoaW5nIChsaWtlIHN0cm0gdHJha3MpIHdpbGwgbm90IGhhdmUgYSBwYWQuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV90cmFrIChHc3RRVERlbXV4ICogcXRkZW11eCwgR05vZGUgKiB0cmFrKQotewotICBHc3RCeXRlUmVhZGVyIHRraGQ7Ci0gIGludCBvZmZzZXQ7Ci0gIEdOb2RlICptZGlhOwotICBHTm9kZSAqbWRoZDsKLSAgR05vZGUgKmhkbHI7Ci0gIEdOb2RlICptaW5mOwotICBHTm9kZSAqc3RibDsKLSAgR05vZGUgKnN0c2Q7Ci0gIEdOb2RlICptcDRhOwotICBHTm9kZSAqbXA0djsKLSAgR05vZGUgKndhdmU7Ci0gIEdOb2RlICplc2RzOwotICBHTm9kZSAqcGFzcDsKLSAgR05vZGUgKnRyZWY7Ci0gIEdOb2RlICp1ZHRhOwotICBHTm9kZSAqc3ZtaTsKLQotICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBOVUxMOwotICBnYm9vbGVhbiBuZXdfc3RyZWFtID0gRkFMU0U7Ci0gIGdjaGFyICpjb2RlYyA9IE5VTEw7Ci0gIGNvbnN0IGd1aW50OCAqc3RzZF9kYXRhOwotICBndWludDE2IGxhbmdfY29kZTsgICAgICAgICAgICAvKiBxdWlja3RpbWUgbGFuZyBjb2RlIG9yIHBhY2tlZCBpc28gY29kZSAqLwotICBndWludDMyIHZlcnNpb247Ci0gIGd1aW50MzIgdGtoZF9mbGFncyA9IDA7Ci0gIGd1aW50OCB0a2hkX3ZlcnNpb24gPSAwOwotICBndWludDMyIGZvdXJjYzsKLSAgZ3VpbnQgdmFsdWVfc2l6ZSwgc3RzZF9sZW4sIGxlbjsKLSAgZ3VpbnQzMiB0cmFja19pZDsKLSAgZ3VpbnQzMiBkdW1teTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicGFyc2VfdHJhayIpOwotCi0gIGlmICghcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlX2Z1bGwgKHRyYWssIEZPVVJDQ190a2hkLCAmdGtoZCkKLSAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4ICgmdGtoZCwgJnRraGRfdmVyc2lvbikKLSAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQyNF9iZSAoJnRraGQsICZ0a2hkX2ZsYWdzKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAvKiBwaWNrIGJldHdlZW4gNjQgb3IgMzIgYml0cyAqLwotICB2YWx1ZV9zaXplID0gdGtoZF92ZXJzaW9uID09IDEgPyA4IDogNDsKLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoJnRraGQsIHZhbHVlX3NpemUgKiAyKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmdGtoZCwgJnRyYWNrX2lkKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICBpZiAoIXF0ZGVtdXgtPmdvdF9tb292KSB7Ci0gICAgaWYgKHF0ZGVtdXhfZmluZF9zdHJlYW0gKHF0ZGVtdXgsIHRyYWNrX2lkKSkKLSAgICAgIGdvdG8gZXhpc3Rpbmdfc3RyZWFtOwotICAgIHN0cmVhbSA9IF9jcmVhdGVfc3RyZWFtICgpOwotICAgIHN0cmVhbS0+dHJhY2tfaWQgPSB0cmFja19pZDsKLSAgICBuZXdfc3RyZWFtID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBzdHJlYW0gPSBxdGRlbXV4X2ZpbmRfc3RyZWFtIChxdGRlbXV4LCB0cmFja19pZCk7Ci0gICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIlN0cmVhbSBub3QgZm91bmQsIGdvaW5nIHRvIGlnbm9yZSBpdCIpOwotICAgICAgZ290byBza2lwX3RyYWNrOwotICAgIH0KLQotICAgIC8qIGZsdXNoIHNhbXBsZXMgZGF0YSBmcm9tIHRoaXMgdHJhY2sgZnJvbSBwcmV2aW91cyBtb292ICovCi0gICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NlZ21lbnRzX2RhdGEgKHF0ZGVtdXgsIHN0cmVhbSk7Ci0gICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZsdXNoX3NhbXBsZXNfZGF0YSAocXRkZW11eCwgc3RyZWFtKTsKLSAgfQotICAvKiBuZWVkIGRlZmF1bHRzIGZvciBmcmFnbWVudHMgKi8KLSAgcXRkZW11eF9wYXJzZV90cmV4IChxdGRlbXV4LCBzdHJlYW0sICZkdW1teSwgJmR1bW15LCAmZHVtbXkpOwotCi0gIGlmIChzdHJlYW0tPnBlbmRpbmdfdGFncyA9PSBOVUxMKQotICAgIHN0cmVhbS0+cGVuZGluZ190YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICBpZiAoKHRraGRfZmxhZ3MgJiAxKSA9PSAwKQotICAgIHN0cmVhbS0+ZGlzYWJsZWQgPSBUUlVFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAidHJhY2tbdGtoZF0gdmVyc2lvbi9mbGFncy9pZDogMHglMDJ4LyUwNngvJXUiLAotICAgICAgdGtoZF92ZXJzaW9uLCB0a2hkX2ZsYWdzLCBzdHJlYW0tPnRyYWNrX2lkKTsKLQotICBpZiAoIShtZGlhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlICh0cmFrLCBGT1VSQ0NfbWRpYSkpKQotICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gIGlmICghKG1kaGQgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG1kaWEsIEZPVVJDQ19tZGhkKSkpIHsKLSAgICAvKiBiZSBuaWNlIGZvciBzb21lIGNyb29rZWQgbWpwMiBmaWxlcyB0aGF0IHVzZSBtaGRyIGZvciBtZGhkICovCi0gICAgaWYgKHF0ZGVtdXgtPm1ham9yX2JyYW5kICE9IEZPVVJDQ19tanAyIHx8Ci0gICAgICAgICEobWRoZCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobWRpYSwgRk9VUkNDX21oZHIpKSkKLSAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotICB9Ci0KLSAgbGVuID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIG1kaGQtPmRhdGEpOwotICB2ZXJzaW9uID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIG1kaGQtPmRhdGEgKyA4KTsKLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJ0cmFjayB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgdmVyc2lvbik7Ci0gIGlmICh2ZXJzaW9uID09IDB4MDEwMDAwMDApIHsKLSAgICBpZiAobGVuIDwgMzgpCi0gICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgICBzdHJlYW0tPnRpbWVzY2FsZSA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBtZGhkLT5kYXRhICsgMjgpOwotICAgIHN0cmVhbS0+ZHVyYXRpb24gPSBRVF9VSU5UNjQgKChndWludDggKikgbWRoZC0+ZGF0YSArIDMyKTsKLSAgICBsYW5nX2NvZGUgPSBRVF9VSU5UMTYgKChndWludDggKikgbWRoZC0+ZGF0YSArIDM2KTsKLSAgfSBlbHNlIHsKLSAgICBpZiAobGVuIDwgMzApCi0gICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgICBzdHJlYW0tPnRpbWVzY2FsZSA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBtZGhkLT5kYXRhICsgMjApOwotICAgIHN0cmVhbS0+ZHVyYXRpb24gPSBRVF9VSU5UMzIgKChndWludDggKikgbWRoZC0+ZGF0YSArIDI0KTsKLSAgICBsYW5nX2NvZGUgPSBRVF9VSU5UMTYgKChndWludDggKikgbWRoZC0+ZGF0YSArIDI4KTsKLSAgfQotCi0gIGlmIChsYW5nX2NvZGUgPCAweDQwMCkgewotICAgIHF0ZGVtdXhfbGFuZ19tYXBfcXRfY29kZV90b19pc28gKHN0cmVhbS0+bGFuZ19pZCwgbGFuZ19jb2RlKTsKLSAgfSBlbHNlIGlmIChsYW5nX2NvZGUgPT0gMHg3ZmZmKSB7Ci0gICAgc3RyZWFtLT5sYW5nX2lkWzBdID0gMDsgICAgIC8qIHVuc3BlY2lmaWVkICovCi0gIH0gZWxzZSB7Ci0gICAgc3RyZWFtLT5sYW5nX2lkWzBdID0gMHg2MCArICgobGFuZ19jb2RlID4+IDEwKSAmIDB4MUYpOwotICAgIHN0cmVhbS0+bGFuZ19pZFsxXSA9IDB4NjAgKyAoKGxhbmdfY29kZSA+PiA1KSAmIDB4MUYpOwotICAgIHN0cmVhbS0+bGFuZ19pZFsyXSA9IDB4NjAgKyAobGFuZ19jb2RlICYgMHgxRik7Ci0gICAgc3RyZWFtLT5sYW5nX2lkWzNdID0gMDsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAidHJhY2sgdGltZXNjYWxlOiAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgc3RyZWFtLT50aW1lc2NhbGUpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInRyYWNrIGR1cmF0aW9uOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgc3RyZWFtLT5kdXJhdGlvbik7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAidHJhY2sgbGFuZ3VhZ2UgY29kZS9pZDogMHglMDR4LyVzIiwKLSAgICAgIGxhbmdfY29kZSwgc3RyZWFtLT5sYW5nX2lkKTsKLQotICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtLT50aW1lc2NhbGUgPT0gMCB8fCBxdGRlbXV4LT50aW1lc2NhbGUgPT0gMCkpCi0gICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgaWYgKCh0cmVmID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlICh0cmFrLCBGT1VSQ0NfdHJlZikpKSB7Ci0gICAgLyogY2hhcHRlcnMgdHJhY2sgcmVmZXJlbmNlICovCi0gICAgR05vZGUgKmNoYXAgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHRyZWYsIEZPVVJDQ19jaGFwKTsKLSAgICBpZiAoY2hhcCkgewotICAgICAgZ3NpemUgbGVuZ3RoID0gR1NUX1JFQURfVUlOVDMyX0JFIChjaGFwLT5kYXRhKTsKLSAgICAgIGlmIChxdGRlbXV4LT5jaGFwdGVyc190cmFja19pZCkKLSAgICAgICAgR1NUX0ZJWE1FX09CSkVDVCAocXRkZW11eCwgIk11bHRpcGxlIENIQVAgdHJhY2tzIik7Ci0KLSAgICAgIGlmIChsZW5ndGggPj0gMTIpIHsKLSAgICAgICAgcXRkZW11eC0+Y2hhcHRlcnNfdHJhY2tfaWQgPQotICAgICAgICAgICAgR1NUX1JFQURfVUlOVDMyX0JFICgoZ2ludDggKikgY2hhcC0+ZGF0YSArIDgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIGZyYWdtZW50ZWQgZmlsZXMgbWF5IGhhdmUgYm9ndXMgZHVyYXRpb24gaW4gbW9vdiAqLwotICBpZiAoIXF0ZGVtdXgtPmZyYWdtZW50ZWQgJiYKLSAgICAgIHF0ZGVtdXgtPmR1cmF0aW9uICE9IEdfTUFYSU5UNjQgJiYgc3RyZWFtLT5kdXJhdGlvbiAhPSBHX01BWElOVDMyKSB7Ci0gICAgZ3VpbnQ2NCB0ZHVyMSwgdGR1cjI7Ci0KLSAgICAvKiBkb24ndCBvdmVyZmxvdyAqLwotICAgIHRkdXIxID0gc3RyZWFtLT50aW1lc2NhbGUgKiAoZ3VpbnQ2NCkgcXRkZW11eC0+ZHVyYXRpb247Ci0gICAgdGR1cjIgPSBxdGRlbXV4LT50aW1lc2NhbGUgKiAoZ3VpbnQ2NCkgc3RyZWFtLT5kdXJhdGlvbjsKLQotICAgIC8qIEhBQ0s6Ci0gICAgICogc29tZSBvZiB0aG9zZSB0cmFpbGVycywgbm93YWRheXMsIGhhdmUgcHJvbG9ndWUgaW1hZ2VzIHRoYXQgYXJlCi0gICAgICogdGhlbXNlbHZlcyB2aWRlbyB0cmFja3MgYXMgd2VsbC4gSSBoYXZlbid0IHJlYWxseSBmb3VuZCBhIHdheSB0bwotICAgICAqIGlkZW50aWZ5IHRob3NlIHlldCwgZXhjZXB0IGZvciBqdXN0IGxvb2tpbmcgYXQgdGhlaXIgZHVyYXRpb24uICovCi0gICAgaWYgKHRkdXIxICE9IDAgJiYgKHRkdXIyICogMTAgLyB0ZHVyMSkgPCAyKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgIlRyYWNrIHNob3J0ZXIgdGhhbiAyMCUlICglIiBHX0dVSU5UNjRfRk9STUFUICIvJSIgR19HVUlOVDMyX0ZPUk1BVAotICAgICAgICAgICIgdnMuICUiIEdfR1VJTlQ2NF9GT1JNQVQgIi8lIiBHX0dVSU5UMzJfRk9STUFUICIpIG9mIHRoZSBzdHJlYW0gIgotICAgICAgICAgICJmb3VuZCwgYXNzdW1pbmcgcHJldmlldyBpbWFnZSBvciBzb21ldGhpbmc7IHNraXBwaW5nIHRyYWNrIiwKLSAgICAgICAgICBzdHJlYW0tPmR1cmF0aW9uLCBzdHJlYW0tPnRpbWVzY2FsZSwgcXRkZW11eC0+ZHVyYXRpb24sCi0gICAgICAgICAgcXRkZW11eC0+dGltZXNjYWxlKTsKLSAgICAgIGlmIChuZXdfc3RyZWFtKQotICAgICAgICBnc3RfcXRkZW11eF9zdHJlYW1fZnJlZSAocXRkZW11eCwgc3RyZWFtKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIGlmICghKGhkbHIgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG1kaWEsIEZPVVJDQ19oZGxyKSkpCi0gICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJ0cmFjayB0eXBlOiAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoUVRfRk9VUkNDICgoZ3VpbnQ4ICopIGhkbHItPmRhdGEgKyAxMikpKTsKLQotICBsZW4gPSBRVF9VSU5UMzIgKChndWludDggKikgaGRsci0+ZGF0YSk7Ci0gIGlmIChsZW4gPj0gMjApCi0gICAgc3RyZWFtLT5zdWJ0eXBlID0gUVRfRk9VUkNDICgoZ3VpbnQ4ICopIGhkbHItPmRhdGEgKyAxNik7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAidHJhY2sgc3VidHlwZTogJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKHN0cmVhbS0+c3VidHlwZSkpOwotCi0gIGlmICghKG1pbmYgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG1kaWEsIEZPVVJDQ19taW5mKSkpCi0gICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgaWYgKCEoc3RibCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobWluZiwgRk9VUkNDX3N0YmwpKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAvKnBhcnNlIHN2bWkgaGVhZGVyIGlmIGV4aXN0aW5nICovCi0gIHN2bWkgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0YmwsIEZPVVJDQ19zdm1pKTsKLSAgaWYgKHN2bWkpIHsKLSAgICBsZW4gPSBRVF9VSU5UMzIgKChndWludDggKikgc3ZtaS0+ZGF0YSk7Ci0gICAgdmVyc2lvbiA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBzdm1pLT5kYXRhICsgOCk7Ci0gICAgaWYgKCF2ZXJzaW9uKSB7Ci0gICAgICBHc3RWaWRlb011bHRpdmlld01vZGUgbW9kZSA9IEdTVF9WSURFT19NVUxUSVZJRVdfTU9ERV9OT05FOwotICAgICAgR3N0VmlkZW9NdWx0aXZpZXdGbGFncyBmbGFncyA9IEdTVF9WSURFT19NVUxUSVZJRVdfRkxBR1NfTk9ORTsKLSAgICAgIGd1aW50OCBmcmFtZV90eXBlLCBmcmFtZV9sYXlvdXQ7Ci0KLSAgICAgIC8qIE1QRUctQSBzdGVyZW8gdmlkZW8gKi8KLSAgICAgIGlmIChxdGRlbXV4LT5tYWpvcl9icmFuZCA9PSBGT1VSQ0Nfc3MwMikKLSAgICAgICAgZmxhZ3MgfD0gR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19NSVhFRF9NT05POwotCi0gICAgICBmcmFtZV90eXBlID0gUVRfVUlOVDggKChndWludDggKikgc3ZtaS0+ZGF0YSArIDEyKTsKLSAgICAgIGZyYW1lX2xheW91dCA9IFFUX1VJTlQ4ICgoZ3VpbnQ4ICopIHN2bWktPmRhdGEgKyAxMykgJiAweDAxOwotICAgICAgc3dpdGNoIChmcmFtZV90eXBlKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICBtb2RlID0gR1NUX1ZJREVPX01VTFRJVklFV19NT0RFX1NJREVfQllfU0lERTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgIG1vZGUgPSBHU1RfVklERU9fTVVMVElWSUVXX01PREVfUk9XX0lOVEVSTEVBVkVEOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgbW9kZSA9IEdTVF9WSURFT19NVUxUSVZJRVdfTU9ERV9GUkFNRV9CWV9GUkFNRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIC8qIG1vZGUgMyBpcyBwcmltYXJ5L3NlY29uZGFyeSB2aWV3IHNlcXVlbmNlLCBpZQotICAgICAgICAgICAqIGxlZnQvcmlnaHQgdmlld3MgaW4gc2VwYXJhdGUgdHJhY2tzLiBTZWUgc2VjdGlvbiA3LjIKLSAgICAgICAgICAgKiBvZiBJU08vSUVDIDIzMDAwLTExOjIwMDkgKi8KLSAgICAgICAgICBHU1RfRklYTUVfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgICAiSW1wbGVtZW50IHN0ZXJlbyB2aWRlbyBpbiBzZXBhcmF0ZSBzdHJlYW1zIik7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgoZnJhbWVfbGF5b3V0ICYgMHgxKSA9PSAwKQotICAgICAgICBmbGFncyB8PSBHU1RfVklERU9fTVVMVElWSUVXX0ZMQUdTX1JJR0hUX1ZJRVdfRklSU1Q7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICJTdGVyZW9WaWRlbzogY29tcG9zaXRpb24gdHlwZTogJXUsIGlzX2xlZnRfZmlyc3Q6ICV1IiwKLSAgICAgICAgICBmcmFtZV90eXBlLCBmcmFtZV9sYXlvdXQpOwotICAgICAgc3RyZWFtLT5tdWx0aXZpZXdfbW9kZSA9IG1vZGU7Ci0gICAgICBzdHJlYW0tPm11bHRpdmlld19mbGFncyA9IGZsYWdzOwotICAgIH0KLSAgfQotCi0gIC8qIHBhcnNlIHN0c2QgKi8KLSAgaWYgKCEoc3RzZCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc3RibCwgRk9VUkNDX3N0c2QpKSkKLSAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLSAgc3RzZF9kYXRhID0gKGNvbnN0IGd1aW50OCAqKSBzdHNkLT5kYXRhOwotCi0gIC8qIHN0c2Qgc2hvdWxkIGF0IGxlYXN0IGhhdmUgb25lIGVudHJ5ICovCi0gIHN0c2RfbGVuID0gUVRfVUlOVDMyIChzdHNkX2RhdGEpOwotICBpZiAoc3RzZF9sZW4gPCAyNCkgewotICAgIC8qIC4uIGJ1dCBza2lwIHN0cmVhbSB3aXRoIGVtcHR5IHN0c2QgcHJvZHVjZWQgYnkgc29tZSBWaXZvdGVrIGNhbWVyYXMgKi8KLSAgICBpZiAoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ192aXZvKSB7Ci0gICAgICBpZiAobmV3X3N0cmVhbSkKLSAgICAgICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZyZWUgKHF0ZGVtdXgsIHN0cmVhbSk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJzdHNkIGxlbjogICAgICAgICAgICVkIiwgc3RzZF9sZW4pOwotCi0gIC8qIGFuZCB0aGF0IGVudHJ5IHNob3VsZCBmaXQgd2l0aGluIHN0c2QgKi8KLSAgbGVuID0gUVRfVUlOVDMyIChzdHNkX2RhdGEgKyAxNik7Ci0gIGlmIChsZW4gPiBzdHNkX2xlbiArIDE2KQotICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gIHN0cmVhbS0+Zm91cmNjID0gZm91cmNjID0gUVRfRk9VUkNDIChzdHNkX2RhdGEgKyAxNiArIDQpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInN0c2QgdHlwZTogICAgICAgICAgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKHN0cmVhbS0+Zm91cmNjKSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAic3RzZCB0eXBlIGxlbjogICAgICAlZCIsIGxlbik7Ci0KLSAgaWYgKChmb3VyY2MgPT0gRk9VUkNDX2RybXMpIHx8IChmb3VyY2MgPT0gRk9VUkNDX2RybWkpKQotICAgIGdvdG8gZXJyb3JfZW5jcnlwdGVkOwotCi0gIGlmIChmb3VyY2MgPT0gRk9VUkNDX2VuY3YgfHwgZm91cmNjID09IEZPVVJDQ19lbmNhKSB7Ci0gICAgR05vZGUgKmVuYyA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc3RzZCwgZm91cmNjKTsKLSAgICBzdHJlYW0tPnByb3RlY3RlZCA9IFRSVUU7Ci0gICAgaWYgKCFxdGRlbXV4X3BhcnNlX3Byb3RlY3Rpb25fc2NoZW1lX2luZm8gKHF0ZGVtdXgsIHN0cmVhbSwgZW5jLCAmZm91cmNjKSkKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHF0ZGVtdXgsICJGYWlsZWQgdG8gcGFyc2UgcHJvdGVjdGlvbiBzY2hlbWUgaW5mbyIpOwotICB9Ci0KLSAgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0NfdmlkZSkgewotICAgIGd1aW50MzIgdyA9IDAsIGggPSAwOwotICAgIGdib29sZWFuIGdyYXk7Ci0gICAgZ2ludCBkZXB0aCwgcGFsZXR0ZV9zaXplLCBwYWxldHRlX2NvdW50OwotICAgIGd1aW50MzIgbWF0cml4WzldOwotICAgIGd1aW50MzIgKnBhbGV0dGVfZGF0YSA9IE5VTEw7Ci0KLSAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotCi0gICAgLyogdmVyc2lvbiAxIHVzZXMgc29tZSA2NC1iaXQgaW50cyAqLwotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZ0a2hkLCAyMCArIHZhbHVlX3NpemUpKQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICBpZiAoIXF0ZGVtdXhfcGFyc2VfdHJhbnNmb3JtYXRpb25fbWF0cml4IChxdGRlbXV4LCAmdGtoZCwgbWF0cml4LCAidGtoZCIpKQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlICgmdGtoZCwgJncpCi0gICAgICAgIHx8ICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoJnRraGQsICZoKSkKLSAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gICAgc3RyZWFtLT5kaXNwbGF5X3dpZHRoID0gdyA+PiAxNjsKLSAgICBzdHJlYW0tPmRpc3BsYXlfaGVpZ2h0ID0gaCA+PiAxNjsKLQotICAgIHF0ZGVtdXhfaW5zcGVjdF90cmFuc2Zvcm1hdGlvbl9tYXRyaXggKHF0ZGVtdXgsIHN0cmVhbSwgbWF0cml4LAotICAgICAgICAmc3RyZWFtLT5wZW5kaW5nX3RhZ3MpOwotCi0gICAgb2Zmc2V0ID0gMTY7Ci0gICAgaWYgKGxlbiA8IDg2KQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICBzdHJlYW0tPndpZHRoID0gUVRfVUlOVDE2IChzdHNkX2RhdGEgKyBvZmZzZXQgKyAzMik7Ci0gICAgc3RyZWFtLT5oZWlnaHQgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDM0KTsKLSAgICBzdHJlYW0tPmZwc19uID0gMDsgICAgICAgICAgLyogdGhpcyBpcyBmaWxsZWQgaW4gbGF0ZXIgKi8KLSAgICBzdHJlYW0tPmZwc19kID0gMDsgICAgICAgICAgLyogdGhpcyBpcyBmaWxsZWQgaW4gbGF0ZXIgKi8KLSAgICBzdHJlYW0tPmJpdHNfcGVyX3NhbXBsZSA9IFFUX1VJTlQxNiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgODIpOwotICAgIHN0cmVhbS0+Y29sb3JfdGFibGVfaWQgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDg0KTsKLQotICAgIC8qIGlmIGNvbG9yX3RhYmxlX2lkIGlzIDAsIGN0YWIgYXRvbSBtdXN0IGZvbGxvdzsgaG93ZXZlciBzb21lIGZpbGVzCi0gICAgICogcHJvZHVjZWQgYnkgVE1QRUdFbmMgaGF2ZSBjb2xvcl90YWJsZV9pZCA9IDAgYW5kIG5vIGN0YWIgYXRvbSwgc28KLSAgICAgKiBpZiBjb2xvciB0YWJsZSBpcyBub3QgcHJlc2VudCB3ZSdsbCBjb3JyZWN0IHRoZSB2YWx1ZSAqLwotICAgIGlmIChzdHJlYW0tPmNvbG9yX3RhYmxlX2lkID09IDAgJiYKLSAgICAgICAgKGxlbiA8IDkwIHx8IFFUX0ZPVVJDQyAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgODYpICE9IEZPVVJDQ19jdGFiKSkgewotICAgICAgc3RyZWFtLT5jb2xvcl90YWJsZV9pZCA9IC0xOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAid2lkdGggJWQsIGhlaWdodCAlZCwgYnBzICVkLCBjb2xvciB0YWJsZSBpZCAlZCIsCi0gICAgICAgIHN0cmVhbS0+d2lkdGgsIHN0cmVhbS0+aGVpZ2h0LCBzdHJlYW0tPmJpdHNfcGVyX3NhbXBsZSwKLSAgICAgICAgc3RyZWFtLT5jb2xvcl90YWJsZV9pZCk7Ci0KLSAgICBkZXB0aCA9IHN0cmVhbS0+Yml0c19wZXJfc2FtcGxlOwotCi0gICAgLyogbW9yZSB0aGFuIDMyIGJpdHMgbWVhbnMgZ3JheXNjYWxlICovCi0gICAgZ3JheSA9IChkZXB0aCA+IDMyKTsKLSAgICAvKiBsb3cgMzIgYml0cyBzcGVjaWZ5IHRoZSBkZXB0aCAgKi8KLSAgICBkZXB0aCAmPSAweDFGOwotCi0gICAgLyogZGlmZmVyZW50IG51bWJlciBvZiBwYWxldHRlIGVudHJpZXMgaXMgZGV0ZXJtaW5lZCBieSBkZXB0aC4gKi8KLSAgICBwYWxldHRlX2NvdW50ID0gMDsKLSAgICBpZiAoKGRlcHRoID09IDEpIHx8IChkZXB0aCA9PSAyKSB8fCAoZGVwdGggPT0gNCkgfHwgKGRlcHRoID09IDgpKQotICAgICAgcGFsZXR0ZV9jb3VudCA9ICgxIDw8IGRlcHRoKTsKLSAgICBwYWxldHRlX3NpemUgPSBwYWxldHRlX2NvdW50ICogNDsKLQotICAgIGlmIChzdHJlYW0tPmNvbG9yX3RhYmxlX2lkKSB7Ci0gICAgICBzd2l0Y2ggKHBhbGV0dGVfY291bnQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgcGFsZXR0ZV9kYXRhID0gZ19tZW1kdXAgKGZmX3F0X2RlZmF1bHRfcGFsZXR0ZV8yLCBwYWxldHRlX3NpemUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgcGFsZXR0ZV9kYXRhID0gZ19tZW1kdXAgKGZmX3F0X2RlZmF1bHRfcGFsZXR0ZV80LCBwYWxldHRlX3NpemUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE2OgotICAgICAgICAgIGlmIChncmF5KQotICAgICAgICAgICAgcGFsZXR0ZV9kYXRhID0gZ19tZW1kdXAgKGZmX3F0X2dyYXlzY2FsZV9wYWxldHRlXzE2LCBwYWxldHRlX3NpemUpOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhbGV0dGVfZGF0YSA9IGdfbWVtZHVwIChmZl9xdF9kZWZhdWx0X3BhbGV0dGVfMTYsIHBhbGV0dGVfc2l6ZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjU2OgotICAgICAgICAgIGlmIChncmF5KQotICAgICAgICAgICAgcGFsZXR0ZV9kYXRhID0gZ19tZW1kdXAgKGZmX3F0X2dyYXlzY2FsZV9wYWxldHRlXzI1NiwgcGFsZXR0ZV9zaXplKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWxldHRlX2RhdGEgPSBnX21lbWR1cCAoZmZfcXRfZGVmYXVsdF9wYWxldHRlXzI1NiwgcGFsZXR0ZV9zaXplKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChxdGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAgICAgICAoXygiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIikpLAotICAgICAgICAgICAgICAoInVuc3VwcG9ydGVkIHBhbGV0dGUgZGVwdGggJWQiLCBkZXB0aCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBnaW50IGksIGosIHN0YXJ0LCBlbmQ7Ci0KLSAgICAgIGlmIChsZW4gPCA5NCkKLSAgICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICAgIC8qIHJlYWQgdGFibGUgKi8KLSAgICAgIHN0YXJ0ID0gUVRfVUlOVDMyIChzdHNkX2RhdGEgKyBvZmZzZXQgKyA4Nik7Ci0gICAgICBwYWxldHRlX2NvdW50ID0gUVRfVUlOVDE2IChzdHNkX2RhdGEgKyBvZmZzZXQgKyA5MCk7Ci0gICAgICBlbmQgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDkyKTsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJzdGFydCAlZCwgZW5kICVkLCBwYWxldHRlX2NvdW50ICVkIiwKLSAgICAgICAgICBzdGFydCwgZW5kLCBwYWxldHRlX2NvdW50KTsKLQotICAgICAgaWYgKGVuZCA+IDI1NSkKLSAgICAgICAgZW5kID0gMjU1OwotICAgICAgaWYgKHN0YXJ0ID4gZW5kKQotICAgICAgICBzdGFydCA9IGVuZDsKLQotICAgICAgaWYgKGxlbiA8IDk0ICsgKGVuZCAtIHN0YXJ0KSAqIDgpCi0gICAgICAgIGdvdG8gY29ycnVwdF9maWxlOwotCi0gICAgICAvKiBwYWxldHRlIGlzIGFsd2F5cyB0aGUgc2FtZSBzaXplICovCi0gICAgICBwYWxldHRlX2RhdGEgPSBnX21hbGxvYzAgKDI1NiAqIDQpOwotICAgICAgcGFsZXR0ZV9zaXplID0gMjU2ICogNDsKLQotICAgICAgZm9yIChqID0gMCwgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaisrLCBpKyspIHsKLSAgICAgICAgZ3VpbnQzMiBhLCByLCBnLCBiOwotCi0gICAgICAgIGEgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDk0ICsgKGogKiA4KSk7Ci0gICAgICAgIHIgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDk2ICsgKGogKiA4KSk7Ci0gICAgICAgIGcgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDk4ICsgKGogKiA4KSk7Ci0gICAgICAgIGIgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDEwMCArIChqICogOCkpOwotCi0gICAgICAgIHBhbGV0dGVfZGF0YVtpXSA9ICgoYSAmIDB4ZmYwMCkgPDwgMTYpIHwgKChyICYgMHhmZjAwKSA8PCA4KSB8Ci0gICAgICAgICAgICAoZyAmIDB4ZmYwMCkgfCAoYiA+PiA4KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtLT5jYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHN0cmVhbS0+Y2Fwcyk7Ci0KLSAgICBzdHJlYW0tPmNhcHMgPQotICAgICAgICBxdGRlbXV4X3ZpZGVvX2NhcHMgKHF0ZGVtdXgsIHN0cmVhbSwgZm91cmNjLCBzdHNkX2RhdGEsICZjb2RlYyk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKCFzdHJlYW0tPmNhcHMpKSB7Ci0gICAgICBnX2ZyZWUgKHBhbGV0dGVfZGF0YSk7Ci0gICAgICBnb3RvIHVua25vd25fc3RyZWFtOwotICAgIH0KLQotICAgIGlmIChjb2RlYykgewotICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoc3RyZWFtLT5wZW5kaW5nX3RhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICBHU1RfVEFHX1ZJREVPX0NPREVDLCBjb2RlYywgTlVMTCk7Ci0gICAgICBnX2ZyZWUgKGNvZGVjKTsKLSAgICAgIGNvZGVjID0gTlVMTDsKLSAgICB9Ci0KLQotICAgIGlmIChwYWxldHRlX2RhdGEpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgICAgaWYgKHN0cmVhbS0+cmdiOF9wYWxldHRlKQotICAgICAgICBnc3RfbWVtb3J5X3VucmVmIChzdHJlYW0tPnJnYjhfcGFsZXR0ZSk7Ci0gICAgICBzdHJlYW0tPnJnYjhfcGFsZXR0ZSA9IGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgICAgICBwYWxldHRlX2RhdGEsIHBhbGV0dGVfc2l6ZSwgMCwgcGFsZXR0ZV9zaXplLCBwYWxldHRlX2RhdGEsIGdfZnJlZSk7Ci0KLSAgICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzdHJlYW0tPmNhcHMsIDApOwotCi0gICAgICAvKiBub24tcmF3IHZpZGVvIGhhcyBhIHBhbGV0dGVfZGF0YSBwcm9wZXJ0eS4gcmF3IHZpZGVvIGhhcyB0aGUgcGFsZXR0ZSBhcwotICAgICAgICogYW4gZXh0cmEgcGxhbmUgdGhhdCB3ZSBhcHBlbmQgdG8gdGhlIG91dHB1dCBidWZmZXJzIGJlZm9yZSB3ZSBwdXNoCi0gICAgICAgKiB0aGVtKi8KLSAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgInZpZGVvL3gtcmF3IikpIHsKLSAgICAgICAgR3N0QnVmZmVyICpwYWxldHRlOwotCi0gICAgICAgIHBhbGV0dGUgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChwYWxldHRlLCBzdHJlYW0tPnJnYjhfcGFsZXR0ZSk7Ci0gICAgICAgIHN0cmVhbS0+cmdiOF9wYWxldHRlID0gTlVMTDsKLQotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsICJwYWxldHRlX2RhdGEiLAotICAgICAgICAgICAgR1NUX1RZUEVfQlVGRkVSLCBwYWxldHRlLCBOVUxMKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocGFsZXR0ZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChwYWxldHRlX2NvdW50ICE9IDApIHsKLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHF0ZGVtdXgsIFNUUkVBTSwgTk9UX0lNUExFTUVOVEVELAotICAgICAgICAgIChOVUxMKSwgKCJVbnN1cHBvcnRlZCBwYWxldHRlIGRlcHRoICVkIiwgZGVwdGgpKTsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImZyYW1lIGNvdW50OiAgICV1IiwKLSAgICAgICAgUVRfVUlOVDE2IChzdHNkX2RhdGEgKyBvZmZzZXQgKyA0OCkpOwotCi0gICAgZXNkcyA9IE5VTEw7Ci0gICAgcGFzcCA9IE5VTEw7Ci0gICAgLyogcGljayAndGhlJyBzdHNkIGNoaWxkICovCi0gICAgaWYgKCFzdHJlYW0tPnByb3RlY3RlZCkKLSAgICAgIG1wNHYgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIGZvdXJjYyk7Ci0gICAgZWxzZQotICAgICAgbXA0diA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc3RzZCwgRk9VUkNDX2VuY3YpOwotCi0gICAgaWYgKG1wNHYpIHsKLSAgICAgIGVzZHMgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG1wNHYsIEZPVVJDQ19lc2RzKTsKLSAgICAgIHBhc3AgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG1wNHYsIEZPVVJDQ19wYXNwKTsKLSAgICB9Ci0KLSAgICBpZiAocGFzcCkgewotICAgICAgY29uc3QgZ3VpbnQ4ICpwYXNwX2RhdGEgPSAoY29uc3QgZ3VpbnQ4ICopIHBhc3AtPmRhdGE7Ci0gICAgICBnaW50IGxlbiA9IFFUX1VJTlQzMiAocGFzcF9kYXRhKTsKLQotICAgICAgaWYgKGxlbiA9PSAxNikgewotICAgICAgICBzdHJlYW0tPnBhcl93ID0gUVRfVUlOVDMyIChwYXNwX2RhdGEgKyA4KTsKLSAgICAgICAgc3RyZWFtLT5wYXJfaCA9IFFUX1VJTlQzMiAocGFzcF9kYXRhICsgMTIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RyZWFtLT5wYXJfdyA9IDA7Ci0gICAgICAgIHN0cmVhbS0+cGFyX2ggPSAwOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzdHJlYW0tPnBhcl93ID0gMDsKLSAgICAgIHN0cmVhbS0+cGFyX2ggPSAwOwotICAgIH0KLQotICAgIGlmIChlc2RzKSB7Ci0gICAgICBnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyAocXRkZW11eCwgc3RyZWFtLCBlc2RzLCBzdHJlYW0tPnBlbmRpbmdfdGFncyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgICAgIGNhc2UgRk9VUkNDX0gyNjQ6Ci0gICAgICAgIGNhc2UgRk9VUkNDX2F2YzE6Ci0gICAgICAgIGNhc2UgRk9VUkNDX2F2YzM6Ci0gICAgICAgIHsKLSAgICAgICAgICBnaW50IGxlbiA9IFFUX1VJTlQzMiAoc3RzZF9kYXRhKSAtIDB4NjY7Ci0gICAgICAgICAgY29uc3QgZ3VpbnQ4ICphdmNfZGF0YSA9IHN0c2RfZGF0YSArIDB4NjY7Ci0KLSAgICAgICAgICAvKiBmaW5kIGF2Y0MgKi8KLSAgICAgICAgICB3aGlsZSAobGVuID49IDB4OCkgewotICAgICAgICAgICAgZ2ludCBzaXplOwotCi0gICAgICAgICAgICBpZiAoUVRfVUlOVDMyIChhdmNfZGF0YSkgPD0gbGVuKQotICAgICAgICAgICAgICBzaXplID0gUVRfVUlOVDMyIChhdmNfZGF0YSkgLSAweDg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHNpemUgPSBsZW4gLSAweDg7Ci0KLSAgICAgICAgICAgIGlmIChzaXplIDwgMSkKLSAgICAgICAgICAgICAgLyogTm8gcmVhbCBkYXRhLCBzbyBicmVhayBvdXQgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoUVRfRk9VUkNDIChhdmNfZGF0YSArIDB4NCkpIHsKLSAgICAgICAgICAgICAgY2FzZSBGT1VSQ0NfYXZjQzoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHBhcnNlLCBpZiBmb3VuZCAqLwotICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIGF2Y0MgY29kZWNfZGF0YSBpbiBzdHNkIik7Ci0KLSAgICAgICAgICAgICAgICAvKiBGaXJzdCA0IGJ5dGVzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBhdG9tLCB0aGUgbmV4dCA0IGJ5dGVzCi0gICAgICAgICAgICAgICAgICogYXJlIHRoZSBmb3VyY2MsIHRoZSBuZXh0IDEgYnl0ZSBpcyB0aGUgdmVyc2lvbiwgYW5kIHRoZQotICAgICAgICAgICAgICAgICAqIHN1YnNlcXVlbnQgYnl0ZXMgYXJlIHByb2ZpbGVfdGllcl9sZXZlbCBzdHJ1Y3R1cmUgbGlrZSBkYXRhLiAqLwotICAgICAgICAgICAgICAgIGdzdF9jb2RlY191dGlsc19oMjY0X2NhcHNfc2V0X2xldmVsX2FuZF9wcm9maWxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAgIGF2Y19kYXRhICsgOCArIDEsIHNpemUgLSAxKTsKLSAgICAgICAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBhdmNfZGF0YSArIDB4OCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgY2FzZSBGT1VSQ0Nfc3RyZjoKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIHN0cmYgY29kZWNfZGF0YSBpbiBzdHNkIik7Ci0KLSAgICAgICAgICAgICAgICAvKiBGaXJzdCA0IGJ5dGVzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBhdG9tLCB0aGUgbmV4dCA0IGJ5dGVzCi0gICAgICAgICAgICAgICAgICogYXJlIHRoZSBmb3VyY2MsIG5leHQgNDAgYnl0ZXMgYXJlIEJJVE1BUElORk9IRUFERVIsCi0gICAgICAgICAgICAgICAgICogbmV4dCAxIGJ5dGUgaXMgdGhlIHZlcnNpb24sIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgKiBzdWJzZXF1ZW50IGJ5dGVzIGFyZSBzZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0IGxpa2UgZGF0YS4gKi8KLQotICAgICAgICAgICAgICAgIHNpemUgLT0gNDA7ICAgICAvKiB3ZSdsbCBiZSBza2lwcGluZyBCSVRNQVBJTkZPSEVBREVSICovCi0gICAgICAgICAgICAgICAgaWYgKHNpemUgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICBnc3RfY29kZWNfdXRpbHNfaDI2NF9jYXBzX3NldF9sZXZlbF9hbmRfcHJvZmlsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAgICAgICAgIGF2Y19kYXRhICsgOCArIDQwICsgMSwgc2l6ZSAtIDEpOwotCi0gICAgICAgICAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICAgICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGF2Y19kYXRhICsgOCArIDQwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHN0cmVhbS0+Y2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGNhc2UgRk9VUkNDX2J0cnQ6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBndWludCBhdmdfYml0cmF0ZSwgbWF4X2JpdHJhdGU7Ci0KLSAgICAgICAgICAgICAgICAvKiBidWZmZXJTaXplREIsIG1heEJpdHJhdGUgYW5kIGF2Z0JpdHJhdGUgLSA0IGJ5dGVzIGVhY2ggKi8KLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IDEyKQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBtYXhfYml0cmF0ZSA9IFFUX1VJTlQzMiAoYXZjX2RhdGEgKyAweGMpOwotICAgICAgICAgICAgICAgIGF2Z19iaXRyYXRlID0gUVRfVUlOVDMyIChhdmNfZGF0YSArIDB4MTApOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtYXhfYml0cmF0ZSAmJiAhYXZnX2JpdHJhdGUpCi0gICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8qIFNvbWUgbXV4ZXJzIHNlZW0gdG8gc3dhcCB0aGUgYXZlcmFnZSBhbmQgbWF4aW11bSBiaXRyYXRlcwotICAgICAgICAgICAgICAgICAqIChJJ20gbG9va2luZyBhdCB5b3UsIFlvdVR1YmUpLCBzbyB3ZSBzd2FwIGZvciBzYW5pdHkuICovCi0gICAgICAgICAgICAgICAgaWYgKG1heF9iaXRyYXRlID4gMCAmJiBtYXhfYml0cmF0ZSA8IGF2Z19iaXRyYXRlKSB7Ci0gICAgICAgICAgICAgICAgICBndWludCB0ZW1wID0gYXZnX2JpdHJhdGU7Ci0KLSAgICAgICAgICAgICAgICAgIGF2Z19iaXRyYXRlID0gbWF4X2JpdHJhdGU7Ci0gICAgICAgICAgICAgICAgICBtYXhfYml0cmF0ZSA9IHRlbXA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1heF9iaXRyYXRlID4gMCAmJiBtYXhfYml0cmF0ZSA8IEdfTUFYVUlOVDMyKSB7Ci0gICAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChzdHJlYW0tPnBlbmRpbmdfdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgIEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFLCBtYXhfYml0cmF0ZSwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhdmdfYml0cmF0ZSA+IDAgJiYgYXZnX2JpdHJhdGUgPCBHX01BWFVJTlQzMikgewotICAgICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoc3RyZWFtLT5wZW5kaW5nX3RhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICBHU1RfVEFHX0JJVFJBVEUsIGF2Z19iaXRyYXRlLCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxlbiAtPSBzaXplICsgODsKLSAgICAgICAgICAgIGF2Y19kYXRhICs9IHNpemUgKyA4OwotICAgICAgICAgIH0KLQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRk9VUkNDX0gyNjU6Ci0gICAgICAgIGNhc2UgRk9VUkNDX2h2YzE6Ci0gICAgICAgIGNhc2UgRk9VUkNDX2hldjE6Ci0gICAgICAgIHsKLSAgICAgICAgICBnaW50IGxlbiA9IFFUX1VJTlQzMiAoc3RzZF9kYXRhKSAtIDB4NjY7Ci0gICAgICAgICAgY29uc3QgZ3VpbnQ4ICpoZXZjX2RhdGEgPSBzdHNkX2RhdGEgKyAweDY2OwotCi0gICAgICAgICAgLyogZmluZCBoZXZjICovCi0gICAgICAgICAgd2hpbGUgKGxlbiA+PSAweDgpIHsKLSAgICAgICAgICAgIGdpbnQgc2l6ZTsKLQotICAgICAgICAgICAgaWYgKFFUX1VJTlQzMiAoaGV2Y19kYXRhKSA8PSBsZW4pCi0gICAgICAgICAgICAgIHNpemUgPSBRVF9VSU5UMzIgKGhldmNfZGF0YSkgLSAweDg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHNpemUgPSBsZW4gLSAweDg7Ci0KLSAgICAgICAgICAgIGlmIChzaXplIDwgMSkKLSAgICAgICAgICAgICAgLyogTm8gcmVhbCBkYXRhLCBzbyBicmVhayBvdXQgKi8KLSAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoUVRfRk9VUkNDIChoZXZjX2RhdGEgKyAweDQpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgRk9VUkNDX2h2Y0M6Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBwYXJzZSwgaWYgZm91bmQgKi8KLSAgICAgICAgICAgICAgICBHc3RCdWZmZXIgKmJ1ZjsKLQotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCBhdmNDIGNvZGVjX2RhdGEgaW4gc3RzZCIpOwotCi0gICAgICAgICAgICAgICAgLyogRmlyc3QgNCBieXRlcyBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgYXRvbSwgdGhlIG5leHQgNCBieXRlcwotICAgICAgICAgICAgICAgICAqIGFyZSB0aGUgZm91cmNjLCB0aGUgbmV4dCAxIGJ5dGUgaXMgdGhlIHZlcnNpb24sIGFuZCB0aGUKLSAgICAgICAgICAgICAgICAgKiBzdWJzZXF1ZW50IGJ5dGVzIGFyZSBzZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0IGxpa2UgZGF0YS4gKi8KLSAgICAgICAgICAgICAgICBnc3RfY29kZWNfdXRpbHNfaDI2NV9jYXBzX3NldF9sZXZlbF90aWVyX2FuZF9wcm9maWxlCi0gICAgICAgICAgICAgICAgICAgIChzdHJlYW0tPmNhcHMsIGhldmNfZGF0YSArIDggKyAxLCBzaXplIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBoZXZjX2RhdGEgKyAweDgsIHNpemUpOwotICAgICAgICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHN0cmVhbS0+Y2FwcywKLSAgICAgICAgICAgICAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZiwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IHNpemUgKyA4OwotICAgICAgICAgICAgaGV2Y19kYXRhICs9IHNpemUgKyA4OwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZPVVJDQ19tcDR2OgotICAgICAgICBjYXNlIEZPVVJDQ19NUDRWOgotICAgICAgICBjYXNlIEZPVVJDQ19mbXA0OgotICAgICAgICBjYXNlIEZPVVJDQ19GTVA0OgotICAgICAgICB7Ci0gICAgICAgICAgR05vZGUgKmdsYmw7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZm91bmQgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0KLSAgICAgICAgICAvKiBjb2RlYyBkYXRhIG1pZ2h0IGJlIGluIGdsYmwgZXh0ZW5zaW9uIGF0b20gKi8KLSAgICAgICAgICBnbGJsID0gbXA0diA/Ci0gICAgICAgICAgICAgIHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobXA0diwgRk9VUkNDX2dsYmwpIDogTlVMTDsKLSAgICAgICAgICBpZiAoZ2xibCkgewotICAgICAgICAgICAgZ3VpbnQ4ICpkYXRhOwotICAgICAgICAgICAgR3N0QnVmZmVyICpidWY7Ci0gICAgICAgICAgICBnaW50IGxlbjsKLQotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIGdsYmwgZGF0YSBpbiBzdHNkIik7Ci0gICAgICAgICAgICBkYXRhID0gZ2xibC0+ZGF0YTsKLSAgICAgICAgICAgIGxlbiA9IFFUX1VJTlQzMiAoZGF0YSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMHg4KSB7Ci0gICAgICAgICAgICAgIGxlbiAtPSAweDg7Ci0gICAgICAgICAgICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGRhdGEgKyA4LCBsZW4pOwotICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGT1VSQ0NfbWpwMjoKLSAgICAgICAgewotICAgICAgICAgIC8qIHNlZSBhbm5leCBJIG9mIHRoZSBqcGVnMjAwMCBzcGVjICovCi0gICAgICAgICAgR05vZGUgKmpwMmgsICppaGRyLCAqY29sciwgKm1qcDIsICpmaWVsZCwgKnByZWZpeCwgKmNtYXAsICpjZGVmOwotICAgICAgICAgIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgICAgICAgICBjb25zdCBnY2hhciAqY29sb3JzcGFjZSA9IE5VTEw7Ci0gICAgICAgICAgZ2ludCBuY29tcCA9IDA7Ci0gICAgICAgICAgZ3VpbnQzMiBuY29tcF9tYXAgPSAwOwotICAgICAgICAgIGdpbnQzMiAqY29tcF9tYXAgPSBOVUxMOwotICAgICAgICAgIGd1aW50MzIgbmNoYW5fZGVmID0gMDsKLSAgICAgICAgICBnaW50MzIgKmNoYW5fZGVmID0gTlVMTDsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCBtanAyIik7Ci0gICAgICAgICAgLyogc29tZSByZXF1aXJlZCBhdG9tcyAqLwotICAgICAgICAgIG1qcDIgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIEZPVVJDQ19tanAyKTsKLSAgICAgICAgICBpZiAoIW1qcDIpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBqcDJoID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChtanAyLCBGT1VSQ0NfanAyaCk7Ci0gICAgICAgICAgaWYgKCFqcDJoKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAvKiBudW1iZXIgb2YgY29tcG9uZW50czsgcmVkdW5kYW50IHdpdGggaW5mbyBpbiBjb2Rlc3RyZWFtLCBidXQgdXNlZnVsCi0gICAgICAgICAgICAgdG8gYSBtdXhlciAqLwotICAgICAgICAgIGloZHIgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGpwMmgsIEZPVVJDQ19paGRyKTsKLSAgICAgICAgICBpZiAoIWloZHIgfHwgUVRfVUlOVDMyIChpaGRyLT5kYXRhKSAhPSAyMikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIG5jb21wID0gUVRfVUlOVDE2ICgoKGd1aW50OCAqKSBpaGRyLT5kYXRhKSArIDE2KTsKLQotICAgICAgICAgIGNvbHIgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGpwMmgsIEZPVVJDQ19jb2xyKTsKLSAgICAgICAgICBpZiAoIWNvbHIpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZm91bmQgY29sciIpOwotICAgICAgICAgIC8qIGV4dHJhY3QgY29sb3VyIHNwYWNlIGluZm8gKi8KLSAgICAgICAgICBpZiAoUVRfVUlOVDggKChndWludDggKikgY29sci0+ZGF0YSArIDgpID09IDEpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoUVRfVUlOVDMyICgoZ3VpbnQ4ICopIGNvbHItPmRhdGEgKyAxMSkpIHsKLSAgICAgICAgICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgICBjb2xvcnNwYWNlID0gInNSR0IiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgICAgIGNvbG9yc3BhY2UgPSAiR1JBWSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMTg6Ci0gICAgICAgICAgICAgICAgY29sb3JzcGFjZSA9ICJzWVVWIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjb2xvcnNwYWNlID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFjb2xvcnNwYWNlKQotICAgICAgICAgICAgLyogY29sciBpcyByZXF1aXJlZCwgYW5kIG9ubHkgdmFsdWVzIDE2LCAxNywgYW5kIDE4IGFyZSBzcGVjaWZpZWQsCi0gICAgICAgICAgICAgICBzbyBlcnJvciBpZiB3ZSBoYXZlIG5vIGNvbG9yc3BhY2UgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgLyogZXh0cmFjdCBjb21wb25lbnQgbWFwcGluZyAqLwotICAgICAgICAgIGNtYXAgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGpwMmgsIEZPVVJDQ19jbWFwKTsKLSAgICAgICAgICBpZiAoY21hcCkgewotICAgICAgICAgICAgZ3VpbnQzMiBjbWFwX2xlbiA9IDA7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGNtYXBfbGVuID0gUVRfVUlOVDMyIChjbWFwLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChjbWFwX2xlbiA+PSA4KSB7Ci0gICAgICAgICAgICAgIC8qIG5vcm1hbCBib3gsIHN1YnRyYWN0IG9mZiBoZWFkZXIgKi8KLSAgICAgICAgICAgICAgY21hcF9sZW4gLT0gODsKLSAgICAgICAgICAgICAgLyogY21hcDogeyB1MTYgY21wOyB1OCBtdHlwOyB1OCBwY29sOyB9KiAqLwotICAgICAgICAgICAgICBpZiAoY21hcF9sZW4gJSA0ID09IDApIHsKLSAgICAgICAgICAgICAgICBuY29tcF9tYXAgPSAoY21hcF9sZW4gLyA0KTsKLSAgICAgICAgICAgICAgICBjb21wX21hcCA9IGdfbmV3MCAoZ2ludDMyLCBuY29tcF9tYXApOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuY29tcF9tYXA7IGkrKykgewotICAgICAgICAgICAgICAgICAgZ3VpbnQxNiBjbXA7Ci0gICAgICAgICAgICAgICAgICBndWludDggbXR5cCwgcGNvbDsKLSAgICAgICAgICAgICAgICAgIGNtcCA9IFFUX1VJTlQxNiAoKChndWludDggKikgY21hcC0+ZGF0YSkgKyA4ICsgaSAqIDQpOwotICAgICAgICAgICAgICAgICAgbXR5cCA9IFFUX1VJTlQ4ICgoKGd1aW50OCAqKSBjbWFwLT5kYXRhKSArIDggKyBpICogNCArIDIpOwotICAgICAgICAgICAgICAgICAgcGNvbCA9IFFUX1VJTlQ4ICgoKGd1aW50OCAqKSBjbWFwLT5kYXRhKSArIDggKyBpICogNCArIDMpOwotICAgICAgICAgICAgICAgICAgY29tcF9tYXBbaV0gPSAobXR5cCA8PCAyNCkgfCAocGNvbCA8PCAxNikgfCBjbXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIGV4dHJhY3QgY2hhbm5lbCBkZWZpbml0aW9ucyAqLwotICAgICAgICAgIGNkZWYgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGpwMmgsIEZPVVJDQ19jZGVmKTsKLSAgICAgICAgICBpZiAoY2RlZikgewotICAgICAgICAgICAgZ3VpbnQzMiBjZGVmX2xlbiA9IDA7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGNkZWZfbGVuID0gUVRfVUlOVDMyIChjZGVmLT5kYXRhKTsKLSAgICAgICAgICAgIGlmIChjZGVmX2xlbiA+PSAxMCkgewotICAgICAgICAgICAgICAvKiBub3JtYWwgYm94LCBzdWJ0cmFjdCBvZmYgaGVhZGVyIGFuZCBsZW4gKi8KLSAgICAgICAgICAgICAgY2RlZl9sZW4gLT0gMTA7Ci0gICAgICAgICAgICAgIC8qIGNkZWY6IHUxNiBuOyB7IHUxNiBjbjsgdTE2IHR5cDsgdTE2IGFzb2M7IH0qICovCi0gICAgICAgICAgICAgIGlmIChjZGVmX2xlbiAlIDYgPT0gMCkgewotICAgICAgICAgICAgICAgIG5jaGFuX2RlZiA9IChjZGVmX2xlbiAvIDYpOwotICAgICAgICAgICAgICAgIGNoYW5fZGVmID0gZ19uZXcwIChnaW50MzIsIG5jaGFuX2RlZik7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5jaGFuX2RlZjsgaSsrKQotICAgICAgICAgICAgICAgICAgY2hhbl9kZWZbaV0gPSAtMTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmNoYW5fZGVmOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgIGd1aW50MTYgY24sIHR5cCwgYXNvYzsKLSAgICAgICAgICAgICAgICAgIGNuID0gUVRfVUlOVDE2ICgoKGd1aW50OCAqKSBjZGVmLT5kYXRhKSArIDEwICsgaSAqIDYpOwotICAgICAgICAgICAgICAgICAgdHlwID0gUVRfVUlOVDE2ICgoKGd1aW50OCAqKSBjZGVmLT5kYXRhKSArIDEwICsgaSAqIDYgKyAyKTsKLSAgICAgICAgICAgICAgICAgIGFzb2MgPSBRVF9VSU5UMTYgKCgoZ3VpbnQ4ICopIGNkZWYtPmRhdGEpICsgMTAgKyBpICogNiArIDQpOwotICAgICAgICAgICAgICAgICAgaWYgKGNuIDwgbmNoYW5fZGVmKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbl9kZWZbY25dID0gYXNvYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5fZGVmW2NuXSA9IDA7ICAgICAgIC8qIGFscGhhICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbl9kZWZbY25dID0gLXR5cDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHN0cmVhbS0+Y2FwcywKLSAgICAgICAgICAgICAgIm51bS1jb21wb25lbnRzIiwgR19UWVBFX0lOVCwgbmNvbXAsIE5VTEwpOwotICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHN0cmVhbS0+Y2FwcywKLSAgICAgICAgICAgICAgImNvbG9yc3BhY2UiLCBHX1RZUEVfU1RSSU5HLCBjb2xvcnNwYWNlLCBOVUxMKTsKLQotICAgICAgICAgIGlmIChjb21wX21hcCkgewotICAgICAgICAgICAgR1ZhbHVlIGFyciA9IHsgMCwgfTsKLSAgICAgICAgICAgIEdWYWx1ZSBlbHQgPSB7IDAsIH07Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJmFyciwgR1NUX1RZUEVfQVJSQVkpOwotICAgICAgICAgICAgZ192YWx1ZV9pbml0ICgmZWx0LCBHX1RZUEVfSU5UKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuY29tcF9tYXA7IGkrKykgewotICAgICAgICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZlbHQsIGNvbXBfbWFwW2ldKTsKLSAgICAgICAgICAgICAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJmFyciwgJmVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3RyZWFtLT5jYXBzLCAwKSwKLSAgICAgICAgICAgICAgICAiY29tcG9uZW50LW1hcCIsICZhcnIpOwotICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJmVsdCk7Ci0gICAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmYXJyKTsKLSAgICAgICAgICAgIGdfZnJlZSAoY29tcF9tYXApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChjaGFuX2RlZikgewotICAgICAgICAgICAgR1ZhbHVlIGFyciA9IHsgMCwgfTsKLSAgICAgICAgICAgIEdWYWx1ZSBlbHQgPSB7IDAsIH07Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJmFyciwgR1NUX1RZUEVfQVJSQVkpOwotICAgICAgICAgICAgZ192YWx1ZV9pbml0ICgmZWx0LCBHX1RZUEVfSU5UKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuY2hhbl9kZWY7IGkrKykgewotICAgICAgICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZlbHQsIGNoYW5fZGVmW2ldKTsKLSAgICAgICAgICAgICAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJmFyciwgJmVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3RyZWFtLT5jYXBzLCAwKSwKLSAgICAgICAgICAgICAgICAiY2hhbm5lbC1kZWZpbml0aW9ucyIsICZhcnIpOwotICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJmVsdCk7Ci0gICAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmYXJyKTsKLSAgICAgICAgICAgIGdfZnJlZSAoY2hhbl9kZWYpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIHNvbWUgb3B0aW9uYWwgYXRvbXMgKi8KLSAgICAgICAgICBmaWVsZCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobWpwMiwgRk9VUkNDX2ZpZWwpOwotICAgICAgICAgIHByZWZpeCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobWpwMiwgRk9VUkNDX2pwMngpOwotCi0gICAgICAgICAgLyogaW5kaWNhdGUgcG9zc2libGUgZmllbGRzIGluIGNhcHMgKi8KLSAgICAgICAgICBpZiAoZmllbGQpIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZ3VpbnQ4ICopIGZpZWxkLT5kYXRhICsgODsKLSAgICAgICAgICAgIGlmICgqZGF0YSAhPSAxKQotICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsICJmaWVsZHMiLCBHX1RZUEVfSU5ULAotICAgICAgICAgICAgICAgICAgKGdpbnQpICogZGF0YSwgTlVMTCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIC8qIGFkZCBjb2RlY19kYXRhIGlmIHByb3ZpZGVkICovCi0gICAgICAgICAgaWYgKHByZWZpeCkgewotICAgICAgICAgICAgR3N0QnVmZmVyICpidWY7Ci0gICAgICAgICAgICBnaW50IGxlbjsKLQotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIHByZWZpeCBkYXRhIGluIHN0c2QiKTsKLSAgICAgICAgICAgIGRhdGEgPSBwcmVmaXgtPmRhdGE7Ci0gICAgICAgICAgICBsZW4gPSBRVF9VSU5UMzIgKGRhdGEpOwotICAgICAgICAgICAgaWYgKGxlbiA+IDB4OCkgewotICAgICAgICAgICAgICBsZW4gLT0gMHg4OwotICAgICAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbik7Ci0gICAgICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBkYXRhICsgOCwgbGVuKTsKLSAgICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZiwgTlVMTCk7Ci0gICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRk9VUkNDX1NWUTM6Ci0gICAgICAgIGNhc2UgRk9VUkNDX1ZQMzE6Ci0gICAgICAgIHsKLSAgICAgICAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICAgICAgICBHc3RCdWZmZXIgKnNlcWggPSBOVUxMOwotICAgICAgICAgIGd1aW50OCAqZ2FtbWFfZGF0YSA9IE5VTEw7Ci0gICAgICAgICAgZ2ludCBsZW4gPSBRVF9VSU5UMzIgKHN0c2RfZGF0YSk7Ci0KLSAgICAgICAgICBxdGRlbXV4X3BhcnNlX3N2cTNfc3RzZF9kYXRhIChxdGRlbXV4LCBzdHNkLCAmZ2FtbWFfZGF0YSwgJnNlcWgpOwotICAgICAgICAgIGlmIChnYW1tYV9kYXRhKSB7Ci0gICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsICJhcHBsaWVkLWdhbW1hIiwgR19UWVBFX0RPVUJMRSwKLSAgICAgICAgICAgICAgICBRVF9GUDMyIChnYW1tYV9kYXRhKSwgTlVMTCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzZXFoKSB7Ci0gICAgICAgICAgICAvKiBzb3JyeSBmb3IgdGhlIGJhZCBuYW1lLCBidXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMsIG90aGVyCi0gICAgICAgICAgICAgKiB0aGFuIGl0cyBvd24gZm91cmNjICovCi0gICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsICJzZXFoIiwgR1NUX1RZUEVfQlVGRkVSLCBzZXFoLAotICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc2VxaCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIGNvZGVjX2RhdGEgaW4gc3RzZCIpOwotICAgICAgICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgc3RzZF9kYXRhLCBsZW4pOwotICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHN0cmVhbS0+Y2FwcywKLSAgICAgICAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZiwgTlVMTCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZPVVJDQ19ybGVfOgotICAgICAgICBjYXNlIEZPVVJDQ19XUkxFOgotICAgICAgICB7Ci0gICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAiZGVwdGgiLCBHX1RZUEVfSU5ULCBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIG9mZnNldCArIDgyKSwgTlVMTCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGT1VSQ0NfWGlUaDoKLSAgICAgICAgewotICAgICAgICAgIEdOb2RlICp4aXRoLCAqeGR4dDsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCBYaVRoIik7Ci0gICAgICAgICAgeGl0aCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc3RzZCwgRk9VUkNDX1hpVGgpOwotICAgICAgICAgIGlmICgheGl0aCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgeGR4dCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoeGl0aCwgRk9VUkNDX1hkeFQpOwotICAgICAgICAgIGlmICgheGR4dCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIFhkeFQgbm9kZSIpOwotICAgICAgICAgIC8qIGNvbGxlY3QgdGhlIGhlYWRlcnMgYW5kIHN0b3JlIHRoZW0gaW4gYSBzdHJlYW0gbGlzdCBzbyB0aGF0IHdlIGNhbgotICAgICAgICAgICAqIHNlbmQgdGhlbSBvdXQgZmlyc3QgKi8KLSAgICAgICAgICBxdGRlbXV4X3BhcnNlX3RoZW9yYV9leHRlbnNpb24gKHF0ZGVtdXgsIHN0cmVhbSwgeGR4dCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGT1VSQ0Nfb3ZjMToKLSAgICAgICAgewotICAgICAgICAgIEdOb2RlICpvdmMxOwotICAgICAgICAgIGd1aW50OCAqb3ZjMV9kYXRhOwotICAgICAgICAgIGd1aW50IG92YzFfbGVuOwotICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInBhcnNlIG92YzEgaGVhZGVyIik7Ci0gICAgICAgICAgb3ZjMSA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc3RzZCwgRk9VUkNDX292YzEpOwotICAgICAgICAgIGlmICghb3ZjMSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIG92YzFfZGF0YSA9IG92YzEtPmRhdGE7Ci0gICAgICAgICAgb3ZjMV9sZW4gPSBRVF9VSU5UMzIgKG92YzFfZGF0YSk7Ci0gICAgICAgICAgaWYgKG92YzFfbGVuIDw9IDE5OCkgewotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiVG9vIHNtYWxsIG92YzEgaGVhZGVyLCBza2lwcGluZyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAob3ZjMV9sZW4gLSAxOTgpOwotICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBvdmMxX2RhdGEgKyAxOTgsIG92YzFfbGVuIC0gMTk4KTsKLSAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsIE5VTEwpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGT1VSQ0NfdmNfMToKLSAgICAgICAgewotICAgICAgICAgIGdpbnQgbGVuID0gUVRfVUlOVDMyIChzdHNkX2RhdGEpIC0gMHg2NjsKLSAgICAgICAgICBjb25zdCBndWludDggKnZjMV9kYXRhID0gc3RzZF9kYXRhICsgMHg2NjsKLQotICAgICAgICAgIC8qIGZpbmQgZHZjMSAqLwotICAgICAgICAgIHdoaWxlIChsZW4gPj0gOCkgewotICAgICAgICAgICAgZ2ludCBzaXplOwotCi0gICAgICAgICAgICBpZiAoUVRfVUlOVDMyICh2YzFfZGF0YSkgPD0gbGVuKQotICAgICAgICAgICAgICBzaXplID0gUVRfVUlOVDMyICh2YzFfZGF0YSkgLSA4OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBzaXplID0gbGVuIC0gODsKLQotICAgICAgICAgICAgaWYgKHNpemUgPCAxKQotICAgICAgICAgICAgICAvKiBObyByZWFsIGRhdGEsIHNvIGJyZWFrIG91dCAqLwotICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgc3dpdGNoIChRVF9GT1VSQ0MgKHZjMV9kYXRhICsgMHg0KSkgewotICAgICAgICAgICAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2QnLCAndicsICdjJywgJzEnKToKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIGR2YzEgY29kZWNfZGF0YSBpbiBzdHNkIik7Ci0gICAgICAgICAgICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplKTsKLSAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgdmMxX2RhdGEgKyA4LCBzaXplKTsKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsIE5VTEwpOwotICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiAtPSBzaXplICsgODsKLSAgICAgICAgICAgIHZjMV9kYXRhICs9IHNpemUgKyA4OwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIEdTVF9JTkZPX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgInR5cGUgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBjYXBzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYyksIHN0cmVhbS0+Y2Fwcyk7Ci0KLSAgfSBlbHNlIGlmIChzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3NvdW4pIHsKLSAgICBpbnQgdmVyc2lvbiwgc2FtcGxlc2l6ZTsKLSAgICBndWludDE2IGNvbXByZXNzaW9uX2lkOwotICAgIGdib29sZWFuIGFtcndiID0gRkFMU0U7Ci0KLSAgICBvZmZzZXQgPSAzMjsKLSAgICAvKiBzYW1wbGUgZGVzY3JpcHRpb24gZW50cnkgKDE2KSArIHNvdW5kIHNhbXBsZSBkZXNjcmlwdGlvbiB2MCAoMjApICovCi0gICAgaWYgKGxlbiA8IDM2KQotICAgICAgZ290byBjb3JydXB0X2ZpbGU7Ci0KLSAgICB2ZXJzaW9uID0gUVRfVUlOVDMyIChzdHNkX2RhdGEgKyBvZmZzZXQpOwotICAgIHN0cmVhbS0+bl9jaGFubmVscyA9IFFUX1VJTlQxNiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgOCk7Ci0gICAgc2FtcGxlc2l6ZSA9IFFUX1VJTlQxNiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgMTApOwotICAgIGNvbXByZXNzaW9uX2lkID0gUVRfVUlOVDE2IChzdHNkX2RhdGEgKyBvZmZzZXQgKyAxMik7Ci0gICAgc3RyZWFtLT5yYXRlID0gUVRfRlAzMiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgMTYpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJ2ZXJzaW9uL3JldjogICAgICAlMDh4IiwgdmVyc2lvbik7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJ2ZW5kb3I6ICAgICAgICAgICAlMDh4IiwKLSAgICAgICAgUVRfVUlOVDMyIChzdHNkX2RhdGEgKyBvZmZzZXQgKyA0KSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJuX2NoYW5uZWxzOiAgICAgICAlZCIsIHN0cmVhbS0+bl9jaGFubmVscyk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJzYW1wbGVfc2l6ZTogICAgICAlZCIsIHNhbXBsZXNpemUpOwotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiY29tcHJlc3Npb25faWQ6ICAgJWQiLCBjb21wcmVzc2lvbl9pZCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJwYWNrZXQgc2l6ZTogICAgICAlZCIsCi0gICAgICAgIFFUX1VJTlQxNiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgMTQpKTsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInNhbXBsZSByYXRlOiAgICAgICVnIiwgc3RyZWFtLT5yYXRlKTsKLQotICAgIGlmIChjb21wcmVzc2lvbl9pZCA9PSAweGZmZmUpCi0gICAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotCi0gICAgLyogZmlyc3QgYXNzdW1lIHVuY29tcHJlc3NlZCBhdWRpbyAqLwotICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3NhbXBsZSA9IHNhbXBsZXNpemUgLyA4OwotICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfZnJhbWUgPSBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgc3RyZWFtLT5ieXRlc19wZXJfZnJhbWUgPSBzdHJlYW0tPm5fY2hhbm5lbHMgKiBzdHJlYW0tPmJ5dGVzX3Blcl9zYW1wbGU7Ci0gICAgc3RyZWFtLT5zYW1wbGVzX3Blcl9wYWNrZXQgPSBzdHJlYW0tPnNhbXBsZXNfcGVyX2ZyYW1lOwotICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3BhY2tldCA9IHN0cmVhbS0+Ynl0ZXNfcGVyX3NhbXBsZTsKLQotICAgIG9mZnNldCA9IDUyOwotICAgIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgICAgIC8qIFllcywgdGhlc2UgaGF2ZSB0byBiZSBoYXJkLWNvZGVkICovCi0gICAgICBjYXNlIEZPVVJDQ19NQUM2OgotICAgICAgewotICAgICAgICBzdHJlYW0tPnNhbXBsZXNfcGVyX3BhY2tldCA9IDY7Ci0gICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3BhY2tldCA9IDE7Ci0gICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX2ZyYW1lID0gMSAqIHN0cmVhbS0+bl9jaGFubmVsczsKLSAgICAgICAgc3RyZWFtLT5ieXRlc19wZXJfc2FtcGxlID0gMTsKLSAgICAgICAgc3RyZWFtLT5zYW1wbGVzX3Blcl9mcmFtZSA9IDYgKiBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBGT1VSQ0NfTUFDMzoKLSAgICAgIHsKLSAgICAgICAgc3RyZWFtLT5zYW1wbGVzX3Blcl9wYWNrZXQgPSAzOwotICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9wYWNrZXQgPSAxOwotICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSA9IDEgKiBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3NhbXBsZSA9IDE7Ci0gICAgICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfZnJhbWUgPSAzICogc3RyZWFtLT5uX2NoYW5uZWxzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgRk9VUkNDX2ltYTQ6Ci0gICAgICB7Ci0gICAgICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfcGFja2V0ID0gNjQ7Ci0gICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3BhY2tldCA9IDM0OwotICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSA9IDM0ICogc3RyZWFtLT5uX2NoYW5uZWxzOwotICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9zYW1wbGUgPSAyOwotICAgICAgICBzdHJlYW0tPnNhbXBsZXNfcGVyX2ZyYW1lID0gNjQgKiBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBGT1VSQ0NfdWxhdzoKLSAgICAgIGNhc2UgRk9VUkNDX2FsYXc6Ci0gICAgICB7Ci0gICAgICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfcGFja2V0ID0gMTsKLSAgICAgICAgc3RyZWFtLT5ieXRlc19wZXJfcGFja2V0ID0gMTsKLSAgICAgICAgc3RyZWFtLT5ieXRlc19wZXJfZnJhbWUgPSAxICogc3RyZWFtLT5uX2NoYW5uZWxzOwotICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9zYW1wbGUgPSAxOwotICAgICAgICBzdHJlYW0tPnNhbXBsZXNfcGVyX2ZyYW1lID0gMSAqIHN0cmVhbS0+bl9jaGFubmVsczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ19hZ3NtOgotICAgICAgewotICAgICAgICBzdHJlYW0tPnNhbXBsZXNfcGVyX3BhY2tldCA9IDE2MDsKLSAgICAgICAgc3RyZWFtLT5ieXRlc19wZXJfcGFja2V0ID0gMzM7Ci0gICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX2ZyYW1lID0gMzMgKiBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3NhbXBsZSA9IDI7Ci0gICAgICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfZnJhbWUgPSAxNjAgKiBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKHZlcnNpb24gPT0gMHgwMDAxMDAwMCkgewotICAgICAgLyogc2FtcGxlIGRlc2NyaXB0aW9uIGVudHJ5ICgxNikgKyBzb3VuZCBzYW1wbGUgZGVzY3JpcHRpb24gdjEgKDIwKzE2KSAqLwotICAgICAgaWYgKGxlbiA8IDUyKQotICAgICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAgICAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICAgICAgY2FzZSBGT1VSQ0NfdHdvczoKLSAgICAgICAgY2FzZSBGT1VSQ0Nfc293dDoKLSAgICAgICAgY2FzZSBGT1VSQ0NfcmF3XzoKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgIC8qIG9ubHkgcGFyc2UgZXh0cmEgZGVjb2RpbmcgY29uZmlnIGZvciBub24tcGNtIGF1ZGlvICovCi0gICAgICAgICAgc3RyZWFtLT5zYW1wbGVzX3Blcl9wYWNrZXQgPSBRVF9VSU5UMzIgKHN0c2RfZGF0YSArIG9mZnNldCk7Ci0gICAgICAgICAgc3RyZWFtLT5ieXRlc19wZXJfcGFja2V0ID0gUVRfVUlOVDMyIChzdHNkX2RhdGEgKyBvZmZzZXQgKyA0KTsKLSAgICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSA9IFFUX1VJTlQzMiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgOCk7Ci0gICAgICAgICAgc3RyZWFtLT5ieXRlc19wZXJfc2FtcGxlID0gUVRfVUlOVDMyIChzdHNkX2RhdGEgKyBvZmZzZXQgKyAxMik7Ci0KLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInNhbXBsZXMvcGFja2V0OiAgICVkIiwKLSAgICAgICAgICAgICAgc3RyZWFtLT5zYW1wbGVzX3Blcl9wYWNrZXQpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiYnl0ZXMvcGFja2V0OiAgICAgJWQiLAotICAgICAgICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9wYWNrZXQpOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiYnl0ZXMvZnJhbWU6ICAgICAgJWQiLAotICAgICAgICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJieXRlcy9zYW1wbGU6ICAgICAlZCIsCi0gICAgICAgICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3NhbXBsZSk7Ci0KLSAgICAgICAgICBpZiAoIXN0cmVhbS0+c2FtcGxlZCAmJiBzdHJlYW0tPmJ5dGVzX3Blcl9wYWNrZXQpIHsKLSAgICAgICAgICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfZnJhbWUgPSAoc3RyZWFtLT5ieXRlc19wZXJfZnJhbWUgLwotICAgICAgICAgICAgICAgIHN0cmVhbS0+Ynl0ZXNfcGVyX3BhY2tldCkgKiBzdHJlYW0tPnNhbXBsZXNfcGVyX3BhY2tldDsKLSAgICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAic2FtcGxlcy9mcmFtZTogICAgJWQiLAotICAgICAgICAgICAgICAgIHN0cmVhbS0+c2FtcGxlc19wZXJfZnJhbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAodmVyc2lvbiA9PSAweDAwMDIwMDAwKSB7Ci0gICAgICB1bmlvbgotICAgICAgewotICAgICAgICBnZG91YmxlIGZwOwotICAgICAgICBndWludDY0IHZhbDsKLSAgICAgIH0gcXRmcDsKLQotICAgICAgLyogc2FtcGxlIGRlc2NyaXB0aW9uIGVudHJ5ICgxNikgKyBzb3VuZCBzYW1wbGUgZGVzY3JpcHRpb24gdjIgKDU2KSAqLwotICAgICAgaWYgKGxlbiA8IDcyKQotICAgICAgICBnb3RvIGNvcnJ1cHRfZmlsZTsKLQotICAgICAgcXRmcC52YWwgPSBRVF9VSU5UNjQgKHN0c2RfZGF0YSArIG9mZnNldCArIDQpOwotICAgICAgc3RyZWFtLT5yYXRlID0gcXRmcC5mcDsKLSAgICAgIHN0cmVhbS0+bl9jaGFubmVscyA9IFFUX1VJTlQzMiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgMTIpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIlNvdW5kIHNhbXBsZSBkZXNjcmlwdGlvbiBWZXJzaW9uIDIiKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAic2FtcGxlIHJhdGU6ICAgICAgICAlZyIsIHN0cmVhbS0+cmF0ZSk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIm5fY2hhbm5lbHM6ICAgICAgICAgJWQiLCBzdHJlYW0tPm5fY2hhbm5lbHMpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJiaXRzL2NoYW5uZWw6ICAgICAgICVkIiwKLSAgICAgICAgICBRVF9VSU5UMzIgKHN0c2RfZGF0YSArIG9mZnNldCArIDIwKSk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgImZvcm1hdCBmbGFnczogICAgICAgJVgiLAotICAgICAgICAgIFFUX1VJTlQzMiAoc3RzZF9kYXRhICsgb2Zmc2V0ICsgMjQpKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiYnl0ZXMvcGFja2V0OiAgICAgICAlZCIsCi0gICAgICAgICAgUVRfVUlOVDMyIChzdHNkX2RhdGEgKyBvZmZzZXQgKyAyOCkpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJMUENNIGZyYW1lcy9wYWNrZXQ6ICVkIiwKLSAgICAgICAgICBRVF9VSU5UMzIgKHN0c2RfZGF0YSArIG9mZnNldCArIDMyKSk7Ci0gICAgfSBlbHNlIGlmICh2ZXJzaW9uICE9IDB4MDAwMDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgInVua25vd24gYXVkaW8gU1RTRCB2ZXJzaW9uICUwOHgiLCB2ZXJzaW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtLT5jYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHN0cmVhbS0+Y2Fwcyk7Ci0KLSAgICBzdHJlYW0tPmNhcHMgPSBxdGRlbXV4X2F1ZGlvX2NhcHMgKHF0ZGVtdXgsIHN0cmVhbSwgZm91cmNjLAotICAgICAgICBzdHNkX2RhdGEgKyAzMiwgbGVuIC0gMTYsICZjb2RlYyk7Ci0KLSAgICBzd2l0Y2ggKGZvdXJjYykgewotICAgICAgY2FzZSBGT1VSQ0NfaW4yNDoKLSAgICAgIHsKLSAgICAgICAgR05vZGUgKmVuZGE7Ci0gICAgICAgIEdOb2RlICppbjI0OwotCi0gICAgICAgIGluMjQgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIEZPVVJDQ19pbjI0KTsKLQotICAgICAgICBlbmRhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChpbjI0LCBGT1VSQ0NfZW5kYSk7Ci0gICAgICAgIGlmICghZW5kYSkgewotICAgICAgICAgIHdhdmUgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGluMjQsIEZPVVJDQ193YXZlKTsKLSAgICAgICAgICBpZiAod2F2ZSkKLSAgICAgICAgICAgIGVuZGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHdhdmUsIEZPVVJDQ19lbmRhKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5kYSkgewotICAgICAgICAgIGludCBlbmRhX3ZhbHVlID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIGVuZGEtPmRhdGEgKyA4KTsKLSAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAoZW5kYV92YWx1ZSkgPyAiUzI0TEUiIDogIlMyNEJFIiwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEZPVVJDQ19vd21hOgotICAgICAgewotICAgICAgICBHTm9kZSAqb3dtYTsKLSAgICAgICAgY29uc3QgZ3VpbnQ4ICpvd21hX2RhdGE7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpjb2RlY19uYW1lID0gTlVMTDsKLSAgICAgICAgZ3VpbnQgb3dtYV9sZW47Ci0gICAgICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgICAgICBnaW50IHZlcnNpb24gPSAxOwotICAgICAgICAvKiBmcm9tIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDc1NzcyMChWUy44NSkuYXNweCAqLwotICAgICAgICAvKiBGSVhNRSB0aGlzIHNob3VsZCBhbHNvIGJlIGdzdF9yaWZmX3N0cmZfYXVkcywKLSAgICAgICAgICogYnV0IHRoZSBsYXR0ZXIgb25lIGlzIGFjdHVhbGx5IG1pc3NpbmcgYml0cy1wZXItc2FtcGxlIDooICovCi0gICAgICAgIHR5cGVkZWYgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICBnaW50MTYgd0Zvcm1hdFRhZzsKLSAgICAgICAgICBnaW50MTYgbkNoYW5uZWxzOwotICAgICAgICAgIGdpbnQzMiBuU2FtcGxlc1BlclNlYzsKLSAgICAgICAgICBnaW50MzIgbkF2Z0J5dGVzUGVyU2VjOwotICAgICAgICAgIGdpbnQxNiBuQmxvY2tBbGlnbjsKLSAgICAgICAgICBnaW50MTYgd0JpdHNQZXJTYW1wbGU7Ci0gICAgICAgICAgZ2ludDE2IGNiU2l6ZTsKLSAgICAgICAgfSBXQVZFRk9STUFURVg7Ci0gICAgICAgIFdBVkVGT1JNQVRFWCAqd2ZleDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAicGFyc2Ugb3dtYSIpOwotICAgICAgICBvd21hID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChzdHNkLCBGT1VSQ0Nfb3dtYSk7Ci0gICAgICAgIGlmICghb3dtYSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgb3dtYV9kYXRhID0gb3dtYS0+ZGF0YTsKLSAgICAgICAgb3dtYV9sZW4gPSBRVF9VSU5UMzIgKG93bWFfZGF0YSk7Ci0gICAgICAgIGlmIChvd21hX2xlbiA8PSA1NCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIlRvbyBzbWFsbCBvd21hIGhlYWRlciwgc2tpcHBpbmciKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB3ZmV4ID0gKFdBVkVGT1JNQVRFWCAqKSAob3dtYV9kYXRhICsgMzYpOwotICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG93bWFfbGVuIC0gNTQpOwotICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgb3dtYV9kYXRhICsgNTQsIG93bWFfbGVuIC0gNTQpOwotICAgICAgICBpZiAod2ZleC0+d0Zvcm1hdFRhZyA9PSAweDAxNjEpIHsKLSAgICAgICAgICBjb2RlY19uYW1lID0gIldpbmRvd3MgTWVkaWEgQXVkaW8iOwotICAgICAgICAgIHZlcnNpb24gPSAyOwotICAgICAgICB9IGVsc2UgaWYgKHdmZXgtPndGb3JtYXRUYWcgPT0gMHgwMTYyKSB7Ci0gICAgICAgICAgY29kZWNfbmFtZSA9ICJXaW5kb3dzIE1lZGlhIEF1ZGlvIDkgUHJvIjsKLSAgICAgICAgICB2ZXJzaW9uID0gMzsKLSAgICAgICAgfSBlbHNlIGlmICh3ZmV4LT53Rm9ybWF0VGFnID09IDB4MDE2MykgewotICAgICAgICAgIGNvZGVjX25hbWUgPSAiV2luZG93cyBNZWRpYSBBdWRpbyA5IExvc3NsZXNzIjsKLSAgICAgICAgICAvKiBpcyB0aGF0IGNvcnJlY3Q/IGdzdGZmbXBlZ2NvZGVjbWFwLmMgaXMgbWlzc2luZyBpdCwgYnV0Ci0gICAgICAgICAgICogZmx1ZW5kbyBjb2RlYyBzZWVtcyB0byBzdXBwb3J0IGl0ICovCi0gICAgICAgICAgdmVyc2lvbiA9IDQ7Ci0gICAgICAgIH0KLQotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLAotICAgICAgICAgICAgIndtYXZlcnNpb24iLCBHX1RZUEVfSU5ULCB2ZXJzaW9uLAotICAgICAgICAgICAgImJsb2NrX2FsaWduIiwgR19UWVBFX0lOVCwgR1NUX1JFQURfVUlOVDE2X0xFICgmd2ZleC0+bkJsb2NrQWxpZ24pLAotICAgICAgICAgICAgImJpdHJhdGUiLCBHX1RZUEVfSU5ULCBHU1RfUkVBRF9VSU5UMzJfTEUgKCZ3ZmV4LT5uQXZnQnl0ZXNQZXJTZWMpLAotICAgICAgICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgR1NUX1JFQURfVUlOVDE2X0xFICgmd2ZleC0+d0JpdHNQZXJTYW1wbGUpLAotICAgICAgICAgICAgImRlcHRoIiwgR19UWVBFX0lOVCwgR1NUX1JFQURfVUlOVDE2X0xFICgmd2ZleC0+d0JpdHNQZXJTYW1wbGUpLAotICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgICAgICAgaWYgKGNvZGVjX25hbWUpIHsKLSAgICAgICAgICBnX2ZyZWUgKGNvZGVjKTsKLSAgICAgICAgICBjb2RlYyA9IGdfc3RyZHVwIChjb2RlY19uYW1lKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgRk9VUkNDX3dtYV86Ci0gICAgICB7Ci0gICAgICAgIGdpbnQgbGVuID0gUVRfVUlOVDMyIChzdHNkX2RhdGEpIC0gb2Zmc2V0OwotICAgICAgICBjb25zdCBndWludDggKndmZXhfZGF0YSA9IHN0c2RfZGF0YSArIG9mZnNldDsKLSAgICAgICAgY29uc3QgZ2NoYXIgKmNvZGVjX25hbWUgPSBOVUxMOwotICAgICAgICBnaW50IHZlcnNpb24gPSAxOwotICAgICAgICAvKiBmcm9tIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDc1NzcyMChWUy44NSkuYXNweCAqLwotICAgICAgICAvKiBGSVhNRSB0aGlzIHNob3VsZCBhbHNvIGJlIGdzdF9yaWZmX3N0cmZfYXVkcywKLSAgICAgICAgICogYnV0IHRoZSBsYXR0ZXIgb25lIGlzIGFjdHVhbGx5IG1pc3NpbmcgYml0cy1wZXItc2FtcGxlIDooICovCi0gICAgICAgIHR5cGVkZWYgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICBnaW50MTYgd0Zvcm1hdFRhZzsKLSAgICAgICAgICBnaW50MTYgbkNoYW5uZWxzOwotICAgICAgICAgIGdpbnQzMiBuU2FtcGxlc1BlclNlYzsKLSAgICAgICAgICBnaW50MzIgbkF2Z0J5dGVzUGVyU2VjOwotICAgICAgICAgIGdpbnQxNiBuQmxvY2tBbGlnbjsKLSAgICAgICAgICBnaW50MTYgd0JpdHNQZXJTYW1wbGU7Ci0gICAgICAgICAgZ2ludDE2IGNiU2l6ZTsKLSAgICAgICAgfSBXQVZFRk9STUFURVg7Ci0gICAgICAgIFdBVkVGT1JNQVRFWCB3ZmV4OwotCi0gICAgICAgIC8qIEZJWE1FOiB1bmlmeSB3aXRoIHNpbWlsYXIgd2F2Zm9ybWF0ZXggcGFyc2luZyBjb2RlIGFib3ZlICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJwYXJzZSB3bWEsIGxvb2tpbmcgZm9yIHdmZXgiKTsKLQotICAgICAgICAvKiBmaW5kIHdmZXggKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+PSA4KSB7Ci0gICAgICAgICAgZ2ludCBzaXplOwotCi0gICAgICAgICAgaWYgKFFUX1VJTlQzMiAod2ZleF9kYXRhKSA8PSBsZW4pCi0gICAgICAgICAgICBzaXplID0gUVRfVUlOVDMyICh3ZmV4X2RhdGEpIC0gODsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaXplID0gbGVuIC0gODsKLQotICAgICAgICAgIGlmIChzaXplIDwgMSkKLSAgICAgICAgICAgIC8qIE5vIHJlYWwgZGF0YSwgc28gYnJlYWsgb3V0ICovCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIHN3aXRjaCAoUVRfRk9VUkNDICh3ZmV4X2RhdGEgKyA0KSkgewotICAgICAgICAgICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd3JywgJ2YnLCAnZScsICd4Jyk6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCB3ZmV4IGluIHN0c2QiKTsKLQotICAgICAgICAgICAgICBpZiAoc2l6ZSA8IDggKyAxOCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICB3ZmV4LndGb3JtYXRUYWcgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKHdmZXhfZGF0YSArIDggKyAwKTsKLSAgICAgICAgICAgICAgd2ZleC5uQ2hhbm5lbHMgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKHdmZXhfZGF0YSArIDggKyAyKTsKLSAgICAgICAgICAgICAgd2ZleC5uU2FtcGxlc1BlclNlYyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAod2ZleF9kYXRhICsgOCArIDQpOwotICAgICAgICAgICAgICB3ZmV4Lm5BdmdCeXRlc1BlclNlYyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAod2ZleF9kYXRhICsgOCArIDgpOwotICAgICAgICAgICAgICB3ZmV4Lm5CbG9ja0FsaWduID0gR1NUX1JFQURfVUlOVDE2X0xFICh3ZmV4X2RhdGEgKyA4ICsgMTIpOwotICAgICAgICAgICAgICB3ZmV4LndCaXRzUGVyU2FtcGxlID0gR1NUX1JFQURfVUlOVDE2X0xFICh3ZmV4X2RhdGEgKyA4ICsgMTQpOwotICAgICAgICAgICAgICB3ZmV4LmNiU2l6ZSA9IEdTVF9SRUFEX1VJTlQxNl9MRSAod2ZleF9kYXRhICsgOCArIDE2KTsKLQotICAgICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIkZvdW5kIHdmZXggYm94IGluIHN0c2Q6Iik7Ci0gICAgICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiRm9ybWF0VGFnID0gMHglMDR4LCBDaGFubmVscyA9ICV1LCAiCi0gICAgICAgICAgICAgICAgICAiU2FtcGxlc1BlclNlYyA9ICV1LCBBdmdCeXRlc1BlclNlYyA9ICV1LCBCbG9ja0FsaWduID0gJXUsICIKLSAgICAgICAgICAgICAgICAgICJCaXRzUGVyU2FtcGxlID0gJXUsIFNpemUgPSAldSIsIHdmZXgud0Zvcm1hdFRhZywKLSAgICAgICAgICAgICAgICAgIHdmZXgubkNoYW5uZWxzLCB3ZmV4Lm5TYW1wbGVzUGVyU2VjLCB3ZmV4Lm5BdmdCeXRlc1BlclNlYywKLSAgICAgICAgICAgICAgICAgIHdmZXgubkJsb2NrQWxpZ24sIHdmZXgud0JpdHNQZXJTYW1wbGUsIHdmZXguY2JTaXplKTsKLQotICAgICAgICAgICAgICBpZiAod2ZleC53Rm9ybWF0VGFnID09IDB4MDE2MSkgewotICAgICAgICAgICAgICAgIGNvZGVjX25hbWUgPSAiV2luZG93cyBNZWRpYSBBdWRpbyI7Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IDI7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAod2ZleC53Rm9ybWF0VGFnID09IDB4MDE2MikgewotICAgICAgICAgICAgICAgIGNvZGVjX25hbWUgPSAiV2luZG93cyBNZWRpYSBBdWRpbyA5IFBybyI7Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IDM7Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAod2ZleC53Rm9ybWF0VGFnID09IDB4MDE2MykgewotICAgICAgICAgICAgICAgIGNvZGVjX25hbWUgPSAiV2luZG93cyBNZWRpYSBBdWRpbyA5IExvc3NsZXNzIjsKLSAgICAgICAgICAgICAgICAvKiBpcyB0aGF0IGNvcnJlY3Q/IGdzdGZmbXBlZ2NvZGVjbWFwLmMgaXMgbWlzc2luZyBpdCwgYnV0Ci0gICAgICAgICAgICAgICAgICogZmx1ZW5kbyBjb2RlYyBzZWVtcyB0byBzdXBwb3J0IGl0ICovCi0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IDQ7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAid21hdmVyc2lvbiIsIEdfVFlQRV9JTlQsIHZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAiYmxvY2tfYWxpZ24iLCBHX1RZUEVfSU5ULCB3ZmV4Lm5CbG9ja0FsaWduLAotICAgICAgICAgICAgICAgICAgImJpdHJhdGUiLCBHX1RZUEVfSU5ULCB3ZmV4Lm5BdmdCeXRlc1BlclNlYywKLSAgICAgICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHdmZXgud0JpdHNQZXJTYW1wbGUsCi0gICAgICAgICAgICAgICAgICAiZGVwdGgiLCBHX1RZUEVfSU5ULCB3ZmV4LndCaXRzUGVyU2FtcGxlLCBOVUxMKTsKLQotICAgICAgICAgICAgICBpZiAoc2l6ZSA+IHdmZXguY2JTaXplKSB7Ci0gICAgICAgICAgICAgICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICAgICAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUgLSB3ZmV4LmNiU2l6ZSk7Ci0gICAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIHdmZXhfZGF0YSArIDggKyB3ZmV4LmNiU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSAtIHdmZXguY2JTaXplKTsKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAgICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsIE5VTEwpOwotICAgICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAibm8gY29kZWMgZGF0YSIpOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKGNvZGVjX25hbWUpIHsKLSAgICAgICAgICAgICAgICBnX2ZyZWUgKGNvZGVjKTsKLSAgICAgICAgICAgICAgICBjb2RlYyA9IGdfc3RyZHVwIChjb2RlY19uYW1lKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBsZW4gLT0gc2l6ZSArIDg7Ci0gICAgICAgICAgd2ZleF9kYXRhICs9IHNpemUgKyA4OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBGT1VSQ0Nfb3B1czoKLSAgICAgIHsKLSAgICAgICAgR05vZGUgKm9wdXM7Ci0gICAgICAgIGNvbnN0IGd1aW50OCAqb3B1c19kYXRhOwotICAgICAgICBndWludDggKmNoYW5uZWxfbWFwcGluZyA9IE5VTEw7Ci0gICAgICAgIGd1aW50MzIgcmF0ZTsKLSAgICAgICAgZ3VpbnQ4IGNoYW5uZWxzOwotICAgICAgICBndWludDggY2hhbm5lbF9tYXBwaW5nX2ZhbWlseTsKLSAgICAgICAgZ3VpbnQ4IHN0cmVhbV9jb3VudDsKLSAgICAgICAgZ3VpbnQ4IGNvdXBsZWRfY291bnQ7Ci0gICAgICAgIGd1aW50OCBpOwotCi0gICAgICAgIG9wdXMgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIEZPVVJDQ19vcHVzKTsKLSAgICAgICAgb3B1c19kYXRhID0gb3B1cy0+ZGF0YTsKLQotICAgICAgICBjaGFubmVscyA9IEdTVF9SRUFEX1VJTlQ4IChvcHVzX2RhdGEgKyA0NSk7Ci0gICAgICAgIHJhdGUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG9wdXNfZGF0YSArIDQ4KTsKLSAgICAgICAgY2hhbm5lbF9tYXBwaW5nX2ZhbWlseSA9IEdTVF9SRUFEX1VJTlQ4IChvcHVzX2RhdGEgKyA1NCk7Ci0gICAgICAgIHN0cmVhbV9jb3VudCA9IEdTVF9SRUFEX1VJTlQ4IChvcHVzX2RhdGEgKyA1NSk7Ci0gICAgICAgIGNvdXBsZWRfY291bnQgPSBHU1RfUkVBRF9VSU5UOCAob3B1c19kYXRhICsgNTYpOwotCi0gICAgICAgIGlmIChjaGFubmVscyA+IDApIHsKLSAgICAgICAgICBjaGFubmVsX21hcHBpbmcgPSBnX21hbGxvYyAoY2hhbm5lbHMgKiBzaXplb2YgKGd1aW50OCkpOwotICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgaSsrKQotICAgICAgICAgICAgY2hhbm5lbF9tYXBwaW5nW2ldID0gR1NUX1JFQURfVUlOVDggKG9wdXNfZGF0YSArIGkgKyA1Nyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJlYW0tPmNhcHMgPSBnc3RfY29kZWNfdXRpbHNfb3B1c19jcmVhdGVfY2FwcyAocmF0ZSwgY2hhbm5lbHMsCi0gICAgICAgICAgICBjaGFubmVsX21hcHBpbmdfZmFtaWx5LCBzdHJlYW1fY291bnQsIGNvdXBsZWRfY291bnQsCi0gICAgICAgICAgICBjaGFubmVsX21hcHBpbmcpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChjb2RlYykgewotICAgICAgR3N0U3RydWN0dXJlICpzOwotICAgICAgZ2ludCBiaXRyYXRlID0gMDsKLQotICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoc3RyZWFtLT5wZW5kaW5nX3RhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICBHU1RfVEFHX0FVRElPX0NPREVDLCBjb2RlYywgTlVMTCk7Ci0gICAgICBnX2ZyZWUgKGNvZGVjKTsKLSAgICAgIGNvZGVjID0gTlVMTDsKLQotICAgICAgLyogc29tZSBiaXRyYXRlIGluZm8gbWF5IGhhdmUgZW5kZWQgdXAgaW4gY2FwcyAqLwotICAgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHN0cmVhbS0+Y2FwcywgMCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJiaXRyYXRlIiwgJmJpdHJhdGUpOwotICAgICAgaWYgKGJpdHJhdGUgPiAwKQotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChzdHJlYW0tPnBlbmRpbmdfdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgR1NUX1RBR19CSVRSQVRFLCBiaXRyYXRlLCBOVUxMKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtLT5wcm90ZWN0ZWQgJiYgZm91cmNjID09IEZPVVJDQ19tcDRhKQotICAgICAgbXA0YSA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoc3RzZCwgRk9VUkNDX2VuY2EpOwotICAgIGVsc2UKLSAgICAgIG1wNGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIEZPVVJDQ19tcDRhKTsKLQotICAgIHdhdmUgPSBOVUxMOwotICAgIGVzZHMgPSBOVUxMOwotICAgIGlmIChtcDRhKSB7Ci0gICAgICB3YXZlID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChtcDRhLCBGT1VSQ0Nfd2F2ZSk7Ci0gICAgICBpZiAod2F2ZSkKLSAgICAgICAgZXNkcyA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAod2F2ZSwgRk9VUkNDX2VzZHMpOwotICAgICAgaWYgKCFlc2RzKQotICAgICAgICBlc2RzID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChtcDRhLCBGT1VSQ0NfZXNkcyk7Ci0gICAgfQotCi0KLSAgICAvKiBJZiB0aGUgZm91cmNjJ3MgYm90dG9tIDE2IGJpdHMgZ2l2ZXMgJ3NtJywgdGhlbiB0aGUgdG9wCi0gICAgICAgMTYgYml0cyBpcyBhIGJ5dGUtc3dhcHBlZCB3YXZlLXN0eWxlIGNvZGVjIGlkZW50aWZpZXIsCi0gICAgICAgYW5kIHdlIGNhbiBmaW5kIGEgV0FWRSBoZWFkZXIgaW50ZXJuYWxseSB0byBhICd3YXZlJyBhdG9tIGhlcmUuCi0gICAgICAgVGhpcyBjYW4gbW9yZSBjbGVhcmx5IGJlIHRob3VnaHQgb2YgYXMgJ21zJyBhcyB0aGUgdG9wIDE2IGJpdHMsIGFuZCBhCi0gICAgICAgY29kZWMgaWQgYXMgdGhlIGJvdHRvbSAxNiBiaXRzIC0gYnV0IGJ5dGUtc3dhcHBlZCB0byBzdG9yZSBpbiBRVCAod2hpY2gKLSAgICAgICBpcyBiaWctZW5kaWFuKS4KLSAgICAgKi8KLSAgICBpZiAoKGZvdXJjYyAmIDB4ZmZmZikgPT0gKCgncycgPDwgOCkgfCAnbScpKSB7Ci0gICAgICBpZiAobGVuIDwgb2Zmc2V0ICsgMjApIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiTm8gd2F2ZSBhdG9tIGluIE1TLXN0eWxlIGF1ZGlvIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBndWludDMyIGRhdGFsZW4gPSBRVF9VSU5UMzIgKHN0c2RfZGF0YSArIG9mZnNldCArIDE2KTsKLSAgICAgICAgY29uc3QgZ3VpbnQ4ICpkYXRhID0gc3RzZF9kYXRhICsgb2Zmc2V0ICsgMTY7Ci0gICAgICAgIEdOb2RlICp3YXZlbm9kZTsKLSAgICAgICAgR05vZGUgKndhdmVoZWFkZXJub2RlOwotCi0gICAgICAgIHdhdmVub2RlID0gZ19ub2RlX25ldyAoKGd1aW50OCAqKSBkYXRhKTsKLSAgICAgICAgaWYgKHF0ZGVtdXhfcGFyc2Vfbm9kZSAocXRkZW11eCwgd2F2ZW5vZGUsIGRhdGEsIGRhdGFsZW4pKSB7Ci0gICAgICAgICAgY29uc3QgZ3VpbnQ4ICp3YXZlaGVhZGVyOwotICAgICAgICAgIGd1aW50MzIgaGVhZGVybGVuOwotCi0gICAgICAgICAgd2F2ZWhlYWRlcm5vZGUgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHdhdmVub2RlLCBmb3VyY2MpOwotICAgICAgICAgIGlmICh3YXZlaGVhZGVybm9kZSkgewotICAgICAgICAgICAgd2F2ZWhlYWRlciA9IChjb25zdCBndWludDggKikgd2F2ZWhlYWRlcm5vZGUtPmRhdGE7Ci0gICAgICAgICAgICBoZWFkZXJsZW4gPSBRVF9VSU5UMzIgKHdhdmVoZWFkZXIpOwotCi0gICAgICAgICAgICBpZiAoaGVhZGVybGVuID4gOCkgewotICAgICAgICAgICAgICBnc3RfcmlmZl9zdHJmX2F1ZHMgKmhlYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICAgIEdzdEJ1ZmZlciAqaGVhZGVyYnVmOwotICAgICAgICAgICAgICBHc3RCdWZmZXIgKmV4dHJhOwotCi0gICAgICAgICAgICAgIHdhdmVoZWFkZXIgKz0gODsKLSAgICAgICAgICAgICAgaGVhZGVybGVuIC09IDg7Ci0KLSAgICAgICAgICAgICAgaGVhZGVyYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChoZWFkZXJsZW4pOwotICAgICAgICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKGhlYWRlcmJ1ZiwgMCwgd2F2ZWhlYWRlciwgaGVhZGVybGVuKTsKLQotICAgICAgICAgICAgICBpZiAoZ3N0X3JpZmZfcGFyc2Vfc3RyZl9hdWRzIChHU1RfRUxFTUVOVF9DQVNUIChxdGRlbXV4KSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJidWYsICZoZWFkZXIsICZleHRyYSkpIHsKLSAgICAgICAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoc3RyZWFtLT5jYXBzKTsKLSAgICAgICAgICAgICAgICAvKiBGSVhNRTogTmVlZCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgY2hhbm5lbCByZW9yZGVyIG1hcCAqLwotICAgICAgICAgICAgICAgIHN0cmVhbS0+Y2FwcyA9IGdzdF9yaWZmX2NyZWF0ZV9hdWRpb19jYXBzIChoZWFkZXItPmZvcm1hdCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyLCBleHRyYSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZXh0cmEpCi0gICAgICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChleHRyYSk7Ci0gICAgICAgICAgICAgICAgZ19mcmVlIChoZWFkZXIpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1RfREVCVUcgKCJEaWRuJ3QgZmluZCB3YXZlaGVhZGVybm9kZSBmb3IgdGhpcyBjb2RlYyIpOwotICAgICAgICB9Ci0gICAgICAgIGdfbm9kZV9kZXN0cm95ICh3YXZlbm9kZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChlc2RzKSB7Ci0gICAgICBnc3RfcXRkZW11eF9oYW5kbGVfZXNkcyAocXRkZW11eCwgc3RyZWFtLCBlc2RzLCBzdHJlYW0tPnBlbmRpbmdfdGFncyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAoZm91cmNjKSB7Ci0jaWYgMAotICAgICAgICAgIC8qIEZJWE1FOiB3aGF0IGlzIGluIHRoZSBjaHVuaz8gKi8KLSAgICAgICAgY2FzZSBGT1VSQ0NfUURNQzoKLSAgICAgICAgewotICAgICAgICAgIGdpbnQgbGVuID0gUVRfVUlOVDMyIChzdHNkX2RhdGEpOwotCi0gICAgICAgICAgLyogc2VlbXMgdG8gYmUgYWx3YXlzID0gMTE2ID0gMHg3NCAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBGT1VSQ0NfUURNMjoKLSAgICAgICAgewotICAgICAgICAgIGdpbnQgbGVuID0gUVRfVUlOVDMyIChzdHNkX2RhdGEpOwotCi0gICAgICAgICAgaWYgKGxlbiA+IDB4NEMpIHsKLSAgICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChsZW4gLSAweDRDKTsKLQotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIHN0c2RfZGF0YSArIDB4NEMsIGxlbiAtIDB4NEMpOwotICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAgICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsIE5VTEwpOwotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAic2FtcGxlc2l6ZSIsIEdfVFlQRV9JTlQsIHNhbXBsZXNpemUsIE5VTEwpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRk9VUkNDX2FsYWM6Ci0gICAgICAgIHsKLSAgICAgICAgICBHTm9kZSAqYWxhYywgKndhdmUgPSBOVUxMOwotCi0gICAgICAgICAgLyogYXBwYXJlbnRseSwgbTRhIGhhcyB0aGlzIGF0b20gYXBwZW5kZWQgZGlyZWN0bHkgaW4gdGhlIHN0c2QgZW50cnksCi0gICAgICAgICAgICogd2hpbGUgbW92IGhhcyBpdCBpbiBhIHdhdmUgYXRvbSAqLwotICAgICAgICAgIGFsYWMgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIEZPVVJDQ19hbGFjKTsKLSAgICAgICAgICBpZiAoYWxhYykgewotICAgICAgICAgICAgLyogYWxhYyBub3cgcmVmZXJzIHRvIHN0c2QgZW50cnkgYXRvbSAqLwotICAgICAgICAgICAgd2F2ZSA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoYWxhYywgRk9VUkNDX3dhdmUpOwotICAgICAgICAgICAgaWYgKHdhdmUpCi0gICAgICAgICAgICAgIGFsYWMgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHdhdmUsIEZPVVJDQ19hbGFjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgYWxhYyA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAoYWxhYywgRk9VUkNDX2FsYWMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoYWxhYykgewotICAgICAgICAgICAgY29uc3QgZ3VpbnQ4ICphbGFjX2RhdGEgPSBhbGFjLT5kYXRhOwotICAgICAgICAgICAgZ2ludCBsZW4gPSBRVF9VSU5UMzIgKGFsYWMtPmRhdGEpOwotICAgICAgICAgICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICAgICAgICAgIGlmIChsZW4gPCAzNikgewotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgICAgICAgImRpc2NhcmRpbmcgYWxhYyBhdG9tIHdpdGggdW5leHBlY3RlZCBsZW4gJWQiLCBsZW4pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLyogY29kZWMtZGF0YSBjb250YWlucyBhbGFjIGF0b20gc2l6ZSBhbmQgcHJlZml4LAotICAgICAgICAgICAgICAgKiBmZm1wZWcgbGlrZXMgaXQgdGhhdCB3YXksIG5vdCBxdWl0ZSBnc3QtaXNoIHRob3VnaCAuLi4qLwotICAgICAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbik7Ci0gICAgICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBhbGFjLT5kYXRhLCBsZW4pOwotICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAgICAgICAgICAgICBzdHJlYW0tPmJ5dGVzX3Blcl9mcmFtZSA9IFFUX1VJTlQzMiAoYWxhY19kYXRhICsgMTIpOwotICAgICAgICAgICAgICBzdHJlYW0tPm5fY2hhbm5lbHMgPSBRVF9VSU5UOCAoYWxhY19kYXRhICsgMjEpOwotICAgICAgICAgICAgICBzdHJlYW0tPnJhdGUgPSBRVF9VSU5UMzIgKGFsYWNfZGF0YSArIDMyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgICAic2FtcGxlc2l6ZSIsIEdfVFlQRV9JTlQsIHNhbXBsZXNpemUsIE5VTEwpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRk9VUkNDX3Nhd2I6Ci0gICAgICAgICAgLyogRmFsbHRocm91Z2ghICovCi0gICAgICAgICAgYW1yd2IgPSBUUlVFOwotICAgICAgICBjYXNlIEZPVVJDQ19zYW1yOgotICAgICAgICB7Ci0gICAgICAgICAgZ2ludCBsZW4gPSBRVF9VSU5UMzIgKHN0c2RfZGF0YSk7Ci0KLSAgICAgICAgICBpZiAobGVuID4gMHgzNCkgewotICAgICAgICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbiAtIDB4MzQpOwotICAgICAgICAgICAgZ3VpbnQgYml0cmF0ZTsKLQotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIHN0c2RfZGF0YSArIDB4MzQsIGxlbiAtIDB4MzQpOwotCi0gICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGVub3VnaCBkYXRhLCBsZXQncyB0cnkgdG8gZ2V0IHRoZSAnZGFtcicgYXRvbS4gU2VlCi0gICAgICAgICAgICAgKiB0aGUgM0dQUCBjb250YWluZXIgc3BlYyAoMjYuMjQ0KSBmb3IgbW9yZSBkZXRhaWxzLiAqLwotICAgICAgICAgICAgaWYgKChsZW4gLSAweDM0KSA+IDggJiYKLSAgICAgICAgICAgICAgICAoYml0cmF0ZSA9IHF0ZGVtdXhfcGFyc2VfYW1yX2JpdHJhdGUgKGJ1ZiwgYW1yd2IpKSkgewotICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkIChzdHJlYW0tPnBlbmRpbmdfdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgR1NUX1RBR19NQVhJTVVNX0JJVFJBVEUsIGJpdHJhdGUsIE5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZiwgTlVMTCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZPVVJDQ19tcDRhOgotICAgICAgICB7Ci0gICAgICAgICAgLyogbXA0YSBhdG9tIHdpdGh0b3V0IEVTRFM7IEF0dGVtcHQgdG8gYnVpbGQgY29kZWMgZGF0YSBmcm9tIGF0b20gKi8KLSAgICAgICAgICBnaW50IGxlbiA9IFFUX1VJTlQzMiAoc3RzZF9kYXRhKTsKLQotICAgICAgICAgIGlmIChsZW4gPj0gNTApIHsKLSAgICAgICAgICAgIGd1aW50MTYgc291bmRfdmVyc2lvbiA9IFFUX1VJTlQxNiAoc3RzZF9kYXRhICsgMzIpOwotCi0gICAgICAgICAgICBpZiAoc291bmRfdmVyc2lvbiA9PSAxKSB7Ci0gICAgICAgICAgICAgIGd1aW50MTYgY2hhbm5lbHMgPSBRVF9VSU5UMTYgKHN0c2RfZGF0YSArIDQwKTsKLSAgICAgICAgICAgICAgZ3VpbnQzMiB0aW1lX3NjYWxlID0gUVRfVUlOVDMyIChzdHNkX2RhdGEgKyA0Nik7Ci0gICAgICAgICAgICAgIGd1aW50OCBjb2RlY19kYXRhWzJdOwotICAgICAgICAgICAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICAgICAgICAgICAgZ2ludCBwcm9maWxlID0gMjsgLyogRklYTUU6IENhbiB0aGlzIGJlIGRldGVybWluZWQgc29tZWhvdz8gVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGFueXRoaW5nIGluIG1wNGEgYXRvbSB0aGF0IHNwZWNpZmlzIGNvbXByZXNzaW9uICovCi0KLSAgICAgICAgICAgICAgZ2ludCBzYW1wbGVfcmF0ZV9pbmRleCA9Ci0gICAgICAgICAgICAgICAgICBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9pbmRleF9mcm9tX3NhbXBsZV9yYXRlICh0aW1lX3NjYWxlKTsKLQotICAgICAgICAgICAgICAvKiBidWlsZCBBQUMgY29kZWMgZGF0YSAqLwotICAgICAgICAgICAgICBjb2RlY19kYXRhWzBdID0gcHJvZmlsZSA8PCAzOwotICAgICAgICAgICAgICBjb2RlY19kYXRhWzBdIHw9ICgoc2FtcGxlX3JhdGVfaW5kZXggPj4gMSkgJiAweDcpOwotICAgICAgICAgICAgICBjb2RlY19kYXRhWzFdID0gKHNhbXBsZV9yYXRlX2luZGV4ICYgMHgwMSkgPDwgNzsKLSAgICAgICAgICAgICAgY29kZWNfZGF0YVsxXSB8PSAoY2hhbm5lbHMgJiAweEYpIDw8IDM7Ci0KLSAgICAgICAgICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGNvZGVjX2RhdGEsIDIpOwotICAgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsCi0gICAgICAgICAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAgICJ1bmhhbmRsZWQgdHlwZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAidHlwZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSwgc3RyZWFtLT5jYXBzKTsKLQotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc3RybSkgewotICAgIGlmIChmb3VyY2MgPT0gRk9VUkNDX3J0c3ApIHsKLSAgICAgIHN0cmVhbS0+cmVkaXJlY3RfdXJpID0gcXRkZW11eF9nZXRfcnRzcF91cmlfZnJvbV9obmRsIChxdGRlbXV4LCBtaW5mKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAidW5oYW5kbGVkIHN0cmVhbSB0eXBlICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0gICAgICBnb3RvIHVua25vd25fc3RyZWFtOwotICAgIH0KLSAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc3VicCB8fCBzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3RleHQKLSAgICAgIHx8IHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc2J0bCB8fCBzdHJlYW0tPnN1YnR5cGUgPT0gRk9VUkNDX3N1YnQpIHsKLQotICAgIHN0cmVhbS0+c2FtcGxlZCA9IFRSVUU7Ci0gICAgc3RyZWFtLT5zcGFyc2UgPSBUUlVFOwotCi0gICAgc3RyZWFtLT5jYXBzID0KLSAgICAgICAgcXRkZW11eF9zdWJfY2FwcyAocXRkZW11eCwgc3RyZWFtLCBmb3VyY2MsIHN0c2RfZGF0YSwgJmNvZGVjKTsKLSAgICBpZiAoY29kZWMpIHsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHN0cmVhbS0+cGVuZGluZ190YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgICAgR1NUX1RBR19TVUJUSVRMRV9DT0RFQywgY29kZWMsIE5VTEwpOwotICAgICAgZ19mcmVlIChjb2RlYyk7Ci0gICAgICBjb2RlYyA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogaHVudCBmb3Igc29ydC1vZiBjb2RlYyBkYXRhICovCi0gICAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICAgIGNhc2UgRk9VUkNDX21wNHM6Ci0gICAgICB7Ci0gICAgICAgIEdOb2RlICptcDRzID0gTlVMTDsKLSAgICAgICAgR05vZGUgKmVzZHMgPSBOVUxMOwotCi0gICAgICAgIC8qIGxvb2sgZm9yIHBhbGV0dGUgaW4gYSBzdHNkLT5tcDRzLT5lc2RzIHN1Yi1hdG9tICovCi0gICAgICAgIG1wNHMgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHN0c2QsIEZPVVJDQ19tcDRzKTsKLSAgICAgICAgaWYgKG1wNHMpCi0gICAgICAgICAgZXNkcyA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobXA0cywgRk9VUkNDX2VzZHMpOwotICAgICAgICBpZiAoZXNkcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgLyogSW52YWxpZCBTVFNEICovCi0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJTa2lwcGluZyBpbnZhbGlkIHN0c2Q6IG5vIGVzZHMgY2hpbGQiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9xdGRlbXV4X2hhbmRsZV9lc2RzIChxdGRlbXV4LCBzdHJlYW0sIGVzZHMsIHN0cmVhbS0+cGVuZGluZ190YWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAidW5oYW5kbGVkIHR5cGUgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJ0eXBlICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCBzdHJlYW0tPmNhcHMpOwotICB9IGVsc2UgewotICAgIC8qIGV2ZXJ5dGhpbmcgaW4gMSBzYW1wbGUgKi8KLSAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotCi0gICAgc3RyZWFtLT5jYXBzID0KLSAgICAgICAgcXRkZW11eF9nZW5lcmljX2NhcHMgKHF0ZGVtdXgsIHN0cmVhbSwgZm91cmNjLCBzdHNkX2RhdGEsICZjb2RlYyk7Ci0KLSAgICBpZiAoc3RyZWFtLT5jYXBzID09IE5VTEwpCi0gICAgICBnb3RvIHVua25vd25fc3RyZWFtOwotCi0gICAgaWYgKGNvZGVjKSB7Ci0gICAgICBnc3RfdGFnX2xpc3RfYWRkIChzdHJlYW0tPnBlbmRpbmdfdGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgIEdTVF9UQUdfU1VCVElUTEVfQ09ERUMsIGNvZGVjLCBOVUxMKTsKLSAgICAgIGdfZnJlZSAoY29kZWMpOwotICAgICAgY29kZWMgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIC8qIHByb21vdGUgdG8gc2FtcGxlZCBmb3JtYXQgKi8KLSAgaWYgKHN0cmVhbS0+Zm91cmNjID09IEZPVVJDQ19zYW1yKSB7Ci0gICAgLyogZm9yY2UgbW9ubyA4MDAwIEh6IGZvciBBTVIgKi8KLSAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotICAgIHN0cmVhbS0+bl9jaGFubmVscyA9IDE7Ci0gICAgc3RyZWFtLT5yYXRlID0gODAwMDsKLSAgfSBlbHNlIGlmIChzdHJlYW0tPmZvdXJjYyA9PSBGT1VSQ0Nfc2F3YikgewotICAgIC8qIGZvcmNlIG1vbm8gMTYwMDAgSHogZm9yIEFNUi1XQiAqLwotICAgIHN0cmVhbS0+c2FtcGxlZCA9IFRSVUU7Ci0gICAgc3RyZWFtLT5uX2NoYW5uZWxzID0gMTsKLSAgICBzdHJlYW0tPnJhdGUgPSAxNjAwMDsKLSAgfSBlbHNlIGlmIChzdHJlYW0tPmZvdXJjYyA9PSBGT1VSQ0NfbXA0YSkgewotICAgIHN0cmVhbS0+c2FtcGxlZCA9IFRSVUU7Ci0gIH0KLQotICAvKiBjb2xsZWN0IHNhbXBsZSBpbmZvcm1hdGlvbiAqLwotICBpZiAoIXF0ZGVtdXhfc3RibF9pbml0IChxdGRlbXV4LCBzdHJlYW0sIHN0YmwpKQotICAgIGdvdG8gc2FtcGxlc19mYWlsZWQ7Ci0KLSAgaWYgKHF0ZGVtdXgtPmZyYWdtZW50ZWQpIHsKLSAgICBndWludDY0IG9mZnNldDsKLQotICAgIC8qIG5lZWQgYWxsIG1vb3Ygc2FtcGxlcyBhcyBiYXNpczsgcHJvYmFibHkgbm90IG1hbnkgaWYgYW55IGF0IGFsbCAqLwotICAgIC8qIHByZXZlbnQgbW9vZiBwYXJzaW5nIHRha2luZyBvZiBhdCB0aGlzIHRpbWUgKi8KLSAgICBvZmZzZXQgPSBxdGRlbXV4LT5tb29mX29mZnNldDsKLSAgICBxdGRlbXV4LT5tb29mX29mZnNldCA9IDA7Ci0gICAgaWYgKHN0cmVhbS0+bl9zYW1wbGVzICYmCi0gICAgICAgICFxdGRlbXV4X3BhcnNlX3NhbXBsZXMgKHF0ZGVtdXgsIHN0cmVhbSwgc3RyZWFtLT5uX3NhbXBsZXMgLSAxKSkgewotICAgICAgcXRkZW11eC0+bW9vZl9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICBnb3RvIHNhbXBsZXNfZmFpbGVkOwotICAgIH0KLSAgICBxdGRlbXV4LT5tb29mX29mZnNldCA9IDA7Ci0gICAgLyogbW92aWUgZHVyYXRpb24gbW9yZSByZWxpYWJsZSBpbiB0aGlzIGNhc2UgKGUuZy4gbWVoZCkgKi8KLSAgICBpZiAocXRkZW11eC0+c2VnbWVudC5kdXJhdGlvbiAmJgotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocXRkZW11eC0+c2VnbWVudC5kdXJhdGlvbikpCi0gICAgICBzdHJlYW0tPmR1cmF0aW9uID0KLSAgICAgICAgICBHU1RUSU1FX1RPX1FUU1RSRUFNVElNRSAoc3RyZWFtLCBxdGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uKTsKLSAgfQotCi0gIC8qIGNvbmZpZ3VyZSBzZWdtZW50cyAqLwotICBpZiAoIXF0ZGVtdXhfcGFyc2Vfc2VnbWVudHMgKHF0ZGVtdXgsIHN0cmVhbSwgdHJhaykpCi0gICAgZ290byBzZWdtZW50c19mYWlsZWQ7Ci0KLSAgLyogYWRkIHNvbWUgbGFuZ3VhZ2UgdGFnLCBpZiB1c2VmdWwgKi8KLSAgaWYgKHN0cmVhbS0+bGFuZ19pZFswXSAhPSAnXDAnICYmIHN0cmNtcCAoc3RyZWFtLT5sYW5nX2lkLCAidW5rIikgJiYKLSAgICAgIHN0cmNtcCAoc3RyZWFtLT5sYW5nX2lkLCAidW5kIikpIHsKLSAgICBjb25zdCBnY2hhciAqbGFuZ19jb2RlOwotCi0gICAgLyogY29udmVydCBJU08gNjM5LTIgY29kZSB0byBJU08gNjM5LTEgKi8KLSAgICBsYW5nX2NvZGUgPSBnc3RfdGFnX2dldF9sYW5ndWFnZV9jb2RlIChzdHJlYW0tPmxhbmdfaWQpOwotICAgIGdzdF90YWdfbGlzdF9hZGQgKHN0cmVhbS0+cGVuZGluZ190YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSwgKGxhbmdfY29kZSkgPyBsYW5nX2NvZGUgOiBzdHJlYW0tPmxhbmdfaWQsIE5VTEwpOwotICB9Ci0KLSAgLyogQ2hlY2sgZm9yIFVEVEEgdGFncyAqLwotICBpZiAoKHVkdGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHRyYWssIEZPVVJDQ191ZHRhKSkpIHsKLSAgICBxdGRlbXV4X3BhcnNlX3VkdGEgKHF0ZGVtdXgsIHN0cmVhbS0+cGVuZGluZ190YWdzLCB1ZHRhKTsKLSAgfQotCi0gIC8qIG5vdyB3ZSBhcmUgcmVhZHkgdG8gYWRkIHRoZSBzdHJlYW0gKi8KLSAgaWYgKHF0ZGVtdXgtPm5fc3RyZWFtcyA+PSBHU1RfUVRERU1VWF9NQVhfU1RSRUFNUykKLSAgICBnb3RvIHRvb19tYW55X3N0cmVhbXM7Ci0KLSAgaWYgKCFxdGRlbXV4LT5nb3RfbW9vdikgewotICAgIHF0ZGVtdXgtPnN0cmVhbXNbcXRkZW11eC0+bl9zdHJlYW1zXSA9IHN0cmVhbTsKLSAgICBxdGRlbXV4LT5uX3N0cmVhbXMrKzsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAibl9zdHJlYW1zIGlzIG5vdyAlZCIsIHF0ZGVtdXgtPm5fc3RyZWFtcyk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotLyogRVJST1JTICovCi1za2lwX3RyYWNrOgotICB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAic2tpcCBkaXNhYmxlZCB0cmFjayIpOwotICAgIGlmIChuZXdfc3RyZWFtKQotICAgICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZyZWUgKHF0ZGVtdXgsIHN0cmVhbSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLWNvcnJ1cHRfZmlsZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChxdGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAoXygiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIikpLCAoTlVMTCkpOwotICAgIGlmIChuZXdfc3RyZWFtKQotICAgICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZyZWUgKHF0ZGVtdXgsIHN0cmVhbSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1lcnJvcl9lbmNyeXB0ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocXRkZW11eCwgU1RSRUFNLCBERUNSWVBULCAoTlVMTCksIChOVUxMKSk7Ci0gICAgaWYgKG5ld19zdHJlYW0pCi0gICAgICBnc3RfcXRkZW11eF9zdHJlYW1fZnJlZSAocXRkZW11eCwgc3RyZWFtKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXNhbXBsZXNfZmFpbGVkOgotc2VnbWVudHNfZmFpbGVkOgotICB7Ci0gICAgLyogd2UgcG9zdGVkIGFuIGVycm9yIGFscmVhZHkgKi8KLSAgICAvKiBmcmVlIHN0Ymwgc3ViLWF0b21zICovCi0gICAgZ3N0X3F0ZGVtdXhfc3RibF9mcmVlIChzdHJlYW0pOwotICAgIGlmIChuZXdfc3RyZWFtKQotICAgICAgZ3N0X3F0ZGVtdXhfc3RyZWFtX2ZyZWUgKHF0ZGVtdXgsIHN0cmVhbSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1leGlzdGluZ19zdHJlYW06Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJzdHJlYW0gd2l0aCB0cmFjayBpZCAlaSBhbHJlYWR5IGV4aXN0cyIsCi0gICAgICAgIHRyYWNrX2lkKTsKLSAgICBpZiAobmV3X3N0cmVhbSkKLSAgICAgIGdzdF9xdGRlbXV4X3N0cmVhbV9mcmVlIChxdGRlbXV4LCBzdHJlYW0pOwotICAgIHJldHVybiBUUlVFOwotICB9Ci11bmtub3duX3N0cmVhbToKLSAgewotICAgIEdTVF9JTkZPX09CSkVDVCAocXRkZW11eCwgInVua25vd24gc3VidHlwZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChzdHJlYW0tPnN1YnR5cGUpKTsKLSAgICBpZiAobmV3X3N0cmVhbSkKLSAgICAgIGdzdF9xdGRlbXV4X3N0cmVhbV9mcmVlIChxdGRlbXV4LCBzdHJlYW0pOwotICAgIHJldHVybiBUUlVFOwotICB9Ci10b29fbWFueV9zdHJlYW1zOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocXRkZW11eCwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgKF8oIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiKSwKLSAgICAgICAgICAgIEdTVF9RVERFTVVYX01BWF9TVFJFQU1TKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotfQotCi0vKiBJZiB3ZSBjYW4gZXN0aW1hdGUgdGhlIG92ZXJhbGwgYml0cmF0ZSwgYW5kIGRvbid0IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBzdHJlYW0gYml0cmF0ZSBmb3IgZXhhY3RseSBvbmUgc3RyZWFtLCB0aGlzIGd1ZXNzZXMgdGhlIHN0cmVhbSBiaXRyYXRlIGFzCi0gKiB0aGUgb3ZlcmFsbCBiaXRyYXRlIG1pbnVzIHRoZSBzdW0gb2YgdGhlIGJpdHJhdGVzIG9mIGFsbCBvdGhlciBzdHJlYW1zLiBUaGlzCi0gKiBzaG91bGQgYmUgdXNlZnVsIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgd2UgaGF2ZSBvbmUgYXVkaW8gYW5kIG9uZSB2aWRlbwotICogc3RyZWFtIGFuZCBjYW4gZXN0aW1hdGUgdGhlIGJpdHJhdGUgb2Ygb25lLCBidXQgbm90IHRoZSBvdGhlci4gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcXRkZW11eF9ndWVzc19iaXRyYXRlIChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKLSAgZ2ludDY0IHNpemUsIHN5c19iaXRyYXRlLCBzdW1fYml0cmF0ZSA9IDA7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgZ2ludCBpOwotICBndWludCBiaXRyYXRlOwotCi0gIGlmIChxdGRlbXV4LT5mcmFnbWVudGVkKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiTG9va2luZyBmb3Igc3RyZWFtcyB3aXRoIHVua25vd24gYml0cmF0ZSIpOwotCi0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChxdGRlbXV4LT5zaW5rcGFkLCBHU1RfRk9STUFUX0JZVEVTLCAmc2l6ZSkKLSAgICAgIHx8IHNpemUgPD0gMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICJTaXplIGluIGJ5dGVzIG9mIHRoZSBzdHJlYW0gbm90IGtub3duIC0gYmFpbGluZyIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIFN1YnRyYWN0IHRoZSBoZWFkZXIgc2l6ZSAqLwotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiVG90YWwgc2l6ZSAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgaGVhZGVyIHNpemUgJXUiLAotICAgICAgc2l6ZSwgcXRkZW11eC0+aGVhZGVyX3NpemUpOwotCi0gIGlmIChzaXplIDwgcXRkZW11eC0+aGVhZGVyX3NpemUpCi0gICAgcmV0dXJuOwotCi0gIHNpemUgPSBzaXplIC0gcXRkZW11eC0+aGVhZGVyX3NpemU7Ci0KLSAgaWYgKCFnc3RfcXRkZW11eF9nZXRfZHVyYXRpb24gKHF0ZGVtdXgsICZkdXJhdGlvbikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiU3RyZWFtIGR1cmF0aW9uIG5vdCBrbm93biAtIGJhaWxpbmciKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICBzd2l0Y2ggKHF0ZGVtdXgtPnN0cmVhbXNbaV0tPnN1YnR5cGUpIHsKLSAgICAgIGNhc2UgRk9VUkNDX3NvdW46Ci0gICAgICBjYXNlIEZPVVJDQ192aWRlOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiY2hlY2tpbmcgYml0cmF0ZSBmb3IgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBxdGRlbXV4LT5zdHJlYW1zW2ldLT5jYXBzKTsKLSAgICAgICAgLyogcmV0cmlldmUgYml0cmF0ZSwgcHJlZmVyIGF2ZyB0aGVuIG1heCAqLwotICAgICAgICBiaXRyYXRlID0gMDsKLSAgICAgICAgaWYgKHF0ZGVtdXgtPnN0cmVhbXNbaV0tPnBlbmRpbmdfdGFncykgewotICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdWludCAocXRkZW11eC0+c3RyZWFtc1tpXS0+cGVuZGluZ190YWdzLAotICAgICAgICAgICAgICBHU1RfVEFHX01BWElNVU1fQklUUkFURSwgJmJpdHJhdGUpOwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJtYXgtYml0cmF0ZTogJXUiLCBiaXRyYXRlKTsKLSAgICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHF0ZGVtdXgtPnN0cmVhbXNbaV0tPnBlbmRpbmdfdGFncywKLSAgICAgICAgICAgICAgR1NUX1RBR19OT01JTkFMX0JJVFJBVEUsICZiaXRyYXRlKTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAibm9taW5hbC1iaXRyYXRlOiAldSIsIGJpdHJhdGUpOwotICAgICAgICAgIGdzdF90YWdfbGlzdF9nZXRfdWludCAocXRkZW11eC0+c3RyZWFtc1tpXS0+cGVuZGluZ190YWdzLAotICAgICAgICAgICAgICBHU1RfVEFHX0JJVFJBVEUsICZiaXRyYXRlKTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYml0cmF0ZTogJXUiLCBiaXRyYXRlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYml0cmF0ZSkKLSAgICAgICAgICBzdW1fYml0cmF0ZSArPSBiaXRyYXRlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBpZiAoc3RyZWFtKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgICAgICI+MSBzdHJlYW0gd2l0aCB1bmtub3duIGJpdHJhdGUgLSBiYWlsaW5nIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zW2ldOwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIEZvciBvdGhlciBzdWJ0eXBlcywgd2UgYXNzdW1lIG5vIHNpZ25pZmljYW50IGltcGFjdCBvbiBiaXRyYXRlICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghc3RyZWFtKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIkFsbCBzdHJlYW0gYml0cmF0ZXMgYXJlIGtub3duIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3lzX2JpdHJhdGUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNpemUsIEdTVF9TRUNPTkQgKiA4LCBkdXJhdGlvbik7Ci0KLSAgaWYgKHN5c19iaXRyYXRlIDwgc3VtX2JpdHJhdGUpIHsKLSAgICAvKiBUaGlzIGNhbiBoYXBwZW4sIHNpbmNlIHN1bV9iaXRyYXRlIG1pZ2h0IGJlIGRlcml2ZWQgZnJvbSBtYXhpbXVtCi0gICAgICogYml0cmF0ZXMgYW5kIG5vdCBhdmVyYWdlIGJpdHJhdGVzICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgIlN5c3RlbSBiaXRyYXRlIGxlc3MgdGhhbiBzdW0gYml0cmF0ZSAtIGJhaWxpbmciKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBiaXRyYXRlID0gc3lzX2JpdHJhdGUgLSBzdW1fYml0cmF0ZTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIlN5c3RlbSBiaXRyYXRlID0gJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAiLCBTdHJlYW0gYml0cmF0ZSA9ICV1Iiwgc3lzX2JpdHJhdGUsIGJpdHJhdGUpOwotCi0gIGlmICghc3RyZWFtLT5wZW5kaW5nX3RhZ3MpCi0gICAgc3RyZWFtLT5wZW5kaW5nX3RhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGdzdF90YWdfbGlzdF9hZGQgKHN0cmVhbS0+cGVuZGluZ190YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX0JJVFJBVEUsIGJpdHJhdGUsIE5VTEwpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotcXRkZW11eF9wcmVwYXJlX3N0cmVhbXMgKEdzdFFURGVtdXggKiBxdGRlbXV4KQotewotICBnaW50IGk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInByZXBhcmUgc3RyZWFtcyIpOwotCi0gIGZvciAoaSA9IDA7IHJldCA9PSBHU1RfRkxPV19PSyAmJiBpIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zW2ldOwotICAgIGd1aW50MzIgc2FtcGxlX251bSA9IDA7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic3RyZWFtICVkLCBpZCAlZCwgZm91cmNjICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICBpLCBzdHJlYW0tPnRyYWNrX2lkLCBHU1RfRk9VUkNDX0FSR1MgKHN0cmVhbS0+Zm91cmNjKSk7Ci0KLSAgICBpZiAocXRkZW11eC0+ZnJhZ21lbnRlZCkgewotICAgICAgLyogbmVlZCBhbGwgbW9vdiBzYW1wbGVzIGZpcnN0ICovCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHF0ZGVtdXgpOwotICAgICAgd2hpbGUgKHN0cmVhbS0+bl9zYW1wbGVzID09IDApCi0gICAgICAgIGlmICgocmV0ID0gcXRkZW11eF9hZGRfZnJhZ21lbnRlZF9zYW1wbGVzIChxdGRlbXV4KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocXRkZW11eCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGRpc2NhcmQgYW55IHN0cmF5IG1vb2YgKi8KLSAgICAgIHF0ZGVtdXgtPm1vb2Zfb2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICAvKiBwcmVwYXJlIGJyYWtpbmcgKi8KLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX0VSUk9SKQotICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgICAvKiBpbiBwdWxsIG1vZGUsIHdlIHNob3VsZCBoYXZlIHBhcnNlZCBzb21lIHNhbXBsZSBpbmZvIGJ5IG5vdzsKLSAgICAgKiBhbmQgcXVpdGUgc29tZSBjb2RlIHdpbGwgbm90IGhhbmRsZSBubyBzYW1wbGVzLgotICAgICAqIGluIHB1c2ggbW9kZSwgd2UnbGwganVzdCBoYXZlIHRvIGRlYWwgd2l0aCBpdCAqLwotICAgIGlmIChHX1VOTElLRUxZIChxdGRlbXV4LT5wdWxsYmFzZWQgJiYgIXN0cmVhbS0+bl9zYW1wbGVzKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIm5vIHNhbXBsZXMgZm9yIHN0cmVhbTsgZGlzY2FyZGluZyIpOwotICAgICAgZ3N0X3F0ZGVtdXhfcmVtb3ZlX3N0cmVhbSAocXRkZW11eCwgaSk7Ci0gICAgICBpLS07Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBwYXJzZSB0aGUgaW5pdGlhbCBzYW1wbGUgZm9yIHVzZSBpbiBzZXR0aW5nIHRoZSBmcmFtZSByYXRlIGNhcCAqLwotICAgIHdoaWxlIChzYW1wbGVfbnVtID09IDAgJiYgc2FtcGxlX251bSA8IHN0cmVhbS0+bl9zYW1wbGVzKSB7Ci0gICAgICBpZiAoIXF0ZGVtdXhfcGFyc2Vfc2FtcGxlcyAocXRkZW11eCwgc3RyZWFtLCBzYW1wbGVfbnVtKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICArK3NhbXBsZV9udW07Ci0gICAgfQotICAgIGlmIChzdHJlYW0tPm5fc2FtcGxlcyA+IDAgJiYgc3RyZWFtLT5zdGJsX2luZGV4ID49IDApIHsKLSAgICAgIHN0cmVhbS0+Zmlyc3RfZHVyYXRpb24gPSBzdHJlYW0tPnNhbXBsZXNbMF0uZHVyYXRpb247Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgInN0cmVhbSAlZCBmaXJzdCBkdXJhdGlvbiAldSIsCi0gICAgICAgICAgc3RyZWFtLT50cmFja19pZCwgc3RyZWFtLT5maXJzdF9kdXJhdGlvbik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXF0ZGVtdXhfZXhwb3NlX3N0cmVhbXMgKEdzdFFURGVtdXggKiBxdGRlbXV4KQotewotICBnaW50IGk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdTTGlzdCAqb2xkcGFkcyA9IE5VTEw7Ci0gIEdTTGlzdCAqaXRlcjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZXhwb3Npbmcgc3RyZWFtcyIpOwotCi0gIGZvciAoaSA9IDA7IHJldCA9PSBHU1RfRkxPV19PSyAmJiBpIDwgcXRkZW11eC0+bl9zdHJlYW1zOyBpKyspIHsKLSAgICBRdERlbXV4U3RyZWFtICpzdHJlYW0gPSBxdGRlbXV4LT5zdHJlYW1zW2ldOwotICAgIEdzdFBhZCAqb2xkcGFkID0gc3RyZWFtLT5wYWQ7Ci0gICAgR3N0VGFnTGlzdCAqbGlzdDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzdHJlYW0gJWQsIGlkICVkLCBmb3VyY2MgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgIGksIHN0cmVhbS0+dHJhY2tfaWQsIEdTVF9GT1VSQ0NfQVJHUyAoc3RyZWFtLT5mb3VyY2MpKTsKLQotICAgIGlmICgoc3RyZWFtLT5zdWJ0eXBlID09IEZPVVJDQ190ZXh0IHx8IHN0cmVhbS0+c3VidHlwZSA9PSBGT1VSQ0Nfc2J0bCkgJiYKLSAgICAgICAgc3RyZWFtLT50cmFja19pZCA9PSBxdGRlbXV4LT5jaGFwdGVyc190cmFja19pZCkgewotICAgICAgLyogVE9ETyAtIHBhcnNlIGNoYXB0ZXJzIHRyYWNrIGFuZCBleHBvc2UgaXQgYXMgR3N0VG9jOyBGb3Igbm93IGp1c3QgaWdub3JlIGl0Ci0gICAgICAgICBzbyB0aGF0IGl0IGRvZXNuJ3QgbG9vayBsaWtlIGEgc3VidGl0bGUgdHJhY2sgKi8KLSAgICAgIGdzdF9xdGRlbXV4X3JlbW92ZV9zdHJlYW0gKHF0ZGVtdXgsIGkpOwotICAgICAgaS0tOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogbm93IHdlIGhhdmUgYWxsIGluZm8gYW5kIGNhbiBleHBvc2UgKi8KLSAgICBsaXN0ID0gc3RyZWFtLT5wZW5kaW5nX3RhZ3M7Ci0gICAgc3RyZWFtLT5wZW5kaW5nX3RhZ3MgPSBOVUxMOwotICAgIGlmIChvbGRwYWQpCi0gICAgICBvbGRwYWRzID0gZ19zbGlzdF9wcmVwZW5kIChvbGRwYWRzLCBvbGRwYWQpOwotICAgIGlmICghZ3N0X3F0ZGVtdXhfYWRkX3N0cmVhbSAocXRkZW11eCwgc3RyZWFtLCBsaXN0KSkKLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGdzdF9xdGRlbXV4X2d1ZXNzX2JpdHJhdGUgKHF0ZGVtdXgpOwotCi0gIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAocXRkZW11eCkpOwotCi0gIGZvciAoaXRlciA9IG9sZHBhZHM7IGl0ZXI7IGl0ZXIgPSBnX3NsaXN0X25leHQgKGl0ZXIpKSB7Ci0gICAgR3N0UGFkICpvbGRwYWQgPSBpdGVyLT5kYXRhOwotICAgIEdzdEV2ZW50ICpldmVudDsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gICAgaWYgKHF0ZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBxdGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKG9sZHBhZCwgZXZlbnQpOwotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAob2xkcGFkLCBGQUxTRSk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlQgKHF0ZGVtdXgpLCBvbGRwYWQpOwotICAgIGdzdF9mbG93X2NvbWJpbmVyX3JlbW92ZV9wYWQgKHF0ZGVtdXgtPmZsb3djb21iaW5lciwgb2xkcGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChvbGRwYWQpOwotICB9Ci0KLSAgLyogY2hlY2sgaWYgd2Ugc2hvdWxkIHBvc3QgYSByZWRpcmVjdCBpbiBjYXNlIHRoZXJlIGlzIGEgc2luZ2xlIHRyYWsKLSAgICogYW5kIGl0IGlzIGEgcmVkaXJlY3RpbmcgdHJhayAqLwotICBpZiAocXRkZW11eC0+bl9zdHJlYW1zID09IDEgJiYgcXRkZW11eC0+c3RyZWFtc1swXS0+cmVkaXJlY3RfdXJpICE9IE5VTEwpIHsKLSAgICBHc3RNZXNzYWdlICptOwotCi0gICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiSXNzdWluZyBhIHJlZGlyZWN0IGR1ZSB0byBhIHNpbmdsZSB0cmFjayB3aXRoICIKLSAgICAgICAgImFuIGV4dGVybmFsIGNvbnRlbnQiKTsKLSAgICBtID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1RfQ0FTVCAocXRkZW11eCksCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgicmVkaXJlY3QiLAotICAgICAgICAgICAgIm5ldy1sb2NhdGlvbiIsIEdfVFlQRV9TVFJJTkcsIHF0ZGVtdXgtPnN0cmVhbXNbMF0tPnJlZGlyZWN0X3VyaSwKLSAgICAgICAgICAgIE5VTEwpKTsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHF0ZGVtdXgpLCBtKTsKLSAgICBxdGRlbXV4LT5wb3N0ZWRfcmVkaXJlY3QgPSBUUlVFOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IHF0ZGVtdXgtPm5fc3RyZWFtczsgaSsrKSB7Ci0gICAgUXREZW11eFN0cmVhbSAqc3RyZWFtID0gcXRkZW11eC0+c3RyZWFtc1tpXTsKLQotICAgIHF0ZGVtdXhfZG9fYWxsb2NhdGlvbiAocXRkZW11eCwgc3RyZWFtKTsKLSAgfQotCi0gIHF0ZGVtdXgtPmV4cG9zZWQgPSBUUlVFOwotICByZXR1cm4gcmV0OwotfQotCi0vKiBjaGVjayBpZiBtYWpvciBvciBjb21wYXRpYmxlIGJyYW5kIGlzIDNHUCAqLwotc3RhdGljIGlubGluZSBnYm9vbGVhbgotcXRkZW11eF9pc19icmFuZF8zZ3AgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBnYm9vbGVhbiBtYWpvcikKLXsKLSAgaWYgKG1ham9yKSB7Ci0gICAgcmV0dXJuICgocXRkZW11eC0+bWFqb3JfYnJhbmQgJiBHU1RfTUFLRV9GT1VSQ0MgKDI1NSwgMjU1LCAwLCAwKSkgPT0KLSAgICAgICAgRk9VUkNDXzNnX18pOwotICB9IGVsc2UgaWYgKHF0ZGVtdXgtPmNvbXBfYnJhbmRzICE9IE5VTEwpIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBndWludDggKmRhdGE7Ci0gICAgZ3NpemUgc2l6ZTsKLSAgICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChxdGRlbXV4LT5jb21wX2JyYW5kcywgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgc2l6ZSA9IG1hcC5zaXplOwotICAgIHdoaWxlIChzaXplID49IDQpIHsKLSAgICAgIHJlcyA9IHJlcyB8fCAoKFFUX0ZPVVJDQyAoZGF0YSkgJiBHU1RfTUFLRV9GT1VSQ0MgKDI1NSwgMjU1LCAwLCAwKSkgPT0KLSAgICAgICAgICBGT1VSQ0NfM2dfXyk7Ci0gICAgICBkYXRhICs9IDQ7Ci0gICAgICBzaXplIC09IDQ7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKHF0ZGVtdXgtPmNvbXBfYnJhbmRzLCAmbWFwKTsKLSAgICByZXR1cm4gcmVzOwotICB9IGVsc2UgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBjaGVjayBpZiB0YWcgaXMgYSBzcGVjJ2VkIDNHUCB0YWcga2V5d29yZCBzdG9yaW5nIGEgc3RyaW5nICovCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1xdGRlbXV4X2lzX3N0cmluZ190YWdfM2dwIChHc3RRVERlbXV4ICogcXRkZW11eCwgZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIHJldHVybiBmb3VyY2MgPT0gRk9VUkNDX2NwcnQgfHwgZm91cmNjID09IEZPVVJDQ19nbnJlIHx8IGZvdXJjYyA9PSBGT1VSQ0NfdGl0bAotICAgICAgfHwgZm91cmNjID09IEZPVVJDQ19kc2NwIHx8IGZvdXJjYyA9PSBGT1VSQ0NfcGVyZiB8fCBmb3VyY2MgPT0gRk9VUkNDX2F1dGgKLSAgICAgIHx8IGZvdXJjYyA9PSBGT1VSQ0NfYWxibTsKLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfdGFnX2FkZF9sb2NhdGlvbiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LAotICAgIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqZHVtbXksIEdOb2RlICogbm9kZSkKLXsKLSAgY29uc3QgZ2NoYXIgKmVudl92YXJzW10gPSB7ICJHU1RfUVRfVEFHX0VOQ09ESU5HIiwgIkdTVF9UQUdfRU5DT0RJTkciLCBOVUxMIH07Ci0gIGludCBvZmZzZXQ7Ci0gIGNoYXIgKm5hbWU7Ci0gIGdjaGFyICpkYXRhOwotICBnZG91YmxlIGxvbmdpdHVkZSwgbGF0aXR1ZGUsIGFsdGl0dWRlOwotICBnaW50IGxlbjsKLQotICBsZW4gPSBRVF9VSU5UMzIgKG5vZGUtPmRhdGEpOwotICBpZiAobGVuIDw9IDE0KQotICAgIGdvdG8gc2hvcnRfcmVhZDsKLQotICBkYXRhID0gbm9kZS0+ZGF0YTsKLSAgb2Zmc2V0ID0gMTQ7Ci0KLSAgLyogVE9ETzogbGFuZ3VhZ2UgY29kZSBza2lwcGVkICovCi0KLSAgbmFtZSA9IGdzdF90YWdfZnJlZWZvcm1fc3RyaW5nX3RvX3V0ZjggKGRhdGEgKyBvZmZzZXQsIC0xLCBlbnZfdmFycyk7Ci0KLSAgaWYgKCFuYW1lKSB7Ci0gICAgLyogZG8gbm90IGFsYXJtIGluIHRyaXZpYWwgY2FzZSwgYnV0IGJhaWwgb3V0IG90aGVyd2lzZSAqLwotICAgIGlmICgqKGRhdGEgKyBvZmZzZXQpICE9IDApIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gY29udmVydCAlcyB0YWcgdG8gVVRGLTgsICIKLSAgICAgICAgICAiZ2l2aW5nIHVwIiwgdGFnKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICBHU1RfVEFHX0dFT19MT0NBVElPTl9OQU1FLCBuYW1lLCBOVUxMKTsKLSAgICBvZmZzZXQgKz0gc3RybGVuIChuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICB9Ci0KLSAgaWYgKGxlbiA8IG9mZnNldCArIDIgKyA0ICsgNCArIDQpCi0gICAgZ290byBzaG9ydF9yZWFkOwotCi0gIC8qICsxICsxID0gc2tpcCBudWxsLXRlcm1pbmF0b3IgYW5kIGxvY2F0aW9uIHJvbGUgYnl0ZSAqLwotICBvZmZzZXQgKz0gMSArIDE7Ci0gIC8qIHRhYmxlIGluIHNwZWMgc2F5cyB1bnNpZ25lZCwgc2VtYW50aWNzIHNheSBuZWdhdGl2ZSBoYXMgbWVhbmluZyAuLi4gKi8KLSAgbG9uZ2l0dWRlID0gUVRfU0ZQMzIgKGRhdGEgKyBvZmZzZXQpOwotCi0gIG9mZnNldCArPSA0OwotICBsYXRpdHVkZSA9IFFUX1NGUDMyIChkYXRhICsgb2Zmc2V0KTsKLQotICBvZmZzZXQgKz0gNDsKLSAgYWx0aXR1ZGUgPSBRVF9TRlAzMiAoZGF0YSArIG9mZnNldCk7Ci0KLSAgLyogb25lIGludmFsaWQgbWVhbnMgYWxsIGFyZSBpbnZhbGlkICovCi0gIGlmIChsb25naXR1ZGUgPj0gLTE4MC4wICYmIGxvbmdpdHVkZSA8PSAxODAuMCAmJgotICAgICAgbGF0aXR1ZGUgPj0gLTkwLjAgJiYgbGF0aXR1ZGUgPD0gOTAuMCkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgR1NUX1RBR19HRU9fTE9DQVRJT05fTEFUSVRVREUsIGxhdGl0dWRlLAotICAgICAgICBHU1RfVEFHX0dFT19MT0NBVElPTl9MT05HSVRVREUsIGxvbmdpdHVkZSwKLSAgICAgICAgR1NUX1RBR19HRU9fTE9DQVRJT05fRUxFVkFUSU9OLCBhbHRpdHVkZSwgTlVMTCk7Ci0gIH0KLQotICAvKiBUT0RPOiBubyBHU1RfVEFHXywgc28gYXN0cm9ub21pY2FsIGJvZHkgYW5kIGFkZGl0aW9uYWwgbm90ZXMgc2tpcHBlZCAqLwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLXNob3J0X3JlYWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAic2hvcnQgcmVhZCBwYXJzaW5nIDNHUCBsb2NhdGlvbiIpOwotICAgIHJldHVybjsKLSAgfQotfQotCi0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3RhZ19hZGRfeWVhciAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LAotICAgIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqZHVtbXksIEdOb2RlICogbm9kZSkKLXsKLSAgZ3VpbnQxNiB5OwotICBHRGF0ZSAqZGF0ZTsKLSAgZ2ludCBsZW47Ci0KLSAgbGVuID0gUVRfVUlOVDMyIChub2RlLT5kYXRhKTsKLSAgaWYgKGxlbiA8IDE0KQotICAgIHJldHVybjsKLQotICB5ID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIG5vZGUtPmRhdGEgKyAxMik7Ci0gIGlmICh5ID09IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAieWVhcjogJXUgaXMgbm90IGEgdmFsaWQgeWVhciIsIHkpOwotICAgIHJldHVybjsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAieWVhcjogJXUiLCB5KTsKLQotICBkYXRlID0gZ19kYXRlX25ld19kbXkgKDEsIDEsIHkpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIHRhZywgZGF0ZSwgTlVMTCk7Ci0gIGdfZGF0ZV9mcmVlIChkYXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfdGFnX2FkZF9jbGFzc2lmaWNhdGlvbiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LAotICAgIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqZHVtbXksIEdOb2RlICogbm9kZSkKLXsKLSAgaW50IG9mZnNldDsKLSAgY2hhciAqdGFnX3N0ciA9IE5VTEw7Ci0gIGd1aW50OCAqZW50aXR5OwotICBndWludDE2IHRhYmxlOwotICBnaW50IGxlbjsKLQotICBsZW4gPSBRVF9VSU5UMzIgKG5vZGUtPmRhdGEpOwotICBpZiAobGVuIDw9IDIwKQotICAgIGdvdG8gc2hvcnRfcmVhZDsKLQotICBvZmZzZXQgPSAxMjsKLSAgZW50aXR5ID0gKGd1aW50OCAqKSBub2RlLT5kYXRhICsgb2Zmc2V0OwotICBpZiAoZW50aXR5WzBdID09IDAgfHwgZW50aXR5WzFdID09IDAgfHwgZW50aXR5WzJdID09IDAgfHwgZW50aXR5WzNdID09IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAiY2xhc3NpZmljYXRpb24gaW5mbzogJWMlYyVjJWMgaW52YWxpZCBjbGFzc2lmaWNhdGlvbiBlbnRpdHkiLAotICAgICAgICBlbnRpdHlbMF0sIGVudGl0eVsxXSwgZW50aXR5WzJdLCBlbnRpdHlbM10pOwotICAgIHJldHVybjsKLSAgfQotCi0gIG9mZnNldCArPSA0OwotICB0YWJsZSA9IFFUX1VJTlQxNiAoKGd1aW50OCAqKSBub2RlLT5kYXRhICsgb2Zmc2V0KTsKLQotICAvKiBMYW5ndWFnZSBjb2RlIHNraXBwZWQgKi8KLQotICBvZmZzZXQgKz0gNDsKLQotICAvKiBUYWcgZm9ybWF0OiAiWFhYWDovL1lbWVlZWV0vY2xhc3NpZmljYXRpb24gaW5mbyBzdHJpbmciCi0gICAqIFhYWFg6IGNsYXNzaWZpY2F0aW9uIGVudGl0eSwgZml4ZWQgbGVuZ3RoIDQgY2hhcnMuCi0gICAqIFlbWVlZWV06IGNsYXNzaWZpY2F0aW9uIHRhYmxlLCBtYXggNSBjaGFycy4KLSAgICovCi0gIHRhZ19zdHIgPSBnX3N0cmR1cF9wcmludGYgKCItLS0tOi8vJXUvJXMiLAotICAgICAgdGFibGUsIChjaGFyICopIG5vZGUtPmRhdGEgKyBvZmZzZXQpOwotCi0gIC8qIG1lbWNweSBUbyBiZSBzdXJlIHdlJ3JlIHByZXNlcnZpbmcgYnl0ZSBvcmRlciAqLwotICBtZW1jcHkgKHRhZ19zdHIsIGVudGl0eSwgNCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJjbGFzc2lmaWNhdGlvbiBpbmZvOiAlcyIsIHRhZ19zdHIpOwotCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCB0YWcsIHRhZ19zdHIsIE5VTEwpOwotCi0gIGdfZnJlZSAodGFnX3N0cik7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotc2hvcnRfcmVhZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzaG9ydCByZWFkIHBhcnNpbmcgM0dQIGNsYXNzaWZpY2F0aW9uIik7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF90YWdfYWRkX3N0cl9mdWxsIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0VGFnTGlzdCAqIHRhZ2xpc3QsCi0gICAgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICpkdW1teSwgR05vZGUgKiBub2RlKQotewotICBjb25zdCBnY2hhciAqZW52X3ZhcnNbXSA9IHsgIkdTVF9RVF9UQUdfRU5DT0RJTkciLCAiR1NUX1RBR19FTkNPRElORyIsIE5VTEwgfTsKLSAgR05vZGUgKmRhdGE7Ci0gIGNoYXIgKnM7Ci0gIGludCBsZW47Ci0gIGd1aW50MzIgdHlwZTsKLSAgaW50IG9mZnNldDsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgY29uc3QgZ2NoYXIgKmNoYXJzZXQgPSBOVUxMOwotCi0gIGRhdGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG5vZGUsIEZPVVJDQ19kYXRhKTsKLSAgaWYgKGRhdGEpIHsKLSAgICBsZW4gPSBRVF9VSU5UMzIgKGRhdGEtPmRhdGEpOwotICAgIHR5cGUgPSBRVF9VSU5UMzIgKChndWludDggKikgZGF0YS0+ZGF0YSArIDgpOwotICAgIGlmICh0eXBlID09IDB4MDAwMDAwMDEgJiYgbGVuID4gMTYpIHsKLSAgICAgIHMgPSBnc3RfdGFnX2ZyZWVmb3JtX3N0cmluZ190b191dGY4ICgoY2hhciAqKSBkYXRhLT5kYXRhICsgMTYsIGxlbiAtIDE2LAotICAgICAgICAgIGVudl92YXJzKTsKLSAgICAgIGlmIChzKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJhZGRpbmcgdGFnICVzIiwgR1NUX1NUUl9OVUxMIChzKSk7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgdGFnLCBzLCBOVUxMKTsKLSAgICAgICAgZ19mcmVlIChzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gY29udmVydCAlcyB0YWcgdG8gVVRGLTgiLCB0YWcpOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBsZW4gPSBRVF9VSU5UMzIgKG5vZGUtPmRhdGEpOwotICAgIHR5cGUgPSBRVF9VSU5UMzIgKChndWludDggKikgbm9kZS0+ZGF0YSArIDQpOwotICAgIGlmICgodHlwZSA+PiAyNCkgPT0gMHhhOSAmJiBsZW4gPiA4ICsgNCkgewotICAgICAgZ2ludCBzdHJfbGVuOwotICAgICAgZ2ludCBsYW5nX2NvZGU7Ci0KLSAgICAgIC8qIFR5cGUgc3RhcnRzIHdpdGggdGhlIChDKSBzeW1ib2wsIHNvIHRoZSBuZXh0IGRhdGEgaXMgYSBsaXN0Ci0gICAgICAgKiBvZiAoc3RyaW5nIHNpemUoMTYpLCBsYW5ndWFnZSBjb2RlKDE2KSwgc3RyaW5nKSAqLwotCi0gICAgICBzdHJfbGVuID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIG5vZGUtPmRhdGEgKyA4KTsKLSAgICAgIGxhbmdfY29kZSA9IFFUX1VJTlQxNiAoKGd1aW50OCAqKSBub2RlLT5kYXRhICsgMTApOwotCi0gICAgICAvKiB0aGUgc3RyaW5nICsgZm91cmNjICsgc2l6ZSArIDIgMTZiaXQgZmllbGRzLAotICAgICAgICogbWVhbnMgdGhhdCB0aGVyZSBhcmUgbW9yZSB0YWdzIGluIHRoaXMgYXRvbSAqLwotICAgICAgaWYgKGxlbiA+IHN0cl9sZW4gKyA4ICsgNCkgewotICAgICAgICAvKiBUT0RPIGhvdyB0byByZXByZXNlbnQgdGhlIHNhbWUgdGFnIGluIGRpZmZlcmVudCBsYW5ndWFnZXM/ICovCi0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIklnbm9yaW5nIG1ldGFkYXRhIGVudHJ5IHdpdGggbXVsdGlwbGUgIgotICAgICAgICAgICAgInRleHQgYWx0ZXJuYXRpdmVzLCByZWFkaW5nIG9ubHkgZmlyc3Qgb25lIik7Ci0gICAgICB9Ci0KLSAgICAgIG9mZnNldCA9IDEyOwotICAgICAgbGVuID0gTUlOIChsZW4sIHN0cl9sZW4gKyA4ICsgNCk7IC8qIHJlbW92ZSB0cmFpbGluZyBzdHJpbmdzIHRoYXQgd2UgZG9uJ3QgdXNlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZm91bmQgaW50ZXJuYXRpb25hbCB0ZXh0IHRhZyIpOwotCi0gICAgICBpZiAobGFuZ19jb2RlIDwgMHg4MDApIHsgIC8qIE1BQyBlbmNvZGVkIHN0cmluZyAqLwotICAgICAgICBjaGFyc2V0ID0gIm1hYyI7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChsZW4gPiAxNCAmJiBxdGRlbXV4X2lzX3N0cmluZ190YWdfM2dwIChxdGRlbXV4LAotICAgICAgICAgICAgUVRfRk9VUkNDICgoZ3VpbnQ4ICopIG5vZGUtPmRhdGEgKyA0KSkpIHsKLSAgICAgIGd1aW50MzIgdHlwZSA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBub2RlLT5kYXRhICsgOCk7Ci0KLSAgICAgIC8qIHdlIGdvIGZvciAzR1Agc3R5bGUgZW5jb2RpbmcgaWYgbWFqb3IgYnJhbmRzIGNsYWltcyBzbywKLSAgICAgICAqIG9yIGlmIG5vIGhvcGUgZm9yIGRhdGEgYmUgb2sgVVRGLTgsIGFuZCBjb21wYXRpYmxlIDNHUCBicmFuZCBwcmVzZW50ICovCi0gICAgICBpZiAocXRkZW11eF9pc19icmFuZF8zZ3AgKHF0ZGVtdXgsIFRSVUUpIHx8Ci0gICAgICAgICAgKHF0ZGVtdXhfaXNfYnJhbmRfM2dwIChxdGRlbXV4LCBGQUxTRSkgJiYKLSAgICAgICAgICAgICAgKCh0eXBlICYgMHgwMEZGRkZGRikgPT0gMHgwKSAmJiAodHlwZSA+PiAyNCA8PSAweEYpKSkgewotICAgICAgICBvZmZzZXQgPSAxNDsKLSAgICAgICAgLyogMTYtYml0IExhbmd1YWdlIGNvZGUgaXMgaWdub3JlZCBoZXJlIGFzIHdlbGwgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImZvdW5kIDNncHAgdGV4dCB0YWciKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdvdG8gbm9ybWFsOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgbm9ybWFsOgotICAgICAgb2Zmc2V0ID0gODsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCBub3JtYWwgdGV4dCB0YWciKTsKLSAgICAgIHJldCA9IEZBTFNFOyAgICAgICAgICAgICAgLyogbWF5IGhhdmUgdG8gZmFsbGJhY2sgKi8KLSAgICB9Ci0gICAgaWYgKGNoYXJzZXQpIHsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgICAgcyA9IGdfY29udmVydCAoKGdjaGFyICopIG5vZGUtPmRhdGEgKyBvZmZzZXQsIGxlbiAtIG9mZnNldCwgInV0ZjgiLAotICAgICAgICAgIGNoYXJzZXQsIE5VTEwsIE5VTEwsICZlcnIpOwotICAgICAgaWYgKGVycikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiRmFpbGVkIHRvIGNvbnZlcnQgc3RyaW5nIGZyb20gY2hhcnNldCAlczoiCi0gICAgICAgICAgICAiICVzKCVkKTogJXMiLCBjaGFyc2V0LCBnX3F1YXJrX3RvX3N0cmluZyAoZXJyLT5kb21haW4pLCBlcnItPmNvZGUsCi0gICAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHMgPSBnc3RfdGFnX2ZyZWVmb3JtX3N0cmluZ190b191dGY4ICgoY2hhciAqKSBub2RlLT5kYXRhICsgb2Zmc2V0LAotICAgICAgICAgIGxlbiAtIG9mZnNldCwgZW52X3ZhcnMpOwotICAgIH0KLSAgICBpZiAocykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyB0YWcgJXMiLCBHU1RfU1RSX05VTEwgKHMpKTsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgdGFnLCBzLCBOVUxMKTsKLSAgICAgIGdfZnJlZSAocyk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZmFpbGVkIHRvIGNvbnZlcnQgJXMgdGFnIHRvIFVURi04IiwgdGFnKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfdGFnX2FkZF9zdHIgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmR1bW15LCBHTm9kZSAqIG5vZGUpCi17Ci0gIHF0ZGVtdXhfdGFnX2FkZF9zdHJfZnVsbCAocXRkZW11eCwgdGFnbGlzdCwgdGFnLCBkdW1teSwgbm9kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3RhZ19hZGRfa2V5d29yZHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmR1bW15LCBHTm9kZSAqIG5vZGUpCi17Ci0gIGNvbnN0IGdjaGFyICplbnZfdmFyc1tdID0geyAiR1NUX1FUX1RBR19FTkNPRElORyIsICJHU1RfVEFHX0VOQ09ESU5HIiwgTlVMTCB9OwotICBndWludDggKmRhdGE7Ci0gIGNoYXIgKnMsICp0LCAqayA9IE5VTEw7Ci0gIGludCBsZW47Ci0gIGludCBvZmZzZXQ7Ci0gIGludCBjb3VudDsKLQotICAvKiBmaXJzdCB0cnkgbm9ybWFsIHN0cmluZyB0YWcgaWYgbWFqb3IgYnJhbmQgbm90IDNHUCAqLwotICBpZiAoIXF0ZGVtdXhfaXNfYnJhbmRfM2dwIChxdGRlbXV4LCBUUlVFKSkgewotICAgIGlmICghcXRkZW11eF90YWdfYWRkX3N0cl9mdWxsIChxdGRlbXV4LCB0YWdsaXN0LCB0YWcsIGR1bW15LCBub2RlKSkgewotICAgICAgLyogaG0sIHRoYXQgZGlkIG5vdCB3b3JrLCBtYXliZSAzZ3BwIHN0b3JhZ2UgaW4gbm9uLTNncHAgbWFqb3IgYnJhbmQ7Ci0gICAgICAgKiBsZXQncyB0cnkgaXQgM2dwcCB3YXkgYWZ0ZXIgbWlub3Igc2FmZXR5IGNoZWNrICovCi0gICAgICBkYXRhID0gbm9kZS0+ZGF0YTsKLSAgICAgIGlmIChRVF9VSU5UMzIgKGRhdGEpIDwgMTUgfHwgIXF0ZGVtdXhfaXNfYnJhbmRfM2dwIChxdGRlbXV4LCBGQUxTRSkpCi0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UKLSAgICAgIHJldHVybjsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmb3VuZCAzZ3BwIGtleXdvcmQgdGFnIik7Ci0KLSAgZGF0YSA9IG5vZGUtPmRhdGE7Ci0KLSAgbGVuID0gUVRfVUlOVDMyIChkYXRhKTsKLSAgaWYgKGxlbiA8IDE1KQotICAgIGdvdG8gc2hvcnRfcmVhZDsKLQotICBjb3VudCA9IFFUX1VJTlQ4IChkYXRhICsgMTQpOwotICBvZmZzZXQgPSAxNTsKLSAgZm9yICg7IGNvdW50OyBjb3VudC0tKSB7Ci0gICAgZ2ludCBzbGVuOwotCi0gICAgaWYgKG9mZnNldCArIDEgPiBsZW4pCi0gICAgICBnb3RvIHNob3J0X3JlYWQ7Ci0gICAgc2xlbiA9IFFUX1VJTlQ4IChkYXRhICsgb2Zmc2V0KTsKLSAgICBvZmZzZXQgKz0gMTsKLSAgICBpZiAob2Zmc2V0ICsgc2xlbiA+IGxlbikKLSAgICAgIGdvdG8gc2hvcnRfcmVhZDsKLSAgICBzID0gZ3N0X3RhZ19mcmVlZm9ybV9zdHJpbmdfdG9fdXRmOCAoKGNoYXIgKikgbm9kZS0+ZGF0YSArIG9mZnNldCwKLSAgICAgICAgc2xlbiwgZW52X3ZhcnMpOwotICAgIGlmIChzKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYWRkaW5nIGtleXdvcmQgJXMiLCBHU1RfU1RSX05VTEwgKHMpKTsKLSAgICAgIGlmIChrKSB7Ci0gICAgICAgIHQgPSBnX3N0cmpvaW4gKCIsIiwgaywgcywgTlVMTCk7Ci0gICAgICAgIGdfZnJlZSAocyk7Ci0gICAgICAgIGdfZnJlZSAoayk7Ci0gICAgICAgIGsgPSB0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgayA9IHM7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJmYWlsZWQgdG8gY29udmVydCBrZXl3b3JkIHRvIFVURi04Iik7Ci0gICAgfQotICAgIG9mZnNldCArPSBzbGVuOwotICB9Ci0KLWRvbmU6Ci0gIGlmIChrKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyB0YWcgJXMiLCBHU1RfU1RSX05VTEwgKGspKTsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIHRhZywgaywgTlVMTCk7Ci0gIH0KLSAgZ19mcmVlIChrKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1zaG9ydF9yZWFkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInNob3J0IHJlYWQgcGFyc2luZyAzR1Aga2V5d29yZHMiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfdGFnX2FkZF9udW0gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcxLCBjb25zdCBjaGFyICp0YWcyLCBHTm9kZSAqIG5vZGUpCi17Ci0gIEdOb2RlICpkYXRhOwotICBpbnQgbGVuOwotICBpbnQgdHlwZTsKLSAgaW50IG4xLCBuMjsKLQotICBkYXRhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChub2RlLCBGT1VSQ0NfZGF0YSk7Ci0gIGlmIChkYXRhKSB7Ci0gICAgbGVuID0gUVRfVUlOVDMyIChkYXRhLT5kYXRhKTsKLSAgICB0eXBlID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyA4KTsKLSAgICBpZiAodHlwZSA9PSAweDAwMDAwMDAwICYmIGxlbiA+PSAyMikgewotICAgICAgbjEgPSBRVF9VSU5UMTYgKChndWludDggKikgZGF0YS0+ZGF0YSArIDE4KTsKLSAgICAgIG4yID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyAyMCk7Ci0gICAgICBpZiAobjEgPiAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJhZGRpbmcgdGFnICVzPSVkIiwgdGFnMSwgbjEpOwotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIHRhZzEsIG4xLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIGlmIChuMiA+IDApIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyB0YWcgJXM9JWQiLCB0YWcyLCBuMik7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgdGFnMiwgbjIsIE5VTEwpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcXRkZW11eF90YWdfYWRkX3RtcG8gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcxLCBjb25zdCBjaGFyICpkdW1teSwgR05vZGUgKiBub2RlKQotewotICBHTm9kZSAqZGF0YTsKLSAgaW50IGxlbjsKLSAgaW50IHR5cGU7Ci0gIGludCBuMTsKLQotICBkYXRhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChub2RlLCBGT1VSQ0NfZGF0YSk7Ci0gIGlmIChkYXRhKSB7Ci0gICAgbGVuID0gUVRfVUlOVDMyIChkYXRhLT5kYXRhKTsKLSAgICB0eXBlID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyA4KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiaGF2ZSB0ZW1wbyB0YWcsIHR5cGU9JWQsbGVuPSVkIiwgdHlwZSwgbGVuKTsKLSAgICAvKiBzb21lIGZpbGVzIHdyb25nbHkgaGF2ZSBhIHR5cGUgMHgwZj0xNSwgYnV0IGl0IHNob3VsZCBiZSAweDE1ICovCi0gICAgaWYgKCh0eXBlID09IDB4MDAwMDAwMTUgfHwgdHlwZSA9PSAweDAwMDAwMDBmKSAmJiBsZW4gPj0gMTgpIHsKLSAgICAgIG4xID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyAxNik7Ci0gICAgICBpZiAobjEpIHsKLSAgICAgICAgLyogZG8gbm90IGFkZCBicG09MCAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYWRkaW5nIHRhZyAlZCIsIG4xKTsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCB0YWcxLCAoZ2RvdWJsZSkgbjEsCi0gICAgICAgICAgICBOVUxMKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfdGFnX2FkZF91aW50MzIgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcxLCBjb25zdCBjaGFyICpkdW1teSwgR05vZGUgKiBub2RlKQotewotICBHTm9kZSAqZGF0YTsKLSAgaW50IGxlbjsKLSAgaW50IHR5cGU7Ci0gIGd1aW50MzIgbnVtOwotCi0gIGRhdGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG5vZGUsIEZPVVJDQ19kYXRhKTsKLSAgaWYgKGRhdGEpIHsKLSAgICBsZW4gPSBRVF9VSU5UMzIgKGRhdGEtPmRhdGEpOwotICAgIHR5cGUgPSBRVF9VSU5UMzIgKChndWludDggKikgZGF0YS0+ZGF0YSArIDgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJoYXZlICVzIHRhZywgdHlwZT0lZCxsZW49JWQiLCB0YWcxLCB0eXBlLCBsZW4pOwotICAgIC8qIHNvbWUgZmlsZXMgd3JvbmdseSBoYXZlIGEgdHlwZSAweDBmPTE1LCBidXQgaXQgc2hvdWxkIGJlIDB4MTUgKi8KLSAgICBpZiAoKHR5cGUgPT0gMHgwMDAwMDAxNSB8fCB0eXBlID09IDB4MDAwMDAwMGYpICYmIGxlbiA+PSAyMCkgewotICAgICAgbnVtID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyAxNik7Ci0gICAgICBpZiAobnVtKSB7Ci0gICAgICAgIC8qIGRvIG5vdCBhZGQgbnVtPTAgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyB0YWcgJWQiLCBudW0pOwotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIHRhZzEsIG51bSwgTlVMTCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3RhZ19hZGRfY292ciAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LAotICAgIGNvbnN0IGNoYXIgKnRhZzEsIGNvbnN0IGNoYXIgKmR1bW15LCBHTm9kZSAqIG5vZGUpCi17Ci0gIEdOb2RlICpkYXRhOwotICBpbnQgbGVuOwotICBpbnQgdHlwZTsKLSAgR3N0U2FtcGxlICpzYW1wbGU7Ci0KLSAgZGF0YSA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobm9kZSwgRk9VUkNDX2RhdGEpOwotICBpZiAoZGF0YSkgewotICAgIGxlbiA9IFFUX1VJTlQzMiAoZGF0YS0+ZGF0YSk7Ci0gICAgdHlwZSA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBkYXRhLT5kYXRhICsgOCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImhhdmUgY292ciB0YWcsIHR5cGU9JWQsbGVuPSVkIiwgdHlwZSwgbGVuKTsKLSAgICBpZiAoKHR5cGUgPT0gMHgwMDAwMDAwZCB8fCB0eXBlID09IDB4MDAwMDAwMGUpICYmIGxlbiA+IDE2KSB7Ci0gICAgICBpZiAoKHNhbXBsZSA9Ci0gICAgICAgICAgICAgIGdzdF90YWdfaW1hZ2VfZGF0YV90b19pbWFnZV9zYW1wbGUgKChndWludDggKikgZGF0YS0+ZGF0YSArIDE2LAotICAgICAgICAgICAgICAgICAgbGVuIC0gMTYsIEdTVF9UQUdfSU1BR0VfVFlQRV9OT05FKSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyB0YWcgc2l6ZSAlZCIsIGxlbiAtIDE2KTsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCB0YWcxLCBzYW1wbGUsIE5VTEwpOwotICAgICAgICBnc3Rfc2FtcGxlX3VucmVmIChzYW1wbGUpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcXRkZW11eF90YWdfYWRkX2RhdGUgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmR1bW15LCBHTm9kZSAqIG5vZGUpCi17Ci0gIEdOb2RlICpkYXRhOwotICBjaGFyICpzOwotICBpbnQgbGVuOwotICBpbnQgdHlwZTsKLQotICBkYXRhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChub2RlLCBGT1VSQ0NfZGF0YSk7Ci0gIGlmIChkYXRhKSB7Ci0gICAgbGVuID0gUVRfVUlOVDMyIChkYXRhLT5kYXRhKTsKLSAgICB0eXBlID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyA4KTsKLSAgICBpZiAodHlwZSA9PSAweDAwMDAwMDAxICYmIGxlbiA+IDE2KSB7Ci0gICAgICBndWludCB5LCBtID0gMSwgZCA9IDE7Ci0gICAgICBnaW50IHJldDsKLQotICAgICAgcyA9IGdfc3RybmR1cCAoKGNoYXIgKikgZGF0YS0+ZGF0YSArIDE2LCBsZW4gLSAxNik7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYWRkaW5nIGRhdGUgJyVzJyIsIHMpOwotICAgICAgcmV0ID0gc3NjYW5mIChzLCAiJXUtJXUtJXUiLCAmeSwgJm0sICZkKTsKLSAgICAgIGlmIChyZXQgPj0gMSAmJiB5ID4gMTUwMCAmJiB5IDwgMzAwMCkgewotICAgICAgICBHRGF0ZSAqZGF0ZTsKLQotICAgICAgICBkYXRlID0gZ19kYXRlX25ld19kbXkgKGQsIG0sIHkpOwotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIHRhZywgZGF0ZSwgTlVMTCk7Ci0gICAgICAgIGdfZGF0ZV9mcmVlIChkYXRlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJjb3VsZCBub3QgcGFyc2UgZGF0ZSBzdHJpbmcgJyVzJyIsIHMpOwotICAgICAgfQotICAgICAgZ19mcmVlIChzKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfdGFnX2FkZF9nbnJlIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0VGFnTGlzdCAqIHRhZ2xpc3QsCi0gICAgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICpkdW1teSwgR05vZGUgKiBub2RlKQotewotICBHTm9kZSAqZGF0YTsKLQotICBkYXRhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChub2RlLCBGT1VSQ0NfZGF0YSk7Ci0KLSAgLyogcmUtcm91dGUgdG8gbm9ybWFsIHN0cmluZyB0YWcgaWYgbWFqb3IgYnJhbmQgc2F5cyBzbwotICAgKiBvciBubyBkYXRhIGF0b20gYW5kIGNvbXBhdGlibGUgYnJhbmQgc3VnZ2VzdHMgc28gKi8KLSAgaWYgKHF0ZGVtdXhfaXNfYnJhbmRfM2dwIChxdGRlbXV4LCBUUlVFKSB8fAotICAgICAgKHF0ZGVtdXhfaXNfYnJhbmRfM2dwIChxdGRlbXV4LCBGQUxTRSkgJiYgIWRhdGEpKSB7Ci0gICAgcXRkZW11eF90YWdfYWRkX3N0ciAocXRkZW11eCwgdGFnbGlzdCwgdGFnLCBkdW1teSwgbm9kZSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGRhdGEpIHsKLSAgICBndWludCBsZW4sIHR5cGUsIG47Ci0KLSAgICBsZW4gPSBRVF9VSU5UMzIgKGRhdGEtPmRhdGEpOwotICAgIHR5cGUgPSBRVF9VSU5UMzIgKChndWludDggKikgZGF0YS0+ZGF0YSArIDgpOwotICAgIGlmICh0eXBlID09IDB4MDAwMDAwMDAgJiYgbGVuID49IDE4KSB7Ci0gICAgICBuID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIGRhdGEtPmRhdGEgKyAxNik7Ci0gICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgY29uc3QgZ2NoYXIgKmdlbnJlOwotCi0gICAgICAgIGdlbnJlID0gZ3N0X3RhZ19pZDNfZ2VucmVfZ2V0IChuIC0gMSk7Ci0gICAgICAgIGlmIChnZW5yZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgImFkZGluZyAlZCBbJXNdIiwgbiwgZ2VucmUpOwotICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgdGFnLCBnZW5yZSwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfYWRkX2RvdWJsZV90YWdfZnJvbV9zdHIgKEdzdFFURGVtdXggKiBkZW11eCwgR3N0VGFnTGlzdCAqIHRhZ2xpc3QsCi0gICAgY29uc3QgZ2NoYXIgKiB0YWcsIGd1aW50OCAqIGRhdGEsIGd1aW50MzIgZGF0YXNpemUpCi17Ci0gIGdkb3VibGUgdmFsdWU7Ci0gIGdjaGFyICpkYXRhY29weTsKLQotICAvKiBtYWtlIGEgY29weSB0byBoYXZlIFwwIGF0IHRoZSBlbmQgKi8KLSAgZGF0YWNvcHkgPSBnX3N0cm5kdXAgKChnY2hhciAqKSBkYXRhLCBkYXRhc2l6ZSk7Ci0KLSAgLyogY29udmVydCB0aGUgc3RyIHRvIGRvdWJsZSAqLwotICBpZiAoc3NjYW5mIChkYXRhY29weSwgIiVsZiIsICZ2YWx1ZSkgPT0gMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiYWRkaW5nIHRhZzogJXMgWyVzXSIsIHRhZywgZGF0YWNvcHkpOwotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgdGFnLCB2YWx1ZSwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkZhaWxlZCB0byBwYXJzZSBkb3VibGUgZnJvbSBzdHJpbmc6ICVzIiwKLSAgICAgICAgZGF0YWNvcHkpOwotICB9Ci0gIGdfZnJlZSAoZGF0YWNvcHkpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3RhZ19hZGRfcmV2ZG5zIChHc3RRVERlbXV4ICogZGVtdXgsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LAotICAgIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnX2JpcywgR05vZGUgKiBub2RlKQotewotICBHTm9kZSAqbWVhbjsKLSAgR05vZGUgKm5hbWU7Ci0gIEdOb2RlICpkYXRhOwotICBndWludDMyIG1lYW5zaXplOwotICBndWludDMyIG5hbWVzaXplOwotICBndWludDMyIGRhdGF0eXBlOwotICBndWludDMyIGRhdGFzaXplOwotICBjb25zdCBnY2hhciAqbWVhbnN0cjsKLSAgY29uc3QgZ2NoYXIgKm5hbWVzdHI7Ci0KLSAgLyogY2hlY2tpbmcgdGhlIHdob2xlIC0tLS0gYXRvbSBzaXplIGZvciBjb25zaXN0ZW5jeSAqLwotICBpZiAoUVRfVUlOVDMyIChub2RlLT5kYXRhKSA8PSA0ICsgMTIgKyAxMiArIDE2KSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIlRhZyAtLS0tIGF0b20gaXMgdG9vIHNtYWxsLCBpZ25vcmluZyIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIG1lYW4gPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG5vZGUsIEZPVVJDQ19tZWFuKTsKLSAgaWYgKCFtZWFuKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIk5vICdtZWFuJyBhdG9tIGZvdW5kIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgbWVhbnNpemUgPSBRVF9VSU5UMzIgKG1lYW4tPmRhdGEpOwotICBpZiAobWVhbnNpemUgPD0gMTIpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiU21hbGwgbWVhbiBhdG9tLCBpZ25vcmluZyB0aGUgd2hvbGUgdGFnIik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1lYW5zdHIgPSAoKGdjaGFyICopIG1lYW4tPmRhdGEpICsgMTI7Ci0gIG1lYW5zaXplIC09IDEyOwotCi0gIG5hbWUgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG5vZGUsIEZPVVJDQ19uYW1lKTsKLSAgaWYgKCFuYW1lKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIiduYW1lJyBhdG9tIG5vdCBmb3VuZCwgaWdub3JpbmcgdGFnIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgbmFtZXNpemUgPSBRVF9VSU5UMzIgKG5hbWUtPmRhdGEpOwotICBpZiAobmFtZXNpemUgPD0gMTIpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiJ25hbWUnIGF0b20gaXMgdG9vIHNtYWxsLCBpZ25vcmluZyB0YWciKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbmFtZXN0ciA9ICgoZ2NoYXIgKikgbmFtZS0+ZGF0YSkgKyAxMjsKLSAgbmFtZXNpemUgLT0gMTI7Ci0KLSAgLyoKLSAgICogRGF0YSBhdG9tIGlzOgotICAgKiB1aW50MzIgLSBzaXplCi0gICAqIHVpbnQzMiAtIG5hbWUKLSAgICogdWludDggIC0gdmVyc2lvbgotICAgKiB1aW50MjQgLSBkYXRhIHR5cGUKLSAgICogdWludDMyIC0gYWxsIDAKLSAgICogcmVzdCAgIC0gdGhlIGRhdGEKLSAgICovCi0gIGRhdGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKG5vZGUsIEZPVVJDQ19kYXRhKTsKLSAgaWYgKCFkYXRhKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIk5vIGRhdGEgYXRvbSBpbiB0aGlzIHRhZyIpOwotICAgIHJldHVybjsKLSAgfQotICBkYXRhc2l6ZSA9IFFUX1VJTlQzMiAoZGF0YS0+ZGF0YSk7Ci0gIGlmIChkYXRhc2l6ZSA8PSAxNikgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJEYXRhIGF0b20gdG9vIHNtYWxsIik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGRhdGF0eXBlID0gUVRfVUlOVDMyICgoKGdjaGFyICopIGRhdGEtPmRhdGEpICsgOCkgJiAweEZGRkZGRjsKLQotICBpZiAoKHN0cm5jbXAgKG1lYW5zdHIsICJjb20uYXBwbGUuaVR1bmVzIiwgbWVhbnNpemUpID09IDApIHx8Ci0gICAgICAoc3RybmNtcCAobWVhbnN0ciwgIm9yZy5oeWRyb2dlbmF1ZGlvLnJlcGxheWdhaW4iLCBtZWFuc2l6ZSkgPT0gMCkpIHsKLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0Ci0gICAgewotICAgICAgY29uc3QgZ2NoYXIgbmFtZVsyOF07Ci0gICAgICBjb25zdCBnY2hhciB0YWdbMjhdOwotICAgIH0gdGFnc1tdID0gewotICAgICAgewotICAgICAgInJlcGxheWdhaW5fdHJhY2tfZ2FpbiIsIEdTVF9UQUdfVFJBQ0tfR0FJTn0sIHsKLSAgICAgICJyZXBsYXlnYWluX3RyYWNrX3BlYWsiLCBHU1RfVEFHX1RSQUNLX1BFQUt9LCB7Ci0gICAgICAicmVwbGF5Z2Fpbl9hbGJ1bV9nYWluIiwgR1NUX1RBR19BTEJVTV9HQUlOfSwgewotICAgICAgInJlcGxheWdhaW5fYWxidW1fcGVhayIsIEdTVF9UQUdfQUxCVU1fUEVBS30sIHsKLSAgICAgICJNdXNpY0JyYWlueiBUcmFjayBJZCIsIEdTVF9UQUdfTVVTSUNCUkFJTlpfVFJBQ0tJRH0sIHsKLSAgICAgICJNdXNpY0JyYWlueiBBcnRpc3QgSWQiLCBHU1RfVEFHX01VU0lDQlJBSU5aX0FSVElTVElEfSwgewotICAgICAgIk11c2ljQnJhaW56IEFsYnVtIElkIiwgR1NUX1RBR19NVVNJQ0JSQUlOWl9BTEJVTUlEfSwgewotICAgICAgIk11c2ljQnJhaW56IEFsYnVtIEFydGlzdCBJZCIsIEdTVF9UQUdfTVVTSUNCUkFJTlpfQUxCVU1BUlRJU1RJRH0KLSAgICB9OwotICAgIGludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAodGFncyk7ICsraSkgewotICAgICAgaWYgKCFnX2FzY2lpX3N0cm5jYXNlY21wICh0YWdzW2ldLm5hbWUsIG5hbWVzdHIsIG5hbWVzaXplKSkgewotICAgICAgICBzd2l0Y2ggKGdzdF90YWdfZ2V0X3R5cGUgKHRhZ3NbaV0udGFnKSkgewotICAgICAgICAgIGNhc2UgR19UWVBFX0RPVUJMRToKLSAgICAgICAgICAgIHF0ZGVtdXhfYWRkX2RvdWJsZV90YWdfZnJvbV9zdHIgKGRlbXV4LCB0YWdsaXN0LCB0YWdzW2ldLnRhZywKLSAgICAgICAgICAgICAgICAoKGd1aW50OCAqKSBkYXRhLT5kYXRhKSArIDE2LCBkYXRhc2l6ZSAtIDE2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR19UWVBFX1NUUklORzoKLSAgICAgICAgICAgIHF0ZGVtdXhfdGFnX2FkZF9zdHIgKGRlbXV4LCB0YWdsaXN0LCB0YWdzW2ldLnRhZywgTlVMTCwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLyogbm90IHJlYWNoZWQgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoaSA9PSBHX05fRUxFTUVOVFMgKHRhZ3MpKQotICAgICAgZ290byB1bmtub3duX3RhZzsKLSAgfSBlbHNlIHsKLSAgICBnb3RvIHVua25vd25fdGFnOwotICB9Ci0KLSAgcmV0dXJuOwotCi0vKiBlcnJvcnMgKi8KLXVua25vd25fdGFnOgotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgewotICAgIGdjaGFyICpuYW1lc3RyX2RiZzsKLSAgICBnY2hhciAqbWVhbnN0cl9kYmc7Ci0KLSAgICBtZWFuc3RyX2RiZyA9IGdfc3RybmR1cCAobWVhbnN0ciwgbWVhbnNpemUpOwotICAgIG5hbWVzdHJfZGJnID0gZ19zdHJuZHVwIChuYW1lc3RyLCBuYW1lc2l6ZSk7Ci0KLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiVGhpcyB0YWcgJXM6JXMgdHlwZToldSBpcyBub3QgbWFwcGVkLCAiCi0gICAgICAgICJmaWxlIGEgYnVnIGF0IGJ1Z3ppbGxhLmdub21lLm9yZyIsIG1lYW5zdHJfZGJnLCBuYW1lc3RyX2RiZywgZGF0YXR5cGUpOwotCi0gICAgZ19mcmVlIChuYW1lc3RyX2RiZyk7Ci0gICAgZ19mcmVlIChtZWFuc3RyX2RiZyk7Ci0gIH0KLSNlbmRpZgotICByZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3RhZ19hZGRfaWQzMiAoR3N0UVREZW11eCAqIGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwgY29uc3QgY2hhciAqdGFnLAotICAgIGNvbnN0IGNoYXIgKnRhZ19iaXMsIEdOb2RlICogbm9kZSkKLXsKLSAgZ3VpbnQ4ICpkYXRhOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQgbGVuOwotICBHc3RUYWdMaXN0ICppZDMyX3RhZ2xpc3QgPSBOVUxMOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInBhcnNpbmcgSUQzMiIpOwotCi0gIGRhdGEgPSBub2RlLT5kYXRhOwotICBsZW4gPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGRhdGEpOwotCi0gIC8qIG5lZWQgYXQgbGVhc3QgZnVsbCBib3ggYW5kIGxhbmd1YWdlIHRhZyAqLwotICBpZiAobGVuIDwgMTIgKyAyKQotICAgIHJldHVybjsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbGVuIC0gMTQsIE5VTEwpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgZGF0YSArIDE0LCBsZW4gLSAxNCk7Ci0KLSAgaWQzMl90YWdsaXN0ID0gZ3N0X3RhZ19saXN0X2Zyb21faWQzdjJfdGFnIChidWYpOwotICBpZiAoaWQzMl90YWdsaXN0KSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAicGFyc2luZyBvayIpOwotICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKHRhZ2xpc3QsIGlkMzJfdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9LRUVQKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGlkMzJfdGFnbGlzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAicGFyc2luZyBmYWlsZWQiKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLXR5cGVkZWYgdm9pZCAoKkdzdFFURGVtdXhBZGRUYWdGdW5jKSAoR3N0UVREZW11eCAqIGRlbXV4LCBHc3RUYWdMaXN0ICogdGFnbGlzdCwKLSAgICBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZ19iaXMsIEdOb2RlICogbm9kZSk7Ci0KLS8qIHVubWFwcGVkIHRhZ3MKLUZPVVJDQ19wY3N0IC0+IGlmIG1lZGlhIGlzIGEgcG9kY2FzdCAtPiBib29sCi1GT1VSQ0NfY3BpbCAtPiBpZiBtZWRpYSBpcyBwYXJ0IG9mIGEgY29tcGlsYXRpb24gLT4gYm9vbAotRk9VUkNDX3BnYXAgLT4gaWYgbWVkaWEgaXMgcGFydCBvZiBhIGdhcGxlc3MgY29udGV4dCAtPiBib29sCi1GT1VSQ0NfdHZlbiAtPiB0aGUgdHYgZXBpc29kZSBpZCBlLmcuIFMwMUUyMyAtPiBzdHIKLSovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLSAgZ3VpbnQzMiBmb3VyY2M7Ci0gIGNvbnN0IGdjaGFyICpnc3RfdGFnOwotICBjb25zdCBnY2hhciAqZ3N0X3RhZ19iaXM7Ci0gIGNvbnN0IEdzdFFURGVtdXhBZGRUYWdGdW5jIGZ1bmM7Ci19IGFkZF9mdW5jc1tdID0gewotICB7Ci0gIEZPVVJDQ19fbmFtLCBHU1RfVEFHX1RJVExFLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfdGl0bCwgR1NUX1RBR19USVRMRSwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX19ncnAsIEdTVF9UQUdfR1JPVVBJTkcsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19fd3J0LCBHU1RfVEFHX0NPTVBPU0VSLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfX0FSVCwgR1NUX1RBR19BUlRJU1QsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19hQVJULCBHU1RfVEFHX0FMQlVNX0FSVElTVCwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX3BlcmYsIEdTVF9UQUdfQVJUSVNULCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfYXV0aCwgR1NUX1RBR19DT01QT1NFUiwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX19hbGIsIEdTVF9UQUdfQUxCVU0sIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19hbGJtLCBHU1RfVEFHX0FMQlVNLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfY3BydCwgR1NUX1RBR19DT1BZUklHSFQsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19fY3B5LCBHU1RfVEFHX0NPUFlSSUdIVCwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX19jbXQsIEdTVF9UQUdfQ09NTUVOVCwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX19kZXMsIEdTVF9UQUdfREVTQ1JJUFRJT04sIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19kZXNjLCBHU1RfVEFHX0RFU0NSSVBUSU9OLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfZHNjcCwgR1NUX1RBR19ERVNDUklQVElPTiwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX19seXIsIEdTVF9UQUdfTFlSSUNTLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfX2RheSwgR1NUX1RBR19EQVRFLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfZGF0ZX0sIHsKLSAgRk9VUkNDX3lycmMsIEdTVF9UQUdfREFURSwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3llYXJ9LCB7Ci0gIEZPVVJDQ19fdG9vLCBHU1RfVEFHX0VOQ09ERVIsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19faW5mLCBHU1RfVEFHX0NPTU1FTlQsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ190cmtuLCBHU1RfVEFHX1RSQUNLX05VTUJFUiwgR1NUX1RBR19UUkFDS19DT1VOVCwgcXRkZW11eF90YWdfYWRkX251bX0sIHsKLSAgRk9VUkNDX2Rpc2ssIEdTVF9UQUdfQUxCVU1fVk9MVU1FX05VTUJFUiwgR1NUX1RBR19BTEJVTV9WT0xVTUVfQ09VTlQsCi0gICAgICAgIHF0ZGVtdXhfdGFnX2FkZF9udW19LCB7Ci0gIEZPVVJDQ19kaXNjLCBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIsIEdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5ULAotICAgICAgICBxdGRlbXV4X3RhZ19hZGRfbnVtfSwgewotICBGT1VSQ0NfX2dlbiwgR1NUX1RBR19HRU5SRSwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX2ducmUsIEdTVF9UQUdfR0VOUkUsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9nbnJlfSwgewotICBGT1VSQ0NfdG1wbywgR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfdG1wb30sIHsKLSAgRk9VUkNDX2NvdnIsIEdTVF9UQUdfUFJFVklFV19JTUFHRSwgTlVMTCwgcXRkZW11eF90YWdfYWRkX2NvdnJ9LCB7Ci0gIEZPVVJDQ19zb25tLCBHU1RfVEFHX1RJVExFX1NPUlROQU1FLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0Nfc29hbCwgR1NUX1RBR19BTEJVTV9TT1JUTkFNRSwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX3NvYXIsIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0Nfc29hYSwgR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19zb2NvLCBHU1RfVEFHX0NPTVBPU0VSX1NPUlROQU1FLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0Nfc29zbiwgR1NUX1RBR19TSE9XX1NPUlROQU1FLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfc3RyfSwgewotICBGT1VSQ0NfdHZzaCwgR1NUX1RBR19TSE9XX05BTUUsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ190dnNuLCBHU1RfVEFHX1NIT1dfU0VBU09OX05VTUJFUiwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3VpbnQzMn0sIHsKLSAgRk9VUkNDX3R2ZXMsIEdTVF9UQUdfU0hPV19FUElTT0RFX05VTUJFUiwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3VpbnQzMn0sIHsKLSAgRk9VUkNDX2t5d2QsIEdTVF9UQUdfS0VZV09SRFMsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9rZXl3b3Jkc30sIHsKLSAgRk9VUkNDX2tleXcsIEdTVF9UQUdfS0VZV09SRFMsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19fZW5jLCBHU1RfVEFHX0VOQ09ERVIsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19sb2NpLCBHU1RfVEFHX0dFT19MT0NBVElPTl9OQU1FLCBOVUxMLCBxdGRlbXV4X3RhZ19hZGRfbG9jYXRpb259LCB7Ci0gIEZPVVJDQ19jbHNmLCBHU1RfUVRfREVNVVhfQ0xBU1NJRklDQVRJT05fVEFHLCBOVUxMLAotICAgICAgICBxdGRlbXV4X3RhZ19hZGRfY2xhc3NpZmljYXRpb259LCB7Ci0gIEZPVVJDQ19fbWFrLCBHU1RfVEFHX0RFVklDRV9NQU5VRkFDVFVSRVIsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9zdHJ9LCB7Ci0gIEZPVVJDQ19fbW9kLCBHU1RfVEFHX0RFVklDRV9NT0RFTCwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLSAgRk9VUkNDX19zd3IsIEdTVF9UQUdfQVBQTElDQVRJT05fTkFNRSwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3N0cn0sIHsKLQotICAgIC8qIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIHNvbWUgdGFncyBhcmUgc3RvcmVkIGluIHRoaXMKLSAgICAgKiAncmV2ZXJzZSBkbnMgbmFtaW5nJywgYWNjb3JkaW5nIHRvOgotICAgICAqIGh0dHA6Ly9hdG9taWNwYXJzbGV5LnNvdXJjZWZvcmdlLm5ldC9tcGVnLTRmaWxlcy5odG1sIGFuZAotICAgICAqIGJ1ZyAjNjE0NDcxCi0gICAgICovCi0gIEZPVVJDQ19fX19fLCAiIiwgTlVMTCwgcXRkZW11eF90YWdfYWRkX3JldmRuc30sIHsKLSAgICAvKiBzZWUgaHR0cDovL3d3dy5tcDRyYS5vcmcvc3BlY3MuaHRtbCBmb3IgSUQzMiBpbiBtZXRhIGJveCAqLwotICBGT1VSQ0NfSUQzMiwgIiIsIE5VTEwsIHF0ZGVtdXhfdGFnX2FkZF9pZDMyfQotfTsKLQotc3RydWN0IF9Hc3RRdERlbXV4VGFnTGlzdAotewotICBHc3RRVERlbXV4ICpkZW11eDsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLX07Ci10eXBlZGVmIHN0cnVjdCBfR3N0UXREZW11eFRhZ0xpc3QgR3N0UXREZW11eFRhZ0xpc3Q7Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3RhZ19hZGRfYmxvYiAoR05vZGUgKiBub2RlLCBHc3RRdERlbXV4VGFnTGlzdCAqIHF0ZGVtdXh0YWdsaXN0KQotewotICBnaW50IGxlbjsKLSAgZ3VpbnQ4ICpkYXRhOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ2NoYXIgKm1lZGlhX3R5cGU7Ci0gIGNvbnN0IGdjaGFyICpzdHlsZTsKLSAgR3N0U2FtcGxlICpzYW1wbGU7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ3VpbnQgaTsKLSAgZ3VpbnQ4IG5kYXRhWzRdOwotICBHc3RRVERlbXV4ICpkZW11eCA9IHF0ZGVtdXh0YWdsaXN0LT5kZW11eDsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IHF0ZGVtdXh0YWdsaXN0LT50YWdsaXN0OwotCi0gIGRhdGEgPSBub2RlLT5kYXRhOwotICBsZW4gPSBRVF9VSU5UMzIgKGRhdGEpOwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbik7Ci0gIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBkYXRhLCBsZW4pOwotCi0gIC8qIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgc3R5bGUgb2YgdGFnICovCi0gIGlmIChRVF9GT1VSQ0MgKGRhdGEgKyA0KSA9PSBGT1VSQ0NfX19fXyB8fAotICAgICAgKGxlbiA+IDggKyAxMiAmJiBRVF9GT1VSQ0MgKGRhdGEgKyAxMikgPT0gRk9VUkNDX2RhdGEpKQotICAgIHN0eWxlID0gIml0dW5lcyI7Ci0gIGVsc2UgaWYgKGRlbXV4LT5tYWpvcl9icmFuZCA9PSBGT1VSQ0NfcXRfXykKLSAgICBzdHlsZSA9ICJxdWlja3RpbWUiOwotICAvKiBmYWxsIGJhY2sgdG8gYXNzdW1pbmcgaXNvLzNncCB0YWcgc3R5bGUgKi8KLSAgZWxzZQotICAgIHN0eWxlID0gImlzbyI7Ci0KLSAgLyogc2FudGl6ZSB0aGUgbmFtZSBmb3IgdGhlIGNhcHMuICovCi0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICBndWludDggZCA9IGRhdGFbNCArIGldOwotICAgIGlmIChnX2FzY2lpX2lzYWxudW0gKGQpKQotICAgICAgbmRhdGFbaV0gPSBnX2FzY2lpX3RvbG93ZXIgKGQpOwotICAgIGVsc2UKLSAgICAgIG5kYXRhW2ldID0gJ18nOwotICB9Ci0KLSAgbWVkaWFfdHlwZSA9IGdfc3RyZHVwX3ByaW50ZiAoImFwcGxpY2F0aW9uL3gtZ3N0LXF0LSVjJWMlYyVjLXRhZyIsCi0gICAgICBuZGF0YVswXSwgbmRhdGFbMV0sIG5kYXRhWzJdLCBuZGF0YVszXSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibWVkaWEgdHlwZSAlcyIsIG1lZGlhX3R5cGUpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAobWVkaWFfdHlwZSwgInN0eWxlIiwgR19UWVBFX1NUUklORywgc3R5bGUsIE5VTEwpOwotICBzYW1wbGUgPSBnc3Rfc2FtcGxlX25ldyAoYnVmLCBOVUxMLCBOVUxMLCBzKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgZ19mcmVlIChtZWRpYV90eXBlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImFkZGluZyBwcml2YXRlIHRhZzsgc2l6ZSAlZCwgaW5mbyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIGxlbiwgcyk7Ci0KLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICBHU1RfUVRfREVNVVhfUFJJVkFURV9UQUcsIHNhbXBsZSwgTlVMTCk7Ci0KLSAgZ3N0X3NhbXBsZV91bnJlZiAoc2FtcGxlKTsKLX0KLQotc3RhdGljIHZvaWQKLXF0ZGVtdXhfcGFyc2VfdWR0YSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdFRhZ0xpc3QgKiB0YWdsaXN0LCBHTm9kZSAqIHVkdGEpCi17Ci0gIEdOb2RlICptZXRhOwotICBHTm9kZSAqaWxzdDsKLSAgR05vZGUgKnhtcF87Ci0gIEdOb2RlICpub2RlOwotICBnaW50IGk7Ci0gIEdzdFF0RGVtdXhUYWdMaXN0IGRlbXV4dGFnbGlzdDsKLQotICBkZW11eHRhZ2xpc3QuZGVtdXggPSBxdGRlbXV4OwotICBkZW11eHRhZ2xpc3QudGFnbGlzdCA9IHRhZ2xpc3Q7Ci0KLSAgbWV0YSA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAodWR0YSwgRk9VUkNDX21ldGEpOwotICBpZiAobWV0YSAhPSBOVUxMKSB7Ci0gICAgaWxzdCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAobWV0YSwgRk9VUkNDX2lsc3QpOwotICAgIGlmIChpbHN0ID09IE5VTEwpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAibm8gaWxzdCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpbHN0ID0gdWR0YTsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIm5vIG1ldGEgc28gdXNpbmcgdWR0YSBpdHNlbGYiKTsKLSAgfQotCi0gIGkgPSAwOwotICB3aGlsZSAoaSA8IEdfTl9FTEVNRU5UUyAoYWRkX2Z1bmNzKSkgewotICAgIG5vZGUgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKGlsc3QsIGFkZF9mdW5jc1tpXS5mb3VyY2MpOwotICAgIGlmIChub2RlKSB7Ci0gICAgICBnaW50IGxlbjsKLQotICAgICAgbGVuID0gUVRfVUlOVDMyIChub2RlLT5kYXRhKTsKLSAgICAgIGlmIChsZW4gPCAxMikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAidG9vIHNtYWxsIHRhZyBhdG9tICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChhZGRfZnVuY3NbaV0uZm91cmNjKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhZGRfZnVuY3NbaV0uZnVuYyAocXRkZW11eCwgdGFnbGlzdCwgYWRkX2Z1bmNzW2ldLmdzdF90YWcsCi0gICAgICAgICAgICBhZGRfZnVuY3NbaV0uZ3N0X3RhZ19iaXMsIG5vZGUpOwotICAgICAgfQotICAgICAgZ19ub2RlX2Rlc3Ryb3kgKG5vZGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpKys7Ci0gICAgfQotICB9Ci0KLSAgLyogcGFyc2VkIG5vZGVzIGhhdmUgYmVlbiByZW1vdmVkLCBwYXNzIGFsb25nIHJlbWFpbmRlciBhcyBibG9iICovCi0gIGdfbm9kZV9jaGlsZHJlbl9mb3JlYWNoIChpbHN0LCBHX1RSQVZFUlNFX0FMTCwKLSAgICAgIChHTm9kZUZvcmVhY2hGdW5jKSBxdGRlbXV4X3RhZ19hZGRfYmxvYiwgJmRlbXV4dGFnbGlzdCk7Ci0KLSAgLyogcGFyc2UgdXAgWE1QXyBub2RlIGlmIGV4aXN0aW5nICovCi0gIHhtcF8gPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHVkdGEsIEZPVVJDQ19YTVBfKTsKLSAgaWYgKHhtcF8gIT0gTlVMTCkgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgIEdzdFRhZ0xpc3QgKnhtcHRhZ2xpc3Q7Ci0KLSAgICBidWYgPSBfZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoKChndWludDggKikgeG1wXy0+ZGF0YSkgKyA4LAotICAgICAgICBRVF9VSU5UMzIgKChndWludDggKikgeG1wXy0+ZGF0YSkgLSA4LCBOVUxMKTsKLSAgICB4bXB0YWdsaXN0ID0gZ3N0X3RhZ19saXN0X2Zyb21feG1wX2J1ZmZlciAoYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gICAgcXRkZW11eF9oYW5kbGVfeG1wX3RhZ2xpc3QgKHF0ZGVtdXgsIHRhZ2xpc3QsIHhtcHRhZ2xpc3QpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJObyBYTVBfIG5vZGUgZm91bmQiKTsKLSAgfQotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsgICAgICAvKiBoZWxwZXIgZm9yIHNvcnQgZnVuY3Rpb24gKi8KLSAgZ2NoYXIgKmxvY2F0aW9uOwotICBndWludCBtaW5fcmVxX2JpdHJhdGU7Ci0gIGd1aW50IG1pbl9yZXFfcXRfdmVyc2lvbjsKLX0gR3N0UXRSZWZlcmVuY2U7Ci0KLXN0YXRpYyBnaW50Ci1xdGRlbXV4X3JlZGlyZWN0c19zb3J0X2Z1bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQotewotICBHc3RRdFJlZmVyZW5jZSAqcmVmX2EgPSAoR3N0UXRSZWZlcmVuY2UgKikgYTsKLSAgR3N0UXRSZWZlcmVuY2UgKnJlZl9iID0gKEdzdFF0UmVmZXJlbmNlICopIGI7Ci0KLSAgaWYgKHJlZl9iLT5taW5fcmVxX3F0X3ZlcnNpb24gIT0gcmVmX2EtPm1pbl9yZXFfcXRfdmVyc2lvbikKLSAgICByZXR1cm4gcmVmX2ItPm1pbl9yZXFfcXRfdmVyc2lvbiAtIHJlZl9hLT5taW5fcmVxX3F0X3ZlcnNpb247Ci0KLSAgLyoga25vd24gYml0cmF0ZXMgZ28gYmVmb3JlIHVua25vd247IGhpZ2hlciBiaXRyYXRlcyBnbyBmaXJzdCAqLwotICByZXR1cm4gcmVmX2ItPm1pbl9yZXFfYml0cmF0ZSAtIHJlZl9hLT5taW5fcmVxX2JpdHJhdGU7Ci19Ci0KLS8qIHNvcnQgdGhlIHJlZGlyZWN0cyBhbmQgcG9zdCBhIG1lc3NhZ2UgZm9yIHRoZSBhcHBsaWNhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQKLXF0ZGVtdXhfcHJvY2Vzc19yZWRpcmVjdHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHTGlzdCAqIHJlZmVyZW5jZXMpCi17Ci0gIEdzdFF0UmVmZXJlbmNlICpiZXN0OwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR1ZhbHVlIGxpc3RfdmFsID0geyAwLCB9OwotICBHTGlzdCAqbDsKLQotICBnX2Fzc2VydCAocmVmZXJlbmNlcyAhPSBOVUxMKTsKLQotICByZWZlcmVuY2VzID0gZ19saXN0X3NvcnQgKHJlZmVyZW5jZXMsIHF0ZGVtdXhfcmVkaXJlY3RzX3NvcnRfZnVuYyk7Ci0KLSAgYmVzdCA9IChHc3RRdFJlZmVyZW5jZSAqKSByZWZlcmVuY2VzLT5kYXRhOwotCi0gIGdfdmFsdWVfaW5pdCAoJmxpc3RfdmFsLCBHU1RfVFlQRV9MSVNUKTsKLQotICBmb3IgKGwgPSByZWZlcmVuY2VzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0UXRSZWZlcmVuY2UgKnJlZiA9IChHc3RRdFJlZmVyZW5jZSAqKSBsLT5kYXRhOwotICAgIEdWYWx1ZSBzdHJ1Y3RfdmFsID0geyAwLCB9OwotCi0gICAgcmVmLT5zdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInJlZGlyZWN0IiwKLSAgICAgICAgIm5ldy1sb2NhdGlvbiIsIEdfVFlQRV9TVFJJTkcsIHJlZi0+bG9jYXRpb24sIE5VTEwpOwotCi0gICAgaWYgKHJlZi0+bWluX3JlcV9iaXRyYXRlID4gMCkgewotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHJlZi0+c3RydWN0dXJlLCAibWluaW11bS1iaXRyYXRlIiwgR19UWVBFX0lOVCwKLSAgICAgICAgICByZWYtPm1pbl9yZXFfYml0cmF0ZSwgTlVMTCk7Ci0gICAgfQotCi0gICAgZ192YWx1ZV9pbml0ICgmc3RydWN0X3ZhbCwgR1NUX1RZUEVfU1RSVUNUVVJFKTsKLSAgICBnX3ZhbHVlX3NldF9ib3hlZCAoJnN0cnVjdF92YWwsIHJlZi0+c3RydWN0dXJlKTsKLSAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0X3ZhbCwgJnN0cnVjdF92YWwpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZzdHJ1Y3RfdmFsKTsKLSAgICAvKiBkb24ndCBmcmVlIGFueXRoaW5nIGhlcmUgeWV0LCBzaW5jZSB3ZSBuZWVkIGJlc3QtPnN0cnVjdHVyZSBiZWxvdyAqLwotICB9Ci0KLSAgZ19hc3NlcnQgKGJlc3QgIT0gTlVMTCk7Ci0gIHMgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKGJlc3QtPnN0cnVjdHVyZSk7Ci0KLSAgaWYgKGdfbGlzdF9sZW5ndGggKHJlZmVyZW5jZXMpID4gMSkgewotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzLCAibG9jYXRpb25zIiwgJmxpc3RfdmFsKTsKLSAgfQotCi0gIGdfdmFsdWVfdW5zZXQgKCZsaXN0X3ZhbCk7Ci0KLSAgZm9yIChsID0gcmVmZXJlbmNlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFF0UmVmZXJlbmNlICpyZWYgPSAoR3N0UXRSZWZlcmVuY2UgKikgbC0+ZGF0YTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocmVmLT5zdHJ1Y3R1cmUpOwotICAgIGdfZnJlZSAocmVmLT5sb2NhdGlvbik7Ci0gICAgZ19mcmVlIChyZWYpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChyZWZlcmVuY2VzKTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJwb3N0aW5nIHJlZGlyZWN0IG1lc3NhZ2U6ICUiIEdTVF9QVFJfRk9STUFULCBzKTsKLSAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1RfQ0FTVCAocXRkZW11eCksIHMpOwotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHF0ZGVtdXgpLCBtc2cpOwotICBxdGRlbXV4LT5wb3N0ZWRfcmVkaXJlY3QgPSBUUlVFOwotfQotCi0vKiBsb29rIGZvciByZWRpcmVjdCBub2RlcywgY29sbGVjdCBhbGwgcmVkaXJlY3QgaW5mb3JtYXRpb24gYW5kCi0gKiBwcm9jZXNzIGl0LgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXF0ZGVtdXhfcGFyc2VfcmVkaXJlY3RzIChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgR05vZGUgKnJtcmEsICpybWRhLCAqcmRyZjsKLQotICBybXJhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChxdGRlbXV4LT5tb292X25vZGUsIEZPVVJDQ19ybXJhKTsKLSAgaWYgKHJtcmEpIHsKLSAgICBHTGlzdCAqcmVkaXJlY3RzID0gTlVMTDsKLQotICAgIHJtZGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHJtcmEsIEZPVVJDQ19ybWRhKTsKLSAgICB3aGlsZSAocm1kYSkgewotICAgICAgR3N0UXRSZWZlcmVuY2UgcmVmID0geyBOVUxMLCBOVUxMLCAwLCAwIH07Ci0gICAgICBHTm9kZSAqcm1kciwgKnJtdmM7Ci0KLSAgICAgIGlmICgocm1kciA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAocm1kYSwgRk9VUkNDX3JtZHIpKSkgewotICAgICAgICByZWYubWluX3JlcV9iaXRyYXRlID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIHJtZHItPmRhdGEgKyAxMik7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiZGF0YSByYXRlIGF0b20sIHJlcXVpcmVkIGJpdHJhdGUgPSAldSIsCi0gICAgICAgICAgICByZWYubWluX3JlcV9iaXRyYXRlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKChybXZjID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChybWRhLCBGT1VSQ0Nfcm12YykpKSB7Ci0gICAgICAgIGd1aW50MzIgcGFja2FnZSA9IFFUX0ZPVVJDQyAoKGd1aW50OCAqKSBybXZjLT5kYXRhICsgMTIpOwotICAgICAgICBndWludCB2ZXJzaW9uID0gUVRfVUlOVDMyICgoZ3VpbnQ4ICopIHJtdmMtPmRhdGEgKyAxNik7Ci0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gICAgICAgIGd1aW50IGJpdG1hc2sgPSBRVF9VSU5UMzIgKChndWludDggKikgcm12Yy0+ZGF0YSArIDIwKTsKLSNlbmRpZgotICAgICAgICBndWludCBjaGVja190eXBlID0gUVRfVUlOVDE2ICgoZ3VpbnQ4ICopIHJtdmMtPmRhdGEgKyAyNCk7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAidmVyc2lvbiBjaGVjayBhdG9tIFslIiBHU1RfRk9VUkNDX0ZPUk1BVCAiXSwgdmVyc2lvbj0weCUwOHgiCi0gICAgICAgICAgICAiLCBtYXNrPSUwOHgsIGNoZWNrX3R5cGU9JXUiLCBHU1RfRk9VUkNDX0FSR1MgKHBhY2thZ2UpLCB2ZXJzaW9uLAotICAgICAgICAgICAgYml0bWFzaywgY2hlY2tfdHlwZSk7Ci0gICAgICAgIGlmIChwYWNrYWdlID09IEZPVVJDQ19xdGltICYmIGNoZWNrX3R5cGUgPT0gMCkgewotICAgICAgICAgIHJlZi5taW5fcmVxX3F0X3ZlcnNpb24gPSB2ZXJzaW9uOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJkcmYgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHJtZGEsIEZPVVJDQ19yZHJmKTsKLSAgICAgIGlmIChyZHJmKSB7Ci0gICAgICAgIGd1aW50MzIgcmVmX3R5cGU7Ci0gICAgICAgIGd1aW50OCAqcmVmX2RhdGE7Ci0gICAgICAgIGd1aW50IHJlZl9sZW47Ci0KLSAgICAgICAgcmVmX2xlbiA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSByZHJmLT5kYXRhKTsKLSAgICAgICAgaWYgKHJlZl9sZW4gPiAyMCkgewotICAgICAgICAgIHJlZl90eXBlID0gUVRfRk9VUkNDICgoZ3VpbnQ4ICopIHJkcmYtPmRhdGEgKyAxMik7Ci0gICAgICAgICAgcmVmX2RhdGEgPSAoZ3VpbnQ4ICopIHJkcmYtPmRhdGEgKyAyMDsKLSAgICAgICAgICBpZiAocmVmX3R5cGUgPT0gRk9VUkNDX2FsaXMpIHsKLSAgICAgICAgICAgIGd1aW50IHJlY29yZF9sZW4sIHJlY29yZF92ZXJzaW9uLCBmbl9sZW47Ci0KLSAgICAgICAgICAgIGlmIChyZWZfbGVuID4gNzApIHsKLSAgICAgICAgICAgICAgLyogTWFjT1NYIGFsaWFzIHJlY29yZCwgZ29vZ2xlIGZvciBhbGlhcy1sYXlvdXQudHh0ICovCi0gICAgICAgICAgICAgIHJlY29yZF9sZW4gPSBRVF9VSU5UMTYgKHJlZl9kYXRhICsgNCk7Ci0gICAgICAgICAgICAgIHJlY29yZF92ZXJzaW9uID0gUVRfVUlOVDE2IChyZWZfZGF0YSArIDQgKyAyKTsKLSAgICAgICAgICAgICAgZm5fbGVuID0gUVRfVUlOVDggKHJlZl9kYXRhICsgNTApOwotICAgICAgICAgICAgICBpZiAocmVjb3JkX2xlbiA+IDUwICYmIHJlY29yZF92ZXJzaW9uID09IDIgJiYgZm5fbGVuID4gMCkgewotICAgICAgICAgICAgICAgIHJlZi5sb2NhdGlvbiA9IGdfc3RybmR1cCAoKGdjaGFyICopIHJlZl9kYXRhICsgNTEsIGZuX2xlbik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIkludmFsaWQgcmRyZi9hbGlzIHNpemUgKCV1IDwgNzApIiwKLSAgICAgICAgICAgICAgICAgIHJlZl9sZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSBpZiAocmVmX3R5cGUgPT0gRk9VUkNDX3VybF8pIHsKLSAgICAgICAgICAgIHJlZi5sb2NhdGlvbiA9IGdfc3RybmR1cCAoKGdjaGFyICopIHJlZl9kYXRhLCByZWZfbGVuIC0gOCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsCi0gICAgICAgICAgICAgICAgInVua25vd24gcmRyZiByZWZlcmVuY2UgdHlwZSAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHJlZl90eXBlKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChyZWYubG9jYXRpb24gIT0gTlVMTCkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiTmV3IGxvY2F0aW9uOiAlcyIsIHJlZi5sb2NhdGlvbik7Ci0gICAgICAgICAgICByZWRpcmVjdHMgPQotICAgICAgICAgICAgICAgIGdfbGlzdF9wcmVwZW5kIChyZWRpcmVjdHMsIGdfbWVtZHVwICgmcmVmLCBzaXplb2YgKHJlZikpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LAotICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZXh0cmFjdCByZWRpcmVjdCBsb2NhdGlvbiBmcm9tIHJkcmYgYXRvbSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHF0ZGVtdXgsICJJbnZhbGlkIHJkcmYgc2l6ZSAoJXUgPCAyMCkiLCByZWZfbGVuKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvKiBsb29rIGZvciBvdGhlcnMgKi8KLSAgICAgIHJtZGEgPSBxdGRlbXV4X3RyZWVfZ2V0X3NpYmxpbmdfYnlfdHlwZSAocm1kYSwgRk9VUkNDX3JtZGEpOwotICAgIH0KLQotICAgIGlmIChyZWRpcmVjdHMgIT0gTlVMTCkgewotICAgICAgcXRkZW11eF9wcm9jZXNzX3JlZGlyZWN0cyAocXRkZW11eCwgcmVkaXJlY3RzKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RUYWdMaXN0ICoKLXF0ZGVtdXhfYWRkX2NvbnRhaW5lcl9mb3JtYXQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RUYWdMaXN0ICogdGFncykKLXsKLSAgY29uc3QgZ2NoYXIgKmZtdDsKLQotICBpZiAodGFncyA9PSBOVUxMKSB7Ci0gICAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gICAgZ3N0X3RhZ19saXN0X3NldF9zY29wZSAodGFncywgR1NUX1RBR19TQ09QRV9HTE9CQUwpOwotICB9Ci0KLSAgaWYgKHF0ZGVtdXgtPm1ham9yX2JyYW5kID09IEZPVVJDQ19tanAyKQotICAgIGZtdCA9ICJNb3Rpb24gSlBFRyAyMDAwIjsKLSAgZWxzZSBpZiAoKHF0ZGVtdXgtPm1ham9yX2JyYW5kICYgMHhmZmZmKSA9PSBGT1VSQ0NfM2dfXykKLSAgICBmbXQgPSAiM0dQIjsKLSAgZWxzZSBpZiAocXRkZW11eC0+bWFqb3JfYnJhbmQgPT0gRk9VUkNDX3F0X18pCi0gICAgZm10ID0gIlF1aWNrdGltZSI7Ci0gIGVsc2UgaWYgKHF0ZGVtdXgtPmZyYWdtZW50ZWQpCi0gICAgZm10ID0gIklTTyBmTVA0IjsKLSAgZWxzZQotICAgIGZtdCA9ICJJU08gTVA0L000QSI7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJtYXBwZWQgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiB0byAnJXMnIiwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAocXRkZW11eC0+bWFqb3JfYnJhbmQpLCBmbXQpOwotCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19DT05UQUlORVJfRk9STUFULAotICAgICAgZm10LCBOVUxMKTsKLQotICByZXR1cm4gdGFnczsKLX0KLQotLyogd2UgaGF2ZSByZWFkIHRoZSBjb21wbGV0ZSBtb292IG5vZGUgbm93LgotICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgYWxsIG9mIHRoZSByZWxldmFudCBpbmZvLCBjcmVhdGVzIHRoZSB0cmFrcyBhbmQKLSAqIHByZXBhcmVzIGFsbCBkYXRhIHN0cnVjdHVyZXMgZm9yIHBsYXliYWNrCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9wYXJzZV90cmVlIChHc3RRVERlbXV4ICogcXRkZW11eCkKLXsKLSAgR05vZGUgKm12aGQ7Ci0gIEdOb2RlICp0cmFrOwotICBHTm9kZSAqdWR0YTsKLSAgR05vZGUgKm12ZXg7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgR05vZGUgKnBzc2g7Ci0gIGd1aW50NjQgY3JlYXRpb25fdGltZTsKLSAgR3N0RGF0ZVRpbWUgKmRhdGV0aW1lID0gTlVMTDsKLSAgZ2ludCB2ZXJzaW9uOwotCi0gIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdXNhYmxlIHRhZ2xpc3QgKi8KLSAgaWYgKCFxdGRlbXV4LT50YWdfbGlzdCkgewotICAgIHF0ZGVtdXgtPnRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlIChxdGRlbXV4LT50YWdfbGlzdCwgR1NUX1RBR19TQ09QRV9HTE9CQUwpOwotICB9IGVsc2UgewotICAgIHF0ZGVtdXgtPnRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGUgKHF0ZGVtdXgtPnRhZ19saXN0KTsKLSAgfQotCi0gIG12aGQgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHF0ZGVtdXgtPm1vb3Zfbm9kZSwgRk9VUkNDX212aGQpOwotICBpZiAobXZoZCA9PSBOVUxMKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJObyBtdmhkIG5vZGUgZm91bmQsIGxvb2tpbmcgZm9yIHJlZGlyZWN0cy4iKTsKLSAgICByZXR1cm4gcXRkZW11eF9wYXJzZV9yZWRpcmVjdHMgKHF0ZGVtdXgpOwotICB9Ci0KLSAgdmVyc2lvbiA9IFFUX1VJTlQ4ICgoZ3VpbnQ4ICopIG12aGQtPmRhdGEgKyA4KTsKLSAgaWYgKHZlcnNpb24gPT0gMSkgewotICAgIGNyZWF0aW9uX3RpbWUgPSBRVF9VSU5UNjQgKChndWludDggKikgbXZoZC0+ZGF0YSArIDEyKTsKLSAgICBxdGRlbXV4LT50aW1lc2NhbGUgPSBRVF9VSU5UMzIgKChndWludDggKikgbXZoZC0+ZGF0YSArIDI4KTsKLSAgICBxdGRlbXV4LT5kdXJhdGlvbiA9IFFUX1VJTlQ2NCAoKGd1aW50OCAqKSBtdmhkLT5kYXRhICsgMzIpOwotICB9IGVsc2UgaWYgKHZlcnNpb24gPT0gMCkgewotICAgIGNyZWF0aW9uX3RpbWUgPSBRVF9VSU5UMzIgKChndWludDggKikgbXZoZC0+ZGF0YSArIDEyKTsKLSAgICBxdGRlbXV4LT50aW1lc2NhbGUgPSBRVF9VSU5UMzIgKChndWludDggKikgbXZoZC0+ZGF0YSArIDIwKTsKLSAgICBxdGRlbXV4LT5kdXJhdGlvbiA9IFFUX1VJTlQzMiAoKGd1aW50OCAqKSBtdmhkLT5kYXRhICsgMjQpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocXRkZW11eCwgIlVuaGFuZGxlZCBtdmhkIHZlcnNpb24gJWQiLCB2ZXJzaW9uKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBNb3ZpbmcgcXQgY3JlYXRpb24gdGltZSAoc2VjcyBzaW5jZSAxOTA0KSB0byB1bml4IHRpbWUgKi8KLSAgaWYgKGNyZWF0aW9uX3RpbWUgIT0gMCkgewotICAgIC8qIFRyeSB0byB1c2UgZXBvY2ggZmlyc3QgYXMgaXQgc2hvdWxkIGJlIGZhc3RlciBhbmQgbW9yZSBjb21tb25seSBmb3VuZCAqLwotICAgIGlmIChjcmVhdGlvbl90aW1lID49IFFUREVNVVhfU0VDT05EU19GUk9NXzE5MDRfVE9fMTk3MCkgewotICAgICAgR1RpbWVWYWwgbm93OwotCi0gICAgICBjcmVhdGlvbl90aW1lIC09IFFUREVNVVhfU0VDT05EU19GUk9NXzE5MDRfVE9fMTk3MDsKLSAgICAgIC8qIHNvbWUgZGF0YSBjbGVhbnNpbmcgc2FuaXR5ICovCi0gICAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZub3cpOwotICAgICAgaWYgKG5vdy50dl9zZWMgKyAyNCAqIDM2MDAgPCBjcmVhdGlvbl90aW1lKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJkaXNjYXJkaW5nIGJvZ3VzIGZ1dHVyZSBjcmVhdGlvbiB0aW1lIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF9lcG9jaF91dGMgKGNyZWF0aW9uX3RpbWUpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHRGF0ZVRpbWUgKmJhc2VfZHQgPSBnX2RhdGVfdGltZV9uZXdfdXRjICgxOTA0LCAxLCAxLCAwLCAwLCAwKTsKLSAgICAgIEdEYXRlVGltZSAqZHQsICpkdF9sb2NhbDsKLQotICAgICAgZHQgPSBnX2RhdGVfdGltZV9hZGRfc2Vjb25kcyAoYmFzZV9kdCwgY3JlYXRpb25fdGltZSk7Ci0gICAgICBkdF9sb2NhbCA9IGdfZGF0ZV90aW1lX3RvX2xvY2FsIChkdCk7Ci0gICAgICBkYXRldGltZSA9IGdzdF9kYXRlX3RpbWVfbmV3X2Zyb21fZ19kYXRlX3RpbWUgKGR0X2xvY2FsKTsKLQotICAgICAgZ19kYXRlX3RpbWVfdW5yZWYgKGJhc2VfZHQpOwotICAgICAgZ19kYXRlX3RpbWVfdW5yZWYgKGR0KTsKLSAgICB9Ci0gIH0KLSAgaWYgKGRhdGV0aW1lKSB7Ci0gICAgLyogVXNlIEtFRVAgYXMgZXhwbGljaXQgdGFncyBzaG91bGQgaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIG12aGQgdGFnICovCi0gICAgZ3N0X3RhZ19saXN0X2FkZCAocXRkZW11eC0+dGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfS0VFUCwgR1NUX1RBR19EQVRFX1RJTUUsCi0gICAgICAgIGRhdGV0aW1lLCBOVUxMKTsKLSAgICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRldGltZSk7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKHF0ZGVtdXgsICJ0aW1lc2NhbGU6ICV1IiwgcXRkZW11eC0+dGltZXNjYWxlKTsKLSAgR1NUX0lORk9fT0JKRUNUIChxdGRlbXV4LCAiZHVyYXRpb246ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHF0ZGVtdXgtPmR1cmF0aW9uKTsKLQotICAvKiBjaGVjayBmb3IgZnJhZ21lbnRlZCBmaWxlIGFuZCBnZXQgc29tZSAoZGVmYXVsdCkgZGF0YSAqLwotICBtdmV4ID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChxdGRlbXV4LT5tb292X25vZGUsIEZPVVJDQ19tdmV4KTsKLSAgaWYgKG12ZXgpIHsKLSAgICBHTm9kZSAqbWVoZDsKLSAgICBHc3RCeXRlUmVhZGVyIG1laGRfZGF0YTsKLQotICAgIC8qIGxldCB0cmFjayBwYXJzaW5nIG9yIGFueW9uZSBrbm93IHdlaXJkIHN0dWZmIG1pZ2h0IGhhcHBlbiAuLi4gKi8KLSAgICBxdGRlbXV4LT5mcmFnbWVudGVkID0gVFJVRTsKLQotICAgIC8qIGNvbXBlbnNhdGUgZm9yIHRvdGFsIGR1cmF0aW9uICovCi0gICAgbWVoZCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZV9mdWxsIChtdmV4LCBGT1VSQ0NfbWVoZCwgJm1laGRfZGF0YSk7Ci0gICAgaWYgKG1laGQpCi0gICAgICBxdGRlbXV4X3BhcnNlX21laGQgKHF0ZGVtdXgsICZtZWhkX2RhdGEpOwotICB9Ci0KLSAgLyogc2V0IGR1cmF0aW9uIGluIHRoZSBzZWdtZW50IGluZm8gKi8KLSAgZ3N0X3F0ZGVtdXhfZ2V0X2R1cmF0aW9uIChxdGRlbXV4LCAmZHVyYXRpb24pOwotICBpZiAoZHVyYXRpb24pIHsKLSAgICBxdGRlbXV4LT5zZWdtZW50LmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgLyogYWxzbyBkbyBub3QgZXhjZWVkIGR1cmF0aW9uOyBzdG9wIGlzIHNldCB0aGF0IHdheSBwb3N0IHNlZWsgYW55d2F5LAotICAgICAqIGFuZCBzZWdtZW50IGFjdGl2YXRpb24gZmFsbHMgYmFjayB0byBkdXJhdGlvbiwKLSAgICAgKiB3aGVyZWFzIGxvb3Agb25seSBjaGVja3Mgc3RvcCwgc28gbGV0J3MgYWxpZ24gdGhpcyBoZXJlIGFzIHdlbGwgKi8KLSAgICBxdGRlbXV4LT5zZWdtZW50LnN0b3AgPSBkdXJhdGlvbjsKLSAgfQotCi0gIC8qIHBhcnNlIGFsbCB0cmFrcyAqLwotICB0cmFrID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChxdGRlbXV4LT5tb292X25vZGUsIEZPVVJDQ190cmFrKTsKLSAgd2hpbGUgKHRyYWspIHsKLSAgICBxdGRlbXV4X3BhcnNlX3RyYWsgKHF0ZGVtdXgsIHRyYWspOwotICAgIC8qIGl0ZXJhdGUgYWxsIHNpYmxpbmdzICovCi0gICAgdHJhayA9IHF0ZGVtdXhfdHJlZV9nZXRfc2libGluZ19ieV90eXBlICh0cmFrLCBGT1VSQ0NfdHJhayk7Ci0gIH0KLQotICBpZiAoIXF0ZGVtdXgtPnRhZ19saXN0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgIm5ldyB0YWcgbGlzdCIpOwotICAgIHF0ZGVtdXgtPnRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlIChxdGRlbXV4LT50YWdfbGlzdCwgR1NUX1RBR19TQ09QRV9HTE9CQUwpOwotICB9IGVsc2UgewotICAgIHF0ZGVtdXgtPnRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X21ha2Vfd3JpdGFibGUgKHF0ZGVtdXgtPnRhZ19saXN0KTsKLSAgfQotCi0gIC8qIGZpbmQgdGFncyAqLwotICB1ZHRhID0gcXRkZW11eF90cmVlX2dldF9jaGlsZF9ieV90eXBlIChxdGRlbXV4LT5tb292X25vZGUsIEZPVVJDQ191ZHRhKTsKLSAgaWYgKHVkdGEpIHsKLSAgICBxdGRlbXV4X3BhcnNlX3VkdGEgKHF0ZGVtdXgsIHF0ZGVtdXgtPnRhZ19saXN0LCB1ZHRhKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIk5vIHVkdGEgbm9kZSBmb3VuZC4iKTsKLSAgfQotCi0gIC8qIG1heWJlIGFsc28gc29tZSB0YWdzIGluIG1ldGEgYm94ICovCi0gIHVkdGEgPSBxdGRlbXV4X3RyZWVfZ2V0X2NoaWxkX2J5X3R5cGUgKHF0ZGVtdXgtPm1vb3Zfbm9kZSwgRk9VUkNDX21ldGEpOwotICBpZiAodWR0YSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJQYXJzaW5nIG1ldGEgYm94IGZvciB0YWdzLiIpOwotICAgIHF0ZGVtdXhfcGFyc2VfdWR0YSAocXRkZW11eCwgcXRkZW11eC0+dGFnX2xpc3QsIHVkdGEpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiTm8gbWV0YSBub2RlIGZvdW5kLiIpOwotICB9Ci0KLSAgLyogcGFyc2UgYW55IHByb3RlY3Rpb24gc3lzdGVtIGluZm8gKi8KLSAgcHNzaCA9IHF0ZGVtdXhfdHJlZV9nZXRfY2hpbGRfYnlfdHlwZSAocXRkZW11eC0+bW9vdl9ub2RlLCBGT1VSQ0NfcHNzaCk7Ci0gIHdoaWxlIChwc3NoKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICJQYXJzaW5nIHBzc2ggYm94LiIpOwotICAgIHF0ZGVtdXhfcGFyc2VfcHNzaCAocXRkZW11eCwgcHNzaCk7Ci0gICAgcHNzaCA9IHF0ZGVtdXhfdHJlZV9nZXRfc2libGluZ19ieV90eXBlIChwc3NoLCBGT1VSQ0NfcHNzaCk7Ci0gIH0KLQotICBxdGRlbXV4LT50YWdfbGlzdCA9IHF0ZGVtdXhfYWRkX2NvbnRhaW5lcl9mb3JtYXQgKHF0ZGVtdXgsIHF0ZGVtdXgtPnRhZ19saXN0KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogdGFrZW4gZnJvbSBmZm1wZWcgKi8KLXN0YXRpYyBpbnQKLXJlYWRfZGVzY3Jfc2l6ZSAoZ3VpbnQ4ICogcHRyLCBndWludDggKiBlbmQsIGd1aW50OCAqKiBlbmRfb3V0KQotewotICBpbnQgY291bnQgPSA0OwotICBpbnQgbGVuID0gMDsKLQotICB3aGlsZSAoY291bnQtLSkgewotICAgIGludCBjOwotCi0gICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICByZXR1cm4gLTE7Ci0KLSAgICBjID0gKnB0cisrOwotICAgIGxlbiA9IChsZW4gPDwgNykgfCAoYyAmIDB4N2YpOwotICAgIGlmICghKGMgJiAweDgwKSkKLSAgICAgIGJyZWFrOwotICB9Ci0gICplbmRfb3V0ID0gcHRyOwotICByZXR1cm4gbGVuOwotfQotCi0vKiB0aGlzIGNhbiBjaGFuZ2UgdGhlIGNvZGVjIG9yaWdpbmFsbHkgcHJlc2VudCBpbiBAbGlzdCAqLwotc3RhdGljIHZvaWQKLWdzdF9xdGRlbXV4X2hhbmRsZV9lc2RzIChHc3RRVERlbXV4ICogcXRkZW11eCwgUXREZW11eFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHTm9kZSAqIGVzZHMsIEdzdFRhZ0xpc3QgKiBsaXN0KQotewotICBpbnQgbGVuID0gUVRfVUlOVDMyIChlc2RzLT5kYXRhKTsKLSAgZ3VpbnQ4ICpwdHIgPSBlc2RzLT5kYXRhOwotICBndWludDggKmVuZCA9IHB0ciArIGxlbjsKLSAgaW50IHRhZzsKLSAgZ3VpbnQ4ICpkYXRhX3B0ciA9IE5VTEw7Ci0gIGludCBkYXRhX2xlbiA9IDA7Ci0gIGd1aW50OCBvYmplY3RfdHlwZV9pZCA9IDA7Ci0gIGNvbnN0IGNoYXIgKmNvZGVjX25hbWUgPSBOVUxMOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLQotICBHU1RfTUVNRFVNUF9PQkpFQ1QgKHF0ZGVtdXgsICJlc2RzIiwgcHRyLCBsZW4pOwotICBwdHIgKz0gODsKLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInZlcnNpb24vZmxhZ3MgPSAlMDh4IiwgUVRfVUlOVDMyIChwdHIpKTsKLSAgcHRyICs9IDQ7Ci0gIHdoaWxlIChwdHIgKyAxIDwgZW5kKSB7Ci0gICAgdGFnID0gUVRfVUlOVDggKHB0cik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInRhZyA9ICUwMngiLCB0YWcpOwotICAgIHB0cisrOwotICAgIGxlbiA9IHJlYWRfZGVzY3Jfc2l6ZSAocHRyLCBlbmQsICZwdHIpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJsZW4gPSAlZCIsIGxlbik7Ci0KLSAgICAvKiBDaGVjayB0aGUgc3RhdGVkIGFtb3VudCBvZiBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmVhZGluZyAqLwotICAgIGlmIChsZW4gPCAwIHx8IHB0ciArIGxlbiA+IGVuZCkKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoICh0YWcpIHsKLSAgICAgIGNhc2UgRVNfREVTQ1JJUFRPUl9UQUc6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJJRCAlMDR4IiwgUVRfVUlOVDE2IChwdHIpKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInByaW9yaXR5ICUwNHgiLCBRVF9VSU5UOCAocHRyICsgMikpOwotICAgICAgICBwdHIgKz0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERFQ09ERVJfQ09ORklHX0RFU0NfVEFHOnsKLSAgICAgICAgZ3VpbnQgbWF4X2JpdHJhdGUsIGF2Z19iaXRyYXRlOwotCi0gICAgICAgIG9iamVjdF90eXBlX2lkID0gUVRfVUlOVDggKHB0cik7Ci0gICAgICAgIG1heF9iaXRyYXRlID0gUVRfVUlOVDMyIChwdHIgKyA1KTsKLSAgICAgICAgYXZnX2JpdHJhdGUgPSBRVF9VSU5UMzIgKHB0ciArIDkpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAib2JqZWN0X3R5cGVfaWQgJTAyeCIsIG9iamVjdF90eXBlX2lkKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInN0cmVhbV90eXBlICUwMngiLCBRVF9VSU5UOCAocHRyICsgMSkpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiYnVmZmVyX3NpemVfZGIgJTAyeCIsIFFUX1VJTlQyNCAocHRyICsgMikpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAibWF4IGJpdHJhdGUgJXUiLCBtYXhfYml0cmF0ZSk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJhdmcgYml0cmF0ZSAldSIsIGF2Z19iaXRyYXRlKTsKLSAgICAgICAgaWYgKG1heF9iaXRyYXRlID4gMCAmJiBtYXhfYml0cmF0ZSA8IEdfTUFYVUlOVDMyKSB7Ci0gICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgICBHU1RfVEFHX01BWElNVU1fQklUUkFURSwgbWF4X2JpdHJhdGUsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhdmdfYml0cmF0ZSA+IDAgJiYgYXZnX2JpdHJhdGUgPCBHX01BWFVJTlQzMikgewotICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKGxpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19CSVRSQVRFLAotICAgICAgICAgICAgICBhdmdfYml0cmF0ZSwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHRyICs9IDEzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgREVDT0RFUl9TUEVDSUZJQ19JTkZPX1RBRzoKLSAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUIChxdGRlbXV4LCAiZGF0YSIsIHB0ciwgbGVuKTsKLSAgICAgICAgaWYgKG9iamVjdF90eXBlX2lkID09IDB4ZTAgJiYgbGVuID09IDB4NDApIHsKLSAgICAgICAgICBndWludDggKmRhdGE7Ci0gICAgICAgICAgR3N0U3RydWN0dXJlICpzOwotICAgICAgICAgIGd1aW50MzIgY2x1dFsxNl07Ci0gICAgICAgICAgZ2ludCBpOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAgICAgIkhhdmUgVk9CU1VCIHBhbGV0dGUuIENyZWF0aW5nIHBhbGV0dGUgZXZlbnQiKTsKLSAgICAgICAgICAvKiBtb3ZlIHRvIGRlY0NvbmZpZ0Rlc2NyIGRhdGEgYW5kIHJlYWQgcGFsZXR0ZSAqLwotICAgICAgICAgIGRhdGEgPSBwdHI7Ci0gICAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICAgIGNsdXRbaV0gPSBRVF9VSU5UMzIgKGRhdGEpOwotICAgICAgICAgICAgZGF0YSArPSA0OwotICAgICAgICAgIH0KLQotICAgICAgICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtZ3N0LWR2ZCIsICJldmVudCIsCi0gICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsICJkdmQtc3B1LWNsdXQtY2hhbmdlIiwKLSAgICAgICAgICAgICAgImNsdXQwMCIsIEdfVFlQRV9JTlQsIGNsdXRbMF0sICJjbHV0MDEiLCBHX1RZUEVfSU5ULCBjbHV0WzFdLAotICAgICAgICAgICAgICAiY2x1dDAyIiwgR19UWVBFX0lOVCwgY2x1dFsyXSwgImNsdXQwMyIsIEdfVFlQRV9JTlQsIGNsdXRbM10sCi0gICAgICAgICAgICAgICJjbHV0MDQiLCBHX1RZUEVfSU5ULCBjbHV0WzRdLCAiY2x1dDA1IiwgR19UWVBFX0lOVCwgY2x1dFs1XSwKLSAgICAgICAgICAgICAgImNsdXQwNiIsIEdfVFlQRV9JTlQsIGNsdXRbNl0sICJjbHV0MDciLCBHX1RZUEVfSU5ULCBjbHV0WzddLAotICAgICAgICAgICAgICAiY2x1dDA4IiwgR19UWVBFX0lOVCwgY2x1dFs4XSwgImNsdXQwOSIsIEdfVFlQRV9JTlQsIGNsdXRbOV0sCi0gICAgICAgICAgICAgICJjbHV0MTAiLCBHX1RZUEVfSU5ULCBjbHV0WzEwXSwgImNsdXQxMSIsIEdfVFlQRV9JTlQsIGNsdXRbMTFdLAotICAgICAgICAgICAgICAiY2x1dDEyIiwgR19UWVBFX0lOVCwgY2x1dFsxMl0sICJjbHV0MTMiLCBHX1RZUEVfSU5ULCBjbHV0WzEzXSwKLSAgICAgICAgICAgICAgImNsdXQxNCIsIEdfVFlQRV9JTlQsIGNsdXRbMTRdLCAiY2x1dDE1IiwgR19UWVBFX0lOVCwgY2x1dFsxNV0sCi0gICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgICAgICAgLyogc3RvcmUgZXZlbnQgYW5kIHRyaWdnZXIgY3VzdG9tIHByb2Nlc3NpbmcgKi8KLSAgICAgICAgICBzdHJlYW0tPnBlbmRpbmdfZXZlbnQgPQotICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNLCBzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBHZW5lcmljIGNvZGVjX2RhdGEgaGFuZGxlciBwdXRzIGl0IG9uIHRoZSBjYXBzICovCi0gICAgICAgICAgZGF0YV9wdHIgPSBwdHI7Ci0gICAgICAgICAgZGF0YV9sZW4gPSBsZW47Ci0gICAgICAgIH0KLQotICAgICAgICBwdHIgKz0gbGVuOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU0xfQ09ORklHX0RFU0NfVEFHOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiZGF0YSAlMDJ4IiwgUVRfVUlOVDggKHB0cikpOwotICAgICAgICBwdHIgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiVW5rbm93bi91bmhhbmRsZWQgZGVzY3JpcHRvciB0YWcgJTAyeCIsCi0gICAgICAgICAgICB0YWcpOwotICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKHF0ZGVtdXgsICJkZXNjcmlwdG9yIGRhdGEiLCBwdHIsIGxlbik7Ci0gICAgICAgIHB0ciArPSBsZW47Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIG9iamVjdF90eXBlX2lkIGluIHRoZSBlc2RzIGF0b20gaW4gbXA0YSBhbmQgbXA0diB0ZWxscyB1cyB3aGljaCBjb2RlYyBpcwotICAgKiBpbiB1c2UsIGFuZCBzaG91bGQgYWxzbyBiZSB1c2VkIHRvIG92ZXJyaWRlIHNvbWUgb3RoZXIgcGFyYW1ldGVycyBmb3Igc29tZQotICAgKiBjb2RlY3MuICovCi0gIHN3aXRjaCAob2JqZWN0X3R5cGVfaWQpIHsKLSAgICBjYXNlIDB4MjA6ICAgICAgICAgICAgICAgICAvKiBNUEVHLTQgKi8KLSAgICAgIC8qIDQgYnl0ZXMgZm9yIHRoZSB2aXN1YWxfb2JqZWN0X3NlcXVlbmNlX3N0YXJ0X2NvZGUgYW5kIDEgYnl0ZSBmb3IgdGhlCi0gICAgICAgKiBwcm9maWxlX2FuZF9sZXZlbF9pbmRpY2F0aW9uICovCi0gICAgICBpZiAoZGF0YV9wdHIgIT0gTlVMTCAmJiBkYXRhX2xlbiA+PSA1ICYmCi0gICAgICAgICAgR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhX3B0cikgPT0gMHgwMDAwMDFiMCkgewotICAgICAgICBnc3RfY29kZWNfdXRpbHNfbXBlZzR2aWRlb19jYXBzX3NldF9sZXZlbF9hbmRfcHJvZmlsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgZGF0YV9wdHIgKyA0LCBkYXRhX2xlbiAtIDQpOwotICAgICAgfQotICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHNwZWNpYWwgbmVlZGVkIGhlcmUgKi8KLSAgICBjYXNlIDB4MjE6ICAgICAgICAgICAgICAgICAvKiBILjI2NCAqLwotICAgICAgY29kZWNfbmFtZSA9ICJILjI2NCAvIEFWQyI7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2NCIsCi0gICAgICAgICAgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiYXZjIiwKLSAgICAgICAgICAiYWxpZ25tZW50IiwgR19UWVBFX1NUUklORywgImF1IiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDB4NDA6ICAgICAgICAgICAgICAgICAvKiBBQUMgKGFueSkgKi8KLSAgICBjYXNlIDB4NjY6ICAgICAgICAgICAgICAgICAvKiBBQUMgTWFpbiAqLwotICAgIGNhc2UgMHg2NzogICAgICAgICAgICAgICAgIC8qIEFBQyBMQyAqLwotICAgIGNhc2UgMHg2ODogICAgICAgICAgICAgICAgIC8qIEFBQyBTU1IgKi8KLSAgICAgIC8qIE92ZXJyaWRlIGNoYW5uZWxzIGFuZCByYXRlIGJhc2VkIG9uIHRoZSBjb2RlY19kYXRhLCBhcyBpdCdzIG9mdGVuCi0gICAgICAgKiB3cm9uZy4gKi8KLSAgICAgIC8qIE9ubHkgZG8gc28gZm9yIGJhc2ljIHNldHVwIHdpdGhvdXQgSEUtQUFDIGV4dGVuc2lvbiAqLwotICAgICAgaWYgKGRhdGFfcHRyICYmIGRhdGFfbGVuID09IDIpIHsKLSAgICAgICAgZ3VpbnQgY2hhbm5lbHMsIHJhdGU7Ci0KLSAgICAgICAgY2hhbm5lbHMgPSBnc3RfY29kZWNfdXRpbHNfYWFjX2dldF9jaGFubmVscyAoZGF0YV9wdHIsIGRhdGFfbGVuKTsKLSAgICAgICAgaWYgKGNoYW5uZWxzID4gMCkKLSAgICAgICAgICBzdHJlYW0tPm5fY2hhbm5lbHMgPSBjaGFubmVsczsKLQotICAgICAgICByYXRlID0gZ3N0X2NvZGVjX3V0aWxzX2FhY19nZXRfc2FtcGxlX3JhdGUgKGRhdGFfcHRyLCBkYXRhX2xlbik7Ci0gICAgICAgIGlmIChyYXRlID4gMCkKLSAgICAgICAgICBzdHJlYW0tPnJhdGUgPSByYXRlOwotICAgICAgfQotCi0gICAgICAvKiBTZXQgbGV2ZWwgYW5kIHByb2ZpbGUgaWYgcG9zc2libGUgKi8KLSAgICAgIGlmIChkYXRhX3B0ciAhPSBOVUxMICYmIGRhdGFfbGVuID49IDIpIHsKLSAgICAgICAgZ3N0X2NvZGVjX3V0aWxzX2FhY19jYXBzX3NldF9sZXZlbF9hbmRfcHJvZmlsZSAoc3RyZWFtLT5jYXBzLAotICAgICAgICAgICAgZGF0YV9wdHIsIGRhdGFfbGVuKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpwcm9maWxlX3N0ciA9IE5VTEw7Ci0gICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyOwotICAgICAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICAgICAgZ3VpbnQ4ICpjb2RlY19kYXRhOwotICAgICAgICBnaW50IHJhdGVfaWR4LCBwcm9maWxlOwotCi0gICAgICAgIC8qIE5vIGNvZGVjX2RhdGEsIGxldCdzIGludmVudCBzb21ldGhpbmcuCi0gICAgICAgICAqIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciBTQlIhICovCi0KLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChxdGRlbXV4LCAiTm8gY29kZWNfZGF0YSBmb3IgQUFDIGF2YWlsYWJsZSIpOwotCi0gICAgICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMik7Ci0gICAgICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgICAgICBjb2RlY19kYXRhID0gbWFwLmRhdGE7Ci0KLSAgICAgICAgcmF0ZV9pZHggPQotICAgICAgICAgICAgZ3N0X2NvZGVjX3V0aWxzX2FhY19nZXRfaW5kZXhfZnJvbV9zYW1wbGVfcmF0ZSAoc3RyZWFtLT5yYXRlKTsKLQotICAgICAgICBzd2l0Y2ggKG9iamVjdF90eXBlX2lkKSB7Ci0gICAgICAgICAgY2FzZSAweDY2OgotICAgICAgICAgICAgcHJvZmlsZV9zdHIgPSAibWFpbiI7Ci0gICAgICAgICAgICBwcm9maWxlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMHg2NzoKLSAgICAgICAgICAgIHByb2ZpbGVfc3RyID0gImxjIjsKLSAgICAgICAgICAgIHByb2ZpbGUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAweDY4OgotICAgICAgICAgICAgcHJvZmlsZV9zdHIgPSAic3NyIjsKLSAgICAgICAgICAgIHByb2ZpbGUgPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByb2ZpbGUgPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjb2RlY19kYXRhWzBdID0gKChwcm9maWxlICsgMSkgPDwgMykgfCAoKHJhdGVfaWR4ICYgMHhFKSA+PiAxKTsKLSAgICAgICAgY29kZWNfZGF0YVsxXSA9ICgocmF0ZV9pZHggJiAweDEpIDw8IDcpIHwgKHN0cmVhbS0+bl9jaGFubmVscyA8PCAzKTsKLQotICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLAotICAgICAgICAgICAgYnVmZmVyLCBOVUxMKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAgICAgICBpZiAocHJvZmlsZV9zdHIpIHsKLSAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzdHJlYW0tPmNhcHMsICJwcm9maWxlIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgICAgICAgcHJvZmlsZV9zdHIsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDB4NjA6ICAgICAgICAgICAgICAgICAvKiBNUEVHLTIsIHZhcmlvdXMgcHJvZmlsZXMgKi8KLSAgICBjYXNlIDB4NjE6Ci0gICAgY2FzZSAweDYyOgotICAgIGNhc2UgMHg2MzoKLSAgICBjYXNlIDB4NjQ6Ci0gICAgY2FzZSAweDY1OgotICAgICAgY29kZWNfbmFtZSA9ICJNUEVHLTIgdmlkZW8iOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby9tcGVnIiwKLSAgICAgICAgICAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAyLAotICAgICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDY5OiAgICAgICAgICAgICAgICAgLyogTVBFRy0yIEJDIGF1ZGlvICovCi0gICAgY2FzZSAweDZCOiAgICAgICAgICAgICAgICAgLyogTVBFRy0xIGF1ZGlvICovCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEsICJwYXJzZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgICBjb2RlY19uYW1lID0gIk1QRUctMSBhdWRpbyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDB4NkE6ICAgICAgICAgICAgICAgICAvKiBNUEVHLTEgKi8KLSAgICAgIGNvZGVjX25hbWUgPSAiTVBFRy0xIHZpZGVvIjsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZyIsCi0gICAgICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICAgICAic3lzdGVtc3RyZWFtIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMHg2QzogICAgICAgICAgICAgICAgIC8qIE1KUEVHICovCi0gICAgICBjYXBzID0KLSAgICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgiaW1hZ2UvanBlZyIsICJwYXJzZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGNvZGVjX25hbWUgPSAiTW90aW9uLUpQRUciOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDZEOiAgICAgICAgICAgICAgICAgLyogUE5HICovCi0gICAgICBjYXBzID0KLSAgICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgiaW1hZ2UvcG5nIiwgInBhcnNlZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgICAgIE5VTEwpOwotICAgICAgY29kZWNfbmFtZSA9ICJQTkcgc3RpbGwgaW1hZ2VzIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMHg2RTogICAgICAgICAgICAgICAgIC8qIEpQRUcyMDAwICovCi0gICAgICBjb2RlY19uYW1lID0gIkpQRUctMjAwMCI7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImltYWdlL3gtajJjIiwgImZpZWxkcyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweEE0OiAgICAgICAgICAgICAgICAgLyogRGlyYWMgKi8KLSAgICAgIGNvZGVjX25hbWUgPSAiRGlyYWMiOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LWRpcmFjIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDB4QTU6ICAgICAgICAgICAgICAgICAvKiBBQzMgKi8KLSAgICAgIGNvZGVjX25hbWUgPSAiQUMtMyBhdWRpbyI7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtYWMzIiwKLSAgICAgICAgICAiZnJhbWVkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweEE5OiAgICAgICAgICAgICAgICAgLyogQUMzICovCi0gICAgICBjb2RlY19uYW1lID0gIkRUUyBhdWRpbyI7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtZHRzIiwKLSAgICAgICAgICAiZnJhbWVkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweEUxOiAgICAgICAgICAgICAgICAgLyogUUNFTFAgKi8KLSAgICAgIC8qIFFDRUxQLCB0aGUgY29kZWNfZGF0YSBpcyBhIHJpZmYgdGFnIChsaXR0bGUgZW5kaWFuKSB3aXRoCi0gICAgICAgKiBtb3JlIGluZm8gKGh0dHA6Ly9mdHAuM2dwcDIub3JnL1RTR0MvV29ya2luZy8yMDAzLzIwMDMtMDUtU2FuRGllZ28vVFNHLUMtMjAwMy0wNS1TYW4lMjBEaWVnby9XRzEvU1dHMTIvQzEyLTIwMDMwNTEyLTAwNiUyMD0lMjBDMTItMjAwMzAyMTctMDE1X0RyYWZ0X0Jhc2VsaW5lJTIwVGV4dCUyMG9mJTIwRkZNU19SMi5kb2MpLiAqLwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby9xY2VscCIpOwotICAgICAgY29kZWNfbmFtZSA9ICJRQ0VMUCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBJZiB3ZSBoYXZlIGEgcmVwbGFjZW1lbnQgY2FwcywgdGhlbiBjaGFuZ2Ugb3VyIGNhcHMgZm9yIHRoaXMgc3RyZWFtICovCi0gIGlmIChjYXBzKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHN0cmVhbS0+Y2Fwcyk7Ci0gICAgc3RyZWFtLT5jYXBzID0gY2FwczsKLSAgfQotCi0gIGlmIChjb2RlY19uYW1lICYmIGxpc3QpCi0gICAgZ3N0X3RhZ19saXN0X2FkZCAobGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICBHU1RfVEFHX0FVRElPX0NPREVDLCBjb2RlY19uYW1lLCBOVUxMKTsKLQotICAvKiBBZGQgdGhlIGNvZGVjX2RhdGEgYXR0cmlidXRlIHRvIGNhcHMsIGlmIHdlIGhhdmUgaXQgKi8KLSAgaWYgKGRhdGFfcHRyKSB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGRhdGFfbGVuKTsKLSAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZmZlciwgMCwgZGF0YV9wdHIsIGRhdGFfbGVuKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHF0ZGVtdXgsICJzZXR0aW5nIGNvZGVjX2RhdGEgZnJvbSBlc2RzIik7Ci0gICAgR1NUX01FTURVTVBfT0JKRUNUIChxdGRlbXV4LCAiY29kZWNfZGF0YSBmcm9tIGVzZHMiLCBkYXRhX3B0ciwgZGF0YV9sZW4pOwotCi0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3RyZWFtLT5jYXBzLCAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwKLSAgICAgICAgYnVmZmVyLCBOVUxMKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBHc3RDYXBzICoKLV9nZXRfdW5rbm93bl9jb2RlY19uYW1lIChjb25zdCBnY2hhciAqIHR5cGUsIGd1aW50MzIgZm91cmNjKQotewotICBHc3RDYXBzICpjYXBzOwotICBndWludCBpOwotICBjaGFyICpzLCBmb3Vyc3RyWzVdOwotCi0gIGdfc25wcmludGYgKGZvdXJzdHIsIDUsICIlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotICAgIGlmICghZ19hc2NpaV9pc2FsbnVtIChmb3Vyc3RyW2ldKSkKLSAgICAgIGZvdXJzdHJbaV0gPSAnXyc7Ci0gIH0KLSAgcyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzL3gtZ3N0LWZvdXJjYy0lcyIsIHR5cGUsIGdfc3Ryc3RyaXAgKGZvdXJzdHIpKTsKLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKHMpOwotICBnX2ZyZWUgKHMpOwotICByZXR1cm4gY2FwczsKLX0KLQotI2RlZmluZSBfY29kZWMobmFtZSkgXAotICBkbyB7IFwKLSAgICBpZiAoY29kZWNfbmFtZSkgeyBcCi0gICAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwIChuYW1lKTsgXAotICAgIH0gXAotICB9IHdoaWxlICgwKQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1xdGRlbXV4X3ZpZGVvX2NhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIGd1aW50MzIgZm91cmNjLCBjb25zdCBndWludDggKiBzdHNkX2RhdGEsIGdjaGFyICoqIGNvZGVjX25hbWUpCi17Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1VOS05PV047Ci0KLSAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3AnLCAnbicsICdnJywgJyAnKToKLSAgICAgIF9jb2RlYyAoIlBORyBzdGlsbCBpbWFnZXMiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiaW1hZ2UvcG5nIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19qcGVnOgotICAgICAgX2NvZGVjICgiSlBFRyBzdGlsbCBpbWFnZXMiKTsKLSAgICAgIGNhcHMgPQotICAgICAgICAgIGdzdF9jYXBzX25ld19zaW1wbGUgKCJpbWFnZS9qcGVnIiwgInBhcnNlZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLAotICAgICAgICAgIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdtJywgJ2onLCAncCcsICdhJyk6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdBJywgJ1YnLCAnRCcsICdKJyk6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdNJywgJ0onLCAnUCcsICdHJyk6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdkJywgJ20nLCAnYicsICcxJyk6Ci0gICAgICBfY29kZWMgKCJNb3Rpb24tSlBFRyIpOwotICAgICAgY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImltYWdlL2pwZWciLCAicGFyc2VkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ20nLCAnaicsICdwJywgJ2InKToKLSAgICAgIF9jb2RlYyAoIk1vdGlvbi1KUEVHIGZvcm1hdCBCIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtbWpwZWctYiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfbWpwMjoKLSAgICAgIF9jb2RlYyAoIkpQRUctMjAwMCIpOwotICAgICAgLyogb3ZlcnJpZGUgdG8gd2hhdCBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHNwZWMsIGF2b2lkIHBhbGV0dGVfZGF0YSAqLwotICAgICAgc3RyZWFtLT5iaXRzX3Blcl9zYW1wbGUgPSAyNDsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiaW1hZ2UveC1qMmMiLCAiZmllbGRzIiwgR19UWVBFX0lOVCwgMSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19TVlEzOgotICAgICAgX2NvZGVjICgiU29yZW5zZW4gdmlkZW8gdi4zIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtc3ZxIiwKLSAgICAgICAgICAic3ZxdmVyc2lvbiIsIEdfVFlQRV9JTlQsIDMsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdzJywgJ3YnLCAncScsICdpJyk6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdTJywgJ1YnLCAnUScsICcxJyk6Ci0gICAgICBfY29kZWMgKCJTb3JlbnNlbiB2aWRlbyB2LjEiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1zdnEiLAotICAgICAgICAgICJzdnF2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ1cnLCAnUicsICdBJywgJ1cnKToKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1yYXciKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiUkdCOFAiLCBOVUxMKTsKLSAgICAgIF9jb2RlYyAoIldpbmRvd3MgUmF3IFJHQiIpOwotICAgICAgc3RyZWFtLT5hbGlnbm1lbnQgPSAzMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX3Jhd186Ci0gICAgewotICAgICAgZ3VpbnQxNiBicHM7Ci0KLSAgICAgIGJwcyA9IFFUX1VJTlQxNiAoc3RzZF9kYXRhICsgOTgpOwotICAgICAgc3dpdGNoIChicHMpIHsKLSAgICAgICAgY2FzZSAxNToKLSAgICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1JHQjE1OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE2OgotICAgICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfUkdCMTY7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9SR0I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzI6Ci0gICAgICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIC8qIHVua25vd24gKi8KLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3knLCAndicsICcxJywgJzInKToKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfSTQyMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneScsICd1JywgJ3YnLCAnMicpOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnWScsICd1JywgJ3YnLCAnMicpOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfMnZ1eToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJzInLCAnVicsICd1JywgJ3knKToKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfVVlWWTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgndicsICczJywgJzAnLCAnOCcpOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF92MzA4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd2JywgJzInLCAnMScsICc2Jyk6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX3YyMTY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ192MjEwOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF92MjEwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdyJywgJzInLCAnMScsICcwJyk6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX3IyMTA7Ci0gICAgICBicmVhazsKLSAgICAgIC8qIFBhY2tlZCBZVVYgNDo0OjQgMTAgYml0IGluIDMyIGJpdHMsIGNvbXBsZXgKLSAgICAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgndicsICc0JywgJzEnLCAnMCcpOgotICAgICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF92NDEwOwotICAgICAgICAgYnJlYWs7Ci0gICAgICAgKi8KLSAgICAgIC8qIFBhY2tlZCBZVVYgNDo0OjQ6NCA4IGJpdCBpbiAzMiBiaXRzCi0gICAgICAgKiBidXQgZGlmZmVyZW50IG9yZGVyIHRoYW4gQVlVVgotICAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgndicsICc0JywgJzAnLCAnOCcpOgotICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfdjQwODsKLSAgICAgICBicmVhazsKLSAgICAgICAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnbScsICdwJywgJ2UnLCAnZycpOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnbScsICdwJywgJ2cnLCAnMScpOgotICAgICAgX2NvZGVjICgiTVBFRy0xIHZpZGVvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL21wZWciLCAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAxLAotICAgICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdoJywgJ2QnLCAndicsICcxJyk6IC8qIEhEViA3MjBwMzAgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2gnLCAnZCcsICd2JywgJzInKTogLyogSERWIDEwODBpNjAgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2gnLCAnZCcsICd2JywgJzMnKTogLyogSERWIDEwODBpNTAgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2gnLCAnZCcsICd2JywgJzQnKTogLyogSERWIDcyMHAyNCAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnaCcsICdkJywgJ3YnLCAnNScpOiAvKiBIRFYgNzIwcDI1ICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdoJywgJ2QnLCAndicsICc2Jyk6IC8qIEhEViAxMDgwcDI0ICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdoJywgJ2QnLCAndicsICc3Jyk6IC8qIEhEViAxMDgwcDI1ICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdoJywgJ2QnLCAndicsICc4Jyk6IC8qIEhEViAxMDgwcDMwICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdoJywgJ2QnLCAndicsICc5Jyk6IC8qIEhEViA3MjBwNjAgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2gnLCAnZCcsICd2JywgJ2EnKTogLyogSERWIDcyMHA1MCAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnbScsICd4JywgJzUnLCAnbicpOiAvKiBNUEVHMiBJTVggTlRTQyA1MjUvNjAgNTBtYi9zIHByb2R1Y2VkIGJ5IEZDUCAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnbScsICd4JywgJzUnLCAncCcpOiAvKiBNUEVHMiBJTVggUEFMIDYyNS82MCA1MG1iL3MgcHJvZHVjZWQgYnkgRkNQICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdtJywgJ3gnLCAnNCcsICduJyk6IC8qIE1QRUcyIElNWCBOVFNDIDUyNS82MCA0MG1iL3MgcHJvZHVjZWQgYnkgRkNQICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdtJywgJ3gnLCAnNCcsICdwJyk6IC8qIE1QRUcyIElNWCBQQUwgNjI1LzYwIDQwbWIvcyBwcm9kdWNlZCBieSBGQ1AgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ20nLCAneCcsICczJywgJ24nKTogLyogTVBFRzIgSU1YIE5UU0MgNTI1LzYwIDMwbWIvcyBwcm9kdWNlZCBieSBGQ1AgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ20nLCAneCcsICczJywgJ3AnKTogLyogTVBFRzIgSU1YIFBBTCA2MjUvNTAgMzBtYi9zIHByb2R1Y2VkIGJ5IEZDUCAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJ3YnLCAnMScpOiAvKiBYRENBTSBIRCA3MjBwMzAgMzVNYi9zICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAndicsICcyJyk6IC8qIFhEQ0FNIEhEIDEwODBpNjAgMzVNYi9zICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAndicsICczJyk6IC8qIFhEQ0FNIEhEIDEwODBpNTAgMzVNYi9zICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAndicsICc0Jyk6IC8qIFhEQ0FNIEhEIDcyMHAyNCAzNU1iL3MgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3gnLCAnZCcsICd2JywgJzUnKTogLyogWERDQU0gSEQgNzIwcDI1IDM1TWIvcyAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJ3YnLCAnNicpOiAvKiBYRENBTSBIRCAxMDgwcDI0IDM1TWIvcyAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJ3YnLCAnNycpOiAvKiBYRENBTSBIRCAxMDgwcDI1IDM1TWIvcyAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJ3YnLCAnOCcpOiAvKiBYRENBTSBIRCAxMDgwcDMwIDM1TWIvcyAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJ3YnLCAnOScpOiAvKiBYRENBTSBIRCA3MjBwNjAgMzVNYi9zICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAndicsICdhJyk6IC8qIFhEQ0FNIEhEIDcyMHA1MCAzNU1iL3MgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3gnLCAnZCcsICd2JywgJ2InKTogLyogWERDQU0gRVggMTA4MGk2MCA1ME1iL3MgQ0JSICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAndicsICdjJyk6IC8qIFhEQ0FNIEVYIDEwODBpNTAgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJ3YnLCAnZCcpOiAvKiBYRENBTSBIRCAxMDgwcDI0IDUwTWIvcyBDQlIgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3gnLCAnZCcsICd2JywgJ2UnKTogLyogWERDQU0gSEQgMTA4MHAyNSA1ME1iL3MgQ0JSICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAndicsICdmJyk6IC8qIFhEQ0FNIEhEIDEwODBwMzAgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnMScpOiAvKiBYRENBTSBIRDQyMiA3MjBwMzAgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnNCcpOiAvKiBYRENBTSBIRDQyMiA3MjBwMjQgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnNScpOiAvKiBYRENBTSBIRDQyMiA3MjBwMjUgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnOScpOiAvKiBYRENBTSBIRDQyMiA3MjBwNjAgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnYScpOiAvKiBYRENBTSBIRDQyMiA3MjBwNTAgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnYicpOiAvKiBYRENBTSBIRDQyMiAxMDgwaTUwIDUwTWIvcyBDQlIgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3gnLCAnZCcsICc1JywgJ2MnKTogLyogWERDQU0gSEQ0MjIgMTA4MGk1MCA1ME1iL3MgQ0JSICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAnNScsICdkJyk6IC8qIFhEQ0FNIEhENDIyIDEwODBwMjQgNTBNYi9zIENCUiAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICdkJywgJzUnLCAnZScpOiAvKiBYRENBTSBIRDQyMiAxMDgwcDI1IDUwTWIvcyBDQlIgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3gnLCAnZCcsICc1JywgJ2YnKTogLyogWERDQU0gSEQ0MjIgMTA4MHAzMCA1ME1iL3MgQ0JSICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCd4JywgJ2QnLCAnaCcsICdkJyk6IC8qIFhEQ0FNIEhEIDU0MHAgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ3gnLCAnZCcsICdoJywgJzInKTogLyogWERDQU0gSEQ0MjIgNTQwcCAqLwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnQScsICdWJywgJ20nLCAncCcpOiAvKiBBVklEIElNWCBQQUwgKi8KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ20nLCAncCcsICdnJywgJzInKTogLyogQVZJRCBJTVggUEFMICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdtJywgJ3AnLCAnMicsICd2Jyk6IC8qIEFWSUQgSU1YIFBBTCAqLwotICAgICAgX2NvZGVjICgiTVBFRy0yIHZpZGVvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL21wZWciLCAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAyLAotICAgICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdnJywgJ2knLCAnZicsICcgJyk6Ci0gICAgICBfY29kZWMgKCJHSUYgc3RpbGwgaW1hZ2VzIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImltYWdlL2dpZiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfaDI2MzoKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0gnLCAnMicsICc2JywgJzMnKToKLSAgICBjYXNlIEZPVVJDQ19zMjYzOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnVScsICcyJywgJzYnLCAnMycpOgotICAgICAgX2NvZGVjICgiSC4yNjMiKTsKLSAgICAgIC8qIGZmbXBlZyB1c2VzIHRoZSBoZWlnaHQvd2lkdGggcHJvcHMsIGRvbid0IGtub3cgd2h5ICovCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2MyIsCi0gICAgICAgICAgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAiaXR1IiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19tcDR2OgotICAgIGNhc2UgRk9VUkNDX01QNFY6Ci0gICAgICBfY29kZWMgKCJNUEVHLTQgdmlkZW8iKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZyIsICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQsCi0gICAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJzMnLCAnaScsICd2JywgJ2QnKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJzMnLCAnSScsICdWJywgJ0QnKToKLSAgICAgIF9jb2RlYyAoIk1pY3Jvc29mdCBNUEVHLTQgNC4zIik7ICAvKiBGSVhNRT8gKi8KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1tc21wZWciLAotICAgICAgICAgICJtc21wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNDMsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdEJywgJ0knLCAnVicsICczJyk6Ci0gICAgICBfY29kZWMgKCJEaXZYIDMiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1kaXZ4IiwKLSAgICAgICAgICAiZGl2eHZlcnNpb24iLCBHX1RZUEVfSU5ULCAzLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnRCcsICdJJywgJ1YnLCAnWCcpOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnZCcsICdpJywgJ3YnLCAneCcpOgotICAgICAgX2NvZGVjICgiRGl2WCA0Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZGl2eCIsCi0gICAgICAgICAgImRpdnh2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNCwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnWCcsICc1JywgJzAnKToKLSAgICAgIF9jb2RlYyAoIkRpdlggNSIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWRpdngiLAotICAgICAgICAgICJkaXZ4dmVyc2lvbiIsIEdfVFlQRV9JTlQsIDUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0YnLCAnRicsICdWJywgJzEnKToKLSAgICAgIF9jb2RlYyAoIkZGVjEiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1mZnYiLAotICAgICAgICAgICJmZnZ2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMSwgTlVMTCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnMycsICdJJywgJ1YnLCAnMScpOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnMycsICdJJywgJ1YnLCAnMicpOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnWCcsICdWJywgJ0knLCAnRCcpOgotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgneCcsICd2JywgJ2knLCAnZCcpOgotICAgIGNhc2UgRk9VUkNDX0ZNUDQ6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdVJywgJ00nLCAnUCcsICc0Jyk6Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQsIE5VTEwpOwotICAgICAgX2NvZGVjICgiTVBFRy00Iik7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnYycsICd2JywgJ2knLCAnZCcpOgotICAgICAgX2NvZGVjICgiQ2luZXBhayIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LWNpbmVwYWsiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgncScsICdkJywgJ3InLCAndycpOgotICAgICAgX2NvZGVjICgiQXBwbGUgUXVpY2tEcmF3Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtcWRydyIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdyJywgJ3AnLCAneicsICdhJyk6Ci0gICAgICBfY29kZWMgKCJBcHBsZSB2aWRlbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LWFwcGxlLXZpZGVvIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19IMjY0OgotICAgIGNhc2UgRk9VUkNDX2F2YzE6Ci0gICAgICBfY29kZWMgKCJILjI2NCAvIEFWQyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWgyNjQiLAotICAgICAgICAgICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImF2YyIsCi0gICAgICAgICAgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJhdSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYXZjMzoKLSAgICAgIF9jb2RlYyAoIkguMjY0IC8gQVZDIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2NCIsCi0gICAgICAgICAgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiYXZjMyIsCi0gICAgICAgICAgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJhdSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfSDI2NToKLSAgICBjYXNlIEZPVVJDQ19odmMxOgotICAgICAgX2NvZGVjICgiSC4yNjUgLyBIRVZDIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2NSIsCi0gICAgICAgICAgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiaHZjMSIsCi0gICAgICAgICAgImFsaWdubWVudCIsIEdfVFlQRV9TVFJJTkcsICJhdSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfaGV2MToKLSAgICAgIF9jb2RlYyAoIkguMjY1IC8gSEVWQyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWgyNjUiLAotICAgICAgICAgICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImhldjEiLAotICAgICAgICAgICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX3JsZV86Ci0gICAgICBfY29kZWMgKCJSdW4tbGVuZ3RoIGVuY29kaW5nIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmxlIiwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgInF1aWNrdGltZSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfV1JMRToKLSAgICAgIF9jb2RlYyAoIlJ1bi1sZW5ndGggZW5jb2RpbmciKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1ybGUiLAotICAgICAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAibWljcm9zb2Z0IiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0knLCAnVicsICczJywgJzInKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2knLCAndicsICczJywgJzInKToKLSAgICAgIF9jb2RlYyAoIkluZGVvIFZpZGVvIDMiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1pbmRlbyIsCi0gICAgICAgICAgImluZGVvdmVyc2lvbiIsIEdfVFlQRV9JTlQsIDMsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdJJywgJ1YnLCAnNCcsICcxJyk6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdpJywgJ3YnLCAnNCcsICcxJyk6Ci0gICAgICBfY29kZWMgKCJJbnRlbCBWaWRlbyA0Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaW5kZW8iLAotICAgICAgICAgICJpbmRlb3ZlcnNpb24iLCBHX1RZUEVfSU5ULCA0LCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX2R2Y3A6Ci0gICAgY2FzZSBGT1VSQ0NfZHZjXzoKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2QnLCAndicsICdzJywgJ2QnKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnVicsICdTJywgJ0QnKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2QnLCAndicsICdjJywgJ3MnKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnVicsICdDJywgJ1MnKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2QnLCAndicsICcyJywgJzUnKToKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2QnLCAndicsICdwJywgJ3AnKToKLSAgICAgIF9jb2RlYyAoIkRWIFZpZGVvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZHYiLCAiZHZ2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMjUsCi0gICAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19kdjVuOiAgICAgICAgICAvKiBEVkNQUk81MCBOVFNDICovCi0gICAgY2FzZSBGT1VSQ0NfZHY1cDogICAgICAgICAgLyogRFZDUFJPNTAgUEFMICovCi0gICAgICBfY29kZWMgKCJEVkNQcm81MCBWaWRlbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWR2IiwgImR2dmVyc2lvbiIsIEdfVFlQRV9JTlQsIDUwLAotICAgICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdkJywgJ3YnLCAnaCcsICc1Jyk6IC8qIERWQ1BSTyBIRCA1MGkgcHJvZHVjZWQgYnkgRkNQICovCi0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdkJywgJ3YnLCAnaCcsICc2Jyk6IC8qIERWQ1BSTyBIRCA2MGkgcHJvZHVjZWQgYnkgRkNQICovCi0gICAgICBfY29kZWMgKCJEVkNQcm9IRCBWaWRlbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWR2IiwgImR2dmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEwMCwKLSAgICAgICAgICAic3lzdGVtc3RyZWFtIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgncycsICdtJywgJ2MnLCAnICcpOgotICAgICAgX2NvZGVjICgiQXBwbGUgR3JhcGhpY3MgKFNNQykiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1zbWMiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnVicsICdQJywgJzMnLCAnMScpOgotICAgICAgX2NvZGVjICgiVlAzIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtdnAzIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ1YnLCAnUCcsICc2JywgJ0YnKToKLSAgICAgIF9jb2RlYyAoIlZQNiBGbGFzaCIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LXZwNi1mbGFzaCIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfWGlUaDoKLSAgICAgIF9jb2RlYyAoIlRoZW9yYSIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LXRoZW9yYSIpOwotICAgICAgLyogdGhlb3JhIHVzZXMgb25lIGJ5dGUgb2YgcGFkZGluZyBpbiB0aGUgZGF0YSBzdHJlYW0gYmVjYXVzZSBpdCBkb2VzIG5vdAotICAgICAgICogYWxsb3cgMCBzaXplZCBwYWNrZXRzIHdoaWxlIHRoZW9yYSBkb2VzICovCi0gICAgICBzdHJlYW0tPnBhZGRpbmcgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfZHJhYzoKLSAgICAgIF9jb2RlYyAoIkRpcmFjIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtZGlyYWMiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgndCcsICdpJywgJ2YnLCAnZicpOgotICAgICAgX2NvZGVjICgiVElGRiBzdGlsbCBpbWFnZXMiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiaW1hZ2UvdGlmZiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdpJywgJ2MnLCAnbycsICdkJyk6Ci0gICAgICBfY29kZWMgKCJBcHBsZSBJbnRlcm1lZGlhdGUgQ29kZWMiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtYXBwbGUtaW50ZXJtZWRpYXRlLWNvZGVjIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ0EnLCAnVicsICdkJywgJ24nKToKLSAgICAgIF9jb2RlYyAoIkFWSUQgRE54SEQiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoInZpZGVvL3gtZG54aGQiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX1ZQODA6Ci0gICAgICBfY29kZWMgKCJPbjIgVlA4Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJ2aWRlby94LXZwOCIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYXBjczoKLSAgICAgIF9jb2RlYyAoIkFwcGxlIFByb1JlcyBMVCIpOwotICAgICAgY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcHJvcmVzIiwgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAibHQiLAotICAgICAgICAgIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYXBjaDoKLSAgICAgIF9jb2RlYyAoIkFwcGxlIFByb1JlcyBIUSIpOwotICAgICAgY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcHJvcmVzIiwgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAiaHEiLAotICAgICAgICAgIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYXBjbjoKLSAgICAgIF9jb2RlYyAoIkFwcGxlIFByb1JlcyIpOwotICAgICAgY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcHJvcmVzIiwgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJzdGFuZGFyZCIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYXBjbzoKLSAgICAgIF9jb2RlYyAoIkFwcGxlIFByb1JlcyBQcm94eSIpOwotICAgICAgY2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcHJvcmVzIiwgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJwcm94eSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYXA0aDoKLSAgICAgIF9jb2RlYyAoIkFwcGxlIFByb1JlcyA0NDQ0Iik7Ci0gICAgICBjYXBzID0KLSAgICAgICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1wcm9yZXMiLCAidmFyaWFudCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgIjQ0NDQiLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX3ZjXzE6Ci0gICAgY2FzZSBGT1VSQ0Nfb3ZjMToKLSAgICAgIF9jb2RlYyAoIlZDLTEiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC13bXYiLAotICAgICAgICAgICJ3bXZ2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMywgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJXVkMxIiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2snLCAncCcsICdjJywgJ2QnKToKLSAgICBkZWZhdWx0OgotICAgIHsKLSAgICAgIGNhcHMgPSBfZ2V0X3Vua25vd25fY29kZWNfbmFtZSAoInZpZGVvIiwgZm91cmNjKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmIChmb3JtYXQgIT0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOKSB7Ci0gICAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgICBnc3RfdmlkZW9faW5mb19pbml0ICgmaW5mbyk7Ci0gICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCAoJmluZm8sIGZvcm1hdCwgc3RyZWFtLT53aWR0aCwgc3RyZWFtLT5oZWlnaHQpOwotCi0gICAgY2FwcyA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMgKCZpbmZvKTsKLSAgICAqY29kZWNfbmFtZSA9IGdzdF9wYl91dGlsc19nZXRfY29kZWNfZGVzY3JpcHRpb24gKGNhcHMpOwotCi0gICAgLyogZW5hYmxlIGNsaXBwaW5nIGZvciByYXcgdmlkZW8gc3RyZWFtcyAqLwotICAgIHN0cmVhbS0+bmVlZF9jbGlwID0gVFJVRTsKLSAgICBzdHJlYW0tPmFsaWdubWVudCA9IDMyOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBndWludAotcm91bmRfdXBfcG93MiAoZ3VpbnQgbikKLXsKLSAgbiA9IG4gLSAxOwotICBuID0gbiB8IChuID4+IDEpOwotICBuID0gbiB8IChuID4+IDIpOwotICBuID0gbiB8IChuID4+IDQpOwotICBuID0gbiB8IChuID4+IDgpOwotICBuID0gbiB8IChuID4+IDE2KTsKLSAgcmV0dXJuIG4gKyAxOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1xdGRlbXV4X2F1ZGlvX2NhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIGd1aW50MzIgZm91cmNjLCBjb25zdCBndWludDggKiBkYXRhLCBpbnQgbGVuLCBnY2hhciAqKiBjb2RlY19uYW1lKQotewotICBHc3RDYXBzICpjYXBzOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBnaW50IGVuZGlhbiA9IDA7Ci0gIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdCA9IDA7Ci0gIGdpbnQgZGVwdGg7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInJlc29sdmUgZm91cmNjIDB4JTA4eCIsIEdVSU5UMzJfVE9fQkUgKGZvdXJjYykpOwotCi0gIGRlcHRoID0gc3RyZWFtLT5ieXRlc19wZXJfcGFja2V0ICogODsKLQotICBzd2l0Y2ggKGZvdXJjYykgewotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnTicsICdPJywgJ04nLCAnRScpOgotICAgIGNhc2UgRk9VUkNDX3Jhd186Ci0gICAgICAvKiA4LWJpdCBhdWRpbyBpcyB1bnNpZ25lZCAqLwotICAgICAgaWYgKGRlcHRoID09IDgpCi0gICAgICAgIGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfVTg7Ci0gICAgICAvKiBvdGhlcndpc2UgaXQncyBzaWduZWQgYW5kIGJpZy1lbmRpYW4ganVzdCBsaWtlICd0d29zJyAqLwotICAgIGNhc2UgRk9VUkNDX3R3b3M6Ci0gICAgICBlbmRpYW4gPSBHX0JJR19FTkRJQU47Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICBjYXNlIEZPVVJDQ19zb3d0OgotICAgIHsKLSAgICAgIGdjaGFyICpzdHI7Ci0KLSAgICAgIGlmICghZW5kaWFuKQotICAgICAgICBlbmRpYW4gPSBHX0xJVFRMRV9FTkRJQU47Ci0KLSAgICAgIGlmICghZm9ybWF0KQotICAgICAgICBmb3JtYXQgPSBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIgKFRSVUUsIGVuZGlhbiwgZGVwdGgsIGRlcHRoKTsKLQotICAgICAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiUmF3ICVkLWJpdCBQQ00gYXVkaW8iLCBkZXB0aCk7Ci0gICAgICBfY29kZWMgKHN0cik7Ci0gICAgICBnX2ZyZWUgKHN0cik7Ci0KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBnc3RfYXVkaW9fZm9ybWF0X3RvX3N0cmluZyAoZm9ybWF0KSwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0gICAgICBzdHJlYW0tPmFsaWdubWVudCA9IEdTVF9ST1VORF9VUF84IChkZXB0aCk7Ci0gICAgICBzdHJlYW0tPmFsaWdubWVudCA9IHJvdW5kX3VwX3BvdzIgKHN0cmVhbS0+YWxpZ25tZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2YnLCAnbCcsICc2JywgJzQnKToKLSAgICAgIF9jb2RlYyAoIlJhdyA2NC1iaXQgZmxvYXRpbmctcG9pbnQgYXVkaW8iKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiRjY0QkUiLAotICAgICAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAiaW50ZXJsZWF2ZWQiLCBOVUxMKTsKLSAgICAgIHN0cmVhbS0+YWxpZ25tZW50ID0gODsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnZicsICdsJywgJzMnLCAnMicpOgotICAgICAgX2NvZGVjICgiUmF3IDMyLWJpdCBmbG9hdGluZy1wb2ludCBhdWRpbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJGMzJCRSIsCi0gICAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJpbnRlcmxlYXZlZCIsIE5VTEwpOwotICAgICAgc3RyZWFtLT5hbGlnbm1lbnQgPSA0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfaW4yNDoKLSAgICAgIF9jb2RlYyAoIlJhdyAyNC1iaXQgUENNIGF1ZGlvIik7Ci0gICAgICAvKiB3ZSBhc3N1bWUgQklHIEVORElBTiwgYW4gZW5kYSBib3ggd2lsbCB0ZWxsIHVzIHRvIGNoYW5nZSB0aGlzIHRvIGxpdHRsZQotICAgICAgICogZW5kaWFuIGxhdGVyICovCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIlMyNEJFIiwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0gICAgICBzdHJlYW0tPmFsaWdubWVudCA9IDQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2knLCAnbicsICczJywgJzInKToKLSAgICAgIF9jb2RlYyAoIlJhdyAzMi1iaXQgUENNIGF1ZGlvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIlMzMkJFIiwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0gICAgICBzdHJlYW0tPmFsaWdubWVudCA9IDQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ191bGF3OgotICAgICAgX2NvZGVjICgiTXUtbGF3IGF1ZGlvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtbXVsYXciKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX2FsYXc6Ci0gICAgICBfY29kZWMgKCJBLWxhdyBhdWRpbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LWFsYXciKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMHgwMjAwNzM2ZDoKLSAgICBjYXNlIDB4NmQ3MzAwMDI6Ci0gICAgICBfY29kZWMgKCJNaWNyb3NvZnQgQURQQ00iKTsKLSAgICAgIC8qIE1pY3Jvc29mdCBBRFBDTS1BQ00gY29kZSAyICovCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtYWRwY20iLAotICAgICAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAibWljcm9zb2Z0IiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDB4MTEwMDczNmQ6Ci0gICAgY2FzZSAweDZkNzMwMDExOgotICAgICAgX2NvZGVjICgiRFZJL0lNQSBBRFBDTSIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWFkcGNtIiwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImR2aSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDE3MDA3MzZkOgotICAgIGNhc2UgMHg2ZDczMDAxNzoKLSAgICAgIF9jb2RlYyAoIkRWSS9JbnRlbCBJTUEgQURQQ00iKTsKLSAgICAgIC8qIEZJWE1FIERWSS9JbnRlbCBJTUEgQURQQ00vQUNNIGNvZGUgMTcgKi8KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1hZHBjbSIsCi0gICAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJxdWlja3RpbWUiLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMHg1NTAwNzM2ZDoKLSAgICBjYXNlIDB4NmQ3MzAwNTU6Ci0gICAgICAvKiBNUEVHIGxheWVyIDMsIENCUiBvbmx5IChwcmUgUVQ0LjEpICovCi0gICAgY2FzZSBGT1VSQ0NfX21wMzoKLSAgICAgIF9jb2RlYyAoIk1QRUctMSBsYXllciAzIik7Ci0gICAgICAvKiBNUEVHIGxheWVyIDMsIENCUiAmIFZCUiAoUVQ0LjEgYW5kIGxhdGVyKSAqLwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9tcGVnIiwgImxheWVyIiwgR19UWVBFX0lOVCwgMywKLSAgICAgICAgICAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMHgyMDczNmQ6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdlJywgJ2MnLCAnLScsICczJyk6Ci0gICAgICBfY29kZWMgKCJFQUMtMyBhdWRpbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWVhYzMiLAotICAgICAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdzJywgJ2EnLCAnYycsICczJyk6IC8vIE5lcm8gUmVjb2RlCi0gICAgY2FzZSBGT1VSQ0NfYWNfMzoKLSAgICAgIF9jb2RlYyAoIkFDLTMgYXVkaW8iKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1hYzMiLAotICAgICAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdkJywgJ3QnLCAncycsICdjJyk6Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdEJywgJ1QnLCAnUycsICcgJyk6Ci0gICAgICBfY29kZWMgKCJEVFMgYXVkaW8iKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1kdHMiLAotICAgICAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgICBzdHJlYW0tPnNhbXBsZWQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdkJywgJ3QnLCAncycsICdoJyk6IC8vIERUUy1IRAotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnZCcsICd0JywgJ3MnLCAnbCcpOiAvLyBEVFMtSEQgTG9zc2xlc3MKLSAgICAgIF9jb2RlYyAoIkRUUy1IRCBhdWRpbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWR0cyIsCi0gICAgICAgICAgImZyYW1lZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgICAgIHN0cmVhbS0+c2FtcGxlZCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19NQUMzOgotICAgICAgX2NvZGVjICgiTUFDRS0zIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtbWFjZSIsCi0gICAgICAgICAgIm1hY2V2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMywgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19NQUM2OgotICAgICAgX2NvZGVjICgiTUFDRS02Iik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtbWFjZSIsCi0gICAgICAgICAgIm1hY2V2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ08nLCAnZycsICdnJywgJ1YnKToKLSAgICAgIC8qIG9nZy92b3JiaXMgKi8KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXBwbGljYXRpb24vb2dnIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2QnLCAndicsICdjJywgJ2EnKToKLSAgICAgIF9jb2RlYyAoIkRWIGF1ZGlvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtZHYiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX21wNGE6Ci0gICAgICBfY29kZWMgKCJNUEVHLTQgQUFDIGF1ZGlvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQsICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwKLSAgICAgICAgICAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJyYXciLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnUScsICdEJywgJ00nLCAnQycpOgotICAgICAgX2NvZGVjICgiUURlc2lnbiBNdXNpYyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LXFkbSIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfUURNMjoKLSAgICAgIF9jb2RlYyAoIlFEZXNpZ24gTXVzaWMgdi4yIik7Ci0gICAgICAvKiBGSVhNRTogUURlc2lnbiBtdXNpYyB2ZXJzaW9uIDIgKG5vIGNvbnN0YW50KSAqLwotICAgICAgaWYgKEZBTFNFICYmIGRhdGEpIHsKLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXFkbTIiLAotICAgICAgICAgICAgImZyYW1lc2l6ZSIsIEdfVFlQRV9JTlQsIFFUX1VJTlQzMiAoZGF0YSArIDUyKSwKLSAgICAgICAgICAgICJiaXRyYXRlIiwgR19UWVBFX0lOVCwgUVRfVUlOVDMyIChkYXRhICsgNDApLAotICAgICAgICAgICAgImJsb2Nrc2l6ZSIsIEdfVFlQRV9JTlQsIFFUX1VJTlQzMiAoZGF0YSArIDQ0KSwgTlVMTCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtcWRtMiIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYWdzbToKLSAgICAgIF9jb2RlYyAoIkdTTSBhdWRpbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LWdzbSIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0Nfc2FtcjoKLSAgICAgIF9jb2RlYyAoIkFNUiBhdWRpbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby9BTVIiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX3Nhd2I6Ci0gICAgICBfY29kZWMgKCJBTVItV0IgYXVkaW8iKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8vQU1SLVdCIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19pbWE0OgotICAgICAgX2NvZGVjICgiUXVpY2t0aW1lIElNQSBBRFBDTSIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWFkcGNtIiwKLSAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgInF1aWNrdGltZSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGT1VSQ0NfYWxhYzoKLSAgICAgIF9jb2RlYyAoIkFwcGxlIGxvc3NsZXNzIGF1ZGlvIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtYWxhYyIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdRJywgJ2MnLCAnbCcsICdwJyk6Ci0gICAgICBfY29kZWMgKCJRdWFsQ29tbSBQdXJlVm9pY2UiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoImF1ZGlvL3FjZWxwIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ193bWFfOgotICAgIGNhc2UgRk9VUkNDX293bWE6Ci0gICAgICBfY29kZWMgKCJXTUEiKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC13bWEiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX29wdXM6Ci0gICAgICBfY29kZWMgKCJPcHVzIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtb3B1cyIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdsJywgJ3AnLCAnYycsICdtJyk6Ci0gICAgewotICAgICAgZ3VpbnQzMiBmbGFncyA9IDA7Ci0gICAgICBndWludDMyIGRlcHRoID0gMDsKLSAgICAgIGd1aW50MzIgd2lkdGggPSAwOwotICAgICAgR3N0QXVkaW9Gb3JtYXQgZm9ybWF0OwotICAgICAgZW51bQotICAgICAgewotICAgICAgICBGTEFHX0lTX0ZMT0FUID0gMHgxLAotICAgICAgICBGTEFHX0lTX0JJR19FTkRJQU4gPSAweDIsCi0gICAgICAgIEZMQUdfSVNfU0lHTkVEID0gMHg0LAotICAgICAgICBGTEFHX0lTX1BBQ0tFRCA9IDB4OCwKLSAgICAgICAgRkxBR19JU19BTElHTkVEX0hJR0ggPSAweDEwLAotICAgICAgICBGTEFHX0lTX05PTl9JTlRFUkxFQVZFRCA9IDB4MjAKLSAgICAgIH07Ci0gICAgICBfY29kZWMgKCJSYXcgTFBDTSBhdWRpbyIpOwotCi0gICAgICBpZiAoZGF0YSAmJiBsZW4gPj0gNTYpIHsKLSAgICAgICAgZGVwdGggPSBRVF9VSU5UMzIgKGRhdGEgKyA0MCk7Ci0gICAgICAgIGZsYWdzID0gUVRfVUlOVDMyIChkYXRhICsgNDQpOwotICAgICAgICB3aWR0aCA9IFFUX1VJTlQzMiAoZGF0YSArIDQ4KSAqIDggLyBzdHJlYW0tPm5fY2hhbm5lbHM7Ci0gICAgICB9Ci0gICAgICBpZiAoKGZsYWdzICYgRkxBR19JU19GTE9BVCkgPT0gMCkgewotICAgICAgICBpZiAoZGVwdGggPT0gMCkKLSAgICAgICAgICBkZXB0aCA9IDE2OwotICAgICAgICBpZiAod2lkdGggPT0gMCkKLSAgICAgICAgICB3aWR0aCA9IDE2OwotICAgICAgICBmb3JtYXQgPSBnc3RfYXVkaW9fZm9ybWF0X2J1aWxkX2ludGVnZXIgKChmbGFncyAmIEZMQUdfSVNfU0lHTkVEKSA/Ci0gICAgICAgICAgICBUUlVFIDogRkFMU0UsIChmbGFncyAmIEZMQUdfSVNfQklHX0VORElBTikgPwotICAgICAgICAgICAgR19CSUdfRU5ESUFOIDogR19MSVRUTEVfRU5ESUFOLCB3aWR0aCwgZGVwdGgpOwotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBnc3RfYXVkaW9fZm9ybWF0X3RvX3N0cmluZyAoZm9ybWF0KSwKLSAgICAgICAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAoZmxhZ3MgJiBGTEFHX0lTX05PTl9JTlRFUkxFQVZFRCkgPwotICAgICAgICAgICAgIm5vbi1pbnRlcmxlYXZlZCIgOiAiaW50ZXJsZWF2ZWQiLCBOVUxMKTsKLSAgICAgICAgc3RyZWFtLT5hbGlnbm1lbnQgPSBHU1RfUk9VTkRfVVBfOCAoZGVwdGgpOwotICAgICAgICBzdHJlYW0tPmFsaWdubWVudCA9IHJvdW5kX3VwX3BvdzIgKHN0cmVhbS0+YWxpZ25tZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwKQotICAgICAgICAgIHdpZHRoID0gMzI7Ci0gICAgICAgIGlmICh3aWR0aCA9PSA2NCkgewotICAgICAgICAgIGlmIChmbGFncyAmIEZMQUdfSVNfQklHX0VORElBTikKLSAgICAgICAgICAgIGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfRjY0QkU7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9GNjRMRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoZmxhZ3MgJiBGTEFHX0lTX0JJR19FTkRJQU4pCi0gICAgICAgICAgICBmb3JtYXQgPSBHU1RfQVVESU9fRk9STUFUX0YzMkJFOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfRjMyTEU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgZ3N0X2F1ZGlvX2Zvcm1hdF90b19zdHJpbmcgKGZvcm1hdCksCi0gICAgICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgKGZsYWdzICYgRkxBR19JU19OT05fSU5URVJMRUFWRUQpID8KLSAgICAgICAgICAgICJub24taW50ZXJsZWF2ZWQiIDogImludGVybGVhdmVkIiwgTlVMTCk7Ci0gICAgICAgIHN0cmVhbS0+YWxpZ25tZW50ID0gd2lkdGggLyA4OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgncScsICd0JywgJ3YnLCAncicpOgotICAgICAgLyogPyAqLwotICAgIGRlZmF1bHQ6Ci0gICAgewotICAgICAgY2FwcyA9IF9nZXRfdW5rbm93bl9jb2RlY19uYW1lICgiYXVkaW8iLCBmb3VyY2MpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNhcHMpIHsKLSAgICBHc3RDYXBzICp0ZW1wbF9jYXBzID0KLSAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZnc3RfcXRkZW11eF9hdWRpb3NyY190ZW1wbGF0ZSk7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjYXBzLCB0ZW1wbF9jYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsX2NhcHMpOwotICAgIGNhcHMgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotICAvKiBlbmFibGUgY2xpcHBpbmcgZm9yIHJhdyBhdWRpbyBzdHJlYW1zICovCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpOwotICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAobmFtZSwgImF1ZGlvL3gtcmF3IikpIHsKLSAgICBzdHJlYW0tPm5lZWRfY2xpcCA9IFRSVUU7Ci0gICAgc3RyZWFtLT5tYXhfYnVmZmVyX3NpemUgPSA0MDk2ICogc3RyZWFtLT5ieXRlc19wZXJfZnJhbWU7Ci0gICAgR1NUX0RFQlVHICgic2V0dGluZyBtYXggYnVmZmVyIHNpemUgdG8gJWQiLCBzdHJlYW0tPm1heF9idWZmZXJfc2l6ZSk7Ci0gIH0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXF0ZGVtdXhfc3ViX2NhcHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBRdERlbXV4U3RyZWFtICogc3RyZWFtLAotICAgIGd1aW50MzIgZm91cmNjLCBjb25zdCBndWludDggKiBzdHNkX2RhdGEsIGdjaGFyICoqIGNvZGVjX25hbWUpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocXRkZW11eCwgInJlc29sdmUgZm91cmNjIDB4JTA4eCIsIEdVSU5UMzJfVE9fQkUgKGZvdXJjYykpOwotCi0gIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgY2FzZSBGT1VSQ0NfbXA0czoKLSAgICAgIF9jb2RlYyAoIkRWRCBzdWJ0aXRsZSIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJzdWJwaWN0dXJlL3gtZHZkIik7Ci0gICAgICBzdHJlYW0tPm5lZWRfcHJvY2VzcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ190ZXh0OgotICAgICAgX2NvZGVjICgiUXVpY2t0aW1lIHRpbWVkIHRleHQiKTsKLSAgICAgIGdvdG8gdGV4dDsKLSAgICBjYXNlIEZPVVJDQ190eDNnOgotICAgICAgX2NvZGVjICgiM0dQUCB0aW1lZCB0ZXh0Iik7Ci0gICAgdGV4dDoKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidGV4dC94LXJhdyIsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICJ1dGY4IiwgTlVMTCk7Ci0gICAgICAvKiBhY3R1YWwgdGV4dCBwaWVjZSBuZWVkcyB0byBiZSBleHRyYWN0ZWQgKi8KLSAgICAgIHN0cmVhbS0+bmVlZF9wcm9jZXNzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRk9VUkNDX3N0cHA6Ci0gICAgICBfY29kZWMgKCJYTUwgc3VidGl0bGVzIik7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImFwcGxpY2F0aW9uL3R0bWwreG1sIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgIHsKLSAgICAgIGNhcHMgPSBfZ2V0X3Vua25vd25fY29kZWNfbmFtZSAoInRleHQiLCBmb3VyY2MpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1xdGRlbXV4X2dlbmVyaWNfY2FwcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIFF0RGVtdXhTdHJlYW0gKiBzdHJlYW0sCi0gICAgZ3VpbnQzMiBmb3VyY2MsIGNvbnN0IGd1aW50OCAqIHN0c2RfZGF0YSwgZ2NoYXIgKiogY29kZWNfbmFtZSkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBzd2l0Y2ggKGZvdXJjYykgewotICAgIGNhc2UgRk9VUkNDX20xdjoKLSAgICAgIF9jb2RlYyAoIk1QRUcgMSB2aWRlbyIpOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby9tcGVnIiwgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICAgICAic3lzdGVtc3RyZWFtIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBjYXBzID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3F0ZGVtdXhfYXBwZW5kX3Byb3RlY3Rpb25fc3lzdGVtX2lkIChHc3RRVERlbXV4ICogcXRkZW11eCwKLSAgICBjb25zdCBnY2hhciAqIHN5c3RlbV9pZCkKLXsKLSAgZ2ludCBpOwotCi0gIGlmICghcXRkZW11eC0+cHJvdGVjdGlvbl9zeXN0ZW1faWRzKQotICAgIHF0ZGVtdXgtPnByb3RlY3Rpb25fc3lzdGVtX2lkcyA9Ci0gICAgICAgIGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpOwotICAvKiBDaGVjayB3aGV0aGVyIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcyBzeXN0ZW0gSUQuICovCi0gIGZvciAoaSA9IDA7IGkgPCBxdGRlbXV4LT5wcm90ZWN0aW9uX3N5c3RlbV9pZHMtPmxlbjsgKytpKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmlkID0gZ19wdHJfYXJyYXlfaW5kZXggKHF0ZGVtdXgtPnByb3RlY3Rpb25fc3lzdGVtX2lkcywgaSk7Ci0gICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoc3lzdGVtX2lkLCBpZCkgPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChxdGRlbXV4LCAiQWRkaW5nIGNlbmMgcHJvdGVjdGlvbiBzeXN0ZW0gSUQgJXMiLCBzeXN0ZW1faWQpOwotICBnX3B0cl9hcnJheV9hZGQgKHF0ZGVtdXgtPnByb3RlY3Rpb25fc3lzdGVtX2lkcywgZ19hc2NpaV9zdHJkb3duIChzeXN0ZW1faWQsCi0gICAgICAgICAgLTEpKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9pc29tcDQvcXRkZW11eC5oIGIvZ3N0L2lzb21wNC9xdGRlbXV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MWRkY2MuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9RVERFTVVYX0hfXwotI2RlZmluZSBfX0dTVF9RVERFTVVYX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KLSNpbmNsdWRlICJnc3Rpc29mZi5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHF0ZGVtdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgcXRkZW11eF9kZWJ1ZwotCi0jZGVmaW5lIEdTVF9UWVBFX1FUREVNVVggXAotICAoZ3N0X3F0ZGVtdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1FUREVNVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9RVERFTVVYLEdzdFFURGVtdXgpKQotI2RlZmluZSBHU1RfUVRERU1VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9RVERFTVVYLEdzdFFURGVtdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19RVERFTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUVRERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19RVERFTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1FUREVNVVgpKQotCi0jZGVmaW5lIEdTVF9RVERFTVVYX0NBU1Qob2JqKSAoKEdzdFFURGVtdXggKikob2JqKSkKLQotLyogcXRkZW11eCBwcm9kdWNlcyB0aGVzZSBmb3IgYXRvbXMgaXQgY2Fubm90IHBhcnNlICovCi0jZGVmaW5lIEdTVF9RVF9ERU1VWF9QUklWQVRFX1RBRyAicHJpdmF0ZS1xdC10YWciCi0jZGVmaW5lIEdTVF9RVF9ERU1VWF9DTEFTU0lGSUNBVElPTl9UQUcgImNsYXNzaWZpY2F0aW9uIgotCi0jZGVmaW5lIEdTVF9RVERFTVVYX01BWF9TVFJFQU1TICAgICAgICAgMzIKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFFURGVtdXggR3N0UVREZW11eDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RRVERlbXV4Q2xhc3MgR3N0UVREZW11eENsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX1F0RGVtdXhTdHJlYW0gUXREZW11eFN0cmVhbTsKLQotZW51bSBRdERlbXV4U3RhdGUKLXsKLSAgUVRERU1VWF9TVEFURV9JTklUSUFMLCAgICAgICAgLyogSW5pdGlhbCBzdGF0ZSAoaGF2ZW4ndCBnb3QgdGhlIGhlYWRlciB5ZXQpICovCi0gIFFUREVNVVhfU1RBVEVfSEVBREVSLCAgICAgICAgIC8qIFBhcnNpbmcgdGhlIGhlYWRlciAqLwotICBRVERFTVVYX1NUQVRFX01PVklFLCAgICAgICAgICAvKiBQYXJzaW5nL1BsYXlpbmcgdGhlIG1lZGlhIGRhdGEgKi8KLSAgUVRERU1VWF9TVEFURV9CVUZGRVJfTURBVCAgICAgLyogQnVmZmVyaW5nIHRoZSBtZGF0IGF0b20gKi8KLX07Ci0KLXN0cnVjdCBfR3N0UVREZW11eCB7Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICAvKiBHbG9iYWwgc3RhdGUgKi8KLSAgZW51bSBRdERlbXV4U3RhdGUgc3RhdGU7Ci0KLSAgLyogc3RhdGljIHNpbmsgcGFkICovCi0gIEdzdFBhZCAqc2lua3BhZDsKLQotICAvKiBUUlVFIGlmIHB1bGwtYmFzZWQgKi8KLSAgZ2Jvb2xlYW4gcHVsbGJhc2VkOwotCi0gIGdib29sZWFuIHBvc3RlZF9yZWRpcmVjdDsKLQotICBRdERlbXV4U3RyZWFtICpzdHJlYW1zW0dTVF9RVERFTVVYX01BWF9TVFJFQU1TXTsKLSAgZ2ludCAgICAgbl9zdHJlYW1zOwotICBnaW50ICAgICBuX3ZpZGVvX3N0cmVhbXM7Ci0gIGdpbnQgICAgIG5fYXVkaW9fc3RyZWFtczsKLSAgZ2ludCAgICAgbl9zdWJfc3RyZWFtczsKLQotICBHc3RGbG93Q29tYmluZXIgKmZsb3djb21iaW5lcjsKLQotICAvKiBJbmNvbWluZyBzdHJlYW0gZ3JvdXAtaWQgdG8gc2V0IG9uIGRvd25zdHJlYW0gU1RSRUFNX1NUQVJUIGV2ZW50cy4KLSAgICogSWYgdXBzdHJlYW0gZG9lc24ndCBjb250YWluIG9uZSwgYSBnbG9iYWwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkICovCi0gIGdib29sZWFuIGhhdmVfZ3JvdXBfaWQ7Ci0gIGd1aW50IGdyb3VwX2lkOwotCi0gIGd1aW50ICBtYWpvcl9icmFuZDsKLSAgR3N0QnVmZmVyICpjb21wX2JyYW5kczsKLQotICAvKiBbbW9vdl0gaGVhZGVyLgotICAgKiBGSVhNRSA6IFRoaXMgaXMgZGlzY2FyZGVkIGp1c3QgYWZ0ZXIgaXQncyBjcmVhdGVkLiBKdXN0IG1vdmUgaXQKLSAgICogdG8gYSB0ZW1wb3JhcnkgdmFyaWFibGUgPyAqLwotICBHTm9kZSAqbW9vdl9ub2RlOwotCi0gIC8qIEZJWE1FIDogVGhpcyBpcyBuZXZlciBmcmVlZC4gSXQgaXMgb25seSBhc3NpZ25lZCBvbmNlLiBtZW1sZWFrID8gKi8KLSAgR05vZGUgKm1vb3Zfbm9kZV9jb21wcmVzc2VkOwotCi0gIC8qIFNldCB0byBUUlVFIHdoZW4gdGhlIFttb292XSBoZWFkZXIgaGFzIGJlZW4gZnVsbHkgcGFyc2VkICovCi0gIGdib29sZWFuIGdvdF9tb292OwotCi0gIC8qIEdsb2JhbCB0aW1lc2NhbGUgZm9yIHRoZSBpbmNvbWluZyBzdHJlYW0uIFVzZSB0aGUgUVRUSU1FIG1hY3JvcwotICAgKiB0byBjb252ZXJ0IHZhbHVlcyB0by9mcm9tIEdzdENsb2NrVGltZSAqLwotICBndWludDMyIHRpbWVzY2FsZTsKLQotICAvKiBHbG9iYWwgZHVyYXRpb24gKGluIGdsb2JhbCB0aW1lc2NhbGUpLiBVc2UgUVRUSU1FIG1hY3JvcyB0byBnZXQgR3N0Q2xvY2tUaW1lICovCi0gIGd1aW50NjQgZHVyYXRpb247Ci0KLSAgLyogVG90YWwgc2l6ZSBvZiBoZWFkZXIgYXRvbXMuIFVzZWQgdG8gY2FsY3VsYXRlIGZhbGxiYWNrIG92ZXJhbGwgYml0cmF0ZSAqLwotICBndWludCBoZWFkZXJfc2l6ZTsKLQotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLQotICAvKiBjb25maWd1cmVkIHBsYXliYWNrIHJlZ2lvbiAqLwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgLyogVGhlIFNFR01FTlRfRVZFTlQgZnJvbSB1cHN0cmVhbSAqT1IqIGdlbmVyYXRlZCBmcm9tIHNlZ21lbnQgKGFib3ZlKSAqLwotICBHc3RFdmVudCAqcGVuZGluZ19uZXdzZWdtZW50OwotCi0gIGd1aW50MzIgc2VnbWVudF9zZXFudW07Ci0KLSAgLyogZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBhIHNtb290aHN0cmVhbWluZyBmcmFnbWVudAotICAgKiBNc3MgZG9lc24ndCBoYXZlICdtb292JyBvciBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmVhbXMgZm9ybWF0LAotICAgKiByZXF1aXJpbmcgcXRkZW11eCB0byBleHBvc2UgYW5kIGNyZWF0ZSB0aGUgc3RyZWFtcyAqLwotICBnYm9vbGVhbiBtc3NfbW9kZTsKLQotICAvKiBTZXQgdG8gVFJVRSBpZiB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIGVpdGhlciBhIE1TUyBzdHJlYW0gb3IKLSAgICogYSBGcmFnbWVudGVkIE1QNCAoY29udGFpbmluZyB0aGUgW212ZXhdIGF0b20gaW4gdGhlIGhlYWRlcikgKi8KLSAgZ2Jvb2xlYW4gZnJhZ21lbnRlZDsKLQotICAvKiBQVUxMLUJBU0VEIG9ubHkgOiBJZiBUUlVFIHRoZXJlIGlzIGEgcGVuZGluZyBzZWVrICovCi0gIGdib29sZWFuIGZyYWdtZW50ZWRfc2Vla19wZW5kaW5nOwotCi0gIC8qIFBVTEwtQkFTRUQgOiBvZmZzZXQgb2YgZmlyc3QgW21vb2ZdIG9yIG9mIGZyYWdtZW50IHRvIHNlZWsgdG8KLSAgICogUFVTSC1CQVNFRCA6IG9mZnNldCBvZiBsYXRlc3QgW21vb2ZdICovCi0gIGd1aW50NjQgbW9vZl9vZmZzZXQ7Ci0KLSAgLyogTVNTIHN0cmVhbXMgaGF2ZSBhIHNpbmdsZSBtZWRpYSB0aGF0IGlzIHVuc3BlY2lmaWVkIGF0IHRoZSBhdG9tcywgc28KLSAgICogdXBzdHJlYW0gcHJvdmlkZXMgaXQgYXQgdGhlIGNhcHMgKi8KLSAgR3N0Q2FwcyAqbWVkaWFfY2FwczsKLQotICAvKiBTZXQgdG8gVFJVRSB3aGVuIGFsbCBzdHJlYW1zIGhhdmUgYmVlbiBleHBvc2VkICovCi0gIGdib29sZWFuIGV4cG9zZWQ7Ci0gICAgCi0gIGdpbnQ2NCBjaGFwdGVyc190cmFja19pZDsKLQotICAvKiBwcm90ZWN0aW9uIHN1cHBvcnQgKi8KLSAgR1B0ckFycmF5ICpwcm90ZWN0aW9uX3N5c3RlbV9pZHM7IC8qIEhvbGRzIGlkZW50aWZpZXJzIG9mIGFsbCBjb250ZW50IHByb3RlY3Rpb24gc3lzdGVtcyBmb3IgYWxsIHRyYWNrcyAqLwotICBHUXVldWUgcHJvdGVjdGlvbl9ldmVudF9xdWV1ZTsgLyogaG9sZHMgY29weSBvZiB1cHN0cmVhbSBwcm90ZWN0aW9uIGV2ZW50cyAqLwotICBndWludDY0IGNlbmNfYXV4X2luZm9fb2Zmc2V0OwotICBndWludDggKmNlbmNfYXV4X2luZm9fc2l6ZXM7Ci0gIGd1aW50MzIgY2VuY19hdXhfc2FtcGxlX2NvdW50OwotCi0KLSAgLyoKLSAgICogQUxMIFZBUklBQkxFUyBCRUxPVyBBUkUgT05MWSBVU0VEIElOIFBVU0gtQkFTRUQgTU9ERSAKLSAgICovCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGd1aW50IG5lZWRlZGJ5dGVzOwotICBndWludCB0b2Ryb3A7Ci0gIC8qIFVzZWQgdG8gc3RvcmUgZGF0YSBpZiBbbWRhdF0gaXMgYmVmb3JlIHRoZSBoZWFkZXJzICovCi0gIEdzdEJ1ZmZlciAqbWRhdGJ1ZmZlcjsKLSAgLyogQW1vdW50IG9mIGJ5dGVzIGxlZnQgdG8gcmVhZCBpbiB0aGUgY3VycmVudCBbbWRhdF0gKi8KLSAgZ3VpbnQ2NCBtZGF0bGVmdDsKLQotICAvKiBXaGVuIHJlc3RvcmluZyB0aGUgbWRhdCB0byB0aGUgYWRhcHRlciwgdGhpcyBidWZmZXIgc3RvcmVzIGFueQotICAgKiB0cmFpbGluZyBkYXRhIHRoYXQgd2FzIGFmdGVyIHRoZSBsYXN0IGF0b20gcGFyc2VkIGFzIGl0IGhhcyB0byBiZQotICAgKiByZXN0b3JlZCBsYXRlciBhbG9uZyB3aXRoIHRoZSBjb3JyZWN0IG9mZnNldC4gVXNlZCBpbiBmcmFnbWVudGVkCi0gICAqIHNjZW5hcmlvIHdoZXJlIG1kYXQvbW9vZiBhcmUgb25lIGFmdGVyIHRoZSBvdGhlciBpbiBhbnkgb3JkZXIuCi0gICAqCi0gICAqIENoZWNrIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MTA2MjMgKi8KLSAgR3N0QnVmZmVyICpyZXN0b3JlZGF0YV9idWZmZXI7Ci0gIGd1aW50NjQgcmVzdG9yZWRhdGFfb2Zmc2V0OwotCi0gIC8qIFRoZSBjdXJyZW50IG9mZnNldCBpbiBieXRlcyBmcm9tIHVwc3RyZWFtLgotICAgKiBOb3RlOiBXaGlsZSBpdCBtYWtlcyBjb21wbGV0ZSBzZW5zZSB3aGVuIHdlIGFyZSBQVUxMLUJBU0VEIChwdWxsaW5nCi0gICAqIGluIEJZVEVTIGZyb20gdXBzdHJlYW0pIGFuZCBQVVNILUJBU0VEIHdpdGggYSBCWVRFIFNFR01FTlQgKHJlY2VpdmluZwotICAgKiBidWZmZXJzIHdpdGggYWN0dWFsIG9mZnNldHMpLCBpdCBpcyB1bmRlZmluZWQgaW4gUFVTSC1CQVNFRCB3aXRoIGEKLSAgICogVElNRSBTRUdNRU5UICovCi0gIGd1aW50NjQgb2Zmc2V0OwotCi0gIC8qIG9mZnNldCBvZiB0aGUgbWRhdCBhdG9tICovCi0gIGd1aW50NjQgbWRhdG9mZnNldDsKLSAgLyogT2Zmc2V0IG9mIHRoZSBmaXJzdCBtZGF0ICovCi0gIGd1aW50NjQgZmlyc3RfbWRhdDsKLSAgLyogb2Zmc2V0IG9mIGxhc3QgW21vb3ZdIHNlZW4gKi8KLSAgZ3VpbnQ2NCBsYXN0X21vb3Zfb2Zmc2V0OwotCi0gIC8qIElmIFRSVUUsIHF0ZGVtdXggcmVjZWl2ZWQgdXBzdHJlYW0gbmV3c2VnbWVudCBpbiBUSU1FIGZvcm1hdAotICAgKiB3aGljaCBsaWtlbHkgbWVhbnMgdGhhdCB1cHN0cmVhbSBpcyBkcml2aW5nIHRoZSBwaXBlbGluZSAoc3VjaCBhcwotICAgKiBhZGFwdGl2ZSBkZW11eGVycyBvciBkbG5hIHNvdXJjZXMpICovCi0gIGdib29sZWFuIHVwc3RyZWFtX2Zvcm1hdF9pc190aW1lOwotCi0gIC8qIFNlcW51bSBvZiB0aGUgc2VlayBldmVudCBzZW50IHVwc3RyZWFtLiAgV2lsbCBiZSB1c2VkIHRvCi0gICAqIGRldGVjdCBpbmNvbWluZyBGTFVTSCBldmVudHMgY29ycmVzcG9uZGluZyB0byB0aGF0ICovCi0gIGd1aW50MzIgb2Zmc2V0X3NlZWtfc2VxbnVtOwotCi0gIC8qIFVQU1RSRUFNIEJZVEU6IFJlcXVlc3RlZCB1cHN0cmVhbSBieXRlIHNlZWsgb2Zmc2V0LgotICAgKiBDdXJyZW50bHkgaXQgaXMgb25seSB1c2VkIHRvIGNoZWNrIGlmIGFuIGluY29taW5nIEJZVEUgU0VHTUVOVAotICAgKiBjb3JyZXNwb25kcyB0byBhIHNlZWsgZXZlbnQgdGhhdCB3YXMgc2VudCB1cHN0cmVhbSAqLwotICBnaW50NjQgc2Vla19vZmZzZXQ7Ci0KLSAgLyogVVBTVFJFQU0gQllURTogUmVxdWVzdGVkIHN0YXJ0L3N0b3AgVElNRSB2YWx1ZXMgZnJvbQotICAgKiBkb3duc3RyZWFtLgotICAgKiBVc2VkIHRvIHNldCBvbiB0aGUgZG93bnN0cmVhbSBzZWdtZW50IG9uY2UgdGhlIGNvcnJlc3BvbmRpbmcgdXBzdHJlYW0KLSAgICogQllURSBTRUVLIGhhcyBzdWNjZWVkZWQgKi8KLSAgZ2ludDY0IHB1c2hfc2Vla19zdGFydDsKLSAgZ2ludDY0IHB1c2hfc2Vla19zdG9wOwotCi0jaWYgMAotICAvKiBnc3QgaW5kZXggc3VwcG9ydCAqLwotICBHc3RJbmRleCAqZWxlbWVudF9pbmRleDsKLSAgZ2ludCBpbmRleF9pZDsKLSNlbmRpZgotCi0gIC8qIFdoZXRoZXIgdXBzdHJlYW0gaXMgc2Vla2FibGUgaW4gQllURVMgKi8KLSAgZ2Jvb2xlYW4gdXBzdHJlYW1fc2Vla2FibGU7Ci0gIC8qIFVQU1RSRUFNIEJZVEU6IFNpemUgb2YgdXBzdHJlYW0gY29udGVudC4KLSAgICogTm90ZSA6IFRoaXMgaXMgb25seSBjb21wdXRlZCBvbmNlICEgSWYgdXBzdHJlYW0gZ3Jvd3MgaW4gdGhlIG1lYW50aW1lCi0gICAqIGl0IHdpbGwgbm90IGJlIHVwZGF0ZWQgKi8KLSAgZ2ludDY0IHVwc3RyZWFtX3NpemU7Ci0KLSAgLyogVVBTVFJFQU0gVElNRSA6IENvbnRhaW5zIHRoZSBQVFMgKGlmIGFueSkgb2YgdGhlCi0gICAqIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGEgW21vb2ZdIGhlYWRlci4gV2lsbCBiZSB1c2VkIHRvIGVzdGFibGlzaAotICAgKiB0aGUgYWN0dWFsIFBUUyBvZiB0aGUgc2FtcGxlcyBjb250YWluZWQgd2l0aGluIHRoYXQgZnJhZ21lbnQuICovCi0gIGd1aW50NjQgZnJhZ21lbnRfc3RhcnQ7Ci0gIC8qIFVQU1RSRUFNIFRJTUUgOiBUaGUgb2Zmc2V0IGluIGJ5dGVzIG9mIHRoZSBbbW9vZl0KLSAgICogaGVhZGVyIHN0YXJ0LgotICAgKiBOb3RlIDogVGhpcyBpcyBub3QgY29tcHV0ZWQgZnJvbSB0aGUgR1NUX0JVRkZFUl9PRkZTRVQgZmllbGQgKi8KLSAgZ3VpbnQ2NCBmcmFnbWVudF9zdGFydF9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFFURGVtdXhDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcXRkZW11eF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9RVERFTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYyBiL2dzdC9pc29tcDQvcXRkZW11eF9kdW1wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MGJiNzQuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuYworKysgL2Rldi9udWxsCkBAIC0xLDk1NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFNURXJpY3Nzb24gPGJlbmphbWluLmdhaWduYXJkQHN0ZXJpY3Nzb24uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJxdGRlbXV4X3R5cGVzLmgiCi0jaW5jbHVkZSAicXRkZW11eF9kdW1wLmgiCi0jaW5jbHVkZSAiZm91cmNjLmgiCi0KLSNpbmNsdWRlICJxdGF0b21wYXJzZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEdFVF9VSU5UOChkYXRhKSAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDhfdW5jaGVja2VkKGRhdGEpCi0jZGVmaW5lIEdFVF9VSU5UMTYoZGF0YSkgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlX3VuY2hlY2tlZChkYXRhKQotI2RlZmluZSBHRVRfVUlOVDMyKGRhdGEpICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZV91bmNoZWNrZWQoZGF0YSkKLSNkZWZpbmUgR0VUX1VJTlQ2NChkYXRhKSAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmVfdW5jaGVja2VkKGRhdGEpCi0jZGVmaW5lIEdFVF9GUDMyKGRhdGEpICAgKGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlX3VuY2hlY2tlZChkYXRhKS82NTUzNi4wKQotI2RlZmluZSBHRVRfRlAxNihkYXRhKSAgIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZV91bmNoZWNrZWQoZGF0YSkvMjU2LjApCi0jZGVmaW5lIEdFVF9GT1VSQ0MoZGF0YSkgIHF0X2F0b21fcGFyc2VyX2dldF9mb3VyY2NfdW5jaGVja2VkKGRhdGEpCi0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfbXZoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50MzIgdmVyc2lvbiA9IDA7Ci0KLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfcmVtYWluaW5nIChkYXRhLCAxMDApKQotICAgIHJldHVybiBGQUxTRTsKLQotICB2ZXJzaW9uID0gR0VUX1VJTlQzMiAoZGF0YSk7Ci0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIHZlcnNpb24pOwotCi0gIHZlcnNpb24gPSB2ZXJzaW9uID4+IDI0OwotICBpZiAodmVyc2lvbiA9PSAwKSB7Ci0gICAgR1NUX0xPRyAoIiUqcyAgY3JlYXRpb24gdGltZTogJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgICBHU1RfTE9HICgiJSpzICBtb2RpZnkgdGltZTogICAldSIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICAgIEdTVF9MT0cgKCIlKnMgIHRpbWUgc2NhbGU6ICAgIDEvJXUgc2VjIiwgZGVwdGgsICIiLCBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgZHVyYXRpb246ICAgICAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgfSBlbHNlIGlmICh2ZXJzaW9uID09IDEpIHsKLSAgICBHU1RfTE9HICgiJSpzICBjcmVhdGlvbiB0aW1lOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICBkZXB0aCwgIiIsIEdFVF9VSU5UNjQgKGRhdGEpKTsKLSAgICBHU1RfTE9HICgiJSpzICBtb2RpZnkgdGltZTogICAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICBkZXB0aCwgIiIsIEdFVF9VSU5UNjQgKGRhdGEpKTsKLSAgICBHU1RfTE9HICgiJSpzICB0aW1lIHNjYWxlOiAgICAxLyV1IHNlYyIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICAgIEdTVF9MT0cgKCIlKnMgIGR1cmF0aW9uOiAgICAgICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGRlcHRoLCAiIiwgR0VUX1VJTlQ2NCAoZGF0YSkpOwotICB9IGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgcHJlZi4gcmF0ZTogICAgJWciLCBkZXB0aCwgIiIsIEdFVF9GUDMyIChkYXRhKSk7Ci0gIEdTVF9MT0cgKCIlKnMgIHByZWYuIHZvbHVtZTogICVnIiwgZGVwdGgsICIiLCBHRVRfRlAxNiAoZGF0YSkpOwotICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKGRhdGEsIDQ2KTsKLSAgR1NUX0xPRyAoIiUqcyAgcHJldmlldyB0aW1lOiAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgcHJldmlldyBkdXIuOiAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgcG9zdGVyIHRpbWU6ICAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgc2VsZWN0IHRpbWU6ICAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgc2VsZWN0IGR1ci46ICAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgY3VycmVudCB0aW1lOiAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgbmV4dCB0cmFjayBJRDogJWQiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfdGtoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50NjQgZHVyYXRpb24sIGN0aW1lLCBtdGltZTsKLSAgZ3VpbnQzMiB2ZXJzaW9uID0gMCwgdHJhY2tfaWQgPSAwLCBpd2lkdGggPSAwLCBpaGVpZ2h0ID0gMDsKLSAgZ3VpbnQxNiBsYXllciA9IDAsIGFsdF9ncm91cCA9IDAsIGl2b2wgPSAwOwotICBndWludCB2YWx1ZV9zaXplOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZ2ZXJzaW9uKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyc2lvbik7Ci0KLSAgdmFsdWVfc2l6ZSA9ICgodmVyc2lvbiA+PiAyNCkgPT0gMSkgPyBzaXplb2YgKGd1aW50NjQpIDogc2l6ZW9mIChndWludDMyKTsKLQotICBpZiAocXRfYXRvbV9wYXJzZXJfZ2V0X29mZnNldCAoZGF0YSwgdmFsdWVfc2l6ZSwgJmN0aW1lKSAmJgotICAgICAgcXRfYXRvbV9wYXJzZXJfZ2V0X29mZnNldCAoZGF0YSwgdmFsdWVfc2l6ZSwgJm10aW1lKSAmJgotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZ0cmFja19pZCkgJiYKLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwIChkYXRhLCA0KSAmJgotICAgICAgcXRfYXRvbV9wYXJzZXJfZ2V0X29mZnNldCAoZGF0YSwgdmFsdWVfc2l6ZSwgJmR1cmF0aW9uKSAmJgotICAgICAgZ3N0X2J5dGVfcmVhZGVyX3NraXAgKGRhdGEsIDQpICYmCi0gICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoZGF0YSwgJmxheWVyKSAmJgotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKGRhdGEsICZhbHRfZ3JvdXApICYmCi0gICAgICBnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoZGF0YSwgNCkgJiYKLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDE2X2JlIChkYXRhLCAmaXZvbCkgJiYKLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9za2lwIChkYXRhLCAyICsgKDkgKiA0KSkgJiYKLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmaXdpZHRoKSAmJgotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZpaGVpZ2h0KSkgewotICAgIEdTVF9MT0cgKCIlKnMgIGNyZWF0aW9uIHRpbWU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlcHRoLCAiIiwgY3RpbWUpOwotICAgIEdTVF9MT0cgKCIlKnMgIG1vZGlmeSB0aW1lOiAgICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlcHRoLCAiIiwgbXRpbWUpOwotICAgIEdTVF9MT0cgKCIlKnMgIHRyYWNrIElEOiAgICAgICV1IiwgZGVwdGgsICIiLCB0cmFja19pZCk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgZHVyYXRpb246ICAgICAgJSIgR19HVUlOVDY0X0ZPUk1BVCwgZGVwdGgsICIiLCBkdXJhdGlvbik7Ci0gICAgR1NUX0xPRyAoIiUqcyAgbGF5ZXI6ICAgICAgICAgJXUiLCBkZXB0aCwgIiIsIGxheWVyKTsKLSAgICBHU1RfTE9HICgiJSpzICBhbHQgZ3JvdXA6ICAgICAldSIsIGRlcHRoLCAiIiwgYWx0X2dyb3VwKTsKLSAgICBHU1RfTE9HICgiJSpzICB2b2x1bWU6ICAgICAgICAlZyIsIGRlcHRoLCAiIiwgaXZvbCAvIDI1Ni4wKTsKLSAgICBHU1RfTE9HICgiJSpzICB0cmFjayB3aWR0aDogICAlZyIsIGRlcHRoLCAiIiwgaXdpZHRoIC8gNjU1MzYuMCk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgdHJhY2sgaGVpZ2h0OiAgJWciLCBkZXB0aCwgIiIsIGloZWlnaHQgLyA2NTUzNi4wKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9lbHN0IChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MgPSAwLCBudW1fZW50cmllcyA9IDAsIGk7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcl9mbGFncykgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm51bV9lbnRyaWVzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLSAgR1NUX0xPRyAoIiUqcyAgbiBlbnRyaWVzOiAgICAgJWQiLCBkZXB0aCwgIiIsIG51bV9lbnRyaWVzKTsKLQotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19jaHVua3MgKGRhdGEsIG51bV9lbnRyaWVzLCA0ICsgNCArIDQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgewotICAgIEdTVF9MT0cgKCIlKnMgICAgdHJhY2sgZHVyOiAgICAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgICBHU1RfTE9HICgiJSpzICAgIG1lZGlhIHRpbWU6ICAgICV1IiwgZGVwdGgsICIiLCBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBtZWRpYSByYXRlOiAgICAlZyIsIGRlcHRoLCAiIiwgR0VUX0ZQMzIgKGRhdGEpKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9tZGhkIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJzaW9uID0gMDsKLSAgZ3VpbnQ2NCBkdXJhdGlvbiwgY3RpbWUsIG10aW1lOwotICBndWludDMyIHRpbWVfc2NhbGUgPSAwOwotICBndWludDE2IGxhbmd1YWdlID0gMCwgcXVhbGl0eSA9IDA7Ci0gIGd1aW50IHZhbHVlX3NpemU7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcnNpb24pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfTE9HICgiJSpzICB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCB2ZXJzaW9uKTsKLQotICB2YWx1ZV9zaXplID0gKCh2ZXJzaW9uID4+IDI0KSA9PSAxKSA/IHNpemVvZiAoZ3VpbnQ2NCkgOiBzaXplb2YgKGd1aW50MzIpOwotCi0gIGlmIChxdF9hdG9tX3BhcnNlcl9nZXRfb2Zmc2V0IChkYXRhLCB2YWx1ZV9zaXplLCAmY3RpbWUpICYmCi0gICAgICBxdF9hdG9tX3BhcnNlcl9nZXRfb2Zmc2V0IChkYXRhLCB2YWx1ZV9zaXplLCAmbXRpbWUpICYmCi0gICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnRpbWVfc2NhbGUpICYmCi0gICAgICBxdF9hdG9tX3BhcnNlcl9nZXRfb2Zmc2V0IChkYXRhLCB2YWx1ZV9zaXplLCAmZHVyYXRpb24pICYmCi0gICAgICBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQxNl9iZSAoZGF0YSwgJmxhbmd1YWdlKSAmJgotICAgICAgZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MTZfYmUgKGRhdGEsICZxdWFsaXR5KSkgewotICAgIEdTVF9MT0cgKCIlKnMgIGNyZWF0aW9uIHRpbWU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlcHRoLCAiIiwgY3RpbWUpOwotICAgIEdTVF9MT0cgKCIlKnMgIG1vZGlmeSB0aW1lOiAgICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlcHRoLCAiIiwgbXRpbWUpOwotICAgIEdTVF9MT0cgKCIlKnMgIHRpbWUgc2NhbGU6ICAgIDEvJXUgc2VjIiwgZGVwdGgsICIiLCB0aW1lX3NjYWxlKTsKLSAgICBHU1RfTE9HICgiJSpzICBkdXJhdGlvbjogICAgICAlIiBHX0dVSU5UNjRfRk9STUFULCBkZXB0aCwgIiIsIGR1cmF0aW9uKTsKLSAgICBHU1RfTE9HICgiJSpzICBsYW5ndWFnZTogICAgICAldSIsIGRlcHRoLCAiIiwgbGFuZ3VhZ2UpOwotICAgIEdTVF9MT0cgKCIlKnMgIHF1YWxpdHk6ICAgICAgICV1IiwgZGVwdGgsICIiLCBxdWFsaXR5KTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9oZGxyIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJzaW9uLCB0eXBlLCBzdWJ0eXBlLCBtYW51ZmFjdHVyZXI7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotCi0gIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX3JlbWFpbmluZyAoZGF0YSwgNCArIDQgKyA0ICsgNCArIDQgKyA0ICsgMSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHZlcnNpb24gPSBHRVRfVUlOVDMyIChkYXRhKTsKLSAgdHlwZSA9IEdFVF9GT1VSQ0MgKGRhdGEpOwotICBzdWJ0eXBlID0gR0VUX0ZPVVJDQyAoZGF0YSk7Ci0gIG1hbnVmYWN0dXJlciA9IEdFVF9GT1VSQ0MgKGRhdGEpOwotCi0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIHZlcnNpb24pOwotICBHU1RfTE9HICgiJSpzICB0eXBlOiAgICAgICAgICAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgZGVwdGgsICIiLAotICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0eXBlKSk7Ci0gIEdTVF9MT0cgKCIlKnMgIHN1YnR5cGU6ICAgICAgICUiIEdTVF9GT1VSQ0NfRk9STUFULCBkZXB0aCwgIiIsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKHN1YnR5cGUpKTsKLSAgR1NUX0xPRyAoIiUqcyAgbWFudWZhY3R1cmVyOiAgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsIGRlcHRoLCAiIiwKLSAgICAgIEdTVF9GT1VSQ0NfQVJHUyAobWFudWZhY3R1cmVyKSk7Ci0gIEdTVF9MT0cgKCIlKnMgIGZsYWdzOiAgICAgICAgICUwOHgiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgZmxhZ3MgbWFzazogICAgJTA4eCIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotCi0gIC8qIHF1aWNrdGltZSB1c2VzIHBhc2NhbCBzdHJpbmcsIG1wNCB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nICovCi0gIGlmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19zdHJpbmcgKGRhdGEsICZuYW1lKSkgewotICAgIEdTVF9MT0cgKCIlKnMgIG5hbWU6ICAgICAgICAgICVzIiwgZGVwdGgsICIiLCBuYW1lKTsKLSAgfSBlbHNlIHsKLSAgICBnY2hhciBidWZbMjU2XTsKLSAgICBndWludCBsZW47Ci0KLSAgICBsZW4gPSBnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQ4X3VuY2hlY2tlZCAoZGF0YSk7Ci0gICAgaWYgKHF0X2F0b21fcGFyc2VyX2hhc19yZW1haW5pbmcgKGRhdGEsIGxlbikpIHsKLSAgICAgIG1lbWNweSAoYnVmLCBnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhX3VuY2hlY2tlZCAoZGF0YSksIGxlbik7Ci0gICAgICBidWZbbGVuXSA9ICdcMCc7Ci0gICAgICBHU1RfTE9HICgiJSpzICBuYW1lOiAgICAgICAgICAlcyIsIGRlcHRoLCAiIiwgYnVmKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfdm1oZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX3JlbWFpbmluZyAoZGF0YSwgNCArIDQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfTE9HICgiJSpzICB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gIEdTVF9MT0cgKCIlKnMgIG1vZGUvY29sb3I6ICAgICUwOHgiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfZHJlZiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50MzIgdmVyX2ZsYWdzID0gMCwgbnVtX2VudHJpZXMgPSAwLCBpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZ2ZXJfZmxhZ3MpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZudW1fZW50cmllcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIHZlcl9mbGFncyk7Ci0gIEdTVF9MT0cgKCIlKnMgIG4gZW50cmllczogICAgICV1IiwgZGVwdGgsICIiLCBudW1fZW50cmllcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgZ3VpbnQzMiBzaXplID0gMCwgZm91cmNjOwotCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnNpemUpIHx8Ci0gICAgICAgICFxdF9hdG9tX3BhcnNlcl9nZXRfZm91cmNjIChkYXRhLCAmZm91cmNjKSB8fCBzaXplIDwgOCB8fAotICAgICAgICAhZ3N0X2J5dGVfcmVhZGVyX3NraXAgKGRhdGEsIHNpemUgLSA4KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9MT0cgKCIlKnMgICAgc2l6ZTogICAgICAgICAgJXUiLCBkZXB0aCwgIiIsIHNpemUpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgdHlwZTogICAgICAgICAgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsIGRlcHRoLCAiIiwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1xdGRlbXV4X2R1bXBfc3RzZF9hdmMxIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgaW50IGRlcHRoKQotewotICBndWludDMyIGZvdXJjYzsKLQotICAvKiBTaXplIG9mIGF2YzEgPSA3OCBieXRlcyAqLwotICBpZiAoc2l6ZSA8ICg2ICsgMiArIDQgKyA0ICsgNCArIDQgKyAyICsgMiArIDQgKyA0ICsgNCArIDIgKyAxICsgMzEgKyAyICsgMikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9za2lwX3VuY2hlY2tlZCAoZGF0YSwgNik7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIGRhdGEgcmVmZXJlbmNlOiVkIiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQxNiAoZGF0YSkpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIiUqcyAgICB2ZXJzaW9uL3Jldi46ICAlMDh4IiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQzMiAoZGF0YSkpOwotICBmb3VyY2MgPSBHRVRfRk9VUkNDIChkYXRhKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICIlKnMgICAgdmVuZG9yOiAgICAgICAgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsIGRlcHRoLAotICAgICAgIiIsIEdTVF9GT1VSQ0NfQVJHUyAoZm91cmNjKSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIHRlbXBvcmFsIHF1YWw6ICV1IiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQzMiAoZGF0YSkpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIiUqcyAgICBzcGF0aWFsIHF1YWw6ICAldSIsIGRlcHRoLCAiIiwKLSAgICAgIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICIlKnMgICAgd2lkdGg6ICAgICAgICAgJXUiLCBkZXB0aCwgIiIsCi0gICAgICBHRVRfVUlOVDE2IChkYXRhKSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIGhlaWdodDogICAgICAgICV1IiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQxNiAoZGF0YSkpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIiUqcyAgICBob3Jpei4gcmVzb2w6ICAlZyIsIGRlcHRoLCAiIiwKLSAgICAgIEdFVF9GUDMyIChkYXRhKSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIHZlcnQuIHJlc29sLjogICVnIiwgZGVwdGgsICIiLAotICAgICAgR0VUX0ZQMzIgKGRhdGEpKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHF0ZGVtdXgsICIlKnMgICAgZGF0YSBzaXplOiAgICAgJXUiLCBkZXB0aCwgIiIsCi0gICAgICBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIGZyYW1lIGNvdW50OiAgICV1IiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQxNiAoZGF0YSkpOwotICAvKiBzb21ldGhpbmcgaXMgbm90IHJpZ2h0IHdpdGggdGhpcywgaXQncyBzdXBwb3NlZCB0byBiZSBhIHN0cmluZyBidXQgaXQncwotICAgKiBub3QgYXBwYXJlbnRseSwgc28ganVzdCBza2lwIHRoaXMgZm9yIG5vdyAqLwotICBnc3RfYnl0ZV9yZWFkZXJfc2tpcF91bmNoZWNrZWQgKGRhdGEsIDEgKyAzMSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIGNvbXByZXNzb3I6ICAgIChza2lwcGVkKSIsIGRlcHRoLCAiIik7Ci0gIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIGRlcHRoOiAgICAgICAgICV1IiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQxNiAoZGF0YSkpOwotICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIiUqcyAgICBjb2xvciB0YWJsZSBJRDoldSIsIGRlcHRoLCAiIiwKLSAgICAgIEdFVF9VSU5UMTYgKGRhdGEpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9zdHNkIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MgPSAwLCBudW1fZW50cmllcyA9IDAsIGk7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcl9mbGFncykgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm51bV9lbnRyaWVzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLSAgR1NUX0xPRyAoIiUqcyAgbiBlbnRyaWVzOiAgICAgJWQiLCBkZXB0aCwgIiIsIG51bV9lbnRyaWVzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgewotICAgIEdzdEJ5dGVSZWFkZXIgc3ViOwotICAgIGd1aW50MzIgc2l6ZSwgcmVtYWluOwotICAgIGd1aW50MzIgZm91cmNjOwotCi0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnNpemUpIHx8Ci0gICAgICAgICFxdF9hdG9tX3BhcnNlcl9nZXRfZm91cmNjIChkYXRhLCAmZm91cmNjKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChxdGRlbXV4LCAiJSpzICAgIHNpemU6ICAgICAgICAgICV1IiwgZGVwdGgsICIiLCBzaXplKTsKLSAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwgIiUqcyAgICB0eXBlOiAgICAgICAgICAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgZGVwdGgsCi0gICAgICAgICIiLCBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotCi0gICAgcmVtYWluID0gZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKGRhdGEpOwotICAgIC8qIFNpemUgaW5jbHVkZXMgdGhlIDggYnl0ZXMgd2UganVzdCByZWFkOiBsZW4gJiBmb3VyY2MsIHRoZW4gOCBieXRlcwotICAgICAqIHZlcnNpb24sIGZsYWdzLCBlbnRyaWVzX2NvdW50ICovCi0gICAgaWYgKHNpemUgPiByZW1haW4gKyA4KSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocXRkZW11eCwKLSAgICAgICAgICAiTm90IGVub3VnaCBkYXRhIGxlZnQgZm9yIHRoaXMgYXRvbSAoaGF2ZSAldSBuZWVkICV1KSIsIHJlbWFpbiwgc2l6ZSk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgcXRfYXRvbV9wYXJzZXJfcGVla19zdWIgKGRhdGEsIDAsIHNpemUsICZzdWIpOwotICAgIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgICBjYXNlIEZPVVJDQ19hdmMxOgotICAgICAgICBpZiAoIXF0ZGVtdXhfZHVtcF9zdHNkX2F2YzEgKHF0ZGVtdXgsICZzdWIsIHNpemUsIGRlcHRoICsgMSkpCi0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRk9VUkNDX21wNHM6Ci0gICAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZzdWIsICZ2ZXJfZmxhZ3MpIHx8Ci0gICAgICAgICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKCZzdWIsICZudW1fZW50cmllcykpCi0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICBpZiAoIXF0ZGVtdXhfZHVtcF91bmtub3duIChxdGRlbXV4LCAmc3ViLCBkZXB0aCArIDEpKQotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBVbmtub3duIHN0c2QgZGF0YSwgZHVtcCB0aGUgYnl0ZXMgKi8KLSAgICAgICAgaWYgKCFxdGRlbXV4X2R1bXBfdW5rbm93biAocXRkZW11eCwgJnN1YiwgZGVwdGggKyAxKSkKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKGRhdGEsIHNpemUgLSAoNCArIDQpKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9zdHRzIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MgPSAwLCBudW1fZW50cmllcyA9IDAsIGk7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcl9mbGFncykgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm51bV9lbnRyaWVzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLSAgR1NUX0xPRyAoIiUqcyAgbiBlbnRyaWVzOiAgICAgJWQiLCBkZXB0aCwgIiIsIG51bV9lbnRyaWVzKTsKLQotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19jaHVua3MgKGRhdGEsIG51bV9lbnRyaWVzLCA0ICsgNCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBjb3VudDogICAgICAgICAldSIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgZHVyYXRpb246ICAgICAgJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9zdHBzIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MgPSAwLCBudW1fZW50cmllcyA9IDAsIGk7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcl9mbGFncykgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm51bV9lbnRyaWVzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLSAgR1NUX0xPRyAoIiUqcyAgbiBlbnRyaWVzOiAgICAgJWQiLCBkZXB0aCwgIiIsIG51bV9lbnRyaWVzKTsKLQotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19jaHVua3MgKGRhdGEsIG51bV9lbnRyaWVzLCA0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKLSAgICBHU1RfTE9HICgiJSpzICAgIHNhbXBsZTogICAgICAgICV1IiwgZGVwdGgsICIiLCBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfc3RzcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50MzIgdmVyX2ZsYWdzID0gMCwgbnVtX2VudHJpZXMgPSAwLCBpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZ2ZXJfZmxhZ3MpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZudW1fZW50cmllcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIHZlcl9mbGFncyk7Ci0gIEdTVF9MT0cgKCIlKnMgIG4gZW50cmllczogICAgICVkIiwgZGVwdGgsICIiLCBudW1fZW50cmllcyk7Ci0KLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfY2h1bmtzIChkYXRhLCBudW1fZW50cmllcywgNCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBzYW1wbGU6ICAgICAgICAldSIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX3N0c2MgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBndWludDMyIHZlcl9mbGFncyA9IDAsIG51bV9lbnRyaWVzID0gMCwgaTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdmVyX2ZsYWdzKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmbnVtX2VudHJpZXMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfTE9HICgiJSpzICB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCB2ZXJfZmxhZ3MpOwotICBHU1RfTE9HICgiJSpzICBuIGVudHJpZXM6ICAgICAlZCIsIGRlcHRoLCAiIiwgbnVtX2VudHJpZXMpOwotCi0gIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoZGF0YSwgbnVtX2VudHJpZXMsIDQgKyA0ICsgNCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBmaXJzdCBjaHVuazogICAldSIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgc2FtcGxlIHBlciBjaDogJXUiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgICBHU1RfTE9HICgiJSpzICAgIHNhbXBsZSBkZXNjIGlkOiUwOHgiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9zdHN6IChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MgPSAwLCBzYW1wbGVfc2l6ZSA9IDAsIG51bV9lbnRyaWVzID0gMDsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdmVyX2ZsYWdzKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmc2FtcGxlX3NpemUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfTE9HICgiJSpzICB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCB2ZXJfZmxhZ3MpOwotICBHU1RfTE9HICgiJSpzICBzYW1wbGUgc2l6ZTogICAlZCIsIGRlcHRoLCAiIiwgc2FtcGxlX3NpemUpOwotCi0gIGlmIChzYW1wbGVfc2l6ZSA9PSAwKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm51bV9lbnRyaWVzKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9MT0cgKCIlKnMgIG4gZW50cmllczogICAgICVkIiwgZGVwdGgsICIiLCBudW1fZW50cmllcyk7Ci0jaWYgMAotICAgIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoZGF0YSwgbnVtX2VudHJpZXMsIDQpKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgICBHU1RfTE9HICgiJSpzICAgIHNhbXBsZSBzaXplOiAgICV1IiwgZGVwdGgsICIiLCBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfc3RjbyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50MzIgdmVyX2ZsYWdzID0gMCwgbnVtX2VudHJpZXMgPSAwLCBpOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZ2ZXJfZmxhZ3MpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZudW1fZW50cmllcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIHZlcl9mbGFncyk7Ci0gIEdTVF9MT0cgKCIlKnMgIG4gZW50cmllczogICAgICVkIiwgZGVwdGgsICIiLCBudW1fZW50cmllcyk7Ci0KLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfY2h1bmtzIChkYXRhLCBudW1fZW50cmllcywgNCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBjaHVuayBvZmZzZXQ6ICAldSIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX2N0dHMgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBndWludDMyIHZlcl9mbGFncyA9IDAsIG51bV9lbnRyaWVzID0gMCwgaSwgY291bnQ7Ci0gIGdpbnQzMiBvZmZzZXQ7Ci0KLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdmVyX2ZsYWdzKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmbnVtX2VudHJpZXMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfTE9HICgiJSpzICB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCB2ZXJfZmxhZ3MpOwotICBHU1RfTE9HICgiJSpzICBuIGVudHJpZXM6ICAgICAldSIsIGRlcHRoLCAiIiwgbnVtX2VudHJpZXMpOwotCi0gIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoZGF0YSwgbnVtX2VudHJpZXMsIDQgKyA0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKLSAgICBjb3VudCA9IEdFVF9VSU5UMzIgKGRhdGEpOwotICAgIG9mZnNldCA9IEdFVF9VSU5UMzIgKGRhdGEpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgc2FtcGxlIGNvdW50IDolOGQgb2Zmc2V0OiAlOGQiLCBkZXB0aCwgIiIsIGNvdW50LCBvZmZzZXQpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX2NzbGcgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBndWludDMyIHZlcl9mbGFncyA9IDAsIHNoaWZ0ID0gMDsKLSAgZ2ludDMyIGxlYXN0X29mZnNldCA9IDAsIHN0YXJ0X3RpbWUgPSAwLCBlbmRfdGltZSA9IDA7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcl9mbGFncykgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnNoaWZ0KSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfaW50MzJfYmUgKGRhdGEsICZsZWFzdF9vZmZzZXQpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZSAoZGF0YSwgJnN0YXJ0X3RpbWUpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF9pbnQzMl9iZSAoZGF0YSwgJmVuZF90aW1lKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLSAgR1NUX0xPRyAoIiUqcyAgc2hpZnQ6ICAgICAgICAgJXUiLCBkZXB0aCwgIiIsIHNoaWZ0KTsKLSAgR1NUX0xPRyAoIiUqcyAgbGVhc3Qgb2Zmc2V0OiAgJWQiLCBkZXB0aCwgIiIsIGxlYXN0X29mZnNldCk7Ci0gIEdTVF9MT0cgKCIlKnMgIHN0YXJ0IHRpbWU6ICAgICVkIiwgZGVwdGgsICIiLCBzdGFydF90aW1lKTsKLSAgR1NUX0xPRyAoIiUqcyAgZW5kIHRpbWU6ICAgICAgJWQiLCBkZXB0aCwgIiIsIGVuZF90aW1lKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9jbzY0IChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJfZmxhZ3MgPSAwLCBudW1fZW50cmllcyA9IDAsIGk7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnZlcl9mbGFncykgfHwKLSAgICAgICFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm51bV9lbnRyaWVzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLSAgR1NUX0xPRyAoIiUqcyAgbiBlbnRyaWVzOiAgICAgJWQiLCBkZXB0aCwgIiIsIG51bV9lbnRyaWVzKTsKLQotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19jaHVua3MgKGRhdGEsIG51bV9lbnRyaWVzLCA4KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKLSAgICBHU1RfTE9HICgiJSpzICAgIGNodW5rIG9mZnNldDogICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGRlcHRoLCAiIiwKLSAgICAgICAgR0VUX1VJTlQ2NCAoZGF0YSkpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX2Rjb20gKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19yZW1haW5pbmcgKGRhdGEsIDQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfTE9HICgiJSpzICBjb21wcmVzc2lvbiB0eXBlOiAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwgZGVwdGgsICIiLAotICAgICAgR1NUX0ZPVVJDQ19BUkdTIChHRVRfRk9VUkNDIChkYXRhKSkpOwotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9jbXZkIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfcmVtYWluaW5nIChkYXRhLCA0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgbGVuZ3RoOiAlZCIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9tZnJvIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfcmVtYWluaW5nIChkYXRhLCA0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICBHU1RfTE9HICgiJSpzICBzaXplOiAlZCIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9tZmhkIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgaWYgKCFxdF9hdG9tX3BhcnNlcl9oYXNfcmVtYWluaW5nIChkYXRhLCA0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICBHU1RfTE9HICgiJSpzICBzZXF1ZW5jZV9udW1iZXI6ICVkIiwgZGVwdGgsICIiLCBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX3RmcmEgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBndWludDY0IHRpbWUgPSAwLCBtb29mX29mZnNldCA9IDA7Ci0gIGd1aW50MzIgbGVuID0gMCwgbnVtX2VudHJpZXMgPSAwLCB2ZXJfZmxhZ3MgPSAwLCB0cmFja19pZCA9IDAsIGk7Ci0gIGd1aW50IHZhbHVlX3NpemUsIHRyYWZfc2l6ZSwgdHJ1bl9zaXplLCBzYW1wbGVfc2l6ZTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdmVyX2ZsYWdzKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyX2ZsYWdzKTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdHJhY2tfaWQpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZsZW4pIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZudW1fZW50cmllcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIHRyYWNrIElEOiAgICAgICV1IiwgZGVwdGgsICIiLCB0cmFja19pZCk7Ci0gIEdTVF9MT0cgKCIlKnMgIGxlbmd0aDogICAgICAgIDB4JXgiLCBkZXB0aCwgIiIsIGxlbik7Ci0gIEdTVF9MT0cgKCIlKnMgIG4gZW50cmllczogICAgICV1IiwgZGVwdGgsICIiLCBudW1fZW50cmllcyk7Ci0KLSAgdmFsdWVfc2l6ZSA9ICgodmVyX2ZsYWdzID4+IDI0KSA9PSAxKSA/IHNpemVvZiAoZ3VpbnQ2NCkgOiBzaXplb2YgKGd1aW50MzIpOwotICBzYW1wbGVfc2l6ZSA9IChsZW4gJiAzKSArIDE7Ci0gIHRydW5fc2l6ZSA9ICgobGVuICYgMTIpID4+IDIpICsgMTsKLSAgdHJhZl9zaXplID0gKChsZW4gJiA0OCkgPj4gNCkgKyAxOwotCi0gIGlmICghcXRfYXRvbV9wYXJzZXJfaGFzX2NodW5rcyAoZGF0YSwgbnVtX2VudHJpZXMsCi0gICAgICAgICAgdmFsdWVfc2l6ZSArIHZhbHVlX3NpemUgKyB0cmFmX3NpemUgKyB0cnVuX3NpemUgKyBzYW1wbGVfc2l6ZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0gICAgcXRfYXRvbV9wYXJzZXJfZ2V0X29mZnNldCAoZGF0YSwgdmFsdWVfc2l6ZSwgJnRpbWUpOwotICAgIHF0X2F0b21fcGFyc2VyX2dldF9vZmZzZXQgKGRhdGEsIHZhbHVlX3NpemUsICZtb29mX29mZnNldCk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICB0aW1lOiAgICAgICAgICAlIiBHX0dVSU5UNjRfRk9STUFULCBkZXB0aCwgIiIsIHRpbWUpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgbW9vZl9vZmZzZXQ6ICAgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgZGVwdGgsICIiLCBtb29mX29mZnNldCk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICB0cmFmX251bWJlcjogICAldSIsIGRlcHRoLCAiIiwKLSAgICAgICAgcXRfYXRvbV9wYXJzZXJfZ2V0X3VpbnRfd2l0aF9zaXplX3VuY2hlY2tlZCAoZGF0YSwgdHJhZl9zaXplKSk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICB0cnVuX251bWJlcjogICAldSIsIGRlcHRoLCAiIiwKLSAgICAgICAgcXRfYXRvbV9wYXJzZXJfZ2V0X3VpbnRfd2l0aF9zaXplX3VuY2hlY2tlZCAoZGF0YSwgdHJ1bl9zaXplKSk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBzYW1wbGVfbnVtYmVyOiAldSIsIGRlcHRoLCAiIiwKLSAgICAgICAgcXRfYXRvbV9wYXJzZXJfZ2V0X3VpbnRfd2l0aF9zaXplX3VuY2hlY2tlZCAoZGF0YSwgc2FtcGxlX3NpemUpKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX3RmaGQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBndWludDMyIGZsYWdzID0gMCwgbiA9IDAsIHRyYWNrX2lkID0gMDsKLSAgZ3VpbnQ2NCBiYXNlX2RhdGFfb2Zmc2V0ID0gMDsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwIChkYXRhLCAxKSB8fAotICAgICAgIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDI0X2JlIChkYXRhLCAmZmxhZ3MpKQotICAgIHJldHVybiBGQUxTRTsKLSAgR1NUX0xPRyAoIiUqcyAgZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIGZsYWdzKTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdHJhY2tfaWQpKQotICAgIHJldHVybiBGQUxTRTsKLSAgR1NUX0xPRyAoIiUqcyAgdHJhY2tfaWQ6ICV1IiwgZGVwdGgsICIiLCB0cmFja19pZCk7Ci0KLSAgaWYgKGZsYWdzICYgVEZfQkFTRV9EQVRBX09GRlNFVCkgewotICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50NjRfYmUgKGRhdGEsICZiYXNlX2RhdGFfb2Zmc2V0KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICBHU1RfTE9HICgiJSpzICAgIGJhc2UtZGF0YS1vZmZzZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGRlcHRoLCAiIiwgYmFzZV9kYXRhX29mZnNldCk7Ci0gIH0KLQotICBpZiAoZmxhZ3MgJiBURl9TQU1QTEVfREVTQ1JJUFRJT05fSU5ERVgpIHsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmbikpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBzYW1wbGUtZGVzY3JpcHRpb24taW5kZXg6ICV1IiwgZGVwdGgsICIiLCBuKTsKLSAgfQotCi0gIGlmIChmbGFncyAmIFRGX0RFRkFVTFRfU0FNUExFX0RVUkFUSU9OKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm4pKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIEdTVF9MT0cgKCIlKnMgICAgZGVmYXVsdC1zYW1wbGUtZHVyYXRpb246ICAldSIsIGRlcHRoLCAiIiwgbik7Ci0gIH0KLQotICBpZiAoZmxhZ3MgJiBURl9ERUZBVUxUX1NBTVBMRV9TSVpFKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm4pKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIEdTVF9MT0cgKCIlKnMgICAgZGVmYXVsdC1zYW1wbGUtc2l6ZTogICV1IiwgZGVwdGgsICIiLCBuKTsKLSAgfQotCi0gIGlmIChmbGFncyAmIFRGX0RFRkFVTFRfU0FNUExFX0ZMQUdTKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJm4pKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIEdTVF9MT0cgKCIlKnMgICAgZGVmYXVsdC1zYW1wbGUtZmxhZ3M6ICAldSIsIGRlcHRoLCAiIiwgbik7Ci0gIH0KLQotICBHU1RfTE9HICgiJSpzICAgIGR1cmF0aW9uLWlzLWVtcHR5OiAgICAgJXMiLCBkZXB0aCwgIiIsCi0gICAgICBmbGFncyAmIFRGX0RVUkFUSU9OX0lTX0VNUFRZID8gInllcyIgOiAibm8iKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF90cnVuIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiBmbGFncyA9IDAsIHNhbXBsZXNfY291bnQgPSAwLCBkYXRhX29mZnNldCA9IDAsIGZpcnN0X3NhbXBsZV9mbGFncyA9IDA7Ci0gIGd1aW50MzIgc2FtcGxlX2R1cmF0aW9uID0gMCwgc2FtcGxlX3NpemUgPSAwLCBzYW1wbGVfZmxhZ3MgPQotICAgICAgMCwgY29tcG9zaXRpb25fdGltZV9vZmZzZXRzID0gMDsKLSAgaW50IGkgPSAwOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKGRhdGEsIDEpIHx8Ci0gICAgICAhZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MjRfYmUgKGRhdGEsICZmbGFncykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIGZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCBmbGFncyk7Ci0KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnNhbXBsZXNfY291bnQpKQotICAgIHJldHVybiBGQUxTRTsKLSAgR1NUX0xPRyAoIiUqcyAgc2FtcGxlc19jb3VudDogJXUiLCBkZXB0aCwgIiIsIHNhbXBsZXNfY291bnQpOwotCi0gIGlmIChmbGFncyAmIFRSX0RBVEFfT0ZGU0VUKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJmRhdGFfb2Zmc2V0KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICBHU1RfTE9HICgiJSpzICAgIGRhdGEtb2Zmc2V0OiAldSIsIGRlcHRoLCAiIiwgZGF0YV9vZmZzZXQpOwotICB9Ci0KLSAgaWYgKGZsYWdzICYgVFJfRklSU1RfU0FNUExFX0ZMQUdTKSB7Ci0gICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJmZpcnN0X3NhbXBsZV9mbGFncykpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICBmaXJzdC1zYW1wbGUtZmxhZ3M6ICV1IiwgZGVwdGgsICIiLCBmaXJzdF9zYW1wbGVfZmxhZ3MpOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IHNhbXBsZXNfY291bnQ7IGkrKykgewotICAgIGlmIChmbGFncyAmIFRSX1NBTVBMRV9EVVJBVElPTikgewotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnNhbXBsZV9kdXJhdGlvbikpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIEdTVF9MT0cgKCIlKnMgICAgc2FtcGxlLWR1cmF0aW9uOiAgJXUiLCBkZXB0aCwgIiIsIHNhbXBsZV9kdXJhdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgVFJfU0FNUExFX1NJWkUpIHsKLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZzYW1wbGVfc2l6ZSkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIEdTVF9MT0cgKCIlKnMgICAgc2FtcGxlLXNpemU6ICAldSIsIGRlcHRoLCAiIiwgc2FtcGxlX3NpemUpOwotICAgIH0KLQotICAgIGlmIChmbGFncyAmIFRSX1NBTVBMRV9GTEFHUykgewotICAgICAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfZ2V0X3VpbnQzMl9iZSAoZGF0YSwgJnNhbXBsZV9mbGFncykpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIEdTVF9MT0cgKCIlKnMgICAgc2FtcGxlLWZsYWdzOiAgJXUiLCBkZXB0aCwgIiIsIHNhbXBsZV9mbGFncyk7Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgVFJfQ09NUE9TSVRJT05fVElNRV9PRkZTRVRTKSB7Ci0gICAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmY29tcG9zaXRpb25fdGltZV9vZmZzZXRzKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgR1NUX0xPRyAoIiUqcyAgICBjb21wb3NpdGlvbl90aW1lX29mZnNldHM6ICAldSIsIGRlcHRoLCAiIiwKLSAgICAgICAgICBjb21wb3NpdGlvbl90aW1lX29mZnNldHMpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX3RyZXggKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBpZiAoIXF0X2F0b21fcGFyc2VyX2hhc19yZW1haW5pbmcgKGRhdGEsIDQgKyA0ICsgNCArIDQgKyA0ICsgNCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgdHJhY2sgSUQ6ICAgICAgJTA4eCIsIGRlcHRoLCAiIiwgR0VUX1VJTlQzMiAoZGF0YSkpOwotICBHU1RfTE9HICgiJSpzICBkZWZhdWx0IHNhbXBsZSBkZXNjLiBpbmRleDogJTA4eCIsIGRlcHRoLCAiIiwKLSAgICAgIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgR1NUX0xPRyAoIiUqcyAgZGVmYXVsdCBzYW1wbGUgZHVyYXRpb246ICAgICUwOHgiLCBkZXB0aCwgIiIsCi0gICAgICBHRVRfVUlOVDMyIChkYXRhKSk7Ci0gIEdTVF9MT0cgKCIlKnMgIGRlZmF1bHQgc2FtcGxlIHNpemU6ICAgICAgICAlMDh4IiwgZGVwdGgsICIiLAotICAgICAgR0VUX1VJTlQzMiAoZGF0YSkpOwotICBHU1RfTE9HICgiJSpzICBkZWZhdWx0IHNhbXBsZSBmbGFnczogICAgICAgJTA4eCIsIGRlcHRoLCAiIiwKLSAgICAgIEdFVF9VSU5UMzIgKGRhdGEpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLXF0ZGVtdXhfZHVtcF9tZWhkIChHc3RRVERlbXV4ICogcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqIGRhdGEsIGludCBkZXB0aCkKLXsKLSAgZ3VpbnQzMiB2ZXJzaW9uID0gMDsKLSAgZ3VpbnQ2NCBmcmFnbWVudF9kdXJhdGlvbjsKLSAgZ3VpbnQgdmFsdWVfc2l6ZTsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfdWludDMyX2JlIChkYXRhLCAmdmVyc2lvbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIEdTVF9MT0cgKCIlKnMgIHZlcnNpb24vZmxhZ3M6ICUwOHgiLCBkZXB0aCwgIiIsIHZlcnNpb24pOwotCi0gIHZhbHVlX3NpemUgPSAoKHZlcnNpb24gPj4gMjQpID09IDEpID8gc2l6ZW9mIChndWludDY0KSA6IHNpemVvZiAoZ3VpbnQzMik7Ci0gIGlmIChxdF9hdG9tX3BhcnNlcl9nZXRfb2Zmc2V0IChkYXRhLCB2YWx1ZV9zaXplLCAmZnJhZ21lbnRfZHVyYXRpb24pKSB7Ci0gICAgR1NUX0xPRyAoIiUqcyAgZnJhZ21lbnQgZHVyYXRpb246ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGRlcHRoLCAiIiwgZnJhZ21lbnRfZHVyYXRpb24pOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1nYm9vbGVhbgotcXRkZW11eF9kdW1wX3RmZHQgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwgaW50IGRlcHRoKQotewotICBndWludDMyIHZlcnNpb24gPSAwOwotICBndWludDY0IGRlY29kZV90aW1lOwotICBndWludCB2YWx1ZV9zaXplOwotCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF91aW50MzJfYmUgKGRhdGEsICZ2ZXJzaW9uKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyc2lvbik7Ci0KLSAgdmFsdWVfc2l6ZSA9ICgodmVyc2lvbiA+PiAyNCkgPT0gMSkgPyBzaXplb2YgKGd1aW50NjQpIDogc2l6ZW9mIChndWludDMyKTsKLSAgaWYgKHF0X2F0b21fcGFyc2VyX2dldF9vZmZzZXQgKGRhdGEsIHZhbHVlX3NpemUsICZkZWNvZGVfdGltZSkpIHsKLSAgICBHU1RfTE9HICgiJSpzICBUcmFjayBmcmFnbWVudCBkZWNvZGUgdGltZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgZGVwdGgsICIiLCBkZWNvZGVfdGltZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfc2R0cCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50MzIgdmVyc2lvbjsKLSAgZ3VpbnQ4IHZhbDsKLSAgZ3VpbnQgaSA9IDE7Ci0KLSAgdmVyc2lvbiA9IEdFVF9VSU5UMzIgKGRhdGEpOwotICBHU1RfTE9HICgiJSpzICB2ZXJzaW9uL2ZsYWdzOiAlMDh4IiwgZGVwdGgsICIiLCB2ZXJzaW9uKTsKLQotICAvKiB0aGUgc2FtcGxlX2NvdW50IGlzIHNwZWNpZmllZCBpbiB0aGUgc3RzeiBvciBzdHoyIGJveC4KLSAgICogdGhlIGluZm9ybWF0aW9uIGZvciBhIHNhbXBsZSBpcyBzdG9yZWQgaW4gYSBzaW5nbGUgYnl0ZSwKLSAgICogc28gd2UgcmVhZCB1bnRpbCB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGJ5dGVzICovCi0gIHdoaWxlIChxdF9hdG9tX3BhcnNlcl9oYXNfcmVtYWluaW5nIChkYXRhLCAxKSkgewotICAgIHZhbCA9IEdFVF9VSU5UOCAoZGF0YSk7Ci0gICAgR1NUX0xPRyAoIiUqcyAgICAgc2FtcGxlIG51bWJlcjogJWQiLCBkZXB0aCwgIiIsIGkpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgIHNhbXBsZV9kZXBlbmRzX29uOiAlZCIsIGRlcHRoLCAiIiwKLSAgICAgICAgKChndWludDE2KSAodmFsKSkgJiAweDMpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgIHNhbXBsZV9pc19kZXBlbmRlZF9vbjogJWQiLCBkZXB0aCwgIiIsCi0gICAgICAgICgoZ3VpbnQxNikgKHZhbCA+PiAyKSkgJiAweDMpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgIHNhbXBsZV9oYXNfcmVkdW5kYW5jeTogJWQiLCBkZXB0aCwgIiIsCi0gICAgICAgICgoZ3VpbnQxNikgKHZhbCA+PiA0KSkgJiAweDMpOwotICAgIEdTVF9MT0cgKCIlKnMgICAgIGVhcmx5IGRpc3BsYXk6ICVkIiwgZGVwdGgsICIiLAotICAgICAgICAoKGd1aW50MTYpICh2YWwgPj4gNikpICYgMHgxKTsKLSAgICArK2k7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfc3ZtaSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGd1aW50MzIgdmVyc2lvbjsKLSAgZ3VpbnQgc3RlcmVvX21vbm9fY2hhbmdlX2NvdW50OwotICBndWludCBpOwotCi0gIHZlcnNpb24gPSBHRVRfVUlOVDMyIChkYXRhKTsKLSAgR1NUX0xPRyAoIiUqcyAgdmVyc2lvbi9mbGFnczogJTA4eCIsIGRlcHRoLCAiIiwgdmVyc2lvbik7Ci0KLSAgaWYgKCF2ZXJzaW9uKSB7Ci0gICAgLyogc3RlcmVvc2NvcGljIHZpc3VhbCB0eXBlIGluZm9ybWF0aW9uICovCi0gICAgR1NUX0xPRyAoIiUqcyAgICAgc3RlcmVvX2NvbXBvc2l0aW9uX3R5cGU6ICVkIiwgZGVwdGgsICIiLAotICAgICAgICBHRVRfVUlOVDggKGRhdGEpKTsKLSAgICBHU1RfTE9HICgiJSpzICAgICBpc19sZWZ0X2ZpcnN0OiAlZCIsIGRlcHRoLCAiIiwKLSAgICAgICAgKChndWludDgpIEdFVF9VSU5UOCAoZGF0YSkpICYgMHgwMSk7Ci0KLSAgICAvKiBzdGVyZW9fbW9ub19jaGFuZ2UgaW5mb3JtYXRpb24gKi8KLSAgICBzdGVyZW9fbW9ub19jaGFuZ2VfY291bnQgPSBHRVRfVUlOVDMyIChkYXRhKTsKLSAgICBHU1RfTE9HICgiJSpzICAgICBzdGVyZW9fbW9ub19jaGFuZ2VfY291bnQ6ICVkIiwgZGVwdGgsICIiLAotICAgICAgICBzdGVyZW9fbW9ub19jaGFuZ2VfY291bnQpOwotICAgIGZvciAoaSA9IDE7IGkgPD0gc3RlcmVvX21vbm9fY2hhbmdlX2NvdW50OyBpKyspIHsKLSAgICAgIEdTVF9MT0cgKCIlKnMgICAgIHNhbXBsZV9jb3VudDogJWQiLCBkZXB0aCwgIiIsIEdFVF9VSU5UMzIgKGRhdGEpKTsKLSAgICAgIEdTVF9MT0cgKCIlKnMgICAgIHN0ZXJlb19mbGFnOiAlZCIsIGRlcHRoLCAiIiwKLSAgICAgICAgICAoKGd1aW50OCkgR0VUX1VJTlQ4IChkYXRhKSkgJiAweDAxKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X2R1bXBfdW5rbm93biAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLCBpbnQgZGVwdGgpCi17Ci0gIGludCBsZW47Ci0KLSAgbGVuID0gZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKGRhdGEpOwotICBHU1RfTE9HICgiJSpzICBsZW5ndGg6ICVkIiwgZGVwdGgsICIiLCBsZW4pOwotCi0gIEdTVF9NRU1EVU1QX09CSkVDVCAocXRkZW11eCwgInVua25vd24gYXRvbSBkYXRhIiwKLSAgICAgIGdzdF9ieXRlX3JlYWRlcl9wZWVrX2RhdGFfdW5jaGVja2VkIChkYXRhKSwgbGVuKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCAoR05vZGUgKiBub2RlLCBncG9pbnRlciBxdGRlbXV4KQotewotICBHc3RCeXRlUmVhZGVyIHBhcnNlcjsKLSAgZ3VpbnQ4ICpidWZmZXIgPSAoZ3VpbnQ4ICopIG5vZGUtPmRhdGE7ICAgICAgIC8qIEZJWE1FOiBtb3ZlIHRvIGJ5dGUgcmVhZGVyICovCi0gIGd1aW50MzIgbm9kZV9sZW5ndGg7Ci0gIGd1aW50MzIgZm91cmNjOwotICBjb25zdCBRdE5vZGVUeXBlICp0eXBlOwotICBpbnQgZGVwdGg7Ci0KLSAgbm9kZV9sZW5ndGggPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGJ1ZmZlcik7Ci0gIGZvdXJjYyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoYnVmZmVyICsgNCk7Ci0KLSAgZ193YXJuX2lmX2ZhaWwgKG5vZGVfbGVuZ3RoID49IDgpOwotCi0gIGdzdF9ieXRlX3JlYWRlcl9pbml0ICgmcGFyc2VyLCBidWZmZXIgKyA4LCBub2RlX2xlbmd0aCAtIDgpOwotCi0gIHR5cGUgPSBxdGRlbXV4X3R5cGVfZ2V0IChmb3VyY2MpOwotCi0gIGRlcHRoID0gKGdfbm9kZV9kZXB0aCAobm9kZSkgLSAxKSAqIDI7Ci0gIEdTVF9MT0cgKCIlKnMnJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIicsIFslZF0sICVzIiwKLSAgICAgIGRlcHRoLCAiIiwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpLCBub2RlX2xlbmd0aCwgdHlwZS0+bmFtZSk7Ci0KLSAgaWYgKHR5cGUtPmR1bXApIHsKLSAgICBnYm9vbGVhbiByZXQ7Ci0KLSAgICByZXQgPSB0eXBlLT5kdW1wIChHU1RfUVRERU1VWF9DQVNUIChxdGRlbXV4KSwgJnBhcnNlciwgZGVwdGgpOwotCi0gICAgaWYgKCFyZXQpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiJSpzICBub3QgZW5vdWdoIGRhdGEgcGFyc2luZyBhdG9tICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgIGRlcHRoLCAiIiwgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLWdib29sZWFuCi1xdGRlbXV4X25vZGVfZHVtcCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdOb2RlICogbm9kZSkKLXsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIC8qIE9ubHkgdHJhdmVyc2UvZHVtcCBpZiB3ZSBrbm93IGl0IHdpbGwgYmUgb3V0cHV0dGVkIGluIHRoZSBlbmQgKi8KLSAgaWYgKHF0ZGVtdXhfZGVidWctPnRocmVzaG9sZCA8IEdTVF9MRVZFTF9MT0cpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgZ19ub2RlX3RyYXZlcnNlIChub2RlLCBHX1BSRV9PUkRFUiwgR19UUkFWRVJTRV9BTEwsIC0xLAotICAgICAgcXRkZW11eF9ub2RlX2R1bXBfZm9yZWFjaCwgcXRkZW11eCk7Ci0jZW5kaWYKLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5oIGIvZ3N0L2lzb21wNC9xdGRlbXV4X2R1bXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIzNDAyMy4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L3F0ZGVtdXhfZHVtcC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU1RFcmljc3NvbiA8YmVuamFtaW4uZ2FpZ25hcmRAc3Rlcmljc3Nvbi5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9RVERFTVVYX0RVTVBfSF9fCi0jZGVmaW5lIF9fR1NUX1FUREVNVVhfRFVNUF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxxdGRlbXV4Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLSAgICBnYm9vbGVhbiBxdGRlbXV4X2R1bXBfbXZoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdGtoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfZWxzdCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfbWRoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfaGRsciAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdm1oZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfZHJlZiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3RzZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3R0cyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3RzcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3RwcyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3RzYyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3RzeiAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3RjbyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfY282NCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfZGNvbSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfY212ZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfY3R0cyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfY3NsZyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfbWZybyAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfbWZoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdGZyYSAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdGZoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdHJ1biAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdHJleCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfbWVoZCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc2R0cCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdGZkdCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfdW5rbm93biAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdzdEJ5dGVSZWFkZXIgKiBkYXRhLAotICAgIGludCBkZXB0aCk7Ci1nYm9vbGVhbiBxdGRlbXV4X2R1bXBfc3ZtaSAoR3N0UVREZW11eCAqcXRkZW11eCwgR3N0Qnl0ZVJlYWRlciAqZGF0YSwKLSAgICBpbnQgZGVwdGgpOwotCi1nYm9vbGVhbiBxdGRlbXV4X25vZGVfZHVtcCAoR3N0UVREZW11eCAqIHF0ZGVtdXgsIEdOb2RlICogbm9kZSk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUVRERU1VWF9EVU1QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L2lzb21wNC9xdGRlbXV4X2xhbmcuYyBiL2dzdC9pc29tcDQvcXRkZW11eF9sYW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTc4ZDcuLjAwMDAwMDAKLS0tIGEvZ3N0L2lzb21wNC9xdGRlbXV4X2xhbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKiBHU3RyZWFtZXIgUXVpY2t0aW1lL0lTTyBkZW11eGVyIGxhbmd1YWdlIHV0aWxpdHkgZnVuY3Rpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAicXRkZW11eC5oIgotI2luY2x1ZGUgInF0ZGVtdXhfbGFuZy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL21hYy9saWJyYXJ5L2RvY3VtZW50YXRpb24vUXVpY2tUaW1lL1FURkYvUVRGRkNoYXA0L3F0ZmY0Lmh0bWwgKi8KLQotc3RhdGljIGNvbnN0IGdjaGFyIHF0X2xhbmdfbWFwW11bNF0gPSB7Ci0KLS8qIDAwMCBFbmdsaXNoCi0gKiAwMDEgRnJlbmNoCi0gKiAwMDIgR2VybWFuCi0gKiAwMDMgSXRhbGlhbgotICogMDA0IER1dGNoCi0gKiAwMDUgU3dlZGlzaAotICogMDA2IFNwYW5pc2gKLSAqIDAwNyBEYW5pc2gKLSAqIDAwOCBQb3J0dWd1ZXNlCi0gKiAwMDkgTm9yd2VnaWFuCi0gKi8KLSAgImVuZyIsICJmcmUiLCAiZGV1IiwgIml0YSIsICJubGQiLCAic3dlIiwgInNwYSIsICJkYW4iLCAicG9yIiwgIm5vciIsCi0KLS8qIDAxMCBIZWJyZXcKLSAqIDAxMSBKYXBhbmVzZQotICogMDEyIEFyYWJpYwotICogMDEzIEZpbm5pc2gKLSAqIDAxNCBHcmVlawotICogMDE1IEljZWxhbmRpYwotICogMDE2IE1hbHRlc2UKLSAqIDAxNyBUdXJraXNoCi0gKiAwMTggQ3JvYXRpYW4KLSAqIDAxOSBUcmFkaXRpb25hbCBDaGluZXNlIChJU08gNjM5LTIgY2FuJ3QgZXhwcmVzcyBzY3JpcHQgZGlmZmVyZW5jZXMsIHNvIHpobykKLSAqLwotICAiaGViIiwgImpwbiIsICJhcmEiLCAiZmluIiwgImVsbCIsICJpc2wiLCAibWx0IiwgInR1ciIsICJocnYiLCAiemhvIiwKLQotLyogMDIwIFVyZHUKLSAqIDAyMSBIaW5kaQotICogMDIyIFRoYWkKLSAqIDAyMyBLb3JlYW4KLSAqIDAyNCBMaXRodWFuaWFuCi0gKiAwMjUgUG9saXNoCi0gKiAwMjYgSHVuZ2FyaWFuCi0gKiAwMjcgRXN0b25pYW4KLSAqIDAyOCBMYXR2aWFuIC8gTGV0dGlzaAotICogMDI5IExhcHBpc2ggLyBTYWFtaXNoICh1c2VkIGNvZGUgZm9yIE5vdGhlcm4gU2FtaSkKLSAqLwotICAidXJkIiwgImhpbiIsICJ0aGEiLCAia29yIiwgImxpdCIsICJwb2wiLCAiaHVuIiwgImVzdCIsICJsYXYiLCAic21lIiwKLQotLyogMDMwIEZhZXJvZXNlCi0gKiAwMzEgRmFyc2kKLSAqIDAzMiBSdXNzaWFuCi0gKiAwMzMgU2ltcGxpZmllZCBDaGluZXNlIChJU08gNjM5LTIgY2FuJ3QgZXhwcmVzcyBzY3JpcHQgZGlmZmVyZW5jZXMsIHNvIHpobykKLSAqIDAzNCBGbGVtaXNoIChubyBJU08gNjM5LTIgY29kZSwgdXNlZCBEdXRjaCBjb2RlKQotICogMDM1IElyaXNoCi0gKiAwMzYgQWxiYW5pYW4KLSAqIDAzNyBSb21hbmlhbgotICogMDM4IEN6ZWNoCi0gKiAwMzkgU2xvdmFrCi0gKi8KLSAgImZhbyIsICJmYXMiLCAicnVzIiwgInpobyIsICJubGQiLCAiZ2xlIiwgInNxaSIsICJyb24iLCAiY2VzIiwgInNsayIsCi0KLS8qIDA0MCBTbG92ZW5pYW4KLSAqIDA0MSBZaWRkaXNoCi0gKiAwNDIgU2VyYmlhbgotICogMDQzIE1hY2Vkb25pYW4KLSAqIDA0NCBCdWxnYXJpYW4KLSAqIDA0NSBVa3JhaW5pYW4KLSAqIDA0NiBCeWVsb3J1c3NpYW4KLSAqIDA0NyBVemJlawotICogMDQ4IEthemFraAotICogMDQ5IEF6ZXJiYWlqYW5pCi0gKi8KLSAgInNsdiIsICJ5aWQiLCAic3JwIiwgIm1rZCIsICJidWwiLCAidWtyIiwgImJlbCIsICJ1emIiLCAia2F6IiwgImF6ZSIsCi0KLS8qIDA1MCBBemVyYmFpamFuQXIgKHByZXN1bWFibHkgc2NyaXB0IGRpZmZlcmVuY2U/IHVzZWQgYXplIGhlcmUpCi0gKiAwNTEgQXJtZW5pYW4KLSAqIDA1MiBHZW9yZ2lhbgotICogMDUzIE1vbGRhdmlhbgotICogMDU0IEtpcmdoaXoKLSAqIDA1NSBUYWppa2kKLSAqIDA1NiBUdXJrbWVuCi0gKiAwNTcgTW9uZ29saWFuCi0gKiAwNTggTW9uZ29saWFuQ3lyIChwcmVzdW1hYmx5IHNjcmlwdCBkaWZmZXJlbmNlPyB1c2VkIG1vbiBoZXJlKQotICogMDU5IFBhc2h0bwotICovCi0KLSAgImF6ZSIsICJoeWUiLCAia2F0IiwgIm1vbCIsICJraXIiLCAidGdrIiwgInR1ayIsICJtb24iLCAibW9uIiwgInB1cyIsCi0KLQotLyogMDYwIEt1cmRpc2gKLSAqIDA2MSBLYXNobWlyaQotICogMDYyIFNpbmRoaQotICogMDYzIFRpYmV0YW4KLSAqIDA2NCBOZXBhbGkKLSAqIDA2NSBTYW5za3JpdAotICogMDY2IE1hcmF0aGkKLSAqIDA2NyBCZW5nYWxpCi0gKiAwNjggQXNzYW1lc2UKLSAqIDA2OSBHdWphcmF0aQotICovCi0gICJrdXIiLCAia2FzIiwgInNuZCIsICJib2QiLCAibmVwIiwgInNhbiIsICJtYXIiLCAiYmVuIiwgImFzbSIsICJndWoiLAotCi0vKiAwNzAgUHVuamFiaQotICogMDcxIE9yaXlhCi0gKiAwNzIgTWFsYXlhbGFtCi0gKiAwNzMgS2FubmFkYQotICogMDc0IFRhbWlsCi0gKiAwNzUgVGVsdWd1Ci0gKiAwNzYgU2luaGFsZXNlCi0gKiAwNzcgQnVybWVzZQotICogMDc4IEtobWVyCi0gKiAwNzkgTGFvCi0gKi8KLSAgInBhbiIsICJvcmkiLCAibWFsIiwgImthbiIsICJ0YW0iLCAidGVsIiwgInNpbiIsICJteWEiLCAia2htIiwgImxhbyIsCi0KLS8qIDA4MCBWaWV0bmFtZXNlCi0gKiAwODEgSW5kb25lc2lhbgotICogMDgyIFRhZ2Fsb2cKLSAqIDA4MyBNYWxheVJvbWFuCi0gKiAwODQgTWFsYXlBcmFiaWMKLSAqIDA4NSBBbWhhcmljCi0gKiAwODcgR2FsbGEgKHNhbWUgYXMgT3JvbW8/KQotICogMDg3IE9yb21vCi0gKiAwODggU29tYWxpCi0gKiAwODkgU3dhaGlsaQotICovCi0gICJ2aWUiLCAiaW5kIiwgInRnbCIsICJtc2EiLCAibXNhIiwgImFtaCIsICJvcm0iLCAib3JtIiwgInNvbSIsICJzd2EiLAotCi0vKiAwOTAgUnVhbmRhCi0gKiAwOTEgUnVuZGkKLSAqIDA5MiBDaGV3YQotICogMDkzIE1hbGFnYXN5Ci0gKiAwOTQgRXNwZXJhbnRvCi0gKiAwOTUgLS0tCi0gKiAwOTYgLS0tCi0gKiAwOTcgLS0tCi0gKiAwOTggLS0tCi0gKiAwOTkgLS0tCi0gKi8KLSAgImtpbiIsICJydW4iLCAibnlhIiwgIm1sZyIsICJlcCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAidW5kIiwKLQotLyogMTAwLTEwOSAtLS0KLSAqIDExMC0xMTkgLS0tCi0gKi8KLSAgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsCi0gICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLAotCi0vKiAxMjAtMTI3IC0tLQotICogMTI4IFdlbHNoCi0gKiAxMjkgQmFzcXVlCi0gKi8KLSAgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAidW5kIiwgInVuZCIsICJ1bmQiLCAiY3ltIiwgImV1cyIsCi0KLS8qIDEzMCBDYXRhbGFuCi0gKiAxMzEgTGF0aW4KLSAqIDEzMiBRdWVjaHVhCi0gKiAxMzMgR3VhcmFuaQotICogMTM0IEF5bWFyYQotICogMTM1IFRhdGFyCi0gKiAxMzYgVWlnaHVyCi0gKiAxMzcgRHpvbmdraGEKLSAqIDEzOCBKYXZhbmVzZVJvbQotICovCi0gICJjYXQiLCAibGF0IiwgInF1ZSIsICJncm4iLCAiYXltIiwgInRhdCIsICJ1aWciLCAiZHpvIiwgImphdiIKLX07Ci0KLS8qIG1hcCBxdWlja3RpbWUgbGFuZ3VhZ2UgY29kZSB0byBJU08tNjM5LTJUIGlkLCByZXR1cm5zICJ1bmQiIGlmIHVua25vd24gKi8KLXZvaWQKLXF0ZGVtdXhfbGFuZ19tYXBfcXRfY29kZV90b19pc28gKGdjaGFyIGlkWzRdLCBndWludDE2IHF0X2xhbmdfY29kZSkKLXsKLSAgY29uc3QgZ2NoYXIgKmlzb19jb2RlOwotCi0gIGdfYXNzZXJ0IChxdF9sYW5nX2NvZGUgPCAweDQwMCk7Ci0KLSAgaWYgKHF0X2xhbmdfY29kZSA8IEdfTl9FTEVNRU5UUyAocXRfbGFuZ19tYXApKQotICAgIGlzb19jb2RlID0gcXRfbGFuZ19tYXBbcXRfbGFuZ19jb2RlXTsKLSAgZWxzZQotICAgIGlzb19jb2RlID0gInVuZCI7Ci0KLSAgR1NUX0RFQlVHICgibWFwcGVkIHF1aWNrdGltZSBsYW5ndWFnZSBjb2RlICV1IHRvIElTTyA2MzktMlQgY29kZSAnJXMnIiwKLSAgICAgIHF0X2xhbmdfY29kZSwgaXNvX2NvZGUpOwotCi0gIG1lbWNweSAoaWQsIGlzb19jb2RlLCA0KTsKLQotICBnX2Fzc2VydCAoaWRbM10gPT0gJ1wwJyk7Ci19CmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXhfbGFuZy5oIGIvZ3N0L2lzb21wNC9xdGRlbXV4X2xhbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA3YzVmNy4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L3F0ZGVtdXhfbGFuZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyogR1N0cmVhbWVyIFF1aWNrdGltZS9JU08gZGVtdXhlciBsYW5ndWFnZSB1dGlsaXR5IGZ1bmN0aW9ucwotICogQ29weXJpZ2h0IChDKSAyMDEwIFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9RVERFTVVYX0xBTkdfSF9fCi0jZGVmaW5lIF9fR1NUX1FUREVNVVhfTEFOR19IX18KLQotR19CRUdJTl9ERUNMUwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi12b2lkIHF0ZGVtdXhfbGFuZ19tYXBfcXRfY29kZV90b19pc28gKGdjaGFyIGlkWzRdLCBndWludDE2IHF0X2xhbmdfY29kZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9RVERFTVVYX0xBTkdfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuYyBiL2dzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjA4ZThiLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvcXRkZW11eF90eXBlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAicXRkZW11eF90eXBlcy5oIgotI2luY2x1ZGUgInF0ZGVtdXhfZHVtcC5oIgotI2luY2x1ZGUgImZvdXJjYy5oIgotCi1zdGF0aWMgY29uc3QgUXROb2RlVHlwZSBxdF9ub2RlX3R5cGVzW10gPSB7Ci0gIHtGT1VSQ0NfbW9vdiwgIm1vdmllIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19tdmhkLCAibW92aWUgaGVhZGVyIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF9tdmhkfSwKLSAge0ZPVVJDQ19jbGlwLCAiY2xpcHBpbmciLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3RyYWssICJ0cmFjayIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfdWR0YSwgInVzZXIgZGF0YSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sICAgICAgIC8qIHNwZWNpYWwgY29udGFpbmVyICovCi0gIHtGT1VSQ0NfY3RhYiwgImNvbG9yIHRhYmxlIiwgMCx9LAotICB7Rk9VUkNDX3RraGQsICJ0cmFjayBoZWFkZXIiLCAwLAotICAgICAgcXRkZW11eF9kdW1wX3RraGR9LAotICB7Rk9VUkNDX2NyZ24sICJjbGlwcGluZyByZWdpb24iLCAwLH0sCi0gIHtGT1VSQ0NfbWF0dCwgInRyYWNrIG1hdHRlIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19rbWF0LCAiY29tcHJlc3NlZCBtYXR0ZSIsIDAsfSwKLSAge0ZPVVJDQ19lZHRzLCAiZWRpdCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfZWxzdCwgImVkaXQgbGlzdCIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfZWxzdH0sCi0gIHtGT1VSQ0NfbG9hZCwgInRyYWNrIGxvYWQgc2V0dGluZ3MiLCAwLH0sCi0gIHtGT1VSQ0NfdHJlZiwgInRyYWNrIHJlZmVyZW5jZSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfaW1hcCwgInRyYWNrIGlucHV0IG1hcCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX19pbiwgInRyYWNrIGlucHV0IiwgMCx9LCAgICAgLyogc3BlY2lhbCBjb250YWluZXIgKi8KLSAge0ZPVVJDQ19fX3R5LCAiaW5wdXQgdHlwZSIsIDAsfSwKLSAge0ZPVVJDQ19tZGlhLCAibWVkaWEiLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfbWRoZCwgIm1lZGlhIGhlYWRlciIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfbWRoZH0sCi0gIHtGT1VSQ0NfaGRsciwgImhhbmRsZXIgcmVmZXJlbmNlIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF9oZGxyfSwKLSAge0ZPVVJDQ19taW5mLCAibWVkaWEgaW5mb3JtYXRpb24iLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0Nfdm1oZCwgInZpZGVvIG1lZGlhIGluZm9ybWF0aW9uIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF92bWhkfSwKLSAge0ZPVVJDQ19zbWhkLCAic291bmQgbWVkaWEgaW5mb3JtYXRpb24iLCAwfSwKLSAge0ZPVVJDQ19nbWhkLCAiYmFzZSBtZWRpYSBpbmZvcm1hdGlvbiBoZWFkZXIiLCAwfSwKLSAge0ZPVVJDQ19nbWluLCAiYmFzZSBtZWRpYSBpbmZvIiwgMH0sCi0gIHtGT1VSQ0NfZGluZiwgImRhdGEgaW5mb3JtYXRpb24iLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfZHJlZiwgImRhdGEgcmVmZXJlbmNlIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF9kcmVmfSwKLSAge0ZPVVJDQ19zdGJsLCAic2FtcGxlIHRhYmxlIiwgUVRfRkxBR19DT05UQUlORVJ9LAotICB7Rk9VUkNDX3N0c2QsICJzYW1wbGUgZGVzY3JpcHRpb24iLCAwLAotICAgICAgcXRkZW11eF9kdW1wX3N0c2R9LAotICB7Rk9VUkNDX3N0dHMsICJ0aW1lLXRvLXNhbXBsZSIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfc3R0c30sCi0gIHtGT1VSQ0Nfc3RwcywgInBhcnRpYWwgc3luYyBzYW1wbGUiLCAwLAotICAgICAgcXRkZW11eF9kdW1wX3N0cHN9LAotICB7Rk9VUkNDX3N0c3MsICJzeW5jIHNhbXBsZSIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfc3Rzc30sCi0gIHtGT1VSQ0Nfc3RzYywgInNhbXBsZS10by1jaHVuayIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfc3RzY30sCi0gIHtGT1VSQ0Nfc3RzeiwgInNhbXBsZSBzaXplIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF9zdHN6fSwKLSAge0ZPVVJDQ19zdGNvLCAiY2h1bmsgb2Zmc2V0IiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF9zdGNvfSwKLSAge0ZPVVJDQ19jbzY0LCAiNjQtYml0IGNodW5rIG9mZnNldCIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfY282NH0sCi0gIHtGT1VSQ0NfdmlkZSwgInZpZGVvIG1lZGlhIiwgMH0sCi0gIHtGT1VSQ0NfY21vdiwgImNvbXByZXNzZWQgbW92aWUiLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfZGNvbSwgImNvbXByZXNzZWQgZGF0YSIsIDAsIHF0ZGVtdXhfZHVtcF9kY29tfSwKLSAge0ZPVVJDQ19jbXZkLCAiY29tcHJlc3NlZCBtb3ZpZSBkYXRhIiwgMCwgcXRkZW11eF9kdW1wX2NtdmR9LAotICB7Rk9VUkNDX2hpbnQsICJoaW50IiwgMCx9LAotICB7Rk9VUkNDX21wNGEsICJtcDRhIiwgMCx9LAotICB7Rk9VUkNDX21wNHYsICJtcDR2IiwgMCx9LAotICB7Rk9VUkNDX21qcDIsICJtanAyIiwgMCx9LAotICB7Rk9VUkNDX21oZHIsICJtaGRyIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19qcDJoLCAianAyaCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfY29sciwgImNvbHIiLCAwLH0sCi0gIHtGT1VSQ0NfaWhkciwgImloZHIiLCAwLH0sCi0gIHtGT1VSQ0NfZmllbCwgImZpZWwiLCAwLH0sCi0gIHtGT1VSQ0NfanAyeCwgImpwMngiLCAwLH0sCi0gIHtGT1VSQ0NfYWxhYywgImFsYWMiLCAwLH0sCi0gIHtGT1VSQ0Nfd2F2ZSwgIndhdmUiLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfYXBwbCwgImFwcGwiLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfZXNkcywgImVzZHMiLCAwfSwKLSAge0ZPVVJDQ19obnRpLCAiaG50aSIsIFFUX0ZMQUdfQ09OVEFJTkVSfSwKLSAge0ZPVVJDQ19ydHBfLCAicnRwICIsIDAsIHF0ZGVtdXhfZHVtcF91bmtub3dufSwKLSAge0ZPVVJDQ19zZHBfLCAic2RwICIsIDAsIHF0ZGVtdXhfZHVtcF91bmtub3dufSwKLSAge0ZPVVJDQ19tZXRhLCAibWV0YSIsIDAsIHF0ZGVtdXhfZHVtcF91bmtub3dufSwKLSAge0ZPVVJDQ19pbHN0LCAiaWxzdCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX25hbSwgIk5hbWUiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3RpdGwsICJUaXRsZSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX0FSVCwgIkFydGlzdCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfYUFSVCwgIkFsYnVtIEFydGlzdCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfYXV0aCwgIkF1dGhvciIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfcGVyZiwgIlBlcmZvcm1lciIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX3dydCwgIldyaXRlciIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX2dycCwgIkdyb3VwaW5nIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19fYWxiLCAiQWxidW0iLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX2FsYm0sICJBbGJ1bSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX2RheSwgIkRhdGUiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX19jcHksICJDb3B5cmlnaHQiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX19jbXQsICJDb21tZW50IiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19fZGVzLCAiRGVzY3JpcHRpb24iLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX2Rlc2MsICJEZXNjcmlwdGlvbiIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfZHNjcCwgIkRlc2NyaXB0aW9uIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19fbHlyLCAiTHlyaWNzIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19fcmVxLCAiUmVxdWlyZW1lbnQiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX19lbmMsICJFbmNvZGVyIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19nbnJlLCAiR2VucmUiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3Rya24sICJUcmFjayBOdW1iZXIiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX2Rpc2MsICJEaXNjIE51bWJlciIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfZGlzaywgIkRpc2MgTnVtYmVyIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19jcHJ0LCAiQ29weXJpZ2h0IiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19jcGlsLCAiQ29tcGlsYXRpb24iLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3BnYXAsICJHYXBsZXNzIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19wY3N0LCAiUG9kY2FzdCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfdG1wbywgIlRlbXBvIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19jb3ZyLCAiQ292ZXIiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3Nvbm0sICJTb3J0IFRpdGxlIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19zb2FsLCAiU29ydCBBbGJ1bSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0Nfc29hciwgIlNvcnQgQXJ0aXN0IiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19zb2FhLCAiU29ydCBBbGJ1bSBBcnRpc3QiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3NvY28sICJTb3J0IENvbXBvc2VyIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19zb3NuLCAiU29ydCBUViBTaG93IiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ190dnNoLCAiVFYgU2hvdyIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfdHZlbiwgIlRWIEVwaXNvZGUgSUQiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX3R2c24sICJUViBTZWFzb24gTnVtYmVyIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ190dmVzLCAiVFYgRXBpc29kZSBOdW1iZXIiLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX2tleXcsICJLZXl3b3JkcyIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0Nfa3l3ZCwgIktleXdvcmRzIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19fdG9vLCAiRW5jb2RlciIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfX19fXywgIi0tLS0iLCBRVF9GTEFHX0NPTlRBSU5FUix9LAotICB7Rk9VUkNDX2RhdGEsICJkYXRhIiwgMCwgcXRkZW11eF9kdW1wX3Vua25vd259LAotICB7Rk9VUkNDX2ZyZWUsICJmcmVlIiwgMCx9LAotICB7Rk9VUkNDX1NWUTMsICJTVlEzIiwgMCx9LAotICB7Rk9VUkNDX3JtcmEsICJybXJhIiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19ybWRhLCAicm1kYSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfcmRyZiwgInJkcmYiLCAwLH0sCi0gIHtGT1VSQ0NfX2dlbiwgIkN1c3RvbSBHZW5yZSIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfY3R0cywgIkNvbXBvc2l0aW9uIHRpbWUgdG8gc2FtcGxlIiwgMCwgcXRkZW11eF9kdW1wX2N0dHN9LAotICB7Rk9VUkNDX2NzbGcsICJDb21wb3NpdGlvbiBTaGlmdCBMZWFzdCBHcmVhdGVzdCIsIDAsIHF0ZGVtdXhfZHVtcF9jc2xnfSwKLSAge0ZPVVJDQ19YaVRoLCAiWGlUaCIsIDB9LAotICB7Rk9VUkNDX1hkeFQsICJYZHhUIiwgMH0sCi0gIHtGT1VSQ0NfbG9jaSwgImxvY2kiLCAwfSwKLSAge0ZPVVJDQ19jbHNmLCAiY2xzZiIsIDB9LAotICB7Rk9VUkNDX21mcmEsICJtb3ZpZSBmcmFnbWVudCByYW5kb20gYWNjZXNzIiwKLSAgICAgIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfdGZyYSwgInRyYWNrIGZyYWdtZW50IHJhbmRvbSBhY2Nlc3MiLCAwLAotICAgICAgcXRkZW11eF9kdW1wX3RmcmF9LAotICB7Rk9VUkNDX21mcm8sICJtb3ZpZSBmcmFnbWVudCByYW5kb20gYWNjZXNzIG9mZnNldCIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfbWZyb30sCi0gIHtGT1VSQ0NfbW9vZiwgIm1vdmllIGZyYWdtZW50IiwgUVRfRkxBR19DT05UQUlORVIsfSwKLSAge0ZPVVJDQ19tZmhkLCAibW92aWUgZnJhZ21lbnQgaGVhZGVyIiwgMCwgcXRkZW11eF9kdW1wX21maGR9LAotICB7Rk9VUkNDX3RyYWYsICJ0cmFjayBmcmFnbWVudCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfdGZoZCwgInRyYWNrIGZyYWdtZW50IGhlYWRlciIsIDAsCi0gICAgICBxdGRlbXV4X2R1bXBfdGZoZH0sCi0gIHtGT1VSQ0Nfc2R0cCwgImluZGVwZW5kZW50IGFuZCBkaXNwb3NhYmxlIHNhbXBsZXMiLCAwLAotICAgICAgcXRkZW11eF9kdW1wX3NkdHB9LAotICB7Rk9VUkNDX3RydW4sICJ0cmFjayBmcmFnbWVudCBydW4iLCAwLCBxdGRlbXV4X2R1bXBfdHJ1bn0sCi0gIHtGT1VSQ0NfbWRhdCwgIm1vb3ZpZSBkYXRhIiwgMCwgcXRkZW11eF9kdW1wX3Vua25vd259LAotICB7Rk9VUkNDX3RyZXgsICJtb292aWUgZGF0YSIsIDAsIHF0ZGVtdXhfZHVtcF90cmV4fSwKLSAge0ZPVVJDQ19tdmV4LCAibXZleCIsIFFUX0ZMQUdfQ09OVEFJTkVSLH0sCi0gIHtGT1VSQ0NfbWVoZCwgIm1vdmllIGV4dGVuZHMgaGVhZGVyIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF9tZWhkfSwKLSAge0ZPVVJDQ19vdmMxLCAib3ZjMSIsIDB9LAotICB7Rk9VUkNDX293bWEsICJvd21hIiwgMH0sCi0gIHtGT1VSQ0NfYXZjQywgIkFWIGNvZGVjIGNvbmZpZ3VyYXRpb24gY29udGFpbmVyIiwgMH0sCi0gIHtGT1VSQ0NfYXZjMSwgIkFWIGNvZGVjIGNvbmZpZ3VyYXRpb24gdjEiLCAwfSwKLSAge0ZPVVJDQ19hdmMzLCAiQVYgY29kZWMgY29uZmlndXJhdGlvbiB2MyIsIDB9LAotICB7Rk9VUkNDX21wNHMsICJWT0JTVUIgY29kZWMgY29uZmlndXJhdGlvbiIsIDB9LAotICB7Rk9VUkNDX2h2YzEsICJIRVZDIGNvZGVjIGNvbmZpZ3VyYXRpb24iLCAwfSwKLSAge0ZPVVJDQ19oZXYxLCAiSEVWQyBjb2RlYyBjb25maWd1cmF0aW9uIiwgMH0sCi0gIHtGT1VSQ0NfaHZjQywgIkhFVkMgY29kZWMgY29uZmlndXJhdGlvbiBjb250YWluZXIiLCAwfSwKLSAge0ZPVVJDQ190ZmR0LCAiVHJhY2sgZnJhZ21lbnQgZGVjb2RlIHRpbWUiLCAwLCBxdGRlbXV4X2R1bXBfdGZkdH0sCi0gIHtGT1VSQ0NfY2hhcCwgIkNoYXB0ZXIgUmVmZXJlbmNlIn0sCi0gIHtGT1VSQ0NfYnRydCwgIkJpdHJhdGUgaW5mb3JtYXRpb24iLCAwfSwKLSAge0ZPVVJDQ19mcm1hLCAiQXVkaW8gY29kZWMgZm9ybWF0IiwgMH0sCi0gIHtGT1VSQ0NfbmFtZSwgIm5hbWUiLCAwfSwKLSAge0ZPVVJDQ19tZWFuLCAibWVhbiIsIDB9LAotICB7Rk9VUkNDX3N2bWksICJTdGVyZW9zY29waWMgVmlkZW8gTWVkaWEgSW5mb3JtYXRpb24iLCAwLAotICAgICAgcXRkZW11eF9kdW1wX3N2bWl9LAotICB7Rk9VUkNDX3NjZGksICJTdGVyZW9zY29waWMgQ2FtZXJhIGFuZCBEaXNwbGF5IEluZm9ybWF0aW9uIiwgMCwKLSAgICAgIHF0ZGVtdXhfZHVtcF91bmtub3dufSwKLSAge0ZPVVJDQ19zYWl6LCAic2FtcGxlIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBzaXplcyIsIDB9LAotICB7Rk9VUkNDX3NhaW8sICJzYW1wbGUgYXV4aWxpYXJ5IGluZm9ybWF0aW9uIG9mZnNldHMiLCAwfSwKLSAge0ZPVVJDQ19lbmN2LCAiZW5jcnlwdGVkIHZpc3VhbCBzYW1wbGUgZW50cnkiLCAwfSwKLSAge0ZPVVJDQ19lbmNhLCAiZW5jcnlwdGVkIGF1ZGlvIHNhbXBsZSBlbnRyeSIsIDB9LAotICB7Rk9VUkNDX2VuY3QsICJlbmNyeXB0ZWQgdGV4dCBzYW1wbGUgZW50cnkiLCAwfSwKLSAge0ZPVVJDQ19lbmNzLCAiZW5jcnlwdGVkIHN5c3RlbSBzYW1wbGUgZW50cnkiLCAwfSwKLSAge0ZPVVJDQ19zaW5mLCAicHJvdGVjdGlvbiBzY2hlbWUgaW5mb3JtYXRpb24iLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfZnJtYSwgIm9yaWdpbmFsIGZvcm1hdCIsIDB9LAotICB7Rk9VUkNDX3NjaG0sICJzY2hlbWUgdHlwZSIsIDB9LAotICB7Rk9VUkNDX3NjaGksICJzY2hlbWUgaW5mb3JtYXRpb24iLCBRVF9GTEFHX0NPTlRBSU5FUn0sCi0gIHtGT1VSQ0NfcHNzaCwgInByb3RlY3Rpb24gc3lzdGVtIHNwZWNpZmljIGhlYWRlciIsIDB9LAotICB7Rk9VUkNDX3RlbmMsICJ0cmFjayBlbmNyeXB0aW9uIiwgMH0sCi0gIHtGT1VSQ0Nfc3RwcCwgIlhNTCBzdWJ0aXRsZSBzYW1wbGUgZW50cnkiLCAwfSwKLSAgezAsICJ1bmtub3duIiwgMCx9LAotfTsKLQotc3RhdGljIGNvbnN0IGludCBuX3F0X25vZGVfdHlwZXMgPQotICAgIHNpemVvZiAocXRfbm9kZV90eXBlcykgLyBzaXplb2YgKHF0X25vZGVfdHlwZXNbMF0pOwotCi1jb25zdCBRdE5vZGVUeXBlICoKLXF0ZGVtdXhfdHlwZV9nZXQgKGd1aW50MzIgZm91cmNjKQotewotICBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl9xdF9ub2RlX3R5cGVzOyBpKyspIHsKLSAgICBpZiAoR19VTkxJS0VMWSAocXRfbm9kZV90eXBlc1tpXS5mb3VyY2MgPT0gZm91cmNjKSkKLSAgICAgIHJldHVybiBxdF9ub2RlX3R5cGVzICsgaTsKLSAgfQotCi0gIEdTVF9XQVJOSU5HICgidW5rbm93biBRdWlja1RpbWUgbm9kZSB0eXBlICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLQotICByZXR1cm4gcXRfbm9kZV90eXBlcyArIG5fcXRfbm9kZV90eXBlcyAtIDE7Ci19CmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0ZGVtdXhfdHlwZXMuaCBiL2dzdC9pc29tcDQvcXRkZW11eF90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2VmNzdjLi4wMDAwMDAwCi0tLSBhL2dzdC9pc29tcDQvcXRkZW11eF90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gU1RFcmljc3NvbiA8YmVuamFtaW4uZ2FpZ25hcmRAc3Rlcmljc3Nvbi5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9RVERFTVVYX1RZUEVTX0hfXwotI2RlZmluZSBfX0dTVF9RVERFTVVYX1RZUEVTX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGVyZWFkZXIuaD4KLQotI2luY2x1ZGUgInF0ZGVtdXguaCIKLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIGdib29sZWFuICgqUXREdW1wRnVuYykgKEdzdFFURGVtdXggKiBxdGRlbXV4LCBHc3RCeXRlUmVhZGVyICogZGF0YSwKLSAgICBpbnQgZGVwdGgpOwotCi10eXBlZGVmIHN0cnVjdCBfUXROb2RlVHlwZSBRdE5vZGVUeXBlOwotCi0jZGVmaW5lIFFUX1VJTlQzMihhKSAgKEdTVF9SRUFEX1VJTlQzMl9CRShhKSkKLSNkZWZpbmUgUVRfVUlOVDI0KGEpICAoR1NUX1JFQURfVUlOVDMyX0JFKGEpID4+IDgpCi0jZGVmaW5lIFFUX1VJTlQxNihhKSAgKEdTVF9SRUFEX1VJTlQxNl9CRShhKSkKLSNkZWZpbmUgUVRfVUlOVDgoYSkgICAoR1NUX1JFQURfVUlOVDgoYSkpCi0jZGVmaW5lIFFUX0ZQMzIoYSkgICAgKChHU1RfUkVBRF9VSU5UMzJfQkUoYSkpLzY1NTM2LjApCi0jZGVmaW5lIFFUX1NGUDMyKGEpICAgKCgoZ2ludCkoR1NUX1JFQURfVUlOVDMyX0JFKGEpKSkvNjU1MzYuMCkKLSNkZWZpbmUgUVRfRlAxNihhKSAgICAoKEdTVF9SRUFEX1VJTlQxNl9CRShhKSkvMjU2LjApCi0jZGVmaW5lIFFUX0ZPVVJDQyhhKSAgKEdTVF9SRUFEX1VJTlQzMl9MRShhKSkKLSNkZWZpbmUgUVRfVUlOVDY0KGEpICAoKCgoZ3VpbnQ2NClRVF9VSU5UMzIoYSkpPDwzMil8UVRfVUlOVDMyKCgoZ3VpbnQ4ICopYSkrNCkpCi0KLXR5cGVkZWYgZW51bSB7Ci0gIFFUX0ZMQUdfTk9ORSAgICAgID0gKDApLAotICBRVF9GTEFHX0NPTlRBSU5FUiA9ICgxIDw8IDApCi19IFF0RmxhZ3M7Ci0KLXN0cnVjdCBfUXROb2RlVHlwZSB7Ci0gIGd1aW50MzIgICAgICBmb3VyY2M7Ci0gIGNvbnN0IGdjaGFyICpuYW1lOwotICBRdEZsYWdzICAgICAgZmxhZ3M7Ci0gIFF0RHVtcEZ1bmMgICBkdW1wOwotfTsKLQotZW51bSBUZkZsYWdzCi17Ci0gIFRGX0JBU0VfREFUQV9PRkZTRVQgICAgICAgICA9IDB4MDAwMDAxLCAgIC8qIGJhc2UtZGF0YS1vZmZzZXQtcHJlc2VudCAqLwotICBURl9TQU1QTEVfREVTQ1JJUFRJT05fSU5ERVggPSAweDAwMDAwMiwgICAvKiBzYW1wbGUtZGVzY3JpcHRpb24taW5kZXgtcHJlc2VudCAqLwotICBURl9ERUZBVUxUX1NBTVBMRV9EVVJBVElPTiAgPSAweDAwMDAwOCwgICAvKiBkZWZhdWx0LXNhbXBsZS1kdXJhdGlvbi1wcmVzZW50ICovCi0gIFRGX0RFRkFVTFRfU0FNUExFX1NJWkUgICAgICA9IDB4MDAwMDEwLCAgIC8qIGRlZmF1bHQtc2FtcGxlLXNpemUtcHJlc2VudCAqLwotICBURl9ERUZBVUxUX1NBTVBMRV9GTEFHUyAgICAgPSAweDAwMDAyMCwgICAvKiBkZWZhdWx0LXNhbXBsZS1mbGFncy1wcmVzZW50ICovCi0gIFRGX0RVUkFUSU9OX0lTX0VNUFRZICAgICAgICA9IDB4MDEwMDAwLCAgIC8qIGR1cmF0aW9uLWlzLWVtcHR5ICovCi0gIFRGX0RFRkFVTFRfQkFTRV9JU19NT09GICAgICA9IDB4MDIwMDAwICAgIC8qIGRlZmF1bHQtYmFzZS1pcy1tb29mICovCi19OwotCi1lbnVtIFRyRmxhZ3MKLXsKLSAgVFJfREFUQV9PRkZTRVQgICAgICAgICAgICAgID0gMHgwMDAwMDEsICAgLyogZGF0YS1vZmZzZXQtcHJlc2VudCAqLwotICBUUl9GSVJTVF9TQU1QTEVfRkxBR1MgICAgICAgPSAweDAwMDAwNCwgICAvKiBmaXJzdC1zYW1wbGUtZmxhZ3MtcHJlc2VudCAqLwotICBUUl9TQU1QTEVfRFVSQVRJT04gICAgICAgICAgPSAweDAwMDEwMCwgICAvKiBzYW1wbGUtZHVyYXRpb24tcHJlc2VudCAqLwotICBUUl9TQU1QTEVfU0laRSAgICAgICAgICAgICAgPSAweDAwMDIwMCwgICAvKiBzYW1wbGUtc2l6ZS1wcmVzZW50ICovCi0gIFRSX1NBTVBMRV9GTEFHUyAgICAgICAgICAgICA9IDB4MDAwNDAwLCAgIC8qIHNhbXBsZS1mbGFncy1wcmVzZW50ICovCi0gIFRSX0NPTVBPU0lUSU9OX1RJTUVfT0ZGU0VUUyA9IDB4MDAwODAwICAgIC8qIHNhbXBsZS1jb21wb3NpdGlvbi10aW1lLW9mZnNldHMtcHJlc2VudHMgKi8KLX07Ci0KLWNvbnN0IFF0Tm9kZVR5cGUgKnF0ZGVtdXhfdHlwZV9nZXQgKGd1aW50MzIgZm91cmNjKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1FUREVNVVhfVFlQRVNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvaXNvbXA0L3F0cGFsZXR0ZS5oIGIvZ3N0L2lzb21wNC9xdHBhbGV0dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxZTk5MS4uMDAwMDAwMAotLS0gYS9nc3QvaXNvbXA0L3F0cGFsZXR0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUVRQQUxMRVRFX0hfXwotI2RlZmluZSBfX0dTVF9RVFBBTExFVEVfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotc3RhdGljIGNvbnN0IGd1aW50MzIgZmZfcXRfZGVmYXVsdF9wYWxldHRlXzJbMl0gPSB7Ci0gIDB4ZmZmZmZmLCAweDAwMDAwMAotfTsKLQotc3RhdGljIGNvbnN0IGd1aW50MzIgZmZfcXRfZGVmYXVsdF9wYWxldHRlXzRbNF0gPSB7Ci0gIDB4OTM2NTVlLCAweGZmZmZmZiwgMHhkZmQwYWIsIDB4MDAwMDAwCi19OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQzMiBmZl9xdF9kZWZhdWx0X3BhbGV0dGVfMTZbMTZdID0gewotICAweGZmZmJmZiwgMHhlZmQ5YmIsIDB4ZThjOWIxLCAweDkzNjU1ZSwKLSAgMHhmY2RlZTgsIDB4OWQ4ODkxLCAweGZmZmZmZiwgMHhmZmZmZmYsCi0gIDB4ZmZmZmZmLCAweDQ3NDgzNywgMHg3YTVlNTUsIDB4ZGZkMGFiLAotICAweGZmZmJmOSwgMHhlOGNhYzUsIDB4OGE3Yzc3LCAweDAwMDAwMAotfTsKLXN0YXRpYyBjb25zdCBndWludDMyIGZmX3F0X2RlZmF1bHRfcGFsZXR0ZV8yNTZbMjU2XSA9IHsKLSAgMHhGRkZGRkYsIDB4RkZGRkNDLCAweEZGRkY5OSwgMHhGRkZGNjYsIDB4RkZGRjMzLCAweEZGRkYwMCwKLSAgMHhGRkNDRkYsIDB4RkZDQ0NDLCAweEZGQ0M5OSwgMHhGRkNDNjYsIDB4RkZDQzMzLCAweEZGQ0MwMCwKLSAgMHhGRjk5RkYsIDB4RkY5OUNDLCAweEZGOTk5OSwgMHhGRjk5NjYsIDB4RkY5OTMzLCAweEZGOTkwMCwKLSAgMHhGRjY2RkYsIDB4RkY2NkNDLCAweEZGNjY5OSwgMHhGRjY2NjYsIDB4RkY2NjMzLCAweEZGNjYwMCwKLSAgMHhGRjMzRkYsIDB4RkYzM0NDLCAweEZGMzM5OSwgMHhGRjMzNjYsIDB4RkYzMzMzLCAweEZGMzMwMCwKLSAgMHhGRjAwRkYsIDB4RkYwMENDLCAweEZGMDA5OSwgMHhGRjAwNjYsIDB4RkYwMDMzLCAweEZGMDAwMCwKLSAgMHhDQ0ZGRkYsIDB4Q0NGRkNDLCAweENDRkY5OSwgMHhDQ0ZGNjYsIDB4Q0NGRjMzLCAweENDRkYwMCwKLSAgMHhDQ0NDRkYsIDB4Q0NDQ0NDLCAweENDQ0M5OSwgMHhDQ0NDNjYsIDB4Q0NDQzMzLCAweENDQ0MwMCwKLSAgMHhDQzk5RkYsIDB4Q0M5OUNDLCAweENDOTk5OSwgMHhDQzk5NjYsIDB4Q0M5OTMzLCAweENDOTkwMCwKLSAgMHhDQzY2RkYsIDB4Q0M2NkNDLCAweENDNjY5OSwgMHhDQzY2NjYsIDB4Q0M2NjMzLCAweENDNjYwMCwKLSAgMHhDQzMzRkYsIDB4Q0MzM0NDLCAweENDMzM5OSwgMHhDQzMzNjYsIDB4Q0MzMzMzLCAweENDMzMwMCwKLSAgMHhDQzAwRkYsIDB4Q0MwMENDLCAweENDMDA5OSwgMHhDQzAwNjYsIDB4Q0MwMDMzLCAweENDMDAwMCwKLSAgMHg5OUZGRkYsIDB4OTlGRkNDLCAweDk5RkY5OSwgMHg5OUZGNjYsIDB4OTlGRjMzLCAweDk5RkYwMCwKLSAgMHg5OUNDRkYsIDB4OTlDQ0NDLCAweDk5Q0M5OSwgMHg5OUNDNjYsIDB4OTlDQzMzLCAweDk5Q0MwMCwKLSAgMHg5OTk5RkYsIDB4OTk5OUNDLCAweDk5OTk5OSwgMHg5OTk5NjYsIDB4OTk5OTMzLCAweDk5OTkwMCwKLSAgMHg5OTY2RkYsIDB4OTk2NkNDLCAweDk5NjY5OSwgMHg5OTY2NjYsIDB4OTk2NjMzLCAweDk5NjYwMCwKLSAgMHg5OTMzRkYsIDB4OTkzM0NDLCAweDk5MzM5OSwgMHg5OTMzNjYsIDB4OTkzMzMzLCAweDk5MzMwMCwKLSAgMHg5OTAwRkYsIDB4OTkwMENDLCAweDk5MDA5OSwgMHg5OTAwNjYsIDB4OTkwMDMzLCAweDk5MDAwMCwKLSAgMHg2NkZGRkYsIDB4NjZGRkNDLCAweDY2RkY5OSwgMHg2NkZGNjYsIDB4NjZGRjMzLCAweDY2RkYwMCwKLSAgMHg2NkNDRkYsIDB4NjZDQ0NDLCAweDY2Q0M5OSwgMHg2NkNDNjYsIDB4NjZDQzMzLCAweDY2Q0MwMCwKLSAgMHg2Njk5RkYsIDB4NjY5OUNDLCAweDY2OTk5OSwgMHg2Njk5NjYsIDB4NjY5OTMzLCAweDY2OTkwMCwKLSAgMHg2NjY2RkYsIDB4NjY2NkNDLCAweDY2NjY5OSwgMHg2NjY2NjYsIDB4NjY2NjMzLCAweDY2NjYwMCwKLSAgMHg2NjMzRkYsIDB4NjYzM0NDLCAweDY2MzM5OSwgMHg2NjMzNjYsIDB4NjYzMzMzLCAweDY2MzMwMCwKLSAgMHg2NjAwRkYsIDB4NjYwMENDLCAweDY2MDA5OSwgMHg2NjAwNjYsIDB4NjYwMDMzLCAweDY2MDAwMCwKLSAgMHgzM0ZGRkYsIDB4MzNGRkNDLCAweDMzRkY5OSwgMHgzM0ZGNjYsIDB4MzNGRjMzLCAweDMzRkYwMCwKLSAgMHgzM0NDRkYsIDB4MzNDQ0NDLCAweDMzQ0M5OSwgMHgzM0NDNjYsIDB4MzNDQzMzLCAweDMzQ0MwMCwKLSAgMHgzMzk5RkYsIDB4MzM5OUNDLCAweDMzOTk5OSwgMHgzMzk5NjYsIDB4MzM5OTMzLCAweDMzOTkwMCwKLSAgMHgzMzY2RkYsIDB4MzM2NkNDLCAweDMzNjY5OSwgMHgzMzY2NjYsIDB4MzM2NjMzLCAweDMzNjYwMCwKLSAgMHgzMzMzRkYsIDB4MzMzM0NDLCAweDMzMzM5OSwgMHgzMzMzNjYsIDB4MzMzMzMzLCAweDMzMzMwMCwKLSAgMHgzMzAwRkYsIDB4MzMwMENDLCAweDMzMDA5OSwgMHgzMzAwNjYsIDB4MzMwMDMzLCAweDMzMDAwMCwKLSAgMHgwMEZGRkYsIDB4MDBGRkNDLCAweDAwRkY5OSwgMHgwMEZGNjYsIDB4MDBGRjMzLCAweDAwRkYwMCwKLSAgMHgwMENDRkYsIDB4MDBDQ0NDLCAweDAwQ0M5OSwgMHgwMENDNjYsIDB4MDBDQzMzLCAweDAwQ0MwMCwKLSAgMHgwMDk5RkYsIDB4MDA5OUNDLCAweDAwOTk5OSwgMHgwMDk5NjYsIDB4MDA5OTMzLCAweDAwOTkwMCwKLSAgMHgwMDY2RkYsIDB4MDA2NkNDLCAweDAwNjY5OSwgMHgwMDY2NjYsIDB4MDA2NjMzLCAweDAwNjYwMCwKLSAgMHgwMDMzRkYsIDB4MDAzM0NDLCAweDAwMzM5OSwgMHgwMDMzNjYsIDB4MDAzMzMzLCAweDAwMzMwMCwKLSAgMHgwMDAwRkYsIDB4MDAwMENDLCAweDAwMDA5OSwgMHgwMDAwNjYsIDB4MDAwMDMzLCAweEVFMDAwMCwKLSAgMHhERDAwMDAsIDB4QkIwMDAwLCAweEFBMDAwMCwgMHg4ODAwMDAsIDB4NzcwMDAwLCAweDU1MDAwMCwKLSAgMHg0NDAwMDAsIDB4MjIwMDAwLCAweDExMDAwMCwgMHgwMEVFMDAsIDB4MDBERDAwLCAweDAwQkIwMCwKLSAgMHgwMEFBMDAsIDB4MDA4ODAwLCAweDAwNzcwMCwgMHgwMDU1MDAsIDB4MDA0NDAwLCAweDAwMjIwMCwKLSAgMHgwMDExMDAsIDB4MDAwMEVFLCAweDAwMDBERCwgMHgwMDAwQkIsIDB4MDAwMEFBLCAweDAwMDA4OCwKLSAgMHgwMDAwNzcsIDB4MDAwMDU1LCAweDAwMDA0NCwgMHgwMDAwMjIsIDB4MDAwMDExLCAweEVFRUVFRSwKLSAgMHhEREREREQsIDB4QkJCQkJCLCAweEFBQUFBQSwgMHg4ODg4ODgsIDB4Nzc3Nzc3LCAweDU1NTU1NSwKLSAgMHg0NDQ0NDQsIDB4MjIyMjIyLCAweDExMTExMSwgMHgwMDAwMDAKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludDMyIGZmX3F0X2dyYXlzY2FsZV9wYWxldHRlXzE2WzE2XSA9IHsKLSAgMHhmZmZmZmYsIDB4ZWVlZWVlLCAweGRkZGRkZCwgMHhjY2NjY2MsCi0gIDB4YmJiYmJiLCAweGFhYWFhYSwgMHg5OTk5OTksIDB4ODg4ODg4LAotICAweDc3Nzc3NywgMHg2NjY2NjYsIDB4NTU1NTU1LCAweDQ0NDQ0NCwKLSAgMHgzMzMzMzMsIDB4MjIyMjIyLCAweDExMTExMSwgMHgwMDAwMDAKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludDMyIGZmX3F0X2dyYXlzY2FsZV9wYWxldHRlXzI1NlsyNTZdID0gewotICAweGZmZmZmZiwgMHhmZWZlZmUsIDB4ZmRmZGZkLCAweGZjZmNmYywgMHhmYmZiZmIsIDB4ZmFmYWZhLCAweGY5ZjlmOSwKLSAgMHhmOGY4ZjgsIDB4ZjdmN2Y3LCAweGY2ZjZmNiwgMHhmNWY1ZjUsIDB4ZjRmNGY0LCAweGYzZjNmMywgMHhmMmYyZjIsCi0gIDB4ZjFmMWYxLCAweGYwZjBmMCwgMHhlZmVmZWYsIDB4ZWVlZWVlLCAweGVkZWRlZCwgMHhlY2VjZWMsIDB4ZWJlYmViLAotICAweGVhZWFlYSwgMHhlOWU5ZTksIDB4ZThlOGU4LCAweGU3ZTdlNywgMHhlNmU2ZTYsIDB4ZTVlNWU1LCAweGU0ZTRlNCwKLSAgMHhlM2UzZTMsIDB4ZTJlMmUyLCAweGUxZTFlMSwgMHhlMGUwZTAsIDB4ZGZkZmRmLCAweGRlZGVkZSwgMHhkZGRkZGQsCi0gIDB4ZGNkY2RjLCAweGRiZGJkYiwgMHhkYWRhZGEsIDB4ZDlkOWQ5LCAweGQ4ZDhkOCwgMHhkN2Q3ZDcsIDB4ZDZkNmQ2LAotICAweGQ1ZDVkNSwgMHhkNGQ0ZDQsIDB4ZDNkM2QzLCAweGQyZDJkMiwgMHhkMWQxZDEsIDB4ZDBkMGQwLCAweGNmY2ZjZiwKLSAgMHhjZWNlY2UsIDB4Y2RjZGNkLCAweGNjY2NjYywgMHhjYmNiY2IsIDB4Y2FjYWNhLCAweGM5YzljOSwgMHhjOGM4YzgsCi0gIDB4YzdjN2M3LCAweGM2YzZjNiwgMHhjNWM1YzUsIDB4YzRjNGM0LCAweGMzYzNjMywgMHhjMmMyYzIsIDB4YzFjMWMxLAotICAweGMwYzBjMCwgMHhiZmJmYmYsIDB4YmViZWJlLCAweGJkYmRiZCwgMHhiY2JjYmMsIDB4YmJiYmJiLCAweGJhYmFiYSwKLSAgMHhiOWI5YjksIDB4YjhiOGI4LCAweGI3YjdiNywgMHhiNmI2YjYsIDB4YjViNWI1LCAweGI0YjRiNCwgMHhiM2IzYjMsCi0gIDB4YjJiMmIyLCAweGIxYjFiMSwgMHhiMGIwYjAsIDB4YWZhZmFmLCAweGFlYWVhZSwgMHhhZGFkYWQsIDB4YWNhY2FjLAotICAweGFiYWJhYiwgMHhhYWFhYWEsIDB4YTlhOWE5LCAweGE4YThhOCwgMHhhN2E3YTcsIDB4YTZhNmE2LCAweGE1YTVhNSwKLSAgMHhhNGE0YTQsIDB4YTNhM2EzLCAweGEyYTJhMiwgMHhhMWExYTEsIDB4YTBhMGEwLCAweDlmOWY5ZiwgMHg5ZTllOWUsCi0gIDB4OWQ5ZDlkLCAweDljOWM5YywgMHg5YjliOWIsIDB4OWE5YTlhLCAweDk5OTk5OSwgMHg5ODk4OTgsIDB4OTc5Nzk3LAotICAweDk2OTY5NiwgMHg5NTk1OTUsIDB4OTQ5NDk0LCAweDkzOTM5MywgMHg5MjkyOTIsIDB4OTE5MTkxLCAweDkwOTA5MCwKLSAgMHg4ZjhmOGYsIDB4OGU4ZThlLCAweDhkOGQ4ZCwgMHg4YzhjOGMsIDB4OGI4YjhiLCAweDhhOGE4YSwgMHg4OTg5ODksCi0gIDB4ODg4ODg4LCAweDg3ODc4NywgMHg4Njg2ODYsIDB4ODU4NTg1LCAweDg0ODQ4NCwgMHg4MzgzODMsIDB4ODI4MjgyLAotICAweDgxODE4MSwgMHg4MDgwODAsIDB4N2Y3ZjdmLCAweDdlN2U3ZSwgMHg3ZDdkN2QsIDB4N2M3YzdjLCAweDdiN2I3YiwKLSAgMHg3YTdhN2EsIDB4Nzk3OTc5LCAweDc4Nzg3OCwgMHg3Nzc3NzcsIDB4NzY3Njc2LCAweDc1NzU3NSwgMHg3NDc0NzQsCi0gIDB4NzM3MzczLCAweDcyNzI3MiwgMHg3MTcxNzEsIDB4NzA3MDcwLCAweDZmNmY2ZiwgMHg2ZTZlNmUsIDB4NmQ2ZDZkLAotICAweDZjNmM2YywgMHg2YjZiNmIsIDB4NmE2YTZhLCAweDY5Njk2OSwgMHg2ODY4NjgsIDB4Njc2NzY3LCAweDY2NjY2NiwKLSAgMHg2NTY1NjUsIDB4NjQ2NDY0LCAweDYzNjM2MywgMHg2MjYyNjIsIDB4NjE2MTYxLCAweDYwNjA2MCwgMHg1ZjVmNWYsCi0gIDB4NWU1ZTVlLCAweDVkNWQ1ZCwgMHg1YzVjNWMsIDB4NWI1YjViLCAweDVhNWE1YSwgMHg1OTU5NTksIDB4NTg1ODU4LAotICAweDU3NTc1NywgMHg1NjU2NTYsIDB4NTU1NTU1LCAweDU0NTQ1NCwgMHg1MzUzNTMsIDB4NTI1MjUyLCAweDUxNTE1MSwKLSAgMHg1MDUwNTAsIDB4NGY0ZjRmLCAweDRlNGU0ZSwgMHg0ZDRkNGQsIDB4NGM0YzRjLCAweDRiNGI0YiwgMHg0YTRhNGEsCi0gIDB4NDk0OTQ5LCAweDQ4NDg0OCwgMHg0NzQ3NDcsIDB4NDY0NjQ2LCAweDQ1NDU0NSwgMHg0NDQ0NDQsIDB4NDM0MzQzLAotICAweDQyNDI0MiwgMHg0MTQxNDEsIDB4NDA0MDQwLCAweDNmM2YzZiwgMHgzZTNlM2UsIDB4M2QzZDNkLCAweDNjM2MzYywKLSAgMHgzYjNiM2IsIDB4M2EzYTNhLCAweDM5MzkzOSwgMHgzODM4MzgsIDB4MzczNzM3LCAweDM2MzYzNiwgMHgzNTM1MzUsCi0gIDB4MzQzNDM0LCAweDMzMzMzMywgMHgzMjMyMzIsIDB4MzEzMTMxLCAweDMwMzAzMCwgMHgyZjJmMmYsIDB4MmUyZTJlLAotICAweDJkMmQyZCwgMHgyYzJjMmMsIDB4MmIyYjJiLCAweDJhMmEyYSwgMHgyOTI5MjksIDB4MjgyODI4LCAweDI3MjcyNywKLSAgMHgyNjI2MjYsIDB4MjUyNTI1LCAweDI0MjQyNCwgMHgyMzIzMjMsIDB4MjIyMjIyLCAweDIxMjEyMSwgMHgyMDIwMjAsCi0gIDB4MWYxZjFmLCAweDFlMWUxZSwgMHgxZDFkMWQsIDB4MWMxYzFjLCAweDFiMWIxYiwgMHgxYTFhMWEsIDB4MTkxOTE5LAotICAweDE4MTgxOCwgMHgxNzE3MTcsIDB4MTYxNjE2LCAweDE1MTUxNSwgMHgxNDE0MTQsIDB4MTMxMzEzLCAweDEyMTIxMiwKLSAgMHgxMTExMTEsIDB4MTAxMDEwLCAweDBmMGYwZiwgMHgwZTBlMGUsIDB4MGQwZDBkLCAweDBjMGMwYywgMHgwYjBiMGIsCi0gIDB4MGEwYTBhLCAweDA5MDkwOSwgMHgwODA4MDgsIDB4MDcwNzA3LCAweDA2MDYwNiwgMHgwNTA1MDUsIDB4MDQwNDA0LAotICAweDAzMDMwMywgMHgwMjAyMDIsIDB4MDEwMTAxLCAweDAwMDAwMAotfTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1FUUEFMRVRURV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9sYXcvTWFrZWZpbGUuYW0gYi9nc3QvbGF3L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTkxYzc4Li4wMDAwMDAwCi0tLSBhL2dzdC9sYXcvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RhbGF3LmxhIGxpYmdzdG11bGF3LmxhCi0KLWxpYmdzdGFsYXdfbGFfU09VUkNFUyA9IGFsYXctZW5jb2RlLmMgYWxhdy1kZWNvZGUuYyBhbGF3LmMKLWxpYmdzdGFsYXdfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0YWxhd19sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLWxpYmdzdGFsYXdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YWxhd19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1saWJnc3RtdWxhd19sYV9TT1VSQ0VTID0gbXVsYXctZW5jb2RlLmMgbXVsYXctY29udmVyc2lvbi5jIG11bGF3LWRlY29kZS5jIG11bGF3LmMKLWxpYmdzdG11bGF3X2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdG11bGF3X2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotbGliZ3N0bXVsYXdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0bXVsYXdfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBtdWxhdy1jb252ZXJzaW9uLmggYWxhdy1lbmNvZGUuaCBhbGF3LWRlY29kZS5oIG11bGF3LWVuY29kZS5oIG11bGF3LWRlY29kZS5oCmRpZmYgLS1naXQgYS9nc3QvbGF3L01ha2VmaWxlLmluIGIvZ3N0L2xhdy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdhNmNjNi4uMDAwMDAwMAotLS0gYS9nc3QvbGF3L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTgwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9sYXcKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RhbGF3X2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0YWxhd19sYV9PQkpFQ1RTID0gbGliZ3N0YWxhd19sYS1hbGF3LWVuY29kZS5sbyBcCi0JbGliZ3N0YWxhd19sYS1hbGF3LWRlY29kZS5sbyBsaWJnc3RhbGF3X2xhLWFsYXcubG8KLWxpYmdzdGFsYXdfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0YWxhd19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0YWxhd19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGFsYXdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RhbGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdGFsYXdfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotbGliZ3N0bXVsYXdfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RtdWxhd19sYV9PQkpFQ1RTID0gbGliZ3N0bXVsYXdfbGEtbXVsYXctZW5jb2RlLmxvIFwKLQlsaWJnc3RtdWxhd19sYS1tdWxhdy1jb252ZXJzaW9uLmxvIFwKLQlsaWJnc3RtdWxhd19sYS1tdWxhdy1kZWNvZGUubG8gbGliZ3N0bXVsYXdfbGEtbXVsYXcubG8KLWxpYmdzdG11bGF3X2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdG11bGF3X2xhX09CSkVDVFMpCi1saWJnc3RtdWxhd19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdG11bGF3X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0bXVsYXdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0bXVsYXdfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0YWxhd19sYV9TT1VSQ0VTKSAkKGxpYmdzdG11bGF3X2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdGFsYXdfbGFfU09VUkNFUykgJChsaWJnc3RtdWxhd19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RhbGF3LmxhIGxpYmdzdG11bGF3LmxhCi1saWJnc3RhbGF3X2xhX1NPVVJDRVMgPSBhbGF3LWVuY29kZS5jIGFsYXctZGVjb2RlLmMgYWxhdy5jCi1saWJnc3RhbGF3X2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdGFsYXdfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi0KLWxpYmdzdGFsYXdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0YWxhd19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbGliZ3N0bXVsYXdfbGFfU09VUkNFUyA9IG11bGF3LWVuY29kZS5jIG11bGF3LWNvbnZlcnNpb24uYyBtdWxhdy1kZWNvZGUuYyBtdWxhdy5jCi1saWJnc3RtdWxhd19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RtdWxhd19sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLQotbGliZ3N0bXVsYXdfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0bXVsYXdfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gbXVsYXctY29udmVyc2lvbi5oIGFsYXctZW5jb2RlLmggYWxhdy1kZWNvZGUuaCBtdWxhdy1lbmNvZGUuaCBtdWxhdy1kZWNvZGUuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2xhdy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvbGF3L01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0YWxhdy5sYTogJChsaWJnc3RhbGF3X2xhX09CSkVDVFMpICQobGliZ3N0YWxhd19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0YWxhd19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0YWxhd19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0YWxhd19sYV9PQkpFQ1RTKSAkKGxpYmdzdGFsYXdfbGFfTElCQUREKSAkKExJQlMpCi0KLWxpYmdzdG11bGF3LmxhOiAkKGxpYmdzdG11bGF3X2xhX09CSkVDVFMpICQobGliZ3N0bXVsYXdfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdG11bGF3X2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RtdWxhd19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0bXVsYXdfbGFfT0JKRUNUUykgJChsaWJnc3RtdWxhd19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGFsYXdfbGEtYWxhdy1kZWNvZGUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RhbGF3X2xhLWFsYXctZW5jb2RlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0YWxhd19sYS1hbGF3LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bXVsYXdfbGEtbXVsYXctY29udmVyc2lvbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWRlY29kZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWVuY29kZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RhbGF3X2xhLWFsYXctZW5jb2RlLmxvOiBhbGF3LWVuY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhbGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhbGF3X2xhLWFsYXctZW5jb2RlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhbGF3X2xhLWFsYXctZW5jb2RlLlRwbyAtYyAtbyBsaWJnc3RhbGF3X2xhLWFsYXctZW5jb2RlLmxvIGB0ZXN0IC1mICdhbGF3LWVuY29kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhbGF3LWVuY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhbGF3X2xhLWFsYXctZW5jb2RlLlRwbyAkKERFUERJUikvbGliZ3N0YWxhd19sYS1hbGF3LWVuY29kZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbGF3LWVuY29kZS5jJyBvYmplY3Q9J2xpYmdzdGFsYXdfbGEtYWxhdy1lbmNvZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhbGF3X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGFsYXdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YWxhd19sYS1hbGF3LWVuY29kZS5sbyBgdGVzdCAtZiAnYWxhdy1lbmNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWxhdy1lbmNvZGUuYwotCi1saWJnc3RhbGF3X2xhLWFsYXctZGVjb2RlLmxvOiBhbGF3LWRlY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhbGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RhbGF3X2xhLWFsYXctZGVjb2RlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhbGF3X2xhLWFsYXctZGVjb2RlLlRwbyAtYyAtbyBsaWJnc3RhbGF3X2xhLWFsYXctZGVjb2RlLmxvIGB0ZXN0IC1mICdhbGF3LWRlY29kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhbGF3LWRlY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RhbGF3X2xhLWFsYXctZGVjb2RlLlRwbyAkKERFUERJUikvbGliZ3N0YWxhd19sYS1hbGF3LWRlY29kZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbGF3LWRlY29kZS5jJyBvYmplY3Q9J2xpYmdzdGFsYXdfbGEtYWxhdy1kZWNvZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RhbGF3X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGFsYXdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0YWxhd19sYS1hbGF3LWRlY29kZS5sbyBgdGVzdCAtZiAnYWxhdy1kZWNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYWxhdy1kZWNvZGUuYwotCi1saWJnc3RhbGF3X2xhLWFsYXcubG86IGFsYXcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGFsYXdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0YWxhd19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0YWxhd19sYS1hbGF3LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RhbGF3X2xhLWFsYXcuVHBvIC1jIC1vIGxpYmdzdGFsYXdfbGEtYWxhdy5sbyBgdGVzdCAtZiAnYWxhdy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhbGF3LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdGFsYXdfbGEtYWxhdy5UcG8gJChERVBESVIpL2xpYmdzdGFsYXdfbGEtYWxhdy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdhbGF3LmMnIG9iamVjdD0nbGliZ3N0YWxhd19sYS1hbGF3LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0YWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RhbGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdGFsYXdfbGEtYWxhdy5sbyBgdGVzdCAtZiAnYWxhdy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BhbGF3LmMKLQotbGliZ3N0bXVsYXdfbGEtbXVsYXctZW5jb2RlLmxvOiBtdWxhdy1lbmNvZGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bGF3X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtdWxhd19sYS1tdWxhdy1lbmNvZGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWVuY29kZS5UcG8gLWMgLW8gbGliZ3N0bXVsYXdfbGEtbXVsYXctZW5jb2RlLmxvIGB0ZXN0IC1mICdtdWxhdy1lbmNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXVsYXctZW5jb2RlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWVuY29kZS5UcG8gJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWVuY29kZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtdWxhdy1lbmNvZGUuYycgb2JqZWN0PSdsaWJnc3RtdWxhd19sYS1tdWxhdy1lbmNvZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWxhd19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWxhd19sYS1tdWxhdy1lbmNvZGUubG8gYHRlc3QgLWYgJ211bGF3LWVuY29kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWxhdy1lbmNvZGUuYwotCi1saWJnc3RtdWxhd19sYS1tdWxhdy1jb252ZXJzaW9uLmxvOiBtdWxhdy1jb252ZXJzaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWxhd19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bXVsYXdfbGEtbXVsYXctY29udmVyc2lvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsYXdfbGEtbXVsYXctY29udmVyc2lvbi5UcG8gLWMgLW8gbGliZ3N0bXVsYXdfbGEtbXVsYXctY29udmVyc2lvbi5sbyBgdGVzdCAtZiAnbXVsYXctY29udmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWxhdy1jb252ZXJzaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWNvbnZlcnNpb24uVHBvICQoREVQRElSKS9saWJnc3RtdWxhd19sYS1tdWxhdy1jb252ZXJzaW9uLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J211bGF3LWNvbnZlcnNpb24uYycgb2JqZWN0PSdsaWJnc3RtdWxhd19sYS1tdWxhdy1jb252ZXJzaW9uLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsYXdfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bXVsYXdfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsYXdfbGEtbXVsYXctY29udmVyc2lvbi5sbyBgdGVzdCAtZiAnbXVsYXctY29udmVyc2lvbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWxhdy1jb252ZXJzaW9uLmMKLQotbGliZ3N0bXVsYXdfbGEtbXVsYXctZGVjb2RlLmxvOiBtdWxhdy1kZWNvZGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bGF3X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtdWxhd19sYS1tdWxhdy1kZWNvZGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWRlY29kZS5UcG8gLWMgLW8gbGliZ3N0bXVsYXdfbGEtbXVsYXctZGVjb2RlLmxvIGB0ZXN0IC1mICdtdWxhdy1kZWNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXVsYXctZGVjb2RlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWRlY29kZS5UcG8gJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LWRlY29kZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtdWxhdy1kZWNvZGUuYycgb2JqZWN0PSdsaWJnc3RtdWxhd19sYS1tdWxhdy1kZWNvZGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWxhd19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWxhd19sYS1tdWxhdy1kZWNvZGUubG8gYHRlc3QgLWYgJ211bGF3LWRlY29kZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWxhdy1kZWNvZGUuYwotCi1saWJnc3RtdWxhd19sYS1tdWxhdy5sbzogbXVsYXcuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bGF3X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bGF3X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtdWxhd19sYS1tdWxhdy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsYXdfbGEtbXVsYXcuVHBvIC1jIC1vIGxpYmdzdG11bGF3X2xhLW11bGF3LmxvIGB0ZXN0IC1mICdtdWxhdy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWxhdy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RtdWxhd19sYS1tdWxhdy5UcG8gJChERVBESVIpL2xpYmdzdG11bGF3X2xhLW11bGF3LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J211bGF3LmMnIG9iamVjdD0nbGliZ3N0bXVsYXdfbGEtbXVsYXcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWxhd19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWxhd19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWxhd19sYS1tdWxhdy5sbyBgdGVzdCAtZiAnbXVsYXcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXVsYXcuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvbGF3L2FsYXctZGVjb2RlLmMgYi9nc3QvbGF3L2FsYXctZGVjb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNmZjZmUuLjAwMDAwMDAKLS0tIGEvZ3N0L2xhdy9hbGF3LWRlY29kZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8qIEdTdHJlYW1lciBBLUxhdyB0byBQQ00gY29udmVyc2lvbgotICogQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1hbGF3ZGVjCi0gKgotICogVGhpcyBlbGVtZW50IGRlY29kZXMgYWxhdyBhdWRpby4gQWxhdyBjb2RpbmcgaXMgYWxzbyBrbm93biBhcyBHLjcxMS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJhbGF3LWRlY29kZS5oIgotCi1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgYWxhd19kZWNfc3JjX2ZhY3Rvcnk7Ci1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgYWxhd19kZWNfc2lua19mYWN0b3J5OwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChhbGF3X2RlY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBhbGF3X2RlY19kZWJ1ZwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FsYXdfZGVjX3NldF9mb3JtYXQgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2FsYXdfZGVjX2hhbmRsZV9mcmFtZSAoR3N0QXVkaW9EZWNvZGVyICogZGVjLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLSNkZWZpbmUgZ3N0X2FsYXdfZGVjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEFMYXdEZWMsIGdzdF9hbGF3X2RlYywgR1NUX1RZUEVfQVVESU9fREVDT0RFUik7Ci0KLS8qIHNvbWUgZGF5IHdlIG1pZ2h0IGhhdmUgZGVmaW5lcyBpbiBnc3Rjb25maWcuaCB0aGF0IHRlbGwgdXMgYWJvdXQgdGhlCi0gKiBkZXNpcmVkIGNwdS9tZW1vcnkvYmluYXJ5IHNpemUgdHJhZGUtb2ZmcyAqLwotI2RlZmluZSBHU1RfQUxBV19ERUNfVVNFX1RBQkxFCi0KLSNpZmRlZiBHU1RfQUxBV19ERUNfVVNFX1RBQkxFCi0KLXN0YXRpYyBjb25zdCBnaW50IGFsYXdfdG9fczE2X3RhYmxlWzI1Nl0gPSB7Ci0gIC01NTA0LCAtNTI0OCwgLTYwMTYsIC01NzYwLCAtNDQ4MCwgLTQyMjQsIC00OTkyLCAtNDczNiwKLSAgLTc1NTIsIC03Mjk2LCAtODA2NCwgLTc4MDgsIC02NTI4LCAtNjI3MiwgLTcwNDAsIC02Nzg0LAotICAtMjc1MiwgLTI2MjQsIC0zMDA4LCAtMjg4MCwgLTIyNDAsIC0yMTEyLCAtMjQ5NiwgLTIzNjgsCi0gIC0zNzc2LCAtMzY0OCwgLTQwMzIsIC0zOTA0LCAtMzI2NCwgLTMxMzYsIC0zNTIwLCAtMzM5MiwKLSAgLTIyMDE2LCAtMjA5OTIsIC0yNDA2NCwgLTIzMDQwLCAtMTc5MjAsIC0xNjg5NiwgLTE5OTY4LCAtMTg5NDQsCi0gIC0zMDIwOCwgLTI5MTg0LCAtMzIyNTYsIC0zMTIzMiwgLTI2MTEyLCAtMjUwODgsIC0yODE2MCwgLTI3MTM2LAotICAtMTEwMDgsIC0xMDQ5NiwgLTEyMDMyLCAtMTE1MjAsIC04OTYwLCAtODQ0OCwgLTk5ODQsIC05NDcyLAotICAtMTUxMDQsIC0xNDU5MiwgLTE2MTI4LCAtMTU2MTYsIC0xMzA1NiwgLTEyNTQ0LCAtMTQwODAsIC0xMzU2OCwKLSAgLTM0NCwgLTMyOCwgLTM3NiwgLTM2MCwgLTI4MCwgLTI2NCwgLTMxMiwgLTI5NiwKLSAgLTQ3MiwgLTQ1NiwgLTUwNCwgLTQ4OCwgLTQwOCwgLTM5MiwgLTQ0MCwgLTQyNCwKLSAgLTg4LCAtNzIsIC0xMjAsIC0xMDQsIC0yNCwgLTgsIC01NiwgLTQwLAotICAtMjE2LCAtMjAwLCAtMjQ4LCAtMjMyLCAtMTUyLCAtMTM2LCAtMTg0LCAtMTY4LAotICAtMTM3NiwgLTEzMTIsIC0xNTA0LCAtMTQ0MCwgLTExMjAsIC0xMDU2LCAtMTI0OCwgLTExODQsCi0gIC0xODg4LCAtMTgyNCwgLTIwMTYsIC0xOTUyLCAtMTYzMiwgLTE1NjgsIC0xNzYwLCAtMTY5NiwKLSAgLTY4OCwgLTY1NiwgLTc1MiwgLTcyMCwgLTU2MCwgLTUyOCwgLTYyNCwgLTU5MiwKLSAgLTk0NCwgLTkxMiwgLTEwMDgsIC05NzYsIC04MTYsIC03ODQsIC04ODAsIC04NDgsCi0gIDU1MDQsIDUyNDgsIDYwMTYsIDU3NjAsIDQ0ODAsIDQyMjQsIDQ5OTIsIDQ3MzYsCi0gIDc1NTIsIDcyOTYsIDgwNjQsIDc4MDgsIDY1MjgsIDYyNzIsIDcwNDAsIDY3ODQsCi0gIDI3NTIsIDI2MjQsIDMwMDgsIDI4ODAsIDIyNDAsIDIxMTIsIDI0OTYsIDIzNjgsCi0gIDM3NzYsIDM2NDgsIDQwMzIsIDM5MDQsIDMyNjQsIDMxMzYsIDM1MjAsIDMzOTIsCi0gIDIyMDE2LCAyMDk5MiwgMjQwNjQsIDIzMDQwLCAxNzkyMCwgMTY4OTYsIDE5OTY4LCAxODk0NCwKLSAgMzAyMDgsIDI5MTg0LCAzMjI1NiwgMzEyMzIsIDI2MTEyLCAyNTA4OCwgMjgxNjAsIDI3MTM2LAotICAxMTAwOCwgMTA0OTYsIDEyMDMyLCAxMTUyMCwgODk2MCwgODQ0OCwgOTk4NCwgOTQ3MiwKLSAgMTUxMDQsIDE0NTkyLCAxNjEyOCwgMTU2MTYsIDEzMDU2LCAxMjU0NCwgMTQwODAsIDEzNTY4LAotICAzNDQsIDMyOCwgMzc2LCAzNjAsIDI4MCwgMjY0LCAzMTIsIDI5NiwKLSAgNDcyLCA0NTYsIDUwNCwgNDg4LCA0MDgsIDM5MiwgNDQwLCA0MjQsCi0gIDg4LCA3MiwgMTIwLCAxMDQsIDI0LCA4LCA1NiwgNDAsCi0gIDIxNiwgMjAwLCAyNDgsIDIzMiwgMTUyLCAxMzYsIDE4NCwgMTY4LAotICAxMzc2LCAxMzEyLCAxNTA0LCAxNDQwLCAxMTIwLCAxMDU2LCAxMjQ4LCAxMTg0LAotICAxODg4LCAxODI0LCAyMDE2LCAxOTUyLCAxNjMyLCAxNTY4LCAxNzYwLCAxNjk2LAotICA2ODgsIDY1NiwgNzUyLCA3MjAsIDU2MCwgNTI4LCA2MjQsIDU5MiwKLSAgOTQ0LCA5MTIsIDEwMDgsIDk3NiwgODE2LCA3ODQsIDg4MCwgODQ4Ci19OwotCi1zdGF0aWMgaW5saW5lIGdpbnQKLWFsYXdfdG9fczE2IChndWludDggYV92YWwpCi17Ci0gIHJldHVybiBhbGF3X3RvX3MxNl90YWJsZVthX3ZhbF07Ci19Ci0KLSNlbHNlIC8qIEdTVF9BTEFXX0RFQ19VU0VfVEFCTEUgKi8KLQotc3RhdGljIGlubGluZSBnaW50Ci1hbGF3X3RvX3MxNiAoZ3VpbnQ4IGFfdmFsKQotewotICBnaW50IHQ7Ci0gIGdpbnQgc2VnOwotCi0gIGFfdmFsIF49IDB4NTU7Ci0gIHQgPSBhX3ZhbCAmIDB4N2Y7Ci0gIGlmICh0IDwgMTYpCi0gICAgdCA9ICh0IDw8IDQpICsgODsKLSAgZWxzZSB7Ci0gICAgc2VnID0gKHQgPj4gNCkgJiAweDA3OwotICAgIHQgPSAoKHQgJiAweDBmKSA8PCA0KSArIDB4MTA4OwotICAgIHQgPDw9IHNlZyAtIDE7Ci0gIH0KLSAgcmV0dXJuICgoYV92YWwgJiAweDgwKSA/IHQgOiAtdCk7Ci19Ci0KLSNlbmRpZiAvKiBHU1RfQUxBV19ERUNfVVNFX1RBQkxFICovCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FsYXdfZGVjX3NldF9mb3JtYXQgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdEFMYXdEZWMgKmFsYXdkZWMgPSBHU1RfQUxBV19ERUMgKGRlYyk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0gIEdzdEF1ZGlvSW5mbyBpbmZvOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoIXN0cnVjdHVyZSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlYywgImZhaWxlZCB0byBnZXQgc3RydWN0dXJlIGZyb20gY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJyYXRlIiwgJnJhdGUpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVjLCAiZmFpbGVkIHRvIGZpbmQgZmllbGQgcmF0ZSBpbiBpbnB1dCBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgJmNoYW5uZWxzKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlYywgImZhaWxlZCB0byBmaW5kIGZpZWxkIGNoYW5uZWxzIGluIGlucHV0IGNhcHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBnc3RfYXVkaW9faW5mb19pbml0ICgmaW5mbyk7Ci0gIGdzdF9hdWRpb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLCBHU1RfQVVESU9fRk9STUFUX1MxNiwgcmF0ZSwgY2hhbm5lbHMsIE5VTEwpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGFsYXdkZWMsICJyYXRlPSVkLCBjaGFubmVscz0lZCIsIHJhdGUsIGNoYW5uZWxzKTsKLQotICByZXR1cm4gZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X291dHB1dF9mb3JtYXQgKGRlYywgJmluZm8pOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2FsYXdfZGVjX2hhbmRsZV9mcmFtZSAoR3N0QXVkaW9EZWNvZGVyICogZGVjLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE1hcEluZm8gaW5tYXAsIG91dG1hcDsKLSAgZ2ludDE2ICpsaW5lYXJfZGF0YTsKLSAgZ3VpbnQ4ICphbGF3X2RhdGE7Ci0gIGdzaXplIGFsYXdfc2l6ZSwgbGluZWFyX3NpemU7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBnaW50IGk7Ci0KLSAgaWYgKCFidWZmZXIpIHsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbm1hcCwgR1NUX01BUF9SRUFEKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlYywgImZhaWxlZCB0byBtYXAgaW5wdXQgYnVmZmVyIik7Ci0gICAgZ290byBlcnJvcl9mYWlsZWRfbWFwX2lucHV0X2J1ZmZlcjsKLSAgfQotCi0gIGFsYXdfZGF0YSA9IGlubWFwLmRhdGE7Ci0gIGFsYXdfc2l6ZSA9IGlubWFwLnNpemU7Ci0KLSAgbGluZWFyX3NpemUgPSBhbGF3X3NpemUgKiAyOwotCi0gIG91dGJ1ZiA9IGdzdF9hdWRpb19kZWNvZGVyX2FsbG9jYXRlX291dHB1dF9idWZmZXIgKGRlYywgbGluZWFyX3NpemUpOwotICBpZiAoIWdzdF9idWZmZXJfbWFwIChvdXRidWYsICZvdXRtYXAsIEdTVF9NQVBfV1JJVEUpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVjLCAiZmFpbGVkIHRvIG1hcCBpbnB1dCBidWZmZXIiKTsKLSAgICBnb3RvIGVycm9yX2ZhaWxlZF9tYXBfb3V0cHV0X2J1ZmZlcjsKLSAgfQotCi0gIGxpbmVhcl9kYXRhID0gKGdpbnQxNiAqKSBvdXRtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IGFsYXdfc2l6ZTsgaSsrKSB7Ci0gICAgbGluZWFyX2RhdGFbaV0gPSBhbGF3X3RvX3MxNiAoYWxhd19kYXRhW2ldKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm91dG1hcCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmlubWFwKTsKLQotICByZXR1cm4gZ3N0X2F1ZGlvX2RlY29kZXJfZmluaXNoX2ZyYW1lIChkZWMsIG91dGJ1ZiwgLTEpOwotCi1lcnJvcl9mYWlsZWRfbWFwX291dHB1dF9idWZmZXI6Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci0KLWVycm9yX2ZhaWxlZF9tYXBfaW5wdXRfYnVmZmVyOgotICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FsYXdfZGVjX3N0YXJ0IChHc3RBdWRpb0RlY29kZXIgKiBkZWMpCi17Ci0gIGdzdF9hdWRpb19kZWNvZGVyX3NldF9lc3RpbWF0ZV9yYXRlIChkZWMsIFRSVUUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FsYXdfZGVjX2NsYXNzX2luaXQgKEdzdEFMYXdEZWNDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RBdWRpb0RlY29kZXJDbGFzcyAqYXVkaW9kZWNfY2xhc3MgPSBHU1RfQVVESU9fREVDT0RFUl9DTEFTUyAoa2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmFsYXdfZGVjX3NyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmYWxhd19kZWNfc2lua19mYWN0b3J5KTsKLQotICBhdWRpb2RlY19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FsYXdfZGVjX3N0YXJ0KTsKLSAgYXVkaW9kZWNfY2xhc3MtPnNldF9mb3JtYXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FsYXdfZGVjX3NldF9mb3JtYXQpOwotICBhdWRpb2RlY19jbGFzcy0+aGFuZGxlX2ZyYW1lID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbGF3X2RlY19oYW5kbGVfZnJhbWUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJBIExhdyBhdWRpbyBkZWNvZGVyIiwKLSAgICAgICJDb2RlYy9EZWNvZGVyL0F1ZGlvIiwKLSAgICAgICJDb252ZXJ0IDhiaXQgQSBsYXcgdG8gMTZiaXQgUENNIiwKLSAgICAgICJaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoYWxhd19kZWNfZGVidWcsICJhbGF3ZGVjIiwgMCwgIkEgTGF3IGF1ZGlvIGRlY29kZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbGF3X2RlY19pbml0IChHc3RBTGF3RGVjICogYWxhd2RlYykKLXsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X25lZWRzX2Zvcm1hdCAoR1NUX0FVRElPX0RFQ09ERVIgKGFsYXdkZWMpLCBUUlVFKTsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X3VzZV9kZWZhdWx0X3BhZF9hY2NlcHRjYXBzIChHU1RfQVVESU9fREVDT0RFUl9DQVNUCi0gICAgICAoYWxhd2RlYyksIFRSVUUpOwotICBHU1RfUEFEX1NFVF9BQ0NFUFRfVEVNUExBVEUgKEdTVF9BVURJT19ERUNPREVSX1NJTktfUEFEIChhbGF3ZGVjKSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvbGF3L2FsYXctZGVjb2RlLmggYi9nc3QvbGF3L2FsYXctZGVjb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NjQ3ZGMuLjAwMDAwMDAKLS0tIGEvZ3N0L2xhdy9hbGF3LWRlY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyogR1N0cmVhbWVyIEEtTGF3IHRvIFBDTSBjb252ZXJzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgYnkgQWJyYW1vIEJhZ25hcmEgPGFicmFtb0BhbHNhLXByb2plY3Qub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQUxBV19ERUNPREVfSF9fCi0jZGVmaW5lIF9fR1NUX0FMQVdfREVDT0RFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQUxBV19ERUMgXAotICAoZ3N0X2FsYXdfZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BTEFXX0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FMQVdfREVDLEdzdEFMYXdEZWMpKQotI2RlZmluZSBHU1RfQUxBV19ERUNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQUxBV19ERUMsR3N0QUxhd0RlY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FMQVdfREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQUxBV19ERUMpKQotI2RlZmluZSBHU1RfSVNfQUxBV19ERUNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQUxBV19ERUMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QUxhd0RlYyBHc3RBTGF3RGVjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFMYXdEZWNDbGFzcyBHc3RBTGF3RGVjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QUxhd0RlYyB7Ci0gIEdzdEF1ZGlvRGVjb2RlciBlbGVtZW50OwotfTsKLQotc3RydWN0IF9Hc3RBTGF3RGVjQ2xhc3MgewotICBHc3RBdWRpb0RlY29kZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfYWxhd19kZWNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9BTEFXX0RFQ09ERV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2xhdy9hbGF3LWVuY29kZS5jIGIvZ3N0L2xhdy9hbGF3LWVuY29kZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjE3MDAwLi4wMDAwMDAwCi0tLSBhL2dzdC9sYXcvYWxhdy1lbmNvZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNyArMCwwIEBACi0vKiBHU3RyZWFtZXIgUENNIHRvIEEtTGF3IGNvbnZlcnNpb24KLSAqIENvcHlyaWdodCAoQykgMjAwMCBieSBBYnJhbW8gQmFnbmFyYSA8YWJyYW1vQGFsc2EtcHJvamVjdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtYWxhd2VuYwotICoKLSAqIFRoaXMgZWxlbWVudCBlbmNvZGUgYWxhdyBhdWRpby4gQWxhdyBjb2RpbmcgaXMgYWxzbyBrbm93biBhcyBHLjcxMS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlICJhbGF3LWVuY29kZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChhbGF3X2VuY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBhbGF3X2VuY19kZWJ1ZwotCi1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgYWxhd19lbmNfc3JjX2ZhY3Rvcnk7Ci1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgYWxhd19lbmNfc2lua19mYWN0b3J5OwotCi1HX0RFRklORV9UWVBFIChHc3RBTGF3RW5jLCBnc3RfYWxhd19lbmMsIEdTVF9UWVBFX0FVRElPX0VOQ09ERVIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FsYXdfZW5jX3N0YXJ0IChHc3RBdWRpb0VuY29kZXIgKiBhdWRpb2VuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2FsYXdfZW5jX3NldF9mb3JtYXQgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywKLSAgICBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9hbGF3X2VuY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0vKiBzb21lIGRheSB3ZSBtaWdodCBoYXZlIGRlZmluZXMgaW4gZ3N0Y29uZmlnLmggdGhhdCB0ZWxsIHVzIGFib3V0IHRoZQotICogZGVzaXJlZCBjcHUvbWVtb3J5L2JpbmFyeSBzaXplIHRyYWRlLW9mZnMgKi8KLSNkZWZpbmUgR1NUX0FMQVdfRU5DX1VTRV9UQUJMRQotCi0jaWZkZWYgR1NUX0FMQVdfRU5DX1VTRV9UQUJMRQotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGFsYXdfZW5jb2RlWzIwNDggKyAxXSA9IHsKLSAgMHhkNSwgMHhkNCwgMHhkNywgMHhkNiwgMHhkMSwgMHhkMCwgMHhkMywgMHhkMiwgMHhkZCwgMHhkYywgMHhkZiwgMHhkZSwKLSAgMHhkOSwgMHhkOCwgMHhkYiwgMHhkYSwgMHhjNSwgMHhjNCwgMHhjNywgMHhjNiwgMHhjMSwgMHhjMCwgMHhjMywgMHhjMiwKLSAgMHhjZCwgMHhjYywgMHhjZiwgMHhjZSwgMHhjOSwgMHhjOCwgMHhjYiwgMHhjYSwgMHhmNSwgMHhmNSwgMHhmNCwgMHhmNCwKLSAgMHhmNywgMHhmNywgMHhmNiwgMHhmNiwgMHhmMSwgMHhmMSwgMHhmMCwgMHhmMCwgMHhmMywgMHhmMywgMHhmMiwgMHhmMiwKLSAgMHhmZCwgMHhmZCwgMHhmYywgMHhmYywgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZSwgMHhmOSwgMHhmOSwgMHhmOCwgMHhmOCwKLSAgMHhmYiwgMHhmYiwgMHhmYSwgMHhmYSwgMHhlNSwgMHhlNSwgMHhlNSwgMHhlNSwgMHhlNCwgMHhlNCwgMHhlNCwgMHhlNCwKLSAgMHhlNywgMHhlNywgMHhlNywgMHhlNywgMHhlNiwgMHhlNiwgMHhlNiwgMHhlNiwgMHhlMSwgMHhlMSwgMHhlMSwgMHhlMSwKLSAgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMywgMHhlMywgMHhlMywgMHhlMywgMHhlMiwgMHhlMiwgMHhlMiwgMHhlMiwKLSAgMHhlZCwgMHhlZCwgMHhlZCwgMHhlZCwgMHhlYywgMHhlYywgMHhlYywgMHhlYywgMHhlZiwgMHhlZiwgMHhlZiwgMHhlZiwKLSAgMHhlZSwgMHhlZSwgMHhlZSwgMHhlZSwgMHhlOSwgMHhlOSwgMHhlOSwgMHhlOSwgMHhlOCwgMHhlOCwgMHhlOCwgMHhlOCwKLSAgMHhlYiwgMHhlYiwgMHhlYiwgMHhlYiwgMHhlYSwgMHhlYSwgMHhlYSwgMHhlYSwgMHg5NSwgMHg5NSwgMHg5NSwgMHg5NSwKLSAgMHg5NSwgMHg5NSwgMHg5NSwgMHg5NSwgMHg5NCwgMHg5NCwgMHg5NCwgMHg5NCwgMHg5NCwgMHg5NCwgMHg5NCwgMHg5NCwKLSAgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NywgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwKLSAgMHg5NiwgMHg5NiwgMHg5NiwgMHg5NiwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwgMHg5MSwKLSAgMHg5MCwgMHg5MCwgMHg5MCwgMHg5MCwgMHg5MCwgMHg5MCwgMHg5MCwgMHg5MCwgMHg5MywgMHg5MywgMHg5MywgMHg5MywKLSAgMHg5MywgMHg5MywgMHg5MywgMHg5MywgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwgMHg5MiwKLSAgMHg5ZCwgMHg5ZCwgMHg5ZCwgMHg5ZCwgMHg5ZCwgMHg5ZCwgMHg5ZCwgMHg5ZCwgMHg5YywgMHg5YywgMHg5YywgMHg5YywKLSAgMHg5YywgMHg5YywgMHg5YywgMHg5YywgMHg5ZiwgMHg5ZiwgMHg5ZiwgMHg5ZiwgMHg5ZiwgMHg5ZiwgMHg5ZiwgMHg5ZiwKLSAgMHg5ZSwgMHg5ZSwgMHg5ZSwgMHg5ZSwgMHg5ZSwgMHg5ZSwgMHg5ZSwgMHg5ZSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwKLSAgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OSwgMHg5OCwgMHg5OCwgMHg5OCwgMHg5OCwgMHg5OCwgMHg5OCwgMHg5OCwgMHg5OCwKLSAgMHg5YiwgMHg5YiwgMHg5YiwgMHg5YiwgMHg5YiwgMHg5YiwgMHg5YiwgMHg5YiwgMHg5YSwgMHg5YSwgMHg5YSwgMHg5YSwKLSAgMHg5YSwgMHg5YSwgMHg5YSwgMHg5YSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwKLSAgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NSwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwKLSAgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwgMHg4NCwKLSAgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NywKLSAgMHg4NywgMHg4NywgMHg4NywgMHg4NywgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwKLSAgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4NiwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwKLSAgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwKLSAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKLSAgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywKLSAgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MywgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwKLSAgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwgMHg4MiwKLSAgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwKLSAgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4ZCwgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywKLSAgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4YywgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwKLSAgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwgMHg4ZiwKLSAgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwKLSAgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4ZSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwKLSAgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OSwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwKLSAgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwgMHg4OCwKLSAgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwKLSAgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YiwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwKLSAgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHg4YSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwKLSAgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwKLSAgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwKLSAgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNSwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywKLSAgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywKLSAgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNywgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwKLSAgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwKLSAgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwKLSAgMHhiNiwgMHhiNiwgMHhiNiwgMHhiNiwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwKLSAgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwKLSAgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwgMHhiMSwKLSAgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwKLSAgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwKLSAgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMCwgMHhiMywgMHhiMywgMHhiMywgMHhiMywKLSAgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywKLSAgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMywKLSAgMHhiMywgMHhiMywgMHhiMywgMHhiMywgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwKLSAgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwKLSAgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwgMHhiMiwKLSAgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwKLSAgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwKLSAgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiZCwgMHhiYywgMHhiYywgMHhiYywgMHhiYywKLSAgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywKLSAgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiYywKLSAgMHhiYywgMHhiYywgMHhiYywgMHhiYywgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwKLSAgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwKLSAgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwgMHhiZiwKLSAgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwKLSAgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwKLSAgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwKLSAgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwKLSAgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwKLSAgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOSwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwKLSAgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwKLSAgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwgMHhiOCwKLSAgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwKLSAgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwKLSAgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYiwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwKLSAgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwKLSAgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwKLSAgMHhiYSwgMHhiYSwgMHhiYSwgMHhiYSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwKLSAgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwKLSAgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwKLSAgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwKLSAgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwKLSAgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNSwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwKLSAgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwKLSAgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwKLSAgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwKLSAgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwKLSAgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwgMHhhNCwKLSAgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywKLSAgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywKLSAgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywKLSAgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywKLSAgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNywKLSAgMHhhNywgMHhhNywgMHhhNywgMHhhNywgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwKLSAgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwKLSAgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwKLSAgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwKLSAgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwKLSAgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhNiwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwKLSAgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwKLSAgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwKLSAgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwKLSAgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwKLSAgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwgMHhhMSwKLSAgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwKLSAgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwKLSAgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwKLSAgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwKLSAgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwKLSAgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMCwgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywKLSAgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywKLSAgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywKLSAgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywKLSAgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywKLSAgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMywgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwKLSAgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwKLSAgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwKLSAgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwKLSAgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwKLSAgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwgMHhhMiwKLSAgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwKLSAgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwKLSAgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwKLSAgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwKLSAgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwKLSAgMHhhZCwgMHhhZCwgMHhhZCwgMHhhZCwgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywKLSAgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywKLSAgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywKLSAgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywKLSAgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywKLSAgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhYywgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwKLSAgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwKLSAgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwKLSAgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwKLSAgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwKLSAgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwgMHhhZiwKLSAgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwKLSAgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwKLSAgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwKLSAgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwKLSAgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwKLSAgMHhhZSwgMHhhZSwgMHhhZSwgMHhhZSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwKLSAgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwKLSAgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwKLSAgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwKLSAgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwKLSAgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOSwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwKLSAgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwKLSAgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwKLSAgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwKLSAgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwKLSAgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwgMHhhOCwKLSAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKLSAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKLSAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKLSAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKLSAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwKLSAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLSAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLSAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLSAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLSAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKLSAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHgyYQotfTsKLQotc3RhdGljIGlubGluZSBndWludDgKLXMxNl90b19hbGF3IChnaW50MTYgcGNtX3ZhbCkKLXsKLSAgaWYgKHBjbV92YWwgPj0gMCkKLSAgICByZXR1cm4gYWxhd19lbmNvZGVbcGNtX3ZhbCAvIDE2XTsKLSAgZWxzZQotICAgIHJldHVybiAoMHg3RiAmIGFsYXdfZW5jb2RlW3BjbV92YWwgLyAtMTZdKTsKLX0KLQotI2Vsc2UgLyogR1NUX0FMQVdfRU5DX1VTRV9UQUJMRSAqLwotCi0vKgotICogczE2X3RvX2FsYXcoKSAtIENvbnZlcnQgYSAxNi1iaXQgbGluZWFyIFBDTSB2YWx1ZSB0byA4LWJpdCBBLWxhdwotICoKLSAqIHMxNl90b19hbGF3KCkgYWNjZXB0cyBhbiAxNi1iaXQgaW50ZWdlciBhbmQgZW5jb2RlcyBpdCBhcyBBLWxhdyBkYXRhLgotICoKLSAqICAgICAgICAgICAgICBMaW5lYXIgSW5wdXQgQ29kZSAgICAgICBDb21wcmVzc2VkIENvZGUKLSAqICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAtLS0tLS0tLS0tLS0tLS0KLSAqICAgICAgMDAwMDAwMHd4eXphICAgICAgICAgICAgICAgICAgICAwMDB3eHl6Ci0gKiAgICAgIDAwMDAwMDF3eHl6YSAgICAgICAgICAgICAgICAgICAgMDAxd3h5egotICogICAgICAwMDAwMDF3eHl6YWIgICAgICAgICAgICAgICAgICAgIDAxMHd4eXoKLSAqICAgICAgMDAwMDF3eHl6YWJjICAgICAgICAgICAgICAgICAgICAwMTF3eHl6Ci0gKiAgICAgIDAwMDF3eHl6YWJjZCAgICAgICAgICAgICAgICAgICAgMTAwd3h5egotICogICAgICAwMDF3eHl6YWJjZGUgICAgICAgICAgICAgICAgICAgIDEwMXd4eXoKLSAqICAgICAgMDF3eHl6YWJjZGVmICAgICAgICAgICAgICAgICAgICAxMTB3eHl6Ci0gKiAgICAgIDF3eHl6YWJjZGVmZyAgICAgICAgICAgICAgICAgICAgMTExd3h5egotICoKLSAqIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIHNlZSBKb2huIEMuIEJlbGxhbXkncyBEaWdpdGFsIFRlbGVwaG9ueSwgMTk4MiwKLSAqIEpvaG4gV2lsZXkgJiBTb25zLCBwcHMgOTgtMTExIGFuZCA0NzItNDc2LgotICovCi0KLXN0YXRpYyBpbmxpbmUgZ2ludAotdmFsX3NlZyAoZ2ludCB2YWwpCi17Ci0gIGdpbnQgciA9IDE7Ci0KLSAgdmFsID4+PSA4OwotICBpZiAodmFsICYgMHhmMCkgewotICAgIHZhbCA+Pj0gNDsKLSAgICByICs9IDQ7Ci0gIH0KLSAgaWYgKHZhbCAmIDB4MGMpIHsKLSAgICB2YWwgPj49IDI7Ci0gICAgciArPSAyOwotICB9Ci0gIGlmICh2YWwgJiAweDAyKQotICAgIHIgKz0gMTsKLSAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQ4Ci1zMTZfdG9fYWxhdyAoZ2ludCBwY21fdmFsKQotewotICBnaW50IHNlZzsKLSAgZ3VpbnQ4IG1hc2s7Ci0gIGd1aW50OCBhdmFsOwotCi0gIGlmIChwY21fdmFsID49IDApIHsKLSAgICBtYXNrID0gMHhENTsKLSAgfSBlbHNlIHsKLSAgICBtYXNrID0gMHg1NTsKLSAgICBwY21fdmFsID0gLXBjbV92YWw7Ci0gICAgaWYgKHBjbV92YWwgPiAweDdmZmYpCi0gICAgICBwY21fdmFsID0gMHg3ZmZmOwotICB9Ci0KLSAgaWYgKHBjbV92YWwgPCAyNTYpCi0gICAgYXZhbCA9IHBjbV92YWwgPj4gNDsKLSAgZWxzZSB7Ci0gICAgLyogQ29udmVydCB0aGUgc2NhbGVkIG1hZ25pdHVkZSB0byBzZWdtZW50IG51bWJlci4gKi8KLSAgICBzZWcgPSB2YWxfc2VnIChwY21fdmFsKTsKLSAgICBhdmFsID0gKHNlZyA8PCA0KSB8ICgocGNtX3ZhbCA+PiAoc2VnICsgMykpICYgMHgwZik7Ci0gIH0KLSAgcmV0dXJuIGF2YWwgXiBtYXNrOwotfQotCi0jZW5kaWYgLyogR1NUX0FMQVdfRU5DX1VTRV9UQUJMRSAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbGF3X2VuY19zdGFydCAoR3N0QXVkaW9FbmNvZGVyICogYXVkaW9lbmMpCi17Ci0gIEdzdEFMYXdFbmMgKmFsYXdlbmMgPSBHU1RfQUxBV19FTkMgKGF1ZGlvZW5jKTsKLQotICBhbGF3ZW5jLT5jaGFubmVscyA9IDA7Ci0gIGFsYXdlbmMtPnJhdGUgPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hbGF3X2VuY19zZXRfZm9ybWF0IChHc3RBdWRpb0VuY29kZXIgKiBhdWRpb2VuYywgR3N0QXVkaW9JbmZvICogaW5mbykKLXsKLSAgR3N0Q2FwcyAqYmFzZV9jYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0QUxhd0VuYyAqYWxhd2VuYyA9IEdTVF9BTEFXX0VOQyAoYXVkaW9lbmMpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgYWxhd2VuYy0+cmF0ZSA9IGluZm8tPnJhdGU7Ci0gIGFsYXdlbmMtPmNoYW5uZWxzID0gaW5mby0+Y2hhbm5lbHM7Ci0KLSAgYmFzZV9jYXBzID0KLSAgICAgIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfQVVESU9fRU5DT0RFUl9TUkNfUEFEIChhdWRpb2VuYykpOwotICBnX2Fzc2VydCAoYmFzZV9jYXBzKTsKLSAgYmFzZV9jYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoYmFzZV9jYXBzKTsKLSAgZ19hc3NlcnQgKGJhc2VfY2Fwcyk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYmFzZV9jYXBzLCAwKTsKLSAgZ19hc3NlcnQgKHN0cnVjdHVyZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJyYXRlIiwgR19UWVBFX0lOVCwgYWxhd2VuYy0+cmF0ZSwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGFsYXdlbmMtPmNoYW5uZWxzLAotICAgICAgTlVMTCk7Ci0KLSAgcmV0ID0gZ3N0X2F1ZGlvX2VuY29kZXJfc2V0X291dHB1dF9mb3JtYXQgKGF1ZGlvZW5jLCBiYXNlX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoYmFzZV9jYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2FsYXdfZW5jX2hhbmRsZV9mcmFtZSAoR3N0QXVkaW9FbmNvZGVyICogYXVkaW9lbmMsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0QUxhd0VuYyAqYWxhd2VuYzsKLSAgR3N0TWFwSW5mbyBpbm1hcCwgb3V0bWFwOwotICBnaW50MTYgKmxpbmVhcl9kYXRhOwotICBnc2l6ZSBsaW5lYXJfc2l6ZTsKLSAgZ3VpbnQ4ICphbGF3X2RhdGE7Ci0gIGd1aW50IGFsYXdfc2l6ZTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnaW50IGk7Ci0KLSAgaWYgKCFidWZmZXIpIHsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBhbGF3ZW5jID0gR1NUX0FMQVdfRU5DIChhdWRpb2VuYyk7Ci0KLSAgaWYgKCFhbGF3ZW5jLT5yYXRlIHx8ICFhbGF3ZW5jLT5jaGFubmVscykKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgbGluZWFyX2RhdGEgPSAoZ2ludDE2ICopIGlubWFwLmRhdGE7Ci0gIGxpbmVhcl9zaXplID0gaW5tYXAuc2l6ZTsKLQotICBhbGF3X3NpemUgPSBsaW5lYXJfc2l6ZSAvIDI7Ci0KLSAgb3V0YnVmID0gZ3N0X2F1ZGlvX2VuY29kZXJfYWxsb2NhdGVfb3V0cHV0X2J1ZmZlciAoYXVkaW9lbmMsIGFsYXdfc2l6ZSk7Ci0KLSAgZ19hc3NlcnQgKG91dGJ1Zik7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm91dG1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGFsYXdfZGF0YSA9IG91dG1hcC5kYXRhOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhbGF3X3NpemU7IGkrKykgewotICAgIGFsYXdfZGF0YVtpXSA9IHMxNl90b19hbGF3IChsaW5lYXJfZGF0YVtpXSk7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZvdXRtYXApOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZpbm1hcCk7Ci0KLSAgcmV0ID0gZ3N0X2F1ZGlvX2VuY29kZXJfZmluaXNoX2ZyYW1lIChhdWRpb2VuYywgb3V0YnVmLCAtMSk7Ci0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci0KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWxhd2VuYywgIm5vIGZvcm1hdCBuZWdvdGlhdGVkIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYWxhd19lbmNfY2xhc3NfaW5pdCAoR3N0QUxhd0VuY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEF1ZGlvRW5jb2RlckNsYXNzICphdWRpb19lbmNvZGVyX2NsYXNzID0gR1NUX0FVRElPX0VOQ09ERVJfQ0xBU1MgKGtsYXNzKTsKLQotICBhdWRpb19lbmNvZGVyX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWxhd19lbmNfc3RhcnQpOwotICBhdWRpb19lbmNvZGVyX2NsYXNzLT5zZXRfZm9ybWF0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9hbGF3X2VuY19zZXRfZm9ybWF0KTsKLSAgYXVkaW9fZW5jb2Rlcl9jbGFzcy0+aGFuZGxlX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYWxhd19lbmNfaGFuZGxlX2ZyYW1lKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZhbGF3X2VuY19zcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmFsYXdfZW5jX3NpbmtfZmFjdG9yeSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJBIExhdyBhdWRpbyBlbmNvZGVyIiwgIkNvZGVjL0VuY29kZXIvQXVkaW8iLAotICAgICAgIkNvbnZlcnQgMTZiaXQgUENNIHRvIDhiaXQgQSBsYXciLAotICAgICAgIlphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPiIpOwotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoYWxhd19lbmNfZGVidWcsICJhbGF3ZW5jIiwgMCwgIkEgTGF3IGF1ZGlvIGVuY29kZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hbGF3X2VuY19pbml0IChHc3RBTGF3RW5jICogYWxhd2VuYykKLXsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfQVVESU9fRU5DT0RFUl9TSU5LX1BBRCAoYWxhd2VuYykpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L2xhdy9hbGF3LWVuY29kZS5oIGIvZ3N0L2xhdy9hbGF3LWVuY29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjA4ZjQ4Li4wMDAwMDAwCi0tLSBhL2dzdC9sYXcvYWxhdy1lbmNvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qIEdTdHJlYW1lciBQQ00gdG8gQS1MYXcgY29udmVyc2lvbgotICogQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEFicmFtbyBCYWduYXJhIDxhYnJhbW9AYWxzYS1wcm9qZWN0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfQUxBV19FTkNPREVfSF9fCi0jZGVmaW5lIF9fR1NUX0FMQVdfRU5DT0RFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQUxBV19FTkMgXAotICAoZ3N0X2FsYXdfZW5jX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BTEFXX0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FMQVdfRU5DLEdzdEFMYXdFbmMpKQotI2RlZmluZSBHU1RfQUxBV19FTkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQUxBV19FTkMsR3N0QUxhd0VuY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0FMQVdfRU5DKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQUxBV19FTkMpKQotI2RlZmluZSBHU1RfSVNfQUxBV19FTkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfQUxBV19FTkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0QUxhd0VuYyBHc3RBTGF3RW5jOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFMYXdFbmNDbGFzcyBHc3RBTGF3RW5jQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QUxhd0VuYyB7Ci0gIEdzdEF1ZGlvRW5jb2RlciBlbmNvZGVyOwotCi0gIGdpbnQgY2hhbm5lbHM7Ci0gIGdpbnQgcmF0ZTsKLX07Ci0KLXN0cnVjdCBfR3N0QUxhd0VuY0NsYXNzIHsKLSAgR3N0QXVkaW9FbmNvZGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2FsYXdfZW5jX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfQUxBV19FTkNPREVfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbGF3L2FsYXcuYyBiL2dzdC9sYXcvYWxhdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY3ZTA2Li4wMDAwMDAwCi0tLSBhL2dzdC9sYXcvYWxhdy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyogR1N0cmVhbWVyIFBDTS9BLUxhdyBjb252ZXJzaW9ucwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJhbGF3LWVuY29kZS5oIgotI2luY2x1ZGUgImFsYXctZGVjb2RlLmgiCi0KLUdzdFN0YXRpY1BhZFRlbXBsYXRlIGFsYXdfZGVjX3NyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoUzE2KSAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgMTkyMDAwIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0iKQotICAgICk7Ci0KLUdzdFN0YXRpY1BhZFRlbXBsYXRlIGFsYXdfZGVjX3NpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtYWxhdywgIgotICAgICAgICAicmF0ZSA9IFsgODAwMCAsIDE5MjAwMCBdLCAiICJjaGFubmVscyA9IFsgMSAsIDIgXSIpCi0gICAgKTsKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgYWxhd19lbmNfc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA4MDAwLCAxOTIwMDAgXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXSIpCi0gICAgKTsKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgYWxhd19lbmNfc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1hbGF3LCAiCi0gICAgICAgICJyYXRlID0gWyA4MDAwICwgMTkyMDAwIF0sICIgImNoYW5uZWxzID0gWyAxICwgMiBdIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImFsYXdlbmMiLAotICAgICAgICAgIEdTVF9SQU5LX1BSSU1BUlksIEdTVF9UWVBFX0FMQVdfRU5DKSB8fAotICAgICAgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhbGF3ZGVjIiwKLSAgICAgICAgICBHU1RfUkFOS19QUklNQVJZLCBHU1RfVFlQRV9BTEFXX0RFQykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBGSVhNRSAwLjExOiBtZXJnZSBhbGF3IGFuZCBtdWxhdyBpbnRvIG9uZSBwbHVnaW4/ICovCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgYWxhdywKLSAgICAiQUxhdyBhdWRpbyBjb252ZXJzaW9uIHJvdXRpbmVzIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9sYXcvbXVsYXctY29udmVyc2lvbi5jIGIvZ3N0L2xhdy9tdWxhdy1jb252ZXJzaW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Y2RlMTcuLjAwMDAwMDAKLS0tIGEvZ3N0L2xhdy9tdWxhdy1jb252ZXJzaW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIFRoaXMgcm91dGluZSBjb252ZXJ0cyBmcm9tIGxpbmVhciB0byB1bGF3Ci0gKiAyOSBTZXB0ZW1iZXIgMTk4OQotICoKLSAqIENyYWlnIFJlZXNlOiBJREEvU3VwZXJjb21wdXRpbmcgUmVzZWFyY2ggQ2VudGVyCi0gKiBKb2UgQ2FtcGJlbGw6IERlcGFydG1lbnQgb2YgRGVmZW5zZQotICoKLSAqIFJlZmVyZW5jZXM6Ci0gKiAxKSBDQ0lUVCBSZWNvbW1lbmRhdGlvbiBHLjcxMSAgKHZlcnkgZGlmZmljdWx0IHRvIGZvbGxvdykKLSAqIDIpICJBIE5ldyBEaWdpdGFsIFRlY2huaXF1ZSBmb3IgSW1wbGVtZW50YXRpb24gb2YgQW55IAotICogICAgIENvbnRpbnVvdXMgUENNIENvbXBhbmRpbmcgTGF3LCIgVmlsbGVyZXQsIE1pY2hlbCwKLSAqICAgICBldCBhbC4gMTk3MyBJRUVFIEludC4gQ29uZi4gb24gQ29tbXVuaWNhdGlvbnMsIFZvbCAxLAotICogICAgIDE5NzMsIHBnLiAxMS4xMi0xMS4xNwotICogMykgTUlMLVNURC0xODgtMTEzLCJJbnRlcm9wZXJhYmlsaXR5IGFuZCBQZXJmb3JtYW5jZSBTdGFuZGFyZHMKLSAqICAgICBmb3IgQW5hbG9nLXRvX0RpZ2l0YWwgQ29udmVyc2lvbiBUZWNobmlxdWVzLCIKLSAqICAgICAxNyBGZWJydWFyeSAxOTg3Ci0gKgotICogSW5wdXQ6IFNpZ25lZCAxNiBiaXQgbGluZWFyIHNhbXBsZQotICogT3V0cHV0OiA4IGJpdCB1bGF3IHNhbXBsZQotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2luY2x1ZGUgIm11bGF3LWNvbnZlcnNpb24uaCIKLQotI3VuZGVmIFpFUk9UUkFQICAgICAgICAgICAgICAgICAvKiB0dXJuIG9uIHRoZSB0cmFwIGFzIHBlciB0aGUgTUlMLVNURCAqLwotI2RlZmluZSBCSUFTIDB4ODQgICAgICAgICAgICAgICAvKiBkZWZpbmUgdGhlIGFkZC1pbiBiaWFzIGZvciAxNiBiaXQgc2FtcGxlcyAqLwotI2RlZmluZSBDTElQIDMyNjM1Ci0KLXZvaWQKLW11bGF3X2VuY29kZSAoZ2ludDE2ICogaW4sIGd1aW50OCAqIG91dCwgZ2ludCBudW1zYW1wbGVzKQotewotICBzdGF0aWMgY29uc3QgZ2ludDE2IGV4cF9sdXRbMjU2XSA9IHsKLSAgICAwLCAwLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAotICAgIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LAotICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsCi0gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwKLSAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LAotICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3Ci0gIH07Ci0gIGdpbnQxNiBzaWduLCBleHBvbmVudCwgbWFudGlzc2E7Ci0gIGdpbnQxNiBzYW1wbGU7Ci0gIGd1aW50OCB1bGF3Ynl0ZTsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1zYW1wbGVzOyBpKyspIHsKLSAgICBzYW1wbGUgPSBpbltpXTsKLSAgICAgIC8qKiBnZXQgdGhlIHNhbXBsZSBpbnRvIHNpZ24tbWFnbml0dWRlICoqLwotICAgIHNpZ24gPSAoc2FtcGxlID4+IDgpICYgMHg4MDsgICAgICAgIC8qIHNldCBhc2lkZSB0aGUgc2lnbiAqLwotICAgIGlmIChzaWduICE9IDApIHsKLSAgICAgIHNhbXBsZSA9IC1zYW1wbGU7ICAgICAgICAgLyogZ2V0IG1hZ25pdHVkZSAqLwotICAgIH0KLSAgICAvKiBzYW1wbGUgY2FuIGJlIHplcm8gYmVjYXVzZSB3ZSBjYW4gb3ZlcmZsb3cgaW4gdGhlIGludmVyc2lvbiwKLSAgICAgKiBjaGVja2luZyBhZ2FpbnN0IHRoZSB1bnNpZ25lZCB2ZXJzaW9uIHNvbHZlcyB0aGlzICovCi0gICAgaWYgKCgoZ3VpbnQxNikgc2FtcGxlKSA+IENMSVApCi0gICAgICBzYW1wbGUgPSBDTElQOyAgICAgICAgICAgIC8qIGNsaXAgdGhlIG1hZ25pdHVkZSAqLwotCi0gICAgICAvKiogY29udmVydCBmcm9tIDE2IGJpdCBsaW5lYXIgdG8gdWxhdyAqKi8KLSAgICBzYW1wbGUgPSBzYW1wbGUgKyBCSUFTOwotICAgIGV4cG9uZW50ID0gZXhwX2x1dFsoc2FtcGxlID4+IDcpICYgMHhGRl07Ci0gICAgbWFudGlzc2EgPSAoc2FtcGxlID4+IChleHBvbmVudCArIDMpKSAmIDB4MEY7Ci0gICAgdWxhd2J5dGUgPSB+KHNpZ24gfCAoZXhwb25lbnQgPDwgNCkgfCBtYW50aXNzYSk7Ci0jaWZkZWYgWkVST1RSQVAKLSAgICBpZiAodWxhd2J5dGUgPT0gMCkKLSAgICAgIHVsYXdieXRlID0gMHgwMjsgICAgICAgICAgLyogb3B0aW9uYWwgQ0NJVFQgdHJhcCAqLwotI2VuZGlmCi0gICAgb3V0W2ldID0gdWxhd2J5dGU7Ci0gIH0KLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBjb252ZXJ0cyBmcm9tIHVsYXcgdG8gMTYgYml0IGxpbmVhcgotICogMjkgU2VwdGVtYmVyIDE5ODkKLSAqCi0gKiBDcmFpZyBSZWVzZTogSURBL1N1cGVyY29tcHV0aW5nIFJlc2VhcmNoIENlbnRlcgotICoKLSAqIFJlZmVyZW5jZXM6Ci0gKiAxKSBDQ0lUVCBSZWNvbW1lbmRhdGlvbiBHLjcxMSAgKHZlcnkgZGlmZmljdWx0IHRvIGZvbGxvdykKLSAqIDIpIE1JTC1TVEQtMTg4LTExMywiSW50ZXJvcGVyYWJpbGl0eSBhbmQgUGVyZm9ybWFuY2UgU3RhbmRhcmRzCi0gKiAgICAgZm9yIEFuYWxvZy10b19EaWdpdGFsIENvbnZlcnNpb24gVGVjaG5pcXVlcywiCi0gKiAgICAgMTcgRmVicnVhcnkgMTk4NwotICoKLSAqIElucHV0OiA4IGJpdCB1bGF3IHNhbXBsZQotICogT3V0cHV0OiBzaWduZWQgMTYgYml0IGxpbmVhciBzYW1wbGUKLSAqLwotCi12b2lkCi1tdWxhd19kZWNvZGUgKGd1aW50OCAqIGluLCBnaW50MTYgKiBvdXQsIGdpbnQgbnVtc2FtcGxlcykKLXsKLSAgc3RhdGljIGNvbnN0IGdpbnQxNiBleHBfbHV0WzhdID0KLSAgICAgIHsgMCwgMTMyLCAzOTYsIDkyNCwgMTk4MCwgNDA5MiwgODMxNiwgMTY3NjQgfTsKLSAgZ2ludDE2IHNpZ24sIGV4cG9uZW50LCBtYW50aXNzYTsKLSAgZ3VpbnQ4IHVsYXdieXRlOwotICBnaW50MTYgbGluZWFyOwotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bXNhbXBsZXM7IGkrKykgewotICAgIHVsYXdieXRlID0gaW5baV07Ci0gICAgdWxhd2J5dGUgPSB+dWxhd2J5dGU7Ci0gICAgc2lnbiA9ICh1bGF3Ynl0ZSAmIDB4ODApOwotICAgIGV4cG9uZW50ID0gKHVsYXdieXRlID4+IDQpICYgMHgwNzsKLSAgICBtYW50aXNzYSA9IHVsYXdieXRlICYgMHgwRjsKLSAgICBsaW5lYXIgPSBleHBfbHV0W2V4cG9uZW50XSArIChtYW50aXNzYSA8PCAoZXhwb25lbnQgKyAzKSk7Ci0gICAgaWYgKHNpZ24gIT0gMCkKLSAgICAgIGxpbmVhciA9IC1saW5lYXI7Ci0gICAgb3V0W2ldID0gbGluZWFyOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvbGF3L211bGF3LWNvbnZlcnNpb24uaCBiL2dzdC9sYXcvbXVsYXctY29udmVyc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODM2N2FkLi4wMDAwMDAwCi0tLSBhL2dzdC9sYXcvbXVsYXctY29udmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfR1NUX1VMQVdfQ09OVkVSU0lPTl9ICi0jZGVmaW5lIF9HU1RfVUxBV19DT05WRVJTSU9OX0gKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotdm9pZAotbXVsYXdfZW5jb2RlKGdpbnQxNiogaW4sIGd1aW50OCogb3V0LCBnaW50IG51bXNhbXBsZXMpOwotdm9pZAotbXVsYXdfZGVjb2RlKGd1aW50OCogaW4sZ2ludDE2KiBvdXQsZ2ludCBudW1zYW1wbGVzKTsKLQotI2VuZGlmIC8qIF9HU1RfVUxBV19DT05WRVJTSU9OX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYyBiL2dzdC9sYXcvbXVsYXctZGVjb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMmZiOGMuLjAwMDAwMDAKLS0tIGEvZ3N0L2xhdy9tdWxhdy1kZWNvZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LW11bGF3ZGVjCi0gKgotICogVGhpcyBlbGVtZW50IGRlY29kZXMgbXVsYXcgYXVkaW8uIE11bGF3IGNvZGluZyBpcyBhbHNvIGtub3duIGFzIEcuNzExLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJtdWxhdy1kZWNvZGUuaCIKLSNpbmNsdWRlICJtdWxhdy1jb252ZXJzaW9uLmgiCi0KLWV4dGVybiBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBtdWxhd19kZWNfc3JjX2ZhY3Rvcnk7Ci1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgbXVsYXdfZGVjX3NpbmtfZmFjdG9yeTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9tdWxhd2RlY19zZXRfZm9ybWF0IChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tdWxhd2RlY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0KLS8qIFN0ZXJlbyBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wCi19OwotCi0jZGVmaW5lIGdzdF9tdWxhd2RlY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RNdUxhd0RlYywgZ3N0X211bGF3ZGVjLCBHU1RfVFlQRV9BVURJT19ERUNPREVSKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXVsYXdkZWNfc2V0X2Zvcm1hdCAoR3N0QXVkaW9EZWNvZGVyICogZGVjLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0TXVMYXdEZWMgKm11bGF3ZGVjID0gR1NUX01VTEFXREVDIChkZWMpOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgaW50IHJhdGUsIGNoYW5uZWxzOwotICBHc3RBdWRpb0luZm8gaW5mbzsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZ2V0IHN0cnVjdHVyZSBmcm9tIGNhcHMiKTsKLSAgICBnb3RvIGVycm9yX2ZhaWxlZF9nZXRfc3RydWN0dXJlOwotICB9Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInJhdGUiLCAmcmF0ZSkpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZmluZCBmaWVsZCByYXRlIGluIGlucHV0IGNhcHMiKTsKLSAgICBnb3RvIGVycm9yX2ZhaWxlZF9maW5kX3JhdGU7Ci0gIH0KLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2hhbm5lbHMiLCAmY2hhbm5lbHMpKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIGZpbmQgZmllbGQgY2hhbm5lbHMgaW4gaW5wdXQgY2FwcyIpOwotICAgIGdvdG8gZXJyb3JfZmFpbGVkX2ZpbmRfY2hhbm5lbDsKLSAgfQotCi0gIGdzdF9hdWRpb19pbmZvX2luaXQgKCZpbmZvKTsKLSAgZ3N0X2F1ZGlvX2luZm9fc2V0X2Zvcm1hdCAoJmluZm8sIEdTVF9BVURJT19GT1JNQVRfUzE2LCByYXRlLCBjaGFubmVscywgTlVMTCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXVsYXdkZWMsICJyYXRlPSVkLCBjaGFubmVscz0lZCIsIHJhdGUsIGNoYW5uZWxzKTsKLQotICByZXR1cm4gZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X291dHB1dF9mb3JtYXQgKGRlYywgJmluZm8pOwotCi1lcnJvcl9mYWlsZWRfZmluZF9jaGFubmVsOgotZXJyb3JfZmFpbGVkX2ZpbmRfcmF0ZToKLWVycm9yX2ZhaWxlZF9nZXRfc3RydWN0dXJlOgotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXVsYXdkZWNfaGFuZGxlX2ZyYW1lIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TWFwSW5mbyBpbm1hcCwgb3V0bWFwOwotICBnaW50MTYgKmxpbmVhcl9kYXRhOwotICBndWludDggKm11bGF3X2RhdGE7Ci0gIGdzaXplIG11bGF3X3NpemUsIGxpbmVhcl9zaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICBpZiAoIWJ1ZmZlcikgewotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJmlubWFwLCBHU1RfTUFQX1JFQUQpKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIG1hcCBpbnB1dCBidWZmZXIiKTsKLSAgICBnb3RvIGVycm9yX2ZhaWxlZF9tYXBfaW5wdXRfYnVmZmVyOwotICB9Ci0KLSAgbXVsYXdfZGF0YSA9IGlubWFwLmRhdGE7Ci0gIG11bGF3X3NpemUgPSBpbm1hcC5zaXplOwotCi0gIGxpbmVhcl9zaXplID0gbXVsYXdfc2l6ZSAqIDI7Ci0KLSAgb3V0YnVmID0gZ3N0X2F1ZGlvX2RlY29kZXJfYWxsb2NhdGVfb3V0cHV0X2J1ZmZlciAoZGVjLCBsaW5lYXJfc2l6ZSk7Ci0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm91dG1hcCwgR1NUX01BUF9XUklURSkpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gbWFwIGlucHV0IGJ1ZmZlciIpOwotICAgIGdvdG8gZXJyb3JfZmFpbGVkX21hcF9vdXRwdXRfYnVmZmVyOwotICB9Ci0KLSAgbGluZWFyX2RhdGEgPSAoZ2ludDE2ICopIG91dG1hcC5kYXRhOwotCi0gIG11bGF3X2RlY29kZSAobXVsYXdfZGF0YSwgbGluZWFyX2RhdGEsIG11bGF3X3NpemUpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm91dG1hcCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmlubWFwKTsKLQotICByZXR1cm4gZ3N0X2F1ZGlvX2RlY29kZXJfZmluaXNoX2ZyYW1lIChkZWMsIG91dGJ1ZiwgLTEpOwotCi1lcnJvcl9mYWlsZWRfbWFwX291dHB1dF9idWZmZXI6Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci0KLWVycm9yX2ZhaWxlZF9tYXBfaW5wdXRfYnVmZmVyOgotICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bGF3ZGVjX3N0YXJ0IChHc3RBdWRpb0RlY29kZXIgKiBkZWMpCi17Ci0gIGdzdF9hdWRpb19kZWNvZGVyX3NldF9lc3RpbWF0ZV9yYXRlIChkZWMsIFRSVUUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bGF3ZGVjX2NsYXNzX2luaXQgKEdzdE11TGF3RGVjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QXVkaW9EZWNvZGVyQ2xhc3MgKmF1ZGlvZGVjX2NsYXNzID0gR1NUX0FVRElPX0RFQ09ERVJfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZtdWxhd19kZWNfc3JjX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZtdWxhd19kZWNfc2lua19mYWN0b3J5KTsKLQotCi0gIGF1ZGlvZGVjX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsYXdkZWNfc3RhcnQpOwotICBhdWRpb2RlY19jbGFzcy0+c2V0X2Zvcm1hdCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsYXdkZWNfc2V0X2Zvcm1hdCk7Ci0gIGF1ZGlvZGVjX2NsYXNzLT5oYW5kbGVfZnJhbWUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bGF3ZGVjX2hhbmRsZV9mcmFtZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIk11IExhdyBhdWRpbyBkZWNvZGVyIiwKLSAgICAgICJDb2RlYy9EZWNvZGVyL0F1ZGlvIiwKLSAgICAgICJDb252ZXJ0IDhiaXQgbXUgbGF3IHRvIDE2Yml0IFBDTSIsCi0gICAgICAiWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsYXdkZWNfaW5pdCAoR3N0TXVMYXdEZWMgKiBtdWxhd2RlYykKLXsKLSAgZ3N0X2F1ZGlvX2RlY29kZXJfc2V0X25lZWRzX2Zvcm1hdCAoR1NUX0FVRElPX0RFQ09ERVIgKG11bGF3ZGVjKSwgVFJVRSk7Ci0gIGdzdF9hdWRpb19kZWNvZGVyX3NldF91c2VfZGVmYXVsdF9wYWRfYWNjZXB0Y2FwcyAoR1NUX0FVRElPX0RFQ09ERVJfQ0FTVAotICAgICAgKG11bGF3ZGVjKSwgVFJVRSk7Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX0FVRElPX0RFQ09ERVJfU0lOS19QQUQgKG11bGF3ZGVjKSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvbGF3L211bGF3LWRlY29kZS5oIGIvZ3N0L2xhdy9tdWxhdy1kZWNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkNjJmYS4uMDAwMDAwMAotLS0gYS9nc3QvbGF3L211bGF3LWRlY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTVVMQVdERUNPREVfSF9fCi0jZGVmaW5lIF9fR1NUX01VTEFXREVDT0RFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuaD4KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9NVUxBV0RFQyBcCi0gIChnc3RfbXVsYXdkZWNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX01VTEFXREVDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTVVMQVdERUMsR3N0TXVMYXdEZWMpKQotI2RlZmluZSBHU1RfTVVMQVdERUNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTVVMQVdERUMsR3N0TXVMYXdEZWNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NVUxBV0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX01VTEFXREVDKSkKLSNkZWZpbmUgR1NUX0lTX01VTEFXREVDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX01VTEFXREVDKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RNdUxhd0RlYyBHc3RNdUxhd0RlYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RNdUxhd0RlY0NsYXNzIEdzdE11TGF3RGVjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0TXVMYXdEZWMKLXsKLSAgR3N0QXVkaW9EZWNvZGVyIGVsZW1lbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdE11TGF3RGVjQ2xhc3MKLXsKLSAgR3N0QXVkaW9EZWNvZGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X211bGF3ZGVjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9TVEVSRU9fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbGF3L211bGF3LWVuY29kZS5jIGIvZ3N0L2xhdy9tdWxhdy1lbmNvZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyY2UwZC4uMDAwMDAwMAotLS0gYS9nc3QvbGF3L211bGF3LWVuY29kZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtbXVsYXdlbmMKLSAqCi0gKiBUaGlzIGVsZW1lbnQgZW5jb2RlIG11bGF3IGF1ZGlvLiBNdWxhdyBjb2RpbmcgaXMgYWxzbyBrbm93biBhcyBHLjcxMS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAibXVsYXctZW5jb2RlLmgiCi0jaW5jbHVkZSAibXVsYXctY29udmVyc2lvbi5oIgotCi1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgbXVsYXdfZW5jX3NyY19mYWN0b3J5OwotZXh0ZXJuIEdzdFN0YXRpY1BhZFRlbXBsYXRlIG11bGF3X2VuY19zaW5rX2ZhY3Rvcnk7Ci0KLS8qIFN0ZXJlbyBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wCi19OwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X211bGF3ZW5jX3N0YXJ0IChHc3RBdWRpb0VuY29kZXIgKiBhdWRpb2VuYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X211bGF3ZW5jX3NldF9mb3JtYXQgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywKLSAgICBHc3RBdWRpb0luZm8gKiBpbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tdWxhd2VuY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRW5jb2RlciAqIGVuYywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIHZvaWQgZ3N0X211bGF3ZW5jX3NldF90YWdzIChHc3RNdUxhd0VuYyAqIG11bGF3ZW5jKTsKLQotCi0jZGVmaW5lIGdzdF9tdWxhd2VuY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RNdUxhd0VuYywgZ3N0X211bGF3ZW5jLCBHU1RfVFlQRV9BVURJT19FTkNPREVSKTsKLQotLypzdGF0aWMgZ3VpbnQgZ3N0X3N0ZXJlb19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWxhd2VuY19zdGFydCAoR3N0QXVkaW9FbmNvZGVyICogYXVkaW9lbmMpCi17Ci0gIEdzdE11TGF3RW5jICptdWxhd2VuYyA9IEdTVF9NVUxBV0VOQyAoYXVkaW9lbmMpOwotCi0gIG11bGF3ZW5jLT5jaGFubmVscyA9IDA7Ci0gIG11bGF3ZW5jLT5yYXRlID0gMDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X211bGF3ZW5jX3NldF90YWdzIChHc3RNdUxhd0VuYyAqIG11bGF3ZW5jKQotewotICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICBndWludCBiaXRyYXRlOwotCi0gIC8qIGJpdHJhdGUgb2YgbXVsYXcgaXMgOCBiaXRzL3NhbXBsZSAqIHNhbXBsZSByYXRlICogbnVtYmVyIG9mIGNoYW5uZWxzICovCi0gIGJpdHJhdGUgPSA4ICogbXVsYXdlbmMtPnJhdGUgKiBtdWxhd2VuYy0+Y2hhbm5lbHM7Ci0KLSAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgIEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFLCBiaXRyYXRlLCBOVUxMKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19NSU5JTVVNX0JJVFJBVEUsIGJpdHJhdGUsIE5VTEwpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX0JJVFJBVEUsIGJpdHJhdGUsIE5VTEwpOwotCi0gIGdzdF9hdWRpb19lbmNvZGVyX21lcmdlX3RhZ3MgKEdTVF9BVURJT19FTkNPREVSIChtdWxhd2VuYyksCi0gICAgICB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXVsYXdlbmNfc2V0X2Zvcm1hdCAoR3N0QXVkaW9FbmNvZGVyICogYXVkaW9lbmMsIEdzdEF1ZGlvSW5mbyAqIGluZm8pCi17Ci0gIEdzdENhcHMgKmJhc2VfY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdE11TGF3RW5jICptdWxhd2VuYyA9IEdTVF9NVUxBV0VOQyAoYXVkaW9lbmMpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgbXVsYXdlbmMtPnJhdGUgPSBpbmZvLT5yYXRlOwotICBtdWxhd2VuYy0+Y2hhbm5lbHMgPSBpbmZvLT5jaGFubmVsczsKLQotICBiYXNlX2NhcHMgPQotICAgICAgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9BVURJT19FTkNPREVSX1NSQ19QQUQgKGF1ZGlvZW5jKSk7Ci0gIGdfYXNzZXJ0IChiYXNlX2NhcHMpOwotICBiYXNlX2NhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChiYXNlX2NhcHMpOwotICBnX2Fzc2VydCAoYmFzZV9jYXBzKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChiYXNlX2NhcHMsIDApOwotICBnX2Fzc2VydCAoc3RydWN0dXJlKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgInJhdGUiLCBHX1RZUEVfSU5ULCBtdWxhd2VuYy0+cmF0ZSwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIG11bGF3ZW5jLT5jaGFubmVscywKLSAgICAgIE5VTEwpOwotCi0gIGdzdF9tdWxhd2VuY19zZXRfdGFncyAobXVsYXdlbmMpOwotCi0gIHJldCA9IGdzdF9hdWRpb19lbmNvZGVyX3NldF9vdXRwdXRfZm9ybWF0IChhdWRpb2VuYywgYmFzZV9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGJhc2VfY2Fwcyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tdWxhd2VuY19oYW5kbGVfZnJhbWUgKEdzdEF1ZGlvRW5jb2RlciAqIGF1ZGlvZW5jLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE11TGF3RW5jICptdWxhd2VuYzsKLSAgR3N0TWFwSW5mbyBpbm1hcCwgb3V0bWFwOwotICBnaW50MTYgKmxpbmVhcl9kYXRhOwotICBnc2l6ZSBsaW5lYXJfc2l6ZTsKLSAgZ3VpbnQ4ICptdWxhd19kYXRhOwotICBndWludCBtdWxhd19zaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgaWYgKCFidWZmZXIpIHsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBtdWxhd2VuYyA9IEdTVF9NVUxBV0VOQyAoYXVkaW9lbmMpOwotCi0gIGlmICghbXVsYXdlbmMtPnJhdGUgfHwgIW11bGF3ZW5jLT5jaGFubmVscykKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZpbm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgbGluZWFyX2RhdGEgPSAoZ2ludDE2ICopIGlubWFwLmRhdGE7Ci0gIGxpbmVhcl9zaXplID0gaW5tYXAuc2l6ZTsKLQotICBtdWxhd19zaXplID0gbGluZWFyX3NpemUgLyAyOwotCi0gIG91dGJ1ZiA9IGdzdF9hdWRpb19lbmNvZGVyX2FsbG9jYXRlX291dHB1dF9idWZmZXIgKGF1ZGlvZW5jLCBtdWxhd19zaXplKTsKLQotICBnX2Fzc2VydCAob3V0YnVmKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmb3V0bWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgbXVsYXdfZGF0YSA9IG91dG1hcC5kYXRhOwotCi0gIG11bGF3X2VuY29kZSAobGluZWFyX2RhdGEsIG11bGF3X2RhdGEsIG11bGF3X3NpemUpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm91dG1hcCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmlubWFwKTsKLQotICByZXQgPSBnc3RfYXVkaW9fZW5jb2Rlcl9maW5pc2hfZnJhbWUgKGF1ZGlvZW5jLCBvdXRidWYsIC0xKTsKLQotZG9uZToKLQotICByZXR1cm4gcmV0OwotCi1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11bGF3ZW5jLCAibm8gZm9ybWF0IG5lZ290aWF0ZWQiKTsKLSAgICByZXQgPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsYXdlbmNfY2xhc3NfaW5pdCAoR3N0TXVMYXdFbmNDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBHc3RBdWRpb0VuY29kZXJDbGFzcyAqYXVkaW9fZW5jb2Rlcl9jbGFzcyA9IEdTVF9BVURJT19FTkNPREVSX0NMQVNTIChrbGFzcyk7Ci0KLSAgYXVkaW9fZW5jb2Rlcl9jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bGF3ZW5jX3N0YXJ0KTsKLSAgYXVkaW9fZW5jb2Rlcl9jbGFzcy0+c2V0X2Zvcm1hdCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsYXdlbmNfc2V0X2Zvcm1hdCk7Ci0gIGF1ZGlvX2VuY29kZXJfY2xhc3MtPmhhbmRsZV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X211bGF3ZW5jX2hhbmRsZV9mcmFtZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmbXVsYXdfZW5jX3NyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmbXVsYXdfZW5jX3NpbmtfZmFjdG9yeSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIk11IExhdyBhdWRpbyBlbmNvZGVyIiwKLSAgICAgICJDb2RlYy9FbmNvZGVyL0F1ZGlvIiwKLSAgICAgICJDb252ZXJ0IDE2Yml0IFBDTSB0byA4Yml0IG11IGxhdyIsCi0gICAgICAiWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsYXdlbmNfaW5pdCAoR3N0TXVMYXdFbmMgKiBtdWxhd2VuYykKLXsKLSAgR1NUX1BBRF9TRVRfQUNDRVBUX1RFTVBMQVRFIChHU1RfQVVESU9fRU5DT0RFUl9TSU5LX1BBRCAobXVsYXdlbmMpKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9sYXcvbXVsYXctZW5jb2RlLmggYi9nc3QvbGF3L211bGF3LWVuY29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWFkZTM5Li4wMDAwMDAwCi0tLSBhL2dzdC9sYXcvbXVsYXctZW5jb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX01VTEFXRU5DT0RFX0hfXwotI2RlZmluZSBfX0dTVF9NVUxBV0VOQ09ERV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9lbmNvZGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfTVVMQVdFTkMgXAotICAoZ3N0X211bGF3ZW5jX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9NVUxBV0VOQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX01VTEFXRU5DLEdzdE11TGF3RW5jKSkKLSNkZWZpbmUgR1NUX01VTEFXRU5DX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX01VTEFXRU5DLEdzdE11TGF3RW5jQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTVVMQVdFTkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NVUxBV0VOQykpCi0jZGVmaW5lIEdTVF9JU19NVUxBV0VOQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9NVUxBV0VOQykpCi10eXBlZGVmIHN0cnVjdCBfR3N0TXVMYXdFbmMgR3N0TXVMYXdFbmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TXVMYXdFbmNDbGFzcyBHc3RNdUxhd0VuY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdE11TGF3RW5jCi17Ci0gIEdzdEF1ZGlvRW5jb2RlciBlbGVtZW50OwotCi0gIGdpbnQgY2hhbm5lbHM7Ci0gIGdpbnQgcmF0ZTsKLX07Ci0KLXN0cnVjdCBfR3N0TXVMYXdFbmNDbGFzcwotewotICBHc3RBdWRpb0VuY29kZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfbXVsYXdlbmNfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1NURVJFT19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9sYXcvbXVsYXcuYyBiL2dzdC9sYXcvbXVsYXcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJlNjE0ZC4uMDAwMDAwMAotLS0gYS9nc3QvbGF3L211bGF3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIgUENNL0EtTGF3IGNvbnZlcnNpb25zCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSAibXVsYXctZW5jb2RlLmgiCi0jaW5jbHVkZSAibXVsYXctZGVjb2RlLmgiCi0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0jZGVmaW5lIElOVF9GT1JNQVQgIlMxNkxFIgotI2Vsc2UKLSNkZWZpbmUgSU5UX0ZPUk1BVCAiUzE2QkUiCi0jZW5kaWYKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgbXVsYXdfZGVjX3NyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIElOVF9GT1JNQVQgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDgwMDAsIDE5MjAwMCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdIikKLSAgICApOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBtdWxhd19kZWNfc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1tdWxhdywgIgotICAgICAgICAicmF0ZSA9IFsgODAwMCAsIDE5MjAwMCBdLCAiICJjaGFubmVscyA9IFsgMSAsIDIgXSIpCi0gICAgKTsKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgbXVsYXdfZW5jX3NpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIElOVF9GT1JNQVQgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDgwMDAsIDE5MjAwMCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdIikKLSAgICApOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBtdWxhd19lbmNfc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1tdWxhdywgIgotICAgICAgICAicmF0ZSA9IFsgODAwMCAsIDE5MjAwMCBdLCAiICJjaGFubmVscyA9IFsgMSAsIDIgXSIpCi0gICAgKTsKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJtdWxhd2VuYyIsCi0gICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfTVVMQVdFTkMpIHx8Ci0gICAgICAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm11bGF3ZGVjIiwKLSAgICAgICAgICBHU1RfUkFOS19QUklNQVJZLCBHU1RfVFlQRV9NVUxBV0RFQykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbXVsYXcsCi0gICAgIk11TGF3IGF1ZGlvIGNvbnZlcnNpb24gcm91dGluZXMiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L2xldmVsL01ha2VmaWxlLmFtIGIvZ3N0L2xldmVsL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmNiMzkzLi4wMDAwMDAwCi0tLSBhL2dzdC9sZXZlbC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0bGV2ZWwubGEKLQotbGliZ3N0bGV2ZWxfbGFfU09VUkNFUyA9IGdzdGxldmVsLmMKLWxpYmdzdGxldmVsX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3RsZXZlbF9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExJQk0pCi1saWJnc3RsZXZlbF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RsZXZlbF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdGxldmVsLmgKZGlmZiAtLWdpdCBhL2dzdC9sZXZlbC9NYWtlZmlsZS5pbiBiL2dzdC9sZXZlbC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYxOTAwMy4uMDAwMDAwMAotLS0gYS9nc3QvbGV2ZWwvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MDkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L2xldmVsCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0bGV2ZWxfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RsZXZlbF9sYV9PQkpFQ1RTID0gbGliZ3N0bGV2ZWxfbGEtZ3N0bGV2ZWwubG8KLWxpYmdzdGxldmVsX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdGxldmVsX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RsZXZlbF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdGxldmVsX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0bGV2ZWxfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0bGV2ZWxfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0bGV2ZWxfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0bGV2ZWxfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0bGV2ZWwubGEKLWxpYmdzdGxldmVsX2xhX1NPVVJDRVMgPSBnc3RsZXZlbC5jCi1saWJnc3RsZXZlbF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0bGV2ZWxfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChMSUJNKQotbGliZ3N0bGV2ZWxfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0bGV2ZWxfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0bGV2ZWwuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L2xldmVsL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9sZXZlbC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdGxldmVsLmxhOiAkKGxpYmdzdGxldmVsX2xhX09CSkVDVFMpICQobGliZ3N0bGV2ZWxfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdGxldmVsX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RsZXZlbF9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0bGV2ZWxfbGFfT0JKRUNUUykgJChsaWJnc3RsZXZlbF9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGxldmVsX2xhLWdzdGxldmVsLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RsZXZlbF9sYS1nc3RsZXZlbC5sbzogZ3N0bGV2ZWwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdGxldmVsX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGxldmVsX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RsZXZlbF9sYS1nc3RsZXZlbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bGV2ZWxfbGEtZ3N0bGV2ZWwuVHBvIC1jIC1vIGxpYmdzdGxldmVsX2xhLWdzdGxldmVsLmxvIGB0ZXN0IC1mICdnc3RsZXZlbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RsZXZlbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RsZXZlbF9sYS1nc3RsZXZlbC5UcG8gJChERVBESVIpL2xpYmdzdGxldmVsX2xhLWdzdGxldmVsLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGxldmVsLmMnIG9iamVjdD0nbGliZ3N0bGV2ZWxfbGEtZ3N0bGV2ZWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RsZXZlbF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RsZXZlbF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RsZXZlbF9sYS1nc3RsZXZlbC5sbyBgdGVzdCAtZiAnZ3N0bGV2ZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bGV2ZWwuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvbGV2ZWwvZ3N0bGV2ZWwuYyBiL2dzdC9sZXZlbC9nc3RsZXZlbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY2ZjU3Li4wMDAwMDAwCi0tLSBhL2dzdC9sZXZlbC9nc3RsZXZlbC5jCisrKyAvZGV2L251bGwKQEAgLTEsODA1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA1Ci0gKiAgICAgICAgICAgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWxldmVsCi0gKgotICogTGV2ZWwgYW5hbHlzZXMgaW5jb21pbmcgYXVkaW8gYnVmZmVycyBhbmQsIGlmIHRoZSAjR3N0TGV2ZWw6bWVzc2FnZSBwcm9wZXJ0eQotICogaXMgI1RSVUUsIGdlbmVyYXRlcyBhbiBlbGVtZW50IG1lc3NhZ2UgbmFtZWQKLSAqIDxjbGFzc25hbWU+JnF1b3Q7bGV2ZWwmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiBhZnRlciBlYWNoIGludGVydmFsIG9mIHRpbWUgZ2l2ZW4gYnkgdGhlICNHc3RMZXZlbDppbnRlcnZhbCBwcm9wZXJ0eS4KLSAqIFRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIHRoZXNlIGZpZWxkczoKLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR3N0Q2xvY2tUaW1lCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7dGltZXN0YW1wJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgdGltZXN0YW1wIG9mIHRoZSBidWZmZXIgdGhhdCB0cmlnZ2VyZWQgdGhlIG1lc3NhZ2UuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR3N0Q2xvY2tUaW1lCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7c3RyZWFtLXRpbWUmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSBzdHJlYW0gdGltZSBvZiB0aGUgYnVmZmVyLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPgotICogICA8cGFyYT4KLSAqICAgI0dzdENsb2NrVGltZQotICogICA8Y2xhc3NuYW1lPiZxdW90O3J1bm5pbmctdGltZSZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIHJ1bm5pbmdfdGltZSBvZiB0aGUgYnVmZmVyLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPgotICogICA8cGFyYT4KLSAqICAgI0dzdENsb2NrVGltZQotICogICA8Y2xhc3NuYW1lPiZxdW90O2R1cmF0aW9uJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgZHVyYXRpb24gb2YgdGhlIGJ1ZmZlci4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RDbG9ja1RpbWUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtlbmR0aW1lJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgZW5kIHRpbWUgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZSBhcyBzdHJlYW0gdGltZSAodGhpcwotICogICBpcyBkZXByZWNhdGVkLCBhcyBpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHN0cmVhbS10aW1lICsgZHVyYXRpb24pCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR1ZhbHVlQXJyYXkgb2YgI2dkb3VibGUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtwZWFrJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgcGVhayBwb3dlciBsZXZlbCBpbiBkQiBmb3IgZWFjaCBjaGFubmVsCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR1ZhbHVlQXJyYXkgb2YgI2dkb3VibGUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtkZWNheSZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIGRlY2F5aW5nIHBlYWsgcG93ZXIgbGV2ZWwgaW4gZEIgZm9yIGVhY2ggY2hhbm5lbAotICogICBUaGUgZGVjYXlpbmcgcGVhayBsZXZlbCBmb2xsb3dzIHRoZSBwZWFrIGxldmVsLCBidXQgc3RhcnRzIGRyb3BwaW5nIGlmIG5vCi0gKiAgIG5ldyBwZWFrIGlzIHJlYWNoZWQgYWZ0ZXIgdGhlIHRpbWUgZ2l2ZW4gYnkgdGhlICNHc3RMZXZlbDpwZWFrLXR0bC4KLSAqICAgV2hlbiB0aGUgZGVjYXlpbmcgcGVhayBsZXZlbCBkcm9wcywgaXQgZG9lcyBzbyBhdCB0aGUgZGVjYXkgcmF0ZSBhcwotICogICBzcGVjaWZpZWQgYnkgdGhlICNHc3RMZXZlbDpwZWFrLWZhbGxvZmYuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR1ZhbHVlQXJyYXkgb2YgI2dkb3VibGUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtybXMmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSBSb290IE1lYW4gU3F1YXJlIChvciBhdmVyYWdlIHBvd2VyKSBsZXZlbCBpbiBkQiBmb3IgZWFjaCBjaGFubmVsCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBhcHBsaWNhdGlvbjwvdGl0bGU+Ci0gKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZyBsYW5ndWFnZT0iQyI+Ci0gKiA8eGk6aW5jbHVkZSB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMy9YSW5jbHVkZSIgcGFyc2U9InRleHQiIGhyZWY9Ii4uLy4uLy4uLy4uL3Rlc3RzL2V4YW1wbGVzL2xldmVsL2xldmVsLWV4YW1wbGUuYyIgLz4KLSAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotLyogRklYTUUgMC4xMTogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoPj0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RsZXZlbC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChsZXZlbF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBsZXZlbF9kZWJ1ZwotCi0jZGVmaW5lIEVQU0lMT04gMWUtMzVmCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgUzgsICIgR1NUX0FVRElPX05FIChTMTYpICIsICIgR1NUX0FVRElPX05FIChTMzIpCi0gICAgICAgICIsICIgR1NUX0FVRElPX05FIChGMzIpICIsIiBHU1RfQVVESU9fTkUgKEY2NCkgIiB9LCIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7IFM4LCAiIEdTVF9BVURJT19ORSAoUzE2KSAiLCAiIEdTVF9BVURJT19ORSAoUzMyKQotICAgICAgICAiLCAiIEdTVF9BVURJT19ORSAoRjMyKSAiLCIgR1NUX0FVRElPX05FIChGNjQpICIgfSwiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSIpCi0gICAgKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUE9TVF9NRVNTQUdFUywKLSAgUFJPUF9NRVNTQUdFLAotICBQUk9QX0lOVEVSVkFMLAotICBQUk9QX1BFQUtfVFRMLAotICBQUk9QX1BFQUtfRkFMTE9GRgotfTsKLQotI2RlZmluZSBnc3RfbGV2ZWxfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TGV2ZWwsIGdzdF9sZXZlbCwgR1NUX1RZUEVfQkFTRV9UUkFOU0ZPUk0pOwotCi1zdGF0aWMgdm9pZCBnc3RfbGV2ZWxfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2xldmVsX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9sZXZlbF9maW5hbGl6ZSAoR09iamVjdCAqIG9iaik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbGV2ZWxfc2V0X2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluLAotICAgIEdzdENhcHMgKiBvdXQpOwotc3RhdGljIGdib29sZWFuIGdzdF9sZXZlbF9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9sZXZlbF90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RCdWZmZXIgKiBpbik7Ci1zdGF0aWMgdm9pZCBnc3RfbGV2ZWxfcG9zdF9tZXNzYWdlIChHc3RMZXZlbCAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2xldmVsX3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9sZXZlbF9yZWNhbGNfaW50ZXJ2YWxfZnJhbWVzIChHc3RMZXZlbCAqIGxldmVsKTsKLQotc3RhdGljIHZvaWQKLWdzdF9sZXZlbF9jbGFzc19pbml0IChHc3RMZXZlbENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbGV2ZWxfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfbGV2ZWxfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9sZXZlbF9maW5hbGl6ZTsKLQotICAvKioKLSAgICogR3N0TGV2ZWw6cG9zdC1tZXNzYWdlcwotICAgKgotICAgKiBQb3N0IG1lc3NhZ2VzIG9uIHRoZSBidXMgd2l0aCBsZXZlbCBpbmZvcm1hdGlvbi4KLSAgICoKLSAgICogU2luY2U6IDEuMS4wCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BPU1RfTUVTU0FHRVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInBvc3QtbWVzc2FnZXMiLCAiUG9zdCBNZXNzYWdlcyIsCi0gICAgICAgICAgIldoZXRoZXIgdG8gcG9zdCBhICdsZXZlbCcgZWxlbWVudCBtZXNzYWdlIG9uIHRoZSBidXMgZm9yIGVhY2ggIgotICAgICAgICAgICJwYXNzZWQgaW50ZXJ2YWwiLCBUUlVFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyogRklYTUUoMi4wKTogcmVtb3ZlIHRoaXMgcHJvcGVydHkgKi8KLSAgLyoqCi0gICAqIEdzdExldmVsOnBvc3QtbWVzc2FnZXMKLSAgICoKLSAgICogUG9zdCBtZXNzYWdlcyBvbiB0aGUgYnVzIHdpdGggbGV2ZWwgaW5mb3JtYXRpb24uCi0gICAqCi0gICAqIERlcHJlY2F0ZWQ6IHVzZSB0aGUgI0dzdExldmVsOnBvc3QtbWVzc2FnZXMgcHJvcGVydHkKLSAgICovCi0jaWZuZGVmIEdTVF9SRU1PVkVfREVQUkVDQVRFRAotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01FU1NBR0UsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm1lc3NhZ2UiLCAibWVzc2FnZSIsCi0gICAgICAgICAgIlBvc3QgYSAnbGV2ZWwnIG1lc3NhZ2UgZm9yIGVhY2ggcGFzc2VkIGludGVydmFsICIKLSAgICAgICAgICAiKGRlcHJlY2F0ZWQsIHVzZSB0aGUgcG9zdC1tZXNzYWdlcyBwcm9wZXJ0eSBpbnN0ZWFkKSIsIFRSVUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0RFUFJFQ0FURUQgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0jZW5kaWYKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JTlRFUlZBTCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJpbnRlcnZhbCIsICJJbnRlcnZhbCIsCi0gICAgICAgICAgIkludGVydmFsIG9mIHRpbWUgYmV0d2VlbiBtZXNzYWdlIHBvc3RzIChpbiBuYW5vc2Vjb25kcykiLAotICAgICAgICAgIDEsIEdfTUFYVUlOVDY0LCBHU1RfU0VDT05EIC8gMTAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEVBS19UVEwsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgicGVhay10dGwiLCAiUGVhayBUVEwiLAotICAgICAgICAgICJUaW1lIFRvIExpdmUgb2YgZGVjYXkgcGVhayBiZWZvcmUgaXQgZmFsbHMgYmFjayAoaW4gbmFub3NlY29uZHMpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgR1NUX1NFQ09ORCAvIDEwICogMywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QRUFLX0ZBTExPRkYsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgicGVhay1mYWxsb2ZmIiwgIlBlYWsgRmFsbG9mZiIsCi0gICAgICAgICAgIkRlY2F5IHJhdGUgb2YgZGVjYXkgcGVhayBhZnRlciBUVEwgKGluIGRCL3NlYykiLAotICAgICAgICAgIDAuMCwgR19NQVhET1VCTEUsIDEwLjAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChsZXZlbF9kZWJ1ZywgImxldmVsIiwgMCwgIkxldmVsIGNhbGN1bGF0aW9uIik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmc2lua190ZW1wbGF0ZV9mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmc3JjX3RlbXBsYXRlX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiTGV2ZWwiLAotICAgICAgIkZpbHRlci9BbmFseXplci9BdWRpbyIsCi0gICAgICAiUk1TL1BlYWsvRGVjYXlpbmcgUGVhayBMZXZlbCBtZXNzYWdlciBmb3IgYXVkaW8vcmF3IiwKLSAgICAgICJUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Iik7Ci0KLSAgdHJhbnNfY2xhc3MtPnNldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9sZXZlbF9zZXRfY2Fwcyk7Ci0gIHRyYW5zX2NsYXNzLT5zdGFydCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbGV2ZWxfc3RhcnQpOwotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9sZXZlbF90cmFuc2Zvcm1faXApOwotICB0cmFuc19jbGFzcy0+c2lua19ldmVudCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbGV2ZWxfc2lua19ldmVudCk7Ci0gIHRyYW5zX2NsYXNzLT5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgPSBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2xldmVsX2luaXQgKEdzdExldmVsICogZmlsdGVyKQotewotICBmaWx0ZXItPkNTID0gTlVMTDsKLSAgZmlsdGVyLT5wZWFrID0gTlVMTDsKLSAgZmlsdGVyLT5sYXN0X3BlYWsgPSBOVUxMOwotICBmaWx0ZXItPmRlY2F5X3BlYWsgPSBOVUxMOwotICBmaWx0ZXItPmRlY2F5X3BlYWtfYmFzZSA9IE5VTEw7Ci0gIGZpbHRlci0+ZGVjYXlfcGVha19hZ2UgPSBOVUxMOwotCi0gIGdzdF9hdWRpb19pbmZvX2luaXQgKCZmaWx0ZXItPmluZm8pOwotCi0gIGZpbHRlci0+aW50ZXJ2YWwgPSBHU1RfU0VDT05EIC8gMTA7Ci0gIGZpbHRlci0+ZGVjYXlfcGVha190dGwgPSBHU1RfU0VDT05EIC8gMTAgKiAzOwotICBmaWx0ZXItPmRlY2F5X3BlYWtfZmFsbG9mZiA9IDEwLjA7ICAgIC8qIGRCIGZhbGxvZmYgKC9zZWMpICovCi0KLSAgZmlsdGVyLT5wb3N0X21lc3NhZ2VzID0gVFJVRTsKLQotICBmaWx0ZXItPnByb2Nlc3MgPSBOVUxMOwotCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGZpbHRlciksIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2xldmVsX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqKQotewotICBHc3RMZXZlbCAqZmlsdGVyID0gR1NUX0xFVkVMIChvYmopOwotCi0gIGdfZnJlZSAoZmlsdGVyLT5DUyk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5wZWFrKTsKLSAgZ19mcmVlIChmaWx0ZXItPmxhc3RfcGVhayk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5kZWNheV9wZWFrKTsKLSAgZ19mcmVlIChmaWx0ZXItPmRlY2F5X3BlYWtfYmFzZSk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5kZWNheV9wZWFrX2FnZSk7Ci0KLSAgZmlsdGVyLT5DUyA9IE5VTEw7Ci0gIGZpbHRlci0+cGVhayA9IE5VTEw7Ci0gIGZpbHRlci0+bGFzdF9wZWFrID0gTlVMTDsKLSAgZmlsdGVyLT5kZWNheV9wZWFrID0gTlVMTDsKLSAgZmlsdGVyLT5kZWNheV9wZWFrX2Jhc2UgPSBOVUxMOwotICBmaWx0ZXItPmRlY2F5X3BlYWtfYWdlID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbGV2ZWxfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdExldmVsICpmaWx0ZXIgPSBHU1RfTEVWRUwgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BPU1RfTUVTU0FHRVM6Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICBjYXNlIFBST1BfTUVTU0FHRToKLSAgICAgIGZpbHRlci0+cG9zdF9tZXNzYWdlcyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTlRFUlZBTDoKLSAgICAgIGZpbHRlci0+aW50ZXJ2YWwgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIC8qIE5vdCBleGFjdGx5IHRocmVhZC1zYWZlLCBidXQgcHJvcGVydHkgZG9lcyBub3QgYWR2ZXJ0aXNlIHRoYXQgaXQKLSAgICAgICAqIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgYW55d2F5ICovCi0gICAgICBpZiAoR1NUX0FVRElPX0lORk9fUkFURSAoJmZpbHRlci0+aW5mbykpIHsKLSAgICAgICAgZ3N0X2xldmVsX3JlY2FsY19pbnRlcnZhbF9mcmFtZXMgKGZpbHRlcik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEVBS19UVEw6Ci0gICAgICBmaWx0ZXItPmRlY2F5X3BlYWtfdHRsID0KLSAgICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEVBS19GQUxMT0ZGOgotICAgICAgZmlsdGVyLT5kZWNheV9wZWFrX2ZhbGxvZmYgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9sZXZlbF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TGV2ZWwgKmZpbHRlciA9IEdTVF9MRVZFTCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9TVF9NRVNTQUdFUzoKLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgIGNhc2UgUFJPUF9NRVNTQUdFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+cG9zdF9tZXNzYWdlcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJWQUw6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBmaWx0ZXItPmludGVydmFsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QRUFLX1RUTDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGZpbHRlci0+ZGVjYXlfcGVha190dGwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BFQUtfRkFMTE9GRjoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGZpbHRlci0+ZGVjYXlfcGVha19mYWxsb2ZmKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi0vKiBwcm9jZXNzIG9uZSAoaW50ZXJsZWF2ZWQpIGNoYW5uZWwgb2YgaW5jb21pbmcgc2FtcGxlcwotICogY2FsY3VsYXRlIHNxdWFyZSBzdW0gb2Ygc2FtcGxlcwotICogbm9ybWFsaXplIGFuZCBhdmVyYWdlIG92ZXIgbnVtYmVyIG9mIHNhbXBsZXMKLSAqIHJldHVybnMgYSBub3JtYWxpemVkIGN1bXVsYXRpdmUgc3F1YXJlIHZhbHVlLCB3aGljaCBjYW4gYmUgYXZlcmFnZWQKLSAqIHRvIHJldHVybiB0aGUgYXZlcmFnZSBwb3dlciBhcyBhIGRvdWJsZSBiZXR3ZWVuIDAgYW5kIDEKLSAqIGFsc28gcmV0dXJucyB0aGUgbm9ybWFsaXplZCBwZWFrIHBvd2VyIChzcXVhcmUgb2YgdGhlIGhpZ2hlc3QgYW1wbGl0dWRlKQotICoKLSAqIGNhbGxlciBtdXN0IGFzc3VyZSBudW0gaXMgYSBtdWx0aXBsZSBvZiBjaGFubmVscwotICogc2FtcGxlcyBmb3IgbXVsdGlwbGUgY2hhbm5lbHMgYXJlIGludGVybGVhdmVkCi0gKiBpbnB1dCBzYW1wbGUgZGF0YSBlbnRlcnMgaW4gKmluX2RhdGEgYW5kIGlzIG5vdCBtb2RpZmllZAotICogdGhpcyBmaWx0ZXIgb25seSBhY2NlcHRzIHNpZ25lZCBhdWRpbyBkYXRhLCBzbyBtaWQgbGV2ZWwgaXMgYWx3YXlzIDAKLSAqCi0gKiBmb3IgaW50ZWdlcnMsIHRoaXMgY29kZSBjb25zaWRlcnMgdGhlIG5vbi1leGlzdGFudCBwb3NpdGl2ZSBtYXggdmFsdWUgdG8gYmUKLSAqIGZ1bGwtc2NhbGU7IHNvIG1heC0xIHdpbGwgbm90IG1hcCB0byAxLjAKLSAqLwotCi0jZGVmaW5lIERFRklORV9JTlRfTEVWRUxfQ0FMQ1VMQVRPUihUWVBFLCBSRVNPTFVUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCBpbmxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nc3RfbGV2ZWxfY2FsY3VsYXRlXyMjVFlQRSAoZ3BvaW50ZXIgZGF0YSwgZ3VpbnQgbnVtLCBndWludCBjaGFubmVscywgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSAqTkNTLCBnZG91YmxlICpOUFMpICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFRZUEUgKiBpbiA9IChUWVBFICopZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJlZ2lzdGVyIGd1aW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdkb3VibGUgc3F1YXJlc3VtID0gMC4wOyAgICAgICAgICAgLyogc3F1YXJlIHN1bSBvZiB0aGUgaW5wdXQgc2FtcGxlcyAqLyAgICBcCi0gIHJlZ2lzdGVyIGdkb3VibGUgc3F1YXJlID0gMC4wOyAgICAgLyogU3F1YXJlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJlZ2lzdGVyIGdkb3VibGUgcGVha3NxdWFyZSA9IDAuMDsgLyogUGVhayBTcXVhcmUgU2FtcGxlICovICAgICAgICAgICAgICAgICBcCi0gIGdkb3VibGUgbm9ybWFsaXplcjsgICAgICAgICAgICAgICAgLyogZGl2aXNvciB0byBnZXQgYSBbLTEuMCwgMS4wXSByYW5nZSAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qICpOQ1MgPSAwLjA7IE5vcm1hbGl6ZWQgQ3VtdWxhdGl2ZSBTcXVhcmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qICpOUFMgPSAwLjA7IE5vcm1hbGl6ZWQgUGVhayBTcXVhcmUgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZvciAoaiA9IDA7IGogPCBudW07IGogKz0gY2hhbm5lbHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3F1YXJlID0gKChnZG91YmxlKSBpbltqXSkgKiBpbltqXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHNxdWFyZSA+IHBlYWtzcXVhcmUpIHBlYWtzcXVhcmUgPSBzcXVhcmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3F1YXJlc3VtICs9IHNxdWFyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIG5vcm1hbGl6ZXIgPSAoZ2RvdWJsZSkgKEdfR0lOVDY0X0NPTlNUQU5UKDEpIDw8IChSRVNPTFVUSU9OICogMikpOyAgICAgICAgICBcCi0gICpOQ1MgPSBzcXVhcmVzdW0gLyBub3JtYWxpemVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICpOUFMgPSBwZWFrc3F1YXJlIC8gbm9ybWFsaXplcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLURFRklORV9JTlRfTEVWRUxfQ0FMQ1VMQVRPUiAoZ2ludDMyLCAzMSk7Ci1ERUZJTkVfSU5UX0xFVkVMX0NBTENVTEFUT1IgKGdpbnQxNiwgMTUpOwotREVGSU5FX0lOVF9MRVZFTF9DQUxDVUxBVE9SIChnaW50OCwgNyk7Ci0KLS8qIEZJWE1FOiB1c2Ugb3JjIHRvIGNhbGN1bGF0ZSBzcXVhcmVzdW1zPyAqLwotI2RlZmluZSBERUZJTkVfRkxPQVRfTEVWRUxfQ0FMQ1VMQVRPUihUWVBFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgaW5saW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ3N0X2xldmVsX2NhbGN1bGF0ZV8jI1RZUEUgKGdwb2ludGVyIGRhdGEsIGd1aW50IG51bSwgZ3VpbnQgY2hhbm5lbHMsICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgKk5DUywgZ2RvdWJsZSAqTlBTKSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUWVBFICogaW4gPSAoVFlQRSAqKWRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZWdpc3RlciBndWludCBqOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnZG91YmxlIHNxdWFyZXN1bSA9IDAuMDsgICAgICAgICAgIC8qIHNxdWFyZSBzdW0gb2YgdGhlIGlucHV0IHNhbXBsZXMgKi8gICAgXAotICByZWdpc3RlciBnZG91YmxlIHNxdWFyZSA9IDAuMDsgICAgIC8qIFNxdWFyZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZWdpc3RlciBnZG91YmxlIHBlYWtzcXVhcmUgPSAwLjA7IC8qIFBlYWsgU3F1YXJlIFNhbXBsZSAqLyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiAqTkNTID0gMC4wOyBOb3JtYWxpemVkIEN1bXVsYXRpdmUgU3F1YXJlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiAqTlBTID0gMC4wOyBOb3JtYWxpemVkIFBlYWsgU3F1YXJlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBvcmNfbGV2ZWxfc3F1YXJlc3VtX2Y2NCgmc3F1YXJlc3VtLGluLG51bSk7ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGogPSAwOyBqIDwgbnVtOyBqICs9IGNoYW5uZWxzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNxdWFyZSA9ICgoZ2RvdWJsZSkgaW5bal0pICogaW5bal07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChzcXVhcmUgPiBwZWFrc3F1YXJlKSBwZWFrc3F1YXJlID0gc3F1YXJlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNxdWFyZXN1bSArPSBzcXVhcmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAqTkNTID0gc3F1YXJlc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAqTlBTID0gcGVha3NxdWFyZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi1ERUZJTkVfRkxPQVRfTEVWRUxfQ0FMQ1VMQVRPUiAoZ2Zsb2F0KTsKLURFRklORV9GTE9BVF9MRVZFTF9DQUxDVUxBVE9SIChnZG91YmxlKTsKLQotLyogd2Ugd291bGQgbmVlZCBzdHJpZGUgdG8gZGVpbnRlcmxlYXZlIGFsc28KLXN0YXRpYyB2b2lkIGlubGluZQotZ3N0X2xldmVsX2NhbGN1bGF0ZV9nZG91YmxlIChncG9pbnRlciBkYXRhLCBndWludCBudW0sIGd1aW50IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgKk5DUywgZ2RvdWJsZSAqTlBTKQotewotICBvcmNfbGV2ZWxfc3F1YXJlc3VtX2Y2NChOQ1MsKGdkb3VibGUgKilkYXRhLG51bSk7Ci0gICpOUFMgPSAwLjA7Ci19Ci0qLwotCi1zdGF0aWMgdm9pZAotZ3N0X2xldmVsX3JlY2FsY19pbnRlcnZhbF9mcmFtZXMgKEdzdExldmVsICogbGV2ZWwpCi17Ci0gIEdzdENsb2NrVGltZSBpbnRlcnZhbCA9IGxldmVsLT5pbnRlcnZhbDsKLSAgZ3VpbnQgc2FtcGxlX3JhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmbGV2ZWwtPmluZm8pOwotICBndWludCBpbnRlcnZhbF9mcmFtZXM7Ci0KLSAgaW50ZXJ2YWxfZnJhbWVzID0gR1NUX0NMT0NLX1RJTUVfVE9fRlJBTUVTIChpbnRlcnZhbCwgc2FtcGxlX3JhdGUpOwotCi0gIGlmIChpbnRlcnZhbF9mcmFtZXMgPT0gMCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobGV2ZWwsICJpbnRlcnZhbCAlIiBHU1RfVElNRV9GT1JNQVQgIiBpcyB0b28gc21hbGwsICIKLSAgICAgICAgInNob3VsZCBiZSBhdCBsZWFzdCAlIiBHU1RfVElNRV9GT1JNQVQgIiBmb3Igc2FtcGxlIHJhdGUgJXUiLAotICAgICAgICBHU1RfVElNRV9BUkdTIChpbnRlcnZhbCksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9GUkFNRVNfVE9fQ0xPQ0tfVElNRSAoMSwgc2FtcGxlX3JhdGUpKSwgc2FtcGxlX3JhdGUpOwotICAgIGludGVydmFsX2ZyYW1lcyA9IDE7Ci0gIH0KLQotICBsZXZlbC0+aW50ZXJ2YWxfZnJhbWVzID0gaW50ZXJ2YWxfZnJhbWVzOwotCi0gIEdTVF9JTkZPX09CSkVDVCAobGV2ZWwsICJpbnRlcnZhbF9mcmFtZXMgbm93ICV1IGZvciBpbnRlcnZhbCAiCi0gICAgICAiJSIgR1NUX1RJTUVfRk9STUFUICIgYW5kIHNhbXBsZSByYXRlICV1IiwgaW50ZXJ2YWxfZnJhbWVzLAotICAgICAgR1NUX1RJTUVfQVJHUyAoaW50ZXJ2YWwpLCBzYW1wbGVfcmF0ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2xldmVsX3NldF9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdENhcHMgKiBpbiwgR3N0Q2FwcyAqIG91dCkKLXsKLSAgR3N0TGV2ZWwgKmZpbHRlciA9IEdTVF9MRVZFTCAodHJhbnMpOwotICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgZ2ludCBpLCBjaGFubmVsczsKLQotICBpZiAoIWdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGluKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZpbmZvKSkgewotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TODoKLSAgICAgIGZpbHRlci0+cHJvY2VzcyA9IGdzdF9sZXZlbF9jYWxjdWxhdGVfZ2ludDg7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2OgotICAgICAgZmlsdGVyLT5wcm9jZXNzID0gZ3N0X2xldmVsX2NhbGN1bGF0ZV9naW50MTY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyOgotICAgICAgZmlsdGVyLT5wcm9jZXNzID0gZ3N0X2xldmVsX2NhbGN1bGF0ZV9naW50MzI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyOgotICAgICAgZmlsdGVyLT5wcm9jZXNzID0gZ3N0X2xldmVsX2NhbGN1bGF0ZV9nZmxvYXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjY0OgotICAgICAgZmlsdGVyLT5wcm9jZXNzID0gZ3N0X2xldmVsX2NhbGN1bGF0ZV9nZG91YmxlOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGZpbHRlci0+cHJvY2VzcyA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGZpbHRlci0+aW5mbyA9IGluZm87Ci0KLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJmluZm8pOwotCi0gIC8qIGFsbG9jYXRlIGNoYW5uZWwgdmFyaWFibGUgYXJyYXlzICovCi0gIGdfZnJlZSAoZmlsdGVyLT5DUyk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5wZWFrKTsKLSAgZ19mcmVlIChmaWx0ZXItPmxhc3RfcGVhayk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5kZWNheV9wZWFrKTsKLSAgZ19mcmVlIChmaWx0ZXItPmRlY2F5X3BlYWtfYmFzZSk7Ci0gIGdfZnJlZSAoZmlsdGVyLT5kZWNheV9wZWFrX2FnZSk7Ci0gIGZpbHRlci0+Q1MgPSBnX25ldyAoZ2RvdWJsZSwgY2hhbm5lbHMpOwotICBmaWx0ZXItPnBlYWsgPSBnX25ldyAoZ2RvdWJsZSwgY2hhbm5lbHMpOwotICBmaWx0ZXItPmxhc3RfcGVhayA9IGdfbmV3IChnZG91YmxlLCBjaGFubmVscyk7Ci0gIGZpbHRlci0+ZGVjYXlfcGVhayA9IGdfbmV3IChnZG91YmxlLCBjaGFubmVscyk7Ci0gIGZpbHRlci0+ZGVjYXlfcGVha19iYXNlID0gZ19uZXcgKGdkb3VibGUsIGNoYW5uZWxzKTsKLQotICBmaWx0ZXItPmRlY2F5X3BlYWtfYWdlID0gZ19uZXcgKEdzdENsb2NrVGltZSwgY2hhbm5lbHMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgKytpKSB7Ci0gICAgZmlsdGVyLT5DU1tpXSA9IGZpbHRlci0+cGVha1tpXSA9IGZpbHRlci0+bGFzdF9wZWFrW2ldID0KLSAgICAgICAgZmlsdGVyLT5kZWNheV9wZWFrW2ldID0gZmlsdGVyLT5kZWNheV9wZWFrX2Jhc2VbaV0gPSAwLjA7Ci0gICAgZmlsdGVyLT5kZWNheV9wZWFrX2FnZVtpXSA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gIH0KLQotICBnc3RfbGV2ZWxfcmVjYWxjX2ludGVydmFsX2ZyYW1lcyAoZmlsdGVyKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbGV2ZWxfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucykKLXsKLSAgR3N0TGV2ZWwgKmZpbHRlciA9IEdTVF9MRVZFTCAodHJhbnMpOwotCi0gIGZpbHRlci0+bnVtX2ZyYW1lcyA9IDA7Ci0gIGZpbHRlci0+bWVzc2FnZV90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RNZXNzYWdlICoKLWdzdF9sZXZlbF9tZXNzYWdlX25ldyAoR3N0TGV2ZWwgKiBsZXZlbCwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwKLSAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb24pCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gKnRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKGxldmVsKTsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHVmFsdWUgdiA9IHsgMCwgfTsKLSAgR3N0Q2xvY2tUaW1lIGVuZHRpbWUsIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWU7Ci0KLSAgcnVubmluZ190aW1lID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgIHRpbWVzdGFtcCk7Ci0gIHN0cmVhbV90aW1lID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgdGltZXN0YW1wKTsKLSAgLyogZW5kdGltZSBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgZW5kdGltZSA9IHN0cmVhbV90aW1lICsgZHVyYXRpb247Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgibGV2ZWwiLAotICAgICAgImVuZHRpbWUiLCBHU1RfVFlQRV9DTE9DS19USU1FLCBlbmR0aW1lLAotICAgICAgInRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgICJzdHJlYW0tdGltZSIsIEdfVFlQRV9VSU5UNjQsIHN0cmVhbV90aW1lLAotICAgICAgInJ1bm5pbmctdGltZSIsIEdfVFlQRV9VSU5UNjQsIHJ1bm5pbmdfdGltZSwKLSAgICAgICJkdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLCBOVUxMKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2LCBHX1RZUEVfVkFMVUVfQVJSQVkpOwotICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZ2LCBnX3ZhbHVlX2FycmF5X25ldyAoMCkpOwotICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKHMsICJybXMiLCAmdik7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX1ZBTFVFX0FSUkFZKTsKLSAgZ192YWx1ZV90YWtlX2JveGVkICgmdiwgZ192YWx1ZV9hcnJheV9uZXcgKDApKTsKLSAgZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlIChzLCAicGVhayIsICZ2KTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2LCBHX1RZUEVfVkFMVUVfQVJSQVkpOwotICBnX3ZhbHVlX3Rha2VfYm94ZWQgKCZ2LCBnX3ZhbHVlX2FycmF5X25ldyAoMCkpOwotICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKHMsICJkZWNheSIsICZ2KTsKLQotICByZXR1cm4gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKGxldmVsKSwgcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbGV2ZWxfbWVzc2FnZV9hcHBlbmRfY2hhbm5lbCAoR3N0TWVzc2FnZSAqIG0sIGdkb3VibGUgcm1zLCBnZG91YmxlIHBlYWssCi0gICAgZ2RvdWJsZSBkZWNheSkKLXsKLSAgY29uc3QgR1ZhbHVlICphcnJheV92YWw7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR1ZhbHVlQXJyYXkgKmFycjsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0RPVUJMRSk7Ci0KLSAgcyA9IChHc3RTdHJ1Y3R1cmUgKikgZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobSk7Ci0KLSAgYXJyYXlfdmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJybXMiKTsKLSAgYXJyID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkIChhcnJheV92YWwpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2LCBybXMpOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdik7ICAgICAgIC8qIGNvcGllcyBieSB2YWx1ZSAqLwotCi0gIGFycmF5X3ZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicGVhayIpOwotICBhcnIgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKGFycmF5X3ZhbCk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIHBlYWspOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdik7ICAgICAgIC8qIGNvcGllcyBieSB2YWx1ZSAqLwotCi0gIGFycmF5X3ZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZGVjYXkiKTsKLSAgYXJyID0gKEdWYWx1ZUFycmF5ICopIGdfdmFsdWVfZ2V0X2JveGVkIChhcnJheV92YWwpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2LCBkZWNheSk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kIChhcnIsICZ2KTsgICAgICAgLyogY29waWVzIGJ5IHZhbHVlICovCi0KLSAgZ192YWx1ZV91bnNldCAoJnYpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X2xldmVsX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbikKLXsKLSAgR3N0TGV2ZWwgKmZpbHRlcjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqaW5fZGF0YTsKLSAgZ3NpemUgaW5fc2l6ZTsKLSAgZ2RvdWJsZSBDUzsKLSAgZ3VpbnQgaTsKLSAgZ3VpbnQgbnVtX2ZyYW1lczsKLSAgZ3VpbnQgbnVtX2ludF9zYW1wbGVzID0gMDsgICAgLyogbnVtYmVyIG9mIGludGVybGVhdmVkIHNhbXBsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWUuIHRvdGFsIGNvdW50IGZvciBhbGwgY2hhbm5lbHMgY29tYmluZWQgKi8KLSAgZ3VpbnQgYmxvY2tfc2l6ZSwgYmxvY2tfaW50X3NpemU7ICAgICAvKiB3ZSBzdWJkaXZpZGUgYnVmZmVycyB0byBub3Qgc2tpcCBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJ2YWxzICovCi0gIEdzdENsb2NrVGltZURpZmYgZmFsbG9mZl90aW1lOwotICBnaW50IGNoYW5uZWxzLCByYXRlLCBicHM7Ci0KLSAgZmlsdGVyID0gR1NUX0xFVkVMICh0cmFucyk7Ci0KLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJmZpbHRlci0+aW5mbyk7Ci0gIGJwcyA9IEdTVF9BVURJT19JTkZPX0JQUyAoJmZpbHRlci0+aW5mbyk7Ci0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmZmlsdGVyLT5pbmZvKTsKLQotICBnc3RfYnVmZmVyX21hcCAoaW4sICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGluX2RhdGEgPSBtYXAuZGF0YTsKLSAgaW5fc2l6ZSA9IG1hcC5zaXplOwotCi0gIG51bV9pbnRfc2FtcGxlcyA9IGluX3NpemUgLyBicHM7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgImFuYWx5emluZyAldSBzYW1wbGUgZnJhbWVzIGF0IHRzICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIG51bV9pbnRfc2FtcGxlcywgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluKSkpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChudW1faW50X3NhbXBsZXMgJSBjaGFubmVscyA9PSAwLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGluLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpIHsKLSAgICBmaWx0ZXItPm1lc3NhZ2VfdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW4pOwotICAgIGZpbHRlci0+bnVtX2ZyYW1lcyA9IDA7Ci0gIH0KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZmlsdGVyLT5tZXNzYWdlX3RzKSkpIHsKLSAgICBmaWx0ZXItPm1lc3NhZ2VfdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW4pOwotICB9Ci0KLSAgbnVtX2ZyYW1lcyA9IG51bV9pbnRfc2FtcGxlcyAvIGNoYW5uZWxzOwotICB3aGlsZSAobnVtX2ZyYW1lcyA+IDApIHsKLSAgICBibG9ja19zaXplID0gZmlsdGVyLT5pbnRlcnZhbF9mcmFtZXMgLSBmaWx0ZXItPm51bV9mcmFtZXM7Ci0gICAgYmxvY2tfc2l6ZSA9IE1JTiAoYmxvY2tfc2l6ZSwgbnVtX2ZyYW1lcyk7Ci0gICAgYmxvY2tfaW50X3NpemUgPSBibG9ja19zaXplICogY2hhbm5lbHM7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7ICsraSkgewotICAgICAgaWYgKCFHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChpbiwgR1NUX0JVRkZFUl9GTEFHX0dBUCkpIHsKLSAgICAgICAgZmlsdGVyLT5wcm9jZXNzIChpbl9kYXRhICsgKGJwcyAqIGkpLCBibG9ja19pbnRfc2l6ZSwgY2hhbm5lbHMsICZDUywKLSAgICAgICAgICAgICZmaWx0ZXItPnBlYWtbaV0pOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAgICAgIlslZF06IGN1bXVsYXRpdmUgc3F1YXJlcyAlbGYsIG92ZXIgJWQgc2FtcGxlcy8lZCBjaGFubmVscyIsCi0gICAgICAgICAgICBpLCBDUywgYmxvY2tfaW50X3NpemUsIGNoYW5uZWxzKTsKLSAgICAgICAgZmlsdGVyLT5DU1tpXSArPSBDUzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbHRlci0+cGVha1tpXSA9IDAuMDsKLSAgICAgIH0KLQotICAgICAgZmlsdGVyLT5kZWNheV9wZWFrX2FnZVtpXSArPSBHU1RfRlJBTUVTX1RPX0NMT0NLX1RJTUUgKG51bV9mcmFtZXMsIHJhdGUpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgICAiWyVkXTogcGVhayAlZiwgbGFzdCBwZWFrICVmLCBkZWNheSBwZWFrICVmLCBhZ2UgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIGksIGZpbHRlci0+cGVha1tpXSwgZmlsdGVyLT5sYXN0X3BlYWtbaV0sIGZpbHRlci0+ZGVjYXlfcGVha1tpXSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChmaWx0ZXItPmRlY2F5X3BlYWtfYWdlW2ldKSk7Ci0KLSAgICAgIC8qIHVwZGF0ZSBydW5uaW5nIHBlYWsgKi8KLSAgICAgIGlmIChmaWx0ZXItPnBlYWtbaV0gPiBmaWx0ZXItPmxhc3RfcGVha1tpXSkKLSAgICAgICAgZmlsdGVyLT5sYXN0X3BlYWtbaV0gPSBmaWx0ZXItPnBlYWtbaV07Ci0KLSAgICAgIC8qIG1ha2UgZGVjYXkgcGVhayBmYWxsIG9mZiBpZiB0b28gb2xkICovCi0gICAgICBmYWxsb2ZmX3RpbWUgPQotICAgICAgICAgIEdTVF9DTE9DS19ESUZGIChnc3RfZ2RvdWJsZV90b19ndWludDY0IChmaWx0ZXItPmRlY2F5X3BlYWtfdHRsKSwKLSAgICAgICAgICBmaWx0ZXItPmRlY2F5X3BlYWtfYWdlW2ldKTsKLSAgICAgIGlmIChmYWxsb2ZmX3RpbWUgPiAwKSB7Ci0gICAgICAgIGdkb3VibGUgZmFsbG9mZl9kQjsKLSAgICAgICAgZ2RvdWJsZSBmYWxsb2ZmOwotICAgICAgICBnZG91YmxlIGxlbmd0aDsgICAgICAgICAvKiBsZW5ndGggb2YgZmFsbG9mZiB0aW1lIGluIHNlY29uZHMgKi8KLQotICAgICAgICBsZW5ndGggPSAoZ2RvdWJsZSkgZmFsbG9mZl90aW1lIC8gKGdkb3VibGUpIEdTVF9TRUNPTkQ7Ci0gICAgICAgIGZhbGxvZmZfZEIgPSBmaWx0ZXItPmRlY2F5X3BlYWtfZmFsbG9mZiAqIGxlbmd0aDsKLSAgICAgICAgZmFsbG9mZiA9IHBvdyAoMTAsIGZhbGxvZmZfZEIgLyAtMjAuMCk7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgICAgICJmYWxsb2ZmOiBjdXJyZW50ICVmLCBiYXNlICVmLCBpbnRlcnZhbCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAgICIsIGRCIGZhbGxvZmYgJWYsIGZhY3RvciAlZSIsCi0gICAgICAgICAgICBmaWx0ZXItPmRlY2F5X3BlYWtbaV0sIGZpbHRlci0+ZGVjYXlfcGVha19iYXNlW2ldLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZmFsbG9mZl90aW1lKSwgZmFsbG9mZl9kQiwgZmFsbG9mZik7Ci0gICAgICAgIGZpbHRlci0+ZGVjYXlfcGVha1tpXSA9IGZpbHRlci0+ZGVjYXlfcGVha19iYXNlW2ldICogZmFsbG9mZjsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgICAgICJwZWFrIGlzICUiIEdTVF9USU1FX0ZPUk1BVCAiIG9sZCwgZGVjYXllZCB3aXRoIGZhY3RvciAlZSB0byAlZiIsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChmaWx0ZXItPmRlY2F5X3BlYWtfYWdlW2ldKSwgZmFsbG9mZiwKLSAgICAgICAgICAgIGZpbHRlci0+ZGVjYXlfcGVha1tpXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLCAicGVhayBub3Qgb2xkIGVub3VnaCwgbm90IGRlY2F5aW5nIik7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGlmIHRoZSBwZWFrIG9mIHRoaXMgcnVuIGlzIGhpZ2hlciwgdGhlIGRlY2F5IHBlYWsgZ2V0cyByZXNldCAqLwotICAgICAgaWYgKGZpbHRlci0+cGVha1tpXSA+PSBmaWx0ZXItPmRlY2F5X3BlYWtbaV0pIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgIm5ldyBwZWFrLCAlZiIsIGZpbHRlci0+cGVha1tpXSk7Ci0gICAgICAgIGZpbHRlci0+ZGVjYXlfcGVha1tpXSA9IGZpbHRlci0+cGVha1tpXTsKLSAgICAgICAgZmlsdGVyLT5kZWNheV9wZWFrX2Jhc2VbaV0gPSBmaWx0ZXItPnBlYWtbaV07Ci0gICAgICAgIGZpbHRlci0+ZGVjYXlfcGVha19hZ2VbaV0gPSBHX0dJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGluX2RhdGEgKz0gYmxvY2tfc2l6ZSAqIGJwcyAqIGNoYW5uZWxzOwotCi0gICAgZmlsdGVyLT5udW1fZnJhbWVzICs9IGJsb2NrX3NpemU7Ci0gICAgbnVtX2ZyYW1lcyAtPSBibG9ja19zaXplOwotCi0gICAgLyogZG8gd2UgbmVlZCB0byBtZXNzYWdlID8gKi8KLSAgICBpZiAoZmlsdGVyLT5udW1fZnJhbWVzID49IGZpbHRlci0+aW50ZXJ2YWxfZnJhbWVzKSB7Ci0gICAgICBnc3RfbGV2ZWxfcG9zdF9tZXNzYWdlIChmaWx0ZXIpOwotICAgIH0KLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGluLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbGV2ZWxfcG9zdF9tZXNzYWdlIChHc3RMZXZlbCAqIGZpbHRlcikKLXsKLSAgZ3VpbnQgaTsKLSAgZ2ludCBjaGFubmVscywgcmF0ZSwgZnJhbWVzID0gZmlsdGVyLT5udW1fZnJhbWVzOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0KLSAgY2hhbm5lbHMgPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJmZpbHRlci0+aW5mbyk7Ci0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmZmlsdGVyLT5pbmZvKTsKLSAgZHVyYXRpb24gPSBHU1RfRlJBTUVTX1RPX0NMT0NLX1RJTUUgKGZyYW1lcywgcmF0ZSk7Ci0KLSAgaWYgKGZpbHRlci0+cG9zdF9tZXNzYWdlcykgewotICAgIEdzdE1lc3NhZ2UgKm0gPQotICAgICAgICBnc3RfbGV2ZWxfbWVzc2FnZV9uZXcgKGZpbHRlciwgZmlsdGVyLT5tZXNzYWdlX3RzLCBkdXJhdGlvbik7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAibWVzc2FnZTogdHMgJSIgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiLCBudW1fZnJhbWVzICVkIiwgR1NUX1RJTUVfQVJHUyAoZmlsdGVyLT5tZXNzYWdlX3RzKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pLCBmcmFtZXMpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyArK2kpIHsKLSAgICAgIGdkb3VibGUgUk1TOwotICAgICAgZ2RvdWJsZSBSTVNkQiwgcGVha2RCLCBkZWNheWRCOwotCi0gICAgICBSTVMgPSBzcXJ0IChmaWx0ZXItPkNTW2ldIC8gZnJhbWVzKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsCi0gICAgICAgICAgIm1lc3NhZ2U6IGNoYW5uZWwgJWQsIENTICVmLCBSTVMgJWYiLCBpLCBmaWx0ZXItPkNTW2ldLCBSTVMpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgICAibWVzc2FnZTogbGFzdF9wZWFrOiAlZiwgZGVjYXlfcGVhazogJWYiLAotICAgICAgICAgIGZpbHRlci0+bGFzdF9wZWFrW2ldLCBmaWx0ZXItPmRlY2F5X3BlYWtbaV0pOwotICAgICAgLyogUk1TIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBpbiBhbXBsaXR1ZGUsIHNvIDIwICogbG9nIDEwICovCi0gICAgICBSTVNkQiA9IDIwICogbG9nMTAgKFJNUyArIEVQU0lMT04pOwotICAgICAgLyogcGVhayB2YWx1ZXMgYXJlIHNxdWFyZSBzdW1zLCBpZS4gcG93ZXIsIHNvIDEwICogbG9nIDEwICovCi0gICAgICBwZWFrZEIgPSAxMCAqIGxvZzEwIChmaWx0ZXItPmxhc3RfcGVha1tpXSArIEVQU0lMT04pOwotICAgICAgZGVjYXlkQiA9IDEwICogbG9nMTAgKGZpbHRlci0+ZGVjYXlfcGVha1tpXSArIEVQU0lMT04pOwotCi0gICAgICBpZiAoZmlsdGVyLT5kZWNheV9wZWFrW2ldIDwgZmlsdGVyLT5sYXN0X3BlYWtbaV0pIHsKLSAgICAgICAgLyogdGhpcyBjYW4gaGFwcGVuIGluIGNlcnRhaW4gY2FzZXMsIGZvciBleGFtcGxlIHdoZW4KLSAgICAgICAgICogdGhlIGxhc3QgcGVhayBpcyBiZXR3ZWVuIGRlY2F5X3BlYWsgYW5kIGRlY2F5X3BlYWtfYmFzZSAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsCi0gICAgICAgICAgICAibWVzc2FnZTogZGVjYXkgcGVhayBkQiAlZiBzbWFsbGVyIHRoYW4gbGFzdCBwZWFrIGRCICVmLCBjb3B5aW5nIiwKLSAgICAgICAgICAgIGRlY2F5ZEIsIHBlYWtkQik7Ci0gICAgICAgIGZpbHRlci0+ZGVjYXlfcGVha1tpXSA9IGZpbHRlci0+bGFzdF9wZWFrW2ldOwotICAgICAgfQotICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgICAibWVzc2FnZTogUk1TICVmIGRCLCBwZWFrICVmIGRCLCBkZWNheSAlZiBkQiIsCi0gICAgICAgICAgUk1TZEIsIHBlYWtkQiwgZGVjYXlkQik7Ci0KLSAgICAgIGdzdF9sZXZlbF9tZXNzYWdlX2FwcGVuZF9jaGFubmVsIChtLCBSTVNkQiwgcGVha2RCLCBkZWNheWRCKTsKLQotICAgICAgLyogcmVzZXQgY3VtdWxhdGl2ZSBhbmQgbm9ybWFsIHBlYWsgKi8KLSAgICAgIGZpbHRlci0+Q1NbaV0gPSAwLjA7Ci0gICAgICBmaWx0ZXItPmxhc3RfcGVha1tpXSA9IDAuMDsKLSAgICB9Ci0KLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLCBtKTsKLQotICB9Ci0gIGZpbHRlci0+bnVtX2ZyYW1lcyAtPSBmcmFtZXM7Ci0gIGZpbHRlci0+bWVzc2FnZV90cyArPSBkdXJhdGlvbjsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9sZXZlbF9zaW5rX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpIHsKLSAgICBHc3RMZXZlbCAqZmlsdGVyID0gR1NUX0xFVkVMICh0cmFucyk7Ci0KLSAgICBnc3RfbGV2ZWxfcG9zdF9tZXNzYWdlIChmaWx0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAodHJhbnMsIGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImxldmVsIiwgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfTEVWRUwpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbGV2ZWwsCi0gICAgIkF1ZGlvIGxldmVsIHBsdWdpbiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvZ3N0L2xldmVsL2dzdGxldmVsLmggYi9nc3QvbGV2ZWwvZ3N0bGV2ZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkOTI3YS4uMDAwMDAwMAotLS0gYS9nc3QvbGV2ZWwvZ3N0bGV2ZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNQotICogICAgICAgICAgIFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfTEVWRUxfSF9fCi0jZGVmaW5lIF9fR1NUX0xFVkVMX0hfXwotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLQotI2RlZmluZSBHU1RfVFlQRV9MRVZFTCBcCi0gIChnc3RfbGV2ZWxfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0xFVkVMKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTEVWRUwsR3N0TGV2ZWwpKQotI2RlZmluZSBHU1RfTEVWRUxfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTEVWRUwsR3N0TGV2ZWxDbGFzcykpCi0jZGVmaW5lIEdTVF9MRVZFTF9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLEdTVF9UWVBFX0xFVkVMLEdzdExldmVsQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTEVWRUwob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9MRVZFTCkpCi0jZGVmaW5lIEdTVF9JU19MRVZFTF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9MRVZFTCkpCi0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdExldmVsIEdzdExldmVsOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdExldmVsQ2xhc3MgR3N0TGV2ZWxDbGFzczsKLQotLyoqCi0gKiBHc3RMZXZlbDoKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0TGV2ZWwgewotICBHc3RCYXNlVHJhbnNmb3JtIGVsZW1lbnQ7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBnYm9vbGVhbiBwb3N0X21lc3NhZ2VzOyAgICAgICAvKiB3aGV0aGVyIG9yIG5vdCB0byBwb3N0IG1lc3NhZ2VzICovCi0gIGd1aW50NjQgaW50ZXJ2YWw7ICAgICAgICAgICAgIC8qIGhvdyBtYW55IG5hbm9zZWNvbmRzIGJldHdlZW4gZW1pdHMgKi8KLSAgZ2RvdWJsZSBkZWNheV9wZWFrX3R0bDsgICAgICAgLyogdGltZSB0byBsaXZlIGZvciBwZWFrIGluIG5hbm9zZWNvbmRzICovCi0gIGdkb3VibGUgZGVjYXlfcGVha19mYWxsb2ZmOyAgIC8qIGZhbGxvZmYgaW4gZEIvc2VjICovCi0KLSAgR3N0QXVkaW9JbmZvIGluZm87Ci0gIGdpbnQgbnVtX2ZyYW1lczsgICAgICAgICAgICAgIC8qIGZyYW1lIGNvdW50ICgxIHNhbXBsZSBwZXIgY2hhbm5lbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2luY2UgbGFzdCBlbWl0ICovCi0gIGdpbnQgaW50ZXJ2YWxfZnJhbWVzOyAgICAgICAgIC8qIGFmdGVyIGhvdyBtYW55IGZyYW1lIHRvIHNlbnQgYSBtZXNzYWdlICovCi0gIEdzdENsb2NrVGltZSBtZXNzYWdlX3RzOyAgICAgIC8qIHN0YXJ0dGltZSBmb3IgbmV4dCBtZXNzYWdlICovCi0KLSAgLyogcGVyLWNoYW5uZWwgYXJyYXlzIGZvciBpbnRlcm1lZGlhdGUgdmFsdWVzICovCi0gIGdkb3VibGUgKkNTOyAgICAgICAgICAgICAgICAgIC8qIG5vcm1hbGl6ZWQgQ3VtdWxhdGl2ZSBTcXVhcmUgKi8KLSAgZ2RvdWJsZSAqcGVhazsgICAgICAgICAgICAgICAgLyogbm9ybWFsaXplZCBQZWFrIHZhbHVlIG92ZXIgYnVmZmVyICovCi0gIGdkb3VibGUgKmxhc3RfcGVhazsgICAgICAgICAgIC8qIGxhc3Qgbm9ybWFsaXplZCBQZWFrIHZhbHVlIG92ZXIgaW50ZXJ2YWwgKi8KLSAgZ2RvdWJsZSAqZGVjYXlfcGVhazsgICAgICAgICAgLyogcnVubmluZyBkZWNheWluZyBub3JtYWxpemVkIFBlYWsgKi8KLSAgZ2RvdWJsZSAqZGVjYXlfcGVha19iYXNlOyAgICAgLyogdmFsdWUgb2YgbGFzdCBwZWFrIHdlIGFyZSBkZWNheWluZyBmcm9tICovCi0gIEdzdENsb2NrVGltZSAqZGVjYXlfcGVha19hZ2U7IC8qIGFnZSBvZiBsYXN0IHBlYWsgKi8KLQotICB2b2lkICgqcHJvY2VzcykoZ3BvaW50ZXIsIGd1aW50LCBndWludCwgZ2RvdWJsZSosIGdkb3VibGUqKTsKLX07Ci0KLXN0cnVjdCBfR3N0TGV2ZWxDbGFzcyB7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfbGV2ZWxfZ2V0X3R5cGUgKHZvaWQpOwotCi0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUX0xFVkVMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtIGIvZ3N0L21hdHJvc2thL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjBhODMxLi4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG1hdHJvc2thLmxhCi0KLWxpYmdzdG1hdHJvc2thX2xhX1NPVVJDRVMgPSBcCi0JZWJtbC1yZWFkLmMgXAotCWVibWwtd3JpdGUuYyBcCi0JbWF0cm9za2EuYyBcCi0JbWF0cm9za2EtZGVtdXguYyBcCi0JbWF0cm9za2EtcGFyc2UuYyBcCi0JbWF0cm9za2EtaWRzLmMgXAotCW1hdHJvc2thLW11eC5jIFwKLQltYXRyb3NrYS1yZWFkLWNvbW1vbi5jIFwKLQl3ZWJtLW11eC5jIFwKLQlsem8uYwotCi1ub2luc3RfSEVBREVSUyA9IFwKLQllYm1sLWlkcy5oIFwKLQllYm1sLXJlYWQuaCBcCi0JZWJtbC13cml0ZS5oIFwKLQltYXRyb3NrYS1kZW11eC5oIFwKLQltYXRyb3NrYS1wYXJzZS5oIFwKLQltYXRyb3NrYS1pZHMuaCBcCi0JbWF0cm9za2EtbXV4LmggXAotCW1hdHJvc2thLXJlYWQtY29tbW9uLmggXAotCXdlYm0tbXV4LmggXAotCWx6by5oCi0KLWxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi1saWJnc3RtYXRyb3NrYV9sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdHJpZmYtQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0YXVkaW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpIFwKLQkkKFpMSUJfTElCUykgXAotCSQoQloyX0xJQlMpIFwKLQkkKExJQk0pCi1saWJnc3RtYXRyb3NrYV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL01ha2VmaWxlLmluIGIvZ3N0L21hdHJvc2thL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTEzODJjLi4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMjggKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L21hdHJvc2thCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0bWF0cm9za2FfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdG1hdHJvc2thX2xhX09CSkVDVFMgPSBsaWJnc3RtYXRyb3NrYV9sYS1lYm1sLXJlYWQubG8gXAotCWxpYmdzdG1hdHJvc2thX2xhLWVibWwtd3JpdGUubG8gbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EubG8gXAotCWxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLWRlbXV4LmxvIFwKLQlsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1wYXJzZS5sbyBcCi0JbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtaWRzLmxvIFwKLQlsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1tdXgubG8gXAotCWxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXJlYWQtY29tbW9uLmxvIFwKLQlsaWJnc3RtYXRyb3NrYV9sYS13ZWJtLW11eC5sbyBsaWJnc3RtYXRyb3NrYV9sYS1sem8ubG8KLWxpYmdzdG1hdHJvc2thX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdG1hdHJvc2thX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RtYXRyb3NrYV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdG1hdHJvc2thX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0bWF0cm9za2FfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0bWF0cm9za2FfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0bWF0cm9za2FfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0bWF0cm9za2EubGEKLWxpYmdzdG1hdHJvc2thX2xhX1NPVVJDRVMgPSBcCi0JZWJtbC1yZWFkLmMgXAotCWVibWwtd3JpdGUuYyBcCi0JbWF0cm9za2EuYyBcCi0JbWF0cm9za2EtZGVtdXguYyBcCi0JbWF0cm9za2EtcGFyc2UuYyBcCi0JbWF0cm9za2EtaWRzLmMgXAotCW1hdHJvc2thLW11eC5jIFwKLQltYXRyb3NrYS1yZWFkLWNvbW1vbi5jIFwKLQl3ZWJtLW11eC5jIFwKLQlsem8uYwotCi1ub2luc3RfSEVBREVSUyA9IFwKLQllYm1sLWlkcy5oIFwKLQllYm1sLXJlYWQuaCBcCi0JZWJtbC13cml0ZS5oIFwKLQltYXRyb3NrYS1kZW11eC5oIFwKLQltYXRyb3NrYS1wYXJzZS5oIFwKLQltYXRyb3NrYS1pZHMuaCBcCi0JbWF0cm9za2EtbXV4LmggXAotCW1hdHJvc2thLXJlYWQtY29tbW9uLmggXAotCXdlYm0tbXV4LmggXAotCWx6by5oCi0KLWxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi0KLWxpYmdzdG1hdHJvc2thX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0cmlmZi1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0cGJ1dGlscy1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCSQoWkxJQl9MSUJTKSBcCi0JJChCWjJfTElCUykgXAotCSQoTElCTSkKLQotbGliZ3N0bWF0cm9za2FfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9tYXRyb3NrYS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvbWF0cm9za2EvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RtYXRyb3NrYS5sYTogJChsaWJnc3RtYXRyb3NrYV9sYV9PQkpFQ1RTKSAkKGxpYmdzdG1hdHJvc2thX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RtYXRyb3NrYV9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0bWF0cm9za2FfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdG1hdHJvc2thX2xhX09CSkVDVFMpICQobGliZ3N0bWF0cm9za2FfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1lYm1sLXJlYWQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1lYm1sLXdyaXRlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbHpvLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtZGVtdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1pZHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1tdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1wYXJzZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXJlYWQtY29tbW9uLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS13ZWJtLW11eC5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0bWF0cm9za2FfbGEtZWJtbC1yZWFkLmxvOiBlYm1sLXJlYWQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1hdHJvc2thX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtYXRyb3NrYV9sYS1lYm1sLXJlYWQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLWVibWwtcmVhZC5UcG8gLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtZWJtbC1yZWFkLmxvIGB0ZXN0IC1mICdlYm1sLXJlYWQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWJtbC1yZWFkLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLWVibWwtcmVhZC5UcG8gJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLWVibWwtcmVhZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlYm1sLXJlYWQuYycgb2JqZWN0PSdsaWJnc3RtYXRyb3NrYV9sYS1lYm1sLXJlYWQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtYXRyb3NrYV9sYS1lYm1sLXJlYWQubG8gYHRlc3QgLWYgJ2VibWwtcmVhZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlYm1sLXJlYWQuYwotCi1saWJnc3RtYXRyb3NrYV9sYS1lYm1sLXdyaXRlLmxvOiBlYm1sLXdyaXRlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bWF0cm9za2FfbGEtZWJtbC13cml0ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtZWJtbC13cml0ZS5UcG8gLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtZWJtbC13cml0ZS5sbyBgdGVzdCAtZiAnZWJtbC13cml0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlYm1sLXdyaXRlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLWVibWwtd3JpdGUuVHBvICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1lYm1sLXdyaXRlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VibWwtd3JpdGUuYycgb2JqZWN0PSdsaWJnc3RtYXRyb3NrYV9sYS1lYm1sLXdyaXRlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtZWJtbC13cml0ZS5sbyBgdGVzdCAtZiAnZWJtbC13cml0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlYm1sLXdyaXRlLmMKLQotbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EubG86IG1hdHJvc2thLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLlRwbyAtYyAtbyBsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS5sbyBgdGVzdCAtZiAnbWF0cm9za2EuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWF0cm9za2EuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EuVHBvICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtYXRyb3NrYS5jJyBvYmplY3Q9J2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EubG8gYHRlc3QgLWYgJ21hdHJvc2thLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hdHJvc2thLmMKLQotbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtZGVtdXgubG86IG1hdHJvc2thLWRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtZGVtdXgubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLWRlbXV4LlRwbyAtYyAtbyBsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1kZW11eC5sbyBgdGVzdCAtZiAnbWF0cm9za2EtZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWF0cm9za2EtZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtZGVtdXguVHBvICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1kZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtYXRyb3NrYS1kZW11eC5jJyBvYmplY3Q9J2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLWRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtZGVtdXgubG8gYHRlc3QgLWYgJ21hdHJvc2thLWRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hdHJvc2thLWRlbXV4LmMKLQotbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtcGFyc2UubG86IG1hdHJvc2thLXBhcnNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtcGFyc2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXBhcnNlLlRwbyAtYyAtbyBsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1wYXJzZS5sbyBgdGVzdCAtZiAnbWF0cm9za2EtcGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWF0cm9za2EtcGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtcGFyc2UuVHBvICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1wYXJzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtYXRyb3NrYS1wYXJzZS5jJyBvYmplY3Q9J2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXBhcnNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtcGFyc2UubG8gYHRlc3QgLWYgJ21hdHJvc2thLXBhcnNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hdHJvc2thLXBhcnNlLmMKLQotbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtaWRzLmxvOiBtYXRyb3NrYS1pZHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1hdHJvc2thX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1pZHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLWlkcy5UcG8gLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtaWRzLmxvIGB0ZXN0IC1mICdtYXRyb3NrYS1pZHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbWF0cm9za2EtaWRzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLWlkcy5UcG8gJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLWlkcy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtYXRyb3NrYS1pZHMuYycgb2JqZWN0PSdsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1pZHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1pZHMubG8gYHRlc3QgLWYgJ21hdHJvc2thLWlkcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYXRyb3NrYS1pZHMuYwotCi1saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1tdXgubG86IG1hdHJvc2thLW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLW11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtbXV4LlRwbyAtYyAtbyBsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1tdXgubG8gYHRlc3QgLWYgJ21hdHJvc2thLW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYXRyb3NrYS1tdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtbXV4LlRwbyAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtbXV4LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J21hdHJvc2thLW11eC5jJyBvYmplY3Q9J2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLW11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1hdHJvc2thX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLW11eC5sbyBgdGVzdCAtZiAnbWF0cm9za2EtbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hdHJvc2thLW11eC5jCi0KLWxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXJlYWQtY29tbW9uLmxvOiBtYXRyb3NrYS1yZWFkLWNvbW1vbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXJlYWQtY29tbW9uLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1yZWFkLWNvbW1vbi5UcG8gLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtcmVhZC1jb21tb24ubG8gYHRlc3QgLWYgJ21hdHJvc2thLXJlYWQtY29tbW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1hdHJvc2thLXJlYWQtY29tbW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXJlYWQtY29tbW9uLlRwbyAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtbWF0cm9za2EtcmVhZC1jb21tb24uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbWF0cm9za2EtcmVhZC1jb21tb24uYycgb2JqZWN0PSdsaWJnc3RtYXRyb3NrYV9sYS1tYXRyb3NrYS1yZWFkLWNvbW1vbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1hdHJvc2thX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG1hdHJvc2thX2xhLW1hdHJvc2thLXJlYWQtY29tbW9uLmxvIGB0ZXN0IC1mICdtYXRyb3NrYS1yZWFkLWNvbW1vbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtYXRyb3NrYS1yZWFkLWNvbW1vbi5jCi0KLWxpYmdzdG1hdHJvc2thX2xhLXdlYm0tbXV4LmxvOiB3ZWJtLW11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG1hdHJvc2thX2xhLXdlYm0tbXV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS13ZWJtLW11eC5UcG8gLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtd2VibS1tdXgubG8gYHRlc3QgLWYgJ3dlYm0tbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHdlYm0tbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG1hdHJvc2thX2xhLXdlYm0tbXV4LlRwbyAkKERFUERJUikvbGliZ3N0bWF0cm9za2FfbGEtd2VibS1tdXguUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nd2VibS1tdXguYycgb2JqZWN0PSdsaWJnc3RtYXRyb3NrYV9sYS13ZWJtLW11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1hdHJvc2thX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1hdHJvc2thX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG1hdHJvc2thX2xhLXdlYm0tbXV4LmxvIGB0ZXN0IC1mICd3ZWJtLW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B3ZWJtLW11eC5jCi0KLWxpYmdzdG1hdHJvc2thX2xhLWx6by5sbzogbHpvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtYXRyb3NrYV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtYXRyb3NrYV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bWF0cm9za2FfbGEtbHpvLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1sem8uVHBvIC1jIC1vIGxpYmdzdG1hdHJvc2thX2xhLWx6by5sbyBgdGVzdCAtZiAnbHpvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGx6by5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1sem8uVHBvICQoREVQRElSKS9saWJnc3RtYXRyb3NrYV9sYS1sem8uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbHpvLmMnIG9iamVjdD0nbGliZ3N0bWF0cm9za2FfbGEtbHpvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bWF0cm9za2FfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bWF0cm9za2FfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bWF0cm9za2FfbGEtbHpvLmxvIGB0ZXN0IC1mICdsem8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgbHpvLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL2VibWwtaWRzLmggYi9nc3QvbWF0cm9za2EvZWJtbC1pZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyZTZjYi4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvZWJtbC1pZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIEdTdHJlYW1lciBFQk1MIEkvTwotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIGVibWwtaWRzLmg6IGRlZmluaXRpb24gb2YgRUJNTCBkYXRhIElEcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfRUJNTF9JRFNfSF9fCi0jZGVmaW5lIF9fR1NUX0VCTUxfSURTX0hfXwotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qIEVCTUwgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgR1NUX0VCTUxfVkVSU0lPTiAxCi0KLS8qIFVua25vd24gc2l6ZSAoYWxsIGJpdHMgc2V0IHRvIDEpICovCi0jZGVmaW5lIEdTVF9FQk1MX1NJWkVfVU5LTk9XTiAgICAgICAgICBHX0dJTlQ2NF9DT05TVEFOVCgweDAwZmZmZmZmZmZmZmZmZmYpCi0KLS8qIHRvcC1sZXZlbCBtYXN0ZXItSURzICovCi0jZGVmaW5lIEdTVF9FQk1MX0lEX0hFQURFUiAgICAgICAgICAgICAweDFBNDVERkEzCi0KLS8qIElEcyBpbiB0aGUgSEVBREVSIG1hc3RlciAqLwotI2RlZmluZSBHU1RfRUJNTF9JRF9FQk1MVkVSU0lPTiAgICAgICAgMHg0Mjg2Ci0jZGVmaW5lIEdTVF9FQk1MX0lEX0VCTUxSRUFEVkVSU0lPTiAgICAweDQyRjcKLSNkZWZpbmUgR1NUX0VCTUxfSURfRUJNTE1BWElETEVOR1RIICAgIDB4NDJGMgotI2RlZmluZSBHU1RfRUJNTF9JRF9FQk1MTUFYU0laRUxFTkdUSCAgMHg0MkYzCi0jZGVmaW5lIEdTVF9FQk1MX0lEX0RPQ1RZUEUgICAgICAgICAgICAweDQyODIKLSNkZWZpbmUgR1NUX0VCTUxfSURfRE9DVFlQRVZFUlNJT04gICAgIDB4NDI4NwotI2RlZmluZSBHU1RfRUJNTF9JRF9ET0NUWVBFUkVBRFZFUlNJT04gMHg0Mjg1Ci0KLS8qIGdlbmVyYWwgRUJNTCB0eXBlcyAqLwotI2RlZmluZSBHU1RfRUJNTF9JRF9WT0lEICAgICAgICAgICAgICAgMHhFQwotI2RlZmluZSBHU1RfRUJNTF9JRF9DUkMzMiAgICAgICAgICAgICAgMHhCRgotCi0vKiBFYm1sRGF0ZSBvZmZzZXQgZnJvbSB0aGUgdW5peCBlcG9jaCBpbiBzZWNvbmRzLCAyMDAxLzAxLzAxIDAwOjAwOjAwIFVUQyAqLwotI2RlZmluZSBHU1RfRUJNTF9EQVRFX09GRlNFVCAgICAgICAgICAgOTc4MzA3MjAwCi0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9FQk1MX0lEU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYyBiL2dzdC9tYXRyb3NrYS9lYm1sLXJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmNzA4Ni4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvZWJtbC1yZWFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjkgKzAsMCBAQAotLyogR1N0cmVhbWVyIEVCTUwgSS9PCi0gKiAoYykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogZWJtbC1yZWFkLmM6IHJlYWQgRUJNTCBkYXRhIGZyb20gZmlsZS9zdHJlYW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImVibWwtcmVhZC5oIgotI2luY2x1ZGUgImVibWwtaWRzLmgiCi0KLSNpbmNsdWRlIDxnc3QvbWF0aC1jb21wYXQuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZIChlYm1scmVhZF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBlYm1scmVhZF9kZWJ1ZwotCi0vKiBQZWVrcyBmb2xsb3dpbmcgZWxlbWVudCBpZCBhbmQgZWxlbWVudCBsZW5ndGggaW4gZGF0YXN0cmVhbSBwcm92aWRlZAotICogYnkgQHBlZWsgd2l0aCBAY3R4IGFzIHVzZXIgZGF0YS4KLSAqIFJldHVybnMgR1NUX0ZMT1dfRU9TIGlmIG5vdCBlbm91Z2ggZGF0YSB0byByZWFkIGlkIGFuZCBsZW5ndGguCi0gKiBPdGhlcndpc2UsIEBuZWVkZWQgcHJvdmlkZXMgdGhlIHByZWZpeCBsZW5ndGggKGlkICsgbGVuZ3RoKSwgYW5kCi0gKiBAbGVuZ3RoIHByb3ZpZGVzIGVsZW1lbnQgbGVuZ3RoLgotICoKLSAqIEBvYmplY3QgYW5kIEBvZmZzZXQgYXJlIHByb3ZpZGVkIGZvciBpbmZvcm1hdGl2ZSBtZXNzYWdpbmcvZGVidWcgcHVycG9zZXMuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX3BlZWtfaWRfbGVuZ3RoIChndWludDMyICogX2lkLCBndWludDY0ICogX2xlbmd0aCwgZ3VpbnQgKiBfbmVlZGVkLAotICAgIEdzdFBlZWtEYXRhIHBlZWssIGdwb2ludGVyICogY3R4LCBHc3RFbGVtZW50ICogZWwsIGd1aW50NjQgb2Zmc2V0KQotewotICBndWludCBuZWVkZWQ7Ci0gIGNvbnN0IGd1aW50OCAqYnVmOwotICBnaW50IGxlbl9tYXNrID0gMHg4MCwgcmVhZCA9IDEsIG4gPSAxLCBudW1fZmZzID0gMDsKLSAgZ3VpbnQ2NCB0b3RhbDsKLSAgZ3VpbnQ4IGI7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfaWQgIT0gTlVMTCwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoX2xlbmd0aCAhPSBOVUxMLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfbmVlZGVkICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICAvKiB3ZWxsIC4uLiAqLwotICAqX2lkID0gKGd1aW50MzIpIEdTVF9FQk1MX1NJWkVfVU5LTk9XTjsKLSAgKl9sZW5ndGggPSBHU1RfRUJNTF9TSVpFX1VOS05PV047Ci0KLSAgLyogcmVhZCBlbGVtZW50IGlkICovCi0gIG5lZWRlZCA9IDI7Ci0gIHJldCA9IHBlZWsgKGN0eCwgbmVlZGVkLCAmYnVmKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIHBlZWtfZXJyb3I7Ci0gIGIgPSBHU1RfUkVBRF9VSU5UOCAoYnVmKTsKLSAgdG90YWwgPSAoZ3VpbnQ2NCkgYjsKLSAgd2hpbGUgKHJlYWQgPD0gNCAmJiAhKHRvdGFsICYgbGVuX21hc2spKSB7Ci0gICAgcmVhZCsrOwotICAgIGxlbl9tYXNrID4+PSAxOwotICB9Ci0gIGlmIChHX1VOTElLRUxZIChyZWFkID4gNCkpCi0gICAgZ290byBpbnZhbGlkX2lkOwotCi0gIC8qIG5lZWQgaWQgYW5kIGF0IGxlYXN0IHNvbWV0aGluZyBmb3Igc3Vic2VxdWVudCBsZW5ndGggKi8KLSAgbmVlZGVkID0gcmVhZCArIDE7Ci0gIHJldCA9IHBlZWsgKGN0eCwgbmVlZGVkLCAmYnVmKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIHBlZWtfZXJyb3I7Ci0gIHdoaWxlIChuIDwgcmVhZCkgewotICAgIGIgPSBHU1RfUkVBRF9VSU5UOCAoYnVmICsgbik7Ci0gICAgdG90YWwgPSAodG90YWwgPDwgOCkgfCBiOwotICAgICsrbjsKLSAgfQotICAqX2lkID0gKGd1aW50MzIpIHRvdGFsOwotCi0gIC8qIHJlYWQgZWxlbWVudCBsZW5ndGggKi8KLSAgYiA9IEdTVF9SRUFEX1VJTlQ4IChidWYgKyBuKTsKLSAgdG90YWwgPSAoZ3VpbnQ2NCkgYjsKLSAgbGVuX21hc2sgPSAweDgwOwotICByZWFkID0gMTsKLSAgd2hpbGUgKHJlYWQgPD0gOCAmJiAhKHRvdGFsICYgbGVuX21hc2spKSB7Ci0gICAgcmVhZCsrOwotICAgIGxlbl9tYXNrID4+PSAxOwotICB9Ci0gIGlmIChHX1VOTElLRUxZIChyZWFkID4gOCkpCi0gICAgZ290byBpbnZhbGlkX2xlbmd0aDsKLSAgaWYgKCh0b3RhbCAmPSAobGVuX21hc2sgLSAxKSkgPT0gbGVuX21hc2sgLSAxKQotICAgIG51bV9mZnMrKzsKLQotICBuZWVkZWQgKz0gcmVhZCAtIDE7Ci0gIHJldCA9IHBlZWsgKGN0eCwgbmVlZGVkLCAmYnVmKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIHBlZWtfZXJyb3I7Ci0gIGJ1ZiArPSAobmVlZGVkIC0gcmVhZCk7Ci0gIG4gPSAxOwotICB3aGlsZSAobiA8IHJlYWQpIHsKLSAgICBndWludDggYiA9IEdTVF9SRUFEX1VJTlQ4IChidWYgKyBuKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChiID09IDB4ZmYpKQotICAgICAgbnVtX2ZmcysrOwotICAgIHRvdGFsID0gKHRvdGFsIDw8IDgpIHwgYjsKLSAgICArK247Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAocmVhZCA9PSBudW1fZmZzKSkKLSAgICAqX2xlbmd0aCA9IEdfTUFYVUlOVDY0OwotICBlbHNlCi0gICAgKl9sZW5ndGggPSB0b3RhbDsKLQotICAqX25lZWRlZCA9IG5lZWRlZDsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1wZWVrX2Vycm9yOgotICB7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19GTFVTSElORykKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWwsICJwZWVrIGZhaWxlZCwgcmV0ID0gJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgZWxzZQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZWwsICJwZWVrIGZhaWxlZCwgcmV0ID0gJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgKl9uZWVkZWQgPSBuZWVkZWQ7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotaW52YWxpZF9pZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGVsLAotICAgICAgICAiSW52YWxpZCBFQk1MIElEIHNpemUgdGFnICgweCV4KSBhdCBwb3NpdGlvbiAlIiBHX0dVSU5UNjRfRk9STUFUICIgKDB4JSIKLSAgICAgICAgR19HSU5UNjRfTU9ESUZJRVIgIngpIiwgKGd1aW50KSBiLCBvZmZzZXQsIG9mZnNldCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1pbnZhbGlkX2xlbmd0aDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGVsLAotICAgICAgICAiSW52YWxpZCBFQk1MIGxlbmd0aCBzaXplIHRhZyAoMHgleCkgYXQgcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiICgweCUiIEdfR0lOVDY0X01PRElGSUVSICJ4KSIsIChndWludCkgYiwgb2Zmc2V0LCBvZmZzZXQpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi0vKiBzZXR1cCBmb3IgcGFyc2luZyBAYnVmIGF0IHBvc2l0aW9uIEBvZmZzZXQgb24gYmVoYWxmIG9mIEBlbC4KLSAqIFRha2VzIG93bmVyc2hpcCBvZiBAYnVmLiAqLwotdm9pZAotZ3N0X2VibWxfcmVhZF9pbml0IChHc3RFYm1sUmVhZCAqIGVibWwsIEdzdEVsZW1lbnQgKiBlbCwgR3N0QnVmZmVyICogYnVmLAotICAgIGd1aW50NjQgb2Zmc2V0KQotewotICBHc3RFYm1sTWFzdGVyIG07Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZWwpOwotICBnX3JldHVybl9pZl9mYWlsIChidWYpOwotCi0gIGVibWwtPmVsID0gZWw7Ci0gIGVibWwtPm9mZnNldCA9IG9mZnNldDsKLSAgZWJtbC0+YnVmID0gYnVmOwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmZWJtbC0+bWFwLCBHU1RfTUFQX1JFQUQpOwotICBlYm1sLT5yZWFkZXJzID0gZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChHc3RFYm1sTWFzdGVyKSwgMTApOwotICBtLm9mZnNldCA9IGVibWwtPm9mZnNldDsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZtLmJyLCBlYm1sLT5tYXAuZGF0YSwgZWJtbC0+bWFwLnNpemUpOwotICBnX2FycmF5X2FwcGVuZF92YWwgKGVibWwtPnJlYWRlcnMsIG0pOwotfQotCi12b2lkCi1nc3RfZWJtbF9yZWFkX2NsZWFyIChHc3RFYm1sUmVhZCAqIGVibWwpCi17Ci0gIGlmIChlYm1sLT5yZWFkZXJzKQotICAgIGdfYXJyYXlfZnJlZSAoZWJtbC0+cmVhZGVycywgVFJVRSk7Ci0gIGVibWwtPnJlYWRlcnMgPSBOVUxMOwotICBpZiAoZWJtbC0+YnVmKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoZWJtbC0+YnVmLCAmZWJtbC0+bWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChlYm1sLT5idWYpOwotICB9Ci0gIGVibWwtPmJ1ZiA9IE5VTEw7Ci0gIGVibWwtPmVsID0gTlVMTDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX3JlYWRfcGVlayAoR3N0Qnl0ZVJlYWRlciAqIGJyLCBndWludCBwZWVrLCBjb25zdCBndWludDggKiogZGF0YSkKLXsKLSAgaWYgKEdfTElLRUxZIChnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhIChiciwgcGVlaywgZGF0YSkpKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgZWxzZQotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZWJtbF9wZWVrX2lkX2Z1bGwgKEdzdEVibWxSZWFkICogZWJtbCwgZ3VpbnQzMiAqIGlkLCBndWludDY0ICogbGVuZ3RoLAotICAgIGd1aW50ICogcHJlZml4KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICByZXQgPSBnc3RfZWJtbF9wZWVrX2lkX2xlbmd0aCAoaWQsIGxlbmd0aCwgcHJlZml4LAotICAgICAgKEdzdFBlZWtEYXRhKSBnc3RfZWJtbF9yZWFkX3BlZWssIChncG9pbnRlcikgZ3N0X2VibWxfcmVhZF9iciAoZWJtbCksCi0gICAgICBlYm1sLT5lbCwgZ3N0X2VibWxfcmVhZF9nZXRfcG9zIChlYm1sKSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAoZWJtbC0+ZWwsICJpZCAweCV4IGF0IG9mZnNldCAweCUiIEdfR0lOVDY0X01PRElGSUVSICJ4IgotICAgICAgIiBvZiBsZW5ndGggJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBwcmVmaXggJWQiLCAqaWQsCi0gICAgICBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpLCAqbGVuZ3RoLCAqcHJlZml4KTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgaWYgKGVibWxyZWFkX2RlYnVnLT50aHJlc2hvbGQgPj0gR1NUX0xFVkVMX0xPRykgewotICAgIGNvbnN0IGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gICAgR3N0Qnl0ZVJlYWRlciAqYnIgPSBnc3RfZWJtbF9yZWFkX2JyIChlYm1sKTsKLSAgICBndWludCBzaXplID0gZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKGJyKTsKLQotICAgIGlmIChnc3RfYnl0ZV9yZWFkZXJfcGVla19kYXRhIChiciwgc2l6ZSwgJmRhdGEpKSB7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChlYm1sLT5lbCwgImN1cnJlbnQgYnIgJXA7IHJlbWFpbmluZyAlZCIsIGJyLCBzaXplKTsKLSAgICAgIGlmIChkYXRhKQotICAgICAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKGVibWwtPmVsLCAiZWxlbWVudCIsIGRhdGEsIE1JTiAoc2l6ZSwgKmxlbmd0aCkpOwotICAgIH0KLSAgfQotI2VuZGlmCi0KLSAgcmV0dXJuIHJldDsKLX0KLQotR3N0Rmxvd1JldHVybgotZ3N0X2VibWxfcGVla19pZCAoR3N0RWJtbFJlYWQgKiBlYm1sLCBndWludDMyICogaWQpCi17Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludCBuZWVkZWQ7Ci0KLSAgcmV0dXJuIGdzdF9lYm1sX3BlZWtfaWRfZnVsbCAoZWJtbCwgaWQsICZsZW5ndGgsICZuZWVkZWQpOwotfQotCi0vKgotICogUmVhZCB0aGUgbmV4dCBlbGVtZW50LCB0aGUgY29udGVudHMgYXJlIHN1cHBvc2VkIHRvIGJlIHN1Yi1lbGVtZW50cyB3aGljaAotICogY2FuIGJlIHJlYWQgc2VwYXJhdGVseS4gIEEgbmV3IGJ5dGVyZWFkZXIgaXMgc2V0dXAgZm9yIGRvaW5nIHNvLgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfZWJtbF9yZWFkX21hc3RlciAoR3N0RWJtbFJlYWQgKiBlYm1sLCBndWludDMyICogaWQpCi17Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludCBwcmVmaXg7Ci0gIGNvbnN0IGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RFYm1sTWFzdGVyIG07Ci0KLSAgcmV0ID0gZ3N0X2VibWxfcGVla19pZF9mdWxsIChlYm1sLCBpZCwgJmxlbmd0aCwgJnByZWZpeCk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICAvKiB3ZSBqdXN0IGF0IGxlYXN0IHBlZWtlZCB0aGUgaWQgKi8KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoZ3N0X2VibWxfcmVhZF9iciAoZWJtbCksIHByZWZpeCkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOyAgICAgIC8qIEZJWE1FOiBkbyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgKi8KLQotICBtLm9mZnNldCA9IGdzdF9lYm1sX3JlYWRfZ2V0X3BvcyAoZWJtbCk7Ci0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX2dldF9kYXRhIChnc3RfZWJtbF9yZWFkX2JyIChlYm1sKSwgbGVuZ3RoLCAmZGF0YSkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX1BBUlNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChlYm1sLT5lbCwgInB1c2hpbmcgbGV2ZWwgJWQgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBlYm1sLT5yZWFkZXJzLT5sZW4sIG0ub2Zmc2V0KTsKLSAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZtLmJyLCBkYXRhLCBsZW5ndGgpOwotICBnX2FycmF5X2FwcGVuZF92YWwgKGVibWwtPnJlYWRlcnMsIG0pOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogZXhwbGljaXRseSBwb3AgYSBieXRlcmVhZGVyIGZyb20gc3RhY2suICBVc3VhbGx5IGludm9rZWQgYXV0b21hZ2ljYWxseS4gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX3JlYWRfcG9wX21hc3RlciAoR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZWJtbC0+cmVhZGVycywgR1NUX0ZMT1dfRVJST1IpOwotCi0gIC8qIG5ldmVyIHJlbW92ZSBpbml0aWFsIGJ5dGVyZWFkZXIgKi8KLSAgaWYgKGVibWwtPnJlYWRlcnMtPmxlbiA+IDEpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoZWJtbC0+ZWwsICJwb3BwaW5nIGxldmVsICVkIiwgZWJtbC0+cmVhZGVycy0+bGVuIC0gMSk7Ci0gICAgZ19hcnJheV9yZW1vdmVfaW5kZXggKGVibWwtPnJlYWRlcnMsIGVibWwtPnJlYWRlcnMtPmxlbiAtIDEpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi0vKgotICogU2tpcCB0aGUgbmV4dCBlbGVtZW50LgotICovCi0KLUdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX3JlYWRfc2tpcCAoR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBndWludDY0IGxlbmd0aDsKLSAgZ3VpbnQzMiBpZDsKLSAgZ3VpbnQgcHJlZml4OwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICByZXQgPSBnc3RfZWJtbF9wZWVrX2lkX2Z1bGwgKGVibWwsICZpZCwgJmxlbmd0aCwgJnByZWZpeCk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9za2lwIChnc3RfZWJtbF9yZWFkX2JyIChlYm1sKSwgbGVuZ3RoICsgcHJlZml4KSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfUEFSU0U7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIEdzdEJ1ZmZlciAoYmluYXJ5KS4KLSAqLwotCi1Hc3RGbG93UmV0dXJuCi1nc3RfZWJtbF9yZWFkX2J1ZmZlciAoR3N0RWJtbFJlYWQgKiBlYm1sLCBndWludDMyICogaWQsIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludCBwcmVmaXg7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHJldCA9IGdzdF9lYm1sX3BlZWtfaWRfZnVsbCAoZWJtbCwgaWQsICZsZW5ndGgsICZwcmVmaXgpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgLyogd2UganVzdCBhdCBsZWFzdCBwZWVrZWQgdGhlIGlkICovCi0gIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKGdzdF9lYm1sX3JlYWRfYnIgKGVibWwpLCBwcmVmaXgpKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsgICAgICAvKiBGSVhNRTogZG8gcHJvcGVyIGVycm9yIGhhbmRsaW5nICovCi0KLSAgaWYgKEdfTElLRUxZIChsZW5ndGggPiAwKSkgewotICAgIGd1aW50IG9mZnNldDsKLQotICAgIG9mZnNldCA9IGdzdF9lYm1sX3JlYWRfZ2V0X3BvcyAoZWJtbCkgLSBlYm1sLT5vZmZzZXQ7Ci0gICAgaWYgKEdfTElLRUxZIChnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoZ3N0X2VibWxfcmVhZF9iciAoZWJtbCksIGxlbmd0aCkpKSB7Ci0gICAgICAqYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoZWJtbC0+YnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLAotICAgICAgICAgIG9mZnNldCwgbGVuZ3RoKTsKLSAgICB9IGVsc2UgewotICAgICAgKmJ1ZiA9IE5VTEw7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfUEFSU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgICpidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZWFkIHRoZSBuZXh0IGVsZW1lbnQsIHJldHVybiBhIHBvaW50ZXIgdG8gaXQgYW5kIGl0cyBzaXplLgotICovCi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZWJtbF9yZWFkX2J5dGVzIChHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50MzIgKiBpZCwgY29uc3QgZ3VpbnQ4ICoqIGRhdGEsCi0gICAgZ3VpbnQgKiBzaXplKQotewotICBndWludDY0IGxlbmd0aDsKLSAgZ3VpbnQgcHJlZml4OwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICAqc2l6ZSA9IDA7Ci0KLSAgcmV0ID0gZ3N0X2VibWxfcGVla19pZF9mdWxsIChlYm1sLCBpZCwgJmxlbmd0aCwgJnByZWZpeCk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICAvKiB3ZSBqdXN0IGF0IGxlYXN0IHBlZWtlZCB0aGUgaWQgKi8KLSAgaWYgKCFnc3RfYnl0ZV9yZWFkZXJfc2tpcCAoZ3N0X2VibWxfcmVhZF9iciAoZWJtbCksIHByZWZpeCkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOyAgICAgIC8qIEZJWE1FOiBkbyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgKi8KLQotICAqZGF0YSA9IE5VTEw7Ci0gIGlmIChHX0xJS0VMWSAobGVuZ3RoID4gMCkpIHsKLSAgICBpZiAoIWdzdF9ieXRlX3JlYWRlcl9nZXRfZGF0YSAoZ3N0X2VibWxfcmVhZF9iciAoZWJtbCksIGxlbmd0aCwgZGF0YSkpCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfUEFSU0U7Ci0gIH0KLQotICAqc2l6ZSA9IGxlbmd0aDsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKgotICogUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGFuIHVuc2lnbmVkIGludC4KLSAqLwotCi1Hc3RGbG93UmV0dXJuCi1nc3RfZWJtbF9yZWFkX3VpbnQgKEdzdEVibWxSZWFkICogZWJtbCwgZ3VpbnQzMiAqIGlkLCBndWludDY0ICogbnVtKQotewotICBjb25zdCBndWludDggKmRhdGE7Ci0gIGd1aW50IHNpemU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHJldCA9IGdzdF9lYm1sX3JlYWRfYnl0ZXMgKGVibWwsIGlkLCAmZGF0YSwgJnNpemUpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgaWYgKHNpemUgPiA4KSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZWJtbC0+ZWwsCi0gICAgICAgICJJbnZhbGlkIGludGVnZXIgZWxlbWVudCBzaXplICVkIGF0IHBvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoMHglIgotICAgICAgICBHX0dJTlQ2NF9NT0RJRklFUiAieCkiLCBzaXplLCBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpIC0gc2l6ZSwKLSAgICAgICAgZ3N0X2VibWxfcmVhZF9nZXRfcG9zIChlYm1sKSAtIHNpemUpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGlmIChzaXplID09IDApIHsKLSAgICAqbnVtID0gMDsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgKm51bSA9IDA7Ci0gIHdoaWxlIChzaXplID4gMCkgewotICAgICpudW0gPSAoKm51bSA8PCA4KSB8ICpkYXRhOwotICAgIHNpemUtLTsKLSAgICBkYXRhKys7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKgotICogUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgc2lnbmVkIGludC4KLSAqLwotCi1Hc3RGbG93UmV0dXJuCi1nc3RfZWJtbF9yZWFkX3NpbnQgKEdzdEVibWxSZWFkICogZWJtbCwgZ3VpbnQzMiAqIGlkLCBnaW50NjQgKiBudW0pCi17Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLSAgZ2Jvb2xlYW4gbmVnYXRpdmUgPSAwOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICByZXQgPSBnc3RfZWJtbF9yZWFkX2J5dGVzIChlYm1sLCBpZCwgJmRhdGEsICZzaXplKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICByZXR1cm4gcmV0OwotCi0gIGlmIChzaXplID4gOCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGVibWwtPmVsLAotICAgICAgICAiSW52YWxpZCBpbnRlZ2VyIGVsZW1lbnQgc2l6ZSAlZCBhdCBwb3NpdGlvbiAlIiBHX0dVSU5UNjRfRk9STUFUICIgKDB4JSIKLSAgICAgICAgR19HSU5UNjRfTU9ESUZJRVIgIngpIiwgc2l6ZSwgZ3N0X2VibWxfcmVhZF9nZXRfcG9zIChlYm1sKSAtIHNpemUsCi0gICAgICAgIGdzdF9lYm1sX3JlYWRfZ2V0X3BvcyAoZWJtbCkgLSBzaXplKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgKm51bSA9IDA7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gICpudW0gPSAwOwotICBpZiAoKmRhdGEgJiAweDgwKSB7Ci0gICAgbmVnYXRpdmUgPSAxOwotICAgICpudW0gPSAqZGF0YSAmIH4weDgwOwotICAgIHNpemUtLTsKLSAgICBkYXRhKys7Ci0gIH0KLQotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICAqbnVtID0gKCpudW0gPDwgOCkgfCAqZGF0YTsKLSAgICBzaXplLS07Ci0gICAgZGF0YSsrOwotICB9Ci0KLSAgLyogbWFrZSBzaWduZWQgKi8KLSAgaWYgKG5lZ2F0aXZlKSB7Ci0gICAgKm51bSA9IDAgLSAqbnVtOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogQ29udmVydCA4MCBiaXQgZXh0ZW5kZWQgcHJlY2lzaW9uIGZsb2F0IGluIGJpZyBlbmRpYW4gZm9ybWF0IHRvIGRvdWJsZS4KLSAqIENvZGUgdGFrZW4gZnJvbSBsaWJhdnV0aWwvaW50ZmxvYXRfcmVhZHdyaXRlLmMgZnJvbSBmZm1wZWcsCi0gKiBsaWNlbnNlZCB1bmRlciBMR1BMICovCi0KLXN0cnVjdCBfZXh0X2Zsb2F0Ci17Ci0gIGd1aW50OCBleHBvbmVudFsyXTsKLSAgZ3VpbnQ4IG1hbnRpc3NhWzhdOwotfTsKLQotc3RhdGljIGdkb3VibGUKLV9leHQyZGJsIChjb25zdCBndWludDggKiBkYXRhKQotewotICBzdHJ1Y3QgX2V4dF9mbG9hdCBleHQ7Ci0gIGd1aW50NjQgbSA9IDA7Ci0gIGdpbnQgZSwgaTsKLQotICBtZW1jcHkgKCZleHQuZXhwb25lbnQsIGRhdGEsIDIpOwotICBtZW1jcHkgKCZleHQubWFudGlzc2EsIGRhdGEgKyAyLCA4KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotICAgIG0gPSAobSA8PCA4KSArIGV4dC5tYW50aXNzYVtpXTsKLSAgZSA9ICgoKGdpbnQpIGV4dC5leHBvbmVudFswXSAmIDB4N2YpIDw8IDgpIHwgZXh0LmV4cG9uZW50WzFdOwotICBpZiAoZSA9PSAweDdmZmYgJiYgbSkKLSAgICByZXR1cm4gTkFOOwotICBlIC09IDE2MzgzICsgNjM7ICAgICAgICAgICAgICAvKiBJbiBJRUVFIDgwIGJpdHMsIHRoZSB3aG9sZSAoaS5lLiAxLnh4eHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1hbnRpc3NhIGJpdCBpcyB3cml0dGVuIGFzIG9wcG9zZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpbmdsZSBhbmQgZG91YmxlIHByZWNpc2lvbiBmb3JtYXRzICovCi0gIGlmIChleHQuZXhwb25lbnRbMF0gJiAweDgwKQotICAgIG0gPSAtbTsKLSAgcmV0dXJuIGxkZXhwIChtLCBlKTsKLX0KLQotLyoKLSAqIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhIGZsb2F0LgotICovCi0KLUdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX3JlYWRfZmxvYXQgKEdzdEVibWxSZWFkICogZWJtbCwgZ3VpbnQzMiAqIGlkLCBnZG91YmxlICogbnVtKQotewotICBjb25zdCBndWludDggKmRhdGE7Ci0gIGd1aW50IHNpemU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHJldCA9IGdzdF9lYm1sX3JlYWRfYnl0ZXMgKGVibWwsIGlkLCAmZGF0YSwgJnNpemUpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgaWYgKHNpemUgIT0gMCAmJiBzaXplICE9IDQgJiYgc2l6ZSAhPSA4ICYmIHNpemUgIT0gMTApIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChlYm1sLT5lbCwKLSAgICAgICAgIkludmFsaWQgZmxvYXQgZWxlbWVudCBzaXplICVkIGF0IHBvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAoMHglIgotICAgICAgICBHX0dJTlQ2NF9NT0RJRklFUiAieCkiLCBzaXplLCBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpIC0gc2l6ZSwKLSAgICAgICAgZ3N0X2VibWxfcmVhZF9nZXRfcG9zIChlYm1sKSAtIHNpemUpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGlmIChzaXplID09IDQpIHsKLSAgICBnZmxvYXQgZjsKLQotICAgIG1lbWNweSAoJmYsIGRhdGEsIDQpOwotICAgIGYgPSBHRkxPQVRfRlJPTV9CRSAoZik7Ci0KLSAgICAqbnVtID0gZjsKLSAgfSBlbHNlIGlmIChzaXplID09IDgpIHsKLSAgICBnZG91YmxlIGQ7Ci0KLSAgICBtZW1jcHkgKCZkLCBkYXRhLCA4KTsKLSAgICBkID0gR0RPVUJMRV9GUk9NX0JFIChkKTsKLQotICAgICpudW0gPSBkOwotICB9IGVsc2UgaWYgKHNpemUgPT0gMTApIHsKLSAgICAqbnVtID0gX2V4dDJkYmwgKGRhdGEpOwotICB9IGVsc2UgewotICAgIC8qIHNpemUgPT0gMCBtZWFucyBhIHZhbHVlIG9mIDAuMCAqLwotICAgICpudW0gPSAwLjA7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKgotICogUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgQyBzdHJpbmcuCi0gKi8KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX3JlYWRfc3RyaW5nIChHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50MzIgKiBpZCwgZ2NoYXIgKiogc3RyKQotewotICBjb25zdCBndWludDggKmRhdGE7Ci0gIGd1aW50IHNpemU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHJldCA9IGdzdF9lYm1sX3JlYWRfYnl0ZXMgKGVibWwsIGlkLCAmZGF0YSwgJnNpemUpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgKnN0ciA9IGdfbWFsbG9jIChzaXplICsgMSk7Ci0gIG1lbWNweSAoKnN0ciwgZGF0YSwgc2l6ZSk7Ci0gICgqc3RyKVtzaXplXSA9ICdcMCc7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFJlYWQgdGhlIG5leHQgZWxlbWVudCBhcyBhbiBBU0NJSSBzdHJpbmcuCi0gKi8KLQotR3N0Rmxvd1JldHVybgotZ3N0X2VibWxfcmVhZF9hc2NpaSAoR3N0RWJtbFJlYWQgKiBlYm1sLCBndWludDMyICogaWQsIGdjaGFyICoqIHN0cl9vdXQpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnY2hhciAqc3RyOwotICBnY2hhciAqaXRlcjsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgZ3VpbnQ2NCBvbGRvZmYgPSBlYm1sLT5vZmZzZXQ7Ci0jZW5kaWYKLQotICByZXQgPSBnc3RfZWJtbF9yZWFkX3N0cmluZyAoZWJtbCwgaWQsICZzdHIpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgZm9yIChpdGVyID0gc3RyOyAqaXRlciAhPSAnXDAnOyBpdGVyKyspIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoKml0ZXIgJiAweDgwKSkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZWJtbCwKLSAgICAgICAgICAiSW52YWxpZCBBU0NJSSBzdHJpbmcgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9sZG9mZik7Ci0gICAgICBnX2ZyZWUgKHN0cik7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgKnN0cl9vdXQgPSBzdHI7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYSBVVEYtOCBzdHJpbmcuCi0gKi8KLQotR3N0Rmxvd1JldHVybgotZ3N0X2VibWxfcmVhZF91dGY4IChHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50MzIgKiBpZCwgZ2NoYXIgKiogc3RyKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgZ3VpbnQ2NCBvbGRvZmYgPSBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpOwotI2VuZGlmCi0KLSAgcmV0ID0gZ3N0X2VibWxfcmVhZF9zdHJpbmcgKGVibWwsIGlkLCBzdHIpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIHJldHVybiByZXQ7Ci0KLSAgaWYgKHN0ciAhPSBOVUxMICYmICpzdHIgIT0gTlVMTCAmJiAqKnN0ciAhPSAnXDAnICYmCi0gICAgICAhZ191dGY4X3ZhbGlkYXRlICgqc3RyLCAtMSwgTlVMTCkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVibWwtPmVsLAotICAgICAgICAiSW52YWxpZCBVVEYtOCBzdHJpbmcgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9sZG9mZik7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKgotICogUmVhZCB0aGUgbmV4dCBlbGVtZW50IGFzIGEgZGF0ZS4KLSAqIFJldHVybnMgdGhlIHNlY29uZHMgc2luY2UgdGhlIHVuaXggZXBvY2guCi0gKi8KLQotR3N0Rmxvd1JldHVybgotZ3N0X2VibWxfcmVhZF9kYXRlIChHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50MzIgKiBpZCwgZ2ludDY0ICogZGF0ZSkKLXsKLSAgZ2ludDY0IGVibWxfZGF0ZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X2VibWxfcmVhZF9zaW50IChlYm1sLCBpZCwgJmVibWxfZGF0ZSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICAqZGF0ZSA9IChlYm1sX2RhdGUgLyBHU1RfU0VDT05EKSArIEdTVF9FQk1MX0RBVEVfT0ZGU0VUOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZWFkIHRoZSBuZXh0IGVsZW1lbnQgYXMgYmluYXJ5IGRhdGEuCi0gKi8KLQotR3N0Rmxvd1JldHVybgotZ3N0X2VibWxfcmVhZF9iaW5hcnkgKEdzdEVibWxSZWFkICogZWJtbCwKLSAgICBndWludDMyICogaWQsIGd1aW50OCAqKiBiaW5hcnksIGd1aW50NjQgKiBsZW5ndGgpCi17Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X2VibWxfcmVhZF9ieXRlcyAoZWJtbCwgaWQsICZkYXRhLCAmc2l6ZSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgcmV0dXJuIHJldDsKLQotICAqbGVuZ3RoID0gc2l6ZTsKLSAgKmJpbmFyeSA9IGdfbWVtZHVwIChkYXRhLCBzaXplKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19CmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvZWJtbC1yZWFkLmggYi9nc3QvbWF0cm9za2EvZWJtbC1yZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlODk0ZGEuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdHJvc2thL2VibWwtcmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qIEdTdHJlYW1lciBFQk1MIEkvTwotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIGVibWwtcmVhZC5jOiByZWFkIEVCTUwgZGF0YSBmcm9tIGZpbGUvc3RyZWFtCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9FQk1MX1JFQURfSF9fCi0jZGVmaW5lIF9fR1NUX0VCTUxfUkVBRF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RieXRlcmVhZGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9FQk1MX1JFQUQgXAotICAoZ3N0X2VibWxfcmVhZF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0VCTUxfUkVBRChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfRUJNTF9SRUFELCBHc3RFYm1sUmVhZCkpCi0jZGVmaW5lIEdTVF9FQk1MX1JFQURfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9FQk1MX1JFQUQsIEdzdEVibWxSZWFkQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRUJNTF9SRUFEKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9FQk1MX1JFQUQpKQotI2RlZmluZSBHU1RfSVNfRUJNTF9SRUFEX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfRUJNTF9SRUFEKSkKLSNkZWZpbmUgR1NUX0VCTUxfUkVBRF9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfRUJNTF9SRUFELCBHc3RFYm1sUmVhZENsYXNzKSkKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoZWJtbHJlYWRfZGVidWcpOwotCi0vKiBjdXN0b20gZmxvdyByZXR1cm4gY29kZSAqLwotI2RlZmluZSAgR1NUX0ZMT1dfUEFSU0UgIEdTVF9GTE9XX0NVU1RPTV9FUlJPUgotCi10eXBlZGVmIHN0cnVjdCBfR3N0RWJtbE1hc3RlciB7Ci0gIGd1aW50NjQgICAgICAgb2Zmc2V0OwotICBHc3RCeXRlUmVhZGVyIGJyOwotfSBHc3RFYm1sTWFzdGVyOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RWJtbFJlYWQgewotICBHc3RFbGVtZW50ICplbDsKLQotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQ2NCBvZmZzZXQ7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIEdBcnJheSAqcmVhZGVyczsKLX0gR3N0RWJtbFJlYWQ7Ci0KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKkdzdFBlZWtEYXRhKSAoZ3BvaW50ZXIgKiBjb250ZXh0LCBndWludCBwZWVrLCBjb25zdCBndWludDggKiogZGF0YSk7Ci0KLS8qIHJldHVybnMgVU5FWFBFQ1RFRCBpZiBub3QgZW5vdWdoIGRhdGEgKi8KLUdzdEZsb3dSZXR1cm4gZ3N0X2VibWxfcGVla19pZF9sZW5ndGggICAgKGd1aW50MzIgKiBfaWQsIGd1aW50NjQgKiBfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKiBfbmVlZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UGVla0RhdGEgcGVlaywgZ3BvaW50ZXIgKiBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RFbGVtZW50ICogZWwsIGd1aW50NjQgb2Zmc2V0KTsKLQotdm9pZCAgICAgICAgICBnc3RfZWJtbF9yZWFkX2luaXQgICAgICAgICAoR3N0RWJtbFJlYWQgKiBlYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0RWxlbWVudCAqIGVsLCBHc3RCdWZmZXIgKiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0IG9mZnNldCk7Ci0KLXZvaWQgICAgICAgICAgZ3N0X2VibWxfcmVhZF9jbGVhciAgICAgICAgKEdzdEVibWxSZWFkICogZWJtbCk7Ci0KLUdzdEZsb3dSZXR1cm4gZ3N0X2VibWxfcGVla19pZCAgICAgICAgICAgKEdzdEVibWxSZWFkICogZWJtbCwgZ3VpbnQzMiAqIGlkKTsKLQotLyogcmV0dXJuIF9QQVJTRSBpZiBub3QgZW5vdWdoIGRhdGEgdG8gcmVhZCB3aGF0IGlzIG5lZWRlZCwgX0VSUk9SIG9yIF9PSyAqLwotR3N0Rmxvd1JldHVybiBnc3RfZWJtbF9yZWFkX3NraXAgICAgICAgICAoR3N0RWJtbFJlYWQgKmVibWwpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfYnVmZmVyICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciAgKipidWYpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfdWludCAgICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICpudW0pOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfc2ludCAgICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICpudW0pOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfZmxvYXQgICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgICAgICpudW0pOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfYXNjaWkgICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgKipzdHIpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfdXRmOCAgICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgKipzdHIpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfZGF0ZSAgICAgICAgIChHc3RFYm1sUmVhZCAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICppZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICpkYXRlKTsKLQotR3N0Rmxvd1JldHVybiBnc3RfZWJtbF9yZWFkX21hc3RlciAgICAgICAoR3N0RWJtbFJlYWQgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyICAgICAqaWQpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfcG9wX21hc3RlciAgIChHc3RFYm1sUmVhZCAqZWJtbCk7Ci0KLUdzdEZsb3dSZXR1cm4gZ3N0X2VibWxfcmVhZF9iaW5hcnkgICAgICAgKEdzdEVibWxSZWFkICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgKmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ4ICAgICAqKmJpbmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICpsZW5ndGgpOwotCi1Hc3RGbG93UmV0dXJuIGdzdF9lYm1sX3JlYWRfaGVhZGVyICAgICAgIChHc3RFYm1sUmVhZCAqcmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgKipkb2N0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgKnZlcnNpb24pOwotCi0vKiBSZXR1cm5zIGN1cnJlbnQgKGFic29sdXRlKSBwb3NpdGlvbiBvZiBFYm1sIHBhcnNlciwKLSAqIGkuZS4gdGFraW5nIGludG8gYWNjb3VudCBvZmZzZXQgcHJvdmlkZWQgYXQgaW5pdCAqLwotc3RhdGljIGlubGluZSBndWludDY0Ci1nc3RfZWJtbF9yZWFkX2dldF9wb3MgKEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgR3N0RWJtbE1hc3RlciAqbTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZWJtbC0+cmVhZGVycywgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlYm1sLT5yZWFkZXJzLT5sZW4sIDApOwotCi0gIG0gPSAmKGdfYXJyYXlfaW5kZXggKGVibWwtPnJlYWRlcnMsIEdzdEVibWxNYXN0ZXIsIGVibWwtPnJlYWRlcnMtPmxlbiAtIDEpKTsKLSAgcmV0dXJuIG0tPm9mZnNldCArIGdzdF9ieXRlX3JlYWRlcl9nZXRfcG9zICgmbS0+YnIpOwotfQotCi0vKiBSZXR1cm5zIHN0YXJ0aW5nIG9mZnNldCBvZiBFYm1sIHBhcnNlciAqLwotc3RhdGljIGlubGluZSBndWludDY0Ci1nc3RfZWJtbF9yZWFkX2dldF9vZmZzZXQgKEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgcmV0dXJuIGVibWwtPm9mZnNldDsKLX0KLQotc3RhdGljIGlubGluZSBHc3RCeXRlUmVhZGVyICoKLWdzdF9lYm1sX3JlYWRfYnIgKEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVibWwtPnJlYWRlcnMsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZWJtbC0+cmVhZGVycy0+bGVuLCBOVUxMKTsKLQotICByZXR1cm4gJihnX2FycmF5X2luZGV4IChlYm1sLT5yZWFkZXJzLAotICAgICAgICAgIEdzdEVibWxNYXN0ZXIsIGVibWwtPnJlYWRlcnMtPmxlbiAtIDEpLmJyKTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50NjQgYnl0ZXNfbmVlZGVkLAotICAgIGdib29sZWFuIGF1dG9fcG9wKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgcmVzID0gKGdzdF9ieXRlX3JlYWRlcl9nZXRfcmVtYWluaW5nIChnc3RfZWJtbF9yZWFkX2JyIChlYm1sKSkgPj0gYnl0ZXNfbmVlZGVkKTsKLSAgaWYgKEdfTElLRUxZICghcmVzICYmIGF1dG9fcG9wKSkgewotICAgIGdzdF9lYm1sX3JlYWRfcG9wX21hc3RlciAoZWJtbCk7Ci0gIH0KLQotICByZXR1cm4gR19MSUtFTFkgKHJlcyk7Ci19Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9FQk1MX1JFQURfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jIGIvZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlOTNiYy4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvZWJtbC13cml0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQxICswLDAgQEAKLS8qIEdTdHJlYW1lciBFQk1MIEkvTwotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogKGMpIDIwMDUgTWljaGFsIEJlbmVzIDxtaWNoYWwuYmVuZXNAeGVyaXMuY3o+Ci0gKgotICogZWJtbC13cml0ZS5jOiB3cml0ZSBFQk1MIGRhdGEgdG8gZmlsZS9zdHJlYW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImVibWwtd3JpdGUuaCIKLSNpbmNsdWRlICJlYm1sLWlkcy5oIgotCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9lYm1sX3dyaXRlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9lYm1sX3dyaXRlX2RlYnVnCi0KLSNkZWZpbmUgX2RvX2luaXQgXAotICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9lYm1sX3dyaXRlX2RlYnVnLCAiZWJtbHdyaXRlIiwgMCwgIldyaXRlIEVCTUwgc3RydWN0dXJlZCBkYXRhIikKLSNkZWZpbmUgcGFyZW50X2NsYXNzIGdzdF9lYm1sX3dyaXRlX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdEVibWxXcml0ZSwgZ3N0X2VibWxfd3JpdGUsIEdTVF9UWVBFX09CSkVDVCwKLSAgICBfZG9faW5pdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9lYm1sX3dyaXRlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9lYm1sX3dyaXRlX2NsYXNzX2luaXQgKEdzdEVibWxXcml0ZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBvYmplY3QtPmZpbmFsaXplID0gZ3N0X2VibWxfd3JpdGVfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZWJtbF93cml0ZV9pbml0IChHc3RFYm1sV3JpdGUgKiBlYm1sKQotewotICBlYm1sLT5zcmNwYWQgPSBOVUxMOwotICBlYm1sLT5wb3MgPSAwOwotICBlYm1sLT5sYXN0X3BvcyA9IEdfTUFYVUlOVDY0OyAvKiBmb3JjZSBzZWdtZW50IGV2ZW50ICovCi0KLSAgZWJtbC0+Y2FjaGUgPSBOVUxMOwotICBlYm1sLT5zdHJlYW1oZWFkZXIgPSBOVUxMOwotICBlYm1sLT5zdHJlYW1oZWFkZXJfcG9zID0gMDsKLSAgZWJtbC0+d3JpdGluZ19zdHJlYW1oZWFkZXIgPSBGQUxTRTsKLSAgZWJtbC0+Y2FwcyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZWJtbF93cml0ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RWJtbFdyaXRlICplYm1sID0gR1NUX0VCTUxfV1JJVEUgKG9iamVjdCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZWJtbC0+c3JjcGFkKTsKLQotICBpZiAoZWJtbC0+Y2FjaGUpIHsKLSAgICBnc3RfYnl0ZV93cml0ZXJfZnJlZSAoZWJtbC0+Y2FjaGUpOwotICAgIGVibWwtPmNhY2hlID0gTlVMTDsKLSAgfQotCi0gIGlmIChlYm1sLT5zdHJlYW1oZWFkZXIpIHsKLSAgICBnc3RfYnl0ZV93cml0ZXJfZnJlZSAoZWJtbC0+c3RyZWFtaGVhZGVyKTsKLSAgICBlYm1sLT5zdHJlYW1oZWFkZXIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGVibWwtPmNhcHMpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoZWJtbC0+Y2Fwcyk7Ci0gICAgZWJtbC0+Y2FwcyA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9uZXc6Ci0gKiBAc3JjcGFkOiBTb3VyY2UgcGFkIHRvIHdoaWNoIHRoZSBvdXRwdXQgd2lsbCBiZSBwdXNoZWQuCi0gKgotICogQ3JlYXRlcyBhIG5ldyAjR3N0RWJtbFdyaXRlLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNHc3RFYm1sV3JpdGUKLSAqLwotR3N0RWJtbFdyaXRlICoKLWdzdF9lYm1sX3dyaXRlX25ldyAoR3N0UGFkICogc3JjcGFkKQotewotICBHc3RFYm1sV3JpdGUgKmVibWwgPQotICAgICAgR1NUX0VCTUxfV1JJVEUgKGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfRUJNTF9XUklURSwgTlVMTCkpOwotCi0gIGVibWwtPnNyY3BhZCA9IGdzdF9vYmplY3RfcmVmIChzcmNwYWQpOwotICBlYm1sLT50aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGdzdF9lYm1sX3dyaXRlX3Jlc2V0IChlYm1sKTsKLQotICByZXR1cm4gZWJtbDsKLX0KLQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX3Jlc2V0OgotICogQGVibWw6IGEgI0dzdEVibWxXcml0ZS4KLSAqCi0gKiBSZXNldCBpbnRlcm5hbCBzdGF0ZSBvZiAjR3N0RWJtbFdyaXRlLgotICovCi12b2lkCi1nc3RfZWJtbF93cml0ZV9yZXNldCAoR3N0RWJtbFdyaXRlICogZWJtbCkKLXsKLSAgZWJtbC0+cG9zID0gMDsKLSAgZWJtbC0+bGFzdF9wb3MgPSBHX01BWFVJTlQ2NDsgLyogZm9yY2Ugc2VnbWVudCBldmVudCAqLwotCi0gIGlmIChlYm1sLT5jYWNoZSkgewotICAgIGdzdF9ieXRlX3dyaXRlcl9mcmVlIChlYm1sLT5jYWNoZSk7Ci0gICAgZWJtbC0+Y2FjaGUgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGVibWwtPmNhcHMpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoZWJtbC0+Y2Fwcyk7Ci0gICAgZWJtbC0+Y2FwcyA9IE5VTEw7Ci0gIH0KLQotICBlYm1sLT5sYXN0X3dyaXRlX3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICBlYm1sLT50aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotfQotCi0KLS8qKgotICogZ3N0X2VibWxfbGFzdF93cml0ZV9yZXN1bHQ6Ci0gKiBAZWJtbDogYSAjR3N0RWJtbFdyaXRlLgotICoKLSAqIFJldHVybnM6IEdTVF9GTE9XX09LIGlmIHRoZXJlIHdhcyBub3Qgd3JpdGUgZXJyb3Igc2luY2UgdGhlIGxhc3QgY2FsbCBvZgotICogICAgICAgICAgZ3N0X2VibWxfbGFzdF93cml0ZV9yZXN1bHQgb3IgY29kZSBvZiB0aGUgZXJyb3IuCi0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9lYm1sX2xhc3Rfd3JpdGVfcmVzdWx0IChHc3RFYm1sV3JpdGUgKiBlYm1sKQotewotICBHc3RGbG93UmV0dXJuIHJlcyA9IGVibWwtPmxhc3Rfd3JpdGVfcmVzdWx0OwotCi0gIGVibWwtPmxhc3Rfd3JpdGVfcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotCi12b2lkCi1nc3RfZWJtbF9zdGFydF9zdHJlYW1oZWFkZXIgKEdzdEVibWxXcml0ZSAqIGVibWwpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGVibWwtPnN0cmVhbWhlYWRlciA9PSBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJTdGFydGluZyBzdHJlYW1oZWFkZXIgYXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgZWJtbC0+cG9zKTsKLSAgZWJtbC0+c3RyZWFtaGVhZGVyID0gZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgKDEwMDAsIEZBTFNFKTsKLSAgZWJtbC0+c3RyZWFtaGVhZGVyX3BvcyA9IGVibWwtPnBvczsKLSAgZWJtbC0+d3JpdGluZ19zdHJlYW1oZWFkZXIgPSBUUlVFOwotfQotCi1Hc3RCdWZmZXIgKgotZ3N0X2VibWxfc3RvcF9zdHJlYW1oZWFkZXIgKEdzdEVibWxXcml0ZSAqIGVibWwpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gIGlmICghZWJtbC0+c3RyZWFtaGVhZGVyKQotICAgIHJldHVybiBOVUxMOwotCi0gIGJ1ZmZlciA9IGdzdF9ieXRlX3dyaXRlcl9mcmVlX2FuZF9nZXRfYnVmZmVyIChlYm1sLT5zdHJlYW1oZWFkZXIpOwotICBlYm1sLT5zdHJlYW1oZWFkZXIgPSBOVUxMOwotICBHU1RfREVCVUcgKCJTdHJlYW1oZWFkZXIgd2FzIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpKTsKLQotICBlYm1sLT53cml0aW5nX3N0cmVhbWhlYWRlciA9IEZBTFNFOwotICByZXR1cm4gYnVmZmVyOwotfQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX3NldF9jYWNoZToKLSAqIEBlYm1sOiBhICNHc3RFYm1sV3JpdGUuCi0gKiBAc2l6ZTogc2l6ZSBvZiB0aGUgY2FjaGUuCi0gKiBDcmVhdGUgYSBjYWNoZS4KLSAqCi0gKiBUaGUgaWRlYSBpcyB0aGF0IHlvdSB1c2UgdGhpcyBmb3Igd3JpdGluZyBhIGxvdAotICogb2Ygc21hbGwgZWxlbWVudHMuIFRoaXMgd2lsbCBqdXN0ICJxdWV1ZSIgYWxsIG9mCi0gKiB0aGVtIGFuZCB0aGV5J2xsIGJlIHB1c2hlZCB0byB0aGUgbmV4dCBlbGVtZW50IGFsbAotICogYXQgb25jZS4gVGhpcyBzYXZlcyBtZW1vcnkgYW5kIHRpbWUgZm9yIGJ1ZmZlcgotICogYWxsb2NhdGlvbiBhbmQgaW5pdCwgYW5kIGl0IGxvb2tzIGJldHRlci4KLSAqLwotdm9pZAotZ3N0X2VibWxfd3JpdGVfc2V0X2NhY2hlIChHc3RFYm1sV3JpdGUgKiBlYm1sLCBndWludCBzaXplKQotewotICBnX3JldHVybl9pZl9mYWlsIChlYm1sLT5jYWNoZSA9PSBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJTdGFydGluZyBjYWNoZSBhdCAlIiBHX0dVSU5UNjRfRk9STUFULCBlYm1sLT5wb3MpOwotICBlYm1sLT5jYWNoZSA9IGdzdF9ieXRlX3dyaXRlcl9uZXdfd2l0aF9zaXplIChzaXplLCBGQUxTRSk7Ci0gIGVibWwtPmNhY2hlX3BvcyA9IGVibWwtPnBvczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZWJtbF93cml0ZXJfc2VuZF9zZWdtZW50X2V2ZW50IChHc3RFYm1sV3JpdGUgKiBlYm1sLCBndWludDY0IG5ld19wb3MpCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIEdTVF9JTkZPICgic2Vla2luZyB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBuZXdfcG9zKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwKLSAgICAgIGVibWwtPnN0cmVhbWFibGUgPyBHU1RfRk9STUFUX1RJTUUgOiBHU1RfRk9STUFUX0JZVEVTKTsKLSAgc2VnbWVudC5zdGFydCA9IG5ld19wb3M7Ci0gIHNlZ21lbnQuc3RvcCA9IC0xOwotICBzZWdtZW50LnBvc2l0aW9uID0gMDsKLQotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKGVibWwtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGlmICghcmVzKQotICAgIEdTVF9XQVJOSU5HICgic2VlayB0byAlIiBHX0dVSU5UNjRfRk9STUFUICJmYWlsZWQiLCBuZXdfcG9zKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlOgotICogQGVibWw6ICAgICAgYSAjR3N0RWJtbFdyaXRlLgotICogQHRpbWVzdGFtcDogdGltZXN0YW1wIG9mIHRoZSBidWZmZXIuCi0gKgotICogRmx1c2ggdGhlIGNhY2hlLgotICovCi12b2lkCi1nc3RfZWJtbF93cml0ZV9mbHVzaF9jYWNoZSAoR3N0RWJtbFdyaXRlICogZWJtbCwgZ2Jvb2xlYW4gaXNfa2V5ZnJhbWUsCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgaWYgKCFlYm1sLT5jYWNoZSkKLSAgICByZXR1cm47Ci0KLSAgYnVmZmVyID0gZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIgKGVibWwtPmNhY2hlKTsKLSAgZWJtbC0+Y2FjaGUgPSBOVUxMOwotICBHU1RfREVCVUcgKCJGbHVzaGluZyBjYWNoZSBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSA9IGVibWwtPnBvcyAtIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9IGVibWwtPnBvczsKLSAgaWYgKGVibWwtPmxhc3Rfd3JpdGVfcmVzdWx0ID09IEdTVF9GTE9XX09LKSB7Ci0gICAgaWYgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpICE9IGVibWwtPmxhc3RfcG9zKSB7Ci0gICAgICBnc3RfZWJtbF93cml0ZXJfc2VuZF9zZWdtZW50X2V2ZW50IChlYm1sLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmZmVyKSk7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICB9Ci0gICAgaWYgKGVibWwtPndyaXRpbmdfc3RyZWFtaGVhZGVyKSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0hFQURFUik7Ci0gICAgfQotICAgIGlmICghaXNfa2V5ZnJhbWUpIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgIH0KLSAgICBlYm1sLT5sYXN0X3BvcyA9IGVibWwtPnBvczsKLSAgICBlYm1sLT5sYXN0X3dyaXRlX3Jlc3VsdCA9IGdzdF9wYWRfcHVzaCAoZWJtbC0+c3JjcGFkLCBidWZmZXIpOwotICB9IGVsc2UgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIH0KLX0KLQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfbmV3OgotICogQGVibWw6IGEgI0dzdEVibWxXcml0ZS4KLSAqIEBzaXplOiBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgYnVmZmVyLgotICoKLSAqIENyZWF0ZSBhIGJ1ZmZlciBmb3Igb25lIGVsZW1lbnQuIElmIHRoZXJlIGlzCi0gKiBhIGNhY2hlLCB1c2UgdGhhdCBpbnN0ZWFkLgotICoKLSAqIFJldHVybnM6IEEgbmV3ICNHc3RCdWZmZXIuCi0gKi8KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9uZXcgKEdzdEVibWxXcml0ZSAqIGVibWwsIEdzdE1hcEluZm8gKiBtYXAsIGd1aW50IHNpemUpCi17Ci0gIC8qIENyZWF0ZSBuZXcgYnVmZmVyIG9mIHNpemUgKyBJRCArIGxlbmd0aCAqLwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICAvKiBsZW5ndGgsIElEICovCi0gIHNpemUgKz0gMTI7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBlYm1sLT50aW1lc3RhbXA7Ci0KLSAgLyogRklYTUUgdW5tYXAgbm90IHBvc3NpYmxlICovCi0gIGdzdF9idWZmZXJfbWFwIChidWYsIG1hcCwgR1NUX01BUF9XUklURSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfaWQ6Ci0gKiBAZGF0YV9pbm91dDogUG9pbnRlciB0byBkYXRhIHBvaW50ZXIKLSAqIEBpZDogRWxlbWVudCBJRCB0aGF0IHNob3VsZCBiZSB3cml0dGVuLgotICogCi0gKiBXcml0ZSBlbGVtZW50IElEIGludG8gYSBidWZmZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfZWJtbF93cml0ZV9lbGVtZW50X2lkIChndWludDggKiogZGF0YV9pbm91dCwgZ3VpbnQzMiBpZCkKLXsKLSAgZ3VpbnQ4ICpkYXRhID0gKmRhdGFfaW5vdXQ7Ci0gIGd1aW50IGJ5dGVzID0gNCwgbWFzayA9IDB4MTA7Ci0KLSAgLyogZ2V0IElEIGxlbmd0aCAqLwotICB3aGlsZSAoIShpZCAmIChtYXNrIDw8ICgoYnl0ZXMgLSAxKSAqIDgpKSkgJiYgYnl0ZXMgPiAwKSB7Ci0gICAgbWFzayA8PD0gMTsKLSAgICBieXRlcy0tOwotICB9Ci0KLSAgLyogaWYgaW52YWxpZCBJRCwgdXNlIGR1bW15ICovCi0gIGlmIChieXRlcyA9PSAwKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJJbnZhbGlkIElELCB2b2lkaW5nIik7Ci0gICAgYnl0ZXMgPSAxOwotICAgIGlkID0gR1NUX0VCTUxfSURfVk9JRDsKLSAgfQotCi0gIC8qIHdyaXRlIG91dCwgQkUgKi8KLSAgKmRhdGFfaW5vdXQgKz0gYnl0ZXM7Ci0gIHdoaWxlIChieXRlcy0tKSB7Ci0gICAgZGF0YVtieXRlc10gPSBpZCAmIDB4ZmY7Ci0gICAgaWQgPj49IDg7Ci0gIH0KLX0KLQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfc2l6ZToKLSAqIEBkYXRhX2lub3V0OiBQb2ludGVyIHRvIGRhdGEgcG9pbnRlcgotICogQHNpemU6IEVsZW1lbnQgbGVuZ3RoLgotICoKLSAqIFdyaXRlIGVsZW1lbnQgbGVuZ3RoIGludG8gYSBidWZmZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfZWJtbF93cml0ZV9lbGVtZW50X3NpemUgKGd1aW50OCAqKiBkYXRhX2lub3V0LCBndWludDY0IHNpemUpCi17Ci0gIGd1aW50OCAqZGF0YSA9ICpkYXRhX2lub3V0OwotICBndWludCBieXRlcyA9IDEsIG1hc2sgPSAweDgwOwotCi0gIGlmIChzaXplICE9IEdTVF9FQk1MX1NJWkVfVU5LTk9XTikgewotICAgIC8qIGhvdyBtYW55IGJ5dGVzPyAtIHVzZSBtYXNrLTEgYmVjYXVzZSBhbiBhbGwtMSBiaXRzZXQgaXMgbm90IGFsbG93ZWQgKi8KLSAgICB3aGlsZSAoYnl0ZXMgPD0gOCAmJiAoc2l6ZSA+PiAoKGJ5dGVzIC0gMSkgKiA4KSkgPj0gKG1hc2sgLSAxKSkgewotICAgICAgbWFzayA+Pj0gMTsKLSAgICAgIGJ5dGVzKys7Ci0gICAgfQotCi0gICAgLyogaWYgaW52YWxpZCBzaXplLCB1c2UgbWF4LiAqLwotICAgIGlmIChieXRlcyA+IDgpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBzaXplLCB3cml0aW5nIHNpemUgdW5rbm93biIpOwotICAgICAgbWFzayA9IDB4MDE7Ci0gICAgICBieXRlcyA9IDg7Ci0gICAgICAvKiBOb3cgaGVyZSdzIGEgcmVhbCBGSVhNRTogd2UgY2Fubm90IHJlYWQgdGhvc2UgeWV0ISAqLwotICAgICAgc2l6ZSA9IEdTVF9FQk1MX1NJWkVfVU5LTk9XTjsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgbWFzayA9IDB4MDE7Ci0gICAgYnl0ZXMgPSA4OwotICB9Ci0KLSAgLyogd3JpdGUgb3V0LCBCRSwgd2l0aCBsZW5ndGggc2l6ZSBtYXJrZXIgKi8KLSAgKmRhdGFfaW5vdXQgKz0gYnl0ZXM7Ci0gIHdoaWxlIChieXRlcy0tID4gMCkgewotICAgIGRhdGFbYnl0ZXNdID0gc2l6ZSAmIDB4ZmY7Ci0gICAgc2l6ZSA+Pj0gODsKLSAgICBpZiAoIWJ5dGVzKQotICAgICAgKmRhdGEgfD0gbWFzazsKLSAgfQotfQotCi0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9kYXRhOgotICogQGRhdGFfaW5vdXQ6IFBvaW50ZXIgdG8gZGF0YSBwb2ludGVyCi0gKiBAd3JpdGU6IERhdGEgdGhhdCBzaG91bGQgYmUgd3JpdHRlbi4KLSAqIEBsZW5ndGg6IExlbmd0aCBvZiB0aGUgZGF0YS4KLSAqCi0gKiBXcml0ZSBlbGVtZW50IGRhdGEgaW50byBhIGJ1ZmZlci4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfZGF0YSAoZ3VpbnQ4ICoqIGRhdGFfaW5vdXQsIGd1aW50OCAqIHdyaXRlLAotICAgIGd1aW50NjQgbGVuZ3RoKQotewotICBtZW1jcHkgKCpkYXRhX2lub3V0LCB3cml0ZSwgbGVuZ3RoKTsKLSAgKmRhdGFfaW5vdXQgKz0gbGVuZ3RoOwotfQotCi0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9wdXNoOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBidWY6ICNHc3RCdWZmZXIgdG8gYmUgd3JpdHRlbi4KLSAqIEBidWZfZGF0YTogU3RhcnQgb2YgZGF0YSB0byBwdXNoIGZyb20gQGJ1ZiAob3IgTlVMTCBmb3Igd2hvbGUgYnVmZmVyKS4KLSAqIEBidWZfZGF0YV9lbmQ6IERhdGEgcG9pbnRlciBwb3NpdGlvbmVkIGFmdGVyIHRoZSBsYXN0IGJ5dGUgaW4gQGJ1Zl9kYXRhIChvcgotICogTlVMTCBmb3Igd2hvbGUgYnVmZmVyKS4KLSAqIAotICogV3JpdGUgb3V0IGJ1ZmZlciBieSBtb3ZpbmcgaXQgdG8gdGhlIG5leHQgZWxlbWVudC4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfcHVzaCAoR3N0RWJtbFdyaXRlICogZWJtbCwgR3N0QnVmZmVyICogYnVmLAotICAgIGd1aW50OCAqIGJ1Zl9kYXRhLCBndWludDggKiBidWZfZGF0YV9lbmQpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBkYXRhX3NpemU7Ci0KLSAgbWFwLmRhdGEgPSBOVUxMOwotCi0gIGlmIChidWZfZGF0YV9lbmQpCi0gICAgZGF0YV9zaXplID0gYnVmX2RhdGFfZW5kIC0gYnVmX2RhdGE7Ci0gIGVsc2UKLSAgICBkYXRhX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gIGVibWwtPnBvcyArPSBkYXRhX3NpemU7Ci0KLSAgLyogaWYgdGhlcmUncyBubyBjYWNoZSwgdGhlbiBkb24ndCBwdXNoIGl0ISAqLwotICBpZiAoZWJtbC0+d3JpdGluZ19zdHJlYW1oZWFkZXIpIHsKLSAgICBpZiAoIWJ1Zl9kYXRhKSB7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgYnVmX2RhdGEgPSBtYXAuZGF0YTsKLSAgICB9Ci0gICAgaWYgKCFidWZfZGF0YSkKLSAgICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIG1hcCBidWZmZXIiKTsKLSAgICBlbHNlIGlmICghZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhIChlYm1sLT5zdHJlYW1oZWFkZXIsIGJ1Zl9kYXRhLAotICAgICAgICAgICAgZGF0YV9zaXplKSkKLSAgICAgIEdTVF9XQVJOSU5HICgiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0cmVhbWhlYWRlciIpOwotICB9Ci0gIGlmIChlYm1sLT5jYWNoZSkgewotICAgIGlmICghYnVmX2RhdGEpIHsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBidWZfZGF0YSA9IG1hcC5kYXRhOwotICAgIH0KLSAgICBpZiAoIWJ1Zl9kYXRhKQotICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gbWFwIGJ1ZmZlciIpOwotICAgIGVsc2UgaWYgKCFnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKGVibWwtPmNhY2hlLCBidWZfZGF0YSwgZGF0YV9zaXplKSkKLSAgICAgIEdTVF9XQVJOSU5HICgiRXJyb3Igd3JpdGluZyBkYXRhIHRvIGNhY2hlIik7Ci0gICAgaWYgKG1hcC5kYXRhKQotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChidWZfZGF0YSAmJiBtYXAuZGF0YSkKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIGlmIChlYm1sLT5sYXN0X3dyaXRlX3Jlc3VsdCA9PSBHU1RfRkxPV19PSykgewotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmKTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IGVibWwtPnBvcyAtIGRhdGFfc2l6ZTsKLSAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPSBlYm1sLT5wb3M7Ci0gICAgaWYgKGVibWwtPndyaXRpbmdfc3RyZWFtaGVhZGVyKSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0hFQURFUik7Ci0gICAgfQotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgaWYgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpICE9IGVibWwtPmxhc3RfcG9zKSB7Ci0gICAgICBnc3RfZWJtbF93cml0ZXJfc2VuZF9zZWdtZW50X2V2ZW50IChlYm1sLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSk7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICB9Ci0gICAgZWJtbC0+bGFzdF9wb3MgPSBlYm1sLT5wb3M7Ci0gICAgZWJtbC0+bGFzdF93cml0ZV9yZXN1bHQgPSBnc3RfcGFkX3B1c2ggKGVibWwtPnNyY3BhZCwgYnVmKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9zZWVrOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBwb3M6IFNlZWsgcG9zaXRpb24uCi0gKiAKLSAqIFNlZWsuCi0gKi8KLXZvaWQKLWdzdF9lYm1sX3dyaXRlX3NlZWsgKEdzdEVibWxXcml0ZSAqIGVibWwsIGd1aW50NjQgcG9zKQotewotICBpZiAoZWJtbC0+d3JpdGluZ19zdHJlYW1oZWFkZXIpIHsKLSAgICBHU1RfREVCVUcgKCJ3YW50aW5nIHRvIHNlZWsgdG8gcG9zICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHBvcyk7Ci0gICAgaWYgKHBvcyA+PSBlYm1sLT5zdHJlYW1oZWFkZXJfcG9zICYmCi0gICAgICAgIHBvcyA8PSBlYm1sLT5zdHJlYW1oZWFkZXJfcG9zICsgZWJtbC0+c3RyZWFtaGVhZGVyLT5wYXJlbnQuc2l6ZSkgewotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3NldF9wb3MgKGVibWwtPnN0cmVhbWhlYWRlciwKLSAgICAgICAgICBwb3MgLSBlYm1sLT5zdHJlYW1oZWFkZXJfcG9zKTsKLSAgICAgIEdTVF9ERUJVRyAoInNlZWtlZCBpbiBzdHJlYW1oZWFkZXIgdG8gcG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICBwb3MgLSBlYm1sLT5zdHJlYW1oZWFkZXJfcG9zKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcKLSAgICAgICAgICAoIndlIGFyZSB3cml0aW5nIHN0cmVhbWhlYWRlciBzdGlsbCBhbmQgc2VlayBpcyBvdXQgb2YgYm91bmRzIik7Ci0gICAgfQotICB9Ci0gIC8qIENhY2hlIHNlZWtpbmcuIEEgYml0IGRhbmdlcm91cywgd2UgYXNzdW1lIHRoZSBjbGllbnQgd3JpdGVyCi0gICAqIGtub3dzIHdoYXQgaGUncyBkb2luZy4uLiAqLwotICBpZiAoZWJtbC0+Y2FjaGUpIHsKLSAgICAvKiB3aXRoaW4gYm91bmRzPyAqLwotICAgIGlmIChwb3MgPj0gZWJtbC0+Y2FjaGVfcG9zICYmCi0gICAgICAgIHBvcyA8PSBlYm1sLT5jYWNoZV9wb3MgKyBlYm1sLT5jYWNoZS0+cGFyZW50LnNpemUpIHsKLSAgICAgIEdTVF9ERUJVRyAoInNlZWtpbmcgaW4gY2FjaGUgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcG9zKTsKLSAgICAgIGVibWwtPnBvcyA9IHBvczsKLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChlYm1sLT5jYWNoZSwgZWJtbC0+cG9zIC0gZWJtbC0+Y2FjaGVfcG9zKTsKLSAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0xPRyAoIlNlZWsgb3V0c2lkZSBjYWNoZSByYW5nZS4gQ2xlYXJpbmcuLi4iKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlIChlYm1sLCBGQUxTRSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0lORk8gKCJzY2hlZHVsaW5nIHNlZWsgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcG9zKTsKLSAgZWJtbC0+cG9zID0gcG9zOwotfQotCi0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfZ2V0X3VpbnRfc2l6ZToKLSAqIEBudW06IE51bWJlciB0byBiZSBlbmNvZGVkLgotICogCi0gKiBHZXQgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byB3cml0ZSBhIHVpbnQuCi0gKgotICogUmV0dXJuczogRW5jb2RlZCB1aW50IGxlbmd0aC4KLSAqLwotc3RhdGljIGd1aW50Ci1nc3RfZWJtbF93cml0ZV9nZXRfdWludF9zaXplIChndWludDY0IG51bSkKLXsKLSAgZ3VpbnQgc2l6ZSA9IDE7Ci0KLSAgLyogZ2V0IHNpemUgKi8KLSAgd2hpbGUgKHNpemUgPCA4ICYmIG51bSA+PSAoR19HSU5UNjRfQ09OU1RBTlQgKDEpIDw8IChzaXplICogOCkpKSB7Ci0gICAgc2l6ZSsrOwotICB9Ci0KLSAgcmV0dXJuIHNpemU7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9zZXRfdWludDoKLSAqIEBkYXRhX2lub3V0OiBQb2ludGVyIHRvIGRhdGEgcG9pbnRlcgotICogQG51bTogTnVtYmVyIHRvIGJlIHdyaXR0ZW4uCi0gKiBAc2l6ZTogRW5jb2RlZCBudW1iZXIgbGVuZ3RoLgotICoKLSAqIFdyaXRlIGFuIHVpbnQgaW50byBhIGJ1ZmZlci4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9lYm1sX3dyaXRlX3NldF91aW50IChndWludDggKiogZGF0YV9pbm91dCwgZ3VpbnQ2NCBudW0sIGd1aW50IHNpemUpCi17Ci0gIGd1aW50OCAqZGF0YSA9ICpkYXRhX2lub3V0OwotCi0gICpkYXRhX2lub3V0ICs9IHNpemU7Ci0KLSAgd2hpbGUgKHNpemUtLSA+IDApIHsKLSAgICBkYXRhW3NpemVdID0gbnVtICYgMHhmZjsKLSAgICBudW0gPj49IDg7Ci0gIH0KLX0KLQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX3VpbnQ6Ci0gKiBAZWJtbDogI0dzdEVibWxXcml0ZQotICogQGlkOiBFbGVtZW50IElELgotICogQG51bTogTnVtYmVyIHRvIGJlIHdyaXR0ZW4uCi0gKgotICogV3JpdGUgdWludCBlbGVtZW50LgotICovCi12b2lkCi1nc3RfZWJtbF93cml0ZV91aW50IChHc3RFYm1sV3JpdGUgKiBlYm1sLCBndWludDMyIGlkLCBndWludDY0IG51bSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50OCAqZGF0YV9zdGFydCwgKmRhdGFfZW5kOwotICBndWludCBzaXplID0gZ3N0X2VibWxfd3JpdGVfZ2V0X3VpbnRfc2l6ZSAobnVtKTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYnVmID0gZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9uZXcgKGVibWwsICZtYXAsIHNpemVvZiAobnVtKSk7Ci0gIGRhdGFfZW5kID0gZGF0YV9zdGFydCA9IG1hcC5kYXRhOwotCi0gIC8qIHdyaXRlICovCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfaWQgKCZkYXRhX2VuZCwgaWQpOwotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3NpemUgKCZkYXRhX2VuZCwgc2l6ZSk7Ci0gIGdzdF9lYm1sX3dyaXRlX3NldF91aW50ICgmZGF0YV9lbmQsIG51bSwgc2l6ZSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1ZiwgKGRhdGFfZW5kIC0gZGF0YV9zdGFydCkpOwotCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfcHVzaCAoZWJtbCwgYnVmLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9zaW50OgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBpZDogRWxlbWVudCBJRC4KLSAqIEBudW06IE51bWJlciB0byBiZSB3cml0dGVuLgotICoKLSAqIFdyaXRlIHNpbnQgZWxlbWVudC4KLSAqLwotdm9pZAotZ3N0X2VibWxfd3JpdGVfc2ludCAoR3N0RWJtbFdyaXRlICogZWJtbCwgZ3VpbnQzMiBpZCwgZ2ludDY0IG51bSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50OCAqZGF0YV9zdGFydCwgKmRhdGFfZW5kOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICAvKiBpZiB0aGUgc2lnbmVkIG51bWJlciBpcyBvbiB0aGUgZWRnZSBvZiBhIGV4dHJhLWJ5dGUsCi0gICAqIHRoZW4gd2UnbGwgZmFsbCBvdmVyIHdoZW4gZGV0ZWN0aW5nIGl0LiBFeGFtcGxlOiBpZiBJCi0gICAqIGhhdmUgYSBudW1iZXIgKC0pMHg4MDAwIChHX01JTlNIT1JUKSwgdGhlbiBteSBhYnMoKTw8MQotICAgKiB3aWxsIGJlIDB4MTAwMDA7IHRoaXMgaXMgR19NQVhVU0hPUlQrMSEgU286IGlmICg8MCkgLTEuICovCi0gIGd1aW50NjQgdW51bSA9IChudW0gPCAwID8gKC1udW0gLSAxKSA8PCAxIDogbnVtIDw8IDEpOwotICBndWludCBzaXplID0gZ3N0X2VibWxfd3JpdGVfZ2V0X3VpbnRfc2l6ZSAodW51bSk7Ci0KLSAgYnVmID0gZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9uZXcgKGVibWwsICZtYXAsIHNpemVvZiAobnVtKSk7Ci0gIGRhdGFfZW5kID0gZGF0YV9zdGFydCA9IG1hcC5kYXRhOwotCi0gIC8qIG1ha2UgdW5zaWduZWQgKi8KLSAgaWYgKG51bSA+PSAwKSB7Ci0gICAgdW51bSA9IG51bTsKLSAgfSBlbHNlIHsKLSAgICB1bnVtID0gKChndWludDY0KSAweDgwKSA8PCAoKHNpemUgLSAxKSAqIDgpOwotICAgIHVudW0gKz0gbnVtOwotICAgIHVudW0gfD0gKChndWludDY0KSAweDgwKSA8PCAoKHNpemUgLSAxKSAqIDgpOwotICB9Ci0KLSAgLyogd3JpdGUgKi8KLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9pZCAoJmRhdGFfZW5kLCBpZCk7Ci0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfc2l6ZSAoJmRhdGFfZW5kLCBzaXplKTsKLSAgZ3N0X2VibWxfd3JpdGVfc2V0X3VpbnQgKCZkYXRhX2VuZCwgdW51bSwgc2l6ZSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1ZiwgKGRhdGFfZW5kIC0gZGF0YV9zdGFydCkpOwotCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfcHVzaCAoZWJtbCwgYnVmLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9mbG9hdDoKLSAqIEBlYm1sOiAjR3N0RWJtbFdyaXRlCi0gKiBAaWQ6IEVsZW1lbnQgSUQuCi0gKiBAbnVtOiBOdW1iZXIgdG8gYmUgd3JpdHRlbi4KLSAqCi0gKiBXcml0ZSBmbG9hdCBlbGVtZW50LgotICovCi12b2lkCi1nc3RfZWJtbF93cml0ZV9mbG9hdCAoR3N0RWJtbFdyaXRlICogZWJtbCwgZ3VpbnQzMiBpZCwgZ2RvdWJsZSBudW0pCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhX3N0YXJ0LCAqZGF0YV9lbmQ7Ci0KLSAgYnVmID0gZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9uZXcgKGVibWwsICZtYXAsIHNpemVvZiAobnVtKSk7Ci0gIGRhdGFfZW5kID0gZGF0YV9zdGFydCA9IG1hcC5kYXRhOwotCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfaWQgKCZkYXRhX2VuZCwgaWQpOwotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3NpemUgKCZkYXRhX2VuZCwgOCk7Ci0gIG51bSA9IEdET1VCTEVfVE9fQkUgKG51bSk7Ci0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfZGF0YSAoJmRhdGFfZW5kLCAoZ3VpbnQ4ICopICYgbnVtLCA4KTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoYnVmLCAoZGF0YV9lbmQgLSBkYXRhX3N0YXJ0KSk7Ci0KLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9wdXNoIChlYm1sLCBidWYsIGRhdGFfc3RhcnQsIGRhdGFfZW5kKTsKLX0KLQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX2FzY2lpOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBpZDogRWxlbWVudCBJRC4KLSAqIEBzdHI6IFN0cmluZyB0byBiZSB3cml0dGVuLgotICoKLSAqIFdyaXRlIHN0cmluZyBlbGVtZW50LgotICovCi12b2lkCi1nc3RfZWJtbF93cml0ZV9hc2NpaSAoR3N0RWJtbFdyaXRlICogZWJtbCwgZ3VpbnQzMiBpZCwgY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci0gIGdpbnQgbGVuID0gc3RybGVuIChzdHIpICsgMTsgIC8qIGFkZCB0cmFpbGluZyAnXDAnICovCi0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhX3N0YXJ0LCAqZGF0YV9lbmQ7Ci0KLSAgYnVmID0gZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9uZXcgKGVibWwsICZtYXAsIGxlbik7Ci0gIGRhdGFfZW5kID0gZGF0YV9zdGFydCA9IG1hcC5kYXRhOwotCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfaWQgKCZkYXRhX2VuZCwgaWQpOwotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3NpemUgKCZkYXRhX2VuZCwgbGVuKTsKLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9kYXRhICgmZGF0YV9lbmQsIChndWludDggKikgc3RyLCBsZW4pOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBnc3RfYnVmZmVyX3NldF9zaXplIChidWYsIChkYXRhX2VuZCAtIGRhdGFfc3RhcnQpKTsKLQotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3B1c2ggKGVibWwsIGJ1ZiwgZGF0YV9zdGFydCwgZGF0YV9lbmQpOwotfQotCi0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfdXRmODoKLSAqIEBlYm1sOiAjR3N0RWJtbFdyaXRlCi0gKiBAaWQ6IEVsZW1lbnQgSUQuCi0gKiBAc3RyOiBTdHJpbmcgdG8gYmUgd3JpdHRlbi4KLSAqCi0gKiBXcml0ZSB1dGY4IGVuY29kZWQgc3RyaW5nIGVsZW1lbnQuCi0gKi8KLXZvaWQKLWdzdF9lYm1sX3dyaXRlX3V0ZjggKEdzdEVibWxXcml0ZSAqIGVibWwsIGd1aW50MzIgaWQsIGNvbnN0IGdjaGFyICogc3RyKQotewotICBnc3RfZWJtbF93cml0ZV9hc2NpaSAoZWJtbCwgaWQsIHN0cik7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9kYXRlOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBpZDogRWxlbWVudCBJRC4KLSAqIEBkYXRlOiBEYXRlIGluIHNlY29uZHMgc2luY2UgdGhlIHVuaXggZXBvY2guCi0gKgotICogV3JpdGUgZGF0ZSBlbGVtZW50LgotICovCi12b2lkCi1nc3RfZWJtbF93cml0ZV9kYXRlIChHc3RFYm1sV3JpdGUgKiBlYm1sLCBndWludDMyIGlkLCBnaW50NjQgZGF0ZSkKLXsKLSAgZ3N0X2VibWxfd3JpdGVfc2ludCAoZWJtbCwgaWQsIChkYXRlIC0gR1NUX0VCTUxfREFURV9PRkZTRVQpICogR1NUX1NFQ09ORCk7Ci19Ci0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0OgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBpZDogRWxlbWVudCBJRC4KLSAqCi0gKiBTdGFydCB3aXJpdGluZyBtYXRlciBlbGVtZW50LgotICoKLSAqIE1hc3RlciB3cml0aW5nIGlzIGFubm95aW5nLiBXZSB1c2UgYSBzaXplIG1hcmtlciBvZgotICogdGhlIG1heC4gYWxsb3dlZCBsZW5ndGgsIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGZpbGwgaXQKLSAqIGluIHZhbGlkbHkuIAotICoKLSAqIFJldHVybnM6IE1hc3RlciBzdGFydGluZyBwb3NpdGlvbi4KLSAqLwotZ3VpbnQ2NAotZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChHc3RFYm1sV3JpdGUgKiBlYm1sLCBndWludDMyIGlkKQotewotICBndWludDY0IHBvcyA9IGVibWwtPnBvczsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGFfc3RhcnQsICpkYXRhX2VuZDsKLQotICBidWYgPSBnc3RfZWJtbF93cml0ZV9lbGVtZW50X25ldyAoZWJtbCwgJm1hcCwgMCk7Ci0gIGRhdGFfZW5kID0gZGF0YV9zdGFydCA9IG1hcC5kYXRhOwotCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfaWQgKCZkYXRhX2VuZCwgaWQpOwotICBwb3MgKz0gZGF0YV9lbmQgLSBkYXRhX3N0YXJ0OwotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3NpemUgKCZkYXRhX2VuZCwgR1NUX0VCTUxfU0laRV9VTktOT1dOKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoYnVmLCAoZGF0YV9lbmQgLSBkYXRhX3N0YXJ0KSk7Ci0KLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9wdXNoIChlYm1sLCBidWYsIGRhdGFfc3RhcnQsIGRhdGFfZW5kKTsKLQotICByZXR1cm4gcG9zOwotfQotCi0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaF9mdWxsOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBzdGFydHBvczogTWFzdGVyIHN0YXJ0aW5nIHBvc2l0aW9uLgotICoKLSAqIEZpbmlzaCB3cml0aW5nIG1hc3RlciBlbGVtZW50LiAgU2l6ZSBvZiBtYXN0ZXIgZWxlbWVudCBpcyBkaWZmZXJlbmNlIGJldHdlZW4KLSAqIGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBlbGVtZW50IHN0YXJ0LCBhbmQgQGV4dHJhX3NpemUgYWRkZWQgdG8gdGhpcy4KLSAqLwotdm9pZAotZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaF9mdWxsIChHc3RFYm1sV3JpdGUgKiBlYm1sLCBndWludDY0IHN0YXJ0cG9zLAotICAgIGd1aW50NjQgZXh0cmFfc2l6ZSkKLXsKLSAgZ3VpbnQ2NCBwb3MgPSBlYm1sLT5wb3M7Ci0gIGd1aW50OCAqZGF0YSA9IGdfbWFsbG9jICg4KTsKLSAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCA4KTsKLQotICBnc3RfZWJtbF93cml0ZV9zZWVrIChlYm1sLCBzdGFydHBvcyk7Ci0KLSAgR1NUX1dSSVRFX1VJTlQ2NF9CRSAoZGF0YSwKLSAgICAgIChHX0dJTlQ2NF9DT05TVEFOVCAoMSkgPDwgNTYpIHwgKHBvcyAtIHN0YXJ0cG9zIC0gOCArIGV4dHJhX3NpemUpKTsKLQotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3B1c2ggKGVibWwsIGJ1ZiwgTlVMTCwgTlVMTCk7Ci0gIGdzdF9lYm1sX3dyaXRlX3NlZWsgKGVibWwsIHBvcyk7Ci19Ci0KLXZvaWQKLWdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKEdzdEVibWxXcml0ZSAqIGVibWwsIGd1aW50NjQgc3RhcnRwb3MpCi17Ci0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2hfZnVsbCAoZWJtbCwgc3RhcnRwb3MsIDApOwotfQotCi0vKioKLSAqIGdzdF9lYm1sX3dyaXRlX2JpbmFyeToKLSAqIEBlYm1sOiAjR3N0RWJtbFdyaXRlCi0gKiBAaWQ6IEVsZW1lbnQgSUQuCi0gKiBAYmluYXJ5OiBEYXRhIHRvIGJlIHdyaXR0ZW4uCi0gKiBAbGVuZ3RoOiBMZW5ndGggb2YgdGhlIGRhdGEKLSAqCi0gKiBXcml0ZSBhbiBlbGVtZW50IHdpdGggYmluYXJ5IGRhdGEuCi0gKi8KLXZvaWQKLWdzdF9lYm1sX3dyaXRlX2JpbmFyeSAoR3N0RWJtbFdyaXRlICogZWJtbCwKLSAgICBndWludDMyIGlkLCBndWludDggKiBiaW5hcnksIGd1aW50NjQgbGVuZ3RoKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YV9zdGFydCwgKmRhdGFfZW5kOwotCi0gIGJ1ZiA9IGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfbmV3IChlYm1sLCAmbWFwLCBsZW5ndGgpOwotICBkYXRhX2VuZCA9IGRhdGFfc3RhcnQgPSBtYXAuZGF0YTsKLQotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X2lkICgmZGF0YV9lbmQsIGlkKTsKLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9zaXplICgmZGF0YV9lbmQsIGxlbmd0aCk7Ci0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfZGF0YSAoJmRhdGFfZW5kLCBiaW5hcnksIGxlbmd0aCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfc2V0X3NpemUgKGJ1ZiwgKGRhdGFfZW5kIC0gZGF0YV9zdGFydCkpOwotCi0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfcHVzaCAoZWJtbCwgYnVmLCBkYXRhX3N0YXJ0LCBkYXRhX2VuZCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9idWZmZXJfaGVhZGVyOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBpZDogRWxlbWVudCBJRC4KLSAqIEBsZW5ndGg6IExlbmd0aCBvZiB0aGUgZGF0YQotICogCi0gKiBXcml0ZSBoZWFkZXIgb2YgdGhlIGJpbmFyeSBlbGVtZW50ICh1c2Ugd2l0aCBnc3RfZWJtbF93cml0ZV9idWZmZXIgZnVuY3Rpb24pLgotICogCi0gKiBGb3IgdGhpbmdzIGxpa2UgdmlkZW8gZnJhbWVzIGFuZCBhdWRpbyBzYW1wbGVzLAotICogeW91IHdhbnQgdG8gdXNlIHRoaXMgZnVuY3Rpb24sIGFzIGl0IGRvZXNuJ3QgaGF2ZQotICogdGhlIG92ZXJoZWFkIG9mIG1lbWNweSgpIHRoYXQgb3RoZXIgZnVuY3Rpb25zCi0gKiBzdWNoIGFzIHdyaXRlX2JpbmFyeSgpIGRvIGhhdmUuCi0gKi8KLXZvaWQKLWdzdF9lYm1sX3dyaXRlX2J1ZmZlcl9oZWFkZXIgKEdzdEVibWxXcml0ZSAqIGVibWwsIGd1aW50MzIgaWQsIGd1aW50NjQgbGVuZ3RoKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YV9zdGFydCwgKmRhdGFfZW5kOwotCi0gIGJ1ZiA9IGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfbmV3IChlYm1sLCAmbWFwLCAwKTsKLSAgZGF0YV9lbmQgPSBkYXRhX3N0YXJ0ID0gbWFwLmRhdGE7Ci0KLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9pZCAoJmRhdGFfZW5kLCBpZCk7Ci0gIGdzdF9lYm1sX3dyaXRlX2VsZW1lbnRfc2l6ZSAoJmRhdGFfZW5kLCBsZW5ndGgpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBnc3RfYnVmZmVyX3NldF9zaXplIChidWYsIChkYXRhX2VuZCAtIGRhdGFfc3RhcnQpKTsKLQotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3B1c2ggKGVibWwsIGJ1ZiwgZGF0YV9zdGFydCwgZGF0YV9lbmQpOwotfQotCi0KLS8qKgotICogZ3N0X2VibWxfd3JpdGVfYnVmZmVyOgotICogQGVibWw6ICNHc3RFYm1sV3JpdGUKLSAqIEBidWY6ICNHc3RCdWZmZXIgY29pbnRhaW5pbmcgdGhlIGRhdGEuCi0gKgotICogV3JpdGUgIGJpbmFyeSBlbGVtZW50IChzZWUgZ3N0X2VibWxfd3JpdGVfYnVmZmVyX2hlYWRlcikuCi0gKi8KLXZvaWQKLWdzdF9lYm1sX3dyaXRlX2J1ZmZlciAoR3N0RWJtbFdyaXRlICogZWJtbCwgR3N0QnVmZmVyICogYnVmKQotewotICBnc3RfZWJtbF93cml0ZV9lbGVtZW50X3B1c2ggKGVibWwsIGJ1ZiwgTlVMTCwgTlVMTCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfZWJtbF9yZXBsYWNlX3VpbnQ6Ci0gKiBAZWJtbDogI0dzdEVibWxXcml0ZQotICogQHBvczogUG9zaXRpb24gb2YgdGhlIHVpbnQgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQuCi0gKiBAbnVtOiBOZXcgdmFsdWUuCi0gKgotICogUmVwbGFjZSB1aW50IHdpdGggYSBuZXcgdmFsdWUuCi0gKiAKLSAqIFdoZW4gcmVwbGFjaW5nIGEgdWludCwgd2UgYXNzdW1lIHRoYXQgaXQgaXMgKmFsd2F5cyoKLSAqIDgtYnl0ZSwgc2luY2UgdGhhdCdzIHRoZSBzYWZlc3QgZ3Vlc3Mgd2UgY2FuIGRvLiBUaGlzCi0gKiBpcyBqdXN0IGZvciBzaW1wbGljaXR5LgotICoKLSAqIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nCi0gKiBwcm9wZXIuIFRoaXMgaXMgYSBjcnVkZSBoYWNrLgotICovCi12b2lkCi1nc3RfZWJtbF9yZXBsYWNlX3VpbnQgKEdzdEVibWxXcml0ZSAqIGVibWwsIGd1aW50NjQgcG9zLCBndWludDY0IG51bSkKLXsKLSAgZ3VpbnQ2NCBvbGRwb3MgPSBlYm1sLT5wb3M7Ci0gIGd1aW50OCAqZGF0YV9zdGFydCwgKmRhdGFfZW5kOwotICBHc3RCdWZmZXIgKmJ1ZjsKLQotICBkYXRhX3N0YXJ0ID0gZ19tYWxsb2MgKDgpOwotICBkYXRhX2VuZCA9IGRhdGFfc3RhcnQ7Ci0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGRhdGFfc3RhcnQsIDgpOwotCi0gIGdzdF9lYm1sX3dyaXRlX3NlZWsgKGVibWwsIHBvcyk7Ci0gIGdzdF9lYm1sX3dyaXRlX3NldF91aW50ICgmZGF0YV9lbmQsIG51bSwgOCk7Ci0KLSAgZ3N0X2VibWxfd3JpdGVfZWxlbWVudF9wdXNoIChlYm1sLCBidWYsIGRhdGFfc3RhcnQsIGRhdGFfZW5kKTsKLSAgZ3N0X2VibWxfd3JpdGVfc2VlayAoZWJtbCwgb2xkcG9zKTsKLX0KLQotLyoqCi0gKiBnc3RfZWJtbF93cml0ZV9oZWFkZXI6Ci0gKiBAZWJtbDogI0dzdEVibWxXcml0ZQotICogQGRvY3R5cGU6IERvY3VtZW50IHR5cGUuCi0gKiBAdmVyc2lvbjogRG9jdW1lbnQgdHlwZSB2ZXJzaW9uLgotICogCi0gKiBXcml0ZSBFQk1MIGhlYWRlci4KLSAqLwotdm9pZAotZ3N0X2VibWxfd3JpdGVfaGVhZGVyIChHc3RFYm1sV3JpdGUgKiBlYm1sLCBjb25zdCBnY2hhciAqIGRvY3R5cGUsCi0gICAgZ3VpbnQgdmVyc2lvbikKLXsKLSAgZ3VpbnQ2NCBwb3M7Ci0KLSAgLyogd3JpdGUgdGhlIGJhc2ljIEVCTUwgaGVhZGVyICovCi0gIGdzdF9lYm1sX3dyaXRlX3NldF9jYWNoZSAoZWJtbCwgMHg0MCk7Ci0gIHBvcyA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX0VCTUxfSURfSEVBREVSKTsKLSNpZiAoR1NUX0VCTUxfVkVSU0lPTiAhPSAxKQotICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfRUJNTF9JRF9FQk1MVkVSU0lPTiwgR1NUX0VCTUxfVkVSU0lPTik7Ci0gIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9FQk1MX0lEX0VCTUxSRUFEVkVSU0lPTiwgR1NUX0VCTUxfVkVSU0lPTik7Ci0jZW5kaWYKLSNpZiAwCi0gIC8qIHdlIGRvbid0IHdyaXRlIHRoZXNlIHVudGlsIHRoZXkncmUgIm5vbi1kZWZhdWx0IiAobmV2ZXIhKSAqLwotICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfRUJNTF9JRF9FQk1MTUFYSURMRU5HVEgsIHNpemVvZiAoZ3VpbnQzMikpOwotICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfRUJNTF9JRF9FQk1MTUFYU0laRUxFTkdUSCwgc2l6ZW9mIChndWludDY0KSk7Ci0jZW5kaWYKLSAgZ3N0X2VibWxfd3JpdGVfYXNjaWkgKGVibWwsIEdTVF9FQk1MX0lEX0RPQ1RZUEUsIGRvY3R5cGUpOwotICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfRUJNTF9JRF9ET0NUWVBFVkVSU0lPTiwgdmVyc2lvbik7Ci0gIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9FQk1MX0lEX0RPQ1RZUEVSRUFEVkVSU0lPTiwgdmVyc2lvbik7Ci0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIHBvcyk7Ci0gIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlIChlYm1sLCBGQUxTRSwgMCk7Ci19CmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oIGIvZ3N0L21hdHJvc2thL2VibWwtd3JpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxNDNmZS4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvZWJtbC13cml0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qIEdTdHJlYW1lciBFQk1MIEkvTwotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogKGMpIDIwMDUgTWljaGFsIEJlbmVzIDxtaWNoYWwuYmVuZXNAeGVyaXMuY3o+Ci0gKgotICogZWJtbC13cml0ZS5jOiB3cml0ZSBFQk1MIGRhdGEgdG8gZmlsZS9zdHJlYW0KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0VCTUxfV1JJVEVfSF9fCi0jZGVmaW5lIF9fR1NUX0VCTUxfV1JJVEVfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0VCTUxfV1JJVEUgXAotICAoZ3N0X2VibWxfd3JpdGVfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9FQk1MX1dSSVRFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9FQk1MX1dSSVRFLCBHc3RFYm1sV3JpdGUpKQotI2RlZmluZSBHU1RfRUJNTF9XUklURV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0VCTUxfV1JJVEUsIEdzdEVibWxXcml0ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0VCTUxfV1JJVEUob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX0VCTUxfV1JJVEUpKQotI2RlZmluZSBHU1RfSVNfRUJNTF9XUklURV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX0VCTUxfV1JJVEUpKQotI2RlZmluZSBHU1RfRUJNTF9XUklURV9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfRUJNTF9XUklURSwgR3N0RWJtbFdyaXRlQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RWJtbFdyaXRlIHsKLSAgR3N0T2JqZWN0IG9iamVjdDsKLQotICBHc3RQYWQgKnNyY3BhZDsKLSAgZ3VpbnQ2NCBwb3M7Ci0gIGd1aW50NjQgbGFzdF9wb3M7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgR3N0Qnl0ZVdyaXRlciAqY2FjaGU7Ci0gIGd1aW50NjQgY2FjaGVfcG9zOwotCi0gIEdzdEZsb3dSZXR1cm4gbGFzdF93cml0ZV9yZXN1bHQ7Ci0KLSAgZ2Jvb2xlYW4gd3JpdGluZ19zdHJlYW1oZWFkZXI7Ci0gIEdzdEJ5dGVXcml0ZXIgKnN0cmVhbWhlYWRlcjsKLSAgZ3VpbnQ2NCBzdHJlYW1oZWFkZXJfcG9zOwotCi0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZ2Jvb2xlYW4gc3RyZWFtYWJsZTsKLX0gR3N0RWJtbFdyaXRlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0RWJtbFdyaXRlQ2xhc3MgewotICBHc3RPYmplY3RDbGFzcyBwYXJlbnQ7Ci19IEdzdEVibWxXcml0ZUNsYXNzOwotCi1HVHlwZSAgIGdzdF9lYm1sX3dyaXRlX2dldF90eXBlICAgICAgKHZvaWQpOwotCi1Hc3RFYm1sV3JpdGUgKmdzdF9lYm1sX3dyaXRlX25ldyAgICAgKEdzdFBhZCAqc3JjcGFkKTsKLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfcmVzZXQgICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sKTsKLQotR3N0Rmxvd1JldHVybiBnc3RfZWJtbF9sYXN0X3dyaXRlX3Jlc3VsdCAoR3N0RWJtbFdyaXRlICplYm1sKTsKLQotLyogVXNlZCB0byBjcmVhdGUgc3RyZWFtaGVhZGVycyAqLwotdm9pZCAgICBnc3RfZWJtbF9zdGFydF9zdHJlYW1oZWFkZXIgIChHc3RFYm1sV3JpdGUgKmVibWwpOwotR3N0QnVmZmVyKiAgICBnc3RfZWJtbF9zdG9wX3N0cmVhbWhlYWRlciAgIChHc3RFYm1sV3JpdGUgKmVibWwpOwotCi0vKgotICogQ2FjaGluZyBtZWFucyB0aGF0IHdlIGRvIG5vdCBwdXNoIG9uZSBidWZmZXIgZm9yCi0gKiBlYWNoIGVsZW1lbnQsIGJ1dCBmaWxsIHRoaXMgb25lIHVudGlsIGEgZmx1c2guCi0gKi8KLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfc2V0X2NhY2hlICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgIHNpemUpOwotdm9pZCAgICBnc3RfZWJtbF93cml0ZV9mbHVzaF9jYWNoZSAgIChHc3RFYm1sV3JpdGUgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGlzX2tleWZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKTsKLQotLyoKLSAqIFNlZWtpbmcuCi0gKi8KLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfc2VlayAgICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgIHBvcyk7Ci0KLS8qCi0gKiBEYXRhIHdyaXRpbmcuIAotICovCi12b2lkICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgICAgICAgICAgKEdzdEVibWxXcml0ZSAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAgICAgICBudW0pOwotdm9pZCAgICBnc3RfZWJtbF93cml0ZV9zaW50ICAgICAgICAgIChHc3RFYm1sV3JpdGUgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICAgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQ2NCAgICAgICAgbnVtKTsKLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfZmxvYXQgICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyICAgICAgIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICAgICAgIG51bSk7Ci12b2lkICAgIGdzdF9lYm1sX3dyaXRlX2FzY2lpICAgICAgICAgKEdzdEVibWxXcml0ZSAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICpzdHIpOwotdm9pZCAgICBnc3RfZWJtbF93cml0ZV91dGY4ICAgICAgICAgIChHc3RFYm1sV3JpdGUgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICAgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAqc3RyKTsKLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfZGF0ZSAgICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyICAgICAgIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgICAgICAgIGRhdGUpOwotZ3VpbnQ2NCBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgIChHc3RFYm1sV3JpdGUgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICAgaWQpOwotdm9pZCAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoIChHc3RFYm1sV3JpdGUgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgc3RhcnRwb3MpOwotdm9pZCAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoX2Z1bGwgKEdzdEVibWxXcml0ZSAqIGVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgc3RhcnRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgZXh0cmFfc2l6ZSk7Ci12b2lkICAgIGdzdF9lYm1sX3dyaXRlX2JpbmFyeSAgICAgICAgKEdzdEVibWxXcml0ZSAqZWJtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAgICBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VjaGFyICAgICAgICpiaW5hcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgbGVuZ3RoKTsKLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfaGVhZGVyICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgKmRvY3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgdmVyc2lvbik7Ci0KLS8qCi0gKiBOb3RlOiB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgb25seSBmb3IgbWVkaWEgZGF0YS4KLSAqLwotdm9pZCAgICBnc3RfZWJtbF93cml0ZV9idWZmZXJfaGVhZGVyIChHc3RFYm1sV3JpdGUgKmVibWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgICAgICAgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgbGVuZ3RoKTsKLXZvaWQgICAgZ3N0X2VibWxfd3JpdGVfYnVmZmVyICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RCdWZmZXIgICAgKmRhdGEpOwotCi0vKgotICogQSBoYWNrLCBiYXNpY2FsbHkuLi4gU2VlIG1hdHJvc2thLW11eC5jLiBJIHNob3VsZCBhY3R1YWxseQotICogbWFrZSBhIG5pY2UgX3JlcGxhY2VfZWxlbWVudF93aXRoX3NpemUoKSBvciBzbywgYnV0IHRoaXMKLSAqIHdvcmtzIGZvciBub3cuCi0gKi8KLXZvaWQgICAgZ3N0X2VibWxfcmVwbGFjZV91aW50ICAgICAgICAoR3N0RWJtbFdyaXRlICplYm1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAgICAgICBudW0pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRUJNTF9XUklURV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tYXRyb3NrYS9sem8uYyBiL2dzdC9tYXRyb3NrYS9sem8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxZTg0OC4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvbHpvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotLyoKLSAqIExaTyAxeCBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgUmVpbWFyIERvZWZmaW5nZXIKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsem8uaCIKLQotLyohIGRlZmluZSBpZiB3ZSBtYXkgd3JpdGUgdXAgdG8gMTIgYnl0ZXMgYmV5b25kIHRoZSBvdXRwdXQgYnVmZmVyICovCi0vKiAjZGVmaW5lIE9VVEJVRl9QQURERUQgMSAqLwotLyohIGRlZmluZSBpZiB3ZSBtYXkgcmVhZCB1cCB0byA4IGJ5dGVzIGJleW9uZCB0aGUgaW5wdXQgYnVmZmVyICovCi0vKiAjZGVmaW5lIElOQlVGX1BBRERFRCAxICovCi10eXBlZGVmIHN0cnVjdCBMWk9Db250ZXh0Ci17Ci0gIGNvbnN0IGd1aW50OCAqaW4sICppbl9lbmQ7Ci0gIGd1aW50OCAqb3V0X3N0YXJ0LCAqb3V0LCAqb3V0X2VuZDsKLSAgaW50IGVycm9yOwotfSBMWk9Db250ZXh0OwotCi0vKgotICogXGJyaWVmIHJlYWQgb25lIGJ5dGUgZnJvbSBpbnB1dCBidWZmZXIsIGF2b2lkaW5nIG92ZXJydW4KLSAqIFxyZXR1cm4gYnl0ZSByZWFkCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1nZXRfYnl0ZSAoTFpPQ29udGV4dCAqIGMpCi17Ci0gIGlmIChjLT5pbiA8IGMtPmluX2VuZCkKLSAgICByZXR1cm4gKmMtPmluKys7Ci0gIGMtPmVycm9yIHw9IExaT19JTlBVVF9ERVBMRVRFRDsKLSAgcmV0dXJuIDE7Ci19Ci0KLSNpZmRlZiBJTkJVRl9QQURERUQKLSNkZWZpbmUgR0VUQihjKSAoKihjKS5pbisrKQotI2Vsc2UKLSNkZWZpbmUgR0VUQihjKSBnZXRfYnl0ZSgmKGMpKQotI2VuZGlmCi0KLS8qCi0gKiBcYnJpZWYgZGVjb2RlIGEgbGVuZ3RoIHZhbHVlIGluIHRoZSBjb2RpbmcgdXNlZCBieSBsem8KLSAqIFxwYXJhbSB4IHByZXZpb3VzIGJ5dGUgdmFsdWUKLSAqIFxwYXJhbSBtYXNrIGJpdHMgdXNlZCBmcm9tIHgKLSAqIFxyZXR1cm4gZGVjb2RlZCBsZW5ndGggdmFsdWUKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLWdldF9sZW4gKExaT0NvbnRleHQgKiBjLCBpbnQgeCwgaW50IG1hc2spCi17Ci0gIGludCBjbnQgPSB4ICYgbWFzazsKLSAgaWYgKCFjbnQpIHsKLSAgICB3aGlsZSAoISh4ID0gZ2V0X2J5dGUgKGMpKSkKLSAgICAgIGNudCArPSAyNTU7Ci0gICAgY250ICs9IG1hc2sgKyB4OwotICB9Ci0gIHJldHVybiBjbnQ7Ci19Ci0KLS8qI2RlZmluZSBVTkFMSUdORURfTE9BRFNUT1JFICovCi0jZGVmaW5lIEJVSUxUSU5fTUVNQ1BZCi0jaWZkZWYgVU5BTElHTkVEX0xPQURTVE9SRQotI2RlZmluZSBDT1BZMihkLCBzKSAqKGd1aW50MTYgKikoZCkgPSAqKGd1aW50MTYgKikocyk7Ci0jZGVmaW5lIENPUFk0KGQsIHMpICooZ3VpbnQzMiAqKShkKSA9ICooZ3VpbnQzMiAqKShzKTsKLSNlbGlmIGRlZmluZWQoQlVJTFRJTl9NRU1DUFkpCi0jZGVmaW5lIENPUFkyKGQsIHMpIG1lbWNweShkLCBzLCAyKTsKLSNkZWZpbmUgQ09QWTQoZCwgcykgbWVtY3B5KGQsIHMsIDQpOwotI2Vsc2UKLSNkZWZpbmUgQ09QWTIoZCwgcykgKGQpWzBdID0gKHMpWzBdOyAoZClbMV0gPSAocylbMV07Ci0jZGVmaW5lIENPUFk0KGQsIHMpIChkKVswXSA9IChzKVswXTsgKGQpWzFdID0gKHMpWzFdOyAoZClbMl0gPSAocylbMl07IChkKVszXSA9IChzKVszXTsKLSNlbmRpZgotCi0vKgotICogXGJyaWVmIGNvcHkgYnl0ZXMgZnJvbSBpbnB1dCB0byBvdXRwdXQgYnVmZmVyIHdpdGggY2hlY2tpbmcKLSAqIFxwYXJhbSBjbnQgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHksIG11c3QgYmUgPj0gMAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNvcHkgKExaT0NvbnRleHQgKiBjLCBpbnQgY250KQotewotICByZWdpc3RlciBjb25zdCBndWludDggKnNyYyA9IGMtPmluOwotICByZWdpc3RlciBndWludDggKmRzdCA9IGMtPm91dDsKLSAgaWYgKGNudCA+IGMtPmluX2VuZCAtIHNyYykgewotICAgIGNudCA9IE1BWCAoYy0+aW5fZW5kIC0gc3JjLCAwKTsKLSAgICBjLT5lcnJvciB8PSBMWk9fSU5QVVRfREVQTEVURUQ7Ci0gIH0KLSAgaWYgKGNudCA+IGMtPm91dF9lbmQgLSBkc3QpIHsKLSAgICBjbnQgPSBNQVggKGMtPm91dF9lbmQgLSBkc3QsIDApOwotICAgIGMtPmVycm9yIHw9IExaT19PVVRQVVRfRlVMTDsKLSAgfQotI2lmIGRlZmluZWQoSU5CVUZfUEFEREVEKSAmJiBkZWZpbmVkKE9VVEJVRl9QQURERUQpCi0gIENPUFk0IChkc3QsIHNyYyk7Ci0gIHNyYyArPSA0OwotICBkc3QgKz0gNDsKLSAgY250IC09IDQ7Ci0gIGlmIChjbnQgPiAwKQotI2VuZGlmCi0gICAgbWVtY3B5IChkc3QsIHNyYywgY250KTsKLSAgYy0+aW4gPSBzcmMgKyBjbnQ7Ci0gIGMtPm91dCA9IGRzdCArIGNudDsKLX0KLQotLyoKLSAqIFxicmllZiBjb3B5IHByZXZpb3VzbHkgZGVjb2RlZCBieXRlcyB0byBjdXJyZW50IHBvc2l0aW9uCi0gKiBccGFyYW0gYmFjayBob3cgbWFueSBieXRlcyBiYWNrIHdlIHN0YXJ0Ci0gKiBccGFyYW0gY250IG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBtdXN0IGJlID49IDAKLSAqCi0gKiBjbnQgPiBiYWNrIGlzIHZhbGlkLCB0aGlzIHdpbGwgY29weSB0aGUgYnl0ZXMgd2UganVzdCBjb3BpZWQsCi0gKiB0aHVzIGNyZWF0aW5nIGEgcmVwZWF0aW5nIHBhdHRlcm4gd2l0aCBhIHBlcmlvZCBsZW5ndGggb2YgYmFjay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1jb3B5X2JhY2twdHIgKExaT0NvbnRleHQgKiBjLCBpbnQgYmFjaywgaW50IGNudCkKLXsKLSAgcmVnaXN0ZXIgY29uc3QgZ3VpbnQ4ICpzcmMgPSAmYy0+b3V0Wy1iYWNrXTsKLSAgcmVnaXN0ZXIgZ3VpbnQ4ICpkc3QgPSBjLT5vdXQ7Ci0gIGlmIChzcmMgPCBjLT5vdXRfc3RhcnQgfHwgc3JjID4gZHN0KSB7Ci0gICAgYy0+ZXJyb3IgfD0gTFpPX0lOVkFMSURfQkFDS1BUUjsKLSAgICByZXR1cm47Ci0gIH0KLSAgaWYgKGNudCA+IGMtPm91dF9lbmQgLSBkc3QpIHsKLSAgICBjbnQgPSBNQVggKGMtPm91dF9lbmQgLSBkc3QsIDApOwotICAgIGMtPmVycm9yIHw9IExaT19PVVRQVVRfRlVMTDsKLSAgfQotICBpZiAoYmFjayA9PSAxKSB7Ci0gICAgbWVtc2V0IChkc3QsICpzcmMsIGNudCk7Ci0gICAgZHN0ICs9IGNudDsKLSAgfSBlbHNlIHsKLSNpZmRlZiBPVVRCVUZfUEFEREVECi0gICAgQ09QWTIgKGRzdCwgc3JjKTsKLSAgICBDT1BZMiAoZHN0ICsgMiwgc3JjICsgMik7Ci0gICAgc3JjICs9IDQ7Ci0gICAgZHN0ICs9IDQ7Ci0gICAgY250IC09IDQ7Ci0gICAgaWYgKGNudCA+IDApIHsKLSAgICAgIENPUFkyIChkc3QsIHNyYyk7Ci0gICAgICBDT1BZMiAoZHN0ICsgMiwgc3JjICsgMik7Ci0gICAgICBDT1BZMiAoZHN0ICsgNCwgc3JjICsgNCk7Ci0gICAgICBDT1BZMiAoZHN0ICsgNiwgc3JjICsgNik7Ci0gICAgICBzcmMgKz0gODsKLSAgICAgIGRzdCArPSA4OwotICAgICAgY250IC09IDg7Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKGNudCA+IDApIHsKLSAgICAgIGludCBibG9ja2xlbiA9IGJhY2s7Ci0gICAgICB3aGlsZSAoY250ID4gYmxvY2tsZW4pIHsKLSAgICAgICAgbWVtY3B5IChkc3QsIHNyYywgYmxvY2tsZW4pOwotICAgICAgICBkc3QgKz0gYmxvY2tsZW47Ci0gICAgICAgIGNudCAtPSBibG9ja2xlbjsKLSAgICAgICAgYmxvY2tsZW4gPDw9IDE7Ci0gICAgICB9Ci0gICAgICBtZW1jcHkgKGRzdCwgc3JjLCBjbnQpOwotICAgIH0KLSAgICBkc3QgKz0gY250OwotICB9Ci0gIGMtPm91dCA9IGRzdDsKLX0KLQotLyoKLSAqIFxicmllZiBkZWNvZGUgTFpPIDF4IGNvbXByZXNzZWQgZGF0YQotICogXHBhcmFtIG91dCBvdXRwdXQgYnVmZmVyCi0gKiBccGFyYW0gb3V0bGVuIHNpemUgb2Ygb3V0cHV0IGJ1ZmZlciwgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgYXJlIHJldHVybmVkIGhlcmUKLSAqIFxwYXJhbSBpbiBpbnB1dCBidWZmZXIKLSAqIFxwYXJhbSBpbmxlbiBzaXplIG9mIGlucHV0IGJ1ZmZlciwgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgYXJlIHJldHVybmVkIGhlcmUKLSAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3IgZmxhZ3MsIHNlZSBsem8uaAotICoKLSAqIG1ha2Ugc3VyZSBhbGwgYnVmZmVycyBhcmUgYXBwcm9wcmlhdGVseSBwYWRkZWQsIGluIG11c3QgcHJvdmlkZQotICogTFpPX0lOUFVUX1BBRERJTkcsIG91dCBtdXN0IHByb3ZpZGUgTFpPX09VVFBVVF9QQURESU5HIGFkZGl0aW9uYWwgYnl0ZXMKLSAqLwotaW50Ci1sem8xeF9kZWNvZGUgKHZvaWQgKm91dCwgaW50ICpvdXRsZW4sIGNvbnN0IHZvaWQgKmluLCBpbnQgKmlubGVuKQotewotICBpbnQgc3RhdGUgPSAwOwotICBpbnQgeDsKLSAgTFpPQ29udGV4dCBjOwotICBjLmluID0gaW47Ci0gIGMuaW5fZW5kID0gKGNvbnN0IGd1aW50OCAqKSBpbiArICppbmxlbjsKLSAgYy5vdXQgPSBjLm91dF9zdGFydCA9IG91dDsKLSAgYy5vdXRfZW5kID0gKGd1aW50OCAqKSBvdXQgKyAqb3V0bGVuOwotICBjLmVycm9yID0gMDsKLSAgeCA9IEdFVEIgKGMpOwotICBpZiAoeCA+IDE3KSB7Ci0gICAgY29weSAoJmMsIHggLSAxNyk7Ci0gICAgeCA9IEdFVEIgKGMpOwotICAgIGlmICh4IDwgMTYpCi0gICAgICBjLmVycm9yIHw9IExaT19FUlJPUjsKLSAgfQotICBpZiAoYy5pbiA+IGMuaW5fZW5kKQotICAgIGMuZXJyb3IgfD0gTFpPX0lOUFVUX0RFUExFVEVEOwotICB3aGlsZSAoIWMuZXJyb3IpIHsKLSAgICBpbnQgY250LCBiYWNrOwotICAgIGlmICh4ID4gMTUpIHsKLSAgICAgIGlmICh4ID4gNjMpIHsKLSAgICAgICAgY250ID0gKHggPj4gNSkgLSAxOwotICAgICAgICBiYWNrID0gKEdFVEIgKGMpIDw8IDMpICsgKCh4ID4+IDIpICYgNykgKyAxOwotICAgICAgfSBlbHNlIGlmICh4ID4gMzEpIHsKLSAgICAgICAgY250ID0gZ2V0X2xlbiAoJmMsIHgsIDMxKTsKLSAgICAgICAgeCA9IEdFVEIgKGMpOwotICAgICAgICBiYWNrID0gKEdFVEIgKGMpIDw8IDYpICsgKHggPj4gMikgKyAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY250ID0gZ2V0X2xlbiAoJmMsIHgsIDcpOwotICAgICAgICBiYWNrID0gKDEgPDwgMTQpICsgKCh4ICYgOCkgPDwgMTEpOwotICAgICAgICB4ID0gR0VUQiAoYyk7Ci0gICAgICAgIGJhY2sgKz0gKEdFVEIgKGMpIDw8IDYpICsgKHggPj4gMik7Ci0gICAgICAgIGlmIChiYWNrID09ICgxIDw8IDE0KSkgewotICAgICAgICAgIGlmIChjbnQgIT0gMSkKLSAgICAgICAgICAgIGMuZXJyb3IgfD0gTFpPX0VSUk9SOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3RhdGUpIHsKLSAgICAgIGNudCA9IGdldF9sZW4gKCZjLCB4LCAxNSk7Ci0gICAgICBjb3B5ICgmYywgY250ICsgMyk7Ci0gICAgICB4ID0gR0VUQiAoYyk7Ci0gICAgICBpZiAoeCA+IDE1KQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGNudCA9IDE7Ci0gICAgICBiYWNrID0gKDEgPDwgMTEpICsgKEdFVEIgKGMpIDw8IDIpICsgKHggPj4gMikgKyAxOwotICAgIH0gZWxzZSB7Ci0gICAgICBjbnQgPSAwOwotICAgICAgYmFjayA9IChHRVRCIChjKSA8PCAyKSArICh4ID4+IDIpICsgMTsKLSAgICB9Ci0gICAgY29weV9iYWNrcHRyICgmYywgYmFjaywgY250ICsgMik7Ci0gICAgc3RhdGUgPSBjbnQgPSB4ICYgMzsKLSAgICBjb3B5ICgmYywgY250KTsKLSAgICB4ID0gR0VUQiAoYyk7Ci0gIH0KLSAgKmlubGVuID0gYy5pbl9lbmQgLSBjLmluOwotICBpZiAoYy5pbiA+IGMuaW5fZW5kKQotICAgICppbmxlbiA9IDA7Ci0gICpvdXRsZW4gPSBjLm91dF9lbmQgLSBjLm91dDsKLSAgcmV0dXJuIGMuZXJyb3I7Ci19Ci0KLSNpZmRlZiBURVNUCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxsem8vbHpvMXguaD4KLSNpbmNsdWRlICJsb2cuaCIKLSNkZWZpbmUgTUFYU1ogKDEwKjEwMjQqMTAyNCkKLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgRklMRSAqaW4gPSBmb3BlbiAoYXJndlsxXSwgInJiIik7Ci0gIGd1aW50OCAqb3JpZyA9IGF2X21hbGxvYyAoTUFYU1ogKyAxNik7Ci0gIGd1aW50OCAqY29tcCA9IGF2X21hbGxvYyAoMiAqIE1BWFNaICsgMTYpOwotICBndWludDggKmRlY29tcCA9IGF2X21hbGxvYyAoTUFYU1ogKyAxNik7Ci0gIGdzaXplIHMgPSBmcmVhZCAob3JpZywgMSwgTUFYU1osIGluKTsKLSAgbHpvX3VpbnQgY2xlbiA9IDA7Ci0gIGxvbmcgdG1wW0xaTzFYX01FTV9DT01QUkVTU107Ci0gIGludCBpbmxlbiwgb3V0bGVuOwotICBpbnQgaTsKLSAgYXZfbG9nX2xldmVsID0gQVZfTE9HX0RFQlVHOwotICBsem8xeF85OTlfY29tcHJlc3MgKG9yaWcsIHMsIGNvbXAsICZjbGVuLCB0bXApOwotICBmb3IgKGkgPSAwOyBpIDwgMzAwOyBpKyspIHsKLSAgICBTVEFSVF9USU1FUiBpbmxlbiA9IGNsZW47Ci0gICAgb3V0bGVuID0gTUFYU1o7Ci0jaWZkZWYgTElCTFpPCi0gICAgaWYgKGx6bzF4X2RlY29tcHJlc3Nfc2FmZSAoY29tcCwgaW5sZW4sIGRlY29tcCwgJm91dGxlbiwgTlVMTCkpCi0jZWxpZiBkZWZpbmVkKExJQkxaT19VTlNBRkUpCi0gICAgaWYgKGx6bzF4X2RlY29tcHJlc3MgKGNvbXAsIGlubGVuLCBkZWNvbXAsICZvdXRsZW4sIE5VTEwpKQotI2Vsc2UKLSAgICBpZiAobHpvMXhfZGVjb2RlIChkZWNvbXAsICZvdXRsZW4sIGNvbXAsICZpbmxlbikpCi0jZW5kaWYKLSAgICAgIGF2X2xvZyAoTlVMTCwgQVZfTE9HX0VSUk9SLCAiZGVjb21wcmVzc2lvbiBlcnJvclxuIik7Ci0gICAgU1RPUF9USU1FUiAoImx6b2QiKQotICB9Ci0gIGlmIChtZW1jbXAgKG9yaWcsIGRlY29tcCwgcykpCi0gICAgYXZfbG9nIChOVUxMLCBBVl9MT0dfRVJST1IsICJkZWNvbXByZXNzaW9uIGluY29ycmVjdFxuIik7Ci0gIGVsc2UKLSAgICBhdl9sb2cgKE5VTEwsIEFWX0xPR19FUlJPUiwgImRlY29tcHJlc3Npb24gb2tcbiIpOwotCi0gIGZjbG9zZSAoaW4pOwotICByZXR1cm4gMDsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL2x6by5oIGIvZ3N0L21hdHJvc2thL2x6by5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzc5NWY3Li4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS9sem8uaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBMWk8gMXggZGVjb21wcmVzc2lvbgotICogY29weXJpZ2h0IChjKSAyMDA2IFJlaW1hciBEb2VmZmluZ2VyCi0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgRkZNUEVHX0xaT19ICi0jZGVmaW5lIEZGTVBFR19MWk9fSAotCi0jZGVmaW5lIExaT19JTlBVVF9ERVBMRVRFRCAxCi0jZGVmaW5lIExaT19PVVRQVVRfRlVMTCAyCi0jZGVmaW5lIExaT19JTlZBTElEX0JBQ0tQVFIgNAotI2RlZmluZSBMWk9fRVJST1IgOAotCi0jZGVmaW5lIExaT19JTlBVVF9QQURESU5HIDgKLSNkZWZpbmUgTFpPX09VVFBVVF9QQURESU5HIDEyCi0KLWludCBsem8xeF9kZWNvZGUodm9pZCAqb3V0LCBpbnQgKm91dGxlbiwgY29uc3Qgdm9pZCAqaW4sIGludCAqaW5sZW4pOwotCi0jZW5kaWYgLyogRkZNUEVHX0xaT19IICovCmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtZGVtdXguYyBiL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDE5YTcwLi4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjA3NiArMCwwIEBACi0vKiBHU3RyZWFtZXIgTWF0cm9za2EgbXV4ZXIvZGVtdXhlcgotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogKGMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIChjKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqIChjKSAyMDExIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLSAqCi0gKiBtYXRyb3NrYS1kZW11eC5jOiBtYXRyb3NrYSBmaWxlL3N0cmVhbSBkZW11eGVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVE9ETzogY2hlY2sgQ1JDMzIgaWYgcHJlc2VudAotICogVE9ETzogdGhlcmUgY2FuIGJlIGEgc2VnbWVudCBhZnRlciB0aGUgZmlyc3Qgc2VnbWVudC4gSGFuZGxlIGxpa2UKLSAqICAgICAgIGNoYWluZWQgb2dncy4gRml4ZXMgIzMzNDA4MgotICogVE9ETzogVGVzdCBzYW1wbGVzOiBodHRwOi8vd3d3Lm1hdHJvc2thLm9yZy9zYW1wbGVzL21hdHJpeC9pbmRleC5odG1sCi0gKiAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9zYW1wbGVzLm1wbGF5ZXJocS5odS9NYXRyb3NrYS8KLSAqIFRPRE86IGNoZWNrIGlmIGRlbXV4aW5nIGlzIGRvbmUgY29ycmVjdCBmb3IgYWxsIGNvZGVjcyBhY2NvcmRpbmcgdG8gc3BlYwotICogVE9ETzogc2Vla2luZyB3aXRoIGluY29tcGxldGUgb3Igd2l0aG91dCBDVUUKLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tYXRyb3NrYWRlbXV4Ci0gKgotICogbWF0cm9za2FkZW11eCBkZW11eGVzIGEgTWF0cm9za2EgZmlsZSBpbnRvIHRoZSBkaWZmZXJlbnQgY29udGFpbmVkIHN0cmVhbXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249L3BhdGgvdG8vbWt2ICEgbWF0cm9za2FkZW11eCAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGRlbXV4ZXMgYSBNYXRyb3NrYSBmaWxlIGFuZCBvdXRwdXRzIHRoZSBjb250YWluZWQgVm9yYmlzIGF1ZGlvLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4KLQotLyogRm9yIEFWSSBjb21wYXRpYmlsaXR5IG1vZGUKLSAgIGFuZCBmb3IgZm91cmNjIHN0dWZmICovCi0jaW5jbHVkZSA8Z3N0L3JpZmYvcmlmZi1yZWFkLmg+Ci0jaW5jbHVkZSA8Z3N0L3JpZmYvcmlmZi1pZHMuaD4KLSNpbmNsdWRlIDxnc3QvcmlmZi9yaWZmLW1lZGlhLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgIm1hdHJvc2thLWRlbXV4LmgiCi0jaW5jbHVkZSAibWF0cm9za2EtaWRzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG1hdHJvc2thZGVtdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgbWF0cm9za2FkZW11eF9kZWJ1ZwotCi0jZGVmaW5lIERFQlVHX0VMRU1FTlRfU1RBUlQoZGVtdXgsIGVibWwsIGVsZW1lbnQpIFwKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlBhcnNpbmcgIiBlbGVtZW50ICIgZWxlbWVudCBhdCBvZmZzZXQgJSIgXAotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpKQotCi0jZGVmaW5lIERFQlVHX0VMRU1FTlRfU1RPUChkZW11eCwgZWJtbCwgZWxlbWVudCwgcmV0KSBcCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJQYXJzaW5nICIgZWxlbWVudCAiIGVsZW1lbnQgIiBcCi0gICAgICAgICIgZmluaXNoZWQgd2l0aCAnJXMnIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX01FVEFEQVRBLAotICBQUk9QX1NUUkVBTUlORk8sCi0gIFBST1BfTUFYX0dBUF9USU1FCi19OwotCi0jZGVmaW5lICBERUZBVUxUX01BWF9HQVBfVElNRSAgICAgICgyICogR1NUX1NFQ09ORCkKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGwgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LW1hdHJvc2thOyB2aWRlby94LW1hdHJvc2thOyAiCi0gICAgICAgICJ2aWRlby94LW1hdHJvc2thLTNkOyBhdWRpby93ZWJtOyB2aWRlby93ZWJtIikKLSAgICApOwotCi0vKiBUT0RPOiBmaWxsIGluIGNhcHMhICovCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb19zcmNfdGVtcGwgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJhdWRpb18ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiQU5ZIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9fc3JjX3RlbXBsID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgidmlkZW9fJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoIkFOWSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHN1YnRpdGxlX3NyY190ZW1wbCA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzdWJ0aXRsZV8ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidGV4dC94LXJhdywgZm9ybWF0PXBhbmdvLW1hcmt1cDsgYXBwbGljYXRpb24veC1zc2E7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtYXNzO2FwcGxpY2F0aW9uL3gtdXNmOyBzdWJwaWN0dXJlL3gtZHZkOyAiCi0gICAgICAgICJzdWJwaWN0dXJlL3gtcGdzOyBzdWJ0aXRsZS94LWthdGU7ICIgImFwcGxpY2F0aW9uL3gtc3VidGl0bGUtdW5rbm93biIpCi0gICAgKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2lkIChHc3RNYXRyb3NrYURlbXV4ICogZGVtdXgsCi0gICAgZ3VpbnQzMiBpZCwgZ3VpbnQ2NCBsZW5ndGgsIGd1aW50IG5lZWRlZCk7Ci0KLS8qIGVsZW1lbnQgZnVuY3Rpb25zICovCi1zdGF0aWMgdm9pZCBnc3RfbWF0cm9za2FfZGVtdXhfbG9vcCAoR3N0UGFkICogcGFkKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9lbGVtZW50X3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9lbGVtZW50X3F1ZXJ5IChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotLyogcGFkIGZ1bmN0aW9ucyAqLwotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9zaW5rX2FjdGl2YXRlIChHc3RQYWQgKiBzaW5rcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X21hdHJvc2thX2RlbXV4X3NpbmtfYWN0aXZhdGVfbW9kZSAoR3N0UGFkICogc2lua3BhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFBhZE1vZGUgbW9kZSwgZ2Jvb2xlYW4gYWN0aXZlKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LAotICAgIEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbWF0cm9za2FfZGVtdXhfY2hhaW4gKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBvYmplY3QsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0jaWYgMAotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9kZW11eF9zZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RJbmRleCAqIGluZGV4KTsKLXN0YXRpYyBHc3RJbmRleCAqZ3N0X21hdHJvc2thX2RlbXV4X2dldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotI2VuZGlmCi0KLS8qIGNhcHMgZnVuY3Rpb25zICovCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMgKEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQKLSAgICAqIHZpZGVvY29udGV4dCwgY29uc3QgZ2NoYXIgKiBjb2RlY19pZCwgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwKLSAgICBnY2hhciAqKiBjb2RlY19uYW1lLCBndWludDMyICogcmlmZl9mb3VyY2MpOwotc3RhdGljIEdzdENhcHMgKmdzdF9tYXRyb3NrYV9kZW11eF9hdWRpb19jYXBzIChHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0Ci0gICAgKiBhdWRpb2NvbnRleHQsIGNvbnN0IGdjaGFyICogY29kZWNfaWQsIGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgZ2NoYXIgKiogY29kZWNfbmFtZSwgZ3VpbnQxNiAqIHJpZmZfYXVkaW9fZm10KTsKLXN0YXRpYyBHc3RDYXBzCi0gICAgKiBnc3RfbWF0cm9za2FfZGVtdXhfc3VidGl0bGVfY2FwcyAoR3N0TWF0cm9za2FUcmFja1N1YnRpdGxlQ29udGV4dCAqCi0gICAgc3VidGl0bGVjb250ZXh0LCBjb25zdCBnY2hhciAqIGNvZGVjX2lkLCBncG9pbnRlciBkYXRhLCBndWludCBzaXplKTsKLQotLyogc3RyZWFtIG1ldGhvZHMgKi8KLXN0YXRpYyB2b2lkIGdzdF9tYXRyb3NrYV9kZW11eF9yZXNldCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIGdib29sZWFuIHBlcmZvcm1fc2Vla190b19vZmZzZXQgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwKLSAgICBnZG91YmxlIHJhdGUsIGd1aW50NjQgb2Zmc2V0LCBndWludDMyIHNlcW51bSwgR3N0U2Vla0ZsYWdzIGZsYWdzKTsKLQotLyogZ29iamVjdCBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGdzdF9tYXRyb3NrYV9kZW11eF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbWF0cm9za2FfZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1HVHlwZSBnc3RfbWF0cm9za2FfZGVtdXhfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X21hdHJvc2thX2RlbXV4X3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TWF0cm9za2FEZW11eCwgZ3N0X21hdHJvc2thX2RlbXV4LCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9kZW11eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TWF0cm9za2FEZW11eCAqZGVtdXggPSBHU1RfTUFUUk9TS0FfREVNVVggKG9iamVjdCk7Ci0KLSAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2ZpbmFsaXplICgmZGVtdXgtPmNvbW1vbik7Ci0gIGdzdF9mbG93X2NvbWJpbmVyX2ZyZWUgKGRlbXV4LT5mbG93Y29tYmluZXIpOwotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfY2xhc3NfaW5pdCAoR3N0TWF0cm9za2FEZW11eENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG1hdHJvc2thZGVtdXhfZGVidWcsICJtYXRyb3NrYWRlbXV4IiwgMCwKLSAgICAgICJNYXRyb3NrYSBkZW11eGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfbWF0cm9za2FfZGVtdXhfZmluYWxpemU7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X21hdHJvc2thX2RlbXV4X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X21hdHJvc2thX2RlbXV4X3NldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9HQVBfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtZ2FwLXRpbWUiLCAiTWF4aW11bSBnYXAgdGltZSIsCi0gICAgICAgICAgIlRoZSBkZW11eGVyIHNlbmRzIG91dCBzZWdtZW50IGV2ZW50cyBmb3Igc2tpcHBpbmcgIgotICAgICAgICAgICJnYXBzIGxvbmdlciB0aGFuIHRoaXMgKDAgPSBkaXNhYmxlZCkuIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfR0FQX1RJTUUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX2RlbXV4X2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9kZW11eF9lbGVtZW50X3NlbmRfZXZlbnQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5xdWVyeSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX2RlbXV4X2VsZW1lbnRfcXVlcnkpOwotI2lmIDAKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2V0X2luZGV4ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfZGVtdXhfc2V0X2luZGV4KTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Z2V0X2luZGV4ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfZGVtdXhfZ2V0X2luZGV4KTsKLSNlbmRpZgotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnZpZGVvX3NyY190ZW1wbCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmF1ZGlvX3NyY190ZW1wbCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnN1YnRpdGxlX3NyY190ZW1wbCk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbCk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIk1hdHJvc2thIGRlbXV4ZXIiLAotICAgICAgIkNvZGVjL0RlbXV4ZXIiLAotICAgICAgIkRlbXV4ZXMgTWF0cm9za2EvV2ViTSBzdHJlYW1zIGludG8gdmlkZW8vYXVkaW8vc3VidGl0bGVzIiwKLSAgICAgICJHU3RyZWFtZXIgbWFpbnRhaW5lcnMgPGdzdHJlYW1lci1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmc+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfaW5pdCAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4KQotewotICBkZW11eC0+Y29tbW9uLnNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmtfdGVtcGwsCi0gICAgICAic2luayIpOwotICBnc3RfcGFkX3NldF9hY3RpdmF0ZV9mdW5jdGlvbiAoZGVtdXgtPmNvbW1vbi5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9kZW11eF9zaW5rX2FjdGl2YXRlKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAoZGVtdXgtPmNvbW1vbi5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9kZW11eF9zaW5rX2FjdGl2YXRlX21vZGUpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGRlbXV4LT5jb21tb24uc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfZGVtdXhfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKGRlbXV4LT5jb21tb24uc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGRlbXV4KSwgZGVtdXgtPmNvbW1vbi5zaW5rcGFkKTsKLQotICAvKiBpbml0IGRlZmF1bHRzIGZvciBjb21tb24gcmVhZCBjb250ZXh0ICovCi0gIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9pbml0ICgmZGVtdXgtPmNvbW1vbik7Ci0KLSAgLyogcHJvcGVydHkgZGVmYXVsdHMgKi8KLSAgZGVtdXgtPm1heF9nYXBfdGltZSA9IERFRkFVTFRfTUFYX0dBUF9USU1FOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGRlbXV4LCBHU1RfRUxFTUVOVF9GTEFHX0lOREVYQUJMRSk7Ci0KLSAgZGVtdXgtPmZsb3djb21iaW5lciA9IGdzdF9mbG93X2NvbWJpbmVyX25ldyAoKTsKLQotICAvKiBmaW5pc2ggb2ZmICovCi0gIGdzdF9tYXRyb3NrYV9kZW11eF9yZXNldCAoR1NUX0VMRU1FTlQgKGRlbXV4KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfcmVzZXQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RNYXRyb3NrYURlbXV4ICpkZW11eCA9IEdTVF9NQVRST1NLQV9ERU1VWCAoZWxlbWVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZXNldHRpbmcgc3RhdGUiKTsKLQotICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVzZXQgKEdTVF9FTEVNRU5UIChkZW11eCksICZkZW11eC0+Y29tbW9uKTsKLQotICBkZW11eC0+bnVtX2Ffc3RyZWFtcyA9IDA7Ci0gIGRlbXV4LT5udW1fdF9zdHJlYW1zID0gMDsKLSAgZGVtdXgtPm51bV92X3N0cmVhbXMgPSAwOwotCi0gIGRlbXV4LT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gIGRlbXV4LT5ncm91cF9pZCA9IEdfTUFYVUlOVDsKLQotICBkZW11eC0+Y2xvY2sgPSBOVUxMOwotICBkZW11eC0+dHJhY2tzX3BhcnNlZCA9IEZBTFNFOwotCi0gIGlmIChkZW11eC0+Y2x1c3RlcnMpIHsKLSAgICBnX2FycmF5X2ZyZWUgKGRlbXV4LT5jbHVzdGVycywgVFJVRSk7Ci0gICAgZGVtdXgtPmNsdXN0ZXJzID0gTlVMTDsKLSAgfQotCi0gIGdfbGlzdF9mb3JlYWNoIChkZW11eC0+c2Vla19wYXJzZWQsCi0gICAgICAoR0Z1bmMpIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9mcmVlX3BhcnNlZF9lbCwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChkZW11eC0+c2Vla19wYXJzZWQpOwotICBkZW11eC0+c2Vla19wYXJzZWQgPSBOVUxMOwotCi0gIGRlbXV4LT5sYXN0X3N0b3BfZW5kID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZGVtdXgtPnNlZWtfYmxvY2sgPSAwOwotICBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBkZW11eC0+dG9fdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGRlbXV4LT5jbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBkZW11eC0+Y2x1c3Rlcl9vZmZzZXQgPSAwOwotICBkZW11eC0+bmV4dF9jbHVzdGVyX29mZnNldCA9IDA7Ci0gIGRlbXV4LT5pbmRleF9vZmZzZXQgPSAwOwotICBkZW11eC0+c2Vla2FibGUgPSBGQUxTRTsKLSAgZGVtdXgtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotICBkZW11eC0+c2VnbWVudF9zZXFudW0gPSAwOwotICBkZW11eC0+cmVxdWVzdGVkX3NlZWtfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGRlbXV4LT5zZWVrX29mZnNldCA9IC0xOwotICBkZW11eC0+YnVpbGRpbmdfaW5kZXggPSBGQUxTRTsKLSAgaWYgKGRlbXV4LT5zZWVrX2V2ZW50KSB7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChkZW11eC0+c2Vla19ldmVudCk7Ci0gICAgZGVtdXgtPnNlZWtfZXZlbnQgPSBOVUxMOwotICB9Ci0KLSAgZGVtdXgtPnNlZWtfaW5kZXggPSBOVUxMOwotICBkZW11eC0+c2Vla19lbnRyeSA9IDA7Ci0KLSAgaWYgKGRlbXV4LT5uZXdfc2VnbWVudCkgewotICAgIGdzdF9ldmVudF91bnJlZiAoZGVtdXgtPm5ld19zZWdtZW50KTsKLSAgICBkZW11eC0+bmV3X3NlZ21lbnQgPSBOVUxMOwotICB9Ci0KLSAgZGVtdXgtPmludmFsaWRfZHVyYXRpb24gPSBGQUxTRTsKLQotICBkZW11eC0+Y2FjaGVkX2xlbmd0aCA9IEdfTUFYVUlOVDY0OwotCi0gIGdzdF9mbG93X2NvbWJpbmVyX2NsZWFyIChkZW11eC0+Zmxvd2NvbWJpbmVyKTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfbWF0cm9za2FfZGVjb2RlX2J1ZmZlciAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBncG9pbnRlciBkYXRhOwotICBnc2l6ZSBzaXplOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfQlVGRkVSIChidWYpLCBOVUxMKTsKLQotICBHU1RfREVCVUcgKCJkZWNvZGluZyBidWZmZXIgJXAiLCBidWYpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgc2l6ZSA9IG1hcC5zaXplOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplID4gMCwgYnVmKTsKLQotICBpZiAoZ3N0X21hdHJvc2thX2RlY29kZV9kYXRhIChjb250ZXh0LT5lbmNvZGluZ3MsICZkYXRhLCAmc2l6ZSwKLSAgICAgICAgICBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5DT0RJTkdfU0NPUEVfRlJBTUUsIEZBTFNFKSkgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZGF0YSwgc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHICgiZGVjb2RlIGRhdGEgZmFpbGVkIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfYWRkX3N0cmVhbV9oZWFkZXJzX3RvX2NhcHMgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwKLSAgICBHc3RCdWZmZXJMaXN0ICogbGlzdCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR1ZhbHVlIGFycl92YWwgPSBHX1ZBTFVFX0lOSVQ7Ci0gIEdWYWx1ZSBidWZfdmFsID0gR19WQUxVRV9JTklUOwotICBnaW50IGksIG51bTsKLQotICBnX2Fzc2VydCAoZ3N0X2NhcHNfaXNfd3JpdGFibGUgKGNhcHMpKTsKLQotICBnX3ZhbHVlX2luaXQgKCZhcnJfdmFsLCBHU1RfVFlQRV9BUlJBWSk7Ci0gIGdfdmFsdWVfaW5pdCAoJmJ1Zl92YWwsIEdTVF9UWVBFX0JVRkZFUik7Ci0KLSAgbnVtID0gZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAobGlzdCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotICAgIGdfdmFsdWVfc2V0X2JveGVkICgmYnVmX3ZhbCwgZ3N0X2J1ZmZlcl9saXN0X2dldCAobGlzdCwgaSkpOwotICAgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZhcnJfdmFsLCAmYnVmX3ZhbCk7Ci0gIH0KLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAocywgInN0cmVhbWhlYWRlciIsICZhcnJfdmFsKTsKLSAgZ192YWx1ZV91bnNldCAoJmJ1Zl92YWwpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9zdHJlYW0gKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChkZW11eCk7Ci0gIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0OwotICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGwgPSBOVUxMOwotICBHc3RTdHJlYW1GbGFncyBzdHJlYW1fZmxhZ3M7Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICBHc3RUYWdMaXN0ICpjYWNoZWRfdGFnbGlzdDsKLSAgZ2NoYXIgKnBhZG5hbWUgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQzMiBpZCwgcmlmZl9mb3VyY2MgPSAwOwotICBndWludDE2IHJpZmZfYXVkaW9fZm10ID0gMDsKLSAgR3N0RXZlbnQgKnN0cmVhbV9zdGFydDsKLSAgZ2NoYXIgKmNvZGVjID0gTlVMTDsKLSAgZ2NoYXIgKnN0cmVhbV9pZDsKLQotICBERUJVR19FTEVNRU5UX1NUQVJUIChkZW11eCwgZWJtbCwgIlRyYWNrRW50cnkiKTsKLQotICAvKiBzdGFydCB3aXRoIHRoZSBtYXN0ZXIgKi8KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGRlbXV4LCBlYm1sLCAiVHJhY2tFbnRyeSIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8qIGFsbG9jYXRlIGdlbmVyaWMuLi4gaWYgd2Uga25vdyB0aGUgdHlwZSwgd2UnbGwgZ19yZW5ldygpCi0gICAqIHdpdGggdGhlIHByZWNpc2UgdHlwZSAqLwotICBjb250ZXh0ID0gZ19uZXcwIChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCwgMSk7Ci0gIGdfcHRyX2FycmF5X2FkZCAoZGVtdXgtPmNvbW1vbi5zcmMsIGNvbnRleHQpOwotICBjb250ZXh0LT5pbmRleCA9IGRlbXV4LT5jb21tb24ubnVtX3N0cmVhbXM7Ci0gIGNvbnRleHQtPmluZGV4X3dyaXRlcl9pZCA9IC0xOwotICBjb250ZXh0LT50eXBlID0gMDsgICAgICAgICAgICAvKiBubyB0eXBlIHlldCAqLwotICBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uID0gMDsKLSAgY29udGV4dC0+cG9zID0gMDsKLSAgY29udGV4dC0+c2V0X2Rpc2NvbnQgPSBUUlVFOwotICBjb250ZXh0LT50aW1lY29kZXNjYWxlID0gMS4wOwotICBjb250ZXh0LT5mbGFncyA9Ci0gICAgICBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRCB8IEdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUIHwKLSAgICAgIEdTVF9NQVRST1NLQV9UUkFDS19MQUNJTkc7Ci0gIGNvbnRleHQtPmZyb21fdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGNvbnRleHQtPmZyb21fb2Zmc2V0ID0gLTE7Ci0gIGNvbnRleHQtPnRvX29mZnNldCA9IEdfTUFYSU5UNjQ7Ci0gIGNvbnRleHQtPmFsaWdubWVudCA9IDE7Ci0gIGNvbnRleHQtPmR0c19vbmx5ID0gRkFMU0U7Ci0gIGNvbnRleHQtPmludHJhX29ubHkgPSBGQUxTRTsKLSAgY29udGV4dC0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGRlbXV4LT5jb21tb24ubnVtX3N0cmVhbXMrKzsKLSAgZ19hc3NlcnQgKGRlbXV4LT5jb21tb24uc3JjLT5sZW4gPT0gZGVtdXgtPmNvbW1vbi5udW1fc3RyZWFtcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTdHJlYW0gbnVtYmVyICVkIiwgY29udGV4dC0+aW5kZXgpOwotCi0gIC8qIHRyeSByZWFkaW5nIHRoZSB0cmFja2VudHJ5IGhlYWRlcnMgKi8KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICAvKiB0cmFjayBudW1iZXIgKHVuaXF1ZSBzdHJlYW0gSUQpICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS05VTUJFUjp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChkZW11eCwgIkludmFsaWQgVHJhY2tOdW1iZXIgMCIpOwotICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCFnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fdHJhY2tudW1iZXJfdW5pcXVlICgmZGVtdXgtPmNvbW1vbiwKLSAgICAgICAgICAgICAgICBudW0pKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZGVtdXgsICJUcmFja051bWJlciAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAgICIgaXMgbm90IHVuaXF1ZSIsIG51bSk7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrTnVtYmVyOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICBjb250ZXh0LT5udW0gPSBudW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgICAvKiB0cmFjayBVSUQgKHVuaXF1ZSBpZGVudGlmaWVyKSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tVSUQ6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG51bSA9PSAwKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZGVtdXgsICJJbnZhbGlkIFRyYWNrVUlEIDAiKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiVHJhY2tVSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgIGNvbnRleHQtPnVpZCA9IG51bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogdHJhY2sgdHlwZSAodmlkZW8sIGF1ZGlvLCBjb21iaW5lZCwgc3VidGl0bGUsIGV0Yy4pICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS1RZUEU6ewotICAgICAgICBndWludDY0IHRyYWNrX3R5cGU7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJnRyYWNrX3R5cGUpKSAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnR5cGUgIT0gMCAmJiBjb250ZXh0LT50eXBlICE9IHRyYWNrX3R5cGUpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAiTW9yZSB0aGFuIG9uZSB0cmFja3R5cGUgZGVmaW5lZCBpbiBhIFRyYWNrRW50cnkgLSBza2lwcGluZyIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKHRyYWNrX3R5cGUgPCAxIHx8IHRyYWNrX3R5cGUgPiAyNTQpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCBUcmFja1R5cGUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgICAgdHJhY2tfdHlwZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrVHlwZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgdHJhY2tfdHlwZSk7Ci0KLSAgICAgICAgLyogb2ssIHNvIHdlJ3JlIGFjdHVhbGx5IGdvaW5nIHRvIHJlYWxsb2NhdGUgdGhpcyB0aGluZyAqLwotICAgICAgICBzd2l0Y2ggKHRyYWNrX3R5cGUpIHsKLSAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPOgotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3RyYWNrX2luaXRfdmlkZW9fY29udGV4dCAoJmNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTzoKLSAgICAgICAgICAgIGdzdF9tYXRyb3NrYV90cmFja19pbml0X2F1ZGlvX2NvbnRleHQgKCZjb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEU6Ci0gICAgICAgICAgICBnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9zdWJ0aXRsZV9jb250ZXh0ICgmY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0NPTVBMRVg6Ci0gICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9MT0dPOgotICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQlVUVE9OUzoKLSAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0NPTlRST0w6Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICAgIlVua25vd24gb3IgdW5zdXBwb3J0ZWQgVHJhY2tUeXBlICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgdHJhY2tfdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT50eXBlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGdfcHRyX2FycmF5X2luZGV4IChkZW11eC0+Y29tbW9uLnNyYywgZGVtdXgtPmNvbW1vbi5udW1fc3RyZWFtcyAtIDEpCi0gICAgICAgICAgICA9IGNvbnRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHRyYWNrdHlwZSBzcGVjaWZpYyBzdHVmZiBmb3IgdmlkZW8gKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLVklERU86ewotICAgICAgICBHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICp2aWRlb2NvbnRleHQ7Ci0KLSAgICAgICAgREVCVUdfRUxFTUVOVF9TVEFSVCAoZGVtdXgsIGVibWwsICJUcmFja1ZpZGVvIik7Ci0KLSAgICAgICAgaWYgKCFnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF92aWRlb19jb250ZXh0ICgmY29udGV4dCkpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAiVHJhY2tWaWRlbyBlbGVtZW50IGluIG5vbi12aWRlbyB0cmFjayAtIGlnbm9yaW5nIHRyYWNrIik7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZpZGVvY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbnRleHQ7Ci0gICAgICAgIGdfcHRyX2FycmF5X2luZGV4IChkZW11eC0+Y29tbW9uLnNyYywgZGVtdXgtPmNvbW1vbi5udW1fc3RyZWFtcyAtIDEpCi0gICAgICAgICAgICA9IGNvbnRleHQ7Ci0KLSAgICAgICAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJgotICAgICAgICAgICAgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgICAgICAgLyogU2hvdWxkIGJlIG9uZSBsZXZlbCB1cCBidXQgc29tZSBicm9rZW4gbXV4ZXJzIHdyaXRlIGl0IGhlcmUuICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS0RFRkFVTFREVVJBVElPTjp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCBUcmFja0RlZmF1bHREdXJhdGlvbiAwIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJUcmFja0RlZmF1bHREdXJhdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgICAgICAgY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbiA9IG51bTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLyogdmlkZW8gZnJhbWVyYXRlICovCi0gICAgICAgICAgICAgIC8qIE5PVEU6IFRoaXMgb25lIGlzIGhlcmUgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgICogVXNlIF9UUkFDS0RFRkFVTERVUkFUSU9OIG9uZSBsZXZlbCB1cC4gKi8KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPRlJBTUVSQVRFOnsKLSAgICAgICAgICAgICAgZ2RvdWJsZSBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2Zsb2F0IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtIDw9IDAuMCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJJbnZhbGlkIFRyYWNrVmlkZW9GUFMgJWxmIiwgbnVtKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiVHJhY2tWaWRlb0ZyYW1lUmF0ZTogJWxmIiwgbnVtKTsKLSAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPT0gMCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCAoKGdkb3VibGUpIEdTVF9TRUNPTkQgKiAoMS4wIC8gbnVtKSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGVmYXVsdF9mcHMgPSBudW07Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIHdpZHRoIG9mIHRoZSBzaXplIHRvIGRpc3BsYXkgdGhlIHZpZGVvIGF0ICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT0RJU1BMQVlXSURUSDp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCBUcmFja1ZpZGVvRGlzcGxheVdpZHRoIDAiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICAgIlRyYWNrVmlkZW9EaXNwbGF5V2lkdGg6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA9IG51bTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLyogaGVpZ2h0IG9mIHRoZSBzaXplIHRvIGRpc3BsYXkgdGhlIHZpZGVvIGF0ICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT0RJU1BMQVlIRUlHSFQ6ewotICAgICAgICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgaWYgKG51bSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkludmFsaWQgVHJhY2tWaWRlb0Rpc3BsYXlIZWlnaHQgMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICAgICAiVHJhY2tWaWRlb0Rpc3BsYXlIZWlnaHQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgPSBudW07Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIHdpZHRoIG9mIHRoZSB2aWRlbyBpbiB0aGUgZmlsZSAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTFdJRFRIOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0gPT0gMCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJJbnZhbGlkIFRyYWNrVmlkZW9QaXhlbFdpZHRoIDAiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICAgIlRyYWNrVmlkZW9QaXhlbFdpZHRoOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBoZWlnaHQgb2YgdGhlIHZpZGVvIGluIHRoZSBmaWxlICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMSEVJR0hUOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0gPT0gMCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJJbnZhbGlkIFRyYWNrVmlkZW9QaXhlbEhlaWdodCAwIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJUcmFja1ZpZGVvUGl4ZWxIZWlnaHQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0ID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiB3aGV0aGVyIHRoZSB2aWRlbyBpcyBpbnRlcmxhY2VkICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT0ZMQUdJTlRFUkxBQ0VEOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0pCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZmxhZ3MgfD0gR1NUX01BVFJPU0tBX1ZJREVPVFJBQ0tfSU5URVJMQUNFRDsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmZsYWdzICY9IH5HU1RfTUFUUk9TS0FfVklERU9UUkFDS19JTlRFUkxBQ0VEOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrVmlkZW9JbnRlcmxhY2VkOiAlZCIsCi0gICAgICAgICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVklERU9UUkFDS19JTlRFUkxBQ0VEKSA/IDEgOgotICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIGFzcGVjdCByYXRpbyBiZWhhdmlvdXIgKi8KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPQVNQRUNUUkFUSU9UWVBFOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0gIT0gR1NUX01BVFJPU0tBX0FTUEVDVF9SQVRJT19NT0RFX0ZSRUUgJiYKLSAgICAgICAgICAgICAgICAgIG51bSAhPSBHU1RfTUFUUk9TS0FfQVNQRUNUX1JBVElPX01PREVfS0VFUCAmJgotICAgICAgICAgICAgICAgICAgbnVtICE9IEdTVF9NQVRST1NLQV9BU1BFQ1RfUkFUSU9fTU9ERV9GSVhFRCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICAgICAgICJVbmtub3duIFRyYWNrVmlkZW9Bc3BlY3RSYXRpb1R5cGUgMHgleCIsIChndWludCkgbnVtKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJUcmFja1ZpZGVvQXNwZWN0UmF0aW9UeXBlOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPmFzcl9tb2RlID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBjb2xvdXJzcGFjZSAob25seSBtYXR0ZXJzIGZvciByYXcgdmlkZW8pIGZvdXJjYyAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9DT0xPVVJTUEFDRTp7Ci0gICAgICAgICAgICAgIGd1aW50OCAqZGF0YTsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBkYXRhbGVuOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0KLSAgICAgICAgICAgICAgICAgICAgICBnc3RfZWJtbF9yZWFkX2JpbmFyeSAoZWJtbCwgJmlkLCAmZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFsZW4pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAoZGF0YWxlbiAhPSA0KSB7Ci0gICAgICAgICAgICAgICAgZ19mcmVlIChkYXRhKTsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBUcmFja1ZpZGVvQ29sb3VyU3BhY2UgbGVuZ3RoICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgIGRhdGFsZW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgbWVtY3B5ICgmdmlkZW9jb250ZXh0LT5mb3VyY2MsIGRhdGEsIDQpOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJUcmFja1ZpZGVvQ29sb3VyU3BhY2U6ICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh2aWRlb2NvbnRleHQtPmZvdXJjYykpOwotICAgICAgICAgICAgICBnX2ZyZWUgKGRhdGEpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPU1RFUkVPTU9ERToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU3RlcmVvTW9kZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLQotICAgICAgICAgICAgICBzd2l0Y2ggKG51bSkgewotICAgICAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX1NCU19STDoKLSAgICAgICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+bXVsdGl2aWV3X2ZsYWdzID0KLSAgICAgICAgICAgICAgICAgICAgICBHU1RfVklERU9fTVVMVElWSUVXX0ZMQUdTX1JJR0hUX1ZJRVdfRklSU1Q7Ci0gICAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9TQlNfTFI6Ci0gICAgICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPm11bHRpdmlld19tb2RlID0KLSAgICAgICAgICAgICAgICAgICAgICBHU1RfVklERU9fTVVMVElWSUVXX01PREVfU0lERV9CWV9TSURFOwotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfVEJfUkw6Ci0gICAgICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncyA9Ci0gICAgICAgICAgICAgICAgICAgICAgR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19SSUdIVF9WSUVXX0ZJUlNUOwotICAgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfVEJfTFI6Ci0gICAgICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPm11bHRpdmlld19tb2RlID0KLSAgICAgICAgICAgICAgICAgICAgICBHU1RfVklERU9fTVVMVElWSUVXX01PREVfVE9QX0JPVFRPTTsKLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX0NIRUNLRVJfUkw6Ci0gICAgICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncyA9Ci0gICAgICAgICAgICAgICAgICAgICAgR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19SSUdIVF9WSUVXX0ZJUlNUOwotICAgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfQ0hFQ0tFUl9MUjoKLSAgICAgICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+bXVsdGl2aWV3X21vZGUgPQotICAgICAgICAgICAgICAgICAgICAgIEdTVF9WSURFT19NVUxUSVZJRVdfTU9ERV9DSEVDS0VSQk9BUkQ7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9GQkZfUkw6Ci0gICAgICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncyA9Ci0gICAgICAgICAgICAgICAgICAgICAgR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19SSUdIVF9WSUVXX0ZJUlNUOwotICAgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfRkJGX0xSOgotICAgICAgICAgICAgICAgICAgdmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfbW9kZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgR1NUX1ZJREVPX01VTFRJVklFV19NT0RFX0ZSQU1FX0JZX0ZSQU1FOwotICAgICAgICAgICAgICAgICAgLyogRklYTUU6IEluIGZyYW1lLWJ5LWZyYW1lIG1vZGUsIGxlZnQvcmlnaHQgZnJhbWUgYnVmZmVycyBhcmUKLSAgICAgICAgICAgICAgICAgICAqIGxhY2VkIHdpdGhpbiBvbmUgYmxvY2ssIGFuZCB3ZSdsbCBuZWVkIHRvIGFwcGx5IEZJUlNUX0lOX0JVTkRMRQotICAgICAgICAgICAgICAgICAgICogYWNjb3JkaW5nbHkuIFNlZSBodHRwOi8vd3d3Lm1hdHJvc2thLm9yZy90ZWNobmljYWwvc3BlY3MvaW5kZXguaHRtbCNTdGVyZW9Nb2RlICovCi0gICAgICAgICAgICAgICAgICBHU1RfRklYTUVfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICAgICAiRnJhbWUtYnktZnJhbWUgc3RlcmVvc2NvcGljIG1vZGUgbm90IGZ1bGx5IGltcGxlbWVudGVkIik7Ci0gICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJVbmtub3duIFRyYWNrVmlkZW8gc3ViZWxlbWVudCAweCV4IC0gaWdub3JpbmciLCBpZCk7Ci0gICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9ESVNQTEFZVU5JVDoKLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPUElYRUxDUk9QQk9UVE9NOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTENST1BUT1A6Ci0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMQ1JPUExFRlQ6Ci0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMQ1JPUFJJR0hUOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9HQU1NQVZBTFVFOgotICAgICAgICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBERUJVR19FTEVNRU5UX1NUT1AgKGRlbXV4LCBlYm1sLCAiVHJhY2tWaWRlbyIsIHJldCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHRyYWNrdHlwZSBzcGVjaWZpYyBzdHVmZiBmb3IgYXVkaW8gKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLQVVESU86ewotICAgICAgICBHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0ICphdWRpb2NvbnRleHQ7Ci0KLSAgICAgICAgREVCVUdfRUxFTUVOVF9TVEFSVCAoZGVtdXgsIGVibWwsICJUcmFja0F1ZGlvIik7Ci0KLSAgICAgICAgaWYgKCFnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9hdWRpb19jb250ZXh0ICgmY29udGV4dCkpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAiVHJhY2tBdWRpbyBlbGVtZW50IGluIG5vbi1hdWRpbyB0cmFjayAtIGlnbm9yaW5nIHRyYWNrIik7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdWRpb2NvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqKSBjb250ZXh0OwotICAgICAgICBnX3B0cl9hcnJheV9pbmRleCAoZGVtdXgtPmNvbW1vbi5zcmMsIGRlbXV4LT5jb21tb24ubnVtX3N0cmVhbXMgLSAxKQotICAgICAgICAgICAgPSBjb250ZXh0OwotCi0gICAgICAgIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYKLSAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgICAgICAgIC8qIHNhbXBsZXJhdGUgKi8KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0FVRElPU0FNUExJTkdGUkVROnsKLSAgICAgICAgICAgICAgZ2RvdWJsZSBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2Zsb2F0IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotCi0gICAgICAgICAgICAgIGlmIChudW0gPD0gMC4wKSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgVHJhY2tBdWRpb1NhbXBsaW5nRnJlcXVlbmN5ICVsZiIsIG51bSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeTogJWxmIiwgbnVtKTsKLSAgICAgICAgICAgICAgYXVkaW9jb250ZXh0LT5zYW1wbGVyYXRlID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBiaXRkZXB0aCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9CSVRERVBUSDp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCBUcmFja0F1ZGlvQml0RGVwdGggMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJUcmFja0F1ZGlvQml0RGVwdGg6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICBudW0pOwotICAgICAgICAgICAgICBhdWRpb2NvbnRleHQtPmJpdGRlcHRoID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBjaGFubmVscyAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUzp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCBUcmFja0F1ZGlvQ2hhbm5lbHMgMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJUcmFja0F1ZGlvQ2hhbm5lbHM6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICBudW0pOwotICAgICAgICAgICAgICBhdWRpb2NvbnRleHQtPmNoYW5uZWxzID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgICAgICJVbmtub3duIFRyYWNrQXVkaW8gc3ViZWxlbWVudCAweCV4IC0gaWdub3JpbmciLCBpZCk7Ci0gICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUE9TSVRJT05TOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9PVVRQVVRTQU1QTElOR0ZSRVE6Ci0gICAgICAgICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfc2tpcCAoZWJtbCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoZGVtdXgsIGVibWwsICJUcmFja0F1ZGlvIiwgcmV0KTsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiBjb2RlYyBpZGVudGlmaWVyICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0lEOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2FzY2lpIChlYm1sLCAmaWQsICZ0ZXh0KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJDb2RlY0lEOiAlcyIsIEdTVF9TVFJfTlVMTCAodGV4dCkpOwotICAgICAgICBjb250ZXh0LT5jb2RlY19pZCA9IHRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNQUklWQVRFOnsKLSAgICAgICAgZ3VpbnQ4ICpkYXRhOwotICAgICAgICBndWludDY0IHNpemU7Ci0KLSAgICAgICAgaWYgKChyZXQgPQotICAgICAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfYmluYXJ5IChlYm1sLCAmaWQsICZkYXRhLCAmc2l6ZSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBkYXRhOwotICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBzaXplOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ29kZWNQcml2YXRlIG9mIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIHNpemUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiBuYW1lIG9mIHRoZSBjb2RlYyAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNOQU1FOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJnRleHQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkNvZGVjTmFtZTogJXMiLCBHU1RfU1RSX05VTEwgKHRleHQpKTsKLSAgICAgICAgY29udGV4dC0+Y29kZWNfbmFtZSA9IHRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGNvZGVjIGRlbGF5ICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0RFTEFZOnsKLSAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnRleHQtPmNvZGVjX2RlbGF5ID0gbnVtOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ29kZWNEZWxheTogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobnVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGNvZGVjIGRlbGF5ICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUVLUFJFUk9MTDp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjb250ZXh0LT5zZWVrX3ByZXJvbGwgPSBudW07Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVrUHJlcm9sbDogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobnVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIG5hbWUgb2YgdGhpcyB0cmFjayAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tOQU1FOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJnRleHQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjb250ZXh0LT5uYW1lID0gdGV4dDsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJUcmFja05hbWU6ICVzIiwgR1NUX1NUUl9OVUxMICh0ZXh0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGxhbmd1YWdlIChtYXR0ZXJzIGZvciBhdWRpby9zdWJ0aXRsZXMsIG1vc3RseSkgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLTEFOR1VBR0U6ewotICAgICAgICBnY2hhciAqdGV4dDsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdXRmOCAoZWJtbCwgJmlkLCAmdGV4dCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0KLSAgICAgICAgY29udGV4dC0+bGFuZ3VhZ2UgPSB0ZXh0OwotCi0gICAgICAgIC8qIGZyZS1jYSA9PiBmcmUgKi8KLSAgICAgICAgaWYgKHN0cmxlbiAoY29udGV4dC0+bGFuZ3VhZ2UpID49IDQgJiYgY29udGV4dC0+bGFuZ3VhZ2VbM10gPT0gJy0nKQotICAgICAgICAgIGNvbnRleHQtPmxhbmd1YWdlWzNdID0gJ1wwJzsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrTGFuZ3VhZ2U6ICVzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoY29udGV4dC0+bGFuZ3VhZ2UpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogd2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IHVzZWQgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0VOQUJMRUQ6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG51bSkKLSAgICAgICAgICBjb250ZXh0LT5mbGFncyB8PSBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzICY9IH5HU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrRW5hYmxlZDogJWQiLAotICAgICAgICAgICAgKGNvbnRleHQtPmZsYWdzICYgR1NUX01BVFJPU0tBX1RSQUNLX0VOQUJMRUQpID8gMSA6IDApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiB3aGV0aGVyIGl0J3MgdGhlIGRlZmF1bHQgZm9yIHRoaXMgdHJhY2sgdHlwZSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tGTEFHREVGQVVMVDp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtKQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzIHw9IEdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29udGV4dC0+ZmxhZ3MgJj0gfkdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiVHJhY2tEZWZhdWx0OiAlZCIsCi0gICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVFJBQ0tfREVGQVVMVCkgPyAxIDogMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHdoZXRoZXIgdGhlIHRyYWNrIG11c3QgYmUgdXNlZCBkdXJpbmcgcGxheWJhY2sgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0ZPUkNFRDp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtKQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzIHw9IEdTVF9NQVRST1NLQV9UUkFDS19GT1JDRUQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb250ZXh0LT5mbGFncyAmPSB+R1NUX01BVFJPU0tBX1RSQUNLX0ZPUkNFRDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrRm9yY2VkOiAlZCIsCi0gICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVFJBQ0tfRk9SQ0VEKSA/IDEgOiAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogbGFjaW5nIChsaWtlIE1QRUcsIHdoZXJlIGJsb2NrcyBkb24ndCBlbmQvc3RhcnQgb24gZnJhbWUKLSAgICAgICAgICogYm91bmRhcmllcykgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0xBQ0lORzp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtKQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzIHw9IEdTVF9NQVRST1NLQV9UUkFDS19MQUNJTkc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb250ZXh0LT5mbGFncyAmPSB+R1NUX01BVFJPU0tBX1RSQUNLX0xBQ0lORzsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlRyYWNrTGFjaW5nOiAlZCIsCi0gICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVFJBQ0tfTEFDSU5HKSA/IDEgOiAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogZGVmYXVsdCBsZW5ndGggKGluIHRpbWUpIG9mIG9uZSBkYXRhIGJsb2NrIGluIHRoaXMgdHJhY2sgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLREVGQVVMVERVUkFUSU9OOnsKLSAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0KLSAgICAgICAgaWYgKG51bSA9PSAwKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkludmFsaWQgVHJhY2tEZWZhdWx0RHVyYXRpb24gMCIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJUcmFja0RlZmF1bHREdXJhdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIG51bSk7Ci0gICAgICAgIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPSBudW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT05URU5URU5DT0RJTkdTOnsKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3JlYWRfdHJhY2tfZW5jb2RpbmdzICgmZGVtdXgtPmNvbW1vbiwKLSAgICAgICAgICAgIGVibWwsIGNvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tUSU1FQ09ERVNDQUxFOnsKLSAgICAgICAgZ2RvdWJsZSBudW07Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2Zsb2F0IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtIDw9IDAuMCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJJbnZhbGlkIFRyYWNrVGltZUNvZGVTY2FsZSAlbGYiLCBudW0pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJUcmFja1RpbWVDb2RlU2NhbGU6ICVsZiIsIG51bSk7Ci0gICAgICAgIGNvbnRleHQtPnRpbWVjb2Rlc2NhbGUgPSBudW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklORyAoIlVua25vd24gVHJhY2tFbnRyeSBzdWJlbGVtZW50IDB4JXggLSBpZ25vcmluZyIsIGlkKTsKLSAgICAgICAgLyogcGFzcy10aHJvdWdoICovCi0KLSAgICAgICAgLyogd2UgaWdub3JlIHRoZXNlIGJlY2F1c2UgdGhleSdyZSBub3RoaW5nIHVzZWZ1bCAoaS5lLiBjcmFwKQotICAgICAgICAgKiBvciBzaW1wbHkgbm90IGltcGxlbWVudGVkIHlldC4gKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLTUlOQ0FDSEU6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS01BWENBQ0hFOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfTUFYQkxPQ0tBRERJVElPTklEOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tBVFRBQ0hNRU5UTElOSzoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLT1ZFUkxBWToKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLVFJBTlNMQVRFOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tPRkZTRVQ6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT0RFQ1NFVFRJTkdTOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNJTkZPVVJMOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNET1dOTE9BRFVSTDoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NPREVDREVDT0RFQUxMOgotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGRlbXV4LCBlYm1sLCAiVHJhY2tFbnRyeSIsIHJldCk7Ci0KLSAgLyogRGVjb2RlIGNvZGVjIHByaXZhdGUgZGF0YSBpZiBuZWNlc3NhcnkgKi8KLSAgaWYgKGNvbnRleHQtPmVuY29kaW5ncyAmJiBjb250ZXh0LT5lbmNvZGluZ3MtPmxlbiA+IDAgJiYgY29udGV4dC0+Y29kZWNfcHJpdgotICAgICAgJiYgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID4gMCkgewotICAgIGlmICghZ3N0X21hdHJvc2thX2RlY29kZV9kYXRhIChjb250ZXh0LT5lbmNvZGluZ3MsCi0gICAgICAgICAgICAmY29udGV4dC0+Y29kZWNfcHJpdiwgJmNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSwKLSAgICAgICAgICAgIEdTVF9NQVRST1NLQV9UUkFDS19FTkNPRElOR19TQ09QRV9DT0RFQ19EQVRBLCBUUlVFKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkRlY29kaW5nIGNvZGVjIHByaXZhdGUgZGF0YSBmYWlsZWQiKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLSAgfQotCi0gIGlmIChjb250ZXh0LT50eXBlID09IDAgfHwgY29udGV4dC0+Y29kZWNfaWQgPT0gTlVMTCB8fCAocmV0ICE9IEdTVF9GTE9XX09LCi0gICAgICAgICAgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykpIHsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LIHx8IHJldCA9PSBHU1RfRkxPV19FT1MpCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVibWwsICJVbmtub3duIHN0cmVhbS9jb2RlYyBpbiB0cmFjayBlbnRyeSBoZWFkZXIiKTsKLQotICAgIGRlbXV4LT5jb21tb24ubnVtX3N0cmVhbXMtLTsKLSAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXggKGRlbXV4LT5jb21tb24uc3JjLCBkZW11eC0+Y29tbW9uLm51bV9zdHJlYW1zKTsKLSAgICBnX2Fzc2VydCAoZGVtdXgtPmNvbW1vbi5zcmMtPmxlbiA9PSBkZW11eC0+Y29tbW9uLm51bV9zdHJlYW1zKTsKLSAgICBnc3RfbWF0cm9za2FfdHJhY2tfZnJlZSAoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyogY2hlY2sgZm9yIGEgY2FjaGVkIHRyYWNrIHRhZ2xpc3QgICovCi0gIGNhY2hlZF90YWdsaXN0ID0KLSAgICAgIChHc3RUYWdMaXN0ICopIGdfaGFzaF90YWJsZV9sb29rdXAgKGRlbXV4LT5jb21tb24uY2FjaGVkX3RyYWNrX3RhZ2xpc3RzLAotICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoY29udGV4dC0+dWlkKSk7Ci0gIGlmIChjYWNoZWRfdGFnbGlzdCkKLSAgICBnc3RfdGFnX2xpc3RfaW5zZXJ0IChjb250ZXh0LT50YWdzLCBjYWNoZWRfdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotCi0gIC8qIG5vdyBjcmVhdGUgdGhlIEdTdHJlYW1lciBjb25uZWN0aXZpdHkgKi8KLSAgc3dpdGNoIChjb250ZXh0LT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTzp7Ci0gICAgICBHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICp2aWRlb2NvbnRleHQgPQotICAgICAgICAgIChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbnRleHQ7Ci0KLSAgICAgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJ2aWRlb18ldSIsIGRlbXV4LT5udW1fdl9zdHJlYW1zKyspOwotICAgICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInZpZGVvXyV1Iik7Ci0gICAgICBjYXBzID0gZ3N0X21hdHJvc2thX2RlbXV4X3ZpZGVvX2NhcHMgKHZpZGVvY29udGV4dCwKLSAgICAgICAgICBjb250ZXh0LT5jb2RlY19pZCwgY29udGV4dC0+Y29kZWNfcHJpdiwKLSAgICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUsICZjb2RlYywgJnJpZmZfZm91cmNjKTsKLQotICAgICAgaWYgKGNvZGVjKSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKGNvbnRleHQtPnRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICAgIEdTVF9UQUdfVklERU9fQ09ERUMsIGNvZGVjLCBOVUxMKTsKLSAgICAgICAgY29udGV4dC0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLSAgICAgICAgZ19mcmVlIChjb2RlYyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0FVRElPOnsKLSAgICAgIEdzdE1hdHJvc2thVHJhY2tBdWRpb0NvbnRleHQgKmF1ZGlvY29udGV4dCA9Ci0gICAgICAgICAgKEdzdE1hdHJvc2thVHJhY2tBdWRpb0NvbnRleHQgKikgY29udGV4dDsKLQotICAgICAgcGFkbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoImF1ZGlvXyV1IiwgZGVtdXgtPm51bV9hX3N0cmVhbXMrKyk7Ci0gICAgICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAiYXVkaW9fJXUiKTsKLSAgICAgIGNhcHMgPSBnc3RfbWF0cm9za2FfZGVtdXhfYXVkaW9fY2FwcyAoYXVkaW9jb250ZXh0LAotICAgICAgICAgIGNvbnRleHQtPmNvZGVjX2lkLCBjb250ZXh0LT5jb2RlY19wcml2LCBjb250ZXh0LT5jb2RlY19wcml2X3NpemUsCi0gICAgICAgICAgJmNvZGVjLCAmcmlmZl9hdWRpb19mbXQpOwotCi0gICAgICBpZiAoY29kZWMpIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoY29udGV4dC0+dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgR1NUX1RBR19BVURJT19DT0RFQywgY29kZWMsIE5VTEwpOwotICAgICAgICBjb250ZXh0LT50YWdzX2NoYW5nZWQgPSBUUlVFOwotICAgICAgICBnX2ZyZWUgKGNvZGVjKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEU6ewotICAgICAgR3N0TWF0cm9za2FUcmFja1N1YnRpdGxlQ29udGV4dCAqc3VidGl0bGVjb250ZXh0ID0KLSAgICAgICAgICAoR3N0TWF0cm9za2FUcmFja1N1YnRpdGxlQ29udGV4dCAqKSBjb250ZXh0OwotCi0gICAgICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3VidGl0bGVfJXUiLCBkZW11eC0+bnVtX3Rfc3RyZWFtcysrKTsKLSAgICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzdWJ0aXRsZV8ldSIpOwotICAgICAgY2FwcyA9IGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jYXBzIChzdWJ0aXRsZWNvbnRleHQsCi0gICAgICAgICAgY29udGV4dC0+Y29kZWNfaWQsIGNvbnRleHQtPmNvZGVjX3ByaXYsIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0NPTVBMRVg6Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9MT0dPOgotICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQlVUVE9OUzoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0NPTlRST0w6Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHdlIHNob3VsZCBhbHJlYWR5IGhhdmUgcXVpdCBieSBub3cgKi8KLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgaWYgKChjb250ZXh0LT5sYW5ndWFnZSA9PSBOVUxMIHx8ICpjb250ZXh0LT5sYW5ndWFnZSA9PSAnXDAnKSAmJgotICAgICAgKGNvbnRleHQtPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQVVESU8gfHwKLSAgICAgICAgICBjb250ZXh0LT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1NVQlRJVExFKSkgewotICAgIEdTVF9MT0cgKCJzdHJlYW0gJWQ6IGxhbmd1YWdlPWVuZyAoYXNzdW1pbmcgZGVmYXVsdCkiLCBjb250ZXh0LT5pbmRleCk7Ci0gICAgY29udGV4dC0+bGFuZ3VhZ2UgPSBnX3N0cmR1cCAoImVuZyIpOwotICB9Ci0KLSAgaWYgKGNvbnRleHQtPmxhbmd1YWdlKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmxhbmc7Ci0KLSAgICAvKiBNYXRyb3NrYSBjb250YWlucyBJU08gNjM5LTJCIGNvZGVzLCB3ZSB3YW50IElTTyA2MzktMSAqLwotICAgIGxhbmcgPSBnc3RfdGFnX2dldF9sYW5ndWFnZV9jb2RlIChjb250ZXh0LT5sYW5ndWFnZSk7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAoY29udGV4dC0+dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICBHU1RfVEFHX0xBTkdVQUdFX0NPREUsIChsYW5nKSA/IGxhbmcgOiBjb250ZXh0LT5sYW5ndWFnZSwgTlVMTCk7Ci0gICAgY29udGV4dC0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLSAgfQotCi0gIGlmIChjYXBzID09IE5VTEwpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiY291bGQgbm90IGRldGVybWluZSBjYXBzIGZvciBzdHJlYW0gd2l0aCAiCi0gICAgICAgICJjb2RlY19pZD0nJXMnIiwgY29udGV4dC0+Y29kZWNfaWQpOwotICAgIHN3aXRjaCAoY29udGV4dC0+dHlwZSkgewotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTzoKLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LXVua25vd24iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0FVRElPOgotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtdW5rbm93biIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEU6Ci0gICAgICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXBwbGljYXRpb24veC1zdWJ0aXRsZS11bmtub3duIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9DT01QTEVYOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LW1hdHJvc2thLXVua25vd24iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJjb2RlYy1pZCIsIEdfVFlQRV9TVFJJTkcsIGNvbnRleHQtPmNvZGVjX2lkLAotICAgICAgICBOVUxMKTsKLQotICAgIC8qIGFkZCBhbnkgdW5yZWNvZ25pc2VkIHJpZmYgZm91cmNjIC8gYXVkaW8gZm9ybWF0LCBidXQgYWZ0ZXIgY29kZWMtaWQgKi8KLSAgICBpZiAoY29udGV4dC0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTyAmJiByaWZmX2F1ZGlvX2ZtdCAhPSAwKQotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImZvcm1hdCIsIEdfVFlQRV9JTlQsIHJpZmZfYXVkaW9fZm10LCBOVUxMKTsKLSAgICBlbHNlIGlmIChjb250ZXh0LT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPICYmIHJpZmZfZm91cmNjICE9IDApIHsKLSAgICAgIGdjaGFyICpmc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChyaWZmX2ZvdXJjYykpOwotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImZvdXJjYyIsIEdfVFlQRV9TVFJJTkcsIGZzdHIsIE5VTEwpOwotICAgICAgZ19mcmVlIChmc3RyKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoY29udGV4dC0+c3RyZWFtX2hlYWRlcnMgIT0gTlVMTCkgewotICAgIGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtX2hlYWRlcnNfdG9fY2FwcyAoZGVtdXgsCi0gICAgICAgIGNvbnRleHQtPnN0cmVhbV9oZWFkZXJzLCBjYXBzKTsKLSAgfQotCi0gIC8qIHRoZSBwYWQgaW4gaGVyZSAqLwotICBjb250ZXh0LT5wYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbCwgcGFkbmFtZSk7Ci0gIGNvbnRleHQtPmNhcHMgPSBjYXBzOwotCi0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChjb250ZXh0LT5wYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zcmNfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKGNvbnRleHQtPnBhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NyY19xdWVyeSkpOwotCi0gIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsICJBZGRpbmcgcGFkICclcycgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgcGFkbmFtZSwgY2Fwcyk7Ci0KLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChjb250ZXh0LT5wYWQsIGNvbnRleHQpOwotCi0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKGNvbnRleHQtPnBhZCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoY29udGV4dC0+cGFkLCBUUlVFKTsKLQotICBzdHJlYW1faWQgPQotICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkX3ByaW50ZiAoY29udGV4dC0+cGFkLCBHU1RfRUxFTUVOVF9DQVNUIChkZW11eCksCi0gICAgICAiJTAzIiBHX0dVSU5UNjRfRk9STUFUICI6JTAzIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgY29udGV4dC0+bnVtLCBjb250ZXh0LT51aWQpOwotICBzdHJlYW1fc3RhcnQgPQotICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50IChkZW11eC0+Y29tbW9uLnNpbmtwYWQsIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsCi0gICAgICAwKTsKLSAgaWYgKHN0cmVhbV9zdGFydCkgewotICAgIGlmIChnc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWQgKHN0cmVhbV9zdGFydCwgJmRlbXV4LT5ncm91cF9pZCkpCi0gICAgICBkZW11eC0+aGF2ZV9ncm91cF9pZCA9IFRSVUU7Ci0gICAgZWxzZQotICAgICAgZGVtdXgtPmhhdmVfZ3JvdXBfaWQgPSBGQUxTRTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKHN0cmVhbV9zdGFydCk7Ci0gIH0gZWxzZSBpZiAoIWRlbXV4LT5oYXZlX2dyb3VwX2lkKSB7Ci0gICAgZGVtdXgtPmhhdmVfZ3JvdXBfaWQgPSBUUlVFOwotICAgIGRlbXV4LT5ncm91cF9pZCA9IGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCk7Ci0gIH0KLQotICBzdHJlYW1fc3RhcnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKTsKLSAgZ19mcmVlIChzdHJlYW1faWQpOwotICBpZiAoZGVtdXgtPmhhdmVfZ3JvdXBfaWQpCi0gICAgZ3N0X2V2ZW50X3NldF9ncm91cF9pZCAoc3RyZWFtX3N0YXJ0LCBkZW11eC0+Z3JvdXBfaWQpOwotICBzdHJlYW1fZmxhZ3MgPSBHU1RfU1RSRUFNX0ZMQUdfTk9ORTsKLSAgaWYgKGNvbnRleHQtPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEUpCi0gICAgc3RyZWFtX2ZsYWdzIHw9IEdTVF9TVFJFQU1fRkxBR19TUEFSU0U7Ci0gIGlmIChjb250ZXh0LT5mbGFncyAmIEdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUKQotICAgIHN0cmVhbV9mbGFncyB8PSBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUOwotICBnc3RfZXZlbnRfc2V0X3N0cmVhbV9mbGFncyAoc3RyZWFtX3N0YXJ0LCBzdHJlYW1fZmxhZ3MpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKGNvbnRleHQtPnBhZCwgc3RyZWFtX3N0YXJ0KTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoY29udGV4dC0+cGFkLCBjb250ZXh0LT5jYXBzKTsKLQotCi0gIGlmIChkZW11eC0+Y29tbW9uLmdsb2JhbF90YWdzKSB7Ci0gICAgR3N0RXZlbnQgKnRhZ19ldmVudDsKLQotICAgIGdzdF90YWdfbGlzdF9hZGQgKGRlbXV4LT5jb21tb24uZ2xvYmFsX3RhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgR1NUX1RBR19DT05UQUlORVJfRk9STUFULCAiTWF0cm9za2EiLCBOVUxMKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5wYWQsICJTZW5kaW5nIGdsb2JhbF90YWdzICVwOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgZGVtdXgtPmNvbW1vbi5nbG9iYWxfdGFncywgZGVtdXgtPmNvbW1vbi5nbG9iYWxfdGFncyk7Ci0KLSAgICB0YWdfZXZlbnQgPQotICAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X2NvcHkgKGRlbXV4LT5jb21tb24uZ2xvYmFsX3RhZ3MpKTsKLQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoY29udGV4dC0+cGFkLCB0YWdfZXZlbnQpOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGNvbnRleHQtPnRhZ3NfY2hhbmdlZCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5wYWQsICJTZW5kaW5nIHRhZ3MgJXA6ICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBjb250ZXh0LT50YWdzLCBjb250ZXh0LT50YWdzKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGNvbnRleHQtPnBhZCwKLSAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9jb3B5IChjb250ZXh0LT50YWdzKSkpOwotICAgIGNvbnRleHQtPnRhZ3NfY2hhbmdlZCA9IEZBTFNFOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGRlbXV4KSwgY29udGV4dC0+cGFkKTsKLSAgZ3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZCAoZGVtdXgtPmZsb3djb21iaW5lciwgY29udGV4dC0+cGFkKTsKLQotICBnX2ZyZWUgKHBhZG5hbWUpOwotCi0gIC8qIHRhZGFhaCEgKi8KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfcXVlcnkgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgR3N0UGFkICogcGFkLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IE5VTEw7Ci0KLSAgaWYgKHBhZCkgewotICAgIGNvbnRleHQgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIH0KLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICBNQVggKGNvbnRleHQtPnBvcywgZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKSAtCi0gICAgICAgICAgICAgIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICBNQVggKGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbiwgZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKSAtCi0gICAgICAgICAgICAgIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZSk7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0RFRkFVTFQgJiYgY29udGV4dAotICAgICAgICAgICYmIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24pIHsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX0RFRkFVTFQsCi0gICAgICAgICAgICBjb250ZXh0LT5wb3MgLyBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgIm9ubHkgcG9zaXRpb24gcXVlcnkgaW4gVElNRSBhbmQgREVGQVVMVCBmb3JtYXQgaXMgc3VwcG9ydGVkIik7Ci0gICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046Ci0gICAgewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5kdXJhdGlvbik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0RFRkFVTFQgJiYgY29udGV4dAotICAgICAgICAgICYmIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24pIHsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX0RFRkFVTFQsCi0gICAgICAgICAgICBkZW11eC0+Y29tbW9uLnNlZ21lbnQuZHVyYXRpb24gLyBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgIm9ubHkgZHVyYXRpb24gcXVlcnkgaW4gVElNRSBhbmQgREVGQVVMVCBmb3JtYXQgaXMgc3VwcG9ydGVkIik7Ci0gICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHU1RfUVVFUllfU0VFS0lORzoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm10OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmbXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICBpZiAoZm10ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBnYm9vbGVhbiBzZWVrYWJsZTsKLQotICAgICAgICBpZiAoZGVtdXgtPnN0cmVhbWluZykgewotICAgICAgICAgIC8qIGFzc3VtaW5nIHdlJ2xsIGJlIGFibGUgdG8gZ2V0IGFuIGluZGV4IC4uLiAqLwotICAgICAgICAgIHNlZWthYmxlID0gZGVtdXgtPnNlZWthYmxlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNlZWthYmxlID0gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfc2Vla2luZyAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwgc2Vla2FibGUsCi0gICAgICAgICAgICAwLCBkZW11eC0+Y29tbW9uLnNlZ21lbnQuZHVyYXRpb24pOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUdNRU5UOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gICAgICBnaW50NjQgc3RhcnQsIHN0b3A7Ci0KLSAgICAgIGZvcm1hdCA9IGRlbXV4LT5jb21tb24uc2VnbWVudC5mb3JtYXQ7Ci0KLSAgICAgIHN0YXJ0ID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmRlbXV4LT5jb21tb24uc2VnbWVudCwgZm9ybWF0LAotICAgICAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5zdGFydCk7Ci0gICAgICBpZiAoKHN0b3AgPSBkZW11eC0+Y29tbW9uLnNlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICAgIHN0b3AgPSBkZW11eC0+Y29tbW9uLnNlZ21lbnQuZHVyYXRpb247Ci0gICAgICBlbHNlCi0gICAgICAgIHN0b3AgPQotICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZkZW11eC0+Y29tbW9uLnNlZ21lbnQsIGZvcm1hdCwgc3RvcCk7Ci0KLSAgICAgIGdzdF9xdWVyeV9zZXRfc2VnbWVudCAocXVlcnksIGRlbXV4LT5jb21tb24uc2VnbWVudC5yYXRlLCBmb3JtYXQsIHN0YXJ0LAotICAgICAgICAgIHN0b3ApOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgaWYgKHBhZCkKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIChHc3RPYmplY3QgKikgZGVtdXgsIHF1ZXJ5KTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzID0KLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLAotICAgICAgICAgICAgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9kZW11eF9lbGVtZW50X3F1ZXJ5IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgcmV0dXJuIGdzdF9tYXRyb3NrYV9kZW11eF9xdWVyeSAoR1NUX01BVFJPU0tBX0RFTVVYIChlbGVtZW50KSwgTlVMTCwgcXVlcnkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RNYXRyb3NrYURlbXV4ICpkZW11eCA9IEdTVF9NQVRST1NLQV9ERU1VWCAocGFyZW50KTsKLQotICByZXR1cm4gZ3N0X21hdHJvc2thX2RlbXV4X3F1ZXJ5IChkZW11eCwgcGFkLCBxdWVyeSk7Ci19Ci0KLS8qIHJldHVybnMgRkFMU0UgaWYgdGhlcmUgYXJlIG5vIHBhZHMgdG8gZGVsaXZlciBldmVudCB0bywKLSAqIG90aGVyd2lzZSBUUlVFICh3aGF0ZXZlciB0aGUgb3V0Y29tZSBvZiBldmVudCBzZW5kaW5nKSwKLSAqIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcGFzc2VkIGV2ZW50ISAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZW5kaW5nIGV2ZW50IG9mIHR5cGUgJXMgdG8gYWxsIHNvdXJjZSBwYWRzIiwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgZ19hc3NlcnQgKGRlbXV4LT5jb21tb24uc3JjLT5sZW4gPT0gZGVtdXgtPmNvbW1vbi5udW1fc3RyZWFtcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBkZW11eC0+Y29tbW9uLnNyYy0+bGVuOyBpKyspIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtOwotCi0gICAgc3RyZWFtID0gZ19wdHJfYXJyYXlfaW5kZXggKGRlbXV4LT5jb21tb24uc3JjLCBpKTsKLSAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzdHJlYW0tPnBhZCwgZXZlbnQpOwotICAgIHJldCA9IFRSVUU7Ci0gIH0KLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9kZW11eF9zZW5kX3RhZ3MgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCkKLXsKLSAgZ2ludCBpOwotCi0gIGlmIChHX1VOTElLRUxZIChkZW11eC0+Y29tbW9uLmdsb2JhbF90YWdzX2NoYW5nZWQpKSB7Ci0gICAgR3N0RXZlbnQgKnRhZ19ldmVudDsKLSAgICBnc3RfdGFnX2xpc3RfYWRkIChkZW11eC0+Y29tbW9uLmdsb2JhbF90YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICAgIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCwgIk1hdHJvc2thIiwgTlVMTCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZW5kaW5nIGdsb2JhbF90YWdzICVwIDogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIGRlbXV4LT5jb21tb24uZ2xvYmFsX3RhZ3MsIGRlbXV4LT5jb21tb24uZ2xvYmFsX3RhZ3MpOwotCi0gICAgdGFnX2V2ZW50ID0KLSAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9jb3B5IChkZW11eC0+Y29tbW9uLmdsb2JhbF90YWdzKSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZGVtdXgtPmNvbW1vbi5zcmMtPmxlbjsgaSsrKSB7Ci0gICAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtOwotCi0gICAgICBzdHJlYW0gPSBnX3B0cl9hcnJheV9pbmRleCAoZGVtdXgtPmNvbW1vbi5zcmMsIGkpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzdHJlYW0tPnBhZCwgZ3N0X2V2ZW50X3JlZiAodGFnX2V2ZW50KSk7Ci0gICAgfQotCi0gICAgZ3N0X2V2ZW50X3VucmVmICh0YWdfZXZlbnQpOwotICAgIGRlbXV4LT5jb21tb24uZ2xvYmFsX3RhZ3NfY2hhbmdlZCA9IEZBTFNFOwotICB9Ci0KLSAgZ19hc3NlcnQgKGRlbXV4LT5jb21tb24uc3JjLT5sZW4gPT0gZGVtdXgtPmNvbW1vbi5udW1fc3RyZWFtcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBkZW11eC0+Y29tbW9uLnNyYy0+bGVuOyBpKyspIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtOwotCi0gICAgc3RyZWFtID0gZ19wdHJfYXJyYXlfaW5kZXggKGRlbXV4LT5jb21tb24uc3JjLCBpKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChzdHJlYW0tPnRhZ3NfY2hhbmdlZCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU2VuZGluZyB0YWdzICVwIGZvciBwYWQgJXM6JXMgOiAlIgotICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBzdHJlYW0tPnRhZ3MsCi0gICAgICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChzdHJlYW0tPnBhZCksIHN0cmVhbS0+dGFncyk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfY29weSAoc3RyZWFtLT50YWdzKSkpOwotICAgICAgc3RyZWFtLT50YWdzX2NoYW5nZWQgPSBGQUxTRTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfZWxlbWVudF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0TWF0cm9za2FEZW11eCAqZGVtdXggPSBHU1RfTUFUUk9TS0FfREVNVVggKGVsZW1lbnQpOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VFSykgewotICAgIC8qIG5vIHNlZWtpbmcgdW50aWwgd2UgYXJlIChzYWZlbHkpIHJlYWR5ICovCi0gICAgaWYgKGRlbXV4LT5jb21tb24uc3RhdGUgIT0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJub3QgcmVhZHkgZm9yIHNlZWtpbmcgeWV0Iik7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgcmVzID0gZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50IChkZW11eCwgTlVMTCwgZXZlbnQpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJVbmhhbmRsZWQgZXZlbnQgb2YgdHlwZSAlcyIsCi0gICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgcmVzID0gRkFMU0U7Ci0gIH0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX2RlbXV4X21vdmVfdG9fZW50cnkgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwKLSAgICBHc3RNYXRyb3NrYUluZGV4ICogZW50cnksIGdib29sZWFuIHJlc2V0LCBnYm9vbGVhbiB1cGRhdGUpCi17Ci0gIGdpbnQgaTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLQotICBpZiAodXBkYXRlKSB7Ci0gICAgLyogc2VlayAocmVsYXRpdmUgdG8gbWF0cm9za2Egc2VnbWVudCkgKi8KLSAgICAvKiBwb3NpdGlvbiBtaWdodCBiZSBpbnZhbGlkOyB3aWxsIGVycm9yIHdoZW4gc3RyZWFtaW5nIHJlc3VtZXMgLi4uICovCi0gICAgZGVtdXgtPmNvbW1vbi5vZmZzZXQgPSBlbnRyeS0+cG9zICsgZGVtdXgtPmNvbW1vbi5lYm1sX3NlZ21lbnRfc3RhcnQ7Ci0gICAgZGVtdXgtPm5leHRfY2x1c3Rlcl9vZmZzZXQgPSAwOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICJTZWVrZWQgdG8gb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgYmxvY2sgJWQsICIgInRpbWUgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBlbnRyeS0+cG9zICsgZGVtdXgtPmNvbW1vbi5lYm1sX3NlZ21lbnRfc3RhcnQsCi0gICAgICAgIGVudHJ5LT5ibG9jaywgR1NUX1RJTUVfQVJHUyAoZW50cnktPnRpbWUpKTsKLQotICAgIC8qIHVwZGF0ZSB0aGUgdGltZSAqLwotICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9yZXNldF9zdHJlYW1zICgmZGVtdXgtPmNvbW1vbiwgZW50cnktPnRpbWUsIFRSVUUpOwotICAgIGdzdF9mbG93X2NvbWJpbmVyX3Jlc2V0IChkZW11eC0+Zmxvd2NvbWJpbmVyKTsKLSAgICBkZW11eC0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24gPSBlbnRyeS0+dGltZTsKLSAgICBkZW11eC0+c2Vla19ibG9jayA9IGVudHJ5LT5ibG9jazsKLSAgICBkZW11eC0+c2Vla19maXJzdCA9IFRSVUU7Ci0gICAgZGVtdXgtPmxhc3Rfc3RvcF9lbmQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IGRlbXV4LT5jb21tb24uc3JjLT5sZW47IGkrKykgewotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpzdHJlYW0gPSBnX3B0cl9hcnJheV9pbmRleCAoZGVtdXgtPmNvbW1vbi5zcmMsIGkpOwotCi0gICAgaWYgKHJlc2V0KSB7Ci0gICAgICBzdHJlYW0tPnRvX29mZnNldCA9IEdfTUFYSU5UNjQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChzdHJlYW0tPmZyb21fb2Zmc2V0ICE9IC0xKQotICAgICAgICBzdHJlYW0tPnRvX29mZnNldCA9IHN0cmVhbS0+ZnJvbV9vZmZzZXQ7Ci0gICAgfQotICAgIHN0cmVhbS0+ZnJvbV9vZmZzZXQgPSAtMTsKLSAgICBzdHJlYW0tPmZyb21fdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X21hdHJvc2thX2NsdXN0ZXJfY29tcGFyZSAoZ2ludDY0ICogaTEsIGdpbnQ2NCAqIGkyKQotewotICBpZiAoKmkxIDwgKmkyKQotICAgIHJldHVybiAtMTsKLSAgZWxzZSBpZiAoKmkxID4gKmkyKQotICAgIHJldHVybiAxOwotICBlbHNlCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHNlYXJjaGVzIGZvciBhIGNsdXN0ZXIgc3RhcnQgZnJvbSBAcG9zLAotICogcmV0dXJuIEdTVF9GTE9XX09LIGFuZCBjbHVzdGVyIHBvc2l0aW9uIGluIEBwb3MgaWYgZm91bmQgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfc2VhcmNoX2NsdXN0ZXIgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgZ2ludDY0ICogcG9zKQotewotICBnaW50NjQgbmV3cG9zID0gKnBvczsKLSAgZ2ludDY0IG9yaWdfb2Zmc2V0OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBjb25zdCBndWludCBjaHVuayA9IDY0ICogMTAyNDsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3BvaW50ZXIgZGF0YSA9IE5VTEw7Ci0gIGdzaXplIHNpemU7Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludDMyIGlkOwotICBndWludCBuZWVkZWQ7Ci0gIGdpbnQ2NCBvbGRwb3MsIG9sZGxlbmd0aDsKLQotICBvcmlnX29mZnNldCA9IGRlbXV4LT5jb21tb24ub2Zmc2V0OwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInNlYXJjaGluZyBjbHVzdGVyIGZvbGxvd2luZyBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgKnBvcyk7Ci0KLSAgaWYgKGRlbXV4LT5jbHVzdGVycykgewotICAgIGdpbnQ2NCAqY3BvczsKLQotICAgIGNwb3MgPSBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChkZW11eC0+Y2x1c3RlcnMtPmRhdGEsCi0gICAgICAgIGRlbXV4LT5jbHVzdGVycy0+bGVuLCBzaXplb2YgKGdpbnQ2NCksCi0gICAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBnc3RfbWF0cm9za2FfY2x1c3Rlcl9jb21wYXJlLAotICAgICAgICBHU1RfU0VBUkNIX01PREVfQUZURVIsIHBvcywgTlVMTCk7Ci0gICAgLyogc2FuaXR5IGNoZWNrICovCi0gICAgaWYgKGNwb3MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICJjbHVzdGVyIHJlcG9ydGVkIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsICpjcG9zKTsKLSAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ID0gKmNwb3M7Ci0gICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVsbCAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCAmaWQsICZsZW5ndGgsICZuZWVkZWQpOwotICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBpZCA9PSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUikgewotICAgICAgICBuZXdwb3MgPSAqY3BvczsKLSAgICAgICAgZ290byBleGl0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIHJlYWQgaW4gYXQgbmV3cG9zIGFuZCBzY2FuIGZvciBlYm1sIGNsdXN0ZXIgaWQgKi8KLSAgb2xkcG9zID0gb2xkbGVuZ3RoID0gLTE7Ci0gIHdoaWxlICgxKSB7Ci0gICAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0gICAgZ2ludCBjbHVzdGVyX3BvczsKLQotICAgIGlmIChidWYgIT0gTlVMTCkgewotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICBidWYgPSBOVUxMOwotICAgIH0KLSAgICByZXQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKGRlbXV4LT5jb21tb24uc2lua3BhZCwgbmV3cG9zLCBjaHVuaywgJmJ1Zik7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAicmVhZCBidWZmZXIgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGF0IG9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIG5ld3Bvcyk7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgc2l6ZSA9IG1hcC5zaXplOwotICAgIGlmIChvbGRwb3MgPT0gbmV3cG9zICYmIG9sZGxlbmd0aCA9PSBtYXAuc2l6ZSkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoZGVtdXgsICJTdHVjayBhdCBzYW1lIHBvc2l0aW9uIik7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gZXhpdDsKLSAgICB9IGVsc2UgewotICAgICAgb2xkcG9zID0gbmV3cG9zOwotICAgICAgb2xkbGVuZ3RoID0gbWFwLnNpemU7Ci0gICAgfQotCi0gICAgZ3N0X2J5dGVfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGRhdGEsIHNpemUpOwotICByZXN1bWU6Ci0gICAgY2x1c3Rlcl9wb3MgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgmcmVhZGVyLCAweGZmZmZmZmZmLAotICAgICAgICBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUiwgMCwgZ3N0X2J5dGVfcmVhZGVyX2dldF9yZW1haW5pbmcgKCZyZWFkZXIpKTsKLSAgICBpZiAoY2x1c3Rlcl9wb3MgPj0gMCkgewotICAgICAgbmV3cG9zICs9IGNsdXN0ZXJfcG9zOwotICAgICAgLyogcHJlcGFyZSByZXN1bWluZyBhdCBuZXh0IGJ5dGUgKi8KLSAgICAgIGlmICghZ3N0X2J5dGVfcmVhZGVyX3NraXAgKCZyZWFkZXIsIGNsdXN0ZXJfcG9zICsgMSkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJOZWVkIG1vcmUgZGF0YSAtPiBjb250aW51ZSIpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICJmb3VuZCBjbHVzdGVyIGVibWwgaWQgYXQgb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVCwgbmV3cG9zKTsKLSAgICAgIC8qIGV4dHJhIGNoZWNrcyB3aGV0aGVyIHdlIHJlYWxseSBzeW5jJ2VkIHRvIGEgY2x1c3RlcjoKLSAgICAgICAqIC0gZWl0aGVyIGl0IGlzIHRoZSBmaXJzdCBhbmQgb25seSBjbHVzdGVyCi0gICAgICAgKiAtIGVpdGhlciB0aGVyZSBpcyBhIGNsdXN0ZXIgYWZ0ZXIgdGhpcyBvbmUKLSAgICAgICAqIC0gZWl0aGVyIGNsdXN0ZXIgbGVuZ3RoIGlzIHVuZGVmaW5lZAotICAgICAgICovCi0gICAgICAvKiBvayBpZiBmaXJzdCBjbHVzdGVyICh0aGVyZSBtYXkgbm90IGEgc3Vic2VxdWVudCBvbmUpICovCi0gICAgICBpZiAobmV3cG9zID09IGRlbXV4LT5maXJzdF9jbHVzdGVyX29mZnNldCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNsdXN0ZXIgaXMgZmlyc3QgY2x1c3RlciAtPiBPSyIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ID0gbmV3cG9zOwotICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKCZkZW11eC0+Y29tbW9uLAotICAgICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgJmlkLCAmbGVuZ3RoLCAmbmVlZGVkKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJuZWVkIG1vcmUgZGF0YSAtPiBjb250aW51ZSIpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGdfYXNzZXJ0IChpZCA9PSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUik7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNsdXN0ZXIgc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHByZWZpeCAlZCIsCi0gICAgICAgICAgbGVuZ3RoLCBuZWVkZWQpOwotICAgICAgLyogb2sgaWYgdW5kZWZpbmVkIGxlbmd0aCBvciBmaXJzdCBjbHVzdGVyICovCi0gICAgICBpZiAobGVuZ3RoID09IEdTVF9FQk1MX1NJWkVfVU5LTk9XTiB8fCBsZW5ndGggPT0gR19NQVhVSU5UNjQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJjbHVzdGVyIGhhcyB1bmRlZmluZWQgbGVuZ3RoIC0+IE9LIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgLyogc2tpcCBjbHVzdGVyICovCi0gICAgICBkZW11eC0+Y29tbW9uLm9mZnNldCArPSBsZW5ndGggKyBuZWVkZWQ7Ci0gICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVsbCAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCAmaWQsICZsZW5ndGgsICZuZWVkZWQpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAvKiB3ZSBza2lwcGVkIG9uZSBieXRlIGluIHRoZSByZWFkZXIgYWJvdmUsIG5lZWQgdG8gYWNjb21vZGF0ZSBmb3IKLSAgICAgICAgICogdGhhdCB3aGVuIHJlc3VtaW5nIHNraXBwaW5nIGZyb20gdGhlIHJlYWRlciBpbnN0ZWFkIG9mIHJlYWRpbmcgYQotICAgICAgICAgKiBuZXcgY2h1bmsgKi8KLSAgICAgICAgbmV3cG9zICs9IDE7Ci0gICAgICAgIGdvdG8gcmVzdW1lOwotICAgICAgfQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJuZXh0IGVsZW1lbnQgaXMgJXNjbHVzdGVyIiwKLSAgICAgICAgICBpZCA9PSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUiA/ICIiIDogIm5vdCAiKTsKLSAgICAgIGlmIChpZCA9PSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUikKLSAgICAgICAgYnJlYWs7Ci0gICAgICAvKiBub3Qgb2ssIHJlc3VtZQotICAgICAgICogd2Ugc2tpcHBlZCBvbmUgYnl0ZSBpbiB0aGUgcmVhZGVyIGFib3ZlLCBuZWVkIHRvIGFjY29tb2RhdGUgZm9yCi0gICAgICAgKiB0aGF0IHdoZW4gcmVzdW1pbmcgc2tpcHBpbmcgZnJvbSB0aGUgcmVhZGVyIGluc3RlYWQgb2YgcmVhZGluZyBhCi0gICAgICAgKiBuZXcgY2h1bmsgKi8KLSAgICAgIG5ld3BvcyArPSAxOwotICAgICAgZ290byByZXN1bWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHBhcnRpYWwgY2x1c3RlciBpZCBtYXkgaGF2ZSBiZWVuIGluIHRhaWwgb2YgYnVmZmVyICovCi0gICAgICBuZXdwb3MgKz0gTUFYIChnc3RfYnl0ZV9yZWFkZXJfZ2V0X3JlbWFpbmluZyAoJnJlYWRlciksIDQpIC0gMzsKLSAgICB9Ci0gIH0KLQotICBpZiAoYnVmKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGJ1ZiA9IE5VTEw7Ci0gIH0KLQotZXhpdDoKLSAgZGVtdXgtPmNvbW1vbi5vZmZzZXQgPSBvcmlnX29mZnNldDsKLSAgKnBvcyA9IG5ld3BvczsKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogYmlzZWN0IGFuZCBzY2FuIHRocm91Z2ggZmlsZSBmb3IgY2x1c3RlciBzdGFydGluZyBiZWZvcmUgQHRpbWUsCi0gKiByZXR1cm5zIGZha2UgaW5kZXggZW50cnkgd2l0aCBjb3JyZXNwb25kaW5nIGluZm8gb24gY2x1c3RlciAqLwotc3RhdGljIEdzdE1hdHJvc2thSW5kZXggKgotZ3N0X21hdHJvc2thX2RlbXV4X3NlYXJjaF9wb3MgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIEdzdE1hdHJvc2thSW5kZXggKmVudHJ5ID0gTlVMTDsKLSAgR3N0TWF0cm9za2FSZWFkU3RhdGUgY3VycmVudF9zdGF0ZTsKLSAgR3N0Q2xvY2tUaW1lIG90aW1lLCBwcmV2X2NsdXN0ZXJfdGltZSwgY3VycmVudF9jbHVzdGVyX3RpbWUsIGNsdXN0ZXJfdGltZTsKLSAgZ2ludDY0IG9wb3MsIG5ld3Bvcywgc3RhcnRwb3MgPSAwLCBjdXJyZW50X29mZnNldDsKLSAgZ2ludDY0IHByZXZfY2x1c3Rlcl9vZmZzZXQgPSAtMSwgY3VycmVudF9jbHVzdGVyX29mZnNldCwgY2x1c3Rlcl9vZmZzZXQ7Ci0gIGNvbnN0IGd1aW50IGNodW5rID0gNjQgKiAxMDI0OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQ2NCBsZW5ndGg7Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50IG5lZWRlZDsKLQotICAvKiAodW5kZXIpZXN0aW1hdGUgbmV3IHBvc2l0aW9uLCByZXN5bmMgdXNpbmcgY2x1c3RlciBlYm1sIGlkLAotICAgKiBhbmQgc2NhbiBmb3J3YXJkIHRvIGFwcHJvcHJpYXRlIGNsdXN0ZXIKLSAgICogKGFuZCByZS1lc3RpbWF0ZSBpZiBuZWVkIHRvIGdvIGJhY2t3YXJkKSAqLwotCi0gIHByZXZfY2x1c3Rlcl90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAvKiBzdG9yZSBzb21lIGN1cnJlbnQgc3RhdGUgKi8KLSAgY3VycmVudF9zdGF0ZSA9IGRlbXV4LT5jb21tb24uc3RhdGU7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjdXJyZW50X3N0YXRlID09IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEEsIE5VTEwpOwotCi0gIGN1cnJlbnRfY2x1c3Rlcl9vZmZzZXQgPSBkZW11eC0+Y2x1c3Rlcl9vZmZzZXQ7Ci0gIGN1cnJlbnRfY2x1c3Rlcl90aW1lID0gZGVtdXgtPmNsdXN0ZXJfdGltZTsKLSAgY3VycmVudF9vZmZzZXQgPSBkZW11eC0+Y29tbW9uLm9mZnNldDsKLQotICBkZW11eC0+Y29tbW9uLnN0YXRlID0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfU0NBTk5JTkc7Ci0KLSAgLyogZXN0aW1hdGUgdXNpbmcgc3RhcnQgYW5kIGN1cnJlbnQgcG9zaXRpb24gKi8KLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gIG9wb3MgPSBkZW11eC0+Y29tbW9uLm9mZnNldCAtIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0OwotICBvdGltZSA9IGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbjsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICAvKiBzYW5pdGl6ZSAqLwotICB0aW1lID0gTUFYICh0aW1lLCBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUpOwotCi0gIC8qIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gaW4gZmlyc3QgZXN0aW1hdGlvbiBiZWxvdyAqLwotICBpZiAob3RpbWUgPD0gZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKQotICAgIG90aW1lID0gdGltZTsKLQotcmV0cnk6Ci0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwKLSAgICAgICJvcG9zOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG90aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIGluIHN0cmVhbSB0aW1lIChzdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiksIHRpbWUgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgb3BvcywgR1NUX1RJTUVfQVJHUyAob3RpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAob3RpbWUgLSBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKSwgR1NUX1RJTUVfQVJHUyAodGltZSkpOwotCi0gIGlmIChvdGltZSA8PSBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUpIHsKLSAgICBuZXdwb3MgPSAwOwotICB9IGVsc2UgewotICAgIG5ld3BvcyA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAob3BvcyAtIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0LAotICAgICAgICB0aW1lIC0gZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lLAotICAgICAgICBvdGltZSAtIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZSkgLSBjaHVuazsKLSAgICBpZiAobmV3cG9zIDwgMCkKLSAgICAgIG5ld3BvcyA9IDA7Ci0gIH0KLSAgLyogZmF2b3VyIHVuZGVyc2hvb3QgKi8KLSAgbmV3cG9zID0gbmV3cG9zICogOTAgLyAxMDA7Ci0gIG5ld3BvcyArPSBkZW11eC0+Y29tbW9uLmVibWxfc2VnbWVudF9zdGFydDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICJlc3RpbWF0ZWQgb2Zmc2V0IGZvciAlIiBHU1RfVElNRV9GT1JNQVQgIjogJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZSksIG5ld3Bvcyk7Ci0KLSAgLyogYW5kIGF0IGxlYXN0IHN0YXJ0IHNjYW5uaW5nIGJlZm9yZSBwcmV2aW91cyBzY2FuIHN0YXJ0IHRvIGF2b2lkIGxvb3BpbmcgKi8KLSAgc3RhcnRwb3MgPSBzdGFydHBvcyAqIDkwIC8gMTAwOwotICBpZiAoc3RhcnRwb3MgJiYgc3RhcnRwb3MgPCBuZXdwb3MpCi0gICAgbmV3cG9zID0gc3RhcnRwb3M7Ci0KLSAgLyogcmVhZCBpbiBhdCBuZXdwb3MgYW5kIHNjYW4gZm9yIGVibWwgY2x1c3RlciBpZCAqLwotICBzdGFydHBvcyA9IG5ld3BvczsKLSAgd2hpbGUgKDEpIHsKLQotICAgIHJldCA9IGdzdF9tYXRyb3NrYV9kZW11eF9zZWFyY2hfY2x1c3RlciAoZGVtdXgsICZuZXdwb3MpOwotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAvKiBoZXVyaXN0aWMgSEFDSyAqLwotICAgICAgbmV3cG9zID0gc3RhcnRwb3MgKiA4MCAvIDEwMDsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiRU9TOyAiCi0gICAgICAgICAgIm5ldyBlc3RpbWF0ZWQgb2Zmc2V0IGZvciAlIiBHU1RfVElNRV9GT1JNQVQgIjogJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWUpLCBuZXdwb3MpOwotICAgICAgc3RhcnRwb3MgPSBuZXdwb3M7Ci0gICAgICBjb250aW51ZTsKLSAgICB9IGVsc2UgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgZ290byBleGl0OwotICAgIH0gZWxzZSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiB0aGVuIHN0YXJ0IHNjYW5uaW5nIGFuZCBwYXJzaW5nIGZvciBjbHVzdGVyIHRpbWUsCi0gICAqIHJlLWVzdGltYXRlIGlmIG92ZXJzaG9vdCwgb3RoZXJ3aXNlIG5leHQgY2x1c3RlciBhbmQgc28gb24gKi8KLSAgZGVtdXgtPmNvbW1vbi5vZmZzZXQgPSBuZXdwb3M7Ci0gIGRlbXV4LT5jbHVzdGVyX3RpbWUgPSBjbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB3aGlsZSAoMSkgewotICAgIGd1aW50NjQgY2x1c3Rlcl9zaXplID0gMDsKLQotICAgIC8qIHBlZWsgYW5kIHBhcnNlIHNvbWUgZWxlbWVudHMgKi8KLSAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVsbCAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgJmlkLCAmbGVuZ3RoLCAmbmVlZGVkKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBlcnJvcjsKLSAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJPZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBFbGVtZW50IGlkIDB4JXgsICIKLSAgICAgICAgInNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBuZWVkZWQgJWQiLCBkZW11eC0+Y29tbW9uLm9mZnNldCwgaWQsCi0gICAgICAgIGxlbmd0aCwgbmVlZGVkKTsKLSAgICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaWQgKGRlbXV4LCBpZCwgbGVuZ3RoLCBuZWVkZWQpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgaWYgKGlkID09IEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSKSB7Ci0gICAgICBjbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgaWYgKGxlbmd0aCA9PSBHX01BWFVJTlQ2NCkKLSAgICAgICAgY2x1c3Rlcl9zaXplID0gMDsKLSAgICAgIGVsc2UKLSAgICAgICAgY2x1c3Rlcl9zaXplID0gbGVuZ3RoICsgbmVlZGVkOwotICAgIH0KLSAgICBpZiAoZGVtdXgtPmNsdXN0ZXJfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmCi0gICAgICAgIGNsdXN0ZXJfdGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBjbHVzdGVyX3RpbWUgPSBkZW11eC0+Y2x1c3Rlcl90aW1lICogZGVtdXgtPmNvbW1vbi50aW1lX3NjYWxlOwotICAgICAgY2x1c3Rlcl9vZmZzZXQgPSBkZW11eC0+Y2x1c3Rlcl9vZmZzZXQ7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImZvdW5kIGNsdXN0ZXIgYXQgb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgICAgICIgd2l0aCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgY2x1c3Rlcl9vZmZzZXQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoY2x1c3Rlcl90aW1lKSk7Ci0gICAgICBpZiAoY2x1c3Rlcl90aW1lID4gdGltZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIm92ZXJzaG90IHRhcmdldCIpOwotICAgICAgICAvKiBjbHVzdGVyIG92ZXJzaG9vdHMgKi8KLSAgICAgICAgaWYgKGNsdXN0ZXJfb2Zmc2V0ID09IGRlbXV4LT5maXJzdF9jbHVzdGVyX29mZnNldCkgewotICAgICAgICAgIC8qIGJ1dCBubyBwcmV2IG9uZSAqLwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiYnV0IHVzaW5nIGZpcnN0IGNsdXN0ZXIgYW55d2F5Iik7Ci0gICAgICAgICAgcHJldl9jbHVzdGVyX3RpbWUgPSBjbHVzdGVyX3RpbWU7Ci0gICAgICAgICAgcHJldl9jbHVzdGVyX29mZnNldCA9IGNsdXN0ZXJfb2Zmc2V0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcmV2X2NsdXN0ZXJfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICAgICAgLyogcHJldiBjbHVzdGVyIGRpZCBub3Qgb3ZlcnNob290LCBzbyBwcmV2IGNsdXN0ZXIgaXMgdGFyZ2V0ICovCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogcmUtZXN0aW1hdGUgdXNpbmcgdGhpcyBuZXcgcG9zaXRpb24gaW5mbyAqLwotICAgICAgICAgIG9wb3MgPSBjbHVzdGVyX29mZnNldDsKLSAgICAgICAgICBvdGltZSA9IGNsdXN0ZXJfdGltZTsKLSAgICAgICAgICBnb3RvIHJldHJ5OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBjbHVzdGVyIHVuZGVyc2hvb3RzLCBnb3RvIG5leHQgb25lICovCi0gICAgICAgIHByZXZfY2x1c3Rlcl90aW1lID0gY2x1c3Rlcl90aW1lOwotICAgICAgICBwcmV2X2NsdXN0ZXJfb2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQ7Ci0gICAgICAgIC8qIHNraXAgY2x1c3RlciBpZiBsZW5ndGggaXMgZGVmaW5lZCwKLSAgICAgICAgICogb3RoZXJ3aXNlIHdpbGwgYmUgc2tpcHBpbmdseSBwYXJzZWQgaW50byAqLwotICAgICAgICBpZiAoY2x1c3Rlcl9zaXplKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJza2lwcGluZyB0byBuZXh0IGNsdXN0ZXIiKTsKLSAgICAgICAgICBkZW11eC0+Y29tbW9uLm9mZnNldCA9IGNsdXN0ZXJfb2Zmc2V0ICsgY2x1c3Rlcl9zaXplOwotICAgICAgICAgIGRlbXV4LT5jbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicGFyc2luZy9za2lwcGluZyBjbHVzdGVyIGVsZW1lbnRzIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY29udGludWU7Ci0KLSAgZXJyb3I6Ci0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIGlmIChwcmV2X2NsdXN0ZXJfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZ290byBleGl0OwotICB9Ci0KLSAgZW50cnkgPSBnX25ldzAgKEdzdE1hdHJvc2thSW5kZXgsIDEpOwotICBlbnRyeS0+dGltZSA9IHByZXZfY2x1c3Rlcl90aW1lOwotICBlbnRyeS0+cG9zID0gcHJldl9jbHVzdGVyX29mZnNldCAtIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0OwotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNpbXVsYXRlZCBpbmRleCBlbnRyeTsgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIHBvcyAlIiBHX0dVSU5UNjRfRk9STUFULCBHU1RfVElNRV9BUkdTIChlbnRyeS0+dGltZSksIGVudHJ5LT5wb3MpOwotCi1leGl0OgotCi0gIC8qIHJlc3RvcmUgc29tZSBzdGF0ZSAqLwotICBkZW11eC0+Y2x1c3Rlcl9vZmZzZXQgPSBjdXJyZW50X2NsdXN0ZXJfb2Zmc2V0OwotICBkZW11eC0+Y2x1c3Rlcl90aW1lID0gY3VycmVudF9jbHVzdGVyX3RpbWU7Ci0gIGRlbXV4LT5jb21tb24ub2Zmc2V0ID0gY3VycmVudF9vZmZzZXQ7Ci0gIGRlbXV4LT5jb21tb24uc3RhdGUgPSBjdXJyZW50X3N0YXRlOwotCi0gIHJldHVybiBlbnRyeTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdE1hdHJvc2thSW5kZXggKmVudHJ5ID0gTlVMTDsKLSAgR3N0TWF0cm9za2FJbmRleCBzY2FuX2VudHJ5OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIGN1cl90eXBlLCBzdG9wX3R5cGU7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIGdib29sZWFuIGZsdXNoLCBrZXl1bml0LCBiZWZvcmUsIGFmdGVyLCBzbmFwX25leHQ7Ci0gIGdkb3VibGUgcmF0ZTsKLSAgZ2ludDY0IGN1ciwgc3RvcDsKLSAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKnRyYWNrID0gTlVMTDsKLSAgR3N0U2VnbWVudCBzZWVrc2VnbWVudCA9IHsgMCwgfTsKLSAgZ2Jvb2xlYW4gdXBkYXRlID0gVFJVRTsKLSAgZ2Jvb2xlYW4gcGFkX2xvY2tlZCA9IEZBTFNFOwotICBndWludDMyIHNlcW51bTsKLSAgR3N0U2VhcmNoTW9kZSBzbmFwX2RpcjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXZlbnQgIT0gTlVMTCwgRkFMU0UpOwotCi0gIGlmIChwYWQpCi0gICAgdHJhY2sgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJIYXZlIHNlZWsgJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsICZjdXJfdHlwZSwgJmN1ciwKLSAgICAgICZzdG9wX3R5cGUsICZzdG9wKTsKLSAgc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLQotICAvKiB3ZSBjYW4gb25seSBzZWVrIG9uIHRpbWUgKi8KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkNhbiBvbmx5IHNlZWsgb24gVElNRSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIGNvcHkgc2VnbWVudCwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0aGUgb2xkCi0gICAqIHNlZ21lbnQgd2hlbiB3ZSBjbG9zZSB0aGUgY3VycmVudCBzZWdtZW50LiAqLwotICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJmRlbXV4LT5jb21tb24uc2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgLyogcHVsbCBtb2RlIHdpdGhvdXQgaW5kZXggbWVhbnMgdGhhdCB0aGUgYWN0dWFsIGR1cmF0aW9uIGlzIG5vdCBrbm93biwKLSAgICogd2UgbWlnaHQgYmUgcGxheWluZyBhIGZpbGUgdGhhdCdzIHN0aWxsIGJlaW5nIHJlY29yZGVkCi0gICAqIHNvLCBpbnZhbGlkYXRlIG91ciBjdXJyZW50IGR1cmF0aW9uLCB3aGljaCBpcyBvbmx5IGEgbW92aW5nIHRhcmdldCwKLSAgICogYW5kIHNob3VsZCBub3QgYmUgdXNlZCB0byBjbGFtcCBhbnl0aGluZyAqLwotICBpZiAoIWRlbXV4LT5zdHJlYW1pbmcgJiYgIWRlbXV4LT5jb21tb24uaW5kZXggJiYgZGVtdXgtPmludmFsaWRfZHVyYXRpb24pIHsKLSAgICBzZWVrc2VnbWVudC5kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNvbmZpZ3VyaW5nIHNlZWsiKTsKLSAgLyogU3VidHJhY3Qgc3RyZWFtX3N0YXJ0X3RpbWUgc28gd2UgYWx3YXlzIHNlZWsgb24gYSBzZWdtZW50Ci0gICAqIGluIHN0cmVhbSB0aW1lICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKSkgewotICAgIHNlZWtzZWdtZW50LnN0YXJ0IC09IGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZTsKLSAgICBzZWVrc2VnbWVudC5wb3NpdGlvbiAtPSBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWU7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZWVrc2VnbWVudC5zdG9wKSkKLSAgICAgIHNlZWtzZWdtZW50LnN0b3AgLT0gZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lOwotICAgIGVsc2UKLSAgICAgIHNlZWtzZWdtZW50LnN0b3AgPSBzZWVrc2VnbWVudC5kdXJhdGlvbjsKLSAgfQotCi0gIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKLSAgICAgIGN1cl90eXBlLCBjdXIsIHN0b3BfdHlwZSwgc3RvcCwgJnVwZGF0ZSk7Ci0KLSAgLyogUmVzdG9yZSB0aGUgY2xpcCB0aW1lc3RhbXAgb2Zmc2V0ICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKSkgewotICAgIHNlZWtzZWdtZW50LnBvc2l0aW9uICs9IGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZTsKLSAgICBzZWVrc2VnbWVudC5zdGFydCArPSBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWU7Ci0gICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc2Vla3NlZ21lbnQuc3RvcCkpCi0gICAgICBzZWVrc2VnbWVudC5zdG9wID0gc2Vla3NlZ21lbnQuZHVyYXRpb247Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZWVrc2VnbWVudC5zdG9wKSkKLSAgICAgIHNlZWtzZWdtZW50LnN0b3AgKz0gZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lOwotICB9Ci0KLSAgLyogcmVzdG9yZSBzZWdtZW50IGR1cmF0aW9uIChpZiBhbnkgZWZmZWN0KSwKLSAgICogd291bGQgYmUgZGV0ZXJtaW5lZCBhZ2FpbiB3aGVuIHBhcnNpbmcsIGJ1dCBhbnl3YXkgLi4uICovCi0gIHNlZWtzZWdtZW50LmR1cmF0aW9uID0gZGVtdXgtPmNvbW1vbi5zZWdtZW50LmR1cmF0aW9uOwotCi0gIGZsdXNoID0gISAhKGZsYWdzICYgR1NUX1NFRUtfRkxBR19GTFVTSCk7Ci0gIGtleXVuaXQgPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0tFWV9VTklUKTsKLSAgYWZ0ZXIgPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NOQVBfQUZURVIpOwotICBiZWZvcmUgPSAhICEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NOQVBfQkVGT1JFKTsKLQotICAvKiBhbHdheXMgZG8gZnVsbCB1cGRhdGUgaWYgZmx1c2hpbmcsCi0gICAqIG90aGVyd2lzZSBwcm9ibGVtcyBtaWdodCBhcmlzZSBkb3duc3RyZWFtIHdpdGggbWlzc2luZyBrZXlmcmFtZXMgZXRjICovCi0gIHVwZGF0ZSA9IHVwZGF0ZSB8fCBmbHVzaDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIk5ldyBzZWdtZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnNlZWtzZWdtZW50KTsKLQotICAvKiBjaGVjayBzYW5pdHkgYmVmb3JlIHdlIHN0YXJ0IGZsdXNoaW5nIGFuZCBhbGwgdGhhdCAqLwotICBzbmFwX25leHQgPSBhZnRlciAmJiAhYmVmb3JlOwotICBpZiAoc2Vla3NlZ21lbnQucmF0ZSA8IDApCi0gICAgc25hcF9kaXIgPSBzbmFwX25leHQgPyBHU1RfU0VBUkNIX01PREVfQkVGT1JFIDogR1NUX1NFQVJDSF9NT0RFX0FGVEVSOwotICBlbHNlCi0gICAgc25hcF9kaXIgPSBzbmFwX25leHQgPyBHU1RfU0VBUkNIX01PREVfQUZURVIgOiBHU1RfU0VBUkNIX01PREVfQkVGT1JFOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICB0cmFjayA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9nZXRfc2Vla190cmFjayAoJmRlbXV4LT5jb21tb24sIHRyYWNrKTsKLSAgaWYgKChlbnRyeSA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9kb19pbmRleF9zZWVrICgmZGVtdXgtPmNvbW1vbiwgdHJhY2ssCi0gICAgICAgICAgICAgIHNlZWtzZWdtZW50LnBvc2l0aW9uLCAmZGVtdXgtPnNlZWtfaW5kZXgsICZkZW11eC0+c2Vla19lbnRyeSwKLSAgICAgICAgICAgICAgc25hcF9kaXIpKSA9PSBOVUxMKSB7Ci0gICAgLyogcHVsbCBtb2RlIHdpdGhvdXQgaW5kZXggY2FuIHNjYW4gbGF0ZXIgb24gKi8KLSAgICBpZiAoZGVtdXgtPnN0cmVhbWluZykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJObyBtYXRjaGluZyBzZWVrIGVudHJ5IGluIGluZGV4Iik7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0gZWxzZSBpZiAocmF0ZSA8IDAuMCkgewotICAgICAgLyogRklYTUU6IFdlIHNob3VsZCBidWlsZCBhbiBpbmRleCBkdXJpbmcgcGxheWJhY2sgb3Igd2hlbiBzY2FubmluZwotICAgICAgICogdGhhdCBjYW4gYmUgdXNlZCBoZXJlLiBUaGUgcmV2ZXJzZSBwbGF5YmFjayBjb2RlIHJlcXVpcmVzIHNlZWtfaW5kZXgKLSAgICAgICAqIGFuZCBzZWVrX2VudHJ5IHRvIGJlIHNldCEKLSAgICAgICAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgIk5vIG1hdGNoaW5nIHNlZWsgZW50cnkgaW4gaW5kZXgsIG5lZWRlZCBmb3IgcmV2ZXJzZSBwbGF5YmFjayIpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVrIHBvc2l0aW9uIGxvb2tzIHNhbmUiKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICBpZiAoIXVwZGF0ZSkgewotICAgIC8qIG9ubHkgaGF2ZSB0byB1cGRhdGUgc29tZSBzZWdtZW50LAotICAgICAqIGJ1dCBhbHNvIHN0aWxsIGhhdmUgdG8gaG9ub3VyIGZsdXNoIGFuZCBzbyBvbiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiLi4uIG5vIHVwZGF0ZSIpOwotICAgIC8qIGJhZCBnb3RvLCBiYWQgLi4uICovCi0gICAgZ290byBuZXh0OwotICB9Ci0KLSAgaWYgKGRlbXV4LT5zdHJlYW1pbmcpCi0gICAgZ290byBmaW5pc2g7Ci0KLW5leHQ6Ci0gIGlmIChmbHVzaCkgewotICAgIEdzdEV2ZW50ICpmbHVzaF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7Ci0gICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGZsdXNoX2V2ZW50LCBzZXFudW0pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU3RhcnRpbmcgZmx1c2giKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKGRlbXV4LT5jb21tb24uc2lua3BhZCwgZ3N0X2V2ZW50X3JlZiAoZmx1c2hfZXZlbnQpKTsKLSAgICBnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCAoZGVtdXgsIGZsdXNoX2V2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIk5vbi1mbHVzaGluZyBzZWVrLCBwYXVzaW5nIHRhc2siKTsKLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKGRlbXV4LT5jb21tb24uc2lua3BhZCk7Ci0gIH0KLSAgLyogb3VjaCAqLwotICBpZiAoIXVwZGF0ZSkgewotICAgIEdTVF9QQURfU1RSRUFNX0xPQ0sgKGRlbXV4LT5jb21tb24uc2lua3BhZCk7Ci0gICAgcGFkX2xvY2tlZCA9IFRSVUU7Ci0gICAgZ290byBleGl0OwotICB9Ci0KLSAgLyogbm93IGdyYWIgdGhlIHN0cmVhbSBsb2NrIHNvIHRoYXQgc3RyZWFtaW5nIGNhbm5vdCBjb250aW51ZSwgZm9yCi0gICAqIG5vbiBmbHVzaGluZyBzZWVrcyB3aGVuIHRoZSBlbGVtZW50IGlzIGluIFBBVVNFRCB0aGlzIGNvdWxkIGJsb2NrCi0gICAqIGZvcmV2ZXIuICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiV2FpdGluZyBmb3Igc3RyZWFtaW5nIHRvIHN0b3AiKTsKLSAgR1NUX1BBRF9TVFJFQU1fTE9DSyAoZGVtdXgtPmNvbW1vbi5zaW5rcGFkKTsKLSAgcGFkX2xvY2tlZCA9IFRSVUU7Ci0KLSAgLyogcHVsbCBtb2RlIHdpdGhvdXQgaW5kZXggY2FuIGRvIHNvbWUgc2Nhbm5pbmcgKi8KLSAgaWYgKCFkZW11eC0+c3RyZWFtaW5nICYmICFlbnRyeSkgewotICAgIEdzdEV2ZW50ICpmbHVzaF9ldmVudDsKLQotICAgIC8qIG5lZWQgdG8gc3RvcCBmbHVzaGluZyB1cHN0cmVhbSBhcyB3ZSBuZWVkIGl0IG5leHQgKi8KLSAgICBpZiAoZmx1c2gpIHsKLSAgICAgIGZsdXNoX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLSAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChmbHVzaF9ldmVudCwgc2VxbnVtKTsKLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPmNvbW1vbi5zaW5rcGFkLCBmbHVzaF9ldmVudCk7Ci0gICAgfQotICAgIGVudHJ5ID0gZ3N0X21hdHJvc2thX2RlbXV4X3NlYXJjaF9wb3MgKGRlbXV4LCBzZWVrc2VnbWVudC5wb3NpdGlvbik7Ci0gICAgLyoga2VlcCBsb2NhbCBjb3B5ICovCi0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBzY2FuX2VudHJ5ID0gKmVudHJ5OwotICAgICAgZ19mcmVlIChlbnRyeSk7Ci0gICAgICBlbnRyeSA9ICZzY2FuX2VudHJ5OwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlNjYW4gZmFpbGVkIHRvIGZpbmQgbWF0Y2hpbmcgcG9zaXRpb24iKTsKLSAgICAgIGlmIChmbHVzaCkgewotICAgICAgICBmbHVzaF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSk7Ci0gICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChmbHVzaF9ldmVudCwgc2VxbnVtKTsKLSAgICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X3NlbmRfZXZlbnQgKGRlbXV4LCBmbHVzaF9ldmVudCk7Ci0gICAgICB9Ci0gICAgICBnb3RvIHNlZWtfZXJyb3I7Ci0gICAgfQotICB9Ci0KLWZpbmlzaDoKLSAgaWYgKGtleXVuaXQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZWsgdG8ga2V5IHVuaXQsIGFkanVzdGluZyBzZWdtZW50IHN0YXJ0IGZyb20gJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChzZWVrc2VnbWVudC5zdGFydCksIEdTVF9USU1FX0FSR1MgKGVudHJ5LT50aW1lKSk7Ci0gICAgc2Vla3NlZ21lbnQuc3RhcnQgPSBNQVggKGVudHJ5LT50aW1lLCBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUpOwotICAgIHNlZWtzZWdtZW50LnBvc2l0aW9uID0gc2Vla3NlZ21lbnQuc3RhcnQ7Ci0gICAgc2Vla3NlZ21lbnQudGltZSA9IHNlZWtzZWdtZW50LnN0YXJ0IC0gZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lOwotICB9Ci0KLSAgaWYgKGRlbXV4LT5zdHJlYW1pbmcpIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAvKiB0cmFjayByZWFsIHBvc2l0aW9uIHdlIHNob3VsZCBzdGFydCBhdCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic3RvcmluZyBzZWdtZW50IHN0YXJ0Iik7Ci0gICAgZGVtdXgtPnJlcXVlc3RlZF9zZWVrX3RpbWUgPSBzZWVrc2VnbWVudC5wb3NpdGlvbjsKLSAgICBkZW11eC0+c2Vla19vZmZzZXQgPSBlbnRyeS0+cG9zICsgZGVtdXgtPmNvbW1vbi5lYm1sX3NlZ21lbnRfc3RhcnQ7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAvKiBuZWVkIHRvIHNlZWsgdG8gY2x1c3RlciBzdGFydCB0byBwaWNrIHVwIGNsdXN0ZXIgdGltZSAqLwotICAgIC8qIHVwc3RyZWFtIHRha2VzIGNhcmUgb2YgZmx1c2hpbmcgYW5kIGFsbCB0aGF0Ci0gICAgICogLi4uIGFuZCBuZXdzZWdtZW50IGV2ZW50IGhhbmRsaW5nIHRha2VzIGNhcmUgb2YgdGhlIHJlc3QgKi8KLSAgICByZXR1cm4gcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoZGVtdXgsIHJhdGUsCi0gICAgICAgIGVudHJ5LT5wb3MgKyBkZW11eC0+Y29tbW9uLmVibWxfc2VnbWVudF9zdGFydCwgc2VxbnVtLCBmbGFncyk7Ci0gIH0KLQotZXhpdDoKLSAgaWYgKGZsdXNoKSB7Ci0gICAgR3N0RXZlbnQgKmZsdXNoX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZmx1c2hfZXZlbnQsIHNlcW51bSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTdG9wcGluZyBmbHVzaCIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoZGVtdXgtPmNvbW1vbi5zaW5rcGFkLCBnc3RfZXZlbnRfcmVmIChmbHVzaF9ldmVudCkpOwotICAgIGdzdF9tYXRyb3NrYV9kZW11eF9zZW5kX2V2ZW50IChkZW11eCwgZmx1c2hfZXZlbnQpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gIC8qIG5vdyB1cGRhdGUgdGhlIHJlYWwgc2VnbWVudCBpbmZvICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ29tbWl0dGluZyBuZXcgc2VlayBzZWdtZW50Iik7Ci0gIG1lbWNweSAoJmRlbXV4LT5jb21tb24uc2VnbWVudCwgJnNlZWtzZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICAvKiB1cGRhdGUgc29tZSAoc2VnbWVudCkgc3RhdGUgKi8KLSAgaWYgKCFnc3RfbWF0cm9za2FfZGVtdXhfbW92ZV90b19lbnRyeSAoZGVtdXgsIGVudHJ5LCBUUlVFLCB1cGRhdGUpKQotICAgIGdvdG8gc2Vla19lcnJvcjsKLQotICAvKiBub3RpZnkgc3RhcnQgb2YgbmV3IHNlZ21lbnQgKi8KLSAgaWYgKGRlbXV4LT5jb21tb24uc2VnbWVudC5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgIEdzdE1lc3NhZ2UgKm1zZzsKLQotICAgIG1zZyA9IGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0IChHU1RfT0JKRUNUIChkZW11eCksCi0gICAgICAgIEdTVF9GT1JNQVRfVElNRSwgZGVtdXgtPmNvbW1vbi5zZWdtZW50LnN0YXJ0KTsKLSAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtc2csIHNlcW51bSk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVCAoZGVtdXgpLCBtc2cpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gIGlmIChkZW11eC0+bmV3X3NlZ21lbnQpCi0gICAgZ3N0X2V2ZW50X3VucmVmIChkZW11eC0+bmV3X3NlZ21lbnQpOwotCi0gIC8qIE9uIHBvcnQgZnJvbSAwLjEwLCBkaXNjYXJkZWQgIXVwZGF0ZSAoZm9yIHNlZ21lbnQudXBkYXRlKSBoZXJlLCBGSVhNRT8gKi8KLSAgZGVtdXgtPm5ld19zZWdtZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmZGVtdXgtPmNvbW1vbi5zZWdtZW50KTsKLSAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGRlbXV4LT5uZXdfc2VnbWVudCwgc2VxbnVtKTsKLSAgaWYgKGRlbXV4LT5jb21tb24uc2VnbWVudC5yYXRlIDwgMCAmJiBkZW11eC0+Y29tbW9uLnNlZ21lbnQuc3RvcCA9PSAtMSkKLSAgICBkZW11eC0+dG9fdGltZSA9IGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbjsKLSAgZWxzZQotICAgIGRlbXV4LT50b190aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZGVtdXgtPnNlZ21lbnRfc2VxbnVtID0gc2VxbnVtOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gIC8qIHJlc3RhcnQgb3VyIHRhc2sgc2luY2UgaXQgbWlnaHQgaGF2ZSBiZWVuIHN0b3BwZWQgd2hlbiB3ZSBkaWQgdGhlCi0gICAqIGZsdXNoLiAqLwotICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKGRlbXV4LT5jb21tb24uc2lua3BhZCwKLSAgICAgIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9tYXRyb3NrYV9kZW11eF9sb29wLCBkZW11eC0+Y29tbW9uLnNpbmtwYWQsIE5VTEwpOwotCi0gIC8qIHN0cmVhbWluZyBjYW4gY29udGludWUgbm93ICovCi0gIGlmIChwYWRfbG9ja2VkKSB7Ci0gICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChkZW11eC0+Y29tbW9uLnNpbmtwYWQpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLXNlZWtfZXJyb3I6Ci0gIHsKLSAgICBpZiAocGFkX2xvY2tlZCkgewotICAgICAgR1NUX1BBRF9TVFJFQU1fVU5MT0NLIChkZW11eC0+Y29tbW9uLnNpbmtwYWQpOwotICAgIH0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJHb3QgYSBzZWVrIGVycm9yIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKgotICogSGFuZGxlIHdoZXRoZXIgd2UgY2FuIHBlcmZvcm0gdGhlIHNlZWsgZXZlbnQgb3IgaWYgd2UgaGF2ZSB0byBsZXQgdGhlIGNoYWluCi0gKiBmdW5jdGlvbiBoYW5kbGUgc2Vla3MgdG8gYnVpbGQgdGhlIHNlZWsgaW5kZXhlcyBmaXJzdC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RTZWVrVHlwZSBjdXJfdHlwZSwgc3RvcF90eXBlOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBnZG91YmxlIHJhdGU7Ci0gIGdpbnQ2NCBjdXIsIHN0b3A7Ci0KLSAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLCAmY3VyX3R5cGUsICZjdXIsCi0gICAgICAmc3RvcF90eXBlLCAmc3RvcCk7Ci0KLSAgLyogc2FuaXR5IGNoZWNrcyAqLwotCi0gIC8qIHdlIGNhbiBvbmx5IHNlZWsgb24gdGltZSAqLwotICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ2FuIG9ubHkgc2VlayBvbiBUSU1FIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKHN0b3BfdHlwZSAhPSBHU1RfU0VFS19UWVBFX05PTkUgJiYgc3RvcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVrIGVuZC10aW1lIG5vdCBzdXBwb3J0ZWQgaW4gc3RyZWFtaW5nIG1vZGUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIShmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0gpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICJOb24tZmx1c2hpbmcgc2VlayBub3Qgc3VwcG9ydGVkIGluIHN0cmVhbWluZyBtb2RlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKGZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWdtZW50IHNlZWsgbm90IHN1cHBvcnRlZCBpbiBzdHJlYW1pbmcgbW9kZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIGNoZWNrIGZvciBoYXZpbmcgcGFyc2VkIGluZGV4IGFscmVhZHkgKi8KLSAgaWYgKCFkZW11eC0+Y29tbW9uLmluZGV4X3BhcnNlZCkgewotICAgIGdib29sZWFuIGJ1aWxkaW5nX2luZGV4OwotICAgIGd1aW50NjQgb2Zmc2V0ID0gMDsKLQotICAgIGlmICghZGVtdXgtPmluZGV4X29mZnNldCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJubyBpbmRleCAobG9jYXRpb24pOyBubyBzZWVrIGluIHB1c2ggbW9kZSIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICAgIC8qIGhhbmRsZSB0aGUgc2VlayBldmVudCBpbiB0aGUgY2hhaW4gZnVuY3Rpb24gKi8KLSAgICBkZW11eC0+Y29tbW9uLnN0YXRlID0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfU0VFSzsKLSAgICAvKiBubyBtb3JlIHNlZWsgY2FuIGJlIGlzc3VlZCB1bnRpbCBzdGF0ZSByZXNldCB0byBfREFUQSAqLwotCi0gICAgLyogY29weSB0aGUgZXZlbnQgKi8KLSAgICBpZiAoZGVtdXgtPnNlZWtfZXZlbnQpCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGRlbXV4LT5zZWVrX2V2ZW50KTsKLSAgICBkZW11eC0+c2Vla19ldmVudCA9IGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLQotICAgIC8qIHNldCB0aGUgYnVpbGRpbmdfaW5kZXggZmxhZyBzbyB0aGF0IG9ubHkgb25lIHRocmVhZCBjYW4gc2V0dXAgdGhlCi0gICAgICogc3RydWN0dXJlcyBmb3IgaW5kZXggc2Vla2luZy4gKi8KLSAgICBidWlsZGluZ19pbmRleCA9IGRlbXV4LT5idWlsZGluZ19pbmRleDsKLSAgICBpZiAoIWJ1aWxkaW5nX2luZGV4KSB7Ci0gICAgICBkZW11eC0+YnVpbGRpbmdfaW5kZXggPSBUUlVFOwotICAgICAgb2Zmc2V0ID0gZGVtdXgtPmluZGV4X29mZnNldDsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICAgIGlmICghYnVpbGRpbmdfaW5kZXgpIHsKLSAgICAgIC8qIHNlZWsgdG8gdGhlIGZpcnN0IHN1YmluZGV4IG9yIGxlZ2FjeSBpbmRleCAqLwotICAgICAgR1NUX0lORk9fT0JKRUNUIChkZW11eCwgIlNlZWtpbmcgdG8gQ3VlcyBhdCAlIiBHX0dVSU5UNjRfRk9STUFULCBvZmZzZXQpOwotICAgICAgcmV0dXJuIHBlcmZvcm1fc2Vla190b19vZmZzZXQgKGRlbXV4LCByYXRlLCBvZmZzZXQsCi0gICAgICAgICAgZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KSwgR1NUX1NFRUtfRkxBR19OT05FKTsKLSAgICB9Ci0KLSAgICAvKiB3ZWxsLCB3ZSBhcmUgaGFuZGxpbmcgaXQgYWxyZWFkeSAqLwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogZGVsZWdhdGUgdG8gdHdlYWtlZCByZWd1bGFyIHNlZWsgKi8KLSAgcmV0dXJuIGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCAoZGVtdXgsIHBhZCwgZXZlbnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RNYXRyb3NrYURlbXV4ICpkZW11eCA9IEdTVF9NQVRST1NLQV9ERU1VWCAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgLyogbm8gc2Vla2luZyB1bnRpbCB3ZSBhcmUgKHNhZmVseSkgcmVhZHkgKi8KLSAgICAgIGlmIChkZW11eC0+Y29tbW9uLnN0YXRlICE9IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEEpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJub3QgcmVhZHkgZm9yIHNlZWtpbmcgeWV0Iik7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBpZiAoIWRlbXV4LT5zdHJlYW1pbmcpCi0gICAgICAgIHJlcyA9IGdzdF9tYXRyb3NrYV9kZW11eF9oYW5kbGVfc2Vla19ldmVudCAoZGVtdXgsIHBhZCwgZXZlbnQpOwotICAgICAgZWxzZQotICAgICAgICByZXMgPSBnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfcHVzaCAoZGVtdXgsIHBhZCwgZXZlbnQpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKLSAgICB7Ci0gICAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgICAgIGlmIChjb250ZXh0LT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPKSB7Ci0gICAgICAgIEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQgKnZpZGVvY29udGV4dCA9Ci0gICAgICAgICAgICAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqKSBjb250ZXh0OwotICAgICAgICBnZG91YmxlIHByb3BvcnRpb247Ci0gICAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICAgICAgICBnc3RfZXZlbnRfcGFyc2VfcW9zIChldmVudCwgTlVMTCwgJnByb3BvcnRpb24sICZkaWZmLCAmdGltZXN0YW1wKTsKLQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgdmlkZW9jb250ZXh0LT5lYXJsaWVzdF90aW1lID0gdGltZXN0YW1wICsgZGlmZjsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgIH0KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR1NUX0VWRU5UX1RPQ19TRUxFQ1Q6Ci0gICAgewotICAgICAgY2hhciAqdWlkID0gTlVMTDsKLSAgICAgIEdzdFRvY0VudHJ5ICplbnRyeSA9IE5VTEw7Ci0gICAgICBHc3RFdmVudCAqc2Vla19ldmVudDsKLSAgICAgIGdpbnQ2NCBzdGFydF9wb3M7Ci0KLSAgICAgIGlmICghZGVtdXgtPmNvbW1vbi50b2MpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJubyBUT0MgdG8gc2VsZWN0Iik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV90b2Nfc2VsZWN0IChldmVudCwgJnVpZCk7Ci0gICAgICAgIGlmICh1aWQgIT0gTlVMTCkgewotICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICAgICAgICAgIGVudHJ5ID0gZ3N0X3RvY19maW5kX2VudHJ5IChkZW11eC0+Y29tbW9uLnRvYywgdWlkKTsKLSAgICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgewotICAgICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJubyBUT0MgZW50cnkgd2l0aCBnaXZlbiBVSUQ6ICVzIiwgdWlkKTsKLSAgICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzIChlbnRyeSwgJnN0YXJ0X3BvcywgTlVMTCk7Ci0gICAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgICAgICAgc2Vla19ldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLAotICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBzdGFydF9wb3MsIEdTVF9TRUVLX1RZUEVfU0VULCAtMSk7Ci0gICAgICAgICAgICByZXMgPSBnc3RfbWF0cm9za2FfZGVtdXhfaGFuZGxlX3NlZWtfZXZlbnQgKGRlbXV4LCBwYWQsIHNlZWtfZXZlbnQpOwotICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChzZWVrX2V2ZW50KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ19mcmVlICh1aWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJyZWNlaXZlZCBlbXB0eSBUT0Mgc2VsZWN0IGV2ZW50Iik7Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgICAvKiBldmVudHMgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgKi8KLSAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfRVZFTlRfTEFURU5DWToKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkZW11eC0+Y29tbW9uLnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9kZW11eF9zZWVrX3RvX3ByZXZpb3VzX2tleWZyYW1lIChHc3RNYXRyb3NrYURlbXV4ICogZGVtdXgpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfRU9TOwotICBnYm9vbGVhbiBkb25lID0gVFJVRTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZW11eC0+c2Vla19pbmRleCwgR1NUX0ZMT1dfRU9TKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRlbXV4LT5zZWVrX2VudHJ5IDwgZGVtdXgtPnNlZWtfaW5kZXgtPmxlbiwKLSAgICAgIEdTVF9GTE9XX0VPUyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJsb2NhdGluZyBwcmV2aW91cyBrZXlmcmFtZSIpOwotCi0gIGlmICghZGVtdXgtPnNlZWtfZW50cnkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIm5vIGVhcmxpZXIgaW5kZXggZW50cnkiKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgZGVtdXgtPmNvbW1vbi5zcmMtPmxlbjsgaSsrKSB7Ci0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKnN0cmVhbSA9IGdfcHRyX2FycmF5X2luZGV4IChkZW11eC0+Y29tbW9uLnNyYywgaSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZ21lbnQgc3RhcnQgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIsIHN0cmVhbSAlZCBhdCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5jb21tb24uc2VnbWVudC5zdGFydCksIHN0cmVhbS0+aW5kZXgsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHN0cmVhbS0+ZnJvbV90aW1lKSk7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW0tPmZyb21fdGltZSkpIHsKLSAgICAgIGlmIChzdHJlYW0tPmZyb21fdGltZSA+IGRlbXV4LT5jb21tb24uc2VnbWVudC5zdGFydCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInN0cmVhbSAlZCBub3QgZmluaXNoZWQgeWV0Iiwgc3RyZWFtLT5pbmRleCk7Ci0gICAgICAgIGRvbmUgPSBGQUxTRTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLyogbm90aGluZyBwdXNoZWQgZm9yIHRoaXMgc3RyZWFtOwotICAgICAgICogbGlrZWx5IHNlZWsgZW50cnkgZGlkIG5vdCBzdGFydCBhdCBrZXlmcmFtZSwgc28gYWxsIHdhcyBza2lwcGVkLgotICAgICAgICogU28gd2UgbmVlZCBhbiBlYXJsaWVyIGVudHJ5ICovCi0gICAgICBkb25lID0gRkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFkb25lKSB7Ci0gICAgR3N0TWF0cm9za2FJbmRleCAqZW50cnk7Ci0KLSAgICBlbnRyeSA9ICZnX2FycmF5X2luZGV4IChkZW11eC0+c2Vla19pbmRleCwgR3N0TWF0cm9za2FJbmRleCwKLSAgICAgICAgLS1kZW11eC0+c2Vla19lbnRyeSk7Ci0gICAgaWYgKCFnc3RfbWF0cm9za2FfZGVtdXhfbW92ZV90b19lbnRyeSAoZGVtdXgsIGVudHJ5LCBGQUxTRSwgVFJVRSkpCi0gICAgICBnb3RvIGV4aXQ7Ci0KLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgfQotCi1leGl0OgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX3RyYWNrcyAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LCBHc3RFYm1sUmVhZCAqIGVibWwpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50MzIgaWQ7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoZGVtdXgsIGVibWwsICJUcmFja3MiKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoZGVtdXgsIGVibWwsICJUcmFja3MiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIC8qIG9uZSB0cmFjayB3aXRoaW4gdGhlICJhbGwtdHJhY2tzIiBoZWFkZXIgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLRU5UUlk6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtIChkZW11eCwgZWJtbCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2Vfc2tpcCAoJmRlbXV4LT5jb21tb24sIGVibWwsCi0gICAgICAgICAgICAiVHJhY2siLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBERUJVR19FTEVNRU5UX1NUT1AgKGRlbXV4LCBlYm1sLCAiVHJhY2tzIiwgcmV0KTsKLQotICBkZW11eC0+dHJhY2tzX3BhcnNlZCA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFJlYWQgc2lnbmVkL3Vuc2lnbmVkICJFQk1MIiBudW1iZXJzLgotICogUmV0dXJuOiBudW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkLgotICovCi0KLXN0YXRpYyBnaW50Ci1nc3RfbWF0cm9za2FfZWJtbG51bV91aW50IChndWludDggKiBkYXRhLCBndWludCBzaXplLCBndWludDY0ICogbnVtKQotewotICBnaW50IGxlbl9tYXNrID0gMHg4MCwgcmVhZCA9IDEsIG4gPSAxLCBudW1fZmZzID0gMDsKLSAgZ3VpbnQ2NCB0b3RhbDsKLQotICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgdG90YWwgPSBkYXRhWzBdOwotICB3aGlsZSAocmVhZCA8PSA4ICYmICEodG90YWwgJiBsZW5fbWFzaykpIHsKLSAgICByZWFkKys7Ci0gICAgbGVuX21hc2sgPj49IDE7Ci0gIH0KLSAgaWYgKHJlYWQgPiA4KQotICAgIHJldHVybiAtMTsKLQotICBpZiAoKHRvdGFsICY9IChsZW5fbWFzayAtIDEpKSA9PSBsZW5fbWFzayAtIDEpCi0gICAgbnVtX2ZmcysrOwotICBpZiAoc2l6ZSA8IHJlYWQpCi0gICAgcmV0dXJuIC0xOwotICB3aGlsZSAobiA8IHJlYWQpIHsKLSAgICBpZiAoZGF0YVtuXSA9PSAweGZmKQotICAgICAgbnVtX2ZmcysrOwotICAgIHRvdGFsID0gKHRvdGFsIDw8IDgpIHwgZGF0YVtuXTsKLSAgICBuKys7Ci0gIH0KLQotICBpZiAocmVhZCA9PSBudW1fZmZzICYmIHRvdGFsICE9IDApCi0gICAgKm51bSA9IEdfTUFYVUlOVDY0OwotICBlbHNlCi0gICAgKm51bSA9IHRvdGFsOwotCi0gIHJldHVybiByZWFkOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X21hdHJvc2thX2VibWxudW1fc2ludCAoZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwgZ2ludDY0ICogbnVtKQotewotICBndWludDY0IHVudW07Ci0gIGdpbnQgcmVzOwotCi0gIC8qIHJlYWQgYXMgdW5zaWduZWQgbnVtYmVyIGZpcnN0ICovCi0gIGlmICgocmVzID0gZ3N0X21hdHJvc2thX2VibWxudW1fdWludCAoZGF0YSwgc2l6ZSwgJnVudW0pKSA8IDApCi0gICAgcmV0dXJuIC0xOwotCi0gIC8qIG1ha2Ugc2lnbmVkICovCi0gIGlmICh1bnVtID09IEdfTUFYVUlOVDY0KQotICAgICpudW0gPSBHX01BWElOVDY0OwotICBlbHNlCi0gICAgKm51bSA9IHVudW0gLSAoKDEgPDwgKCg3ICogcmVzKSAtIDEpKSAtIDEpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiBNb3N0bHkgdXNlZCBmb3Igc3VidGl0bGVzLiBXZSBhZGQgdm9pZCBmaWxsZXIgZGF0YSBmb3IgZWFjaAotICogbGFnZ2luZyBzdHJlYW0gdG8gbWFrZSBzdXJlIHdlIGRvbid0IGRlYWRsb2NrLgotICovCi0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfc3luY19zdHJlYW1zIChHc3RNYXRyb3NrYURlbXV4ICogZGVtdXgpCi17Ci0gIEdzdENsb2NrVGltZSBnYXBfdGhyZXNob2xkOwotICBnaW50IHN0cmVhbV9ucjsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJTeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbikpOwotCi0gIGdfYXNzZXJ0IChkZW11eC0+Y29tbW9uLm51bV9zdHJlYW1zID09IGRlbXV4LT5jb21tb24uc3JjLT5sZW4pOwotICBmb3IgKHN0cmVhbV9uciA9IDA7IHN0cmVhbV9uciA8IGRlbXV4LT5jb21tb24uc3JjLT5sZW47IHN0cmVhbV9ucisrKSB7Ci0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQ7Ci0KLSAgICBjb250ZXh0ID0gZ19wdHJfYXJyYXlfaW5kZXggKGRlbXV4LT5jb21tb24uc3JjLCBzdHJlYW1fbnIpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAiQ2hlY2tpbmcgZm9yIHJlc3luYyBvbiBzdHJlYW0gJWQgKCUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsIHN0cmVhbV9uciwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoY29udGV4dC0+cG9zKSk7Ci0KLSAgICAvKiBPbmx5IHNlbmQgZ2FwIGV2ZW50cyBvbiBub24tc3VidGl0bGUgc3RyZWFtcyBpZiBsYWdnaW5nIHdheSBiZWhpbmQuCi0gICAgICogVGhlIDAuNSBzZWNvbmQgdGhyZXNob2xkIGZvciBzdWJ0aXRsZSBzdHJlYW1zIGlzIGFsc28gcXVpdGUgcmFuZG9tLiAqLwotICAgIGlmIChjb250ZXh0LT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1NVQlRJVExFKQotICAgICAgZ2FwX3RocmVzaG9sZCA9IEdTVF9TRUNPTkQgLyAyOwotICAgIGVsc2UKLSAgICAgIGdhcF90aHJlc2hvbGQgPSAzICogR1NUX1NFQ09ORDsKLQotICAgIC8qIExhZyBuZWVkIG9ubHkgYmUgY29uc2lkZXJlZCBpZiB3ZSBoYXZlIGFkdmFuY2VkIGludG8gcmVxdWVzdGVkIHNlZ21lbnQgKi8KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGNvbnRleHQtPnBvcykgJiYKLSAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbikgJiYKLSAgICAgICAgZGVtdXgtPmNvbW1vbi5zZWdtZW50LnBvc2l0aW9uID4gZGVtdXgtPmNvbW1vbi5zZWdtZW50LnN0YXJ0ICYmCi0gICAgICAgIGNvbnRleHQtPnBvcyArIGdhcF90aHJlc2hvbGQgPCBkZW11eC0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24pIHsKLQotICAgICAgR3N0RXZlbnQgKmV2ZW50OwotICAgICAgZ3VpbnQ2NCBzdGFydCA9IGNvbnRleHQtPnBvczsKLSAgICAgIGd1aW50NjQgc3RvcCA9IGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbiAtIGdhcF90aHJlc2hvbGQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICJTeW5jaHJvbml6aW5nIHN0cmVhbSAlZCB3aXRoIG90aGVyIGJ5IGFkdmFuY2luZyB0aW1lIGZyb20gJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiB0byAlIiBHU1RfVElNRV9GT1JNQVQsIHN0cmVhbV9uciwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChzdGFydCksIEdTVF9USU1FX0FSR1MgKHN0b3ApKTsKLQotICAgICAgY29udGV4dC0+cG9zID0gc3RvcDsKLQotICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2dhcCAoc3RhcnQsIHN0b3AgLSBzdGFydCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChjb250ZXh0LT5wYWQsIGV2ZW50KTsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICAgIH0KLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfcHVzaF9zdHJlYW1faGVhZGVycyAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LAotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogc3RyZWFtKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBnaW50IGksIG51bTsKLQotICBudW0gPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChzdHJlYW0tPnN0cmVhbV9oZWFkZXJzKTsKLSAgZm9yIChpID0gMDsgaSA8IG51bTsgKytpKSB7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICBidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChzdHJlYW0tPnN0cmVhbV9oZWFkZXJzLCBpKTsKLSAgICBidWYgPSBnc3RfYnVmZmVyX2NvcHkgKGJ1Zik7Ci0KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotCi0gICAgaWYgKHN0cmVhbS0+c2V0X2Rpc2NvbnQpIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgc3RyZWFtLT5zZXRfZGlzY29udCA9IEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgIH0KLQotICAgIC8qIHB1c2ggb3V0IGFsbCBoZWFkZXJzIGluIG9uZSBnbyBhbmQgdXNlIGxhc3QgZmxvdyByZXR1cm4gKi8KLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHN0cmVhbS0+cGFkLCBidWYpOwotICB9Ci0KLSAgLyogZG9uJ3QgbmVlZCB0aGVzZSBhbnkgIGxvbmdlciAqLwotICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKHN0cmVhbS0+c3RyZWFtX2hlYWRlcnMpOwotICBzdHJlYW0tPnN0cmVhbV9oZWFkZXJzID0gTlVMTDsKLQotICAvKiBjb21iaW5lIGZsb3dzICovCi0gIHJldCA9IGdzdF9mbG93X2NvbWJpbmVyX3VwZGF0ZV9mbG93IChkZW11eC0+Zmxvd2NvbWJpbmVyLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfcHVzaF9kdmRfY2x1dF9jaGFuZ2VfZXZlbnQgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHN0cmVhbSkKLXsKLSAgZ2NoYXIgKmJ1ZiwgKnN0YXJ0OwotCi0gIGdfYXNzZXJ0ICghc3RyY21wIChzdHJlYW0tPmNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfVk9CU1VCKSk7Ci0KLSAgaWYgKCFzdHJlYW0tPmNvZGVjX3ByaXYpCi0gICAgcmV0dXJuOwotCi0gIC8qIGlkZWFsbHksIFZvYlN1YiBwcml2YXRlIGRhdGEgc2hvdWxkIGJlIHBhcnNlZCBhbmQgc3RvcmVkIG1vcmUgY29udmVuaWVudAotICAgKiBlbHNld2hlcmUsIGJ1dCBmb3Igbm93LCBvbmx5IGludGVyZXN0ZWQgaW4gYSBzbWFsbCBwYXJ0ICovCi0KLSAgLyogbWFrZSBzdXJlIHdlIGhhdmUgdGVybWluYXRpbmcgMCAqLwotICBidWYgPSBnX3N0cm5kdXAgKHN0cmVhbS0+Y29kZWNfcHJpdiwgc3RyZWFtLT5jb2RlY19wcml2X3NpemUpOwotCi0gIC8qIGp1c3QgbG9jYXRlIGFuZCBwYXJzZSBwYWxldHRlIHBhcnQgKi8KLSAgc3RhcnQgPSBzdHJzdHIgKGJ1ZiwgInBhbGV0dGU6Iik7Ci0gIGlmIChzdGFydCkgewotICAgIGdpbnQgaTsKLSAgICBndWludDMyIGNsdXRbMTZdOwotICAgIGd1aW50MzIgY29sOwotICAgIGd1aW50OCByLCBnLCBiLCB5LCB1LCB2OwotCi0gICAgc3RhcnQgKz0gODsKLSAgICB3aGlsZSAoZ19hc2NpaV9pc3NwYWNlICgqc3RhcnQpKQotICAgICAgc3RhcnQrKzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgaWYgKHNzY2FuZiAoc3RhcnQsICIlMDZ4IiwgJmNvbCkgIT0gMSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICBzdGFydCArPSA2OwotICAgICAgd2hpbGUgKCgqc3RhcnQgPT0gJywnKSB8fCBnX2FzY2lpX2lzc3BhY2UgKCpzdGFydCkpCi0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAvKiBzaWdoLCBuZWVkIHRvIGNvbnZlcnQgdGhpcyBmcm9tIHZvYnN1YiBwc2V1ZG8tUkdCIHRvIFlVViAqLwotICAgICAgciA9IChjb2wgPj4gMTYpICYgMHhmZjsKLSAgICAgIGcgPSAoY29sID4+IDgpICYgMHhmZjsKLSAgICAgIGIgPSBjb2wgJiAweGZmOwotICAgICAgeSA9IENMQU1QICgoMC4xNDk0ICogciArIDAuNjA2MSAqIGcgKyAwLjI0NDUgKiBiKSAqIDIxOSAvIDI1NSArIDE2LCAwLAotICAgICAgICAgIDI1NSk7Ci0gICAgICB1ID0gQ0xBTVAgKDAuNjA2NiAqIHIgLSAwLjQzMjIgKiBnIC0gMC4xNzQ0ICogYiArIDEyOCwgMCwgMjU1KTsKLSAgICAgIHYgPSBDTEFNUCAoLTAuMDg0MzUgKiByIC0gMC4zNDIyICogZyArIDAuNDI2NiAqIGIgKyAxMjgsIDAsIDI1NSk7Ci0gICAgICBjbHV0W2ldID0gKHkgPDwgMTYpIHwgKHUgPDwgOCkgfCB2OwotICAgIH0KLQotICAgIC8qIGdvdCB0aGVtIGFsbCB3aXRob3V0IHByb2JsZW1zOyBidWlsZCBhbmQgc2VuZCBldmVudCAqLwotICAgIGlmIChpID09IDE2KSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtZ3N0LWR2ZCIsICJldmVudCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgICAgImR2ZC1zcHUtY2x1dC1jaGFuZ2UiLCAiY2x1dDAwIiwgR19UWVBFX0lOVCwgY2x1dFswXSwgImNsdXQwMSIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgY2x1dFsxXSwgImNsdXQwMiIsIEdfVFlQRV9JTlQsIGNsdXRbMl0sICJjbHV0MDMiLAotICAgICAgICAgIEdfVFlQRV9JTlQsIGNsdXRbM10sICJjbHV0MDQiLCBHX1RZUEVfSU5ULCBjbHV0WzRdLCAiY2x1dDA1IiwKLSAgICAgICAgICBHX1RZUEVfSU5ULCBjbHV0WzVdLCAiY2x1dDA2IiwgR19UWVBFX0lOVCwgY2x1dFs2XSwgImNsdXQwNyIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgY2x1dFs3XSwgImNsdXQwOCIsIEdfVFlQRV9JTlQsIGNsdXRbOF0sICJjbHV0MDkiLAotICAgICAgICAgIEdfVFlQRV9JTlQsIGNsdXRbOV0sICJjbHV0MTAiLCBHX1RZUEVfSU5ULCBjbHV0WzEwXSwgImNsdXQxMSIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgY2x1dFsxMV0sICJjbHV0MTIiLCBHX1RZUEVfSU5ULCBjbHV0WzEyXSwgImNsdXQxMyIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgY2x1dFsxM10sICJjbHV0MTQiLCBHX1RZUEVfSU5ULCBjbHV0WzE0XSwgImNsdXQxNSIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgY2x1dFsxNV0sIE5VTEwpOwotCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fU1RJQ0tZLCBzKSk7Ci0gICAgfQotICB9Ci0gIGdfZnJlZSAoYnVmKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2NvZGVjX2RhdGFfYWxsIChHc3RNYXRyb3NrYURlbXV4ICogZGVtdXgpCi17Ci0gIGdpbnQgc3RyZWFtX25yOwotCi0gIGdfYXNzZXJ0IChkZW11eC0+Y29tbW9uLm51bV9zdHJlYW1zID09IGRlbXV4LT5jb21tb24uc3JjLT5sZW4pOwotICBmb3IgKHN0cmVhbV9uciA9IDA7IHN0cmVhbV9uciA8IGRlbXV4LT5jb21tb24uc3JjLT5sZW47IHN0cmVhbV9ucisrKSB7Ci0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKnN0cmVhbTsKLQotICAgIHN0cmVhbSA9IGdfcHRyX2FycmF5X2luZGV4IChkZW11eC0+Y29tbW9uLnNyYywgc3RyZWFtX25yKTsKLQotICAgIGlmIChzdHJlYW0tPnNlbmRfc3RyZWFtX2hlYWRlcnMpIHsKLSAgICAgIGlmIChzdHJlYW0tPnN0cmVhbV9oZWFkZXJzICE9IE5VTEwpIHsKLSAgICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfc3RyZWFtX2hlYWRlcnMgKGRlbXV4LCBzdHJlYW0pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogRklYTUU6IHBlcmhhcHMgd2UgY2FuIGp1c3QgZGlzYWJsZSBhbmQgc2tpcCB0aGlzIHN0cmVhbSB0aGVuICovCi0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgICAgICgiRmFpbGVkIHRvIGV4dHJhY3Qgc3RyZWFtIGhlYWRlcnMgZnJvbSBjb2RlYyBwcml2YXRlIGRhdGEiKSk7Ci0gICAgICB9Ci0gICAgICBzdHJlYW0tPnNlbmRfc3RyZWFtX2hlYWRlcnMgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyZWFtLT5zZW5kX2R2ZF9ldmVudCkgewotICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X3B1c2hfZHZkX2NsdXRfY2hhbmdlX2V2ZW50IChkZW11eCwgc3RyZWFtKTsKLSAgICAgIC8qIEZJWE1FOiBzaG91bGQgd2Ugc2VuZCB0aGlzIGV2ZW50IGFnYWluIGFmdGVyIChmbHVzaGluZykgc2VlayA/ICovCi0gICAgICBzdHJlYW0tPnNlbmRfZHZkX2V2ZW50ID0gRkFMU0U7Ci0gICAgfQotICB9Ci0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9kZW11eF9hZGRfbXBlZ19zZXFfaGVhZGVyIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHN0cmVhbSwgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgZ3VpbnQ4ICpzZXFfaGVhZGVyOwotICBndWludCBzZXFfaGVhZGVyX2xlbjsKLSAgZ3VpbnQzMiBoZWFkZXIsIHRtcDsKLQotICBpZiAoc3RyZWFtLT5jb2RlY19zdGF0ZSkgewotICAgIHNlcV9oZWFkZXIgPSBzdHJlYW0tPmNvZGVjX3N0YXRlOwotICAgIHNlcV9oZWFkZXJfbGVuID0gc3RyZWFtLT5jb2RlY19zdGF0ZV9zaXplOwotICB9IGVsc2UgaWYgKHN0cmVhbS0+Y29kZWNfcHJpdikgewotICAgIHNlcV9oZWFkZXIgPSBzdHJlYW0tPmNvZGVjX3ByaXY7Ci0gICAgc2VxX2hlYWRlcl9sZW4gPSBzdHJlYW0tPmNvZGVjX3ByaXZfc2l6ZTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICAvKiBTZXF1ZW5jZSBoZWFkZXIgb25seSBuZWVkZWQgZm9yIGtleWZyYW1lcyAqLwotICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoKmJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKmJ1ZikgPCA0KQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBnc3RfYnVmZmVyX2V4dHJhY3QgKCpidWYsIDAsICZ0bXAsIHNpemVvZiAoZ3VpbnQzMikpOwotICBoZWFkZXIgPSBHVUlOVDMyX0ZST01fQkUgKHRtcCk7Ci0KLSAgLyogU2VxdWVuY2Ugc3RhcnQgY29kZSwgaWYgbm90IGZvdW5kIHByZXBlbmQgKi8KLSAgaWYgKGhlYWRlciAhPSAweDAwMDAwMWIzKSB7Ci0gICAgR3N0QnVmZmVyICpuZXdidWY7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAiUHJlcGVuZGluZyBNUEVHIHNlcXVlbmNlIGhlYWRlciIpOwotCi0gICAgbmV3YnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tZW1kdXAgKHNlcV9oZWFkZXIsIHNlcV9oZWFkZXJfbGVuKSwKLSAgICAgICAgc2VxX2hlYWRlcl9sZW4pOwotCi0gICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld2J1ZiwgKmJ1ZiwgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMgfAotICAgICAgICBHU1RfQlVGRkVSX0NPUFlfRkxBR1MgfCBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLCAwLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplICgqYnVmKSk7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmICgqYnVmKTsKLSAgICAqYnVmID0gbmV3YnVmOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X2FkZF93dnBrX2hlYWRlciAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBzdHJlYW0sIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIEdzdE1hdHJvc2thVHJhY2tBdWRpb0NvbnRleHQgKmF1ZGlvY29udGV4dCA9Ci0gICAgICAoR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqKSBzdHJlYW07Ci0gIEdzdEJ1ZmZlciAqbmV3YnVmID0gTlVMTDsKLSAgR3N0TWFwSW5mbyBtYXAsIG91dG1hcDsKLSAgZ3VpbnQ4ICpidWZfZGF0YSwgKmRhdGE7Ci0gIFdhdnBhY2s0SGVhZGVyIHd2aDsKLQotICB3dmguY2tfaWRbMF0gPSAndyc7Ci0gIHd2aC5ja19pZFsxXSA9ICd2JzsKLSAgd3ZoLmNrX2lkWzJdID0gJ3AnOwotICB3dmguY2tfaWRbM10gPSAnayc7Ci0KLSAgd3ZoLnZlcnNpb24gPSBHU1RfUkVBRF9VSU5UMTZfTEUgKHN0cmVhbS0+Y29kZWNfcHJpdik7Ci0gIHd2aC50cmFja19ubyA9IDA7Ci0gIHd2aC5pbmRleF9ubyA9IDA7Ci0gIHd2aC50b3RhbF9zYW1wbGVzID0gLTE7Ci0gIHd2aC5ibG9ja19pbmRleCA9IGF1ZGlvY29udGV4dC0+d3Zwa19ibG9ja19pbmRleDsKLQotICBpZiAoYXVkaW9jb250ZXh0LT5jaGFubmVscyA8PSAyKSB7Ci0gICAgZ3VpbnQzMiBibG9ja19zYW1wbGVzLCB0bXA7Ci0gICAgZ3NpemUgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWYpOwotCi0gICAgZ3N0X2J1ZmZlcl9leHRyYWN0ICgqYnVmLCAwLCAmdG1wLCBzaXplb2YgKGd1aW50MzIpKTsKLSAgICBibG9ja19zYW1wbGVzID0gR1VJTlQzMl9GUk9NX0xFICh0bXApOwotICAgIC8qIHdlIG5lZWQgdG8gcmVjb25zdHJ1Y3QgdGhlIGhlYWRlciBvZiB0aGUgd2F2cGFjayBibG9jayAqLwotCi0gICAgLyogLTIwIGJlY2F1c2UgY2tfc2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgd2F2cGFjayBibG9jayAtOAotICAgICAqIGFuZCBsYWNlX3NpemUgaXMgdGhlIHNpemUgb2YgdGhlIHdhdnBhY2sgYmxvY2sgKyAxMgotICAgICAqICh0aGUgdGhyZWUgZ3VpbnQzMiBvZiB0aGUgaGVhZGVyIHRoYXQgYWxyZWFkeSBhcmUgaW4gdGhlIGJ1ZmZlcikgKi8KLSAgICB3dmguY2tfc2l6ZSA9IHNpemUgKyBzaXplb2YgKFdhdnBhY2s0SGVhZGVyKSAtIDIwOwotCi0gICAgLyogYmxvY2tfc2FtcGxlcywgZmxhZ3MgYW5kIGNyYyBhcmUgYWxyZWFkeSBpbiB0aGUgYnVmZmVyICovCi0gICAgbmV3YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemVvZiAoV2F2cGFjazRIZWFkZXIpIC0gMTIsIE5VTEwpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG5ld2J1ZiwgJm91dG1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgZGF0YSA9IG91dG1hcC5kYXRhOwotICAgIGRhdGFbMF0gPSAndyc7Ci0gICAgZGF0YVsxXSA9ICd2JzsKLSAgICBkYXRhWzJdID0gJ3AnOwotICAgIGRhdGFbM10gPSAnayc7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSArIDQsIHd2aC5ja19zaXplKTsKLSAgICBHU1RfV1JJVEVfVUlOVDE2X0xFIChkYXRhICsgOCwgd3ZoLnZlcnNpb24pOwotICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSArIDEwLCB3dmgudHJhY2tfbm8pOwotICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSArIDExLCB3dmguaW5kZXhfbm8pOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEgKyAxMiwgd3ZoLnRvdGFsX3NhbXBsZXMpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEgKyAxNiwgd3ZoLmJsb2NrX2luZGV4KTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChuZXdidWYsICZvdXRtYXApOwotCi0gICAgLyogQXBwZW5kIGRhdGEgZnJvbSBidWY6ICovCi0gICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld2J1ZiwgKmJ1ZiwgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMgfAotICAgICAgICBHU1RfQlVGRkVSX0NPUFlfRkxBR1MgfCBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLCAwLCBzaXplKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWYpOwotICAgICpidWYgPSBuZXdidWY7Ci0gICAgYXVkaW9jb250ZXh0LT53dnBrX2Jsb2NrX2luZGV4ICs9IGJsb2NrX3NhbXBsZXM7Ci0gIH0gZWxzZSB7Ci0gICAgZ3VpbnQ4ICpvdXRkYXRhID0gTlVMTDsKLSAgICBndWludCBvdXRwb3MgPSAwOwotICAgIGdzaXplIGJ1Zl9zaXplLCBzaXplLCBvdXRfc2l6ZSA9IDA7Ci0gICAgZ3VpbnQzMiBibG9ja19zYW1wbGVzLCBmbGFncywgY3JjLCBibG9ja3NpemU7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoKmJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBidWZfZGF0YSA9IG1hcC5kYXRhOwotICAgIGJ1Zl9zaXplID0gbWFwLnNpemU7Ci0KLSAgICBpZiAoYnVmX3NpemUgPCA0KSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChlbGVtZW50LCAiVG9vIHNtYWxsIHdhdnBhY2sgYnVmZmVyIik7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwICgqYnVmLCAmbWFwKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0KLSAgICBkYXRhID0gYnVmX2RhdGE7Ci0gICAgc2l6ZSA9IGJ1Zl9zaXplOwotCi0gICAgYmxvY2tfc2FtcGxlcyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gICAgZGF0YSArPSA0OwotICAgIHNpemUgLT0gNDsKLQotICAgIHdoaWxlIChzaXplID4gMTIpIHsKLSAgICAgIGZsYWdzID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgICAgIGRhdGEgKz0gNDsKLSAgICAgIHNpemUgLT0gNDsKLSAgICAgIGNyYyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gICAgICBkYXRhICs9IDQ7Ci0gICAgICBzaXplIC09IDQ7Ci0gICAgICBibG9ja3NpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICAgICAgZGF0YSArPSA0OwotICAgICAgc2l6ZSAtPSA0OwotCi0gICAgICBpZiAoYmxvY2tzaXplID09IDAgfHwgc2l6ZSA8IGJsb2Nrc2l6ZSkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGdfYXNzZXJ0ICgobmV3YnVmID09IE5VTEwpID09IChvdXRkYXRhID09IE5VTEwpKTsKLQotICAgICAgaWYgKG5ld2J1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIG91dF9zaXplID0gc2l6ZW9mIChXYXZwYWNrNEhlYWRlcikgKyBibG9ja3NpemU7Ci0gICAgICAgIG5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBvdXRfc2l6ZSwgTlVMTCk7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld2J1ZiwgKmJ1ZiwKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTIHwgR1NUX0JVRkZFUl9DT1BZX0ZMQUdTLCAwLCAtMSk7Ci0KLSAgICAgICAgb3V0cG9zID0gMDsKLSAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKG5ld2J1ZiwgJm91dG1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgICAgIG91dGRhdGEgPSBvdXRtYXAuZGF0YTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG5ld2J1ZiwgJm91dG1hcCk7Ci0gICAgICAgIG91dF9zaXplICs9IHNpemVvZiAoV2F2cGFjazRIZWFkZXIpICsgYmxvY2tzaXplOwotICAgICAgICBnc3RfYnVmZmVyX3NldF9zaXplIChuZXdidWYsIG91dF9zaXplKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKG5ld2J1ZiwgJm91dG1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgICAgIG91dGRhdGEgPSBvdXRtYXAuZGF0YTsKLSAgICAgIH0KLQotICAgICAgb3V0ZGF0YVtvdXRwb3NdID0gJ3cnOwotICAgICAgb3V0ZGF0YVtvdXRwb3MgKyAxXSA9ICd2JzsKLSAgICAgIG91dGRhdGFbb3V0cG9zICsgMl0gPSAncCc7Ci0gICAgICBvdXRkYXRhW291dHBvcyArIDNdID0gJ2snOwotICAgICAgb3V0cG9zICs9IDQ7Ci0KLSAgICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKG91dGRhdGEgKyBvdXRwb3MsCi0gICAgICAgICAgYmxvY2tzaXplICsgc2l6ZW9mIChXYXZwYWNrNEhlYWRlcikgLSA4KTsKLSAgICAgIEdTVF9XUklURV9VSU5UMTZfTEUgKG91dGRhdGEgKyBvdXRwb3MgKyA0LCB3dmgudmVyc2lvbik7Ci0gICAgICBHU1RfV1JJVEVfVUlOVDggKG91dGRhdGEgKyBvdXRwb3MgKyA2LCB3dmgudHJhY2tfbm8pOwotICAgICAgR1NUX1dSSVRFX1VJTlQ4IChvdXRkYXRhICsgb3V0cG9zICsgNywgd3ZoLmluZGV4X25vKTsKLSAgICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKG91dGRhdGEgKyBvdXRwb3MgKyA4LCB3dmgudG90YWxfc2FtcGxlcyk7Ci0gICAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChvdXRkYXRhICsgb3V0cG9zICsgMTIsIHd2aC5ibG9ja19pbmRleCk7Ci0gICAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChvdXRkYXRhICsgb3V0cG9zICsgMTYsIGJsb2NrX3NhbXBsZXMpOwotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAob3V0ZGF0YSArIG91dHBvcyArIDIwLCBmbGFncyk7Ci0gICAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChvdXRkYXRhICsgb3V0cG9zICsgMjQsIGNyYyk7Ci0gICAgICBvdXRwb3MgKz0gMjg7Ci0KLSAgICAgIG1lbW1vdmUgKG91dGRhdGEgKyBvdXRwb3MsIGRhdGEsIGJsb2Nrc2l6ZSk7Ci0gICAgICBvdXRwb3MgKz0gYmxvY2tzaXplOwotICAgICAgZGF0YSArPSBibG9ja3NpemU7Ci0gICAgICBzaXplIC09IGJsb2Nrc2l6ZTsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoKmJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoKmJ1Zik7Ci0KLSAgICBpZiAobmV3YnVmKQotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobmV3YnVmLCAmb3V0bWFwKTsKLQotICAgICpidWYgPSBuZXdidWY7Ci0gICAgYXVkaW9jb250ZXh0LT53dnBrX2Jsb2NrX2luZGV4ICs9IGJsb2NrX3NhbXBsZXM7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfYWRkX3Byb3Jlc19oZWFkZXIgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogc3RyZWFtLCBHc3RCdWZmZXIgKiogYnVmKQotewotICBHc3RCdWZmZXIgKm5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCA4LCBOVUxMKTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50MzIgZnJhbWVfc2l6ZTsKLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChuZXdidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpKSB7Ci0gICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIG1hcCBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgZnJhbWVfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWYpOwotCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKG1hcC5kYXRhLCBmcmFtZV9zaXplKTsKLSAgbWFwLmRhdGFbNF0gPSAnaSc7Ci0gIG1hcC5kYXRhWzVdID0gJ2MnOwotICBtYXAuZGF0YVs2XSA9ICdwJzsKLSAgbWFwLmRhdGFbN10gPSAnZic7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAobmV3YnVmLCAmbWFwKTsKLSAgKmJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChuZXdidWYsICpidWYpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogQHRleHQgbXVzdCBiZSBudWxsLXRlcm1pbmF0ZWQgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX2RlbXV4X3N1YnRpdGxlX2NodW5rX2hhc190YWcgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIGNvbnN0IGdjaGFyICogdGV4dCkKLXsKLSAgZ2NoYXIgKnRhZzsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGV4dCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgLyogeWVzLCB0aGlzIG1pZ2h0IGFsbCBsZWFkIHRvIGZhbHNlIHBvc2l0aXZlcyAuLi4gKi8KLSAgdGFnID0gKGdjaGFyICopIHRleHQ7Ci0gIHdoaWxlICgodGFnID0gc3RyY2hyICh0YWcsICc8JykpKSB7Ci0gICAgdGFnKys7Ci0gICAgaWYgKCp0YWcgIT0gJ1wwJyAmJiAqKHRhZyArIDEpID09ICc+JykgewotICAgICAgLyogc29tZSBjb21tb24gY29udmVuaWVuY2Ugb25lcyAqLwotICAgICAgLyogbWF5YmUgYW55IGNoYXJhY3RlciB3aWxsIGRvIGhlcmUgPyAqLwotICAgICAgc3dpdGNoICgqdGFnKSB7Ci0gICAgICAgIGNhc2UgJ2InOgotICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgIHJldHVybiBUUlVFOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoc3Ryc3RyICh0ZXh0LCAiPHNwYW4iKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfc3VidGl0bGVfYnVmZmVyIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHN0cmVhbSwgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgR3N0TWF0cm9za2FUcmFja1N1YnRpdGxlQ29udGV4dCAqc3ViX3N0cmVhbTsKLSAgY29uc3QgZ2NoYXIgKmVuY29kaW5nOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqbmV3YnVmOwotICBnY2hhciAqdXRmODsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdib29sZWFuIG5lZWRzX3VubWFwID0gVFJVRTsKLQotICBzdWJfc3RyZWFtID0gKEdzdE1hdHJvc2thVHJhY2tTdWJ0aXRsZUNvbnRleHQgKikgc3RyZWFtOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKmJ1ZikgfHwgIWdzdF9idWZmZXJfbWFwICgqYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBUaGUgc3VidGl0bGUgYnVmZmVyIHdlIHB1c2ggb3V0IHNob3VsZCBub3QgaW5jbHVkZSBhIE5VTCB0ZXJtaW5hdG9yIGFzCi0gICAqIHBhcnQgb2YgdGhlIGRhdGEuICovCi0gIGlmIChtYXAuZGF0YVttYXAuc2l6ZSAtIDFdID09ICdcMCcpIHsKLSAgICBnc3RfYnVmZmVyX3NldF9zaXplICgqYnVmLCBtYXAuc2l6ZSAtIDEpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKCpidWYsICZtYXApOwotICAgIGdzdF9idWZmZXJfbWFwICgqYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICB9Ci0KLSAgaWYgKCFzdWJfc3RyZWFtLT5pbnZhbGlkX3V0ZjgpIHsKLSAgICBpZiAoZ191dGY4X3ZhbGlkYXRlICgoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplLCBOVUxMKSkgewotICAgICAgZ290byBuZXh0OwotICAgIH0KLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsZW1lbnQsICJzdWJ0aXRsZSBzdHJlYW0gJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIGlzIG5vdCB2YWxpZCBVVEYtOCwgdGhpcyBpcyBicm9rZW4gYWNjb3JkaW5nIHRvIHRoZSBtYXRyb3NrYSIKLSAgICAgICAgIiBzcGVjaWZpY2F0aW9uIiwgc3RyZWFtLT5udW0pOwotICAgIHN1Yl9zdHJlYW0tPmludmFsaWRfdXRmOCA9IFRSVUU7Ci0gIH0KLQotICAvKiBmaWxlIHdpdGggYnJva2VuIG5vbi1VVEY4IHN1YnRpdGxlLCBkbyB0aGUgYmVzdCB3ZSBjYW4gZG8gdG8gZml4IGl0ICovCi0gIGVuY29kaW5nID0gZ19nZXRlbnYgKCJHU1RfU1VCVElUTEVfRU5DT0RJTkciKTsKLSAgaWYgKGVuY29kaW5nID09IE5VTEwgfHwgKmVuY29kaW5nID09ICdcMCcpIHsKLSAgICAvKiBpZiBsb2NhbCBlbmNvZGluZyBpcyBVVEYtOCBhbmQgbm8gZW5jb2Rpbmcgc3BlY2lmaWVkCi0gICAgICogdmlhIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYXNzdW1lIElTTy04ODU5LTE1ICovCi0gICAgaWYgKGdfZ2V0X2NoYXJzZXQgKCZlbmNvZGluZykpIHsKLSAgICAgIGVuY29kaW5nID0gIklTTy04ODU5LTE1IjsKLSAgICB9Ci0gIH0KLQotICB1dGY4ID0KLSAgICAgIGdfY29udmVydF93aXRoX2ZhbGxiYWNrICgoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplLCAiVVRGLTgiLCBlbmNvZGluZywKLSAgICAgIChjaGFyICopICIqIiwgTlVMTCwgTlVMTCwgJmVycik7Ci0KLSAgaWYgKGVycikgewotICAgIEdTVF9MT0dfT0JKRUNUIChlbGVtZW50LCAiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIGZyb20gJyVzJyB0byBVVEYtODogJXMiLAotICAgICAgICBlbmNvZGluZywgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZ19mcmVlICh1dGY4KTsKLQotICAgIC8qIGludmFsaWQgaW5wdXQgZW5jb2RpbmcsIGZhbGwgYmFjayB0byBJU08tODg1OS0xNSAoYWx3YXlzIHN1Y2NlZWRzKSAqLwotICAgIGVuY29kaW5nID0gIklTTy04ODU5LTE1IjsKLSAgICB1dGY4ID0KLSAgICAgICAgZ19jb252ZXJ0X3dpdGhfZmFsbGJhY2sgKChnY2hhciAqKSBtYXAuZGF0YSwgbWFwLnNpemUsICJVVEYtOCIsCi0gICAgICAgIGVuY29kaW5nLCAoY2hhciAqKSAiKiIsIE5VTEwsIE5VTEwsIE5VTEwpOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGVsZW1lbnQsICJjb252ZXJ0ZWQgc3VidGl0bGUgdGV4dCBmcm9tICVzIHRvIFVURi04ICVzIiwKLSAgICAgIGVuY29kaW5nLCAoZXJyKSA/ICIodXNpbmcgSVNPLTg4NTktMTUgYXMgZmFsbGJhY2spIiA6ICIiKTsKLQotICBpZiAodXRmOCA9PSBOVUxMKQotICAgIHV0ZjggPSBnX3N0cmR1cCAoImludmFsaWQgc3VidGl0bGUiKTsKLQotICBuZXdidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkICh1dGY4LCBzdHJsZW4gKHV0ZjgpKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoKmJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfY29weV9pbnRvIChuZXdidWYsICpidWYsCi0gICAgICBHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUyB8IEdTVF9CVUZGRVJfQ09QWV9GTEFHUyB8IEdTVF9CVUZGRVJfQ09QWV9NRVRBLAotICAgICAgMCwgLTEpOwotICBnc3RfYnVmZmVyX3VucmVmICgqYnVmKTsKLQotICAqYnVmID0gbmV3YnVmOwotICBnc3RfYnVmZmVyX21hcCAoKmJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotbmV4dDoKLQotICBpZiAoc3ViX3N0cmVhbS0+Y2hlY2tfbWFya3VwKSB7Ci0gICAgLyogY2FwcyBjbGFpbSBtYXJrdXAgdGV4dCwgc28gd2UgbmVlZCB0byBlc2NhcGUgdGV4dCwKLSAgICAgKiBleGNlcHQgaWYgdGV4dCBpcyBhbHJlYWR5IG1hcmt1cCBhbmQgdGhlbiBuZWVkcyBubyBmdXJ0aGVyIGVzY2FwaW5nICovCi0gICAgc3ViX3N0cmVhbS0+c2Vlbl9tYXJrdXBfdGFnID0gc3ViX3N0cmVhbS0+c2Vlbl9tYXJrdXBfdGFnIHx8Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9kZW11eF9zdWJ0aXRsZV9jaHVua19oYXNfdGFnIChlbGVtZW50LCAoZ2NoYXIgKikgbWFwLmRhdGEpOwotCi0gICAgaWYgKCFzdWJfc3RyZWFtLT5zZWVuX21hcmt1cF90YWcpIHsKLSAgICAgIHV0ZjggPSBnX21hcmt1cF9lc2NhcGVfdGV4dCAoKGdjaGFyICopIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgICAgIG5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKHV0ZjgsIHN0cmxlbiAodXRmOCkpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoKmJ1ZiwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAobmV3YnVmLCAqYnVmLAotICAgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTIHwgR1NUX0JVRkZFUl9DT1BZX0ZMQUdTIHwKLSAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfTUVUQSwgMCwgLTEpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoKmJ1Zik7Ci0KLSAgICAgICpidWYgPSBuZXdidWY7Ci0gICAgICBuZWVkc191bm1hcCA9IEZBTFNFOwotICAgIH0KLSAgfQotCi0gIGlmIChuZWVkc191bm1hcCkKLSAgICBnc3RfYnVmZmVyX3VubWFwICgqYnVmLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfYWFjIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHN0cmVhbSwgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgZ3VpbnQ4IGRhdGFbMl07Ci0gIGd1aW50IHNpemU7Ci0KLSAgZ3N0X2J1ZmZlcl9leHRyYWN0ICgqYnVmLCAwLCBkYXRhLCAyKTsKLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWYpOwotCi0gIGlmIChzaXplID4gMiAmJiBkYXRhWzBdID09IDB4ZmYgJiYgKGRhdGFbMV0gPj4gNCA9PSAweDBmKSkgewotICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgIC8qIHRzcywgQURUUyBkYXRhLCByZW1vdmUgY29kZWNfZGF0YQotICAgICAqIHN0aWxsIGFzc3VtZSBpdCBpcyBhdCBsZWFzdCBwYXJzZWQgKi8KLSAgICBzdHJlYW0tPmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChzdHJlYW0tPmNhcHMpOwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzdHJlYW0tPmNhcHMsIDApOwotICAgIGdfYXNzZXJ0IChzKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImNvZGVjX2RhdGEiKTsKLSAgICBnc3RfcGFkX3NldF9jYXBzIChzdHJlYW0tPnBhZCwgc3RyZWFtLT5jYXBzKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAiQURUUyBBQUMgYXVkaW8gZGF0YTsgcmVtb3ZpbmcgY29kZWMtZGF0YSwgIgotICAgICAgICAibmV3IGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJlYW0tPmNhcHMpOwotICB9Ci0KLSAgLyogZGlzYWJsZSBzdWJzZXF1ZW50IGNoZWNraW5nICovCi0gIHN0cmVhbS0+cG9zdHByb2Nlc3NfZnJhbWUgPSBOVUxMOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfbWF0cm9za2FfZGVtdXhfYWxpZ25fYnVmZmVyIChHc3RNYXRyb3NrYURlbXV4ICogZGVtdXgsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBhbGlnbm1lbnQpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG1hcC5zaXplIDwgc2l6ZW9mIChndWludHB0cikpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBidWZmZXI7Ci0gIH0KLQotICBpZiAoKChndWludHB0cikgbWFwLmRhdGEpICYgKGFsaWdubWVudCAtIDEpKSB7Ci0gICAgR3N0QnVmZmVyICpuZXdfYnVmZmVyOwotICAgIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zID0geyAwLCBhbGlnbm1lbnQgLSAxLCAwLCAwLCB9OwotCi0gICAgbmV3X2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpLCAmcGFyYW1zKTsKLQotICAgIC8qIENvcHkgZGF0YSAiYnkgaGFuZCIsIHNvIGVuc3VyZSBhbGlnbm1lbnQgaXMga2VwdDogKi8KLSAgICBnc3RfYnVmZmVyX2ZpbGwgKG5ld19idWZmZXIsIDAsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAobmV3X2J1ZmZlciwgYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEsIDAsIC0xKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgIldlIHdhbnQgb3V0cHV0IGFsaWduZWQgb24gJSIgR19HU0laRV9GT1JNQVQgIiwgcmVhbGxvY2F0ZWQiLAotICAgICAgICBhbGlnbm1lbnQpOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gICAgcmV0dXJuIG5ld19idWZmZXI7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2sgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwKLSAgICBHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50NjQgY2x1c3Rlcl90aW1lLCBndWludDY0IGNsdXN0ZXJfb2Zmc2V0LAotICAgIGdib29sZWFuIGlzX3NpbXBsZWJsb2NrKQotewotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gcmVhZGJsb2NrID0gRkFMU0U7Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgYmxvY2tfZHVyYXRpb24gPSAtMTsKLSAgZ2ludDY0IGJsb2NrX2Rpc2NhcmRwYWRkaW5nID0gMDsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2ludCBzdHJlYW1fbnVtID0gLTEsIG4sIGxhY2VzID0gMDsKLSAgZ3VpbnQgc2l6ZSA9IDA7Ci0gIGdpbnQgKmxhY2Vfc2l6ZSA9IE5VTEw7Ci0gIGdpbnQ2NCB0aW1lID0gMDsKLSAgZ2ludCBmbGFncyA9IDA7Ci0gIGdpbnQ2NCByZWZlcmVuY2VibG9jayA9IDA7Ci0gIGdpbnQ2NCBvZmZzZXQ7Ci0gIEdzdENsb2NrVGltZSBidWZmZXJfdGltZXN0YW1wOwotCi0gIG9mZnNldCA9IGdzdF9lYm1sX3JlYWRfZ2V0X29mZnNldCAoZWJtbCk7Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKCFpc19zaW1wbGVibG9jaykgewotICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlkID0gR1NUX01BVFJPU0tBX0lEX1NJTVBMRUJMT0NLOwotICAgIH0KLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgLyogb25lIGJsb2NrIGluc2lkZSB0aGUgZ3JvdXAuIE5vdGUsIGJsb2NrIHBhcnNpbmcgaXMgb25lCi0gICAgICAgICAqIG9mIHRoZSBoYXJkZXIgdGhpbmdzLCBzbyB0aGlzIGNvZGUgaXMgYSBiaXQgY29tcGxpY2F0ZWQuCi0gICAgICAgICAqIFNlZSBodHRwOi8vd3d3Lm1hdHJvc2thLm9yZy8gZm9yIGRvY3VtZW50YXRpb24uICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TSU1QTEVCTE9DSzoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0JMT0NLOgotICAgICAgewotICAgICAgICBndWludDY0IG51bTsKLSAgICAgICAgZ3VpbnQ4ICpkYXRhOwotCi0gICAgICAgIGlmIChidWYpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgYnVmID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfYnVmZmVyIChlYm1sLCAmaWQsICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgICAgIHNpemUgPSBtYXAuc2l6ZTsKLQotICAgICAgICAvKiBmaXJzdCBieXRlKHMpOiBibG9ja251bSAqLwotICAgICAgICBpZiAoKG4gPSBnc3RfbWF0cm9za2FfZWJtbG51bV91aW50IChkYXRhLCBzaXplLCAmbnVtKSkgPCAwKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgZGF0YSArPSBuOwotICAgICAgICBzaXplIC09IG47Ci0KLSAgICAgICAgLyogZmV0Y2ggc3RyZWFtIGZyb20gbnVtICovCi0gICAgICAgIHN0cmVhbV9udW0gPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fc3RyZWFtX2Zyb21fbnVtICgmZGVtdXgtPmNvbW1vbiwKLSAgICAgICAgICAgIG51bSk7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChzaXplIDwgMykpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAiSW52YWxpZCBzaXplICV1Iiwgc2l6ZSk7Ci0gICAgICAgICAgLyogbm9uLWZhdGFsLCB0cnkgbmV4dCBibG9jayhncm91cCkgKi8KLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoc3RyZWFtX251bSA8IDAgfHwKLSAgICAgICAgICAgICAgICBzdHJlYW1fbnVtID49IGRlbXV4LT5jb21tb24ubnVtX3N0cmVhbXMpKSB7Ci0gICAgICAgICAgLyogbGV0J3Mgbm90IGdpdmUgdXAgb24gYSBzdHJheSBpbnZhbGlkIHRyYWNrIG51bWJlciAqLwotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJJbnZhbGlkIHN0cmVhbSAlZCBmb3IgdHJhY2sgbnVtYmVyICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAgICAgIjsgaWdub3JpbmcgYmxvY2siLCBzdHJlYW1fbnVtLCBudW0pOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmVhbSA9IGdfcHRyX2FycmF5X2luZGV4IChkZW11eC0+Y29tbW9uLnNyYywgc3RyZWFtX251bSk7Ci0KLSAgICAgICAgLyogdGltZSAocmVsYXRpdmUgdG8gY2x1c3RlciB0aW1lKSAqLwotICAgICAgICB0aW1lID0gKChnaW50MTYpIEdTVF9SRUFEX1VJTlQxNl9CRSAoZGF0YSkpOwotICAgICAgICBkYXRhICs9IDI7Ci0gICAgICAgIHNpemUgLT0gMjsKLSAgICAgICAgZmxhZ3MgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMTsKLSAgICAgICAgc2l6ZSAtPSAxOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInRpbWUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBmbGFncyAlZCIsIHRpbWUsCi0gICAgICAgICAgICBmbGFncyk7Ci0KLSAgICAgICAgc3dpdGNoICgoZmxhZ3MgJiAweDA2KSA+PiAxKSB7Ci0gICAgICAgICAgY2FzZSAweDA6ICAgICAgICAgICAgLyogbm8gbGFjaW5nICovCi0gICAgICAgICAgICBsYWNlcyA9IDE7Ci0gICAgICAgICAgICBsYWNlX3NpemUgPSBnX25ldyAoZ2ludCwgMSk7Ci0gICAgICAgICAgICBsYWNlX3NpemVbMF0gPSBzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIDB4MTogICAgICAgICAgICAvKiB4aXBoIGxhY2luZyAqLwotICAgICAgICAgIGNhc2UgMHgyOiAgICAgICAgICAgIC8qIGZpeGVkLXNpemUgbGFjaW5nICovCi0gICAgICAgICAgY2FzZSAweDM6ICAgICAgICAgICAgLyogRUJNTCBsYWNpbmcgKi8KLSAgICAgICAgICAgIGlmIChzaXplID09IDApCi0gICAgICAgICAgICAgIGdvdG8gaW52YWxpZF9sYWNpbmc7Ci0gICAgICAgICAgICBsYWNlcyA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhKSArIDE7Ci0gICAgICAgICAgICBkYXRhICs9IDE7Ci0gICAgICAgICAgICBzaXplIC09IDE7Ci0gICAgICAgICAgICBsYWNlX3NpemUgPSBnX25ldzAgKGdpbnQsIGxhY2VzKTsKLQotICAgICAgICAgICAgc3dpdGNoICgoZmxhZ3MgJiAweDA2KSA+PiAxKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMHgxOiAgICAgICAgLyogeGlwaCBsYWNpbmcgKi8gIHsKLSAgICAgICAgICAgICAgICBndWludCB0ZW1wLCB0b3RhbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyByZXQgPT0gR1NUX0ZMT1dfT0sgJiYgbiA8IGxhY2VzIC0gMTsgbisrKSB7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF9sYWNpbmc7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGxhY2Vfc2l6ZVtuXSArPSB0ZW1wOwotICAgICAgICAgICAgICAgICAgICBkYXRhICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgLT0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgIT0gMHhmZikKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGxhY2Vfc2l6ZVtuXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFjZV9zaXplW25dID0gc2l6ZSAtIHRvdGFsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgY2FzZSAweDI6ICAgICAgICAvKiBmaXhlZC1zaXplIGxhY2luZyAqLwotICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBsYWNlczsgbisrKQotICAgICAgICAgICAgICAgICAgbGFjZV9zaXplW25dID0gc2l6ZSAvIGxhY2VzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgMHgzOiAgICAgICAgLyogRUJNTCBsYWNpbmcgKi8gIHsKLSAgICAgICAgICAgICAgICBndWludCB0b3RhbDsKLQotICAgICAgICAgICAgICAgIGlmICgobiA9IGdzdF9tYXRyb3NrYV9lYm1sbnVtX3VpbnQgKGRhdGEsIHNpemUsICZudW0pKSA8IDApCi0gICAgICAgICAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgICAgICAgICAgZGF0YSArPSBuOwotICAgICAgICAgICAgICAgIHNpemUgLT0gbjsKLSAgICAgICAgICAgICAgICB0b3RhbCA9IGxhY2Vfc2l6ZVswXSA9IG51bTsKLSAgICAgICAgICAgICAgICBmb3IgKG4gPSAxOyByZXQgPT0gR1NUX0ZMT1dfT0sgJiYgbiA8IGxhY2VzIC0gMTsgbisrKSB7Ci0gICAgICAgICAgICAgICAgICBnaW50NjQgc251bTsKLSAgICAgICAgICAgICAgICAgIGdpbnQgcjsKLQotICAgICAgICAgICAgICAgICAgaWYgKChyID0gZ3N0X21hdHJvc2thX2VibWxudW1fc2ludCAoZGF0YSwgc2l6ZSwgJnNudW0pKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgICAgICAgICAgIGRhdGEgKz0gcjsKLSAgICAgICAgICAgICAgICAgIHNpemUgLT0gcjsKLSAgICAgICAgICAgICAgICAgIGxhY2Vfc2l6ZVtuXSA9IGxhY2Vfc2l6ZVtuIC0gMV0gKyBzbnVtOwotICAgICAgICAgICAgICAgICAgdG90YWwgKz0gbGFjZV9zaXplW25dOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobiA8IGxhY2VzKQotICAgICAgICAgICAgICAgICAgbGFjZV9zaXplW25dID0gc2l6ZSAtIHRvdGFsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmVhZGJsb2NrID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0JMT0NLRFVSQVRJT046ewotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJmJsb2NrX2R1cmF0aW9uKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJCbG9ja0R1cmF0aW9uOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgYmxvY2tfZHVyYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfRElTQ0FSRFBBRERJTkc6ewotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NpbnQgKGVibWwsICZpZCwgJmJsb2NrX2Rpc2NhcmRwYWRkaW5nKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJEaXNjYXJkUGFkZGluZzogJSIgR1NUX1NUSU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9TVElNRV9BUkdTIChibG9ja19kaXNjYXJkcGFkZGluZykpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfUkVGRVJFTkNFQkxPQ0s6ewotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NpbnQgKGVibWwsICZpZCwgJnJlZmVyZW5jZWJsb2NrKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJSZWZlcmVuY2VCbG9jazogJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgICAgcmVmZXJlbmNlYmxvY2spOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNTVEFURTp7Ci0gICAgICAgIGd1aW50OCAqZGF0YTsKLSAgICAgICAgZ3VpbnQ2NCBkYXRhX2xlbiA9IDA7Ci0KLSAgICAgICAgaWYgKChyZXQgPQotICAgICAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfYmluYXJ5IChlYm1sLCAmaWQsICZkYXRhLAotICAgICAgICAgICAgICAgICAgICAmZGF0YV9sZW4pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtID09IE5VTEwpKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgQ29kZWNTdGF0ZSBzdWJlbGVtZW50IC0gaWdub3JpbmciKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdfZnJlZSAoc3RyZWFtLT5jb2RlY19zdGF0ZSk7Ci0gICAgICAgIHN0cmVhbS0+Y29kZWNfc3RhdGUgPSBkYXRhOwotICAgICAgICBzdHJlYW0tPmNvZGVjX3N0YXRlX3NpemUgPSBkYXRhX2xlbjsKLQotICAgICAgICAvKiBEZWNvZGUgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgIGlmIChzdHJlYW0tPmVuY29kaW5ncyAmJiBzdHJlYW0tPmVuY29kaW5ncy0+bGVuID4gMAotICAgICAgICAgICAgJiYgc3RyZWFtLT5jb2RlY19zdGF0ZSAmJiBzdHJlYW0tPmNvZGVjX3N0YXRlX3NpemUgPiAwKSB7Ci0gICAgICAgICAgaWYgKCFnc3RfbWF0cm9za2FfZGVjb2RlX2RhdGEgKHN0cmVhbS0+ZW5jb2RpbmdzLAotICAgICAgICAgICAgICAgICAgJnN0cmVhbS0+Y29kZWNfc3RhdGUsICZzdHJlYW0tPmNvZGVjX3N0YXRlX3NpemUsCi0gICAgICAgICAgICAgICAgICBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5DT0RJTkdfU0NPUEVfQ09ERUNfREFUQSwgVFJVRSkpIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJEZWNvZGluZyBjb2RlYyBzdGF0ZSBmYWlsZWQiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkNvZGVjU3RhdGUgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgICAgICBzdHJlYW0tPmNvZGVjX3N0YXRlX3NpemUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKCZkZW11eC0+Y29tbW9uLCBlYm1sLAotICAgICAgICAgICAgIkJsb2NrR3JvdXAiLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9CTE9DS1ZJUlRVQUw6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9CTE9DS0FERElUSU9OUzoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1JFRkVSRU5DRVBSSU9SSVRZOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfUkVGRVJFTkNFVklSVFVBTDoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NMSUNFUzoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAiU2tpcHBpbmcgQmxvY2tHcm91cCBzdWJlbGVtZW50IDB4JXggLSBpZ25vcmluZyIsIGlkKTsKLSAgICAgICAgcmV0ID0gZ3N0X2VibWxfcmVhZF9za2lwIChlYm1sKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGlzX3NpbXBsZWJsb2NrKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiByZWFkaW5nIGEgbnVtYmVyIG9yIHNvIGNvdWxkIGhhdmUgZmFpbGVkICovCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBkYXRhX2Vycm9yOwotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgcmVhZGJsb2NrKSB7Ci0gICAgZ2Jvb2xlYW4gaW52aXNpYmxlX2ZyYW1lID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gZGVsdGFfdW5pdCA9IEZBTFNFOwotICAgIGd1aW50NjQgZHVyYXRpb24gPSAwOwotICAgIGdpbnQ2NCBsYWNlX3RpbWUgPSAwOwotCi0gICAgc3RyZWFtID0gZ19wdHJfYXJyYXlfaW5kZXggKGRlbXV4LT5jb21tb24uc3JjLCBzdHJlYW1fbnVtKTsKLQotICAgIGlmIChjbHVzdGVyX3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgLyogRklYTUU6IFdoYXQgdG8gZG8gd2l0aCBuZWdhdGl2ZSB0aW1lc3RhbXBzPyBHaXZlIHRpbWVzdGFtcCAwIG9yIC0xPwotICAgICAgICogRHJvcCB1bmxlc3MgdGhlIGxhY2UgY29udGFpbnMgdGltZXN0YW1wIDA/ICovCi0gICAgICBpZiAodGltZSA8IDAgJiYgKC10aW1lKSA+IGNsdXN0ZXJfdGltZSkgewotICAgICAgICBsYWNlX3RpbWUgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0cmVhbS0+dGltZWNvZGVzY2FsZSA9PSAxLjApCi0gICAgICAgICAgbGFjZV90aW1lID0gKGNsdXN0ZXJfdGltZSArIHRpbWUpICogZGVtdXgtPmNvbW1vbi50aW1lX3NjYWxlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbGFjZV90aW1lID0KLSAgICAgICAgICAgICAgZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlICgoY2x1c3Rlcl90aW1lICsgdGltZSkgKgotICAgICAgICAgICAgICBkZW11eC0+Y29tbW9uLnRpbWVfc2NhbGUpICogc3RyZWFtLT50aW1lY29kZXNjYWxlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBsYWNlX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIH0KLQotICAgIC8qIG5lZWQgdG8gcmVmcmVzaCBzZWdtZW50IGluZm8gQVNBUCAqLwotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFjZV90aW1lKSAmJiBkZW11eC0+bmVlZF9zZWdtZW50KSB7Ci0gICAgICBHc3RTZWdtZW50ICpzZWdtZW50ID0gJmRlbXV4LT5jb21tb24uc2VnbWVudDsKLSAgICAgIGd1aW50NjQgY2xhY2VfdGltZTsKLSAgICAgIEdzdEV2ZW50ICpzZWdtZW50X2V2ZW50OwotCi0gICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUpKSB7Ci0gICAgICAgIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZSA9IGxhY2VfdGltZTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAiU2V0dGluZyBzdHJlYW0gc3RhcnQgdGltZSB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChsYWNlX3RpbWUpKTsKLSAgICAgIH0KLSAgICAgIGNsYWNlX3RpbWUgPSBNQVggKGxhY2VfdGltZSwgZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lKTsKLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZGVtdXgtPmNvbW1vbi5zZWdtZW50LnBvc2l0aW9uKSAmJgotICAgICAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbiAhPSAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgInVzaW5nIHN0b3JlZCBzZWVrIHBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbikpOwotICAgICAgICBjbGFjZV90aW1lID0gZGVtdXgtPmNvbW1vbi5zZWdtZW50LnBvc2l0aW9uICsgZGVtdXgtPnN0cmVhbV9zdGFydF90aW1lOwotICAgICAgICBzZWdtZW50LT5wb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICB9Ci0gICAgICBzZWdtZW50LT5zdGFydCA9IGNsYWNlX3RpbWU7Ci0gICAgICBzZWdtZW50LT5zdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHNlZ21lbnQtPnRpbWUgPSBzZWdtZW50LT5zdGFydCAtIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZTsKLSAgICAgIHNlZ21lbnQtPnBvc2l0aW9uID0gc2VnbWVudC0+c3RhcnQgLSBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAiZ2VuZXJhdGVkIHNlZ21lbnQgc3RhcnRpbmcgYXQgJSIgR1NUX1RJTUVfRk9STUFUICI6ICUiCi0gICAgICAgICAgR1NUX1NFR01FTlRfRk9STUFULCBHU1RfVElNRV9BUkdTIChsYWNlX3RpbWUpLCBzZWdtZW50KTsKLSAgICAgIC8qIG5vdyBjb252ZXkgb3VyIHNlZ21lbnQgbm90aW9uIGRvd25zdHJlYW0gKi8KLSAgICAgIHNlZ21lbnRfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKHNlZ21lbnQpOwotICAgICAgaWYgKGRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKHNlZ21lbnRfZXZlbnQsIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICBnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCAoZGVtdXgsIHNlZ21lbnRfZXZlbnQpOwotICAgICAgZGVtdXgtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotICAgICAgZGVtdXgtPnNlZ21lbnRfc2VxbnVtID0gMDsKLSAgICB9Ci0KLSAgICAvKiBzZW5kIHBlbmRpbmcgY29kZWMgZGF0YSBoZWFkZXJzIGZvciBhbGwgc3RyZWFtcywKLSAgICAgKiBiZWZvcmUgd2UgcGVyZm9ybSBzeW5jIGFjcm9zcyBhbGwgc3RyZWFtcyAqLwotICAgIGdzdF9tYXRyb3NrYV9kZW11eF9wdXNoX2NvZGVjX2RhdGFfYWxsIChkZW11eCk7Ci0KLSAgICBpZiAoYmxvY2tfZHVyYXRpb24gIT0gLTEpIHsKLSAgICAgIGlmIChzdHJlYW0tPnRpbWVjb2Rlc2NhbGUgPT0gMS4wKQotICAgICAgICBkdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoYmxvY2tfZHVyYXRpb24sCi0gICAgICAgICAgICBkZW11eC0+Y29tbW9uLnRpbWVfc2NhbGUsIDEpOwotICAgICAgZWxzZQotICAgICAgICBkdXJhdGlvbiA9Ci0gICAgICAgICAgICBnc3RfdXRpbF9nZG91YmxlX3RvX2d1aW50NjQgKGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZQotICAgICAgICAgICAgKGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoYmxvY2tfZHVyYXRpb24sIGRlbXV4LT5jb21tb24udGltZV9zY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgMSkpICogc3RyZWFtLT50aW1lY29kZXNjYWxlKTsKLSAgICB9IGVsc2UgaWYgKHN0cmVhbS0+ZGVmYXVsdF9kdXJhdGlvbikgewotICAgICAgZHVyYXRpb24gPSBzdHJlYW0tPmRlZmF1bHRfZHVyYXRpb24gKiBsYWNlczsKLSAgICB9Ci0gICAgLyogZWxzZSBkdXJhdGlvbiBpcyBkaWZmIGJldHdlZW4gdGltZWNvZGUgb2YgdGhpcyBhbmQgbmV4dCBibG9jayAqLwotCi0gICAgaWYgKHN0cmVhbS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTykgewotICAgICAgLyogRm9yIFNpbXBsZUJsb2NrLCBsb29rIGF0IHRoZSBrZXlmcmFtZSBiaXQgaW4gZmxhZ3MuIE90aGVyd2lzZSwKLSAgICAgICAgIGEgUmVmZXJlbmNlQmxvY2sgaW1wbGllcyB0aGF0IHRoaXMgaXMgbm90IGEga2V5ZnJhbWUuIEluIGVpdGhlcgotICAgICAgICAgY2FzZSwgaXQgb25seSBtYWtlcyBzZW5zZSBmb3IgdmlkZW8gc3RyZWFtcy4gKi8KLSAgICAgIGlmICgoaXNfc2ltcGxlYmxvY2sgJiYgIShmbGFncyAmIDB4ODApKSB8fCByZWZlcmVuY2VibG9jaykgewotICAgICAgICBkZWx0YV91bml0ID0gVFJVRTsKLSAgICAgICAgaW52aXNpYmxlX2ZyYW1lID0gKChmbGFncyAmIDB4MDgpKSAmJgotICAgICAgICAgICAgKCFzdHJjbXAgKHN0cmVhbS0+Y29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19WUDgpIHx8Ci0gICAgICAgICAgICAhc3RyY21wIChzdHJlYW0tPmNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVlA5KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIElmIHdlJ3JlIGRvaW5nIGEga2V5ZnJhbWUtb25seSB0cmlja21vZGUsIG9ubHkgcHVzaCBrZXlmcmFtZXMgb24gdmlkZW8KLSAgICAgICAqIHN0cmVhbXMgKi8KLSAgICAgIGlmIChkZWx0YV91bml0Ci0gICAgICAgICAgJiYgZGVtdXgtPmNvbW1vbi4KLSAgICAgICAgICBzZWdtZW50LmZsYWdzICYgR1NUX1NFR01FTlRfRkxBR19UUklDS01PREVfS0VZX1VOSVRTKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIlNraXBwaW5nIG5vbi1rZXlmcmFtZSBvbiBzdHJlYW0gJWQiLAotICAgICAgICAgICAgc3RyZWFtLT5pbmRleCk7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChuID0gMDsgbiA8IGxhY2VzOyBuKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqc3ViOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAobGFjZV9zaXplW25dID4gc2l6ZSkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkludmFsaWQgbGFjZSBzaXplIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBRb1MgZm9yIHZpZGVvIHRyYWNrIHdpdGggYW4gaW5kZXguIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQKLSAgICAgICAgIGluZGV4IGVudHJpZXMgcG9pbnQgdG8ga2V5ZnJhbWVzLCBidXQgaWYgdGhhdCBpcyBub3QgdHJ1ZSB3ZQotICAgICAgICAgd2lsbCBpbnN0YWQgc2tpcCB1bnRpbCB0aGUgbmV4dCBrZXlmcmFtZS4gKi8KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFjZV90aW1lKSAmJgotICAgICAgICAgIHN0cmVhbS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTyAmJgotICAgICAgICAgIHN0cmVhbS0+aW5kZXhfdGFibGUgJiYgZGVtdXgtPmNvbW1vbi5zZWdtZW50LnJhdGUgPiAwLjApIHsKLSAgICAgICAgR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqdmlkZW9jb250ZXh0ID0KLSAgICAgICAgICAgIChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIHN0cmVhbTsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIGVhcmxpZXN0X3RpbWU7Ci0gICAgICAgIEdzdENsb2NrVGltZSBlYXJsaWVzdF9zdHJlYW1fdGltZTsKLQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgZWFybGllc3RfdGltZSA9IHZpZGVvY29udGV4dC0+ZWFybGllc3RfdGltZTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgICAgZWFybGllc3Rfc3RyZWFtX3RpbWUgPQotICAgICAgICAgICAgZ3N0X3NlZ21lbnRfcG9zaXRpb25fZnJvbV9ydW5uaW5nX3RpbWUgKCZkZW11eC0+Y29tbW9uLnNlZ21lbnQsCi0gICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIGVhcmxpZXN0X3RpbWUpOwotCi0gICAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFjZV90aW1lKSAmJgotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGVhcmxpZXN0X3N0cmVhbV90aW1lKSAmJgotICAgICAgICAgICAgbGFjZV90aW1lIDw9IGVhcmxpZXN0X3N0cmVhbV90aW1lKSB7Ci0gICAgICAgICAgLyogZmluZCBpbmRleCBlbnRyeSAoa2V5ZnJhbWUpIDw9IGVhcmxpZXN0X3N0cmVhbV90aW1lICovCi0gICAgICAgICAgR3N0TWF0cm9za2FJbmRleCAqZW50cnkgPQotICAgICAgICAgICAgICBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChzdHJlYW0tPmluZGV4X3RhYmxlLT5kYXRhLAotICAgICAgICAgICAgICBzdHJlYW0tPmluZGV4X3RhYmxlLT5sZW4sIHNpemVvZiAoR3N0TWF0cm9za2FJbmRleCksCi0gICAgICAgICAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBnc3RfbWF0cm9za2FfaW5kZXhfc2Vla19maW5kLAotICAgICAgICAgICAgICBHU1RfU0VBUkNIX01PREVfQkVGT1JFLCAmZWFybGllc3Rfc3RyZWFtX3RpbWUsIE5VTEwpOwotCi0gICAgICAgICAgLyogaWYgdGhhdCBlbnRyeSAoa2V5ZnJhbWUpIGlzIGFmdGVyIHRoZSBjdXJyZW50IHRoZSBjdXJyZW50Ci0gICAgICAgICAgICAgYnVmZmVyLCB3ZSBjYW4gc2tpcCBwdXNoaW5nIChhbmQgdGh1cyBkZWNvZGluZykgYWxsCi0gICAgICAgICAgICAgYnVmZmVycyB1bnRpbCB0aGF0IGtleWZyYW1lLiAqLwotICAgICAgICAgIGlmIChlbnRyeSAmJiBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZW50cnktPnRpbWUpICYmCi0gICAgICAgICAgICAgIGVudHJ5LT50aW1lID4gbGFjZV90aW1lKSB7Ci0gICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJTa2lwcGluZyBsYWNlIGJlZm9yZSBsYXRlIGtleWZyYW1lIik7Ci0gICAgICAgICAgICBzdHJlYW0tPnNldF9kaXNjb250ID0gVFJVRTsKLSAgICAgICAgICAgIGdvdG8gbmV4dF9sYWNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdWIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWYsIEdTVF9CVUZGRVJfQ09QWV9BTEwsCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSAtIHNpemUsIGxhY2Vfc2l6ZVtuXSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNyZWF0ZWQgc3ViYnVmZmVyICVwIiwgc3ViKTsKLQotICAgICAgaWYgKGRlbHRhX3VuaXQpCi0gICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKHN1YiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgICAgZWxzZQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKHN1YiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgICBpZiAoaW52aXNpYmxlX2ZyYW1lKQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChzdWIsIEdTVF9CVUZGRVJfRkxBR19ERUNPREVfT05MWSk7Ci0KLSAgICAgIGlmIChzdHJlYW0tPmVuY29kaW5ncyAhPSBOVUxMICYmIHN0cmVhbS0+ZW5jb2RpbmdzLT5sZW4gPiAwKQotICAgICAgICBzdWIgPSBnc3RfbWF0cm9za2FfZGVjb2RlX2J1ZmZlciAoc3RyZWFtLCBzdWIpOwotCi0gICAgICBpZiAoc3ViID09IE5VTEwpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkRlY29kaW5nIGJ1ZmZlciBmYWlsZWQiKTsKLSAgICAgICAgZ290byBuZXh0X2xhY2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc3RyZWFtLT5kdHNfb25seSkgewotICAgICAgICBHU1RfQlVGRkVSX1BUUyAoc3ViKSA9IGxhY2VfdGltZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9CVUZGRVJfRFRTIChzdWIpID0gbGFjZV90aW1lOwotICAgICAgICBpZiAoc3RyZWFtLT5pbnRyYV9vbmx5KQotICAgICAgICAgIEdTVF9CVUZGRVJfUFRTIChzdWIpID0gbGFjZV90aW1lOwotICAgICAgfQotCi0gICAgICBidWZmZXJfdGltZXN0YW1wID0gZ3N0X21hdHJvc2thX3RyYWNrX2dldF9idWZmZXJfdGltZXN0YW1wIChzdHJlYW0sIHN1Yik7Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFjZV90aW1lKSkgewotICAgICAgICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wX2VuZDsKLQotICAgICAgICAvKiBDaGVjayBpZiB0aGlzIHN0cmVhbSBpcyBhZnRlciBzZWdtZW50IHN0b3AgKi8KLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+Y29tbW9uLnNlZ21lbnQuc3RvcCkgJiYKLSAgICAgICAgICAgIGxhY2VfdGltZSA+PSBkZW11eC0+Y29tbW9uLnNlZ21lbnQuc3RvcCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAiU3RyZWFtICVkIGFmdGVyIHNlZ21lbnQgc3RvcCAlIiBHU1RfVElNRV9GT1JNQVQsIHN0cmVhbS0+aW5kZXgsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGRlbXV4LT5jb21tb24uc2VnbWVudC5zdG9wKSk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLSAgICAgICAgICBnb3RvIGVvczsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0ID49IHN0cmVhbS0+dG9fb2Zmc2V0Ci0gICAgICAgICAgICB8fCAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGRlbXV4LT50b190aW1lKQotICAgICAgICAgICAgICAgICYmIGxhY2VfdGltZSA+IGRlbXV4LT50b190aW1lKSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU3RyZWFtICVkIGFmdGVyIHBsYXliYWNrIHNlY3Rpb24iLAotICAgICAgICAgICAgICBzdHJlYW0tPmluZGV4KTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChzdWIpOwotICAgICAgICAgIGdvdG8gZW9zOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogaGFuZGxlIGdhcHMsIGUuZy4gbm9uLXplcm8gc3RhcnQtdGltZSwgb3IgYW4gY3VlIGluZGV4IGVudHJ5Ci0gICAgICAgICAqIHRoYXQgbGFuZGVkIHVzIHdpdGggdGltZXN0YW1wcyBub3QgcXVpdGUgaW50ZW5kZWQgKi8KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICAgIGlmIChkZW11eC0+bWF4X2dhcF90aW1lICYmCi0gICAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZGVtdXgtPmxhc3Rfc3RvcF9lbmQpICYmCi0gICAgICAgICAgICBkZW11eC0+Y29tbW9uLnNlZ21lbnQucmF0ZSA+IDAuMCkgewotICAgICAgICAgIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLQotICAgICAgICAgIC8qIG9ubHkgc2VuZCBzZWdtZW50cyB3aXRoIGluY3JlYXNpbmcgc3RhcnQgdGltZXMsCi0gICAgICAgICAgICogb3RoZXJ3aXNlIGlmIHRoZXNlIGdvIGJhY2sgYW5kIGZvcnRoIGRvd25zdHJlYW0gKHNpbmtzKSBpbmNyZWFzZQotICAgICAgICAgICAqIGFjY3VtdWxhdGVkIHRpbWUgYW5kIHJ1bm5pbmdfdGltZSAqLwotICAgICAgICAgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAoZGVtdXgtPmxhc3Rfc3RvcF9lbmQsIGxhY2VfdGltZSk7Ci0gICAgICAgICAgaWYgKGRpZmYgPiAwICYmIGRpZmYgPiBkZW11eC0+bWF4X2dhcF90aW1lCi0gICAgICAgICAgICAgICYmIGxhY2VfdGltZSA+IGRlbXV4LT5jb21tb24uc2VnbWVudC5zdGFydAotICAgICAgICAgICAgICAmJiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+Y29tbW9uLnNlZ21lbnQuc3RvcCkKLSAgICAgICAgICAgICAgICAgIHx8IGxhY2VfdGltZSA8IGRlbXV4LT5jb21tb24uc2VnbWVudC5zdG9wKSkgewotICAgICAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICAgIkdhcCBvZiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBucyBkZXRlY3RlZCBpbiIKLSAgICAgICAgICAgICAgICAic3RyZWFtICVkICglIiBHU1RfVElNRV9GT1JNQVQgIiAtPiAlIiBHU1RfVElNRV9GT1JNQVQgIikuICIKLSAgICAgICAgICAgICAgICAiU2VuZGluZyB1cGRhdGVkIFNFR01FTlQgZXZlbnRzIiwgZGlmZiwKLSAgICAgICAgICAgICAgICBzdHJlYW0tPmluZGV4LCBHU1RfVElNRV9BUkdTIChzdHJlYW0tPnBvcyksCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFjZV90aW1lKSk7Ci0KLSAgICAgICAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19nYXAgKGRlbXV4LT5sYXN0X3N0b3BfZW5kLCBkaWZmKTsKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+cGFkLCBldmVudCk7Ci0gICAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24pCi0gICAgICAgICAgICB8fCBkZW11eC0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24gPCBsYWNlX3RpbWUpIHsKLSAgICAgICAgICBkZW11eC0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24gPSBsYWNlX3RpbWU7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICAgICAgICBsYXN0X3N0b3BfZW5kID0gbGFjZV90aW1lOwotICAgICAgICBpZiAoZHVyYXRpb24pIHsKLSAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChzdWIpID0gZHVyYXRpb24gLyBsYWNlczsKLSAgICAgICAgICBsYXN0X3N0b3BfZW5kICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1Yik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+bGFzdF9zdG9wX2VuZCkgfHwKLSAgICAgICAgICAgIGRlbXV4LT5sYXN0X3N0b3BfZW5kIDwgbGFzdF9zdG9wX2VuZCkKLSAgICAgICAgICBkZW11eC0+bGFzdF9zdG9wX2VuZCA9IGxhc3Rfc3RvcF9lbmQ7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICAgIGlmIChkZW11eC0+Y29tbW9uLnNlZ21lbnQuZHVyYXRpb24gPT0gLTEgfHwKLSAgICAgICAgICAgIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZSArIGRlbXV4LT5jb21tb24uc2VnbWVudC5kdXJhdGlvbiA8Ci0gICAgICAgICAgICBsYXN0X3N0b3BfZW5kKSB7Ci0gICAgICAgICAgZGVtdXgtPmNvbW1vbi5zZWdtZW50LmR1cmF0aW9uID0KLSAgICAgICAgICAgICAgbGFzdF9zdG9wX2VuZCAtIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZTsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgICAgIGlmICghZGVtdXgtPmludmFsaWRfZHVyYXRpb24pIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLAotICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkIChHU1RfT0JKRUNUX0NBU1QgKGRlbXV4KSkpOwotICAgICAgICAgICAgZGVtdXgtPmludmFsaWRfZHVyYXRpb24gPSBUUlVFOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHN0cmVhbS0+cG9zID0gbGFjZV90aW1lOwotCi0gICAgICBnc3RfbWF0cm9za2FfZGVtdXhfc3luY19zdHJlYW1zIChkZW11eCk7Ci0KLSAgICAgIGlmIChzdHJlYW0tPnNldF9kaXNjb250KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibWFya2luZyBESVNDT05UIik7Ci0gICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKHN1YiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgICBzdHJlYW0tPnNldF9kaXNjb250ID0gRkFMU0U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKHN1YiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgfQotCi0gICAgICAvKiByZXZlcnNlIHBsYXliYWNrIGJvb2sta2VlcGluZyAqLwotICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtLT5mcm9tX3RpbWUpKQotICAgICAgICBzdHJlYW0tPmZyb21fdGltZSA9IGxhY2VfdGltZTsKLSAgICAgIGlmIChzdHJlYW0tPmZyb21fb2Zmc2V0ID09IC0xKQotICAgICAgICBzdHJlYW0tPmZyb21fb2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAiUHVzaGluZyBsYWNlICVkLCBkYXRhIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQKLSAgICAgICAgICAiIGZvciBzdHJlYW0gJWQsIHRpbWU9JSIgR1NUX1RJTUVfRk9STUFUICIgYW5kIGR1cmF0aW9uPSUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBuLCBnc3RfYnVmZmVyX2dldF9zaXplIChzdWIpLCBzdHJlYW1fbnVtLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGJ1ZmZlcl90aW1lc3RhbXApLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikpKTsKLQotI2lmIDAKLSAgICAgIGlmIChkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXgpIHsKLSAgICAgICAgaWYgKHN0cmVhbS0+aW5kZXhfd3JpdGVyX2lkID09IC0xKQotICAgICAgICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXgsCi0gICAgICAgICAgICAgIEdTVF9PQkpFQ1QgKHN0cmVhbS0+cGFkKSwgJnN0cmVhbS0+aW5kZXhfd3JpdGVyX2lkKTsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJhZGRpbmcgYXNzb2NpYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICItPiAlIgotICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiIGZvciB3cml0ZXIgaWQgJWQiLAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoYnVmZmVyX3RpbWVzdGFtcCksIGNsdXN0ZXJfb2Zmc2V0LAotICAgICAgICAgICAgc3RyZWFtLT5pbmRleF93cml0ZXJfaWQpOwotICAgICAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uIChkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXgsCi0gICAgICAgICAgICBzdHJlYW0tPmluZGV4X3dyaXRlcl9pZCwgR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoc3ViLAotICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSA/IDAgOiBHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCwKLSAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwgYnVmZmVyX3RpbWVzdGFtcCwgR1NUX0ZPUk1BVF9CWVRFUywgY2x1c3Rlcl9vZmZzZXQsCi0gICAgICAgICAgICBOVUxMKTsKLSAgICAgIH0KLSNlbmRpZgotCi0gICAgICAvKiBQb3N0cHJvY2VzcyB0aGUgYnVmZmVycyBkZXBlbmRpbmcgb24gdGhlIGNvZGVjIHVzZWQgKi8KLSAgICAgIGlmIChzdHJlYW0tPnBvc3Rwcm9jZXNzX2ZyYW1lKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInJ1bm5pbmcgcG9zdCBwcm9jZXNzIik7Ci0gICAgICAgIHJldCA9IHN0cmVhbS0+cG9zdHByb2Nlc3NfZnJhbWUgKEdTVF9FTEVNRU5UIChkZW11eCksIHN0cmVhbSwgJnN1Yik7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBzdWItYnVmZmVyIHBvaW50aW5nIGF0IGRhdGEgd2l0aGluIGEgbGFyZ2VyCi0gICAgICAgICBidWZmZXIuIFRoaXMgZGF0YSBtaWdodCBub3QgYmUgYWxpZ25lZCB3aXRoIGFueXRoaW5nLiBJZiB0aGUgZGF0YSBpcwotICAgICAgICAgcmF3IHNhbXBsZXMgdGhvdWdoLCB3ZSB3YW50IGl0IGFsaWduZWQgdG8gdGhlIHJhdyB0eXBlIChlZywgNCBieXRlcwotICAgICAgICAgZm9yIDMyIGJpdCBzYW1wbGVzLCBldGMpLCBvciBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuIGRvd25zdHJlYW0gYXMKLSAgICAgICAgIGVsZW1lbnRzIHR5cGljYWxseSBhc3N1bWUgbWluaW1hbCBhbGlnbm1lbnQuCi0gICAgICAgICBUaGVyZWZvcmUsIGNyZWF0ZSBhbiBhbGlnbmVkIGNvcHkgaWYgbmVjZXNzYXJ5LiAqLwotICAgICAgc3ViID0gZ3N0X21hdHJvc2thX2RlbXV4X2FsaWduX2J1ZmZlciAoZGVtdXgsIHN1Yiwgc3RyZWFtLT5hbGlnbm1lbnQpOwotCi0gICAgICBpZiAoIXN0cmNtcCAoc3RyZWFtLT5jb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX09QVVMpKSB7Ci0gICAgICAgIGd1aW50NjQgc3RhcnRfY2xpcCA9IDAsIGVuZF9jbGlwID0gMDsKLQotICAgICAgICAvKiBDb2RlYyBkZWxheSBpcyBwYXJ0IG9mIHRoZSB0aW1lc3RhbXBzICovCi0gICAgICAgIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoc3ViKSAmJiBzdHJlYW0tPmNvZGVjX2RlbGF5KSB7Ci0gICAgICAgICAgaWYgKEdTVF9CVUZGRVJfUFRTIChzdWIpID4gc3RyZWFtLT5jb2RlY19kZWxheSkgewotICAgICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKHN1YikgLT0gc3RyZWFtLT5jb2RlY19kZWxheTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKHN1YikgPSAwOwotICAgICAgICAgICAgc3RhcnRfY2xpcCA9Ci0gICAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChzdHJlYW0tPmNvZGVjX2RlbGF5LCA0ODAwMCwKLSAgICAgICAgICAgICAgICBHU1RfU0VDT05EKTsKLQotICAgICAgICAgICAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKHN1YikpIHsKLSAgICAgICAgICAgICAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikgPiBzdHJlYW0tPmNvZGVjX2RlbGF5KQotICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikgLT0gc3RyZWFtLT5jb2RlY19kZWxheTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChibG9ja19kaXNjYXJkcGFkZGluZykgewotICAgICAgICAgIGVuZF9jbGlwID0KLSAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChibG9ja19kaXNjYXJkcGFkZGluZywgNDgwMDAsCi0gICAgICAgICAgICAgIEdTVF9TRUNPTkQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXJ0X2NsaXAgfHwgZW5kX2NsaXApIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX2FkZF9hdWRpb19jbGlwcGluZ19tZXRhIChzdWIsIEdTVF9GT1JNQVRfREVGQVVMVCwKLSAgICAgICAgICAgICAgc3RhcnRfY2xpcCwgZW5kX2NsaXApOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoc3ViKSkgewotICAgICAgICBzdHJlYW0tPnBvcyA9IEdTVF9CVUZGRVJfUFRTIChzdWIpOwotICAgICAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoc3ViKSkKLSAgICAgICAgICBzdHJlYW0tPnBvcyArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChzdWIpOwotICAgICAgfSBlbHNlIGlmIChHU1RfQlVGRkVSX0RUU19JU19WQUxJRCAoc3ViKSkgewotICAgICAgICBzdHJlYW0tPnBvcyA9IEdTVF9CVUZGRVJfRFRTIChzdWIpOwotICAgICAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoc3ViKSkKLSAgICAgICAgICBzdHJlYW0tPnBvcyArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChzdWIpOwotICAgICAgfQotCi0gICAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHN0cmVhbS0+cGFkLCBzdWIpOwotCi0gICAgICBpZiAoZGVtdXgtPmNvbW1vbi5zZWdtZW50LnJhdGUgPCAwKSB7Ci0gICAgICAgIGlmIChsYWNlX3RpbWUgPiBkZW11eC0+Y29tbW9uLnNlZ21lbnQuc3RvcCAmJiByZXQgPT0gR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAgICAgLyogSW4gcmV2ZXJzZSBwbGF5YmFjayB3ZSBjYW4gZ2V0IGEgR1NUX0ZMT1dfRU9TIHdoZW4KLSAgICAgICAgICAgKiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudCwgc28gd2UganVzdCBuZWVkIHRvIGp1bXAKLSAgICAgICAgICAgKiBiYWNrIHRvIHRoZSBwcmV2aW91cyBzZWN0aW9uLiAqLwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZG93bnN0cmVhbSBoYXMgcmVhY2hlZCBlbmQgb2Ygc2VnbWVudCIpOwotICAgICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBjb21iaW5lIGZsb3dzICovCi0gICAgICByZXQgPSBnc3RfZmxvd19jb21iaW5lcl91cGRhdGVfcGFkX2Zsb3cgKGRlbXV4LT5mbG93Y29tYmluZXIsCi0gICAgICAgICAgc3RyZWFtLT5wYWQsIHJldCk7Ci0KLSAgICBuZXh0X2xhY2U6Ci0gICAgICBzaXplIC09IGxhY2Vfc2l6ZVtuXTsKLSAgICAgIGlmIChsYWNlX3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBkdXJhdGlvbikKLSAgICAgICAgbGFjZV90aW1lICs9IGR1cmF0aW9uIC8gbGFjZXM7Ci0gICAgICBlbHNlCi0gICAgICAgIGxhY2VfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgfQotICB9Ci0KLWRvbmU6Ci0gIGlmIChidWYpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLSAgZ19mcmVlIChsYWNlX3NpemUpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVhJVFMgKi8KLWVvczoKLSAgewotICAgIHN0cmVhbS0+ZW9zID0gVFJVRTsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAvKiBjb21iaW5lIGZsb3dzICovCi0gICAgcmV0ID0gZ3N0X2Zsb3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93IChkZW11eC0+Zmxvd2NvbWJpbmVyLCBzdHJlYW0tPnBhZCwKLSAgICAgICAgcmV0KTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWludmFsaWRfbGFjaW5nOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZGVtdXgsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJJbnZhbGlkIGxhY2luZyBzaXplIikpOwotICAgIC8qIG5vbi1mYXRhbCwgdHJ5IG5leHQgYmxvY2soZ3JvdXApICovCi0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBkb25lOwotICB9Ci1kYXRhX2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZGVtdXgsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJEYXRhIGVycm9yIikpOwotICAgIC8qIG5vbi1mYXRhbCwgdHJ5IG5leHQgYmxvY2soZ3JvdXApICovCi0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qIHJldHVybiBGQUxTRSBpZiBibG9jayhncm91cCkgc2hvdWxkIGJlIHNraXBwZWQgKGR1ZSB0byBhIHNlZWspICovCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfc2Vla19ibG9jayAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4KQotewotICBpZiAoR19VTkxJS0VMWSAoZGVtdXgtPnNlZWtfYmxvY2spKSB7Ci0gICAgaWYgKCEoLS1kZW11eC0+c2Vla19ibG9jaykpIHsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJzaG91bGQgc2tpcCBibG9jayBkdWUgdG8gc2VlayIpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LAotICAgIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50NjQgc2Vla19wb3MgPSAoZ3VpbnQ2NCkgLSAxOwotICBndWludDMyIHNlZWtfaWQgPSAwOwotICBndWludDMyIGlkOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKGRlbXV4LCBlYm1sLCAiU2VlayIpOwotCi0gIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF9tYXN0ZXIgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgREVCVUdfRUxFTUVOVF9TVE9QIChkZW11eCwgZWJtbCwgIlNlZWsiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUVLSUQ6Ci0gICAgICB7Ci0gICAgICAgIGd1aW50NjQgdDsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmdCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiU2Vla0lEOiAlIiBHX0dVSU5UNjRfRk9STUFULCB0KTsKLSAgICAgICAgc2Vla19pZCA9IHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUVLUE9TSVRJT046Ci0gICAgICB7Ci0gICAgICAgIGd1aW50NjQgdDsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmdCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICh0ID4gR19NQVhJTlQ2NCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJUb28gbGFyZ2UgU2Vla1Bvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVrUG9zaXRpb246ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHQpOwotICAgICAgICBzZWVrX3BvcyA9IHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2Vfc2tpcCAoJmRlbXV4LT5jb21tb24sIGVibWwsCi0gICAgICAgICAgICAiU2Vla0hlYWQiLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykKLSAgICByZXR1cm4gcmV0OwotCi0gIGlmICghc2Vla19pZCB8fCBzZWVrX3BvcyA9PSAoZ3VpbnQ2NCkgLSAxKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwgIkluY29tcGxldGUgc2Vla2hlYWQgZW50cnkgKDB4JXgvJSIKLSAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIHNlZWtfaWQsIHNlZWtfcG9zKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICBzd2l0Y2ggKHNlZWtfaWQpIHsKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUVLSEVBRDoKLSAgICB7Ci0gICAgfQotICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NVRVM6Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVEFHUzoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS1M6Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVElORk86Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVRUQUNITUVOVFM6Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlM6Ci0gICAgewotICAgICAgZ3VpbnQ2NCBiZWZvcmVfcG9zLCBsZW5ndGg7Ci0gICAgICBndWludCBuZWVkZWQ7Ci0KLSAgICAgIC8qIHJlbWVtYmVyICovCi0gICAgICBsZW5ndGggPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZ2V0X2xlbmd0aCAoJmRlbXV4LT5jb21tb24pOwotICAgICAgYmVmb3JlX3BvcyA9IGRlbXV4LT5jb21tb24ub2Zmc2V0OwotCi0gICAgICBpZiAobGVuZ3RoID09IChndWludDY0KSAtIDEpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJubyB1cHN0cmVhbSBsZW5ndGgsIHNraXBwaW5nIFNlYWtIZWFkIGVudHJ5Iik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBjaGVjayBmb3IgdmFsaWRpdHkgKi8KLSAgICAgIGlmIChzZWVrX3BvcyArIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0ICsgMTIgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAiU2Vla0hlYWQgcmVmZXJlbmNlIGxpZXMgb3V0c2lkZSBmaWxlISIgIiAoJSIKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIislIiBHX0dVSU5UNjRfRk9STUFUICIrMTIgPj0gJSIKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCBzZWVrX3BvcywgZGVtdXgtPmNvbW1vbi5lYm1sX3NlZ21lbnRfc3RhcnQsCi0gICAgICAgICAgICBsZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogb25seSBwaWNrIHVwIGluZGV4IGxvY2F0aW9uIHdoZW4gc3RyZWFtaW5nICovCi0gICAgICBpZiAoZGVtdXgtPnN0cmVhbWluZykgewotICAgICAgICBpZiAoc2Vla19pZCA9PSBHU1RfTUFUUk9TS0FfSURfQ1VFUykgewotICAgICAgICAgIGRlbXV4LT5pbmRleF9vZmZzZXQgPSBzZWVrX3BvcyArIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0OwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ3VlcyBsb2NhdGVkIGF0IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgICBkZW11eC0+aW5kZXhfb2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogc2VlayAqLwotICAgICAgZGVtdXgtPmNvbW1vbi5vZmZzZXQgPSBzZWVrX3BvcyArIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0OwotCi0gICAgICAvKiBjaGVjayBJRCAqLwotICAgICAgaWYgKChyZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVsbCAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9DQVNUIChkZW11eCksICZpZCwgJmxlbmd0aCwgJm5lZWRlZCkpICE9Ci0gICAgICAgICAgR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gZmluaXNoOwotCi0gICAgICBpZiAoaWQgIT0gc2Vla19pZCkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgIldlIGxvb2tlZCBmb3IgSUQ9MHgleCBidXQgZ290IElEPTB4JXggKHBvcz0lIiBHX0dVSU5UNjRfRk9STUFUICIpIiwKLSAgICAgICAgICAgIHNlZWtfaWQsIGlkLCBzZWVrX3BvcyArIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG5vdyBwYXJzZSAqLwotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaWQgKGRlbXV4LCBpZCwgbGVuZ3RoLCBuZWVkZWQpOwotICAgICAgfQotCi0gICAgZmluaXNoOgotICAgICAgLyogc2VlayBiYWNrICovCi0gICAgICBkZW11eC0+Y29tbW9uLm9mZnNldCA9IGJlZm9yZV9wb3M7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSOgotICAgIHsKLSAgICAgIGd1aW50NjQgcG9zID0gc2Vla19wb3MgKyBkZW11eC0+Y29tbW9uLmVibWxfc2VnbWVudF9zdGFydDsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiQ2x1c3RlciBwb3NpdGlvbiIpOwotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+Y2x1c3RlcnMpKQotICAgICAgICBkZW11eC0+Y2x1c3RlcnMgPSBnX2FycmF5X3NpemVkX25ldyAoVFJVRSwgVFJVRSwgc2l6ZW9mIChndWludDY0KSwgMTAwKTsKLSAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAoZGVtdXgtPmNsdXN0ZXJzLCBwb3MpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiSWdub3JpbmcgU2VlayBlbnRyeSBmb3IgSUQ9MHgleCIsIHNlZWtfaWQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChkZW11eCwgZWJtbCwgIlNlZWsiLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfY29udGVudHMgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDMyIGlkOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKGRlbXV4LCBlYm1sLCAiU2Vla0hlYWQiKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoZGVtdXgsIGVibWwsICJTZWVrSGVhZCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFRUtFTlRSWToKLSAgICAgIHsKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSAoZGVtdXgsIGVibWwpOwotICAgICAgICAvKiBJZ25vcmUgRU9TIGFuZCBlcnJvcnMgaGVyZSAqLwotICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJJZ25vcmluZyAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKCZkZW11eC0+Y29tbW9uLAotICAgICAgICAgICAgZWJtbCwgIlNlZWtIZWFkIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGRlbXV4LCBlYm1sLCAiU2Vla0hlYWQiLCByZXQpOwotCi0gIC8qIFNvcnQgY2x1c3RlcnMgYnkgcG9zaXRpb24gZm9yIGVhc2llciBzZWFyY2hpbmcgKi8KLSAgaWYgKGRlbXV4LT5jbHVzdGVycykKLSAgICBnX2FycmF5X3NvcnQgKGRlbXV4LT5jbHVzdGVycywgKEdDb21wYXJlRnVuYykgZ3N0X21hdHJvc2thX2NsdXN0ZXJfY29tcGFyZSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBHU1RfRkxPV19PVkVSRkxPVyAgIEdTVF9GTE9XX0NVU1RPTV9FUlJPUgotCi0jZGVmaW5lIE1BWF9CTE9DS19TSVpFICgxNSAqIDEwMjQgKiAxMDI0KQotCi1zdGF0aWMgaW5saW5lIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9kZW11eF9jaGVja19yZWFkX3NpemUgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgZ3VpbnQ2NCBieXRlcykKLXsKLSAgaWYgKEdfVU5MSUtFTFkgKGJ5dGVzID4gTUFYX0JMT0NLX1NJWkUpKSB7Ci0gICAgLyogb25seSBhIGZldyBibG9ja3MgYXJlIGV4cGVjdGVkL2FsbG93ZWQgdG8gYmUgbGFyZ2UsCi0gICAgICogYW5kIHdpbGwgYmUgcmVjdXJzZWQgaW50bywgd2hlcmVhcyBvdGhlcnMgd2lsbCBiZSByZWFkIGFuZCBtdXN0IGZpdCAqLwotICAgIGlmIChkZW11eC0+c3RyZWFtaW5nKSB7Ci0gICAgICAvKiBmYXRhbCBpbiBzdHJlYW1pbmcgY2FzZSwgYXMgd2UgY2FuJ3Qgc3RlcCBvdmVyIGVhc2lseSAqLwotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICAgKCJyZWFkaW5nIGxhcmdlIGJsb2NrIG9mIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiIG5vdCBzdXBwb3J0ZWQ7ICIKLSAgICAgICAgICAgICAgImZpbGUgbWlnaHQgYmUgY29ycnVwdC4iLCBieXRlcykpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBpbmRpY2F0ZSBoaWdoZXIgbGV2ZWwgdG8gcXVpZXRseSBnaXZlIHVwICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAidG9vIGxhcmdlIGJsb2NrIG9mIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwgYnl0ZXMpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotLyogcmV0dXJucyBUUlVFIGlmIHdlIHRydWVseSBhcmUgaW4gZXJyb3Igc3RhdGUsIGFuZCBzaG91bGQgZ2l2ZSB1cCAqLwotc3RhdGljIGlubGluZSBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfcGFyc2VfZXJyb3IgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCkKLXsKLSAgaWYgKCFkZW11eC0+c3RyZWFtaW5nICYmIGRlbXV4LT5uZXh0X2NsdXN0ZXJfb2Zmc2V0ID4gMCkgewotICAgIC8qIGp1c3QgcmVwb3NpdGlvbmluZyB0byB3aGVyZSBuZXh0IGNsdXN0ZXIgc2hvdWxkIGJlIGFuZCB0cnkgZnJvbSB0aGVyZSAqLwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJwYXJzZSBlcnJvciwgdHJ5aW5nIG5leHQgY2x1c3RlciBleHBlY3RlZCBhdCAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBkZW11eC0+bmV4dF9jbHVzdGVyX29mZnNldCk7Ci0gICAgZGVtdXgtPmNvbW1vbi5vZmZzZXQgPSBkZW11eC0+bmV4dF9jbHVzdGVyX29mZnNldDsKLSAgICBkZW11eC0+bmV4dF9jbHVzdGVyX29mZnNldCA9IDA7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9IGVsc2UgewotICAgIGdpbnQ2NCBwb3M7Ci0gICAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgICAvKiBzaWdoLCBvbmUgbGFzdCBhdHRlbXB0IGFib3ZlIGFuZCBiZXlvbmQgY2FsbCBvZiBkdXR5IC4uLjsKLSAgICAgKiBzZWFyY2ggZm9yIGNsdXN0ZXIgbWFyayBmb2xsb3dpbmcgY3VycmVudCBwb3MgKi8KLSAgICBwb3MgPSBkZW11eC0+Y29tbW9uLm9mZnNldDsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LCAicGFyc2UgZXJyb3IsIGxvb2tpbmcgZm9yIG5leHQgY2x1c3RlciIpOwotICAgIGlmICgocmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X3NlYXJjaF9jbHVzdGVyIChkZW11eCwgJnBvcykpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAvKiBkaWQgbm90IHdvcmssIGdpdmUgdXAgKi8KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiLi4uIGZvdW5kIGF0ICAlIiBHX0dVSU5UNjRfRk9STUFULCBwb3MpOwotICAgICAgLyogdHJ5IHRoYXQgcG9zaXRpb24gKi8KLSAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ID0gcG9zOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgaW5saW5lIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9kZW11eF9mbHVzaCAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LCBndWludCBmbHVzaCkKLXsKLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAic2tpcHBpbmcgJWQgYnl0ZXMiLCBmbHVzaCk7Ci0gIGRlbXV4LT5jb21tb24ub2Zmc2V0ICs9IGZsdXNoOwotICBpZiAoZGVtdXgtPnN0cmVhbWluZykgewotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gICAgLyogaGFyZCB0byBza2lwIGxhcmdlIGJsb2NrcyB3aGVuIHN0cmVhbWluZyAqLwotICAgIHJldCA9IGdzdF9tYXRyb3NrYV9kZW11eF9jaGVja19yZWFkX3NpemUgKGRlbXV4LCBmbHVzaCk7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgaWYgKGZsdXNoIDw9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmNvbW1vbi5hZGFwdGVyKSkKLSAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChkZW11eC0+Y29tbW9uLmFkYXB0ZXIsIGZsdXNoKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogaW5pdGlhbGl6ZXMgQGVibWwgd2l0aCBAYnl0ZXMgZnJvbSBpbnB1dCBzdHJlYW0gYXQgY3VycmVudCBvZmZzZXQuCi0gKiBSZXR1cm5zIEVPUyBpZiBpbnN1ZmZpY2llbnQgYXZhaWxhYmxlLAotICogRVJST1IgaWYgdG9vIG11Y2ggd2FzIGF0dGVtcHRlZCB0byByZWFkLiAqLwotc3RhdGljIGlubGluZSBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4LCBndWludDY0IGJ5dGVzLAotICAgIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInRha2luZyAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgZm9yIHBhcnNpbmciLAotICAgICAgYnl0ZXMpOwotICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfcmVhZF9zaXplIChkZW11eCwgYnl0ZXMpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewotICAgIGlmICghZGVtdXgtPnN0cmVhbWluZykgewotICAgICAgLyogaW4gcHVsbCBtb2RlLCB3ZSBjYW4gc2tpcCAqLwotICAgICAgaWYgKChyZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfZmx1c2ggKGRlbXV4LCBieXRlcykpID09IEdTVF9GTE9XX09LKQotICAgICAgICByZXQgPSBHU1RfRkxPV19PVkVSRkxPVzsKLSAgICB9IGVsc2UgewotICAgICAgLyogb3RoZXJ3aXNlIGZhdGFsICovCi0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0gICAgZ290byBleGl0OwotICB9Ci0gIGlmIChkZW11eC0+c3RyZWFtaW5nKSB7Ci0gICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVtdXgtPmNvbW1vbi5hZGFwdGVyKSA+PSBieXRlcykKLSAgICAgIGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChkZW11eC0+Y29tbW9uLmFkYXB0ZXIsIGJ5dGVzKTsKLSAgICBlbHNlCi0gICAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gIH0gZWxzZQotICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wZWVrX2J5dGVzICgmZGVtdXgtPmNvbW1vbiwKLSAgICAgICAgZGVtdXgtPmNvbW1vbi5vZmZzZXQsIGJ5dGVzLCAmYnVmZmVyLCBOVUxMKTsKLSAgaWYgKEdfTElLRUxZIChidWZmZXIpKSB7Ci0gICAgZ3N0X2VibWxfcmVhZF9pbml0IChlYm1sLCBHU1RfRUxFTUVOVF9DQVNUIChkZW11eCksIGJ1ZmZlciwKLSAgICAgICAgZGVtdXgtPmNvbW1vbi5vZmZzZXQpOwotICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ICs9IGJ5dGVzOwotICB9Ci1leGl0OgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3NlZWthYmlsaXR5IChHc3RNYXRyb3NrYURlbXV4ICogZGVtdXgpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gc2Vla2FibGUgPSBGQUxTRTsKLSAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3AgPSAtMTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChkZW11eC0+Y29tbW9uLnNpbmtwYWQsIHF1ZXJ5KSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2Vla2luZyBxdWVyeSBmYWlsZWQiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksIE5VTEwsICZzZWVrYWJsZSwgJnN0YXJ0LCAmc3RvcCk7Ci0KLSAgLyogdHJ5IGhhcmRlciB0byBxdWVyeSB1cHN0cmVhbSBzaXplIGlmIHdlIGRpZG4ndCBnZXQgaXQgdGhlIGZpcnN0IHRpbWUgKi8KLSAgaWYgKHNlZWthYmxlICYmIHN0b3AgPT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImRvaW5nIGR1cmF0aW9uIHF1ZXJ5IHRvIGZpeCB1cCB1bnNldCBzdG9wIik7Ci0gICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChkZW11eC0+Y29tbW9uLnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgICZzdG9wKTsKLSAgfQotCi0gIC8qIGlmIHVwc3RyZWFtIGRvZXNuJ3Qga25vdyB0aGUgc2l6ZSwgaXQncyBsaWtlbHkgdGhhdCBpdCdzIG5vdCBzZWVrYWJsZSBpbgotICAgKiBwcmFjdGljZSBldmVuIGlmIGl0IHRlY2huaWNhbGx5IG1heSBiZSBzZWVrYWJsZSAqLwotICBpZiAoc2Vla2FibGUgJiYgKHN0YXJ0ICE9IDAgfHwgc3RvcCA8PSBzdGFydCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNlZWthYmxlIGJ1dCB1bmtub3duIHN0YXJ0L3N0b3AgLT4gZGlzYWJsZSIpOwotICAgIHNlZWthYmxlID0gRkFMU0U7Ci0gIH0KLQotZG9uZToKLSAgR1NUX0lORk9fT0JKRUNUIChkZW11eCwgInNlZWthYmxlOiAlZCAoJSIgR19HVUlOVDY0X0ZPUk1BVCAiIC0gJSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCBzZWVrYWJsZSwgc3RhcnQsIHN0b3ApOwotICBkZW11eC0+c2Vla2FibGUgPSBzZWVrYWJsZTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9kZW11eF9maW5kX3RyYWNrcyAoR3N0TWF0cm9za2FEZW11eCAqIGRlbXV4KQotewotICBndWludDMyIGlkOwotICBndWludDY0IGJlZm9yZV9wb3M7Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludCBuZWVkZWQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZW11eCwKLSAgICAgICJGb3VuZCBDbHVzdGVyIGVsZW1lbnQgYmVmb3JlIFRyYWNrcywgc2VhcmNoaW5nIFRyYWNrcyIpOwotCi0gIC8qIHJlbWVtYmVyICovCi0gIGJlZm9yZV9wb3MgPSBkZW11eC0+Y29tbW9uLm9mZnNldDsKLQotICAvKiBTZWFyY2ggVHJhY2tzIGVsZW1lbnQgKi8KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVsbCAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgJmlkLCAmbGVuZ3RoLCAmbmVlZGVkKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBpZiAoaWQgIT0gR1NUX01BVFJPU0tBX0lEX1RSQUNLUykgewotICAgICAgLyogd2UgbWF5IGJlIHNraXBwaW5nIGxhcmdlIGNsdXN0ZXIgaGVyZSwgc28gZm9yZWdvIHNpemUgY2hlY2sgZXRjICovCi0gICAgICAvKiAuLi4gYnV0IHdlIGNhbid0IHNraXAgdW5kZWZpbmVkIHNpemU7IGZvcmNlIGVycm9yICovCi0gICAgICBpZiAobGVuZ3RoID09IEdfTUFYVUlOVDY0KSB7Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9kZW11eF9jaGVja19yZWFkX3NpemUgKGRlbXV4LCBsZW5ndGgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ICs9IG5lZWRlZDsKLSAgICAgICAgZGVtdXgtPmNvbW1vbi5vZmZzZXQgKz0gbGVuZ3RoOwotICAgICAgfQotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogd2lsbCBsZWFkIHRvIHRyYWNrIHBhcnNpbmcgLi4uICovCi0gICAgcmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2lkIChkZW11eCwgaWQsIGxlbmd0aCwgbmVlZGVkKTsKLSAgICBicmVhazsKLSAgfQotCi0gIC8qIHNlZWsgYmFjayAqLwotICBkZW11eC0+Y29tbW9uLm9mZnNldCA9IGJlZm9yZV9wb3M7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBHU1RfUkVBRF9DSEVDSyhzdG10KSAgXAotR19TVE1UX1NUQVJUIHsgXAotICBpZiAoR19VTkxJS0VMWSAoKHJldCA9IChzdG10KSkgIT0gR1NUX0ZMT1dfT0spKSB7IFwKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX09WRVJGTE9XKSB7IFwKLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOyBcCi0gICAgfSBcCi0gICAgZ290byByZWFkX2Vycm9yOyBcCi0gIH0gXAotfSBHX1NUTVRfRU5ECi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfaWQgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgZ3VpbnQzMiBpZCwKLSAgICBndWludDY0IGxlbmd0aCwgZ3VpbnQgbmVlZGVkKQotewotICBHc3RFYm1sUmVhZCBlYm1sID0geyAwLCB9OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDY0IHJlYWQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiUGFyc2luZyBFbGVtZW50IGlkIDB4JXgsICIKLSAgICAgICJzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgcHJlZml4ICVkIiwgaWQsIGxlbmd0aCwgbmVlZGVkKTsKLQotICAvKiBpZiB3ZSBwbGFuIHRvIHJlYWQgYW5kIHBhcnNlIHRoaXMgZWxlbWVudCwgd2UgbmVlZCBwcmVmaXggKGlkICsgbGVuZ3RoKQotICAgKiBhbmQgdGhlIGNvbnRlbnRzICovCi0gIC8qIG1pbmQgYWJvdXQgb3ZlcmZsb3cgd3JhcC1hcm91bmQgd2hlbiBkZWFsaW5nIHdpdGggdW5kZWZpbmVkIHNpemUgKi8KLSAgcmVhZCA9IGxlbmd0aDsKLSAgaWYgKEdfTElLRUxZIChsZW5ndGggIT0gR19NQVhVSU5UNjQpKQotICAgIHJlYWQgKz0gbmVlZGVkOwotCi0gIHN3aXRjaCAoZGVtdXgtPmNvbW1vbi5zdGF0ZSkgewotICAgIGNhc2UgR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfU1RBUlQ6Ci0gICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgR1NUX0VCTUxfSURfSEVBREVSOgotICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoZGVtdXgsIHJlYWQsICZlYm1sKSk7Ci0gICAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2hlYWRlciAoJmRlbXV4LT5jb21tb24sICZlYm1sKTsKLSAgICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgZ290byBwYXJzZV9mYWlsZWQ7Ci0gICAgICAgICAgZGVtdXgtPmNvbW1vbi5zdGF0ZSA9IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NFR01FTlQ7Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3NlZWthYmlsaXR5IChkZW11eCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgZ290byBpbnZhbGlkX2hlYWRlcjsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfU0VHTUVOVDoKLSAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVDoKLSAgICAgICAgICAvKiBlYXQgc2VnbWVudCBwcmVmaXggKi8KLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX2RlbXV4X2ZsdXNoIChkZW11eCwgbmVlZGVkKSk7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJGb3VuZCBTZWdtZW50IHN0YXJ0IGF0IG9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIgd2l0aCBzaXplICUiCi0gICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIGRlbXV4LT5jb21tb24ub2Zmc2V0LCBsZW5ndGgpOwotICAgICAgICAgIC8qIHNlZWtzIGFyZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlZ21lbnQsCi0gICAgICAgICAgICogYWZ0ZXIgdGhlIHNlZ21lbnQgSUQvbGVuZ3RoICovCi0gICAgICAgICAgZGVtdXgtPmNvbW1vbi5lYm1sX3NlZ21lbnRfc3RhcnQgPSBkZW11eC0+Y29tbW9uLm9mZnNldDsKLSAgICAgICAgICBpZiAobGVuZ3RoID09IDApCi0gICAgICAgICAgICBsZW5ndGggPSBHX01BWFVJTlQ2NDsKLSAgICAgICAgICBkZW11eC0+Y29tbW9uLmVibWxfc2VnbWVudF9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAgZGVtdXgtPmNvbW1vbi5zdGF0ZSA9IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0hFQURFUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlbXV4LAotICAgICAgICAgICAgICAiRXhwZWN0ZWQgYSBTZWdtZW50IElEICgweCV4KSwgYnV0IHJlY2VpdmVkIDB4JXghIiwKLSAgICAgICAgICAgICAgR1NUX01BVFJPU0tBX0lEX1NFR01FTlQsIGlkKTsKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX2RlbXV4X2ZsdXNoIChkZW11eCwgcmVhZCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9TQ0FOTklORzoKLSAgICAgIGlmIChpZCAhPSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUiAmJgotICAgICAgICAgIGlkICE9IEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSVElNRUNPREUpCi0gICAgICAgIGdvdG8gc2tpcDsKLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgIGNhc2UgR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfSEVBREVSOgotICAgIGNhc2UgR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQToKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NFRUs6Ci0gICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFR01FTlRJTkZPOgotICAgICAgICAgIGlmICghZGVtdXgtPmNvbW1vbi5zZWdtZW50aW5mb19wYXJzZWQpIHsKLSAgICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoZGVtdXgsIHJlYWQsICZlYm1sKSk7Ci0gICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfaW5mbyAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgICAgICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCAmZWJtbCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICBnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF90YWdzIChkZW11eCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfZmx1c2ggKGRlbXV4LCByZWFkKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS1M6Ci0gICAgICAgICAgaWYgKCFkZW11eC0+dHJhY2tzX3BhcnNlZCkgewotICAgICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9kZW11eF90YWtlIChkZW11eCwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV90cmFja3MgKGRlbXV4LCAmZWJtbCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfZmx1c2ggKGRlbXV4LCByZWFkKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSOgotICAgICAgICAgIGlmIChHX1VOTElLRUxZICghZGVtdXgtPnRyYWNrc19wYXJzZWQpKSB7Ci0gICAgICAgICAgICBpZiAoZGVtdXgtPnN0cmVhbWluZykgewotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIkNsdXN0ZXIgYmVmb3JlIFRyYWNrIik7Ci0gICAgICAgICAgICAgIGdvdG8gbm90X3N0cmVhbWFibGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfZmluZF90cmFja3MgKGRlbXV4KTsKLSAgICAgICAgICAgICAgaWYgKCFkZW11eC0+dHJhY2tzX3BhcnNlZCkKLSAgICAgICAgICAgICAgICBnb3RvIG5vX3RyYWNrczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKEdfVU5MSUtFTFkgKGRlbXV4LT5jb21tb24uc3RhdGUKLSAgICAgICAgICAgICAgICAgID09IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0hFQURFUikpIHsKLSAgICAgICAgICAgIGRlbXV4LT5jb21tb24uc3RhdGUgPSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9EQVRBOwotICAgICAgICAgICAgZGVtdXgtPmZpcnN0X2NsdXN0ZXJfb2Zmc2V0ID0gZGVtdXgtPmNvbW1vbi5vZmZzZXQ7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInNpZ25hbGluZyBubyBtb3JlIHBhZHMiKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlQgKGRlbXV4KSk7Ci0gICAgICAgICAgICAvKiBzZW5kIGluaXRpYWwgc2VnbWVudCAtIHdlIHdhaXQgdGlsbCB3ZSBrbm93IHRoZSBmaXJzdAotICAgICAgICAgICAgICAgaW5jb21pbmcgdGltZXN0YW1wLCBzbyB3ZSBjYW4gcHJvcGVybHkgc2V0IHRoZSBzdGFydCBvZgotICAgICAgICAgICAgICAgdGhlIHNlZ21lbnQuICovCi0gICAgICAgICAgICBkZW11eC0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZGVtdXgtPmNsdXN0ZXJfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICAgICAgZGVtdXgtPmNsdXN0ZXJfb2Zmc2V0ID0gZGVtdXgtPmNvbW1vbi5vZmZzZXQ7Ci0gICAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCFkZW11eC0+c2Vla19maXJzdCAmJiBkZW11eC0+c2Vla19ibG9jaykpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2VlayB0YXJnZXQgYmxvY2sgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAgICAgICAgICIgbm90IGZvdW5kIGluIENsdXN0ZXIsIHRyeWluZyBuZXh0IENsdXN0ZXIncyBmaXJzdCBibG9jayBpbnN0ZWFkIiwKLSAgICAgICAgICAgICAgICBkZW11eC0+c2Vla19ibG9jayk7Ci0gICAgICAgICAgICBkZW11eC0+c2Vla19ibG9jayA9IDA7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlbXV4LT5zZWVrX2ZpcnN0ID0gRkFMU0U7Ci0gICAgICAgICAgLyogcmVjb3JkIG5leHQgY2x1c3RlciBmb3IgcmVjb3ZlcnkgKi8KLSAgICAgICAgICBpZiAocmVhZCAhPSBHX01BWFVJTlQ2NCkKLSAgICAgICAgICAgIGRlbXV4LT5uZXh0X2NsdXN0ZXJfb2Zmc2V0ID0gZGVtdXgtPmNsdXN0ZXJfb2Zmc2V0ICsgcmVhZDsKLSAgICAgICAgICAvKiBlYXQgY2x1c3RlciBwcmVmaXggKi8KLSAgICAgICAgICBnc3RfbWF0cm9za2FfZGVtdXhfZmx1c2ggKGRlbXV4LCBuZWVkZWQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSVElNRUNPREU6Ci0gICAgICAgIHsKLSAgICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoZGVtdXgsIHJlYWQsICZlYm1sKSk7Ci0gICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKCZlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgIGdvdG8gcGFyc2VfZmFpbGVkOwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiQ2x1c3RlclRpbWVDb2RlOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgIGRlbXV4LT5jbHVzdGVyX3RpbWUgPSBudW07Ci0jaWYgMAotICAgICAgICAgIGlmIChkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXhfd3JpdGVyX2lkID09IC0xKQotICAgICAgICAgICAgICBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoZGVtdXgtPmNvbW1vbi5lbGVtZW50X2luZGV4LAotICAgICAgICAgICAgICAgICAgR1NUX09CSkVDVCAoZGVtdXgpLCAmZGVtdXgtPmNvbW1vbi5lbGVtZW50X2luZGV4X3dyaXRlcl9pZCk7Ci0gICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJhZGRpbmcgYXNzb2NpYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICItPiAlIgotICAgICAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiBmb3Igd3JpdGVyIGlkICVkIiwKLSAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChkZW11eC0+Y2x1c3Rlcl90aW1lKSwgZGVtdXgtPmNsdXN0ZXJfb2Zmc2V0LAotICAgICAgICAgICAgICAgIGRlbXV4LT5jb21tb24uZWxlbWVudF9pbmRleF93cml0ZXJfaWQpOwotICAgICAgICAgICAgZ3N0X2luZGV4X2FkZF9hc3NvY2lhdGlvbiAoZGVtdXgtPmNvbW1vbi5lbGVtZW50X2luZGV4LAotICAgICAgICAgICAgICAgIGRlbXV4LT5jb21tb24uZWxlbWVudF9pbmRleF93cml0ZXJfaWQsCi0gICAgICAgICAgICAgICAgR1NUX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQsCi0gICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBkZW11eC0+Y2x1c3Rlcl90aW1lLAotICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGRlbXV4LT5jbHVzdGVyX29mZnNldCwgTlVMTCk7Ci0gICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQkxPQ0tHUk9VUDoKLSAgICAgICAgICBpZiAoIWdzdF9tYXRyb3NrYV9kZW11eF9zZWVrX2Jsb2NrIChkZW11eCkpCi0gICAgICAgICAgICBnb3RvIHNraXA7Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9kZW11eF90YWtlIChkZW11eCwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICBERUJVR19FTEVNRU5UX1NUQVJUIChkZW11eCwgJmVibWwsICJCbG9ja0dyb3VwIik7Ci0gICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoJmVibWwsICZpZCkpID09IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfcGFyc2VfYmxvY2tncm91cF9vcl9zaW1wbGVibG9jayAoZGVtdXgsCi0gICAgICAgICAgICAgICAgJmVibWwsIGRlbXV4LT5jbHVzdGVyX3RpbWUsIGRlbXV4LT5jbHVzdGVyX29mZnNldCwgRkFMU0UpOwotICAgICAgICAgIH0KLSAgICAgICAgICBERUJVR19FTEVNRU5UX1NUT1AgKGRlbXV4LCAmZWJtbCwgIkJsb2NrR3JvdXAiLCByZXQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TSU1QTEVCTE9DSzoKLSAgICAgICAgICBpZiAoIWdzdF9tYXRyb3NrYV9kZW11eF9zZWVrX2Jsb2NrIChkZW11eCkpCi0gICAgICAgICAgICBnb3RvIHNraXA7Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9kZW11eF90YWtlIChkZW11eCwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICBERUJVR19FTEVNRU5UX1NUQVJUIChkZW11eCwgJmVibWwsICJTaW1wbGVCbG9jayIpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9kZW11eF9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrIChkZW11eCwKLSAgICAgICAgICAgICAgJmVibWwsIGRlbXV4LT5jbHVzdGVyX3RpbWUsIGRlbXV4LT5jbHVzdGVyX29mZnNldCwgVFJVRSk7Ci0gICAgICAgICAgREVCVUdfRUxFTUVOVF9TVE9QIChkZW11eCwgJmVibWwsICJTaW1wbGVCbG9jayIsIHJldCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0FUVEFDSE1FTlRTOgotICAgICAgICAgIGlmICghZGVtdXgtPmNvbW1vbi5hdHRhY2htZW50c19wYXJzZWQpIHsKLSAgICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoZGVtdXgsIHJlYWQsICZlYm1sKSk7Ci0gICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfYXR0YWNobWVudHMgKCZkZW11eC0+Y29tbW9uLAotICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgJmVibWwpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X3NlbmRfdGFncyAoZGVtdXgpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX2RlbXV4X2ZsdXNoIChkZW11eCwgcmVhZCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVEFHUzoKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX2RlbXV4X3Rha2UgKGRlbXV4LCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9tZXRhZGF0YSAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgJmVibWwpOwotICAgICAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF90YWdzIChkZW11eCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJTOgotICAgICAgICAgIGlmICghZGVtdXgtPmNvbW1vbi5jaGFwdGVyc19wYXJzZWQpIHsKLSAgICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoZGVtdXgsIHJlYWQsICZlYm1sKSk7Ci0gICAgICAgICAgICByZXQgPQotICAgICAgICAgICAgICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9jaGFwdGVycyAoJmRlbXV4LT5jb21tb24sICZlYm1sKTsKLQotICAgICAgICAgICAgaWYgKGRlbXV4LT5jb21tb24udG9jKSB7Ci0gICAgICAgICAgICAgIGdzdF9tYXRyb3NrYV9kZW11eF9zZW5kX2V2ZW50IChkZW11eCwKLSAgICAgICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfdG9jIChkZW11eC0+Y29tbW9uLnRvYywgRkFMU0UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfZmx1c2ggKGRlbXV4LCByZWFkKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFRUtIRUFEOgotICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfdGFrZSAoZGVtdXgsIHJlYWQsICZlYm1sKSk7Ci0gICAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2NvbnRlbnRzIChkZW11eCwgJmVibWwpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DVUVTOgotICAgICAgICAgIGlmIChkZW11eC0+Y29tbW9uLmluZGV4X3BhcnNlZCkgewotICAgICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9kZW11eF9mbHVzaCAoZGVtdXgsIHJlYWQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX2RlbXV4X3Rha2UgKGRlbXV4LCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9pbmRleCAoJmRlbXV4LT5jb21tb24sICZlYm1sKTsKLSAgICAgICAgICAvKiBvbmx5IHB1c2ggYmFzZWQ7IGRlbGF5ZWQgaW5kZXggYnVpbGRpbmcgKi8KLSAgICAgICAgICBpZiAocmV0ID09IEdTVF9GTE9XX09LCi0gICAgICAgICAgICAgICYmIGRlbXV4LT5jb21tb24uc3RhdGUgPT0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfU0VFSykgewotICAgICAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgICAgIGV2ZW50ID0gZGVtdXgtPnNlZWtfZXZlbnQ7Ci0gICAgICAgICAgICBkZW11eC0+c2Vla19ldmVudCA9IE5VTEw7Ci0gICAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotCi0gICAgICAgICAgICBnX2Fzc2VydCAoZXZlbnQpOwotICAgICAgICAgICAgLyogdW5saWtlbHkgdG8gZmFpbCwgc2luY2Ugd2UgbWFuYWdlZCB0byBzZWVrIHRvIHRoaXMgcG9pbnQgKi8KLSAgICAgICAgICAgIGlmICghZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zZWVrX2V2ZW50IChkZW11eCwgTlVMTCwgZXZlbnQpKSB7Ci0gICAgICAgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICAgICAgICBnb3RvIHNlZWtfZmFpbGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgICAgICAvKiByZXN1bWUgZGF0YSBoYW5kbGluZywgbWFpbiB0aHJlYWQgY2xlYXIgdG8gc2VlayBhZ2FpbiAqLwotICAgICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChkZW11eCk7Ci0gICAgICAgICAgICBkZW11eC0+Y29tbW9uLnN0YXRlID0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQTsKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9QT1NJVElPTjoKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfUFJFVlNJWkU6Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0VOQ1JZUFRFREJMT0NLOgotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TSUxFTlRUUkFDS1M6Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsCi0gICAgICAgICAgICAgICJTa2lwcGluZyBDbHVzdGVyIHN1YmVsZW1lbnQgMHgleCAtIGlnbm9yaW5nIiwgaWQpOwotICAgICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgICAgICBkZWZhdWx0OgotICAgICAgICBza2lwOgotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAic2tpcHBpbmcgRWxlbWVudCAweCV4IiwgaWQpOwotICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfZGVtdXhfZmx1c2ggKGRlbXV4LCByZWFkKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfUEFSU0UpCi0gICAgZ290byBwYXJzZV9mYWlsZWQ7Ci0KLWV4aXQ6Ci0gIGdzdF9lYm1sX3JlYWRfY2xlYXIgKCZlYm1sKTsKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXJlYWRfZXJyb3I6Ci0gIHsKLSAgICAvKiBzaW1wbHkgZXhpdCwgbWF5YmUgbm90IGVub3VnaCBkYXRhIHlldCAqLwotICAgIC8qIG5vIGVibWwgdG8gY2xlYXIgaWYgcmVhZCBlcnJvciAqLwotICAgIHJldHVybiByZXQ7Ci0gIH0KLXBhcnNlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBwYXJzZSBFbGVtZW50IDB4JXgiLCBpZCkpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotbm90X3N0cmVhbWFibGU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJGaWxlIGxheW91dCBkb2VzIG5vdCBwZXJtaXQgc3RyZWFtaW5nIikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotbm9fdHJhY2tzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiTm8gVHJhY2tzIGVsZW1lbnQgZm91bmQiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBleGl0OwotICB9Ci1pbnZhbGlkX2hlYWRlcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoIkludmFsaWQgaGVhZGVyIikpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotc2Vla19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJGYWlsZWQgdG8gc2VlayIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9kZW11eF9sb29wIChHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdE1hdHJvc2thRGVtdXggKmRlbXV4ID0gR1NUX01BVFJPU0tBX0RFTVVYIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludDMyIGlkOwotICBndWludDY0IGxlbmd0aDsKLSAgZ3VpbnQgbmVlZGVkOwotCi0gIC8qIElmIHdlIGhhdmUgdG8gY2xvc2UgYSBzZWdtZW50LCBzZW5kIGEgbmV3IHNlZ21lbnQgdG8gZG8gdGhpcyBub3cgKi8KLSAgaWYgKEdfTElLRUxZIChkZW11eC0+Y29tbW9uLnN0YXRlID09IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEEpKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGRlbXV4LT5uZXdfc2VnbWVudCkpIHsKLSAgICAgIGdzdF9tYXRyb3NrYV9kZW11eF9zZW5kX2V2ZW50IChkZW11eCwgZGVtdXgtPm5ld19zZWdtZW50KTsKLSAgICAgIGRlbXV4LT5uZXdfc2VnbWVudCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKCZkZW11eC0+Y29tbW9uLAotICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCAmaWQsICZsZW5ndGgsICZuZWVkZWQpOwotICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgIGdvdG8gZW9zOwotICB9IGVsc2UgaWYgKHJldCA9PSBHU1RfRkxPV19GTFVTSElORykgewotICAgIGdvdG8gcGF1c2U7Ci0gIH0gZWxzZSBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgcmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3BhcnNlX2Vycm9yIChkZW11eCk7Ci0KLSAgICAvKiBPbmx5IGhhbmRsZSBFT1MgYXMgbm8gZXJyb3IgaWYgd2UncmUgb3V0c2lkZSB0aGUgc2VnbWVudCBhbHJlYWR5ICovCi0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MgJiYgKGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X2xlbmd0aCAhPSBHX01BWFVJTlQ2NAotICAgICAgICAgICAgJiYgZGVtdXgtPmNvbW1vbi5vZmZzZXQgPj0KLSAgICAgICAgICAgIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0ICsKLSAgICAgICAgICAgIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X2xlbmd0aCkpCi0gICAgICBnb3RvIGVvczsKLSAgICBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIHBhdXNlOwotICAgIGVsc2UKLSAgICAgIHJldHVybjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIk9mZnNldCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIEVsZW1lbnQgaWQgMHgleCwgIgotICAgICAgInNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBuZWVkZWQgJWQiLCBkZW11eC0+Y29tbW9uLm9mZnNldCwgaWQsCi0gICAgICBsZW5ndGgsIG5lZWRlZCk7Ci0KLSAgcmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2lkIChkZW11eCwgaWQsIGxlbmd0aCwgbmVlZGVkKTsKLSAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpCi0gICAgZ290byBlb3M7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBwYXVzZTsKLQotICAvKiBjaGVjayBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIGEgY29uZmlndXJlZCBzZWdtZW50ICovCi0gIGlmIChHX0xJS0VMWSAoZGVtdXgtPmNvbW1vbi5zcmMtPmxlbikpIHsKLSAgICBndWludCBpOwotCi0gICAgZ19hc3NlcnQgKGRlbXV4LT5jb21tb24ubnVtX3N0cmVhbXMgPT0gZGVtdXgtPmNvbW1vbi5zcmMtPmxlbik7Ci0gICAgZm9yIChpID0gMDsgaSA8IGRlbXV4LT5jb21tb24uc3JjLT5sZW47IGkrKykgewotICAgICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQgPSBnX3B0cl9hcnJheV9pbmRleCAoZGVtdXgtPmNvbW1vbi5zcmMsCi0gICAgICAgICAgaSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5wYWQsICJwb3MgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGNvbnRleHQtPnBvcykpOwotICAgICAgaWYgKGNvbnRleHQtPmVvcyA9PSBGQUxTRSkKLSAgICAgICAgZ290byBuZXh0OwotICAgIH0KLQotICAgIEdTVF9JTkZPX09CSkVDVCAoZGVtdXgsICJBbGwgc3RyZWFtcyBhcmUgRU9TIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gZW9zOwotICB9Ci0KLW5leHQ6Ci0gIGlmIChHX1VOTElLRUxZIChkZW11eC0+Y2FjaGVkX2xlbmd0aCA9PSBHX01BWFVJTlQ2NCB8fAotICAgICAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ID49IGRlbXV4LT5jYWNoZWRfbGVuZ3RoKSkgewotICAgIGRlbXV4LT5jYWNoZWRfbGVuZ3RoID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2dldF9sZW5ndGggKCZkZW11eC0+Y29tbW9uKTsKLSAgICBpZiAoZGVtdXgtPmNvbW1vbi5vZmZzZXQgPT0gZGVtdXgtPmNhY2hlZF9sZW5ndGgpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgIlJlYWNoZWQgZW5kIG9mIHN0cmVhbSIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgICAgZ290byBlb3M7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotZW9zOgotICB7Ci0gICAgaWYgKGRlbXV4LT5jb21tb24uc2VnbWVudC5yYXRlIDwgMC4wKSB7Ci0gICAgICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfc2Vla190b19wcmV2aW91c19rZXlmcmFtZSAoZGVtdXgpOwotICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgfQotcGF1c2U6Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqcmVhc29uID0gZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCk7Ci0gICAgZ2Jvb2xlYW4gcHVzaF9lb3MgPSBGQUxTRTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChkZW11eCwgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwgcmVhc29uKTsKLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKGRlbXV4LT5jb21tb24uc2lua3BhZCk7Ci0KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogcGVyZm9ybSBFT1MgbG9naWMgKi8KLQotICAgICAgLyogSWYgd2Ugd2VyZSBpbiB0aGUgaGVhZGVycywgbWFrZSBzdXJlIHdlIHNlbmQgbm8tbW9yZS1wYWRzLgotICAgICAgICAgVGhpcyB3aWxsIGVuc3VyZSBkZWNvZGViaW4gZG9lcyBub3QgZ2V0IHN0dWNrIHRoaW5raW5nCi0gICAgICAgICB0aGUgY2hhaW4gaXMgbm90IGNvbXBsZXRlIHlldCwgYW5kIHdhaXRpbmcgaW5kZWZpbml0ZWx5LiAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKGRlbXV4LT5jb21tb24uc3RhdGUgPT0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfSEVBREVSKSkgewotICAgICAgICBpZiAoZGVtdXgtPmNvbW1vbi5zcmMtPmxlbiA9PSAwKSB7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAgICAgICAoIk5vIHBhZHMgY3JlYXRlZCIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChkZW11eCwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAgICAgICAoIkZhaWxlZCB0byBmaW5pc2ggcmVhZGluZyBoZWFkZXJzIikpOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlQgKGRlbXV4KSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkZW11eC0+Y29tbW9uLnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHsKLSAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotICAgICAgICBHc3RNZXNzYWdlICptc2c7Ci0gICAgICAgIGdpbnQ2NCBzdG9wOwotCi0gICAgICAgIC8qIGZvciBzZWdtZW50IHBsYXliYWNrIHdlIG5lZWQgdG8gcG9zdCB3aGVuIChpbiBzdHJlYW0gdGltZSkKLSAgICAgICAgICogd2Ugc3RvcHBlZCwgdGhpcyBpcyBlaXRoZXIgc3RvcCAod2hlbiBzZXQpIG9yIHRoZSBkdXJhdGlvbi4gKi8KLSAgICAgICAgaWYgKChzdG9wID0gZGVtdXgtPmNvbW1vbi5zZWdtZW50LnN0b3ApID09IC0xKQotICAgICAgICAgIHN0b3AgPSBkZW11eC0+bGFzdF9zdG9wX2VuZDsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJTZW5kaW5nIHNlZ21lbnQgZG9uZSwgYXQgZW5kIG9mIHNlZ21lbnQiKTsKLSAgICAgICAgbXNnID0gZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVCAoZGVtdXgpLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICBzdG9wKTsKLSAgICAgICAgaWYgKGRlbXV4LT5zZWdtZW50X3NlcW51bSkKLSAgICAgICAgICBnc3RfbWVzc2FnZV9zZXRfc2VxbnVtIChtc2csIGRlbXV4LT5zZWdtZW50X3NlcW51bSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKGRlbXV4KSwgbXNnKTsKLQotICAgICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChHU1RfRk9STUFUX1RJTUUsIHN0b3ApOwotICAgICAgICBpZiAoZGVtdXgtPnNlZ21lbnRfc2VxbnVtKQotICAgICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X3NlbmRfZXZlbnQgKGRlbXV4LCBldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX2VvcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGZvciBmYXRhbCBlcnJvcnMgd2UgcG9zdCBhbiBlcnJvciBtZXNzYWdlICovCi0gICAgICBHU1RfRUxFTUVOVF9GTE9XX0VSUk9SIChkZW11eCwgcmV0KTsKLSAgICAgIHB1c2hfZW9zID0gVFJVRTsKLSAgICB9Ci0gICAgaWYgKHB1c2hfZW9zKSB7Ci0gICAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICAgIC8qIHNlbmQgRU9TLCBhbmQgcHJldmVudCBoYW5naW5nIGlmIG5vIHN0cmVhbXMgeWV0ICovCi0gICAgICBHU1RfTE9HX09CSkVDVCAoZGVtdXgsICJTZW5kaW5nIEVPUywgYXQgZW5kIG9mIHN0cmVhbSIpOwotICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgICAgIGlmIChkZW11eC0+c2VnbWVudF9zZXFudW0pCi0gICAgICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChldmVudCwgZGVtdXgtPnNlZ21lbnRfc2VxbnVtKTsKLSAgICAgIGlmICghZ3N0X21hdHJvc2thX2RlbXV4X3NlbmRfZXZlbnQgKGRlbXV4LCBldmVudCkgJiYKLSAgICAgICAgICAocmV0ID09IEdTVF9GTE9XX0VPUykpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAgICAgKE5VTEwpLCAoImdvdCBlb3MgYnV0IG5vIHN0cmVhbXMgKHlldCkiKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotfQotCi0vKgotICogQ3JlYXRlIGFuZCBwdXNoIGEgZmx1c2hpbmcgc2VlayBldmVudCB1cHN0cmVhbQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXBlcmZvcm1fc2Vla190b19vZmZzZXQgKEdzdE1hdHJvc2thRGVtdXggKiBkZW11eCwgZ2RvdWJsZSByYXRlLCBndWludDY0IG9mZnNldCwKLSAgICBndWludDMyIHNlcW51bSwgR3N0U2Vla0ZsYWdzIGZsYWdzKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlcyA9IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgZXZlbnQgPQotICAgICAgZ3N0X2V2ZW50X25ld19zZWVrIChyYXRlLCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgZmxhZ3MgfCBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBvZmZzZXQsIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOwotICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZXZlbnQsIHNlcW51bSk7Ci0KLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChkZW11eC0+Y29tbW9uLnNpbmtwYWQsIGV2ZW50KTsKLQotICAvKiBzZWdtZW50IGV2ZW50IHdpbGwgdXBkYXRlIG9mZnNldCAqLwotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RNYXRyb3NrYURlbXV4ICpkZW11eCA9IEdTVF9NQVRST1NLQV9ERU1VWCAocGFyZW50KTsKLSAgZ3VpbnQgYXZhaWxhYmxlOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludCBuZWVkZWQgPSAwOwotICBndWludDMyIGlkOwotICBndWludDY0IGxlbmd0aDsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiZ290IERJU0NPTlQiKTsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAoZGVtdXgtPmNvbW1vbi5hZGFwdGVyKTsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVzZXRfc3RyZWFtcyAoJmRlbXV4LT5jb21tb24sCi0gICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEZBTFNFKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICB9Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoZGVtdXgtPmNvbW1vbi5hZGFwdGVyLCBidWZmZXIpOwotICBidWZmZXIgPSBOVUxMOwotCi1uZXh0OgotICBhdmFpbGFibGUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKGRlbXV4LT5jb21tb24uYWRhcHRlcik7Ci0KLSAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1c2ggKCZkZW11eC0+Y29tbW9uLAotICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCAmaWQsICZsZW5ndGgsICZuZWVkZWQpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19FT1MpKSB7Ci0gICAgaWYgKGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X2xlbmd0aCAhPSBHX01BWFVJTlQ2NAotICAgICAgICAmJiBkZW11eC0+Y29tbW9uLm9mZnNldCA+PQotICAgICAgICBkZW11eC0+Y29tbW9uLmVibWxfc2VnbWVudF9zdGFydCArIGRlbXV4LT5jb21tb24uZWJtbF9zZWdtZW50X2xlbmd0aCkKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlbXV4LCAiT2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgRWxlbWVudCBpZCAweCV4LCAiCi0gICAgICAic2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG5lZWRlZCAlZCwgYXZhaWxhYmxlICVkIiwKLSAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0LCBpZCwgbGVuZ3RoLCBuZWVkZWQsIGF2YWlsYWJsZSk7Ci0KLSAgaWYgKG5lZWRlZCA+IGF2YWlsYWJsZSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgcmV0ID0gZ3N0X21hdHJvc2thX2RlbXV4X3BhcnNlX2lkIChkZW11eCwgaWQsIGxlbmd0aCwgbmVlZGVkKTsKLSAgaWYgKHJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAvKiBuZWVkIG1vcmUgZGF0YSAqLwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfSBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICByZXR1cm4gcmV0OwotICB9IGVsc2UKLSAgICBnb3RvIG5leHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX2RlbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RNYXRyb3NrYURlbXV4ICpkZW11eCA9IEdTVF9NQVRST1NLQV9ERU1VWCAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICJoYXZlIGV2ZW50IHR5cGUgJXM6ICVwIG9uIHNpbmsgcGFkIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50OwotCi0gICAgICAvKiBzb21lIGRlYnVnIG91dHB1dCAqLwotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7Ci0gICAgICAvKiBGSVhNRTogZG8gd2UgbmVlZCB0byB1cGRhdGUgc2VnbWVudCBiYXNlIGhlcmUgKGxpa2UgYWNjdW0gaW4gMC4xMCk/ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwKLSAgICAgICAgICAicmVjZWl2ZWQgZm9ybWF0ICVkIHNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULCBzZWdtZW50LT5mb3JtYXQsCi0gICAgICAgICAgc2VnbWVudCk7Ci0KLSAgICAgIGlmIChkZW11eC0+Y29tbW9uLnN0YXRlIDwgR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgInN0aWxsIHN0YXJ0aW5nIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICAgIH0KLQotICAgICAgLyogd2Ugb25seSBleHBlY3QgYSBCWVRFIHNlZ21lbnQsIGUuZy4gZm9sbG93aW5nIGEgc2VlayAqLwotICAgICAgaWYgKHNlZ21lbnQtPmZvcm1hdCAhPSBHU1RfRk9STUFUX0JZVEVTKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAidW5zdXBwb3J0ZWQgc2VnbWVudCBmb3JtYXQsIGlnbm9yaW5nIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJjbGVhcmluZyBzZWdtZW50IHN0YXRlIik7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgIC8qIGNsZWFyIGN1cnJlbnQgc2VnbWVudCBsZWZ0b3ZlciAqLwotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGRlbXV4LT5jb21tb24uYWRhcHRlcik7Ci0gICAgICAvKiBhbmQgc29tZSBzdHJlYW1pbmcgc2V0dXAgKi8KLSAgICAgIGRlbXV4LT5jb21tb24ub2Zmc2V0ID0gc2VnbWVudC0+c3RhcnQ7Ci0gICAgICAvKiBhY2N1bXVsYXRlIGJhc2UgYmFzZWQgb24gY3VycmVudCBwb3NpdGlvbiAqLwotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkZW11eC0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24pKQotICAgICAgICBkZW11eC0+Y29tbW9uLnNlZ21lbnQuYmFzZSArPQotICAgICAgICAgICAgKE1BWCAoZGVtdXgtPmNvbW1vbi5zZWdtZW50LnBvc2l0aW9uLCBkZW11eC0+c3RyZWFtX3N0YXJ0X3RpbWUpCi0gICAgICAgICAgICAtIGRlbXV4LT5zdHJlYW1fc3RhcnRfdGltZSkgLyBmYWJzIChkZW11eC0+Y29tbW9uLnNlZ21lbnQucmF0ZSk7Ci0gICAgICAvKiBkbyBub3Qga25vdyB3aGVyZSB3ZSBhcmU7Ci0gICAgICAgKiBuZWVkIHRvIGNvbWUgYWNyb3NzIGEgY2x1c3RlciBhbmQgZ2VuZXJhdGUgc2VnbWVudCAqLwotICAgICAgZGVtdXgtPmNvbW1vbi5zZWdtZW50LnBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIGRlbXV4LT5jbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgZGVtdXgtPmNsdXN0ZXJfb2Zmc2V0ID0gMDsKLSAgICAgIGRlbXV4LT5uZWVkX3NlZ21lbnQgPSBUUlVFOwotICAgICAgZGVtdXgtPnNlZ21lbnRfc2VxbnVtID0gZ3N0X2V2ZW50X2dldF9zZXFudW0gKGV2ZW50KTsKLSAgICAgIC8qIGJ1dCBrZWVwIHNvbWUgb2YgdGhlIHVwc3RyZWFtIHNlZ21lbnQgKi8KLSAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5yYXRlID0gc2VnbWVudC0+cmF0ZTsKLSAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5mbGFncyA9IHNlZ21lbnQtPmZsYWdzOwotICAgICAgLyogYWxzbyBjaGVjayBpZiBuZWVkIHRvIGtlZXAgc29tZSBvZiB0aGUgcmVxdWVzdGVkIHNlZWsgcG9zaXRpb24gKi8KLSAgICAgIGlmIChkZW11eC0+c2Vla19vZmZzZXQgPT0gc2VnbWVudC0+c3RhcnQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJwb3NpdGlvbiBtYXRjaGVzIHJlcXVlc3RlZCBzZWVrIik7Ci0gICAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5wb3NpdGlvbiA9IGRlbXV4LT5yZXF1ZXN0ZWRfc2Vla190aW1lOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJ1bmV4cGVjdGVkIHNlZ21lbnQgcG9zaXRpb24iKTsKLSAgICAgIH0KLSAgICAgIGRlbXV4LT5yZXF1ZXN0ZWRfc2Vla190aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIGRlbXV4LT5zZWVrX29mZnNldCA9IC0xOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICBleGl0OgotICAgICAgLyogY2hhaW4gd2lsbCBzZW5kIGluaXRpYWwgc2VnbWVudCBhZnRlciBwYWRzIGhhdmUgYmVlbiBhZGRlZCwKLSAgICAgICAqIG9yIG90aGVyd2lzZSBjb21lIHVwIHdpdGggb25lICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImVhdGluZyBldmVudCIpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICBpZiAoZGVtdXgtPmNvbW1vbi5zdGF0ZSAhPSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9EQVRBKSB7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgICAgICAoTlVMTCksICgiZ290IGVvcyBhbmQgZGlkbid0IHJlY2VpdmUgYSBjb21wbGV0ZSBoZWFkZXIgb2JqZWN0IikpOwotICAgICAgfSBlbHNlIGlmIChkZW11eC0+Y29tbW9uLm51bV9zdHJlYW1zID09IDApIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlbXV4LCBTVFJFQU0sIERFTVVYLAotICAgICAgICAgICAgKE5VTEwpLCAoImdvdCBlb3MgYnV0IG5vIHN0cmVhbXMgKHlldCkiKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfbWF0cm9za2FfZGVtdXhfc2VuZF9ldmVudCAoZGVtdXgsIGV2ZW50KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgIHsKLSAgICAgIGd1aW50NjQgZHVyOwotCi0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAoZGVtdXgtPmNvbW1vbi5hZGFwdGVyKTsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoZGVtdXgpOwotICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3Jlc2V0X3N0cmVhbXMgKCZkZW11eC0+Y29tbW9uLAotICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIFRSVUUpOwotICAgICAgZ3N0X2Zsb3dfY29tYmluZXJfcmVzZXQgKGRlbXV4LT5mbG93Y29tYmluZXIpOwotICAgICAgZHVyID0gZGVtdXgtPmNvbW1vbi5zZWdtZW50LmR1cmF0aW9uOwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmRlbXV4LT5jb21tb24uc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgICAgIGRlbXV4LT5jb21tb24uc2VnbWVudC5kdXJhdGlvbiA9IGR1cjsKLSAgICAgIGRlbXV4LT5jbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgZGVtdXgtPmNsdXN0ZXJfb2Zmc2V0ID0gMDsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RNYXRyb3NrYURlbXV4ICpkZW11eCA9IEdTVF9NQVRST1NLQV9ERU1VWCAocGFyZW50KTsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBnYm9vbGVhbiBwdWxsX21vZGUgPSBGQUxTRTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2NoZWR1bGluZyAoKTsKLQotICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzaW5rcGFkLCBxdWVyeSkpCi0gICAgcHVsbF9tb2RlID0gZ3N0X3F1ZXJ5X2hhc19zY2hlZHVsaW5nX21vZGVfd2l0aF9mbGFncyAocXVlcnksCi0gICAgICAgIEdTVF9QQURfTU9ERV9QVUxMLCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFKTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLQotICBpZiAocHVsbF9tb2RlKSB7Ci0gICAgR1NUX0RFQlVHICgiZ29pbmcgdG8gcHVsbCBtb2RlIik7Ci0gICAgZGVtdXgtPnN0cmVhbWluZyA9IEZBTFNFOwotICAgIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHNpbmtwYWQsIEdTVF9QQURfTU9ERV9QVUxMLCBUUlVFKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUcgKCJnb2luZyB0byBwdXNoIChzdHJlYW1pbmcpIG1vZGUiKTsKLSAgICBkZW11eC0+c3RyZWFtaW5nID0gVFJVRTsKLSAgICByZXR1cm4gZ3N0X3BhZF9hY3RpdmF0ZV9tb2RlIChzaW5rcGFkLCBHU1RfUEFEX01PREVfUFVTSCwgVFJVRSk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfZGVtdXhfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIC8qIGlmIHdlIGhhdmUgYSBzY2hlZHVsZXIgd2UgY2FuIHN0YXJ0IHRoZSB0YXNrICovCi0gICAgICAgIGdzdF9wYWRfc3RhcnRfdGFzayAoc2lua3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X21hdHJvc2thX2RlbXV4X2xvb3AsCi0gICAgICAgICAgICBzaW5rcGFkLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9wYWRfc3RvcF90YXNrIChzaW5rcGFkKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9tYXRyb3NrYV9kZW11eF92aWRlb19jYXBzIChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICoKLSAgICB2aWRlb2NvbnRleHQsIGNvbnN0IGdjaGFyICogY29kZWNfaWQsIGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgZ2NoYXIgKiogY29kZWNfbmFtZSwgZ3VpbnQzMiAqIHJpZmZfZm91cmNjKQotewotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqKSB2aWRlb2NvbnRleHQ7Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotCi0gIGdfYXNzZXJ0ICh2aWRlb2NvbnRleHQgIT0gTlVMTCk7Ci0gIGdfYXNzZXJ0IChjb2RlY19uYW1lICE9IE5VTEwpOwotCi0gIGlmIChyaWZmX2ZvdXJjYykKLSAgICAqcmlmZl9mb3VyY2MgPSAwOwotCi0gIC8qIFRPRE86IGNoZWNrIGlmIHdlIGhhdmUgYWxsIGNvZGVjIHR5cGVzIGZyb20gbWF0cm9za2EtaWRzLmgKLSAgICogICAgICAgY2hlY2sgaWYgd2UgaGF2ZSB0byBkbyBtb3JlIHNwZWNpYWwgdGhpbmdzIHdpdGggY29kZWNfcHJpdmF0ZQotICAgKgotICAgKiBBZGQgc3VwcG9ydCBmb3IKLSAgICogIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19RVUlDS1RJTUUKLSAgICogIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19TTk9XCi0gICAqLwotCi0gIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1ZGV19GT1VSQ0MpKSB7Ci0gICAgZ3N0X3JpZmZfc3RyZl92aWRzICp2aWRzID0gTlVMTDsKLQotICAgIGlmIChkYXRhKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0KLSAgICAgIHZpZHMgPSAoZ3N0X3JpZmZfc3RyZl92aWRzICopIGRhdGE7Ci0KLSAgICAgIC8qIGFzc3VyZSBzaXplIGlzIGJpZyBlbm91Z2ggKi8KLSAgICAgIGlmIChzaXplIDwgMjQpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJUb28gc21hbGwgQklUTUFQSU5GT0hFQURFUiAoJWQgYnl0ZXMpIiwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgfQotICAgICAgaWYgKHNpemUgPCBzaXplb2YgKGdzdF9yaWZmX3N0cmZfdmlkcykpIHsKLSAgICAgICAgdmlkcyA9IGdfbmV3IChnc3RfcmlmZl9zdHJmX3ZpZHMsIDEpOwotICAgICAgICBtZW1jcHkgKHZpZHMsIGRhdGEsIHNpemUpOwotICAgICAgfQotCi0gICAgICBjb250ZXh0LT5kdHNfb25seSA9IFRSVUU7IC8qIFZGVyBmaWxlcyBvbmx5IHN0b3JlIERUUyAqLwotCi0gICAgICAvKiBsaXR0bGUtZW5kaWFuIC0+IGJ5dGUtb3JkZXIgKi8KLSAgICAgIHZpZHMtPnNpemUgPSBHVUlOVDMyX0ZST01fTEUgKHZpZHMtPnNpemUpOwotICAgICAgdmlkcy0+d2lkdGggPSBHVUlOVDMyX0ZST01fTEUgKHZpZHMtPndpZHRoKTsKLSAgICAgIHZpZHMtPmhlaWdodCA9IEdVSU5UMzJfRlJPTV9MRSAodmlkcy0+aGVpZ2h0KTsKLSAgICAgIHZpZHMtPnBsYW5lcyA9IEdVSU5UMTZfRlJPTV9MRSAodmlkcy0+cGxhbmVzKTsKLSAgICAgIHZpZHMtPmJpdF9jbnQgPSBHVUlOVDE2X0ZST01fTEUgKHZpZHMtPmJpdF9jbnQpOwotICAgICAgdmlkcy0+Y29tcHJlc3Npb24gPSBHVUlOVDMyX0ZST01fTEUgKHZpZHMtPmNvbXByZXNzaW9uKTsKLSAgICAgIHZpZHMtPmltYWdlX3NpemUgPSBHVUlOVDMyX0ZST01fTEUgKHZpZHMtPmltYWdlX3NpemUpOwotICAgICAgdmlkcy0+eHBlbHNfbWV0ZXIgPSBHVUlOVDMyX0ZST01fTEUgKHZpZHMtPnhwZWxzX21ldGVyKTsKLSAgICAgIHZpZHMtPnlwZWxzX21ldGVyID0gR1VJTlQzMl9GUk9NX0xFICh2aWRzLT55cGVsc19tZXRlcik7Ci0gICAgICB2aWRzLT5udW1fY29sb3JzID0gR1VJTlQzMl9GUk9NX0xFICh2aWRzLT5udW1fY29sb3JzKTsKLSAgICAgIHZpZHMtPmltcF9jb2xvcnMgPSBHVUlOVDMyX0ZST01fTEUgKHZpZHMtPmltcF9jb2xvcnMpOwotCi0gICAgICBpZiAoc2l6ZSA+IHNpemVvZiAoZ3N0X3JpZmZfc3RyZl92aWRzKSkgeyAvKiBzb21lIGV4dHJhX2RhdGEgKi8KLSAgICAgICAgZ3NpemUgb2Zmc2V0ID0gc2l6ZW9mIChnc3RfcmlmZl9zdHJmX3ZpZHMpOwotCi0gICAgICAgIGJ1ZiA9Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21lbWR1cCAoKGd1aW50OCAqKSB2aWRzICsgb2Zmc2V0LAotICAgICAgICAgICAgICAgIHNpemUgLSBvZmZzZXQpLCBzaXplIC0gb2Zmc2V0KTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJpZmZfZm91cmNjKQotICAgICAgICAqcmlmZl9mb3VyY2MgPSB2aWRzLT5jb21wcmVzc2lvbjsKLQotICAgICAgY2FwcyA9IGdzdF9yaWZmX2NyZWF0ZV92aWRlb19jYXBzICh2aWRzLT5jb21wcmVzc2lvbiwgTlVMTCwgdmlkcywKLSAgICAgICAgICBidWYsIE5VTEwsIGNvZGVjX25hbWUpOwotCi0gICAgICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiVW5oYW5kbGVkIFJJRkYgZm91cmNjICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh2aWRzLT5jb21wcmVzc2lvbikpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIEdzdFN0YXRpY0NhcHMgaW50cmFfY2FwcyA9IEdTVF9TVEFUSUNfQ0FQUyAoImltYWdlL2pwZWc7ICIKLSAgICAgICAgICAgICJ2aWRlby94LXJhdzsgaW1hZ2UvcG5nOyB2aWRlby94LWR2OyB2aWRlby94LWh1ZmZ5dXY7IHZpZGVvL3gtZmZ2OyAiCi0gICAgICAgICAgICAidmlkZW8veC1jb21wcmVzc2VkLXl1diIpOwotICAgICAgICBjb250ZXh0LT5pbnRyYV9vbmx5ID0KLSAgICAgICAgICAgIGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZpbnRyYV9jYXBzKSwgY2Fwcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChidWYpCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgICAgIGlmICh2aWRzICE9IChnc3RfcmlmZl9zdHJmX3ZpZHMgKikgZGF0YSkKLSAgICAgICAgZ19mcmVlICh2aWRzKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19VTkNPTVBSRVNTRUQpKSB7Ci0gICAgR3N0VmlkZW9JbmZvIGluZm87Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotCi0gICAgZ3N0X3ZpZGVvX2luZm9faW5pdCAoJmluZm8pOwotICAgIHN3aXRjaCAodmlkZW9jb250ZXh0LT5mb3VyY2MpIHsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnSScsICc0JywgJzInLCAnMCcpOgotICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0k0MjA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdZJywgJ1UnLCAnWScsICcyJyk6Ci0gICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfWVVZMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ1knLCAnVicsICcxJywgJzInKToKLSAgICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnVScsICdZJywgJ1YnLCAnWScpOgotICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1VZVlk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUFLRV9GT1VSQ0MgKCdBJywgJ1knLCAnVScsICdWJyk6Ci0gICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfQVlVVjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ1knLCAnOCcsICcwJywgJzAnKToKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnWScsICc4JywgJyAnLCAnICcpOgotICAgICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0dSQVk4OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnUicsICdHJywgJ0InLCAyNCk6Ci0gICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfUkdCOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnQicsICdHJywgJ1InLCAyNCk6Ci0gICAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfQkdSOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVRyAoIlVua25vd24gZm91cmNjICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh2aWRlb2NvbnRleHQtPmZvdXJjYykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5pbnRyYV9vbmx5ID0gVFJVRTsKLQotICAgIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLCBmb3JtYXQsIHZpZGVvY29udGV4dC0+cGl4ZWxfd2lkdGgsCi0gICAgICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0KTsKLSAgICBjYXBzID0gZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcyAoJmluZm8pOwotICAgICpjb2RlY19uYW1lID0gZ3N0X3BiX3V0aWxzX2dldF9jb2RlY19kZXNjcmlwdGlvbiAoY2Fwcyk7Ci0gICAgY29udGV4dC0+YWxpZ25tZW50ID0gMzI7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NUEVHNF9TUCkpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZGl2eCIsCi0gICAgICAgICJkaXZ4dmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQsIE5VTEwpOwotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXAgKCJNUEVHLTQgc2ltcGxlIHByb2ZpbGUiKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUc0X0FTUCkgfHwKLSAgICAgICFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFRzRfQVApKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby9tcGVnIiwKLSAgICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNCwKLSAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgaWYgKGRhdGEpIHsKLSAgICAgIEdzdEJ1ZmZlciAqcHJpdjsKLQotICAgICAgcHJpdiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChkYXRhLCBzaXplKSwgc2l6ZSk7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgcHJpdiwgTlVMTCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChwcml2KTsKLQotICAgICAgZ3N0X2NvZGVjX3V0aWxzX21wZWc0dmlkZW9fY2Fwc19zZXRfbGV2ZWxfYW5kX3Byb2ZpbGUgKGNhcHMsIGRhdGEsIHNpemUpOwotICAgIH0KLSAgICBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NUEVHNF9BU1ApKQotICAgICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cCAoIk1QRUctNCBhZHZhbmNlZCBzaW1wbGUgcHJvZmlsZSIpOwotICAgIGVsc2UKLSAgICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXAgKCJNUEVHLTQgYWR2YW5jZWQgcHJvZmlsZSIpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVNNUEVHNFYzKSkgewotI2lmIDAKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2Z1bGwgKGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8veC1kaXZ4IiwKLSAgICAgICAgICAgICJkaXZ4dmVyc2lvbiIsIEdfVFlQRV9JTlQsIDMsIE5VTEwpLAotICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtbXNtcGVnIiwKLSAgICAgICAgICAgICJtc21wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNDMsIE5VTEwpLCBOVUxMKTsKLSNlbmRpZgotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1tc21wZWciLAotICAgICAgICAibXNtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQzLCBOVUxMKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwICgiTWljcm9zb2Z0IE1QRUctNCB2LjMiKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUcxKSB8fAotICAgICAgIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NUEVHMikpIHsKLSAgICBnaW50IG1wZWd2ZXJzaW9uOwotCi0gICAgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFRzEpKQotICAgICAgbXBlZ3ZlcnNpb24gPSAxOwotICAgIGVsc2UKLSAgICAgIG1wZWd2ZXJzaW9uID0gMjsKLQotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZyIsCi0gICAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsCi0gICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIG1wZWd2ZXJzaW9uLCBOVUxMKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIk1QRUctJWQgdmlkZW8iLCBtcGVndmVyc2lvbik7Ci0gICAgY29udGV4dC0+cG9zdHByb2Nlc3NfZnJhbWUgPSBnc3RfbWF0cm9za2FfZGVtdXhfYWRkX21wZWdfc2VxX2hlYWRlcjsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01KUEVHKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiaW1hZ2UvanBlZyIpOwotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXAgKCJNb3Rpb24tSlBFRyIpOwotICAgIGNvbnRleHQtPmludHJhX29ubHkgPSBUUlVFOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFRzRfQVZDKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1oMjY0Iik7Ci0gICAgaWYgKGRhdGEpIHsKLSAgICAgIEdzdEJ1ZmZlciAqcHJpdjsKLQotICAgICAgLyogRmlyc3QgYnl0ZSBpcyB0aGUgdmVyc2lvbiwgc2Vjb25kIGlzIHRoZSBwcm9maWxlIGluZGljYXRpb24sIGFuZCB0aGlyZAotICAgICAgICogaXMgdGhlIDUgY29udHJhaW50X3NldF9mbGFncyBhbmQgMyByZXNlcnZlZCBiaXRzLiBGb3VydGggYnl0ZSBpcyB0aGUKLSAgICAgICAqIGxldmVsIGluZGljYXRpb24uICovCi0gICAgICBnc3RfY29kZWNfdXRpbHNfaDI2NF9jYXBzX3NldF9sZXZlbF9hbmRfcHJvZmlsZSAoY2FwcywgZGF0YSArIDEsCi0gICAgICAgICAgc2l6ZSAtIDEpOwotCi0gICAgICBwcml2ID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tZW1kdXAgKGRhdGEsIHNpemUpLCBzaXplKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBwcml2LCBOVUxMKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByaXYpOwotCi0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJhdmMiLAotICAgICAgICAgICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJObyBjb2RlYyBkYXRhIGZvdW5kLCBhc3N1bWluZyBvdXRwdXQgaXMgYnl0ZS1zdHJlYW0iKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImJ5dGUtc3RyZWFtIiwKLSAgICAgICAgICBOVUxMKTsKLSAgICB9Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cCAoIkgyNjQiKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUdIX0hFVkMpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LWgyNjUiKTsKLSAgICBpZiAoZGF0YSkgewotICAgICAgR3N0QnVmZmVyICpwcml2OwotCi0gICAgICBnc3RfY29kZWNfdXRpbHNfaDI2NV9jYXBzX3NldF9sZXZlbF90aWVyX2FuZF9wcm9maWxlIChjYXBzLCBkYXRhICsgMSwKLSAgICAgICAgICBzaXplIC0gMSk7Ci0KLSAgICAgIHByaXYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21lbWR1cCAoZGF0YSwgc2l6ZSksIHNpemUpOwotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIHByaXYsIE5VTEwpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocHJpdik7Ci0KLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImh2YzEiLAotICAgICAgICAgICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCAiYXUiLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJObyBjb2RlYyBkYXRhIGZvdW5kLCBhc3N1bWluZyBvdXRwdXQgaXMgYnl0ZS1zdHJlYW0iKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImJ5dGUtc3RyZWFtIiwKLSAgICAgICAgICBOVUxMKTsKLSAgICB9Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cCAoIkhFVkMiKTsKLSAgfSBlbHNlIGlmICgoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19SRUFMVklERU8xKSkgfHwKLSAgICAgICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1JFQUxWSURFTzIpKSB8fAotICAgICAgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPMykpIHx8Ci0gICAgICAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19SRUFMVklERU80KSkpIHsKLSAgICBnaW50IHJtdmVyc2lvbiA9IC0xOwotCi0gICAgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPMSkpCi0gICAgICBybXZlcnNpb24gPSAxOwotICAgIGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPMikpCi0gICAgICBybXZlcnNpb24gPSAyOwotICAgIGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPMykpCi0gICAgICBybXZlcnNpb24gPSAzOwotICAgIGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPNCkpCi0gICAgICBybXZlcnNpb24gPSA0OwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXBuLXJlYWx2aWRlbyIsCi0gICAgICAgICJybXZlcnNpb24iLCBHX1RZUEVfSU5ULCBybXZlcnNpb24sIE5VTEwpOwotICAgIEdTVF9ERUJVRyAoImRhdGE6JXAsIHNpemU6MHgleCIsIGRhdGEsIHNpemUpOwotICAgIC8qIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgZXh0cmFkYXRhICEgKi8KLSAgICBpZiAoZGF0YSAmJiAoc2l6ZSA+PSAweDIyKSkgewotICAgICAgR3N0QnVmZmVyICpwcml2OwotICAgICAgZ3VpbnQgcmZvcm1hdDsKLSAgICAgIGd1aW50IHN1YmZvcm1hdDsKLQotICAgICAgc3ViZm9ybWF0ID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhICsgMHgxYSk7Ci0gICAgICByZm9ybWF0ID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhICsgMHgxZSk7Ci0KLSAgICAgIHByaXYgPQotICAgICAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChkYXRhICsgMHgxYSwgc2l6ZSAtIDB4MWEpLAotICAgICAgICAgIHNpemUgLSAweDFhKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBwcml2LCAiZm9ybWF0IiwKLSAgICAgICAgICBHX1RZUEVfSU5ULCByZm9ybWF0LCAic3ViZm9ybWF0IiwgR19UWVBFX0lOVCwgc3ViZm9ybWF0LCBOVUxMKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByaXYpOwotCi0gICAgfQotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiUmVhbFZpZGVvICVkLjAiLCBybXZlcnNpb24pOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVEhFT1JBKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC10aGVvcmEiKTsKLSAgICBjb250ZXh0LT5zdHJlYW1faGVhZGVycyA9Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV94aXBoX3N0cmVhbV9oZWFkZXJzIChjb250ZXh0LT5jb2RlY19wcml2LAotICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUpOwotICAgIC8qIEZJWE1FOiBtYXJrIHN0cmVhbSBhcyBicm9rZW4gYW5kIHNraXAgaWYgdGhlcmUgYXJlIG5vIHN0cmVhbSBoZWFkZXJzICovCi0gICAgY29udGV4dC0+c2VuZF9zdHJlYW1faGVhZGVycyA9IFRSVUU7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19ESVJBQykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3gtZGlyYWMiKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIkRpcmFjIik7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19WUDgpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LXZwOCIpOwotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiT24yIFZQOCIpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVlA5KSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC12cDkiKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoIk9uMiBWUDkiKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1BST1JFUykpIHsKLSAgICBndWludDMyIGZvdXJjYzsKLSAgICBjb25zdCBnY2hhciAqdmFyaWFudCwgKnZhcmlhbnRfZGVzY3IgPSAiIjsKLQotICAgIC8qIEV4cGVjdCBhIGZvdXJjYyBpbiB0aGUgY29kZWMgcHJpdmF0ZSBkYXRhICovCi0gICAgaWYgKCFkYXRhIHx8IHNpemUgPCA0KSB7Ci0gICAgICBHU1RfV0FSTklORyAoIk5vIG9yIHRvbyBzbWFsbCBQUk9SRVNTIGZvdXJjYyAoJWQgYnl0ZXMpIiwgc2l6ZSk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBmb3VyY2MgPSBHU1RfU1RSX0ZPVVJDQyAoZGF0YSk7Ci0gICAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnYScsICdwJywgJ2MnLCAncycpOgotICAgICAgICB2YXJpYW50X2Rlc2NyID0gIiA0OjI6MiBMVCI7Ci0gICAgICAgIHZhcmlhbnQgPSAibHQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnYScsICdwJywgJ2MnLCAnaCcpOgotICAgICAgICB2YXJpYW50ID0gImhxIjsKLSAgICAgICAgdmFyaWFudF9kZXNjciA9ICIgNDoyOjIgSFEiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BS0VfRk9VUkNDICgnYScsICdwJywgJzQnLCAnaCcpOgotICAgICAgICB2YXJpYW50ID0gIjQ0NDQiOwotICAgICAgICB2YXJpYW50X2Rlc2NyID0gIiA0OjQ6NDo0IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2EnLCAncCcsICdjJywgJ28nKToKLSAgICAgICAgdmFyaWFudCA9ICJwcm94eSI7Ci0gICAgICAgIHZhcmlhbnRfZGVzY3IgPSAiIDQ6MjoyIFByb3h5IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQUtFX0ZPVVJDQyAoJ2EnLCAncCcsICdjJywgJ24nKToKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHZhcmlhbnQgPSAic3RhbmRhcmQiOwotICAgICAgICB2YXJpYW50X2Rlc2NyID0gIiA0OjI6MiBTRCI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEdTVF9MT0cgKCJQcm9yZXMgdmlkZW8sIGNvZGVjIGZvdXJjYyAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3VyY2MpKTsKLQotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1wcm9yZXMiLAotICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgdmFyaWFudCwgTlVMTCk7Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJBcHBsZSBQcm9SZXMlcyIsIHZhcmlhbnRfZGVzY3IpOwotICAgIGNvbnRleHQtPnBvc3Rwcm9jZXNzX2ZyYW1lID0gZ3N0X21hdHJvc2thX2RlbXV4X2FkZF9wcm9yZXNfaGVhZGVyOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiVW5rbm93biBjb2RlYyAnJXMnLCBjYW5ub3QgYnVpbGQgQ2FwcyIsIGNvZGVjX2lkKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGlmIChjYXBzICE9IE5VTEwpIHsKLSAgICBpbnQgaTsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7IGkrKykgewotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0KLSAgICAgIC8qIEZJWE1FOiB1c2UgdGhlIHJlYWwgdW5pdCBoZXJlISAqLwotICAgICAgR1NUX0RFQlVHICgidmlkZW8gc2l6ZSAlZHglZCwgdGFyZ2V0IGRpc3BsYXkgc2l6ZSAlZHglZCAoYW55IHVuaXQpIiwKLSAgICAgICAgICB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoLAotICAgICAgICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0LAotICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCwgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCk7Ci0KLSAgICAgIC8qIHBpeGVsIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSB3IGFuZCBoIG9mIHRoZSB2aWRlbyBpbiBwaXhlbHMgKi8KLSAgICAgIGlmICh2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoID4gMCAmJiB2aWRlb2NvbnRleHQtPnBpeGVsX2hlaWdodCA+IDApIHsKLSAgICAgICAgZ2ludCB3ID0gdmlkZW9jb250ZXh0LT5waXhlbF93aWR0aDsKLSAgICAgICAgZ2ludCBoID0gdmlkZW9jb250ZXh0LT5waXhlbF9oZWlnaHQ7Ci0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHcsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBoLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA+IDAgfHwgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCA+IDApIHsKLSAgICAgICAgaW50IG4sIGQ7Ci0KLSAgICAgICAgaWYgKHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA8PSAwKQotICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA9IHZpZGVvY29udGV4dC0+cGl4ZWxfd2lkdGg7Ci0gICAgICAgIGlmICh2aWRlb2NvbnRleHQtPmRpc3BsYXlfaGVpZ2h0IDw9IDApCi0gICAgICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCA9IHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0OwotCi0gICAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIHVzaW5nIHRoZSBkaXNwbGF5IGFuZCBwaXhlbCB3L2ggKi8KLSAgICAgICAgbiA9IHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCAqIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0OwotICAgICAgICBkID0gdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCAqIHZpZGVvY29udGV4dC0+cGl4ZWxfd2lkdGg7Ci0gICAgICAgIEdTVF9ERUJVRyAoInNldHRpbmcgUEFSIHRvICVkLyVkIiwgbiwgZCk7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJwaXhlbC1hc3BlY3QtcmF0aW8iLAotICAgICAgICAgICAgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICAgICAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfd2lkdGggKiB2aWRlb2NvbnRleHQtPnBpeGVsX2hlaWdodCwKLSAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgKiB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHZpZGVvY29udGV4dC0+ZGVmYXVsdF9mcHMgPiAwLjApIHsKLSAgICAgICAgZ2ludCBmcHNfbiwgZnBzX2Q7Ci0KLSAgICAgICAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uICh2aWRlb2NvbnRleHQtPmRlZmF1bHRfZnBzLCAmZnBzX24sICZmcHNfZCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHICgidXNpbmcgZGVmYXVsdCBmcHMgJWQvJWQiLCBmcHNfbiwgZnBzX2QpOwotCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgZnBzX24sCi0gICAgICAgICAgICBmcHNfZCwgTlVMTCk7Ci0gICAgICB9IGVsc2UgaWYgKGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPiAwKSB7Ci0gICAgICAgIGludCBmcHNfbiwgZnBzX2Q7Ci0KLSAgICAgICAgZ3N0X3ZpZGVvX2d1ZXNzX2ZyYW1lcmF0ZSAoY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbiwgJmZwc19uLCAmZnBzX2QpOwotCi0gICAgICAgIEdTVF9JTkZPICgidXNpbmcgZGVmYXVsdCBkdXJhdGlvbiAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiIGZyYW1lcmF0ZSAlZC8lZCIsIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24sIGZwc19uLCBmcHNfZCk7Ci0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgICAgICAgZnBzX24sIGZwc19kLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwKLSAgICAgICAgICAgIDAsIDEsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBpZiAodmlkZW9jb250ZXh0LT5wYXJlbnQuZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVklERU9UUkFDS19JTlRFUkxBQ0VEKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCAiaW50ZXJsYWNlLW1vZGUiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgIm1peGVkIiwgTlVMTCk7Ci0gICAgfQotICAgIGlmICh2aWRlb2NvbnRleHQtPm11bHRpdmlld19tb2RlICE9IEdTVF9WSURFT19NVUxUSVZJRVdfTU9ERV9OT05FKSB7Ci0gICAgICBpZiAoZ3N0X3ZpZGVvX211bHRpdmlld19ndWVzc19oYWxmX2FzcGVjdCAodmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfbW9kZSwKLSAgICAgICAgICAgICAgdmlkZW9jb250ZXh0LT5waXhlbF93aWR0aCwgdmlkZW9jb250ZXh0LT5waXhlbF9oZWlnaHQsCi0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCAqIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0LAotICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfaGVpZ2h0ICogdmlkZW9jb250ZXh0LT5waXhlbF93aWR0aCkpIHsKLSAgICAgICAgdmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfZmxhZ3MgfD0gR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19IQUxGX0FTUEVDVDsKLSAgICAgIH0KLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsCi0gICAgICAgICAgIm11bHRpdmlldy1tb2RlIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgICBnc3RfdmlkZW9fbXVsdGl2aWV3X21vZGVfdG9fY2Fwc19zdHJpbmcKLSAgICAgICAgICAodmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfbW9kZSksICJtdWx0aXZpZXctZmxhZ3MiLAotICAgICAgICAgIEdTVF9UWVBFX1ZJREVPX01VTFRJVklFV19GTEFHU0VULCB2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncywKLSAgICAgICAgICBHU1RfRkxBR19TRVRfTUFTS19FWEFDVCwgTlVMTCk7Ci0gICAgfQotCi0gICAgY2FwcyA9IGdzdF9jYXBzX3NpbXBsaWZ5IChjYXBzKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi0vKgotICogU29tZSBBQUMgc3BlY2lmaWMgY29kZS4uLiAqc2lnaCoKLSAqIEZJWE1FOiBtYXliZSB3ZSBzaG91bGQgdXNlICcxNScgYW5kIGNvZGUgdGhlIHNhbXBsZSByYXRlIGV4cGxpY2l0bHkKLSAqIGlmIHRoZSBzYW1wbGUgcmF0ZSBkb2Vzbid0IG1hdGNoIHRoZSBwcmVkZWZpbmVkIHJhdGVzIGV4YWN0bHk/ICh0cG0pCi0gKi8KLQotc3RhdGljIGdpbnQKLWFhY19yYXRlX2lkeCAoZ2ludCByYXRlKQotewotICBpZiAoOTIwMTcgPD0gcmF0ZSkKLSAgICByZXR1cm4gMDsKLSAgZWxzZSBpZiAoNzUxMzIgPD0gcmF0ZSkKLSAgICByZXR1cm4gMTsKLSAgZWxzZSBpZiAoNTU0MjYgPD0gcmF0ZSkKLSAgICByZXR1cm4gMjsKLSAgZWxzZSBpZiAoNDYwMDkgPD0gcmF0ZSkKLSAgICByZXR1cm4gMzsKLSAgZWxzZSBpZiAoMzc1NjYgPD0gcmF0ZSkKLSAgICByZXR1cm4gNDsKLSAgZWxzZSBpZiAoMjc3MTMgPD0gcmF0ZSkKLSAgICByZXR1cm4gNTsKLSAgZWxzZSBpZiAoMjMwMDQgPD0gcmF0ZSkKLSAgICByZXR1cm4gNjsKLSAgZWxzZSBpZiAoMTg3ODMgPD0gcmF0ZSkKLSAgICByZXR1cm4gNzsKLSAgZWxzZSBpZiAoMTM4NTYgPD0gcmF0ZSkKLSAgICByZXR1cm4gODsKLSAgZWxzZSBpZiAoMTE1MDIgPD0gcmF0ZSkKLSAgICByZXR1cm4gOTsKLSAgZWxzZSBpZiAoOTM5MSA8PSByYXRlKQotICAgIHJldHVybiAxMDsKLSAgZWxzZQotICAgIHJldHVybiAxMTsKLX0KLQotc3RhdGljIGdpbnQKLWFhY19wcm9maWxlX2lkeCAoY29uc3QgZ2NoYXIgKiBjb2RlY19pZCkKLXsKLSAgZ2ludCBwcm9maWxlOwotCi0gIGlmIChzdHJsZW4gKGNvZGVjX2lkKSA8PSAxMikKLSAgICBwcm9maWxlID0gMzsKLSAgZWxzZSBpZiAoIXN0cm5jbXAgKCZjb2RlY19pZFsxMl0sICJNQUlOIiwgNCkpCi0gICAgcHJvZmlsZSA9IDA7Ci0gIGVsc2UgaWYgKCFzdHJuY21wICgmY29kZWNfaWRbMTJdLCAiTEMiLCAyKSkKLSAgICBwcm9maWxlID0gMTsKLSAgZWxzZSBpZiAoIXN0cm5jbXAgKCZjb2RlY19pZFsxMl0sICJTU1IiLCAzKSkKLSAgICBwcm9maWxlID0gMjsKLSAgZWxzZQotICAgIHByb2ZpbGUgPSAzOwotCi0gIHJldHVybiBwcm9maWxlOwotfQotCi1zdGF0aWMgZ3VpbnQKLXJvdW5kX3VwX3BvdzIgKGd1aW50IG4pCi17Ci0gIG4gPSBuIC0gMTsKLSAgbiA9IG4gfCAobiA+PiAxKTsKLSAgbiA9IG4gfCAobiA+PiAyKTsKLSAgbiA9IG4gfCAobiA+PiA0KTsKLSAgbiA9IG4gfCAobiA+PiA4KTsKLSAgbiA9IG4gfCAobiA+PiAxNik7Ci0gIHJldHVybiBuICsgMTsKLX0KLQotI2RlZmluZSBBQUNfU1lOQ19FWFRFTlNJT05fVFlQRSAweDAyYjcKLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X21hdHJvc2thX2RlbXV4X2F1ZGlvX2NhcHMgKEdzdE1hdHJvc2thVHJhY2tBdWRpb0NvbnRleHQgKgotICAgIGF1ZGlvY29udGV4dCwgY29uc3QgZ2NoYXIgKiBjb2RlY19pZCwgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwKLSAgICBnY2hhciAqKiBjb2RlY19uYW1lLCBndWludDE2ICogcmlmZl9hdWRpb19mbXQpCi17Ci0gIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0ID0gKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICopIGF1ZGlvY29udGV4dDsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0KLSAgZ19hc3NlcnQgKGF1ZGlvY29udGV4dCAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGNvZGVjX25hbWUgIT0gTlVMTCk7Ci0KLSAgaWYgKHJpZmZfYXVkaW9fZm10KQotICAgICpyaWZmX2F1ZGlvX2ZtdCA9IDA7Ci0KLSAgLyogVE9ETzogY2hlY2sgaWYgd2UgaGF2ZSBhbGwgY29kZWMgdHlwZXMgZnJvbSBtYXRyb3NrYS1pZHMuaAotICAgKiAgICAgICBjaGVjayBpZiB3ZSBoYXZlIHRvIGRvIG1vcmUgc3BlY2lhbCB0aGluZ3Mgd2l0aCBjb2RlY19wcml2YXRlCi0gICAqICAgICAgIGNoZWNrIGlmIHdlIG5lZWQgYml0ZGVwdGggaW4gZGlmZmVyZW50IHBsYWNlcyB0b28KLSAgICogICAgICAgaW1wbGVtZW50IGNoYW5uZWwgcG9zaXRpb24gbWFnaWMKLSAgICogQWRkIHN1cHBvcnQgZm9yOgotICAgKiAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FDM19CU0lEOQotICAgKiAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FDM19CU0lEMTAKLSAgICogIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19RVUlDS1RJTUVfUURNQwotICAgKiAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1FVSUNLVElNRV9RRE0yCi0gICAqLwotCi0gIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX01QRUcxX0wxKSB8fAotICAgICAgIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19NUEVHMV9MMikgfHwKLSAgICAgICFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fTVBFRzFfTDMpKSB7Ci0gICAgZ2ludCBsYXllcjsKLQotICAgIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX01QRUcxX0wxKSkKLSAgICAgIGxheWVyID0gMTsKLSAgICBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX01QRUcxX0wyKSkKLSAgICAgIGxheWVyID0gMjsKLSAgICBlbHNlCi0gICAgICBsYXllciA9IDM7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLAotICAgICAgICAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAxLCAibGF5ZXIiLCBHX1RZUEVfSU5ULCBsYXllciwgTlVMTCk7Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJNUEVHLTEgbGF5ZXIgJWQiLCBsYXllcik7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19QQ01fSU5UX0JFKSB8fAotICAgICAgIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19QQ01fSU5UX0xFKSkgewotICAgIGdib29sZWFuIHNpZ247Ci0gICAgZ2ludCBlbmRpYW5uZXNzOwotICAgIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdDsKLQotICAgIHNpZ24gPSAoYXVkaW9jb250ZXh0LT5iaXRkZXB0aCAhPSA4KTsKLSAgICBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19QQ01fSU5UX0JFKSkKLSAgICAgIGVuZGlhbm5lc3MgPSBHX0JJR19FTkRJQU47Ci0gICAgZWxzZQotICAgICAgZW5kaWFubmVzcyA9IEdfTElUVExFX0VORElBTjsKLQotICAgIGZvcm1hdCA9IGdzdF9hdWRpb19mb3JtYXRfYnVpbGRfaW50ZWdlciAoc2lnbiwgZW5kaWFubmVzcywKLSAgICAgICAgYXVkaW9jb250ZXh0LT5iaXRkZXB0aCwgYXVkaW9jb250ZXh0LT5iaXRkZXB0aCk7Ci0KLSAgICAvKiBGSVhNRTogQ2hhbm5lbCBtYXNrIGFuZCByZW9yZGVyaW5nICovCi0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBnc3RfYXVkaW9fZm9ybWF0X3RvX3N0cmluZyAoZm9ybWF0KSwKLSAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJpbnRlcmxlYXZlZCIsCi0gICAgICAgICJjaGFubmVsLW1hc2siLCBHU1RfVFlQRV9CSVRNQVNLLAotICAgICAgICBnc3RfYXVkaW9fY2hhbm5lbF9nZXRfZmFsbGJhY2tfbWFzayAoYXVkaW9jb250ZXh0LT5jaGFubmVscyksIE5VTEwpOwotCi0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJSYXcgJWQtYml0IFBDTSBhdWRpbyIsCi0gICAgICAgIGF1ZGlvY29udGV4dC0+Yml0ZGVwdGgpOwotICAgIGNvbnRleHQtPmFsaWdubWVudCA9IEdTVF9ST1VORF9VUF84IChhdWRpb2NvbnRleHQtPmJpdGRlcHRoKSAvIDg7Ci0gICAgY29udGV4dC0+YWxpZ25tZW50ID0gcm91bmRfdXBfcG93MiAoY29udGV4dC0+YWxpZ25tZW50KTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1BDTV9GTE9BVCkpIHsKLSAgICBjb25zdCBnY2hhciAqZm9ybWF0OwotICAgIGlmIChhdWRpb2NvbnRleHQtPmJpdGRlcHRoID09IDMyKQotICAgICAgZm9ybWF0ID0gIkYzMkxFIjsKLSAgICBlbHNlCi0gICAgICBmb3JtYXQgPSAiRjY0TEUiOwotICAgIC8qIEZJWE1FOiBDaGFubmVsIG1hc2sgYW5kIHJlb3JkZXJpbmcgKi8KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIGZvcm1hdCwKLSAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJpbnRlcmxlYXZlZCIsCi0gICAgICAgICJjaGFubmVsLW1hc2siLCBHU1RfVFlQRV9CSVRNQVNLLAotICAgICAgICBnc3RfYXVkaW9fY2hhbm5lbF9nZXRfZmFsbGJhY2tfbWFzayAoYXVkaW9jb250ZXh0LT5jaGFubmVscyksIE5VTEwpOwotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiUmF3ICVkLWJpdCBmbG9hdGluZy1wb2ludCBhdWRpbyIsCi0gICAgICAgIGF1ZGlvY29udGV4dC0+Yml0ZGVwdGgpOwotICAgIGNvbnRleHQtPmFsaWdubWVudCA9IGF1ZGlvY29udGV4dC0+Yml0ZGVwdGggLyA4OwotICAgIGNvbnRleHQtPmFsaWdubWVudCA9IHJvdW5kX3VwX3BvdzIgKGNvbnRleHQtPmFsaWdubWVudCk7Ci0gIH0gZWxzZSBpZiAoIXN0cm5jbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUMzLAotICAgICAgICAgIHN0cmxlbiAoR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FDMykpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWFjMyIsCi0gICAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cCAoIkFDLTMgYXVkaW8iKTsKLSAgfSBlbHNlIGlmICghc3RybmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19FQUMzLAotICAgICAgICAgIHN0cmxlbiAoR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0VBQzMpKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1lYWMzIiwKLSAgICAgICAgImZyYW1lZCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwICgiRS1BQy0zIGF1ZGlvIik7Ci0gIH0gZWxzZSBpZiAoIXN0cm5jbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fVFJVRUhELAotICAgICAgICAgIHN0cmxlbiAoR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1RSVUVIRCkpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LXRydWUtaGQiKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwICgiRG9sYnkgVHJ1ZUhEIik7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19EVFMpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LWR0cyIpOwotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXAgKCJEVFMgYXVkaW8iKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1ZPUkJJUykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtdm9yYmlzIik7Ci0gICAgY29udGV4dC0+c3RyZWFtX2hlYWRlcnMgPQotICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2VfeGlwaF9zdHJlYW1faGVhZGVycyAoY29udGV4dC0+Y29kZWNfcHJpdiwKLSAgICAgICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLSAgICAvKiBGSVhNRTogbWFyayBzdHJlYW0gYXMgYnJva2VuIGFuZCBza2lwIGlmIHRoZXJlIGFyZSBubyBzdHJlYW0gaGVhZGVycyAqLwotICAgIGNvbnRleHQtPnNlbmRfc3RyZWFtX2hlYWRlcnMgPSBUUlVFOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fRkxBQykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtZmxhYyIpOwotICAgIGNvbnRleHQtPnN0cmVhbV9oZWFkZXJzID0KLSAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX2ZsYWNfc3RyZWFtX2hlYWRlcnMgKGNvbnRleHQtPmNvZGVjX3ByaXYsCi0gICAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgLyogRklYTUU6IG1hcmsgc3RyZWFtIGFzIGJyb2tlbiBhbmQgc2tpcCBpZiB0aGVyZSBhcmUgbm8gc3RyZWFtIGhlYWRlcnMgKi8KLSAgICBjb250ZXh0LT5zZW5kX3N0cmVhbV9oZWFkZXJzID0gVFJVRTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1NQRUVYKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1zcGVleCIpOwotICAgIGNvbnRleHQtPnN0cmVhbV9oZWFkZXJzID0KLSAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX3NwZWV4X3N0cmVhbV9oZWFkZXJzIChjb250ZXh0LT5jb2RlY19wcml2LAotICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUpOwotICAgIC8qIEZJWE1FOiBtYXJrIHN0cmVhbSBhcyBicm9rZW4gYW5kIHNraXAgaWYgdGhlcmUgYXJlIG5vIHN0cmVhbSBoZWFkZXJzICovCi0gICAgY29udGV4dC0+c2VuZF9zdHJlYW1faGVhZGVycyA9IFRSVUU7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19PUFVTKSkgewotICAgIEdzdEJ1ZmZlciAqdG1wOwotCi0gICAgaWYgKGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA+PSAxOSkgewotICAgICAgaWYgKGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSkKLSAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoKGd1aW50OCAqKSBjb250ZXh0LT5jb2RlY19wcml2ICsgMTIsCi0gICAgICAgICAgICBhdWRpb2NvbnRleHQtPnNhbXBsZXJhdGUpOwotICAgICAgaWYgKGNvbnRleHQtPmNvZGVjX2RlbGF5KSB7Ci0gICAgICAgIGd1aW50NjQgZGVsYXkgPQotICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChjb250ZXh0LT5jb2RlY19kZWxheSwgNDgwMDAsCi0gICAgICAgICAgICBHU1RfU0VDT05EKTsKLSAgICAgICAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoKGd1aW50OCAqKSBjb250ZXh0LT5jb2RlY19wcml2ICsgMTAsIGRlbGF5KTsKLSAgICAgIH0KLQotICAgICAgdG1wID0KLSAgICAgICAgICBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21lbWR1cCAoY29udGV4dC0+Y29kZWNfcHJpdiwKLSAgICAgICAgICAgICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKSwgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLSAgICAgIGNhcHMgPSBnc3RfY29kZWNfdXRpbHNfb3B1c19jcmVhdGVfY2Fwc19mcm9tX2hlYWRlciAodG1wLCBOVUxMKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHRtcCk7Ci0gICAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwICgiT3B1cyIpOwotICAgIH0gZWxzZSBpZiAoY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID09IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiTm8gT3B1cyBjb2RlYyBkYXRhIGZvdW5kLCB0cnlpbmcgdG8gY3JlYXRlIG9uZSIpOwotICAgICAgaWYgKGF1ZGlvY29udGV4dC0+Y2hhbm5lbHMgPD0gMikgewotICAgICAgICBndWludDggc3RyZWFtcywgY291cGxlZCwgY2hhbm5lbHM7Ci0gICAgICAgIGd1aW50MzIgc2FtcGxlcmF0ZTsKLQotICAgICAgICBzYW1wbGVyYXRlID0KLSAgICAgICAgICAgIGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSA9PSAwID8gNDgwMDAgOiBhdWRpb2NvbnRleHQtPnNhbXBsZXJhdGU7Ci0gICAgICAgIGNoYW5uZWxzID0gYXVkaW9jb250ZXh0LT5jaGFubmVscyA9PSAwID8gMiA6IGF1ZGlvY29udGV4dC0+Y2hhbm5lbHM7Ci0gICAgICAgIGlmIChjaGFubmVscyA9PSAxKSB7Ci0gICAgICAgICAgc3RyZWFtcyA9IDE7Ci0gICAgICAgICAgY291cGxlZCA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgc3RyZWFtcyA9IDE7Ci0gICAgICAgICAgY291cGxlZCA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXBzID0KLSAgICAgICAgICAgIGdzdF9jb2RlY191dGlsc19vcHVzX2NyZWF0ZV9jYXBzIChzYW1wbGVyYXRlLCBjaGFubmVscywgMCwgc3RyZWFtcywKLSAgICAgICAgICAgIGNvdXBsZWQsIE5VTEwpOwotICAgICAgICBpZiAoY2FwcykgewotICAgICAgICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXAgKCJPcHVzIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gY3JlYXRlIE9wdXMgY2FwcyBmcm9tIGF1ZGlvIGNvbnRleHQiKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJObyBPcHVzIGNvZGVjIGRhdGEsIGFuZCBub3QgZW5vdWdoIGluZm8gdG8gY3JlYXRlIG9uZSIpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklORyAoIkludmFsaWQgT3B1cyBjb2RlYyBkYXRhIHNpemUgKGdvdCAlIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgICAgICIsIGV4cGVjdGVkIDE5KSIsIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUNNKSkgewotICAgIGdzdF9yaWZmX3N0cmZfYXVkcyBhdWRzOwotCi0gICAgaWYgKGRhdGEgJiYgc2l6ZSA+PSAxOCkgewotICAgICAgR3N0QnVmZmVyICpjb2RlY19kYXRhID0gTlVMTDsKLQotICAgICAgLyogbGl0dGxlLWVuZGlhbiAtPiBieXRlLW9yZGVyICovCi0gICAgICBhdWRzLmZvcm1hdCA9IEdTVF9SRUFEX1VJTlQxNl9MRSAoZGF0YSk7Ci0gICAgICBhdWRzLmNoYW5uZWxzID0gR1NUX1JFQURfVUlOVDE2X0xFIChkYXRhICsgMik7Ci0gICAgICBhdWRzLnJhdGUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEgKyA0KTsKLSAgICAgIGF1ZHMuYXZfYnBzID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgOCk7Ci0gICAgICBhdWRzLmJsb2NrYWxpZ24gPSBHU1RfUkVBRF9VSU5UMTZfTEUgKGRhdGEgKyAxMik7Ci0gICAgICBhdWRzLmJpdHNfcGVyX3NhbXBsZSA9IEdTVF9SRUFEX1VJTlQxNl9MRSAoZGF0YSArIDE2KTsKLQotICAgICAgLyogMTggaXMgdGhlIHdhdmVmb3JtYXRleCBzaXplICovCi0gICAgICBpZiAoc2l6ZSA+IDE4KSB7Ci0gICAgICAgIGNvZGVjX2RhdGEgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgICAgICAgIGRhdGEgKyAxOCwgc2l6ZSAtIDE4LCAwLCBzaXplIC0gMTgsIE5VTEwsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBpZiAocmlmZl9hdWRpb19mbXQpCi0gICAgICAgICpyaWZmX2F1ZGlvX2ZtdCA9IGF1ZHMuZm9ybWF0OwotCi0gICAgICAvKiBGSVhNRTogSGFuZGxlIHJlb3JkZXIgbWFwICovCi0gICAgICBjYXBzID0gZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHMgKGF1ZHMuZm9ybWF0LCBOVUxMLCAmYXVkcywgTlVMTCwKLSAgICAgICAgICBjb2RlY19kYXRhLCBjb2RlY19uYW1lLCBOVUxMKTsKLSAgICAgIGlmIChjb2RlY19kYXRhKQotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChjb2RlY19kYXRhKTsKLQotICAgICAgaWYgKGNhcHMgPT0gTlVMTCkgewotICAgICAgICBHU1RfV0FSTklORyAoIlVuaGFuZGxlZCBSSUZGIGF1ZGlvIGZvcm1hdCAweCUwMngiLCBhdWRzLmZvcm1hdCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBjb2RlYyBkYXRhIHNpemUgKCVkIGV4cGVjdGVkLCBnb3QgJWQpIiwgMTgsIHNpemUpOwotICAgIH0KLSAgfSBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4IChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FBQykpIHsKLSAgICBHc3RCdWZmZXIgKnByaXYgPSBOVUxMOwotICAgIGdpbnQgbXBlZ3ZlcnNpb247Ci0gICAgZ2ludCByYXRlX2lkeCwgcHJvZmlsZTsKLSAgICBndWludDggKmRhdGEgPSBOVUxMOwotCi0gICAgLyogdW5zcGVjaWZpZWQgQUFDIHByb2ZpbGUgd2l0aCBvcGFxdWUgcHJpdmF0ZSBjb2RlYyBkYXRhICovCi0gICAgaWYgKHN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19BQUMpID09IDApIHsKLSAgICAgIGlmIChjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPj0gMikgewotICAgICAgICBndWludCBvYmpfdHlwZSwgZnJlcV9pbmRleCwgZXhwbGljaXRfZnJlcV9ieXRlcyA9IDA7Ci0KLSAgICAgICAgY29kZWNfaWQgPSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUFDX01QRUc0OwotICAgICAgICBtcGVndmVyc2lvbiA9IDQ7Ci0gICAgICAgIGZyZXFfaW5kZXggPSAoR1NUX1JFQURfVUlOVDE2X0JFIChjb250ZXh0LT5jb2RlY19wcml2KSAmIDB4NzgwKSA+PiA3OwotICAgICAgICBvYmpfdHlwZSA9IChHU1RfUkVBRF9VSU5UMTZfQkUgKGNvbnRleHQtPmNvZGVjX3ByaXYpICYgMHhGODAwKSA+PiAxMTsKLSAgICAgICAgaWYgKGZyZXFfaW5kZXggPT0gMTUpCi0gICAgICAgICAgZXhwbGljaXRfZnJlcV9ieXRlcyA9IDM7Ci0gICAgICAgIEdTVF9ERUJVRyAoIm9ial90eXBlID0gJXUsIGZyZXFfaW5kZXggPSAldSIsIG9ial90eXBlLCBmcmVxX2luZGV4KTsKLSAgICAgICAgcHJpdiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChjb250ZXh0LT5jb2RlY19wcml2LAotICAgICAgICAgICAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSksIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgICAgIC8qIGFzc3VtZSBTQlIgaWYgc2FtcGxlcmF0ZSA8PSAyNGtIeiAqLwotICAgICAgICBpZiAob2JqX3R5cGUgPT0gNSB8fCAoZnJlcV9pbmRleCA+PSA2ICYmIGZyZXFfaW5kZXggIT0gMTUpIHx8Ci0gICAgICAgICAgICAoY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID09ICg1ICsgZXhwbGljaXRfZnJlcV9ieXRlcykpKSB7Ci0gICAgICAgICAgYXVkaW9jb250ZXh0LT5zYW1wbGVyYXRlICo9IDI7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiT3BhcXVlIEFfQUFDIGNvZGVjIElELCBidXQgbm8gY29kZWMgcHJpdmF0ZSBkYXRhIik7Ci0gICAgICAgIC8qIHRoaXMgaXMgcHJldHR5IGJyb2tlbjsKLSAgICAgICAgICogbWF5YmUgd2UgbmVlZCB0byBtYWtlIHVwIHNvbWUgZGVmYXVsdCBwcml2YXRlLAotICAgICAgICAgKiBvciBtYXliZSBBRFRTIGRhdGEgZ290IGR1bXBlZCBpbi4KLSAgICAgICAgICogTGV0J3Mgc2V0IHVwIHNvbWUgcHJpdmF0ZSBkYXRhIG5vdywgYW5kIGNoZWNrIGFjdHVhbCBkYXRhIGxhdGVyICovCi0gICAgICAgIC8qIGp1c3QgdHJ5IHRoaXMgYW5kIHNlZSB3aGF0IGhhcHBlbnMgLi4uICovCi0gICAgICAgIGNvZGVjX2lkID0gR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FBQ19NUEVHNDsKLSAgICAgICAgY29udGV4dC0+cG9zdHByb2Nlc3NfZnJhbWUgPSBnc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfYWFjOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIG1ha2UgdXAgZGVjb2Rlci1zcGVjaWZpYyBkYXRhIGlmIGl0IGlzIG5vdCBzdXBwbGllZCAqLwotICAgIGlmIChwcml2ID09IE5VTEwpIHsKLSAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICBwcml2ID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDUsIE5VTEwpOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHByaXYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgICAgZGF0YSA9IG1hcC5kYXRhOwotICAgICAgcmF0ZV9pZHggPSBhYWNfcmF0ZV9pZHggKGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSk7Ci0gICAgICBwcm9maWxlID0gYWFjX3Byb2ZpbGVfaWR4IChjb2RlY19pZCk7Ci0KLSAgICAgIGRhdGFbMF0gPSAoKHByb2ZpbGUgKyAxKSA8PCAzKSB8ICgocmF0ZV9pZHggJiAweEUpID4+IDEpOwotICAgICAgZGF0YVsxXSA9ICgocmF0ZV9pZHggJiAweDEpIDw8IDcpIHwgKGF1ZGlvY29udGV4dC0+Y2hhbm5lbHMgPDwgMyk7Ci0KLSAgICAgIGlmICghc3RybmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19BQUNfTVBFRzIsCi0gICAgICAgICAgICAgIHN0cmxlbiAoR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FBQ19NUEVHMikpKSB7Ci0gICAgICAgIG1wZWd2ZXJzaW9uID0gMjsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAocHJpdiwgJm1hcCk7Ci0gICAgICAgIGdzdF9idWZmZXJfc2V0X3NpemUgKHByaXYsIDIpOwotICAgICAgfSBlbHNlIGlmICghc3RybmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19BQUNfTVBFRzQsCi0gICAgICAgICAgICAgIHN0cmxlbiAoR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FBQ19NUEVHNCkpKSB7Ci0gICAgICAgIG1wZWd2ZXJzaW9uID0gNDsKLQotICAgICAgICBpZiAoZ19zdHJyc3RyIChjb2RlY19pZCwgIlNCUiIpKSB7Ci0gICAgICAgICAgLyogSEUtQUFDIChha2EgU0JSIEFBQykgKi8KLSAgICAgICAgICBhdWRpb2NvbnRleHQtPnNhbXBsZXJhdGUgKj0gMjsKLSAgICAgICAgICByYXRlX2lkeCA9IGFhY19yYXRlX2lkeCAoYXVkaW9jb250ZXh0LT5zYW1wbGVyYXRlKTsKLSAgICAgICAgICBkYXRhWzJdID0gQUFDX1NZTkNfRVhURU5TSU9OX1RZUEUgPj4gMzsKLSAgICAgICAgICBkYXRhWzNdID0gKChBQUNfU1lOQ19FWFRFTlNJT05fVFlQRSAmIDB4MDcpIDw8IDUpIHwgNTsKLSAgICAgICAgICBkYXRhWzRdID0gKDEgPDwgNykgfCAocmF0ZV9pZHggPDwgMyk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAocHJpdiwgJm1hcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAocHJpdiwgJm1hcCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAocHJpdiwgMik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHByaXYsICZtYXApOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChwcml2KTsKLSAgICAgICAgcHJpdiA9IE5VTEw7Ci0gICAgICAgIEdTVF9FUlJPUiAoIlVua25vd24gQUFDIHByb2ZpbGUgYW5kIG5vIGNvZGVjIHByaXZhdGUgZGF0YSIpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcml2KSB7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIG1wZWd2ZXJzaW9uLAotICAgICAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwKLSAgICAgICAgICAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJyYXciLCBOVUxMKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBwcml2LCBOVUxMKTsKLSAgICAgIGlmIChjb250ZXh0LT5jb2RlY19wcml2ICYmIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA+IDApCi0gICAgICAgIGdzdF9jb2RlY191dGlsc19hYWNfY2Fwc19zZXRfbGV2ZWxfYW5kX3Byb2ZpbGUgKGNhcHMsCi0gICAgICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2LCBjb250ZXh0LT5jb2RlY19wcml2X3NpemUpOwotICAgICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJNUEVHLSVkIEFBQyBhdWRpbyIsIG1wZWd2ZXJzaW9uKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByaXYpOwotICAgIH0KLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1RUQSkpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtdHRhIiwKLSAgICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgYXVkaW9jb250ZXh0LT5iaXRkZXB0aCwgTlVMTCk7Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cCAoIlRUQSBhdWRpbyIpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fV0FWUEFDSzQpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXdhdnBhY2siLAotICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBhdWRpb2NvbnRleHQtPmJpdGRlcHRoLAotICAgICAgICAiZnJhbWVkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICAgICpjb2RlY19uYW1lID0gZ19zdHJkdXAgKCJXYXZwYWNrIGF1ZGlvIik7Ci0gICAgY29udGV4dC0+cG9zdHByb2Nlc3NfZnJhbWUgPSBnc3RfbWF0cm9za2FfZGVtdXhfYWRkX3d2cGtfaGVhZGVyOwotICAgIGF1ZGlvY29udGV4dC0+d3Zwa19ibG9ja19pbmRleCA9IDA7Ci0gIH0gZWxzZSBpZiAoKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF8xNF80KSkgfHwKLSAgICAgICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1JFQUxfMjhfOCkpIHx8Ci0gICAgICAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19SRUFMX0NPT0spKSkgewotICAgIGdpbnQgcmF2ZXJzaW9uID0gLTE7Ci0KLSAgICBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19SRUFMXzE0XzQpKQotICAgICAgcmF2ZXJzaW9uID0gMTsKLSAgICBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1JFQUxfQ09PSykpCi0gICAgICByYXZlcnNpb24gPSA4OwotICAgIGVsc2UKLSAgICAgIHJhdmVyc2lvbiA9IDI7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcG4tcmVhbGF1ZGlvIiwKLSAgICAgICAgInJhdmVyc2lvbiIsIEdfVFlQRV9JTlQsIHJhdmVyc2lvbiwgTlVMTCk7Ci0gICAgLyogRXh0cmFjdCBleHRyYSBpbmZvcm1hdGlvbiBmcm9tIGNhcHMsIG1hcHBpbmcgdmFyaWVzIGJhc2VkIG9uIGNvZGVjICovCi0gICAgaWYgKGRhdGEgJiYgKHNpemUgPj0gMHg1MCkpIHsKLSAgICAgIEdzdEJ1ZmZlciAqcHJpdjsKLSAgICAgIGd1aW50IGZsYXZvcjsKLSAgICAgIGd1aW50IHBhY2tldF9zaXplOwotICAgICAgZ3VpbnQgaGVpZ2h0OwotICAgICAgZ3VpbnQgbGVhZl9zaXplOwotICAgICAgZ3VpbnQgc2FtcGxlX3dpZHRoOwotICAgICAgZ3VpbnQgZXh0cmFfZGF0YV9zaXplOwotCi0gICAgICBHU1RfRVJST1IgKCJyZWFsIGF1ZGlvIHJhdmVyc2lvbjolZCIsIHJhdmVyc2lvbik7Ci0gICAgICBpZiAocmF2ZXJzaW9uID09IDgpIHsKLSAgICAgICAgLyogQ09PSyAqLwotICAgICAgICBmbGF2b3IgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEgKyAyMik7Ci0gICAgICAgIHBhY2tldF9zaXplID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhICsgMjQpOwotICAgICAgICBoZWlnaHQgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEgKyA0MCk7Ci0gICAgICAgIGxlYWZfc2l6ZSA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoZGF0YSArIDQ0KTsKLSAgICAgICAgc2FtcGxlX3dpZHRoID0gR1NUX1JFQURfVUlOVDE2X0JFIChkYXRhICsgNTgpOwotICAgICAgICBleHRyYV9kYXRhX3NpemUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGRhdGEgKyA3NCk7Ci0KLSAgICAgICAgR1NUX0VSUk9SCi0gICAgICAgICAgICAoImZsYXZvcjolZCwgcGFja2V0X3NpemU6JWQsIGhlaWdodDolZCwgbGVhZl9zaXplOiVkLCBzYW1wbGVfd2lkdGg6JWQsIGV4dHJhX2RhdGFfc2l6ZTolZCIsCi0gICAgICAgICAgICBmbGF2b3IsIHBhY2tldF9zaXplLCBoZWlnaHQsIGxlYWZfc2l6ZSwgc2FtcGxlX3dpZHRoLAotICAgICAgICAgICAgZXh0cmFfZGF0YV9zaXplKTsKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImZsYXZvciIsIEdfVFlQRV9JTlQsIGZsYXZvciwgInBhY2tldF9zaXplIiwKLSAgICAgICAgICAgIEdfVFlQRV9JTlQsIHBhY2tldF9zaXplLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVpZ2h0LCAibGVhZl9zaXplIiwKLSAgICAgICAgICAgIEdfVFlQRV9JTlQsIGxlYWZfc2l6ZSwgIndpZHRoIiwgR19UWVBFX0lOVCwgc2FtcGxlX3dpZHRoLCBOVUxMKTsKLQotICAgICAgICBpZiAoKHNpemUgLSA3OCkgPj0gZXh0cmFfZGF0YV9zaXplKSB7Ci0gICAgICAgICAgcHJpdiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChkYXRhICsgNzgsIGV4dHJhX2RhdGFfc2l6ZSksCi0gICAgICAgICAgICAgIGV4dHJhX2RhdGFfc2l6ZSk7Ci0gICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIHByaXYsIE5VTEwpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHByaXYpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJSZWFsQXVkaW8gJWQuMCIsIHJhdmVyc2lvbik7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19SRUFMX1NJUFIpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LXNpcHJvIik7Ci0gICAgKmNvZGVjX25hbWUgPSBnX3N0cmR1cCAoIlNpcHJvL0FDRUxQLk5FVCBWb2ljZSBDb2RlYyIpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF9SQUxGKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1yYWxmLW1wZWc0LWdlbmVyaWMiKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwICgiUmVhbCBBdWRpbyBMb3NzbGVzcyIpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF9BVFJDKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC12bmQuc29ueS5hdHJhYzMiKTsKLSAgICAqY29kZWNfbmFtZSA9IGdfc3RyZHVwICgiU29ueSBBVFJBQzMiKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklORyAoIlVua25vd24gY29kZWMgJyVzJywgY2Fubm90IGJ1aWxkIENhcHMiLCBjb2RlY19pZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoY2FwcyAhPSBOVUxMKSB7Ci0gICAgaWYgKGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSA+IDAgJiYgYXVkaW9jb250ZXh0LT5jaGFubmVscyA+IDApIHsKLSAgICAgIGdpbnQgaTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgaSsrKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKSwKLSAgICAgICAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGF1ZGlvY29udGV4dC0+Y2hhbm5lbHMsCi0gICAgICAgICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSwgTlVMTCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2FwcyA9IGdzdF9jYXBzX3NpbXBsaWZ5IChjYXBzKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfbWF0cm9za2FfZGVtdXhfc3VidGl0bGVfY2FwcyAoR3N0TWF0cm9za2FUcmFja1N1YnRpdGxlQ29udGV4dCAqCi0gICAgc3VidGl0bGVjb250ZXh0LCBjb25zdCBnY2hhciAqIGNvZGVjX2lkLCBncG9pbnRlciBkYXRhLCBndWludCBzaXplKQotewotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQgPQotICAgICAgKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICopIHN1YnRpdGxlY29udGV4dDsKLQotICAvKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfQVNDSUkpKQotICAgIGNvZGVjX2lkID0gR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX1VURjg7Ci0gIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGNvZGVjX2lkLCAiU19TU0EiKSkKLSAgICBjb2RlY19pZCA9IEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9TU0E7Ci0gIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGNvZGVjX2lkLCAiU19BU1MiKSkKLSAgICBjb2RlY19pZCA9IEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9BU1M7Ci0gIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGNvZGVjX2lkLCAiU19VU0YiKSkKLSAgICBjb2RlY19pZCA9IEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9VU0Y7Ci0KLSAgLyogVE9ETzogQWRkIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9CTVAgc3VwcG9ydAotICAgKiBDaGVjayBpZiB3ZSBoYXZlIHRvIGRvIHNvbWV0aGluZyB3aXRoIGNvZGVjX3ByaXZhdGUgKi8KLSAgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfVVRGOCkpIHsKLSAgICAvKiB3ZWxsLCBwbGFpbiB0ZXh0IHNpbXBseSBkb2VzIG5vdCBoYXZlIGEgbG90IG9mIG1hcmt1cCAuLi4gKi8KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInRleHQveC1yYXciLCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywKLSAgICAgICAgInBhbmdvLW1hcmt1cCIsIE5VTEwpOwotICAgIGNvbnRleHQtPnBvc3Rwcm9jZXNzX2ZyYW1lID0gZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3N1YnRpdGxlX2J1ZmZlcjsKLSAgICBzdWJ0aXRsZWNvbnRleHQtPmNoZWNrX21hcmt1cCA9IFRSVUU7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9TU0EpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXNzYSIpOwotICAgIGNvbnRleHQtPnBvc3Rwcm9jZXNzX2ZyYW1lID0gZ3N0X21hdHJvc2thX2RlbXV4X2NoZWNrX3N1YnRpdGxlX2J1ZmZlcjsKLSAgICBzdWJ0aXRsZWNvbnRleHQtPmNoZWNrX21hcmt1cCA9IEZBTFNFOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfQVNTKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXBwbGljYXRpb24veC1hc3MiKTsKLSAgICBjb250ZXh0LT5wb3N0cHJvY2Vzc19mcmFtZSA9IGdzdF9tYXRyb3NrYV9kZW11eF9jaGVja19zdWJ0aXRsZV9idWZmZXI7Ci0gICAgc3VidGl0bGVjb250ZXh0LT5jaGVja19tYXJrdXAgPSBGQUxTRTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChjb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX1VTRikpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtdXNmIik7Ci0gICAgY29udGV4dC0+cG9zdHByb2Nlc3NfZnJhbWUgPSBnc3RfbWF0cm9za2FfZGVtdXhfY2hlY2tfc3VidGl0bGVfYnVmZmVyOwotICAgIHN1YnRpdGxlY29udGV4dC0+Y2hlY2tfbWFya3VwID0gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9WT0JTVUIpKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJzdWJwaWN0dXJlL3gtZHZkIik7Ci0gICAgKChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqKSBzdWJ0aXRsZWNvbnRleHQpLT5zZW5kX2R2ZF9ldmVudCA9IFRSVUU7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoY29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9IRE1WUEdTKSkgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgic3VicGljdHVyZS94LXBncyIpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfS0FURSkpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInN1YnRpdGxlL3gta2F0ZSIpOwotICAgIGNvbnRleHQtPnN0cmVhbV9oZWFkZXJzID0KLSAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX3hpcGhfc3RyZWFtX2hlYWRlcnMgKGNvbnRleHQtPmNvZGVjX3ByaXYsCi0gICAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgLyogRklYTUU6IG1hcmsgc3RyZWFtIGFzIGJyb2tlbiBhbmQgc2tpcCBpZiB0aGVyZSBhcmUgbm8gc3RyZWFtIGhlYWRlcnMgKi8KLSAgICBjb250ZXh0LT5zZW5kX3N0cmVhbV9oZWFkZXJzID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUcgKCJVbmtub3duIHN1YnRpdGxlIHN0cmVhbTogY29kZWNfaWQ9JyVzJyIsIGNvZGVjX2lkKTsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtc3VidGl0bGUtdW5rbm93biIpOwotICB9Ci0KLSAgaWYgKGRhdGEgIT0gTlVMTCAmJiBzaXplID4gMCkgewotICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tZW1kdXAgKGRhdGEsIHNpemUpLCBzaXplKTsKLSAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmLCBOVUxMKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX2RlbXV4X3NldF9pbmRleCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEluZGV4ICogaW5kZXgpCi17Ci0gIEdzdE1hdHJvc2thRGVtdXggKmRlbXV4ID0gR1NUX01BVFJPU0tBX0RFTVVYIChlbGVtZW50KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgaWYgKGRlbXV4LT5jb21tb24uZWxlbWVudF9pbmRleCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXgpOwotICBkZW11eC0+Y29tbW9uLmVsZW1lbnRfaW5kZXggPSBpbmRleCA/IGdzdF9vYmplY3RfcmVmIChpbmRleCkgOiBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZGVtdXgpOwotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlNldCBpbmRleCAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIGRlbXV4LT5jb21tb24uZWxlbWVudF9pbmRleCk7Ci19Ci0KLXN0YXRpYyBHc3RJbmRleCAqCi1nc3RfbWF0cm9za2FfZGVtdXhfZ2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0SW5kZXggKnJlc3VsdCA9IE5VTEw7Ci0gIEdzdE1hdHJvc2thRGVtdXggKmRlbXV4ID0gR1NUX01BVFJPU0tBX0RFTVVYIChlbGVtZW50KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgaWYgKGRlbXV4LT5jb21tb24uZWxlbWVudF9pbmRleCkKLSAgICByZXN1bHQgPSBnc3Rfb2JqZWN0X3JlZiAoZGVtdXgtPmNvbW1vbi5lbGVtZW50X2luZGV4KTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgIlJldHVybmluZyBpbmRleCAlIiBHU1RfUFRSX0ZPUk1BVCwgcmVzdWx0KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X21hdHJvc2thX2RlbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0TWF0cm9za2FEZW11eCAqZGVtdXggPSBHU1RfTUFUUk9TS0FfREVNVVggKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgLyogaGFuZGxlIHVwd2FyZHMgc3RhdGUgY2hhbmdlcyBoZXJlICovCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIC8qIGhhbmRsZSBkb3dud2FyZHMgc3RhdGUgY2hhbmdlcyAqLwotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X21hdHJvc2thX2RlbXV4X3Jlc2V0IChHU1RfRUxFTUVOVCAoZGVtdXgpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE1hdHJvc2thRGVtdXggKmRlbXV4OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NQVRST1NLQV9ERU1VWCAob2JqZWN0KSk7Ci0gIGRlbXV4ID0gR1NUX01BVFJPU0tBX0RFTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfR0FQX1RJTUU6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgIGRlbXV4LT5tYXhfZ2FwX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfZGVtdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE1hdHJvc2thRGVtdXggKmRlbXV4OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19NQVRST1NLQV9ERU1VWCAob2JqZWN0KSk7Ci0gIGRlbXV4ID0gR1NUX01BVFJPU0tBX0RFTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfR0FQX1RJTUU6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIGRlbXV4LT5tYXhfZ2FwX3RpbWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKGRlbXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9kZW11eF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnc3RfcmlmZl9pbml0ICgpOwotCi0gIC8qIHBhcnNlciBoZWxwZXIgc2VwYXJhdGUgZGVidWcgKi8KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGVibWxyZWFkX2RlYnVnLCAiZWJtbHJlYWQiLAotICAgICAgMCwgIkVCTUwgc3RyZWFtIGhlbHBlciBjbGFzcyIpOwotCi0gIC8qIGNyZWF0ZSBhbiBlbGVtZW50ZmFjdG9yeSBmb3IgdGhlIG1hdHJvc2thX2RlbXV4IGVsZW1lbnQgKi8KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibWF0cm9za2FkZW11eCIsCi0gICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfTUFUUk9TS0FfREVNVVgpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1kZW11eC5oIGIvZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YzJmZmUuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdHJvc2thL21hdHJvc2thLWRlbXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyogR1N0cmVhbWVyIE1hdHJvc2thIG11eGVyL2RlbXV4ZXIKLSAqIChjKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqIChjKSAyMDExIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLSAqCi0gKiBtYXRyb3NrYS1kZW11eC5oOiBtYXRyb3NrYSBmaWxlL3N0cmVhbSBkZW11eGVyIGRlZmluaXRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX01BVFJPU0tBX0RFTVVYX0hfXwotI2RlZmluZSBfX0dTVF9NQVRST1NLQV9ERU1VWF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KLQotI2luY2x1ZGUgImVibWwtcmVhZC5oIgotI2luY2x1ZGUgIm1hdHJvc2thLWlkcy5oIgotI2luY2x1ZGUgIm1hdHJvc2thLXJlYWQtY29tbW9uLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9NQVRST1NLQV9ERU1VWCBcCi0gIChnc3RfbWF0cm9za2FfZGVtdXhfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9ERU1VWChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfTUFUUk9TS0FfREVNVVgsIEdzdE1hdHJvc2thRGVtdXgpKQotI2RlZmluZSBHU1RfTUFUUk9TS0FfREVNVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9NQVRST1NLQV9ERU1VWCwgR3N0TWF0cm9za2FEZW11eENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX01BVFJPU0tBX0RFTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9NQVRST1NLQV9ERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19NQVRST1NLQV9ERU1VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX01BVFJPU0tBX0RFTVVYKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hdHJvc2thRGVtdXggewotICBHc3RFbGVtZW50ICAgICAgICAgICAgICBwYXJlbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLQotICBHc3RNYXRyb3NrYVJlYWRDb21tb24gICAgY29tbW9uOwotCi0gIC8qIHBhZHMgKi8KLSAgR3N0Q2xvY2sgICAgICAgICAgICAgICAgKmNsb2NrOwotICBndWludCAgICAgICAgICAgICAgICAgICAgbnVtX3Zfc3RyZWFtczsKLSAgZ3VpbnQgICAgICAgICAgICAgICAgICAgIG51bV9hX3N0cmVhbXM7Ci0gIGd1aW50ICAgICAgICAgICAgICAgICAgICBudW1fdF9zdHJlYW1zOwotCi0gIGd1aW50ICAgICAgICAgICAgICAgICAgICBncm91cF9pZDsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIGhhdmVfZ3JvdXBfaWQ7Ci0KLSAgR3N0Rmxvd0NvbWJpbmVyICAgICAgICAgKmZsb3djb21iaW5lcjsKLQotICAvKiBzdGF0ZSAqLwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgc3RyZWFtaW5nOwotICBndWludDY0ICAgICAgICAgICAgICAgICAgc2Vla19ibG9jazsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIHNlZWtfZmlyc3Q7Ci0KLSAgLyogZGlkIHdlIHBhcnNlIGN1ZXMvdHJhY2tzL3NlZ21lbnRpbmZvIGFscmVhZHk/ICovCi0gIGdib29sZWFuICAgICAgICAgICAgICAgICB0cmFja3NfcGFyc2VkOwotICBHTGlzdCAgICAgICAgICAgICAgICAgICAqc2Vla19wYXJzZWQ7Ci0KLSAgLyogY2x1c3RlciBwb3NpdGlvbnMgKG9wdGlvbmFsKSAqLwotICBHQXJyYXkgICAgICAgICAgICAgICAgICAqY2x1c3RlcnM7Ci0KLSAgLyoga2VlcGluZyB0cmFjayBvZiBwbGF5YmFjayBwb3NpdGlvbiAqLwotICBHc3RDbG9ja1RpbWUgICAgICAgICAgICAgbGFzdF9zdG9wX2VuZDsKLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICAgIHN0cmVhbV9zdGFydF90aW1lOwotCi0gIC8qIFN0b3AgdGltZSBmb3IgcmV2ZXJzZSBwbGF5YmFjayAqLwotICBHc3RDbG9ja1RpbWUgICAgICAgICAgICAgdG9fdGltZTsKLSAgR3N0RXZlbnQgICAgICAgICAgICAgICAgKm5ld19zZWdtZW50OwotCi0gIC8qIHNvbWUgc3RhdGUgc2F2aW5nICovCi0gIEdzdENsb2NrVGltZSAgICAgICAgICAgICBjbHVzdGVyX3RpbWU7Ci0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBjbHVzdGVyX29mZnNldDsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgICAgIGZpcnN0X2NsdXN0ZXJfb2Zmc2V0OwotICBndWludDY0ICAgICAgICAgICAgICAgICAgbmV4dF9jbHVzdGVyX29mZnNldDsKLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICAgIHJlcXVlc3RlZF9zZWVrX3RpbWU7Ci0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBzZWVrX29mZnNldDsKLQotICAvKiBpbmRleCBzdHVmZiAqLwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgc2Vla2FibGU7Ci0gIGdib29sZWFuICAgICAgICAgICAgICAgICBidWlsZGluZ19pbmRleDsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgICAgIGluZGV4X29mZnNldDsKLSAgR3N0RXZlbnQgICAgICAgICAgICAgICAgKnNlZWtfZXZlbnQ7Ci0gIGdib29sZWFuICAgICAgICAgICAgICAgICBuZWVkX3NlZ21lbnQ7Ci0gIGd1aW50MzIgICAgICAgICAgICAgICAgICBzZWdtZW50X3NlcW51bTsKLQotICAvKiByZXZlcnNlIHBsYXliYWNrICovCi0gIEdBcnJheSAgICAgICAgICAgICAgICAgICpzZWVrX2luZGV4OwotICBnaW50ICAgICAgICAgICAgICAgICAgICAgc2Vla19lbnRyeTsKLQotICAvKiBnYXAgaGFuZGxpbmcgKi8KLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgICAgIG1heF9nYXBfdGltZTsKLQotICAvKiBmb3Igbm9uLWZpbmFsaXplZCBmaWxlcywgd2l0aCBpbnZhbGlkIHNlZ21lbnQgZHVyYXRpb24gKi8KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIGludmFsaWRfZHVyYXRpb247Ci0KLSAgLyogQ2FjaGVkIHVwc3RyZWFtIGxlbmd0aCAoZGVmYXVsdCBHX01BWFVJTlQ2NCkgKi8KLSAgZ3VpbnQ2NAkgICAgICAgICAgIGNhY2hlZF9sZW5ndGg7Ci19IEdzdE1hdHJvc2thRGVtdXg7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNYXRyb3NrYURlbXV4Q2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50OwotfSBHc3RNYXRyb3NrYURlbXV4Q2xhc3M7Ci0KLWdib29sZWFuIGdzdF9tYXRyb3NrYV9kZW11eF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICpwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTUFUUk9TS0FfREVNVVhfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmMgYi9nc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlZjNlMjYuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUwICswLDAgQEAKLS8qIEdTdHJlYW1lciBNYXRyb3NrYSBtdXhlci9kZW11eGVyCi0gKiAoQykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIG1hdHJvc2thLWlkcy5jOiBtYXRyb3NrYSB0cmFjayBjb250ZXh0IHV0aWxpdHkgZnVuY3Rpb25zCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0cm9za2EtaWRzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV90cmFja19pbml0X3ZpZGVvX2NvbnRleHQgKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICoqIHBfY29udGV4dCkKLXsKLSAgR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqdmlkZW9fY29udGV4dDsKLQotICBnX2Fzc2VydCAocF9jb250ZXh0ICE9IE5VTEwgJiYgKnBfY29udGV4dCAhPSBOVUxMKTsKLQotICAvKiBhbHJlYWR5IHNldCB1cD8gKHRyYWNrIGluZm8gbWlnaHQgY29tZSBiZWZvcmUgdHJhY2sgdHlwZSkgKi8KLSAgaWYgKCgqcF9jb250ZXh0KS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTykgewotICAgIEdTVF9MT0cgKCJ2aWRlbyBjb250ZXh0IGFscmVhZHkgc2V0IHVwIik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBpdCBiZXR0ZXIgbm90IGhhdmUgYmVlbiBzZXQgdXAgYXMgc29tZSBvdGhlciB0cmFjayB0eXBlIC4uLiAqLwotICBpZiAoKCpwX2NvbnRleHQpLT50eXBlICE9IDApIHsKLSAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoRkFMU0UpOwotICB9Ci0KLSAgdmlkZW9fY29udGV4dCA9IGdfcmVuZXcgKEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQsICpwX2NvbnRleHQsIDEpOwotICAqcF9jb250ZXh0ID0gKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICopIHZpZGVvX2NvbnRleHQ7Ci0KLSAgLyogZGVmYXVsdHMgKi8KLSAgKCpwX2NvbnRleHQpLT50eXBlID0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfVklERU87Ci0gIHZpZGVvX2NvbnRleHQtPmRpc3BsYXlfd2lkdGggPSAwOwotICB2aWRlb19jb250ZXh0LT5kaXNwbGF5X2hlaWdodCA9IDA7Ci0gIHZpZGVvX2NvbnRleHQtPnBpeGVsX3dpZHRoID0gMDsKLSAgdmlkZW9fY29udGV4dC0+cGl4ZWxfaGVpZ2h0ID0gMDsKLSAgdmlkZW9fY29udGV4dC0+YXNyX21vZGUgPSAwOwotICB2aWRlb19jb250ZXh0LT5mb3VyY2MgPSAwOwotICB2aWRlb19jb250ZXh0LT5kZWZhdWx0X2ZwcyA9IDAuMDsKLSAgdmlkZW9fY29udGV4dC0+ZWFybGllc3RfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHZpZGVvX2NvbnRleHQtPm11bHRpdmlld19tb2RlID0gR1NUX1ZJREVPX01VTFRJVklFV19NT0RFX05PTkU7Ci0gIHZpZGVvX2NvbnRleHQtPm11bHRpdmlld19mbGFncyA9IEdTVF9WSURFT19NVUxUSVZJRVdfRkxBR1NfTk9ORTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV90cmFja19pbml0X2F1ZGlvX2NvbnRleHQgKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICoqIHBfY29udGV4dCkKLXsKLSAgR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqYXVkaW9fY29udGV4dDsKLQotICBnX2Fzc2VydCAocF9jb250ZXh0ICE9IE5VTEwgJiYgKnBfY29udGV4dCAhPSBOVUxMKTsKLQotICAvKiBhbHJlYWR5IHNldCB1cD8gKHRyYWNrIGluZm8gbWlnaHQgY29tZSBiZWZvcmUgdHJhY2sgdHlwZSkgKi8KLSAgaWYgKCgqcF9jb250ZXh0KS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTykKLSAgICByZXR1cm4gVFJVRTsKLQotICAvKiBpdCBiZXR0ZXIgbm90IGhhdmUgYmVlbiBzZXQgdXAgYXMgc29tZSBvdGhlciB0cmFjayB0eXBlIC4uLiAqLwotICBpZiAoKCpwX2NvbnRleHQpLT50eXBlICE9IDApIHsKLSAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoRkFMU0UpOwotICB9Ci0KLSAgYXVkaW9fY29udGV4dCA9IGdfcmVuZXcgKEdzdE1hdHJvc2thVHJhY2tBdWRpb0NvbnRleHQsICpwX2NvbnRleHQsIDEpOwotICAqcF9jb250ZXh0ID0gKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICopIGF1ZGlvX2NvbnRleHQ7Ci0KLSAgLyogZGVmYXVsdHMgKi8KLSAgKCpwX2NvbnRleHQpLT50eXBlID0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQVVESU87Ci0gIGF1ZGlvX2NvbnRleHQtPmNoYW5uZWxzID0gMTsKLSAgYXVkaW9fY29udGV4dC0+c2FtcGxlcmF0ZSA9IDgwMDA7Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotZ3N0X21hdHJvc2thX3RyYWNrX2luaXRfc3VidGl0bGVfY29udGV4dCAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiogcF9jb250ZXh0KQotewotICBHc3RNYXRyb3NrYVRyYWNrU3VidGl0bGVDb250ZXh0ICpzdWJ0aXRsZV9jb250ZXh0OwotCi0gIGdfYXNzZXJ0IChwX2NvbnRleHQgIT0gTlVMTCAmJiAqcF9jb250ZXh0ICE9IE5VTEwpOwotCi0gIC8qIGFscmVhZHkgc2V0IHVwPyAodHJhY2sgaW5mbyBtaWdodCBjb21lIGJlZm9yZSB0cmFjayB0eXBlKSAqLwotICBpZiAoKCpwX2NvbnRleHQpLT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1NVQlRJVExFKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIGl0IGJldHRlciBub3QgaGF2ZSBiZWVuIHNldCB1cCBhcyBzb21lIG90aGVyIHRyYWNrIHR5cGUgLi4uICovCi0gIGlmICgoKnBfY29udGV4dCktPnR5cGUgIT0gMCkgewotICAgIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChGQUxTRSk7Ci0gIH0KLQotICBzdWJ0aXRsZV9jb250ZXh0ID0gZ19yZW5ldyAoR3N0TWF0cm9za2FUcmFja1N1YnRpdGxlQ29udGV4dCwgKnBfY29udGV4dCwgMSk7Ci0gICpwX2NvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKikgc3VidGl0bGVfY29udGV4dDsKLQotICAoKnBfY29udGV4dCktPnR5cGUgPSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9TVUJUSVRMRTsKLSAgc3VidGl0bGVfY29udGV4dC0+aW52YWxpZF91dGY4ID0gRkFMU0U7Ci0gIHN1YnRpdGxlX2NvbnRleHQtPnNlZW5fbWFya3VwX3RhZyA9IEZBTFNFOwotICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZAotZ3N0X21hdHJvc2thX3JlZ2lzdGVyX3RhZ3MgKHZvaWQpCi17Ci0gIC8qIFRPRE86IHJlZ2lzdGVyIG90aGVyIGN1c3RvbSB0YWdzICovCi19Ci0KLUdzdEJ1ZmZlckxpc3QgKgotZ3N0X21hdHJvc2thX3BhcnNlX3hpcGhfc3RyZWFtX2hlYWRlcnMgKGdwb2ludGVyIGNvZGVjX2RhdGEsCi0gICAgZ3NpemUgY29kZWNfZGF0YV9zaXplKQotewotICBHc3RCdWZmZXJMaXN0ICpsaXN0ID0gTlVMTDsKLSAgZ3VpbnQ4ICpwID0gY29kZWNfZGF0YTsKLSAgZ2ludCBpLCBvZmZzZXQsIG51bV9wYWNrZXRzOwotICBndWludCAqbGVuZ3RoLCBsYXN0OwotCi0gIEdTVF9NRU1EVU1QICgieGlwaCBjb2RlYyBkYXRhIiwgY29kZWNfZGF0YSwgY29kZWNfZGF0YV9zaXplKTsKLQotICBpZiAoY29kZWNfZGF0YSA9PSBOVUxMIHx8IGNvZGVjX2RhdGFfc2l6ZSA9PSAwKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgLyogc3RhcnQgb2YgdGhlIHN0cmVhbSBhbmQgdm9yYmlzIGF1ZGlvIG9yIHRoZW9yYSB2aWRlbywgbmVlZCB0bwotICAgKiBzZW5kIHRoZSBjb2RlY19wcml2IGRhdGEgYXMgZmlyc3QgdGhyZWUgcGFja2V0cyAqLwotICBudW1fcGFja2V0cyA9IHBbMF0gKyAxOwotICBHU1RfREVCVUcgKCIldSBzdHJlYW0gaGVhZGVycywgdG90YWwgbGVuZ3RoPSUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgKGd1aW50KSBudW1fcGFja2V0cywgY29kZWNfZGF0YV9zaXplKTsKLQotICBsZW5ndGggPSBnX2FsbG9jYSAobnVtX3BhY2tldHMgKiBzaXplb2YgKGd1aW50KSk7Ci0gIGxhc3QgPSAwOwotICBvZmZzZXQgPSAxOwotCi0gIC8qIGZpcnN0IHBhY2tldHMsIHJlYWQgbGVuZ3RoIHZhbHVlcyAqLwotICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2tldHMgLSAxOyBpKyspIHsKLSAgICBsZW5ndGhbaV0gPSAwOwotICAgIHdoaWxlIChvZmZzZXQgPCBjb2RlY19kYXRhX3NpemUpIHsKLSAgICAgIGxlbmd0aFtpXSArPSBwW29mZnNldF07Ci0gICAgICBpZiAocFtvZmZzZXQrK10gIT0gMHhmZikKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGxhc3QgKz0gbGVuZ3RoW2ldOwotICB9Ci0gIGlmIChvZmZzZXQgKyBsYXN0ID4gY29kZWNfZGF0YV9zaXplKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgLyogbGFzdCBwYWNrZXQgaXMgdGhlIHJlbWFpbmluZyBzaXplICovCi0gIGxlbmd0aFtpXSA9IGNvZGVjX2RhdGFfc2l6ZSAtIG9mZnNldCAtIGxhc3Q7Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9wYWNrZXRzOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKmhkcjsKLQotICAgIEdTVF9ERUJVRyAoImJ1ZmZlciAlZDogJXUgYnl0ZXMiLCBpLCAoZ3VpbnQpIGxlbmd0aFtpXSk7Ci0KLSAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoW2ldID4gY29kZWNfZGF0YV9zaXplKQotICAgICAgZ290byBlcnJvcjsKLQotICAgIGhkciA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChwICsgb2Zmc2V0LCBsZW5ndGhbaV0pLCBsZW5ndGhbaV0pOwotICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIGhkcik7Ci0KLSAgICBvZmZzZXQgKz0gbGVuZ3RoW2ldOwotICB9Ci0KLSAgcmV0dXJuIGxpc3Q7Ci0KLS8qIEVSUk9SUyAqLwotZXJyb3I6Ci0gIHsKLSAgICBpZiAobGlzdCAhPSBOVUxMKQotICAgICAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1Hc3RCdWZmZXJMaXN0ICoKLWdzdF9tYXRyb3NrYV9wYXJzZV9zcGVleF9zdHJlYW1faGVhZGVycyAoZ3BvaW50ZXIgY29kZWNfZGF0YSwKLSAgICBnc2l6ZSBjb2RlY19kYXRhX3NpemUpCi17Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3QgPSBOVUxMOwotICBHc3RCdWZmZXIgKmhkcjsKLSAgZ3VpbnQ4ICpwZGF0YSA9IGNvZGVjX2RhdGE7Ci0KLSAgR1NUX01FTURVTVAgKCJzcGVleCBjb2RlYyBkYXRhIiwgY29kZWNfZGF0YSwgY29kZWNfZGF0YV9zaXplKTsKLQotICBpZiAoY29kZWNfZGF0YSA9PSBOVUxMIHx8IGNvZGVjX2RhdGFfc2l6ZSA8IDgwKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJub3QgZW5vdWdoIGNvZGVjIHByaXYgZGF0YSBmb3Igc3BlZXggaGVhZGVycyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKG1lbWNtcCAocGRhdGEsICJTcGVleCAgICIsIDgpICE9IDApIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIFNwZWV4IG1hcmtlciBhdCBzdGFydCBvZiBzdHJlYW0gaGVhZGVycyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0KLSAgaGRyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tZW1kdXAgKHBkYXRhLCA4MCksIDgwKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgaGRyKTsKLQotICBpZiAoY29kZWNfZGF0YV9zaXplID4gODApIHsKLSAgICBoZHIgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21lbWR1cCAocGRhdGEgKyA4MCwgY29kZWNfZGF0YV9zaXplIC0gODApLAotICAgICAgICBjb2RlY19kYXRhX3NpemUgLSA4MCk7Ci0gICAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgaGRyKTsKLSAgfQotCi0gIHJldHVybiBsaXN0OwotfQotCi1Hc3RCdWZmZXJMaXN0ICoKLWdzdF9tYXRyb3NrYV9wYXJzZV9vcHVzX3N0cmVhbV9oZWFkZXJzIChncG9pbnRlciBjb2RlY19kYXRhLAotICAgIGdzaXplIGNvZGVjX2RhdGFfc2l6ZSkKLXsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdCA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqaGRyOwotICBndWludDggKnBkYXRhID0gY29kZWNfZGF0YTsKLQotICBHU1RfTUVNRFVNUCAoIm9wdXMgY29kZWMgZGF0YSIsIGNvZGVjX2RhdGEsIGNvZGVjX2RhdGFfc2l6ZSk7Ci0KLSAgaWYgKGNvZGVjX2RhdGEgPT0gTlVMTCB8fCBjb2RlY19kYXRhX3NpemUgPCAxOSkgewotICAgIEdTVF9XQVJOSU5HICgibm90IGVub3VnaCBjb2RlYyBwcml2IGRhdGEgZm9yIG9wdXMgaGVhZGVycyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKG1lbWNtcCAocGRhdGEsICJPcHVzSGVhZCIsIDgpICE9IDApIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIE9wdXNIZWFkIG1hcmtlciBhdCBzdGFydCBvZiBzdHJlYW0gaGVhZGVycyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0KLSAgaGRyID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGdfbWVtZHVwIChwZGF0YSwgY29kZWNfZGF0YV9zaXplKSwKLSAgICAgIGNvZGVjX2RhdGFfc2l6ZSk7Ci0gIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIGhkcik7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLUdzdEJ1ZmZlckxpc3QgKgotZ3N0X21hdHJvc2thX3BhcnNlX2ZsYWNfc3RyZWFtX2hlYWRlcnMgKGdwb2ludGVyIGNvZGVjX2RhdGEsCi0gICAgZ3NpemUgY29kZWNfZGF0YV9zaXplKQotewotICBHc3RCdWZmZXJMaXN0ICpsaXN0ID0gTlVMTDsKLSAgR3N0QnVmZmVyICpoZHI7Ci0gIGd1aW50OCAqcGRhdGEgPSBjb2RlY19kYXRhOwotICBndWludCBsZW4sIG9mZjsKLQotICBHU1RfTUVNRFVNUCAoImZsYWMgY29kZWMgZGF0YSIsIGNvZGVjX2RhdGEsIGNvZGVjX2RhdGFfc2l6ZSk7Ci0KLSAgLyogbmVlZCBhdCBsZWFzdCAnZkxhQycgbWFya2VyICsgU1RSRUFNSU5GTyBtZXRhZGF0YSBibG9jayAqLwotICBpZiAoY29kZWNfZGF0YSA9PSBOVUxMIHx8IGNvZGVjX2RhdGFfc2l6ZSA8ICgoNCkgKyAoNCArIDM0KSkpIHsKLSAgICBHU1RfV0FSTklORyAoIm5vdCBlbm91Z2ggY29kZWMgcHJpdiBkYXRhIGZvciBmbGFjIGhlYWRlcnMiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGlmIChtZW1jbXAgKHBkYXRhLCAiZkxhQyIsIDQpICE9IDApIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIGZsYWMgbWFya2VyIGF0IHN0YXJ0IG9mIHN0cmVhbSBoZWFkZXJzIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldyAoKTsKLQotICBoZHIgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChnX21lbWR1cCAocGRhdGEsIDQpLCA0KTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgaGRyKTsKLQotICAvKiBza2lwIGZMYUMgbWFya2VyICovCi0gIG9mZiA9IDQ7Ci0KLSAgd2hpbGUgKG9mZiA8IGNvZGVjX2RhdGFfc2l6ZSAtIDMpIHsKLSAgICBsZW4gPSBHU1RfUkVBRF9VSU5UOCAocGRhdGEgKyBvZmYgKyAxKSA8PCAxNjsKLSAgICBsZW4gfD0gR1NUX1JFQURfVUlOVDggKHBkYXRhICsgb2ZmICsgMikgPDwgODsKLSAgICBsZW4gfD0gR1NUX1JFQURfVUlOVDggKHBkYXRhICsgb2ZmICsgMyk7Ci0KLSAgICBHU1RfREVCVUcgKCJoZWFkZXIgcGFja2V0OiBsZW49JXUgYnl0ZXMsIGZsYWdzPTB4JTAyeCIsIGxlbiwgcGRhdGFbb2ZmXSk7Ci0KLSAgICBpZiAob2ZmICsgbGVuID4gY29kZWNfZGF0YV9zaXplKSB7Ci0gICAgICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKGxpc3QpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaGRyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tZW1kdXAgKHBkYXRhICsgb2ZmLCBsZW4gKyA0KSwgbGVuICsgNCk7Ci0gICAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgaGRyKTsKLQotICAgIG9mZiArPSA0ICsgbGVuOwotICB9Ci0gIHJldHVybiBsaXN0OwotfQotCi1Hc3RDbG9ja1RpbWUKLWdzdF9tYXRyb3NrYV90cmFja19nZXRfYnVmZmVyX3RpbWVzdGFtcCAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiB0cmFjaywKLSAgICBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGlmICh0cmFjay0+ZHRzX29ubHkpIHsKLSAgICByZXR1cm4gR1NUX0JVRkZFUl9EVFNfT1JfUFRTIChidWYpOwotICB9IGVsc2UgewotICAgIHJldHVybiBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgfQotfQotCi12b2lkCi1nc3RfbWF0cm9za2FfdHJhY2tfZnJlZSAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiB0cmFjaykKLXsKLSAgZ19mcmVlICh0cmFjay0+Y29kZWNfaWQpOwotICBnX2ZyZWUgKHRyYWNrLT5jb2RlY19uYW1lKTsKLSAgZ19mcmVlICh0cmFjay0+bmFtZSk7Ci0gIGdfZnJlZSAodHJhY2stPmxhbmd1YWdlKTsKLSAgZ19mcmVlICh0cmFjay0+Y29kZWNfcHJpdik7Ci0gIGdfZnJlZSAodHJhY2stPmNvZGVjX3N0YXRlKTsKLQotICBpZiAodHJhY2stPmVuY29kaW5ncyAhPSBOVUxMKSB7Ci0gICAgaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgdHJhY2stPmVuY29kaW5ncy0+bGVuOyArK2kpIHsKLSAgICAgIEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZyAqZW5jID0gJmdfYXJyYXlfaW5kZXggKHRyYWNrLT5lbmNvZGluZ3MsCi0gICAgICAgICAgR3N0TWF0cm9za2FUcmFja0VuY29kaW5nLAotICAgICAgICAgIGkpOwotCi0gICAgICBnX2ZyZWUgKGVuYy0+Y29tcF9zZXR0aW5ncyk7Ci0gICAgfQotICAgIGdfYXJyYXlfZnJlZSAodHJhY2stPmVuY29kaW5ncywgVFJVRSk7Ci0gIH0KLQotICBpZiAodHJhY2stPnRhZ3MpCi0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0cmFjay0+dGFncyk7Ci0KLSAgaWYgKHRyYWNrLT5pbmRleF90YWJsZSkKLSAgICBnX2FycmF5X2ZyZWUgKHRyYWNrLT5pbmRleF90YWJsZSwgVFJVRSk7Ci0KLSAgaWYgKHRyYWNrLT5zdHJlYW1faGVhZGVycykKLSAgICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKHRyYWNrLT5zdHJlYW1faGVhZGVycyk7Ci0KLSAgZ19mcmVlICh0cmFjayk7Ci19CmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmggYi9nc3QvbWF0cm9za2EvbWF0cm9za2EtaWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTcxYjMuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdHJvc2thL21hdHJvc2thLWlkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjc5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBNYXRyb3NrYSBtdXhlci9kZW11eGVyCi0gKiAoYykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogbWF0cm9za2EtaWRzLmg6IG1hdHJvc2thIGZpbGUvc3RyZWFtIGRhdGEgSURzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9NQVRST1NLQV9JRFNfSF9fCi0jZGVmaW5lIF9fR1NUX01BVFJPU0tBX0lEU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8taW5mby5oPgotCi0jaW5jbHVkZSAiZWJtbC1pZHMuaCIKLQotLyoKLSAqIEVCTUwgRG9jVHlwZS4KLSAqLwotCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9ET0NUWVBFX01BVFJPU0tBICAgICAgICAgICAgICAibWF0cm9za2EiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9ET0NUWVBFX1dFQk0gICAgICAgICAgICAgICAgICAid2VibSIKLQotLyoKLSAqIE1hdHJvc2thIGVsZW1lbnQgSURzLiBtYXguIDMyLWJpdC4KLSAqLwotCi0vKiB0b3BsZXZlbCBTZWdtZW50ICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5UICAgICAgICAgICAgICAgICAgICAweDE4NTM4MDY3Ci0KLS8qIG1hdHJvc2thIHRvcC1sZXZlbCBtYXN0ZXIgSURzLCBjaGlsZHMgb2YgU2VnbWVudCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVElORk8gICAgICAgICAgICAgICAgMHgxNTQ5QTk2NgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tTICAgICAgICAgICAgICAgICAgICAgMHgxNjU0QUU2QgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ1VFUyAgICAgICAgICAgICAgICAgICAgICAgMHgxQzUzQkI2QgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVEFHUyAgICAgICAgICAgICAgICAgICAgICAgMHgxMjU0QzM2NwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfU0VFS0hFQUQgICAgICAgICAgICAgICAgICAgMHgxMTREOUI3NAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUiAgICAgICAgICAgICAgICAgICAgMHgxRjQzQjY3NQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQVRUQUNITUVOVFMgICAgICAgICAgICAgICAgMHgxOTQxQTQ2OQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlMgICAgICAgICAgICAgICAgICAgMHgxMDQzQTc3MAotCi0vKiBJRHMgaW4gdGhlIFNlZ21lbnRJbmZvIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVElNRUNPREVTQ0FMRSAgICAgICAgICAgICAgMHgyQUQ3QjEKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0RVUkFUSU9OICAgICAgICAgICAgICAgICAgIDB4NDQ4OQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfV1JJVElOR0FQUCAgICAgICAgICAgICAgICAgMHg1NzQxCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9NVVhJTkdBUFAgICAgICAgICAgICAgICAgICAweDREODAKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0RBVEVVVEMgICAgICAgICAgICAgICAgICAgIDB4NDQ2MQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVFVJRCAgICAgICAgICAgICAgICAgMHg3M0E0Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5URklMRU5BTUUgICAgICAgICAgICAweDczODQKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1BSRVZVSUQgICAgICAgICAgICAgICAgICAgIDB4M0NCOTIzCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9QUkVWRklMRU5BTUUgICAgICAgICAgICAgICAweDNDODNBQgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfTkVYVFVJRCAgICAgICAgICAgICAgICAgICAgMHgzRUI5MjMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX05FWFRGSUxFTkFNRSAgICAgICAgICAgICAgIDB4M0U4M0JCCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9USVRMRSAgICAgICAgICAgICAgICAgICAgICAweDdCQTkKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NFR01FTlRGQU1JTFkgICAgICAgICAgICAgIDB4NDQ0NAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlRSQU5TTEFURSAgICAgICAgICAgMHg2OTI0Ci0KLS8qIElEcyBpbiB0aGUgQ2hhcHRlclRyYW5zbGF0ZSBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUUkFOU0xBVEVFRElUSU9OVUlEIDB4NjlGQwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlRSQU5TTEFURUNPREVDICAgICAgMHg2OUJGCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSVFJBTlNMQVRFSUQgICAgICAgICAweDY5QTUKLQotLyogSUQgaW4gdGhlIFRyYWNrcyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLRU5UUlkgICAgICAgICAgICAgICAgIDB4QUUKLQotLyogSURzIGluIHRoZSBUcmFja0VudHJ5IG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tOVU1CRVIgICAgICAgICAgICAgICAgMHhENwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tVSUQgICAgICAgICAgICAgICAgICAgMHg3M0M1Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS1RZUEUgICAgICAgICAgICAgICAgICAweDgzCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS0FVRElPICAgICAgICAgICAgICAgICAweEUxCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS1ZJREVPICAgICAgICAgICAgICAgICAweEUwCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DT05URU5URU5DT0RJTkdTICAgICAgICAgICAweDZEODAKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPREVDSUQgICAgICAgICAgICAgICAgICAgIDB4ODYKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPREVDUFJJVkFURSAgICAgICAgICAgICAgIDB4NjNBMgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNOQU1FICAgICAgICAgICAgICAgICAgMHgyNTg2ODgKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLTkFNRSAgICAgICAgICAgICAgICAgIDB4NTM2RQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tMQU5HVUFHRSAgICAgICAgICAgICAgMHgyMkI1OUMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0VOQUJMRUQgICAgICAgICAgIDB4QjkKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0RFRkFVTFQgICAgICAgICAgIDB4ODgKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0ZPUkNFRCAgICAgICAgICAgIDB4NTVBQQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tGTEFHTEFDSU5HICAgICAgICAgICAgMHg5QwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tNSU5DQUNIRSAgICAgICAgICAgICAgMHg2REU3Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS01BWENBQ0hFICAgICAgICAgICAgICAweDZERjgKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLREVGQVVMVERVUkFUSU9OICAgICAgIDB4MjNFMzgzCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS1RJTUVDT0RFU0NBTEUgICAgICAgICAweDIzMzE0RgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfTUFYQkxPQ0tBRERJVElPTklEICAgICAgICAgMHg1NUVFCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS0FUVEFDSE1FTlRMSU5LICAgICAgICAweDc0NDYKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLT1ZFUkxBWSAgICAgICAgICAgICAgIDB4NkZBQgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tUUkFOU0xBVEUgICAgICAgICAgICAgMHg2NjI0Ci0vKiBzZW1pLWRyYWZ0ICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS09GRlNFVCAgICAgICAgICAgICAgICAweDUzN0YKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPREVDU0VUVElOR1MgICAgICAgICAgICAgIDB4M0E5Njk3Ci0vKiBzZW1pLWRyYWZ0ICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0lORk9VUkwgICAgICAgICAgICAgICAweDNCNDA0MAotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNET1dOTE9BRFVSTCAgICAgICAgICAgMHgyNkIyNDAKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPREVDREVDT0RFQUxMICAgICAgICAgICAgIDB4QUEKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NFRUtQUkVST0xMICAgICAgICAgICAgICAgIDB4NTZCQgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNERUxBWSAgICAgICAgICAgICAgICAgMHg1NkFBCi0KLS8qIElEcyBpbiB0aGUgVHJhY2tUcmFuc2xhdGUgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UUkFDS1RSQU5TTEFURUVESVRJT05VSUQgICAweDY2RkMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RSQUNLVFJBTlNMQVRFQ09ERUMgICAgICAgIDB4NjZCRgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tUUkFOU0xBVEVUUkFDS0lEICAgICAgMHg2NkE1Ci0KLQotLyogSURzIGluIHRoZSBUcmFja1ZpZGVvIG1hc3RlciAqLwotLyogTk9URTogVGhpcyBvbmUgaXMgaGVyZSBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotICogVXNlIF9UUkFDS0RFRkFVTERVUkFUSU9OICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9WSURFT0ZSQU1FUkFURSAgICAgICAgICAgICAweDIzODNFMwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVklERU9ESVNQTEFZV0lEVEggICAgICAgICAgMHg1NEIwCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9WSURFT0RJU1BMQVlIRUlHSFQgICAgICAgICAweDU0QkEKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1ZJREVPRElTUExBWVVOSVQgICAgICAgICAgIDB4NTRCMgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTFdJRFRIICAgICAgICAgICAgMHhCMAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTEhFSUdIVCAgICAgICAgICAgMHhCQQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTENST1BCT1RUT00gICAgICAgMHg1NEFBCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMQ1JPUFRPUCAgICAgICAgICAweDU0QkIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1ZJREVPUElYRUxDUk9QTEVGVCAgICAgICAgIDB4NTRDQwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTENST1BSSUdIVCAgICAgICAgMHg1NERECi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9WSURFT0ZMQUdJTlRFUkxBQ0VEICAgICAgICAweDlBCi0vKiBzZW1pLWRyYWZ0ICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9WSURFT1NURVJFT01PREUgICAgICAgICAgICAweDUzQjgKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1ZJREVPQVNQRUNUUkFUSU9UWVBFICAgICAgIDB4NTRCMwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVklERU9DT0xPVVJTUEFDRSAgICAgICAgICAgMHgyRUI1MjQKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1ZJREVPR0FNTUFWQUxVRSAgICAgICAgICAgIDB4MkZCNTIzCi0KLS8qIElEcyBpbiB0aGUgVHJhY2tBdWRpbyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0FVRElPU0FNUExJTkdGUkVRICAgICAgICAgIDB4QjUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0FVRElPQklUREVQVEggICAgICAgICAgICAgIDB4NjI2NAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUyAgICAgICAgICAgICAgMHg5RgotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUE9TSVRJT05TICAgICAgMHg3RDdCCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9BVURJT09VVFBVVFNBTVBMSU5HRlJFUSAgICAweDc4QjUKLQotLyogSURzIGluIHRoZSBUcmFja0NvbnRlbnRFbmNvZGluZyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRFTkNPRElORyAgICAgICAgICAgIDB4NjI0MAotCi0vKiBJRHMgaW4gdGhlIENvbnRlbnRFbmNvZGluZyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRFTkNPRElOR09SREVSICAgICAgIDB4NTAzMQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVEVOQ09ESU5HU0NPUEUgICAgICAgMHg1MDMyCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DT05URU5URU5DT0RJTkdUWVBFICAgICAgICAweDUwMzMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRDT01QUkVTU0lPTiAgICAgICAgIDB4NTAzNAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVEVOQ1JZUFRJT04gICAgICAgICAgMHg1MDM1Ci0KLS8qIElEcyBpbiB0aGUgQ29udGVudENvbXByZXNzaW9uIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVENPTVBBTEdPICAgICAgICAgICAgMHg0MjU0Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DT05URU5UQ09NUFNFVFRJTkdTICAgICAgICAweDQyNTUKLQotLyogSURzIGluIHRoZSBDb250ZW50RW5jcnlwdGlvbiBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRFTkNBTEdPICAgICAgICAgICAgIDB4NDdFMQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVEVOQ0tFWUlEICAgICAgICAgICAgMHg0N0UyCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DT05URU5UU0lHTkFUVVJFICAgICAgICAgICAweDQ3RTMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRTSUdLRVlJRCAgICAgICAgICAgIDB4NDdFNAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVFNJR0FMR08gICAgICAgICAgICAgMHg0N0U1Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DT05URU5UU0lHSEFTSEFMR08gICAgICAgICAweDQ3RTYKLQotLyogSUQgaW4gdGhlIENVRXMgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9QT0lOVEVOVFJZICAgICAgICAgICAgICAgICAweEJCCi0KLS8qIElEcyBpbiB0aGUgcG9pbnRlbnRyeSBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRVRJTUUgICAgICAgICAgICAgICAgICAgIDB4QjMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRVRSQUNLUE9TSVRJT05TICAgICAgICAgIDB4QjcKLQotLyogSURzIGluIHRoZSBDdWVUcmFja1Bvc2l0aW9ucyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRVRSQUNLICAgICAgICAgICAgICAgICAgIDB4RjcKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRUNMVVNURVJQT1NJVElPTiAgICAgICAgIDB4RjEKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRUJMT0NLTlVNQkVSICAgICAgICAgICAgIDB4NTM3OAotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ1VFQ09ERUNTVEFURSAgICAgICAgICAgICAgMHhFQQotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ1VFUkVGRVJFTkNFICAgICAgICAgICAgICAgMHhEQgotCi0vKiBJRHMgaW4gdGhlIEN1ZVJlZmVyZW5jZSBtYXN0ZXIgKi8KLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRVJFRlRJTUUgICAgICAgICAgICAgICAgIDB4OTYKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRVJFRkNMVVNURVIgICAgICAgICAgICAgIDB4OTcKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NVRVJFRk5VTUJFUiAgICAgICAgICAgICAgIDB4NTM1RgotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ1VFUkVGQ09ERUNTVEFURSAgICAgICAgICAgMHhFQgotCi0vKiBJRHMgaW4gdGhlIFRhZ3MgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UQUcgICAgICAgICAgICAgICAgICAgICAgICAweDczNzMKLQotLyogaW4gdGhlIFRhZyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NJTVBMRVRBRyAgICAgICAgICAgICAgICAgIDB4NjdDOAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVEFSR0VUUyAgICAgICAgICAgICAgICAgICAgMHg2M0MwCi0KLS8qIGluIHRoZSBTaW1wbGVUYWcgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UQUdOQU1FICAgICAgICAgICAgICAgICAgICAweDQ1QTMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RBR1NUUklORyAgICAgICAgICAgICAgICAgIDB4NDQ4NwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVEFHTEFOR1VBR0UgICAgICAgICAgICAgICAgMHg0NDdBCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UQUdERUZBVUxUICAgICAgICAgICAgICAgICAweDQ0ODQKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RBR0JJTkFSWSAgICAgICAgICAgICAgICAgIDB4NDQ4NQotCi0vKiBpbiB0aGUgVGFyZ2V0cyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RBUkdFVFRZUEVWQUxVRSAgICAgICAgICAgIDB4NjhDQQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVEFSR0VUVFlQRSAgICAgICAgICAgICAgICAgMHg2M0NBCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRUUkFDS1VJRCAgICAgICAgICAgICAweDYzQzUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1RBUkdFVEVESVRJT05VSUQgICAgICAgICAgIDB4NjNDOQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVEFSR0VUQ0hBUFRFUlVJRCAgICAgICAgICAgMHg2M0M0Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRBVFRBQ0hNRU5UVUlEICAgICAgICAweDYzQzYKLQotLyogSURzIGluIHRoZSBTZWVrSGVhZCBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NFRUtFTlRSWSAgICAgICAgICAgICAgICAgIDB4NERCQgotCi0vKiBJRHMgaW4gdGhlIFNlZWtFbnRyeSBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NFRUtJRCAgICAgICAgICAgICAgICAgICAgIDB4NTNBQgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfU0VFS1BPU0lUSU9OICAgICAgICAgICAgICAgMHg1M0FDCi0KLS8qIElEcyBpbiB0aGUgQ2x1c3RlciBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NMVVNURVJUSU1FQ09ERSAgICAgICAgICAgIDB4RTcKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0JMT0NLR1JPVVAgICAgICAgICAgICAgICAgIDB4QTAKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NJTVBMRUJMT0NLICAgICAgICAgICAgICAgIDB4QTMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1JFRkVSRU5DRUJMT0NLICAgICAgICAgICAgIDB4RkIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgIDB4QTcKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1BSRVZTSVpFICAgICAgICAgICAgICAgICAgIDB4QUIKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0VOQ1JZUFRFREJMT0NLICAgICAgICAgICAgIDB4QUYKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NJTEVOVFRSQUNLUyAgICAgICAgICAgICAgIDB4NTg1NAotCi0vKiBJRHMgaW4gdGhlIFNpbGVudFRyYWNrcyBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NJTEVOVFRSQUNLTlVNQkVSICAgICAgICAgIDB4NThENwotCi0vKiBJRHMgaW4gdGhlIEJsb2NrR3JvdXAgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9CTE9DSyAgICAgICAgICAgICAgICAgICAgICAweEExCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9CTE9DS0RVUkFUSU9OICAgICAgICAgICAgICAweDlCCi0vKiBzZW1pLWRyYWZ0ICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9CTE9DS1ZJUlRVQUwgICAgICAgICAgICAgICAweEEyCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9SRUZFUkVOQ0VCTE9DSyAgICAgICAgICAgICAweEZCCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9CTE9DS0FERElUSU9OUyAgICAgICAgICAgICAweDc1QTEKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1JFRkVSRU5DRVBSSU9SSVRZICAgICAgICAgIDB4RkEKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1JFRkVSRU5DRVZJUlRVQUwgICAgICAgICAgIDB4RkQKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NPREVDU1RBVEUgICAgICAgICAgICAgICAgIDB4QTQKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX1NMSUNFUyAgICAgICAgICAgICAgICAgICAgIDB4OEUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0RJU0NBUkRQQURESU5HICAgICAgICAgICAgIDB4NzVBMgotCi0vKiBJRHMgaW4gdGhlIEJsb2NrQWRkaXRpb25zIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQkxPQ0tNT1JFICAgICAgICAgICAgICAgICAgMHhBNgotCi0vKiBJRHMgaW4gdGhlIEJsb2NrTW9yZSBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0JMT0NLQURESUQgICAgICAgICAgICAgICAgIDB4RUUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0JMT0NLQURESVRJT05BTCAgICAgICAgICAgIDB4QTUKLQotLyogSURzIGluIHRoZSBTbGljZXMgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9USU1FU0xJQ0UgICAgICAgICAgICAgICAgICAweEU4Ci0KLS8qIElEcyBpbiB0aGUgVGltZVNsaWNlIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfTEFDRU5VTUJFUiAgICAgICAgICAgICAgICAgMHhDQwotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfRlJBTUVOVU1CRVIgICAgICAgICAgICAgICAgMHhDRAotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQkxPQ0tBRERJVElPTklEICAgICAgICAgICAgMHhDQgotLyogc2VtaS1kcmFmdCAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVElNRVNMSUNFREVMQVkgICAgICAgICAgICAgMHhDRQotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfVElNRVNMSUNFRFVSQVRJT04gICAgICAgICAgMHhDRgotCi0vKiBJRHMgaW4gdGhlIEF0dGFjaG1lbnRzIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQVRUQUNIRURGSUxFICAgICAgICAgICAgICAgMHg2MUE3Ci0KLS8qIElEcyBpbiB0aGUgQXR0YWNoZWRGaWxlIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfRklMRURFU0NSSVBUSU9OICAgICAgICAgICAgMHg0NjdFCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9GSUxFTkFNRSAgICAgICAgICAgICAgICAgICAweDQ2NkUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0ZJTEVNSU1FVFlQRSAgICAgICAgICAgICAgIDB4NDY2MAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfRklMRURBVEEgICAgICAgICAgICAgICAgICAgMHg0NjVDCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9GSUxFVUlEICAgICAgICAgICAgICAgICAgICAweDQ2QUUKLS8qIHNlbWktZHJhZnQgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0ZJTEVSRUZFUlJBTCAgICAgICAgICAgICAgIDB4NDY3NQotCi0vKiBJRHMgaW4gdGhlIENoYXB0ZXJzIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfRURJVElPTkVOVFJZICAgICAgICAgICAgICAgMHg0NUI5Ci0KLS8qIElEcyBpbiB0aGUgRWRpdGlvbkVudHJ5IG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfRURJVElPTlVJRCAgICAgICAgICAgICAgICAgMHg0NUJDCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9FRElUSU9ORkxBR0hJRERFTiAgICAgICAgICAweDQ1QkQKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0VESVRJT05GTEFHREVGQVVMVCAgICAgICAgIDB4NDVEQgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfRURJVElPTkZMQUdPUkRFUkVEICAgICAgICAgMHg0NURECi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSQVRPTSAgICAgICAgICAgICAgICAweEI2Ci0KLS8qIElEcyBpbiB0aGUgQ2hhcHRlckF0b20gbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSVUlEICAgICAgICAgICAgICAgICAweDczQzQKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUSU1FU1RBUlQgICAgICAgICAgIDB4OTEKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUSU1FU1RPUCAgICAgICAgICAgIDB4OTIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJGTEFHSElEREVOICAgICAgICAgIDB4OTgKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJGTEFHRU5BQkxFRCAgICAgICAgIDB4NDU5OAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlNFR01FTlRVSUQgICAgICAgICAgMHg2RTY3Ci0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSU0VHTUVOVEVESVRJT05VSUQgICAweDZFQkMKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJQSFlTSUNBTEVRVUlWICAgICAgIDB4NjNDMwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlRSQUNLICAgICAgICAgICAgICAgMHg4RgotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUkRJU1BMQVkgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFBST0NFU1MgICAgICAgICAgICAgICAgMHg2OTQ0Ci0KLS8qIElEcyBpbiB0aGUgQ2hhcFByb2Nlc3MgbWFzdGVyICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DSEFQUFJPQ0VTU0NPREVDSUQgICAgICAgICAweDY5NTUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBQUk9DRVNTUFJJVkFURSAgICAgICAgIDB4NDUwRAotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFBST0NFU1NDT01NQU5EICAgICAgICAgMHg2OTExCi0KLS8qIElEcyBpbiB0aGUgQ2hhcFByb2Nlc3NDb21tYW5kIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFBST0NFU1NUSU1FICAgICAgICAgICAgMHg2OTIyCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9JRF9DSEFQUFJPQ0VTU0RBVEEgICAgICAgICAgICAweDY5MzMKLQotLyogSURzIGluIHRoZSBDaGFwdGVyRGlzcGxheSBtYXN0ZXIgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBTVFJJTkcgICAgICAgICAgICAgICAgIDB4ODUKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0lEX0NIQVBMQU5HVUFHRSAgICAgICAgICAgICAgIDB4NDM3QwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUENPVU5UUlkgICAgICAgICAgICAgICAgMHg0MzdFCi0KLS8qIElEcyBpbiB0aGUgQ2hhcHRlclRyYWNrIG1hc3RlciAqLwotI2RlZmluZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlRSQUNLTlVNQkVSICAgICAgICAgMHg4OQotCi0vKgotICogTWF0cm9za2EgQ29kZWMgSURzLiBTdHJpbmdzLgotICovCi0KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1ZGV19GT1VSQ0MgICAiVl9NUy9WRlcvRk9VUkNDIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVU5DT01QUkVTU0VEICJWX1VOQ09NUFJFU1NFRCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUc0X1NQICAgICAiVl9NUEVHNC9JU08vU1AiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NUEVHNF9BU1AgICAgIlZfTVBFRzQvSVNPL0FTUCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUc0X0FQICAgICAiVl9NUEVHNC9JU08vQVAiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NUEVHNF9BVkMgICAgIlZfTVBFRzQvSVNPL0FWQyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01TTVBFRzRWMyAgICAiVl9NUEVHNC9NUy9WMyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUcxICAgICAgICAiVl9NUEVHMSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX01QRUcyICAgICAgICAiVl9NUEVHMiIKLS8qIEZJWE1FOiBub3QgKHlldCkgaW4gdGhlIHNwZWMhICovCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NSlBFRyAgICAgICAgIlZfTUpQRUciCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19SRUFMVklERU8xICAgIlZfUkVBTC9SVjEwIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPMiAgICJWX1JFQUwvUlYyMCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1JFQUxWSURFTzMgICAiVl9SRUFML1JWMzAiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19SRUFMVklERU80ICAgIlZfUkVBTC9SVjQwIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVEhFT1JBICAgICAgICJWX1RIRU9SQSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1FVSUNLVElNRSAgICAiVl9RVUlDS1RJTUUiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19TTk9XICAgICAgICAgIlZfU05PVyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX0RJUkFDICAgICAgICAiVl9ESVJBQyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1ZQOCAgICAgICAgICAiVl9WUDgiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19WUDkgICAgICAgICAgIlZfVlA5IgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFR0hfSEVWQyAgICJWX01QRUdIL0lTTy9IRVZDIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUFJPUkVTICAgICAgICJWX1BST1JFUyIKLQotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fTVBFRzFfTDEgICAgICAgIkFfTVBFRy9MMSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX01QRUcxX0wyICAgICAgICJBX01QRUcvTDIiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19NUEVHMV9MMyAgICAgICAiQV9NUEVHL0wzIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUENNX0lOVF9CRSAgICAgIkFfUENNL0lOVC9CSUciCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19QQ01fSU5UX0xFICAgICAiQV9QQ00vSU5UL0xJVCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1BDTV9GTE9BVCAgICAgICJBX1BDTS9GTE9BVC9JRUVFIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUMzICAgICAgICAgICAgIkFfQUMzIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUMzX0JTSUQ5ICAgICAgIkFfQUMzL0JTSUQ5IgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUMzX0JTSUQxMCAgICAgIkFfQUMzL0JTSUQxMCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0VBQzMgICAgICAgICAgICJBX0VBQzMiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19UUlVFSEQgICAgICAgICAiQV9UUlVFSEQiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19EVFMgICAgICAgICAgICAiQV9EVFMiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19WT1JCSVMgICAgICAgICAiQV9WT1JCSVMiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19GTEFDICAgICAgICAgICAiQV9GTEFDIgotLyogRklYTUU6IG5vdCB5ZXQgaW4gdGhlIHNwZWMgKi8KLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1NQRUVYICAgICAgICAgICJBX1NQRUVYIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUNNICAgICAgICAgICAgIkFfTVMvQUNNIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fVFRBICAgICAgICAgICAgIkFfVFRBMSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1dBVlBBQ0s0ICAgICAgICJBX1dBVlBBQ0s0IgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF8xNF80ICAgICAgIkFfUkVBTC8xNF80IgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF8yOF84ICAgICAgIkFfUkVBTC8yOF84IgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF9DT09LICAgICAgIkFfUkVBTC9DT09LIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF9TSVBSICAgICAgIkFfUkVBTC9TSVBSIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF9SQUxGICAgICAgIkFfUkVBTC9SQUxGIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF9BVFJDICAgICAgIkFfUkVBTC9BVFJDIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUFDICAgICAgICAgICAgIkFfQUFDIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUFDX01QRUcyICAgICAgIkFfQUFDL01QRUcyLyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FBQ19NUEVHNCAgICAgICJBX0FBQy9NUEVHNC8iCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19RVUlDS1RJTUVfUURNQyAiQV9RVUlDS1RJTUUvUURNQyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1FVSUNLVElNRV9RRE0yICJBX1FVSUNLVElNRS9RRE0yIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fT1BVUyAgICAgICAgICAgIkFfT1BVUyIKLS8qIFVuZGVmaW5lZCBmb3Igbm93OgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fTVBDICAgICAgICAgICAgIkFfTVBDIgotKi8KLQotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfQVNDSUkgICAgICJTX1RFWFQvQVNDSUkiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9VVEY4ICAgICAgIlNfVEVYVC9VVEY4IgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfU1NBICAgICAgICJTX1RFWFQvU1NBIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfQVNTICAgICAgICJTX1RFWFQvQVNTIiAKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX1VTRiAgICAgICAiU19URVhUL1VTRiIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX1ZPQlNVQiAgICAiU19WT0JTVUIiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9IRE1WUEdTICAgIlNfSERNVi9QR1MiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9CTVAgICAgICAgIlNfSU1BR0UvQk1QIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfS0FURSAgICAgICJTX0tBVEUiCi0KLS8qCi0gKiBNYXRyb3NrYSB0YWdzLiBTdHJpbmdzLgotICovCi0KLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9USVRMRSAgICAiVElUTEUiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfQVVUSE9SICAgIkFVVEhPUiIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9BUlRJU1QgICAiQVJUSVNUIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0FMQlVNICAgICJBTEJVTSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9DT01NRU5UUyAiQ09NTUVOVFMiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfQ09NTUVOVCAgIkNPTU1FTlQiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfQklUU1BTICAgIkJJVFNQUyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9CUFMgICAgICAiQlBTIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0VOQ09ERVIgICJFTkNPREVSIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0lTUkMgICAgICJJU1JDIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0NPUFlSSUdIVCAiQ09QWVJJR0hUIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0JQTSAgICAgICAiQlBNIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX1RFUk1TX09GX1VTRSAiVEVSTVNfT0ZfVVNFIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEUgICAgICAiREFURSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9DT01QT1NFUiAgIkNPTVBPU0VSIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0xFQURfUEVSRk9STUVSICAiTEVBRF9QRVJGT01FUiIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9HRU5SRSAgICAgIkdFTlJFIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX1RPVEFMX1BBUlRTICJUT1RBTF9QQVJUUyIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9QQVJUX05VTUJFUiAiUEFSVF9OVU1CRVIiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfU1VCVElUTEUgIlNVQlRJVExFIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0FDQ09NUEFOSU1FTlQgIkFDQ09NUEFOSU1FTlQiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfTFlSSUNTICJMWVJJQ1MiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfQ09ORFVDVE9SICJDT05EVUNUT1IiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfRU5DT0RFRF9CWSAiRU5DT0RFRF9CWSIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9ERVNDUklQVElPTiAiREVTQ1JJUFRJT04iCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfS0VZV09SRFMgIktFWVdPUkRTIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfUkVMRUFTRUQgIkRBVEVfUkVMRUFTRUQiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfREFURV9SRUNPUkRFRCAiREFURV9SRUNPUkRFRCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9EQVRFX0VOQ09ERUQgIkRBVEVfRU5DT0RFRCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9EQVRFX1RBR0dFRCAiREFURV9UQUdHRUQiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfREFURV9ESUdJVElaRUQgIkRBVEVfRElHSVRJWkVEIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfV1JJVFRFTiAiREFURV9XUklUVEVOIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfUFVSQ0hBU0VEICJEQVRFX1BVUkNIQVNFRCIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9SRUNPUkRJTkdfTE9DQVRJT04gIlJFQ09SRElOR19MT0NBVElPTiIKLSNkZWZpbmUgR1NUX01BVFJPU0tBX1RBR19JRF9QUk9EVUNUSU9OX0NPUFlSSUdIVCAiUFJPRFVDVElPTl9DT1BZUklHSFQiCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9UQUdfSURfTElDRU5TRSAiTElDRU5TRSIKLQotLyoKLSAqIFRPRE86IGFkZCB0aGlzIHRhZyAmIG1hcHBpbmdzCi0gKiAiUkVQTEFZR0FJTl9HQUlOIiAtPiBHU1RfVEFHXypfR0FJTiAgIHNlZSBodHRwOi8vcmVwbGF5Z2Fpbi5oeWRyb2dlbmF1ZGlvLm9yZy9yZ19kYXRhX2Zvcm1hdC5odG1sCi0gKiAiUkVQTEFZR0FJTl9QRUFLIiAtPiBHU1RfVEFHXypfUEVBSyAgIHNlZSBodHRwOi8vcmVwbGF5Z2Fpbi5oeWRyb2dlbmF1ZGlvLm9yZy9wZWFrX2RhdGFfZm9ybWF0Lmh0bWwKLSAqIGJvdGggYXJlIGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0ICh0cmFjaywgYWxidW0/KQotICoKLSAqICJUT1RBTF9QQVJUUyIgLT4gR1NUX1RBR19UUkFDS19DT1VOVCAgICBkZXBlbmRpbmcgb24gdGFyZ2V0Ci0gKiAiUEFSVF9OVU1CRVIiIC0+IEdTVF9UQUdfVFJBQ0tfTlVNQkVSICAgZGVwZW5kaW5nIG9uIHRhcmdldAotICoKLSAqICJTT1JUX1dJVEgiIC0+IG5lc3RlZCBpbiBvdGhlciBlbGVtZW50cywgR1NUX1RBR19USVRMRV9TT1JUTkFNRSwgZXRjCi0gKgotICogVE9ETzogbWF5YmUgYWRkIGN1c3RvbSBnc3RyZWFtZXIgdGFncyBmb3Igb3RoZXIgc3RhbmRhcmQgbWF0cm9za2EgdGFncywKLSAqIHNlZSBodHRwOi8vbWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy90YWdnaW5nL2luZGV4Lmh0bWwKLSAqCi0gKiBUT0RPOiBoYW5kbGUgdGFnIHRhcmdldHMgYW5kIG5lc3RpbmcgY29ycmVjdGx5Ci0gKi8KLQotLyoKLSAqIEVudW1lcmF0aW9ucyBmb3IgdmFyaW91cyB0eXBlcyAobWFwcGluZyBmcm9tIGJpbmFyeQotICogdmFsdWUgdG8gd2hhdCBpdCBhY3R1YWxseSBtZWFucykuCi0gKi8KLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfVklERU8gICAgPSAweDEsCi0gIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0FVRElPICAgID0gMHgyLAotICBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9DT01QTEVYICA9IDB4MywKLSAgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfTE9HTyAgICAgPSAweDEwLAotICBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9TVUJUSVRMRSA9IDB4MTEsCi0gIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0JVVFRPTlMgID0gMHgxMiwKLSAgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQ09OVFJPTCAgPSAweDIwLAotfSBHc3RNYXRyb3NrYVRyYWNrVHlwZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX01BVFJPU0tBX0FTUEVDVF9SQVRJT19NT0RFX0ZSRUUgID0gMHgwLAotICBHU1RfTUFUUk9TS0FfQVNQRUNUX1JBVElPX01PREVfS0VFUCAgPSAweDEsCi0gIEdTVF9NQVRST1NLQV9BU1BFQ1RfUkFUSU9fTU9ERV9GSVhFRCA9IDB4MiwKLX0gR3N0TWF0cm9za2FBc3BlY3RSYXRpb01vZGU7Ci0KLS8qCi0gKiBUaGVzZSBhcmVuJ3QgaW4gYW55IHdheSAibWF0cm9za2EtZm9ybSIgdGhpbmdzLAotICogaXQncyBqdXN0IHNvbWV0aGluZyBJIHVzZSBpbiB0aGUgbXV4ZXIvZGVtdXhlci4KLSAqLwotCi10eXBlZGVmIGVudW0gewotICBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRCA9ICgxPDwwKSwKLSAgR1NUX01BVFJPU0tBX1RSQUNLX0RFRkFVTFQgPSAoMTw8MSksCi0gIEdTVF9NQVRST1NLQV9UUkFDS19MQUNJTkcgID0gKDE8PDIpLAotICBHU1RfTUFUUk9TS0FfVFJBQ0tfRk9SQ0VEICA9ICgxPDwzKSwKLSAgR1NUX01BVFJPU0tBX1RSQUNLX1NISUZUICAgPSAoMTw8MTYpCi19IEdzdE1hdHJvc2thVHJhY2tGbGFnczsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX01BVFJPU0tBX1ZJREVPVFJBQ0tfSU5URVJMQUNFRCA9IChHU1RfTUFUUk9TS0FfVFJBQ0tfU0hJRlQ8PDApCi19IEdzdE1hdHJvc2thVmlkZW9UcmFja0ZsYWdzOwotCi10eXBlZGVmIGVudW0gewotICBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfU0JTX0xSICAgICAgPSAweDEsCi0gIEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9UQl9STCAgICAgICA9IDB4MiwKLSAgR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX1RCX0xSICAgICAgID0gMHgzLAotICBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfQ0hFQ0tFUl9STCAgPSAweDQsCi0gIEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9DSEVDS0VSX0xSICA9IDB4NSwKLSAgR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX1NCU19STCAgICAgID0gMHg5LAotICBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfRkJGX0xSICAgICAgPSAweEQsCi0gIEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9GQkZfUkwgICAgICA9IDB4RQotfSBHc3RNYXRyb3NrYVN0ZXJlb01vZGU7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNYXRyb3NrYVRyYWNrQ29udGV4dCBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dDsKLQotLyogVE9ETzogY2hlY2sgaWYgYWxsIGZpZWxkcyBhcmUgdXNlZCAqLwotc3RydWN0IF9Hc3RNYXRyb3NrYVRyYWNrQ29udGV4dCB7Ci0gIEdzdFBhZCAgICAgICAqcGFkOwotICBHc3RDYXBzICAgICAgKmNhcHM7Ci0gIGd1aW50ICAgICAgICAgaW5kZXg7Ci0gIC8qIHJldmVyc2UgcGxheWJhY2sgKi8KLSAgR3N0Q2xvY2tUaW1lICBmcm9tX3RpbWU7Ci0gIGdpbnQ2NCAgICAgICAgICAgICAgICAgICBmcm9tX29mZnNldDsKLSAgZ2ludDY0ICAgICAgICAgICAgICAgICAgIHRvX29mZnNldDsKLQotICBHQXJyYXkgICAgICAgKmluZGV4X3RhYmxlOwotCi0gIGdpbnQgICAgICAgICAgaW5kZXhfd3JpdGVyX2lkOwotCi0gIC8qIHNvbWUgb2Z0ZW4tdXNlZCBpbmZvICovCi0gIGdjaGFyICAgICAgICAqY29kZWNfaWQsICpjb2RlY19uYW1lLCAqbmFtZSwgKmxhbmd1YWdlOwotICBncG9pbnRlciAgICAgIGNvZGVjX3ByaXY7Ci0gIGdzaXplICAgICAgICAgY29kZWNfcHJpdl9zaXplOwotICBncG9pbnRlciAgICAgIGNvZGVjX3N0YXRlOwotICBnc2l6ZSAgICAgICAgIGNvZGVjX3N0YXRlX3NpemU7Ci0gIEdzdE1hdHJvc2thVHJhY2tUeXBlIHR5cGU7Ci0gIGd1aW50NjQgICAgICAgdWlkLCBudW07Ci0gIEdzdE1hdHJvc2thVHJhY2tGbGFncyBmbGFnczsKLSAgZ3VpbnQ2NCAgICAgICBkZWZhdWx0X2R1cmF0aW9uOwotICBndWludDY0ICAgICAgIHBvczsKLSAgZ2RvdWJsZSAgICAgICB0aW1lY29kZXNjYWxlOwotICBndWludDY0ICAgICAgIHNlZWtfcHJlcm9sbDsKLSAgZ3VpbnQ2NCAgICAgICBjb2RlY19kZWxheTsKLQotICBnYm9vbGVhbiAgICAgIHNldF9kaXNjb250OyAvKiBUUlVFID0gc2V0IERJU0NPTlQgZmxhZyBvbiBuZXh0IGJ1ZmZlciAqLwotCi0gIC8qIFN0cmVhbSBoZWFkZXIgYnVmZmVyLCB0byBwdXQgaW50byBjYXBzIGFuZCBzZW5kIGJlZm9yZSBhbnkgb3RoZXIgYnVmZmVycyAqLwotICBHc3RCdWZmZXJMaXN0ICogc3RyZWFtX2hlYWRlcnM7Ci0gIGdib29sZWFuICAgICAgICBzZW5kX3N0cmVhbV9oZWFkZXJzOwotCi0gIC8qIFNwZWNpYWwgZmxhZyBmb3IgVm9iU3ViLCBmb3Igd2hpY2ggd2UgaGF2ZSB0byBzZW5kIGNvbG91ciB0YWJsZSBpbmZvCi0gICAqIChpZiBhdmFpbGFibGUpIGZpcnN0IGJlZm9yZSBzZW5kaW5nIGFueSBkYXRhLCBhbmQganVzdCB0ZXN0aW5nCi0gICAqIGZvciB0aW1lID09IDAgaXMgbm90IGVub3VnaCB0byBkZXRlY3QgdGhhdC4gVXNlZCBieSBkZW11eGVyICovCi0gIGdib29sZWFuICAgICAgc2VuZF9kdmRfZXZlbnQ7Ci0KLSAgLyogU3BlY2lhbCBjb3VudGVyIGZvciBtdXhlciB0byBza2lwIHRoZSBmaXJzdCBOIHZvcmJpcy90aGVvcmEgaGVhZGVycyAtCi0gICAqIHRoZXkgYXJlIHB1dCBpbnRvIGNvZGVjIHByaXZhdGUgZGF0YSwgbm90IG11eGVkIGludG8gdGhlIHN0cmVhbSAqLwotICBndWludCAgICAgICAgIHhpcGhfaGVhZGVyc190b19za2lwOwotCi0gIC8qIFVzZWQgZm9yIHBvc3Rwcm9jZXNzaW5nIGEgZnJhbWUgYmVmb3JlIGl0IGlzIHB1c2hlZCBmcm9tIHRoZSBkZW11eGVyICovCi0gIEdzdEZsb3dSZXR1cm4gKCpwb3N0cHJvY2Vzc19mcmFtZSkgKEdzdEVsZW1lbnQgKmVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0LAotCQkJCSAgICAgIEdzdEJ1ZmZlciAqKmJ1ZmZlcik7Ci0KLSAgLyogTGlzdCBvZiB0YWdzIGZvciB0aGlzIHN0cmVhbSAqLwotICBHc3RUYWdMaXN0ICAgKnRhZ3M7Ci0gIC8qIFRhZ3MgY2hhbmdlZCBhbmQgc2hvdWxkIGJlIHB1c2hlZCBhZ2FpbiAqLwotICBnYm9vbGVhbiAgICAgIHRhZ3NfY2hhbmdlZDsKLQotICAvKiBBIEdBcnJheSBvZiBHc3RNYXRyb3NrYVRyYWNrRW5jb2Rpbmcgc3RydWN0dXJlcyB3aGljaCBjb250YWluIHRoZQotICAgKiBlbmNvZGluZyAoY29tcHJlc3Npb24vZW5jcnlwdGlvbikgc2V0dGluZ3MgZm9yIHRoaXMgdHJhY2ssIGlmIGFueSAqLwotICBHQXJyYXkgICAgICAgKmVuY29kaW5nczsKLQotICAvKiBXaGV0aGVyIHRoZSBzdHJlYW0gaXMgRU9TICovCi0gIGdib29sZWFuICAgICAgZW9zOwotCi0gIC8qIGFueSBhbGlnbm1lbnQgd2UgbmVlZCBvdXIgb3V0cHV0IGJ1ZmZlcnMgdG8gaGF2ZSAqLwotICBnaW50ICAgICAgICAgIGFsaWdubWVudDsKLSAgCi0gIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVkZXIGZpbGVzLCB3aGVyZSB0aW1lc3RhbXAgcmVwcmVzZW50cyBEVFMgKi8KLSAgZ2Jvb2xlYW4gICAgICBkdHNfb25seTsKLSAgCi0gIC8qIGluZGljYXRlIHRoYXQgdGhlIHRyYWNrIGlzIHJhdyAoanBlZyxyYXcgdmFyaWFudHMpIGFuZCBzbyBwdHM9ZHRzICovCi0gIGdib29sZWFuCQlpbnRyYV9vbmx5OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQgewotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCBwYXJlbnQ7Ci0KLSAgZ3VpbnQgICAgICAgICBwaXhlbF93aWR0aCwgcGl4ZWxfaGVpZ2h0OwotICBndWludCAgICAgICAgIGRpc3BsYXlfd2lkdGgsIGRpc3BsYXlfaGVpZ2h0OwotICBnZG91YmxlICAgICAgIGRlZmF1bHRfZnBzOwotICBHc3RNYXRyb3NrYUFzcGVjdFJhdGlvTW9kZSBhc3JfbW9kZTsKLSAgZ3VpbnQzMiAgICAgICBmb3VyY2M7Ci0KLSAgR3N0VmlkZW9NdWx0aXZpZXdNb2RlIG11bHRpdmlld19tb2RlOwotICBHc3RWaWRlb011bHRpdmlld0ZsYWdzIG11bHRpdmlld19mbGFnczsKLQotICAvKiBRb1MgKi8KLSAgR3N0Q2xvY2tUaW1lICBlYXJsaWVzdF90aW1lOwotCi0gIEdzdEJ1ZmZlciAgICAgKmRpcmFjX3VuaXQ7Ci19IEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0IHsKLSAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgcGFyZW50OwotCi0gIGd1aW50ICAgICAgICAgc2FtcGxlcmF0ZSwgY2hhbm5lbHMsIGJpdGRlcHRoOwotCi0gIGd1aW50MzIgICAgICAgd3Zwa19ibG9ja19pbmRleDsKLX0gR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hdHJvc2thVHJhY2tTdWJ0aXRsZUNvbnRleHQgewotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCBwYXJlbnQ7Ci0KLSAgZ2Jvb2xlYW4gICAgY2hlY2tfdXRmODsgICAgIC8qIGJ1ZmZlcnMgc2hvdWxkIGJlIHZhbGlkIFVURi04ICovCi0gIGdib29sZWFuICAgIGNoZWNrX21hcmt1cDsgICAvKiBjaGVjayBpZiBidWZmZXJzIGNvbnRhaW4gbWFya3VwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvciBwbGFpbnRleHQgYW5kIGVzY2FwZSBjaGFyYWN0ZXJzICovCi0gIGdib29sZWFuICAgIGludmFsaWRfdXRmODsgICAvKiB3b3JrIGFyb3VuZCBicm9rZW4gZmlsZXMgICAgICAqLwotICBnYm9vbGVhbiAgICBzZWVuX21hcmt1cF90YWc7ICAvKiBtYXJrdXAgZm91bmQgaW4gdGV4dCAqLwotfSBHc3RNYXRyb3NrYVRyYWNrU3VidGl0bGVDb250ZXh0OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0TWF0cm9za2FJbmRleCB7Ci0gIGd1aW50NjQgICAgICAgIHBvczsgICAgICAvKiBvZiB0aGUgY29ycmVzcG9uZGluZyAqY2x1c3RlciohICovCi0gIGd1aW50MTYgICAgICAgIHRyYWNrOyAgICAvKiByZWZlcmVuY2UgdG8gJ251bScgKi8KLSAgR3N0Q2xvY2tUaW1lICAgdGltZTsgICAgIC8qIGluIG5hbm9zZWNvbmRzICovCi0gIGd1aW50MzIgICAgICAgIGJsb2NrOyAgICAvKiBudW1iZXIgb2YgdGhlIGJsb2NrIGluIHRoZSBjbHVzdGVyICovCi19IEdzdE1hdHJvc2thSW5kZXg7Ci0KLXR5cGVkZWYgc3RydWN0IF9XYXZwYWNrNEhlYWRlciB7Ci0gIGd1Y2hhciAgY2tfaWQgWzRdOyAgICAgLyogInd2cGsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBndWludDMyIGNrX3NpemU7ICAgICAgIC8qIHNpemUgb2YgZW50aXJlIGZyYW1lIChtaW51cyA4LCBvZiBjb3Vyc2UpICAgICAgKi8KLSAgZ3VpbnQxNiB2ZXJzaW9uOyAgICAgICAvKiAweDQwMyBmb3Igbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIGd1aW50OCAgdHJhY2tfbm87ICAgICAgLyogdHJhY2sgbnVtYmVyICgwIGlmIG5vdCB1c2VkLCBsaWtlIG5vdykgICAgICAgICAqLwotICBndWludDggIGluZGV4X25vOyAgICAgIC8qIHJlbWVtYmVyIHRoZXNlPyAoMCBpZiBub3QgdXNlZCwgbGlrZSBub3cpICAgICAgKi8KLSAgZ3VpbnQzMiB0b3RhbF9zYW1wbGVzOyAvKiBmb3IgZW50aXJlIGZpbGUgKC0xIGlmIHVua25vd24pICAgICAgICAgICAgICAgICovCi0gIGd1aW50MzIgYmxvY2tfaW5kZXg7ICAgLyogaW5kZXggb2YgZmlyc3Qgc2FtcGxlIGluIGJsb2NrICh0byBmaWxlIGJlZ2luKSAqLwotICBndWludDMyIGJsb2NrX3NhbXBsZXM7IC8qICMgc2FtcGxlcyBpbiB0aGlzIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgZ3VpbnQzMiBmbGFnczsgICAgICAgICAvKiB2YXJpb3VzIGZsYWdzIGZvciBpZCBhbmQgZGVjb2RpbmcgICAgICAgICAgICAgICovCi0gIGd1aW50MzIgY3JjOyAgICAgICAgICAgLyogY3JjIGZvciBhY3R1YWwgZGVjb2RlZCBkYXRhICAgICAgICAgICAgICAgICAgICAqLwotfSBXYXZwYWNrNEhlYWRlcjsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX01BVFJPU0tBX1RSQUNLX0VOQ09ESU5HX1NDT1BFX0ZSQU1FID0gKDE8PDApLAotICBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5DT0RJTkdfU0NPUEVfQ09ERUNfREFUQSA9ICgxPDwxKSwKLSAgR1NUX01BVFJPU0tBX1RSQUNLX0VOQ09ESU5HX1NDT1BFX05FWFRfQ09OVEVOVF9FTkNPRElORyA9ICgxPDwyKQotfSBHc3RNYXRyb3NrYVRyYWNrRW5jb2RpbmdTY29wZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX01BVFJPU0tBX1RSQUNLX0NPTVBSRVNTSU9OX0FMR09SSVRITV9aTElCID0gMCwKLSAgR1NUX01BVFJPU0tBX1RSQUNLX0NPTVBSRVNTSU9OX0FMR09SSVRITV9CWkxJQiA9IDEsCi0gIEdTVF9NQVRST1NLQV9UUkFDS19DT01QUkVTU0lPTl9BTEdPUklUSE1fTFpPMVggPSAyLAotICBHU1RfTUFUUk9TS0FfVFJBQ0tfQ09NUFJFU1NJT05fQUxHT1JJVEhNX0hFQURFUlNUUklQID0gMwotfSBHc3RNYXRyb3NrYVRyYWNrQ29tcHJlc3Npb25BbGdvcml0aG07Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNYXRyb3NrYVRyYWNrRW5jb2RpbmcgewotICBndWludCAgIG9yZGVyOwotICBndWludCAgIHNjb3BlICAgICA6IDM7Ci0gIGd1aW50ICAgdHlwZSAgICAgIDogMTsKLSAgZ3VpbnQgICBjb21wX2FsZ28gOiAyOwotICBndWludDggKmNvbXBfc2V0dGluZ3M7Ci0gIGd1aW50ICAgY29tcF9zZXR0aW5nc19sZW5ndGg7Ci19IEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZzsKLQotZ2Jvb2xlYW4gZ3N0X21hdHJvc2thX3RyYWNrX2luaXRfdmlkZW9fY29udGV4dCAgICAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiogcF9jb250ZXh0KTsKLWdib29sZWFuIGdzdF9tYXRyb3NrYV90cmFja19pbml0X2F1ZGlvX2NvbnRleHQgICAgKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICoqIHBfY29udGV4dCk7Ci1nYm9vbGVhbiBnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9zdWJ0aXRsZV9jb250ZXh0IChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqKiBwX2NvbnRleHQpOwotCi12b2lkIGdzdF9tYXRyb3NrYV9yZWdpc3Rlcl90YWdzICh2b2lkKTsKLQotR3N0QnVmZmVyTGlzdCAqIGdzdF9tYXRyb3NrYV9wYXJzZV94aXBoX3N0cmVhbV9oZWFkZXJzICAoZ3BvaW50ZXIgY29kZWNfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIGNvZGVjX2RhdGFfc2l6ZSk7Ci0KLUdzdEJ1ZmZlckxpc3QgKiBnc3RfbWF0cm9za2FfcGFyc2Vfc3BlZXhfc3RyZWFtX2hlYWRlcnMgKGdwb2ludGVyIGNvZGVjX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBjb2RlY19kYXRhX3NpemUpOwotCi1Hc3RCdWZmZXJMaXN0ICogZ3N0X21hdHJvc2thX3BhcnNlX29wdXNfc3RyZWFtX2hlYWRlcnMgIChncG9pbnRlciBjb2RlY19kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgY29kZWNfZGF0YV9zaXplKTsKLQotR3N0QnVmZmVyTGlzdCAqIGdzdF9tYXRyb3NrYV9wYXJzZV9mbGFjX3N0cmVhbV9oZWFkZXJzICAoZ3BvaW50ZXIgY29kZWNfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIGNvZGVjX2RhdGFfc2l6ZSk7Ci12b2lkIGdzdF9tYXRyb3NrYV90cmFja19mcmVlIChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHRyYWNrKTsKLUdzdENsb2NrVGltZSBnc3RfbWF0cm9za2FfdHJhY2tfZ2V0X2J1ZmZlcl90aW1lc3RhbXAgKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogdHJhY2ssIEdzdEJ1ZmZlciAqYnVmKTsKLQotI2VuZGlmIC8qIF9fR1NUX01BVFJPU0tBX0lEU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYyBiL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxNjEyZS4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTY4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBNYXRyb3NrYSBtdXhlci9kZW11eGVyCi0gKiAoYykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAoYykgMjAwNSBNaWNoYWwgQmVuZXMgPG1pY2hhbC5iZW5lc0B4ZXJpcy5jej4KLSAqIChjKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICogKGMpIDIwMTEgTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogbWF0cm9za2EtbXV4LmM6IG1hdHJvc2thIGZpbGUvc3RyZWFtIG11eGVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVE9ETzogLSBjaGVjayBldmVyeXdoZXJlIHRoYXQgd2UgZG9uJ3Qgd3JpdGUgaW52YWxpZCB2YWx1ZXMKLSAqICAgICAgIC0gbWFrZSBzdXJlIHRpbWVzdGFtcHMgYXJlIGNvcnJlY3RseSBzY2FsZWQgZXZlcnl3aGVyZQotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW1hdHJvc2thbXV4Ci0gKgotICogbWF0cm9za2FtdXggbXV4ZXMgZGlmZmVyZW50IGlucHV0IHN0cmVhbXMgaW50byBhIE1hdHJvc2thIGZpbGUuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249L3BhdGgvdG8vbXAzICEgbXBlZ2F1ZGlvcGFyc2UgISBtYXRyb3NrYW11eCBuYW1lPW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QubWt2ICBmaWxlc3JjIGxvY2F0aW9uPS9wYXRoL3RvL3RoZW9yYS5vZ2cgISBvZ2dkZW11eCAhIHRoZW9yYXBhcnNlICEgbXV4LgotICogXXwgVGhpcyBwaXBlbGluZSBtdXhlcyBhbiBNUDMgZmlsZSBhbmQgYSBPZ2cgVGhlb3JhIHZpZGVvIGludG8gYSBNYXRyb3NrYSBmaWxlLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMDAgISBhdWRpb2NvbnZlcnQgISB2b3JiaXNlbmMgISBtYXRyb3NrYW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QubWthCi0gKiBdfCBUaGlzIHBpcGVsaW5lIG11eGVzIGEgNDQwSHogc2luZSB3YXZlIGVuY29kZWQgd2l0aCB0aGUgVm9yYmlzIGNvZGVjIGludG8gYSBNYXRyb3NrYSBmaWxlLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9yaWZmL3JpZmYtbWVkaWEuaD4KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2NvZGVjLXV0aWxzLmg+Ci0KLSNpbmNsdWRlICJtYXRyb3NrYS1tdXguaCIKLSNpbmNsdWRlICJtYXRyb3NrYS1pZHMuaCIKLQotI2RlZmluZSBHU1RfTUFUUk9TS0FfTVVYX0NIQVBMQU5HICJ1bmQiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG1hdHJvc2thbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG1hdHJvc2thbXV4X2RlYnVnCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1dSSVRJTkdfQVBQLAotICBQUk9QX0RPQ1RZUEVfVkVSU0lPTiwKLSAgUFJPUF9NSU5fSU5ERVhfSU5URVJWQUwsCi0gIFBST1BfU1RSRUFNQUJMRSwKLSAgUFJPUF9USU1FQ09ERVNDQUxFCi19OwotCi0jZGVmaW5lICBERUZBVUxUX0RPQ1RZUEVfVkVSU0lPTiAgICAgICAgIDIKLSNkZWZpbmUgIERFRkFVTFRfV1JJVElOR19BUFAgICAgICAgICAgICAgIkdTdHJlYW1lciBNYXRyb3NrYSBtdXhlciIKLSNkZWZpbmUgIERFRkFVTFRfTUlOX0lOREVYX0lOVEVSVkFMICAgICAgMAotI2RlZmluZSAgREVGQVVMVF9TVFJFQU1BQkxFICAgICAgICAgICAgICBGQUxTRQotI2RlZmluZSAgREVGQVVMVF9USU1FQ09ERVNDQUxFICAgICAgICAgICBHU1RfTVNFQ09ORAotCi0vKiBXQVZFRk9STUFURVggaXMgZ3N0X3JpZmZfc3RyZl9hdWRzICsgYW4gZXh0cmEgZ3VpbnQxNiBleHRlbnNpb24gc2l6ZSAqLwotI2RlZmluZSBXQVZFRk9STUFURVhfU0laRSAgKDIgKyBzaXplb2YgKGdzdF9yaWZmX3N0cmZfYXVkcykpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGwgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1tYXRyb3NrYTsgdmlkZW8veC1tYXRyb3NrYS0zZDsgYXVkaW8veC1tYXRyb3NrYSIpCi0gICAgKTsKLQotI2RlZmluZSBDT01NT05fVklERU9fQ0FQUyBcCi0gICJ3aWR0aCA9IChpbnQpIFsgMTYsIE1BWCBdLCAiIFwKLSAgImhlaWdodCA9IChpbnQpIFsgMTYsIE1BWCBdICIKLQotLyogRklYTUU6Ci0gKiAqIHJlcXVpcmUgY29kZWMgZGF0YSwgZXRjIGFzIG5lZWRlZAotICovCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb3NpbmtfdGVtcGwgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgidmlkZW9fJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vbXBlZywgIgotICAgICAgICAibXBlZ3ZlcnNpb24gPSAoaW50KSB7IDEsIDIsIDQgfSwgIgotICAgICAgICAic3lzdGVtc3RyZWFtID0gKGJvb2xlYW4pIGZhbHNlLCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtaDI2NCwgc3RyZWFtLWZvcm1hdD1hdmMsIGFsaWdubWVudD1hdSwgIgotICAgICAgICBDT01NT05fVklERU9fQ0FQUyAiOyAiCi0gICAgICAgICJ2aWRlby94LWgyNjUsIHN0cmVhbS1mb3JtYXQ9aHZjMSwgYWxpZ25tZW50PWF1LCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtZGl2eCwgIgotICAgICAgICBDT01NT05fVklERU9fQ0FQUyAiOyAiCi0gICAgICAgICJ2aWRlby94LWh1ZmZ5dXYsICIKLSAgICAgICAgQ09NTU9OX1ZJREVPX0NBUFMgIjsgIgotICAgICAgICAidmlkZW8veC1kdiwgIgotICAgICAgICBDT01NT05fVklERU9fQ0FQUyAiOyAiCi0gICAgICAgICJ2aWRlby94LWgyNjMsICIKLSAgICAgICAgQ09NTU9OX1ZJREVPX0NBUFMgIjsgIgotICAgICAgICAidmlkZW8veC1tc21wZWcsICIKLSAgICAgICAgQ09NTU9OX1ZJREVPX0NBUFMgIjsgIgotICAgICAgICAiaW1hZ2UvanBlZywgIgotICAgICAgICBDT01NT05fVklERU9fQ0FQUyAiOyAiCi0gICAgICAgICJ2aWRlby94LXRoZW9yYTsgIgotICAgICAgICAidmlkZW8veC1kaXJhYywgIgotICAgICAgICBDT01NT05fVklERU9fQ0FQUyAiOyAiCi0gICAgICAgICJ2aWRlby94LXBuLXJlYWx2aWRlbywgIgotICAgICAgICAicm12ZXJzaW9uID0gKGludCkgWzEsIDRdLCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtdnA4LCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtdnA5LCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7IFlVWTIsIEk0MjAsIFlWMTIsIFVZVlksIEFZVVYsIEdSQVk4LCBCR1IsIFJHQiB9LCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtcHJvcmVzLCAiCi0gICAgICAgIENPTU1PTl9WSURFT19DQVBTICI7ICIKLSAgICAgICAgInZpZGVvL3gtd212LCAiICJ3bXZ2ZXJzaW9uID0gKGludCkgWyAxLCAzIF0sICIgQ09NTU9OX1ZJREVPX0NBUFMpCi0gICAgKTsKLQotI2RlZmluZSBDT01NT05fQVVESU9fQ0FQUyBcCi0gICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0sICIgXAotICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0iCi0KLS8qIEZJWE1FOgotICogKiByZXF1aXJlIGNvZGVjIGRhdGEsIGV0YyBhcyBuZWVkZWQKLSAqLwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvc2lua190ZW1wbCA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJhdWRpb18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9tcGVnLCAiCi0gICAgICAgICJtcGVndmVyc2lvbiA9IChpbnQpIDEsICIKLSAgICAgICAgImxheWVyID0gKGludCkgWyAxLCAzIF0sICIKLSAgICAgICAgQ09NTU9OX0FVRElPX0NBUFMgIjsgIgotICAgICAgICAiYXVkaW8vbXBlZywgIgotICAgICAgICAibXBlZ3ZlcnNpb24gPSAoaW50KSB7IDIsIDQgfSwgIgotICAgICAgICAic3RyZWFtLWZvcm1hdCA9IChzdHJpbmcpIHJhdywgIgotICAgICAgICBDT01NT05fQVVESU9fQ0FQUyAiOyAiCi0gICAgICAgICJhdWRpby94LWFjMywgIgotICAgICAgICBDT01NT05fQVVESU9fQ0FQUyAiOyAiCi0gICAgICAgICJhdWRpby94LWVhYzMsICIKLSAgICAgICAgQ09NTU9OX0FVRElPX0NBUFMgIjsgIgotICAgICAgICAiYXVkaW8veC1kdHMsICIKLSAgICAgICAgQ09NTU9OX0FVRElPX0NBUFMgIjsgIgotICAgICAgICAiYXVkaW8veC12b3JiaXMsICIKLSAgICAgICAgQ09NTU9OX0FVRElPX0NBUFMgIjsgIgotICAgICAgICAiYXVkaW8veC1mbGFjLCAiCi0gICAgICAgIENPTU1PTl9BVURJT19DQVBTICI7ICIKLSAgICAgICAgImF1ZGlvL3gtb3B1czsgIgotICAgICAgICAiYXVkaW8veC1zcGVleCwgIgotICAgICAgICBDT01NT05fQVVESU9fQ0FQUyAiOyAiCi0gICAgICAgICJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgeyBVOCwgUzE2QkUsIFMxNkxFLCBTMjRCRSwgUzI0TEUsIFMzMkJFLCBTMzJMRSwgRjMyTEUsIEY2NExFIH0sICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgIENPTU1PTl9BVURJT19DQVBTICI7IgotICAgICAgICAiYXVkaW8veC10dGEsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgeyA4LCAxNiwgMjQgfSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSB7IDEsIDIgfSwgIiAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXTsgIgotICAgICAgICAiYXVkaW8veC1wbi1yZWFsYXVkaW8sICIKLSAgICAgICAgInJhdmVyc2lvbiA9IChpbnQpIHsgMSwgMiwgOCB9LCAiIENPTU1PTl9BVURJT19DQVBTICI7ICIKLSAgICAgICAgImF1ZGlvL3gtd21hLCAiICJ3bWF2ZXJzaW9uID0gKGludCkgWyAxLCAzIF0sICIKLSAgICAgICAgImJsb2NrX2FsaWduID0gKGludCkgWyAwLCA2NTUzNSBdLCBiaXRyYXRlID0gKGludCkgWyAwLCA1MjQyODggXSwgIgotICAgICAgICBDT01NT05fQVVESU9fQ0FQUyAiOyIKLSAgICAgICAgImF1ZGlvL3gtYWxhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSB7MSwgMn0sICIgInJhdGUgPSAoaW50KSBbIDgwMDAsIDE5MjAwMCBdOyAiCi0gICAgICAgICJhdWRpby94LW11bGF3LCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIHsxLCAyfSwgIiAicmF0ZSA9IChpbnQpIFsgODAwMCwgMTkyMDAwIF07ICIKLSAgICAgICAgImF1ZGlvL3gtYWRwY20sICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpZHZpLCAiCi0gICAgICAgICJibG9ja19hbGlnbiA9IChpbnQpWzY0LCA4MTkyXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSB7IDEsIDIgfSwgIiAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXTsgIgotICAgICAgICAiYXVkaW8veC1hZHBjbSwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZylnNzI2LCAiICJjaGFubmVscyA9IChpbnQpMSwiICJyYXRlID0gKGludCk4MDAwOyAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzdWJ0aXRsZXNpbmtfdGVtcGwgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3VidGl0bGVfJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgic3VidGl0bGUveC1rYXRlOyAiCi0gICAgICAgICJ0ZXh0L3gtcmF3LCBmb3JtYXQ9dXRmODsgYXBwbGljYXRpb24veC1zc2E7IGFwcGxpY2F0aW9uL3gtYXNzOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXVzZjsgc3VicGljdHVyZS94LWR2ZDsgIgotICAgICAgICAiYXBwbGljYXRpb24veC1zdWJ0aXRsZS11bmtub3duIikKLSAgICApOwotCi1zdGF0aWMgZ3BvaW50ZXIgcGFyZW50X2NsYXNzOyAgIC8qIE5VTEwgKi8KLQotLyogTWF0cm9za2EgbXV4ZXIgZGVzdHJ1Y3RvciAqLwotc3RhdGljIHZvaWQgZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0IChHc3RNYXRyb3NrYU11eENsYXNzICoga2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X21hdHJvc2thX211eF9pbml0IChHc3RNYXRyb3NrYU11eCAqIG11eCwgZ3BvaW50ZXIgZ19jbGFzcyk7Ci1zdGF0aWMgdm9pZCBnc3RfbWF0cm9za2FfbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotLyogUGFkcyBjb2xsZWN0ZWQgY2FsbGJhY2sgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9tdXhfaGFuZGxlX2J1ZmZlciAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0QnVmZmVyICogYnVmLCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9tdXhfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsIEdzdEV2ZW50ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qIHBhZCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbWF0cm9za2FfbXV4X2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdFBhZCAqZ3N0X21hdHJvc2thX211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X21hdHJvc2thX211eF9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7Ci0KLS8qIGdzdCBpbnRlcm5hbCBjaGFuZ2Ugc3RhdGUgaGFuZGxlciAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfbWF0cm9za2FfbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0vKiBnb2JqZWN0IGJsYSBibGEgKi8KLXN0YXRpYyB2b2lkIGdzdF9tYXRyb3NrYV9tdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X21hdHJvc2thX211eF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLS8qIHJlc2V0IG11eGVyICovCi1zdGF0aWMgdm9pZCBnc3RfbWF0cm9za2FfbXV4X3Jlc2V0IChHc3RFbGVtZW50ICogZWxlbWVudCk7Ci0KLS8qIHVpZCBnZW5lcmF0aW9uICovCi1zdGF0aWMgZ3VpbnQ2NCBnc3RfbWF0cm9za2FfbXV4X2NyZWF0ZV91aWQgKEdzdE1hdHJvc2thTXV4ICogbXV4KTsKLQotc3RhdGljIGdib29sZWFuIHRoZW9yYV9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChjb25zdCBHVmFsdWUgKiBzdHJlYW1oZWFkZXIsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0KTsKLXN0YXRpYyBnYm9vbGVhbiB2b3JiaXNfc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSAoY29uc3QgR1ZhbHVlICogc3RyZWFtaGVhZGVyLAotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogY29udGV4dCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gc3BlZXhfc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSAoY29uc3QgR1ZhbHVlICogc3RyZWFtaGVhZGVyLAotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogY29udGV4dCk7Ci1zdGF0aWMgZ2Jvb2xlYW4ga2F0ZV9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChjb25zdCBHVmFsdWUgKiBzdHJlYW1oZWFkZXIsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0KTsKLXN0YXRpYyBnYm9vbGVhbiBmbGFjX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEgKGNvbnN0IEdWYWx1ZSAqIHN0cmVhbWhlYWRlciwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQpOwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfc2ltcGxlX3RhZyAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QsIGNvbnN0IGdjaGFyICogdGFnLAotICAgIGdwb2ludGVyIGRhdGEpOwotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9tdXhfdGFnX2xpc3RfaXNfZW1wdHkgKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0KTsKLXN0YXRpYyB2b2lkIGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfc3RyZWFtc190YWdzIChHc3RNYXRyb3NrYU11eCAqIG11eCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X21hdHJvc2thX211eF9zdHJlYW1zX2hhdmVfdGFncyAoR3N0TWF0cm9za2FNdXggKiBtdXgpOwotCi0vKiBDYW5ub3QgdXNlIGJvaWxlcnBsYXRlIG1hY3JvcyBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgZnVsbCBpbml0IGZ1bmN0aW9uCi0gKiBzaWduYXR1cmUgd2l0aCB0aGUgYWRkaXRpb25hbCBjbGFzcyBhcmd1bWVudCwgc28gd2UgdXNlIHRoZSByaWdodCB0ZW1wbGF0ZQotICogZm9yIHRoZSBzaW5rIGNhcHMgKi8KLUdUeXBlCi1nc3RfbWF0cm9za2FfbXV4X2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgb2JqZWN0X3R5cGU7ICAgICAvKiAwICovCi0KLSAgaWYgKG9iamVjdF90eXBlID09IDApIHsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIG9iamVjdF9pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RNYXRyb3NrYU11eENsYXNzKSwKLSAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgLyogYmFzZV9pbml0ICovCi0gICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGJhc2VfZmluYWxpemUgKi8KLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X21hdHJvc2thX211eF9jbGFzc19pbml0LAotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19maW5hbGl6ZSAqLwotICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBjbGFzc19kYXRhICovCi0gICAgICBzaXplb2YgKEdzdE1hdHJvc2thTXV4KSwKLSAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogbl9wcmVhbGxvY3MgKi8KLSAgICAgIChHSW5zdGFuY2VJbml0RnVuYykgZ3N0X21hdHJvc2thX211eF9pbml0Ci0gICAgfTsKLSAgICBjb25zdCBHSW50ZXJmYWNlSW5mbyBpZmFjZV9pbmZvID0geyBOVUxMIH07Ci0KLSAgICBvYmplY3RfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9UWVBFX0VMRU1FTlQsCi0gICAgICAgICJHc3RNYXRyb3NrYU11eCIsICZvYmplY3RfaW5mbywgKEdUeXBlRmxhZ3MpIDApOwotCi0gICAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljIChvYmplY3RfdHlwZSwgR1NUX1RZUEVfVEFHX1NFVFRFUiwgJmlmYWNlX2luZm8pOwotICAgIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAob2JqZWN0X3R5cGUsIEdTVF9UWVBFX1RPQ19TRVRURVIsICZpZmFjZV9pbmZvKTsKLSAgfQotCi0gIHJldHVybiBvYmplY3RfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfY2xhc3NfaW5pdCAoR3N0TWF0cm9za2FNdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmdmlkZW9zaW5rX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmYXVkaW9zaW5rX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmc3VidGl0bGVzaW5rX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGwpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiTWF0cm9za2EgbXV4ZXIiLAotICAgICAgIkNvZGVjL011eGVyIiwKLSAgICAgICJNdXhlcyB2aWRlby9hdWRpby9zdWJ0aXRsZSBzdHJlYW1zIGludG8gYSBtYXRyb3NrYSBzdHJlYW0iLAotICAgICAgIkdTdHJlYW1lciBtYWludGFpbmVycyA8Z3N0cmVhbWVyLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAobWF0cm9za2FtdXhfZGVidWcsICJtYXRyb3NrYW11eCIsIDAsCi0gICAgICAiTWF0cm9za2EgbXV4ZXIiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9tYXRyb3NrYV9tdXhfZmluYWxpemU7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X21hdHJvc2thX211eF9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9tYXRyb3NrYV9tdXhfc2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfV1JJVElOR19BUFAsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgid3JpdGluZy1hcHAiLCAiV3JpdGluZyBhcHBsaWNhdGlvbi4iLAotICAgICAgICAgICJUaGUgbmFtZSB0aGUgYXBwbGljYXRpb24gdGhhdCBjcmVhdGVzIHRoZSBtYXRyb3NrYSBmaWxlLiIsCi0gICAgICAgICAgTlVMTCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9DVFlQRV9WRVJTSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInZlcnNpb24iLCAiRG9jVHlwZSB2ZXJzaW9uIiwKLSAgICAgICAgICAiVGhpcyBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGF0IE1hdHJvc2thIGZlYXR1cmVzIGNhbiBiZSB1c2VkLiIsCi0gICAgICAgICAgMSwgMiwgREVGQVVMVF9ET0NUWVBFX1ZFUlNJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUlOX0lOREVYX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgibWluLWluZGV4LWludGVydmFsIiwgIk1pbmltdW0gdGltZSBiZXR3ZWVuIGluZGV4ICIKLSAgICAgICAgICAiZW50cmllcyIsICJBbiBpbmRleCBlbnRyeSBpcyBjcmVhdGVkIGV2ZXJ5IHNvIG1hbnkgbmFub3NlY29uZHMuIiwKLSAgICAgICAgICAwLCBHX01BWElOVDY0LCBERUZBVUxUX01JTl9JTkRFWF9JTlRFUlZBTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TVFJFQU1BQkxFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzdHJlYW1hYmxlIiwgIkRldGVybWluZXMgd2hldGhlciBvdXRwdXQgc2hvdWxkICIKLSAgICAgICAgICAiYmUgc3RyZWFtYWJsZSIsICJJZiBzZXQgdG8gdHJ1ZSwgdGhlIG91dHB1dCBzaG91bGQgYmUgYXMgaWYgaXQgaXMgIgotICAgICAgICAgICJ0byBiZSBzdHJlYW1lZCBhbmQgaGVuY2Ugbm8gaW5kZXhlcyB3cml0dGVuIG9yIGR1cmF0aW9uIHdyaXR0ZW4uIiwKLSAgICAgICAgICBERUZBVUxUX1NUUkVBTUFCTEUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RJTUVDT0RFU0NBTEUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50NjQgKCJ0aW1lY29kZXNjYWxlIiwgIlRpbWVjb2RlIFNjYWxlIiwKLSAgICAgICAgICAiVGltZWNvZGVTY2FsZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgUmF3IFRpbWVjb2RlIG9mIGEgQmxvY2siLCAxLAotICAgICAgICAgIEdTVF9TRUNPTkQsIERFRkFVTFRfVElNRUNPREVTQ0FMRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9tdXhfY2hhbmdlX3N0YXRlKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfbXV4X3JlcXVlc3RfbmV3X3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfbXV4X3JlbGVhc2VfcGFkKTsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLX0KLQotLyoKLSAqIFN0YXJ0IG9mIHBhZCBvcHRpb24gaGFuZGxlciBjb2RlCi0gKi8KLSNkZWZpbmUgREVGQVVMVF9QQURfRlJBTUVfRFVSQVRJT04gVFJVRQotCi1lbnVtCi17Ci0gIFBST1BfUEFEXzAsCi0gIFBST1BfUEFEX0ZSQU1FX0RVUkFUSU9OCi19OwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RQYWQgcGFyZW50OwotICBnYm9vbGVhbiBmcmFtZV9kdXJhdGlvbjsKLSAgZ2Jvb2xlYW4gZnJhbWVfZHVyYXRpb25fdXNlcjsKLX0gR3N0TWF0cm9za2FtdXhQYWQ7Ci0KLXR5cGVkZWYgR3N0UGFkQ2xhc3MgR3N0TWF0cm9za2FtdXhQYWRDbGFzczsKLQotR1R5cGUgZ3N0X21hdHJvc2thbXV4X3BhZF9nZXRfdHlwZSAodm9pZCk7Ci1HX0RFRklORV9UWVBFIChHc3RNYXRyb3NrYW11eFBhZCwgZ3N0X21hdHJvc2thbXV4X3BhZCwgR1NUX1RZUEVfUEFEKTsKLQotI2RlZmluZSBHU1RfVFlQRV9NQVRST1NLQU1VWF9QQUQgKGdzdF9tYXRyb3NrYW11eF9wYWRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX01BVFJPU0tBTVVYX1BBRChwYWQpIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgocGFkKSxHU1RfVFlQRV9NQVRST1NLQU1VWF9QQUQsR3N0TWF0cm9za2FtdXhQYWQpKQotI2RlZmluZSBHU1RfTUFUUk9TS0FNVVhfUEFEX0NBU1QocGFkKSAoKEdzdE1hdHJvc2thbXV4UGFkICopIHBhZCkKLSNkZWZpbmUgR1NUX0lTX01BVFJPU0tBTVVYX1BBRChwYWQpIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgocGFkKSxHU1RfVFlQRV9NQVRST1NLQU1VWF9QQUQpKQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thbXV4X3BhZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TWF0cm9za2FtdXhQYWQgKnBhZCA9IEdTVF9NQVRST1NLQU1VWF9QQUQgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BBRF9GUkFNRV9EVVJBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwYWQtPmZyYW1lX2R1cmF0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYW11eF9wYWRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE1hdHJvc2thbXV4UGFkICpwYWQgPSBHU1RfTUFUUk9TS0FNVVhfUEFEIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQURfRlJBTUVfRFVSQVRJT046Ci0gICAgICBwYWQtPmZyYW1lX2R1cmF0aW9uID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgcGFkLT5mcmFtZV9kdXJhdGlvbl91c2VyID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYW11eF9wYWRfY2xhc3NfaW5pdCAoR3N0TWF0cm9za2FtdXhQYWRDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9tYXRyb3NrYW11eF9wYWRfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfbWF0cm9za2FtdXhfcGFkX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BBRF9GUkFNRV9EVVJBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZnJhbWUtZHVyYXRpb24iLCAiRnJhbWUgZHVyYXRpb24iLAotICAgICAgICAgICJEZWZhdWx0IGZyYW1lIGR1cmF0aW9uIiwgREVGQVVMVF9QQURfRlJBTUVfRFVSQVRJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thbXV4X3BhZF9pbml0IChHc3RNYXRyb3NrYW11eFBhZCAqIHBhZCkKLXsKLSAgcGFkLT5mcmFtZV9kdXJhdGlvbiA9IERFRkFVTFRfUEFEX0ZSQU1FX0RVUkFUSU9OOwotICBwYWQtPmZyYW1lX2R1cmF0aW9uX3VzZXIgPSBGQUxTRTsKLX0KLQotLyoKLSAqIEVuZCBvZiBwYWQgb3B0aW9uIGhhbmRsZXIgY29kZQotICoqLwotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX211eF9pbml0IChHc3RNYXRyb3NrYU11eCAqIG11eCwgZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotCi0gIHRlbXBsID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKSwgInNyYyIpOwotICBtdXgtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCAic3JjIik7Ci0KLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG11eC0+c3JjcGFkLCBnc3RfbWF0cm9za2FfbXV4X2hhbmRsZV9zcmNfZXZlbnQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAobXV4KSwgbXV4LT5zcmNwYWQpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChtdXgtPnNyY3BhZCk7Ci0KLSAgbXV4LT5jb2xsZWN0ID0gZ3N0X2NvbGxlY3RfcGFkc19uZXcgKCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24gKG11eC0+Y29sbGVjdCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfY29sbGVjdF9wYWRzX2NsaXBfcnVubmluZ190aW1lKSwgbXV4KTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfYnVmZmVyX2Z1bmN0aW9uIChtdXgtPmNvbGxlY3QsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX211eF9oYW5kbGVfYnVmZmVyKSwgbXV4KTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gKG11eC0+Y29sbGVjdCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfbXV4X2hhbmRsZV9zaW5rX2V2ZW50KSwgbXV4KTsKLQotICBtdXgtPmVibWxfd3JpdGUgPSBnc3RfZWJtbF93cml0ZV9uZXcgKG11eC0+c3JjcGFkKTsKLSAgbXV4LT5kb2N0eXBlID0gR1NUX01BVFJPU0tBX0RPQ1RZUEVfTUFUUk9TS0E7Ci0KLSAgLyogcHJvcGVydHkgZGVmYXVsdHMgKi8KLSAgbXV4LT5kb2N0eXBlX3ZlcnNpb24gPSBERUZBVUxUX0RPQ1RZUEVfVkVSU0lPTjsKLSAgbXV4LT53cml0aW5nX2FwcCA9IGdfc3RyZHVwIChERUZBVUxUX1dSSVRJTkdfQVBQKTsKLSAgbXV4LT5taW5faW5kZXhfaW50ZXJ2YWwgPSBERUZBVUxUX01JTl9JTkRFWF9JTlRFUlZBTDsKLSAgbXV4LT5lYm1sX3dyaXRlLT5zdHJlYW1hYmxlID0gREVGQVVMVF9TVFJFQU1BQkxFOwotICBtdXgtPnRpbWVfc2NhbGUgPSBERUZBVUxUX1RJTUVDT0RFU0NBTEU7Ci0KLSAgLyogaW5pdGlhbGl6ZSBpbnRlcm5hbCB2YXJpYWJsZXMgKi8KLSAgbXV4LT5pbmRleCA9IE5VTEw7Ci0gIG11eC0+bnVtX3N0cmVhbXMgPSAwOwotICBtdXgtPm51bV9hX3N0cmVhbXMgPSAwOwotICBtdXgtPm51bV90X3N0cmVhbXMgPSAwOwotICBtdXgtPm51bV92X3N0cmVhbXMgPSAwOwotCi0gIC8qIGNyZWF0ZSB1c2VkIHVpZCBsaXN0ICovCi0gIG11eC0+dXNlZF91aWRzID0gZ19hcnJheV9zaXplZF9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChndWludDY0KSwgMTApOwotCi0gIC8qIGluaXRpYWxpemUgcmVtYWluaW5nIHZhcmlhYmxlcyAqLwotICBnc3RfbWF0cm9za2FfbXV4X3Jlc2V0IChHU1RfRUxFTUVOVCAobXV4KSk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfbWF0cm9za2FfbXV4X2ZpbmFsaXplOgotICogQG9iamVjdDogI0dzdE1hdHJvc2thTXV4IHRoYXQgc2hvdWxkIGJlIGZpbmFsaXplZC4KLSAqCi0gKiBGaW5hbGl6ZSBtYXRyb3NrYSBtdXhlci4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE1hdHJvc2thTXV4ICptdXggPSBHU1RfTUFUUk9TS0FfTVVYIChvYmplY3QpOwotCi0gIGdzdF9ldmVudF9yZXBsYWNlICgmbXV4LT5mb3JjZV9rZXlfdW5pdF9ldmVudCwgTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobXV4LT5jb2xsZWN0KTsKLSAgZ3N0X29iamVjdF91bnJlZiAobXV4LT5lYm1sX3dyaXRlKTsKLSAgZ19mcmVlIChtdXgtPndyaXRpbmdfYXBwKTsKLQotICBnX2FycmF5X2ZyZWUgKG11eC0+dXNlZF91aWRzLCBUUlVFKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfbWF0cm9za2FfbXV4X2NyZWF0ZV91aWQ6Ci0gKiBAbXV4OiAjR3N0TWF0cm9za2FNdXggdG8gZ2VuZXJhdGUgVUlEIGZvci4KLSAqCi0gKiBHZW5lcmF0ZSBuZXcgdW51c2VkIHRyYWNrIFVJRC4KLSAqCi0gKiBSZXR1cm5zOiBOZXcgdHJhY2sgVUlELgotICovCi1zdGF0aWMgZ3VpbnQ2NAotZ3N0X21hdHJvc2thX211eF9jcmVhdGVfdWlkIChHc3RNYXRyb3NrYU11eCAqIG11eCkKLXsKLSAgZ3VpbnQ2NCB1aWQgPSAwOwotCi0gIHdoaWxlICghdWlkKSB7Ci0gICAgZ3VpbnQgaTsKLQotICAgIHVpZCA9ICgoKGd1aW50NjQpIGdfcmFuZG9tX2ludCAoKSkgPDwgMzIpIHwgZ19yYW5kb21faW50ICgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBtdXgtPnVzZWRfdWlkcy0+bGVuOyBpKyspIHsKLSAgICAgIGlmIChnX2FycmF5X2luZGV4IChtdXgtPnVzZWRfdWlkcywgZ3VpbnQ2NCwgaSkgPT0gdWlkKSB7Ci0gICAgICAgIHVpZCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBnX2FycmF5X2FwcGVuZF92YWwgKG11eC0+dXNlZF91aWRzLCB1aWQpOwotICB9Ci0KLSAgcmV0dXJuIHVpZDsKLX0KLQotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9wYWRfcmVzZXQ6Ci0gKiBAY29sbGVjdF9wYWQ6IHRoZSAjR3N0TWF0cm9za2FQYWQKLSAqCi0gKiBSZXNldCBhbmQvb3IgcmVsZWFzZSByZXNvdXJjZXMgb2YgYSBtYXRyb3NrYSBjb2xsZWN0IHBhZC4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9wYWRfcmVzZXQgKEdzdE1hdHJvc2thUGFkICogY29sbGVjdF9wYWQsIGdib29sZWFuIGZ1bGwpCi17Ci0gIGdjaGFyICpuYW1lID0gTlVMTDsKLSAgR3N0TWF0cm9za2FUcmFja1R5cGUgdHlwZSA9IDA7Ci0KLSAgLyogZnJlZSB0cmFjayBpbmZvcm1hdGlvbiAqLwotICBpZiAoY29sbGVjdF9wYWQtPnRyYWNrICE9IE5VTEwpIHsKLSAgICAvKiByZXRyaWV2ZSBmb3Igb3B0aW9uYWwgbGF0ZXIgdXNlICovCi0gICAgbmFtZSA9IGNvbGxlY3RfcGFkLT50cmFjay0+bmFtZTsKLSAgICB0eXBlID0gY29sbGVjdF9wYWQtPnRyYWNrLT50eXBlOwotICAgIC8qIGV4dHJhIGZvciB2aWRlbyAqLwotICAgIGlmICh0eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPKSB7Ci0gICAgICBHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICpjdHggPQotICAgICAgICAgIChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbGxlY3RfcGFkLT50cmFjazsKLQotICAgICAgaWYgKGN0eC0+ZGlyYWNfdW5pdCkgewotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChjdHgtPmRpcmFjX3VuaXQpOwotICAgICAgICBjdHgtPmRpcmFjX3VuaXQgPSBOVUxMOwotICAgICAgfQotICAgIH0KLSAgICBnX2ZyZWUgKGNvbGxlY3RfcGFkLT50cmFjay0+Y29kZWNfaWQpOwotICAgIGdfZnJlZSAoY29sbGVjdF9wYWQtPnRyYWNrLT5jb2RlY19uYW1lKTsKLSAgICBpZiAoZnVsbCkKLSAgICAgIGdfZnJlZSAoY29sbGVjdF9wYWQtPnRyYWNrLT5uYW1lKTsKLSAgICBnX2ZyZWUgKGNvbGxlY3RfcGFkLT50cmFjay0+bGFuZ3VhZ2UpOwotICAgIGdfZnJlZSAoY29sbGVjdF9wYWQtPnRyYWNrLT5jb2RlY19wcml2KTsKLSAgICBnX2ZyZWUgKGNvbGxlY3RfcGFkLT50cmFjayk7Ci0gICAgY29sbGVjdF9wYWQtPnRyYWNrID0gTlVMTDsKLSAgICBpZiAoY29sbGVjdF9wYWQtPnRhZ3MpIHsKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAoY29sbGVjdF9wYWQtPnRhZ3MpOwotICAgICAgY29sbGVjdF9wYWQtPnRhZ3MgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGlmICghZnVsbCAmJiB0eXBlICE9IDApIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dDsKLQotICAgIC8qIGNyZWF0ZSBhIGZyZXNoIGNvbnRleHQgKi8KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfVklERU86Ci0gICAgICAgIGNvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKikKLSAgICAgICAgICAgIGdfbmV3MCAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCwgMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTzoKLSAgICAgICAgY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqKQotICAgICAgICAgICAgZ19uZXcwIChHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0LCAxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1NVQlRJVExFOgotICAgICAgICBjb250ZXh0ID0gKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICopCi0gICAgICAgICAgICBnX25ldzAgKEdzdE1hdHJvc2thVHJhY2tTdWJ0aXRsZUNvbnRleHQsIDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29udGV4dC0+dHlwZSA9IHR5cGU7Ci0gICAgY29udGV4dC0+bmFtZSA9IG5hbWU7Ci0gICAgY29udGV4dC0+dWlkID0gZ3N0X21hdHJvc2thX211eF9jcmVhdGVfdWlkIChjb2xsZWN0X3BhZC0+bXV4KTsKLSAgICAvKiBUT0RPOiBjaGVjayBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNvbnRleHQgKi8KLSAgICBjb250ZXh0LT5mbGFncyA9IEdTVF9NQVRST1NLQV9UUkFDS19FTkFCTEVEIHwgR1NUX01BVFJPU0tBX1RSQUNLX0RFRkFVTFQ7Ci0gICAgY29sbGVjdF9wYWQtPnRyYWNrID0gY29udGV4dDsKLSAgICBjb2xsZWN0X3BhZC0+c3RhcnRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIGNvbGxlY3RfcGFkLT5lbmRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIGNvbGxlY3RfcGFkLT50YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlIChjb2xsZWN0X3BhZC0+dGFncywgR1NUX1RBR19TQ09QRV9TVFJFQU0pOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X21hdHJvc2thX3BhZF9mcmVlOgotICogQGNvbGxlY3RfcGFkOiB0aGUgI0dzdE1hdHJvc2thUGFkCi0gKgotICogUmVsZWFzZSByZXNvdXJjZXMgb2YgYSBtYXRyb3NrYSBjb2xsZWN0IHBhZC4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9wYWRfZnJlZSAoR3N0UGFkICogY29sbGVjdF9wYWQpCi17Ci0gIGdzdF9tYXRyb3NrYV9wYWRfcmVzZXQgKChHc3RNYXRyb3NrYVBhZCAqKSBjb2xsZWN0X3BhZCwgVFJVRSk7Ci19Ci0KLQotLyoqCi0gKiBnc3RfbWF0cm9za2FfbXV4X3Jlc2V0OgotICogQGVsZW1lbnQ6ICNHc3RNYXRyb3NrYU11eCB0aGF0IHNob3VsZCBiZSByZXNldGVkLgotICoKLSAqIFJlc2V0IG1hdHJvc2thIG11eGVyIGJhY2sgdG8gaW5pdGlhbCBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfcmVzZXQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RNYXRyb3NrYU11eCAqbXV4ID0gR1NUX01BVFJPU0tBX01VWCAoZWxlbWVudCk7Ci0gIEdTTGlzdCAqd2FsazsKLQotICAvKiByZXNldCBFQk1MIHdyaXRlICovCi0gIGdzdF9lYm1sX3dyaXRlX3Jlc2V0IChtdXgtPmVibWxfd3JpdGUpOwotCi0gIC8qIHJlc2V0IGlucHV0ICovCi0gIG11eC0+c3RhdGUgPSBHU1RfTUFUUk9TS0FfTVVYX1NUQVRFX1NUQVJUOwotCi0gIC8qIGNsZWFuIHVwIGV4aXN0aW5nIHN0cmVhbXMgKi8KLQotICBmb3IgKHdhbGsgPSBtdXgtPmNvbGxlY3QtPmRhdGE7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0TWF0cm9za2FQYWQgKmNvbGxlY3RfcGFkOwotCi0gICAgY29sbGVjdF9wYWQgPSAoR3N0TWF0cm9za2FQYWQgKikgd2Fsay0+ZGF0YTsKLQotICAgIC8qIHJlc2V0IGNvbGxlY3QgcGFkIHRvIHByaXN0aW5lIHN0YXRlICovCi0gICAgZ3N0X21hdHJvc2thX3BhZF9yZXNldCAoY29sbGVjdF9wYWQsIEZBTFNFKTsKLSAgfQotCi0gIC8qIHJlc2V0IGluZGV4ZXMgKi8KLSAgbXV4LT5udW1faW5kZXhlcyA9IDA7Ci0gIGdfZnJlZSAobXV4LT5pbmRleCk7Ci0gIG11eC0+aW5kZXggPSBOVUxMOwotCi0gIC8qIHJlc2V0IHRpbWVycyAqLwotICBtdXgtPm1heF9jbHVzdGVyX2R1cmF0aW9uID0gR19NQVhJTlQxNiAqIG11eC0+dGltZV9zY2FsZTsKLSAgbXV4LT5kdXJhdGlvbiA9IDA7Ci0KLSAgLyogcmVzZXQgY2x1c3RlciAqLwotICBtdXgtPmNsdXN0ZXIgPSAwOwotICBtdXgtPmNsdXN0ZXJfdGltZSA9IDA7Ci0gIG11eC0+Y2x1c3Rlcl9wb3MgPSAwOwotICBtdXgtPnByZXZfY2x1c3Rlcl9zaXplID0gMDsKLQotICAvKiByZXNldCB0YWdzICovCi0gIGdzdF90YWdfc2V0dGVyX3Jlc2V0X3RhZ3MgKEdTVF9UQUdfU0VUVEVSIChtdXgpKTsKLQotICBtdXgtPnRhZ3NfcG9zID0gMDsKLQotICAvKiByZXNldCBjaGFwdGVycyAqLwotICBnc3RfdG9jX3NldHRlcl9yZXNldCAoR1NUX1RPQ19TRVRURVIgKG11eCkpOwotCi0gIG11eC0+Y2hhcHRlcnNfcG9zID0gMDsKLQotICAvKiBjbGVhciB1c2VkIHVpZHMgKi8KLSAgaWYgKG11eC0+dXNlZF91aWRzLT5sZW4gPiAwKSB7Ci0gICAgZ19hcnJheV9yZW1vdmVfcmFuZ2UgKG11eC0+dXNlZF91aWRzLCAwLCBtdXgtPnVzZWRfdWlkcy0+bGVuKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfaGFuZGxlX3NyY19ldmVudDoKLSAqIEBwYWQ6IFBhZCB3aGljaCByZWNlaXZlZCB0aGUgZXZlbnQuCi0gKiBAZXZlbnQ6IFJlY2VpdmVkIGV2ZW50LgotICoKLSAqIGhhbmRsZSBldmVudHMgLSBjb3BpZWQgZnJvbSBvZ2dtdXggd2l0aG91dCB1bmRlcnN0YW5kaW5nCi0gKgotICogUmV0dXJuczogI1RSVUUgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfbXV4X2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEV2ZW50VHlwZSB0eXBlOwotCi0gIHR5cGUgPSBldmVudCA/IEdTVF9FVkVOVF9UWVBFIChldmVudCkgOiBHU1RfRVZFTlRfVU5LTk9XTjsKLQotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgLyogZGlzYWJsZSBzZWVraW5nIGZvciBub3cgKi8KLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0KQotewotICBpZiAoY29udGV4dC0+Y29kZWNfcHJpdiAhPSBOVUxMKSB7Ci0gICAgZ19mcmVlIChjb250ZXh0LT5jb2RlY19wcml2KTsKLSAgICBjb250ZXh0LT5jb2RlY19wcml2ID0gTlVMTDsKLSAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSAwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfbXV4X2J1aWxkX3ZvYnN1Yl9wcml2YXRlIChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQsCi0gICAgY29uc3QgZ3VpbnQgKiBjbHV0KQotewotICBnY2hhciAqY2x1dHZbMTddOwotICBnY2hhciAqc2NsdXQ7Ci0gIGdpbnQgaTsKLSAgZ3VpbnQzMiBjb2w7Ci0gIGdkb3VibGUgeSwgdSwgdjsKLSAgZ3VpbnQ4IHIsIGcsIGI7Ci0KLSAgLyogcHJvZHVjZSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpbiBoZXggZm9ybWF0ICovCi0gIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0gICAgY29sID0gY2x1dFtpXTsKLSAgICAvKiByZXBsaWNhdGUgdm9ic3ViJ3Mgc2xpZ2h0bHkgb2ZmIFJHQiBjb252ZXJzaW9uIGNhbGN1bGF0aW9uICovCi0gICAgeSA9ICgoKGNvbCA+PiAxNikgJiAweGZmKSAtIDE2KSAqIDI1NSAvIDIxOTsKLSAgICB1ID0gKChjb2wgPj4gOCkgJiAweGZmKSAtIDEyODsKLSAgICB2ID0gKGNvbCAmIDB4ZmYpIC0gMTI4OwotICAgIHIgPSBDTEFNUCAoMS4wICogeSArIDEuNDAyMiAqIHUsIDAsIDI1NSk7Ci0gICAgZyA9IENMQU1QICgxLjAgKiB5IC0gMC4zNDU2ICogdSAtIDAuNzE0NSAqIHYsIDAsIDI1NSk7Ci0gICAgYiA9IENMQU1QICgxLjAgKiB5ICsgMS43NzEwICogdiwgMCwgMjU1KTsKLSAgICBjbHV0dltpXSA9IGdfc3RyZHVwX3ByaW50ZiAoIiUwMnglMDJ4JTAyeCIsIHIsIGcsIGIpOwotICB9Ci0gIGNsdXR2W2ldID0gTlVMTDsKLSAgc2NsdXQgPSBnX3N0cmpvaW52ICgiLCIsIGNsdXR2KTsKLQotICAvKiBidWlsZCBjb2RlYyBwcml2YXRlOyBvbmx5IHBhbGV0dGUgZm9yIG5vdyAqLwotICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXYgPSAoZ3VpbnQ4ICopIGdfc3RyZHVwX3ByaW50ZiAoInBhbGV0dGU6ICVzIiwgc2NsdXQpOwotICAvKiBpbmNsdWRlIHRlcm1pbmF0aW5nIDAgKi8KLSAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID0gc3RybGVuICgoZ2NoYXIgKikgY29udGV4dC0+Y29kZWNfcHJpdikgKyAxOwotICBnX2ZyZWUgKHNjbHV0KTsKLSAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICBnX2ZyZWUgKGNsdXR2W2ldKTsKLSAgfQotfQotCi0KLS8qKgotICogZ3N0X21hdHJvc2thX211eF9oYW5kbGVfc2lua19ldmVudDoKLSAqIEBwYWQ6IFBhZCB3aGljaCByZWNlaXZlZCB0aGUgZXZlbnQuCi0gKiBAZXZlbnQ6IFJlY2VpdmVkIGV2ZW50LgotICoKLSAqIGhhbmRsZSBldmVudHMgLSBpbmZvcm1hdGlvbmFsIG9uZXMgbGlrZSB0YWdzCi0gKgotICogUmV0dXJuczogI1RSVUUgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfbXV4X2hhbmRsZV9zaW5rX2V2ZW50IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsCi0gICAgR3N0Q29sbGVjdERhdGEgKiBkYXRhLCBHc3RFdmVudCAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLSAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQ7Ci0gIEdzdE1hdHJvc2thTXV4ICptdXg7Ci0gIEdzdFBhZCAqcGFkOwotICBHc3RUYWdMaXN0ICpsaXN0OwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIG11eCA9IEdTVF9NQVRST1NLQV9NVVggKHVzZXJfZGF0YSk7Ci0gIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIGRhdGE7Ci0gIHBhZCA9IGRhdGEtPnBhZDsKLSAgY29udGV4dCA9IGNvbGxlY3RfcGFkLT50cmFjazsKLSAgZ19hc3NlcnQgKGNvbnRleHQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6ewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgY29sbGVjdF9wYWQgPSAoR3N0TWF0cm9za2FQYWQgKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0KLSAgICAgIHJldCA9IGNvbGxlY3RfcGFkLT5jYXBzZnVuYyAocGFkLCBjYXBzKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzp7Ci0gICAgICBnY2hhciAqbGFuZyA9IE5VTEw7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInJlY2VpdmVkIHRhZyBldmVudCIpOwotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZsaXN0KTsKLQotICAgICAgLyogTWF0cm9za2Egd2FudHMgSVNPIDYzOS0yQiBjb2RlLCB0YWdsaXN0IG1vc3QgbGlrZWx5IGNvbnRhaW5zIDYzOS0xICovCi0gICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKGxpc3QsIEdTVF9UQUdfTEFOR1VBR0VfQ09ERSwgJmxhbmcpKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpsYW5nX2NvZGU7Ci0KLSAgICAgICAgbGFuZ19jb2RlID0gZ3N0X3RhZ19nZXRfbGFuZ3VhZ2VfY29kZV9pc29fNjM5XzJCIChsYW5nKTsKLSAgICAgICAgaWYgKGxhbmdfY29kZSkgewotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAocGFkLCAiU2V0dGluZyBsYW5ndWFnZSB0byAnJXMnIiwgbGFuZ19jb2RlKTsKLSAgICAgICAgICBnX2ZyZWUgKGNvbnRleHQtPmxhbmd1YWdlKTsKLSAgICAgICAgICBjb250ZXh0LT5sYW5ndWFnZSA9IGdfc3RyZHVwIChsYW5nX2NvZGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFkLCAiRGlkIG5vdCBnZXQgbGFuZ3VhZ2UgY29kZSBmb3IgJyVzJyIsIGxhbmcpOwotICAgICAgICB9Ci0gICAgICAgIGdfZnJlZSAobGFuZyk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEZJWE1FOiB3aGF0IGFib3V0IHN0cmVhbS1zcGVjaWZpYyB0YWdzPyAqLwotICAgICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfc2NvcGUgKGxpc3QpID09IEdTVF9UQUdfU0NPUEVfR0xPQkFMKSB7Ci0gICAgICAgIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKEdTVF9UQUdfU0VUVEVSIChtdXgpLCBsaXN0LAotICAgICAgICAgICAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChHU1RfVEFHX1NFVFRFUiAobXV4KSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoY29sbGVjdF9wYWQtPnRhZ3MsIGxpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgLyogaGFuZGxlZCB0aGlzLCBkb24ndCB3YW50IGNvbGxlY3RwYWRzIHRvIGZvcndhcmQgaXQgZG93bnN0cmVhbSAqLwotICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9UT0M6ewotICAgICAgR3N0VG9jICp0b2MsICpvbGRfdG9jOwotCi0gICAgICBpZiAobXV4LT5jaGFwdGVyc19wb3MgPiAwKQotICAgICAgICBicmVhazsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAicmVjZWl2ZWQgdG9jIGV2ZW50Iik7Ci0gICAgICBnc3RfZXZlbnRfcGFyc2VfdG9jIChldmVudCwgJnRvYywgTlVMTCk7Ci0KLSAgICAgIGlmICh0b2MgIT0gTlVMTCkgewotICAgICAgICBvbGRfdG9jID0gZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYyAoR1NUX1RPQ19TRVRURVIgKG11eCkpOwotICAgICAgICBpZiAob2xkX3RvYyAhPSBOVUxMKSB7Ci0gICAgICAgICAgaWYgKG9sZF90b2MgIT0gdG9jKQotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUIChwYWQsICJSZXBsYWNpbmcgVE9DIHdpdGggYSBuZXcgb25lIik7Ci0gICAgICAgICAgZ3N0X3RvY191bnJlZiAob2xkX3RvYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBnc3RfdG9jX3NldHRlcl9zZXRfdG9jIChHU1RfVE9DX1NFVFRFUiAobXV4KSwgdG9jKTsKLSAgICAgICAgZ3N0X3RvY191bnJlZiAodG9jKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAvKiBoYW5kbGVkIHRoaXMsIGRvbid0IHdhbnQgY29sbGVjdHBhZHMgdG8gZm9yd2FyZCBpdCBkb3duc3RyZWFtICovCi0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU06Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fU1RJQ0tZOnsKLSAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gICAgICBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgIkdzdEZvcmNlS2V5VW5pdCIpKSB7Ci0gICAgICAgIGdzdF9ldmVudF9yZXBsYWNlICgmbXV4LT5mb3JjZV9rZXlfdW5pdF9ldmVudCwgTlVMTCk7Ci0gICAgICAgIG11eC0+Zm9yY2Vfa2V5X3VuaXRfZXZlbnQgPSBldmVudDsKLSAgICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LWdzdC1kdmQiKSAmJgotICAgICAgICAgICFzdHJjbXAgKCJkdmQtc3B1LWNsdXQtY2hhbmdlIiwKLSAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJldmVudCIpKSkgewotICAgICAgICBnY2hhciBuYW1lWzE2XTsKLSAgICAgICAgZ2ludCBpLCB2YWx1ZTsKLSAgICAgICAgZ3VpbnQgY2x1dFsxNl07Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiTmV3IERWRCBjb2xvdXIgdGFibGUgcmVjZWl2ZWQiKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnR5cGUgIT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEUpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICIuLi4gZGlzY2FyZGluZyIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8qIGZpcnN0IHRyYW5zZm9ybSBldmVudCBkYXRhIGludG8gdGFibGUgZm9ybSAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgICAgIGdfc25wcmludGYgKG5hbWUsIHNpemVvZiAobmFtZSksICJjbHV0JTAyZCIsIGkpOwotICAgICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsIG5hbWUsICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKG11eCwgImR2ZC1zcHUtY2x1dC1jaGFuZ2UgZXZlbnQgZGlkIG5vdCAiCi0gICAgICAgICAgICAgICAgImNvbnRhaW4gJXMgZmllbGQiLCBuYW1lKTsKLSAgICAgICAgICAgIGdvdG8gYnJlYWtfaGFyZDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2x1dFtpXSA9IHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogdHJhbnNmb3JtIGludG8gcHJpdmF0ZSBkYXRhIGZvciBzdHJlYW07IHRleHQgZm9ybSAqLwotICAgICAgICBnc3RfbWF0cm9za2FfbXV4X2J1aWxkX3ZvYnN1Yl9wcml2YXRlIChjb250ZXh0LCBjbHV0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotYnJlYWtfaGFyZDoKLSAgaWYgKGV2ZW50ICE9IE5VTEwpCi0gICAgcmV0dXJuIGdzdF9jb2xsZWN0X3BhZHNfZXZlbnRfZGVmYXVsdCAocGFkcywgZGF0YSwgZXZlbnQsIEZBTFNFKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogY29udGV4dCwKLSAgICBjb25zdCBjaGFyICppZCkKLXsKLSAgZ19hc3NlcnQgKGNvbnRleHQgJiYgaWQpOwotICBnX2ZyZWUgKGNvbnRleHQtPmNvZGVjX2lkKTsKLSAgY29udGV4dC0+Y29kZWNfaWQgPSBnX3N0cmR1cCAoaWQpOwotfQotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfdmlkZW9fcGFkX3NldGNhcHM6Ci0gKiBAcGFkOiBQYWQgd2hpY2ggZ290IHRoZSBjYXBzLgotICogQGNhcHM6IE5ldyBjYXBzLgotICoKLSAqIFNldGNhcHMgZnVuY3Rpb24gZm9yIHZpZGVvIHNpbmsgcGFkLgotICoKLSAqIFJldHVybnM6ICNUUlVFIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX211eF92aWRlb19wYWRfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQgPSBOVUxMOwotICBHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICp2aWRlb2NvbnRleHQ7Ci0gIEdzdE1hdHJvc2thTXV4ICptdXg7Ci0gIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGdjaGFyICptaW1ldHlwZTsKLSAgY29uc3QgZ2NoYXIgKmludGVybGFjZV9tb2RlLCAqczsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZSA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqY29kZWNfYnVmID0gTlVMTDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0LCBwaXhlbF93aWR0aCwgcGl4ZWxfaGVpZ2h0OwotICBnaW50IGZwc19kLCBmcHNfbjsKLQotICBtdXggPSBHU1RfTUFUUk9TS0FfTVVYIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0KLSAgLyogZmluZCBjb250ZXh0ICovCi0gIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgZ19hc3NlcnQgKGNvbGxlY3RfcGFkKTsKLSAgY29udGV4dCA9IGNvbGxlY3RfcGFkLT50cmFjazsKLSAgZ19hc3NlcnQgKGNvbnRleHQpOwotICBnX2Fzc2VydCAoY29udGV4dC0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTyk7Ci0gIHZpZGVvY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbnRleHQ7Ci0KLSAgLyogZ3N0IC0+IG1hdHJvc2thIElEJ2luZyAqLwotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBtaW1ldHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7Ci0KLSAgaW50ZXJsYWNlX21vZGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImludGVybGFjZS1tb2RlIik7Ci0gIGlmIChpbnRlcmxhY2VfbW9kZSAhPSBOVUxMICYmIHN0cmNtcCAoaW50ZXJsYWNlX21vZGUsICJwcm9ncmVzc2l2ZSIpICE9IDApCi0gICAgY29udGV4dC0+ZmxhZ3MgfD0gR1NUX01BVFJPU0tBX1ZJREVPVFJBQ0tfSU5URVJMQUNFRDsKLQotICBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LXRoZW9yYSIpKSB7Ci0gICAgLyogd2UnbGwgZXh0cmFjdCB0aGUgZGV0YWlscyBsYXRlciBmcm9tIHRoZSB0aGVvcmEgaWRlbnRpZmljYXRpb24gaGVhZGVyICovCi0gICAgZ290byBza2lwX2RldGFpbHM7Ci0gIH0KLQotICAvKiBnZXQgZ2VuZXJhbCBwcm9wZXJ0aWVzICovCi0gIC8qIHNwZWMgc2F5cyBpdCBpcyBtYW5kYXRvcnkgKi8KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKSB8fAotICAgICAgIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCkpCi0gICAgZ290byByZWZ1c2VfY2FwczsKLQotICB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoID0gd2lkdGg7Ci0gIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0ID0gaGVpZ2h0OwotCi0gIGlmIChHU1RfTUFUUk9TS0FNVVhfUEFEX0NBU1QgKHBhZCktPmZyYW1lX2R1cmF0aW9uCi0gICAgICAmJiBnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoc3RydWN0dXJlLCAiZnJhbWVyYXRlIiwgJmZwc19uLCAmZnBzX2QpCi0gICAgICAmJiBmcHNfbiA+IDApIHsKLSAgICBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwgZnBzX2QsIGZwc19uKTsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiZGVmYXVsdCBkdXJhdGlvbiA9ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbikpOwotICB9IGVsc2UgewotICAgIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPSAwOwotICB9Ci0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICAmcGl4ZWxfd2lkdGgsICZwaXhlbF9oZWlnaHQpKSB7Ci0gICAgaWYgKHBpeGVsX3dpZHRoID4gcGl4ZWxfaGVpZ2h0KSB7Ci0gICAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfd2lkdGggPSB3aWR0aCAqIHBpeGVsX3dpZHRoIC8gcGl4ZWxfaGVpZ2h0OwotICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCA9IGhlaWdodDsKLSAgICB9IGVsc2UgaWYgKHBpeGVsX3dpZHRoIDwgcGl4ZWxfaGVpZ2h0KSB7Ci0gICAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfd2lkdGggPSB3aWR0aDsKLSAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgPSBoZWlnaHQgKiBwaXhlbF9oZWlnaHQgLyBwaXhlbF93aWR0aDsKLSAgICB9IGVsc2UgewotICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X3dpZHRoID0gMDsKLSAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgPSAwOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfd2lkdGggPSAwOwotICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgPSAwOwotICB9Ci0KLSAgLyogQ29sbGVjdCBzdGVyZW9zY29waWMgaW5mbywgaWYgYW55ICovCi0gIGlmICgocyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAibXVsdGl2aWV3LW1vZGUiKSkpCi0gICAgdmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfbW9kZSA9Ci0gICAgICAgIGdzdF92aWRlb19tdWx0aXZpZXdfbW9kZV9mcm9tX2NhcHNfc3RyaW5nIChzKTsKLSAgZ3N0X3N0cnVjdHVyZV9nZXRfZmxhZ3NldCAoc3RydWN0dXJlLCAibXVsdGl2aWV3LWZsYWdzIiwKLSAgICAgICZ2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncywgTlVMTCk7Ci0KLQotc2tpcF9kZXRhaWxzOgotCi0gIHZpZGVvY29udGV4dC0+YXNyX21vZGUgPSBHU1RfTUFUUk9TS0FfQVNQRUNUX1JBVElPX01PREVfRlJFRTsKLSAgdmlkZW9jb250ZXh0LT5mb3VyY2MgPSAwOwotCi0gIC8qIFRPRE86IC0gY2hlY2sgaWYgd2UgaGFuZGxlIGFsbCBjb2RlY3MgYnkgdGhlIHNwZWMsIGkuZS4gY29kZWMgcHJpdmF0ZQotICAgKiAgICAgICAgIGRhdGEgYW5kIG90aGVyIHNldHRpbmdzCi0gICAqICAgICAgIC0gYWRkIG5ldyBmb3JtYXRzCi0gICAqLwotCi0gIC8qIGV4dHJhY3QgY29kZWNfZGF0YSwgbWF5IHR1cm4gb3V0IG5lZWRlZCAqLwotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJjb2RlY19kYXRhIik7Ci0gIGlmICh2YWx1ZSkKLSAgICBjb2RlY19idWYgPSAoR3N0QnVmZmVyICopIGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0KLSAgLyogZmluZCB0eXBlICovCi0gIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtcmF3IikpIHsKLSAgICBjb25zdCBnY2hhciAqZnN0cjsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1VOQ09NUFJFU1NFRCk7Ci0gICAgZnN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZm9ybWF0Iik7Ci0gICAgaWYgKGZzdHIpIHsKLSAgICAgIGlmIChzdHJsZW4gKGZzdHIpID09IDQpCi0gICAgICAgIHZpZGVvY29udGV4dC0+Zm91cmNjID0gR1NUX1NUUl9GT1VSQ0MgKGZzdHIpOwotICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoZnN0ciwgIkdSQVk4IikpCi0gICAgICAgIHZpZGVvY29udGV4dC0+Zm91cmNjID0gR1NUX01BS0VfRk9VUkNDICgnWScsICc4JywgJzAnLCAnMCcpOwotICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoZnN0ciwgIkJHUiIpKQotICAgICAgICB2aWRlb2NvbnRleHQtPmZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0InLCAnRycsICdSJywgMjQpOwotICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoZnN0ciwgIlJHQiIpKQotICAgICAgICB2aWRlb2NvbnRleHQtPmZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ1InLCAnRycsICdCJywgMjQpOwotICAgIH0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtaHVmZnl1diIpICAgICAgLyogTVMvVmZXIGNvbXBhdGliaWxpdHkgY2FzZXMgKi8KLSAgICAgIHx8IXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWRpdngiKQotICAgICAgfHwgIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWR2IikKLSAgICAgIHx8ICFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1oMjYzIikKLSAgICAgIHx8ICFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1tc21wZWciKQotICAgICAgfHwgIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LXdtdiIpCi0gICAgICB8fCAhc3RyY21wIChtaW1ldHlwZSwgImltYWdlL2pwZWciKSkgewotICAgIGdzdF9yaWZmX3N0cmZfdmlkcyAqYmloOwotICAgIGdpbnQgc2l6ZSA9IHNpemVvZiAoZ3N0X3JpZmZfc3RyZl92aWRzKTsKLSAgICBndWludDMyIGZvdXJjYyA9IDA7Ci0KLSAgICBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWh1ZmZ5dXYiKSkKLSAgICAgIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0gnLCAnRicsICdZJywgJ1UnKTsKLSAgICBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtZHYiKSkKLSAgICAgIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ0QnLCAnVicsICdTJywgJ0QnKTsKLSAgICBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtaDI2MyIpKQotICAgICAgZm91cmNjID0gR1NUX01BS0VfRk9VUkNDICgnSCcsICcyJywgJzYnLCAnMycpOwotICAgIGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1kaXZ4IikpIHsKLSAgICAgIGdpbnQgZGl2eHZlcnNpb247Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiZGl2eHZlcnNpb24iLCAmZGl2eHZlcnNpb24pOwotICAgICAgc3dpdGNoIChkaXZ4dmVyc2lvbikgewotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgZm91cmNjID0gR1NUX01BS0VfRk9VUkNDICgnRCcsICdJJywgJ1YnLCAnMycpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgZm91cmNjID0gR1NUX01BS0VfRk9VUkNDICgnRCcsICdJJywgJ1YnLCAnWCcpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgZm91cmNjID0gR1NUX01BS0VfRk9VUkNDICgnRCcsICdYJywgJzUnLCAnMCcpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LW1zbXBlZyIpKSB7Ci0gICAgICBnaW50IG1zbXBlZ3ZlcnNpb247Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibXNtcGVndmVyc2lvbiIsICZtc21wZWd2ZXJzaW9uKTsKLSAgICAgIHN3aXRjaCAobXNtcGVndmVyc2lvbikgewotICAgICAgICBjYXNlIDQxOgotICAgICAgICAgIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ00nLCAnUCcsICdHJywgJzQnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0MjoKLSAgICAgICAgICBmb3VyY2MgPSBHU1RfTUFLRV9GT1VSQ0MgKCdNJywgJ1AnLCAnNCcsICcyJyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDM6Ci0gICAgICAgICAgZ290byBtc21wZWc0MzsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC13bXYiKSkgewotICAgICAgZ2ludCB3bXZ2ZXJzaW9uOwotICAgICAgY29uc3QgZ2NoYXIgKmZzdHI7Ci0KLSAgICAgIGZzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImZvcm1hdCIpOwotICAgICAgaWYgKGZzdHIgJiYgc3RybGVuIChmc3RyKSA9PSA0KSB7Ci0gICAgICAgIGZvdXJjYyA9IEdTVF9TVFJfRk9VUkNDIChmc3RyKTsKLSAgICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJ3bXZ2ZXJzaW9uIiwgJndtdnZlcnNpb24pKSB7Ci0gICAgICAgIGlmICh3bXZ2ZXJzaW9uID09IDIpIHsKLSAgICAgICAgICBmb3VyY2MgPSBHU1RfTUFLRV9GT1VSQ0MgKCdXJywgJ00nLCAnVicsICcyJyk7Ci0gICAgICAgIH0gZWxzZSBpZiAod212dmVyc2lvbiA9PSAxKSB7Ci0gICAgICAgICAgZm91cmNjID0gR1NUX01BS0VfRk9VUkNDICgnVycsICdNJywgJ1YnLCAnMScpOwotICAgICAgICB9IGVsc2UgaWYgKHdtdnZlcnNpb24gPT0gMykgewotICAgICAgICAgIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ1cnLCAnTScsICdWJywgJzMnKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJpbWFnZS9qcGVnIikpIHsKLSAgICAgIGZvdXJjYyA9IEdTVF9NQUtFX0ZPVVJDQyAoJ00nLCAnSicsICdQJywgJ0cnKTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdXJjYykKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0KLSAgICBiaWggPSBnX25ldzAgKGdzdF9yaWZmX3N0cmZfdmlkcywgMSk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoJmJpaC0+c2l6ZSwgc2l6ZSk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoJmJpaC0+d2lkdGgsIHZpZGVvY29udGV4dC0+cGl4ZWxfd2lkdGgpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKCZiaWgtPmhlaWdodCwgdmlkZW9jb250ZXh0LT5waXhlbF9oZWlnaHQpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKCZiaWgtPmNvbXByZXNzaW9uLCBmb3VyY2MpOwotICAgIEdTVF9XUklURV9VSU5UMTZfTEUgKCZiaWgtPnBsYW5lcywgKGd1aW50MTYpIDEpOwotICAgIEdTVF9XUklURV9VSU5UMTZfTEUgKCZiaWgtPmJpdF9jbnQsIChndWludDE2KSAyNCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoJmJpaC0+aW1hZ2Vfc2l6ZSwgdmlkZW9jb250ZXh0LT5waXhlbF93aWR0aCAqCi0gICAgICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0ICogMyk7Ci0KLSAgICAvKiBwcm9jZXNzIGNvZGVjIHByaXZhdGUvaW5pdGlhbGl6YXRpb24gZGF0YSwgaWYgYW55ICovCi0gICAgaWYgKGNvZGVjX2J1ZikgewotICAgICAgc2l6ZSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChjb2RlY19idWYpOwotICAgICAgYmloID0gZ19yZWFsbG9jIChiaWgsIHNpemUpOwotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoJmJpaC0+c2l6ZSwgc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGNvZGVjX2J1ZiwgMCwKLSAgICAgICAgICAoZ3VpbnQ4ICopIGJpaCArIHNpemVvZiAoZ3N0X3JpZmZfc3RyZl92aWRzKSwgLTEpOwotICAgIH0KLQotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVkZXX0ZPVVJDQyk7Ci0gICAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSAoZ3BvaW50ZXIpIGJpaDsKLSAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBzaXplOwotICAgIGNvbnRleHQtPmR0c19vbmx5ID0gVFJVRTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtaDI2NCIpKSB7Ci0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19NUEVHNF9BVkMpOwotICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLSAgICAvKiBDcmVhdGUgYXZjQyBoZWFkZXIgKi8KLSAgICBpZiAoY29kZWNfYnVmICE9IE5VTEwpIHsKLSAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGNvZGVjX2J1Zik7Ci0gICAgICBjb250ZXh0LT5jb2RlY19wcml2ID0gZ19tYWxsb2MwIChjb250ZXh0LT5jb2RlY19wcml2X3NpemUpOwotICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChjb2RlY19idWYsIDAsIGNvbnRleHQtPmNvZGVjX3ByaXYsIC0xKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWgyNjUiKSkgewotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFR0hfSEVWQyk7Ci0gICAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotICAgIC8qIENyZWF0ZSBodmNDIGhlYWRlciAqLwotICAgIGlmIChjb2RlY19idWYgIT0gTlVMTCkgewotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY29kZWNfYnVmKTsKLSAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBnX21hbGxvYzAgKGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGNvZGVjX2J1ZiwgMCwgY29udGV4dC0+Y29kZWNfcHJpdiwgLTEpOwotICAgIH0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtdGhlb3JhIikpIHsKLSAgICBjb25zdCBHVmFsdWUgKnN0cmVhbWhlYWRlcjsKLQotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fVEhFT1JBKTsKLQotICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLQotICAgIHN0cmVhbWhlYWRlciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJzdHJlYW1oZWFkZXIiKTsKLSAgICBpZiAoIXRoZW9yYV9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChzdHJlYW1oZWFkZXIsIGNvbnRleHQpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXV4LCBTVFJFQU0sIE1VWCwgKE5VTEwpLAotICAgICAgICAgICgidGhlb3JhIHN0cmVhbSBoZWFkZXJzIG1pc3Npbmcgb3IgbWFsZm9ybWVkIikpOwotICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LWRpcmFjIikpIHsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX0RJUkFDKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtdnA4IikpIHsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1ZQOCk7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJ2aWRlby94LXZwOSIpKSB7Ci0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19WUDkpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8vbXBlZyIpKSB7Ci0gICAgZ2ludCBtcGVndmVyc2lvbjsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibXBlZ3ZlcnNpb24iLCAmbXBlZ3ZlcnNpb24pOwotICAgIHN3aXRjaCAobXBlZ3ZlcnNpb24pIHsKLSAgICAgIGNhc2UgMToKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFRzEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjoKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFRzIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNDoKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVBFRzRfQVNQKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLQotICAgIC8qIGdsb2JhbCBoZWFkZXJzIG1heSBiZSBpbiBjb2RlYyBkYXRhICovCi0gICAgaWYgKGNvZGVjX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0gICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChjb2RlY19idWYpOwotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdiA9IGdfbWFsbG9jMCAoY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLSAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoY29kZWNfYnVmLCAwLCBjb250ZXh0LT5jb2RlY19wcml2LCAtMSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAidmlkZW8veC1tc21wZWciKSkgewotICBtc21wZWc0MzoKLSAgICAvKiBjYW4gb25seSBtYWtlIGl0IGhlcmUgaWYgcHJlY2VkaW5nIGNhc2UgdmVyaWZpZWQgaXQgd2FzIHZlcnNpb24gMyAqLwotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fTVNNUEVHNFYzKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtcG4tcmVhbHZpZGVvIikpIHsKLSAgICBnaW50IHJtdmVyc2lvbjsKLSAgICBjb25zdCBHVmFsdWUgKm1kcHJfZGF0YTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicm12ZXJzaW9uIiwgJnJtdmVyc2lvbik7Ci0gICAgc3dpdGNoIChybXZlcnNpb24pIHsKLSAgICAgIGNhc2UgMToKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyOgotICAgICAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgICAgIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19SRUFMVklERU8yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDM6Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1JFQUxWSURFTzMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNDoKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fUkVBTFZJREVPNCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICB9Ci0KLSAgICBtZHByX2RhdGEgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAibWRwcl9kYXRhIik7Ci0gICAgaWYgKG1kcHJfZGF0YSAhPSBOVUxMKSB7Ci0gICAgICBndWludDggKnByaXZfZGF0YSA9IE5VTEw7Ci0gICAgICBndWludCBwcml2X2RhdGFfc2l6ZSA9IDA7Ci0KLSAgICAgIEdzdEJ1ZmZlciAqY29kZWNfZGF0YV9idWYgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAobWRwcl9kYXRhKTsKLQotICAgICAgcHJpdl9kYXRhX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChjb2RlY19kYXRhX2J1Zik7Ci0gICAgICBwcml2X2RhdGEgPSBnX21hbGxvYzAgKHByaXZfZGF0YV9zaXplKTsKLQotICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChjb2RlY19kYXRhX2J1ZiwgMCwgcHJpdl9kYXRhLCAtMSk7Ci0KLSAgICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLSAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBwcml2X2RhdGE7Ci0gICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBwcml2X2RhdGFfc2l6ZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChtaW1ldHlwZSwgInZpZGVvL3gtcHJvcmVzIikgPT0gMCkgewotICAgIGNvbnN0IGdjaGFyICp2YXJpYW50OwotCi0gICAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotCi0gICAgdmFyaWFudCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZm9ybWF0Iik7Ci0gICAgaWYgKCF2YXJpYW50IHx8ICFnX3N0cmNtcDAgKHZhcmlhbnQsICJzdGFuZGFyZCIpKQotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdiA9IGdfc3RyZHVwICgiYXBjbiIpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKHZhcmlhbnQsICJocSIpKQotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdiA9IGdfc3RyZHVwICgiYXBjaCIpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKHZhcmlhbnQsICJsdCIpKQotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdiA9IGdfc3RyZHVwICgiYXBjcyIpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKHZhcmlhbnQsICJwcm94eSIpKQotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdiA9IGdfc3RyZHVwICgiYXBjbyIpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKHZhcmlhbnQsICI0NDQ0IikpCi0gICAgICBjb250ZXh0LT5jb2RlY19wcml2ID0gZ19zdHJkdXAgKCJhcDRoIik7Ci0gICAgZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgIlVuaGFuZGxlZCBwcm9yZXMgZm9ybWF0OiAlcyIsIHZhcmlhbnQpOwotCi0gICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLQotICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA9IHNpemVvZiAoZ3VpbnQzMik7Ci0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9WSURFT19QUk9SRVMpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1yZWZ1c2VfY2FwczoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAicGFkICVzIHJlZnVzZWQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgR1NUX1BBRF9OQU1FIChwYWQpLCBjYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogTiA+IDAgdG8gZXhwZWN0IGEgcGFydGljdWxhciBudW1iZXIgb2YgaGVhZGVycywgbmVnYXRpdmUgaWYgdGhlCi0gICBudW1iZXIgb2YgaGVhZGVycyBpcyB2YXJpYWJsZSAqLwotc3RhdGljIGdib29sZWFuCi14aXBoTl9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChjb25zdCBHVmFsdWUgKiBzdHJlYW1oZWFkZXIsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0LCBHc3RCdWZmZXIgKiogcF9idWYwLCBpbnQgTikKLXsKLSAgR3N0QnVmZmVyICoqYnVmID0gTlVMTDsKLSAgR0FycmF5ICpidWZhcnI7Ci0gIGd1aW50OCAqcHJpdl9kYXRhOwotICBndWludCBidWZpLCBpLCBvZmZzZXQsIHByaXZfZGF0YV9zaXplOwotCi0gIGlmIChzdHJlYW1oZWFkZXIgPT0gTlVMTCkKLSAgICBnb3RvIG5vX3N0cmVhbV9oZWFkZXJzOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHN0cmVhbWhlYWRlcikgIT0gR1NUX1RZUEVfQVJSQVkpCi0gICAgZ290byB3cm9uZ190eXBlOwotCi0gIGJ1ZmFyciA9IGdfdmFsdWVfcGVla19wb2ludGVyIChzdHJlYW1oZWFkZXIpOwotICBpZiAoYnVmYXJyLT5sZW4gPD0gMCB8fCBidWZhcnItPmxlbiA+IDI1NSkgICAgLyogYXQgbGVhc3Qgb25lIGhlYWRlciwgYW5kIGNvdW50IHN0b3JlZCBpbiBhIGJ5dGUgKi8KLSAgICBnb3RvIHdyb25nX2NvdW50OwotICBpZiAoTiA+IDAgJiYgYnVmYXJyLT5sZW4gIT0gTikKLSAgICBnb3RvIHdyb25nX2NvdW50OwotCi0gIGNvbnRleHQtPnhpcGhfaGVhZGVyc190b19za2lwID0gYnVmYXJyLT5sZW47Ci0KLSAgYnVmID0gKEdzdEJ1ZmZlciAqKikgZ19tYWxsb2MwIChzaXplb2YgKEdzdEJ1ZmZlciAqKSAqIGJ1ZmFyci0+bGVuKTsKLSAgZm9yIChpID0gMDsgaSA8IGJ1ZmFyci0+bGVuOyBpKyspIHsKLSAgICBHVmFsdWUgKmJ1ZnZhbCA9ICZnX2FycmF5X2luZGV4IChidWZhcnIsIEdWYWx1ZSwgaSk7Ci0KLSAgICBpZiAoR19WQUxVRV9UWVBFIChidWZ2YWwpICE9IEdTVF9UWVBFX0JVRkZFUikgewotICAgICAgZ19mcmVlIChidWYpOwotICAgICAgZ290byB3cm9uZ19jb250ZW50X3R5cGU7Ci0gICAgfQotCi0gICAgYnVmW2ldID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKGJ1ZnZhbCk7Ci0gIH0KLQotICBwcml2X2RhdGFfc2l6ZSA9IDE7Ci0gIGlmIChidWZhcnItPmxlbiA+IDApIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmYXJyLT5sZW4gLSAxOyBpKyspIHsKLSAgICAgIHByaXZfZGF0YV9zaXplICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZltpXSkgLyAweGZmICsgMTsKLSAgICB9Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgYnVmYXJyLT5sZW47ICsraSkgewotICAgIHByaXZfZGF0YV9zaXplICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZltpXSk7Ci0gIH0KLQotICBwcml2X2RhdGEgPSBnX21hbGxvYzAgKHByaXZfZGF0YV9zaXplKTsKLQotICBwcml2X2RhdGFbMF0gPSBidWZhcnItPmxlbiAtIDE7Ci0gIG9mZnNldCA9IDE7Ci0KLSAgaWYgKGJ1ZmFyci0+bGVuID4gMCkgewotICAgIGZvciAoYnVmaSA9IDA7IGJ1ZmkgPCBidWZhcnItPmxlbiAtIDE7IGJ1ZmkrKykgewotICAgICAgZm9yIChpID0gMDsgaSA8IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZltidWZpXSkgLyAweGZmOyArK2kpIHsKLSAgICAgICAgcHJpdl9kYXRhW29mZnNldCsrXSA9IDB4ZmY7Ci0gICAgICB9Ci0gICAgICBwcml2X2RhdGFbb2Zmc2V0KytdID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmW2J1ZmldKSAlIDB4ZmY7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IGJ1ZmFyci0+bGVuOyArK2kpIHsKLSAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZltpXSwgMCwgcHJpdl9kYXRhICsgb2Zmc2V0LCAtMSk7Ci0gICAgb2Zmc2V0ICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZltpXSk7Ci0gIH0KLQotICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBwcml2X2RhdGE7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA9IHByaXZfZGF0YV9zaXplOwotCi0gIGlmIChwX2J1ZjApCi0gICAgKnBfYnVmMCA9IGdzdF9idWZmZXJfcmVmIChidWZbMF0pOwotCi0gIGdfZnJlZSAoYnVmKTsKLQotICByZXR1cm4gVFJVRTsKLQotLyogRVJST1JTICovCi1ub19zdHJlYW1faGVhZGVyczoKLSAgewotICAgIEdTVF9XQVJOSU5HICgicmVxdWlyZWQgc3RyZWFtaGVhZGVycyBtaXNzaW5nIGluIHNpbmsgY2FwcyEiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX3R5cGU6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoInN0cmVhbWhlYWRlcnMgYXJlIG5vdCBhIEdTVF9UWVBFX0FSUkFZLCBidXQgYSAlcyIsCi0gICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FIChzdHJlYW1oZWFkZXIpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2NvdW50OgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJnb3QgJXUgc3RyZWFtaGVhZGVycywgbm90ICVkIGFzIGV4cGVjdGVkIiwgYnVmYXJyLT5sZW4sIE4pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotd3JvbmdfY29udGVudF90eXBlOgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJzdHJlYW1oZWFkZXJzIGFycmF5IGRvZXMgbm90IGNvbnRhaW4gR3N0QnVmZmVycyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXZvcmJpc19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChjb25zdCBHVmFsdWUgKiBzdHJlYW1oZWFkZXIsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0KQotewotICBHc3RCdWZmZXIgKmJ1ZjAgPSBOVUxMOwotCi0gIGlmICgheGlwaE5fc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSAoc3RyZWFtaGVhZGVyLCBjb250ZXh0LCAmYnVmMCwgMykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChidWYwID09IE5VTEwgfHwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMCkgPCAxICsgNiArIDQpIHsKLSAgICBHU1RfV0FSTklORyAoIkZpcnN0IHZvcmJpcyBoZWFkZXIgdG9vIHNtYWxsLCBpZ25vcmluZyIpOwotICB9IGVsc2UgewotICAgIGlmIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmMCwgMSwgInZvcmJpcyIsIDYpID09IDApIHsKLSAgICAgIEdzdE1hdHJvc2thVHJhY2tBdWRpb0NvbnRleHQgKmF1ZGlvY29udGV4dDsKLSAgICAgIEdzdE1hcEluZm8gbWFwOwotICAgICAgZ3VpbnQ4ICpoZHI7Ci0KLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWYwLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgaGRyID0gbWFwLmRhdGEgKyAxICsgNiArIDQ7Ci0gICAgICBhdWRpb2NvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqKSBjb250ZXh0OwotICAgICAgYXVkaW9jb250ZXh0LT5jaGFubmVscyA9IEdTVF9SRUFEX1VJTlQ4IChoZHIpOwotICAgICAgYXVkaW9jb250ZXh0LT5zYW1wbGVyYXRlID0gR1NUX1JFQURfVUlOVDMyX0xFIChoZHIgKyAxKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZjAsICZtYXApOwotICAgIH0KLSAgfQotCi0gIGlmIChidWYwKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjApOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXRoZW9yYV9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChjb25zdCBHVmFsdWUgKiBzdHJlYW1oZWFkZXIsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0KQotewotICBHc3RCdWZmZXIgKmJ1ZjAgPSBOVUxMOwotCi0gIGlmICgheGlwaE5fc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSAoc3RyZWFtaGVhZGVyLCBjb250ZXh0LCAmYnVmMCwgMykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChidWYwID09IE5VTEwgfHwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmMCkgPCAxICsgNiArIDI2KSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJGaXJzdCB0aGVvcmEgaGVhZGVyIHRvbyBzbWFsbCwgaWdub3JpbmciKTsKLSAgfSBlbHNlIGlmIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmMCwgMCwgIlwyMDB0aGVvcmFcMDAzXDAwMiIsIDkpICE9IDApIHsKLSAgICBHU1RfV0FSTklORyAoIkZpcnN0IGhlYWRlciBub3QgYSB0aGVvcmEgaWRlbnRpZmljYXRpb24gaGVhZGVyLCBpZ25vcmluZyIpOwotICB9IGVsc2UgewotICAgIEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQgKnZpZGVvY29udGV4dDsKLSAgICBndWludCBmcHNfbnVtLCBmcHNfZGVub20sIHBhcl9udW0sIHBhcl9kZW5vbTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBndWludDggKmhkcjsKLQotICAgIGdzdF9idWZmZXJfbWFwIChidWYwLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGhkciA9IG1hcC5kYXRhICsgMSArIDYgKyAzICsgMiArIDI7Ci0KLSAgICB2aWRlb2NvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqKSBjb250ZXh0OwotICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfd2lkdGggPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhkcikgPj4gODsKLSAgICB2aWRlb2NvbnRleHQtPnBpeGVsX2hlaWdodCA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoaGRyICsgMykgPj4gODsKLSAgICBoZHIgKz0gMyArIDMgKyAxICsgMTsKLSAgICBmcHNfbnVtID0gR1NUX1JFQURfVUlOVDMyX0JFIChoZHIpOwotICAgIGZwc19kZW5vbSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoaGRyICsgNCk7Ci0gICAgY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdTVF9TRUNPTkQsCi0gICAgICAgIGZwc19kZW5vbSwgZnBzX251bSk7Ci0gICAgaGRyICs9IDQgKyA0OwotICAgIHBhcl9udW0gPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhkcikgPj4gODsKLSAgICBwYXJfZGVub20gPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGhkciArIDMpID4+IDg7Ci0gICAgaWYgKHBhcl9udW0gPiAwICYmIHBhcl9kZW5vbSA+IDApIHsKLSAgICAgIGlmIChwYXJfbnVtID4gcGFyX2Rlbm9tKSB7Ci0gICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA9Ci0gICAgICAgICAgICB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoICogcGFyX251bSAvIHBhcl9kZW5vbTsKLSAgICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCA9IHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0OwotICAgICAgfSBlbHNlIGlmIChwYXJfbnVtIDwgcGFyX2Rlbm9tKSB7Ci0gICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA9IHZpZGVvY29udGV4dC0+cGl4ZWxfd2lkdGg7Ci0gICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgPQotICAgICAgICAgICAgdmlkZW9jb250ZXh0LT5waXhlbF9oZWlnaHQgKiBwYXJfZGVub20gLyBwYXJfbnVtOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X3dpZHRoID0gMDsKLSAgICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCA9IDA7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA9IDA7Ci0gICAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfaGVpZ2h0ID0gMDsKLSAgICB9Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYwLCAmbWFwKTsKLSAgfQotCi0gIGlmIChidWYwKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjApOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWthdGVfc3RyZWFtaGVhZGVyX3RvX2NvZGVjZGF0YSAoY29uc3QgR1ZhbHVlICogc3RyZWFtaGVhZGVyLAotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogY29udGV4dCkKLXsKLSAgR3N0QnVmZmVyICpidWYwID0gTlVMTDsKLQotICBpZiAoIXhpcGhOX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEgKHN0cmVhbWhlYWRlciwgY29udGV4dCwgJmJ1ZjAsIC0xKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKGJ1ZjAgPT0gTlVMTCB8fCBnc3RfYnVmZmVyX2dldF9zaXplIChidWYwKSA8IDY0KSB7ICAgICAgICAvKiBLYXRlIElEIGhlYWRlciBpcyA2NCBieXRlcyAqLwotICAgIEdTVF9XQVJOSU5HICgiRmlyc3Qga2F0ZSBoZWFkZXIgdG9vIHNtYWxsLCBpZ25vcmluZyIpOwotICB9IGVsc2UgaWYgKGdzdF9idWZmZXJfbWVtY21wIChidWYwLCAwLCAiXDIwMGthdGVcMFwwXDAiLCA4KSAhPSAwKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJGaXJzdCBoZWFkZXIgbm90IGEga2F0ZSBpZGVudGlmaWNhdGlvbiBoZWFkZXIsIGlnbm9yaW5nIik7Ci0gIH0KLQotICBpZiAoYnVmMCkKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYwKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mbGFjX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEgKGNvbnN0IEdWYWx1ZSAqIHN0cmVhbWhlYWRlciwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEdBcnJheSAqYnVmYXJyOwotICBnaW50IGk7Ci0gIEdWYWx1ZSAqYnVmdmFsOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBpZiAoc3RyZWFtaGVhZGVyID09IE5VTEwgfHwgR19WQUxVRV9UWVBFIChzdHJlYW1oZWFkZXIpICE9IEdTVF9UWVBFX0FSUkFZKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJObyBvciBpbnZhbGlkIHN0cmVhbWhlYWRlciBmaWVsZCBpbiB0aGUgY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGJ1ZmFyciA9IGdfdmFsdWVfcGVla19wb2ludGVyIChzdHJlYW1oZWFkZXIpOwotICBpZiAoYnVmYXJyLT5sZW4gPCAyKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJUb28gZmV3IGhlYWRlcnMgaW4gc3RyZWFtaGVhZGVyIGZpZWxkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgY29udGV4dC0+eGlwaF9oZWFkZXJzX3RvX3NraXAgPSBidWZhcnItPmxlbiArIDE7Ci0KLSAgYnVmdmFsID0gJmdfYXJyYXlfaW5kZXggKGJ1ZmFyciwgR1ZhbHVlLCAwKTsKLSAgaWYgKEdfVkFMVUVfVFlQRSAoYnVmdmFsKSAhPSBHU1RfVFlQRV9CVUZGRVIpIHsKLSAgICBHU1RfV0FSTklORyAoInN0cmVhbWhlYWRlcnMgYXJyYXkgZG9lcyBub3QgY29udGFpbiBHc3RCdWZmZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYnVmZmVyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKGJ1ZnZhbCk7Ci0KLSAgLyogTmVlZCBhdCBsZWFzdCBPZ2dGTEFDIG1hcHBpbmcgaGVhZGVyLCBmTGFDIG1hcmtlciBhbmQgU1RSRUFNSU5GTyBibG9jayAqLwotICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA8IDkgKyA0ICsgNCArIDM0Ci0gICAgICB8fCBnc3RfYnVmZmVyX21lbWNtcCAoYnVmZmVyLCAxLCAiRkxBQyIsIDQpICE9IDAKLSAgICAgIHx8IGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIDksICJmTGFDIiwgNCkgIT0gMCkgewotICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBzdHJlYW1oZWFkZXIgZm9yIEZMQUMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgLSA5OwotICBjb250ZXh0LT5jb2RlY19wcml2ID0gZ19tYWxsb2MgKGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmZmVyLCA5LCBjb250ZXh0LT5jb2RlY19wcml2LCAtMSk7Ci0KLSAgZm9yIChpID0gMTsgaSA8IGJ1ZmFyci0+bGVuOyBpKyspIHsKLSAgICBndWludCBvbGRfc2l6ZTsKLSAgICBidWZ2YWwgPSAmZ19hcnJheV9pbmRleCAoYnVmYXJyLCBHVmFsdWUsIGkpOwotCi0gICAgaWYgKEdfVkFMVUVfVFlQRSAoYnVmdmFsKSAhPSBHU1RfVFlQRV9CVUZGRVIpIHsKLSAgICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLSAgICAgIEdTVF9XQVJOSU5HICgic3RyZWFtaGVhZGVycyBhcnJheSBkb2VzIG5vdCBjb250YWluIEdzdEJ1ZmZlcnMiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBidWZmZXIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlciAoYnVmdmFsKTsKLQotICAgIG9sZF9zaXplID0gY29udGV4dC0+Y29kZWNfcHJpdl9zaXplOwotICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotCi0gICAgY29udGV4dC0+Y29kZWNfcHJpdiA9IGdfcmVhbGxvYyAoY29udGV4dC0+Y29kZWNfcHJpdiwKLSAgICAgICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLSAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZmZlciwgMCwKLSAgICAgICAgKGd1aW50OCAqKSBjb250ZXh0LT5jb2RlY19wcml2ICsgb2xkX3NpemUsIC0xKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNwZWV4X3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEgKGNvbnN0IEdWYWx1ZSAqIHN0cmVhbWhlYWRlciwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEdBcnJheSAqYnVmYXJyOwotICBHVmFsdWUgKmJ1ZnZhbDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGd1aW50IG9sZF9zaXplOwotCi0gIGlmIChzdHJlYW1oZWFkZXIgPT0gTlVMTCB8fCBHX1ZBTFVFX1RZUEUgKHN0cmVhbWhlYWRlcikgIT0gR1NUX1RZUEVfQVJSQVkpIHsKLSAgICBHU1RfV0FSTklORyAoIk5vIG9yIGludmFsaWQgc3RyZWFtaGVhZGVyIGZpZWxkIGluIHRoZSBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYnVmYXJyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKHN0cmVhbWhlYWRlcik7Ci0gIGlmIChidWZhcnItPmxlbiAhPSAyKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJUb28gZmV3IGhlYWRlcnMgaW4gc3RyZWFtaGVhZGVyIGZpZWxkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgY29udGV4dC0+eGlwaF9oZWFkZXJzX3RvX3NraXAgPSBidWZhcnItPmxlbiArIDE7Ci0KLSAgYnVmdmFsID0gJmdfYXJyYXlfaW5kZXggKGJ1ZmFyciwgR1ZhbHVlLCAwKTsKLSAgaWYgKEdfVkFMVUVfVFlQRSAoYnVmdmFsKSAhPSBHU1RfVFlQRV9CVUZGRVIpIHsKLSAgICBHU1RfV0FSTklORyAoInN0cmVhbWhlYWRlcnMgYXJyYXkgZG9lcyBub3QgY29udGFpbiBHc3RCdWZmZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYnVmZmVyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKGJ1ZnZhbCk7Ci0KLSAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPCA4MAotICAgICAgfHwgZ3N0X2J1ZmZlcl9tZW1jbXAgKGJ1ZmZlciwgMCwgIlNwZWV4ICAgIiwgOCkgIT0gMCkgewotICAgIEdTVF9XQVJOSU5HICgiSW52YWxpZCBzdHJlYW1oZWFkZXIgZm9yIFNwZWV4Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICBjb250ZXh0LT5jb2RlY19wcml2ID0gZ19tYWxsb2MgKGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmZmVyLCAwLCBjb250ZXh0LT5jb2RlY19wcml2LCAtMSk7Ci0KLSAgYnVmdmFsID0gJmdfYXJyYXlfaW5kZXggKGJ1ZmFyciwgR1ZhbHVlLCAxKTsKLQotICBpZiAoR19WQUxVRV9UWVBFIChidWZ2YWwpICE9IEdTVF9UWVBFX0JVRkZFUikgewotICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLSAgICBHU1RfV0FSTklORyAoInN0cmVhbWhlYWRlcnMgYXJyYXkgZG9lcyBub3QgY29udGFpbiBHc3RCdWZmZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYnVmZmVyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKGJ1ZnZhbCk7Ci0KLSAgb2xkX3NpemUgPSBjb250ZXh0LT5jb2RlY19wcml2X3NpemU7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICBjb250ZXh0LT5jb2RlY19wcml2ID0gZ19yZWFsbG9jIChjb250ZXh0LT5jb2RlY19wcml2LAotICAgICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLSAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWZmZXIsIDAsIChndWludDggKikgY29udGV4dC0+Y29kZWNfcHJpdiArIG9sZF9zaXplLCAtMSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotb3B1c19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChjb25zdCBHVmFsdWUgKiBzdHJlYW1oZWFkZXIsCi0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0KQotewotICBHQXJyYXkgKmJ1ZmFycjsKLSAgR1ZhbHVlICpidWZ2YWw7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKHN0cmVhbWhlYWRlcikgIT0gR1NUX1RZUEVfQVJSQVkpCi0gICAgZ290byB3cm9uZ190eXBlOwotCi0gIGJ1ZmFyciA9IGdfdmFsdWVfcGVla19wb2ludGVyIChzdHJlYW1oZWFkZXIpOwotICBpZiAoYnVmYXJyLT5sZW4gIT0gMSAmJiBidWZhcnItPmxlbiAhPSAyKSAgICAgLyogb25lIGhlYWRlciwgYW5kIGNvdW50IHN0b3JlZCBpbiBhIGJ5dGUgKi8KLSAgICBnb3RvIHdyb25nX2NvdW50OwotCi0gIC8qIE9wdXMgaGVhZGVycyBhcmUgbm90IGluLWJhbmQgKi8KLSAgY29udGV4dC0+eGlwaF9oZWFkZXJzX3RvX3NraXAgPSAwOwotCi0gIGJ1ZnZhbCA9ICZnX2FycmF5X2luZGV4IChidWZhcnIsIEdWYWx1ZSwgMCk7Ci0gIGlmIChHX1ZBTFVFX1RZUEUgKGJ1ZnZhbCkgIT0gR1NUX1RZUEVfQlVGRkVSKSB7Ci0gICAgZ290byB3cm9uZ19jb250ZW50X3R5cGU7Ci0gIH0KLSAgYnVmID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKGJ1ZnZhbCk7Ci0KLSAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotCi0gIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBnX21hbGxvYzAgKGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBjb250ZXh0LT5jb2RlY19wcml2LCAtMSk7Ci0KLSAgY29udGV4dC0+Y29kZWNfZGVsYXkgPQotICAgICAgR1NUX1JFQURfVUlOVDE2X0xFICgoZ3VpbnQ4ICopIGNvbnRleHQtPmNvZGVjX3ByaXYgKyAxMCk7Ci0gIGNvbnRleHQtPmNvZGVjX2RlbGF5ID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoY29udGV4dC0+Y29kZWNfZGVsYXksIEdTVF9TRUNPTkQsIDQ4MDAwKTsKLSAgY29udGV4dC0+c2Vla19wcmVyb2xsID0gODAgKiBHU1RfTVNFQ09ORDsKLQotICByZXR1cm4gVFJVRTsKLQotLyogRVJST1JTICovCi13cm9uZ190eXBlOgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJzdHJlYW1oZWFkZXJzIGFyZSBub3QgYSBHU1RfVFlQRV9BUlJBWSwgYnV0IGEgJXMiLAotICAgICAgICBHX1ZBTFVFX1RZUEVfTkFNRSAoc3RyZWFtaGVhZGVyKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19jb3VudDoKLSAgewotICAgIEdTVF9XQVJOSU5HICgiZ290ICV1IHN0cmVhbWhlYWRlcnMsIG5vdCAxIG9yIDIgYXMgZXhwZWN0ZWQiLCBidWZhcnItPmxlbik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19jb250ZW50X3R5cGU6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoInN0cmVhbWhlYWRlcnMgYXJyYXkgZG9lcyBub3QgY29udGFpbiBHc3RCdWZmZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotb3B1c19tYWtlX2NvZGVjZGF0YSAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiBjb250ZXh0LCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ3VpbnQzMiByYXRlOwotICBndWludDggY2hhbm5lbHM7Ci0gIGd1aW50OCBjaGFubmVsX21hcHBpbmdfZmFtaWx5OwotICBndWludDggc3RyZWFtX2NvdW50LCBjb3VwbGVkX2NvdW50LCBjaGFubmVsX21hcHBpbmdbMjU2XTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIC8qIE9wdXMgaGVhZGVycyBhcmUgbm90IGluLWJhbmQgKi8KLSAgY29udGV4dC0+eGlwaF9oZWFkZXJzX3RvX3NraXAgPSAwOwotCi0gIGNvbnRleHQtPmNvZGVjX2RlbGF5ID0gMDsKLSAgY29udGV4dC0+c2Vla19wcmVyb2xsID0gODAgKiBHU1RfTVNFQ09ORDsKLQotICBpZiAoIWdzdF9jb2RlY191dGlsc19vcHVzX3BhcnNlX2NhcHMgKGNhcHMsICZyYXRlLCAmY2hhbm5lbHMsCi0gICAgICAgICAgJmNoYW5uZWxfbWFwcGluZ19mYW1pbHksICZzdHJlYW1fY291bnQsICZjb3VwbGVkX2NvdW50LAotICAgICAgICAgIGNoYW5uZWxfbWFwcGluZykpIHsKLSAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBwYXJzZSBjYXBzIGZvciBPcHVzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgYnVmZmVyID0KLSAgICAgIGdzdF9jb2RlY191dGlsc19vcHVzX2NyZWF0ZV9oZWFkZXIgKHJhdGUsIGNoYW5uZWxzLAotICAgICAgY2hhbm5lbF9tYXBwaW5nX2ZhbWlseSwgc3RyZWFtX2NvdW50LCBjb3VwbGVkX2NvdW50LCBjaGFubmVsX21hcHBpbmcsIDAsCi0gICAgICAwKTsKLSAgaWYgKCFidWZmZXIpIHsKLSAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBjcmVhdGUgT3B1cyBoZWFkZXIgZnJvbSBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID0gbWFwLnNpemU7Ci0gIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBnX21hbGxvYyAoY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLSAgbWVtY3B5IChjb250ZXh0LT5jb2RlY19wcml2LCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHM6Ci0gKiBAcGFkOiBQYWQgd2hpY2ggZ290IHRoZSBjYXBzLgotICogQGNhcHM6IE5ldyBjYXBzLgotICoKLSAqIFNldGNhcHMgZnVuY3Rpb24gZm9yIGF1ZGlvIHNpbmsgcGFkLgotICoKLSAqIFJldHVybnM6ICNUUlVFIG9uIHN1Y2Nlc3MuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX211eF9hdWRpb19wYWRfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQgPSBOVUxMOwotICBHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0ICphdWRpb2NvbnRleHQ7Ci0gIEdzdE1hdHJvc2thTXV4ICptdXg7Ci0gIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLSAgY29uc3QgZ2NoYXIgKm1pbWV0eXBlOwotICBnaW50IHNhbXBsZXJhdGUgPSAwLCBjaGFubmVscyA9IDA7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBHVmFsdWUgKmNvZGVjX2RhdGEgPSBOVUxMOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpzdHJlYW1fZm9ybWF0ID0gTlVMTDsKLQotICBtdXggPSBHU1RfTUFUUk9TS0FfTVVYIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0KLSAgLyogZmluZCBjb250ZXh0ICovCi0gIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgZ19hc3NlcnQgKGNvbGxlY3RfcGFkKTsKLSAgY29udGV4dCA9IGNvbGxlY3RfcGFkLT50cmFjazsKLSAgZ19hc3NlcnQgKGNvbnRleHQpOwotICBnX2Fzc2VydCAoY29udGV4dC0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTyk7Ci0gIGF1ZGlvY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0ICopIGNvbnRleHQ7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIG1pbWV0eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKLQotICAvKiBnZW5lcmFsIHNldHVwICovCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicmF0ZSIsICZzYW1wbGVyYXRlKTsKLSAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsICZjaGFubmVscyk7Ci0KLSAgYXVkaW9jb250ZXh0LT5zYW1wbGVyYXRlID0gc2FtcGxlcmF0ZTsKLSAgYXVkaW9jb250ZXh0LT5jaGFubmVscyA9IGNoYW5uZWxzOwotICBhdWRpb2NvbnRleHQtPmJpdGRlcHRoID0gMDsKLSAgY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbiA9IDA7Ci0KLSAgY29kZWNfZGF0YSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJjb2RlY19kYXRhIik7Ci0gIGlmIChjb2RlY19kYXRhKQotICAgIGJ1ZiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChjb2RlY19kYXRhKTsKLQotICAvKiBUT0RPOiAtIGNoZWNrIGlmIHdlIGhhbmRsZSBhbGwgY29kZWNzIGJ5IHRoZSBzcGVjLCBpLmUuIGNvZGVjIHByaXZhdGUKLSAgICogICAgICAgICBkYXRhIGFuZCBvdGhlciBzZXR0aW5ncwotICAgKiAgICAgICAtIGFkZCBuZXcgZm9ybWF0cwotICAgKi8KLQotICBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby9tcGVnIikpIHsKLSAgICBnaW50IG1wZWd2ZXJzaW9uID0gMDsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibXBlZ3ZlcnNpb24iLCAmbXBlZ3ZlcnNpb24pOwotICAgIHN3aXRjaCAobXBlZ3ZlcnNpb24pIHsKLSAgICAgIGNhc2UgMTp7Ci0gICAgICAgIGdpbnQgbGF5ZXI7Ci0gICAgICAgIGdpbnQgdmVyc2lvbiA9IDE7Ci0gICAgICAgIGdpbnQgc3BmOwotCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAibGF5ZXIiLCAmbGF5ZXIpOwotCi0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJtcGVnYXVkaW92ZXJzaW9uIiwgJnZlcnNpb24pKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsCi0gICAgICAgICAgICAgICJVbmFibGUgdG8gZGV0ZXJtaW5lIE1QRUcgYXVkaW8gdmVyc2lvbiwgYXNzdW1pbmcgMSIpOwotICAgICAgICAgIHZlcnNpb24gPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxheWVyID09IDEpCi0gICAgICAgICAgc3BmID0gMzg0OwotICAgICAgICBlbHNlIGlmIChsYXllciA9PSAyKQotICAgICAgICAgIHNwZiA9IDExNTI7Ci0gICAgICAgIGVsc2UgaWYgKHZlcnNpb24gPT0gMikKLSAgICAgICAgICBzcGYgPSA1NzY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzcGYgPSAxMTUyOwotCi0gICAgICAgIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPQotICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfU0VDT05ELCBzcGYsIGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSk7Ci0KLSAgICAgICAgc3dpdGNoIChsYXllcikgewotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICAgICAgICAgIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19NUEVHMV9MMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fTVBFRzFfTDIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX01QRUcxX0wzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSAyOgotICAgICAgY2FzZSA0OgotICAgICAgICBzdHJlYW1fZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzdHJlYW0tZm9ybWF0Iik7Ci0gICAgICAgIC8qIGNoZWNrIHRoaXMgaXMgcmF3IGFhYyAqLwotICAgICAgICBpZiAoc3RyZWFtX2Zvcm1hdCkgewotICAgICAgICAgIGlmIChzdHJjbXAgKHN0cmVhbV9mb3JtYXQsICJyYXciKSAhPSAwKSB7Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgIkFBQyBzdHJlYW0tZm9ybWF0IG11c3QgYmUgJ3JhdycsIG5vdCAlcyIsCi0gICAgICAgICAgICAgICAgc3RyZWFtX2Zvcm1hdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiQUFDIHN0cmVhbS1mb3JtYXQgbm90IHNwZWNpZmllZCwgIgotICAgICAgICAgICAgICAiYXNzdW1pbmcgJ3JhdyciKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChidWYpIHsKLSAgICAgICAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0FBQyk7Ci0gICAgICAgICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2ID0gZ19tYWxsb2MgKGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWYsIDAsIGNvbnRleHQtPmNvZGVjX3ByaXYsCi0gICAgICAgICAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAibm8gQUFDIGNvZGVjX2RhdGE7IG5vdCBwYWNrZXRpemVkIik7Ci0gICAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1yYXciKSkgewotICAgIEdzdEF1ZGlvSW5mbyBpbmZvOwotCi0gICAgZ3N0X2F1ZGlvX2luZm9faW5pdCAoJmluZm8pOwotICAgIGlmICghZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwKLSAgICAgICAgICAiYnJva2VuIGNhcHMsIHJlamVjdGVkIGJ5IGdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyIpOwotICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKEdTVF9BVURJT19JTkZPX0ZPUk1BVCAoJmluZm8pKSB7Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfVTg6Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2QkU6Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2TEU6Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzI0QkU6Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzI0TEU6Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyQkU6Ci0gICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzMyTEU6Ci0gICAgICAgIGlmIChHU1RfQVVESU9fSU5GT19XSURUSCAoJmluZm8pICE9IEdTVF9BVURJT19JTkZPX0RFUFRIICgmaW5mbykpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJ3aWR0aCBtdXN0IGJlIHNhbWUgYXMgZGVwdGghIik7Ci0gICAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICAgICAgfQotICAgICAgICBpZiAoR1NUX0FVRElPX0lORk9fSVNfQklHX0VORElBTiAoJmluZm8pKQotICAgICAgICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUENNX0lOVF9CRSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1BDTV9JTlRfTEUpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GMzJMRToKLSAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9GNjRMRToKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUENNX0ZMT0FUKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgIndyb25nIGZvcm1hdCBpbiByYXcgYXVkaW8gY2FwcyIpOwotICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLQotICAgIGF1ZGlvY29udGV4dC0+Yml0ZGVwdGggPSBHU1RfQVVESU9fSU5GT19XSURUSCAoJmluZm8pOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC12b3JiaXMiKSkgewotICAgIGNvbnN0IEdWYWx1ZSAqc3RyZWFtaGVhZGVyOwotCi0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19WT1JCSVMpOwotCi0gICAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotCi0gICAgc3RyZWFtaGVhZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInN0cmVhbWhlYWRlciIpOwotICAgIGlmICghdm9yYmlzX3N0cmVhbWhlYWRlcl90b19jb2RlY2RhdGEgKHN0cmVhbWhlYWRlciwgY29udGV4dCkpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdXgsIFNUUkVBTSwgTVVYLCAoTlVMTCksCi0gICAgICAgICAgKCJ2b3JiaXMgc3RyZWFtIGhlYWRlcnMgbWlzc2luZyBvciBtYWxmb3JtZWQiKSk7Ci0gICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtZmxhYyIpKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpzdHJlYW1oZWFkZXI7Ci0KLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0ZMQUMpOwotCi0gICAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotCi0gICAgc3RyZWFtaGVhZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInN0cmVhbWhlYWRlciIpOwotICAgIGlmICghZmxhY19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChzdHJlYW1oZWFkZXIsIGNvbnRleHQpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXV4LCBTVFJFQU0sIE1VWCwgKE5VTEwpLAotICAgICAgICAgICgiZmxhYyBzdHJlYW0gaGVhZGVycyBtaXNzaW5nIG9yIG1hbGZvcm1lZCIpKTsKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1zcGVleCIpKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpzdHJlYW1oZWFkZXI7Ci0KLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1NQRUVYKTsKLSAgICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0KLSAgICBzdHJlYW1oZWFkZXIgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAic3RyZWFtaGVhZGVyIik7Ci0gICAgaWYgKCFzcGVleF9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChzdHJlYW1oZWFkZXIsIGNvbnRleHQpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXV4LCBTVFJFQU0sIE1VWCwgKE5VTEwpLAotICAgICAgICAgICgic3BlZXggc3RyZWFtIGhlYWRlcnMgbWlzc2luZyBvciBtYWxmb3JtZWQiKSk7Ci0gICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgIH0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtb3B1cyIpKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpzdHJlYW1oZWFkZXI7Ci0KLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX09QVVMpOwotCi0gICAgc3RyZWFtaGVhZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInN0cmVhbWhlYWRlciIpOwotICAgIGlmIChzdHJlYW1oZWFkZXIpIHsKLSAgICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLSAgICAgIGlmICghb3B1c19zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChzdHJlYW1oZWFkZXIsIGNvbnRleHQpKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdXgsIFNUUkVBTSwgTVVYLCAoTlVMTCksCi0gICAgICAgICAgICAoIm9wdXMgc3RyZWFtIGhlYWRlcnMgbWlzc2luZyBvciBtYWxmb3JtZWQiKSk7Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5vIHN0cmVhbWhlYWRlciwgYnV0IHdlIG5lZWQgdG8gaGF2ZSBvbmUsIHNvIHdlIG1ha2Ugb25lIHVwCi0gICAgICAgICBiYXNlZCBvbiBjYXBzICovCi0gICAgICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0gICAgICBpZiAoIW9wdXNfbWFrZV9jb2RlY2RhdGEgKGNvbnRleHQsIGNhcHMpKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdXgsIFNUUkVBTSwgTVVYLCAoTlVMTCksCi0gICAgICAgICAgICAoIm9wdXMgc3RyZWFtIGhlYWRlcnMgbWlzc2luZyBvciBtYWxmb3JtZWQiKSk7Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1hYzMiKSkgewotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fQUMzKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtZWFjMyIpKSB7Ci0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19FQUMzKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtZHRzIikpIHsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX0RUUyk7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LXR0YSIpKSB7Ci0gICAgZ2ludCB3aWR0aDsKLQotICAgIC8qIFRUQSBmcmFtZSBkdXJhdGlvbiAqLwotICAgIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPSAxLjA0NDg5Nzk1OTE4MzY3MzQ2OTM5ICogR1NUX1NFQ09ORDsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpOwotICAgIGF1ZGlvY29udGV4dC0+Yml0ZGVwdGggPSB3aWR0aDsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1RUQSk7Ci0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtcG4tcmVhbGF1ZGlvIikpIHsKLSAgICBnaW50IHJhdmVyc2lvbjsKLSAgICBjb25zdCBHVmFsdWUgKm1kcHJfZGF0YTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicmF2ZXJzaW9uIiwgJnJhdmVyc2lvbik7Ci0gICAgc3dpdGNoIChyYXZlcnNpb24pIHsKLSAgICAgIGNhc2UgMToKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfQVVESU9fUkVBTF8xNF80KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDI6Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX0FVRElPX1JFQUxfMjhfOCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA4OgotICAgICAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgICAgIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19SRUFMX0NPT0spOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotCi0gICAgbWRwcl9kYXRhID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgIm1kcHJfZGF0YSIpOwotICAgIGlmIChtZHByX2RhdGEgIT0gTlVMTCkgewotICAgICAgZ3VpbnQ4ICpwcml2X2RhdGEgPSBOVUxMOwotICAgICAgZ3VpbnQgcHJpdl9kYXRhX3NpemUgPSAwOwotCi0gICAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGFfYnVmID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKG1kcHJfZGF0YSk7Ci0KLSAgICAgIHByaXZfZGF0YV9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoY29kZWNfZGF0YV9idWYpOwotICAgICAgcHJpdl9kYXRhID0gZ19tYWxsb2MwIChwcml2X2RhdGFfc2l6ZSk7Ci0KLSAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoY29kZWNfZGF0YV9idWYsIDAsIHByaXZfZGF0YSwgLTEpOwotCi0gICAgICBnc3RfbWF0cm9za2FfbXV4X2ZyZWVfY29kZWNfcHJpdiAoY29udGV4dCk7Ci0KLSAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBwcml2X2RhdGE7Ci0gICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBwcml2X2RhdGFfc2l6ZTsKLSAgICB9Ci0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtd21hIikKLSAgICAgIHx8ICFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1hbGF3IikKLSAgICAgIHx8ICFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1tdWxhdyIpCi0gICAgICB8fCAhc3RyY21wIChtaW1ldHlwZSwgImF1ZGlvL3gtYWRwY20iKSkgewotICAgIGd1aW50OCAqY29kZWNfcHJpdjsKLSAgICBndWludCBjb2RlY19wcml2X3NpemU7Ci0gICAgZ3VpbnQxNiBmb3JtYXQgPSAwOwotICAgIGdpbnQgYmxvY2tfYWxpZ24gPSAwOwotICAgIGdpbnQgYml0cmF0ZSA9IDA7Ci0KLSAgICBpZiAoc2FtcGxlcmF0ZSA9PSAwIHx8IGNoYW5uZWxzID09IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiTWlzc2luZyBjaGFubmVscy9zYW1wbGVyYXRlIG9uIGNhcHMiKTsKLSAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgfQotCi0gICAgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC13bWEiKSkgewotICAgICAgZ2ludCB3bWF2ZXJzaW9uOwotICAgICAgZ2ludCBkZXB0aDsKLQotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndtYXZlcnNpb24iLCAmd21hdmVyc2lvbikKLSAgICAgICAgICB8fCAhZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJibG9ja19hbGlnbiIsICZibG9ja19hbGlnbikKLSAgICAgICAgICB8fCAhZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJiaXRyYXRlIiwgJmJpdHJhdGUpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiTWlzc2luZyB3bWF2ZXJzaW9uL2Jsb2NrX2FsaWduL2JpdHJhdGUiCi0gICAgICAgICAgICAiIG9uIFdNQSBjYXBzIik7Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAod21hdmVyc2lvbikgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgZm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfV01BVjE7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICBmb3JtYXQgPSBHU1RfUklGRl9XQVZFX0ZPUk1BVF9XTUFWMjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX1dNQVYzOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiVW5leHBlY3RlZCBXTUEgdmVyc2lvbjogJWQiLCB3bWF2ZXJzaW9uKTsKLSAgICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgICAgfQotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJkZXB0aCIsICZkZXB0aCkpCi0gICAgICAgIGF1ZGlvY29udGV4dC0+Yml0ZGVwdGggPSBkZXB0aDsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1hbGF3IikKLSAgICAgICAgfHwgIXN0cmNtcCAobWltZXR5cGUsICJhdWRpby94LW11bGF3IikpIHsKLSAgICAgIGF1ZGlvY29udGV4dC0+Yml0ZGVwdGggPSA4OwotICAgICAgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1hbGF3IikpCi0gICAgICAgIGZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX0FMQVc7Ci0gICAgICBlbHNlCi0gICAgICAgIGZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX01VTEFXOwotCi0gICAgICBibG9ja19hbGlnbiA9IGNoYW5uZWxzOwotICAgICAgYml0cmF0ZSA9IGJsb2NrX2FsaWduICogc2FtcGxlcmF0ZTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXVkaW8veC1hZHBjbSIpKSB7Ci0gICAgICBjb25zdCBjaGFyICpsYXlvdXQ7Ci0KLSAgICAgIGxheW91dCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAibGF5b3V0Iik7Ci0gICAgICBpZiAoIWxheW91dCkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgIk1pc3NpbmcgbGF5b3V0IG9uIGFkcGNtIGNhcHMiKTsKLSAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICAgIH0KLQotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImJsb2NrX2FsaWduIiwgJmJsb2NrX2FsaWduKSkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgIk1pc3NpbmcgYmxvY2tfYWxpZ24gb24gYWRwY20gY2FwcyIpOwotICAgICAgICBnb3RvIHJlZnVzZV9jYXBzOwotICAgICAgfQotCi0gICAgICBpZiAoIXN0cmNtcCAobGF5b3V0LCAiZHZpIikpIHsKLSAgICAgICAgZm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfRFZJX0FEUENNOwotICAgICAgfSBlbHNlIGlmICghc3RyY21wIChsYXlvdXQsICJnNzI2IikpIHsKLSAgICAgICAgZm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfSVRVX0c3MjZfQURQQ007Ci0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJiaXRyYXRlIiwgJmJpdHJhdGUpKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJNaXNzaW5nIGJpdHJhdGUgb24gYWRwY20gZzcyNiBjYXBzIik7Ci0gICAgICAgICAgZ290byByZWZ1c2VfY2FwczsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJVbmtub3duIGxheW91dCBvbiBhZHBjbSBjYXBzIik7Ci0gICAgICAgIGdvdG8gcmVmdXNlX2NhcHM7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgZ19hc3NlcnQgKGZvcm1hdCAhPSAwKTsKLQotICAgIGNvZGVjX3ByaXZfc2l6ZSA9IFdBVkVGT1JNQVRFWF9TSVpFOwotICAgIGlmIChidWYpCi0gICAgICBjb2RlY19wcml2X3NpemUgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLQotICAgIC8qIHNlcmlhbGl6ZSB3YXZlZm9ybWF0ZXggc3RydWN0dXJlICovCi0gICAgY29kZWNfcHJpdiA9IGdfbWFsbG9jMCAoY29kZWNfcHJpdl9zaXplKTsKLSAgICBHU1RfV1JJVEVfVUlOVDE2X0xFIChjb2RlY19wcml2LCBmb3JtYXQpOwotICAgIEdTVF9XUklURV9VSU5UMTZfTEUgKGNvZGVjX3ByaXYgKyAyLCBjaGFubmVscyk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoY29kZWNfcHJpdiArIDQsIHNhbXBsZXJhdGUpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKGNvZGVjX3ByaXYgKyA4LCBiaXRyYXRlIC8gOCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoY29kZWNfcHJpdiArIDEyLCBibG9ja19hbGlnbik7Ci0gICAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoY29kZWNfcHJpdiArIDE0LCAwKTsKLSAgICBpZiAoYnVmKQotICAgICAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoY29kZWNfcHJpdiArIDE2LCBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKLSAgICBlbHNlCi0gICAgICBHU1RfV1JJVEVfVUlOVDE2X0xFIChjb2RlY19wcml2ICsgMTYsIDApOwotCi0gICAgLyogcHJvY2VzcyBjb2RlYyBwcml2YXRlL2luaXRpYWxpemF0aW9uIGRhdGEsIGlmIGFueSAqLwotICAgIGlmIChidWYpIHsKLSAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLAotICAgICAgICAgIChndWludDggKikgY29kZWNfcHJpdiArIFdBVkVGT1JNQVRFWF9TSVpFLCAtMSk7Ci0gICAgfQotCi0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19BQ00pOwotICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLSAgICBjb250ZXh0LT5jb2RlY19wcml2ID0gKGdwb2ludGVyKSBjb2RlY19wcml2OwotICAgIGNvbnRleHQtPmNvZGVjX3ByaXZfc2l6ZSA9IGNvZGVjX3ByaXZfc2l6ZTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotcmVmdXNlX2NhcHM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgInBhZCAlcyByZWZ1c2VkIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIEdTVF9QQURfTkFNRSAocGFkKSwgY2Fwcyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHdlIHByb2JhYmx5IGRvbid0IGhhdmUgdGhlIGRhdGEgYXQgc3RhcnQsCi0gKiBzbyBoYXZlIHRvIHJlc2VydmUgKGEgbWF4aW11bSkgc3BhY2UgdG8gd3JpdGUgdGhpcyBhdCB0aGUgZW5kLgotICogYml0IHNwYWN5LCBidXQgc29tZSBmb3JtYXRzIGNhbiBob2xkIHF1aXRlIHNvbWUgKi8KLSNkZWZpbmUgU1VCVElUTEVfTUFYX0NPREVDX1BSSVZBVEUgICAyMDQ4ICAgICAgIC8qIG11c3QgYmUgPiAxMjggKi8KLQotLyoqCi0gKiBnc3RfbWF0cm9za2FfbXV4X3N1YnRpdGxlX3BhZF9zZXRjYXBzOgotICogQHBhZDogUGFkIHdoaWNoIGdvdCB0aGUgY2Fwcy4KLSAqIEBjYXBzOiBOZXcgY2Fwcy4KLSAqCi0gKiBTZXRjYXBzIGZ1bmN0aW9uIGZvciBzdWJ0aXRsZSBzaW5rIHBhZC4KLSAqCi0gKiBSZXR1cm5zOiAjVFJVRSBvbiBzdWNjZXNzLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9tdXhfc3VidGl0bGVfcGFkX3NldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIC8qIFRoZXJlIGlzIG5vdyAoYXQgbGVhc3QpIG9uZSBzdWNoIGFsZW1lbnQgKGthdGVlbmMpLCBhbmQgSSdtIGdvaW5nCi0gICAgIHRvIGhhbmRsZSBpdCBoZXJlIGFuZCBjbGFpbSBpdCB3b3JrcyB3aGVuIGl0IGNhbiBiZSBwaXBlZCBiYWNrCi0gICAgIHRocm91Z2ggR1N0cmVhbWVyIGFuZCBWTEMgKi8KLQotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IE5VTEw7Ci0gIEdzdE1hdHJvc2thVHJhY2tTdWJ0aXRsZUNvbnRleHQgKnNjb250ZXh0OwotICBHc3RNYXRyb3NrYU11eCAqbXV4OwotICBHc3RNYXRyb3NrYVBhZCAqY29sbGVjdF9wYWQ7Ci0gIGNvbnN0IGdjaGFyICptaW1ldHlwZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWUgPSBOVUxMOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgbXV4ID0gR1NUX01BVFJPU0tBX01VWCAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOwotCi0gIC8qIGZpbmQgY29udGV4dCAqLwotICBjb2xsZWN0X3BhZCA9IChHc3RNYXRyb3NrYVBhZCAqKSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIGdfYXNzZXJ0IChjb2xsZWN0X3BhZCk7Ci0gIGNvbnRleHQgPSBjb2xsZWN0X3BhZC0+dHJhY2s7Ci0gIGdfYXNzZXJ0IChjb250ZXh0KTsKLSAgZ19hc3NlcnQgKGNvbnRleHQtPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEUpOwotICBzY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrU3VidGl0bGVDb250ZXh0ICopIGNvbnRleHQ7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIG1pbWV0eXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKLQotICAvKiBnZW5lcmFsIHNldHVwICovCi0gIHNjb250ZXh0LT5jaGVja191dGY4ID0gMTsKLSAgc2NvbnRleHQtPmludmFsaWRfdXRmOCA9IDA7Ci0gIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPSAwOwotCi0gIGlmICghc3RyY21wIChtaW1ldHlwZSwgInN1YnRpdGxlL3gta2F0ZSIpKSB7Ci0gICAgY29uc3QgR1ZhbHVlICpzdHJlYW1oZWFkZXI7Ci0KLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX0tBVEUpOwotCi0gICAgZ3N0X21hdHJvc2thX211eF9mcmVlX2NvZGVjX3ByaXYgKGNvbnRleHQpOwotCi0gICAgc3RyZWFtaGVhZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgInN0cmVhbWhlYWRlciIpOwotICAgIGlmICgha2F0ZV9zdHJlYW1oZWFkZXJfdG9fY29kZWNkYXRhIChzdHJlYW1oZWFkZXIsIGNvbnRleHQpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXV4LCBTVFJFQU0sIE1VWCwgKE5VTEwpLAotICAgICAgICAgICgia2F0ZSBzdHJlYW0gaGVhZGVycyBtaXNzaW5nIG9yIG1hbGZvcm1lZCIpKTsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgZ290byBleGl0OwotICAgIH0KLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgInRleHQveC1yYXciKSkgewotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LAotICAgICAgICBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfVVRGOCk7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJhcHBsaWNhdGlvbi94LXNzYSIpKSB7Ci0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbnRleHQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9TVUJUSVRMRV9TU0EpOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1pbWV0eXBlLCAiYXBwbGljYXRpb24veC1hc3MiKSkgewotICAgIGdzdF9tYXRyb3NrYV9tdXhfc2V0X2NvZGVjX2lkIChjb250ZXh0LCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfU1VCVElUTEVfQVNTKTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChtaW1ldHlwZSwgImFwcGxpY2F0aW9uL3gtdXNmIikpIHsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX1VTRik7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWltZXR5cGUsICJzdWJwaWN0dXJlL3gtZHZkIikpIHsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3NldF9jb2RlY19pZCAoY29udGV4dCwKLSAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX1NVQlRJVExFX1ZPQlNVQik7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gICAgZ290byBleGl0OwotICB9Ci0KLSAgLyogbWF5YmUgc29tZSBwcml2YXRlIGRhdGEsIGUuZy4gdm9ic3ViICovCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvZGVjX2RhdGEiKTsKLSAgaWYgKHZhbHVlKQotICAgIGJ1ZiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0gIGlmIChidWYgIT0gTlVMTCkgewotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGd1aW50OCAqcHJpdl9kYXRhID0gTlVMTDsKLQotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgICBpZiAobWFwLnNpemUgPiBTVUJUSVRMRV9NQVhfQ09ERUNfUFJJVkFURSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJwYWQgJSIgR1NUX1BUUl9GT1JNQVQgIiBzdWJ0aXRsZSBwcml2YXRlIGRhdGEiCi0gICAgICAgICAgIiBleGNlZWRlZCBtYXhpbXVtICglZCk7IGRpc2NhcmRpbmciLCBwYWQsCi0gICAgICAgICAgU1VCVElUTEVfTUFYX0NPREVDX1BSSVZBVEUpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIGdzdF9tYXRyb3NrYV9tdXhfZnJlZV9jb2RlY19wcml2IChjb250ZXh0KTsKLQotICAgIHByaXZfZGF0YSA9IGdfbWFsbG9jMCAobWFwLnNpemUpOwotICAgIG1lbWNweSAocHJpdl9kYXRhLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBwcml2X2RhdGE7Ci0gICAgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplID0gbWFwLnNpemU7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImNvZGVjX2lkICVzLCBjb2RlYyBkYXRhIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICBHU1RfU1RSX05VTEwgKGNvbnRleHQtPmNvZGVjX2lkKSwgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLQotZXhpdDoKLQotICByZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICogZ3N0X21hdHJvc2thX211eF9yZXF1ZXN0X25ld19wYWQ6Ci0gKiBAZWxlbWVudDogI0dzdE1hdHJvc2thTXV4LgotICogQHRlbXBsOiAjR3N0UGFkVGVtcGxhdGUuCi0gKiBAcGFkX25hbWU6IE5ldyBwYWQgbmFtZS4KLSAqCi0gKiBSZXF1ZXN0IHBhZCBmdW5jdGlvbiBmb3Igc2luayB0ZW1wbGF0ZXMuCi0gKgotICogUmV0dXJuczogTmV3ICNHc3RQYWQuCi0gKi8KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X21hdHJvc2thX211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogcmVxX25hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgR3N0TWF0cm9za2FNdXggKm11eCA9IEdTVF9NQVRST1NLQV9NVVggKGVsZW1lbnQpOwotICBHc3RNYXRyb3NrYVBhZCAqY29sbGVjdF9wYWQ7Ci0gIEdzdE1hdHJvc2thbXV4UGFkICpuZXdwYWQ7Ci0gIGdjaGFyICpuYW1lID0gTlVMTDsKLSAgY29uc3QgZ2NoYXIgKnBhZF9uYW1lID0gTlVMTDsKLSAgR3N0TWF0cm9za2FDYXBzRnVuYyBjYXBzZnVuYyA9IE5VTEw7Ci0gIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKLSAgZ2ludCBwYWRfaWQ7Ci0gIGdib29sZWFuIGxvY2tlZCA9IFRSVUU7Ci0gIGNvbnN0IGdjaGFyICppZCA9IE5VTEw7Ci0KLSAgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAiYXVkaW9fJXUiKSkgewotICAgIC8qIGRvbid0IG1peCBuYW1lZCBhbmQgdW5uYW1lZCBwYWRzLCBpZiB0aGUgcGFkIGFscmVhZHkgZXhpc3RzIHdlIGZhaWwgd2hlbgotICAgICAqIHRyeWluZyB0byBhZGQgaXQgKi8KLSAgICBpZiAocmVxX25hbWUgIT0gTlVMTCAmJiBzc2NhbmYgKHJlcV9uYW1lLCAiYXVkaW9fJXUiLCAmcGFkX2lkKSA9PSAxKSB7Ci0gICAgICBwYWRfbmFtZSA9IHJlcV9uYW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiYXVkaW9fJXUiLCBtdXgtPm51bV9hX3N0cmVhbXMrKyk7Ci0gICAgICBwYWRfbmFtZSA9IG5hbWU7Ci0gICAgfQotICAgIGNhcHNmdW5jID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9tdXhfYXVkaW9fcGFkX3NldGNhcHMpOwotICAgIGNvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKikKLSAgICAgICAgZ19uZXcwIChHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0LCAxKTsKLSAgICBjb250ZXh0LT50eXBlID0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQVVESU87Ci0gICAgY29udGV4dC0+bmFtZSA9IGdfc3RyZHVwICgiQXVkaW8iKTsKLSAgfSBlbHNlIGlmICh0ZW1wbCA9PSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInZpZGVvXyV1IikpIHsKLSAgICAvKiBkb24ndCBtaXggbmFtZWQgYW5kIHVubmFtZWQgcGFkcywgaWYgdGhlIHBhZCBhbHJlYWR5IGV4aXN0cyB3ZSBmYWlsIHdoZW4KLSAgICAgKiB0cnlpbmcgdG8gYWRkIGl0ICovCi0gICAgaWYgKHJlcV9uYW1lICE9IE5VTEwgJiYgc3NjYW5mIChyZXFfbmFtZSwgInZpZGVvXyV1IiwgJnBhZF9pZCkgPT0gMSkgewotICAgICAgcGFkX25hbWUgPSByZXFfbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInZpZGVvXyV1IiwgbXV4LT5udW1fdl9zdHJlYW1zKyspOwotICAgICAgcGFkX25hbWUgPSBuYW1lOwotICAgIH0KLSAgICBjYXBzZnVuYyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfbXV4X3ZpZGVvX3BhZF9zZXRjYXBzKTsKLSAgICBjb250ZXh0ID0gKEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICopCi0gICAgICAgIGdfbmV3MCAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCwgMSk7Ci0gICAgY29udGV4dC0+dHlwZSA9IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPOwotICAgIGNvbnRleHQtPm5hbWUgPSBnX3N0cmR1cCAoIlZpZGVvIik7Ci0gIH0gZWxzZSBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJzdWJ0aXRsZV8ldSIpKSB7Ci0gICAgLyogZG9uJ3QgbWl4IG5hbWVkIGFuZCB1bm5hbWVkIHBhZHMsIGlmIHRoZSBwYWQgYWxyZWFkeSBleGlzdHMgd2UgZmFpbCB3aGVuCi0gICAgICogdHJ5aW5nIHRvIGFkZCBpdCAqLwotICAgIGlmIChyZXFfbmFtZSAhPSBOVUxMICYmIHNzY2FuZiAocmVxX25hbWUsICJzdWJ0aXRsZV8ldSIsICZwYWRfaWQpID09IDEpIHsKLSAgICAgIHBhZF9uYW1lID0gcmVxX25hbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzdWJ0aXRsZV8ldSIsIG11eC0+bnVtX3Rfc3RyZWFtcysrKTsKLSAgICAgIHBhZF9uYW1lID0gbmFtZTsKLSAgICB9Ci0gICAgY2Fwc2Z1bmMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX211eF9zdWJ0aXRsZV9wYWRfc2V0Y2Fwcyk7Ci0gICAgY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqKQotICAgICAgICBnX25ldzAgKEdzdE1hdHJvc2thVHJhY2tTdWJ0aXRsZUNvbnRleHQsIDEpOwotICAgIGNvbnRleHQtPnR5cGUgPSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9TVUJUSVRMRTsKLSAgICBjb250ZXh0LT5uYW1lID0gZ19zdHJkdXAgKCJTdWJ0aXRsZSIpOwotICAgIC8qIHNldGNhcHMgbWF5IG9ubHkgcHJvdmlkZSBwcm9wZXIgb25lIGEgbG90IGxhdGVyICovCi0gICAgaWQgPSAiU19TVUJfVU5LTk9XTiI7Ci0gICAgbG9ja2VkID0gRkFMU0U7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJUaGlzIGlzIG5vdCBvdXIgdGVtcGxhdGUhIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBuZXdwYWQgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX01BVFJPU0tBTVVYX1BBRCwKLSAgICAgICJuYW1lIiwgcGFkX25hbWUsICJkaXJlY3Rpb24iLCB0ZW1wbC0+ZGlyZWN0aW9uLCAidGVtcGxhdGUiLCB0ZW1wbCwgTlVMTCk7Ci0KLSAgZ3N0X21hdHJvc2thbXV4X3BhZF9pbml0IChuZXdwYWQpOwotICBjb2xsZWN0X3BhZCA9IChHc3RNYXRyb3NrYVBhZCAqKQotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChtdXgtPmNvbGxlY3QsIEdTVF9QQUQgKG5ld3BhZCksCi0gICAgICBzaXplb2YgKEdzdE1hdHJvc2thbXV4UGFkKSwKLSAgICAgIChHc3RDb2xsZWN0RGF0YURlc3Ryb3lOb3RpZnkpIGdzdF9tYXRyb3NrYV9wYWRfZnJlZSwgbG9ja2VkKTsKLQotICBjb2xsZWN0X3BhZC0+bXV4ID0gbXV4OwotICBjb2xsZWN0X3BhZC0+dHJhY2sgPSBjb250ZXh0OwotICBnc3RfbWF0cm9za2FfcGFkX3Jlc2V0IChjb2xsZWN0X3BhZCwgRkFMU0UpOwotICBpZiAoaWQpCi0gICAgZ3N0X21hdHJvc2thX211eF9zZXRfY29kZWNfaWQgKGNvbGxlY3RfcGFkLT50cmFjaywgaWQpOwotICBjb2xsZWN0X3BhZC0+dHJhY2stPmR0c19vbmx5ID0gRkFMU0U7Ci0KLSAgY29sbGVjdF9wYWQtPmNhcHNmdW5jID0gY2Fwc2Z1bmM7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoR1NUX1BBRCAobmV3cGFkKSwgVFJVRSk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfYWRkX3BhZCAoZWxlbWVudCwgR1NUX1BBRCAobmV3cGFkKSkpCi0gICAgZ290byBwYWRfYWRkX2ZhaWxlZDsKLQotICBnX2ZyZWUgKG5hbWUpOwotCi0gIG11eC0+bnVtX3N0cmVhbXMrKzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChuZXdwYWQsICJBZGRlZCBuZXcgcmVxdWVzdCBwYWQiKTsKLQotICByZXR1cm4gR1NUX1BBRCAobmV3cGFkKTsKLQotICAvKiBFUlJPUiBjYXNlcyAqLwotcGFkX2FkZF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgIkFkZGluZyB0aGUgbmV3IHBhZCAnJXMnIGZhaWxlZCIsIHBhZF9uYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG5ld3BhZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfbWF0cm9za2FfbXV4X3JlbGVhc2VfcGFkOgotICogQGVsZW1lbnQ6ICNHc3RNYXRyb3NrYU11eC4KLSAqIEBwYWQ6IFBhZCB0byByZWxlYXNlLgotICoKLSAqIFJlbGVhc2UgYSBwcmV2aW91c2x5IHJlcXVlc3RlZCBwYWQuCi0qLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdE1hdHJvc2thTXV4ICptdXg7Ci0gIEdTTGlzdCAqd2FsazsKLQotICBtdXggPSBHU1RfTUFUUk9TS0FfTVVYIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0KLSAgZm9yICh3YWxrID0gbXV4LT5jb2xsZWN0LT5kYXRhOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdENvbGxlY3REYXRhICpjZGF0YSA9IChHc3RDb2xsZWN0RGF0YSAqKSB3YWxrLT5kYXRhOwotICAgIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZCA9IChHc3RNYXRyb3NrYVBhZCAqKSBjZGF0YTsKLQotICAgIGlmIChjZGF0YS0+cGFkID09IHBhZCkgewotICAgICAgLyoKLSAgICAgICAqIG9ic2VydmVkIGR1cmF0aW9uLCB0aGlzIHdpbGwgcmVtYWluIEdTVF9DTE9DS19USU1FX05PTkUKLSAgICAgICAqIG9ubHkgaWYgdGhlIHBhZCBpcyByZXNldHRlZCAKLSAgICAgICAqLwotICAgICAgR3N0Q2xvY2tUaW1lIGNvbGxlY3RlZF9kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoY29sbGVjdF9wYWQtPnN0YXJ0X3RzKSAmJgotICAgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChjb2xsZWN0X3BhZC0+ZW5kX3RzKSkgewotICAgICAgICBjb2xsZWN0ZWRfZHVyYXRpb24gPQotICAgICAgICAgICAgR1NUX0NMT0NLX0RJRkYgKGNvbGxlY3RfcGFkLT5zdGFydF90cywgY29sbGVjdF9wYWQtPmVuZF90cyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoY29sbGVjdGVkX2R1cmF0aW9uKQotICAgICAgICAgICYmIG11eC0+ZHVyYXRpb24gPCBjb2xsZWN0ZWRfZHVyYXRpb24pCi0gICAgICAgIG11eC0+ZHVyYXRpb24gPSBjb2xsZWN0ZWRfZHVyYXRpb247Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAobXV4LT5jb2xsZWN0LCBwYWQpOwotICBpZiAoZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgcGFkKSkKLSAgICBtdXgtPm51bV9zdHJlYW1zLS07Ci19Ci0KLQotLyoqCi0gKiBnc3RfbWF0cm9za2FfbXV4X3RyYWNrX2hlYWRlcjoKLSAqIEBtdXg6ICNHc3RNYXRyb3NrYU11eAotICogQGNvbnRleHQ6IFRhY2sgY29udGV4dC4KLSAqCi0gKiBXcml0ZSBhIHRyYWNrIGhlYWRlci4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfdHJhY2tfaGVhZGVyIChHc3RNYXRyb3NrYU11eCAqIG11eCwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEdzdEVibWxXcml0ZSAqZWJtbCA9IG11eC0+ZWJtbF93cml0ZTsKLSAgZ3VpbnQ2NCBtYXN0ZXI7Ci0KLSAgLyogVE9ETzogY2hlY2sgaWYgZXZlcnl0aGluZyBuZWNlc3NhcnkgaXMgd3JpdHRlbiBhbmQgY2hlY2sgZGVmYXVsdCB2YWx1ZXMgKi8KLQotICAvKiB0cmFjayB0eXBlIGdvZXMgYmVmb3JlIHRoZSB0eXBlLXNwZWNpZmljIHN0dWZmICovCi0gIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UUkFDS05VTUJFUiwgY29udGV4dC0+bnVtKTsKLSAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RSQUNLVFlQRSwgY29udGV4dC0+dHlwZSk7Ci0KLSAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RSQUNLVUlELCBjb250ZXh0LT51aWQpOwotICBpZiAoY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbikgewotICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UUkFDS0RFRkFVTFREVVJBVElPTiwKLSAgICAgICAgY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbik7Ci0gIH0KLSAgaWYgKGNvbnRleHQtPmxhbmd1YWdlKSB7Ci0gICAgZ3N0X2VibWxfd3JpdGVfdXRmOCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RSQUNLTEFOR1VBR0UsCi0gICAgICAgIGNvbnRleHQtPmxhbmd1YWdlKTsKLSAgfQotCi0gIC8qIEZJWE1FOiB1bnRpbCB3ZSBoYXZlIGEgbmljZSB3YXkgb2YgZ2V0dGluZyB0aGUgY29kZWNuYW1lCi0gICAqIG91dCBvZiB0aGUgY2FwcywgSSdtIG5vdCBnb2luZyB0byBlbmFibGUgdGhpcy4gVG9vIG11Y2gKLSAgICogKHVzZWxlc3MsIGRvdWJsZSwgYm9yaW5nKSB3b3JrLi4uICovCi0gIC8qIFRPRE86IFVzZSB2YWx1ZSBmcm9tIHRhZ3MgaWYgYW55ICovCi0gIC8qZ3N0X2VibWxfd3JpdGVfdXRmOCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NPREVDTkFNRSwKLSAgICAgY29udGV4dC0+Y29kZWNfbmFtZSk7ICovCi0gIGdzdF9lYm1sX3dyaXRlX3V0ZjggKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UUkFDS05BTUUsIGNvbnRleHQtPm5hbWUpOwotCi0gIC8qIHR5cGUtc3BlY2lmaWMgc3R1ZmYgKi8KLSAgc3dpdGNoIChjb250ZXh0LT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTzp7Ci0gICAgICBHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICp2aWRlb2NvbnRleHQgPQotICAgICAgICAgIChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbnRleHQ7Ci0KLSAgICAgIG1hc3RlciA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RSQUNLVklERU8pOwotICAgICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1ZJREVPUElYRUxXSURUSCwKLSAgICAgICAgICB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMSEVJR0hULAotICAgICAgICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0KTsKLSAgICAgIGlmICh2aWRlb2NvbnRleHQtPmRpc3BsYXlfd2lkdGggJiYgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCkgewotICAgICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVklERU9ESVNQTEFZV0lEVEgsCi0gICAgICAgICAgICB2aWRlb2NvbnRleHQtPmRpc3BsYXlfd2lkdGgpOwotICAgICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVklERU9ESVNQTEFZSEVJR0hULAotICAgICAgICAgICAgdmlkZW9jb250ZXh0LT5kaXNwbGF5X2hlaWdodCk7Ci0gICAgICB9Ci0gICAgICBpZiAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVklERU9UUkFDS19JTlRFUkxBQ0VEKQotICAgICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVklERU9GTEFHSU5URVJMQUNFRCwgMSk7Ci0gICAgICBpZiAodmlkZW9jb250ZXh0LT5mb3VyY2MpIHsKLSAgICAgICAgZ3VpbnQzMiBmY2NfbGUgPSBHVUlOVDMyX1RPX0xFICh2aWRlb2NvbnRleHQtPmZvdXJjYyk7Ci0KLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfYmluYXJ5IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVklERU9DT0xPVVJTUEFDRSwKLSAgICAgICAgICAgIChncG9pbnRlcikgJiBmY2NfbGUsIDQpOwotICAgICAgfQotICAgICAgaWYgKHZpZGVvY29udGV4dC0+bXVsdGl2aWV3X21vZGUgIT0gR1NUX1ZJREVPX01VTFRJVklFV19NT0RFX05PTkUpIHsKLSAgICAgICAgZ3VpbnQ2NCBzdGVyZW9fbW9kZSA9IDA7Ci0KLSAgICAgICAgc3dpdGNoICh2aWRlb2NvbnRleHQtPm11bHRpdmlld19tb2RlKSB7Ci0gICAgICAgICAgY2FzZSBHU1RfVklERU9fTVVMVElWSUVXX01PREVfTU9OTzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX01VTFRJVklFV19NT0RFX1NJREVfQllfU0lERToKLSAgICAgICAgICAgIGlmICh2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncyAmCi0gICAgICAgICAgICAgICAgR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19SSUdIVF9WSUVXX0ZJUlNUKQotICAgICAgICAgICAgICBzdGVyZW9fbW9kZSA9IEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9TQlNfUkw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHN0ZXJlb19tb2RlID0gR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX1NCU19MUjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX01VTFRJVklFV19NT0RFX1RPUF9CT1RUT006Ci0gICAgICAgICAgICBpZiAodmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfZmxhZ3MgJgotICAgICAgICAgICAgICAgIEdTVF9WSURFT19NVUxUSVZJRVdfRkxBR1NfUklHSFRfVklFV19GSVJTVCkKLSAgICAgICAgICAgICAgc3RlcmVvX21vZGUgPSBHU1RfTUFUUk9TS0FfU1RFUkVPX01PREVfVEJfUkw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHN0ZXJlb19tb2RlID0gR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX1RCX0xSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfVklERU9fTVVMVElWSUVXX01PREVfQ0hFQ0tFUkJPQVJEOgotICAgICAgICAgICAgaWYgKHZpZGVvY29udGV4dC0+bXVsdGl2aWV3X2ZsYWdzICYKLSAgICAgICAgICAgICAgICBHU1RfVklERU9fTVVMVElWSUVXX0ZMQUdTX1JJR0hUX1ZJRVdfRklSU1QpCi0gICAgICAgICAgICAgIHN0ZXJlb19tb2RlID0gR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX0NIRUNLRVJfUkw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHN0ZXJlb19tb2RlID0gR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX0NIRUNLRVJfTFI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9WSURFT19NVUxUSVZJRVdfTU9ERV9GUkFNRV9CWV9GUkFNRToKLSAgICAgICAgICAgIGlmICh2aWRlb2NvbnRleHQtPm11bHRpdmlld19mbGFncyAmCi0gICAgICAgICAgICAgICAgR1NUX1ZJREVPX01VTFRJVklFV19GTEFHU19SSUdIVF9WSUVXX0ZJUlNUKQotICAgICAgICAgICAgICBzdGVyZW9fbW9kZSA9IEdTVF9NQVRST1NLQV9TVEVSRU9fTU9ERV9GQkZfUkw7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHN0ZXJlb19tb2RlID0gR1NUX01BVFJPU0tBX1NURVJFT19NT0RFX0ZCRl9MUjsKLSAgICAgICAgICAgIC8qIEZJWE1FOiBJbiBmcmFtZS1ieS1mcmFtZSBtb2RlLCBsZWZ0L3JpZ2h0IGZyYW1lIGJ1ZmZlcnMgbmVlZCB0byBiZQotICAgICAgICAgICAgICogbGFjZWQgd2l0aGluIG9uZSBibG9jay4gU2VlIGh0dHA6Ly93d3cubWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9pbmRleC5odG1sI1N0ZXJlb01vZGUgKi8KLSAgICAgICAgICAgIEdTVF9GSVhNRV9PQkpFQ1QgKG11eCwKLSAgICAgICAgICAgICAgICAiRnJhbWUtYnktZnJhbWUgc3RlcmVvc2NvcGljIG1vZGUgbm90IGZ1bGx5IGltcGxlbWVudGVkIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsCi0gICAgICAgICAgICAgICAgIk11bHRpdmlldyBtb2RlICVkIG5vdCBzdXBwb3J0ZWQgaW4gTWF0cm9za2EvV2ViTSIsCi0gICAgICAgICAgICAgICAgdmlkZW9jb250ZXh0LT5tdWx0aXZpZXdfbW9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGVyZW9fbW9kZSAhPSAwKQotICAgICAgICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9WSURFT1NURVJFT01PREUsCi0gICAgICAgICAgICAgIHN0ZXJlb19tb2RlKTsKLSAgICAgIH0KLSAgICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcik7Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQVVESU86ewotICAgICAgR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqYXVkaW9jb250ZXh0ID0KLSAgICAgICAgICAoR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqKSBjb250ZXh0OwotCi0gICAgICBtYXN0ZXIgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UUkFDS0FVRElPKTsKLSAgICAgIGlmIChhdWRpb2NvbnRleHQtPnNhbXBsZXJhdGUgIT0gODAwMCkKLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfZmxvYXQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9BVURJT1NBTVBMSU5HRlJFUSwKLSAgICAgICAgICAgIGF1ZGlvY29udGV4dC0+c2FtcGxlcmF0ZSk7Ci0gICAgICBpZiAoYXVkaW9jb250ZXh0LT5jaGFubmVscyAhPSAxKQotICAgICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUywKLSAgICAgICAgICAgIGF1ZGlvY29udGV4dC0+Y2hhbm5lbHMpOwotICAgICAgaWYgKGF1ZGlvY29udGV4dC0+Yml0ZGVwdGgpIHsKLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0FVRElPQklUREVQVEgsCi0gICAgICAgICAgICBhdWRpb2NvbnRleHQtPmJpdGRlcHRoKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbWFzdGVyKTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9TVUJUSVRMRTp7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIGRvZXNuJ3QgbmVlZCB0eXBlLXNwZWNpZmljIGRhdGEgKi8KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X2VibWxfd3JpdGVfYXNjaWkgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0lELCBjb250ZXh0LT5jb2RlY19pZCk7Ci0gIGlmIChjb250ZXh0LT5jb2RlY19wcml2KQotICAgIGdzdF9lYm1sX3dyaXRlX2JpbmFyeSAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NPREVDUFJJVkFURSwKLSAgICAgICAgY29udGV4dC0+Y29kZWNfcHJpdiwgY29udGV4dC0+Y29kZWNfcHJpdl9zaXplKTsKLQotICBpZiAoY29udGV4dC0+c2Vla19wcmVyb2xsKSB7Ci0gICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1NFRUtQUkVST0xMLAotICAgICAgICBjb250ZXh0LT5zZWVrX3ByZXJvbGwpOwotICB9Ci0KLSAgaWYgKGNvbnRleHQtPmNvZGVjX2RlbGF5KSB7Ci0gICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NPREVDREVMQVksCi0gICAgICAgIGNvbnRleHQtPmNvZGVjX2RlbGF5KTsKLSAgfQotfQotCi0jaWYgMAotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfY2hhcHRlcl90aXRsZSAoY29uc3QgZ2NoYXIgKiB0aXRsZSwgR3N0RWJtbFdyaXRlICogZWJtbCkKLXsKLSAgZ3VpbnQ2NCB0aXRsZV9tYXN0ZXI7Ci0KLSAgdGl0bGVfbWFzdGVyID0KLSAgICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJESVNQTEFZKTsKLQotICBnc3RfZWJtbF93cml0ZV91dGY4IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQ0hBUFNUUklORywgdGl0bGUpOwotICBnc3RfZWJtbF93cml0ZV9hc2NpaSAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NIQVBMQU5HVUFHRSwKLSAgICAgIEdTVF9NQVRST1NLQV9NVVhfQ0hBUExBTkcpOwotCi0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIHRpdGxlX21hc3Rlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfbXV4X3dyaXRlX2NoYXB0ZXIgKEdzdE1hdHJvc2thTXV4ICogbXV4LCBHc3RUb2NFbnRyeSAqIGVkaXRpb24sCi0gICAgR3N0VG9jRW50cnkgKiBlbnRyeSwgR3N0RWJtbFdyaXRlICogZWJtbCwgZ3VpbnQ2NCAqIG1hc3Rlcl9jaGFwdGVycywKLSAgICBndWludDY0ICogbWFzdGVyX2VkaXRpb24pCi17Ci0gIGd1aW50NjQgdWlkLCBtYXN0ZXJfY2hhcHRlcmF0b207Ci0gIEdMaXN0ICpjdXI7Ci0gIEdzdFRvY0VudHJ5ICpjdXJfZW50cnk7Ci0gIGd1aW50IGNvdW50LCBpOwotICBnY2hhciAqdGl0bGU7Ci0gIGdpbnQ2NCBzdGFydCwgc3RvcDsKLQotICBpZiAoR19VTkxJS0VMWSAobWFzdGVyX2NoYXB0ZXJzICE9IE5VTEwgJiYgKm1hc3Rlcl9jaGFwdGVycyA9PSAwKSkKLSAgICAqbWFzdGVyX2NoYXB0ZXJzID0KLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlMpOwotCi0gIGlmIChHX1VOTElLRUxZIChtYXN0ZXJfZWRpdGlvbiAhPSBOVUxMICYmICptYXN0ZXJfZWRpdGlvbiA9PSAwKSkgewotICAgIC8qIGNyZWF0ZSB1aWQgZm9yIHRoZSBwYXJlbnQgKi8KLSAgICB1aWQgPSBnc3RfbWF0cm9za2FfbXV4X2NyZWF0ZV91aWQgKCk7Ci0gICAgZ19mcmVlIChlZGl0aW9uLT51aWQpOwotICAgIGVkaXRpb24tPnVpZCA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIHVpZCk7Ci0KLSAgICAqbWFzdGVyX2VkaXRpb24gPQotICAgICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9FRElUSU9ORU5UUlkpOwotCi0gICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0VESVRJT05VSUQsIHVpZCk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0VESVRJT05GTEFHSElEREVOLCAwKTsKLSAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfRURJVElPTkZMQUdERUZBVUxULCAwKTsKLSAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfRURJVElPTkZMQUdPUkRFUkVELCAwKTsKLSAgfQotCi0gIHVpZCA9IGdzdF9tYXRyb3NrYV9tdXhfY3JlYXRlX3VpZCAoKTsKLSAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyAoZW50cnksICZzdGFydCwgJnN0b3ApOwotCi0gIG1hc3Rlcl9jaGFwdGVyYXRvbSA9Ci0gICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSQVRPTSk7Ci0gIGdfZnJlZSAoZW50cnktPnVpZCk7Ci0gIGVudHJ5LT51aWQgPSBnX3N0cmR1cF9wcmludGYgKCIlIiBHX0dVSU5UNjRfRk9STUFULCB1aWQpOwotICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUlVJRCwgdWlkKTsKLSAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUSU1FU1RBUlQsIHN0YXJ0KTsKLSAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUSU1FU1RPUCwgc3RvcCk7Ci0gIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSRkxBR0hJRERFTiwgMCk7Ci0gIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSRkxBR0VOQUJMRUQsIDEpOwotCi0gIGN1ciA9IGVudHJ5LT5zdWJlbnRyaWVzOwotICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICBjdXJfZW50cnkgPSBjdXItPmRhdGE7Ci0gICAgZ3N0X21hdHJvc2thX211eF93cml0ZV9jaGFwdGVyIChtdXgsIE5VTEwsIGN1cl9lbnRyeSwgZWJtbCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBjdXIgPSBjdXItPm5leHQ7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKGVudHJ5LT50YWdzICE9IE5VTEwpKSB7Ci0gICAgY291bnQgPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChlbnRyeS0+dGFncywgR1NUX1RBR19USVRMRSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmdfaW5kZXggKGVudHJ5LT50YWdzLCBHU1RfVEFHX1RJVExFLCBpLCAmdGl0bGUpOwotICAgICAgZ3N0X21hdHJvc2thX211eF93cml0ZV9jaGFwdGVyX3RpdGxlICh0aXRsZSwgZWJtbCk7Ci0gICAgICBnX2ZyZWUgKHRpdGxlKTsKLSAgICB9Ci0KLSAgICAvKiByZW1vdmUgdGl0bGUgdGFnICovCi0gICAgaWYgKEdfTElLRUxZIChjb3VudCA+IDApKQotICAgICAgZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKGVudHJ5LT50YWdzLCBHU1RfVEFHX1RJVExFKTsKLSAgfQotCi0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcl9jaGFwdGVyYXRvbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfbXV4X3dyaXRlX2NoYXB0ZXJfZWRpdGlvbiAoR3N0TWF0cm9za2FNdXggKiBtdXgsCi0gICAgR3N0VG9jRW50cnkgKiBlbnRyeSwgR3N0RWJtbFdyaXRlICogZWJtbCwgZ3VpbnQ2NCAqIG1hc3Rlcl9jaGFwdGVycykKLXsKLSAgZ3VpbnQ2NCBtYXN0ZXJfZWRpdGlvbiA9IDA7Ci0gIEdMaXN0ICpjdXI7Ci0gIEdzdFRvY0VudHJ5ICpzdWJlbnRyeTsKLQotICBjdXIgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAoZW50cnkpOwotICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICBzdWJlbnRyeSA9IGN1ci0+ZGF0YTsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3dyaXRlX2NoYXB0ZXIgKG11eCwgZW50cnksIHN1YmVudHJ5LCBlYm1sLCBtYXN0ZXJfY2hhcHRlcnMsCi0gICAgICAgICZtYXN0ZXJfZWRpdGlvbik7Ci0KLSAgICBjdXIgPSBjdXItPm5leHQ7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKG1hc3Rlcl9lZGl0aW9uICE9IDApKQotICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcl9lZGl0aW9uKTsKLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfc3RhcnQ6Ci0gKiBAbXV4OiAjR3N0TWF0cm9za2FNdXgKLSAqCi0gKiBTdGFydCBhIG5ldyBtYXRyb3NrYSBmaWxlICh3cml0ZSBoZWFkZXJzIGV0Yy4uLikKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfc3RhcnQgKEdzdE1hdHJvc2thTXV4ICogbXV4KQotewotICBHc3RFYm1sV3JpdGUgKmVibWwgPSBtdXgtPmVibWxfd3JpdGU7Ci0gIGNvbnN0IGdjaGFyICpkb2N0eXBlOwotICBndWludDMyIHNlZWtoZWFkX2lkW10gPSB7IEdTVF9NQVRST1NLQV9JRF9TRUdNRU5USU5GTywKLSAgICBHU1RfTUFUUk9TS0FfSURfVFJBQ0tTLAotICAgIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSUywKLSAgICBHU1RfTUFUUk9TS0FfSURfQ1VFUywKLSAgICBHU1RfTUFUUk9TS0FfSURfVEFHUywKLSAgICAwCi0gIH07Ci0gIGNvbnN0IGdjaGFyICptZWRpYV90eXBlOwotICBnYm9vbGVhbiBhdWRpb19vbmx5OwotICBndWludDY0IG1hc3RlciwgY2hpbGQ7Ci0gIEdTTGlzdCAqY29sbGVjdGVkOwotICBpbnQgaTsKLSAgZ3VpbnQgdHJhY2tudW0gPSAxOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24gPSAwOwotICBndWludDMyIHNlZ21lbnRfdWlkWzRdOwotICBHVGltZVZhbCB0aW1lID0geyAwLCAwIH07Ci0gIGdjaGFyIHNfaWRbMzJdOwotI2lmIDAKLSAgR3N0VG9jICp0b2M7Ci0jZW5kaWYKLQotICAvKiBpZiBub3Qgc3RyZWFtaW5nLCBjaGVjayBpZiBkb3duc3RyZWFtIGlzIHNlZWthYmxlICovCi0gIGlmICghbXV4LT5lYm1sX3dyaXRlLT5zdHJlYW1hYmxlKSB7Ci0gICAgZ2Jvb2xlYW4gc2Vla2FibGU7Ci0gICAgR3N0UXVlcnkgKnF1ZXJ5OwotCi0gICAgcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICAgIGlmIChnc3RfcGFkX3BlZXJfcXVlcnkgKG11eC0+c3JjcGFkLCBxdWVyeSkpIHsKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgTlVMTCwgJnNlZWthYmxlLCBOVUxMLCBOVUxMKTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAobXV4LCAiZG93bnN0cmVhbSBpcyAlc3NlZWthYmxlIiwgc2Vla2FibGUgPyAiIiA6ICJub3QgIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGFzc3VtZSBzZWVraW5nIGlzIG5vdCBzdXBwb3J0ZWQgaWYgcXVlcnkgbm90IGhhbmRsZWQgZG93bnN0cmVhbSAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJkb3duc3RyZWFtIGRpZCBub3QgaGFuZGxlIHNlZWtpbmcgcXVlcnkiKTsKLSAgICAgIHNlZWthYmxlID0gRkFMU0U7Ci0gICAgfQotICAgIGlmICghc2Vla2FibGUpIHsKLSAgICAgIG11eC0+ZWJtbF93cml0ZS0+c3RyZWFtYWJsZSA9IFRSVUU7Ci0gICAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChtdXgpLCAic3RyZWFtYWJsZSIpOwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtdXgsICJkb3duc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSwgYnV0ICIKLSAgICAgICAgICAic3RyZWFtYWJsZT1mYWxzZS4gV2lsbCBpZ25vcmUgdGhhdCBhbmQgY3JlYXRlIHN0cmVhbWFibGUgb3V0cHV0ICIKLSAgICAgICAgICAiaW5zdGVhZCIpOwotICAgIH0KLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgfQotCi0gIC8qIHN0cmVhbS1zdGFydCAoRklYTUU6IGNyZWF0ZSBpZCBiYXNlZCBvbiBpbnB1dCBpZHMpICovCi0gIGdfc25wcmludGYgKHNfaWQsIHNpemVvZiAoc19pZCksICJtYXRyb3NrYW11eC0lMDh4IiwgZ19yYW5kb21faW50ICgpKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChtdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHNfaWQpKTsKLQotICAvKiBvdXRwdXQgY2FwcyAqLwotICBhdWRpb19vbmx5ID0gbXV4LT5udW1fdl9zdHJlYW1zID09IDAgJiYgbXV4LT5udW1fYV9zdHJlYW1zID4gMDsKLSAgaWYgKG11eC0+aXNfd2VibSkgewotICAgIG1lZGlhX3R5cGUgPSAoYXVkaW9fb25seSkgPyAiYXVkaW8vd2VibSIgOiAidmlkZW8vd2VibSI7Ci0gIH0gZWxzZSB7Ci0gICAgbWVkaWFfdHlwZSA9IChhdWRpb19vbmx5KSA/ICJhdWRpby94LW1hdHJvc2thIiA6ICJ2aWRlby94LW1hdHJvc2thIjsKLSAgfQotICBlYm1sLT5jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAobWVkaWFfdHlwZSk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKG11eC0+c3JjcGFkLCBlYm1sLT5jYXBzKTsKLSAgLyogd2Ugc3RhcnQgd2l0aCBhIEVCTUwgaGVhZGVyICovCi0gIGRvY3R5cGUgPSBtdXgtPmRvY3R5cGU7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZWJtbCwgIkRvY1R5cGU6ICVzLCBWZXJzaW9uOiAlZCIsCi0gICAgICBkb2N0eXBlLCBtdXgtPmRvY3R5cGVfdmVyc2lvbik7Ci0gIGdzdF9lYm1sX3dyaXRlX2hlYWRlciAoZWJtbCwgZG9jdHlwZSwgbXV4LT5kb2N0eXBlX3ZlcnNpb24pOwotCi0gIC8qIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgaXMgY2FjaGVkICovCi0gIGdzdF9lYm1sX3dyaXRlX3NldF9jYWNoZSAoZWJtbCwgMHgxMDAwKTsKLQotICAvKiBzdGFydCBhIHNlZ21lbnQgKi8KLSAgbXV4LT5zZWdtZW50X3BvcyA9Ci0gICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5UKTsKLSAgbXV4LT5zZWdtZW50X21hc3RlciA9IGVibWwtPnBvczsKLQotICBpZiAoIW11eC0+ZWJtbF93cml0ZS0+c3RyZWFtYWJsZSkgewotICAgIC8qIHNlZWtoZWFkICh0YWJsZSBvZiBjb250ZW50cykgLSB3ZSBzZXQgdGhlIHBvc2l0aW9ucyBsYXRlciAqLwotICAgIG11eC0+c2Vla2hlYWRfcG9zID0gZWJtbC0+cG9zOwotICAgIG1hc3RlciA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1NFRUtIRUFEKTsKLSAgICBmb3IgKGkgPSAwOyBzZWVraGVhZF9pZFtpXSAhPSAwOyBpKyspIHsKLSAgICAgIGNoaWxkID0gZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfU0VFS0VOVFJZKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9TRUVLSUQsIHNlZWtoZWFkX2lkW2ldKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9TRUVLUE9TSVRJT04sIC0xKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIGNoaWxkKTsKLSAgICB9Ci0gICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbWFzdGVyKTsKLSAgfQotCi0gIGlmIChtdXgtPmVibWxfd3JpdGUtPnN0cmVhbWFibGUpIHsKLSAgICBjb25zdCBHc3RUYWdMaXN0ICp0YWdzOwotICAgIGdib29sZWFuIGhhc19tYWluX3RhZ3M7Ci0KLSAgICAvKiB0YWdzICovCi0gICAgdGFncyA9IGdzdF90YWdfc2V0dGVyX2dldF90YWdfbGlzdCAoR1NUX1RBR19TRVRURVIgKG11eCkpOwotICAgIGhhc19tYWluX3RhZ3MgPSB0YWdzICE9IE5VTEwgJiYgIWdzdF9tYXRyb3NrYV9tdXhfdGFnX2xpc3RfaXNfZW1wdHkgKHRhZ3MpOwotCi0gICAgaWYgKGhhc19tYWluX3RhZ3MgfHwgZ3N0X21hdHJvc2thX211eF9zdHJlYW1zX2hhdmVfdGFncyAobXV4KSkgewotICAgICAgZ3VpbnQ2NCBtYXN0ZXJfdGFncywgbWFzdGVyX3RhZzsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiV3JpdGluZyB0YWdzIik7Ci0KLSAgICAgIG11eC0+dGFnc19wb3MgPSBlYm1sLT5wb3M7Ci0gICAgICBtYXN0ZXJfdGFncyA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RBR1MpOwotICAgICAgaWYgKGhhc19tYWluX3RhZ3MpIHsKLSAgICAgICAgbWFzdGVyX3RhZyA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RBRyk7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0YWdzLCBnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3NpbXBsZV90YWcsIGVibWwpOwotICAgICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoIChlYm1sLCBtYXN0ZXJfdGFnKTsKLSAgICAgIH0KLSAgICAgIGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfc3RyZWFtc190YWdzIChtdXgpOwotICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbWFzdGVyX3RhZ3MpOwotICAgIH0KLSAgfQotCi0gIC8qIHNlZ21lbnQgaW5mbyAqLwotICBtdXgtPmluZm9fcG9zID0gZWJtbC0+cG9zOwotICBtYXN0ZXIgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5USU5GTyk7Ci0KLSAgLyogV2ViTSBkb2VzIG5vdCBzdXBwb3J0IFNlZ21lbnRVSUQgZmllbGQgb24gU2VnbWVudEluZm8gKi8KLSAgaWYgKCFtdXgtPmlzX3dlYm0pIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICBzZWdtZW50X3VpZFtpXSA9IGdfcmFuZG9tX2ludCAoKTsKLSAgICB9Ci0gICAgZ3N0X2VibWxfd3JpdGVfYmluYXJ5IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVFVJRCwKLSAgICAgICAgKGd1aW50OCAqKSBzZWdtZW50X3VpZCwgMTYpOwotICB9Ci0KLSAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RJTUVDT0RFU0NBTEUsIG11eC0+dGltZV9zY2FsZSk7Ci0gIG11eC0+ZHVyYXRpb25fcG9zID0gZWJtbC0+cG9zOwotICAvKiBnZXQgZHVyYXRpb24gKi8KLSAgaWYgKCFtdXgtPmVibWxfd3JpdGUtPnN0cmVhbWFibGUpIHsKLSAgICBmb3IgKGNvbGxlY3RlZCA9IG11eC0+Y29sbGVjdC0+ZGF0YTsgY29sbGVjdGVkOwotICAgICAgICBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKLSAgICAgIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLSAgICAgIEdzdFBhZCAqdGhlcGFkOwotICAgICAgZ2ludDY0IHRyYWNrZHVyYXRpb247Ci0KLSAgICAgIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIGNvbGxlY3RlZC0+ZGF0YTsKLSAgICAgIHRoZXBhZCA9IGNvbGxlY3RfcGFkLT5jb2xsZWN0LnBhZDsKLQotICAgICAgLyogUXVlcnkgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdHJhY2suICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0aGVwYWQsICJxdWVyeWluZyBwZWVyIGR1cmF0aW9uIik7Ci0gICAgICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uICh0aGVwYWQsIEdTVF9GT1JNQVRfVElNRSwgJnRyYWNrZHVyYXRpb24pKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRoZXBhZCwgImR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTICh0cmFja2R1cmF0aW9uKSk7Ci0gICAgICAgIGlmICh0cmFja2R1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYgdHJhY2tkdXJhdGlvbiA+IGR1cmF0aW9uKSB7Ci0gICAgICAgICAgZHVyYXRpb24gPSAoR3N0Q2xvY2tUaW1lKSB0cmFja2R1cmF0aW9uOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9lYm1sX3dyaXRlX2Zsb2F0IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfRFVSQVRJT04sCi0gICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKGR1cmF0aW9uKSAvCi0gICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKG11eC0+dGltZV9zY2FsZSkpOwotICB9Ci0gIGdzdF9lYm1sX3dyaXRlX3V0ZjggKGVibWwsIEdTVF9NQVRST1NLQV9JRF9NVVhJTkdBUFAsCi0gICAgICAiR1N0cmVhbWVyIG1hdHJvc2thbXV4IHZlcnNpb24gIiBQQUNLQUdFX1ZFUlNJT04pOwotICBpZiAobXV4LT53cml0aW5nX2FwcCAmJiBtdXgtPndyaXRpbmdfYXBwWzBdKSB7Ci0gICAgZ3N0X2VibWxfd3JpdGVfdXRmOCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1dSSVRJTkdBUFAsIG11eC0+d3JpdGluZ19hcHApOwotICB9Ci0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnRpbWUpOwotICBnc3RfZWJtbF93cml0ZV9kYXRlIChlYm1sLCBHU1RfTUFUUk9TS0FfSURfREFURVVUQywgdGltZS50dl9zZWMpOwotICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoIChlYm1sLCBtYXN0ZXIpOwotCi0gIC8qIHRyYWNrcyAqLwotICBtdXgtPnRyYWNrc19wb3MgPSBlYm1sLT5wb3M7Ci0gIG1hc3RlciA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RSQUNLUyk7Ci0KLSAgZm9yIChjb2xsZWN0ZWQgPSBtdXgtPmNvbGxlY3QtPmRhdGE7IGNvbGxlY3RlZDsKLSAgICAgIGNvbGxlY3RlZCA9IGdfc2xpc3RfbmV4dCAoY29sbGVjdGVkKSkgewotICAgIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLQotICAgIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIGNvbGxlY3RlZC0+ZGF0YTsKLQotICAgIC8qIFRoaXMgd2lsbCBjYXVzZSBhbiBlcnJvciBhdCBhIGxhdGVyIHRpbWUgKi8KLSAgICBpZiAoY29sbGVjdF9wYWQtPnRyYWNrLT5jb2RlY19pZCA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0KLSAgICBjb2xsZWN0X3BhZC0+dHJhY2stPm51bSA9IHRyYWNrbnVtKys7Ci0gICAgY2hpbGQgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UUkFDS0VOVFJZKTsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3RyYWNrX2hlYWRlciAobXV4LCBjb2xsZWN0X3BhZC0+dHJhY2spOwotICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIGNoaWxkKTsKLSAgICAvKiBzb21lIHJlbWFpbmluZyBwYWQvdHJhY2sgc2V0dXAgKi8KLSAgICBjb2xsZWN0X3BhZC0+ZGVmYXVsdF9kdXJhdGlvbl9zY2FsZWQgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGNvbGxlY3RfcGFkLT50cmFjay0+ZGVmYXVsdF9kdXJhdGlvbiwKLSAgICAgICAgMSwgbXV4LT50aW1lX3NjYWxlKTsKLSAgfQotICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoIChlYm1sLCBtYXN0ZXIpOwotCi0gIC8qIEZJWE1FOiBDaGVjayBpZiB3ZSBnZXQgYSBUT0MgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgTWF0cm9za2EKLSAgICogYW5kIGNsZWFuIHVwIHRoZSBjb2RlIGJlbG93ICovCi0jaWYgMAotICAvKiBjaGFwdGVycyAqLwotICB0b2MgPSBnc3RfdG9jX3NldHRlcl9nZXRfdG9jIChHU1RfVE9DX1NFVFRFUiAobXV4KSk7Ci0gIGlmICh0b2MgIT0gTlVMTCAmJiAhbXV4LT5lYm1sX3dyaXRlLT5zdHJlYW1hYmxlKSB7Ci0gICAgZ3VpbnQ2NCBtYXN0ZXJfY2hhcHRlcnMgPSAwOwotICAgIEdzdFRvY0VudHJ5ICp0b2NfZW50cnk7Ci0gICAgR0xpc3QgKmN1ciwgKnRvX3dyaXRlID0gTlVMTDsKLSAgICBnaW50NjQgc3RhcnQsIHN0b3A7Ci0KLSAgICBHU1RfREVCVUcgKCJXcml0aW5nIGNoYXB0ZXJzIik7Ci0KLSAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGhhdmUgZWRpdGlvbnMgb3IgY2hhcHRlcnMgYXQgdGhlIHJvb3QgbGV2ZWwgKi8KLSAgICB0b2NfZW50cnkgPSB0b2MtPmVudHJpZXMtPmRhdGE7Ci0KLSAgICBpZiAodG9jX2VudHJ5LT50eXBlICE9IEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OKSB7Ci0gICAgICB0b2NfZW50cnkgPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT04sICIiKTsKLSAgICAgIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKHRvY19lbnRyeSwgLTEsIC0xKTsKLQotICAgICAgLyogYWdncmVnYXRlIGFsbCBjaGFwdGVycyB3aXRob3V0IHJvb3QgZWRpdGlvbiAqLwotICAgICAgY3VyID0gZ3N0X3RvY19nZXRfZW50cmllcyAodG9jKTsKLSAgICAgIHdoaWxlIChjdXIgIT0gTlVMTCkgewotICAgICAgICB0b2NfZW50cnktPnN1YmVudHJpZXMgPQotICAgICAgICAgICAgZ19saXN0X3ByZXBlbmQgKHRvY19lbnRyeS0+c3ViZW50cmllcywgY3VyLT5kYXRhKTsKLSAgICAgICAgY3VyID0gY3VyLT5uZXh0OwotICAgICAgfQotCi0gICAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzICgoKEdzdFRvY0VudHJ5ICopCi0gICAgICAgICAgICAgIHRvY19lbnRyeS0+c3ViZW50cmllcy0+ZGF0YSksICZzdGFydCwgTlVMTCk7Ci0gICAgICB0b2NfZW50cnktPnN1YmVudHJpZXMgPSBnX2xpc3RfcmV2ZXJzZSAodG9jX2VudHJ5LT5zdWJlbnRyaWVzKTsKLSAgICAgIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMgKCgoR3N0VG9jRW50cnkgKikKLSAgICAgICAgICAgICAgdG9jX2VudHJ5LT5zdWJlbnRyaWVzLT5kYXRhKSwgTlVMTCwgJnN0b3ApOwotICAgICAgZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lcyAodG9jX2VudHJ5LCBzdGFydCwgc3RvcCk7Ci0KLSAgICAgIHRvX3dyaXRlID0gZ19saXN0X2FwcGVuZCAodG9fd3JpdGUsIHRvY19lbnRyeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRvY19lbnRyeSA9IE5VTEw7Ci0gICAgICB0b193cml0ZSA9IHRvYy0+ZW50cmllczsKLSAgICB9Ci0KLSAgICAvKiBmaW5hbGx5IHdyaXRlIGNoYXB0ZXJzICovCi0gICAgbXV4LT5jaGFwdGVyc19wb3MgPSBlYm1sLT5wb3M7Ci0KLSAgICBjdXIgPSB0b193cml0ZTsKLSAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICAgIGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfY2hhcHRlcl9lZGl0aW9uIChtdXgsIGN1ci0+ZGF0YSwgZWJtbCwKLSAgICAgICAgICAmbWFzdGVyX2NoYXB0ZXJzKTsKLSAgICAgIGN1ciA9IGN1ci0+bmV4dDsKLSAgICB9Ci0KLSAgICAvKiBjbG9zZSBtYXN0ZXIgZWxlbWVudCBpZiBhbnkgZWRpdGlvbiB3YXMgd3JpdHRlbiAqLwotICAgIGlmIChHX0xJS0VMWSAobWFzdGVyX2NoYXB0ZXJzICE9IDApKQotICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbWFzdGVyX2NoYXB0ZXJzKTsKLQotICAgIGlmICh0b2NfZW50cnkgIT0gTlVMTCkgewotICAgICAgZ19saXN0X2ZyZWUgKHRvY19lbnRyeS0+c3ViZW50cmllcyk7Ci0gICAgICB0b2NfZW50cnktPnN1YmVudHJpZXMgPSBOVUxMOwotICAgICAgZ3N0X3RvY19lbnRyeV91bnJlZiAodG9jX2VudHJ5KTsKLSAgICAgIGdfbGlzdF9mcmVlICh0b193cml0ZSk7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQotICAvKiBsYXN0bHksIGZsdXNoIHRoZSBjYWNoZSAqLwotICBnc3RfZWJtbF93cml0ZV9mbHVzaF9jYWNoZSAoZWJtbCwgRkFMU0UsIDApOwotCi0jaWYgMAotICBpZiAodG9jICE9IE5VTEwpCi0gICAgZ3N0X3RvY191bnJlZiAodG9jKTsKLSNlbmRpZgotfQotCi0vKiBUT0RPOiBtb3JlIHNlbnNpYmxlIHRhZyBtYXBwaW5ncyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdAotewotICBjb25zdCBnY2hhciAqbWF0cm9za2FfdGFnbmFtZTsKLSAgY29uc3QgZ2NoYXIgKmdzdHJlYW1lcl90YWduYW1lOwotfQotZ3N0X21hdHJvc2thX3RhZ19jb252W10gPSB7Ci0gIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9USVRMRSwgR1NUX1RBR19USVRMRX0sIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9BUlRJU1QsIEdTVF9UQUdfQVJUSVNUfSwgewotICBHU1RfTUFUUk9TS0FfVEFHX0lEX0FMQlVNLCBHU1RfVEFHX0FMQlVNfSwgewotICBHU1RfTUFUUk9TS0FfVEFHX0lEX0NPTU1FTlRTLCBHU1RfVEFHX0NPTU1FTlR9LCB7Ci0gIEdTVF9NQVRST1NLQV9UQUdfSURfQklUU1BTLCBHU1RfVEFHX0JJVFJBVEV9LCB7Ci0gIEdTVF9NQVRST1NLQV9UQUdfSURfQlBTLCBHU1RfVEFHX0JJVFJBVEV9LCB7Ci0gIEdTVF9NQVRST1NLQV9UQUdfSURfRU5DT0RFUiwgR1NUX1RBR19FTkNPREVSfSwgewotICBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEUsIEdTVF9UQUdfREFURX0sIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9JU1JDLCBHU1RfVEFHX0lTUkN9LCB7Ci0gIEdTVF9NQVRST1NLQV9UQUdfSURfQ09QWVJJR0hULCBHU1RfVEFHX0NPUFlSSUdIVH0sIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9CUE0sIEdTVF9UQUdfQkVBVFNfUEVSX01JTlVURX0sIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9URVJNU19PRl9VU0UsIEdTVF9UQUdfTElDRU5TRX0sIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9DT01QT1NFUiwgR1NUX1RBR19DT01QT1NFUn0sIHsKLSAgR1NUX01BVFJPU0tBX1RBR19JRF9MRUFEX1BFUkZPUk1FUiwgR1NUX1RBR19QRVJGT1JNRVJ9LCB7Ci0gIEdTVF9NQVRST1NLQV9UQUdfSURfR0VOUkUsIEdTVF9UQUdfR0VOUkV9Ci19OwotCi0vKiBFdmVyeSBzdGFnZWZyaWdodCBpbXBsZW1lbnRhdGlvbiBvbiBhbmRyb2lkIHVwIHRvIGFuZCBpbmNsdWRpbmcgNi4wLjEgaXMgdXNpbmcKLSBsaWJ3ZWJtIHdpdGggYnVnIGluIG1hdHJvc2thIHBhcnNpbmcsIHdoZXJlIGl0IHdpbGwgY2hva2Ugb24gZW1wdHkgdGFnIGVsZW1lbnRzOwotIHNvIGJlZm9yZSBvdXRwdXR0aW5nIHRhZ3MgYW5kIHRhZyBlbGVtZW50cyB3ZSBiZXR0ZXIgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlCi0gYWN0dWFsbHkgdGFncyB3ZSBhcmUgZ29pbmcgdG8gd3JpdGUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX211eF90YWdfbGlzdF9pc19lbXB0eSAoY29uc3QgR3N0VGFnTGlzdCAqIGxpc3QpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X3RhZ19saXN0X25fdGFncyAobGlzdCk7IGkrKykgewotICAgIGNvbnN0IGdjaGFyICp0YWcgPSBnc3RfdGFnX2xpc3RfbnRoX3RhZ19uYW1lIChsaXN0LCBpKTsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChnc3RfbWF0cm9za2FfdGFnX2NvbnYpOyBpKyspIHsKLSAgICAgIGNvbnN0IGdjaGFyICp0YWduYW1lX2dzdCA9IGdzdF9tYXRyb3NrYV90YWdfY29udltpXS5nc3RyZWFtZXJfdGFnbmFtZTsKLSAgICAgIGlmIChzdHJjbXAgKHRhZ25hbWVfZ3N0LCB0YWcpID09IDApIHsKLSAgICAgICAgR1ZhbHVlIHNyYyA9IHsgMCwgfTsKLSAgICAgICAgZ2NoYXIgKmRlc3Q7Ci0KLSAgICAgICAgaWYgKCFnc3RfdGFnX2xpc3RfY29weV92YWx1ZSAoJnNyYywgbGlzdCwgdGFnKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVzdCA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZzcmMpOwotCi0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZzcmMpOwotICAgICAgICBpZiAoZGVzdCkgewotICAgICAgICAgIGdfZnJlZSAoZGVzdCk7Ci0gICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX211eF93cml0ZV9zaW1wbGVfdGFnIChjb25zdCBHc3RUYWdMaXN0ICogbGlzdCwgY29uc3QgZ2NoYXIgKiB0YWcsCi0gICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RWJtbFdyaXRlICplYm1sID0gKEdzdEVibWxXcml0ZSAqKSBkYXRhOwotICBndWludCBpOwotICBndWludDY0IHNpbXBsZXRhZ19tYXN0ZXI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZ3N0X21hdHJvc2thX3RhZ19jb252KTsgaSsrKSB7Ci0gICAgY29uc3QgZ2NoYXIgKnRhZ25hbWVfZ3N0ID0gZ3N0X21hdHJvc2thX3RhZ19jb252W2ldLmdzdHJlYW1lcl90YWduYW1lOwotICAgIGNvbnN0IGdjaGFyICp0YWduYW1lX21rdiA9IGdzdF9tYXRyb3NrYV90YWdfY29udltpXS5tYXRyb3NrYV90YWduYW1lOwotCi0gICAgaWYgKHN0cmNtcCAodGFnbmFtZV9nc3QsIHRhZykgPT0gMCkgewotICAgICAgR1ZhbHVlIHNyYyA9IHsgMCwgfTsKLSAgICAgIGdjaGFyICpkZXN0OwotCi0gICAgICBpZiAoIWdzdF90YWdfbGlzdF9jb3B5X3ZhbHVlICgmc3JjLCBsaXN0LCB0YWcpKQotICAgICAgICBicmVhazsKLSAgICAgIGlmICgoZGVzdCA9IGdzdF92YWx1ZV9zZXJpYWxpemUgKCZzcmMpKSkgewotCi0gICAgICAgIHNpbXBsZXRhZ19tYXN0ZXIgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsCi0gICAgICAgICAgICBHU1RfTUFUUk9TS0FfSURfU0lNUExFVEFHKTsKLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfYXNjaWkgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQUdOQU1FLCB0YWduYW1lX21rdik7Ci0gICAgICAgIGdzdF9lYm1sX3dyaXRlX3V0ZjggKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQUdTVFJJTkcsIGRlc3QpOwotICAgICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoIChlYm1sLCBzaW1wbGV0YWdfbWFzdGVyKTsKLSAgICAgICAgZ19mcmVlIChkZXN0KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiQ2FuJ3QgdHJhbnNmb3JtIHRhZyAnJXMnIHRvIHN0cmluZyIsIHRhZ25hbWVfbWt2KTsKLSAgICAgIH0KLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZzcmMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfbXV4X3dyaXRlX3N0cmVhbV90YWdzIChHc3RNYXRyb3NrYU11eCAqIG11eCwgR3N0TWF0cm9za2FQYWQgKiBtcGFkKQotewotICBndWludDY0IG1hc3Rlcl90YWcsIG1hc3Rlcl90YXJnZXRzOwotICBHc3RFYm1sV3JpdGUgKmVibWw7Ci0KLSAgZWJtbCA9IG11eC0+ZWJtbF93cml0ZTsKLQotICBpZiAoR19VTkxJS0VMWSAobXBhZC0+dGFncyA9PSBOVUxMCi0gICAgICAgICAgfHwgZ3N0X21hdHJvc2thX211eF90YWdfbGlzdF9pc19lbXB0eSAobXBhZC0+dGFncykpKQotICAgIHJldHVybjsKLQotICBtYXN0ZXJfdGFnID0gZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVEFHKTsKLSAgbWFzdGVyX3RhcmdldHMgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRTKTsKLQotICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVEFSR0VUVFJBQ0tVSUQsIG1wYWQtPnRyYWNrLT51aWQpOwotCi0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcl90YXJnZXRzKTsKLSAgZ3N0X3RhZ19saXN0X2ZvcmVhY2ggKG1wYWQtPnRhZ3MsIGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfc2ltcGxlX3RhZywgZWJtbCk7Ci0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcl90YWcpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX211eF93cml0ZV9zdHJlYW1zX3RhZ3MgKEdzdE1hdHJvc2thTXV4ICogbXV4KQotewotICBHU0xpc3QgKndhbGs7Ci0KLSAgZm9yICh3YWxrID0gbXV4LT5jb2xsZWN0LT5kYXRhOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLQotICAgIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIHdhbGstPmRhdGE7Ci0KLSAgICBnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3N0cmVhbV90YWdzIChtdXgsIGNvbGxlY3RfcGFkKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9tdXhfc3RyZWFtc19oYXZlX3RhZ3MgKEdzdE1hdHJvc2thTXV4ICogbXV4KQotewotICBHU0xpc3QgKndhbGs7Ci0KLSAgZm9yICh3YWxrID0gbXV4LT5jb2xsZWN0LT5kYXRhOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdE1hdHJvc2thUGFkICpjb2xsZWN0X3BhZDsKLQotICAgIGNvbGxlY3RfcGFkID0gKEdzdE1hdHJvc2thUGFkICopIHdhbGstPmRhdGE7Ci0gICAgaWYgKCFnc3RfbWF0cm9za2FfbXV4X3RhZ19saXN0X2lzX2VtcHR5IChjb2xsZWN0X3BhZC0+dGFncykpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX211eF93cml0ZV90b2NfZW50cnlfdGFncyAoR3N0TWF0cm9za2FNdXggKiBtdXgsCi0gICAgY29uc3QgR3N0VG9jRW50cnkgKiBlbnRyeSwgZ3VpbnQ2NCAqIG1hc3Rlcl90YWdzKQotewotICBndWludDY0IG1hc3Rlcl90YWcsIG1hc3Rlcl90YXJnZXRzOwotICBHc3RFYm1sV3JpdGUgKmVibWw7Ci0gIEdMaXN0ICpjdXI7Ci0KLSAgZWJtbCA9IG11eC0+ZWJtbF93cml0ZTsKLQotICBpZiAoR19VTkxJS0VMWSAoZW50cnktPnRhZ3MgIT0gTlVMTAotICAgICAgICAgICYmICFnc3RfbWF0cm9za2FfbXV4X3RhZ19saXN0X2lzX2VtcHR5IChlbnRyeS0+dGFncykpKSB7Ci0gICAgaWYgKCptYXN0ZXJfdGFncyA9PSAwKSB7Ci0gICAgICBtdXgtPnRhZ3NfcG9zID0gZWJtbC0+cG9zOwotICAgICAgKm1hc3Rlcl90YWdzID0gZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfVEFHUyk7Ci0gICAgfQotCi0gICAgbWFzdGVyX3RhZyA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RBRyk7Ci0gICAgbWFzdGVyX3RhcmdldHMgPQotICAgICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRTKTsKLQotICAgIGlmIChlbnRyeS0+dHlwZSA9PSBHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTikKLSAgICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRFRElUSU9OVUlELAotICAgICAgICAgIGdfYXNjaWlfc3RydG91bGwgKGVudHJ5LT51aWQsIE5VTEwsIDEwKSk7Ci0gICAgZWxzZQotICAgICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RBUkdFVENIQVBURVJVSUQsCi0gICAgICAgICAgZ19hc2NpaV9zdHJ0b3VsbCAoZW50cnktPnVpZCwgTlVMTCwgMTApKTsKLQotICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcl90YXJnZXRzKTsKLSAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAoZW50cnktPnRhZ3MsIGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfc2ltcGxlX3RhZywgZWJtbCk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbWFzdGVyX3RhZyk7Ci0gIH0KLQotICBjdXIgPSBlbnRyeS0+c3ViZW50cmllczsKLSAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7Ci0gICAgZ3N0X21hdHJvc2thX211eF93cml0ZV90b2NfZW50cnlfdGFncyAobXV4LCBjdXItPmRhdGEsIG1hc3Rlcl90YWdzKTsKLSAgICBjdXIgPSBjdXItPm5leHQ7Ci0gIH0KLX0KLSNlbmRpZgotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfZmluaXNoOgotICogQG11eDogI0dzdE1hdHJvc2thTXV4Ci0gKgotICogRmluaXNoIGEgbmV3IG1hdHJvc2thIGZpbGUgKHdyaXRlIGluZGV4IGV0Yy4uLikKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfZmluaXNoIChHc3RNYXRyb3NrYU11eCAqIG11eCkKLXsKLSAgR3N0RWJtbFdyaXRlICplYm1sID0gbXV4LT5lYm1sX3dyaXRlOwotICBndWludDY0IHBvczsKLSAgZ3VpbnQ2NCBkdXJhdGlvbiA9IDA7Ci0gIEdTTGlzdCAqY29sbGVjdGVkOwotICBjb25zdCBHc3RUYWdMaXN0ICp0YWdzOwotICBnYm9vbGVhbiBoYXNfbWFpbl90YWdzOwotCi0gIC8qIGZpbmlzaCBsYXN0IGNsdXN0ZXIgKi8KLSAgaWYgKG11eC0+Y2x1c3RlcikgewotICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG11eC0+Y2x1c3Rlcik7Ci0gIH0KLQotICAvKiBjdWVzICovCi0gIGlmIChtdXgtPmluZGV4ICE9IE5VTEwpIHsKLSAgICBndWludCBuOwotICAgIGd1aW50NjQgbWFzdGVyLCBwb2ludGVudHJ5X21hc3RlciwgdHJhY2twb3NfbWFzdGVyOwotCi0gICAgbXV4LT5jdWVzX3BvcyA9IGVibWwtPnBvczsKLSAgICBnc3RfZWJtbF93cml0ZV9zZXRfY2FjaGUgKGVibWwsIDEyICsgNDEgKiBtdXgtPm51bV9pbmRleGVzKTsKLSAgICBtYXN0ZXIgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DVUVTKTsKLQotICAgIGZvciAobiA9IDA7IG4gPCBtdXgtPm51bV9pbmRleGVzOyBuKyspIHsKLSAgICAgIEdzdE1hdHJvc2thSW5kZXggKmlkeCA9ICZtdXgtPmluZGV4W25dOwotCi0gICAgICBwb2ludGVudHJ5X21hc3RlciA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwKLSAgICAgICAgICBHU1RfTUFUUk9TS0FfSURfUE9JTlRFTlRSWSk7Ci0gICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQ1VFVElNRSwKLSAgICAgICAgICBpZHgtPnRpbWUgLyBtdXgtPnRpbWVfc2NhbGUpOwotICAgICAgdHJhY2twb3NfbWFzdGVyID0gZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChlYm1sLAotICAgICAgICAgIEdTVF9NQVRST1NLQV9JRF9DVUVUUkFDS1BPU0lUSU9OUyk7Ci0gICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQ1VFVFJBQ0ssIGlkeC0+dHJhY2spOwotICAgICAgZ3N0X2VibWxfd3JpdGVfdWludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0NVRUNMVVNURVJQT1NJVElPTiwKLSAgICAgICAgICBpZHgtPnBvcyAtIG11eC0+c2VnbWVudF9tYXN0ZXIpOwotICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgdHJhY2twb3NfbWFzdGVyKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIHBvaW50ZW50cnlfbWFzdGVyKTsKLSAgICB9Ci0KLSAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoIChlYm1sLCBtYXN0ZXIpOwotICAgIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlIChlYm1sLCBGQUxTRSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIH0KLQotICAvKiB0YWdzICovCi0gIHRhZ3MgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKEdTVF9UQUdfU0VUVEVSIChtdXgpKTsKLSAgaGFzX21haW5fdGFncyA9IHRhZ3MgIT0gTlVMTCAmJiAhZ3N0X21hdHJvc2thX211eF90YWdfbGlzdF9pc19lbXB0eSAodGFncyk7Ci0KLSAgaWYgKGhhc19tYWluX3RhZ3MgfHwgZ3N0X21hdHJvc2thX211eF9zdHJlYW1zX2hhdmVfdGFncyAobXV4KQotICAgICAgfHwgZ3N0X3RvY19zZXR0ZXJfZ2V0X3RvYyAoR1NUX1RPQ19TRVRURVIgKG11eCkpICE9IE5VTEwpIHsKLSAgICBndWludDY0IG1hc3Rlcl90YWdzID0gMCwgbWFzdGVyX3RhZzsKLSNpZiAwCi0gICAgY29uc3QgR3N0VG9jICp0b2M7Ci0jZW5kaWYKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgIldyaXRpbmcgdGFncyIpOwotCi0jaWYgMAotICAgIHRvYyA9IGdzdF90b2Nfc2V0dGVyX2dldF90b2MgKEdTVF9UT0NfU0VUVEVSIChtdXgpKTsKLSNlbmRpZgotCi0gICAgaWYgKGhhc19tYWluX3RhZ3MpIHsKLSAgICAgIC8qIFRPRE86IG1heWJlIGxpbWl0IHZpYSB0aGUgVEFSR0VUUyBpZCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgcGFkICovCi0gICAgICBtdXgtPnRhZ3NfcG9zID0gZWJtbC0+cG9zOwotICAgICAgbWFzdGVyX3RhZ3MgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQUdTKTsKLSAgICAgIG1hc3Rlcl90YWcgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9UQUcpOwotCi0gICAgICBpZiAodGFncyAhPSBOVUxMKQotICAgICAgICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFncywgZ3N0X21hdHJvc2thX211eF93cml0ZV9zaW1wbGVfdGFnLCBlYm1sKTsKLSNpZiAwCi0gICAgICBpZiAodG9jICE9IE5VTEwpCi0gICAgICAgIGdzdF90YWdfbGlzdF9mb3JlYWNoICh0b2MtPnRhZ3MsIGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfc2ltcGxlX3RhZywKLSAgICAgICAgICAgIGVibWwpOwotI2VuZGlmCi0KLSAgICAgIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG1hc3Rlcl90YWcpOwotICAgIH0KLSNpZiAwCi0gICAgaWYgKHRvYyAhPSBOVUxMKSB7Ci0gICAgICBjdXIgPSB0b2MtPmVudHJpZXM7Ci0gICAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKLSAgICAgICAgZ3N0X21hdHJvc2thX211eF93cml0ZV90b2NfZW50cnlfdGFncyAobXV4LCBjdXItPmRhdGEsICZtYXN0ZXJfdGFncyk7Ci0gICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKLSAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtYXN0ZXJfdGFncyA9PSAwICYmIGdzdF9tYXRyb3NrYV9tdXhfc3RyZWFtc19oYXZlX3RhZ3MgKG11eCkpIHsKLSAgICAgIG11eC0+dGFnc19wb3MgPSBlYm1sLT5wb3M7Ci0gICAgICBtYXN0ZXJfdGFncyA9IGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9zdGFydCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1RBR1MpOwotICAgIH0KLSAgICBnc3RfbWF0cm9za2FfbXV4X3dyaXRlX3N0cmVhbXNfdGFncyAobXV4KTsKLQotICAgIGlmIChtYXN0ZXJfdGFncyAhPSAwKQotICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbWFzdGVyX3RhZ3MpOwotICB9Ci0KLSAgLyogdXBkYXRlIHNlZWtoZWFkLiBXZSBrbm93IHRoYXQ6Ci0gICAqIC0gYSBzZWVraGVhZCBjb250YWlucyA1IGVudHJpZXMuCi0gICAqIC0gb3JkZXIgb2YgZW50cmllcyBpcyBhcyBhYm92ZS4KLSAgICogLSBhIHNlZWtoZWFkIGhhcyBhIDQtYnl0ZSBoZWFkZXIgKyA4LWJ5dGUgbGVuZ3RoCi0gICAqIC0gZWFjaCBlbnRyeSBpcyAyLWJ5dGUgbWFzdGVyLCAyLWJ5dGUgSUQgcG9pbnRlciwKLSAgICogICAgIDItYnl0ZSBsZW5ndGggcG9pbnRlciwgYWxsIDgvMS1ieXRlIGxlbmd0aCwgNC0KLSAgICogICAgIGJ5dGUgSUQgYW5kIDgtYnl0ZSBsZW5ndGggcG9pbnRlciwgd2hlcmUgdGhlCi0gICAqICAgICBsZW5ndGggcG9pbnRlciBzdGFydHMgYXQgMjAuCi0gICAqIC0gYWxsIGVudHJpZXMgYXJlIGxvY2FsIHRvIHRoZSBzZWdtZW50IChzbyBwb3MgLSBzZWdtZW50X21hc3RlcikuCi0gICAqIC0gc28gZWFjaCBlbnRyeSBpcyBhdCAxMiArIDIwICsgbnVtICogMjguICovCi0gIGdzdF9lYm1sX3JlcGxhY2VfdWludCAoZWJtbCwgbXV4LT5zZWVraGVhZF9wb3MgKyAzMiwKLSAgICAgIG11eC0+aW5mb19wb3MgLSBtdXgtPnNlZ21lbnRfbWFzdGVyKTsKLSAgZ3N0X2VibWxfcmVwbGFjZV91aW50IChlYm1sLCBtdXgtPnNlZWtoZWFkX3BvcyArIDYwLAotICAgICAgbXV4LT50cmFja3NfcG9zIC0gbXV4LT5zZWdtZW50X21hc3Rlcik7Ci0gIGlmIChnc3RfdG9jX3NldHRlcl9nZXRfdG9jIChHU1RfVE9DX1NFVFRFUiAobXV4KSkgIT0gTlVMTAotICAgICAgJiYgbXV4LT5jaGFwdGVyc19wb3MgPiAwKSB7Ci0gICAgZ3N0X2VibWxfcmVwbGFjZV91aW50IChlYm1sLCBtdXgtPnNlZWtoZWFkX3BvcyArIDg4LAotICAgICAgICBtdXgtPmNoYXB0ZXJzX3BvcyAtIG11eC0+c2VnbWVudF9tYXN0ZXIpOwotICB9IGVsc2UgewotICAgIC8qIHZvaWQnaWZ5ICovCi0gICAgZ3VpbnQ2NCBteV9wb3MgPSBlYm1sLT5wb3M7Ci0KLSAgICBnc3RfZWJtbF93cml0ZV9zZWVrIChlYm1sLCBtdXgtPnNlZWtoZWFkX3BvcyArIDY4KTsKLSAgICBnc3RfZWJtbF93cml0ZV9idWZmZXJfaGVhZGVyIChlYm1sLCBHU1RfRUJNTF9JRF9WT0lELCAyNik7Ci0gICAgZ3N0X2VibWxfd3JpdGVfc2VlayAoZWJtbCwgbXlfcG9zKTsKLSAgfQotICBpZiAobXV4LT5pbmRleCAhPSBOVUxMKSB7Ci0gICAgZ3N0X2VibWxfcmVwbGFjZV91aW50IChlYm1sLCBtdXgtPnNlZWtoZWFkX3BvcyArIDExNiwKLSAgICAgICAgbXV4LT5jdWVzX3BvcyAtIG11eC0+c2VnbWVudF9tYXN0ZXIpOwotICB9IGVsc2UgewotICAgIC8qIHZvaWQnaWZ5ICovCi0gICAgZ3VpbnQ2NCBteV9wb3MgPSBlYm1sLT5wb3M7Ci0KLSAgICBnc3RfZWJtbF93cml0ZV9zZWVrIChlYm1sLCBtdXgtPnNlZWtoZWFkX3BvcyArIDk2KTsKLSAgICBnc3RfZWJtbF93cml0ZV9idWZmZXJfaGVhZGVyIChlYm1sLCBHU1RfRUJNTF9JRF9WT0lELCAyNik7Ci0gICAgZ3N0X2VibWxfd3JpdGVfc2VlayAoZWJtbCwgbXlfcG9zKTsKLSAgfQotCi0gIGlmICh0YWdzICE9IE5VTEwpIHsKLSAgICBnc3RfZWJtbF9yZXBsYWNlX3VpbnQgKGVibWwsIG11eC0+c2Vla2hlYWRfcG9zICsgMTQ0LAotICAgICAgICBtdXgtPnRhZ3NfcG9zIC0gbXV4LT5zZWdtZW50X21hc3Rlcik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogdm9pZCdpZnkgKi8KLSAgICBndWludDY0IG15X3BvcyA9IGVibWwtPnBvczsKLQotICAgIGdzdF9lYm1sX3dyaXRlX3NlZWsgKGVibWwsIG11eC0+c2Vla2hlYWRfcG9zICsgMTI0KTsKLSAgICBnc3RfZWJtbF93cml0ZV9idWZmZXJfaGVhZGVyIChlYm1sLCBHU1RfRUJNTF9JRF9WT0lELCAyNik7Ci0gICAgZ3N0X2VibWxfd3JpdGVfc2VlayAoZWJtbCwgbXlfcG9zKTsKLSAgfQotCi0gIC8qIGxvb3AgdHJhY2tzOgotICAgKiAtIGZpcnN0IGdldCB0aGUgb3ZlcmFsbCBkdXJhdGlvbgotICAgKiAgIChhIHJlbGVhc2VkIHRyYWNrIG1heSBoYXZlIGxlZnQgYSBkdXJhdGlvbiBpbiBoZXJlKQotICAgKiAtIHdyaXRlIHNvbWUgdHJhY2sgaGVhZGVyIGRhdGEgZm9yIHN1YnRpdGxlcwotICAgKi8KLSAgZHVyYXRpb24gPSBtdXgtPmR1cmF0aW9uOwotICBwb3MgPSBlYm1sLT5wb3M7Ci0gIGZvciAoY29sbGVjdGVkID0gbXV4LT5jb2xsZWN0LT5kYXRhOyBjb2xsZWN0ZWQ7Ci0gICAgICBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKLSAgICBHc3RNYXRyb3NrYVBhZCAqY29sbGVjdF9wYWQ7Ci0gICAgLyoKLSAgICAgKiBvYnNlcnZlZCBkdXJhdGlvbiwgdGhpcyB3aWxsIG5ldmVyIHJlbWFpbiBHU1RfQ0xPQ0tfVElNRV9OT05FCi0gICAgICogc2luY2UgdGhpcyBtZWFucyBidWZmZXIgd2l0aG91dCB0aW1lc3RhbXBzIHRoYXQgaXMgbm90IHBvc3NpYmlsZQotICAgICAqLwotICAgIEdzdENsb2NrVGltZSBjb2xsZWN0ZWRfZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgY29sbGVjdF9wYWQgPSAoR3N0TWF0cm9za2FQYWQgKikgY29sbGVjdGVkLT5kYXRhOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LAotICAgICAgICAiUGFkICUiIEdTVF9QVFJfRk9STUFUICIgc3RhcnQgdHMgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICIgZW5kIHRzICUiIEdTVF9USU1FX0ZPUk1BVCwgY29sbGVjdF9wYWQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGNvbGxlY3RfcGFkLT5zdGFydF90cyksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGNvbGxlY3RfcGFkLT5lbmRfdHMpKTsKLQotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoY29sbGVjdF9wYWQtPnN0YXJ0X3RzKSAmJgotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoY29sbGVjdF9wYWQtPmVuZF90cykpIHsKLSAgICAgIGNvbGxlY3RlZF9kdXJhdGlvbiA9Ci0gICAgICAgICAgR1NUX0NMT0NLX0RJRkYgKGNvbGxlY3RfcGFkLT5zdGFydF90cywgY29sbGVjdF9wYWQtPmVuZF90cyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChjb2xsZWN0X3BhZCwKLSAgICAgICAgICAiZmluYWwgdHJhY2sgZHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChjb2xsZWN0ZWRfZHVyYXRpb24pKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb2xsZWN0X3BhZCwgInVuYWJsZSB0byBnZXQgZmluYWwgdHJhY2sgZHVyYXRpb24iKTsKLSAgICB9Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChjb2xsZWN0ZWRfZHVyYXRpb24pICYmCi0gICAgICAgIGR1cmF0aW9uIDwgY29sbGVjdGVkX2R1cmF0aW9uKQotICAgICAgZHVyYXRpb24gPSBjb2xsZWN0ZWRfZHVyYXRpb247Ci0KLSAgfQotCi0gIC8qIHNlZWsgYmFjayAob3B0aW9uYWwsIGJ1dCBkbyBhbnl3YXkpICovCi0gIGdzdF9lYm1sX3dyaXRlX3NlZWsgKGVibWwsIHBvcyk7Ci0KLSAgLyogdXBkYXRlIGR1cmF0aW9uICovCi0gIGlmIChkdXJhdGlvbiAhPSAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiZmluYWwgdG90YWwgZHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKLSAgICBwb3MgPSBtdXgtPmVibWxfd3JpdGUtPnBvczsKLSAgICBnc3RfZWJtbF93cml0ZV9zZWVrIChlYm1sLCBtdXgtPmR1cmF0aW9uX3Bvcyk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfZmxvYXQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9EVVJBVElPTiwKLSAgICAgICAgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZHVyYXRpb24pIC8KLSAgICAgICAgZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAobXV4LT50aW1lX3NjYWxlKSk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfc2VlayAoZWJtbCwgcG9zKTsKLSAgfSBlbHNlIHsKLSAgICAvKiB2b2lkJ2lmeSAqLwotICAgIGd1aW50NjQgbXlfcG9zID0gZWJtbC0+cG9zOwotCi0gICAgZ3N0X2VibWxfd3JpdGVfc2VlayAoZWJtbCwgbXV4LT5kdXJhdGlvbl9wb3MpOwotICAgIGdzdF9lYm1sX3dyaXRlX2J1ZmZlcl9oZWFkZXIgKGVibWwsIEdTVF9FQk1MX0lEX1ZPSUQsIDgpOwotICAgIGdzdF9lYm1sX3dyaXRlX3NlZWsgKGVibWwsIG15X3Bvcyk7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiZmluaXNoaW5nIHNlZ21lbnQiKTsKLSAgLyogZmluaXNoIHNlZ21lbnQgLSB0aGlzIGFsc28gd3JpdGVzIGVsZW1lbnQgbGVuZ3RoICovCi0gIGdzdF9lYm1sX3dyaXRlX21hc3Rlcl9maW5pc2ggKGVibWwsIG11eC0+c2VnbWVudF9wb3MpOwotfQotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfYnVmZmVyX2hlYWRlcjoKLSAqIEB0cmFjazogVHJhY2sgY29udGV4dC4KLSAqIEByZWxhdGl2ZV90aW1lc3RhbXA6IHJlbGF0aXZlIHRpbWVzdGFtcCBvZiB0aGUgYnVmZmVyCi0gKiBAZmxhZ3M6IEJ1ZmZlciBmbGFncy4KLSAqCi0gKiBDcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyBidWZmZXIgaGVhZGVyLgotICoKLSAqIFJldHVybnM6IE5ldyBidWZmZXIuCi0gKi8KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X21hdHJvc2thX211eF9jcmVhdGVfYnVmZmVyX2hlYWRlciAoR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKiB0cmFjaywKLSAgICBnaW50MTYgcmVsYXRpdmVfdGltZXN0YW1wLCBpbnQgZmxhZ3MpCi17Ci0gIEdzdEJ1ZmZlciAqaGRyOwotICBndWludDggKmRhdGEgPSBnX21hbGxvYyAoNCk7Ci0KLSAgaGRyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZGF0YSwgNCk7Ci0gIC8qIHRyYWNrIG51bSAtIEZJWE1FOiB3aGF0IGlmIG51bSA+PSAweDgwICh1bmxpa2VseSk/ICovCi0gIGRhdGFbMF0gPSB0cmFjay0+bnVtIHwgMHg4MDsKLSAgLyogdGltZSByZWxhdGl2ZSB0byBjbHVzdGVydGltZSAqLwotICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhICsgMSwgcmVsYXRpdmVfdGltZXN0YW1wKTsKLQotICAvKiBmbGFncyAqLwotICBkYXRhWzNdID0gZmxhZ3M7Ci0KLSAgcmV0dXJuIGhkcjsKLX0KLQotI2RlZmluZSBESVJBQ19QQVJTRV9DT0RFX1NFUVVFTkNFX0hFQURFUiAweDAwCi0jZGVmaW5lIERJUkFDX1BBUlNFX0NPREVfRU5EX09GX1NFUVVFTkNFIDB4MTAKLSNkZWZpbmUgRElSQUNfUEFSU0VfQ09ERV9JU19QSUNUVVJFKHgpICgoeCAmIDB4MDgpICE9IDApCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X21hdHJvc2thX211eF9oYW5kbGVfZGlyYWNfcGFja2V0IChHc3RNYXRyb3NrYU11eCAqIG11eCwKLSAgICBHc3RNYXRyb3NrYVBhZCAqIGNvbGxlY3RfcGFkLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQgKmN0eCA9Ci0gICAgICAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqKSBjb2xsZWN0X3BhZC0+dHJhY2s7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIGd1aW50OCBwYXJzZV9jb2RlOwotICBndWludDMyIG5leHRfcGFyc2Vfb2Zmc2V0OwotICBHc3RCdWZmZXIgKnJldCA9IE5VTEw7Ci0gIGdib29sZWFuIGlzX211eGluZ191bml0ID0gRkFMU0U7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotICBzaXplID0gbWFwLnNpemU7Ci0KLSAgaWYgKHNpemUgPCAxMykgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyogQ2hlY2sgaWYgdGhpcyBidWZmZXIgY29udGFpbnMgYSBwaWN0dXJlIG9yIGVuZC1vZi1zZXF1ZW5jZSBwYWNrZXQgKi8KLSAgd2hpbGUgKHNpemUgPj0gMTMpIHsKLSAgICBpZiAoR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKSAhPSAweDQyNDI0MzQ0IC8qICdCQkNEJyAqLyApIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwYXJzZV9jb2RlID0gR1NUX1JFQURfVUlOVDggKGRhdGEgKyA0KTsKLSAgICBpZiAocGFyc2VfY29kZSA9PSBESVJBQ19QQVJTRV9DT0RFX1NFUVVFTkNFX0hFQURFUikgewotICAgICAgaWYgKGN0eC0+ZGlyYWNfdW5pdCkgewotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChjdHgtPmRpcmFjX3VuaXQpOwotICAgICAgICBjdHgtPmRpcmFjX3VuaXQgPSBOVUxMOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoRElSQUNfUEFSU0VfQ09ERV9JU19QSUNUVVJFIChwYXJzZV9jb2RlKSB8fAotICAgICAgICBwYXJzZV9jb2RlID09IERJUkFDX1BBUlNFX0NPREVfRU5EX09GX1NFUVVFTkNFKSB7Ci0gICAgICBpc19tdXhpbmdfdW5pdCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBuZXh0X3BhcnNlX29mZnNldCA9IEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSArIDUpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKG5leHRfcGFyc2Vfb2Zmc2V0ID09IDAgfHwgbmV4dF9wYXJzZV9vZmZzZXQgPiBzaXplKSkKLSAgICAgIGJyZWFrOwotCi0gICAgZGF0YSArPSBuZXh0X3BhcnNlX29mZnNldDsKLSAgICBzaXplIC09IG5leHRfcGFyc2Vfb2Zmc2V0OwotICB9Ci0KLSAgaWYgKGN0eC0+ZGlyYWNfdW5pdCkKLSAgICBjdHgtPmRpcmFjX3VuaXQgPSBnc3RfYnVmZmVyX2FwcGVuZCAoY3R4LT5kaXJhY191bml0LCBnc3RfYnVmZmVyX3JlZiAoYnVmKSk7Ci0gIGVsc2UKLSAgICBjdHgtPmRpcmFjX3VuaXQgPSBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIGlmIChpc19tdXhpbmdfdW5pdCkgewotICAgIHJldCA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoY3R4LT5kaXJhY191bml0KTsKLSAgICBjdHgtPmRpcmFjX3VuaXQgPSBOVUxMOwotICAgIGdzdF9idWZmZXJfY29weV9pbnRvIChyZXQsIGJ1ZiwKLSAgICAgICAgR1NUX0JVRkZFUl9DT1BZX0ZMQUdTIHwgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMsIDAsIC0xKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9IGVsc2UgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0ID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfbXV4X3N0b3Bfc3RyZWFtaGVhZGVyIChHc3RNYXRyb3NrYU11eCAqIG11eCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHVmFsdWUgc3RyZWFtaGVhZGVyID0geyAwIH07Ci0gIEdWYWx1ZSBidWZ2YWwgPSB7IDAgfTsKLSAgR3N0QnVmZmVyICpzdHJlYW1oZWFkZXJfYnVmZmVyOwotICBHc3RFYm1sV3JpdGUgKmVibWwgPSBtdXgtPmVibWxfd3JpdGU7Ci0KLSAgc3RyZWFtaGVhZGVyX2J1ZmZlciA9IGdzdF9lYm1sX3N0b3Bfc3RyZWFtaGVhZGVyIChlYm1sKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKG11eC0+ZWJtbF93cml0ZS0+Y2Fwcyk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgZ192YWx1ZV9pbml0ICgmc3RyZWFtaGVhZGVyLCBHU1RfVFlQRV9BUlJBWSk7Ci0gIGdfdmFsdWVfaW5pdCAoJmJ1ZnZhbCwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoc3RyZWFtaGVhZGVyX2J1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0hFQURFUik7Ci0gIGdzdF92YWx1ZV9zZXRfYnVmZmVyICgmYnVmdmFsLCBzdHJlYW1oZWFkZXJfYnVmZmVyKTsKLSAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnN0cmVhbWhlYWRlciwgJmJ1ZnZhbCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZidWZ2YWwpOwotICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAocywgInN0cmVhbWhlYWRlciIsICZzdHJlYW1oZWFkZXIpOwotICBnX3ZhbHVlX3Vuc2V0ICgmc3RyZWFtaGVhZGVyKTsKLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJmVibWwtPmNhcHMsIGNhcHMpOwotICBnc3RfYnVmZmVyX3VucmVmIChzdHJlYW1oZWFkZXJfYnVmZmVyKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAobXV4LT5zcmNwYWQsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLS8qKgotICogZ3N0X21hdHJvc2thX211eF93cml0ZV9kYXRhOgotICogQG11eDogI0dzdE1hdHJvc2thTXV4Ci0gKiBAY29sbGVjdF9wYWQ6ICNHc3RNYXRyb3NrYVBhZCB3aXRoIHRoZSBkYXRhCi0gKgotICogV3JpdGUgY29sbGVjdGVkIGRhdGEgKGNhbGxlZCBmcm9tIGdzdF9tYXRyb3NrYV9tdXhfY29sbGVjdGVkKS4KLSAqCi0gKiBSZXR1cm5zOiBSZXN1bHQgb2YgdGhlIGdzdF9wYWRfcHVzaCBpc3N1ZWQgdG8gd3JpdGUgdGhlIGRhdGEuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfbXV4X3dyaXRlX2RhdGEgKEdzdE1hdHJvc2thTXV4ICogbXV4LCBHc3RNYXRyb3NrYVBhZCAqIGNvbGxlY3RfcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0RWJtbFdyaXRlICplYm1sID0gbXV4LT5lYm1sX3dyaXRlOwotICBHc3RCdWZmZXIgKmhkcjsKLSAgZ3VpbnQ2NCBibG9ja2dyb3VwOwotICBnYm9vbGVhbiB3cml0ZV9kdXJhdGlvbjsKLSAgZ2ludDE2IHJlbGF0aXZlX3RpbWVzdGFtcDsKLSAgZ2ludDY0IHJlbGF0aXZlX3RpbWVzdGFtcDY0OwotICBndWludDY0IGJsb2NrX2R1cmF0aW9uLCBkdXJhdGlvbl9kaWZmID0gMDsKLSAgZ2Jvb2xlYW4gaXNfdmlkZW9fa2V5ZnJhbWUgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gaXNfdmlkZW9faW52aXNpYmxlID0gRkFMU0U7Ci0gIEdzdE1hdHJvc2thbXV4UGFkICpwYWQ7Ci0gIGdpbnQgZmxhZ3MgPSAwOwotICBHc3RDbG9ja1RpbWUgYnVmZmVyX3RpbWVzdGFtcDsKLSAgR3N0QXVkaW9DbGlwcGluZ01ldGEgKmNtZXRhID0gTlVMTDsKLQotICAvKiB3cml0ZSBkYXRhICovCi0gIHBhZCA9IEdTVF9NQVRST1NLQU1VWF9QQURfQ0FTVCAoY29sbGVjdF9wYWQtPmNvbGxlY3QucGFkKTsKLQotICAvKiB2b3JiaXMvdGhlb3JhIGhlYWRlcnMgYXJlIHJldHJpZXZlZCBmcm9tIGNhcHMgYW5kIHB1dCBpbiBDb2RlY1ByaXZhdGUgKi8KLSAgaWYgKGNvbGxlY3RfcGFkLT50cmFjay0+eGlwaF9oZWFkZXJzX3RvX3NraXAgPiAwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGNvbGxlY3RfcGFkLT5jb2xsZWN0LnBhZCwgImRyb3BwaW5nIHN0cmVhbWhlYWRlciBidWZmZXIiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIC0tY29sbGVjdF9wYWQtPnRyYWNrLT54aXBoX2hlYWRlcnNfdG9fc2tpcDsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICAvKiBmb3IgZGlyYWMgd2UgaGF2ZSB0byBxdWV1ZSB1cCBldmVyeXRoaW5nIHVwIHRvIGEgcGljdHVyZSB1bml0ICovCi0gIGlmICghc3RyY21wIChjb2xsZWN0X3BhZC0+dHJhY2stPmNvZGVjX2lkLCBHU1RfTUFUUk9TS0FfQ09ERUNfSURfVklERU9fRElSQUMpKSB7Ci0gICAgYnVmID0gZ3N0X21hdHJvc2thX211eF9oYW5kbGVfZGlyYWNfcGFja2V0IChtdXgsIGNvbGxlY3RfcGFkLCBidWYpOwotICAgIGlmICghYnVmKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGNvbGxlY3RfcGFkLT50cmFjay0+Y29kZWNfaWQsCi0gICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1BST1JFUykpIHsKLSAgICAvKiBSZW1vdmUgdGhlICdGcmFtZSBjb250YWluZXIgYXRvbScgaGVhZGVyJyAqLwotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmKTsKLSAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCA4LCBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpIC0gOCk7Ci0gIH0KLQotICBidWZmZXJfdGltZXN0YW1wID0KLSAgICAgIGdzdF9tYXRyb3NrYV90cmFja19nZXRfYnVmZmVyX3RpbWVzdGFtcCAoY29sbGVjdF9wYWQtPnRyYWNrLCBidWYpOwotCi0gIC8qIGhtLCBpbnZhbGlkIHRpbWVzdGFtcCAoZHVlIHRvIC0tdG8gYmUgZml4ZWQtLS0gZWxlbWVudCB1cHN0cmVhbSk7Ci0gICAqIHRoaXMgd291bGQgd3JlYWsgaGF2b2Mgd2l0aCB0aW1lIHN0b3JlZCBpbiBtYXRyb3NrYSBmaWxlICovCi0gIC8qIFRPRE86IG1heWJlIGNhbGN1bGF0ZSBhIHRpbWVzdGFtcCBieSB1c2luZyB0aGUgcHJldmlvdXMgdGltZXN0YW1wCi0gICAqIGFuZCBkZWZhdWx0IGR1cmF0aW9uICovCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGJ1ZmZlcl90aW1lc3RhbXApKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb2xsZWN0X3BhZC0+Y29sbGVjdC5wYWQsCi0gICAgICAgICJJbnZhbGlkIGJ1ZmZlciB0aW1lc3RhbXA7IGRyb3BwaW5nIGJ1ZmZlciIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0KLSAgaWYgKCFzdHJjbXAgKGNvbGxlY3RfcGFkLT50cmFjay0+Y29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19PUFVTKQotICAgICAgJiYgY29sbGVjdF9wYWQtPnRyYWNrLT5jb2RlY19kZWxheSkgewotICAgIC8qIEFsbCB0aW1lc3RhbXBzIHNob3VsZCBpbmNsdWRlIHRoZSBjb2RlYyBkZWxheSAqLwotICAgIGlmIChidWZmZXJfdGltZXN0YW1wID4gY29sbGVjdF9wYWQtPnRyYWNrLT5jb2RlY19kZWxheSkgewotICAgICAgYnVmZmVyX3RpbWVzdGFtcCArPSBjb2xsZWN0X3BhZC0+dHJhY2stPmNvZGVjX2RlbGF5OwotICAgIH0gZWxzZSB7Ci0gICAgICBidWZmZXJfdGltZXN0YW1wID0gMDsKLSAgICAgIGR1cmF0aW9uX2RpZmYgPSBjb2xsZWN0X3BhZC0+dHJhY2stPmNvZGVjX2RlbGF5IC0gYnVmZmVyX3RpbWVzdGFtcDsKLSAgICB9Ci0gIH0KLQotICAvKiBzZXQgdGhlIHRpbWVzdGFtcCBmb3Igb3V0Z29pbmcgYnVmZmVycyAqLwotICBlYm1sLT50aW1lc3RhbXAgPSBidWZmZXJfdGltZXN0YW1wOwotCi0gIGlmIChjb2xsZWN0X3BhZC0+dHJhY2stPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfVklERU8pIHsKLSAgICBpZiAoIUdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAobXV4LCAiaGF2ZSB2aWRlbyBrZXlmcmFtZSwgdHM9JSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGJ1ZmZlcl90aW1lc3RhbXApKTsKLSAgICAgIGlzX3ZpZGVvX2tleWZyYW1lID0gVFJVRTsKLSAgICB9IGVsc2UgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFQ09ERV9PTkxZKSAmJgotICAgICAgICAoIXN0cmNtcCAoY29sbGVjdF9wYWQtPnRyYWNrLT5jb2RlY19pZCwgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1ZQOCkKLSAgICAgICAgICAgIHx8ICFzdHJjbXAgKGNvbGxlY3RfcGFkLT50cmFjay0+Y29kZWNfaWQsCi0gICAgICAgICAgICAgICAgR1NUX01BVFJPU0tBX0NPREVDX0lEX1ZJREVPX1ZQOSkpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAobXV4LAotICAgICAgICAgICJoYXZlIFZQOCB2aWRlbyBpbnZpc2libGUgZnJhbWUsICIgInRzPSUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChidWZmZXJfdGltZXN0YW1wKSk7Ci0gICAgICBpc192aWRlb19pbnZpc2libGUgPSBUUlVFOwotICAgIH0KLSAgfQotCi0gIGlmIChtdXgtPmNsdXN0ZXIpIHsKLSAgICAvKiBzdGFydCBhIG5ldyBjbHVzdGVyIGF0IGV2ZXJ5IGtleWZyYW1lLCBhdCBldmVyeSBHc3RGb3JjZUtleVVuaXQgZXZlbnQsCi0gICAgICogb3Igd2hlbiB3ZSBtYXkgYmUgcmVhY2hpbmcgdGhlIGxpbWl0IG9mIHRoZSByZWxhdGl2ZSB0aW1lc3RhbXAgKi8KLSAgICBpZiAobXV4LT5jbHVzdGVyX3RpbWUgKwotICAgICAgICBtdXgtPm1heF9jbHVzdGVyX2R1cmF0aW9uIDwgYnVmZmVyX3RpbWVzdGFtcAotICAgICAgICB8fCBpc192aWRlb19rZXlmcmFtZSB8fCBtdXgtPmZvcmNlX2tleV91bml0X2V2ZW50KSB7Ci0gICAgICBpZiAoIW11eC0+ZWJtbF93cml0ZS0+c3RyZWFtYWJsZSkKLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfbWFzdGVyX2ZpbmlzaCAoZWJtbCwgbXV4LT5jbHVzdGVyKTsKLQotICAgICAgLyogRm9yd2FyZCB0aGUgR3N0Rm9yY2VLZXlVbml0IGV2ZW50IGFmdGVyIGZpbmlzaGluZyB0aGUgY2x1c3RlciAqLwotICAgICAgaWYgKG11eC0+Zm9yY2Vfa2V5X3VuaXRfZXZlbnQpIHsKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChtdXgtPnNyY3BhZCwgbXV4LT5mb3JjZV9rZXlfdW5pdF9ldmVudCk7Ci0gICAgICAgIG11eC0+Zm9yY2Vfa2V5X3VuaXRfZXZlbnQgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBtdXgtPnByZXZfY2x1c3Rlcl9zaXplID0gZWJtbC0+cG9zIC0gbXV4LT5jbHVzdGVyX3BvczsKLSAgICAgIG11eC0+Y2x1c3Rlcl9wb3MgPSBlYm1sLT5wb3M7Ci0gICAgICBnc3RfZWJtbF93cml0ZV9zZXRfY2FjaGUgKGVibWwsIDB4MjApOwotICAgICAgbXV4LT5jbHVzdGVyID0KLSAgICAgICAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSKTsKLSAgICAgIGdzdF9lYm1sX3dyaXRlX3VpbnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSVElNRUNPREUsCi0gICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChidWZmZXJfdGltZXN0YW1wLCAxLCBtdXgtPnRpbWVfc2NhbGUpKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChtdXgsICJjbHVzdGVyIHRpbWVzdGFtcCAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoYnVmZmVyX3RpbWVzdGFtcCwgMSwgbXV4LT50aW1lX3NjYWxlKSk7Ci0gICAgICBnc3RfZWJtbF93cml0ZV9mbHVzaF9jYWNoZSAoZWJtbCwgVFJVRSwgYnVmZmVyX3RpbWVzdGFtcCk7Ci0gICAgICBtdXgtPmNsdXN0ZXJfdGltZSA9IGJ1ZmZlcl90aW1lc3RhbXA7Ci0gICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfUFJFVlNJWkUsCi0gICAgICAgICAgbXV4LT5wcmV2X2NsdXN0ZXJfc2l6ZSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIGZpcnN0IGNsdXN0ZXIgKi8KLQotICAgIG11eC0+Y2x1c3Rlcl9wb3MgPSBlYm1sLT5wb3M7Ci0gICAgZ3N0X2VibWxfd3JpdGVfc2V0X2NhY2hlIChlYm1sLCAweDIwKTsKLSAgICBtdXgtPmNsdXN0ZXIgPSBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfc3RhcnQgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSKTsKLSAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUlRJTUVDT0RFLAotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGJ1ZmZlcl90aW1lc3RhbXAsIDEsIG11eC0+dGltZV9zY2FsZSkpOwotICAgIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlIChlYm1sLCBUUlVFLCBidWZmZXJfdGltZXN0YW1wKTsKLSAgICBtdXgtPmNsdXN0ZXJfdGltZSA9IGJ1ZmZlcl90aW1lc3RhbXA7Ci0gIH0KLQotICAvKiBXZSBjdXJyZW50bHkgd3JpdGUgaW5kZXggZW50cmllcyBmb3IgYWxsIHZpZGVvIHRyYWNrcyBvciBmb3IgdGhlIGF1ZGlvCi0gICAqIHRyYWNrIGluIGEgc2luZ2xlLXRyYWNrIGF1ZGlvIGZpbGUuICBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIGJ5IGtlZXBpbmcgdGhlCi0gICAqIGluZGV4IG9ubHkgZm9yIHRoZSAqZmlyc3QqIHZpZGVvIHRyYWNrLiAqLwotCi0gIC8qIFRPRE86IGluZGV4IGlzIHVzZWZ1bCBmb3IgZXZlcnkgdHJhY2ssIHNob3VsZCBjb250YWluIHRoZSBudW1iZXIgb2YKLSAgICogdGhlIGJsb2NrIGluIHRoZSBjbHVzdGVyIHdoaWNoIGNvbnRhaW5zIHRoZSB0aW1lc3RhbXAsIHNob3VsZCBhbHNvIHdvcmsKLSAgICogZm9yIGZpbGVzIHdpdGggbXVsdGlwbGUgYXVkaW8gdHJhY2tzLgotICAgKi8KLSAgaWYgKCFtdXgtPmVibWxfd3JpdGUtPnN0cmVhbWFibGUgJiYKLSAgICAgIChpc192aWRlb19rZXlmcmFtZSB8fAotICAgICAgICAgICgoY29sbGVjdF9wYWQtPnRyYWNrLT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0FVRElPKSAmJgotICAgICAgICAgICAgICAobXV4LT5udW1fc3RyZWFtcyA9PSAxKSkpKSB7Ci0gICAgZ2ludCBsYXN0X2lkeCA9IC0xOwotCi0gICAgaWYgKG11eC0+bWluX2luZGV4X2ludGVydmFsICE9IDApIHsKLSAgICAgIGZvciAobGFzdF9pZHggPSBtdXgtPm51bV9pbmRleGVzIC0gMTsgbGFzdF9pZHggPj0gMDsgbGFzdF9pZHgtLSkgewotICAgICAgICBpZiAobXV4LT5pbmRleFtsYXN0X2lkeF0udHJhY2sgPT0gY29sbGVjdF9wYWQtPnRyYWNrLT5udW0pCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxhc3RfaWR4IDwgMCB8fCBtdXgtPm1pbl9pbmRleF9pbnRlcnZhbCA9PSAwIHx8Ci0gICAgICAgIChHU1RfQ0xPQ0tfRElGRiAobXV4LT5pbmRleFtsYXN0X2lkeF0udGltZSwgYnVmZmVyX3RpbWVzdGFtcCkKLSAgICAgICAgICAgID49IG11eC0+bWluX2luZGV4X2ludGVydmFsKSkgewotICAgICAgR3N0TWF0cm9za2FJbmRleCAqaWR4OwotCi0gICAgICBpZiAobXV4LT5udW1faW5kZXhlcyAlIDMyID09IDApIHsKLSAgICAgICAgbXV4LT5pbmRleCA9IGdfcmVuZXcgKEdzdE1hdHJvc2thSW5kZXgsIG11eC0+aW5kZXgsCi0gICAgICAgICAgICBtdXgtPm51bV9pbmRleGVzICsgMzIpOwotICAgICAgfQotICAgICAgaWR4ID0gJm11eC0+aW5kZXhbbXV4LT5udW1faW5kZXhlcysrXTsKLQotICAgICAgaWR4LT5wb3MgPSBtdXgtPmNsdXN0ZXJfcG9zOwotICAgICAgaWR4LT50aW1lID0gYnVmZmVyX3RpbWVzdGFtcDsKLSAgICAgIGlkeC0+dHJhY2sgPSBjb2xsZWN0X3BhZC0+dHJhY2stPm51bTsKLSAgICB9Ci0gIH0KLQotICAvKiBDaGVjayBpZiB0aGUgZHVyYXRpb24gZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0IGR1cmF0aW9uLiAqLwotICB3cml0ZV9kdXJhdGlvbiA9IEZBTFNFOwotICBibG9ja19kdXJhdGlvbiA9IDA7Ci0gIGlmIChwYWQtPmZyYW1lX2R1cmF0aW9uICYmIEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKGJ1ZikpIHsKLSAgICBibG9ja19kdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgKyBkdXJhdGlvbl9kaWZmOwotICAgIGJsb2NrX2R1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChibG9ja19kdXJhdGlvbiwgMSwgbXV4LT50aW1lX3NjYWxlKTsKLQotICAgIC8qIHNtYWxsIGRpZmZlcmVuY2Ugc2hvdWxkIGJlIG9rLiAqLwotICAgIGlmIChibG9ja19kdXJhdGlvbiA+IGNvbGxlY3RfcGFkLT5kZWZhdWx0X2R1cmF0aW9uX3NjYWxlZCArIDEgfHwKLSAgICAgICAgYmxvY2tfZHVyYXRpb24gPCBjb2xsZWN0X3BhZC0+ZGVmYXVsdF9kdXJhdGlvbl9zY2FsZWQgLSAxKSB7Ci0gICAgICB3cml0ZV9kdXJhdGlvbiA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogd3JpdGUgdGhlIGJsb2NrLCBmb3IgZG9jdHlwZSB2MiB1c2UgU2ltcGxlQmxvY2sgaWYgcG9zc2libGUKLSAgICogb25lIHNsaWNlICgqYnJlYXRoKikuCi0gICAqIEZJWE1FOiBOZWVkIHRvIGRvIGNvcnJlY3QgbGFjaW5nISAqLwotICByZWxhdGl2ZV90aW1lc3RhbXA2NCA9IGJ1ZmZlcl90aW1lc3RhbXAgLSBtdXgtPmNsdXN0ZXJfdGltZTsKLSAgaWYgKHJlbGF0aXZlX3RpbWVzdGFtcDY0ID49IDApIHsKLSAgICAvKiByb3VuZCB0aGUgdGltZXN0YW1wICovCi0gICAgcmVsYXRpdmVfdGltZXN0YW1wNjQgKz0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChtdXgtPnRpbWVfc2NhbGUsIDEsIDIpOwotICAgIHJlbGF0aXZlX3RpbWVzdGFtcCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAocmVsYXRpdmVfdGltZXN0YW1wNjQsIDEsCi0gICAgICAgIG11eC0+dGltZV9zY2FsZSk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogcm91bmQgdGhlIHRpbWVzdGFtcCAqLwotICAgIHJlbGF0aXZlX3RpbWVzdGFtcDY0IC09IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAobXV4LT50aW1lX3NjYWxlLCAxLCAyKTsKLSAgICByZWxhdGl2ZV90aW1lc3RhbXAgPQotICAgICAgICAtKChnaW50MTYpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoLXJlbGF0aXZlX3RpbWVzdGFtcDY0LCAxLAotICAgICAgICAgICAgbXV4LT50aW1lX3NjYWxlKSk7Ci0gIH0KLQotICBpZiAoaXNfdmlkZW9faW52aXNpYmxlKQotICAgIGZsYWdzIHw9IDB4MDg7Ci0KLSAgaWYgKCFzdHJjbXAgKGNvbGxlY3RfcGFkLT50cmFjay0+Y29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19PUFVTKSkgewotICAgIGNtZXRhID0gZ3N0X2J1ZmZlcl9nZXRfYXVkaW9fY2xpcHBpbmdfbWV0YSAoYnVmKTsKLSAgICBnX2Fzc2VydCAoIWNtZXRhIHx8IGNtZXRhLT5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUKTsKLQotICAgIC8qIFN0YXJ0IGNsaXBwaW5nIGlzIGRvbmUgdmlhIGhlYWRlciBhbmQgQ29kZWNEZWxheSAqLwotICAgIGlmIChjbWV0YSAmJiAhY21ldGEtPmVuZCkKLSAgICAgIGNtZXRhID0gTlVMTDsKLSAgfQotCi0gIGlmIChtdXgtPmRvY3R5cGVfdmVyc2lvbiA+IDEgJiYgIXdyaXRlX2R1cmF0aW9uICYmICFjbWV0YSkgewotICAgIGlmIChpc192aWRlb19rZXlmcmFtZSkKLSAgICAgIGZsYWdzIHw9IDB4ODA7Ci0KLSAgICBoZHIgPQotICAgICAgICBnc3RfbWF0cm9za2FfbXV4X2NyZWF0ZV9idWZmZXJfaGVhZGVyIChjb2xsZWN0X3BhZC0+dHJhY2ssCi0gICAgICAgIHJlbGF0aXZlX3RpbWVzdGFtcCwgZmxhZ3MpOwotICAgIGdzdF9lYm1sX3dyaXRlX3NldF9jYWNoZSAoZWJtbCwgMHg0MCk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfYnVmZmVyX2hlYWRlciAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX1NJTVBMRUJMT0NLLAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpICsgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaGRyKSk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfYnVmZmVyIChlYm1sLCBoZHIpOwotICAgIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlIChlYm1sLCBGQUxTRSwgYnVmZmVyX3RpbWVzdGFtcCk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfYnVmZmVyIChlYm1sLCBidWYpOwotCi0gICAgcmV0dXJuIGdzdF9lYm1sX2xhc3Rfd3JpdGVfcmVzdWx0IChlYm1sKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfZWJtbF93cml0ZV9zZXRfY2FjaGUgKGVibWwsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgKiAyKTsKLSAgICAvKiB3cml0ZSBhbmQgY2FsbCBvcmRlciBzbGlnaHRseSB1bm5hdHVyYWwsCi0gICAgICogYnV0IGF2b2lkcyBzZWVrIGFuZCBtaW5pemVzIHB1c2hpbmcgKi8KLSAgICBibG9ja2dyb3VwID0gZ3N0X2VibWxfd3JpdGVfbWFzdGVyX3N0YXJ0IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQkxPQ0tHUk9VUCk7Ci0gICAgaGRyID0KLSAgICAgICAgZ3N0X21hdHJvc2thX211eF9jcmVhdGVfYnVmZmVyX2hlYWRlciAoY29sbGVjdF9wYWQtPnRyYWNrLAotICAgICAgICByZWxhdGl2ZV90aW1lc3RhbXAsIGZsYWdzKTsKLSAgICBpZiAod3JpdGVfZHVyYXRpb24pCi0gICAgICBnc3RfZWJtbF93cml0ZV91aW50IChlYm1sLCBHU1RfTUFUUk9TS0FfSURfQkxPQ0tEVVJBVElPTiwgYmxvY2tfZHVyYXRpb24pOwotCi0gICAgaWYgKCFzdHJjbXAgKGNvbGxlY3RfcGFkLT50cmFjay0+Y29kZWNfaWQsIEdTVF9NQVRST1NLQV9DT0RFQ19JRF9BVURJT19PUFVTKQotICAgICAgICAmJiBjbWV0YSkgewotICAgICAgLyogU3RhcnQgY2xpcHBpbmcgaXMgZG9uZSB2aWEgaGVhZGVyIGFuZCBDb2RlY0RlbGF5ICovCi0gICAgICBpZiAoY21ldGEtPmVuZCkgewotICAgICAgICBndWludDY0IGVuZCA9Ci0gICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKGNtZXRhLT5lbmQsIEdTVF9TRUNPTkQsIDQ4MDAwKTsKLSAgICAgICAgZ3N0X2VibWxfd3JpdGVfc2ludCAoZWJtbCwgR1NUX01BVFJPU0tBX0lEX0RJU0NBUkRQQURESU5HLCBlbmQpOwotICAgICAgfQotICAgIH0KLQotICAgIGdzdF9lYm1sX3dyaXRlX2J1ZmZlcl9oZWFkZXIgKGVibWwsIEdTVF9NQVRST1NLQV9JRF9CTE9DSywKLSAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSArIGdzdF9idWZmZXJfZ2V0X3NpemUgKGhkcikpOwotICAgIGdzdF9lYm1sX3dyaXRlX2J1ZmZlciAoZWJtbCwgaGRyKTsKLSAgICBnc3RfZWJtbF93cml0ZV9tYXN0ZXJfZmluaXNoX2Z1bGwgKGVibWwsIGJsb2NrZ3JvdXAsCi0gICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICAgIGdzdF9lYm1sX3dyaXRlX2ZsdXNoX2NhY2hlIChlYm1sLCBGQUxTRSwgYnVmZmVyX3RpbWVzdGFtcCk7Ci0gICAgZ3N0X2VibWxfd3JpdGVfYnVmZmVyIChlYm1sLCBidWYpOwotCi0gICAgcmV0dXJuIGdzdF9lYm1sX2xhc3Rfd3JpdGVfcmVzdWx0IChlYm1sKTsKLSAgfQotfQotCi0vKioKLSAqIGdzdF9tYXRyb3NrYV9tdXhfaGFuZGxlX2J1ZmZlcjoKLSAqIEBwYWRzOiAjR3N0Q29sbGVjdFBhZHMKLSAqIEB1dXNlcl9kYXRhOiAjR3N0TWF0cm9za2FNdXgKLSAqCi0gKiBDb2xsZWN0cGFkcyBjYWxsYmFjay4KLSAqCi0gKiBSZXR1cm5zOiAjR3N0Rmxvd1JldHVybgotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX211eF9oYW5kbGVfYnVmZmVyIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogZGF0YSwKLSAgICBHc3RCdWZmZXIgKiBidWYsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0Q2xvY2tUaW1lIGJ1ZmZlcl90aW1lc3RhbXA7Ci0gIEdzdE1hdHJvc2thTXV4ICptdXggPSBHU1RfTUFUUk9TS0FfTVVYICh1c2VyX2RhdGEpOwotICBHc3RFYm1sV3JpdGUgKmVibWwgPSBtdXgtPmVibWxfd3JpdGU7Ci0gIEdzdE1hdHJvc2thUGFkICpiZXN0OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHU1RfREVCVUdfT0JKRUNUIChtdXgsICJDb2xsZWN0ZWQgcGFkcyIpOwotCi0gIC8qIHN0YXJ0IHdpdGggYSBoZWFkZXIgKi8KLSAgaWYgKG11eC0+c3RhdGUgPT0gR1NUX01BVFJPU0tBX01VWF9TVEFURV9TVEFSVCkgewotICAgIGlmIChtdXgtPmNvbGxlY3QtPmRhdGEgPT0gTlVMTCkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG11eCwgU1RSRUFNLCBNVVgsIChOVUxMKSwKLSAgICAgICAgICAoIk5vIGlucHV0IHN0cmVhbXMgY29uZmlndXJlZCIpKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0gICAgbXV4LT5zdGF0ZSA9IEdTVF9NQVRST1NLQV9NVVhfU1RBVEVfSEVBREVSOwotICAgIGdzdF9lYm1sX3N0YXJ0X3N0cmVhbWhlYWRlciAoZWJtbCk7Ci0gICAgZ3N0X21hdHJvc2thX211eF9zdGFydCAobXV4KTsKLSAgICBnc3RfbWF0cm9za2FfbXV4X3N0b3Bfc3RyZWFtaGVhZGVyIChtdXgpOwotICAgIG11eC0+c3RhdGUgPSBHU1RfTUFUUk9TS0FfTVVYX1NUQVRFX0RBVEE7Ci0gIH0KLQotICAvKiBwcm92aWRlZCB3aXRoIHN0cmVhbSB0byB3cml0ZSBmcm9tICovCi0gIGJlc3QgPSAoR3N0TWF0cm9za2FQYWQgKikgZGF0YTsKLQotICAvKiBpZiB0aGVyZSBpcyBubyBiZXN0IHBhZCwgd2UgaGF2ZSByZWFjaGVkIEVPUyAqLwotICBpZiAoYmVzdCA9PSBOVUxMKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiTm8gYmVzdCBwYWQuIEZpbmlzaGluZy4uLiIpOwotICAgIGlmICghbXV4LT5lYm1sX3dyaXRlLT5zdHJlYW1hYmxlKSB7Ci0gICAgICBnc3RfbWF0cm9za2FfbXV4X2ZpbmlzaCAobXV4KTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiLi4uIGJ1dCBzdHJlYW1hYmxlLCBub3RoaW5nIHRvIGZpbmlzaCIpOwotICAgIH0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIGlmIChiZXN0LT50cmFjay0+Y29kZWNfaWQgPT0gTlVMTCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGJlc3QtPmNvbGxlY3QucGFkLCAiTm8gY29kZWMtaWQgZm9yIHBhZCIpOwotICAgIHJldCA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgIGdvdG8gZXhpdDsKLSAgfQotCi0gIC8qIGlmIHdlIGhhdmUgYSBiZXN0IHN0cmVhbSwgc2hvdWxkIGFsc28gaGF2ZSBhIGJ1ZmZlciAqLwotICBnX2Fzc2VydCAoYnVmKTsKLQotICBidWZmZXJfdGltZXN0YW1wID0gZ3N0X21hdHJvc2thX3RyYWNrX2dldF9idWZmZXJfdGltZXN0YW1wIChiZXN0LT50cmFjaywgYnVmKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiZXN0LT5jb2xsZWN0LnBhZCwgImJlc3QgcGFkIC0gYnVmZmVyIHRzICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiBkdXIgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoYnVmZmVyX3RpbWVzdGFtcCksCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKSk7Ci0KLSAgLyogbWFrZSBub3RlIG9mIGZpcnN0IGFuZCBsYXN0IGVuY291bnRlcmVkIHRpbWVzdGFtcHMsIHNvIHdlIGNhbiBjYWxjdWxhdGUKLSAgICogdGhlIGFjdHVhbCBkdXJhdGlvbiBsYXRlciB3aGVuIHdlIHNlbmQgYW4gdXBkYXRlZCBoZWFkZXIgb24gZW9zICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoYnVmZmVyX3RpbWVzdGFtcCkpIHsKLSAgICBHc3RDbG9ja1RpbWUgc3RhcnRfdHMgPSBidWZmZXJfdGltZXN0YW1wOwotICAgIEdzdENsb2NrVGltZSBlbmRfdHMgPSBzdGFydF90czsKLQotICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWYpKQotICAgICAgZW5kX3RzICs9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0gICAgZWxzZSBpZiAoYmVzdC0+dHJhY2stPmRlZmF1bHRfZHVyYXRpb24pCi0gICAgICBlbmRfdHMgKz0gYmVzdC0+dHJhY2stPmRlZmF1bHRfZHVyYXRpb247Ci0KLSAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChiZXN0LT5lbmRfdHMpIHx8IGVuZF90cyA+IGJlc3QtPmVuZF90cykKLSAgICAgIGJlc3QtPmVuZF90cyA9IGVuZF90czsKLQotICAgIGlmIChHX1VOTElLRUxZIChiZXN0LT5zdGFydF90cyA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FIHx8Ci0gICAgICAgICAgICBzdGFydF90cyA8IGJlc3QtPnN0YXJ0X3RzKSkKLSAgICAgIGJlc3QtPnN0YXJ0X3RzID0gc3RhcnRfdHM7Ci0gIH0KLQotICAvKiB3cml0ZSBvbmUgYnVmZmVyICovCi0gIHJldCA9IGdzdF9tYXRyb3NrYV9tdXhfd3JpdGVfZGF0YSAobXV4LCBiZXN0LCBidWYpOwotCi1leGl0OgotICByZXR1cm4gcmV0OwotfQotCi0KLS8qKgotICogZ3N0X21hdHJvc2thX211eF9jaGFuZ2Vfc3RhdGU6Ci0gKiBAZWxlbWVudDogI0dzdE1hdHJvc2thTXV4Ci0gKiBAdHJhbnNpdGlvbjogU3RhdGUgY2hhbmdlIHRyYW5zaXRpb24uCi0gKgotICogQ2hhbmdlIHRoZSBtdXhlciBzdGF0ZS4KLSAqCi0gKiBSZXR1cm5zOiAjR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLSAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfbWF0cm9za2FfbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0TWF0cm9za2FNdXggKm11eCA9IEdTVF9NQVRST1NLQV9NVVggKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKG11eC0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zdG9wIChtdXgtPmNvbGxlY3QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9tYXRyb3NrYV9tdXhfcmVzZXQgKEdTVF9FTEVNRU5UIChtdXgpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE1hdHJvc2thTXV4ICptdXg7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01BVFJPU0tBX01VWCAob2JqZWN0KSk7Ci0gIG11eCA9IEdTVF9NQVRST1NLQV9NVVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1dSSVRJTkdfQVBQOgotICAgICAgaWYgKCFnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgIndyaXRpbmctYXBwIHByb3BlcnR5IGNhbiBub3QgYmUgTlVMTCIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAobXV4LT53cml0aW5nX2FwcCk7Ci0gICAgICBtdXgtPndyaXRpbmdfYXBwID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9DVFlQRV9WRVJTSU9OOgotICAgICAgbXV4LT5kb2N0eXBlX3ZlcnNpb24gPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NSU5fSU5ERVhfSU5URVJWQUw6Ci0gICAgICBtdXgtPm1pbl9pbmRleF9pbnRlcnZhbCA9IGdfdmFsdWVfZ2V0X2ludDY0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RSRUFNQUJMRToKLSAgICAgIG11eC0+ZWJtbF93cml0ZS0+c3RyZWFtYWJsZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FQ09ERVNDQUxFOgotICAgICAgbXV4LT50aW1lX3NjYWxlID0gZ192YWx1ZV9nZXRfaW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9tdXhfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE1hdHJvc2thTXV4ICptdXg7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX01BVFJPU0tBX01VWCAob2JqZWN0KSk7Ci0gIG11eCA9IEdTVF9NQVRST1NLQV9NVVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1dSSVRJTkdfQVBQOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgbXV4LT53cml0aW5nX2FwcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9DVFlQRV9WRVJTSU9OOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgbXV4LT5kb2N0eXBlX3ZlcnNpb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01JTl9JTkRFWF9JTlRFUlZBTDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgbXV4LT5taW5faW5kZXhfaW50ZXJ2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUUkVBTUFCTEU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgbXV4LT5lYm1sX3dyaXRlLT5zdHJlYW1hYmxlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FQ09ERVNDQUxFOgotICAgICAgZ192YWx1ZV9zZXRfaW50NjQgKHZhbHVlLCBtdXgtPnRpbWVfc2NhbGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oIGIvZ3N0L21hdHJvc2thL21hdHJvc2thLW11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzg5NDE2Li4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1tdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgTWF0cm9za2EgbXV4ZXIvZGVtdXhlcgotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogKGMpIDIwMDUgTWljaGFsIEJlbmVzIDxtaWNoYWwuYmVuZXNAeGVyaXMuY3o+Ci0gKgotICogbWF0cm9za2EtbXV4Lmg6IG1hdHJvc2thIGZpbGUvc3RyZWFtIG11eGVyIG9iamVjdCB0eXBlcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTUFUUk9TS0FfTVVYX0hfXwotI2RlZmluZSBfX0dTVF9NQVRST1NLQV9NVVhfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLQotI2luY2x1ZGUgImVibWwtd3JpdGUuaCIKLSNpbmNsdWRlICJtYXRyb3NrYS1pZHMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX01BVFJPU0tBX01VWCBcCi0gIChnc3RfbWF0cm9za2FfbXV4X2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfTUFUUk9TS0FfTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9NQVRST1NLQV9NVVgsIEdzdE1hdHJvc2thTXV4KSkKLSNkZWZpbmUgR1NUX01BVFJPU0tBX01VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX01BVFJPU0tBX01VWCwgR3N0TWF0cm9za2FNdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NQVRST1NLQV9NVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX01BVFJPU0tBX01VWCkpCi0jZGVmaW5lIEdTVF9JU19NQVRST1NLQV9NVVhfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9NQVRST1NLQV9NVVgpKQotCi10eXBlZGVmIGVudW0gewotICBHU1RfTUFUUk9TS0FfTVVYX1NUQVRFX1NUQVJULAotICBHU1RfTUFUUk9TS0FfTVVYX1NUQVRFX0hFQURFUiwKLSAgR1NUX01BVFJPU0tBX01VWF9TVEFURV9EQVRBLAotfSBHc3RNYXRyb3NrYU11eFN0YXRlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0TWF0cm9za2FNZXRhU2Vla0luZGV4IHsKLSAgZ3VpbnQzMiAgaWQ7Ci0gIGd1aW50NjQgIHBvczsKLX0gR3N0TWF0cm9za2FNZXRhU2Vla0luZGV4OwotCi10eXBlZGVmIGdib29sZWFuICgqR3N0TWF0cm9za2FDYXBzRnVuYykgKEdzdFBhZCAqcGFkLCBHc3RDYXBzICpjYXBzKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hdHJvc2thTXV4IEdzdE1hdHJvc2thTXV4OwotCi0vKiBhbGwgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBvbmUgbWF0cm9za2Egc3RyZWFtICovCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RDb2xsZWN0RGF0YSBjb2xsZWN0OyAgICAgICAvKiB3ZSBleHRlbmQgdGhlIENvbGxlY3REYXRhICovCi0gIEdzdE1hdHJvc2thQ2Fwc0Z1bmMgY2Fwc2Z1bmM7Ci0gIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICp0cmFjazsKLQotICBHc3RNYXRyb3NrYU11eCAqbXV4OwotCi0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0X3RzOwotICBHc3RDbG9ja1RpbWUgZW5kX3RzOyAgICAvKiBsYXN0IHRpbWVzdGFtcCArIChpZiBhdmFpbGFibGUpIGR1cmF0aW9uICovCi0gIGd1aW50NjQgZGVmYXVsdF9kdXJhdGlvbl9zY2FsZWQ7Ci19Ci1Hc3RNYXRyb3NrYVBhZDsKLQotCi1zdHJ1Y3QgX0dzdE1hdHJvc2thTXV4IHsKLSAgR3N0RWxlbWVudCAgICAgZWxlbWVudDsKLSAgCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0KLSAgLyogcGFkcyAqLwotICBHc3RQYWQgICAgICAgICpzcmNwYWQ7Ci0gIEdzdENvbGxlY3RQYWRzICpjb2xsZWN0OwotICBHc3RFYm1sV3JpdGUgKmVibWxfd3JpdGU7Ci0KLSAgZ3VpbnQgICAgICAgICAgbnVtX3N0cmVhbXMsCi0gICAgICAgICAgICAgICAgIG51bV92X3N0cmVhbXMsIG51bV9hX3N0cmVhbXMsIG51bV90X3N0cmVhbXM7Ci0KLSAgLyogQXBwbGljYXRpb24gbmFtZSAoZm9yIHRoZSB3cml0aW5nIGFwcGxpY2F0aW9uIGhlYWRlciBlbGVtZW50KSAqLwotICBnY2hhciAgICAgICAgICAqd3JpdGluZ19hcHA7Ci0KLSAgLyogRUJNTCBEb2NUeXBlLiAqLwotICBjb25zdCBnY2hhciAgICAqZG9jdHlwZTsKLQotICAvKiBEb2NUeXBlIHZlcnNpb24uICovCi0gIGd1aW50ICAgICAgICAgIGRvY3R5cGVfdmVyc2lvbjsKLQotICAvKiBzdGF0ZSAqLwotICBHc3RNYXRyb3NrYU11eFN0YXRlIHN0YXRlOwotCi0gIC8qIGEgY3VlIChpbmRleCkgdGFibGUgKi8KLSAgR3N0TWF0cm9za2FJbmRleCAqaW5kZXg7Ci0gIGd1aW50ICAgICAgICAgIG51bV9pbmRleGVzOwotICBHc3RDbG9ja1RpbWVEaWZmIG1pbl9pbmRleF9pbnRlcnZhbDsKLSAKLSAgLyogdGltZXNjYWxlIGluIHRoZSBmaWxlICovCi0gIGd1aW50NjQgICAgICAgIHRpbWVfc2NhbGU7Ci0gIC8qIGJhc2VkIG9uIHRpbWVzY2FsZSwgbGltaXQgb2YgbmFub3NlY29uZHMgeW91IGNhbiBoYXZlIGluIGEgY2x1c3RlciAqLyAKLSAgZ3VpbnQ2NCAgICAgICAgbWF4X2NsdXN0ZXJfZHVyYXRpb247Ci0KLSAgLyogbGVuZ3RoLCBwb3NpdGlvbiAodGltZSwgbnMpICovCi0gIGd1aW50NjQgICAgICAgIGR1cmF0aW9uOwotCi0gIC8qIGJ5dGUtcG9zaXRpb25zIG9mIG1hc3Rlci1lbGVtZW50cyAoZm9yIHJlcGxhY2luZyBjb250ZW50cykgKi8KLSAgZ3VpbnQ2NCAgICAgICAgc2VnbWVudF9wb3MsCi0gICAgICAgICAgICAgICAgIHNlZWtoZWFkX3BvcywKLSAgICAgICAgICAgICAgICAgY3Vlc19wb3MsCi0gICAgICAgICAgICAgICAgIGNoYXB0ZXJzX3BvcywKLSAgICAgICAgICAgICAgICAgdGFnc19wb3MsCi0gICAgICAgICAgICAgICAgIGluZm9fcG9zLAotICAgICAgICAgICAgICAgICB0cmFja3NfcG9zLAotICAgICAgICAgICAgICAgICBkdXJhdGlvbl9wb3MsCi0gICAgICAgICAgICAgICAgIG1ldGFfcG9zOwotICBndWludDY0ICAgICAgICBzZWdtZW50X21hc3RlcjsKLQotICAvKiBjdXJyZW50IGNsdXN0ZXIgKi8KLSAgZ3VpbnQ2NCAgICAgICAgY2x1c3RlciwKLSAgICAgICAgICAgICAgICAgY2x1c3Rlcl90aW1lLAotICAgICAgICAgICAgICAgICBjbHVzdGVyX3BvcywKLQkJIHByZXZfY2x1c3Rlcl9zaXplOwotCi0gIC8qIEdzdEZvcmNlS2V5VW5pdCBldmVudCAqLwotICBHc3RFdmVudCAgICAgICAqZm9yY2Vfa2V5X3VuaXRfZXZlbnQ7Ci0KLSAgLyogRmxhZyB0byBlYXNlIGhhbmRsaW5nIG9mIFdlYk0gc3BlY2lmaWNzICovCi0gIGdib29sZWFuIGlzX3dlYm07Ci0KLSAgLyogdXNlZCB1aWRzICovCi0gIEdBcnJheSAqdXNlZF91aWRzOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hdHJvc2thTXV4Q2xhc3MgewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50OwotfSBHc3RNYXRyb3NrYU11eENsYXNzOwotCi1HVHlwZSAgIGdzdF9tYXRyb3NrYV9tdXhfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfTUFUUk9TS0FfTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmMgYi9nc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdjNTdlNy4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDMxOTEgKzAsMCBAQAotLyogR1N0cmVhbWVyIE1hdHJvc2thIG11eGVyL2RlbXV4ZXIKLSAqIChjKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqIChjKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiAoYykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKiAoYykgMjAxMSBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0gKgotICogbWF0cm9za2EtcGFyc2UuYzogbWF0cm9za2EgZmlsZS9zdHJlYW0gcGFyc2VyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVE9ETzogY2hlY2sgQ1JDMzIgaWYgcHJlc2VudAotICogVE9ETzogdGhlcmUgY2FuIGJlIGEgc2VnbWVudCBhZnRlciB0aGUgZmlyc3Qgc2VnbWVudC4gSGFuZGxlIGxpa2UKLSAqICAgICAgIGNoYWluZWQgb2dncy4gRml4ZXMgIzMzNDA4MgotICogVE9ETzogVGVzdCBzYW1wbGVzOiBodHRwOi8vd3d3Lm1hdHJvc2thLm9yZy9zYW1wbGVzL21hdHJpeC9pbmRleC5odG1sCi0gKiAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9zYW1wbGVzLm1wbGF5ZXJocS5odS9NYXRyb3NrYS8KLSAqIFRPRE86IGNoZWNrIGlmIHBhcnNlaW5nIGlzIGRvbmUgY29ycmVjdCBmb3IgYWxsIGNvZGVjcyBhY2NvcmRpbmcgdG8gc3BlYwotICogVE9ETzogc2Vla2luZyB3aXRoIGluY29tcGxldGUgb3Igd2l0aG91dCBDVUUKLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tYXRyb3NrYXBhcnNlCi0gKgotICogbWF0cm9za2FwYXJzZSBwYXJzZWVzIGEgTWF0cm9za2EgZmlsZSBpbnRvIHRoZSBkaWZmZXJlbnQgY29udGFpbmVkIHN0cmVhbXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249L3BhdGgvdG8vbWt2ICEgbWF0cm9za2FwYXJzZSAhIHZvcmJpc2RlYyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHBhcnNlZXMgYSBNYXRyb3NrYSBmaWxlIGFuZCBvdXRwdXRzIHRoZSBjb250YWluZWQgVm9yYmlzIGF1ZGlvLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnbGliL2dwcmludGYuaD4KLQotLyogRm9yIEFWSSBjb21wYXRpYmlsaXR5IG1vZGUKLSAgIGFuZCBmb3IgZm91cmNjIHN0dWZmICovCi0jaW5jbHVkZSA8Z3N0L3JpZmYvcmlmZi1yZWFkLmg+Ci0jaW5jbHVkZSA8Z3N0L3JpZmYvcmlmZi1pZHMuaD4KLSNpbmNsdWRlIDxnc3QvcmlmZi9yaWZmLW1lZGlhLmg+Ci0KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi0jaW5jbHVkZSAibWF0cm9za2EtcGFyc2UuaCIKLSNpbmNsdWRlICJtYXRyb3NrYS1pZHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAobWF0cm9za2FwYXJzZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBtYXRyb3NrYXBhcnNlX2RlYnVnCi0KLSNkZWZpbmUgREVCVUdfRUxFTUVOVF9TVEFSVChwYXJzZSwgZWJtbCwgZWxlbWVudCkgXAotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiUGFyc2luZyAiIGVsZW1lbnQgIiBlbGVtZW50IGF0IG9mZnNldCAlIiBcCi0gICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQsIGdzdF9lYm1sX3JlYWRfZ2V0X3BvcyAoZWJtbCkpCi0KLSNkZWZpbmUgREVCVUdfRUxFTUVOVF9TVE9QKHBhcnNlLCBlYm1sLCBlbGVtZW50LCByZXQpIFwKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlBhcnNpbmcgIiBlbGVtZW50ICIgZWxlbWVudCAiIFwKLSAgICAgICAgIiBmaW5pc2hlZCB3aXRoICclcyciLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSkKLQotZW51bQotewotICBQUk9QXzAKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1tYXRyb3NrYTsgdmlkZW8veC1tYXRyb3NrYTsgIgotICAgICAgICAidmlkZW8veC1tYXRyb3NrYS0zZDsgYXVkaW8vd2VibTsgdmlkZW8vd2VibSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbCA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LW1hdHJvc2thOyB2aWRlby94LW1hdHJvc2thOyAiCi0gICAgICAgICJ2aWRlby94LW1hdHJvc2thLTNkOyBhdWRpby93ZWJtOyB2aWRlby93ZWJtIikKLSAgICApOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfaWQgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwKLSAgICBndWludDMyIGlkLCBndWludDY0IGxlbmd0aCwgZ3VpbnQgbmVlZGVkKTsKLQotLyogZWxlbWVudCBmdW5jdGlvbnMgKi8KLS8vc3RhdGljIHZvaWQgZ3N0X21hdHJvc2thX3BhcnNlX2xvb3AgKEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbWF0cm9za2FfcGFyc2VfZWxlbWVudF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbWF0cm9za2FfcGFyc2VfZWxlbWVudF9xdWVyeSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLS8qIHBhZCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbWF0cm9za2FfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9tYXRyb3NrYV9wYXJzZV9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbWF0cm9za2FfcGFyc2VfaGFuZGxlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbWF0cm9za2FfcGFyc2VfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X21hdHJvc2thX3BhcnNlX2NoYWluIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9tYXRyb3NrYV9wYXJzZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotI2lmIDAKLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfcGFyc2Vfc2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0SW5kZXggKiBpbmRleCk7Ci1zdGF0aWMgR3N0SW5kZXggKmdzdF9tYXRyb3NrYV9wYXJzZV9nZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLSNlbmRpZgotCi0vKiBzdHJlYW0gbWV0aG9kcyAqLwotc3RhdGljIHZvaWQgZ3N0X21hdHJvc2thX3BhcnNlX3Jlc2V0IChHc3RFbGVtZW50ICogZWxlbWVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybV9zZWVrX3RvX29mZnNldCAoR3N0TWF0cm9za2FQYXJzZSAqIHBhcnNlLAotICAgIGd1aW50NjQgb2Zmc2V0KTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfbWF0cm9za2FfcGFyc2VfZm9yZ2VfY2FwcyAoZ2Jvb2xlYW4gaXNfd2VibSwKLSAgICBnYm9vbGVhbiBoYXNfdmlkZW8pOwotCi1HVHlwZSBnc3RfbWF0cm9za2FfcGFyc2VfZ2V0X3R5cGUgKHZvaWQpOwotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X21hdHJvc2thX3BhcnNlX3BhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TWF0cm9za2FQYXJzZSwgZ3N0X21hdHJvc2thX3BhcnNlLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9wYXJzZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKG9iamVjdCk7Ci0KLSAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2ZpbmFsaXplICgmcGFyc2UtPmNvbW1vbik7Ci0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9wYXJzZV9jbGFzc19pbml0IChHc3RNYXRyb3NrYVBhcnNlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAobWF0cm9za2FwYXJzZV9kZWJ1ZywgIm1hdHJvc2thcGFyc2UiLCAwLAotICAgICAgIk1hdHJvc2thIHBhcnNlciIpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X21hdHJvc2thX3BhcnNlX2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX3BhcnNlX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9wYXJzZV9lbGVtZW50X3NlbmRfZXZlbnQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5xdWVyeSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX3BhcnNlX2VsZW1lbnRfcXVlcnkpOwotCi0jaWYgMAotICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfaW5kZXggPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9wYXJzZV9zZXRfaW5kZXgpOwotICBnc3RlbGVtZW50X2NsYXNzLT5nZXRfaW5kZXggPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tYXRyb3NrYV9wYXJzZV9nZXRfaW5kZXgpOwotI2VuZGlmCi0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGwpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGwpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiTWF0cm9za2EgcGFyc2VyIiwgIkNvZGVjL1BhcnNlciIsCi0gICAgICAiUGFyc2VzIE1hdHJvc2thL1dlYk0gc3RyZWFtcyBpbnRvIHZpZGVvL2F1ZGlvL3N1YnRpdGxlcyIsCi0gICAgICAiR1N0cmVhbWVyIG1haW50YWluZXJzIDxnc3RyZWFtZXItZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3BhcnNlX2luaXQgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSkKLXsKLSAgcGFyc2UtPmNvbW1vbi5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rX3RlbXBsLAotICAgICAgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHBhcnNlLT5jb21tb24uc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfcGFyc2VfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhcnNlLT5jb21tb24uc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbWF0cm9za2FfcGFyc2VfaGFuZGxlX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHBhcnNlKSwgcGFyc2UtPmNvbW1vbi5zaW5rcGFkKTsKLQotICBwYXJzZS0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcGwsICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhcnNlLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX3BhcnNlX2hhbmRsZV9zcmNfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHBhcnNlLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21hdHJvc2thX3BhcnNlX2hhbmRsZV9zcmNfcXVlcnkpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAocGFyc2UtPnNyY3BhZCk7Ci0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHBhcnNlKSwgcGFyc2UtPnNyY3BhZCk7Ci0KLSAgLyogaW5pdCBkZWZhdWx0cyBmb3IgY29tbW9uIHJlYWQgY29udGV4dCAqLwotICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25faW5pdCAoJnBhcnNlLT5jb21tb24pOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKHBhcnNlLCBHU1RfRUxFTUVOVF9GTEFHX0lOREVYQUJMRSk7Ci0KLSAgLyogZmluaXNoIG9mZiAqLwotICBnc3RfbWF0cm9za2FfcGFyc2VfcmVzZXQgKEdTVF9FTEVNRU5UIChwYXJzZSkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3BhcnNlX3Jlc2V0IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKGVsZW1lbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiUmVzZXR0aW5nIHN0YXRlIik7Ci0KLSAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3Jlc2V0IChHU1RfRUxFTUVOVCAocGFyc2UpLCAmcGFyc2UtPmNvbW1vbik7Ci0KLSAgcGFyc2UtPm51bV9hX3N0cmVhbXMgPSAwOwotICBwYXJzZS0+bnVtX3Rfc3RyZWFtcyA9IDA7Ci0gIHBhcnNlLT5udW1fdl9zdHJlYW1zID0gMDsKLQotICBwYXJzZS0+Y2xvY2sgPSBOVUxMOwotICBwYXJzZS0+dHJhY2tzX3BhcnNlZCA9IEZBTFNFOwotCi0gIGdfbGlzdF9mb3JlYWNoIChwYXJzZS0+c2Vla19wYXJzZWQsCi0gICAgICAoR0Z1bmMpIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9mcmVlX3BhcnNlZF9lbCwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChwYXJzZS0+c2Vla19wYXJzZWQpOwotICBwYXJzZS0+c2Vla19wYXJzZWQgPSBOVUxMOwotCi0gIHBhcnNlLT5sYXN0X3N0b3BfZW5kID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGFyc2UtPnNlZWtfYmxvY2sgPSAwOwotICBwYXJzZS0+Y2x1c3Rlcl90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGFyc2UtPmNsdXN0ZXJfb2Zmc2V0ID0gMDsKLSAgcGFyc2UtPm5leHRfY2x1c3Rlcl9vZmZzZXQgPSAwOwotICBwYXJzZS0+aW5kZXhfb2Zmc2V0ID0gMDsKLSAgcGFyc2UtPnNlZWthYmxlID0gRkFMU0U7Ci0gIHBhcnNlLT5uZWVkX25ld3NlZ21lbnQgPSBUUlVFOwotICBwYXJzZS0+YnVpbGRpbmdfaW5kZXggPSBGQUxTRTsKLSAgaWYgKHBhcnNlLT5zZWVrX2V2ZW50KSB7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChwYXJzZS0+c2Vla19ldmVudCk7Ci0gICAgcGFyc2UtPnNlZWtfZXZlbnQgPSBOVUxMOwotICB9Ci0KLSAgcGFyc2UtPnNlZWtfaW5kZXggPSBOVUxMOwotICBwYXJzZS0+c2Vla19lbnRyeSA9IDA7Ci0KLSAgaWYgKHBhcnNlLT5jbG9zZV9zZWdtZW50KSB7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChwYXJzZS0+Y2xvc2Vfc2VnbWVudCk7Ci0gICAgcGFyc2UtPmNsb3NlX3NlZ21lbnQgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHBhcnNlLT5uZXdfc2VnbWVudCkgewotICAgIGdzdF9ldmVudF91bnJlZiAocGFyc2UtPm5ld19zZWdtZW50KTsKLSAgICBwYXJzZS0+bmV3X3NlZ21lbnQgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHBhcnNlLT5zdHJlYW1oZWFkZXIgIT0gTlVMTCkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKHBhcnNlLT5zdHJlYW1oZWFkZXIpOwotICAgIHBhcnNlLT5zdHJlYW1oZWFkZXIgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfYWRkX3N0cmVhbSAoR3N0TWF0cm9za2FQYXJzZSAqIHBhcnNlLCBHc3RFYm1sUmVhZCAqIGVibWwpCi17Ci0gIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQzMiBpZDsKLQotICBERUJVR19FTEVNRU5UX1NUQVJUIChwYXJzZSwgZWJtbCwgIlRyYWNrRW50cnkiKTsKLQotICAvKiBzdGFydCB3aXRoIHRoZSBtYXN0ZXIgKi8KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKHBhcnNlLCBlYm1sLCAiVHJhY2tFbnRyeSIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8qIGFsbG9jYXRlIGdlbmVyaWMuLi4gaWYgd2Uga25vdyB0aGUgdHlwZSwgd2UnbGwgZ19yZW5ldygpCi0gICAqIHdpdGggdGhlIHByZWNpc2UgdHlwZSAqLwotICBjb250ZXh0ID0gZ19uZXcwIChHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCwgMSk7Ci0gIGdfcHRyX2FycmF5X2FkZCAocGFyc2UtPmNvbW1vbi5zcmMsIGNvbnRleHQpOwotICBjb250ZXh0LT5pbmRleCA9IHBhcnNlLT5jb21tb24ubnVtX3N0cmVhbXM7Ci0gIGNvbnRleHQtPmluZGV4X3dyaXRlcl9pZCA9IC0xOwotICBjb250ZXh0LT50eXBlID0gMDsgICAgICAgICAgICAvKiBubyB0eXBlIHlldCAqLwotICBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uID0gMDsKLSAgY29udGV4dC0+cG9zID0gMDsKLSAgY29udGV4dC0+c2V0X2Rpc2NvbnQgPSBUUlVFOwotICBjb250ZXh0LT50aW1lY29kZXNjYWxlID0gMS4wOwotICBjb250ZXh0LT5mbGFncyA9Ci0gICAgICBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRCB8IEdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUIHwKLSAgICAgIEdTVF9NQVRST1NLQV9UUkFDS19MQUNJTkc7Ci0gIGNvbnRleHQtPnRvX29mZnNldCA9IEdfTUFYSU5UNjQ7Ci0gIGNvbnRleHQtPmFsaWdubWVudCA9IDE7Ci0gIHBhcnNlLT5jb21tb24ubnVtX3N0cmVhbXMrKzsKLSAgZ19hc3NlcnQgKHBhcnNlLT5jb21tb24uc3JjLT5sZW4gPT0gcGFyc2UtPmNvbW1vbi5udW1fc3RyZWFtcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJTdHJlYW0gbnVtYmVyICVkIiwgY29udGV4dC0+aW5kZXgpOwotCi0gIC8qIHRyeSByZWFkaW5nIHRoZSB0cmFja2VudHJ5IGhlYWRlcnMgKi8KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICAvKiB0cmFjayBudW1iZXIgKHVuaXF1ZSBzdHJlYW0gSUQpICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS05VTUJFUjp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChwYXJzZSwgIkludmFsaWQgVHJhY2tOdW1iZXIgMCIpOwotICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCFnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fdHJhY2tudW1iZXJfdW5pcXVlICgmcGFyc2UtPmNvbW1vbiwKLSAgICAgICAgICAgICAgICBudW0pKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocGFyc2UsICJUcmFja051bWJlciAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAgICIgaXMgbm90IHVuaXF1ZSIsIG51bSk7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrTnVtYmVyOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICBjb250ZXh0LT5udW0gPSBudW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgICAvKiB0cmFjayBVSUQgKHVuaXF1ZSBpZGVudGlmaWVyKSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tVSUQ6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG51bSA9PSAwKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAocGFyc2UsICJJbnZhbGlkIFRyYWNrVUlEIDAiKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiVHJhY2tVSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgIGNvbnRleHQtPnVpZCA9IG51bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogdHJhY2sgdHlwZSAodmlkZW8sIGF1ZGlvLCBjb21iaW5lZCwgc3VidGl0bGUsIGV0Yy4pICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS1RZUEU6ewotICAgICAgICBndWludDY0IHRyYWNrX3R5cGU7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJnRyYWNrX3R5cGUpKSAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnR5cGUgIT0gMCAmJiBjb250ZXh0LT50eXBlICE9IHRyYWNrX3R5cGUpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAiTW9yZSB0aGFuIG9uZSB0cmFja3R5cGUgZGVmaW5lZCBpbiBhIFRyYWNrRW50cnkgLSBza2lwcGluZyIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKHRyYWNrX3R5cGUgPCAxIHx8IHRyYWNrX3R5cGUgPiAyNTQpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBUcmFja1R5cGUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgICAgdHJhY2tfdHlwZSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrVHlwZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgdHJhY2tfdHlwZSk7Ci0KLSAgICAgICAgLyogb2ssIHNvIHdlJ3JlIGFjdHVhbGx5IGdvaW5nIHRvIHJlYWxsb2NhdGUgdGhpcyB0aGluZyAqLwotICAgICAgICBzd2l0Y2ggKHRyYWNrX3R5cGUpIHsKLSAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPOgotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3RyYWNrX2luaXRfdmlkZW9fY29udGV4dCAoJmNvbnRleHQpOwotICAgICAgICAgICAgcGFyc2UtPmNvbW1vbi5oYXNfdmlkZW8gPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTzoKLSAgICAgICAgICAgIGdzdF9tYXRyb3NrYV90cmFja19pbml0X2F1ZGlvX2NvbnRleHQgKCZjb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEU6Ci0gICAgICAgICAgICBnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9zdWJ0aXRsZV9jb250ZXh0ICgmY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0NPTVBMRVg6Ci0gICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9MT0dPOgotICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfQlVUVE9OUzoKLSAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX0NPTlRST0w6Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAgICAgIlVua25vd24gb3IgdW5zdXBwb3J0ZWQgVHJhY2tUeXBlICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgdHJhY2tfdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT50eXBlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGdfcHRyX2FycmF5X2luZGV4IChwYXJzZS0+Y29tbW9uLnNyYywgcGFyc2UtPmNvbW1vbi5udW1fc3RyZWFtcyAtIDEpCi0gICAgICAgICAgICA9IGNvbnRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHRyYWNrdHlwZSBzcGVjaWZpYyBzdHVmZiBmb3IgdmlkZW8gKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLVklERU86ewotICAgICAgICBHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICp2aWRlb2NvbnRleHQ7Ci0KLSAgICAgICAgREVCVUdfRUxFTUVOVF9TVEFSVCAocGFyc2UsIGVibWwsICJUcmFja1ZpZGVvIik7Ci0KLSAgICAgICAgaWYgKCFnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF92aWRlb19jb250ZXh0ICgmY29udGV4dCkpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAiVHJhY2tWaWRlbyBlbGVtZW50IGluIG5vbi12aWRlbyB0cmFjayAtIGlnbm9yaW5nIHRyYWNrIik7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZpZGVvY29udGV4dCA9IChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbnRleHQ7Ci0gICAgICAgIGdfcHRyX2FycmF5X2luZGV4IChwYXJzZS0+Y29tbW9uLnNyYywgcGFyc2UtPmNvbW1vbi5udW1fc3RyZWFtcyAtIDEpCi0gICAgICAgICAgICA9IGNvbnRleHQ7Ci0KLSAgICAgICAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJgotICAgICAgICAgICAgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgICAgICAgLyogU2hvdWxkIGJlIG9uZSBsZXZlbCB1cCBidXQgc29tZSBicm9rZW4gbXV4ZXJzIHdyaXRlIGl0IGhlcmUuICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS0RFRkFVTFREVVJBVElPTjp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBUcmFja0RlZmF1bHREdXJhdGlvbiAwIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICJUcmFja0RlZmF1bHREdXJhdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgICAgICAgY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbiA9IG51bTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLyogdmlkZW8gZnJhbWVyYXRlICovCi0gICAgICAgICAgICAgIC8qIE5PVEU6IFRoaXMgb25lIGlzIGhlcmUgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgICAgICogVXNlIF9UUkFDS0RFRkFVTERVUkFUSU9OIG9uZSBsZXZlbCB1cC4gKi8KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPRlJBTUVSQVRFOnsKLSAgICAgICAgICAgICAgZ2RvdWJsZSBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2Zsb2F0IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtIDw9IDAuMCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJJbnZhbGlkIFRyYWNrVmlkZW9GUFMgJWxmIiwgbnVtKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiVHJhY2tWaWRlb0ZyYW1lUmF0ZTogJWxmIiwgbnVtKTsKLSAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24gPT0gMCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCAoKGdkb3VibGUpIEdTVF9TRUNPTkQgKiAoMS4wIC8gbnVtKSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGVmYXVsdF9mcHMgPSBudW07Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIHdpZHRoIG9mIHRoZSBzaXplIHRvIGRpc3BsYXkgdGhlIHZpZGVvIGF0ICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT0RJU1BMQVlXSURUSDp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBUcmFja1ZpZGVvRGlzcGxheVdpZHRoIDAiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAgICAgIlRyYWNrVmlkZW9EaXNwbGF5V2lkdGg6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV93aWR0aCA9IG51bTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLyogaGVpZ2h0IG9mIHRoZSBzaXplIHRvIGRpc3BsYXkgdGhlIHZpZGVvIGF0ICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT0RJU1BMQVlIRUlHSFQ6ewotICAgICAgICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgaWYgKG51bSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIkludmFsaWQgVHJhY2tWaWRlb0Rpc3BsYXlIZWlnaHQgMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAgICAgICAiVHJhY2tWaWRlb0Rpc3BsYXlIZWlnaHQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+ZGlzcGxheV9oZWlnaHQgPSBudW07Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIHdpZHRoIG9mIHRoZSB2aWRlbyBpbiB0aGUgZmlsZSAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTFdJRFRIOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0gPT0gMCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJJbnZhbGlkIFRyYWNrVmlkZW9QaXhlbFdpZHRoIDAiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAgICAgIlRyYWNrVmlkZW9QaXhlbFdpZHRoOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPnBpeGVsX3dpZHRoID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBoZWlnaHQgb2YgdGhlIHZpZGVvIGluIHRoZSBmaWxlICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMSEVJR0hUOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0gPT0gMCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJJbnZhbGlkIFRyYWNrVmlkZW9QaXhlbEhlaWdodCAwIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICJUcmFja1ZpZGVvUGl4ZWxIZWlnaHQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIHZpZGVvY29udGV4dC0+cGl4ZWxfaGVpZ2h0ID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiB3aGV0aGVyIHRoZSB2aWRlbyBpcyBpbnRlcmxhY2VkICovCi0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT0ZMQUdJTlRFUkxBQ0VEOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0pCi0gICAgICAgICAgICAgICAgY29udGV4dC0+ZmxhZ3MgfD0gR1NUX01BVFJPU0tBX1ZJREVPVFJBQ0tfSU5URVJMQUNFRDsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQtPmZsYWdzICY9IH5HU1RfTUFUUk9TS0FfVklERU9UUkFDS19JTlRFUkxBQ0VEOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrVmlkZW9JbnRlcmxhY2VkOiAlZCIsCi0gICAgICAgICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVklERU9UUkFDS19JTlRFUkxBQ0VEKSA/IDEgOgotICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIGFzcGVjdCByYXRpbyBiZWhhdmlvdXIgKi8KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPQVNQRUNUUkFUSU9UWVBFOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGlmIChudW0gIT0gR1NUX01BVFJPU0tBX0FTUEVDVF9SQVRJT19NT0RFX0ZSRUUgJiYKLSAgICAgICAgICAgICAgICAgIG51bSAhPSBHU1RfTUFUUk9TS0FfQVNQRUNUX1JBVElPX01PREVfS0VFUCAmJgotICAgICAgICAgICAgICAgICAgbnVtICE9IEdTVF9NQVRST1NLQV9BU1BFQ1RfUkFUSU9fTU9ERV9GSVhFRCkgewotICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAgICAgICAgICJVbmtub3duIFRyYWNrVmlkZW9Bc3BlY3RSYXRpb1R5cGUgMHgleCIsIChndWludCkgbnVtKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICJUcmFja1ZpZGVvQXNwZWN0UmF0aW9UeXBlOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgICAgICB2aWRlb2NvbnRleHQtPmFzcl9tb2RlID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBjb2xvdXJzcGFjZSAob25seSBtYXR0ZXJzIGZvciByYXcgdmlkZW8pIGZvdXJjYyAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9DT0xPVVJTUEFDRTp7Ci0gICAgICAgICAgICAgIGd1aW50OCAqZGF0YTsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBkYXRhbGVuOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0KLSAgICAgICAgICAgICAgICAgICAgICBnc3RfZWJtbF9yZWFkX2JpbmFyeSAoZWJtbCwgJmlkLCAmZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFsZW4pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAoZGF0YWxlbiAhPSA0KSB7Ci0gICAgICAgICAgICAgICAgZ19mcmVlIChkYXRhKTsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBUcmFja1ZpZGVvQ29sb3VyU3BhY2UgbGVuZ3RoICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgIGRhdGFsZW4pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgbWVtY3B5ICgmdmlkZW9jb250ZXh0LT5mb3VyY2MsIGRhdGEsIDQpOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICJUcmFja1ZpZGVvQ29sb3VyU3BhY2U6ICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh2aWRlb2NvbnRleHQtPmZvdXJjYykpOwotICAgICAgICAgICAgICBnX2ZyZWUgKGRhdGEpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICJVbmtub3duIFRyYWNrVmlkZW8gc3ViZWxlbWVudCAweCV4IC0gaWdub3JpbmciLCBpZCk7Ci0gICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9TVEVSRU9NT0RFOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9ESVNQTEFZVU5JVDoKLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1ZJREVPUElYRUxDUk9QQk9UVE9NOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9QSVhFTENST1BUT1A6Ci0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMQ1JPUExFRlQ6Ci0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9WSURFT1BJWEVMQ1JPUFJJR0hUOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVklERU9HQU1NQVZBTFVFOgotICAgICAgICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBERUJVR19FTEVNRU5UX1NUT1AgKHBhcnNlLCBlYm1sLCAiVHJhY2tWaWRlbyIsIHJldCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHRyYWNrdHlwZSBzcGVjaWZpYyBzdHVmZiBmb3IgYXVkaW8gKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLQVVESU86ewotICAgICAgICBHc3RNYXRyb3NrYVRyYWNrQXVkaW9Db250ZXh0ICphdWRpb2NvbnRleHQ7Ci0KLSAgICAgICAgREVCVUdfRUxFTUVOVF9TVEFSVCAocGFyc2UsIGVibWwsICJUcmFja0F1ZGlvIik7Ci0KLSAgICAgICAgaWYgKCFnc3RfbWF0cm9za2FfdHJhY2tfaW5pdF9hdWRpb19jb250ZXh0ICgmY29udGV4dCkpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAiVHJhY2tBdWRpbyBlbGVtZW50IGluIG5vbi1hdWRpbyB0cmFjayAtIGlnbm9yaW5nIHRyYWNrIik7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdWRpb2NvbnRleHQgPSAoR3N0TWF0cm9za2FUcmFja0F1ZGlvQ29udGV4dCAqKSBjb250ZXh0OwotICAgICAgICBnX3B0cl9hcnJheV9pbmRleCAocGFyc2UtPmNvbW1vbi5zcmMsIHBhcnNlLT5jb21tb24ubnVtX3N0cmVhbXMgLSAxKQotICAgICAgICAgICAgPSBjb250ZXh0OwotCi0gICAgICAgIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYKLSAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgICAgICAgIC8qIHNhbXBsZXJhdGUgKi8KLSAgICAgICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0FVRElPU0FNUExJTkdGUkVROnsKLSAgICAgICAgICAgICAgZ2RvdWJsZSBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2Zsb2F0IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotCi0gICAgICAgICAgICAgIGlmIChudW0gPD0gMC4wKSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgVHJhY2tBdWRpb1NhbXBsaW5nRnJlcXVlbmN5ICVsZiIsIG51bSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeTogJWxmIiwgbnVtKTsKLSAgICAgICAgICAgICAgYXVkaW9jb250ZXh0LT5zYW1wbGVyYXRlID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBiaXRkZXB0aCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9CSVRERVBUSDp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBUcmFja0F1ZGlvQml0RGVwdGggMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJUcmFja0F1ZGlvQml0RGVwdGg6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICBudW0pOwotICAgICAgICAgICAgICBhdWRpb2NvbnRleHQtPmJpdGRlcHRoID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAvKiBjaGFubmVscyAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUzp7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBUcmFja0F1ZGlvQ2hhbm5lbHMgMCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJUcmFja0F1ZGlvQ2hhbm5lbHM6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICBudW0pOwotICAgICAgICAgICAgICBhdWRpb2NvbnRleHQtPmNoYW5uZWxzID0gbnVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgICAgICJVbmtub3duIFRyYWNrQXVkaW8gc3ViZWxlbWVudCAweCV4IC0gaWdub3JpbmciLCBpZCk7Ci0gICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9DSEFOTkVMUE9TSVRJT05TOgotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVVESU9PVVRQVVRTQU1QTElOR0ZSRVE6Ci0gICAgICAgICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfc2tpcCAoZWJtbCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIERFQlVHX0VMRU1FTlRfU1RPUCAocGFyc2UsIGVibWwsICJUcmFja0F1ZGlvIiwgcmV0KTsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiBjb2RlYyBpZGVudGlmaWVyICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0lEOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX2FzY2lpIChlYm1sLCAmaWQsICZ0ZXh0KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJDb2RlY0lEOiAlcyIsIEdTVF9TVFJfTlVMTCAodGV4dCkpOwotICAgICAgICBjb250ZXh0LT5jb2RlY19pZCA9IHRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNQUklWQVRFOnsKLSAgICAgICAgZ3VpbnQ4ICpkYXRhOwotICAgICAgICBndWludDY0IHNpemU7Ci0KLSAgICAgICAgaWYgKChyZXQgPQotICAgICAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfYmluYXJ5IChlYm1sLCAmaWQsICZkYXRhLCAmc2l6ZSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNvbnRleHQtPmNvZGVjX3ByaXYgPSBkYXRhOwotICAgICAgICBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPSBzaXplOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiQ29kZWNQcml2YXRlIG9mIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIHNpemUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiBuYW1lIG9mIHRoZSBjb2RlYyAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNOQU1FOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJnRleHQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkNvZGVjTmFtZTogJXMiLCBHU1RfU1RSX05VTEwgKHRleHQpKTsKLSAgICAgICAgY29udGV4dC0+Y29kZWNfbmFtZSA9IHRleHQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIG5hbWUgb2YgdGhpcyB0cmFjayAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tOQU1FOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJnRleHQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjb250ZXh0LT5uYW1lID0gdGV4dDsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJUcmFja05hbWU6ICVzIiwgR1NUX1NUUl9OVUxMICh0ZXh0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGxhbmd1YWdlIChtYXR0ZXJzIGZvciBhdWRpby9zdWJ0aXRsZXMsIG1vc3RseSkgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLTEFOR1VBR0U6ewotICAgICAgICBnY2hhciAqdGV4dDsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdXRmOCAoZWJtbCwgJmlkLCAmdGV4dCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0KLSAgICAgICAgY29udGV4dC0+bGFuZ3VhZ2UgPSB0ZXh0OwotCi0gICAgICAgIC8qIGZyZS1jYSA9PiBmcmUgKi8KLSAgICAgICAgaWYgKHN0cmxlbiAoY29udGV4dC0+bGFuZ3VhZ2UpID49IDQgJiYgY29udGV4dC0+bGFuZ3VhZ2VbM10gPT0gJy0nKQotICAgICAgICAgIGNvbnRleHQtPmxhbmd1YWdlWzNdID0gJ1wwJzsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrTGFuZ3VhZ2U6ICVzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoY29udGV4dC0+bGFuZ3VhZ2UpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogd2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IHVzZWQgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0VOQUJMRUQ6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG51bSkKLSAgICAgICAgICBjb250ZXh0LT5mbGFncyB8PSBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzICY9IH5HU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrRW5hYmxlZDogJWQiLAotICAgICAgICAgICAgKGNvbnRleHQtPmZsYWdzICYgR1NUX01BVFJPU0tBX1RSQUNLX0VOQUJMRUQpID8gMSA6IDApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiB3aGV0aGVyIGl0J3MgdGhlIGRlZmF1bHQgZm9yIHRoaXMgdHJhY2sgdHlwZSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tGTEFHREVGQVVMVDp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtKQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzIHw9IEdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29udGV4dC0+ZmxhZ3MgJj0gfkdTVF9NQVRST1NLQV9UUkFDS19ERUZBVUxUOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiVHJhY2tEZWZhdWx0OiAlZCIsCi0gICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRCkgPyAxIDogMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHdoZXRoZXIgdGhlIHRyYWNrIG11c3QgYmUgdXNlZCBkdXJpbmcgcGxheWJhY2sgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLRkxBR0ZPUkNFRDp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtKQotICAgICAgICAgIGNvbnRleHQtPmZsYWdzIHw9IEdTVF9NQVRST1NLQV9UUkFDS19GT1JDRUQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjb250ZXh0LT5mbGFncyAmPSB+R1NUX01BVFJPU0tBX1RSQUNLX0ZPUkNFRDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrRm9yY2VkOiAlZCIsCi0gICAgICAgICAgICAoY29udGV4dC0+ZmxhZ3MgJiBHU1RfTUFUUk9TS0FfVFJBQ0tfRU5BQkxFRCkgPyAxIDogMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIGxhY2luZyAobGlrZSBNUEVHLCB3aGVyZSBibG9ja3MgZG9uJ3QgZW5kL3N0YXJ0IG9uIGZyYW1lCi0gICAgICAgICAqIGJvdW5kYXJpZXMpICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS0ZMQUdMQUNJTkc6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG51bSkKLSAgICAgICAgICBjb250ZXh0LT5mbGFncyB8PSBHU1RfTUFUUk9TS0FfVFJBQ0tfTEFDSU5HOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29udGV4dC0+ZmxhZ3MgJj0gfkdTVF9NQVRST1NLQV9UUkFDS19MQUNJTkc7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJUcmFja0xhY2luZzogJWQiLAotICAgICAgICAgICAgKGNvbnRleHQtPmZsYWdzICYgR1NUX01BVFJPU0tBX1RSQUNLX0VOQUJMRUQpID8gMSA6IDApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiBkZWZhdWx0IGxlbmd0aCAoaW4gdGltZSkgb2Ygb25lIGRhdGEgYmxvY2sgaW4gdGhpcyB0cmFjayAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tERUZBVUxURFVSQVRJT046ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLQotICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBUcmFja0RlZmF1bHREdXJhdGlvbiAwIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrRGVmYXVsdER1cmF0aW9uOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgbnVtKTsKLSAgICAgICAgY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbiA9IG51bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRFTkNPRElOR1M6ewotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVhZF90cmFja19lbmNvZGluZ3MgKCZwYXJzZS0+Y29tbW9uLAotICAgICAgICAgICAgZWJtbCwgY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS1RJTUVDT0RFU0NBTEU6ewotICAgICAgICBnZG91YmxlIG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfZmxvYXQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChudW0gPD0gMC4wKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIkludmFsaWQgVHJhY2tUaW1lQ29kZVNjYWxlICVsZiIsIG51bSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlRyYWNrVGltZUNvZGVTY2FsZTogJWxmIiwgbnVtKTsKLSAgICAgICAgY29udGV4dC0+dGltZWNvZGVzY2FsZSA9IG51bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiVW5rbm93biBUcmFja0VudHJ5IHN1YmVsZW1lbnQgMHgleCAtIGlnbm9yaW5nIiwgaWQpOwotICAgICAgICAvKiBwYXNzLXRocm91Z2ggKi8KLQotICAgICAgICAvKiB3ZSBpZ25vcmUgdGhlc2UgYmVjYXVzZSB0aGV5J3JlIG5vdGhpbmcgdXNlZnVsIChpLmUuIGNyYXApCi0gICAgICAgICAqIG9yIHNpbXBseSBub3QgaW1wbGVtZW50ZWQgeWV0LiAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tNSU5DQUNIRToKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLTUFYQ0FDSEU6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9NQVhCTE9DS0FERElUSU9OSUQ6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS0FUVEFDSE1FTlRMSU5LOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tPVkVSTEFZOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVFJBQ0tUUkFOU0xBVEU6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS09GRlNFVDoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NPREVDU0VUVElOR1M6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0lORk9VUkw6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT0RFQ0RPV05MT0FEVVJMOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNERUNPREVBTEw6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfc2tpcCAoZWJtbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIERFQlVHX0VMRU1FTlRfU1RPUCAocGFyc2UsIGVibWwsICJUcmFja0VudHJ5IiwgcmV0KTsKLQotICAvKiBEZWNvZGUgY29kZWMgcHJpdmF0ZSBkYXRhIGlmIG5lY2Vzc2FyeSAqLwotICBpZiAoY29udGV4dC0+ZW5jb2RpbmdzICYmIGNvbnRleHQtPmVuY29kaW5ncy0+bGVuID4gMCAmJiBjb250ZXh0LT5jb2RlY19wcml2Ci0gICAgICAmJiBjb250ZXh0LT5jb2RlY19wcml2X3NpemUgPiAwKSB7Ci0gICAgaWYgKCFnc3RfbWF0cm9za2FfZGVjb2RlX2RhdGEgKGNvbnRleHQtPmVuY29kaW5ncywKLSAgICAgICAgICAgICZjb250ZXh0LT5jb2RlY19wcml2LCAmY29udGV4dC0+Y29kZWNfcHJpdl9zaXplLAotICAgICAgICAgICAgR1NUX01BVFJPU0tBX1RSQUNLX0VOQ09ESU5HX1NDT1BFX0NPREVDX0RBVEEsIFRSVUUpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiRGVjb2RpbmcgY29kZWMgcHJpdmF0ZSBkYXRhIGZhaWxlZCIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNvbnRleHQtPnR5cGUgPT0gMCB8fCBjb250ZXh0LT5jb2RlY19pZCA9PSBOVUxMIHx8IChyZXQgIT0gR1NUX0ZMT1dfT0sKLSAgICAgICAgICAmJiByZXQgIT0gR1NUX0ZMT1dfRU9TKSkgewotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sgfHwgcmV0ID09IEdTVF9GTE9XX0VPUykKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWJtbCwgIlVua25vd24gc3RyZWFtL2NvZGVjIGluIHRyYWNrIGVudHJ5IGhlYWRlciIpOwotCi0gICAgcGFyc2UtPmNvbW1vbi5udW1fc3RyZWFtcy0tOwotICAgIGdfcHRyX2FycmF5X3JlbW92ZV9pbmRleCAocGFyc2UtPmNvbW1vbi5zcmMsIHBhcnNlLT5jb21tb24ubnVtX3N0cmVhbXMpOwotICAgIGdfYXNzZXJ0IChwYXJzZS0+Y29tbW9uLnNyYy0+bGVuID09IHBhcnNlLT5jb21tb24ubnVtX3N0cmVhbXMpOwotICAgIGdzdF9tYXRyb3NrYV90cmFja19mcmVlIChjb250ZXh0KTsKLQotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICBpZiAoKGNvbnRleHQtPmxhbmd1YWdlID09IE5VTEwgfHwgKmNvbnRleHQtPmxhbmd1YWdlID09ICdcMCcpICYmCi0gICAgICAoY29udGV4dC0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTyB8fAotICAgICAgICAgIGNvbnRleHQtPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEUpKSB7Ci0gICAgR1NUX0xPRyAoInN0cmVhbSAlZDogbGFuZ3VhZ2U9ZW5nIChhc3N1bWluZyBkZWZhdWx0KSIsIGNvbnRleHQtPmluZGV4KTsKLSAgICBjb250ZXh0LT5sYW5ndWFnZSA9IGdfc3RyZHVwICgiZW5nIik7Ci0gIH0KLQotCi0gIC8qIHRhZGFhaCEgKi8KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfcGFyc2VfcXVlcnkgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwgR3N0UGFkICogcGFkLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IE5VTEw7Ci0KLSAgaWYgKHBhZCkgewotICAgIGNvbnRleHQgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIH0KLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX1RJTUUsIGNvbnRleHQtPnBvcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICBwYXJzZS0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24pOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOwotICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9ERUZBVUxUICYmIGNvbnRleHQKLSAgICAgICAgICAmJiBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgR1NUX0ZPUk1BVF9ERUZBVUxULAotICAgICAgICAgICAgY29udGV4dC0+cG9zIC8gY29udGV4dC0+ZGVmYXVsdF9kdXJhdGlvbik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICJvbmx5IHBvc2l0aW9uIHF1ZXJ5IGluIFRJTUUgYW5kIERFRkFVTFQgZm9ybWF0IGlzIHN1cHBvcnRlZCIpOwotICAgICAgfQotCi0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhcnNlKTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgIHBhcnNlLT5jb21tb24uc2VnbWVudC5kdXJhdGlvbik7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0RFRkFVTFQgJiYgY29udGV4dAotICAgICAgICAgICYmIGNvbnRleHQtPmRlZmF1bHRfZHVyYXRpb24pIHsKLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX0RFRkFVTFQsCi0gICAgICAgICAgICBwYXJzZS0+Y29tbW9uLnNlZ21lbnQuZHVyYXRpb24gLyBjb250ZXh0LT5kZWZhdWx0X2R1cmF0aW9uKTsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhcnNlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgIm9ubHkgZHVyYXRpb24gcXVlcnkgaW4gVElNRSBhbmQgREVGQVVMVCBmb3JtYXQgaXMgc3VwcG9ydGVkIik7Ci0gICAgICB9Ci0KLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZtdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZm10ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBnYm9vbGVhbiBzZWVrYWJsZTsKLQotICAgICAgICAvKiBhc3N1bWluZyB3ZSdsbCBiZSBhYmxlIHRvIGdldCBhbiBpbmRleCAuLi4gKi8KLSAgICAgICAgc2Vla2FibGUgPSBwYXJzZS0+c2Vla2FibGU7Ci0KLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrYWJsZSwKLSAgICAgICAgICAgIDAsIHBhcnNlLT5jb21tb24uc2VnbWVudC5kdXJhdGlvbik7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChwYWQpCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCAoR3N0T2JqZWN0ICopIHBhcnNlLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX3BhcnNlX2VsZW1lbnRfcXVlcnkgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICByZXR1cm4gZ3N0X21hdHJvc2thX3BhcnNlX3F1ZXJ5IChHU1RfTUFUUk9TS0FfUEFSU0UgKGVsZW1lbnQpLCBOVUxMLCBxdWVyeSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX3BhcnNlX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKHBhcmVudCk7Ci0KLSAgcmV0ID0gZ3N0X21hdHJvc2thX3BhcnNlX3F1ZXJ5IChwYXJzZSwgcGFkLCBxdWVyeSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tYXRyb3NrYV9wYXJzZV9zZW5kX3RhZ3MgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSkKLXsKLSAgaWYgKEdfVU5MSUtFTFkgKHBhcnNlLT5jb21tb24uZ2xvYmFsX3RhZ3NfY2hhbmdlZCkpIHsKLSAgICBHc3RFdmVudCAqdGFnX2V2ZW50OwotICAgIGdzdF90YWdfbGlzdF9hZGQgKHBhcnNlLT5jb21tb24uZ2xvYmFsX3RhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgR1NUX1RBR19DT05UQUlORVJfRk9STUFULCAiTWF0cm9za2EiLCBOVUxMKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlNlbmRpbmcgZ2xvYmFsX3RhZ3MgJXAgOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgcGFyc2UtPmNvbW1vbi5nbG9iYWxfdGFncywgcGFyc2UtPmNvbW1vbi5nbG9iYWxfdGFncyk7Ci0KLSAgICAvKiBTZW5kIGEgY29weSBhcyB3ZSB3YW50IHRvIGtlZXAgb3VyIGxvY2FsIHJlZiB3cml0YWJsZSB0byBhZGQgbW9yZSB0YWdzCi0gICAgICogaWYgYW55IGFyZSBmb3VuZCAqLwotICAgIHRhZ19ldmVudCA9Ci0gICAgICAgIGdzdF9ldmVudF9uZXdfdGFnIChnc3RfdGFnX2xpc3RfY29weSAocGFyc2UtPmNvbW1vbi5nbG9iYWxfdGFncykpOwotCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCB0YWdfZXZlbnQpOwotCi0gICAgcGFyc2UtPmNvbW1vbi5nbG9iYWxfdGFnc19jaGFuZ2VkID0gRkFMU0U7Ci0gIH0KLX0KLQotLyogcmV0dXJucyBGQUxTRSBpZiB0aGVyZSBhcmUgbm8gcGFkcyB0byBkZWxpdmVyIGV2ZW50IHRvLAotICogb3RoZXJ3aXNlIFRSVUUgKHdoYXRldmVyIHRoZSBvdXRjb21lIG9mIGV2ZW50IHNlbmRpbmcpLAotICogdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwYXNzZWQgZXZlbnQhICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9wYXJzZV9zZW5kX2V2ZW50IChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJTZW5kaW5nIGV2ZW50IG9mIHR5cGUgJXMgdG8gYWxsIHNvdXJjZSBwYWRzIiwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+c3JjcGFkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfcGFyc2VfZWxlbWVudF9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKGVsZW1lbnQpOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGV2ZW50ICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfU0VFSykgewotICAgIHJlcyA9IGdzdF9tYXRyb3NrYV9wYXJzZV9oYW5kbGVfc2Vla19ldmVudCAocGFyc2UsIE5VTEwsIGV2ZW50KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiVW5oYW5kbGVkIGV2ZW50IG9mIHR5cGUgJXMiLAotICAgICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICAgIHJlcyA9IEZBTFNFOwotICB9Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gcmVzOwotfQotCi0jaWYgMAotLyogc2VhcmNoZXMgZm9yIGEgY2x1c3RlciBzdGFydCBmcm9tIEBwb3MsCi0gKiByZXR1cm4gR1NUX0ZMT1dfT0sgYW5kIGNsdXN0ZXIgcG9zaXRpb24gaW4gQHBvcyBpZiBmb3VuZCAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9wYXJzZV9zZWFyY2hfY2x1c3RlciAoR3N0TWF0cm9za2FQYXJzZSAqIHBhcnNlLCBnaW50NjQgKiBwb3MpCi17Ci0gIGdpbnQ2NCBuZXdwb3MgPSAqcG9zOwotICBnaW50NjQgb3JpZ19vZmZzZXQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGNvbnN0IGd1aW50IGNodW5rID0gNjQgKiAxMDI0OwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdwb2ludGVyIGRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludDMyIGlkOwotICBndWludCBuZWVkZWQ7Ci0KLSAgb3JpZ19vZmZzZXQgPSBwYXJzZS0+Y29tbW9uLm9mZnNldDsKLQotICAvKiByZWFkIGluIGF0IG5ld3BvcyBhbmQgc2NhbiBmb3IgZWJtbCBjbHVzdGVyIGlkICovCi0gIHdoaWxlICgxKSB7Ci0gICAgR3N0Qnl0ZVJlYWRlciByZWFkZXI7Ci0gICAgZ2ludCBjbHVzdGVyX3BvczsKLQotICAgIGJ1ZiA9IE5VTEw7Ci0gICAgcmV0ID0gZ3N0X3BhZF9wdWxsX3JhbmdlIChwYXJzZS0+Y29tbW9uLnNpbmtwYWQsIG5ld3BvcywgY2h1bmssICZidWYpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgInJlYWQgYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBhdCBvZmZzZXQgJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpLCBuZXdwb3MpOwotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgZGF0YSA9IG1hcC5kYXRhOwotICAgIHNpemUgPSBtYXAuc2l6ZTsKLSAgICBnc3RfYnl0ZV9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgc2l6ZSk7Ci0gICAgY2x1c3Rlcl9wb3MgPSAwOwotICByZXN1bWU6Ci0gICAgY2x1c3Rlcl9wb3MgPSBnc3RfYnl0ZV9yZWFkZXJfbWFza2VkX3NjYW5fdWludDMyICgmcmVhZGVyLCAweGZmZmZmZmZmLAotICAgICAgICBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUiwgY2x1c3Rlcl9wb3MsIHNpemUgLSBjbHVzdGVyX3Bvcyk7Ci0gICAgaWYgKGNsdXN0ZXJfcG9zID49IDApIHsKLSAgICAgIG5ld3BvcyArPSBjbHVzdGVyX3BvczsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICJmb3VuZCBjbHVzdGVyIGVibWwgaWQgYXQgb2Zmc2V0ICUiIEdfR0lOVDY0X0ZPUk1BVCwgbmV3cG9zKTsKLSAgICAgIC8qIGV4dHJhIGNoZWNrcyB3aGV0aGVyIHdlIHJlYWxseSBzeW5jJ2VkIHRvIGEgY2x1c3RlcjoKLSAgICAgICAqIC0gZWl0aGVyIGl0IGlzIHRoZSBmaXJzdCBhbmQgb25seSBjbHVzdGVyCi0gICAgICAgKiAtIGVpdGhlciB0aGVyZSBpcyBhIGNsdXN0ZXIgYWZ0ZXIgdGhpcyBvbmUKLSAgICAgICAqIC0gZWl0aGVyIGNsdXN0ZXIgbGVuZ3RoIGlzIHVuZGVmaW5lZAotICAgICAgICovCi0gICAgICAvKiBvayBpZiBmaXJzdCBjbHVzdGVyICh0aGVyZSBtYXkgbm90IGEgc3Vic2VxdWVudCBvbmUpICovCi0gICAgICBpZiAobmV3cG9zID09IHBhcnNlLT5maXJzdF9jbHVzdGVyX29mZnNldCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImNsdXN0ZXIgaXMgZmlyc3QgY2x1c3RlciAtPiBPSyIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHBhcnNlLT5jb21tb24ub2Zmc2V0ID0gbmV3cG9zOwotICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKCZwYXJzZS0+Y29tbW9uLAotICAgICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKHBhcnNlKSwgJmlkLCAmbGVuZ3RoLCAmbmVlZGVkKTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gcmVzdW1lOwotICAgICAgZ19hc3NlcnQgKGlkID09IEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY2x1c3RlciBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgcHJlZml4ICVkIiwKLSAgICAgICAgICBsZW5ndGgsIG5lZWRlZCk7Ci0gICAgICAvKiBvayBpZiB1bmRlZmluZWQgbGVuZ3RoIG9yIGZpcnN0IGNsdXN0ZXIgKi8KLSAgICAgIGlmIChsZW5ndGggPT0gR19NQVhVSU5UNjQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjbHVzdGVyIGhhcyB1bmRlZmluZWQgbGVuZ3RoIC0+IE9LIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgLyogc2tpcCBjbHVzdGVyICovCi0gICAgICBwYXJzZS0+Y29tbW9uLm9mZnNldCArPSBsZW5ndGggKyBuZWVkZWQ7Ci0gICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVsbCAoJnBhcnNlLT5jb21tb24sCi0gICAgICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAocGFyc2UpLCAmaWQsICZsZW5ndGgsICZuZWVkZWQpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byByZXN1bWU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5leHQgZWxlbWVudCBpcyAlc2NsdXN0ZXIiLAotICAgICAgICAgIGlkID09IEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSID8gIiIgOiAibm90ICIpOwotICAgICAgaWYgKGlkID09IEdTVF9NQVRST1NLQV9JRF9DTFVTVEVSKQotICAgICAgICBicmVhazsKLSAgICAgIC8qIG5vdCBvaywgcmVzdW1lICovCi0gICAgICBnb3RvIHJlc3VtZTsKLSAgICB9IGVsc2UgewotICAgICAgLyogcGFydGlhbCBjbHVzdGVyIGlkIG1heSBoYXZlIGJlZW4gaW4gdGFpbCBvZiBidWZmZXIgKi8KLSAgICAgIG5ld3BvcyArPSBNQVggKHNpemUsIDQpIC0gMzsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgYnVmID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBpZiAoYnVmKSB7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGJ1ZiA9IE5VTEw7Ci0gIH0KLQotICBwYXJzZS0+Y29tbW9uLm9mZnNldCA9IG9yaWdfb2Zmc2V0OwotICAqcG9zID0gbmV3cG9zOwotICByZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX3BhcnNlX2hhbmRsZV9zZWVrX2V2ZW50IChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UsCi0gICAgR3N0UGFkICogcGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RNYXRyb3NrYUluZGV4ICplbnRyeSA9IE5VTEw7Ci0gIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgR3N0U2Vla1R5cGUgY3VyX3R5cGUsIHN0b3BfdHlwZTsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgZ2RvdWJsZSByYXRlOwotICBnaW50NjQgY3VyLCBzdG9wOwotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqdHJhY2sgPSBOVUxMOwotICBHc3RTZWdtZW50IHNlZWtzZWdtZW50ID0geyAwLCB9OwotICBnYm9vbGVhbiB1cGRhdGU7Ci0gIEdzdFNlYXJjaE1vZGUgc25hcF9kaXI7Ci0KLSAgaWYgKHBhZCkKLSAgICB0cmFjayA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLQotICB0cmFjayA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9nZXRfc2Vla190cmFjayAoJnBhcnNlLT5jb21tb24sIHRyYWNrKTsKLQotICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsICZjdXJfdHlwZSwgJmN1ciwKLSAgICAgICZzdG9wX3R5cGUsICZzdG9wKTsKLQotICAvKiB3ZSBjYW4gb25seSBzZWVrIG9uIHRpbWUgKi8KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkNhbiBvbmx5IHNlZWsgb24gVElNRSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIGNvcHkgc2VnbWVudCwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0aGUgb2xkCi0gICAqIHNlZ21lbnQgd2hlbiB3ZSBjbG9zZSB0aGUgY3VycmVudCBzZWdtZW50LiAqLwotICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJnBhcnNlLT5jb21tb24uc2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgaWYgKGV2ZW50KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjb25maWd1cmluZyBzZWVrIik7Ci0gICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAotICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJOZXcgc2VnbWVudCAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZzZWVrc2VnbWVudCk7Ci0KLSAgaWYgKHNlZWtzZWdtZW50LnJhdGUgPCAwKQotICAgIHNuYXBfZGlyID0gR1NUX1NFQVJDSF9NT0RFX0FGVEVSOwotICBlbHNlCi0gICAgc25hcF9kaXIgPSBHU1RfU0VBUkNIX01PREVfQkVGT1JFOwotCi0gIC8qIGNoZWNrIHNhbml0eSBiZWZvcmUgd2Ugc3RhcnQgZmx1c2hpbmcgYW5kIGFsbCB0aGF0ICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICBpZiAoKGVudHJ5ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2RvX2luZGV4X3NlZWsgKCZwYXJzZS0+Y29tbW9uLCB0cmFjaywKLSAgICAgICAgICAgICAgc2Vla3NlZ21lbnQucG9zaXRpb24sICZwYXJzZS0+c2Vla19pbmRleCwgJnBhcnNlLT5zZWVrX2VudHJ5LAotICAgICAgICAgICAgICBzbmFwX2RpcikpID09IE5VTEwpIHsKLSAgICAvKiBwdWxsIG1vZGUgd2l0aG91dCBpbmRleCBjYW4gc2NhbiBsYXRlciBvbiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiTm8gbWF0Y2hpbmcgc2VlayBlbnRyeSBpbiBpbmRleCIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiU2VlayBwb3NpdGlvbiBsb29rcyBzYW5lIik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0KLSAgLyogbmVlZCB0byBzZWVrIHRvIGNsdXN0ZXIgc3RhcnQgdG8gcGljayB1cCBjbHVzdGVyIHRpbWUgKi8KLSAgLyogdXBzdHJlYW0gdGFrZXMgY2FyZSBvZiBmbHVzaGluZyBhbmQgYWxsIHRoYXQKLSAgICogLi4uIGFuZCBuZXdzZWdtZW50IGV2ZW50IGhhbmRsaW5nIHRha2VzIGNhcmUgb2YgdGhlIHJlc3QgKi8KLSAgcmV0dXJuIHBlcmZvcm1fc2Vla190b19vZmZzZXQgKHBhcnNlLCBlbnRyeS0+cG9zCi0gICAgICArIHBhcnNlLT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0KTsKLX0KLQotLyoKLSAqIEhhbmRsZSB3aGV0aGVyIHdlIGNhbiBwZXJmb3JtIHRoZSBzZWVrIGV2ZW50IG9yIGlmIHdlIGhhdmUgdG8gbGV0IHRoZSBjaGFpbgotICogZnVuY3Rpb24gaGFuZGxlIHNlZWtzIHRvIGJ1aWxkIHRoZSBzZWVrIGluZGV4ZXMgZmlyc3QuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21hdHJvc2thX3BhcnNlX2hhbmRsZV9zZWVrX3B1c2ggKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwgR3N0UGFkICogcGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgR3N0U2Vla1R5cGUgY3VyX3R5cGUsIHN0b3BfdHlwZTsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgZ2RvdWJsZSByYXRlOwotICBnaW50NjQgY3VyLCBzdG9wOwotCi0gIGdzdF9ldmVudF9wYXJzZV9zZWVrIChldmVudCwgJnJhdGUsICZmb3JtYXQsICZmbGFncywgJmN1cl90eXBlLCAmY3VyLAotICAgICAgJnN0b3BfdHlwZSwgJnN0b3ApOwotCi0gIC8qIHNhbml0eSBjaGVja3MgKi8KLQotICAvKiB3ZSBjYW4gb25seSBzZWVrIG9uIHRpbWUgKi8KLSAgaWYgKGZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkNhbiBvbmx5IHNlZWsgb24gVElNRSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChzdG9wX3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FICYmIHN0b3AgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiU2VlayBlbmQtdGltZSBub3Qgc3VwcG9ydGVkIGluIHN0cmVhbWluZyBtb2RlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKCEoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAiTm9uLWZsdXNoaW5nIHNlZWsgbm90IHN1cHBvcnRlZCBpbiBzdHJlYW1pbmcgbW9kZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChmbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiU2VnbWVudCBzZWVrIG5vdCBzdXBwb3J0ZWQgaW4gc3RyZWFtaW5nIG1vZGUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBjaGVjayBmb3IgaGF2aW5nIHBhcnNlZCBpbmRleCBhbHJlYWR5ICovCi0gIGlmICghcGFyc2UtPmNvbW1vbi5pbmRleF9wYXJzZWQpIHsKLSAgICBnYm9vbGVhbiBidWlsZGluZ19pbmRleDsKLSAgICBndWludDY0IG9mZnNldCA9IDA7Ci0KLSAgICBpZiAoIXBhcnNlLT5pbmRleF9vZmZzZXQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAibm8gaW5kZXggKGxvY2F0aW9uKTsgbm8gc2VlayBpbiBwdXNoIG1vZGUiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBhcnNlKTsKLSAgICAvKiBoYW5kbGUgdGhlIHNlZWsgZXZlbnQgaW4gdGhlIGNoYWluIGZ1bmN0aW9uICovCi0gICAgcGFyc2UtPmNvbW1vbi5zdGF0ZSA9IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NFRUs7Ci0gICAgLyogbm8gbW9yZSBzZWVrIGNhbiBiZSBpc3N1ZWQgdW50aWwgc3RhdGUgcmVzZXQgdG8gX0RBVEEgKi8KLQotICAgIC8qIGNvcHkgdGhlIGV2ZW50ICovCi0gICAgaWYgKHBhcnNlLT5zZWVrX2V2ZW50KQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChwYXJzZS0+c2Vla19ldmVudCk7Ci0gICAgcGFyc2UtPnNlZWtfZXZlbnQgPSBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0KLSAgICAvKiBzZXQgdGhlIGJ1aWxkaW5nX2luZGV4IGZsYWcgc28gdGhhdCBvbmx5IG9uZSB0aHJlYWQgY2FuIHNldHVwIHRoZQotICAgICAqIHN0cnVjdHVyZXMgZm9yIGluZGV4IHNlZWtpbmcuICovCi0gICAgYnVpbGRpbmdfaW5kZXggPSBwYXJzZS0+YnVpbGRpbmdfaW5kZXg7Ci0gICAgaWYgKCFidWlsZGluZ19pbmRleCkgewotICAgICAgcGFyc2UtPmJ1aWxkaW5nX2luZGV4ID0gVFJVRTsKLSAgICAgIG9mZnNldCA9IHBhcnNlLT5pbmRleF9vZmZzZXQ7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0KLSAgICBpZiAoIWJ1aWxkaW5nX2luZGV4KSB7Ci0gICAgICAvKiBzZWVrIHRvIHRoZSBmaXJzdCBzdWJpbmRleCBvciBsZWdhY3kgaW5kZXggKi8KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJTZWVraW5nIHRvIEN1ZXMgYXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAgICAgIHJldHVybiBwZXJmb3JtX3NlZWtfdG9fb2Zmc2V0IChwYXJzZSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICAvKiB3ZWxsLCB3ZSBhcmUgaGFuZGxpbmcgaXQgYWxyZWFkeSAqLwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogZGVsZWdhdGUgdG8gdHdlYWtlZCByZWd1bGFyIHNlZWsgKi8KLSAgcmV0dXJuIGdzdF9tYXRyb3NrYV9wYXJzZV9oYW5kbGVfc2Vla19ldmVudCAocGFyc2UsIHBhZCwgZXZlbnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9wYXJzZV9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RNYXRyb3NrYVBhcnNlICpwYXJzZSA9IEdTVF9NQVRST1NLQV9QQVJTRSAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgLyogbm8gc2Vla2luZyB1bnRpbCB3ZSBhcmUgKHNhZmVseSkgcmVhZHkgKi8KLSAgICAgIGlmIChwYXJzZS0+Y29tbW9uLnN0YXRlICE9IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEEpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJub3QgcmVhZHkgZm9yIHNlZWtpbmcgeWV0Iik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICAgIHJlcyA9IGdzdF9tYXRyb3NrYV9wYXJzZV9oYW5kbGVfc2Vla19wdXNoIChwYXJzZSwgcGFkLCBldmVudCk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfRVZFTlRfUU9TOgotICAgIHsKLSAgICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0ID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICAgICAgaWYgKGNvbnRleHQtPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfVklERU8pIHsKLSAgICAgICAgR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqdmlkZW9jb250ZXh0ID0KLSAgICAgICAgICAgIChHc3RNYXRyb3NrYVRyYWNrVmlkZW9Db250ZXh0ICopIGNvbnRleHQ7Ci0gICAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotICAgICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotCi0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9xb3MgKGV2ZW50LCBOVUxMLCAmcHJvcG9ydGlvbiwgJmRpZmYsICZ0aW1lc3RhbXApOwotCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgICAgICB2aWRlb2NvbnRleHQtPmVhcmxpZXN0X3RpbWUgPSB0aW1lc3RhbXAgKyBkaWZmOwotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOwotICAgICAgfQotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgICAvKiBldmVudHMgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgKi8KLSAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfRVZFTlRfTEFURU5DWToKLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwYXJzZS0+Y29tbW9uLnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9wYXJzZV9wYXJzZV90cmFja3MgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwgR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDMyIGlkOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKHBhcnNlLCBlYm1sLCAiVHJhY2tzIik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKHBhcnNlLCBlYm1sLCAiVHJhY2tzIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICAvKiBvbmUgdHJhY2sgd2l0aGluIHRoZSAiYWxsLXRyYWNrcyIgaGVhZGVyICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS0VOVFJZOgotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcGFyc2VfYWRkX3N0cmVhbSAocGFyc2UsIGVibWwpOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKCZwYXJzZS0+Y29tbW9uLCBlYm1sLAotICAgICAgICAgICAgIlRyYWNrIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChwYXJzZSwgZWJtbCwgIlRyYWNrcyIsIHJldCk7Ci0KLSAgcGFyc2UtPnRyYWNrc19wYXJzZWQgPSBUUlVFOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBSZWFkIHNpZ25lZC91bnNpZ25lZCAiRUJNTCIgbnVtYmVycy4KLSAqIFJldHVybjogbnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZC4KLSAqLwotCi1zdGF0aWMgZ2ludAotZ3N0X21hdHJvc2thX2VibWxudW1fdWludCAoZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwgZ3VpbnQ2NCAqIG51bSkKLXsKLSAgZ2ludCBsZW5fbWFzayA9IDB4ODAsIHJlYWQgPSAxLCBuID0gMSwgbnVtX2ZmcyA9IDA7Ci0gIGd1aW50NjQgdG90YWw7Ci0KLSAgaWYgKHNpemUgPD0gMCkgewotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIHRvdGFsID0gZGF0YVswXTsKLSAgd2hpbGUgKHJlYWQgPD0gOCAmJiAhKHRvdGFsICYgbGVuX21hc2spKSB7Ci0gICAgcmVhZCsrOwotICAgIGxlbl9tYXNrID4+PSAxOwotICB9Ci0gIGlmIChyZWFkID4gOCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgaWYgKCh0b3RhbCAmPSAobGVuX21hc2sgLSAxKSkgPT0gbGVuX21hc2sgLSAxKQotICAgIG51bV9mZnMrKzsKLSAgaWYgKHNpemUgPCByZWFkKQotICAgIHJldHVybiAtMTsKLSAgd2hpbGUgKG4gPCByZWFkKSB7Ci0gICAgaWYgKGRhdGFbbl0gPT0gMHhmZikKLSAgICAgIG51bV9mZnMrKzsKLSAgICB0b3RhbCA9ICh0b3RhbCA8PCA4KSB8IGRhdGFbbl07Ci0gICAgbisrOwotICB9Ci0KLSAgaWYgKHJlYWQgPT0gbnVtX2ZmcyAmJiB0b3RhbCAhPSAwKQotICAgICpudW0gPSBHX01BWFVJTlQ2NDsKLSAgZWxzZQotICAgICpudW0gPSB0b3RhbDsKLQotICByZXR1cm4gcmVhZDsKLX0KLQotc3RhdGljIGdpbnQKLWdzdF9tYXRyb3NrYV9lYm1sbnVtX3NpbnQgKGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsIGdpbnQ2NCAqIG51bSkKLXsKLSAgZ3VpbnQ2NCB1bnVtOwotICBnaW50IHJlczsKLQotICAvKiByZWFkIGFzIHVuc2lnbmVkIG51bWJlciBmaXJzdCAqLwotICBpZiAoKHJlcyA9IGdzdF9tYXRyb3NrYV9lYm1sbnVtX3VpbnQgKGRhdGEsIHNpemUsICZ1bnVtKSkgPCAwKQotICAgIHJldHVybiAtMTsKLQotICAvKiBtYWtlIHNpZ25lZCAqLwotICBpZiAodW51bSA9PSBHX01BWFVJTlQ2NCkKLSAgICAqbnVtID0gR19NQVhJTlQ2NDsKLSAgZWxzZQotICAgICpudW0gPSB1bnVtIC0gKCgxIDw8ICgoNyAqIHJlcykgLSAxKSkgLSAxKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3BhcnNlX3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2sgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RFYm1sUmVhZCAqIGVibWwsIGd1aW50NjQgY2x1c3Rlcl90aW1lLCBndWludDY0IGNsdXN0ZXJfb2Zmc2V0LAotICAgIGdib29sZWFuIGlzX3NpbXBsZWJsb2NrKQotewotICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gcmVhZGJsb2NrID0gRkFMU0U7Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgYmxvY2tfZHVyYXRpb24gPSAwOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnaW50IHN0cmVhbV9udW0gPSAtMSwgbiwgbGFjZXMgPSAwOwotICBndWludCBzaXplID0gMDsKLSAgZ2ludCAqbGFjZV9zaXplID0gTlVMTDsKLSAgZ2ludDY0IHRpbWUgPSAwOwotICBnaW50IGZsYWdzID0gMDsKLSAgZ2ludDY0IHJlZmVyZW5jZWJsb2NrID0gMDsKLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoIWlzX3NpbXBsZWJsb2NrKSB7Ci0gICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWQgPSBHU1RfTUFUUk9TS0FfSURfU0lNUExFQkxPQ0s7Ci0gICAgfQotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICAvKiBvbmUgYmxvY2sgaW5zaWRlIHRoZSBncm91cC4gTm90ZSwgYmxvY2sgcGFyc2luZyBpcyBvbmUKLSAgICAgICAgICogb2YgdGhlIGhhcmRlciB0aGluZ3MsIHNvIHRoaXMgY29kZSBpcyBhIGJpdCBjb21wbGljYXRlZC4KLSAgICAgICAgICogU2VlIGh0dHA6Ly93d3cubWF0cm9za2Eub3JnLyBmb3IgZG9jdW1lbnRhdGlvbi4gKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NJTVBMRUJMT0NLOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQkxPQ0s6Ci0gICAgICB7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotICAgICAgICBndWludDggKmRhdGE7Ci0KLSAgICAgICAgaWYgKGJ1ZikgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgYnVmID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfYnVmZmVyIChlYm1sLCAmaWQsICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgICAgIHNpemUgPSBtYXAuc2l6ZTsKLQotICAgICAgICAvKiBmaXJzdCBieXRlKHMpOiBibG9ja251bSAqLwotICAgICAgICBpZiAoKG4gPSBnc3RfbWF0cm9za2FfZWJtbG51bV91aW50IChkYXRhLCBzaXplLCAmbnVtKSkgPCAwKQotICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgZGF0YSArPSBuOwotICAgICAgICBzaXplIC09IG47Ci0KLSAgICAgICAgLyogZmV0Y2ggc3RyZWFtIGZyb20gbnVtICovCi0gICAgICAgIHN0cmVhbV9udW0gPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fc3RyZWFtX2Zyb21fbnVtICgmcGFyc2UtPmNvbW1vbiwKLSAgICAgICAgICAgIG51bSk7Ci0gICAgICAgIGlmIChHX1VOTElLRUxZIChzaXplIDwgMykpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW52YWxpZCBzaXplICV1Iiwgc2l6ZSk7Ci0gICAgICAgICAgLyogbm9uLWZhdGFsLCB0cnkgbmV4dCBibG9jayhncm91cCkgKi8KLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoc3RyZWFtX251bSA8IDAgfHwKLSAgICAgICAgICAgICAgICBzdHJlYW1fbnVtID49IHBhcnNlLT5jb21tb24ubnVtX3N0cmVhbXMpKSB7Ci0gICAgICAgICAgLyogbGV0J3Mgbm90IGdpdmUgdXAgb24gYSBzdHJheSBpbnZhbGlkIHRyYWNrIG51bWJlciAqLwotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAgICJJbnZhbGlkIHN0cmVhbSAlZCBmb3IgdHJhY2sgbnVtYmVyICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAgICAgIjsgaWdub3JpbmcgYmxvY2siLCBzdHJlYW1fbnVtLCBudW0pOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmVhbSA9IGdfcHRyX2FycmF5X2luZGV4IChwYXJzZS0+Y29tbW9uLnNyYywgc3RyZWFtX251bSk7Ci0KLSAgICAgICAgLyogdGltZSAocmVsYXRpdmUgdG8gY2x1c3RlciB0aW1lKSAqLwotICAgICAgICB0aW1lID0gKChnaW50MTYpIEdTVF9SRUFEX1VJTlQxNl9CRSAoZGF0YSkpOwotICAgICAgICBkYXRhICs9IDI7Ci0gICAgICAgIHNpemUgLT0gMjsKLSAgICAgICAgZmxhZ3MgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSk7Ci0gICAgICAgIGRhdGEgKz0gMTsKLSAgICAgICAgc2l6ZSAtPSAxOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInRpbWUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBmbGFncyAlZCIsIHRpbWUsCi0gICAgICAgICAgICBmbGFncyk7Ci0KLSAgICAgICAgc3dpdGNoICgoZmxhZ3MgJiAweDA2KSA+PiAxKSB7Ci0gICAgICAgICAgY2FzZSAweDA6ICAgICAgICAgICAgLyogbm8gbGFjaW5nICovCi0gICAgICAgICAgICBsYWNlcyA9IDE7Ci0gICAgICAgICAgICBsYWNlX3NpemUgPSBnX25ldyAoZ2ludCwgMSk7Ci0gICAgICAgICAgICBsYWNlX3NpemVbMF0gPSBzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIDB4MTogICAgICAgICAgICAvKiB4aXBoIGxhY2luZyAqLwotICAgICAgICAgIGNhc2UgMHgyOiAgICAgICAgICAgIC8qIGZpeGVkLXNpemUgbGFjaW5nICovCi0gICAgICAgICAgY2FzZSAweDM6ICAgICAgICAgICAgLyogRUJNTCBsYWNpbmcgKi8KLSAgICAgICAgICAgIGlmIChzaXplID09IDApCi0gICAgICAgICAgICAgIGdvdG8gaW52YWxpZF9sYWNpbmc7Ci0gICAgICAgICAgICBsYWNlcyA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhKSArIDE7Ci0gICAgICAgICAgICBkYXRhICs9IDE7Ci0gICAgICAgICAgICBzaXplIC09IDE7Ci0gICAgICAgICAgICBsYWNlX3NpemUgPSBnX25ldzAgKGdpbnQsIGxhY2VzKTsKLQotICAgICAgICAgICAgc3dpdGNoICgoZmxhZ3MgJiAweDA2KSA+PiAxKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMHgxOiAgICAgICAgLyogeGlwaCBsYWNpbmcgKi8gIHsKLSAgICAgICAgICAgICAgICBndWludCB0ZW1wLCB0b3RhbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyByZXQgPT0gR1NUX0ZMT1dfT0sgJiYgbiA8IGxhY2VzIC0gMTsgbisrKSB7Ci0gICAgICAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZF9sYWNpbmc7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBHU1RfUkVBRF9VSU5UOCAoZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGxhY2Vfc2l6ZVtuXSArPSB0ZW1wOwotICAgICAgICAgICAgICAgICAgICBkYXRhICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgLT0gMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgIT0gMHhmZikKLSAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHRvdGFsICs9IGxhY2Vfc2l6ZVtuXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFjZV9zaXplW25dID0gc2l6ZSAtIHRvdGFsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgY2FzZSAweDI6ICAgICAgICAvKiBmaXhlZC1zaXplIGxhY2luZyAqLwotICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBsYWNlczsgbisrKQotICAgICAgICAgICAgICAgICAgbGFjZV9zaXplW25dID0gc2l6ZSAvIGxhY2VzOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgMHgzOiAgICAgICAgLyogRUJNTCBsYWNpbmcgKi8gIHsKLSAgICAgICAgICAgICAgICBndWludCB0b3RhbDsKLQotICAgICAgICAgICAgICAgIGlmICgobiA9IGdzdF9tYXRyb3NrYV9lYm1sbnVtX3VpbnQgKGRhdGEsIHNpemUsICZudW0pKSA8IDApCi0gICAgICAgICAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Ci0gICAgICAgICAgICAgICAgZGF0YSArPSBuOwotICAgICAgICAgICAgICAgIHNpemUgLT0gbjsKLSAgICAgICAgICAgICAgICB0b3RhbCA9IGxhY2Vfc2l6ZVswXSA9IG51bTsKLSAgICAgICAgICAgICAgICBmb3IgKG4gPSAxOyByZXQgPT0gR1NUX0ZMT1dfT0sgJiYgbiA8IGxhY2VzIC0gMTsgbisrKSB7Ci0gICAgICAgICAgICAgICAgICBnaW50NjQgc251bTsKLSAgICAgICAgICAgICAgICAgIGdpbnQgcjsKLQotICAgICAgICAgICAgICAgICAgaWYgKChyID0gZ3N0X21hdHJvc2thX2VibWxudW1fc2ludCAoZGF0YSwgc2l6ZSwgJnNudW0pKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKLSAgICAgICAgICAgICAgICAgIGRhdGEgKz0gcjsKLSAgICAgICAgICAgICAgICAgIHNpemUgLT0gcjsKLSAgICAgICAgICAgICAgICAgIGxhY2Vfc2l6ZVtuXSA9IGxhY2Vfc2l6ZVtuIC0gMV0gKyBzbnVtOwotICAgICAgICAgICAgICAgICAgdG90YWwgKz0gbGFjZV9zaXplW25dOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobiA8IGxhY2VzKQotICAgICAgICAgICAgICAgICAgbGFjZV9zaXplW25dID0gc2l6ZSAtIHRvdGFsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmVhZGJsb2NrID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0JMT0NLRFVSQVRJT046ewotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJmJsb2NrX2R1cmF0aW9uKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJCbG9ja0R1cmF0aW9uOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgYmxvY2tfZHVyYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfUkVGRVJFTkNFQkxPQ0s6ewotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NpbnQgKGVibWwsICZpZCwgJnJlZmVyZW5jZWJsb2NrKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJSZWZlcmVuY2VCbG9jazogJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgICAgICAgcmVmZXJlbmNlYmxvY2spOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09ERUNTVEFURTp7Ci0gICAgICAgIGd1aW50OCAqZGF0YTsKLSAgICAgICAgZ3VpbnQ2NCBkYXRhX2xlbiA9IDA7Ci0KLSAgICAgICAgaWYgKChyZXQgPQotICAgICAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfYmluYXJ5IChlYm1sLCAmaWQsICZkYXRhLAotICAgICAgICAgICAgICAgICAgICAmZGF0YV9sZW4pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoR19VTkxJS0VMWSAoc3RyZWFtID09IE5VTEwpKSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgQ29kZWNTdGF0ZSBzdWJlbGVtZW50IC0gaWdub3JpbmciKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGdfZnJlZSAoc3RyZWFtLT5jb2RlY19zdGF0ZSk7Ci0gICAgICAgIHN0cmVhbS0+Y29kZWNfc3RhdGUgPSBkYXRhOwotICAgICAgICBzdHJlYW0tPmNvZGVjX3N0YXRlX3NpemUgPSBkYXRhX2xlbjsKLQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKCZwYXJzZS0+Y29tbW9uLCBlYm1sLAotICAgICAgICAgICAgIkJsb2NrR3JvdXAiLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9CTE9DS1ZJUlRVQUw6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9CTE9DS0FERElUSU9OUzoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1JFRkVSRU5DRVBSSU9SSVRZOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfUkVGRVJFTkNFVklSVFVBTDoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NMSUNFUzoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAiU2tpcHBpbmcgQmxvY2tHcm91cCBzdWJlbGVtZW50IDB4JXggLSBpZ25vcmluZyIsIGlkKTsKLSAgICAgICAgcmV0ID0gZ3N0X2VibWxfcmVhZF9za2lwIChlYm1sKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGlzX3NpbXBsZWJsb2NrKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiByZWFkaW5nIGEgbnVtYmVyIG9yIHNvIGNvdWxkIGhhdmUgZmFpbGVkICovCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBkYXRhX2Vycm9yOwotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgcmVhZGJsb2NrKSB7Ci0gICAgZ3VpbnQ2NCBkdXJhdGlvbiA9IDA7Ci0gICAgZ2ludDY0IGxhY2VfdGltZSA9IDA7Ci0gICAgZ2Jvb2xlYW4gZGVsdGFfdW5pdDsKLQotICAgIHN0cmVhbSA9IGdfcHRyX2FycmF5X2luZGV4IChwYXJzZS0+Y29tbW9uLnNyYywgc3RyZWFtX251bSk7Ci0KLSAgICBpZiAoY2x1c3Rlcl90aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIC8qIEZJWE1FOiBXaGF0IHRvIGRvIHdpdGggbmVnYXRpdmUgdGltZXN0YW1wcz8gR2l2ZSB0aW1lc3RhbXAgMCBvciAtMT8KLSAgICAgICAqIERyb3AgdW5sZXNzIHRoZSBsYWNlIGNvbnRhaW5zIHRpbWVzdGFtcCAwPyAqLwotICAgICAgaWYgKHRpbWUgPCAwICYmICgtdGltZSkgPiBjbHVzdGVyX3RpbWUpIHsKLSAgICAgICAgbGFjZV90aW1lID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdHJlYW0tPnRpbWVjb2Rlc2NhbGUgPT0gMS4wKQotICAgICAgICAgIGxhY2VfdGltZSA9IChjbHVzdGVyX3RpbWUgKyB0aW1lKSAqIHBhcnNlLT5jb21tb24udGltZV9zY2FsZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGxhY2VfdGltZSA9Ci0gICAgICAgICAgICAgIGdzdF91dGlsX2d1aW50NjRfdG9fZ2RvdWJsZSAoKGNsdXN0ZXJfdGltZSArIHRpbWUpICoKLSAgICAgICAgICAgICAgcGFyc2UtPmNvbW1vbi50aW1lX3NjYWxlKSAqIHN0cmVhbS0+dGltZWNvZGVzY2FsZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgbGFjZV90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICB9Ci0KLSAgICBpZiAobGFjZV90aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIHBhcnNlLT5sYXN0X3RpbWVzdGFtcCA9IGxhY2VfdGltZTsKLSAgICB9Ci0gICAgLyogbmVlZCB0byByZWZyZXNoIHNlZ21lbnQgaW5mbyBBU0FQICovCi0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChsYWNlX3RpbWUpICYmIHBhcnNlLT5uZWVkX25ld3NlZ21lbnQpIHsKLSAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICJnZW5lcmF0aW5nIHNlZ21lbnQgc3RhcnRpbmcgYXQgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGxhY2VfdGltZSkpOwotICAgICAgLyogcHJldGVuZCB3ZSBzZWVrZWQgaGVyZSAqLwotICAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnBhcnNlLT5jb21tb24uc2VnbWVudCwgcGFyc2UtPmNvbW1vbi5zZWdtZW50LnJhdGUsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCAwLCBHU1RfU0VFS19UWVBFX1NFVCwgbGFjZV90aW1lLAotICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBHU1RfQ0xPQ0tfVElNRV9OT05FLCBOVUxMKTsKLSAgICAgIC8qIG5vdyBjb252ZXkgb3VyIHNlZ21lbnQgbm90aW9uIGRvd25zdHJlYW0gKi8KLSAgICAgIHNlZ21lbnQgPSBwYXJzZS0+Y29tbW9uLnNlZ21lbnQ7Ci0gICAgICBzZWdtZW50LnBvc2l0aW9uID0gc2VnbWVudC5zdGFydDsKLSAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9zZW5kX2V2ZW50IChwYXJzZSwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICAgICAgcGFyc2UtPm5lZWRfbmV3c2VnbWVudCA9IEZBTFNFOwotICAgIH0KLQotICAgIGlmIChibG9ja19kdXJhdGlvbikgewotICAgICAgaWYgKHN0cmVhbS0+dGltZWNvZGVzY2FsZSA9PSAxLjApCi0gICAgICAgIGR1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChibG9ja19kdXJhdGlvbiwKLSAgICAgICAgICAgIHBhcnNlLT5jb21tb24udGltZV9zY2FsZSwgMSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGR1cmF0aW9uID0KLSAgICAgICAgICAgIGdzdF91dGlsX2dkb3VibGVfdG9fZ3VpbnQ2NCAoZ3N0X3V0aWxfZ3VpbnQ2NF90b19nZG91YmxlCi0gICAgICAgICAgICAoZ3N0X3V0aWxfdWludDY0X3NjYWxlIChibG9ja19kdXJhdGlvbiwgcGFyc2UtPmNvbW1vbi50aW1lX3NjYWxlLAotICAgICAgICAgICAgICAgICAgICAxKSkgKiBzdHJlYW0tPnRpbWVjb2Rlc2NhbGUpOwotICAgIH0gZWxzZSBpZiAoc3RyZWFtLT5kZWZhdWx0X2R1cmF0aW9uKSB7Ci0gICAgICBkdXJhdGlvbiA9IHN0cmVhbS0+ZGVmYXVsdF9kdXJhdGlvbiAqIGxhY2VzOwotICAgIH0KLSAgICAvKiBlbHNlIGR1cmF0aW9uIGlzIGRpZmYgYmV0d2VlbiB0aW1lY29kZSBvZiB0aGlzIGFuZCBuZXh0IGJsb2NrICovCi0KLSAgICAvKiBGb3IgU2ltcGxlQmxvY2ssIGxvb2sgYXQgdGhlIGtleWZyYW1lIGJpdCBpbiBmbGFncy4gT3RoZXJ3aXNlLAotICAgICAgIGEgUmVmZXJlbmNlQmxvY2sgaW1wbGllcyB0aGF0IHRoaXMgaXMgbm90IGEga2V5ZnJhbWUuIEluIGVpdGhlcgotICAgICAgIGNhc2UsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHZpZGVvIHN0cmVhbXMuICovCi0gICAgZGVsdGFfdW5pdCA9IHN0cmVhbS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTyAmJgotICAgICAgICAoKGlzX3NpbXBsZWJsb2NrICYmICEoZmxhZ3MgJiAweDgwKSkgfHwgcmVmZXJlbmNlYmxvY2spOwotCi0gICAgaWYgKGRlbHRhX3VuaXQgJiYgc3RyZWFtLT5zZXRfZGlzY29udCkgewotICAgICAgLyogV2hlbiBkb2luZyBzZWVrcyBvciBzdWNoLCB3ZSBuZWVkIHRvIHJlc3RhcnQgb24ga2V5IGZyYW1lcyBvcgotICAgICAgICogZGVjb2RlcnMgbWlnaHQgY2hva2UuICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNraXBwaW5nIGRlbHRhIHVuaXQiKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBmb3IgKG4gPSAwOyBuIDwgbGFjZXM7IG4rKykgewotICAgICAgaWYgKEdfVU5MSUtFTFkgKGxhY2Vfc2l6ZVtuXSA+IHNpemUpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJJbnZhbGlkIGxhY2Ugc2l6ZSIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogUW9TIGZvciB2aWRlbyB0cmFjayB3aXRoIGFuIGluZGV4LiB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0Ci0gICAgICAgICBpbmRleCBlbnRyaWVzIHBvaW50IHRvIGtleWZyYW1lcywgYnV0IGlmIHRoYXQgaXMgbm90IHRydWUgd2UKLSAgICAgICAgIHdpbGwgaW5zdGFkIHNraXAgdW50aWwgdGhlIG5leHQga2V5ZnJhbWUuICovCi0gICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGxhY2VfdGltZSkgJiYKLSAgICAgICAgICBzdHJlYW0tPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfVklERU8gJiYKLSAgICAgICAgICBzdHJlYW0tPmluZGV4X3RhYmxlICYmIHBhcnNlLT5jb21tb24uc2VnbWVudC5yYXRlID4gMC4wKSB7Ci0gICAgICAgIEdzdE1hdHJvc2thVHJhY2tWaWRlb0NvbnRleHQgKnZpZGVvY29udGV4dCA9Ci0gICAgICAgICAgICAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqKSBzdHJlYW07Ci0gICAgICAgIEdzdENsb2NrVGltZSBlYXJsaWVzdF90aW1lOwotICAgICAgICBHc3RDbG9ja1RpbWUgZWFybGllc3Rfc3RyZWFtX3RpbWU7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgICAgIGVhcmxpZXN0X3RpbWUgPSB2aWRlb2NvbnRleHQtPmVhcmxpZXN0X3RpbWU7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gICAgICAgIGVhcmxpZXN0X3N0cmVhbV90aW1lID0KLSAgICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lICgmcGFyc2UtPmNvbW1vbi5zZWdtZW50LAotICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBlYXJsaWVzdF90aW1lKTsKLQotICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGxhY2VfdGltZSkgJiYKLSAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChlYXJsaWVzdF9zdHJlYW1fdGltZSkgJiYKLSAgICAgICAgICAgIGxhY2VfdGltZSA8PSBlYXJsaWVzdF9zdHJlYW1fdGltZSkgewotICAgICAgICAgIC8qIGZpbmQgaW5kZXggZW50cnkgKGtleWZyYW1lKSA8PSBlYXJsaWVzdF9zdHJlYW1fdGltZSAqLwotICAgICAgICAgIEdzdE1hdHJvc2thSW5kZXggKmVudHJ5ID0KLSAgICAgICAgICAgICAgZ3N0X3V0aWxfYXJyYXlfYmluYXJ5X3NlYXJjaCAoc3RyZWFtLT5pbmRleF90YWJsZS0+ZGF0YSwKLSAgICAgICAgICAgICAgc3RyZWFtLT5pbmRleF90YWJsZS0+bGVuLCBzaXplb2YgKEdzdE1hdHJvc2thSW5kZXgpLAotICAgICAgICAgICAgICAoR0NvbXBhcmVEYXRhRnVuYykgZ3N0X21hdHJvc2thX2luZGV4X3NlZWtfZmluZCwKLSAgICAgICAgICAgICAgR1NUX1NFQVJDSF9NT0RFX0JFRk9SRSwgJmVhcmxpZXN0X3N0cmVhbV90aW1lLCBOVUxMKTsKLQotICAgICAgICAgIC8qIGlmIHRoYXQgZW50cnkgKGtleWZyYW1lKSBpcyBhZnRlciB0aGUgY3VycmVudCB0aGUgY3VycmVudAotICAgICAgICAgICAgIGJ1ZmZlciwgd2UgY2FuIHNraXAgcHVzaGluZyAoYW5kIHRodXMgZGVjb2RpbmcpIGFsbAotICAgICAgICAgICAgIGJ1ZmZlcnMgdW50aWwgdGhhdCBrZXlmcmFtZS4gKi8KLSAgICAgICAgICBpZiAoZW50cnkgJiYgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGVudHJ5LT50aW1lKSAmJgotICAgICAgICAgICAgICBlbnRyeS0+dGltZSA+IGxhY2VfdGltZSkgewotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiU2tpcHBpbmcgbGFjZSBiZWZvcmUgbGF0ZSBrZXlmcmFtZSIpOwotICAgICAgICAgICAgc3RyZWFtLT5zZXRfZGlzY29udCA9IFRSVUU7Ci0gICAgICAgICAgICBnb3RvIG5leHRfbGFjZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSNpZiAwCi0gICAgICBzdWIgPSBnc3RfYnVmZmVyX2NyZWF0ZV9zdWIgKGJ1ZiwKLSAgICAgICAgICBHU1RfQlVGRkVSX1NJWkUgKGJ1ZikgLSBzaXplLCBsYWNlX3NpemVbbl0pOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJjcmVhdGVkIHN1YmJ1ZmZlciAlcCIsIHN1Yik7Ci0KLSAgICAgIGlmIChkZWx0YV91bml0KQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChzdWIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChzdWIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLQotICAgICAgaWYgKHN0cmVhbS0+ZW5jb2RpbmdzICE9IE5VTEwgJiYgc3RyZWFtLT5lbmNvZGluZ3MtPmxlbiA+IDApCi0gICAgICAgIHN1YiA9IGdzdF9tYXRyb3NrYV9kZWNvZGVfYnVmZmVyIChzdHJlYW0sIHN1Yik7Ci0KLSAgICAgIGlmIChzdWIgPT0gTlVMTCkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiRGVjb2RpbmcgYnVmZmVyIGZhaWxlZCIpOwotICAgICAgICBnb3RvIG5leHRfbGFjZTsKLSAgICAgIH0KLQotICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKHN1YikgPSBsYWNlX3RpbWU7Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobGFjZV90aW1lKSkgewotICAgICAgICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wX2VuZDsKLQotICAgICAgICAvKiBDaGVjayBpZiB0aGlzIHN0cmVhbSBpcyBhZnRlciBzZWdtZW50IHN0b3AgKi8KLSAgICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+Y29tbW9uLnNlZ21lbnQuc3RvcCkgJiYKLSAgICAgICAgICAgIGxhY2VfdGltZSA+PSBwYXJzZS0+Y29tbW9uLnNlZ21lbnQuc3RvcCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAiU3RyZWFtICVkIGFmdGVyIHNlZ21lbnQgc3RvcCAlIiBHU1RfVElNRV9GT1JNQVQsIHN0cmVhbS0+aW5kZXgsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5jb21tb24uc2VnbWVudC5zdG9wKSk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3ViKTsKLSAgICAgICAgICBnb3RvIGVvczsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0ID49IHN0cmVhbS0+dG9fb2Zmc2V0KSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJTdHJlYW0gJWQgYWZ0ZXIgcGxheWJhY2sgc2VjdGlvbiIsCi0gICAgICAgICAgICAgIHN0cmVhbS0+aW5kZXgpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHN1Yik7Ci0gICAgICAgICAgZ290byBlb3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBoYW5kbGUgZ2FwcywgZS5nLiBub24temVybyBzdGFydC10aW1lLCBvciBhbiBjdWUgaW5kZXggZW50cnkKLSAgICAgICAgICogdGhhdCBsYW5kZWQgdXMgd2l0aCB0aW1lc3RhbXBzIG5vdCBxdWl0ZSBpbnRlbmRlZCAqLwotICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50Lmxhc3Rfc3RvcCkgJiYKLSAgICAgICAgICAgIHBhcnNlLT5zZWdtZW50LnJhdGUgPiAwLjApIHsKLSAgICAgICAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmY7Ci0KLSAgICAgICAgICAvKiBvbmx5IHNlbmQgbmV3c2VnbWVudHMgd2l0aCBpbmNyZWFzaW5nIHN0YXJ0IHRpbWVzLAotICAgICAgICAgICAqIG90aGVyd2lzZSBpZiB0aGVzZSBnbyBiYWNrIGFuZCBmb3J0aCBkb3duc3RyZWFtIChzaW5rcykgaW5jcmVhc2UKLSAgICAgICAgICAgKiBhY2N1bXVsYXRlZCB0aW1lIGFuZCBydW5uaW5nX3RpbWUgKi8KLSAgICAgICAgICBkaWZmID0gR1NUX0NMT0NLX0RJRkYgKHBhcnNlLT5zZWdtZW50Lmxhc3Rfc3RvcCwgbGFjZV90aW1lKTsKLSAgICAgICAgICBpZiAoZGlmZiA+IDIgKiBHU1RfU0VDT05EICYmIGxhY2VfdGltZSA+IHBhcnNlLT5zZWdtZW50LnN0YXJ0ICYmCi0gICAgICAgICAgICAgICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50LnN0b3ApIHx8Ci0gICAgICAgICAgICAgICAgICBsYWNlX3RpbWUgPCBwYXJzZS0+c2VnbWVudC5zdG9wKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgICAgICAgIkdhcCBvZiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBucyBkZXRlY3RlZCBpbiIKLSAgICAgICAgICAgICAgICAic3RyZWFtICVkICglIiBHU1RfVElNRV9GT1JNQVQgIiAtPiAlIiBHU1RfVElNRV9GT1JNQVQgIikuICIKLSAgICAgICAgICAgICAgICAiU2VuZGluZyB1cGRhdGVkIE5FV1NFR01FTlQgZXZlbnRzIiwgZGlmZiwKLSAgICAgICAgICAgICAgICBzdHJlYW0tPmluZGV4LCBHU1RfVElNRV9BUkdTIChzdHJlYW0tPnBvcyksCi0gICAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAobGFjZV90aW1lKSk7Ci0gICAgICAgICAgICAvKiBzZW5kIG5ld3NlZ21lbnQgZXZlbnRzIHN1Y2ggdGhhdCB0aGUgZ2FwIGlzIG5vdCBhY2NvdW50ZWQgaW4KLSAgICAgICAgICAgICAqIGFjY3VtIHRpbWUsIGhlbmNlIHJ1bm5pbmdfdGltZSAqLwotICAgICAgICAgICAgLyogY2xvc2UgYWhlYWQgb2YgZ2FwICovCi0gICAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfc2VuZF9ldmVudCAocGFyc2UsCi0gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudCAoVFJVRSwgcGFyc2UtPnNlZ21lbnQucmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgcGFyc2UtPnNlZ21lbnQuZm9ybWF0LCBwYXJzZS0+c2VnbWVudC5sYXN0X3N0b3AsCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlLT5zZWdtZW50Lmxhc3Rfc3RvcCwgcGFyc2UtPnNlZ21lbnQubGFzdF9zdG9wKSk7Ci0gICAgICAgICAgICAvKiBza2lwIGdhcCAqLwotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX3NlbmRfZXZlbnQgKHBhcnNlLAotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfbmV3X3NlZ21lbnQgKEZBTFNFLCBwYXJzZS0+c2VnbWVudC5yYXRlLAotICAgICAgICAgICAgICAgICAgICBwYXJzZS0+c2VnbWVudC5mb3JtYXQsIGxhY2VfdGltZSwgcGFyc2UtPnNlZ21lbnQuc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgbGFjZV90aW1lKSk7Ci0gICAgICAgICAgICAvKiBhbGlnbiBzZWdtZW50IHZpZXcgd2l0aCBkb3duc3RyZWFtLAotICAgICAgICAgICAgICogcHJldmVudHMgZG91YmxlLWNvdW50aW5nIGFjY3VtIHdoZW4gY2xvc2luZyBzZWdtZW50ICovCi0gICAgICAgICAgICBnc3Rfc2VnbWVudF9zZXRfbmV3c2VnbWVudCAoJnBhcnNlLT5zZWdtZW50LCBGQUxTRSwKLSAgICAgICAgICAgICAgICBwYXJzZS0+c2VnbWVudC5yYXRlLCBwYXJzZS0+c2VnbWVudC5mb3JtYXQsIGxhY2VfdGltZSwKLSAgICAgICAgICAgICAgICBwYXJzZS0+c2VnbWVudC5zdG9wLCBsYWNlX3RpbWUpOwotICAgICAgICAgICAgcGFyc2UtPnNlZ21lbnQubGFzdF9zdG9wID0gbGFjZV90aW1lOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5zZWdtZW50Lmxhc3Rfc3RvcCkKLSAgICAgICAgICAgIHx8IHBhcnNlLT5zZWdtZW50Lmxhc3Rfc3RvcCA8IGxhY2VfdGltZSkgewotICAgICAgICAgIHBhcnNlLT5zZWdtZW50Lmxhc3Rfc3RvcCA9IGxhY2VfdGltZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxhc3Rfc3RvcF9lbmQgPSBsYWNlX3RpbWU7Ci0gICAgICAgIGlmIChkdXJhdGlvbikgewotICAgICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKHN1YikgPSBkdXJhdGlvbiAvIGxhY2VzOwotICAgICAgICAgIGxhc3Rfc3RvcF9lbmQgKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoc3ViKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHBhcnNlLT5sYXN0X3N0b3BfZW5kKSB8fAotICAgICAgICAgICAgcGFyc2UtPmxhc3Rfc3RvcF9lbmQgPCBsYXN0X3N0b3BfZW5kKQotICAgICAgICAgIHBhcnNlLT5sYXN0X3N0b3BfZW5kID0gbGFzdF9zdG9wX2VuZDsKLQotICAgICAgICBpZiAocGFyc2UtPnNlZ21lbnQuZHVyYXRpb24gPT0gLTEgfHwKLSAgICAgICAgICAgIHBhcnNlLT5zZWdtZW50LmR1cmF0aW9uIDwgbGFjZV90aW1lKSB7Ci0gICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uICgmcGFyc2UtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgbGFzdF9zdG9wX2VuZCk7Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChwYXJzZSksCi0gICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbiAoR1NUX09CSkVDVF9DQVNUIChwYXJzZSksCi0gICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9DTE9DS19USU1FX05PTkUpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdHJlYW0tPnBvcyA9IGxhY2VfdGltZTsKLQotICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX3N5bmNfc3RyZWFtcyAocGFyc2UpOwotCi0gICAgICBpZiAoc3RyZWFtLT5zZXRfZGlzY29udCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm1hcmtpbmcgRElTQ09OVCIpOwotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChzdWIsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICAgICAgc3RyZWFtLT5zZXRfZGlzY29udCA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICAvKiByZXZlcnNlIHBsYXliYWNrIGJvb2sta2VlcGluZyAqLwotICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtLT5mcm9tX3RpbWUpKQotICAgICAgICBzdHJlYW0tPmZyb21fdGltZSA9IGxhY2VfdGltZTsKLSAgICAgIGlmIChzdHJlYW0tPmZyb21fb2Zmc2V0ID09IC0xKQotICAgICAgICBzdHJlYW0tPmZyb21fb2Zmc2V0ID0gb2Zmc2V0OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAiUHVzaGluZyBsYWNlICVkLCBkYXRhIG9mIHNpemUgJWQgZm9yIHN0cmVhbSAlZCwgdGltZT0lIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiIGFuZCBkdXJhdGlvbj0lIiBHU1RfVElNRV9GT1JNQVQsIG4sCi0gICAgICAgICAgR1NUX0JVRkZFUl9TSVpFIChzdWIpLCBzdHJlYW1fbnVtLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChzdWIpKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChzdWIpKSk7Ci0KLSAgICAgIGlmIChwYXJzZS0+ZWxlbWVudF9pbmRleCkgewotICAgICAgICBpZiAoc3RyZWFtLT5pbmRleF93cml0ZXJfaWQgPT0gLTEpCi0gICAgICAgICAgZ3N0X2luZGV4X2dldF93cml0ZXJfaWQgKHBhcnNlLT5lbGVtZW50X2luZGV4LAotICAgICAgICAgICAgICBHU1RfT0JKRUNUIChzdHJlYW0tPnBhZCksICZzdHJlYW0tPmluZGV4X3dyaXRlcl9pZCk7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiYWRkaW5nIGFzc29jaWF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCAiLT4gJSIKLSAgICAgICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiBmb3Igd3JpdGVyIGlkICVkIiwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChzdWIpKSwgY2x1c3Rlcl9vZmZzZXQsCi0gICAgICAgICAgICBzdHJlYW0tPmluZGV4X3dyaXRlcl9pZCk7Ci0gICAgICAgIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKHBhcnNlLT5lbGVtZW50X2luZGV4LAotICAgICAgICAgICAgc3RyZWFtLT5pbmRleF93cml0ZXJfaWQsIEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKHN1YiwKLSAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkgPyAwIDogR1NUX0FTU09DSUFUSU9OX0ZMQUdfS0VZX1VOSVQsCi0gICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChzdWIpLCBHU1RfRk9STUFUX0JZVEVTLAotICAgICAgICAgICAgY2x1c3Rlcl9vZmZzZXQsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBnc3RfYnVmZmVyX3NldF9jYXBzIChzdWIsIEdTVF9QQURfQ0FQUyAocGFyc2UtPnNyY3BhZCkpOwotCi0gICAgICAvKiBQb3N0cHJvY2VzcyB0aGUgYnVmZmVycyBkZXBlbmRpbmcgb24gdGhlIGNvZGVjIHVzZWQgKi8KLSAgICAgIGlmIChzdHJlYW0tPnBvc3Rwcm9jZXNzX2ZyYW1lKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInJ1bm5pbmcgcG9zdCBwcm9jZXNzIik7Ci0gICAgICAgIHJldCA9IHN0cmVhbS0+cG9zdHByb2Nlc3NfZnJhbWUgKEdTVF9FTEVNRU5UIChwYXJzZSksIHN0cmVhbSwgJnN1Yik7Ci0gICAgICB9Ci0KLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaCAoc3RyZWFtLT5wYWQsIHN1Yik7Ci0gICAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA8IDApIHsKLSAgICAgICAgaWYgKGxhY2VfdGltZSA+IHBhcnNlLT5zZWdtZW50LnN0b3AgJiYgcmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgICAgIC8qIEluIHJldmVyc2UgcGxheWJhY2sgd2UgY2FuIGdldCBhIEdTVF9GTE9XX0VPUyB3aGVuCi0gICAgICAgICAgICogd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQsIHNvIHdlIGp1c3QgbmVlZCB0byBqdW1wCi0gICAgICAgICAgICogYmFjayB0byB0aGUgcHJldmlvdXMgc2VjdGlvbi4gKi8KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRvd25zdHJlYW0gaGFzIHJlYWNoZWQgZW5kIG9mIHNlZ21lbnQiKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogY29tYmluZSBmbG93cyAqLwotICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3BhcnNlX2NvbWJpbmVfZmxvd3MgKHBhcnNlLCBzdHJlYW0sIHJldCk7Ci0jZW5kaWYKLQotICAgIG5leHRfbGFjZToKLSAgICAgIHNpemUgLT0gbGFjZV9zaXplW25dOwotICAgICAgaWYgKGxhY2VfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmIGR1cmF0aW9uKQotICAgICAgICBsYWNlX3RpbWUgKz0gZHVyYXRpb24gLyBsYWNlczsKLSAgICAgIGVsc2UKLSAgICAgICAgbGFjZV90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgaWYgKGJ1ZikgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotICBnX2ZyZWUgKGxhY2Vfc2l6ZSk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFWElUUyAqLwotaW52YWxpZF9sYWNpbmc6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXJzZSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoIkludmFsaWQgbGFjaW5nIHNpemUiKSk7Ci0gICAgLyogbm9uLWZhdGFsLCB0cnkgbmV4dCBibG9jayhncm91cCkgKi8KLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWRhdGFfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXJzZSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLCAoIkRhdGEgZXJyb3IiKSk7Ci0gICAgLyogbm9uLWZhdGFsLCB0cnkgbmV4dCBibG9jayhncm91cCkgKi8KLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotLyogcmV0dXJuIEZBTFNFIGlmIGJsb2NrKGdyb3VwKSBzaG91bGQgYmUgc2tpcHBlZCAoZHVlIHRvIGEgc2VlaykgKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9wYXJzZV9zZWVrX2Jsb2NrIChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UpCi17Ci0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+c2Vla19ibG9jaykpIHsKLSAgICBpZiAoISgtLXBhcnNlLT5zZWVrX2Jsb2NrKSkgewotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInNob3VsZCBza2lwIGJsb2NrIGR1ZSB0byBzZWVrIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHJldHVybiBUUlVFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfY29udGVudHNfc2Vla2VudHJ5IChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UsCi0gICAgR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQ2NCBzZWVrX3BvcyA9IChndWludDY0KSAtIDE7Ci0gIGd1aW50MzIgc2Vla19pZCA9IDA7Ci0gIGd1aW50MzIgaWQ7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAocGFyc2UsIGVibWwsICJTZWVrIik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKHBhcnNlLCBlYm1sLCAiU2VlayIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFRUtJRDoKLSAgICAgIHsKLSAgICAgICAgZ3VpbnQ2NCB0OwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZ0KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJTZWVrSUQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHQpOwotICAgICAgICBzZWVrX2lkID0gdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFRUtQT1NJVElPTjoKLSAgICAgIHsKLSAgICAgICAgZ3VpbnQ2NCB0OwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZ0KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHQgPiBHX01BWElOVDY0KSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgIlRvbyBsYXJnZSBTZWVrUG9zaXRpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCwgdCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIlNlZWtQb3NpdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCwgdCk7Ci0gICAgICAgIHNlZWtfcG9zID0gdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwICgmcGFyc2UtPmNvbW1vbiwgZWJtbCwKLSAgICAgICAgICAgICJTZWVrSGVhZCIsIGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAmJiByZXQgIT0gR1NUX0ZMT1dfRU9TKQotICAgIHJldHVybiByZXQ7Ci0KLSAgaWYgKCFzZWVrX2lkIHx8IHNlZWtfcG9zID09IChndWludDY0KSAtIDEpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLCAiSW5jb21wbGV0ZSBzZWVraGVhZCBlbnRyeSAoMHgleC8lIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIpIiwgc2Vla19pZCwgc2Vla19wb3MpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIHN3aXRjaCAoc2Vla19pZCkgewotICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFRUtIRUFEOgotICAgIHsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ1VFUzoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQUdTOgotICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RSQUNLUzoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5USU5GTzoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9BVFRBQ0hNRU5UUzoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSUzoKLSAgICB7Ci0gICAgICBndWludDY0IGxlbmd0aDsKLQotICAgICAgLyogcmVtZW1iZXIgKi8KLSAgICAgIGxlbmd0aCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9nZXRfbGVuZ3RoICgmcGFyc2UtPmNvbW1vbik7Ci0KLSAgICAgIGlmIChsZW5ndGggPT0gKGd1aW50NjQpIC0gMSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIm5vIHVwc3RyZWFtIGxlbmd0aCwgc2tpcHBpbmcgU2Vha0hlYWQgZW50cnkiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGNoZWNrIGZvciB2YWxpZGl0eSAqLwotICAgICAgaWYgKHNlZWtfcG9zICsgcGFyc2UtPmNvbW1vbi5lYm1sX3NlZ21lbnRfc3RhcnQgKyAxMiA+PSBsZW5ndGgpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICJTZWVrSGVhZCByZWZlcmVuY2UgbGllcyBvdXRzaWRlIGZpbGUhIiAiICglIgotICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKyUiIEdfR1VJTlQ2NF9GT1JNQVQgIisxMiA+PSAlIgotICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiKSIsIHNlZWtfcG9zLCBwYXJzZS0+Y29tbW9uLmVibWxfc2VnbWVudF9zdGFydCwKLSAgICAgICAgICAgIGxlbmd0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBvbmx5IHBpY2sgdXAgaW5kZXggbG9jYXRpb24gd2hlbiBzdHJlYW1pbmcgKi8KLSAgICAgIGlmIChzZWVrX2lkID09IEdTVF9NQVRST1NLQV9JRF9DVUVTKSB7Ci0gICAgICAgIHBhcnNlLT5pbmRleF9vZmZzZXQgPSBzZWVrX3BvcyArIHBhcnNlLT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0OwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkN1ZXMgbG9jYXRlZCBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIHBhcnNlLT5pbmRleF9vZmZzZXQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiSWdub3JpbmcgU2VlayBlbnRyeSBmb3IgSUQ9MHgleCIsIHNlZWtfaWQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChwYXJzZSwgZWJtbCwgIlNlZWsiLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfY29udGVudHMgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwgR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDMyIGlkOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKHBhcnNlLCBlYm1sLCAiU2Vla0hlYWQiKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAocGFyc2UsIGVibWwsICJTZWVrSGVhZCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFRUtFTlRSWToKLSAgICAgIHsKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3BhcnNlX3BhcnNlX2NvbnRlbnRzX3NlZWtlbnRyeSAocGFyc2UsIGVibWwpOwotICAgICAgICAvKiBJZ25vcmUgRU9TIGFuZCBlcnJvcnMgaGVyZSAqLwotICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJJZ25vcmluZyAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKCZwYXJzZS0+Y29tbW9uLCBlYm1sLAotICAgICAgICAgICAgIlNlZWtIZWFkIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKHBhcnNlLCBlYm1sLCAiU2Vla0hlYWQiLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgR1NUX0ZMT1dfT1ZFUkZMT1cgICBHU1RfRkxPV19DVVNUT01fRVJST1IKLQotI2RlZmluZSBNQVhfQkxPQ0tfU0laRSAoMTUgKiAxMDI0ICogMTAyNCkKLQotc3RhdGljIGlubGluZSBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfY2hlY2tfcmVhZF9zaXplIChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UsIGd1aW50NjQgYnl0ZXMpCi17Ci0gIGlmIChHX1VOTElLRUxZIChieXRlcyA+IE1BWF9CTE9DS19TSVpFKSkgewotICAgIC8qIG9ubHkgYSBmZXcgYmxvY2tzIGFyZSBleHBlY3RlZC9hbGxvd2VkIHRvIGJlIGxhcmdlLAotICAgICAqIGFuZCB3aWxsIGJlIHJlY3Vyc2VkIGludG8sIHdoZXJlYXMgb3RoZXJzIHdpbGwgYmUgcmVhZCBhbmQgbXVzdCBmaXQgKi8KLSAgICAvKiBmYXRhbCBpbiBzdHJlYW1pbmcgY2FzZSwgYXMgd2UgY2FuJ3Qgc3RlcCBvdmVyIGVhc2lseSAqLwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAoInJlYWRpbmcgbGFyZ2UgYmxvY2sgb2Ygc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUICIgbm90IHN1cHBvcnRlZDsgIgotICAgICAgICAgICAgImZpbGUgbWlnaHQgYmUgY29ycnVwdC4iLCBieXRlcykpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotI2lmIDAKLS8qIHJldHVybnMgVFJVRSBpZiB3ZSB0cnVlbHkgYXJlIGluIGVycm9yIHN0YXRlLCBhbmQgc2hvdWxkIGdpdmUgdXAgKi8KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9wYXJzZV9jaGVja19wYXJzZV9lcnJvciAoR3N0TWF0cm9za2FQYXJzZSAqIHBhcnNlKQotewotICBnaW50NjQgcG9zOwotCi0gIC8qIHNpZ2gsIG9uZSBsYXN0IGF0dGVtcHQgYWJvdmUgYW5kIGJleW9uZCBjYWxsIG9mIGR1dHkgLi4uOwotICAgKiBzZWFyY2ggZm9yIGNsdXN0ZXIgbWFyayBmb2xsb3dpbmcgY3VycmVudCBwb3MgKi8KLSAgcG9zID0gcGFyc2UtPmNvbW1vbi5vZmZzZXQ7Ci0gIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJwYXJzZSBlcnJvciwgbG9va2luZyBmb3IgbmV4dCBjbHVzdGVyIik7Ci0gIGlmIChnc3RfbWF0cm9za2FfcGFyc2Vfc2VhcmNoX2NsdXN0ZXIgKHBhcnNlLCAmcG9zKSAhPSBHU1RfRkxPV19PSykgewotICAgIC8qIGRpZCBub3Qgd29yaywgZ2l2ZSB1cCAqLwotICAgIHJldHVybiBUUlVFOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiLi4uIGZvdW5kIGF0ICAlIiBHX0dVSU5UNjRfRk9STUFULCBwb3MpOwotICAgIC8qIHRyeSB0aGF0IHBvc2l0aW9uICovCi0gICAgcGFyc2UtPmNvbW1vbi5vZmZzZXQgPSBwb3M7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0jZW5kaWYKLQotLyogaW5pdGlhbGl6ZXMgQGVibWwgd2l0aCBAYnl0ZXMgZnJvbSBpbnB1dCBzdHJlYW0gYXQgY3VycmVudCBvZmZzZXQuCi0gKiBSZXR1cm5zIEVPUyBpZiBpbnN1ZmZpY2llbnQgYXZhaWxhYmxlLAotICogRVJST1IgaWYgdG9vIG11Y2ggd2FzIGF0dGVtcHRlZCB0byByZWFkLiAqLwotc3RhdGljIGlubGluZSBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfdGFrZSAoR3N0TWF0cm9za2FQYXJzZSAqIHBhcnNlLCBndWludDY0IGJ5dGVzLAotICAgIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgInRha2luZyAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMgZm9yIHBhcnNpbmciLAotICAgICAgYnl0ZXMpOwotICByZXQgPSBnc3RfbWF0cm9za2FfcGFyc2VfY2hlY2tfcmVhZF9zaXplIChwYXJzZSwgYnl0ZXMpOwotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkgewotICAgIC8qIG90aGVyd2lzZSBmYXRhbCAqLwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZXhpdDsKLSAgfQotICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChwYXJzZS0+Y29tbW9uLmFkYXB0ZXIpIDwgYnl0ZXMpCi0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLQotICBidWZmZXIgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocGFyc2UtPmNvbW1vbi5hZGFwdGVyLCBieXRlcyk7Ci0gIGlmIChHX0xJS0VMWSAoYnVmZmVyKSkgewotICAgIGdzdF9lYm1sX3JlYWRfaW5pdCAoZWJtbCwgR1NUX0VMRU1FTlRfQ0FTVCAocGFyc2UpLCBidWZmZXIsCi0gICAgICAgIHBhcnNlLT5jb21tb24ub2Zmc2V0KTsKLSAgICBwYXJzZS0+Y29tbW9uLm9mZnNldCArPSBieXRlczsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgfQotZXhpdDoKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3BhcnNlX2NoZWNrX3NlZWthYmlsaXR5IChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UpCi17Ci0gIEdzdFF1ZXJ5ICpxdWVyeTsKLSAgZ2Jvb2xlYW4gc2Vla2FibGUgPSBGQUxTRTsKLSAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3AgPSAtMTsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfc2Vla2luZyAoR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChwYXJzZS0+Y29tbW9uLnNpbmtwYWQsIHF1ZXJ5KSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAic2Vla2luZyBxdWVyeSBmYWlsZWQiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksIE5VTEwsICZzZWVrYWJsZSwgJnN0YXJ0LCAmc3RvcCk7Ci0KLSAgLyogdHJ5IGhhcmRlciB0byBxdWVyeSB1cHN0cmVhbSBzaXplIGlmIHdlIGRpZG4ndCBnZXQgaXQgdGhlIGZpcnN0IHRpbWUgKi8KLSAgaWYgKHNlZWthYmxlICYmIHN0b3AgPT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgImRvaW5nIGR1cmF0aW9uIHF1ZXJ5IHRvIGZpeCB1cCB1bnNldCBzdG9wIik7Ci0gICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uIChwYXJzZS0+Y29tbW9uLnNpbmtwYWQsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICAgICZzdG9wKTsKLSAgfQotCi0gIC8qIGlmIHVwc3RyZWFtIGRvZXNuJ3Qga25vdyB0aGUgc2l6ZSwgaXQncyBsaWtlbHkgdGhhdCBpdCdzIG5vdCBzZWVrYWJsZSBpbgotICAgKiBwcmFjdGljZSBldmVuIGlmIGl0IHRlY2huaWNhbGx5IG1heSBiZSBzZWVrYWJsZSAqLwotICBpZiAoc2Vla2FibGUgJiYgKHN0YXJ0ICE9IDAgfHwgc3RvcCA8PSBzdGFydCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWthYmxlIGJ1dCB1bmtub3duIHN0YXJ0L3N0b3AgLT4gZGlzYWJsZSIpOwotICAgIHNlZWthYmxlID0gRkFMU0U7Ci0gIH0KLQotZG9uZToKLSAgR1NUX0lORk9fT0JKRUNUIChwYXJzZSwgInNlZWthYmxlOiAlZCAoJSIgR19HVUlOVDY0X0ZPUk1BVCAiIC0gJSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIikiLCBzZWVrYWJsZSwgc3RhcnQsIHN0b3ApOwotICBwYXJzZS0+c2Vla2FibGUgPSBzZWVrYWJsZTsKLQotICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLX0KLQotI2lmIDAKLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfZmluZF90cmFja3MgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSkKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgZ3VpbnQ2NCBiZWZvcmVfcG9zOwotICBndWludDY0IGxlbmd0aDsKLSAgZ3VpbnQgbmVlZGVkOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCi0gICAgICAiRm91bmQgQ2x1c3RlciBlbGVtZW50IGJlZm9yZSBUcmFja3MsIHNlYXJjaGluZyBUcmFja3MiKTsKLQotICAvKiByZW1lbWJlciAqLwotICBiZWZvcmVfcG9zID0gcGFyc2UtPmNvbW1vbi5vZmZzZXQ7Ci0KLSAgLyogU2VhcmNoIFRyYWNrcyBlbGVtZW50ICovCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKCZwYXJzZS0+Y29tbW9uLAotICAgICAgICBHU1RfRUxFTUVOVF9DQVNUIChwYXJzZSksICZpZCwgJmxlbmd0aCwgJm5lZWRlZCk7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKGlkICE9IEdTVF9NQVRST1NLQV9JRF9UUkFDS1MpIHsKLSAgICAgIC8qIHdlIG1heSBiZSBza2lwcGluZyBsYXJnZSBjbHVzdGVyIGhlcmUsIHNvIGZvcmVnbyBzaXplIGNoZWNrIGV0YyAqLwotICAgICAgLyogLi4uIGJ1dCB3ZSBjYW4ndCBza2lwIHVuZGVmaW5lZCBzaXplOyBmb3JjZSBlcnJvciAqLwotICAgICAgaWYgKGxlbmd0aCA9PSBHX01BWFVJTlQ2NCkgewotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcGFyc2VfY2hlY2tfcmVhZF9zaXplIChwYXJzZSwgbGVuZ3RoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwYXJzZS0+Y29tbW9uLm9mZnNldCArPSBuZWVkZWQ7Ci0gICAgICAgIHBhcnNlLT5vZmZzZXQgKz0gbGVuZ3RoOwotICAgICAgfQotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogd2lsbCBsZWFkIHRvIHRyYWNrIHBhcnNpbmcgLi4uICovCi0gICAgcmV0ID0gZ3N0X21hdHJvc2thX3BhcnNlX3BhcnNlX2lkIChwYXJzZSwgaWQsIGxlbmd0aCwgbmVlZGVkKTsKLSAgICBicmVhazsKLSAgfQotCi0gIC8qIHNlZWsgYmFjayAqLwotICBwYXJzZS0+b2Zmc2V0ID0gYmVmb3JlX3BvczsKLQotICByZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLSNkZWZpbmUgR1NUX1JFQURfQ0hFQ0soc3RtdCkgIFwKLUdfU1RNVF9TVEFSVCB7IFwKLSAgaWYgKEdfVU5MSUtFTFkgKChyZXQgPSAoc3RtdCkpICE9IEdTVF9GTE9XX09LKSkgeyBcCi0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19PVkVSRkxPVykgeyBcCi0gICAgICByZXQgPSBHU1RfRkxPV19PSzsgXAotICAgIH0gXAotICAgIGdvdG8gcmVhZF9lcnJvcjsgXAotICB9IFwKLX0gR19TVE1UX0VORAotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3BhcnNlX2FjY3VtdWxhdGVfc3RyZWFtaGVhZGVyIChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBpZiAocGFyc2UtPnB1c2hlZF9oZWFkZXJzKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgIkFjY3VtdWxhdGluZyBoZWFkZXJzLCBidXQgaGVhZGVycyBhcmUgYWxyZWFkeSBwdXNoZWQiKTsKLSAgfQotCi0gIGlmIChwYXJzZS0+c3RyZWFtaGVhZGVyKSB7Ci0gICAgcGFyc2UtPnN0cmVhbWhlYWRlciA9IGdzdF9idWZmZXJfYXBwZW5kIChwYXJzZS0+c3RyZWFtaGVhZGVyLAotICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcGFyc2UtPnN0cmVhbWhlYWRlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiJSIgR19HU0laRV9GT1JNQVQsIGdzdF9idWZmZXJfZ2V0X3NpemUgKHBhcnNlLT5zdHJlYW1oZWFkZXIpKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9wYXJzZV9vdXRwdXQgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIGdib29sZWFuIGtleWZyYW1lKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBpZiAoIXBhcnNlLT5wdXNoZWRfaGVhZGVycykgewotICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotICAgIEdWYWx1ZSBzdHJlYW1oZWFkZXIgPSB7IDAgfTsKLSAgICBHVmFsdWUgYnVmdmFsID0geyAwIH07Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYXJzZS0+Y29tbW9uLnNpbmtwYWQpOwotICAgIGlmIChjYXBzID09IE5VTEwpIHsKLSAgICAgIGNhcHMgPSBnc3RfbWF0cm9za2FfcGFyc2VfZm9yZ2VfY2FwcyAocGFyc2UtPmNvbW1vbi5pc193ZWJtLAotICAgICAgICAgIHBhcnNlLT5jb21tb24uaGFzX3ZpZGVvKTsKLSAgICB9IGVsc2UKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLQotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICBnX3ZhbHVlX2luaXQgKCZzdHJlYW1oZWFkZXIsIEdTVF9UWVBFX0FSUkFZKTsKLSAgICBnX3ZhbHVlX2luaXQgKCZidWZ2YWwsIEdTVF9UWVBFX0JVRkZFUik7Ci0gICAgYnVmID0gZ3N0X2J1ZmZlcl9jb3B5IChwYXJzZS0+c3RyZWFtaGVhZGVyKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICAgIGdzdF92YWx1ZV9zZXRfYnVmZmVyICgmYnVmdmFsLCBidWYpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgZ3N0X3ZhbHVlX2FycmF5X2FwcGVuZF92YWx1ZSAoJnN0cmVhbWhlYWRlciwgJmJ1ZnZhbCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJmJ1ZnZhbCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHMsICJzdHJlYW1oZWFkZXIiLCAmc3RyZWFtaGVhZGVyKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmc3RyZWFtaGVhZGVyKTsKLSAgICAvL2dzdF9jYXBzX3JlcGxhY2UgKHBhcnNlLT5jYXBzLCBjYXBzKTsKLSAgICBnc3RfcGFkX3NldF9jYXBzIChwYXJzZS0+c3JjcGFkLCBjYXBzKTsKLQotICAgIGlmIChwYXJzZS0+bmVlZF9uZXdzZWdtZW50KSB7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhcnNlLT5zcmNwYWQsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmcGFyc2UtPmNvbW1vbi5zZWdtZW50KSk7Ci0gICAgICBwYXJzZS0+bmVlZF9uZXdzZWdtZW50ID0gRkFMU0U7Ci0gICAgfQotCi0gICAgYnVmID0gZ3N0X2J1ZmZlcl9jb3B5IChwYXJzZS0+c3RyZWFtaGVhZGVyKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19IRUFERVIpOwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBidWYpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsICJGYWlsZWQgdG8gcHVzaCBidWZmZXIiKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcGFyc2UtPnB1c2hlZF9oZWFkZXJzID0gVFJVRTsKLSAgfQotCi0gIGlmICgha2V5ZnJhbWUpIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICB9Ci0gIGlmIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgcGFyc2UtPmxhc3RfdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSBwYXJzZS0+bGFzdF90aW1lc3RhbXA7Ci0gIH0KLQotICByZXR1cm4gZ3N0X3BhZF9wdXNoIChwYXJzZS0+c3JjcGFkLCBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfaWQgKEdzdE1hdHJvc2thUGFyc2UgKiBwYXJzZSwgZ3VpbnQzMiBpZCwKLSAgICBndWludDY0IGxlbmd0aCwgZ3VpbnQgbmVlZGVkKQotewotICBHc3RFYm1sUmVhZCBlYm1sID0geyAwLCB9OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDY0IHJlYWQ7Ci0gIC8vR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJQYXJzaW5nIEVsZW1lbnQgaWQgMHgleCwgIgotICAgICAgInNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBwcmVmaXggJWQiLCBpZCwgbGVuZ3RoLCBuZWVkZWQpOwotCi0jaWYgMAotICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChwYXJzZS0+YWRhcHRlcikgPj0gbGVuZ3RoICsgbmVlZGVkKSB7Ci0gICAgYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHBhcnNlLT5hZGFwdGVyLCBsZW5ndGggKyBuZWVkZWQpOwotICAgIGdzdF9wYWRfcHVzaCAocGFyc2UtPnNyY3BhZCwgYnVmZmVyKTsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gIH0KLSAgLy9HU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotCi0gIHJldHVybiByZXQ7Ci0jZW5kaWYKLQotCi0KLSAgLyogaWYgd2UgcGxhbiB0byByZWFkIGFuZCBwYXJzZSB0aGlzIGVsZW1lbnQsIHdlIG5lZWQgcHJlZml4IChpZCArIGxlbmd0aCkKLSAgICogYW5kIHRoZSBjb250ZW50cyAqLwotICAvKiBtaW5kIGFib3V0IG92ZXJmbG93IHdyYXAtYXJvdW5kIHdoZW4gZGVhbGluZyB3aXRoIHVuZGVmaW5lZCBzaXplICovCi0gIHJlYWQgPSBsZW5ndGg7Ci0gIGlmIChHX0xJS0VMWSAobGVuZ3RoICE9IEdfTUFYVUlOVDY0KSkKLSAgICByZWFkICs9IG5lZWRlZDsKLQotICBzd2l0Y2ggKHBhcnNlLT5jb21tb24uc3RhdGUpIHsKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NUQVJUOgotICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIEdTVF9FQk1MX0lEX0hFQURFUjoKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9oZWFkZXIgKCZwYXJzZS0+Y29tbW9uLCAmZWJtbCk7Ci0gICAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgIGdvdG8gcGFyc2VfZmFpbGVkOwotICAgICAgICAgIHBhcnNlLT5jb21tb24uc3RhdGUgPSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9TRUdNRU5UOwotICAgICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9jaGVja19zZWVrYWJpbGl0eSAocGFyc2UpOwotICAgICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9hY2N1bXVsYXRlX3N0cmVhbWhlYWRlciAocGFyc2UsIGVibWwuYnVmKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBnb3RvIGludmFsaWRfaGVhZGVyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9TRUdNRU5UOgotICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5UOgotICAgICAgICAgIC8qIGVhdCBzZWdtZW50IHByZWZpeCAqLwotICAgICAgICAgIEdTVF9SRUFEX0NIRUNLIChnc3RfbWF0cm9za2FfcGFyc2VfdGFrZSAocGFyc2UsIG5lZWRlZCwgJmVibWwpKTsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgIkZvdW5kIFNlZ21lbnQgc3RhcnQgYXQgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgICAgIHBhcnNlLT5jb21tb24ub2Zmc2V0KTsKLSAgICAgICAgICAvKiBzZWVrcyBhcmUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWdtZW50LAotICAgICAgICAgICAqIGFmdGVyIHRoZSBzZWdtZW50IElEL2xlbmd0aCAqLwotICAgICAgICAgIHBhcnNlLT5jb21tb24uZWJtbF9zZWdtZW50X3N0YXJ0ID0gcGFyc2UtPmNvbW1vbi5vZmZzZXQ7Ci0gICAgICAgICAgcGFyc2UtPmNvbW1vbi5zdGF0ZSA9IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0hFQURFUjsKLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2VfYWNjdW11bGF0ZV9zdHJlYW1oZWFkZXIgKHBhcnNlLCBlYm1sLmJ1Zik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwKLSAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgU2VnbWVudCBJRCAoMHgleCksIGJ1dCByZWNlaXZlZCAweCV4ISIsCi0gICAgICAgICAgICAgIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5ULCBpZCk7Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgbmVlZGVkLCAmZWJtbCkpOwotICAgICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9hY2N1bXVsYXRlX3N0cmVhbWhlYWRlciAocGFyc2UsIGVibWwuYnVmKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfU0NBTk5JTkc6Ci0gICAgICBpZiAoaWQgIT0gR1NUX01BVFJPU0tBX0lEX0NMVVNURVIgJiYKLSAgICAgICAgICBpZCAhPSBHU1RfTUFUUk9TS0FfSURfQ0xVU1RFUlRJTUVDT0RFKQotICAgICAgICBnb3RvIHNraXA7Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICBjYXNlIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0hFQURFUjoKLSAgICBjYXNlIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEE6Ci0gICAgY2FzZSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9TRUVLOgotICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9TRUdNRU5USU5GTzoKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIGlmICghcGFyc2UtPmNvbW1vbi5zZWdtZW50aW5mb19wYXJzZWQpIHsKLSAgICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9pbmZvICgmcGFyc2UtPmNvbW1vbiwKLSAgICAgICAgICAgICAgICBHU1RfRUxFTUVOVF9DQVNUIChwYXJzZSksICZlYm1sKTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9zZW5kX3RhZ3MgKHBhcnNlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX2FjY3VtdWxhdGVfc3RyZWFtaGVhZGVyIChwYXJzZSwgZWJtbC5idWYpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UUkFDS1M6Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICBpZiAoIXBhcnNlLT50cmFja3NfcGFyc2VkKSB7Ci0gICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfdHJhY2tzIChwYXJzZSwgJmVibWwpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2VfYWNjdW11bGF0ZV9zdHJlYW1oZWFkZXIgKHBhcnNlLCBlYm1sLmJ1Zik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NMVVNURVI6Ci0gICAgICAgICAgaWYgKEdfVU5MSUtFTFkgKCFwYXJzZS0+dHJhY2tzX3BhcnNlZCkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiQ2x1c3RlciBiZWZvcmUgVHJhY2siKTsKLSAgICAgICAgICAgIGdvdG8gbm90X3N0cmVhbWFibGU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChwYXJzZS0+Y29tbW9uLnN0YXRlCi0gICAgICAgICAgICAgICAgICA9PSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9IRUFERVIpKSB7Ci0gICAgICAgICAgICBwYXJzZS0+Y29tbW9uLnN0YXRlID0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQTsKLSAgICAgICAgICAgIHBhcnNlLT5maXJzdF9jbHVzdGVyX29mZnNldCA9IHBhcnNlLT5jb21tb24ub2Zmc2V0OwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzaWduYWxpbmcgbm8gbW9yZSBwYWRzIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIHBhcnNlLT5jbHVzdGVyX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgICAgIHBhcnNlLT5jbHVzdGVyX29mZnNldCA9IHBhcnNlLT5jb21tb24ub2Zmc2V0OwotICAgICAgICAgIGlmIChHX1VOTElLRUxZICghcGFyc2UtPnNlZWtfZmlyc3QgJiYgcGFyc2UtPnNlZWtfYmxvY2spKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNlZWsgdGFyZ2V0IGJsb2NrICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAgICAgICAiIG5vdCBmb3VuZCBpbiBDbHVzdGVyLCB0cnlpbmcgbmV4dCBDbHVzdGVyJ3MgZmlyc3QgYmxvY2sgaW5zdGVhZCIsCi0gICAgICAgICAgICAgICAgcGFyc2UtPnNlZWtfYmxvY2spOwotICAgICAgICAgICAgcGFyc2UtPnNlZWtfYmxvY2sgPSAwOwotICAgICAgICAgIH0KLSAgICAgICAgICBwYXJzZS0+c2Vla19maXJzdCA9IEZBTFNFOwotICAgICAgICAgIC8qIHJlY29yZCBuZXh0IGNsdXN0ZXIgZm9yIHJlY292ZXJ5ICovCi0gICAgICAgICAgaWYgKHJlYWQgIT0gR19NQVhVSU5UNjQpCi0gICAgICAgICAgICBwYXJzZS0+bmV4dF9jbHVzdGVyX29mZnNldCA9IHBhcnNlLT5jbHVzdGVyX29mZnNldCArIHJlYWQ7Ci0gICAgICAgICAgLyogZWF0IGNsdXN0ZXIgcHJlZml4ICovCi0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgbmVlZGVkLCAmZWJtbCkpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9wYXJzZV9vdXRwdXQgKHBhcnNlLCBlYm1sLmJ1ZiwgVFJVRSk7Ci0gICAgICAgICAgLy9nc3RfbWF0cm9za2FfcGFyc2VfYWNjdW11bGF0ZV9zdHJlYW1oZWFkZXIgKHBhcnNlLCBlYm1sLmJ1Zik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NMVVNURVJUSU1FQ09ERToKLSAgICAgICAgewotICAgICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoJmVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgZ290byBwYXJzZV9mYWlsZWQ7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJDbHVzdGVyVGltZUNvZGU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgcGFyc2UtPmNsdXN0ZXJfdGltZSA9IG51bTsKLSNpZiAwCi0gICAgICAgICAgaWYgKHBhcnNlLT5jb21tb24uZWxlbWVudF9pbmRleCkgewotICAgICAgICAgICAgaWYgKHBhcnNlLT5jb21tb24uZWxlbWVudF9pbmRleF93cml0ZXJfaWQgPT0gLTEpCi0gICAgICAgICAgICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChwYXJzZS0+Y29tbW9uLmVsZW1lbnRfaW5kZXgsCi0gICAgICAgICAgICAgICAgICBHU1RfT0JKRUNUIChwYXJzZSksICZwYXJzZS0+Y29tbW9uLmVsZW1lbnRfaW5kZXhfd3JpdGVyX2lkKTsKLSAgICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgImFkZGluZyBhc3NvY2lhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIi0+ICUiCi0gICAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiIGZvciB3cml0ZXIgaWQgJWQiLAotICAgICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBhcnNlLT5jbHVzdGVyX3RpbWUpLCBwYXJzZS0+Y2x1c3Rlcl9vZmZzZXQsCi0gICAgICAgICAgICAgICAgcGFyc2UtPmNvbW1vbi5lbGVtZW50X2luZGV4X3dyaXRlcl9pZCk7Ci0gICAgICAgICAgICBnc3RfaW5kZXhfYWRkX2Fzc29jaWF0aW9uIChwYXJzZS0+Y29tbW9uLmVsZW1lbnRfaW5kZXgsCi0gICAgICAgICAgICAgICAgcGFyc2UtPmNvbW1vbi5lbGVtZW50X2luZGV4X3dyaXRlcl9pZCwKLSAgICAgICAgICAgICAgICBHU1RfQVNTT0NJQVRJT05fRkxBR19LRVlfVU5JVCwKLSAgICAgICAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIHBhcnNlLT5jbHVzdGVyX3RpbWUsCi0gICAgICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgcGFyc2UtPmNsdXN0ZXJfb2Zmc2V0LCBOVUxMKTsKLSAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfb3V0cHV0IChwYXJzZSwgZWJtbC5idWYsIEZBTFNFKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9CTE9DS0dST1VQOgotICAgICAgICAgIGlmICghZ3N0X21hdHJvc2thX3BhcnNlX3NlZWtfYmxvY2sgKHBhcnNlKSkKLSAgICAgICAgICAgIGdvdG8gc2tpcDsKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIERFQlVHX0VMRU1FTlRfU1RBUlQgKHBhcnNlLCAmZWJtbCwgIkJsb2NrR3JvdXAiKTsKLSAgICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyICgmZWJtbCwgJmlkKSkgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9wYXJzZV9wYXJzZV9ibG9ja2dyb3VwX29yX3NpbXBsZWJsb2NrIChwYXJzZSwKLSAgICAgICAgICAgICAgICAmZWJtbCwgcGFyc2UtPmNsdXN0ZXJfdGltZSwgcGFyc2UtPmNsdXN0ZXJfb2Zmc2V0LCBGQUxTRSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIERFQlVHX0VMRU1FTlRfU1RPUCAocGFyc2UsICZlYm1sLCAiQmxvY2tHcm91cCIsIHJldCk7Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX291dHB1dCAocGFyc2UsIGVibWwuYnVmLCBGQUxTRSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NJTVBMRUJMT0NLOgotICAgICAgICAgIGlmICghZ3N0X21hdHJvc2thX3BhcnNlX3NlZWtfYmxvY2sgKHBhcnNlKSkKLSAgICAgICAgICAgIGdvdG8gc2tpcDsKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIERFQlVHX0VMRU1FTlRfU1RBUlQgKHBhcnNlLCAmZWJtbCwgIlNpbXBsZUJsb2NrIik7Ci0gICAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3BhcnNlX3BhcnNlX2Jsb2NrZ3JvdXBfb3Jfc2ltcGxlYmxvY2sgKHBhcnNlLAotICAgICAgICAgICAgICAmZWJtbCwgcGFyc2UtPmNsdXN0ZXJfdGltZSwgcGFyc2UtPmNsdXN0ZXJfb2Zmc2V0LCBUUlVFKTsKLSAgICAgICAgICBERUJVR19FTEVNRU5UX1NUT1AgKHBhcnNlLCAmZWJtbCwgIlNpbXBsZUJsb2NrIiwgcmV0KTsKLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfb3V0cHV0IChwYXJzZSwgZWJtbC5idWYsIEZBTFNFKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVRUQUNITUVOVFM6Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICBpZiAoIXBhcnNlLT5jb21tb24uYXR0YWNobWVudHNfcGFyc2VkKSB7Ci0gICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfYXR0YWNobWVudHMgKCZwYXJzZS0+Y29tbW9uLAotICAgICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKHBhcnNlKSwgJmVibWwpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX3NlbmRfdGFncyAocGFyc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfb3V0cHV0IChwYXJzZSwgZWJtbC5idWYsIEZBTFNFKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVEFHUzoKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9tZXRhZGF0YSAoJnBhcnNlLT5jb21tb24sCi0gICAgICAgICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKHBhcnNlKSwgJmVibWwpOwotICAgICAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfc2VuZF90YWdzIChwYXJzZSk7Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX2FjY3VtdWxhdGVfc3RyZWFtaGVhZGVyIChwYXJzZSwgZWJtbC5idWYpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSUzoKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9jaGFwdGVycyAoJnBhcnNlLT5jb21tb24sICZlYm1sKTsKLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfb3V0cHV0IChwYXJzZSwgZWJtbC5idWYsIEZBTFNFKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfU0VFS0hFQUQ6Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfY29udGVudHMgKHBhcnNlLCAmZWJtbCk7Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX291dHB1dCAocGFyc2UsIGVibWwuYnVmLCBGQUxTRSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NVRVM6Ci0gICAgICAgICAgR1NUX1JFQURfQ0hFQ0sgKGdzdF9tYXRyb3NrYV9wYXJzZV90YWtlIChwYXJzZSwgcmVhZCwgJmVibWwpKTsKLSAgICAgICAgICBpZiAoIXBhcnNlLT5jb21tb24uaW5kZXhfcGFyc2VkKSB7Ci0gICAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfaW5kZXggKCZwYXJzZS0+Y29tbW9uLCAmZWJtbCk7Ci0gICAgICAgICAgICAvKiBvbmx5IHB1c2ggYmFzZWQ7IGRlbGF5ZWQgaW5kZXggYnVpbGRpbmcgKi8KLSAgICAgICAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sKLSAgICAgICAgICAgICAgICAmJiBwYXJzZS0+Y29tbW9uLnN0YXRlID09IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NFRUspIHsKLSAgICAgICAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICAgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgICAgICAgICAgICBldmVudCA9IHBhcnNlLT5zZWVrX2V2ZW50OwotICAgICAgICAgICAgICBwYXJzZS0+c2Vla19ldmVudCA9IE5VTEw7Ci0gICAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0KLSAgICAgICAgICAgICAgZ19hc3NlcnQgKGV2ZW50KTsKLSAgICAgICAgICAgICAgLyogdW5saWtlbHkgdG8gZmFpbCwgc2luY2Ugd2UgbWFuYWdlZCB0byBzZWVrIHRvIHRoaXMgcG9pbnQgKi8KLSAgICAgICAgICAgICAgaWYgKCFnc3RfbWF0cm9za2FfcGFyc2VfaGFuZGxlX3NlZWtfZXZlbnQgKHBhcnNlLCBOVUxMLCBldmVudCkpCi0gICAgICAgICAgICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLSAgICAgICAgICAgICAgLyogcmVzdW1lIGRhdGEgaGFuZGxpbmcsIG1haW4gdGhyZWFkIGNsZWFyIHRvIHNlZWsgYWdhaW4gKi8KLSAgICAgICAgICAgICAgR1NUX09CSkVDVF9MT0NLIChwYXJzZSk7Ci0gICAgICAgICAgICAgIHBhcnNlLT5jb21tb24uc3RhdGUgPSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9EQVRBOwotICAgICAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfb3V0cHV0IChwYXJzZSwgZWJtbC5idWYsIEZBTFNFKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfUE9TSVRJT046Ci0gICAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1BSRVZTSVpFOgotICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9FTkNSWVBURURCTE9DSzoKLSAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfU0lMRU5UVFJBQ0tTOgotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLAotICAgICAgICAgICAgICAiU2tpcHBpbmcgQ2x1c3RlciBzdWJlbGVtZW50IDB4JXggLSBpZ25vcmluZyIsIGlkKTsKLSAgICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgc2tpcDoKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInNraXBwaW5nIEVsZW1lbnQgMHgleCIsIGlkKTsKLSAgICAgICAgICBHU1RfUkVBRF9DSEVDSyAoZ3N0X21hdHJvc2thX3BhcnNlX3Rha2UgKHBhcnNlLCByZWFkLCAmZWJtbCkpOwotICAgICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9vdXRwdXQgKHBhcnNlLCBlYm1sLmJ1ZiwgRkFMU0UpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAocmV0ID09IEdTVF9GTE9XX1BBUlNFKQotICAgIGdvdG8gcGFyc2VfZmFpbGVkOwotCi1leGl0OgotICBnc3RfZWJtbF9yZWFkX2NsZWFyICgmZWJtbCk7Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1yZWFkX2Vycm9yOgotICB7Ci0gICAgLyogc2ltcGx5IGV4aXQsIG1heWJlIG5vdCBlbm91Z2ggZGF0YSB5ZXQgKi8KLSAgICAvKiBubyBlYm1sIHRvIGNsZWFyIGlmIHJlYWQgZXJyb3IgKi8KLSAgICByZXR1cm4gcmV0OwotICB9Ci1wYXJzZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocGFyc2UsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gcGFyc2UgRWxlbWVudCAweCV4IiwgaWQpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLW5vdF9zdHJlYW1hYmxlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBhcnNlLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiRmlsZSBsYXlvdXQgZG9lcyBub3QgcGVybWl0IHN0cmVhbWluZyIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLSNpZiAwCi1ub190cmFja3M6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocGFyc2UsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJObyBUcmFja3MgZWxlbWVudCBmb3VuZCIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLSNlbmRpZgotaW52YWxpZF9oZWFkZXI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocGFyc2UsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJJbnZhbGlkIGhlYWRlciIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLXNlZWtfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHBhcnNlLCBTVFJFQU0sIERFTVVYLCAoTlVMTCksICgiRmFpbGVkIHRvIHNlZWsiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBleGl0OwotICB9Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3BhcnNlX2xvb3AgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgbGVuZ3RoOwotICBndWludCBuZWVkZWQ7Ci0KLSAgLyogSWYgd2UgaGF2ZSB0byBjbG9zZSBhIHNlZ21lbnQsIHNlbmQgYSBuZXcgc2VnbWVudCB0byBkbyB0aGlzIG5vdyAqLwotICBpZiAoR19MSUtFTFkgKHBhcnNlLT5jb21tb24uc3RhdGUgPT0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQSkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAocGFyc2UtPmNsb3NlX3NlZ21lbnQpKSB7Ci0gICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfc2VuZF9ldmVudCAocGFyc2UsIHBhcnNlLT5jbG9zZV9zZWdtZW50KTsKLSAgICAgIHBhcnNlLT5jbG9zZV9zZWdtZW50ID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHBhcnNlLT5uZXdfc2VnbWVudCkpIHsKLSAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9zZW5kX2V2ZW50IChwYXJzZSwgcGFyc2UtPm5ld19zZWdtZW50KTsKLSAgICAgIHBhcnNlLT5uZXdfc2VnbWVudCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKCZwYXJzZS0+Y29tbW9uLAotICAgICAgR1NUX0VMRU1FTlRfQ0FTVCAocGFyc2UpLCAmaWQsICZsZW5ndGgsICZuZWVkZWQpOwotICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykKLSAgICBnb3RvIGVvczsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIGlmIChnc3RfbWF0cm9za2FfcGFyc2VfY2hlY2tfcGFyc2VfZXJyb3IgKHBhcnNlKSkKLSAgICAgIGdvdG8gcGF1c2U7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiT2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgRWxlbWVudCBpZCAweCV4LCAiCi0gICAgICAic2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIG5lZWRlZCAlZCIsIHBhcnNlLT5vZmZzZXQsIGlkLAotICAgICAgbGVuZ3RoLCBuZWVkZWQpOwotCi0gIHJldCA9IGdzdF9tYXRyb3NrYV9wYXJzZV9wYXJzZV9pZCAocGFyc2UsIGlkLCBsZW5ndGgsIG5lZWRlZCk7Ci0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfRU9TKQotICAgIGdvdG8gZW9zOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gcGF1c2U7Ci0KLSAgLyogY2hlY2sgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiBhIGNvbmZpZ3VyZWQgc2VnbWVudCAqLwotICBpZiAoR19MSUtFTFkgKHBhcnNlLT5zcmMtPmxlbikpIHsKLSAgICBndWludCBpOwotCi0gICAgZ19hc3NlcnQgKHBhcnNlLT5udW1fc3RyZWFtcyA9PSBwYXJzZS0+c3JjLT5sZW4pOwotICAgIGZvciAoaSA9IDA7IGkgPCBwYXJzZS0+c3JjLT5sZW47IGkrKykgewotICAgICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKmNvbnRleHQgPSBnX3B0cl9hcnJheV9pbmRleCAocGFyc2UtPnNyYywgaSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChjb250ZXh0LT5wYWQsICJwb3MgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGNvbnRleHQtPnBvcykpOwotICAgICAgaWYgKGNvbnRleHQtPmVvcyA9PSBGQUxTRSkKLSAgICAgICAgZ290byBuZXh0OwotICAgIH0KLQotICAgIEdTVF9JTkZPX09CSkVDVCAocGFyc2UsICJBbGwgc3RyZWFtcyBhcmUgRU9TIik7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gZW9zOwotICB9Ci0KLW5leHQ6Ci0gIGlmIChHX1VOTElLRUxZIChwYXJzZS0+b2Zmc2V0ID09Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2dldF9sZW5ndGggKCZwYXJzZS0+Y29tbW9uKSkpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJSZWFjaGVkIGVuZCBvZiBzdHJlYW0iKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBlb3M7Ci0gIH0KLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1lb3M6Ci0gIHsKLSAgICBpZiAocGFyc2UtPnNlZ21lbnQucmF0ZSA8IDAuMCkgewotICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3BhcnNlX3NlZWtfdG9fcHJldmlvdXNfa2V5ZnJhbWUgKHBhcnNlKTsKLSAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogZmFsbC10aHJvdWdoICovCi0gIH0KLXBhdXNlOgotICB7Ci0gICAgY29uc3QgZ2NoYXIgKnJlYXNvbiA9IGdzdF9mbG93X2dldF9uYW1lIChyZXQpOwotICAgIGdib29sZWFuIHB1c2hfZW9zID0gRkFMU0U7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsIHJlYXNvbik7Ci0gICAgcGFyc2UtPnNlZ21lbnRfcnVubmluZyA9IEZBTFNFOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocGFyc2UtPmNvbW1vbi5zaW5rcGFkKTsKLQotICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAvKiBwZXJmb3JtIEVPUyBsb2dpYyAqLwotCi0gICAgICAvKiBDbG9zZSB0aGUgc2VnbWVudCwgaS5lLiB1cGRhdGUgc2VnbWVudCBzdG9wIHdpdGggdGhlIGR1cmF0aW9uCi0gICAgICAgKiBpZiBubyBzdG9wIHdhcyBzZXQgKi8KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocGFyc2UtPmxhc3Rfc3RvcF9lbmQpICYmCi0gICAgICAgICAgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwYXJzZS0+c2VnbWVudC5zdG9wKSkgewotICAgICAgICBHc3RFdmVudCAqZXZlbnQgPQotICAgICAgICAgICAgZ3N0X2V2ZW50X25ld19uZXdfc2VnbWVudF9mdWxsIChUUlVFLCBwYXJzZS0+c2VnbWVudC5yYXRlLAotICAgICAgICAgICAgcGFyc2UtPnNlZ21lbnQuYXBwbGllZF9yYXRlLCBwYXJzZS0+c2VnbWVudC5mb3JtYXQsCi0gICAgICAgICAgICBwYXJzZS0+c2VnbWVudC5zdGFydCwKLSAgICAgICAgICAgIE1BWCAocGFyc2UtPmxhc3Rfc3RvcF9lbmQsIHBhcnNlLT5zZWdtZW50LnN0YXJ0KSwKLSAgICAgICAgICAgIHBhcnNlLT5zZWdtZW50LnRpbWUpOwotICAgICAgICBnc3RfbWF0cm9za2FfcGFyc2Vfc2VuZF9ldmVudCAocGFyc2UsIGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgaWYgKHBhcnNlLT5zZWdtZW50LmZsYWdzICYgR1NUX1NFRUtfRkxBR19TRUdNRU5UKSB7Ci0gICAgICAgIGdpbnQ2NCBzdG9wOwotCi0gICAgICAgIC8qIGZvciBzZWdtZW50IHBsYXliYWNrIHdlIG5lZWQgdG8gcG9zdCB3aGVuIChpbiBzdHJlYW0gdGltZSkKLSAgICAgICAgICogd2Ugc3RvcHBlZCwgdGhpcyBpcyBlaXRoZXIgc3RvcCAod2hlbiBzZXQpIG9yIHRoZSBkdXJhdGlvbi4gKi8KLSAgICAgICAgaWYgKChzdG9wID0gcGFyc2UtPnNlZ21lbnQuc3RvcCkgPT0gLTEpCi0gICAgICAgICAgc3RvcCA9IHBhcnNlLT5sYXN0X3N0b3BfZW5kOwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXJzZSwgIlNlbmRpbmcgc2VnbWVudCBkb25lLCBhdCBlbmQgb2Ygc2VnbWVudCIpOwotICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UIChwYXJzZSksCi0gICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfc2VnbWVudF9kb25lIChHU1RfT0JKRUNUIChwYXJzZSksIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgICBzdG9wKSk7Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9wYXJzZV9zZW5kX2V2ZW50IChwYXJzZSwKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lIChHU1RfRk9STUFUX1RJTUUsIHN0b3ApKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2hfZW9zID0gVFJVRTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJldCA9PSBHU1RfRkxPV19OT1RfTElOS0VEIHx8IHJldCA8IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogZm9yIGZhdGFsIGVycm9ycyB3ZSBwb3N0IGFuIGVycm9yIG1lc3NhZ2UgKi8KLSAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHBhcnNlLCByZXQpOwotICAgICAgcHVzaF9lb3MgPSBUUlVFOwotICAgIH0KLSAgICBpZiAocHVzaF9lb3MpIHsKLSAgICAgIC8qIHNlbmQgRU9TLCBhbmQgcHJldmVudCBoYW5naW5nIGlmIG5vIHN0cmVhbXMgeWV0ICovCi0gICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJTZW5kaW5nIEVPUywgYXQgZW5kIG9mIHN0cmVhbSIpOwotICAgICAgaWYgKCFnc3RfbWF0cm9za2FfcGFyc2Vfc2VuZF9ldmVudCAocGFyc2UsIGdzdF9ldmVudF9uZXdfZW9zICgpKSAmJgotICAgICAgICAgIChyZXQgPT0gR1NUX0ZMT1dfRU9TKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAocGFyc2UsIFNUUkVBTSwgREVNVVgsCi0gICAgICAgICAgICAoTlVMTCksICgiZ290IGVvcyBidXQgbm8gc3RyZWFtcyAoeWV0KSIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0jZW5kaWYKLQotLyoKLSAqIENyZWF0ZSBhbmQgcHVzaCBhIGZsdXNoaW5nIHNlZWsgZXZlbnQgdXBzdHJlYW0KLSAqLwotc3RhdGljIGdib29sZWFuCi1wZXJmb3JtX3NlZWtfdG9fb2Zmc2V0IChHc3RNYXRyb3NrYVBhcnNlICogcGFyc2UsIGd1aW50NjQgb2Zmc2V0KQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlcyA9IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJTZWVraW5nIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0KLSAgZXZlbnQgPQotICAgICAgZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfQllURVMsCi0gICAgICBHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSwgR1NUX1NFRUtfVFlQRV9TRVQsIG9mZnNldCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfTk9ORSwgLTEpOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocGFyc2UtPmNvbW1vbi5zaW5rcGFkLCBldmVudCk7Ci0KLSAgLyogbmV3c2VnbWVudCBldmVudCB3aWxsIHVwZGF0ZSBvZmZzZXQgKi8KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIEZvcmdlIGVtcHR5IGRlZmF1bHQgY2FwcyB3aGVuIGFsbCB3ZSBrbm93IGlzIHRoZSBzdHJlYW0ncyBFQk1MCi0gKiB0eXBlIGFuZCB3aGV0aGVyIGl0IGhhcyB2aWRlbyBvciBub3QuCi0gKgotICogRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHZpZGVvL3gtbWF0cm9za2EtM2QgaWYgcG9zc2libGUKLSAqLwotc3RhdGljIEdzdENhcHMgKgotZ3N0X21hdHJvc2thX3BhcnNlX2ZvcmdlX2NhcHMgKGdib29sZWFuIGlzX3dlYm0sIGdib29sZWFuIGhhc192aWRlbykKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBpZiAoaXNfd2VibSkgewotICAgIGlmIChoYXNfdmlkZW8pCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3dlYm0iKTsKLSAgICBlbHNlCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3dlYm0iKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoaGFzX3ZpZGVvKQotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJ2aWRlby94LW1hdHJvc2thIik7Ci0gICAgZWxzZQotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhdWRpby94LW1hdHJvc2thIik7Ci0gIH0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE1hdHJvc2thUGFyc2UgKnBhcnNlID0gR1NUX01BVFJPU0tBX1BBUlNFIChwYXJlbnQpOwotICBndWludCBhdmFpbGFibGU7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50IG5lZWRlZCA9IDA7Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgbGVuZ3RoOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKGJ1ZmZlcikpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJnb3QgRElTQ09OVCIpOwotICAgIGdzdF9hZGFwdGVyX2NsZWFyIChwYXJzZS0+Y29tbW9uLmFkYXB0ZXIpOwotICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9yZXNldF9zdHJlYW1zICgmcGFyc2UtPmNvbW1vbiwKLSAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgRkFMU0UpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gIH0KLQotICBnc3RfYWRhcHRlcl9wdXNoIChwYXJzZS0+Y29tbW9uLmFkYXB0ZXIsIGJ1ZmZlcik7Ci0gIGJ1ZmZlciA9IE5VTEw7Ci0KLW5leHQ6Ci0gIGF2YWlsYWJsZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocGFyc2UtPmNvbW1vbi5hZGFwdGVyKTsKLQotICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19pZF9sZW5ndGhfcHVzaCAoJnBhcnNlLT5jb21tb24sCi0gICAgICBHU1RfRUxFTUVOVF9DQVNUIChwYXJzZSksICZpZCwgJmxlbmd0aCwgJm5lZWRlZCk7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykpCi0gICAgcmV0dXJuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJPZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBFbGVtZW50IGlkIDB4JXgsICIKLSAgICAgICJzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgbmVlZGVkICVkLCBhdmFpbGFibGUgJWQiLAotICAgICAgcGFyc2UtPmNvbW1vbi5vZmZzZXQsIGlkLCBsZW5ndGgsIG5lZWRlZCwgYXZhaWxhYmxlKTsKLQotICBpZiAobmVlZGVkID4gYXZhaWxhYmxlKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICByZXQgPSBnc3RfbWF0cm9za2FfcGFyc2VfcGFyc2VfaWQgKHBhcnNlLCBpZCwgbGVuZ3RoLCBuZWVkZWQpOwotICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgIC8qIG5lZWQgbW9yZSBkYXRhICovCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9IGVsc2UgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIHJldHVybiByZXQ7Ci0gIH0gZWxzZQotICAgIGdvdG8gbmV4dDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfcGFyc2VfaGFuZGxlX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdE1hdHJvc2thUGFyc2UgKnBhcnNlID0gR1NUX01BVFJPU0tBX1BBUlNFIChHU1RfUEFEX1BBUkVOVCAocGFkKSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAiaGF2ZSBldmVudCB0eXBlICVzOiAlcCBvbiBzaW5rIHBhZCIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgZXZlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgY29uc3QgR3N0U2VnbWVudCAqc2VnbWVudDsKLQotICAgICAgLyogc29tZSBkZWJ1ZyBvdXRwdXQgKi8KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9zZWdtZW50IChldmVudCwgJnNlZ21lbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsCi0gICAgICAgICAgInJlY2VpdmVkIGZvcm1hdCAlZCBuZXdzZWdtZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICBzZWdtZW50LT5mb3JtYXQsIHNlZ21lbnQpOwotCi0gICAgICBpZiAocGFyc2UtPmNvbW1vbi5zdGF0ZSA8IEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEEpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJzdGlsbCBzdGFydGluZyIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdlIG9ubHkgZXhwZWN0IGEgQllURSBzZWdtZW50LCBlLmcuIGZvbGxvd2luZyBhIHNlZWsgKi8KLSAgICAgIGlmIChzZWdtZW50LT5mb3JtYXQgIT0gR1NUX0ZPUk1BVF9CWVRFUykgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgInVuc3VwcG9ydGVkIHNlZ21lbnQgZm9ybWF0LCBpZ25vcmluZyIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiY2xlYXJpbmcgc2VnbWVudCBzdGF0ZSIpOwotICAgICAgLyogY2xlYXIgY3VycmVudCBzZWdtZW50IGxlZnRvdmVyICovCi0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocGFyc2UtPmNvbW1vbi5hZGFwdGVyKTsKLSAgICAgIC8qIGFuZCBzb21lIHN0cmVhbWluZyBzZXR1cCAqLwotICAgICAgcGFyc2UtPmNvbW1vbi5vZmZzZXQgPSBzZWdtZW50LT5zdGFydDsKLSAgICAgIC8qIGRvIG5vdCBrbm93IHdoZXJlIHdlIGFyZTsKLSAgICAgICAqIG5lZWQgdG8gY29tZSBhY3Jvc3MgYSBjbHVzdGVyIGFuZCBnZW5lcmF0ZSBuZXdzZWdtZW50ICovCi0gICAgICBwYXJzZS0+Y29tbW9uLnNlZ21lbnQucG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgcGFyc2UtPmNsdXN0ZXJfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwYXJzZS0+Y2x1c3Rlcl9vZmZzZXQgPSAwOwotICAgICAgcGFyc2UtPm5lZWRfbmV3c2VnbWVudCA9IFRSVUU7Ci0gICAgICAvKiBidXQga2VlcCBzb21lIG9mIHRoZSB1cHN0cmVhbSBzZWdtZW50ICovCi0gICAgICBwYXJzZS0+Y29tbW9uLnNlZ21lbnQucmF0ZSA9IHNlZ21lbnQtPnJhdGU7Ci0gICAgZXhpdDoKLSAgICAgIC8qIGNoYWluIHdpbGwgc2VuZCBpbml0aWFsIG5ld3NlZ21lbnQgYWZ0ZXIgcGFkcyBoYXZlIGJlZW4gYWRkZWQsCi0gICAgICAgKiBvciBvdGhlcndpc2UgY29tZSB1cCB3aXRoIG9uZSAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFyc2UsICJlYXRpbmcgZXZlbnQiKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgewotICAgICAgaWYgKHBhcnNlLT5jb21tb24uc3RhdGUgIT0gR1NUX01BVFJPU0tBX1JFQURfU1RBVEVfREFUQSkgewotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHBhcnNlLCBTVFJFQU0sIERFTVVYLAotICAgICAgICAgICAgKE5VTEwpLCAoImdvdCBlb3MgYW5kIGRpZG4ndCByZWNlaXZlIGEgY29tcGxldGUgaGVhZGVyIG9iamVjdCIpKTsKLSAgICAgIH0gZWxzZSBpZiAocGFyc2UtPmNvbW1vbi5udW1fc3RyZWFtcyA9PSAwKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXJzZSwgU1RSRUFNLCBERU1VWCwKLSAgICAgICAgICAgIChOVUxMKSwgKCJnb3QgZW9zIGJ1dCBubyBzdHJlYW1zICh5ZXQpIikpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X21hdHJvc2thX3BhcnNlX3NlbmRfZXZlbnQgKHBhcnNlLCBldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICB7Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocGFyc2UtPmNvbW1vbi5hZGFwdGVyKTsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3Jlc2V0X3N0cmVhbXMgKCZwYXJzZS0+Y29tbW9uLAotICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIFRSVUUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHBhcnNlKTsKLSAgICAgIHBhcnNlLT5jb21tb24uc2VnbWVudC5wb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICBwYXJzZS0+Y2x1c3Rlcl90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHBhcnNlLT5jbHVzdGVyX29mZnNldCA9IDA7Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfcGFyc2Vfc2V0X2luZGV4IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0SW5kZXggKiBpbmRleCkKLXsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKGVsZW1lbnQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICBpZiAocGFyc2UtPmNvbW1vbi5lbGVtZW50X2luZGV4KQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhcnNlLT5jb21tb24uZWxlbWVudF9pbmRleCk7Ci0gIHBhcnNlLT5jb21tb24uZWxlbWVudF9pbmRleCA9IGluZGV4ID8gZ3N0X29iamVjdF9yZWYgKGluZGV4KSA6IE5VTEw7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYXJzZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiU2V0IGluZGV4ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgcGFyc2UtPmNvbW1vbi5lbGVtZW50X2luZGV4KTsKLX0KLQotc3RhdGljIEdzdEluZGV4ICoKLWdzdF9tYXRyb3NrYV9wYXJzZV9nZXRfaW5kZXggKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RJbmRleCAqcmVzdWx0ID0gTlVMTDsKLSAgR3N0TWF0cm9za2FQYXJzZSAqcGFyc2UgPSBHU1RfTUFUUk9TS0FfUEFSU0UgKGVsZW1lbnQpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFyc2UpOwotICBpZiAocGFyc2UtPmNvbW1vbi5lbGVtZW50X2luZGV4KQotICAgIHJlc3VsdCA9IGdzdF9vYmplY3RfcmVmIChwYXJzZS0+Y29tbW9uLmVsZW1lbnRfaW5kZXgpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFyc2UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcnNlLCAiUmV0dXJuaW5nIGluZGV4ICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfbWF0cm9za2FfcGFyc2VfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RNYXRyb3NrYVBhcnNlICpwYXJzZSA9IEdTVF9NQVRST1NLQV9QQVJTRSAoZWxlbWVudCk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLQotICAvKiBoYW5kbGUgdXB3YXJkcyBzdGF0ZSBjaGFuZ2VzIGhlcmUgKi8KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgLyogaGFuZGxlIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzICovCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfbWF0cm9za2FfcGFyc2VfcmVzZXQgKEdTVF9FTEVNRU5UIChwYXJzZSkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9wYXJzZV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnc3RfcmlmZl9pbml0ICgpOwotCi0gIC8qIGNyZWF0ZSBhbiBlbGVtZW50ZmFjdG9yeSBmb3IgdGhlIG1hdHJvc2thX3BhcnNlIGVsZW1lbnQgKi8KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibWF0cm9za2FwYXJzZSIsCi0gICAgICAgICAgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfTUFUUk9TS0FfUEFSU0UpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1wYXJzZS5oIGIvZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNTk4ZjIuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdHJvc2thL21hdHJvc2thLXBhcnNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogR1N0cmVhbWVyIE1hdHJvc2thIG11eGVyL2RlbXV4ZXIKLSAqIChjKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqIChjKSAyMDExIERlYmFyc2hpIFJheSA8cmlzaGlAZ251Lm9yZz4KLSAqCi0gKiBtYXRyb3NrYS1wYXJzZS5oOiBtYXRyb3NrYSBmaWxlL3N0cmVhbSBwYXJzZWVyIGRlZmluaXRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX01BVFJPU0tBX1BBUlNFX0hfXwotI2RlZmluZSBfX0dTVF9NQVRST1NLQV9QQVJTRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImVibWwtcmVhZC5oIgotI2luY2x1ZGUgIm1hdHJvc2thLWlkcy5oIgotI2luY2x1ZGUgIm1hdHJvc2thLXJlYWQtY29tbW9uLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9NQVRST1NLQV9QQVJTRSBcCi0gIChnc3RfbWF0cm9za2FfcGFyc2VfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9NQVRST1NLQV9QQVJTRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfTUFUUk9TS0FfUEFSU0UsIEdzdE1hdHJvc2thUGFyc2UpKQotI2RlZmluZSBHU1RfTUFUUk9TS0FfUEFSU0VfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9NQVRST1NLQV9QQVJTRSwgR3N0TWF0cm9za2FQYXJzZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX01BVFJPU0tBX1BBUlNFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9NQVRST1NLQV9QQVJTRSkpCi0jZGVmaW5lIEdTVF9JU19NQVRST1NLQV9QQVJTRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX01BVFJPU0tBX1BBUlNFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hdHJvc2thUGFyc2UgewotICBHc3RFbGVtZW50ICAgICAgICAgICAgICBwYXJlbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLQotICBHc3RNYXRyb3NrYVJlYWRDb21tb24gICAgY29tbW9uOwotCi0gIC8qIHBhZHMgKi8KLSAgR3N0UGFkICAgICAgICAgICAgICAgICAgKnNyY3BhZDsKLSAgR3N0Q2xvY2sgICAgICAgICAgICAgICAgKmNsb2NrOwotICBndWludCAgICAgICAgICAgICAgICAgICAgbnVtX3Zfc3RyZWFtczsKLSAgZ3VpbnQgICAgICAgICAgICAgICAgICAgIG51bV9hX3N0cmVhbXM7Ci0gIGd1aW50ICAgICAgICAgICAgICAgICAgICBudW1fdF9zdHJlYW1zOwotCi0gIEdzdEJ1ZmZlciAqc3RyZWFtaGVhZGVyOwotICBnYm9vbGVhbiBwdXNoZWRfaGVhZGVyczsKLSAgR3N0Q2xvY2tUaW1lIGxhc3RfdGltZXN0YW1wOwotCi0gIC8qIHN0YXRlICovCi0gIC8vZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIHN0cmVhbWluZzsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgICAgIHNlZWtfYmxvY2s7Ci0gIGdib29sZWFuICAgICAgICAgICAgICAgICBzZWVrX2ZpcnN0OwotCi0gIC8qIGRpZCB3ZSBwYXJzZSBjdWVzL3RyYWNrcy9zZWdtZW50aW5mbyBhbHJlYWR5PyAqLwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgdHJhY2tzX3BhcnNlZDsKLSAgR0xpc3QgICAgICAgICAgICAgICAgICAgKnNlZWtfcGFyc2VkOwotCi0gIC8qIGtlZXBpbmcgdHJhY2sgb2YgcGxheWJhY2sgcG9zaXRpb24gKi8KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIHNlZ21lbnRfcnVubmluZzsKLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgICAgIGxhc3Rfc3RvcF9lbmQ7Ci0KLSAgR3N0RXZlbnQgICAgICAgICAgICAgICAgKmNsb3NlX3NlZ21lbnQ7Ci0gIEdzdEV2ZW50ICAgICAgICAgICAgICAgICpuZXdfc2VnbWVudDsKLQotICAvKiBzb21lIHN0YXRlIHNhdmluZyAqLwotICBHc3RDbG9ja1RpbWUgICAgICAgICAgICAgY2x1c3Rlcl90aW1lOwotICBndWludDY0ICAgICAgICAgICAgICAgICAgY2x1c3Rlcl9vZmZzZXQ7Ci0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBmaXJzdF9jbHVzdGVyX29mZnNldDsKLSAgZ3VpbnQ2NCAgICAgICAgICAgICAgICAgIG5leHRfY2x1c3Rlcl9vZmZzZXQ7Ci0KLSAgLyogaW5kZXggc3R1ZmYgKi8KLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIHNlZWthYmxlOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgYnVpbGRpbmdfaW5kZXg7Ci0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBpbmRleF9vZmZzZXQ7Ci0gIEdzdEV2ZW50ICAgICAgICAgICAgICAgICpzZWVrX2V2ZW50OwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgbmVlZF9uZXdzZWdtZW50OwotCi0gIC8qIHJldmVyc2UgcGxheWJhY2sgKi8KLSAgR0FycmF5ICAgICAgICAgICAgICAgICAgKnNlZWtfaW5kZXg7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICAgICBzZWVrX2VudHJ5OwotfSBHc3RNYXRyb3NrYVBhcnNlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0TWF0cm9za2FQYXJzZUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudDsKLX0gR3N0TWF0cm9za2FQYXJzZUNsYXNzOwotCi1nYm9vbGVhbiBnc3RfbWF0cm9za2FfcGFyc2VfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01BVFJPU0tBX1BBUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL21hdHJvc2thLXJlYWQtY29tbW9uLmMgYi9nc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIzNTEyOS4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uYworKysgL2Rldi9udWxsCkBAIC0xLDMwMTAgKzAsMCBAQAotLyogR1N0cmVhbWVyIE1hdHJvc2thIG11eGVyL2RlbXV4ZXIKLSAqIChjKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqIChjKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiAoYykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKiAoYykgMjAxMSBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0gKgotICogbWF0cm9za2EtcmVhZC1jb21tb24uYzogc2hhcmVkIGJ5IG1hdHJvc2thIGZpbGUvc3RyZWFtIGRlbXV4ZXIgYW5kIHBhcnNlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZmRlZiBIQVZFX1pMSUIKLSNpbmNsdWRlIDx6bGliLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfQloyCi0jaW5jbHVkZSA8YnpsaWIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3RhZy90YWcuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3R0eXBlZmluZGhlbHBlci5oPgotCi0jaW5jbHVkZSAibHpvLmgiCi0KLSNpbmNsdWRlICJlYm1sLXJlYWQuaCIKLSNpbmNsdWRlICJtYXRyb3NrYS1yZWFkLWNvbW1vbi5oIgotI2luY2x1ZGUgIm1hdHJvc2thLWlkcy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKG1hdHJvc2thcmVhZGNvbW1vbl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBtYXRyb3NrYXJlYWRjb21tb25fZGVidWcKLQotI2RlZmluZSBERUJVR19FTEVNRU5UX1NUQVJUKGNvbW1vbiwgZWJtbCwgZWxlbWVudCkgXAotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIlBhcnNpbmcgIiBlbGVtZW50ICIgZWxlbWVudCBhdCBvZmZzZXQgJSIgXAotICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpKQotCi0jZGVmaW5lIERFQlVHX0VMRU1FTlRfU1RPUChjb21tb24sIGVibWwsIGVsZW1lbnQsIHJldCkgXAotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIlBhcnNpbmcgIiBlbGVtZW50ICIgZWxlbWVudCAiIFwKLSAgICAgICAgIiBmaW5pc2hlZCB3aXRoICclcyciLCBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSkKLQotI2RlZmluZSBHU1RfTUFUUk9TS0FfVE9DX1VJRF9DSEFQVEVSICJjaGFwdGVyIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVE9DX1VJRF9FRElUSU9OICJlZGl0aW9uIgotI2RlZmluZSBHU1RfTUFUUk9TS0FfVE9DX1VJRF9FTVBUWSAiZW1wdHkiCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFRhZ0xpc3QgKnJlc3VsdDsKLSAgZ3VpbnQ2NCB0YXJnZXRfdHlwZV92YWx1ZTsKLSAgZ2NoYXIgKnRhcmdldF90eXBlOwotICBnYm9vbGVhbiBhdWRpb19vbmx5OwotfSBUYXJnZXRUeXBlQ29udGV4dDsKLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9kZWNvbXByZXNzX2RhdGEgKEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZyAqIGVuYywKLSAgICBncG9pbnRlciAqIGRhdGFfb3V0LCBnc2l6ZSAqIHNpemVfb3V0LAotICAgIEdzdE1hdHJvc2thVHJhY2tDb21wcmVzc2lvbkFsZ29yaXRobSBhbGdvKQotewotICBndWludDggKm5ld19kYXRhID0gTlVMTDsKLSAgZ3VpbnQgbmV3X3NpemUgPSAwOwotICBndWludDggKmRhdGEgPSAqZGF0YV9vdXQ7Ci0gIGd1aW50IHNpemUgPSAqc2l6ZV9vdXQ7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgaWYgKGFsZ28gPT0gR1NUX01BVFJPU0tBX1RSQUNLX0NPTVBSRVNTSU9OX0FMR09SSVRITV9aTElCKSB7Ci0jaWZkZWYgSEFWRV9aTElCCi0gICAgLyogemxpYiBlbmNvZGVkIGRhdGEgKi8KLSAgICB6X3N0cmVhbSB6c3RyZWFtOwotICAgIGd1aW50IG9yaWdfc2l6ZTsKLSAgICBpbnQgcmVzdWx0OwotCi0gICAgb3JpZ19zaXplID0gc2l6ZTsKLSAgICB6c3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKSAwOwotICAgIHpzdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKSAwOwotICAgIHpzdHJlYW0ub3BhcXVlID0gKHZvaWRwZikgMDsKLSAgICBpZiAoaW5mbGF0ZUluaXQgKCZ6c3RyZWFtKSAhPSBaX09LKSB7Ci0gICAgICBHU1RfV0FSTklORyAoInpsaWIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgenN0cmVhbS5uZXh0X2luID0gKEJ5dGVmICopIGRhdGE7Ci0gICAgenN0cmVhbS5hdmFpbF9pbiA9IG9yaWdfc2l6ZTsKLSAgICBuZXdfc2l6ZSA9IG9yaWdfc2l6ZTsKLSAgICBuZXdfZGF0YSA9IGdfbWFsbG9jIChuZXdfc2l6ZSk7Ci0gICAgenN0cmVhbS5hdmFpbF9vdXQgPSBuZXdfc2l6ZTsKLSAgICB6c3RyZWFtLm5leHRfb3V0ID0gKEJ5dGVmICopIG5ld19kYXRhOwotCi0gICAgZG8gewotICAgICAgcmVzdWx0ID0gaW5mbGF0ZSAoJnpzdHJlYW0sIFpfTk9fRkxVU0gpOwotICAgICAgaWYgKHJlc3VsdCA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCAhPSBaX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiaW5mbGF0ZSgpIHJldHVybmVkICVkIiwgcmVzdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIG5ld19zaXplICs9IDQwOTY7Ci0gICAgICBuZXdfZGF0YSA9IGdfcmVhbGxvYyAobmV3X2RhdGEsIG5ld19zaXplKTsKLSAgICAgIHpzdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYgKikgKG5ld19kYXRhICsgenN0cmVhbS50b3RhbF9vdXQpOwotICAgICAgenN0cmVhbS5hdmFpbF9vdXQgKz0gNDA5NjsKLSAgICB9IHdoaWxlICh6c3RyZWFtLmF2YWlsX2luID4gMCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IFpfU1RSRUFNX0VORCkgewotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnX2ZyZWUgKG5ld19kYXRhKTsKLSAgICB9IGVsc2UgewotICAgICAgbmV3X3NpemUgPSB6c3RyZWFtLnRvdGFsX291dDsKLSAgICB9Ci0gICAgaW5mbGF0ZUVuZCAoJnpzdHJlYW0pOwotCi0jZWxzZQotICAgIEdTVF9XQVJOSU5HICgiemxpYiBlbmNvZGVkIHRyYWNrcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgIHJldCA9IEZBTFNFOwotICAgIGdvdG8gb3V0OwotI2VuZGlmCi0gIH0gZWxzZSBpZiAoYWxnbyA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfQ09NUFJFU1NJT05fQUxHT1JJVEhNX0JaTElCKSB7Ci0jaWZkZWYgSEFWRV9CWjIKLSAgICAvKiBiemlwMiBlbmNvZGVkIGRhdGEgKi8KLSAgICBiel9zdHJlYW0gYnpzdHJlYW07Ci0gICAgZ3VpbnQgb3JpZ19zaXplOwotICAgIGludCByZXN1bHQ7Ci0KLSAgICBienN0cmVhbS5iemFsbG9jID0gTlVMTDsKLSAgICBienN0cmVhbS5iemZyZWUgPSBOVUxMOwotICAgIGJ6c3RyZWFtLm9wYXF1ZSA9IE5VTEw7Ci0gICAgb3JpZ19zaXplID0gc2l6ZTsKLQotICAgIGlmIChCWjJfYnpEZWNvbXByZXNzSW5pdCAoJmJ6c3RyZWFtLCAwLCAwKSAhPSBCWl9PSykgewotICAgICAgR1NUX1dBUk5JTkcgKCJiemlwMiBpbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGJ6c3RyZWFtLm5leHRfaW4gPSAoY2hhciAqKSBkYXRhOwotICAgIGJ6c3RyZWFtLmF2YWlsX2luID0gb3JpZ19zaXplOwotICAgIG5ld19zaXplID0gb3JpZ19zaXplOwotICAgIG5ld19kYXRhID0gZ19tYWxsb2MgKG5ld19zaXplKTsKLSAgICBienN0cmVhbS5hdmFpbF9vdXQgPSBuZXdfc2l6ZTsKLSAgICBienN0cmVhbS5uZXh0X291dCA9IChjaGFyICopIG5ld19kYXRhOwotCi0gICAgZG8gewotICAgICAgcmVzdWx0ID0gQloyX2J6RGVjb21wcmVzcyAoJmJ6c3RyZWFtKTsKLSAgICAgIGlmIChyZXN1bHQgPT0gQlpfU1RSRUFNX0VORCkgewotICAgICAgICBicmVhazsKLSAgICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9IEJaX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiQloyX2J6RGVjb21wcmVzcygpIHJldHVybmVkICVkIiwgcmVzdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIG5ld19zaXplICs9IDQwOTY7Ci0gICAgICBuZXdfZGF0YSA9IGdfcmVhbGxvYyAobmV3X2RhdGEsIG5ld19zaXplKTsKLSAgICAgIGJ6c3RyZWFtLm5leHRfb3V0ID0gKGNoYXIgKikgKG5ld19kYXRhICsgYnpzdHJlYW0udG90YWxfb3V0X2xvMzIpOwotICAgICAgYnpzdHJlYW0uYXZhaWxfb3V0ICs9IDQwOTY7Ci0gICAgfSB3aGlsZSAoYnpzdHJlYW0uYXZhaWxfaW4gPiAwKTsKLQotICAgIGlmIChyZXN1bHQgIT0gQlpfU1RSRUFNX0VORCkgewotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnX2ZyZWUgKG5ld19kYXRhKTsKLSAgICB9IGVsc2UgewotICAgICAgbmV3X3NpemUgPSBienN0cmVhbS50b3RhbF9vdXRfbG8zMjsKLSAgICB9Ci0gICAgQloyX2J6RGVjb21wcmVzc0VuZCAoJmJ6c3RyZWFtKTsKLQotI2Vsc2UKLSAgICBHU1RfV0FSTklORyAoImJ6aXAyIGVuY29kZWQgdHJhY2tzIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gICAgZ290byBvdXQ7Ci0jZW5kaWYKLSAgfSBlbHNlIGlmIChhbGdvID09IEdTVF9NQVRST1NLQV9UUkFDS19DT01QUkVTU0lPTl9BTEdPUklUSE1fTFpPMVgpIHsKLSAgICAvKiBsem8gZW5jb2RlZCBkYXRhICovCi0gICAgaW50IHJlc3VsdDsKLSAgICBpbnQgb3JpZ19zaXplLCBvdXRfc2l6ZTsKLQotICAgIG9yaWdfc2l6ZSA9IHNpemU7Ci0gICAgb3V0X3NpemUgPSBzaXplOwotICAgIG5ld19zaXplID0gc2l6ZTsKLSAgICBuZXdfZGF0YSA9IGdfbWFsbG9jIChuZXdfc2l6ZSk7Ci0KLSAgICBkbyB7Ci0gICAgICBvcmlnX3NpemUgPSBzaXplOwotICAgICAgb3V0X3NpemUgPSBuZXdfc2l6ZTsKLQotICAgICAgcmVzdWx0ID0gbHpvMXhfZGVjb2RlIChuZXdfZGF0YSwgJm91dF9zaXplLCBkYXRhLCAmb3JpZ19zaXplKTsKLQotICAgICAgaWYgKG9yaWdfc2l6ZSA+IDApIHsKLSAgICAgICAgbmV3X3NpemUgKz0gNDA5NjsKLSAgICAgICAgbmV3X2RhdGEgPSBnX3JlYWxsb2MgKG5ld19kYXRhLCBuZXdfc2l6ZSk7Ci0gICAgICB9Ci0gICAgfSB3aGlsZSAob3JpZ19zaXplID4gMCAmJiByZXN1bHQgPT0gTFpPX09VVFBVVF9GVUxMKTsKLQotICAgIG5ld19zaXplIC09IG91dF9zaXplOwotCi0gICAgaWYgKHJlc3VsdCAhPSBMWk9fT1VUUFVUX0ZVTEwpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgibHpvIGRlY29tcHJlc3Npb24gZmFpbGVkIik7Ci0gICAgICBnX2ZyZWUgKG5ld19kYXRhKTsKLQotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgfSBlbHNlIGlmIChhbGdvID09IEdTVF9NQVRST1NLQV9UUkFDS19DT01QUkVTU0lPTl9BTEdPUklUSE1fSEVBREVSU1RSSVApIHsKLSAgICAvKiBoZWFkZXIgc3RyaXBwZWQgZW5jb2RlZCBkYXRhICovCi0gICAgaWYgKGVuYy0+Y29tcF9zZXR0aW5nc19sZW5ndGggPiAwKSB7Ci0gICAgICBuZXdfZGF0YSA9IGdfbWFsbG9jIChzaXplICsgZW5jLT5jb21wX3NldHRpbmdzX2xlbmd0aCk7Ci0gICAgICBuZXdfc2l6ZSA9IHNpemUgKyBlbmMtPmNvbXBfc2V0dGluZ3NfbGVuZ3RoOwotCi0gICAgICBtZW1jcHkgKG5ld19kYXRhLCBlbmMtPmNvbXBfc2V0dGluZ3MsIGVuYy0+Y29tcF9zZXR0aW5nc19sZW5ndGgpOwotICAgICAgbWVtY3B5IChuZXdfZGF0YSArIGVuYy0+Y29tcF9zZXR0aW5nc19sZW5ndGgsIGRhdGEsIHNpemUpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfRVJST1IgKCJpbnZhbGlkIGNvbXByZXNzaW9uIGFsZ29yaXRobSAlZCIsIGFsZ28pOwotICAgIHJldCA9IEZBTFNFOwotICB9Ci0KLW91dDoKLQotICBpZiAoIXJldCkgewotICAgICpkYXRhX291dCA9IE5VTEw7Ci0gICAgKnNpemVfb3V0ID0gMDsKLSAgfSBlbHNlIHsKLSAgICAqZGF0YV9vdXQgPSBuZXdfZGF0YTsKLSAgICAqc2l6ZV9vdXQgPSBuZXdfc2l6ZTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9kZWNvZGVfY29udGVudF9lbmNvZGluZ3MgKEdBcnJheSAqIGVuY29kaW5ncykKLXsKLSAgZ2ludCBpOwotCi0gIGlmIChlbmNvZGluZ3MgPT0gTlVMTCkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGVuY29kaW5ncy0+bGVuOyBpKyspIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrRW5jb2RpbmcgKmVuYyA9Ci0gICAgICAgICZnX2FycmF5X2luZGV4IChlbmNvZGluZ3MsIEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZywgaSk7Ci0gICAgZ3BvaW50ZXIgZGF0YSA9IE5VTEw7Ci0gICAgZ3NpemUgc2l6ZTsKLQotICAgIGlmICgoZW5jLT5zY29wZSAmIEdTVF9NQVRST1NLQV9UUkFDS19FTkNPRElOR19TQ09QRV9ORVhUX0NPTlRFTlRfRU5DT0RJTkcpCi0gICAgICAgID09IDApCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIEVuY3J5cHRpb24gbm90IHN1cHBvcnRlZCB5ZXQgKi8KLSAgICBpZiAoZW5jLT50eXBlICE9IDApCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0KLSAgICBpZiAoaSArIDEgPj0gZW5jb2RpbmdzLT5sZW4pCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0KLSAgICBpZiAoZW5jLT5jb21wX3NldHRpbmdzX2xlbmd0aCA9PSAwKQotICAgICAgY29udGludWU7Ci0KLSAgICBkYXRhID0gZW5jLT5jb21wX3NldHRpbmdzOwotICAgIHNpemUgPSBlbmMtPmNvbXBfc2V0dGluZ3NfbGVuZ3RoOwotCi0gICAgaWYgKCFnc3RfbWF0cm9za2FfZGVjb21wcmVzc19kYXRhIChlbmMsICZkYXRhLCAmc2l6ZSwgZW5jLT5jb21wX2FsZ28pKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotCi0gICAgZ19mcmVlIChlbmMtPmNvbXBfc2V0dGluZ3MpOwotCi0gICAgZW5jLT5jb21wX3NldHRpbmdzID0gZGF0YTsKLSAgICBlbmMtPmNvbXBfc2V0dGluZ3NfbGVuZ3RoID0gc2l6ZTsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9tYXRyb3NrYV9kZWNvZGVfZGF0YSAoR0FycmF5ICogZW5jb2RpbmdzLCBncG9pbnRlciAqIGRhdGFfb3V0LAotICAgIGdzaXplICogc2l6ZV9vdXQsIEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZ1Njb3BlIHNjb3BlLCBnYm9vbGVhbiBmcmVlKQotewotICBncG9pbnRlciBkYXRhOwotICBnc2l6ZSBzaXplOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVuY29kaW5ncyAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkYXRhX291dCAhPSBOVUxMICYmICpkYXRhX291dCAhPSBOVUxMLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzaXplX291dCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgZGF0YSA9ICpkYXRhX291dDsKLSAgc2l6ZSA9ICpzaXplX291dDsKLQotICBmb3IgKGkgPSAwOyBpIDwgZW5jb2RpbmdzLT5sZW47IGkrKykgewotICAgIEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZyAqZW5jID0KLSAgICAgICAgJmdfYXJyYXlfaW5kZXggKGVuY29kaW5ncywgR3N0TWF0cm9za2FUcmFja0VuY29kaW5nLCBpKTsKLSAgICBncG9pbnRlciBuZXdfZGF0YSA9IE5VTEw7Ci0gICAgZ3NpemUgbmV3X3NpemUgPSAwOwotCi0gICAgaWYgKChlbmMtPnNjb3BlICYgc2NvcGUpID09IDApCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIEVuY3J5cHRpb24gbm90IHN1cHBvcnRlZCB5ZXQgKi8KLSAgICBpZiAoZW5jLT50eXBlICE9IDApIHsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbmV3X2RhdGEgPSBkYXRhOwotICAgIG5ld19zaXplID0gc2l6ZTsKLQotICAgIHJldCA9Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9kZWNvbXByZXNzX2RhdGEgKGVuYywgJm5ld19kYXRhLCAmbmV3X3NpemUsCi0gICAgICAgIGVuYy0+Y29tcF9hbGdvKTsKLQotICAgIGlmICghcmV0KQotICAgICAgYnJlYWs7Ci0KLSAgICBpZiAoKGRhdGEgPT0gKmRhdGFfb3V0ICYmIGZyZWUpIHx8IChkYXRhICE9ICpkYXRhX291dCkpCi0gICAgICBnX2ZyZWUgKGRhdGEpOwotCi0gICAgZGF0YSA9IG5ld19kYXRhOwotICAgIHNpemUgPSBuZXdfc2l6ZTsKLSAgfQotCi0gIGlmICghcmV0KSB7Ci0gICAgaWYgKChkYXRhID09ICpkYXRhX291dCAmJiBmcmVlKSB8fCAoZGF0YSAhPSAqZGF0YV9vdXQpKQotICAgICAgZ19mcmVlIChkYXRhKTsKLQotICAgICpkYXRhX291dCA9IE5VTEw7Ci0gICAgKnNpemVfb3V0ID0gMDsKLSAgfSBlbHNlIHsKLSAgICAqZGF0YV9vdXQgPSBkYXRhOwotICAgICpzaXplX291dCA9IHNpemU7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X21hdHJvc2thX2luZGV4X2NvbXBhcmUgKEdzdE1hdHJvc2thSW5kZXggKiBpMSwgR3N0TWF0cm9za2FJbmRleCAqIGkyKQotewotICBpZiAoaTEtPnRpbWUgPCBpMi0+dGltZSkKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKGkxLT50aW1lID4gaTItPnRpbWUpCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UgaWYgKGkxLT5ibG9jayA8IGkyLT5ibG9jaykKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKGkxLT5ibG9jayA+IGkyLT5ibG9jaykKLSAgICByZXR1cm4gMTsKLSAgZWxzZQotICAgIHJldHVybiAwOwotfQotCi1naW50Ci1nc3RfbWF0cm9za2FfaW5kZXhfc2Vla19maW5kIChHc3RNYXRyb3NrYUluZGV4ICogaTEsIEdzdENsb2NrVGltZSAqIHRpbWUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBpZiAoaTEtPnRpbWUgPCAqdGltZSkKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UgaWYgKGkxLT50aW1lID4gKnRpbWUpCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UKLSAgICByZXR1cm4gMDsKLX0KLQotR3N0TWF0cm9za2FJbmRleCAqCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZG9faW5kZXhfc2VlayAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogdHJhY2ssIGdpbnQ2NCBzZWVrX3BvcywgR0FycmF5ICoqIF9pbmRleCwKLSAgICBnaW50ICogX2VudHJ5X2luZGV4LCBHc3RTZWFyY2hNb2RlIHNuYXBfZGlyKQotewotICBHc3RNYXRyb3NrYUluZGV4ICplbnRyeSA9IE5VTEw7Ci0gIEdBcnJheSAqaW5kZXg7Ci0KLSAgLyogZmluZCBlbnRyeSBqdXN0IGJlZm9yZSBvciBhdCB0aGUgcmVxdWVzdGVkIHBvc2l0aW9uICovCi0gIGlmICh0cmFjayAmJiB0cmFjay0+aW5kZXhfdGFibGUpCi0gICAgaW5kZXggPSB0cmFjay0+aW5kZXhfdGFibGU7Ci0gIGVsc2UKLSAgICBpbmRleCA9IGNvbW1vbi0+aW5kZXg7Ci0KLSAgaWYgKCFpbmRleCB8fCAhaW5kZXgtPmxlbikKLSAgICByZXR1cm4gTlVMTDsKLQotICBlbnRyeSA9Ci0gICAgICBnc3RfdXRpbF9hcnJheV9iaW5hcnlfc2VhcmNoIChpbmRleC0+ZGF0YSwgaW5kZXgtPmxlbiwKLSAgICAgIHNpemVvZiAoR3N0TWF0cm9za2FJbmRleCksCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgZ3N0X21hdHJvc2thX2luZGV4X3NlZWtfZmluZCwgc25hcF9kaXIsICZzZWVrX3BvcywKLSAgICAgIE5VTEwpOwotCi0gIGlmIChlbnRyeSA9PSBOVUxMKSB7Ci0gICAgaWYgKHNuYXBfZGlyID09IEdTVF9TRUFSQ0hfTU9ERV9BRlRFUikgewotICAgICAgLyogQ2FuIG9ubHkgaGFwcGVuIHdpdGggYSByZXZlcnNlIHNlZWsgcGFzdCB0aGUgZW5kICovCi0gICAgICBlbnRyeSA9ICZnX2FycmF5X2luZGV4IChpbmRleCwgR3N0TWF0cm9za2FJbmRleCwgaW5kZXgtPmxlbiAtIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBDYW4gb25seSBoYXBwZW4gd2l0aCBhIGZvcndhcmQgc2VlayBiZWZvcmUgdGhlIHN0YXJ0ICovCi0gICAgICBlbnRyeSA9ICZnX2FycmF5X2luZGV4IChpbmRleCwgR3N0TWF0cm9za2FJbmRleCwgMCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKF9pbmRleCkKLSAgICAqX2luZGV4ID0gaW5kZXg7Ci0gIGlmIChfZW50cnlfaW5kZXgpCi0gICAgKl9lbnRyeV9pbmRleCA9IGVudHJ5IC0gKEdzdE1hdHJvc2thSW5kZXggKikgaW5kZXgtPmRhdGE7Ci0KLSAgcmV0dXJuIGVudHJ5OwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2VuY29kaW5nX2NtcCAoR3N0TWF0cm9za2FUcmFja0VuY29kaW5nICogYSwKLSAgICBHc3RNYXRyb3NrYVRyYWNrRW5jb2RpbmcgKiBiKQotewotICBpZiAoYi0+b3JkZXIgPiBhLT5vcmRlcikKLSAgICByZXR1cm4gMTsKLSAgZWxzZSBpZiAoYi0+b3JkZXIgPCBhLT5vcmRlcikKLSAgICByZXR1cm4gLTE7Ci0gIGVsc2UKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZW5jb2Rpbmdfb3JkZXJfdW5pcXVlIChHQXJyYXkgKiBlbmNvZGluZ3MsIGd1aW50NjQKLSAgICBvcmRlcikKLXsKLSAgZ2ludCBpOwotCi0gIGlmIChlbmNvZGluZ3MgPT0gTlVMTCB8fCBlbmNvZGluZ3MtPmxlbiA9PSAwKQotICAgIHJldHVybiBUUlVFOwotCi0gIGZvciAoaSA9IDA7IGkgPCBlbmNvZGluZ3MtPmxlbjsgaSsrKQotICAgIGlmIChnX2FycmF5X2luZGV4IChlbmNvZGluZ3MsIEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZywgaSkub3JkZXIgPT0gb3JkZXIpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHRha2VzIG93bmVyc2hpcCBvZiB0YWdsaXN0ICovCi12b2lkCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZm91bmRfZ2xvYmFsX3RhZyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVsZW1lbnQgKiBlbCwgR3N0VGFnTGlzdCAqIHRhZ2xpc3QpCi17Ci0gIGlmIChjb21tb24tPmdsb2JhbF90YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X2luc2VydCAoY29tbW9uLT5nbG9iYWxfdGFncywgdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgY29tbW9uLT5nbG9iYWxfdGFncyA9IHRhZ2xpc3Q7Ci0gIH0KLSAgY29tbW9uLT5nbG9iYWxfdGFnc19jaGFuZ2VkID0gVFJVRTsKLX0KLQotZ2ludDY0Ci1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZ2V0X2xlbmd0aCAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uKQotewotICBnaW50NjQgZW5kID0gLTE7Ci0KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKGNvbW1vbi0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICAgICAgICAmZW5kKSB8fCBlbmQgPCAwKQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIm5vIHVwc3RyZWFtIGxlbmd0aCIpOwotCi0gIHJldHVybiBlbmQ7Ci19Ci0KLS8qIGRldGVybWluZSB0cmFjayB0byBzZWVrIGluICovCi1Hc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZ2V0X3NlZWtfdHJhY2sgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHRyYWNrKQotewotICBnaW50IGk7Ci0KLSAgaWYgKHRyYWNrICYmIHRyYWNrLT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPKQotICAgIHJldHVybiB0cmFjazsKLQotICBmb3IgKGkgPSAwOyBpIDwgY29tbW9uLT5zcmMtPmxlbjsgaSsrKSB7Ci0gICAgR3N0TWF0cm9za2FUcmFja0NvbnRleHQgKnN0cmVhbTsKLQotICAgIHN0cmVhbSA9IGdfcHRyX2FycmF5X2luZGV4IChjb21tb24tPnNyYywgaSk7Ci0gICAgaWYgKHN0cmVhbS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTyAmJiBzdHJlYW0tPmluZGV4X3RhYmxlKQotICAgICAgdHJhY2sgPSBzdHJlYW07Ci0gIH0KLQotICByZXR1cm4gdHJhY2s7Ci19Ci0KLS8qIHNraXAgdW5rbm93biBvciBhbGlrZSBlbGVtZW50ICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2Vfc2tpcCAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVibWxSZWFkICogZWJtbCwgY29uc3QgZ2NoYXIgKiBwYXJlbnRfbmFtZSwgZ3VpbnQgaWQpCi17Ci0gIGlmIChpZCA9PSBHU1RfRUJNTF9JRF9WT0lEKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiU2tpcHBpbmcgRUJNTCBWb2lkIGVsZW1lbnQiKTsKLSAgfSBlbHNlIGlmIChpZCA9PSBHU1RfRUJNTF9JRF9DUkMzMikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIlNraXBwaW5nIEVCTUwgQ1JDMzIgZWxlbWVudCIpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAiVW5rbm93biAlcyBzdWJlbGVtZW50IDB4JXggLSBpZ25vcmluZyIsIHBhcmVudF9uYW1lLCBpZCk7Ci0gIH0KLQotICByZXR1cm4gZ3N0X2VibWxfcmVhZF9za2lwIChlYm1sKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9hdHRhY2hlZF9maWxlIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0RWJtbFJlYWQgKiBlYm1sLCBHc3RUYWdMaXN0ICogdGFnbGlzdCkKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGdjaGFyICpkZXNjcmlwdGlvbiA9IE5VTEw7Ci0gIGdjaGFyICpmaWxlbmFtZSA9IE5VTEw7Ci0gIGdjaGFyICptaW1ldHlwZSA9IE5VTEw7Ci0gIGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0gIGd1aW50NjQgZGF0YWxlbiA9IDA7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiQXR0YWNoZWRGaWxlIik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkF0dGFjaGVkRmlsZSIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIC8qIHJlYWQgYWxsIHN1Yi1lbnRyaWVzICovCi0KLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9GSUxFREVTQ1JJUFRJT046Ci0gICAgICAgIGlmIChkZXNjcmlwdGlvbikgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAgICAgICAiRmlsZURlc2NyaXB0aW9uIGNhbiBvbmx5IGFwcGVhciBvbmNlIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJmRlc2NyaXB0aW9uKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiRmlsZURlc2NyaXB0aW9uOiAlcyIsCi0gICAgICAgICAgICBHU1RfU1RSX05VTEwgKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfRklMRU5BTUU6Ci0gICAgICAgIGlmIChmaWxlbmFtZSkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiRmlsZU5hbWUgY2FuIG9ubHkgYXBwZWFyIG9uY2UiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdXRmOCAoZWJtbCwgJmlkLCAmZmlsZW5hbWUpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkZpbGVOYW1lOiAlcyIsCi0gICAgICAgICAgICBHU1RfU1RSX05VTEwgKGZpbGVuYW1lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfRklMRU1JTUVUWVBFOgotICAgICAgICBpZiAobWltZXR5cGUpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICAgIkZpbGVNaW1lVHlwZSBjYW4gb25seSBhcHBlYXIgb25jZSIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0ID0gZ3N0X2VibWxfcmVhZF9hc2NpaSAoZWJtbCwgJmlkLCAmbWltZXR5cGUpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJGaWxlTWltZVR5cGU6ICVzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAobWltZXR5cGUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9GSUxFREFUQToKLSAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkZpbGVEYXRhIGNhbiBvbmx5IGFwcGVhciBvbmNlIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX2JpbmFyeSAoZWJtbCwgJmlkLCAmZGF0YSwgJmRhdGFsZW4pOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiRmlsZURhdGEgb2Ygc2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBkYXRhbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsCi0gICAgICAgICAgICAiQXR0YWNoZWRGaWxlIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0ZJTEVVSUQ6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfc2tpcCAoZWJtbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiQXR0YWNoZWRGaWxlIiwgcmV0KTsKLQotICBpZiAoZmlsZW5hbWUgJiYgbWltZXR5cGUgJiYgZGF0YSAmJiBkYXRhbGVuID4gMCkgewotICAgIEdzdFRhZ0ltYWdlVHlwZSBpbWFnZV90eXBlID0gR1NUX1RBR19JTUFHRV9UWVBFX05PTkU7Ci0gICAgR3N0QnVmZmVyICp0YWdidWZmZXIgPSBOVUxMOwotICAgIEdzdFNhbXBsZSAqdGFnc2FtcGxlID0gTlVMTDsKLSAgICBHc3RTdHJ1Y3R1cmUgKmluZm8gPSBOVUxMOwotICAgIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICAgIGdjaGFyICpmaWxlbmFtZV9sYyA9IGdfdXRmOF9zdHJkb3duIChmaWxlbmFtZSwgLTEpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiQ3JlYXRpbmcgdGFnIGZvciBhdHRhY2htZW50IHdpdGggIgotICAgICAgICAiZmlsZW5hbWUgJyVzJywgbWltZXR5cGUgJyVzJywgZGVzY3JpcHRpb24gJyVzJywgIgotICAgICAgICAic2l6ZSAlIiBHX0dVSU5UNjRfRk9STUFULCBmaWxlbmFtZSwgbWltZXR5cGUsCi0gICAgICAgIEdTVF9TVFJfTlVMTCAoZGVzY3JpcHRpb24pLCBkYXRhbGVuKTsKLQotICAgIC8qIFRPRE86IGJldHRlciBoZXVyaXN0aWNzIGZvciBkaWZmZXJlbnQgaW1hZ2UgdHlwZXMgKi8KLSAgICBpZiAoc3Ryc3RyIChmaWxlbmFtZV9sYywgImNvdmVyIikpIHsKLSAgICAgIGlmIChzdHJzdHIgKGZpbGVuYW1lX2xjLCAiYmFjayIpKQotICAgICAgICBpbWFnZV90eXBlID0gR1NUX1RBR19JTUFHRV9UWVBFX0JBQ0tfQ09WRVI7Ci0gICAgICBlbHNlCi0gICAgICAgIGltYWdlX3R5cGUgPSBHU1RfVEFHX0lNQUdFX1RZUEVfRlJPTlRfQ09WRVI7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4IChtaW1ldHlwZSwgImltYWdlLyIpIHx8Ci0gICAgICAgIGdfc3RyX2hhc19zdWZmaXggKGZpbGVuYW1lX2xjLCAicG5nIikgfHwKLSAgICAgICAgZ19zdHJfaGFzX3N1ZmZpeCAoZmlsZW5hbWVfbGMsICJqcGciKSB8fAotICAgICAgICBnX3N0cl9oYXNfc3VmZml4IChmaWxlbmFtZV9sYywgImpwZWciKSB8fAotICAgICAgICBnX3N0cl9oYXNfc3VmZml4IChmaWxlbmFtZV9sYywgImdpZiIpIHx8Ci0gICAgICAgIGdfc3RyX2hhc19zdWZmaXggKGZpbGVuYW1lX2xjLCAiYm1wIikpIHsKLSAgICAgIGltYWdlX3R5cGUgPSBHU1RfVEFHX0lNQUdFX1RZUEVfVU5ERUZJTkVEOwotICAgIH0KLSAgICBnX2ZyZWUgKGZpbGVuYW1lX2xjKTsKLQotICAgIC8qIEZpcnN0IHRyeSB0byBjcmVhdGUgYW4gaW1hZ2UgdGFnIGJ1ZmZlciBmcm9tIHRoaXMgKi8KLSAgICBpZiAoaW1hZ2VfdHlwZSAhPSBHU1RfVEFHX0lNQUdFX1RZUEVfTk9ORSkgewotICAgICAgdGFnc2FtcGxlID0KLSAgICAgICAgICBnc3RfdGFnX2ltYWdlX2RhdGFfdG9faW1hZ2Vfc2FtcGxlIChkYXRhLCBkYXRhbGVuLCBpbWFnZV90eXBlKTsKLQotICAgICAgaWYgKCF0YWdzYW1wbGUpIHsKLSAgICAgICAgaW1hZ2VfdHlwZSA9IEdTVF9UQUdfSU1BR0VfVFlQRV9OT05FOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGFnYnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYgKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAodGFnc2FtcGxlKSk7Ci0gICAgICAgIGNhcHMgPSBnc3RfY2Fwc19yZWYgKGdzdF9zYW1wbGVfZ2V0X2NhcHMgKHRhZ3NhbXBsZSkpOwotICAgICAgICBpbmZvID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChnc3Rfc2FtcGxlX2dldF9pbmZvICh0YWdzYW1wbGUpKTsKLSAgICAgICAgZ3N0X3NhbXBsZV91bnJlZiAodGFnc2FtcGxlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBpZiB0aGlzIGZhaWxlZCBjcmVhdGUgYW4gYXR0YWNobWVudCBidWZmZXIgKi8KLSAgICBpZiAoIXRhZ2J1ZmZlcikgewotICAgICAgdGFnYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoZ19tZW1kdXAgKGRhdGEsIGRhdGFsZW4pLCBkYXRhbGVuKTsKLQotICAgICAgY2FwcyA9IGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgKE5VTEwsIHRhZ2J1ZmZlciwgTlVMTCk7Ci0gICAgICBpZiAoY2FwcyA9PSBOVUxMKQotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAobWltZXR5cGUpOwotICAgIH0KLQotICAgIC8qIFNldCBmaWxlbmFtZSBhbmQgZGVzY3JpcHRpb24gaW4gdGhlIGluZm8gKi8KLSAgICBpZiAoaW5mbyA9PSBOVUxMKQotICAgICAgaW5mbyA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiR3N0VGFnSW1hZ2VJbmZvIik7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3NldCAoaW5mbywgImZpbGVuYW1lIiwgR19UWVBFX1NUUklORywgZmlsZW5hbWUsIE5VTEwpOwotICAgIGlmIChkZXNjcmlwdGlvbikKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChpbmZvLCAiZGVzY3JpcHRpb24iLCBHX1RZUEVfU1RSSU5HLCBkZXNjcmlwdGlvbiwgTlVMTCk7Ci0KLSAgICB0YWdzYW1wbGUgPSBnc3Rfc2FtcGxlX25ldyAodGFnYnVmZmVyLCBjYXBzLCBOVUxMLCBpbmZvKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHRhZ2J1ZmZlcik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAiQ3JlYXRlZCBhdHRhY2htZW50IHNhbXBsZTogJSIgR1NUX1BUUl9GT1JNQVQsIHRhZ3NhbXBsZSk7Ci0KLSAgICAvKiBhbmQgYXBwZW5kIHRvIHRoZSB0YWcgbGlzdCAqLwotICAgIGlmIChpbWFnZV90eXBlICE9IEdTVF9UQUdfSU1BR0VfVFlQRV9OT05FKQotICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfSU1BR0UsIHRhZ3NhbXBsZSwKLSAgICAgICAgICBOVUxMKTsKLSAgICBlbHNlCi0gICAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19BVFRBQ0hNRU5ULAotICAgICAgICAgIHRhZ3NhbXBsZSwgTlVMTCk7Ci0KLSAgICAvKiB0aGUgbGlzdCBhZGRzIGl0IG93biByZWYgKi8KLSAgICBnc3Rfc2FtcGxlX3VucmVmICh0YWdzYW1wbGUpOwotICB9Ci0KLSAgZ19mcmVlIChmaWxlbmFtZSk7Ci0gIGdfZnJlZSAobWltZXR5cGUpOwotICBnX2ZyZWUgKGRhdGEpOwotICBnX2ZyZWUgKGRlc2NyaXB0aW9uKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1Hc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfYXR0YWNobWVudHMgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFbGVtZW50ICogZWwsIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLQotICBERUJVR19FTEVNRU5UX1NUQVJUIChjb21tb24sIGVibWwsICJBdHRhY2htZW50cyIpOwotCi0gIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF9tYXN0ZXIgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJBdHRhY2htZW50cyIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlICh0YWdsaXN0LCBHU1RfVEFHX1NDT1BFX0dMT0JBTCk7Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQVRUQUNIRURGSUxFOgotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfYXR0YWNoZWRfZmlsZSAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgdGFnbGlzdCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2Vfc2tpcCAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgIkF0dGFjaG1lbnRzIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJBdHRhY2htZW50cyIsIHJldCk7Ci0KLSAgaWYgKGdzdF90YWdfbGlzdF9uX3RhZ3MgKHRhZ2xpc3QpID4gMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIlN0b3JpbmcgYXR0YWNobWVudCB0YWdzIik7Ci0gICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2ZvdW5kX2dsb2JhbF90YWcgKGNvbW1vbiwgZWwsIHRhZ2xpc3QpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIk5vIHZhbGlkIGF0dGFjaG1lbnRzIGZvdW5kIik7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdsaXN0KTsKLSAgfQotCi0gIGNvbW1vbi0+YXR0YWNobWVudHNfcGFyc2VkID0gVFJVRTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3RvY190YWcgKEdzdFRvY0VudHJ5ICogZW50cnksCi0gICAgR0FycmF5ICogZWRpdGlvbl90YXJnZXRzLCBHQXJyYXkgKiBjaGFwdGVyX3Rhcmd0ZXMsIEdzdFRhZ0xpc3QgKiB0YWdzKQotewotICBnY2hhciAqdWlkOwotICBndWludCBpOwotICBndWludDY0IHRndDsKLSAgR0FycmF5ICp0YXJnZXRzOwotICBHTGlzdCAqY3VyOwotICBHc3RUYWdMaXN0ICpldGFnczsKLQotICB0YXJnZXRzID0KLSAgICAgIChnc3RfdG9jX2VudHJ5X2dldF9lbnRyeV90eXBlIChlbnRyeSkgPT0KLSAgICAgIEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OKSA/IGVkaXRpb25fdGFyZ2V0cyA6IGNoYXB0ZXJfdGFyZ3RlczsKLQotICBldGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHRhcmdldHMtPmxlbjsgKytpKSB7Ci0gICAgdGd0ID0gZ19hcnJheV9pbmRleCAodGFyZ2V0cywgZ3VpbnQ2NCwgaSk7Ci0KLSAgICBpZiAodGd0ID09IDApCi0gICAgICBnc3RfdGFnX2xpc3RfaW5zZXJ0IChldGFncywgdGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotICAgIGVsc2UgewotICAgICAgdWlkID0gZ19zdHJkdXBfcHJpbnRmICgiJSIgR19HVUlOVDY0X0ZPUk1BVCwgdGd0KTsKLSAgICAgIGlmIChnX3N0cmNtcDAgKGdzdF90b2NfZW50cnlfZ2V0X3VpZCAoZW50cnkpLCB1aWQpID09IDApCi0gICAgICAgIGdzdF90YWdfbGlzdF9pbnNlcnQgKGV0YWdzLCB0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCk7Ci0gICAgICBnX2ZyZWUgKHVpZCk7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X3RvY19lbnRyeV9tZXJnZV90YWdzIChlbnRyeSwgZXRhZ3MsIEdTVF9UQUdfTUVSR0VfQVBQRU5EKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmIChldGFncyk7Ci0KLSAgY3VyID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVudHJ5KTsKLSAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7Ci0gICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3RvY190YWcgKGN1ci0+ZGF0YSwgZWRpdGlvbl90YXJnZXRzLAotICAgICAgICBjaGFwdGVyX3Rhcmd0ZXMsIHRhZ3MpOwotICAgIGN1ciA9IGN1ci0+bmV4dDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX21ldGFkYXRhX3RhcmdldHMgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFYm1sUmVhZCAqIGVibWwsIEdBcnJheSAqIGVkaXRpb25fdGFyZ2V0cywgR0FycmF5ICogY2hhcHRlcl90YXJnZXRzLAotICAgIEdBcnJheSAqIHRyYWNrX3RhcmdldHMsIGd1aW50NjQgKiB0YXJnZXRfdHlwZV92YWx1ZSwgZ2NoYXIgKiogdGFyZ2V0X3R5cGUpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgdWlkOwotICBndWludDY0IHRtcDsKLSAgZ2NoYXIgKnN0cjsKLQotICBERUJVR19FTEVNRU5UX1NUQVJUIChjb21tb24sIGVibWwsICJUYWdUYXJnZXRzIik7Ci0KLSAgKnRhcmdldF90eXBlX3ZhbHVlID0gNTA7Ci0gICp0YXJnZXRfdHlwZSA9IE5VTEw7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIlRhZ1RhcmdldHMiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRDSEFQVEVSVUlEOgotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmdWlkKSkgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgZ19hcnJheV9hcHBlbmRfdmFsIChjaGFwdGVyX3RhcmdldHMsIHVpZCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRFRElUSU9OVUlEOgotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmdWlkKSkgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgZ19hcnJheV9hcHBlbmRfdmFsIChlZGl0aW9uX3RhcmdldHMsIHVpZCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQVJHRVRUUkFDS1VJRDoKLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJnVpZCkpID09IEdTVF9GTE9XX09LKQotICAgICAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAodHJhY2tfdGFyZ2V0cywgdWlkKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RBUkdFVFRZUEVWQUxVRToKLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJnRtcCkpID09IEdTVF9GTE9XX09LKQotICAgICAgICAgICp0YXJnZXRfdHlwZV92YWx1ZSA9IHRtcDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RBUkdFVFRZUEU6Ci0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF9hc2NpaSAoZWJtbCwgJmlkLCAmc3RyKSkgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICBnX2ZyZWUgKCp0YXJnZXRfdHlwZSk7Ci0gICAgICAgICAgKnRhcmdldF90eXBlID0gc3RyOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXQgPQotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKGNvbW1vbiwgZWJtbCwgIlRhZ1RhcmdldHMiLAotICAgICAgICAgICAgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIlRhZ1RhcmdldHMiLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcG9zdHByb2Nlc3NfdG9jX2VudHJpZXMgKEdMaXN0ICogdG9jX2VudHJpZXMsCi0gICAgZ3VpbnQ2NCBtYXgsIGNvbnN0IGdjaGFyICogcGFyZW50X3VpZCkKLXsKLSAgR3N0VG9jRW50cnkgKmN1cl9pbmZvLCAqcHJldl9pbmZvLCAqbmV4dF9pbmZvOwotICBHTGlzdCAqY3VyX2xpc3QsICpwcmV2X2xpc3QsICpuZXh0X2xpc3Q7Ci0gIGdpbnQ2NCBjdXJfc3RhcnQsIHByZXZfc3RhcnQsIHN0b3A7Ci0KLSAgY3VyX2xpc3QgPSB0b2NfZW50cmllczsKLSAgd2hpbGUgKGN1cl9saXN0ICE9IE5VTEwpIHsKLSAgICBjdXJfaW5mbyA9IGN1cl9saXN0LT5kYXRhOwotCi0gICAgc3dpdGNoIChnc3RfdG9jX2VudHJ5X2dldF9lbnRyeV90eXBlIChjdXJfaW5mbykpIHsKLSAgICAgIGNhc2UgR1NUX1RPQ19FTlRSWV9UWVBFX0FOR0xFOgotICAgICAgY2FzZSBHU1RfVE9DX0VOVFJZX1RZUEVfVkVSU0lPTjoKLSAgICAgIGNhc2UgR1NUX1RPQ19FTlRSWV9UWVBFX0VESVRJT046Ci0gICAgICAgIC8qIGluIE1hdHJvc2thIHRlcm1zIGVkaXRpb24gaGFzIGR1cmF0aW9uIG9mIGZ1bGwgdHJhY2sgKi8KLSAgICAgICAgZ3N0X3RvY19lbnRyeV9zZXRfc3RhcnRfc3RvcF90aW1lcyAoY3VyX2luZm8sIDAsIG1heCk7Ci0KLSAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3Bvc3Rwcm9jZXNzX3RvY19lbnRyaWVzCi0gICAgICAgICAgICAoZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGN1cl9pbmZvKSwgbWF4LAotICAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfdWlkIChjdXJfaW5mbykpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHU1RfVE9DX0VOVFJZX1RZUEVfVElUTEU6Ci0gICAgICBjYXNlIEdTVF9UT0NfRU5UUllfVFlQRV9UUkFDSzoKLSAgICAgIGNhc2UgR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVI6Ci0gICAgICAgIHByZXZfbGlzdCA9IGN1cl9saXN0LT5wcmV2OwotICAgICAgICBuZXh0X2xpc3QgPSBjdXJfbGlzdC0+bmV4dDsKLQotICAgICAgICBpZiAocHJldl9saXN0ICE9IE5VTEwpCi0gICAgICAgICAgcHJldl9pbmZvID0gcHJldl9saXN0LT5kYXRhOwotICAgICAgICBlbHNlCi0gICAgICAgICAgcHJldl9pbmZvID0gTlVMTDsKLQotICAgICAgICBpZiAobmV4dF9saXN0ICE9IE5VTEwpCi0gICAgICAgICAgbmV4dF9pbmZvID0gbmV4dF9saXN0LT5kYXRhOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbmV4dF9pbmZvID0gTlVMTDsKLQotICAgICAgICAvKiB1cGRhdGVkIHN0b3AgdGltZSBpbiBwcmV2aW91cyBjaGFwdGVyIGFuZCBpdCdzIHN1YmNoYXB0ZXJzICovCi0gICAgICAgIGlmIChwcmV2X2luZm8gIT0gTlVMTCkgewotICAgICAgICAgIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMgKHByZXZfaW5mbywgJnByZXZfc3RhcnQsICZzdG9wKTsKLSAgICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzIChjdXJfaW5mbywgJmN1cl9zdGFydCwgJnN0b3ApOwotCi0gICAgICAgICAgc3RvcCA9IGN1cl9zdGFydDsKLSAgICAgICAgICBnc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzIChwcmV2X2luZm8sIHByZXZfc3RhcnQsIHN0b3ApOwotCi0gICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3Bvc3Rwcm9jZXNzX3RvY19lbnRyaWVzCi0gICAgICAgICAgICAgIChnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyAocHJldl9pbmZvKSwgY3VyX3N0YXJ0LAotICAgICAgICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF91aWQgKHByZXZfaW5mbykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogdXBkYXRlZCBzdG9wIHRpbWUgaW4gY3VycmVudCBjaGFwdGVyIGFuZCBpdCdzIHN1YmNoYXB0ZXJzICovCi0gICAgICAgIGlmIChuZXh0X2luZm8gPT0gTlVMTCkgewotICAgICAgICAgIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMgKGN1cl9pbmZvLCAmY3VyX3N0YXJ0LCAmc3RvcCk7Ci0KLSAgICAgICAgICBpZiAoc3RvcCA9PSAtMSkgewotICAgICAgICAgICAgc3RvcCA9IG1heDsKLSAgICAgICAgICAgIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKGN1cl9pbmZvLCBjdXJfc3RhcnQsIHN0b3ApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wb3N0cHJvY2Vzc190b2NfZW50cmllcwotICAgICAgICAgICAgICAoZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGN1cl9pbmZvKSwgc3RvcCwKLSAgICAgICAgICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfdWlkIChjdXJfaW5mbykpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVE9DX0VOVFJZX1RZUEVfSU5WQUxJRDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGN1cl9saXN0ID0gY3VyX2xpc3QtPm5leHQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9jaGFwdGVyX3RpdGxlcyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVibWxSZWFkICogZWJtbCwgR3N0VGFnTGlzdCAqIHRpdGxlcykKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgZ2NoYXIgKnRpdGxlID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBERUJVR19FTEVNRU5UX1NUQVJUIChjb21tb24sIGVibWwsICJDaGFwdGVyc1RpdGxlcyIpOwotCi0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzVGl0bGVzIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFNUUklORzoKLSAgICAgICAgcmV0ID0gZ3N0X2VibWxfcmVhZF91dGY4IChlYm1sLCAmaWQsICZ0aXRsZSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXQgPQotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzVGl0bGVzIiwKLSAgICAgICAgICAgIGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJDaGFwdGVyc1RpdGxlcyIsIHJldCk7Ci0KLSAgaWYgKHRpdGxlICE9IE5VTEwgJiYgcmV0ID09IEdTVF9GTE9XX09LKQotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRpdGxlcywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfVElUTEUsIHRpdGxlLCBOVUxMKTsKLQotICBnX2ZyZWUgKHRpdGxlKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9jaGFwdGVyX2VsZW1lbnQgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFYm1sUmVhZCAqIGVibWwsIEdMaXN0ICoqIHN1YmVudHJpZXMpCi17Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgc3RhcnRfdGltZSA9IC0xLCBzdG9wX3RpbWUgPSAtMTsKLSAgZ3VpbnQ2NCBpc19oaWRkZW4gPSAwLCBpc19lbmFibGVkID0gMSwgdWlkID0gMDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0VG9jRW50cnkgKmNoYXB0ZXJfaW5mbzsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgZ2NoYXIgKnVpZF9zdHI7Ci0gIEdMaXN0ICpzdWJzdWJlbnRyaWVzID0gTlVMTCwgKmw7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiQ2hhcHRlcnNFbGVtZW50Iik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzRWxlbWVudCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJVSUQ6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmdWlkKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUSU1FU1RBUlQ6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmc3RhcnRfdGltZSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSVElNRVNUT1A6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmc3RvcF90aW1lKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJBVE9NOgotICAgICAgICByZXQgPQotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2NoYXB0ZXJfZWxlbWVudCAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgJnN1YnN1YmVudHJpZXMpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUkRJU1BMQVk6Ci0gICAgICAgIHJldCA9Ci0gICAgICAgICAgICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfY2hhcHRlcl90aXRsZXMgKGNvbW1vbiwgZWJtbCwgdGFncyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DSEFQVEVSRkxBR0hJRERFTjoKLSAgICAgICAgcmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZpc19oaWRkZW4pOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ0hBUFRFUkZMQUdFTkFCTEVEOgotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJmlzX2VuYWJsZWQpOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0KLSAgICAgICAgICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsCi0gICAgICAgICAgICAiQ2hhcHRlcnNFbGVtZW50IiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAodWlkID09IDApCi0gICAgdWlkID0gKCgoZ3VpbnQ2NCkgZ19yYW5kb21faW50ICgpKSA8PCAzMikgfCBnX3JhbmRvbV9pbnQgKCk7Ci0gIHVpZF9zdHIgPSBnX3N0cmR1cF9wcmludGYgKCIlIiBHX0dVSU5UNjRfRk9STUFULCB1aWQpOwotICBjaGFwdGVyX2luZm8gPSBnc3RfdG9jX2VudHJ5X25ldyAoR1NUX1RPQ19FTlRSWV9UWVBFX0NIQVBURVIsIHVpZF9zdHIpOwotICBnX2ZyZWUgKHVpZF9zdHIpOwotCi0gIGdzdF90b2NfZW50cnlfc2V0X3RhZ3MgKGNoYXB0ZXJfaW5mbywgdGFncyk7Ci0gIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKGNoYXB0ZXJfaW5mbywgc3RhcnRfdGltZSwgc3RvcF90aW1lKTsKLQotICBmb3IgKGwgPSBzdWJzdWJlbnRyaWVzOyBsOyBsID0gbC0+bmV4dCkKLSAgICBnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnkgKGNoYXB0ZXJfaW5mbywgbC0+ZGF0YSk7Ci0gIGdfbGlzdF9mcmVlIChzdWJzdWJlbnRyaWVzKTsKLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzRWxlbWVudCIsIHJldCk7Ci0KLSAgLyogc3RhcnQgdGltZSBpcyBtYW5kYXRvcnkgYW5kIGhhcyBubyBkZWZhdWx0IHZhbHVlLAotICAgKiBzbyB3ZSBzaG91bGQgc2tpcCBjaGFwdGVycyB3aXRob3V0IGl0ICovCi0gIGlmIChpc19oaWRkZW4gPT0gMCAmJiBpc19lbmFibGVkID4gMCAmJgotICAgICAgc3RhcnRfdGltZSAhPSAtMSAmJiByZXQgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICAqc3ViZW50cmllcyA9IGdfbGlzdF9hcHBlbmQgKCpzdWJlbnRyaWVzLCBjaGFwdGVyX2luZm8pOwotICB9IGVsc2UKLSAgICBnc3RfdG9jX2VudHJ5X3VucmVmIChjaGFwdGVyX2luZm8pOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfY2hhcHRlcl9lZGl0aW9uIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0RWJtbFJlYWQgKiBlYm1sLCBHc3RUb2MgKiB0b2MpCi17Ci0gIGd1aW50MzIgaWQ7Ci0gIGd1aW50NjQgaXNfaGlkZGVuID0gMCwgdWlkID0gMDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0VG9jRW50cnkgKmVkaXRpb25faW5mbzsKLSAgR0xpc3QgKnN1YmVudHJpZXMgPSBOVUxMLCAqbDsKLSAgZ2NoYXIgKnVpZF9zdHI7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiQ2hhcHRlcnNFZGl0aW9uIik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzRWRpdGlvbiIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0VESVRJT05VSUQ6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmdWlkKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJBVE9NOgotICAgICAgICByZXQgPQotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2NoYXB0ZXJfZWxlbWVudCAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgJnN1YmVudHJpZXMpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfRURJVElPTkZMQUdISURERU46Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmaXNfaGlkZGVuKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9Ci0gICAgICAgICAgICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2Vfc2tpcCAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgIkNoYXB0ZXJzRWRpdGlvbiIsIGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJDaGFwdGVyc0VkaXRpb24iLCByZXQpOwotCi0gIGlmICh1aWQgPT0gMCkKLSAgICB1aWQgPSAoKChndWludDY0KSBnX3JhbmRvbV9pbnQgKCkpIDw8IDMyKSB8IGdfcmFuZG9tX2ludCAoKTsKLSAgdWlkX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR1VJTlQ2NF9GT1JNQVQsIHVpZCk7Ci0gIGVkaXRpb25faW5mbyA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfRURJVElPTiwgdWlkX3N0cik7Ci0gIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKGVkaXRpb25faW5mbywgLTEsIC0xKTsKLSAgZ19mcmVlICh1aWRfc3RyKTsKLQotICBmb3IgKGwgPSBzdWJlbnRyaWVzOyBsOyBsID0gbC0+bmV4dCkKLSAgICBnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnkgKGVkaXRpb25faW5mbywgbC0+ZGF0YSk7Ci0gIGdfbGlzdF9mcmVlIChzdWJlbnRyaWVzKTsKLQotICBpZiAoaXNfaGlkZGVuID09IDAgJiYgc3ViZW50cmllcyAhPSBOVUxMICYmIHJldCA9PSBHU1RfRkxPV19PSykKLSAgICBnc3RfdG9jX2FwcGVuZF9lbnRyeSAodG9jLCBlZGl0aW9uX2luZm8pOwotICBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICJTa2lwcGluZyBlbXB0eSBvciBoaWRkZW4gZWRpdGlvbiBpbiB0aGUgY2hhcHRlcnMgVE9DIik7Ci0gICAgZ3N0X3RvY19lbnRyeV91bnJlZiAoZWRpdGlvbl9pbmZvKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9jaGFwdGVycyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0VG9jICp0b2M7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiQ2hhcHRlcnMiKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiQ2hhcHRlcnMiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICAvKiBGSVhNRTogY3JlYXRlIENVUlJFTlQgdG9jIGFzIHdlbGwgKi8KLSAgdG9jID0gZ3N0X3RvY19uZXcgKEdTVF9UT0NfU0NPUEVfR0xPQkFMKTsKLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9FRElUSU9ORU5UUlk6Ci0gICAgICAgIHJldCA9Ci0gICAgICAgICAgICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfY2hhcHRlcl9lZGl0aW9uIChjb21tb24sIGVibWwsIHRvYyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXQgPQotICAgICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAoZ3N0X3RvY19nZXRfZW50cmllcyAodG9jKSAhPSBOVUxMKSB7Ci0gICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3Bvc3Rwcm9jZXNzX3RvY19lbnRyaWVzIChnc3RfdG9jX2dldF9lbnRyaWVzICh0b2MpLAotICAgICAgICBjb21tb24tPnNlZ21lbnQuZHVyYXRpb24sICIiKTsKLQotICAgIGNvbW1vbi0+dG9jID0gdG9jOwotICB9IGVsc2UKLSAgICBnc3RfdG9jX3VucmVmICh0b2MpOwotCi0gIGNvbW1vbi0+Y2hhcHRlcnNfcGFyc2VkID0gVFJVRTsKLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNoYXB0ZXJzIiwgcmV0KTsKLSAgcmV0dXJuIHJldDsKLX0KLQotR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2hlYWRlciAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGdjaGFyICpkb2N0eXBlOwotICBndWludCB2ZXJzaW9uOwotICBndWludDMyIGlkOwotCi0gIC8qIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGZpcnN0IHRvIGJlIGNhbGxlZCAqLwotCi0gIC8qIGRlZmF1bHQgaW5pdCAqLwotICBkb2N0eXBlID0gTlVMTDsKLSAgdmVyc2lvbiA9IDE7Ci0KLSAgcmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICByZXR1cm4gcmV0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgImlkOiAlMDh4IiwgaWQpOwotCi0gIGlmIChpZCAhPSBHU1RfRUJNTF9JRF9IRUFERVIpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJGYWlsZWQgdG8gcmVhZCBoZWFkZXIiKTsKLSAgICBnb3RvIGV4aXQ7Ci0gIH0KLQotICByZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICByZXR1cm4gcmV0OwotCi0gIHdoaWxlIChnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgcmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBleGl0X2Vycm9yOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICAvKiBpcyBvdXIgcmVhZCB2ZXJzaW9uIHVwdG9kYXRlPyAqLwotICAgICAgY2FzZSBHU1RfRUJNTF9JRF9FQk1MUkVBRFZFUlNJT046ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSk7Ci0gICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgZ290byBleGl0X2Vycm9yOwotICAgICAgICBpZiAobnVtICE9IEdTVF9FQk1MX1ZFUlNJT04pIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBFQk1MIHZlcnNpb24gJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgICBnb3RvIGV4aXRfZXJyb3I7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiRWJtbFJlYWRWZXJzaW9uOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiB3ZSBvbmx5IGhhbmRsZSA4IGJ5dGUgbGVuZ3RocyBhdCBtYXggKi8KLSAgICAgIGNhc2UgR1NUX0VCTUxfSURfRUJNTE1BWFNJWkVMRU5HVEg6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSk7Ci0gICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgZ290byBleGl0X2Vycm9yOwotICAgICAgICBpZiAobnVtID4gc2l6ZW9mIChndWludDY0KSkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICAgIlVuc3VwcG9ydGVkIEVCTUwgbWF4aW11bSBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICJFYm1sTWF4U2l6ZUxlbmd0aDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogd2UgaGFuZGxlIDQgYnl0ZSBJRHMgYXQgbWF4ICovCi0gICAgICBjYXNlIEdTVF9FQk1MX0lEX0VCTUxNQVhJRExFTkdUSDp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBnb3RvIGV4aXRfZXJyb3I7Ci0gICAgICAgIGlmIChudW0gPiBzaXplb2YgKGd1aW50MzIpKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgRUJNTCBtYXhpbXVtIElEICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICJFYm1sTWF4SWRMZW5ndGg6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIEdTVF9FQk1MX0lEX0RPQ1RZUEU6ewotICAgICAgICBnY2hhciAqdGV4dDsKLQotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX2FzY2lpIChlYm1sLCAmaWQsICZ0ZXh0KTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBnb3RvIGV4aXRfZXJyb3I7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiRWJtbERvY1R5cGU6ICVzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAodGV4dCkpOwotCi0gICAgICAgIGdfZnJlZSAoZG9jdHlwZSk7Ci0gICAgICAgIGRvY3R5cGUgPSB0ZXh0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfRUJNTF9JRF9ET0NUWVBFUkVBRFZFUlNJT046ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSk7Ci0gICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgZ290byBleGl0X2Vycm9yOwotICAgICAgICB2ZXJzaW9uID0gbnVtOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiRWJtbFJlYWRWZXJzaW9uOiAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKGNvbW1vbiwgZWJtbCwKLSAgICAgICAgICAgICJFQk1MIGhlYWRlciIsIGlkKTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBnb3RvIGV4aXRfZXJyb3I7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qIHdlIGlnbm9yZSB0aGVzZSB0d28sIGFzIHRoZXkgZG9uJ3QgdGVsbCB1cyBhbnl0aGluZyB3ZSBjYXJlIGFib3V0ICovCi0gICAgICBjYXNlIEdTVF9FQk1MX0lEX0VCTUxWRVJTSU9OOgotICAgICAgY2FzZSBHU1RfRUJNTF9JRF9ET0NUWVBFVkVSU0lPTjoKLSAgICAgICAgcmV0ID0gZ3N0X2VibWxfcmVhZF9za2lwIChlYm1sKTsKLSAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBnb3RvIGV4aXRfZXJyb3I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi1leGl0OgotCi0gIGlmICgoZG9jdHlwZSAhPSBOVUxMICYmICFzdHJjbXAgKGRvY3R5cGUsIEdTVF9NQVRST1NLQV9ET0NUWVBFX01BVFJPU0tBKSkgfHwKLSAgICAgIChkb2N0eXBlICE9IE5VTEwgJiYgIXN0cmNtcCAoZG9jdHlwZSwgR1NUX01BVFJPU0tBX0RPQ1RZUEVfV0VCTSkpIHx8Ci0gICAgICAoZG9jdHlwZSA9PSBOVUxMKSkgewotICAgIGlmICh2ZXJzaW9uIDw9IDIpIHsKLSAgICAgIGlmIChkb2N0eXBlKSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiSW5wdXQgaXMgJXMgdmVyc2lvbiAlZCIsIGRvY3R5cGUsCi0gICAgICAgICAgICB2ZXJzaW9uKTsKLSAgICAgICAgaWYgKCFzdHJjbXAgKGRvY3R5cGUsIEdTVF9NQVRST1NLQV9ET0NUWVBFX1dFQk0pKQotICAgICAgICAgIGNvbW1vbi0+aXNfd2VibSA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICJJbnB1dCBpcyBFQk1MIHdpdGhvdXQgZG9jdHlwZSwgYXNzdW1pbmcgIiAibWF0cm9za2EgKHZlcnNpb24gJWQpIiwKLSAgICAgICAgICAgIHZlcnNpb24pOwotICAgICAgfQotICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChjb21tb24sIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgICAoIkRlbXV4ZXIgdmVyc2lvbiAoMikgaXMgdG9vIG9sZCB0byByZWFkICVzIHZlcnNpb24gJWQiLAotICAgICAgICAgICAgICBHU1RfU1RSX05VTEwgKGRvY3R5cGUpLCB2ZXJzaW9uKSk7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGNvbW1vbiwgU1RSRUFNLCBXUk9OR19UWVBFLCAoTlVMTCksCi0gICAgICAgICgiSW5wdXQgaXMgbm90IGEgbWF0cm9za2Egc3RyZWFtIChkb2N0eXBlPSVzKSIsIGRvY3R5cGUpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi1leGl0X2Vycm9yOgotCi0gIGdfZnJlZSAoZG9jdHlwZSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9pbmRleF9jdWV0cmFjayAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVibWxSZWFkICogZWJtbCwgZ3VpbnQgKiBuZW50cmllcykKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdE1hdHJvc2thSW5kZXggaWR4OwotCi0gIGlkeC5wb3MgPSAoZ3VpbnQ2NCkgLSAxOwotICBpZHgudHJhY2sgPSAwOwotICBpZHgudGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGlkeC5ibG9jayA9IDE7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiQ3VlVHJhY2tQb3NpdGlvbnMiKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiQ3VlVHJhY2tQb3NpdGlvbnMiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIC8qIHRyYWNrIG51bWJlciAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ1VFVFJBQ0s6Ci0gICAgICB7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtID09IDApIHsKLSAgICAgICAgICBpZHgudHJhY2sgPSAwOwotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiSW52YWxpZCBDdWVUcmFjayAwIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJDdWVUcmFjazogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgaWR4LnRyYWNrID0gbnVtOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgICAvKiBwb3NpdGlvbiBpbiBmaWxlICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DVUVDTFVTVEVSUE9TSVRJT046Ci0gICAgICB7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtID4gR19NQVhJTlQ2NCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAgICAgICAiQ3VlQ2x1c3RlclBvc2l0aW9uICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiB0b28gbGFyZ2UiLCBudW0pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWR4LnBvcyA9IG51bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgICAgLyogbnVtYmVyIG9mIGJsb2NrIGluIHRoZSBjbHVzdGVyICovCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DVUVCTE9DS05VTUJFUjoKLSAgICAgIHsKLSAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChudW0gPT0gMCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiSW52YWxpZCBDdWVCbG9ja051bWJlciAwIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJDdWVCbG9ja051bWJlcjogJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIG51bSk7Ci0gICAgICAgIGlkeC5ibG9jayA9IG51bTsKLQotICAgICAgICAvKiBtaWxkIHNhbml0eSBjaGVjaywgZGlzcmVnYXJkIHN0cmFuZ2UgY2FzZXMgLi4uICovCi0gICAgICAgIGlmIChpZHguYmxvY2sgPiBHX01BWFVJTlQxNikgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIi4uLiBsb29rcyBzdXNwaWNpb3VzLCBpZ25vcmluZyIpOwotICAgICAgICAgIGlkeC5ibG9jayA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsCi0gICAgICAgICAgICAiQ3VlVHJhY2tQb3NpdGlvbnMiLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DVUVDT0RFQ1NUQVRFOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ1VFUkVGRVJFTkNFOgotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkN1ZVRyYWNrUG9zaXRpb25zIiwgcmV0KTsKLQotICAvKiAoZS5nLikgbGF2ZiB0eXBpY2FsbHkgY3JlYXRlcyBlbnRyaWVzIHdpdGhvdXQgYSBibG9jayBudW1iZXIsCi0gICAqIHdoaWNoIGlzIGJvZ3VzIGFuZCBsZWFkcyB0byBjb250cmFkaWN0b3J5IGluZm9ybWF0aW9uICovCi0gIGlmIChjb21tb24tPmluZGV4LT5sZW4pIHsKLSAgICBHc3RNYXRyb3NrYUluZGV4ICpsYXN0X2lkeDsKLQotICAgIGxhc3RfaWR4ID0gJmdfYXJyYXlfaW5kZXggKGNvbW1vbi0+aW5kZXgsIEdzdE1hdHJvc2thSW5kZXgsCi0gICAgICAgIGNvbW1vbi0+aW5kZXgtPmxlbiAtIDEpOwotICAgIGlmIChsYXN0X2lkeC0+YmxvY2sgPT0gaWR4LmJsb2NrICYmIGxhc3RfaWR4LT5wb3MgPT0gaWR4LnBvcyAmJgotICAgICAgICBsYXN0X2lkeC0+dHJhY2sgPT0gaWR4LnRyYWNrICYmIGlkeC50aW1lID4gbGFzdF9pZHgtPnRpbWUpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkN1ZSBlbnRyeSByZWZlcnMgdG8gc2FtZSBsb2NhdGlvbiwgIgotICAgICAgICAgICJidXQgaGFzIGRpZmZlcmVudCB0aW1lIHRoYW4gcHJldmlvdXMgZW50cnk7IGRpc2NhcmRpbmciKTsKLSAgICAgIGlkeC50cmFjayA9IDA7Ci0gICAgfQotICB9Ci0KLSAgaWYgKChyZXQgPT0gR1NUX0ZMT1dfT0sgfHwgcmV0ID09IEdTVF9GTE9XX0VPUykKLSAgICAgICYmIGlkeC5wb3MgIT0gKGd1aW50NjQpIC0gMSAmJiBpZHgudHJhY2sgPiAwKSB7Ci0gICAgZ19hcnJheV9hcHBlbmRfdmFsIChjb21tb24tPmluZGV4LCBpZHgpOwotICAgICgqbmVudHJpZXMpKys7Ci0gIH0gZWxzZSBpZiAocmV0ID09IEdTVF9GTE9XX09LIHx8IHJldCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICJDdWVUcmFja1Bvc2l0aW9ucyB3aXRob3V0IHZhbGlkIGNvbnRlbnQiKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfaW5kZXhfcG9pbnRlbnRyeSAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICoKLSAgICBjb21tb24sIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgZ3VpbnQzMiBpZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZ3VpbnQgbmVudHJpZXMgPSAwOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKGNvbW1vbiwgZWJtbCwgIkN1ZVBvaW50Iik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkN1ZVBvaW50IiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgICAvKiBvbmUgc2luZ2xlIGluZGV4IGVudHJ5ICgncG9pbnQnKSAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ1VFVElNRToKLSAgICAgIHsKLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJnRpbWUpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJDdWVUaW1lOiAlIiBHX0dVSU5UNjRfRk9STUFULCB0aW1lKTsKLSAgICAgICAgdGltZSA9IHRpbWUgKiBjb21tb24tPnRpbWVfc2NhbGU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAgIC8qIHBvc2l0aW9uIGluIHRoZSBmaWxlICsgdHJhY2sgdG8gd2hpY2ggaXQgYmVsb25ncyAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ1VFVFJBQ0tQT1NJVElPTlM6Ci0gICAgICB7Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9pbmRleF9jdWV0cmFjayAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgJm5lbnRyaWVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsICJDdWVQb2ludCIsCi0gICAgICAgICAgICBpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiQ3VlUG9pbnQiLCByZXQpOwotCi0gIGlmIChuZW50cmllcyA+IDApIHsKLSAgICBpZiAodGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkN1ZVBvaW50IHdpdGhvdXQgdmFsaWQgdGltZSIpOwotICAgICAgZ19hcnJheV9yZW1vdmVfcmFuZ2UgKGNvbW1vbi0+aW5kZXgsIGNvbW1vbi0+aW5kZXgtPmxlbiAtIG5lbnRyaWVzLAotICAgICAgICAgIG5lbnRyaWVzKTsKLSAgICB9IGVsc2UgewotICAgICAgZ2ludCBpOwotCi0gICAgICBmb3IgKGkgPSBjb21tb24tPmluZGV4LT5sZW4gLSBuZW50cmllczsgaSA8IGNvbW1vbi0+aW5kZXgtPmxlbjsgaSsrKSB7Ci0gICAgICAgIEdzdE1hdHJvc2thSW5kZXggKmlkeCA9Ci0gICAgICAgICAgICAmZ19hcnJheV9pbmRleCAoY29tbW9uLT5pbmRleCwgR3N0TWF0cm9za2FJbmRleCwgaSk7Ci0KLSAgICAgICAgaWR4LT50aW1lID0gdGltZTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiSW5kZXggZW50cnk6IHBvcz0lIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiLCB0aW1lPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCB0cmFjaz0ldSwgYmxvY2s9JXUiLCBpZHgtPnBvcywKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGlkeC0+dGltZSksIChndWludCkgaWR4LT50cmFjaywgKGd1aW50KSBpZHgtPmJsb2NrKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiRW1wdHkgQ3VlUG9pbnQiKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdpbnQKLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9zdHJlYW1fZnJvbV9udW0gKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBndWludCB0cmFja19udW0pCi17Ci0gIGd1aW50IG47Ci0KLSAgZ19hc3NlcnQgKGNvbW1vbi0+c3JjLT5sZW4gPT0gY29tbW9uLT5udW1fc3RyZWFtcyk7Ci0gIGZvciAobiA9IDA7IG4gPCBjb21tb24tPnNyYy0+bGVuOyBuKyspIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IGdfcHRyX2FycmF5X2luZGV4IChjb21tb24tPnNyYywgbik7Ci0KLSAgICBpZiAoY29udGV4dC0+bnVtID09IHRyYWNrX251bSkgewotICAgICAgcmV0dXJuIG47Ci0gICAgfQotICB9Ci0KLSAgaWYgKG4gPT0gY29tbW9uLT5udW1fc3RyZWFtcykKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgIkZhaWxlZCB0byBmaW5kIGNvcnJlc3BvbmRpbmcgcGFkIGZvciB0cmFja251bSAlZCIsIHRyYWNrX251bSk7Ci0KLSAgcmV0dXJuIC0xOwotfQotCi1Hc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfaW5kZXggKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFYm1sUmVhZCAqIGVibWwpCi17Ci0gIGd1aW50MzIgaWQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50IGk7Ci0KLSAgaWYgKGNvbW1vbi0+aW5kZXgpCi0gICAgZ19hcnJheV9mcmVlIChjb21tb24tPmluZGV4LCBUUlVFKTsKLSAgY29tbW9uLT5pbmRleCA9Ci0gICAgICBnX2FycmF5X3NpemVkX25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKEdzdE1hdHJvc2thSW5kZXgpLCAxMjgpOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKGNvbW1vbiwgZWJtbCwgIkN1ZXMiKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiQ3VlcyIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgLyogb25lIHNpbmdsZSBpbmRleCBlbnRyeSAoJ3BvaW50JykgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1BPSU5URU5UUlk6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9pbmRleF9wb2ludGVudHJ5IChjb21tb24sIGVibWwpOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3NraXAgKGNvbW1vbiwgZWJtbCwgIkN1ZXMiLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkN1ZXMiLCByZXQpOwotCi0gIC8qIFNvcnQgaW5kZXggYnkgdGltZSwgc21hbGxlc3QgdGltZSBmaXJzdCwgZm9yIGVhc2llciBzZWFyY2hpbmcgKi8KLSAgZ19hcnJheV9zb3J0IChjb21tb24tPmluZGV4LCAoR0NvbXBhcmVGdW5jKSBnc3RfbWF0cm9za2FfaW5kZXhfY29tcGFyZSk7Ci0KLSAgLyogTm93IHNvcnQgdGhlIHRyYWNrIHNwZWNpZmljIGluZGV4IGVudHJpZXMgaW50byB0aGVpciBvd24gYXJyYXlzICovCi0gIGZvciAoaSA9IDA7IGkgPCBjb21tb24tPmluZGV4LT5sZW47IGkrKykgewotICAgIEdzdE1hdHJvc2thSW5kZXggKmlkeCA9ICZnX2FycmF5X2luZGV4IChjb21tb24tPmluZGV4LCBHc3RNYXRyb3NrYUluZGV4LAotICAgICAgICBpKTsKLSAgICBnaW50IHRyYWNrX251bTsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY3R4OwotCi0jaWYgMAotICAgIGlmIChjb21tb24tPmVsZW1lbnRfaW5kZXgpIHsKLSAgICAgIGdpbnQgd3JpdGVyX2lkOwotCi0gICAgICBpZiAoaWR4LT50cmFjayAhPSAwICYmCi0gICAgICAgICAgKHRyYWNrX251bSA9Ci0gICAgICAgICAgICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9zdHJlYW1fZnJvbV9udW0gKGNvbW1vbiwKLSAgICAgICAgICAgICAgICAgIGlkeC0+dHJhY2spKSAhPSAtMSkgewotICAgICAgICBjdHggPSBnX3B0cl9hcnJheV9pbmRleCAoY29tbW9uLT5zcmMsIHRyYWNrX251bSk7Ci0KLSAgICAgICAgaWYgKGN0eC0+aW5kZXhfd3JpdGVyX2lkID09IC0xKQotICAgICAgICAgIGdzdF9pbmRleF9nZXRfd3JpdGVyX2lkIChjb21tb24tPmVsZW1lbnRfaW5kZXgsCi0gICAgICAgICAgICAgIEdTVF9PQkpFQ1QgKGN0eC0+cGFkKSwgJmN0eC0+aW5kZXhfd3JpdGVyX2lkKTsKLSAgICAgICAgd3JpdGVyX2lkID0gY3R4LT5pbmRleF93cml0ZXJfaWQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoY29tbW9uLT5lbGVtZW50X2luZGV4X3dyaXRlcl9pZCA9PSAtMSkKLSAgICAgICAgICBnc3RfaW5kZXhfZ2V0X3dyaXRlcl9pZCAoY29tbW9uLT5lbGVtZW50X2luZGV4LCBHU1RfT0JKRUNUIChjb21tb24pLAotICAgICAgICAgICAgICAmY29tbW9uLT5lbGVtZW50X2luZGV4X3dyaXRlcl9pZCk7Ci0gICAgICAgIHdyaXRlcl9pZCA9IGNvbW1vbi0+ZWxlbWVudF9pbmRleF93cml0ZXJfaWQ7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgImFkZGluZyBhc3NvY2lhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIi0+ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAiIGZvciB3cml0ZXIgaWQgJWQiLCBHU1RfVElNRV9BUkdTIChpZHgtPnRpbWUpLCBpZHgtPnBvcywgd3JpdGVyX2lkKTsKLSAgICAgIGdzdF9pbmRleF9hZGRfYXNzb2NpYXRpb24gKGNvbW1vbi0+ZWxlbWVudF9pbmRleCwgd3JpdGVyX2lkLAotICAgICAgICAgIEdTVF9BU1NPQ0lBVElPTl9GTEFHX0tFWV9VTklULCBHU1RfRk9STUFUX1RJTUUsIGlkeC0+dGltZSwKLSAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBpZHgtPnBvcyArIGNvbW1vbi0+ZWJtbF9zZWdtZW50X3N0YXJ0LCBOVUxMKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChpZHgtPnRyYWNrID09IDApCi0gICAgICBjb250aW51ZTsKLQotICAgIHRyYWNrX251bSA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9zdHJlYW1fZnJvbV9udW0gKGNvbW1vbiwgaWR4LT50cmFjayk7Ci0gICAgaWYgKHRyYWNrX251bSA9PSAtMSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgY3R4ID0gZ19wdHJfYXJyYXlfaW5kZXggKGNvbW1vbi0+c3JjLCB0cmFja19udW0pOwotCi0gICAgaWYgKGN0eC0+aW5kZXhfdGFibGUgPT0gTlVMTCkKLSAgICAgIGN0eC0+aW5kZXhfdGFibGUgPQotICAgICAgICAgIGdfYXJyYXlfc2l6ZWRfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR3N0TWF0cm9za2FJbmRleCksIDEyOCk7Ci0KLSAgICBnX2FycmF5X2FwcGVuZF92YWxzIChjdHgtPmluZGV4X3RhYmxlLCBpZHgsIDEpOwotICB9Ci0KLSAgY29tbW9uLT5pbmRleF9wYXJzZWQgPSBUUlVFOwotCi0gIC8qIHNhbml0eSBjaGVjazsgZW1wdHkgaW5kZXggbm9ybWFsaXplcyB0byBubyBpbmRleCAqLwotICBpZiAoY29tbW9uLT5pbmRleC0+bGVuID09IDApIHsKLSAgICBnX2FycmF5X2ZyZWUgKGNvbW1vbi0+aW5kZXgsIFRSVUUpOwotICAgIGNvbW1vbi0+aW5kZXggPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2luZm8gKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFbGVtZW50ICogZWwsIEdzdEVibWxSZWFkICogZWJtbCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2RvdWJsZSBkdXJfZiA9IC0xLjA7Ci0gIGd1aW50MzIgaWQ7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiU2VnbWVudEluZm8iKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiU2VnbWVudEluZm8iLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIC8qIGNsdXN0ZXIgdGltZWNvZGUgKi8KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RJTUVDT0RFU0NBTEU6ewotICAgICAgICBndWludDY0IG51bTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfdWludCAoZWJtbCwgJmlkLCAmbnVtKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJUaW1lQ29kZVNjYWxlOiAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICAgICAgbnVtKTsKLSAgICAgICAgY29tbW9uLT50aW1lX3NjYWxlID0gbnVtOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfRFVSQVRJT046ewotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfZmxvYXQgKGVibWwsICZpZCwgJmR1cl9mKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKGR1cl9mIDw9IDAuMCkgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiSW52YWxpZCBkdXJhdGlvbiAlbGYiLCBkdXJfZik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJEdXJhdGlvbjogJWxmIiwgZHVyX2YpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfV1JJVElOR0FQUDp7Ci0gICAgICAgIGdjaGFyICp0ZXh0OwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91dGY4IChlYm1sLCAmaWQsICZ0ZXh0KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiV3JpdGluZ0FwcDogJXMiLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMICh0ZXh0KSk7Ci0gICAgICAgIGNvbW1vbi0+d3JpdGluZ19hcHAgPSB0ZXh0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfTVVYSU5HQVBQOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJnRleHQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJNdXhpbmdBcHA6ICVzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAodGV4dCkpOwotICAgICAgICBjb21tb24tPm11eGluZ19hcHAgPSB0ZXh0OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfREFURVVUQzp7Ci0gICAgICAgIGdpbnQ2NCB0aW1lOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF9kYXRlIChlYm1sLCAmaWQsICZ0aW1lKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLCAiRGF0ZVVUQzogJSIgR19HSU5UNjRfRk9STUFULCB0aW1lKTsKLSAgICAgICAgY29tbW9uLT5jcmVhdGVkID0gdGltZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RJVExFOnsKLSAgICAgICAgZ2NoYXIgKnRleHQ7Ci0gICAgICAgIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3V0ZjggKGVibWwsICZpZCwgJnRleHQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJUaXRsZTogJXMiLCBHU1RfU1RSX05VTEwgKHRleHQpKTsKLSAgICAgICAgdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfVElUTEUsIHRleHQsIE5VTEwpOwotICAgICAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlICh0YWdsaXN0LCBHU1RfVEFHX1NDT1BFX0dMT0JBTCk7Ci0gICAgICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9mb3VuZF9nbG9iYWxfdGFnIChjb21tb24sIGVsLCB0YWdsaXN0KTsKLSAgICAgICAgZ19mcmVlICh0ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsCi0gICAgICAgICAgICAiU2VnbWVudEluZm8iLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVFVJRDoKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NFR01FTlRGSUxFTkFNRToKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1BSRVZVSUQ6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9QUkVWRklMRU5BTUU6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9ORVhUVUlEOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfTkVYVEZJTEVOQU1FOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfU0VHTUVOVEZBTUlMWToKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NIQVBURVJUUkFOU0xBVEU6Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfc2tpcCAoZWJtbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmIChkdXJfZiA+IDAuMCkgewotICAgIEdzdENsb2NrVGltZSBkdXJfdTsKLQotICAgIGR1cl91ID0gZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCAoZHVyX2YgKgotICAgICAgICBnc3RfZ3VpbnQ2NF90b19nZG91YmxlIChjb21tb24tPnRpbWVfc2NhbGUpKTsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cl91KSAmJiBkdXJfdSA8PSBHX01BWElOVDY0KQotICAgICAgY29tbW9uLT5zZWdtZW50LmR1cmF0aW9uID0gZHVyX3U7Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIlNlZ21lbnRJbmZvIiwgcmV0KTsKLQotICBjb21tb24tPnNlZ21lbnRpbmZvX3BhcnNlZCA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9tZXRhZGF0YV9pZF9zaW1wbGVfdGFnIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKgotICAgIGNvbW1vbiwgR3N0RWJtbFJlYWQgKiBlYm1sLCBHc3RUYWdMaXN0ICoqIHBfdGFnbGlzdCwgZ2NoYXIgKiBwYXJlbnQpCi17Ci0gIC8qIEZJWE1FOiBjaGVjayBpZiB0aGVyZSBhcmUgbW9yZSB1c2VmdWwgbWFwcGluZ3MgKi8KLSAgc3RhdGljIGNvbnN0IHN0cnVjdAotICB7Ci0gICAgY29uc3QgZ2NoYXIgKm1hdHJvc2thX3RhZ25hbWU7Ci0gICAgY29uc3QgZ2NoYXIgKmdzdHJlYW1lcl90YWduYW1lOwotICB9Ci0gIHRhZ19jb252W10gPSB7Ci0gICAgewotICAgICAgLyogVGhlIGZvbGxvd2luZyBsaXN0IGhhcyB0aGUgX3NhbWVfIG9yZGVyIGFzIHRoZSBvbmUgaW4gTWF0cm9za2Egc3BlYy4gUGxlYXNlLCBkb24ndCBtZXNzIGl0IHVwLiAqLwotICAgICAgLyogVE9ETzogTmVzdGluZyBpbmZvcm1hdGlvbjoKLSAgICAgICAgIE9SSUdJTkFMIEEgc3BlY2lhbCB0YWcgdGhhdCBpcyBtZWFudCB0byBoYXZlIG90aGVyIHRhZ3MgaW5zaWRlICh1c2luZyBuZXN0ZWQgdGFncykgdG8gZGVzY3JpYmUgdGhlIG9yaWdpbmFsIHdvcmsgb2YgYXJ0IHRoYXQgdGhpcyBpdGVtIGlzIGJhc2VkIG9uLiBBbGwgdGFncyBpbiB0aGlzIGxpc3QgY2FuIGJlIHVzZWQgInVuZGVyIiB0aGUgT1JJR0lOQUwgdGFnIGxpa2UgTFlSSUNJU1QsIFBFUkZPUk1FUiwgZXRjLgotICAgICAgICAgU0FNUExFIEEgdGFnIHRoYXQgY29udGFpbnMgb3RoZXIgdGFncyB0byBkZXNjcmliZSBhIHNhbXBsZSB1c2VkIGluIHRoZSB0YXJnZXRlZCBpdGVtIHRha2VuIGZyb20gYW5vdGhlciB3b3JrIG9mIGFydC4gQWxsIHRhZ3MgaW4gdGhpcyBsaXN0IGNhbiBiZSB1c2VkICJ1bmRlciIgdGhlIFNBTVBMRSB0YWcgbGlrZSBUSVRMRSwgQVJUSVNULCBEQVRFX1JFTEVBU0VELCBldGMuCi0gICAgICAgICBDT1VOVFJZIFRoZSBuYW1lIG9mIHRoZSBjb3VudHJ5IChiaWJsaW8gSVNPLTYzOS0yKSB0aGF0IGlzIG1lYW50IHRvIGhhdmUgb3RoZXIgdGFncyBpbnNpZGUgKHVzaW5nIG5lc3RlZCB0YWdzKSB0byBjb3VudHJ5IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpdGVtLiBBbGwgdGFncyBpbiB0aGlzIGxpc3QgY2FuIGJlIHVzZWQgInVuZGVyIiB0aGUgQ09VTlRSWV9TUEVDSUZJQyB0YWcgbGlrZSBMQUJFTCwgUFVCTElTSF9SQVRJTkcsIGV0Yy4KLSAgICAgICAqLwotCi0gICAgICAvKiBPcmdhbml6YXRpb25hbCBJbmZvcm1hdGlvbiAqLwotICAgIEdTVF9NQVRST1NLQV9UQUdfSURfVE9UQUxfUEFSVFMsIEdTVF9UQUdfVFJBQ0tfQ09VTlR9LCB7Ci0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9QQVJUX05VTUJFUiwgR1NUX1RBR19UUkFDS19OVU1CRVJ9LCB7Ci0gICAgICAvKiBUT0RPOiBQQVJUX09GRlNFVCBBIG51bWJlciB0byBhZGQgdG8gUEFSVF9OVU1CRVIgd2hlbiB0aGUgcGFydHMgYXQgdGhhdCBsZXZlbCBkb24ndCBzdGFydCBhdCAxLiAoZS5nLiBpZiBUYXJnZXRUeXBlIGlzIFRSQUNLLCB0aGUgdHJhY2sgbnVtYmVyIG9mIHRoZSBzZWNvbmQgYXVkaW8gQ0QpICovCi0KLSAgICAgIC8qIFRpdGxlcyAqLwotICAgIEdTVF9NQVRST1NLQV9UQUdfSURfU1VCVElUTEUsIEdTVF9UQUdfVElUTEV9LCB7ICAgICAvKiBTdWIgVGl0bGUgb2YgdGhlIGVudGl0eS4gU2luY2Ugd2UncmUgY29uY2F0J2luZyBhbGwgdGl0bGUtbGlrZSBlbnRpdGllcyBhbnl3YXksIG1pZ2h0IGFzIHdlbGwgYWRkIHRoZSBzdWItdGl0bGUuICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9USVRMRSwgR1NUX1RBR19USVRMRX0sIHsKLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0FMQlVNLCBHU1RfVEFHX0FMQlVNfSwgeyAgICAgICAgLyogTWF0cm9za2Egc3BlYyBkb2VzIE5PVCBoYXZlIHRoaXMgdGFnISBEdW5ubyB3aGF0IGl0IHdhcyBkb2luZyBoZXJlLCBwcm9iYWJseSBmb3IgY29tcGF0aWJpbGl0eS4gKi8KLQotICAgICAgLyogVE9ETzogTmVzdGVkIEluZm9ybWF0aW9uOgotICAgICAgICAgVVJMIFVSTCBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YWcgaXQncyBpbmNsdWRlZCBpbi4KLSAgICAgICAgIFNPUlRfV0lUSCBBIGNoaWxkIGVsZW1lbnQgdG8gaW5kaWNhdGUgd2hhdCBhbHRlcm5hdGl2ZSB2YWx1ZSB0aGUgcGFyZW50IHRhZyBjYW4gaGF2ZSB0byBiZSBzb3J0ZWQsIGZvciBleGFtcGxlICJQZXQgU2hvcCBCb3lzIiBpbnN0ZWFkIG9mICJUaGUgUGV0IFNob3AgQm95cyIuIE9yICJNYXJsZXkgQm9iIiBhbmQgIk1hcmxleSBaaWdneSIgKG5vIGNvbW1hIG5lZWRlZCkuCi0gICAgICAgICBJTlNUUlVNRU5UUyBUaGUgaW5zdHJ1bWVudHMgdGhhdCBhcmUgYmVpbmcgdXNlZC9wbGF5ZWQsIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBJdCBzaG91bGQgYmUgYSBjaGlsZCBvZiB0aGUgZm9sbG93aW5nIHRhZ3M6IEFSVElTVCwgTEVBRF9QRVJGT1JNRVIgb3IgQUNDT01QQU5JTUVOVC4KLSAgICAgICAgIEVNQUlMIEVtYWlsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhZyBpdCdzIGluY2x1ZGVkIGluLgotICAgICAgICAgQUREUkVTUyBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZW50aXR5LiBUaGUgYWRkcmVzcyBzaG91bGQgaW5jbHVkZSBhIGNvdW50cnkgY29kZS4gSXQgY2FuIGJlIHVzZWZ1bCBmb3IgYSByZWNvcmRpbmcgbGFiZWwuCi0gICAgICAgICBGQVggVGhlIGZheCBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgdGFnIGl0J3MgaW5jbHVkZWQgaW4uIEl0IGNhbiBiZSB1c2VmdWwgZm9yIGEgcmVjb3JkaW5nIGxhYmVsLgotICAgICAgICAgUEhPTkUgVGhlIHBob25lIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZSB0YWcgaXQncyBpbmNsdWRlZCBpbi4gSXQgY2FuIGJlIHVzZWZ1bCBmb3IgYSByZWNvcmRpbmcgbGFiZWwuCi0gICAgICAgKi8KLQotICAgICAgLyogRW50aXRpZXMgKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0FSVElTVCwgR1NUX1RBR19BUlRJU1R9LCB7Ci0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9MRUFEX1BFUkZPUk1FUiwgR1NUX1RBR19QRVJGT1JNRVJ9LCB7Ci0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9BQ0NPTVBBTklNRU5ULCBHU1RfVEFHX1BFUkZPUk1FUn0sIHsgICAgLyogQmFuZC9vcmNoZXN0cmEvYWNjb21wYW5pbWVudC9tdXNpY2lhbi4gVGhpcyBpcyBha2luIHRvIHRoZSBUUEUyIHRhZyBpbiBJRDMuICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9DT01QT1NFUiwgR1NUX1RBR19DT01QT1NFUn0sIHsKLSAgICAgIC8qIEFSUkFOR0VSIFRoZSBwZXJzb24gd2hvIGFycmFuZ2VkIHRoZSBwaWVjZSwgZS5nLiwgUmF2ZWwuICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9MWVJJQ1MsIEdTVF9UQUdfTFlSSUNTfSwgeyAgICAgIC8qIFRoZSBseXJpY3MgY29ycmVzcG9uZGluZyB0byBhIHNvbmcgKGluIGNhc2UgYXVkaW8gc3luY2hyb25pemF0aW9uIGlzIG5vdCBrbm93biBvciBhcyBhIGRvdWJsb24gdG8gYSBzdWJ0aXRsZSB0cmFjaykuIEVkaXRpbmcgdGhpcyB2YWx1ZSB3aGVuIHN1YnRpdGxlcyBhcmUgZm91bmQgc2hvdWxkIGFsc28gcmVzdWx0IGluIGVkaXRpbmcgdGhlIHN1YnRpdGxlIHRyYWNrIGZvciBtb3JlIGNvbnNpc3RlbmN5LiAqLwotICAgICAgLyogTFlSSUNJU1QgVGhlIHBlcnNvbiB3aG8gd3JvdGUgdGhlIGx5cmljcyBmb3IgYSBtdXNpY2FsIGl0ZW0uIFRoaXMgaXMgYWtpbiB0byB0aGUgVEVYVCB0YWcgaW4gSUQzLiAqLwotICAgIEdTVF9NQVRST1NLQV9UQUdfSURfQ09ORFVDVE9SLCBHU1RfVEFHX1BFUkZPUk1FUn0sIHsgICAgICAgIC8qIENvbmR1Y3Rvci9wZXJmb3JtZXIgcmVmaW5lbWVudC4gVGhpcyBpcyBha2luIHRvIHRoZSBUUEUzIHRhZyBpbiBJRDMuICovCi0gICAgICAvKiBESVJFQ1RPUiBUaGlzIGlzIGFraW4gdG8gdGhlIElBUlQgdGFnIGluIFJJRkYuICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9BVVRIT1IsIEdTVF9UQUdfQVJUSVNUfSwgewotICAgICAgLyogQVNTSVNUQU5UX0RJUkVDVE9SIFRoZSBuYW1lIG9mIHRoZSBhc3Npc3RhbnQgZGlyZWN0b3IuICovCi0gICAgICAvKiBESVJFQ1RPUl9PRl9QSE9UT0dSQVBIWSBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3Igb2YgcGhvdG9ncmFwaHksIGFsc28ga25vd24gYXMgY2luZW1hdG9ncmFwaGVyLiBUaGlzIGlzIGFraW4gdG8gdGhlIElDTk0gdGFnIGluIEV4dGVuZGVkIFJJRkYuICovCi0gICAgICAvKiBTT1VORF9FTkdJTkVFUiBUaGUgbmFtZSBvZiB0aGUgc291bmQgZW5naW5lZXIgb3Igc291bmQgcmVjb3JkaXN0LiAqLwotICAgICAgLyogQVJUX0RJUkVDVE9SIFRoZSBwZXJzb24gd2hvIG92ZXJzZWVzIHRoZSBhcnRpc3RzIGFuZCBjcmFmdHNwZW9wbGUgd2hvIGJ1aWxkIHRoZSBzZXRzLiAqLwotICAgICAgLyogUFJPRFVDVElPTl9ERVNJR05FUiBBcnRpc3QgcmVzcG9uc2libGUgZm9yIGRlc2lnbmluZyB0aGUgb3ZlcmFsbCB2aXN1YWwgYXBwZWFyYW5jZSBvZiBhIG1vdmllLiAqLwotICAgICAgLyogQ0hPUkVHUkFQSEVSIFRoZSBuYW1lIG9mIHRoZSBjaG9yZWdyYXBoZXIgKi8KLSAgICAgIC8qIENPU1RVTUVfREVTSUdORVIgVGhlIG5hbWUgb2YgdGhlIGNvc3R1bWUgZGVzaWduZXIgKi8KLSAgICAgIC8qIEFDVE9SIEFuIGFjdG9yIG9yIGFjdHJlc3MgcGxheWluZyBhIHJvbGUgaW4gdGhpcyBtb3ZpZS4gVGhpcyBpcyB0aGUgcGVyc29uJ3MgcmVhbCBuYW1lLCBub3QgdGhlIGNoYXJhY3RlcidzIG5hbWUgdGhlIHBlcnNvbiBpcyBwbGF5aW5nLiAqLwotICAgICAgLyogQ0hBUkFDVEVSIFRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgYW4gYWN0b3Igb3IgYWN0cmVzcyBwbGF5cyBpbiB0aGlzIG1vdmllLiBUaGlzIHNob3VsZCBiZSBhIHN1Yi10YWcgb2YgYW4gQUNUT1IgdGFnIGluIG9yZGVyIG5vdCB0byBjYXVzZSBhbWJpZ3VpdGllcy4gKi8KLSAgICAgIC8qIFdSSVRURU5fQlkgVGhlIGF1dGhvciBvZiB0aGUgc3Rvcnkgb3Igc2NyaXB0ICh1c2VkIGZvciBtb3ZpZXMgYW5kIFRWIHNob3dzKS4gKi8KLSAgICAgIC8qIFNDUkVFTlBMQVlfQlkgVGhlIGF1dGhvciBvZiB0aGUgc2NyZWVucGxheSBvciBzY2VuYXJpbyAodXNlZCBmb3IgbW92aWVzIGFuZCBUViBzaG93cykuICovCi0gICAgICAvKiBFRElURURfQlkgVGhpcyBpcyBha2luIHRvIHRoZSBJRURUIHRhZyBpbiBFeHRlbmRlZCBSSUZGLiAqLwotICAgICAgLyogUFJPRFVDRVIgUHJvZHVjZWQgYnkuIFRoaXMgaXMgYWtpbiB0byB0aGUgSVBSTyB0YWcgaW4gRXh0ZW5kZWQgUklGRi4gKi8KLSAgICAgIC8qIENPUFJPRFVDRVIgVGhlIG5hbWUgb2YgYSBjby1wcm9kdWNlci4gKi8KLSAgICAgIC8qIEVYRUNVVElWRV9QUk9EVUNFUiBUaGUgbmFtZSBvZiBhbiBleGVjdXRpdmUgcHJvZHVjZXIuICovCi0gICAgICAvKiBESVNUUklCVVRFRF9CWSBUaGlzIGlzIGFraW4gdG8gdGhlIElEU1QgdGFnIGluIEV4dGVuZGVkIFJJRkYuICovCi0gICAgICAvKiBNQVNURVJFRF9CWSBUaGUgZW5naW5lZXIgd2hvIG1hc3RlcmVkIHRoZSBjb250ZW50IGZvciBhIHBoeXNpY2FsIG1lZGl1bSBvciBmb3IgZGlnaXRhbCBkaXN0cmlidXRpb24uICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9FTkNPREVEX0JZLCBHU1RfVEFHX0VOQ09ERURfQll9LCB7ICAgICAgLyogVGhpcyBpcyBha2luIHRvIHRoZSBURU5DIHRhZyBpbiBJRDMuICovCi0gICAgICAvKiBNSVhFRF9CWSBESiBtaXggYnkgdGhlIGFydGlzdCBzcGVjaWZpZWQgKi8KLSAgICAgIC8qIFJFTUlYRURfQlkgSW50ZXJwcmV0ZWQsIHJlbWl4ZWQsIG9yIG90aGVyd2lzZSBtb2RpZmllZCBieS4gVGhpcyBpcyBha2luIHRvIHRoZSBUUEU0IHRhZyBpbiBJRDMuICovCi0gICAgICAvKiBQUk9EVUNUSU9OX1NUVURJTyBUaGlzIGlzIGFraW4gdG8gdGhlIElTVEQgdGFnIGluIEV4dGVuZGVkIFJJRkYuICovCi0gICAgICAvKiBUSEFOS1NfVE8gQSB2ZXJ5IGdlbmVyYWwgdGFnIGZvciBldmVyeW9uZSBlbHNlIHRoYXQgd2FudHMgdG8gYmUgbGlzdGVkLiAqLwotICAgICAgLyogUFVCTElTSEVSIFRoaXMgaXMgYWtpbiB0byB0aGUgVFBVQiB0YWcgaW4gSUQzLiAqLwotICAgICAgLyogTEFCRUwgVGhlIHJlY29yZCBsYWJlbCBvciBpbXByaW50IG9uIHRoZSBkaXNjLiAqLwotICAgICAgLyogU2VhcmNoIC8gQ2xhc3NpZmljYXRpb24gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0dFTlJFLCBHU1RfVEFHX0dFTlJFfSwgewotICAgICAgLyogTU9PRCBJbnRlbmRlZCB0byByZWZsZWN0IHRoZSBtb29kIG9mIHRoZSBpdGVtIHdpdGggYSBmZXcga2V5d29yZHMsIGUuZy4gIlJvbWFudGljIiwgIlNhZCIgb3IgIlVwbGlmdGluZyIuIFRoZSBmb3JtYXQgZm9sbG93cyB0aGF0IG9mIHRoZSBUTU9PIHRhZyBpbiBJRDMuICovCi0gICAgICAvKiBPUklHSU5BTF9NRURJQV9UWVBFIERlc2NyaWJlcyB0aGUgb3JpZ2luYWwgdHlwZSBvZiB0aGUgbWVkaWEsIHN1Y2ggYXMsICJEVkQiLCAiQ0QiLCAiY29tcHV0ZXIgaW1hZ2UsIiAiZHJhd2luZywiICJsaXRob2dyYXBoLCIgYW5kIHNvIGZvcnRoLiBUaGlzIGlzIGFraW4gdG8gdGhlIFRNRUQgdGFnIGluIElEMy4gKi8KLSAgICAgIC8qIENPTlRFTlRfVFlQRSBUaGUgdHlwZSBvZiB0aGUgaXRlbS4gZS5nLiBEb2N1bWVudGFyeSwgRmVhdHVyZSBGaWxtLCBDYXJ0b29uLCBNdXNpYyBWaWRlbywgTXVzaWMsIFNvdW5kIEZYLCAuLi4gKi8KLSAgICAgIC8qIFNVQkpFQ1QgRGVzY3JpYmVzIHRoZSB0b3BpYyBvZiB0aGUgZmlsZSwgc3VjaCBhcyAiQWVyaWFsIHZpZXcgb2YgU2VhdHRsZS4iICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9ERVNDUklQVElPTiwgR1NUX1RBR19ERVNDUklQVElPTn0sIHsgICAgLyogQSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGVudCwgc3VjaCBhcyAiVHdvIGJpcmRzIGZseWluZy4iICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9LRVlXT1JEUywgR1NUX1RBR19LRVlXT1JEU30sIHsgIC8qIEtleXdvcmRzIHRvIHRoZSBpdGVtIHNlcGFyYXRlZCBieSBhIGNvbW1hLCB1c2VkIGZvciBzZWFyY2hpbmcuICovCi0gICAgICAvKiBTVU1NQVJZIEEgcGxvdCBvdXRsaW5lIG9yIGEgc3VtbWFyeSBvZiB0aGUgc3RvcnkuICovCi0gICAgICAvKiBTWU5PUFNJUyBBIGRlc2NyaXB0aW9uIG9mIHRoZSBzdG9yeSBsaW5lIG9mIHRoZSBpdGVtLiAqLwotICAgICAgLyogSU5JVElBTF9LRVkgVGhlIGluaXRpYWwga2V5IHRoYXQgYSBtdXNpY2FsIHRyYWNrIHN0YXJ0cyBpbi4gVGhlIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gSUQzLiAqLwotICAgICAgLyogUEVSSU9EIERlc2NyaWJlcyB0aGUgcGVyaW9kIHRoYXQgdGhlIHBpZWNlIGlzIGZyb20gb3IgYWJvdXQuIEZvciBleGFtcGxlLCAiUmVuYWlzc2FuY2UiLiAqLwotICAgICAgLyogTEFXX1JBVElORyBEZXBlbmRpbmcgb24gdGhlIGNvdW50cnkgaXQncyB0aGUgZm9ybWF0IG9mIHRoZSByYXRpbmcgb2YgYSBtb3ZpZSAoUCwgUiwgWCBpbiB0aGUgVVNBLCBhbiBhZ2UgaW4gb3RoZXIgY291bnRyaWVzIG9yIGEgVVJJIGRlZmluaW5nIGEgbG9nbykuICovCi0gICAgICAvKiBJQ1JBIFRoZSBJQ1JBIGNvbnRlbnQgcmF0aW5nIGZvciBwYXJlbnRhbCBjb250cm9sLiAoUHJldmlvdXNseSBSU0FDaSkgKi8KLQotICAgICAgLyogVGVtcG9yYWwgSW5mb3JtYXRpb24gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfUkVMRUFTRUQsIEdTVF9UQUdfREFURX0sIHsgLyogVGhlIHRpbWUgdGhhdCB0aGUgaXRlbSB3YXMgb3JpZ2luYWx5IHJlbGVhc2VkLiBUaGlzIGlzIGFraW4gdG8gdGhlIFREUkwgdGFnIGluIElEMy4gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfUkVDT1JERUQsIEdTVF9UQUdfREFURX0sIHsgLyogVGhlIHRpbWUgdGhhdCB0aGUgcmVjb3JkaW5nIGJlZ2FuLiBUaGlzIGlzIGFraW4gdG8gdGhlIFREUkMgdGFnIGluIElEMy4gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfRU5DT0RFRCwgR1NUX1RBR19EQVRFfSwgeyAgLyogVGhlIHRpbWUgdGhhdCB0aGUgZW5jb2Rpbmcgb2YgdGhpcyBpdGVtIHdhcyBjb21wbGV0ZWQgYmVnYW4uIFRoaXMgaXMgYWtpbiB0byB0aGUgVERFTiB0YWcgaW4gSUQzLiAqLwotICAgIEdTVF9NQVRST1NLQV9UQUdfSURfREFURV9UQUdHRUQsIEdTVF9UQUdfREFURX0sIHsgICAvKiBUaGUgdGltZSB0aGF0IHRoZSB0YWdzIHdlcmUgZG9uZSBmb3IgdGhpcyBpdGVtLiBUaGlzIGlzIGFraW4gdG8gdGhlIFREVEcgdGFnIGluIElEMy4gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEVfRElHSVRJWkVELCBHU1RfVEFHX0RBVEV9LCB7ICAgICAgICAvKiBUaGUgdGltZSB0aGF0IHRoZSBpdGVtIHdhcyB0cmFuZmVyZWQgdG8gYSBkaWdpdGFsIG1lZGl1bS4gVGhpcyBpcyBha2luIHRvIHRoZSBJRElUIHRhZyBpbiBSSUZGLiAqLwotICAgIEdTVF9NQVRST1NLQV9UQUdfSURfREFURV9XUklUVEVOLCBHU1RfVEFHX0RBVEV9LCB7ICAvKiBUaGUgdGltZSB0aGF0IHRoZSB3cml0aW5nIG9mIHRoZSBtdXNpYy9zY3JpcHQgYmVnYW4uICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9EQVRFX1BVUkNIQVNFRCwgR1NUX1RBR19EQVRFfSwgeyAgICAgICAgLyogSW5mb3JtYXRpb24gb24gd2hlbiB0aGUgZmlsZSB3YXMgcHVyY2hhc2VkIChzZWUgYWxzbyBwdXJjaGFzZSB0YWdzKS4gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0RBVEUsIEdTVF9UQUdfREFURX0sIHsgIC8qIE1hdHJvc2thIHNwZWMgZG9lcyBOT1QgaGF2ZSB0aGlzIHRhZyEgRHVubm8gd2hhdCBpdCB3YXMgZG9pbmcgaGVyZSwgcHJvYmFibHkgZm9yIGNvbXBhdGliaWxpdHkuICovCi0KLSAgICAgIC8qIFNwYWNpYWwgSW5mb3JtYXRpb24gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX1JFQ09SRElOR19MT0NBVElPTiwgR1NUX1RBR19HRU9fTE9DQVRJT05fTkFNRX0sIHsgICAgICAgLyogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBpdGVtIHdhcyByZWNvcmRlZC4gVGhlIGNvdW50cmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdHJpbmcsIHNhbWUgMiBvY3RldHMgYXMgaW4gSW50ZXJuZXQgZG9tYWlucywgb3IgcG9zc2libHkgSVNPLTMxNjYuIFRoaXMgY29kZSBpcyBmb2xsb3dlZCBieSBhIGNvbW1hLCB0aGVuIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gc3VjaCBhcyBzdGF0ZS9wcm92aW5jZSwgYW5vdGhlciBjb21tYSwgYW5kIHRoZW4gY2l0eS4gRm9yIGV4YW1wbGUsICJVUywgVGV4YXMsIEF1c3RpbiIuIFRoaXMgd2lsbCBhbGxvdyBmb3IgZWFzeSBzb3J0aW5nLiBJdCBpcyBva2F5IHRvIG9ubHkgc3RvcmUgdGhlIGNvdW50cnksIG9yIHRoZSBjb3VudHJ5IGFuZCB0aGUgc3RhdGUvcHJvdmluY2UuIE1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gY2FuIGJlIGFkZGVkIGFmdGVyIHRoZSBjaXR5IHRocm91Z2ggdGhlIHVzZSBvZiBhZGRpdGlvbmFsIGNvbW1hcy4gSW4gY2FzZXMgd2hlcmUgdGhlIHByb3ZpbmNlL3N0YXRlIGlzIHVua25vd24sIGJ1dCB5b3Ugd2FudCB0byBzdG9yZSB0aGUgY2l0eSwgc2ltcGx5IGxlYXZlIGEgc3BhY2UgYmV0d2VlbiB0aGUgdHdvIGNvbW1hcy4gRm9yIGV4YW1wbGUsICJVUywgLCBBdXN0aW4iLiAqLwotICAgICAgLyogQ09NUE9TSVRJT05fTE9DQVRJT04gTG9jYXRpb24gdGhhdCB0aGUgaXRlbSB3YXMgb3JpZ2luYWx5IGRlc2lnbmVkL3dyaXR0ZW4uIFRoZSBjb3VudHJpZXMgY29ycmVzcG9uZGluZyB0byB0aGUgc3RyaW5nLCBzYW1lIDIgb2N0ZXRzIGFzIGluIEludGVybmV0IGRvbWFpbnMsIG9yIHBvc3NpYmx5IElTTy0zMTY2LiBUaGlzIGNvZGUgaXMgZm9sbG93ZWQgYnkgYSBjb21tYSwgdGhlbiBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgc3RhdGUvcHJvdmluY2UsIGFub3RoZXIgY29tbWEsIGFuZCB0aGVuIGNpdHkuIEZvciBleGFtcGxlLCAiVVMsIFRleGFzLCBBdXN0aW4iLiBUaGlzIHdpbGwgYWxsb3cgZm9yIGVhc3kgc29ydGluZy4gSXQgaXMgb2theSB0byBvbmx5IHN0b3JlIHRoZSBjb3VudHJ5LCBvciB0aGUgY291bnRyeSBhbmQgdGhlIHN0YXRlL3Byb3ZpbmNlLiBNb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGNhbiBiZSBhZGRlZCBhZnRlciB0aGUgY2l0eSB0aHJvdWdoIHRoZSB1c2Ugb2YgYWRkaXRpb25hbCBjb21tYXMuIEluIGNhc2VzIHdoZXJlIHRoZSBwcm92aW5jZS9zdGF0ZSBpcyB1bmtub3duLCBidXQgeW91IHdhbnQgdG8gc3RvcmUgdGhlIGNpdHksIHNpbXBseSBsZWF2ZSBhIHNwYWNlIGJldHdlZW4gdGhlIHR3byBjb21tYXMuIEZvciBleGFtcGxlLCAiVVMsICwgQXVzdGluIi4gKi8KLSAgICAgIC8qIENPTVBPU0VSX05BVElPTkFMSVRZIE5hdGlvbmFsaXR5IG9mIHRoZSBtYWluIGNvbXBvc2VyIG9mIHRoZSBpdGVtLCBtb3N0bHkgZm9yIGNsYXNzaWNhbCBtdXNpYy4gVGhlIGNvdW50cmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdHJpbmcsIHNhbWUgMiBvY3RldHMgYXMgaW4gSW50ZXJuZXQgZG9tYWlucywgb3IgcG9zc2libHkgSVNPLTMxNjYuICovCi0KLSAgICAgIC8qIFBlcnNvbmFsICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9DT01NRU5ULCBHU1RfVEFHX0NPTU1FTlR9LCB7ICAgIC8qIEFueSBjb21tZW50IHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnQuICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9DT01NRU5UUywgR1NUX1RBR19DT01NRU5UfSwgeyAgIC8qIE1hdHJvc2thIHNwZWMgZG9lcyBOT1QgaGF2ZSB0aGlzIHRhZyEgRHVubm8gd2hhdCBpdCB3YXMgZG9pbmcgaGVyZSwgcHJvYmFibHkgZm9yIGNvbXBhdGliaWxpdHkuICovCi0gICAgICAvKiBQTEFZX0NPVU5URVIgVGhlIG51bWJlciBvZiB0aW1lIHRoZSBpdGVtIGhhcyBiZWVuIHBsYXllZC4gKi8KLSAgICAgIC8qIFRPRE86IFJBVElORyBBIG51bWVyaWMgdmFsdWUgZGVmaW5pbmcgaG93IG11Y2ggYSBwZXJzb24gbGlrZXMgdGhlIHNvbmcvbW92aWUuIFRoZSBudW1iZXIgaXMgYmV0d2VlbiAwIGFuZCA1IHdpdGggZGVjaW1hbCB2YWx1ZXMgcG9zc2libGUgKGUuZy4gMi43KSwgNSguMCkgYmVpbmcgdGhlIGhpZ2hlc3QgcG9zc2libGUgcmF0aW5nLiBPdGhlciByYXRpbmcgc3lzdGVtcyB3aXRoIGRpZmZlcmVudCByYW5nZXMgd2lsbCBoYXZlIHRvIGJlIHNjYWxlZC4gKi8KLQotICAgICAgLyogVGVjaG5pY2FsIEluZm9ybWF0aW9uICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9FTkNPREVSLCBHU1RfVEFHX0VOQ09ERVJ9LCB7Ci0gICAgICAvKiBFTkNPREVSX1NFVFRJTkdTIEEgbGlzdCBvZiB0aGUgc2V0dGluZ3MgdXNlZCBmb3IgZW5jb2RpbmcgdGhpcyBpdGVtLiBObyBzcGVjaWZpYyBmb3JtYXQuICovCi0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9CUFMsIEdTVF9UQUdfQklUUkFURX0sIHsKLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0JJVFNQUywgR1NUX1RBR19CSVRSQVRFfSwgeyAgICAgLyogTWF0cm9za2Egc3BlYyBkb2VzIE5PVCBoYXZlIHRoaXMgdGFnISBEdW5ubyB3aGF0IGl0IHdhcyBkb2luZyBoZXJlLCBwcm9iYWJseSBmb3IgY29tcGF0aWJpbGl0eS4gKi8KLSAgICAgIC8qIFdPTlRGSVggKGFscmVhZHkgaGFuZGxlZCBpbiBhbm90aGVyIHdheSk6IEZQUyBUaGUgYXZlcmFnZSBmcmFtZXMgcGVyIHNlY29uZCBvZiB0aGUgc3BlY2lmaWVkIGl0ZW0uIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBhdmVyYWdlIG51bWJlciBvZiBCbG9ja3MgcGVyIHNlY29uZC4gSW4gdGhlIGV2ZW50IHRoYXQgbGFjaW5nIGlzIHVzZWQsIGVhY2ggbGFjZWQgY2h1bmsgaXMgdG8gYmUgY291bnRlZCBhcyBhIHNlcGVyYXRlIGZyYW1lLiAqLwotICAgIEdTVF9NQVRST1NLQV9UQUdfSURfQlBNLCBHU1RfVEFHX0JFQVRTX1BFUl9NSU5VVEV9LCB7Ci0gICAgICAvKiBNRUFTVVJFIEluIG11c2ljLCBhIG1lYXN1cmUgaXMgYSB1bml0IG9mIHRpbWUgaW4gV2VzdGVybiBtdXNpYyBsaWtlICI0LzQiLiBJdCByZXByZXNlbnRzIGEgcmVndWxhciBncm91cGluZyBvZiBiZWF0cywgYSBtZXRlciwgYXMgaW5kaWNhdGVkIGluIG11c2ljYWwgbm90YXRpb24gYnkgdGhlIHRpbWUgc2lnbmF0dXJlLi4gVGhlIG1ham9yaXR5IG9mIHRoZSBjb250ZW1wb3Jhcnkgcm9jayBhbmQgcG9wIG11c2ljIHlvdSBoZWFyIG9uIHRoZSByYWRpbyB0aGVzZSBkYXlzIGlzIHdyaXR0ZW4gaW4gdGhlIDQvNCB0aW1lIHNpZ25hdHVyZS4gKi8KLSAgICAgIC8qIFRVTklORyBJdCBpcyBzYXZlZCBhcyBhIGZyZXF1ZW5jeSBpbiBoZXJ0eiB0byBhbGxvdyBuZWFyLXBlcmZlY3QgdHVuaW5nIG9mIGluc3RydW1lbnRzIHRvIHRoZSBzYW1lIHRvbmUgYXMgdGhlIG11c2ljYWwgcGllY2UgKGUuZy4gIjQ0MS4zNCIgaW4gSGVydHopLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0NDAuMCBIei4gKi8KLSAgICAgIC8qIFRPRE86IFJFUExBWUdBSU5fR0FJTiBUaGUgZ2FpbiB0byBhcHBseSB0byByZWFjaCA4OWRCIFNQTCBvbiBwbGF5YmFjay4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgUmVwbGF5IEdhaW4gc3RhbmRhcmQuIE5vdGUgdGhhdCBSZXBsYXlHYWluIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBhdCBhbGwgVGFyZ2V0VHlwZSBsZXZlbHMgKHRyYWNrLCBhbGJ1bSwgZXRjKS4gKi8KLSAgICAgIC8qIFRPRE86IFJFUExBWUdBSU5fUEVBSyBUaGUgbWF4aW11bSBhYnNvbHV0ZSBwZWFrIHZhbHVlIG9mIHRoZSBpdGVtLiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBSZXBsYXkgR2FpbiBzdGFuZGFyZC4gKi8KLQotICAgICAgLyogSWRlbnRpZmllcnMgKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0lTUkMsIEdTVF9UQUdfSVNSQ30sIHsKLSAgICAgIC8qIE1DREkgVGhpcyBpcyBhIGJpbmFyeSBkdW1wIG9mIHRoZSBUT0Mgb2YgdGhlIENEUk9NIHRoYXQgdGhpcyBpdGVtIHdhcyB0YWtlbiBmcm9tLiBUaGlzIGhvbGRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSBNQ0RJIGluIElEMy4gKi8KLSAgICAgIC8qIElTQk4gSW50ZXJuYXRpb25hbCBTdGFuZGFyZCBCb29rIE51bWJlciAqLwotICAgICAgLyogQkFSQ09ERSBFQU4tMTMgKEV1cm9wZWFuIEFydGljbGUgTnVtYmVyaW5nKSBvciBVUEMtQSAoVW5pdmVyc2FsIFByb2R1Y3QgQ29kZSkgYmFyIGNvZGUgaWRlbnRpZmllciAqLwotICAgICAgLyogQ0FUQUxPR19OVU1CRVIgQSBsYWJlbC1zcGVjaWZpYyBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSB0aGUgcmVsZWFzZSAoVElDIDAxIGZvciBleGFtcGxlKS4gKi8KLSAgICAgIC8qIExBQkVMX0NPREUgQSA0LWRpZ2l0IG9yIDUtZGlnaXQgbnVtYmVyIHRvIGlkZW50aWZ5IHRoZSByZWNvcmQgbGFiZWwsIHR5cGljYWxseSBwcmludGVkIGFzIChMQykgeHh4eCBvciAoTEMpIDB4eHh4IG9uIENEcyBtZWRpYXMgb3IgY292ZXJzIChvbmx5IHRoZSBudW1iZXIgaXMgc3RvcmVkKS4gKi8KLSAgICAgIC8qIExDQ04gTGlicmFyeSBvZiBDb25ncmVzcyBDb250cm9sIE51bWJlciAqLwotCi0gICAgICAvKiBDb21tZXJjaWFsICovCi0gICAgICAvKiBQVVJDSEFTRV9JVEVNIFVSTCB0byBwdXJjaGFzZSB0aGlzIGZpbGUuIFRoaXMgaXMgYWtpbiB0byB0aGUgV1BBWSB0YWcgaW4gSUQzLiAqLwotICAgICAgLyogUFVSQ0hBU0VfSU5GTyBJbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBwdXJjaGFzZSB0aGlzIGFsYnVtLiBUaGlzIGlzIGFraW4gdG8gdGhlIFdDT00gdGFnIGluIElEMy4gKi8KLSAgICAgIC8qIFBVUkNIQVNFX09XTkVSIEluZm9ybWF0aW9uIG9uIHRoZSBwZXJzb24gd2hvIHB1cmNoYXNlZCB0aGUgZmlsZS4gVGhpcyBpcyBha2luIHRvIHRoZSBUT1dOIHRhZyBpbiBJRDMuICovCi0gICAgICAvKiBQVVJDSEFTRV9QUklDRSBUaGUgYW1vdW50IHBhaWQgZm9yIGVudGl0eS4gVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBudW1lcmljIHZhbHVlIGluIGhlcmUuIE9ubHkgbnVtYmVycywgbm8gbGV0dGVycyBvciBzeW1ib2xzIG90aGVyIHRoYW4gIi4iLiBGb3IgaW5zdGFuY2UsIHlvdSB3b3VsZCBzdG9yZSAiMTUuNTkiIGluc3RlYWQgb2YgIiQxNS41OVVTRCIuICovCi0gICAgICAvKiBQVVJDSEFTRV9DVVJSRU5DWSBUaGUgY3VycmVuY3kgdHlwZSB1c2VkIHRvIHBheSBmb3IgdGhlIGVudGl0eS4gVXNlIElTTy00MjE3IGZvciB0aGUgMyBsZXR0ZXIgY3VycmVuY3kgY29kZS4gKi8KLQotICAgICAgLyogTGVnYWwgKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0NPUFlSSUdIVCwgR1NUX1RBR19DT1BZUklHSFR9LCB7Ci0gICAgR1NUX01BVFJPU0tBX1RBR19JRF9QUk9EVUNUSU9OX0NPUFlSSUdIVCwgR1NUX1RBR19DT1BZUklHSFR9LCB7ICAgICAvKiBUaGUgY29weXJpZ2h0IGluZm9ybWF0aW9uIGFzIHBlciB0aGUgcHJvZHVjdGlvbiBjb3B5cmlnaHQgaG9sZGVyLiBUaGlzIGlzIGFraW4gdG8gdGhlIFRQUk8gdGFnIGluIElEMy4gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX0xJQ0VOU0UsIEdTVF9UQUdfTElDRU5TRX0sIHsgICAgLyogVGhlIGxpY2Vuc2UgYXBwbGllZCB0byB0aGUgY29udGVudCAobGlrZSBDcmVhdGl2ZSBDb21tb25zIHZhcmlhbnRzKS4gKi8KLSAgICBHU1RfTUFUUk9TS0FfVEFHX0lEX1RFUk1TX09GX1VTRSwgR1NUX1RBR19MSUNFTlNFfQotICB9OwotICBzdGF0aWMgY29uc3Qgc3RydWN0Ci0gIHsKLSAgICBjb25zdCBnY2hhciAqbWF0cm9za2FfdGFnbmFtZTsKLSAgICBjb25zdCBnY2hhciAqZ3N0cmVhbWVyX3RhZ25hbWU7Ci0gIH0KLSAgY2hpbGRfdGFnX2NvbnZbXSA9IHsKLSAgICB7Ci0gICAgIlRJVExFL1NPUlRfV0lUSD0iLCBHU1RfVEFHX1RJVExFX1NPUlROQU1FfSwgewotICAgICJBUlRJU1QvU09SVF9XSVRIPSIsIEdTVF9UQUdfQVJUSVNUX1NPUlROQU1FfSwgewotICAgICAgLyogQUxCVU0tc3R1ZmYgaXMgaGFuZGxlZCBlbHNld2hlcmUgKi8KLSAgICAiQ09NUE9TRVIvU09SVF9XSVRIPSIsIEdTVF9UQUdfVElUTEVfU09SVE5BTUV9LCB7Ci0gICAgIk9SSUdJTkFML1VSTD0iLCBHU1RfVEFHX0xPQ0FUSU9OfSwgewotICAgICAgLyogRU1BSUwsIFBIT05FLCBGQVggYWxsIGNhbiBiZSBtYXBwZWQgdG8gR1NUX1RBR19DT05UQUNULCB0aGVyZSBpcyBzcGVjaWFsCi0gICAgICAgKiBjb2RlIGZvciB0aGF0IGxhdGVyLgotICAgICAgICovCi0gICAgIlRJVExFL1VSTD0iLCBHU1RfVEFHX0hPTUVQQUdFfSwgewotICAgICJBUlRJU1QvVVJMPSIsIEdTVF9UQUdfSE9NRVBBR0V9LCB7Ci0gICAgIkNPUFlSSUdIVC9VUkw9IiwgR1NUX1RBR19DT1BZUklHSFRfVVJJfSwgewotICAgICJMSUNFTlNFL1VSTD0iLCBHU1RfVEFHX0xJQ0VOU0VfVVJJfSwgewotICAgICJMSUNFTlNFL1VSTD0iLCBHU1RfVEFHX0xJQ0VOU0VfVVJJfQotICB9OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQzMiBpZDsKLSAgZ2NoYXIgKnZhbHVlID0gTlVMTDsKLSAgZ2NoYXIgKnRhZyA9IE5VTEw7Ci0gIGdjaGFyICpuYW1lX3dpdGhfcGFyZW50ID0gTlVMTDsKLSAgR3N0VGFnTGlzdCAqY2hpbGRfdGFnbGlzdCA9IE5VTEw7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiU2ltcGxlVGFnIik7Ci0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIlNpbXBsZVRhZyIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIGlmIChwYXJlbnQpCi0gICAgY2hpbGRfdGFnbGlzdCA9ICpwX3RhZ2xpc3Q7Ci0gIGVsc2UKLSAgICBjaGlsZF90YWdsaXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICAvKiByZWFkIGFsbCBzdWItZW50cmllcyAqLwotCi0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVEFHTkFNRToKLSAgICAgICAgZ19mcmVlICh0YWcpOwotICAgICAgICB0YWcgPSBOVUxMOwotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX2FzY2lpIChlYm1sLCAmaWQsICZ0YWcpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJUYWdOYW1lOiAlcyIsIEdTVF9TVFJfTlVMTCAodGFnKSk7Ci0gICAgICAgIGdfZnJlZSAobmFtZV93aXRoX3BhcmVudCk7Ci0gICAgICAgIGlmIChwYXJlbnQgIT0gTlVMTCkKLSAgICAgICAgICBuYW1lX3dpdGhfcGFyZW50ID0gZ19zdHJkdXBfcHJpbnRmICgiJXMvJXMiLCBwYXJlbnQsIHRhZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuYW1lX3dpdGhfcGFyZW50ID0gZ19zdHJkdXAgKHRhZyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQUdTVFJJTkc6Ci0gICAgICAgIGdfZnJlZSAodmFsdWUpOwotICAgICAgICB2YWx1ZSA9IE5VTEw7Ci0gICAgICAgIHJldCA9IGdzdF9lYm1sX3JlYWRfdXRmOCAoZWJtbCwgJmlkLCAmdmFsdWUpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJUYWdTdHJpbmc6ICVzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAodmFsdWUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NJTVBMRVRBRzoKLSAgICAgICAgLyogUmVjdXJzaXZlIFNpbXBsZVRhZyAqLwotICAgICAgICAvKiBUaGlzIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRhZyBuYW1lIG9mIF90aGlzXyB0YWcgdG8gYmUga25vd24KLSAgICAgICAgICogaW4gb3JkZXIgdG8gcmVhZCBpdHMgY2hpbGRyZW4uIEl0J3Mgbm90IGluIHRoZSBzcGVjLCBqdXN0IHRoZSB3YXkKLSAgICAgICAgICogdGhlIGNvZGUgaXMgd3JpdHRlbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChuYW1lX3dpdGhfcGFyZW50ICE9IE5VTEwpIHsKLSAgICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfbWV0YWRhdGFfaWRfc2ltcGxlX3RhZyAoY29tbW9uLAotICAgICAgICAgICAgICBlYm1sLCAmY2hpbGRfdGFnbGlzdCwgbmFtZV93aXRoX3BhcmVudCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLyogZmFsbC10aHJvdWdoICovCi0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsICJTaW1wbGVUYWciLAotICAgICAgICAgICAgaWQpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVEFHTEFOR1VBR0U6Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQUdERUZBVUxUOgotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfVEFHQklOQVJZOgotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIlNpbXBsZVRhZyIsIHJldCk7Ci0KLSAgaWYgKHBhcmVudCAmJiB0YWcgJiYgdmFsdWUgJiYgKnZhbHVlICE9ICdcMCcpIHsKLSAgICAvKiBEb24ndCBib3RoZXIgbWFwcGluZyBjaGlsZHJlbiB0YWdzIC0gcGFyZW50IHdpbGwgZG8gdGhhdCAqLwotICAgIGdjaGFyICprZXlfdmFsOwotICAgIC8qIFRPRE86IHJlYWQgTEFOR1VBR0Ugc3ViLXRhZywgYW5kIHVzZSAia2V5W2xjXT12YWwiIGZvcm0gKi8KLSAgICBrZXlfdmFsID0gZ19zdHJkdXBfcHJpbnRmICgiJXM9JXMiLCBuYW1lX3dpdGhfcGFyZW50LCB2YWx1ZSk7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAoKnBfdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgIEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCwga2V5X3ZhbCwgTlVMTCk7Ci0gICAgZ19mcmVlIChrZXlfdmFsKTsKLSAgfSBlbHNlIGlmICh0YWcgJiYgdmFsdWUgJiYgKnZhbHVlICE9ICdcMCcpIHsKLSAgICBnYm9vbGVhbiBtYXRjaGVkID0gRkFMU0U7Ci0gICAgZ3VpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7ICFtYXRjaGVkICYmIGkgPCBHX05fRUxFTUVOVFMgKHRhZ19jb252KTsgaSsrKSB7Ci0gICAgICBjb25zdCBnY2hhciAqdGFnbmFtZV9nc3QgPSB0YWdfY29udltpXS5nc3RyZWFtZXJfdGFnbmFtZTsKLQotICAgICAgY29uc3QgZ2NoYXIgKnRhZ25hbWVfbWt2ID0gdGFnX2NvbnZbaV0ubWF0cm9za2FfdGFnbmFtZTsKLQotICAgICAgaWYgKHN0cmNtcCAodGFnbmFtZV9ta3YsIHRhZykgPT0gMCkgewotICAgICAgICBHVmFsdWUgZGVzdCA9IHsgMCwgfTsKLSAgICAgICAgR1R5cGUgZGVzdF90eXBlID0gZ3N0X3RhZ19nZXRfdHlwZSAodGFnbmFtZV9nc3QpOwotCi0gICAgICAgIC8qIEVuc3VyZSB0aGF0IGFueSBkYXRlIHN0cmluZyBpcyBjb21wbGV0ZSAqLwotICAgICAgICBpZiAoZGVzdF90eXBlID09IEdfVFlQRV9EQVRFKSB7Ci0gICAgICAgICAgZ3VpbnQgeWVhciA9IDE5MDEsIG1vbnRoID0gMSwgZGF5ID0gMTsKLQotICAgICAgICAgIC8qIERhdGVzIGNhbiBiZSB5eXl5LU1NLWRkLCB5eXl5LU1NIG9yIHl5eXksIGJ1dCB3ZSBuZWVkCi0gICAgICAgICAgICogdGhlIGZpcnN0IHR5cGUgKi8KLSAgICAgICAgICBpZiAoc3NjYW5mICh2YWx1ZSwgIiUwNHUtJTAydS0lMDJ1IiwgJnllYXIsICZtb250aCwgJmRheSkgIT0gMCkgewotICAgICAgICAgICAgZ19mcmVlICh2YWx1ZSk7Ci0gICAgICAgICAgICB2YWx1ZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiUwNHUtJTAydS0lMDJ1IiwgeWVhciwgbW9udGgsIGRheSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZ192YWx1ZV9pbml0ICgmZGVzdCwgZGVzdF90eXBlKTsKLSAgICAgICAgaWYgKGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJmRlc3QsIHZhbHVlKSkgewotICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWVzICgqcF90YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICAgICAgdGFnbmFtZV9nc3QsICZkZXN0LCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkNhbid0IHRyYW5zZm9ybSB0YWcgJyVzJyB3aXRoICIKLSAgICAgICAgICAgICAgInZhbHVlICclcycgdG8gdGFyZ2V0IHR5cGUgJyVzJyIsIHRhZywgdmFsdWUsCi0gICAgICAgICAgICAgIGdfdHlwZV9uYW1lIChkZXN0X3R5cGUpKTsKLSAgICAgICAgfQotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmZGVzdCk7Ci0gICAgICAgIG1hdGNoZWQgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1hdGNoZWQpIHsKLSAgICAgIGdjaGFyICprZXlfdmFsOwotICAgICAgLyogVE9ETzogcmVhZCBMQU5HVUFHRSBzdWItdGFnLCBhbmQgdXNlICJrZXlbbGNdPXZhbCIgZm9ybSAqLwotICAgICAga2V5X3ZhbCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzPSVzIiwgdGFnLCB2YWx1ZSk7Ci0gICAgICBnc3RfdGFnX2xpc3RfYWRkICgqcF90YWdsaXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICBHU1RfVEFHX0VYVEVOREVEX0NPTU1FTlQsIGtleV92YWwsIE5VTEwpOwotICAgICAgZ19mcmVlIChrZXlfdmFsKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXBhcmVudCkgewotICAgIC8qIE1hcCBjaGlsZHJlbiB0YWdzLiBUaGlzIG9ubHkgc3VwcG9ydHMgdG9wLWFuY2hvcmVkIG1hcHBpbmcuIFRoYXQgaXMsCi0gICAgICogd2Ugc3RhcnQgYXQgdG9wbGV2ZWwgdGFnICh0aGlzIHRhZyksIGFuZCBzZWUgaG93IGl0cyBjb21iaW5hdGlvbnMKLSAgICAgKiB3aXRoIGl0cyBjaGlsZHJlbiBjYW4gYmUgbWFwcGVkLiBXaGljaCBtZWFucyB0aGF0IGdyYW5kY2hpbGRyZW4KLSAgICAgKiBhcmUgYWxzbyBjb21iaW5lZCBoZXJlLCB3aXRoIF90aGlzXyB0YWcgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLgotICAgICAqIElmIGdyYW5kY2hpbGRyZW4gY2FuIGJlIGNvbWJpbmVkIG9ubHkgd2l0aCBjaGlsZHJlbiwgdGhhdCBjb21iaW5hdGlvbgotICAgICAqIHdpbGwgbm90IGhhcHBlbi4KLSAgICAgKi8KLSAgICBnaW50IGNoaWxkX3RhZ3NfbiA9IGdzdF90YWdfbGlzdF9uX3RhZ3MgKGNoaWxkX3RhZ2xpc3QpOwotICAgIGlmIChjaGlsZF90YWdzX24gPiAwKSB7Ci0gICAgICBnaW50IGk7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRfdGFnc19uOyBpKyspIHsKLSAgICAgICAgZ2ludCBqOwotICAgICAgICBjb25zdCBnY2hhciAqY2hpbGRfbmFtZSA9IGdzdF90YWdfbGlzdF9udGhfdGFnX25hbWUgKGNoaWxkX3RhZ2xpc3QsIGkpOwotICAgICAgICBndWludCB0YWdsZW4gPSBnc3RfdGFnX2xpc3RfZ2V0X3RhZ19zaXplIChjaGlsZF90YWdsaXN0LCBjaGlsZF9uYW1lKTsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHRhZ2xlbjsgaisrKSB7Ci0gICAgICAgICAgZ2NoYXIgKnZhbDsKLSAgICAgICAgICBnYm9vbGVhbiBtYXRjaGVkID0gRkFMU0U7Ci0gICAgICAgICAgZ2NoYXIgKnZhbF9wcmUsICp2YWxfcG9zdDsKLSAgICAgICAgICBnaW50IGs7Ci0KLSAgICAgICAgICBpZiAoIWdzdF90YWdfbGlzdF9nZXRfc3RyaW5nX2luZGV4IChjaGlsZF90YWdsaXN0LCBjaGlsZF9uYW1lLAotICAgICAgICAgICAgICAgICAgaiwgJnZhbCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBpZiAoIXN0cmNociAodmFsLCAnPScpKSB7Ci0gICAgICAgICAgICBnX2ZyZWUgKHZhbCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdmFsX3Bvc3QgPSBnX3N0cmR1cCAoc3RyY2hyICh2YWwsICc9JykgKyAxKTsKLSAgICAgICAgICB2YWxfcHJlID0gZ19zdHJkdXAgKHZhbCk7Ci0gICAgICAgICAgKihzdHJjaHIgKHZhbF9wcmUsICc9JykgKyAxKSA9ICdcMCc7Ci0KLSAgICAgICAgICBmb3IgKGsgPSAwOyAhbWF0Y2hlZCAmJiBrIDwgR19OX0VMRU1FTlRTIChjaGlsZF90YWdfY29udik7IGsrKykgewotICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRhZ25hbWVfZ3N0ID0gY2hpbGRfdGFnX2NvbnZba10uZ3N0cmVhbWVyX3RhZ25hbWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0YWduYW1lX21rdiA9IGNoaWxkX3RhZ19jb252W2tdLm1hdHJvc2thX3RhZ25hbWU7Ci0KLSAgICAgICAgICAgIC8qIFRPRE86IE9uY2UgImtleVtsY109dmFsdWUiIGZvcm0gc3VwcG9ydCBpcyBpbXBsZW1lbnRlZCwKLSAgICAgICAgICAgICAqIHN0cmlwIFtsY10gaGVyZS4gSXQgY2FuJ3QgYmUgdXNlZCBpbiBjb21iaW5lZCB0YWdzLgotICAgICAgICAgICAgICogSWYgYSB0YWcgaXMgbm90IGNvbWJpbmVkLCBsZWF2ZSBbbGNdIGFzIGl0IGlzLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoc3RyY21wICh0YWduYW1lX21rdiwgdmFsX3ByZSkgPT0gMCkgewotICAgICAgICAgICAgICBHVmFsdWUgZGVzdCA9IHsgMCwgfTsKLSAgICAgICAgICAgICAgR1R5cGUgZGVzdF90eXBlID0gZ3N0X3RhZ19nZXRfdHlwZSAodGFnbmFtZV9nc3QpOwotCi0gICAgICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJmRlc3QsIGRlc3RfdHlwZSk7Ci0gICAgICAgICAgICAgIGlmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZkZXN0LCB2YWxfcG9zdCkpIHsKLSAgICAgICAgICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlcyAoKnBfdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICAgICAgICAgIHRhZ25hbWVfZ3N0LCAmZGVzdCwgTlVMTCk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAgICAgICAgICJDYW4ndCB0cmFuc2Zvcm0gY29tcGxleCB0YWcgJyVzJyAiICJ0byB0YXJnZXQgdHlwZSAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgdmFsLCBnX3R5cGVfbmFtZSAoZGVzdF90eXBlKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZ192YWx1ZV91bnNldCAoJmRlc3QpOwotICAgICAgICAgICAgICBtYXRjaGVkID0gVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKCFtYXRjaGVkKSB7Ci0gICAgICAgICAgICBnY2hhciAqbGFzdF9zbGFzaCA9IHN0cnJjaHIgKHZhbF9wcmUsICcvJyk7Ci0gICAgICAgICAgICBpZiAobGFzdF9zbGFzaCkgewotICAgICAgICAgICAgICBsYXN0X3NsYXNoKys7Ci0gICAgICAgICAgICAgIGlmIChzdHJjbXAgKGxhc3Rfc2xhc2gsICJFTUFJTD0iKSA9PSAwIHx8Ci0gICAgICAgICAgICAgICAgICBzdHJjbXAgKGxhc3Rfc2xhc2gsICJQSE9ORT0iKSA9PSAwIHx8Ci0gICAgICAgICAgICAgICAgICBzdHJjbXAgKGxhc3Rfc2xhc2gsICJBRERSRVNTPSIpID09IDAgfHwKLSAgICAgICAgICAgICAgICAgIHN0cmNtcCAobGFzdF9zbGFzaCwgIkZBWD0iKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCAoKnBfdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICAgICAgICAgIEdTVF9UQUdfQ09OVEFDVCwgdmFsX3Bvc3QsIE5VTEwpOwotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUUlVFOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghbWF0Y2hlZCkKLSAgICAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKCpwX3RhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICAgICAgICAgIEdTVF9UQUdfRVhURU5ERURfQ09NTUVOVCwgdmFsLCBOVUxMKTsKLSAgICAgICAgICBnX2ZyZWUgKHZhbF9wb3N0KTsKLSAgICAgICAgICBnX2ZyZWUgKHZhbF9wcmUpOwotICAgICAgICAgIGdfZnJlZSAodmFsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKGNoaWxkX3RhZ2xpc3QpOwotICB9Ci0KLSAgZ19mcmVlICh0YWcpOwotICBnX2ZyZWUgKHZhbHVlKTsKLSAgZ19mcmVlIChuYW1lX3dpdGhfcGFyZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fY291bnRfc3RyZWFtcyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIGdpbnQgKiBhLCBnaW50ICogdiwgZ2ludCAqIHMpCi17Ci0gIGdpbnQgaTsKLSAgZ2ludCB2aWRlb19zdHJlYW1zID0gMCwgYXVkaW9fc3RyZWFtcyA9IDAsIHN1YnRpdGxlX3N0cmVhbXMgPSAwOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb21tb24tPnNyYy0+bGVuOyBpKyspIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtOwotCi0gICAgc3RyZWFtID0gZ19wdHJfYXJyYXlfaW5kZXggKGNvbW1vbi0+c3JjLCBpKTsKLSAgICBpZiAoc3RyZWFtLT50eXBlID09IEdTVF9NQVRST1NLQV9UUkFDS19UWVBFX1ZJREVPKQotICAgICAgdmlkZW9fc3RyZWFtcyArPSAxOwotICAgIGVsc2UgaWYgKHN0cmVhbS0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9BVURJTykKLSAgICAgIGF1ZGlvX3N0cmVhbXMgKz0gMTsKLSAgICBlbHNlIGlmIChzdHJlYW0tPnR5cGUgPT0gR1NUX01BVFJPU0tBX1RSQUNLX1RZUEVfU1VCVElUTEUpCi0gICAgICBzdWJ0aXRsZV9zdHJlYW1zICs9IDE7Ci0gIH0KLSAgKnYgPSB2aWRlb19zdHJlYW1zOwotICAqYSA9IGF1ZGlvX3N0cmVhbXM7Ci0gICpzID0gc3VidGl0bGVfc3RyZWFtczsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2FwcGx5X3RhcmdldF90eXBlX2ZvcmVhY2ggKGNvbnN0IEdzdFRhZ0xpc3QgKiBsaXN0LAotICAgIGNvbnN0IGdjaGFyICogdGFnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50IHZhbGxlbjsKLSAgZ3VpbnQgaTsKLSAgVGFyZ2V0VHlwZUNvbnRleHQgKmN0eCA9IChUYXJnZXRUeXBlQ29udGV4dCAqKSB1c2VyX2RhdGE7Ci0KLSAgdmFsbGVuID0gZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAobGlzdCwgdGFnKTsKLSAgaWYgKHZhbGxlbiA9PSAwKQotICAgIHJldHVybjsKLQotICBmb3IgKGkgPSAwOyBpIDwgdmFsbGVuOyBpKyspIHsKLSAgICBjb25zdCBHVmFsdWUgKnZhbF9yZWY7Ci0KLSAgICB2YWxfcmVmID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAobGlzdCwgdGFnLCBpKTsKLSAgICBpZiAodmFsX3JlZiA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBUT0RPOiB1c2UgdGhlIG9wdGlvbmFsIGN0eC0+dGFyZ2V0X3R5cGUgc29tZWhvdyAqLwotICAgIGlmIChzdHJjbXAgKHRhZywgR1NUX1RBR19USVRMRSkgPT0gMCkgewotICAgICAgaWYgKGN0eC0+dGFyZ2V0X3R5cGVfdmFsdWUgPj0gNzAgJiYgIWN0eC0+YXVkaW9fb25seSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlIChjdHgtPnJlc3VsdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICBHU1RfVEFHX1NIT1dfTkFNRSwgdmFsX3JlZik7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfSBlbHNlIGlmIChjdHgtPnRhcmdldF90eXBlX3ZhbHVlID49IDUwKSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKGN0eC0+cmVzdWx0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICAgIEdTVF9UQUdfQUxCVU0sIHZhbF9yZWYpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX1RJVExFX1NPUlROQU1FKSA9PSAwKSB7Ci0gICAgICBpZiAoY3R4LT50YXJnZXRfdHlwZV92YWx1ZSA+PSA3MCAmJiAhY3R4LT5hdWRpb19vbmx5KSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKGN0eC0+cmVzdWx0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICAgIEdTVF9UQUdfU0hPV19TT1JUTkFNRSwgdmFsX3JlZik7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfSBlbHNlIGlmIChjdHgtPnRhcmdldF90eXBlX3ZhbHVlID49IDUwKSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKGN0eC0+cmVzdWx0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICAgIEdTVF9UQUdfQUxCVU1fU09SVE5BTUUsIHZhbF9yZWYpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0FSVElTVCkgPT0gMCkgewotICAgICAgaWYgKGN0eC0+dGFyZ2V0X3R5cGVfdmFsdWUgPj0gNTApIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoY3R4LT5yZXN1bHQsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICAgICAgR1NUX1RBR19BTEJVTV9BUlRJU1QsIHZhbF9yZWYpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX0FSVElTVF9TT1JUTkFNRSkgPT0gMCkgewotICAgICAgaWYgKGN0eC0+dGFyZ2V0X3R5cGVfdmFsdWUgPj0gNTApIHsKLSAgICAgICAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoY3R4LT5yZXN1bHQsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICAgICAgR1NUX1RBR19BTEJVTV9BUlRJU1RfU09SVE5BTUUsIHZhbF9yZWYpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHN0cmNtcCAodGFnLCBHU1RfVEFHX1RSQUNLX0NPVU5UKSA9PSAwKSB7Ci0gICAgICBpZiAoY3R4LT50YXJnZXRfdHlwZV92YWx1ZSA+PSA2MCkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlIChjdHgtPnJlc3VsdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9DT1VOVCwgdmFsX3JlZik7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoc3RyY21wICh0YWcsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSKSA9PSAwKSB7Ci0gICAgICBpZiAoY3R4LT50YXJnZXRfdHlwZV92YWx1ZSA+PSA2MCAmJiAhY3R4LT5hdWRpb19vbmx5KSB7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGRfdmFsdWUgKGN0eC0+cmVzdWx0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgICAgICAgIEdTVF9UQUdfU0hPV19TRUFTT05fTlVNQkVSLCB2YWxfcmVmKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9IGVsc2UgaWYgKGN0eC0+dGFyZ2V0X3R5cGVfdmFsdWUgPj0gNTAgJiYgIWN0eC0+YXVkaW9fb25seSkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlIChjdHgtPnJlc3VsdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICBHU1RfVEFHX1NIT1dfRVBJU09ERV9OVU1CRVIsIHZhbF9yZWYpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0gZWxzZSBpZiAoY3R4LT50YXJnZXRfdHlwZV92YWx1ZSA+PSA1MCkgewotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkX3ZhbHVlIChjdHgtPnJlc3VsdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgICBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIsIHZhbF9yZWYpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3N0X3RhZ19saXN0X2FkZF92YWx1ZSAoY3R4LT5yZXN1bHQsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELCB0YWcsIHZhbF9yZWYpOwotICB9Ci19Ci0KLQotc3RhdGljIEdzdFRhZ0xpc3QgKgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2FwcGx5X3RhcmdldF90eXBlIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0VGFnTGlzdCAqIHRhZ2xpc3QsIGd1aW50NjQgdGFyZ2V0X3R5cGVfdmFsdWUsIGdjaGFyICogdGFyZ2V0X3R5cGUpCi17Ci0gIFRhcmdldFR5cGVDb250ZXh0IGN0eDsKLSAgZ2ludCBhID0gMDsKLSAgZ2ludCB2ID0gMDsKLSAgZ2ludCBzID0gMDsKLQotICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fY291bnRfc3RyZWFtcyAoY29tbW9uLCAmYSwgJnYsICZzKTsKLQotICBjdHguYXVkaW9fb25seSA9IChhID4gMCAmJiB2ID09IDAgJiYgcyA9PSAwKTsKLSAgY3R4LnJlc3VsdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGN0eC50YXJnZXRfdHlwZV92YWx1ZSA9IHRhcmdldF90eXBlX3ZhbHVlOwotICBjdHgudGFyZ2V0X3R5cGUgPSB0YXJnZXRfdHlwZTsKLQotICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFnbGlzdCwKLSAgICAgIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9hcHBseV90YXJnZXRfdHlwZV9mb3JlYWNoLCAmY3R4KTsKLQotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotICByZXR1cm4gY3R4LnJlc3VsdDsKLX0KLQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX21ldGFkYXRhX2lkX3RhZyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVibWxSZWFkICogZWJtbCwgR3N0VGFnTGlzdCAqKiBwX3RhZ2xpc3QpCi17Ci0gIGd1aW50MzIgaWQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHQXJyYXkgKmNoYXB0ZXJfdGFyZ2V0cywgKmVkaXRpb25fdGFyZ2V0cywgKnRyYWNrX3RhcmdldHM7Ci0gIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0gIEdMaXN0ICpjdXI7Ci0gIGd1aW50NjQgdGFyZ2V0X3R5cGVfdmFsdWUgPSA1MDsKLSAgZ2NoYXIgKnRhcmdldF90eXBlID0gTlVMTDsKLQotICBERUJVR19FTEVNRU5UX1NUQVJUIChjb21tb24sIGVibWwsICJUYWciKTsKLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiVGFnIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgZWRpdGlvbl90YXJnZXRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChndWludDY0KSk7Ci0gIGNoYXB0ZXJfdGFyZ2V0cyA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoZ3VpbnQ2NCkpOwotICB0cmFja190YXJnZXRzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChndWludDY0KSk7Ci0gIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICB0YXJnZXRfdHlwZSA9IE5VTEw7Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgLyogcmVhZCBhbGwgc3ViLWVudHJpZXMgKi8KLQotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1NJTVBMRVRBRzoKLSAgICAgICAgcmV0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX21ldGFkYXRhX2lkX3NpbXBsZV90YWcgKGNvbW1vbiwKLSAgICAgICAgICAgIGVibWwsICZ0YWdsaXN0LCBOVUxMKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX1RBUkdFVFM6Ci0gICAgICAgIGdfZnJlZSAodGFyZ2V0X3R5cGUpOwotICAgICAgICB0YXJnZXRfdHlwZSA9IE5VTEw7Ci0gICAgICAgIHRhcmdldF90eXBlX3ZhbHVlID0gNTA7Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9tZXRhZGF0YV90YXJnZXRzIChjb21tb24sIGVibWwsCi0gICAgICAgICAgICBlZGl0aW9uX3RhcmdldHMsIGNoYXB0ZXJfdGFyZ2V0cywgdHJhY2tfdGFyZ2V0cywKLSAgICAgICAgICAgICZ0YXJnZXRfdHlwZV92YWx1ZSwgJnRhcmdldF90eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsICJUYWciLCBpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiVGFnIiwgcmV0KTsKLQotICB0YWdsaXN0ID0gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2FwcGx5X3RhcmdldF90eXBlIChjb21tb24sIHRhZ2xpc3QsCi0gICAgICB0YXJnZXRfdHlwZV92YWx1ZSwgdGFyZ2V0X3R5cGUpOwotICBnX2ZyZWUgKHRhcmdldF90eXBlKTsKLQotICAvKiBpZiB0YWcgaXMgY2hhcHRlci9lZGl0aW9uIHNwZWNpZmljIC0gdHJ5IHRvIGZpbmQgdGhhdCBlbnRyeSAqLwotICBpZiAoR19VTkxJS0VMWSAoY2hhcHRlcl90YXJnZXRzLT5sZW4gPiAwIHx8IGVkaXRpb25fdGFyZ2V0cy0+bGVuID4gMCB8fAotICAgICAgICAgIHRyYWNrX3RhcmdldHMtPmxlbiA+IDApKSB7Ci0gICAgZ2ludCBpOwotICAgIGlmIChjaGFwdGVyX3RhcmdldHMtPmxlbiA+IDAgfHwgZWRpdGlvbl90YXJnZXRzLT5sZW4gPiAwKSB7Ci0gICAgICBpZiAoY29tbW9uLT50b2MgPT0gTlVMTCkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiRm91bmQgY2hhcHRlci9lZGl0aW9uIHNwZWNpZmljIHRhZywgYnV0IFRPQyBpcyBub3QgcHJlc2VudCIpOwotICAgICAgZWxzZSB7Ci0gICAgICAgIGN1ciA9IGdzdF90b2NfZ2V0X2VudHJpZXMgKGNvbW1vbi0+dG9jKTsKLSAgICAgICAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX3RvY190YWcgKGN1ci0+ZGF0YSwgZWRpdGlvbl90YXJnZXRzLAotICAgICAgICAgICAgICBjaGFwdGVyX3RhcmdldHMsIHRhZ2xpc3QpOwotICAgICAgICAgIGN1ciA9IGN1ci0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBjb21tb24tPnRvY191cGRhdGVkID0gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IHRyYWNrX3RhcmdldHMtPmxlbjsgaSsrKSB7Ci0gICAgICBnaW50IGo7Ci0gICAgICBnYm9vbGVhbiBmb3VuZCA9IEZBTFNFOwotICAgICAgZ3VpbnQ2NCB0Z3QgPSBnX2FycmF5X2luZGV4ICh0cmFja190YXJnZXRzLCBndWludDY0LCBpKTsKLQotICAgICAgZm9yIChqID0gMDsgaiA8IGNvbW1vbi0+c3JjLT5sZW47IGorKykgewotICAgICAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqc3RyZWFtID0gZ19wdHJfYXJyYXlfaW5kZXggKGNvbW1vbi0+c3JjLCBqKTsKLQotICAgICAgICBpZiAoc3RyZWFtLT51aWQgPT0gdGd0KSB7Ci0gICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoc3RyZWFtLT50YWdzLCB0YWdsaXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICAgICAgICAgIHN0cmVhbS0+dGFnc19jaGFuZ2VkID0gVFJVRTsKLSAgICAgICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgLyogQ2FjaGUgdGhlIHRyYWNrIHRhZ2xpc3Q6IHBvc3NpYmx5IGJlbG9uZ3MgdG8gYSB0cmFjayB0aGF0IHdpbGwgYmUgcGFyc2VkCi0gICAgICAgICAgIGxhdGVyIGluIGdzdF9tYXRyb3NrYV9kZW11eC5jOmdzdF9tYXRyb3NrYV9kZW11eF9hZGRfc3RyZWFtICguLi4pICovCi0gICAgICAgIGdwb2ludGVyIHRyYWNrX3VpZCA9IEdVSU5UX1RPX1BPSU5URVIgKHRndCk7Ci0gICAgICAgIEdzdFRhZ0xpc3QgKmNhY2hlZF90YWdsaXN0ID0KLSAgICAgICAgICAgIGdfaGFzaF90YWJsZV9sb29rdXAgKGNvbW1vbi0+Y2FjaGVkX3RyYWNrX3RhZ2xpc3RzLCB0cmFja191aWQpOwotICAgICAgICBpZiAoY2FjaGVkX3RhZ2xpc3QpCi0gICAgICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoY2FjaGVkX3RhZ2xpc3QsIHRhZ2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGdzdF90YWdfbGlzdF9yZWYgKHRhZ2xpc3QpOwotICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGNvbW1vbi0+Y2FjaGVkX3RyYWNrX3RhZ2xpc3RzLCB0cmFja191aWQsCi0gICAgICAgICAgICAgIHRhZ2xpc3QpOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICJGb3VuZCB0cmFjay1zcGVjaWZpYyB0YWcocyksIGJ1dCB0cmFjayAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiIGlzIG5vdCBrbm93biB5ZXQsIGNhY2hpbmciLCB0Z3QpOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlCi0gICAgZ3N0X3RhZ19saXN0X2luc2VydCAoKnBfdGFnbGlzdCwgdGFnbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnbGlzdCk7Ci0gIGdfYXJyYXlfdW5yZWYgKGNoYXB0ZXJfdGFyZ2V0cyk7Ci0gIGdfYXJyYXlfdW5yZWYgKGVkaXRpb25fdGFyZ2V0cyk7Ci0gIGdfYXJyYXlfdW5yZWYgKHRyYWNrX3RhcmdldHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9tZXRhZGF0YSAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdEVsZW1lbnQgKiBlbCwgR3N0RWJtbFJlYWQgKiBlYm1sKQotewotICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludDMyIGlkOwotICBHTGlzdCAqbDsKLSAgZ3VpbnQ2NCBjdXJwb3M7Ci0KLSAgLyogTWFrZSBzdXJlIHdlIGRvbid0IHBhcnNlIGEgdGFncyBlbGVtZW50IHR3aWNlIGFuZAotICAgKiBwb3N0IGl0J3MgdGFncyB0d2ljZSAqLwotICBjdXJwb3MgPSBnc3RfZWJtbF9yZWFkX2dldF9wb3MgKGVibWwpOwotICBmb3IgKGwgPSBjb21tb24tPnRhZ3NfcGFyc2VkOyBsOyBsID0gbC0+bmV4dCkgewotICAgIGd1aW50NjQgKnBvcyA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoKnBvcyA9PSBjdXJwb3MpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAiU2tpcHBpbmcgYWxyZWFkeSBwYXJzZWQgVGFncyBhdCBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgY3VycG9zKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9Ci0gIH0KLQotICBjb21tb24tPnRhZ3NfcGFyc2VkID0KLSAgICAgIGdfbGlzdF9wcmVwZW5kIChjb21tb24tPnRhZ3NfcGFyc2VkLCBnX3NsaWNlX25ldyAoZ3VpbnQ2NCkpOwotICAqKChndWludDY0ICopIGNvbW1vbi0+dGFnc19wYXJzZWQtPmRhdGEpID0gY3VycG9zOwotICAvKiBmYWxsLXRocm91Z2ggKi8KLQotICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykgewotICAgIERFQlVHX0VMRU1FTlRfU1RPUCAoY29tbW9uLCBlYm1sLCAiVGFncyIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHRhZ2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlICh0YWdsaXN0LCBHU1RfVEFHX1NDT1BFX0dMT0JBTCk7Ci0gIGNvbW1vbi0+dG9jX3VwZGF0ZWQgPSBGQUxTRTsKLQotICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmIGdzdF9lYm1sX3JlYWRfaGFzX3JlbWFpbmluZyAoZWJtbCwgMSwgVFJVRSkpIHsKLSAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3BlZWtfaWQgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9UQUc6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9tZXRhZGF0YV9pZF90YWcgKGNvbW1vbiwgZWJtbCwKLSAgICAgICAgICAgICZ0YWdsaXN0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldCA9IGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChjb21tb24sIGVibWwsICJUYWdzIiwgaWQpOwotICAgICAgICBicmVhazsKLSAgICAgICAgLyogRklYTUU6IFVzZSB0byBsaW1pdCB0aGUgdGFncyB0byBzcGVjaWZpYyBwYWRzICovCi0gICAgfQotICB9Ci0KLSAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJUYWdzIiwgcmV0KTsKLQotICBpZiAoR19MSUtFTFkgKCFnc3RfdGFnX2xpc3RfaXNfZW1wdHkgKHRhZ2xpc3QpKSkKLSAgICBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZm91bmRfZ2xvYmFsX3RhZyAoY29tbW9uLCBlbCwgdGFnbGlzdCk7Ci0gIGVsc2UKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19hZGFwdGVyIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sIGd1aW50Ci0gICAgcGVlaywgY29uc3QgZ3VpbnQ4ICoqIGRhdGEpCi17Ci0gIC8qIENhbGxlciBuZWVkcyB0byBnc3RfYWRhcHRlcl91bm1hcC4gKi8KLSAgKmRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKGNvbW1vbi0+YWRhcHRlciwgcGVlayk7Ci0gIGlmICgqZGF0YSA9PSBOVUxMKQotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi0vKgotICogQ2FsbHMgcHVsbF9yYW5nZSBmb3IgKG9mZnNldCxzaXplKSB3aXRob3V0IGFkdmFuY2luZyBvdXIgb2Zmc2V0Ci0gKi8KLUdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wZWVrX2J5dGVzIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sIGd1aW50NjQKLSAgICBvZmZzZXQsIGd1aW50IHNpemUsIEdzdEJ1ZmZlciAqKiBwX2J1ZiwgZ3VpbnQ4ICoqIGJ5dGVzKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICAvKiBDYWNoaW5nIGhlcmUgYWN0dWFsbHkgbWFrZXMgbXVjaCBsZXNzIGRpZmZlcmVuY2UgdGhhbiBvbmUgd291bGQgZXhwZWN0LgotICAgKiBXZSBkbyBpdCBtYWlubHkgdG8gYXZvaWQgcHVsbGluZyBidWZmZXJzIG9mIDEgYnl0ZSBhbGwgdGhlIHRpbWUgKi8KLSAgaWYgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlcikgewotICAgIGd1aW50NjQgY2FjaGVfb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlcik7Ci0gICAgZ3NpemUgY2FjaGVfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlcik7Ci0KLSAgICBpZiAoY2FjaGVfb2Zmc2V0IDw9IGNvbW1vbi0+b2Zmc2V0ICYmCi0gICAgICAgIChjb21tb24tPm9mZnNldCArIHNpemUpIDw9IChjYWNoZV9vZmZzZXQgKyBjYWNoZV9zaXplKSkgewotICAgICAgaWYgKHBfYnVmKQotICAgICAgICAqcF9idWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChjb21tb24tPmNhY2hlZF9idWZmZXIsCi0gICAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfQUxMLCBjb21tb24tPm9mZnNldCAtIGNhY2hlX29mZnNldCwgc2l6ZSk7Ci0gICAgICBpZiAoYnl0ZXMpIHsKLSAgICAgICAgaWYgKCFjb21tb24tPmNhY2hlZF9kYXRhKSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlciwgJmNvbW1vbi0+Y2FjaGVkX21hcCwKLSAgICAgICAgICAgICAgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgICBjb21tb24tPmNhY2hlZF9kYXRhID0gY29tbW9uLT5jYWNoZWRfbWFwLmRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgKmJ5dGVzID0gY29tbW9uLT5jYWNoZWRfZGF0YSArIGNvbW1vbi0+b2Zmc2V0IC0gY2FjaGVfb2Zmc2V0OwotICAgICAgfQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIH0KLSAgICAvKiBub3QgZW5vdWdoIGRhdGEgaW4gdGhlIGNhY2hlLCBmcmVlIGNhY2hlIGFuZCBnZXQgYSBuZXcgb25lICovCi0gICAgaWYgKGNvbW1vbi0+Y2FjaGVkX2RhdGEpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlciwgJmNvbW1vbi0+Y2FjaGVkX21hcCk7Ci0gICAgICBjb21tb24tPmNhY2hlZF9kYXRhID0gTlVMTDsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoY29tbW9uLT5jYWNoZWRfYnVmZmVyKTsKLSAgICBjb21tb24tPmNhY2hlZF9idWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgLyogcmVmaWxsIHRoZSBjYWNoZSAqLwotICByZXQgPSBnc3RfcGFkX3B1bGxfcmFuZ2UgKGNvbW1vbi0+c2lua3BhZCwgY29tbW9uLT5vZmZzZXQsCi0gICAgICBNQVggKHNpemUsIDY0ICogMTAyNCksICZjb21tb24tPmNhY2hlZF9idWZmZXIpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgY29tbW9uLT5jYWNoZWRfYnVmZmVyID0gTlVMTDsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlcikgPj0gc2l6ZSkgewotICAgIGlmIChwX2J1ZikKLSAgICAgICpwX2J1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlciwKLSAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfQUxMLCAwLCBzaXplKTsKLSAgICBpZiAoYnl0ZXMpIHsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChjb21tb24tPmNhY2hlZF9idWZmZXIsICZjb21tb24tPmNhY2hlZF9tYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBjb21tb24tPmNhY2hlZF9kYXRhID0gY29tbW9uLT5jYWNoZWRfbWFwLmRhdGE7Ci0gICAgICAqYnl0ZXMgPSBjb21tb24tPmNhY2hlZF9kYXRhOwotICAgIH0KLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICAvKiBOb3QgcG9zc2libGUgdG8gZ2V0IGVub3VnaCBkYXRhLCB0cnkgYSBsYXN0IHRpbWUgd2l0aAotICAgKiByZXF1ZXN0aW5nIGV4YWN0bHkgdGhlIHNpemUgd2UgbmVlZCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChjb21tb24tPmNhY2hlZF9idWZmZXIpOwotICBjb21tb24tPmNhY2hlZF9idWZmZXIgPSBOVUxMOwotCi0gIHJldCA9Ci0gICAgICBnc3RfcGFkX3B1bGxfcmFuZ2UgKGNvbW1vbi0+c2lua3BhZCwgY29tbW9uLT5vZmZzZXQsIHNpemUsCi0gICAgICAmY29tbW9uLT5jYWNoZWRfYnVmZmVyKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgInB1bGxfcmFuZ2UgcmV0dXJuZWQgJWQiLCByZXQpOwotICAgIGlmIChwX2J1ZikKLSAgICAgICpwX2J1ZiA9IE5VTEw7Ci0gICAgaWYgKGJ5dGVzKQotICAgICAgKmJ5dGVzID0gTlVMTDsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgaWYgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlcikgPCBzaXplKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJEcm9wcGluZyBzaG9ydCBidWZmZXIgYXQgb2Zmc2V0ICUiCi0gICAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIjogd2FudGVkICV1IGJ5dGVzLCBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICAgIGNvbW1vbi0+b2Zmc2V0LCBzaXplLCBnc3RfYnVmZmVyX2dldF9zaXplIChjb21tb24tPmNhY2hlZF9idWZmZXIpKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGNvbW1vbi0+Y2FjaGVkX2J1ZmZlcik7Ci0gICAgY29tbW9uLT5jYWNoZWRfYnVmZmVyID0gTlVMTDsKLSAgICBpZiAocF9idWYpCi0gICAgICAqcF9idWYgPSBOVUxMOwotICAgIGlmIChieXRlcykKLSAgICAgICpieXRlcyA9IE5VTEw7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotCi0gIGlmIChwX2J1ZikKLSAgICAqcF9idWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChjb21tb24tPmNhY2hlZF9idWZmZXIsCi0gICAgICAgIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIHNpemUpOwotICBpZiAoYnl0ZXMpIHsKLSAgICBnc3RfYnVmZmVyX21hcCAoY29tbW9uLT5jYWNoZWRfYnVmZmVyLCAmY29tbW9uLT5jYWNoZWRfbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGNvbW1vbi0+Y2FjaGVkX2RhdGEgPSBjb21tb24tPmNhY2hlZF9tYXAuZGF0YTsKLSAgICAqYnl0ZXMgPSBjb21tb24tPmNhY2hlZF9kYXRhOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfcHVsbCAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLCBndWludCBwZWVrLAotICAgIGd1aW50OCAqKiBkYXRhKQotewotICByZXR1cm4gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfYnl0ZXMgKGNvbW1vbiwgY29tbW9uLT5vZmZzZXQsIHBlZWssCi0gICAgICBOVUxMLCBkYXRhKTsKLX0KLQotR3N0Rmxvd1JldHVybgotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFbGVtZW50ICogZWwsIGd1aW50MzIgKiBfaWQsIGd1aW50NjQgKiBfbGVuZ3RoLCBndWludCAqIF9uZWVkZWQpCi17Ci0gIHJldHVybiBnc3RfZWJtbF9wZWVrX2lkX2xlbmd0aCAoX2lkLCBfbGVuZ3RoLCBfbmVlZGVkLAotICAgICAgKEdzdFBlZWtEYXRhKSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19wdWxsLCAoZ3BvaW50ZXIpIGNvbW1vbiwgZWwsCi0gICAgICBjb21tb24tPm9mZnNldCk7Ci19Ci0KLUdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wZWVrX2lkX2xlbmd0aF9wdXNoIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0RWxlbWVudCAqIGVsLCBndWludDMyICogX2lkLCBndWludDY0ICogX2xlbmd0aCwgZ3VpbnQgKiBfbmVlZGVkKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICByZXQgPSBnc3RfZWJtbF9wZWVrX2lkX2xlbmd0aCAoX2lkLCBfbGVuZ3RoLCBfbmVlZGVkLAotICAgICAgKEdzdFBlZWtEYXRhKSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGVla19hZGFwdGVyLCAoZ3BvaW50ZXIpIGNvbW1vbiwKLSAgICAgIGVsLCBjb21tb24tPm9mZnNldCk7Ci0KLSAgZ3N0X2FkYXB0ZXJfdW5tYXAgKGNvbW1vbi0+YWRhcHRlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9yZWFkX3RyYWNrX2VuY29kaW5nIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0RWJtbFJlYWQgKiBlYm1sLCBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQpCi17Ci0gIEdzdE1hdHJvc2thVHJhY2tFbmNvZGluZyBlbmMgPSB7IDAsIH07Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludDMyIGlkOwotCi0gIERFQlVHX0VMRU1FTlRfU1RBUlQgKGNvbW1vbiwgZWJtbCwgIkNvbnRlbnRFbmNvZGluZyIpOwotICAvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgKi8KLSAgZW5jLnNjb3BlID0gMTsKLSAgLyogQWxsIG90aGVyIGRlZmF1bHQgdmFsdWVzIGFyZSAwICovCi0KLSAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX21hc3RlciAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNvbnRlbnRFbmNvZGluZyIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIHdoaWxlIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgZ3N0X2VibWxfcmVhZF9oYXNfcmVtYWluaW5nIChlYm1sLCAxLCBUUlVFKSkgewotICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcGVla19pZCAoZWJtbCwgJmlkKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLQotICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgIGNhc2UgR1NUX01BVFJPU0tBX0lEX0NPTlRFTlRFTkNPRElOR09SREVSOnsKLSAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICghZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2VuY29kaW5nX29yZGVyX3VuaXF1ZSAoY29udGV4dC0+ZW5jb2RpbmdzLAotICAgICAgICAgICAgICAgIG51bSkpIHsKLSAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAgICJDb250ZW50RW5jb2RpbmdPcmRlciAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAgICJpcyBub3QgdW5pcXVlIGZvciB0cmFjayAlIiBHX0dVSU5UNjRfRk9STUFULCBudW0sIGNvbnRleHQtPm51bSk7Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiQ29udGVudEVuY29kaW5nT3JkZXI6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgIGVuYy5vcmRlciA9IG51bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT05URU5URU5DT0RJTkdTQ09QRTp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtID4gNyB8fCBudW0gPT0gMCkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkludmFsaWQgQ29udGVudEVuY29kaW5nU2NvcGUgJSIKLSAgICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICJDb250ZW50RW5jb2RpbmdTY29wZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgZW5jLnNjb3BlID0gbnVtOwotCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVEVOQ09ESU5HVFlQRTp7Ci0gICAgICAgIGd1aW50NjQgbnVtOwotCi0gICAgICAgIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF91aW50IChlYm1sLCAmaWQsICZudW0pKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobnVtID4gMSkgewotICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwgIkludmFsaWQgQ29udGVudEVuY29kaW5nVHlwZSAlIgotICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKG51bSAhPSAwKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAgICAgICAiRW5jcnlwdGVkIHRyYWNrcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiQ29udGVudEVuY29kaW5nVHlwZTogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbnVtKTsKLSAgICAgICAgZW5jLnR5cGUgPSBudW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVENPTVBSRVNTSU9OOnsKLQotICAgICAgICBERUJVR19FTEVNRU5UX1NUQVJUIChjb21tb24sIGVibWwsICJDb250ZW50Q29tcHJlc3Npb24iKTsKLQotICAgICAgICBpZiAoKHJldCA9IGdzdF9lYm1sX3JlYWRfbWFzdGVyIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICB3aGlsZSAocmV0ID09IEdTVF9GTE9XX09LICYmCi0gICAgICAgICAgICBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVENPTVBBTEdPOnsKLSAgICAgICAgICAgICAgZ3VpbnQ2NCBudW07Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPSBnc3RfZWJtbF9yZWFkX3VpbnQgKGVibWwsICZpZCwgJm51bSkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKG51bSA+IDMpIHsKLSAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJJbnZhbGlkIENvbnRlbnRDb21wQWxnbyAlIgotICAgICAgICAgICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBudW0pOwotICAgICAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICAgICAgICJDb250ZW50Q29tcEFsZ286ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG51bSk7Ci0gICAgICAgICAgICAgIGVuYy5jb21wX2FsZ28gPSBudW07Ci0KLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEdTVF9NQVRST1NLQV9JRF9DT05URU5UQ09NUFNFVFRJTkdTOnsKLSAgICAgICAgICAgICAgZ3VpbnQ4ICpkYXRhOwotICAgICAgICAgICAgICBndWludDY0IHNpemU7Ci0KLSAgICAgICAgICAgICAgaWYgKChyZXQgPQotICAgICAgICAgICAgICAgICAgICAgIGdzdF9lYm1sX3JlYWRfYmluYXJ5IChlYm1sLCAmaWQsICZkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZW5jLmNvbXBfc2V0dGluZ3MgPSBkYXRhOwotICAgICAgICAgICAgICBlbmMuY29tcF9zZXR0aW5nc19sZW5ndGggPSBzaXplOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAgICAgICAiQ29udGVudENvbXBTZXR0aW5ncyBvZiBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNpemUpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAgICAgICAgICAgIlVua25vd24gQ29udGVudENvbXByZXNzaW9uIHN1YmVsZW1lbnQgMHgleCAtIGlnbm9yaW5nIiwgaWQpOwotICAgICAgICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJDb250ZW50Q29tcHJlc3Npb24iLCByZXQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVEVOQ1JZUFRJT046Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvbW1vbi0+c2lua3BhZCwKLSAgICAgICAgICAgICJFbmNyeXB0ZWQgdHJhY2tzIG5vdCB5ZXQgc3VwcG9ydGVkIik7Ci0gICAgICAgIGdzdF9lYm1sX3JlYWRfc2tpcCAoZWJtbCk7Ci0gICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29tbW9uLT5zaW5rcGFkLAotICAgICAgICAgICAgIlVua25vd24gQ29udGVudEVuY29kaW5nIHN1YmVsZW1lbnQgMHgleCAtIGlnbm9yaW5nIiwgaWQpOwotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNvbnRlbnRFbmNvZGluZyIsIHJldCk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykKLSAgICByZXR1cm4gcmV0OwotCi0gIC8qIFRPRE86IENoZWNrIGlmIHRoZSBjb21iaW5hdGlvbiBvZiB2YWx1ZXMgaXMgdmFsaWQgKi8KLQotICBnX2FycmF5X2FwcGVuZF92YWwgKGNvbnRleHQtPmVuY29kaW5ncywgZW5jKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1Hc3RGbG93UmV0dXJuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVhZF90cmFja19lbmNvZGluZ3MgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbiwKLSAgICBHc3RFYm1sUmVhZCAqIGVibWwsIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICogY29udGV4dCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50MzIgaWQ7Ci0KLSAgREVCVUdfRUxFTUVOVF9TVEFSVCAoY29tbW9uLCBlYm1sLCAiQ29udGVudEVuY29kaW5ncyIpOwotCi0gIGlmICgocmV0ID0gZ3N0X2VibWxfcmVhZF9tYXN0ZXIgKGVibWwsICZpZCkpICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgREVCVUdfRUxFTUVOVF9TVE9QIChjb21tb24sIGVibWwsICJDb250ZW50RW5jb2RpbmdzIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgY29udGV4dC0+ZW5jb2RpbmdzID0KLSAgICAgIGdfYXJyYXlfc2l6ZWRfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoR3N0TWF0cm9za2FUcmFja0VuY29kaW5nKSwgMSk7Ci0KLSAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSyAmJiBnc3RfZWJtbF9yZWFkX2hhc19yZW1haW5pbmcgKGVibWwsIDEsIFRSVUUpKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfZWJtbF9wZWVrX2lkIChlYm1sLCAmaWQpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGJyZWFrOwotCi0gICAgc3dpdGNoIChpZCkgewotICAgICAgY2FzZSBHU1RfTUFUUk9TS0FfSURfQ09OVEVOVEVOQ09ESU5HOgotICAgICAgICByZXQgPSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVhZF90cmFja19lbmNvZGluZyAoY29tbW9uLCBlYm1sLAotICAgICAgICAgICAgY29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsCi0gICAgICAgICAgICAiVW5rbm93biBDb250ZW50RW5jb2RpbmdzIHN1YmVsZW1lbnQgMHgleCAtIGlnbm9yaW5nIiwgaWQpOwotICAgICAgICByZXQgPSBnc3RfZWJtbF9yZWFkX3NraXAgKGVibWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICBERUJVR19FTEVNRU5UX1NUT1AgKGNvbW1vbiwgZWJtbCwgIkNvbnRlbnRFbmNvZGluZ3MiLCByZXQpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19FT1MpCi0gICAgcmV0dXJuIHJldDsKLQotICAvKiBTb3J0IGVuY29kaW5ncyBhY2NvcmRpbmcgdG8gdGhlaXIgb3JkZXIgKi8KLSAgZ19hcnJheV9zb3J0IChjb250ZXh0LT5lbmNvZGluZ3MsCi0gICAgICAoR0NvbXBhcmVGdW5jKSBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZW5jb2RpbmdfY21wKTsKLQotICByZXR1cm4gZ3N0X21hdHJvc2thX2RlY29kZV9jb250ZW50X2VuY29kaW5ncyAoY29udGV4dC0+ZW5jb2RpbmdzKTsKLX0KLQotdm9pZAotZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2ZyZWVfcGFyc2VkX2VsIChncG9pbnRlciBtZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ19zbGljZV9mcmVlIChndWludDY0LCBtZW0pOwotfQotCi12b2lkCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25faW5pdCAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY3R4KQotewotICBjdHgtPnNyYyA9IE5VTEw7Ci0gIGN0eC0+d3JpdGluZ19hcHAgPSBOVUxMOwotICBjdHgtPm11eGluZ19hcHAgPSBOVUxMOwotICBjdHgtPmluZGV4ID0gTlVMTDsKLSAgY3R4LT5nbG9iYWxfdGFncyA9IE5VTEw7Ci0gIGN0eC0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgY3R4LT5jYWNoZWRfdHJhY2tfdGFnbGlzdHMgPQotICAgICAgZ19oYXNoX3RhYmxlX25ld19mdWxsIChOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfdGFnX2xpc3RfdW5yZWYpOwotfQotCi12b2lkCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZmluYWxpemUgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGN0eCkKLXsKLSAgaWYgKGN0eC0+c3JjKSB7Ci0gICAgZ19wdHJfYXJyYXlfZnJlZSAoY3R4LT5zcmMsIFRSVUUpOwotICAgIGN0eC0+c3JjID0gTlVMTDsKLSAgfQotCi0gIGlmIChjdHgtPmdsb2JhbF90YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChjdHgtPmdsb2JhbF90YWdzKTsKLSAgICBjdHgtPmdsb2JhbF90YWdzID0gTlVMTDsKLSAgfQotCi0gIGdfb2JqZWN0X3VucmVmIChjdHgtPmFkYXB0ZXIpOwotICBnX2hhc2hfdGFibGVfcmVtb3ZlX2FsbCAoY3R4LT5jYWNoZWRfdHJhY2tfdGFnbGlzdHMpOwotICBnX2hhc2hfdGFibGVfdW5yZWYgKGN0eC0+Y2FjaGVkX3RyYWNrX3RhZ2xpc3RzKTsKLQotfQotCi12b2lkCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVzZXQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGN0eCkKLXsKLSAgZ3VpbnQgaTsKLQotICBHU1RfTE9HX09CSkVDVCAoY3R4LT5zaW5rcGFkLCAicmVzZXR0aW5nIHJlYWQgY29udGV4dCIpOwotCi0gIC8qIHJlc2V0IGlucHV0ICovCi0gIGN0eC0+c3RhdGUgPSBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9TVEFSVDsKLQotICAvKiBjbGVhbiB1cCBleGlzdGluZyBzdHJlYW1zIGlmIGFueSAqLwotICBpZiAoY3R4LT5zcmMpIHsKLSAgICBnX2Fzc2VydCAoY3R4LT5zcmMtPmxlbiA9PSBjdHgtPm51bV9zdHJlYW1zKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5zcmMtPmxlbjsgaSsrKSB7Ci0gICAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IGdfcHRyX2FycmF5X2luZGV4IChjdHgtPnNyYywgaSk7Ci0KLSAgICAgIGlmIChjb250ZXh0LT5wYWQgIT0gTlVMTCkKLSAgICAgICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgY29udGV4dC0+cGFkKTsKLQotICAgICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmNvbnRleHQtPmNhcHMsIE5VTEwpOwotICAgICAgZ3N0X21hdHJvc2thX3RyYWNrX2ZyZWUgKGNvbnRleHQpOwotICAgIH0KLSAgICBnX3B0cl9hcnJheV9mcmVlIChjdHgtPnNyYywgVFJVRSk7Ci0gIH0KLSAgY3R4LT5zcmMgPSBnX3B0cl9hcnJheV9uZXcgKCk7Ci0gIGN0eC0+bnVtX3N0cmVhbXMgPSAwOwotCi0gIC8qIHJlc2V0IG1lZGlhIGluZm8gKi8KLSAgZ19mcmVlIChjdHgtPndyaXRpbmdfYXBwKTsKLSAgY3R4LT53cml0aW5nX2FwcCA9IE5VTEw7Ci0gIGdfZnJlZSAoY3R4LT5tdXhpbmdfYXBwKTsKLSAgY3R4LT5tdXhpbmdfYXBwID0gTlVMTDsKLQotICAvKiByZXNldCBzdHJlYW0gdHlwZSAqLwotICBjdHgtPmlzX3dlYm0gPSBGQUxTRTsKLSAgY3R4LT5oYXNfdmlkZW8gPSBGQUxTRTsKLQotICAvKiByZXNldCBpbmRleGVzICovCi0gIGlmIChjdHgtPmluZGV4KSB7Ci0gICAgZ19hcnJheV9mcmVlIChjdHgtPmluZGV4LCBUUlVFKTsKLSAgICBjdHgtPmluZGV4ID0gTlVMTDsKLSAgfQotCi0gIC8qIHJlc2V0IHRpbWVycyAqLwotICBjdHgtPnRpbWVfc2NhbGUgPSAxMDAwMDAwOwotICBjdHgtPmNyZWF0ZWQgPSBHX01JTklOVDY0OwotCi0gIC8qIGN1ZXMvdHJhY2tzL3NlZ21lbnRpbmZvICovCi0gIGN0eC0+aW5kZXhfcGFyc2VkID0gRkFMU0U7Ci0gIGN0eC0+c2VnbWVudGluZm9fcGFyc2VkID0gRkFMU0U7Ci0gIGN0eC0+YXR0YWNobWVudHNfcGFyc2VkID0gRkFMU0U7Ci0gIGN0eC0+Y2hhcHRlcnNfcGFyc2VkID0gRkFMU0U7Ci0KLSAgLyogdGFncyAqLwotICBjdHgtPmdsb2JhbF90YWdzX2NoYW5nZWQgPSBGQUxTRTsKLSAgZ19saXN0X2ZvcmVhY2ggKGN0eC0+dGFnc19wYXJzZWQsCi0gICAgICAoR0Z1bmMpIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9mcmVlX3BhcnNlZF9lbCwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChjdHgtPnRhZ3NfcGFyc2VkKTsKLSAgY3R4LT50YWdzX3BhcnNlZCA9IE5VTEw7Ci0gIGlmIChjdHgtPmdsb2JhbF90YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChjdHgtPmdsb2JhbF90YWdzKTsKLSAgfQotICBjdHgtPmdsb2JhbF90YWdzID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZ3N0X3RhZ19saXN0X3NldF9zY29wZSAoY3R4LT5nbG9iYWxfdGFncywgR1NUX1RBR19TQ09QRV9HTE9CQUwpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZjdHgtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGN0eC0+b2Zmc2V0ID0gMDsKLQotICBpZiAoY3R4LT5jYWNoZWRfYnVmZmVyKSB7Ci0gICAgaWYgKGN0eC0+Y2FjaGVkX2RhdGEpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGN0eC0+Y2FjaGVkX2J1ZmZlciwgJmN0eC0+Y2FjaGVkX21hcCk7Ci0gICAgICBjdHgtPmNhY2hlZF9kYXRhID0gTlVMTDsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoY3R4LT5jYWNoZWRfYnVmZmVyKTsKLSAgICBjdHgtPmNhY2hlZF9idWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgLyogZnJlZSBjaGFwdGVycyBUT0MgaWYgYW55ICovCi0gIGlmIChjdHgtPnRvYykgewotICAgIGdzdF90b2NfdW5yZWYgKGN0eC0+dG9jKTsKLSAgICBjdHgtPnRvYyA9IE5VTEw7Ci0gIH0KLX0KLQotLyogY2FsbCB3aXRoIG9iamVjdCBsb2NrIGhlbGQgKi8KLXZvaWQKLWdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9yZXNldF9zdHJlYW1zIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0Q2xvY2tUaW1lIHRpbWUsIGdib29sZWFuIGZ1bGwpCi17Ci0gIGdpbnQgaTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChjb21tb24tPnNpbmtwYWQsICJyZXNldHRpbmcgc3RyZWFtIHN0YXRlIik7Ci0KLSAgZ19hc3NlcnQgKGNvbW1vbi0+c3JjLT5sZW4gPT0gY29tbW9uLT5udW1fc3RyZWFtcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBjb21tb24tPnNyYy0+bGVuOyBpKyspIHsKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqY29udGV4dCA9IGdfcHRyX2FycmF5X2luZGV4IChjb21tb24tPnNyYywgaSk7Ci0gICAgY29udGV4dC0+cG9zID0gdGltZTsKLSAgICBjb250ZXh0LT5zZXRfZGlzY29udCA9IFRSVUU7Ci0gICAgY29udGV4dC0+ZW9zID0gRkFMU0U7Ci0gICAgY29udGV4dC0+ZnJvbV90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBpZiAoY29udGV4dC0+dHlwZSA9PSBHU1RfTUFUUk9TS0FfVFJBQ0tfVFlQRV9WSURFTykgewotICAgICAgR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqdmlkZW9jb250ZXh0ID0KLSAgICAgICAgICAoR3N0TWF0cm9za2FUcmFja1ZpZGVvQ29udGV4dCAqKSBjb250ZXh0OwotICAgICAgLyogZGVtdXggb2JqZWN0IGxvY2sgaGVsZCBieSBjYWxsZXIgKi8KLSAgICAgIHZpZGVvY29udGV4dC0+ZWFybGllc3RfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgfQotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfbWF0cm9za2FfcmVhZF9jb21tb25fdHJhY2tudW1iZXJfdW5pcXVlIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgZ3VpbnQ2NCBudW0pCi17Ci0gIGdpbnQgaTsKLQotICBnX2Fzc2VydCAoY29tbW9uLT5zcmMtPmxlbiA9PSBjb21tb24tPm51bV9zdHJlYW1zKTsKLSAgZm9yIChpID0gMDsgaSA8IGNvbW1vbi0+c3JjLT5sZW47IGkrKykgewotICAgIEdzdE1hdHJvc2thVHJhY2tDb250ZXh0ICpjb250ZXh0ID0gZ19wdHJfYXJyYXlfaW5kZXggKGNvbW1vbi0+c3JjLCBpKTsKLQotICAgIGlmIChjb250ZXh0LT5udW0gPT0gbnVtKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19CmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2EvbWF0cm9za2EtcmVhZC1jb21tb24uaCBiL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDAxZTFmLi4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS1yZWFkLWNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qIEdTdHJlYW1lciBNYXRyb3NrYSBtdXhlci9kZW11eGVyCi0gKiAoYykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAoYykgMjAxMSBEZWJhcnNoaSBSYXkgPHJpc2hpQGdudS5vcmc+Ci0gKgotICogbWF0cm9za2EtcmVhZC1jb21tb24uaDogc2hhcmVkIGJ5IG1hdHJvc2thIGZpbGUvc3RyZWFtIGRlbXV4ZXIgYW5kIHBhcnNlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTUFUUk9TS0FfUkVBRF9DT01NT05fSF9fCi0jZGVmaW5lIF9fR1NUX01BVFJPU0tBX1JFQURfQ09NTU9OX0hfXwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLSNpbmNsdWRlICJtYXRyb3NrYS1pZHMuaCIKLQotR19CRUdJTl9ERUNMUwotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKG1hdHJvc2thcmVhZGNvbW1vbl9kZWJ1Zyk7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NUQVJULAotICBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9TRUdNRU5ULAotICBHU1RfTUFUUk9TS0FfUkVBRF9TVEFURV9IRUFERVIsCi0gIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX0RBVEEsCi0gIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NFRUssCi0gIEdTVF9NQVRST1NLQV9SRUFEX1NUQVRFX1NDQU5OSU5HCi19IEdzdE1hdHJvc2thUmVhZFN0YXRlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0TWF0cm9za2FSZWFkQ29tbW9uIHsKLSNpZiAwCi0gIEdzdEluZGV4ICAgICAgICAgICAgICAgICplbGVtZW50X2luZGV4OwotICBnaW50ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF9pbmRleF93cml0ZXJfaWQ7Ci0jZW5kaWYKLQotICAvKiBwYWRzICovCi0gIEdzdFBhZCAgICAgICAgICAgICAgICAgICpzaW5rcGFkOwotICBHUHRyQXJyYXkgICAgICAgICAgICAgICAqc3JjOwotICBndWludCAgICAgICAgICAgICAgICAgICAgbnVtX3N0cmVhbXM7Ci0KLSAgLyogbWV0YWRhdGEgKi8KLSAgZ2NoYXIgICAgICAgICAgICAgICAgICAgKm11eGluZ19hcHA7Ci0gIGdjaGFyICAgICAgICAgICAgICAgICAgICp3cml0aW5nX2FwcDsKLSAgZ2ludDY0ICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ7Ci0KLSAgLyogc3RhdGUgKi8KLSAgR3N0TWF0cm9za2FSZWFkU3RhdGUgICAgIHN0YXRlOwotCi0gIC8qIHN0cmVhbSB0eXBlICovCi0gIGdib29sZWFuICAgICAgICAgICAgICAgICBpc193ZWJtOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgaGFzX3ZpZGVvOwotCi0gIC8qIGRpZCB3ZSBwYXJzZSBjdWVzL3RyYWNrcy9zZWdtZW50aW5mbyBhbHJlYWR5PyAqLwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgaW5kZXhfcGFyc2VkOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgc2VnbWVudGluZm9fcGFyc2VkOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgYXR0YWNobWVudHNfcGFyc2VkOwotICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgY2hhcHRlcnNfcGFyc2VkOwotICBHTGlzdCAgICAgICAgICAgICAgICAgICAqdGFnc19wYXJzZWQ7Ci0KLSAgLyogY2hhcHRlcnMgc3R1ZmYgKi8KLSAgR3N0VG9jICAgICAgICAgICAgICAgICAgKnRvYzsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgdG9jX3VwZGF0ZWQ7Ci0KLSAgLyogc3RhcnQtb2Ytc2VnbWVudCBhbmQgbGVuZ3RoICovCi0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBlYm1sX3NlZ21lbnRfc3RhcnQ7Ci0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBlYm1sX3NlZ21lbnRfbGVuZ3RoOwotCi0gIC8qIGEgY3VlIChpbmRleCkgdGFibGUgKi8KLSAgR0FycmF5ICAgICAgICAgICAgICAgICAgKmluZGV4OwotCi0gIC8qIHRpbWVzY2FsZSBpbiB0aGUgZmlsZSAqLwotICBndWludDY0ICAgICAgICAgICAgICAgICAgdGltZV9zY2FsZTsKLQotICAvKiBrZWVwaW5nIHRyYWNrIG9mIHBsYXliYWNrIHBvc2l0aW9uICovCi0gIEdzdFNlZ21lbnQgICAgICAgICAgICAgICBzZWdtZW50OwotCi0gIEdzdFRhZ0xpc3QgICAgICAgICAgICAgICpnbG9iYWxfdGFnczsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgIGdsb2JhbF90YWdzX2NoYW5nZWQ7Ci0KLSAgLyogcHVsbCBtb2RlIGNhY2hpbmcgKi8KLSAgR3N0QnVmZmVyICpjYWNoZWRfYnVmZmVyOwotICBndWludDggKmNhY2hlZF9kYXRhOwotICBHc3RNYXBJbmZvIGNhY2hlZF9tYXA7Ci0KLSAgLyogcHVzaCBhbmQgcHVsbCBtb2RlICovCi0gIGd1aW50NjQgICAgICAgICAgICAgICAgICBvZmZzZXQ7Ci0KLSAgLyogcHVzaCBiYXNlZCBtb2RlIHVzdWFsIHN1c3BlY3RzICovCi0gIEdzdEFkYXB0ZXIgICAgICAgICAgICAgICphZGFwdGVyOwotCi0gIC8qIGNhY2hlIGZvciB0cmFjayB0YWdzIHRoYXQgZm9yd2FyZC1yZWZlcmVuY2UgdGhlaXIgdHJhY2tzICovCi0gIEdIYXNoVGFibGUgKmNhY2hlZF90cmFja190YWdsaXN0cyA7Ci0gCi19IEdzdE1hdHJvc2thUmVhZENvbW1vbjsKLQotR3N0Rmxvd1JldHVybiBnc3RfbWF0cm9za2FfZGVjb2RlX2NvbnRlbnRfZW5jb2RpbmdzIChHQXJyYXkgKiBlbmNvZGluZ3MpOwotZ2Jvb2xlYW4gZ3N0X21hdHJvc2thX2RlY29kZV9kYXRhIChHQXJyYXkgKiBlbmNvZGluZ3MsIGdwb2ludGVyICogZGF0YV9vdXQsCi0gICAgZ3NpemUgKiBzaXplX291dCwgR3N0TWF0cm9za2FUcmFja0VuY29kaW5nU2NvcGUgc2NvcGUsIGdib29sZWFuIGZyZWUpOwotZ2ludCBnc3RfbWF0cm9za2FfaW5kZXhfc2Vla19maW5kIChHc3RNYXRyb3NrYUluZGV4ICogaTEsIEdzdENsb2NrVGltZSAqIHRpbWUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLUdzdE1hdHJvc2thSW5kZXggKiBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZG9faW5kZXhfc2VlayAoCi0gICAgR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLCBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHRyYWNrLCBnaW50NjQKLSAgICBzZWVrX3BvcywgR0FycmF5ICoqIF9pbmRleCwgZ2ludCAqIF9lbnRyeV9pbmRleCwgR3N0U2VhcmNoTW9kZSBzbmFwX2Rpcik7Ci12b2lkIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9mb3VuZF9nbG9iYWxfdGFnIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgR3N0RWxlbWVudCAqIGVsLCBHc3RUYWdMaXN0ICogdGFnbGlzdCk7Ci1naW50NjQgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2dldF9sZW5ndGggKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGNvbW1vbik7Ci1Hc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9nZXRfc2Vla190cmFjayAoCi0gICAgR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLCBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIHRyYWNrKTsKLUdzdEZsb3dSZXR1cm4gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2luZGV4IChHc3RNYXRyb3NrYVJlYWRDb21tb24gKgotICAgIGNvbW1vbiwgR3N0RWJtbFJlYWQgKiBlYm1sKTsKLUdzdEZsb3dSZXR1cm4gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BhcnNlX2luZm8gKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqCi0gICAgY29tbW9uLCBHc3RFbGVtZW50ICogZWwsIEdzdEVibWxSZWFkICogZWJtbCk7Ci1Hc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9hdHRhY2htZW50cyAoCi0gICAgR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLCBHc3RFbGVtZW50ICogZWwsIEdzdEVibWxSZWFkICogZWJtbCk7Ci1Hc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9jaGFwdGVycyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICoKLSAgICBjb21tb24sIEdzdEVibWxSZWFkICogZWJtbCk7Ci1Hc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9oZWFkZXIgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqCi0gICAgY29tbW9uLCBHc3RFYm1sUmVhZCAqIGVibWwpOwotR3N0Rmxvd1JldHVybiBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcGFyc2VfbWV0YWRhdGEgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqCi0gICAgY29tbW9uLCBHc3RFbGVtZW50ICogZWwsIEdzdEVibWxSZWFkICogZWJtbCk7Ci1Hc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wYXJzZV9za2lwIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKgotICAgIGNvbW1vbiwgR3N0RWJtbFJlYWQgKiBlYm1sLCBjb25zdCBnY2hhciAqIHBhcmVudF9uYW1lLCBndWludCBpZCk7Ci1Hc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wZWVrX2J5dGVzIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKgotICAgIGNvbW1vbiwgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsIEdzdEJ1ZmZlciAqKiBwX2J1ZiwgZ3VpbnQ4ICoqIGJ5dGVzKTsKLUdzdEZsb3dSZXR1cm4gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3BlZWtfaWRfbGVuZ3RoX3B1bGwgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqCi0gICAgY29tbW9uLCBHc3RFbGVtZW50ICogZWwsIGd1aW50MzIgKiBfaWQsIGd1aW50NjQgKiBfbGVuZ3RoLCBndWludCAqCi0gICAgX25lZWRlZCk7Ci1Hc3RGbG93UmV0dXJuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9wZWVrX2lkX2xlbmd0aF9wdXNoIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKgotICAgIGNvbW1vbiwgR3N0RWxlbWVudCAqIGVsLCBndWludDMyICogX2lkLCBndWludDY0ICogX2xlbmd0aCwgZ3VpbnQgKgotICAgIF9uZWVkZWQpOwotZ2ludCBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fc3RyZWFtX2Zyb21fbnVtIChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sCi0gICAgZ3VpbnQgdHJhY2tfbnVtKTsKLUdzdEZsb3dSZXR1cm4gZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX3JlYWRfdHJhY2tfZW5jb2RpbmdzICgKLSAgICBHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjb21tb24sIEdzdEVibWxSZWFkICogZWJtbCwKLSAgICBHc3RNYXRyb3NrYVRyYWNrQ29udGV4dCAqIGNvbnRleHQpOwotdm9pZCBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fcmVzZXRfc3RyZWFtcyAoR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY29tbW9uLAotICAgIEdzdENsb2NrVGltZSB0aW1lLCBnYm9vbGVhbiBmdWxsKTsKLXZvaWQgZ3N0X21hdHJvc2thX3JlYWRfY29tbW9uX2ZyZWVfcGFyc2VkX2VsIChncG9pbnRlciBtZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci12b2lkIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9pbml0IChHc3RNYXRyb3NrYVJlYWRDb21tb24gKiBjdHgpOwotdm9pZCBnc3RfbWF0cm9za2FfcmVhZF9jb21tb25fZmluYWxpemUgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqIGN0eCk7Ci12b2lkIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl9yZXNldCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0TWF0cm9za2FSZWFkQ29tbW9uICogY3R4KTsKLWdib29sZWFuIGdzdF9tYXRyb3NrYV9yZWFkX2NvbW1vbl90cmFja251bWJlcl91bmlxdWUgKEdzdE1hdHJvc2thUmVhZENvbW1vbiAqCi0gICAgY29tbW9uLCBndWludDY0IG51bSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9NQVRST1NLQV9SRUFEX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tYXRyb3NrYS9tYXRyb3NrYS5jIGIvZ3N0L21hdHJvc2thL21hdHJvc2thLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNDM5NzIuLjAwMDAwMDAKLS0tIGEvZ3N0L21hdHJvc2thL21hdHJvc2thLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiBHU3RyZWFtZXIgTWF0cm9za2EgbXV4ZXIvZGVtdXhlcgotICogKGMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIG1hdHJvc2thLmM6IHBsdWdpbiBsb2FkZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRyb3NrYS1kZW11eC5oIgotI2luY2x1ZGUgIm1hdHJvc2thLXBhcnNlLmgiCi0jaW5jbHVkZSAibWF0cm9za2EtcmVhZC1jb21tb24uaCIKLSNpbmNsdWRlICJtYXRyb3NrYS1tdXguaCIKLSNpbmNsdWRlICJtYXRyb3NrYS1pZHMuaCIKLSNpbmNsdWRlICJ3ZWJtLW11eC5oIgotCi0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdib29sZWFuIHJldDsKLQotICBnc3RfcGJfdXRpbHNfaW5pdCAoKTsKLQotICBnc3RfbWF0cm9za2FfcmVnaXN0ZXJfdGFncyAoKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAobWF0cm9za2FyZWFkY29tbW9uX2RlYnVnLCAibWF0cm9za2FyZWFkY29tbW9uIiwgMCwKLSAgICAgICJNYXRyb3NrYSBkZW11eGVyL3BhcnNlciBzaGFyZWQgZGVidWciKTsKLQotICByZXQgPSBnc3RfbWF0cm9za2FfZGVtdXhfcGx1Z2luX2luaXQgKHBsdWdpbik7Ci0gIHJldCAmPSBnc3RfbWF0cm9za2FfcGFyc2VfcGx1Z2luX2luaXQgKHBsdWdpbik7Ci0gIHJldCAmPSBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibWF0cm9za2FtdXgiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgR1NUX1RZUEVfTUFUUk9TS0FfTVVYKTsKLSAgcmV0ICY9IGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ3ZWJtbXV4IiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIEdTVF9UWVBFX1dFQk1fTVVYKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbWF0cm9za2EsCi0gICAgIk1hdHJvc2thIGFuZCBXZWJNIHN0cmVhbSBoYW5kbGluZyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L21hdHJvc2thL3dlYm0tbXV4LmMgYi9nc3QvbWF0cm9za2Evd2VibS1tdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODExMTNlYy4uMDAwMDAwMAotLS0gYS9nc3QvbWF0cm9za2Evd2VibS1tdXguYworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBHU3RyZWFtZXIgV2ViTSBtdXhlcgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXdlYm1tdXgKLSAqCi0gKiB3ZWJtbXV4IG11eGVzIFZQOCB2aWRlbyBhbmQgVm9yYmlzIGF1ZGlvIHN0cmVhbXMgaW50byBhIFdlYk0gZmlsZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgd2VibW11eCBuYW1lPW11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPW5ld2ZpbGUud2VibSAgICAgICAgIFwKLSAqICAgdXJpZGVjb2RlYmluIHVyaT1maWxlOi8vL3BhdGgvdG8vc29tZWZpbGUub2d2IG5hbWU9ZGVtdXggICAgICAgICAgICAgICAgXAotICogICBkZW11eC4gISB2aWRlb2NvbnZlcnQgISB2cDhlbmMgISBxdWV1ZSAhIG11eC52aWRlb18wICAgIFwKLSAqICAgZGVtdXguICEgcHJvZ3Jlc3NyZXBvcnQgISBhdWRpb2NvbnZlcnQgISBhdWRpb3JhdGUgISB2b3JiaXNlbmMgISBxdWV1ZSAhIG11eC5hdWRpb18wCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHJlLWVuY29kZXMgYSB2aWRlbyBmaWxlIG9mIGFueSBmb3JtYXQgaW50byBhIFdlYk0gZmlsZS4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB3ZWJtbXV4IG5hbWU9bXV4ICEgZmlsZXNpbmsgbG9jYXRpb249dGVzdC53ZWJtICAgICAgICAgICAgXAotICogICB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MjUwICEgdmlkZW8veC1yYXcsZnJhbWVyYXRlPTI1LzEgISB2aWRlb2NvbnZlcnQgISB2cDhlbmMgISBxdWV1ZSAhIG11eC52aWRlb18wIFwKLSAqICAgYXVkaW90ZXN0c3JjIHNhbXBsZXNwZXJidWZmZXI9NDQxMDAgbnVtLWJ1ZmZlcnM9MTAgISBhdWRpby94LXJhdyxyYXRlPTQ0MTAwICEgdm9yYmlzZW5jICEgcXVldWUgISBtdXguYXVkaW9fMAotICogXXwgVGhpcyBwaXBlbGluZSBtdXhlcyBhIHRlc3QgdmlkZW8gYW5kIGEgc2luZSB3YXZlIGludG8gYSBXZWJNIGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIndlYm0tbXV4LmgiCi0KLSNkZWZpbmUgQ09NTU9OX1ZJREVPX0NBUFMgXAotICAid2lkdGggPSAoaW50KSBbIDE2LCA0MDk2IF0sICIgXAotICAiaGVpZ2h0ID0gKGludCkgWyAxNiwgNDA5NiBdLCAiIFwKLSAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXSIKLQotI2RlZmluZSBDT01NT05fQVVESU9fQ0FQUyBcCi0gICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0sICIgXAotICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0iCi0KLUdfREVGSU5FX1RZUEUgKEdzdFdlYk1NdXgsIGdzdF93ZWJtX211eCwgR1NUX1RZUEVfTUFUUk9TS0FfTVVYKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHdlYm1fc3JjX3RlbXBsID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3dlYm07IGF1ZGlvL3dlYm0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB3ZWJtX3ZpZGVvc2lua190ZW1wbCA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJ2aWRlb18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXZwOCwgIiBDT01NT05fVklERU9fQ0FQUyAiOyIKLSAgICAgICAgInZpZGVvL3gtdnA5LCAiIENPTU1PTl9WSURFT19DQVBTKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB3ZWJtX2F1ZGlvc2lua190ZW1wbCA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJhdWRpb18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXZvcmJpcywgIiBDT01NT05fQVVESU9fQ0FQUyAiOyIKLSAgICAgICAgImF1ZGlvL3gtb3B1cywgIiBDT01NT05fQVVESU9fQ0FQUykKLSAgICApOwotCi1zdGF0aWMgdm9pZAotZ3N0X3dlYm1fbXV4X2NsYXNzX2luaXQgKEdzdFdlYk1NdXhDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJndlYm1fdmlkZW9zaW5rX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmd2VibV9hdWRpb3NpbmtfdGVtcGwpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJndlYm1fc3JjX3RlbXBsKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIldlYk0gbXV4ZXIiLAotICAgICAgIkNvZGVjL011eGVyIiwKLSAgICAgICJNdXhlcyB2aWRlbyBhbmQgYXVkaW8gc3RyZWFtcyBpbnRvIGEgV2ViTSBzdHJlYW0iLAotICAgICAgIkdTdHJlYW1lciBtYWludGFpbmVycyA8Z3N0cmVhbWVyLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93ZWJtX211eF9pbml0IChHc3RXZWJNTXV4ICogbXV4KQotewotICBHU1RfTUFUUk9TS0FfTVVYIChtdXgpLT5kb2N0eXBlID0gR1NUX01BVFJPU0tBX0RPQ1RZUEVfV0VCTTsKLSAgR1NUX01BVFJPU0tBX01VWCAobXV4KS0+aXNfd2VibSA9IFRSVUU7Ci19CmRpZmYgLS1naXQgYS9nc3QvbWF0cm9za2Evd2VibS1tdXguaCBiL2dzdC9tYXRyb3NrYS93ZWJtLW11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmVlODQ0Li4wMDAwMDAwCi0tLSBhL2dzdC9tYXRyb3NrYS93ZWJtLW11eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyogR1N0cmVhbWVyIFdlYk0gbXV4ZXIKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1dFQk1fTVVYX0hfXwotI2RlZmluZSBfX0dTVF9XRUJNX01VWF9IX18KLQotI2luY2x1ZGUgIm1hdHJvc2thLW11eC5oIgotCi0jZGVmaW5lIEdTVF9UWVBFX1dFQk1fTVVYIFwKLSAgKGdzdF93ZWJtX211eF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1dFQk1fTVVYKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9XRUJNX01VWCwgR3N0V2ViTU11eCkpCi0jZGVmaW5lIEdTVF9XRUJNX01VWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1dFQk1fTVVYLCBHc3RXZWJNTXV4Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfV0VCTV9NVVgob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1dFQk1fTVVYKSkKLSNkZWZpbmUgR1NUX0lTX1dFQk1fTVVYX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfV0VCTV9NVVgpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0V2ViTU11eCBHc3RXZWJNTXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYk1NdXhDbGFzcyBHc3RXZWJNTXV4Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0V2ViTU11eCB7Ci0gIEdzdE1hdHJvc2thTXV4IG1hdHJvc2thbXV4OwotfTsKLQotc3RydWN0IF9Hc3RXZWJNTXV4Q2xhc3MgewotICBHc3RNYXRyb3NrYU11eENsYXNzIG1hdHJvc2thbXV4Y2xhc3M7Ci19OwotCi1HVHlwZSAgIGdzdF93ZWJtX211eF9nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9XRUJNX01VWF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tb25vc2NvcGUvTWFrZWZpbGUuYW0gYi9nc3QvbW9ub3Njb3BlL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmQyZWQ2Li4wMDAwMDAwCi0tLSBhL2dzdC9tb25vc2NvcGUvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rtb25vc2NvcGUubGEKLQotbGliZ3N0bW9ub3Njb3BlX2xhX1NPVVJDRVMgPSBnc3Rtb25vc2NvcGUuYyBtb25vc2NvcGUuYyBjb252b2x2ZS5jCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0bW9ub3Njb3BlLmggbW9ub3Njb3BlLmggY29udm9sdmUuaAotCi1saWJnc3Rtb25vc2NvcGVfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykKLWxpYmdzdG1vbm9zY29wZV9sYV9MSUJBREQgPSAkKEdTVF9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpCi1saWJnc3Rtb25vc2NvcGVfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0bW9ub3Njb3BlX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCmRpZmYgLS1naXQgYS9nc3QvbW9ub3Njb3BlL01ha2VmaWxlLmluIGIvZ3N0L21vbm9zY29wZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhNzkwYi4uMDAwMDAwMAotLS0gYS9nc3QvbW9ub3Njb3BlL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTI2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9tb25vc2NvcGUKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3Rtb25vc2NvcGVfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdG1vbm9zY29wZV9sYV9PQkpFQ1RTID0gbGliZ3N0bW9ub3Njb3BlX2xhLWdzdG1vbm9zY29wZS5sbyBcCi0JbGliZ3N0bW9ub3Njb3BlX2xhLW1vbm9zY29wZS5sbyBsaWJnc3Rtb25vc2NvcGVfbGEtY29udm9sdmUubG8KLWxpYmdzdG1vbm9zY29wZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rtb25vc2NvcGVfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdG1vbm9zY29wZV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdG1vbm9zY29wZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3Rtb25vc2NvcGVfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0bW9ub3Njb3BlX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdG1vbm9zY29wZV9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wIFJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0bW9ub3Njb3BlLmxhCi1saWJnc3Rtb25vc2NvcGVfbGFfU09VUkNFUyA9IGdzdG1vbm9zY29wZS5jIG1vbm9zY29wZS5jIGNvbnZvbHZlLmMKLW5vaW5zdF9IRUFERVJTID0gZ3N0bW9ub3Njb3BlLmggbW9ub3Njb3BlLmggY29udm9sdmUuaAotbGliZ3N0bW9ub3Njb3BlX2xhX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpCi1saWJnc3Rtb25vc2NvcGVfbGFfTElCQUREID0gJChHU1RfTElCUykgJChHU1RfQkFTRV9MSUJTKQotbGliZ3N0bW9ub3Njb3BlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdG1vbm9zY29wZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L21vbm9zY29wZS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvbW9ub3Njb3BlL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0bW9ub3Njb3BlLmxhOiAkKGxpYmdzdG1vbm9zY29wZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0bW9ub3Njb3BlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3Rtb25vc2NvcGVfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG1vbm9zY29wZV9sYS1jb252b2x2ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG1vbm9zY29wZV9sYS1nc3Rtb25vc2NvcGUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rtb25vc2NvcGVfbGEtbW9ub3Njb3BlLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3Rtb25vc2NvcGVfbGEtZ3N0bW9ub3Njb3BlLmxvOiBnc3Rtb25vc2NvcGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1vbm9zY29wZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rtb25vc2NvcGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG1vbm9zY29wZV9sYS1nc3Rtb25vc2NvcGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG1vbm9zY29wZV9sYS1nc3Rtb25vc2NvcGUuVHBvIC1jIC1vIGxpYmdzdG1vbm9zY29wZV9sYS1nc3Rtb25vc2NvcGUubG8gYHRlc3QgLWYgJ2dzdG1vbm9zY29wZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rtb25vc2NvcGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bW9ub3Njb3BlX2xhLWdzdG1vbm9zY29wZS5UcG8gJChERVBESVIpL2xpYmdzdG1vbm9zY29wZV9sYS1nc3Rtb25vc2NvcGUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bW9ub3Njb3BlLmMnIG9iamVjdD0nbGliZ3N0bW9ub3Njb3BlX2xhLWdzdG1vbm9zY29wZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG1vbm9zY29wZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rtb25vc2NvcGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bW9ub3Njb3BlX2xhLWdzdG1vbm9zY29wZS5sbyBgdGVzdCAtZiAnZ3N0bW9ub3Njb3BlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG1vbm9zY29wZS5jCi0KLWxpYmdzdG1vbm9zY29wZV9sYS1tb25vc2NvcGUubG86IG1vbm9zY29wZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bW9ub3Njb3BlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bW9ub3Njb3BlX2xhLW1vbm9zY29wZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bW9ub3Njb3BlX2xhLW1vbm9zY29wZS5UcG8gLWMgLW8gbGliZ3N0bW9ub3Njb3BlX2xhLW1vbm9zY29wZS5sbyBgdGVzdCAtZiAnbW9ub3Njb3BlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG1vbm9zY29wZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rtb25vc2NvcGVfbGEtbW9ub3Njb3BlLlRwbyAkKERFUERJUikvbGliZ3N0bW9ub3Njb3BlX2xhLW1vbm9zY29wZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtb25vc2NvcGUuYycgb2JqZWN0PSdsaWJnc3Rtb25vc2NvcGVfbGEtbW9ub3Njb3BlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bW9ub3Njb3BlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rtb25vc2NvcGVfbGEtbW9ub3Njb3BlLmxvIGB0ZXN0IC1mICdtb25vc2NvcGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgbW9ub3Njb3BlLmMKLQotbGliZ3N0bW9ub3Njb3BlX2xhLWNvbnZvbHZlLmxvOiBjb252b2x2ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bW9ub3Njb3BlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bW9ub3Njb3BlX2xhLWNvbnZvbHZlLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rtb25vc2NvcGVfbGEtY29udm9sdmUuVHBvIC1jIC1vIGxpYmdzdG1vbm9zY29wZV9sYS1jb252b2x2ZS5sbyBgdGVzdCAtZiAnY29udm9sdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgY29udm9sdmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bW9ub3Njb3BlX2xhLWNvbnZvbHZlLlRwbyAkKERFUERJUikvbGliZ3N0bW9ub3Njb3BlX2xhLWNvbnZvbHZlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NvbnZvbHZlLmMnIG9iamVjdD0nbGliZ3N0bW9ub3Njb3BlX2xhLWNvbnZvbHZlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bW9ub3Njb3BlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG1vbm9zY29wZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rtb25vc2NvcGVfbGEtY29udm9sdmUubG8gYHRlc3QgLWYgJ2NvbnZvbHZlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNvbnZvbHZlLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L21vbm9zY29wZS9SRUFETUUgYi9nc3QvbW9ub3Njb3BlL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWFmZjBjMC4uMDAwMDAwMAotLS0gYS9nc3QvbW9ub3Njb3BlL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotVGhpcyBpcyBhIHZpc3VhbGl6YXRpb24gYmFzZWQgb24gb24gdGhlIG1vbm9zY29wZSBvdXRwdXQgcGx1Z2luIGZyb20KLWFsc2FwbGF5ZXIuCi0KLVRoZSBtb25vc2NvcGUgY29udm9sdXRpb24gbWF0Y2hpbmcgY29kZSB3YXMgd3JpdHRlbiBieSBSYWxwaCBMb2FkZXIuCi0KLVRoZSBtb25vc2NvcGUuYyBhbmQgbW9ub3Njb3BlLmggZmlsZXMgYXJlIHVuZGVyIHRoZSBCU0QgbGljZW5zZSAod2l0aG91dCBhZHZlcnRpc2luZyBjbGF1c2UpLgotCi1UaGlzIGltcGxlbWVudGF0aW9uIGlzIHRha2VuIGZyb20gYWxzYXBsYXllciB2ZXJzaW9uIDAuOTkuNTQsIGF0Ci1odHRwOi8vd3d3LmFsc2FwbGF5ZXIub3JnLwpkaWZmIC0tZ2l0IGEvZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jIGIvZ3N0L21vbm9zY29wZS9jb252b2x2ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjNlNzk3Li4wMDAwMDAwCi0tLSBhL2dzdC9tb25vc2NvcGUvY29udm9sdmUuYworKysgL2Rldi9udWxsCkBAIC0xLDM2MyArMCwwIEBACi0vKiBLYXJhdHN1YmEgY29udm9sdXRpb24KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5IFJhbHBoIExvYWRlciA8c3Vja2Zpc2hAaWh1Zy5jby5uej4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKgotICogTm90ZTogN3RoIERlY2VtYmVyIDIwMDQ6IFRoaXMgZmlsZSB1c2VkIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwsCi0gKiAgICAgICBidXQgd2UgZ290IHBlcm1pc3Npb24gZnJvbSBSYWxwIExvYWRlciB0byByZWxpY2Vuc2UgaXQgdG8gTEdQTC4KLSAqCi0gKiAgJElkJAotICoKLSAqLwotCi0vKiBUaGUgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcuICBGb3IgdGhlIGNvbnZvbHV0aW9uIG9mIGEgcGFpcgotICogb2YgcGFpcnMsIChhLGIpICogKGMsZCkgPSAoMCwgYS5jLCBhLmQrYi5jLCBiLmQpLCB3ZSBjYW4gcmVkdWNlIHRoZSBmb3VyCi0gKiBtdWx0aXBsaWNhdGlvbnMgdG8gdGhyZWUsIGJ5IHRoZSBmb3JtdWxhZSBhLmQrYi5jID0gKGErYikuKGMrZCkgLSBhLmMgLQotICogYi5kLiAgQSBzaW1pbGFyIHJlbGF0aW9uIGVuYWJsZXMgdXMgdG8gY29tcHV0ZSBhIDJuIGJ5IDJuIGNvbnZvbHV0aW9uCi0gKiB1c2luZyAzIG4gYnkgbiBjb252b2x1dGlvbnMsIGFuZCB0aHVzIGEgMl5uIGJ5IDJebiBjb252b2x1dGlvbiB1c2luZyAzXm4KLSAqIG11bHRpcGxpY2F0aW9ucyAoYXMgb3Bwb3NlZCB0byB0aGUgNF5uIHRoYXQgdGhlIHF1YWRyYXRpYyBhbGdvcml0aG0KLSAqIHRha2VzLiAqLwotCi0vKiBGb3IgbGFyZ2UgbiwgdGhpcyBpcyBzbG93ZXIgdGhhbiB0aGUgTyhuIGxvZyBuKSB0aGF0IHRoZSBGRlQgbWV0aG9kCi0gKiB0YWtlcywgYnV0IHdlIGF2b2lkIHVzaW5nIGNvbXBsZXggbnVtYmVycywgYW5kIHdlIG9ubHkgaGF2ZSB0byBjb21wdXRlCi0gKiBvbmUgY29udm9sdXRpb24sIGFzIG9wcG9zZWQgdG8gMyBGRlRzLiAgV2UgaGF2ZSBnb29kIGxvY2FsaXR5LW9mLQotICogcmVmZXJlbmNlIGFzIHdlbGwsIHdoaWNoIHdpbGwgaGVscCBvbiBDUFVzIHdpdGggdGlueSBjYWNoZXMuICAqLwotCi0vKiBFLmcuLCBmb3IgYSA1MTIgeCA1MTIgY29udm9sdXRpb24sIHRoZSBGRlQgbWV0aG9kIHRha2VzIDU1ICogNTEyID0gMjgxNjAKLSAqIChyZWFsKSBtdWx0aXBsaWNhdGlvbnMsIGFzIG9wcG9zZWQgdG8gM145ID0gMTk2ODMgZm9yIHRoZSBLYXJhdHN1YmEKLSAqIGFsZ29yaXRobS4gIFdlIGFjdHVhbGx5IHdhbnQgMjU3IG91dHB1dHMgb2YgYSAyNTYgeCA1MTIgY29udm9sdXRpb247Ci0gKiB0aGF0IGRvZXNuJ3QgYXBwZWFyIHRvIGdpdmUgYW4gZWFzeSBhZHZhbnRhZ2UgZm9yIHRoZSBGRlQgYWxnb3JpdGhtLCBidXQKLSAqIGZvciB0aGUgS2FyYXRzdWJhIGFsZ29yaXRobSwgaXQncyBlYXN5IHRvIHVzZSB0d28gMjU2IHggMjU2Ci0gKiBjb252b2x1dGlvbnMsIHRha2luZyAyIHggM144ID0gMTIzMTIgbXVsdGlwbGljYXRpb25zLiAgW1RoaXMgZGlmZmVyZW5jZQotICogaXMgdGhhdCB0aGUgRkZUIG1ldGhvZCAid3JhcHMiIHRoZSBhcnJheXMsIGRvaW5nIGEgMl5uIHggMl5uIC0+IDJebiwKLSAqIHdoaWxlIHRoZSBLYXJhdHN1YmEgYWxnb3JpdGhtIHBhZHMgd2l0aCB6ZXJvcywgZG9pbmcgMl5uIHggMl5uIC0+IDIuMl5uCi0gKiAtIDFdLiAqLwotCi0vKiBUaGVyZSdzIGEgYmlnIGxpZSBhYm92ZSwgYWN0dWFsbHkuLi4gZm9yIGEgNHg0IGNvbnZvbHV0aW9uLCBpdCdzIHF1aWNrZXIKLSAqIHRvIGRvIGl0IHVzaW5nIDE2IG11bHRpcGxpY2F0aW9ucyB0aGFuIHRoZSBtb3JlIGNvbXBsZXggS2FyYXRzdWJhCi0gKiBhbGdvcml0aG0uLi4gIFNvIHRoZSByZWN1cnNpb24gYm90dG9tcyBvdXQgYXQgNHg0cy4gIFRoaXMgaW5jcmVhc2VzIHRoZQotICogbnVtYmVyIG9mIG11bHRpcGxpY2F0aW9ucyBieSBhIGZhY3RvciBvZiAxNi85LCBidXQgcmVkdWNlcyB0aGUgb3ZlcmhlYWRzCi0gKiBkcmFtYXRpY2FsbHkuICovCi0KLS8qIFRoZSBjb252b2x1dGlvbiBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgYXMgYSBzdGFjayBtYWNoaW5lLiAgV2UgaGF2ZSBhCi0gKiBzdGFjayBvZiBjb21tYW5kcywgZWFjaCBpbiBvbmUgb2YgdGhlIGZvcm1zICJkbyBhIDJebiB4IDJebgotICogY29udm9sdXRpb24iLCBvciAiY29tYmluZSB0aGVzZSB0aHJlZSBsZW5ndGggMl5uIG91dHB1dHMgaW50byBvbmUKLSAqIDJee24rMX0gb3V0cHV0LiIgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAiY29udm9sdmUuaCIKLQotdHlwZWRlZiB1bmlvbiBzdGFja19lbnRyeV9zCi17Ci0gIHN0cnVjdAotICB7Ci0gICAgY29uc3QgZG91YmxlICpsZWZ0LCAqcmlnaHQ7Ci0gICAgZG91YmxlICpvdXQ7Ci0gIH0KLSAgdjsKLSAgc3RydWN0Ci0gIHsKLSAgICBkb3VibGUgKm1haW4sICpudWxsOwotICB9Ci0gIGI7Ci0KLX0KLXN0YWNrX2VudHJ5OwotCi1zdHJ1Y3QgX3N0cnVjdF9jb252b2x2ZV9zdGF0ZQotewotICBpbnQgZGVwdGgsIHNtYWxsLCBiaWcsIHN0YWNrX3NpemU7Ci0gIGRvdWJsZSAqbGVmdDsKLSAgZG91YmxlICpyaWdodDsKLSAgZG91YmxlICpzY3JhdGNoOwotICBzdGFja19lbnRyeSAqc3RhY2s7Ci19OwotCi0vKgotICogSW5pdGlhbGlzYXRpb24gcm91dGluZSAtIHNldHMgdXAgdGFibGVzIGFuZCBzcGFjZSB0byB3b3JrIGluLgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gaW50ZXJuYWwgc3RhdGUsIHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIGNhbGxzLgotICogT24gZXJyb3IsIHJldHVybnMgTlVMTC4KLSAqIFRoZSBwb2ludGVyIHNob3VsZCBiZSBmcmVlZCB3aGVuIGl0IGlzIGZpbmlzaGVkIHdpdGgsIGJ5IGNvbnZvbHZlX2Nsb3NlKCkuCi0gKi8KLWNvbnZvbHZlX3N0YXRlICoKLWNvbnZvbHZlX2luaXQgKGludCBkZXB0aCkKLXsKLSAgY29udm9sdmVfc3RhdGUgKnN0YXRlOwotCi0gIHN0YXRlID0gbWFsbG9jIChzaXplb2YgKGNvbnZvbHZlX3N0YXRlKSk7Ci0gIHN0YXRlLT5kZXB0aCA9IGRlcHRoOwotICBzdGF0ZS0+c21hbGwgPSAoMSA8PCBkZXB0aCk7Ci0gIHN0YXRlLT5iaWcgPSAoMiA8PCBkZXB0aCk7Ci0gIHN0YXRlLT5zdGFja19zaXplID0gZGVwdGggKiAzOwotICBzdGF0ZS0+bGVmdCA9IGNhbGxvYyAoc3RhdGUtPmJpZywgc2l6ZW9mIChkb3VibGUpKTsKLSAgc3RhdGUtPnJpZ2h0ID0gY2FsbG9jIChzdGF0ZS0+c21hbGwgKiAzLCBzaXplb2YgKGRvdWJsZSkpOwotICBzdGF0ZS0+c2NyYXRjaCA9IGNhbGxvYyAoc3RhdGUtPnNtYWxsICogMywgc2l6ZW9mIChkb3VibGUpKTsKLSAgc3RhdGUtPnN0YWNrID0gY2FsbG9jIChzdGF0ZS0+c3RhY2tfc2l6ZSArIDEsIHNpemVvZiAoc3RhY2tfZW50cnkpKTsKLSAgcmV0dXJuIHN0YXRlOwotfQotCi0vKgotICogRnJlZSB0aGUgc3RhdGUgYWxsb2NhdGVkIHdpdGggY29udm9sdmVfaW5pdCgpLgotICovCi12b2lkCi1jb252b2x2ZV9jbG9zZSAoY29udm9sdmVfc3RhdGUgKiBzdGF0ZSkKLXsKLSAgZnJlZSAoc3RhdGUtPmxlZnQpOwotICBmcmVlIChzdGF0ZS0+cmlnaHQpOwotICBmcmVlIChzdGF0ZS0+c2NyYXRjaCk7Ci0gIGZyZWUgKHN0YXRlLT5zdGFjayk7Ci0gIGZyZWUgKHN0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbnZvbHZlXzQgKGRvdWJsZSAqb3V0LCBjb25zdCBkb3VibGUgKmxlZnQsIGNvbnN0IGRvdWJsZSAqcmlnaHQpCi0vKiBUaGlzIGRvZXMgYSA0eDQgLT4gNyBjb252b2x1dGlvbi4gIEZvciB3aGF0IGl0J3Mgd29ydGgsIHRoZSBzbGlnaHRseSBvZGQKLSAqIG9yZGVyaW5nIGdpdmVzIGFib3V0IGEgMSUgc3BlZWQgdXAgb24gbXkgUGVudGl1bSBJSS4gKi8KLXsKLSAgZG91YmxlIGwwLCBsMSwgbDIsIGwzLCByMCwgcjEsIHIyLCByMzsKLSAgZG91YmxlIGE7Ci0KLSAgbDAgPSBsZWZ0WzBdOwotICByMCA9IHJpZ2h0WzBdOwotICBhID0gbDAgKiByMDsKLSAgbDEgPSBsZWZ0WzFdOwotICByMSA9IHJpZ2h0WzFdOwotICBvdXRbMF0gPSBhOwotICBhID0gKGwwICogcjEpICsgKGwxICogcjApOwotICBsMiA9IGxlZnRbMl07Ci0gIHIyID0gcmlnaHRbMl07Ci0gIG91dFsxXSA9IGE7Ci0gIGEgPSAobDAgKiByMikgKyAobDEgKiByMSkgKyAobDIgKiByMCk7Ci0gIGwzID0gbGVmdFszXTsKLSAgcjMgPSByaWdodFszXTsKLSAgb3V0WzJdID0gYTsKLQotICBvdXRbM10gPSAobDAgKiByMykgKyAobDEgKiByMikgKyAobDIgKiByMSkgKyAobDMgKiByMCk7Ci0gIG91dFs0XSA9IChsMSAqIHIzKSArIChsMiAqIHIyKSArIChsMyAqIHIxKTsKLSAgb3V0WzVdID0gKGwyICogcjMpICsgKGwzICogcjIpOwotICBvdXRbNl0gPSBsMyAqIHIzOwotfQotCi1zdGF0aWMgdm9pZAotY29udm9sdmVfcnVuIChzdGFja19lbnRyeSAqIHRvcCwgdW5zaWduZWQgc2l6ZSwgZG91YmxlICpzY3JhdGNoKQotLyogSW50ZXJwcmV0IGEgc3RhY2sgb2YgY29tbWFuZHMuICBUaGUgc3RhY2sgc3RhcnRzIHdpdGggdHdvIGVudHJpZXM7IHRoZQotICogY29udm9sdXRpb24gdG8gZG8sIGFuZCBhbiBpbGxlZ2FsIGVudHJ5IHVzZWQgdG8gbWFyayB0aGUgc3RhY2sgdG9wLiAgVGhlCi0gKiBzaXplIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBlYWNoIGlucHV0LCBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIDIsCi0gKiBhbmQgYXQgbGVhc3QgOC4gIEl0IGlzIE9LIHRvIGhhdmUgb3V0IGVxdWFsIHRvIGxlZnQgYW5kL29yIHJpZ2h0LgotICogc2NyYXRjaCBtdXN0IGhhdmUgbGVuZ3RoIDMqc2l6ZS4gIFRoZSBudW1iZXIgb2Ygc3RhY2sgZW50cmllcyBuZWVkZWQgaXMKLSAqIDNuLTQgd2hlcmUgc2l6ZT0yXm4uICovCi17Ci0gIGRvIHsKLSAgICBjb25zdCBkb3VibGUgKmxlZnQ7Ci0gICAgY29uc3QgZG91YmxlICpyaWdodDsKLSAgICBkb3VibGUgKm91dDsKLQotICAgIC8qIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBzdGFjayB0b3AgaXMgYWx3YXlzIGEgY29udm9sdmUsCi0gICAgICogd2l0aCBzaXplID4gNC4gIFNvIHdlIHdpbGwgc3BsaXQgaXQuICBXZSByZXBlYXRlZGx5IHNwbGl0Ci0gICAgICogdGhlIHRvcCBlbnRyeSB1bnRpbCB3ZSBnZXQgdG8gc2l6ZSA9IDQuICovCi0KLSAgICBsZWZ0ID0gdG9wLT52LmxlZnQ7Ci0gICAgcmlnaHQgPSB0b3AtPnYucmlnaHQ7Ci0gICAgb3V0ID0gdG9wLT52Lm91dDsKLSAgICB0b3ArKzsKLQotICAgIGRvIHsKLSAgICAgIGRvdWJsZSAqc19sZWZ0LCAqc19yaWdodDsKLSAgICAgIGludCBpOwotCi0gICAgICAvKiBIYWx2ZSB0aGUgc2l6ZS4gKi8KLSAgICAgIHNpemUgPj49IDE7Ci0KLSAgICAgIC8qIEFsbG9jYXRlIHRoZSBzY3JhdGNoIGFyZWFzLiAqLwotICAgICAgc19sZWZ0ID0gc2NyYXRjaCArIHNpemUgKiAzOwotICAgICAgLyogc19yaWdodCBpcyBhIGxlbmd0aCAyKnNpemUgYnVmZmVyIGFsc28gdXNlZCBmb3IKLSAgICAgICAqIGludGVybWVkaWF0ZSBvdXRwdXQuICovCi0gICAgICBzX3JpZ2h0ID0gc2NyYXRjaCArIHNpemUgKiA0OwotCi0gICAgICAvKiBDcmVhdGUgdGhlIGludGVybWVkaWF0ZSBmYWN0b3JzLiAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBkb3VibGUgbCA9IGxlZnRbaV0gKyBsZWZ0W2kgKyBzaXplXTsKLSAgICAgICAgZG91YmxlIHIgPSByaWdodFtpXSArIHJpZ2h0W2kgKyBzaXplXTsKLQotICAgICAgICBzX2xlZnRbaSArIHNpemVdID0gcjsKLSAgICAgICAgc19sZWZ0W2ldID0gbDsKLSAgICAgIH0KLQotICAgICAgLyogUHVzaCB0aGUgY29tYmluZSBlbnRyeSBvbnRvIHRoZSBzdGFjay4gKi8KLSAgICAgIHRvcCAtPSAzOwotICAgICAgdG9wWzJdLmIubWFpbiA9IG91dDsKLSAgICAgIHRvcFsyXS5iLm51bGwgPSBOVUxMOwotCi0gICAgICAvKiBQdXNoIHRoZSBsb3cgZW50cnkgb250byB0aGUgc3RhY2suICBUaGlzIG11c3QgYmUKLSAgICAgICAqIHRoZSBsYXN0IG9mIHRoZSB0aHJlZSBzdWItY29udm9sdXRpb25zLCBiZWNhdXNlCi0gICAgICAgKiBpdCBtYXkgb3ZlcndyaXRlIHRoZSBhcmd1bWVudHMuICovCi0gICAgICB0b3BbMV0udi5sZWZ0ID0gbGVmdDsKLSAgICAgIHRvcFsxXS52LnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICB0b3BbMV0udi5vdXQgPSBvdXQ7Ci0KLSAgICAgIC8qIFB1c2ggdGhlIG1pZCBlbnRyeSBvbnRvIHRoZSBzdGFjay4gKi8KLSAgICAgIHRvcFswXS52LmxlZnQgPSBzX2xlZnQ7Ci0gICAgICB0b3BbMF0udi5yaWdodCA9IHNfcmlnaHQ7Ci0gICAgICB0b3BbMF0udi5vdXQgPSBzX3JpZ2h0OwotCi0gICAgICAvKiBMZWF2ZSB0aGUgaGlnaCBlbnRyeSBpbiB2YXJpYWJsZXMuICovCi0gICAgICBsZWZ0ICs9IHNpemU7Ci0gICAgICByaWdodCArPSBzaXplOwotICAgICAgb3V0ICs9IHNpemUgKiAyOwotCi0gICAgfSB3aGlsZSAoc2l6ZSA+IDQpOwotCi0gICAgLyogV2hlbiB3ZSBnZXQgaGVyZSwgdGhlIHN0YWNrIHRvcCBpcyBhIGdyb3VwIG9mIDMKLSAgICAgKiBjb252b2x2ZXMsIHdpdGggc2l6ZSA9IDQsIGZvbGxvd2VkIGJ5IHNvbWUgY29tYmluZXMuICAqLwotICAgIGNvbnZvbHZlXzQgKG91dCwgbGVmdCwgcmlnaHQpOwotICAgIGNvbnZvbHZlXzQgKHRvcFswXS52Lm91dCwgdG9wWzBdLnYubGVmdCwgdG9wWzBdLnYucmlnaHQpOwotICAgIGNvbnZvbHZlXzQgKHRvcFsxXS52Lm91dCwgdG9wWzFdLnYubGVmdCwgdG9wWzFdLnYucmlnaHQpOwotICAgIHRvcCArPSAyOwotCi0gICAgLyogTm93IHByb2Nlc3MgY29tYmluZXMuICovCi0gICAgZG8gewotICAgICAgLyogYi5tYWluIGlzIHRoZSBvdXRwdXQgYnVmZmVyLCBtaWQgaXMgdGhlIG1pZGRsZQotICAgICAgICogcGFydCB3aGljaCBuZWVkcyB0byBiZSBhZGp1c3RlZCBpbiBwbGFjZSwgYW5kCi0gICAgICAgKiB0aGVuIGZvbGRlZCBiYWNrIGludG8gdGhlIG91dHB1dC4gIFdlIGRvIHRoaXMgaW4KLSAgICAgICAqIGEgc2xpZ2h0bHkgc3RyYW5nZSB3YXksIHNvIGFzIHRvIGF2b2lkIGhhdmluZwotICAgICAgICogdHdvIGxvb3BzLiAqLwotICAgICAgZG91YmxlICpvdXQgPSB0b3AtPmIubWFpbjsKLSAgICAgIGRvdWJsZSAqbWlkID0gc2NyYXRjaCArIHNpemUgKiA0OwotICAgICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICAgIHRvcCsrOwotICAgICAgb3V0W3NpemUgKiAyIC0gMV0gPSAwOwotICAgICAgZm9yIChpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspIHsKLSAgICAgICAgZG91YmxlIGxvOwotICAgICAgICBkb3VibGUgaGk7Ci0KLSAgICAgICAgbG8gPSBtaWRbMF0gLSAob3V0WzBdICsgb3V0WzIgKiBzaXplXSkgKyBvdXRbc2l6ZV07Ci0gICAgICAgIGhpID0gbWlkW3NpemVdIC0gKG91dFtzaXplXSArIG91dFszICogc2l6ZV0pICsgb3V0WzIgKiBzaXplXTsKLSAgICAgICAgb3V0W3NpemVdID0gbG87Ci0gICAgICAgIG91dFsyICogc2l6ZV0gPSBoaTsKLSAgICAgICAgb3V0Kys7Ci0gICAgICAgIG1pZCsrOwotICAgICAgfQotICAgICAgc2l6ZSA8PD0gMTsKLSAgICB9IHdoaWxlICh0b3AtPmIubnVsbCA9PSBOVUxMKTsKLSAgfSB3aGlsZSAodG9wLT5iLm1haW4gIT0gTlVMTCk7Ci19Ci0KLS8qCi0gKiBjb252b2x2ZV9tYXRjaDoKLSAqIEBsYXN0Y2hvaWNlOiBhbiBhcnJheSBvZiBzaXplIFNNQUxMLgotICogQGlucHV0OiBhbiBhcnJheSBvZiBzaXplIEJJRyAoMipTTUFMTCkKLSAqIEBzdGF0ZTogYSAobm9uLU5VTEwpIHBvaW50ZXIgcmV0dXJuZWQgYnkgY29udm9sdmVfaW5pdC4KLSAqCi0gKiBXZSBmaW5kIHRoZSBjb250aWd1b3VzIFNNQUxMLXNpemUgc3ViLWFycmF5IG9mIGlucHV0IHRoYXQgYmVzdCBtYXRjaGVzCi0gKiBsYXN0Y2hvaWNlLiBBIG1lYXN1cmUgb2YgaG93IGdvb2QgYSBzdWItYXJyYXkgaXMgY29tcGFyZWQgd2l0aCB0aGUgbGFzdGNob2ljZQotICogaXMgZ2l2ZW4gYnkgdGhlIHN1bSBvZiB0aGUgcHJvZHVjdHMgb2YgZWFjaCBwYWlyIG9mIGVudHJpZXMuICBXZSBtYXhpbWlzZQotICogdGhhdCwgYnkgdGFraW5nIGFuIGFwcHJvcHJpYXRlIGNvbnZvbHV0aW9uLCBhbmQgdGhlbiBmaW5kaW5nIHRoZSBtYXhpbXVtCi0gKiBlbnRyeSBpbiB0aGUgY29udm9sdXRpb25zLgotICoKLSAqIFJldHVybjogdGhlIHBvc2l0aW9uIG9mIHRoZSBiZXN0IG1hdGNoCi0gKi8KLWludAotY29udm9sdmVfbWF0Y2ggKGNvbnN0IGludCAqbGFzdGNob2ljZSwgY29uc3Qgc2hvcnQgKmlucHV0LAotICAgIGNvbnZvbHZlX3N0YXRlICogc3RhdGUpCi17Ci0gIGRvdWJsZSBhdmcgPSAwOwotICBkb3VibGUgYmVzdDsKLSAgaW50IHAgPSAwOwotICBpbnQgaTsKLSAgZG91YmxlICpsZWZ0ID0gc3RhdGUtPmxlZnQ7Ci0gIGRvdWJsZSAqcmlnaHQgPSBzdGF0ZS0+cmlnaHQ7Ci0gIGRvdWJsZSAqc2NyYXRjaCA9IHN0YXRlLT5zY3JhdGNoOwotICBzdGFja19lbnRyeSAqdG9wID0gc3RhdGUtPnN0YWNrICsgKHN0YXRlLT5zdGFja19zaXplIC0gMSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5iaWc7IGkrKykKLSAgICBsZWZ0W2ldID0gaW5wdXRbaV07Ci0KLSAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5zbWFsbDsgaSsrKSB7Ci0gICAgZG91YmxlIGEgPSBsYXN0Y2hvaWNlWyhzdGF0ZS0+c21hbGwgLSAxKSAtIGldOwotCi0gICAgcmlnaHRbaV0gPSBhOwotICAgIGF2ZyArPSBhOwotICB9Ci0KLSAgLyogV2UgYWRqdXN0IHRoZSBzbWFsbGVyIG9mIHRoZSB0d28gaW5wdXQgYXJyYXlzIHRvIGhhdmUgYXZlcmFnZQotICAgKiB2YWx1ZSAwLiAgVGhpcyBtYWtlcyB0aGUgZXZlbnR1YWwgcmVzdWx0IGluc2Vuc2l0aXZlIHRvIGJvdGgKLSAgICogY29uc3RhbnQgb2Zmc2V0cyBhbmQgcG9zaXRpdmUgbXVsdGlwbGllcnMgb2YgdGhlIGlucHV0cy4gKi8KLSAgYXZnIC89IHN0YXRlLT5zbWFsbDsKLSAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5zbWFsbDsgaSsrKQotICAgIHJpZ2h0W2ldIC09IGF2ZzsKLSAgLyogRW5kLW9mLXN0YWNrIG1hcmtlci4gKi8KLSAgdG9wWzFdLmIubnVsbCA9IHNjcmF0Y2g7Ci0gIHRvcFsxXS5iLm1haW4gPSBOVUxMOwotICAvKiBUaGUgbG93IChzbWFsbCB4IHNtYWxsKSBwYXJ0LCBvZiB3aGljaCB3ZSB3YW50IHRoZSBoaWdoIG91dHB1dHMuICovCi0gIHRvcC0+di5sZWZ0ID0gbGVmdDsKLSAgdG9wLT52LnJpZ2h0ID0gcmlnaHQ7Ci0gIHRvcC0+di5vdXQgPSByaWdodCArIHN0YXRlLT5zbWFsbDsKLSAgY29udm9sdmVfcnVuICh0b3AsIHN0YXRlLT5zbWFsbCwgc2NyYXRjaCk7Ci0KLSAgLyogVGhlIGhpZ2ggKHNtYWxsIHggc21hbGwpIHBhcnQsIG9mIHdoaWNoIHdlIHdhbnQgdGhlIGxvdyBvdXRwdXRzLiAqLwotICB0b3AtPnYubGVmdCA9IGxlZnQgKyBzdGF0ZS0+c21hbGw7Ci0gIHRvcC0+di5yaWdodCA9IHJpZ2h0OwotICB0b3AtPnYub3V0ID0gcmlnaHQ7Ci0gIGNvbnZvbHZlX3J1biAodG9wLCBzdGF0ZS0+c21hbGwsIHNjcmF0Y2gpOwotCi0gIC8qIE5vdyBmaW5kIHRoZSBiZXN0IHBvc2l0aW9uIGFtb3VuZ3MgdGhpcy4gIEFwYXJ0IGZyb20gdGhlIGZpcnN0Ci0gICAqIGFuZCBsYXN0LCB0aGUgcmVxdWlyZWQgY29udm9sdXRpb24gb3V0cHV0cyBhcmUgZm9ybWVkIGJ5IGFkZGluZwotICAgKiBvdXRwdXRzIGZyb20gdGhlIHR3byBjb252b2x1dGlvbnMgYWJvdmUuICovCi0gIGJlc3QgPSByaWdodFtzdGF0ZS0+YmlnIC0gMV07Ci0gIHJpZ2h0W3N0YXRlLT5iaWcgKyBzdGF0ZS0+c21hbGwgLSAxXSA9IDA7Ci0gIHAgPSAtMTsKLSAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5zbWFsbDsgaSsrKSB7Ci0gICAgZG91YmxlIGEgPSByaWdodFtpXSArIHJpZ2h0W2kgKyBzdGF0ZS0+YmlnXTsKLQotICAgIGlmIChhID4gYmVzdCkgewotICAgICAgYmVzdCA9IGE7Ci0gICAgICBwID0gaTsKLSAgICB9Ci0gIH0KLSAgcCsrOwotCi0jaWYgMAotICB7Ci0gICAgLyogVGhpcyBpcyBzb21lIGRlYnVnZ2luZyBjb2RlLi4uICovCi0gICAgYmVzdCA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5zbWFsbDsgaSsrKQotICAgICAgYmVzdCArPSAoKGRvdWJsZSkgaW5wdXRbaSArIHBdKSAqICgoZG91YmxlKSBsYXN0Y2hvaWNlW2ldIC0gYXZnKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPD0gc3RhdGUtPnNtYWxsOyBpKyspIHsKLSAgICAgIGRvdWJsZSB0b3QgPSAwOwotICAgICAgdW5zaWduZWQgaW50IGo7Ci0KLSAgICAgIGZvciAoaiA9IDA7IGogPCBzdGF0ZS0+c21hbGw7IGorKykKLSAgICAgICAgdG90ICs9ICgoZG91YmxlKSBpbnB1dFtpICsgal0pICogKChkb3VibGUpIGxhc3RjaG9pY2Vbal0gLSBhdmcpOwotICAgICAgaWYgKHRvdCA+IGJlc3QpCi0gICAgICAgIHByaW50ZiAoIiglaSkiLCBpKTsKLSAgICAgIGlmICh0b3QgIT0gbGVmdFtpICsgKHN0YXRlLT5zbWFsbCAtIDEpXSkKLSAgICAgICAgcHJpbnRmICgiISIpOwotICAgIH0KLQotICAgIHByaW50ZiAoIiVpXG4iLCBwKTsKLSAgfQotI2VuZGlmCi0KLSAgcmV0dXJuIHA7Ci19CmRpZmYgLS1naXQgYS9nc3QvbW9ub3Njb3BlL2NvbnZvbHZlLmggYi9nc3QvbW9ub3Njb3BlL2NvbnZvbHZlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YTdmMDUuLjAwMDAwMDAKLS0tIGEvZ3N0L21vbm9zY29wZS9jb252b2x2ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyogY29udm9sdmUuaDogSGVhZGVyIGZvciBjb252b2x1dGlvbnMuCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5OSBSYWxwaCBMb2FkZXIgPHN1Y2tmaXNoQGlodWcuY28ubno+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICoKLSAqIE5vdGU6IDd0aCBEZWNlbWJlciAyMDA0OiBUaGlzIGZpbGUgdXNlZCB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLAotICogICAgICAgYnV0IHdlIGdvdCBwZXJtaXNzaW9uIGZyb20gUmFscCBMb2FkZXIgdG8gcmVsaWNlbnNlIGl0IHRvIExHUEwuCi0gKgotICoKLSAqLwotCi0jaWZuZGVmIENPTlZPTFZFX0gKLSNkZWZpbmUgQ09OVk9MVkVfSAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIENvbnZvbHV0aW9uIHN0YXRlICovCi10eXBlZGVmIHN0cnVjdCBfc3RydWN0X2NvbnZvbHZlX3N0YXRlIGNvbnZvbHZlX3N0YXRlOwotCi1jb252b2x2ZV9zdGF0ZSAqY29udm9sdmVfaW5pdCAoaW50IGRlcHRoKTsKLXZvaWQgY29udm9sdmVfY2xvc2UgKGNvbnZvbHZlX3N0YXRlICogc3RhdGUpOwotCi1pbnQgY29udm9sdmVfbWF0Y2ggKGNvbnN0IGludCAqIGxhc3RjaG9pY2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0IGludCAqIGlucHV0LAotICAgICAgICAgICAgICAgICAgICBjb252b2x2ZV9zdGF0ZSAqIHN0YXRlKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jIGIvZ3N0L21vbm9zY29wZS9nc3Rtb25vc2NvcGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U3MDI1Ni4uMDAwMDAwMAotLS0gYS9nc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTc1ICswLDAgQEAKLS8qIGdzdG1vbm9zY29wZS5jOiBpbXBsZW1lbnRhdGlvbiBvZiBtb25vc2NvcGUgZHJhd2luZyBlbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAyPiBSaWNoYXJkIEJvdWx0b24gPHJpY2hhcmRAdGFydGFydXMub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0gYXQgZmx1ZW5kbyBkb3QgY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW1vbm9zY29wZQotICogQHNlZV9hbHNvOiBnb29tCi0gKgotICogTW9ub3Njb3BlIGlzIGFuIGF1ZGlvIHZpc3VhbGlzYXRpb24gZWxlbWVudC4gSXQgY3JlYXRlcyBhIGNvbG91cmVkCi0gKiBjdXJ2ZSBvZiB0aGUgYXVkaW8gc2lnbmFsIGxpa2Ugb24gYW4gb3NjaWxsb3Njb3BlLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBhdWRpb3Rlc3RzcmMgISBhdWRpb2NvbnZlcnQgISBtb25vc2NvcGUgISB2aWRlb2NvbnZlcnQgISB4aW1hZ2VzaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3Rtb25vc2NvcGUuaCIKLSNpbmNsdWRlICJtb25vc2NvcGUuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAobW9ub3Njb3BlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG1vbm9zY29wZV9kZWJ1ZwotCi0jaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotI2RlZmluZSBSR0JfT1JERVIgInhSR0IiCi0jZWxzZQotI2RlZmluZSBSR0JfT1JERVIgIkJHUngiCi0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBSR0JfT1JERVIgIiwgIgotICAgICAgICAid2lkdGggPSAiIEdfU1RSSU5HSUZZIChzY29wZV93aWR0aCkgIiwgIgotICAgICAgICAiaGVpZ2h0ID0gIiBHX1NUUklOR0lGWSAoc2NvcGVfaGVpZ2h0KSAiLCAiCi0gICAgICAgICJmcmFtZXJhdGUgPSAiIEdTVF9WSURFT19GUFNfUkFOR0UpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikgIiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgODAwMCwgOTYwMDAgXSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCIpCi0gICAgKTsKLQotCi0jZGVmaW5lIGdzdF9tb25vc2NvcGVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TW9ub3Njb3BlLCBnc3RfbW9ub3Njb3BlLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQgZ3N0X21vbm9zY29wZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbW9ub3Njb3BlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9tb25vc2NvcGVfc3JjX3NldGNhcHMgKEdzdE1vbm9zY29wZSAqIG1vbm8sIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbW9ub3Njb3BlX3Npbmtfc2V0Y2FwcyAoR3N0TW9ub3Njb3BlICogbW9ubywKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfbW9ub3Njb3BlX3Jlc2V0IChHc3RNb25vc2NvcGUgKiBtb25vc2NvcGUpOwotc3RhdGljIGdib29sZWFuIGdzdF9tb25vc2NvcGVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X21vbm9zY29wZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9tb25vc2NvcGVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQKLWdzdF9tb25vc2NvcGVfY2xhc3NfaW5pdCAoR3N0TW9ub3Njb3BlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X21vbm9zY29wZV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tb25vc2NvcGVfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJNb25vc2NvcGUiLAotICAgICAgIlZpc3VhbGl6YXRpb24iLAotICAgICAgIkRpc3BsYXlzIGEgaGlnaGx5IHN0YWJpbGlzZWQgd2F2ZWZvcm0gb2YgYXVkaW8gaW5wdXQiLAotICAgICAgIlJpY2hhcmQgQm91bHRvbiA8cmljaGFyZEB0YXJ0YXJ1cy5vcmc+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbW9ub3Njb3BlX2luaXQgKEdzdE1vbm9zY29wZSAqIG1vbm9zY29wZSkKLXsKLSAgbW9ub3Njb3BlLT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG1vbm9zY29wZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbW9ub3Njb3BlX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChtb25vc2NvcGUtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X21vbm9zY29wZV9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChtb25vc2NvcGUpLCBtb25vc2NvcGUtPnNpbmtwYWQpOwotCi0gIG1vbm9zY29wZS0+c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmNfdGVtcGxhdGUsICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG1vbm9zY29wZS0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tb25vc2NvcGVfc3JjX2V2ZW50KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChtb25vc2NvcGUpLCBtb25vc2NvcGUtPnNyY3BhZCk7Ci0KLSAgbW9ub3Njb3BlLT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBtb25vc2NvcGUtPm5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBtb25vc2NvcGUtPmJwcyA9IHNpemVvZiAoZ2ludDE2KTsKLQotICAvKiByZXNldCB0aGUgaW5pdGlhbCB2aWRlbyBzdGF0ZSAqLwotICBtb25vc2NvcGUtPndpZHRoID0gc2NvcGVfd2lkdGg7Ci0gIG1vbm9zY29wZS0+aGVpZ2h0ID0gc2NvcGVfaGVpZ2h0OwotICBtb25vc2NvcGUtPmZwc19udW0gPSAyNTsgICAgICAvKiBkZXNpcmVkIGZyYW1lIHJhdGUgKi8KLSAgbW9ub3Njb3BlLT5mcHNfZGVub20gPSAxOwotICBtb25vc2NvcGUtPnZpc3N0YXRlID0gTlVMTDsKLQotICAvKiByZXNldCB0aGUgaW5pdGlhbCBhdWRpbyBzdGF0ZSAqLwotICBtb25vc2NvcGUtPnJhdGUgPSBHU1RfQVVESU9fREVGX1JBVEU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbW9ub3Njb3BlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RNb25vc2NvcGUgKm1vbm9zY29wZSA9IEdTVF9NT05PU0NPUEUgKG9iamVjdCk7Ci0KLSAgaWYgKG1vbm9zY29wZS0+dmlzc3RhdGUpCi0gICAgbW9ub3Njb3BlX2Nsb3NlIChtb25vc2NvcGUtPnZpc3N0YXRlKTsKLQotICBnX29iamVjdF91bnJlZiAobW9ub3Njb3BlLT5hZGFwdGVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbW9ub3Njb3BlX3Jlc2V0IChHc3RNb25vc2NvcGUgKiBtb25vc2NvcGUpCi17Ci0gIG1vbm9zY29wZS0+bmV4dF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKG1vbm9zY29wZS0+YWRhcHRlcik7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZtb25vc2NvcGUtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG1vbm9zY29wZSk7Ci0gIG1vbm9zY29wZS0+cHJvcG9ydGlvbiA9IDEuMDsKLSAgbW9ub3Njb3BlLT5lYXJsaWVzdF90aW1lID0gLTE7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtb25vc2NvcGUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tb25vc2NvcGVfc2lua19zZXRjYXBzIChHc3RNb25vc2NvcGUgKiBtb25vc2NvcGUsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInJhdGUiLCAmbW9ub3Njb3BlLT5yYXRlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtb25vc2NvcGUsICJzYW1wbGUgcmF0ZSA9ICVkIiwgbW9ub3Njb3BlLT5yYXRlKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21vbm9zY29wZV9zcmNfc2V0Y2FwcyAoR3N0TW9ub3Njb3BlICogbW9ub3Njb3BlLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdib29sZWFuIHJlczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJm1vbm9zY29wZS0+d2lkdGgpOwotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImhlaWdodCIsICZtb25vc2NvcGUtPmhlaWdodCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAmbW9ub3Njb3BlLT5mcHNfbnVtLAotICAgICAgJm1vbm9zY29wZS0+ZnBzX2Rlbm9tKTsKLQotICBtb25vc2NvcGUtPm91dHNpemUgPSBtb25vc2NvcGUtPndpZHRoICogbW9ub3Njb3BlLT5oZWlnaHQgKiA0OwotICBtb25vc2NvcGUtPmZyYW1lX2R1cmF0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwKLSAgICAgIG1vbm9zY29wZS0+ZnBzX2Rlbm9tLCBtb25vc2NvcGUtPmZwc19udW0pOwotICBtb25vc2NvcGUtPnNwZiA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChtb25vc2NvcGUtPnJhdGUsIG1vbm9zY29wZS0+ZnBzX2Rlbm9tLAotICAgICAgbW9ub3Njb3BlLT5mcHNfbnVtKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtb25vc2NvcGUsICJkaW1lbnNpb24gJWR4JWQsIGZyYW1lcmF0ZSAlZC8lZCwgc3BmICVkIiwKLSAgICAgIG1vbm9zY29wZS0+d2lkdGgsIG1vbm9zY29wZS0+aGVpZ2h0LCBtb25vc2NvcGUtPmZwc19udW0sCi0gICAgICBtb25vc2NvcGUtPmZwc19kZW5vbSwgbW9ub3Njb3BlLT5zcGYpOwotCi0gIGlmIChtb25vc2NvcGUtPnZpc3N0YXRlKSB7Ci0gICAgbW9ub3Njb3BlX2Nsb3NlIChtb25vc2NvcGUtPnZpc3N0YXRlKTsKLSAgICBtb25vc2NvcGUtPnZpc3N0YXRlID0gTlVMTDsKLSAgfQotCi0gIG1vbm9zY29wZS0+dmlzc3RhdGUgPSBtb25vc2NvcGVfaW5pdCAobW9ub3Njb3BlLT53aWR0aCwgbW9ub3Njb3BlLT5oZWlnaHQpOwotCi0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKG1vbm9zY29wZS0+c3JjcGFkLCBjYXBzKTsKLQotICByZXR1cm4gcmVzICYmIChtb25vc2NvcGUtPnZpc3N0YXRlICE9IE5VTEwpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tb25vc2NvcGVfc3JjX25lZ290aWF0ZSAoR3N0TW9ub3Njb3BlICogbW9ub3Njb3BlKQotewotICBHc3RDYXBzICpvdGhlcmNhcHMsICp0YXJnZXQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RDYXBzICp0ZW1wbDsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLSAgZ3VpbnQgc2l6ZSwgbWluLCBtYXg7Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAobW9ub3Njb3BlLT5zcmNwYWQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG1vbm9zY29wZSwgInBlcmZvcm1pbmcgbmVnb3RpYXRpb24iKTsKLQotICAvKiBzZWUgd2hhdCB0aGUgcGVlciBjYW4gZG8gKi8KLSAgb3RoZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKG1vbm9zY29wZS0+c3JjcGFkLCBOVUxMKTsKLSAgaWYgKG90aGVyY2FwcykgewotICAgIHRhcmdldCA9IGdzdF9jYXBzX2ludGVyc2VjdCAob3RoZXJjYXBzLCB0ZW1wbCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKG90aGVyY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsKTsKLQotICAgIGlmIChnc3RfY2Fwc19pc19lbXB0eSAodGFyZ2V0KSkKLSAgICAgIGdvdG8gbm9fZm9ybWF0OwotCi0gICAgdGFyZ2V0ID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKHRhcmdldCk7Ci0gIH0gZWxzZSB7Ci0gICAgdGFyZ2V0ID0gdGVtcGw7Ci0gIH0KLQotICB0YXJnZXQgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlICh0YXJnZXQpOwotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlICh0YXJnZXQsIDApOwotICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAoc3RydWN0dXJlLCAid2lkdGgiLCAzMjApOwotICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAoc3RydWN0dXJlLCAiaGVpZ2h0IiwgMjQwKTsKLSAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoc3RydWN0dXJlLCAiZnJhbWVyYXRlIiwgMjUsIDEpOwotCi0gIGdzdF9tb25vc2NvcGVfc3JjX3NldGNhcHMgKG1vbm9zY29wZSwgdGFyZ2V0KTsKLQotICAvKiB0cnkgdG8gZ2V0IGEgYnVmZmVycG9vbCBub3cgKi8KLSAgLyogZmluZCBhIHBvb2wgZm9yIHRoZSBuZWdvdGlhdGVkIGNhcHMgbm93ICovCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19hbGxvY2F0aW9uICh0YXJnZXQsIFRSVUUpOwotCi0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChtb25vc2NvcGUtPnNyY3BhZCwgcXVlcnkpKSB7Ci0gIH0KLQotICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KSA+IDApIHsKLSAgICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyLCBwYXJzZSB0aGVtICovCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCAmcG9vbCwgJnNpemUsICZtaW4sICZtYXgpOwotICB9IGVsc2UgewotICAgIHBvb2wgPSBOVUxMOwotICAgIHNpemUgPSBtb25vc2NvcGUtPm91dHNpemU7Ci0gICAgbWluID0gbWF4ID0gMDsKLSAgfQotCi0gIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAvKiB3ZSBkaWQgbm90IGdldCBhIHBvb2wsIG1ha2Ugb25lIG91cnNlbHZlcyB0aGVuICovCi0gICAgcG9vbCA9IGdzdF9idWZmZXJfcG9vbF9uZXcgKCk7Ci0gIH0KLQotICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCB0YXJnZXQsIHNpemUsIG1pbiwgbWF4KTsKLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZyk7Ci0KLSAgaWYgKG1vbm9zY29wZS0+cG9vbCkgewotICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChtb25vc2NvcGUtPnBvb2wsIFRSVUUpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG1vbm9zY29wZS0+cG9vbCk7Ci0gIH0KLSAgbW9ub3Njb3BlLT5wb29sID0gcG9vbDsKLQotICAvKiBhbmQgYWN0aXZhdGUgKi8KLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpOwotCi0gIGdzdF9jYXBzX3VucmVmICh0YXJnZXQpOwotCi0gIHJldHVybiBUUlVFOwotCi1ub19mb3JtYXQ6Ci0gIHsKLSAgICBnc3RfY2Fwc191bnJlZiAodGFyZ2V0KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogbWFrZSBzdXJlIHdlIGFyZSBuZWdvdGlhdGVkICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZW5zdXJlX25lZ290aWF0ZWQgKEdzdE1vbm9zY29wZSAqIG1vbm9zY29wZSkKLXsKLSAgZ2Jvb2xlYW4gcmVjb25maWd1cmU7Ci0KLSAgcmVjb25maWd1cmUgPSBnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlIChtb25vc2NvcGUtPnNyY3BhZCk7Ci0KLSAgLyogd2UgZG9uJ3Qga25vdyBhbiBvdXRwdXQgZm9ybWF0IHlldCwgcGljayBvbmUgKi8KLSAgaWYgKHJlY29uZmlndXJlIHx8ICFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKG1vbm9zY29wZS0+c3JjcGFkKSkgewotICAgIGlmICghZ3N0X21vbm9zY29wZV9zcmNfbmVnb3RpYXRlIChtb25vc2NvcGUpKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tb25vc2NvcGVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBpbmJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiBmbG93X3JldCA9IEdTVF9GTE9XX09LOwotICBHc3RNb25vc2NvcGUgKm1vbm9zY29wZTsKLQotICBtb25vc2NvcGUgPSBHU1RfTU9OT1NDT1BFIChwYXJlbnQpOwotCi0gIGlmIChtb25vc2NvcGUtPnJhdGUgPT0gMCkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGluYnVmKTsKLSAgICBmbG93X3JldCA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgIGdvdG8gb3V0OwotICB9Ci0KLSAgLyogTWFrZSBzdXJlIGhhdmUgYW4gb3V0cHV0IGZvcm1hdCAqLwotICBmbG93X3JldCA9IGVuc3VyZV9uZWdvdGlhdGVkIChtb25vc2NvcGUpOwotICBpZiAoZmxvd19yZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLQotICAvKiBkb24ndCB0cnkgdG8gY29tYmluZSBzYW1wbGVzIGZyb20gZGlzY29udCBidWZmZXIgKi8KLSAgaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGluYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpIHsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAobW9ub3Njb3BlLT5hZGFwdGVyKTsKLSAgICBtb25vc2NvcGUtPm5leHRfdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci0KLSAgLyogTWF0Y2ggdGltZXN0YW1wcyBmcm9tIHRoZSBpbmNvbWluZyBhdWRpbyAqLwotICBpZiAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIG1vbm9zY29wZS0+bmV4dF90cyA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1Zik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG1vbm9zY29wZSwKLSAgICAgICJpbiBidWZmZXIgaGFzICUiIEdfR1NJWkVfRk9STUFUICIgc2FtcGxlcywgdHM9JSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWYpIC8gbW9ub3Njb3BlLT5icHMsCi0gICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWYpKSk7Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAobW9ub3Njb3BlLT5hZGFwdGVyLCBpbmJ1Zik7Ci0gIGluYnVmID0gTlVMTDsKLQotICAvKiBDb2xsZWN0IHNhbXBsZXMgdW50aWwgd2UgaGF2ZSBlbm91Z2ggZm9yIGFuIG91dHB1dCBmcmFtZSAqLwotICB3aGlsZSAoZmxvd19yZXQgPT0gR1NUX0ZMT1dfT0spIHsKLSAgICBnaW50MTYgKnNhbXBsZXM7Ci0gICAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICAgIGd1aW50MzIgKnBpeGVscywgYXZhaWwsIGJ5dGVzcGVyZnJhbWU7Ci0KLSAgICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAobW9ub3Njb3BlLT5hZGFwdGVyKTsKLSAgICBHU1RfTE9HX09CSkVDVCAobW9ub3Njb3BlLCAiYnl0ZXMgYXZhaWwgbm93ICV1IiwgYXZhaWwpOwotCi0gICAgYnl0ZXNwZXJmcmFtZSA9IG1vbm9zY29wZS0+c3BmICogbW9ub3Njb3BlLT5icHM7Ci0gICAgaWYgKGF2YWlsIDwgYnl0ZXNwZXJmcmFtZSkKLSAgICAgIGJyZWFrOwotCi0gICAgLyogRklYTUU6IHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIFFvUywgd2UgYXJlIHNraXBwaW5nIHdheSB0b28gbXVjaAotICAgICAqIHN0dWZmIGV2ZW4gd2l0aCB2ZXJ5IGxvdyBDUFUgbG9hZHMgKi8KLSNpZiAwCi0gICAgaWYgKG1vbm9zY29wZS0+bmV4dF90cyAhPSAtMSkgewotICAgICAgZ2Jvb2xlYW4gbmVlZF9za2lwOwotICAgICAgZ2ludDY0IHFvc3RpbWU7Ci0KLSAgICAgIHFvc3RpbWUgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZtb25vc2NvcGUtPnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBtb25vc2NvcGUtPm5leHRfdHMpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG1vbm9zY29wZSk7Ci0gICAgICAvKiBjaGVjayBmb3IgUW9TLCBkb24ndCBjb21wdXRlIGJ1ZmZlcnMgdGhhdCBhcmUga25vd24gdG8gYmUgbGF0ZSAqLwotICAgICAgbmVlZF9za2lwID0KLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobW9ub3Njb3BlLT5lYXJsaWVzdF90aW1lKSAmJgotICAgICAgICAgIHFvc3RpbWUgPD0gbW9ub3Njb3BlLT5lYXJsaWVzdF90aW1lOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbm9zY29wZSk7Ci0KLSAgICAgIGlmIChuZWVkX3NraXApIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtb25vc2NvcGUsCi0gICAgICAgICAgICAiUW9TOiBza2lwIHRzOiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZWFybGllc3Q6ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHFvc3RpbWUpLCBHU1RfVElNRV9BUkdTIChtb25vc2NvcGUtPmVhcmxpZXN0X3RpbWUpKTsKLSAgICAgICAgZ290byBza2lwOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgc2FtcGxlcyA9IChnaW50MTYgKikgZ3N0X2FkYXB0ZXJfbWFwIChtb25vc2NvcGUtPmFkYXB0ZXIsIGJ5dGVzcGVyZnJhbWUpOwotCi0gICAgaWYgKG1vbm9zY29wZS0+c3BmIDwgY29udm9sdmVyX2JpZykgewotICAgICAgZ2ludDE2IGluX2RhdGFbY29udm9sdmVyX2JpZ10sIGk7Ci0gICAgICBnZG91YmxlIHNjYWxlID0gKGdkb3VibGUpIG1vbm9zY29wZS0+c3BmIC8gKGdkb3VibGUpIGNvbnZvbHZlcl9iaWc7Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBjb252b2x2ZXJfYmlnOyArK2kpIHsKLSAgICAgICAgZ2RvdWJsZSBvZmYgPSAoZ2RvdWJsZSkgaSAqIHNjYWxlOwotICAgICAgICBpbl9kYXRhW2ldID0gc2FtcGxlc1tNSU4gKChndWludCkgb2ZmLCBtb25vc2NvcGUtPnNwZildOwotICAgICAgfQotICAgICAgcGl4ZWxzID0gbW9ub3Njb3BlX3VwZGF0ZSAobW9ub3Njb3BlLT52aXNzdGF0ZSwgaW5fZGF0YSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5vdCByZWFsbHkgY29ycmVjdCwgYnV0IGxvb2tzIG11Y2ggcHJldHRpZXIgKi8KLSAgICAgIHBpeGVscyA9IG1vbm9zY29wZV91cGRhdGUgKG1vbm9zY29wZS0+dmlzc3RhdGUsIHNhbXBsZXMpOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUIChtb25vc2NvcGUsICJhbGxvY2F0aW5nIG91dHB1dCBidWZmZXIiKTsKLSAgICBmbG93X3JldCA9IGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAobW9ub3Njb3BlLT5wb29sLCAmb3V0YnVmLCBOVUxMKTsKLSAgICBpZiAoZmxvd19yZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIGdzdF9hZGFwdGVyX3VubWFwIChtb25vc2NvcGUtPmFkYXB0ZXIpOwotICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgZ3N0X2J1ZmZlcl9maWxsIChvdXRidWYsIDAsIHBpeGVscywgbW9ub3Njb3BlLT5vdXRzaXplKTsKLQotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gbW9ub3Njb3BlLT5uZXh0X3RzOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBtb25vc2NvcGUtPmZyYW1lX2R1cmF0aW9uOwotCi0gICAgZmxvd19yZXQgPSBnc3RfcGFkX3B1c2ggKG1vbm9zY29wZS0+c3JjcGFkLCBvdXRidWYpOwotCi0jaWYgMAotICBza2lwOgotI2VuZGlmCi0KLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKG1vbm9zY29wZS0+bmV4dF90cykpCi0gICAgICBtb25vc2NvcGUtPm5leHRfdHMgKz0gbW9ub3Njb3BlLT5mcmFtZV9kdXJhdGlvbjsKLQotICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChtb25vc2NvcGUtPmFkYXB0ZXIsIGJ5dGVzcGVyZnJhbWUpOwotICB9Ci0KLW91dDoKLQotICByZXR1cm4gZmxvd19yZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X21vbm9zY29wZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0TW9ub3Njb3BlICptb25vc2NvcGU7Ci0gIGdib29sZWFuIHJlczsKLQotICBtb25vc2NvcGUgPSBHU1RfTU9OT1NDT1BFIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChtb25vc2NvcGUtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9tb25vc2NvcGVfcmVzZXQgKG1vbm9zY29wZSk7Ci0gICAgICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKG1vbm9zY29wZS0+c3JjcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIC8qIHRoZSBuZXdzZWdtZW50IHZhbHVlcyBhcmUgdXNlZCB0byBjbGlwIHRoZSBpbnB1dCBzYW1wbGVzCi0gICAgICAgKiBhbmQgdG8gY29udmVydCB0aGUgaW5jb21taW5nIHRpbWVzdGFtcHMgdG8gcnVubmluZyB0aW1lIHNvCi0gICAgICAgKiB3ZSBjYW4gZG8gUW9TICovCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJm1vbm9zY29wZS0+c2VnbWVudCk7Ci0KLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobW9ub3Njb3BlLT5zcmNwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgZ3N0X21vbm9zY29wZV9zaW5rX3NldGNhcHMgKG1vbm9zY29wZSwgY2Fwcyk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobW9ub3Njb3BlLT5zcmNwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbW9ub3Njb3BlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdE1vbm9zY29wZSAqbW9ub3Njb3BlOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgbW9ub3Njb3BlID0gR1NUX01PTk9TQ09QRSAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9RT1M6ewotICAgICAgZ2RvdWJsZSBwcm9wb3J0aW9uOwotICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsIE5VTEwsICZwcm9wb3J0aW9uLCAmZGlmZiwgJnRpbWVzdGFtcCk7Ci0KLSAgICAgIC8qIHNhdmUgc3R1ZmYgZm9yIHRoZSBfY2hhaW4oKSBmdW5jdGlvbiAqLwotICAgICAgR1NUX09CSkVDVF9MT0NLIChtb25vc2NvcGUpOwotICAgICAgbW9ub3Njb3BlLT5wcm9wb3J0aW9uID0gcHJvcG9ydGlvbjsKLSAgICAgIGlmIChkaWZmID49IDApCi0gICAgICAgIC8qIHdlJ3JlIGxhdGUsIHRoaXMgaXMgYSBnb29kIGVzdGltYXRlIGZvciBuZXh0IGRpc3BsYXlhYmxlCi0gICAgICAgICAqIGZyYW1lIChzZWUgcGFydC1xb3MudHh0KSAqLwotICAgICAgICBtb25vc2NvcGUtPmVhcmxpZXN0X3RpbWUgPQotICAgICAgICAgICAgdGltZXN0YW1wICsgMiAqIGRpZmYgKyBtb25vc2NvcGUtPmZyYW1lX2R1cmF0aW9uOwotICAgICAgZWxzZQotICAgICAgICBtb25vc2NvcGUtPmVhcmxpZXN0X3RpbWUgPSB0aW1lc3RhbXAgKyBkaWZmOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG1vbm9zY29wZSk7Ci0KLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobW9ub3Njb3BlLT5zaW5rcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobW9ub3Njb3BlLT5zaW5rcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X21vbm9zY29wZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RNb25vc2NvcGUgKm1vbm9zY29wZSA9IEdTVF9NT05PU0NPUEUgKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X21vbm9zY29wZV9yZXNldCAobW9ub3Njb3BlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBpZiAobW9ub3Njb3BlLT5wb29sKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChtb25vc2NvcGUtPnBvb2wsIEZBTFNFKTsKLSAgICAgICAgZ3N0X29iamVjdF9yZXBsYWNlICgoR3N0T2JqZWN0ICoqKSAmIG1vbm9zY29wZS0+cG9vbCwgTlVMTCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG1vbm9zY29wZV9kZWJ1ZywgIm1vbm9zY29wZSIsIDAsCi0gICAgICAibW9ub3Njb3BlIGVsZW1lbnQiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm1vbm9zY29wZSIsCi0gICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9NT05PU0NPUEUpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbW9ub3Njb3BlLAotICAgICJNb25vc2NvcGUgdmlzdWFsaXphdGlvbiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2dzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmggYi9nc3QvbW9ub3Njb3BlL2dzdG1vbm9zY29wZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjZhNmQyLi4wMDAwMDAwCi0tLSBhL2dzdC9tb25vc2NvcGUvZ3N0bW9ub3Njb3BlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKiBHU3RyZWFtZXIgbW9ub3Njb3BlIHZpc3VhbGlzYXRpb24gZWxlbWVudAotICogQ29weXJpZ2h0IChDKSA8MjAwMj4gUmljaGFyZCBCb3VsdG9uIDxyaWNoYXJkQHRhcnRhcnVzLm9yZz4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltIGF0IGZsdWVuZG8gZG90IGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX01PTk9TQ09QRV9fCi0jZGVmaW5lIF9fR1NUX01PTk9TQ09QRV9fCi0KLUdfQkVHSU5fREVDTFMKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfTU9OT1NDT1BFICAgICAgICAgICAgKGdzdF9tb25vc2NvcGVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX01PTk9TQ09QRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX01PTk9TQ09QRSxHc3RNb25vc2NvcGUpKQotI2RlZmluZSBHU1RfTU9OT1NDT1BFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9NT05PU0NPUEUsR3N0TW9ub3Njb3BlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTU9OT1NDT1BFKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfTU9OT1NDT1BFKSkKLSNkZWZpbmUgR1NUX0lTX01PTk9TQ09QRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfTU9OT1NDT1BFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1vbm9zY29wZSBHc3RNb25vc2NvcGU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TW9ub3Njb3BlQ2xhc3MgR3N0TW9ub3Njb3BlQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0TW9ub3Njb3BlCi17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICAvKiBwYWRzICovCi0gIEdzdFBhZCAgICAgICpzaW5rcGFkOwotICBHc3RQYWQgICAgICAqc3JjcGFkOwotCi0gIEdzdEFkYXB0ZXIgICphZGFwdGVyOwotCi0gIGd1aW50NjQgICAgICBuZXh0X3RzOyAgICAgICAgICAgICAvKiBleHBlY3RlZCB0aW1lc3RhbXAgb2YgdGhlIG5leHQgZnJhbWUgKi8KLSAgZ3VpbnQ2NCAgICAgIGZyYW1lX2R1cmF0aW9uOyAgICAgIC8qIHZpZGVvIGZyYW1lIGR1cmF0aW9uICAgICovCi0gIGdpbnQgICAgICAgICByYXRlOyAgICAgICAgICAgICAgICAvKiBzYW1wbGUgcmF0ZSAgICAgICAgICAgICAqLwotICBndWludCAgICAgICAgYnBzOyAgICAgICAgICAgICAgICAgLyogYnl0ZXMgcGVyIHNhbXBsZSAgICAgICAgKi8KLSAgZ3VpbnQgICAgICAgIHNwZjsgICAgICAgICAgICAgICAgIC8qIHNhbXBsZXMgcGVyIHZpZGVvIGZyYW1lICovCi0gIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0KLSAgR3N0U2VnbWVudCAgIHNlZ21lbnQ7Ci0KLSAgLyogUW9TIHN0dWZmICovLyogd2l0aCBMT0NLICovCi0gIGdkb3VibGUgICAgICBwcm9wb3J0aW9uOwotICBHc3RDbG9ja1RpbWUgZWFybGllc3RfdGltZTsKLQotICAvKiB2aWRlbyBzdGF0ZSAqLwotICBnaW50ICAgICAgICAgZnBzX251bTsKLSAgZ2ludCAgICAgICAgIGZwc19kZW5vbTsKLSAgZ2ludCAgICAgICAgIHdpZHRoOwotICBnaW50ICAgICAgICAgaGVpZ2h0OwotICBndWludCAgICAgICAgb3V0c2l6ZTsKLQotICAvKiB2aXN1YWxpc2F0aW9uIHN0YXRlICovCi0gIHN0cnVjdCBtb25vc2NvcGVfc3RhdGUgKnZpc3N0YXRlOwotfTsKLQotc3RydWN0IF9Hc3RNb25vc2NvcGVDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X21vbm9zY29wZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9NT05PU0NPUEVfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvbW9ub3Njb3BlL21vbm9zY29wZS5jIGIvZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUwMDg3OS4uMDAwMDAwMAotLS0gYS9nc3QvbW9ub3Njb3BlL21vbm9zY29wZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qICBtb25vc2NvcGUuY3BwCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFJpY2hhcmQgQm91bHRvbiA8cmljaGFyZEB0YXJ0YXJ1cy5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDEgQW5keSBMbyBBIEZvZSA8YW5keUBhbHNhcGxheWVyLm9yZz4KLSAqICBPcmlnaW5hbCBjb2RlIGJ5IFRpbmljIFVybwotICoKLSAqICBUaGlzIGNvZGUgaXMgY29waWVkIGZyb20gQWxzYXBsYXllci4gVGhlIG9yZ2luYWwgY29kZSB3YXMgYnkgVGluaWMgVXJvIGFuZCB1bmRlcgotICogIHRoZSBCU0QgbGljZW5zZSB3aXRob3V0IGEgYWR2ZXJ0aXNpZyBjbGF1c2UuIEFuZHkgTG8gQSBGb2UgdGhlbiByZWxpY2Vuc2VkIHRoZQotICogIGNvZGUgd2hlbiBoZSB1c2VkIGl0IGZvciBBbHNhcGxheWVyIHRvIEdQTCB3aXRoIFRpbmljJ3MgcGVybWlzc2lvbi4gUmljaGFyZCBCb3VsdG9uCi0gKiAgdGhlbiB0b29rIHRoaXMgY29kZSBhbmQgbWFkZSBhIEdQTCBwbHVnaW4gb3V0IG9mIGl0LgotICoKLSAqICA3dGggRGVjZW1iZXIgMjAwNCBDaHJpc3RpYW4gU2NoYWxsZXI6IFJpY2hhcmQgQm91bHRvbiBhbmQgQW5keSBMbyBBIEZvZSBnYXZlCi0gKiAgcGVybWlzc2lvbiB0byByZWxpY2Vuc2UgdGhlaXIgY2hhbmdlcyB1bmRlciBCU0QgbGljZW5zZSBzbyB3ZSB3aGVyZSBhYmxlIHRvIHJlc3RvcmUgdGhlCi0gKiAgY29kZSB0byBUaW5pYydzIG9yaWdpbmFsIEJTRCBsaWNlbnNlLgotICoKLSAqIFRoaXMgZmlsZSBpcyB1bmRlciB3aGF0IGlzIGtub3duIGFzIHRoZSBCU0QgbGljZW5zZToKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpCi0gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKLSAqIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0Ci0gKiBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCi0gKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0gKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkKLSAqIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJtb25vc2NvcGUuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1zdGF0aWMgdm9pZAotY29sb3JzX2luaXQgKGd1aW50MzIgKiBjb2xvcnMpCi17Ci0gIGludCBpOwotICBpbnQgaHEgPSAoc2NvcGVfaGVpZ2h0IC8gNCk7Ci0gIGludCBocTEgPSBocSAtIDE7Ci0gIGludCBoaDEgPSAoc2NvcGVfaGVpZ2h0IC8gMikgLSAxOwotICBkb3VibGUgc2NsID0gKDI1Ni4wIC8gKGRvdWJsZSkgaHEpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBocTsgaSsrKSB7Ci0gICAgLyogZ3JlZW4gdG8geWVsbG93ICovCi0gICAgY29sb3JzW2ldID0gKChpbnQpIChpICogc2NsKSA8PCAxNikgKyAoMjU1IDw8IDgpOwotICAgIC8qIHllbGxvdyB0byByZWQgKi8KLSAgICBjb2xvcnNbaSArIGhxMV0gPSAoMjU1IDw8IDE2KSArICgoaW50KSAoKGhxMSAtIGkpICogc2NsKSA8PCA4KTsKLSAgfQotICBjb2xvcnNbaGgxXSA9ICg0MCA8PCAxNikgKyAoNzUgPDwgOCk7Ci19Ci0KLXN0cnVjdCBtb25vc2NvcGVfc3RhdGUgKgotbW9ub3Njb3BlX2luaXQgKGd1aW50MzIgcmVzeCwgZ3VpbnQzMiByZXN5KQotewotICBzdHJ1Y3QgbW9ub3Njb3BlX3N0YXRlICpzdGF0ZXB0cjsKLQotICAvKiBJIGRpZG4ndCBwcm9ncmFtIG1vbm9zY29wZSB0byBvbmx5IGRvIDI1NioxMjgsIGJ1dCBpdCB3b3JrcyB0aGF0IHdheSAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAocmVzeCA9PSBzY29wZV93aWR0aCwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChyZXN5ID09IHNjb3BlX2hlaWdodCwgMCk7Ci0gIHN0YXRlcHRyID0gY2FsbG9jICgxLCBzaXplb2YgKHN0cnVjdCBtb25vc2NvcGVfc3RhdGUpKTsKLSAgaWYgKHN0YXRlcHRyID09IDApCi0gICAgcmV0dXJuIDA7Ci0gIHN0YXRlcHRyLT5jc3RhdGUgPSBjb252b2x2ZV9pbml0IChjb252b2x2ZXJfZGVwdGgpOwotICBjb2xvcnNfaW5pdCAoc3RhdGVwdHItPmNvbG9ycyk7Ci0gIHJldHVybiBzdGF0ZXB0cjsKLX0KLQotdm9pZAotbW9ub3Njb3BlX2Nsb3NlIChzdHJ1Y3QgbW9ub3Njb3BlX3N0YXRlICpzdGF0ZXB0cikKLXsKLSAgY29udm9sdmVfY2xvc2UgKHN0YXRlcHRyLT5jc3RhdGUpOwotICBmcmVlIChzdGF0ZXB0cik7Ci19Ci0KLWd1aW50MzIgKgotbW9ub3Njb3BlX3VwZGF0ZSAoc3RydWN0IG1vbm9zY29wZV9zdGF0ZSAqc3RhdGVwdHIsIGdpbnQxNiBkYXRhW2NvbnZvbHZlcl9iaWddKQotewotICAvKiBSZWFsbHksIHdlIHdhbnQgc2FtcGxlcyBldmVubHkgc3ByZWFkIG92ZXIgdGhlIGF2YWlsYWJsZSBkYXRhLgotICAgKiBKdXN0IHRha2luZyBhIGNvbnRpbnVvdXMgY2h1bmsgd2lsbCBkbyBmb3Igbm93LCB0aG91Z2guICovCi0gIGludCBpOwotICBpbnQgZm9vLCBiYXI7Ci0gIGludCBhdmc7Ci0gIGludCBoOwotICBpbnQgaGggPSAoc2NvcGVfaGVpZ2h0IC8gMik7Ci0gIGludCBoaDEgPSBoaCAtIDE7Ci0gIGd1aW50MzIgKmxvYzsKLQotICBkb3VibGUgZmFjdG9yOwotICBpbnQgbWF4ID0gMTsKLSAgc2hvcnQgKnRoaXNFcSA9IHN0YXRlcHRyLT5jb3B5RXE7Ci0KLSAgbWVtY3B5ICh0aGlzRXEsIGRhdGEsIHNpemVvZiAoc2hvcnQpICogY29udm9sdmVyX2JpZyk7Ci0gIHRoaXNFcSArPSBjb252b2x2ZV9tYXRjaCAoc3RhdGVwdHItPmF2Z0VxLCB0aGlzRXEsIHN0YXRlcHRyLT5jc3RhdGUpOwotCi0gIG1lbXNldCAoc3RhdGVwdHItPmRpc3BsYXksIDAsIHNjb3BlX3dpZHRoICogc2NvcGVfaGVpZ2h0ICogc2l6ZW9mIChndWludDMyKSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBjb252b2x2ZXJfc21hbGw7IGkrKykgewotICAgIGF2ZyA9ICh0aGlzRXFbaV0gKyBzdGF0ZXB0ci0+YXZnRXFbaV0pID4+IDE7Ci0gICAgc3RhdGVwdHItPmF2Z0VxW2ldID0gYXZnOwotICAgIGF2ZyA9IGFicyAoYXZnKTsKLSAgICBtYXggPSBNQVggKG1heCwgYXZnKTsKLSAgfQotICAvKiBydW5uaW5nIGF2ZXJhZ2UsIDQgdmFsdWVzIGlzIGVub3VnaCB0byBtYWtlIGl0IGZvbGxvdyB2b2x1bWUgY2hhbmdlcwotICAgKiBpZiB0aGlzIHZhbHVlIGlzIHRvbyBsYXJnZSBpdCB3aWxsIGNvbnZlcmdlIHNsb3dseQotICAgKi8KLSAgc3RhdGVwdHItPmF2Z01heCArPSAobWF4IC8gNCkgLSAoc3RhdGVwdHItPmF2Z01heCAvIDQpOwotCi0gIC8qIGlucHV0IGlzICsvLSBhdmdNYXgsIG91dHB1dCBpcyArLy0gaGggKi8KLSAgaWYgKHN0YXRlcHRyLT5hdmdNYXgpIHsKLSAgICBmYWN0b3IgPSAoZ2RvdWJsZSkgaGggLyBzdGF0ZXB0ci0+YXZnTWF4OwotICB9IGVsc2UgewotICAgIGZhY3RvciA9IDEuMDsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCBzY29wZV93aWR0aDsgaSsrKSB7Ci0gICAgLyogc2NhbGUgMTZiaXQgc2lnbmVkIGF1ZGlvIHZhbHVlcyB0byBzY29wZV9oZWlnaHQgKi8KLSAgICBmb28gPSBzdGF0ZXB0ci0+YXZnRXFbaV0gKiBmYWN0b3I7Ci0gICAgZm9vID0gQ0xBTVAgKGZvbywgLWhoMSwgaGgxKTsKLSAgICBiYXIgPSAoaSArICgoZm9vICsgaGgpICogc2NvcGVfd2lkdGgpKTsKLSAgICBpZiAoKGJhciA+IDApICYmIChiYXIgPCAoc2NvcGVfd2lkdGggKiBzY29wZV9oZWlnaHQpKSkgewotICAgICAgbG9jID0gc3RhdGVwdHItPmRpc3BsYXkgKyBiYXI7Ci0gICAgICAvKiBkcmF3IHVwIC8gZG93biBiYXJzICovCi0gICAgICBpZiAoZm9vIDwgMCkgewotICAgICAgICBmb3IgKGggPSAwOyBoIDw9ICgtZm9vKTsgaCsrKSB7Ci0gICAgICAgICAgKmxvYyA9IHN0YXRlcHRyLT5jb2xvcnNbaF07Ci0gICAgICAgICAgbG9jICs9IHNjb3BlX3dpZHRoOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGggPSAwOyBoIDw9IGZvbzsgaCsrKSB7Ci0gICAgICAgICAgKmxvYyA9IHN0YXRlcHRyLT5jb2xvcnNbaF07Ci0gICAgICAgICAgbG9jIC09IHNjb3BlX3dpZHRoOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogRHJhdyBncmlkLiAqLwotICB7Ci0gICAgZ3VpbnQzMiBncmF5ID0gc3RhdGVwdHItPmNvbG9yc1toaDFdOwotCi0gICAgZm9yIChpID0gMTY7IGkgPCBzY29wZV9oZWlnaHQ7IGkgKz0gMTYpIHsKLSAgICAgIGZvciAoaCA9IDA7IGggPCBzY29wZV93aWR0aDsgaCArPSAyKSB7Ci0gICAgICAgIHN0YXRlcHRyLT5kaXNwbGF5WyhpICogc2NvcGVfd2lkdGgpICsgaF0gPSBncmF5OwotICAgICAgICBpZiAoaSA9PSBoaCkKLSAgICAgICAgICBzdGF0ZXB0ci0+ZGlzcGxheVsoaSAqIHNjb3BlX3dpZHRoKSArIGggKyAxXSA9IGdyYXk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZvciAoaSA9IDE2OyBpIDwgc2NvcGVfd2lkdGg7IGkgKz0gMTYpIHsKLSAgICAgIGZvciAoaCA9IDA7IGggPCBzY29wZV9oZWlnaHQ7IGggKz0gMikgewotICAgICAgICBzdGF0ZXB0ci0+ZGlzcGxheVtpICsgKGggKiBzY29wZV93aWR0aCldID0gZ3JheTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHN0YXRlcHRyLT5kaXNwbGF5OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuaCBiL2dzdC9tb25vc2NvcGUvbW9ub3Njb3BlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmODRkYzkuLjAwMDAwMDAKLS0tIGEvZ3N0L21vbm9zY29wZS9tb25vc2NvcGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSNpZm5kZWYgX01PTk9TQ09QRV9ICi0jZGVmaW5lIF9NT05PU0NPUEVfSAotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgImNvbnZvbHZlLmgiCi0KLSNkZWZpbmUgY29udm9sdmVyX2RlcHRoIDgKLSNkZWZpbmUgY29udm9sdmVyX3NtYWxsICgxIDw8IGNvbnZvbHZlcl9kZXB0aCkKLSNkZWZpbmUgY29udm9sdmVyX2JpZyAoMiA8PCBjb252b2x2ZXJfZGVwdGgpCi0jZGVmaW5lIHNjb3BlX3dpZHRoIDI1NgotI2RlZmluZSBzY29wZV9oZWlnaHQgMTI4Ci0KLXN0cnVjdCBtb25vc2NvcGVfc3RhdGUgewotICBzaG9ydCBjb3B5RXFbY29udm9sdmVyX2JpZ107Ci0gIGludCBhdmdFcVtjb252b2x2ZXJfc21hbGxdOyAgICAgIC8qIGEgcnVubmluZyBhdmVyYWdlIG9mIHRoZSBsYXN0IGZldy4gKi8KLSAgaW50IGF2Z01heDsgICAgICAgICAgICAgICAgICAgICAvKiBydW5uaW5nIGF2ZXJhZ2Ugb2YgbWF4IHNhbXBsZS4gKi8KLSAgZ3VpbnQzMiBkaXNwbGF5W3Njb3BlX3dpZHRoICogc2NvcGVfaGVpZ2h0XTsKLQotICBjb252b2x2ZV9zdGF0ZSAqY3N0YXRlOwotICBndWludDMyIGNvbG9yc1tzY29wZV9oZWlnaHQgLyAyXTsKLX07Ci0KLXN0cnVjdCBtb25vc2NvcGVfc3RhdGUgKiBtb25vc2NvcGVfaW5pdCAoZ3VpbnQzMiByZXN4LCBndWludDMyIHJlc3kpOwotZ3VpbnQzMiAqIG1vbm9zY29wZV91cGRhdGUgKHN0cnVjdCBtb25vc2NvcGVfc3RhdGUgKiBzdGF0ZXB0ciwgZ2ludDE2IGRhdGEgW2NvbnZvbHZlcl9iaWddKTsKLXZvaWQgbW9ub3Njb3BlX2Nsb3NlIChzdHJ1Y3QgbW9ub3Njb3BlX3N0YXRlICogc3RhdGVwdHIpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvTWFrZWZpbGUuYW0gYi9nc3QvbXVsdGlmaWxlL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2FhNDJhLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0KLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG11bHRpZmlsZS5sYQotCi1saWJnc3RtdWx0aWZpbGVfbGFfU09VUkNFUyA9IFwKLQlnc3RtdWx0aWZpbGVzaW5rLmMgICBcCi0JZ3N0bXVsdGlmaWxlc3JjLmMgICAgXAotCWdzdG11bHRpZmlsZS5jICAgICAgIFwKLQlnc3RzcGxpdGZpbGVzcmMuYyAgICBcCi0JZ3N0c3BsaXRtdXhzaW5rLmMgICAgXAotCWdzdHNwbGl0bXV4cGFydHJlYWRlci5jIFwKLQlnc3RzcGxpdG11eHNyYy5jIFwKLQlnc3RzcGxpdHV0aWxzLmMgICAgXAotCXBhdHRlcm5zcGVjLmMKLWxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1saWJnc3RtdWx0aWZpbGVfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdJT19MSUJTKQotbGliZ3N0bXVsdGlmaWxlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdG11bHRpZmlsZXNyYy5oIGdzdG11bHRpZmlsZXNpbmsuaCBnc3RzcGxpdGZpbGVzcmMuaCBnc3RzcGxpdG11eHNpbmsuaCBcCi0JZ3N0c3BsaXRtdXhzcmMuaCBnc3RzcGxpdG11eHBhcnRyZWFkZXIuaCBnc3RzcGxpdHV0aWxzLmggcGF0dGVybnNwZWMuaAotCi1ub2luc3RfUFJPR1JBTVMgPSB0ZXN0LXNwbGl0bXV4LXBhcnQtcmVhZGVyCi0KLXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfU09VUkNFUyA9IFwKLQl0ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5jIFwKLQlnc3RzcGxpdG11eHBhcnRyZWFkZXIuYyBcCi0JZ3N0c3BsaXRtdXhzcmMuYyBcCi0JZ3N0c3BsaXR1dGlscy5jIFwKLQlwYXR0ZXJuc3BlYy5jCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoR0lPX0NGTEFHUykKLXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoR0lPX0xJQlMpCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvTWFrZWZpbGUuaW4gYi9nc3QvbXVsdGlmaWxlL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU4M2ZjLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMTEzICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gdGVzdC1zcGxpdG11eC1wYXJ0LXJlYWRlciQoRVhFRVhUKQotc3ViZGlyID0gZ3N0L211bHRpZmlsZQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdG11bHRpZmlsZV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0bXVsdGlmaWxlX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzaW5rLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlc3JjLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRmaWxlc3JjLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhzaW5rLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhzcmMubG8gXAotCWxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdHV0aWxzLmxvIFwKLQlsaWJnc3RtdWx0aWZpbGVfbGEtcGF0dGVybnNwZWMubG8KLWxpYmdzdG11bHRpZmlsZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RtdWx0aWZpbGVfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdG11bHRpZmlsZV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RtdWx0aWZpbGVfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLWFtX3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfT0JKRUNUUyA9ICBcCi0JdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci4kKE9CSkVYVCkgXAotCXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLiQoT0JKRVhUKSBcCi0JdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHNyYy4kKE9CSkVYVCkgXAotCXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy4kKE9CSkVYVCkgXAotCXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMuJChPQkpFWFQpCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX09CSkVDVFMgPSAgXAotCSQoYW1fdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9PQkpFQ1RTKQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdG11bHRpZmlsZV9sYV9TT1VSQ0VTKSBcCi0JJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdG11bHRpZmlsZV9sYV9TT1VSQ0VTKSBcCi0JJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG11bHRpZmlsZS5sYQotbGliZ3N0bXVsdGlmaWxlX2xhX1NPVVJDRVMgPSBcCi0JZ3N0bXVsdGlmaWxlc2luay5jICAgXAotCWdzdG11bHRpZmlsZXNyYy5jICAgIFwKLQlnc3RtdWx0aWZpbGUuYyAgICAgICBcCi0JZ3N0c3BsaXRmaWxlc3JjLmMgICAgXAotCWdzdHNwbGl0bXV4c2luay5jICAgIFwKLQlnc3RzcGxpdG11eHBhcnRyZWFkZXIuYyBcCi0JZ3N0c3BsaXRtdXhzcmMuYyBcCi0JZ3N0c3BsaXR1dGlscy5jICAgIFwKLQlwYXR0ZXJuc3BlYy5jCi0KLWxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1saWJnc3RtdWx0aWZpbGVfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdJT19MSUJTKQotbGliZ3N0bXVsdGlmaWxlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RtdWx0aWZpbGVzcmMuaCBnc3RtdWx0aWZpbGVzaW5rLmggZ3N0c3BsaXRmaWxlc3JjLmggZ3N0c3BsaXRtdXhzaW5rLmggXAotCWdzdHNwbGl0bXV4c3JjLmggZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmggZ3N0c3BsaXR1dGlscy5oIHBhdHRlcm5zcGVjLmgKLQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9TT1VSQ0VTID0gXAotCXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLmMgXAotCWdzdHNwbGl0bXV4cGFydHJlYWRlci5jIFwKLQlnc3RzcGxpdG11eHNyYy5jIFwKLQlnc3RzcGxpdHV0aWxzLmMgXAotCXBhdHRlcm5zcGVjLmMKLQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdJT19MSUJTKQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvbXVsdGlmaWxlL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9tdWx0aWZpbGUvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RtdWx0aWZpbGUubGE6ICQobGliZ3N0bXVsdGlmaWxlX2xhX09CSkVDVFMpICQobGliZ3N0bXVsdGlmaWxlX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RtdWx0aWZpbGVfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdG11bHRpZmlsZV9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0bXVsdGlmaWxlX2xhX09CSkVDVFMpICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQkFERCkgJChMSUJTKQotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLXRlc3Qtc3BsaXRtdXgtcGFydC1yZWFkZXIkKEVYRUVYVCk6ICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9PQkpFQ1RTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgdGVzdC1zcGxpdG11eC1wYXJ0LXJlYWRlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9MSU5LKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfT0JKRUNUUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNpbmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0ZmlsZXNyYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHBhcnRyZWFkZXIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhzaW5rLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0dXRpbHMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtcGF0dGVybnNwZWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHNyYy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdHV0aWxzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXBhdHRlcm5zcGVjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzaW5rLmxvOiBnc3RtdWx0aWZpbGVzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWx0aWZpbGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bXVsdGlmaWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNpbmsuVHBvIC1jIC1vIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzaW5rLmxvIGB0ZXN0IC1mICdnc3RtdWx0aWZpbGVzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpZmlsZXNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNpbmsuVHBvICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RtdWx0aWZpbGVzaW5rLmMnIG9iamVjdD0nbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWx0aWZpbGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bXVsdGlmaWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzaW5rLmxvIGB0ZXN0IC1mICdnc3RtdWx0aWZpbGVzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpZmlsZXNpbmsuYwotCi1saWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlc3JjLmxvOiBnc3RtdWx0aWZpbGVzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzcmMuVHBvIC1jIC1vIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzcmMubG8gYHRlc3QgLWYgJ2dzdG11bHRpZmlsZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RtdWx0aWZpbGVzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNyYy5UcG8gJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGVzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0bXVsdGlmaWxlc3JjLmMnIG9iamVjdD0nbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZXNyYy5sbyBgdGVzdCAtZiAnZ3N0bXVsdGlmaWxlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpZmlsZXNyYy5jCi0KLWxpYmdzdG11bHRpZmlsZV9sYS1nc3RtdWx0aWZpbGUubG86IGdzdG11bHRpZmlsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZS5UcG8gLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZS5sbyBgdGVzdCAtZiAnZ3N0bXVsdGlmaWxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpZmlsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlLlRwbyAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdG11bHRpZmlsZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RtdWx0aWZpbGUuYycgb2JqZWN0PSdsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0bXVsdGlmaWxlLmxvIGB0ZXN0IC1mICdnc3RtdWx0aWZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bXVsdGlmaWxlLmMKLQotbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0ZmlsZXNyYy5sbzogZ3N0c3BsaXRmaWxlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWx0aWZpbGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bXVsdGlmaWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRmaWxlc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRmaWxlc3JjLlRwbyAtYyAtbyBsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRmaWxlc3JjLmxvIGB0ZXN0IC1mICdnc3RzcGxpdGZpbGVzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BsaXRmaWxlc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdGZpbGVzcmMuVHBvICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRmaWxlc3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwbGl0ZmlsZXNyYy5jJyBvYmplY3Q9J2xpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdGZpbGVzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RtdWx0aWZpbGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0bXVsdGlmaWxlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdGZpbGVzcmMubG8gYHRlc3QgLWYgJ2dzdHNwbGl0ZmlsZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGxpdGZpbGVzcmMuYwotCi1saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhzaW5rLmxvOiBnc3RzcGxpdG11eHNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHNpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHNpbmsuVHBvIC1jIC1vIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHNpbmsubG8gYHRlc3QgLWYgJ2dzdHNwbGl0bXV4c2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGxpdG11eHNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c2luay5UcG8gJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c3BsaXRtdXhzaW5rLmMnIG9iamVjdD0nbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c2luay5sbyBgdGVzdCAtZiAnZ3N0c3BsaXRtdXhzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwbGl0bXV4c2luay5jCi0KLWxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHBhcnRyZWFkZXIubG86IGdzdHNwbGl0bXV4cGFydHJlYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4cGFydHJlYWRlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4cGFydHJlYWRlci5UcG8gLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4cGFydHJlYWRlci5sbyBgdGVzdCAtZiAnZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwbGl0bXV4cGFydHJlYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4cGFydHJlYWRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYycgb2JqZWN0PSdsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmxvIGB0ZXN0IC1mICdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMKLQotbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c3JjLmxvOiBnc3RzcGxpdG11eHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhzcmMuVHBvIC1jIC1vIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdG11eHNyYy5sbyBgdGVzdCAtZiAnZ3N0c3BsaXRtdXhzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BsaXRtdXhzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c3JjLlRwbyAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwbGl0bXV4c3JjLmMnIG9iamVjdD0nbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0bXV4c3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlmaWxlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpZmlsZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXRtdXhzcmMubG8gYHRlc3QgLWYgJ2dzdHNwbGl0bXV4c3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwbGl0bXV4c3JjLmMKLQotbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0dXRpbHMubG86IGdzdHNwbGl0dXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdHV0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXR1dGlscy5UcG8gLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0dXRpbHMubG8gYHRlc3QgLWYgJ2dzdHNwbGl0dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BsaXR1dGlscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXR1dGlscy5UcG8gJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1nc3RzcGxpdHV0aWxzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwbGl0dXRpbHMuYycgb2JqZWN0PSdsaWJnc3RtdWx0aWZpbGVfbGEtZ3N0c3BsaXR1dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLWdzdHNwbGl0dXRpbHMubG8gYHRlc3QgLWYgJ2dzdHNwbGl0dXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BsaXR1dGlscy5jCi0KLWxpYmdzdG11bHRpZmlsZV9sYS1wYXR0ZXJuc3BlYy5sbzogcGF0dGVybnNwZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG11bHRpZmlsZV9sYS1wYXR0ZXJuc3BlYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsdGlmaWxlX2xhLXBhdHRlcm5zcGVjLlRwbyAtYyAtbyBsaWJnc3RtdWx0aWZpbGVfbGEtcGF0dGVybnNwZWMubG8gYHRlc3QgLWYgJ3BhdHRlcm5zcGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBhdHRlcm5zcGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1wYXR0ZXJuc3BlYy5UcG8gJChERVBESVIpL2xpYmdzdG11bHRpZmlsZV9sYS1wYXR0ZXJuc3BlYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwYXR0ZXJuc3BlYy5jJyBvYmplY3Q9J2xpYmdzdG11bHRpZmlsZV9sYS1wYXR0ZXJuc3BlYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpZmlsZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aWZpbGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsdGlmaWxlX2xhLXBhdHRlcm5zcGVjLmxvIGB0ZXN0IC1mICdwYXR0ZXJuc3BlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwYXR0ZXJuc3BlYy5jCi0KLXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIubzogdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5UcG8gLWMgLW8gdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5vIGB0ZXN0IC1mICd0ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Rlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLmMnIG9iamVjdD0ndGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIubyBgdGVzdCAtZiAndGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYwotCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLm9iajogdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLm9iaiBgaWYgdGVzdCAtZiAndGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXRlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Rlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLmMnIG9iamVjdD0ndGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci10ZXN0LXNwbGl0bXV4cGFydHJlYWRlci5vYmogYGlmIHRlc3QgLWYgJ3Rlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYyc7IGZpYAotCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5vOiBnc3RzcGxpdG11eHBhcnRyZWFkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5vIGB0ZXN0IC1mICdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHBhcnRyZWFkZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYycgb2JqZWN0PSd0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLm8gYHRlc3QgLWYgJ2dzdHNwbGl0bXV4cGFydHJlYWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGxpdG11eHBhcnRyZWFkZXIuYwotCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5vYmo6IGdzdHNwbGl0bXV4cGFydHJlYWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHBhcnRyZWFkZXIub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5UcG8gLWMgLW8gdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHBhcnRyZWFkZXIub2JqIGBpZiB0ZXN0IC1mICdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLlRwbyAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHBhcnRyZWFkZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYycgb2JqZWN0PSd0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4cGFydHJlYWRlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHBhcnRyZWFkZXIub2JqIGBpZiB0ZXN0IC1mICdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3RzcGxpdG11eHBhcnRyZWFkZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMnOyBmaWAKLQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHNyYy5vOiBnc3RzcGxpdG11eHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHNyYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLlRwbyAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLm8gYHRlc3QgLWYgJ2dzdHNwbGl0bXV4c3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNwbGl0bXV4c3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhzcmMuVHBvICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c3BsaXRtdXhzcmMuYycgb2JqZWN0PSd0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHNyYy5vIGB0ZXN0IC1mICdnc3RzcGxpdG11eHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGxpdG11eHNyYy5jCi0KLXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhzcmMub2JqOiBnc3RzcGxpdG11eHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdG11eHNyYy5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhzcmMuVHBvIC1jIC1vIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhzcmMub2JqIGBpZiB0ZXN0IC1mICdnc3RzcGxpdG11eHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dzdHNwbGl0bXV4c3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdHNwbGl0bXV4c3JjLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXRtdXhzcmMuVHBvICQoREVQRElSKS90ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c3BsaXRtdXhzcmMuYycgb2JqZWN0PSd0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0bXV4c3JjLm9iaiBgaWYgdGVzdCAtZiAnZ3N0c3BsaXRtdXhzcmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3RzcGxpdG11eHNyYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3RzcGxpdG11eHNyYy5jJzsgZmlgCi0KLXRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy5vOiBnc3RzcGxpdHV0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0dXRpbHMubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdHV0aWxzLlRwbyAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0dXRpbHMubyBgdGVzdCAtZiAnZ3N0c3BsaXR1dGlscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGxpdHV0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy5UcG8gJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwbGl0dXRpbHMuYycgb2JqZWN0PSd0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0dXRpbHMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0dXRpbHMubyBgdGVzdCAtZiAnZ3N0c3BsaXR1dGlscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGxpdHV0aWxzLmMKLQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdHV0aWxzLm9iajogZ3N0c3BsaXR1dGlscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdHV0aWxzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1nc3RzcGxpdHV0aWxzLlRwbyAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0dXRpbHMub2JqIGBpZiB0ZXN0IC1mICdnc3RzcGxpdHV0aWxzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ3N0c3BsaXR1dGlscy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nc3RzcGxpdHV0aWxzLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy5UcG8gJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwbGl0dXRpbHMuYycgb2JqZWN0PSd0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLWdzdHNwbGl0dXRpbHMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItZ3N0c3BsaXR1dGlscy5vYmogYGlmIHRlc3QgLWYgJ2dzdHNwbGl0dXRpbHMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnc3RzcGxpdHV0aWxzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dzdHNwbGl0dXRpbHMuYyc7IGZpYAotCi10ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXBhdHRlcm5zcGVjLm86IHBhdHRlcm5zcGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXBhdHRlcm5zcGVjLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMuVHBvIC1jIC1vIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMubyBgdGVzdCAtZiAncGF0dGVybnNwZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGF0dGVybnNwZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1wYXR0ZXJuc3BlYy5UcG8gJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwYXR0ZXJuc3BlYy5jJyBvYmplY3Q9J3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXBhdHRlcm5zcGVjLm8gYHRlc3QgLWYgJ3BhdHRlcm5zcGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBhdHRlcm5zcGVjLmMKLQotdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1wYXR0ZXJuc3BlYy5vYmo6IHBhdHRlcm5zcGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyLXBhdHRlcm5zcGVjLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1wYXR0ZXJuc3BlYy5UcG8gLWMgLW8gdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1wYXR0ZXJuc3BlYy5vYmogYGlmIHRlc3QgLWYgJ3BhdHRlcm5zcGVjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGF0dGVybnNwZWMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGF0dGVybnNwZWMuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVzdF9zcGxpdG11eF9wYXJ0X3JlYWRlci1wYXR0ZXJuc3BlYy5UcG8gJChERVBESVIpL3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwYXR0ZXJuc3BlYy5jJyBvYmplY3Q9J3Rlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXItcGF0dGVybnNwZWMub2JqIGBpZiB0ZXN0IC1mICdwYXR0ZXJuc3BlYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BhdHRlcm5zcGVjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BhdHRlcm5zcGVjLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoUFJPR1JBTVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQljbGVhbi1wbHVnaW5MVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCi0JZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCi0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKLQlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgXAotCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKLQlpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGUuYyBiL2dzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYmI2NTUuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA2IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBnc3RtdWx0aWZpbGVzaW5rLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RtdWx0aWZpbGVzaW5rLmgiCi0jaW5jbHVkZSAiZ3N0bXVsdGlmaWxlc3JjLmgiCi0jaW5jbHVkZSAiZ3N0c3BsaXRmaWxlc3JjLmgiCi0jaW5jbHVkZSAiZ3N0c3BsaXRtdXhzaW5rLmgiCi0jaW5jbHVkZSAiZ3N0c3BsaXRtdXhzcmMuaCIKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAibXVsdGlmaWxlc3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIGdzdF9tdWx0aV9maWxlX3NyY19nZXRfdHlwZSAoKSk7Ci0gIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJtdWx0aWZpbGVzaW5rIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIGdzdF9tdWx0aV9maWxlX3NpbmtfZ2V0X3R5cGUgKCkpOwotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic3BsaXRmaWxlc3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIGdzdF9zcGxpdF9maWxlX3NyY19nZXRfdHlwZSAoKSk7Ci0KLSAgaWYgKCFyZWdpc3Rlcl9zcGxpdG11eHNpbmsgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghcmVnaXN0ZXJfc3BsaXRtdXhzcmMgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbXVsdGlmaWxlLAotICAgICJSZWFkcy9Xcml0ZXMgYnVmZmVycyBmcm9tL3RvIHNlcXVlbnRpYWxseSBuYW1lZCBmaWxlcyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5jIGIvZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiODNjMGIuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA2IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICAyMDExIENvbGxhYm9yYSBMdGQuIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLSAqICAgICAgICAgICAgICAgICAgICAyMDE1IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Ci0gKgotICogZ3N0bXVsdGlmaWxlc2luay5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tdWx0aWZpbGVzaW5rCi0gKiBAc2VlX2Fsc286ICNHc3RGaWxlU3JjCi0gKgotICogV3JpdGUgaW5jb21pbmcgZGF0YSB0byBhIHNlcmllcyBvZiBzZXF1ZW50aWFsbHktbmFtZWQgZmlsZXMuCi0gKgotICogVGhpcyBlbGVtZW50IGlzIHVzdWFsbHkgdXNlZCB3aXRoIGRhdGEgd2hlcmUgZWFjaCBidWZmZXIgaXMgYW4KLSAqIGluZGVwZW5kZW50IHVuaXQgb2YgZGF0YSBpbiBpdHMgb3duIHJpZ2h0IChlLmcuIHJhdyB2aWRlbyBidWZmZXJzIG9yCi0gKiBlbmNvZGVkIEpQRUcgb3IgUE5HIGltYWdlcykgb3Igd2l0aCBzdHJlYW1hYmxlIGNvbnRhaW5lciBmb3JtYXRzIHN1Y2gKLSAqIGFzIE1QRUctVFMgb3IgTVBFRy1QUy4KLSAqCi0gKiBJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHRoaXMgZWxlbWVudCB0byBjcmVhdGUgaW5kZXBlbmRlbnRseSBwbGF5YWJsZQotICogbXA0IGZpbGVzLCB1c2UgdGhlIHNwbGl0bXV4c2luayBlbGVtZW50IGZvciB0aGF0IGluc3RlYWQuCi0gKgotICogVGhlIGZpbGVuYW1lIHByb3BlcnR5IHNob3VsZCBjb250YWluIGEgc3RyaW5nIHdpdGggYSBcJWQgcGxhY2Vob2xkZXIgdGhhdCB3aWxsCi0gKiBiZSBzdWJzdGl0dXRlZCB3aXRoIHRoZSBpbmRleCBmb3IgZWFjaCBmaWxlbmFtZS4KLSAqCi0gKiBJZiB0aGUgI0dzdE11bHRpRmlsZVNpbms6cG9zdC1tZXNzYWdlcyBwcm9wZXJ0eSBpcyAjVFJVRSwgaXQgc2VuZHMgYW4gYXBwbGljYXRpb24KLSAqIG1lc3NhZ2UgbmFtZWQKLSAqIDxjbGFzc25hbWU+JnF1b3Q7R3N0TXVsdGlGaWxlU2luayZxdW90OzwvY2xhc3NuYW1lPiBhZnRlciB3cml0aW5nIGVhY2gKLSAqIGJ1ZmZlci4KLSAqCi0gKiBUaGUgbWVzc2FnZSdzIHN0cnVjdHVyZSBjb250YWlucyB0aGVzZSBmaWVsZHM6Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogPGxpc3RpdGVtPgotICogICA8cGFyYT4KLSAqICAgI2djaGFyICoKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtmaWxlbmFtZSZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIGZpbGVuYW1lIHdoZXJlIHRoZSBidWZmZXIgd2FzIHdyaXR0ZW4uCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjZ2ludAotICogICA8Y2xhc3NuYW1lPiZxdW90O2luZGV4JnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgaW5kZXggb2YgdGhlIGJ1ZmZlci4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RDbG9ja1RpbWUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDt0aW1lc3RhbXAmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlci4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RDbG9ja1RpbWUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtzdHJlYW0tdGltZSZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXIuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR3N0Q2xvY2tUaW1lCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7cnVubmluZy10aW1lJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBidWZmZXIuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR3N0Q2xvY2tUaW1lCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7ZHVyYXRpb24mcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPgotICogICA8cGFyYT4KLSAqICAgI2d1aW50NjQKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtvZmZzZXQmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSBvZmZzZXQgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNndWludDY0Ci0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7b2Zmc2V0LWVuZCZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIG9mZnNldC1lbmQgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBhdWRpb3Rlc3RzcmMgISBtdWx0aWZpbGVzaW5rCi0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBtdWx0aWZpbGVzaW5rIHBvc3QtbWVzc2FnZXM9dHJ1ZSBmaWxlbmFtZT0iZnJhbWUlZCIKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgImdzdG11bHRpZmlsZXNpbmsuaCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfbXVsdGlfZmlsZV9zaW5rX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9tdWx0aV9maWxlX3NpbmtfZGVidWcKLQotI2RlZmluZSBERUZBVUxUX0xPQ0FUSU9OICIlMDVkIgotI2RlZmluZSBERUZBVUxUX0lOREVYIDAKLSNkZWZpbmUgREVGQVVMVF9QT1NUX01FU1NBR0VTIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfTkVYVF9GSUxFIEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9CVUZGRVIKLSNkZWZpbmUgREVGQVVMVF9NQVhfRklMRVMgMAotI2RlZmluZSBERUZBVUxUX01BWF9GSUxFX1NJWkUgR19HVUlOVDY0X0NPTlNUQU5UKDIqMTAyNCoxMDI0KjEwMjQpCi0jZGVmaW5lIERFRkFVTFRfTUFYX0ZJTEVfRFVSQVRJT04gR1NUX0NMT0NLX1RJTUVfTk9ORQotI2RlZmluZSBERUZBVUxUX0FHR1JFR0FURV9HT1BTIEZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0xPQ0FUSU9OLAotICBQUk9QX0lOREVYLAotICBQUk9QX1BPU1RfTUVTU0FHRVMsCi0gIFBST1BfTkVYVF9GSUxFLAotICBQUk9QX01BWF9GSUxFUywKLSAgUFJPUF9NQVhfRklMRV9TSVpFLAotICBQUk9QX01BWF9GSUxFX0RVUkFUSU9OLAotICBQUk9QX0FHR1JFR0FURV9HT1BTCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfZmlsZV9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X211bHRpX2ZpbGVfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfZmlsZV9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9tdWx0aV9maWxlX3Npbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogYnNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9tdWx0aV9maWxlX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBzaW5rKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tdWx0aV9maWxlX3NpbmtfcmVuZGVyIChHc3RCYXNlU2luayAqIHNpbmssCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tdWx0aV9maWxlX3NpbmtfcmVuZGVyX2xpc3QgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RCdWZmZXJMaXN0ICogYnVmZmVyX2xpc3QpOwotc3RhdGljIGdib29sZWFuIGdzdF9tdWx0aV9maWxlX3Npbmtfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X211bHRpX2ZpbGVfc2lua19vcGVuX25leHRfZmlsZSAoR3N0TXVsdGlGaWxlU2luayAqCi0gICAgbXVsdGlmaWxlc2luayk7Ci1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfZmlsZV9zaW5rX2Nsb3NlX2ZpbGUgKEdzdE11bHRpRmlsZVNpbmsgKiBtdWx0aWZpbGVzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfZmlsZV9zaW5rX2Vuc3VyZV9tYXhfZmlsZXMgKEdzdE11bHRpRmlsZVNpbmsgKgotICAgIG11bHRpZmlsZXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9tdWx0aV9maWxlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotI2RlZmluZSBHU1RfVFlQRV9NVUxUSV9GSUxFX1NJTktfTkVYVCAoZ3N0X211bHRpX2ZpbGVfc2lua19uZXh0X2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfbXVsdGlfZmlsZV9zaW5rX25leHRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBtdWx0aV9maWxlX3NpbmtfbmV4dF90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgbmV4dF90eXBlc1tdID0gewotICAgIHtHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfQlVGRkVSLCAiTmV3IGZpbGUgZm9yIGVhY2ggYnVmZmVyIiwgImJ1ZmZlciJ9LAotICAgIHtHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfRElTQ09OVCwgIk5ldyBmaWxlIGFmdGVyIGVhY2ggZGlzY29udGludWl0eSIsCi0gICAgICAgICJkaXNjb250In0sCi0gICAge0dTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9LRVlfRlJBTUUsICJOZXcgZmlsZSBhdCBlYWNoIGtleSBmcmFtZSAiCi0gICAgICAgICAgIihVc2VmdWwgZm9yIE1QRUctVFMgc2VnbWVudGluZykiLCAia2V5LWZyYW1lIn0sCi0gICAge0dTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9LRVlfVU5JVF9FVkVOVCwKLSAgICAgICAgIk5ldyBmaWxlIGFmdGVyIGEgZm9yY2Uga2V5IHVuaXQgZXZlbnQiLCAia2V5LXVuaXQtZXZlbnQifSwKLSAgICB7R1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX01BWF9TSVpFLCAiTmV3IGZpbGUgd2hlbiB0aGUgY29uZmlndXJlZCBtYXhpbXVtICIKLSAgICAgICAgICAiZmlsZSBzaXplIHdvdWxkIGJlIGV4Y2VlZGVkIHdpdGggdGhlIG5leHQgYnVmZmVyIG9yIGJ1ZmZlciBsaXN0IiwKLSAgICAgICAgIm1heC1zaXplIn0sCi0gICAge0dTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9NQVhfRFVSQVRJT04sCi0gICAgICAgICAgIk5ldyBmaWxlIHdoZW4gdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSAiCi0gICAgICAgICAgImZpbGUgZHVyYXRpb24gd291bGQgYmUgZXhjZWVkZWQgd2l0aCB0aGUgbmV4dCBidWZmZXIgb3IgYnVmZmVyIGxpc3QiLAotICAgICAgICAibWF4LWR1cmF0aW9uIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9Ci0gIH07Ci0KLSAgaWYgKCFtdWx0aV9maWxlX3NpbmtfbmV4dF90eXBlKSB7Ci0gICAgbXVsdGlfZmlsZV9zaW5rX25leHRfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RNdWx0aUZpbGVTaW5rTmV4dCIsIG5leHRfdHlwZXMpOwotICB9Ci0KLSAgcmV0dXJuIG11bHRpX2ZpbGVfc2lua19uZXh0X3R5cGU7Ci19Ci0KLSNkZWZpbmUgZ3N0X211bHRpX2ZpbGVfc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RNdWx0aUZpbGVTaW5rLCBnc3RfbXVsdGlfZmlsZV9zaW5rLCBHU1RfVFlQRV9CQVNFX1NJTkspOwotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc2lua19jbGFzc19pbml0IChHc3RNdWx0aUZpbGVTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X211bHRpX2ZpbGVfc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9tdWx0aV9maWxlX3NpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9DQVRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibG9jYXRpb24iLCAiRmlsZSBMb2NhdGlvbiIsCi0gICAgICAgICAgIkxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIHdyaXRlIiwgTlVMTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOREVYLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImluZGV4IiwgIkluZGV4IiwKLSAgICAgICAgICAiSW5kZXggdG8gdXNlIHdpdGggbG9jYXRpb24gcHJvcGVydHkgdG8gY3JlYXRlIGZpbGUgbmFtZXMuICBUaGUgIgotICAgICAgICAgICJpbmRleCBpcyBpbmNyZW1lbnRlZCBieSBvbmUgZm9yIGVhY2ggYnVmZmVyIHdyaXR0ZW4uIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgREVGQVVMVF9JTkRFWCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpRmlsZVNpbms6cG9zdC1tZXNzYWdlczoKLSAgICoKLSAgICogUG9zdCBhIG1lc3NhZ2Ugb24gdGhlIEdzdEJ1cyBmb3IgZWFjaCBmaWxlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QT1NUX01FU1NBR0VTLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJwb3N0LW1lc3NhZ2VzIiwgIlBvc3QgTWVzc2FnZXMiLAotICAgICAgICAgICJQb3N0IGEgbWVzc2FnZSBmb3IgZWFjaCBmaWxlIHdpdGggaW5mb3JtYXRpb24gb2YgdGhlIGJ1ZmZlciIsCi0gICAgICAgICAgREVGQVVMVF9QT1NUX01FU1NBR0VTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpRmlsZVNpbms6bmV4dC1maWxlOgotICAgKgotICAgKiBXaGVuIHRvIHN0YXJ0IGEgbmV3IGZpbGUuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05FWFRfRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibmV4dC1maWxlIiwgIk5leHQgRmlsZSIsCi0gICAgICAgICAgIldoZW4gdG8gc3RhcnQgYSBuZXcgZmlsZSIsCi0gICAgICAgICAgR1NUX1RZUEVfTVVMVElfRklMRV9TSU5LX05FWFQsIERFRkFVTFRfTkVYVF9GSUxFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0KLSAgLyoqCi0gICAqIEdzdE11bHRpRmlsZVNpbms6bWF4LWZpbGVzOgotICAgKgotICAgKiBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9uIGRpc2suIE9uY2UgdGhlIG1heGltdW0gaXMgcmVhY2hlZCwgb2xkCi0gICAqIGZpbGVzIHN0YXJ0IHRvIGJlIGRlbGV0ZWQgdG8gbWFrZSByb29tIGZvciBuZXcgb25lcy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX0ZJTEVTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtZmlsZXMiLCAiTWF4IGZpbGVzIiwKLSAgICAgICAgICAiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdG8ga2VlcCBvbiBkaXNrLiBPbmNlIHRoZSBtYXhpbXVtIGlzIHJlYWNoZWQsIgotICAgICAgICAgICJvbGQgZmlsZXMgc3RhcnQgdG8gYmUgZGVsZXRlZCB0byBtYWtlIHJvb20gZm9yIG5ldyBvbmVzLiIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX01BWF9GSUxFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0TXVsdGlGaWxlU2luazptYXgtZmlsZS1zaXplOgotICAgKgotICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgZmlsZSBpbiBtYXgtc2l6ZSBtb2RlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfRklMRV9TSVpFLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoIm1heC1maWxlLXNpemUiLCAiTWF4aW11bSBGaWxlIFNpemUiLAotICAgICAgICAgICJNYXhpbXVtIGZpbGUgc2l6ZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgZmlsZSBpbiBtYXgtc2l6ZSBtb2RlIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgREVGQVVMVF9NQVhfRklMRV9TSVpFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RNdWx0aUZpbGVTaW5rOm1heC1maWxlLWR1cmF0aW9uOgotICAgKgotICAgKiBNYXhpbXVtIGZpbGUgc2l6ZSBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgZmlsZSBpbiBtYXgtc2l6ZSBtb2RlLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfRklMRV9EVVJBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtZmlsZS1kdXJhdGlvbiIsICJNYXhpbXVtIEZpbGUgRHVyYXRpb24iLAotICAgICAgICAgICJNYXhpbXVtIGZpbGUgZHVyYXRpb24gYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IGZpbGUgaW4gbWF4LXNpemUgbW9kZSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfTUFYX0ZJTEVfRFVSQVRJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdE11bHRpRmlsZVNpbms6YWdncmVnYXRlLWdvcHM6Ci0gICAqCi0gICAqIFdoZXRoZXIgdG8gYWdncmVnYXRlIGNvbXBsZXRlIEdPUHMgYmVmb3JlIGRvaW5nIGFueSBwcm9jZXNzaW5nLiBTZXQgdGhpcwotICAgKiB0byBUUlVFIHRvIG1ha2Ugc3VyZSBlYWNoIG5ldyBmaWxlIHN0YXJ0cyB3aXRoIGEga2V5ZnJhbWUuIFRoaXMgcmVxdWlyZXMKLSAgICogdGhlIHVwc3RyZWFtIGVsZW1lbnQgdG8gZmxhZyBidWZmZXJzIGNvbnRhaW5pbmcga2V5IHVuaXRzIGFuZCBkZWx0YQotICAgKiB1bml0cyBjb3JyZWN0bHkuIEF0IGxlYXN0IHRoZSBNUEVHLVBTIGFuZCBNUEVHLVRTIG11eGVycyBzaG91bGQgYmUgZG9pbmcKLSAgICogdGhpcy4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BR0dSRUdBVEVfR09QUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYWdncmVnYXRlLWdvcHMiLCAiQWdncmVnYXRlIEdPUHMiLAotICAgICAgICAgICJXaGV0aGVyIHRvIGFnZ3JlZ2F0ZSBHT1BzIGFuZCBwcm9jZXNzIHRoZW0gYXMgYSB3aG9sZSB3aXRob3V0ICIKLSAgICAgICAgICAic3BsaXR0aW5nIiwgREVGQVVMVF9BR0dSRUdBVEVfR09QUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9tdWx0aV9maWxlX3NpbmtfZmluYWxpemU7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9maWxlX3Npbmtfc3RhcnQpOwotICBnc3RiYXNlc2lua19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfZmlsZV9zaW5rX3N0b3ApOwotICBnc3RiYXNlc2lua19jbGFzcy0+cmVuZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9maWxlX3NpbmtfcmVuZGVyKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnJlbmRlcl9saXN0ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfZmlsZV9zaW5rX3JlbmRlcl9saXN0KTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnNldF9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlfZmlsZV9zaW5rX3NldF9jYXBzKTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmV2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aV9maWxlX3NpbmtfZXZlbnQpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfbXVsdGlfZmlsZV9zaW5rX2RlYnVnLCAibXVsdGlmaWxlc2luayIsIDAsCi0gICAgICAibXVsdGlmaWxlc2luayBlbGVtZW50Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiTXVsdGktRmlsZSBTaW5rIiwKLSAgICAgICJTaW5rL0ZpbGUiLAotICAgICAgIldyaXRlIGJ1ZmZlcnMgdG8gYSBzZXF1ZW50aWFsbHkgbmFtZWQgc2V0IG9mIGZpbGVzIiwKLSAgICAgICJEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9maWxlX3NpbmtfaW5pdCAoR3N0TXVsdGlGaWxlU2luayAqIG11bHRpZmlsZXNpbmspCi17Ci0gIG11bHRpZmlsZXNpbmstPmZpbGVuYW1lID0gZ19zdHJkdXAgKERFRkFVTFRfTE9DQVRJT04pOwotICBtdWx0aWZpbGVzaW5rLT5pbmRleCA9IERFRkFVTFRfSU5ERVg7Ci0gIG11bHRpZmlsZXNpbmstPnBvc3RfbWVzc2FnZXMgPSBERUZBVUxUX1BPU1RfTUVTU0FHRVM7Ci0gIG11bHRpZmlsZXNpbmstPm1heF9maWxlcyA9IERFRkFVTFRfTUFYX0ZJTEVTOwotICBtdWx0aWZpbGVzaW5rLT5tYXhfZmlsZV9zaXplID0gREVGQVVMVF9NQVhfRklMRV9TSVpFOwotICBtdWx0aWZpbGVzaW5rLT5tYXhfZmlsZV9kdXJhdGlvbiA9IERFRkFVTFRfTUFYX0ZJTEVfRFVSQVRJT047Ci0gIG11bHRpZmlsZXNpbmstPmZpbGVzID0gTlVMTDsKLSAgbXVsdGlmaWxlc2luay0+bl9maWxlcyA9IDA7Ci0KLSAgbXVsdGlmaWxlc2luay0+YWdncmVnYXRlX2dvcHMgPSBERUZBVUxUX0FHR1JFR0FURV9HT1BTOwotICBtdWx0aWZpbGVzaW5rLT5nb3BfYWRhcHRlciA9IE5VTEw7Ci0KLSAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyAoR1NUX0JBU0VfU0lOSyAobXVsdGlmaWxlc2luayksIEZBTFNFKTsKLQotICBtdWx0aWZpbGVzaW5rLT5uZXh0X3NlZ21lbnQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBtdWx0aWZpbGVzaW5rLT5mb3JjZV9rZXlfdW5pdF9jb3VudCA9IC0xOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0TXVsdGlGaWxlU2luayAqc2luayA9IEdTVF9NVUxUSV9GSUxFX1NJTksgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChzaW5rLT5maWxlbmFtZSk7Ci0gIGdfc2xpc3RfZm9yZWFjaCAoc2luay0+ZmlsZXMsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlIChzaW5rLT5maWxlcyk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3Npbmtfc2V0X2xvY2F0aW9uIChHc3RNdWx0aUZpbGVTaW5rICogc2luaywKLSAgICBjb25zdCBnY2hhciAqIGxvY2F0aW9uKQotewotICBnX2ZyZWUgKHNpbmstPmZpbGVuYW1lKTsKLSAgLyogRklYTUU6IHZhbGlkYXRlIGxvY2F0aW9uIHRvIGhhdmUganVzdCBvbmUgJWQgKi8KLSAgc2luay0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAobG9jYXRpb24pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TXVsdGlGaWxlU2luayAqc2luayA9IEdTVF9NVUxUSV9GSUxFX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19zZXRfbG9jYXRpb24gKHNpbmssIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTkRFWDoKLSAgICAgIHNpbmstPmluZGV4ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9TVF9NRVNTQUdFUzoKLSAgICAgIHNpbmstPnBvc3RfbWVzc2FnZXMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTkVYVF9GSUxFOgotICAgICAgc2luay0+bmV4dF9maWxlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9GSUxFUzoKLSAgICAgIHNpbmstPm1heF9maWxlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfRklMRV9TSVpFOgotICAgICAgc2luay0+bWF4X2ZpbGVfc2l6ZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9GSUxFX0RVUkFUSU9OOgotICAgICAgc2luay0+bWF4X2ZpbGVfZHVyYXRpb24gPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BR0dSRUdBVEVfR09QUzoKLSAgICAgIHNpbmstPmFnZ3JlZ2F0ZV9nb3BzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TXVsdGlGaWxlU2luayAqc2luayA9IEdTVF9NVUxUSV9GSUxFX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2luay0+ZmlsZW5hbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lOREVYOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2luay0+aW5kZXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BPU1RfTUVTU0FHRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2luay0+cG9zdF9tZXNzYWdlcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTkVYVF9GSUxFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNpbmstPm5leHRfZmlsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0ZJTEVTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNpbmstPm1heF9maWxlcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0ZJTEVfU0laRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHNpbmstPm1heF9maWxlX3NpemUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9GSUxFX0RVUkFUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgc2luay0+bWF4X2ZpbGVfZHVyYXRpb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FHR1JFR0FURV9HT1BTOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNpbmstPmFnZ3JlZ2F0ZV9nb3BzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXVsdGlfZmlsZV9zaW5rX3N0YXJ0IChHc3RCYXNlU2luayAqIGJzaW5rKQotewotICBHc3RNdWx0aUZpbGVTaW5rICpzaW5rID0gR1NUX01VTFRJX0ZJTEVfU0lOSyAoYnNpbmspOwotCi0gIGlmIChzaW5rLT5hZ2dyZWdhdGVfZ29wcykKLSAgICBzaW5rLT5nb3BfYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgc2luay0+cG90ZW50aWFsX25leHRfZ29wID0gTlVMTDsKLSAgc2luay0+ZmlsZV9wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3Npbmtfc3RvcCAoR3N0QmFzZVNpbmsgKiBzaW5rKQotewotICBHc3RNdWx0aUZpbGVTaW5rICptdWx0aWZpbGVzaW5rOwotICBpbnQgaTsKLQotICBtdWx0aWZpbGVzaW5rID0gR1NUX01VTFRJX0ZJTEVfU0lOSyAoc2luayk7Ci0KLSAgaWYgKG11bHRpZmlsZXNpbmstPmZpbGUgIT0gTlVMTCkgewotICAgIGZjbG9zZSAobXVsdGlmaWxlc2luay0+ZmlsZSk7Ci0gICAgbXVsdGlmaWxlc2luay0+ZmlsZSA9IE5VTEw7Ci0gIH0KLQotICBpZiAobXVsdGlmaWxlc2luay0+c3RyZWFtaGVhZGVycykgewotICAgIGZvciAoaSA9IDA7IGkgPCBtdWx0aWZpbGVzaW5rLT5uX3N0cmVhbWhlYWRlcnM7IGkrKykgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAobXVsdGlmaWxlc2luay0+c3RyZWFtaGVhZGVyc1tpXSk7Ci0gICAgfQotICAgIGdfZnJlZSAobXVsdGlmaWxlc2luay0+c3RyZWFtaGVhZGVycyk7Ci0gICAgbXVsdGlmaWxlc2luay0+c3RyZWFtaGVhZGVycyA9IE5VTEw7Ci0gIH0KLQotICBpZiAobXVsdGlmaWxlc2luay0+Z29wX2FkYXB0ZXIgIT0gTlVMTCkgewotICAgIGdfb2JqZWN0X3VucmVmIChtdWx0aWZpbGVzaW5rLT5nb3BfYWRhcHRlcik7Ci0gICAgbXVsdGlmaWxlc2luay0+Z29wX2FkYXB0ZXIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKG11bHRpZmlsZXNpbmstPnBvdGVudGlhbF9uZXh0X2dvcCAhPSBOVUxMKSB7Ci0gICAgZ19saXN0X2ZyZWVfZnVsbCAobXVsdGlmaWxlc2luay0+cG90ZW50aWFsX25leHRfZ29wLAotICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICAgIG11bHRpZmlsZXNpbmstPnBvdGVudGlhbF9uZXh0X2dvcCA9IE5VTEw7Ci0gIH0KLQotICBtdWx0aWZpbGVzaW5rLT5mb3JjZV9rZXlfdW5pdF9jb3VudCA9IC0xOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfZmlsZV9zaW5rX3Bvc3RfbWVzc2FnZV9mdWxsIChHc3RNdWx0aUZpbGVTaW5rICogbXVsdGlmaWxlc2luaywKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIEdzdENsb2NrVGltZSBvZmZzZXQsCi0gICAgR3N0Q2xvY2tUaW1lIG9mZnNldF9lbmQsIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIHN0cmVhbV90aW1lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIGlmICghbXVsdGlmaWxlc2luay0+cG9zdF9tZXNzYWdlcykKLSAgICByZXR1cm47Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0TXVsdGlGaWxlU2luayIsCi0gICAgICAiZmlsZW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBmaWxlbmFtZSwKLSAgICAgICJpbmRleCIsIEdfVFlQRV9JTlQsIG11bHRpZmlsZXNpbmstPmluZGV4LAotICAgICAgInRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgICJzdHJlYW0tdGltZSIsIEdfVFlQRV9VSU5UNjQsIHN0cmVhbV90aW1lLAotICAgICAgInJ1bm5pbmctdGltZSIsIEdfVFlQRV9VSU5UNjQsIHJ1bm5pbmdfdGltZSwKLSAgICAgICJkdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLAotICAgICAgIm9mZnNldCIsIEdfVFlQRV9VSU5UNjQsIG9mZnNldCwKLSAgICAgICJvZmZzZXQtZW5kIiwgR19UWVBFX1VJTlQ2NCwgb2Zmc2V0X2VuZCwgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChtdWx0aWZpbGVzaW5rKSwKLSAgICAgIGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKG11bHRpZmlsZXNpbmspLCBzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfZmlsZV9zaW5rX3Bvc3RfbWVzc2FnZV9mcm9tX3RpbWUgKEdzdE11bHRpRmlsZVNpbmsgKiBtdWx0aWZpbGVzaW5rLAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsIHN0cmVhbV90aW1lOwotICBndWludDY0IG9mZnNldCwgb2Zmc2V0X2VuZDsKLSAgR3N0U2VnbWVudCAqc2VnbWVudDsKLSAgR3N0Rm9ybWF0IGZvcm1hdDsKLQotICBpZiAoIW11bHRpZmlsZXNpbmstPnBvc3RfbWVzc2FnZXMpCi0gICAgcmV0dXJuOwotCi0gIHNlZ21lbnQgPSAmR1NUX0JBU0VfU0lOSyAobXVsdGlmaWxlc2luayktPnNlZ21lbnQ7Ci0gIGZvcm1hdCA9IHNlZ21lbnQtPmZvcm1hdDsKLQotICBvZmZzZXQgPSAtMTsKLSAgb2Zmc2V0X2VuZCA9IC0xOwotCi0gIHJ1bm5pbmdfdGltZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoc2VnbWVudCwgZm9ybWF0LCB0aW1lc3RhbXApOwotICBzdHJlYW1fdGltZSA9IGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lIChzZWdtZW50LCBmb3JtYXQsIHRpbWVzdGFtcCk7Ci0KLSAgZ3N0X211bHRpX2ZpbGVfc2lua19wb3N0X21lc3NhZ2VfZnVsbCAobXVsdGlmaWxlc2luaywgdGltZXN0YW1wLCBkdXJhdGlvbiwKLSAgICAgIG9mZnNldCwgb2Zmc2V0X2VuZCwgcnVubmluZ190aW1lLCBzdHJlYW1fdGltZSwgZmlsZW5hbWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc2lua19wb3N0X21lc3NhZ2UgKEdzdE11bHRpRmlsZVNpbmsgKiBtdWx0aWZpbGVzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lLCBzdHJlYW1fdGltZTsKLSAgZ3VpbnQ2NCBvZmZzZXQsIG9mZnNldF9lbmQ7Ci0gIEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgaWYgKCFtdWx0aWZpbGVzaW5rLT5wb3N0X21lc3NhZ2VzKQotICAgIHJldHVybjsKLQotICBzZWdtZW50ID0gJkdTVF9CQVNFX1NJTksgKG11bHRpZmlsZXNpbmspLT5zZWdtZW50OwotICBmb3JtYXQgPSBzZWdtZW50LT5mb3JtYXQ7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLSAgb2Zmc2V0ID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcik7Ci0gIG9mZnNldF9lbmQgPSBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlcik7Ci0KLSAgcnVubmluZ190aW1lID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lIChzZWdtZW50LCBmb3JtYXQsIHRpbWVzdGFtcCk7Ci0gIHN0cmVhbV90aW1lID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKHNlZ21lbnQsIGZvcm1hdCwgdGltZXN0YW1wKTsKLQotICBnc3RfbXVsdGlfZmlsZV9zaW5rX3Bvc3RfbWVzc2FnZV9mdWxsIChtdWx0aWZpbGVzaW5rLCB0aW1lc3RhbXAsIGR1cmF0aW9uLAotICAgICAgb2Zmc2V0LCBvZmZzZXRfZW5kLCBydW5uaW5nX3RpbWUsIHN0cmVhbV90aW1lLCBmaWxlbmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpX2ZpbGVfc2lua193cml0ZV9zdHJlYW1faGVhZGVycyAoR3N0TXVsdGlGaWxlU2luayAqIHNpbmspCi17Ci0gIGludCBpOwotCi0gIGlmIChzaW5rLT5zdHJlYW1oZWFkZXJzID09IE5VTEwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogd2Ugd2FudCB0byB3cml0ZSB0aGVzZSBhdCB0aGUgYmVnaW5uaW5nICovCi0gIGdfYXNzZXJ0IChzaW5rLT5jdXJfZmlsZV9zaXplID09IDApOwotCi0gIGZvciAoaSA9IDA7IGkgPCBzaW5rLT5uX3N0cmVhbWhlYWRlcnM7IGkrKykgewotICAgIEdzdEJ1ZmZlciAqaGRyOwotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGludCByZXQ7Ci0KLSAgICBoZHIgPSBzaW5rLT5zdHJlYW1oZWFkZXJzW2ldOwotICAgIGdzdF9idWZmZXJfbWFwIChoZHIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmV0ID0gZndyaXRlIChtYXAuZGF0YSwgbWFwLnNpemUsIDEsIHNpbmstPmZpbGUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGhkciwgJm1hcCk7Ci0KLSAgICBpZiAocmV0ICE9IDEpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBzaW5rLT5jdXJfZmlsZV9zaXplICs9IG1hcC5zaXplOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXVsdGlfZmlsZV9zaW5rX3dyaXRlX2J1ZmZlciAoR3N0TXVsdGlGaWxlU2luayAqIG11bHRpZmlsZXNpbmssCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2NoYXIgKmZpbGVuYW1lOwotICBnYm9vbGVhbiByZXQ7Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBnYm9vbGVhbiBmaXJzdF9maWxlID0gVFJVRTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIHN3aXRjaCAobXVsdGlmaWxlc2luay0+bmV4dF9maWxlKSB7Ci0gICAgY2FzZSBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfQlVGRkVSOgotICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19lbnN1cmVfbWF4X2ZpbGVzIChtdWx0aWZpbGVzaW5rKTsKLQotICAgICAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKG11bHRpZmlsZXNpbmstPmZpbGVuYW1lLAotICAgICAgICAgIG11bHRpZmlsZXNpbmstPmluZGV4KTsKLSAgICAgIHJldCA9IGdfZmlsZV9zZXRfY29udGVudHMgKGZpbGVuYW1lLCAoY2hhciAqKSBtYXAuZGF0YSwgbWFwLnNpemUsICZlcnJvcik7Ci0gICAgICBpZiAoIXJldCkKLSAgICAgICAgZ290byB3cml0ZV9lcnJvcjsKLQotICAgICAgbXVsdGlmaWxlc2luay0+ZmlsZXMgPSBnX3NsaXN0X2FwcGVuZCAobXVsdGlmaWxlc2luay0+ZmlsZXMsIGZpbGVuYW1lKTsKLSAgICAgIG11bHRpZmlsZXNpbmstPm5fZmlsZXMgKz0gMTsKLQotICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19wb3N0X21lc3NhZ2UgKG11bHRpZmlsZXNpbmssIGJ1ZmZlciwgZmlsZW5hbWUpOwotICAgICAgbXVsdGlmaWxlc2luay0+aW5kZXgrKzsKLQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfRElTQ09OVDoKLSAgICAgIGlmIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKGJ1ZmZlcikpIHsKLSAgICAgICAgaWYgKG11bHRpZmlsZXNpbmstPmZpbGUpCi0gICAgICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19jbG9zZV9maWxlIChtdWx0aWZpbGVzaW5rLCBidWZmZXIpOwotICAgICAgfQotCi0gICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghZ3N0X211bHRpX2ZpbGVfc2lua19vcGVuX25leHRfZmlsZSAobXVsdGlmaWxlc2luaykpCi0gICAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLSAgICAgIH0KLQotICAgICAgcmV0ID0gZndyaXRlIChtYXAuZGF0YSwgbWFwLnNpemUsIDEsIG11bHRpZmlsZXNpbmstPmZpbGUpOwotICAgICAgaWYgKHJldCAhPSAxKQotICAgICAgICBnb3RvIHN0ZGlvX3dyaXRlX2Vycm9yOwotCi0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9LRVlfRlJBTUU6Ci0gICAgICBpZiAobXVsdGlmaWxlc2luay0+bmV4dF9zZWdtZW50ID09IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgICAgaWYgKEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWZmZXIpKSB7Ci0gICAgICAgICAgbXVsdGlmaWxlc2luay0+bmV4dF9zZWdtZW50ID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgKwotICAgICAgICAgICAgICAxMCAqIEdTVF9TRUNPTkQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWZmZXIpICYmCi0gICAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPj0gbXVsdGlmaWxlc2luay0+bmV4dF9zZWdtZW50ICYmCi0gICAgICAgICAgIUdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKSB7Ci0gICAgICAgIGlmIChtdWx0aWZpbGVzaW5rLT5maWxlKSB7Ci0gICAgICAgICAgZmlyc3RfZmlsZSA9IEZBTFNFOwotICAgICAgICAgIGdzdF9tdWx0aV9maWxlX3NpbmtfY2xvc2VfZmlsZSAobXVsdGlmaWxlc2luaywgYnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICBtdWx0aWZpbGVzaW5rLT5uZXh0X3NlZ21lbnQgKz0gMTAgKiBHU1RfU0VDT05EOwotICAgICAgfQotCi0gICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghZ3N0X211bHRpX2ZpbGVfc2lua19vcGVuX25leHRfZmlsZSAobXVsdGlmaWxlc2luaykpCi0gICAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLQotICAgICAgICBpZiAoIWZpcnN0X2ZpbGUpCi0gICAgICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua193cml0ZV9zdHJlYW1faGVhZGVycyAobXVsdGlmaWxlc2luayk7Ci0gICAgICB9Ci0KLSAgICAgIHJldCA9IGZ3cml0ZSAobWFwLmRhdGEsIG1hcC5zaXplLCAxLCBtdWx0aWZpbGVzaW5rLT5maWxlKTsKLSAgICAgIGlmIChyZXQgIT0gMSkKLSAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfS0VZX1VOSVRfRVZFTlQ6Ci0gICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghZ3N0X211bHRpX2ZpbGVfc2lua19vcGVuX25leHRfZmlsZSAobXVsdGlmaWxlc2luaykpCi0gICAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLQotICAgICAgICAvKiB3ZSBkb24ndCBuZWVkIHRvIHdyaXRlIHN0cmVhbSBoZWFkZXJzIGhlcmUsIHRoZXkgd2lsbCBiZSBpbnNlcnRlZCBpbgotICAgICAgICAgKiB0aGUgc3RyZWFtIGJ5IHVwc3RyZWFtIGVsZW1lbnRzIGlmIGtleSB1bml0IGV2ZW50cyBoYXZlCi0gICAgICAgICAqIGFsbF9oZWFkZXJzPXRydWUgc2V0Ci0gICAgICAgICAqLwotICAgICAgfQotCi0gICAgICByZXQgPSBmd3JpdGUgKG1hcC5kYXRhLCBtYXAuc2l6ZSwgMSwgbXVsdGlmaWxlc2luay0+ZmlsZSk7Ci0KLSAgICAgIGlmIChyZXQgIT0gMSkKLSAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfTUFYX1NJWkU6ewotICAgICAgZ3VpbnQ2NCBuZXdfc2l6ZTsKLQotICAgICAgbmV3X3NpemUgPSBtdWx0aWZpbGVzaW5rLT5jdXJfZmlsZV9zaXplICsgbWFwLnNpemU7Ci0gICAgICBpZiAobmV3X3NpemUgPiBtdWx0aWZpbGVzaW5rLT5tYXhfZmlsZV9zaXplKSB7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChtdWx0aWZpbGVzaW5rLCAiY3VycmVudCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiLCBuZXdfc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBtYXguIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICAgICAgIG11bHRpZmlsZXNpbmstPmN1cl9maWxlX3NpemUsIG5ld19zaXplLAotICAgICAgICAgICAgbXVsdGlmaWxlc2luay0+bWF4X2ZpbGVfc2l6ZSk7Ci0KLSAgICAgICAgaWYgKG11bHRpZmlsZXNpbmstPmZpbGUgIT0gTlVMTCkgewotICAgICAgICAgIGZpcnN0X2ZpbGUgPSBGQUxTRTsKLSAgICAgICAgICBnc3RfbXVsdGlfZmlsZV9zaW5rX2Nsb3NlX2ZpbGUgKG11bHRpZmlsZXNpbmssIGJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKG11bHRpZmlsZXNpbmstPmZpbGUgPT0gTlVMTCkgewotICAgICAgICBpZiAoIWdzdF9tdWx0aV9maWxlX3Npbmtfb3Blbl9uZXh0X2ZpbGUgKG11bHRpZmlsZXNpbmspKQotICAgICAgICAgIGdvdG8gc3RkaW9fd3JpdGVfZXJyb3I7Ci0KLSAgICAgICAgaWYgKCFmaXJzdF9maWxlKQotICAgICAgICAgIGdzdF9tdWx0aV9maWxlX3Npbmtfd3JpdGVfc3RyZWFtX2hlYWRlcnMgKG11bHRpZmlsZXNpbmspOwotICAgICAgfQotCi0gICAgICByZXQgPSBmd3JpdGUgKG1hcC5kYXRhLCBtYXAuc2l6ZSwgMSwgbXVsdGlmaWxlc2luay0+ZmlsZSk7Ci0KLSAgICAgIGlmIChyZXQgIT0gMSkKLSAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLQotICAgICAgbXVsdGlmaWxlc2luay0+Y3VyX2ZpbGVfc2l6ZSArPSBtYXAuc2l6ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9NQVhfRFVSQVRJT046ewotICAgICAgR3N0Q2xvY2tUaW1lIG5ld19kdXJhdGlvbiA9IDA7Ci0KLSAgICAgIGlmIChHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmZmVyKQotICAgICAgICAgICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChtdWx0aWZpbGVzaW5rLT5maWxlX3B0cykpIHsKLSAgICAgICAgLyogVGhlIG5ldyBkdXJhdGlvbiB3aWxsIGV4dGVuZCB0byB0aGlzIG5ldyBidWZmZXIgcHRzIC4uLiAqLwotICAgICAgICBuZXdfZHVyYXRpb24gPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSAtIG11bHRpZmlsZXNpbmstPmZpbGVfcHRzOwotICAgICAgICAvKiAuLi4gYW5kIGR1cmF0aW9uIChpZiBpdCBoYXMgb25lKSAqLwotICAgICAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSkKLSAgICAgICAgICBuZXdfZHVyYXRpb24gKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG5ld19kdXJhdGlvbiA+IG11bHRpZmlsZXNpbmstPm1heF9maWxlX2R1cmF0aW9uKSB7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChtdWx0aWZpbGVzaW5rLAotICAgICAgICAgICAgIm5ld19kdXJhdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBtYXguIGR1cmF0aW9uICUiCi0gICAgICAgICAgICBHX0dVSU5UNjRfRk9STUFULCBuZXdfZHVyYXRpb24sIG11bHRpZmlsZXNpbmstPm1heF9maWxlX2R1cmF0aW9uKTsKLQotICAgICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgZmlyc3RfZmlsZSA9IEZBTFNFOwotICAgICAgICAgIGdzdF9tdWx0aV9maWxlX3NpbmtfY2xvc2VfZmlsZSAobXVsdGlmaWxlc2luaywgYnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghZ3N0X211bHRpX2ZpbGVfc2lua19vcGVuX25leHRfZmlsZSAobXVsdGlmaWxlc2luaykpCi0gICAgICAgICAgZ290byBzdGRpb193cml0ZV9lcnJvcjsKLQotICAgICAgICBtdWx0aWZpbGVzaW5rLT5maWxlX3B0cyA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICAgICAgICBpZiAoIWZpcnN0X2ZpbGUpCi0gICAgICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua193cml0ZV9zdHJlYW1faGVhZGVycyAobXVsdGlmaWxlc2luayk7Ci0gICAgICB9Ci0KLSAgICAgIHJldCA9IGZ3cml0ZSAobWFwLmRhdGEsIG1hcC5zaXplLCAxLCBtdWx0aWZpbGVzaW5rLT5maWxlKTsKLQotICAgICAgaWYgKHJldCAhPSAxKQotICAgICAgICBnb3RvIHN0ZGlvX3dyaXRlX2Vycm9yOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotd3JpdGVfZXJyb3I6Ci0gIHsKLSAgICBzd2l0Y2ggKGVycm9yLT5jb2RlKSB7Ci0gICAgICBjYXNlIEdfRklMRV9FUlJPUl9OT1NQQzp7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdWx0aWZpbGVzaW5rLCBSRVNPVVJDRSwgTk9fU1BBQ0VfTEVGVCwgKE5VTEwpLAotICAgICAgICAgICAgKE5VTEwpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OnsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG11bHRpZmlsZXNpbmssIFJFU09VUkNFLCBXUklURSwKLSAgICAgICAgICAgICgiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlIFwiJXNcIi4iLCBmaWxlbmFtZSksCi0gICAgICAgICAgICAoIiVzIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXN0ZGlvX3dyaXRlX2Vycm9yOgotICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgY2FzZSBFTk9TUEM6Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXVsdGlmaWxlc2luaywgUkVTT1VSQ0UsIE5PX1NQQUNFX0xFRlQsCi0gICAgICAgICAgKCJFcnJvciB3aGlsZSB3cml0aW5nIHRvIGZpbGUuIiksICgiJXMiLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXVsdGlmaWxlc2luaywgUkVTT1VSQ0UsIFdSSVRFLAotICAgICAgICAgICgiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlLiIpLCAoIiVzIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X211bHRpX2ZpbGVfc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TXVsdGlGaWxlU2luayAqc2luayA9IEdTVF9NVUxUSV9GSUxFX1NJTksgKGJzaW5rKTsKLSAgR3N0Rmxvd1JldHVybiBmbG93ID0gR1NUX0ZMT1dfT0s7Ci0gIGdib29sZWFuIGtleV91bml0LCBoZWFkZXI7Ci0KLSAgaGVhZGVyID0gR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfSEVBREVSKTsKLSAga2V5X3VuaXQgPSAhR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCk7Ci0KLSAgaWYgKHNpbmstPmFnZ3JlZ2F0ZV9nb3BzKSB7Ci0gICAgR3N0QnVmZmVyICpnb3BfYnVmZmVyID0gTlVMTDsKLSAgICBndWludCBhdmFpbDsKLQotICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChzaW5rLT5nb3BfYWRhcHRlcik7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc2luaywgImFnZ3JlZ2F0ZSBHT1A6IHJlY2VpdmVkICVzJXMgdW5pdCBidWZmZXI6ICIKLSAgICAgICAgIiUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAoa2V5X3VuaXQpID8gImtleSIgOiAiZGVsdGEiLCAoaGVhZGVyKSA/ICIgaGVhZGVyIiA6ICIiLCBidWZmZXIpOwotCi0gICAgLyogSWYgaXQncyBhIGhlYWRlciBidWZmZXIsIGl0IG1pZ2h0IHBvdGVudGlhbGx5IGJlIGZvciB0aGUgbmV4dCBHT1AgKi8KLSAgICBpZiAoaGVhZGVyKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc2luaywgIkFjY3VtdWxhdGluZyBidWZmZXIgdG8gcG90ZW50aWFsIG5leHQgR09QIik7Ci0gICAgICBzaW5rLT5wb3RlbnRpYWxfbmV4dF9nb3AgPQotICAgICAgICAgIGdfbGlzdF9hcHBlbmQgKHNpbmstPnBvdGVudGlhbF9uZXh0X2dvcCwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoa2V5X3VuaXQgJiYgYXZhaWwgPiAwKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBwdHMsIGR0czsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJHcmFiYmluZyBwZW5kaW5nIGNvbXBsZXRlZCBHT1AiKTsKLSAgICAgICAgcHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHNfYXRfb2Zmc2V0IChzaW5rLT5nb3BfYWRhcHRlciwgMCwgTlVMTCk7Ci0gICAgICAgIGR0cyA9IGdzdF9hZGFwdGVyX3ByZXZfZHRzX2F0X29mZnNldCAoc2luay0+Z29wX2FkYXB0ZXIsIDAsIE5VTEwpOwotICAgICAgICBnb3BfYnVmZmVyID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHNpbmstPmdvcF9hZGFwdGVyLCBhdmFpbCk7Ci0gICAgICAgIEdTVF9CVUZGRVJfUFRTIChnb3BfYnVmZmVyKSA9IHB0czsKLSAgICAgICAgR1NUX0JVRkZFUl9EVFMgKGdvcF9idWZmZXIpID0gZHRzOwotICAgICAgfQotCi0gICAgICAvKiBqdXN0IGFjY3VtdWxhdGUgdGhlIGJ1ZmZlciAqLwotICAgICAgaWYgKHNpbmstPnBvdGVudGlhbF9uZXh0X2dvcCkgewotICAgICAgICBHTGlzdCAqdG1wOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAoc2luaywKLSAgICAgICAgICAgICJDYXJyeWluZyBvdmVyIHBlbmRpbmcgbmV4dCBHT1AgZGF0YSBpbnRvIGFkYXB0ZXIiKTsKLSAgICAgICAgLyogSWYgd2UgaGF2ZSBwZW5kaW5nIGRhdGEsIHB1dCB0aGF0IGZpcnN0IGluIHRoZSBhZGFwdGVyICovCi0gICAgICAgIGZvciAodG1wID0gc2luay0+cG90ZW50aWFsX25leHRfZ29wOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgewotICAgICAgICAgIEdzdEJ1ZmZlciAqdG1wYiA9IChHc3RCdWZmZXIgKikgdG1wLT5kYXRhOwotICAgICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHNpbmstPmdvcF9hZGFwdGVyLCB0bXBiKTsKLSAgICAgICAgfQotICAgICAgICBnX2xpc3RfZnJlZSAoc2luay0+cG90ZW50aWFsX25leHRfZ29wKTsKLSAgICAgICAgc2luay0+cG90ZW50aWFsX25leHRfZ29wID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAic3RvcmluZyBidWZmZXIgaW4gYWRhcHRlciIpOwotICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAoc2luay0+Z29wX2FkYXB0ZXIsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKTsKLQotICAgICAgaWYgKGdvcF9idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAid3JpdGluZyBvdXQgcGVuZGluZyBHT1AsICV1IGJ5dGVzIiwgYXZhaWwpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLAotICAgICAgICAgICAgImdvcCBidWZmZXIgcHRzOiUiIEdTVF9USU1FX0ZPUk1BVCAiIGR0czolIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAgICIgZHVyYXRpb246JSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKGdvcF9idWZmZXIpKSwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTIChnb3BfYnVmZmVyKSksCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChnb3BfYnVmZmVyKSkpOwotICAgICAgICBmbG93ID0gZ3N0X211bHRpX2ZpbGVfc2lua193cml0ZV9idWZmZXIgKHNpbmssIGdvcF9idWZmZXIpOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChnb3BfYnVmZmVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZmxvdyA9IGdzdF9tdWx0aV9maWxlX3Npbmtfd3JpdGVfYnVmZmVyIChzaW5rLCBidWZmZXIpOwotICB9Ci0gIHJldHVybiBmbG93OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1ZmZlcl9saXN0X2NhbGNfc2l6ZSAoR3N0QnVmZmVyICoqIGJ1ZiwgZ3VpbnQgaWR4LCBncG9pbnRlciBkYXRhKQotewotICBndWludCAqcF9zaXplID0gZGF0YTsKLSAgZ3NpemUgYnVmX3NpemU7Ci0KLSAgYnVmX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplICgqYnVmKTsKLSAgR1NUX1RSQUNFICgiYnVmZmVyICV1IGhhcyBzaXplICUiIEdfR1NJWkVfRk9STUFULCBpZHgsIGJ1Zl9zaXplKTsKLSAgKnBfc2l6ZSArPSBidWZfc2l6ZTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1idWZmZXJfbGlzdF9jb3B5X2RhdGEgKEdzdEJ1ZmZlciAqKiBidWYsIGd1aW50IGlkeCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0QnVmZmVyICpkZXN0ID0gZGF0YTsKLSAgZ3VpbnQgbnVtLCBpOwotCi0gIGlmIChpZHggPT0gMCkKLSAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAoZGVzdCwgKmJ1ZiwgR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBLCAwLCAtMSk7Ci0KLSAgbnVtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSAoKmJ1Zik7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotICAgIEdzdE1lbW9yeSAqbWVtOwotCi0gICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5ICgqYnVmLCBpKTsKLSAgICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGRlc3QsIG1lbSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogT3VyIGFzc3VtcHRpb24gZm9yIG5vdyBpcyB0aGF0IHRoZSBidWZmZXJzIGluIGEgYnVmZmVyIGxpc3Qgc2hvdWxkIGFsd2F5cwotICogZW5kIHVwIGluIHRoZSBzYW1lIGZpbGUuIElmIHNvbWVvbmUgd2FudHMgZGlmZmVyZW50IGJlaGF2aW91ciwgdGhleSdsbCBqdXN0Ci0gKiBoYXZlIHRvIGFkZCBhIHByb3BlcnR5IGZvciB0aGF0LiAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9tdWx0aV9maWxlX3NpbmtfcmVuZGVyX2xpc3QgKEdzdEJhc2VTaW5rICogc2luaywgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludCBzaXplID0gMDsKLQotICBnc3RfYnVmZmVyX2xpc3RfZm9yZWFjaCAobGlzdCwgYnVmZmVyX2xpc3RfY2FsY19zaXplLCAmc2l6ZSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAidG90YWwgc2l6ZSBvZiBidWZmZXIgbGlzdCAlcDogJXUiLCBsaXN0LCBzaXplKTsKLQotICAvKiBjb3B5IGFsbCBidWZmZXJzIGluIHRoZSBsaXN0IGludG8gb25lIHNpbmdsZSBidWZmZXIsIHNvIHdlIGNhbiB1c2UKLSAgICogdGhlIG5vcm1hbCByZW5kZXIgZnVuY3Rpb24gKEZJWE1FOiBvcHRpbWlzZSB0byBhdm9pZCB0aGUgbWVtY3B5KSAqLwotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIGJ1ZmZlcl9saXN0X2NvcHlfZGF0YSwgYnVmKTsKLSAgZ19hc3NlcnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPT0gc2l6ZSk7Ci0KLSAgZ3N0X211bHRpX2ZpbGVfc2lua19yZW5kZXIgKHNpbmssIGJ1Zik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3Npbmtfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogc2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdE11bHRpRmlsZVNpbmsgKm11bHRpZmlsZXNpbms7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIG11bHRpZmlsZXNpbmsgPSBHU1RfTVVMVElfRklMRV9TSU5LIChzaW5rKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKHN0cnVjdHVyZSkgewotICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJzdHJlYW1oZWFkZXIiKTsKLQotICAgIGlmIChHU1RfVkFMVUVfSE9MRFNfQVJSQVkgKHZhbHVlKSkgewotICAgICAgaW50IGk7Ci0KLSAgICAgIGlmIChtdWx0aWZpbGVzaW5rLT5zdHJlYW1oZWFkZXJzKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtdWx0aWZpbGVzaW5rLT5uX3N0cmVhbWhlYWRlcnM7IGkrKykgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG11bHRpZmlsZXNpbmstPnN0cmVhbWhlYWRlcnNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGdfZnJlZSAobXVsdGlmaWxlc2luay0+c3RyZWFtaGVhZGVycyk7Ci0gICAgICB9Ci0KLSAgICAgIG11bHRpZmlsZXNpbmstPm5fc3RyZWFtaGVhZGVycyA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAodmFsdWUpOwotICAgICAgbXVsdGlmaWxlc2luay0+c3RyZWFtaGVhZGVycyA9Ci0gICAgICAgICAgZ19tYWxsb2MgKHNpemVvZiAoR3N0QnVmZmVyICopICogbXVsdGlmaWxlc2luay0+bl9zdHJlYW1oZWFkZXJzKTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IG11bHRpZmlsZXNpbmstPm5fc3RyZWFtaGVhZGVyczsgaSsrKSB7Ci0gICAgICAgIG11bHRpZmlsZXNpbmstPnN0cmVhbWhlYWRlcnNbaV0gPQotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGdzdF92YWx1ZV9nZXRfYnVmZmVyIChnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlCi0gICAgICAgICAgICAgICAgKHZhbHVlLCBpKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc2lua19lbnN1cmVfbWF4X2ZpbGVzIChHc3RNdWx0aUZpbGVTaW5rICogbXVsdGlmaWxlc2luaykKLXsKLSAgY2hhciAqZmlsZW5hbWU7Ci0KLSAgd2hpbGUgKG11bHRpZmlsZXNpbmstPm1heF9maWxlcyAmJgotICAgICAgbXVsdGlmaWxlc2luay0+bl9maWxlcyA+PSBtdWx0aWZpbGVzaW5rLT5tYXhfZmlsZXMpIHsKLSAgICBmaWxlbmFtZSA9IG11bHRpZmlsZXNpbmstPmZpbGVzLT5kYXRhOwotICAgIGdfcmVtb3ZlIChmaWxlbmFtZSk7Ci0gICAgZ19mcmVlIChmaWxlbmFtZSk7Ci0gICAgbXVsdGlmaWxlc2luay0+ZmlsZXMgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChtdWx0aWZpbGVzaW5rLT5maWxlcywKLSAgICAgICAgbXVsdGlmaWxlc2luay0+ZmlsZXMpOwotICAgIG11bHRpZmlsZXNpbmstPm5fZmlsZXMgLT0gMTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3NpbmtfZXZlbnQgKEdzdEJhc2VTaW5rICogc2luaywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0TXVsdGlGaWxlU2luayAqbXVsdGlmaWxlc2luazsKLSAgZ2NoYXIgKmZpbGVuYW1lOwotCi0gIG11bHRpZmlsZXNpbmsgPSBHU1RfTVVMVElfRklMRV9TSU5LIChzaW5rKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTToKLSAgICB7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLSAgICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsIHN0cmVhbV90aW1lOwotICAgICAgZ3VpbnQ2NCBvZmZzZXQsIG9mZnNldF9lbmQ7Ci0gICAgICBnYm9vbGVhbiBhbGxfaGVhZGVyczsKLSAgICAgIGd1aW50IGNvdW50OwotCi0gICAgICBpZiAobXVsdGlmaWxlc2luay0+bmV4dF9maWxlICE9IEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9LRVlfVU5JVF9FVkVOVCB8fAotICAgICAgICAgICFnc3RfdmlkZW9fZXZlbnRfaXNfZm9yY2Vfa2V5X3VuaXQgKGV2ZW50KSkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgIGdzdF92aWRlb19ldmVudF9wYXJzZV9kb3duc3RyZWFtX2ZvcmNlX2tleV91bml0IChldmVudCwgJnRpbWVzdGFtcCwKLSAgICAgICAgICAmc3RyZWFtX3RpbWUsICZydW5uaW5nX3RpbWUsICZhbGxfaGVhZGVycywgJmNvdW50KTsKLQotICAgICAgaWYgKG11bHRpZmlsZXNpbmstPmZvcmNlX2tleV91bml0X2NvdW50ICE9IC0xICYmCi0gICAgICAgICAgbXVsdGlmaWxlc2luay0+Zm9yY2Vfa2V5X3VuaXRfY291bnQgPT0gY291bnQpCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgICBtdWx0aWZpbGVzaW5rLT5mb3JjZV9rZXlfdW5pdF9jb3VudCA9IGNvdW50OwotCi0gICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSkgewotICAgICAgICBkdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICAgIG9mZnNldCA9IG9mZnNldF9lbmQgPSAtMTsKLSAgICAgICAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKG11bHRpZmlsZXNpbmstPmZpbGVuYW1lLAotICAgICAgICAgICAgbXVsdGlmaWxlc2luay0+aW5kZXgpOwotCi0gICAgICAgIGdzdF9tdWx0aV9maWxlX3NpbmtfY2xvc2VfZmlsZSAobXVsdGlmaWxlc2luaywgTlVMTCk7Ci0KLSAgICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19wb3N0X21lc3NhZ2VfZnVsbCAobXVsdGlmaWxlc2luaywgdGltZXN0YW1wLAotICAgICAgICAgICAgZHVyYXRpb24sIG9mZnNldCwgb2Zmc2V0X2VuZCwgcnVubmluZ190aW1lLCBzdHJlYW1fdGltZSwgZmlsZW5hbWUpOwotICAgICAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG11bHRpZmlsZXNpbmstPmZpbGUgPT0gTlVMTCkgewotICAgICAgICBpZiAoIWdzdF9tdWx0aV9maWxlX3Npbmtfb3Blbl9uZXh0X2ZpbGUgKG11bHRpZmlsZXNpbmspKQotICAgICAgICAgIGdvdG8gc3RkaW9fd3JpdGVfZXJyb3I7Ci0gICAgICB9Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBpZiAobXVsdGlmaWxlc2luay0+YWdncmVnYXRlX2dvcHMpIHsKLSAgICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLQotICAgICAgICAvKiBwdXNoIGtleSB1bml0IGJ1ZmZlciB0byBmb3JjZSB3cml0aW5nIG91dCB0aGUgcGVuZGluZyBHT1AgZGF0YSAqLwotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNpbmssICJFT1MsIHdyaXRlIHBlbmRpbmcgR09QIGRhdGEiKTsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19yZW5kZXIgKHNpbmssIGJ1Zik7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICB9Ci0gICAgICBpZiAobXVsdGlmaWxlc2luay0+ZmlsZSkgewotICAgICAgICBnY2hhciAqZmlsZW5hbWU7Ci0KLSAgICAgICAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKG11bHRpZmlsZXNpbmstPmZpbGVuYW1lLAotICAgICAgICAgICAgbXVsdGlmaWxlc2luay0+aW5kZXgpOwotCi0gICAgICAgIGdzdF9tdWx0aV9maWxlX3NpbmtfY2xvc2VfZmlsZSAobXVsdGlmaWxlc2luaywgTlVMTCk7Ci0KLSAgICAgICAgZ3N0X211bHRpX2ZpbGVfc2lua19wb3N0X21lc3NhZ2VfZnJvbV90aW1lIChtdWx0aWZpbGVzaW5rLAotICAgICAgICAgICAgR1NUX0JBU0VfU0lOSyAobXVsdGlmaWxlc2luayktPnNlZ21lbnQucG9zaXRpb24sIC0xLCBmaWxlbmFtZSk7Ci0gICAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLW91dDoKLSAgcmV0dXJuIEdTVF9CQVNFX1NJTktfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmV2ZW50IChzaW5rLCBldmVudCk7Ci0KLSAgLyogRVJST1JTICovCi1zdGRpb193cml0ZV9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdWx0aWZpbGVzaW5rLCBSRVNPVVJDRSwgV1JJVEUsCi0gICAgICAgICgiRXJyb3Igd2hpbGUgd3JpdGluZyB0byBmaWxlLiIpLCAoTlVMTCkpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3Npbmtfb3Blbl9uZXh0X2ZpbGUgKEdzdE11bHRpRmlsZVNpbmsgKiBtdWx0aWZpbGVzaW5rKQotewotICBjaGFyICpmaWxlbmFtZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAobXVsdGlmaWxlc2luay0+ZmlsZSA9PSBOVUxMLCBGQUxTRSk7Ci0KLSAgZ3N0X211bHRpX2ZpbGVfc2lua19lbnN1cmVfbWF4X2ZpbGVzIChtdWx0aWZpbGVzaW5rKTsKLSAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKG11bHRpZmlsZXNpbmstPmZpbGVuYW1lLCBtdWx0aWZpbGVzaW5rLT5pbmRleCk7Ci0gIG11bHRpZmlsZXNpbmstPmZpbGUgPSBnX2ZvcGVuIChmaWxlbmFtZSwgIndiIik7Ci0gIGlmIChtdWx0aWZpbGVzaW5rLT5maWxlID09IE5VTEwpIHsKLSAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKG11bHRpZmlsZXNpbmssICJvcGVuaW5nIGZpbGUgJXMiLCBmaWxlbmFtZSk7Ci0gIG11bHRpZmlsZXNpbmstPmZpbGVzID0gZ19zbGlzdF9hcHBlbmQgKG11bHRpZmlsZXNpbmstPmZpbGVzLCBmaWxlbmFtZSk7Ci0gIG11bHRpZmlsZXNpbmstPm5fZmlsZXMgKz0gMTsKLQotICBtdWx0aWZpbGVzaW5rLT5jdXJfZmlsZV9zaXplID0gMDsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlfZmlsZV9zaW5rX2Nsb3NlX2ZpbGUgKEdzdE11bHRpRmlsZVNpbmsgKiBtdWx0aWZpbGVzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgY2hhciAqZmlsZW5hbWU7Ci0KLSAgZmNsb3NlIChtdWx0aWZpbGVzaW5rLT5maWxlKTsKLSAgbXVsdGlmaWxlc2luay0+ZmlsZSA9IE5VTEw7Ci0KLSAgaWYgKGJ1ZmZlcikgewotICAgIGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmIChtdWx0aWZpbGVzaW5rLT5maWxlbmFtZSwgbXVsdGlmaWxlc2luay0+aW5kZXgpOwotICAgIGdzdF9tdWx0aV9maWxlX3NpbmtfcG9zdF9tZXNzYWdlIChtdWx0aWZpbGVzaW5rLCBidWZmZXIsIGZpbGVuYW1lKTsKLSAgICBnX2ZyZWUgKGZpbGVuYW1lKTsKLSAgfQotCi0gIG11bHRpZmlsZXNpbmstPmluZGV4Kys7Ci19CmRpZmYgLS1naXQgYS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNpbmsuaCBiL2dzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDdjOTVkLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvZ3N0bXVsdGlmaWxlc2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDAwIFdpbSBUYXltYW5zIDx3dGF5QGNoZWxsby5iZT4KLSAqICAgICAgICAgICAgICAgICAgICAyMDA2IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqCi0gKiBnc3RtdWx0aWZpbGVzaW5rLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9NVUxUSUZJTEVTSU5LX0hfXwotI2RlZmluZSBfX0dTVF9NVUxUSUZJTEVTSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2Jhc2UuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX01VTFRJX0ZJTEVfU0lOSyBcCi0gIChnc3RfbXVsdGlfZmlsZV9zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9NVUxUSV9GSUxFX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9NVUxUSV9GSUxFX1NJTkssR3N0TXVsdGlGaWxlU2luaykpCi0jZGVmaW5lIEdTVF9NVUxUSV9GSUxFX1NJTktfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTVVMVElfRklMRV9TSU5LLEdzdE11bHRpRmlsZVNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NVUxUSV9GSUxFX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NVUxUSV9GSUxFX1NJTkspKQotI2RlZmluZSBHU1RfSVNfTVVMVElfRklMRV9TSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX01VTFRJX0ZJTEVfU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aUZpbGVTaW5rIEdzdE11bHRpRmlsZVNpbms7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlGaWxlU2lua0NsYXNzIEdzdE11bHRpRmlsZVNpbmtDbGFzczsKLQotLyoqCi0gKiBHc3RNdWx0aUZpbGVTaW5rTmV4dDoKLSAqIEBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfQlVGRkVSOiBOZXcgZmlsZSBmb3IgZWFjaCBidWZmZXIKLSAqIEBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfRElTQ09OVDogTmV3IGZpbGUgYWZ0ZXIgZWFjaCBkaXNjb250aW51aXR5Ci0gKiBAR1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX0tFWV9GUkFNRTogTmV3IGZpbGUgYXQgZWFjaCBrZXkgZnJhbWUKLSAqICAoVXNlZnVsIGZvciBNUEVHLVRTIHNlZ21lbnRpbmcpCi0gKiBAR1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX0tFWV9VTklUX0VWRU5UOiBOZXcgZmlsZSBhZnRlciBhIGZvcmNlIGtleSB1bml0Ci0gKiAgZXZlbnQKLSAqIEBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfTUFYX1NJWkU6IE5ldyBmaWxlIHdoZW4gdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSBmaWxlCi0gKiAgc2l6ZSB3b3VsZCBiZSBleGNlZWRlZCB3aXRoIHRoZSBuZXh0IGJ1ZmZlciBvciBidWZmZXIgbGlzdAotICogQEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9NQVhfRFVSQVRJT046IE5ldyBmaWxlIHdoZW4gdGhlIGNvbmZpZ3VyZWQgbWF4aW11bSBkdXJhdGlvbgotICogIHdvdWxkIGJlIGV4Y2VlZGVkIHdpdGggdGhlIG5leHQgYnVmZmVyIG9yIGJ1ZmZlciBsaXN0Ci0gKgotICogRmlsZSBzcGxpdHRpbmcgbW9kZXMuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9CVUZGRVIsCi0gIEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9ESVNDT05ULAotICBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfS0VZX0ZSQU1FLAotICBHU1RfTVVMVElfRklMRV9TSU5LX05FWFRfS0VZX1VOSVRfRVZFTlQsCi0gIEdTVF9NVUxUSV9GSUxFX1NJTktfTkVYVF9NQVhfU0laRSwKLSAgR1NUX01VTFRJX0ZJTEVfU0lOS19ORVhUX01BWF9EVVJBVElPTgotfSBHc3RNdWx0aUZpbGVTaW5rTmV4dDsKLQotc3RydWN0IF9Hc3RNdWx0aUZpbGVTaW5rCi17Ci0gIEdzdEJhc2VTaW5rIHBhcmVudDsKLQotICBnY2hhciAqZmlsZW5hbWU7Ci0gIGdpbnQgaW5kZXg7Ci0gIGdib29sZWFuIHBvc3RfbWVzc2FnZXM7Ci0gIEdzdE11bHRpRmlsZVNpbmtOZXh0IG5leHRfZmlsZTsKLSAgRklMRSAqZmlsZTsKLSAgZ3VpbnQgbWF4X2ZpbGVzOwotICBHU0xpc3QgKmZpbGVzOwotICBndWludCBuX2ZpbGVzOwotCi0gIGdpbnQ2NCBuZXh0X3NlZ21lbnQ7Ci0KLSAgaW50IG5fc3RyZWFtaGVhZGVyczsKLSAgR3N0QnVmZmVyICoqc3RyZWFtaGVhZGVyczsKLSAgZ3VpbnQgZm9yY2Vfa2V5X3VuaXRfY291bnQ7Ci0KLSAgZ3VpbnQ2NCBjdXJfZmlsZV9zaXplOwotICBndWludDY0IG1heF9maWxlX3NpemU7Ci0KLSAgR3N0Q2xvY2tUaW1lIGZpbGVfcHRzOwotICBHc3RDbG9ja1RpbWUgbWF4X2ZpbGVfZHVyYXRpb247Ci0KLSAgZ2Jvb2xlYW4gYWdncmVnYXRlX2dvcHM7Ci0gIEdzdEFkYXB0ZXIgKmdvcF9hZGFwdGVyOyAgLyogdG8gYWdncmVnYXRlIEdPUHMgKi8KLSAgR0xpc3QgKnBvdGVudGlhbF9uZXh0X2dvcDsJLyogVG8gZGV0ZWN0IGZhbHNlLXBvc2l0aXZlcyAqLwotfTsKLQotc3RydWN0IF9Hc3RNdWx0aUZpbGVTaW5rQ2xhc3MKLXsKLSAgR3N0QmFzZVNpbmtDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfbXVsdGlfZmlsZV9zaW5rX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01VTFRJRklMRVNJTktfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jIGIvZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyNDY0Mi4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDg0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIGdzdG11bHRpZmlsZXNyYy5jOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tdWx0aWZpbGVzcmMKLSAqIEBzZWVfYWxzbzogI0dzdEZpbGVTcmMKLSAqCi0gKiBSZWFkcyBidWZmZXJzIGZyb20gc2VxdWVudGlhbGx5IG5hbWVkIGZpbGVzLiBJZiB1c2VkIHRvZ2V0aGVyIHdpdGggYW4gaW1hZ2UKLSAqIGRlY29kZXIsIG9uZSBuZWVkcyB0byB1c2UgdGhlICNHc3RNdWx0aUZpbGVTcmM6Y2FwcyBwcm9wZXJ0eSBvciBhIGNhcHNmaWx0ZXIKLSAqIHRvIGZvcmNlIHRvIGNhcHMgY29udGFpbmluZyBhIGZyYW1lcmF0ZS4gT3RoZXJ3aXNlIGltYWdlIGRlY29kZXJzIHNlbmQgRU9TCi0gKiBhZnRlciB0aGUgZmlyc3QgcGljdHVyZS4gV2UgYWxzbyBuZWVkIGEgdmlkZW9yYXRlIGVsZW1lbnQgdG8gc2V0IHRpbWVzdGFtcHMKLSAqIG9uIGFsbCBidWZmZXJzIGFmdGVyIHRoZSBmaXJzdCBvbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBmcmFtZXJhdGUuCi0gKgotICogRmlsZSBuYW1lcyBhcmUgY3JlYXRlZCBieSByZXBsYWNpbmcgIlwlZCIgd2l0aCB0aGUgaW5kZXggdXNpbmcgcHJpbnRmKCkuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIG11bHRpZmlsZXNyYyBsb2NhdGlvbj0iaW1nLiUwNGQucG5nIiBpbmRleD0wIGNhcHM9ImltYWdlL3BuZyxmcmFtZXJhdGU9XChmcmFjdGlvblwpMTIvMSIgISBcCi0gKiAgICAgcG5nZGVjICEgdmlkZW9jb252ZXJ0ICEgdmlkZW9yYXRlICEgdGhlb3JhZW5jICEgb2dnbXV4ICEgXAotICogICAgIGZpbGVzaW5rIGxvY2F0aW9uPSJpbWFnZXMub2dnIgotICogXXwgVGhpcyBwaXBlbGluZSBjcmVhdGVzIGEgdmlkZW8gZmlsZSAiaW1hZ2VzLm9nZyIgYnkgam9pbmluZyBtdWx0aXBsZSBQTkcKLSAqIGZpbGVzIG5hbWVkIGltZy4wMDAwLnBuZywgaW1nLjAwMDEucG5nLCBldGMuCi0gKiA8L3JlZnNlY3QyPgotKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RtdWx0aWZpbGVzcmMuaCIKLQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbXVsdGlfZmlsZV9zcmNfY3JlYXRlIChHc3RQdXNoU3JjICogc3JjLAotICAgIEdzdEJ1ZmZlciAqKiBidWZmZXIpOwotCi1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfZmlsZV9zcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9tdWx0aV9maWxlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbXVsdGlfZmlsZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9tdWx0aV9maWxlX3NyY19nZXRjYXBzIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXVsdGlfZmlsZV9zcmNfcXVlcnkgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfbXVsdGlfZmlsZV9zcmNfcGFkX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X211bHRpX2ZpbGVfc3JjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9tdWx0aV9maWxlX3NyY19kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MT0NBVElPTiwKLSAgUFJPUF9JTkRFWCwKLSAgUFJPUF9TVEFSVF9JTkRFWCwKLSAgUFJPUF9TVE9QX0lOREVYLAotICBQUk9QX0NBUFMsCi0gIFBST1BfTE9PUAotfTsKLQotI2RlZmluZSBERUZBVUxUX0xPQ0FUSU9OICIlMDVkIgotI2RlZmluZSBERUZBVUxUX0lOREVYIDAKLQotI2RlZmluZSBnc3RfbXVsdGlfZmlsZV9zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TXVsdGlGaWxlU3JjLCBnc3RfbXVsdGlfZmlsZV9zcmMsIEdTVF9UWVBFX1BVU0hfU1JDKTsKLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWlzX3NlZWthYmxlIChHc3RCYXNlU3JjICogc3JjKQotewotICBHc3RNdWx0aUZpbGVTcmMgKm1mcyA9IEdTVF9NVUxUSV9GSUxFX1NSQyAoc3JjKTsKLQotICBpZiAobWZzLT5mcHNfbiAhPSAtMSkKLSAgICByZXR1cm4gVFJVRTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG9fc2VlayAoR3N0QmFzZVNyYyAqIGJzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50KQotewotICBnYm9vbGVhbiByZXZlcnNlOwotICBHc3RDbG9ja1RpbWUgcG9zaXRpb247Ci0gIEdzdE11bHRpRmlsZVNyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9NVUxUSV9GSUxFX1NSQyAoYnNyYyk7Ci0KLSAgc2VnbWVudC0+dGltZSA9IHNlZ21lbnQtPnN0YXJ0OwotICBwb3NpdGlvbiA9IHNlZ21lbnQtPnBvc2l0aW9uOwotICByZXZlcnNlID0gc2VnbWVudC0+cmF0ZSA8IDA7Ci0KLSAgaWYgKHJldmVyc2UpIHsKLSAgICBHU1RfRklYTUVfT0JKRUNUIChzcmMsICJIYW5kbGUgcmV2ZXJzZSBwbGF5YmFjayIpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogbm93IG1vdmUgdG8gdGhlIHBvc2l0aW9uIGluZGljYXRlZCAqLwotICBpZiAoc3JjLT5mcHNfbikgewotICAgIHNyYy0+aW5kZXggPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHBvc2l0aW9uLAotICAgICAgICBzcmMtPmZwc19uLCBzcmMtPmZwc19kICogR1NUX1NFQ09ORCk7Ci0gIH0gZWxzZSB7Ci0gICAgc3JjLT5pbmRleCA9IDA7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJObyBGUFMgc2V0LCBjYW4gbm90IHNlZWsiKTsKLQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc3JjX2NsYXNzX2luaXQgKEdzdE11bHRpRmlsZVNyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdFB1c2hTcmNDbGFzcyAqZ3N0cHVzaHNyY19jbGFzcyA9IEdTVF9QVVNIX1NSQ19DTEFTUyAoa2xhc3MpOwotICBHc3RCYXNlU3JjQ2xhc3MgKmdzdGJhc2VzcmNfY2xhc3MgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbXVsdGlfZmlsZV9zcmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfbXVsdGlfZmlsZV9zcmNfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9DQVRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibG9jYXRpb24iLCAiRmlsZSBMb2NhdGlvbiIsCi0gICAgICAgICAgIlBhdHRlcm4gdG8gY3JlYXRlIGZpbGUgbmFtZXMgb2YgaW5wdXQgZmlsZXMuICBGaWxlIG5hbWVzIGFyZSAiCi0gICAgICAgICAgImNyZWF0ZWQgYnkgY2FsbGluZyBzcHJpbnRmKCkgd2l0aCB0aGUgcGF0dGVybiBhbmQgdGhlIGN1cnJlbnQgIgotICAgICAgICAgICJpbmRleC4iLCBERUZBVUxUX0xPQ0FUSU9OLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOREVYLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImluZGV4IiwgIkZpbGUgSW5kZXgiLAotICAgICAgICAgICJJbmRleCB0byB1c2Ugd2l0aCBsb2NhdGlvbiBwcm9wZXJ0eSB0byBjcmVhdGUgZmlsZSBuYW1lcy4gIFRoZSAiCi0gICAgICAgICAgImluZGV4IGlzIGluY3JlbWVudGVkIGJ5IG9uZSBmb3IgZWFjaCBidWZmZXIgcmVhZC4iLAotICAgICAgICAgIDAsIElOVF9NQVgsIERFRkFVTFRfSU5ERVgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBUlRfSU5ERVgsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgic3RhcnQtaW5kZXgiLCAiU3RhcnQgSW5kZXgiLAotICAgICAgICAgICJTdGFydCB2YWx1ZSBvZiBpbmRleC4gIFRoZSBpbml0aWFsIHZhbHVlIG9mIGluZGV4IGNhbiBiZSBzZXQgIgotICAgICAgICAgICJlaXRoZXIgYnkgc2V0dGluZyBpbmRleCBvciBzdGFydC1pbmRleC4gIFdoZW4gdGhlIGVuZCBvZiB0aGUgbG9vcCAiCi0gICAgICAgICAgImlzIHJlYWNoZWQsIHRoZSBpbmRleCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgc3RhcnQtaW5kZXguIiwKLSAgICAgICAgICAwLCBJTlRfTUFYLCBERUZBVUxUX0lOREVYLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUT1BfSU5ERVgsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgic3RvcC1pbmRleCIsICJTdG9wIEluZGV4IiwKLSAgICAgICAgICAiU3RvcCB2YWx1ZSBvZiBpbmRleC4gIFRoZSBzcGVjaWFsIHZhbHVlIC0xIG1lYW5zIG5vIHN0b3AuIiwKLSAgICAgICAgICAtMSwgSU5UX01BWCwgREVGQVVMVF9JTkRFWCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQVBTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiY2FwcyIsICJDYXBzIiwKLSAgICAgICAgICAiQ2FwcyBkZXNjcmliaW5nIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGEuIiwKLSAgICAgICAgICBHU1RfVFlQRV9DQVBTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT09QLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJsb29wIiwgIkxvb3AiLAotICAgICAgICAgICJXaGV0aGVyIHRvIHJlcGVhdCBmcm9tIHRoZSBiZWdpbm5pbmcgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIHJlYWQuIiwKLSAgICAgICAgICBGQUxTRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9tdWx0aV9maWxlX3NyY19kaXNwb3NlOwotCi0gIGdzdGJhc2VzcmNfY2xhc3MtPmdldF9jYXBzID0gZ3N0X211bHRpX2ZpbGVfc3JjX2dldGNhcHM7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnF1ZXJ5ID0gZ3N0X211bHRpX2ZpbGVfc3JjX3F1ZXJ5OwotICBnc3RiYXNlc3JjX2NsYXNzLT5pc19zZWVrYWJsZSA9IGlzX3NlZWthYmxlOwotICBnc3RiYXNlc3JjX2NsYXNzLT5kb19zZWVrID0gZG9fc2VlazsKLQotICBnc3RwdXNoc3JjX2NsYXNzLT5jcmVhdGUgPSBnc3RfbXVsdGlfZmlsZV9zcmNfY3JlYXRlOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfbXVsdGlfZmlsZV9zcmNfZGVidWcsICJtdWx0aWZpbGVzcmMiLCAwLAotICAgICAgIm11bHRpZmlsZXNyYyBlbGVtZW50Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X211bHRpX2ZpbGVfc3JjX3BhZF90ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJNdWx0aS1GaWxlIFNvdXJjZSIsCi0gICAgICAiU291cmNlL0ZpbGUiLCAiUmVhZCBhIHNlcXVlbnRpYWxseSBuYW1lZCBzZXQgb2YgZmlsZXMgaW50byBidWZmZXJzIiwKLSAgICAgICJEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9maWxlX3NyY19pbml0IChHc3RNdWx0aUZpbGVTcmMgKiBtdWx0aWZpbGVzcmMpCi17Ci0gIG11bHRpZmlsZXNyYy0+c3RhcnRfaW5kZXggPSBERUZBVUxUX0lOREVYOwotICBtdWx0aWZpbGVzcmMtPmluZGV4ID0gREVGQVVMVF9JTkRFWDsKLSAgbXVsdGlmaWxlc3JjLT5zdG9wX2luZGV4ID0gLTE7Ci0gIG11bHRpZmlsZXNyYy0+ZmlsZW5hbWUgPSBnX3N0cmR1cCAoREVGQVVMVF9MT0NBVElPTik7Ci0gIG11bHRpZmlsZXNyYy0+c3VjY2Vzc2Z1bF9yZWFkID0gRkFMU0U7Ci0gIG11bHRpZmlsZXNyYy0+ZnBzX24gPSBtdWx0aWZpbGVzcmMtPmZwc19kID0gLTE7Ci0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9maWxlX3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RNdWx0aUZpbGVTcmMgKnNyYyA9IEdTVF9NVUxUSV9GSUxFX1NSQyAob2JqZWN0KTsKLQotICBnX2ZyZWUgKHNyYy0+ZmlsZW5hbWUpOwotICBzcmMtPmZpbGVuYW1lID0gTlVMTDsKLSAgaWYgKHNyYy0+Y2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAoc3JjLT5jYXBzKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X211bHRpX2ZpbGVfc3JjX2dldGNhcHMgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdE11bHRpRmlsZVNyYyAqbXVsdGlfZmlsZV9zcmMgPSBHU1RfTVVMVElfRklMRV9TUkMgKHNyYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmV0dXJuaW5nICUiIEdTVF9QVFJfRk9STUFULCBtdWx0aV9maWxlX3NyYy0+Y2Fwcyk7Ci0KLSAgaWYgKG11bHRpX2ZpbGVfc3JjLT5jYXBzKSB7Ci0gICAgaWYgKGZpbHRlcikKLSAgICAgIHJldHVybiBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBtdWx0aV9maWxlX3NyYy0+Y2FwcywKLSAgICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGVsc2UKLSAgICAgIHJldHVybiBnc3RfY2Fwc19yZWYgKG11bHRpX2ZpbGVfc3JjLT5jYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoZmlsdGVyKQotICAgICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoZmlsdGVyKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3NyY19xdWVyeSAoR3N0QmFzZVNyYyAqIHNyYywgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RNdWx0aUZpbGVTcmMgKm1mc3JjOwotCi0gIG1mc3JjID0gR1NUX01VTFRJX0ZJTEVfU1JDIChzcmMpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JVRkZFUlM6Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9ERUZBVUxUOgotICAgICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBmb3JtYXQsCi0gICAgICAgICAgICAgIG1mc3JjLT5pbmRleCAtIG1mc3JjLT5zdGFydF9pbmRleCk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChzcmMsIHF1ZXJ5KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5xdWVyeSAoc3JjLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aV9maWxlX3NyY19zZXRfbG9jYXRpb24gKEdzdE11bHRpRmlsZVNyYyAqIHNyYywgY29uc3QgZ2NoYXIgKiBsb2NhdGlvbikKLXsKLSAgZ19mcmVlIChzcmMtPmZpbGVuYW1lKTsKLSAgaWYgKGxvY2F0aW9uICE9IE5VTEwpIHsKLSAgICBzcmMtPmZpbGVuYW1lID0gZ19zdHJkdXAgKGxvY2F0aW9uKTsKLSAgfSBlbHNlIHsKLSAgICBzcmMtPmZpbGVuYW1lID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpX2ZpbGVfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RNdWx0aUZpbGVTcmMgKnNyYyA9IEdTVF9NVUxUSV9GSUxFX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTE9DQVRJT046Ci0gICAgICBnc3RfbXVsdGlfZmlsZV9zcmNfc2V0X2xvY2F0aW9uIChzcmMsIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTkRFWDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICAgIC8qIGluZGV4IHdhcyByZWFsbHkgbWVhbnQgdG8gYmUgcmVhZC1vbmx5LCBidXQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5Ci0gICAgICAgKiB3ZSBzZXQgc3RhcnRfaW5kZXggdG8gbWFrZSBpdCB3b3JrIGFzIGl0IHVzZWQgdG8gKi8KLSAgICAgIGlmICghR1NUX09CSkVDVF9GTEFHX0lTX1NFVCAoc3JjLCBHU1RfQkFTRV9TUkNfRkxBR19TVEFSVEVEKSkKLSAgICAgICAgc3JjLT5zdGFydF9pbmRleCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZWxzZQotICAgICAgICBzcmMtPmluZGV4ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVEFSVF9JTkRFWDoKLSAgICAgIHNyYy0+c3RhcnRfaW5kZXggPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVE9QX0lOREVYOgotICAgICAgc3JjLT5zdG9wX2luZGV4ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnN0ID0gTlVMTDsKLSAgICAgIGNvbnN0IEdzdENhcHMgKmNhcHMgPSBnc3RfdmFsdWVfZ2V0X2NhcHMgKHZhbHVlKTsKLSAgICAgIEdzdENhcHMgKm5ld19jYXBzOwotCi0gICAgICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgICAgIG5ld19jYXBzID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld19jYXBzID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0gICAgICB9Ci0gICAgICBnc3RfY2Fwc19yZXBsYWNlICgmc3JjLT5jYXBzLCBuZXdfY2Fwcyk7Ci0gICAgICBnc3RfcGFkX3NldF9jYXBzIChHU1RfQkFTRV9TUkNfUEFEIChzcmMpLCBuZXdfY2Fwcyk7Ci0KLSAgICAgIGlmIChuZXdfY2FwcyAmJiBnc3RfY2Fwc19nZXRfc2l6ZSAobmV3X2NhcHMpID09IDEgJiYKLSAgICAgICAgICAoc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChuZXdfY2FwcywgMCkpCi0gICAgICAgICAgJiYgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKHN0LCAiZnJhbWVyYXRlIiwgJnNyYy0+ZnBzX24sCi0gICAgICAgICAgICAgICZzcmMtPmZwc19kKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgIlNldGluZyBmcmFtZXJhdGUgdG8gJWQvJWQiLCBzcmMtPmZwc19uLAotICAgICAgICAgICAgc3JjLT5mcHNfZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzcmMtPmZwc19uID0gLTE7Ci0gICAgICAgIHNyYy0+ZnBzX2QgPSAtMTsKLSAgICAgIH0KLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9PUDoKLSAgICAgIHNyYy0+bG9vcCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aV9maWxlX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TXVsdGlGaWxlU3JjICpzcmMgPSBHU1RfTVVMVElfRklMRV9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3JjLT5maWxlbmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5ERVg6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPmluZGV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVEFSVF9JTkRFWDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNyYy0+c3RhcnRfaW5kZXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUT1BfSU5ERVg6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPnN0b3BfaW5kZXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBUFM6Ci0gICAgICBnc3RfdmFsdWVfc2V0X2NhcHMgKHZhbHVlLCBzcmMtPmNhcHMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xPT1A6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3JjLT5sb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF9tdWx0aV9maWxlX3NyY19nZXRfZmlsZW5hbWUgKEdzdE11bHRpRmlsZVNyYyAqIG11bHRpZmlsZXNyYykKLXsKLSAgZ2NoYXIgKmZpbGVuYW1lOwotCi0gIEdTVF9ERUJVRyAoIiVkIiwgbXVsdGlmaWxlc3JjLT5pbmRleCk7Ci0gIGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmIChtdWx0aWZpbGVzcmMtPmZpbGVuYW1lLCBtdWx0aWZpbGVzcmMtPmluZGV4KTsKLQotICByZXR1cm4gZmlsZW5hbWU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXVsdGlfZmlsZV9zcmNfY3JlYXRlIChHc3RQdXNoU3JjICogc3JjLCBHc3RCdWZmZXIgKiogYnVmZmVyKQotewotICBHc3RNdWx0aUZpbGVTcmMgKm11bHRpZmlsZXNyYzsKLSAgZ3NpemUgc2l6ZTsKLSAgZ2NoYXIgKmRhdGE7Ci0gIGdjaGFyICpmaWxlbmFtZTsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGdib29sZWFuIHJldDsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLSAgbXVsdGlmaWxlc3JjID0gR1NUX01VTFRJX0ZJTEVfU1JDIChzcmMpOwotCi0gIGlmIChtdWx0aWZpbGVzcmMtPmluZGV4IDwgbXVsdGlmaWxlc3JjLT5zdGFydF9pbmRleCkgewotICAgIG11bHRpZmlsZXNyYy0+aW5kZXggPSBtdWx0aWZpbGVzcmMtPnN0YXJ0X2luZGV4OwotICB9Ci0KLSAgaWYgKG11bHRpZmlsZXNyYy0+c3RvcF9pbmRleCAhPSAtMSAmJgotICAgICAgbXVsdGlmaWxlc3JjLT5pbmRleCA+IG11bHRpZmlsZXNyYy0+c3RvcF9pbmRleCkgewotICAgIGlmIChtdWx0aWZpbGVzcmMtPmxvb3ApCi0gICAgICBtdWx0aWZpbGVzcmMtPmluZGV4ID0gbXVsdGlmaWxlc3JjLT5zdGFydF9pbmRleDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci0KLSAgZmlsZW5hbWUgPSBnc3RfbXVsdGlfZmlsZV9zcmNfZ2V0X2ZpbGVuYW1lIChtdWx0aWZpbGVzcmMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG11bHRpZmlsZXNyYywgInJlYWRpbmcgZnJvbSBmaWxlIFwiJXNcIi4iLCBmaWxlbmFtZSk7Ci0KLSAgcmV0ID0gZ19maWxlX2dldF9jb250ZW50cyAoZmlsZW5hbWUsICZkYXRhLCAmc2l6ZSwgJmVycm9yKTsKLSAgaWYgKCFyZXQpIHsKLSAgICBpZiAobXVsdGlmaWxlc3JjLT5zdWNjZXNzZnVsX3JlYWQpIHsKLSAgICAgIC8qIElmIHdlJ3ZlIHJlYWQgYXQgbGVhc3Qgb25lIGJ1ZmZlciBzdWNjZXNzZnVsbHksIG5vdCBmaW5kaW5nIHRoZQotICAgICAgICogbmV4dCBmaWxlIGlzIEVPUy4gKi8KLSAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotICAgICAgaWYgKGVycm9yICE9IE5VTEwpCi0gICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotCi0gICAgICBpZiAobXVsdGlmaWxlc3JjLT5sb29wKSB7Ci0gICAgICAgIGVycm9yID0gTlVMTDsKLSAgICAgICAgbXVsdGlmaWxlc3JjLT5pbmRleCA9IG11bHRpZmlsZXNyYy0+c3RhcnRfaW5kZXg7Ci0KLSAgICAgICAgZmlsZW5hbWUgPSBnc3RfbXVsdGlfZmlsZV9zcmNfZ2V0X2ZpbGVuYW1lIChtdWx0aWZpbGVzcmMpOwotICAgICAgICByZXQgPSBnX2ZpbGVfZ2V0X2NvbnRlbnRzIChmaWxlbmFtZSwgJmRhdGEsICZzaXplLCAmZXJyb3IpOwotICAgICAgICBpZiAoIXJldCkgewotICAgICAgICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotICAgICAgICAgIGlmIChlcnJvciAhPSBOVUxMKQotICAgICAgICAgICAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0KLSAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICB9Ci0gIH0KLQotICBtdWx0aWZpbGVzcmMtPnN1Y2Nlc3NmdWxfcmVhZCA9IFRSVUU7Ci0gIG11bHRpZmlsZXNyYy0+aW5kZXgrKzsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsCi0gICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkYXRhLCBzaXplLCAwLCBzaXplLCBkYXRhLCBnX2ZyZWUpKTsKLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBtdWx0aWZpbGVzcmMtPm9mZnNldDsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gbXVsdGlmaWxlc3JjLT5vZmZzZXQgKyBzaXplOwotICBtdWx0aWZpbGVzcmMtPm9mZnNldCArPSBzaXplOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG11bHRpZmlsZXNyYywgInJlYWQgZmlsZSBcIiVzXCIuIiwgZmlsZW5hbWUpOwotCi0gIGdfZnJlZSAoZmlsZW5hbWUpOwotICAqYnVmZmVyID0gYnVmOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLWhhbmRsZV9lcnJvcjoKLSAgewotICAgIGlmIChlcnJvciAhPSBOVUxMKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXVsdGlmaWxlc3JjLCBSRVNPVVJDRSwgUkVBRCwKLSAgICAgICAgICAoIkVycm9yIHdoaWxlIHJlYWRpbmcgZnJvbSBmaWxlIFwiJXNcIi4iLCBmaWxlbmFtZSksCi0gICAgICAgICAgKCIlcyIsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG11bHRpZmlsZXNyYywgUkVTT1VSQ0UsIFJFQUQsCi0gICAgICAgICAgKCJFcnJvciB3aGlsZSByZWFkaW5nIGZyb20gZmlsZSBcIiVzXCIuIiwgZmlsZW5hbWUpLAotICAgICAgICAgICgiJXMiLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICB9Ci0gICAgZ19mcmVlIChmaWxlbmFtZSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oIGIvZ3N0L211bHRpZmlsZS9nc3RtdWx0aWZpbGVzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjViOTczMC4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlmaWxlL2dzdG11bHRpZmlsZXNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKgotICogZ3N0bXVsdGlmaWxlc3JjLmM6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9NVUxUSUZJTEVTUkNfSF9fCi0jZGVmaW5lIF9fR1NUX01VTFRJRklMRVNSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9NVUxUSV9GSUxFX1NSQyBcCi0gIChnc3RfbXVsdGlfZmlsZV9zcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX01VTFRJX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTVVMVElfRklMRV9TUkMsR3N0TXVsdGlGaWxlU3JjKSkKLSNkZWZpbmUgR1NUX01VTFRJX0ZJTEVfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX01VTFRJX0ZJTEVfU1JDLEdzdE11bHRpRmlsZVNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX01VTFRJX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfTVVMVElfRklMRV9TUkMpKQotI2RlZmluZSBHU1RfSVNfTVVMVElfRklMRV9TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfTVVMVElfRklMRV9TUkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlGaWxlU3JjIEdzdE11bHRpRmlsZVNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aUZpbGVTcmNDbGFzcyBHc3RNdWx0aUZpbGVTcmNDbGFzczsKLQotc3RydWN0IF9Hc3RNdWx0aUZpbGVTcmMKLXsKLSAgR3N0UHVzaFNyYyBwYXJlbnQ7Ci0KLSAgZ2NoYXIgKmZpbGVuYW1lOwotICBpbnQgc3RhcnRfaW5kZXg7Ci0gIGludCBzdG9wX2luZGV4OwotICBpbnQgaW5kZXg7Ci0KLSAgaW50IG9mZnNldDsKLQotICBnYm9vbGVhbiBsb29wOwotCi0gIEdzdENhcHMgKmNhcHM7Ci0gIGdib29sZWFuIHN1Y2Nlc3NmdWxfcmVhZDsKLQotICBnaW50IGZwc19uLCBmcHNfZDsKLX07Ci0KLXN0cnVjdCBfR3N0TXVsdGlGaWxlU3JjQ2xhc3MKLXsKLSAgR3N0UHVzaFNyY0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9tdWx0aV9maWxlX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9NVUxUSUZJTEVTUkNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jIGIvZ3N0L211bHRpZmlsZS9nc3RzcGxpdGZpbGVzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3ZjVlMy4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTk4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBTcGxpdCBGaWxlIFNvdXJjZQotICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxhYm9yYSBMdGQuIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtc3BsaXRmaWxlc3JjCi0gKiBAc2VlX2Fsc286ICNHc3RGaWxlU3JjLCAjR3N0TXVsdGlGaWxlU3JjCi0gKgotICogUmVhZHMgZGF0YSBmcm9tIG11bHRpcGxlIGZpbGVzLCBwcmVzZW50aW5nIHRob3NlIGZpbGVzIGFzIG9uZSBjb250aW51b3VzCi0gKiBmaWxlIHRvIGRvd25zdHJlYW0gZWxlbWVudHMuIFRoaXMgaXMgdXNlZnVsIGZvciByZWFkaW5nIGEgbGFyZ2UgZmlsZSB0aGF0Ci0gKiBoYWQgdG8gYmUgc3BsaXQgaW50byBtdWx0aXBsZSBwYXJ0cyBkdWUgdG8gZmlsZXN5c3RlbSBmaWxlIHNpemUgbGltaXRhdGlvbnMsCi0gKiBmb3IgZXhhbXBsZS4KLSAqCi0gKiBUaGUgZmlsZXMgdG8gc2VsZWN0IGFyZSBjaG9zZW4gdmlhIHRoZSBsb2NhdGlvbiBwcm9wZXJ0eSwgd2hpY2ggc3VwcG9ydHMKLSAqIChhbmQgZXhwZWN0cykgc2hlbGwtc3R5bGUgd2lsZGNhcmRzIChidXQgb25seSBmb3IgdGhlIGZpbGVuYW1lLCBub3QgZm9yCi0gKiBkaXJlY3RvcmllcykuIFRoZSByZXN1bHRzIHdpbGwgYmUgc29ydGVkLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgc3BsaXRmaWxlc3JjIGxvY2F0aW9uPSIvcGF0aC90by9wYXJ0LSoubXBnIiAhIGRlY29kZWJpbiAhIC4uLgotICogXXwgUGxheXMgdGhlIGRpZmZlcmVudCBwYXJ0cyBhcyBpZiB0aGV5IHdlcmUgb25lIHNpbmdsZSBNUEVHIGZpbGUuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgcGxheWJpbiB1cmk9InNwbGl0ZmlsZTovL3BhdGgvdG8vZm9vLmF2aS4qIgotICogXXwgUGxheXMgdGhlIGRpZmZlcmVudCBwYXJ0cyBhcyBpZiB0aGV5IHdlcmUgb25lIHNpbmdsZSBBVkkgZmlsZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RzcGxpdGZpbGVzcmMuaCIKLSNpbmNsdWRlICJnc3RzcGxpdHV0aWxzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotZW51bQotewotICBQUk9QX0xPQ0FUSU9OID0gMQotfTsKLQotI2RlZmluZSBERUZBVUxUX0xPQ0FUSU9OIE5VTEwKLQotc3RhdGljIHZvaWQgZ3N0X3NwbGl0X2ZpbGVfc3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsCi0gICAgZ3BvaW50ZXIgaWZhY2VfZGF0YSk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BsaXRfZmlsZV9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NwbGl0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9zcGxpdF9maWxlX3NyY19maW5hbGl6ZSAoR09iamVjdCAqIG9iaik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BsaXRfZmlsZV9zcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BsaXRfZmlsZV9zcmNfc3RvcCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9zcGxpdF9maWxlX3NyY19jYW5fc2VlayAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9zcGxpdF9maWxlX3NyY19nZXRfc2l6ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIGd1aW50NjQgKiBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BsaXRfZmlsZV9zcmNfdW5sb2NrIChHc3RCYXNlU3JjICogYmFzZXNyYyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc3BsaXRfZmlsZV9zcmNfY3JlYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywKLSAgICBndWludDY0IG9mZnNldCwgZ3VpbnQgc2l6ZSwgR3N0QnVmZmVyICoqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfc3BsaXRfZmlsZV9zcmNfcGFkX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoc3BsaXRmaWxlc3JjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHNwbGl0ZmlsZXNyY19kZWJ1ZwotCi0KLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RTcGxpdEZpbGVTcmMsIGdzdF9zcGxpdF9maWxlX3NyYywgR1NUX1RZUEVfQkFTRV9TUkMsCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9VUklfSEFORExFUiwKLSAgICAgICAgZ3N0X3NwbGl0X2ZpbGVfc3JjX3VyaV9oYW5kbGVyX2luaXQpKTsKLQotI2lmZGVmIEdfT1NfV0lOMzIKLSNkZWZpbmUgV0lOMzJfQkxVUkIgIiBMb2NhdGlvbiBzdHJpbmcgbXVzdCBiZSBpbiBVVEYtOCBlbmNvZGluZyAob24gV2luZG93cykuIgotI2Vsc2UKLSNkZWZpbmUgV0lOMzJfQkxVUkIgICAgICAgICAgICAgLyogbm90aGluZyAqLwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRfZmlsZV9zcmNfY2xhc3NfaW5pdCAoR3N0U3BsaXRGaWxlU3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3NwbGl0X2ZpbGVfc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NwbGl0X2ZpbGVfc3JjX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfc3BsaXRfZmlsZV9zcmNfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJGaWxlIExvY2F0aW9uIiwKLSAgICAgICAgICAiV2lsZGNhcmQgcGF0dGVybiB0byBtYXRjaCBmaWxlIG5hbWVzIG9mIHRoZSBpbnB1dCBmaWxlcy4gSWYgIgotICAgICAgICAgICJ0aGUgbG9jYXRpb24gaXMgYW4gYWJzb2x1dGUgcGF0aCBvciBjb250YWlucyBkaXJlY3RvcnkgY29tcG9uZW50cywgIgotICAgICAgICAgICJvbmx5IHRoZSBiYXNlIGZpbGUgbmFtZSBwYXJ0IHdpbGwgYmUgY29uc2lkZXJlZCBmb3IgcGF0dGVybiAiCi0gICAgICAgICAgIm1hdGNoaW5nLiBUaGUgcmVzdWx0cyB3aWxsIGJlIHNvcnRlZC4iIFdJTjMyX0JMVVJCLAotICAgICAgICAgIERFRkFVTFRfTE9DQVRJT04sIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGJhc2VzcmNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGxpdF9maWxlX3NyY19zdGFydCk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwbGl0X2ZpbGVfc3JjX3N0b3ApOwotICBnc3RiYXNlc3JjX2NsYXNzLT5jcmVhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwbGl0X2ZpbGVfc3JjX2NyZWF0ZSk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmdldF9zaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGxpdF9maWxlX3NyY19nZXRfc2l6ZSk7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPnVubG9jayA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BsaXRfZmlsZV9zcmNfdW5sb2NrKTsKLSAgZ3N0YmFzZXNyY19jbGFzcy0+aXNfc2Vla2FibGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGxpdF9maWxlX3NyY19jYW5fc2Vlayk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHNwbGl0ZmlsZXNyY19kZWJ1ZywgInNwbGl0ZmlsZXNyYyIsIDAsCi0gICAgICAic3BsaXRmaWxlc3JjIGVsZW1lbnQiKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc3BsaXRfZmlsZV9zcmNfcGFkX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiU3BsaXQtRmlsZSBTb3VyY2UiLAotICAgICAgIlNvdXJjZS9GaWxlIiwKLSAgICAgICJSZWFkIGEgc2VxdWVudGlhbGx5IG5hbWVkIHNldCBvZiBmaWxlcyBhcyBpZiBpdCB3YXMgb25lIGxhcmdlIGZpbGUiLAotICAgICAgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0X2ZpbGVfc3JjX2luaXQgKEdzdFNwbGl0RmlsZVNyYyAqIHNwbGl0ZmlsZXNyYykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdF9maWxlX3NyY19maW5hbGl6ZSAoR09iamVjdCAqIG9iaikKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKG9iaik7Ci0KLSAgZ19mcmVlIChzcmMtPmxvY2F0aW9uKTsKLSAgc3JjLT5sb2NhdGlvbiA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9zcGxpdF9maWxlX3NyY19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3BsaXRfZmlsZV9zcmNfY2FuX3NlZWsgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKQotewotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3BsaXRfZmlsZV9zcmNfdW5sb2NrIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgLyogVGhpcyBpcyBub3QgYWN0dWFsbHkgdGhhdCB1c2VmdWwsIHNpbmNlIGFsbCBub3JtYWwgZmlsZQotICAgKiBvcGVyYXRpb25zIGFyZSBmdWxseSBibG9ja2luZyBhbnl3YXkgKi8KLSNpZiAwCi0gIEdzdFNwbGl0RmlsZVNyYyAqc3JjID0gR1NUX1NQTElUX0ZJTEVfU1JDIChiYXNlc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjYW5jZWxsaW5nIHBlbmRpbmcgSS9PIG9wZXJhdGlvbiBpZiB0aGVyZSBpcyBvbmUiKTsKLSAgLyogZ19jYW5jZWxsYWJsZV9jYW5jZWwgKHNyYy0+Y2FuY2VsbGFibGUpOyAqLwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkb25lIik7Ci0jZW5kaWYKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3BsaXRfZmlsZV9zcmNfZ2V0X3NpemUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjLCBndWludDY0ICogc2l6ZSkKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKGJhc2VzcmMpOwotCi0gICpzaXplID0gc3JjLT5wYXJ0c1tzcmMtPm51bV9wYXJ0cyAtIDFdLnN0b3AgKyAxOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdF9maWxlX3NyY19zZXRfbG9jYXRpb24gKEdzdFNwbGl0RmlsZVNyYyAqIHNyYywgY29uc3QgY2hhciAqbG9jYXRpb24pCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgZ19mcmVlIChzcmMtPmxvY2F0aW9uKTsKLQotICBpZiAobG9jYXRpb24gIT0gTlVMTCAmJiBnX3N0cl9oYXNfcHJlZml4IChsb2NhdGlvbiwgInNwbGl0ZmlsZTovLyIpKQotICAgIHNyYy0+bG9jYXRpb24gPSBnc3RfdXJpX2dldF9sb2NhdGlvbiAobG9jYXRpb24pOwotICBlbHNlCi0gICAgc3JjLT5sb2NhdGlvbiA9IGdfc3RyZHVwIChsb2NhdGlvbik7Ci0jaWZkZWYgR19PU19XSU4zMgotICBpZiAoIWdfdXRmOF92YWxpZGF0ZSAoc3JjLT5sb2NhdGlvbiwgLTEsIE5VTEwpKSB7Ci0gICAgZ193YXJuaW5nICgic3BsaXRmaWxlc3JjICdsb2NhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBpbiBVVEYtOCAiCi0gICAgICAgICJlbmNvZGluZyBvbiBXaW5kb3dzIik7Ci0gIH0KLSNlbmRpZgotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdF9maWxlX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgZ3N0X3NwbGl0X2ZpbGVfc3JjX3NldF9sb2NhdGlvbiAoc3JjLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRfZmlsZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwbGl0RmlsZVNyYyAqc3JjID0gR1NUX1NQTElUX0ZJTEVfU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+bG9jYXRpb24pOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NwbGl0X2ZpbGVfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKGJhc2VzcmMpOwotICBHQ2FuY2VsbGFibGUgKmNhbmNlbDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGd1aW50NjQgb2Zmc2V0OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIGdjaGFyICpiYXNlbmFtZSA9IE5VTEw7Ci0gIGdjaGFyICpkaXJuYW1lID0gTlVMTDsKLSAgZ2NoYXIgKipmaWxlczsKLSAgZ3VpbnQgaTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gIGlmIChzcmMtPmxvY2F0aW9uICE9IE5VTEwgJiYgc3JjLT5sb2NhdGlvblswXSAhPSAnXDAnKSB7Ci0gICAgYmFzZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lIChzcmMtPmxvY2F0aW9uKTsKLSAgICBkaXJuYW1lID0gZ19wYXRoX2dldF9kaXJuYW1lIChzcmMtPmxvY2F0aW9uKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICBmaWxlcyA9IGdzdF9zcGxpdF91dGlsX2ZpbmRfZmlsZXMgKGRpcm5hbWUsIGJhc2VuYW1lLCAmZXJyKTsKLQotICBpZiAoZmlsZXMgPT0gTlVMTCB8fCAqZmlsZXMgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2ZpbGVzOwotCi0gIHNyYy0+bnVtX3BhcnRzID0gZ19zdHJ2X2xlbmd0aCAoZmlsZXMpOwotICBzcmMtPnBhcnRzID0gZ19uZXcwIChHc3RGaWxlUGFydCwgc3JjLT5udW1fcGFydHMpOwotCi0gIGNhbmNlbCA9IHNyYy0+Y2FuY2VsbGFibGU7Ci0KLSAgb2Zmc2V0ID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IHNyYy0+bnVtX3BhcnRzOyArK2kpIHsKLSAgICBHRmlsZUlucHV0U3RyZWFtICpzdHJlYW07Ci0gICAgR0ZpbGVJbmZvICppbmZvOwotICAgIGdvZmZzZXQgc2l6ZTsKLSAgICBHRmlsZSAqZmlsZTsKLQotICAgIGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChmaWxlc1tpXSk7Ci0gICAgc3RyZWFtID0gZ19maWxlX3JlYWQgKGZpbGUsIGNhbmNlbCwgJmVycik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGZpbGUpOwotCi0gICAgaWYgKGVyciAhPSBOVUxMKQotICAgICAgZ290byBvcGVuX3JlYWRfZXJyb3I7Ci0KLSAgICBpbmZvID0gZ19maWxlX2lucHV0X3N0cmVhbV9xdWVyeV9pbmZvIChzdHJlYW0sICJzdGFuZGFyZDo6KiIsIE5VTEwsICZlcnIpOwotICAgIGlmIChlcnIgIT0gTlVMTCkgewotICAgICAgZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7Ci0gICAgICBnb3RvIHF1ZXJ5X2luZm9fZXJyb3I7Ci0gICAgfQotCi0gICAgc2l6ZSA9IGdfZmlsZV9pbmZvX2dldF9zaXplIChpbmZvKTsKLSAgICBnX29iamVjdF91bnJlZiAoaW5mbyk7Ci0KLSAgICBzcmMtPnBhcnRzW2ldLnN0cmVhbSA9IHN0cmVhbTsKLSAgICBzcmMtPnBhcnRzW2ldLnBhdGggPSBnX3N0cmR1cCAoZmlsZXNbaV0pOwotICAgIHNyYy0+cGFydHNbaV0uc3RhcnQgPSBvZmZzZXQ7Ci0gICAgc3JjLT5wYXJ0c1tpXS5zdG9wID0gb2Zmc2V0ICsgc2l6ZSAtIDE7Ci0KLSAgICBHU1RfREVCVUcgKCJbJTAxMCIgR19HVUlOVDY0X0ZPUk1BVCAiLSUwMTAiIEdfR1VJTlQ2NF9GT1JNQVQgIl0gJXMiLAotICAgICAgICBzcmMtPnBhcnRzW2ldLnN0YXJ0LCBzcmMtPnBhcnRzW2ldLnN0b3AsIHNyYy0+cGFydHNbaV0ucGF0aCk7Ci0KLSAgICBvZmZzZXQgKz0gc2l6ZTsKLSAgfQotCi0gIEdTVF9JTkZPICgiU3VjY2Vzc2Z1bGx5IG9wZW5lZCAldSBmaWxlIHBhcnRzIGZvciByZWFkaW5nIiwgc3JjLT5udW1fcGFydHMpOwotCi0gIHNyYy0+Y3VyX3BhcnQgPSAwOwotCi0gIHNyYy0+Y2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldyAoKTsKLQotICByZXQgPSBUUlVFOwotCi1kb25lOgotICBpZiAoZXJyICE9IE5VTEwpCi0gICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICBnX3N0cmZyZWV2IChmaWxlcyk7Ci0gIGdfZnJlZSAoYmFzZW5hbWUpOwotICBnX2ZyZWUgKGRpcm5hbWUpOwotICByZXR1cm4gcmV0OwotCi0vKiBFUlJPUlMgKi8KLW5vX2ZpbGVzOgotICB7Ci0gICAgaWYgKGVyci0+Y29kZSA9PSBHX0lPX0VSUk9SX0NBTkNFTExFRCkKLSAgICAgIGdvdG8gY2FuY2VsbGVkOwotCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKCIlcyIsIGVyci0+bWVzc2FnZSksCi0gICAgICAgICgiRmFpbGVkIHRvIGZpbmQgZmlsZXMgaW4gJyVzJyBmb3IgcGF0dGVybiAnJXMnIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoZGlybmFtZSksIEdTVF9TVFJfTlVMTCAoYmFzZW5hbWUpKSk7Ci0gICAgZ290byBkb25lOwotICB9Ci1vcGVuX3JlYWRfZXJyb3I6Ci0gIHsKLSAgICBpZiAoZXJyLT5jb2RlID09IEdfSU9fRVJST1JfQ0FOQ0VMTEVEKQotICAgICAgZ290byBjYW5jZWxsZWQ7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIiVzIiwgZXJyLT5tZXNzYWdlKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gb3BlbiBmaWxlICclcycgZm9yIHJlYWRpbmciLCBmaWxlc1tpXSkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotcXVlcnlfaW5mb19lcnJvcjoKLSAgewotICAgIGlmIChlcnItPmNvZGUgPT0gR19JT19FUlJPUl9DQU5DRUxMRUQpCi0gICAgICBnb3RvIGNhbmNlbGxlZDsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiJXMiLCBlcnItPm1lc3NhZ2UpLAotICAgICAgICAoIkZhaWxlZCB0byBxdWVyeSBpbmZvIGZvciBmaWxlICclcyciLCBmaWxlc1tpXSkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotY2FuY2VsbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiSS9PIG9wZXJhdGlvbiBjYW5jZWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdF9maWxlX3NyY19zdG9wIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKGJhc2VzcmMpOwotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBzcmMtPm51bV9wYXJ0czsgKytpKSB7Ci0gICAgaWYgKHNyYy0+cGFydHNbaV0uc3RyZWFtICE9IE5VTEwpCi0gICAgICBnX29iamVjdF91bnJlZiAoc3JjLT5wYXJ0c1tpXS5zdHJlYW0pOwotICAgIGdfZnJlZSAoc3JjLT5wYXJ0c1tpXS5wYXRoKTsKLSAgfQotICBnX2ZyZWUgKHNyYy0+cGFydHMpOwotICBzcmMtPnBhcnRzID0gTlVMTDsKLSAgc3JjLT5udW1fcGFydHMgPSAwOwotCi0gIGdfb2JqZWN0X3VucmVmIChzcmMtPmNhbmNlbGxhYmxlKTsKLSAgc3JjLT5jYW5jZWxsYWJsZSA9IE5VTEw7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3Rfc3BsaXRfZmlsZV9zcmNfcGFydF9zZWFyY2ggKEdzdEZpbGVQYXJ0ICogcGFydCwgZ3VpbnQ2NCAqIG9mZnNldCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmICgqb2Zmc2V0ID4gcGFydC0+c3RvcCkKLSAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgLyogVGhlIHRhcmdldCBpcyBhZnRlciB0aGlzIHBhcnQgKi8KLSAgZWxzZSBpZiAoKm9mZnNldCA8IHBhcnQtPnN0YXJ0KQotICAgIHJldHVybiAxOyAgICAgICAgICAgICAgICAgICAvKiBUaGUgdGFyZ2V0IGlzIGJlZm9yZSB0aGlzIHBhcnQgKi8KLSAgZWxzZQotICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSB0YXJnZXQgcGFydCAqLwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdF9maWxlX3NyY19maW5kX3BhcnRfZm9yX29mZnNldCAoR3N0U3BsaXRGaWxlU3JjICogc3JjLCBndWludDY0IG9mZnNldCwKLSAgICBndWludCAqIHBhcnRfbnVtYmVyKQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotICBHc3RGaWxlUGFydCAqcGFydDsKLQotICBwYXJ0ID0KLSAgICAgIGdzdF91dGlsX2FycmF5X2JpbmFyeV9zZWFyY2ggKHNyYy0+cGFydHMsIHNyYy0+bnVtX3BhcnRzLAotICAgICAgc2l6ZW9mIChHc3RGaWxlUGFydCksCi0gICAgICAoR0NvbXBhcmVEYXRhRnVuYykgZ3N0X3NwbGl0X2ZpbGVfc3JjX3BhcnRfc2VhcmNoLAotICAgICAgR1NUX1NFQVJDSF9NT0RFX0FGVEVSLCAmb2Zmc2V0LCBOVUxMKTsKLQotICBpZiAocGFydCkKLSAgICAqcGFydF9udW1iZXIgPSBwYXJ0IC0gc3JjLT5wYXJ0czsKLSAgZWxzZQotICAgIHJlcyA9IEZBTFNFOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc3BsaXRfZmlsZV9zcmNfY3JlYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYywgZ3VpbnQ2NCBvZmZzZXQsIGd1aW50IHNpemUsCi0gICAgR3N0QnVmZmVyICoqIGJ1ZmZlcikKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKGJhc2VzcmMpOwotICBHc3RGaWxlUGFydCBjdXJfcGFydDsKLSAgR0lucHV0U3RyZWFtICpzdHJlYW07Ci0gIEdDYW5jZWxsYWJsZSAqY2FuY2VsOwotICBHU2Vla2FibGUgKnNlZWthYmxlOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBndWludDY0IHJlYWRfb2Zmc2V0OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludCB0b19yZWFkOwotCi0gIGN1cl9wYXJ0ID0gc3JjLT5wYXJ0c1tzcmMtPmN1cl9wYXJ0XTsKLSAgaWYgKG9mZnNldCA8IGN1cl9wYXJ0LnN0YXJ0IHx8IG9mZnNldCA+IGN1cl9wYXJ0LnN0b3ApIHsKLSAgICBpZiAoIWdzdF9zcGxpdF9maWxlX3NyY19maW5kX3BhcnRfZm9yX29mZnNldCAoc3JjLCBvZmZzZXQsICZzcmMtPmN1cl9wYXJ0KSkKLSAgICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gICAgY3VyX3BhcnQgPSBzcmMtPnBhcnRzW3NyYy0+Y3VyX3BhcnRdOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNyYywgImN1cnJlbnQgcGFydDogJXUgKCUiIEdfR1VJTlQ2NF9GT1JNQVQgIiAtICIKLSAgICAgICIlIiBHX0dVSU5UNjRfRk9STUFUICIsICVzKSIsIHNyYy0+Y3VyX3BhcnQsIGN1cl9wYXJ0LnN0YXJ0LAotICAgICAgY3VyX3BhcnQuc3RvcCwgY3VyX3BhcnQucGF0aCk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemUsIE5VTEwpOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gb2Zmc2V0OwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0KLSAgY2FuY2VsID0gc3JjLT5jYW5jZWxsYWJsZTsKLQotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICBndWludDY0IGJ5dGVzX3RvX2VuZF9vZl9wYXJ0OwotICAgIGdzaXplIHJlYWQgPSAwOwotCi0gICAgLyogd2Ugd2FudCB0aGUgb2Zmc2V0IGludG8gdGhlIGZpbGUgcGFydCAqLwotICAgIHJlYWRfb2Zmc2V0ID0gb2Zmc2V0IC0gY3VyX3BhcnQuc3RhcnQ7Ci0KLSAgICBHU1RfTE9HICgiUmVhZGluZyBwYXJ0ICUwM3UgZnJvbSBvZmZzZXQgJSIgR19HVUlOVDY0X0ZPUk1BVCAiICglcykiLAotICAgICAgICBzcmMtPmN1cl9wYXJ0LCByZWFkX29mZnNldCwgY3VyX3BhcnQucGF0aCk7Ci0KLSAgICAvKiBGSVhNRTogb25seSBzZWVrIHdoZW4gbmVlZGVkIChob3BlZnVsbHkgZ2lvIGlzIHNtYXJ0KSAqLwotICAgIHNlZWthYmxlID0gR19TRUVLQUJMRSAoY3VyX3BhcnQuc3RyZWFtKTsKLSAgICBpZiAoIWdfc2Vla2FibGVfc2VlayAoc2Vla2FibGUsIHJlYWRfb2Zmc2V0LCBHX1NFRUtfU0VULCBjYW5jZWwsICZlcnIpKQotICAgICAgZ290byBzZWVrX2ZhaWxlZDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChzcmMsICJub3c6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGdfc2Vla2FibGVfdGVsbCAoc2Vla2FibGUpKTsKLQotICAgIGJ5dGVzX3RvX2VuZF9vZl9wYXJ0ID0gKGN1cl9wYXJ0LnN0b3AgLSBjdXJfcGFydC5zdGFydCkgKyAxIC0gcmVhZF9vZmZzZXQ7Ci0gICAgdG9fcmVhZCA9IE1JTiAoc2l6ZSwgYnl0ZXNfdG9fZW5kX29mX3BhcnQpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgInJlYWRpbmcgJXUgYnl0ZXMgZnJvbSBwYXJ0ICV1IChieXRlcyB0byBlbmQgb2YgIgotICAgICAgICAicGFydDogJXUpIiwgdG9fcmVhZCwgc3JjLT5jdXJfcGFydCwgKGd1aW50KSBieXRlc190b19lbmRfb2ZfcGFydCk7Ci0KLSAgICBzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoY3VyX3BhcnQuc3RyZWFtKTsKLQotICAgIC8qIE5COiB3ZSB3b24ndCB0cnkgdG8gcmVhZCBiZXlvbmQgRU9GICovCi0gICAgaWYgKCFnX2lucHV0X3N0cmVhbV9yZWFkX2FsbCAoc3RyZWFtLCBkYXRhLCB0b19yZWFkLCAmcmVhZCwgY2FuY2VsLCAmZXJyKSkKLSAgICAgIGdvdG8gcmVhZF9mYWlsZWQ7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAicmVhZCAldSBieXRlcyIsIChndWludCkgcmVhZCk7Ci0KLSAgICBkYXRhICs9IHJlYWQ7Ci0gICAgc2l6ZSAtPSByZWFkOwotICAgIG9mZnNldCArPSByZWFkOwotCi0gICAgLyogYXJlIHdlIGRvbmU/ICovCi0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgIGJyZWFrOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIiV1IGJ5dGVzIGxlZnQgdG8gcmVhZCBmb3IgdGhpcyBjaHVuayIsIHNpemUpOwotCi0gICAgLyogY29ybmVyIGNhc2UsIHRoaXMgc2hvdWxkIG5ldmVyIHJlYWxseSBoYXBwZW4gKGFzc3VtaW5nIGJhc2VzcmMgY2xpcHMKLSAgICAgKiByZXF1ZXN0cyBiZXlvbmQgdGhlIGZpbGUgc2l6ZSkgKi8KLSAgICBpZiAocmVhZCA8IHRvX3JlYWQpIHsKLSAgICAgIGlmIChzcmMtPmN1cl9wYXJ0ID09IHNyYy0+bnVtX3BhcnRzIC0gMSkgewotICAgICAgICAvKiBsYXN0IGZpbGUgcGFydCwgc3RvcCByZWFkaW5nIGFuZCB0cnVuY2F0ZSBidWZmZXIgKi8KLSAgICAgICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoYnVmLCBvZmZzZXQgLSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ290byBmaWxlX3BhcnRfY2hhbmdlZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICArK3NyYy0+Y3VyX3BhcnQ7Ci0gICAgY3VyX3BhcnQgPSBzcmMtPnBhcnRzW3NyYy0+Y3VyX3BhcnRdOwotICB9Ci0KLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gb2Zmc2V0OwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgKmJ1ZmZlciA9IGJ1ZjsKLSAgR1NUX0xPR19PQkpFQ1QgKHNyYywgInJlYWQgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBpbnRvIGJ1ZiAlcCIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpLCBidWYpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLS8qIEVSUk9SUyAqLwotc2Vla19mYWlsZWQ6Ci0gIHsKLSAgICBpZiAoZXJyLT5jb2RlID09IEdfSU9fRVJST1JfQ0FOQ0VMTEVEKQotICAgICAgZ290byBjYW5jZWxsZWQ7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgU0VFSywgKE5VTEwpLAotICAgICAgICAoIlNlZWsgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGluICVzIGZhaWxlZCIsIHJlYWRfb2Zmc2V0LAotICAgICAgICAgICAgY3VyX3BhcnQucGF0aCkpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotcmVhZF9mYWlsZWQ6Ci0gIHsKLSAgICBpZiAoZXJyLT5jb2RlID09IEdfSU9fRVJST1JfQ0FOQ0VMTEVEKQotICAgICAgZ290byBjYW5jZWxsZWQ7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKCIlcyIsIGVyci0+bWVzc2FnZSksCi0gICAgICAgICgiUmVhZCBmcm9tICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiBpbiAlcyBmYWlsZWQiLCByZWFkX29mZnNldCwKLSAgICAgICAgICAgIGN1cl9wYXJ0LnBhdGgpKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWZpbGVfcGFydF9jaGFuZ2VkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsCi0gICAgICAgICgiUmVhZCBlcnJvciB3aGlsZSByZWFkaW5nIGZpbGUgcGFydCAlcyIsIGN1cl9wYXJ0LnBhdGgpLAotICAgICAgICAoIlNob3J0IHJlYWQgaW4gZmlsZSBwYXJ0LCBmaWxlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2Ugc3RhcnQiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWNhbmNlbGxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIkkvTyBvcGVyYXRpb24gY2FuY2VsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQiKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50Ci1nc3Rfc3BsaXRfZmlsZV9zcmNfdXJpX2dldF90eXBlIChHVHlwZSB0eXBlKQotewotICByZXR1cm4gR1NUX1VSSV9TUkM7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqY29uc3QgKgotZ3N0X3NwbGl0X2ZpbGVfc3JjX3VyaV9nZXRfcHJvdG9jb2xzIChHVHlwZSB0eXBlKQotewotICBzdGF0aWMgY29uc3QgZ2NoYXIgKnByb3RvY29sc1tdID0geyAic3BsaXRmaWxlIiwgTlVMTCB9OwotCi0gIHJldHVybiAoY29uc3QgZ2NoYXIgKiBjb25zdCAqKSBwcm90b2NvbHM7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3Rfc3BsaXRfZmlsZV9zcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RTcGxpdEZpbGVTcmMgKnNyYyA9IEdTVF9TUExJVF9GSUxFX1NSQyAoaGFuZGxlcik7Ci0gIGdjaGFyICpyZXQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBpZiAoc3JjLT5sb2NhdGlvbiAhPSBOVUxMKQotICAgIHJldCA9IGdfc3RyZHVwX3ByaW50ZiAoInNwbGl0ZmlsZTovLyVzIiwgc3JjLT5sb2NhdGlvbik7Ci0gIGVsc2UKLSAgICByZXQgPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdF9maWxlX3NyY191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpLAotICAgIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgR3N0U3BsaXRGaWxlU3JjICpzcmMgPSBHU1RfU1BMSVRfRklMRV9TUkMgKGhhbmRsZXIpOwotCi0gIGdzdF9zcGxpdF9maWxlX3NyY19zZXRfbG9jYXRpb24gKHNyYywgdXJpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdF9maWxlX3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X3NwbGl0X2ZpbGVfc3JjX3VyaV9nZXRfdHlwZTsKLSAgaWZhY2UtPmdldF9wcm90b2NvbHMgPSBnc3Rfc3BsaXRfZmlsZV9zcmNfdXJpX2dldF9wcm90b2NvbHM7Ci0gIGlmYWNlLT5nZXRfdXJpID0gZ3N0X3NwbGl0X2ZpbGVfc3JjX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9zcGxpdF9maWxlX3NyY191cmlfc2V0X3VyaTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmggYi9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0ZmlsZXNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGFiZGQzLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRmaWxlc3JjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKiBHU3RyZWFtZXIgU3BsaXQgRmlsZSBTb3VyY2UKLSAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLiA8dGltLm11bGxlckBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpZm5kZWYgX19HU1RfU1BMSVRfRklMRV9TUkNfSF9fCi0jZGVmaW5lIF9fR1NUX1NQTElUX0ZJTEVfU1JDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzcmMuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TUExJVF9GSUxFX1NSQyBcCi0gIChnc3Rfc3BsaXRfZmlsZV9zcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1NQTElUX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfU1BMSVRfRklMRV9TUkMsR3N0U3BsaXRGaWxlU3JjKSkKLSNkZWZpbmUgR1NUX1NQTElUX0ZJTEVfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NQTElUX0ZJTEVfU1JDLEdzdFNwbGl0RmlsZVNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NQTElUX0ZJTEVfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU1BMSVRfRklMRV9TUkMpKQotI2RlZmluZSBHU1RfSVNfU1BMSVRfRklMRV9TUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU1BMSVRfRklMRV9TUkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0RmlsZVBhcnQgR3N0RmlsZVBhcnQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3BsaXRGaWxlU3JjIEdzdFNwbGl0RmlsZVNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGxpdEZpbGVTcmNDbGFzcyBHc3RTcGxpdEZpbGVTcmNDbGFzczsKLQotc3RydWN0IF9Hc3RGaWxlUGFydAotewotICBHRmlsZUlucHV0U3RyZWFtICAqc3RyZWFtOwotICBnY2hhciAgICAgICAgICAgICAqcGF0aDsKLSAgZ3VpbnQ2NCAgICAgICAgICAgIHN0YXJ0OyAvKiBpbmNsdXNpdmUgKi8KLSAgZ3VpbnQ2NCAgICAgICAgICAgIHN0b3A7ICAvKiBpbmNsdXNpdmUgKi8KLX07Ci0KLXN0cnVjdCBfR3N0U3BsaXRGaWxlU3JjCi17Ci0gIEdzdEJhc2VTcmMgICBwYXJlbnQ7Ci0KLSAgZ2NoYXIgICAgICAgKmxvY2F0aW9uOyAgLyogT0JKRUNUX0xPQ0sgKi8KLQotICBHc3RGaWxlUGFydCAqcGFydHM7Ci0gIGd1aW50ICAgICAgICBudW1fcGFydHM7Ci0KLSAgZ3VpbnQgICAgICAgIGN1cl9wYXJ0OyAgLyogcGFydCB1c2VkIGxhc3QgKGxpa2VseSBhbHNvIHRvIGJlIHVzZWQgbmV4dCkgKi8KLQotICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOyAvKiBzbyB3ZSBjYW4gaW50ZXJydXB0IGJsb2NraW5nIG9wZXJhdGlvbnMgKi8KLX07Ci0KLXN0cnVjdCBfR3N0U3BsaXRGaWxlU3JjQ2xhc3MKLXsKLSAgR3N0QmFzZVNyY0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9zcGxpdF9maWxlX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TUExJVF9GSUxFX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMgYi9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4cGFydHJlYWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTczZDY5Li4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzY1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBTcGxpdCBEZW11eGVyIGJpbiB0aGF0IHJlY29tYmluZXMgZmlsZXMgY3JlYXRlZCBieQotICogdGhlIHNwbGl0bXV4c2luayBlbGVtZW50LgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMTQ+IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHNwbGl0bXV4c3JjLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHNwbGl0bXV4X3BhcnRfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc3BsaXRtdXhfcGFydF9kZWJ1ZwotCi0jZGVmaW5lIFNQTElUTVVYX1BBUlRfTE9DSyhwKSBnX211dGV4X2xvY2soJihwKS0+bG9jaykKLSNkZWZpbmUgU1BMSVRNVVhfUEFSVF9VTkxPQ0socCkgZ19tdXRleF91bmxvY2soJihwKS0+bG9jaykKLSNkZWZpbmUgU1BMSVRNVVhfUEFSVF9XQUlUKHApIGdfY29uZF93YWl0ICgmKHApLT5pbmFjdGl2ZV9jb25kLCAmKHApLT5sb2NrKQotI2RlZmluZSBTUExJVE1VWF9QQVJUX0JST0FEQ0FTVChwKSBnX2NvbmRfYnJvYWRjYXN0ICgmKHApLT5pbmFjdGl2ZV9jb25kKQotCi0jZGVmaW5lIFNQTElUTVVYX1BBUlRfVFlQRV9MT0NLKHApIGdfbXV0ZXhfbG9jaygmKHApLT50eXBlX2xvY2spCi0jZGVmaW5lIFNQTElUTVVYX1BBUlRfVFlQRV9VTkxPQ0socCkgZ19tdXRleF91bmxvY2soJihwKS0+dHlwZV9sb2NrKQotCi1lbnVtCi17Ci0gIFNJR05BTF9QUkVQQVJFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCBwYXJ0X3JlYWRlcl9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3BsaXRNdXhQYXJ0UGFkCi17Ci0gIEdzdFBhZCBwYXJlbnQ7Ci0KLSAgLyogUmVhZGVyIHdlIGJlbG9uZyB0byAqLwotICBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlcjsKLSAgLyogT3V0cHV0IHNwbGl0bXV4c3JjIHNvdXJjZSBwYWQgKi8KLSAgR3N0UGFkICp0YXJnZXQ7Ci0KLSAgR3N0RGF0YVF1ZXVlICpxdWV1ZTsKLQotICBnYm9vbGVhbiBpc19lb3M7Ci0gIGdib29sZWFuIGZsdXNoaW5nOwotICBnYm9vbGVhbiBzZWVuX2J1ZmZlcjsKLQotICBHc3RDbG9ja1RpbWUgbWF4X3RzOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgR3N0U2VnbWVudCBvcmlnX3NlZ21lbnQ7Ci0gIEdzdENsb2NrVGltZSBpbml0aWFsX3RzX29mZnNldDsKLX0gR3N0U3BsaXRNdXhQYXJ0UGFkOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3BsaXRNdXhQYXJ0UGFkQ2xhc3MKLXsKLSAgR3N0UGFkQ2xhc3MgcGFyZW50OwotfSBHc3RTcGxpdE11eFBhcnRQYWRDbGFzczsKLQotc3RhdGljIEdUeXBlIGdzdF9zcGxpdG11eF9wYXJ0X3BhZF9nZXRfdHlwZSAodm9pZCk7Ci0jZGVmaW5lIFNQTElUTVVYX1RZUEVfUEFSVF9QQUQgZ3N0X3NwbGl0bXV4X3BhcnRfcGFkX2dldF90eXBlKCkKLSNkZWZpbmUgU1BMSVRNVVhfUEFSVF9QQURfQ0FTVChwKSAoKEdzdFNwbGl0TXV4UGFydFBhZCAqKShwKSkKLQotc3RhdGljIHZvaWQgc3BsaXRtdXhfcGFydF9wYWRfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBwYWQpOwotc3RhdGljIHZvaWQgc3BsaXRtdXhfcGFydF9wYWRfZmluYWxpemUgKEdPYmplY3QgKiBwYWQpOwotc3RhdGljIHZvaWQgaGFuZGxlX2J1ZmZlcl9tZWFzdXJpbmcgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RTcGxpdE11eFBhcnRQYWQgKiBwYXJ0X3BhZCwgR3N0QnVmZmVyICogYnVmKTsKLQotc3RhdGljIGdib29sZWFuIHNwbGl0bXV4X2RhdGFfcXVldWVfaXNfZnVsbF9jYiAoR3N0RGF0YVF1ZXVlICogcXVldWUsCi0gICAgZ3VpbnQgdmlzaWJsZSwgZ3VpbnQgYnl0ZXMsIGd1aW50NjQgdGltZSwgZ3BvaW50ZXIgY2hlY2tkYXRhKTsKLXN0YXRpYyB2b2lkIHR5cGVfZm91bmQgKEdzdEVsZW1lbnQgKiB0eXBlZmluZCwgZ3VpbnQgcHJvYmFiaWxpdHksCi0gICAgR3N0Q2FwcyAqIGNhcHMsIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlcik7Ci1zdGF0aWMgdm9pZCBjaGVja19pZl9wYWRzX2NvbGxlY3RlZCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKTsKLQotLyogQ2FsbGVkIHdpdGggcmVhZGVyIGxvY2sgaGVsZCAqLwotc3RhdGljIGdib29sZWFuCi1oYXZlX2VtcHR5X3F1ZXVlIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIEdMaXN0ICpjdXI7Ci0KLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHJlYWRlci0+cGFkcyk7IGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIEdzdFNwbGl0TXV4UGFydFBhZCAqcGFydF9wYWQgPSBTUExJVE1VWF9QQVJUX1BBRF9DQVNUIChjdXItPmRhdGEpOwotICAgIGlmIChwYXJ0X3BhZC0+aXNfZW9zKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFydF9wYWQsICJQYWQgaXMgRU9TIik7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gICAgaWYgKGdzdF9kYXRhX3F1ZXVlX2lzX2VtcHR5IChwYXJ0X3BhZC0+cXVldWUpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFydF9wYWQsICJRdWV1ZSBpcyBlbXB0eSIpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiBDYWxsZWQgd2l0aCByZWFkZXIgbG9jayBoZWxkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWJsb2NrX3VudGlsX2Nhbl9wdXNoIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIHdoaWxlIChyZWFkZXItPnJ1bm5pbmcpIHsKLSAgICBpZiAocmVhZGVyLT5mbHVzaGluZykKLSAgICAgIGdvdG8gb3V0OwotICAgIGlmIChyZWFkZXItPmFjdGl2ZSAmJiBoYXZlX2VtcHR5X3F1ZXVlIChyZWFkZXIpKQotICAgICAgZ290byBvdXQ7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocmVhZGVyLAotICAgICAgICAiV2FpdGluZyBmb3IgYWN0aXZhdGlvbiBvciBlbXB0eSBxdWV1ZSBvbiByZWFkZXIgJXMiLCByZWFkZXItPnBhdGgpOwotICAgIFNQTElUTVVYX1BBUlRfV0FJVCAocmVhZGVyKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChyZWFkZXIsICJEb25lIHdhaXRpbmcgb24gcmVhZGVyICVzIGFjdGl2ZSAlZCBmbHVzaGluZyAlZCIsCi0gICAgICByZWFkZXItPnBhdGgsIHJlYWRlci0+YWN0aXZlLCByZWFkZXItPmZsdXNoaW5nKTsKLW91dDoKLSAgcmV0dXJuIHJlYWRlci0+YWN0aXZlICYmICFyZWFkZXItPmZsdXNoaW5nOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2J1ZmZlcl9tZWFzdXJpbmcgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RTcGxpdE11eFBhcnRQYWQgKiBwYXJ0X3BhZCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RDbG9ja1RpbWVEaWZmIHRzID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIEdzdENsb2NrVGltZURpZmYgb2Zmc2V0OwotCi0gIGlmIChyZWFkZXItPnByZXBfc3RhdGUgPT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfQ09MTEVDVF9TVFJFQU1TICYmCi0gICAgICAhcGFydF9wYWQtPnNlZW5fYnVmZmVyKSB7Ci0gICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYnVmZmVyIG9uIHRoZSBwYWQgaW4gdGhlIGNvbGxlY3Rfc3RyZWFtcyBzdGF0ZSwKLSAgICAgKiB0aGVuIGNhbGN1bGF0ZSBpbml0YWwgb2Zmc2V0IGJhc2VkIG9uIHJ1bm5pbmcgdGltZSBvZiB0aGlzIHNlZ21lbnQgKi8KLSAgICBwYXJ0X3BhZC0+aW5pdGlhbF90c19vZmZzZXQgPQotICAgICAgICBwYXJ0X3BhZC0+b3JpZ19zZWdtZW50LnN0YXJ0ICsgcGFydF9wYWQtPm9yaWdfc2VnbWVudC5iYXNlIC0KLSAgICAgICAgcGFydF9wYWQtPm9yaWdfc2VnbWVudC50aW1lOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgIkluaXRpYWwgVFMgb2Zmc2V0IGZvciBwYWQgJSIgR1NUX1BUUl9GT1JNQVQgIiBub3cgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBwYXJ0X3BhZCwgR1NUX1RJTUVfQVJHUyAocGFydF9wYWQtPmluaXRpYWxfdHNfb2Zmc2V0KSk7Ci0gIH0KLSAgcGFydF9wYWQtPnNlZW5fYnVmZmVyID0gVFJVRTsKLQotICAvKiBBZGp1c3QgYnVmZmVyIHRpbWVzdGFtcHMgKi8KLSAgb2Zmc2V0ID0gcmVhZGVyLT5zdGFydF9vZmZzZXQgKyBwYXJ0X3BhZC0+c2VnbWVudC5iYXNlOwotICBvZmZzZXQgLT0gcGFydF9wYWQtPmluaXRpYWxfdHNfb2Zmc2V0OwotCi0gIC8qIFVwZGF0ZSB0aGUgc3RvcmVkIG1heCBkdXJhdGlvbiBvbiB0aGUgcGFkLAotICAgKiBhbHdheXMgcHJlZmVycmluZyBtYWtpbmcgRFRTIGNvbnRpZ3VvdXMKLSAgICogd2hlcmUgcG9zc2libGUgKi8KLSAgaWYgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChidWYpKQotICAgIHRzID0gR1NUX0JVRkZFUl9EVFMgKGJ1ZikgKyBvZmZzZXQ7Ci0gIGVsc2UgaWYgKEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEIChidWYpKQotICAgIHRzID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZikgKyBvZmZzZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocmVhZGVyLCAiUGFkICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAiIGluY29taW5nIFBUUyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgRFRTICUiIEdTVF9USU1FX0ZPUk1BVCAiIG9mZnNldCBieSAlIiBHU1RfU1RJTUVfRk9STUFUCi0gICAgICAiIHRvICUiIEdTVF9TVElNRV9GT1JNQVQsIHBhcnRfcGFkLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVFMgKGJ1ZikpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKGJ1ZikpLAotICAgICAgR1NUX1NUSU1FX0FSR1MgKG9mZnNldCksIEdTVF9TVElNRV9BUkdTICh0cykpOwotCi0gIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHRzKSkgewotICAgIGlmIChHU1RfQlVGRkVSX0RVUkFUSU9OX0lTX1ZBTElEIChidWYpKQotICAgICAgdHMgKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLQotICAgIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHRzKQotICAgICAgICAmJiB0cyA+IChHc3RDbG9ja1RpbWVEaWZmKSBwYXJ0X3BhZC0+bWF4X3RzKSB7Ci0gICAgICBwYXJ0X3BhZC0+bWF4X3RzID0gdHM7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocmVhZGVyLAotICAgICAgICAgICJwYWQgJSIgR1NUX1BUUl9GT1JNQVQgIiBtYXggVFMgbm93ICUiIEdTVF9USU1FX0ZPUk1BVCwgcGFydF9wYWQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocGFydF9wYWQtPm1heF90cykpOwotICAgIH0KLSAgfQotICAvKiBJcyBpdCB0aW1lIHRvIG1vdmUgdG8gbWVhc3VyaW5nIHN0YXRlIHlldD8gKi8KLSAgY2hlY2tfaWZfcGFkc19jb2xsZWN0ZWQgKHJlYWRlcik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3BsaXRtdXhfZGF0YV9xdWV1ZV9pc19mdWxsX2NiIChHc3REYXRhUXVldWUgKiBxdWV1ZSwKLSAgICBndWludCB2aXNpYmxlLCBndWludCBieXRlcywgZ3VpbnQ2NCB0aW1lLCBncG9pbnRlciBjaGVja2RhdGEpCi17Ci0gIC8qIEFyYml0cmFyeSBzYWZldHkgbGltaXQuIElmIHdlIGhpdCBpdCwgcGxheWJhY2sgaXMgbGlrZWx5IHRvIHN0YWxsICovCi0gIGlmICh0aW1lID4gMjAgKiBHU1RfU0VDT05EKQotICAgIHJldHVybiBUUlVFOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcGxpdG11eF9wYXJ0X2ZyZWVfcXVldWVfaXRlbSAoR3N0RGF0YVF1ZXVlSXRlbSAqIGl0ZW0pCi17Ci0gIGdzdF9taW5pX29iamVjdF91bnJlZiAoaXRlbS0+b2JqZWN0KTsKLSAgZ19zbGljZV9mcmVlIChHc3REYXRhUXVldWVJdGVtLCBpdGVtKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXNwbGl0bXV4X3BhcnRfcGFkX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RTcGxpdE11eFBhcnRQYWQgKnBhcnRfcGFkID0gU1BMSVRNVVhfUEFSVF9QQURfQ0FTVCAocGFkKTsKLSAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXIgPSBwYXJ0X3BhZC0+cmVhZGVyOwotICBHc3REYXRhUXVldWVJdGVtICppdGVtOwotICBHc3RDbG9ja1RpbWVEaWZmIG9mZnNldDsKLQotICBHU1RfTE9HX09CSkVDVCAocmVhZGVyLCAiUGFkICUiIEdTVF9QVFJfRk9STUFUICIgJSIgR1NUX1BUUl9GT1JNQVQsIHBhZCwgYnVmKTsKLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotCi0gIGlmIChyZWFkZXItPnByZXBfc3RhdGUgPT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfQ09MTEVDVF9TVFJFQU1TIHx8Ci0gICAgICByZWFkZXItPnByZXBfc3RhdGUgPT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfTUVBU1VSRV9TVFJFQU1TKSB7Ci0gICAgaGFuZGxlX2J1ZmZlcl9tZWFzdXJpbmcgKHJlYWRlciwgcGFydF9wYWQsIGJ1Zik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICBpZiAoIWJsb2NrX3VudGlsX2Nhbl9wdXNoIChyZWFkZXIpKSB7Ci0gICAgLyogRmx1c2hpbmcgKi8KLSAgICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotCi0gIC8qIEFkanVzdCBidWZmZXIgdGltZXN0YW1wcyAqLwotICBvZmZzZXQgPSByZWFkZXItPnN0YXJ0X29mZnNldCArIHBhcnRfcGFkLT5zZWdtZW50LmJhc2U7Ci0gIG9mZnNldCAtPSBwYXJ0X3BhZC0+aW5pdGlhbF90c19vZmZzZXQ7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEIChidWYpKQotICAgIEdTVF9CVUZGRVJfUFRTIChidWYpICs9IG9mZnNldDsKLSAgaWYgKEdTVF9CVUZGRVJfRFRTX0lTX1ZBTElEIChidWYpKQotICAgIEdTVF9CVUZGRVJfRFRTIChidWYpICs9IG9mZnNldDsKLQotICAvKiBXZSBhcmUgYWN0aXZlLCBhbmQgb25lIHF1ZXVlIGlzIGVtcHR5LCBwbGFjZSB0aGlzIGJ1ZmZlciBpbgotICAgKiB0aGUgZGF0YXF1ZXVlICovCi0gIEdTVF9MT0dfT0JKRUNUIChyZWFkZXIsICJFbnF1ZXVlaW5nIGJ1ZmZlciAlIiBHU1RfUFRSX0ZPUk1BVCwgYnVmKTsKLSAgaXRlbSA9IGdfc2xpY2VfbmV3IChHc3REYXRhUXVldWVJdGVtKTsKLSAgaXRlbS0+ZGVzdHJveSA9IChHRGVzdHJveU5vdGlmeSkgc3BsaXRtdXhfcGFydF9mcmVlX3F1ZXVlX2l0ZW07Ci0gIGl0ZW0tPm9iamVjdCA9IEdTVF9NSU5JX09CSkVDVCAoYnVmKTsKLSAgaXRlbS0+c2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gIGl0ZW0tPmR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLSAgaWYgKGl0ZW0tPmR1cmF0aW9uID09IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgaXRlbS0+ZHVyYXRpb24gPSAwOwotICBpdGVtLT52aXNpYmxlID0gVFJVRTsKLQotICBnc3Rfb2JqZWN0X3JlZiAocGFydF9wYWQpOwotCi0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotCi0gIGlmICghZ3N0X2RhdGFfcXVldWVfcHVzaCAocGFydF9wYWQtPnF1ZXVlLCBpdGVtKSkgewotICAgIHNwbGl0bXV4X3BhcnRfZnJlZV9xdWV1ZV9pdGVtIChpdGVtKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJ0X3BhZCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFydF9wYWQpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qIENhbGxlZCB3aXRoIHNwbGl0bXV4IHBhcnQgbG9jayBoZWxkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXNwbGl0bXV4X3BhcnRfaXNfZW9zX2xvY2tlZCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcGFydCkKLXsKLSAgR0xpc3QgKmN1cjsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHBhcnQtPnBhZHMpOyBjdXIgIT0gTlVMTDsgY3VyID0gZ19saXN0X25leHQgKGN1cikpIHsKLSAgICBHc3RTcGxpdE11eFBhcnRQYWQgKnBhcnRfcGFkID0gU1BMSVRNVVhfUEFSVF9QQURfQ0FTVCAoY3VyLT5kYXRhKTsKLSAgICBpZiAoIXBhcnRfcGFkLT5pc19lb3MpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zcGxpdG11eF9wYXJ0X2lzX3ByZXJvbGxlZF9sb2NrZWQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHBhcnQpCi17Ci0gIEdMaXN0ICpjdXI7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYXJ0LCAiQ2hlY2tpbmcgZm9yIHByZXJvbGwiKTsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHBhcnQtPnBhZHMpOyBjdXIgIT0gTlVMTDsgY3VyID0gZ19saXN0X25leHQgKGN1cikpIHsKLSAgICBHc3RTcGxpdE11eFBhcnRQYWQgKnBhcnRfcGFkID0gU1BMSVRNVVhfUEFSVF9QQURfQ0FTVCAoY3VyLT5kYXRhKTsKLSAgICBpZiAoIXBhcnRfcGFkLT5zZWVuX2J1ZmZlcikgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhcnQsICJQYXJ0IHBhZCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGlzIG5vdCBwcmVyb2xsZWQiLAotICAgICAgICAgIHBhcnRfcGFkKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhcnQsICJQYXJ0IGlzIHByZXJvbGxlZCIpOwotICByZXR1cm4gVFJVRTsKLX0KLQotCi1nYm9vbGVhbgotZ3N0X3NwbGl0bXV4X3BhcnRfaXNfZW9zIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBTUExJVE1VWF9QQVJUX0xPQ0sgKHJlYWRlcik7Ci0gIHJlcyA9IHNwbGl0bXV4X3BhcnRfaXNfZW9zX2xvY2tlZCAocmVhZGVyKTsKLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogQ2FsbGVkIHdpdGggc3BsaXRtdXggcGFydCBsb2NrIGhlbGQgKi8KLXN0YXRpYyBnYm9vbGVhbgotc3BsaXRtdXhfaXNfZmx1c2hpbmcgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlcikKLXsKLSAgR0xpc3QgKmN1cjsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHJlYWRlci0+cGFkcyk7IGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIEdzdFNwbGl0TXV4UGFydFBhZCAqcGFydF9wYWQgPSBTUExJVE1VWF9QQVJUX1BBRF9DQVNUIChjdXItPmRhdGEpOwotICAgIGlmIChwYXJ0X3BhZC0+Zmx1c2hpbmcpCi0gICAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zcGxpdG11eF9wYXJ0X3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFNwbGl0TXV4UGFydFBhZCAqcGFydF9wYWQgPSBTUExJVE1VWF9QQVJUX1BBRF9DQVNUIChwYWQpOwotICBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlciA9IHBhcnRfcGFkLT5yZWFkZXI7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIFNwbGl0TXV4U3JjUGFkICp0YXJnZXQ7Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKml0ZW07Ci0KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotCi0gIHRhcmdldCA9IGdzdF9vYmplY3RfcmVmIChwYXJ0X3BhZC0+dGFyZ2V0KTsKLQotICBHU1RfTE9HX09CSkVDVCAocmVhZGVyLCAiUGFkICUiIEdTVF9QVFJfRk9STUFUICIgZXZlbnQgJSIgR1NUX1BUUl9GT1JNQVQsIHBhZCwKLSAgICAgIGV2ZW50KTsKLQotICBpZiAocGFydF9wYWQtPmZsdXNoaW5nICYmIEdTVF9FVkVOVF9UWVBFIChldmVudCkgIT0gR1NUX0VWRU5UX0ZMVVNIX1NUT1ApCi0gICAgZ290byBkcm9wX2V2ZW50OwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6ewotICAgICAgR3N0U2VnbWVudCAqc2VnID0gJnBhcnRfcGFkLT5zZWdtZW50OwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiUmVjZWl2ZWQgc2VnbWVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgZXZlbnQpOwotCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgc2VnKTsKLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmcGFydF9wYWQtPm9yaWdfc2VnbWVudCk7Ci0KLSAgICAgIGlmIChzZWctPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpCi0gICAgICAgIGdvdG8gd3Jvbmdfc2VnbWVudDsKLQotICAgICAgLyogQWRqdXN0IHNlZ21lbnQgKi8KLSAgICAgIC8qIEFkanVzdCBzdGFydC9zdG9wIHNvIHRoZSBvdmVyYWxsIGZpbGUgaXMgMCArIHN0YXJ0X29mZnNldCBiYXNlZCAqLwotICAgICAgaWYgKHNlZy0+c3RvcCAhPSAtMSkgewotICAgICAgICBzZWctPnN0b3AgLT0gc2VnLT5zdGFydDsKLSAgICAgICAgc2VnLT5zdG9wICs9IHNlZy0+dGltZSArIHJlYWRlci0+c3RhcnRfb2Zmc2V0OwotICAgICAgfQotICAgICAgc2VnLT5zdGFydCA9IHNlZy0+dGltZSArIHJlYWRlci0+c3RhcnRfb2Zmc2V0OwotICAgICAgc2VnLT50aW1lICs9IHJlYWRlci0+c3RhcnRfb2Zmc2V0OwotICAgICAgc2VnLT5wb3NpdGlvbiArPSByZWFkZXItPnN0YXJ0X29mZnNldDsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkFkanVzdGVkIHNlZ21lbnQgbm93ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgICAgIC8qIFJlcGxhY2UgZXZlbnQgKi8KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKHNlZyk7Ci0KLSAgICAgIGlmIChyZWFkZXItPnByZXBfc3RhdGUgIT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfQ09MTEVDVF9TVFJFQU1TCi0gICAgICAgICAgJiYgcmVhZGVyLT5wcmVwX3N0YXRlICE9IFBBUlRfU1RBVEVfUFJFUEFSSU5HX01FQVNVUkVfU1RSRUFNUykKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogT25seSBkbyBmdXJ0aGVyIHN0dWZmIHdpdGggc2VnbWVudHMgZHVyaW5nIGluaXRpYWwgbWVhc3VyaW5nICovCi0KLSAgICAgIC8qIFRha2UgdGhlIGZpcnN0IHNlZ21lbnQgZnJvbSB0aGUgZmlyc3QgcGFydCAqLwotICAgICAgaWYgKHRhcmdldC0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9VTkRFRklORUQpIHsKLSAgICAgICAgZ3N0X3NlZ21lbnRfY29weV9pbnRvIChzZWcsICZ0YXJnZXQtPnNlZ21lbnQpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChyZWFkZXIsCi0gICAgICAgICAgICAiVGFyZ2V0IHBhZCBzZWdtZW50IG5vdyAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsICZ0YXJnZXQtPnNlZ21lbnQpOwotICAgICAgfQotCi0gICAgICBpZiAoc2VnLT5zdG9wICE9IC0xICYmIHRhcmdldC0+c2VnbWVudC5zdG9wICE9IC0xKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBzdG9wID0gc2VnLT5iYXNlICsgc2VnLT5zdG9wOwotICAgICAgICBpZiAoc3RvcCA+IHRhcmdldC0+c2VnbWVudC5zdG9wKSB7Ci0gICAgICAgICAgdGFyZ2V0LT5zZWdtZW50LnN0b3AgPSBzdG9wOwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgICAgICAgIkFkanVzdGluZyBzZWdtZW50IHN0b3AgYnkgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgICAgICIgb3V0cHV0IG5vdyAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHJlYWRlci0+c3RhcnRfb2Zmc2V0KSwgJnRhcmdldC0+c2VnbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJGb3J3YXJkaW5nIHNlZ21lbnQgJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6ewotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJ0X3BhZCwKLSAgICAgICAgICAiU3RhdGUgJXUgRU9TIGV2ZW50LiBNYXhUUyBzZWVuICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICByZWFkZXItPnByZXBfc3RhdGUsIEdTVF9USU1FX0FSR1MgKHBhcnRfcGFkLT5tYXhfdHMpKTsKLQotICAgICAgaWYgKHJlYWRlci0+cHJlcF9zdGF0ZSA9PSBQQVJUX1NUQVRFX1BSRVBBUklOR19DT0xMRUNUX1NUUkVBTVMgfHwKLSAgICAgICAgICByZWFkZXItPnByZXBfc3RhdGUgPT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfTUVBU1VSRV9TVFJFQU1TKSB7Ci0gICAgICAgIC8qIE1hcmsgdGhpcyBwYWQgYXMgRU9TICovCi0gICAgICAgIHBhcnRfcGFkLT5pc19lb3MgPSBUUlVFOwotICAgICAgICBpZiAoc3BsaXRtdXhfcGFydF9pc19lb3NfbG9ja2VkIChyZWFkZXIpKSB7Ci0gICAgICAgICAgLyogRmluaXNoZWQgbWVhc3VyaW5nIHRoaW5ncywgc2V0IHN0YXRlIGFuZCB0ZWxsIHRoZSBzdGF0ZSBjaGFuZ2UgZnVuYwotICAgICAgICAgICAqIHNvIGl0IGNhbiBzZWVrIGJhY2sgdG8gdGhlIHN0YXJ0ICovCi0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgICAgICAgIkVPUyB3aGlsZSBtZWFzdXJpbmcgc3RyZWFtcy4gUmVzZXR0aW5nIGZvciByZWFkeSIpOwotICAgICAgICAgIHJlYWRlci0+cHJlcF9zdGF0ZSA9IFBBUlRfU1RBVEVfUFJFUEFSSU5HX1JFU0VUX0ZPUl9SRUFEWTsKLSAgICAgICAgICBTUExJVE1VWF9QQVJUX0JST0FEQ0FTVCAocmVhZGVyKTsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGRyb3BfZXZlbnQ7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICByZWFkZXItPmZsdXNoaW5nID0gVFJVRTsKLSAgICAgIHBhcnRfcGFkLT5mbHVzaGluZyA9IFRSVUU7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocmVhZGVyLCAiUGFkICUiIEdTVF9QVFJfRk9STUFUICIgZmx1c2hpbmcgZGF0YXF1ZXVlIiwKLSAgICAgICAgICBwYXJ0X3BhZCk7Ci0gICAgICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHBhcnRfcGFkLT5xdWV1ZSwgVFJVRSk7Ci0gICAgICBTUExJVE1VWF9QQVJUX0JST0FEQ0FTVCAocmVhZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6ewotICAgICAgZ3N0X2RhdGFfcXVldWVfc2V0X2ZsdXNoaW5nIChwYXJ0X3BhZC0+cXVldWUsIEZBTFNFKTsKLSAgICAgIGdzdF9kYXRhX3F1ZXVlX2ZsdXNoIChwYXJ0X3BhZC0+cXVldWUpOwotICAgICAgcGFydF9wYWQtPnNlZW5fYnVmZmVyID0gRkFMU0U7Ci0gICAgICBwYXJ0X3BhZC0+Zmx1c2hpbmcgPSBGQUxTRTsKLSAgICAgIHBhcnRfcGFkLT5pc19lb3MgPSBGQUxTRTsKLQotICAgICAgcmVhZGVyLT5mbHVzaGluZyA9IHNwbGl0bXV4X2lzX2ZsdXNoaW5nIChyZWFkZXIpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgICAiJXMgcGFkICUiIEdTVF9QVFJfRk9STUFUICIgZmx1c2hfc3RvcC4gT3ZlcmFsbCBmbHVzaGluZz0lZCIsCi0gICAgICAgICAgcmVhZGVyLT5wYXRoLCBwYWQsIHJlYWRlci0+Zmx1c2hpbmcpOwotICAgICAgU1BMSVRNVVhfUEFSVF9CUk9BRENBU1QgKHJlYWRlcik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogRG9uJ3Qgc2VuZCBldmVudHMgZG93bnN0cmVhbSB3aGlsZSBwcmVwYXJpbmcgKi8KLSAgaWYgKHJlYWRlci0+cHJlcF9zdGF0ZSAhPSBQQVJUX1NUQVRFX1JFQURZKQotICAgIGdvdG8gZHJvcF9ldmVudDsKLQotICAvKiBEb24ndCBwYXNzIGZsdXNoIGV2ZW50cyAtIHRob3NlIGFyZSBkb25lIGJ5IHRoZSBwYXJlbnQgKi8KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUIHx8Ci0gICAgICBHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9GTFVTSF9TVE9QKQotICAgIGdvdG8gZHJvcF9ldmVudDsKLQotICBpZiAoIWJsb2NrX3VudGlsX2Nhbl9wdXNoIChyZWFkZXIpKSB7Ci0gICAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9HQVA6ewotICAgICAgLyogRklYTUU6IERyb3AgaW5pdGlhbCBnYXAgKGlmIGFueSkgaW4gZWFjaCBzZWdtZW50LCBub3QgYWxsIEdBUHMgKi8KLSAgICAgIGdvdG8gZHJvcF9ldmVudDsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogV2UgYXJlIGFjdGl2ZSwgYW5kIG9uZSBxdWV1ZSBpcyBlbXB0eSwgcGxhY2UgdGhpcyBidWZmZXIgaW4KLSAgICogdGhlIGRhdGFxdWV1ZSAqLwotICBnc3Rfb2JqZWN0X3JlZiAocGFydF9wYWQtPnF1ZXVlKTsKLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJlYWRlciwgIkVucXVldWVpbmcgZXZlbnQgJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50KTsKLSAgaXRlbSA9IGdfc2xpY2VfbmV3IChHc3REYXRhUXVldWVJdGVtKTsKLSAgaXRlbS0+ZGVzdHJveSA9IChHRGVzdHJveU5vdGlmeSkgc3BsaXRtdXhfcGFydF9mcmVlX3F1ZXVlX2l0ZW07Ci0gIGl0ZW0tPm9iamVjdCA9IEdTVF9NSU5JX09CSkVDVCAoZXZlbnQpOwotICBpdGVtLT5zaXplID0gMDsKLSAgaXRlbS0+ZHVyYXRpb24gPSAwOwotICBpZiAoaXRlbS0+ZHVyYXRpb24gPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBpdGVtLT5kdXJhdGlvbiA9IDA7Ci0gIGl0ZW0tPnZpc2libGUgPSBGQUxTRTsKLQotICBpZiAoIWdzdF9kYXRhX3F1ZXVlX3B1c2ggKHBhcnRfcGFkLT5xdWV1ZSwgaXRlbSkpIHsKLSAgICBzcGxpdG11eF9wYXJ0X2ZyZWVfcXVldWVfaXRlbSAoaXRlbSk7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChwYXJ0X3BhZC0+cXVldWUpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotCi0gIHJldHVybiByZXQ7Ci13cm9uZ19zZWdtZW50OgotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChyZWFkZXIsIFNUUkVBTSwgRkFJTEVELCAoTlVMTCksCi0gICAgICAoIlJlY2VpdmVkIG5vbi10aW1lIHNlZ21lbnQgLSByZWFkZXIgJXMgcGFkICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgIHJlYWRlci0+cGF0aCwgcGFkKSk7Ci0gIHJldHVybiBGQUxTRTsKLWRyb3BfZXZlbnQ6Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJEcm9wcGluZyBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiBmcm9tICUiIEdTVF9QVFJfRk9STUFUICIgb24gJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50LCBwYWQsIHRhcmdldCk7Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3BsaXRtdXhfcGFydF9wYWRfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RTcGxpdE11eFBhcnRQYWQgKnBhcnRfcGFkID0gU1BMSVRNVVhfUEFSVF9QQURfQ0FTVCAocGFkKTsKLSAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXIgPSBwYXJ0X3BhZC0+cmVhZGVyOwotICBHc3RQYWQgKnRhcmdldDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIGdib29sZWFuIGFjdGl2ZTsKLQotICBTUExJVE1VWF9QQVJUX0xPQ0sgKHJlYWRlcik7Ci0gIHRhcmdldCA9IGdzdF9vYmplY3RfcmVmIChwYXJ0X3BhZC0+dGFyZ2V0KTsKLSAgYWN0aXZlID0gcmVhZGVyLT5hY3RpdmU7Ci0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiRm9yd2FyZGluZyBxdWVyeSAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgICAiIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQgIiBvbiAlIiBHU1RfUFRSX0ZPUk1BVCwgcXVlcnksIHBhZCwgdGFyZ2V0KTsKLQotICAgIHJldCA9IGdzdF9wYWRfcXVlcnkgKHRhcmdldCwgcXVlcnkpOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1HX0RFRklORV9UWVBFIChHc3RTcGxpdE11eFBhcnRQYWQsIGdzdF9zcGxpdG11eF9wYXJ0X3BhZCwgR1NUX1RZUEVfUEFEKTsKLQotc3RhdGljIHZvaWQKLXNwbGl0bXV4X3BhcnRfcGFkX2NvbnN0cnVjdGVkIChHT2JqZWN0ICogcGFkKQotewotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoR1NUX1BBRCAocGFkKSwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChzcGxpdG11eF9wYXJ0X3BhZF9jaGFpbikpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoR1NUX1BBRCAocGFkKSwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChzcGxpdG11eF9wYXJ0X3BhZF9ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoR1NUX1BBRCAocGFkKSwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChzcGxpdG11eF9wYXJ0X3BhZF9xdWVyeSkpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3Rfc3BsaXRtdXhfcGFydF9wYWRfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQgKHBhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfcGFydF9wYWRfY2xhc3NfaW5pdCAoR3N0U3BsaXRNdXhQYXJ0UGFkQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2tsYXNzID0gKEdPYmplY3RDbGFzcyAqKSAoa2xhc3MpOwotCi0gIGdvYmplY3Rfa2xhc3MtPmNvbnN0cnVjdGVkID0gc3BsaXRtdXhfcGFydF9wYWRfY29uc3RydWN0ZWQ7Ci0gIGdvYmplY3Rfa2xhc3MtPmZpbmFsaXplID0gc3BsaXRtdXhfcGFydF9wYWRfZmluYWxpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfcGFydF9wYWRfaW5pdCAoR3N0U3BsaXRNdXhQYXJ0UGFkICogcGFkKQotewotICBwYWQtPnF1ZXVlID0gZ3N0X2RhdGFfcXVldWVfbmV3IChzcGxpdG11eF9kYXRhX3F1ZXVlX2lzX2Z1bGxfY2IsCi0gICAgICBOVUxMLCBOVUxMLCBwYWQpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmcGFkLT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZwYWQtPm9yaWdfc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotfQotCi1zdGF0aWMgdm9pZAotc3BsaXRtdXhfcGFydF9wYWRfZmluYWxpemUgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFNwbGl0TXV4UGFydFBhZCAqcGFkID0gKEdzdFNwbGl0TXV4UGFydFBhZCAqKSAob2JqKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJmaW5hbGl6ZSIpOwotICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHBhZC0+cXVldWUsIFRSVUUpOwotICBnc3RfZGF0YV9xdWV1ZV9mbHVzaCAocGFkLT5xdWV1ZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1RfQ0FTVCAocGFkLT5xdWV1ZSkpOwotICBwYWQtPnF1ZXVlID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3NwbGl0bXV4X3BhcnRfcGFkX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotbmV3X2RlY29kZWRfcGFkX2FkZGVkX2NiIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkLAotICAgIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHBhcnQpOwotc3RhdGljIHZvaWQgbm9fbW9yZV9wYWRzIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NlbmRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIHZvaWQgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NldF9mbHVzaGluZ19sb2NrZWQgKEdzdFNwbGl0TXV4UGFydFJlYWRlcgotICAgICogcGFydCwgZ2Jvb2xlYW4gZmx1c2hpbmcpOwotc3RhdGljIHZvaWQgYnVzX2hhbmRsZXIgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1zZyk7Ci1zdGF0aWMgdm9pZCBzcGxpdG11eF9wYXJ0X3JlYWRlcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIHNwbGl0bXV4X3BhcnRfcmVhZGVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIHNwbGl0bXV4X3BhcnRfcmVhZGVyX3Jlc2V0IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpOwotCi0jZGVmaW5lIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RTcGxpdE11eFBhcnRSZWFkZXIsIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlciwKLSAgICBHU1RfVFlQRV9QSVBFTElORSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfY2xhc3NfaW5pdCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2tsYXNzID0gKEdPYmplY3RDbGFzcyAqKSAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCaW5DbGFzcyAqZ3N0YmluX2NsYXNzID0gKEdzdEJpbkNsYXNzICopIGtsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChzcGxpdG11eF9wYXJ0X2RlYnVnLCAic3BsaXRtdXhwYXJ0cmVhZGVyIiwgMCwKLSAgICAgICJTcGxpdCBGaWxlIERlbXV4aW5nIFNvdXJjZSBoZWxwZXIiKTsKLQotICBnb2JqZWN0X2tsYXNzLT5kaXNwb3NlID0gc3BsaXRtdXhfcGFydF9yZWFkZXJfZGlzcG9zZTsKLSAgZ29iamVjdF9rbGFzcy0+ZmluYWxpemUgPSBzcGxpdG11eF9wYXJ0X3JlYWRlcl9maW5hbGl6ZTsKLQotICBwYXJ0X3JlYWRlcl9zaWduYWxzW1NJR05BTF9QUkVQQVJFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicHJlcGFyZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0ZJUlNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFNwbGl0TXV4UGFydFJlYWRlckNsYXNzLAotICAgICAgICAgIHByZXBhcmVkKSwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2NoYW5nZV9zdGF0ZTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2VuZF9ldmVudCA9IGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZW5kX2V2ZW50OwotCi0gIGdzdGJpbl9jbGFzcy0+aGFuZGxlX21lc3NhZ2UgPSBidXNfaGFuZGxlcjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9pbml0IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIEdzdEVsZW1lbnQgKnR5cGVmaW5kOwotCi0gIHJlYWRlci0+YWN0aXZlID0gRkFMU0U7Ci0gIHJlYWRlci0+ZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGdfY29uZF9pbml0ICgmcmVhZGVyLT5pbmFjdGl2ZV9jb25kKTsKLSAgZ19tdXRleF9pbml0ICgmcmVhZGVyLT5sb2NrKTsKLSAgZ19tdXRleF9pbml0ICgmcmVhZGVyLT50eXBlX2xvY2spOwotCi0gIC8qIEZJWE1FOiBDcmVhdGUgZWxlbWVudHMgb24gYSBzdGF0ZSBjaGFuZ2UgKi8KLSAgcmVhZGVyLT5zcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgTlVMTCk7Ci0gIGlmIChyZWFkZXItPnNyYyA9PSBOVUxMKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocmVhZGVyLCAiRmFpbGVkIHRvIGNyZWF0ZSBmaWxlc3JjIGVsZW1lbnQiKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAocmVhZGVyKSwgcmVhZGVyLT5zcmMpOwotCi0gIHR5cGVmaW5kID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidHlwZWZpbmQiLCBOVUxMKTsKLSAgaWYgKCF0eXBlZmluZCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgdHlwZWZpbmQgZWxlbWVudCAtIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAocmVhZGVyKSwgdHlwZWZpbmQpOwotICByZWFkZXItPnR5cGVmaW5kID0gdHlwZWZpbmQ7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rX3BhZHMgKHJlYWRlci0+c3JjLCBOVUxMLCB0eXBlZmluZCwgInNpbmsiKSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgIkZhaWxlZCB0byBsaW5rIHR5cGVmaW5kIGVsZW1lbnQgLSBjaGVjayB5b3VyIGluc3RhbGxhdGlvbiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJlYWRlci0+dHlwZWZpbmQsICJoYXZlLXR5cGUiLCBHX0NBTExCQUNLICh0eXBlX2ZvdW5kKSwKLSAgICAgIHJlYWRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcGxpdG11eF9wYXJ0X3JlYWRlcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlciA9IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKikgb2JqZWN0OwotCi0gIHNwbGl0bXV4X3BhcnRfcmVhZGVyX3Jlc2V0IChyZWFkZXIpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotc3BsaXRtdXhfcGFydF9yZWFkZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyID0gKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqKSBvYmplY3Q7Ci0KLSAgZ19jb25kX2NsZWFyICgmcmVhZGVyLT5pbmFjdGl2ZV9jb25kKTsKLSAgZ19tdXRleF9jbGVhciAoJnJlYWRlci0+bG9jayk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZyZWFkZXItPnR5cGVfbG9jayk7Ci0KLSAgZ19mcmVlIChyZWFkZXItPnBhdGgpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXNwbGl0bXV4X3BhcnRfcmVhZGVyX3Jlc2V0IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIEdMaXN0ICpjdXI7Ci0KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAocmVhZGVyLT5wYWRzKTsgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEX0NBU1QgKGN1ci0+ZGF0YSk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChHU1RfUEFEX0NBU1QgKHBhZCksIEZBTFNFKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUX0NBU1QgKHBhZCkpOwotICB9Ci0KLSAgZ19saXN0X2ZyZWUgKHJlYWRlci0+cGFkcyk7Ci0gIHJlYWRlci0+cGFkcyA9IE5VTEw7Ci0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotfQotCi1zdGF0aWMgR3N0U3BsaXRNdXhQYXJ0UGFkICoKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9uZXdfcHJveHlfcGFkIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIsCi0gICAgR3N0UGFkICogdGFyZ2V0KQotewotICBHc3RTcGxpdE11eFBhcnRQYWQgKnBhZCA9IGdfb2JqZWN0X25ldyAoU1BMSVRNVVhfVFlQRV9QQVJUX1BBRCwKLSAgICAgICJuYW1lIiwgR1NUX1BBRF9OQU1FICh0YXJnZXQpLAotICAgICAgImRpcmVjdGlvbiIsIEdTVF9QQURfU0lOSywKLSAgICAgIE5VTEwpOwotICBwYWQtPnRhcmdldCA9IHRhcmdldDsKLSAgcGFkLT5yZWFkZXIgPSByZWFkZXI7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChHU1RfUEFEX0NBU1QgKHBhZCksIFRSVUUpOwotCi0gIHJldHVybiBwYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1uZXdfZGVjb2RlZF9wYWRfYWRkZWRfY2IgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKQotewotICBHc3RQYWQgKm91dF9wYWQgPSBOVUxMOwotICBHc3RTcGxpdE11eFBhcnRQYWQgKnByb3h5X3BhZDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkTGlua1JldHVybiBsaW5rX3JldDsKLQotICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJlYWRlciwgImZpbGUgJXMgbmV3IGRlY29kZWQgcGFkICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAiIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHJlYWRlci0+cGF0aCwgcGFkLCBjYXBzKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogTG9vayB1cCBvciBjcmVhdGUgdGhlIG91dHB1dCBwYWQgKi8KLSAgaWYgKHJlYWRlci0+Z2V0X3BhZF9jYikKLSAgICBvdXRfcGFkID0gcmVhZGVyLT5nZXRfcGFkX2NiIChyZWFkZXIsIHBhZCwgcmVhZGVyLT5jYl9kYXRhKTsKLSAgaWYgKG91dF9wYWQgPT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJlYWRlciwKLSAgICAgICAgIk5vIG91dHB1dCBwYWQgZm9yICUiIEdTVF9QVFJfRk9STUFUICIuIElnbm9yaW5nIiwgcGFkKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDcmVhdGUgb3VyIHByb3h5IHBhZCB0byBpbnRlcmFjdCB3aXRoIHRoaXMgbmV3IHBhZCAqLwotICBwcm94eV9wYWQgPSBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfbmV3X3Byb3h5X3BhZCAocmVhZGVyLCBvdXRfcGFkKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocmVhZGVyLAotICAgICAgImNyZWF0ZWQgcHJveHkgcGFkICUiIEdTVF9QVFJfRk9STUFUICIgZm9yIHRhcmdldCAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIHByb3h5X3BhZCwgb3V0X3BhZCk7Ci0KLSAgbGlua19yZXQgPSBnc3RfcGFkX2xpbmsgKHBhZCwgR1NUX1BBRCAocHJveHlfcGFkKSk7Ci0gIGlmIChsaW5rX3JldCAhPSBHU1RfUEFEX0xJTktfT0spIHsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm94eV9wYWQpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChyZWFkZXIsIFNUUkVBTSwgRkFJTEVELCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIGxpbmsgcHJveHkgcGFkIGZvciBzdHJlYW0gcGFydCAlcyBwYWQgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgICAgICIgcmV0ICVkIiwgcmVhZGVyLT5wYXRoLCBwYWQsIGxpbmtfcmV0KSk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJlYWRlciwKLSAgICAgICJuZXcgZGVjb2RlZCBwYWQgJSIgR1NUX1BUUl9GT1JNQVQgIiBsaW5rZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBwYWQsIHByb3h5X3BhZCk7Ci0KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotICByZWFkZXItPnBhZHMgPSBnX2xpc3RfcHJlcGVuZCAocmVhZGVyLT5wYWRzLCBwcm94eV9wYWQpOwotICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyID0gKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqKSBlbGVtZW50OwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLSAgR3N0UGFkICpwYWQgPSBOVUxMOwotCi0gIC8qIFNlbmQgZXZlbnQgdG8gdGhlIGZpcnN0IHNvdXJjZSBwYWQgd2UgZm91bmQgKi8KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotICBpZiAocmVhZGVyLT5wYWRzKSB7Ci0gICAgR3N0UGFkICpwcm94eV9wYWQgPSBHU1RfUEFEX0NBU1QgKHJlYWRlci0+cGFkcy0+ZGF0YSk7Ci0gICAgcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAocHJveHlfcGFkKTsKLSAgfQotICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLQotICBpZiAocGFkKSB7Ci0gICAgcmV0ID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChwYWQsIGV2ZW50KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9IGVsc2UgewotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogQ2FsbGVkIHdpdGggbG9jayBoZWxkLiBTZWVrcyB0byBhbiAnaW50ZXJuYWwnIHRpbWUgZnJvbSAwIHRvIGxlbmd0aCBvZiB0aGlzIHBpZWNlICovCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NlZWtfdG9fdGltZV9sb2NrZWQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJlYWRlciwgIlNlZWtpbmcgdG8gdGltZSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lKSk7Ci0gIGdzdF9lbGVtZW50X3NlZWsgKEdTVF9FTEVNRU5UX0NBU1QgKHJlYWRlciksIDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUsIEdTVF9TRUVLX1RZUEVfU0VULCB0aW1lLAotICAgICAgR1NUX1NFRUtfVFlQRV9FTkQsIDApOwotCi0gIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLQotICAvKiBXYWl0IGZvciBmbHVzaCB0byBmaW5pc2gsIHNvIG9sZCBkYXRhIGlzIGdvbmUgKi8KLSAgd2hpbGUgKHJlYWRlci0+Zmx1c2hpbmcpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocmVhZGVyLCAiJXMgV2FpdGluZyBmb3IgZmx1c2ggdG8gZmluaXNoIiwgcmVhZGVyLT5wYXRoKTsKLSAgICBTUExJVE1VWF9QQVJUX1dBSVQgKHJlYWRlcik7Ci0gIH0KLX0KLQotLyogTWFwIHRoZSBwYXNzZWQgc2VnbWVudCB0byAnaW50ZXJuYWwnIHRpbWUgZnJvbSAwIHRvIGxlbmd0aCBvZiB0aGlzIHBpZWNlIGFuZCBzZWVrLiBMb2NrIGNhbm5vdCBiZSBoZWxkICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZWVrX3RvX3NlZ21lbnQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RTZWdtZW50ICogdGFyZ2V0X3NlZykKLXsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RDbG9ja1RpbWUgc3RhcnQgPSAwLCBzdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBmbGFncyA9IHRhcmdldF9zZWctPmZsYWdzIHwgR1NUX1NFRUtfRkxBR19GTFVTSDsKLQotICBTUExJVE1VWF9QQVJUX0xPQ0sgKHJlYWRlcik7Ci0gIGlmICh0YXJnZXRfc2VnLT5zdGFydCA+PSByZWFkZXItPnN0YXJ0X29mZnNldCkKLSAgICBzdGFydCA9IHRhcmdldF9zZWctPnN0YXJ0IC0gcmVhZGVyLT5zdGFydF9vZmZzZXQ7Ci0gIC8qIElmIHRoZSBzZWdtZW50IHN0b3AgaXMgd2l0aGluIHRoaXMgcGFydCwgZG9uJ3QgcGxheSB0byB0aGUgZW5kICovCi0gIGlmICh0YXJnZXRfc2VnLT5zdG9wICE9IC0xICYmCi0gICAgICB0YXJnZXRfc2VnLT5zdG9wIDwgcmVhZGVyLT5zdGFydF9vZmZzZXQgKyByZWFkZXItPmR1cmF0aW9uKQotICAgIHN0b3AgPSB0YXJnZXRfc2VnLT5zdG9wIC0gcmVhZGVyLT5zdGFydF9vZmZzZXQ7Ci0KLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocmVhZGVyLAotICAgICAgIlNlZWtpbmcgcmF0ZSAlZiBmb3JtYXQgJWQgZmxhZ3MgMHgleCBzdGFydCAlIiBHU1RfVElNRV9GT1JNQVQgIiBzdG9wICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIHRhcmdldF9zZWctPnJhdGUsIHRhcmdldF9zZWctPmZvcm1hdCwgZmxhZ3MsCi0gICAgICBHU1RfVElNRV9BUkdTIChzdGFydCksIEdTVF9USU1FX0FSR1MgKHN0b3ApKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfc2VlayAoR1NUX0VMRU1FTlRfQ0FTVCAocmVhZGVyKSwgdGFyZ2V0X3NlZy0+cmF0ZSwKLSAgICAgIHRhcmdldF9zZWctPmZvcm1hdCwgZmxhZ3MsIEdTVF9TRUVLX1RZUEVfU0VULCBzdGFydCwgR1NUX1NFRUtfVFlQRV9TRVQsCi0gICAgICBzdG9wKTsKLX0KLQotLyogQ2FsbGVkIHdpdGggbG9jayBoZWxkICovCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX21lYXN1cmVfc3RyZWFtcyAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKQotewotICAvKiBUcmlnZ2VyIGEgZmx1c2hpbmcgc2VlayB0byBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIHJ1biBlYWNoIHN0cmVhbQotICAgKiB0byBFT1MgaW4gb3JkZXIgdG8gZmluZCB0aGUgc21hbGxlc3QgZW5kIHRpbWVzdGFtcCB0byBzdGFydCB0aGUgbmV4dAotICAgKiBmaWxlIGZyb20KLSAgICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocmVhZGVyLT5kdXJhdGlvbikKLSAgICAgICYmIHJlYWRlci0+ZHVyYXRpb24gPiBHU1RfU0VDT05EKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHNlZWtfdHMgPSByZWFkZXItPmR1cmF0aW9uIC0gKDAuNSAqIEdTVF9TRUNPTkQpOwotICAgIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZWVrX3RvX3RpbWVfbG9ja2VkIChyZWFkZXIsIHNlZWtfdHMpOwotICB9Ci0KLSAgLyogV2FpdCBmb3IgdGhpbmdzIHRvIGhhcHBlbiAqLwotICB3aGlsZSAocmVhZGVyLT5wcmVwX3N0YXRlID09IFBBUlRfU1RBVEVfUFJFUEFSSU5HX01FQVNVUkVfU1RSRUFNUykKLSAgICBTUExJVE1VWF9QQVJUX1dBSVQgKHJlYWRlcik7Ci0KLSAgaWYgKHJlYWRlci0+cHJlcF9zdGF0ZSA9PSBQQVJUX1NUQVRFX1BSRVBBUklOR19SRVNFVF9GT1JfUkVBRFkpIHsKLSAgICAvKiBGaXJlIHRoZSBwcmVwYXJlZCBzaWduYWwgYW5kIGdvIHRvIFJFQURZIHN0YXRlICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocmVhZGVyLAotICAgICAgICAiU3RyZWFtIG1lYXN1cmluZyBjb21wbGV0ZS4gRmlsZSAlcyBpcyBub3cgcmVhZHkuIEZpcmluZyBwcmVwYXJlZCBzaWduYWwiLAotICAgICAgICByZWFkZXItPnBhdGgpOwotICAgIHJlYWRlci0+cHJlcF9zdGF0ZSA9IFBBUlRfU1RBVEVfUkVBRFk7Ci0gICAgZ19zaWduYWxfZW1pdCAocmVhZGVyLCBwYXJ0X3JlYWRlcl9zaWduYWxzW1NJR05BTF9QUkVQQVJFRF0sIDAsIE5VTEwpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWZpbmRfZGVtdXhlciAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdMaXN0ICpmYWN0b3JpZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2dldF9lbGVtZW50cyAoR1NUX0VMRU1FTlRfRkFDVE9SWV9UWVBFX0RFTVVYRVIsCi0gICAgICBHU1RfUkFOS19NQVJHSU5BTCk7Ci0gIEdMaXN0ICpjb21wYXRfZWxlbWVudHM7Ci0gIEdzdEVsZW1lbnQgKmUgPSBOVUxMOwotCi0gIGlmIChmYWN0b3JpZXMgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBjb21wYXRfZWxlbWVudHMgPQotICAgICAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9saXN0X2ZpbHRlciAoZmFjdG9yaWVzLCBjYXBzLCBHU1RfUEFEX1NJTkssIFRSVUUpOwotCi0gIGlmIChjb21wYXRfZWxlbWVudHMpIHsKLSAgICAvKiBKdXN0IHRha2UgdGhlIGZpcnN0IChoaWdoZXN0IHJhbmtlZCkgb3B0aW9uICovCi0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkgPQotICAgICAgICBHU1RfRUxFTUVOVF9GQUNUT1JZX0NBU1QgKGNvbXBhdF9lbGVtZW50cy0+ZGF0YSk7Ci0gICAgZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBOVUxMKTsKLSAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChjb21wYXRfZWxlbWVudHMpOwotICB9Ci0KLSAgaWYgKGZhY3RvcmllcykKLSAgICBnc3RfcGx1Z2luX2ZlYXR1cmVfbGlzdF9mcmVlIChmYWN0b3JpZXMpOwotCi0gIHJldHVybiBlOwotfQotCi1zdGF0aWMgdm9pZAotdHlwZV9mb3VuZCAoR3N0RWxlbWVudCAqIHR5cGVmaW5kLCBndWludCBwcm9iYWJpbGl0eSwKLSAgICBHc3RDYXBzICogY2FwcywgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKQotewotICBHc3RFbGVtZW50ICpkZW11eDsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHJlYWRlciwgIkdvdCB0eXBlICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICAvKiB0eXBlZmluZCBmb3VuZCBhIHR5cGUuIExvb2sgZm9yIHRoZSBkZW11eGVyIHRvIGhhbmRsZSBpdCAqLwotICBkZW11eCA9IHJlYWRlci0+ZGVtdXggPSBmaW5kX2RlbXV4ZXIgKGNhcHMpOwotICBpZiAocmVhZGVyLT5kZW11eCA9PSBOVUxMKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocmVhZGVyLCAiRmFpbGVkIHRvIGNyZWF0ZSBkZW11eGVyIGVsZW1lbnQiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDb25uZWN0IHRvIGRlbXV4IHNpZ25hbHMgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAoZGVtdXgsCi0gICAgICAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAobmV3X2RlY29kZWRfcGFkX2FkZGVkX2NiKSwgcmVhZGVyKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoZGVtdXgsICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLIChub19tb3JlX3BhZHMpLCByZWFkZXIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKGRlbXV4LCBUUlVFKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAocmVhZGVyKSwgZGVtdXgpOwotICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHJlYWRlci0+dHlwZWZpbmQsICJzcmMiLCBkZW11eCwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocmVhZGVyLT5kZW11eCwgR1NUX1NUQVRFX1RBUkdFVCAocmVhZGVyKSk7Ci0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKGRlbXV4LCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19pZl9wYWRzX2NvbGxlY3RlZCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKQotewotICBpZiAocmVhZGVyLT5wcmVwX3N0YXRlID09IFBBUlRfU1RBVEVfUFJFUEFSSU5HX0NPTExFQ1RfU1RSRUFNUykgewotICAgIC8qIENoZWNrIHdlIGhhdmUgYWxsIHBhZHMgYW5kIGVhY2ggcGFkIGhhcyBzZWVuIGEgYnVmZmVyICovCi0gICAgaWYgKHJlYWRlci0+bm9fbW9yZV9wYWRzICYmIHNwbGl0bXV4X3BhcnRfaXNfcHJlcm9sbGVkX2xvY2tlZCAocmVhZGVyKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocmVhZGVyLAotICAgICAgICAgICJubyBtb3JlIHBhZHMgLSBmaWxlICVzLiBNZWFzdXJpbmcgc3RyZWFtIGxlbmd0aCIsIHJlYWRlci0+cGF0aCk7Ci0gICAgICByZWFkZXItPnByZXBfc3RhdGUgPSBQQVJUX1NUQVRFX1BSRVBBUklOR19NRUFTVVJFX1NUUkVBTVM7Ci0gICAgICBTUExJVE1VWF9QQVJUX0JST0FEQ0FTVCAocmVhZGVyKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLW5vX21vcmVfcGFkcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlcikKLXsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR0xpc3QgKmN1cjsKLSAgLyogUXVlcnkgdGhlIG1pbmltdW0gZHVyYXRpb24gb2YgYW55IHBhZCBpbiB0aGlzIHBpZWNlIGFuZCBzdG9yZSBpdC4KLSAgICogRklYTUU6IE9ubHkgY29uc2lkZXIgYXVkaW8gYW5kIHZpZGVvICovCi0gIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHJlYWRlci0+cGFkcyk7IGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIEdzdFBhZCAqdGFyZ2V0ID0gR1NUX1BBRF9DQVNUIChjdXItPmRhdGEpOwotICAgIGlmICh0YXJnZXQpIHsKLSAgICAgIGdpbnQ2NCBjdXJfZHVyYXRpb247Ci0gICAgICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uICh0YXJnZXQsIEdTVF9GT1JNQVRfVElNRSwgJmN1cl9kdXJhdGlvbikpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChyZWFkZXIsCi0gICAgICAgICAgICAiZmlsZSAlcyBwYWQgJSIgR1NUX1BUUl9GT1JNQVQgIiBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICByZWFkZXItPnBhdGgsIHRhcmdldCwgR1NUX1RJTUVfQVJHUyAoY3VyX2R1cmF0aW9uKSk7Ci0gICAgICAgIGlmIChjdXJfZHVyYXRpb24gPCBkdXJhdGlvbikKLSAgICAgICAgICBkdXJhdGlvbiA9IGN1cl9kdXJhdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgR1NUX0lORk9fT0JKRUNUIChyZWFkZXIsICJmaWxlICVzIGR1cmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIHJlYWRlci0+cGF0aCwgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKLSAgcmVhZGVyLT5kdXJhdGlvbiA9IChHc3RDbG9ja1RpbWUpIGR1cmF0aW9uOwotCi0gIHJlYWRlci0+bm9fbW9yZV9wYWRzID0gVFJVRTsKLQotICBjaGVja19pZl9wYWRzX2NvbGxlY3RlZCAocmVhZGVyKTsKLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci19Ci0KLWdib29sZWFuCi1nc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc3JjX3F1ZXJ5IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiBwYXJ0LAotICAgIEdzdFBhZCAqIHNyY19wYWQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFBhZCAqdGFyZ2V0ID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHTGlzdCAqY3VyOwotCi0gIFNQTElUTVVYX1BBUlRfTE9DSyAocGFydCk7Ci0gIC8qIEZpbmQgdGhlIHBhZCBjb3JyZXNwb25kaW5nIHRvIHRoZSB2aXNpYmxlIG91dHB1dCB0YXJnZXQgcGFkICovCi0gIGZvciAoY3VyID0gZ19saXN0X2ZpcnN0IChwYXJ0LT5wYWRzKTsgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0U3BsaXRNdXhQYXJ0UGFkICpwYXJ0X3BhZCA9IFNQTElUTVVYX1BBUlRfUEFEX0NBU1QgKGN1ci0+ZGF0YSk7Ci0gICAgaWYgKHBhcnRfcGFkLT50YXJnZXQgPT0gc3JjX3BhZCkgewotICAgICAgdGFyZ2V0ID0gZ3N0X29iamVjdF9yZWYgKEdTVF9PQkpFQ1RfQ0FTVCAocGFydF9wYWQpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocGFydCk7Ci0KLSAgaWYgKHRhcmdldCA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXQgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHRhcmdldCwgcXVlcnkpOwotCi0gIGlmIChyZXQgPT0gRkFMU0UpCi0gICAgZ290byBvdXQ7Ci0KLSAgLyogUG9zdC1tYXNzYWdpbmcgb2YgcXVlcmllcyAqLwotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjp7Ci0gICAgICBHc3RGb3JtYXQgZm10OwotICAgICAgZ2ludDY0IHBvc2l0aW9uOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm10LCAmcG9zaXRpb24pOwotICAgICAgaWYgKGZtdCAhPSBHU1RfRk9STUFUX1RJTUUpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIFNQTElUTVVYX1BBUlRfTE9DSyAocGFydCk7Ci0gICAgICBwb3NpdGlvbiArPSBwYXJ0LT5zdGFydF9vZmZzZXQ7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFydCwgIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChwb3NpdGlvbikpOwotICAgICAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHBhcnQpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm10LCBwb3NpdGlvbik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLW91dDoKLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0KTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyID0gKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqKSBlbGVtZW50OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOnsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOnsKLSAgICAgIC8qIEhvbGQgdGhlIHNwbGl0bXV4IHR5cGUgbG9jayB1bnRpbCBhZnRlciB0aGUKLSAgICAgICAqIHBhcmVudCBzdGF0ZSBjaGFuZ2UgZnVuY3Rpb24gaGFzIGZpbmlzaGVkCi0gICAgICAgKiBjaGFuZ2luZyB0aGUgc3RhdGVzIG9mIHRoaW5ncywgYW5kIHR5cGUgZmluZGluZyBjYW4gY29udGludWUgKi8KLSAgICAgIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgICAgIGdfb2JqZWN0X3NldCAocmVhZGVyLT5zcmMsICJsb2NhdGlvbiIsIHJlYWRlci0+cGF0aCwgTlVMTCk7Ci0gICAgICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgICAgIFNQTElUTVVYX1BBUlRfVFlQRV9MT0NLIChyZWFkZXIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBTUExJVE1VWF9QQVJUX0xPQ0sgKHJlYWRlcik7Ci0gICAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2ZsdXNoaW5nX2xvY2tlZCAocmVhZGVyLCBUUlVFKTsKLSAgICAgIHJlYWRlci0+cnVubmluZyA9IEZBTFNFOwotICAgICAgU1BMSVRNVVhfUEFSVF9CUk9BRENBU1QgKHJlYWRlcik7Ci0gICAgICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgICAgIHJlYWRlci0+YWN0aXZlID0gRkFMU0U7Ci0gICAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2ZsdXNoaW5nX2xvY2tlZCAocmVhZGVyLCBUUlVFKTsKLSAgICAgIFNQTElUTVVYX1BBUlRfQlJPQURDQVNUIChyZWFkZXIpOwotICAgICAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBpZiAodHJhbnNpdGlvbiA9PSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRCkgewotICAgICAgLyogTWFrZSBzdXJlIHRvIHJlbGVhc2UgdGhlIGxvY2sgd2UgdG9vayBhYm92ZSAqLwotICAgICAgU1BMSVRNVVhfUEFSVF9UWVBFX1VOTE9DSyAocmVhZGVyKTsKLSAgICB9Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICAvKiBTbGVlcCBhbmQgd2FpdCB1bnRpbCBhbGwgc3RyZWFtcyBoYXZlIGJlZW4gY29sbGVjdGVkLCB0aGVuIGRvIHRoZSBzZWVrcwotICAgICAgICogdG8gbWVhc3VyZSB0aGUgc3RyZWFtIGxlbmd0aHMuIFRoaXMgdG9vayB0aGUgdHlwZSBsb2NrIGFib3ZlLAotICAgICAgICogYnV0IGl0J3MgT0sgdG8gcmVsZWFzZSBpdCBub3cgYW5kIGxldCB0eXBlZmluZGluZyBoYXBwZW4uLi4gKi8KLSAgICAgIFNQTElUTVVYX1BBUlRfVFlQRV9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgICAgIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgICAgIHJlYWRlci0+cHJlcF9zdGF0ZSA9IFBBUlRfU1RBVEVfUFJFUEFSSU5HX0NPTExFQ1RfU1RSRUFNUzsKLSAgICAgIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZXRfZmx1c2hpbmdfbG9ja2VkIChyZWFkZXIsIEZBTFNFKTsKLSAgICAgIHJlYWRlci0+cnVubmluZyA9IFRSVUU7Ci0KLSAgICAgIHdoaWxlIChyZWFkZXItPnByZXBfc3RhdGUgPT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfQ09MTEVDVF9TVFJFQU1TKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChyZWFkZXIsICJXYWl0aW5nIHRvIGNvbGxlY3QgYWxsIG91dHB1dCBzdHJlYW1zIik7Ci0gICAgICAgIFNQTElUTVVYX1BBUlRfV0FJVCAocmVhZGVyKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJlYWRlci0+cHJlcF9zdGF0ZSA9PSBQQVJUX1NUQVRFX1BSRVBBUklOR19NRUFTVVJFX1NUUkVBTVMgfHwKLSAgICAgICAgICByZWFkZXItPnByZXBfc3RhdGUgPT0gUEFSVF9TVEFURV9QUkVQQVJJTkdfUkVTRVRfRk9SX1JFQURZKSB7Ci0gICAgICAgIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9tZWFzdXJlX3N0cmVhbXMgKHJlYWRlcik7Ci0gICAgICB9IGVsc2UgaWYgKHJlYWRlci0+cHJlcF9zdGF0ZSA9PSBQQVJUX1NUQVRFX0ZBSUxFRCkKLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBTUExJVE1VWF9QQVJUX0xPQ0sgKHJlYWRlcik7Ci0gICAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2ZsdXNoaW5nX2xvY2tlZCAocmVhZGVyLCBGQUxTRSk7Ci0gICAgICByZWFkZXItPmFjdGl2ZSA9IFRSVUU7Ci0gICAgICBTUExJVE1VWF9QQVJUX0JST0FEQ0FTVCAocmVhZGVyKTsKLSAgICAgIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICByZWFkZXItPnByZXBfc3RhdGUgPSBQQVJUX1NUQVRFX05VTEw7Ci0gICAgICBzcGxpdG11eF9wYXJ0X3JlYWRlcl9yZXNldCAocmVhZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi1iZWFjaDoKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jaGVja19idXNfbWVzc2FnZXMgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHBhcnQpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChHU1RfRUxFTUVOVF9DQVNUIChwYXJ0KSk7Ci0gIHdoaWxlICgobSA9IGdzdF9idXNfcG9wIChidXMpKSAhPSBOVUxMKSB7Ci0gICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG0pID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFydCwgIkdvdCBlcnJvciBtZXNzYWdlIHdoaWxlIHByZXBhcmluZy4gRmFpbGluZy4iKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG0pOwotICB9Ci0gIHJldCA9IFRSVUU7Ci1kb25lOgotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3ByZXBhcmUgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHBhcnQpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKHBhcnQpLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICBpZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIGNoZWNrX2J1c19tZXNzYWdlcyAocGFydCk7Ci19Ci0KLXZvaWQKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl91bnByZXBhcmUgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHBhcnQpCi17Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlRfQ0FTVCAocGFydCksIEdTVF9TVEFURV9OVUxMKTsKLX0KLQotdm9pZAotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NldF9sb2NhdGlvbiAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyLAotICAgIGNvbnN0IGdjaGFyICogcGF0aCkKLXsKLSAgcmVhZGVyLT5wYXRoID0gZ19zdHJkdXAgKHBhdGgpOwotfQotCi1nYm9vbGVhbgotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2FjdGl2YXRlIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIsCi0gICAgR3N0U2VnbWVudCAqIHNlZykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAocmVhZGVyLCAiQWN0aXZhdGluZyBwYXJ0IHJlYWRlciIpOwotCi0gIGlmICghZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NlZWtfdG9fc2VnbWVudCAocmVhZGVyLCBzZWcpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocmVhZGVyLCAiRmFpbGVkIHRvIHNlZWsgcGFydCB0byAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgIHNlZyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKHJlYWRlciksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJlYWRlciwgIkZhaWxlZCB0byBzZXQgc3RhdGUgdG8gUExBWUlORyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9pc19hY3RpdmUgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHBhcnQpCi17Ci0gIGdib29sZWFuIHJldDsKLQotICBTUExJVE1VWF9QQVJUX0xPQ0sgKHBhcnQpOwotICByZXQgPSBwYXJ0LT5hY3RpdmU7Ci0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChwYXJ0KTsKLQotICByZXR1cm4gcmV0OwotfQotCi12b2lkCi1nc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZGVhY3RpdmF0ZSAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKQotewotICBHU1RfREVCVUdfT0JKRUNUIChyZWFkZXIsICJEZWFjdGl2YXRpbmcgcmVhZGVyIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlRfQ0FTVCAocmVhZGVyKSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci19Ci0KLXZvaWQKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZXRfZmx1c2hpbmdfbG9ja2VkIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIsCi0gICAgZ2Jvb2xlYW4gZmx1c2hpbmcpCi17Ci0gIEdMaXN0ICpjdXI7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJlYWRlciwgIiVzIGRhdGFxdWV1ZXMiLAotICAgICAgZmx1c2hpbmcgPyAiRmx1c2hpbmciIDogIkRvbmUgZmx1c2hpbmciKTsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHJlYWRlci0+cGFkcyk7IGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIEdzdFNwbGl0TXV4UGFydFBhZCAqcGFydF9wYWQgPSBTUExJVE1VWF9QQVJUX1BBRF9DQVNUIChjdXItPmRhdGEpOwotICAgIGdzdF9kYXRhX3F1ZXVlX3NldF9mbHVzaGluZyAocGFydF9wYWQtPnF1ZXVlLCBmbHVzaGluZyk7Ci0gICAgaWYgKGZsdXNoaW5nKQotICAgICAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHBhcnRfcGFkLT5xdWV1ZSk7Ci0gIH0KLX07Ci0KLXZvaWQKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZXRfY2FsbGJhY2tzIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIsCi0gICAgZ3BvaW50ZXIgY2JfZGF0YSwgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyUGFkQ2IgZ2V0X3BhZF9jYikKLXsKLSAgcmVhZGVyLT5jYl9kYXRhID0gY2JfZGF0YTsKLSAgcmVhZGVyLT5nZXRfcGFkX2NiID0gZ2V0X3BhZF9jYjsKLX0KLQotR3N0Q2xvY2tUaW1lCi1nc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZ2V0X2VuZF9vZmZzZXQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlcikKLXsKLSAgR0xpc3QgKmN1cjsKLSAgR3N0Q2xvY2tUaW1lIHJldCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAocmVhZGVyLT5wYWRzKTsgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0U3BsaXRNdXhQYXJ0UGFkICpwYXJ0X3BhZCA9IFNQTElUTVVYX1BBUlRfUEFEX0NBU1QgKGN1ci0+ZGF0YSk7Ci0gICAgaWYgKHBhcnRfcGFkLT5tYXhfdHMgPCByZXQpCi0gICAgICByZXQgPSBwYXJ0X3BhZC0+bWF4X3RzOwotICB9Ci0KLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZAotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NldF9zdGFydF9vZmZzZXQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RDbG9ja1RpbWUgb2Zmc2V0KQotewotICBTUExJVE1VWF9QQVJUX0xPQ0sgKHJlYWRlcik7Ci0gIHJlYWRlci0+c3RhcnRfb2Zmc2V0ID0gb2Zmc2V0OwotICBHU1RfSU5GT19PQkpFQ1QgKHJlYWRlciwgIlRTIG9mZnNldCBub3cgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAob2Zmc2V0KSk7Ci0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotfQotCi1Hc3RDbG9ja1RpbWUKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9nZXRfc3RhcnRfb2Zmc2V0IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIpCi17Ci0gIEdzdENsb2NrVGltZSByZXQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgcmV0ID0gcmVhZGVyLT5zdGFydF9vZmZzZXQ7Ci0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdzdENsb2NrVGltZQotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2dldF9kdXJhdGlvbiAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKQotewotICBHc3RDbG9ja1RpbWUgZHVyOwotCi0gIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgZHVyID0gcmVhZGVyLT5kdXJhdGlvbjsKLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgcmV0dXJuIGR1cjsKLX0KLQotR3N0UGFkICoKLWdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9sb29rdXBfcGFkIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiByZWFkZXIsCi0gICAgR3N0UGFkICogdGFyZ2V0KQotewotICBHc3RQYWQgKnJlc3VsdCA9IE5VTEw7Ci0gIEdMaXN0ICpjdXI7Ci0KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAocmVhZGVyLT5wYWRzKTsgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0U3BsaXRNdXhQYXJ0UGFkICpwYXJ0X3BhZCA9IFNQTElUTVVYX1BBUlRfUEFEX0NBU1QgKGN1ci0+ZGF0YSk7Ci0gICAgaWYgKHBhcnRfcGFkLT50YXJnZXQgPT0gdGFyZ2V0KSB7Ci0gICAgICByZXN1bHQgPSAoR3N0UGFkICopIGdzdF9vYmplY3RfcmVmIChwYXJ0X3BhZCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgU1BMSVRNVVhfUEFSVF9VTkxPQ0sgKHJlYWRlcik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotR3N0Rmxvd1JldHVybgotZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3BvcCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0RGF0YVF1ZXVlSXRlbSAqKiBpdGVtKQotewotICBHc3RTcGxpdE11eFBhcnRQYWQgKnBhcnRfcGFkID0gKEdzdFNwbGl0TXV4UGFydFBhZCAqKSAocGFkKTsKLSAgR3N0RGF0YVF1ZXVlICpxOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICAvKiBHZXQgb25lIGl0ZW0gZnJvbSB0aGUgYXBwcm9wcmlhdGUgZGF0YXF1ZXVlICovCi0gIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgaWYgKHJlYWRlci0+cHJlcF9zdGF0ZSA9PSBQQVJUX1NUQVRFX0ZBSUxFRCkgewotICAgIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIHEgPSBnc3Rfb2JqZWN0X3JlZiAocGFydF9wYWQtPnF1ZXVlKTsKLQotICAvKiBIYXZlIHRvIGRyb3AgdGhlIGxvY2sgYXJvdW5kIHBvcCwgc28gd2UgY2FuIGJlIHdva2VuIHVwIGZvciBmbHVzaCAqLwotICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgaWYgKCFnc3RfZGF0YV9xdWV1ZV9wb3AgKHEsIGl0ZW0pIHx8ICgqaXRlbSA9PSBOVUxMKSkgewotICAgIHJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIGdvdG8gb3V0OwotICB9Ci0KLSAgU1BMSVRNVVhfUEFSVF9MT0NLIChyZWFkZXIpOwotCi0gIFNQTElUTVVYX1BBUlRfQlJPQURDQVNUIChyZWFkZXIpOwotICBpZiAoR1NUX0lTX0VWRU5UICgoKml0ZW0pLT5vYmplY3QpKSB7Ci0gICAgR3N0RXZlbnQgKmUgPSAoR3N0RXZlbnQgKikgKCgqaXRlbSktPm9iamVjdCk7Ci0gICAgLyogTWFyayB0aGlzIHBhZCBhcyBFT1MgKi8KLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGUpID09IEdTVF9FVkVOVF9FT1MpCi0gICAgICBwYXJ0X3BhZC0+aXNfZW9zID0gVFJVRTsKLSAgfQotCi0gIFNQTElUTVVYX1BBUlRfVU5MT0NLIChyZWFkZXIpOwotCi0gIHJldCA9IEdTVF9GTE9XX09LOwotb3V0OgotICBnc3Rfb2JqZWN0X3VucmVmIChxKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWJ1c19oYW5kbGVyIChHc3RCaW4gKiBiaW4sIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlciA9IChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKikgYmluOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgotICAgICAgLyogTWFrZSBzdXJlIHRvIHNldCB0aGUgc3RhdGUgdG8gZmFpbGVkIGFuZCB3YWtlIHVwIHRoZSBsaXN0ZW5lcgotICAgICAgICogb24gZXJyb3IgKi8KLSAgICAgIFNQTElUTVVYX1BBUlRfTE9DSyAocmVhZGVyKTsKLSAgICAgIHJlYWRlci0+cHJlcF9zdGF0ZSA9IFBBUlRfU1RBVEVfRkFJTEVEOwotICAgICAgU1BMSVRNVVhfUEFSVF9CUk9BRENBU1QgKHJlYWRlcik7Ci0gICAgICBTUExJVE1VWF9QQVJUX1VOTE9DSyAocmVhZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9CSU5fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHBhcnRyZWFkZXIuaCBiL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZDkyMGYuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHBhcnRyZWFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKiBHU3RyZWFtZXIgU3BsaXQgTXV4ZWQgRmlsZSBTb3VyY2UgLSBQYXJ0IHJlYWRlcgotICogQ29weXJpZ2h0IChDKSAyMDE0IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9fR1NUX1NQTElUTVVYX1BBUlRfUkVBREVSX0hfXwotI2RlZmluZSBfX0dTVF9TUExJVE1VWF9QQVJUX1JFQURFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RkYXRhcXVldWUuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NQTElUTVVYX1BBUlRfUkVBREVSIFwKLSAgKGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1BMSVRNVVhfUEFSVF9SRUFERVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TUExJVE1VWF9QQVJUX1JFQURFUixHc3RTcGxpdE11eFNyYykpCi0jZGVmaW5lIEdTVF9TUExJVE1VWF9QQVJUX1JFQURFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TUExJVE1VWF9QQVJUX1JFQURFUixHc3RTcGxpdE11eFNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NQTElUTVVYX1BBUlRfUkVBREVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU1BMSVRNVVhfUEFSVF9SRUFERVIpKQotI2RlZmluZSBHU1RfSVNfU1BMSVRNVVhfUEFSVF9SRUFERVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU1BMSVRNVVhfUEFSVF9SRUFERVIpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3BsaXRNdXhQYXJ0UmVhZGVyIEdzdFNwbGl0TXV4UGFydFJlYWRlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGxpdE11eFBhcnRSZWFkZXJDbGFzcyBHc3RTcGxpdE11eFBhcnRSZWFkZXJDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9TcGxpdE11eFNyY1BhZCBTcGxpdE11eFNyY1BhZDsKLXR5cGVkZWYgc3RydWN0IF9TcGxpdE11eFNyY1BhZENsYXNzIFNwbGl0TXV4U3JjUGFkQ2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBQQVJUX1NUQVRFX05VTEwsCi0gIFBBUlRfU1RBVEVfUFJFUEFSSU5HX0NPTExFQ1RfU1RSRUFNUywKLSAgUEFSVF9TVEFURV9QUkVQQVJJTkdfTUVBU1VSRV9TVFJFQU1TLAotICBQQVJUX1NUQVRFX1BSRVBBUklOR19SRVNFVF9GT1JfUkVBRFksCi0gIFBBUlRfU1RBVEVfUkVBRFksCi0gIFBBUlRfU1RBVEVfRkFJTEVELAotfSBHc3RTcGxpdE11eFBhcnRTdGF0ZTsKLQotdHlwZWRlZiBHc3RQYWQgKigqR3N0U3BsaXRNdXhQYXJ0UmVhZGVyUGFkQ2IpKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyLCBHc3RQYWQgKnNyY19wYWQsIGdwb2ludGVyIGNiX2RhdGEpOwotCi1zdHJ1Y3QgX0dzdFNwbGl0TXV4UGFydFJlYWRlcgotewotICBHc3RQaXBlbGluZSBwYXJlbnQ7Ci0KLSAgR3N0U3BsaXRNdXhQYXJ0U3RhdGUgcHJlcF9zdGF0ZTsKLQotICBnY2hhciAqcGF0aDsKLQotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdEVsZW1lbnQgKnR5cGVmaW5kOwotICBHc3RFbGVtZW50ICpkZW11eDsKLQotICBnYm9vbGVhbiBhY3RpdmU7Ci0gIGdib29sZWFuIHJ1bm5pbmc7Ci0gIGdib29sZWFuIHByZXBhcmVkOwotICBnYm9vbGVhbiBmbHVzaGluZzsKLSAgZ2Jvb2xlYW4gbm9fbW9yZV9wYWRzOwotCi0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0X29mZnNldDsKLQotICBHTGlzdCAqcGFkczsKLQotICBHQ29uZCBpbmFjdGl2ZV9jb25kOwotICBHTXV0ZXggbG9jazsKLSAgR011dGV4IHR5cGVfbG9jazsKLQotICBHc3RTcGxpdE11eFBhcnRSZWFkZXJQYWRDYiBnZXRfcGFkX2NiOwotICBncG9pbnRlciBjYl9kYXRhOwotfTsKLQotc3RydWN0IF9Hc3RTcGxpdE11eFBhcnRSZWFkZXJDbGFzcwotewotICBHc3RQaXBlbGluZUNsYXNzIHBhcmVudF9jbGFzczsKLQotICB2b2lkICgqcHJlcGFyZWQpICAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXIpOwotICB2b2lkICgqZW5kX29mX3BhcnQpIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlcik7Ci19OwotCi1HVHlwZSBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZ2V0X3R5cGUgKHZvaWQpOwotCi12b2lkIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zZXRfY2FsbGJhY2tzIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlciwKLSAgICBncG9pbnRlciBjYl9kYXRhLCBHc3RTcGxpdE11eFBhcnRSZWFkZXJQYWRDYiBnZXRfcGFkX2NiKTsKLWdib29sZWFuIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9wcmVwYXJlIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnBhcnQpOwotdm9pZCBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfdW5wcmVwYXJlIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnBhcnQpOwotdm9pZCBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2xvY2F0aW9uIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlciwKLSAgICBjb25zdCBnY2hhciAqcGF0aCk7Ci1nYm9vbGVhbiBnc3Rfc3BsaXRtdXhfcGFydF9pc19lb3MgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyKTsKLQotZ2Jvb2xlYW4gZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2FjdGl2YXRlIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnBhcnQsIEdzdFNlZ21lbnQgKnNlZyk7Ci12b2lkIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9kZWFjdGl2YXRlIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnBhcnQpOwotZ2Jvb2xlYW4gZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2lzX2FjdGl2ZSAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpwYXJ0KTsKLQotZ2Jvb2xlYW4gZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3NyY19xdWVyeSAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpwYXJ0LCBHc3RQYWQgKnNyY19wYWQsIEdzdFF1ZXJ5ICogcXVlcnkpOwotdm9pZCBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X3N0YXJ0X29mZnNldCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpwYXJ0LCBHc3RDbG9ja1RpbWUgb2Zmc2V0KTsKLUdzdENsb2NrVGltZSBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZ2V0X3N0YXJ0X29mZnNldCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpwYXJ0KTsKLUdzdENsb2NrVGltZSBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZ2V0X2VuZF9vZmZzZXQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcGFydCk7Ci1Hc3RDbG9ja1RpbWUgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2dldF9kdXJhdGlvbiAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyKTsKLQotR3N0UGFkICpnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfbG9va3VwX3BhZCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXIsIEdzdFBhZCAqdGFyZ2V0KTsKLUdzdEZsb3dSZXR1cm4gZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3BvcCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXIsIEdzdFBhZCAqcGFydF9wYWQsIEdzdERhdGFRdWV1ZUl0ZW0gKiogaXRlbSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYyBiL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzY4MWUuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MjkgKzAsMCBAQAotLyogR1N0cmVhbWVyIE11eGVyIGJpbiB0aGF0IHNwbGl0cyBvdXRwdXQgc3RyZWFtIGJ5IHNpemUvdGltZQotICogQ29weXJpZ2h0IChDKSA8MjAxND4gSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtc3BsaXRtdXhzaW5rCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IE11eGVyIHdyYXBwZXIgZm9yIHNwbGl0dGluZyBvdXRwdXQgc3RyZWFtIGJ5IHNpemUgb3IgdGltZQotICoKLSAqIFRoaXMgZWxlbWVudCB3cmFwcyBhIG11eGVyIGFuZCBhIHNpbmssIGFuZCBzdGFydHMgYSBuZXcgZmlsZSB3aGVuIHRoZSBtdXgKLSAqIGNvbnRlbnRzIGFyZSBhYm91dCB0byBjcm9zcyBhIHRocmVzaG9sZCBvZiBtYXhpbXVtIHNpemUgb2YgbWF4aW11bSB0aW1lLAotICogc3BsaXR0aW5nIGF0IHZpZGVvIGtleWZyYW1lIGJvdW5kYXJpZXMuIEV4YWN0bHkgb25lIGlucHV0IHZpZGVvIHN0cmVhbQotICogY2FuIGJlIG11eGVkLCB3aXRoIGFzIG1hbnkgYWNjb21wYW55aW5nIGF1ZGlvIGFuZCBzdWJ0aXRsZSBzdHJlYW1zIGFzCi0gKiBkZXNpcmVkLgotICoKLSAqIEJ5IGRlZmF1bHQsIGl0IHVzZXMgbXA0bXV4IGFuZCBmaWxlc2luaywgYnV0IHRoZXkgY2FuIGJlIGNoYW5nZWQgdmlhCi0gKiB0aGUgJ211eGVyJyBhbmQgJ3NpbmsnIHByb3BlcnRpZXMuCi0gKgotICogVGhlIG1pbmltdW0gZmlsZSBzaXplIGlzIDEgR09QLCBob3dldmVyIC0gc28gbGltaXRzIG1heSBiZSBvdmVycnVuIGlmIHRoZQotICogZGlzdGFuY2UgYmV0d2VlbiBhbnkgMiBrZXlmcmFtZXMgaXMgbGFyZ2VyIHRoYW4gdGhlIGxpbWl0cy4KLSAqCi0gKiBJZiBhIHZpZGVvIHN0cmVhbSBpcyBhdmFpbGFibGUsIHRoZSBzcGxpdHRpbmcgcHJvY2VzcyBpcyBkcml2ZW4gYnkgdGhlIHZpZGVvCi0gKiBzdHJlYW0gY29udGVudHMsIGFuZCB0aGUgdmlkZW8gc3RyZWFtIG11c3QgY29udGFpbiBjbG9zZWQgR09QcyBmb3IgdGhlIG91dHB1dAotICogZmlsZSBwYXJ0cyB0byBiZSBwbGF5ZWQgaW5kaXZpZHVhbGx5IGNvcnJlY3RseS4gSW4gdGhlIGFic2VuY2Ugb2YgYSB2aWRlbwotICogc3RyZWFtLCB0aGUgZmlyc3QgYXZhaWxhYmxlIHN0cmVhbSBpcyB1c2VkIGFzIHJlZmVyZW5jZSBmb3Igc3luY2hyb25pemF0aW9uLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLWUgdjRsMnNyYyBudW0tYnVmZmVycz01MDAgISB2aWRlby94LXJhdyx3aWR0aD0zMjAsaGVpZ2h0PTI0MCAhIHZpZGVvY29udmVydCAhIHF1ZXVlICEgdGltZW92ZXJsYXkgISB4MjY0ZW5jIGtleS1pbnQtbWF4PTEwICEgaDI2NHBhcnNlICEgc3BsaXRtdXhzaW5rIGxvY2F0aW9uPXZpZGVvJTAyZC5tb3YgbWF4LXNpemUtdGltZT0xMDAwMDAwMDAwMCBtYXgtc2l6ZS1ieXRlcz0xMDAwMDAwCi0gKiBdfAotICogUmVjb3JkcyBhIHZpZGVvIHN0cmVhbSBjYXB0dXJlZCBmcm9tIGEgdjRsMiBkZXZpY2UgYW5kIG11eGVzIGl0IGludG8KLSAqIElTTyBtcDQgZmlsZXMsIHNwbGl0dGluZyBhcyBuZWVkZWQgdG8gbGltaXQgc2l6ZS9kdXJhdGlvbiB0byAxMCBzZWNvbmRzCi0gKiBhbmQgMU1CIG1heGltdW0gc2l6ZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlICJnc3RzcGxpdG11eHNpbmsuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoc3BsaXRtdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc3BsaXRtdXhfZGVidWcKLQotI2RlZmluZSBHU1RfU1BMSVRNVVhfTE9DSyhzKSBnX211dGV4X2xvY2soJihzKS0+bG9jaykKLSNkZWZpbmUgR1NUX1NQTElUTVVYX1VOTE9DSyhzKSBnX211dGV4X3VubG9jaygmKHMpLT5sb2NrKQotI2RlZmluZSBHU1RfU1BMSVRNVVhfV0FJVChzKSBnX2NvbmRfd2FpdCAoJihzKS0+ZGF0YV9jb25kLCAmKHMpLT5sb2NrKQotI2RlZmluZSBHU1RfU1BMSVRNVVhfQlJPQURDQVNUKHMpIGdfY29uZF9icm9hZGNhc3QgKCYocyktPmRhdGFfY29uZCkKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTE9DQVRJT04sCi0gIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgUFJPUF9NQVhfU0laRV9CWVRFUywKLSAgUFJPUF9TRU5EX0tFWUZSQU1FX1JFUVVFU1RTLAotICBQUk9QX01BWF9GSUxFUywKLSAgUFJPUF9NVVhFUl9PVkVSSEVBRCwKLSAgUFJPUF9NVVhFUiwKLSAgUFJPUF9TSU5LCi19OwotCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfVElNRSAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfQllURVMgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX0ZJTEVTICAgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfTVVYRVJfT1ZFUkhFQUQgICAgICAwLjAyCi0jZGVmaW5lIERFRkFVTFRfU0VORF9LRVlGUkFNRV9SRVFVRVNUUyBGQUxTRQotI2RlZmluZSBERUZBVUxUX01VWEVSICJtcDRtdXgiCi0jZGVmaW5lIERFRkFVTFRfU0lOSyAiZmlsZXNpbmsiCi0KLWVudW0KLXsKLSAgU0lHTkFMX0ZPUk1BVF9MT0NBVElPTiwKLSAgU0lHTkFMX0xBU1QKLX07Ci0KLXN0YXRpYyBndWludCBzaWduYWxzW1NJR05BTF9MQVNUXTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJ2aWRlbyIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgiYXVkaW9fJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3VidGl0bGVfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInN1YnRpdGxlXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR1F1YXJrIFBBRF9DT05URVhUOwotCi1zdGF0aWMgdm9pZAotX2RvX2luaXQgKHZvaWQpCi17Ci0gIFBBRF9DT05URVhUID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJwYWQtY29udGV4dCIpOwotfQotCi0jZGVmaW5lIGdzdF9zcGxpdG11eF9zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfRVhURU5ERUQgKEdzdFNwbGl0TXV4U2luaywgZ3N0X3NwbGl0bXV4X3NpbmssIEdTVF9UWVBFX0JJTiwgMCwKLSAgICBfZG9faW5pdCAoKSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBjcmVhdGVfZWxlbWVudHMgKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4KTsKLXN0YXRpYyBnYm9vbGVhbiBjcmVhdGVfc2luayAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpOwotc3RhdGljIHZvaWQgZ3N0X3NwbGl0bXV4X3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NwbGl0bXV4X3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NwbGl0bXV4X3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BsaXRtdXhfc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RQYWQgKmdzdF9zcGxpdG11eF9zaW5rX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BsaXRtdXhfc2lua19yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3Rfc3BsaXRtdXhfc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZCBidXNfaGFuZGxlciAoR3N0QmluICogYmluLCBHc3RNZXNzYWdlICogbXNnKTsKLXN0YXRpYyB2b2lkIHNldF9uZXh0X2ZpbGVuYW1lIChHc3RTcGxpdE11eFNpbmsgKiBzcGxpdG11eCk7Ci1zdGF0aWMgdm9pZCBzdGFydF9uZXh0X2ZyYWdtZW50IChHc3RTcGxpdE11eFNpbmsgKiBzcGxpdG11eCk7Ci1zdGF0aWMgdm9pZCBjaGVja19xdWV1ZV9sZW5ndGggKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4LCBNcVN0cmVhbUN0eCAqIGN0eCk7Ci1zdGF0aWMgdm9pZCBtcV9zdHJlYW1fY3R4X3VucmVmIChNcVN0cmVhbUN0eCAqIGN0eCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9zcGxpdG11eF9zaW5rX2Vuc3VyZV9tYXhfZmlsZXMgKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4KTsKLQotc3RhdGljIE1xU3RyZWFtQnVmICoKLW1xX3N0cmVhbV9idWZfbmV3ICh2b2lkKQotewotICByZXR1cm4gZ19zbGljZV9uZXcwIChNcVN0cmVhbUJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tcV9zdHJlYW1fYnVmX2ZyZWUgKE1xU3RyZWFtQnVmICogZGF0YSkKLXsKLSAgZ19zbGljZV9mcmVlIChNcVN0cmVhbUJ1ZiwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfc2lua19jbGFzc19pbml0IChHc3RTcGxpdE11eFNpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCaW5DbGFzcyAqZ3N0YmluX2NsYXNzID0gKEdzdEJpbkNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zcGxpdG11eF9zaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NwbGl0bXV4X3NpbmtfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3NwbGl0bXV4X3NpbmtfZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfc3BsaXRtdXhfc2lua19maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlNwbGl0IE11eGluZyBCaW4iLCAiR2VuZXJpYy9CaW4vTXV4ZXIiLAotICAgICAgIkNvbnZlbmllbmNlIGJpbiB0aGF0IG11eGVzIGluY29taW5nIHN0cmVhbXMgaW50byBtdWx0aXBsZSB0aW1lL3NpemUgbGltaXRlZCBmaWxlcyIsCi0gICAgICAiSmFuIFNjaG1pZHQgPGphbkBjZW50cmljdWxhci5jb20+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmdmlkZW9fc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmF1ZGlvX3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZzdWJ0aXRsZV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGxpdG11eF9zaW5rX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwbGl0bXV4X3NpbmtfcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGxpdG11eF9zaW5rX3JlbGVhc2VfcGFkKTsKLQotICBnc3RiaW5fY2xhc3MtPmhhbmRsZV9tZXNzYWdlID0gYnVzX2hhbmRsZXI7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MT0NBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJsb2NhdGlvbiIsICJGaWxlIE91dHB1dCBQYXR0ZXJuIiwKLSAgICAgICAgICAiRm9ybWF0IHN0cmluZyBwYXR0ZXJuIGZvciB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGVzIHRvIHdyaXRlIChlLmcuIHZpZGVvJTA1ZC5tcDQpIiwKLSAgICAgICAgICBOVUxMLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NVVhFUl9PVkVSSEVBRCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJtdXgtb3ZlcmhlYWQiLCAiTXV4aW5nIE92ZXJoZWFkIiwKLSAgICAgICAgICAiRXh0cmEgc2l6ZSBvdmVyaGVhZCBvZiBtdXhpbmcgKDAuMDIgPSAyJSkiLCAwLjAsIDEuMCwKLSAgICAgICAgICBERUZBVUxUX01VWEVSX09WRVJIRUFELAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgibWF4LXNpemUtdGltZSIsICJNYXguIHNpemUgKG5zKSIsCi0gICAgICAgICAgIk1heC4gYW1vdW50IG9mIHRpbWUgcGVyIGZpbGUgKGluIG5zLCAwPWRpc2FibGUpIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9CWVRFUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJtYXgtc2l6ZS1ieXRlcyIsICJNYXguIHNpemUgYnl0ZXMiLAotICAgICAgICAgICJNYXguIGFtb3VudCBvZiBkYXRhIHBlciBmaWxlIChpbiBieXRlcywgMD1kaXNhYmxlKSIsIDAsIEdfTUFYVUlOVDY0LAotICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfQllURVMsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NFTkRfS0VZRlJBTUVfUkVRVUVTVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNlbmQta2V5ZnJhbWUtcmVxdWVzdHMiLAotICAgICAgICAgICJSZXF1ZXN0IGtleWZyYW1lcyBhdCBtYXgtc2l6ZS10aW1lIiwKLSAgICAgICAgICAiUmVxdWVzdCBhIGtleWZyYW1lIGV2ZXJ5IG1heC1zaXplLXRpbWUgbnMgdG8gdHJ5IHNwbGl0dGluZyBhdCB0aGF0IHBvaW50LiAiCi0gICAgICAgICAgIk5lZWRzIG1heC1zaXplLWJ5dGVzIHRvIGJlIDAgaW4gb3JkZXIgdG8gYmUgZWZmZWN0aXZlLiIsCi0gICAgICAgICAgREVGQVVMVF9TRU5EX0tFWUZSQU1FX1JFUVVFU1RTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9GSUxFUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LWZpbGVzIiwgIk1heCBmaWxlcyIsCi0gICAgICAgICAgIk1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRvIGtlZXAgb24gZGlzay4gT25jZSB0aGUgbWF4aW11bSBpcyByZWFjaGVkLCIKLSAgICAgICAgICAib2xkIGZpbGVzIHN0YXJ0IHRvIGJlIGRlbGV0ZWQgdG8gbWFrZSByb29tIGZvciBuZXcgb25lcy4iLCAwLAotICAgICAgICAgIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfRklMRVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01VWEVSLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoIm11eGVyIiwgIk11eGVyIiwKLSAgICAgICAgICAiVGhlIG11eGVyIGVsZW1lbnQgdG8gdXNlIChOVUxMID0gZGVmYXVsdCBtcDRtdXgpIiwKLSAgICAgICAgICBHU1RfVFlQRV9FTEVNRU5ULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSU5LLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInNpbmsiLCAiU2luayIsCi0gICAgICAgICAgIlRoZSBzaW5rIGVsZW1lbnQgKG9yIGVsZW1lbnQgY2hhaW4pIHRvIHVzZSAoTlVMTCA9IGRlZmF1bHQgZmlsZXNpbmspIiwKLSAgICAgICAgICBHU1RfVFlQRV9FTEVNRU5ULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0U3BsaXRNdXhTaW5rOjpmb3JtYXQtbG9jYXRpb246Ci0gICAqIEBzcGxpdG11eDogdGhlICNHc3RTcGxpdE11eFNpbmsKLSAgICogQGZyYWdtZW50X2lkOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQKLSAgICoKLSAgICogUmV0dXJuczogdGhlIGxvY2F0aW9uIHRvIGJlIHVzZWQgZm9yIHRoZSBuZXh0IG91dHB1dCBmaWxlCi0gICAqLwotICBzaWduYWxzW1NJR05BTF9GT1JNQVRfTE9DQVRJT05dID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImZvcm1hdC1sb2NhdGlvbiIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgR19UWVBFX1NUUklORywgMSwgR19UWVBFX1VJTlQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3NpbmtfaW5pdCAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIGdfbXV0ZXhfaW5pdCAoJnNwbGl0bXV4LT5sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZzcGxpdG11eC0+ZGF0YV9jb25kKTsKLQotICBzcGxpdG11eC0+bXV4X292ZXJoZWFkID0gREVGQVVMVF9NVVhFUl9PVkVSSEVBRDsKLSAgc3BsaXRtdXgtPnRocmVzaG9sZF90aW1lID0gREVGQVVMVF9NQVhfU0laRV9USU1FOwotICBzcGxpdG11eC0+dGhyZXNob2xkX2J5dGVzID0gREVGQVVMVF9NQVhfU0laRV9CWVRFUzsKLSAgc3BsaXRtdXgtPm1heF9maWxlcyA9IERFRkFVTFRfTUFYX0ZJTEVTOwotICBzcGxpdG11eC0+c2VuZF9rZXlmcmFtZV9yZXF1ZXN0cyA9IERFRkFVTFRfU0VORF9LRVlGUkFNRV9SRVFVRVNUUzsKLQotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChzcGxpdG11eCwgR1NUX0VMRU1FTlRfRkxBR19TSU5LKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9yZXNldCAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIGlmIChzcGxpdG11eC0+bXEpIHsKLSAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzcGxpdG11eC0+bXEsIFRSVUUpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3BsaXRtdXgtPm1xLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgZ3N0X2Jpbl9yZW1vdmUgKEdTVF9CSU4gKHNwbGl0bXV4KSwgc3BsaXRtdXgtPm1xKTsKLSAgfQotICBpZiAoc3BsaXRtdXgtPm11eGVyKSB7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc3BsaXRtdXgtPm11eGVyLCBUUlVFKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNwbGl0bXV4LT5tdXhlciwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOIChzcGxpdG11eCksIHNwbGl0bXV4LT5tdXhlcik7Ci0gIH0KLSAgaWYgKHNwbGl0bXV4LT5hY3RpdmVfc2luaykgewotICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNwbGl0bXV4LT5hY3RpdmVfc2luaywgVFJVRSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcGxpdG11eC0+YWN0aXZlX3NpbmssIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTiAoc3BsaXRtdXgpLCBzcGxpdG11eC0+YWN0aXZlX3NpbmspOwotICB9Ci0KLSAgc3BsaXRtdXgtPnNpbmsgPSBzcGxpdG11eC0+YWN0aXZlX3NpbmsgPSBzcGxpdG11eC0+bXV4ZXIgPSBzcGxpdG11eC0+bXEgPQotICAgICAgTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zaW5rX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNwbGl0TXV4U2luayAqc3BsaXRtdXggPSBHU1RfU1BMSVRNVVhfU0lOSyAob2JqZWN0KTsKLQotICAvKiBDYWxsaW5nIHBhcmVudCBkaXNwb3NlIGludmFsaWRhdGVzIGFsbCBjaGlsZCBwb2ludGVycyAqLwotICBzcGxpdG11eC0+c2luayA9IHNwbGl0bXV4LT5hY3RpdmVfc2luayA9IHNwbGl0bXV4LT5tdXhlciA9IHNwbGl0bXV4LT5tcSA9Ci0gICAgICBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNwbGl0TXV4U2luayAqc3BsaXRtdXggPSBHU1RfU1BMSVRNVVhfU0lOSyAob2JqZWN0KTsKLSAgZ19jb25kX2NsZWFyICgmc3BsaXRtdXgtPmRhdGFfY29uZCk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzcGxpdG11eC0+bG9jayk7Ci0gIGlmIChzcGxpdG11eC0+cHJvdmlkZWRfc2luaykKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzcGxpdG11eC0+cHJvdmlkZWRfc2luayk7Ci0gIGlmIChzcGxpdG11eC0+cHJvdmlkZWRfbXV4ZXIpCi0gICAgZ3N0X29iamVjdF91bnJlZiAoc3BsaXRtdXgtPnByb3ZpZGVkX211eGVyKTsKLQotICBnX2ZyZWUgKHNwbGl0bXV4LT5sb2NhdGlvbik7Ci0KLSAgLyogTWFrZSBzdXJlIHRvIGZyZWUgYW55IHVuLXJlbGVhc2VkIGNvbnRleHRzICovCi0gIGdfbGlzdF9mb3JlYWNoIChzcGxpdG11eC0+Y29udGV4dHMsIChHRnVuYykgbXFfc3RyZWFtX2N0eF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChzcGxpdG11eC0+Y29udGV4dHMpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTcGxpdE11eFNpbmsgKnNwbGl0bXV4ID0gR1NUX1NQTElUTVVYX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOnsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgZ19mcmVlIChzcGxpdG11eC0+bG9jYXRpb24pOwotICAgICAgc3BsaXRtdXgtPmxvY2F0aW9uID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9CWVRFUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgc3BsaXRtdXgtPnRocmVzaG9sZF9ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICBzcGxpdG11eC0+dGhyZXNob2xkX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VORF9LRVlGUkFNRV9SRVFVRVNUUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgc3BsaXRtdXgtPnNlbmRfa2V5ZnJhbWVfcmVxdWVzdHMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9GSUxFUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgc3BsaXRtdXgtPm1heF9maWxlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVYRVJfT1ZFUkhFQUQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIHNwbGl0bXV4LT5tdXhfb3ZlcmhlYWQgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0lOSzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgaWYgKHNwbGl0bXV4LT5wcm92aWRlZF9zaW5rKQotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcGxpdG11eC0+cHJvdmlkZWRfc2luayk7Ci0gICAgICBzcGxpdG11eC0+cHJvdmlkZWRfc2luayA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpOwotICAgICAgZ3N0X29iamVjdF9yZWZfc2luayAoc3BsaXRtdXgtPnByb3ZpZGVkX3NpbmspOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NVVhFUjoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgaWYgKHNwbGl0bXV4LT5wcm92aWRlZF9tdXhlcikKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3BsaXRtdXgtPnByb3ZpZGVkX211eGVyKTsKLSAgICAgIHNwbGl0bXV4LT5wcm92aWRlZF9tdXhlciA9IGdfdmFsdWVfZ2V0X29iamVjdCAodmFsdWUpOwotICAgICAgZ3N0X29iamVjdF9yZWZfc2luayAoc3BsaXRtdXgtPnByb3ZpZGVkX211eGVyKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U3BsaXRNdXhTaW5rICpzcGxpdG11eCA9IEdTVF9TUExJVE1VWF9TSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3BsaXRtdXgtPmxvY2F0aW9uKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfQllURVM6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHNwbGl0bXV4LT50aHJlc2hvbGRfYnl0ZXMpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBzcGxpdG11eC0+dGhyZXNob2xkX3RpbWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TRU5EX0tFWUZSQU1FX1JFUVVFU1RTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc3BsaXRtdXgtPnNlbmRfa2V5ZnJhbWVfcmVxdWVzdHMpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfRklMRVM6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzcGxpdG11eC0+bWF4X2ZpbGVzKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVYRVJfT1ZFUkhFQUQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNwbGl0bXV4LT5tdXhfb3ZlcmhlYWQpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSU5LOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBzcGxpdG11eC0+cHJvdmlkZWRfc2luayk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VWEVSOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBzcGxpdG11eC0+cHJvdmlkZWRfbXV4ZXIpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgR3N0Q2xvY2tUaW1lRGlmZgotbXlfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKEdzdFNlZ21lbnQgKiBzZWdtZW50LCBHc3RDbG9ja1RpbWUgdmFsKQotewotICBHc3RDbG9ja1RpbWVEaWZmIHJlcyA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodmFsKSkgewotICAgIGdib29sZWFuIHNpZ24gPQotICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWVfZnVsbCAoc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB2YWwsICZ2YWwpOwotICAgIGlmIChzaWduID4gMCkKLSAgICAgIHJlcyA9IHZhbDsKLSAgICBlbHNlIGlmIChzaWduIDwgMCkKLSAgICAgIHJlcyA9IC12YWw7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1tcV9zaW5rX3RvX3NyYyAoR3N0RWxlbWVudCAqIG1xLCBHc3RQYWQgKiBzaW5rX3BhZCkKLXsKLSAgZ2NoYXIgKnRtcCwgKnNpbmtuYW1lLCAqc3JjbmFtZTsKLSAgR3N0UGFkICptcV9zcmM7Ci0KLSAgc2lua25hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChzaW5rX3BhZCk7Ci0gIHRtcCA9IHNpbmtuYW1lICsgNTsKLSAgc3JjbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyY18lcyIsIHRtcCk7Ci0KLSAgbXFfc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG1xLCBzcmNuYW1lKTsKLQotICBnX2ZyZWUgKHNpbmtuYW1lKTsKLSAgZ19mcmVlIChzcmNuYW1lKTsKLQotICByZXR1cm4gbXFfc3JjOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdldF9wYWRzX2Zyb21fbXEgKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4LCBHc3RQYWQgKiogc2lua19wYWQsCi0gICAgR3N0UGFkICoqIHNyY19wYWQpCi17Ci0gIEdzdFBhZCAqbXFfc2luazsKLSAgR3N0UGFkICptcV9zcmM7Ci0KLSAgLyogUmVxdWVzdCBhIHBhZCBmcm9tIG11bHRpcXVldWUsIHRoZW4gY29ubmVjdCB0aGlzIG9uZSwgdGhlbgotICAgKiBkaXNjb3ZlciB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQgcGFkIGFuZCByZXR1cm4gYm90aCAqLwotICBtcV9zaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChzcGxpdG11eC0+bXEsICJzaW5rXyV1Iik7Ci0gIGlmIChtcV9zaW5rID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG1xX3NyYyA9IG1xX3NpbmtfdG9fc3JjIChzcGxpdG11eC0+bXEsIG1xX3NpbmspOwotICBpZiAobXFfc3JjID09IE5VTEwpCi0gICAgZ290byBmYWlsOwotCi0gICpzaW5rX3BhZCA9IG1xX3Npbms7Ci0gICpzcmNfcGFkID0gbXFfc3JjOwotCi0gIHJldHVybiBUUlVFOwotCi1mYWlsOgotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChzcGxpdG11eC0+bXEsIG1xX3NpbmspOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBNcVN0cmVhbUN0eCAqCi1tcV9zdHJlYW1fY3R4X25ldyAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIE1xU3RyZWFtQ3R4ICpjdHg7Ci0KLSAgY3R4ID0gZ19uZXcwIChNcVN0cmVhbUN0eCwgMSk7Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZjdHgtPnJlZmNvdW50LCAxKTsKLSAgY3R4LT5zcGxpdG11eCA9IHNwbGl0bXV4OwotICBnc3Rfc2VnbWVudF9pbml0ICgmY3R4LT5pbl9zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZjdHgtPm91dF9zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0gIGN0eC0+aW5fcnVubmluZ190aW1lID0gY3R4LT5vdXRfcnVubmluZ190aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gIGdfcXVldWVfaW5pdCAoJmN0eC0+cXVldWVkX2J1ZnMpOwotICByZXR1cm4gY3R4OwotfQotCi1zdGF0aWMgdm9pZAotbXFfc3RyZWFtX2N0eF9mcmVlIChNcVN0cmVhbUN0eCAqIGN0eCkKLXsKLSAgZ19xdWV1ZV9mb3JlYWNoICgmY3R4LT5xdWV1ZWRfYnVmcywgKEdGdW5jKSBtcV9zdHJlYW1fYnVmX2ZyZWUsIE5VTEwpOwotICBnX3F1ZXVlX2NsZWFyICgmY3R4LT5xdWV1ZWRfYnVmcyk7Ci0gIGdfZnJlZSAoY3R4KTsKLX0KLQotc3RhdGljIHZvaWQKLW1xX3N0cmVhbV9jdHhfdW5yZWYgKE1xU3RyZWFtQ3R4ICogY3R4KQotewotICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCAoJmN0eC0+cmVmY291bnQpKQotICAgIG1xX3N0cmVhbV9jdHhfZnJlZSAoY3R4KTsKLX0KLQotc3RhdGljIHZvaWQKLW1xX3N0cmVhbV9jdHhfcmVmIChNcVN0cmVhbUN0eCAqIGN0eCkKLXsKLSAgZ19hdG9taWNfaW50X2luYyAoJmN0eC0+cmVmY291bnQpOwotfQotCi1zdGF0aWMgdm9pZAotX3BhZF9ibG9ja19kZXN0cm95X3Npbmtfbm90aWZ5IChNcVN0cmVhbUN0eCAqIGN0eCkKLXsKLSAgY3R4LT5zaW5rX3BhZF9ibG9ja19pZCA9IDA7Ci0gIG1xX3N0cmVhbV9jdHhfdW5yZWYgKGN0eCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fcGFkX2Jsb2NrX2Rlc3Ryb3lfc3JjX25vdGlmeSAoTXFTdHJlYW1DdHggKiBjdHgpCi17Ci0gIGN0eC0+c3JjX3BhZF9ibG9ja19pZCA9IDA7Ci0gIG1xX3N0cmVhbV9jdHhfdW5yZWYgKGN0eCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX2ZyYWdtZW50X29wZW5lZF9jbG9zZWRfbXNnIChHc3RTcGxpdE11eFNpbmsgKiBzcGxpdG11eCwgZ2Jvb2xlYW4gb3BlbmVkKQotewotICBnY2hhciAqbG9jYXRpb24gPSBOVUxMOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIGNvbnN0IGdjaGFyICptc2dfbmFtZSA9IG9wZW5lZCA/Ci0gICAgICAic3BsaXRtdXhzaW5rLWZyYWdtZW50LW9wZW5lZCIgOiAic3BsaXRtdXhzaW5rLWZyYWdtZW50LWNsb3NlZCI7Ci0KLSAgZ19vYmplY3RfZ2V0IChzcGxpdG11eC0+c2luaywgImxvY2F0aW9uIiwgJmxvY2F0aW9uLCBOVUxMKTsKLQotICBtc2cgPSBnc3RfbWVzc2FnZV9uZXdfZWxlbWVudCAoR1NUX09CSkVDVCAoc3BsaXRtdXgpLAotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKG1zZ19uYW1lLAotICAgICAgICAgICJsb2NhdGlvbiIsIEdfVFlQRV9TVFJJTkcsIGxvY2F0aW9uLAotICAgICAgICAgICJydW5uaW5nLXRpbWUiLCBHU1RfVFlQRV9DTE9DS19USU1FLAotICAgICAgICAgIHNwbGl0bXV4LT5yZWZlcmVuY2VfY3R4LT5vdXRfcnVubmluZ190aW1lLCBOVUxMKSk7Ci0gIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc3BsaXRtdXgpLCBtc2cpOwotCi0gIGdfZnJlZSAobG9jYXRpb24pOwotfQotCi0vKiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQsIGRyb3BzIHRoZSBsb2NrIHRvIHNlbmQgRU9TIHRvIHRoZQotICogcGFkCi0gKi8KLXN0YXRpYyB2b2lkCi1zZW5kX2VvcyAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgsIE1xU3RyZWFtQ3R4ICogY3R4KQotewotICBHc3RFdmVudCAqZW9zOwotICBHc3RQYWQgKnBhZDsKLQotICBlb3MgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoY3R4LT5zcmNwYWQpOwotCi0gIGN0eC0+b3V0X2VvcyA9IFRSVUU7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzcGxpdG11eCwgIlNlbmRpbmcgRU9TIG9uICUiIEdTVF9QVFJfRk9STUFULCBwYWQpOwotICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAocGFkLCBlb3MpOwotICBHU1RfU1BMSVRNVVhfTE9DSyAoc3BsaXRtdXgpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19Ci0KLS8qIENhbGxlZCB3aXRoIHNwbGl0bXV4IGxvY2sgaGVsZCB0byBjaGVjayBpZiB0aGlzIG91dHB1dAotICogY29udGV4dCBuZWVkcyB0byBzbGVlcCB0byB3YWl0IGZvciB0aGUgcmVsZWFzZSBvZiB0aGUKLSAqIG5leHQgR09QLCBvciB0byBzZW5kIEVPUyB0byBjbG9zZSBvdXQgdGhlIGN1cnJlbnQgZmlsZQotICovCi1zdGF0aWMgdm9pZAotY29tcGxldGVfb3Jfd2FpdF9vbl9vdXQgKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4LCBNcVN0cmVhbUN0eCAqIGN0eCkKLXsKLSAgZG8gewotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGN0eC0+c3JjcGFkLAotICAgICAgICAiQ2hlY2tpbmcgcnVubmluZyB0aW1lICUiIEdTVF9TVElNRV9GT1JNQVQgIiBhZ2FpbnN0IG1heCAlIgotICAgICAgICBHU1RfU1RJTUVfRk9STUFULCBHU1RfU1RJTUVfQVJHUyAoY3R4LT5vdXRfcnVubmluZ190aW1lKSwKLSAgICAgICAgR1NUX1NUSU1FX0FSR1MgKHNwbGl0bXV4LT5tYXhfb3V0X3J1bm5pbmdfdGltZSkpOwotCi0gICAgaWYgKHNwbGl0bXV4LT5tYXhfb3V0X3J1bm5pbmdfdGltZSA9PSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSB8fAotICAgICAgICBjdHgtPm91dF9ydW5uaW5nX3RpbWUgPCBzcGxpdG11eC0+bWF4X291dF9ydW5uaW5nX3RpbWUpIHsKLSAgICAgIHNwbGl0bXV4LT5oYXZlX211eGVkX3NvbWV0aGluZyA9IFRSVUU7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGN0eC0+Zmx1c2hpbmcgfHwgc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1NUT1BQRUQpCi0gICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX0VORElOR19GSUxFKSB7Ci0gICAgICBpZiAoY3R4LT5vdXRfZW9zID09IEZBTFNFKSB7Ci0gICAgICAgIHNlbmRfZW9zIChzcGxpdG11eCwgY3R4KTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChzcGxpdG11eC0+c3RhdGUgPT0gU1BMSVRNVVhfU1RBVEVfU1RBUlRfTkVYVF9GUkFHTUVOVCkgewotICAgICAgc3RhcnRfbmV4dF9mcmFnbWVudCAoc3BsaXRtdXgpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgR1NUX0lORk9fT0JKRUNUIChjdHgtPnNyY3BhZCwKLSAgICAgICAgIlNsZWVwaW5nIGZvciBydW5uaW5nIHRpbWUgJSIKLSAgICAgICAgR1NUX1NUSU1FX0ZPUk1BVCAiIChtYXggJSIgR1NUX1NUSU1FX0ZPUk1BVCAiKSIsCi0gICAgICAgIEdTVF9TVElNRV9BUkdTIChjdHgtPm91dF9ydW5uaW5nX3RpbWUpLAotICAgICAgICBHU1RfU1RJTUVfQVJHUyAoc3BsaXRtdXgtPm1heF9vdXRfcnVubmluZ190aW1lKSk7Ci0gICAgY3R4LT5vdXRfYmxvY2tlZCA9IFRSVUU7Ci0gICAgLyogRXhwYW5kIHRoZSBtcSBpZiBuZWVkZWQgYmVmb3JlIHNsZWVwaW5nICovCi0gICAgY2hlY2tfcXVldWVfbGVuZ3RoIChzcGxpdG11eCwgY3R4KTsKLSAgICBHU1RfU1BMSVRNVVhfV0FJVCAoc3BsaXRtdXgpOwotICAgIGN0eC0+b3V0X2Jsb2NrZWQgPSBGQUxTRTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGN0eC0+c3JjcGFkLAotICAgICAgICAiV29rZW4gZm9yIG5ldyBtYXggcnVubmluZyB0aW1lICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9TVElNRV9BUkdTIChzcGxpdG11eC0+bWF4X291dF9ydW5uaW5nX3RpbWUpKTsKLSAgfSB3aGlsZSAoMSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVxdWVzdF9uZXh0X2tleWZyYW1lIChHc3RTcGxpdE11eFNpbmsgKiBzcGxpdG11eCkKLXsKLSAgR3N0RXZlbnQgKmV2OwotCi0gIGlmIChzcGxpdG11eC0+c2VuZF9rZXlmcmFtZV9yZXF1ZXN0cyA9PSBGQUxTRSB8fCBzcGxpdG11eC0+dGhyZXNob2xkX3RpbWUgPT0gMAotICAgICAgfHwgc3BsaXRtdXgtPnRocmVzaG9sZF9ieXRlcyAhPSAwKQotICAgIHJldHVybiBUUlVFOwotCi0gIGV2ID0gZ3N0X3ZpZGVvX2V2ZW50X25ld191cHN0cmVhbV9mb3JjZV9rZXlfdW5pdCAoc3BsaXRtdXgtPmZyYWdtZW50X2lkICoKLSAgICAgIHNwbGl0bXV4LT50aHJlc2hvbGRfdGltZSwgVFJVRSwgMCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNwbGl0bXV4LCAiUmVxdWVzdGluZyBuZXh0IGtleWZyYW1lIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHNwbGl0bXV4LT5mcmFnbWVudF9pZCAqIHNwbGl0bXV4LT50aHJlc2hvbGRfdGltZSkpOwotICByZXR1cm4gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcGxpdG11eC0+cmVmZXJlbmNlX2N0eC0+c2lua3BhZCwgZXYpOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWhhbmRsZV9tcV9vdXRwdXQgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgTXFTdHJlYW1DdHggKiBjdHgpCi17Ci0gIEdzdFNwbGl0TXV4U2luayAqc3BsaXRtdXggPSBjdHgtPnNwbGl0bXV4OwotICBNcVN0cmVhbUJ1ZiAqYnVmX2luZm8gPSBOVUxMOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJGaXJlZCBwcm9iZSB0eXBlIDB4JXgiLCBpbmZvLT50eXBlKTsKLQotICAvKiBGSVhNRTogSGFuZGxlIGJ1ZmZlciBsaXN0cywgdW50aWwgdGhlbiBtYWtlIGl0IGNsZWFyIHRoZXkgd29uJ3Qgd29yayAqLwotICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVJfTElTVCkgewotICAgIGdfd2FybmluZyAoIkJ1ZmZlciBsaXN0IGhhbmRsaW5nIG5vdCBpbXBsZW1lbnRlZCIpOwotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX0RST1A7Ci0gIH0KLSAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSkgewotICAgIEdzdEV2ZW50ICpldmVudCA9IGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfZXZlbnQgKGluZm8pOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmY3R4LT5vdXRfc2VnbWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmN0eC0+b3V0X3NlZ21lbnQsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgICAgZ19xdWV1ZV9mb3JlYWNoICgmY3R4LT5xdWV1ZWRfYnVmcywgKEdGdW5jKSBtcV9zdHJlYW1fYnVmX2ZyZWUsIE5VTEwpOwotICAgICAgICBnX3F1ZXVlX2NsZWFyICgmY3R4LT5xdWV1ZWRfYnVmcyk7Ci0gICAgICAgIGN0eC0+Zmx1c2hpbmcgPSBGQUxTRTsKLSAgICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgICBHU1RfU1BMSVRNVVhfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiRmx1c2ggc3RhcnQiKTsKLSAgICAgICAgY3R4LT5mbHVzaGluZyA9IFRSVUU7Ci0gICAgICAgIEdTVF9TUExJVE1VWF9CUk9BRENBU1QgKHNwbGl0bXV4KTsKLSAgICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgaWYgKHNwbGl0bXV4LT5zdGF0ZSA9PSBTUExJVE1VWF9TVEFURV9TVE9QUEVEKQotICAgICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICAgIGN0eC0+b3V0X2VvcyA9IFRSVUU7Ci0gICAgICAgIEdTVF9TUExJVE1VWF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9HQVA6ewotICAgICAgICBHc3RDbG9ja1RpbWUgZ2FwX3RzOwotICAgICAgICBHc3RDbG9ja1RpbWVEaWZmIHJ0aW1lOwotCi0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9nYXAgKGV2ZW50LCAmZ2FwX3RzLCBOVUxMKTsKLSAgICAgICAgaWYgKGdhcF90cyA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIEdTVF9TUExJVE1VWF9MT0NLIChzcGxpdG11eCk7Ci0KLSAgICAgICAgcnRpbWUgPSBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJmN0eC0+b3V0X3NlZ21lbnQsIGdhcF90cyk7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkhhdmUgR0FQIHcvIHRzICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAocnRpbWUpKTsKLQotICAgICAgICBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1NUT1BQRUQpCi0gICAgICAgICAgZ290byBiZWFjaDsKLQotICAgICAgICBpZiAocnRpbWUgIT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpIHsKLSAgICAgICAgICBjdHgtPm91dF9ydW5uaW5nX3RpbWUgPSBydGltZTsKLSAgICAgICAgICBjb21wbGV0ZV9vcl93YWl0X29uX291dCAoc3BsaXRtdXgsIGN0eCk7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNOnsKLSAgICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICAgICAgICBHc3RDbG9ja1RpbWVEaWZmIHRzID0gMDsKLQotICAgICAgICBzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLSAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAic3BsaXRtdXhzaW5rLXVuYmxvY2siKSkKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQ2NCAocywgInRpbWVzdGFtcCIsICZ0cyk7Ci0KLSAgICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLQotICAgICAgICBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1NUT1BQRUQpCi0gICAgICAgICAgZ290byBiZWFjaDsKLSAgICAgICAgY3R4LT5vdXRfcnVubmluZ190aW1lID0gdHM7Ci0gICAgICAgIGNvbXBsZXRlX29yX3dhaXRfb25fb3V0IChzcGxpdG11eCwgY3R4KTsKLSAgICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9EUk9QOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBHU1RfUEFEX1BST0JFX1BBU1M7Ci0gIH0KLQotICAvKiBBbGxvdyBldmVyeXRoaW5nIHRocm91Z2ggdW50aWwgdGhlIGNvbmZpZ3VyZWQgbmV4dCBzdG9wcGluZyBwb2ludCAqLwotICBHU1RfU1BMSVRNVVhfTE9DSyAoc3BsaXRtdXgpOwotCi0gIGJ1Zl9pbmZvID0gZ19xdWV1ZV9wb3BfdGFpbCAoJmN0eC0+cXVldWVkX2J1ZnMpOwotICBpZiAoYnVmX2luZm8gPT0gTlVMTCkKLSAgICAvKiBDYW4gb25seSBoYXBwZW4gZHVlIHRvIGEgcG9vcmx5IHRpbWVkIGZsdXNoICovCi0gICAgZ290byBiZWFjaDsKLQotICAvKiBJZiB3ZSBoYXZlIHBvcHBlZCBhIGtleWZyYW1lLCBkZWNyZW1lbnQgdGhlIHF1ZXVlZF9nb3AgY291bnQgKi8KLSAgaWYgKGJ1Zl9pbmZvLT5rZXlmcmFtZSAmJiBzcGxpdG11eC0+cXVldWVkX2dvcHMgPiAwKQotICAgIHNwbGl0bXV4LT5xdWV1ZWRfZ29wcy0tOwotCi0gIGN0eC0+b3V0X3J1bm5pbmdfdGltZSA9IGJ1Zl9pbmZvLT5ydW5fdHM7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0bXV4LAotICAgICAgIlBhZCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGJ1ZmZlciB3aXRoIHJ1biBUUyAlIiBHU1RfU1RJTUVfRk9STUFUCi0gICAgICAiIHNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIHBhZCwgR1NUX1NUSU1FX0FSR1MgKGN0eC0+b3V0X3J1bm5pbmdfdGltZSksIGJ1Zl9pbmZvLT5idWZfc2l6ZSk7Ci0KLSAgaWYgKHNwbGl0bXV4LT5vcGVuaW5nX2ZpcnN0X2ZyYWdtZW50KSB7Ci0gICAgaWYgKHJlcXVlc3RfbmV4dF9rZXlmcmFtZSAoc3BsaXRtdXgpID09IEZBTFNFKQotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgICAiQ291bGQgbm90IHJlcXVlc3QgYSBrZXlmcmFtZS4gRmlsZXMgbWF5IG5vdCBzcGxpdCBhdCB0aGUgZXhhY3QgbG9jYXRpb24gdGhleSBzaG91bGQiKTsKLSAgICBzZW5kX2ZyYWdtZW50X29wZW5lZF9jbG9zZWRfbXNnIChzcGxpdG11eCwgVFJVRSk7Ci0gICAgc3BsaXRtdXgtPm9wZW5pbmdfZmlyc3RfZnJhZ21lbnQgPSBGQUxTRTsKLSAgfQotCi0gIGNvbXBsZXRlX29yX3dhaXRfb25fb3V0IChzcGxpdG11eCwgY3R4KTsKLQotICBpZiAoc3BsaXRtdXgtPm11eGVkX291dF90aW1lID09IEdTVF9DTE9DS19TVElNRV9OT05FIHx8Ci0gICAgICBzcGxpdG11eC0+bXV4ZWRfb3V0X3RpbWUgPCBidWZfaW5mby0+cnVuX3RzKQotICAgIHNwbGl0bXV4LT5tdXhlZF9vdXRfdGltZSA9IGJ1Zl9pbmZvLT5ydW5fdHM7Ci0KLSAgc3BsaXRtdXgtPm11eGVkX291dF9ieXRlcyArPSBidWZfaW5mby0+YnVmX3NpemU7Ci0gIHNwbGl0bXV4LT5sYXN0X2ZyYW1lX2R1cmF0aW9uID0gYnVmX2luZm8tPmR1cmF0aW9uOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBnc3RfcGFkX3Byb2JlX2luZm9fZ2V0X2J1ZmZlciAoaW5mbyk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIlJldHVybmluZyB0byBwYXNzIGJ1ZmZlciAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgICAiIHJ1biB0cyAlIiBHU1RfU1RJTUVfRk9STUFULCBidWYsCi0gICAgICAgIEdTVF9TVElNRV9BUkdTIChjdHgtPm91dF9ydW5uaW5nX3RpbWUpKTsKLSAgfQotI2VuZGlmCi0KLSAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotCi0gIG1xX3N0cmVhbV9idWZfZnJlZSAoYnVmX2luZm8pOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX1BBU1M7Ci0KLWJlYWNoOgotICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX0RST1A7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVzZW5kX3N0aWNreSAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqKiBldmVudCwgR3N0UGFkICogcGVlcikKLXsKLSAgcmV0dXJuIGdzdF9wYWRfc2VuZF9ldmVudCAocGVlciwgZ3N0X2V2ZW50X3JlZiAoKmV2ZW50KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZXN0YXJ0X2NvbnRleHQgKE1xU3RyZWFtQ3R4ICogY3R4LCBHc3RTcGxpdE11eFNpbmsgKiBzcGxpdG11eCkKLXsKLSAgR3N0UGFkICpwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAoY3R4LT5zcmNwYWQpOwotCi0gIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChjdHgtPnNyY3BhZCwKLSAgICAgIChHc3RQYWRTdGlja3lFdmVudHNGb3JlYWNoRnVuY3Rpb24pIChyZXNlbmRfc3RpY2t5KSwgcGVlcik7Ci0KLSAgLyogQ2xlYXIgRU9TIGZsYWcgaWYgbm90IGFjdHVhbGx5IEVPUyAqLwotICBjdHgtPm91dF9lb3MgPSBHU1RfUEFEX0lTX0VPUyAoY3R4LT5zcmNwYWQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBlZXIpOwotfQotCi0vKiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQgd2hlbiBhIGZyYWdtZW50Ci0gKiByZWFjaGVzIEVPUyBhbmQgaXQgaXMgdGltZSB0byByZXN0YXJ0Ci0gKiBhIG5ldyBmcmFnbWVudAotICovCi1zdGF0aWMgdm9pZAotc3RhcnRfbmV4dF9mcmFnbWVudCAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIC8qIDEgY2hhbmdlIHRvIG5ldyBmaWxlICovCi0gIHNwbGl0bXV4LT5zd2l0Y2hpbmdfZnJhZ21lbnQgPSBUUlVFOwotCi0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNwbGl0bXV4LT5tdXhlciwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNwbGl0bXV4LT5hY3RpdmVfc2luaywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3BsaXRtdXgtPm11eGVyLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3BsaXRtdXgtPmFjdGl2ZV9zaW5rLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgc2V0X25leHRfZmlsZW5hbWUgKHNwbGl0bXV4KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNwbGl0bXV4LT5hY3RpdmVfc2luaywgR1NUX1NUQVRFX1RBUkdFVCAoc3BsaXRtdXgpKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcGxpdG11eC0+bXV4ZXIsIEdTVF9TVEFURV9UQVJHRVQgKHNwbGl0bXV4KSk7Ci0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNwbGl0bXV4LT5tdXhlciwgRkFMU0UpOwotICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzcGxpdG11eC0+YWN0aXZlX3NpbmssIEZBTFNFKTsKLQotICBzcGxpdG11eC0+c3dpdGNoaW5nX2ZyYWdtZW50ID0gRkFMU0U7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHNwbGl0bXV4LT5jb250ZXh0cywgKEdGdW5jKSByZXN0YXJ0X2NvbnRleHQsIHNwbGl0bXV4KTsKLQotICAvKiBTd2l0Y2ggc3RhdGUgYW5kIGdvIGJhY2sgdG8gcHJvY2Vzc2luZyAqLwotICBpZiAoIXNwbGl0bXV4LT5yZWZlcmVuY2VfY3R4LT5pbl9lb3MpIHsKLSAgICBzcGxpdG11eC0+c3RhdGUgPSBTUExJVE1VWF9TVEFURV9DT0xMRUNUSU5HX0dPUF9TVEFSVDsKLSAgICBzcGxpdG11eC0+bWF4X291dF9ydW5uaW5nX3RpbWUgPSBzcGxpdG11eC0+cmVmZXJlbmNlX2N0eC0+aW5fcnVubmluZ190aW1lOwotICB9IGVsc2UgewotICAgIHNwbGl0bXV4LT5zdGF0ZSA9IFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFOwotICAgIHNwbGl0bXV4LT5tYXhfb3V0X3J1bm5pbmdfdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICAgIHNwbGl0bXV4LT5oYXZlX211eGVkX3NvbWV0aGluZyA9IEZBTFNFOwotICB9Ci0gIHNwbGl0bXV4LT5oYXZlX211eGVkX3NvbWV0aGluZyA9Ci0gICAgICAoc3BsaXRtdXgtPnJlZmVyZW5jZV9jdHgtPmluX3J1bm5pbmdfdGltZSA+IHNwbGl0bXV4LT5tdXhlZF9vdXRfdGltZSk7Ci0KLSAgLyogU3RvcmUgdGhlIG92ZXJmbG93IHBhcmFtZXRlcnMgYXMgdGhlIGJhc2lzIGZvciB0aGUgbmV4dCBmcmFnbWVudCAqLwotICBzcGxpdG11eC0+bXV4X3N0YXJ0X3RpbWUgPSBzcGxpdG11eC0+bXV4ZWRfb3V0X3RpbWU7Ci0gIGlmIChzcGxpdG11eC0+bGFzdF9mcmFtZV9kdXJhdGlvbiAhPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSkKLSAgICBzcGxpdG11eC0+bXV4X3N0YXJ0X3RpbWUgKz0gc3BsaXRtdXgtPmxhc3RfZnJhbWVfZHVyYXRpb247Ci0gIHNwbGl0bXV4LT5tdXhfc3RhcnRfYnl0ZXMgPSBzcGxpdG11eC0+bXV4ZWRfb3V0X2J5dGVzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNwbGl0bXV4LAotICAgICAgIlJlc3RhcnRpbmcgZmxvdyBmb3IgbmV3IGZyYWdtZW50LiBOZXcgcnVubmluZyB0aW1lICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICBHU1RfU1RJTUVfQVJHUyAoc3BsaXRtdXgtPm1heF9vdXRfcnVubmluZ190aW1lKSk7Ci0KLSAgc2VuZF9mcmFnbWVudF9vcGVuZWRfY2xvc2VkX21zZyAoc3BsaXRtdXgsIFRSVUUpOwotICBpZiAocmVxdWVzdF9uZXh0X2tleWZyYW1lIChzcGxpdG11eCkgPT0gRkFMU0UpCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgIkNvdWxkIG5vdCByZXF1ZXN0IGEga2V5ZnJhbWUuIEZpbGVzIG1heSBub3Qgc3BsaXQgYXQgdGhlIGV4YWN0IGxvY2F0aW9uIHRoZXkgc2hvdWxkIik7Ci0KLSAgR1NUX1NQTElUTVVYX0JST0FEQ0FTVCAoc3BsaXRtdXgpOwotfQotCi1zdGF0aWMgdm9pZAotYnVzX2hhbmRsZXIgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIEdzdFNwbGl0TXV4U2luayAqc3BsaXRtdXggPSBHU1RfU1BMSVRNVVhfU0lOSyAoYmluKTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAvKiBJZiB0aGUgc3RhdGUgaXMgZHJhaW5pbmcgb3V0IHRoZSBjdXJyZW50IGZpbGUsIGRyb3AgdGhpcyBFT1MgKi8KLSAgICAgIEdTVF9TUExJVE1VWF9MT0NLIChzcGxpdG11eCk7Ci0KLSAgICAgIHNlbmRfZnJhZ21lbnRfb3BlbmVkX2Nsb3NlZF9tc2cgKHNwbGl0bXV4LCBGQUxTRSk7Ci0KLSAgICAgIGlmIChzcGxpdG11eC0+c3RhdGUgPT0gU1BMSVRNVVhfU1RBVEVfRU5ESU5HX0ZJTEUgJiYKLSAgICAgICAgICBzcGxpdG11eC0+bWF4X291dF9ydW5uaW5nX3RpbWUgIT0gR1NUX0NMT0NLX1NUSU1FX05PTkUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3BsaXRtdXgsICJDYXVnaHQgRU9TIGF0IGVuZCBvZiBmcmFnbWVudCwgZHJvcHBpbmciKTsKLSAgICAgICAgc3BsaXRtdXgtPnN0YXRlID0gU1BMSVRNVVhfU1RBVEVfU1RBUlRfTkVYVF9GUkFHTUVOVDsKLSAgICAgICAgR1NUX1NQTElUTVVYX0JST0FEQ0FTVCAoc3BsaXRtdXgpOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0FTWU5DX1NUQVJUOgotICAgIGNhc2UgR1NUX01FU1NBR0VfQVNZTkNfRE9ORToKLSAgICAgIC8qIElnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gb3VyIGNoaWxkcmVuIHdoaWxlIHN3aXRjaGluZyAqLwotICAgICAgaWYgKHNwbGl0bXV4LT5zd2l0Y2hpbmdfZnJhZ21lbnQpIHsKLSAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gKEdzdE9iamVjdCAqKSBzcGxpdG11eC0+YWN0aXZlX3NpbmsgfHwKLSAgICAgICAgICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gKEdzdE9iamVjdCAqKSBzcGxpdG11eC0+bXV4ZXIpIHsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsCi0gICAgICAgICAgICAgICJJZ25vcmluZyBzdGF0ZSBjaGFuZ2UgZnJvbSBjaGlsZCAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgICAgICAgICAiIHdoaWxlIHN3aXRjaGluZyIsIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOwotICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9CSU5fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UpOwotfQotCi0vKiBDYWxsZWQgd2l0aCBzcGxpdG11eCBsb2NrIGhlbGQgKi8KLS8qIENhbGxlZCB3aGVuIGVudGVyaW5nIFByb2Nlc3NpbmdDb21wbGV0ZUdvcCBzdGF0ZQotICogQXNzZXNzIGlmIG1xIGNvbnRlbnRzIG92ZXJmbG93ZWQgdGhlIGN1cnJlbnQgZmlsZQotICogICAtPiBJZiB5ZXMsIG5lZWQgdG8gc3dpdGNoIHRvIG5ldyBmaWxlCi0gKiAgIC0+IGlmIG5vLCBzZXQgbWF4X291dF9ydW5uaW5nX3RpbWUgdG8gbGV0IHRoaXMgR09QIGluIGFuZAotICogICAgICBnbyB0byBDT0xMRUNUSU5HX0dPUF9TVEFSVCBzdGF0ZQotICovCi1zdGF0aWMgdm9pZAotaGFuZGxlX2dhdGhlcmVkX2dvcCAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIEdMaXN0ICpjdXI7Ci0gIGd1aW50NjQgcXVldWVkX2J5dGVzID0gMDsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBxdWV1ZWRfdGltZSA9IDA7Ci0KLSAgLyogQXNzZXNzIGlmIHRoZSBtdWx0aXF1ZXVlIGNvbnRlbnRzIG92ZXJmbG93ZWQgdGhlIGN1cnJlbnQgZmlsZSAqLwotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAoc3BsaXRtdXgtPmNvbnRleHRzKTsKLSAgICAgIGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIE1xU3RyZWFtQ3R4ICp0bXBjdHggPSAoTXFTdHJlYW1DdHggKikgKGN1ci0+ZGF0YSk7Ci0gICAgaWYgKHRtcGN0eC0+aW5fcnVubmluZ190aW1lID4gcXVldWVkX3RpbWUpCi0gICAgICBxdWV1ZWRfdGltZSA9IHRtcGN0eC0+aW5fcnVubmluZ190aW1lOwotICAgIHF1ZXVlZF9ieXRlcyArPSB0bXBjdHgtPmluX2J5dGVzOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0bXV4LCAiIHF1ZXVlZF9ieXRlcyAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiIHNwbGl0bXV4c2luay0+bXV4X3N0YXJ0X2J5dGVzICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHF1ZXVlZF9ieXRlcywKLSAgICAgIHNwbGl0bXV4LT5tdXhfc3RhcnRfYnl0ZXMpOwotICBnX2Fzc2VydCAocXVldWVkX2J5dGVzID49IHNwbGl0bXV4LT5tdXhfc3RhcnRfYnl0ZXMpOwotICBnX2Fzc2VydCAocXVldWVkX3RpbWUgPj0gc3BsaXRtdXgtPm11eF9zdGFydF90aW1lKTsKLQotICBxdWV1ZWRfYnl0ZXMgLT0gc3BsaXRtdXgtPm11eF9zdGFydF9ieXRlczsKLSAgcXVldWVkX3RpbWUgLT0gc3BsaXRtdXgtPm11eF9zdGFydF90aW1lOwotCi0gIC8qIEV4cGFuZCBxdWV1ZWQgYnl0ZXMgZXN0aW1hdGUgYnkgbXV4ZXIgb3ZlcmhlYWQgKi8KLSAgcXVldWVkX2J5dGVzICs9IChxdWV1ZWRfYnl0ZXMgKiBzcGxpdG11eC0+bXV4X292ZXJoZWFkKTsKLQotICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsICJtcSBhdCBUUyAlIiBHU1RfU1RJTUVfRk9STUFUCi0gICAgICAiIGJ5dGVzICUiIEdfR1VJTlQ2NF9GT1JNQVQsIEdTVF9TVElNRV9BUkdTIChxdWV1ZWRfdGltZSksIHF1ZXVlZF9ieXRlcyk7Ci0KLSAgLyogQ2hlY2sgZm9yIG92ZXJydW4gLSBoYXZlIHdlIG91dHB1dCBhdCBsZWFzdCBvbmUgYnl0ZSBhbmQgb3ZlcnJ1bgotICAgKiBlaXRoZXIgdGhyZXNob2xkPyAqLwotICBpZiAoKHNwbGl0bXV4LT5oYXZlX211eGVkX3NvbWV0aGluZyAmJgotICAgICAgICAgICgoc3BsaXRtdXgtPnRocmVzaG9sZF9ieXRlcyA+IDAgJiYKLSAgICAgICAgICAgICAgICAgIHF1ZXVlZF9ieXRlcyA+IHNwbGl0bXV4LT50aHJlc2hvbGRfYnl0ZXMpIHx8Ci0gICAgICAgICAgICAgIChzcGxpdG11eC0+dGhyZXNob2xkX3RpbWUgPiAwICYmCi0gICAgICAgICAgICAgICAgICBxdWV1ZWRfdGltZSA+IHNwbGl0bXV4LT50aHJlc2hvbGRfdGltZSkpKSkgewotCi0gICAgc3BsaXRtdXgtPnN0YXRlID0gU1BMSVRNVVhfU1RBVEVfRU5ESU5HX0ZJTEU7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgIm1xIG92ZXJmbG93ZWQgc2luY2UgbGFzdCwgZHJhaW5pbmcgb3V0LiBtYXggb3V0IFRTIGlzICUiCi0gICAgICAgIEdTVF9TVElNRV9GT1JNQVQsIEdTVF9TVElNRV9BUkdTIChzcGxpdG11eC0+bWF4X291dF9ydW5uaW5nX3RpbWUpKTsKLSAgICBHU1RfU1BMSVRNVVhfQlJPQURDQVNUIChzcGxpdG11eCk7Ci0KLSAgfSBlbHNlIHsKLSAgICAvKiBObyBvdmVyZmxvdyAqLwotICAgIEdTVF9MT0dfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgIlRoaXMgR09QIGRpZG4ndCBvdmVyZmxvdyB0aGUgZnJhZ21lbnQuIEJ5dGVzIHNlbnQgJSIgR19HVUlOVDY0X0ZPUk1BVAotICAgICAgICAiIHF1ZXVlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIgdGltZSAlIiBHU1RfU1RJTUVfRk9STUFUICIgQ29udGludWluZy4iLAotICAgICAgICBzcGxpdG11eC0+bXV4ZWRfb3V0X2J5dGVzIC0gc3BsaXRtdXgtPm11eF9zdGFydF9ieXRlcywKLSAgICAgICAgcXVldWVkX2J5dGVzLCBHU1RfU1RJTUVfQVJHUyAocXVldWVkX3RpbWUpKTsKLQotICAgIC8qIFdha2UgZXZlcnlvbmUgdXAgdG8gcHVzaCB0aGlzIG9uZSBHT1AsIHRoZW4gc2xlZXAgKi8KLSAgICBzcGxpdG11eC0+aGF2ZV9tdXhlZF9zb21ldGhpbmcgPSBUUlVFOwotCi0gICAgaWYgKCFzcGxpdG11eC0+cmVmZXJlbmNlX2N0eC0+aW5fZW9zKSB7Ci0gICAgICBzcGxpdG11eC0+c3RhdGUgPSBTUExJVE1VWF9TVEFURV9DT0xMRUNUSU5HX0dPUF9TVEFSVDsKLSAgICAgIHNwbGl0bXV4LT5tYXhfb3V0X3J1bm5pbmdfdGltZSA9IHNwbGl0bXV4LT5yZWZlcmVuY2VfY3R4LT5pbl9ydW5uaW5nX3RpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNwbGl0bXV4LT5zdGF0ZSA9IFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFOwotICAgICAgc3BsaXRtdXgtPm1heF9vdXRfcnVubmluZ190aW1lID0gR1NUX0NMT0NLX1NUSU1FX05PTkU7Ci0gICAgfQotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0bXV4LCAiV2FraW5nIG91dHB1dCBmb3IgY29tcGxldGUgR09QLCBUUyAlIgotICAgICAgICBHU1RfU1RJTUVfRk9STUFULCBHU1RfU1RJTUVfQVJHUyAoc3BsaXRtdXgtPm1heF9vdXRfcnVubmluZ190aW1lKSk7Ci0gICAgR1NUX1NQTElUTVVYX0JST0FEQ0FTVCAoc3BsaXRtdXgpOwotICB9Ci0KLX0KLQotLyogQ2FsbGVkIHdpdGggc3BsaXRtdXggbG9jayBoZWxkICovCi0vKiBDYWxsZWQgZnJvbSBlYWNoIGlucHV0IHBhZCB3aGVuIGl0IGlzIGhhcyBhbGwgdGhlIHBpZWNlcwotICogZm9yIGEgR09QIG9yIEVPUywgc3RhcnRpbmcgd2l0aCB0aGUgcmVmZXJlbmNlIHBhZCB3aGljaCBoYXMgc2V0IHRoZQotICogc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUKLSAqLwotc3RhdGljIHZvaWQKLWNoZWNrX2NvbXBsZXRlZF9nb3AgKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4LCBNcVN0cmVhbUN0eCAqIGN0eCkKLXsKLSAgR0xpc3QgKmN1cjsKLSAgZ2Jvb2xlYW4gcmVhZHkgPSBUUlVFOwotICBHc3RDbG9ja1RpbWVEaWZmIGN1cnJlbnRfbWF4X2luX3J1bm5pbmdfdGltZTsKLQotICBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFKSB7Ci0gICAgLyogSXRlcmF0ZSBlYWNoIHBhZCwgYW5kIGNoZWNrIHRoYXQgdGhlIGlucHV0IHJ1bm5pbmcgdGltZSBpcyBhdCBsZWFzdAotICAgICAqIHVwIHRvIHRoZSByZWZlcmVuY2UgcnVubmluZyB0aW1lLCBhbmQgaWYgc28gaGFuZGxlIHRoZSBjb2xsZWN0ZWQgR09QICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0bXV4LCAiQ2hlY2tpbmcgR09QIGNvbGxlY3RlZCwgTWF4IGluIHJ1bm5pbmcgdGltZSAlIgotICAgICAgICBHU1RfU1RJTUVfRk9STUFUICIgY3R4ICVwIiwKLSAgICAgICAgR1NUX1NUSU1FX0FSR1MgKHNwbGl0bXV4LT5tYXhfaW5fcnVubmluZ190aW1lKSwgY3R4KTsKLSAgICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAoc3BsaXRtdXgtPmNvbnRleHRzKTsgY3VyICE9IE5VTEw7Ci0gICAgICAgIGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgICBNcVN0cmVhbUN0eCAqdG1wY3R4ID0gKE1xU3RyZWFtQ3R4ICopIChjdXItPmRhdGEpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsCi0gICAgICAgICAgIkNvbnRleHQgJXAgKHNyYyBwYWQgJSIgR1NUX1BUUl9GT1JNQVQgIikgVFMgJSIgR1NUX1NUSU1FX0ZPUk1BVAotICAgICAgICAgICIgRU9TICVkIiwgdG1wY3R4LCB0bXBjdHgtPnNyY3BhZCwKLSAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAodG1wY3R4LT5pbl9ydW5uaW5nX3RpbWUpLCB0bXBjdHgtPmluX2Vvcyk7Ci0KLSAgICAgIGlmIChzcGxpdG11eC0+bWF4X2luX3J1bm5pbmdfdGltZSAhPSBHX01BWElOVDY0ICYmCi0gICAgICAgICAgdG1wY3R4LT5pbl9ydW5uaW5nX3RpbWUgPCBzcGxpdG11eC0+bWF4X2luX3J1bm5pbmdfdGltZSAmJgotICAgICAgICAgICF0bXBjdHgtPmluX2VvcykgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsCi0gICAgICAgICAgICAiQ29udGV4dCAlcCAoc3JjIHBhZCAlIiBHU1RfUFRSX0ZPUk1BVCAiKSBub3QgcmVhZHkuIFdlJ2xsIHNsZWVwIiwKLSAgICAgICAgICAgIHRtcGN0eCwgdG1wY3R4LT5zcmNwYWQpOwotICAgICAgICByZWFkeSA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlYWR5KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgICAiQ29sbGVjdGVkIEdPUCBpcyBjb21wbGV0ZS4gUHJvY2Vzc2luZyAoY3R4ICVwKSIsIGN0eCk7Ci0gICAgICAvKiBBbGwgcGFkcyBoYXZlIGEgY29tcGxldGUgR09QLCByZWxlYXNlIGl0IGludG8gdGhlIG11bHRpcXVldWUgKi8KLSAgICAgIGhhbmRsZV9nYXRoZXJlZF9nb3AgKHNwbGl0bXV4KTsKLSAgICB9Ci0gIH0KLQotICAvKiBJZiB1cHN0cmVhbSByZWFjaGVkIEVPUyB3ZSBhcmUgbm90IGV4cGVjdGluZyBtb3JlIGRhdGEsIG5vIG5lZWQgdG8gd2FpdAotICAgKiBoZXJlLiAqLwotICBpZiAoY3R4LT5pbl9lb3MpCi0gICAgcmV0dXJuOwotCi0gIC8qIFNvbWUgcGFkIGlzIG5vdCB5ZXQgcmVhZHksIG9yIEdPUCBpcyBiZWluZyBwdXNoZWQKLSAgICogZWl0aGVyIHdheSwgc2xlZXAgYW5kIHdhaXQgdG8gZ2V0IHdva2VuICovCi0gIGN1cnJlbnRfbWF4X2luX3J1bm5pbmdfdGltZSA9IHNwbGl0bXV4LT5tYXhfaW5fcnVubmluZ190aW1lOwotICB3aGlsZSAoKHNwbGl0bXV4LT5zdGF0ZSA9PSBTUExJVE1VWF9TVEFURV9XQUlUSU5HX0dPUF9DT01QTEVURSB8fAotICAgICAgICAgIHNwbGl0bXV4LT5zdGF0ZSA9PSBTUExJVE1VWF9TVEFURV9TVEFSVF9ORVhUX0ZSQUdNRU5UKSAmJgotICAgICAgIWN0eC0+Zmx1c2hpbmcgJiYKLSAgICAgIChjdXJyZW50X21heF9pbl9ydW5uaW5nX3RpbWUgPT0gc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUpKSB7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsICJTbGVlcGluZyBmb3IgJXMgKGN0eCAlcCkiLAotICAgICAgICBzcGxpdG11eC0+c3RhdGUgPT0gU1BMSVRNVVhfU1RBVEVfV0FJVElOR19HT1BfQ09NUExFVEUgPwotICAgICAgICAiR09QIGNvbXBsZXRlIiA6ICJFT0YgZHJhaW5pbmciLCBjdHgpOwotICAgIEdTVF9TUExJVE1VWF9XQUlUIChzcGxpdG11eCk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsICJEb25lIHdhaXRpbmcgZm9yIGNvbXBsZXRlIEdPUCAoY3R4ICVwKSIsIGN0eCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX3F1ZXVlX2xlbmd0aCAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgsIE1xU3RyZWFtQ3R4ICogY3R4KQotewotICBHTGlzdCAqY3VyOwotICBndWludCBjdXJfbGVuID0gZ19xdWV1ZV9nZXRfbGVuZ3RoICgmY3R4LT5xdWV1ZWRfYnVmcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoY3R4LT5zaW5rcGFkLAotICAgICAgIkNoZWNraW5nIHF1ZXVlIGxlbmd0aCBsZW4gJXUgY3VyX21heCAldSBxdWV1ZWQgZ29wcyAldSIsCi0gICAgICBjdXJfbGVuLCBzcGxpdG11eC0+bXFfbWF4X2J1ZmZlcnMsIHNwbGl0bXV4LT5xdWV1ZWRfZ29wcyk7Ci0KLSAgaWYgKGN1cl9sZW4gPj0gc3BsaXRtdXgtPm1xX21heF9idWZmZXJzKSB7Ci0gICAgZ2Jvb2xlYW4gYWxsb3dfZ3JvdyA9IEZBTFNFOwotCi0gICAgLyogSWYgY29sbGVjdGluZyBhIEdPUCBhbmQgdGhpcyBwYWQgbWlnaHQgYmxvY2ssCi0gICAgICogYW5kIHRoZXJlIGlzbid0IGFscmVhZHkgYSBwZW5kaW5nIEdPUCBpbiB0aGUgcXVldWUKLSAgICAgKiB0aGVuIGdyb3cKLSAgICAgKi8KLSAgICBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFICYmCi0gICAgICAgIGN0eC0+aW5fcnVubmluZ190aW1lIDwgc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUgJiYKLSAgICAgICAgc3BsaXRtdXgtPnF1ZXVlZF9nb3BzIDw9IDEpIHsKLSAgICAgIGFsbG93X2dyb3cgPSBUUlVFOwotICAgIH0gZWxzZSBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX0NPTExFQ1RJTkdfR09QX1NUQVJUICYmCi0gICAgICAgIGN0eC0+aXNfcmVmZXJlbmNlICYmIHNwbGl0bXV4LT5xdWV1ZWRfZ29wcyA8PSAxKSB7Ci0gICAgICBhbGxvd19ncm93ID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIWFsbG93X2dyb3cpIHsKLSAgICAgIGZvciAoY3VyID0gZ19saXN0X2ZpcnN0IChzcGxpdG11eC0+Y29udGV4dHMpOwotICAgICAgICAgIGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgICAgICBNcVN0cmVhbUN0eCAqdG1wY3R4ID0gKE1xU3RyZWFtQ3R4ICopIChjdXItPmRhdGEpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0bXBjdHgtPnNpbmtwYWQsCi0gICAgICAgICAgICAiIGxlbiAldSBvdXRfYmxvY2tlZCAlZCIsCi0gICAgICAgICAgICBnX3F1ZXVlX2dldF9sZW5ndGggKCZ0bXBjdHgtPnF1ZXVlZF9idWZzKSwgdG1wY3R4LT5vdXRfYmxvY2tlZCk7Ci0gICAgICAgIC8qIElmIGFub3RoZXIgc3RyZWFtIGlzIHN0YXJ2aW5nLCBncm93ICovCi0gICAgICAgIGlmICh0bXBjdHggIT0gY3R4ICYmIGdfcXVldWVfZ2V0X2xlbmd0aCAoJnRtcGN0eC0+cXVldWVkX2J1ZnMpIDwgMSkgewotICAgICAgICAgIGFsbG93X2dyb3cgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFsbG93X2dyb3cpIHsKLSAgICAgIHNwbGl0bXV4LT5tcV9tYXhfYnVmZmVycyA9IGN1cl9sZW4gKyAxOwotCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHNwbGl0bXV4LAotICAgICAgICAgICJNdWx0aXF1ZXVlIG92ZXJydW4gLSBlbmxhcmdpbmcgdG8gJXUgYnVmZmVycyBjdHggJXAiLAotICAgICAgICAgIHNwbGl0bXV4LT5tcV9tYXhfYnVmZmVycywgY3R4KTsKLQotICAgICAgZ19vYmplY3Rfc2V0IChzcGxpdG11eC0+bXEsICJtYXgtc2l6ZS1idWZmZXJzIiwKLSAgICAgICAgICBzcGxpdG11eC0+bXFfbWF4X2J1ZmZlcnMsIE5VTEwpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWhhbmRsZV9tcV9pbnB1dCAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBNcVN0cmVhbUN0eCAqIGN0eCkKLXsKLSAgR3N0U3BsaXRNdXhTaW5rICpzcGxpdG11eCA9IGN0eC0+c3BsaXRtdXg7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBNcVN0cmVhbUJ1ZiAqYnVmX2luZm8gPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgdHM7Ci0gIGdib29sZWFuIGxvb3BfYWdhaW47Ci0gIGdib29sZWFuIGtleWZyYW1lID0gRkFMU0U7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkZpcmVkIHByb2JlIHR5cGUgMHgleCIsIGluZm8tPnR5cGUpOwotCi0gIC8qIEZJWE1FOiBIYW5kbGUgYnVmZmVyIGxpc3RzLCB1bnRpbCB0aGVuIG1ha2UgaXQgY2xlYXIgdGhleSB3b24ndCB3b3JrICovCi0gIGlmIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNUKSB7Ci0gICAgZ193YXJuaW5nICgiQnVmZmVyIGxpc3QgaGFuZGxpbmcgbm90IGltcGxlbWVudGVkIik7Ci0gICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfRFJPUDsKLSAgfQotICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNKSB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50ID0gZ3N0X3BhZF9wcm9iZV9pbmZvX2dldF9ldmVudCAoaW5mbyk7Ci0gICAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJmN0eC0+aW5fc2VnbWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJmN0eC0+aW5fc2VnbWVudCwgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICAgICAgICBjdHgtPmluX2VvcyA9IEZBTFNFOwotICAgICAgICBjdHgtPmluX2J5dGVzID0gMDsKLSAgICAgICAgY3R4LT5pbl9ydW5uaW5nX3RpbWUgPSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORTsKLSAgICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgY3R4LT5pbl9lb3MgPSBUUlVFOwotCi0gICAgICAgIGlmIChzcGxpdG11eC0+c3RhdGUgPT0gU1BMSVRNVVhfU1RBVEVfU1RPUFBFRCkKLSAgICAgICAgICBnb3RvIGJlYWNoOwotCi0gICAgICAgIGlmIChjdHgtPmlzX3JlZmVyZW5jZSkgewotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoc3BsaXRtdXgsICJHb3QgUmVmZXJlbmNlIEVPUy4gRmluaXNoaW5nIHVwIik7Ci0gICAgICAgICAgLyogQWN0IGFzIGlmIHRoaXMgaXMgYSBuZXcga2V5ZnJhbWUgd2l0aCBpbmZpbml0ZSB0aW1lc3RhbXAgKi8KLSAgICAgICAgICBzcGxpdG11eC0+bWF4X2luX3J1bm5pbmdfdGltZSA9IEdfTUFYSU5UNjQ7Ci0gICAgICAgICAgc3BsaXRtdXgtPnN0YXRlID0gU1BMSVRNVVhfU1RBVEVfV0FJVElOR19HT1BfQ09NUExFVEU7Ci0gICAgICAgICAgLyogV2FrZSB1cCBvdGhlciBpbnB1dCBwYWRzIHRvIGNvbGxlY3QgdGhpcyBHT1AgKi8KLSAgICAgICAgICBHU1RfU1BMSVRNVVhfQlJPQURDQVNUIChzcGxpdG11eCk7Ci0gICAgICAgICAgY2hlY2tfY29tcGxldGVkX2dvcCAoc3BsaXRtdXgsIGN0eCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgLyogSWYgd2UgYXJlIHdhaXRpbmcgZm9yIGEgR09QIHRvIGJlIGNvbXBsZXRlZCAoaWUsIGZvciBhdXgKLSAgICAgICAgICAgKiBwYWRzIHRvIGNhdGNoIHVwKSwgdGhlbiB0aGlzIHBhZCBpcyBjb21wbGV0ZSwgc28gY2hlY2sKLSAgICAgICAgICAgKiBpZiB0aGUgd2hvbGUgR09QIGlzLgotICAgICAgICAgICAqLwotICAgICAgICAgIGNoZWNrX2NvbXBsZXRlZF9nb3AgKHNwbGl0bXV4LCBjdHgpOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9TUExJVE1VWF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfUEFTUzsKLSAgfQotCi0gIGJ1ZiA9IGdzdF9wYWRfcHJvYmVfaW5mb19nZXRfYnVmZmVyIChpbmZvKTsKLSAgYnVmX2luZm8gPSBtcV9zdHJlYW1fYnVmX25ldyAoKTsKLQotICBpZiAoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKGJ1ZikpCi0gICAgdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgZWxzZQotICAgIHRzID0gR1NUX0JVRkZFUl9EVFMgKGJ1Zik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkJ1ZmZlciBUUyBpcyAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRzKSk7Ci0KLSAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLQotICBpZiAoc3BsaXRtdXgtPnN0YXRlID09IFNQTElUTVVYX1NUQVRFX1NUT1BQRUQpCi0gICAgZ290byBiZWFjaDsKLQotICAvKiBJZiB0aGlzIGJ1ZmZlciBoYXMgYSB0aW1lc3RhbXAsIGFkdmFuY2UgdGhlIGlucHV0IHRpbWVzdGFtcCBvZiB0aGUKLSAgICogc3RyZWFtICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodHMpKSB7Ci0gICAgR3N0Q2xvY2tUaW1lRGlmZiBydW5uaW5nX3RpbWUgPQotICAgICAgICBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJmN0eC0+aW5fc2VnbWVudCwgdHMpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkJ1ZmZlciBydW5uaW5nIFRTIGlzICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9TVElNRV9BUkdTIChydW5uaW5nX3RpbWUpKTsKLQotICAgIGlmIChHU1RfQ0xPQ0tfU1RJTUVfSVNfVkFMSUQgKHJ1bm5pbmdfdGltZSkKLSAgICAgICAgJiYgcnVubmluZ190aW1lID4gY3R4LT5pbl9ydW5uaW5nX3RpbWUpCi0gICAgICBjdHgtPmluX3J1bm5pbmdfdGltZSA9IHJ1bm5pbmdfdGltZTsKLSAgfQotCi0gIC8qIFRyeSB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJ1bm5pbmcgdGltZSAqLwotICBpZiAoIUdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoY3R4LT5pbl9ydW5uaW5nX3RpbWUpKSB7Ci0gICAgY3R4LT5pbl9ydW5uaW5nX3RpbWUgPQotICAgICAgICBteV9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJmN0eC0+aW5fc2VnbWVudCwgY3R4LT5pbl9zZWdtZW50LnN0YXJ0KTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJpbiBydW5uaW5nIHRpbWUgbm93ICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICBHU1RfU1RJTUVfQVJHUyAoY3R4LT5pbl9ydW5uaW5nX3RpbWUpKTsKLQotICBidWZfaW5mby0+cnVuX3RzID0gY3R4LT5pbl9ydW5uaW5nX3RpbWU7Ci0gIGJ1Zl9pbmZvLT5idWZfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gIGJ1Zl9pbmZvLT5kdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0KLSAgLyogVXBkYXRlIHRvdGFsIGlucHV0IGJ5dGUgY291bnRlciBmb3Igb3ZlcmZsb3cgZGV0ZWN0ICovCi0gIGN0eC0+aW5fYnl0ZXMgKz0gYnVmX2luZm8tPmJ1Zl9zaXplOwotCi0gIC8qIGluaXRpYWxpemUgbXV4X3N0YXJ0X3RpbWUgKi8KLSAgaWYgKGN0eC0+aXNfcmVmZXJlbmNlICYmIHNwbGl0bXV4LT5tdXhfc3RhcnRfdGltZSA9PSBHU1RfQ0xPQ0tfU1RJTUVfTk9ORSkgewotICAgIHNwbGl0bXV4LT5tdXhfc3RhcnRfdGltZSA9IGJ1Zl9pbmZvLT5ydW5fdHM7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0bXV4LCAiTXV4IHN0YXJ0IHRpbWUgbm93ICUiIEdTVF9TVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9TVElNRV9BUkdTIChzcGxpdG11eC0+bXV4X3N0YXJ0X3RpbWUpKTsKLSAgICAvKiBBbHNvIHRha2UgdGhpcyBhcyB0aGUgZmlyc3Qgc3RhcnQgdGltZSB3aGVuIHN0YXJ0aW5nIHVwLAotICAgICAqIHNvIHRoYXQgd2Ugc3RhcnQgY291bnRpbmcgb3ZlcmZsb3cgZnJvbSB0aGUgZmlyc3QgZnJhbWUgKi8KLSAgICBpZiAoIUdTVF9DTE9DS19TVElNRV9JU19WQUxJRCAoc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUpKQotICAgICAgc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUgPSBzcGxpdG11eC0+bXV4X3N0YXJ0X3RpbWU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJCdWYgVFMgJSIgR1NUX1NUSU1FX0ZPUk1BVAotICAgICAgIiB0b3RhbCBpbl9ieXRlcyAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgR1NUX1NUSU1FX0FSR1MgKGJ1Zl9pbmZvLT5ydW5fdHMpLCBjdHgtPmluX2J5dGVzKTsKLQotICBsb29wX2FnYWluID0gVFJVRTsKLSAgZG8gewotICAgIGlmIChjdHgtPmZsdXNoaW5nKQotICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKHNwbGl0bXV4LT5zdGF0ZSkgewotICAgICAgY2FzZSBTUExJVE1VWF9TVEFURV9DT0xMRUNUSU5HX0dPUF9TVEFSVDoKLSAgICAgICAgaWYgKGN0eC0+aXNfcmVmZXJlbmNlKSB7Ci0gICAgICAgICAgLyogSWYgYSBrZXlmcmFtZSwgd2UgaGF2ZSBhIGNvbXBsZXRlIEdPUCAqLwotICAgICAgICAgIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSB8fAotICAgICAgICAgICAgICAhR1NUX0NMT0NLX1NUSU1FX0lTX1ZBTElEIChjdHgtPmluX3J1bm5pbmdfdGltZSkgfHwKLSAgICAgICAgICAgICAgc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUgPj0gY3R4LT5pbl9ydW5uaW5nX3RpbWUpIHsKLSAgICAgICAgICAgIC8qIFBhc3MgdGhpcyBidWZmZXIgdGhyb3VnaCAqLwotICAgICAgICAgICAgbG9vcF9hZ2FpbiA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAocGFkLAotICAgICAgICAgICAgICAiSGF2ZSBrZXlmcmFtZSB3aXRoIHJ1bm5pbmcgdGltZSAlIiBHU1RfU1RJTUVfRk9STUFULAotICAgICAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAoY3R4LT5pbl9ydW5uaW5nX3RpbWUpKTsKLSAgICAgICAgICBrZXlmcmFtZSA9IFRSVUU7Ci0gICAgICAgICAgc3BsaXRtdXgtPnN0YXRlID0gU1BMSVRNVVhfU1RBVEVfV0FJVElOR19HT1BfQ09NUExFVEU7Ci0gICAgICAgICAgc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUgPSBjdHgtPmluX3J1bm5pbmdfdGltZTsKLSAgICAgICAgICAvKiBXYWtlIHVwIG90aGVyIGlucHV0IHBhZHMgdG8gY29sbGVjdCB0aGlzIEdPUCAqLwotICAgICAgICAgIEdTVF9TUExJVE1VWF9CUk9BRENBU1QgKHNwbGl0bXV4KTsKLSAgICAgICAgICBjaGVja19jb21wbGV0ZWRfZ29wIChzcGxpdG11eCwgY3R4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBXZSdyZSBzdGlsbCB3YWl0aW5nIGZvciBhIGtleWZyYW1lIG9uIHRoZSByZWZlcmVuY2UgcGFkLCBzbGVlcCAqLwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsICJTbGVlcGluZyBmb3IgR09QIHN0YXJ0Iik7Ci0gICAgICAgICAgR1NUX1NQTElUTVVYX1dBSVQgKHNwbGl0bXV4KTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiRG9uZSBzbGVlcGluZyBmb3IgR09QIHN0YXJ0IHN0YXRlIG5vdyAlZCIsCi0gICAgICAgICAgICAgIHNwbGl0bXV4LT5zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFOgotCi0gICAgICAgIC8qIElmIHdlIG92ZXJyYW4gdGhlIHRhcmdldCB0aW1lc3RhbXAsIGl0IG1pZ2h0IGJlIHRpbWUgdG8gcHJvY2VzcwotICAgICAgICAgKiB0aGUgR09QLCBvdGhlcndpc2UgYmFpbCBvdXQgZm9yIG1vcmUgZGF0YQotICAgICAgICAgKi8KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwKLSAgICAgICAgICAgICJDaGVja2luZyBUUyAlIiBHU1RfU1RJTUVfRk9STUFUICIgYWdhaW5zdCBtYXggJSIgR1NUX1NUSU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9TVElNRV9BUkdTIChjdHgtPmluX3J1bm5pbmdfdGltZSksCi0gICAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAoc3BsaXRtdXgtPm1heF9pbl9ydW5uaW5nX3RpbWUpKTsKLQotICAgICAgICBpZiAoY3R4LT5pbl9ydW5uaW5nX3RpbWUgPCBzcGxpdG11eC0+bWF4X2luX3J1bm5pbmdfdGltZSkgewotICAgICAgICAgIGxvb3BfYWdhaW4gPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYWQsCi0gICAgICAgICAgICAiQ29sbGVjdGVkIGxhc3QgcGFja2V0IG9mIEdPUC4gQ2hlY2tpbmcgb3RoZXIgcGFkcyIpOwotICAgICAgICBjaGVja19jb21wbGV0ZWRfZ29wIChzcGxpdG11eCwgY3R4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNQTElUTVVYX1NUQVRFX0VORElOR19GSUxFOnsKLSAgICAgICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgICAgIC8qIElmIHNvbWVzIHN0cmVhbXMgcmVjZWl2ZWQgbm8gYnVmZmVyIGR1cmluZyB0aGUgbGFzdCBHT1AgdGhhdCBvdmVycmFuLAotICAgICAgICAgKiBiZWNhdXNlIGl0cyBuZXh0IGJ1ZmZlciBoYXMgYSB0aW1lc3RhbXAgYmlnZ2VyIHRoYW4KLSAgICAgICAgICogY3R4LT5tYXhfaW5fcnVubmluZ190aW1lLCBpdHMgcXVldWUgaXMgZW1wdHkuIEluIHRoYXQgY2FzZSB0aGUgb25seQotICAgICAgICAgKiB3YXkgdG8gd2FrZXVwIHRoZSBvdXRwdXQgdGhyZWFkIGlzIGJ5IGluamVjdGluZyBhbiBldmVudCBpbiB0aGUKLSAgICAgICAgICogcXVldWUuIFRoaXMgdXN1YWxseSBoYXBwZW4gd2l0aCBzdWJ0aXRsZSBzdHJlYW1zLgotICAgICAgICAgKiBTZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc2MzcxMS4gKi8KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIlNlbmRpbmcgc3BsaXRtdXhzaW5rLXVuYmxvY2sgZXZlbnQiKTsKLSAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNIHwKLSAgICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX1NFUklBTElaRUQsCi0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoInNwbGl0bXV4c2luay11bmJsb2NrIiwgInRpbWVzdGFtcCIsCi0gICAgICAgICAgICAgICAgR19UWVBFX0lOVDY0LCBzcGxpdG11eC0+bWF4X2luX3J1bm5pbmdfdGltZSwgTlVMTCkpOwotCi0gICAgICAgIEdTVF9TUExJVE1VWF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgZ3N0X3BhZF9zZW5kX2V2ZW50IChjdHgtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgICAgLyogc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkLiBMb29wIGFnYWluIGlmIHNvICovCi0gICAgICAgIGlmIChzcGxpdG11eC0+c3RhdGUgIT0gU1BMSVRNVVhfU1RBVEVfRU5ESU5HX0ZJTEUpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICB9Ci0gICAgICBjYXNlIFNQTElUTVVYX1NUQVRFX1NUQVJUX05FWFRfRlJBR01FTlQ6Ci0gICAgICAgIC8qIEEgZnJhZ21lbnQgaXMgZW5kaW5nLCB3YWl0IHVudGlsIHRoYXQncyBkb25lIGJlZm9yZSBjb250aW51aW5nICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlNsZWVwaW5nIGZvciBmcmFnbWVudCByZXN0YXJ0Iik7Ci0gICAgICAgIEdTVF9TUExJVE1VWF9XQUlUIChzcGxpdG11eCk7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwKLSAgICAgICAgICAgICJEb25lIHNsZWVwaW5nIGZvciBmcmFnbWVudCByZXN0YXJ0IHN0YXRlIG5vdyAlZCIsIHNwbGl0bXV4LT5zdGF0ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgbG9vcF9hZ2FpbiA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0gd2hpbGUgKGxvb3BfYWdhaW4pOwotCi0gIGlmIChrZXlmcmFtZSkgewotICAgIHNwbGl0bXV4LT5xdWV1ZWRfZ29wcysrOwotICAgIGJ1Zl9pbmZvLT5rZXlmcmFtZSA9IFRSVUU7Ci0gIH0KLQotICAvKiBOb3cgYWRkIHRoaXMgYnVmZmVyIHRvIHRoZSBxdWV1ZSBqdXN0IGJlZm9yZSByZXR1cm5pbmcgKi8KLSAgZ19xdWV1ZV9wdXNoX2hlYWQgKCZjdHgtPnF1ZXVlZF9idWZzLCBidWZfaW5mbyk7Ci0KLSAgLyogQ2hlY2sgdGhlIGJ1ZmZlciB3aWxsIGZpdCBpbiB0aGUgbXEgKi8KLSAgY2hlY2tfcXVldWVfbGVuZ3RoIChzcGxpdG11eCwgY3R4KTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiUmV0dXJuaW5nIHRvIHF1ZXVlIGJ1ZmZlciAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiBydW4gdHMgJSIgR1NUX1NUSU1FX0ZPUk1BVCwgYnVmLCBHU1RfU1RJTUVfQVJHUyAoY3R4LT5pbl9ydW5uaW5nX3RpbWUpKTsKLQotICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX1BBU1M7Ci0KLWJlYWNoOgotICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gIGlmIChidWZfaW5mbykKLSAgICBtcV9zdHJlYW1fYnVmX2ZyZWUgKGJ1Zl9pbmZvKTsKLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfUEFTUzsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3Rfc3BsaXRtdXhfc2lua19yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFNwbGl0TXV4U2luayAqc3BsaXRtdXggPSAoR3N0U3BsaXRNdXhTaW5rICopIGVsZW1lbnQ7Ci0gIEdzdFBhZFRlbXBsYXRlICptdXhfdGVtcGxhdGUgPSBOVUxMOwotICBHc3RQYWQgKnJlcyA9IE5VTEw7Ci0gIEdzdFBhZCAqbXFfc2luaywgKm1xX3NyYzsKLSAgZ2NoYXIgKmduYW1lOwotICBnYm9vbGVhbiBpc192aWRlbyA9IEZBTFNFOwotICBNcVN0cmVhbUN0eCAqY3R4OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJ0ZW1wbDolcywgbmFtZTolcyIsIHRlbXBsLT5uYW1lX3RlbXBsYXRlLCBuYW1lKTsKLQotICBHU1RfU1BMSVRNVVhfTE9DSyAoc3BsaXRtdXgpOwotICBpZiAoIWNyZWF0ZV9lbGVtZW50cyAoc3BsaXRtdXgpKQotICAgIGdvdG8gZmFpbDsKLQotICBpZiAodGVtcGwtPm5hbWVfdGVtcGxhdGUpIHsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKHRlbXBsLT5uYW1lX3RlbXBsYXRlLCAidmlkZW8iKSkgewotICAgICAgaWYgKHNwbGl0bXV4LT5oYXZlX3ZpZGVvKQotICAgICAgICBnb3RvIGFscmVhZHlfaGF2ZV92aWRlbzsKLQotICAgICAgLyogRklYTUU6IExvb2sgZm9yIGEgcGFkIHRlbXBsYXRlIHdpdGggbWF0Y2hpbmcgY2FwcywgcmF0aGVyIHRoYW4gYnkgbmFtZSAqLwotICAgICAgbXV4X3RlbXBsYXRlID0KLSAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MKLSAgICAgICAgICAoc3BsaXRtdXgtPm11eGVyKSwgInZpZGVvXyV1Iik7Ci0KLSAgICAgIC8qIEZhbGxiYWNrIHRvIGZpbmQgc2luayBwYWQgdGVtcGxhdGVzIG5hbWVkICd2aWRlbycgKGZsdm11eCkgKi8KLSAgICAgIGlmICghbXV4X3RlbXBsYXRlKSB7Ci0gICAgICAgIG11eF90ZW1wbGF0ZSA9Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MKLSAgICAgICAgICAgIChzcGxpdG11eC0+bXV4ZXIpLCAidmlkZW8iKTsKLSAgICAgIH0KLSAgICAgIGlzX3ZpZGVvID0gVFJVRTsKLSAgICAgIG5hbWUgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICBtdXhfdGVtcGxhdGUgPQotICAgICAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0dFVF9DTEFTUwotICAgICAgICAgIChzcGxpdG11eC0+bXV4ZXIpLCB0ZW1wbC0+bmFtZV90ZW1wbGF0ZSk7Ci0KLSAgICAgIC8qIEZhbGxiYWNrIHRvIGZpbmQgc2luayBwYWQgdGVtcGxhdGVzIG5hbWVkICdhdWRpbycgKGZsdm11eCkgKi8KLSAgICAgIGlmICghbXV4X3RlbXBsYXRlKSB7Ci0gICAgICAgIG11eF90ZW1wbGF0ZSA9Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChHU1RfRUxFTUVOVF9HRVRfQ0xBU1MKLSAgICAgICAgICAgIChzcGxpdG11eC0+bXV4ZXIpLCAiYXVkaW8iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG11eF90ZW1wbGF0ZSA9PSBOVUxMKSB7Ci0gICAgICAvKiBGYWxsYmFjayB0byBmaW5kIHNpbmsgcGFkIHRlbXBsYXRlcyBuYW1lZCAnc2lua18lZCcgKG1wZWd0c211eCkgKi8KLSAgICAgIG11eF90ZW1wbGF0ZSA9Ci0gICAgICAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTCi0gICAgICAgICAgKHNwbGl0bXV4LT5tdXhlciksICJzaW5rXyVkIik7Ci0gICAgfQotICB9Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQgKHNwbGl0bXV4LT5tdXhlciwgbXV4X3RlbXBsYXRlLCBuYW1lLCBjYXBzKTsKLSAgaWYgKHJlcyA9PSBOVUxMKQotICAgIGdvdG8gZmFpbDsKLQotICBpZiAoaXNfdmlkZW8pCi0gICAgZ25hbWUgPSBnX3N0cmR1cCAoInZpZGVvIik7Ci0gIGVsc2UgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICBnbmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKHJlcyk7Ci0gIGVsc2UKLSAgICBnbmFtZSA9IGdfc3RyZHVwIChuYW1lKTsKLQotICBpZiAoIWdldF9wYWRzX2Zyb21fbXEgKHNwbGl0bXV4LCAmbXFfc2luaywgJm1xX3NyYykpIHsKLSAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChzcGxpdG11eC0+bXV4ZXIsIHJlcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAocmVzKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci0KLSAgaWYgKGdzdF9wYWRfbGluayAobXFfc3JjLCByZXMpICE9IEdTVF9QQURfTElOS19PSykgewotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNwbGl0bXV4LT5tdXhlciwgcmVzKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChyZXMpKTsKLSAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChzcGxpdG11eC0+bXEsIG1xX3NpbmspOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKG1xX3NpbmspKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChyZXMpKTsKLQotICBjdHggPSBtcV9zdHJlYW1fY3R4X25ldyAoc3BsaXRtdXgpOwotICBjdHgtPnNyY3BhZCA9IG1xX3NyYzsKLSAgY3R4LT5zaW5rcGFkID0gbXFfc2luazsKLQotICBtcV9zdHJlYW1fY3R4X3JlZiAoY3R4KTsKLSAgY3R4LT5zcmNfcGFkX2Jsb2NrX2lkID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChtcV9zcmMsIEdTVF9QQURfUFJPQkVfVFlQRV9EQVRBX0RPV05TVFJFQU0sCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgaGFuZGxlX21xX291dHB1dCwgY3R4LCAoR0Rlc3Ryb3lOb3RpZnkpCi0gICAgICBfcGFkX2Jsb2NrX2Rlc3Ryb3lfc3JjX25vdGlmeSk7Ci0gIGlmIChpc192aWRlbyAmJiBzcGxpdG11eC0+cmVmZXJlbmNlX2N0eCAhPSBOVUxMKSB7Ci0gICAgc3BsaXRtdXgtPnJlZmVyZW5jZV9jdHgtPmlzX3JlZmVyZW5jZSA9IEZBTFNFOwotICAgIHNwbGl0bXV4LT5yZWZlcmVuY2VfY3R4ID0gTlVMTDsKLSAgfQotICBpZiAoc3BsaXRtdXgtPnJlZmVyZW5jZV9jdHggPT0gTlVMTCkgewotICAgIHNwbGl0bXV4LT5yZWZlcmVuY2VfY3R4ID0gY3R4OwotICAgIGN0eC0+aXNfcmVmZXJlbmNlID0gVFJVRTsKLSAgfQotCi0gIHJlcyA9IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGduYW1lLCBtcV9zaW5rLCB0ZW1wbCk7Ci0gIGdfb2JqZWN0X3NldF9xZGF0YSAoKEdPYmplY3QgKikgKHJlcyksIFBBRF9DT05URVhULCBjdHgpOwotCi0gIG1xX3N0cmVhbV9jdHhfcmVmIChjdHgpOwotICBjdHgtPnNpbmtfcGFkX2Jsb2NrX2lkID0KLSAgICAgIGdzdF9wYWRfYWRkX3Byb2JlIChtcV9zaW5rLCBHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9ET1dOU1RSRUFNLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIGhhbmRsZV9tcV9pbnB1dCwgY3R4LCAoR0Rlc3Ryb3lOb3RpZnkpCi0gICAgICBfcGFkX2Jsb2NrX2Rlc3Ryb3lfc2lua19ub3RpZnkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNwbGl0bXV4LCAiUmVxdWVzdCBwYWQgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICIgaXMgbXEgcGFkICUiIEdTVF9QVFJfRk9STUFULCByZXMsIG1xX3NpbmspOwotCi0gIHNwbGl0bXV4LT5jb250ZXh0cyA9IGdfbGlzdF9wcmVwZW5kIChzcGxpdG11eC0+Y29udGV4dHMsIGN0eCk7Ci0KLSAgZ19mcmVlIChnbmFtZSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAobXFfc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG1xX3NyYyk7Ci0KLSAgaWYgKGlzX3ZpZGVvKQotICAgIHNwbGl0bXV4LT5oYXZlX3ZpZGVvID0gVFJVRTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHJlcywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIHJlcyk7Ci0KLSAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotCi0gIHJldHVybiByZXM7Ci1mYWlsOgotICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gIHJldHVybiBOVUxMOwotYWxyZWFkeV9oYXZlX3ZpZGVvOgotICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwgInZpZGVvIHNpbmsgcGFkIGFscmVhZHkgcmVxdWVzdGVkIik7Ci0gIEdTVF9TUExJVE1VWF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfc2lua19yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0U3BsaXRNdXhTaW5rICpzcGxpdG11eCA9IChHc3RTcGxpdE11eFNpbmsgKikgZWxlbWVudDsKLSAgR3N0UGFkICptcXNpbmssICptcXNyYyA9IE5VTEwsICptdXhwYWQgPSBOVUxMOwotICBNcVN0cmVhbUN0eCAqY3R4ID0KLSAgICAgIChNcVN0cmVhbUN0eCAqKSAoZ19vYmplY3RfZ2V0X3FkYXRhICgoR09iamVjdCAqKSAocGFkKSwgUEFEX0NPTlRFWFQpKTsKLQotICBHU1RfU1BMSVRNVVhfTE9DSyAoc3BsaXRtdXgpOwotCi0gIGlmIChzcGxpdG11eC0+bXV4ZXIgPT0gTlVMTCB8fCBzcGxpdG11eC0+bXEgPT0gTlVMTCkKLSAgICBnb3RvIGZhaWw7ICAgICAgICAgICAgICAgICAgLyogRWxlbWVudHMgZG9uJ3QgZXhpc3QgeWV0IC0gbm90aGluZyB0byByZWxlYXNlICovCi0KLSAgR1NUX0lORk9fT0JKRUNUIChwYWQsICJyZWxlYXNpbmcgcmVxdWVzdCBwYWQiKTsKLQotICBtcXNpbmsgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQUQgKHBhZCkpOwotICAvKiBUaGUgZ2hvc3RwYWQgdGFyZ2V0IG1pZ2h0IGhhdmUgZGlzYXBwZWFyZWQgZHVyaW5nIHBpcGVsaW5lIGRlc3RydWN0ICovCi0gIGlmIChtcXNpbmspCi0gICAgbXFzcmMgPSBtcV9zaW5rX3RvX3NyYyAoc3BsaXRtdXgtPm1xLCBtcXNpbmspOwotICBpZiAobXFzcmMpCi0gICAgbXV4cGFkID0gZ3N0X3BhZF9nZXRfcGVlciAobXFzcmMpOwotCi0gIC8qIFJlbW92ZSB0aGUgY29udGV4dCBmcm9tIG91ciBjb25zaWRlcmF0aW9uICovCi0gIHNwbGl0bXV4LT5jb250ZXh0cyA9IGdfbGlzdF9yZW1vdmUgKHNwbGl0bXV4LT5jb250ZXh0cywgY3R4KTsKLQotICBpZiAoY3R4LT5zaW5rX3BhZF9ibG9ja19pZCkKLSAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAoY3R4LT5zaW5rcGFkLCBjdHgtPnNpbmtfcGFkX2Jsb2NrX2lkKTsKLQotICBpZiAoY3R4LT5zcmNfcGFkX2Jsb2NrX2lkKQotICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlIChjdHgtPnNyY3BhZCwgY3R4LT5zcmNfcGFkX2Jsb2NrX2lkKTsKLQotICAvKiBDYW4gcmVsZWFzZSB0aGUgY29udGV4dCBub3cgKi8KLSAgbXFfc3RyZWFtX2N0eF91bnJlZiAoY3R4KTsKLSAgaWYgKGN0eCA9PSBzcGxpdG11eC0+cmVmZXJlbmNlX2N0eCkKLSAgICBzcGxpdG11eC0+cmVmZXJlbmNlX2N0eCA9IE5VTEw7Ci0KLSAgLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgbXEgaW5wdXQgKi8KLSAgaWYgKG1xc2luaykgewotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNwbGl0bXV4LT5tcSwgbXFzaW5rKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtcXNpbmspOwotICB9Ci0KLSAgLyogUmVsZWFzZSBhbmQgZnJlZSB0aGUgbXV4ZXIgaW5wdXQgKi8KLSAgaWYgKG11eHBhZCkgewotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNwbGl0bXV4LT5tdXhlciwgbXV4cGFkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtdXhwYWQpOwotICB9Ci0KLSAgaWYgKG1xc3JjKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG1xc3JjKTsKLQotICBpZiAoR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkgJiYKLSAgICAgIGdfc3RyX2VxdWFsIChHU1RfUEFEX1RFTVBMQVRFX05BTUVfVEVNUExBVEUgKEdTVF9QQURfUEFEX1RFTVBMQVRFIChwYWQpKSwKLSAgICAgICAgICAidmlkZW8iKSkKLSAgICBzcGxpdG11eC0+aGF2ZV92aWRlbyA9IEZBTFNFOwotCi0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0KLSAgLyogUmVzZXQgdGhlIGludGVybmFsIGVsZW1lbnRzIG9ubHkgYWZ0ZXIgYWxsIHJlcXVlc3QgcGFkcyBhcmUgcmVsZWFzZWQgKi8KLSAgaWYgKHNwbGl0bXV4LT5jb250ZXh0cyA9PSBOVUxMKQotICAgIGdzdF9zcGxpdG11eF9yZXNldCAoc3BsaXRtdXgpOwotCi1mYWlsOgotICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWNyZWF0ZV9lbGVtZW50IChHc3RTcGxpdE11eFNpbmsgKiBzcGxpdG11eCwKLSAgICBjb25zdCBnY2hhciAqIGZhY3RvcnksIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0RWxlbWVudCAqcmV0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChmYWN0b3J5LCBuYW1lKTsKLSAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgZ193YXJuaW5nICgiRmFpbGVkIHRvIGNyZWF0ZSAlcyAtIHNwbGl0bXV4c2luayB3aWxsIG5vdCB3b3JrIiwgbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoIWdzdF9iaW5fYWRkIChHU1RfQklOIChzcGxpdG11eCksIHJldCkpIHsKLSAgICBnX3dhcm5pbmcgKCJDb3VsZCBub3QgYWRkICVzIGVsZW1lbnQgLSBzcGxpdG11eHNpbmsgd2lsbCBub3Qgd29yayIsIG5hbWUpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJldCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNyZWF0ZV9lbGVtZW50cyAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIC8qIENyZWF0ZSBpbnRlcm5hbCBlbGVtZW50cyAqLwotICBpZiAoc3BsaXRtdXgtPm1xID09IE5VTEwpIHsKLSAgICBpZiAoKHNwbGl0bXV4LT5tcSA9Ci0gICAgICAgICAgICBjcmVhdGVfZWxlbWVudCAoc3BsaXRtdXgsICJtdWx0aXF1ZXVlIiwgIm11bHRpcXVldWUiKSkgPT0gTlVMTCkKLSAgICAgIGdvdG8gZmFpbDsKLQotICAgIHNwbGl0bXV4LT5tcV9tYXhfYnVmZmVycyA9IDU7Ci0gICAgLyogTm8gYnl0ZXMgb3IgdGltZSBsaW1pdCwgd2UgbGltaXQgYnVmZmVycyBtYW51YWxseSAqLwotICAgIGdfb2JqZWN0X3NldCAoc3BsaXRtdXgtPm1xLCAibWF4LXNpemUtYnl0ZXMiLCAwLCAibWF4LXNpemUtdGltZSIsCi0gICAgICAgIChndWludDY0KSAwLCAibWF4LXNpemUtYnVmZmVycyIsIHNwbGl0bXV4LT5tcV9tYXhfYnVmZmVycywgTlVMTCk7Ci0gIH0KLQotICBpZiAoc3BsaXRtdXgtPm11eGVyID09IE5VTEwpIHsKLSAgICBHc3RFbGVtZW50ICpwcm92aWRlZF9tdXhlciA9IE5VTEw7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICBpZiAoc3BsaXRtdXgtPnByb3ZpZGVkX211eGVyICE9IE5VTEwpCi0gICAgICBwcm92aWRlZF9tdXhlciA9IGdzdF9vYmplY3RfcmVmIChzcGxpdG11eC0+cHJvdmlkZWRfbXV4ZXIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0KLSAgICBpZiAocHJvdmlkZWRfbXV4ZXIgPT0gTlVMTCkgewotICAgICAgaWYgKChzcGxpdG11eC0+bXV4ZXIgPQotICAgICAgICAgICAgICBjcmVhdGVfZWxlbWVudCAoc3BsaXRtdXgsICJtcDRtdXgiLCAibXV4ZXIiKSkgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBFbnN1cmUgaXQncyBub3QgaW4gbG9ja2VkIHN0YXRlICh3ZSBtaWdodCBiZSByZXVzaW5nIGFuIG9sZCBlbGVtZW50KSAqLwotICAgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAocHJvdmlkZWRfbXV4ZXIsIEZBTFNFKTsKLSAgICAgIGlmICghZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHNwbGl0bXV4KSwgcHJvdmlkZWRfbXV4ZXIpKSB7Ci0gICAgICAgIGdfd2FybmluZyAoIkNvdWxkIG5vdCBhZGQgbXV4ZXIgZWxlbWVudCAtIHNwbGl0bXV4c2luayB3aWxsIG5vdCB3b3JrIik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHByb3ZpZGVkX211eGVyKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgICAgfQotCi0gICAgICBzcGxpdG11eC0+bXV4ZXIgPSBwcm92aWRlZF9tdXhlcjsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHByb3ZpZGVkX211eGVyKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLWZhaWw6Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotZmluZF9zaW5rIChHc3RFbGVtZW50ICogZSkKLXsKLSAgR3N0RWxlbWVudCAqcmVzID0gTlVMTDsKLSAgR3N0SXRlcmF0b3IgKml0ZXI7Ci0gIGdib29sZWFuIGRvbmUgPSBGQUxTRTsKLSAgR1ZhbHVlIGRhdGEgPSB7IDAsIH07Ci0KLSAgaWYgKCFHU1RfSVNfQklOIChlKSkKLSAgICByZXR1cm4gZTsKLQotICBpdGVyID0gZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzIChHU1RfQklOIChlKSk7Ci0gIHdoaWxlICghZG9uZSkgewotICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQgKGl0ZXIsICZkYXRhKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICB7Ci0gICAgICAgIEdzdEVsZW1lbnQgKmNoaWxkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmZGF0YSk7Ci0gICAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChHX09CSkVDVF9HRVRfQ0xBU1MgKGNoaWxkKSwKLSAgICAgICAgICAgICAgICAibG9jYXRpb24iKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgcmVzID0gY2hpbGQ7Ci0gICAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJmRhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyAoaXRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJmRhdGEpOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXRlcik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jcmVhdGVfc2luayAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIEdzdEVsZW1lbnQgKnByb3ZpZGVkX3NpbmsgPSBOVUxMOwotCi0gIGlmIChzcGxpdG11eC0+YWN0aXZlX3NpbmsgPT0gTlVMTCkgewotCi0gICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgaWYgKHNwbGl0bXV4LT5wcm92aWRlZF9zaW5rICE9IE5VTEwpCi0gICAgICBwcm92aWRlZF9zaW5rID0gZ3N0X29iamVjdF9yZWYgKHNwbGl0bXV4LT5wcm92aWRlZF9zaW5rKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3BsaXRtdXgpOwotCi0gICAgaWYgKHByb3ZpZGVkX3NpbmsgPT0gTlVMTCkgewotICAgICAgaWYgKChzcGxpdG11eC0+c2luayA9Ci0gICAgICAgICAgICAgIGNyZWF0ZV9lbGVtZW50IChzcGxpdG11eCwgREVGQVVMVF9TSU5LLCAic2luayIpKSA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICBzcGxpdG11eC0+YWN0aXZlX3NpbmsgPSBzcGxpdG11eC0+c2luazsKLSAgICB9IGVsc2UgewotICAgICAgLyogRW5zdXJlIGl0J3Mgbm90IGluIGxvY2tlZCBzdGF0ZSAod2UgbWlnaHQgYmUgcmV1c2luZyBhbiBvbGQgZWxlbWVudCkgKi8KLSAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHByb3ZpZGVkX3NpbmssIEZBTFNFKTsKLSAgICAgIGlmICghZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHNwbGl0bXV4KSwgcHJvdmlkZWRfc2luaykpIHsKLSAgICAgICAgZ193YXJuaW5nICgiQ291bGQgbm90IGFkZCBzaW5rIGVsZW1lbnRzIC0gc3BsaXRtdXhzaW5rIHdpbGwgbm90IHdvcmsiKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocHJvdmlkZWRfc2luayk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICAgIH0KLQotICAgICAgc3BsaXRtdXgtPmFjdGl2ZV9zaW5rID0gcHJvdmlkZWRfc2luazsKLQotICAgICAgLyogVGhlIGJpbiBob2xkcyBhIHJlZiBub3csIHdlIGNhbiBkcm9wIG91ciB0bXAgcmVmICovCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwcm92aWRlZF9zaW5rKTsKLQotICAgICAgLyogRmluZCB0aGUgc2luayBlbGVtZW50ICovCi0gICAgICBzcGxpdG11eC0+c2luayA9IGZpbmRfc2luayAoc3BsaXRtdXgtPmFjdGl2ZV9zaW5rKTsKLSAgICAgIGlmIChzcGxpdG11eC0+c2luayA9PSBOVUxMKSB7Ci0gICAgICAgIGdfd2FybmluZwotICAgICAgICAgICAgKCJDb3VsZCBub3QgbG9jYXRlIHNpbmsgZWxlbWVudCBpbiBwcm92aWRlZCBzaW5rIC0gc3BsaXRtdXhzaW5rIHdpbGwgbm90IHdvcmsiKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghZ3N0X2VsZW1lbnRfbGluayAoc3BsaXRtdXgtPm11eGVyLCBzcGxpdG11eC0+YWN0aXZlX3NpbmspKSB7Ci0gICAgICBnX3dhcm5pbmcgKCJGYWlsZWQgdG8gbGluayBtdXhlciBhbmQgc2luay0gc3BsaXRtdXhzaW5rIHdpbGwgbm90IHdvcmsiKTsKLSAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLWZhaWw6Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotI2lmZGVmIF9fR05VQ19fCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LW5vbmxpdGVyYWwiCi0jZW5kaWYKLXN0YXRpYyB2b2lkCi1zZXRfbmV4dF9maWxlbmFtZSAoR3N0U3BsaXRNdXhTaW5rICogc3BsaXRtdXgpCi17Ci0gIGdjaGFyICpmbmFtZSA9IE5VTEw7Ci0gIGdzdF9zcGxpdG11eF9zaW5rX2Vuc3VyZV9tYXhfZmlsZXMgKHNwbGl0bXV4KTsKLQotICBnX3NpZ25hbF9lbWl0IChzcGxpdG11eCwgc2lnbmFsc1tTSUdOQUxfRk9STUFUX0xPQ0FUSU9OXSwgMCwKLSAgICAgIHNwbGl0bXV4LT5mcmFnbWVudF9pZCwgJmZuYW1lKTsKLQotICBpZiAoIWZuYW1lKQotICAgIGZuYW1lID0gc3BsaXRtdXgtPmxvY2F0aW9uID8KLSAgICAgICAgZ19zdHJkdXBfcHJpbnRmIChzcGxpdG11eC0+bG9jYXRpb24sIHNwbGl0bXV4LT5mcmFnbWVudF9pZCkgOiBOVUxMOwotCi0gIGlmIChmbmFtZSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAoc3BsaXRtdXgsICJTZXR0aW5nIGZpbGUgdG8gJXMiLCBmbmFtZSk7Ci0gICAgZ19vYmplY3Rfc2V0IChzcGxpdG11eC0+c2luaywgImxvY2F0aW9uIiwgZm5hbWUsIE5VTEwpOwotICAgIGdfZnJlZSAoZm5hbWUpOwotCi0gICAgc3BsaXRtdXgtPmZyYWdtZW50X2lkKys7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3Rfc3BsaXRtdXhfc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFNwbGl0TXV4U2luayAqc3BsaXRtdXggPSAoR3N0U3BsaXRNdXhTaW5rICopIGVsZW1lbnQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6ewotICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGlmICghY3JlYXRlX2VsZW1lbnRzIChzcGxpdG11eCkgfHwgIWNyZWF0ZV9zaW5rIChzcGxpdG11eCkpIHsKLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgICBHU1RfU1BMSVRNVVhfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBzcGxpdG11eC0+ZnJhZ21lbnRfaWQgPSAwOwotICAgICAgc2V0X25leHRfZmlsZW5hbWUgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOnsKLSAgICAgIEdTVF9TUExJVE1VWF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICAvKiBTdGFydCBieSBjb2xsZWN0aW5nIG9uZSBpbnB1dCBvbiBlYWNoIHBhZCAqLwotICAgICAgc3BsaXRtdXgtPnN0YXRlID0gU1BMSVRNVVhfU1RBVEVfQ09MTEVDVElOR19HT1BfU1RBUlQ7Ci0gICAgICBzcGxpdG11eC0+bWF4X2luX3J1bm5pbmdfdGltZSA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICAgICAgc3BsaXRtdXgtPm11eGVkX291dF90aW1lID0gc3BsaXRtdXgtPm11eF9zdGFydF90aW1lID0KLSAgICAgICAgICBzcGxpdG11eC0+bGFzdF9mcmFtZV9kdXJhdGlvbiA9IEdTVF9DTE9DS19TVElNRV9OT05FOwotICAgICAgc3BsaXRtdXgtPm11eGVkX291dF9ieXRlcyA9IHNwbGl0bXV4LT5tdXhfc3RhcnRfYnl0ZXMgPSAwOwotICAgICAgc3BsaXRtdXgtPm9wZW5pbmdfZmlyc3RfZnJhZ21lbnQgPSBUUlVFOwotICAgICAgR1NUX1NQTElUTVVYX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBHU1RfU1BMSVRNVVhfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgc3BsaXRtdXgtPnN0YXRlID0gU1BMSVRNVVhfU1RBVEVfU1RPUFBFRDsKLSAgICAgIC8qIFdha2UgdXAgYW55IGJsb2NrZWQgdGhyZWFkcyAqLwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0bXV4LAotICAgICAgICAgICJTdGF0ZSBjaGFuZ2UgLT4gTlVMTCBvciBSRUFEWS4gV2FraW5nIHRocmVhZHMiKTsKLSAgICAgIEdTVF9TUExJVE1VWF9CUk9BRENBU1QgKHNwbGl0bXV4KTsKLSAgICAgIEdTVF9TUExJVE1VWF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICBnb3RvIGJlYWNoOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgR1NUX1NQTElUTVVYX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIHNwbGl0bXV4LT5mcmFnbWVudF9pZCA9IDA7Ci0gICAgICAvKiBSZXNldCBpbnRlcm5hbCBlbGVtZW50cyBvbmx5IGlmIG5vIHBhZCBjb250ZXh0cyBhcmUgdXNpbmcgdGhlbSAqLwotICAgICAgaWYgKHNwbGl0bXV4LT5jb250ZXh0cyA9PSBOVUxMKQotICAgICAgICBnc3Rfc3BsaXRtdXhfcmVzZXQgKHNwbGl0bXV4KTsKLSAgICAgIEdTVF9TUExJVE1VWF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi1iZWFjaDoKLQotICBpZiAodHJhbnNpdGlvbiA9PSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFkgJiYKLSAgICAgIHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICAvKiBDbGVhbnVwIGVsZW1lbnRzIG9uIGZhaWxlZCB0cmFuc2l0aW9uIG91dCBvZiBOVUxMICovCi0gICAgZ3N0X3NwbGl0bXV4X3Jlc2V0IChzcGxpdG11eCk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLXJlZ2lzdGVyX3NwbGl0bXV4c2luayAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoc3BsaXRtdXhfZGVidWcsICJzcGxpdG11eHNpbmsiLCAwLAotICAgICAgIlNwbGl0IEZpbGUgTXV4aW5nIFNpbmsiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInNwbGl0bXV4c2luayIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9TUExJVE1VWF9TSU5LKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zaW5rX2Vuc3VyZV9tYXhfZmlsZXMgKEdzdFNwbGl0TXV4U2luayAqIHNwbGl0bXV4KQotewotICBpZiAoc3BsaXRtdXgtPm1heF9maWxlcyAmJiBzcGxpdG11eC0+ZnJhZ21lbnRfaWQgPj0gc3BsaXRtdXgtPm1heF9maWxlcykgewotICAgIHNwbGl0bXV4LT5mcmFnbWVudF9pZCA9IDA7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmggYi9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTgzMmE1Li4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXRtdXhzaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyogR1N0cmVhbWVyIHNwbGl0IG11eGVyIGJpbgotICogQ29weXJpZ2h0IChDKSAyMDE0IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfU1BMSVRNVVhTSU5LX0hfXwotI2RlZmluZSBfX0dTVF9TUExJVE1VWFNJTktfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU1BMSVRNVVhfU0lOSyAgICAgICAgICAgICAgIChnc3Rfc3BsaXRtdXhfc2lua19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1BMSVRNVVhfU0lOSyhvYmopICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NQTElUTVVYX1NJTkssR3N0U3BsaXRNdXhTaW5rKSkKLSNkZWZpbmUgR1NUX1NQTElUTVVYX1NJTktfQ0xBU1Moa2xhc3MpICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NQTElUTVVYX1NJTkssR3N0U3BsaXRNdXhTaW5rQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU1BMSVRNVVhfU0lOSyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1NQTElUTVVYX1NJTkspKQotI2RlZmluZSBHU1RfSVNfU1BMSVRNVVhfU0lOS19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU1BMSVRNVVhfU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGxpdE11eFNpbmsgR3N0U3BsaXRNdXhTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNwbGl0TXV4U2lua0NsYXNzIEdzdFNwbGl0TXV4U2lua0NsYXNzOwotCi1HVHlwZSBnc3Rfc3BsaXRtdXhfc2lua19nZXRfdHlwZSh2b2lkKTsKLWdib29sZWFuIHJlZ2lzdGVyX3NwbGl0bXV4c2luayAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotdHlwZWRlZiBlbnVtIF9TcGxpdE11eFN0YXRlIHsKLSAgU1BMSVRNVVhfU1RBVEVfU1RPUFBFRCwKLSAgU1BMSVRNVVhfU1RBVEVfQ09MTEVDVElOR19HT1BfU1RBUlQsCi0gIFNQTElUTVVYX1NUQVRFX1dBSVRJTkdfR09QX0NPTVBMRVRFLAotICBTUExJVE1VWF9TVEFURV9FTkRJTkdfRklMRSwKLSAgU1BMSVRNVVhfU1RBVEVfU1RBUlRfTkVYVF9GUkFHTUVOVCwKLX0gU3BsaXRNdXhTdGF0ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX01xU3RyZWFtQnVmCi17Ci0gIGdib29sZWFuIGtleWZyYW1lOwotICBHc3RDbG9ja1RpbWVEaWZmIHJ1bl90czsKLSAgZ3VpbnQ2NCBidWZfc2l6ZTsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotfSBNcVN0cmVhbUJ1ZjsKLQotdHlwZWRlZiBzdHJ1Y3QgX01xU3RyZWFtQ3R4Ci17Ci0gIGdpbnQgcmVmY291bnQ7Ci0KLSAgR3N0U3BsaXRNdXhTaW5rICpzcGxpdG11eDsKLQotICBndWludCBzaW5rX3BhZF9ibG9ja19pZDsKLSAgZ3VpbnQgc3JjX3BhZF9ibG9ja19pZDsKLQotICBnYm9vbGVhbiBpc19yZWZlcmVuY2U7Ci0KLSAgZ2Jvb2xlYW4gZmx1c2hpbmc7Ci0gIGdib29sZWFuIGluX2VvczsKLSAgZ2Jvb2xlYW4gb3V0X2VvczsKLQotICBHc3RTZWdtZW50IGluX3NlZ21lbnQ7Ci0gIEdzdFNlZ21lbnQgb3V0X3NlZ21lbnQ7Ci0KLSAgR3N0Q2xvY2tUaW1lRGlmZiBpbl9ydW5uaW5nX3RpbWU7Ci0gIEdzdENsb2NrVGltZURpZmYgb3V0X3J1bm5pbmdfdGltZTsKLQotICBndWludDY0IGluX2J5dGVzOwotCi0gIEdRdWV1ZSBxdWV1ZWRfYnVmczsKLQotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIGdib29sZWFuIG91dF9ibG9ja2VkOwotfSBNcVN0cmVhbUN0eDsKLQotc3RydWN0IF9Hc3RTcGxpdE11eFNpbmsgewotICBHc3RCaW4gcGFyZW50OwotCi0gIEdNdXRleCBsb2NrOwotICBHQ29uZCBkYXRhX2NvbmQ7Ci0KLSAgU3BsaXRNdXhTdGF0ZSBzdGF0ZTsKLSAgZ2RvdWJsZSBtdXhfb3ZlcmhlYWQ7Ci0KLSAgR3N0Q2xvY2tUaW1lIHRocmVzaG9sZF90aW1lOwotICBndWludDY0IHRocmVzaG9sZF9ieXRlczsKLSAgZ3VpbnQgbWF4X2ZpbGVzOwotICBnYm9vbGVhbiBzZW5kX2tleWZyYW1lX3JlcXVlc3RzOwotCi0gIGd1aW50IG1xX21heF9idWZmZXJzOwotCi0gIEdzdEVsZW1lbnQgKm1xOwotICBHc3RFbGVtZW50ICptdXhlcjsKLSAgR3N0RWxlbWVudCAqc2luazsKLQotICBHc3RFbGVtZW50ICpwcm92aWRlZF9tdXhlcjsKLQotICBHc3RFbGVtZW50ICpwcm92aWRlZF9zaW5rOwotICBHc3RFbGVtZW50ICphY3RpdmVfc2luazsKLQotICBnY2hhciAqbG9jYXRpb247Ci0gIGd1aW50IGZyYWdtZW50X2lkOwotCi0gIEdMaXN0ICpjb250ZXh0czsKLQotICBNcVN0cmVhbUN0eCAqcmVmZXJlbmNlX2N0eDsKLSAgZ3VpbnQgcXVldWVkX2dvcHM7Ci0gIEdzdENsb2NrVGltZURpZmYgbWF4X2luX3J1bm5pbmdfdGltZTsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBtYXhfb3V0X3J1bm5pbmdfdGltZTsKLQotICBHc3RDbG9ja1RpbWVEaWZmIG11eGVkX291dF90aW1lOwotICBndWludDY0IG11eGVkX291dF9ieXRlczsKLSAgZ2Jvb2xlYW4gaGF2ZV9tdXhlZF9zb21ldGhpbmc7Ci0KLSAgR3N0Q2xvY2tUaW1lRGlmZiBtdXhfc3RhcnRfdGltZTsKLSAgZ3VpbnQ2NCBtdXhfc3RhcnRfYnl0ZXM7Ci0gIEdzdENsb2NrVGltZSBsYXN0X2ZyYW1lX2R1cmF0aW9uOwotCi0gIGdib29sZWFuIG9wZW5pbmdfZmlyc3RfZnJhZ21lbnQ7Ci0gIGdib29sZWFuIHN3aXRjaGluZ19mcmFnbWVudDsKLQotICBnYm9vbGVhbiBoYXZlX3ZpZGVvOwotfTsKLQotc3RydWN0IF9Hc3RTcGxpdE11eFNpbmtDbGFzcyB7Ci0gIEdzdEJpbkNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TUExJVE1VWFNJTktfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmMgYi9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOWQyOWYuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0OSArMCwwIEBACi0vKiBHU3RyZWFtZXIgU3BsaXQgRGVtdXhlciBiaW4gdGhhdCByZWNvbWJpbmVzIGZpbGVzIGNyZWF0ZWQgYnkKLSAqIHRoZSBzcGxpdG11eHNpbmsgZWxlbWVudC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zcGxpdG11eHNyYwotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBTcGxpdCBEZW11eGVyIGJpbiB0aGF0IHJlY29tYmluZXMgZmlsZXMgY3JlYXRlZCBieQotICogdGhlIHNwbGl0bXV4c2luayBlbGVtZW50LgotICoKLSAqIFRoaXMgZWxlbWVudCByZWFkcyBhIHNldCBvZiBpbnB1dCBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBzcGxpdG11eHNpbmsgZWxlbWVudAotICogY29udGFpbmluZyBjb250aWd1b3VzIGVsZW1lbnRhcnkgc3RyZWFtcyBzcGxpdCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMuCi0gKgotICogVGhpcyBlbGVtZW50IGlzIHNpbWlsYXIgdG8gc3BsaXRmaWxlc3JjLCBleGNlcHQgdGhhdCBpdCByZWNvbWJpbmVzIHRoZQotICogc3RyZWFtcyBpbiBlYWNoIGZpbGUgcGFydCBhdCB0aGUgZGVtdXhlZCBlbGVtZW50YXJ5IGxldmVsLCByYXRoZXIgdGhhbgotICogYXMgYSBzaW5nbGUgbGFyZ2VyIGJ5dGVzdHJlYW0uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBzcGxpdG11eHNyYyBsb2NhdGlvbj12aWRlbyoubW92ICEgZGVjb2RlYmluICEgeHZpbWFnZXNpbmsKLSAqIF18IERlbXV4IGVhY2ggZmlsZSBwYXJ0IGFuZCBvdXRwdXQgdGhlIHZpZGVvIHN0cmVhbSBhcyBvbmUgY29udGludW91cyBzdHJlYW0KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBwbGF5YmluIHVyaT0ic3BsaXRtdXg6Ly9wYXRoL3RvL2Zvby5tcDQuKiIKLSAqIF18IFBsYXkgYmFjayBhIHNldCBvZiBmaWxlcyBjcmVhdGVkIGJ5IHNwbGl0bXV4c2luawotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RzcGxpdG11eHNyYy5oIgotI2luY2x1ZGUgImdzdHNwbGl0dXRpbHMuaCIKLQotI2luY2x1ZGUgIi4uLy4uL2dzdC1saWJzL2dzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChzcGxpdG11eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzcGxpdG11eF9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MT0NBVElPTgotfTsKLQotZW51bQotewotICBTSUdOQUxfRk9STUFUX0xPQ0FUSU9OLAotICBTSUdOQUxfTEFTVAotfTsKLQotc3RhdGljIGd1aW50IHNpZ25hbHNbU0lHTkFMX0xBU1RdOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9fc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgidmlkZW8iLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYXVkaW9fc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgiYXVkaW9fJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3VidGl0bGVfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3VidGl0bGVfJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3NwbGl0bXV4X3NyY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIHZvaWQgZ3N0X3NwbGl0bXV4X3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BsaXRtdXhfc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9zcGxpdG11eF9zcmNfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BsaXRtdXhfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BsaXRtdXhfc3JjX3N0YXJ0IChHc3RTcGxpdE11eFNyYyAqIHNwbGl0bXV4KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BsaXRtdXhfc3JjX3N0b3AgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgpOwotc3RhdGljIHZvaWQgc3BsaXRtdXhfc3JjX3BhZF9jb25zdHJ1Y3RlZCAoR09iamVjdCAqIHBhZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gc3BsaXRtdXhfc3JjX3BhZF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gc3BsaXRtdXhfc3JjX3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgdm9pZCBzcGxpdG11eF9zcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLQotCi1zdGF0aWMgR3N0UGFkICpnc3Rfc3BsaXRtdXhfZmluZF9vdXRwdXRfcGFkIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiBwYXJ0LAotICAgIEdzdFBhZCAqIHBhZCwgR3N0U3BsaXRNdXhTcmMgKiBzcGxpdG11eCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BsaXRtdXhfcGFydF9wcmVwYXJlZCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICogcmVhZGVyLAotICAgIEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgpOwotc3RhdGljIGdib29sZWFuIGdzdF9zcGxpdG11eF9lbmRfb2ZfcGFydCAoR3N0U3BsaXRNdXhTcmMgKiBzcGxpdG11eCwKLSAgICBTcGxpdE11eFNyY1BhZCAqIHBhZCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwbGl0bXV4X2NoZWNrX25ld19jYXBzIChTcGxpdE11eFNyY1BhZCAqIHNwbGl0cGFkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi0jZGVmaW5lIF9kb19pbml0IFwKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIHNwbGl0bXV4X3NyY191cmlfaGFuZGxlcl9pbml0KTsKLSNkZWZpbmUgZ3N0X3NwbGl0bXV4X3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi0KLUdfREVGSU5FX1RZUEVfRVhURU5ERUQgKEdzdFNwbGl0TXV4U3JjLCBnc3Rfc3BsaXRtdXhfc3JjLCBHU1RfVFlQRV9CSU4sIDAsCi0gICAgX2RvX2luaXQpOwotCi1zdGF0aWMgR3N0VVJJVHlwZQotc3BsaXRtdXhfc3JjX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfU1JDOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLXNwbGl0bXV4X3NyY191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKLXsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpwcm90b2NvbHNbXSA9IHsgInNwbGl0bXV4IiwgTlVMTCB9OwotCi0gIHJldHVybiBwcm90b2NvbHM7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1zcGxpdG11eF9zcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RTcGxpdE11eFNyYyAqc3BsaXRtdXggPSBHU1RfU1BMSVRNVVhfU1JDIChoYW5kbGVyKTsKLSAgZ2NoYXIgKnJldCA9IE5VTEw7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gIGlmIChzcGxpdG11eC0+bG9jYXRpb24pCi0gICAgcmV0ID0gZ19zdHJkdXBfcHJpbnRmICgic3BsaXRtdXg6Ly8lcyIsIHNwbGl0bXV4LT5sb2NhdGlvbik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3BsaXRtdXhfc3JjX3VyaV9zZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmksCi0gICAgR0Vycm9yICoqIGVycikKLXsKLSAgR3N0U3BsaXRNdXhTcmMgKnNwbGl0bXV4ID0gR1NUX1NQTElUTVVYX1NSQyAoaGFuZGxlcik7Ci0gIGdjaGFyICpwcm90b2NvbCwgKmxvY2F0aW9uOwotCi0gIHByb3RvY29sID0gZ3N0X3VyaV9nZXRfcHJvdG9jb2wgKHVyaSk7Ci0gIGlmIChwcm90b2NvbCA9PSBOVUxMIHx8ICFnX3N0cl9lcXVhbCAocHJvdG9jb2wsICJzcGxpdG11eCIpKQotICAgIGdvdG8gd3JvbmdfdXJpOwotICBnX2ZyZWUgKHByb3RvY29sKTsKLQotICBsb2NhdGlvbiA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICh1cmkpOwotICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgZ19mcmVlIChzcGxpdG11eC0+bG9jYXRpb24pOwotICBzcGxpdG11eC0+bG9jYXRpb24gPSBsb2NhdGlvbjsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLQotICByZXR1cm4gVFJVRTsKLQotd3JvbmdfdXJpOgotICBnX2ZyZWUgKHByb3RvY29sKTsKLSAgR1NUX0VMRU1FTlRfRVJST1IgKHNwbGl0bXV4LCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgKCJFcnJvciBwYXJzaW5nIHVyaSAlcyIsIHVyaSkpOwotICBnX3NldF9lcnJvcl9saXRlcmFsIChlcnIsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICJDb3VsZCBub3QgcGFyc2Ugc3BsaXRtdXggVVJJIik7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLXNwbGl0bXV4X3NyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIChnX2lmYWNlKTsKLQotICBpZmFjZS0+Z2V0X3R5cGUgPSBzcGxpdG11eF9zcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IHNwbGl0bXV4X3NyY191cmlfZ2V0X3Byb3RvY29sczsKLSAgaWZhY2UtPnNldF91cmkgPSBzcGxpdG11eF9zcmNfdXJpX3NldF91cmk7Ci0gIGlmYWNlLT5nZXRfdXJpID0gc3BsaXRtdXhfc3JjX3VyaV9nZXRfdXJpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfc3JjX2NsYXNzX2luaXQgKEdzdFNwbGl0TXV4U3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc3BsaXRtdXhfc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NwbGl0bXV4X3NyY19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfc3BsaXRtdXhfc3JjX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3NwbGl0bXV4X3NyY19maW5hbGl6ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlNwbGl0IEZpbGUgRGVtdXhpbmcgQmluIiwgIkdlbmVyaWMvQmluL0RlbXV4ZXIiLAotICAgICAgIlNvdXJjZSB0aGF0IHJlYWRzIGEgc2V0IG9mIGZpbGVzIGNyZWF0ZWQgYnkgc3BsaXRtdXhzaW5rIiwKLSAgICAgICJKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZ2aWRlb19zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZhdWRpb19zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZzdWJ0aXRsZV9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NwbGl0bXV4X3NyY19jaGFuZ2Vfc3RhdGUpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9DQVRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibG9jYXRpb24iLCAiRmlsZSBJbnB1dCBQYXR0ZXJuIiwKLSAgICAgICAgICAiR2xvYiBwYXR0ZXJuIGZvciB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGVzIHRvIHJlYWQiLCBOVUxMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RTcGxpdE11eFNyYzo6Zm9ybWF0LWxvY2F0aW9uOgotICAgKiBAc3BsaXRtdXg6IHRoZSAjR3N0U3BsaXRNdXhTcmMKLSAgICoKLSAgICogUmV0dXJuczogQSBOVUxMLXRlcm1pbmF0ZWQgc29ydGVkIGFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUKLSAgICogICBmaWxlbmFtZXMgb2YgdGhlIGlucHV0IGZpbGVzLiBUaGUgYXJyYXkgd2lsbCBiZSBmcmVlZCBpbnRlcm5hbGx5Ci0gICAqICAgdXNpbmcgZ19zdHJmcmVldigpCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICovCi0gIHNpZ25hbHNbU0lHTkFMX0ZPUk1BVF9MT0NBVElPTl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiZm9ybWF0LWxvY2F0aW9uIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBHX1RZUEVfU1RSViwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfc3JjX2luaXQgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgpCi17Ci0gIGdfbXV0ZXhfaW5pdCAoJnNwbGl0bXV4LT5sb2NrKTsKLSAgZ19tdXRleF9pbml0ICgmc3BsaXRtdXgtPnBhZHNfbG9jayk7Ci0gIHNwbGl0bXV4LT50b3RhbF9kdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzcGxpdG11eC0+cGxheV9zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RTcGxpdE11eFNyYyAqc3BsaXRtdXggPSBHU1RfU1BMSVRNVVhfU1JDIChvYmplY3QpOwotICBHTGlzdCAqY3VyOwotCi0gIFNQTElUTVVYX1NSQ19QQURTX0xPQ0sgKHNwbGl0bXV4KTsKLQotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAoc3BsaXRtdXgtPnBhZHMpOwotICAgICAgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEIChjdXItPmRhdGEpOwotICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UIChzcGxpdG11eCksIHBhZCk7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKHNwbGl0bXV4LT5wYWRzKTsKLSAgc3BsaXRtdXgtPnBhZHMgPSBOVUxMOwotICBTUExJVE1VWF9TUkNfUEFEU19VTkxPQ0sgKHNwbGl0bXV4KTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zcmNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNwbGl0TXV4U3JjICpzcGxpdG11eCA9IEdTVF9TUExJVE1VWF9TUkMgKG9iamVjdCk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzcGxpdG11eC0+bG9jayk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzcGxpdG11eC0+cGFkc19sb2NrKTsKLSAgZ19mcmVlIChzcGxpdG11eC0+bG9jYXRpb24pOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwbGl0TXV4U3JjICpzcGxpdG11eCA9IEdTVF9TUExJVE1VWF9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOnsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgZ19mcmVlIChzcGxpdG11eC0+bG9jYXRpb24pOwotICAgICAgc3BsaXRtdXgtPmxvY2F0aW9uID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwbGl0TXV4U3JjICpzcGxpdG11eCA9IEdTVF9TUExJVE1VWF9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzcGxpdG11eCk7Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcGxpdG11eC0+bG9jYXRpb24pOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3Rfc3BsaXRtdXhfc3JjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0U3BsaXRNdXhTcmMgKnNwbGl0bXV4ID0gKEdzdFNwbGl0TXV4U3JjICopIGVsZW1lbnQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6ewotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6ewotICAgICAgaWYgKCFnc3Rfc3BsaXRtdXhfc3JjX3N0YXJ0IChzcGxpdG11eCkpCi0gICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCB3aWxsIHNodXQgZG93biAqLwotICAgICAgaWYgKCFnc3Rfc3BsaXRtdXhfc3JjX3N0b3AgKHNwbGl0bXV4KSkKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKgotZ3N0X3NwbGl0bXV4X3BhcnRfY3JlYXRlIChHc3RTcGxpdE11eFNyYyAqIHNwbGl0bXV4LCBjaGFyICpmaWxlbmFtZSkKLXsKLSAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyOwotCi0gIHIgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX1NQTElUTVVYX1BBUlRfUkVBREVSLCBOVUxMKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChyLCAicHJlcGFyZWQiLCAoR0NhbGxiYWNrKSBnc3Rfc3BsaXRtdXhfcGFydF9wcmVwYXJlZCwKLSAgICAgIHNwbGl0bXV4KTsKLQotICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2NhbGxiYWNrcyAociwgc3BsaXRtdXgsCi0gICAgICAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyUGFkQ2IpIGdzdF9zcGxpdG11eF9maW5kX291dHB1dF9wYWQpOwotICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2xvY2F0aW9uIChyLCBmaWxlbmFtZSk7Ci0KLSAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NwbGl0bXV4X2NoZWNrX25ld19jYXBzIChTcGxpdE11eFNyY1BhZCAqIHNwbGl0cGFkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RDYXBzICpjdXJjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzICgoR3N0UGFkICopIChzcGxpdHBhZCkpOwotICBHc3RDYXBzICpuZXdjYXBzOwotICBHc3RDYXBzICp0bXBjYXBzOwotICBHc3RDYXBzICp0bXBjdXJjYXBzOwotCi0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZuZXdjYXBzKTsKLQotICBHU1RfTE9HX09CSkVDVCAoc3BsaXRwYWQsICJDb21wYXJpbmcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiBhbmQgJSIgR1NUX1BUUl9GT1JNQVQsIGN1cmNhcHMsIG5ld2NhcHMpOwotCi0gIGlmIChjdXJjYXBzID09IE5VTEwpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogSWYgY2FwcyBhcmUgZXhhY3RseSBlcXVhbCBleGl0IGVhcmx5ICovCi0gIGlmIChnc3RfY2Fwc19pc19lcXVhbCAoY3VyY2FwcywgbmV3Y2FwcykpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoY3VyY2Fwcyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogTW9yZSBleHRlbnNpdmUgY2hlY2ssIGlnbm9yZSBjaGFuZ2VzIGluIGZyYW1lcmF0ZSwgYmVjYXVzZQotICAgKiBkZW11eGVycyBnZXQgdGhhdCB3cm9uZyAqLwotICB0bXBjYXBzID0gZ3N0X2NhcHNfY29weSAobmV3Y2Fwcyk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlICh0bXBjYXBzLCAwKTsKLSAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJmcmFtZXJhdGUiKTsKLQotICB0bXBjdXJjYXBzID0gZ3N0X2NhcHNfY29weSAoY3VyY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjdXJjYXBzKTsKLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHRtcGN1cmNhcHMsIDApOwotICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAocywgImZyYW1lcmF0ZSIpOwotCi0gIC8qIE5vdyBjaGVjayBpZiB0aGVzZSBmaWx0ZXJlZCBjYXBzIGFyZSBlcXVhbCAqLwotICBpZiAoZ3N0X2NhcHNfaXNfZXF1YWwgKHRtcGN1cmNhcHMsIHRtcGNhcHMpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzcGxpdHBhZCwgIklnbm9yaW5nIGZyYW1lcmF0ZS1vbmx5IGNhcHMgY2hhbmdlIik7Ci0gICAgcmVzID0gRkFMU0U7Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAodG1wY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmICh0bXBjdXJjYXBzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9oYW5kbGVfZXZlbnQgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgsCi0gICAgU3BsaXRNdXhTcmNQYWQgKiBzcGxpdHBhZCwgR3N0UGFkICogcGFydF9wYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDp7Ci0gICAgICBpZiAoc3BsaXRwYWQtPnNlbnRfc3RyZWFtX3N0YXJ0KQotICAgICAgICBnb3RvIGRyb3BfZXZlbnQ7Ci0gICAgICBzcGxpdHBhZC0+c2VudF9zdHJlYW1fc3RhcnQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzp7Ci0gICAgICBpZiAoZ3N0X3NwbGl0bXV4X2VuZF9vZl9wYXJ0IChzcGxpdG11eCwgc3BsaXRwYWQpKQotICAgICAgICAvLyBDb250aW51aW5nIHRvIG5leHQgcGFydCwgZHJvcCB0aGUgRU9TCi0gICAgICAgIGdvdG8gZHJvcF9ldmVudDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOnsKLSAgICAgIEdzdFNlZ21lbnQgc2VnOwotCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJnNlZyk7Ci0KLSAgICAgIHNwbGl0cGFkLT5zZWdtZW50LnBvc2l0aW9uID0gc2VnLnBvc2l0aW9uOwotCi0gICAgICBpZiAoc3BsaXRwYWQtPnNlbnRfc2VnbWVudCkKLSAgICAgICAgZ290byBkcm9wX2V2ZW50OyAgICAgICAgLyogV2UgYWxyZWFkeSBmb3J3YXJkZWQgYSBzZWdtZW50IGV2ZW50ICovCi0KLSAgICAgIC8qIENhbGN1bGF0ZSBvdXRwdXQgc2VnbWVudCAqLwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0cGFkLCAiUGFkIHNlZyAlIiBHU1RfU0VHTUVOVF9GT1JNQVQKLSAgICAgICAgICAiIGdvdCBzZWcgJSIgR1NUX1NFR01FTlRfRk9STUFUCi0gICAgICAgICAgIiBwbGF5IHNlZyAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCi0gICAgICAgICAgJnNwbGl0cGFkLT5zZWdtZW50LCAmc2VnLCAmc3BsaXRtdXgtPnBsYXlfc2VnbWVudCk7Ci0KLSAgICAgIC8qIElmIHBsYXlpbmcgZm9yd2FyZCwgdGFrZSB0aGUgc3RvcCB0aW1lIGZyb20gdGhlIG92ZXJhbGwKLSAgICAgICAqIHNlZyBvciBwbGF5X3NlZ21lbnQgKi8KLSAgICAgIGlmIChzcGxpdG11eC0+cGxheV9zZWdtZW50LnJhdGUgPiAwLjApIHsKLSAgICAgICAgaWYgKHNwbGl0bXV4LT5wbGF5X3NlZ21lbnQuc3RvcCAhPSAtMSkKLSAgICAgICAgICBzZWcuc3RvcCA9IHNwbGl0bXV4LT5wbGF5X3NlZ21lbnQuc3RvcDsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNlZy5zdG9wID0gc3BsaXRwYWQtPnNlZ21lbnQuc3RvcDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFJldmVyc2UgcGxheWJhY2sgZnJvbSBzdG9wIHRpbWUgdG8gc3RhcnQgdGltZSAqLwotICAgICAgICAvKiBTZWUgaWYgYW4gZW5kIHBvaW50IHdhcyByZXF1ZXN0ZWQgaW4gdGhlIHNlZWsgKi8KLSAgICAgICAgaWYgKHNwbGl0bXV4LT5wbGF5X3NlZ21lbnQuc3RhcnQgIT0gLTEpIHsKLSAgICAgICAgICBzZWcuc3RhcnQgPSBzcGxpdG11eC0+cGxheV9zZWdtZW50LnN0YXJ0OwotICAgICAgICAgIHNlZy50aW1lID0gc3BsaXRtdXgtPnBsYXlfc2VnbWVudC50aW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHNlZy5zdGFydCA9IHNwbGl0cGFkLT5zZWdtZW50LnN0YXJ0OwotICAgICAgICAgIHNlZy50aW1lID0gc3BsaXRwYWQtPnNlZ21lbnQudGltZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHNwbGl0cGFkLAotICAgICAgICAgICJGb3J3YXJkaW5nIHNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULCAmc2VnKTsKLQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZyk7Ci0gICAgICBzcGxpdHBhZC0+c2VudF9zZWdtZW50ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOnsKLSAgICAgIGlmICghZ3N0X3NwbGl0bXV4X2NoZWNrX25ld19jYXBzIChzcGxpdHBhZCwgZXZlbnQpKQotICAgICAgICBnb3RvIGRyb3BfZXZlbnQ7Ci0gICAgICBzcGxpdHBhZC0+c2VudF9jYXBzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKChHc3RQYWQgKikgKHNwbGl0cGFkKSwgZXZlbnQpOwotICByZXR1cm47Ci1kcm9wX2V2ZW50OgotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgcmV0dXJuOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NwbGl0bXV4X2hhbmRsZV9idWZmZXIgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgsCi0gICAgU3BsaXRNdXhTcmNQYWQgKiBzcGxpdHBhZCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBpZiAoc3BsaXRwYWQtPmNsZWFyX25leHRfZGlzY29udCkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzcGxpdHBhZCwgIkNsZWFyaW5nIGRpc2NvbnQgZmxhZyBvbiBidWZmZXIiKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgIHNwbGl0cGFkLT5jbGVhcl9uZXh0X2Rpc2NvbnQgPSBGQUxTRTsKLSAgfQotICBpZiAoc3BsaXRwYWQtPnNldF9uZXh0X2Rpc2NvbnQpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3BsaXRwYWQsICJTZXR0aW5nIGRpc2NvbnQgZmxhZyBvbiBidWZmZXIiKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBzcGxpdHBhZC0+c2V0X25leHRfZGlzY29udCA9IEZBTFNFOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChHU1RfUEFEX0NBU1QgKHNwbGl0cGFkKSwgYnVmKTsKLQotICBHU1RfTE9HX09CSkVDVCAoc3BsaXRwYWQsICJQYWQgcHVzaCByZXR1cm5lZCAlZCIsIHJldCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BsaXRtdXhfcGFkX2xvb3AgKEdzdFBhZCAqIHBhZCkKLXsKLSAgLyogR2V0IG9uZSBldmVudC9idWZmZXIgZnJvbSB0aGUgYXNzb2NpYXRlZCBwYXJ0IGFuZCBwdXNoICovCi0gIFNwbGl0TXV4U3JjUGFkICpzcGxpdHBhZCA9IChTcGxpdE11eFNyY1BhZCAqKSAocGFkKTsKLSAgR3N0U3BsaXRNdXhTcmMgKnNwbGl0bXV4ID0gKEdzdFNwbGl0TXV4U3JjICopIGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKTsKLSAgR3N0RGF0YVF1ZXVlSXRlbSAqaXRlbSA9IE5VTEw7Ci0gIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyID0gc3BsaXRwYWQtPnJlYWRlcjsKLSAgR3N0UGFkICpwYXJ0X3BhZDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcGxpdHBhZCk7Ci0gIGlmIChzcGxpdHBhZC0+cGFydF9wYWQgPT0gTlVMTCkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdHBhZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHBhcnRfcGFkID0gZ3N0X29iamVjdF9yZWYgKHNwbGl0cGFkLT5wYXJ0X3BhZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdHBhZCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNwbGl0cGFkLCAiUG9wcGluZyBkYXRhIHF1ZXVlIGl0ZW0gZnJvbSAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiBwYWQgJSIgR1NUX1BUUl9GT1JNQVQsIHJlYWRlciwgcGFydF9wYWQpOwotICByZXQgPSBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfcG9wIChyZWFkZXIsIHBhcnRfcGFkLCAmaXRlbSk7Ci0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfRVJST1IpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKHJldCA9PSBHU1RfRkxPV19GTFVTSElORyB8fCBpdGVtID09IE5VTEwpCi0gICAgZ290byBmbHVzaGluZzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdHBhZCwgIkdvdCBkYXRhIHF1ZXVlIGl0ZW0gJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBpdGVtLT5vYmplY3QpOwotCi0gIGlmIChHU1RfSVNfRVZFTlQgKGl0ZW0tPm9iamVjdCkpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQgPSAoR3N0RXZlbnQgKikgKGl0ZW0tPm9iamVjdCk7Ci0gICAgZ3N0X3NwbGl0bXV4X2hhbmRsZV9ldmVudCAoc3BsaXRtdXgsIHNwbGl0cGFkLCBwYXJ0X3BhZCwgZXZlbnQpOwotICB9IGVsc2UgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gKEdzdEJ1ZmZlciAqKSAoaXRlbS0+b2JqZWN0KTsKLSAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9zcGxpdG11eF9oYW5kbGVfYnVmZmVyIChzcGxpdG11eCwgc3BsaXRwYWQsIGJ1Zik7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSyAmJiByZXQgIT0gR1NUX0ZMT1dfRU9TKSkgewotICAgICAgLyogU3RvcCBpbW1lZGlhdGVseSBvbiBlcnJvciBvciBmbHVzaGluZyAqLwotICAgICAgR1NUX0lORk9fT0JKRUNUIChzcGxpdHBhZCwgIlN0b3BwaW5nIGR1ZSB0byBwYWRfcHVzaCgpIHJlc3VsdCAlZCIsIHJldCk7Ci0gICAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHBhZCk7Ci0gICAgICBpZiAocmV0IDwgR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0ZMT1dfRVJST1IgKHNwbGl0bXV4LCByZXQpOwotICAgICAgfQotICAgIH0KLSAgfQotICBnX3NsaWNlX2ZyZWUgKEdzdERhdGFRdWV1ZUl0ZW0sIGl0ZW0pOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBhcnRfcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3BsaXRtdXgpOwotICByZXR1cm47Ci0KLWVycm9yOgotICAvKiBGYWxsIHRocm91Z2ggKi8KLSAgR1NUX0VMRU1FTlRfRVJST1IgKHNwbGl0bXV4LCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoTlVMTCksCi0gICAgICAoIkVycm9yIHJlYWRpbmcgcGFydCBmaWxlICVzIiwgR1NUX1NUUl9OVUxMIChyZWFkZXItPnBhdGgpKSk7Ci1mbHVzaGluZzoKLSAgZ3N0X3BhZF9wYXVzZV90YXNrIChwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYXJ0X3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNwbGl0bXV4KTsKLSAgcmV0dXJuOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdG11eF9zcmNfYWN0aXZhdGVfcGFydCAoR3N0U3BsaXRNdXhTcmMgKiBzcGxpdG11eCwgZ3VpbnQgcGFydCkKLXsKLSAgR0xpc3QgKmN1cjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwgIkFjdGl2YXRpbmcgcGFydCAlZCIsIHBhcnQpOwotCi0gIHNwbGl0bXV4LT5jdXJfcGFydCA9IHBhcnQ7Ci0gIGlmICghZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2FjdGl2YXRlIChzcGxpdG11eC0+cGFydHNbcGFydF0sCi0gICAgICAgICAgJnNwbGl0bXV4LT5wbGF5X3NlZ21lbnQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBTUExJVE1VWF9TUkNfUEFEU19MT0NLIChzcGxpdG11eCk7Ci0gIGZvciAoY3VyID0gZ19saXN0X2ZpcnN0IChzcGxpdG11eC0+cGFkcyk7Ci0gICAgICBjdXIgIT0gTlVMTDsgY3VyID0gZ19saXN0X25leHQgKGN1cikpIHsKLSAgICBTcGxpdE11eFNyY1BhZCAqc3BsaXRwYWQgPSAoU3BsaXRNdXhTcmNQYWQgKikgKGN1ci0+ZGF0YSk7Ci0gICAgc3BsaXRwYWQtPmN1cl9wYXJ0ID0gcGFydDsKLSAgICBzcGxpdHBhZC0+cmVhZGVyID0gc3BsaXRtdXgtPnBhcnRzW3NwbGl0cGFkLT5jdXJfcGFydF07Ci0gICAgaWYgKHNwbGl0cGFkLT5wYXJ0X3BhZCkKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNwbGl0cGFkLT5wYXJ0X3BhZCk7Ci0gICAgc3BsaXRwYWQtPnBhcnRfcGFkID0KLSAgICAgICAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2xvb2t1cF9wYWQgKHNwbGl0cGFkLT5yZWFkZXIsCi0gICAgICAgIChHc3RQYWQgKikgKHNwbGl0cGFkKSk7Ci0KLSAgICAvKiBNYWtlIHN1cmUgd2Ugc3RhcnQgd2l0aCBhIERJU0NPTlQgKi8KLSAgICBzcGxpdHBhZC0+c2V0X25leHRfZGlzY29udCA9IFRSVUU7Ci0gICAgc3BsaXRwYWQtPmNsZWFyX25leHRfZGlzY29udCA9IEZBTFNFOwotCi0gICAgZ3N0X3BhZF9zdGFydF90YXNrIChHU1RfUEFEIChzcGxpdHBhZCksCi0gICAgICAgIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9zcGxpdG11eF9wYWRfbG9vcCwgc3BsaXRwYWQsIE5VTEwpOwotICB9Ci0gIFNQTElUTVVYX1NSQ19QQURTX1VOTE9DSyAoc3BsaXRtdXgpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdG11eF9zcmNfc3RhcnQgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gIGdjaGFyICpiYXNlbmFtZSA9IE5VTEw7Ci0gIGdjaGFyICpkaXJuYW1lID0gTlVMTDsKLSAgZ2NoYXIgKipmaWxlczsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfb2Zmc2V0ID0gMDsKLSAgZ3VpbnQgaTsKLSAgR3N0Q2xvY2tUaW1lIHRvdGFsX2R1cmF0aW9uID0gMDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwgIlN0YXJ0aW5nIik7Ci0KLSAgZ19zaWduYWxfZW1pdCAoc3BsaXRtdXgsIHNpZ25hbHNbU0lHTkFMX0ZPUk1BVF9MT0NBVElPTl0sIDAsICZmaWxlcyk7Ci0KLSAgaWYgKGZpbGVzID09IE5VTEwgfHwgKmZpbGVzID09IE5VTEwpIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICBpZiAoc3BsaXRtdXgtPmxvY2F0aW9uICE9IE5VTEwgJiYgc3BsaXRtdXgtPmxvY2F0aW9uWzBdICE9ICdcMCcpIHsKLSAgICAgIGJhc2VuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZSAoc3BsaXRtdXgtPmxvY2F0aW9uKTsKLSAgICAgIGRpcm5hbWUgPSBnX3BhdGhfZ2V0X2Rpcm5hbWUgKHNwbGl0bXV4LT5sb2NhdGlvbik7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0KLSAgICBnX3N0cmZyZWV2IChmaWxlcyk7Ci0gICAgZmlsZXMgPSBnc3Rfc3BsaXRfdXRpbF9maW5kX2ZpbGVzIChkaXJuYW1lLCBiYXNlbmFtZSwgJmVycik7Ci0KLSAgICBpZiAoZmlsZXMgPT0gTlVMTCB8fCAqZmlsZXMgPT0gTlVMTCkKLSAgICAgIGdvdG8gbm9fZmlsZXM7Ci0gIH0KLQotICBTUExJVE1VWF9TUkNfTE9DSyAoc3BsaXRtdXgpOwotICBzcGxpdG11eC0+cGFkc19jb21wbGV0ZSA9IEZBTFNFOwotICBzcGxpdG11eC0+cnVubmluZyA9IFRSVUU7Ci0gIFNQTElUTVVYX1NSQ19VTkxPQ0sgKHNwbGl0bXV4KTsKLQotICBzcGxpdG11eC0+bnVtX3BhcnRzID0gZ19zdHJ2X2xlbmd0aCAoZmlsZXMpOwotCi0gIHNwbGl0bXV4LT5wYXJ0cyA9IGdfbmV3MCAoR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICosIHNwbGl0bXV4LT5udW1fcGFydHMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBzcGxpdG11eC0+bnVtX3BhcnRzOyBpKyspIHsKLSAgICBzcGxpdG11eC0+cGFydHNbaV0gPSBnc3Rfc3BsaXRtdXhfcGFydF9jcmVhdGUgKHNwbGl0bXV4LCBmaWxlc1tpXSk7Ci0gICAgaWYgKHNwbGl0bXV4LT5wYXJ0c1tpXSA9PSBOVUxMKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBGaWd1cmUgb3V0IHRoZSBuZXh0IG9mZnNldCAtIHRoZSBzbWFsbGVzdCBvbmUgKi8KLSAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X3N0YXJ0X29mZnNldCAoc3BsaXRtdXgtPnBhcnRzW2ldLCBuZXh0X29mZnNldCk7Ci0gICAgaWYgKCFnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfcHJlcGFyZSAoc3BsaXRtdXgtPnBhcnRzW2ldKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgICAiRmFpbGVkIHRvIHByZXBhcmUgZmlsZSBwYXJ0ICVzLiBDYW5ub3QgcGxheSBwYXN0IHRoZXJlLiIsIGZpbGVzW2ldKTsKLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNwbGl0bXV4LCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAgICgiRmFpbGVkIHRvIHByZXBhcmUgZmlsZSBwYXJ0ICVzLiBDYW5ub3QgcGxheSBwYXN0IHRoZXJlLiIsCi0gICAgICAgICAgICAgIGZpbGVzW2ldKSk7Ci0gICAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfdW5wcmVwYXJlIChzcGxpdG11eC0+cGFydHNbaV0pOwotICAgICAgZ19vYmplY3RfdW5yZWYgKHNwbGl0bXV4LT5wYXJ0c1tpXSk7Ci0gICAgICBzcGxpdG11eC0+cGFydHNbaV0gPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLyogRXh0ZW5kIG91ciB0b3RhbCBkdXJhdGlvbiB0byBjb3ZlciB0aGlzIHBhcnQgKi8KLSAgICB0b3RhbF9kdXJhdGlvbiA9Ci0gICAgICAgIG5leHRfb2Zmc2V0ICsKLSAgICAgICAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2dldF9kdXJhdGlvbiAoc3BsaXRtdXgtPnBhcnRzW2ldKTsKLSAgICBzcGxpdG11eC0+cGxheV9zZWdtZW50LmR1cmF0aW9uID0gdG90YWxfZHVyYXRpb247Ci0KLSAgICBuZXh0X29mZnNldCA9IGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9nZXRfZW5kX29mZnNldCAoc3BsaXRtdXgtPnBhcnRzW2ldKTsKLSAgfQotCi0gIC8qIFVwZGF0ZSB0b3RhbF9kdXJhdGlvbiBzdGF0ZSB2YXJpYWJsZSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgc3BsaXRtdXgtPnRvdGFsX2R1cmF0aW9uID0gdG90YWxfZHVyYXRpb247Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcGxpdG11eCk7Ci0KLSAgLyogU3RvcmUgaG93IG1hbnkgcGFydHMgd2UgYWN0dWFsbHkgY3JlYXRlZCAqLwotICBzcGxpdG11eC0+bnVtX3BhcnRzID0gaTsKLQotICBpZiAoc3BsaXRtdXgtPm51bV9wYXJ0cyA8IDEpCi0gICAgZ290byBmYWlsZWRfcGFydDsKLQotICAvKiBBbGwgZG9uZSBwcmVwYXJpbmcsIGFjdGl2YXRlIHRoZSBmaXJzdCBwYXJ0ICovCi0gIEdTVF9JTkZPX09CSkVDVCAoc3BsaXRtdXgsCi0gICAgICAiQWxsIHBhcnRzIHByZXBhcmVkLiBUb3RhbCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIgQWN0aXZhdGluZyBmaXJzdCBwYXJ0IiwgR1NUX1RJTUVfQVJHUyAodG90YWxfZHVyYXRpb24pKTsKLSAgcmV0ID0gZ3N0X3NwbGl0bXV4X3NyY19hY3RpdmF0ZV9wYXJ0IChzcGxpdG11eCwgMCk7Ci0gIGlmIChyZXQgPT0gRkFMU0UpCi0gICAgZ290byBmYWlsZWRfZmlyc3RfcGFydDsKLWRvbmU6Ci0gIGlmIChlcnIgIT0gTlVMTCkKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gIGdfc3RyZnJlZXYgKGZpbGVzKTsKLSAgZ19mcmVlIChiYXNlbmFtZSk7Ci0gIGdfZnJlZSAoZGlybmFtZSk7Ci0KLSAgcmV0dXJuIHJldDsKLQotLyogRVJST1JTICovCi1ub19maWxlczoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcGxpdG11eCwgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKCIlcyIsIGVyci0+bWVzc2FnZSksCi0gICAgICAgICgiRmFpbGVkIHRvIGZpbmQgZmlsZXMgaW4gJyVzJyBmb3IgcGF0dGVybiAnJXMnIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoZGlybmFtZSksIEdTVF9TVFJfTlVMTCAoYmFzZW5hbWUpKSk7Ci0gICAgZ290byBkb25lOwotICB9Ci1mYWlsZWRfcGFydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcGxpdG11eCwgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBvcGVuIGFueSBmaWxlcyBmb3IgcmVhZGluZyIpKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWZhaWxlZF9maXJzdF9wYXJ0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNwbGl0bXV4LCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIGFjdGl2YXRlIGZpcnN0IHBhcnQgZm9yIHBsYXliYWNrIikpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGxpdG11eF9zcmNfc3RvcCAoR3N0U3BsaXRNdXhTcmMgKiBzcGxpdG11eCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgZ3VpbnQgaTsKLSAgR0xpc3QgKmN1ciwgKnBhZHNfbGlzdDsKLQotICBTUExJVE1VWF9TUkNfTE9DSyAoc3BsaXRtdXgpOwotICBpZiAoIXNwbGl0bXV4LT5ydW5uaW5nKQotICAgIGdvdG8gb3V0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNwbGl0bXV4LCAiU3RvcHBpbmciKTsKLQotICAvKiBTdG9wIGFuZCBkZXN0cm95IGFsbCBwYXJ0cyAgKi8KLSAgZm9yIChpID0gMDsgaSA8IHNwbGl0bXV4LT5udW1fcGFydHM7IGkrKykgewotICAgIGlmIChzcGxpdG11eC0+cGFydHNbaV0gPT0gTlVMTCkKLSAgICAgIGNvbnRpbnVlOwotICAgIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl91bnByZXBhcmUgKHNwbGl0bXV4LT5wYXJ0c1tpXSk7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNwbGl0bXV4LT5wYXJ0c1tpXSk7Ci0gICAgc3BsaXRtdXgtPnBhcnRzW2ldID0gTlVMTDsKLSAgfQotCi0gIFNQTElUTVVYX1NSQ19QQURTX0xPQ0sgKHNwbGl0bXV4KTsKLSAgcGFkc19saXN0ID0gc3BsaXRtdXgtPnBhZHM7Ci0gIHNwbGl0bXV4LT5wYWRzID0gTlVMTDsKLSAgU1BMSVRNVVhfU1JDX1BBRFNfVU5MT0NLIChzcGxpdG11eCk7Ci0KLSAgU1BMSVRNVVhfU1JDX1VOTE9DSyAoc3BsaXRtdXgpOwotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAocGFkc19saXN0KTsgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgU3BsaXRNdXhTcmNQYWQgKnRtcCA9IChTcGxpdE11eFNyY1BhZCAqKSAoY3VyLT5kYXRhKTsKLSAgICBnc3RfcGFkX3N0b3BfdGFzayAoR1NUX1BBRCAodG1wKSk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlQgKHNwbGl0bXV4KSwgR1NUX1BBRCAodG1wKSk7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKHBhZHNfbGlzdCk7Ci0gIFNQTElUTVVYX1NSQ19MT0NLIChzcGxpdG11eCk7Ci0KLSAgZ19mcmVlIChzcGxpdG11eC0+cGFydHMpOwotICBzcGxpdG11eC0+cGFydHMgPSBOVUxMOwotICBzcGxpdG11eC0+bnVtX3BhcnRzID0gMDsKLSAgc3BsaXRtdXgtPnJ1bm5pbmcgPSBGQUxTRTsKLSAgc3BsaXRtdXgtPnRvdGFsX2R1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgLyogUmVzZXQgcGxheWJhY2sgc2VnbWVudCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc3BsaXRtdXgtPnBsYXlfc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLW91dDoKLSAgU1BMSVRNVVhfU1JDX1VOTE9DSyAoc3BsaXRtdXgpOwotICByZXR1cm4gcmV0OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RTcGxpdE11eFNyYyAqc3BsaXRtdXg7Ci0gIFNwbGl0TXV4U3JjUGFkICpzcGxpdHBhZDsKLX0gU3BsaXRNdXhBbmRQYWQ7Ci0KLXN0YXRpYyBnYm9vbGVhbgotaGFuZGxlX3N0aWNreV9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgU3BsaXRNdXhBbmRQYWQgKnNwbGl0bXV4X2FuZF9wYWQ7Ci0gIEdzdFNwbGl0TXV4U3JjICpzcGxpdG11eDsKLSAgU3BsaXRNdXhTcmNQYWQgKnNwbGl0cGFkOwotCi0gIHNwbGl0bXV4X2FuZF9wYWQgPSB1c2VyX2RhdGE7Ci0gIHNwbGl0bXV4ID0gc3BsaXRtdXhfYW5kX3BhZC0+c3BsaXRtdXg7Ci0gIHNwbGl0cGFkID0gc3BsaXRtdXhfYW5kX3BhZC0+c3BsaXRwYWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3BsaXRwYWQsICJoYW5kbGUgc3RpY2t5IGV2ZW50ICUiIEdTVF9QVFJfRk9STUFULCAqZXZlbnQpOwotICBnc3RfZXZlbnRfcmVmICgqZXZlbnQpOwotICBnc3Rfc3BsaXRtdXhfaGFuZGxlX2V2ZW50IChzcGxpdG11eCwgc3BsaXRwYWQsIHBhZCwgKmV2ZW50KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3Rfc3BsaXRtdXhfZmluZF9vdXRwdXRfcGFkIChHc3RTcGxpdE11eFBhcnRSZWFkZXIgKiBwYXJ0LCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0U3BsaXRNdXhTcmMgKiBzcGxpdG11eCkKLXsKLSAgR0xpc3QgKmN1cjsKLSAgZ2NoYXIgKnBhZF9uYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKLSAgR3N0UGFkICp0YXJnZXQgPSBOVUxMOwotICBnYm9vbGVhbiBpc19uZXdfcGFkID0gRkFMU0U7Ci0KLSAgU1BMSVRNVVhfU1JDX0xPQ0sgKHNwbGl0bXV4KTsKLSAgU1BMSVRNVVhfU1JDX1BBRFNfTE9DSyAoc3BsaXRtdXgpOwotICBmb3IgKGN1ciA9IGdfbGlzdF9maXJzdCAoc3BsaXRtdXgtPnBhZHMpOwotICAgICAgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgR3N0UGFkICp0bXAgPSAoR3N0UGFkICopIChjdXItPmRhdGEpOwotICAgIGlmIChnX3N0cl9lcXVhbCAoR1NUX1BBRF9OQU1FICh0bXApLCBwYWRfbmFtZSkpIHsKLSAgICAgIHRhcmdldCA9IHRtcDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICh0YXJnZXQgPT0gTlVMTCAmJiAhc3BsaXRtdXgtPnBhZHNfY29tcGxldGUpIHsKLSAgICBTcGxpdE11eEFuZFBhZCBzcGxpdG11eF9hbmRfcGFkOwotCi0gICAgLyogTm8gcGFkIGZvdW5kLCBjcmVhdGUgb25lICovCi0gICAgdGFyZ2V0ID0gZ19vYmplY3RfbmV3IChTUExJVE1VWF9UWVBFX1NSQ19QQUQsCi0gICAgICAgICJuYW1lIiwgcGFkX25hbWUsICJkaXJlY3Rpb24iLCBHU1RfUEFEX1NSQywgTlVMTCk7Ci0gICAgc3BsaXRtdXgtPnBhZHMgPSBnX2xpc3RfcHJlcGVuZCAoc3BsaXRtdXgtPnBhZHMsIHRhcmdldCk7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHRhcmdldCwgVFJVRSk7Ci0KLSAgICBzcGxpdG11eF9hbmRfcGFkLnNwbGl0bXV4ID0gc3BsaXRtdXg7Ci0gICAgc3BsaXRtdXhfYW5kX3BhZC5zcGxpdHBhZCA9IChTcGxpdE11eFNyY1BhZCAqKSB0YXJnZXQ7Ci0gICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHBhZCwgaGFuZGxlX3N0aWNreV9ldmVudHMsCi0gICAgICAgICZzcGxpdG11eF9hbmRfcGFkKTsKLSAgICBpc19uZXdfcGFkID0gVFJVRTsKLSAgfQotICBTUExJVE1VWF9TUkNfUEFEU19VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgU1BMSVRNVVhfU1JDX1VOTE9DSyAoc3BsaXRtdXgpOwotCi0gIGdfZnJlZSAocGFkX25hbWUpOwotCi0gIGlmICh0YXJnZXQgPT0gTlVMTCkKLSAgICBnb3RvIHBhZF9ub3RfZm91bmQ7Ci0KLSAgaWYgKGlzX25ld19wYWQpCi0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoc3BsaXRtdXgpLCB0YXJnZXQpOwotCi0gIHJldHVybiB0YXJnZXQ7Ci0KLXBhZF9ub3RfZm91bmQ6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChzcGxpdG11eCwgU1RSRUFNLCBGQUlMRUQsIChOVUxMKSwKLSAgICAgICgiU3RyZWFtIHBhcnQgJXMgY29udGFpbnMgZXh0cmEgdW5rbm93biBwYWQgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgcGFydC0+cGF0aCwgcGFkKSk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3BhcnRfcHJlcGFyZWQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwKLSAgICBHc3RTcGxpdE11eFNyYyAqIHNwbGl0bXV4KQotewotICBnYm9vbGVhbiBuZWVkX25vX21vcmVfcGFkczsKLQotICBHU1RfTE9HX09CSkVDVCAoc3BsaXRtdXgsICJQYXJ0ICUiIEdTVF9QVFJfRk9STUFUICIgcHJlcGFyZWQiLCByZWFkZXIpOwotICBTUExJVE1VWF9TUkNfTE9DSyAoc3BsaXRtdXgpOwotICBuZWVkX25vX21vcmVfcGFkcyA9ICFzcGxpdG11eC0+cGFkc19jb21wbGV0ZTsKLSAgc3BsaXRtdXgtPnBhZHNfY29tcGxldGUgPSBUUlVFOwotICBTUExJVE1VWF9TUkNfVU5MT0NLIChzcGxpdG11eCk7Ci0KLSAgaWYgKG5lZWRfbm9fbW9yZV9wYWRzKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3BsaXRtdXgsICJTaWduYWxsaW5nIG5vLW1vcmUtcGFkcyIpOwotICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoc3BsaXRtdXgpKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3B1c2hfZXZlbnQgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgsIEdzdEV2ZW50ICogZSwKLSAgICBndWludDMyIHNlcW51bSkKLXsKLSAgR0xpc3QgKmN1cjsKLQotICBpZiAoc2VxbnVtKQotICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChlLCBzZXFudW0pOwotCi0gIFNQTElUTVVYX1NSQ19QQURTX0xPQ0sgKHNwbGl0bXV4KTsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHNwbGl0bXV4LT5wYWRzKTsKLSAgICAgIGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIEdzdFBhZCAqcGFkID0gR1NUX1BBRF9DQVNUIChjdXItPmRhdGEpOwotICAgIGdzdF9ldmVudF9yZWYgKGUpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBlKTsKLSAgfQotICBTUExJVE1VWF9TUkNfUEFEU19VTkxPQ0sgKHNwbGl0bXV4KTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwbGl0bXV4X3B1c2hfZmx1c2hfc3RvcCAoR3N0U3BsaXRNdXhTcmMgKiBzcGxpdG11eCwgZ3VpbnQzMiBzZXFudW0pCi17Ci0gIEdzdEV2ZW50ICplID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLSAgR0xpc3QgKmN1cjsKLQotICBpZiAoc2VxbnVtKQotICAgIGdzdF9ldmVudF9zZXRfc2VxbnVtIChlLCBzZXFudW0pOwotCi0gIFNQTElUTVVYX1NSQ19QQURTX0xPQ0sgKHNwbGl0bXV4KTsKLSAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHNwbGl0bXV4LT5wYWRzKTsKLSAgICAgIGN1ciAhPSBOVUxMOyBjdXIgPSBnX2xpc3RfbmV4dCAoY3VyKSkgewotICAgIFNwbGl0TXV4U3JjUGFkICp0YXJnZXQgPSAoU3BsaXRNdXhTcmNQYWQgKikgKGN1ci0+ZGF0YSk7Ci0KLSAgICBnc3RfZXZlbnRfcmVmIChlKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9QQURfQ0FTVCAodGFyZ2V0KSwgZSk7Ci0gICAgdGFyZ2V0LT5zZW50X2NhcHMgPSBGQUxTRTsKLSAgICB0YXJnZXQtPnNlbnRfc3RyZWFtX3N0YXJ0ID0gRkFMU0U7Ci0gICAgdGFyZ2V0LT5zZW50X3NlZ21lbnQgPSBGQUxTRTsKLSAgfQotICBTUExJVE1VWF9TUkNfUEFEU19VTkxPQ0sgKHNwbGl0bXV4KTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGUpOwotfQotCi0vKiBDYWxsYmFjayBmb3Igd2hlbiBhIHBhcnQgZmluaXNoZXMgYW5kIHdlIG5lZWQgdG8gbW92ZSB0byB0aGUgbmV4dCAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfc3BsaXRtdXhfZW5kX29mX3BhcnQgKEdzdFNwbGl0TXV4U3JjICogc3BsaXRtdXgsIFNwbGl0TXV4U3JjUGFkICogc3BsaXRwYWQpCi17Ci0gIGdpbnQgbmV4dF9wYXJ0ID0gLTE7Ci0gIGdpbnQgY3VyX3BhcnQgPSBzcGxpdHBhZC0+Y3VyX3BhcnQ7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGlmIChzcGxpdG11eC0+cGxheV9zZWdtZW50LnJhdGUgPj0gMC4wKSB7Ci0gICAgaWYgKGN1cl9wYXJ0ICsgMSA8IHNwbGl0bXV4LT5udW1fcGFydHMpCi0gICAgICBuZXh0X3BhcnQgPSBjdXJfcGFydCArIDE7Ci0gICAgLyogTWFrZSBzdXJlIHRoZSB0cmFuc2l0aW9uIGlzIHNlYW1sZXNzICovCi0gICAgc3BsaXRwYWQtPnNldF9uZXh0X2Rpc2NvbnQgPSBGQUxTRTsKLSAgICBzcGxpdHBhZC0+Y2xlYXJfbmV4dF9kaXNjb250ID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICAvKiBSZXZlcnNlIHBsYXkgLSBtb3ZlIHRvIHByZXZpb3VzIHNlZ21lbnQgKi8KLSAgICBpZiAoY3VyX3BhcnQgPiAwKSB7Ci0gICAgICBuZXh0X3BhcnQgPSBjdXJfcGFydCAtIDE7Ci0gICAgICAvKiBOb24tc2VhbWxlc3MgdHJhbnNpdGlvbiBpbiByZXZlcnNlICovCi0gICAgICBzcGxpdHBhZC0+c2V0X25leHRfZGlzY29udCA9IFRSVUU7Ci0gICAgICBzcGxpdHBhZC0+Y2xlYXJfbmV4dF9kaXNjb250ID0gRkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgU1BMSVRNVVhfU1JDX0xPQ0sgKHNwbGl0bXV4KTsKLQotICAvKiBJZiBhbGwgcGFkcyBhcmUgZG9uZSB3aXRoIHRoaXMgcGFydCwgZGVhY3RpdmF0ZSBpdCAqLwotICBpZiAoZ3N0X3NwbGl0bXV4X3BhcnRfaXNfZW9zIChzcGxpdG11eC0+cGFydHNbc3BsaXRwYWQtPmN1cl9wYXJ0XSkpCi0gICAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2RlYWN0aXZhdGUgKHNwbGl0bXV4LT5wYXJ0c1tjdXJfcGFydF0pOwotCi0gIGlmIChzcGxpdG11eC0+cGxheV9zZWdtZW50LnJhdGUgPj0gMC4wKSB7Ci0gICAgaWYgKHNwbGl0bXV4LT5wbGF5X3NlZ21lbnQuc3RvcCAhPSAtMSkgewotICAgICAgR3N0Q2xvY2tUaW1lIHBhcnRfZW5kID0KLSAgICAgICAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZ2V0X2VuZF9vZmZzZXQgKHNwbGl0bXV4LT5wYXJ0c1tjdXJfcGFydF0pOwotICAgICAgaWYgKHBhcnRfZW5kID49IHNwbGl0bXV4LT5wbGF5X3NlZ21lbnQuc3RvcCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgICAgICJTdG9wIHBvc2l0aW9uIHdhcyB3aXRoaW4gdGhhdCBwYXJ0LiBGaW5pc2hpbmciKTsKLSAgICAgICAgbmV4dF9wYXJ0ID0gLTE7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGlmIChzcGxpdG11eC0+cGxheV9zZWdtZW50LnN0YXJ0ICE9IC0xKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgcGFydF9zdGFydCA9Ci0gICAgICAgICAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2dldF9zdGFydF9vZmZzZXQgKHNwbGl0bXV4LT5wYXJ0c1tjdXJfcGFydF0pOwotICAgICAgaWYgKHBhcnRfc3RhcnQgPj0gc3BsaXRtdXgtPnBsYXlfc2VnbWVudC5zdGFydCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgICAgICJTdGFydCBwb3NpdGlvbiB3YXMgd2l0aGluIHRoYXQgcGFydC4gRmluaXNoaW5nIik7Ci0gICAgICAgIG5leHRfcGFydCA9IC0xOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChuZXh0X3BhcnQgIT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwgIkF0IEVPUyBvbiBwYWQgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICAgIiBtb3ZpbmcgdG8gcGFydCAlZCIsIHNwbGl0cGFkLCBuZXh0X3BhcnQpOwotICAgIHNwbGl0cGFkLT5jdXJfcGFydCA9IG5leHRfcGFydDsKLSAgICBzcGxpdHBhZC0+cmVhZGVyID0gc3BsaXRtdXgtPnBhcnRzW3NwbGl0cGFkLT5jdXJfcGFydF07Ci0gICAgaWYgKHNwbGl0cGFkLT5wYXJ0X3BhZCkKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNwbGl0cGFkLT5wYXJ0X3BhZCk7Ci0gICAgc3BsaXRwYWQtPnBhcnRfcGFkID0KLSAgICAgICAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2xvb2t1cF9wYWQgKHNwbGl0cGFkLT5yZWFkZXIsCi0gICAgICAgIChHc3RQYWQgKikgKHNwbGl0cGFkKSk7Ci0KLSAgICBpZiAoc3BsaXRtdXgtPmN1cl9wYXJ0ICE9IG5leHRfcGFydCkgewotICAgICAgaWYgKCFnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfaXNfYWN0aXZlIChzcGxpdHBhZC0+cmVhZGVyKSkgewotICAgICAgICBHc3RTZWdtZW50IHRtcDsKLSAgICAgICAgLyogSWYgbW92aW5nIGJhY2t3YXJkIGludG8gYSBuZXcgcGFydCwgc2V0IHN0b3AKLSAgICAgICAgICogdG8gLTEgdG8gZW5zdXJlIHdlIHBsYXkgdGhlIGVudGlyZSBmaWxlIC0gd29ya2Fyb3VuZAotICAgICAgICAgKiBhIGJ1ZyBpbiBxdGRlbXV4IHRoYXQgbWlzc2VzIGJpdHMgYXQgdGhlIGVuZCAqLwotICAgICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCZzcGxpdG11eC0+cGxheV9zZWdtZW50LCAmdG1wKTsKLSAgICAgICAgaWYgKHRtcC5yYXRlIDwgMCkKLSAgICAgICAgICB0bXAuc3RvcCA9IC0xOwotCi0gICAgICAgIC8qIFRoaXMgaXMgdGhlIGZpcnN0IHBhZCB0byBtb3ZlIHRvIHRoZSBuZXcgcGFydCwgYWN0aXZhdGUgaXQgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3BsaXRwYWQsCi0gICAgICAgICAgICAiRmlyc3QgcGFkIHRvIGNoYW5nZSBwYXJ0LiBBY3RpdmF0aW5nIHBhcnQgJWQgd2l0aCBzZWcgJSIKLSAgICAgICAgICAgIEdTVF9TRUdNRU5UX0ZPUk1BVCwgbmV4dF9wYXJ0LCAmdG1wKTsKLSAgICAgICAgaWYgKCFnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfYWN0aXZhdGUgKHNwbGl0cGFkLT5yZWFkZXIsICZ0bXApKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9Ci0gICAgICBzcGxpdG11eC0+Y3VyX3BhcnQgPSBuZXh0X3BhcnQ7Ci0gICAgfQotICAgIHJlcyA9IFRSVUU7Ci0gIH0KLQotICBTUExJVE1VWF9TUkNfVU5MT0NLIChzcGxpdG11eCk7Ci0gIHJldHVybiByZXM7Ci1lcnJvcjoKLSAgU1BMSVRNVVhfU1JDX1VOTE9DSyAoc3BsaXRtdXgpOwotICBHU1RfRUxFTUVOVF9FUlJPUiAoc3BsaXRtdXgsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAoIkZhaWxlZCB0byBhY3RpdmF0ZSBwYXJ0ICVkIiwgc3BsaXRtdXgtPmN1cl9wYXJ0KSk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotR19ERUZJTkVfVFlQRSAoU3BsaXRNdXhTcmNQYWQsIHNwbGl0bXV4X3NyY19wYWQsIEdTVF9UWVBFX1BBRCk7Ci0KLXN0YXRpYyB2b2lkCi1zcGxpdG11eF9zcmNfcGFkX2NvbnN0cnVjdGVkIChHT2JqZWN0ICogcGFkKQotewotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoR1NUX1BBRCAocGFkKSwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChzcGxpdG11eF9zcmNfcGFkX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChHU1RfUEFEIChwYWQpLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKHNwbGl0bXV4X3NyY19wYWRfcXVlcnkpKTsKLQotICBHX09CSkVDVF9DTEFTUyAoc3BsaXRtdXhfc3JjX3BhZF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAocGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGxpdG11eF9zcmNfcGFkX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIFNwbGl0TXV4U3JjUGFkICpwYWQgPSAoU3BsaXRNdXhTcmNQYWQgKikgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwYWQpOwotICBpZiAocGFkLT5wYXJ0X3BhZCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZC0+cGFydF9wYWQpOwotICAgIHBhZC0+cGFydF9wYWQgPSBOVUxMOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwYWQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChzcGxpdG11eF9zcmNfcGFkX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcGxpdG11eF9zcmNfcGFkX2NsYXNzX2luaXQgKFNwbGl0TXV4U3JjUGFkQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2tsYXNzID0gKEdPYmplY3RDbGFzcyAqKSAoa2xhc3MpOwotCi0gIGdvYmplY3Rfa2xhc3MtPmNvbnN0cnVjdGVkID0gc3BsaXRtdXhfc3JjX3BhZF9jb25zdHJ1Y3RlZDsKLSAgZ29iamVjdF9rbGFzcy0+ZGlzcG9zZSA9IGdzdF9zcGxpdG11eF9zcmNfcGFkX2Rpc3Bvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcGxpdG11eF9zcmNfcGFkX2luaXQgKFNwbGl0TXV4U3JjUGFkICogcGFkKQotewotfQotCi0vKiBFdmVudCBoYW5kbGVyIGZvciBzb3VyY2UgcGFkcy4gUHJveHkgZXZlbnRzIGludG8gdGhlIGNoaWxkCi0gKiBwYXJ0cyBhcyBuZWVkZWQKLSAqLwotc3RhdGljIGdib29sZWFuCi1zcGxpdG11eF9zcmNfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U3BsaXRNdXhTcmMgKnNwbGl0bXV4ID0gR1NUX1NQTElUTVVYX1NSQyAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFyZW50LCAiZXZlbnQgJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICIgb24gJSIgR1NUX1BUUl9GT1JNQVQsIGV2ZW50LCBwYWQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6ewotICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKLSAgICAgIGdkb3VibGUgcmF0ZTsKLSAgICAgIEdzdFNlZWtGbGFncyBmbGFnczsKLSAgICAgIEdzdFNlZWtUeXBlIHN0YXJ0X3R5cGUsIHN0b3BfdHlwZTsKLSAgICAgIGdpbnQ2NCBzdGFydCwgc3RvcDsKLSAgICAgIGd1aW50MzIgc2VxbnVtOwotICAgICAgZ2ludCBpOwotICAgICAgR3N0Q2xvY2tUaW1lIHBhcnRfc3RhcnQsIHBvc2l0aW9uOwotICAgICAgR0xpc3QgKmN1cjsKLSAgICAgIEdzdFNlZ21lbnQgdG1wOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAgICAgJnN0YXJ0X3R5cGUsICZzdGFydCwgJnN0b3BfdHlwZSwgJnN0b3ApOwotCi0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwgImNhbiBvbmx5IHNlZWsgb24gVElNRSIpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgICAgfQotICAgICAgLyogRklYTUU6IFN1cHBvcnQgbm9uLWZsdXNoaW5nIHNlZWtzLCB3aGljaCBtaWdodCBuZXZlciB3YWtlIHVwICovCi0gICAgICBpZiAoIShmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0gpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNwbGl0bXV4LCAiT25seSBmbHVzaGluZyBzZWVrcyBzdXBwb3J0ZWQiKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIH0KLSAgICAgIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0KLSAgICAgIFNQTElUTVVYX1NSQ19MT0NLIChzcGxpdG11eCk7Ci0gICAgICBpZiAoIXNwbGl0bXV4LT5ydW5uaW5nIHx8IHNwbGl0bXV4LT5udW1fcGFydHMgPCAxKSB7Ci0gICAgICAgIC8qIE5vdCBzdGFydGVkIHlldCAqLwotICAgICAgICBTUExJVE1VWF9TUkNfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoJnNwbGl0bXV4LT5wbGF5X3NlZ21lbnQsICZ0bXApOwotCi0gICAgICBpZiAoIWdzdF9zZWdtZW50X2RvX3NlZWsgKCZ0bXAsIHJhdGUsCi0gICAgICAgICAgICAgIGZvcm1hdCwgZmxhZ3MsIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsIE5VTEwpKSB7Ci0gICAgICAgIC8qIEludmFsaWQgc2VlayByZXF1ZXN0ZWQsIGlnbm9yZSBpdCAqLwotICAgICAgICBTUExJVE1VWF9TUkNfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9Ci0gICAgICBwb3NpdGlvbiA9IHRtcC5wb3NpdGlvbjsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3BsaXRtdXgsICJQZXJmb3JtaW5nIHNlZWsgd2l0aCBzZWcgJSIKLSAgICAgICAgICBHU1RfU0VHTUVOVF9GT1JNQVQsICZ0bXApOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwKLSAgICAgICAgICAiSGFuZGxpbmcgZmx1c2hpbmcgc2Vlay4gU2VuZGluZyBmbHVzaCBzdGFydCIpOwotCi0gICAgICAvKiBTZW5kIGZsdXNoX3N0YXJ0ICovCi0gICAgICBnc3Rfc3BsaXRtdXhfcHVzaF9ldmVudCAoc3BsaXRtdXgsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCksIHNlcW51bSk7Ci0KLSAgICAgIC8qIFN0b3AgYWxsIHBhcnRzLCB3aGljaCB3aWxsIHdvcmsgYmVjYXVzZSBvZiB0aGUgZmx1c2ggKi8KLSAgICAgIFNQTElUTVVYX1NSQ19QQURTX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIFNQTElUTVVYX1NSQ19VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGZvciAoY3VyID0gZ19saXN0X2ZpcnN0IChzcGxpdG11eC0+cGFkcyk7Ci0gICAgICAgICAgY3VyICE9IE5VTEw7IGN1ciA9IGdfbGlzdF9uZXh0IChjdXIpKSB7Ci0gICAgICAgIFNwbGl0TXV4U3JjUGFkICp0YXJnZXQgPSAoU3BsaXRNdXhTcmNQYWQgKikgKGN1ci0+ZGF0YSk7Ci0gICAgICAgIEdzdFNwbGl0TXV4UGFydFJlYWRlciAqcmVhZGVyID0gc3BsaXRtdXgtPnBhcnRzW3RhcmdldC0+Y3VyX3BhcnRdOwotICAgICAgICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfZGVhY3RpdmF0ZSAocmVhZGVyKTsKLSAgICAgIH0KLQotICAgICAgLyogU2h1dCBkb3duIHBhZCB0YXNrcyAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3BsaXRtdXgsICJQYXVzaW5nIHBhZCB0YXNrcyIpOwotICAgICAgZm9yIChjdXIgPSBnX2xpc3RfZmlyc3QgKHNwbGl0bXV4LT5wYWRzKTsKLSAgICAgICAgICBjdXIgIT0gTlVMTDsgY3VyID0gZ19saXN0X25leHQgKGN1cikpIHsKLSAgICAgICAgR3N0UGFkICpzcGxpdHBhZCA9IChHc3RQYWQgKikgKGN1ci0+ZGF0YSk7Ci0gICAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAoR1NUX1BBRCAoc3BsaXRwYWQpKTsKLSAgICAgIH0KLSAgICAgIFNQTElUTVVYX1NSQ19QQURTX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgICAgU1BMSVRNVVhfU1JDX0xPQ0sgKHNwbGl0bXV4KTsKLQotICAgICAgLyogU2VuZCBmbHVzaCBzdG9wICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcGxpdG11eCwgIlNlbmRpbmcgZmx1c2ggc3RvcCIpOwotICAgICAgZ3N0X3NwbGl0bXV4X3B1c2hfZmx1c2hfc3RvcCAoc3BsaXRtdXgsIHNlcW51bSk7Ci0KLSAgICAgIC8qIEV2ZXJ5dGhpbmcgaXMgc3RvcHBlZCwgc28gdXBkYXRlIHRoZSBwbGF5X3NlZ21lbnQgKi8KLSAgICAgIGdzdF9zZWdtZW50X2NvcHlfaW50byAoJnRtcCwgJnNwbGl0bXV4LT5wbGF5X3NlZ21lbnQpOwotCi0gICAgICAvKiBXb3JrIG91dCB3aGVyZSB0byBzdGFydCBmcm9tIG5vdyAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IHNwbGl0bXV4LT5udW1fcGFydHM7IGkrKykgewotICAgICAgICBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKnJlYWRlciA9IHNwbGl0bXV4LT5wYXJ0c1tpXTsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIHBhcnRfZW5kID0KLSAgICAgICAgICAgIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9nZXRfZW5kX29mZnNldCAocmVhZGVyKTsKLQotICAgICAgICBpZiAocGFydF9lbmQgPiBwb3NpdGlvbikKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChpID09IHNwbGl0bXV4LT5udW1fcGFydHMpCi0gICAgICAgIGkgPSBzcGxpdG11eC0+bnVtX3BhcnRzIC0gMTsKLQotICAgICAgcGFydF9zdGFydCA9Ci0gICAgICAgICAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX2dldF9zdGFydF9vZmZzZXQgKHNwbGl0bXV4LT5wYXJ0c1tpXSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNwbGl0bXV4LAotICAgICAgICAgICJTZWVrIHRvIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIgbGFuZGVkIGluIHBhcnQgJWQgb2Zmc2V0ICUiCi0gICAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChwb3NpdGlvbiksCi0gICAgICAgICAgaSwgR1NUX1RJTUVfQVJHUyAocG9zaXRpb24gLSBwYXJ0X3N0YXJ0KSk7Ci0KLSAgICAgIHJldCA9IGdzdF9zcGxpdG11eF9zcmNfYWN0aXZhdGVfcGFydCAoc3BsaXRtdXgsIGkpOwotICAgICAgU1BMSVRNVVhfU1JDX1VOTE9DSyAoc3BsaXRtdXgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLWVycm9yOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNwbGl0bXV4X3NyY19wYWRfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICAvKiBRdWVyeSBoYW5kbGVyIGZvciBzb3VyY2UgcGFkcy4gUHJveHkgcXVlcmllcyBpbnRvIHRoZSBjaGlsZAotICAgKiBwYXJ0cyBhcyBuZWVkZWQKLSAgICovCi0gIEdzdFNwbGl0TXV4U3JjICpzcGxpdG11eCA9IEdTVF9TUExJVE1VWF9TUkMgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXJlbnQsICJxdWVyeSAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiBvbiAlIiBHU1RfUFRSX0ZPUk1BVCwgcXVlcnksIHBhZCk7Ci0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgY2FzZSBHU1RfUVVFUllfUE9TSVRJT046ewotICAgICAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpwYXJ0OwotICAgICAgU3BsaXRNdXhTcmNQYWQgKmFueXBhZDsKLQotICAgICAgU1BMSVRNVVhfU1JDX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIFNQTElUTVVYX1NSQ19QQURTX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGFueXBhZCA9IChTcGxpdE11eFNyY1BhZCAqKSAoc3BsaXRtdXgtPnBhZHMtPmRhdGEpOwotICAgICAgcGFydCA9IHNwbGl0bXV4LT5wYXJ0c1thbnlwYWQtPmN1cl9wYXJ0XTsKLSAgICAgIHJldCA9IGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9zcmNfcXVlcnkgKHBhcnQsIHBhZCwgcXVlcnkpOwotICAgICAgU1BMSVRNVVhfU1JDX1BBRFNfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBTUExJVE1VWF9TUkNfVU5MT0NLIChzcGxpdG11eCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfRFVSQVRJT046ewotICAgICAgR3N0Rm9ybWF0IGZtdDsKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmbXQsIE5VTEwpOwotICAgICAgaWYgKGZtdCAhPSBHU1RfRk9STUFUX1RJTUUpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGlmIChzcGxpdG11eC0+dG90YWxfZHVyYXRpb24gPiAwKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICBzcGxpdG11eC0+dG90YWxfZHVyYXRpb24pOwotICAgICAgICByZXQgPSBUUlVFOwotICAgICAgfQotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9TRUVLSU5HOnsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9zZWVraW5nIChxdWVyeSwgJmZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBpZiAoZm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3BsaXRtdXgpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBUUlVFLCAwLAotICAgICAgICAgIHNwbGl0bXV4LT50b3RhbF9kdXJhdGlvbik7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNwbGl0bXV4KTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0KLWdib29sZWFuCi1yZWdpc3Rlcl9zcGxpdG11eHNyYyAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoc3BsaXRtdXhfZGVidWcsICJzcGxpdG11eHNyYyIsIDAsCi0gICAgICAiU3BsaXQgRmlsZSBEZW11eGluZyBTb3VyY2UiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInNwbGl0bXV4c3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1NQTElUTVVYX1NSQyk7Ci19CmRpZmYgLS1naXQgYS9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmggYi9nc3QvbXVsdGlmaWxlL2dzdHNwbGl0bXV4c3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyODQ1M2MuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBTcGxpdCBNdXhlZCBGaWxlIFNvdXJjZQotICogQ29weXJpZ2h0IChDKSAyMDE0IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZuZGVmIF9fR1NUX1NQTElUTVVYX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfU1BMSVRNVVhfU1JDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAiZ3N0c3BsaXRtdXhwYXJ0cmVhZGVyLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9TUExJVE1VWF9TUkMgXAotICAoZ3N0X3NwbGl0bXV4X3NyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1BMSVRNVVhfU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfU1BMSVRNVVhfU1JDLEdzdFNwbGl0TXV4U3JjKSkKLSNkZWZpbmUgR1NUX1NQTElUTVVYX1NSQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TUExJVE1VWF9TUkMsR3N0U3BsaXRNdXhTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TUExJVE1VWF9TUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TUExJVE1VWF9TUkMpKQotI2RlZmluZSBHU1RfSVNfU1BMSVRNVVhfU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NQTElUTVVYX1NSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGxpdE11eFNyYyBHc3RTcGxpdE11eFNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGxpdE11eFNyY0NsYXNzIEdzdFNwbGl0TXV4U3JjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0U3BsaXRNdXhTcmMKLXsKLSAgR3N0QmluIHBhcmVudDsKLQotICBHTXV0ZXggbG9jazsKLSAgZ2Jvb2xlYW4gICAgIHJ1bm5pbmc7Ci0KLSAgZ2NoYXIgICAgICAgKmxvY2F0aW9uOyAgLyogT0JKRUNUX0xPQ0sgKi8KLQotICBHc3RTcGxpdE11eFBhcnRSZWFkZXIgKipwYXJ0czsKLSAgZ3VpbnQgICAgICAgIG51bV9wYXJ0czsKLSAgZ3VpbnQgICAgICAgIGN1cl9wYXJ0OwotCi0gIGdib29sZWFuIHBhZHNfY29tcGxldGU7Ci0gIEdNdXRleCBwYWRzX2xvY2s7Ci0gIEdMaXN0ICAqcGFkczsgLyogcGFkc19sb2NrICovCi0KLSAgR3N0Q2xvY2tUaW1lIHRvdGFsX2R1cmF0aW9uOwotICBHc3RTZWdtZW50IHBsYXlfc2VnbWVudDsKLX07Ci0KLXN0cnVjdCBfR3N0U3BsaXRNdXhTcmNDbGFzcwotewotICBHc3RCaW5DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBzcGxpdG11eF9zcmNfcGFkX2dldF90eXBlICh2b2lkKTsKLSNkZWZpbmUgU1BMSVRNVVhfVFlQRV9TUkNfUEFEIHNwbGl0bXV4X3NyY19wYWRfZ2V0X3R5cGUoKQotI2RlZmluZSBTUExJVE1VWF9TUkNfUEFEX0NBU1QocCkgKChTcGxpdE11eFNyY1BhZCAqKShwKSkKLSNkZWZpbmUgU1BMSVRNVVhfU1JDX1BBRChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLFNQTElUTVVYX1RZUEVfU1JDX1BBRCxTcGxpdE11eFNyY1BhZCkpCi0KLXN0cnVjdCBfU3BsaXRNdXhTcmNQYWQKLXsKLSAgR3N0UGFkIHBhcmVudDsKLQotICBndWludCBjdXJfcGFydDsKLSAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXI7Ci0gIEdzdFBhZCAqcGFydF9wYWQ7Ci0KLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdib29sZWFuIHNldF9uZXh0X2Rpc2NvbnQ7Ci0gIGdib29sZWFuIGNsZWFyX25leHRfZGlzY29udDsKLQotICBnYm9vbGVhbiBzZW50X3N0cmVhbV9zdGFydDsKLSAgZ2Jvb2xlYW4gc2VudF9jYXBzOwotICBnYm9vbGVhbiBzZW50X3NlZ21lbnQ7Ci19OwotCi1zdHJ1Y3QgX1NwbGl0TXV4U3JjUGFkQ2xhc3MKLXsKLSAgR3N0UGFkQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgZ3N0X3NwbGl0bXV4X3NyY19nZXRfdHlwZSAodm9pZCk7Ci1nYm9vbGVhbiByZWdpc3Rlcl9zcGxpdG11eHNyYyAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotI2RlZmluZSBTUExJVE1VWF9TUkNfTE9DSyhzKSBnX211dGV4X2xvY2soJihzKS0+bG9jaykKLSNkZWZpbmUgU1BMSVRNVVhfU1JDX1VOTE9DSyhzKSBnX211dGV4X3VubG9jaygmKHMpLT5sb2NrKQotCi0jZGVmaW5lIFNQTElUTVVYX1NSQ19QQURTX0xPQ0socykgZ19tdXRleF9sb2NrKCYocyktPnBhZHNfbG9jaykKLSNkZWZpbmUgU1BMSVRNVVhfU1JDX1BBRFNfVU5MT0NLKHMpIGdfbXV0ZXhfdW5sb2NrKCYocyktPnBhZHNfbG9jaykKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NQTElUTVVYX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXR1dGlscy5jIGIvZ3N0L211bHRpZmlsZS9nc3RzcGxpdHV0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMDg4YTUuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdHV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogR1N0cmVhbWVyIFNwbGl0IFNvdXJjZSBVdGlsaXR5IEZ1bmN0aW9ucwotICogQ29weXJpZ2h0IChDKSAyMDExIENvbGxhYm9yYSBMdGQuIDx0aW0ubXVsbGVyQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0c3BsaXR1dGlscy5oIgotI2luY2x1ZGUgInBhdHRlcm5zcGVjLmgiCi0KLXN0YXRpYyBpbnQKLWdzdF9zcGxpdF91dGlsX2FycmF5X3NvcnRmdW5jIChnY2hhciAqKiBhLCBnY2hhciAqKiBiKQotewotICByZXR1cm4gc3RyY21wICgqYSwgKmIpOwotfQotCi1nY2hhciAqKgotZ3N0X3NwbGl0X3V0aWxfZmluZF9maWxlcyAoY29uc3QgZ2NoYXIgKiBkaXJuYW1lLAotICAgIGNvbnN0IGdjaGFyICogYmFzZW5hbWUsIEdFcnJvciAqKiBlcnIpCi17Ci0gIFBhdHRlcm5TcGVjICpwc3BlYzsKLSAgR1B0ckFycmF5ICpmaWxlczsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0gIEdEaXIgKmRpcjsKLQotICBpZiAoZGlybmFtZSA9PSBOVUxMIHx8IGJhc2VuYW1lID09IE5VTEwpCi0gICAgZ290byBpbnZhbGlkX2xvY2F0aW9uOwotCi0gIEdTVF9JTkZPICgiY2hlY2tpbmcgaW4gZGlyZWN0b3J5ICclcycgZm9yIHBhdHRlcm4gJyVzJyIsIGRpcm5hbWUsIGJhc2VuYW1lKTsKLQotICBkaXIgPSBnX2Rpcl9vcGVuIChkaXJuYW1lLCAwLCBlcnIpOwotICBpZiAoZGlyID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKERFRkFVTFRfUEFUVEVSTl9NQVRDSF9NT0RFID09IE1BVENIX01PREVfVVRGOCAmJgotICAgICAgIWdfdXRmOF92YWxpZGF0ZSAoYmFzZW5hbWUsIC0xLCBOVUxMKSkgewotICAgIGdvdG8gbm90X3V0Zjg7Ci0gIH0KLQotICAvKiBtb2RlIHdpbGwgYmUgQVVUTyBvbiBsaW51eC91bml4IGFuZCBVVEY4IG9uIHdpbjMyICovCi0gIHBzcGVjID0gcGF0dGVybl9zcGVjX25ldyAoYmFzZW5hbWUsIERFRkFVTFRfUEFUVEVSTl9NQVRDSF9NT0RFKTsKLQotICBmaWxlcyA9IGdfcHRyX2FycmF5X25ldyAoKTsKLQotICB3aGlsZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUgKGRpcikpKSB7Ci0gICAgR1NUX1RSQUNFICgiY2hlY2s6ICVzIiwgbmFtZSk7Ci0gICAgaWYgKHBhdHRlcm5fbWF0Y2hfc3RyaW5nIChwc3BlYywgbmFtZSkpIHsKLSAgICAgIEdTVF9ERUJVRyAoIm1hdGNoOiAlcyIsIG5hbWUpOwotICAgICAgZ19wdHJfYXJyYXlfYWRkIChmaWxlcywgZ19idWlsZF9maWxlbmFtZSAoZGlybmFtZSwgbmFtZSwgTlVMTCkpOwotICAgIH0KLSAgfQotCi0gIGlmIChmaWxlcy0+bGVuID09IDApCi0gICAgZ290byBub19tYXRjaGVzOwotCi0gIGdfcHRyX2FycmF5X3NvcnQgKGZpbGVzLCAoR0NvbXBhcmVGdW5jKSBnc3Rfc3BsaXRfdXRpbF9hcnJheV9zb3J0ZnVuYyk7Ci0gIGdfcHRyX2FycmF5X2FkZCAoZmlsZXMsIE5VTEwpOwotCi0gIHBhdHRlcm5fc3BlY19mcmVlIChwc3BlYyk7Ci0gIGdfZGlyX2Nsb3NlIChkaXIpOwotCi0gIHJldHVybiAoZ2NoYXIgKiopIGdfcHRyX2FycmF5X2ZyZWUgKGZpbGVzLCBGQUxTRSk7Ci0KLS8qIEVSUk9SUyAqLwotaW52YWxpZF9sb2NhdGlvbjoKLSAgewotICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwgKGVyciwgR19GSUxFX0VSUk9SLCBHX0ZJTEVfRVJST1JfSU5WQUwsCi0gICAgICAgICJObyBmaWxlbmFtZSBzcGVjaWZpZWQuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vdF91dGY4OgotICB7Ci0gICAgZ19kaXJfY2xvc2UgKGRpcik7Ci0gICAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyLCBHX0ZJTEVfRVJST1IsIEdfRklMRV9FUlJPUl9JTlZBTCwKLSAgICAgICAgIkZpbGVuYW1lIHBhdHRlcm4gbXVzdCBiZSBVVEYtOCBvbiBXaW5kb3dzLiIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19tYXRjaGVzOgotICB7Ci0gICAgcGF0dGVybl9zcGVjX2ZyZWUgKHBzcGVjKTsKLSAgICBnX2Rpcl9jbG9zZSAoZGlyKTsKLSAgICBnX3NldF9lcnJvcl9saXRlcmFsIChlcnIsIEdfRklMRV9FUlJPUiwgR19GSUxFX0VSUk9SX05PRU5ULAotICAgICAgICAiRm91bmQgbm8gZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4uIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvZ3N0c3BsaXR1dGlscy5oIGIvZ3N0L211bHRpZmlsZS9nc3RzcGxpdHV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNzhiMjMuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpZmlsZS9nc3RzcGxpdHV0aWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKiBHU3RyZWFtZXIgU3BsaXQgU291cmNlIFV0aWxpdHkgRnVuY3Rpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0ZC4gPHRpbS5tdWxsZXJAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDE0IEphbiBTY2htaWR0IDxqYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfU1BMSVRVVElMU19IX18KLSNkZWZpbmUgX19HU1RfU1BMSVRVVElMU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jaWZkZWYgR19PU19XSU4zMgotI2RlZmluZSBERUZBVUxUX1BBVFRFUk5fTUFUQ0hfTU9ERSBNQVRDSF9NT0RFX1VURjgKLSNlbHNlCi0jZGVmaW5lIERFRkFVTFRfUEFUVEVSTl9NQVRDSF9NT0RFIE1BVENIX01PREVfQVVUTwotI2VuZGlmCi0KLWdjaGFyICoqCi1nc3Rfc3BsaXRfdXRpbF9maW5kX2ZpbGVzIChjb25zdCBnY2hhciAqIGRpcm5hbWUsCi0gICAgY29uc3QgZ2NoYXIgKiBiYXNlbmFtZSwgR0Vycm9yICoqIGVycik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L211bHRpZmlsZS9wYXR0ZXJuc3BlYy5jIGIvZ3N0L211bHRpZmlsZS9wYXR0ZXJuc3BlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDhhYWJhLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aWZpbGUvcGF0dGVybnNwZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi0vKiBHUGF0dGVybiBjb3B5IHRoYXQgc3VwcG9ydHMgcmF3IChub24tdXRmOCkgbWF0Y2hpbmcKLSAqIGJhc2VkIG9uOiBHTElCIC0gTGlicmFyeSBvZiB1c2VmdWwgcm91dGluZXMgZm9yIEMgcHJvZ3JhbW1pbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAxOTk5ICBQZXRlciBNYXR0aXMsIFJlZCBIYXQsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAicGF0dGVybnNwZWMuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdHlwZWRlZiBlbnVtCi17Ci0gIE1BVENIX0FMTCwgICAgICAgICAgICAgICAgICAgIC8qICIqQT9BKiIgKi8KLSAgTUFUQ0hfQUxMX1RBSUwsICAgICAgICAgICAgICAgLyogIipBP0FBIiAqLwotICBNQVRDSF9IRUFELCAgICAgICAgICAgICAgICAgICAvKiAiQUFBQSoiICovCi0gIE1BVENIX1RBSUwsICAgICAgICAgICAgICAgICAgIC8qICIqQUFBQSIgKi8KLSAgTUFUQ0hfRVhBQ1QsICAgICAgICAgICAgICAgICAgLyogIkFBQUFBIiAqLwotICBNQVRDSF9MQVNUCi19IE1hdGNoVHlwZTsKLQotc3RydWN0IF9QYXR0ZXJuU3BlYwotewotICBNYXRjaE1vZGUgbWF0Y2hfbW9kZTsKLSAgTWF0Y2hUeXBlIG1hdGNoX3R5cGU7Ci0gIGd1aW50IHBhdHRlcm5fbGVuZ3RoOwotICBndWludCBtaW5fbGVuZ3RoOwotICBndWludCBtYXhfbGVuZ3RoOwotICBnY2hhciAqcGF0dGVybjsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgZ2NoYXIgKgotcmF3X3N0cnJldmVyc2UgKGNvbnN0IGdjaGFyICogc3RyLCBnc3NpemUgc2l6ZSkKLXsKLSAgZ19hc3NlcnQgKHNpemUgPiAwKTsKLSAgcmV0dXJuIGdfc3RycmV2ZXJzZSAoZ19zdHJuZHVwIChzdHIsIHNpemUpKTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotcGF0dGVybl9waF9tYXRjaCAoY29uc3QgZ2NoYXIgKiBtYXRjaF9wYXR0ZXJuLCBNYXRjaE1vZGUgbWF0Y2hfbW9kZSwKLSAgICBjb25zdCBnY2hhciAqIG1hdGNoX3N0cmluZywgZ2Jvb2xlYW4gKiB3aWxkY2FyZF9yZWFjaGVkX3ApCi17Ci0gIHJlZ2lzdGVyIGNvbnN0IGdjaGFyICpwYXR0ZXJuLCAqc3RyaW5nOwotICByZWdpc3RlciBnY2hhciBjaDsKLQotICBwYXR0ZXJuID0gbWF0Y2hfcGF0dGVybjsKLSAgc3RyaW5nID0gbWF0Y2hfc3RyaW5nOwotCi0gIGNoID0gKnBhdHRlcm47Ci0gIHBhdHRlcm4rKzsKLSAgd2hpbGUgKGNoKSB7Ci0gICAgc3dpdGNoIChjaCkgewotICAgICAgY2FzZSAnPyc6Ci0gICAgICAgIGlmICghKnN0cmluZykKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIGlmIChtYXRjaF9tb2RlID09IE1BVENIX01PREVfVVRGOCkKLSAgICAgICAgICBzdHJpbmcgPSBnX3V0ZjhfbmV4dF9jaGFyIChzdHJpbmcpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgKytzdHJpbmc7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICcqJzoKLSAgICAgICAgKndpbGRjYXJkX3JlYWNoZWRfcCA9IFRSVUU7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICBjaCA9ICpwYXR0ZXJuOwotICAgICAgICAgIHBhdHRlcm4rKzsKLSAgICAgICAgICBpZiAoY2ggPT0gJz8nKSB7Ci0gICAgICAgICAgICBpZiAoISpzdHJpbmcpCi0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIGlmIChtYXRjaF9tb2RlID09IE1BVENIX01PREVfVVRGOCkKLSAgICAgICAgICAgICAgc3RyaW5nID0gZ191dGY4X25leHRfY2hhciAoc3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgKytzdHJpbmc7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChjaCA9PSAnKicgfHwgY2ggPT0gJz8nKTsKLSAgICAgICAgaWYgKCFjaCkKLSAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgZG8gewotICAgICAgICAgIGdib29sZWFuIG5leHRfd2lsZGNhcmRfcmVhY2hlZCA9IEZBTFNFOwotICAgICAgICAgIHdoaWxlIChjaCAhPSAqc3RyaW5nKSB7Ci0gICAgICAgICAgICBpZiAoISpzdHJpbmcpCi0gICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgIGlmIChtYXRjaF9tb2RlID09IE1BVENIX01PREVfVVRGOCkKLSAgICAgICAgICAgICAgc3RyaW5nID0gZ191dGY4X25leHRfY2hhciAoc3RyaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgKytzdHJpbmc7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0cmluZysrOwotICAgICAgICAgIGlmIChwYXR0ZXJuX3BoX21hdGNoIChwYXR0ZXJuLCBtYXRjaF9tb2RlLCBzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAmbmV4dF93aWxkY2FyZF9yZWFjaGVkKSkKLSAgICAgICAgICAgIHJldHVybiBUUlVFOwotICAgICAgICAgIGlmIChuZXh0X3dpbGRjYXJkX3JlYWNoZWQpCi0gICAgICAgICAgICAvKiB0aGUgZm9ydGhjb21pbmcgcGF0dGVybiBzdWJzdHJpbmcgdXAgdG8gdGhlIG5leHQgd2lsZGNhcmQgaGFzCi0gICAgICAgICAgICAgKiBiZWVuIG1hdGNoZWQsIGJ1dCBhIG1pc21hdGNoIG9jY291cmVkIGZvciB0aGUgcmVzdCBvZiB0aGUKLSAgICAgICAgICAgICAqIHBhdHRlcm4sIGZvbGxvd2luZyB0aGUgbmV4dCB3aWxkY2FyZC4KLSAgICAgICAgICAgICAqIHRoZXJlJ3Mgbm8gbmVlZCB0byBhZHZhbmNlIHRoZSBjdXJyZW50IG1hdGNoIHBvc2l0aW9uIGFueQotICAgICAgICAgICAgICogZnVydGhlciBpZiB0aGUgcmVzdCBwYXR0ZXJuIHdpbGwgbm90IG1hdGNoLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCpzdHJpbmcpOwotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKGNoID09ICpzdHJpbmcpCi0gICAgICAgICAgc3RyaW5nKys7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNoID0gKnBhdHRlcm47Ci0gICAgcGF0dGVybisrOwotICB9Ci0KLSAgcmV0dXJuICpzdHJpbmcgPT0gMDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wYXR0ZXJuX21hdGNoIChQYXR0ZXJuU3BlYyAqIHBzcGVjLCBndWludCBzdHJpbmdfbGVuZ3RoLAotICAgIGNvbnN0IGdjaGFyICogc3RyaW5nLCBjb25zdCBnY2hhciAqIHN0cmluZ19yZXZlcnNlZCkKLXsKLSAgTWF0Y2hNb2RlIG1hdGNoX21vZGU7Ci0KLSAgZ19hc3NlcnQgKHBzcGVjICE9IE5VTEwpOwotICBnX2Fzc2VydCAoc3RyaW5nICE9IE5VTEwpOwotCi0gIGlmIChzdHJpbmdfbGVuZ3RoIDwgcHNwZWMtPm1pbl9sZW5ndGggfHwgc3RyaW5nX2xlbmd0aCA+IHBzcGVjLT5tYXhfbGVuZ3RoKQotICAgIHJldHVybiBGQUxTRTsKLQotICBtYXRjaF9tb2RlID0gcHNwZWMtPm1hdGNoX21vZGU7Ci0gIGlmIChtYXRjaF9tb2RlID09IE1BVENIX01PREVfQVVUTykgewotICAgIGlmICghZ191dGY4X3ZhbGlkYXRlIChzdHJpbmcsIHN0cmluZ19sZW5ndGgsIE5VTEwpKQotICAgICAgbWF0Y2hfbW9kZSA9IE1BVENIX01PREVfUkFXOwotICAgIGVsc2UKLSAgICAgIG1hdGNoX21vZGUgPSBNQVRDSF9NT0RFX1VURjg7Ci0gIH0KLQotICBzd2l0Y2ggKHBzcGVjLT5tYXRjaF90eXBlKSB7Ci0gICAgICBnYm9vbGVhbiBkdW1teTsKLSAgICBjYXNlIE1BVENIX0FMTDoKLSAgICAgIHJldHVybiBwYXR0ZXJuX3BoX21hdGNoIChwc3BlYy0+cGF0dGVybiwgbWF0Y2hfbW9kZSwgc3RyaW5nLCAmZHVtbXkpOwotICAgIGNhc2UgTUFUQ0hfQUxMX1RBSUw6Ci0gICAgICBpZiAoc3RyaW5nX3JldmVyc2VkKQotICAgICAgICByZXR1cm4gcGF0dGVybl9waF9tYXRjaCAocHNwZWMtPnBhdHRlcm4sIG1hdGNoX21vZGUsIHN0cmluZ19yZXZlcnNlZCwKLSAgICAgICAgICAgICZkdW1teSk7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0OwotICAgICAgICBnY2hhciAqdG1wOwotICAgICAgICBpZiAobWF0Y2hfbW9kZSA9PSBNQVRDSF9NT0RFX1VURjgpIHsKLSAgICAgICAgICB0bXAgPSBnX3V0Zjhfc3RycmV2ZXJzZSAoc3RyaW5nLCBzdHJpbmdfbGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0bXAgPSByYXdfc3RycmV2ZXJzZSAoc3RyaW5nLCBzdHJpbmdfbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBwYXR0ZXJuX3BoX21hdGNoIChwc3BlYy0+cGF0dGVybiwgbWF0Y2hfbW9kZSwgdG1wLCAmZHVtbXkpOwotICAgICAgICBnX2ZyZWUgKHRtcCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9Ci0gICAgY2FzZSBNQVRDSF9IRUFEOgotICAgICAgaWYgKHBzcGVjLT5wYXR0ZXJuX2xlbmd0aCA9PSBzdHJpbmdfbGVuZ3RoKQotICAgICAgICByZXR1cm4gbWVtY21wIChwc3BlYy0+cGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfbGVuZ3RoKSA9PSAwOwotICAgICAgZWxzZSBpZiAocHNwZWMtPnBhdHRlcm5fbGVuZ3RoKQotICAgICAgICByZXR1cm4gbWVtY21wIChwc3BlYy0+cGF0dGVybiwgc3RyaW5nLCBwc3BlYy0+cGF0dGVybl9sZW5ndGgpID09IDA7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgTUFUQ0hfVEFJTDoKLSAgICAgIGlmIChwc3BlYy0+cGF0dGVybl9sZW5ndGgpCi0gICAgICAgIC8qIGNvbXBhcmUgaW5jbC4gTlVMIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgcmV0dXJuIG1lbWNtcCAocHNwZWMtPnBhdHRlcm4sCi0gICAgICAgICAgICBzdHJpbmcgKyAoc3RyaW5nX2xlbmd0aCAtIHBzcGVjLT5wYXR0ZXJuX2xlbmd0aCksCi0gICAgICAgICAgICBwc3BlYy0+cGF0dGVybl9sZW5ndGggKyAxKSA9PSAwOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICBjYXNlIE1BVENIX0VYQUNUOgotICAgICAgaWYgKHBzcGVjLT5wYXR0ZXJuX2xlbmd0aCAhPSBzdHJpbmdfbGVuZ3RoKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBtZW1jbXAgKHBzcGVjLT5wYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19sZW5ndGgpID09IDA7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwc3BlYy0+bWF0Y2hfdHlwZSA8IE1BVENIX0xBU1QsIEZBTFNFKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1QYXR0ZXJuU3BlYyAqCi1wYXR0ZXJuX3NwZWNfbmV3IChjb25zdCBnY2hhciAqIHBhdHRlcm4sIE1hdGNoTW9kZSBtYXRjaF9tb2RlKQotewotICBQYXR0ZXJuU3BlYyAqcHNwZWM7Ci0gIGdib29sZWFuIHNlZW5fam9rZXIgPSBGQUxTRSwgc2Vlbl93aWxkY2FyZCA9IEZBTFNFLCBtb3JlX3dpbGRjYXJkcyA9IEZBTFNFOwotICBnaW50IGh3X3BvcyA9IC0xLCB0d19wb3MgPSAtMSwgaGpfcG9zID0gLTEsIHRqX3BvcyA9IC0xOwotICBnYm9vbGVhbiBmb2xsb3dzX3dpbGRjYXJkID0gRkFMU0U7Ci0gIGd1aW50IHBlbmRpbmdfam9rZXJzID0gMDsKLSAgY29uc3QgZ2NoYXIgKnM7Ci0gIGdjaGFyICpkOwotICBndWludCBpOwotCi0gIGdfYXNzZXJ0IChwYXR0ZXJuICE9IE5VTEwpOwotICBnX2Fzc2VydCAobWF0Y2hfbW9kZSAhPSBNQVRDSF9NT0RFX1VURjgKLSAgICAgIHx8IGdfdXRmOF92YWxpZGF0ZSAocGF0dGVybiwgLTEsIE5VTEwpKTsKLQotICAvKiBjYW5vbmljYWxpemUgcGF0dGVybiBhbmQgY29sbGVjdCBuZWNlc3Nhcnkgc3RhdHMgKi8KLSAgcHNwZWMgPSBnX25ldyAoUGF0dGVyblNwZWMsIDEpOwotICBwc3BlYy0+bWF0Y2hfbW9kZSA9IG1hdGNoX21vZGU7Ci0gIHBzcGVjLT5wYXR0ZXJuX2xlbmd0aCA9IHN0cmxlbiAocGF0dGVybik7Ci0gIHBzcGVjLT5taW5fbGVuZ3RoID0gMDsKLSAgcHNwZWMtPm1heF9sZW5ndGggPSAwOwotICBwc3BlYy0+cGF0dGVybiA9IGdfbmV3IChnY2hhciwgcHNwZWMtPnBhdHRlcm5fbGVuZ3RoICsgMSk7Ci0KLSAgaWYgKHBzcGVjLT5tYXRjaF9tb2RlID09IE1BVENIX01PREVfQVVUTykgewotICAgIGlmICghZ191dGY4X3ZhbGlkYXRlIChwYXR0ZXJuLCAtMSwgTlVMTCkpCi0gICAgICBwc3BlYy0+bWF0Y2hfbW9kZSA9IE1BVENIX01PREVfUkFXOwotICB9Ci0KLSAgZCA9IHBzcGVjLT5wYXR0ZXJuOwotICBmb3IgKGkgPSAwLCBzID0gcGF0dGVybjsgKnMgIT0gMDsgcysrKSB7Ci0gICAgc3dpdGNoICgqcykgewotICAgICAgY2FzZSAnKic6Ci0gICAgICAgIGlmIChmb2xsb3dzX3dpbGRjYXJkKSB7IC8qIGNvbXByZXNzIG11bHRpcGxlIHdpbGRjYXJkcyAqLwotICAgICAgICAgIHBzcGVjLT5wYXR0ZXJuX2xlbmd0aC0tOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZvbGxvd3Nfd2lsZGNhcmQgPSBUUlVFOwotICAgICAgICBpZiAoaHdfcG9zIDwgMCkKLSAgICAgICAgICBod19wb3MgPSBpOwotICAgICAgICB0d19wb3MgPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJz8nOgotICAgICAgICBwZW5kaW5nX2pva2VycysrOwotICAgICAgICBwc3BlYy0+bWluX2xlbmd0aCsrOwotICAgICAgICBpZiAocHNwZWMtPm1hdGNoX21vZGUgPT0gTUFUQ0hfTU9ERV9SQVcpIHsKLSAgICAgICAgICBwc3BlYy0+bWF4X2xlbmd0aCArPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHBzcGVjLT5tYXhfbGVuZ3RoICs9IDQ7ICAgICAgIC8qIG1heGltdW0gVVRGLTggY2hhcmFjdGVyIGxlbmd0aCAqLwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZm9yICg7IHBlbmRpbmdfam9rZXJzOyBwZW5kaW5nX2pva2Vycy0tLCBpKyspIHsKLSAgICAgICAgICAqZCsrID0gJz8nOwotICAgICAgICAgIGlmIChoal9wb3MgPCAwKQotICAgICAgICAgICAgaGpfcG9zID0gaTsKLSAgICAgICAgICB0al9wb3MgPSBpOwotICAgICAgICB9Ci0gICAgICAgIGZvbGxvd3Nfd2lsZGNhcmQgPSBGQUxTRTsKLSAgICAgICAgcHNwZWMtPm1pbl9sZW5ndGgrKzsKLSAgICAgICAgcHNwZWMtPm1heF9sZW5ndGgrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICpkKysgPSAqczsKLSAgICBpKys7Ci0gIH0KLSAgZm9yICg7IHBlbmRpbmdfam9rZXJzOyBwZW5kaW5nX2pva2Vycy0tKSB7Ci0gICAgKmQrKyA9ICc/JzsKLSAgICBpZiAoaGpfcG9zIDwgMCkKLSAgICAgIGhqX3BvcyA9IGk7Ci0gICAgdGpfcG9zID0gaTsKLSAgfQotICAqZCsrID0gMDsKLSAgc2Vlbl9qb2tlciA9IGhqX3BvcyA+PSAwOwotICBzZWVuX3dpbGRjYXJkID0gaHdfcG9zID49IDA7Ci0gIG1vcmVfd2lsZGNhcmRzID0gc2Vlbl93aWxkY2FyZCAmJiBod19wb3MgIT0gdHdfcG9zOwotICBpZiAoc2Vlbl93aWxkY2FyZCkKLSAgICBwc3BlYy0+bWF4X2xlbmd0aCA9IEdfTUFYVUlOVDsKLQotICAvKiBzcGVjaWFsIGNhc2Ugc29sZSBoZWFkL3RhaWwgd2lsZGNhcmQgb3IgZXhhY3QgbWF0Y2hlcyAqLwotICBpZiAoIXNlZW5fam9rZXIgJiYgIW1vcmVfd2lsZGNhcmRzKSB7Ci0gICAgaWYgKHBzcGVjLT5wYXR0ZXJuWzBdID09ICcqJykgewotICAgICAgcHNwZWMtPm1hdGNoX3R5cGUgPSBNQVRDSF9UQUlMOwotICAgICAgbWVtbW92ZSAocHNwZWMtPnBhdHRlcm4sIHBzcGVjLT5wYXR0ZXJuICsgMSwgLS1wc3BlYy0+cGF0dGVybl9sZW5ndGgpOwotICAgICAgcHNwZWMtPnBhdHRlcm5bcHNwZWMtPnBhdHRlcm5fbGVuZ3RoXSA9IDA7Ci0gICAgICByZXR1cm4gcHNwZWM7Ci0gICAgfQotICAgIGlmIChwc3BlYy0+cGF0dGVybl9sZW5ndGggPiAwICYmCi0gICAgICAgIHBzcGVjLT5wYXR0ZXJuW3BzcGVjLT5wYXR0ZXJuX2xlbmd0aCAtIDFdID09ICcqJykgewotICAgICAgcHNwZWMtPm1hdGNoX3R5cGUgPSBNQVRDSF9IRUFEOwotICAgICAgcHNwZWMtPnBhdHRlcm5bLS1wc3BlYy0+cGF0dGVybl9sZW5ndGhdID0gMDsKLSAgICAgIHJldHVybiBwc3BlYzsKLSAgICB9Ci0gICAgaWYgKCFzZWVuX3dpbGRjYXJkKSB7Ci0gICAgICBwc3BlYy0+bWF0Y2hfdHlwZSA9IE1BVENIX0VYQUNUOwotICAgICAgcmV0dXJuIHBzcGVjOwotICAgIH0KLSAgfQotCi0gIC8qIG5vdyBqdXN0IG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBoZWFkIG9yIHRhaWwgbWF0Y2ggc3RhcnQgKi8KLSAgdHdfcG9zID0gcHNwZWMtPnBhdHRlcm5fbGVuZ3RoIC0gMSAtIHR3X3BvczsgIC8qIGxhc3QgcG9zIHRvIHRhaWwgZGlzdGFuY2UgKi8KLSAgdGpfcG9zID0gcHNwZWMtPnBhdHRlcm5fbGVuZ3RoIC0gMSAtIHRqX3BvczsgIC8qIGxhc3QgcG9zIHRvIHRhaWwgZGlzdGFuY2UgKi8KLSAgaWYgKHNlZW5fd2lsZGNhcmQpCi0gICAgcHNwZWMtPm1hdGNoX3R5cGUgPSB0d19wb3MgPiBod19wb3MgPyBNQVRDSF9BTExfVEFJTCA6IE1BVENIX0FMTDsKLSAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2Vlbl9qb2tlciAqLwotICAgIHBzcGVjLT5tYXRjaF90eXBlID0gdGpfcG9zID4gaGpfcG9zID8gTUFUQ0hfQUxMX1RBSUwgOiBNQVRDSF9BTEw7Ci0gIGlmIChwc3BlYy0+bWF0Y2hfdHlwZSA9PSBNQVRDSF9BTExfVEFJTCkgewotICAgIGdjaGFyICp0bXAgPSBwc3BlYy0+cGF0dGVybjsKLQotICAgIGlmIChwc3BlYy0+bWF0Y2hfbW9kZSA9PSBNQVRDSF9NT0RFX1JBVykgewotICAgICAgcHNwZWMtPnBhdHRlcm4gPSByYXdfc3RycmV2ZXJzZSAocHNwZWMtPnBhdHRlcm4sIHBzcGVjLT5wYXR0ZXJuX2xlbmd0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBzcGVjLT5wYXR0ZXJuID0KLSAgICAgICAgICBnX3V0Zjhfc3RycmV2ZXJzZSAocHNwZWMtPnBhdHRlcm4sIHBzcGVjLT5wYXR0ZXJuX2xlbmd0aCk7Ci0gICAgfQotICAgIGdfZnJlZSAodG1wKTsKLSAgfQotICByZXR1cm4gcHNwZWM7Ci19Ci0KLXZvaWQKLXBhdHRlcm5fc3BlY19mcmVlIChQYXR0ZXJuU3BlYyAqIHBzcGVjKQotewotICBnX2Fzc2VydCAocHNwZWMgIT0gTlVMTCk7Ci0KLSAgZ19mcmVlIChwc3BlYy0+cGF0dGVybik7Ci0gIGdfZnJlZSAocHNwZWMpOwotfQotCi1nYm9vbGVhbgotcGF0dGVybl9tYXRjaF9zdHJpbmcgKFBhdHRlcm5TcGVjICogcHNwZWMsIGNvbnN0IGdjaGFyICogc3RyaW5nKQotewotICByZXR1cm4gcGF0dGVybl9tYXRjaCAocHNwZWMsIHN0cmxlbiAoc3RyaW5nKSwgc3RyaW5nLCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvcGF0dGVybnNwZWMuaCBiL2dzdC9tdWx0aWZpbGUvcGF0dGVybnNwZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJiOWI0MC4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlmaWxlL3BhdHRlcm5zcGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKiBHUGF0dGVybiBjb3B5IHRoYXQgc3VwcG9ydHMgcmF3IChub24tdXRmOCkgbWF0Y2hpbmcKLSAqIGJhc2VkIG9uOiBHTElCIC0gTGlicmFyeSBvZiB1c2VmdWwgcm91dGluZXMgZm9yIEMgcHJvZ3JhbW1pbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAxOTk5ICBQZXRlciBNYXR0aXMsIFJlZCBIYXQsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fUEFUVEVSTl9TUEVDX0hfXwotI2RlZmluZSBfX1BBVFRFUk5fU1BFQ19IX18KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIGVudW0KLXsKLSAgTUFUQ0hfTU9ERV9BVVRPID0gMCwKLSAgTUFUQ0hfTU9ERV9VVEY4LAotICBNQVRDSF9NT0RFX1JBVwotfSBNYXRjaE1vZGU7Ci0KLXR5cGVkZWYgc3RydWN0IF9QYXR0ZXJuU3BlYyBQYXR0ZXJuU3BlYzsKLQotUGF0dGVyblNwZWMgKiBwYXR0ZXJuX3NwZWNfbmV3ICAgICAgIChjb25zdCBnY2hhciAgKiBwYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRjaE1vZGUgICAgICBtYXRjaF9tb2RlKTsKLQotdm9pZCAgICAgICAgICBwYXR0ZXJuX3NwZWNfZnJlZSAgICAgIChQYXR0ZXJuU3BlYyAgKiBwc3BlYyk7Ci0KLWdib29sZWFuICAgICAgcGF0dGVybl9tYXRjaF9zdHJpbmcgICAoUGF0dGVyblNwZWMgICogcHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAqIHN0cmluZyk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX1BBVFRFUk5fU1BFQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aWZpbGUvdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYyBiL2dzdC9tdWx0aWZpbGUvdGVzdC1zcGxpdG11eHBhcnRyZWFkZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3NTZhNi4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlmaWxlL3Rlc3Qtc3BsaXRtdXhwYXJ0cmVhZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RzcGxpdG11eHBhcnRyZWFkZXIuaCIKLSNpbmNsdWRlICJnc3RzcGxpdG11eHNyYy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChzcGxpdG11eF9kZWJ1Zyk7Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqY29uc3QgcGF0aCA9ICJvdXQwMDEubXA0IjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0N1c3RvbURhdGEKLXsKLSAgR3N0U3BsaXRNdXhQYXJ0UmVhZGVyICpyZWFkZXI7Ci0gIEdNYWluTG9vcCAqbWFpbl9sb29wOwotICBHc3RCdXMgKmJ1czsKLX0gQ3VzdG9tRGF0YTsKLQotc3RhdGljIHZvaWQKLXBhcnRfcHJlcGFyZWQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlcikKLXsKLSAgZ19wcmludCAoIlBhcnQgcHJlcGFyZWRcbiIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWhhbmRsZV9tZXNzYWdlIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIEN1c3RvbURhdGEgKiBkYXRhKQotewotICBHRXJyb3IgKmVycjsKLSAgZ2NoYXIgKmRlYnVnX2luZm87Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkZWJ1Z19pbmZvKTsKLSAgICAgIGdfcHJpbnQgKCJFcnJvciByZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iLAotICAgICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAobXNnLT5zcmMpLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ19wcmludCAoIkRlYnVnZ2luZyBpbmZvcm1hdGlvbjogJXNcbiIsIGRlYnVnX2luZm8gPyBkZWJ1Z19pbmZvIDogIm5vbmUiKTsKLSAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgZ19mcmVlIChkZWJ1Z19pbmZvKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGRhdGEtPm1haW5fbG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfcHJpbnQgKCJFbmQtT2YtU3RyZWFtIHJlYWNoZWQuXG4iKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGRhdGEtPm1haW5fbG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zdGFydF9yZWFkZXIgKEN1c3RvbURhdGEgKiBkYXRhKQotewotICBnX3ByaW50ICgiUHJlcGFyaW5nIHBhcnQgcmVhZGVyIGZvciAlc1xuIiwgcGF0aCk7Ci0gIGdzdF9zcGxpdG11eF9wYXJ0X3JlYWRlcl9wcmVwYXJlIChkYXRhLT5yZWFkZXIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotaGFuZGxlX2dldF9wYWQgKEdzdFNwbGl0TXV4UGFydFJlYWRlciAqIHJlYWRlciwgR3N0UGFkICogc3JjX3BhZCwKLSAgICBDdXN0b21EYXRhICogZGF0YSkKLXsKLSAgLyogQ3JlYXRlIGEgZHVtbXkgdGFyZ2V0IHBhZCBmb3IgdGhlIHJlYWRlciAqLwotICBHc3RQYWQgKm5ld19wYWQgPSBnX29iamVjdF9uZXcgKFNQTElUTVVYX1RZUEVfU1JDX1BBRCwKLSAgICAgICJuYW1lIiwgR1NUX1BBRF9OQU1FIChzcmNfcGFkKSwgImRpcmVjdGlvbiIsIEdTVF9QQURfU1JDLCBOVUxMKTsKLQotICBnX3ByaW50ICgiQ3JlYXRpbmcgbmV3IGR1bW15IHBhZCAlc1xuIiwgR1NUX1BBRF9OQU1FIChzcmNfcGFkKSk7Ci0KLSAgcmV0dXJuIG5ld19wYWQ7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBDdXN0b21EYXRhIGRhdGE7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgZGF0YS5tYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICBkYXRhLnJlYWRlciA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfU1BMSVRNVVhfUEFSVF9SRUFERVIsIE5VTEwpOwotICBkYXRhLmJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UX0NBU1QgKGRhdGEucmVhZGVyKSk7Ci0KLSAgLyogTGlzdGVuIGZvciBidXMgbWVzc2FnZXMgKi8KLSAgZ3N0X2J1c19hZGRfd2F0Y2ggKGRhdGEuYnVzLCAoR3N0QnVzRnVuYykgaGFuZGxlX21lc3NhZ2UsICZkYXRhKTsKLQotICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2xvY2F0aW9uIChkYXRhLnJlYWRlciwgcGF0aCk7Ci0KLSAgLyogQ29ubmVjdCB0byBwcmVwYXJlIHNpZ25hbCAqLwotICBnX3NpZ25hbF9jb25uZWN0IChkYXRhLnJlYWRlciwgInByZXBhcmVkIiwgKEdDYWxsYmFjaykgcGFydF9wcmVwYXJlZCwgJmRhdGEpOwotICBnc3Rfc3BsaXRtdXhfcGFydF9yZWFkZXJfc2V0X2NhbGxiYWNrcyAoZGF0YS5yZWFkZXIsICZkYXRhLAotICAgICAgKEdzdFNwbGl0TXV4UGFydFJlYWRlclBhZENiKSBoYW5kbGVfZ2V0X3BhZCk7Ci0KLSAgZ19pZGxlX2FkZCAoKEdTb3VyY2VGdW5jKSBzdGFydF9yZWFkZXIsICZkYXRhKTsKLQotICAvKiBSdW4gbWFpbmxvb3AgKi8KLSAgZ19tYWluX2xvb3BfcnVuIChkYXRhLm1haW5fbG9vcCk7Ci0KLSAgZ3N0X3NwbGl0bXV4X3BhcnRfcmVhZGVyX3VucHJlcGFyZSAoZGF0YS5yZWFkZXIpOwotCi0gIGdfbWFpbl9sb29wX3VucmVmIChkYXRhLm1haW5fbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEuYnVzKTsKLSAgZ19vYmplY3RfdW5yZWYgKGRhdGEucmVhZGVyKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aXBhcnQvTWFrZWZpbGUuYW0gYi9nc3QvbXVsdGlwYXJ0L01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWI2NzBlLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aXBhcnQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG11bHRpcGFydC5sYQotCi1saWJnc3RtdWx0aXBhcnRfbGFfU09VUkNFUyA9IG11bHRpcGFydC5jIG11bHRpcGFydGRlbXV4LmMgbXVsdGlwYXJ0bXV4LmMKLWxpYmdzdG11bHRpcGFydF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKQotbGliZ3N0bXVsdGlwYXJ0X2xhX0xJQkFERCA9ICQoR1NUX0xJQlMpICQoR1NUX0JBU0VfTElCUykKLWxpYmdzdG11bHRpcGFydF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RtdWx0aXBhcnRfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBtdWx0aXBhcnRkZW11eC5oIG11bHRpcGFydG11eC5oCmRpZmYgLS1naXQgYS9nc3QvbXVsdGlwYXJ0L01ha2VmaWxlLmluIGIvZ3N0L211bHRpcGFydC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcwNjRkMS4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlwYXJ0L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTI3ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9tdWx0aXBhcnQKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RtdWx0aXBhcnRfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdG11bHRpcGFydF9sYV9PQkpFQ1RTID0gbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydC5sbyBcCi0JbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydGRlbXV4LmxvIFwKLQlsaWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0bXV4LmxvCi1saWJnc3RtdWx0aXBhcnRfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0bXVsdGlwYXJ0X2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RtdWx0aXBhcnRfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RtdWx0aXBhcnRfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RtdWx0aXBhcnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0bXVsdGlwYXJ0X2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdG11bHRpcGFydF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RtdWx0aXBhcnRfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0bXVsdGlwYXJ0LmxhCi1saWJnc3RtdWx0aXBhcnRfbGFfU09VUkNFUyA9IG11bHRpcGFydC5jIG11bHRpcGFydGRlbXV4LmMgbXVsdGlwYXJ0bXV4LmMKLWxpYmdzdG11bHRpcGFydF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKQotbGliZ3N0bXVsdGlwYXJ0X2xhX0xJQkFERCA9ICQoR1NUX0xJQlMpICQoR1NUX0JBU0VfTElCUykKLWxpYmdzdG11bHRpcGFydF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RtdWx0aXBhcnRfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gbXVsdGlwYXJ0ZGVtdXguaCBtdWx0aXBhcnRtdXguaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L211bHRpcGFydC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvbXVsdGlwYXJ0L01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0bXVsdGlwYXJ0LmxhOiAkKGxpYmdzdG11bHRpcGFydF9sYV9PQkpFQ1RTKSAkKGxpYmdzdG11bHRpcGFydF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0bXVsdGlwYXJ0X2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RtdWx0aXBhcnRfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdG11bHRpcGFydF9sYV9PQkpFQ1RTKSAkKGxpYmdzdG11bHRpcGFydF9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0ZGVtdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0bXV4LlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0LmxvOiBtdWx0aXBhcnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpcGFydF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aXBhcnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnQuVHBvIC1jIC1vIGxpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnQubG8gYHRlc3QgLWYgJ211bHRpcGFydC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWx0aXBhcnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydC5UcG8gJChERVBESVIpL2xpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nbXVsdGlwYXJ0LmMnIG9iamVjdD0nbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpcGFydF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aXBhcnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydC5sbyBgdGVzdCAtZiAnbXVsdGlwYXJ0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG11bHRpcGFydC5jCi0KLWxpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnRkZW11eC5sbzogbXVsdGlwYXJ0ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpcGFydF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aXBhcnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnRkZW11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydGRlbXV4LlRwbyAtYyAtbyBsaWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0ZGVtdXgubG8gYHRlc3QgLWYgJ211bHRpcGFydGRlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG11bHRpcGFydGRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnRkZW11eC5UcG8gJChERVBESVIpL2xpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnRkZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtdWx0aXBhcnRkZW11eC5jJyBvYmplY3Q9J2xpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnRkZW11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG11bHRpcGFydF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RtdWx0aXBhcnRfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydGRlbXV4LmxvIGB0ZXN0IC1mICdtdWx0aXBhcnRkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BtdWx0aXBhcnRkZW11eC5jCi0KLWxpYmdzdG11bHRpcGFydF9sYS1tdWx0aXBhcnRtdXgubG86IG11bHRpcGFydG11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlwYXJ0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpcGFydF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydG11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydG11eC5UcG8gLWMgLW8gbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydG11eC5sbyBgdGVzdCAtZiAnbXVsdGlwYXJ0bXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG11bHRpcGFydG11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0bXV4LlRwbyAkKERFUERJUikvbGliZ3N0bXVsdGlwYXJ0X2xhLW11bHRpcGFydG11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdtdWx0aXBhcnRtdXguYycgb2JqZWN0PSdsaWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0bXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0bXVsdGlwYXJ0X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG11bHRpcGFydF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RtdWx0aXBhcnRfbGEtbXVsdGlwYXJ0bXV4LmxvIGB0ZXN0IC1mICdtdWx0aXBhcnRtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgbXVsdGlwYXJ0bXV4LmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L211bHRpcGFydC9tdWx0aXBhcnQuYyBiL2dzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZjEwNjIuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpcGFydC9tdWx0aXBhcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJtdWx0aXBhcnRkZW11eC5oIgotI2luY2x1ZGUgIm11bHRpcGFydG11eC5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdzdF9tdWx0aXBhcnRfZGVtdXhfcGx1Z2luX2luaXQgKHBsdWdpbik7Ci0gIGdzdF9tdWx0aXBhcnRfbXV4X3BsdWdpbl9pbml0IChwbHVnaW4pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgbXVsdGlwYXJ0LAotICAgICJtdWx0aXBhcnQgc3RyZWFtIG1hbmlwdWxhdGlvbiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmMgYi9nc3QvbXVsdGlwYXJ0L211bHRpcGFydGRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZTY3YzIuLjAwMDAwMDAKLS0tIGEvZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsODEwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdG11bHRpcGFydGRlbXV4LmM6IG11bHRpcGFydCBzdHJlYW0gZGVtdXhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW11bHRpcGFydGRlbXV4Ci0gKiBAc2VlX2Fsc286ICNHc3RNdWx0aXBhcnRNdXgKLSAqCi0gKiBNdWx0aXBhcnREZW11eCB1c2VzIHRoZSBDb250ZW50LXR5cGUgZmllbGQgb2YgaW5jb21pbmcgYnVmZmVycyB0byBkZW11eCBhbmQgCi0gKiBwdXNoIGRhdGEgdG8gZHluYW1pYyBzb3VyY2UgcGFkcy4gTW9zdCBvZiB0aGUgdGltZSBtdWx0aXBhcnQgc3RyZWFtcyBhcmUgCi0gKiBzZXF1ZW50aWFsIEpQRUcgZnJhbWVzIGdlbmVyYXRlZCBmcm9tIGEgbGl2ZSBzb3VyY2Ugc3VjaCBhcyBhIG5ldHdvcmsgc291cmNlCi0gKiBvciBhIGNhbWVyYS4KLSAqCi0gKiBUaGUgb3V0cHV0IGJ1ZmZlcnMgb2YgdGhlIG11bHRpcGFydGRlbXV4IHR5cGljYWxseSBoYXZlIG5vIHRpbWVzdGFtcHMgYW5kIGFyZQotICogdXN1YWxseSBwbGF5ZWQgYXMgZmFzdCBhcyBwb3NzaWJsZSAoYXQgdGhlIHJhdGUgdGhhdCB0aGUgc291cmNlIHByb3ZpZGVzIHRoZQotICogZGF0YSkuCi0gKgotICogdGhlIGNvbnRlbnQgaW4gbXVsdGlwYXJ0IGZpbGVzIGlzIHNlcGFyYXRlZCB3aXRoIGEgYm91bmRhcnkgc3RyaW5nIHRoYXQgY2FuCi0gKiBiZSBjb25maWd1cmVkIHNwZWNpZmljYWxseSB3aXRoIHRoZSAjR3N0TXVsdGlwYXJ0RGVtdXg6Ym91bmRhcnkgcHJvcGVydHkKLSAqIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF1dG9kZXRlY3RlZC4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+U2FtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj0vdG1wL3Rlc3QubXVsdGlwYXJ0ICEgbXVsdGlwYXJ0ZGVtdXggISBpbWFnZS9qcGVnLGZyYW1lcmF0ZT1cKGZyYWN0aW9uXCk1LzEgISBqcGVncGFyc2UgISBqcGVnZGVjICEgdmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luawotICogXXwgYSBzaW1wbGUgcGlwZWxpbmUgdG8gZGVtdXggYSBtdWx0aXBhcnQgZmlsZSBtdXhlZCB3aXRoICNHc3RNdWx0aXBhcnRNdXgKLSAqIGNvbnRhaW5pbmcgSlBFRyBmcmFtZXMuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIm11bHRpcGFydGRlbXV4LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9tdWx0aXBhcnRfZGVtdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X211bHRpcGFydF9kZW11eF9kZWJ1ZwotCi0jZGVmaW5lIERFRkFVTFRfQk9VTkRBUlkJCU5VTEwKLSNkZWZpbmUgREVGQVVMVF9TSU5HTEVfU1RSRUFNCUZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0JPVU5EQVJZLAotICBQUk9QX1NJTkdMRV9TVFJFQU0KLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBtdWx0aXBhcnRfZGVtdXhfc3JjX3RlbXBsYXRlX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmNfJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgbXVsdGlwYXJ0X2RlbXV4X3NpbmtfdGVtcGxhdGVfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIikKLSAgICApOwotCi10eXBlZGVmIHN0cnVjdAotewotICBjb25zdCBnY2hhciAqa2V5OwotICBjb25zdCBnY2hhciAqdmFsOwotfSBHc3ROYW1lc01hcDsKLQotLyogY29udmVydCBmcm9tIG1pbWUgdHlwZXMgdG8gZ3N0IHN0cnVjdHVyZSBuYW1lcy4gQWRkIG1vcmUgd2hlbiBuZWVkZWQuIFRoZQotICogbWltZS10eXBlIGlzIHN0b3JlZCBhcyBsb3dlcmNhc2UgKi8KLXN0YXRpYyBjb25zdCBHc3ROYW1lc01hcCBnc3RuYW1lc1tdID0gewotICAvKiBSRkMgMjA0NiBzYXlzIGF1ZGlvL2Jhc2ljIGlzIG11bGF3LCBtb25vLCA4MDAwSHogKi8KLSAgeyJhdWRpby9iYXNpYyIsICJhdWRpby94LW11bGF3LCBjaGFubmVscz0xLCByYXRlPTgwMDAifSwKLSAgeyJhdWRpby9nNzI2LTE2IiwKLSAgICAgICJhdWRpby94LWFkcGNtLCBiaXRyYXRlPTE2MDAwLCBsYXlvdXQ9ZzcyNiwgY2hhbm5lbHM9MSwgcmF0ZT04MDAwIn0sCi0gIHsiYXVkaW8vZzcyNi0yNCIsCi0gICAgICAiYXVkaW8veC1hZHBjbSwgYml0cmF0ZT0yNDAwMCwgbGF5b3V0PWc3MjYsIGNoYW5uZWxzPTEsIHJhdGU9ODAwMCJ9LAotICB7ImF1ZGlvL2c3MjYtMzIiLAotICAgICAgImF1ZGlvL3gtYWRwY20sIGJpdHJhdGU9MzIwMDAsIGxheW91dD1nNzI2LCBjaGFubmVscz0xLCByYXRlPTgwMDAifSwKLSAgeyJhdWRpby9nNzI2LTQwIiwKLSAgICAgICJhdWRpby94LWFkcGNtLCBiaXRyYXRlPTQwMDAwLCBsYXlvdXQ9ZzcyNiwgY2hhbm5lbHM9MSwgcmF0ZT04MDAwIn0sCi0gIC8qIFBhbmFzb25pYyBOZXR3b3JrIENhbWVyYXMgbm9uLXN0YW5kYXJkIHR5cGVzICovCi0gIHsiYXVkaW8vZzcyNiIsCi0gICAgICAiYXVkaW8veC1hZHBjbSwgYml0cmF0ZT0zMjAwMCwgbGF5b3V0PWc3MjYsIGNoYW5uZWxzPTEsIHJhdGU9ODAwMCJ9LAotICB7TlVMTCwgTlVMTH0KLX07Ci0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X211bHRpcGFydF9kZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXVsdGlwYXJ0X2RlbXV4X2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQgZ3N0X211bHRpcGFydF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9tdWx0aXBhcnRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZCBnc3RfbXVsdGlwYXJ0X2RlbXV4X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi0jZGVmaW5lIGdzdF9tdWx0aXBhcnRfZGVtdXhfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0TXVsdGlwYXJ0RGVtdXgsIGdzdF9tdWx0aXBhcnRfZGVtdXgsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpcGFydF9kZW11eF9jbGFzc19pbml0IChHc3RNdWx0aXBhcnREZW11eENsYXNzICoga2xhc3MpCi17Ci0gIGludCBpOwotCi0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9tdWx0aXBhcnRfZGVtdXhfZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X211bHRpcGFydF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9tdWx0aXBhcnRfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQk9VTkRBUlksCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiYm91bmRhcnkiLCAiQm91bmRhcnkiLAotICAgICAgICAgICJUaGUgYm91bmRhcnkgc3RyaW5nIHNlcGFyYXRpbmcgZGF0YSwgYXV0b21hdGljIGlmIE5VTEwiLAotICAgICAgICAgIERFRkFVTFRfQk9VTkRBUlksCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVCB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0TXVsdGlwYXJ0RGVtdXg6c2luZ2xlLXN0cmVhbToKLSAgICoKLSAgICogQXNzdW1lIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgc3RyZWFtIHdob3NlIGNvbnRlbnQtdHlwZSB3aWxsCi0gICAqIG5vdCBjaGFuZ2UgYW5kIGVtaXQgbm8tbW9yZS1wYWRzIGFzIHNvb24gYXMgdGhlIGZpcnN0IGJvdW5kYXJ5Ci0gICAqIGNvbnRlbnQgaXMgcGFyc2VkLCBkZWNvZGVkLCBhbmQgcGFkcyBhcmUgbGlua2VkLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TSU5HTEVfU1RSRUFNLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaW5nbGUtc3RyZWFtIiwgIlNpbmdsZSBTdHJlYW0iLAotICAgICAgICAgICJBc3N1bWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBzdHJlYW0gd2hvc2UgY29udGVudC10eXBlIHdpbGwgbm90IGNoYW5nZSBhbmQgZW1pdCBuby1tb3JlLXBhZHMgYXMgc29vbiBhcyB0aGUgZmlyc3QgYm91bmRhcnkgY29udGVudCBpcyBwYXJzZWQsIGRlY29kZWQsIGFuZCBwYWRzIGFyZSBsaW5rZWQiLAotICAgICAgICAgIERFRkFVTFRfU0lOR0xFX1NUUkVBTSwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLQotICAvKiBwb3B1bGF0ZSBnc3QgbmFtZXMgYW5kIG1pbWUgdHlwZXMgcGFpcnMgKi8KLSAga2xhc3MtPmdzdG5hbWVzID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOwotICBmb3IgKGkgPSAwOyBnc3RuYW1lc1tpXS5rZXk7IGkrKykgewotICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGtsYXNzLT5nc3RuYW1lcywgKGdwb2ludGVyKSBnc3RuYW1lc1tpXS5rZXksCi0gICAgICAgIChncG9pbnRlcikgZ3N0bmFtZXNbaV0udmFsKTsKLSAgfQotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJm11bHRpcGFydF9kZW11eF9zaW5rX3RlbXBsYXRlX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZtdWx0aXBhcnRfZGVtdXhfc3JjX3RlbXBsYXRlX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiTXVsdGlwYXJ0IGRlbXV4ZXIiLAotICAgICAgIkNvZGVjL0RlbXV4ZXIiLCAiZGVtdXggbXVsdGlwYXJ0IHN0cmVhbXMiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+LCBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlwYXJ0X2RlbXV4X2luaXQgKEdzdE11bHRpcGFydERlbXV4ICogbXVsdGlwYXJ0KQotewotICAvKiBjcmVhdGUgdGhlIHNpbmsgcGFkICovCi0gIG11bHRpcGFydC0+c2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJm11bHRpcGFydF9kZW11eF9zaW5rX3RlbXBsYXRlX2ZhY3RvcnksCi0gICAgICAic2luayIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChtdWx0aXBhcnQpLCBtdWx0aXBhcnQtPnNpbmtwYWQpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXVsdGlwYXJ0LT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aXBhcnRfZGVtdXhfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKG11bHRpcGFydC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2V2ZW50KSk7Ci0KLSAgbXVsdGlwYXJ0LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBtdWx0aXBhcnQtPmJvdW5kYXJ5ID0gREVGQVVMVF9CT1VOREFSWTsKLSAgbXVsdGlwYXJ0LT5taW1lX3R5cGUgPSBOVUxMOwotICBtdWx0aXBhcnQtPmNvbnRlbnRfbGVuZ3RoID0gLTE7Ci0gIG11bHRpcGFydC0+aGVhZGVyX2NvbXBsZXRlZCA9IEZBTFNFOwotICBtdWx0aXBhcnQtPnNjYW5wb3MgPSAwOwotICBtdWx0aXBhcnQtPnNpbmdsZVN0cmVhbSA9IERFRkFVTFRfU0lOR0xFX1NUUkVBTTsKLSAgbXVsdGlwYXJ0LT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gIG11bHRpcGFydC0+Z3JvdXBfaWQgPSBHX01BWFVJTlQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlwYXJ0X2RlbXV4X3JlbW92ZV9zcmNfcGFkcyAoR3N0TXVsdGlwYXJ0RGVtdXggKiBkZW11eCkKLXsKLSAgd2hpbGUgKGRlbXV4LT5zcmNwYWRzICE9IE5VTEwpIHsKLSAgICBHc3RNdWx0aXBhcnRQYWQgKm1wcGFkID0gZGVtdXgtPnNyY3BhZHMtPmRhdGE7Ci0KLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVCAoZGVtdXgpLCBtcHBhZC0+cGFkKTsKLSAgICBnX2ZyZWUgKG1wcGFkLT5taW1lKTsKLSAgICBnX2ZyZWUgKG1wcGFkKTsKLSAgICBkZW11eC0+c3JjcGFkcyA9IGdfc2xpc3RfZGVsZXRlX2xpbmsgKGRlbXV4LT5zcmNwYWRzLCBkZW11eC0+c3JjcGFkcyk7Ci0gIH0KLSAgZGVtdXgtPnNyY3BhZHMgPSBOVUxMOwotICBkZW11eC0+bnVtcGFkcyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlwYXJ0X2RlbXV4X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE11bHRpcGFydERlbXV4ICpkZW11eCA9IEdTVF9NVUxUSVBBUlRfREVNVVggKG9iamVjdCk7Ci0KLSAgaWYgKGRlbXV4LT5hZGFwdGVyICE9IE5VTEwpCi0gICAgZ19vYmplY3RfdW5yZWYgKGRlbXV4LT5hZGFwdGVyKTsKLSAgZGVtdXgtPmFkYXB0ZXIgPSBOVUxMOwotICBnX2ZyZWUgKGRlbXV4LT5ib3VuZGFyeSk7Ci0gIGRlbXV4LT5ib3VuZGFyeSA9IE5VTEw7Ci0gIGdfZnJlZSAoZGVtdXgtPm1pbWVfdHlwZSk7Ci0gIGRlbXV4LT5taW1lX3R5cGUgPSBOVUxMOwotICBnc3RfbXVsdGlwYXJ0X2RlbXV4X3JlbW92ZV9zcmNfcGFkcyAoZGVtdXgpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotZ3N0X211bHRpcGFydF9kZW11eF9nZXRfZ3N0bmFtZSAoR3N0TXVsdGlwYXJ0RGVtdXggKiBkZW11eCwgZ2NoYXIgKiBtaW1ldHlwZSkKLXsKLSAgR3N0TXVsdGlwYXJ0RGVtdXhDbGFzcyAqa2xhc3M7Ci0gIGNvbnN0IGdjaGFyICpnc3RuYW1lOwotCi0gIGtsYXNzID0gR1NUX01VTFRJUEFSVF9ERU1VWF9HRVRfQ0xBU1MgKGRlbXV4KTsKLQotICAvKiB1c2UgaGFzaHRhYmxlIHRvIGNvbnZlcnQgdG8gZ3N0IG5hbWUgKi8KLSAgZ3N0bmFtZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGtsYXNzLT5nc3RuYW1lcywgbWltZXR5cGUpOwotICBpZiAoZ3N0bmFtZSA9PSBOVUxMKSB7Ci0gICAgLyogbm8gZ3N0IG5hbWUgbWFwcGluZywgdXNlIG1pbWUgdHlwZSAqLwotICAgIGdzdG5hbWUgPSBtaW1ldHlwZTsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImdzdCBuYW1lIGZvciAlcyBpcyAlcyIsIG1pbWV0eXBlLCBnc3RuYW1lKTsKLSAgcmV0dXJuIGdzdG5hbWU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXVsdGlwYXJ0X2NvbWJpbmVfZmxvd3MgKEdzdE11bHRpcGFydERlbXV4ICogZGVtdXgsIEdzdE11bHRpcGFydFBhZCAqIHBhZCwKLSAgICBHc3RGbG93UmV0dXJuIHJldCkKLXsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIC8qIHN0b3JlIHRoZSB2YWx1ZSAqLwotICBwYWQtPmxhc3RfcmV0ID0gcmV0OwotCi0gIC8qIGFueSBvdGhlciBlcnJvciB0aGF0IGlzIG5vdC1saW5rZWQgY2FuIGJlIHJldHVybmVkIHJpZ2h0Ci0gICAqIGF3YXkgKi8KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19OT1RfTElOS0VEKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBvbmx5IHJldHVybiBOT1RfTElOS0VEIGlmIGFsbCBvdGhlciBwYWRzIHJldHVybmVkIE5PVF9MSU5LRUQgKi8KLSAgZm9yICh3YWxrID0gZGVtdXgtPnNyY3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0TXVsdGlwYXJ0UGFkICpvcGFkID0gKEdzdE11bHRpcGFydFBhZCAqKSB3YWxrLT5kYXRhOwotCi0gICAgcmV0ID0gb3BhZC0+bGFzdF9yZXQ7Ci0gICAgLyogc29tZSBvdGhlciByZXR1cm4gdmFsdWUgKG11c3QgYmUgU1VDQ0VTUyBidXQgd2UgY2FuIHJldHVybgotICAgICAqIG90aGVyIHZhbHVlcyBhcyB3ZWxsKSAqLwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKLSAgICAgIGdvdG8gZG9uZTsKLSAgfQotICAvKiBpZiB3ZSBnZXQgaGVyZSwgYWxsIG90aGVyIHBhZHMgd2VyZSB1bmxpbmtlZCBhbmQgd2UgcmV0dXJuCi0gICAqIE5PVF9MSU5LRUQgdGhlbiAqLwotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdE11bHRpcGFydFBhZCAqCi1nc3RfbXVsdGlwYXJ0X2ZpbmRfcGFkX2J5X21pbWUgKEdzdE11bHRpcGFydERlbXV4ICogZGVtdXgsIGdjaGFyICogbWltZSwKLSAgICBnYm9vbGVhbiAqIGNyZWF0ZWQpCi17Ci0gIEdTTGlzdCAqd2FsazsKLQotICB3YWxrID0gZGVtdXgtPnNyY3BhZHM7Ci0gIHdoaWxlICh3YWxrKSB7Ci0gICAgR3N0TXVsdGlwYXJ0UGFkICpwYWQgPSAoR3N0TXVsdGlwYXJ0UGFkICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoIXN0cmNtcCAocGFkLT5taW1lLCBtaW1lKSkgewotICAgICAgaWYgKGNyZWF0ZWQpIHsKLSAgICAgICAgKmNyZWF0ZWQgPSBGQUxTRTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBwYWQ7Ci0gICAgfQotCi0gICAgd2FsayA9IHdhbGstPm5leHQ7Ci0gIH0KLSAgLyogcGFkIG5vdCBmb3VuZCwgY3JlYXRlIGl0ICovCi0gIHsKLSAgICBHc3RQYWQgKnBhZDsKLSAgICBHc3RNdWx0aXBhcnRQYWQgKm1wcGFkOwotICAgIGdjaGFyICpuYW1lOwotICAgIGNvbnN0IGdjaGFyICpjYXBzbmFtZTsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIGdjaGFyICpzdHJlYW1faWQ7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgbXBwYWQgPSBnX25ldzAgKEdzdE11bHRpcGFydFBhZCwgMSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImNyZWF0aW5nIHBhZCB3aXRoIG1pbWU6ICVzIiwgbWltZSk7Ci0KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyV1IiwgZGVtdXgtPm51bXBhZHMpOwotICAgIHBhZCA9Ci0gICAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmbXVsdGlwYXJ0X2RlbXV4X3NyY190ZW1wbGF0ZV9mYWN0b3J5LAotICAgICAgICBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotCi0gICAgbXBwYWQtPnBhZCA9IHBhZDsKLSAgICBtcHBhZC0+bWltZSA9IGdfc3RyZHVwIChtaW1lKTsKLSAgICBtcHBhZC0+bGFzdF9yZXQgPSBHU1RfRkxPV19PSzsKLSAgICBtcHBhZC0+bGFzdF90cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgbXBwYWQtPmRpc2NvbnQgPSBUUlVFOwotCi0gICAgZGVtdXgtPnNyY3BhZHMgPSBnX3NsaXN0X3ByZXBlbmQgKGRlbXV4LT5zcmNwYWRzLCBtcHBhZCk7Ci0gICAgZGVtdXgtPm51bXBhZHMrKzsKLQotICAgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHBhZCk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQsIFRSVUUpOwotCi0gICAgLyogcHJlcGFyZSBhbmQgc2VuZCBzdHJlYW0tc3RhcnQgKi8KLSAgICBpZiAoIWRlbXV4LT5oYXZlX2dyb3VwX2lkKSB7Ci0gICAgICBldmVudCA9IGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoZGVtdXgtPnNpbmtwYWQsCi0gICAgICAgICAgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCk7Ci0KLSAgICAgIGlmIChldmVudCkgewotICAgICAgICBkZW11eC0+aGF2ZV9ncm91cF9pZCA9Ci0gICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2VfZ3JvdXBfaWQgKGV2ZW50LCAmZGVtdXgtPmdyb3VwX2lkKTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9IGVsc2UgaWYgKCFkZW11eC0+aGF2ZV9ncm91cF9pZCkgewotICAgICAgICBkZW11eC0+aGF2ZV9ncm91cF9pZCA9IFRSVUU7Ci0gICAgICAgIGRlbXV4LT5ncm91cF9pZCA9IGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3RyZWFtX2lkID0gZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkIChwYWQsCi0gICAgICAgIEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgZGVtdXgtPm1pbWVfdHlwZSk7Ci0KLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICAgIGlmIChkZW11eC0+aGF2ZV9ncm91cF9pZCkKLSAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQgKGV2ZW50LCBkZW11eC0+Z3JvdXBfaWQpOwotCi0gICAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKHBhZCwgZXZlbnQpOwotICAgIGdfZnJlZSAoc3RyZWFtX2lkKTsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICAgIC8qIHRha2UgdGhlIG1pbWUgdHlwZSwgY29udmVydCBpdCB0byB0aGUgY2FwcyBuYW1lICovCi0gICAgY2Fwc25hbWUgPSBnc3RfbXVsdGlwYXJ0X2RlbXV4X2dldF9nc3RuYW1lIChkZW11eCwgbWltZSk7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzbmFtZSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJjYXBzIGZvciBwYWQ6ICVzIiwgY2Fwc25hbWUpOwotICAgIGdzdF9wYWRfc2V0X2NhcHMgKHBhZCwgY2Fwcyk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCBwYWQpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChjcmVhdGVkKSB7Ci0gICAgICAqY3JlYXRlZCA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKGRlbXV4LT5zaW5nbGVTdHJlYW0pIHsKLSAgICAgIGdzdF9lbGVtZW50X25vX21vcmVfcGFkcyAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbXBwYWQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nZXRfbGluZV9lbmQgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGNvbnN0IGd1aW50OCAqIGRhdGFlbmQsIGd1aW50OCAqKiBlbmQsCi0gICAgZ3VpbnQ4ICoqIG5leHQpCi17Ci0gIGd1aW50OCAqeDsKLSAgZ2Jvb2xlYW4gZm91bmRyID0gRkFMU0U7Ci0KLSAgZm9yICh4ID0gKGd1aW50OCAqKSBkYXRhOyB4IDwgZGF0YWVuZDsgeCsrKSB7Ci0gICAgaWYgKCp4ID09ICdccicpIHsKLSAgICAgIGZvdW5kciA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmICgqeCA9PSAnXG4nKSB7Ci0gICAgICAqZW5kID0geCAtIChmb3VuZHIgPyAxIDogMCk7Ci0gICAgICAqbmV4dCA9IHggKyAxOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGd1aW50Ci1nZXRfbWltZV9sZW4gKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IG1heGxlbikKLXsKLSAgZ3VpbnQ4ICp4OwotCi0gIHggPSAoZ3VpbnQ4ICopIGRhdGE7Ci0gIHdoaWxlICgqeCAhPSAnXDAnICYmICp4ICE9ICdccicgJiYgKnggIT0gJ1xuJyAmJiAqeCAhPSAnOycpIHsKLSAgICB4Kys7Ci0gIH0KLSAgcmV0dXJuIHggLSBkYXRhOwotfQotCi1zdGF0aWMgZ2ludAotbXVsdGlwYXJ0X3BhcnNlX2hlYWRlciAoR3N0TXVsdGlwYXJ0RGVtdXggKiBtdWx0aXBhcnQpCi17Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhZW5kOwotICBnY2hhciAqYm91bmRhcnk7Ci0gIGludCBib3VuZGFyeV9sZW47Ci0gIGludCBkYXRhbGVuOwotICBndWludDggKnBvczsKLSAgZ3VpbnQ4ICplbmQsICpuZXh0OwotCi0gIGRhdGFsZW4gPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKG11bHRpcGFydC0+YWRhcHRlcik7Ci0gIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKG11bHRpcGFydC0+YWRhcHRlciwgZGF0YWxlbik7Ci0gIGRhdGFlbmQgPSBkYXRhICsgZGF0YWxlbjsKLQotICAvKiBTa2lwIGxlYWRpbmcgd2hpdGVzcGFjZSwgcG9zIGVuZHBvc2l0aW9uIHNob3VsZCBhdCBsZWFzdCBsZWF2ZSBzcGFjZSBmb3IKLSAgICogdGhlIGJvdW5kYXJ5IGFuZCBhIFxuICovCi0gIGZvciAocG9zID0gKGd1aW50OCAqKSBkYXRhOyBwb3MgPCBkYXRhZW5kIC0gNCAmJiBnX2FzY2lpX2lzc3BhY2UgKCpwb3MpOwotICAgICAgcG9zKyspOwotCi0gIGlmIChwb3MgPj0gZGF0YWVuZCAtIDQpCi0gICAgZ290byBuZWVkX21vcmVfZGF0YTsKLQotICBpZiAoR19VTkxJS0VMWSAocG9zWzBdICE9ICctJyB8fCBwb3NbMV0gIT0gJy0nKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11bHRpcGFydCwgIk5vIGJvdW5kYXJ5IGF2YWlsYWJsZSIpOwotICAgIGdvdG8gd3JvbmdfaGVhZGVyOwotICB9Ci0KLSAgLyogRmlyc3QgdGhlIGJvdW5kYXJ5ICovCi0gIGlmICghZ2V0X2xpbmVfZW5kIChwb3MsIGRhdGFlbmQsICZlbmQsICZuZXh0KSkKLSAgICBnb3RvIG5lZWRfbW9yZV9kYXRhOwotCi0gIC8qIElnbm9yZSB0aGUgbGVhZGluZyAtLSAqLwotICBib3VuZGFyeV9sZW4gPSBlbmQgLSBwb3MgLSAyOwotICBib3VuZGFyeSA9IChnY2hhciAqKSBwb3MgKyAyOwotICBpZiAoYm91bmRhcnlfbGVuIDwgMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG11bHRpcGFydCwgIk5vIGJvdW5kYXJ5IGF2YWlsYWJsZSIpOwotICAgIGdvdG8gd3JvbmdfaGVhZGVyOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG11bHRpcGFydC0+Ym91bmRhcnkgPT0gTlVMTCkpIHsKLSAgICAvKiBGaXJzdCB0aW1lIHdlIHNlZSB0aGUgYm91bmRhcnksIGNvcHkgaXQgKi8KLSAgICBtdWx0aXBhcnQtPmJvdW5kYXJ5ID0gZ19zdHJuZHVwIChib3VuZGFyeSwgYm91bmRhcnlfbGVuKTsKLSAgICBtdWx0aXBhcnQtPmJvdW5kYXJ5X2xlbiA9IGJvdW5kYXJ5X2xlbjsKLSAgfSBlbHNlIGlmIChHX1VOTElLRUxZIChib3VuZGFyeV9sZW4gIT0gbXVsdGlwYXJ0LT5ib3VuZGFyeV9sZW4pKSB7Ci0gICAgLyogU29tZXRoaW5nIG9kZCBpcyBnb2luZyBvbiwgZWl0aGVyIHRoZSBib3VuZGFyeSBpbmRpY2F0ZWQgRU9TIG9yIGl0J3MKLSAgICAgKiBpbnZhbGlkICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKGJvdW5kYXJ5X2xlbiA9PSBtdWx0aXBhcnQtPmJvdW5kYXJ5X2xlbiArIDIgJiYKLSAgICAgICAgICAgICFzdHJuY21wIChib3VuZGFyeSwgbXVsdGlwYXJ0LT5ib3VuZGFyeSwgbXVsdGlwYXJ0LT5ib3VuZGFyeV9sZW4pICYmCi0gICAgICAgICAgICAhc3RybmNtcCAoYm91bmRhcnkgKyBtdWx0aXBhcnQtPmJvdW5kYXJ5X2xlbiwgIi0tIiwgMikpKQotICAgICAgZ290byBlb3M7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnQsCi0gICAgICAgICJCb3VuZGFyeSBsZW5ndGggZG9lc24ndCBtYXRjaCBkZXRlY3RlZCBib3VuZGFyeSAoJWQgPD4gJWQiLAotICAgICAgICBib3VuZGFyeV9sZW4sIG11bHRpcGFydC0+Ym91bmRhcnlfbGVuKTsKLSAgICBnb3RvIHdyb25nX2hlYWRlcjsKLSAgfSBlbHNlIGlmIChHX1VOTElLRUxZIChzdHJuY21wIChib3VuZGFyeSwgbXVsdGlwYXJ0LT5ib3VuZGFyeSwgYm91bmRhcnlfbGVuKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnQsICJCb3VuZGFyeSBkb2Vzbid0IG1hdGNoIHByZXZpb3VzIGJvdW5kYXJ5Iik7Ci0gICAgZ290byB3cm9uZ19oZWFkZXI7Ci0gIH0KLQotICBwb3MgPSBuZXh0OwotICB3aGlsZSAoZ2V0X2xpbmVfZW5kIChwb3MsIGRhdGFlbmQsICZlbmQsICZuZXh0KSkgewotICAgIGd1aW50IGxlbiA9IGVuZCAtIHBvczsKLQotICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgLyogZW1wdHkgbGluZSwgZGF0YSBzdGFydHMgYmVoaW5kIHVzICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnQsCi0gICAgICAgICAgIlBhcnNlZCB0aGUgaGVhZGVyIC0gYm91bmRhcnk6ICVzLCBtaW1lLXR5cGU6ICVzLCBjb250ZW50LWxlbmd0aDogJWQiLAotICAgICAgICAgIG11bHRpcGFydC0+Ym91bmRhcnksIG11bHRpcGFydC0+bWltZV90eXBlLCBtdWx0aXBhcnQtPmNvbnRlbnRfbGVuZ3RoKTsKLSAgICAgIGdzdF9hZGFwdGVyX3VubWFwIChtdWx0aXBhcnQtPmFkYXB0ZXIpOwotICAgICAgcmV0dXJuIG5leHQgLSBkYXRhOwotICAgIH0KLQotICAgIGlmIChsZW4gPj0gMTQgJiYgIWdfYXNjaWlfc3RybmNhc2VjbXAgKCJjb250ZW50LXR5cGU6IiwgKGdjaGFyICopIHBvcywgMTMpKSB7Ci0gICAgICBndWludCBtaW1lX2xlbjsKLQotICAgICAgLyogb25seSB0YWtlIHRoZSBtaW1lIHR5cGUgdXAgdG8gdGhlIGZpcnN0IDsgaWYgYW55LiBBZnRlciA7IHRoZXJlIGNhbiBiZQotICAgICAgICogcHJvcGVydGllcyB0aGF0IHdlIGRvbid0IGhhbmRsZSB5ZXQuICovCi0gICAgICBtaW1lX2xlbiA9IGdldF9taW1lX2xlbiAocG9zICsgMTQsIGxlbiAtIDE0KTsKLQotICAgICAgZ19mcmVlIChtdWx0aXBhcnQtPm1pbWVfdHlwZSk7Ci0gICAgICBtdWx0aXBhcnQtPm1pbWVfdHlwZSA9IGdfYXNjaWlfc3RyZG93biAoKGdjaGFyICopIHBvcyArIDE0LCBtaW1lX2xlbik7Ci0gICAgfSBlbHNlIGlmIChsZW4gPj0gMTUgJiYKLSAgICAgICAgIWdfYXNjaWlfc3RybmNhc2VjbXAgKCJjb250ZW50LWxlbmd0aDoiLCAoZ2NoYXIgKikgcG9zLCAxNSkpIHsKLSAgICAgIG11bHRpcGFydC0+Y29udGVudF9sZW5ndGggPQotICAgICAgICAgIGdfYXNjaWlfc3RydG91bGwgKChnY2hhciAqKSBwb3MgKyAxNSwgTlVMTCwgMTApOwotICAgIH0KLSAgICBwb3MgPSBuZXh0OwotICB9Ci0KLW5lZWRfbW9yZV9kYXRhOgotICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnQsICJOZWVkIG1vcmUgZGF0YSBmb3IgdGhlIGhlYWRlciIpOwotICBnc3RfYWRhcHRlcl91bm1hcCAobXVsdGlwYXJ0LT5hZGFwdGVyKTsKLQotICByZXR1cm4gTVVMVElQQVJUX05FRURfTU9SRV9EQVRBOwotCi13cm9uZ19oZWFkZXI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXVsdGlwYXJ0LCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiQm91bmRhcnkgbm90IGZvdW5kIGluIHRoZSBtdWx0aXBhcnQgaGVhZGVyIikpOwotICAgIGdzdF9hZGFwdGVyX3VubWFwIChtdWx0aXBhcnQtPmFkYXB0ZXIpOwotICAgIHJldHVybiBNVUxUSVBBUlRfREFUQV9FUlJPUjsKLSAgfQotZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXVsdGlwYXJ0LCAid2UgYXJlIEVPUyIpOwotICAgIGdzdF9hZGFwdGVyX3VubWFwIChtdWx0aXBhcnQtPmFkYXB0ZXIpOwotICAgIHJldHVybiBNVUxUSVBBUlRfREFUQV9FT1M7Ci0gIH0KLX0KLQotc3RhdGljIGdpbnQKLW11bHRpcGFydF9maW5kX2JvdW5kYXJ5IChHc3RNdWx0aXBhcnREZW11eCAqIG11bHRpcGFydCwgZ2ludCAqIGRhdGFsZW4pCi17Ci0gIC8qIEFkYXB0b3IgaXMgcG9zaXRpb25lZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGRhdGEgKi8KLSAgY29uc3QgZ3VpbnQ4ICpkYXRhLCAqcG9zOwotICBjb25zdCBndWludDggKmRhdGFlbmQ7Ci0gIGdpbnQgbGVuOwotCi0gIGlmIChtdWx0aXBhcnQtPmNvbnRlbnRfbGVuZ3RoID49IDApIHsKLSAgICAvKiBmYXN0IHBhdGgsIGtub3duIGNvbnRlbnQgbGVuZ3RoIDopICovCi0gICAgbGVuID0gbXVsdGlwYXJ0LT5jb250ZW50X2xlbmd0aDsKLSAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChtdWx0aXBhcnQtPmFkYXB0ZXIpID49IGxlbiArIDIpIHsKLSAgICAgICpkYXRhbGVuID0gbGVuOwotICAgICAgZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAobXVsdGlwYXJ0LT5hZGFwdGVyLCBsZW4gKyAxKTsKLQotICAgICAgLyogSWYgZGF0YVtsZW5dIGNvbnRhaW5zIFxyIHRoZW4gYXNzdW1lIGEgbmV3bGluZSBpcyBcclxuICovCi0gICAgICBpZiAoZGF0YVtsZW5dID09ICdccicpCi0gICAgICAgIGxlbiArPSAyOwotICAgICAgZWxzZSBpZiAoZGF0YVtsZW5dID09ICdcbicpCi0gICAgICAgIGxlbiArPSAxOwotCi0gICAgICBnc3RfYWRhcHRlcl91bm1hcCAobXVsdGlwYXJ0LT5hZGFwdGVyKTsKLSAgICAgIC8qIERvbid0IGNoZWNrIGlmIGJvdW5kYXJ5IGlzIGFjdHVhbGx5IHRoZXJlLCBidXQgbGV0IHRoZSBoZWFkZXIgcGFyc2luZwotICAgICAgICogYmFpbCBvdXQgaWYgaXQgaXNuJ3QgKi8KLSAgICAgIHJldHVybiBsZW47Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5lZWQgbW9yZSBkYXRhICovCi0gICAgICByZXR1cm4gTVVMVElQQVJUX05FRURfTU9SRV9EQVRBOwotICAgIH0KLSAgfQotCi0gIGxlbiA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAobXVsdGlwYXJ0LT5hZGFwdGVyKTsKLSAgaWYgKGxlbiA9PSAwKQotICAgIHJldHVybiBNVUxUSVBBUlRfTkVFRF9NT1JFX0RBVEE7Ci0gIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKG11bHRpcGFydC0+YWRhcHRlciwgbGVuKTsKLSAgZGF0YWVuZCA9IGRhdGEgKyBsZW47Ci0KLSAgZm9yIChwb3MgPSBkYXRhICsgbXVsdGlwYXJ0LT5zY2FucG9zOwotICAgICAgcG9zIDw9IGRhdGFlbmQgLSBtdWx0aXBhcnQtPmJvdW5kYXJ5X2xlbiAtIDI7IHBvcysrKSB7Ci0gICAgaWYgKCpwb3MgPT0gJy0nICYmIHBvc1sxXSA9PSAnLScgJiYKLSAgICAgICAgIXN0cm5jbXAgKChnY2hhciAqKSBwb3MgKyAyLAotICAgICAgICAgICAgbXVsdGlwYXJ0LT5ib3VuZGFyeSwgbXVsdGlwYXJ0LT5ib3VuZGFyeV9sZW4pKSB7Ci0gICAgICAvKiBGb3VuZCB0aGUgYm91bmRhcnkhIENoZWNrIGlmIHRoZXJlIHdhcyBhIG5ld2xpbmUgYmVmb3JlIHRoZSBib3VuZGFyeSAqLwotICAgICAgbGVuID0gcG9zIC0gZGF0YTsKLSAgICAgIGlmIChwb3MgLSAyID4gZGF0YSAmJiBwb3NbLTJdID09ICdccicpCi0gICAgICAgIGxlbiAtPSAyOwotICAgICAgZWxzZSBpZiAocG9zIC0gMSA+IGRhdGEgJiYgcG9zWy0xXSA9PSAnXG4nKQotICAgICAgICBsZW4gLT0gMTsKLSAgICAgICpkYXRhbGVuID0gbGVuOwotCi0gICAgICBnc3RfYWRhcHRlcl91bm1hcCAobXVsdGlwYXJ0LT5hZGFwdGVyKTsKLSAgICAgIG11bHRpcGFydC0+c2NhbnBvcyA9IDA7Ci0gICAgICByZXR1cm4gcG9zIC0gZGF0YTsKLSAgICB9Ci0gIH0KLSAgZ3N0X2FkYXB0ZXJfdW5tYXAgKG11bHRpcGFydC0+YWRhcHRlcik7Ci0gIG11bHRpcGFydC0+c2NhbnBvcyA9IHBvcyAtIGRhdGE7Ci0gIHJldHVybiBNVUxUSVBBUlRfTkVFRF9NT1JFX0RBVEE7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpcGFydF9kZW11eF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdE11bHRpcGFydERlbXV4ICptdWx0aXBhcnQ7Ci0KLSAgbXVsdGlwYXJ0ID0gR1NUX01VTFRJUEFSVF9ERU1VWCAocGFyZW50KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBpZiAoIW11bHRpcGFydC0+c3JjcGFkcykgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXVsdGlwYXJ0LCBTVFJFQU0sIFdST05HX1RZUEUsCi0gICAgICAgICAgICAoIlRoaXMgc3RyZWFtIGNvbnRhaW5zIG5vIHZhbGlkIHN0cmVhbXMuIiksCi0gICAgICAgICAgICAoIkdvdCBFT1MgYmVmb3JlIGFkZGluZyBhbnkgcGFkcyIpKTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X211bHRpcGFydF9kZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0TXVsdGlwYXJ0RGVtdXggKm11bHRpcGFydDsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2ludCBzaXplID0gMTsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0KLSAgbXVsdGlwYXJ0ID0gR1NUX01VTFRJUEFSVF9ERU1VWCAocGFyZW50KTsKLSAgYWRhcHRlciA9IG11bHRpcGFydC0+YWRhcHRlcjsKLQotICByZXMgPSBHU1RfRkxPV19PSzsKLQotICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpIHsKLSAgICBHU0xpc3QgKmw7Ci0KLSAgICBmb3IgKGwgPSBtdWx0aXBhcnQtPnNyY3BhZHM7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKLSAgICAgIEdzdE11bHRpcGFydFBhZCAqc3JjcGFkID0gbC0+ZGF0YTsKLQotICAgICAgc3JjcGFkLT5kaXNjb250ID0gVFJVRTsKLSAgICB9Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGFkYXB0ZXIpOwotICB9Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGJ1Zik7Ci0KLSAgd2hpbGUgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcikgPiAwKSB7Ci0gICAgR3N0TXVsdGlwYXJ0UGFkICpzcmNwYWQ7Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0gICAgZ2Jvb2xlYW4gY3JlYXRlZDsKLSAgICBnaW50IGRhdGFsZW47Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIW11bHRpcGFydC0+aGVhZGVyX2NvbXBsZXRlZCkpIHsKLSAgICAgIGlmICgoc2l6ZSA9IG11bHRpcGFydF9wYXJzZV9oZWFkZXIgKG11bHRpcGFydCkpIDwgMCkgewotICAgICAgICBnb3RvIG5vZGF0YTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCBzaXplKTsKLSAgICAgICAgbXVsdGlwYXJ0LT5oZWFkZXJfY29tcGxldGVkID0gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKChzaXplID0gbXVsdGlwYXJ0X2ZpbmRfYm91bmRhcnkgKG11bHRpcGFydCwgJmRhdGFsZW4pKSA8IDApIHsKLSAgICAgIGdvdG8gbm9kYXRhOwotICAgIH0KLQotICAgIC8qIEludmFsaWRhdGUgaGVhZGVyIGluZm8gKi8KLSAgICBtdWx0aXBhcnQtPmhlYWRlcl9jb21wbGV0ZWQgPSBGQUxTRTsKLSAgICBtdWx0aXBhcnQtPmNvbnRlbnRfbGVuZ3RoID0gLTE7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoZGF0YWxlbiA8PSAwKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXVsdGlwYXJ0LCAic2tpcHBpbmcgZW1wdHkgY29udGVudC4iKTsKLSAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChhZGFwdGVyLCBzaXplIC0gZGF0YWxlbik7Ci0gICAgfSBlbHNlIGlmIChHX1VOTElLRUxZICghbXVsdGlwYXJ0LT5taW1lX3R5cGUpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnQsICJjb250ZW50IGhhcyBubyBNSU1FIHR5cGUuIik7Ci0gICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgc2l6ZSAtIGRhdGFsZW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgdHM7Ci0KLSAgICAgIHNyY3BhZCA9Ci0gICAgICAgICAgZ3N0X211bHRpcGFydF9maW5kX3BhZF9ieV9taW1lIChtdWx0aXBhcnQsCi0gICAgICAgICAgbXVsdGlwYXJ0LT5taW1lX3R5cGUsICZjcmVhdGVkKTsKLQotICAgICAgdHMgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAoYWRhcHRlciwgTlVMTCk7Ci0gICAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoYWRhcHRlciwgZGF0YWxlbik7Ci0gICAgICBnc3RfYWRhcHRlcl9mbHVzaCAoYWRhcHRlciwgc2l6ZSAtIGRhdGFsZW4pOwotCi0gICAgICBpZiAoY3JlYXRlZCkgewotICAgICAgICBHc3RUYWdMaXN0ICp0YWdzOwotICAgICAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgICAgICAgLyogUHVzaCBuZXcgc2VnbWVudCwgZmlyc3QgYnVmZmVyIGhhcyAwIHRpbWVzdGFtcCAqLwotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZC0+cGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgICAgICAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCwgIk11bHRpcGFydCIsIE5VTEwpOwotICAgICAgICBnc3RfdGFnX2xpc3Rfc2V0X3Njb3BlICh0YWdzLCBHU1RfVEFHX1NDT1BFX0dMT0JBTCk7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLT5wYWQsIGdzdF9ldmVudF9uZXdfdGFnICh0YWdzKSk7Ci0gICAgICB9Ci0KLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAob3V0YnVmKTsKLSAgICAgIGlmIChzcmNwYWQtPmxhc3RfdHMgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fCBzcmNwYWQtPmxhc3RfdHMgIT0gdHMpIHsKLSAgICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikgPSB0czsKLSAgICAgICAgc3JjcGFkLT5sYXN0X3RzID0gdHM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzcmNwYWQtPmRpc2NvbnQpIHsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICAgIHNyY3BhZC0+ZGlzY29udCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobXVsdGlwYXJ0LAotICAgICAgICAgICJwdXNoaW5nIGJ1ZmZlciB3aXRoIHRpbWVzdGFtcCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZikpKTsKLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaCAoc3JjcGFkLT5wYWQsIG91dGJ1Zik7Ci0gICAgICByZXMgPSBnc3RfbXVsdGlwYXJ0X2NvbWJpbmVfZmxvd3MgKG11bHRpcGFydCwgc3JjcGFkLCByZXMpOwotICAgICAgaWYgKHJlcyAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLW5vZGF0YToKLSAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPT0gTVVMVElQQVJUX0RBVEFfRVJST1IpKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPT0gTVVMVElQQVJUX0RBVEFfRU9TKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X211bHRpcGFydF9kZW11eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdE11bHRpcGFydERlbXV4ICptdWx0aXBhcnQ7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBtdWx0aXBhcnQgPSBHU1RfTVVMVElQQVJUX0RFTVVYIChlbGVtZW50KTsKLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgcmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgbXVsdGlwYXJ0LT5oZWFkZXJfY29tcGxldGVkID0gRkFMU0U7Ci0gICAgICBnX2ZyZWUgKG11bHRpcGFydC0+Ym91bmRhcnkpOwotICAgICAgbXVsdGlwYXJ0LT5ib3VuZGFyeSA9IE5VTEw7Ci0gICAgICBnX2ZyZWUgKG11bHRpcGFydC0+bWltZV90eXBlKTsKLSAgICAgIG11bHRpcGFydC0+bWltZV90eXBlID0gTlVMTDsKLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChtdWx0aXBhcnQtPmFkYXB0ZXIpOwotICAgICAgbXVsdGlwYXJ0LT5jb250ZW50X2xlbmd0aCA9IC0xOwotICAgICAgbXVsdGlwYXJ0LT5zY2FucG9zID0gMDsKLSAgICAgIGdzdF9tdWx0aXBhcnRfZGVtdXhfcmVtb3ZlX3NyY19wYWRzIChtdWx0aXBhcnQpOwotICAgICAgbXVsdGlwYXJ0LT5oYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gICAgICBtdWx0aXBhcnQtPmdyb3VwX2lkID0gR19NQVhVSU5UOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlwYXJ0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RNdWx0aXBhcnREZW11eCAqZmlsdGVyOwotCi0gIGZpbHRlciA9IEdTVF9NVUxUSVBBUlRfREVNVVggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0JPVU5EQVJZOgotICAgICAgLyogTm90IHJlYWxseSB0aGF0IHVzZWZ1bCBhbnltb3JlIGFzIHdlIGNhbiByZWxpYWJseSBhdXRvc2NhbiAqLwotICAgICAgZ19mcmVlIChmaWx0ZXItPmJvdW5kYXJ5KTsKLSAgICAgIGZpbHRlci0+Ym91bmRhcnkgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGlmIChmaWx0ZXItPmJvdW5kYXJ5ICE9IE5VTEwpIHsKLSAgICAgICAgZmlsdGVyLT5ib3VuZGFyeV9sZW4gPSBzdHJsZW4gKGZpbHRlci0+Ym91bmRhcnkpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NJTkdMRV9TVFJFQU06Ci0gICAgICBmaWx0ZXItPnNpbmdsZVN0cmVhbSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXBhcnRfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE11bHRpcGFydERlbXV4ICpmaWx0ZXI7Ci0KLSAgZmlsdGVyID0gR1NUX01VTFRJUEFSVF9ERU1VWCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQk9VTkRBUlk6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBmaWx0ZXItPmJvdW5kYXJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TSU5HTEVfU1RSRUFNOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+c2luZ2xlU3RyZWFtKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi0KLWdib29sZWFuCi1nc3RfbXVsdGlwYXJ0X2RlbXV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfbXVsdGlwYXJ0X2RlbXV4X2RlYnVnLAotICAgICAgIm11bHRpcGFydGRlbXV4IiwgMCwgIm11bHRpcGFydCBkZW11eGVyIik7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJtdWx0aXBhcnRkZW11eCIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICBHU1RfVFlQRV9NVUxUSVBBUlRfREVNVVgpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5oIGIvZ3N0L211bHRpcGFydC9tdWx0aXBhcnRkZW11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjgxYTgzLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0ZGVtdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RtdWx0aXBhcnRkZW11eC5oOiBtdWx0aXBhcnQgc3RyZWFtIGRlbXV4ZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX01VTFRJUEFSVF9ERU1VWF9fCi0jZGVmaW5lIF9fR1NUX01VTFRJUEFSVF9ERU1VWF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9NVUxUSVBBUlRfREVNVVggKGdzdF9tdWx0aXBhcnRfZGVtdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX01VTFRJUEFSVF9ERU1VWChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9NVUxUSVBBUlRfREVNVVgsIEdzdE11bHRpcGFydERlbXV4KSkKLSNkZWZpbmUgR1NUX01VTFRJUEFSVF9ERU1VWF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfTVVMVElQQVJUX0RFTVVYLCBHc3RNdWx0aXBhcnREZW11eCkpCi0jZGVmaW5lIEdTVF9NVUxUSVBBUlRfREVNVVhfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9NVUxUSVBBUlRfREVNVVgsIEdzdE11bHRpcGFydERlbXV4Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfTVVMVElQQVJUX0RFTVVYKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX01VTFRJUEFSVF9ERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19NVUxUSVBBUlRfREVNVVhfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX01VTFRJUEFSVF9ERU1VWCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aXBhcnREZW11eCBHc3RNdWx0aXBhcnREZW11eDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aXBhcnREZW11eENsYXNzIEdzdE11bHRpcGFydERlbXV4Q2xhc3M7Ci0KLSNkZWZpbmUgTVVMVElQQVJUX05FRURfTU9SRV9EQVRBIC0xCi0jZGVmaW5lIE1VTFRJUEFSVF9EQVRBX0VSUk9SICAgICAtMgotI2RlZmluZSBNVUxUSVBBUlRfREFUQV9FT1MgICAgICAgLTMKLQotLyogYWxsIGluZm9ybWF0aW9uIG5lZWRlZCBmb3Igb25lIG11bHRpcGFydCBzdHJlYW0gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFBhZCAqcGFkOyAgICAgICAgICAgICAgICAgIC8qIHJlZmVyZW5jZSBmb3IgdGhpcyBwYWQgaXMgaGVsZCBieSBlbGVtZW50IHdlIGJlbG9uZyB0byAqLwotCi0gIGdjaGFyICptaW1lOwotCi0gIEdzdENsb2NrVGltZSAgbGFzdF90czsgICAgICAgIC8qIGxhc3QgdGltZXN0YW1wIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHR3byBidWZmZXJzIHdpdGggdGhlIHNhbWUgdGltZXN0YW1wICovCi0gIEdzdEZsb3dSZXR1cm4gbGFzdF9yZXQ7Ci0KLSAgZ2Jvb2xlYW4gICAgICBkaXNjb250OwotfQotR3N0TXVsdGlwYXJ0UGFkOwotCi0vKioKLSAqIEdzdE11bHRpcGFydERlbXV4OgotICoKLSAqIFRoZSBvcGFxdWUgI0dzdE11bHRpcGFydERlbXV4IHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RNdWx0aXBhcnREZW11eAotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyogcGFkICovCi0gIEdzdFBhZCAqc2lua3BhZDsKLQotICBHU0xpc3QgKnNyY3BhZHM7Ci0gIGd1aW50IG51bXBhZHM7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLQotICAvKiBIZWFkZXIgaW5mb3JtYXRpb24gb2YgdGhlIGN1cnJlbnQgZnJhbWUgKi8KLSAgZ2Jvb2xlYW4gaGVhZGVyX2NvbXBsZXRlZDsKLSAgZ2NoYXIgKmJvdW5kYXJ5OwotICBndWludCBib3VuZGFyeV9sZW47Ci0gIGdjaGFyICptaW1lX3R5cGU7Ci0gIGdpbnQgY29udGVudF9sZW5ndGg7Ci0KLSAgLyogSW5kZXggaW5zaWRlIHRoZSBjdXJyZW50IGRhdGEgd2hlbiBtYW51YWxseSBsb29raW5nIGZvciB0aGUgYm91bmRhcnkgKi8KLSAgZ2ludCBzY2FucG9zOwotCi0gIGdib29sZWFuIHNpbmdsZVN0cmVhbTsKLQotICAvKiB0byBoYW5kbGUgc3RyZWFtLXN0YXJ0ICovCi0gIGdib29sZWFuIGhhdmVfZ3JvdXBfaWQ7Ci0gIGd1aW50IGdyb3VwX2lkOwotfTsKLQotc3RydWN0IF9Hc3RNdWx0aXBhcnREZW11eENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgR0hhc2hUYWJsZSAqZ3N0bmFtZXM7Ci19OwotCi1HVHlwZSBnc3RfbXVsdGlwYXJ0X2RlbXV4X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X211bHRpcGFydF9kZW11eF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01VTFRJUEFSVF9ERU1VWF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmMgYi9nc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI3MWZmLi4wMDAwMDAwCi0tLSBhL2dzdC9tdWx0aXBhcnQvbXVsdGlwYXJ0bXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OTUgKzAsMCBAQAotLyogbXVsdGlwYXJ0IG11eGVyIHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1tdWx0aXBhcnRtdXgKLSAqCi0gKiBNdWx0aXBhcnRNdXggdXNlcyB0aGUgI0dzdENhcHMgb2YgdGhlIHNpbmsgcGFkIGFzIHRoZSBDb250ZW50LXR5cGUgZmllbGQgZm9yCi0gKiBpbmNvbWluZyBidWZmZXJzIHdoZW4gbXV4aW5nIHRoZW0gdG8gYSBtdWx0aXBhcnQgc3RyZWFtLiBNb3N0IG9mIHRoZSB0aW1lIAotICogbXVsdGlwYXJ0IHN0cmVhbXMgYXJlIHNlcXVlbnRpYWwgSlBFRyBmcmFtZXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPlNhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhIHZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9JyhmcmFjdGlvbiknNS8xICEganBlZ2VuYyAhIG11bHRpcGFydG11eCAhIGZpbGVzaW5rIGxvY2F0aW9uPS90bXAvdGVzdC5tdWx0aXBhcnQKLSAqIF18IGEgcGlwZWxpbmUgdG8gbXV4IDUgSlBFRyBmcmFtZXMgcGVyIHNlY29uZCBpbnRvIGEgbXVsdGlwYXJ0IHN0cmVhbQotICogc3RvcmVkIHRvIGEgZmlsZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotLyogRklYTUU6IGRyb3AvbWVyZ2UgdGFnIGV2ZW50cywgb3IgYXQgbGVhc3Qgc2VuZCB0aGVtIGRlbGF5ZWQgYWZ0ZXIgc3RyZWFtLXN0YXJ0ICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJtdWx0aXBhcnRtdXguaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X211bHRpcGFydF9tdXhfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X211bHRpcGFydF9tdXhfZGVidWcKLQotI2RlZmluZSBERUZBVUxUX0JPVU5EQVJZICAgICAgICAiVGhpc1JhbmRvbVN0cmluZyIKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQk9VTkRBUlkKLSAgICAgIC8qIEZJTEwgTUUgKi8KLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkgICAgICAgICAvKiB3ZSBjYW4gdGFrZSBhbnl0aGluZywgcmVhbGx5ICovCi0gICAgKTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgY29uc3QgZ2NoYXIgKmtleTsKLSAgY29uc3QgZ2NoYXIgKnZhbDsKLX0gTWltZVR5cGVNYXA7Ci0KLS8qIGNvbnZlcnQgZnJvbSBnc3Qgc3RydWN0dXJlIG5hbWVzIHRvIG1pbWUgdHlwZXMuIEFkZCBtb3JlIHdoZW4gbmVlZGVkLiAqLwotc3RhdGljIGNvbnN0IE1pbWVUeXBlTWFwIG1pbWV0eXBlc1tdID0gewotICB7ImF1ZGlvL3gtbXVsYXciLCAiYXVkaW8vYmFzaWMifSwKLSAge05VTEwsIE5VTEx9Ci19OwotCi1zdGF0aWMgdm9pZCBnc3RfbXVsdGlwYXJ0X211eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXVsdGlwYXJ0X211eF9oYW5kbGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RQYWQgKmdzdF9tdWx0aXBhcnRfbXV4X3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X211bHRpcGFydF9tdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9tdWx0aXBhcnRfbXV4X3NpbmtfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqIHBhZCwgR3N0RXZlbnQgKiBldmVudCwgR3N0TXVsdGlwYXJ0TXV4ICogbXV4KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9tdWx0aXBhcnRfbXV4X2NvbGxlY3RlZCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdE11bHRpcGFydE11eCAqIG11eCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9tdWx0aXBhcnRfbXV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9tdWx0aXBhcnRfbXV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotI2RlZmluZSBnc3RfbXVsdGlwYXJ0X211eF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RNdWx0aXBhcnRNdXgsIGdzdF9tdWx0aXBhcnRfbXV4LCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXBhcnRfbXV4X2NsYXNzX2luaXQgKEdzdE11bHRpcGFydE11eENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBnaW50IGk7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X211bHRpcGFydF9tdXhfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9tdWx0aXBhcnRfbXV4X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X211bHRpcGFydF9tdXhfc2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQk9VTkRBUlksCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiYm91bmRhcnkiLCAiQm91bmRhcnkiLCAiQm91bmRhcnkgc3RyaW5nIiwKLSAgICAgICAgICBERUZBVUxUX0JPVU5EQVJZLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPSBnc3RfbXVsdGlwYXJ0X211eF9yZXF1ZXN0X25ld19wYWQ7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9tdWx0aXBhcnRfbXV4X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJNdWx0aXBhcnQgbXV4ZXIiLAotICAgICAgIkNvZGVjL011eGVyIiwgIm11eCBtdWx0aXBhcnQgc3RyZWFtcyIsICJXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiIpOwotCi0gIC8qIHBvcHVsYXRlIG1pbWUgdHlwZXMgKi8KLSAga2xhc3MtPm1pbWV0eXBlcyA9IGdfaGFzaF90YWJsZV9uZXcgKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKLSAgZm9yIChpID0gMDsgbWltZXR5cGVzW2ldLmtleTsgaSsrKSB7Ci0gICAgZ19oYXNoX3RhYmxlX2luc2VydCAoa2xhc3MtPm1pbWV0eXBlcywgKGdwb2ludGVyKSBtaW1ldHlwZXNbaV0ua2V5LAotICAgICAgICAoZ3BvaW50ZXIpIG1pbWV0eXBlc1tpXS52YWwpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGlwYXJ0X211eF9pbml0IChHc3RNdWx0aXBhcnRNdXggKiBtdWx0aXBhcnRfbXV4KQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChtdWx0aXBhcnRfbXV4KTsKLQotICBtdWx0aXBhcnRfbXV4LT5zcmNwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsCi0gICAgICAgICAgInNyYyIpLCAic3JjIik7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChtdWx0aXBhcnRfbXV4LT5zcmNwYWQsCi0gICAgICBnc3RfbXVsdGlwYXJ0X211eF9oYW5kbGVfc3JjX2V2ZW50KTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKG11bHRpcGFydF9tdXgpLCBtdWx0aXBhcnRfbXV4LT5zcmNwYWQpOwotCi0gIG11bHRpcGFydF9tdXgtPmJvdW5kYXJ5ID0gZ19zdHJkdXAgKERFRkFVTFRfQk9VTkRBUlkpOwotCi0gIG11bHRpcGFydF9tdXgtPmNvbGxlY3QgPSBnc3RfY29sbGVjdF9wYWRzX25ldyAoKTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gKG11bHRpcGFydF9tdXgtPmNvbGxlY3QsCi0gICAgICAoR3N0Q29sbGVjdFBhZHNFdmVudEZ1bmN0aW9uKQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aXBhcnRfbXV4X3NpbmtfZXZlbnQpLCBtdWx0aXBhcnRfbXV4KTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZnVuY3Rpb24gKG11bHRpcGFydF9tdXgtPmNvbGxlY3QsCi0gICAgICAoR3N0Q29sbGVjdFBhZHNGdW5jdGlvbikgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9tdWx0aXBhcnRfbXV4X2NvbGxlY3RlZCksCi0gICAgICBtdWx0aXBhcnRfbXV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXBhcnRfbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RNdWx0aXBhcnRNdXggKm11bHRpcGFydF9tdXg7Ci0KLSAgbXVsdGlwYXJ0X211eCA9IEdTVF9NVUxUSVBBUlRfTVVYIChvYmplY3QpOwotCi0gIGdfZnJlZSAobXVsdGlwYXJ0X211eC0+Ym91bmRhcnkpOwotCi0gIGlmIChtdWx0aXBhcnRfbXV4LT5jb2xsZWN0KQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG11bHRpcGFydF9tdXgtPmNvbGxlY3QpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfbXVsdGlwYXJ0X211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogcmVxX25hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RNdWx0aXBhcnRNdXggKm11bHRpcGFydF9tdXg7Ci0gIEdzdFBhZCAqbmV3cGFkOwotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLSAgZ2NoYXIgKm5hbWU7Ci0KLSAgaWYgKHRlbXBsICE9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic2lua18ldSIpKQotICAgIGdvdG8gd3JvbmdfdGVtcGxhdGU7Ci0KLSAgbXVsdGlwYXJ0X211eCA9IEdTVF9NVUxUSVBBUlRfTVVYIChlbGVtZW50KTsKLQotICAvKiBjcmVhdGUgbmV3IHBhZCB3aXRoIHRoZSBuYW1lICovCi0gIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzaW5rXyV1IiwgbXVsdGlwYXJ0X211eC0+bnVtcGFkcyk7Ci0gIG5ld3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICAvKiBjb25zdHJ1Y3Qgb3VyIG93biB3cmFwcGVyIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgcGFkIHRvCi0gICAqIGtlZXAgdHJhY2sgb2YgaXRzIHN0YXR1cyAqLwotICB7Ci0gICAgR3N0TXVsdGlwYXJ0UGFkRGF0YSAqbXVsdGlwYXJ0cGFkOwotCi0gICAgbXVsdGlwYXJ0cGFkID0gKEdzdE11bHRpcGFydFBhZERhdGEgKikKLSAgICAgICAgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChtdWx0aXBhcnRfbXV4LT5jb2xsZWN0LCBuZXdwYWQsCi0gICAgICAgIHNpemVvZiAoR3N0TXVsdGlwYXJ0UGFkRGF0YSksIE5VTEwsIFRSVUUpOwotCi0gICAgLyogc2F2ZSBhIHBvaW50ZXIgdG8gb3VyIGRhdGEgaW4gdGhlIHBhZCAqLwotICAgIG11bHRpcGFydHBhZC0+cGFkID0gbmV3cGFkOwotICAgIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAobmV3cGFkLCBtdWx0aXBhcnRwYWQpOwotICAgIG11bHRpcGFydF9tdXgtPm51bXBhZHMrKzsKLSAgfQotCi0gIC8qIGFkZCB0aGUgcGFkIHRvIHRoZSBlbGVtZW50ICovCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGVsZW1lbnQsIG5ld3BhZCk7Ci0KLSAgcmV0dXJuIG5ld3BhZDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3RlbXBsYXRlOgotICB7Ci0gICAgZ193YXJuaW5nICgibXVsdGlwYXJ0X211eDogdGhpcyBpcyBub3Qgb3VyIHRlbXBsYXRlISIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qIGhhbmRsZSBldmVudHMgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpcGFydF9tdXhfaGFuZGxlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0RXZlbnRUeXBlIHR5cGU7Ci0KLSAgdHlwZSA9IGV2ZW50ID8gR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA6IEdTVF9FVkVOVF9VTktOT1dOOwotCi0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1NFRUs6Ci0gICAgICAvKiBkaXNhYmxlIHNlZWtpbmcgZm9yIG5vdyAqLwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nc3RfbXVsdGlwYXJ0X211eF9nZXRfbWltZSAoR3N0TXVsdGlwYXJ0TXV4ICogbXV4LCBHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBHc3RNdWx0aXBhcnRNdXhDbGFzcyAqa2xhc3M7Ci0gIGNvbnN0IGdjaGFyICptaW1lOwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgZ2ludCByYXRlOwotICBnaW50IGNoYW5uZWxzOwotICBnaW50IGJpdHJhdGUgPSAwOwotCi0gIGtsYXNzID0gR1NUX01VTFRJUEFSVF9NVVhfR0VUX0NMQVNTIChtdXgpOwotCi0gIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKTsKLQotICAvKiB1c2UgaGFzaHRhYmxlIHRvIGNvbnZlcnQgdG8gbWltZSB0eXBlICovCi0gIG1pbWUgPSBnX2hhc2hfdGFibGVfbG9va3VwIChrbGFzcy0+bWltZXR5cGVzLCBuYW1lKTsKLSAgaWYgKG1pbWUgPT0gTlVMTCkgewotICAgIGlmICghc3RyY21wIChuYW1lLCAiYXVkaW8veC1hZHBjbSIpKQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAiYml0cmF0ZSIsICZiaXRyYXRlKTsKLQotICAgIHN3aXRjaCAoYml0cmF0ZSkgewotICAgICAgY2FzZSAxNjAwMDoKLSAgICAgICAgbWltZSA9ICJhdWRpby9HNzI2LTE2IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDI0MDAwOgotICAgICAgICBtaW1lID0gImF1ZGlvL0c3MjYtMjQiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMzIwMDA6Ci0gICAgICAgIG1pbWUgPSAiYXVkaW8vRzcyNi0zMiI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA0MDAwMDoKLSAgICAgICAgbWltZSA9ICJhdWRpby9HNzI2LTQwIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBubyBtaW1lIHR5cGUgbWFwcGluZywgdXNlIG5hbWUgKi8KLSAgICAgICAgbWltZSA9IG5hbWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAvKiBSRkMyMDQ2IHJlcXVpcmVzIGF1ZGlvL2Jhc2ljIHRvIGJlIG11bGF3IDgwMDBIeiBtb25vICovCi0gIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKG1pbWUsICJhdWRpby9iYXNpYyIpID09IDApIHsKLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicmF0ZSIsICZyYXRlKSAmJgotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZjaGFubmVscykpIHsKLSAgICAgIGlmIChyYXRlICE9IDgwMDAgfHwgY2hhbm5lbHMgIT0gMSkgewotICAgICAgICBtaW1lID0gbmFtZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgbWltZSA9IG5hbWU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBtaW1lOwotfQotCi0vKgotICogR2l2ZW4gdHdvIHBhZHMsIGNvbXBhcmUgdGhlIGJ1ZmZlcnMgcXVldWVkIG9uIGl0IGFuZCByZXR1cm4gMCBpZiB0aGV5IGhhdmUKLSAqIGFuIGVxdWFsIHByaW9yaXR5LCAxIGlmIHRoZSBuZXcgcGFkIGlzIGJldHRlciwgLTEgaWYgdGhlIG9sZCBwYWQgaXMgYmV0dGVyIAotICovCi1zdGF0aWMgZ2ludAotZ3N0X211bHRpcGFydF9tdXhfY29tcGFyZV9wYWRzIChHc3RNdWx0aXBhcnRNdXggKiBtdWx0aXBhcnRfbXV4LAotICAgIEdzdE11bHRpcGFydFBhZERhdGEgKiBvbGQsIEdzdE11bHRpcGFydFBhZERhdGEgKiBuZXcpCi17Ci0gIGd1aW50NjQgb2xkdGltZSwgbmV3dGltZTsKLQotICAvKiBpZiB0aGUgb2xkIHBhZCBkb2Vzbid0IGNvbnRhaW4gYW55dGhpbmcgb3IgaXMgZXZlbiBOVUxMLCByZXR1cm4gCi0gICAqIHRoZSBuZXcgcGFkIGFzIGJlc3QgY2FuZGlkYXRlIGFuZCB2aWNlIHZlcnNhICovCi0gIGlmIChvbGQgPT0gTlVMTCB8fCBvbGQtPmJ1ZmZlciA9PSBOVUxMKQotICAgIHJldHVybiAxOwotICBpZiAobmV3ID09IE5VTEwgfHwgbmV3LT5idWZmZXIgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChvbGQtPmR0c190aW1lc3RhbXApICYmCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAobmV3LT5kdHNfdGltZXN0YW1wKSkgewotICAgIG9sZHRpbWUgPSBvbGQtPmR0c190aW1lc3RhbXA7Ci0gICAgbmV3dGltZSA9IG5ldy0+ZHRzX3RpbWVzdGFtcDsKLSAgfSBlbHNlIHsKLSAgICBvbGR0aW1lID0gb2xkLT5wdHNfdGltZXN0YW1wOwotICAgIG5ld3RpbWUgPSBuZXctPnB0c190aW1lc3RhbXA7Ci0gIH0KLQotICAvKiBubyB0aW1lc3RhbXAgb24gb2xkIGJ1ZmZlciwgaXQgbXVzdCBnbyBmaXJzdCAqLwotICBpZiAob2xkdGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIHJldHVybiAtMTsKLQotICAvKiBubyB0aW1lc3RhbXAgb24gbmV3IGJ1ZmZlciwgaXQgbXVzdCBnbyBmaXJzdCAqLwotICBpZiAobmV3dGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIHJldHVybiAxOwotCi0gIC8qIG9sZCBidWZmZXIgaGFzIGhpZ2hlciB0aW1lc3RhbXAsIG5ldyBvbmUgc2hvdWxkIGdvIGZpcnN0ICovCi0gIGlmIChuZXd0aW1lIDwgb2xkdGltZSkKLSAgICByZXR1cm4gMTsKLSAgLyogbmV3IGJ1ZmZlciBoYXMgaGlnaGVyIHRpbWVzdGFtcCwgb2xkIG9uZSBzaG91bGQgZ28gZmlyc3QgKi8KLSAgZWxzZSBpZiAobmV3dGltZSA+IG9sZHRpbWUpCi0gICAgcmV0dXJuIC0xOwotCi0gIC8qIHNhbWUgcHJpb3JpdHkgaWYgYWxsIG9mIHRoZSBhYm92ZSBmYWlsZWQgKi8KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIG1ha2Ugc3VyZSBhIGJ1ZmZlciBpcyBxdWV1ZWQgb24gYWxsIHBhZHMsIHJldHVybnMgYSBwb2ludGVyIHRvIGFuIG11bHRpcGFydHBhZAotICogdGhhdCBob2xkcyB0aGUgYmVzdCBidWZmZXIgb3IgTlVMTCB3aGVuIG5vIHBhZCB3YXMgdXNhYmxlICovCi1zdGF0aWMgR3N0TXVsdGlwYXJ0UGFkRGF0YSAqCi1nc3RfbXVsdGlwYXJ0X211eF9xdWV1ZV9wYWRzIChHc3RNdWx0aXBhcnRNdXggKiBtdXgpCi17Ci0gIEdTTGlzdCAqd2FsayA9IE5VTEw7Ci0gIEdzdE11bHRpcGFydFBhZERhdGEgKmJlc3RwYWQgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfTVVMVElQQVJUX01VWCAobXV4KSwgTlVMTCk7Ci0KLSAgLyogdHJ5IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgYnVmZmVyIGZyb20gZWFjaCB1c2FibGUgcGFkIGZpcnN0ICovCi0gIHdhbGsgPSBtdXgtPmNvbGxlY3QtPmRhdGE7Ci0gIHdoaWxlICh3YWxrKSB7Ci0gICAgR3N0Q29sbGVjdERhdGEgKmRhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgd2Fsay0+ZGF0YTsKLSAgICBHc3RNdWx0aXBhcnRQYWREYXRhICpwYWQgPSAoR3N0TXVsdGlwYXJ0UGFkRGF0YSAqKSBkYXRhOwotCi0gICAgd2FsayA9IGdfc2xpc3RfbmV4dCAod2Fsayk7Ci0KLSAgICAvKiB0cnkgdG8gZ2V0IGEgbmV3IGJ1ZmZlciBmb3IgdGhpcyBwYWQgaWYgbmVlZGVkIGFuZCBwb3NzaWJsZSAqLwotICAgIGlmIChwYWQtPmJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0KLSAgICAgIGJ1ZiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChtdXgtPmNvbGxlY3QsIGRhdGEpOwotCi0gICAgICAvKiBTdG9yZSB0aW1lc3RhbXBzIHdpdGggc2VnbWVudF9zdGFydCBhbmQgcHJlcm9sbCAqLwotICAgICAgaWYgKGJ1ZiAmJiBHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmKSkgewotICAgICAgICBwYWQtPnB0c190aW1lc3RhbXAgPQotICAgICAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmZGF0YS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcGFkLT5wdHNfdGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIH0KLSAgICAgIGlmIChidWYgJiYgR1NUX0JVRkZFUl9EVFNfSVNfVkFMSUQgKGJ1ZikpIHsKLSAgICAgICAgcGFkLT5kdHNfdGltZXN0YW1wID0KLSAgICAgICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJmRhdGEtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRFRTIChidWYpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhZC0+ZHRzX3RpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICB9Ci0KLQotICAgICAgcGFkLT5idWZmZXIgPSBidWY7Ci0gICAgfQotCi0gICAgLyogd2Ugc2hvdWxkIGhhdmUgYSBidWZmZXIgbm93LCBzZWUgaWYgaXQgaXMgdGhlIGJlc3Qgc3RyZWFtIHRvCi0gICAgICogcHVsbCBvbiAqLwotICAgIGlmIChwYWQtPmJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICBpZiAoZ3N0X211bHRpcGFydF9tdXhfY29tcGFyZV9wYWRzIChtdXgsIGJlc3RwYWQsIHBhZCkgPiAwKSB7Ci0gICAgICAgIGJlc3RwYWQgPSBwYWQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGJlc3RwYWQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpcGFydF9tdXhfc2lua19ldmVudCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsCi0gICAgR3N0RXZlbnQgKiBldmVudCwgR3N0TXVsdGlwYXJ0TXV4ICogbXV4KQotewotICBnYm9vbGVhbiByZXQ7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICB7Ci0gICAgICBtdXgtPm5lZWRfc2VnbWVudCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0IChwYWRzLCBkYXRhLCBldmVudCwgRkFMU0UpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIGJhc2ljIGlkZWE6Ci0gKgotICogMSkgZmluZCBhIHBhZCB0byBwdWxsIG9uLCB0aGlzIGlzIGRvbmUgYnkgcHVsbGluZyBvbiBhbGwgcGFkcyBhbmQKLSAqICAgIGxvb2tpbmcgYXQgdGhlIGJ1ZmZlcnMgdG8gZGVjaWRlIHdoaWNoIG9uZSBzaG91bGQgYmUgbXV4ZWQgZmlyc3QuCi0gKiAyKSBjcmVhdGUgYSBuZXcgYnVmZmVyIGZvciB0aGUgaGVhZGVyCi0gKiAzKSBwdXNoIGJvdGggYnVmZmVycyBvbiBiZXN0IHBhZCwgZ28gdG8gMQotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X211bHRpcGFydF9tdXhfY29sbGVjdGVkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdE11bHRpcGFydE11eCAqIG11eCkKLXsKLSAgR3N0TXVsdGlwYXJ0UGFkRGF0YSAqYmVzdDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2NoYXIgKmhlYWRlciA9IE5VTEw7Ci0gIHNpemVfdCBoZWFkZXJsZW47Ci0gIEdzdEJ1ZmZlciAqaGVhZGVyYnVmID0gTlVMTDsKLSAgR3N0QnVmZmVyICpmb290ZXJidWYgPSBOVUxMOwotICBHc3RCdWZmZXIgKmRhdGFidWYgPSBOVUxMOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IE5VTEw7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGNvbnN0IGdjaGFyICptaW1lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgImFsbCBwYWRzIGFyZSBjb2xsZWN0ZWQiKTsKLQotICBpZiAobXV4LT5uZWVkX3N0cmVhbV9zdGFydCkgewotICAgIGdjaGFyIHNfaWRbMzJdOwotCi0gICAgLyogc3RyZWFtLXN0YXJ0IChGSVhNRTogY3JlYXRlIGlkIGJhc2VkIG9uIGlucHV0IGlkcykgKi8KLSAgICBnX3NucHJpbnRmIChzX2lkLCBzaXplb2YgKHNfaWQpLCAibXVsdGlwYXJ0bXV4LSUwOHgiLCBnX3JhbmRvbV9pbnQgKCkpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAobXV4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzX2lkKSk7Ci0KLSAgICBtdXgtPm5lZWRfc3RyZWFtX3N0YXJ0ID0gRkFMU0U7Ci0gIH0KLQotICAvKiBxdWV1ZSBidWZmZXJzIG9uIGFsbCBwYWRzOyBmaW5kIGEgYnVmZmVyIHdpdGggdGhlIGxvd2VzdCB0aW1lc3RhbXAgKi8KLSAgYmVzdCA9IGdzdF9tdWx0aXBhcnRfbXV4X3F1ZXVlX3BhZHMgKG11eCk7Ci0gIGlmICghYmVzdCkKLSAgICAvKiBFT1MgKi8KLSAgICBnb3RvIGVvczsKLSAgZWxzZSBpZiAoIWJlc3QtPmJ1ZmZlcikKLSAgICBnb3RvIGJ1ZmZlcl9lcnJvcjsKLQotICAvKiBJZiBub3QgbmVnb3RpYXRlZCB5ZXQgc2V0IGNhcHMgb24gc3JjIHBhZCAqLwotICBpZiAoIW11eC0+bmVnb3RpYXRlZCkgewotICAgIEdzdENhcHMgKm5ld2NhcHM7Ci0KLSAgICBuZXdjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoIm11bHRpcGFydC94LW1peGVkLXJlcGxhY2UiLAotICAgICAgICAiYm91bmRhcnkiLCBHX1RZUEVfU1RSSU5HLCBtdXgtPmJvdW5kYXJ5LCBOVUxMKTsKLQotICAgIGlmICghZ3N0X3BhZF9zZXRfY2FwcyAobXV4LT5zcmNwYWQsIG5ld2NhcHMpKSB7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAobmV3Y2Fwcyk7Ci0gICAgICBnb3RvIG5lZ29fZXJyb3I7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKG5ld2NhcHMpOwotICAgIG11eC0+bmVnb3RpYXRlZCA9IFRSVUU7Ci0gIH0KLQotICAvKiBzZWUgaWYgd2UgbmVlZCB0byBwdXNoIGEgc2VnbWVudCAqLwotICBpZiAobXV4LT5uZWVkX3NlZ21lbnQpIHsKLSAgICBHc3RDbG9ja1RpbWUgdGltZTsKLSAgICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgICBpZiAoYmVzdC0+ZHRzX3RpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICB0aW1lID0gYmVzdC0+ZHRzX3RpbWVzdGFtcDsKLSAgICB9IGVsc2UgaWYgKGJlc3QtPnB0c190aW1lc3RhbXAgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgdGltZSA9IGJlc3QtPnB0c190aW1lc3RhbXA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRpbWUgPSAwOwotICAgIH0KLQotICAgIC8qIGZvciB0aGUgc2VnbWVudCwgd2UgdGFrZSB0aGUgZmlyc3QgdGltZXN0YW1wIHdlIHNlZSwgd2UgZG9uJ3Qga25vdyB0aGUKLSAgICAgKiBsZW5ndGggYW5kIHRoZSBwb3NpdGlvbiBpcyAwICovCi0gICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgc2VnbWVudC5zdGFydCA9IHRpbWU7Ci0KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0KLSAgICBtdXgtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotICB9Ci0KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoYmVzdC0+cGFkKTsKLSAgaWYgKGNhcHMgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGlmICghc3RydWN0dXJlKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGdvdG8gbm9fY2FwczsKLSAgfQotCi0gIC8qIGdldCB0aGUgbWltZSB0eXBlIGZvciB0aGUgc3RydWN0dXJlICovCi0gIG1pbWUgPSBnc3RfbXVsdGlwYXJ0X211eF9nZXRfbWltZSAobXV4LCBzdHJ1Y3R1cmUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaGVhZGVyID0gZ19zdHJkdXBfcHJpbnRmICgiLS0lc1xyXG5Db250ZW50LVR5cGU6ICVzXHJcbiIKLSAgICAgICJDb250ZW50LUxlbmd0aDogJSIgR19HU0laRV9GT1JNQVQgIlxyXG5cclxuIiwKLSAgICAgIG11eC0+Ym91bmRhcnksIG1pbWUsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJlc3QtPmJ1ZmZlcikpOwotICBoZWFkZXJsZW4gPSBzdHJsZW4gKGhlYWRlcik7Ci0KLSAgaGVhZGVyYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIGhlYWRlcmxlbiwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfZmlsbCAoaGVhZGVyYnVmLCAwLCBoZWFkZXIsIGhlYWRlcmxlbik7Ci0gIGdfZnJlZSAoaGVhZGVyKTsKLQotICAvKiB0aGUgaGVhZGVyIGhhcyB0aGUgc2FtZSB0aW1lc3RhbXBzIGFzIHRoZSBkYXRhIGJ1ZmZlciAod2hpY2ggd2Ugd2lsbCBwdXNoCi0gICAqIGJlbG93KSBhbmQgaGFzIGEgZHVyYXRpb24gb2YgMCAqLwotICBHU1RfQlVGRkVSX1BUUyAoaGVhZGVyYnVmKSA9IGJlc3QtPnB0c190aW1lc3RhbXA7Ci0gIEdTVF9CVUZGRVJfRFRTIChoZWFkZXJidWYpID0gYmVzdC0+ZHRzX3RpbWVzdGFtcDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoaGVhZGVyYnVmKSA9IDA7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChoZWFkZXJidWYpID0gbXV4LT5vZmZzZXQ7Ci0gIG11eC0+b2Zmc2V0ICs9IGhlYWRlcmxlbjsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChoZWFkZXJidWYpID0gbXV4LT5vZmZzZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAicHVzaGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIGhlYWRlciBidWZmZXIiLAotICAgICAgaGVhZGVybGVuKTsKLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChtdXgtPnNyY3BhZCwgaGVhZGVyYnVmKTsKLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAvKiBwdXNoIGFsd2F5cyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciwgZXZlbiBhZnRlciBhbiBlcnJvciwgc28gd2UKLSAgICAgKiBkb24ndCBuZWVkIHRvIHVucmVmIGhlYWRlcmJ1ZiBoZXJlLiAqLwotICAgIGdvdG8gYmVhY2g7Ci0KLSAgLyogdGFrZSBiZXN0LT5idWZmZXIsIHdlIGRvbid0IG5lZWQgdG8gdW5yZWYgaXQgbGF0ZXIgYXMgd2Ugd2lsbCBwdXNoIGl0Ci0gICAqIG5vdy4gKi8KLSAgZGF0YWJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYmVzdC0+YnVmZmVyKTsKLSAgYmVzdC0+YnVmZmVyID0gTlVMTDsKLQotICAvKiB3ZSBuZWVkIHRvIHVwZGF0ZWQgdGhlIHRpbWVzdGFtcHMgdG8gbWF0Y2ggdGhlIHJ1bm5pbmdfdGltZSAqLwotICBHU1RfQlVGRkVSX1BUUyAoZGF0YWJ1ZikgPSBiZXN0LT5wdHNfdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX0RUUyAoZGF0YWJ1ZikgPSBiZXN0LT5kdHNfdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX09GRlNFVCAoZGF0YWJ1ZikgPSBtdXgtPm9mZnNldDsKLSAgbXV4LT5vZmZzZXQgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZGF0YWJ1Zik7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoZGF0YWJ1ZikgPSBtdXgtPm9mZnNldDsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoZGF0YWJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1c2hpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBkYXRhIGJ1ZmZlciIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChkYXRhYnVmKSk7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaCAobXV4LT5zcmNwYWQsIGRhdGFidWYpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIC8qIHB1c2ggYWx3YXlzIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgYnVmZmVyLCBldmVuIGFmdGVyIGFuIGVycm9yLCBzbyB3ZQotICAgICAqIGRvbid0IG5lZWQgdG8gdW5yZWYgaGVhZGVyYnVmIGhlcmUuICovCi0gICAgZ290byBiZWFjaDsKLQotICBmb290ZXJidWYgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMiwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfZmlsbCAoZm9vdGVyYnVmLCAwLCAiXHJcbiIsIDIpOwotCi0gIC8qIHRoZSBmb290ZXIgaGFzIHRoZSBzYW1lIHRpbWVzdGFtcHMgYXMgdGhlIGRhdGEgYnVmZmVyIGFuZCBoYXMgYQotICAgKiBkdXJhdGlvbiBvZiAwICovCi0gIEdTVF9CVUZGRVJfUFRTIChmb290ZXJidWYpID0gYmVzdC0+cHRzX3RpbWVzdGFtcDsKLSAgR1NUX0JVRkZFUl9EVFMgKGZvb3RlcmJ1ZikgPSBiZXN0LT5kdHNfdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChmb290ZXJidWYpID0gMDsKLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGZvb3RlcmJ1ZikgPSBtdXgtPm9mZnNldDsKLSAgbXV4LT5vZmZzZXQgKz0gMjsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChmb290ZXJidWYpID0gbXV4LT5vZmZzZXQ7Ci0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGZvb3RlcmJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG11eCwgInB1c2hpbmcgMiBieXRlcyBmb290ZXIgYnVmZmVyIik7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaCAobXV4LT5zcmNwYWQsIGZvb3RlcmJ1Zik7Ci0KLWJlYWNoOgotICBpZiAoYmVzdCAmJiBiZXN0LT5idWZmZXIpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChiZXN0LT5idWZmZXIpOwotICAgIGJlc3QtPmJ1ZmZlciA9IE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWJ1ZmZlcl9lcnJvcjoKLSAgewotICAgIC8qIFRoZXJlIGlzIGEgYmVzdCBidXQgbm8gYnVmZmVyLCB0aGlzIGlzIG5vdCBxdWl0ZSByaWdodC4uICovCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG11eCwgU1RSRUFNLCBGQUlMRUQsIChOVUxMKSwgKCJpbnRlcm5hbCBtdXhpbmcgZXJyb3IiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXV4LCAiUHVzaGluZyBFT1MiKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLW5lZ29fZXJyb3I6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG11eCwgImZhaWxlZCB0byBzZXQgY2FwcyIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtdXgsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksIChOVUxMKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotbm9fY2FwczoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAibm8gY2FwcyBvbiB0aGUgaW5jb21pbmcgYnVmZmVyICVwIiwgYmVzdC0+YnVmZmVyKTsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAobXV4LCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLCAoTlVMTCkpOwotICAgIHJldCA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXBhcnRfbXV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RNdWx0aXBhcnRNdXggKm11eDsKLQotICBtdXggPSBHU1RfTVVMVElQQVJUX01VWCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQk9VTkRBUlk6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBtdXgtPmJvdW5kYXJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXBhcnRfbXV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RNdWx0aXBhcnRNdXggKm11eDsKLQotICBtdXggPSBHU1RfTVVMVElQQVJUX01VWCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQk9VTkRBUlk6Ci0gICAgICBnX2ZyZWUgKG11eC0+Ym91bmRhcnkpOwotICAgICAgbXV4LT5ib3VuZGFyeSA9IGdfc3RyZHVwIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X211bHRpcGFydF9tdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0TXVsdGlwYXJ0TXV4ICptdWx0aXBhcnRfbXV4OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgbXVsdGlwYXJ0X211eCA9IEdTVF9NVUxUSVBBUlRfTVVYIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgbXVsdGlwYXJ0X211eC0+b2Zmc2V0ID0gMDsKLSAgICAgIG11bHRpcGFydF9tdXgtPm5lZ290aWF0ZWQgPSBGQUxTRTsKLSAgICAgIG11bHRpcGFydF9tdXgtPm5lZWRfc2VnbWVudCA9IFRSVUU7Ci0gICAgICBtdWx0aXBhcnRfbXV4LT5uZWVkX3N0cmVhbV9zdGFydCA9IFRSVUU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnRfbXV4LCAic3RhcnRpbmcgY29sbGVjdCBwYWRzIik7Ci0gICAgICBnc3RfY29sbGVjdF9wYWRzX3N0YXJ0IChtdWx0aXBhcnRfbXV4LT5jb2xsZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChtdWx0aXBhcnRfbXV4LCAic3RvcHBpbmcgY29sbGVjdCBwYWRzIik7Ci0gICAgICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKG11bHRpcGFydF9tdXgtPmNvbGxlY3QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIHJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9tdWx0aXBhcnRfbXV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfbXVsdGlwYXJ0X211eF9kZWJ1ZywgIm11bHRpcGFydG11eCIsIDAsCi0gICAgICAibXVsdGlwYXJ0IG11eGVyIik7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJtdWx0aXBhcnRtdXgiLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfTVVMVElQQVJUX01VWCk7Ci19CmRpZmYgLS1naXQgYS9nc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5oIGIvZ3N0L211bHRpcGFydC9tdWx0aXBhcnRtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0NGY1YS4uMDAwMDAwMAotLS0gYS9nc3QvbXVsdGlwYXJ0L211bHRpcGFydG11eC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3RtdWx0aXBhcnRtdXguaDogbXVsdGlwYXJ0IHN0cmVhbSBtdXhlcgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfTVVMVElQQVJUX01VWF9fCi0jZGVmaW5lIF9fR1NUX01VTFRJUEFSVF9NVVhfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGNvbGxlY3RwYWRzLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX01VTFRJUEFSVF9NVVggKGdzdF9tdWx0aXBhcnRfbXV4X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9NVUxUSVBBUlRfTVVYKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX01VTFRJUEFSVF9NVVgsIEdzdE11bHRpcGFydE11eCkpCi0jZGVmaW5lIEdTVF9NVUxUSVBBUlRfTVVYX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9NVUxUSVBBUlRfTVVYLCBHc3RNdWx0aXBhcnRNdXgpKQotI2RlZmluZSBHU1RfTVVMVElQQVJUX01VWF9HRVRfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX01VTFRJUEFSVF9NVVgsIEdzdE11bHRpcGFydE11eENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX01VTFRJUEFSVF9NVVgob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfTVVMVElQQVJUX01VWCkpCi0jZGVmaW5lIEdTVF9JU19NVUxUSVBBUlRfTVVYX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9NVUxUSVBBUlRfTVVYKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE11bHRpcGFydE11eCBHc3RNdWx0aXBhcnRNdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TXVsdGlwYXJ0TXV4Q2xhc3MgR3N0TXVsdGlwYXJ0TXV4Q2xhc3M7Ci0KLS8qIGFsbCBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIG9uZSBtdWx0aXBhcnQgc3RyZWFtICovCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RDb2xsZWN0RGF0YSBjb2xsZWN0OyAgICAgICAvKiB3ZSBleHRlbmQgdGhlIENvbGxlY3REYXRhICovCi0KLSAgR3N0QnVmZmVyICpidWZmZXI7ICAgICAgICAgICAgLyogdGhlIHF1ZXVlZCBidWZmZXIgZm9yIHRoaXMgcGFkICovCi0gIEdzdENsb2NrVGltZSBwdHNfdGltZXN0YW1wOyAgIC8qIGl0cyBwdHMgdGltZXN0YW1wLCBjb252ZXJ0ZWQgdG8gcnVubmluZ190aW1lIHNvIHRoYXQgd2UgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseSBzb3J0IG92ZXIgbXVsdGlwbGUgc2VnbWVudHMuICovCi0gIEdzdENsb2NrVGltZSBkdHNfdGltZXN0YW1wOyAgIC8qIGl0cyBkdHMgdGltZXN0YW1wLCBjb252ZXJ0ZWQgdG8gcnVubmluZ190aW1lIHNvIHRoYXQgd2UgY2FuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RseSBzb3J0IG92ZXIgbXVsdGlwbGUgc2VnbWVudHMuICovCi0gIEdzdFBhZCAqcGFkOwotfQotR3N0TXVsdGlwYXJ0UGFkRGF0YTsKLQotLyoqCi0gKiBHc3RNdWx0aXBhcnRNdXg6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0TXVsdGlwYXJ0TXV4IHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RNdWx0aXBhcnRNdXgKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qIHBhZCAqLwotICBHc3RQYWQgKnNyY3BhZDsKLQotICAvKiBzaW5rcGFkcyAqLwotICBHc3RDb2xsZWN0UGFkcyAqY29sbGVjdDsKLQotICBnaW50IG51bXBhZHM7Ci0KLSAgLyogb2Zmc2V0IGluIHN0cmVhbSAqLwotICBndWludDY0IG9mZnNldDsKLQotICAvKiBib3VuZGFyeSBzdHJpbmcgKi8KLSAgZ2NoYXIgKmJvdW5kYXJ5OwotCi0gIGdib29sZWFuIG5lZ290aWF0ZWQ7Ci0gIGdib29sZWFuIG5lZWRfc2VnbWVudDsKLSAgZ2Jvb2xlYW4gbmVlZF9zdHJlYW1fc3RhcnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdE11bHRpcGFydE11eENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgR0hhc2hUYWJsZSAqbWltZXR5cGVzOwotfTsKLQotR1R5cGUgZ3N0X211bHRpcGFydF9tdXhfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfbXVsdGlwYXJ0X211eF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01VTFRJUEFSVF9NVVhfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvcmVwbGF5Z2Fpbi9NYWtlZmlsZS5hbSBiL2dzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2Y2NGMzLi4wMDAwMDAwCi0tLSBhL2dzdC9yZXBsYXlnYWluL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0cmVwbGF5Z2Fpbi5sYQotCi1saWJnc3RyZXBsYXlnYWluX2xhX1NPVVJDRVMgPSBcCi0JZ3N0cmdhbmFseXNpcy5jICAgICAgIFwKLQlnc3RyZ2xpbWl0ZXIuYyAgICAgICAgXAotCWdzdHJndm9sdW1lLmMgICAgICAgICBcCi0JcmVwbGF5Z2Fpbi5jICAgICAgICAgIFwKLQlyZ2FuYWx5c2lzLmMKLWxpYmdzdHJlcGxheWdhaW5fbGFfQ0ZMQUdTICA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0cmVwbGF5Z2Fpbl9sYV9MSUJBREQgID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJNKQotbGliZ3N0cmVwbGF5Z2Fpbl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RyZXBsYXlnYWluX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLSMgaGVhZGVycyB3ZSBuZWVkIGJ1dCBkb24ndCB3YW50IGluc3RhbGxlZAotbm9pbnN0X0hFQURFUlMgPSAgICAgICAgIFwKLQlnc3RyZ2FuYWx5c2lzLmggIFwKLQlnc3RyZ2xpbWl0ZXIuaCAgIFwKLQlnc3RyZ3ZvbHVtZS5oICAgIFwKLQlyZXBsYXlnYWluLmggICAgIFwKLQlyZ2FuYWx5c2lzLmgKZGlmZiAtLWdpdCBhL2dzdC9yZXBsYXlnYWluL01ha2VmaWxlLmluIGIvZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMTEwMWEuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NjUgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3JlcGxheWdhaW4KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RyZXBsYXlnYWluX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RyZXBsYXlnYWluX2xhX09CSkVDVFMgPSBsaWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnYW5hbHlzaXMubG8gXAotCWxpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLmxvIFwKLQlsaWJnc3RyZXBsYXlnYWluX2xhLWdzdHJndm9sdW1lLmxvIFwKLQlsaWJnc3RyZXBsYXlnYWluX2xhLXJlcGxheWdhaW4ubG8gXAotCWxpYmdzdHJlcGxheWdhaW5fbGEtcmdhbmFseXNpcy5sbwotbGliZ3N0cmVwbGF5Z2Fpbl9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RyZXBsYXlnYWluX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RyZXBsYXlnYWluX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmdzdHJlcGxheWdhaW5fbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RyZXBsYXlnYWluX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHJlcGxheWdhaW5fbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0cmVwbGF5Z2Fpbi5sYQotbGliZ3N0cmVwbGF5Z2Fpbl9sYV9TT1VSQ0VTID0gXAotCWdzdHJnYW5hbHlzaXMuYyAgICAgICBcCi0JZ3N0cmdsaW1pdGVyLmMgICAgICAgIFwKLQlnc3RyZ3ZvbHVtZS5jICAgICAgICAgXAotCXJlcGxheWdhaW4uYyAgICAgICAgICBcCi0JcmdhbmFseXNpcy5jCi0KLWxpYmdzdHJlcGxheWdhaW5fbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi0KLWxpYmdzdHJlcGxheWdhaW5fbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHBidXRpbHMtJChHU1RfQVBJX1ZFUlNJT04pIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChMSUJNKQotCi1saWJnc3RyZXBsYXlnYWluX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHJlcGxheWdhaW5fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotIyBoZWFkZXJzIHdlIG5lZWQgYnV0IGRvbid0IHdhbnQgaW5zdGFsbGVkCi1ub2luc3RfSEVBREVSUyA9IFwKLQlnc3RyZ2FuYWx5c2lzLmggIFwKLQlnc3RyZ2xpbWl0ZXIuaCAgIFwKLQlnc3RyZ3ZvbHVtZS5oICAgIFwKLQlyZXBsYXlnYWluLmggICAgIFwKLQlyZ2FuYWx5c2lzLmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3JlcGxheWdhaW4vTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RyZXBsYXlnYWluLmxhOiAkKGxpYmdzdHJlcGxheWdhaW5fbGFfT0JKRUNUUykgJChsaWJnc3RyZXBsYXlnYWluX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RyZXBsYXlnYWluX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RyZXBsYXlnYWluX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3RyZXBsYXlnYWluX2xhX09CSkVDVFMpICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdhbmFseXNpcy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ3ZvbHVtZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtcmVwbGF5Z2Fpbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtcmdhbmFseXNpcy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ2FuYWx5c2lzLmxvOiBnc3RyZ2FuYWx5c2lzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RyZXBsYXlnYWluX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlcGxheWdhaW5fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdhbmFseXNpcy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ2FuYWx5c2lzLlRwbyAtYyAtbyBsaWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnYW5hbHlzaXMubG8gYHRlc3QgLWYgJ2dzdHJnYW5hbHlzaXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmdhbmFseXNpcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnYW5hbHlzaXMuVHBvICQoREVQRElSKS9saWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnYW5hbHlzaXMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cmdhbmFseXNpcy5jJyBvYmplY3Q9J2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdhbmFseXNpcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJlcGxheWdhaW5fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnYW5hbHlzaXMubG8gYHRlc3QgLWYgJ2dzdHJnYW5hbHlzaXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmdhbmFseXNpcy5jCi0KLWxpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLmxvOiBnc3RyZ2xpbWl0ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJlcGxheWdhaW5fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ2xpbWl0ZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLlRwbyAtYyAtbyBsaWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnbGltaXRlci5sbyBgdGVzdCAtZiAnZ3N0cmdsaW1pdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJnbGltaXRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZXBsYXlnYWluX2xhLWdzdHJnbGltaXRlci5UcG8gJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJnbGltaXRlci5jJyBvYmplY3Q9J2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZXBsYXlnYWluX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmdsaW1pdGVyLmxvIGB0ZXN0IC1mICdnc3RyZ2xpbWl0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmdsaW1pdGVyLmMKLQotbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ3ZvbHVtZS5sbzogZ3N0cmd2b2x1bWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJlcGxheWdhaW5fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ3ZvbHVtZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ3ZvbHVtZS5UcG8gLWMgLW8gbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ3ZvbHVtZS5sbyBgdGVzdCAtZiAnZ3N0cmd2b2x1bWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cmd2b2x1bWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1nc3RyZ3ZvbHVtZS5UcG8gJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmd2b2x1bWUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cmd2b2x1bWUuYycgb2JqZWN0PSdsaWJnc3RyZXBsYXlnYWluX2xhLWdzdHJndm9sdW1lLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZXBsYXlnYWluX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJlcGxheWdhaW5fbGEtZ3N0cmd2b2x1bWUubG8gYHRlc3QgLWYgJ2dzdHJndm9sdW1lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJndm9sdW1lLmMKLQotbGliZ3N0cmVwbGF5Z2Fpbl9sYS1yZXBsYXlnYWluLmxvOiByZXBsYXlnYWluLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RyZXBsYXlnYWluX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlcGxheWdhaW5fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJlcGxheWdhaW5fbGEtcmVwbGF5Z2Fpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1yZXBsYXlnYWluLlRwbyAtYyAtbyBsaWJnc3RyZXBsYXlnYWluX2xhLXJlcGxheWdhaW4ubG8gYHRlc3QgLWYgJ3JlcGxheWdhaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmVwbGF5Z2Fpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RyZXBsYXlnYWluX2xhLXJlcGxheWdhaW4uVHBvICQoREVQRElSKS9saWJnc3RyZXBsYXlnYWluX2xhLXJlcGxheWdhaW4uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncmVwbGF5Z2Fpbi5jJyBvYmplY3Q9J2xpYmdzdHJlcGxheWdhaW5fbGEtcmVwbGF5Z2Fpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJlcGxheWdhaW5fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RyZXBsYXlnYWluX2xhLXJlcGxheWdhaW4ubG8gYHRlc3QgLWYgJ3JlcGxheWdhaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcmVwbGF5Z2Fpbi5jCi0KLWxpYmdzdHJlcGxheWdhaW5fbGEtcmdhbmFseXNpcy5sbzogcmdhbmFseXNpcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cmVwbGF5Z2Fpbl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RyZXBsYXlnYWluX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RyZXBsYXlnYWluX2xhLXJnYW5hbHlzaXMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJlcGxheWdhaW5fbGEtcmdhbmFseXNpcy5UcG8gLWMgLW8gbGliZ3N0cmVwbGF5Z2Fpbl9sYS1yZ2FuYWx5c2lzLmxvIGB0ZXN0IC1mICdyZ2FuYWx5c2lzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJnYW5hbHlzaXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1yZ2FuYWx5c2lzLlRwbyAkKERFUERJUikvbGliZ3N0cmVwbGF5Z2Fpbl9sYS1yZ2FuYWx5c2lzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3JnYW5hbHlzaXMuYycgb2JqZWN0PSdsaWJnc3RyZXBsYXlnYWluX2xhLXJnYW5hbHlzaXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RyZXBsYXlnYWluX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJlcGxheWdhaW5fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cmVwbGF5Z2Fpbl9sYS1yZ2FuYWx5c2lzLmxvIGB0ZXN0IC1mICdyZ2FuYWx5c2lzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJnYW5hbHlzaXMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmMgYi9nc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNzJjMTAuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmdhbmFseXNpcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBSZXBsYXlHYWluIGFuYWx5c2lzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLSAqIAotICogZ3N0cmdhbmFseXNpcy5jOiBFbGVtZW50IHRoYXQgcGVyZm9ybXMgdGhlIFJlcGxheUdhaW4gYW5hbHlzaXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1yZ2FuYWx5c2lzCi0gKiBAc2VlX2Fsc286ICNHc3RSZ1ZvbHVtZQotICoKLSAqIFRoaXMgZWxlbWVudCBhbmFseXplcyByYXcgYXVkaW8gc2FtcGxlIGRhdGEgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm9wb3NlZAotICogPHVsaW5rIHVybD0iaHR0cDovL3JlcGxheWdhaW4ub3JnIj5SZXBsYXlHYWluIHN0YW5kYXJkPC91bGluaz4gZm9yCi0gKiBjYWxjdWxhdGluZyB0aGUgaWRlYWwgcmVwbGF5IGdhaW4gZm9yIG11c2ljIHRyYWNrcyBhbmQgYWxidW1zLiAgVGhlIGVsZW1lbnQKLSAqIGlzIGRlc2lnbmVkIGFzIGEgcGFzcy10aHJvdWdoIGZpbHRlciB0aGF0IG5ldmVyIG1vZGlmaWVzIGFueSBkYXRhLiAgQXMgaXQKLSAqIHJlY2VpdmVzIGFuIEVPUyBldmVudCwgaXQgZmluYWxpemVzIHRoZSBvbmdvaW5nIGFuYWx5c2lzIGFuZCBnZW5lcmF0ZXMgYSB0YWcKLSAqIGxpc3QgY29udGFpbmluZyB0aGUgcmVzdWx0cy4gIEl0IGlzIHNlbnQgZG93bnN0cmVhbSB3aXRoIGEgdGFnIGV2ZW50IGFuZAotICogcG9zdGVkIG9uIHRoZSBtZXNzYWdlIGJ1cyB3aXRoIGEgdGFnIG1lc3NhZ2UuICBUaGUgRU9TIGV2ZW50IGlzIGZvcndhcmRlZCBhcwotICogbm9ybWFsIGFmdGVyd2FyZHMuICBSZXN1bHQgdGFnIGxpc3RzIGF0IGxlYXN0IGNvbnRhaW4gdGhlIHRhZ3MKLSAqICNHU1RfVEFHX1RSQUNLX0dBSU4sICNHU1RfVEFHX1RSQUNLX1BFQUsgYW5kICNHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTC4KLSAqIAotICogQmVjYXVzZSB0aGUgZ2VuZXJhdGVkIG1ldGFkYXRhIHRhZ3MgYmVjb21lIGF2YWlsYWJsZSBhdCB0aGUgZW5kIG9mIHN0cmVhbXMsCi0gKiBkb3duc3RyZWFtIG11eGVyIGFuZCBlbmNvZGVyIGVsZW1lbnRzIGFyZSBub3JtYWxseSB1bmFibGUgdG8gc2F2ZSB0aGVtIGluCi0gKiB0aGVpciBvdXRwdXQgc2luY2UgdGhleSBnZW5lcmFsbHkgc2F2ZSBtZXRhZGF0YSBpbiB0aGUgZmlsZSBoZWFkZXIuCi0gKiBUaGVyZWZvcmUsIGl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0aGF0IGFwcGxpY2F0aW9ucyByZWFkIHRoZSByZXN1bHRzIGluIGEgYnVzCi0gKiBldmVudCBoYW5kbGVyIGZvciB0aGUgdGFnIG1lc3NhZ2UuICBPYnRhaW5pbmcgdGhlIHZhbHVlcyB0aGlzIHdheSBpcyBhbHdheXMKLSAqIG5lZWRlZCBmb3IgYWxidW0gcHJvY2Vzc2luZyAoc2VlICNHc3RSZ0FuYWx5c2lzOm51bS10cmFja3MgcHJvcGVydHkpIHNpbmNlCi0gKiB0aGUgYWxidW0gZ2FpbiBhbmQgcGVhayB2YWx1ZXMgbmVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYWxsIHRyYWNrcyBvZiBhbgotICogYWxidW0sIG5vdCBqdXN0IHRoZSBsYXN0IG9uZS4KLSAqIAotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdCBhdWRpb3Rlc3RzcmMgd2F2ZT1zaW5lIG51bS1idWZmZXJzPTUxMiAhIHJnYW5hbHlzaXMgISBmYWtlc2luawotICogXXwgQW5hbHl6ZSBhIHNpbXBsZSB0ZXN0IHdhdmVmb3JtCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXQgZmlsZXNyYyBsb2NhdGlvbj1maWxlbmFtZS5leHQgISBkZWNvZGViaW4gXAotICogICAgICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIHJnYW5hbHlzaXMgISBmYWtlc2luawotICogXXwgQW5hbHl6ZSBhIGdpdmVuIGZpbGUKLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdCBnbm9tZXZmc3NyYyBsb2NhdGlvbj1odHRwOi8vcmVwbGF5Z2Fpbi5oeWRyb2dlbmF1ZGlvLm9yZy9yZWZfcGluay53YXYgXAotICogICAgICEgd2F2cGFyc2UgISByZ2FuYWx5c2lzICEgZmFrZXNpbmsKLSAqIF18IEFuYWx5emUgdGhlIHBpbmsgbm9pc2UgcmVmZXJlbmNlIGZpbGUKLSAqIDxwYXJhPgotICogVGhlIGFib3ZlIGxhdW5jaCBsaW5lIHlpZWxkcyBhIHJlc3VsdCBnYWluIG9mICs2IGRCIChpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZAotICogKzAgZEIpLiAgVGhpcyBpcyBub3QgaW4gZXJyb3IsIHJlZmVyIHRvIHRoZSAjR3N0UmdBbmFseXNpczpyZWZlcmVuY2UtbGV2ZWwKLSAqIHByb3BlcnR5IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKiA8L3BhcmE+Ci0gKiA8L3JlZnNlY3QyPgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkFja25vd2xlZGdlbWVudHM8L3RpdGxlPgotICogPHBhcmE+Ci0gKiBUaGlzIGVsZW1lbnQgaXMgYmFzZWQgb24gY29kZSB1c2VkIGluIHRoZSA8dWxpbmsKLSAqIHVybD0iaHR0cDovL3NqZW5nLm9yZy92b3JiaXNnYWluLmh0bWwiPnZvcmJpc2dhaW48L3VsaW5rPiBwcm9ncmFtIGFuZCBtYW55Ci0gKiBvdGhlcnMuICBUaGUgcmVsZXZhbnQgcGFydHMgYXJlIGNvcHlyaWdodGVkIGJ5IERhdmlkIFJvYmluc29uLCBHbGVuIFNhd3llcgotICogYW5kIEZyYW5rIEtsZW1tLgotICogPC9wYXJhPgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ3N0cmdhbmFseXNpcy5oIgotI2luY2x1ZGUgInJlcGxheWdhaW4uaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3JnX2FuYWx5c2lzX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9yZ19hbmFseXNpc19kZWJ1ZwotCi0vKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlLiAqLwotI2RlZmluZSBGT1JDRURfREVGQVVMVCBUUlVFCi0jZGVmaW5lIERFRkFVTFRfTUVTU0FHRSBGQUxTRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9OVU1fVFJBQ0tTLAotICBQUk9QX0ZPUkNFRCwKLSAgUFJPUF9SRUZFUkVOQ0VfTEVWRUwsCi0gIFBST1BfTUVTU0FHRQotfTsKLQotLyogVGhlIFJlcGxheUdhaW4gYWxnb3JpdGhtIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBtb25vIGFuZCBzdGVyZW8KLSAqIGF1ZGlvLiAgVGhlIHVzZWQgaW1wbGVtZW50YXRpb24gaGFzIGZpbHRlciBjb2VmZmljaWVudHMgZm9yIHRoZQotICogInVzdWFsIiBzYW1wbGUgcmF0ZXMgaW4gdGhlIDgwMDAgdG8gNDgwMDAgSHogcmFuZ2UuICovCi0jZGVmaW5lIFJFUExBWV9HQUlOX0NBUFMgImF1ZGlvL3gtcmF3LCIgXAotICAiZm9ybWF0ID0gKHN0cmluZykgeyAiR1NUX0FVRElPX05FKEYzMikiLCJHU1RfQVVESU9fTkUoUzE2KSIgfSwgIiAgICAgXAotICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAicmF0ZSA9IChpbnQpIHsgODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwgIiAgICAgXAotICAiNDQxMDAsIDQ4MDAwIH07ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiYXVkaW8veC1yYXcsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiZm9ybWF0ID0gKHN0cmluZykgeyAiR1NUX0FVRElPX05FKEYzMikiLCJHU1RfQVVESU9fTkUoUzE2KSIgfSwgIiAgICAgXAotICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiY2hhbm5lbHMgPSAoaW50KSAyLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiY2hhbm5lbC1tYXNrID0gKGJpdG1hc2spIDB4MywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAicmF0ZSA9IChpbnQpIHsgODAwMCwgMTEwMjUsIDEyMDAwLCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwgIiAgICAgXAotICAiNDQxMDAsIDQ4MDAwIH0iCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFJFUExBWV9HQUlOX0NBUFMpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoUkVQTEFZX0dBSU5fQ0FQUykpOwotCi0jZGVmaW5lIGdzdF9yZ19hbmFseXNpc19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSZ0FuYWx5c2lzLCBnc3RfcmdfYW5hbHlzaXMsIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKLQotc3RhdGljIHZvaWQgZ3N0X3JnX2FuYWx5c2lzX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9yZ19hbmFseXNpc19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcmdfYW5hbHlzaXNfc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcmdfYW5hbHlzaXNfc2V0X2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdENhcHMgKiBpbmNhcHMsIEdzdENhcHMgKiBvdXRjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9yZ19hbmFseXNpc190cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3JnX2FuYWx5c2lzX3NpbmtfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9yZ19hbmFseXNpc19zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9yZ19hbmFseXNpc19oYW5kbGVfdGFncyAoR3N0UmdBbmFseXNpcyAqIGZpbHRlciwKLSAgICBjb25zdCBHc3RUYWdMaXN0ICogdGFnX2xpc3QpOwotc3RhdGljIHZvaWQgZ3N0X3JnX2FuYWx5c2lzX2hhbmRsZV9lb3MgKEdzdFJnQW5hbHlzaXMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9yZ19hbmFseXNpc190cmFja19yZXN1bHQgKEdzdFJnQW5hbHlzaXMgKiBmaWx0ZXIsCi0gICAgR3N0VGFnTGlzdCAqKiB0YWdfbGlzdCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3JnX2FuYWx5c2lzX2FsYnVtX3Jlc3VsdCAoR3N0UmdBbmFseXNpcyAqIGZpbHRlciwKLSAgICBHc3RUYWdMaXN0ICoqIHRhZ19saXN0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9yZ19hbmFseXNpc19jbGFzc19pbml0IChHc3RSZ0FuYWx5c2lzQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9yZ19hbmFseXNpc19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9yZ19hbmFseXNpc19nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdFJnQW5hbHlzaXM6bnVtLXRyYWNrczoKLSAgICoKLSAgICogTnVtYmVyIG9mIHJlbWFpbmluZyBhbGJ1bSB0cmFja3MuCi0gICAqIAotICAgKiBBbmFseXppbmcgc2V2ZXJhbCBzdHJlYW1zIHNlcXVlbnRpYWxseSBhbmQgYXNzaWduaW5nIHRoZW0gYSBjb21tb24gcmVzdWx0Ci0gICAqIGdhaW4gaXMga25vd24gYXMgImFsYnVtIHByb2Nlc3NpbmciLiAgSWYgdGhpcyBnYWluIGlzIHVzZWQgZHVyaW5nIHBsYXliYWNrCi0gICAqIChieSBzd2l0Y2hpbmcgdG8gImFsYnVtIG1vZGUiKSwgYWxsIHRyYWNrcyBvZiBhbiBhbGJ1bSByZWNlaXZlIHRoZSBzYW1lCi0gICAqIGFtcGxpZmljYXRpb24uICBUaGlzIGtlZXBzIHRoZSByZWxhdGl2ZSB2b2x1bWUgbGV2ZWxzIGJldHdlZW4gdGhlIHRyYWNrcwotICAgKiBpbnRhY3QuICBUbyBlbmFibGUgdGhpcywgc2V0IHRoaXMgcHJvcGVydHkgdG8gdGhlIG51bWJlciBvZiBzdHJlYW1zIHRoYXQKLSAgICogd2lsbCBiZSBwcm9jZXNzZWQgYXMgYWxidW0gdHJhY2tzLgotICAgKgotICAgKiBFdmVyeSB0aW1lIGFuIEVPUyBldmVudCBpcyByZWNlaXZlZCwgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgaXMKLSAgICogZGVjcmVtZW50ZWQgYnkgb25lLiAgQXMgaXQgcmVhY2hlcyB6ZXJvLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxhc3QgdHJhY2sKLSAgICogb2YgdGhlIGFsYnVtIGZpbmlzaGVkLiAgVGhlIHRhZyBsaXN0IGZvciB0aGUgZmluYWwgc3RyZWFtIHdpbGwgY29udGFpbiB0aGUKLSAgICogYWRkaXRpb25hbCB0YWdzICNHU1RfVEFHX0FMQlVNX0dBSU4gYW5kICNHU1RfVEFHX0FMQlVNX1BFQUsuICBBbGwgb3RoZXIKLSAgICogc3RyZWFtcyBqdXN0IGdldCB0aGUgdHdvIHRyYWNrIHRhZ3MgcG9zdGVkIGJlY2F1c2UgdGhlIHZhbHVlcyBmb3IgdGhlIGFsYnVtCi0gICAqIHRhZ3MgYXJlIG5vdCBrbm93biBiZWZvcmUgYWxsIHRyYWNrcyBhcmUgYW5hbHl6ZWQuICBBcHBsaWNhdGlvbnMgbmVlZCB0bwotICAgKiBlbnN1cmUgdGhhdCB0aGUgYWxidW0gZ2FpbiBhbmQgcGVhayB2YWx1ZXMgYXJlIGFsc28gYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgKiBvdGhlciB0cmFja3Mgd2hlbiBzdG9yaW5nIHRoZSByZXN1bHRzLgotICAgKgotICAgKiBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIGFsYnVtIHRyYWNrcyBpcyB1bmtub3duIGJlZm9yZWhhbmQsIGp1c3QgZW5zdXJlIHRoYXQKLSAgICogdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAxIGJlZm9yZSBlYWNoIHRyYWNrIHN0YXJ0cy4gIFRoZW4gYmVmb3JlIHRoZSBlbmQKLSAgICogb2YgdGhlIGxhc3QgdHJhY2ssIHNldCBpdCB0byB0aGUgdmFsdWUgMS4KLSAgICoKLSAgICogVG8gcGVyZm9ybSBhbGJ1bSBwcm9jZXNzaW5nLCB0aGUgZWxlbWVudCBoYXMgdG8gcHJlc2VydmUgZGF0YSBiZXR3ZWVuCi0gICAqIHN0cmVhbXMuICBUaGlzIGNhbm5vdCBzdXJ2aXZlIGEgc3RhdGUgY2hhbmdlIHRvIHRoZSBOVUxMIG9yIFJFQURZIHN0YXRlLgotICAgKiBJZiB5b3UgY2hhbmdlIHlvdXIgcGlwZWxpbmUncyBzdGF0ZSB0byBOVUxMIG9yIFJFQURZIGJldHdlZW4gdHJhY2tzLCBsb2NrCi0gICAqIHRoZSBlbGVtZW50J3Mgc3RhdGUgdXNpbmcgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSgpIHdoZW4gaXQgaXMgaW4KLSAgICogUEFVU0VEIG9yIFBMQVlJTkcuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9UUkFDS1MsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgibnVtLXRyYWNrcyIsICJOdW1iZXIgb2YgYWxidW0gdHJhY2tzIiwKLSAgICAgICAgICAiTnVtYmVyIG9mIHJlbWFpbmluZyBhbGJ1bSB0cmFja3MiLCAwLCBHX01BWElOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFJnQW5hbHlzaXM6Zm9yY2VkOgotICAgKgotICAgKiBXaGV0aGVyIHRvIGFuYWx5emUgc3RyZWFtcyBldmVuIHdoZW4gUmVwbGF5R2FpbiB0YWdzIGV4aXN0LgotICAgKgotICAgKiBGb3IgYXNzaXN0aW5nIHRyYW5zY29kZXIvY29udmVydGVyIGFwcGxpY2F0aW9ucywgdGhlIGVsZW1lbnQgY2FuIHNpbGVudGx5Ci0gICAqIHNraXAgdGhlIHByb2Nlc3Npbmcgb2Ygc3RyZWFtcyB0aGF0IGFscmVhZHkgY29udGFpbiB0aGUgbmVjZXNzYXJ5IHRhZ3MuCi0gICAqIERhdGEgd2lsbCBmbG93IGFzIHVzdWFsIGJ1dCB0aGUgZWxlbWVudCB3aWxsIG5vdCBjb25zdW1lIENQVSB0aW1lIGFuZCB3aWxsCi0gICAqIG5vdCBnZW5lcmF0ZSByZXN1bHQgdGFncy4gIFRvIGVuYWJsZSBwb3NzaWJsZSBza2lwcGluZywgc2V0IHRoaXMgcHJvcGVydHkKLSAgICogdG8gI0ZBTFNFLgotICAgKgotICAgKiBJZiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggPGxpbmsgbGlua2VuZD0iR3N0UmdBbmFseXNpcy0tbnVtLXRyYWNrcyI+YWxidW0KLSAgICogcHJvY2Vzc2luZzwvbGluaz4sIHRoZSBlbGVtZW50IHdpbGwgc2tpcCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBhbGJ1bQotICAgKiB0cmFja3MgaWYgYSBmdWxsIHNldCBvZiB0YWdzIGlzIGZvdW5kIGZvciB0aGUgZmlyc3QgdHJhY2suICBJZiBhIHN1YnNlcXVlbnQKLSAgICogdHJhY2sgb2YgdGhlIGFsYnVtIGlzIG1pc3NpbmcgdGFncywgcHJvY2Vzc2luZyBjYW5ub3Qgc3RhcnQgYWdhaW4uICBJZiB0aGlzCi0gICAqIGlzIHVuZGVzaXJlZCwgdGhlIGFwcGxpY2F0aW9uIGhhcyB0byBzY2FuIGFsbCBmaWxlcyBiZWZvcmVoYW5kIGFuZCBlbmFibGUKLSAgICogZm9yY2luZyBvZiBwcm9jZXNzaW5nIGlmIG5lZWRlZC4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRk9SQ0VELAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJmb3JjZWQiLCAiRm9yY2VkIiwKLSAgICAgICAgICAiQW5hbHl6ZSBldmVuIGlmIFJlcGxheUdhaW4gdGFncyBleGlzdCIsCi0gICAgICAgICAgRk9SQ0VEX0RFRkFVTFQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0UmdBbmFseXNpczpyZWZlcmVuY2UtbGV2ZWw6Ci0gICAqCi0gICAqIFJlZmVyZW5jZSBsZXZlbCBbZEJdLgotICAgKgotICAgKiBBbmFseXppbmcgdGhlIFJlcGxheUdhaW4gcGluayBub2lzZSByZWZlcmVuY2Ugd2F2ZWZvcm0gY29tcHV0ZXMgYSByZXN1bHQgb2YKLSAgICogKzYgZEIgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgMCBkQi4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgZGVmYXVsdCByZWZlcmVuY2UKLSAgICogbGV2ZWwgaXMgODkgZEIuICBUbyBvYnRhaW4gdmFsdWVzIGFzIGxpbmVkIG91dCBpbiB0aGUgb3JpZ2luYWwgcHJvcG9zYWwgb2YKLSAgICogUmVwbGF5R2Fpbiwgc2V0IHRoaXMgcHJvcGVydHkgdG8gODMuCi0gICAqCi0gICAqIEFsbW9zdCBhbGwgc29mdHdhcmUgdXNlcyA4OSBkQiBhcyBhIHJlZmVyZW5jZSBob3dldmVyLCBhbmQgdGhpcyB2YWx1ZSBoYXMKLSAgICogYmVjb21lIHRoZSBuZXcgb2ZmaWNpYWwgdmFsdWUuICBUaGF0IGlzIHRvIHNheSwgd2hpbGUgdGhlIGNoYW5nZSBoYXMgYmVlbgotICAgKiBhY2NsYWltZWQgYnkgdGhlIGF1dGhvciBvZiB0aGUgUmVwbGF5R2FpbiBwcm9wb3NhbCwgdGhlIDx1bGluawotICAgKiB1cmw9Imh0dHA6Ly9yZXBsYXlnYWluLm9yZyI+d2VicGFnZTwvdWxpbms+IGlzIHN0aWxsIG91dGRhdGVkIGF0IHRoZSB0aW1lCi0gICAqIG9mIHRoaXMgd3JpdGluZy4KLSAgICoKLSAgICogVGhlIHZhbHVlIHdhcyBjaGFuZ2VkIGJlY2F1c2UgdGhlIG9yaWdpbmFsIHByb3Bvc2FsIHJlY29tbWVuZHMgYSBkZWZhdWx0Ci0gICAqIHByZS1hbXAgdmFsdWUgb2YgKzYgZEIgZm9yIHBsYXliYWNrLiAgVGhpcyBzZWVtZWQgYSBiaXQgb2RkLCBhcyBpdCBtZWFucwotICAgKiB0aGF0IHRoZSBhbGdvcml0aG0gaGFzIHRoZSBnZW5lcmFsIHRlbmRlbmN5IHRvIHByb2R1Y2UgYWRqdXN0bWVudCB2YWx1ZXMKLSAgICogdGhhdCBhcmUgNiBkQiB0b28gbG93LiAgQnVtcGluZyB0aGUgcmVmZXJlbmNlIGxldmVsIGJ5IDYgZEIgY29tcGVuc2F0ZWQgZm9yCi0gICAqIHRoaXMuCi0gICAqCi0gICAqIFRoZSBwcm9ibGVtIG9mIHRoZSByZWZlcmVuY2UgbGV2ZWwgYmVpbmcgYW1iaWd1b3VzIGZvciBsYWNrIG9mIGNvbmNpc2UKLSAgICogc3RhbmRhcmRpemF0aW9uIGlzIHRvIGJlIHNvbHZlZCBieSBhZG9wdGluZyB0aGUgI0dTVF9UQUdfUkVGRVJFTkNFX0xFVkVMCi0gICAqIHRhZywgd2hpY2ggYWxsb3dzIHRvIHN0b3JlIHRoZSB1c2VkIHZhbHVlIGFsb25nc2lkZSB0aGUgZ2FpbiB2YWx1ZXMuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JFRkVSRU5DRV9MRVZFTCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJyZWZlcmVuY2UtbGV2ZWwiLCAiUmVmZXJlbmNlIGxldmVsIiwKLSAgICAgICAgICAiUmVmZXJlbmNlIGxldmVsIFtkQl0iLCAwLjAsIDE1MC4sIFJHX1JFRkVSRU5DRV9MRVZFTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX01FU1NBR0UsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm1lc3NhZ2UiLCAiTWVzc2FnZSIsCi0gICAgICAgICAgIlBvc3Qgc3RhdGljcyBtZXNzYWdlcyIsCi0gICAgICAgICAgREVGQVVMVF9NRVNTQUdFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICB0cmFuc19jbGFzcy0+c3RhcnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JnX2FuYWx5c2lzX3N0YXJ0KTsKLSAgdHJhbnNfY2xhc3MtPnNldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9yZ19hbmFseXNpc19zZXRfY2Fwcyk7Ci0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1faXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JnX2FuYWx5c2lzX3RyYW5zZm9ybV9pcCk7Ci0gIHRyYW5zX2NsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9yZ19hbmFseXNpc19zaW5rX2V2ZW50KTsKLSAgdHJhbnNfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3JnX2FuYWx5c2lzX3N0b3ApOwotICB0cmFuc19jbGFzcy0+cGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzID0gVFJVRTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiUmVwbGF5R2FpbiBhbmFseXNpcyIsCi0gICAgICAiRmlsdGVyL0FuYWx5emVyL0F1ZGlvIiwKLSAgICAgICJQZXJmb3JtIHRoZSBSZXBsYXlHYWluIGFuYWx5c2lzIiwKLSAgICAgICJSZW5ceGMzXHhhOSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcmdfYW5hbHlzaXNfZGVidWcsICJyZ2FuYWx5c2lzIiwgMCwKLSAgICAgICJSZXBsYXlHYWluIGFuYWx5c2lzIGVsZW1lbnQiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ19hbmFseXNpc19pbml0IChHc3RSZ0FuYWx5c2lzICogZmlsdGVyKQotewotICBHc3RCYXNlVHJhbnNmb3JtICpiYXNlID0gR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpOwotCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfZ2FwX2F3YXJlIChiYXNlLCBUUlVFKTsKLQotICBmaWx0ZXItPm51bV90cmFja3MgPSAwOwotICBmaWx0ZXItPmZvcmNlZCA9IEZPUkNFRF9ERUZBVUxUOwotICBmaWx0ZXItPm1lc3NhZ2UgPSBERUZBVUxUX01FU1NBR0U7Ci0gIGZpbHRlci0+cmVmZXJlbmNlX2xldmVsID0gUkdfUkVGRVJFTkNFX0xFVkVMOwotCi0gIGZpbHRlci0+Y3R4ID0gTlVMTDsKLSAgZmlsdGVyLT5hbmFseXplID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ19hbmFseXNpc19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UmdBbmFseXNpcyAqZmlsdGVyID0gR1NUX1JHX0FOQUxZU0lTIChvYmplY3QpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX05VTV9UUkFDS1M6Ci0gICAgICBmaWx0ZXItPm51bV90cmFja3MgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GT1JDRUQ6Ci0gICAgICBmaWx0ZXItPmZvcmNlZCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZFUkVOQ0VfTEVWRUw6Ci0gICAgICBmaWx0ZXItPnJlZmVyZW5jZV9sZXZlbCA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01FU1NBR0U6Ci0gICAgICBmaWx0ZXItPm1lc3NhZ2UgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChmaWx0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JnX2FuYWx5c2lzX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSZ0FuYWx5c2lzICpmaWx0ZXIgPSBHU1RfUkdfQU5BTFlTSVMgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChmaWx0ZXIpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTlVNX1RSQUNLUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGZpbHRlci0+bnVtX3RyYWNrcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRk9SQ0VEOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+Zm9yY2VkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRUZFUkVOQ0VfTEVWRUw6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBmaWx0ZXItPnJlZmVyZW5jZV9sZXZlbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUVTU0FHRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPm1lc3NhZ2UpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ19hbmFseXNpc19wb3N0X21lc3NhZ2UgKGdwb2ludGVyIHJnYW5hbHlzaXMsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCi0gICAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCBnZG91YmxlIHJnbGV2ZWwpCi17Ci0gIEdzdFJnQW5hbHlzaXMgKmZpbHRlciA9IEdTVF9SR19BTkFMWVNJUyAocmdhbmFseXNpcyk7Ci0gIGlmIChmaWx0ZXItPm1lc3NhZ2UpIHsKLSAgICBHc3RNZXNzYWdlICptOwotCi0gICAgbSA9IGdzdF9tZXNzYWdlX25ld19lbGVtZW50IChHU1RfT0JKRUNUX0NBU1QgKHJnYW5hbHlzaXMpLAotICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoInJnYW5hbHlzaXMiLAotICAgICAgICAgICAgInRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgICAgICAgICJkdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLAotICAgICAgICAgICAgInJnbGV2ZWwiLCBHX1RZUEVfRE9VQkxFLCByZ2xldmVsLCBOVUxMKSk7Ci0KLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHJnYW5hbHlzaXMpLCBtKTsKLSAgfQotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JnX2FuYWx5c2lzX3N0YXJ0IChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSkKLXsKLSAgR3N0UmdBbmFseXNpcyAqZmlsdGVyID0gR1NUX1JHX0FOQUxZU0lTIChiYXNlKTsKLQotICBmaWx0ZXItPmlnbm9yZV90YWdzID0gRkFMU0U7Ci0gIGZpbHRlci0+c2tpcCA9IEZBTFNFOwotICBmaWx0ZXItPmhhc190cmFja19nYWluID0gRkFMU0U7Ci0gIGZpbHRlci0+aGFzX3RyYWNrX3BlYWsgPSBGQUxTRTsKLSAgZmlsdGVyLT5oYXNfYWxidW1fZ2FpbiA9IEZBTFNFOwotICBmaWx0ZXItPmhhc19hbGJ1bV9wZWFrID0gRkFMU0U7Ci0KLSAgZmlsdGVyLT5jdHggPSByZ19hbmFseXNpc19uZXcgKCk7Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoZmlsdGVyKTsKLSAgcmdfYW5hbHlzaXNfaW5pdF9zaWxlbmNlX2RldGVjdGlvbiAoZmlsdGVyLT5jdHgsIGdzdF9yZ19hbmFseXNpc19wb3N0X21lc3NhZ2UsCi0gICAgICBmaWx0ZXIpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZmlsdGVyKTsKLSAgZmlsdGVyLT5hbmFseXplID0gTlVMTDsKLQotICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLCAic3RhcnRlZCIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZ19hbmFseXNpc19zZXRfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdENhcHMgKiBpbl9jYXBzLAotICAgIEdzdENhcHMgKiBvdXRfY2FwcykKLXsKLSAgR3N0UmdBbmFseXNpcyAqZmlsdGVyID0gR1NUX1JHX0FOQUxZU0lTIChiYXNlKTsKLSAgR3N0QXVkaW9JbmZvIGluZm87Ci0gIGdpbnQgcmF0ZSwgY2hhbm5lbHM7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlci0+Y3R4ICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChmaWx0ZXIsCi0gICAgICAic2V0X2NhcHMgaW4gJSIgR1NUX1BUUl9GT1JNQVQgIiBvdXQgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBpbl9jYXBzLCBvdXRfY2Fwcyk7Ci0KLSAgaWYgKCFnc3RfYXVkaW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBpbl9jYXBzKSkKLSAgICBnb3RvIGludmFsaWRfZm9ybWF0OwotCi0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmaW5mbyk7Ci0KLSAgaWYgKCFyZ19hbmFseXNpc19zZXRfc2FtcGxlX3JhdGUgKGZpbHRlci0+Y3R4LCByYXRlKSkKLSAgICBnb3RvIGludmFsaWRfZm9ybWF0OwotCi0gIGNoYW5uZWxzID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZpbmZvKTsKLQotICBpZiAoY2hhbm5lbHMgPCAxIHx8IGNoYW5uZWxzID4gMikKLSAgICBnb3RvIGludmFsaWRfZm9ybWF0OwotCi0gIHN3aXRjaCAoR1NUX0FVRElPX0lORk9fRk9STUFUICgmaW5mbykpIHsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjMyOgotICAgICAgLyogVGhlIGRlcHRoIGlzIG5vdCB2YXJpYWJsZSBmb3IgZmxvYXQgZm9ybWF0cyBvZiBjb3Vyc2UuICBJdCBqdXN0Ci0gICAgICAgKiBtYWtlcyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIG5pY2UgYW5kIHNpbXBsZSBpZiB0aGUKLSAgICAgICAqIHJnX2FuYWx5c2lzX2FuYWx5emVfKiBmdW5jdGlvbnMgaGF2ZSBhIGNvbW1vbiBzaWduYXR1cmUuICovCi0gICAgICBmaWx0ZXItPmRlcHRoID0gc2l6ZW9mIChnZmxvYXQpICogODsKLQotICAgICAgaWYgKGNoYW5uZWxzID09IDEpCi0gICAgICAgIGZpbHRlci0+YW5hbHl6ZSA9IHJnX2FuYWx5c2lzX2FuYWx5emVfbW9ub19mbG9hdDsKLSAgICAgIGVsc2UKLSAgICAgICAgZmlsdGVyLT5hbmFseXplID0gcmdfYW5hbHlzaXNfYW5hbHl6ZV9zdGVyZW9fZmxvYXQ7Ci0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTY6Ci0gICAgICBmaWx0ZXItPmRlcHRoID0gc2l6ZW9mIChnaW50MTYpICogODsKLQotICAgICAgaWYgKGNoYW5uZWxzID09IDEpCi0gICAgICAgIGZpbHRlci0+YW5hbHl6ZSA9IHJnX2FuYWx5c2lzX2FuYWx5emVfbW9ub19pbnQxNjsKLSAgICAgIGVsc2UKLSAgICAgICAgZmlsdGVyLT5hbmFseXplID0gcmdfYW5hbHlzaXNfYW5hbHl6ZV9zdGVyZW9faW50MTY7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byBpbnZhbGlkX2Zvcm1hdDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVycm9ycy4gKi8KLWludmFsaWRfZm9ybWF0OgotICB7Ci0gICAgZmlsdGVyLT5hbmFseXplID0gTlVMTDsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZmlsdGVyLCBDT1JFLCBORUdPVElBVElPTiwKLSAgICAgICAgKCJJbnZhbGlkIGluY29taW5nIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpbl9jYXBzKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9yZ19hbmFseXNpc190cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFJnQW5hbHlzaXMgKmZpbHRlciA9IEdTVF9SR19BTkFMWVNJUyAoYmFzZSk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWx0ZXItPmN0eCAhPSBOVUxMLCBHU1RfRkxPV19GTFVTSElORyk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChmaWx0ZXItPmFuYWx5emUgIT0gTlVMTCwgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotCi0gIGlmIChmaWx0ZXItPnNraXApCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJwcm9jZXNzaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgbWFwLnNpemUpOwotCi0gIHJnX2FuYWx5c2lzX3N0YXJ0X2J1ZmZlciAoZmlsdGVyLT5jdHgsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKTsKLSAgZmlsdGVyLT5hbmFseXplIChmaWx0ZXItPmN0eCwgbWFwLmRhdGEsIG1hcC5zaXplLCBmaWx0ZXItPmRlcHRoKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcmdfYW5hbHlzaXNfc2lua19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJnQW5hbHlzaXMgKmZpbHRlciA9IEdTVF9SR19BTkFMWVNJUyAoYmFzZSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlci0+Y3R4ICE9IE5VTEwsIFRSVUUpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotCi0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJyZWNlaXZlZCBFT1MgZXZlbnQiKTsKLQotICAgICAgZ3N0X3JnX2FuYWx5c2lzX2hhbmRsZV9lb3MgKGZpbHRlcik7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChmaWx0ZXIsICJwYXNzaW5nIG9uIEVPUyBldmVudCIpOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotICAgIHsKLSAgICAgIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotCi0gICAgICAvKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSB0YWcgbGlzdCBpcyBib3Jyb3dlZC4gKi8KLSAgICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFnX2xpc3QpOwotICAgICAgZ3N0X3JnX2FuYWx5c2lzX2hhbmRsZV90YWdzIChmaWx0ZXIsIHRhZ19saXN0KTsKLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKGJhc2UsIGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcmdfYW5hbHlzaXNfc3RvcCAoR3N0QmFzZVRyYW5zZm9ybSAqIGJhc2UpCi17Ci0gIEdzdFJnQW5hbHlzaXMgKmZpbHRlciA9IEdTVF9SR19BTkFMWVNJUyAoYmFzZSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGZpbHRlci0+Y3R4ICE9IE5VTEwsIEZBTFNFKTsKLQotICByZ19hbmFseXNpc19kZXN0cm95IChmaWx0ZXItPmN0eCk7Ci0gIGZpbHRlci0+Y3R4ID0gTlVMTDsKLQotICBHU1RfTE9HX09CSkVDVCAoZmlsdGVyLCAic3RvcHBlZCIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBGSVhNRTogaGFuZGxlIGdsb2JhbCB2cy4gc3RyZWFtLXRhZ3M/ICovCi1zdGF0aWMgdm9pZAotZ3N0X3JnX2FuYWx5c2lzX2hhbmRsZV90YWdzIChHc3RSZ0FuYWx5c2lzICogZmlsdGVyLAotICAgIGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdfbGlzdCkKLXsKLSAgZ2Jvb2xlYW4gYWxidW1fcHJvY2Vzc2luZyA9IChmaWx0ZXItPm51bV90cmFja3MgPiAwKTsKLSAgZ2RvdWJsZSBkdW1teTsKLQotICBpZiAoIWFsYnVtX3Byb2Nlc3NpbmcpCi0gICAgZmlsdGVyLT5pZ25vcmVfdGFncyA9IEZBTFNFOwotCi0gIGlmIChmaWx0ZXItPnNraXAgJiYgYWxidW1fcHJvY2Vzc2luZykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImlnbm9yaW5nIHRhZyBldmVudDogc2tpcHBpbmcgYWxidW0iKTsKLSAgICByZXR1cm47Ci0gIH0gZWxzZSBpZiAoZmlsdGVyLT5za2lwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAiaWdub3JpbmcgdGFnIGV2ZW50OiBza2lwcGluZyB0cmFjayIpOwotICAgIHJldHVybjsKLSAgfSBlbHNlIGlmIChmaWx0ZXItPmlnbm9yZV90YWdzKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAiaWdub3JpbmcgdGFnIGV2ZW50OiBjYW5ub3Qgc2tpcCBhbnl3YXlzIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZmlsdGVyLT5oYXNfdHJhY2tfZ2FpbiB8PSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsCi0gICAgICBHU1RfVEFHX1RSQUNLX0dBSU4sICZkdW1teSk7Ci0gIGZpbHRlci0+aGFzX3RyYWNrX3BlYWsgfD0gZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LAotICAgICAgR1NUX1RBR19UUkFDS19QRUFLLCAmZHVtbXkpOwotICBmaWx0ZXItPmhhc19hbGJ1bV9nYWluIHw9IGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwKLSAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgJmR1bW15KTsKLSAgZmlsdGVyLT5oYXNfYWxidW1fcGVhayB8PSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsCi0gICAgICBHU1RfVEFHX0FMQlVNX1BFQUssICZkdW1teSk7Ci0KLSAgaWYgKCEoZmlsdGVyLT5oYXNfdHJhY2tfZ2FpbiAmJiBmaWx0ZXItPmhhc190cmFja19wZWFrKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgInRyYWNrIHRhZ3Mgbm90IGNvbXBsZXRlIHlldCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChhbGJ1bV9wcm9jZXNzaW5nICYmICEoZmlsdGVyLT5oYXNfYWxidW1fZ2FpbiAmJiBmaWx0ZXItPmhhc19hbGJ1bV9wZWFrKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImFsYnVtIHRhZ3Mgbm90IGNvbXBsZXRlIHlldCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChmaWx0ZXItPmZvcmNlZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgImV4aXN0aW5nIHRhZ3MgYXJlIHN1ZmZpY2llbnQsIGJ1dCBwcm9jZXNzaW5nIGFueXdheSAoZm9yY2VkKSIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGZpbHRlci0+c2tpcCA9IFRSVUU7Ci0gIHJnX2FuYWx5c2lzX3Jlc2V0IChmaWx0ZXItPmN0eCk7Ci0KLSAgaWYgKCFhbGJ1bV9wcm9jZXNzaW5nKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAiZXhpc3RpbmcgdGFncyBhcmUgc3VmZmljaWVudCwgd2lsbCBub3QgcHJvY2VzcyB0aGlzIHRyYWNrIik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAiZXhpc3RpbmcgdGFncyBhcmUgc3VmZmljaWVudCwgd2lsbCBub3QgcHJvY2VzcyB0aGlzIGFsYnVtIik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ19hbmFseXNpc19oYW5kbGVfZW9zIChHc3RSZ0FuYWx5c2lzICogZmlsdGVyKQotewotICBnYm9vbGVhbiBhbGJ1bV9wcm9jZXNzaW5nID0gKGZpbHRlci0+bnVtX3RyYWNrcyA+IDApOwotICBnYm9vbGVhbiBhbGJ1bV9maW5pc2hlZCA9IChmaWx0ZXItPm51bV90cmFja3MgPT0gMSk7Ci0gIGdib29sZWFuIGFsYnVtX3NraXBwaW5nID0gYWxidW1fcHJvY2Vzc2luZyAmJiBmaWx0ZXItPnNraXA7Ci0KLSAgZmlsdGVyLT5oYXNfdHJhY2tfZ2FpbiA9IEZBTFNFOwotICBmaWx0ZXItPmhhc190cmFja19wZWFrID0gRkFMU0U7Ci0KLSAgaWYgKGFsYnVtX2ZpbmlzaGVkKSB7Ci0gICAgZmlsdGVyLT5pZ25vcmVfdGFncyA9IEZBTFNFOwotICAgIGZpbHRlci0+c2tpcCA9IEZBTFNFOwotICAgIGZpbHRlci0+aGFzX2FsYnVtX2dhaW4gPSBGQUxTRTsKLSAgICBmaWx0ZXItPmhhc19hbGJ1bV9wZWFrID0gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoIWFsYnVtX3NraXBwaW5nKSB7Ci0gICAgZmlsdGVyLT5za2lwID0gRkFMU0U7Ci0gIH0KLQotICAvKiBXZSBtaWdodCBoYXZlIGp1c3QgZnVsbHkgcHJvY2Vzc2VkIGEgdHJhY2sgYmVjYXVzZSBpdCBoYXMKLSAgICogaW5jb21wbGV0ZSB0YWdzLiAgSWYgd2UgZG8gYWxidW0gcHJvY2Vzc2luZyBhbmQgYWxsb3cgc2tpcHBpbmcKLSAgICogKG5vdCBmb3JjZWQpLCBwcmV2ZW50IHN3aXRjaGluZyB0byBza2lwcGluZyBpZiBhIGxhdGVyIHRyYWNrIHdpdGgKLSAgICogZnVsbCB0YWdzIGNvbWVzIGFsb25nOiAqLwotICBpZiAoIWZpbHRlci0+Zm9yY2VkICYmIGFsYnVtX3Byb2Nlc3NpbmcgJiYgIWFsYnVtX2ZpbmlzaGVkKQotICAgIGZpbHRlci0+aWdub3JlX3RhZ3MgPSBUUlVFOwotCi0gIGlmICghZmlsdGVyLT5za2lwKSB7Ci0gICAgR3N0VGFnTGlzdCAqdGFnX2xpc3QgPSBOVUxMOwotICAgIGdib29sZWFuIHRyYWNrX3N1Y2Nlc3M7Ci0gICAgZ2Jvb2xlYW4gYWxidW1fc3VjY2VzcyA9IEZBTFNFOwotCi0gICAgdHJhY2tfc3VjY2VzcyA9IGdzdF9yZ19hbmFseXNpc190cmFja19yZXN1bHQgKGZpbHRlciwgJnRhZ19saXN0KTsKLQotICAgIGlmIChhbGJ1bV9maW5pc2hlZCkKLSAgICAgIGFsYnVtX3N1Y2Nlc3MgPSBnc3RfcmdfYW5hbHlzaXNfYWxidW1fcmVzdWx0IChmaWx0ZXIsICZ0YWdfbGlzdCk7Ci0gICAgZWxzZSBpZiAoIWFsYnVtX3Byb2Nlc3NpbmcpCi0gICAgICByZ19hbmFseXNpc19yZXNldF9hbGJ1bSAoZmlsdGVyLT5jdHgpOwotCi0gICAgaWYgKHRyYWNrX3N1Y2Nlc3MgfHwgYWxidW1fc3VjY2VzcykgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKGZpbHRlciwgInBvc3RpbmcgdGFnIGxpc3Qgd2l0aCByZXN1bHRzIik7Ci0gICAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgICAgR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwsIGZpbHRlci0+cmVmZXJlbmNlX2xldmVsLCBOVUxMKTsKLSAgICAgIC8qIFRoaXMgdGFrZXMgb3duZXJzaGlwIG9mIG91ciByZWZlcmVuY2UgdG8gdGhlIGxpc3QgKi8KLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQgKGZpbHRlciksCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKHRhZ19saXN0KSk7Ci0gICAgICB0YWdfbGlzdCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGFsYnVtX3Byb2Nlc3NpbmcpIHsKLSAgICBmaWx0ZXItPm51bV90cmFja3MtLTsKLQotICAgIGlmICghYWxidW1fZmluaXNoZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGZpbHRlciwgImFsYnVtIG5vdCBmaW5pc2hlZCB5ZXQgKG51bS10cmFja3MgaXMgbm93ICV1KSIsCi0gICAgICAgICAgZmlsdGVyLT5udW1fdHJhY2tzKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZmlsdGVyLCAiYWxidW0gZmluaXNoZWQgKG51bS10cmFja3MgaXMgbm93IDApIik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGFsYnVtX3Byb2Nlc3NpbmcpCi0gICAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoZmlsdGVyKSwgIm51bS10cmFja3MiKTsKLX0KLQotLyogRklYTUU6IHJldHVybiB0YWcgbGlzdCAobGlzdHM/KSBiYXNlZCBvbiBpbnB1dCB0YWdzLi4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3JnX2FuYWx5c2lzX3RyYWNrX3Jlc3VsdCAoR3N0UmdBbmFseXNpcyAqIGZpbHRlciwgR3N0VGFnTGlzdCAqKiB0YWdfbGlzdCkKLXsKLSAgZ2Jvb2xlYW4gdHJhY2tfc3VjY2VzczsKLSAgZ2RvdWJsZSB0cmFja19nYWluLCB0cmFja19wZWFrOwotCi0gIHRyYWNrX3N1Y2Nlc3MgPSByZ19hbmFseXNpc190cmFja19yZXN1bHQgKGZpbHRlci0+Y3R4LCAmdHJhY2tfZ2FpbiwKLSAgICAgICZ0cmFja19wZWFrKTsKLQotICBpZiAodHJhY2tfc3VjY2VzcykgewotICAgIHRyYWNrX2dhaW4gKz0gZmlsdGVyLT5yZWZlcmVuY2VfbGV2ZWwgLSBSR19SRUZFUkVOQ0VfTEVWRUw7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChmaWx0ZXIsICJ0cmFjayBnYWluIGlzICUrLjJmIGRCLCBwZWFrICUuNmYiLCB0cmFja19nYWluLAotICAgICAgICB0cmFja19wZWFrKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGZpbHRlciwgInRyYWNrIHdhcyB0b28gc2hvcnQgdG8gYW5hbHl6ZSIpOwotICB9Ci0KLSAgaWYgKHRyYWNrX3N1Y2Nlc3MpIHsKLSAgICBpZiAoKnRhZ19saXN0ID09IE5VTEwpCi0gICAgICAqdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgIGdzdF90YWdfbGlzdF9hZGQgKCp0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICAgIEdTVF9UQUdfVFJBQ0tfUEVBSywgdHJhY2tfcGVhaywgR1NUX1RBR19UUkFDS19HQUlOLCB0cmFja19nYWluLCBOVUxMKTsKLSAgfQotCi0gIHJldHVybiB0cmFja19zdWNjZXNzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZ19hbmFseXNpc19hbGJ1bV9yZXN1bHQgKEdzdFJnQW5hbHlzaXMgKiBmaWx0ZXIsIEdzdFRhZ0xpc3QgKiogdGFnX2xpc3QpCi17Ci0gIGdib29sZWFuIGFsYnVtX3N1Y2Nlc3M7Ci0gIGdkb3VibGUgYWxidW1fZ2FpbiwgYWxidW1fcGVhazsKLQotICBhbGJ1bV9zdWNjZXNzID0gcmdfYW5hbHlzaXNfYWxidW1fcmVzdWx0IChmaWx0ZXItPmN0eCwgJmFsYnVtX2dhaW4sCi0gICAgICAmYWxidW1fcGVhayk7Ci0KLSAgaWYgKGFsYnVtX3N1Y2Nlc3MpIHsKLSAgICBhbGJ1bV9nYWluICs9IGZpbHRlci0+cmVmZXJlbmNlX2xldmVsIC0gUkdfUkVGRVJFTkNFX0xFVkVMOwotICAgIEdTVF9JTkZPX09CSkVDVCAoZmlsdGVyLCAiYWxidW0gZ2FpbiBpcyAlKy4yZiBkQiwgcGVhayAlLjZmIiwgYWxidW1fZ2FpbiwKLSAgICAgICAgYWxidW1fcGVhayk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChmaWx0ZXIsICJhbGJ1bSB3YXMgdG9vIHNob3J0IHRvIGFuYWx5emUiKTsKLSAgfQotCi0gIGlmIChhbGJ1bV9zdWNjZXNzKSB7Ci0gICAgaWYgKCp0YWdfbGlzdCA9PSBOVUxMKQotICAgICAgKnRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICgqdGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgICBHU1RfVEFHX0FMQlVNX1BFQUssIGFsYnVtX3BlYWssIEdTVF9UQUdfQUxCVU1fR0FJTiwgYWxidW1fZ2FpbiwgTlVMTCk7Ci0gIH0KLQotICByZXR1cm4gYWxidW1fc3VjY2VzczsKLX0KZGlmZiAtLWdpdCBhL2dzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuaCBiL2dzdC9yZXBsYXlnYWluL2dzdHJnYW5hbHlzaXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2OGU2My4uMDAwMDAwMAotLS0gYS9nc3QvcmVwbGF5Z2Fpbi9nc3RyZ2FuYWx5c2lzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKiBHU3RyZWFtZXIgUmVwbGF5R2FpbiBhbmFseXNpcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKgotICogZ3N0cmdhbmFseXNpcy5oOiBFbGVtZW50IHRoYXQgcGVyZm9ybXMgdGhlIFJlcGxheUdhaW4gYW5hbHlzaXMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JHX0FOQUxZU0lTX0hfXwotI2RlZmluZSBfX0dTVF9SR19BTkFMWVNJU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0KLSNpbmNsdWRlICJyZ2FuYWx5c2lzLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SR19BTkFMWVNJUyBcCi0gIChnc3RfcmdfYW5hbHlzaXNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JHX0FOQUxZU0lTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUkdfQU5BTFlTSVMsR3N0UmdBbmFseXNpcykpCi0jZGVmaW5lIEdTVF9SR19BTkFMWVNJU19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SR19BTkFMWVNJUyxHc3RSZ0FuYWx5c2lzQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUkdfQU5BTFlTSVMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SR19BTkFMWVNJUykpCi0jZGVmaW5lIEdTVF9JU19SR19BTkFMWVNJU19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SR19BTkFMWVNJUykpCi10eXBlZGVmIHN0cnVjdCBfR3N0UmdBbmFseXNpcyBHc3RSZ0FuYWx5c2lzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJnQW5hbHlzaXNDbGFzcyBHc3RSZ0FuYWx5c2lzQ2xhc3M7Ci0KLS8qKgotICogR3N0UmdBbmFseXNpczoKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0UmdBbmFseXNpcwotewotICBHc3RCYXNlVHJhbnNmb3JtIGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0KLSAgUmdBbmFseXNpc0N0eCAqY3R4OwotICB2b2lkICgqYW5hbHl6ZSkgKFJnQW5hbHlzaXNDdHggKiBjdHgsIGdjb25zdHBvaW50ZXIgZGF0YSwgZ3NpemUgc2l6ZSwKLSAgICAgIGd1aW50IGRlcHRoKTsKLSAgZ2ludCBkZXB0aDsKLQotICAvKiBQcm9wZXJ0eSB2YWx1ZXMuICovCi0gIGd1aW50IG51bV90cmFja3M7Ci0gIGdkb3VibGUgcmVmZXJlbmNlX2xldmVsOwotICBnYm9vbGVhbiBmb3JjZWQ7Ci0gIGdib29sZWFuIG1lc3NhZ2U7Ci0KLSAgLyogU3RhdGUgbWFjaGluZXJ5IGZvciBza2lwcGluZy4gKi8KLSAgZ2Jvb2xlYW4gaWdub3JlX3RhZ3M7Ci0gIGdib29sZWFuIHNraXA7Ci0gIGdib29sZWFuIGhhc190cmFja19nYWluOwotICBnYm9vbGVhbiBoYXNfdHJhY2tfcGVhazsKLSAgZ2Jvb2xlYW4gaGFzX2FsYnVtX2dhaW47Ci0gIGdib29sZWFuIGhhc19hbGJ1bV9wZWFrOwotfTsKLQotc3RydWN0IF9Hc3RSZ0FuYWx5c2lzQ2xhc3MKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9yZ19hbmFseXNpc19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SR19BTkFMWVNJU19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5jIGIvZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMDRlN2QuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJlcGxheUdhaW4gbGltaXRlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKiAKLSAqIGdzdHJnbGltaXRlci5jOiBFbGVtZW50IHRvIGFwcGx5IHNpZ25hbCBjb21wcmVzc2lvbiB0byByYXcgYXVkaW8gZGF0YQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJnbGltaXRlcgotICogQHNlZV9hbHNvOiAjR3N0UmdWb2x1bWUKLSAqCi0gKiBUaGlzIGVsZW1lbnQgYXBwbGllcyBzaWduYWwgY29tcHJlc3Npb24vbGltaXRpbmcgdG8gcmF3IGF1ZGlvIGRhdGEuICBJdAotICogcGVyZm9ybXMgc3RyaWN0IGhhcmQgbGltaXRpbmcgd2l0aCBzb2Z0LWtuZWUgY2hhcmFjdGVyaXN0aWNzLCB1c2luZyBhCi0gKiB0aHJlc2hvbGQgb2YgLTYgZEIuICBUaGlzIHR5cGUgb2YgZmlsdGVyIGlzIG1lbnRpb25lZCBpbiB0aGUgcHJvcG9zZWQgPHVsaW5rCi0gKiB1cmw9Imh0dHA6Ly9yZXBsYXlnYWluLm9yZyI+UmVwbGF5R2FpbiBzdGFuZGFyZDwvdWxpbms+LgotICogCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1maWxlbmFtZS5leHQgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgXAotICogICAgICAgICAgICAhIHJndm9sdW1lIHByZS1hbXA9Ni4wIGhlYWRyb29tPTEwLjAgISByZ2xpbWl0ZXIgXAotICogICAgICAgICAgICAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhbHNhc2luawotICogXXxQbGF5YmFjayBvZiBhIGZpbGUKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJnbGltaXRlci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcmdfbGltaXRlcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcmdfbGltaXRlcl9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9FTkFCTEVELAotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoRjMyKSAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSB7IGludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWQgfSwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbMSwgTUFYXSwgIiAicmF0ZSA9IChpbnQpIFsxLCBNQVhdIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChGMzIpICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIHsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZH0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWzEsIE1BWF0sICIgInJhdGUgPSAoaW50KSBbMSwgTUFYXSIpKTsKLQotI2RlZmluZSBnc3RfcmdfbGltaXRlcl9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSZ0xpbWl0ZXIsIGdzdF9yZ19saW1pdGVyLCBHU1RfVFlQRV9CQVNFX1RSQU5TRk9STSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9yZ19saW1pdGVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9yZ19saW1pdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3JnX2xpbWl0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3JnX2xpbWl0ZXJfY2xhc3NfaW5pdCAoR3N0UmdMaW1pdGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9yZ19saW1pdGVyX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3JnX2xpbWl0ZXJfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRU5BQkxFRCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZW5hYmxlZCIsICJFbmFibGVkIiwgIkVuYWJsZSBwcm9jZXNzaW5nIiwgVFJVRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICB0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpOwotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9yZ19saW1pdGVyX3RyYW5zZm9ybV9pcCk7Ci0gIHRyYW5zX2NsYXNzLT5wYXNzdGhyb3VnaF9vbl9zYW1lX2NhcHMgPSBGQUxTRTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiUmVwbGF5R2FpbiBsaW1pdGVyIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L0F1ZGlvIiwKLSAgICAgICJBcHBseSBzaWduYWwgY29tcHJlc3Npb24gdG8gcmF3IGF1ZGlvIGRhdGEiLAotICAgICAgIlJlblx4YzNceGE5IFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9yZ19saW1pdGVyX2RlYnVnLCAicmdsaW1pdGVyIiwgMCwKLSAgICAgICJSZXBsYXlHYWluIGxpbWl0ZXIgZWxlbWVudCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JnX2xpbWl0ZXJfaW5pdCAoR3N0UmdMaW1pdGVyICogZmlsdGVyKQotewotICBHc3RCYXNlVHJhbnNmb3JtICpiYXNlID0gR1NUX0JBU0VfVFJBTlNGT1JNIChmaWx0ZXIpOwotCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKGJhc2UsIEZBTFNFKTsKLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9nYXBfYXdhcmUgKGJhc2UsIFRSVUUpOwotCi0gIGZpbHRlci0+ZW5hYmxlZCA9IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcmdfbGltaXRlcl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UmdMaW1pdGVyICpmaWx0ZXIgPSBHU1RfUkdfTElNSVRFUiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfRU5BQkxFRDoKLSAgICAgIGZpbHRlci0+ZW5hYmxlZCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKEdTVF9CQVNFX1RSQU5TRk9STSAoZmlsdGVyKSwKLSAgICAgICAgICAhZmlsdGVyLT5lbmFibGVkKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ19saW1pdGVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSZ0xpbWl0ZXIgKmZpbHRlciA9IEdTVF9SR19MSU1JVEVSIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9FTkFCTEVEOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+ZW5hYmxlZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLSNkZWZpbmUgTElNSVQgMS4wCi0jZGVmaW5lIFRIUkVTIDAuNSAgICAgICAgICAgICAgIC8qIGNhLiAtNiBkQiAqLwotI2RlZmluZSBDT01QTCAwLjUgICAgICAgICAgICAgICAvKiBMSU1JVCAtIFRIUkVTSCAqLwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3JnX2xpbWl0ZXJfdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogYmFzZSwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RSZ0xpbWl0ZXIgKmZpbHRlciA9IEdTVF9SR19MSU1JVEVSIChiYXNlKTsKLSAgZ2Zsb2F0ICppbnB1dDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50IGNvdW50OwotICBndWludCBpOwotCi0gIGlmICghZmlsdGVyLT5lbmFibGVkKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgaW5wdXQgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBjb3VudCA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgLyBzaXplb2YgKGdmbG9hdCk7Ci0KLSAgZm9yIChpID0gY291bnQ7IGktLTspIHsKLSAgICBpZiAoKmlucHV0ID4gVEhSRVMpCi0gICAgICAqaW5wdXQgPSB0YW5oZiAoKCppbnB1dCAtIFRIUkVTKSAvIENPTVBMKSAqIENPTVBMICsgVEhSRVM7Ci0gICAgZWxzZSBpZiAoKmlucHV0IDwgLVRIUkVTKQotICAgICAgKmlucHV0ID0gdGFuaGYgKCgqaW5wdXQgKyBUSFJFUykgLyBDT01QTCkgKiBDT01QTCAtIFRIUkVTOwotICAgIGlucHV0Kys7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KZGlmZiAtLWdpdCBhL2dzdC9yZXBsYXlnYWluL2dzdHJnbGltaXRlci5oIGIvZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYmQ4MDQuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmdsaW1pdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBHU3RyZWFtZXIgUmVwbGF5R2FpbiBsaW1pdGVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLSAqCi0gKiBnc3RyZ2xpbWl0ZXIuaDogRWxlbWVudCB0byBhcHBseSBzaWduYWwgY29tcHJlc3Npb24gdG8gcmF3IGF1ZGlvIGRhdGEKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JHX0xJTUlURVJfSF9fCi0jZGVmaW5lIF9fR1NUX1JHX0xJTUlURVJfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotCi0jZGVmaW5lIEdTVF9UWVBFX1JHX0xJTUlURVIgXAotICAoZ3N0X3JnX2xpbWl0ZXJfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JHX0xJTUlURVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SR19MSU1JVEVSLEdzdFJnTGltaXRlcikpCi0jZGVmaW5lIEdTVF9SR19MSU1JVEVSX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JHX0xJTUlURVIsR3N0UmdMaW1pdGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUkdfTElNSVRFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JHX0xJTUlURVIpKQotI2RlZmluZSBHU1RfSVNfUkdfTElNSVRFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SR19MSU1JVEVSKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJnTGltaXRlciBHc3RSZ0xpbWl0ZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UmdMaW1pdGVyQ2xhc3MgR3N0UmdMaW1pdGVyQ2xhc3M7Ci0KLS8qKgotICogR3N0UmdMaW1pdGVyOgotICoKLSAqIE9wYXF1ZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RSZ0xpbWl0ZXIKLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSBlbGVtZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotCi0gIGdib29sZWFuIGVuYWJsZWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJnTGltaXRlckNsYXNzCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcmdfbGltaXRlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9SR19MSU1JVEVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYyBiL2dzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNGYyODEuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuYworKysgL2Rldi9udWxsCkBAIC0xLDY4NiArMCwwIEBACi0vKiBHU3RyZWFtZXIgUmVwbGF5R2FpbiB2b2x1bWUgYWRqdXN0bWVudAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKiAKLSAqIGdzdHJndm9sdW1lLmM6IEVsZW1lbnQgdG8gYXBwbHkgUmVwbGF5R2FpbiB2b2x1bWUgYWRqdXN0bWVudAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJndm9sdW1lCi0gKiBAc2VlX2Fsc286ICNHc3RSZ0xpbWl0ZXIsICNHc3RSZ0FuYWx5c2lzCi0gKgotICogVGhpcyBlbGVtZW50IGFwcGxpZXMgdm9sdW1lIGNoYW5nZXMgdG8gc3RyZWFtcyBhcyBsaW5lZCBvdXQgaW4gdGhlIHByb3Bvc2VkCi0gKiA8dWxpbmsgdXJsPSJodHRwOi8vcmVwbGF5Z2Fpbi5vcmciPlJlcGxheUdhaW4gc3RhbmRhcmQ8L3VsaW5rPi4gIEl0Ci0gKiBpbnRlcnByZXRzIHRoZSBSZXBsYXlHYWluIG1ldGEgZGF0YSB0YWdzIGFuZCBjYXJyaWVzIG91dCB0aGUgYWRqdXN0bWVudCAoYnkKLSAqIHVzaW5nIGEgdm9sdW1lIGVsZW1lbnQgaW50ZXJuYWxseSkuICBUaGUgcmVsZXZhbnQgdGFncyBhcmU6Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogPGxpc3RpdGVtPiNHU1RfVEFHX1RSQUNLX0dBSU48L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPiNHU1RfVEFHX1RSQUNLX1BFQUs8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPiNHU1RfVEFHX0FMQlVNX0dBSU48L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPiNHU1RfVEFHX0FMQlVNX1BFQUs8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPiNHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqIFRoZSBpbmZvcm1hdGlvbiBjYXJyaWVkIGJ5IHRoZXNlIHRhZ3MgbXVzdCBoYXZlIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVoYW5kIGJ5Ci0gKiBwZXJmb3JtaW5nIHRoZSBSZXBsYXlHYWluIGFuYWx5c2lzLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSB0aGUgPGxpbmsKLSAqIGxpbmtlbmQ9IkdzdFJnQW5hbHlzaXMiPnJnYW5hbHlzaXM8L2xpbms+IGVsZW1lbnQuCi0gKiAKLSAqIFRoZSBzaWduYWwgY29tcHJlc3Npb24vbGltaXRpbmcgcmVjb21tZW5kYXRpb25zIG91dGxpbmVkIGluIHRoZSBwcm9wb3NlZAotICogc3RhbmRhcmQgYXJlIG5vdCBpbXBsZW1lbnRlZCBieSB0aGlzIGVsZW1lbnQuICBUaGlzIGhhcyB0byBiZSBoYW5kbGVkIGJ5Ci0gKiBzZXBhcmF0ZSBlbGVtZW50cyBiZWNhdXNlIGFwcGxpY2F0aW9ucyBtaWdodCB3YW50IHRvIGhhdmUgYWRkaXRpb25hbCBmaWx0ZXJzCi0gKiBiZXR3ZWVuIHRoZSB2b2x1bWUgYWRqdXN0bWVudCBhbmQgdGhlIGxpbWl0aW5nIHN0YWdlLiAgQSBiYXNpYyBsaW1pdGVyIGlzCi0gKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGx1Z2luOiBUaGUgPGxpbmsgbGlua2VuZD0iR3N0UmdMaW1pdGVyIj5yZ2xpbWl0ZXI8L2xpbms+Ci0gKiBlbGVtZW50IGFwcGxpZXMgLTYgZEIgaGFyZCBsaW1pdGluZyBhcyBtZW50aW9uZWQgaW4gdGhlIFJlcGxheUdhaW4gc3RhbmRhcmQuCi0gKiAKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPWZpbGVuYW1lLmV4dCAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCBcCi0gKiAgICAgISByZ3ZvbHVtZSAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhbHNhc2luawotICogXXwgUGxheWJhY2sgb2YgYSBmaWxlCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZ3N0cmd2b2x1bWUuaCIKLSNpbmNsdWRlICJyZXBsYXlnYWluLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9yZ192b2x1bWVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3JnX3ZvbHVtZV9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9BTEJVTV9NT0RFLAotICBQUk9QX0hFQURST09NLAotICBQUk9QX1BSRV9BTVAsCi0gIFBST1BfRkFMTEJBQ0tfR0FJTiwKLSAgUFJPUF9UQVJHRVRfR0FJTiwKLSAgUFJPUF9SRVNVTFRfR0FJTgotfTsKLQotI2RlZmluZSBERUZBVUxUX0FMQlVNX01PREUgVFJVRQotI2RlZmluZSBERUZBVUxUX0hFQURST09NIDAuMAotI2RlZmluZSBERUZBVUxUX1BSRV9BTVAgMC4wCi0jZGVmaW5lIERFRkFVTFRfRkFMTEJBQ0tfR0FJTiAwLjAKLQotI2RlZmluZSBEQl9UT19MSU5FQVIoeCkgcG93ICgxMC4sICh4KSAvIDIwLikKLSNkZWZpbmUgTElORUFSX1RPX0RCKHgpICgyMC4gKiBsb2cxMCAoeCkpCi0KLSNkZWZpbmUgR0FJTl9GT1JNQVQgIisuMDJmIGRCIgotI2RlZmluZSBQRUFLX0ZPUk1BVCAiLjA2ZiIKLQotI2RlZmluZSBWQUxJRF9HQUlOKHgpICgoeCkgPiAtNjAuMDAgJiYgKHgpIDwgNjAuMDApCi0jZGVmaW5lIFZBTElEX1BFQUsoeCkgKCh4KSA+IDAuKQotCi0vKiBTYW1lIHRlbXBsYXRlIGNhcHMgYXMgR3N0Vm9sdW1lLCBmb3IgSSBkb24ndCBsaWtlIGhhdmluZyBqdXN0IEFOWSBjYXBzLiAqLwotCi0jZGVmaW5lIEZPUk1BVCAieyAiR1NUX0FVRElPX05FKEYzMikiLCJHU1RfQVVESU9fTkUoUzE2KSIgfSIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBGT1JNQVQgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgeyBpbnRlcmxlYXZlZCwgbm9uLWludGVybGVhdmVkIH0sICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0iKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIHsgaW50ZXJsZWF2ZWQsIG5vbi1pbnRlcmxlYXZlZCB9LCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdIikpOwotCi0jZGVmaW5lIGdzdF9yZ192b2x1bWVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UmdWb2x1bWUsIGdzdF9yZ192b2x1bWUsIEdTVF9UWVBFX0JJTik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9yZ192b2x1bWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3JnX3ZvbHVtZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfcmdfdm9sdW1lX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3JnX3ZvbHVtZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIGdib29sZWFuIGdzdF9yZ192b2x1bWVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBHc3RFdmVudCAqZ3N0X3JnX3ZvbHVtZV90YWdfZXZlbnQgKEdzdFJnVm9sdW1lICogc2VsZiwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgdm9pZCBnc3Rfcmdfdm9sdW1lX3Jlc2V0IChHc3RSZ1ZvbHVtZSAqIHNlbGYpOwotc3RhdGljIHZvaWQgZ3N0X3JnX3ZvbHVtZV91cGRhdGVfZ2FpbiAoR3N0UmdWb2x1bWUgKiBzZWxmKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBnc3Rfcmdfdm9sdW1lX2RldGVybWluZV9nYWluIChHc3RSZ1ZvbHVtZSAqIHNlbGYsCi0gICAgZ2RvdWJsZSAqIHRhcmdldF9nYWluLCBnZG91YmxlICogcmVzdWx0X2dhaW4pOwotCi1zdGF0aWMgdm9pZAotZ3N0X3JnX3ZvbHVtZV9jbGFzc19pbml0IChHc3RSZ1ZvbHVtZUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RCaW5DbGFzcyAqYmluX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9yZ192b2x1bWVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfcmdfdm9sdW1lX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9yZ192b2x1bWVfZGlzcG9zZTsKLQotICAvKioKLSAgICogR3N0UmdWb2x1bWU6YWxidW0tbW9kZToKLSAgICoKLSAgICogV2hldGhlciB0byBwcmVmZXIgYWxidW0gZ2FpbiBvdmVyIHRyYWNrIGdhaW4uCi0gICAqCi0gICAqIElmIHNldCB0byAlVFJVRSwgdXNlIGFsYnVtIGdhaW4gaW5zdGVhZCBvZiB0cmFjayBnYWluIGlmIGJvdGggYXJlCi0gICAqIGF2YWlsYWJsZS4gIFRoaXMga2VlcHMgdGhlIHJlbGF0aXZlIGxvdWRuZXNzIGxldmVscyBvZiB0cmFja3MgZnJvbSB0aGUgc2FtZQotICAgKiBhbGJ1bSBpbnRhY3QuCi0gICAqCi0gICAqIElmIHNldCB0byAlRkFMU0UsIHRyYWNrIG1vZGUgaXMgdXNlZCBpbnN0ZWFkLiAgVGhpcyBlZmZlY3RpdmVseSBsZWFkcyB0bwotICAgKiBtb3JlIGV4dGVuc2l2ZSBub3JtYWxpemF0aW9uLgotICAgKgotICAgKiBJZiBhbGJ1bSBtb2RlIGlzIGVuYWJsZWQgYnV0IHRoZSBhbGJ1bSBnYWluIHRhZyBpcyBhYnNlbnQgaW4gdGhlIHN0cmVhbSwKLSAgICogdGhlIHRyYWNrIGdhaW4gaXMgdXNlZCBpbnN0ZWFkLiAgSWYgYm90aCBnYWluIHRhZ3MgYXJlIG1pc3NpbmcsIHRoZSB2YWx1ZQotICAgKiBvZiB0aGUgI0dzdFJnVm9sdW1lOmZhbGxiYWNrLWdhaW4gcHJvcGVydHkgaXMgdXNlZCBpbnN0ZWFkLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BTEJVTV9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhbGJ1bS1tb2RlIiwgIkFsYnVtIG1vZGUiLAotICAgICAgICAgICJQcmVmZXIgYWxidW0gb3ZlciB0cmFjayBnYWluIiwgREVGQVVMVF9BTEJVTV9NT0RFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0UmdWb2x1bWU6aGVhZHJvb206Ci0gICAqCi0gICAqIEV4dHJhIGhlYWRyb29tIFtkQl0uICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgYnkgd2hpY2ggdGhlIG91dHB1dCBjYW4KLSAgICogZXhjZWVkIGRpZ2l0YWwgZnVsbCBzY2FsZS4KLSAgICoKLSAgICogT25seSBzZXQgdGhpcyB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLjAgaWYgc2lnbmFsIGNvbXByZXNzaW9uL2xpbWl0aW5nIG9mCi0gICAqIGEgc3VpdGFibGUgZm9ybSBpcyBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgKG9yIG91dHB1dCBpcyBicm91Z2h0IGludG8gdGhlCi0gICAqIGNvcnJlY3QgcmFuZ2UgYnkgc29tZSBvdGhlciB0cmFuc2Zvcm1hdGlvbikuCi0gICAqCi0gICAqIFRoaXMgZWxlbWVudCBpbnRlcm5hbGx5IHVzZXMgYSB2b2x1bWUgZWxlbWVudCwgd2hpY2ggYWxzbyBzdXBwb3J0cwotICAgKiBvcGVyYXRpbmcgb24gaW50ZWdlciBhdWRpbyBmb3JtYXRzLiAgVGhlc2UgZm9ybWF0cyBkbyBub3QgYWxsb3cgZXhjZWVkaW5nCi0gICAqIGRpZ2l0YWwgZnVsbCBzY2FsZS4gIElmIGV4dHJhIGhlYWRyb29tIGlzIHVzZWQsIG1ha2Ugc3VyZSB0aGF0IHRoZSByYXcKLSAgICogYXVkaW8gZGF0YSBmb3JtYXQgaXMgZmxvYXRpbmcgcG9pbnQgKEYzMikuICBPdGhlcndpc2UsCi0gICAqIGNsaXBwaW5nIGRpc3RvcnRpb24gbWlnaHQgYmUgaW50cm9kdWNlZCBhcyBwYXJ0IG9mIHRoZSB2b2x1bWUgYWRqdXN0bWVudAotICAgKiBpdHNlbGYuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0hFQURST09NLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImhlYWRyb29tIiwgIkhlYWRyb29tIiwgIkV4dHJhIGhlYWRyb29tIFtkQl0iLAotICAgICAgICAgIDAuLCA2MC4sIERFRkFVTFRfSEVBRFJPT00sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSZ1ZvbHVtZTpwcmUtYW1wOgotICAgKgotICAgKiBBZGRpdGlvbmFsIGdhaW4gdG8gYXBwbHkgZ2xvYmFsbHkgW2RCXS4gIFRoaXMgY29udHJvbHMgdGhlIHRyYWRlLW9mZgotICAgKiBiZXR3ZWVuIHVuaWZvcm1pdHkgb2Ygbm9ybWFsaXphdGlvbiBhbmQgdXRpbGl6YXRpb24gb2YgYXZhaWxhYmxlIGR5bmFtaWMKLSAgICogcmFuZ2UuCi0gICAqCi0gICAqIE5vdGUgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAwIGRCIGJlY2F1c2UgdGhlIFJlcGxheUdhaW4gcmVmZXJlbmNlIHZhbHVlCi0gICAqIHdhcyBhZGp1c3RlZCBieSArNiBkQiAoZnJvbSA4MyB0byA4OSBkQikuICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIHRoZQotICAgKiA8dWxpbmsgdXJsPSJodHRwOi8vcmVwbGF5Z2Fpbi5vcmciPndlYnBhZ2U8L3VsaW5rPiBpcyBzdGlsbCBvdXRkYXRlZCBhbmQKLSAgICogZG9lcyBub3QgcmVmbGVjdCB0aGlzIGNoYW5nZSBob3dldmVyLiAgV2hlcmUgdGhlIG9yaWdpbmFsIHByb3Bvc2FsIHN0YXRlcwotICAgKiB0aGF0IGEgcHJvcGVyIGRlZmF1bHQgcHJlLWFtcCB2YWx1ZSBpcyArNiBkQiwgdGhpcyB0cmFuc2xhdGVzIHRvIHRoZSB1c2VkIDAKLSAgICogZEIuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BSRV9BTVAsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgicHJlLWFtcCIsICJQcmUtYW1wIiwgIkV4dHJhIGdhaW4gW2RCXSIsCi0gICAgICAgICAgLTYwLiwgNjAuLCBERUZBVUxUX1BSRV9BTVAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSZ1ZvbHVtZTpmYWxsYmFjay1nYWluOgotICAgKgotICAgKiBGYWxsYmFjayBnYWluIFtkQl0gZm9yIHN0cmVhbXMgbWlzc2luZyBSZXBsYXlHYWluIHRhZ3MuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0ZBTExCQUNLX0dBSU4sCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiZmFsbGJhY2stZ2FpbiIsICJGYWxsYmFjayBnYWluIiwKLSAgICAgICAgICAiR2FpbiBmb3Igc3RyZWFtcyBtaXNzaW5nIHRhZ3MgW2RCXSIsCi0gICAgICAgICAgLTYwLiwgNjAuLCBERUZBVUxUX0ZBTExCQUNLX0dBSU4sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSZ1ZvbHVtZTpyZXN1bHQtZ2FpbjoKLSAgICoKLSAgICogQXBwbGllZCBnYWluIFtkQl0uICBUaGlzIGdhaW4gaXMgYXBwbGllZCB0byBwcm9jZXNzZWQgYnVmZmVyIGRhdGEuCi0gICAqCi0gICAqIFRoaXMgaXMgc2V0IHRvIHRoZSAjR3N0UmdWb2x1bWU6dGFyZ2V0LWdhaW4gaWYgYW1wbGlmaWNhdGlvbiBieSB0aGF0IGFtb3VudAotICAgKiBjYW4gYmUgYXBwbGllZCBzYWZlbHkuICJTYWZlbHkiIG1lYW5zIHRoYXQgdGhlIHZvbHVtZSBhZGp1c3RtZW50IGRvZXMgbm90Ci0gICAqIGluZmxpY3QgY2xpcHBpbmcgZGlzdG9ydGlvbi4gIFNob3VsZCB0aGlzIG5vdCBiZSB0aGUgY2FzZSwgdGhlIHJlc3VsdCBnYWluCi0gICAqIGlzIHNldCB0byBhbiBhcHByb3ByaWF0ZWx5IHJlZHVjZWQgdmFsdWUgKGJ5IGFwcGx5aW5nIHBlYWsgbm9ybWFsaXphdGlvbikuCi0gICAqIFRoZSBwcm9wb3NlZCBzdGFuZGFyZCBjYWxscyB0aGlzICJjbGlwcGluZyBwcmV2ZW50aW9uIi4KLSAgICoKLSAgICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0YXJnZXQgYW5kIHJlc3VsdCBnYWluIHJlZmxlY3RzIHRoZSBuZWNlc3NhcnkgYW1vdW50Ci0gICAqIG9mIHJlZHVjdGlvbi4gIEFwcGxpY2F0aW9ucyBjYW4gbWFrZSB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbiB0byB0ZW1wb3JhcmlseQotICAgKiByZWR1Y2UgdGhlICNHc3RSZ1ZvbHVtZTpwcmUtYW1wIGZvciBzdWJzZXF1ZW50IHN0cmVhbXMsIGFzIHJlY29tbWVuZGVkIGJ5Ci0gICAqIHRoZSBSZXBsYXlHYWluIHN0YW5kYXJkLgotICAgKgotICAgKiBOb3RlIHRoYXQgdGFyZ2V0IGFuZCByZXN1bHQgZ2FpbiBkaWZmZXJpbmcgZm9yIGEgZ3JlYXQgbWFqb3JpdHkgb2Ygc3RyZWFtcwotICAgKiBpbmRpY2F0ZXMgYSBwcm9ibGVtOiBXaGF0IGhhcHBlbnMgaW4gdGhpcyBjYXNlIGlzIHRoYXQgbW9zdCBzdHJlYW1zIHJlY2VpdmUKLSAgICogcGVhayBub3JtYWxpemF0aW9uIGluc3RlYWQgb2YgYW1wbGlmaWNhdGlvbiBieSB0aGUgaWRlYWwgcmVwbGF5IGdhaW4uICBUbwotICAgKiBwcmV2ZW50IHRoaXMsIHRoZSAjR3N0UmdWb2x1bWU6cHJlLWFtcCBoYXMgdG8gYmUgbG93ZXJlZCBhbmQvb3IgYSBsaW1pdGVyCi0gICAqIGhhcyB0byBiZSB1c2VkIHdoaWNoIGZhY2lsaXRhdGVzIHRoZSB1c2Ugb2YgI0dzdFJnVm9sdW1lOmhlYWRyb29tLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRVNVTFRfR0FJTiwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJyZXN1bHQtZ2FpbiIsICJSZXN1bHQtZ2FpbiIsICJBcHBsaWVkIGdhaW4gW2RCXSIsCi0gICAgICAgICAgLTEyMC4sIDEyMC4sIDAuLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0UmdWb2x1bWU6dGFyZ2V0LWdhaW46Ci0gICAqCi0gICAqIEFwcGxpY2FibGUgZ2FpbiBbZEJdLiAgVGhpcyBnYWluIGlzIHN1cHBvc2VkIHRvIGJlIGFwcGxpZWQuCi0gICAqCi0gICAqIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlICNHc3RSZ1ZvbHVtZTphbGJ1bS1tb2RlIHByb3BlcnR5IGFuZCB0aGUKLSAgICogcHJlc2VuY2Ugb2YgUmVwbGF5R2FpbiB0YWdzIGluIHRoZSBzdHJlYW0sIHRoaXMgaXMgc2V0IGFjY29yZGluZyB0byBvbmUgb2YKLSAgICogdGhlc2Ugc2ltcGxlIGZvcm11bGFzOgotICAgKgotICAgKiA8aXRlbWl6ZWRsaXN0PgotICAgKiA8bGlzdGl0ZW0+I0dzdFJnVm9sdW1lOnByZS1hbXAgKyBhbGJ1bSBnYWluIG9mIHRoZSBzdHJlYW08L2xpc3RpdGVtPgotICAgKiA8bGlzdGl0ZW0+I0dzdFJnVm9sdW1lOnByZS1hbXAgKyB0cmFjayBnYWluIG9mIHRoZSBzdHJlYW08L2xpc3RpdGVtPgotICAgKiA8bGlzdGl0ZW0+I0dzdFJnVm9sdW1lOnByZS1hbXAgKyAjR3N0UmdWb2x1bWU6ZmFsbGJhY2stZ2FpbjwvbGlzdGl0ZW0+Ci0gICAqIDwvaXRlbWl6ZWRsaXN0PgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UQVJHRVRfR0FJTiwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJ0YXJnZXQtZ2FpbiIsICJUYXJnZXQtZ2FpbiIsCi0gICAgICAgICAgIkFwcGxpY2FibGUgZ2FpbiBbZEJdIiwgLTEyMC4sIDEyMC4sIDAuLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfcmdfdm9sdW1lX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgYmluX2NsYXNzID0gKEdzdEJpbkNsYXNzICopIGtsYXNzOwotICAvKiBTZXR0aW5nIHRoZXNlIHRvIE5VTEwgbWFrZXMgZ3N0X2Jpbl9hZGQgYW5kIF9yZW1vdmUgcmVmdXNlIHRvIGxldCBhbnlvbmUKLSAgICogbWVzcyB3aXRoIG91ciBpbnRlcm5hbHMuICovCi0gIGJpbl9jbGFzcy0+YWRkX2VsZW1lbnQgPSBOVUxMOwotICBiaW5fY2xhc3MtPnJlbW92ZV9lbGVtZW50ID0gTlVMTDsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJSZXBsYXlHYWluIHZvbHVtZSIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9BdWRpbyIsCi0gICAgICAiQXBwbHkgUmVwbGF5R2FpbiB2b2x1bWUgYWRqdXN0bWVudCIsCi0gICAgICAiUmVuXHhjM1x4YTkgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3JnX3ZvbHVtZV9kZWJ1ZywgInJndm9sdW1lIiwgMCwKLSAgICAgICJSZXBsYXlHYWluIHZvbHVtZSBlbGVtZW50Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfcmdfdm9sdW1lX2luaXQgKEdzdFJnVm9sdW1lICogc2VsZikKLXsKLSAgR09iamVjdENsYXNzICp2b2x1bWVfY2xhc3M7Ci0gIEdzdFBhZCAqdm9sdW1lX3BhZCwgKmdob3N0X3BhZDsKLQotICBzZWxmLT5hbGJ1bV9tb2RlID0gREVGQVVMVF9BTEJVTV9NT0RFOwotICBzZWxmLT5oZWFkcm9vbSA9IERFRkFVTFRfSEVBRFJPT007Ci0gIHNlbGYtPnByZV9hbXAgPSBERUZBVUxUX1BSRV9BTVA7Ci0gIHNlbGYtPmZhbGxiYWNrX2dhaW4gPSBERUZBVUxUX0ZBTExCQUNLX0dBSU47Ci0gIHNlbGYtPnRhcmdldF9nYWluID0gMC4wOwotICBzZWxmLT5yZXN1bHRfZ2FpbiA9IDAuMDsKLQotICBzZWxmLT52b2x1bWVfZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZvbHVtZSIsICJyZ3ZvbHVtZS12b2x1bWUiKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHNlbGYtPnZvbHVtZV9lbGVtZW50ID09IE5VTEwpKSB7Ci0gICAgR3N0TWVzc2FnZSAqbXNnOwotCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAiY291bGQgbm90IGNyZWF0ZSB2b2x1bWUgZWxlbWVudCIpOwotICAgIG1zZyA9IGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2FnZV9uZXcgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbGYpLCAidm9sdW1lIik7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSwgbXNnKTsKLQotICAgIC8qIE5vdGhpbmcgZWxzZSB0byBkbywgd2Ugd2lsbCByZWZ1c2UgdGhlIHN0YXRlIGNoYW5nZSBmcm9tIE5VTEwgdG8gUkVBRFkgdG8KLSAgICAgKiBpbmRpY2F0ZSB0aGF0IHNvbWV0aGluZyB3ZW50IHZlcnkgd3JvbmcuICBJdCBpcyBkb3VidGZ1bCB0aGF0IHNvbWVvbmUKLSAgICAgKiBhdHRlbXB0cyBjaGFuZ2luZyBvdXIgc3RhdGUgdGhvdWdoLCBzaW5jZSB3ZSBlbmQgdXAgaGF2aW5nIG5vIHBhZHMhICovCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgdm9sdW1lX2NsYXNzID0gR19PQkpFQ1RfR0VUX0NMQVNTIChHX09CSkVDVCAoc2VsZi0+dm9sdW1lX2VsZW1lbnQpKTsKLSAgc2VsZi0+bWF4X3ZvbHVtZSA9IEdfUEFSQU1fU1BFQ19ET1VCTEUKLSAgICAgIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5ICh2b2x1bWVfY2xhc3MsICJ2b2x1bWUiKSktPm1heGltdW07Ci0KLSAgR1NUX0JJTl9DTEFTUyAocGFyZW50X2NsYXNzKS0+YWRkX2VsZW1lbnQgKEdTVF9CSU5fQ0FTVCAoc2VsZiksCi0gICAgICBzZWxmLT52b2x1bWVfZWxlbWVudCk7Ci0KLSAgdm9sdW1lX3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZWxmLT52b2x1bWVfZWxlbWVudCwgInNpbmsiKTsKLSAgZ2hvc3RfcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoInNpbmsiLCB2b2x1bWVfcGFkLAotICAgICAgR1NUX1BBRF9QQURfVEVNUExBVEUgKHZvbHVtZV9wYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodm9sdW1lX3BhZCk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChnaG9zdF9wYWQsIGdzdF9yZ192b2x1bWVfc2lua19ldmVudCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHNlbGYpLCBnaG9zdF9wYWQpOwotCi0gIHZvbHVtZV9wYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2VsZi0+dm9sdW1lX2VsZW1lbnQsICJzcmMiKTsKLSAgZ2hvc3RfcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoInNyYyIsIHZvbHVtZV9wYWQsCi0gICAgICBHU1RfUEFEX1BBRF9URU1QTEFURSAodm9sdW1lX3BhZCkpOwotICBnc3Rfb2JqZWN0X3VucmVmICh2b2x1bWVfcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsZiksIGdob3N0X3BhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfcmdfdm9sdW1lX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSZ1ZvbHVtZSAqc2VsZiA9IEdTVF9SR19WT0xVTUUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FMQlVNX01PREU6Ci0gICAgICBzZWxmLT5hbGJ1bV9tb2RlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0hFQURST09NOgotICAgICAgc2VsZi0+aGVhZHJvb20gPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUkVfQU1QOgotICAgICAgc2VsZi0+cHJlX2FtcCA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZBTExCQUNLX0dBSU46Ci0gICAgICBzZWxmLT5mYWxsYmFja19nYWluID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X3JnX3ZvbHVtZV91cGRhdGVfZ2FpbiAoc2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfcmdfdm9sdW1lX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSZ1ZvbHVtZSAqc2VsZiA9IEdTVF9SR19WT0xVTUUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0FMQlVNX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2VsZi0+YWxidW1fbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSEVBRFJPT006Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBzZWxmLT5oZWFkcm9vbSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJFX0FNUDoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnByZV9hbXApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZBTExCQUNLX0dBSU46Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBzZWxmLT5mYWxsYmFja19nYWluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UQVJHRVRfR0FJTjoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnRhcmdldF9nYWluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVNVTFRfR0FJTjoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlbGYtPnJlc3VsdF9nYWluKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ192b2x1bWVfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UmdWb2x1bWUgKnNlbGYgPSBHU1RfUkdfVk9MVU1FIChvYmplY3QpOwotCi0gIGlmIChzZWxmLT52b2x1bWVfZWxlbWVudCAhPSBOVUxMKSB7Ci0gICAgLyogTWFudWFsbHkgcmVtb3ZlIG91ciBjaGlsZCB1c2luZyB0aGUgYmluIGltcGxlbWVudGF0aW9uIG9mIHJlbW92ZV9lbGVtZW50LgotICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgcHJldmVudCBnc3RfYmluX3JlbW92ZSBmcm9tIHdvcmtpbmcsIHdoaWNoIHRoZQotICAgICAqIHBhcmVudCBkaXNwb3NlIGhhbmRsZXIgd291bGQgdXNlIGlmIHdlIGhhZCBhbnkgY2hpbGRyZW4gbGVmdC4gKi8KLSAgICBHU1RfQklOX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5yZW1vdmVfZWxlbWVudCAoR1NUX0JJTl9DQVNUIChzZWxmKSwKLSAgICAgICAgc2VsZi0+dm9sdW1lX2VsZW1lbnQpOwotICAgIHNlbGYtPnZvbHVtZV9lbGVtZW50ID0gTlVMTDsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9yZ192b2x1bWVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UmdWb2x1bWUgKnNlbGYgPSBHU1RfUkdfVk9MVU1FIChlbGVtZW50KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoc2VsZi0+dm9sdW1lX2VsZW1lbnQgPT0gTlVMTCkpIHsKLSAgICAgICAgLyogQ3JlYXRpbmcgb3VyIGNoaWxkIHZvbHVtZSBlbGVtZW50IGluIF9pbml0IGZhaWxlZC4gKi8KLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLQotICAgICAgZ3N0X3JnX3ZvbHVtZV9yZXNldCAoc2VsZik7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qIEV2ZW50IGZ1bmN0aW9uIGZvciB0aGUgZ2hvc3Qgc2luayBwYWQuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9yZ192b2x1bWVfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJnVm9sdW1lICpzZWxmOwotICBHc3RFdmVudCAqc2VuZF9ldmVudCA9IGV2ZW50OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc2VsZiA9IEdTVF9SR19WT0xVTUUgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfVEFHOgotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgInJlY2VpdmVkIHRhZyBldmVudCIpOwotCi0gICAgICBzZW5kX2V2ZW50ID0gZ3N0X3JnX3ZvbHVtZV90YWdfZXZlbnQgKHNlbGYsIGV2ZW50KTsKLQotICAgICAgaWYgKHNlbmRfZXZlbnQgPT0gTlVMTCkKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJhbGwgdGFncyBoYW5kbGVkLCBkcm9wcGluZyBldmVudCIpOwotCi0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLQotICAgICAgZ3N0X3JnX3ZvbHVtZV9yZXNldCAoc2VsZik7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChHX0xJS0VMWSAoc2VuZF9ldmVudCAhPSBOVUxMKSkKLSAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBzZW5kX2V2ZW50KTsKLSAgZWxzZQotICAgIHJlcyA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEV2ZW50ICoKLWdzdF9yZ192b2x1bWVfdGFnX2V2ZW50IChHc3RSZ1ZvbHVtZSAqIHNlbGYsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnYm9vbGVhbiBoYXNfdHJhY2tfZ2FpbiwgaGFzX3RyYWNrX3BlYWssIGhhc19hbGJ1bV9nYWluLCBoYXNfYWxidW1fcGVhazsKLSAgZ2Jvb2xlYW4gaGFzX3JlZl9sZXZlbDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZXZlbnQgIT0gTlVMTCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9UQUcsIGV2ZW50KTsKLQotICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ19saXN0KTsKLQotICBpZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdfbGlzdCkpCi0gICAgcmV0dXJuIGV2ZW50OwotCi0gIGhhc190cmFja19nYWluID0gZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX1RSQUNLX0dBSU4sCi0gICAgICAmc2VsZi0+dHJhY2tfZ2Fpbik7Ci0gIGhhc190cmFja19wZWFrID0gZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX1RSQUNLX1BFQUssCi0gICAgICAmc2VsZi0+dHJhY2tfcGVhayk7Ci0gIGhhc19hbGJ1bV9nYWluID0gZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX0FMQlVNX0dBSU4sCi0gICAgICAmc2VsZi0+YWxidW1fZ2Fpbik7Ci0gIGhhc19hbGJ1bV9wZWFrID0gZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX0FMQlVNX1BFQUssCi0gICAgICAmc2VsZi0+YWxidW1fcGVhayk7Ci0gIGhhc19yZWZfbGV2ZWwgPSBnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsIEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMLAotICAgICAgJnNlbGYtPnJlZmVyZW5jZV9sZXZlbCk7Ci0KLSAgaWYgKCFoYXNfdHJhY2tfZ2FpbiAmJiAhaGFzX3RyYWNrX3BlYWsgJiYgIWhhc19hbGJ1bV9nYWluICYmICFoYXNfYWxidW1fcGVhaykKLSAgICByZXR1cm4gZXZlbnQ7Ci0KLSAgaWYgKGhhc19yZWZfbGV2ZWwgJiYgKGhhc190cmFja19nYWluIHx8IGhhc19hbGJ1bV9nYWluKQotICAgICAgJiYgKEFCUyAoc2VsZi0+cmVmZXJlbmNlX2xldmVsIC0gUkdfUkVGRVJFTkNFX0xFVkVMKSA+IDEuZS02KSkgewotICAgIC8qIExvZyBhIG1lc3NhZ2Ugc3RhdGluZyB0aGUgYW1vdW50IG9mIGFkanVzdG1lbnQgdGhhdCBpcyBhcHBsaWVkIGJlbG93LiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJjb21wZW5zYXRpbmcgZm9yIHJlZmVyZW5jZSBsZXZlbCBkaWZmZXJlbmNlIGJ5ICUiIEdBSU5fRk9STUFULAotICAgICAgICBSR19SRUZFUkVOQ0VfTEVWRUwgLSBzZWxmLT5yZWZlcmVuY2VfbGV2ZWwpOwotICB9Ci0gIGlmIChoYXNfdHJhY2tfZ2FpbikgewotICAgIHNlbGYtPnRyYWNrX2dhaW4gKz0gUkdfUkVGRVJFTkNFX0xFVkVMIC0gc2VsZi0+cmVmZXJlbmNlX2xldmVsOwotICB9Ci0gIGlmIChoYXNfYWxidW1fZ2FpbikgewotICAgIHNlbGYtPmFsYnVtX2dhaW4gKz0gUkdfUkVGRVJFTkNFX0xFVkVMIC0gc2VsZi0+cmVmZXJlbmNlX2xldmVsOwotICB9Ci0KLSAgLyogSWdub3JlIHZhbHVlcyB0aGF0IGFyZSBvYnZpb3VzbHkgaW52YWxpZC4gKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGhhc190cmFja19nYWluICYmICFWQUxJRF9HQUlOIChzZWxmLT50cmFja19nYWluKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAiaWdub3JpbmcgYm9ndXMgdHJhY2sgZ2FpbiB2YWx1ZSAlIiBHQUlOX0ZPUk1BVCwgc2VsZi0+dHJhY2tfZ2Fpbik7Ci0gICAgaGFzX3RyYWNrX2dhaW4gPSBGQUxTRTsKLSAgfQotICBpZiAoR19VTkxJS0VMWSAoaGFzX3RyYWNrX3BlYWsgJiYgIVZBTElEX1BFQUsgKHNlbGYtPnRyYWNrX3BlYWspKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJpZ25vcmluZyBib2d1cyB0cmFjayBwZWFrIHZhbHVlICUiIFBFQUtfRk9STUFULCBzZWxmLT50cmFja19wZWFrKTsKLSAgICBoYXNfdHJhY2tfcGVhayA9IEZBTFNFOwotICB9Ci0gIGlmIChHX1VOTElLRUxZIChoYXNfYWxidW1fZ2FpbiAmJiAhVkFMSURfR0FJTiAoc2VsZi0+YWxidW1fZ2FpbikpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgImlnbm9yaW5nIGJvZ3VzIGFsYnVtIGdhaW4gdmFsdWUgJSIgR0FJTl9GT1JNQVQsIHNlbGYtPmFsYnVtX2dhaW4pOwotICAgIGhhc19hbGJ1bV9nYWluID0gRkFMU0U7Ci0gIH0KLSAgaWYgKEdfVU5MSUtFTFkgKGhhc19hbGJ1bV9wZWFrICYmICFWQUxJRF9QRUFLIChzZWxmLT5hbGJ1bV9wZWFrKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLAotICAgICAgICAiaWdub3JpbmcgYm9ndXMgYWxidW0gcGVhayB2YWx1ZSAlIiBQRUFLX0ZPUk1BVCwgc2VsZi0+YWxidW1fcGVhayk7Ci0gICAgaGFzX2FsYnVtX3BlYWsgPSBGQUxTRTsKLSAgfQotCi0gIC8qIENsYW1wIHBlYWtzID4xLjAuICBGbG9hdCBiYXNlZCBkZWNvZGVycyBjYW4gcHJvZHVjZSBzcHVyaW91cyBzYW1wbGVzID4xLjAsCi0gICAqIGN1dHRpbmcgdGhlc2UgZmlsZXMgYmFjayB0byAxLjAgc2hvdWxkIG5vdCBjYXVzZSBhbnkgYXVkaWJsZSBkaXN0b3J0aW9uLgotICAgKiBUaGlzIGlzIG1vc3Qgb2Z0ZW4gc2VlbiB3aXRoIFZvcmJpcyBmaWxlcy4gKi8KLSAgaWYgKGhhc190cmFja19wZWFrICYmIHNlbGYtPnRyYWNrX3BlYWsgPiAxLikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJjbGFtcGluZyB0cmFjayBwZWFrICUiIFBFQUtfRk9STUFUICIgdG8gMS4wIiwgc2VsZi0+dHJhY2tfcGVhayk7Ci0gICAgc2VsZi0+dHJhY2tfcGVhayA9IDEuMDsKLSAgfQotICBpZiAoaGFzX2FsYnVtX3BlYWsgJiYgc2VsZi0+YWxidW1fcGVhayA+IDEuKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwKLSAgICAgICAgImNsYW1waW5nIGFsYnVtIHBlYWsgJSIgUEVBS19GT1JNQVQgIiB0byAxLjAiLCBzZWxmLT5hbGJ1bV9wZWFrKTsKLSAgICBzZWxmLT5hbGJ1bV9wZWFrID0gMS4wOwotICB9Ci0KLSAgc2VsZi0+aGFzX3RyYWNrX2dhaW4gfD0gaGFzX3RyYWNrX2dhaW47Ci0gIHNlbGYtPmhhc190cmFja19wZWFrIHw9IGhhc190cmFja19wZWFrOwotICBzZWxmLT5oYXNfYWxidW1fZ2FpbiB8PSBoYXNfYWxidW1fZ2FpbjsKLSAgc2VsZi0+aGFzX2FsYnVtX3BlYWsgfD0gaGFzX2FsYnVtX3BlYWs7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfY29weSAodGFnX2xpc3QpOwotICBnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZyAodGFnX2xpc3QsIEdTVF9UQUdfVFJBQ0tfR0FJTik7Ci0gIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICh0YWdfbGlzdCwgR1NUX1RBR19UUkFDS19QRUFLKTsKLSAgZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKHRhZ19saXN0LCBHU1RfVEFHX0FMQlVNX0dBSU4pOwotICBnc3RfdGFnX2xpc3RfcmVtb3ZlX3RhZyAodGFnX2xpc3QsIEdTVF9UQUdfQUxCVU1fUEVBSyk7Ci0gIGdzdF90YWdfbGlzdF9yZW1vdmVfdGFnICh0YWdfbGlzdCwgR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwpOwotCi0gIGdzdF9yZ192b2x1bWVfdXBkYXRlX2dhaW4gKHNlbGYpOwotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICBpZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5ICh0YWdfbGlzdCkpIHsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3JnX3ZvbHVtZV9yZXNldCAoR3N0UmdWb2x1bWUgKiBzZWxmKQotewotICBzZWxmLT5oYXNfdHJhY2tfZ2FpbiA9IEZBTFNFOwotICBzZWxmLT5oYXNfdHJhY2tfcGVhayA9IEZBTFNFOwotICBzZWxmLT5oYXNfYWxidW1fZ2FpbiA9IEZBTFNFOwotICBzZWxmLT5oYXNfYWxidW1fcGVhayA9IEZBTFNFOwotCi0gIHNlbGYtPnJlZmVyZW5jZV9sZXZlbCA9IFJHX1JFRkVSRU5DRV9MRVZFTDsKLQotICBnc3Rfcmdfdm9sdW1lX3VwZGF0ZV9nYWluIChzZWxmKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9yZ192b2x1bWVfdXBkYXRlX2dhaW4gKEdzdFJnVm9sdW1lICogc2VsZikKLXsKLSAgZ2RvdWJsZSB0YXJnZXRfZ2FpbiwgcmVzdWx0X2dhaW4sIHJlc3VsdF92b2x1bWU7Ci0gIGdib29sZWFuIHRhcmdldF9nYWluX2NoYW5nZWQsIHJlc3VsdF9nYWluX2NoYW5nZWQ7Ci0KLSAgZ3N0X3JnX3ZvbHVtZV9kZXRlcm1pbmVfZ2FpbiAoc2VsZiwgJnRhcmdldF9nYWluLCAmcmVzdWx0X2dhaW4pOwotCi0gIHJlc3VsdF92b2x1bWUgPSBEQl9UT19MSU5FQVIgKHJlc3VsdF9nYWluKTsKLQotICAvKiBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0IHZvbHVtZSBpcyB3aXRoaW4gdGhlIHJhbmdlIHRoYXQgdGhlIHZvbHVtZSBlbGVtZW50Ci0gICAqIGNhbiBoYW5kbGUuICBDdXJyZW50bHksIHRoZSBsaW1pdCBpcyAxMC4gKCsyMCBkQiksIHdoaWNoIHNob3VsZCBub3QgYmUKLSAgICogcmVzdHJpY3RpdmUuICovCi0gIGlmIChHX1VOTElLRUxZIChyZXN1bHRfdm9sdW1lID4gc2VsZi0+bWF4X3ZvbHVtZSkpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJjYW5ub3QgaGFuZGxlIHJlc3VsdCBnYWluIG9mICUiIEdBSU5fRk9STUFUICIgKCUwLjZmKSwgYWRqdXN0aW5nIiwKLSAgICAgICAgcmVzdWx0X2dhaW4sIHJlc3VsdF92b2x1bWUpOwotCi0gICAgcmVzdWx0X3ZvbHVtZSA9IHNlbGYtPm1heF92b2x1bWU7Ci0gICAgcmVzdWx0X2dhaW4gPSBMSU5FQVJfVE9fREIgKHJlc3VsdF92b2x1bWUpOwotICB9Ci0KLSAgLyogRGlyZWN0IGNvbXBhcmlzb24gaXMgT0sgaW4gdGhpcyBjYXNlLiAqLwotICBpZiAodGFyZ2V0X2dhaW4gPT0gcmVzdWx0X2dhaW4pIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJyZXN1bHQgZ2FpbiBpcyAlIiBHQUlOX0ZPUk1BVCAiICglMC42ZiksIG1hdGNoaW5nIHRhcmdldCIsCi0gICAgICAgIHJlc3VsdF9nYWluLCByZXN1bHRfdm9sdW1lKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsCi0gICAgICAgICJyZXN1bHQgZ2FpbiBpcyAlIiBHQUlOX0ZPUk1BVCAiICglMC42ZiksIHRhcmdldCBpcyAlIiBHQUlOX0ZPUk1BVCwKLSAgICAgICAgcmVzdWx0X2dhaW4sIHJlc3VsdF92b2x1bWUsIHRhcmdldF9nYWluKTsKLSAgfQotCi0gIHRhcmdldF9nYWluX2NoYW5nZWQgPSAoc2VsZi0+dGFyZ2V0X2dhaW4gIT0gdGFyZ2V0X2dhaW4pOwotICByZXN1bHRfZ2Fpbl9jaGFuZ2VkID0gKHNlbGYtPnJlc3VsdF9nYWluICE9IHJlc3VsdF9nYWluKTsKLQotICBzZWxmLT50YXJnZXRfZ2FpbiA9IHRhcmdldF9nYWluOwotICBzZWxmLT5yZXN1bHRfZ2FpbiA9IHJlc3VsdF9nYWluOwotCi0gIGdfb2JqZWN0X3NldCAoc2VsZi0+dm9sdW1lX2VsZW1lbnQsICJ2b2x1bWUiLCByZXN1bHRfdm9sdW1lLCBOVUxMKTsKLQotICBpZiAodGFyZ2V0X2dhaW5fY2hhbmdlZCkKLSAgICBnX29iamVjdF9ub3RpZnkgKChHT2JqZWN0ICopIHNlbGYsICJ0YXJnZXQtZ2FpbiIpOwotICBpZiAocmVzdWx0X2dhaW5fY2hhbmdlZCkKLSAgICBnX29iamVjdF9ub3RpZnkgKChHT2JqZWN0ICopIHNlbGYsICJyZXN1bHQtZ2FpbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWdzdF9yZ192b2x1bWVfZGV0ZXJtaW5lX2dhaW4gKEdzdFJnVm9sdW1lICogc2VsZiwgZ2RvdWJsZSAqIHRhcmdldF9nYWluLAotICAgIGdkb3VibGUgKiByZXN1bHRfZ2FpbikKLXsKLSAgZ2RvdWJsZSBnYWluLCBwZWFrOwotCi0gIGlmICghc2VsZi0+aGFzX3RyYWNrX2dhaW4gJiYgIXNlbGYtPmhhc19hbGJ1bV9nYWluKSB7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAidXNpbmcgZmFsbGJhY2sgZ2FpbiIpOwotICAgIGdhaW4gPSBzZWxmLT5mYWxsYmFja19nYWluOwotICAgIHBlYWsgPSAxLjA7Ci0KLSAgfSBlbHNlIGlmICgoc2VsZi0+YWxidW1fbW9kZSAmJiBzZWxmLT5oYXNfYWxidW1fZ2FpbikKLSAgICAgIHx8ICghc2VsZi0+YWxidW1fbW9kZSAmJiAhc2VsZi0+aGFzX3RyYWNrX2dhaW4pKSB7Ci0KLSAgICBnYWluID0gc2VsZi0+YWxidW1fZ2FpbjsKLSAgICBpZiAoR19MSUtFTFkgKHNlbGYtPmhhc19hbGJ1bV9wZWFrKSkgewotICAgICAgcGVhayA9IHNlbGYtPmFsYnVtX3BlYWs7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJhbGJ1bSBwZWFrIG1pc3NpbmcsIGFzc3VtaW5nIDEuMCIpOwotICAgICAgcGVhayA9IDEuMDsKLSAgICB9Ci0gICAgLyogRmFsbGluZyBiYWNrIGZyb20gdHJhY2sgdG8gYWxidW0gZ2FpbiBzaG91bGRuJ3QgcmVhbGx5IGhhcHBlbi4gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoIXNlbGYtPmFsYnVtX21vZGUpKQotICAgICAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAiZmFsbGluZyBiYWNrIHRvIGFsYnVtIGdhaW4iKTsKLQotICB9IGVsc2UgewotICAgIC8qICFhbGJ1bV9tb2RlICYmICFoYXNfYWxidW1fZ2FpbiB8fCBhbGJ1bV9tb2RlICYmIGhhc190cmFja19nYWluICovCi0KLSAgICBnYWluID0gc2VsZi0+dHJhY2tfZ2FpbjsKLSAgICBpZiAoR19MSUtFTFkgKHNlbGYtPmhhc190cmFja19wZWFrKSkgewotICAgICAgcGVhayA9IHNlbGYtPnRyYWNrX3BlYWs7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJ0cmFjayBwZWFrIG1pc3NpbmcsIGFzc3VtaW5nIDEuMCIpOwotICAgICAgcGVhayA9IDEuMDsKLSAgICB9Ci0gICAgaWYgKHNlbGYtPmFsYnVtX21vZGUpCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJmYWxsaW5nIGJhY2sgdG8gdHJhY2sgZ2FpbiIpOwotICB9Ci0KLSAgZ2FpbiArPSBzZWxmLT5wcmVfYW1wOwotCi0gICp0YXJnZXRfZ2FpbiA9IGdhaW47Ci0gICpyZXN1bHRfZ2FpbiA9IGdhaW47Ci0KLSAgaWYgKExJTkVBUl9UT19EQiAocGVhaykgKyBnYWluID4gc2VsZi0+aGVhZHJvb20pIHsKLSAgICAqcmVzdWx0X2dhaW4gPSBMSU5FQVJfVE9fREIgKDEuIC8gcGVhaykgKyBzZWxmLT5oZWFkcm9vbTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuaCBiL2dzdC9yZXBsYXlnYWluL2dzdHJndm9sdW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTVhOGMuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vZ3N0cmd2b2x1bWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBSZXBsYXlHYWluIHZvbHVtZSBhZGp1c3RtZW50Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLSAqCi0gKiBnc3RyZ3ZvbHVtZS5oOiBFbGVtZW50IHRvIGFwcGx5IFJlcGxheUdhaW4gdm9sdW1lIGFkanVzdG1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JHX1ZPTFVNRV9IX18KLSNkZWZpbmUgX19HU1RfUkdfVk9MVU1FX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUkdfVk9MVU1FIFwKLSAgKGdzdF9yZ192b2x1bWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JHX1ZPTFVNRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JHX1ZPTFVNRSxHc3RSZ1ZvbHVtZSkpCi0jZGVmaW5lIEdTVF9SR19WT0xVTUVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUkdfVk9MVU1FLEdzdFJnVm9sdW1lQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUkdfVk9MVU1FKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUkdfVk9MVU1FKSkKLSNkZWZpbmUgR1NUX0lTX1JHX1ZPTFVNRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SR19WT0xVTUUpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UmdWb2x1bWUgR3N0UmdWb2x1bWU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UmdWb2x1bWVDbGFzcyBHc3RSZ1ZvbHVtZUNsYXNzOwotCi0vKioKLSAqIEdzdFJnVm9sdW1lOgotICoKLSAqIE9wYXF1ZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RSZ1ZvbHVtZQotewotICBHc3RCaW4gYmluOwotCi0gIC8qPCBwcml2YXRlID4qLwotCi0gIEdzdEVsZW1lbnQgKnZvbHVtZV9lbGVtZW50OwotICBnZG91YmxlIG1heF92b2x1bWU7Ci0KLSAgZ2Jvb2xlYW4gYWxidW1fbW9kZTsKLSAgZ2RvdWJsZSBoZWFkcm9vbTsKLSAgZ2RvdWJsZSBwcmVfYW1wOwotICBnZG91YmxlIGZhbGxiYWNrX2dhaW47Ci0KLSAgZ2RvdWJsZSB0YXJnZXRfZ2FpbjsKLSAgZ2RvdWJsZSByZXN1bHRfZ2FpbjsKLQotICBnZG91YmxlIHRyYWNrX2dhaW47Ci0gIGdkb3VibGUgdHJhY2tfcGVhazsKLSAgZ2RvdWJsZSBhbGJ1bV9nYWluOwotICBnZG91YmxlIGFsYnVtX3BlYWs7Ci0KLSAgZ2Jvb2xlYW4gaGFzX3RyYWNrX2dhaW47Ci0gIGdib29sZWFuIGhhc190cmFja19wZWFrOwotICBnYm9vbGVhbiBoYXNfYWxidW1fZ2FpbjsKLSAgZ2Jvb2xlYW4gaGFzX2FsYnVtX3BlYWs7Ci0KLSAgZ2RvdWJsZSByZWZlcmVuY2VfbGV2ZWw7Ci19OwotCi1zdHJ1Y3QgX0dzdFJnVm9sdW1lQ2xhc3MKLXsKLSAgR3N0QmluQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3JnX3ZvbHVtZV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SR19WT0xVTUVfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcmVwbGF5Z2Fpbi9yZXBsYXlnYWluLmMgYi9nc3QvcmVwbGF5Z2Fpbi9yZXBsYXlnYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDk5ZWQuLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vcmVwbGF5Z2Fpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJlcGxheUdhaW4gcGx1Z2luCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLSAqIAotICogcmVwbGF5Z2Fpbi5jOiBQbHVnaW4gcHJvdmlkaW5nIFJlcGxheUdhaW4gcmVsYXRlZCBlbGVtZW50cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdHJnYW5hbHlzaXMuaCIKLSNpbmNsdWRlICJnc3RyZ2xpbWl0ZXIuaCIKLSNpbmNsdWRlICJnc3RyZ3ZvbHVtZS5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJnYW5hbHlzaXMiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX1JHX0FOQUxZU0lTKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicmdsaW1pdGVyIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9SR19MSU1JVEVSKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicmd2b2x1bWUiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX1JHX1ZPTFVNRSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCByZXBsYXlnYWluLAotICAgICJSZXBsYXlHYWluIHZvbHVtZSBub3JtYWxpemF0aW9uIiwgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLAotICAgIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTik7CmRpZmYgLS1naXQgYS9nc3QvcmVwbGF5Z2Fpbi9yZXBsYXlnYWluLmggYi9nc3QvcmVwbGF5Z2Fpbi9yZXBsYXlnYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmU4ODguLjAwMDAwMDAKLS0tIGEvZ3N0L3JlcGxheWdhaW4vcmVwbGF5Z2Fpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJlcGxheUdhaW4gcGx1Z2luCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFJlbmUgU3RhZGxlciA8bWFpbEByZW5lc3RhZGxlci5kZT4KLSAqCi0gKiByZXBsYXlnYWluLmg6IFBsdWdpbiBwcm92aWRpbmcgUmVwbGF5R2FpbiByZWxhdGVkIGVsZW1lbnRzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lmbmRlZiBfX1JFUExBWUdBSU5fSF9fCi0jZGVmaW5lIF9fUkVQTEFZR0FJTl9IX18KLQotR19CRUdJTl9ERUNMUwotCi0vKiBSZWZlcmVuY2UgbGV2ZWwgKGluIGRCU1BMKS4gIFRoZSAyMDAxIHByb3Bvc2FsIHNwZWNpZmllcyA4My4gIFRoaXMgd2FzCi0gKiBjaGFuZ2VkIGxhdGVyIGluIGFsbCBpbXBsZW1lbnRhdGlvbnMgdG8gODksIHdoaWNoIGlzIHRoZSBuZXcsIG9mZmljYWwgdmFsdWU6Ci0gKiBEYXZpZCBSb2JpbnNvbiBhY2tub3dsZWRnZWQgdGhlIGNoYW5nZSBidXQgZGlkbid0IHVwZGF0ZSB0aGUgd2Vic2l0ZSB5ZXQuICovCi0KLSNkZWZpbmUgUkdfUkVGRVJFTkNFX0xFVkVMIDg5LgotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19SRVBMQVlHQUlOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jIGIvZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTUzNTM2Li4wMDAwMDAwCi0tLSBhL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYworKysgL2Rldi9udWxsCkBAIC0xLDgyNCArMCwwIEBACi0vKiBHU3RyZWFtZXIgUmVwbGF5R2FpbiBhbmFseXNpcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgUm9iaW5zb24gPERhdmlkQFJvYmluc29uLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICBHbGVuIFNhd3llciA8Z2xlbnNhd3llckBob3RtYWlsLmNvbT4KLSAqCi0gKiByZ2FuYWx5c2lzLmM6IEFuYWx5emUgcmF3IGF1ZGlvIGRhdGEgaW4gYWNjb3JkYW5jZSB3aXRoIFJlcGxheUdhaW4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKiBCYXNlZCBvbiBjb2RlIHdpdGggQ29weXJpZ2h0IChDKSAyMDAxIERhdmlkIFJvYmluc29uCi0gKiA8RGF2aWRAUm9iaW5zb24ub3JnPiBhbmQgR2xlbiBTYXd5ZXIgPGdsZW5zYXd5ZXJAaG90bWFpbC5jb20+LAotICogd2hpY2ggaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExHUEwgYXMgcGFydCBvZiB0aGUgdm9yYmlzZ2FpbgotICogcHJvZ3JhbS4gIFRoZSBvcmlnaW5hbCBjb2RlIGFsc28gbWVudGlvbnMgRnJhbmsgS2xlbW0KLSAqIChodHRwOi8vd3d3LnVuaS1qZW5hLmRlL35wZmsvbXBwLykgZm9yIGhhdmluZyBjb250cmlidXRlZCBsb3RzIG9mCi0gKiBnb29kIGNvZGUuICBTcGVjaWZpY2FsbHksIHRoaXMgaXMgYmFzZWQgb24gdGhlIGZpbGUKLSAqICJnYWluX2FuYWx5c2lzLmMiIGZyb20gdm9yYmlzZ2FpbiB2ZXJzaW9uIDAuMzQuCi0gKi8KLQotLyogUm9vbSBmb3IgZnV0dXJlIGltcHJvdmVtZW50OiBNb25vIGRhdGEgaXMgY3VycmVudGx5IGluIGZhY3QgY29waWVkCi0gKiB0byB0d28gY2hhbm5lbHMgd2hpY2ggZ2V0IHByb2Nlc3NlZCBub3JtYWxseS4gIFRoaXMgbWVhbnMgdGhhdCBtb25vCi0gKiBpbnB1dCBkYXRhIGlzIHByb2Nlc3NlZCB0d2ljZS4KLSAqLwotCi0vKiBIZWxwZnVsIGluZm9ybWF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZTogVGhlIHR3byBJSVIKLSAqIGZpbHRlcnMgZGVwZW5kIG9uIHByZXZpb3VzIGlucHV0IF9hbmRfIHByZXZpb3VzIG91dHB1dCBzYW1wbGVzICh1cAotICogdG8gdGhlIGZpbHRlcidzIG9yZGVyIG51bWJlciBvZiBzYW1wbGVzKS4gIFRoaXMgZXhwbGFpbnMgdGhlIHdob2xlCi0gKiBsb3Qgb2YgbWVtY3B5J2luZyBkb25lIGluIHJnX2FuYWx5c2lzX2FuYWx5emUgYW5kIHdoeSB0aGUgY29udGV4dAotICogaG9sZHMgc28gbWFueSBidWZmZXJzLgotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSAicmdhbmFseXNpcy5oIgotCi0jZGVmaW5lIFlVTEVfT1JERVIgICAgICAgICAxMAotI2RlZmluZSBCVVRURVJfT1JERVIgICAgICAgIDIKLS8qIFBlcmNlbnRpbGUgd2hpY2ggaXMgbG91ZGVyIHRoYW4gdGhlIHByb3Bvc2VkIGxldmVsOiAqLwotI2RlZmluZSBSTVNfUEVSQ0VOVElMRSAgICAgOTUKLS8qIER1cmF0aW9uIG9mIFJNUyB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzOiAqLwotI2RlZmluZSBSTVNfV0lORE9XX01TRUNTICAgNTAKLS8qIEhpc3RvZ3JhbSBhcnJheSBlbGVtZW50cyBwZXIgZEI6ICovCi0jZGVmaW5lIFNURVBTX1BFUl9EQiAgICAgIDEwMAotLyogSGlzdG9ncmFtIHVwcGVyIGJvdW5kIGluIGRCIChub3JtYWwgbWF4LiB2YWx1ZXMgaW4gdGhlIHdpbGQgYXJlCi0gKiBhc3N1bWVkIHRvIGJlIGFyb3VuZCA3MCwgODAgZEIpOiAqLwotI2RlZmluZSBNQVhfREIgICAgICAgICAgICAxMjAKLS8qIENhbGlicmF0aW9uIHZhbHVlOiAqLwotI2RlZmluZSBQSU5LX1JFRiAgICAgICAgICAgNjQuODIgICAgICAgIC8qIDI5ODY0MDg4Mzc5NSAqLwotCi0jZGVmaW5lIE1BWF9PUkRFUiAgICAgICAgIE1BWCAoQlVUVEVSX09SREVSLCBZVUxFX09SREVSKQotI2RlZmluZSBNQVhfU0FNUExFX1JBVEUgICA0ODAwMAotLyogVGhlICsgOTk5IGhhcyB0aGUgZWZmZWN0IG9mIGNlaWwoKWluZzogKi8KLSNkZWZpbmUgTUFYX1NBTVBMRV9XSU5ET1cgKGd1aW50KSBcCi0gICgoTUFYX1NBTVBMRV9SQVRFICogUk1TX1dJTkRPV19NU0VDUyArIDk5OSkgLyAxMDAwKQotCi0vKiBBbmFseXNpcyByZXN1bHQgYWNjdW11bGF0b3IuICovCi0KLXN0cnVjdCBfUmdBbmFseXNpc0FjYwotewotICBndWludDMyIGhpc3RvZ3JhbVtTVEVQU19QRVJfREIgKiBNQVhfREJdOwotICBnZG91YmxlIHBlYWs7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBfUmdBbmFseXNpc0FjYyBSZ0FuYWx5c2lzQWNjOwotCi0vKiBBbmFseXNpcyBjb250ZXh0LiAqLwotCi1zdHJ1Y3QgX1JnQW5hbHlzaXNDdHgKLXsKLSAgLyogRmlsdGVyIGJ1ZmZlcnMgZm9yIGxlZnQgY2hhbm5lbC4gKi8KLSAgZ2Zsb2F0IGlucHJlYnVmX2xbTUFYX09SREVSICogMl07Ci0gIGdmbG9hdCAqaW5wcmVfbDsKLSAgZ2Zsb2F0IHN0ZXBidWZfbFtNQVhfU0FNUExFX1dJTkRPVyArIE1BWF9PUkRFUl07Ci0gIGdmbG9hdCAqc3RlcF9sOwotICBnZmxvYXQgb3V0YnVmX2xbTUFYX1NBTVBMRV9XSU5ET1cgKyBNQVhfT1JERVJdOwotICBnZmxvYXQgKm91dF9sOwotICAvKiBGaWx0ZXIgYnVmZmVycyBmb3IgcmlnaHQgY2hhbm5lbC4gKi8KLSAgZ2Zsb2F0IGlucHJlYnVmX3JbTUFYX09SREVSICogMl07Ci0gIGdmbG9hdCAqaW5wcmVfcjsKLSAgZ2Zsb2F0IHN0ZXBidWZfcltNQVhfU0FNUExFX1dJTkRPVyArIE1BWF9PUkRFUl07Ci0gIGdmbG9hdCAqc3RlcF9yOwotICBnZmxvYXQgb3V0YnVmX3JbTUFYX1NBTVBMRV9XSU5ET1cgKyBNQVhfT1JERVJdOwotICBnZmxvYXQgKm91dF9yOwotCi0gIC8qIE51bWJlciBvZiBzYW1wbGVzIHRvIHJlYWNoIGR1cmF0aW9uIG9mIHRoZSBSTVMgd2luZG93OiAqLwotICBndWludCB3aW5kb3dfbl9zYW1wbGVzOwotICAvKiBQcm9ncmVzcyBvZiB0aGUgcnVubmluZyB3aW5kb3c6ICovCi0gIGd1aW50IHdpbmRvd19uX3NhbXBsZXNfZG9uZTsKLSAgZ2RvdWJsZSB3aW5kb3dfc3F1YXJlX3N1bTsKLQotICBnaW50IHNhbXBsZV9yYXRlOwotICBnaW50IHNhbXBsZV9yYXRlX2luZGV4OwotCi0gIFJnQW5hbHlzaXNBY2MgdHJhY2s7Ci0gIFJnQW5hbHlzaXNBY2MgYWxidW07Ci0gIHZvaWQgKCpwb3N0X21lc3NhZ2UpIChncG9pbnRlciBhbmFseXNpcywKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgZ2RvdWJsZSByZ2xldmVsKTsKLSAgZ3BvaW50ZXIgYW5hbHlzaXM7Ci0gIC8qIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnQgaW5jb21pbmcgYnVmZmVyLiAqLwotICBHc3RDbG9ja1RpbWUgYnVmZmVyX3RpbWVzdGFtcDsKLSAgLyogTnVtYmVyIG9mIHNhbXBsZXMgcHJvY2Vzc2VkIGluIGN1cnJlbnQgYnVmZmVyLCBkdXJpbmcgZW1pdF9zaWduYWwsCi0gICAgIHRoaXMgd2lsbCBhbHdheXMgYmUgb24gYW4gUk1TIHdpbmRvdyBib3VuZGFyeS4gKi8KLSAgZ3VpbnQgYnVmZmVyX25fc2FtcGxlc19kb25lOwotfTsKLQotLyogRmlsdGVyIGNvZWZmaWNpZW50cyBmb3IgdGhlIElJUiBmaWx0ZXJzIHRoYXQgZm9ybSB0aGUgZXF1YWwKLSAqIGxvdWRuZXNzIGZpbHRlci4gIFhGaWx0ZXJbY3R4LT5zYW1wbGVfcmF0ZV9pbmRleF0gZ2l2ZXMgdGhlIGFycmF5Ci0gKiBvZiB0aGUgWCBjb2VmZmljaWVudHMgKEEgb3IgQikgZm9yIHRoZSBjb25maWd1cmVkIHNhbXBsZSByYXRlLiAqLwotCi0jaWZkZWYgX01TQ19WRVIKLS8qIERpc2FibGUgZG91YmxlLXRvLWZsb2F0IHdhcm5pbmc6ICovCi0vKiBBIGJldHRlciBzb2x1dGlvbiB3b3VsZCBiZSB0byBhcHBlbmQgJ2YnIHRvIGVhY2ggY29uc3RhbnQsIGJ1dCB0aGF0Ci0gKiBtYWtlcyB0aGUgY29kZSB1Z2x5LiAqLwotI3ByYWdtYSB3YXJuaW5nICggZGlzYWJsZSA6IDQzMDUgKQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBnZmxvYXQgQVl1bGVbOV1bMTFdID0gewotICB7MS4sIC0zLjg0NjY0NjE3MTE4MDY3LCA3LjgxNTAxNjUzMDA1NTM4LCAtMTEuMzQxNzAzNTUxMzIwNDIsCi0gICAgICAgIDEzLjA1NTA0MjE5MzI3NTQ1LCAtMTIuMjg3NTk4OTUxNDUyOTQsIDkuNDgyOTM4MDYzMTk3OTAsCi0gICAgICAgIC01Ljg3MjU3ODYxNzc1OTk5LCAyLjc1NDY1ODYxODc0NjEzLCAtMC44Njk4NDM3NjU5MzU1MSwKLSAgICAgIDAuMTM5MTkzMTQ1Njc0MzJ9LAotICB7MS4sIC0zLjQ3ODQ1OTQ4NTUwMDcxLCA2LjM2MzE3Nzc3NTY2MTQ4LCAtOC41NDc1MTUyNzQ3MTg3NCwgOS40NzY5MzYwNzgwMTI4MCwKLSAgICAgICAgLTguODE0OTg2ODEzNzAxNTUsIDYuODU0MDE1NDA5MzY5OTgsIC00LjM5NDcwOTk2MDc5NTU5LAotICAgICAgMi4xOTYxMTY4NDg5MDc3NCwgLTAuNzUxMDQzMDI0NTE0MzIsIDAuMTMxNDkzMTc5NTg4MDh9LAotICB7MS4sIC0yLjM3ODk4ODM0OTczMDg0LCAyLjg0ODY4MTUxMTU2MzI3LCAtMi42NDU3NzE3MDIyOTgyNSwgMi4yMzY5NzY1NzQ1MTcxMywKLSAgICAgICAgLTEuNjcxNDgxNTMzNjc2MDIsIDEuMDA1OTU5NTQ4MDg1NDcsIC0wLjQ1OTUzNDU4MDU0OTgzLAotICAgICAgMC4xNjM3ODE2NDg1ODU5NiwgLTAuMDUwMzIwNzc3MTcxMzEsIDAuMDIzNDc4OTc0MDcwMjB9LAotICB7MS4sIC0xLjYxMjczMTY1MTM3MjQ3LCAxLjA3OTc3NDkyMjU5OTcwLCAtMC4yNTY1NjI1Nzc1NDA3MCwKLSAgICAgICAgLTAuMTYyNzY3MTkxMjA0NDAsIC0wLjIyNjM4ODkzNzczOTA2LCAwLjM5MTIwODAwNzg4Mjg0LAotICAgICAgICAtMC4yMjEzODEzODk1NDkyNSwgMC4wNDUwMDIzNTM4NzM1MiwgMC4wMjAwNTg1MTgwNjUwMSwKLSAgICAgIDAuMDAzMDI0MzkwOTU3NDF9LAotICB7MS4sIC0xLjQ5ODU4OTc5MzY3Nzk5LCAwLjg3MzUwMjcxNDE4MTg4LCAwLjEyMjA1MDIyMzA4MDg0LCAtMC44MDc3NDk0NDY3MTQzOCwKLSAgICAgICAgMC40Nzg1NDc5NDU2MjMyNiwgLTAuMTI0NTM0NTgxNDAwMTksIC0wLjA0MDY3NTEwMTk3MDE0LAotICAgICAgMC4wODMzMzc1NTI4NDEwNywgLTAuMDQyMzczNDgwMjU3NDYsIDAuMDI5NzcyMDczMTk5MjV9LAotICB7MS4sIC0wLjYyODIwNjE5MjMzNjcxLCAwLjI5NjYxNzgzNzA2MzY2LCAtMC4zNzI1NjM3Mjk0MjQwMCwgMC4wMDIxMzc2Nzg1NzEyNCwKLSAgICAgICAgLTAuNDIwMjk4MjAxNzA5MTgsIDAuMjIxOTk2NTA1NjQ4MjQsIDAuMDA2MTM0MjQzNTA2ODIsIDAuMDY3NDc2MjA3NDQ2ODMsCi0gICAgICAwLjA1Nzg0ODIwMzc1ODAxLCAwLjAzMjIyNzU0MDcyMTczfSwKLSAgezEuLCAtMS4wNDgwMDMzNTEyNjM0OSwgMC4yOTE1NjMxMTk3MTI0OSwgLTAuMjY4MDYwMDEwNDI5NDcsIDAuMDA4MTk5OTk2NDU4NTgsCi0gICAgICAgIDAuNDUwNTQ3MzQ1MDUwMDgsIC0wLjMzMDMyNDAzMzE0MDA2LCAwLjA2NzM5MzY4MzMzMTEwLAotICAgICAgLTAuMDQ3ODQyNTQyMjkwMzMsIDAuMDE2Mzk5MDc4MzYxODksIDAuMDE4MDczNjQzMjM1NzN9LAotICB7MS4sIC0wLjUxMDM1MzI3MDk1MTg0LCAtMC4zMTg2MzU2MzMyNTI0NSwgLTAuMjAyNTY0MTM0ODQ0NzcsCi0gICAgICAgIDAuMTQ3MjgxNTQxMzQzMzAsIDAuMzg5NTI2Mzk5Nzg5OTksIC0wLjIzMzEzMjcxODgwODY4LAotICAgICAgICAtMC4wNTI0NjAxOTAyNDQ2MywgLTAuMDI1MDU5NjE3MjQwNTMsIDAuMDI0NDIzNTczMTYwOTksCi0gICAgICAwLjAxODE4ODAxMTExNTAzfSwKLSAgezEuLCAtMC4yNTA0OTg3MTk1NjAyMCwgLTAuNDMxOTM5NDIzMTExMTQsIC0wLjAzNDI0NjgxMDE3Njc1LAotICAgICAgICAtMC4wNDY3ODMyODc4NDI0MiwgMC4yNjQwODMwMDIwMDk1NSwgMC4xNTExMzEzMDUzMzIxNiwKLSAgICAgICAgLTAuMTc1NTY0OTMzNjY0NDksIC0wLjE4ODIzMDA5MjYyMTE1LCAwLjA1NDc3NzIwNDI4Njc0LAotICAgICAgMC4wNDcwNDQwOTY4ODEyMH0KLX07Ci0KLXN0YXRpYyBjb25zdCBnZmxvYXQgQll1bGVbOV1bMTFdID0gewotICB7MC4wMzg1NzU5OTQzNTIwMCwgLTAuMDIxNjAzNjcxODQxODUsIC0wLjAwMTIzMzk1MzE2ODUxLCAtMC4wMDAwOTI5MTY3Nzk1OSwKLSAgICAgICAgLTAuMDE2NTUyNjAzNDE2MTksIDAuMDIxNjE1MjY4NDMyNzQsIC0wLjAyMDc0MDQ1MjE1Mjg1LAotICAgICAgMC4wMDU5NDI5ODA2NTEyNSwgMC4wMDMwNjQyODAyMzE5MSwgMC4wMDAxMjAyNTMyMjAyNywgMC4wMDI4ODQ2MzY4MzkxNn0sCi0gIHswLjA1NDE4NjU2NDA2NDMwLCAtMC4wMjkxMTAwNzgwODk0OCwgLTAuMDA4NDg3MDkzNzk4NTEsIC0wLjAwODUxMTY1NjQ1NDY5LAotICAgICAgICAtMC4wMDgzNDk5MDkwNDkzNiwgMC4wMjI0NTI5MzI1MzMzOSwgLTAuMDI1OTYzMzg1MTI5MTUsCi0gICAgICAgIDAuMDE2MjQ4NjQ5NjI5NzUsIC0wLjAwMjQwODc5MDUxNTg0LCAwLjAwNjc0NjEzNjgyMjQ3LAotICAgICAgLTAuMDAxODc3NjM3NzczNjJ9LAotICB7MC4xNTQ1NzI5OTY4MTkyNCwgLTAuMDkzMzEwNDkwNTYzMTUsIC0wLjA2MjQ3ODgwMTUzNjUzLCAwLjAyMTYzNTQxODg4Nzk4LAotICAgICAgICAtMC4wNTU4ODM5MzMyOTg1NiwgMC4wNDc4MTQ3NjY3NDkyMSwgMC4wMDIyMjMxMjU5Nzc0MywgMC4wMzE3NDA5MjU0MDA0OSwKLSAgICAgIC0wLjAxMzkwNTg5NDIxODk4LCAwLjAwNjUxNDIwNjY3ODMxLCAtMC4wMDg4MTM2MjczMzgzOX0sCi0gIHswLjMwMjk2OTA3MzE5MzI3LCAtMC4yMjYxMzk4ODY4MjEyMywgLTAuMDg1ODczMjM3MzA3NzIsIDAuMDMyODI5MzAxNzI2NjQsCi0gICAgICAgIC0wLjAwOTE1NzAyOTMzNDM0LCAtMC4wMjM2NDE0MTIwMjUyMiwgLTAuMDA1ODQ0NTYwMzk5MTMsCi0gICAgICAgIDAuMDYyNzYxMDEzMjE3NDksIC0wLjAwMDAwODI4MDg2NzQ4LCAwLjAwMjA1ODYxODg1NTY0LAotICAgICAgLTAuMDI5NTAxMzQ5ODMyODd9LAotICB7MC4zMzY0MjMwNDg1NjEzMiwgLTAuMjU1NzIyNDE0MjU1NzAsIC0wLjExODI4NTcwMTc3NTU1LCAwLjExOTIxMTQ4Njc1MjAzLAotICAgICAgICAtMC4wNzgzNDQ4OTYwOTQ3OSwgLTAuMDA0Njk5Nzc5MTQzODAsIC0wLjAwNTg5NTAwMjI0NDQwLAotICAgICAgICAwLjA1NzI0MjI4MTQwMzUxLCAwLjAwODMyMDQzOTgwNzczLCAtMC4wMTYzNTM4MTM4NDU0MCwKLSAgICAgIC0wLjAxNzYwMTc2NTY4MTUwfSwKLSAgezAuNDQ5MTUyNTY2MDg0NTAsIC0wLjE0MzUxNzU3NDY0NTQ3LCAtMC4yMjc4NDM5NDQyOTc0OSwgLTAuMDE0MTkxNDAxMDA1NTEsCi0gICAgICAgIDAuMDQwNzgyNjI3OTcxMzksIC0wLjEyMzk4MTYzMzgxNzQ4LCAwLjA0MDk3NTY1MTM1NjQ4LCAwLjEwNDc4NTAzNjAwMjUxLAotICAgICAgLTAuMDE4NjM4ODc4MTA5MjcsIC0wLjAzMTkzNDI4NDM4OTE1LCAwLjAwNTQxOTA3NzQ4NzA3fSwKLSAgezAuNTY2MTk0NzA3NTc2NDEsIC0wLjc1NDY0NDU2OTM5MzAyLCAwLjE2MjQyMTM3NzQyMjMwLCAwLjE2NzQ0MjQzNDkzNjcyLAotICAgICAgICAtMC4xODkwMTYwNDE5OTYwOSwgMC4zMDkzMTc4Mjg0MTgzMCwgLTAuMjc1NjI5NjE5ODYyMjQsCi0gICAgICAgIDAuMDA2NDczMTA2NzcyNDYsIDAuMDg2NDc1MDM3ODAzNTEsIC0wLjAzNzg4OTg0NTU0ODQwLAotICAgICAgLTAuMDA1ODgyMTU0NDM0MjF9LAotICB7MC41ODEwMDQ5NDk2MDU1MywgLTAuNTMxNzQ5MDkwNTg1NzgsIC0wLjE0Mjg5Nzk5MDM0MjUzLCAwLjE3NTIwNzA0ODM1NTIyLAotICAgICAgICAwLjAyMzc3OTQ1MjE3NjE1LCAwLjE1NTU4NDQ5MTM1NTczLCAtMC4yNTM0NDc5MDA1OTM1MywgMC4wMTYyODQ2MjQwNjMzMywKLSAgICAgIDAuMDY5MjA0Njc3NjM5NTksIC0wLjAzNzIxNjExMzk1ODAxLCAtMC4wMDc0OTYxODc5NzE3Mn0sCi0gIHswLjUzNjQ4Nzg5MjU1MTA1LCAtMC40MjE2MzAzNDM1MDY5NiwgLTAuMDAyNzU5NTM2MTE5MjksIDAuMDQyNjc4NDIyMTk0MTUsCi0gICAgICAgIC0wLjEwMjE0ODY0MTc5Njc2LCAwLjE0NTkwNzcyMjg5Mzg4LCAtMC4wMjQ1OTg2NDg1OTM0NSwKLSAgICAgICAgLTAuMTEyMDIzMTUxOTUzODgsIC0wLjA0MDYwMDM0MTI3MDAwLCAwLjA0Nzg4NjY1NTQ4MTgwLAotICAgICAgLTAuMDIyMTc5MzY4MDExMzR9Ci19OwotCi1zdGF0aWMgY29uc3QgZ2Zsb2F0IEFCdXR0ZXJbOV1bM10gPSB7Ci0gIHsxLiwgLTEuOTcyMjMzNzI5MTk1MjcsIDAuOTcyNjEzOTY5MzEzMDZ9LAotICB7MS4sIC0xLjk2OTc3ODU1NTgyNjE4LCAwLjk3MDIyODQ3NTY2MzUwfSwKLSAgezEuLCAtMS45NTgzNTM4MDk3NTM5OCwgMC45NTkyMDM0OTk2NTQ1OX0sCi0gIHsxLiwgLTEuOTUwMDI3NTkxNDk4NzgsIDAuOTUxMjQ2MTM2Njk4MzV9LAotICB7MS4sIC0xLjk0NTYxMDIzNTY2NTI3LCAwLjk0NzA1MDcwNDI2MTE4fSwKLSAgezEuLCAtMS45Mjc4MzI4Njk3NzAzNiwgMC45MzAzNDc3NTIzNDI2OH0sCi0gIHsxLiwgLTEuOTE4NTg5NTMwMzM3ODQsIDAuOTIxNzc2MTg3NjgzODF9LAotICB7MS4sIC0xLjkxNTQyMTA4MDc0NzgwLCAwLjkxODg1NTU4MzIzNjI1fSwKLSAgezEuLCAtMS44ODkwMzMwNzkzOTQ1MiwgMC44OTQ4NzQzNDQ2MTY2NH0KLX07Ci0KLXN0YXRpYyBjb25zdCBnZmxvYXQgQkJ1dHRlcls5XVszXSA9IHsKLSAgezAuOTg2MjExOTI0NjI3MDgsIC0xLjk3MjQyMzg0OTI1NDE2LCAwLjk4NjIxMTkyNDYyNzA4fSwKLSAgezAuOTg1MDAxNzU3ODcyNDIsIC0xLjk3MDAwMzUxNTc0NDg0LCAwLjk4NTAwMTc1Nzg3MjQyfSwKLSAgezAuOTc5Mzg5MzI3MzUyMTQsIC0xLjk1ODc3ODY1NDcwNDI4LCAwLjk3OTM4OTMyNzM1MjE0fSwKLSAgezAuOTc1MzE4NDMyMDQ5MjgsIC0xLjk1MDYzNjg2NDA5ODU3LCAwLjk3NTMxODQzMjA0OTI4fSwKLSAgezAuOTczMTY1MjM0OTgxNjEsIC0xLjk0NjMzMDQ2OTk2MzIzLCAwLjk3MzE2NTIzNDk4MTYxfSwKLSAgezAuOTY0NTQ1MTU1NTI4MjYsIC0xLjkyOTA5MDMxMTA1NjUyLCAwLjk2NDU0NTE1NTUyODI2fSwKLSAgezAuOTYwMDkxNDI5NTA1NDEsIC0xLjkyMDE4Mjg1OTAxMDgyLCAwLjk2MDA5MTQyOTUwNTQxfSwKLSAgezAuOTU4NTY5MTY1OTk2MDEsIC0xLjkxNzEzODMzMTk5MjAzLCAwLjk1ODU2OTE2NTk5NjAxfSwKLSAgezAuOTQ1OTc2ODU2MDAyNzksIC0xLjg5MTk1MzcxMjAwNTU4LCAwLjk0NTk3Njg1NjAwMjc5fQotfTsKLQotI2lmZGVmIF9NU0NfVkVSCi0jcHJhZ21hIHdhcm5pbmcgKCBkZWZhdWx0IDogNDMwNSApCi0jZW5kaWYKLQotLyogRmlsdGVyIGZ1bmN0aW9ucy4gIFRoZXNlIGFjY2VzcyBlbGVtZW50cyB3aXRoIG5lZ2F0aXZlIGluZGljZXMgb2YKLSAqIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGFycmF5cyAodXAgdG8gdGhlIGZpbHRlcidzIG9yZGVyKS4gKi8KLQotLyogRm9yIG11Y2ggYmV0dGVyIHBlcmZvcm1hbmNlLCB0aGUgZnVuY3Rpb24gYmVsb3cgaGFzIGJlZW4KLSAqIGltcGxlbWVudGVkIGJ5IHVucm9sbGluZyB0aGUgaW5uZXIgbG9vcCBmb3Igb3VyIHR3byB1c2UgY2FzZXMuICovCi0KLS8qCi0gKiBzdGF0aWMgaW5saW5lIHZvaWQKLSAqIGFwcGx5X2ZpbHRlciAoY29uc3QgZ2Zsb2F0ICogaW5wdXQsIGdmbG9hdCAqIG91dHB1dCwgZ3VpbnQgbl9zYW1wbGVzLAotICogICAgIGNvbnN0IGdmbG9hdCAqIGEsIGNvbnN0IGdmbG9hdCAqIGIsIGd1aW50IG9yZGVyKQotICogewotICogICBnZmxvYXQgeTsKLSAqICAgZ2ludCBpLCBrOwotICogCi0gKiAgIGZvciAoaSA9IDA7IGkgPCBuX3NhbXBsZXM7IGkrKykgewotICogICAgIHkgPSBpbnB1dFtpXSAqIGJbMF07Ci0gKiAgICAgZm9yIChrID0gMTsgayA8PSBvcmRlcjsgaysrKQotICogICAgICAgeSArPSBpbnB1dFtpIC0ga10gKiBiW2tdIC0gb3V0cHV0W2kgLSBrXSAqIGFba107Ci0gKiAgICAgb3V0cHV0W2ldID0geTsKLSAqICAgfQotICogfQotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAoteXVsZV9maWx0ZXIgKGNvbnN0IGdmbG9hdCAqIGlucHV0LCBnZmxvYXQgKiBvdXRwdXQsCi0gICAgY29uc3QgZ2Zsb2F0ICogYSwgY29uc3QgZ2Zsb2F0ICogYikKLXsKLSAgLyogMWUtMTAgaXMgYWRkZWQgYmVsb3cgdG8gYXZvaWQgcnVubmluZyBpbnRvIGRlbm9ybWFscyB3aGVuIG9wZXJhdGluZyBvbgotICAgKiBuZWFyIHNpbGVuY2UuICovCi0KLSAgb3V0cHV0WzBdID0gMWUtMTAgKyBpbnB1dFswXSAqIGJbMF0KLSAgICAgICsgaW5wdXRbLTFdICogYlsxXSAtIG91dHB1dFstMV0gKiBhWzFdCi0gICAgICArIGlucHV0Wy0yXSAqIGJbMl0gLSBvdXRwdXRbLTJdICogYVsyXQotICAgICAgKyBpbnB1dFstM10gKiBiWzNdIC0gb3V0cHV0Wy0zXSAqIGFbM10KLSAgICAgICsgaW5wdXRbLTRdICogYls0XSAtIG91dHB1dFstNF0gKiBhWzRdCi0gICAgICArIGlucHV0Wy01XSAqIGJbNV0gLSBvdXRwdXRbLTVdICogYVs1XQotICAgICAgKyBpbnB1dFstNl0gKiBiWzZdIC0gb3V0cHV0Wy02XSAqIGFbNl0KLSAgICAgICsgaW5wdXRbLTddICogYls3XSAtIG91dHB1dFstN10gKiBhWzddCi0gICAgICArIGlucHV0Wy04XSAqIGJbOF0gLSBvdXRwdXRbLThdICogYVs4XQotICAgICAgKyBpbnB1dFstOV0gKiBiWzldIC0gb3V0cHV0Wy05XSAqIGFbOV0KLSAgICAgICsgaW5wdXRbLTEwXSAqIGJbMTBdIC0gb3V0cHV0Wy0xMF0gKiBhWzEwXTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1idXR0ZXJfZmlsdGVyIChjb25zdCBnZmxvYXQgKiBpbnB1dCwgZ2Zsb2F0ICogb3V0cHV0LAotICAgIGNvbnN0IGdmbG9hdCAqIGEsIGNvbnN0IGdmbG9hdCAqIGIpCi17Ci0gIG91dHB1dFswXSA9IGlucHV0WzBdICogYlswXQotICAgICAgKyBpbnB1dFstMV0gKiBiWzFdIC0gb3V0cHV0Wy0xXSAqIGFbMV0KLSAgICAgICsgaW5wdXRbLTJdICogYlsyXSAtIG91dHB1dFstMl0gKiBhWzJdOwotfQotCi0vKiBCZWNhdXNlIGJ1dHRlcl9maWx0ZXIgYW5kIHl1bGVfZmlsdGVyIGFyZSBpbmxpbmVkLCB0aGlzIGZ1bmN0aW9uIGlzCi0gKiBhIGJpdCBibG93bi11cCAoY29kZS1zaXplIHdpc2UpLCBidXQgbm90IGlubGluaW5nIGdpdmVzIGEgY2EuIDQwJQotICogcGVyZm9ybWFuY2UgcGVuYWx0eS4gKi8KLQotc3RhdGljIGlubGluZSB2b2lkCi1hcHBseV9maWx0ZXJzIChjb25zdCBSZ0FuYWx5c2lzQ3R4ICogY3R4LCBjb25zdCBnZmxvYXQgKiBpbnB1dF9sLAotICAgIGNvbnN0IGdmbG9hdCAqIGlucHV0X3IsIGd1aW50IG5fc2FtcGxlcykKLXsKLSAgY29uc3QgZ2Zsb2F0ICpheXVsZSA9IEFZdWxlW2N0eC0+c2FtcGxlX3JhdGVfaW5kZXhdOwotICBjb25zdCBnZmxvYXQgKmJ5dWxlID0gQll1bGVbY3R4LT5zYW1wbGVfcmF0ZV9pbmRleF07Ci0gIGNvbnN0IGdmbG9hdCAqYWJ1dHRlciA9IEFCdXR0ZXJbY3R4LT5zYW1wbGVfcmF0ZV9pbmRleF07Ci0gIGNvbnN0IGdmbG9hdCAqYmJ1dHRlciA9IEJCdXR0ZXJbY3R4LT5zYW1wbGVfcmF0ZV9pbmRleF07Ci0gIGdpbnQgcG9zID0gY3R4LT53aW5kb3dfbl9zYW1wbGVzX2RvbmU7Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbl9zYW1wbGVzOyBpKyssIHBvcysrKSB7Ci0gICAgeXVsZV9maWx0ZXIgKGlucHV0X2wgKyBpLCBjdHgtPnN0ZXBfbCArIHBvcywgYXl1bGUsIGJ5dWxlKTsKLSAgICBidXR0ZXJfZmlsdGVyIChjdHgtPnN0ZXBfbCArIHBvcywgY3R4LT5vdXRfbCArIHBvcywgYWJ1dHRlciwgYmJ1dHRlcik7Ci0KLSAgICB5dWxlX2ZpbHRlciAoaW5wdXRfciArIGksIGN0eC0+c3RlcF9yICsgcG9zLCBheXVsZSwgYnl1bGUpOwotICAgIGJ1dHRlcl9maWx0ZXIgKGN0eC0+c3RlcF9yICsgcG9zLCBjdHgtPm91dF9yICsgcG9zLCBhYnV0dGVyLCBiYnV0dGVyKTsKLSAgfQotfQotCi0vKiBDbGVhciBmaWx0ZXIgYnVmZmVyIHN0YXRlIGFuZCBjdXJyZW50IFJNUyB3aW5kb3cuICovCi0KLXN0YXRpYyB2b2lkCi1yZXNldF9maWx0ZXJzIChSZ0FuYWx5c2lzQ3R4ICogY3R4KQotewotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE1BWF9PUkRFUjsgaSsrKSB7Ci0KLSAgICBjdHgtPmlucHJlYnVmX2xbaV0gPSAwLjsKLSAgICBjdHgtPnN0ZXBidWZfbFtpXSA9IDAuOwotICAgIGN0eC0+b3V0YnVmX2xbaV0gPSAwLjsKLQotICAgIGN0eC0+aW5wcmVidWZfcltpXSA9IDAuOwotICAgIGN0eC0+c3RlcGJ1Zl9yW2ldID0gMC47Ci0gICAgY3R4LT5vdXRidWZfcltpXSA9IDAuOwotICB9Ci0KLSAgY3R4LT53aW5kb3dfc3F1YXJlX3N1bSA9IDAuOwotICBjdHgtPndpbmRvd19uX3NhbXBsZXNfZG9uZSA9IDA7Ci19Ci0KLS8qIEFjY3VtdWxhdG9yIGZ1bmN0aW9ucy4gKi8KLQotLyogQWRkIHR3byBhY2N1bXVsYXRvcnMgaW4tcGxhY2UuICBUaGUgc3VtIGlzIGRlZmluZWQgYXMgdGhlIHJlc3VsdCBvZgotICogdGhlIHZlY3RvciBzdW0gb2YgdGhlIGhpc3RvZ3JhbSBhcnJheSBhbmQgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhlCi0gKiBwZWFrIGZpZWxkLiAgVGh1cyAiYWRkaW5nIiB0aGUgYWNjdW11bGF0b3JzIGZvciBhbGwgdHJhY2tzIHlpZWxkcwotICogdGhlIGNvcnJlY3QgcmVzdWx0IGZvciBvYnRhaW5pbmcgdGhlIGFsYnVtIGdhaW4gYW5kIHBlYWsuICovCi0KLXN0YXRpYyB2b2lkCi1hY2N1bXVsYXRvcl9hZGQgKFJnQW5hbHlzaXNBY2MgKiBhY2MsIGNvbnN0IFJnQW5hbHlzaXNBY2MgKiBhY2Nfb3RoZXIpCi17Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChhY2MtPmhpc3RvZ3JhbSk7IGkrKykKLSAgICBhY2MtPmhpc3RvZ3JhbVtpXSArPSBhY2Nfb3RoZXItPmhpc3RvZ3JhbVtpXTsKLQotICBhY2MtPnBlYWsgPSBNQVggKGFjYy0+cGVhaywgYWNjX290aGVyLT5wZWFrKTsKLX0KLQotLyogUmVzZXQgYW4gYWNjdW11bGF0b3IgdG8gemVyby4gKi8KLQotc3RhdGljIHZvaWQKLWFjY3VtdWxhdG9yX2NsZWFyIChSZ0FuYWx5c2lzQWNjICogYWNjKQotewotICBtZW1zZXQgKGFjYy0+aGlzdG9ncmFtLCAwLCBzaXplb2YgKGFjYy0+aGlzdG9ncmFtKSk7Ci0gIGFjYy0+cGVhayA9IDAuOwotfQotCi0vKiBPYnRhaW4gZmluYWwgYW5hbHlzaXMgcmVzdWx0IGZyb20gYW4gYWNjdW11bGF0b3IuICBSZXR1cm5zIFRSVUUgb24KLSAqIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9yIChpZiBhY2N1bXVsYXRvciBpcyBzdGlsbCB6ZXJvKS4gKi8KLQotc3RhdGljIGdib29sZWFuCi1hY2N1bXVsYXRvcl9yZXN1bHQgKGNvbnN0IFJnQW5hbHlzaXNBY2MgKiBhY2MsIGdkb3VibGUgKiByZXN1bHRfZ2FpbiwKLSAgICBnZG91YmxlICogcmVzdWx0X3BlYWspCi17Ci0gIGd1aW50MzIgc3VtID0gMDsKLSAgZ3VpbnQzMiB1cHBlcjsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChhY2MtPmhpc3RvZ3JhbSk7IGkrKykKLSAgICBzdW0gKz0gYWNjLT5oaXN0b2dyYW1baV07Ci0KLSAgaWYgKHN1bSA9PSAwKQotICAgIC8qIEFsbCBlbnRyaWVzIGFyZSAwOiBXZSBnb3QgbGVzcyB0aGFuIDUwbXMgb2YgZGF0YS4gKi8KLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgdXBwZXIgPSAoZ3VpbnQzMikgY2VpbCAoc3VtICogKDEuIC0gKGdkb3VibGUpIChSTVNfUEVSQ0VOVElMRSAvIDEwMC4pKSk7Ci0KLSAgZm9yIChpID0gR19OX0VMRU1FTlRTIChhY2MtPmhpc3RvZ3JhbSk7IGktLTspIHsKLSAgICBpZiAodXBwZXIgPD0gYWNjLT5oaXN0b2dyYW1baV0pCi0gICAgICBicmVhazsKLSAgICB1cHBlciAtPSBhY2MtPmhpc3RvZ3JhbVtpXTsKLSAgfQotCi0gIGlmIChyZXN1bHRfcGVhayAhPSBOVUxMKQotICAgICpyZXN1bHRfcGVhayA9IGFjYy0+cGVhazsKLSAgaWYgKHJlc3VsdF9nYWluICE9IE5VTEwpCi0gICAgKnJlc3VsdF9nYWluID0gUElOS19SRUYgLSAoZ2RvdWJsZSkgaSAvIFNURVBTX1BFUl9EQjsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogRnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBjb250ZXh0cywgZm9yIGV4dGVybmFsIHVzYWdlLiAqLwotCi0vKiBDcmVhdGUgYSBuZXcgY29udGV4dC4gIEJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYSBzYW1wbGUgcmF0ZSBtdXN0IGJlCi0gKiBjb25maWd1cmVkIHVzaW5nIHJnX2FuYWx5c2lzX3NldF9zYW1wbGVfcmF0ZS4gKi8KLQotUmdBbmFseXNpc0N0eCAqCi1yZ19hbmFseXNpc19uZXcgKHZvaWQpCi17Ci0gIFJnQW5hbHlzaXNDdHggKmN0eDsKLQotICBjdHggPSBnX25ldyAoUmdBbmFseXNpc0N0eCwgMSk7Ci0KLSAgY3R4LT5pbnByZV9sID0gY3R4LT5pbnByZWJ1Zl9sICsgTUFYX09SREVSOwotICBjdHgtPnN0ZXBfbCA9IGN0eC0+c3RlcGJ1Zl9sICsgTUFYX09SREVSOwotICBjdHgtPm91dF9sID0gY3R4LT5vdXRidWZfbCArIE1BWF9PUkRFUjsKLQotICBjdHgtPmlucHJlX3IgPSBjdHgtPmlucHJlYnVmX3IgKyBNQVhfT1JERVI7Ci0gIGN0eC0+c3RlcF9yID0gY3R4LT5zdGVwYnVmX3IgKyBNQVhfT1JERVI7Ci0gIGN0eC0+b3V0X3IgPSBjdHgtPm91dGJ1Zl9yICsgTUFYX09SREVSOwotCi0gIGN0eC0+c2FtcGxlX3JhdGUgPSAwOwotCi0gIGFjY3VtdWxhdG9yX2NsZWFyICgmY3R4LT50cmFjayk7Ci0gIGFjY3VtdWxhdG9yX2NsZWFyICgmY3R4LT5hbGJ1bSk7Ci0KLSAgcmV0dXJuIGN0eDsKLX0KLQotc3RhdGljIHZvaWQKLXJlc2V0X3NpbGVuY2VfZGV0ZWN0aW9uIChSZ0FuYWx5c2lzQ3R4ICogY3R4KQotewotICBjdHgtPmJ1ZmZlcl90aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBjdHgtPmJ1ZmZlcl9uX3NhbXBsZXNfZG9uZSA9IDA7Ci19Ci0KLS8qIEFkYXB0IHRvIGdpdmVuIHNhbXBsZSByYXRlLiAgRG9lcyBub3RoaW5nIGlmIGFscmVhZHkgdGhlIGN1cnJlbnQKLSAqIHJhdGUgKHJldHVybnMgVFJVRSB0aGVuKS4gIFJldHVybnMgRkFMU0Ugb25seSBpZiBnaXZlbiBzYW1wbGUgcmF0ZQotICogaXMgbm90IHN1cHBvcnRlZC4gIElmIHRoZSBjb25maWd1cmVkIHJhdGUgY2hhbmdlcywgdGhlIGxhc3QKLSAqIHVucHJvY2Vzc2VkIGluY29tcGxldGUgNTBtcyBjaHVuayBvZiBkYXRhIGlzIGRyb3BwZWQgYmVjYXVzZSB0aGUKLSAqIGZpbHRlcnMgYXJlIHJlc2V0LiAqLwotCi1nYm9vbGVhbgotcmdfYW5hbHlzaXNfc2V0X3NhbXBsZV9yYXRlIChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBnaW50IHNhbXBsZV9yYXRlKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY3R4ICE9IE5VTEwsIEZBTFNFKTsKLQotICBpZiAoY3R4LT5zYW1wbGVfcmF0ZSA9PSBzYW1wbGVfcmF0ZSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBzd2l0Y2ggKHNhbXBsZV9yYXRlKSB7Ci0gICAgY2FzZSA0ODAwMDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0NDEwMDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzMjAwMDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyNDAwMDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSAzOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyMjA1MDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSA0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNjAwMDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSA1OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxMjAwMDoKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSA2OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxMTAyNToKLSAgICAgIGN0eC0+c2FtcGxlX3JhdGVfaW5kZXggPSA3OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4MDAwOgotICAgICAgY3R4LT5zYW1wbGVfcmF0ZV9pbmRleCA9IDg7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgY3R4LT5zYW1wbGVfcmF0ZSA9IHNhbXBsZV9yYXRlOwotICAvKiBUaGUgKyA5OTkgaGFzIHRoZSBlZmZlY3Qgb2YgY2VpbCgpaW5nOiAqLwotICBjdHgtPndpbmRvd19uX3NhbXBsZXMgPSAoZ3VpbnQpICgoc2FtcGxlX3JhdGUgKiBSTVNfV0lORE9XX01TRUNTICsgOTk5KQotICAgICAgLyAxMDAwKTsKLQotICByZXNldF9maWx0ZXJzIChjdHgpOwotICByZXNldF9zaWxlbmNlX2RldGVjdGlvbiAoY3R4KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZAotcmdfYW5hbHlzaXNfaW5pdF9zaWxlbmNlX2RldGVjdGlvbiAoUmdBbmFseXNpc0N0eCAqIGN0eCwKLSAgICB2b2lkICgqcG9zdF9tZXNzYWdlKSAoZ3BvaW50ZXIgYW5hbHlzaXMsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCi0gICAgICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgZ2RvdWJsZSByZ2xldmVsKSwgZ3BvaW50ZXIgYW5hbHlzaXMpCi17Ci0gIGN0eC0+cG9zdF9tZXNzYWdlID0gcG9zdF9tZXNzYWdlOwotICBjdHgtPmFuYWx5c2lzID0gYW5hbHlzaXM7Ci0gIHJlc2V0X3NpbGVuY2VfZGV0ZWN0aW9uIChjdHgpOwotfQotCi12b2lkCi1yZ19hbmFseXNpc19zdGFydF9idWZmZXIgKFJnQW5hbHlzaXNDdHggKiBjdHgsIEdzdENsb2NrVGltZSBidWZmZXJfdGltZXN0YW1wKQotewotICBjdHgtPmJ1ZmZlcl90aW1lc3RhbXAgPSBidWZmZXJfdGltZXN0YW1wOwotICBjdHgtPmJ1ZmZlcl9uX3NhbXBsZXNfZG9uZSA9IDA7Ci19Ci0KLXZvaWQKLXJnX2FuYWx5c2lzX2Rlc3Ryb3kgKFJnQW5hbHlzaXNDdHggKiBjdHgpCi17Ci0gIGdfZnJlZSAoY3R4KTsKLX0KLQotLyogRW50cnkgcG9pbnRzIGZvciBhbmFseXppbmcgc2FtcGxlIGRhdGEgaW4gY29tbW9uIHJhdyBkYXRhIGZvcm1hdHMuCi0gKiBUaGUgc3RlcmVvIGZvcm1hdCBmdW5jdGlvbnMgZXhwZWN0IGludGVybGVhdmVkIGZyYW1lcy4gIEl0IGlzCi0gKiBwb3NzaWJsZSB0byBwYXNzIGRhdGEgaW4gZGlmZmVyZW50IGZvcm1hdHMgZm9yIHRoZSBzYW1lIGNvbnRleHQsCi0gKiB0aGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zLiAgQWxsIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZTsKLSAqIHRoZSBkZXB0aCBhcmd1bWVudCBmb3IgdGhlIGZsb2F0IGZ1bmN0aW9ucyBpcyBub3QgdmFyaWFibGUgYW5kIG11c3QKLSAqIGJlIGdpdmVuIHRoZSB2YWx1ZSAzMi4gKi8KLQotdm9pZAotcmdfYW5hbHlzaXNfYW5hbHl6ZV9tb25vX2Zsb2F0IChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBnY29uc3Rwb2ludGVyIGRhdGEsCi0gICAgZ3NpemUgc2l6ZSwgZ3VpbnQgZGVwdGgpCi17Ci0gIGdmbG9hdCBjb252X3NhbXBsZXNbNTEyXTsKLSAgY29uc3QgZ2Zsb2F0ICpzYW1wbGVzID0gKGdmbG9hdCAqKSBkYXRhOwotICBndWludCBuX3NhbXBsZXMgPSBzaXplIC8gc2l6ZW9mIChnZmxvYXQpOwotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVwdGggPT0gMzIpOwotICBnX3JldHVybl9pZl9mYWlsIChzaXplICUgc2l6ZW9mIChnZmxvYXQpID09IDApOwotCi0gIHdoaWxlIChuX3NhbXBsZXMpIHsKLSAgICBnaW50IG4gPSBNSU4gKG5fc2FtcGxlcywgR19OX0VMRU1FTlRTIChjb252X3NhbXBsZXMpKTsKLQotICAgIG5fc2FtcGxlcyAtPSBuOwotICAgIG1lbWNweSAoY29udl9zYW1wbGVzLCBzYW1wbGVzLCBuICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBjdHgtPnRyYWNrLnBlYWsgPSBNQVggKGN0eC0+dHJhY2sucGVhaywgZmFicyAoY29udl9zYW1wbGVzW2ldKSk7Ci0gICAgICBjb252X3NhbXBsZXNbaV0gKj0gMzI3NjguOwotICAgIH0KLSAgICBzYW1wbGVzICs9IG47Ci0gICAgcmdfYW5hbHlzaXNfYW5hbHl6ZSAoY3R4LCBjb252X3NhbXBsZXMsIE5VTEwsIG4pOwotICB9Ci19Ci0KLXZvaWQKLXJnX2FuYWx5c2lzX2FuYWx5emVfc3RlcmVvX2Zsb2F0IChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBnY29uc3Rwb2ludGVyIGRhdGEsCi0gICAgZ3NpemUgc2l6ZSwgZ3VpbnQgZGVwdGgpCi17Ci0gIGdmbG9hdCBjb252X3NhbXBsZXNfbFsyNTZdOwotICBnZmxvYXQgY29udl9zYW1wbGVzX3JbMjU2XTsKLSAgY29uc3QgZ2Zsb2F0ICpzYW1wbGVzID0gKGdmbG9hdCAqKSBkYXRhOwotICBndWludCBuX2ZyYW1lcyA9IHNpemUgLyAoc2l6ZW9mIChnZmxvYXQpICogMik7Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl9pZl9mYWlsIChkZXB0aCA9PSAzMik7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNpemUgJSAoc2l6ZW9mIChnZmxvYXQpICogMikgPT0gMCk7Ci0KLSAgd2hpbGUgKG5fZnJhbWVzKSB7Ci0gICAgZ2ludCBuID0gTUlOIChuX2ZyYW1lcywgR19OX0VMRU1FTlRTIChjb252X3NhbXBsZXNfbCkpOwotCi0gICAgbl9mcmFtZXMgLT0gbjsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBnZmxvYXQgb2xkX3NhbXBsZTsKLQotICAgICAgb2xkX3NhbXBsZSA9IHNhbXBsZXNbMiAqIGldOwotICAgICAgY3R4LT50cmFjay5wZWFrID0gTUFYIChjdHgtPnRyYWNrLnBlYWssIGZhYnMgKG9sZF9zYW1wbGUpKTsKLSAgICAgIGNvbnZfc2FtcGxlc19sW2ldID0gb2xkX3NhbXBsZSAqIDMyNzY4LjsKLQotICAgICAgb2xkX3NhbXBsZSA9IHNhbXBsZXNbMiAqIGkgKyAxXTsKLSAgICAgIGN0eC0+dHJhY2sucGVhayA9IE1BWCAoY3R4LT50cmFjay5wZWFrLCBmYWJzIChvbGRfc2FtcGxlKSk7Ci0gICAgICBjb252X3NhbXBsZXNfcltpXSA9IG9sZF9zYW1wbGUgKiAzMjc2OC47Ci0gICAgfQotICAgIHNhbXBsZXMgKz0gMiAqIG47Ci0gICAgcmdfYW5hbHlzaXNfYW5hbHl6ZSAoY3R4LCBjb252X3NhbXBsZXNfbCwgY29udl9zYW1wbGVzX3IsIG4pOwotICB9Ci19Ci0KLXZvaWQKLXJnX2FuYWx5c2lzX2FuYWx5emVfbW9ub19pbnQxNiAoUmdBbmFseXNpc0N0eCAqIGN0eCwgZ2NvbnN0cG9pbnRlciBkYXRhLAotICAgIGdzaXplIHNpemUsIGd1aW50IGRlcHRoKQotewotICBnZmxvYXQgY29udl9zYW1wbGVzWzUxMl07Ci0gIGdpbnQzMiBwZWFrX3NhbXBsZSA9IDA7Ci0gIGNvbnN0IGdpbnQxNiAqc2FtcGxlcyA9IChnaW50MTYgKikgZGF0YTsKLSAgZ3VpbnQgbl9zYW1wbGVzID0gc2l6ZSAvIHNpemVvZiAoZ2ludDE2KTsKLSAgZ2ludCBzaGlmdCA9IHNpemVvZiAoZ2ludDE2KSAqIDggLSBkZXB0aDsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGRlcHRoIDw9IChzaXplb2YgKGdpbnQxNikgKiA4KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHNpemUgJSBzaXplb2YgKGdpbnQxNikgPT0gMCk7Ci0KLSAgd2hpbGUgKG5fc2FtcGxlcykgewotICAgIGdpbnQgbiA9IE1JTiAobl9zYW1wbGVzLCBHX05fRUxFTUVOVFMgKGNvbnZfc2FtcGxlcykpOwotCi0gICAgbl9zYW1wbGVzIC09IG47Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgZ2ludDE2IG9sZF9zYW1wbGUgPSBzYW1wbGVzW2ldIDw8IHNoaWZ0OwotCi0gICAgICBwZWFrX3NhbXBsZSA9IE1BWCAocGVha19zYW1wbGUsIEFCUyAoKGdpbnQzMikgb2xkX3NhbXBsZSkpOwotICAgICAgY29udl9zYW1wbGVzW2ldID0gKGdmbG9hdCkgb2xkX3NhbXBsZTsKLSAgICB9Ci0gICAgc2FtcGxlcyArPSBuOwotICAgIHJnX2FuYWx5c2lzX2FuYWx5emUgKGN0eCwgY29udl9zYW1wbGVzLCBOVUxMLCBuKTsKLSAgfQotICBjdHgtPnRyYWNrLnBlYWsgPSBNQVggKGN0eC0+dHJhY2sucGVhaywKLSAgICAgIChnZG91YmxlKSBwZWFrX3NhbXBsZSAvICgoZ2RvdWJsZSkgKDF1IDw8IDE1KSkpOwotfQotCi12b2lkCi1yZ19hbmFseXNpc19hbmFseXplX3N0ZXJlb19pbnQxNiAoUmdBbmFseXNpc0N0eCAqIGN0eCwgZ2NvbnN0cG9pbnRlciBkYXRhLAotICAgIGdzaXplIHNpemUsIGd1aW50IGRlcHRoKQotewotICBnZmxvYXQgY29udl9zYW1wbGVzX2xbMjU2XTsKLSAgZ2Zsb2F0IGNvbnZfc2FtcGxlc19yWzI1Nl07Ci0gIGdpbnQzMiBwZWFrX3NhbXBsZSA9IDA7Ci0gIGNvbnN0IGdpbnQxNiAqc2FtcGxlcyA9IChnaW50MTYgKikgZGF0YTsKLSAgZ3VpbnQgbl9mcmFtZXMgPSBzaXplIC8gKHNpemVvZiAoZ2ludDE2KSAqIDIpOwotICBnaW50IHNoaWZ0ID0gc2l6ZW9mIChnaW50MTYpICogOCAtIGRlcHRoOwotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoZGVwdGggPD0gKHNpemVvZiAoZ2ludDE2KSAqIDgpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc2l6ZSAlIChzaXplb2YgKGdpbnQxNikgKiAyKSA9PSAwKTsKLQotICB3aGlsZSAobl9mcmFtZXMpIHsKLSAgICBnaW50IG4gPSBNSU4gKG5fZnJhbWVzLCBHX05fRUxFTUVOVFMgKGNvbnZfc2FtcGxlc19sKSk7Ci0KLSAgICBuX2ZyYW1lcyAtPSBuOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGdpbnQxNiBvbGRfc2FtcGxlOwotCi0gICAgICBvbGRfc2FtcGxlID0gc2FtcGxlc1syICogaV0gPDwgc2hpZnQ7Ci0gICAgICBwZWFrX3NhbXBsZSA9IE1BWCAocGVha19zYW1wbGUsIEFCUyAoKGdpbnQzMikgb2xkX3NhbXBsZSkpOwotICAgICAgY29udl9zYW1wbGVzX2xbaV0gPSAoZ2Zsb2F0KSBvbGRfc2FtcGxlOwotCi0gICAgICBvbGRfc2FtcGxlID0gc2FtcGxlc1syICogaSArIDFdIDw8IHNoaWZ0OwotICAgICAgcGVha19zYW1wbGUgPSBNQVggKHBlYWtfc2FtcGxlLCBBQlMgKChnaW50MzIpIG9sZF9zYW1wbGUpKTsKLSAgICAgIGNvbnZfc2FtcGxlc19yW2ldID0gKGdmbG9hdCkgb2xkX3NhbXBsZTsKLSAgICB9Ci0gICAgc2FtcGxlcyArPSAyICogbjsKLSAgICByZ19hbmFseXNpc19hbmFseXplIChjdHgsIGNvbnZfc2FtcGxlc19sLCBjb252X3NhbXBsZXNfciwgbik7Ci0gIH0KLSAgY3R4LT50cmFjay5wZWFrID0gTUFYIChjdHgtPnRyYWNrLnBlYWssCi0gICAgICAoZ2RvdWJsZSkgcGVha19zYW1wbGUgLyAoKGdkb3VibGUpICgxdSA8PCAxNSkpKTsKLX0KLQotLyogQW5hbHl6ZSB0aGUgZ2l2ZW4gY2h1bmsgb2Ygc2FtcGxlcy4gIFRoZSBzYW1wbGUgZGF0YSBpcyBnaXZlbiBpbgotICogZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGJ1dCBzaG91bGQgYmUgc2NhbGVkIHN1Y2ggdGhhdCB0aGUgdmFsdWVzCi0gKiArLy0zMjc2OC4wIGNvcnJlc3BvbmQgdG8gdGhlIC0wZEJGUyByZWZlcmVuY2UgYW1wbGl0dWRlLgotICoKLSAqIHNhbXBsZXNfbDogQnVmZmVyIHdpdGggc2FtcGxlIGRhdGEgZm9yIHRoZSBsZWZ0IGNoYW5uZWwgb3Igb2YgdGhlCi0gKiBtb25vIGNoYW5uZWwuCi0gKgotICogc2FtcGxlc19yOiBCdWZmZXIgd2l0aCBzYW1wbGUgZGF0YSBmb3IgdGhlIHJpZ2h0IGNoYW5uZWwgb3IgTlVMTAotICogZm9yIG1vbm8uCi0gKgotICogbl9zYW1wbGVzOiBOdW1iZXIgb2Ygc2FtcGxlcyBwYXNzZWQgaW4gZWFjaCBidWZmZXIuCi0gKi8KLQotdm9pZAotcmdfYW5hbHlzaXNfYW5hbHl6ZSAoUmdBbmFseXNpc0N0eCAqIGN0eCwgY29uc3QgZ2Zsb2F0ICogc2FtcGxlc19sLAotICAgIGNvbnN0IGdmbG9hdCAqIHNhbXBsZXNfciwgZ3VpbnQgbl9zYW1wbGVzKQotewotICBjb25zdCBnZmxvYXQgKmlucHV0X2wsICppbnB1dF9yOwotICBndWludCBuX3NhbXBsZXNfZG9uZTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGN0eCAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoc2FtcGxlc19sICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChjdHgtPnNhbXBsZV9yYXRlICE9IDApOwotCi0gIGlmIChuX3NhbXBsZXMgPT0gMCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKHNhbXBsZXNfciA9PSBOVUxMKQotICAgIC8qIE1vbm8uICovCi0gICAgc2FtcGxlc19yID0gc2FtcGxlc19sOwotCi0gIG1lbWNweSAoY3R4LT5pbnByZV9sLCBzYW1wbGVzX2wsCi0gICAgICBNSU4gKG5fc2FtcGxlcywgTUFYX09SREVSKSAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIG1lbWNweSAoY3R4LT5pbnByZV9yLCBzYW1wbGVzX3IsCi0gICAgICBNSU4gKG5fc2FtcGxlcywgTUFYX09SREVSKSAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0KLSAgbl9zYW1wbGVzX2RvbmUgPSAwOwotICB3aGlsZSAobl9zYW1wbGVzX2RvbmUgPCBuX3NhbXBsZXMpIHsKLSAgICAvKiBMaW1pdCBudW1iZXIgb2Ygc2FtcGxlcyB0byBiZSBwcm9jZXNzZWQgaW4gdGhpcyBpdGVyYXRpb24gdG8KLSAgICAgKiB0aGUgbnVtYmVyIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgbmV4dCB3aW5kb3c6ICovCi0gICAgZ3VpbnQgbl9zYW1wbGVzX2N1cnJlbnQgPSBNSU4gKG5fc2FtcGxlcyAtIG5fc2FtcGxlc19kb25lLAotICAgICAgICBjdHgtPndpbmRvd19uX3NhbXBsZXMgLSBjdHgtPndpbmRvd19uX3NhbXBsZXNfZG9uZSk7Ci0KLSAgICBpZiAobl9zYW1wbGVzX2RvbmUgPCBNQVhfT1JERVIpIHsKLSAgICAgIGlucHV0X2wgPSBjdHgtPmlucHJlX2wgKyBuX3NhbXBsZXNfZG9uZTsKLSAgICAgIGlucHV0X3IgPSBjdHgtPmlucHJlX3IgKyBuX3NhbXBsZXNfZG9uZTsKLSAgICAgIG5fc2FtcGxlc19jdXJyZW50ID0gTUlOIChuX3NhbXBsZXNfY3VycmVudCwgTUFYX09SREVSIC0gbl9zYW1wbGVzX2RvbmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpbnB1dF9sID0gc2FtcGxlc19sICsgbl9zYW1wbGVzX2RvbmU7Ci0gICAgICBpbnB1dF9yID0gc2FtcGxlc19yICsgbl9zYW1wbGVzX2RvbmU7Ci0gICAgfQotCi0gICAgYXBwbHlfZmlsdGVycyAoY3R4LCBpbnB1dF9sLCBpbnB1dF9yLCBuX3NhbXBsZXNfY3VycmVudCk7Ci0KLSAgICAvKiBVcGRhdGUgdGhlIHNxdWFyZSBzdW0uICovCi0gICAgZm9yIChpID0gMDsgaSA8IG5fc2FtcGxlc19jdXJyZW50OyBpKyspCi0gICAgICBjdHgtPndpbmRvd19zcXVhcmVfc3VtICs9IGN0eC0+b3V0X2xbY3R4LT53aW5kb3dfbl9zYW1wbGVzX2RvbmUgKyBpXQotICAgICAgICAgICogY3R4LT5vdXRfbFtjdHgtPndpbmRvd19uX3NhbXBsZXNfZG9uZSArIGldCi0gICAgICAgICAgKyBjdHgtPm91dF9yW2N0eC0+d2luZG93X25fc2FtcGxlc19kb25lICsgaV0KLSAgICAgICAgICAqIGN0eC0+b3V0X3JbY3R4LT53aW5kb3dfbl9zYW1wbGVzX2RvbmUgKyBpXTsKLQotICAgIGN0eC0+d2luZG93X25fc2FtcGxlc19kb25lICs9IG5fc2FtcGxlc19jdXJyZW50OwotICAgIGN0eC0+YnVmZmVyX25fc2FtcGxlc19kb25lICs9IG5fc2FtcGxlc19jdXJyZW50OwotCi0gICAgZ19yZXR1cm5faWZfZmFpbCAoY3R4LT53aW5kb3dfbl9zYW1wbGVzX2RvbmUgPD0gY3R4LT53aW5kb3dfbl9zYW1wbGVzKTsKLQotICAgIGlmIChjdHgtPndpbmRvd19uX3NhbXBsZXNfZG9uZSA9PSBjdHgtPndpbmRvd19uX3NhbXBsZXMpIHsKLSAgICAgIC8qIEdldCB0aGUgUm9vdCBNZWFuIFNxdWFyZSAoUk1TKSBmb3IgdGhpcyBzZXQgb2Ygc2FtcGxlcy4gKi8KLSAgICAgIGdkb3VibGUgdmFsID0gU1RFUFNfUEVSX0RCICogMTAuICogbG9nMTAgKGN0eC0+d2luZG93X3NxdWFyZV9zdW0gLwotICAgICAgICAgIGN0eC0+d2luZG93X25fc2FtcGxlcyAqIDAuNSArIDEuZS0zNyk7Ci0gICAgICBnaW50IGl2YWwgPSBDTEFNUCAoKGdpbnQpIHZhbCwgMCwKLSAgICAgICAgICAoZ2ludCkgR19OX0VMRU1FTlRTIChjdHgtPnRyYWNrLmhpc3RvZ3JhbSkgLSAxKTsKLSAgICAgIC8qIENvbXB1dGUgdGhlIHBlci13aW5kb3cgZ2FpbiAqLwotICAgICAgY29uc3QgZ2RvdWJsZSBnYWluID0gUElOS19SRUYgLSAoZ2RvdWJsZSkgaXZhbCAvIFNURVBTX1BFUl9EQjsKLSAgICAgIGNvbnN0IEdzdENsb2NrVGltZSB0aW1lc3RhbXAgPSBjdHgtPmJ1ZmZlcl90aW1lc3RhbXAKLSAgICAgICAgICArIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoR1NUX1NFQ09ORCwKLSAgICAgICAgICBjdHgtPmJ1ZmZlcl9uX3NhbXBsZXNfZG9uZSwKLSAgICAgICAgICBjdHgtPnNhbXBsZV9yYXRlKQotICAgICAgICAgIC0gUk1TX1dJTkRPV19NU0VDUyAqIEdTVF9NU0VDT05EOwotCi0gICAgICBjdHgtPnBvc3RfbWVzc2FnZSAoY3R4LT5hbmFseXNpcywgdGltZXN0YW1wLAotICAgICAgICAgIFJNU19XSU5ET1dfTVNFQ1MgKiBHU1RfTVNFQ09ORCwgLWdhaW4pOwotCi0KLSAgICAgIGN0eC0+dHJhY2suaGlzdG9ncmFtW2l2YWxdKys7Ci0gICAgICBjdHgtPndpbmRvd19zcXVhcmVfc3VtID0gMC47Ci0gICAgICBjdHgtPndpbmRvd19uX3NhbXBsZXNfZG9uZSA9IDA7Ci0KLSAgICAgIC8qIE5vIG5lZWQgZm9yIG1lbW1vdmUgaGVyZSwgdGhlIGFyZWFzIG5ldmVyIG92ZXJsYXA6IEV2ZW4gZm9yCi0gICAgICAgKiB0aGUgc21hbGxlc3Qgc2FtcGxlIHJhdGUsIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBuZWVkZWQgZm9yCi0gICAgICAgKiB0aGUgd2luZG93IGlzIGdyZWF0ZXIgdGhhbiBNQVhfT1JERVIuICovCi0KLSAgICAgIG1lbWNweSAoY3R4LT5zdGVwYnVmX2wsIGN0eC0+c3RlcGJ1Zl9sICsgY3R4LT53aW5kb3dfbl9zYW1wbGVzLAotICAgICAgICAgIE1BWF9PUkRFUiAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gICAgICBtZW1jcHkgKGN0eC0+b3V0YnVmX2wsIGN0eC0+b3V0YnVmX2wgKyBjdHgtPndpbmRvd19uX3NhbXBsZXMsCi0gICAgICAgICAgTUFYX09SREVSICogc2l6ZW9mIChnZmxvYXQpKTsKLQotICAgICAgbWVtY3B5IChjdHgtPnN0ZXBidWZfciwgY3R4LT5zdGVwYnVmX3IgKyBjdHgtPndpbmRvd19uX3NhbXBsZXMsCi0gICAgICAgICAgTUFYX09SREVSICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgICAgIG1lbWNweSAoY3R4LT5vdXRidWZfciwgY3R4LT5vdXRidWZfciArIGN0eC0+d2luZG93X25fc2FtcGxlcywKLSAgICAgICAgICBNQVhfT1JERVIgKiBzaXplb2YgKGdmbG9hdCkpOwotICAgIH0KLQotICAgIG5fc2FtcGxlc19kb25lICs9IG5fc2FtcGxlc19jdXJyZW50OwotICB9Ci0KLSAgaWYgKG5fc2FtcGxlcyA+PSBNQVhfT1JERVIpIHsKLQotICAgIG1lbWNweSAoY3R4LT5pbnByZWJ1Zl9sLCBzYW1wbGVzX2wgKyBuX3NhbXBsZXMgLSBNQVhfT1JERVIsCi0gICAgICAgIE1BWF9PUkRFUiAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0KLSAgICBtZW1jcHkgKGN0eC0+aW5wcmVidWZfciwgc2FtcGxlc19yICsgbl9zYW1wbGVzIC0gTUFYX09SREVSLAotICAgICAgICBNQVhfT1JERVIgKiBzaXplb2YgKGdmbG9hdCkpOwotCi0gIH0gZWxzZSB7Ci0KLSAgICBtZW1tb3ZlIChjdHgtPmlucHJlYnVmX2wsIGN0eC0+aW5wcmVidWZfbCArIG5fc2FtcGxlcywKLSAgICAgICAgKE1BWF9PUkRFUiAtIG5fc2FtcGxlcykgKiBzaXplb2YgKGdmbG9hdCkpOwotICAgIG1lbWNweSAoY3R4LT5pbnByZWJ1Zl9sICsgTUFYX09SREVSIC0gbl9zYW1wbGVzLCBzYW1wbGVzX2wsCi0gICAgICAgIG5fc2FtcGxlcyAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0KLSAgICBtZW1tb3ZlIChjdHgtPmlucHJlYnVmX3IsIGN0eC0+aW5wcmVidWZfciArIG5fc2FtcGxlcywKLSAgICAgICAgKE1BWF9PUkRFUiAtIG5fc2FtcGxlcykgKiBzaXplb2YgKGdmbG9hdCkpOwotICAgIG1lbWNweSAoY3R4LT5pbnByZWJ1Zl9yICsgTUFYX09SREVSIC0gbl9zYW1wbGVzLCBzYW1wbGVzX3IsCi0gICAgICAgIG5fc2FtcGxlcyAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0KLSAgfQotfQotCi0vKiBPYnRhaW4gdHJhY2sgZ2FpbiBhbmQgcGVhay4gIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLiAgQ2FuIGZhaWwgaWYKLSAqIG5vdCBlbm91Z2ggc2FtcGxlcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgVXBkYXRlcyBhbGJ1bSBhY2N1bXVsYXRvci4KLSAqIFJlc2V0cyB0cmFjayBhY2N1bXVsYXRvci4gKi8KLQotZ2Jvb2xlYW4KLXJnX2FuYWx5c2lzX3RyYWNrX3Jlc3VsdCAoUmdBbmFseXNpc0N0eCAqIGN0eCwgZ2RvdWJsZSAqIGdhaW4sIGdkb3VibGUgKiBwZWFrKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGN0eCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgYWNjdW11bGF0b3JfYWRkICgmY3R4LT5hbGJ1bSwgJmN0eC0+dHJhY2spOwotICByZXN1bHQgPSBhY2N1bXVsYXRvcl9yZXN1bHQgKCZjdHgtPnRyYWNrLCBnYWluLCBwZWFrKTsKLSAgYWNjdW11bGF0b3JfY2xlYXIgKCZjdHgtPnRyYWNrKTsKLQotICByZXNldF9maWx0ZXJzIChjdHgpOwotICByZXNldF9zaWxlbmNlX2RldGVjdGlvbiAoY3R4KTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBPYnRhaW4gYWxidW0gZ2FpbiBhbmQgcGVhay4gIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLiAgQ2FuIGZhaWwgaWYKLSAqIG5vdCBlbm91Z2ggc2FtcGxlcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgUmVzZXRzIGFsYnVtCi0gKiBhY2N1bXVsYXRvci4gKi8KLQotZ2Jvb2xlYW4KLXJnX2FuYWx5c2lzX2FsYnVtX3Jlc3VsdCAoUmdBbmFseXNpc0N0eCAqIGN0eCwgZ2RvdWJsZSAqIGdhaW4sIGdkb3VibGUgKiBwZWFrKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGN0eCAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgcmVzdWx0ID0gYWNjdW11bGF0b3JfcmVzdWx0ICgmY3R4LT5hbGJ1bSwgZ2FpbiwgcGVhayk7Ci0gIGFjY3VtdWxhdG9yX2NsZWFyICgmY3R4LT5hbGJ1bSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZAotcmdfYW5hbHlzaXNfcmVzZXRfYWxidW0gKFJnQW5hbHlzaXNDdHggKiBjdHgpCi17Ci0gIGFjY3VtdWxhdG9yX2NsZWFyICgmY3R4LT5hbGJ1bSk7Ci19Ci0KLS8qIFJlc2V0IGludGVybmFsIGJ1ZmZlcnMgYXMgd2VsbCBhcyB0cmFjayBhbmQgYWxidW0gYWNjdW11bGF0b3JzLgotICogQ29uZmlndXJlZCBzYW1wbGUgcmF0ZSBpcyBrZXB0IGludGFjdC4gKi8KLQotdm9pZAotcmdfYW5hbHlzaXNfcmVzZXQgKFJnQW5hbHlzaXNDdHggKiBjdHgpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGN0eCAhPSBOVUxMKTsKLQotICByZXNldF9maWx0ZXJzIChjdHgpOwotICBhY2N1bXVsYXRvcl9jbGVhciAoJmN0eC0+dHJhY2spOwotICBhY2N1bXVsYXRvcl9jbGVhciAoJmN0eC0+YWxidW0pOwotICByZXNldF9zaWxlbmNlX2RldGVjdGlvbiAoY3R4KTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuaCBiL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3YWQwYS4uMDAwMDAwMAotLS0gYS9nc3QvcmVwbGF5Z2Fpbi9yZ2FuYWx5c2lzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBHU3RyZWFtZXIgUmVwbGF5R2FpbiBhbmFseXNpcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgUm9iaW5zb24gPERhdmlkQFJvYmluc29uLm9yZz4KLSAqICAgICAgICAgICAgICAgICAgICBHbGVuIFNhd3llciA8Z2xlbnNhd3llckBob3RtYWlsLmNvbT4KLSAqCi0gKiByZ2FuYWx5c2lzLmg6IEFuYWx5emUgcmF3IGF1ZGlvIGRhdGEgaW4gYWNjb3JkYW5jZSB3aXRoIFJlcGxheUdhaW4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIF9fUkdfQU5BTFlTSVNfSF9fCi0jZGVmaW5lIF9fUkdfQU5BTFlTSVNfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9SZ0FuYWx5c2lzQ3R4IFJnQW5hbHlzaXNDdHg7Ci0KLVJnQW5hbHlzaXNDdHggKnJnX2FuYWx5c2lzX25ldyAodm9pZCk7Ci1nYm9vbGVhbiByZ19hbmFseXNpc19zZXRfc2FtcGxlX3JhdGUgKFJnQW5hbHlzaXNDdHggKiBjdHgsIGdpbnQgc2FtcGxlX3JhdGUpOwotdm9pZCByZ19hbmFseXNpc19hbmFseXplX21vbm9fZmxvYXQgKFJnQW5hbHlzaXNDdHggKiBjdHgsIGdjb25zdHBvaW50ZXIgZGF0YSwKLSAgICBnc2l6ZSBzaXplLCBndWludCBkZXB0aCk7Ci12b2lkIHJnX2FuYWx5c2lzX2FuYWx5emVfc3RlcmVvX2Zsb2F0IChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBnY29uc3Rwb2ludGVyIGRhdGEsCi0gICAgZ3NpemUgc2l6ZSwgZ3VpbnQgZGVwdGgpOwotdm9pZCByZ19hbmFseXNpc19hbmFseXplX21vbm9faW50MTYgKFJnQW5hbHlzaXNDdHggKiBjdHgsIGdjb25zdHBvaW50ZXIgZGF0YSwKLSAgICBnc2l6ZSBzaXplLCBndWludCBkZXB0aCk7Ci12b2lkIHJnX2FuYWx5c2lzX2FuYWx5emVfc3RlcmVvX2ludDE2IChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBnY29uc3Rwb2ludGVyIGRhdGEsCi0gICAgZ3NpemUgc2l6ZSwgZ3VpbnQgZGVwdGgpOwotdm9pZCByZ19hbmFseXNpc19hbmFseXplIChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBjb25zdCBnZmxvYXQgKiBzYW1wbGVzX2wsCi0gICAgY29uc3QgZ2Zsb2F0ICogc2FtcGxlc19yLCBndWludCBuX3NhbXBsZXMpOwotZ2Jvb2xlYW4gcmdfYW5hbHlzaXNfdHJhY2tfcmVzdWx0IChSZ0FuYWx5c2lzQ3R4ICogY3R4LCBnZG91YmxlICogZ2FpbiwKLSAgICBnZG91YmxlICogcGVhayk7Ci1nYm9vbGVhbiByZ19hbmFseXNpc19hbGJ1bV9yZXN1bHQgKFJnQW5hbHlzaXNDdHggKiBjdHgsIGdkb3VibGUgKiBnYWluLAotICAgIGdkb3VibGUgKiBwZWFrKTsKLXZvaWQgcmdfYW5hbHlzaXNfaW5pdF9zaWxlbmNlX2RldGVjdGlvbiAoCi0gICAgUmdBbmFseXNpc0N0eCAqIGN0eCwKLSAgICB2b2lkICgqcG9zdF9tZXNzYWdlKSAoZ3BvaW50ZXIgYW5hbHlzaXMsIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgZ2RvdWJsZSByZ2xldmVsKSwKLSAgICBncG9pbnRlciBhbmFseXNpcyk7Ci12b2lkIHJnX2FuYWx5c2lzX3N0YXJ0X2J1ZmZlciAoUmdBbmFseXNpc0N0eCAqIGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgYnVmZmVyX3RpbWVzdGFtcCk7Ci12b2lkIHJnX2FuYWx5c2lzX3Jlc2V0X2FsYnVtIChSZ0FuYWx5c2lzQ3R4ICogY3R4KTsKLXZvaWQgcmdfYW5hbHlzaXNfcmVzZXQgKFJnQW5hbHlzaXNDdHggKiBjdHgpOwotdm9pZCByZ19hbmFseXNpc19kZXN0cm95IChSZ0FuYWx5c2lzQ3R4ICogY3R4KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fUkdfQU5BTFlTSVNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL01ha2VmaWxlLmFtIGIvZ3N0L3J0cC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkM2M5YS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHJ0cC5sYQotCi1saWJnc3RydHBfbGFfU09VUkNFUyA9IFwKLQlkYm9vbGh1ZmYuYyBcCi0JZm52MWhhc2guYyBcCi0JZ3N0cnRwLmMgXAotCWdzdHJ0cGNoYW5uZWxzLmMgXAotCWdzdHJ0cGFjM2RlcGF5LmMgXAotCWdzdHJ0cGFjM3BheS5jIFwKLQlnc3RydHBidmRlcGF5LmMgXAotCWdzdHJ0cGJ2cGF5LmMgXAotCWdzdHJ0cGNlbHRkZXBheS5jIFwKLQlnc3RydHBjZWx0cGF5LmMgXAotCWdzdHJ0cGR2ZGVwYXkuYyBcCi0JZ3N0cnRwZHZwYXkuYyBcCi0JZ3N0cnRwZ3N0ZGVwYXkuYyBcCi0JZ3N0cnRwZ3N0cGF5LmMgXAotCWdzdHJ0cGlsYmNkZXBheS5jIFwKLQlnc3RydHBpbGJjcGF5LmMgXAotCWdzdHJ0cG1wYWRlcGF5LmMgXAotCWdzdHJ0cG1wYXBheS5jIFwKLQlnc3RydHBtcGFyb2J1c3RkZXBheS5jIFwKLQlnc3RydHBtcHZkZXBheS5jIFwKLQlnc3RydHBtcHZwYXkuYyBcCi0JZ3N0cnRwcGNtYWRlcGF5LmMgXAotCWdzdHJ0cHBjbXVkZXBheS5jIFwKLQlnc3RydHBwY211cGF5LmMgXAotCWdzdHJ0cHBjbWFwYXkuYyBcCi0JZ3N0cnRwZzcyMmRlcGF5LmMgXAotCWdzdHJ0cGc3MjJwYXkuYyBcCi0JZ3N0cnRwZzcyM2RlcGF5LmMgXAotCWdzdHJ0cGc3MjNwYXkuYyBcCi0JZ3N0cnRwZzcyNnBheS5jIFwKLQlnc3RydHBnNzI2ZGVwYXkuYyBcCi0JZ3N0cnRwZzcyOXBheS5jIFwKLQlnc3RydHBnNzI5ZGVwYXkuYyBcCi0JZ3N0cnRwZ3NtZGVwYXkuYyBcCi0JZ3N0cnRwZ3NtcGF5LmMgXAotCWdzdHJ0cGFtcmRlcGF5LmMgXAotCWdzdHJ0cGFtcnBheS5jIFwKLQlnc3RydHBoMjYxcGF5LmMgXAotCWdzdHJ0cGgyNjFkZXBheS5jIFwKLQlnc3RydHBoMjYzcGRlcGF5LmMgXAotCWdzdHJ0cGgyNjNwcGF5LmMgXAotCWdzdHJ0cGgyNjNkZXBheS5jIFwKLQlnc3RydHBoMjYzcGF5LmMgXAotCWdzdHJ0cGgyNjRkZXBheS5jIFwKLQlnc3RydHBoMjY0cGF5LmMgXAotCWdzdHJ0cGgyNjVkZXBheS5jIFwKLQlnc3RydHBoMjY1cGF5LmMgXAotCWdzdHJ0cGoya2RlcGF5LmMgXAotCWdzdHJ0cGoya3BheS5jIFwKLQlnc3RydHBqcGVnZGVwYXkuYyBcCi0JZ3N0cnRwanBlZ3BheS5jIFwKLQlnc3RydHBrbHZkZXBheS5jIFwKLQlnc3RydHBrbHZwYXkuYyBcCi0JZ3N0cnRwTDE2ZGVwYXkuYyBcCi0JZ3N0cnRwTDE2cGF5LmMgXAotCWdzdHJ0cEwyNGRlcGF5LmMgXAotCWdzdHJ0cEwyNHBheS5jIFwKLQlnc3Rhc3Rlcmlza2gyNjMuYyBcCi0JZ3N0cnRwbXAxc2RlcGF5LmMgXAotCWdzdHJ0cG1wMnRkZXBheS5jIFwKLQlnc3RydHBtcDJ0cGF5LmMgXAotCWdzdHJ0cG1wNHZkZXBheS5jIFwKLQlnc3RydHBtcDR2cGF5LmMgXAotCWdzdHJ0cG1wNGdkZXBheS5jIFwKLQlnc3RydHBtcDRncGF5LmMgXAotCWdzdHJ0cG1wNGFkZXBheS5jIFwKLQlnc3RydHBtcDRhcGF5LmMgXAotCWdzdHJ0cG9wdXNkZXBheS5jIFwKLQlnc3RydHBvcHVzcGF5LmMgXAotCWdzdHJ0cHFjZWxwZGVwYXkuYyBcCi0JZ3N0cnRwcWRtZGVwYXkuYyBcCi0JZ3N0cnRwc2JjZGVwYXkuYyBcCi0JZ3N0cnRwc2JjcGF5LmMgXAotCWdzdHJ0cHNpcmVucGF5LmMgXAotCWdzdHJ0cHNpcmVuZGVwYXkuYyBcCi0JZ3N0cnRwc3BlZXhkZXBheS5jIFwKLQlnc3RydHBzcGVleHBheS5jIFwKLQlnc3RydHBzdjN2ZGVwYXkuYyBcCi0JZ3N0cnRwdGhlb3JhZGVwYXkuYyBcCi0JZ3N0cnRwdGhlb3JhcGF5LmMgXAotCWdzdHJ0cHZvcmJpc2RlcGF5LmMgXAotCWdzdHJ0cHZvcmJpc3BheS5jICBcCi0JZ3N0cnRwdnA4ZGVwYXkuYyBcCi0JZ3N0cnRwdnA4cGF5LmMgXAotCWdzdHJ0cHZwOWRlcGF5LmMgXAotCWdzdHJ0cHZwOXBheS5jIFwKLQlnc3RydHB2cmF3ZGVwYXkuYyAgXAotCWdzdHJ0cHZyYXdwYXkuYyBcCi0JZ3N0cnRwc3RyZWFtcGF5LmMgXAotCWdzdHJ0cHN0cmVhbWRlcGF5LmMgXAotCWdzdHJ0cHV0aWxzLmMKLQotbGliZ3N0cnRwX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSAtRHZwOF9ub3JtPWdzdF9ydHB2cDhfdnA4X25vcm0gXAotCS1EdnA4ZHhfc3RhcnRfZGVjb2RlPWdzdF9ydHB2cDhfdnA4ZHhfc3RhcnRfZGVjb2RlIFwKLQktRHZwOGR4X2Jvb2xfZGVjb2Rlcl9maWxsPWdzdF9ydHB2cDhfdnA4ZHhfYm9vbF9kZWNvZGVyX2ZpbGwKLQotbGliZ3N0cnRwX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgXAotCSQoTElCTSkKLWxpYmdzdHJ0cF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpIAotbGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0JCQlcCi0JZGJvb2xodWZmLmggXAotCWZudjFoYXNoLmggXAotCWdzdHJ0cGNoYW5uZWxzLmggXAotCWdzdHJ0cEwxNmRlcGF5LmggXAotCWdzdHJ0cEwxNnBheS5oIFwKLQlnc3RydHBMMjRkZXBheS5oIFwKLQlnc3RydHBMMjRwYXkuaCBcCi0JZ3N0cnRwYWMzZGVwYXkuaCBcCi0JZ3N0cnRwYWMzcGF5LmggXAotCWdzdHJ0cGJ2ZGVwYXkuaCBcCi0JZ3N0cnRwYnZwYXkuaCBcCi0JZ3N0cnRwY2VsdHBheS5oCVwKLQlnc3RydHBjZWx0ZGVwYXkuaCBcCi0JZ3N0cnRwZHZkZXBheS5oIFwKLQlnc3RydHBkdnBheS5oIFwKLQlnc3RydHBhbXJkZXBheS5oIFwKLQlnc3RydHBhbXJwYXkuaCAJXAotCWdzdHJ0cGdzdGRlcGF5LmggXAotCWdzdHJ0cGdzdHBheS5oIAlcCi0JZ3N0cnRwaWxiY2RlcGF5LmggXAotCWdzdHJ0cGlsYmNwYXkuaCBcCi0JZ3N0cnRwcGNtYWRlcGF5LmggXAotCWdzdHJ0cHBjbXVkZXBheS5oIFwKLQlnc3RydHBwY211cGF5LmggXAotCWdzdHJ0cHBjbWFwYXkuaCBcCi0JZ3N0cnRwZzcyMmRlcGF5LmggXAotCWdzdHJ0cGc3MjJwYXkuaCBcCi0JZ3N0cnRwZzcyM2RlcGF5LmhcCi0JZ3N0cnRwZzcyM3BheS5oIFwKLQlnc3RydHBnNzI2ZGVwYXkuaCBcCi0JZ3N0cnRwZzcyNnBheS5oIFwKLQlnc3RydHBnNzI5ZGVwYXkuaCBcCi0JZ3N0cnRwZzcyOXBheS5oIFwKLQlnc3RydHBnc21kZXBheS5oIFwKLQlnc3RydHBnc21wYXkuaCAJXAotCWdzdHJ0cG1wYWRlcGF5LmggXAotCWdzdHJ0cG1wYXJvYnVzdGRlcGF5LmggXAotCWdzdHJ0cG1wYXBheS5oIFwKLQlnc3RydHBtcHZkZXBheS5oIFwKLQlnc3RydHBtcHZwYXkuaCBcCi0JZ3N0cnRwaDI2MXBheS5oIFwKLQlnc3RydHBoMjYxZGVwYXkuaCBcCi0JZ3N0cnRwaDI2M3BkZXBheS5oIFwKLQlnc3RydHBoMjYzcHBheS5oIFwKLQlnc3RydHBoMjYzZGVwYXkuaCBcCi0JZ3N0cnRwaDI2M3BheS5oIFwKLQlnc3RydHBoMjY0ZGVwYXkuaCBcCi0JZ3N0cnRwaDI2NHBheS5oIFwKLQlnc3RydHBoMjY1ZGVwYXkuaCBcCi0JZ3N0cnRwaDI2NXBheS5oIFwKLQlnc3RydHBoMjY1dHlwZXMuaCBcCi0JZ3N0cnRwajJrZGVwYXkuaCBcCi0JZ3N0cnRwajJrcGF5LmggXAotCWdzdHJ0cGoya2NvbW1vbi5oIFwKLQlnc3RydHBqcGVnZGVwYXkuaCBcCi0JZ3N0cnRwanBlZ3BheS5oIFwKLQlnc3RydHBrbHZkZXBheS5oIFwKLQlnc3RydHBrbHZwYXkuaCBcCi0JZ3N0cnRwbXAxc2RlcGF5LmggXAotCWdzdHJ0cG1wMnRkZXBheS5oIFwKLQlnc3RydHBtcDJ0cGF5LmggXAotCWdzdHJ0cG1wNHZkZXBheS5oIFwKLQlnc3RydHBtcDR2cGF5LmgJXAotCWdzdHJ0cG1wNGdkZXBheS5oIFwKLQlnc3RydHBtcDRncGF5LmgJXAotCWdzdHJ0cG1wNGFkZXBheS5oIFwKLQlnc3RydHBtcDRhcGF5LmggXAotCWdzdHJ0cG9wdXNkZXBheS5oIFwKLQlnc3RydHBvcHVzcGF5LmggXAotCWdzdGFzdGVyaXNraDI2My5oIFwKLQlnc3RydHBxY2VscGRlcGF5LmggXAotCWdzdHJ0cHFkbWRlcGF5LmggXAotCWdzdHJ0cHNiY2RlcGF5LmggXAotCWdzdHJ0cHNiY3BheS5oIFwKLQlnc3RydHBzaXJlbnBheS5oIFwKLQlnc3RydHBzaXJlbmRlcGF5LmggXAotCWdzdHJ0cHNwZWV4ZGVwYXkuaCBcCi0JZ3N0cnRwc3BlZXhwYXkuaCBcCi0JZ3N0cnRwc3YzdmRlcGF5LmggXAotCWdzdHJ0cHRoZW9yYWRlcGF5LmggXAotCWdzdHJ0cHRoZW9yYXBheS5oIFwKLQlnc3RydHB2b3JiaXNkZXBheS5oIFwKLQlnc3RydHB2b3JiaXNwYXkuaCBcCi0JZ3N0cnRwdnA4ZGVwYXkuaCBcCi0JZ3N0cnRwdnA4cGF5LmggXAotCWdzdHJ0cHZwOWRlcGF5LmggXAotCWdzdHJ0cHZwOXBheS5oIFwKLQlnc3RydHB2cmF3ZGVwYXkuaCBcCi0JZ3N0cnRwdnJhd3BheS5oIFwKLQlnc3RydHBzdHJlYW1wYXkuaCBcCi0JZ3N0cnRwc3RyZWFtZGVwYXkuaCBcCi0JZ3N0cnRwdXRpbHMuaAotCi1FWFRSQV9ESVNUID0gZGJvb2xodWZmLkxJQ0VOU0UKZGlmZiAtLWdpdCBhL2dzdC9ydHAvTWFrZWZpbGUuaW4gYi9nc3QvcnRwL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjZlODc4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxODgwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9ydHAKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RydHBfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHJ0cF9sYV9PQkpFQ1RTID0gbGliZ3N0cnRwX2xhLWRib29saHVmZi5sbyBcCi0JbGliZ3N0cnRwX2xhLWZudjFoYXNoLmxvIGxpYmdzdHJ0cF9sYS1nc3RydHAubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwYWMzZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBhYzNwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cGJ2ZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwY2VsdGRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwY2VsdHBheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwZHZkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGR2cGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBnc3RkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGdzdHBheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwaWxiY2RlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwaWxiY3BheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXBhZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcGFwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcGFyb2J1c3RkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdmRlcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBtcHZwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBwY21hZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBwY211ZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBwY21hcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIyZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBnNzIycGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzI2cGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwZzcyNmRlcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzI5cGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwZzcyOWRlcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBnc21kZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbXBheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwYW1yZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBhbXJwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBoMjYxZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcGRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cGoya2RlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwajJrcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBqcGVnZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBqcGVncGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBrbHZkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdnBheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwTDE2ZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBMMTZwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNGRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwTDI0cGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3Rhc3Rlcmlza2gyNjMubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcDFzZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcDJ0ZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcDR2ZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcDRnZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBtcDRhZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBvcHVzZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBxY2VscGRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cHNiY2RlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwc2JjcGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbnBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVuZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHBzcGVleGRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cHN2M3ZkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYWRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwdm9yYmlzZGVwYXkubG8gXAotCWxpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOGRlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwdnA4cGF5LmxvIGxpYmdzdHJ0cF9sYS1nc3RydHB2cDlkZXBheS5sbyBcCi0JbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOXBheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwdnJhd2RlcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwdnJhd3BheS5sbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtcGF5LmxvIFwKLQlsaWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtZGVwYXkubG8gbGliZ3N0cnRwX2xhLWdzdHJ0cHV0aWxzLmxvCi1saWJnc3RydHBfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0cnRwX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RydHBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0cnRwX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHJ0cF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RydHBfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUgXAotCVRPRE8KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHJ0cC5sYQotbGliZ3N0cnRwX2xhX1NPVVJDRVMgPSBcCi0JZGJvb2xodWZmLmMgXAotCWZudjFoYXNoLmMgXAotCWdzdHJ0cC5jIFwKLQlnc3RydHBjaGFubmVscy5jIFwKLQlnc3RydHBhYzNkZXBheS5jIFwKLQlnc3RydHBhYzNwYXkuYyBcCi0JZ3N0cnRwYnZkZXBheS5jIFwKLQlnc3RydHBidnBheS5jIFwKLQlnc3RydHBjZWx0ZGVwYXkuYyBcCi0JZ3N0cnRwY2VsdHBheS5jIFwKLQlnc3RydHBkdmRlcGF5LmMgXAotCWdzdHJ0cGR2cGF5LmMgXAotCWdzdHJ0cGdzdGRlcGF5LmMgXAotCWdzdHJ0cGdzdHBheS5jIFwKLQlnc3RydHBpbGJjZGVwYXkuYyBcCi0JZ3N0cnRwaWxiY3BheS5jIFwKLQlnc3RydHBtcGFkZXBheS5jIFwKLQlnc3RydHBtcGFwYXkuYyBcCi0JZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYyBcCi0JZ3N0cnRwbXB2ZGVwYXkuYyBcCi0JZ3N0cnRwbXB2cGF5LmMgXAotCWdzdHJ0cHBjbWFkZXBheS5jIFwKLQlnc3RydHBwY211ZGVwYXkuYyBcCi0JZ3N0cnRwcGNtdXBheS5jIFwKLQlnc3RydHBwY21hcGF5LmMgXAotCWdzdHJ0cGc3MjJkZXBheS5jIFwKLQlnc3RydHBnNzIycGF5LmMgXAotCWdzdHJ0cGc3MjNkZXBheS5jIFwKLQlnc3RydHBnNzIzcGF5LmMgXAotCWdzdHJ0cGc3MjZwYXkuYyBcCi0JZ3N0cnRwZzcyNmRlcGF5LmMgXAotCWdzdHJ0cGc3MjlwYXkuYyBcCi0JZ3N0cnRwZzcyOWRlcGF5LmMgXAotCWdzdHJ0cGdzbWRlcGF5LmMgXAotCWdzdHJ0cGdzbXBheS5jIFwKLQlnc3RydHBhbXJkZXBheS5jIFwKLQlnc3RydHBhbXJwYXkuYyBcCi0JZ3N0cnRwaDI2MXBheS5jIFwKLQlnc3RydHBoMjYxZGVwYXkuYyBcCi0JZ3N0cnRwaDI2M3BkZXBheS5jIFwKLQlnc3RydHBoMjYzcHBheS5jIFwKLQlnc3RydHBoMjYzZGVwYXkuYyBcCi0JZ3N0cnRwaDI2M3BheS5jIFwKLQlnc3RydHBoMjY0ZGVwYXkuYyBcCi0JZ3N0cnRwaDI2NHBheS5jIFwKLQlnc3RydHBoMjY1ZGVwYXkuYyBcCi0JZ3N0cnRwaDI2NXBheS5jIFwKLQlnc3RydHBqMmtkZXBheS5jIFwKLQlnc3RydHBqMmtwYXkuYyBcCi0JZ3N0cnRwanBlZ2RlcGF5LmMgXAotCWdzdHJ0cGpwZWdwYXkuYyBcCi0JZ3N0cnRwa2x2ZGVwYXkuYyBcCi0JZ3N0cnRwa2x2cGF5LmMgXAotCWdzdHJ0cEwxNmRlcGF5LmMgXAotCWdzdHJ0cEwxNnBheS5jIFwKLQlnc3RydHBMMjRkZXBheS5jIFwKLQlnc3RydHBMMjRwYXkuYyBcCi0JZ3N0YXN0ZXJpc2toMjYzLmMgXAotCWdzdHJ0cG1wMXNkZXBheS5jIFwKLQlnc3RydHBtcDJ0ZGVwYXkuYyBcCi0JZ3N0cnRwbXAydHBheS5jIFwKLQlnc3RydHBtcDR2ZGVwYXkuYyBcCi0JZ3N0cnRwbXA0dnBheS5jIFwKLQlnc3RydHBtcDRnZGVwYXkuYyBcCi0JZ3N0cnRwbXA0Z3BheS5jIFwKLQlnc3RydHBtcDRhZGVwYXkuYyBcCi0JZ3N0cnRwbXA0YXBheS5jIFwKLQlnc3RydHBvcHVzZGVwYXkuYyBcCi0JZ3N0cnRwb3B1c3BheS5jIFwKLQlnc3RydHBxY2VscGRlcGF5LmMgXAotCWdzdHJ0cHFkbWRlcGF5LmMgXAotCWdzdHJ0cHNiY2RlcGF5LmMgXAotCWdzdHJ0cHNiY3BheS5jIFwKLQlnc3RydHBzaXJlbnBheS5jIFwKLQlnc3RydHBzaXJlbmRlcGF5LmMgXAotCWdzdHJ0cHNwZWV4ZGVwYXkuYyBcCi0JZ3N0cnRwc3BlZXhwYXkuYyBcCi0JZ3N0cnRwc3YzdmRlcGF5LmMgXAotCWdzdHJ0cHRoZW9yYWRlcGF5LmMgXAotCWdzdHJ0cHRoZW9yYXBheS5jIFwKLQlnc3RydHB2b3JiaXNkZXBheS5jIFwKLQlnc3RydHB2b3JiaXNwYXkuYyAgXAotCWdzdHJ0cHZwOGRlcGF5LmMgXAotCWdzdHJ0cHZwOHBheS5jIFwKLQlnc3RydHB2cDlkZXBheS5jIFwKLQlnc3RydHB2cDlwYXkuYyBcCi0JZ3N0cnRwdnJhd2RlcGF5LmMgIFwKLQlnc3RydHB2cmF3cGF5LmMgXAotCWdzdHJ0cHN0cmVhbXBheS5jIFwKLQlnc3RydHBzdHJlYW1kZXBheS5jIFwKLQlnc3RydHB1dGlscy5jCi0KLWxpYmdzdHJ0cF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgLUR2cDhfbm9ybT1nc3RfcnRwdnA4X3ZwOF9ub3JtIFwKLQktRHZwOGR4X3N0YXJ0X2RlY29kZT1nc3RfcnRwdnA4X3ZwOGR4X3N0YXJ0X2RlY29kZSBcCi0JLUR2cDhkeF9ib29sX2RlY29kZXJfZmlsbD1nc3RfcnRwdnA4X3ZwOGR4X2Jvb2xfZGVjb2Rlcl9maWxsCi0KLWxpYmdzdHJ0cF9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0YXVkaW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHJ0cC1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3RwYnV0aWxzLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpIFwKLQkkKExJQk0pCi0KLWxpYmdzdHJ0cF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpIAotbGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IFwKLQlkYm9vbGh1ZmYuaCBcCi0JZm52MWhhc2guaCBcCi0JZ3N0cnRwY2hhbm5lbHMuaCBcCi0JZ3N0cnRwTDE2ZGVwYXkuaCBcCi0JZ3N0cnRwTDE2cGF5LmggXAotCWdzdHJ0cEwyNGRlcGF5LmggXAotCWdzdHJ0cEwyNHBheS5oIFwKLQlnc3RydHBhYzNkZXBheS5oIFwKLQlnc3RydHBhYzNwYXkuaCBcCi0JZ3N0cnRwYnZkZXBheS5oIFwKLQlnc3RydHBidnBheS5oIFwKLQlnc3RydHBjZWx0cGF5LmgJXAotCWdzdHJ0cGNlbHRkZXBheS5oIFwKLQlnc3RydHBkdmRlcGF5LmggXAotCWdzdHJ0cGR2cGF5LmggXAotCWdzdHJ0cGFtcmRlcGF5LmggXAotCWdzdHJ0cGFtcnBheS5oIAlcCi0JZ3N0cnRwZ3N0ZGVwYXkuaCBcCi0JZ3N0cnRwZ3N0cGF5LmggCVwKLQlnc3RydHBpbGJjZGVwYXkuaCBcCi0JZ3N0cnRwaWxiY3BheS5oIFwKLQlnc3RydHBwY21hZGVwYXkuaCBcCi0JZ3N0cnRwcGNtdWRlcGF5LmggXAotCWdzdHJ0cHBjbXVwYXkuaCBcCi0JZ3N0cnRwcGNtYXBheS5oIFwKLQlnc3RydHBnNzIyZGVwYXkuaCBcCi0JZ3N0cnRwZzcyMnBheS5oIFwKLQlnc3RydHBnNzIzZGVwYXkuaFwKLQlnc3RydHBnNzIzcGF5LmggXAotCWdzdHJ0cGc3MjZkZXBheS5oIFwKLQlnc3RydHBnNzI2cGF5LmggXAotCWdzdHJ0cGc3MjlkZXBheS5oIFwKLQlnc3RydHBnNzI5cGF5LmggXAotCWdzdHJ0cGdzbWRlcGF5LmggXAotCWdzdHJ0cGdzbXBheS5oIAlcCi0JZ3N0cnRwbXBhZGVwYXkuaCBcCi0JZ3N0cnRwbXBhcm9idXN0ZGVwYXkuaCBcCi0JZ3N0cnRwbXBhcGF5LmggXAotCWdzdHJ0cG1wdmRlcGF5LmggXAotCWdzdHJ0cG1wdnBheS5oIFwKLQlnc3RydHBoMjYxcGF5LmggXAotCWdzdHJ0cGgyNjFkZXBheS5oIFwKLQlnc3RydHBoMjYzcGRlcGF5LmggXAotCWdzdHJ0cGgyNjNwcGF5LmggXAotCWdzdHJ0cGgyNjNkZXBheS5oIFwKLQlnc3RydHBoMjYzcGF5LmggXAotCWdzdHJ0cGgyNjRkZXBheS5oIFwKLQlnc3RydHBoMjY0cGF5LmggXAotCWdzdHJ0cGgyNjVkZXBheS5oIFwKLQlnc3RydHBoMjY1cGF5LmggXAotCWdzdHJ0cGgyNjV0eXBlcy5oIFwKLQlnc3RydHBqMmtkZXBheS5oIFwKLQlnc3RydHBqMmtwYXkuaCBcCi0JZ3N0cnRwajJrY29tbW9uLmggXAotCWdzdHJ0cGpwZWdkZXBheS5oIFwKLQlnc3RydHBqcGVncGF5LmggXAotCWdzdHJ0cGtsdmRlcGF5LmggXAotCWdzdHJ0cGtsdnBheS5oIFwKLQlnc3RydHBtcDFzZGVwYXkuaCBcCi0JZ3N0cnRwbXAydGRlcGF5LmggXAotCWdzdHJ0cG1wMnRwYXkuaCBcCi0JZ3N0cnRwbXA0dmRlcGF5LmggXAotCWdzdHJ0cG1wNHZwYXkuaAlcCi0JZ3N0cnRwbXA0Z2RlcGF5LmggXAotCWdzdHJ0cG1wNGdwYXkuaAlcCi0JZ3N0cnRwbXA0YWRlcGF5LmggXAotCWdzdHJ0cG1wNGFwYXkuaCBcCi0JZ3N0cnRwb3B1c2RlcGF5LmggXAotCWdzdHJ0cG9wdXNwYXkuaCBcCi0JZ3N0YXN0ZXJpc2toMjYzLmggXAotCWdzdHJ0cHFjZWxwZGVwYXkuaCBcCi0JZ3N0cnRwcWRtZGVwYXkuaCBcCi0JZ3N0cnRwc2JjZGVwYXkuaCBcCi0JZ3N0cnRwc2JjcGF5LmggXAotCWdzdHJ0cHNpcmVucGF5LmggXAotCWdzdHJ0cHNpcmVuZGVwYXkuaCBcCi0JZ3N0cnRwc3BlZXhkZXBheS5oIFwKLQlnc3RydHBzcGVleHBheS5oIFwKLQlnc3RydHBzdjN2ZGVwYXkuaCBcCi0JZ3N0cnRwdGhlb3JhZGVwYXkuaCBcCi0JZ3N0cnRwdGhlb3JhcGF5LmggXAotCWdzdHJ0cHZvcmJpc2RlcGF5LmggXAotCWdzdHJ0cHZvcmJpc3BheS5oIFwKLQlnc3RydHB2cDhkZXBheS5oIFwKLQlnc3RydHB2cDhwYXkuaCBcCi0JZ3N0cnRwdnA5ZGVwYXkuaCBcCi0JZ3N0cnRwdnA5cGF5LmggXAotCWdzdHJ0cHZyYXdkZXBheS5oIFwKLQlnc3RydHB2cmF3cGF5LmggXAotCWdzdHJ0cHN0cmVhbXBheS5oIFwKLQlnc3RydHBzdHJlYW1kZXBheS5oIFwKLQlnc3RydHB1dGlscy5oCi0KLUVYVFJBX0RJU1QgPSBkYm9vbGh1ZmYuTElDRU5TRQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3J0cC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvcnRwL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0cnRwLmxhOiAkKGxpYmdzdHJ0cF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHJ0cF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0cnRwX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RydHBfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHJ0cF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHJ0cF9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1kYm9vbGh1ZmYuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZm52MWhhc2guUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0YXN0ZXJpc2toMjYzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMTZkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMTZwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwTDI0ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwTDI0cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM2RlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM3BheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBhbXJkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBhbXJwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwYnZkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBjZWx0ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwY2VsdHBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBkdmRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGR2cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzIycGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzIzcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjZkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI2cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjlkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI5cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbWRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc3RkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc3RwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2MWRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M2RlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcHBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjY0ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NHBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjY1ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBpbGJjZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaWxiY3BheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqMmtkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqMmtwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwanBlZ2RlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGpwZWdwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwa2x2ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwa2x2cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMXNkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDJ0ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXAydHBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDRhZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0YXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDRnZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0Z3BheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDR2ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0dnBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcGFkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcGFwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXBhcm9idXN0ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXB2ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXB2cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBvcHVzcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBwY21hcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBwY211cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHFjZWxwZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc2JjZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc2JjcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVuZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc2lyZW5wYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzcGVleHBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzdHJlYW1kZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzdHJlYW1wYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3YzdmRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYWRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB1dGlscy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNkZXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA4ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA4cGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOWRlcGF5LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOXBheS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2cmF3ZGVwYXkuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnJhd3BheS5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0cnRwX2xhLWRib29saHVmZi5sbzogZGJvb2xodWZmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZGJvb2xodWZmLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZGJvb2xodWZmLlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZGJvb2xodWZmLmxvIGB0ZXN0IC1mICdkYm9vbGh1ZmYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGJvb2xodWZmLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1kYm9vbGh1ZmYuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZGJvb2xodWZmLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2Rib29saHVmZi5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1kYm9vbGh1ZmYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1kYm9vbGh1ZmYubG8gYHRlc3QgLWYgJ2Rib29saHVmZi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BkYm9vbGh1ZmYuYwotCi1saWJnc3RydHBfbGEtZm52MWhhc2gubG86IGZudjFoYXNoLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZm52MWhhc2gubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1mbnYxaGFzaC5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWZudjFoYXNoLmxvIGB0ZXN0IC1mICdmbnYxaGFzaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmbnYxaGFzaC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZm52MWhhc2guVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZm52MWhhc2guUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZm52MWhhc2guYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZm52MWhhc2gubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1mbnYxaGFzaC5sbyBgdGVzdCAtZiAnZm52MWhhc2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgZm52MWhhc2guYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwLmxvOiBnc3RydHAuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHAuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHAubG8gYHRlc3QgLWYgJ2dzdHJ0cC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHAuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cC5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHAuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwLmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cC5sbyBgdGVzdCAtZiAnZ3N0cnRwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cC5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5sbzogZ3N0cnRwY2hhbm5lbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGNoYW5uZWxzLlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwY2hhbm5lbHMubG8gYHRlc3QgLWYgJ2dzdHJ0cGNoYW5uZWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGNoYW5uZWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBjaGFubmVscy5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBjaGFubmVscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGNoYW5uZWxzLmxvIGB0ZXN0IC1mICdnc3RydHBjaGFubmVscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBjaGFubmVscy5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBhYzNkZXBheS5sbzogZ3N0cnRwYWMzZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBhYzNkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM2RlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwYWMzZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGFjM2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGFjM2RlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBhYzNkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBhYzNkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBhYzNkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBhYzNkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBhYzNkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBhYzNkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBhYzNwYXkubG86IGdzdHJ0cGFjM3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM3BheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM3BheS5sbyBgdGVzdCAtZiAnZ3N0cnRwYWMzcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGFjM3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwYWMzcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFjM3BheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBhYzNwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwYWMzcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwYWMzcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBhYzNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwYWMzcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGJ2ZGVwYXkubG86IGdzdHJ0cGJ2ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBidmRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwYnZkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGJ2ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGJ2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwYnZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwYnZkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBidmRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGJ2ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwYnZkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGJ2ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGJ2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwYnZkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5sbzogZ3N0cnRwYnZwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGJ2cGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwYnZwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGJ2cGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGJ2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBidnBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBidnBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGJ2cGF5LmxvIGB0ZXN0IC1mICdnc3RydHBidnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBidnBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBjZWx0ZGVwYXkubG86IGdzdHJ0cGNlbHRkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwY2VsdGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGNlbHRkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwY2VsdGRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBjZWx0ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwY2VsdGRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwY2VsdGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBjZWx0ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwY2VsdGRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRwYXkubG86IGdzdHJ0cGNlbHRwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBjZWx0cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwY2VsdHBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGNlbHRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwY2VsdHBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwY2VsdHBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBjZWx0cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGNlbHRwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwY2VsdHBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGNlbHRwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGNlbHRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwY2VsdHBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBkdmRlcGF5LmxvOiBnc3RydHBkdmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZHZkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGR2ZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBkdmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBkdmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGR2ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGR2ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZHZkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBkdmRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGR2ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBkdmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBkdmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGR2ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZHZwYXkubG86IGdzdHJ0cGR2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZHZwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBkdnBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGR2cGF5LmxvIGB0ZXN0IC1mICdnc3RydHBkdnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBkdnBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZHZwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZHZwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZHZwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwZHZwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBkdnBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZHZwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZHZwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZ3N0ZGVwYXkubG86IGdzdHJ0cGdzdGRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZ3N0ZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc3RkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGdzdGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnc3RkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnc3RkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZ3N0ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZ3N0ZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZ3N0ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwZ3N0ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnc3RkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZ3N0ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZ3N0ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZ3N0cGF5LmxvOiBnc3RydHBnc3RwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBnc3RwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc3RwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnc3RwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGdzdHBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnc3RwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGdzdHBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc3RwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZ3N0cGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGdzdHBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGdzdHBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZ3N0cGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGdzdHBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBpbGJjZGVwYXkubG86IGdzdHJ0cGlsYmNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwaWxiY2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGlsYmNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaWxiY2RlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBpbGJjZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaWxiY2RlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwaWxiY2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBpbGJjZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaWxiY2RlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNwYXkubG86IGdzdHJ0cGlsYmNwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBpbGJjcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaWxiY3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGlsYmNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaWxiY3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaWxiY3BheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBpbGJjcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGlsYmNwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaWxiY3BheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGlsYmNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGlsYmNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaWxiY3BheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBtcGFkZXBheS5sbzogZ3N0cnRwbXBhZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBtcGFkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYWRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXBhZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wYWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wYWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcGFkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcGFkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBtcGFkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBtcGFkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcGFkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBtcGFkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBtcGFwYXkubG86IGdzdHJ0cG1wYXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXBhcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wYXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXBhcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBtcGFwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXBhcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXBhcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcGFwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXBhcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXJvYnVzdGRlcGF5LmxvOiBnc3RydHBtcGFyb2J1c3RkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXJvYnVzdGRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXBhcm9idXN0ZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBtcGFyb2J1c3RkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXBhcm9idXN0ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXJvYnVzdGRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXJvYnVzdGRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cG1wYXJvYnVzdGRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXBhcm9idXN0ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wYXJvYnVzdGRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdmRlcGF5LmxvOiBnc3RydHBtcHZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdmRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXB2ZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBtcHZkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXB2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXB2ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdmRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdmRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wdmRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdmRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXB2ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wdmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wdmRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wdnBheS5sbzogZ3N0cnRwbXB2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwbXB2cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXB2cGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXB2cGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcHZwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXB2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcHZwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXB2cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wdnBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBtcHZwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBtcHZwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wdnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBtcHZwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwcGNtYWRlcGF5LmxvOiBnc3RydHBwY21hZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBwY21hZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBwY21hZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBwY21hZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHBjbWFkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBwY21hZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBwY21hZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwcGNtYWRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwcGNtYWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHBjbWFkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBwY211ZGVwYXkubG86IGdzdHJ0cHBjbXVkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwcGNtdWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHBjbXVkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcGNtdWRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBwY211ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwcGNtdWRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwcGNtdWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBwY211ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcGNtdWRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVwYXkubG86IGdzdHJ0cHBjbXVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBwY211cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcGNtdXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHBjbXVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcGNtdXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcGNtdXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBwY211cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHBjbXVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwcGNtdXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbXVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHBjbXVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcGNtdXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBwY21hcGF5LmxvOiBnc3RydHBwY21hcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwcGNtYXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBwY21hcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBwY21hcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHBjbWFwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcGNtYXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBwY21hcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHBjbWFwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBwY21hcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBwY21hcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHBjbWFwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZzcyMmRlcGF5LmxvOiBnc3RydHBnNzIyZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIyZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzIyZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIyZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGc3MjJkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzIyZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzIyZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZzcyMmRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZzcyMmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGc3MjJkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBnNzIycGF5LmxvOiBnc3RydHBnNzIycGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyMnBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIycGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnNzIycGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGc3MjJwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZzcyMnBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBnNzIycGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjJwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIycGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnNzIycGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGc3MjJwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZzcyM2RlcGF5LmxvOiBnc3RydHBnNzIzZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzIzZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGc3MjNkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzIzZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzIzZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZzcyM2RlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZzcyM2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGc3MjNkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzcGF5LmxvOiBnc3RydHBnNzIzcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyM3BheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnNzIzcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGc3MjNwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZzcyM3BheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBnNzIzcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjNwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzIzcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnNzIzcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGc3MjNwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZzcyNnBheS5sbzogZ3N0cnRwZzcyNnBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjZwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI2cGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyNnBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZzcyNnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzI2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI2cGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjZwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZzcyNnBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI2cGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyNnBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZzcyNnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzI2cGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjZkZXBheS5sbzogZ3N0cnRwZzcyNmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyNmRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZzcyNmRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyNmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnNzI2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZzcyNmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI2ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZzcyNmRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGc3MjZkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI2ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzI2ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGc3MjZkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzI2ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZzcyOXBheS5sbzogZ3N0cnRwZzcyOXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjlwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI5cGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyOXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZzcyOXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzI5cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI5cGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjlwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZzcyOXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI5cGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyOXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZzcyOXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzI5cGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGc3MjlkZXBheS5sbzogZ3N0cnRwZzcyOWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyOWRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZzcyOWRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwZzcyOWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnNzI5ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZzcyOWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI5ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZzcyOWRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGc3MjlkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBnNzI5ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnNzI5ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGc3MjlkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnNzI5ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZ3NtZGVwYXkubG86IGdzdHJ0cGdzbWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwZ3NtZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc21kZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBnc21kZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnc21kZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZ3NtZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwZ3NtZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZ3NtZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwZ3NtZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnc21kZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZ3NtZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZ3NtZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwZ3NtcGF5LmxvOiBnc3RydHBnc21wYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBnc21wYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc21wYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBnc21wYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGdzbXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBnc21wYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBnc21wYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZ3NtcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGdzbXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwZ3NtcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGdzbXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBhbXJkZXBheS5sbzogZ3N0cnRwYW1yZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBhbXJkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFtcmRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwYW1yZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGFtcmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGFtcmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBhbXJkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBhbXJkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBhbXJkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBhbXJkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGFtcmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBhbXJkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBhbXJkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBhbXJwYXkubG86IGdzdHJ0cGFtcnBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGFtcnBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFtcnBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGFtcnBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwYW1ycGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGFtcnBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwYW1ycGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGFtcnBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBhbXJwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwYW1ycGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwYW1ycGF5LmxvIGB0ZXN0IC1mICdnc3RydHBhbXJwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwYW1ycGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFwYXkubG86IGdzdHJ0cGgyNjFwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBoMjYxcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2MXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjFwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2MXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2MXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYxcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGgyNjFwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2MXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjFwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2MXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBoMjYxZGVwYXkubG86IGdzdHJ0cGgyNjFkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwaDI2MWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGgyNjFkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2MWRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjFkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBoMjYxZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2MWRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwaDI2MWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBoMjYxZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2MWRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwZGVwYXkubG86IGdzdHJ0cGgyNjNwZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcGRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjNwZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2M3BkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcGRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGgyNjNwZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjNwZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2M3BkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcHBheS5sbzogZ3N0cnRwaDI2M3BwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcHBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjNwcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGgyNjNwcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcHBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcHBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBoMjYzcHBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcHBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBoMjYzcHBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBoMjYzcHBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBoMjYzZGVwYXkubG86IGdzdHJ0cGgyNjNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwaDI2M2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGgyNjNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M2RlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBoMjYzZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2M2RlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwaDI2M2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBoMjYzZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2M2RlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwYXkubG86IGdzdHJ0cGgyNjNwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2M3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjYzcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGgyNjNwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2M3BheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2M3BheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBoMjY0ZGVwYXkubG86IGdzdHJ0cGgyNjRkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwaDI2NGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGgyNjRkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NGRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBoMjY0ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2NGRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwaDI2NGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBoMjY0ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2NGRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRwYXkubG86IGdzdHJ0cGgyNjRwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBoMjY0cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NHBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2NHBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NHBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjY0cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGgyNjRwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2NHBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjRwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2NHBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBoMjY1ZGVwYXkubG86IGdzdHJ0cGgyNjVkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwaDI2NWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGgyNjVkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NWRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBoMjY1ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2NWRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwaDI2NWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBoMjY1ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2NWRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVwYXkubG86IGdzdHJ0cGgyNjVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBoMjY1cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2NXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwaDI2NXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBoMjY1cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGgyNjVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwaDI2NXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGgyNjVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGgyNjVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaDI2NXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBqMmtkZXBheS5sbzogZ3N0cnRwajJrZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBqMmtkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGoya2RlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwajJrZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGoya2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGoya2RlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqMmtkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqMmtkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBqMmtkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBqMmtkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGoya2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBqMmtkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBqMmtkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBqMmtwYXkubG86IGdzdHJ0cGoya3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGoya3BheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGoya3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cGoya3BheS5sbyBgdGVzdCAtZiAnZ3N0cnRwajJrcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGoya3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwajJrcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGoya3BheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBqMmtwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwajJrcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwajJrcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBqMmtwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwajJrcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGpwZWdkZXBheS5sbzogZ3N0cnRwanBlZ2RlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwanBlZ2RlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwanBlZ2RlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwanBlZ2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBqcGVnZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwanBlZ2RlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqcGVnZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwanBlZ2RlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGpwZWdkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBqcGVnZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBqcGVnZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGpwZWdkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBqcGVnZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwanBlZ3BheS5sbzogZ3N0cnRwanBlZ3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGpwZWdwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqcGVncGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwanBlZ3BheS5sbyBgdGVzdCAtZiAnZ3N0cnRwanBlZ3BheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBqcGVncGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBqcGVncGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGpwZWdwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwanBlZ3BheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBqcGVncGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwanBlZ3BheS5sbyBgdGVzdCAtZiAnZ3N0cnRwanBlZ3BheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBqcGVncGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdmRlcGF5LmxvOiBnc3RydHBrbHZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdmRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwa2x2ZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBrbHZkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwa2x2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwa2x2ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdmRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdmRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGtsdmRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdmRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwa2x2ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGtsdmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGtsdmRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cGtsdnBheS5sbzogZ3N0cnRwa2x2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwa2x2cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwa2x2cGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwa2x2cGF5LmxvIGB0ZXN0IC1mICdnc3RydHBrbHZwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwa2x2cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBrbHZwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwa2x2cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGtsdnBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBrbHZwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBrbHZwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cGtsdnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBrbHZwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwTDE2ZGVwYXkubG86IGdzdHJ0cEwxNmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwTDE2ZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMTZkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cEwxNmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBMMTZkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBMMTZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwTDE2ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwTDE2ZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwTDE2ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwTDE2ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBMMTZkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwTDE2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwTDE2ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwTDE2cGF5LmxvOiBnc3RydHBMMTZwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBMMTZwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMTZwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBMMTZwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cEwxNnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBMMTZwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cEwxNnBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMTZwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwTDE2cGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cEwxNnBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cEwxNnBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwTDE2cGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cEwxNnBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBMMjRkZXBheS5sbzogZ3N0cnRwTDI0ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBMMjRkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNGRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwTDI0ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cEwyNGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cEwyNGRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMjRkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBMMjRkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBMMjRkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBMMjRkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBMMjRkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBMMjRkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBMMjRwYXkubG86IGdzdHJ0cEwyNHBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNHBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNHBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNHBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwTDI0cGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cEwyNHBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwTDI0cGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cEwyNHBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBMMjRwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwTDI0cGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwTDI0cGF5LmxvIGB0ZXN0IC1mICdnc3RydHBMMjRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwTDI0cGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdGFzdGVyaXNraDI2My5sbzogZ3N0YXN0ZXJpc2toMjYzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0YXN0ZXJpc2toMjYzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0YXN0ZXJpc2toMjYzLlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0YXN0ZXJpc2toMjYzLmxvIGB0ZXN0IC1mICdnc3Rhc3Rlcmlza2gyNjMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXN0ZXJpc2toMjYzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3Rhc3Rlcmlza2gyNjMuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0YXN0ZXJpc2toMjYzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFzdGVyaXNraDI2My5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3Rhc3Rlcmlza2gyNjMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3Rhc3Rlcmlza2gyNjMubG8gYHRlc3QgLWYgJ2dzdGFzdGVyaXNraDI2My5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rhc3Rlcmlza2gyNjMuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwbXAxc2RlcGF5LmxvOiBnc3RydHBtcDFzZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBtcDFzZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDFzZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBtcDFzZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wMXNkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBtcDFzZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMXNkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDFzZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwbXAxc2RlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMXNkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMXNkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXAxc2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wMXNkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBtcDJ0ZGVwYXkubG86IGdzdHJ0cG1wMnRkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXAydGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wMnRkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXAydGRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBtcDJ0ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXAydGRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXAydGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcDJ0ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXAydGRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRwYXkubG86IGdzdHJ0cG1wMnRwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBtcDJ0cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXAydHBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wMnRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXAydHBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXAydHBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDJ0cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wMnRwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXAydHBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wMnRwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wMnRwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXAydHBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBtcDR2ZGVwYXkubG86IGdzdHJ0cG1wNHZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXA0dmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wNHZkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0dmRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBtcDR2ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXA0dmRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXA0dmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcDR2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0dmRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZwYXkubG86IGdzdHJ0cG1wNHZwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBtcDR2cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0dnBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wNHZwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0dnBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0dnBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDR2cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wNHZwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXA0dnBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNHZwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wNHZwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0dnBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBtcDRnZGVwYXkubG86IGdzdHJ0cG1wNGdkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXA0Z2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wNGdkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0Z2RlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBtcDRnZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXA0Z2RlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXA0Z2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcDRnZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0Z2RlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdwYXkubG86IGdzdHJ0cG1wNGdwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBtcDRncGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0Z3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wNGdwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0Z3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0Z3BheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDRncGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wNGdwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXA0Z3BheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGdwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wNGdwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0Z3BheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBtcDRhZGVwYXkubG86IGdzdHJ0cG1wNGFkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwbXA0YWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG1wNGFkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0YWRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBtcDRhZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXA0YWRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwbXA0YWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBtcDRhZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0YWRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFwYXkubG86IGdzdHJ0cG1wNGFwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBtcDRhcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0YXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wNGFwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0YXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwbXA0YXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBtcDRhcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG1wNGFwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwbXA0YXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG1wNGFwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG1wNGFwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXA0YXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBvcHVzZGVwYXkubG86IGdzdHJ0cG9wdXNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwb3B1c2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cG9wdXNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwb3B1c2RlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBvcHVzZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwb3B1c2RlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwb3B1c2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBvcHVzZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwb3B1c2RlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNwYXkubG86IGdzdHJ0cG9wdXNwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBvcHVzcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwb3B1c3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG9wdXNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwb3B1c3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwb3B1c3BheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBvcHVzcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cG9wdXNwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwb3B1c3BheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cG9wdXNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cG9wdXNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwb3B1c3BheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBxY2VscGRlcGF5LmxvOiBnc3RydHBxY2VscGRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwcWNlbHBkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHFjZWxwZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBxY2VscGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBxY2VscGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHFjZWxwZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHFjZWxwZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcWNlbHBkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBxY2VscGRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHFjZWxwZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBxY2VscGRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBxY2VscGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHFjZWxwZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkubG86IGdzdHJ0cHFkbWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBxZG1kZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHFkbWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBxZG1kZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBxZG1kZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwcWRtZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwcWRtZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBxZG1kZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwcWRtZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcWRtZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwc2JjZGVwYXkubG86IGdzdHJ0cHNiY2RlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwc2JjZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzYmNkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHNiY2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBzYmNkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzYmNkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc2JjZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc2JjZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwc2JjZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwc2JjZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzYmNkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc2JjZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc2JjZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwc2JjcGF5LmxvOiBnc3RydHBzYmNwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBzYmNwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzYmNwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzYmNwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHNiY3BheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzYmNwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNiY3BheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzYmNwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwc2JjcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHNiY3BheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHNiY3BheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc2JjcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHNiY3BheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbnBheS5sbzogZ3N0cnRwc2lyZW5wYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbnBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVucGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc2lyZW5wYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHNpcmVucGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHNpcmVucGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbnBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbnBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBzaXJlbnBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbnBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVucGF5LmxvIGB0ZXN0IC1mICdnc3RydHBzaXJlbnBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzaXJlbnBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbmRlcGF5LmxvOiBnc3RydHBzaXJlbmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwc2lyZW5kZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVuZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBzaXJlbmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHNpcmVuZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVuZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc2lyZW5kZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBzaXJlbmRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHNpcmVuZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzaXJlbmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBzaXJlbmRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHNpcmVuZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhkZXBheS5sbzogZ3N0cnRwc3BlZXhkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4ZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzcGVleGRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc3BlZXhkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzcGVleGRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzcGVleGRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4ZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwc3BlZXhkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBzcGVleGRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc3BlZXhkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzcGVleGRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4cGF5LmxvOiBnc3RydHBzcGVleHBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzcGVleHBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc3BlZXhwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc3BlZXhwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4cGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHNwZWV4cGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHNwZWV4cGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3BlZXhwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHNwZWV4cGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHNwZWV4cGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHN2M3ZkZXBheS5sbzogZ3N0cnRwc3YzdmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwc3YzdmRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3YzdmRlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3YzdmRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBzdjN2ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc3YzdmRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHBzdjN2ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3YzdmRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHN2M3ZkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHBzdjN2ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzdjN2ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHN2M3ZkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzdjN2ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhZGVwYXkubG86IGdzdHJ0cHRoZW9yYWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB0aGVvcmFkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHB0aGVvcmFkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB0aGVvcmFkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwdGhlb3JhZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB0aGVvcmFkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdGhlb3JhZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdGhlb3JhZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwdGhlb3JhcGF5LmxvOiBnc3RydHB0aGVvcmFwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHB0aGVvcmFwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB0aGVvcmFwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB0aGVvcmFwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHRoZW9yYXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB0aGVvcmFwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB0aGVvcmFwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwdGhlb3JhcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHRoZW9yYXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdGhlb3JhcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHRoZW9yYXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNkZXBheS5sbzogZ3N0cnRwdm9yYmlzZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZvcmJpc2RlcGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwdm9yYmlzZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHZvcmJpc2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHZvcmJpc2RlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNkZXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHB2b3JiaXNkZXBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNkZXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZvcmJpc2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHB2b3JiaXNkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB2b3JiaXNkZXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHB2b3JiaXNwYXkubG86IGdzdHJ0cHZvcmJpc3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHZvcmJpc3BheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZvcmJpc3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZvcmJpc3BheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdm9yYmlzcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHZvcmJpc3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdm9yYmlzcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZvcmJpc3BheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHB2b3JiaXNwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwdm9yYmlzcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwdm9yYmlzcGF5LmxvIGB0ZXN0IC1mICdnc3RydHB2b3JiaXNwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdm9yYmlzcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOGRlcGF5LmxvOiBnc3RydHB2cDhkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOGRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA4ZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB2cDhkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdnA4ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdnA4ZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOGRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOGRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHZwOGRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOGRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwdnA4ZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHZwOGRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHZwOGRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOHBheS5sbzogZ3N0cnRwdnA4cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwdnA4cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA4cGF5LlRwbyAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwdnA4cGF5LmxvIGB0ZXN0IC1mICdnc3RydHB2cDhwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdnA4cGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2cDhwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA4cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHZwOHBheS5jJyBvYmplY3Q9J2xpYmdzdHJ0cF9sYS1nc3RydHB2cDhwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB2cDhwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHZwOHBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB2cDhwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwdnA5ZGVwYXkubG86IGdzdHJ0cHZwOWRlcGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBfbGEtZ3N0cnRwdnA5ZGVwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2cDlkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOWRlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHB2cDlkZXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB2cDlkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA5ZGVwYXkuVHBvICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnA5ZGVwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwdnA5ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwdnA5ZGVwYXkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB2cDlkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdnA5ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdnA5ZGVwYXkuYwotCi1saWJnc3RydHBfbGEtZ3N0cnRwdnA5cGF5LmxvOiBnc3RydHB2cDlwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHB2cDlwYXkubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2cDlwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB2cDlwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHZwOXBheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHB2cDlwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOXBheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2cDlwYXkuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwdnA5cGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOXBheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZwOXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdnA5cGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHZwOXBheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHB2cmF3ZGVwYXkubG86IGdzdHJ0cHZyYXdkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdkZXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdkZXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdkZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwdnJhd2RlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHZyYXdkZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnJhd2RlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdkZXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHB2cmF3ZGVwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwdnJhd2RlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwdnJhd2RlcGF5LmxvIGB0ZXN0IC1mICdnc3RydHB2cmF3ZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdnJhd2RlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdwYXkubG86IGdzdHJ0cHZyYXdwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cF9sYS1nc3RydHB2cmF3cGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnJhd3BheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHZyYXdwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdnJhd3BheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdnJhd3BheS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cF9sYS1nc3RydHB2cmF3cGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHZyYXdwYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwdnJhd3BheS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHZyYXdwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHZyYXdwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdnJhd3BheS5jCi0KLWxpYmdzdHJ0cF9sYS1nc3RydHBzdHJlYW1wYXkubG86IGdzdHJ0cHN0cmVhbXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbXBheS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbXBheS5UcG8gLWMgLW8gbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc3RyZWFtcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHN0cmVhbXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbXBheS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBzdHJlYW1wYXkuYycgb2JqZWN0PSdsaWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtcGF5LmxvIGB0ZXN0IC1mICdnc3RydHBzdHJlYW1wYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc3RyZWFtcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbWRlcGF5LmxvOiBnc3RydHBzdHJlYW1kZXBheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbWRlcGF5LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtZGVwYXkuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHBzdHJlYW1kZXBheS5sbyBgdGVzdCAtZiAnZ3N0cnRwc3RyZWFtZGVwYXkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc3RyZWFtZGVwYXkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbWRlcGF5LlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbWRlcGF5LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHN0cmVhbWRlcGF5LmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHN0cmVhbWRlcGF5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwc3RyZWFtZGVwYXkubG8gYHRlc3QgLWYgJ2dzdHJ0cHN0cmVhbWRlcGF5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHN0cmVhbWRlcGF5LmMKLQotbGliZ3N0cnRwX2xhLWdzdHJ0cHV0aWxzLmxvOiBnc3RydHB1dGlscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwX2xhLWdzdHJ0cHV0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBfbGEtZ3N0cnRwdXRpbHMuVHBvIC1jIC1vIGxpYmdzdHJ0cF9sYS1nc3RydHB1dGlscy5sbyBgdGVzdCAtZiAnZ3N0cnRwdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwdXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHV0aWxzLlRwbyAkKERFUERJUikvbGliZ3N0cnRwX2xhLWdzdHJ0cHV0aWxzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHV0aWxzLmMnIG9iamVjdD0nbGliZ3N0cnRwX2xhLWdzdHJ0cHV0aWxzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBfbGEtZ3N0cnRwdXRpbHMubG8gYHRlc3QgLWYgJ2dzdHJ0cHV0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHV0aWxzLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9SRUFETUUgYi9nc3QvcnRwL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0MzExZS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM5OCArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBzb21lIFJUUCBwYXlsb2FkZXJzL2RlcGF5bG9hZGVycyBmb3IgZGlmZmVyZW50IHBheWxvYWQKLXR5cGVzLiBVc2Ugb25lIHBheWxvYWRlci9kZXBheWxvZGVyIHBhaXIgcGVyIHBheWxvYWQuIElmIHNldmVyYWwgcGF5bG9hZHMgY2FuIGJlCi1wYXlsb2FkZWQvZGVwYXlsb2FkZWQgYnkgdGhlIHNhbWUgZWxlbWVudCwgbWFrZSBkaWZmZXJlbnQgY29waWVzIG9mIGl0LCBvbmUgZm9yCi1lYWNoIHBheWxvYWQuCi0KLVRoZSBhcHBsaWNhdGlvbi94LXJ0cCBtaW1lIHR5cGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRm9yIHZhbGlkIFJUUCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCBpbiBHc3RCdWZmZXJzLCB3ZSB1c2UgdGhlIGNhcHMgd2l0aAotbWltZSB0eXBlIGFwcGxpY2F0aW9uL3gtcnRwLgotCi1UaGUgZm9sbG93aW5nIGZpZWxkcyBjYW4gb3IgbXVzdCAoKikgYmUgc3BlY2lmaWVkIGluIHRoZSBzdHJ1Y3R1cmU6Ci0KLSAqIG1lZGlhOiAoU3RyaW5nKSBbICJhdWRpbyIsICJ2aWRlbyIsICJhcHBsaWNhdGlvbiIsICJkYXRhIiwgImNvbnRyb2wiIF0KLSAgICAgRGVmaW5lZCBpbiBSRkMgMjMyNyBpbiB0aGUgU0RQIG1lZGlhIGFubm91bmNlbWVudCBmaWVsZC4KLSAgICAgQ29udmVydGVkIHRvIGxvd2VyIGNhc2UuCi0KLSAqIHBheWxvYWQ6IChpbnQpIFswLCAxMjddCi0gICAgIEZvciBhdWRpbyBhbmQgdmlkZW8sIHRoZXNlIHdpbGwgbm9ybWFsbHkgYmUgYSBtZWRpYSBwYXlsb2FkIHR5cGUgYXMgCi0gICAgIGRlZmluZWQgaW4gdGhlIFJUUCBBdWRpby9WaWRlbyBQcm9maWxlLiBGb3IgZHluYW1pY2FseSBhbGxvY2F0ZWQgCi0gICAgIHBheWxvYWQgdHlwZXMsIHRoaXMgdmFsdWUgd2lsbCBiZSA+PSA5NiBhbmQgdGhlIGVuY29kaW5nLW5hbWUgbXVzdCBiZQotICAgICBzZXQuCi0KLSAqIGNsb2NrLXJhdGU6IChpbnQpIFswIC0gTUFYSU5UXQotICAgIFRoZSBSVFAgY2xvY2sgcmF0ZS4gCi0KLSAgIGVuY29kaW5nLW5hbWU6IChTdHJpbmcpIEFOWQotICAgICB0eXBpY2FsbHkgc2Vjb25kIHBhcnQgb2YgdGhlIG1pbWUgdHlwZS4gZXguIE1QNFYtRVMuIG9ubHkgcmVxdWlyZWQgaWYKLSAgICAgcGF5bG9hZCB0eXBlID49IDk2LiBDb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZS4KLQotICAgZW5jb2RpbmctcGFyYW1zOiAoU3RyaW5nKSBBTlkKLSAgICAgZXh0cmEgZW5jb2RpbmcgcGFyYW1ldGVycyAoYXMgaW4gdGhlIFNEUCBhPXJ0cG1hcDogZmllbGQpLiBvbmx5IHJlcXVpcmVkCi0gICAgIGlmIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IG9mIHRoZSBlbmNvZGluZy1uYW1lLgotICAgICBDb252ZXJ0ZWQgdG8gbG93ZXItY2FzZS4KLSAgICAgCi0gICBzc3JjOiAodWludCkgWzAgLSBNQVhJTlRdCi0gICAgVGhlIHNzcmMgdmFsdWUgY3VycmVudGx5IGluIHVzZS4gKGRlZmF1bHQgPSB0aGUgU1NSQyBvZiB0aGUgZmlyc3QgUlRQCi0gICAgcGFja2V0KQotCi0gICB0aW1lc3RhbXAtb2Zmc2V0OiAodWludCkgWzAgLSBNQVhJTlRdCi0gICAgVGhlIFJUUCB0aW1lIHJlcHJlc2VudGluZyB0aW1lIG5wdC1zdGFydC4gKGRlZmF1bHQgPSBydHB0aW1lIG9mIGZpcnN0IFJUUAotICAgIHBhY2tldCkuCi0KLSAgIHNlcW51bS1vZmZzZXQ6ICh1aW50KSBbMCAtIE1BWElOVF0KLSAgICBUaGUgUlRQIHNlcXVlbmNlIG51bWJlciByZXByZXNlbnRpbmcgdGhlIGZpcnN0IHJ0cCBwYWNrZXQuIFdoZW4gdGhpcwotICAgIHBhcmFtZXRlciBpcyBnaXZlbiwgYWxsIHNlcXVlbmNlIG51bWJlcnMgYmVsb3cgdGhpcyBzZXFudW0gc2hvdWxkIGJlCi0gICAgaWdub3JlZC4gKGRlZmF1bHQgPSBzZXFudW0gb2YgZmlyc3QgUlRQIHBhY2tldCkuCi0KLSAgIG5wdC1zdGFydDogKHVpbnQ2NCkgWzAgLSBNQVhJTlRdCi0gICAgVGhlIE5vcm1hbCBQbGF5IFRpbWUgZm9yIGNsb2NrLWJhc2UuIFRoaXMgaXMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0gYW5kCi0gICAgaXMgYmV0d2VlbiAwIGFuZCB0aGUgZHVyYXRpb24gb2YgdGhlIHN0cmVhbS4gVGhpcyB2YWx1ZSBpcyBleHByZXNzZWQgaW4KLSAgICBuYW5vc2Vjb25kcyBHc3RDbG9ja1RpbWUuIChkZWZhdWx0ID0gMCkKLQotICAgbnB0LXN0b3A6ICh1aW50NjQpIFswIC0gTUFYSU5UXSAKLSAgICBUaGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtLiBUaGlzIHZhbHVlIGlzIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcwotICAgIEdzdENsb2NrVGltZS4gKGRlZmF1bHQgPSAtMSwgc3RvcCB1bmtub3duKQotCi0gICBwbGF5LXNwZWVkOiAoZ2RvdWJsZSkgWy1NSU4gLSBNQVhdCi0gICAgVGhlIGludGVuZGVkIHBsYXliYWNrIHNwZWVkIG9mIHRoZSBzdHJlYW0uIFRoZSBjbGllbnQgaXMgZGVsaXZlcmVkIGRhdGEgYXQKLSAgICB0aGUgYWRqdXN0ZWQgc3BlZWQuIFRoZSBjbGllbnQgc2hvdWxkIGFkanVzdCBpdHMgcGxheWJhY2sgc3BlZWQgd2l0aCB0aGlzCi0gICAgdmFsdWUgYW5kIHRodXMgY29ycmVzcG9uZHMgdG8gdGhlIEdTdHJlYW1lciByYXRlIGZpZWxkIGluIHRoZSBORVdTRUdNRU5UCi0gICAgZXZlbnQuIChkZWZhdWx0ID0gMS4wKQotICAgIAotICAgcGxheS1zY2FsZTogKGdkb3VibGUpIFstTUlOIC0gTUFYXQotICAgIFRoZSByYXRlIGFscmVhZHkgYXBwbGllZCB0byB0aGUgc3RyZWFtLiBUaGUgY2xpZW50IGlzIGRlbGl2ZXJlZCBhIHN0cmVhbQotICAgIHRoYXQgaXMgc2NhbGVkIGJ5IHRoaXMgYW1vdW50LiBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gYWRqdXN0IHBvc2l0aW9uCi0gICAgcmVwb3J0aW5nIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgR1N0cmVhbSBhcHBsaWVkLXJhdGUgZmllbGQgaW4gdGhlCi0gICAgTkVXU0VHTUVOVCBldmVudC4gKGRlZmF1bHQgPSAxLjApCi0KLSAgIG1heHB0aW1lOiAodWludCkgWzAsIE1BWF0KLSAgICBUaGUgbWF4cHRpbWUgYXMgZGVmaW5lZCBpbiBSRkMgNDU2NiwgdGhpcyBkZWZpbmVzIHRoZSBtYXhpbXVtIHNpemUgb2YgYQotICAgIHBhY2tldC4gSXQgb3ZlcnJpZGVzIHRoZSBtYXgtcHRpbWUgcHJvcGVydHkgb2YgcGF5bG9hZGVycy4KLQotICAgT3B0aW9uYWwgcGFyYW1ldGVycyBhcyBrZXkvdmFsdWUgcGFpcnMsIG1lZGlhIHR5cGUgc3BlY2lmaWMuIFRoZSB2YWx1ZSB0eXBlCi0gICBzaG91bGQgYmUgb2YgdHlwZSBHX1RZUEVfU1RSSU5HLiBUaGUga2V5IGlzIGNvbnZlcnRlZCB0byBsb3dlci1jYXNlLiBUaGUKLSAgIHZhbHVlIGlzIGxlZnQgaW4gaXRzIG9yaWdpbmFsIGNhc2UuCi0gICBBIHBhcmFtZXRlciB3aXRoIG5vIHZhbHVlIGlzIGNvbnZlcnRlZCB0byA8cGFyYW0+PTEuCi0KLSBFeGFtcGxlOgotCi0gICJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAiYXVkaW8iLAkJLS4KLSAgICAgICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgOTYsICAgICAgICAgICAgICAgICB8IC0gcmVxdWlyZWQKLSAgICAgICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgODAwMCwgICAgICAgICAgIC0nCi0gICAgICAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsICJBTVIiLCAgICAtLiAtIHJlcXVpcmVkIHNpbmNlIHBheWxvYWQgPj0gOTYKLSAgICAgICJlbmNvZGluZy1wYXJhbXMiLCBHX1RZUEVfU1RSSU5HLCAiMSIsCS0nIC0gb3B0aW9uYWwgcGFyYW0gZm9yIEFNUgotICAgICAgIm9jdGV0LWFsaWduIiwgR19UWVBFX1NUUklORywgIjEiLAktLgotICAgICAgImNyYyIsIEdfVFlQRV9TVFJJTkcsICIwIiwgICAgICAgICAgICAgICAgIHwKLSAgICAgICJyb2J1c3Qtc29ydGluZyIsIEdfVFlQRV9TVFJJTkcsICIwIiwgICAgICB8ICBBTVIgc3BlY2lmaWMgcGFyYW1zLgotICAgICAgImludGVybGVhdmluZyIsIEdfVFlQRV9TVFJJTkcsICIwIiwgICAgICAgLScKLSAgCi0gTWFwcGluZyBvZiBjYXBzIHRvIGFuZCBmcm9tIFNEUCBmaWVsZHM6Ci0KLSAgIG09PG1lZGlhPiA8dWRwIHBvcnQ+IFJUUC9BVlAgPHBheWxvYWQ+ICAgICAgIC1dIG1lZGlhIGFuZCBwYXlsb2FkIGZyb20gY2FwcwotICAgYT1ydHBtYXA6PHBheWxvYWQ+IDxlbmNvZGluZy1uYW1lPi88Y2xvY2stcmF0ZT5bLzxlbmNvZGluZy1wYXJhbXM+XQotICAgICAgICAgICAgICAtPiB3aGVuIDxwYXlsb2FkPiA+PSA5NgotICAgYT1mbXRwOjxwYXlsb2FkPiA8cGFyYW0+PTx2YWx1ZT47Li4uCi0KLSBGb3IgYWJvdmUgY2FwczoKLQotICAgbT1hdWRpbyA8dWRwIHBvcnQ+IFJUUC9BVlAgOTYKLSAgIGE9cnRwbWFwOjk2IEFNUi84MDAwLzEKLSAgIGE9Zm10cDo5NiBvY3RldC1hbGlnbj0xO2NyYz0wO3JvYnVzdC1zb3J0aW5nPTA7aW50ZXJsZWF2aW5nPTAKLQotIEF0dHJpYnV0ZXMgYXJlIGNvbnZlcnRlZCBhcyBmb2xsb3dzOgotCi0gIElBTkEgcmVnaXN0ZXJlZCBhdHRyaWJ1dGUgbmFtZXMgYXJlIHByZXBlbmRlZCB3aXRoICdhLScgYmVmb3JlIHB1dHRpbmcgdGhlbSBpbgotICB0aGUgY2Fwcy4gVW5yZWdpc3RlcmVkIGtleXMgKHN0YXJ0aW5nIHdpdGggJ3gtJykgYXJlIGNvcGllZCBkaXJlY3RseSBpbnRvIHRoZQotICBjYXBzLgotCi0gaW4gUlRTUCwgdGhlIFNTUkMgaXMgYWxzbyBzZW50LgotCi0gVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgaW4gdGhlIFNEUCBmaWVsZHMgYXJlIGNhc2UgaW5zZW5zaXRpdmUuIEluIHRoZSBjYXBzIHdlCi0gYWx3YXlzIHVzZSB0aGUgbG93ZXJjYXNlIG5hbWVzIHNvIHRoYXQgdGhlIFNEUCAtPiBjYXBzIG1hcHBpbmcgcmVtYWlucwotIHBvc3NpYmxlLgotCi0gTWFwcGluZyBvZiBjYXBzIHRvIE5FV1NFR01FTlQ6Ci0KLSAgcmF0ZTogICAgICAgICA8cGxheS1zcGVlZD4KLSAgYXBwbGllZC1yYXRlOiA8cGxheS1zY2FsZT4KLSAgZm9ybWF0OiAgICAgICBHU1RfRk9STUFUX1RJTUUKLSAgc3RhcnQ6ICAgICAgICA8Y2xvY2stYmFzZT4gKiBHU1RfU0VDT05EIC8gPGNsb2NrLXJhdGU+Ci0gIHN0b3A6ICAgICAgICAgaWYgPG50cC1zdG9wPiAhPSAtMQotICAgICAgICAgICAgICAgICAgPG5wdC1zdG9wPiAtIDxucHQtc3RhcnQ+ICsgc3RhcnQKLQkJZWxzZSAKLQkJICAtMQotICB0aW1lOiAgICAgICAgIDxucHQtc3RhcnQ+Ci0KLQotVGltZXN0YW1waW5nCi0tLS0tLS0tLS0tLS0KLQotUlRQIGluIEdTdHJlYW1lciB1c2VzIGEgY29tYmluYXRpb24gb2YgdGhlIFJUUCB0aW1lc3RhbXBzIGFuZCBHU3RyZWFtZXIgYnVmZmVyCi10aW1lc3RhbXBzIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pc2F0aW9uIGF0IHRoZSBzZW5kZXIgYW5kIHRoZSByZWNlaXZlciBlbmQuCi0KLUluIFJUUCBhcHBsaWNhdGlvbnMsIHRoZSBzeW5jaHJvbmlzYXRpb24gaXMgbW9zdCBjb21wbGV4IGF0IHRoZSByZWNlaXZlciBzaWRlLgotCi1BdCB0aGUgc2VuZGVyIHNpZGUsIHRoZSBSVFAgdGltZXN0YW1wcyBhcmUgZ2VuZXJhdGVkIGluIHRoZSBwYXlsb2FkZXJzIGJhc2VkIG9uCi1HU3RyZWFtZXIgdGltZXN0YW1wcy4gQXQgdGhlIHJlY2VpdmVyLCBHU3RyZWFtZXIgdGltZXN0YW1wcyBhcmUgcmVjb25zdHJ1Y3RlZAotZnJvbSB0aGUgUlRQIHRpbWVzdGFtcHMgYW5kIHRoZSBHU3RyZWFtZXIgdGltZXN0YW1wcyBpbiB0aGUgaml0dGVyYnVmZmVyLiBUaGlzCi1wcm9jZXNzIGlzIGV4cGxhaW5lZCBpbiBtb3JlIGRldGFpbCBiZWxvdy4KLQotPSBzeW5jaHJvbmlzYXRpb24gYXQgdGhlIHNlbmRlcgotCi1JbmRpdmlkdWFsIHN0cmVhbXMgYXQgdGhlIHNlbmRlciBhcmUgc3luY2hyb25pc2VkIHVzaW5nIEdTdHJlYW1lciB0aW1lc3RhbXBzLgotVGhlIHBheWxvYWRlciBhdCB0aGUgc2VuZGVyIHdpbGwgY29udmVydCB0aGUgR1N0cmVhbWVyIHRpbWVzdGFtcCBpbnRvIGFuIFJUUAotdGltZXN0YW1wIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKLQotICAgUlRQID0gKChSVCAtIFJULWJhc2UpICogY2xvY2stcmF0ZSAvIEdTVF9TRUNPTkQpICsgUlRQLW9mZnNldAotCi0gIFJUUDogICAgICAgIHRoZSBSVFAgdGltZXN0YW1wIGZvciB0aGUgc3RyZWFtLiBUaGlzIHZhbHVlIGlzIHRydW5jYXRlZCB0bwotICAgICAgICAgICAgICAzMiBiaXRzLgotICBSVDogICAgICAgICB0aGUgR1N0cmVhbWVyIHJ1bm5pbmcgdGltZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0aW1lc3RhbXAgb2YgdGhlCi0gICAgICAgICAgICAgIHBhY2tldCB0byBwYXlsb2FkCi0gIFJULWJhc2U6ICAgIHRoZSBHU3RyZWFtZXIgcnVubmluZyB0aW1lIG9mIHRoZSBmaXJzdCBwYWNrZXQgZW5jb2RlZAotICBjbG9jay1yYXRlOiB0aGUgY2xvY2stcmF0ZSBvZiB0aGUgc3RyZWFtCi0gIFJUUC1vZmZzZXQ6IGEgcmFuZG9tIFJUUCBvZmZzZXQKLQotVGhlIFJUUCB0aW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byBSVC1iYXNlIGlzIHRoZSBjbG9jay1iYXNlIChzZWUgY2FwcyBhYm92ZSkuIAotCi1JbiBhZGRpdGlvbiB0byBzZXR0aW5nIGFuIFJUUCB0aW1lc3RhbXAgaW4gdGhlIFJUUCBwYWNrZXQsIHRoZSBwYXlsb2FkZXIgaXMgYWxzbwotcmVzcG9uc2libGUgZm9yIHB1dHRpbmcgdGhlIEdTdHJlYW1lciB0aW1lc3RhbXAgb24gdGhlIHJlc3VsdGluZyBvdXRwdXQgYnVmZmVyLgotVGhpcyB0aW1lc3RhbXAgaXMgdXNlZCBmb3IgZnVydGhlciBzeW5jaHJvbmlzYXRpb24gYXQgdGhlIHNlbmRlciBwaXBlbGluZSwgc3VjaAotYXMgZm9yIHNlbmRpbmcgb3V0IHRoZSBwYWNrZXQgb24gdGhlIG5ldHdvcmsuCi0KLU5vdGljZSB0aGF0IHRoZSBhYnNvbHV0ZSB0aW1pbmcgaW5mb3JtYXRpb24gaXMgbG9zdDsgaWYgdGhlIHNlbmRlciBpcyBzZW5kaW5nCi1tdWx0aXBsZSBzdHJlYW1zLCB0aGUgUlRQIHRpbWVzdGFtcHMgaW4gdGhlIHBhY2tldHMgZG8gbm90IGNvbnRhaW4gZW5vdWdoCi1pbmZvcm1hdGlvbiB0byBzeW5jaHJvbml6ZSB0aGVtIGluIHRoZSByZWNlaXZlci4gVGhlIHJlY2VpdmVyIGNhbiBob3dldmVyIHVzZQotdGhlIFJUUCB0aW1lc3RhbXBzIHRvIHJlY29uc3RydWN0IHRoZSB0aW1pbmcgb2YgdGhlIHN0cmVhbSBhcyBpdCB3YXMgY3JlYXRlZCBieQotdGhlIHNlbmRlciBhY2NvcmRpbmcgdG8gdGhlIHNlbmRlcidzIGNsb2NrLgotCi1CZWNhdXNlIHRoZSBwYXlsb2FkZWQgcGFja2V0IGNvbnRhaW5zIGJvdGggYW4gUlRQIHRpbWVzdGFtcCBhbmQgYSBHU3RyZWFtZXIKLXRpbWVzdGFtcCwgaXQgaXMgcG9zc2libGUgZm9yIGFuIFJUUCBzZXNzaW9uIG1hbmFnZXIgdG8gZGVyaXZlIHRoZSByZWxhdGlvbgotYmV0d2VlbiB0aGUgUlRQIGFuZCBHU1QgdGltZXN0YW1wcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIGJ5IGEgc2Vzc2lvbgotbWFuYWdlciB0byBjcmVhdGUgU1IgcmVwb3J0cy4gVGhlIE5UUCB0aW1lIGluIHRoZSByZXBvcnQgd2lsbCBjb250YWluIHRoZQotcnVubmluZyB0aW1lIGNvbnZlcnRlZCB0byBOVFAgdGltZSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgUlRQIHRpbWVzdGFtcC4KLQotTm90ZSB0aGF0IGF0IHRoZSBzZW5kZXIgc2lkZSwgdGhlIFJUUCBhbmQgR1N0cmVhbWVyIHRpbWVzdGFtcCBib3RoIGluY3JlbWVudCBhdAotdGhlIHNhbWUgcmF0ZSwgdGhlIHNlbmRlciByYXRlLiBUaGlzIHJhdGUgZGVwZW5kcyBvbiB0aGUgZ2xvYmFsIHBpcGVsaW5lIGNsb2NrCi1vZiB0aGUgc2VuZGVyLiAKLQotU29tZSBwaXBlbGluZXMgdG8gaWxsdXN0cmF0ZSB0aGUgcHJvY2VzczoKLQotICAgIGdzdC1sYXVuY2gtMS4wIHY0bDJzcmMgISB2aWRlb2NvbnZlcnQgISBhdmVuY19oMjYzcCAhIHJ0cGgyNjNwcGF5ICEgdWRwc2luawotCi0gIHY0bDJzcmMgcHV0cyBhIEdTdHJlYW1lciB0aW1lc3RhbXAgb24gdGhlIHZpZGVvIGZyYW1lcyBiYXNlIG9uIHRoZSBjdXJyZW50Ci0gIHJ1bm5pbmdfdGltZS4gVGhlIGVuY29kZXIgZW5jb2RlcyBhbmQgcGFzc2VkIHRoZSB0aW1lc3RhbXAgb24uIFRoZSBwYXlsb2FkZXIKLSAgZ2VuZXJhdGVzIGFuIFJUUCB0aW1lc3RhbXAgdXNpbmcgdGhlIGFib3ZlIGZvcm11bGEgYW5kIHB1dHMgaXQgaW4gdGhlIFJUUAotICBwYWNrZXQuIEl0IGFsc28gY29waWVzIHRoZSBpbmNvbW1pbmcgR1N0cmVhbWVyIHRpbWVzdGFtcCBvbiB0aGUgb3V0cHV0IFJUUAotICBwYWNrZXQuIHVkcHNpbmsgc3luY2hyb25pemVzIG9uIHRoZSBnc3RyZWFtZXIgdGltZXN0YW1wIGJlZm9yZSBwdXNoaW5nIG91dCB0aGUKLSAgcGFja2V0LiAKLQotCi09IHN5bmNocm9uaXNhdGlvbiBhdCB0aGUgcmVjZWl2ZXIKLQotVGhlIHJlY2VpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciB0aW1lc3RhbXBpbmcgdGhlIHJlY2VpdmVkIFJUUCBwYWNrZXQgd2l0aCB0aGUKLXJ1bm5pbmdfdGltZSBvZiB0aGUgY2xvY2sgYXQgdGhlIHRpbWUgdGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQuIFRoaXMgR1N0cmVhbWVyCi10aW1lc3RhbXAgcmVmbGVjdHMgdGhlIHJlY2VpdmVyIHJhdGUgYW5kIGRlcGVuZHMgb24gdGhlIGdsb2JhbCBwaXBlbGluZSBjbG9jayBvZgotdGhlIHJlY2VpdmVyLiBUaGUgZ3N0cmVhbWVyIHRpbWVzdGFtcCBvZiB0aGUgcmVjZWl2ZWQgUlRQIHBhY2tldCBjb250YWlucyBhCi1jZXJ0YWluIGFtb3VudCBvZiBqaXR0ZXIgaW50cm9kdWNlZCBieSB0aGUgbmV0d29yay4KLQotVGhlIG1vc3Qgc2ltcGxlIG9wdGlvbiBmb3IgdGhlIHJlY2VpdmVyIGlzIHRvIGRlcGF5bG9hZCB0aGUgUlRQIHBhY2tldCBhbmQgcGxheQotaXQgYmFjayBhcyBzb29uIGFzIHBvc3NpYmxlLCB0aGlzIGlzIHdpdGggdGhlIHRpbWVzdGFtcCB3aGVuIGl0IHdhcyByZWNlaXZlZAotZnJvbSB0aGUgbmV0d29yay4gRm9yIHRoZSBhYm92ZSBzZW5kZXIgcGlwZWxpbmUgdGhpcyB3b3VsZCBiZSBkb25lIHdpdGggdGhlCi1mb2xsb3dpbmcgcGlwZWxpbmU6Ci0KLSAgICBnc3QtbGF1bmNoLTEuMCB1ZHBzcmMgY2Fwcz0iYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sCi0gICAgICBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzLTE5OTgiICEgcnRwaDI2M3BkZXBheSAhCi0gICAgICBhdmRlY19oMjYzICEgYXV0b3ZpZGVvc2luawotCi1JdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZGVwYXlsb2FkZXIgY29waWVzIHRoZSBpbmNvbW1pbmcgR1N0cmVhbWVyIHRpbWVzdGFtcAotZGlyZWN0bHkgdG8gdGhlIGRlcGF5bG9hZGVkIG91dHB1dCBidWZmZXIuIEl0IHNob3VsZCBuZXZlciBhdHRlbXB0IHRvIHBlcmZvcm0KLWFueSBsb2dpYyB3aXRoIHRoZSBSVFAgdGltZXN0YW1wLCB0aGlzIHRhc2sgaXMgZm9yIHRoZSBqaXR0ZXJidWZmZXIgYXMgd2Ugd2lsbAotc2VlIG5leHQuCi0KLVRoZSBhYm92ZSBwaXBlbGluZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGRlYWwgd2l0aCByZW9yZGVyZWQgcGFja2V0cyBvciBuZXR3b3JrCi1qaXR0ZXIsIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBqZXJreSBwbGF5YmFjayBpbiB0aGUgY2FzZSBvZiBoaWdoIGppdHRlciBvcgotY29ycnVwdGVkIHZpZGVvIGluIHRoZSBjYXNlIG9mIHBhY2tldCBsb3NzIG9yIHJlb3JkZXJpbmcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcwotcGVyZm9ybWVkIGJ5IHRoZSBnc3RydHBqaXR0ZXJidWZmZXIgaW4gR1N0cmVhbWVyLgotCi1UaGUgdGFzayBvZiB0aGUgZ3N0cnRwaml0dGVyYnVmZmVyIGVsZW1lbnQgaXMgdG86Ci0KLSAtIGRlYWwgd2l0aCByZW9yZGVyZWQgcGFja2V0cyBiYXNlZCBvbiB0aGUgc2VxbnVtCi0gLSBjYWxjdWxhdGUgdGhlIGRyaWZ0IGJldHdlZW4gdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgY2xvY2tzIHVzaW5nIHRoZQotICAgR1N0cmVhbWVyIHRpbWVzdGFtcHMgKHJlY2VpdmVyIGNsb2NrIHJhdGUpIGFuZCBSVFAgdGltZXN0YW1wcyAoc2VuZGVyIGNsb2NrCi0gICByYXRlKS4KLQotVG8gZGVhbCB3aXRoIHJlb3JkZXJlZCBwYWNrZXQsIHRoZSBqaXR0ZXJidWZmZXIgaG9sZHMgb24gdG8gdGhlIHJlY2VpdmVkIFJUUAotcGFja2V0cyBpbiBhIHF1ZXVlIGZvciBhIGNvbmZpZ3VyYWJsZSBhbW91bnQgb2YgdGltZSwgY2FsbGVkIHRoZSBsYXRlbmN5LgotCi1UaGUgaml0dGVyYnVmZmVyIGFsc28gZWxpbWluYXRlcyBuZXR3b3JrIGppdHRlciBhbmQgdGhlbiB0cmFja3MgdGhlIGRyaWZ0Ci1iZXR3ZWVuIHRoZSBsb2NhbCBjbG9jayAoYXMgZXhwcmVzc2VkIGluIHRoZSBHU3RyZWFtZXIgdGltZXN0YW1wcykgYW5kIHRoZQotcmVtb3RlIGNsb2NrIChhcyBleHByZXNzZWQgaW4gdGhlIFJUUCB0aW1lc3RhbXBzKS4gSXQgd2lsbCByZW1vdmUgdGhlIGppdHRlcgotYW5kIHdpbGwgYXBwbHkgdGhlIGRyaWZ0IGNvcnJlY3Rpb24gdG8gdGhlIEdTdHJlYW1lciB0aW1lc3RhbXAgYmVmb3JlIHB1c2hpbmcKLXRoZSBidWZmZXIgZG93bnN0cmVhbS4gVGhlIHJlc3VsdCBpcyB0aGF0IHRoZSBkZXBheWxvYWRlciByZWNlaXZlcyBhIHNtb290aGVkCi1HU3RyZWFtZXIgdGltZXN0YW1wIG9uIHRoZSBSVFAgcGFja2V0LCB3aGljaCBpcyBjb3BpZWQgdG8gdGhlIGRlcGF5bG9hZGVkIGRhdGEuCi0KLVRoZSBmb2xsb3dpbmcgcGlwZWxpbmUgaWxsdXN0cmF0ZXMgYSByZWNlaXZlciB3aXRoIGEgaml0dGVyYnVmZmVyLgotCi0gICAgZ3N0LWxhdW5jaC0xLjAgdWRwc3JjIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLAotICAgICAgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0xOTk4IiAhCi0gICAgICBydHBqaXR0ZXJidWZmZXIgbGF0ZW5jeT0xMDAgISBydHBoMjYzcGRlcGF5ICEgIGF2ZGVjX2gyNjMgISBhdXRvdmlkZW9zaW5rCi0KLVRoZSBsYXRlbmN5IHByb3BlcnR5IG9uIHRoZSBqaXR0ZXJidWZmZXIgY29udHJvbHMgdGhlIGFtb3VudCBvZiBkZWxheSAoaW4KLW1pbGxpc2Vjb25kcykgdG8gYXBwbHkgdG8gdGhlIG91dGdvaW5nIHBhY2tldHMuIEEgaGlnaGVyIGxhdGVuY3kgd2lsbCBwcm9kdWNlCi1zbW9vdGhlciBwbGF5YmFjayBpbiBuZXR3b3JrcyB3aXRoIGhpZ2ggaml0dGVyIGJ1dCBjYXVzZSBhIGhpZ2hlciBsYXRlbmN5LgotQ2hvb3NpbmcgYSBnb29kIHZhbHVlIGZvciB0aGUgbGF0ZW5jeSBpcyBhIHRyYWRlb2ZmIGJldHdlZW4gdGhlIHF1YWxpdHkgYW5kCi1sYXRlbmN5LiBUaGUgYmV0dGVyIHRoZSBuZXR3b3JrLCB0aGUgbG93ZXIgdGhlIGxhdGVuY3kgY2FuIGJlIHNldC4KLQotCi11c2FnZSB3aXRoIFVEUAotLS0tLS0tLS0tLS0tLS0KLQotVG8gY29ycmVjdGx5IGFuZCBjb21wbGV0ZWx5IHVzZSB0aGUgUlRQIHBheWxvYWRlcnMgb24gdGhlIHNlbmRlciBhbmQgdGhlCi1yZWNlaXZlciB5b3UgbmVlZCB0byB3cml0ZSBhbiBhcHBsaWNhdGlvbi4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHdyaXRlIGEgZnVsbAotYmxvd24gUlRQIHNlcnZlciB3aXRoIGEgc2luZ2xlIGdzdC1sYXVuY2gtMS4wIGxpbmUuCi0KLVRoYXQgc2FpZCwgaXQgaXMgcG9zc2libGUgdG8gZG8gc29tZXRoaW5nIGZ1bmN0aW9uYWwgd2l0aCBhIGZldyBnc3QtbGF1bmNoCi1saW5lcy4gVGhlIGJpZ2dlc3QgcHJvYmxlbSB3aGVuIGNvbnN0cnVjdGluZyBhIGNvcnJlY3QgZ3N0LWxhdW5jaC0xLjAgbGluZSBsaWVzIG9uCi10aGUgcmVjZWl2ZXIgZW5kLiAKLQotVGhlIHJlY2VpdmVyIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHR5cGUgb2YgdGhlIFJUUCBkYXRhIGFsb25nIHdpdGggYSBzZXQgb2YKLVJUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXN1YWxseSB0cmFuc21pdHRlZCB0byB0aGUKLWNsaWVudCB1c2luZyBzb21lIHNvcnQgb2Ygc2Vzc2lvbiBkZXNjcmlwdGlvbiBsYW5ndWFnZSAoU0RQKSBvdmVyIHNvbWUgcmVsaWFibGUKLWNoYW5uZWwgKEhUVFAvUlRTUC8uLi4pLiAgCi0KLUFsbCBvZiB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyB0byBjb25uZWN0IGFuZCB1c2UgdGhlIFJUUCBzZXNzaW9uIG9uIHRoZQotc2VydmVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgY2FwcyBvbiB0aGUgc2VydmVyIGVuZC4gVGhlIGNsaWVudCByZWNlaXZlcyB0aGlzCi1pbmZvcm1hdGlvbiBpbiBzb21lIHdheSAoY2FwcyBhcmUgY29udmVydGVkIHRvIGFuZCBmcm9tIFNEUCwgYXMgZXhwbGFpbmVkIGFib3ZlLAotZm9yIGV4YW1wbGUpLgotCi1Tb21lIGdzdC1sYXVuY2gtMS4wIGxpbmVzOgotCi0gIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyAhIHZpZGVvY29udmVydCAhIGF2ZW5jX2gyNjNwICEgcnRwaDI2M3BwYXkgISB1ZHBzaW5rCi0KLSAgIFNldHRpbmcgcGlwZWxpbmUgdG8gUEFVU0VEIC4uLgotICAgL3BpcGVsaW5lMC92aWRlb3Rlc3RzcmMwLnNyYzogY2FwcyA9IHZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylJNDIwLAotICAgd2lkdGg9KGludCkzMjAsIGhlaWdodD0oaW50KTI0MCwgZnJhbWVyYXRlPShmcmFjdGlvbikzMC8xCi0gICBQaXBlbGluZSBpcyBQUkVST0xMSU5HIC4uLgotICAgLi4uLgotICAgL3BpcGVsaW5lMC91ZHBzaW5rMC5zaW5rOiBjYXBzID0gYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8sCi0gICBwYXlsb2FkPShpbnQpOTYsIGNsb2NrLXJhdGU9KGludCk5MDAwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjMtMTk5OCwKLSAgIHNzcmM9KGd1aW50KTUyNzg0MjM0NSwgY2xvY2stYmFzZT0oZ3VpbnQpMTE1MDc3Njk0MSwgc2VxbnVtLWJhc2U9KGd1aW50KTMwOTgyCi0gICAuLi4uCi0gICBQaXBlbGluZSBpcyBQUkVST0xMRUQgLi4uCi0gICBTZXR0aW5nIHBpcGVsaW5lIHRvIFBMQVlJTkcgLi4uCi0gICBOZXcgY2xvY2s6IEdzdFN5c3RlbUNsb2NrCi0KLSBXcml0ZSBkb3duIHRoZSBjYXBzIG9uIHRoZSB1ZHBzaW5rIGFuZCBzZXQgdGhlbSBhcyB0aGUgY2FwcyBvZiB0aGUgVURQIAotIHJlY2VpdmVyOgotCi0gIGdzdC1sYXVuY2gtMS4wIC12IHVkcHNyYyBjYXBzPSJhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbywKLSAgcGF5bG9hZD0oaW50KTk2LCBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzLTE5OTgsCi0gIHNzcmM9KGd1aW50KTUyNzg0MjM0NSwgY2xvY2stYmFzZT0oZ3VpbnQpMTE1MDc3Njk0MSwgc2VxbnVtLWJhc2U9KGd1aW50KTMwOTgyIgotICAhIHJ0cGgyNjNwZGVwYXkgISBhdmRlY19oMjYzICEgYXV0b3ZpZGVvc2luawotCi0gVGhlIHJlY2VpdmVyIG5vdyBkaXNwbGF5cyBhbiBoMjYzIGltYWdlLiBTaW5jZSB0aGVyZSBpcyBubyBqaXR0ZXJidWZmZXIgaW4gdGhlCi0gcGlwZWxpbmUsIGZyYW1lcyB3aWxsIGJlIGRpc3BsYXllZCBhdCB0aGUgdGltZSB3aGVuIHRoZXkgYXJlIHJlY2VpdmVkLiBUaGlzIGNhbgotIHJlc3VsdCBpbiBqZXJreSBwbGF5YmFjayBpbiB0aGUgY2FzZSBvZiBoaWdoIG5ldHdvcmsgaml0dGVyIG9yIGN1cnJ1cHRlZCB2aWRlbwotIHdoZW4gcGFja2V0cyBhcmUgZHJvcHBlZCBvciByZW9yZGVyZWQuCi0KLSBTdHJlYW0gYSBxdWlja3RpbWUgZmlsZSB3aXRoIG1wZWc0IHZpZGVvIGFuZCBBQUMgYXVkaW8gb24gcG9ydCA1MDAwIGFuZCBwb3J0Ci0gNTAwMi4KLQotICBnc3QtbGF1bmNoLTEuMCAtdiBmaWxlc3JjIGxvY2F0aW9uPX4vZGF0YS9zaW5jaXR5Lm1wNCAhIHF0ZGVtdXggbmFtZT1kICEgcXVldWUgISBydHBtcDR2cGF5ICEgdWRwc2luayBwb3J0PTUwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgICBkLiAhIHF1ZXVlICEgcnRwbXA0Z3BheSAhIHVkcHNpbmsgcG9ydD01MDAyCi0gICAgLi4uLgotICAgIC9waXBlbGluZTAvdWRwc2luazAuc2luazogY2FwcyA9IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLAotICAgIHBheWxvYWQ9KGludCk5NiwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTVA0Vi1FUywKLSAgICBzc3JjPShndWludCkxMTYyNzAzNzAzLCBjbG9jay1iYXNlPShndWludCk4MTYxMzU4MzUsIHNlcW51bS1iYXNlPShndWludCk5Mjk0LAotICAgIHByb2ZpbGUtbGV2ZWwtaWQ9KHN0cmluZykzLCBjb25maWc9KHN0cmluZykwMDAwMDFiMDAzMDAwMDAxYjUwOTAwMDAwMTAwMDAwMDAxMjAwMDg2YzVkNGMzMDdkMzE0MDQzYzE0NjMwMDAwMDFiMjU4NzY2OTQ0MzAzMDMzMzQKLSAgICAvcGlwZWxpbmUwL3VkcHNpbmsxLnNpbms6IGNhcHMgPSBhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywKLSAgICBwYXlsb2FkPShpbnQpOTYsIGNsb2NrLXJhdGU9KGludCk0NDEwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QRUc0LUdFTkVSSUMsCi0gICAgc3NyYz0oZ3VpbnQpMzI0NjE0OTg5OCwgY2xvY2stYmFzZT0oZ3VpbnQpNDEzNDUxNDA1OCwgc2VxbnVtLWJhc2U9KGd1aW50KTU3NjMzLAotICAgIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTIsIHN0cmVhbXR5cGU9KHN0cmluZyk1LCBwcm9maWxlLWxldmVsLWlkPShzdHJpbmcpMSwKLSAgICBtb2RlPShzdHJpbmcpYWFjLWhiciwgY29uZmlnPShzdHJpbmcpMTIxMCwgc2l6ZWxlbmd0aD0oc3RyaW5nKTEzLAotICAgIGluZGV4bGVuZ3RoPShzdHJpbmcpMywgaW5kZXhkZWx0YWxlbmd0aD0oc3RyaW5nKTMKLSAgICAuLi4uCi0KLSBBZ2FpbiBjb3B5IHRoZSBjYXBzIG9uIGJvdGggc2lua3MgdG8gdGhlIHJlY2VpdmVyIGxhdW5jaCBsaW5lCi0KLSAgICBnc3QtbGF1bmNoLTEuMAotICAgICB1ZHBzcmMgcG9ydD01MDAwIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBwYXlsb2FkPShpbnQpOTYsCi0gICAgICBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylNUDRWLUVTLCBzc3JjPShndWludCkxMTYyNzAzNzAzLAotICAgICAgY2xvY2stYmFzZT0oZ3VpbnQpODE2MTM1ODM1LCBzZXFudW0tYmFzZT0oZ3VpbnQpOTI5NCwgcHJvZmlsZS1sZXZlbC1pZD0oc3RyaW5nKTMsCi0gICAgICBjb25maWc9KHN0cmluZykwMDAwMDFiMDAzMDAwMDAxYjUwOTAwMDAwMTAwMDAwMDAxMjAwMDg2YzVkNGMzMDdkMzE0MDQzYzE0NjMwMDAwMDFiMjU4NzY2OTQ0MzAzMDMzMzQiCi0gICAgICAhIHJ0cG1wNHZkZXBheSAhIGZmZGVjX21wZWc0ICEgYXV0b3ZpZGVvc2luayBzeW5jPWZhbHNlCi0gICAgIHVkcHNyYyBwb3J0PTUwMDIgY2Fwcz0iYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIHBheWxvYWQ9KGludCk5NiwKLSAgICAgIGNsb2NrLXJhdGU9KGludCk0NDEwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKU1QRUc0LUdFTkVSSUMsIHNzcmM9KGd1aW50KTMyNDYxNDk4OTgsCi0gICAgICBjbG9jay1iYXNlPShndWludCk0MTM0NTE0MDU4LCBzZXFudW0tYmFzZT0oZ3VpbnQpNTc2MzMsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTIsCi0gICAgICBzdHJlYW10eXBlPShzdHJpbmcpNSwgcHJvZmlsZS1sZXZlbC1pZD0oc3RyaW5nKTEsIG1vZGU9KHN0cmluZylhYWMtaGJyLAotICAgICAgY29uZmlnPShzdHJpbmcpMTIxMCwgc2l6ZWxlbmd0aD0oc3RyaW5nKTEzLCBpbmRleGxlbmd0aD0oc3RyaW5nKTMsCi0gICAgICBpbmRleGRlbHRhbGVuZ3RoPShzdHJpbmcpMyIgCi0gICAgICAhIHJ0cG1wNGdkZXBheSAhIGZhYWQgISBhbHNhc2luayBzeW5jPWZhbHNlCi0KLSBUaGUgY2FwcyBvbiB0aGUgdWRwc2lua3MgY2FuIGJlIHJldHJpZXZlZCB3aGVuIHRoZSBzZXJ2ZXIgcGlwZWxpbmUgcHJlcm9sbGVkIHRvCi0gUEFVU0VELgotCi0gVGhlIGFib3ZlIHBpcGVsaW5lIHNldHMgc3luYz1mYWxzZSBvbiB0aGUgYXVkaW8gYW5kIHZpZGVvIHNpbmsgd2hpY2ggbWVhbnMgdGhhdAotIG5vIHN5bmNocm9uaXNhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBpbiB0aGUgc2lua3MsIHRoZXkgcGxheSB0aGUgZGF0YSB3aGVuIGl0Ci0gYXJyaXZlcy4gSWYgeW91IHdhbnQgdG8gZW5hYmxlIHN5bmNocm9uaXNhdGlvbiBpbiB0aGUgc2lua3MgaXQgaXMgaGlnaGx5Ci0gcmVjb21tZW5kZWQgdG8gdXNlIGEgZ3N0cnRwaml0dGVyYnVmZmVyIGFmdGVyIHRoZSB1ZHBzcmMgZWxlbWVudHMuIAotIAotIEV2ZW4gd2hlbiBzeW5jIGlzIGVuYWJsZWQsIHRoZSB0d28gZGlmZmVyZW50IHN0cmVhbXMgd2lsbCBub3QgcGxheSBzeW5jaHJvbmlzZWQKLSBhZ2FpbnN0IGVhY2hvdGhlciBiZWNhdXNlIHRoZSByZWNlaXZlciBkb2VzIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0bwotIHBlcmZvcm0gdGhpcyB0YXNrLiBGb3IgdGhpcyB5b3UgbmVlZCB0byBhZGQgdGhlIHJ0cGJpbiBlbGVtZW50IGluIGJvdGggdGhlCi0gc2VuZGVyIGFuZCByZWNlaXZlciBwaXBlbGluZSBhbmQgdXNlIGFkZGl0aW9uYWwgc291cmNlcyBhbmQgc2lua3MgdG8gdHJhbnNtaXQKLSBSVENQIHBhY2tldHMgdXNlZCBmb3IgaW50ZXItc3RyZWFtIHN5bmNocm9uaXNhdGlvbi4KLQotIFRoZSBjYXBzIG9uIHRoZSByZWNlaXZlciBzaWRlIGNhbiBiZSBzZXQgb24gdGhlIFVEUCBzb3VyY2UgZWxlbWVudHMgd2hlbiB0aGUKLSBwaXBlbGluZSB3ZW50IHRvIFBBVVNFRC4gSW4gdGhhdCBzdGF0ZSBubyBkYXRhIGlzIHJlY2VpdmVkIGZyb20gdGhlIFVEUCBzb3VyY2VzCi0gYXMgdGhleSBhcmUgbGl2ZSBzb3VyY2VzIGFuZCBvbmx5IHByb2R1Y2UgZGF0YSBpbiBQTEFZSU5HLgotCi0KLVJlbGV2YW50IFJGQ3MKLS0tLS0tLS0tLS0tLS0KLQotMzU1MCBSVFA6IEEgVHJhbnNwb3J0IFByb3RvY29sIGZvciBSZWFsLVRpbWUgQXBwbGljYXRpb25zLiAoIDE4ODkgT2Jzb2xldGUgKQotCi0yMTk4IFJUUCBQYXlsb2FkIGZvciBSZWR1bmRhbnQgQXVkaW8gRGF0YS4KLTMxMTkgQSBNb3JlIExvc3MtVG9sZXJhbnQgUlRQIFBheWxvYWQgRm9ybWF0IGZvciBNUDMgQXVkaW8uCi0KLTI3OTMgUlRQIFBheWxvYWQgZm9yIFRleHQgQ29udmVyc2F0aW9uLgotCi0yMDMyIFJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgSC4yNjEgVmlkZW8gU3RyZWFtcy4KLTIxOTAgUlRQIFBheWxvYWQgRm9ybWF0IGZvciBILjI2MyBWaWRlbyBTdHJlYW1zLgotMjI1MCBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIE1QRUcxL01QRUcyIFZpZGVvLgotMjM0MyBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIEJ1bmRsZWQgTVBFRy4KLTI0MjkgUlRQIFBheWxvYWQgRm9ybWF0IGZvciB0aGUgMTk5OCBWZXJzaW9uIG9mIElUVS1UIFJlYy4gSC4yNjMgVmlkZW8KLTI0MzEgUlRQIFBheWxvYWQgRm9ybWF0IGZvciBCVC42NTYgVmlkZW8gRW5jb2RpbmcuCi0yNDM1IFJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgSlBFRy1jb21wcmVzc2VkIFZpZGVvLgotMzAxNiBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIE1QRUctNCBBdWRpby9WaXN1YWwgU3RyZWFtcy4KLTMwNDcgUlRQIFBheWxvYWQgRm9ybWF0IGZvciBJVFUtVCBSZWNvbW1lbmRhdGlvbiBHLjcyMi4xLgotMzE4OSBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIERWIChJRUMgNjE4MzQpIFZpZGVvLgotMzE5MCBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIDEyLWJpdCBEQVQgQXVkaW8gYW5kIDIwLSBhbmQgMjQtYml0IExpbmVhciBTYW1wbGVkIEF1ZGlvLgotMzM4OSBSZWFsLXRpbWUgVHJhbnNwb3J0IFByb3RvY29sIChSVFApIFBheWxvYWQgZm9yIENvbWZvcnQgTm9pc2UgKENOKQotMjczMyBBbiBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIEdlbmVyaWMgRm9yd2FyZCBFcnJvciBDb3JyZWN0aW9uLgotMjgzMyBSVFAgUGF5bG9hZCBmb3IgRFRNRiBEaWdpdHMsIFRlbGVwaG9ueSBUb25lcyBhbmQgVGVsZXBob255Ci0gICAgIFNpZ25hbHMuCi0yODYyIFJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgUmVhbC1UaW1lIFBvaW50ZXJzLgotMzM1MSBSVFAgUHJvZmlsZSBmb3IgQXVkaW8gYW5kIFZpZGVvIENvbmZlcmVuY2VzIHdpdGggTWluaW1hbCBDb250cm9sLiAoIDE4OTAgT2Jzb2xldGUgKQotMzU1NSBNSU1FIFR5cGUgUmVnaXN0cmF0aW9uIG9mIFJUUCBQYXlsb2FkIEZvcm1hdHMuCi0KLTI1MDggQ29tcHJlc3NpbmcgSVAvVURQL1JUUCBIZWFkZXJzIGZvciBMb3ctU3BlZWQgU2VyaWFsIExpbmtzLgotMTMwNSBOZXR3b3JrIFRpbWUgUHJvdG9jb2wgKFZlcnNpb24gMykgU3BlY2lmaWNhdGlvbiwgSW1wbGVtZW50YXRpb24gYW5kIEFuYWx5c2lzLgotMzMzOSBEYXRlIGFuZCBUaW1lIG9uIHRoZSBJbnRlcm5ldDogVGltZXN0YW1wcy4KLTIyNDYgVGhlIFRMUyBQcm90b2NvbCBWZXJzaW9uIDEuMAotMzU0NiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucy4gKCBVcGRhdGVzIDIyNDYgKQotCi1kbyB3ZSBjYXJlPwotLS0tLS0tLS0tLS0KLQotMjAyOSBSVFAgUGF5bG9hZCBGb3JtYXQgb2YgU3VuJ3MgQ2VsbEIgVmlkZW8gRW5jb2RpbmcuCi0KLXVzZWZ1bAotLS0tLS0tCi0KLWh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvcnRwLXBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL2dzdC9ydHAvVE9ETyBiL2dzdC9ydHAvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA2NWE5Yy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0qIE1QRUc0IGhlYWRlcgotICAtIGZmbXBlZyBtcGVnNCBkZWNvZGVyIGdpdmVzIGVycm9yIG1lc3NhZ2Ugd2hlbiBzZW5kaW5nIG9ubHkgdGhlIGNvbmZpZwotICAgIHN0cmluZywgcGFyc2luZyBpcyBPSywgZXJyb3IganVzdCBtZWFucyBubyBwaWN0dXJlIHdhcyBmb3VuZCBpbiB0aGUKLSAgICBzdHJlYW0uCi0KLSogY29tcGFyZSBIMjYzIGVuY29kZXJzIGFuZCBIMjYzKwotCi0qIGJldHRlciBSVFAgcGFja2V0aXppbmcgZm9yIGgyNjMKLQotKiBiaXRyYXRlIHR1bmluZyBpbiBmZm1wZWcKLSAgLSBmaXhlZCB0aGUgcW1heCB2YWx1ZXMgc28gd2UgY2FuIHF1YW50aXplIG1vcmUuCi0KLSogbWFrZSBmZm1wZWcgbmVnb3RpYXRlIG9ubHkgd2l0aCBhY2NlcHRlZCBmcmFtZXJhdGVzCi0KLQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9kYm9vbGh1ZmYuTElDRU5TRSBiL2dzdC9ydHAvZGJvb2xodWZmLkxJQ0VOU0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZTRlNmYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9kYm9vbGh1ZmYuTElDRU5TRQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLUNvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICAgIGRpc3RyaWJ1dGlvbi4KLQotICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZGJvb2xodWZmLmMgYi9nc3QvcnRwL2Rib29saHVmZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDBmYzhmLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZGJvb2xodWZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxMCBUaGUgV2ViTSBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgZGJvb2xodWZmLkxJQ0VOU0UgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KLSAqICBTZWUgdGhlIGxpYnZweCBvcmlnaW5hbCBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24sCi0gKiAgaW5jbHVkaW5nIHBhdGVudCBpbmZvcm1hdGlvbiwgYW5kIGF1dGhvciBpbmZvcm1hdGlvbi4KLSAqLwotCi0KLSNpbmNsdWRlICJkYm9vbGh1ZmYuaCIKLQotI2lmZGVmIF9NU0NfVkVSCi1fX2RlY2xzcGVjIChhbGlnbiAoMTYpKQotICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHZwOF9ub3JtWzI1Nl0gPSB7Ci0jZWxzZQotY29uc3QgdW5zaWduZWQgY2hhciB2cDhfbm9ybVsyNTZdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKSA9IHsKLSNlbmRpZgotMCwgNywgNiwgNiwgNSwgNSwgNSwgNSwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKLSAgICAgIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCi0gICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAotICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKLSAgICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCi0gICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAotICAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLSAgICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCi0gICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07Ci0KLWludAotdnA4ZHhfc3RhcnRfZGVjb2RlIChCT09MX0RFQ09ERVIgKiBiciwKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIHVuc2lnbmVkIGludCBzb3VyY2Vfc3opCi17Ci0gIGJyLT51c2VyX2J1ZmZlcl9lbmQgPSBzb3VyY2UgKyBzb3VyY2Vfc3o7Ci0gIGJyLT51c2VyX2J1ZmZlciA9IHNvdXJjZTsKLSAgYnItPnZhbHVlID0gMDsKLSAgYnItPmNvdW50ID0gLTg7Ci0gIGJyLT5yYW5nZSA9IDI1NTsKLQotICBpZiAoc291cmNlX3N6ICYmICFzb3VyY2UpCi0gICAgcmV0dXJuIDE7Ci0KLSAgLyogUG9wdWxhdGUgdGhlIGJ1ZmZlciAqLwotICB2cDhkeF9ib29sX2RlY29kZXJfZmlsbCAoYnIpOwotCi0gIHJldHVybiAwOwotfQotCi0KLXZvaWQKLXZwOGR4X2Jvb2xfZGVjb2Rlcl9maWxsIChCT09MX0RFQ09ERVIgKiBicikKLXsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmcHRyOwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZlbmQ7Ci0gIFZQOF9CRF9WQUxVRSB2YWx1ZTsKLSAgaW50IGNvdW50OwotICBidWZlbmQgPSBici0+dXNlcl9idWZmZXJfZW5kOwotICBidWZwdHIgPSBici0+dXNlcl9idWZmZXI7Ci0gIHZhbHVlID0gYnItPnZhbHVlOwotICBjb3VudCA9IGJyLT5jb3VudDsKLQotICBWUDhEWF9CT09MX0RFQ09ERVJfRklMTCAoY291bnQsIHZhbHVlLCBidWZwdHIsIGJ1ZmVuZCk7Ci0KLSAgYnItPnVzZXJfYnVmZmVyID0gYnVmcHRyOwotICBici0+dmFsdWUgPSB2YWx1ZTsKLSAgYnItPmNvdW50ID0gY291bnQ7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2Rib29saHVmZi5oIGIvZ3N0L3J0cC9kYm9vbGh1ZmYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhNDVhMi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2Rib29saHVmZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBXZWJNIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBkYm9vbGh1ZmYuTElDRU5TRSBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgotICogIFNlZSB0aGUgbGlidnB4IG9yaWdpbmFsIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiwKLSAqICBpbmNsdWRpbmcgcGF0ZW50IGluZm9ybWF0aW9uLCBhbmQgYXV0aG9yIGluZm9ybWF0aW9uLgotICovCi0KLQotI2lmbmRlZiBEQk9PTEhVRkZfSAotI2RlZmluZSBEQk9PTEhVRkZfSAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLQotdHlwZWRlZiBzaXplX3QgVlA4X0JEX1ZBTFVFOwotCi0jIGRlZmluZSBWUDhfQkRfVkFMVUVfU0laRSAoKGludClzaXplb2YoVlA4X0JEX1ZBTFVFKSpDSEFSX0JJVCkKLS8qVGhpcyBpcyBtZWFudCB0byBiZSBhIGxhcmdlLCBwb3NpdGl2ZSBjb25zdGFudCB0aGF0IGNhbiBzdGlsbCBiZSBlZmZpY2llbnRseQotICAgbG9hZGVkIGFzIGFuIGltbWVkaWF0ZSAob24gcGxhdGZvcm1zIGxpa2UgQVJNLCBmb3IgZXhhbXBsZSkuCi0gIEV2ZW4gcmVsYXRpdmVseSBtb2Rlc3QgdmFsdWVzIGxpa2UgMTAwIHdvdWxkIHdvcmsgZmluZS4qLwotIyBkZWZpbmUgVlA4X0xPVFNfT0ZfQklUUyAoMHg0MDAwMDAwMCkKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyX2J1ZmZlcl9lbmQ7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcl9idWZmZXI7Ci0gICAgVlA4X0JEX1ZBTFVFICAgICAgICAgdmFsdWU7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgY291bnQ7Ci0gICAgdW5zaWduZWQgaW50ICAgICAgICAgcmFuZ2U7Ci19IEJPT0xfREVDT0RFUjsKLQotI2lmZGVmIF9NU0NfVkVSCi1fX2RlY2xzcGVjKGFsaWduKDE2KSkgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgdnA4X25vcm1bMjU2XTsKLSNlbHNlCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciB2cDhfbm9ybVsyNTZdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7Ci0jZW5kaWYKLQotaW50IHZwOGR4X3N0YXJ0X2RlY29kZShCT09MX0RFQ09ERVIgKmJyLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2Vfc3opOwotCi12b2lkIHZwOGR4X2Jvb2xfZGVjb2Rlcl9maWxsKEJPT0xfREVDT0RFUiAqYnIpOwotCi0vKlRoZSByZWZpbGwgbG9vcCBpcyB1c2VkIGluIHNldmVyYWwgcGxhY2VzLCBzbyBkZWZpbmUgaXQgaW4gYSBtYWNybyB0byBtYWtlCi0gICBzdXJlIHRoZXkncmUgYWxsIGNvbnNpc3RlbnQuCi0gIEFuIGlubGluZSBmdW5jdGlvbiB3b3VsZCBiZSBjbGVhbmVyLCBidXQgaGFzIGEgc2lnbmlmaWNhbnQgcGVuYWx0eSwgYmVjYXVzZQotICAgbXVsdGlwbGUgQk9PTF9ERUNPREVSIGZpZWxkcyBtdXN0IGJlIG1vZGlmaWVkLCBhbmQgdGhlIGNvbXBpbGVyIGlzIG5vdCBzbWFydAotICAgZW5vdWdoIHRvIGVsaW1pbmF0ZSB0aGUgc3RvcmVzIHRvIHRob3NlIGZpZWxkcyBhbmQgdGhlIHN1YnNlcXVlbnQgcmVsb2FkcwotICAgZnJvbSB0aGVtIHdoZW4gaW5saW5pbmcgdGhlIGZ1bmN0aW9uLiovCi0jZGVmaW5lIFZQOERYX0JPT0xfREVDT0RFUl9GSUxMKF9jb3VudCxfdmFsdWUsX2J1ZnB0cixfYnVmZW5kKSBcCi0gICAgZG8gXAotICAgIHsgXAotICAgICAgICBpbnQgc2hpZnQgPSBWUDhfQkRfVkFMVUVfU0laRSAtIDggLSAoKF9jb3VudCkgKyA4KTsgXAotICAgICAgICBpbnQgbG9vcF9lbmQsIHg7IFwKLSAgICAgICAgc2l6ZV90IGJpdHNfbGVmdCA9ICgoX2J1ZmVuZCktKF9idWZwdHIpKSpDSEFSX0JJVDsgXAotICAgICAgICBcCi0gICAgICAgIHggPSBzaGlmdCArIENIQVJfQklUIC0gYml0c19sZWZ0OyBcCi0gICAgICAgIGxvb3BfZW5kID0gMDsgXAotICAgICAgICBpZih4ID49IDApIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgICAoX2NvdW50KSArPSBWUDhfTE9UU19PRl9CSVRTOyBcCi0gICAgICAgICAgICBsb29wX2VuZCA9IHg7IFwKLSAgICAgICAgICAgIGlmKCFiaXRzX2xlZnQpIGJyZWFrOyBcCi0gICAgICAgIH0gXAotICAgICAgICB3aGlsZShzaGlmdCA+PSBsb29wX2VuZCkgXAotICAgICAgICB7IFwKLSAgICAgICAgICAgIChfY291bnQpICs9IENIQVJfQklUOyBcCi0gICAgICAgICAgICAoX3ZhbHVlKSB8PSAoVlA4X0JEX1ZBTFVFKSooX2J1ZnB0cikrKyA8PCBzaGlmdDsgXAotICAgICAgICAgICAgc2hpZnQgLT0gQ0hBUl9CSVQ7IFwKLSAgICAgICAgfSBcCi0gICAgfSBcCi0gICAgd2hpbGUoMCkgXAotCi0KLXN0YXRpYyBpbnQgdnA4ZHhfZGVjb2RlX2Jvb2woQk9PTF9ERUNPREVSICpiciwgaW50IHByb2JhYmlsaXR5KSB7Ci0gICAgdW5zaWduZWQgaW50IGJpdCA9IDA7Ci0gICAgVlA4X0JEX1ZBTFVFIHZhbHVlOwotICAgIHVuc2lnbmVkIGludCBzcGxpdDsKLSAgICBWUDhfQkRfVkFMVUUgYmlnc3BsaXQ7Ci0gICAgaW50IGNvdW50OwotICAgIHVuc2lnbmVkIGludCByYW5nZTsKLQotICAgIHNwbGl0ID0gMSArICgoKGJyLT5yYW5nZSAtIDEpICogcHJvYmFiaWxpdHkpID4+IDgpOwotCi0gICAgaWYoYnItPmNvdW50IDwgMCkKLSAgICAgICAgdnA4ZHhfYm9vbF9kZWNvZGVyX2ZpbGwoYnIpOwotCi0gICAgdmFsdWUgPSBici0+dmFsdWU7Ci0gICAgY291bnQgPSBici0+Y291bnQ7Ci0KLSAgICBiaWdzcGxpdCA9IChWUDhfQkRfVkFMVUUpc3BsaXQgPDwgKFZQOF9CRF9WQUxVRV9TSVpFIC0gOCk7Ci0KLSAgICByYW5nZSA9IHNwbGl0OwotCi0gICAgaWYgKHZhbHVlID49IGJpZ3NwbGl0KQotICAgIHsKLSAgICAgICAgcmFuZ2UgPSBici0+cmFuZ2UgLSBzcGxpdDsKLSAgICAgICAgdmFsdWUgPSB2YWx1ZSAtIGJpZ3NwbGl0OwotICAgICAgICBiaXQgPSAxOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHNoaWZ0ID0gdnA4X25vcm1bcmFuZ2VdOwotICAgICAgICByYW5nZSA8PD0gc2hpZnQ7Ci0gICAgICAgIHZhbHVlIDw8PSBzaGlmdDsKLSAgICAgICAgY291bnQgLT0gc2hpZnQ7Ci0gICAgfQotICAgIGJyLT52YWx1ZSA9IHZhbHVlOwotICAgIGJyLT5jb3VudCA9IGNvdW50OwotICAgIGJyLT5yYW5nZSA9IHJhbmdlOwotCi0gICAgcmV0dXJuIGJpdDsKLX0KLQotc3RhdGljIEdfR05VQ19VTlVTRUQgaW50IHZwOF9kZWNvZGVfdmFsdWUoQk9PTF9ERUNPREVSICpiciwgaW50IGJpdHMpCi17Ci0gICAgaW50IHogPSAwOwotICAgIGludCBiaXQ7Ci0KLSAgICBmb3IgKGJpdCA9IGJpdHMgLSAxOyBiaXQgPj0gMDsgYml0LS0pCi0gICAgewotICAgICAgICB6IHw9ICh2cDhkeF9kZWNvZGVfYm9vbChiciwgMHg4MCkgPDwgYml0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gejsKLX0KLQotc3RhdGljIEdfR05VQ19VTlVTRUQgaW50IHZwOGR4X2Jvb2xfZXJyb3IoQk9PTF9ERUNPREVSICpicikKLXsKLSAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICAgICAqCi0gICAgICogVmFyaWFibGUgJ2NvdW50JyBzdG9yZXMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSAndmFsdWUnIGJ1ZmZlciwgbWludXMKLSAgICAgKiA4LiBUaGUgdG9wIGJ5dGUgaXMgcGFydCBvZiB0aGUgYWxnb3JpdGhtLCBhbmQgdGhlIHJlbWFpbmRlciBpcyBidWZmZXJlZAotICAgICAqIHRvIGJlIHNoaWZ0ZWQgaW50byBpdC4gU28gaWYgY291bnQgPT0gOCwgdGhlIHRvcCAxNiBiaXRzIG9mICd2YWx1ZScgYXJlCi0gICAgICogb2NjdXBpZWQsIDggZm9yIHRoZSBhbGdvcml0aG0gYW5kIDggaW4gdGhlIGJ1ZmZlci4KLSAgICAgKgotICAgICAqIFdoZW4gcmVhZGluZyBhIGJ5dGUgZnJvbSB0aGUgdXNlcidzIGJ1ZmZlciwgY291bnQgaXMgZmlsbGVkIHdpdGggOCBhbmQKLSAgICAgKiBvbmUgYnl0ZSBpcyBmaWxsZWQgaW50byB0aGUgdmFsdWUgYnVmZmVyLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlCi0gICAgICogZGF0YSwgY291bnQgaXMgYWRkaXRpb25hbGx5IGZpbGxlZCB3aXRoIFZQOF9MT1RTX09GX0JJVFMuIFNvIHdoZW4KLSAgICAgKiBjb3VudCA9PSBWUDhfTE9UU19PRl9CSVRTIC0gMSwgdGhlIHVzZXIncyBkYXRhIGhhcyBiZWVuIGV4aGF1c3RlZC4KLSAgICAgKi8KLSAgICBpZiAoKGJyLT5jb3VudCA+IFZQOF9CRF9WQUxVRV9TSVpFKSAmJiAoYnItPmNvdW50IDwgVlA4X0xPVFNfT0ZfQklUUykpCi0gICAgewotICAgICAgIC8qIFdlIGhhdmUgdHJpZWQgdG8gZGVjb2RlIGJpdHMgYWZ0ZXIgdGhlIGVuZCBvZgotICAgICAgICAqIHN0cmVhbSB3YXMgZW5jb3VudGVyZWQuCi0gICAgICAgICovCi0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qIE5vIGVycm9yLiAqLwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvcnRwL2ZudjFoYXNoLmMgYi9nc3QvcnRwL2ZudjFoYXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ODViYjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9mbnYxaGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0jaW5jbHVkZSAiZm52MWhhc2guaCIKLQotLyogVGhpcyBmaWxlIGltcGxlbWVudHMgRk5WLTEgaGFzaGluZyB1c2VkIGluIHRoZSBPZ2cgcGF5bG9hZCBlbmNvZGVycwotICogdG8gZ2VuZXJhdGUgdGhlIDI0LWJpdCBpZGVudCB2YWx1ZSBiYXNlZCBvbiB0aGUgaGVhZGVyIHBhZ2VzLgotICogU2VlIGh0dHA6Ly9pc3RoZS5jb20vY2hvbmdvL3RlY2gvY29tcC9mbnYvCi0gKi8KLQotI2RlZmluZSBNQVNLXzI0ICgoKGd1aW50MzIpIDEgPDwgMjQpIC0xKQotCi0jZGVmaW5lIEZOVjFfSEFTSF8zMl9JTklUICgoZ3VpbnQzMikgMHg4MTFDOURDNUwpCi0vLzIxNjYxMzYyNjFMKQotI2RlZmluZSBGTlYxX0hBU0hfMzJfUFJJTUUgMTY3Nzc2MTkKLQotZ3VpbnQzMgotZm52MV9oYXNoXzMyX25ldyAodm9pZCkKLXsKLSAgcmV0dXJuIEZOVjFfSEFTSF8zMl9JTklUOwotfQotCi1ndWludDMyCi1mbnYxX2hhc2hfMzJfdXBkYXRlIChndWludDMyIGhhc2gsIGNvbnN0IGd1Y2hhciAqIGRhdGEsIGd1aW50IGxlbmd0aCkKLXsKLSAgZ3VpbnQgaTsKLSAgY29uc3QgZ3VjaGFyICpwID0gZGF0YTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2ksICsrcCkgewotICAgIGhhc2ggKj0gRk5WMV9IQVNIXzMyX1BSSU1FOwotICAgIGhhc2ggXj0gKnA7Ci0gIH0KLQotICByZXR1cm4gaGFzaDsKLX0KLQotZ3VpbnQzMgotZm52MV9oYXNoXzMyX3RvXzI0IChndWludDMyIGhhc2gpCi17Ci0gIHJldHVybiAoaGFzaCA+PiAyNCkgXiAoaGFzaCAmIE1BU0tfMjQpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9mbnYxaGFzaC5oIGIvZ3N0L3J0cC9mbnYxaGFzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDQ3MDY3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZm52MWhhc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRob21hcyBWYW5kZXIgU3RpY2hlbGUgPHRob21hcyBhdCBhcGVzdGFhcnQgZG90IG9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX0ZOVjFfSEFTSF9IX18KLSNkZWZpbmUgX19HU1RfRk5WMV9IQVNIX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotZ3VpbnQzMiBmbnYxX2hhc2hfMzJfbmV3ICh2b2lkKTsKLWd1aW50MzIgZm52MV9oYXNoXzMyX3VwZGF0ZSAoZ3VpbnQzMiBoYXNoLCBjb25zdCBndWNoYXIgKmRhdGEsIGd1aW50IGxlbmd0aCk7Ci1ndWludDMyIGZudjFfaGFzaF8zMl90b18yNCAoZ3VpbnQzMiBoYXNoKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0ZOVjFfSEFTSF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYyBiL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYTdmZDQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSAiZ3N0YXN0ZXJpc2toMjYzLmgiCi0KLSNkZWZpbmUgR1NUX0FTVEVSSVNLSDI2M19IRUFERVJfTEVOIDYKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFzdGVyaXNrSDI2M0hlYWRlcgotewotICBndWludDMyIHRpbWVzdGFtcDsgICAgICAgICAgICAvKiBUaW1lc3RhbXAgKi8KLSAgZ3VpbnQxNiBsZW5ndGg7ICAgICAgICAgICAgICAgLyogTGVuZ3RoICovCi19IEdzdEFzdGVyaXNrSDI2M0hlYWRlcjsKLQotI2RlZmluZSBHU1RfQVNURVJJU0tIMjYzX0hFQURFUl9USU1FU1RBTVAoZGF0YSkgKCgoR3N0QXN0ZXJpc2tIMjYzSGVhZGVyICopKGRhdGEpKS0+dGltZXN0YW1wKQotI2RlZmluZSBHU1RfQVNURVJJU0tIMjYzX0hFQURFUl9MRU5HVEgoZGF0YSkgKCgoR3N0QXN0ZXJpc2tIMjYzSGVhZGVyICopKGRhdGEpKS0+bGVuZ3RoKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2FzdGVyaXNraDI2M19zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtYXN0ZXJpc2toMjYzIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2FzdGVyaXNraDI2M19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpIFsgOTYsIDEyNyBdLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkgyNjMtMTk5OFwiIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfYXN0ZXJpc2toMjYzX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X2FzdGVyaXNraDI2M19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9hc3Rlcmlza2gyNjNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotI2RlZmluZSBnc3RfYXN0ZXJpc2toMjYzX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdEFzdGVyaXNraDI2MywgZ3N0X2FzdGVyaXNraDI2MywgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfYXN0ZXJpc2toMjYzX2NsYXNzX2luaXQgKEdzdEFzdGVyaXNraDI2M0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hc3Rlcmlza2gyNjNfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X2FzdGVyaXNraDI2M19jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2FzdGVyaXNraDI2M19zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfYXN0ZXJpc2toMjYzX3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEFzdGVyaXNrIEgyNjMgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIEgyNjMgdmlkZW8gZnJvbSBSVFAgYW5kIGVuY29kZXMgaW4gQXN0ZXJpc2sgSDI2MyBmb3JtYXQiLAotICAgICAgIk5laWwgU3RyYXRmb3JkIDxuZWlsc0B2aXBhZGlhLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hc3Rlcmlza2gyNjNfaW5pdCAoR3N0QXN0ZXJpc2toMjYzICogYXN0ZXJpc2toMjYzKQotewotICBhc3Rlcmlza2gyNjMtPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmdzdF9hc3Rlcmlza2gyNjNfc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhc3Rlcmlza2gyNjMpLCBhc3Rlcmlza2gyNjMtPnNyY3BhZCk7Ci0KLSAgYXN0ZXJpc2toMjYzLT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZ3N0X2FzdGVyaXNraDI2M19zaW5rX3RlbXBsYXRlLAotICAgICAgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKGFzdGVyaXNraDI2My0+c2lua3BhZCwgZ3N0X2FzdGVyaXNraDI2M19jaGFpbik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhc3Rlcmlza2gyNjMpLCBhc3Rlcmlza2gyNjMtPnNpbmtwYWQpOwotCi0gIGFzdGVyaXNraDI2My0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hc3Rlcmlza2gyNjNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdEFzdGVyaXNraDI2MyAqYXN0ZXJpc2toMjYzOwotCi0gIGFzdGVyaXNraDI2MyA9IEdTVF9BU1RFUklTS19IMjYzIChvYmplY3QpOwotCi0gIGdfb2JqZWN0X3VucmVmIChhc3Rlcmlza2gyNjMtPmFkYXB0ZXIpOwotICBhc3Rlcmlza2gyNjMtPmFkYXB0ZXIgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9hc3Rlcmlza2gyNjNfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEFzdGVyaXNraDI2MyAqYXN0ZXJpc2toMjYzOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgYXN0ZXJpc2toMjYzID0gR1NUX0FTVEVSSVNLX0gyNjMgKHBhcmVudCk7Ci0KLSAgewotICAgIGdpbnQgcGF5bG9hZF9sZW47Ci0gICAgZ3VpbnQ4ICpwYXlsb2FkOwotICAgIGdib29sZWFuIE07Ci0gICAgZ3VpbnQzMiB0aW1lc3RhbXA7Ci0gICAgZ3VpbnQzMiBzYW1wbGVzOwotICAgIGd1aW50MTYgYXN0ZXJpc2tfbGVuOwotICAgIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwgfTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgIGlmICghZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRCwgJnJ0cCkpCi0gICAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0KLSAgICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAoJnJ0cCk7Ci0gICAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLQotICAgIE0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyICgmcnRwKTsKLSAgICB0aW1lc3RhbXAgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0YW1wICgmcnRwKTsKLQotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAocGF5bG9hZF9sZW4gKwotICAgICAgICBHU1RfQVNURVJJU0tIMjYzX0hFQURFUl9MRU4pOwotCi0gICAgLyogYnVpbGQgdGhlIGFzdGVyaXNrIGhlYWRlciAqLwotICAgIGFzdGVyaXNrX2xlbiA9IHBheWxvYWRfbGVuOwotICAgIGlmIChNKQotICAgICAgYXN0ZXJpc2tfbGVuIHw9IDB4ODAwMDsKLSAgICBpZiAoIWFzdGVyaXNraDI2My0+bGFzdHRzKQotICAgICAgYXN0ZXJpc2toMjYzLT5sYXN0dHMgPSB0aW1lc3RhbXA7Ci0gICAgc2FtcGxlcyA9IHRpbWVzdGFtcCAtIGFzdGVyaXNraDI2My0+bGFzdHRzOwotICAgIGFzdGVyaXNraDI2My0+bGFzdHRzID0gdGltZXN0YW1wOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgR1NUX0FTVEVSSVNLSDI2M19IRUFERVJfVElNRVNUQU1QIChtYXAuZGF0YSkgPSBnX2h0b25sIChzYW1wbGVzKTsKLSAgICBHU1RfQVNURVJJU0tIMjYzX0hFQURFUl9MRU5HVEggKG1hcC5kYXRhKSA9IGdfaHRvbnMgKGFzdGVyaXNrX2xlbik7Ci0KLSAgICAvKiBjb3B5IHRoZSBkYXRhIGludG8gcGxhY2UgKi8KLSAgICBtZW1jcHkgKG1hcC5kYXRhICsgR1NUX0FTVEVSSVNLSDI2M19IRUFERVJfTEVOLCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSB0aW1lc3RhbXA7Ci0gICAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKGFzdGVyaXNraDI2My0+c3JjcGFkKSkgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChhc3Rlcmlza2gyNjMtPnNyY3BhZCk7Ci0gICAgICBnc3RfcGFkX3NldF9jYXBzIChhc3Rlcmlza2gyNjMtPnNyY3BhZCwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotCi0gICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChhc3Rlcmlza2gyNjMtPnNyY3BhZCwgb3V0YnVmKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi1iYWRfcGFja2V0OgotICB7Ci0gICAgR1NUX0RFQlVHICgiUGFja2V0IGRvZXMgbm90IHZhbGlkYXRlIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfYXN0ZXJpc2toMjYzX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdEFzdGVyaXNraDI2MyAqYXN0ZXJpc2toMjYzOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgYXN0ZXJpc2toMjYzID0gR1NUX0FTVEVSSVNLX0gyNjMgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAoYXN0ZXJpc2toMjYzLT5hZGFwdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIC8qCi0gICAgIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci0gICAgIGJyZWFrOwotICAgICB9Ci0gICAqLwotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X2FzdGVyaXNraDI2M19wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImFzdGVyaXNraDI2MyIsCi0gICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9BU1RFUklTS19IMjYzKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmggYi9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzk1MjNkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9BU1RFUklTS19IMjYzX0hfXwotI2RlZmluZSBfX0dTVF9BU1RFUklTS19IMjYzX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMgXAotICAoZ3N0X2FzdGVyaXNraDI2M19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQVNURVJJU0tfSDI2MyhvYmopIFwKLSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfQVNURVJJU0tfSDI2MyxHc3RBc3Rlcmlza2gyNjMpKQotI2RlZmluZSBHU1RfQVNURVJJU0tfSDI2M19DTEFTUyhrbGFzcykgXAotIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMsR3N0QXN0ZXJpc2toMjYzQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfQVNURVJJU0tfSDI2MyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FTVEVSSVNLX0gyNjMpKQotI2RlZmluZSBHU1RfSVNfQVNURVJJU0tfSDI2M19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9BU1RFUklTS19IMjYzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFzdGVyaXNraDI2MyBHc3RBc3Rlcmlza2gyNjM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QXN0ZXJpc2toMjYzQ2xhc3MgR3N0QXN0ZXJpc2toMjYzQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QXN0ZXJpc2toMjYzCi17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0KLSAgZ3VpbnQzMiBsYXN0dHM7Ci19OwotCi1zdHJ1Y3QgX0dzdEFzdGVyaXNraDI2M0NsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfYXN0ZXJpc2toMjYzX2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X2FzdGVyaXNraDI2M19wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FTVEVSSVNLX0gyNjNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cC5jIGIvZ3N0L3J0cC9nc3RydHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmZGJjYS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzgzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwYWMzZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBhYzNwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBidmRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwYnZwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBjZWx0ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBjZWx0cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwZHZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cGR2cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwZ3N0ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBnc3RwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBpbGJjZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBpbGJjcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwcGNtdXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHBjbWFwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBwY21hZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBwY211ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBnNzIyZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBnNzIycGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwZzcyM2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwZzcyM3BheS5oIgotI2luY2x1ZGUgImdzdHJ0cGc3MjZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cGc3MjZwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBnNzI5ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBnNzI5cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwZ3NtcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwZ3NtZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBhbXJwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBhbXJkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG1wYXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG1wYWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXBhcm9idXN0ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBtcHZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG1wdnBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG9wdXNkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG9wdXNwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBoMjYxcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwaDI2MWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwaDI2M3BkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cGgyNjNwcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwaDI2M2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwaDI2M3BheS5oIgotI2luY2x1ZGUgImdzdHJ0cGgyNjRkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cGgyNjRwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBoMjY1ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBoMjY1cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwajJrZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBqMmtwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBqcGVnZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBqcGVncGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwa2x2ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBrbHZwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBMMTZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cEwxNnBheS5oIgotI2luY2x1ZGUgImdzdHJ0cEwyNGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwTDI0cGF5LmgiCi0jaW5jbHVkZSAiZ3N0YXN0ZXJpc2toMjYzLmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXAxc2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXAydGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXAydHBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG1wNHZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cG1wNHZwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBtcDRhZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBtcDRhcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXA0Z2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXA0Z3BheS5oIgotI2luY2x1ZGUgImdzdHJ0cHFjZWxwZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBxZG1kZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHNiY2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc2JjcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc2lyZW5wYXkuaCIKLSNpbmNsdWRlICJnc3RydHBzaXJlbmRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc3BlZXhwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBzcGVleGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc3YzdmRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdGhlb3JhZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB0aGVvcmFwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB2b3JiaXNkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHZvcmJpc3BheS5oIgotI2luY2x1ZGUgImdzdHJ0cHZwOGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdnA4cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdnA5ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB2cDlwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB2cmF3ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB2cmF3cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc3RyZWFtcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc3RyZWFtZGVwYXkuaCIKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBnc3RfdGFnX2ltYWdlX3R5cGVfZ2V0X3R5cGUgKCk7Ci0KLSAgaWYgKCFnc3RfcnRwX2FjM19kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2FjM19wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9idl9kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2J2X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2NlbHRfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9jZWx0X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2R2X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfZHZfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfZ3N0X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfZ3N0X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2lsYmNfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaWxiY19kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2c3MjJfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9nNzIyX3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2c3MjNfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9nNzIzX3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2c3MjZfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9nNzI2X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2c3MjlfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9nNzI5X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2dzbV9kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2dzbV9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9hbXJfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9hbXJfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfcGNtYV9kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3BjbXVfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9wY211X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3BjbWFfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfbXBhX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfbXBhX3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9tcHZfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9tcHZfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfb3B1c19kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX29wdXNfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaDI2MV9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9oMjYxX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaDI2M3BfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaDI2M3BfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9oMjYzX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaDI2M19wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9oMjY0X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaDI2NF9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9oMjY1X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfaDI2NV9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9qMmtfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9qMmtfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfanBlZ19kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2pwZWdfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfa2x2X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfa2x2X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX0wxNl9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9MMTZfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9MMjRfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfTDI0X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9hc3Rlcmlza2gyNjNfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9tcDFzX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfbXAydF9kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX21wMnRfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfbXA0dl9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9tcDR2X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfbXA0YV9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9tcDRhX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfbXA0Z19kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX21wNGdfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfcWNlbHBfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9xZG0yX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfc2JjX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfc2JjX3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3NpcmVuX3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3NpcmVuX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfc3BlZXhfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfc3BlZXhfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9zdjN2X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfdGhlb3JhX2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfdGhlb3JhX3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3ZvcmJpc19kZXBheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3ZvcmJpc19wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF92cDhfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF92cDhfcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfdnA5X2RlcGF5X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfdnA5X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3ZyYXdfZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF92cmF3X3BheV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3N0cmVhbV9wYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9zdHJlYW1fZGVwYXlfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgcnRwLAotICAgICJSZWFsLXRpbWUgcHJvdG9jb2wgcGx1Z2lucyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4MTk0Ni4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cEwxNmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cEwxNmRlcGF5Ci0gKiBAc2VlX2Fsc286IHJ0cEwxNnBheQotICoKLSAqIEV4dHJhY3QgcmF3IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAzNTUxLgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MS50eHQKLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdWRwc3JjIGNhcHM9J2FwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpNDQxMDAsIGVuY29kaW5nLW5hbWU9KHN0cmluZylMMTYsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTEsIGNoYW5uZWxzPShpbnQpMSwgcGF5bG9hZD0oaW50KTk2JyAhIHJ0cEwxNmRlcGF5ICEgcHVsc2VzaW5rCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZXBheWxvYWQgYW4gUlRQIHJhdyBhdWRpbyBzdHJlYW0uIFJlZmVyIHRvCi0gKiB0aGUgcnRwTDE2cGF5IGV4YW1wbGUgdG8gY3JlYXRlIHRoZSBSVFAgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwTDE2ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBjaGFubmVscy5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cEwxNmRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBMMTZkZXBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfTDE2X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIFMxNkJFLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfTDE2X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIiAiY2xvY2stcmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgLyogImNoYW5uZWxzID0gKGludCkgWzEsIE1BWF0iICAqLwotICAgICAgICAvKiAiZW1waGFzaXMgPSAoc3RyaW5nKSBBTlkiICovCi0gICAgICAgIC8qICJjaGFubmVsLW9yZGVyID0gKHN0cmluZykgQU5ZIiAqLwotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTDE2XCI7IgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgeyAiIEdTVF9SVFBfUEFZTE9BRF9MMTZfU1RFUkVPX1NUUklORyAiLCAiCi0gICAgICAgIEdTVF9SVFBfUEFZTE9BRF9MMTZfTU9OT19TVFJJTkcgIiB9LCIgImNsb2NrLXJhdGUgPSAoaW50KSBbIDEsIE1BWCBdIgotICAgICAgICAvKiAiY2hhbm5lbHMgPSAoaW50KSBbMSwgTUFYXSIgKi8KLSAgICAgICAgLyogImVtcGhhc2lzID0gKHN0cmluZykgQU5ZIiAqLwotICAgICAgICAvKiAiY2hhbm5lbC1vcmRlciA9IChzdHJpbmcpIEFOWSIgKi8KLSAgICApCi0gICAgKTsKLQotI2RlZmluZSBnc3RfcnRwX0wxNl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBMMTZEZXBheSwgZ3N0X3J0cF9MMTZfZGVwYXksIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX0wxNl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfTDE2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfTDE2X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEwxNkRlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9MMTZfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9MMTZfZGVwYXlfcHJvY2VzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX0wxNl9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX0wxNl9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBhdWRpbyBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgcmF3IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMiLAotICAgICAgIlplZXNoYW4gQWxpIDx6YWsxNDdAeWFob28uY29tPiwiICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBMMTZkZXBheV9kZWJ1ZywgInJ0cEwxNmRlcGF5IiwgMCwKLSAgICAgICJSYXcgQXVkaW8gUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX0wxNl9kZXBheV9pbml0IChHc3RSdHBMMTZEZXBheSAqIHJ0cEwxNmRlcGF5KQotewotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3J0cF9MMTZfZGVwYXlfcGFyc2VfaW50IChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogZmllbGQsCi0gICAgZ2ludCBkZWYpCi17Ci0gIGNvbnN0IGdjaGFyICpzdHI7Ci0gIGdpbnQgcmVzOwotCi0gIGlmICgoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsIGZpZWxkKSkpCi0gICAgcmV0dXJuIGF0b2kgKHN0cik7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCBmaWVsZCwgJnJlcykpCi0gICAgcmV0dXJuIHJlczsKLQotICByZXR1cm4gZGVmOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfTDE2X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0UnRwTDE2RGVwYXkgKnJ0cEwxNmRlcGF5OwotICBnaW50IGNsb2NrX3JhdGUsIHBheWxvYWQ7Ci0gIGdpbnQgY2hhbm5lbHM7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIGdib29sZWFuIHJlczsKLSAgY29uc3QgZ2NoYXIgKmNoYW5uZWxfb3JkZXI7Ci0gIGNvbnN0IEdzdFJUUENoYW5uZWxPcmRlciAqb3JkZXI7Ci0gIEdzdEF1ZGlvSW5mbyAqaW5mbzsKLQotICBydHBMMTZkZXBheSA9IEdTVF9SVFBfTDE2X0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIHBheWxvYWQgPSA5NjsKLSAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgJnBheWxvYWQpOwotICBzd2l0Y2ggKHBheWxvYWQpIHsKLSAgICBjYXNlIEdTVF9SVFBfUEFZTE9BRF9MMTZfU1RFUkVPOgotICAgICAgY2hhbm5lbHMgPSAyOwotICAgICAgY2xvY2tfcmF0ZSA9IDQ0MTAwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUlRQX1BBWUxPQURfTDE2X01PTk86Ci0gICAgICBjaGFubmVscyA9IDE7Ci0gICAgICBjbG9ja19yYXRlID0gNDQxMDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogbm8gZml4ZWQgbWFwcGluZywgd2UgbmVlZCBjbG9jay1yYXRlICovCi0gICAgICBjaGFubmVscyA9IDA7Ci0gICAgICBjbG9ja19yYXRlID0gMDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogY2FwcyBjYW4gb3ZlcndyaXRlIGRlZmF1bHRzICovCi0gIGNsb2NrX3JhdGUgPQotICAgICAgZ3N0X3J0cF9MMTZfZGVwYXlfcGFyc2VfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgY2xvY2tfcmF0ZSk7Ci0gIGlmIChjbG9ja19yYXRlID09IDApCi0gICAgZ290byBub19jbG9ja3JhdGU7Ci0KLSAgY2hhbm5lbHMgPQotICAgICAgZ3N0X3J0cF9MMTZfZGVwYXlfcGFyc2VfaW50IChzdHJ1Y3R1cmUsICJlbmNvZGluZy1wYXJhbXMiLCBjaGFubmVscyk7Ci0gIGlmIChjaGFubmVscyA9PSAwKSB7Ci0gICAgY2hhbm5lbHMgPSBnc3RfcnRwX0wxNl9kZXBheV9wYXJzZV9pbnQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgY2hhbm5lbHMpOwotICAgIGlmIChjaGFubmVscyA9PSAwKSB7Ci0gICAgICAvKiBjaGFubmVscyBkZWZhdWx0cyB0byAxIG90aGVyd2lzZSAqLwotICAgICAgY2hhbm5lbHMgPSAxOwotICAgIH0KLSAgfQotCi0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgaW5mbyA9ICZydHBMMTZkZXBheS0+aW5mbzsKLSAgZ3N0X2F1ZGlvX2luZm9faW5pdCAoaW5mbyk7Ci0gIGluZm8tPmZpbmZvID0gZ3N0X2F1ZGlvX2Zvcm1hdF9nZXRfaW5mbyAoR1NUX0FVRElPX0ZPUk1BVF9TMTZCRSk7Ci0gIGluZm8tPnJhdGUgPSBjbG9ja19yYXRlOwotICBpbmZvLT5jaGFubmVscyA9IGNoYW5uZWxzOwotICBpbmZvLT5icGYgPSAoaW5mby0+ZmluZm8tPndpZHRoIC8gOCkgKiBjaGFubmVsczsKLQotICAvKiBhZGQgY2hhbm5lbCBwb3NpdGlvbnMgKi8KLSAgY2hhbm5lbF9vcmRlciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiY2hhbm5lbC1vcmRlciIpOwotCi0gIG9yZGVyID0gZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfb3JkZXIgKGNoYW5uZWxzLCBjaGFubmVsX29yZGVyKTsKLSAgcnRwTDE2ZGVwYXktPm9yZGVyID0gb3JkZXI7Ci0gIGlmIChvcmRlcikgewotICAgIG1lbWNweSAoaW5mby0+cG9zaXRpb24sIG9yZGVyLT5wb3MsCi0gICAgICAgIHNpemVvZiAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24pICogY2hhbm5lbHMpOwotICAgIGdzdF9hdWRpb19jaGFubmVsX3Bvc2l0aW9uc190b192YWxpZF9vcmRlciAoaW5mby0+cG9zaXRpb24sIGluZm8tPmNoYW5uZWxzKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBMMTZkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJVbmtub3duIGNoYW5uZWwgb3JkZXIgJyVzJyBmb3IgJWQgY2hhbm5lbHMiLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChjaGFubmVsX29yZGVyKSwgY2hhbm5lbHMpKTsKLSAgICAvKiBjcmVhdGUgZGVmYXVsdCBOT05FIGxheW91dCAqLwotICAgIGdzdF9ydHBfY2hhbm5lbHNfY3JlYXRlX2RlZmF1bHQgKGNoYW5uZWxzLCBpbmZvLT5wb3NpdGlvbik7Ci0gIH0KLQotICBzcmNjYXBzID0gZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcyAoaW5mbyk7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19jbG9ja3JhdGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkZXBheWxvYWQsICJubyBjbG9jay1yYXRlIHNwZWNpZmllZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfTDE2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwTDE2RGVwYXkgKnJ0cEwxNmRlcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ2ludCBwYXlsb2FkX2xlbjsKLSAgZ2Jvb2xlYW4gbWFya2VyOwotCi0gIHJ0cEwxNmRlcGF5ID0gR1NUX1JUUF9MMTZfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgaWYgKHBheWxvYWRfbGVuIDw9IDApCi0gICAgZ290byBlbXB0eV9wYWNrZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwTDE2ZGVwYXksICJnb3QgcGF5bG9hZCBvZiAlZCBieXRlcyIsIHBheWxvYWRfbGVuKTsKLQotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgKHJ0cCk7Ci0gIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCk7Ci0KLSAgaWYgKG1hcmtlcikgewotICAgIC8qIG1hcmsgdGFsayBzcHVydCB3aXRoIFJFU1lOQyAqLwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX1JFU1lOQyk7Ci0gIH0KLQotICBvdXRidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKG91dGJ1Zik7Ci0gIGlmIChydHBMMTZkZXBheS0+b3JkZXIgJiYKLSAgICAgICFnc3RfYXVkaW9fYnVmZmVyX3Jlb3JkZXJfY2hhbm5lbHMgKG91dGJ1ZiwKLSAgICAgICAgICBydHBMMTZkZXBheS0+aW5mby5maW5mby0+Zm9ybWF0LCBydHBMMTZkZXBheS0+aW5mby5jaGFubmVscywKLSAgICAgICAgICBydHBMMTZkZXBheS0+aW5mby5wb3NpdGlvbiwgcnRwTDE2ZGVwYXktPm9yZGVyLT5wb3MpKSB7Ci0gICAgZ290byByZW9yZGVyX2ZhaWxlZDsKLSAgfQotCi0gIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBMMTZkZXBheSksIG91dGJ1ZiwKLSAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLWVtcHR5X3BhY2tldDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cEwxNmRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJFbXB0eSBQYXlsb2FkLiIpLCAoTlVMTCkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1yZW9yZGVyX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBMMTZkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiQ2hhbm5lbCByZW9yZGVyaW5nIGZhaWxlZC4iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9MMTZfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBMMTZkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9MMTZfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBMMTZkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjVkNGNkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwTDE2ZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9MMTZfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9MMTZfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBjaGFubmVscy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qIFN0YW5kYXJkIG1hY3JvcyBmb3IgZGVmaW5pbmcgdHlwZXMgZm9yIHRoaXMgZWxlbWVudC4gICovCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9MMTZfREVQQVkgXAotICAoZ3N0X3J0cF9MMTZfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9MMTZfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTDE2X0RFUEFZLEdzdFJ0cEwxNkRlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9MMTZfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0wxNl9ERVBBWSxHc3RSdHBMMTZEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9MMTZfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTDE2X0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9MMTZfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0wxNl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBMMTZEZXBheSBHc3RSdHBMMTZEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBMMTZEZXBheUNsYXNzIEdzdFJ0cEwxNkRlcGF5Q2xhc3M7Ci0KLS8qIERlZmluaXRpb24gb2Ygc3RydWN0dXJlIHN0b3JpbmcgZGF0YSBmb3IgdGhpcyBlbGVtZW50LiAqLwotc3RydWN0IF9Hc3RSdHBMMTZEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLQotICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpvcmRlcjsKLX07Ci0KLS8qIFN0YW5kYXJkIGRlZmluaXRpb24gZGVmaW5pbmcgYSBjbGFzcyBmb3IgdGhpcyBlbGVtZW50LiAqLwotc3RydWN0IF9Hc3RSdHBMMTZEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX0wxNl9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfTDE2X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0wxNl9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwTDE2cGF5LmMgYi9nc3QvcnRwL2dzdHJ0cEwxNnBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzgzYTY1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwTDE2cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cEwxNnBheQotICogQHNlZV9hbHNvOiBydHBMMTZkZXBheQotICoKLSAqIFBheWxvYWQgcmF3IGF1ZGlvIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAzNTUxLgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzU1MS50eHQKLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgcnRwTDE2cGF5ICEgdWRwc2luawotICogXXwgVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgcGF5bG9hZCByYXcgYXVkaW8uIFJlZmVyIHRvCi0gKiB0aGUgcnRwTDE2ZGVwYXkgZXhhbXBsZSB0byBkZXBheWxvYWQgYW5kIHBsYXkgdGhlIFJUUCBzdHJlYW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwTDE2cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwY2hhbm5lbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwTDE2cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBMMTZwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX0wxNl9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgUzE2QkUsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9MMTZfcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpIFsgOTYsIDEyNyBdLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWyAxLCBNQVggXSwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTDE2XCIsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXTsiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkwxNlwiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfTDE2X1NURVJFT19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDQ0MTAwOyIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTDE2XCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9MMTZfTU9OT19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDQ0MTAwIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9MMTZfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfTDE2X3BheV9nZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHJ0cHBheWxvYWQsCi0gICAgR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX0wxNl9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfTDE2X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBMMTZQYXksIGdzdF9ydHBfTDE2X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX0wxNl9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwTDE2UGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX0wxNl9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmdldF9jYXBzID0gZ3N0X3J0cF9MMTZfcGF5X2dldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF9MMTZfcGF5X2hhbmRsZV9idWZmZXI7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9MMTZfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfTDE2X3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBhdWRpbyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZSBSYXcgYXVkaW8gaW50byBSVFAgcGFja2V0cyAoUkZDIDM1NTEpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBMMTZwYXlfZGVidWcsICJydHBMMTZwYXkiLCAwLAotICAgICAgIkwxNiBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX0wxNl9wYXlfaW5pdCAoR3N0UnRwTDE2UGF5ICogcnRwTDE2cGF5KQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VhdWRpb3BheWxvYWQgPSBHU1RfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCAocnRwTDE2cGF5KTsKLQotICAvKiB0ZWxsIHJ0cGJhc2VhdWRpb3BheWxvYWQgdGhhdCB0aGlzIGlzIGEgc2FtcGxlIGJhc2VkIGNvZGVjICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGVfYmFzZWQgKHJ0cGJhc2VhdWRpb3BheWxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfTDE2X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwTDE2UGF5ICpydHBMMTZwYXk7Ci0gIGdib29sZWFuIHJlczsKLSAgZ2NoYXIgKnBhcmFtczsKLSAgR3N0QXVkaW9JbmZvICppbmZvOwotICBjb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKm9yZGVyOwotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VhdWRpb3BheWxvYWQgPSBHU1RfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCAoYmFzZXBheWxvYWQpOwotICBydHBMMTZwYXkgPSBHU1RfUlRQX0wxNl9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBpbmZvID0gJnJ0cEwxNnBheS0+aW5mbzsKLSAgZ3N0X2F1ZGlvX2luZm9faW5pdCAoaW5mbyk7Ci0gIGlmICghZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzIChpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBvcmRlciA9IGdzdF9ydHBfY2hhbm5lbHNfZ2V0X2J5X3BvcyAoaW5mby0+Y2hhbm5lbHMsIGluZm8tPnBvc2l0aW9uKTsKLSAgcnRwTDE2cGF5LT5vcmRlciA9IG9yZGVyOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChiYXNlcGF5bG9hZCwgImF1ZGlvIiwgVFJVRSwgIkwxNiIsCi0gICAgICBpbmZvLT5yYXRlKTsKLSAgcGFyYW1zID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBpbmZvLT5jaGFubmVscyk7Ci0KLSAgaWYgKCFvcmRlciAmJiBpbmZvLT5jaGFubmVscyA+IDIpIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBMMTZwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiVW5rbm93biBjaGFubmVsIG9yZGVyIGZvciAlZCBjaGFubmVscyIsIGluZm8tPmNoYW5uZWxzKSk7Ci0gIH0KLQotICBpZiAob3JkZXIgJiYgb3JkZXItPm5hbWUpIHsKLSAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsCi0gICAgICAgICJlbmNvZGluZy1wYXJhbXMiLCBHX1RZUEVfU1RSSU5HLCBwYXJhbXMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsCi0gICAgICAgIGluZm8tPmNoYW5uZWxzLCAiY2hhbm5lbC1vcmRlciIsIEdfVFlQRV9TVFJJTkcsIG9yZGVyLT5uYW1lLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsCi0gICAgICAgICJlbmNvZGluZy1wYXJhbXMiLCBHX1RZUEVfU1RSSU5HLCBwYXJhbXMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsCi0gICAgICAgIGluZm8tPmNoYW5uZWxzLCBOVUxMKTsKLSAgfQotCi0gIGdfZnJlZSAocGFyYW1zKTsKLQotICAvKiBvY3RldC1wZXItc2FtcGxlIGlzIDIgKiBjaGFubmVscyBmb3IgTDE2ICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGVfb3B0aW9ucyAocnRwYmFzZWF1ZGlvcGF5bG9hZCwKLSAgICAgIDIgKiBpbmZvLT5jaGFubmVscyk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfY2FwczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cEwxNnBheSwgImludmFsaWQgY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX0wxNl9wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBydHBwYXlsb2FkLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqb3RoZXJwYWRjYXBzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLQotICBvdGhlcnBhZGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHJ0cHBheWxvYWQtPnNyY3BhZCk7Ci0gIGlmIChvdGhlcnBhZGNhcHMpIHsKLSAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcnBhZGNhcHMpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgICAgIGdpbnQgY2hhbm5lbHM7Ci0gICAgICBnaW50IHB0OwotICAgICAgZ2ludCByYXRlOwotCi0gICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvdGhlcnBhZGNhcHMsIDApOwotICAgICAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsICZjaGFubmVscykpIHsKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgY2hhbm5lbHMsIE5VTEwpOwotICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcHQpKSB7Ci0gICAgICAgIGlmIChwdCA9PSBHU1RfUlRQX1BBWUxPQURfTDE2X1NURVJFTykKLSAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAyLCBOVUxMKTsKLSAgICAgICAgZWxzZSBpZiAocHQgPT0gR1NUX1JUUF9QQVlMT0FEX0wxNl9NT05PKQotICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJnJhdGUpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJyYXRlIiwgR19UWVBFX0lOVCwgcmF0ZSwgTlVMTCk7Ci0gICAgICB9IGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicGF5bG9hZCIsICZwdCkpIHsKLSAgICAgICAgaWYgKHB0ID09IEdTVF9SVFBfUEFZTE9BRF9MMTZfU1RFUkVPIHx8IHB0ID09IEdTVF9SVFBfUEFZTE9BRF9MMTZfTU9OTykKLSAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAicmF0ZSIsIEdfVFlQRV9JTlQsIDQ0MTAwLCBOVUxMKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJwYWRjYXBzKTsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0Y2FwcyA9IGNhcHM7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgdGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRjYXBzKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9MMTZfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSdHBMMTZQYXkgKnJ0cEwxNnBheTsKLQotICBydHBMMTZwYXkgPSBHU1RfUlRQX0wxNl9QQVkgKGJhc2VwYXlsb2FkKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gIGlmIChydHBMMTZwYXktPm9yZGVyICYmCi0gICAgICAhZ3N0X2F1ZGlvX2J1ZmZlcl9yZW9yZGVyX2NoYW5uZWxzIChidWZmZXIsIHJ0cEwxNnBheS0+aW5mby5maW5mby0+Zm9ybWF0LAotICAgICAgICAgIHJ0cEwxNnBheS0+aW5mby5jaGFubmVscywgcnRwTDE2cGF5LT5pbmZvLnBvc2l0aW9uLAotICAgICAgICAgIHJ0cEwxNnBheS0+b3JkZXItPnBvcykpIHsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICByZXR1cm4gR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9idWZmZXIgKGJhc2VwYXlsb2FkLAotICAgICAgYnVmZmVyKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfTDE2X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cEwxNnBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9MMTZfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwTDE2cGF5LmggYi9nc3QvcnRwL2dzdHJ0cEwxNnBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGYzNzAyLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwTDE2cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTDE2X1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0wxNl9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBjaGFubmVscy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0wxNl9QQVkgXAotICAoZ3N0X3J0cF9MMTZfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTDE2X1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9MMTZfUEFZLEdzdFJ0cEwxNlBheSkpCi0jZGVmaW5lIEdTVF9SVFBfTDE2X1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTDE2X1BBWSxHc3RSdHBMMTZQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTDE2X1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9MMTZfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9MMTZfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9MMTZfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEwxNlBheSBHc3RSdHBMMTZQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTDE2UGF5Q2xhc3MgR3N0UnRwTDE2UGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwTDE2UGF5Ci17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgcGF5bG9hZDsKLQotICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpvcmRlcjsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTDE2UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfTDE2X3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfTDE2X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9MMTZfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBMMjRkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBMMjRkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWMwMzQ5Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwTDI0ZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwTDI0ZGVwYXkKLSAqIEBzZWVfYWxzbzogcnRwTDI0cGF5Ci0gKgotICogRXh0cmFjdCByYXcgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDMxOTAsIHNlY3Rpb24gNC4KLSAqIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzMxOTAudHh0Ci0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHVkcHNyYyBjYXBzPSdhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbywgY2xvY2stcmF0ZT0oaW50KTQ0MTAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpTDI0LCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLCBjaGFubmVscz0oaW50KTEsIHBheWxvYWQ9KGludCk5NicgISBydHBMMjRkZXBheSAhIHB1bHNlc2luawotICogXXwgVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZGVwYXlsb2FkIGFuIFJUUCByYXcgYXVkaW8gc3RyZWFtLiBSZWZlciB0bwotICogdGhlIHJ0cEwyNHBheSBleGFtcGxlIHRvIGNyZWF0ZSB0aGUgUlRQIHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cEwyNGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwY2hhbm5lbHMuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBMMjRkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwTDI0ZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX0wyNF9kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSBTMjRCRSwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX0wyNF9kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIiAiY2xvY2stcmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkwyNFwiIikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfTDI0X2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEwyNERlcGF5LCBnc3RfcnRwX0wyNF9kZXBheSwgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfTDI0X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9MMjRfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9MMjRfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwTDI0RGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX0wyNF9kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX0wyNF9kZXBheV9wcm9jZXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfTDI0X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfTDI0X2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIGF1ZGlvIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyByYXcgMjQtYml0IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMiLAotICAgICAgIlplZXNoYW4gQWxpIDx6YWsxNDdAeWFob28uY29tPiwiICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiwiCi0gICAgICAiRGF2aWQgSG9scm95ZCA8ZGF2ZUBiYWRnZXJzLWluLWZvaWwuY28udWs+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cEwyNGRlcGF5X2RlYnVnLCAicnRwTDI0ZGVwYXkiLCAwLAotICAgICAgIlJhdyBBdWRpbyBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfTDI0X2RlcGF5X2luaXQgKEdzdFJ0cEwyNERlcGF5ICogcnRwTDI0ZGVwYXkpCi17Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfcnRwX0wyNF9kZXBheV9wYXJzZV9pbnQgKEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgY29uc3QgZ2NoYXIgKiBmaWVsZCwKLSAgICBnaW50IGRlZikKLXsKLSAgY29uc3QgZ2NoYXIgKnN0cjsKLSAgZ2ludCByZXM7Ci0KLSAgaWYgKChzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgZmllbGQpKSkKLSAgICByZXR1cm4gYXRvaSAoc3RyKTsKLQotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsIGZpZWxkLCAmcmVzKSkKLSAgICByZXR1cm4gcmVzOwotCi0gIHJldHVybiBkZWY7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9MMjRfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RSdHBMMjREZXBheSAqcnRwTDI0ZGVwYXk7Ci0gIGdpbnQgY2xvY2tfcmF0ZSwgcGF5bG9hZDsKLSAgZ2ludCBjaGFubmVsczsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgZ2Jvb2xlYW4gcmVzOwotICBjb25zdCBnY2hhciAqY2hhbm5lbF9vcmRlcjsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpvcmRlcjsKLSAgR3N0QXVkaW9JbmZvICppbmZvOwotCi0gIHJ0cEwyNGRlcGF5ID0gR1NUX1JUUF9MMjRfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgcGF5bG9hZCA9IDk2OwotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcGF5bG9hZCk7Ci0gIC8qIG5vIGZpeGVkIG1hcHBpbmcsIHdlIG5lZWQgY2xvY2stcmF0ZSAqLwotICBjaGFubmVscyA9IDA7Ci0gIGNsb2NrX3JhdGUgPSAwOwotCi0gIC8qIGNhcHMgY2FuIG92ZXJ3cml0ZSBkZWZhdWx0cyAqLwotICBjbG9ja19yYXRlID0KLSAgICAgIGdzdF9ydHBfTDI0X2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsIGNsb2NrX3JhdGUpOwotICBpZiAoY2xvY2tfcmF0ZSA9PSAwKQotICAgIGdvdG8gbm9fY2xvY2tyYXRlOwotCi0gIGNoYW5uZWxzID0KLSAgICAgIGdzdF9ydHBfTDI0X2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiZW5jb2RpbmctcGFyYW1zIiwgY2hhbm5lbHMpOwotICBpZiAoY2hhbm5lbHMgPT0gMCkgewotICAgIGNoYW5uZWxzID0gZ3N0X3J0cF9MMjRfZGVwYXlfcGFyc2VfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIGNoYW5uZWxzKTsKLSAgICBpZiAoY2hhbm5lbHMgPT0gMCkgewotICAgICAgLyogY2hhbm5lbHMgZGVmYXVsdHMgdG8gMSBvdGhlcndpc2UgKi8KLSAgICAgIGNoYW5uZWxzID0gMTsKLSAgICB9Ci0gIH0KLQotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIGluZm8gPSAmcnRwTDI0ZGVwYXktPmluZm87Ci0gIGdzdF9hdWRpb19pbmZvX2luaXQgKGluZm8pOwotICBpbmZvLT5maW5mbyA9IGdzdF9hdWRpb19mb3JtYXRfZ2V0X2luZm8gKEdTVF9BVURJT19GT1JNQVRfUzI0QkUpOwotICBpbmZvLT5yYXRlID0gY2xvY2tfcmF0ZTsKLSAgaW5mby0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgaW5mby0+YnBmID0gKGluZm8tPmZpbmZvLT53aWR0aCAvIDgpICogY2hhbm5lbHM7Ci0KLSAgLyogYWRkIGNoYW5uZWwgcG9zaXRpb25zICovCi0gIGNoYW5uZWxfb3JkZXIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImNoYW5uZWwtb3JkZXIiKTsKLQotICBvcmRlciA9IGdzdF9ydHBfY2hhbm5lbHNfZ2V0X2J5X29yZGVyIChjaGFubmVscywgY2hhbm5lbF9vcmRlcik7Ci0gIHJ0cEwyNGRlcGF5LT5vcmRlciA9IG9yZGVyOwotICBpZiAob3JkZXIpIHsKLSAgICBtZW1jcHkgKGluZm8tPnBvc2l0aW9uLCBvcmRlci0+cG9zLAotICAgICAgICBzaXplb2YgKEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uKSAqIGNoYW5uZWxzKTsKLSAgICBnc3RfYXVkaW9fY2hhbm5lbF9wb3NpdGlvbnNfdG9fdmFsaWRfb3JkZXIgKGluZm8tPnBvc2l0aW9uLCBpbmZvLT5jaGFubmVscyk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwTDI0ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiVW5rbm93biBjaGFubmVsIG9yZGVyICclcycgZm9yICVkIGNoYW5uZWxzIiwKLSAgICAgICAgICAgIEdTVF9TVFJfTlVMTCAoY2hhbm5lbF9vcmRlciksIGNoYW5uZWxzKSk7Ci0gICAgLyogY3JlYXRlIGRlZmF1bHQgTk9ORSBsYXlvdXQgKi8KLSAgICBnc3RfcnRwX2NoYW5uZWxzX2NyZWF0ZV9kZWZhdWx0IChjaGFubmVscywgaW5mby0+cG9zaXRpb24pOwotICB9Ci0KLSAgc3JjY2FwcyA9IGdzdF9hdWRpb19pbmZvX3RvX2NhcHMgKGluZm8pOwotICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChkZXBheWxvYWQtPnNyY3BhZCwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fY2xvY2tyYXRlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVwYXlsb2FkLCAibm8gY2xvY2stcmF0ZSBzcGVjaWZpZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX0wyNF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEwyNERlcGF5ICpydHBMMjRkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGdpbnQgcGF5bG9hZF9sZW47Ci0gIGdib29sZWFuIG1hcmtlcjsKLQotICBydHBMMjRkZXBheSA9IEdTVF9SVFBfTDI0X0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuIChydHApOwotCi0gIGlmIChwYXlsb2FkX2xlbiA8PSAwKQotICAgIGdvdG8gZW1wdHlfcGFja2V0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cEwyNGRlcGF5LCAiZ290IHBheWxvYWQgb2YgJWQgYnl0ZXMiLCBwYXlsb2FkX2xlbik7Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotICBtYXJrZXIgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIGlmIChtYXJrZXIpIHsKLSAgICAvKiBtYXJrIHRhbGsgc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotICBpZiAob3V0YnVmKSB7Ci0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cEwyNGRlcGF5KSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICB9Ci0gIGlmIChydHBMMjRkZXBheS0+b3JkZXIgJiYKLSAgICAgICFnc3RfYXVkaW9fYnVmZmVyX3Jlb3JkZXJfY2hhbm5lbHMgKG91dGJ1ZiwKLSAgICAgICAgICBydHBMMjRkZXBheS0+aW5mby5maW5mby0+Zm9ybWF0LCBydHBMMjRkZXBheS0+aW5mby5jaGFubmVscywKLSAgICAgICAgICBydHBMMjRkZXBheS0+aW5mby5wb3NpdGlvbiwgcnRwTDI0ZGVwYXktPm9yZGVyLT5wb3MpKSB7Ci0gICAgZ290byByZW9yZGVyX2ZhaWxlZDsKLSAgfQotCi0gIHJldHVybiBvdXRidWY7Ci0KLSAgLyogRVJST1JTICovCi1lbXB0eV9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBMMjRkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiRW1wdHkgUGF5bG9hZC4iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotcmVvcmRlcl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwTDI0ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIkNoYW5uZWwgcmVvcmRlcmluZyBmYWlsZWQuIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfTDI0X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwTDI0ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfTDI0X0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwTDI0ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwTDI0ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlMDBlNi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cEwyNGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTDI0X0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTDI0X0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwY2hhbm5lbHMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0vKiBTdGFuZGFyZCBtYWNyb3MgZm9yIGRlZmluaW5nIHR5cGVzIGZvciB0aGlzIGVsZW1lbnQuICAqLwotI2RlZmluZSBHU1RfVFlQRV9SVFBfTDI0X0RFUEFZIFwKLSAgKGdzdF9ydHBfTDI0X2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTDI0X0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0wyNF9ERVBBWSxHc3RSdHBMMjREZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfTDI0X0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9MMjRfREVQQVksR3N0UnRwTDI0RGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTDI0X0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0wyNF9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTDI0X0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9MMjRfREVQQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTDI0RGVwYXkgR3N0UnRwTDI0RGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTDI0RGVwYXlDbGFzcyBHc3RSdHBMMjREZXBheUNsYXNzOwotCi0vKiBEZWZpbml0aW9uIG9mIHN0cnVjdHVyZSBzdG9yaW5nIGRhdGEgZm9yIHRoaXMgZWxlbWVudC4gKi8KLXN0cnVjdCBfR3N0UnRwTDI0RGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgR3N0QXVkaW9JbmZvIGluZm87Ci0gIGNvbnN0IEdzdFJUUENoYW5uZWxPcmRlciAqb3JkZXI7Ci19OwotCi0vKiBTdGFuZGFyZCBkZWZpbml0aW9uIGRlZmluaW5nIGEgY2xhc3MgZm9yIHRoaXMgZWxlbWVudC4gKi8KLXN0cnVjdCBfR3N0UnRwTDI0RGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9MMjRfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX0wyNF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9MMjRfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cEwyNHBheS5jIGIvZ3N0L3J0cC9nc3RydHBMMjRwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM2YmQ0NC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cEwyNHBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1ydHBMMjRwYXkKLSAqIEBzZWVfYWxzbzogcnRwTDI0ZGVwYXkKLSAqCi0gKiBQYXlsb2FkIHJhdyAyNC1iaXQgYXVkaW8gaW50byBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDMxOTAsIHNlY3Rpb24gNC4KLSAqIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzMxOTAudHh0Ci0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyAhIGF1ZGlvY29udmVydCAhIHJ0cEwyNHBheSAhIHVkcHNpbmsKLSAqIF18IFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIHBheWxvYWQgcmF3IGF1ZGlvLiBSZWZlciB0bwotICogdGhlIHJ0cEwyNGRlcGF5IGV4YW1wbGUgdG8gZGVwYXlsb2FkIGFuZCBwbGF5IHRoZSBSVFAgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgImdzdHJ0cEwyNHBheS5oIgotI2luY2x1ZGUgImdzdHJ0cGNoYW5uZWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cEwyNHBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwTDI0cGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9MMjRfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIFMyNEJFLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfTDI0X3BheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSBbIDk2LCAxMjcgXSwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkwyNFwiLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF07IikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9MMjRfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfTDI0X3BheV9nZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHJ0cHBheWxvYWQsCi0gICAgR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX0wyNF9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfTDI0X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBMMjRQYXksIGdzdF9ydHBfTDI0X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX0wyNF9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwTDI0UGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX0wyNF9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmdldF9jYXBzID0gZ3N0X3J0cF9MMjRfcGF5X2dldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF9MMjRfcGF5X2hhbmRsZV9idWZmZXI7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9MMjRfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfTDI0X3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBhdWRpbyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZSBSYXcgMjQtYml0IGF1ZGlvIGludG8gUlRQIHBhY2tldHMgKFJGQyAzMTkwKSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4sIgotICAgICAgIkRhdmlkIEhvbHJveWQgPGRhdmVAYmFkZ2Vycy1pbi1mb2lsLmNvLnVrPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBMMjRwYXlfZGVidWcsICJydHBMMjRwYXkiLCAwLAotICAgICAgIkwyNCBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX0wyNF9wYXlfaW5pdCAoR3N0UnRwTDI0UGF5ICogcnRwTDI0cGF5KQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VhdWRpb3BheWxvYWQgPSBHU1RfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCAocnRwTDI0cGF5KTsKLQotICAvKiB0ZWxsIHJ0cGJhc2VhdWRpb3BheWxvYWQgdGhhdCB0aGlzIGlzIGEgc2FtcGxlIGJhc2VkIGNvZGVjICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGVfYmFzZWQgKHJ0cGJhc2VhdWRpb3BheWxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfTDI0X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwTDI0UGF5ICpydHBMMjRwYXk7Ci0gIGdib29sZWFuIHJlczsKLSAgZ2NoYXIgKnBhcmFtczsKLSAgR3N0QXVkaW9JbmZvICppbmZvOwotICBjb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKm9yZGVyOwotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VhdWRpb3BheWxvYWQgPSBHU1RfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCAoYmFzZXBheWxvYWQpOwotICBydHBMMjRwYXkgPSBHU1RfUlRQX0wyNF9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBpbmZvID0gJnJ0cEwyNHBheS0+aW5mbzsKLSAgZ3N0X2F1ZGlvX2luZm9faW5pdCAoaW5mbyk7Ci0gIGlmICghZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzIChpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBvcmRlciA9IGdzdF9ydHBfY2hhbm5lbHNfZ2V0X2J5X3BvcyAoaW5mby0+Y2hhbm5lbHMsIGluZm8tPnBvc2l0aW9uKTsKLSAgcnRwTDI0cGF5LT5vcmRlciA9IG9yZGVyOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChiYXNlcGF5bG9hZCwgImF1ZGlvIiwgVFJVRSwgIkwyNCIsCi0gICAgICBpbmZvLT5yYXRlKTsKLSAgcGFyYW1zID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBpbmZvLT5jaGFubmVscyk7Ci0KLSAgaWYgKCFvcmRlciAmJiBpbmZvLT5jaGFubmVscyA+IDIpIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBMMjRwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiVW5rbm93biBjaGFubmVsIG9yZGVyIGZvciAlZCBjaGFubmVscyIsIGluZm8tPmNoYW5uZWxzKSk7Ci0gIH0KLQotICBpZiAob3JkZXIgJiYgb3JkZXItPm5hbWUpIHsKLSAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsCi0gICAgICAgICJlbmNvZGluZy1wYXJhbXMiLCBHX1RZUEVfU1RSSU5HLCBwYXJhbXMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsCi0gICAgICAgIGluZm8tPmNoYW5uZWxzLCAiY2hhbm5lbC1vcmRlciIsIEdfVFlQRV9TVFJJTkcsIG9yZGVyLT5uYW1lLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsCi0gICAgICAgICJlbmNvZGluZy1wYXJhbXMiLCBHX1RZUEVfU1RSSU5HLCBwYXJhbXMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsCi0gICAgICAgIGluZm8tPmNoYW5uZWxzLCBOVUxMKTsKLSAgfQotCi0gIGdfZnJlZSAocGFyYW1zKTsKLQotICAvKiBvY3RldC1wZXItc2FtcGxlIGlzIDMgKiBjaGFubmVscyBmb3IgTDI0ICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGVfb3B0aW9ucyAocnRwYmFzZWF1ZGlvcGF5bG9hZCwKLSAgICAgIDMgKiBpbmZvLT5jaGFubmVscyk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfY2FwczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cEwyNHBheSwgImludmFsaWQgY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX0wyNF9wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBydHBwYXlsb2FkLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqb3RoZXJwYWRjYXBzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLQotICBvdGhlcnBhZGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHJ0cHBheWxvYWQtPnNyY3BhZCk7Ci0gIGlmIChvdGhlcnBhZGNhcHMpIHsKLSAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcnBhZGNhcHMpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgICAgIGdpbnQgY2hhbm5lbHM7Ci0gICAgICBnaW50IHJhdGU7Ci0KLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKG90aGVycGFkY2FwcywgMCk7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgJmNoYW5uZWxzKSkgewotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCBjaGFubmVscywgTlVMTCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmcmF0ZSkpIHsKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgInJhdGUiLCBHX1RZUEVfSU5ULCByYXRlLCBOVUxMKTsKLSAgICAgIH0KLQotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJwYWRjYXBzKTsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0Y2FwcyA9IGNhcHM7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgdGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRjYXBzKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9MMjRfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSdHBMMjRQYXkgKnJ0cEwyNHBheTsKLQotICBydHBMMjRwYXkgPSBHU1RfUlRQX0wyNF9QQVkgKGJhc2VwYXlsb2FkKTsKLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gIGlmIChydHBMMjRwYXktPm9yZGVyICYmCi0gICAgICAhZ3N0X2F1ZGlvX2J1ZmZlcl9yZW9yZGVyX2NoYW5uZWxzIChidWZmZXIsIHJ0cEwyNHBheS0+aW5mby5maW5mby0+Zm9ybWF0LAotICAgICAgICAgIHJ0cEwyNHBheS0+aW5mby5jaGFubmVscywgcnRwTDI0cGF5LT5pbmZvLnBvc2l0aW9uLAotICAgICAgICAgIHJ0cEwyNHBheS0+b3JkZXItPnBvcykpIHsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICByZXR1cm4gR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9idWZmZXIgKGJhc2VwYXlsb2FkLAotICAgICAgYnVmZmVyKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfTDI0X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cEwyNHBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9MMjRfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwTDI0cGF5LmggYi9nc3QvcnRwL2dzdHJ0cEwyNHBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzM5NWFkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwTDI0cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTDI0X1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0wyNF9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBjaGFubmVscy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0wyNF9QQVkgXAotICAoZ3N0X3J0cF9MMjRfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTDI0X1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9MMjRfUEFZLEdzdFJ0cEwyNFBheSkpCi0jZGVmaW5lIEdTVF9SVFBfTDI0X1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTDI0X1BBWSxHc3RSdHBMMjRQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTDI0X1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9MMjRfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9MMjRfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9MMjRfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEwyNFBheSBHc3RSdHBMMjRQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTDI0UGF5Q2xhc3MgR3N0UnRwTDI0UGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwTDI0UGF5Ci17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgcGF5bG9hZDsKLQotICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpvcmRlcjsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTDI0UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfTDI0X3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfTDI0X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9MMjRfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDM0MmM4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwYWMzZGVwYXkKLSAqIEBzZWVfYWxzbzogcnRwYWMzcGF5Ci0gKgotICogRXh0cmFjdCBBQzMgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDQxODQuCi0gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0MTg0LnR4dAotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB1ZHBzcmMgY2Fwcz0nYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk0NDEwMCwgZW5jb2RpbmctbmFtZT0oc3RyaW5nKUFDMywgcGF5bG9hZD0oaW50KTk2JyAhIHJ0cGFjM2RlcGF5ICEgYTUyZGVjICEgcHVsc2VzaW5rCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZXBheWxvYWQgYW5kIGRlY29kZSBhbiBSVFAgQUMzIHN0cmVhbS4gUmVmZXIgdG8KLSAqIHRoZSBydHBhYzNwYXkgZXhhbXBsZSB0byBjcmVhdGUgdGhlIFJUUCBzdHJlYW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHJ0cGFjM2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwYWMzZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGFjM2RlcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9hYzNfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9hYzMiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2FjM19kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIHsgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9LCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJBQzNcIiIpCi0gICAgKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwQUMzRGVwYXksIGdzdF9ydHBfYWMzX2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9hYzNfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2FjM19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2FjM19kZXBheV9jbGFzc19pbml0IChHc3RSdHBBQzNEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2FjM19kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2FjM19kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBBQzMgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIEFDMyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgNDE4NCkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2FjM19kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2FjM19kZXBheV9wcm9jZXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBhYzNkZXBheV9kZWJ1ZywgInJ0cGFjM2RlcGF5IiwgMCwKLSAgICAgICJBQzMgQXVkaW8gUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2FjM19kZXBheV9pbml0IChHc3RSdHBBQzNEZXBheSAqIHJ0cGFjM2RlcGF5KQotewotICAvKiBuZWVkZWQgYmVjYXVzZSBvZiBHX0RFRklORV9UWVBFICovCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9hYzNfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IGNsb2NrX3JhdGU7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIGdib29sZWFuIHJlczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8vYWMzIik7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9hYzNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBBQzNEZXBheSAqcnRwYWMzZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBndWludDggKnBheWxvYWQ7Ci0gIGd1aW50MTYgRlQsIE5GOwotCi0gIHJ0cGFjM2RlcGF5ID0gR1NUX1JUUF9BQzNfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgaWYgKGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKSA8IDIpCi0gICAgZ290byBlbXB0eV9wYWNrZXQ7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIC8qIHN0cmlwIG9mZiBoZWFkZXIKLSAgICoKLSAgICogIDAgICAgICAgICAgICAgICAgICAgMQotICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICBNQlogICAgfCBGVHwgICAgICAgTkYgICAgICB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgRlQgPSBwYXlsb2FkWzBdICYgMHgzOwotICBORiA9IHBheWxvYWRbMV07Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwYWMzZGVwYXksICJGVDogJWQsIE5GOiAlZCIsIEZULCBORik7Ci0KLSAgLyogV2UgZG9uJ3QgYm90aGVyIHdpdGggZnJhZ21lbnRlZCBwYWNrZXRzIHlldCAqLwotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9zdWJidWZmZXIgKHJ0cCwgMiwgLTEpOwotCi0gIGlmIChvdXRidWYpIHsKLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYWMzZGVwYXkpLCBvdXRidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYWMzZGVwYXksICJwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpKTsKLSAgfQotCi0gIHJldHVybiBvdXRidWY7Ci0KLSAgLyogRVJST1JTICovCi1lbXB0eV9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBhYzNkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiRW1wdHkgUGF5bG9hZC4iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9hYzNfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBhYzNkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9BQzNfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBhYzNkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTRiYjEyLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYWMzZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9BQzNfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9BQzNfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfQUMzX0RFUEFZIFwKLSAgKGdzdF9ydHBfYWMzX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfQUMzX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0FDM19ERVBBWSxHc3RSdHBBQzNEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfQUMzX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9BQzNfREVQQVksR3N0UnRwQUMzRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfQUMzX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0FDM19ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfQUMzX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9BQzNfREVQQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQUMzRGVwYXkgR3N0UnRwQUMzRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQUMzRGVwYXlDbGFzcyBHc3RSdHBBQzNEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cEFDM0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotfTsKLQotc3RydWN0IF9Hc3RSdHBBQzNEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2FjM19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfYWMzX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0FDM19ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwYWMzcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGFjM3BheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjEwMTZkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYWMzcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGFjM3BheQotICogQHNlZV9hbHNvOiBydHBhYzNkZXBheQotICoKLSAqIFBheWxvYWQgQUMzIGF1ZGlvIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA0MTg0LgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNDE4NC50eHQKLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgYXZlbmNfYWMzICEgcnRwYWMzcGF5ICEgdWRwc2luawotICogXXwgVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZW5jb2RlIGFuZCBwYXlsb2FkIEFDMyBzdHJlYW0uIFJlZmVyIHRvCi0gKiB0aGUgcnRwYWMzZGVwYXkgZXhhbXBsZSB0byBkZXBheWxvYWQgYW5kIGRlY29kZSB0aGUgUlRQIHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBhYzNwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBhYzNwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGFjM3BheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfYWMzX3BheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9hYzM7ICIgImF1ZGlvL3gtYWMzOyAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2FjM19wYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgeyAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkFDM1wiIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2FjM19wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9hYzNfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2FjM19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2FjM19wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9hYzNfcGF5X2ZsdXNoIChHc3RSdHBBQzNQYXkgKiBydHBhYzNwYXkpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9hYzNfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfYWMzX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBBQzNQYXksIGdzdF9ydHBfYWMzX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2FjM19wYXlfY2xhc3NfaW5pdCAoR3N0UnRwQUMzUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBhYzNwYXlfZGVidWcsICJydHBhYzNwYXkiLCAwLAotICAgICAgIkFDMyBBdWRpbyBSVFAgRGVwYXlsb2FkZXIiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2FjM19wYXlfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF9hYzNfcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2FjM19wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9hYzNfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEFDMyBhdWRpbyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkIEFDMyBhdWRpbyBhcyBSVFAgcGFja2V0cyAoUkZDIDQxODQpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfYWMzX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2lua19ldmVudCA9IGdzdF9ydHBfYWMzX3BheV9zaW5rX2V2ZW50OwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfYWMzX3BheV9oYW5kbGVfYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9hYzNfcGF5X2luaXQgKEdzdFJ0cEFDM1BheSAqIHJ0cGFjM3BheSkKLXsKLSAgcnRwYWMzcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9hYzNfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBBQzNQYXkgKnJ0cGFjM3BheTsKLQotICBydHBhYzNwYXkgPSBHU1RfUlRQX0FDM19QQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGFjM3BheS0+YWRhcHRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9hYzNfcGF5X3Jlc2V0IChHc3RSdHBBQzNQYXkgKiBwYXkpCi17Ci0gIHBheS0+Zmlyc3RfdHMgPSAtMTsKLSAgcGF5LT5kdXJhdGlvbiA9IDA7Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChwYXktPmFkYXB0ZXIpOwotICBHU1RfREVCVUdfT0JKRUNUIChwYXksICJyZXNldCBkZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfYWMzX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXM7Ci0gIGdpbnQgcmF0ZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInJhdGUiLCAmcmF0ZSkpCi0gICAgcmF0ZSA9IDkwMDAwOyAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocGF5bG9hZCwgImF1ZGlvIiwgVFJVRSwgIkFDMyIsIHJhdGUpOwotICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2FjM19wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdFJ0cEFDM1BheSAqcnRwYWMzcGF5OwotCi0gIHJ0cGFjM3BheSA9IEdTVF9SVFBfQUMzX1BBWSAocGF5bG9hZCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgLyogbWFrZSBzdXJlIHdlIHB1c2ggdGhlIGxhc3QgcGFja2V0cyBpbiB0aGUgYWRhcHRlciBvbiBFT1MgKi8KLSAgICAgIGdzdF9ydHBfYWMzX3BheV9mbHVzaCAocnRwYWMzcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfcnRwX2FjM19wYXlfcmVzZXQgKHJ0cGFjM3BheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXMgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAocGF5bG9hZCwgZXZlbnQpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0cnVjdCBmcm1zaXplX3MKLXsKLSAgZ3VpbnQxNiBiaXRfcmF0ZTsKLSAgZ3VpbnQxNiBmcm1fc2l6ZVszXTsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnJtc2l6ZV9zIGZybXNpemVjb2RfdGJsW10gPSB7Ci0gIHszMiwgezY0LCA2OSwgOTZ9fSwKLSAgezMyLCB7NjQsIDcwLCA5Nn19LAotICB7NDAsIHs4MCwgODcsIDEyMH19LAotICB7NDAsIHs4MCwgODgsIDEyMH19LAotICB7NDgsIHs5NiwgMTA0LCAxNDR9fSwKLSAgezQ4LCB7OTYsIDEwNSwgMTQ0fX0sCi0gIHs1NiwgezExMiwgMTIxLCAxNjh9fSwKLSAgezU2LCB7MTEyLCAxMjIsIDE2OH19LAotICB7NjQsIHsxMjgsIDEzOSwgMTkyfX0sCi0gIHs2NCwgezEyOCwgMTQwLCAxOTJ9fSwKLSAgezgwLCB7MTYwLCAxNzQsIDI0MH19LAotICB7ODAsIHsxNjAsIDE3NSwgMjQwfX0sCi0gIHs5NiwgezE5MiwgMjA4LCAyODh9fSwKLSAgezk2LCB7MTkyLCAyMDksIDI4OH19LAotICB7MTEyLCB7MjI0LCAyNDMsIDMzNn19LAotICB7MTEyLCB7MjI0LCAyNDQsIDMzNn19LAotICB7MTI4LCB7MjU2LCAyNzgsIDM4NH19LAotICB7MTI4LCB7MjU2LCAyNzksIDM4NH19LAotICB7MTYwLCB7MzIwLCAzNDgsIDQ4MH19LAotICB7MTYwLCB7MzIwLCAzNDksIDQ4MH19LAotICB7MTkyLCB7Mzg0LCA0MTcsIDU3Nn19LAotICB7MTkyLCB7Mzg0LCA0MTgsIDU3Nn19LAotICB7MjI0LCB7NDQ4LCA0ODcsIDY3Mn19LAotICB7MjI0LCB7NDQ4LCA0ODgsIDY3Mn19LAotICB7MjU2LCB7NTEyLCA1NTcsIDc2OH19LAotICB7MjU2LCB7NTEyLCA1NTgsIDc2OH19LAotICB7MzIwLCB7NjQwLCA2OTYsIDk2MH19LAotICB7MzIwLCB7NjQwLCA2OTcsIDk2MH19LAotICB7Mzg0LCB7NzY4LCA4MzUsIDExNTJ9fSwKLSAgezM4NCwgezc2OCwgODM2LCAxMTUyfX0sCi0gIHs0NDgsIHs4OTYsIDk3NSwgMTM0NH19LAotICB7NDQ4LCB7ODk2LCA5NzYsIDEzNDR9fSwKLSAgezUxMiwgezEwMjQsIDExMTQsIDE1MzZ9fSwKLSAgezUxMiwgezEwMjQsIDExMTUsIDE1MzZ9fSwKLSAgezU3NiwgezExNTIsIDEyNTMsIDE3Mjh9fSwKLSAgezU3NiwgezExNTIsIDEyNTQsIDE3Mjh9fSwKLSAgezY0MCwgezEyODAsIDEzOTMsIDE5MjB9fSwKLSAgezY0MCwgezEyODAsIDEzOTQsIDE5MjB9fQotfTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfYWMzX3BheV9mbHVzaCAoR3N0UnRwQUMzUGF5ICogcnRwYWMzcGF5KQotewotICBndWludCBhdmFpbCwgRlQsIE5GLCBtdHU7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICAvKiB0aGUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGFkYXB0ZXIgaXMgZWl0aGVyIHNtYWxsZXIKLSAgICogdGhhbiB0aGUgTVRVIG9yIGJpZ2dlci4gSW4gdGhlIGNhc2UgaXQgaXMgc21hbGxlciwgdGhlIGNvbXBsZXRlCi0gICAqIGFkYXB0ZXIgY29udGVudHMgY2FuIGJlIHB1dCBpbiBvbmUgcGFja2V0LiBJbiB0aGUgY2FzZSB0aGUKLSAgICogYWRhcHRlciBoYXMgbW9yZSB0aGFuIG9uZSBNVFUsIHdlIG5lZWQgdG8gc3BsaXQgdGhlIEFDMyBkYXRhCi0gICAqIG92ZXIgbXVsdGlwbGUgcGFja2V0cy4gKi8KLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGFjM3BheS0+YWRhcHRlcik7Ci0KLSAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgRlQgPSAwOwotICAvKiBudW1iZXIgb2YgZnJhbWVzICovCi0gIE5GID0gcnRwYWMzcGF5LT5ORjsKLQotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHJ0cGFjM3BheSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cGFjM3BheSwgImZsdXNoaW5nICV1IGJ5dGVzIiwgYXZhaWwpOwotCi0gIHdoaWxlIChhdmFpbCA+IDApIHsKLSAgICBndWludCB0b3dyaXRlOwotICAgIGd1aW50OCAqcGF5bG9hZDsKLSAgICBndWludCBwYXlsb2FkX2xlbjsKLSAgICBndWludCBwYWNrZXRfbGVuOwotICAgIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwsIH07Ci0gICAgR3N0QnVmZmVyICpwYXlsb2FkX2J1ZmZlcjsKLQotICAgIC8qIHRoaXMgd2lsbCBiZSB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgKi8KLSAgICBwYWNrZXRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYWNrZXRfbGVuICgyICsgYXZhaWwsIDAsIDApOwotCi0gICAgLyogZmlsbCBvbmUgTVRVIG9yIGFsbCBhdmFpbGFibGUgYnl0ZXMgKi8KLSAgICB0b3dyaXRlID0gTUlOIChwYWNrZXRfbGVuLCBtdHUpOwotCi0gICAgLyogdGhpcyBpcyB0aGUgcGF5bG9hZCBsZW5ndGggKi8KLSAgICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4gKHRvd3JpdGUsIDAsIDApOwotCi0gICAgLyogY3JlYXRlIGJ1ZmZlciB0byBob2xkIHRoZSBwYXlsb2FkICovCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlICgyLCAwLCAwKTsKLQotICAgIGlmIChGVCA9PSAwKSB7Ci0gICAgICAvKiBjaGVjayBpZiBpdCBhbGwgZml0cyAqLwotICAgICAgaWYgKHRvd3JpdGUgPCBwYWNrZXRfbGVuKSB7Ci0gICAgICAgIGd1aW50IG1heGxlbjsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwYWMzcGF5LCAid2UgbmVlZCB0byBmcmFnbWVudCIpOwotICAgICAgICAvKiBjaGVjayBpZiB3ZSB3aWxsIGJlIGFibGUgdG8gcHV0IGF0IGxlYXN0IDUvOHRoIG9mIHRoZSB0b3RhbAotICAgICAgICAgKiBmcmFtZSBpbiB0aGlzIGZpcnN0IGZyYW1lLiAqLwotICAgICAgICBpZiAoKGF2YWlsICogNSkgLyA4ID49IChwYXlsb2FkX2xlbiAtIDIpKQotICAgICAgICAgIEZUID0gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIEZUID0gMjsKLSAgICAgICAgLyogY2hlY2sgaG93IG1hbnkgZnJhZ21lbnRzIHdlIHdpbGwgbmVlZCAqLwotICAgICAgICBtYXhsZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuIChtdHUgLSAyLCAwLCAwKTsKLSAgICAgICAgTkYgPSAoYXZhaWwgKyBtYXhsZW4gLSAxKSAvIG1heGxlbjsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKEZUICE9IDMpIHsKLSAgICAgIC8qIHJlbWFpbmluZyBmcmFnbWVudCAqLwotICAgICAgRlQgPSAzOwotICAgIH0KLQotICAgIC8qCi0gICAgICogIDAgICAgICAgICAgICAgICAgICAgMQotICAgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1Ci0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfCAgICBNQlogICAgfCBGVHwgICAgICAgTkYgICAgICB8Ci0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICoKLSAgICAgKiBGVDogMDogb25lIG9yIG1vcmUgY29tcGxldGUgZnJhbWVzCi0gICAgICogICAgIDE6IGluaXRpYWwgNS84IGZyYWdtZW50Ci0gICAgICogICAgIDI6IGluaXRpYWwgZnJhZ21lbnQgbm90IDUvOAotICAgICAqICAgICAzOiBvdGhlciBmcmFnbWVudAotICAgICAqIE5GOiBhbW91bnQgb2YgZnJhbWVzIGlmIEZUID0gMCwgZWxzZSBudW1iZXIgb2YgZnJhZ21lbnRzLgotICAgICAqLwotICAgIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLSAgICBHU1RfTE9HX09CSkVDVCAocnRwYWMzcGF5LCAiRlQgJXUsIE5GICV1IiwgRlQsIE5GKTsKLSAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotICAgIHBheWxvYWRbMF0gPSAoRlQgJiAzKTsKLSAgICBwYXlsb2FkWzFdID0gTkY7Ci0gICAgcGF5bG9hZF9sZW4gLT0gMjsKLQotICAgIGlmIChhdmFpbCA9PSBwYXlsb2FkX2xlbikKLSAgICAgIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIFRSVUUpOwotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgIHBheWxvYWRfYnVmZmVyID0KLSAgICAgICAgZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCAocnRwYWMzcGF5LT5hZGFwdGVyLCBwYXlsb2FkX2xlbik7Ci0gICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGFjM3BheSksIG91dGJ1ZiwgcGF5bG9hZF9idWZmZXIsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0KLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAob3V0YnVmLCBwYXlsb2FkX2J1ZmZlcik7Ci0KLSAgICBhdmFpbCAtPSBwYXlsb2FkX2xlbjsKLQotICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gcnRwYWMzcGF5LT5maXJzdF90czsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gcnRwYWMzcGF5LT5kdXJhdGlvbjsKLQotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBhYzNwYXkpLCBvdXRidWYpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfYWMzX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwQUMzUGF5ICpydHBhYzNwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnc2l6ZSBhdmFpbCwgbGVmdCwgTkY7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKnA7Ci0gIGd1aW50IHBhY2tldF9sZW47Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgdGltZXN0YW1wOwotCi0gIHJ0cGFjM3BheSA9IEdTVF9SVFBfQUMzX1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcik7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoYnVmZmVyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGFjM3BheSwgIkRJU0NPTlQiKTsKLSAgICBnc3RfcnRwX2FjM19wYXlfcmVzZXQgKHJ0cGFjM3BheSk7Ci0gIH0KLQotICAvKiBjb3VudCB0aGUgYW1vdW50IG9mIGluY29tbWluZyBwYWNrZXRzICovCi0gIE5GID0gMDsKLSAgbGVmdCA9IG1hcC5zaXplOwotICBwID0gbWFwLmRhdGE7Ci0gIHdoaWxlIChUUlVFKSB7Ci0gICAgZ3VpbnQgYnNpZCwgZnNjb2QsIGZybXNpemVjb2QsIGZyYW1lX3NpemU7Ci0KLSAgICBpZiAobGVmdCA8IDYpCi0gICAgICBicmVhazsKLQotICAgIGlmIChwWzBdICE9IDB4MGIgfHwgcFsxXSAhPSAweDc3KQotICAgICAgYnJlYWs7Ci0KLSAgICBic2lkID0gcFs1XSA+PiAzOwotICAgIGlmIChic2lkID4gOCkKLSAgICAgIGJyZWFrOwotCi0gICAgZnJtc2l6ZWNvZCA9IHBbNF0gJiAweDNmOwotICAgIGZzY29kID0gcFs0XSA+PiA2OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYWMzcGF5LCAiZnNjb2QgJXUsICV1IiwgZnNjb2QsIGZybXNpemVjb2QpOwotCi0gICAgaWYgKGZzY29kID49IDMgfHwgZnJtc2l6ZWNvZCA+PSAzOCkKLSAgICAgIGJyZWFrOwotCi0gICAgZnJhbWVfc2l6ZSA9IGZybXNpemVjb2RfdGJsW2ZybXNpemVjb2RdLmZybV9zaXplW2ZzY29kXSAqIDI7Ci0gICAgaWYgKGZyYW1lX3NpemUgPiBsZWZ0KQotICAgICAgYnJlYWs7Ci0KLSAgICBORisrOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGFjM3BheSwgImZvdW5kIGZyYW1lICUiIEdfR1NJWkVfRk9STUFUICIgb2Ygc2l6ZSAldSIsCi0gICAgICAgIE5GLCBmcmFtZV9zaXplKTsKLQotICAgIHAgKz0gZnJhbWVfc2l6ZTsKLSAgICBsZWZ0IC09IGZyYW1lX3NpemU7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgaWYgKE5GID09IDApCi0gICAgZ290byBub19mcmFtZXM7Ci0KLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGFjM3BheS0+YWRhcHRlcik7Ci0KLSAgLyogZ2V0IHBhY2tldCBsZW5ndGggb2YgcHJldmlvdXMgZGF0YSBhbmQgdGhpcyBuZXcgZGF0YSwKLSAgICogcGF5bG9hZCBsZW5ndGggaW5jbHVkZXMgYSA0IGJ5dGUgaGVhZGVyICovCi0gIHBhY2tldF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKDIgKyBhdmFpbCArIG1hcC5zaXplLCAwLCAwKTsKLQotICAvKiBpZiB0aGlzIGJ1ZmZlciBpcyBnb2luZyB0byBvdmVyZmxvdyB0aGUgcGFja2V0LCBmbHVzaCB3aGF0IHdlCi0gICAqIGhhdmUuICovCi0gIGlmIChnc3RfcnRwX2Jhc2VfcGF5bG9hZF9pc19maWxsZWQgKGJhc2VwYXlsb2FkLAotICAgICAgICAgIHBhY2tldF9sZW4sIHJ0cGFjM3BheS0+ZHVyYXRpb24gKyBkdXJhdGlvbikpIHsKLSAgICByZXQgPSBnc3RfcnRwX2FjM19wYXlfZmx1c2ggKHJ0cGFjM3BheSk7Ci0gICAgYXZhaWwgPSAwOwotICB9IGVsc2UgewotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgaWYgKGF2YWlsID09IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBhYzNwYXksCi0gICAgICAgICJmaXJzdCBwYWNrZXQsIHNhdmUgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0gICAgcnRwYWMzcGF5LT5maXJzdF90cyA9IHRpbWVzdGFtcDsKLSAgICBydHBhYzNwYXktPmR1cmF0aW9uID0gMDsKLSAgICBydHBhYzNwYXktPk5GID0gMDsKLSAgfQotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGFjM3BheS0+YWRhcHRlciwgYnVmZmVyKTsKLSAgcnRwYWMzcGF5LT5kdXJhdGlvbiArPSBkdXJhdGlvbjsKLSAgcnRwYWMzcGF5LT5ORiArPSBORjsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9fZnJhbWVzOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBhYzNwYXksICJubyB2YWxpZCBBQzMgZnJhbWVzIGZvdW5kIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9hYzNfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEFDM1BheSAqcnRwYWMzcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwYWMzcGF5ID0gR1NUX1JUUF9BQzNfUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9hYzNfcGF5X3Jlc2V0IChydHBhYzNwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfYWMzX3BheV9yZXNldCAocnRwYWMzcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9hYzNfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwYWMzcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0FDM19QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBhYzNwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwYWMzcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMzFlYWMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBhYzNwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9BQzNfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfQUMzX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0FDM19QQVkgXAotICAoZ3N0X3J0cF9hYzNfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfQUMzX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9BQzNfUEFZLEdzdFJ0cEFDM1BheSkpCi0jZGVmaW5lIEdTVF9SVFBfQUMzX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQUMzX1BBWSxHc3RSdHBBQzNQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfQUMzX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9BQzNfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9BQzNfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9BQzNfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEFDM1BheSBHc3RSdHBBQzNQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQUMzUGF5Q2xhc3MgR3N0UnRwQUMzUGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwQUMzUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X3RzOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0gIGd1aW50IE5GOwotfTsKLQotc3RydWN0IF9Hc3RSdHBBQzNQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfYWMzX3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfYWMzX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9BQzNfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzg3YTFhLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYW1yZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwYW1yZGVwYXkKLSAqIEBzZWVfYWxzbzogcnRwYW1ycGF5Ci0gKgotICogRXh0cmFjdCBBTVIgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDMyNjcuCi0gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzMjY3LnR4dAotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB1ZHBzcmMgY2Fwcz0nYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8sIGNsb2NrLXJhdGU9KGludCk4MDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpQU1SLCBlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLCBvY3RldC1hbGlnbj0oc3RyaW5nKTEsIHBheWxvYWQ9KGludCk5NicgISBydHBhbXJkZXBheSAhIGFtcm5iZGVjICEgcHVsc2VzaW5rCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZXBheWxvYWQgYW5kIGRlY29kZSBhbiBSVFAgQU1SIHN0cmVhbS4gUmVmZXIgdG8KLSAqIHRoZSBydHBhbXJwYXkgZXhhbXBsZSB0byBjcmVhdGUgdGhlIFJUUCBzdHJlYW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLS8qCi0gKiBSRkMgMzI2NyAtIFJlYWwtVGltZSBUcmFuc3BvcnQgUHJvdG9jb2wgKFJUUCkgUGF5bG9hZCBGb3JtYXQgYW5kIEZpbGUKLSAqIFN0b3JhZ2UgRm9ybWF0IGZvciB0aGUgQWRhcHRpdmUgTXVsdGktUmF0ZSAoQU1SKSBhbmQgQWRhcHRpdmUgTXVsdGktUmF0ZQotICogV2lkZWJhbmQgKEFNUi1XQikgQXVkaW8gQ29kZWNzLgotICoKLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwYW1yZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBhbXJkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwYW1yZGVwYXlfZGVidWcpCi0KLS8qIFJ0cEFNUkRlcGF5IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAKLX07Ci0KLS8qIGlucHV0IGlzIGFuIFJUUCBwYWNrZXQKLSAqCi0gKiBwYXJhbXMgc2VlIFJGQyAzMjY3LCBzZWN0aW9uIDguMQotICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9hbXJfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiQU1SXCIsICIKLSAgICAgICAgLyogVGhpcyBpcyB0aGUgZGVmYXVsdCwgc28gdGhlIHBlZXIgZG9lc24ndCBoYXZlIHRvIHNwZWNpZnkgaXQKLSAgICAgICAgICogImVuY29kaW5nLXBhcmFtcyA9IChzdHJpbmcpIFwiMVwiLCAiICovCi0gICAgICAgIC8qIE5PVEUgdGhhdCBhbGwgdmFsdWVzIG11c3QgYmUgc3RyaW5ncyBpbiBvcmRlIHRvIGJlIGFibGUgdG8gZG8gU0RQIDwtPgotICAgICAgICAgKiBHc3RDYXBzIG1hcHBpbmcuICovCi0gICAgICAgICJvY3RldC1hbGlnbiA9IChzdHJpbmcpIFwiMVwiOyIKLSAgICAgICAgLyogZm9sbG93aW5nIG9wdGlvbnMgYXJlIG5vdCBuZWVkZWQgZm9yIGEgZGVjb2RlcgotICAgICAgICAgKgotICAgICAgICAgImNyYyA9IChzdHJpbmcpIHsgXCIwXCIsIFwiMVwiIH0sICIKLSAgICAgICAgICJyb2J1c3Qtc29ydGluZyA9IChzdHJpbmcpIFwiMFwiLCAiCi0gICAgICAgICAiaW50ZXJsZWF2aW5nID0gKHN0cmluZykgXCIwXCI7IgotICAgICAgICAgIm1vZGUtc2V0ID0gKGludCkgWyAwLCA3IF0sICIKLSAgICAgICAgICJtb2RlLWNoYW5nZS1wZXJpb2QgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICAibW9kZS1jaGFuZ2UtbmVpZ2hib3IgPSAoYm9vbGVhbikgeyBUUlVFLCBGQUxTRSB9LCAiCi0gICAgICAgICAibWF4cHRpbWUgPSAoaW50KSBbIDIwLCBNQVggXSwgIgotICAgICAgICAgInB0aW1lID0gKGludCkgWyAyMCwgTUFYIF0iCi0gICAgICAgICAqLwotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgMTYwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkFNUi1XQlwiLCAiCi0gICAgICAgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQsIHNvIHRoZSBwZWVyIGRvZXNuJ3QgaGF2ZSB0byBzcGVjaWZ5IGl0Ci0gICAgICAgICAqICJlbmNvZGluZy1wYXJhbXMgPSAoc3RyaW5nKSBcIjFcIiwgIiAqLwotICAgICAgICAvKiBOT1RFIHRoYXQgYWxsIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MgaW4gb3JkZSB0byBiZSBhYmxlIHRvIGRvIFNEUCA8LT4KLSAgICAgICAgICogR3N0Q2FwcyBtYXBwaW5nLiAqLwotICAgICAgICAib2N0ZXQtYWxpZ24gPSAoc3RyaW5nKSBcIjFcIjsiCi0gICAgICAgIC8qIGZvbGxvd2luZyBvcHRpb25zIGFyZSBub3QgbmVlZGVkIGZvciBhIGRlY29kZXIKLSAgICAgICAgICoKLSAgICAgICAgICJjcmMgPSAoc3RyaW5nKSB7IFwiMFwiLCBcIjFcIiB9LCAiCi0gICAgICAgICAicm9idXN0LXNvcnRpbmcgPSAoc3RyaW5nKSBcIjBcIiwgIgotICAgICAgICAgImludGVybGVhdmluZyA9IChzdHJpbmcpIFwiMFwiIgotICAgICAgICAgIm1vZGUtc2V0ID0gKGludCkgWyAwLCA3IF0sICIKLSAgICAgICAgICJtb2RlLWNoYW5nZS1wZXJpb2QgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICAibW9kZS1jaGFuZ2UtbmVpZ2hib3IgPSAoYm9vbGVhbikgeyBUUlVFLCBGQUxTRSB9LCAiCi0gICAgICAgICAibWF4cHRpbWUgPSAoaW50KSBbIDIwLCBNQVggXSwgIgotICAgICAgICAgInB0aW1lID0gKGludCkgWyAyMCwgTUFYIF0iCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9hbXJfZGVwYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vQU1SLCAiICJjaGFubmVscyA9IChpbnQpIDEsIiAicmF0ZSA9IChpbnQpIDgwMDA7IgotICAgICAgICAiYXVkaW8vQU1SLVdCLCAiICJjaGFubmVscyA9IChpbnQpIDEsIiAicmF0ZSA9IChpbnQpIDE2MDAwIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9hbXJfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2Ftcl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9hbXJfZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwQU1SRGVwYXksIGdzdF9ydHBfYW1yX2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9hbXJfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwQU1SRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9hbXJfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9hbXJfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgQU1SIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBBTVIgb3IgQU1SLVdCIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzMjY3KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2Ftcl9kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfYW1yX2RlcGF5X3NldGNhcHM7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGFtcmRlcGF5X2RlYnVnLCAicnRwYW1yZGVwYXkiLCAwLAotICAgICAgIkFNUi9BTVItV0IgUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Ftcl9kZXBheV9pbml0IChHc3RSdHBBTVJEZXBheSAqIHJ0cGFtcmRlcGF5KQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkICpkZXBheWxvYWQ7Ci0KLSAgZGVwYXlsb2FkID0gR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwYW1yZGVwYXkpOwotCi0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2Ftcl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIEdzdFJ0cEFNUkRlcGF5ICpydHBhbXJkZXBheTsKLSAgY29uc3QgZ2NoYXIgKnBhcmFtczsKLSAgY29uc3QgZ2NoYXIgKnN0ciwgKnR5cGU7Ci0gIGdpbnQgY2xvY2tfcmF0ZSwgbmVlZF9jbG9ja19yYXRlOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwYW1yZGVwYXkgPSBHU1RfUlRQX0FNUl9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAvKiBmaWd1cmUgb3V0IHRoZSBtb2RlIGZpcnN0IGFuZCBzZXQgdGhlIGNsb2NrIHJhdGVzICovCi0gIGlmICgoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJlbmNvZGluZy1uYW1lIikpKSB7Ci0gICAgaWYgKHN0cmNtcCAoc3RyLCAiQU1SIikgPT0gMCkgewotICAgICAgcnRwYW1yZGVwYXktPm1vZGUgPSBHU1RfUlRQX0FNUl9EUF9NT0RFX05COwotICAgICAgbmVlZF9jbG9ja19yYXRlID0gODAwMDsKLSAgICAgIHR5cGUgPSAiYXVkaW8vQU1SIjsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcCAoc3RyLCAiQU1SLVdCIikgPT0gMCkgewotICAgICAgcnRwYW1yZGVwYXktPm1vZGUgPSBHU1RfUlRQX0FNUl9EUF9NT0RFX1dCOwotICAgICAgbmVlZF9jbG9ja19yYXRlID0gMTYwMDA7Ci0gICAgICB0eXBlID0gImF1ZGlvL0FNUi1XQiI7Ci0gICAgfSBlbHNlCi0gICAgICBnb3RvIGludmFsaWRfbW9kZTsKLSAgfSBlbHNlCi0gICAgZ290byBpbnZhbGlkX21vZGU7Ci0KLSAgaWYgKCEoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJvY3RldC1hbGlnbiIpKSkKLSAgICBydHBhbXJkZXBheS0+b2N0ZXRfYWxpZ24gPSBGQUxTRTsKLSAgZWxzZQotICAgIHJ0cGFtcmRlcGF5LT5vY3RldF9hbGlnbiA9IChhdG9pIChzdHIpID09IDEpOwotCi0gIGlmICghKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiY3JjIikpKQotICAgIHJ0cGFtcmRlcGF5LT5jcmMgPSBGQUxTRTsKLSAgZWxzZQotICAgIHJ0cGFtcmRlcGF5LT5jcmMgPSAoYXRvaSAoc3RyKSA9PSAxKTsKLQotICBpZiAocnRwYW1yZGVwYXktPmNyYykgewotICAgIC8qIGNyYyBtb2RlIGltcGxpZXMgb2N0ZXQgYWxpZ25lZCBtb2RlICovCi0gICAgcnRwYW1yZGVwYXktPm9jdGV0X2FsaWduID0gVFJVRTsKLSAgfQotCi0gIGlmICghKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAicm9idXN0LXNvcnRpbmciKSkpCi0gICAgcnRwYW1yZGVwYXktPnJvYnVzdF9zb3J0aW5nID0gRkFMU0U7Ci0gIGVsc2UKLSAgICBydHBhbXJkZXBheS0+cm9idXN0X3NvcnRpbmcgPSAoYXRvaSAoc3RyKSA9PSAxKTsKLQotICBpZiAocnRwYW1yZGVwYXktPnJvYnVzdF9zb3J0aW5nKSB7Ci0gICAgLyogcm9idXN0X3NvcnRpbmcgbW9kZSBpbXBsaWVzIG9jdGV0IGFsaWduZWQgbW9kZSAqLwotICAgIHJ0cGFtcmRlcGF5LT5vY3RldF9hbGlnbiA9IFRSVUU7Ci0gIH0KLQotICBpZiAoIShzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImludGVybGVhdmluZyIpKSkKLSAgICBydHBhbXJkZXBheS0+aW50ZXJsZWF2aW5nID0gRkFMU0U7Ci0gIGVsc2UKLSAgICBydHBhbXJkZXBheS0+aW50ZXJsZWF2aW5nID0gKGF0b2kgKHN0cikgPT0gMSk7Ci0KLSAgaWYgKHJ0cGFtcmRlcGF5LT5pbnRlcmxlYXZpbmcpIHsKLSAgICAvKiBpbnRlcmxlYXZpbmcgbW9kZSBpbXBsaWVzIG9jdGV0IGFsaWduZWQgbW9kZSAqLwotICAgIHJ0cGFtcmRlcGF5LT5vY3RldF9hbGlnbiA9IFRSVUU7Ci0gIH0KLQotICBpZiAoIShwYXJhbXMgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImVuY29kaW5nLXBhcmFtcyIpKSkKLSAgICBydHBhbXJkZXBheS0+Y2hhbm5lbHMgPSAxOwotICBlbHNlIHsKLSAgICBydHBhbXJkZXBheS0+Y2hhbm5lbHMgPSBhdG9pIChwYXJhbXMpOwotICB9Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IG5lZWRfY2xvY2tfcmF0ZTsKLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICAvKiB3ZSByZXF1aXJlIDEgY2hhbm5lbCwgODAwMCBIeiwgb2N0ZXQgYWxpZ25lZCwgbm8gQ1JDLAotICAgKiBubyByb2J1c3Qgc29ydGluZywgbm8gaW50ZXJsZWF2aW5nIGZvciBub3cgKi8KLSAgaWYgKHJ0cGFtcmRlcGF5LT5jaGFubmVscyAhPSAxKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKGNsb2NrX3JhdGUgIT0gbmVlZF9jbG9ja19yYXRlKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHJ0cGFtcmRlcGF5LT5vY3RldF9hbGlnbiAhPSBUUlVFKQotICAgIHJldHVybiBGQUxTRTsKLSAgaWYgKHJ0cGFtcmRlcGF5LT5yb2J1c3Rfc29ydGluZyAhPSBGQUxTRSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmIChydHBhbXJkZXBheS0+aW50ZXJsZWF2aW5nICE9IEZBTFNFKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAodHlwZSwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIHJ0cGFtcmRlcGF5LT5jaGFubmVscywKLSAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgY2xvY2tfcmF0ZSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX21vZGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHBhbXJkZXBheSwgImludmFsaWQgZW5jb2RpbmctbmFtZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiAtMSBpcyBpbnZhbGlkICovCi1zdGF0aWMgY29uc3QgZ2ludCBuYl9mcmFtZV9zaXplWzE2XSA9IHsKLSAgMTIsIDEzLCAxNSwgMTcsIDE5LCAyMCwgMjYsIDMxLAotICA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCB3Yl9mcmFtZV9zaXplWzE2XSA9IHsKLSAgMTcsIDIzLCAzMiwgMzYsIDQwLCA0NiwgNTAsIDU4LAotICA2MCwgNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwCi19OwotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfYW1yX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwQU1SRGVwYXkgKnJ0cGFtcmRlcGF5OwotICBjb25zdCBnaW50ICpmcmFtZV9zaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIGdpbnQgcGF5bG9hZF9sZW47Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIHJ0cGFtcmRlcGF5ID0gR1NUX1JUUF9BTVJfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgLyogc2V0dXAgZnJhbWUgc2l6ZSBwb2ludGVyICovCi0gIGlmIChydHBhbXJkZXBheS0+bW9kZSA9PSBHU1RfUlRQX0FNUl9EUF9NT0RFX05CKQotICAgIGZyYW1lX3NpemUgPSBuYl9mcmFtZV9zaXplOwotICBlbHNlCi0gICAgZnJhbWVfc2l6ZSA9IHdiX2ZyYW1lX3NpemU7Ci0KLSAgLyogd2hlbiB3ZSBnZXQgaGVyZSwgMSBjaGFubmVsLCA4MDAwLzE2MDAwIEh6LCBvY3RldCBhbGlnbmVkLCBubyBDUkMsCi0gICAqIG5vIHJvYnVzdCBzb3J0aW5nLCBubyBpbnRlcmxlYXZpbmcgZGF0YSBpcyB0byBiZSBkZXBheWxvYWRlZCAqLwotICB7Ci0gICAgZ3VpbnQ4ICpwYXlsb2FkLCAqcCwgKmRwOwotICAgIGdpbnQgaSwgbnVtX3BhY2tldHMsIG51bV9ub25lbXB0eV9wYWNrZXRzOwotICAgIGdpbnQgYW1yX2xlbjsKLSAgICBnaW50IElMTCwgSUxQOwotCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgICAvKiBuZWVkIGF0IGxlYXN0IDIgYnl0ZXMgZm9yIHRoZSBoZWFkZXIgKi8KLSAgICBpZiAocGF5bG9hZF9sZW4gPCAyKQotICAgICAgZ290byB0b29fc21hbGw7Ci0KLSAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKHJ0cCk7Ci0KLSAgICAvKiBkZXBheSBDTVIuIFRoZSBDTVIgaXMgdXNlZCBieSB0aGUgc2VuZGVyIHRvIHJlcXVlc3QKLSAgICAgKiBhIG5ldyBlbmNvZGluZyBtb2RlLgotICAgICAqCi0gICAgICogIDAgMSAyIDMgNCA1IDYgNwotICAgICAqICstKy0rLSstKy0rLSstKy0rCi0gICAgICogfCBDTVIgICB8UnxSfFJ8UnwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKwotICAgICAqLwotICAgIC8qIENNUiA9IChwYXlsb2FkWzBdICYgMHhmMCkgPj4gNDsgKi8KLQotICAgIC8qIHN0cmlwIENNUiBoZWFkZXIgbm93LCBwYWNrIEZUIGFuZCB0aGUgZGF0YSBmb3IgdGhlIGRlY29kZXIgKi8KLSAgICBwYXlsb2FkX2xlbiAtPSAxOwotICAgIHBheWxvYWQgKz0gMTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGFtcmRlcGF5LCAicGF5bG9hZCBsZW4gJWQiLCBwYXlsb2FkX2xlbik7Ci0KLSAgICBpZiAocnRwYW1yZGVwYXktPmludGVybGVhdmluZykgewotICAgICAgSUxMID0gKHBheWxvYWRbMF0gJiAweGYwKSA+PiA0OwotICAgICAgSUxQID0gKHBheWxvYWRbMF0gJiAweDBmKTsKLQotICAgICAgcGF5bG9hZF9sZW4gLT0gMTsKLSAgICAgIHBheWxvYWQgKz0gMTsKLQotICAgICAgaWYgKElMUCA+IElMTCkKLSAgICAgICAgZ290byB3cm9uZ19pbnRlcmxlYXZpbmc7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2Ci0gICAgICogKy0rLSstKy0rLSstKy0rLSsuLgotICAgICAqIHxGfCAgRlQgICB8UXxQfFB8IG1vcmUgRlQuLgotICAgICAqICstKy0rLSstKy0rLSstKy0rLi4KLSAgICAgKi8KLSAgICAvKiBjb3VudCBudW1iZXIgb2YgcGFja2V0cyBieSBjb3VudGluZyB0aGUgRlRzLiBBbHNvCi0gICAgICogY291bnQgbnVtYmVyIG9mIGFtciBkYXRhIGJ5dGVzIGFuZCBudW1iZXIgb2Ygbm9uLWVtcHR5Ci0gICAgICogcGFja2V0cyAodGhpcyBpcyBhbHNvIHRoZSBudW1iZXIgb2YgQ1JDcyBpZiBwcmVzZW50KS4gKi8KLSAgICBhbXJfbGVuID0gMDsKLSAgICBudW1fbm9uZW1wdHlfcGFja2V0cyA9IDA7Ci0gICAgbnVtX3BhY2tldHMgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBwYXlsb2FkX2xlbjsgaSsrKSB7Ci0gICAgICBnaW50IGZyX3NpemU7Ci0gICAgICBndWludDggRlQ7Ci0KLSAgICAgIEZUID0gKHBheWxvYWRbaV0gJiAweDc4KSA+PiAzOwotCi0gICAgICBmcl9zaXplID0gZnJhbWVfc2l6ZVtGVF07Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBhbXJkZXBheSwgImZyYW1lIHNpemUgJWQiLCBmcl9zaXplKTsKLSAgICAgIGlmIChmcl9zaXplID09IC0xKQotICAgICAgICBnb3RvIHdyb25nX2ZyYW1lc2l6ZTsKLQotICAgICAgaWYgKGZyX3NpemUgPiAwKSB7Ci0gICAgICAgIGFtcl9sZW4gKz0gZnJfc2l6ZTsKLSAgICAgICAgbnVtX25vbmVtcHR5X3BhY2tldHMrKzsKLSAgICAgIH0KLSAgICAgIG51bV9wYWNrZXRzKys7Ci0KLSAgICAgIGlmICgocGF5bG9hZFtpXSAmIDB4ODApID09IDApCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChydHBhbXJkZXBheS0+Y3JjKSB7Ci0gICAgICAvKiBkYXRhIGxlbiArIENSQyBsZW4gKyBoZWFkZXIgYnl0ZXMgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiBwYXlsb2FkX2xlbiAqLwotICAgICAgaWYgKG51bV9wYWNrZXRzICsgbnVtX25vbmVtcHR5X3BhY2tldHMgKyBhbXJfbGVuID4gcGF5bG9hZF9sZW4pCi0gICAgICAgIGdvdG8gd3JvbmdfbGVuZ3RoXzE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGRhdGEgbGVuICsgaGVhZGVyIGJ5dGVzIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gcGF5bG9hZF9sZW4gKi8KLSAgICAgIGlmIChudW1fcGFja2V0cyArIGFtcl9sZW4gPiBwYXlsb2FkX2xlbikKLSAgICAgICAgZ290byB3cm9uZ19sZW5ndGhfMjsKLSAgICB9Ci0KLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHBheWxvYWRfbGVuKTsKLQotICAgIC8qIHBvaW50IHRvIGRlc3RpbmF0aW9uICovCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0KLSAgICAvKiBwb2ludCB0byBmaXJzdCBkYXRhIHBhY2tldCAqLwotICAgIHAgPSBtYXAuZGF0YTsKLSAgICBkcCA9IHBheWxvYWQgKyBudW1fcGFja2V0czsKLSAgICBpZiAocnRwYW1yZGVwYXktPmNyYykgewotICAgICAgLyogc2tpcCBDUkMgaWYgcHJlc2VudCAqLwotICAgICAgZHAgKz0gbnVtX25vbmVtcHR5X3BhY2tldHM7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IG51bV9wYWNrZXRzOyBpKyspIHsKLSAgICAgIGdpbnQgZnJfc2l6ZTsKLQotICAgICAgLyogY29weSBGVCwgY2xlYXIgRiBiaXQgKi8KLSAgICAgICpwKysgPSBwYXlsb2FkW2ldICYgMHg3ZjsKLQotICAgICAgZnJfc2l6ZSA9IGZyYW1lX3NpemVbKHBheWxvYWRbaV0gJiAweDc4KSA+PiAzXTsKLSAgICAgIGlmIChmcl9zaXplID4gMCkgewotICAgICAgICAvKiBjb3B5IGRhdGEgcGFja2V0LCBGSVhNRSwgY2FsYyBDUkMgaGVyZS4gKi8KLSAgICAgICAgbWVtY3B5IChwLCBkcCwgZnJfc2l6ZSk7Ci0KLSAgICAgICAgcCArPSBmcl9zaXplOwotICAgICAgICBkcCArPSBmcl9zaXplOwotICAgICAgfQotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gICAgLyogd2UgY2FuIHNldCB0aGUgZHVyYXRpb24gYmVjYXVzZSBlYWNoIHBhY2tldCBpcyAyMCBtaWxsaXNlY29uZHMgKi8KLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gbnVtX3BhY2tldHMgKiAyMCAqIEdTVF9NU0VDT05EOwotCi0gICAgaWYgKGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCkpIHsKLSAgICAgIC8qIG1hcmtlciBiaXQgbWFya3MgYSBidWZmZXIgYWZ0ZXIgYSB0YWxrc3B1cnQuICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJtYXJrZXIgYml0IHdhcyBzZXQiKTsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX1JFU1lOQyk7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAicHVzaGluZyBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSk7Ci0KLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYW1yZGVwYXkpLCBvdXRidWYsIHJ0cC0+YnVmZmVyLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGFtcmRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIkFNUiBSVFAgcGF5bG9hZCB0b28gc21hbGwgKCVkKSIsIHBheWxvYWRfbGVuKSk7Ci0gICAgZ290byBiYWRfcGFja2V0OwotICB9Ci13cm9uZ19pbnRlcmxlYXZpbmc6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBhbXJkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJBTVIgUlRQIHdyb25nIGludGVybGVhdmluZyIpKTsKLSAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gIH0KLXdyb25nX2ZyYW1lc2l6ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGFtcmRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIkFNUiBSVFAgZnJhbWUgc2l6ZSA9PSAtMSIpKTsKLSAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gIH0KLXdyb25nX2xlbmd0aF8xOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwYW1yZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiQU1SIFJUUCB3cm9uZyBsZW5ndGggMSIpKTsKLSAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gIH0KLXdyb25nX2xlbmd0aF8yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwYW1yZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiQU1SIFJUUCB3cm9uZyBsZW5ndGggMiIpKTsKLSAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gIH0KLWJhZF9wYWNrZXQ6Ci0gIHsKLSAgICAvKiBubyBmYXRhbCBlcnJvciAqLwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2Ftcl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGFtcmRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0FNUl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGFtcmRlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiODA2MzQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBhbXJkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0FNUl9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0FNUl9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9BTVJfREVQQVkgXAotICAoZ3N0X3J0cF9hbXJfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9BTVJfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfQU1SX0RFUEFZLEdzdFJ0cEFNUkRlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9BTVJfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0FNUl9ERVBBWSxHc3RSdHBBTVJEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9BTVJfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfQU1SX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9BTVJfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0FNUl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBBTVJEZXBheSBHc3RSdHBBTVJEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBBTVJEZXBheUNsYXNzIEdzdFJ0cEFNUkRlcGF5Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9SVFBfQU1SX0RQX01PREVfSU5WQUxJRCA9IDAsCi0gIEdTVF9SVFBfQU1SX0RQX01PREVfTkIgICAgICA9IDEsCi0gIEdTVF9SVFBfQU1SX0RQX01PREVfV0IgICAgICA9IDIKLX0gR3N0UnRwQU1SRGVwYXlNb2RlOwotCi1zdHJ1Y3QgX0dzdFJ0cEFNUkRlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIEdzdFJ0cEFNUkRlcGF5TW9kZSBtb2RlOwotCi0gIGdib29sZWFuIG9jdGV0X2FsaWduOwotICBndWludDggICBtb2RlX3NldDsKLSAgZ2ludCAgICAgbW9kZV9jaGFuZ2VfcGVyaW9kOwotICBnYm9vbGVhbiBtb2RlX2NoYW5nZV9uZWlnaGJvcjsKLSAgZ2ludCAgICAgbWF4cHRpbWU7Ci0gIGdib29sZWFuIGNyYzsKLSAgZ2Jvb2xlYW4gcm9idXN0X3NvcnRpbmc7Ci0gIGdib29sZWFuIGludGVybGVhdmluZzsKLSAgZ2ludCAgICAgcHRpbWU7Ci0gIGdpbnQgICAgIGNoYW5uZWxzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBBTVJEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2Ftcl9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfYW1yX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0FNUl9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwYW1ycGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGFtcnBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDBiZThmLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYW1ycGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGFtcnBheQotICogQHNlZV9hbHNvOiBydHBhbXJkZXBheQotICoKLSAqIFBheWxvYWQgQU1SIGF1ZGlvIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAzMjY3LgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzI2Ny50eHQKLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgYW1ybmJlbmMgISBydHBhbXJwYXkgISB1ZHBzaW5rCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBlbmNvZGUgYW5kIHBheWxvYWQgYW4gQU1SIHN0cmVhbS4gUmVmZXIgdG8KLSAqIHRoZSBydHBhbXJkZXBheSBleGFtcGxlIHRvIGRlcGF5bG9hZCBhbmQgZGVjb2RlIHRoZSBSVFAgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiByZWZlcmVuY2VzOgotICoKLSAqIFJGQyAzMjY3IC0gUmVhbC1UaW1lIFRyYW5zcG9ydCBQcm90b2NvbCAoUlRQKSBQYXlsb2FkIEZvcm1hdCBhbmQgRmlsZQotICogICAgU3RvcmFnZSBGb3JtYXQgZm9yIHRoZSBBZGFwdGl2ZSBNdWx0aS1SYXRlIChBTVIpIGFuZCBBZGFwdGl2ZQotICogICAgTXVsdGktUmF0ZSBXaWRlYmFuZCAoQU1SLVdCKSBBdWRpbyBDb2RlY3MuCi0gKgotICogRVRTSSBUUyAxMjYgMjAxIFY2LjAuMCAoMjAwNC0xMikgLSBEaWdpdGFsIGNlbGx1bGFyIHRlbGVjb21tdW5pY2F0aW9ucyBzeXN0ZW0gKFBoYXNlIDIrKTsKLSAqICAgICAgICAgICAgICAgICBVbml2ZXJzYWwgTW9iaWxlIFRlbGVjb21tdW5pY2F0aW9ucyBTeXN0ZW0gKFVNVFMpOwotICogICAgICAgICAgICAgICAgICAgICAgICAgIEFNUiBzcGVlY2ggY29kZWMsIHdpZGViYW5kOwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSBzdHJ1Y3R1cmUKLSAqICAgICAgICAgICAgICAgICAgICAoM0dQUCBUUyAyNi4yMDEgdmVyc2lvbiA2LjAuMCBSZWxlYXNlIDYpCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBhbXJwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBhbXJwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGFtcnBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfYW1yX3BheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9BTVIsIGNoYW5uZWxzPShpbnQpMSwgcmF0ZT0oaW50KTgwMDA7ICIKLSAgICAgICAgImF1ZGlvL0FNUi1XQiwgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpMTYwMDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2Ftcl9wYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkFNUlwiLCAiCi0gICAgICAgICJlbmNvZGluZy1wYXJhbXMgPSAoc3RyaW5nKSBcIjFcIiwgIgotICAgICAgICAib2N0ZXQtYWxpZ24gPSAoc3RyaW5nKSBcIjFcIiwgIgotICAgICAgICAiY3JjID0gKHN0cmluZykgXCIwXCIsICIKLSAgICAgICAgInJvYnVzdC1zb3J0aW5nID0gKHN0cmluZykgXCIwXCIsICIKLSAgICAgICAgImludGVybGVhdmluZyA9IChzdHJpbmcpIFwiMFwiLCAiCi0gICAgICAgICJtb2RlLXNldCA9IChpbnQpIFsgMCwgNyBdLCAiCi0gICAgICAgICJtb2RlLWNoYW5nZS1wZXJpb2QgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJtb2RlLWNoYW5nZS1uZWlnaGJvciA9IChzdHJpbmcpIHsgXCIwXCIsIFwiMVwiIH0sICIKLSAgICAgICAgIm1heHB0aW1lID0gKGludCkgWyAyMCwgTUFYIF0sICIgInB0aW1lID0gKGludCkgWyAyMCwgTUFYIF07IgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDE2MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJBTVItV0JcIiwgIgotICAgICAgICAiZW5jb2RpbmctcGFyYW1zID0gKHN0cmluZykgXCIxXCIsICIKLSAgICAgICAgIm9jdGV0LWFsaWduID0gKHN0cmluZykgXCIxXCIsICIKLSAgICAgICAgImNyYyA9IChzdHJpbmcpIFwiMFwiLCAiCi0gICAgICAgICJyb2J1c3Qtc29ydGluZyA9IChzdHJpbmcpIFwiMFwiLCAiCi0gICAgICAgICJpbnRlcmxlYXZpbmcgPSAoc3RyaW5nKSBcIjBcIiwgIgotICAgICAgICAibW9kZS1zZXQgPSAoaW50KSBbIDAsIDcgXSwgIgotICAgICAgICAibW9kZS1jaGFuZ2UtcGVyaW9kID0gKGludCkgWyAxLCBNQVggXSwgIgotICAgICAgICAibW9kZS1jaGFuZ2UtbmVpZ2hib3IgPSAoc3RyaW5nKSB7IFwiMFwiLCBcIjFcIiB9LCAiCi0gICAgICAgICJtYXhwdGltZSA9IChpbnQpIFsgMjAsIE1BWCBdLCAiICJwdGltZSA9IChpbnQpIFsgMjAsIE1BWCBdIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9hbXJfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9hbXJfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9hbXJfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0jZGVmaW5lIGdzdF9ydHBfYW1yX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBBTVJQYXksIGdzdF9ydHBfYW1yX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Ftcl9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwQU1SUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX2Ftcl9wYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfYW1yX3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2Ftcl9wYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJUUCBBTVIgcGF5bG9hZGVyIiwKLSAgICAgICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQtZW5jb2RlIEFNUiBvciBBTVItV0IgYXVkaW8gaW50byBSVFAgcGFja2V0cyAoUkZDIDMyNjcpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfYW1yX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfYW1yX3BheV9oYW5kbGVfYnVmZmVyOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBhbXJwYXlfZGVidWcsICJydHBhbXJwYXkiLCAwLAotICAgICAgIkFNUi9BTVItV0IgUlRQIFBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9hbXJfcGF5X2luaXQgKEdzdFJ0cEFNUlBheSAqIHJ0cGFtcnBheSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYW1yX3BheV9yZXNldCAoR3N0UnRwQU1SUGF5ICogcGF5KQotewotICBwYXktPm5leHRfcnRwX3RpbWUgPSAwOwotICBwYXktPmZpcnN0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGF5LT5maXJzdF9ydHBfdGltZSA9IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9hbXJfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBBTVJQYXkgKnJ0cGFtcnBheTsKLSAgZ2Jvb2xlYW4gcmVzOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGNvbnN0IGdjaGFyICpzdHI7Ci0KLSAgcnRwYW1ycGF5ID0gR1NUX1JUUF9BTVJfUEFZIChiYXNlcGF5bG9hZCk7Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgbW9kZSBOYXJyb3cgb3IgV2lkZWJhbmQgKi8KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpKSkgewotICAgIGlmIChzdHJjbXAgKHN0ciwgImF1ZGlvL0FNUiIpID09IDApCi0gICAgICBydHBhbXJwYXktPm1vZGUgPSBHU1RfUlRQX0FNUl9QX01PREVfTkI7Ci0gICAgZWxzZSBpZiAoc3RyY21wIChzdHIsICJhdWRpby9BTVItV0IiKSA9PSAwKQotICAgICAgcnRwYW1ycGF5LT5tb2RlID0gR1NUX1JUUF9BTVJfUF9NT0RFX1dCOwotICAgIGVsc2UKLSAgICAgIGdvdG8gd3JvbmdfdHlwZTsKLSAgfSBlbHNlCi0gICAgZ290byB3cm9uZ190eXBlOwotCi0gIGlmIChydHBhbXJwYXktPm1vZGUgPT0gR1NUX1JUUF9BTVJfUF9NT0RFX05CKQotICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChiYXNlcGF5bG9hZCwgImF1ZGlvIiwgVFJVRSwgIkFNUiIsIDgwMDApOwotICBlbHNlCi0gICAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKGJhc2VwYXlsb2FkLCAiYXVkaW8iLCBUUlVFLCAiQU1SLVdCIiwKLSAgICAgICAgMTYwMDApOwotCi0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwKLSAgICAgICJlbmNvZGluZy1wYXJhbXMiLCBHX1RZUEVfU1RSSU5HLCAiMSIsICJvY3RldC1hbGlnbiIsIEdfVFlQRV9TVFJJTkcsICIxIiwKLSAgICAgIC8qIGRvbid0IHNldCB0aGUgZGVmYXVsdHMKLSAgICAgICAqCi0gICAgICAgKiAiY3JjIiwgR19UWVBFX1NUUklORywgIjAiLAotICAgICAgICogInJvYnVzdC1zb3J0aW5nIiwgR19UWVBFX1NUUklORywgIjAiLAotICAgICAgICogImludGVybGVhdmluZyIsIEdfVFlQRV9TVFJJTkcsICIwIiwKLSAgICAgICAqLwotICAgICAgTlVMTCk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3R5cGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHBhbXJwYXksICJ1bnN1cHBvcnRlZCBtZWRpYSB0eXBlICclcyciLAotICAgICAgICBHU1RfU1RSX05VTEwgKHN0cikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9hbXJfcGF5X3JlY2FsY19ydHBfdGltZSAoR3N0UnRwQU1SUGF5ICogcnRwYW1ycGF5LAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIC8qIHJlLXN5bmMgcnRwIHRpbWUgKi8KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChydHBhbXJwYXktPmZpcnN0X3RzKSAmJgotICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkgJiYgdGltZXN0YW1wID49IHJ0cGFtcnBheS0+Zmlyc3RfdHMpIHsKLSAgICBHc3RDbG9ja1RpbWUgZGlmZjsKLSAgICBndWludDMyIHJ0cGRpZmY7Ci0KLSAgICAvKiBpbnRlcnBvbGF0ZSB0byByZXByb2R1Y2UgZ2FwIGZyb20gc3RhcnQsIHJhdGhlciB0aGFuIGludGVybWVkaWF0ZQotICAgICAqIGludGVydmFscyB0byBhdm9pZCByb3VuZHVwIGFjY3VtdWxhdGlvbiBlcnJvcnMgKi8KLSAgICBkaWZmID0gdGltZXN0YW1wIC0gcnRwYW1ycGF5LT5maXJzdF90czsKLSAgICBydHBkaWZmID0gKChkaWZmIC8gR1NUX01TRUNPTkQpICogOCkgPDwKLSAgICAgICAgKHJ0cGFtcnBheS0+bW9kZSA9PSBHU1RfUlRQX0FNUl9QX01PREVfV0IpOwotICAgIHJ0cGFtcnBheS0+bmV4dF9ydHBfdGltZSA9IHJ0cGFtcnBheS0+Zmlyc3RfcnRwX3RpbWUgKyBydHBkaWZmOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGFtcnBheSwKLSAgICAgICAgImVsYXBzZWQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcnRwICUiIEdfR1VJTlQzMl9GT1JNQVQgIiwgIgotICAgICAgICAibmV3IG9mZnNldCAlIiBHX0dVSU5UMzJfRk9STUFULCBHU1RfVElNRV9BUkdTIChkaWZmKSwgcnRwZGlmZiwKLSAgICAgICAgcnRwYW1ycGF5LT5uZXh0X3J0cF90aW1lKTsKLSAgfQotfQotCi0vKiAtMSBpcyBpbnZhbGlkICovCi1zdGF0aWMgY29uc3QgZ2ludCBuYl9mcmFtZV9zaXplWzE2XSA9IHsKLSAgMTIsIDEzLCAxNSwgMTcsIDE5LCAyMCwgMjYsIDMxLAotICA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCB3Yl9mcmFtZV9zaXplWzE2XSA9IHsKLSAgMTcsIDIzLCAzMiwgMzYsIDQwLCA0NiwgNTAsIDU4LAotICA2MCwgNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwCi19OwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9hbXJfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSdHBBTVJQYXkgKnJ0cGFtcnBheTsKLSAgY29uc3QgZ2ludCAqZnJhbWVfc2l6ZTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50IHBheWxvYWRfbGVuOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGd1aW50OCAqcGF5bG9hZCwgKnB0ciwgKnBheWxvYWRfYW1yOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLSAgZ3VpbnQgcGFja2V0X2xlbiwgbXR1OwotICBnaW50IGksIG51bV9wYWNrZXRzLCBudW1fbm9uZW1wdHlfcGFja2V0czsKLSAgZ2ludCBhbXJfbGVuOwotICBnYm9vbGVhbiBzaWQgPSBGQUxTRTsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotCi0gIHJ0cGFtcnBheSA9IEdTVF9SVFBfQU1SX1BBWSAoYmFzZXBheWxvYWQpOwotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHJ0cGFtcnBheSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gIC8qIHNldHVwIGZyYW1lIHNpemUgcG9pbnRlciAqLwotICBpZiAocnRwYW1ycGF5LT5tb2RlID09IEdTVF9SVFBfQU1SX1BfTU9ERV9OQikKLSAgICBmcmFtZV9zaXplID0gbmJfZnJhbWVfc2l6ZTsKLSAgZWxzZQotICAgIGZyYW1lX3NpemUgPSB3Yl9mcmFtZV9zaXplOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCBtYXAuc2l6ZSk7Ci0KLSAgLyogRklYTUUsIG9ubHkKLSAgICogb2N0ZXQgYWxpZ25lZCwgbm8gaW50ZXJsZWF2aW5nLCBzaW5nbGUgY2hhbm5lbCwgbm8gQ1JDLAotICAgKiBubyByb2J1c3Qtc29ydGluZy4gVG8gZml4IHRoaXMgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBkb3duc3RyZWFtCi0gICAqIG5lZ290aWF0aW9uIGZ1bmN0aW9uLiAqLwotCi0gIC8qIGZpcnN0IGNvdW50IG51bWJlciBvZiBwYWNrZXRzIGFuZCB0b3RhbCBhbXIgZnJhbWUgc2l6ZSAqLwotICBhbXJfbGVuID0gbnVtX3BhY2tldHMgPSBudW1fbm9uZW1wdHlfcGFja2V0cyA9IDA7Ci0gIGZvciAoaSA9IDA7IGkgPCBtYXAuc2l6ZTsgaSsrKSB7Ci0gICAgZ3VpbnQ4IEZUOwotICAgIGdpbnQgZnJfc2l6ZTsKLQotICAgIEZUID0gKG1hcC5kYXRhW2ldICYgMHg3OCkgPj4gMzsKLQotICAgIGZyX3NpemUgPSBmcmFtZV9zaXplW0ZUXTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwgImZyYW1lIHR5cGUgJWQsIGZyYW1lIHNpemUgJWQiLCBGVCwgZnJfc2l6ZSk7Ci0gICAgLyogRklYTUUsIHdlIGRvbid0IGhhbmRsZSB0aGlzIHlldC4uICovCi0gICAgaWYgKGZyX3NpemUgPD0gMCkKLSAgICAgIGdvdG8gd3Jvbmdfc2l6ZTsKLQotICAgIGlmIChmcl9zaXplID09IDUpCi0gICAgICBzaWQgPSBUUlVFOwotCi0gICAgYW1yX2xlbiArPSBmcl9zaXplOwotICAgIG51bV9ub25lbXB0eV9wYWNrZXRzKys7Ci0gICAgbnVtX3BhY2tldHMrKzsKLSAgICBpICs9IGZyX3NpemU7Ci0gIH0KLSAgaWYgKGFtcl9sZW4gPiBtYXAuc2l6ZSkKLSAgICBnb3RvIGluY29tcGxldGVfZnJhbWU7Ci0KLSAgLyogd2UgbmVlZCBvbmUgZXh0cmEgYnl0ZSBmb3IgdGhlIENNUiwgdGhlIFRvQyBpcyBpbiB0aGUgaW5wdXQKLSAgICogZGF0YSAqLwotICBwYXlsb2FkX2xlbiA9IG1hcC5zaXplICsgMTsKLQotICAvKiBnZXQgcGFja2V0IGxlbiB0byBjaGVjayBhZ2FpbnN0IE1UVSAqLwotICBwYWNrZXRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYWNrZXRfbGVuIChwYXlsb2FkX2xlbiwgMCwgMCk7Ci0gIGlmIChwYWNrZXRfbGVuID4gbXR1KQotICAgIGdvdG8gdG9vX2JpZzsKLQotICAvKiBub3cgYWxsb2Mgb3V0cHV0IGJ1ZmZlciAqLwotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKHBheWxvYWRfbGVuLCAwLCAwKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgLyogY29weSB0aW1lc3RhbXAgKi8KLSAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSB0aW1lc3RhbXA7Ci0KLSAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IGR1cmF0aW9uOwotICBlbHNlIHsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gbnVtX3BhY2tldHMgKiAyMCAqIEdTVF9NU0VDT05EOwotICB9Ci0KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoYnVmZmVyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiZGlzY29udCwgc2V0dGluZyBtYXJrZXIgYml0Iik7Ci0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X21hcmtlciAoJnJ0cCwgVFJVRSk7Ci0gICAgZ3N0X3J0cF9hbXJfcGF5X3JlY2FsY19ydHBfdGltZSAocnRwYW1ycGF5LCB0aW1lc3RhbXApOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNpZCkpIHsKLSAgICBnc3RfcnRwX2Ftcl9wYXlfcmVjYWxjX3J0cF90aW1lIChydHBhbXJwYXksIHRpbWVzdGFtcCk7Ci0gIH0KLQotICAvKiBwZXJmZWN0IHJ0cHRpbWUgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocnRwYW1ycGF5LT5maXJzdF90cykpKSB7Ci0gICAgcnRwYW1ycGF5LT5maXJzdF90cyA9IHRpbWVzdGFtcDsKLSAgICBydHBhbXJwYXktPmZpcnN0X3J0cF90aW1lID0gcnRwYW1ycGF5LT5uZXh0X3J0cF90aW1lOwotICB9Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpID0gcnRwYW1ycGF5LT5uZXh0X3J0cF90aW1lOwotICBydHBhbXJwYXktPm5leHRfcnRwX3RpbWUgKz0KLSAgICAgIChudW1fcGFja2V0cyAqIDE2MCkgPDwgKHJ0cGFtcnBheS0+bW9kZSA9PSBHU1RfUlRQX0FNUl9QX01PREVfV0IpOwotCi0gIC8qIGdldCBwYXlsb2FkLCB0aGlzIGlzIG5vdyB3cml0YWJsZSAqLwotICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotCi0gIC8qICAgMCAxIDIgMyA0IDUgNiA3Ci0gICAqICArLSstKy0rLSstKy0rLSstKwotICAgKiAgfCAgQ01SICB8UnxSfFJ8UnwKLSAgICogICstKy0rLSstKy0rLSstKy0rCi0gICAqLwotICBwYXlsb2FkWzBdID0gMHhGMDsgICAgICAgICAgICAvKiBDTVIsIG5vIHNwZWNpZmljIG1vZGUgcmVxdWVzdGVkICovCi0KLSAgLyogdGhpcyBpcyB3aGVyZSB3ZSBjb3B5IHRoZSBBTVIgZGF0YSwgYWZ0ZXIgbnVtX3BhY2tldHMgRlRzIGFuZCB0aGUKLSAgICogQ01SLiAqLwotICBwYXlsb2FkX2FtciA9IHBheWxvYWQgKyBudW1fcGFja2V0cyArIDE7Ci0KLSAgLyogY29weSBkYXRhIGluIHBheWxvYWQsIGZpcnN0IHdlIGNvcHkgYWxsIHRoZSBGVHMgdGhlbiBhbGwKLSAgICogdGhlIEFNUiBkYXRhLiBUaGUgbGFzdCBGVCBoYXMgdG8gaGF2ZSB0aGUgRiBmbGFnIGNsZWFyZWQuICovCi0gIHB0ciA9IG1hcC5kYXRhOwotICBmb3IgKGkgPSAxOyBpIDw9IG51bV9wYWNrZXRzOyBpKyspIHsKLSAgICBndWludDggRlQ7Ci0gICAgZ2ludCBmcl9zaXplOwotCi0gICAgLyogICAwIDEgMiAzIDQgNSA2IDcKLSAgICAgKiAgKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKiAgfEZ8ICBGVCAgIHxRfFB8UHwgbW9yZSBGVC4uLgotICAgICAqICArLSstKy0rLSstKy0rLSstKwotICAgICAqLwotICAgIEZUID0gKCpwdHIgJiAweDc4KSA+PiAzOwotCi0gICAgZnJfc2l6ZSA9IGZyYW1lX3NpemVbRlRdOwotCi0gICAgaWYgKGkgPT0gbnVtX3BhY2tldHMpCi0gICAgICAvKiBsYXN0IHBhY2tldCwgY2xlYXIgRiBmbGFnICovCi0gICAgICBwYXlsb2FkW2ldID0gKnB0ciAmIDB4N2Y7Ci0gICAgZWxzZQotICAgICAgLyogc2V0IEYgZmxhZyAqLwotICAgICAgcGF5bG9hZFtpXSA9ICpwdHIgfCAweDgwOwotCi0gICAgbWVtY3B5IChwYXlsb2FkX2FtciwgJnB0clsxXSwgZnJfc2l6ZSk7Ci0KLSAgICAvKiBhbGwgc2l6ZXMgYXJlID4gMCBzaW5jZSB3ZSBjaGVja2VkIGZvciB0aGF0IGFib3ZlICovCi0gICAgcHRyICs9IGZyX3NpemUgKyAxOwotICAgIHBheWxvYWRfYW1yICs9IGZyX3NpemU7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGFtcnBheSksIG91dGJ1ZiwgYnVmZmVyLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2ggKGJhc2VwYXlsb2FkLCBvdXRidWYpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19zaXplOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGJhc2VwYXlsb2FkLCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKE5VTEwpLCAoInJlY2VpdmVkIEFNUiBmcmFtZSB3aXRoIHNpemUgPD0gMCIpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWluY29tcGxldGVfZnJhbWU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYmFzZXBheWxvYWQsIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoTlVMTCksICgicmVjZWl2ZWQgaW5jb21wbGV0ZSBBTVIgZnJhbWVzIikpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotdG9vX2JpZzoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlcGF5bG9hZCwgU1RSRUFNLCBGT1JNQVQsCi0gICAgICAgIChOVUxMKSwgKCJyZWNlaXZlZCB0b28gbWFueSBBTVIgZnJhbWVzIGZvciBNVFUiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9hbXJfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLQotICAvKiBoYW5kbGUgdXB3YXJkcyBzdGF0ZSBjaGFuZ2VzIGhlcmUgKi8KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgLyogaGFuZGxlIGRvd253YXJkcyBzdGF0ZSBjaGFuZ2VzICovCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfcnRwX2Ftcl9wYXlfcmVzZXQgKEdTVF9SVFBfQU1SX1BBWSAoZWxlbWVudCkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfYW1yX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGFtcnBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9BTVJfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwYW1ycGF5LmggYi9nc3QvcnRwL2dzdHJ0cGFtcnBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2RmMWNlLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYW1ycGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfQU1SX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0FNUl9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9BTVJfUEFZIFwKLSAgKGdzdF9ydHBfYW1yX3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0FNUl9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfQU1SX1BBWSxHc3RSdHBBTVJQYXkpKQotI2RlZmluZSBHU1RfUlRQX0FNUl9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0FNUl9QQVksR3N0UnRwQU1SUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0FNUl9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfQU1SX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfQU1SX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQU1SX1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBBTVJQYXkgR3N0UnRwQU1SUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEFNUlBheUNsYXNzIEdzdFJ0cEFNUlBheUNsYXNzOwotCi10eXBlZGVmIGVudW0gewotICBHU1RfUlRQX0FNUl9QX01PREVfSU5WQUxJRCA9IDAsCi0gIEdTVF9SVFBfQU1SX1BfTU9ERV9OQiAgICAgID0gMSwKLSAgR1NUX1JUUF9BTVJfUF9NT0RFX1dCICAgICAgPSAyCi19IEdzdFJ0cEFNUlBheU1vZGU7Ci0KLXN0cnVjdCBfR3N0UnRwQU1SUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgR3N0UnRwQU1SUGF5TW9kZSBtb2RlOwotICBHc3RDbG9ja1RpbWUgZmlyc3RfdHM7Ci0gIGd1aW50MzIgZmlyc3RfcnRwX3RpbWU7Ci0gIGd1aW50MzIgbmV4dF9ydHBfdGltZTsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwQU1SUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2Ftcl9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2Ftcl9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfQU1SX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwYnZkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBidmRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODIzODIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBidmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGJ2ZGVwYXkKLSAqIEBzZWVfYWxzbzogcnRwYnZwYXkKLSAqCi0gKiBFeHRyYWN0IEJyb2FkY29tVm9pY2UgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDQyOTguCi0gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0Mjk4LnR4dAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgImdzdHJ0cGJ2ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9idl9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJCVjE2XCI7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDE2MDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJCVjMyXCIiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2J2X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1idiwgIiAibW9kZSA9IChpbnQpIHsgMTYsIDMyIH0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfYnZfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfYnZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9idl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSVFBCVkRlcGF5LCBnc3RfcnRwX2J2X2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9idl9kZXBheV9jbGFzc19pbml0IChHc3RSVFBCVkRlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfYnZfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9idl9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBCcm9hZGNvbVZvaWNlIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBCcm9hZGNvbVZvaWNlIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA0Mjk4KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2J2X2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9idl9kZXBheV9zZXRjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9idl9kZXBheV9pbml0IChHc3RSVFBCVkRlcGF5ICogcnRwYnZkZXBheSkKLXsKLSAgcnRwYnZkZXBheS0+bW9kZSA9IC0xOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfYnZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJUUEJWRGVwYXkgKnJ0cGJ2ZGVwYXkgPSBHU1RfUlRQX0JWX0RFUEFZIChkZXBheWxvYWQpOwotICBHc3RDYXBzICpzcmNjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgZ2NoYXIgKm1vZGVfc3RyID0gTlVMTDsKLSAgZ2ludCBtb2RlLCBjbG9ja19yYXRlLCBleHBlY3RlZF9yYXRlOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgbW9kZV9zdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKTsKLSAgaWYgKCFtb2RlX3N0cikKLSAgICBnb3RvIG5vX21vZGU7Ci0KLSAgaWYgKCFzdHJjbXAgKG1vZGVfc3RyLCAiQlYxNiIpKSB7Ci0gICAgbW9kZSA9IDE2OwotICAgIGV4cGVjdGVkX3JhdGUgPSA4MDAwOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKG1vZGVfc3RyLCAiQlYzMiIpKSB7Ci0gICAgbW9kZSA9IDMyOwotICAgIGV4cGVjdGVkX3JhdGUgPSAxNjAwMDsKLSAgfSBlbHNlCi0gICAgZ290byBpbnZhbGlkX21vZGU7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IGV4cGVjdGVkX3JhdGU7Ci0gIGVsc2UgaWYgKGNsb2NrX3JhdGUgIT0gZXhwZWN0ZWRfcmF0ZSkKLSAgICBnb3RvIHdyb25nX3JhdGU7Ci0KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLSAgcnRwYnZkZXBheS0+bW9kZSA9IG1vZGU7Ci0KLSAgc3JjY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LWJ2IiwKLSAgICAgICJtb2RlIiwgR19UWVBFX0lOVCwgcnRwYnZkZXBheS0+bW9kZSwgTlVMTCk7Ci0gIHJldCA9IGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpLCBzcmNjYXBzKTsKLQotICBHU1RfREVCVUcgKCJzZXQgY2FwcyBvbiBzb3VyY2U6ICUiIEdTVF9QVFJfRk9STUFUICIgKHJldD0lZCkiLCBzcmNjYXBzLCByZXQpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX21vZGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHBidmRlcGF5LCAiZGlkIG5vdCByZWNlaXZlIGFuIGVuY29kaW5nLW5hbWUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfbW9kZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGJ2ZGVwYXksCi0gICAgICAgICJpbnZhbGlkIGVuY29kaW5nLW5hbWUsIGV4cGVjdGVkIEJWMTYgb3IgQlYzMiwgZ290ICVzIiwgbW9kZV9zdHIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotd3JvbmdfcmF0ZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGJ2ZGVwYXksICJpbnZhbGlkIGNsb2NrLXJhdGUsIGV4cGVjdGVkICVkLCBnb3QgJWQiLAotICAgICAgICBleHBlY3RlZF9yYXRlLCBjbG9ja19yYXRlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2J2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGdib29sZWFuIG1hcmtlcjsKLQotICBtYXJrZXIgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIEdTVF9ERUJVRyAoInByb2Nlc3MgOiBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgbWFyayAlZCB0cyAldSBzZXFuICVkIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHJ0cC0+YnVmZmVyKSwgbWFya2VyLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKSwgZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAocnRwKSk7Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotCi0gIGlmIChtYXJrZXIgJiYgb3V0YnVmKSB7Ci0gICAgLyogbWFyayBzdGFydCBvZiB0YWxrc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheWxvYWQpLCBvdXRidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9idl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGJ2ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfQlZfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBidmRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEzMDY4Mi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGJ2ZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9CVl9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0JWX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBCVkRlcGF5IEdzdFJUUEJWRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQQlZEZXBheUNsYXNzIEdzdFJUUEJWRGVwYXlDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfQlZfREVQQVkgXAotICAoZ3N0X3J0cF9idl9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0JWX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0JWX0RFUEFZLEdzdFJUUEJWRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX0JWX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9CVl9ERVBBWSxHc3RSVFBCVkRlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0JWX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0JWX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9CVl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQlZfREVQQVkpKQotCi1zdHJ1Y3QgX0dzdFJUUEJWRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgZ2ludCBtb2RlOwotfTsKLQotc3RydWN0IF9Hc3RSVFBCVkRlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfYnZfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2J2X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0JWX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBidnBheS5jIGIvZ3N0L3J0cC9nc3RydHBidnBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjAyMDE1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwYnZwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwYnZwYXkKLSAqIEBzZWVfYWxzbzogcnRwYnZkZXBheQotICoKLSAqIFBheWxvYWQgQnJvYWRjb21Wb2ljZSBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgNDI5OC4KLSAqIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzQyOTgudHh0Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwYnZwYXkuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwYnZwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGJ2cGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9idl9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWJ2LCAiICJtb2RlID0gKGludCkgezE2LCAzMn0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2J2X3BheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiQlYxNlwiOyIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSAxNjAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiQlYzMlwiIikKLSAgICApOwotCi0KLXN0YXRpYyBHc3RDYXBzICpnc3RfcnRwX2J2X3BheV9zaW5rX2dldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfYnZfcGF5X3Npbmtfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotI2RlZmluZSBnc3RfcnRwX2J2X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSVFBCVlBheSwgZ3N0X3J0cF9idl9wYXksIEdTVF9UWVBFX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9idl9wYXlfY2xhc3NfaW5pdCAoR3N0UlRQQlZQYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBidnBheV9kZWJ1ZywgInJ0cGJ2cGF5IiwgMCwKLSAgICAgICJCcm9hZGNvbVZvaWNlIGF1ZGlvIFJUUCBwYXlsb2FkZXIiKTsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2J2X3BheV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9idl9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIEJWIFBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYWNrZXRpemUgQnJvYWRjb21Wb2ljZSBhdWRpbyBzdHJlYW1zIGludG8gUlRQIHBhY2tldHMgKFJGQyA0Mjk4KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2J2X3BheV9zaW5rX3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5nZXRfY2FwcyA9IGdzdF9ydHBfYnZfcGF5X3NpbmtfZ2V0Y2FwczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYnZfcGF5X2luaXQgKEdzdFJUUEJWUGF5ICogcnRwYnZwYXkpCi17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgKnJ0cGJhc2VhdWRpb3BheWxvYWQ7Ci0KLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChydHBidnBheSk7Ci0KLSAgcnRwYnZwYXktPm1vZGUgPSAtMTsKLQotICAvKiB0ZWxsIHJ0cGJhc2VhdWRpb3BheWxvYWQgdGhhdCB0aGlzIGlzIGEgZnJhbWUgYmFzZWQgY29kZWMgKi8KLSAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X2ZyYW1lX2Jhc2VkIChydHBiYXNlYXVkaW9wYXlsb2FkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2J2X3BheV9zaW5rX3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcnRwYmFzZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSVFBCVlBheSAqcnRwYnZwYXk7Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgKnJ0cGJhc2VhdWRpb3BheWxvYWQ7Ci0gIGdpbnQgbW9kZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGNoYXIgKnBheWxvYWRfbmFtZTsKLQotICBydHBidnBheSA9IEdTVF9SVFBfQlZfUEFZIChydHBiYXNlcGF5bG9hZCk7Ci0gIHJ0cGJhc2VhdWRpb3BheWxvYWQgPSBHU1RfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCAocnRwYmFzZXBheWxvYWQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIHBheWxvYWRfbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7Ci0gIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKCJhdWRpby94LWJ2IiwgcGF5bG9hZF9uYW1lKSkKLSAgICBnb3RvIHdyb25nX2NhcHM7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIm1vZGUiLCAmbW9kZSkpCi0gICAgZ290byBub19tb2RlOwotCi0gIGlmIChtb2RlICE9IDE2ICYmIG1vZGUgIT0gMzIpCi0gICAgZ290byB3cm9uZ19tb2RlOwotCi0gIGlmIChtb2RlID09IDE2KSB7Ci0gICAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHJ0cGJhc2VwYXlsb2FkLCAiYXVkaW8iLCBUUlVFLCAiQlYxNiIsCi0gICAgICAgIDgwMDApOwotICAgIHJ0cGJhc2VwYXlsb2FkLT5jbG9ja19yYXRlID0gODAwMDsKLSAgfSBlbHNlIHsKLSAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocnRwYmFzZXBheWxvYWQsICJhdWRpbyIsIFRSVUUsICJCVjMyIiwKLSAgICAgICAgMTYwMDApOwotICAgIHJ0cGJhc2VwYXlsb2FkLT5jbG9ja19yYXRlID0gMTYwMDA7Ci0gIH0KLQotICAvKiBzZXQgb3B0aW9ucyBmb3IgdGhpcyBmcmFtZSBiYXNlZCBhdWRpbyBjb2RlYyAqLwotICBnc3RfcnRwX2Jhc2VfYXVkaW9fcGF5bG9hZF9zZXRfZnJhbWVfb3B0aW9ucyAocnRwYmFzZWF1ZGlvcGF5bG9hZCwKLSAgICAgIG1vZGUsIG1vZGUgPT0gMTYgPyAxMCA6IDIwKTsKLQotICBpZiAobW9kZSAhPSBydHBidnBheS0+bW9kZSAmJiBydHBidnBheS0+bW9kZSAhPSAtMSkKLSAgICBnb3RvIG1vZGVfY2hhbmdlZDsKLQotICBydHBidnBheS0+bW9kZSA9IG1vZGU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19jYXBzOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwYnZwYXksICJleHBlY3RlZCBhdWRpby94LWJ2LCByZWNlaXZlZCAlcyIsCi0gICAgICAgIHBheWxvYWRfbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19tb2RlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwYnZwYXksICJkaWQgbm90IHJlY2VpdmUgYSBtb2RlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19tb2RlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwYnZwYXksICJtb2RlIG11c3QgYmUgMTYgb3IgMzIsIHJlY2VpdmVkICVkIiwgbW9kZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1tb2RlX2NoYW5nZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHBidnBheSwgIk1vZGUgaGFzIGNoYW5nZWQgZnJvbSAlZCB0byAlZCEgIgotICAgICAgICAiTW9kZSBjYW5ub3QgY2hhbmdlIHdoaWxlIHN0cmVhbWluZyIsIHJ0cGJ2cGF5LT5tb2RlLCBtb2RlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogd2UgcmV0dXJuIHRoZSBwYWR0ZW1wbGF0ZSBjYXBzIHdpdGggdGhlIG1vZGUgZmllbGQgZml4YXRlZCB0byBhIHZhbHVlIGlmIHdlCi0gKiBjYW4gKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfYnZfcGF5X3NpbmtfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBydHBwYXlsb2FkLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqb3RoZXJwYWRjYXBzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLQotICBvdGhlcnBhZGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHJ0cHBheWxvYWQtPnNyY3BhZCk7Ci0gIGlmIChvdGhlcnBhZGNhcHMpIHsKLSAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcnBhZGNhcHMpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgICAgIGNvbnN0IGdjaGFyICptb2RlX3N0cjsKLSAgICAgIGdpbnQgbW9kZTsKLQotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob3RoZXJwYWRjYXBzLCAwKTsKLQotICAgICAgLyogY29uc3RydWN0IG1vZGUsIGlmIHdlIGNhbiAqLwotICAgICAgbW9kZV9zdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKTsKLSAgICAgIGlmIChtb2RlX3N0cikgewotICAgICAgICBpZiAoIXN0cmNtcCAobW9kZV9zdHIsICJCVjE2IikpCi0gICAgICAgICAgbW9kZSA9IDE2OwotICAgICAgICBlbHNlIGlmICghc3RyY21wIChtb2RlX3N0ciwgIkJWMzIiKSkKLSAgICAgICAgICBtb2RlID0gMzI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBtb2RlID0gLTE7Ci0KLSAgICAgICAgaWYgKG1vZGUgPT0gMTYgfHwgbW9kZSA9PSAzMikgewotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSAgICAgICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCAibW9kZSIsIEdfVFlQRV9JTlQsIG1vZGUsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChvdGhlcnBhZGNhcHMpOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKnRtcDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHBheWxvYWQsICJJbnRlcnNlY3QgJSIgR1NUX1BUUl9GT1JNQVQgIiBhbmQgZmlsdGVyICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzLCBmaWx0ZXIpOwotICAgIHRtcCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGNhcHMgPSB0bXA7Ci0gIH0KLQotICByZXR1cm4gY2FwczsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfYnZfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwYnZwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfQlZfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwYnZwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwYnZwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3NjZjYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGJ2cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfQlZfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfQlZfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0JWX1BBWSBcCi0gIChnc3RfcnRwX2J2X3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0JWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9CVl9QQVksR3N0UlRQQlZQYXkpKQotI2RlZmluZSBHU1RfUlRQX0JWX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQlZfUEFZLEdzdFJUUEJWUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0JWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9CVl9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0JWX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQlZfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUEJWUGF5IEdzdFJUUEJWUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUEJWUGF5Q2xhc3MgR3N0UlRQQlZQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSVFBCVlBheQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkIGF1ZGlvcGF5bG9hZDsKLQotICBnaW50IG1vZGU7Ci19OwotCi1zdHJ1Y3QgX0dzdFJUUEJWUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfYnZfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9idl9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfQlZfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMzRjMTQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBjZWx0ZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwY2VsdGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwY2VsdGRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBjZWx0ZGVwYXlfZGVidWcpCi0KLS8qIFJ0cENFTFREZXBheSBzaWduYWxzIGFuZCBhcmdzICovCi0KLSNkZWZpbmUgREVGQVVMVF9GUkFNRVNJWkUgICAgICAgNDgwCi0jZGVmaW5lIERFRkFVTFRfQ0hBTk5FTFMgICAgICAgIDEKLSNkZWZpbmUgREVGQVVMVF9DTE9DS1JBVEUgICAgICAgMzIwMDAKLQotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMAotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfY2VsdF9kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9ICAoaW50KSBbMzIwMDAsIDQ4MDAwXSwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiQ0VMVFwiIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9jZWx0X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1jZWx0IikKLSAgICApOwotCi1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2NlbHRfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfY2VsdF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotI2RlZmluZSBnc3RfcnRwX2NlbHRfZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwQ0VMVERlcGF5LCBnc3RfcnRwX2NlbHRfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfY2VsdF9kZXBheV9jbGFzc19pbml0IChHc3RSdHBDRUxURGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwY2VsdGRlcGF5X2RlYnVnLCAicnRwY2VsdGRlcGF5IiwgMCwKLSAgICAgICJDRUxUIFJUUCBEZXBheWxvYWRlciIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2NlbHRfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9jZWx0X2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIENFTFQgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIENFTFQgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2NlbHRfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2NlbHRfZGVwYXlfc2V0Y2FwczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfY2VsdF9kZXBheV9pbml0IChHc3RSdHBDRUxURGVwYXkgKiBydHBjZWx0ZGVwYXkpCi17Ci19Ci0KLS8qIGxlbiA0IGJ5dGVzIExFLAotICogdmVuZG9yIHN0cmluZyAobGVuIGJ5dGVzKSwKLSAqIHVzZXJfbGVuIDQgKDApIGJ5dGVzIExFCi0gKi8KLXN0YXRpYyBjb25zdCBnY2hhciBnc3RfcnRwX2NlbHRfY29tbWVudFtdID0KLSAgICAiXDA0NVwwXDBcMERlcGF5bG9hZGVkIHdpdGggR1N0cmVhbWVyIGNlbHRkZXBheVwwXDBcMFwwIjsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2NlbHRfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RSdHBDRUxURGVwYXkgKnJ0cGNlbHRkZXBheTsKLSAgZ2ludCBjbG9ja19yYXRlLCBuYl9jaGFubmVscyA9IDAsIGZyYW1lX3NpemUgPSAwOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqcHRyOwotICBjb25zdCBnY2hhciAqcGFyYW1zOwotICBHc3RDYXBzICpzcmNjYXBzOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwY2VsdGRlcGF5ID0gR1NUX1JUUF9DRUxUX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGdvdG8gbm9fY2xvY2tyYXRlOwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIGlmICgocGFyYW1zID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJlbmNvZGluZy1wYXJhbXMiKSkpCi0gICAgbmJfY2hhbm5lbHMgPSBhdG9pIChwYXJhbXMpOwotICBpZiAoIW5iX2NoYW5uZWxzKQotICAgIG5iX2NoYW5uZWxzID0gREVGQVVMVF9DSEFOTkVMUzsKLQotICBpZiAoKHBhcmFtcyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZnJhbWUtc2l6ZSIpKSkKLSAgICBmcmFtZV9zaXplID0gYXRvaSAocGFyYW1zKTsKLSAgaWYgKCFmcmFtZV9zaXplKQotICAgIGZyYW1lX3NpemUgPSBERUZBVUxUX0ZSQU1FU0laRTsKLSAgcnRwY2VsdGRlcGF5LT5mcmFtZV9zaXplID0gZnJhbWVfc2l6ZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJjbG9jay1yYXRlPSVkIGNoYW5uZWxzPSVkIGZyYW1lLXNpemU9JWQiLAotICAgICAgY2xvY2tfcmF0ZSwgbmJfY2hhbm5lbHMsIGZyYW1lX3NpemUpOwotCi0gIC8qIGNvbnN0cnVjdCBtaW5pbWFsIGhlYWRlciBhbmQgY29tbWVudCBwYWNrZXQgZm9yIHRoZSBkZWNvZGVyICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNjApOwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgcHRyID0gbWFwLmRhdGE7Ci0gIG1lbWNweSAocHRyLCAiQ0VMVCAgICAiLCA4KTsKLSAgcHRyICs9IDg7Ci0gIG1lbWNweSAocHRyLCAiMS4xLjEyIiwgNyk7Ci0gIHB0ciArPSAyMDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAocHRyLCAweDgwMDAwMDA2KTsgICAgICAgIC8qIHZlcnNpb24gKi8KLSAgcHRyICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKHB0ciwgNTYpOyAgICAgICAgLyogaGVhZGVyX3NpemUgKi8KLSAgcHRyICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKHB0ciwgY2xvY2tfcmF0ZSk7ICAgICAgICAvKiByYXRlICovCi0gIHB0ciArPSA0OwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChwdHIsIG5iX2NoYW5uZWxzKTsgICAgICAgLyogY2hhbm5lbHMgKi8KLSAgcHRyICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKHB0ciwgZnJhbWVfc2l6ZSk7ICAgICAgICAvKiBmcmFtZS1zaXplICovCi0gIHB0ciArPSA0OwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChwdHIsIC0xKTsgICAgICAgIC8qIG92ZXJsYXAgKi8KLSAgcHRyICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKHB0ciwgLTEpOyAgICAgICAgLyogYnl0ZXNfcGVyX3BhY2tldCAqLwotICBwdHIgKz0gNDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAocHRyLCAwKTsgLyogZXh0cmEgaGVhZGVycyAqLwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1jZWx0Iik7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIGdzdF9ydHBfYmFzZV9kZXBheWxvYWRfcHVzaCAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwY2VsdGRlcGF5KSwgYnVmKTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAoZ3N0X3J0cF9jZWx0X2NvbW1lbnQpKTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGdzdF9ydHBfY2VsdF9jb21tZW50LCBzaXplb2YgKGdzdF9ydHBfY2VsdF9jb21tZW50KSk7Ci0KLSAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBjZWx0ZGVwYXkpLCBidWYpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19jbG9ja3JhdGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkZXBheWxvYWQsICJubyBjbG9jay1yYXRlIHNwZWNpZmllZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfY2VsdF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBndWludCBvZmZzZXQsIHBvcywgcGF5bG9hZF9sZW4sIHRvdGFsX3NpemUsIHNpemU7Ci0gIGd1aW50OCBzOwotICBnaW50IGNsb2NrX3JhdGUgPSAwLCBmcmFtZV9zaXplID0gMDsKLSAgR3N0Q2xvY2tUaW1lIGZyYW1lc2l6ZV9ucyA9IDAsIHRpbWVzdGFtcDsKLSAgZ3VpbnQgbiA9IDA7Ci0gIEdzdFJ0cENFTFREZXBheSAqcnRwY2VsdGRlcGF5OwotCi0gIHJ0cGNlbHRkZXBheSA9IEdTVF9SVFBfQ0VMVF9ERVBBWSAoZGVwYXlsb2FkKTsKLSAgY2xvY2tfcmF0ZSA9IGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZTsKLSAgZnJhbWVfc2l6ZSA9IHJ0cGNlbHRkZXBheS0+ZnJhbWVfc2l6ZTsKLSAgZnJhbWVzaXplX25zID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoZnJhbWVfc2l6ZSwgR1NUX1NFQ09ORCwgY2xvY2tfcmF0ZSk7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9QVFMgKHJ0cC0+YnVmZmVyKTsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVwYXlsb2FkLAotICAgICAgImdvdCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzLCBtYXJrICVkIHRzICV1IHNlcW4gJWQiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocnRwLT5idWZmZXIpLCBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKSwgZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAocnRwKSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlcGF5bG9hZCwgImdvdCBjbG9jay1yYXRlPSVkLCBmcmFtZV9zaXplPSVkLCAiCi0gICAgICAiX25zPSUiIEdTVF9USU1FX0ZPUk1BVCAiLCB0aW1lc3RhbXA9JSIgR1NUX1RJTUVfRk9STUFULCBjbG9ja19yYXRlLAotICAgICAgZnJhbWVfc2l6ZSwgR1NUX1RJTUVfQVJHUyAoZnJhbWVzaXplX25zKSwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICAvKiBmaXJzdCBjb3VudCBob3cgbWFueSBieXRlcyBhcmUgY29uc3VtZWQgYnkgdGhlIHNpemUgaGVhZGVycyBhbmQgbWFrZSBvZmZzZXQKLSAgICogcG9pbnQgdG8gdGhlIGZpcnN0IGRhdGEgYnl0ZSAqLwotICB0b3RhbF9zaXplID0gMDsKLSAgb2Zmc2V0ID0gMDsKLSAgd2hpbGUgKHRvdGFsX3NpemUgPCBwYXlsb2FkX2xlbikgewotICAgIGRvIHsKLSAgICAgIHMgPSBwYXlsb2FkW29mZnNldCsrXTsKLSAgICAgIHRvdGFsX3NpemUgKz0gcyArIDE7Ci0gICAgfSB3aGlsZSAocyA9PSAweGZmKTsKLSAgfQotCi0gIC8qIG9mZnNldCBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIHBheWxvYWQgKi8KLSAgdG90YWxfc2l6ZSA9IDA7Ci0gIHBvcyA9IDA7Ci0gIHdoaWxlICh0b3RhbF9zaXplIDwgcGF5bG9hZF9sZW4pIHsKLSAgICBuKys7Ci0gICAgc2l6ZSA9IDA7Ci0gICAgZG8gewotICAgICAgcyA9IHBheWxvYWRbcG9zKytdOwotICAgICAgc2l6ZSArPSBzOwotICAgICAgdG90YWxfc2l6ZSArPSBzICsgMTsKLSAgICB9IHdoaWxlIChzID09IDB4ZmYpOwotCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIG9mZnNldCwgc2l6ZSk7Ci0gICAgb2Zmc2V0ICs9IHNpemU7Ci0KLSAgICBpZiAoZnJhbWVfc2l6ZSAhPSAtMSAmJiBjbG9ja19yYXRlICE9IC0xKSB7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHRpbWVzdGFtcCArIGZyYW1lc2l6ZV9ucyAqIG47Ci0gICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gZnJhbWVzaXplX25zOwotICAgIH0KLSAgICBHU1RfTE9HX09CSkVDVCAoZGVwYXlsb2FkLCAicHVzaCB0aW1lc3RhbXA9JSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIsIGR1cmF0aW9uPSUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpKSk7Ci0KLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVwYXlsb2FkKSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotCi0gICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIG91dGJ1Zik7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfY2VsdF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGNlbHRkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9DRUxUX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGNlbHRkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTA1YzY4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwY2VsdGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCi0gKi8KLSAKLSNpZm5kZWYgX19HU1RfUlRQX0NFTFRfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9DRUxUX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBDRUxURGVwYXkgR3N0UnRwQ0VMVERlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cENFTFREZXBheUNsYXNzIEdzdFJ0cENFTFREZXBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9DRUxUX0RFUEFZIFwKLSAgKGdzdF9ydHBfY2VsdF9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0NFTFRfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfQ0VMVF9ERVBBWSxHc3RSdHBDRUxURGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX0NFTFRfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0NFTFRfREVQQVksR3N0UnRwQ0VMVERlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0NFTFRfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfQ0VMVF9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfQ0VMVF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQ0VMVF9ERVBBWSkpCi0KLXN0cnVjdCBfR3N0UnRwQ0VMVERlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotICBnaW50IGZyYW1lX3NpemU7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cENFTFREZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2NlbHRfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2NlbHRfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfQ0VMVF9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwY2VsdHBheS5jIGIvZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNTI4N2QuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cGNlbHRwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBjZWx0cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBjZWx0cGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9jZWx0X3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtY2VsdCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMzIwMDAsIDY0MDAwIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWzEsIDJdLCAiICJmcmFtZS1zaXplID0gKGludCkgWyA2NCwgNTEyIF0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2NlbHRfcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9ICAoaW50KSBbIDMyMDAwLCA0ODAwMCBdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJDRUxUXCIiKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfY2VsdF9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9jZWx0X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9jZWx0X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfY2VsdF9wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2NlbHRfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICoKLSAgICBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfY2VsdF9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwQ0VMVFBheSwgZ3N0X3J0cF9jZWx0X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2NlbHRfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cENFTFRQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGNlbHRwYXlfZGVidWcsICJydHBjZWx0cGF5IiwgMCwKLSAgICAgICJDRUxUIFJUUCBQYXlsb2FkZXIiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2NlbHRfcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfY2VsdF9wYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfY2VsdF9wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfY2VsdF9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIENFTFQgcGF5bG9hZGVyIiwKLSAgICAgICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQtZW5jb2RlcyBDRUxUIGF1ZGlvIGludG8gYSBSVFAgcGFja2V0IiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfY2VsdF9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmdldF9jYXBzID0gZ3N0X3J0cF9jZWx0X3BheV9nZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfY2VsdF9wYXlfaGFuZGxlX2J1ZmZlcjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfY2VsdF9wYXlfaW5pdCAoR3N0UnRwQ0VMVFBheSAqIHJ0cGNlbHRwYXkpCi17Ci0gIHJ0cGNlbHRwYXktPnF1ZXVlID0gZ19xdWV1ZV9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2NlbHRfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBDRUxUUGF5ICpydHBjZWx0cGF5OwotCi0gIHJ0cGNlbHRwYXkgPSBHU1RfUlRQX0NFTFRfUEFZIChvYmplY3QpOwotCi0gIGdfcXVldWVfZnJlZSAocnRwY2VsdHBheS0+cXVldWUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfY2VsdF9wYXlfY2xlYXJfcXVldWVkIChHc3RSdHBDRUxUUGF5ICogcnRwY2VsdHBheSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgd2hpbGUgKChidWYgPSBnX3F1ZXVlX3BvcF9oZWFkIChydHBjZWx0cGF5LT5xdWV1ZSkpKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgcnRwY2VsdHBheS0+Ynl0ZXMgPSAwOwotICBydHBjZWx0cGF5LT5zYnl0ZXMgPSAwOwotICBydHBjZWx0cGF5LT5xZHVyYXRpb24gPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9jZWx0X3BheV9hZGRfcXVldWVkIChHc3RSdHBDRUxUUGF5ICogcnRwY2VsdHBheSwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIGd1aW50IHNzaXplLCBndWludCBzaXplLCBHc3RDbG9ja1RpbWUgZHVyYXRpb24pCi17Ci0gIGdfcXVldWVfcHVzaF90YWlsIChydHBjZWx0cGF5LT5xdWV1ZSwgYnVmZmVyKTsKLSAgcnRwY2VsdHBheS0+c2J5dGVzICs9IHNzaXplOwotICBydHBjZWx0cGF5LT5ieXRlcyArPSBzaXplOwotICAvKiBvbmx5IGFkZCBkdXJhdGlvbnMgd2hlbiB3ZSBoYXZlIGEgdmFsaWQgcHJldmlvdXMgZHVyYXRpb24gKi8KLSAgaWYgKHJ0cGNlbHRwYXktPnFkdXJhdGlvbiAhPSAtMSkgewotICAgIGlmIChkdXJhdGlvbiAhPSAtMSkKLSAgICAgIC8qIG9ubHkgYWRkIHZhbGlkIGR1cmF0aW9ucyAqLwotICAgICAgcnRwY2VsdHBheS0+cWR1cmF0aW9uICs9IGR1cmF0aW9uOwotICAgIGVsc2UKLSAgICAgIC8qIGlmIHdlIGFkZCBhIGJ1ZmZlciB3aXRob3V0IHZhbGlkIGR1cmF0aW9uLCBvdXIgdG90YWwgcXVldWVkIGR1cmF0aW9uCi0gICAgICAgKiBiZWNvbWVzIHVua25vd24gKi8KLSAgICAgIHJ0cGNlbHRwYXktPnFkdXJhdGlvbiA9IC0xOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9jZWx0X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICAvKiBkb24ndCBjb25maWd1cmUgeWV0LCB3ZSB3YWl0IGZvciB0aGUgaWRlbnQgcGFja2V0ICovCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfY2VsdF9wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqb3RoZXJwYWRjYXBzOwotICBHc3RDYXBzICpjYXBzOwotICBjb25zdCBnY2hhciAqcGFyYW1zOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLQotICBvdGhlcnBhZGNhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKHBheWxvYWQtPnNyY3BhZCk7Ci0gIGlmIChvdGhlcnBhZGNhcHMpIHsKLSAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcnBhZGNhcHMpKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnBzOwotICAgICAgR3N0U3RydWN0dXJlICpzOwotICAgICAgZ2ludCBjbG9ja19yYXRlID0gMCwgZnJhbWVfc2l6ZSA9IDAsIGNoYW5uZWxzID0gMTsKLQotICAgICAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotCi0gICAgICBwcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKG90aGVycGFkY2FwcywgMCk7Ci0gICAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHBzLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkgewotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAocywgInJhdGUiLCBjbG9ja19yYXRlKTsKLSAgICAgIH0KLQotICAgICAgaWYgKChwYXJhbXMgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHBzLCAiZnJhbWUtc2l6ZSIpKSkKLSAgICAgICAgZnJhbWVfc2l6ZSA9IGF0b2kgKHBhcmFtcyk7Ci0gICAgICBpZiAoZnJhbWVfc2l6ZSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJmcmFtZS1zaXplIiwgR19UWVBFX0lOVCwgZnJhbWVfc2l6ZSwgTlVMTCk7Ci0KLSAgICAgIGlmICgocGFyYW1zID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChwcywgImVuY29kaW5nLXBhcmFtcyIpKSkgewotICAgICAgICBjaGFubmVscyA9IGF0b2kgKHBhcmFtcyk7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChzLCAiY2hhbm5lbHMiLCBjaGFubmVscyk7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJjbG9jay1yYXRlPSVkIGZyYW1lLXNpemU9JWQgY2hhbm5lbHM9JWQiLAotICAgICAgICAgIGNsb2NrX3JhdGUsIGZyYW1lX3NpemUsIGNoYW5uZWxzKTsKLSAgICB9Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKG90aGVycGFkY2Fwcyk7Ci0gIH0KLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqdG1wOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIkludGVyc2VjdCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGFuZCBmaWx0ZXIgJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMsIGZpbHRlcik7Ci0gICAgdG1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgY2FwcyA9IHRtcDsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfY2VsdF9wYXlfcGFyc2VfaWRlbnQgKEdzdFJ0cENFTFRQYXkgKiBydHBjZWx0cGF5LAotICAgIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIGd1aW50MzIgdmVyc2lvbiwgaGVhZGVyX3NpemUsIHJhdGUsIG5iX2NoYW5uZWxzLCBmcmFtZV9zaXplLCBvdmVybGFwOwotICBndWludDMyIGJ5dGVzX3Blcl9wYWNrZXQ7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkICpwYXlsb2FkOwotICBnY2hhciAqY3N0ciwgKmZzc3RyOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgLyogd2UgbmVlZCB0aGUgaGVhZGVyIHN0cmluZyAoOCksIHRoZSB2ZXJzaW9uIHN0cmluZyAoMjApLCB0aGUgdmVyc2lvbgotICAgKiBhbmQgdGhlIGhlYWRlciBsZW5ndGguICovCi0gIGlmIChzaXplIDwgMzYpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgaWYgKCFnX3N0cl9oYXNfcHJlZml4ICgoY29uc3QgZ2NoYXIgKikgZGF0YSwgIkNFTFQgICAgIikpCi0gICAgZ290byB3cm9uZ19oZWFkZXI7Ci0KLSAgLyogc2tpcCBoZWFkZXIgYW5kIHZlcnNpb24gc3RyaW5nICovCi0gIGRhdGEgKz0gMjg7Ci0KLSAgdmVyc2lvbiA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGNlbHRwYXksICJ2ZXJzaW9uICUwOHgiLCB2ZXJzaW9uKTsKLSNpZiAwCi0gIGlmICh2ZXJzaW9uICE9IDEpCi0gICAgZ290byB3cm9uZ192ZXJzaW9uOwotI2VuZGlmCi0KLSAgZGF0YSArPSA0OwotICAvKiBlbnN1cmUgc2l6ZXMgKi8KLSAgaGVhZGVyX3NpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICBpZiAoaGVhZGVyX3NpemUgPCA1NikKLSAgICBnb3RvIGhlYWRlcl90b29fc21hbGw7Ci0KLSAgaWYgKHNpemUgPCBoZWFkZXJfc2l6ZSkKLSAgICBnb3RvIHBheWxvYWRfdG9vX3NtYWxsOwotCi0gIGRhdGEgKz0gNDsKLSAgcmF0ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gIGRhdGEgKz0gNDsKLSAgbmJfY2hhbm5lbHMgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICBkYXRhICs9IDQ7Ci0gIGZyYW1lX3NpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICBkYXRhICs9IDQ7Ci0gIG92ZXJsYXAgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICBkYXRhICs9IDQ7Ci0gIGJ5dGVzX3Blcl9wYWNrZXQgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGNlbHRwYXksICJyYXRlICVkLCBuYl9jaGFubmVscyAlZCwgZnJhbWVfc2l6ZSAlZCIsCi0gICAgICByYXRlLCBuYl9jaGFubmVscywgZnJhbWVfc2l6ZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGNlbHRwYXksICJvdmVybGFwICVkLCBieXRlc19wZXJfcGFja2V0ICVkIiwKLSAgICAgIG92ZXJsYXAsIGJ5dGVzX3Blcl9wYWNrZXQpOwotCi0gIHBheWxvYWQgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwY2VsdHBheSk7Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJhdWRpbyIsIEZBTFNFLCAiQ0VMVCIsIHJhdGUpOwotICBjc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBuYl9jaGFubmVscyk7Ci0gIGZzc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBmcmFtZV9zaXplKTsKLSAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsICJlbmNvZGluZy1wYXJhbXMiLAotICAgICAgR19UWVBFX1NUUklORywgY3N0ciwgImZyYW1lLXNpemUiLCBHX1RZUEVfU1RSSU5HLCBmc3N0ciwgTlVMTCk7Ci0gIGdfZnJlZSAoY3N0cik7Ci0gIGdfZnJlZSAoZnNzdHIpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi10b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBjZWx0cGF5LAotICAgICAgICAiaWRlbnQgcGFja2V0IHRvbyBzbWFsbCwgbmVlZCBhdCBsZWFzdCAzMiBieXRlcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotd3JvbmdfaGVhZGVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwY2VsdHBheSwKLSAgICAgICAgImlkZW50IHBhY2tldCBkb2VzIG5vdCBzdGFydCB3aXRoIFwiQ0VMVCAgICBcIiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotI2lmIDAKLXdyb25nX3ZlcnNpb246Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBjZWx0cGF5LCAiY2FuIG9ubHkgaGFuZGxlIHZlcnNpb24gMSwgaGF2ZSB2ZXJzaW9uICVkIiwKLSAgICAgICAgdmVyc2lvbik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0jZW5kaWYKLWhlYWRlcl90b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBjZWx0cGF5LAotICAgICAgICAiaGVhZGVyIHNpemUgdG9vIHNtYWxsLCBuZWVkIGF0IGxlYXN0IDgwIGJ5dGVzLCAiICJnb3Qgb25seSAlZCIsCi0gICAgICAgIGhlYWRlcl9zaXplKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXBheWxvYWRfdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwY2VsdHBheSwKLSAgICAgICAgInBheWxvYWQgdG9vIHNtYWxsLCBuZWVkIGF0IGxlYXN0ICVkIGJ5dGVzLCBnb3Qgb25seSAlZCIsIGhlYWRlcl9zaXplLAotICAgICAgICBzaXplKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfY2VsdF9wYXlfZmx1c2hfcXVldWVkIChHc3RSdHBDRUxUUGF5ICogcnRwY2VsdHBheSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEJ1ZmZlciAqYnVmLCAqb3V0YnVmOwotICBndWludDggKnBheWxvYWQsICpzcGF5bG9hZDsKLSAgZ3VpbnQgcGF5bG9hZF9sZW47Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCwgfTsKLQotICBwYXlsb2FkX2xlbiA9IHJ0cGNlbHRwYXktPmJ5dGVzICsgcnRwY2VsdHBheS0+c2J5dGVzOwotICBkdXJhdGlvbiA9IHJ0cGNlbHRwYXktPnFkdXJhdGlvbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBjZWx0cGF5LCAiZmx1c2hpbmcgb3V0ICV1LCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBwYXlsb2FkX2xlbiwgR1NUX1RJTUVfQVJHUyAocnRwY2VsdHBheS0+cWR1cmF0aW9uKSk7Ci0KLSAgLyogZ2V0IGEgYmlnIGVub3VnaCBwYWNrZXQgZm9yIHRoZSBzaXplcyArIHBheWxvYWRzICovCi0gIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAocGF5bG9hZF9sZW4sIDAsIDApOwotCi0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBkdXJhdGlvbjsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgLyogcG9pbnQgdG8gdGhlIHBheWxvYWQgZm9yIHNpemUgaGVhZGVycyBhbmQgZGF0YSAqLwotICBzcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLSAgcGF5bG9hZCA9IHNwYXlsb2FkICsgcnRwY2VsdHBheS0+c2J5dGVzOwotCi0gIHdoaWxlICgoYnVmID0gZ19xdWV1ZV9wb3BfaGVhZCAocnRwY2VsdHBheS0+cXVldWUpKSkgewotICAgIGd1aW50IHNpemU7Ci0KLSAgICAvKiBjb3B5IGZpcnN0IHRpbWVzdGFtcCB0byBvdXRwdXQgKi8KLSAgICBpZiAoR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPT0gLTEpCi0gICAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotCi0gICAgLyogd3JpdGUgdGhlIHNpemUgdG8gdGhlIGhlYWRlciAqLwotICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICAgIHdoaWxlIChzaXplID4gMHhmZikgewotICAgICAgKnNwYXlsb2FkKysgPSAweGZmOwotICAgICAgc2l6ZSAtPSAweGZmOwotICAgIH0KLSAgICAqc3BheWxvYWQrKyA9IHNpemU7Ci0KLSAgICAvKiBjb3B5IHBheWxvYWQgKi8KLSAgICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZiwgMCwgcGF5bG9hZCwgc2l6ZSk7Ci0gICAgcGF5bG9hZCArPSBzaXplOwotCi0gICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGNlbHRwYXkpLCBvdXRidWYsIGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIC8qIHdlIGNvbnN1bWVkIGl0IGFsbCAqLwotICBydHBjZWx0cGF5LT5ieXRlcyA9IDA7Ci0gIHJ0cGNlbHRwYXktPnNieXRlcyA9IDA7Ci0gIHJ0cGNlbHRwYXktPnFkdXJhdGlvbiA9IDA7Ci0KLSAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cGNlbHRwYXkpLCBvdXRidWYpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2NlbHRfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UnRwQ0VMVFBheSAqcnRwY2VsdHBheTsKLSAgZ3NpemUgcGF5bG9hZF9sZW47Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIHBhY2tldF9kdXI7Ci0gIGd1aW50IGksIHNzaXplLCBwYWNrZXRfbGVuOwotCi0gIHJ0cGNlbHRwYXkgPSBHU1RfUlRQX0NFTFRfUEFZIChiYXNlcGF5bG9hZCk7Ci0KLSAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICBzd2l0Y2ggKHJ0cGNlbHRwYXktPnBhY2tldCkgewotICAgIGNhc2UgMDoKLSAgICAgIC8qIGlkZW50IHBhY2tldC4gV2UgbmVlZCB0byBwYXJzZSB0aGUgaGVhZGVycyB0byBjb25zdHJ1Y3QgdGhlIFJUUAotICAgICAgICogcHJvcGVydGllcy4gKi8KLSAgICAgIGlmICghZ3N0X3J0cF9jZWx0X3BheV9wYXJzZV9pZGVudCAocnRwY2VsdHBheSwgbWFwLmRhdGEsIG1hcC5zaXplKSkKLSAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLQotICAgICAgZ290byBjbGVhbnVwOwotICAgIGNhc2UgMToKLSAgICAgIC8qIGNvbW1lbnQgcGFja2V0LCB3ZSBpZ25vcmUgaXQgKi8KLSAgICAgIGdvdG8gY2xlYW51cDsKLSAgICBkZWZhdWx0OgotICAgICAgLyogb3RoZXIgcGFja2V0cyBnbyBpbiB0aGUgcGF5bG9hZCAqLwotICAgICAgYnJlYWs7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cGNlbHRwYXksCi0gICAgICAiZ290IGJ1ZmZlciBvZiBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSwgbWFwLnNpemUpOwotCi0gIC8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc2l6ZSBmaWVsZCBhbmQgdGhlIHBheWxvYWQgKi8KLSAgc3NpemUgPSAxOwotICBmb3IgKGkgPSBtYXAuc2l6ZTsgaSA+IDB4ZmY7IGkgLT0gMHhmZikKLSAgICBzc2l6ZSsrOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGNlbHRwYXksICJieXRlcyBmb3Igc2l6ZSAldSIsIHNzaXplKTsKLQotICAvKiBjYWxjdWxhdGUgd2hhdCB0aGUgbmV3IHNpemUgYW5kIGR1cmF0aW9uIHdvdWxkIGJlIG9mIHRoZSBwYWNrZXQgKi8KLSAgcGF5bG9hZF9sZW4gPSBzc2l6ZSArIG1hcC5zaXplICsgcnRwY2VsdHBheS0+Ynl0ZXMgKyBydHBjZWx0cGF5LT5zYnl0ZXM7Ci0gIGlmIChydHBjZWx0cGF5LT5xZHVyYXRpb24gIT0gLTEgJiYgZHVyYXRpb24gIT0gLTEpCi0gICAgcGFja2V0X2R1ciA9IHJ0cGNlbHRwYXktPnFkdXJhdGlvbiArIGR1cmF0aW9uOwotICBlbHNlCi0gICAgcGFja2V0X2R1ciA9IDA7Ci0KLSAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAocGF5bG9hZF9sZW4sIDAsIDApOwotCi0gIGlmIChnc3RfcnRwX2Jhc2VfcGF5bG9hZF9pc19maWxsZWQgKGJhc2VwYXlsb2FkLCBwYWNrZXRfbGVuLCBwYWNrZXRfZHVyKSkgewotICAgIC8qIHNpemUgb3IgZHVyYXRpb24gd291bGQgb3ZlcmZsb3cgdGhlIHBhY2tldCwgZmx1c2ggdGhlIHF1ZXVlZCBkYXRhICovCi0gICAgcmV0ID0gZ3N0X3J0cF9jZWx0X3BheV9mbHVzaF9xdWV1ZWQgKHJ0cGNlbHRwYXkpOwotICB9Ci0KLSAgLyogcXVldWUgdGhlIHBhY2tldCAqLwotICBnc3RfcnRwX2NlbHRfcGF5X2FkZF9xdWV1ZWQgKHJ0cGNlbHRwYXksIGJ1ZmZlciwgc3NpemUsIG1hcC5zaXplLCBkdXJhdGlvbik7Ci0KLWRvbmU6Ci0gIHJ0cGNlbHRwYXktPnBhY2tldCsrOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1jbGVhbnVwOgotICB7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXBhcnNlX2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHJ0cGNlbHRwYXksIFNUUkVBTSwgREVDT0RFLCAoTlVMTCksCi0gICAgICAgICgiRXJyb3IgcGFyc2luZyBmaXJzdCBpZGVudGlmaWNhdGlvbiBwYWNrZXQuIikpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9jZWx0X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSdHBDRUxUUGF5ICpydHBjZWx0cGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwY2VsdHBheSA9IEdTVF9SVFBfQ0VMVF9QQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIHJ0cGNlbHRwYXktPnBhY2tldCA9IDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9jZWx0X3BheV9jbGVhcl9xdWV1ZWQgKHJ0cGNlbHRwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfY2VsdF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBjZWx0cGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0NFTFRfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwY2VsdHBheS5oIGIvZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjZGQwZWMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBjZWx0cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1JUUF9DRUxUX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0NFTFRfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQ0VMVFBheSBHc3RSdHBDRUxUUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cENFTFRQYXlDbGFzcyBHc3RSdHBDRUxUUGF5Q2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0NFTFRfUEFZIFwKLSAgKGdzdF9ydHBfY2VsdF9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9DRUxUX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9DRUxUX1BBWSxHc3RSdHBDRUxUUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9DRUxUX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQ0VMVF9QQVksR3N0UnRwQ0VMVFBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9DRUxUX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9DRUxUX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfQ0VMVF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0NFTFRfUEFZKSkKLQotc3RydWN0IF9Hc3RSdHBDRUxUUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgZ3VpbnQ2NCBwYWNrZXQ7Ci0KLSAgLyogcXVldWUgdG8gaG9sZCBwYWNrZXRzICovCi0gIEdRdWV1ZSAgICAgICpxdWV1ZTsKLSAgZ3VpbnQgICAgICAgIHNieXRlczsgICAgLyogYnl0ZXMgcXVldWVkIGZvciBzaXplcyAqLwotICBndWludCAgICAgICAgYnl0ZXM7ICAgICAvKiBieXRlcyBxdWV1ZWQgZm9yIGRhdGEgKi8KLSAgR3N0Q2xvY2tUaW1lIHFkdXJhdGlvbjsgLyogcXVldWVkIGR1cmF0aW9uICovCi19OwotCi1zdHJ1Y3QgX0dzdFJ0cENFTFRQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfY2VsdF9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2NlbHRfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0NFTFRfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBjaGFubmVscy5jIGIvZ3N0L3J0cC9nc3RydHBjaGFubmVscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIxMjkzLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwY2hhbm5lbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwY2hhbm5lbHMuaCIKLQotLyogCi0gKiBSVFAgY2hhbm5lbCBwb3NpdGlvbnMgYXMgZGlzY3Vzc2VkIGluIFJGQyAzNTUxIGFuZCBhbHNvIFJGQyAzNTU1Ci0gKgotICogV2UgY2FuJ3QgcmVhbGx5IHJlcHJlc2VudCB0aGUgZGVzY3JpYmVkIGNoYW5uZWwgcG9zaXRpb25zIGluIEdTdHJlYW1lciBidXQgd2UKLSAqIGltcGxlbWVudCBhICh2ZXJ5IHJvdWdoKSBhcHByb3hpbWF0aW9uIGhlcmUuCi0gKi8KLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc180XzFbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVAotfTsKLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc180XzJbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMQotfTsKLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc180XzNbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMQotfTsKLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc181XzFbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSCi19OwotCi1zdGF0aWMgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zXzZfMVtdID0gewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEKLX07Ci0KLXN0YXRpYyBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NfNl8yW10gPSB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVAotfTsKLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc184XzFbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMSwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQKLX07Ci0KLXN0YXRpYyBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NfOF8yW10gPSB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUCi19OwotCi1zdGF0aWMgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zXzhfM1tdID0gewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxLAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVAotfTsKLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc19kZWZfMVtdID0gewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05PCi19OwotCi1zdGF0aWMgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zX2RlZl8yW10gPSB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUCi19OwotCi1zdGF0aWMgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zX2RlZl8zW10gPSB7Ci0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIKLX07Ci0KLXN0YXRpYyBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NfZGVmXzRbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMQotfTsKLQotc3RhdGljIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc19kZWZfNVtdID0gewotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX0xFRlQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfUklHSFQKLX07Ci0KLXN0YXRpYyBjb25zdCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NfZGVmXzZbXSA9IHsKLSAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfUklHSFQsCi0gIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hULAotICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxCi19OwotCi1jb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgZ3N0X3J0cF9jaGFubmVsX29yZGVyc1tdID0gewotICAvKiA0IGNoYW5uZWxzICovCi0gIHsiRFYuTFJMc1JzIiwgNCwgcG9zXzRfMX0sCi0gIHsiRFYuTFJDUyIsIDQsIHBvc180XzJ9LAotICB7IkRWLkxSQ1dvIiwgNCwgcG9zXzRfM30sCi0gIC8qIDUgY2hhbm5lbHMgKi8KLSAgeyJEVi5MUkxzUnNDIiwgNSwgcG9zXzVfMX0sCi0gIC8qIDYgY2hhbm5lbHMgKi8KLSAgeyJEVi5MUkxzUnNDUyIsIDYsIHBvc182XzF9LAotICB7IkRWLkxtaXhSbWl4VFdvUTFRMiIsIDYsIHBvc182XzJ9LAotICAvKiA4IGNoYW5uZWxzICovCi0gIHsiRFYuTFJDV29Mc1JzTG1peFJtaXgiLCA4LCBwb3NfOF8xfSwKLSAgeyJEVi5MUkNXb0xzMVJzMUxzMlJzMiIsIDgsIHBvc184XzJ9LAotICB7IkRWLkxSQ1dvTHNSc0xjUmMiLCA4LCBwb3NfOF8zfSwKLQotICAvKiBkZWZhdWx0IGxheW91dHMgKi8KLSAge05VTEwsIDEsIHBvc19kZWZfMX0sCi0gIHtOVUxMLCAyLCBwb3NfZGVmXzJ9LAotICB7TlVMTCwgMywgcG9zX2RlZl8zfSwKLSAge05VTEwsIDQsIHBvc19kZWZfNH0sCi0gIHtOVUxMLCA1LCBwb3NfZGVmXzV9LAotICB7TlVMTCwgNiwgcG9zX2RlZl82fSwKLQotICAvKiB0ZXJtaW5hdG9yLCBpbnZhbGlkIGVudHJ5ICovCi0gIHtOVUxMLCAwLCBOVUxMfSwKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotY2hlY2tfY2hhbm5lbHMgKGNvbnN0IEdzdFJUUENoYW5uZWxPcmRlciAqIG9yZGVyLAotICAgIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICogcG9zKQotewotICBnaW50IGksIGo7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG9yZGVyLT5jaGFubmVsczsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IG9yZGVyLT5jaGFubmVsczsgaisrKSB7Ci0gICAgICBpZiAob3JkZXItPnBvc1tqXSA9PSBwb3NbaV0pCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaiA9PSBvcmRlci0+Y2hhbm5lbHMpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcnRwX2NoYW5uZWxzX2dldF9ieV9wb3M6Ci0gKiBAY2hhbm5lbHM6IHRoZSBhbW91bnQgb2YgY2hhbm5lbHMKLSAqIEBwb3M6IGEgY2hhbm5lbCBsYXlvdXQKLSAqCi0gKiBSZXR1cm4gYSBkZXNjcmlwdGlvbiBvZiB0aGUgY2hhbm5lbCBsYXlvdXQuCi0gKgotICogUmV0dXJuczogYSAjR3N0UlRQQ2hhbm5lbE9yZGVyIHdpdGggdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24gb3IgTlVMTCB3aGVuIEBwb3MKLSAqIGlzIG5vdCBhIHZhbGlkIGxheW91dC4KLSAqLwotY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICoKLWdzdF9ydHBfY2hhbm5lbHNfZ2V0X2J5X3BvcyAoZ2ludCBjaGFubmVscywgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKiBwb3MpCi17Ci0gIGdpbnQgaTsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpyZXMgPSBOVUxMOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwb3MgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgZm9yIChpID0gMDsgY2hhbm5lbF9vcmRlcnNbaV0ucG9zOyBpKyspIHsKLSAgICBpZiAoY2hhbm5lbF9vcmRlcnNbaV0uY2hhbm5lbHMgIT0gY2hhbm5lbHMpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChjaGVja19jaGFubmVscyAoJmNoYW5uZWxfb3JkZXJzW2ldLCBwb3MpKSB7Ci0gICAgICByZXMgPSAmY2hhbm5lbF9vcmRlcnNbaV07Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcnRwX2NoYW5uZWxzX2NyZWF0ZV9kZWZhdWx0OgotICogQGNoYW5uZWxzOiB0aGUgYW1vdW50IG9mIGNoYW5uZWxzCi0gKiBAb3JkZXI6IGEgY2hhbm5lbCBvcmRlcgotICoKLSAqIEdldCB0aGUgY2hhbm5lbCBvcmRlciBpbmZvIHRoZSBAb3JkZXIgYW5kIEBjaGFubmVscy4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RSVFBDaGFubmVsT3JkZXIgd2l0aCB0aGUgY2hhbm5lbCBpbmZvcm1hdGlvbiBvciBOVUxMIHdoZW4KLSAqIEBvcmRlciBpcyBub3QgYSBrbm93IGxheW91dCBmb3IgQGNoYW5uZWxzLgotICovCi1jb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKgotZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfb3JkZXIgKGdpbnQgY2hhbm5lbHMsIGNvbnN0IGdjaGFyICogb3JkZXIpCi17Ci0gIGdpbnQgaTsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpyZXMgPSBOVUxMOwotCi0gIGZvciAoaSA9IDA7IGNoYW5uZWxfb3JkZXJzW2ldLnBvczsgaSsrKSB7Ci0gICAgaWYgKGNoYW5uZWxfb3JkZXJzW2ldLmNoYW5uZWxzICE9IGNoYW5uZWxzKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBubyBuYW1lIGJ1dCBjaGFubmVscyBtYXRjaCwgY29udGludWUgKi8KLSAgICBpZiAoIWNoYW5uZWxfb3JkZXJzW2ldLm5hbWUgfHwgIW9yZGVyKSB7Ci0gICAgICByZXMgPSAmY2hhbm5lbF9vcmRlcnNbaV07Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvKiBjb21wYXJlIG5hbWVzICovCi0gICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoY2hhbm5lbF9vcmRlcnNbaV0ubmFtZSwgb3JkZXIpKSB7Ci0gICAgICByZXMgPSAmY2hhbm5lbF9vcmRlcnNbaV07Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyoqCi0gKiBnc3RfcnRwX2NoYW5uZWxzX2dldF9ieV9pbmRleDoKLSAqIEBjaGFubmVsczogdGhlIGFtb3VudCBvZiBjaGFubmVscwotICogQGlkeDogdGhlIGNoYW5uZWwgaW5kZXggdG8gcmV0cmlldmUKLSAqCi0gKiBHZXQgdGhlIGFsbG93ZWQgY2hhbm5lbCBvcmRlciBkZXNjcmlwdGlvbnMgZm9yIEBjaGFubmVscy4gQGlkeCBjYW4gYmUgdXNlZCB0bwotICogcmV0cmlldmUgdGhlIGRlc2lyZWQgaW5kZXguCi0gKgotICogUmV0dXJuczogYSAjR3N0UlRQQ2hhbm5lbE9yZGVyIGF0IEBpZHgsIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gdmFsaWQgY2hhbm5lbAotICogb3JkZXJzLgotICovCi1jb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKgotZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfaW5kZXggKGdpbnQgY2hhbm5lbHMsIGd1aW50IGlkeCkKLXsKLSAgZ2ludCBpOwotICBjb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKnJlcyA9IE5VTEw7Ci0KLSAgZm9yIChpID0gMDsgY2hhbm5lbF9vcmRlcnNbaV0ucG9zOyBpKyspIHsKLSAgICBpZiAoY2hhbm5lbF9vcmRlcnNbaV0uY2hhbm5lbHMgIT0gY2hhbm5lbHMpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChpZHggPT0gMCkgewotICAgICAgcmVzID0gJmNoYW5uZWxfb3JkZXJzW2ldOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlkeC0tOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLQotLyoqCi0gKiBnc3RfcnRwX2NoYW5uZWxzX2NyZWF0ZV9kZWZhdWx0OgotICogQGNoYW5uZWxzOiB0aGUgYW1vdW50IG9mIGNoYW5uZWxzCi0gKgotICogQ3JlYXRlIGEgZGVmYXVsdCBub25lIGNoYW5uZWwgbWFwcGluZyBmb3IgQGNoYW5uZWxzLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHdpdGggYWxsIHRoZSBjaGFubmVsIHBvc2l0aW9uIGluZm8gc2V0IHRvCi0gKiAjR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORS4KLSAqLwotdm9pZAotZ3N0X3J0cF9jaGFubmVsc19jcmVhdGVfZGVmYXVsdCAoZ2ludCBjaGFubmVscywgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKiBwb3NuKQotewotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoY2hhbm5lbHMgPiAwKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkrKykKLSAgICBwb3NuW2ldID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwY2hhbm5lbHMuaCBiL2dzdC9ydHAvZ3N0cnRwY2hhbm5lbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQzZjUzMC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGNoYW5uZWxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpZm5kZWYgX19HU1RfUlRQX0NIQU5ORUxTX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfQ0hBTk5FTFNfSF9fCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICpuYW1lOwotICBnaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbHM7Ci0gIGNvbnN0IEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICpwb3M7Ci19IEdzdFJUUENoYW5uZWxPcmRlcjsKLQotI2RlZmluZSBjaGFubmVsX29yZGVycyBnc3RfcnRwX2NoYW5uZWxfb3JkZXJzCi1HX0dOVUNfSU5URVJOQUwgZXh0ZXJuIGNvbnN0IEdzdFJUUENoYW5uZWxPcmRlciBnc3RfcnRwX2NoYW5uZWxfb3JkZXJzW107Ci0KLWNvbnN0IEdzdFJUUENoYW5uZWxPcmRlciAqICAgZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfcG9zICAgICAoZ2ludCBjaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKnBvcyk7Ci1jb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKiAgIGdzdF9ydHBfY2hhbm5lbHNfZ2V0X2J5X29yZGVyICAgKGdpbnQgY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpvcmRlcik7Ci1jb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKiAgIGdzdF9ydHBfY2hhbm5lbHNfZ2V0X2J5X2luZGV4ICAgKGdpbnQgY2hhbm5lbHMsIGd1aW50IGlkeCk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0X3J0cF9jaGFubmVsc19jcmVhdGVfZGVmYXVsdCAoZ2ludCBjaGFubmVscywgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKnBvcyk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfQ0hBTk5FTFNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwZHZkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjM1YjcxLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZHZkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI1ICswLDAgQEAKLS8qIEZhcnNpZ2h0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFyY2VsIE1vcmVhdXggPG1hcmNlbG1Ac3BhY2VsYWJzLm5sPgotICogICAgICAgICAgIChDKSAyMDA4IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFJUUCBEViBkZXBheWxvYWRlci4KLSAqCi0gKiBJbXBvcnRhbnQgbm90ZSBmb3IgTlRTQy11c2VyczoKLSAqCi0gKiBCZWNhdXNlIHRoZSBhdXRob3IgdXNlcyBQQUwgdmlkZW8sIGFuZCBoZSBkb2VzIG5vdCBoYXZlIHByb3BlciBEVgotICogZG9jdW1lbnRhdGlvbiAodGhlIERWIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIG5vdCBmcmVlbHkgYXZhaWxhYmxlKSwKLSAqIHRoaXMgY29kZSBtYXkgdmVyeSB3ZWxsIGNvbnRhaW4gUEFMLXNwZWNpZmljIGFzc3VtcHRpb25zLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RydHBkdmRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChydHBkdmRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBkdmRlcGF5X2RlYnVnKQotLyogRmlsdGVyIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1kdiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIHsgXCJ2aWRlb1wiLCBcImF1ZGlvXCIgfSwiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJEVlwiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsIgotICAgICAgICAiZW5jb2RlID0gKHN0cmluZykgeyBcIlNELVZDUi81MjUtNjBcIiwgXCJTRC1WQ1IvNjI1LTUwXCIsIFwiSEQtVkNSLzExMjUtNjBcIiwiCi0gICAgICAgICJcIkhELVZDUi8xMjUwLTUwXCIsIFwiU0RMLVZDUi81MjUtNjBcIiwgXCJTREwtVkNSLzYyNS01MFwiLCIKLSAgICAgICAgIlwiMzA2TS81MjUtNjBcIiwgXCIzMDZNLzYyNS01MFwiLCBcIjMxNE0tMjUvNTI1LTYwXCIsIgotICAgICAgICAiXCIzMTRNLTI1LzYyNS01MFwiLCBcIjMxNE0tNTAvNTI1LTYwXCIsIFwiMzE0TS01MC82MjUtNTBcIiB9IgotICAgICAgICAvKiBvcHRpb25hbCBwYXJhbWV0ZXJzIGNhbid0IGdvIGluIHRoZSB0ZW1wbGF0ZQotICAgICAgICAgKiAiYXVkaW8gPSAoc3RyaW5nKSB7IFwiYnVuZGxlZFwiLCBcIm5vbmVcIiB9IgotICAgICAgICAgKi8KLSAgICApCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX2R2X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2R2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBiYXNlLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9kdl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotI2RlZmluZSBnc3RfcnRwX2R2X2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJUUERWRGVwYXksIGdzdF9ydHBfZHZfZGVwYXksIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZHZfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UlRQRFZEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9Ci0gICAgICAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBkdmRlcGF5X2RlYnVnLCAicnRwZHZkZXBheSIsIDAsCi0gICAgICAiRFYgUlRQIERlcGF5bG9hZGVyIik7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2R2X2RlcGF5X2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIERWIERlcGF5bG9hZGVyIiwKLSAgICAgICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRGVwYXlsb2FkcyBEViBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzE4OSkiLAotICAgICAgIk1hcmNlbCBNb3JlYXV4IDxtYXJjZWxtQHNwYWNlbGFicy5ubD4sIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2R2X2RlcGF5X3Byb2Nlc3MpOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdl9kZXBheV9zZXRjYXBzKTsKLX0KLQotLyogaW5pdGlhbGl6ZSB0aGUgbmV3IGVsZW1lbnQKLSAqIGluc3RhbnRpYXRlIHBhZHMgYW5kIGFkZCB0aGVtIHRvIGVsZW1lbnQKLSAqIHNldCBmdW5jdGlvbnMKLSAqIGluaXRpYWxpemUgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R2X2RlcGF5X2luaXQgKEdzdFJUUERWRGVwYXkgKiBmaWx0ZXIpCi17Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGFyc2VfZW5jb2RlIChHc3RSVFBEVkRlcGF5ICogcnRwZHZkZXBheSwgY29uc3QgZ2NoYXIgKiBlbmNvZGUpCi17Ci0gIHJ0cGR2ZGVwYXktPndpZHRoID0gNzIwOwotICBpZiAoIXN0cmNtcCAoZW5jb2RlLCAiMzE0TS0yNS81MjUtNjAiKSkgewotICAgIHJ0cGR2ZGVwYXktPmZyYW1lX3NpemUgPSAyNDAwMDA7Ci0gICAgcnRwZHZkZXBheS0+aGVpZ2h0ID0gNDgwOwotICAgIHJ0cGR2ZGVwYXktPnJhdGVfbnVtID0gMzAwMDA7Ci0gICAgcnRwZHZkZXBheS0+cmF0ZV9kZW5vbSA9IDEwMDE7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoZW5jb2RlLCAiU0QtVkNSLzUyNS02MCIpKSB7Ci0gICAgcnRwZHZkZXBheS0+ZnJhbWVfc2l6ZSA9IDEyMDAwMDsKLSAgICBydHBkdmRlcGF5LT5oZWlnaHQgPSA0ODA7Ci0gICAgcnRwZHZkZXBheS0+cmF0ZV9udW0gPSAzMDAwMDsKLSAgICBydHBkdmRlcGF5LT5yYXRlX2Rlbm9tID0gMTAwMTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChlbmNvZGUsICIzMTRNLTUwLzYyNS01MCIpKSB7Ci0gICAgcnRwZHZkZXBheS0+ZnJhbWVfc2l6ZSA9IDI4ODAwMDsKLSAgICBydHBkdmRlcGF5LT5oZWlnaHQgPSA1NzY7Ci0gICAgcnRwZHZkZXBheS0+cmF0ZV9udW0gPSAyNTsKLSAgICBydHBkdmRlcGF5LT5yYXRlX2Rlbm9tID0gMTsKLSAgfSBlbHNlIGlmICghc3RyY21wIChlbmNvZGUsICJTRC1WQ1IvNjI1LTUwIikpIHsKLSAgICBydHBkdmRlcGF5LT5mcmFtZV9zaXplID0gMTQ0MDAwOwotICAgIHJ0cGR2ZGVwYXktPmhlaWdodCA9IDU3NjsKLSAgICBydHBkdmRlcGF5LT5yYXRlX251bSA9IDI1OwotICAgIHJ0cGR2ZGVwYXktPnJhdGVfZGVub20gPSAxOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKGVuY29kZSwgIjMxNE0tMjUvNjI1LTUwIikpIHsKLSAgICBydHBkdmRlcGF5LT5mcmFtZV9zaXplID0gMTQ0MDAwOwotICAgIHJ0cGR2ZGVwYXktPmhlaWdodCA9IDU3NjsKLSAgICBydHBkdmRlcGF5LT5yYXRlX251bSA9IDI1OwotICAgIHJ0cGR2ZGVwYXktPnJhdGVfZGVub20gPSAxOwotICB9IGVsc2UKLSAgICBydHBkdmRlcGF5LT5mcmFtZV9zaXplID0gLTE7Ci0KLSAgcmV0dXJuIHJ0cGR2ZGVwYXktPmZyYW1lX3NpemUgIT0gLTE7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9kdl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdFJUUERWRGVwYXkgKnJ0cGR2ZGVwYXk7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgZ2Jvb2xlYW4gc3lzdGVtc3RyZWFtLCByZXQ7Ci0gIGNvbnN0IGdjaGFyICplbmNvZGUsICptZWRpYTsKLQotICBydHBkdmRlcGF5ID0gR1NUX1JUUF9EVl9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIC8qIHdlIHJlYWxseSBuZWVkIHRoZSBlbmNvZGUgcHJvcGVydHkgdG8gZmlndXJlIG91dCB0aGUgZnJhbWUgc2l6ZSwgaXQncyBhbHNvCi0gICAqIHJlcXVpcmVkIGJ5IHRoZSBzcGVjICovCi0gIGlmICghKGVuY29kZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZW5jb2RlIikpKQotICAgIGdvdG8gbm9fZW5jb2RlOwotCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIHNpemUgb2Ygb25lIGZyYW1lICovCi0gIGlmICghcGFyc2VfZW5jb2RlIChydHBkdmRlcGF5LCBlbmNvZGUpKQotICAgIGdvdG8gdW5rbm93bl9lbmNvZGU7Ci0KLSAgLyogY2hlY2sgdGhlIG1lZGlhLCB0aGlzIHRlbGxzIHVzIHRoYXQgdGhlIHN0cmVhbSBoYXMgdmlkZW8gb3Igbm90ICovCi0gIGlmICghKG1lZGlhID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJtZWRpYSIpKSkKLSAgICBnb3RvIG5vX21lZGlhOwotCi0gIHN5c3RlbXN0cmVhbSA9IEZBTFNFOwotCi0gIGlmICghc3RyY21wIChtZWRpYSwgImF1ZGlvIikpIHsKLSAgICAvKiB3ZSBuZWVkIGEgZGVtdXhlciBmb3IgYXVkaW8gb25seSAqLwotICAgIHN5c3RlbXN0cmVhbSA9IFRSVUU7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAobWVkaWEsICJ2aWRlbyIpKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmF1ZGlvOwotCi0gICAgLyogY2hlY2sgdGhlIG9wdGlvbmFsIGF1ZGlvIGZpZWxkLCBpZiBpdCdzIHByZXNlbnQgYW5kIHNldCB0byBidW5kbGVkLCB3ZQotICAgICAqIGFyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gc3RyZWFtLiAqLwotICAgIGlmICgoYXVkaW8gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImF1ZGlvIikpKSB7Ci0gICAgICBpZiAoIXN0cmNtcCAoYXVkaW8sICJidW5kbGVkIikpCi0gICAgICAgIHN5c3RlbXN0cmVhbSA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogYWxsb2NhdGUgYWNjdW11bGF0b3IgKi8KLSAgcnRwZHZkZXBheS0+YWNjID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChydHBkdmRlcGF5LT5mcmFtZV9zaXplKTsKLQotICAvKiBJbml0aWFsaXplIHRoZSBuZXcgYWNjdW11bGF0b3IgZnJhbWUuCi0gICAqIElmIHRoZSBwcmV2aW91cyBmcmFtZSBleGlzdHMsIGNvcHkgdGhhdCBpbnRvIHRoZSBhY2N1bXVsYXRvciBmcmFtZS4KLSAgICogVGhpcyB3YXksIG1pc3NpbmcgcGFja2V0cyBpbiB0aGUgc3RyZWFtIHdvbid0IHNob3cgdXAgYmFkbHkuICovCi0gIGdzdF9idWZmZXJfbWVtc2V0IChydHBkdmRlcGF5LT5hY2MsIDAsIDAsIHJ0cGR2ZGVwYXktPmZyYW1lX3NpemUpOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1kdiIsCi0gICAgICAic3lzdGVtc3RyZWFtIiwgR19UWVBFX0JPT0xFQU4sIHN5c3RlbXN0cmVhbSwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHJ0cGR2ZGVwYXktPndpZHRoLAotICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIHJ0cGR2ZGVwYXktPmhlaWdodCwKLSAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgcnRwZHZkZXBheS0+cmF0ZV9udW0sCi0gICAgICBydHBkdmRlcGF5LT5yYXRlX2Rlbm9tLCBOVUxMKTsKLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoZGVwYXlsb2FkLT5zcmNwYWQsIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2VuY29kZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGR2ZGVwYXksICJyZXF1aXJlZCBlbmNvZGUgcHJvcGVydHkgbm90IGZvdW5kIGluIGNhcHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXVua25vd25fZW5jb2RlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwZHZkZXBheSwgInVua25vd24gZW5jb2RlIHByb3BlcnR5ICVzIGZvdW5kIiwgZW5jb2RlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX21lZGlhOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwZHZkZXBheSwgInJlcXVpcmVkIG1lZGlhIHByb3BlcnR5IG5vdCBmb3VuZCBpbiBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIEEgRFYgZnJhbWUgY29uc2lzdHMgb2YgYSBidW5jaCBvZiA4MC1ieXRlIERJRiBibG9ja3MuCi0gKiBFYWNoIERJRiBibG9jayBjb250YWlucyBhIDMtYnl0ZSBoZWFkZXIgdGVsbGluZyB3aGVyZSBpbiB0aGUgRFYgZnJhbWUgdGhlCi0gKiBESUYgYmxvY2sgc2hvdWxkIGdvLiBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBjYWxjdWxhdGUgaXRzIHBvc2l0aW9uLgotICovCi1zdGF0aWMgZ3VpbnQKLWNhbGN1bGF0ZV9kaWZibG9ja19sb2NhdGlvbiAoZ3VpbnQ4ICogYmxvY2spCi17Ci0gIGdpbnQgYmxvY2tfdHlwZSwgZGlmX3NlcXVlbmNlLCBkaWZfYmxvY2s7Ci0gIGd1aW50IGxvY2F0aW9uOwotCi0gIGJsb2NrX3R5cGUgPSBibG9ja1swXSA+PiA1OwotICBkaWZfc2VxdWVuY2UgPSBibG9ja1sxXSA+PiA0OwotICBkaWZfYmxvY2sgPSBibG9ja1syXTsKLQotICBsb2NhdGlvbiA9IGRpZl9zZXF1ZW5jZSAqIDE1MDsKLQotICBzd2l0Y2ggKGJsb2NrX3R5cGUpIHsKLSAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBIZWFkZXIgYmxvY2ssIG5vIG9mZnNldCAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogU3ViY29kZSBibG9jayAqLwotICAgICAgbG9jYXRpb24gKz0gKDEgKyBkaWZfYmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgLyogVkFVWCBibG9jayAqLwotICAgICAgbG9jYXRpb24gKz0gKDMgKyBkaWZfYmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogQXVkaW8gYmxvY2sgKi8KLSAgICAgIGxvY2F0aW9uICs9ICg2ICsgZGlmX2Jsb2NrICogMTYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgLyogVmlkZW8gYmxvY2sgKi8KLSAgICAgIGxvY2F0aW9uICs9ICg3ICsgKGRpZl9ibG9jayAvIDE1KSArIGRpZl9ibG9jayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAvKiBTb21ldGhpbmcgYm9ndXMgKi8KLSAgICAgIEdTVF9ERUJVRyAoIlVOS05PV04gQkxPQ0siKTsKLSAgICAgIGxvY2F0aW9uID0gLTE7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gbG9jYXRpb247Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9tZXRhZGF0YV9kcm9wIChHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0TWV0YSAqKiBtZXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gICptZXRhID0gTlVMTDsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIFByb2Nlc3Mgb25lIFJUUCBwYWNrZXQuIEFjY3VtdWxhdGUgUlRQIHBheWxvYWQgaW4gdGhlIHByb3BlciBwbGFjZSBpbiBhIERWCi0gKiBmcmFtZSwgYW5kIHJldHVybiB0aGF0IGZyYW1lIGlmIHdlIGRldGVjdCBhIG5ldyBmcmFtZSwgb3IgTlVMTCBvdGhlcndpc2UuCi0gKiBXZSBhc3N1bWUgYSBEViBmcmFtZSBpcyAxNDQwMDAgYnl0ZXMuIFRoYXQgc2hvdWxkIGFjY29tb2RhdGUgUEFMIGFzIHdlbGwgYXMKLSAqIE5UU0MuCi0gKi8KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9kdl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogYmFzZSwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RCdWZmZXIgKm91dCA9IE5VTEw7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQzMiBydHBfdHM7Ci0gIGd1aW50IHBheWxvYWRfbGVuLCBsb2NhdGlvbjsKLSAgR3N0UlRQRFZEZXBheSAqZHZkZXBheSA9IEdTVF9SVFBfRFZfREVQQVkgKGJhc2UpOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCk7Ci0KLSAgLyogQ2hlY2sgaWYgdGhlIHJlY2VpdmVkIHBhY2tldCBjb250YWlucyAodGhlIHN0YXJ0IG9mKSBhIG5ldyBmcmFtZSwgd2UgZG8KLSAgICogdGhpcyBieSBjaGVja2luZyB0aGUgUlRQIHRpbWVzdGFtcC4gKi8KLSAgcnRwX3RzID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKTsKLQotICAvKiB3ZSBjYW5ub3QgY29weSB0aGUgcGFja2V0IHlldCBpZiB0aGUgbWFya2VyIGlzIHNldCwgd2Ugd2lsbCBkbyB0aGF0IGJlbG93Ci0gICAqIGFmdGVyIHRha2luZyBvdXQgdGhlIGRhdGEgKi8KLSAgaWYgKGR2ZGVwYXktPnByZXZfdHMgIT0gLTEgJiYgcnRwX3RzICE9IGR2ZGVwYXktPnByZXZfdHMgJiYgIW1hcmtlcikgewotICAgIC8qIHRoZSB0aW1lc3RhbXAgY2hhbmdlZCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGR2ZGVwYXksICJuZXcgZnJhbWUgd2l0aCB0cyAldSwgb2xkIHRzICV1IiwgcnRwX3RzLAotICAgICAgICBkdmRlcGF5LT5wcmV2X3RzKTsKLQotICAgIC8qIHJldHVybiBjb3B5IG9mIGFjY3VtdWxhdG9yLiAqLwotICAgIG91dCA9IGdzdF9idWZmZXJfY29weSAoZHZkZXBheS0+YWNjKTsKLSAgICBnc3RfYnVmZmVyX2ZvcmVhY2hfbWV0YSAoZHZkZXBheS0+YWNjLCBmb3JlYWNoX21ldGFkYXRhX2Ryb3AsIE5VTEwpOwotICB9Ci0KLSAgLyogRXh0cmFjdCB0aGUgcGF5bG9hZCAqLwotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIC8qIGNvcHkgYWxsIERJRiBjaHVua3MgaW4gdGhlaXIgcGxhY2UuICovCi0gIGdzdF9idWZmZXJfbWFwIChkdmRlcGF5LT5hY2MsICZtYXAsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgd2hpbGUgKHBheWxvYWRfbGVuID49IDgwKSB7Ci0gICAgZ3VpbnQgb2Zmc2V0OwotCi0gICAgLyogQ2FsY3VsYXRlIHdoZXJlIGluIHRoZSBmcmFtZSB0aGUgcGF5bG9hZCBzaG91bGQgZ28gKi8KLSAgICBsb2NhdGlvbiA9IGNhbGN1bGF0ZV9kaWZibG9ja19sb2NhdGlvbiAocGF5bG9hZCk7Ci0KLSAgICBpZiAobG9jYXRpb24gPCA2KSB7Ci0gICAgICAvKiBwYXJ0IG9mIGEgaGVhZGVyLCBzZXQgdGhlIGZsYWcgdG8gbWFyayB0aGF0IHdlIGhhdmUgdGhlIGhlYWRlci4gKi8KLSAgICAgIGR2ZGVwYXktPmhlYWRlcl9tYXNrIHw9ICgxIDw8IGxvY2F0aW9uKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdmRlcGF5LCAiZ290IGhlYWRlciBhdCBsb2NhdGlvbiAlZCwgbm93ICUwMngiLCBsb2NhdGlvbiwKLSAgICAgICAgICBkdmRlcGF5LT5oZWFkZXJfbWFzayk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChkdmRlcGF5LCAiZ290IGJsb2NrIGF0IGxvY2F0aW9uICVkIiwgbG9jYXRpb24pOwotICAgIH0KLQotICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgLyogZ2V0IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZGlmIGJsb2NrICovCi0gICAgICBvZmZzZXQgPSBsb2NhdGlvbiAqIDgwOwotCi0gICAgICAvKiBBbmQgY29weSBpdCBpbiwgcHJvdmlkZWQgdGhlIGxvY2F0aW9uIGlzIHNhbmUuICovCi0gICAgICBpZiAob2Zmc2V0IDw9IGR2ZGVwYXktPmZyYW1lX3NpemUgLSA4MCkgewotICAgICAgICBtZW1jcHkgKG1hcC5kYXRhICsgb2Zmc2V0LCBwYXlsb2FkLCA4MCk7Ci0gICAgICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkdmRlcGF5KSwgZHZkZXBheS0+YWNjLAotICAgICAgICAgICAgcnRwLT5idWZmZXIsIDApOwotICAgICAgfQotICAgIH0KLQotICAgIHBheWxvYWQgKz0gODA7Ci0gICAgcGF5bG9hZF9sZW4gLT0gODA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoZHZkZXBheS0+YWNjLCAmbWFwKTsKLQotICBpZiAobWFya2VyKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHZkZXBheSwgIm1hcmtlciBiaXQgY29tcGxldGUgZnJhbWUgJXUiLCBydHBfdHMpOwotICAgIC8qIG9ubHkgY29weSB0aGUgZnJhbWUgd2hlbiB3ZSBoYXZlIGEgY29tcGxldGUgaGVhZGVyICovCi0gICAgaWYgKGR2ZGVwYXktPmhlYWRlcl9tYXNrID09IDB4M2YpIHsKLSAgICAgIC8qIFRoZSBtYXJrZXIgbWFya3MgdGhlIGVuZCBvZiBhIGZyYW1lIHRoYXQgd2UgbmVlZCB0byBwdXNoLiBUaGUgbmV4dCBmcmFtZQotICAgICAgICogd2lsbCBjaGFuZ2UgdGhlIHRpbWVzdGFtcCBidXQgd2Ugd29uJ3QgY29weSB0aGUgYWNjdW11bGF0b3IgYWdhaW4gYmVjYXVzZQotICAgICAgICogd2Ugc2V0IHRoZSBwcmV2X3RzIHRvIC0xLiAqLwotICAgICAgb3V0ID0gZ3N0X2J1ZmZlcl9jb3B5IChkdmRlcGF5LT5hY2MpOwotICAgICAgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEgKGR2ZGVwYXktPmFjYywgZm9yZWFjaF9tZXRhZGF0YV9kcm9wLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkdmRlcGF5LCAid2FpdGluZyBmb3IgZnJhbWUgaGVhZGVycyAlMDJ4IiwKLSAgICAgICAgICBkdmRlcGF5LT5oZWFkZXJfbWFzayk7Ci0gICAgfQotICAgIGR2ZGVwYXktPnByZXZfdHMgPSAtMTsKLSAgfSBlbHNlIHsKLSAgICAvKiBzYXZlIGxhc3QgdGltZXN0YW1wICovCi0gICAgZHZkZXBheS0+cHJldl90cyA9IHJ0cF90czsKLSAgfQotICByZXR1cm4gb3V0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdl9kZXBheV9yZXNldCAoR3N0UlRQRFZEZXBheSAqIGRlcGF5KQotewotICBpZiAoZGVwYXktPmFjYykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChkZXBheS0+YWNjKTsKLSAgZGVwYXktPmFjYyA9IE5VTEw7Ci0KLSAgZGVwYXktPnByZXZfdHMgPSAtMTsKLSAgZGVwYXktPmhlYWRlcl9tYXNrID0gMDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX2R2X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UlRQRFZEZXBheSAqZGVwYXkgPSBHU1RfUlRQX0RWX0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9kdl9kZXBheV9yZXNldCAoZGVwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVCAoR1NUX0VMRU1FTlRfQ0xBU1MsIGNoYW5nZV9zdGF0ZSwKLSAgICAgIChlbGVtZW50LCB0cmFuc2l0aW9uKSwgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9kdl9kZXBheV9yZXNldCAoZGVwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2R2X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwZHZkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9EVl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGR2ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwZHZkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2U1Yjk3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZHZkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyogRmFyc2lnaHQKLSAqIENvcHlyaWdodCAoQykgMjAwNiBNYXJjZWwgTW9yZWF1eCA8bWFyY2VsbUBzcGFjZWxhYnMubmw+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVFJUUERWREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUUlRQRFZERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0vKiAjZGVmaW5lJ3MgZG9uJ3QgbGlrZSB3aGl0ZXNwYWNleSBiaXRzICovCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9EVl9ERVBBWSAoZ3N0X3J0cF9kdl9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0RWX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0RWX0RFUEFZLEdzdFJUUERWRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX0RWX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9EVl9ERVBBWSxHc3RSVFBEVkRlcGF5KSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9EVl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9EVl9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfRFZfREVQQVlfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9EVl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBEVkRlcGF5ICAgICAgR3N0UlRQRFZEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBEVkRlcGF5Q2xhc3MgR3N0UlRQRFZEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJUUERWRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBwYXJlbnQ7Ci0KLSAgR3N0QnVmZmVyICphY2M7Ci0gIGd1aW50IGZyYW1lX3NpemU7Ci0gIGd1aW50MzIgcHJldl90czsKLSAgZ3VpbnQ4IGhlYWRlcl9tYXNrOwotCi0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCByYXRlX251bSwgcmF0ZV9kZW5vbTsKLX07Ci0KLXN0cnVjdCBfR3N0UlRQRFZEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2R2X2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9kdl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUUlRQRFZERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZHZwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwZHZwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwODgwNi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGR2cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTcgKzAsMCBAQAotLyogRmFyc2lnaHQKLSAqIENvcHlyaWdodCAoQykgMjAwNiBNYXJjZWwgTW9yZWF1eCA8bWFyY2VsbUBzcGFjZWxhYnMubmw+Ci0gKiAgICAgICAgICAgKEMpIDIwMDggV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBkdnBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWSAocnRwZHZwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGR2cGF5X2RlYnVnKQotCi0jZGVmaW5lIERFRkFVTFRfTU9ERSBHU1RfRFZfUEFZX01PREVfVklERU8KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX01PREUKLX07Ci0KLS8qIHRha2VzIGJvdGggc3lzdGVtIGFuZCBub24tc3lzdGVtIHN0cmVhbXMgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2R2X3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtZHYiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2R2X3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIHsgXCJ2aWRlb1wiLCBcImF1ZGlvXCIgfSAsIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkRWXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwiCi0gICAgICAgICJlbmNvZGUgPSAoc3RyaW5nKSB7IFwiU0QtVkNSLzUyNS02MFwiLCBcIlNELVZDUi82MjUtNTBcIiwgXCJIRC1WQ1IvMTEyNS02MFwiLCIKLSAgICAgICAgIlwiSEQtVkNSLzEyNTAtNTBcIiwgXCJTREwtVkNSLzUyNS02MFwiLCBcIlNETC1WQ1IvNjI1LTUwXCIsIgotICAgICAgICAiXCIzMDZNLzUyNS02MFwiLCBcIjMwNk0vNjI1LTUwXCIsIFwiMzE0TS0yNS81MjUtNjBcIiwiCi0gICAgICAgICJcIjMxNE0tMjUvNjI1LTUwXCIsIFwiMzE0TS01MC81MjUtNjBcIiwgXCIzMTRNLTUwLzYyNS01MFwiIH0iCi0gICAgICAgIC8qIG9wdGlvbmFsIHBhcmFtZXRlcnMgY2FuJ3QgZ28gaW4gdGhlIHRlbXBsYXRlCi0gICAgICAgICAqICJhdWRpbyA9IChzdHJpbmcpIHsgXCJidW5kbGVkXCIsIFwibm9uZVwiIH0iCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9kdl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfZHZfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIEdTVF9UWVBFX0RWX1BBWV9NT0RFIChnc3RfZHZfcGF5X21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X2R2X3BheV9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgZHZfcGF5X21vZGVfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGR2X3BheV9tb2Rlc1tdID0gewotICAgIHtHU1RfRFZfUEFZX01PREVfVklERU8sICJWaWRlbyBvbmx5IiwgInZpZGVvIn0sCi0gICAge0dTVF9EVl9QQVlfTU9ERV9CVU5ETEVELCAiVmlkZW8gYW5kIEF1ZGlvIGJ1bmRsZWQiLCAiYnVuZGxlZCJ9LAotICAgIHtHU1RfRFZfUEFZX01PREVfQVVESU8sICJBdWRpbyBvbmx5IiwgImF1ZGlvIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghZHZfcGF5X21vZGVfdHlwZSkgewotICAgIGR2X3BheV9tb2RlX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RFZQYXlNb2RlIiwgZHZfcGF5X21vZGVzKTsKLSAgfQotICByZXR1cm4gZHZfcGF5X21vZGVfdHlwZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBnc3RfZHZfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9kdl9wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0jZGVmaW5lIGdzdF9ydHBfZHZfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJUUERWUGF5LCBnc3RfcnRwX2R2X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2R2X3BheV9jbGFzc19pbml0IChHc3RSVFBEVlBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZHZwYXlfZGVidWcsICJydHBkdnBheSIsIDAsICJEViBSVFAgUGF5bG9hZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9kdl9wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZHZfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoIm1vZGUiLCAiTW9kZSIsCi0gICAgICAgICAgIlRoZSBwYXlsb2FkIG1vZGUgb2YgcGF5bG9hZGluZyIsCi0gICAgICAgICAgR1NUX1RZUEVfRFZfUEFZX01PREUsIERFRkFVTFRfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2R2X3BheV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9kdl9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIERWIFBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkcyBEViBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMzE4OSkiLAotICAgICAgIk1hcmNlbCBNb3JlYXV4IDxtYXJjZWxtQHNwYWNlbGFicy5ubD4sIFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9kdl9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2R2X3BheV9oYW5kbGVfYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdl9wYXlfaW5pdCAoR3N0UlRQRFZQYXkgKiBydHBkdnBheSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kdl9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJUUERWUGF5ICpydHBkdnBheSA9IEdTVF9SVFBfRFZfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgcnRwZHZwYXktPm1vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZHZfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBEVlBheSAqcnRwZHZwYXkgPSBHU1RfUlRQX0RWX1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBydHBkdnBheS0+bW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9kdl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgLyogV2UgZG9uJ3QgZG8gYW55dGhpbmcgaGVyZSwgYnV0IHdlIGNvdWxkIGNoZWNrIGlmIGl0J3MgYSBzeXN0ZW0gc3RyZWFtIGFuZCBpZgotICAgKiBpdCdzIG5vdCwgZGVmYXVsdCB0byBzZW5kaW5nIHRoZSB2aWRlbyBvbmx5LiBXZSB3aWxsIG5lZ290aWF0ZSBkb3duc3RyZWFtCi0gICAqIGNhcHMgd2hlbiB3ZSBnZXQgdG8gc2VlIHRoZSBmaXJzdCBmcmFtZS4gKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHZfcGF5X25lZ290aWF0ZSAoR3N0UlRQRFZQYXkgKiBydHBkdnBheSwgZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSkKLXsKLSAgY29uc3QgZ2NoYXIgKmVuY29kZSwgKm1lZGlhOwotICBnYm9vbGVhbiBhdWRpb19idW5kbGVkLCByZXM7Ci0KLSAgaWYgKChkYXRhWzNdICYgMHg4MCkgPT0gMCkgeyAgLyogRFNGIGZsYWcgKi8KLSAgICAvKiBpdCdzIGFuIE5UU0MgZm9ybWF0ICovCi0gICAgaWYgKChkYXRhWzgwICogNSArIDQ4ICsgM10gJiAweDQpICYmIChkYXRhWzgwICogNSArIDQ4XSA9PSAweDYwKSkgeyAvKiA0OjI6MiBzYW1wbGluZyAqLwotICAgICAgLyogTlRTQyA1ME1icHMgKi8KLSAgICAgIGVuY29kZSA9ICIzMTRNLTI1LzUyNS02MCI7Ci0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIDQ6MToxIHNhbXBsaW5nICovCi0gICAgICAvKiBOVFNDIDI1TWJwcyAqLwotICAgICAgZW5jb2RlID0gIlNELVZDUi81MjUtNjAiOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBpdCdzIGEgUEFMIGZvcm1hdCAqLwotICAgIGlmICgoZGF0YVs4MCAqIDUgKyA0OCArIDNdICYgMHg0KSAmJiAoZGF0YVs4MCAqIDUgKyA0OF0gPT0gMHg2MCkpIHsgLyogNDoyOjIgc2FtcGxpbmcgKi8KLSAgICAgIC8qIFBBTCA1ME1icHMgKi8KLSAgICAgIGVuY29kZSA9ICIzMTRNLTUwLzYyNS01MCI7Ci0gICAgfSBlbHNlIGlmICgoZGF0YVs1XSAmIDB4MDcpID09IDApIHsgLyogQVBUIGZsYWcgKi8KLSAgICAgIC8qIFBBTCAyNU1icHMgNDoyOjAgKi8KLSAgICAgIGVuY29kZSA9ICJTRC1WQ1IvNjI1LTUwIjsKLSAgICB9IGVsc2UKLSAgICAgIC8qIFBBTCAyNU1icHMgNDoxOjEgKi8KLSAgICAgIGVuY29kZSA9ICIzMTRNLTI1LzYyNS01MCI7Ci0gIH0KLQotICBtZWRpYSA9ICJ2aWRlbyI7Ci0gIGF1ZGlvX2J1bmRsZWQgPSBGQUxTRTsKLQotICBzd2l0Y2ggKHJ0cGR2cGF5LT5tb2RlKSB7Ci0gICAgY2FzZSBHU1RfRFZfUEFZX01PREVfQVVESU86Ci0gICAgICBtZWRpYSA9ICJhdWRpbyI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9EVl9QQVlfTU9ERV9CVU5ETEVEOgotICAgICAgYXVkaW9fYnVuZGxlZCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBkdnBheSksIG1lZGlhLAotICAgICAgVFJVRSwgIkRWIiwgOTAwMDApOwotCi0gIGlmIChhdWRpb19idW5kbGVkKSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBkdnBheSksCi0gICAgICAgICJlbmNvZGUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGUsCi0gICAgICAgICJhdWRpbyIsIEdfVFlQRV9TVFJJTkcsICJidW5kbGVkIiwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBkdnBheSksCi0gICAgICAgICJlbmNvZGUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGUsIE5VTEwpOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaW5jbHVkZV9kaWYgKEdzdFJUUERWUGF5ICogcnRwZHZwYXksIGd1aW50OCAqIGRhdGEpCi17Ci0gIGdpbnQgYmxvY2tfdHlwZTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGJsb2NrX3R5cGUgPSBkYXRhWzBdID4+IDU7Ci0KLSAgc3dpdGNoIChibG9ja190eXBlKSB7Ci0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogSGVhZGVyIGJsb2NrICovCi0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogU3ViY29kZSBibG9jayAqLwotICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIFZBVVggYmxvY2sgKi8KLSAgICAgIC8qIGFsd2F5cyBpbmNsdWRlIHRoZXNlIGJsb2NrcyAqLwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIEF1ZGlvIGJsb2NrICovCi0gICAgICAvKiBuZXZlciBpbmNsdWRlIGF1ZGlvIGlmIHdlIGFyZSBkb2luZyB2aWRlbyBvbmx5ICovCi0gICAgICBpZiAocnRwZHZwYXktPm1vZGUgPT0gR1NUX0RWX1BBWV9NT0RFX1ZJREVPKQotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgIC8qIFZpZGVvIGJsb2NrICovCi0gICAgICAvKiBuZXZlciBpbmNsdWRlIHZpZGVvIGlmIHdlIGFyZSBkb2luZyBhdWRpbyBvbmx5ICovCi0gICAgICBpZiAocnRwZHZwYXktPm1vZGUgPT0gR1NUX0RWX1BBWV9NT0RFX0FVRElPKQotICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyBib2d1cywganVzdCBpZ25vcmUgKi8KLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogR2V0IGEgRFYgZnJhbWUsIGNob3AgaXQgdXAgaW4gcGllY2VzLCBhbmQgcHVzaCB0aGUgcGllY2VzIHRvIHRoZSBSVFAgbGF5ZXIuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2R2X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UlRQRFZQYXkgKnJ0cGR2cGF5OwotICBndWludCBtYXhfcGF5bG9hZF9zaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2ludCBoZHJsZW47Ci0gIGdzaXplIHNpemU7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ3VpbnQgZmlsbGVkOwotICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMLCB9OwotCi0gIHJ0cGR2cGF5ID0gR1NUX1JUUF9EVl9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBoZHJsZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX2hlYWRlcl9sZW4gKDApOwotICAvKiBEViBmcmFtZXMgYXJlIG1hZGUgdXAgZnJvbSBhIGJ1bmNoIG9mIERJRiBibG9ja3MuIERJRiBibG9ja3MgYXJlIDgwIGJ5dGVzCi0gICAqIGVhY2gsIGFuZCB3ZSBzaG91bGQgcHV0IGFuIGludGVncmFsIG51bWJlciBvZiB0aGVtIGluIGVhY2ggUlRQIHBhY2tldC4KLSAgICogVGhlcmVmb3JlLCB3ZSByb3VuZCB0aGUgYXZhaWxhYmxlIHJvb20gZG93biB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiA4MC4KLSAgICoKLSAgICogVGhlIGF2YWlsYWJsZSByb29tIGlzIGp1c3QgdGhlIHBhY2tldCBNVFUsIG1pbnVzIHRoZSBSVFAgaGVhZGVyIGxlbmd0aC4gKi8KLSAgbWF4X3BheWxvYWRfc2l6ZSA9ICgoR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBkdnBheSkgLSBoZHJsZW4pIC8gODApICogODA7Ci0KLSAgLyogVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHRvIHRyYW5zbWl0LiAqLwotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCkpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwZHZwYXksIENPUkUsIEZBSUxFRCwKLSAgICAgICAgKE5VTEwpLCAoIkZhaWxlZCB0byBtYXAgYnVmZmVyIikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgc2l6ZSA9IG1hcC5zaXplOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGR2cGF5LAotICAgICAgIkRWIFJUUCBwYXlsb2FkZXIgZ290IGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgIiBieXRlcywgc3BsaXR0aW5nIGluICV1IGJ5dGUgIiAicGF5bG9hZCBmcmFnbWVudHMsIGF0IHRpbWUgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgc2l6ZSwgbWF4X3BheWxvYWRfc2l6ZSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfUFRTIChidWZmZXIpKSk7Ci0KLSAgaWYgKCFydHBkdnBheS0+bmVnb3RpYXRlZCkgewotICAgIGdzdF9kdl9wYXlfbmVnb3RpYXRlIChydHBkdnBheSwgZGF0YSwgc2l6ZSk7Ci0gICAgLyogaWYgd2UgaGF2ZSBub3QgeWV0IHNjYW5uZWQgdGhlIHN0cmVhbSBmb3IgaXRzIHR5cGUsIGRvIHNvIG5vdyAqLwotICAgIHJ0cGR2cGF5LT5uZWdvdGlhdGVkID0gVFJVRTsKLSAgfQotCi0gIG91dGJ1ZiA9IE5VTEw7Ci0gIGRlc3QgPSBOVUxMOwotICBmaWxsZWQgPSAwOwotCi0gIC8qIHdoaWxlIHdlIGhhdmUgYSBjb21wbGV0ZSBESUYgY2h1bmtzIGxlZnQgKi8KLSAgd2hpbGUgKHNpemUgPj0gODApIHsKLSAgICAvKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIsIHNldCB0aGUgdGltZXN0YW1wICovCi0gICAgaWYgKG91dGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKG1heF9wYXlsb2FkX3NpemUsIDAsIDApOwotICAgICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICAgICAgaWYgKCFnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCkpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHJ0cGR2cGF5LCBDT1JFLCBGQUlMRUQsCi0gICAgICAgICAgICAoTlVMTCksICgiRmFpbGVkIHRvIG1hcCBSVFAgYnVmZmVyIikpOwotICAgICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLSAgICAgIGRlc3QgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gICAgICBmaWxsZWQgPSAwOwotICAgIH0KLQotICAgIC8qIGluc3BlY3QgdGhlIERJRiBjaHVuaywgaWYgd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIGl0LCBza2lwIHRvIHRoZSBuZXh0IG9uZS4gKi8KLSAgICBpZiAoaW5jbHVkZV9kaWYgKHJ0cGR2cGF5LCBkYXRhKSkgewotICAgICAgLyogY29weSBkYXRhIGluIHBhY2tldCAqLwotICAgICAgbWVtY3B5IChkZXN0LCBkYXRhLCA4MCk7Ci0KLSAgICAgIGRlc3QgKz0gODA7Ci0gICAgICBmaWxsZWQgKz0gODA7Ci0gICAgfQotCi0gICAgLyogZ28gdG8gbmV4dCBkaWYgY2h1bmsgKi8KLSAgICBzaXplIC09IDgwOwotICAgIGRhdGEgKz0gODA7Ci0KLSAgICAvKiBwdXNoIG91dCB0aGUgYnVmZmVyIGlmIHRoZSBuZXh0IG9uZSB3b3VsZCBleGNlZWQgdGhlIG1heCBwYWNrZXQgc2l6ZSBvcgotICAgICAqIHdoZW4gd2UgYXJlIHB1c2hpbmcgdGhlIGxhc3QgcGFja2V0ICovCi0gICAgaWYgKGZpbGxlZCArIDgwID4gbWF4X3BheWxvYWRfc2l6ZSB8fCBzaXplIDwgODApIHsKLSAgICAgIGlmIChzaXplIDwgMTYwKSB7Ci0gICAgICAgIGd1aW50IGhsZW47Ci0KLSAgICAgICAgLyogc2V0IG1hcmtlciAqLwotICAgICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLQotICAgICAgICAvKiBzaHJpbmsgYnVmZmVyIHRvIGxhc3QgcGFja2V0ICovCi0gICAgICAgIGhsZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfaGVhZGVyX2xlbiAoJnJ0cCk7Ci0gICAgICAgIGdzdF9ydHBfYnVmZmVyX3NldF9wYWNrZXRfbGVuICgmcnRwLCBobGVuICsgZmlsbGVkKTsKLSAgICAgIH0KLQotICAgICAgLyogUHVzaCBvdXQgdGhlIGNyZWF0ZWQgcGllY2UsIGFuZCBjaGVjayBmb3IgZXJyb3JzLiAqLwotICAgICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VwYXlsb2FkKSwgb3V0YnVmLCBidWZmZXIsIDApOwotICAgICAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoYmFzZXBheWxvYWQsIG91dGJ1Zik7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBicmVhazsKLQotICAgICAgb3V0YnVmID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotYmVhY2g6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfZHZfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwZHZwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfRFZfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZHZwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwZHZwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMyNTBhOC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGR2cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBGYXJzaWdodAotICogQ29weXJpZ2h0IChDKSAyMDA2IE1hcmNlbCBNb3JlYXV4IDxtYXJjZWxtQHNwYWNlbGFicy5ubD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RSVFBEVlBBWV9IX18KLSNkZWZpbmUgX19HU1RSVFBEVlBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUERWUGF5IEdzdFJUUERWUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUERWUGF5Q2xhc3MgR3N0UlRQRFZQYXlDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfRFZfUEFZIFwKLSAgKGdzdF9ydHBfZHZfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfRFZfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0RWX1BBWSxHc3RSVFBEVlBheSkpCi0jZGVmaW5lIEdTVF9SVFBfRFZfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9EVl9QQVksR3N0UlRQRFZQYXkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0RWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9EVl9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0RWX1BBWV9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0RWX1BBWSkpCi0KLXR5cGVkZWYgZW51bQotewotICBHU1RfRFZfUEFZX01PREVfVklERU8sCi0gIEdTVF9EVl9QQVlfTU9ERV9CVU5ETEVELAotICBHU1RfRFZfUEFZX01PREVfQVVESU8KLX0gR3N0RFZQYXlNb2RlOwotCi1zdHJ1Y3QgX0dzdFJUUERWUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgZ2Jvb2xlYW4gbmVnb3RpYXRlZDsKLSAgR3N0RFZQYXlNb2RlIG1vZGU7Ci19OwotCi1zdHJ1Y3QgX0dzdFJUUERWUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2R2X3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfZHZfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RSVFBEVlBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDYyNTFlLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZzcyMmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBnNzIyZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBjaGFubmVscy5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGc3MjJkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwZzcyMmRlcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nNzIyX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vRzcyMiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZzcyMl9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgIC8qICJjaGFubmVscyA9IChpbnQpIFsxLCBNQVhdIiAgKi8KLSAgICAgICAgLyogImNoYW5uZWwtb3JkZXIgPSAoc3RyaW5nKSBBTlkiICovCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJHNzIyXCI7IgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRzcyMl9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0iCi0gICAgICAgIC8qICJjaGFubmVscyA9IChpbnQpIFsxLCBNQVhdIiAqLwotICAgICAgICAvKiAiZW1waGFzaXMgPSAoc3RyaW5nKSBBTlkiICovCi0gICAgICAgIC8qICJjaGFubmVsLW9yZGVyID0gKHN0cmluZykgQU5ZIiAqLwotICAgICkKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfZzcyMl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBHNzIyRGVwYXksIGdzdF9ydHBfZzcyMl9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nNzIyX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9nNzIyX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZzcyMl9kZXBheV9jbGFzc19pbml0IChHc3RSdHBHNzIyRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZzcyMmRlcGF5X2RlYnVnLCAicnRwZzcyMmRlcGF5IiwgMCwKLSAgICAgICJHNzIyIFJUUCBEZXBheWxvYWRlciIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2c3MjJfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9nNzIyX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIGF1ZGlvIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBHNzIyIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2c3MjJfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9nNzIyX2RlcGF5X3Byb2Nlc3M7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjJfZGVwYXlfaW5pdCAoR3N0UnRwRzcyMkRlcGF5ICogcnRwZzcyMmRlcGF5KQotewotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3J0cF9nNzIyX2RlcGF5X3BhcnNlX2ludCAoR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBjb25zdCBnY2hhciAqIGZpZWxkLAotICAgIGdpbnQgZGVmKQotewotICBjb25zdCBnY2hhciAqc3RyOwotICBnaW50IHJlczsKLQotICBpZiAoKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCBmaWVsZCkpKQotICAgIHJldHVybiBhdG9pIChzdHIpOwotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgZmllbGQsICZyZXMpKQotICAgIHJldHVybiByZXM7Ci0KLSAgcmV0dXJuIGRlZjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2c3MjJfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RSdHBHNzIyRGVwYXkgKnJ0cGc3MjJkZXBheTsKLSAgZ2ludCBjbG9ja19yYXRlLCBwYXlsb2FkLCBzYW1wbGVyYXRlOwotICBnaW50IGNoYW5uZWxzOwotICBHc3RDYXBzICpzcmNjYXBzOwotICBnYm9vbGVhbiByZXM7Ci0jaWYgMAotICBjb25zdCBnY2hhciAqY2hhbm5lbF9vcmRlcjsKLSAgY29uc3QgR3N0UlRQQ2hhbm5lbE9yZGVyICpvcmRlcjsKLSNlbmRpZgotCi0gIHJ0cGc3MjJkZXBheSA9IEdTVF9SVFBfRzcyMl9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBwYXlsb2FkID0gOTY7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkKTsKLSAgc3dpdGNoIChwYXlsb2FkKSB7Ci0gICAgY2FzZSBHU1RfUlRQX1BBWUxPQURfRzcyMjoKLSAgICAgIGNoYW5uZWxzID0gMTsKLSAgICAgIGNsb2NrX3JhdGUgPSA4MDAwOwotICAgICAgc2FtcGxlcmF0ZSA9IDE2MDAwOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIG5vIGZpeGVkIG1hcHBpbmcsIHdlIG5lZWQgY2xvY2stcmF0ZSAqLwotICAgICAgY2hhbm5lbHMgPSAwOwotICAgICAgY2xvY2tfcmF0ZSA9IDA7Ci0gICAgICBzYW1wbGVyYXRlID0gMDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogY2FwcyBjYW4gb3ZlcndyaXRlIGRlZmF1bHRzICovCi0gIGNsb2NrX3JhdGUgPQotICAgICAgZ3N0X3J0cF9nNzIyX2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsIGNsb2NrX3JhdGUpOwotICBpZiAoY2xvY2tfcmF0ZSA9PSAwKQotICAgIGdvdG8gbm9fY2xvY2tyYXRlOwotCi0gIGlmIChjbG9ja19yYXRlID09IDgwMDApCi0gICAgc2FtcGxlcmF0ZSA9IDE2MDAwOwotCi0gIGlmIChzYW1wbGVyYXRlID09IDApCi0gICAgc2FtcGxlcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgY2hhbm5lbHMgPQotICAgICAgZ3N0X3J0cF9nNzIyX2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiZW5jb2RpbmctcGFyYW1zIiwgY2hhbm5lbHMpOwotICBpZiAoY2hhbm5lbHMgPT0gMCkgewotICAgIGNoYW5uZWxzID0gZ3N0X3J0cF9nNzIyX2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiY2hhbm5lbHMiLCBjaGFubmVscyk7Ci0gICAgaWYgKGNoYW5uZWxzID09IDApIHsKLSAgICAgIC8qIGNoYW5uZWxzIGRlZmF1bHRzIHRvIDEgb3RoZXJ3aXNlICovCi0gICAgICBjaGFubmVscyA9IDE7Ci0gICAgfQotICB9Ci0KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLSAgcnRwZzcyMmRlcGF5LT5yYXRlID0gc2FtcGxlcmF0ZTsKLSAgcnRwZzcyMmRlcGF5LT5jaGFubmVscyA9IGNoYW5uZWxzOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vRzcyMiIsCi0gICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIHNhbXBsZXJhdGUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLCBOVUxMKTsKLQotICAvKiBGSVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIGNoYW5uZWwgb3JkZXIgKi8KLSNpZiAwCi0gIC8qIGFkZCBjaGFubmVsIHBvc2l0aW9ucyAqLwotICBjaGFubmVsX29yZGVyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJjaGFubmVsLW9yZGVyIik7Ci0KLSAgb3JkZXIgPSBnc3RfcnRwX2NoYW5uZWxzX2dldF9ieV9vcmRlciAoY2hhbm5lbHMsIGNoYW5uZWxfb3JkZXIpOwotICBpZiAob3JkZXIpIHsKLSAgICBnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRpb25zIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNjYXBzLCAwKSwKLSAgICAgICAgb3JkZXItPnBvcyk7Ci0gIH0gZWxzZSB7Ci0gICAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKnBvczsKLQotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGc3MjJkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJVbmtub3duIGNoYW5uZWwgb3JkZXIgJyVzJyBmb3IgJWQgY2hhbm5lbHMiLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChjaGFubmVsX29yZGVyKSwgY2hhbm5lbHMpKTsKLSAgICAvKiBjcmVhdGUgZGVmYXVsdCBOT05FIGxheW91dCAqLwotICAgIHBvcyA9IGdzdF9ydHBfY2hhbm5lbHNfY3JlYXRlX2RlZmF1bHQgKGNoYW5uZWxzKTsKLSAgICBnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRpb25zIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNjYXBzLCAwKSwgcG9zKTsKLSAgICBnX2ZyZWUgKHBvcyk7Ci0gIH0KLSNlbmRpZgotCi0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19jbG9ja3JhdGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkZXBheWxvYWQsICJubyBjbG9jay1yYXRlIHNwZWNpZmllZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfZzcyMl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEc3MjJEZXBheSAqcnRwZzcyMmRlcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ2ludCBwYXlsb2FkX2xlbjsKLSAgZ2Jvb2xlYW4gbWFya2VyOwotCi0gIHJ0cGc3MjJkZXBheSA9IEdTVF9SVFBfRzcyMl9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBpZiAocGF5bG9hZF9sZW4gPD0gMCkKLSAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBnNzIyZGVwYXksICJnb3QgcGF5bG9hZCBvZiAlZCBieXRlcyIsIHBheWxvYWRfbGVuKTsKLQotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgKHJ0cCk7Ci0gIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCk7Ci0KLSAgaWYgKG1hcmtlciAmJiBvdXRidWYpIHsKLSAgICAvKiBtYXJrIHRhbGsgc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBnNzIyZGVwYXkpLCBvdXRidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotZW1wdHlfcGFja2V0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZzcyMmRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJFbXB0eSBQYXlsb2FkLiIpLCAoTlVMTCkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2c3MjJfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBnNzIyZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfRzcyMl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBnNzIyZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI2ZmZhMC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjJkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0c3MjJfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9HNzIyX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qIFN0YW5kYXJkIG1hY3JvcyBmb3IgZGVmaW5pbmcgdHlwZXMgZm9yIHRoaXMgZWxlbWVudC4gICovCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9HNzIyX0RFUEFZIFwKLSAgKGdzdF9ydHBfZzcyMl9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0c3MjJfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfRzcyMl9ERVBBWSxHc3RSdHBHNzIyRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX0c3MjJfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0c3MjJfREVQQVksR3N0UnRwRzcyMkRlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjJfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfRzcyMl9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfRzcyMl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRzcyMl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHNzIyRGVwYXkgR3N0UnRwRzcyMkRlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEc3MjJEZXBheUNsYXNzIEdzdFJ0cEc3MjJEZXBheUNsYXNzOwotCi0vKiBEZWZpbml0aW9uIG9mIHN0cnVjdHVyZSBzdG9yaW5nIGRhdGEgZm9yIHRoaXMgZWxlbWVudC4gKi8KLXN0cnVjdCBfR3N0UnRwRzcyMkRlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIGd1aW50IHJhdGU7Ci0gIGd1aW50IGNoYW5uZWxzOwotfTsKLQotLyogU3RhbmRhcmQgZGVmaW5pdGlvbiBkZWZpbmluZyBhIGNsYXNzIGZvciB0aGlzIGVsZW1lbnQuICovCi1zdHJ1Y3QgX0dzdFJ0cEc3MjJEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2c3MjJfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2c3MjJfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfRzcyMl9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyMnBheS5jIGIvZ3N0L3J0cC9nc3RydHBnNzIycGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZmU4OGQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBnNzIycGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwZzcyMnBheS5oIgotI2luY2x1ZGUgImdzdHJ0cGNoYW5uZWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGc3MjJwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGc3MjJwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2c3MjJfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vRzcyMiwgIiAicmF0ZSA9IChpbnQpIDE2MDAwLCAiICJjaGFubmVscyA9IChpbnQpIDEiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2c3MjJfcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiRzcyMlwiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRzcyMl9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDA7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiRzcyMlwiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAiKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2c3MjJfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfZzcyMl9wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBydHBwYXlsb2FkLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9nNzIyX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBHNzIyUGF5LCBnc3RfcnRwX2c3MjJfcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzIyX3BheV9jbGFzc19pbml0IChHc3RSdHBHNzIyUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZzcyMnBheV9kZWJ1ZywgInJ0cGc3MjJwYXkiLCAwLAotICAgICAgIkc3MjIgUlRQIFBheWxvYWRlciIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyMl9wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9nNzIyX3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBhdWRpbyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZSBSYXcgYXVkaW8gaW50byBSVFAgcGFja2V0cyAoUkZDIDM1NTEpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfZzcyMl9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmdldF9jYXBzID0gZ3N0X3J0cF9nNzIyX3BheV9nZXRjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzIyX3BheV9pbml0IChHc3RSdHBHNzIyUGF5ICogcnRwZzcyMnBheSkKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZCAqcnRwYmFzZWF1ZGlvcGF5bG9hZDsKLQotICBydHBiYXNlYXVkaW9wYXlsb2FkID0gR1NUX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQgKHJ0cGc3MjJwYXkpOwotCi0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBnNzIycGF5KS0+cHQgPSBHU1RfUlRQX1BBWUxPQURfRzcyMjsKLQotICAvKiB0ZWxsIHJ0cGJhc2VhdWRpb3BheWxvYWQgdGhhdCB0aGlzIGlzIGEgc2FtcGxlIGJhc2VkIGNvZGVjICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGVfYmFzZWQgKHJ0cGJhc2VhdWRpb3BheWxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZzcyMl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJ0cEc3MjJQYXkgKnJ0cGc3MjJwYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IHJhdGUsIGNoYW5uZWxzLCBjbG9ja19yYXRlOwotICBnYm9vbGVhbiByZXM7Ci0gIGdjaGFyICpwYXJhbXM7Ci0jaWYgMAotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqcG9zOwotICBjb25zdCBHc3RSVFBDaGFubmVsT3JkZXIgKm9yZGVyOwotI2VuZGlmCi0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgKnJ0cGJhc2VhdWRpb3BheWxvYWQ7Ci0KLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChiYXNlcGF5bG9hZCk7Ci0gIHJ0cGc3MjJwYXkgPSBHU1RfUlRQX0c3MjJfUEFZIChiYXNlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgLyogZmlyc3QgcGFyc2UgaW5wdXQgY2FwcyAqLwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicmF0ZSIsICZyYXRlKSkKLSAgICBnb3RvIG5vX3JhdGU7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgJmNoYW5uZWxzKSkKLSAgICBnb3RvIG5vX2NoYW5uZWxzOwotCi0gIC8qIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCB0aGUgY2hhbm5lbCBwb3NpdGlvbnMgKi8KLSNpZiAwCi0gIC8qIGdldCB0aGUgY2hhbm5lbCBvcmRlciAqLwotICBwb3MgPSBnc3RfYXVkaW9fZ2V0X2NoYW5uZWxfcG9zaXRpb25zIChzdHJ1Y3R1cmUpOwotICBpZiAocG9zKQotICAgIG9yZGVyID0gZ3N0X3J0cF9jaGFubmVsc19nZXRfYnlfcG9zIChjaGFubmVscywgcG9zKTsKLSAgZWxzZQotICAgIG9yZGVyID0gTlVMTDsKLSNlbmRpZgotCi0gIC8qIENsb2NrIHJhdGUgaXMgYWx3YXlzIDgwMDAgSHogZm9yIEc3MjIgYWNjb3JkaW5nIHRvCi0gICAqIFJGQyAzNTUxIGFsdGhvdWdoIHRoZSBzYW1wbGluZyByYXRlIGlzIDE2MDAwIEh6ICovCi0gIGNsb2NrX3JhdGUgPSA4MDAwOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChiYXNlcGF5bG9hZCwgImF1ZGlvIiwKLSAgICAgIGJhc2VwYXlsb2FkLT5wdCAhPSBHU1RfUlRQX1BBWUxPQURfRzcyMiwgIkc3MjIiLCBjbG9ja19yYXRlKTsKLSAgcGFyYW1zID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBjaGFubmVscyk7Ci0KLSNpZiAwCi0gIGlmICghb3JkZXIgJiYgY2hhbm5lbHMgPiAyKSB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZzcyMnBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJVbmtub3duIGNoYW5uZWwgb3JkZXIgZm9yICVkIGNoYW5uZWxzIiwgY2hhbm5lbHMpKTsKLSAgfQotCi0gIGlmIChvcmRlciAmJiBvcmRlci0+bmFtZSkgewotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwKLSAgICAgICAgImVuY29kaW5nLXBhcmFtcyIsIEdfVFlQRV9TVFJJTkcsIHBhcmFtcywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwKLSAgICAgICAgY2hhbm5lbHMsICJjaGFubmVsLW9yZGVyIiwgR19UWVBFX1NUUklORywgb3JkZXItPm5hbWUsIE5VTEwpOwotICB9IGVsc2UgewotI2VuZGlmCi0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKGJhc2VwYXlsb2FkLAotICAgICAgICAiZW5jb2RpbmctcGFyYW1zIiwgR19UWVBFX1NUUklORywgcGFyYW1zLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULAotICAgICAgICBjaGFubmVscywgTlVMTCk7Ci0jaWYgMAotICB9Ci0jZW5kaWYKLQotICBnX2ZyZWUgKHBhcmFtcyk7Ci0jaWYgMAotICBnX2ZyZWUgKHBvcyk7Ci0jZW5kaWYKLQotICBydHBnNzIycGF5LT5yYXRlID0gcmF0ZTsKLSAgcnRwZzcyMnBheS0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLQotICAvKiBiaXRzLXBlci1zYW1wbGUgaXMgNCAqIGNoYW5uZWxzIGZvciBHNzIyLCBidXQgYXMgdGhlIFJUUCBjbG9jayBydW5zIGF0Ci0gICAqIGhhbGYgc3BlZWQgKDggaW5zdGVhZCBvZiAxNiBraHopLCBwcmV0ZW5kIGl0J3MgOCBiaXRzIHBlciBzYW1wbGUKLSAgICogY2hhbm5lbHMuICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGViaXRzX29wdGlvbnMgKHJ0cGJhc2VhdWRpb3BheWxvYWQsCi0gICAgICA4ICogcnRwZzcyMnBheS0+Y2hhbm5lbHMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19yYXRlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZzcyMnBheSwgIm5vIHJhdGUgZ2l2ZW4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2NoYW5uZWxzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZzcyMnBheSwgIm5vIGNoYW5uZWxzIGdpdmVuIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfZzcyMl9wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBydHBwYXlsb2FkLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqb3RoZXJwYWRjYXBzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIG90aGVycGFkY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAocnRwcGF5bG9hZC0+c3JjcGFkKTsKLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChwYWQpOwotCi0gIGlmIChvdGhlcnBhZGNhcHMpIHsKLSAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcnBhZGNhcHMpKSB7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJyYXRlIiwgR19UWVBFX0lOVCwgMTYwMDAsIE5VTEwpOwotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJwYWRjYXBzKTsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0bXA7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBwYXlsb2FkLCAiSW50ZXJzZWN0ICUiIEdTVF9QVFJfRk9STUFUICIgYW5kIGZpbHRlciAlIgotICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgY2FwcywgZmlsdGVyKTsKLSAgICB0bXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBjYXBzID0gdG1wOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2c3MjJfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwZzcyMnBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9HNzIyX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGc3MjJwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwZzcyMnBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjM4Mjg2Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZzcyMnBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0c3MjJfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfRzcyMl9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfRzcyMl9QQVkgXAotICAoZ3N0X3J0cF9nNzIyX3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0c3MjJfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjJfUEFZLEdzdFJ0cEc3MjJQYXkpKQotI2RlZmluZSBHU1RfUlRQX0c3MjJfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HNzIyX1BBWSxHc3RSdHBHNzIyUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjJfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjJfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HNzIyX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRzcyMl9QQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwRzcyMlBheSBHc3RSdHBHNzIyUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEc3MjJQYXlDbGFzcyBHc3RSdHBHNzIyUGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwRzcyMlBheQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkIHBheWxvYWQ7Ci0KLSAgZ2ludCByYXRlOwotICBnaW50IGNoYW5uZWxzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBHNzIyUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfZzcyMl9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2c3MjJfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0c3MjJfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwZzcyM2RlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMWQ5YWUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHJ0cGc3MjNkZXBheS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBnNzIzZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGc3MjNkZXBheV9kZWJ1ZykKLQotCi0vKiByZWZlcmVuY2VzOgotICoKLSAqIFJGQyAzNTUxICg0LjUuMykKLSAqLwotCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wCi19OwotCi0vKiBpbnB1dCBpcyBhbiBSVFAgcGFja2V0Ci0gKgotICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nNzIzX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkc3MjNcIjsgIgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRzcyM19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2c3MjNfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9HNzIzLCAiICJjaGFubmVscyA9IChpbnQpIDEsIiAicmF0ZSA9IChpbnQpIDgwMDAiKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2c3MjNfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2c3MjNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotCi0jZGVmaW5lIGdzdF9ydHBfZzcyM19kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBHNzIzRGVwYXksIGdzdF9ydHBfZzcyM19kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzIzX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEc3MjNEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBnNzIzZGVwYXlfZGVidWcsICJydHBnNzIzZGVwYXkiLCAwLAotICAgICAgIkcuNzIzIFJUUCBEZXBheWxvYWRlciIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2c3MjNfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9nNzIzX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEcuNzIzIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBHLjcyMyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzU1MSkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9nNzIzX2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9nNzIzX2RlcGF5X3NldGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjNfZGVwYXlfaW5pdCAoR3N0UnRwRzcyM0RlcGF5ICogcnRwZzcyM2RlcGF5KQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkICpkZXBheWxvYWQ7Ci0KLSAgZGVwYXlsb2FkID0gR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwZzcyM2RlcGF5KTsKLQotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nNzIzX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0UnRwRzcyM0RlcGF5ICpydHBnNzIzZGVwYXk7Ci0gIGNvbnN0IGdjaGFyICpwYXJhbXM7Ci0gIGdpbnQgY2xvY2tfcmF0ZSwgY2hhbm5lbHM7Ci0gIGdib29sZWFuIHJldDsKLQotICBydHBnNzIzZGVwYXkgPSBHU1RfUlRQX0c3MjNfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCEocGFyYW1zID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJlbmNvZGluZy1wYXJhbXMiKSkpCi0gICAgY2hhbm5lbHMgPSAxOwotICBlbHNlIHsKLSAgICBjaGFubmVscyA9IGF0b2kgKHBhcmFtcyk7Ci0gIH0KLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gODAwMDsKLQotICBpZiAoY2hhbm5lbHMgIT0gMSkKLSAgICBnb3RvIHdyb25nX2NoYW5uZWxzOwotCi0gIGlmIChjbG9ja19yYXRlICE9IDgwMDApCi0gICAgZ290byB3cm9uZ19jbG9ja19yYXRlOwotCi0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgc3JjY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9HNzIzIiwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLCAicmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrX3JhdGUsIE5VTEwpOwotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfY2hhbm5lbHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnNzIzZGVwYXksICJleHBlY3RlZCAxIGNoYW5uZWwsIGdvdCAlZCIsIGNoYW5uZWxzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2Nsb2NrX3JhdGU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnNzIzZGVwYXksICJleHBlY3RlZCA4MDAwIGNsb2NrLXJhdGUsIGdvdCAlZCIsCi0gICAgICAgIGNsb2NrX3JhdGUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9nNzIzX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwRzcyM0RlcGF5ICpydHBnNzIzZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgZ2ludCBwYXlsb2FkX2xlbjsKLSAgZ2Jvb2xlYW4gbWFya2VyOwotCi0gIHJ0cGc3MjNkZXBheSA9IEdTVF9SVFBfRzcyM19ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICAvKiBBdCBsZWFzdCA0IGJ5dGVzICovCi0gIGlmIChwYXlsb2FkX2xlbiA8IDQpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cGc3MjNkZXBheSwgInBheWxvYWQgbGVuICVkIiwgcGF5bG9hZF9sZW4pOwotCi0gIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2J1ZmZlciAocnRwKTsKLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBpZiAobWFya2VyKSB7Ci0gICAgLyogbWFya2VyIGJpdCBzdGFydHMgdGFsa3NwdXJ0ICovCi0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChkZXBheWxvYWQsICJwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSk7Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGc3MjNkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJHNzIzIFJUUCBwYXlsb2FkIHRvbyBzbWFsbCAoJWQpIiwgcGF5bG9hZF9sZW4pKTsKLSAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gIH0KLWJhZF9wYWNrZXQ6Ci0gIHsKLSAgICAvKiBubyBmYXRhbCBlcnJvciAqLwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2c3MjNfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBnNzIzZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfRzcyM19ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBnNzIzZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5NDJiMy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjNkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9HNzIzX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfRzcyM19ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9HNzIzX0RFUEFZIFwKLSAgKGdzdF9ydHBfZzcyM19kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0c3MjNfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfRzcyM19ERVBBWSxHc3RSdHBHNzIzRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX0c3MjNfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0c3MjNfREVQQVksR3N0UnRwRzcyM0RlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjNfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfRzcyM19ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfRzcyM19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRzcyM19ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHNzIzRGVwYXkgR3N0UnRwRzcyM0RlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEc3MjNEZXBheUNsYXNzIEdzdFJ0cEc3MjNEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cEc3MjNEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwRzcyM0RlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfZzcyM19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfZzcyM19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9HNzIzX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGc3MjNwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxMjIxOC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjNwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBDb2xsYWJvcmEgTHRkCi0gKiAgQGF1dGhvcjogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBnNzIzcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotI2RlZmluZSBHNzIzX0ZSQU1FX0RVUkFUSU9OICgzMCAqIEdTVF9NU0VDT05EKQotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nNzIzX3BheV9zZXRfY2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfZzcyM19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKgotICAgIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2c3MjNfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vRzcyMywgIiAgICAgLyogYWNjb3JkaW5nIHRvIFJGQyAzNTUxICovCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgInJhdGUgPSAoaW50KSA4MDAwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nNzIzX3BheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9HNzIzX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiRzcyM1wiOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiRzcyM1wiIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2c3MjNfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfZzcyM19wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotI2RlZmluZSBnc3RfcnRwX2c3MjNfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJUUEc3MjNQYXksIGdzdF9ydHBfZzcyM19wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzIzX3BheV9jbGFzc19pbml0IChHc3RSVFBHNzIzUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKnBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2c3MjNfcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfZzcyM19wYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyM19wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyM19wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBHLjcyMyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYWNrZXRpemUgRy43MjMgYXVkaW8gaW50byBSVFAgcGFja2V0cyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfZzcyM19wYXlfc2V0X2NhcHM7Ci0gIHBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2c3MjNfcGF5X2hhbmRsZV9idWZmZXI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjNfcGF5X2luaXQgKEdzdFJUUEc3MjNQYXkgKiBwYXkpCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkICpwYXlsb2FkID0gR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHBheSk7Ci0KLSAgcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotCi0gIHBheWxvYWQtPnB0ID0gR1NUX1JUUF9QQVlMT0FEX0c3MjM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjNfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSVFBHNzIzUGF5ICpwYXk7Ci0KLSAgcGF5ID0gR1NUX1JUUF9HNzIzX1BBWSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocGF5LT5hZGFwdGVyKTsKLSAgcGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2c3MjNfcGF5X3NldF9jYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJhdWRpbyIsCi0gICAgICBwYXlsb2FkLT5wdCAhPSBHU1RfUlRQX1BBWUxPQURfRzcyMywgIkc3MjMiLCA4MDAwKTsKLSAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2c3MjNfcGF5X2ZsdXNoIChHc3RSVFBHNzIzUGF5ICogcGF5KQotewotICBHc3RCdWZmZXIgKm91dGJ1ZiwgKnBheWxvYWRfYnVmOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQgYXZhaWw7Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwgfTsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocGF5LT5hZGFwdGVyKTsKLQotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKDAsIDAsIDApOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLQotICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHBheS0+dGltZXN0YW1wOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gcGF5LT5kdXJhdGlvbjsKLQotICAvKiBjb3B5IEc3MjMgZGF0YSBhcyBwYXlsb2FkICovCi0gIHBheWxvYWRfYnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCAocGF5LT5hZGFwdGVyLCBhdmFpbCk7Ci0KLSAgcGF5LT50aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBwYXktPmR1cmF0aW9uID0gMDsKLQotICAvKiBzZXQgZGlzY29udCBhbmQgbWFya2VyICovCi0gIGlmIChwYXktPmRpc2NvbnQpIHsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLSAgICBwYXktPmRpc2NvbnQgPSBGQUxTRTsKLSAgfQotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChwYXkpLCBvdXRidWYsIHBheWxvYWRfYnVmLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLQotICBvdXRidWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAob3V0YnVmLCBwYXlsb2FkX2J1Zik7Ci0KLSAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHBheSksIG91dGJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogMDAgICAgaGlnaC1yYXRlIHNwZWVjaCAoNi4zIGtiL3MpICAgICAgICAgICAgMjQKLSAqIDAxICAgIGxvdy1yYXRlIHNwZWVjaCAgKDUuMyBrYi9zKSAgICAgICAgICAgIDIwCi0gKiAxMCAgICBTSUQgZnJhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotICogMTEgICAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICovCi1zdGF0aWMgY29uc3QgZ3VpbnQgc2l6ZV90YWJbNF0gPSB7Ci0gIDI0LCAyMCwgNCwgMAotfTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfZzcyM19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggSERSOwotICBHc3RSVFBHNzIzUGF5ICpwYXk7Ci0gIEdzdENsb2NrVGltZSBwYWNrZXRfZHVyLCB0aW1lc3RhbXA7Ci0gIGd1aW50IHBheWxvYWRfbGVuLCBwYWNrZXRfbGVuOwotCi0gIHBheSA9IEdTVF9SVFBfRzcyM19QQVkgKHBheWxvYWQpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWYpOwotCi0gIGlmIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKGJ1ZikpIHsKLSAgICAvKiBmbHVzaCBldmVyeXRoaW5nIG9uIGRpc2NvbnQgKi8KLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocGF5LT5hZGFwdGVyKTsKLSAgICBwYXktPnRpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgcGF5LT5kdXJhdGlvbiA9IDA7Ci0gICAgcGF5LT5kaXNjb250ID0gVFJVRTsKLSAgfQotCi0gIC8qIHNob3VsZCBiZSBvbmUgb2YgdGhlc2Ugc2l6ZXMgKi8KLSAgaWYgKG1hcC5zaXplICE9IDQgJiYgbWFwLnNpemUgIT0gMjAgJiYgbWFwLnNpemUgIT0gMjQpCi0gICAgZ290byBpbnZhbGlkX3NpemU7Ci0KLSAgLyogY2hlY2sgc2l6ZSBieSBsb29raW5nIGF0IHRoZSBoZWFkZXIgYml0cyAqLwotICBIRFIgPSBtYXAuZGF0YVswXSAmIDB4MzsKLSAgaWYgKHNpemVfdGFiW0hEUl0gIT0gbWFwLnNpemUpCi0gICAgZ290byB3cm9uZ19zaXplOwotCi0gIC8qIGNhbGN1bGF0ZSBwYWNrZXQgc2l6ZSBhbmQgZHVyYXRpb24gKi8KLSAgcGF5bG9hZF9sZW4gPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHBheS0+YWRhcHRlcikgKyBtYXAuc2l6ZTsKLSAgcGFja2V0X2R1ciA9IHBheS0+ZHVyYXRpb24gKyBHNzIzX0ZSQU1FX0RVUkFUSU9OOwotICBwYWNrZXRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYWNrZXRfbGVuIChwYXlsb2FkX2xlbiwgMCwgMCk7Ci0KLSAgaWYgKGdzdF9ydHBfYmFzZV9wYXlsb2FkX2lzX2ZpbGxlZCAocGF5bG9hZCwgcGFja2V0X2xlbiwgcGFja2V0X2R1cikpIHsKLSAgICAvKiBzaXplIG9yIGR1cmF0aW9uIHdvdWxkIG92ZXJmbG93IHRoZSBwYWNrZXQsIGZsdXNoIHRoZSBxdWV1ZWQgZGF0YSAqLwotICAgIHJldCA9IGdzdF9ydHBfZzcyM19wYXlfZmx1c2ggKHBheSk7Ci0gIH0KLQotICAvKiB1cGRhdGUgdGltZXN0YW1wLCB3ZSBrZWVwIHRoZSB0aW1lc3RhbXAgZm9yIHRoZSBmaXJzdCBwYWNrZXQgaW4gdGhlIGFkYXB0ZXIKLSAgICogYnV0IGFyZSBhYmxlIHRvIGNhbGN1bGF0ZSBpdCBmcm9tIG5leHQgcGFja2V0cy4gKi8KLSAgaWYgKHRpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmIHBheS0+dGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBpZiAodGltZXN0YW1wID4gcGF5LT5kdXJhdGlvbikKLSAgICAgIHBheS0+dGltZXN0YW1wID0gdGltZXN0YW1wIC0gcGF5LT5kdXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICBwYXktPnRpbWVzdGFtcCA9IDA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICAvKiBhZGQgcGFja2V0IHRvIHRoZSBxdWV1ZSAqLwotICBnc3RfYWRhcHRlcl9wdXNoIChwYXktPmFkYXB0ZXIsIGJ1Zik7Ci0gIHBheS0+ZHVyYXRpb24gPSBwYWNrZXRfZHVyOwotCi0gIC8qIGNoZWNrIGlmIHdlIGNhbiBmbHVzaCBub3cgKi8KLSAgaWYgKHBheS0+ZHVyYXRpb24gPj0gcGF5bG9hZC0+bWluX3B0aW1lKSB7Ci0gICAgcmV0ID0gZ3N0X3J0cF9nNzIzX3BheV9mbHVzaCAocGF5KTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogV0FSTklOR1MgKi8KLWludmFsaWRfc2l6ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHBheSwgU1RSRUFNLCBXUk9OR19UWVBFLAotICAgICAgICAoIkludmFsaWQgaW5wdXQgYnVmZmVyIHNpemUiKSwKLSAgICAgICAgKCJJbnB1dCBzaXplIHNob3VsZCBiZSA0LCAyMCBvciAyNCwgZ290ICUiIEdfR1NJWkVfRk9STUFULCBtYXAuc2l6ZSkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLXdyb25nX3NpemU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXksIFNUUkVBTSwgV1JPTkdfVFlQRSwKLSAgICAgICAgKCJXcm9uZyBpbnB1dCBidWZmZXIgc2l6ZSIpLAotICAgICAgICAoIkV4cGVjdGVkIGlucHV0IGJ1ZmZlciBzaXplICV1IGJ1dCBnb3QgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICAgICAgICBzaXplX3RhYltIRFJdLCBtYXAuc2l6ZSkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX2c3MjNfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UlRQRzcyM1BheSAqcGF5OwotCi0gIHBheSA9IEdTVF9SVFBfRzcyM19QQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocGF5LT5hZGFwdGVyKTsKLSAgICAgIHBheS0+dGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIHBheS0+ZHVyYXRpb24gPSAwOwotICAgICAgcGF5LT5kaXNjb250ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocGF5LT5hZGFwdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qUGx1Z2luIGluaXQgZnVuY3Rpb25zKi8KLWdib29sZWFuCi1nc3RfcnRwX2c3MjNfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwZzcyM3BheSIsIEdTVF9SQU5LX1NFQ09OREFSWSwKLSAgICAgIGdzdF9ydHBfZzcyM19wYXlfZ2V0X3R5cGUgKCkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBnNzIzcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc4MDc0MS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjNwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gTm9raWEgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IENvbGxhYm9yYSBMdGQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9HNzIzX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0c3MjNfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0c3MjNfUEFZIFwKLSAgKGdzdF9ydHBfZzcyM19wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9HNzIzX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9HNzIzX1BBWSxHc3RSVFBHNzIzUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9HNzIzX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRzcyM19QQVksR3N0UlRQRzcyM1BheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HNzIzX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9HNzIzX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfRzcyM19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0c3MjNfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUEc3MjNQYXkgR3N0UlRQRzcyM1BheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBHNzIzUGF5Q2xhc3MgR3N0UlRQRzcyM1BheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJUUEc3MjNQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICBHc3RBZGFwdGVyICAqYWRhcHRlcjsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBnYm9vbGVhbiBkaXNjb250OwotfTsKLQotc3RydWN0IF9Hc3RSVFBHNzIzUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2c3MjNfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9nNzIzX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9HNzIzX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmVkYjdlLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZzcyNmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgWmVlc2hhbiBBbGkgPHplZW5peEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXhpcyBDb21tdW5pY2F0aW9ucyA8ZGV2LWdzdHJlYW1lckBheGlzLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cGc3MjZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGc3MjZkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwZzcyNmRlcGF5X2RlYnVnKQotCi0jZGVmaW5lIERFRkFVTFRfQklUX1JBVEUgMzIwMDAKLSNkZWZpbmUgREVGQVVMVF9CTE9DS19BTElHTiA0Ci0jZGVmaW5lIFNBTVBMRV9SQVRFIDgwMDAKLSNkZWZpbmUgTEFZT1VUX0c3MjYgImc3MjYiCi0KLS8qIFJ0cEc3MjZEZXBheSBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9GT1JDRV9BQUwyCVRSVUUKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRk9SQ0VfQUFMMgotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZzcyNl9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSB7IFwiRzcyNlwiLCBcIkc3MjYtMTZcIiwgXCJHNzI2LTI0XCIsIFwiRzcyNi0zMlwiLCBcIkc3MjYtNDBcIiwgIgotICAgICAgICAiXCJBQUwyLUc3MjYtMTZcIiwgXCJBQUwyLUc3MjYtMjRcIiwgXCJBQUwyLUc3MjYtMzJcIiwgXCJBQUwyLUc3MjYtNDBcIiB9LCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMDsiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2c3MjZfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWFkcGNtLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJiaXRyYXRlID0gKGludCkgeyAxNjAwMCwgMjQwMDAsIDMyMDAwLCA0MDAwMCB9LCAiCi0gICAgICAgICJibG9ja19hbGlnbiA9IChpbnQpIHsgMiwgMywgNCwgNSB9LCAiICJsYXlvdXQgPSAoc3RyaW5nKSBcImc3MjZcIiIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9nNzI2X2RlcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfZzcyNl9kZXBheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfZzcyNl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nNzI2X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi0jZGVmaW5lIGdzdF9ydHBfZzcyNl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBHNzI2RGVwYXksIGdzdF9ydHBfZzcyNl9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzI2X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEc3MjZEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGc3MjZkZXBheV9kZWJ1ZywgInJ0cGc3MjZkZXBheSIsIDAsCi0gICAgICAiRy43MjYgUlRQIERlcGF5bG9hZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcnRwX2c3MjZfZGVwYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2c3MjZfZGVwYXlfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfRk9SQ0VfQUFMMiwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZm9yY2UtYWFsMiIsICJGb3JjZSBBQUwyIiwKLSAgICAgICAgICAiRm9yY2UgQUFMMiBkZWNvZGluZyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJhZCBwYXlsb2FkZXJzIiwKLSAgICAgICAgICBERUZBVUxUX0ZPUkNFX0FBTDIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyNl9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2c3MjZfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgRy43MjYgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIEcuNzI2IGF1ZGlvIGZyb20gUlRQIHBhY2tldHMiLAotICAgICAgIkF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXJAYXhpcy5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9nNzI2X2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9nNzI2X2RlcGF5X3NldGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjZfZGVwYXlfaW5pdCAoR3N0UnRwRzcyNkRlcGF5ICogcnRwRzcyNmRlcGF5KQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkICpkZXBheWxvYWQ7Ci0KLSAgZGVwYXlsb2FkID0gR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwRzcyNmRlcGF5KTsKLQotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSk7Ci0KLSAgcnRwRzcyNmRlcGF5LT5mb3JjZV9hYWwyID0gREVGQVVMVF9GT1JDRV9BQUwyOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZzcyNl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdib29sZWFuIHJldDsKLSAgZ2ludCBjbG9ja19yYXRlOwotICBjb25zdCBnY2hhciAqZW5jb2RpbmdfbmFtZTsKLSAgR3N0UnRwRzcyNkRlcGF5ICpkZXBheTsKLQotICBkZXBheSA9IEdTVF9SVFBfRzcyNl9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gODAwMDsgICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIGRlcGF5LT5hYWwyID0gRkFMU0U7Ci0gIGVuY29kaW5nX25hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKTsKLSAgaWYgKGVuY29kaW5nX25hbWUgPT0gTlVMTCB8fCBnX2FzY2lpX3N0cmNhc2VjbXAgKGVuY29kaW5nX25hbWUsICJHNzI2IikgPT0gMCkgewotICAgIGRlcGF5LT5iaXRyYXRlID0gREVGQVVMVF9CSVRfUkFURTsKLSAgICBkZXBheS0+YmxvY2tfYWxpZ24gPSBERUZBVUxUX0JMT0NLX0FMSUdOOwotICB9IGVsc2UgewotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4IChlbmNvZGluZ19uYW1lLCAiQUFMMi0iKSkgewotICAgICAgZGVwYXktPmFhbDIgPSBUUlVFOwotICAgICAgZW5jb2RpbmdfbmFtZSArPSA1OwotICAgIH0KLSAgICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChlbmNvZGluZ19uYW1lLCAiRzcyNi0xNiIpID09IDApIHsKLSAgICAgIGRlcGF5LT5iaXRyYXRlID0gMTYwMDA7Ci0gICAgICBkZXBheS0+YmxvY2tfYWxpZ24gPSAyOwotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChlbmNvZGluZ19uYW1lLCAiRzcyNi0yNCIpID09IDApIHsKLSAgICAgIGRlcGF5LT5iaXRyYXRlID0gMjQwMDA7Ci0gICAgICBkZXBheS0+YmxvY2tfYWxpZ24gPSAzOwotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChlbmNvZGluZ19uYW1lLCAiRzcyNi0zMiIpID09IDApIHsKLSAgICAgIGRlcGF5LT5iaXRyYXRlID0gMzIwMDA7Ci0gICAgICBkZXBheS0+YmxvY2tfYWxpZ24gPSA0OwotICAgIH0gZWxzZSBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChlbmNvZGluZ19uYW1lLCAiRzcyNi00MCIpID09IDApIHsKLSAgICAgIGRlcGF5LT5iaXRyYXRlID0gNDAwMDA7Ci0gICAgICBkZXBheS0+YmxvY2tfYWxpZ24gPSA1OwotICAgIH0gZWxzZQotICAgICAgZ290byB1bmtub3duX2VuY29kaW5nOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiUlRQIEcuNzI2IGRlcGF5bG9hZGVyLCBiaXRyYXRlIHNldCB0byAlZFxuIiwgZGVwYXktPmJpdHJhdGUpOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1hZHBjbSIsCi0gICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCBjbG9ja19yYXRlLAotICAgICAgImJpdHJhdGUiLCBHX1RZUEVfSU5ULCBkZXBheS0+Yml0cmF0ZSwKLSAgICAgICJibG9ja19hbGlnbiIsIEdfVFlQRV9JTlQsIGRlcGF5LT5ibG9ja19hbGlnbiwKLSAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCBMQVlPVVRfRzcyNiwgTlVMTCk7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5bG9hZCksIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXVua25vd25fZW5jb2Rpbmc6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoIkNvdWxkIG5vdCBkZXRlcm1pbmUgYml0cmF0ZSBmcm9tIGVuY29kaW5nLW5hbWUgKCVzKSIsCi0gICAgICAgIGVuY29kaW5nX25hbWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9nNzI2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwRzcyNkRlcGF5ICpkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0KLSAgZGVwYXkgPSBHU1RfUlRQX0c3MjZfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBHU1RfREVCVUcgKCJwcm9jZXNzIDogZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMsIG1hcmsgJWQgdHMgJXUgc2VxbiAlZCIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChydHAtPmJ1ZmZlciksIG1hcmtlciwKLSAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAgKHJ0cCksIGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKHJ0cCkpOwotCi0gIGlmIChkZXBheS0+YWFsMiB8fCBkZXBheS0+Zm9yY2VfYWFsMikgewotICAgIC8qIEFBTDIsIHdlIGNhbiBqdXN0IGNvcHkgdGhlIGJ5dGVzICovCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotICAgIGlmICghb3V0YnVmKQotICAgICAgZ290byBiYWRfbGVuOwotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgfSBlbHNlIHsKLSAgICBndWludDggKmluLCAqb3V0LCB0bXA7Ci0gICAgZ3VpbnQgbGVuOwotICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgaW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLSAgICBsZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgKHJ0cCk7Ci0gICAgaWYgKCFvdXRidWYpCi0gICAgICBnb3RvIGJhZF9sZW47Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotCi0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGRlcGF5KSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgb3V0ID0gbWFwLmRhdGE7Ci0KLSAgICAvKiB3ZSBuZWVkIHRvIHJlc2h1ZmZsZSB0aGUgYnl0ZXMsIGlucHV0IGlzIGFsd2F5cyBvZiB0aGUgZm9ybQotICAgICAqIEEgQiBDIEQgLi4uIHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGRlcGVuZGluZyBvbiB0aGUgYml0cmF0ZS4gKi8KLSAgICBzd2l0Y2ggKGRlcGF5LT5iaXRyYXRlKSB7Ci0gICAgICBjYXNlIDE2MDAwOgotICAgICAgewotICAgICAgICAvKiAgMCAgICAgICAgICAgICAgIAotICAgICAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0KLSAgICAgICAgICogfEQgRHxDIEN8QiBCfEEgQXwgLi4uCi0gICAgICAgICAqIHwwIDF8MCAxfDAgMXwwIDF8Ci0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLQotICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgICB0bXAgPSAqaW4rKzsKLSAgICAgICAgICAqb3V0KysgPSAoKHRtcCAmIDB4YzApID4+IDYpIHwKLSAgICAgICAgICAgICAgKCh0bXAgJiAweDMwKSA+PiAyKSB8ICgodG1wICYgMHgwYykgPDwgMikgfCAoKHRtcCAmIDB4MDMpIDw8IDYpOwotICAgICAgICAgIGxlbi0tOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSAyNDAwMDoKLSAgICAgIHsKLSAgICAgICAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyCi0gICAgICAgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMwotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLQotICAgICAgICAgKiB8QyBDfEIgQiBCfEEgQSBBfEZ8RSBFIEV8RCBEIER8Q3xIIEggSHxHIEcgR3xGIEZ8IC4uLgotICAgICAgICAgKiB8MSAyfDAgMSAyfDAgMSAyfDJ8MCAxIDJ8MCAxIDJ8MHwwIDEgMnwwIDEgMnwwIDF8Ci0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAobGVuID4gMikgewotICAgICAgICAgIHRtcCA9ICppbisrOwotICAgICAgICAgICpvdXQrKyA9ICgodG1wICYgMHhlMCkgPj4gNSkgfAotICAgICAgICAgICAgICAoKHRtcCAmIDB4MWMpIDw8IDEpIHwgKCh0bXAgJiAweDAzKSA8PCA2KTsKLSAgICAgICAgICB0bXAgPSAqaW4rKzsKLSAgICAgICAgICAqb3V0KysgPSAoKHRtcCAmIDB4ODApID4+IDcpIHwKLSAgICAgICAgICAgICAgKCh0bXAgJiAweDcwKSA+PiAzKSB8ICgodG1wICYgMHgwZSkgPDwgNCkgfCAoKHRtcCAmIDB4MDEpIDw8IDcpOwotICAgICAgICAgIHRtcCA9ICppbisrOwotICAgICAgICAgICpvdXQrKyA9ICgodG1wICYgMHhjMCkgPj4gNikgfAotICAgICAgICAgICAgICAoKHRtcCAmIDB4MzgpID4+IDEpIHwgKCh0bXAgJiAweDA3KSA8PCA1KTsKLSAgICAgICAgICBsZW4gLT0gMzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgMzIwMDA6Ci0gICAgICB7Ci0gICAgICAgIC8qICAwICAgICAgICAgICAgICAgICAgIDEKLSAgICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLQotICAgICAgICAgKiB8QiBCIEIgQnxBIEEgQSBBfEQgRCBEIER8QyBDIEMgQ3wgLi4uCi0gICAgICAgICAqIHwwIDEgMiAzfDAgMSAyIDN8MCAxIDIgM3wwIDEgMiAzfAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAobGVuID4gMCkgewotICAgICAgICAgIHRtcCA9ICppbisrOwotICAgICAgICAgICpvdXQrKyA9ICgodG1wICYgMHhmMCkgPj4gNCkgfCAoKHRtcCAmIDB4MGYpIDw8IDQpOwotICAgICAgICAgIGxlbi0tOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSA0MDAwMDoKLSAgICAgIHsKLSAgICAgICAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgICAgNAotICAgICAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0KLSAgICAgICAgICogfEIgQiBCfEEgQSBBIEEgQXxEfEMgQyBDIEMgQ3xCIEJ8RSBFIEUgRXxEIEQgRCBEfEcgR3xGIEYgRiBGIEZ8RXxIIEggSCBIIEh8RyBHIEd8Ci0gICAgICAgICAqIHwyIDMgNHwwIDEgMiAzIDR8NHwwIDEgMiAzIDR8MCAxfDEgMiAzIDR8MCAxIDIgM3wzIDR8MCAxIDIgMyA0fDB8MCAxIDIgMyA0fDAgMSAyfCAgIAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAobGVuID4gNCkgewotICAgICAgICAgIHRtcCA9ICppbisrOwotICAgICAgICAgICpvdXQrKyA9ICgodG1wICYgMHhmOCkgPj4gMykgfCAoKHRtcCAmIDB4MDcpIDw8IDUpOwotICAgICAgICAgIHRtcCA9ICppbisrOwotICAgICAgICAgICpvdXQrKyA9ICgodG1wICYgMHhjMCkgPj4gNikgfAotICAgICAgICAgICAgICAoKHRtcCAmIDB4M2UpIDw8IDEpIHwgKCh0bXAgJiAweDAxKSA8PCA3KTsKLSAgICAgICAgICB0bXAgPSAqaW4rKzsKLSAgICAgICAgICAqb3V0KysgPSAoKHRtcCAmIDB4ZjApID4+IDQpIHwgKCh0bXAgJiAweDBmKSA8PCA0KTsKLSAgICAgICAgICB0bXAgPSAqaW4rKzsKLSAgICAgICAgICAqb3V0KysgPSAoKHRtcCAmIDB4ODApID4+IDcpIHwKLSAgICAgICAgICAgICAgKCh0bXAgJiAweDdjKSA+PiAxKSB8ICgodG1wICYgMHgwMykgPDwgNik7Ci0gICAgICAgICAgdG1wID0gKmluKys7Ci0gICAgICAgICAgKm91dCsrID0gKCh0bXAgJiAweGUwKSA+PiA1KSB8ICgodG1wICYgMHgxZikgPDwgMyk7Ci0gICAgICAgICAgbGVuIC09IDU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0gIH0KLQotICBpZiAobWFya2VyKSB7Ci0gICAgLyogbWFyayBzdGFydCBvZiB0YWxrc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotYmFkX2xlbjoKLSAgewotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjZfZGVwYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cEc3MjZEZXBheSAqcnRwZzcyNmRlcGF5OwotCi0gIHJ0cGc3MjZkZXBheSA9IEdTVF9SVFBfRzcyNl9ERVBBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfRk9SQ0VfQUFMMjoKLSAgICAgIHJ0cGc3MjZkZXBheS0+Zm9yY2VfYWFsMiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZzcyNl9kZXBheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwRzcyNkRlcGF5ICpydHBnNzI2ZGVwYXk7Ci0KLSAgcnRwZzcyNmRlcGF5ID0gR1NUX1JUUF9HNzI2X0RFUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GT1JDRV9BQUwyOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0cGc3MjZkZXBheS0+Zm9yY2VfYWFsMik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2c3MjZfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBnNzI2ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfRzcyNl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBnNzI2ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5NWEzNy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjZkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIgPGRldi1nc3RyZWFtZXJAYXhpcy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9HNzI2X0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfRzcyNl9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwRzcyNkRlcGF5IEdzdFJ0cEc3MjZEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHNzI2RGVwYXlDbGFzcyBHc3RSdHBHNzI2RGVwYXlDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfRzcyNl9ERVBBWSBcCi0gIChnc3RfcnRwX2c3MjZfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9HNzI2X0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjZfREVQQVksR3N0UnRwRzcyNkRlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9HNzI2X0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HNzI2X0RFUEFZLEdzdFJ0cEc3MjZEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HNzI2X0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjZfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjZfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0c3MjZfREVQQVkpKQotCi1zdHJ1Y3QgX0dzdFJ0cEc3MjZEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLQotICBnYm9vbGVhbiBhYWwyOwotICBnYm9vbGVhbiBmb3JjZV9hYWwyOwotICBnaW50IGJpdHJhdGU7Ci0gIGd1aW50IGJsb2NrX2FsaWduOwotfTsKLQotc3RydWN0IF9Hc3RSdHBHNzI2RGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9nNzI2X2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9nNzI2X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9HNzI2X0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliZmI1ZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjZwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQyMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbiA8a2FpLnZlaG1hbmVuQG5va2lhLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IEF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXJAYXhpcy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwZzcyNnBheS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBnNzI2cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBnNzI2cGF5X2RlYnVnKQotCi0jZGVmaW5lIERFRkFVTFRfRk9SQ0VfQUFMMiAgICAgIFRSVUUKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRk9SQ0VfQUFMMgotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZzcyNl9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWFkcGNtLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJiaXRyYXRlID0gKGludCkgeyAxNjAwMCwgMjQwMDAsIDMyMDAwLCA0MDAwMCB9LCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBcImc3MjZcIiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZzcyNl9wYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIHsgXCJHNzI2LTE2XCIsIFwiRzcyNi0yNFwiLCBcIkc3MjYtMzJcIiwgXCJHNzI2LTQwXCIsICIKLSAgICAgICAgIiAgICBcIkFBTDItRzcyNi0xNlwiLCBcIkFBTDItRzcyNi0yNFwiLCBcIkFBTDItRzcyNi0zMlwiLCBcIkFBTDItRzcyNi00MFwiIH0gIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2c3MjZfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfZzcyNl9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nNzI2X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9nNzI2X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqCi0gICAgcGF5bG9hZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotI2RlZmluZSBnc3RfcnRwX2c3MjZfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEc3MjZQYXksIGdzdF9ydHBfZzcyNl9wYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjZfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEc3MjZQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfZzcyNl9wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2c3MjZfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0ZPUkNFX0FBTDIsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImZvcmNlLWFhbDIiLCAiRm9yY2UgQUFMMiIsCi0gICAgICAgICAgIkZvcmNlIEFBTDIgZW5jb2RpbmcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBiYWQgZGVwYXlsb2FkZXJzIiwKLSAgICAgICAgICBERUZBVUxUX0ZPUkNFX0FBTDIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyNl9wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyNl9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBHLjcyNiBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgRy43MjYgYXVkaW8gaW50byBhIFJUUCBwYWNrZXQiLAotICAgICAgIkF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXJAYXhpcy5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9nNzI2X3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfZzcyNl9wYXlfaGFuZGxlX2J1ZmZlcjsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZzcyNnBheV9kZWJ1ZywgInJ0cGc3MjZwYXkiLCAwLAotICAgICAgIkcuNzI2IFJUUCBQYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZzcyNl9wYXlfaW5pdCAoR3N0UnRwRzcyNlBheSAqIHJ0cGc3MjZwYXkpCi17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgKnJ0cGJhc2VhdWRpb3BheWxvYWQ7Ci0KLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChydHBnNzI2cGF5KTsKLQotICBHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwZzcyNnBheSktPmNsb2NrX3JhdGUgPSA4MDAwOwotCi0gIHJ0cGc3MjZwYXktPmZvcmNlX2FhbDIgPSBERUZBVUxUX0ZPUkNFX0FBTDI7Ci0KLSAgLyogc2FtcGxlIGJhc2VkIGNvZGVjICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGVfYmFzZWQgKHJ0cGJhc2VhdWRpb3BheWxvYWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZzcyNl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2NoYXIgKmVuY29kaW5nX25hbWU7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotICBHc3RSdHBHNzI2UGF5ICpwYXk7Ci0gIEdzdENhcHMgKnBlZXJjYXBzOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChwYXlsb2FkKTsKLSAgcGF5ID0gR1NUX1JUUF9HNzI2X1BBWSAocGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImJpdHJhdGUiLCAmcGF5LT5iaXRyYXRlKSkKLSAgICBwYXktPmJpdHJhdGUgPSAzMjAwMDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXlsb2FkLCAidXNpbmcgYml0cmF0ZSAlZCIsIHBheS0+Yml0cmF0ZSk7Ci0KLSAgcGF5LT5hYWwyID0gRkFMU0U7Ci0KLSAgLyogZmlyc3Qgc2VlIHdoYXQgd2UgY2FuIGRvIHdpdGggdGhlIGJpdHJhdGUgKi8KLSAgc3dpdGNoIChwYXktPmJpdHJhdGUpIHsKLSAgICBjYXNlIDE2MDAwOgotICAgICAgZW5jb2RpbmdfbmFtZSA9IGdfc3RyZHVwICgiRzcyNi0xNiIpOwotICAgICAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X3NhbXBsZWJpdHNfb3B0aW9ucyAocnRwYmFzZWF1ZGlvcGF5bG9hZCwKLSAgICAgICAgICAyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjQwMDA6Ci0gICAgICBlbmNvZGluZ19uYW1lID0gZ19zdHJkdXAgKCJHNzI2LTI0Iik7Ci0gICAgICBnc3RfcnRwX2Jhc2VfYXVkaW9fcGF5bG9hZF9zZXRfc2FtcGxlYml0c19vcHRpb25zIChydHBiYXNlYXVkaW9wYXlsb2FkLAotICAgICAgICAgIDMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzMjAwMDoKLSAgICAgIGVuY29kaW5nX25hbWUgPSBnX3N0cmR1cCAoIkc3MjYtMzIiKTsKLSAgICAgIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9zYW1wbGViaXRzX29wdGlvbnMgKHJ0cGJhc2VhdWRpb3BheWxvYWQsCi0gICAgICAgICAgNCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQwMDAwOgotICAgICAgZW5jb2RpbmdfbmFtZSA9IGdfc3RyZHVwICgiRzcyNi00MCIpOwotICAgICAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X3NhbXBsZWJpdHNfb3B0aW9ucyAocnRwYmFzZWF1ZGlvcGF5bG9hZCwKLSAgICAgICAgICA1KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnb3RvIGludmFsaWRfYml0cmF0ZTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJzZWxlY3RlZCBiYXNlIGVuY29kaW5nICVzIiwgZW5jb2RpbmdfbmFtZSk7Ci0KLSAgLyogbm93IHNlZSBpZiB3ZSBuZWVkIHRvIHByb2R1Y2UgQUFMMiBvciBub3QgKi8KLSAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAocGF5bG9hZC0+c3JjcGFkLCBOVUxMKTsKLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgR3N0Q2FwcyAqZmlsdGVyLCAqaW50ZXJzZWN0OwotICAgIGdjaGFyICpjYXBzc3RyOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgImhhdmUgcGVlcmNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHBlZXJjYXBzKTsKLQotICAgIGNhcHNzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgJXM7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBBQUwyLSVzIiwgZW5jb2RpbmdfbmFtZSwgZW5jb2RpbmdfbmFtZSk7Ci0gICAgZmlsdGVyID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHNzdHIpOwotICAgIGdfZnJlZSAoY2Fwc3N0cik7Ci0gICAgZ19mcmVlIChlbmNvZGluZ19uYW1lKTsKLQotICAgIC8qIGludGVyc2VjdCB0byBmaWx0ZXIgKi8KLSAgICBpbnRlcnNlY3QgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHBlZXJjYXBzLCBmaWx0ZXIpOwotICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXlsb2FkLCAiaW50ZXJzZWN0ZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsIGludGVyc2VjdCk7Ci0KLSAgICBpZiAoIWludGVyc2VjdCkKLSAgICAgIGdvdG8gbm9fZm9ybWF0OwotICAgIGlmIChnc3RfY2Fwc19pc19lbXB0eSAoaW50ZXJzZWN0KSkgewotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGludGVyc2VjdCk7Ci0gICAgICBnb3RvIG5vX2Zvcm1hdDsKLSAgICB9Ci0KLSAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChpbnRlcnNlY3QsIDApOwotCi0gICAgLyogbm93IHNlZSB3aGF0IGVuY29kaW5nIG5hbWUgd2Ugc2V0dGxlZCBvbiwgd2UgbmVlZCB0byBkdXAgYmVjYXVzZSB0aGUKLSAgICAgKiBzdHJpbmcgZ29lcyBhd2F5IHdoZW4gd2UgdW5yZWYgdGhlIGludGVyc2VjdGlvbiBiZWxvdy4gKi8KLSAgICBlbmNvZGluZ19uYW1lID0KLSAgICAgICAgZ19zdHJkdXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKTsKLQotICAgIC8qIGlmIHdlIG1hbmFnZWQgdG8gbmVnb3RpYXRlIHRvIEFBTDIsIHdlIGRlZmluYXRseSBhcmUgZ29pbmcgdG8gZG8gQUFMMgotICAgICAqIGVuY29kaW5nLiBFbHNlIHdlIG9ubHkgZW5jb2RlIEFBTDIgd2hlbiBleHBsaWNpdGx5IHNldCBieSB0aGUKLSAgICAgKiBwcm9wZXJ0eS4gKi8KLSAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoZW5jb2RpbmdfbmFtZSwgIkFBTDItIikpCi0gICAgICBwYXktPmFhbDIgPSBUUlVFOwotICAgIGVsc2UKLSAgICAgIHBheS0+YWFsMiA9IHBheS0+Zm9yY2VfYWFsMjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJmaW5hbCBlbmNvZGluZyAlcywgQUFMMiAlZCIsIGVuY29kaW5nX25hbWUsCi0gICAgICAgIHBheS0+YWFsMik7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAoaW50ZXJzZWN0KTsKLSAgfSBlbHNlIHsKLSAgICAvKiBkb3duc3RyZWFtIGNhbiBkbyBhbnl0aGluZyBidXQgd2UgcHJlZmVyIHRoZSBiZXR0ZXIgc3VwcG9ydGVkIG5vbi1BQUwyICovCi0gICAgcGF5LT5hYWwyID0gcGF5LT5mb3JjZV9hYWwyOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJubyBwZWVyIGNhcHMsIEFBTDIgJWQiLCBwYXktPmFhbDIpOwotICB9Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJhdWRpbyIsIFRSVUUsIGVuY29kaW5nX25hbWUsCi0gICAgICA4MDAwKTsKLSAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotCi0gIGdfZnJlZSAoZW5jb2RpbmdfbmFtZSk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfYml0cmF0ZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBheWxvYWQsICJpbnZhbGlkIGJpdHJhdGUgJWQgc3BlY2lmaWVkIiwgcGF5LT5iaXRyYXRlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2Zvcm1hdDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBheWxvYWQsICJjb3VsZCBub3QgbmVnb3RpYXRlIGZvcm1hdCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9nNzI2X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdFJ0cEc3MjZQYXkgKnBheTsKLQotICBwYXkgPSBHU1RfUlRQX0c3MjZfUEFZIChwYXlsb2FkKTsKLQotICBpZiAoIXBheS0+YWFsMikgewotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGd1aW50OCAqZGF0YSwgdG1wOwotICAgIGdzaXplIHNpemU7Ci0KLSAgICAvKiBmb3Igbm9uIEFBTDIsIHdlIG5lZWQgdG8gcmVzaHVmZmxlIHRoZSBieXRlcywgd2UgY2FuIGRvIHRoaXMgaW4tcGxhY2UKLSAgICAgKiB3aGVuIHRoZSBidWZmZXIgaXMgd3JpdGFibGUuICovCi0gICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICAgIGRhdGEgPSBtYXAuZGF0YTsKLSAgICBzaXplID0gbWFwLnNpemU7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAicGFja2luZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIG9mIGRhdGEiLCBtYXAuc2l6ZSk7Ci0KLSAgICAvKiB3ZSBuZWVkIHRvIHJlc2h1ZmZsZSB0aGUgYnl0ZXMsIG91dHB1dCBpcyBvZiB0aGUgZm9ybToKLSAgICAgKiBBIEIgQyBEIC4uIHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGRlcGVuZGluZyBvbiB0aGUgYml0cmF0ZS4gKi8KLSAgICBzd2l0Y2ggKHBheS0+Yml0cmF0ZSkgewotICAgICAgY2FzZSAxNjAwMDoKLSAgICAgIHsKLSAgICAgICAgLyogIDAgICAgICAgICAgICAgICAKLSAgICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyAKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstCi0gICAgICAgICAqIHxEIER8QyBDfEIgQnxBIEF8IC4uLgotICAgICAgICAgKiB8MCAxfDAgMXwwIDF8MCAxfAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0KLSAgICAgICAgICovCi0gICAgICAgIHdoaWxlIChzaXplID4gMCkgewotICAgICAgICAgIHRtcCA9ICpkYXRhOwotICAgICAgICAgICpkYXRhKysgPSAoKHRtcCAmIDB4YzApID4+IDYpIHwKLSAgICAgICAgICAgICAgKCh0bXAgJiAweDMwKSA+PiAyKSB8ICgodG1wICYgMHgwYykgPDwgMikgfCAoKHRtcCAmIDB4MDMpIDw8IDYpOwotICAgICAgICAgIHNpemUtLTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgMjQwMDA6Ci0gICAgICB7Ci0gICAgICAgIC8qICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMgotICAgICAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0KLSAgICAgICAgICogfEMgQ3xCIEIgQnxBIEEgQXxGfEUgRSBFfEQgRCBEfEN8SCBIIEh8RyBHIEd8RiBGfCAuLi4KLSAgICAgICAgICogfDEgMnwwIDEgMnwwIDEgMnwyfDAgMSAyfDAgMSAyfDB8MCAxIDJ8MCAxIDJ8MCAxfAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLQotICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKHNpemUgPiAyKSB7Ci0gICAgICAgICAgdG1wID0gKmRhdGE7Ci0gICAgICAgICAgKmRhdGErKyA9ICgodG1wICYgMHhjMCkgPj4gNikgfAotICAgICAgICAgICAgICAoKHRtcCAmIDB4MzgpID4+IDEpIHwgKCh0bXAgJiAweDA3KSA8PCA1KTsKLSAgICAgICAgICB0bXAgPSAqZGF0YTsKLSAgICAgICAgICAqZGF0YSsrID0gKCh0bXAgJiAweDgwKSA+PiA3KSB8Ci0gICAgICAgICAgICAgICgodG1wICYgMHg3MCkgPj4gMykgfCAoKHRtcCAmIDB4MGUpIDw8IDQpIHwgKCh0bXAgJiAweDAxKSA8PCA3KTsKLSAgICAgICAgICB0bXAgPSAqZGF0YTsKLSAgICAgICAgICAqZGF0YSsrID0gKCh0bXAgJiAweGUwKSA+PiA1KSB8Ci0gICAgICAgICAgICAgICgodG1wICYgMHgxYykgPj4gMikgfCAoKHRtcCAmIDB4MDMpIDw8IDYpOwotICAgICAgICAgIHNpemUgLT0gMzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgMzIwMDA6Ci0gICAgICB7Ci0gICAgICAgIC8qICAwICAgICAgICAgICAgICAgICAgIDEKLSAgICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUKLSAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLQotICAgICAgICAgKiB8QiBCIEIgQnxBIEEgQSBBfEQgRCBEIER8QyBDIEMgQ3wgLi4uCi0gICAgICAgICAqIHwwIDEgMiAzfDAgMSAyIDN8MCAxIDIgM3wwIDEgMiAzfAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICAgICAgICB0bXAgPSAqZGF0YTsKLSAgICAgICAgICAqZGF0YSsrID0gKCh0bXAgJiAweGYwKSA+PiA0KSB8ICgodG1wICYgMHgwZikgPDwgNCk7Ci0gICAgICAgICAgc2l6ZS0tOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSA0MDAwMDoKLSAgICAgIHsKLSAgICAgICAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgICAgICAgICAgNAotICAgICAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0gICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0KLSAgICAgICAgICogfEIgQiBCfEEgQSBBIEEgQXxEfEMgQyBDIEMgQ3xCIEJ8RSBFIEUgRXxEIEQgRCBEfEcgR3xGIEYgRiBGIEZ8RXxIIEggSCBIIEh8RyBHIEd8Ci0gICAgICAgICAqIHwyIDMgNHwwIDEgMiAzIDR8NHwwIDEgMiAzIDR8MCAxfDEgMiAzIDR8MCAxIDIgM3wzIDR8MCAxIDIgMyA0fDB8MCAxIDIgMyA0fDAgMSAyfCAgIAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstCi0gICAgICAgICAqLwotICAgICAgICB3aGlsZSAoc2l6ZSA+IDQpIHsKLSAgICAgICAgICB0bXAgPSAqZGF0YTsKLSAgICAgICAgICAqZGF0YSsrID0gKCh0bXAgJiAweGUwKSA+PiA1KSB8ICgodG1wICYgMHgxZikgPDwgMyk7Ci0gICAgICAgICAgdG1wID0gKmRhdGE7Ci0gICAgICAgICAgKmRhdGErKyA9ICgodG1wICYgMHg4MCkgPj4gNykgfAotICAgICAgICAgICAgICAoKHRtcCAmIDB4N2MpID4+IDIpIHwgKCh0bXAgJiAweDAzKSA8PCA2KTsKLSAgICAgICAgICB0bXAgPSAqZGF0YTsKLSAgICAgICAgICAqZGF0YSsrID0gKCh0bXAgJiAweGYwKSA+PiA0KSB8ICgodG1wICYgMHgwZikgPDwgNCk7Ci0gICAgICAgICAgdG1wID0gKmRhdGE7Ci0gICAgICAgICAgKmRhdGErKyA9ICgodG1wICYgMHhjMCkgPj4gNikgfAotICAgICAgICAgICAgICAoKHRtcCAmIDB4M2UpIDw8IDIpIHwgKCh0bXAgJiAweDAxKSA8PCA3KTsKLSAgICAgICAgICB0bXAgPSAqZGF0YTsKLSAgICAgICAgICAqZGF0YSsrID0gKCh0bXAgJiAweGY4KSA+PiAzKSB8ICgodG1wICYgMHgwNykgPDwgNSk7Ci0gICAgICAgICAgc2l6ZSAtPSA1OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICB9Ci0KLSAgcmVzID0KLSAgICAgIEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5oYW5kbGVfYnVmZmVyIChwYXlsb2FkLAotICAgICAgYnVmZmVyKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzI2X3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwRzcyNlBheSAqcnRwZzcyNnBheTsKLQotICBydHBnNzI2cGF5ID0gR1NUX1JUUF9HNzI2X1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfRk9SQ0VfQUFMMjoKLSAgICAgIHJ0cGc3MjZwYXktPmZvcmNlX2FhbDIgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjZfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBHNzI2UGF5ICpydHBnNzI2cGF5OwotCi0gIHJ0cGc3MjZwYXkgPSBHU1RfUlRQX0c3MjZfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GT1JDRV9BQUwyOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0cGc3MjZwYXktPmZvcmNlX2FhbDIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9nNzI2X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGc3MjZwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfRzcyNl9QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBnNzI2cGF5LmggYi9nc3QvcnRwL2dzdHJ0cGc3MjZwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxNjk2Ni4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGc3MjZwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IEF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXJAYXhpcy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9HNzI2X1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0c3MjZfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTIHR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHNzI2UGF5IEdzdFJ0cEc3MjZQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwRzcyNlBheUNsYXNzIEdzdFJ0cEc3MjZQYXlDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfRzcyNl9QQVkgXAotICAoZ3N0X3J0cF9nNzI2X3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0c3MjZfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjZfUEFZLEdzdFJ0cEc3MjZQYXkpKQotI2RlZmluZSBHU1RfUlRQX0c3MjZfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HNzI2X1BBWSxHc3RSdHBHNzI2UGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjZfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjZfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HNzI2X1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRzcyNl9QQVkpKQotCi1zdHJ1Y3QgX0dzdFJ0cEc3MjZQYXkKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZCBhdWRpb3BheWxvYWQ7Ci0KLSAgZ2Jvb2xlYW4gYWFsMjsKLSAgZ2Jvb2xlYW4gZm9yY2VfYWFsMjsKLSAgZ2ludCBiaXRyYXRlOwotfTsKLQotc3RydWN0IF9Hc3RSdHBHNzI2UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfZzcyNl9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2c3MjZfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9HNzI2X1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjVkYTI4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwZzcyOWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwZzcyOWRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBnNzI5ZGVwYXlfZGVidWcpCi0KLQotLyogcmVmZXJlbmNlczoKLSAqCi0gKiBSRkMgMzU1MSAoNC41LjYpCi0gKi8KLQotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMAotfTsKLQotLyogaW5wdXQgaXMgYW4gUlRQIHBhY2tldAotICoKLSAqLwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZzcyOV9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJHNzI5XCI7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0c3MjlfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nNzI5X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vRzcyOSwgIiAiY2hhbm5lbHMgPSAoaW50KSAxLCIgInJhdGUgPSAoaW50KSA4MDAwIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nNzI5X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9nNzI5X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotI2RlZmluZSBnc3RfcnRwX2c3MjlfZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwRzcyOURlcGF5LCBnc3RfcnRwX2c3MjlfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZzcyOV9kZXBheV9jbGFzc19pbml0IChHc3RSdHBHNzI5RGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZzcyOWRlcGF5X2RlYnVnLCAicnRwZzcyOWRlcGF5IiwgMCwKLSAgICAgICJHLjcyOSBSVFAgRGVwYXlsb2FkZXIiKTsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9nNzI5X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyOV9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBHLjcyOSBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgRy43MjkgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDM1NTEpIiwKLSAgICAgICJMYXVyZW50IEdsYXlhbCA8c3BnbGVnbGVAeWFob28uZnI+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9nNzI5X2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9nNzI5X2RlcGF5X3NldGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2c3MjlfZGVwYXlfaW5pdCAoR3N0UnRwRzcyOURlcGF5ICogcnRwZzcyOWRlcGF5KQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkICpkZXBheWxvYWQ7Ci0KLSAgZGVwYXlsb2FkID0gR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwZzcyOWRlcGF5KTsKLQotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nNzI5X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0UnRwRzcyOURlcGF5ICpydHBnNzI5ZGVwYXk7Ci0gIGNvbnN0IGdjaGFyICpwYXJhbXM7Ci0gIGdpbnQgY2xvY2tfcmF0ZSwgY2hhbm5lbHM7Ci0gIGdib29sZWFuIHJldDsKLQotICBydHBnNzI5ZGVwYXkgPSBHU1RfUlRQX0c3MjlfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCEocGFyYW1zID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJlbmNvZGluZy1wYXJhbXMiKSkpCi0gICAgY2hhbm5lbHMgPSAxOwotICBlbHNlIHsKLSAgICBjaGFubmVscyA9IGF0b2kgKHBhcmFtcyk7Ci0gIH0KLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gODAwMDsKLQotICBpZiAoY2hhbm5lbHMgIT0gMSkKLSAgICBnb3RvIHdyb25nX2NoYW5uZWxzOwotCi0gIGlmIChjbG9ja19yYXRlICE9IDgwMDApCi0gICAgZ290byB3cm9uZ19jbG9ja19yYXRlOwotCi0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgc3JjY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9HNzI5IiwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLCAicmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrX3JhdGUsIE5VTEwpOwotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfY2hhbm5lbHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnNzI5ZGVwYXksICJleHBlY3RlZCAxIGNoYW5uZWwsIGdvdCAlZCIsIGNoYW5uZWxzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2Nsb2NrX3JhdGU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnNzI5ZGVwYXksICJleHBlY3RlZCA4MDAwIGNsb2NrLXJhdGUsIGdvdCAlZCIsCi0gICAgICAgIGNsb2NrX3JhdGUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfZzcyOV9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEc3MjlEZXBheSAqcnRwZzcyOWRlcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIGdpbnQgcGF5bG9hZF9sZW47Ci0gIGdib29sZWFuIG1hcmtlcjsKLQotICBydHBnNzI5ZGVwYXkgPSBHU1RfUlRQX0c3MjlfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgLyogQXQgbGVhc3QgMiBieXRlcyAoQ05HIGZyb20gRzcyOSBBbm5leCBCKSAqLwotICBpZiAocGF5bG9hZF9sZW4gPCAyKSB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZzcyOWRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIkc3MjkgUlRQIHBheWxvYWQgdG9vIHNtYWxsICglZCkiLCBwYXlsb2FkX2xlbikpOwotICAgIGdvdG8gYmFkX3BhY2tldDsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChydHBnNzI5ZGVwYXksICJwYXlsb2FkIGxlbiAlZCIsIHBheWxvYWRfbGVuKTsKLQotICBpZiAoKHBheWxvYWRfbGVuICUgMTApID09IDIpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocnRwZzcyOWRlcGF5LCAiRzcyOSBwYXlsb2FkIGNvbnRhaW5zIENORyBmcmFtZSIpOwotICB9Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotICBtYXJrZXIgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIGlmIChtYXJrZXIpIHsKLSAgICAvKiBtYXJrZXIgYml0IHN0YXJ0cyB0YWxrc3B1cnQgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGRlcGF5bG9hZCksIG91dGJ1ZiwKLSAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlcGF5bG9hZCwgInB1c2hpbmcgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpKTsKLQotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotYmFkX3BhY2tldDoKLSAgewotICAgIC8qIG5vIGZhdGFsIGVycm9yICovCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfZzcyOV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGc3MjlkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9HNzI5X0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGc3MjlkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjM1NjJlLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZzcyOWRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9HNzI5X0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfRzcyOV9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9HNzI5X0RFUEFZIFwKLSAgKGdzdF9ydHBfZzcyOV9kZXBheV9nZXRfdHlwZSgpKQotICAKLSNkZWZpbmUgR1NUX1JUUF9HNzI5X0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0c3MjlfREVQQVksR3N0UnRwRzcyOURlcGF5KSkKLSAgCi0jZGVmaW5lIEdTVF9SVFBfRzcyOV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRzcyOV9ERVBBWSxHc3RSdHBHNzI5RGVwYXlDbGFzcykpCi0gIAotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjlfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfRzcyOV9ERVBBWSkpCi0gIAotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjlfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0c3MjlfREVQQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwRzcyOURlcGF5IEdzdFJ0cEc3MjlEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHNzI5RGVwYXlDbGFzcyBHc3RSdHBHNzI5RGVwYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBHNzI5RGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cEc3MjlEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2c3MjlfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2c3MjlfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfRzcyOV9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyOXBheS5jIGIvZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMjdjOGMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gQ29sbGFib3JhIEx0ZAotICogIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBUaGlzIHBheWxvYWRlciBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgd2lsbCBBTFdBWVMgY29tZSBhcyB6ZXJvIG9yIG1vcmUKLSAqIDEwIGJ5dGVzIGZyYW1lIG9mIGF1ZGlvIGZvbGxvd2VkIGJ5IDAgb3IgMSAyIGJ5dGUgZnJhbWUgb2Ygc2lsZW5jZS4KLSAqIEFueSBvdGhlciBidWZmZXIgZm9ybWF0IHdvbid0IHdvcmsKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cGc3MjlwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBnNzI5cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBnNzI5cGF5X2RlYnVnKQotCi0jZGVmaW5lIEc3MjlfRlJBTUVfU0laRSAxMAotI2RlZmluZSBHNzI5Ql9DTl9GUkFNRV9TSVpFIDIKLSNkZWZpbmUgRzcyOV9GUkFNRV9EVVJBVElPTiAoMTAgKiBHU1RfTVNFQ09ORCkKLSNkZWZpbmUgRzcyOV9GUkFNRV9EVVJBVElPTl9NUyAoMTApCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nNzI5X3BheV9zZXRfY2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9nNzI5X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9nNzI5X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZzcyOV9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9HNzI5LCAiICAgICAvKiBhY2NvcmRpbmcgdG8gUkZDIDM1NTUgKi8KLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAicmF0ZSA9IChpbnQpIDgwMDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2c3MjlfcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0c3MjlfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJHNzI5XCI7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJHNzI5XCIiKQotICAgICk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9nNzI5X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSVFBHNzI5UGF5LCBnc3RfcnRwX2c3MjlfcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9QQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZzcyOV9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJUUEc3MjlQYXkgKnBheSA9IEdTVF9SVFBfRzcyOV9QQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHBheS0+YWRhcHRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzI5X3BheV9jbGFzc19pbml0IChHc3RSVFBHNzI5UGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqcGF5bG9hZF9jbGFzcyA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGc3MjlwYXlfZGVidWcsICJydHBnNzI5cGF5IiwgMCwKLSAgICAgICJHLjcyOSBSVFAgUGF5bG9hZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2c3MjlfcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfZzcyOV9wYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyOV9wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZzcyOV9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBHLjcyOSBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYWNrZXRpemUgRy43MjkgYXVkaW8gaW50byBSVFAgcGFja2V0cyIsCi0gICAgICAiT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2c3MjlfcGF5X3NldF9jYXBzOwotICBwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF9nNzI5X3BheV9oYW5kbGVfYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzI5X3BheV9pbml0IChHc3RSVFBHNzI5UGF5ICogcGF5KQotewotICBHc3RSVFBCYXNlUGF5bG9hZCAqcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEIChwYXkpOwotCi0gIHBheWxvYWQtPnB0ID0gR1NUX1JUUF9QQVlMT0FEX0c3Mjk7Ci0KLSAgcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzI5X3BheV9yZXNldCAoR3N0UlRQRzcyOVBheSAqIHBheSkKLXsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBheS0+YWRhcHRlcik7Ci0gIHBheS0+ZGlzY29udCA9IEZBTFNFOwotICBwYXktPm5leHRfcnRwX3RpbWUgPSAwOwotICBwYXktPmZpcnN0X3RzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgcGF5LT5maXJzdF9ydHBfdGltZSA9IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nNzI5X3BheV9zZXRfY2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAiYXVkaW8iLAotICAgICAgcGF5bG9hZC0+cHQgIT0gR1NUX1JUUF9QQVlMT0FEX0c3MjksICJHNzI5IiwgODAwMCk7Ci0KLSAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2c3MjlfcGF5X3B1c2ggKEdzdFJUUEc3MjlQYXkgKiBydHBnNzI5cGF5LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkICpiYXNlcGF5bG9hZDsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotICBndWludCBmcmFtZXM7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotICBndWludCBwYXlsb2FkX2xlbiA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgYmFzZXBheWxvYWQgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwZzcyOXBheSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwZzcyOXBheSwgIlB1c2hpbmcgJWQgYnl0ZXMgdHMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgcGF5bG9hZF9sZW4sIEdTVF9USU1FX0FSR1MgKHJ0cGc3MjlwYXktPm5leHRfdHMpKTsKLQotICAvKiBjcmVhdGUgYnVmZmVyIHRvIGhvbGQgdGhlIHBheWxvYWQgKi8KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlICgwLCAwLCAwKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9SRUFEV1JJVEUsICZydHApOwotCi0gIC8qIHNldCBtZXRhZGF0YSAqLwotICBmcmFtZXMgPQotICAgICAgKHBheWxvYWRfbGVuIC8gRzcyOV9GUkFNRV9TSVpFKSArICgocGF5bG9hZF9sZW4gJSBHNzI5X0ZSQU1FX1NJWkUpID4+IDEpOwotICBkdXJhdGlvbiA9IGZyYW1lcyAqIEc3MjlfRlJBTUVfRFVSQVRJT047Ci0gIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gcnRwZzcyOXBheS0+bmV4dF90czsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IGR1cmF0aW9uOwotICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9IHJ0cGc3MjlwYXktPm5leHRfcnRwX3RpbWU7Ci0gIHJ0cGc3MjlwYXktPm5leHRfdHMgKz0gZHVyYXRpb247Ci0gIHJ0cGc3MjlwYXktPm5leHRfcnRwX3RpbWUgKz0gZnJhbWVzICogODA7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHJ0cGc3MjlwYXktPmRpc2NvbnQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsICJkaXNjb250LCBzZXR0aW5nIG1hcmtlciBiaXQiKTsKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLSAgICBydHBnNzI5cGF5LT5kaXNjb250ID0gRkFMU0U7Ci0gIH0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIC8qIGFwcGVuZCBwYXlsb2FkICovCi0gIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlcGF5bG9hZCksIG91dGJ1ZiwgYnVmLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgYnVmKTsKLQotICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoIChiYXNlcGF5bG9hZCwgb3V0YnVmKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nNzI5X3BheV9yZWNhbGNfcnRwX3RpbWUgKEdzdFJUUEc3MjlQYXkgKiBydHBnNzI5cGF5LCBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChydHBnNzI5cGF5LT5maXJzdF90cykKLSAgICAgICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSAmJiB0aW1lID49IHJ0cGc3MjlwYXktPmZpcnN0X3RzKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIGRpZmY7Ci0gICAgZ3VpbnQzMiBydHBkaWZmOwotCi0gICAgZGlmZiA9IHRpbWUgLSBydHBnNzI5cGF5LT5maXJzdF90czsKLSAgICBydHBkaWZmID0gKGRpZmYgLyBHU1RfTVNFQ09ORCkgKiA4OwotICAgIHJ0cGc3MjlwYXktPm5leHRfcnRwX3RpbWUgPSBydHBnNzI5cGF5LT5maXJzdF9ydHBfdGltZSArIHJ0cGRpZmY7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZzcyOXBheSwKLSAgICAgICAgImVsYXBzZWQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcnRwICUiIEdfR1VJTlQzMl9GT1JNQVQgIiwgIgotICAgICAgICAibmV3IG9mZnNldCAlIiBHX0dVSU5UMzJfRk9STUFULCBHU1RfVElNRV9BUkdTIChkaWZmKSwgcnRwZGlmZiwKLSAgICAgICAgcnRwZzcyOXBheS0+bmV4dF9ydHBfdGltZSk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfZzcyOV9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdFJUUEc3MjlQYXkgKnJ0cGc3MjlwYXkgPSBHU1RfUlRQX0c3MjlfUEFZIChwYXlsb2FkKTsKLSAgR3N0QWRhcHRlciAqYWRhcHRlciA9IE5VTEw7Ci0gIGd1aW50IHBheWxvYWRfbGVuOwotICBndWludCBhdmFpbGFibGU7Ci0gIGd1aW50IG1heHB0aW1lX29jdGV0cyA9IEdfTUFYVUlOVDsKLSAgZ3VpbnQgbWlucHRpbWVfb2N0ZXRzID0gMDsKLSAgZ3VpbnQgbWluX3BheWxvYWRfbGVuOwotICBndWludCBtYXhfcGF5bG9hZF9sZW47Ci0gIGdzaXplIHNpemU7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgaWYgKHNpemUgJSBHNzI5X0ZSQU1FX1NJWkUgIT0gMCAmJgotICAgICAgc2l6ZSAlIEc3MjlfRlJBTUVfU0laRSAhPSBHNzI5Ql9DTl9GUkFNRV9TSVpFKQotICAgIGdvdG8gaW52YWxpZF9zaXplOwotCi0gIC8qIG1heCBudW1iZXIgb2YgYnl0ZXMgYmFzZWQgb24gZ2l2ZW4gcHRpbWUsIGhhcyB0byBiZSBtdWx0aXBsZSBvZgotICAgKiBmcmFtZV9kdXJhdGlvbiAqLwotICBpZiAocGF5bG9hZC0+bWF4X3B0aW1lICE9IC0xKSB7Ci0gICAgZ3VpbnQgcHRpbWVfbXMgPSBwYXlsb2FkLT5tYXhfcHRpbWUgLyBHU1RfTVNFQ09ORDsKLQotICAgIG1heHB0aW1lX29jdGV0cyA9IEc3MjlfRlJBTUVfU0laRSAqCi0gICAgICAgIChpbnQpIChwdGltZV9tcyAvIEc3MjlfRlJBTUVfRFVSQVRJT05fTVMpOwotCi0gICAgaWYgKG1heHB0aW1lX29jdGV0cyA8IEc3MjlfRlJBTUVfU0laRSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXlsb2FkLCAiR2l2ZW4gcHRpbWUgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICAgIiBpcyBzbWFsbGVyIHRoYW4gbWluaW11bSAlZCBucywgb3ZlcndyaXRpbmcgdG8gbWluaW11bSIsCi0gICAgICAgICAgcGF5bG9hZC0+bWF4X3B0aW1lLCBHNzI5X0ZSQU1FX0RVUkFUSU9OX01TKTsKLSAgICAgIG1heHB0aW1lX29jdGV0cyA9IEc3MjlfRlJBTUVfU0laRTsKLSAgICB9Ci0gIH0KLQotICBtYXhfcGF5bG9hZF9sZW4gPSBNSU4gKAotICAgICAgLyogTVRVIG1heCAqLwotICAgICAgKGludCkgKGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4gKEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVQotICAgICAgICAgICAgICAocGF5bG9hZCksIDAsIDApIC8gRzcyOV9GUkFNRV9TSVpFKQotICAgICAgKiBHNzI5X0ZSQU1FX1NJWkUsCi0gICAgICAvKiBwdGltZSBtYXggKi8KLSAgICAgIG1heHB0aW1lX29jdGV0cyk7Ci0KLSAgLyogbWluIG51bWJlciBvZiBieXRlcyBiYXNlZCBvbiBhIGdpdmVuIHB0aW1lLCBoYXMgdG8gYmUgYSBtdWx0aXBsZQotICAgICBvZiBmcmFtZSBkdXJhdGlvbiAqLwotICB7Ci0gICAgZ3VpbnQ2NCBtaW5fcHRpbWUgPSBwYXlsb2FkLT5taW5fcHRpbWU7Ci0KLSAgICBtaW5fcHRpbWUgPSBtaW5fcHRpbWUgLyBHU1RfTVNFQ09ORDsKLSAgICBtaW5wdGltZV9vY3RldHMgPSBHNzI5X0ZSQU1FX1NJWkUgKgotICAgICAgICAoaW50KSAobWluX3B0aW1lIC8gRzcyOV9GUkFNRV9EVVJBVElPTl9NUyk7Ci0gIH0KLQotICBtaW5fcGF5bG9hZF9sZW4gPSBNQVggKG1pbnB0aW1lX29jdGV0cywgRzcyOV9GUkFNRV9TSVpFKTsKLQotICBpZiAobWluX3BheWxvYWRfbGVuID4gbWF4X3BheWxvYWRfbGVuKSB7Ci0gICAgbWluX3BheWxvYWRfbGVuID0gbWF4X3BheWxvYWRfbGVuOwotICB9Ci0KLSAgLyogSWYgdGhlIHB0aW1lIGlzIHNwZWNpZmllZCBpbiB0aGUgY2FwcywgdHJpZWQgdG8gYWRoZXJlIHRvIGl0IGV4YWN0bHkgKi8KLSAgaWYgKHBheWxvYWQtPnB0aW1lKSB7Ci0gICAgZ3VpbnQ2NCBwdGltZSA9IHBheWxvYWQtPnB0aW1lIC8gR1NUX01TRUNPTkQ7Ci0gICAgZ3VpbnQgcHRpbWVfaW5fYnl0ZXMgPSBHNzI5X0ZSQU1FX1NJWkUgKgotICAgICAgICAoZ3VpbnQpIChwdGltZSAvIEc3MjlfRlJBTUVfRFVSQVRJT05fTVMpOwotCi0gICAgLyogY2xpcCB0byBjb21wdXRlZCBtaW4gYW5kIG1heCBsZW5ndGhzICovCi0gICAgcHRpbWVfaW5fYnl0ZXMgPSBNQVggKG1pbl9wYXlsb2FkX2xlbiwgcHRpbWVfaW5fYnl0ZXMpOwotICAgIHB0aW1lX2luX2J5dGVzID0gTUlOIChtYXhfcGF5bG9hZF9sZW4sIHB0aW1lX2luX2J5dGVzKTsKLQotICAgIG1pbl9wYXlsb2FkX2xlbiA9IG1heF9wYXlsb2FkX2xlbiA9IHB0aW1lX2luX2J5dGVzOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBheWxvYWQsCi0gICAgICAiQ2FsY3VsYXRlZCBtaW5fcGF5bG9hZF9sZW4gJXUgYW5kIG1heF9wYXlsb2FkX2xlbiAldSIsCi0gICAgICBtaW5fcGF5bG9hZF9sZW4sIG1heF9wYXlsb2FkX2xlbik7Ci0KLSAgYWRhcHRlciA9IHJ0cGc3MjlwYXktPmFkYXB0ZXI7Ci0gIGF2YWlsYWJsZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9QVFMgKGJ1Zik7Ci0KLSAgLyogcmVzeW5jIHJ0cCB0aW1lIG9uIGRpc2NvbnQgb3IgYSBkaXNjb250aW51b3VzIGNuIHBhY2tldCAqLwotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWYpKSB7Ci0gICAgLyogZmx1c2ggcmVtYWluZGVyICovCi0gICAgaWYgKGF2YWlsYWJsZSA+IDApIHsKLSAgICAgIGdzdF9ydHBfZzcyOV9wYXlfcHVzaCAocnRwZzcyOXBheSwKLSAgICAgICAgICBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0IChhZGFwdGVyLCBhdmFpbGFibGUpKTsKLSAgICAgIGF2YWlsYWJsZSA9IDA7Ci0gICAgfQotICAgIHJ0cGc3MjlwYXktPmRpc2NvbnQgPSBUUlVFOwotICAgIGdzdF9ydHBfZzcyOV9wYXlfcmVjYWxjX3J0cF90aW1lIChydHBnNzI5cGF5LCB0aW1lc3RhbXApOwotICB9Ci0KLSAgaWYgKHNpemUgPCBHNzI5X0ZSQU1FX1NJWkUpCi0gICAgZ3N0X3J0cF9nNzI5X3BheV9yZWNhbGNfcnRwX3RpbWUgKHJ0cGc3MjlwYXksIHRpbWVzdGFtcCk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocnRwZzcyOXBheS0+Zmlyc3RfdHMpKSkgewotICAgIHJ0cGc3MjlwYXktPmZpcnN0X3RzID0gdGltZXN0YW1wOwotICAgIHJ0cGc3MjlwYXktPmZpcnN0X3J0cF90aW1lID0gcnRwZzcyOXBheS0+bmV4dF9ydHBfdGltZTsKLSAgfQotCi0gIC8qIGxldCdzIHJlc2V0IHRoZSBiYXNlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZGFwdGVyIGlzIGVtcHR5ICovCi0gIGlmIChhdmFpbGFibGUgPT0gMCkKLSAgICBydHBnNzI5cGF5LT5uZXh0X3RzID0gdGltZXN0YW1wOwotCi0gIGlmIChhdmFpbGFibGUgPT0gMCAmJiBzaXplID49IG1pbl9wYXlsb2FkX2xlbiAmJiBzaXplIDw9IG1heF9wYXlsb2FkX2xlbikgewotICAgIHJldCA9IGdzdF9ydHBfZzcyOV9wYXlfcHVzaCAocnRwZzcyOXBheSwgYnVmKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgYnVmKTsKLSAgYXZhaWxhYmxlID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChhZGFwdGVyKTsKLQotICAvKiBhcyBsb25nIGFzIHdlIGhhdmUgZnVsbCBmcmFtZXMgKi8KLSAgLyogdGhpcyBsb29wIHdpbGwgcHVzaCBhbGwgYXZhaWxhYmxlIGJ1ZmZlcnMgdGlsbCB0aGUgbGFzdCBmcmFtZSAqLwotICB3aGlsZSAoYXZhaWxhYmxlID49IG1pbl9wYXlsb2FkX2xlbiB8fAotICAgICAgYXZhaWxhYmxlICUgRzcyOV9GUkFNRV9TSVpFID09IEc3MjlCX0NOX0ZSQU1FX1NJWkUpIHsKLSAgICAvKiBXZSBzZW5kIGFzIG11Y2ggYXMgd2UgY2FuICovCi0gICAgaWYgKGF2YWlsYWJsZSA8PSBtYXhfcGF5bG9hZF9sZW4pIHsKLSAgICAgIHBheWxvYWRfbGVuID0gYXZhaWxhYmxlOwotICAgIH0gZWxzZSB7Ci0gICAgICBwYXlsb2FkX2xlbiA9IE1JTiAobWF4X3BheWxvYWRfbGVuLAotICAgICAgICAgIChhdmFpbGFibGUgLyBHNzI5X0ZSQU1FX1NJWkUpICogRzcyOV9GUkFNRV9TSVpFKTsKLSAgICB9Ci0KLSAgICByZXQgPSBnc3RfcnRwX2c3MjlfcGF5X3B1c2ggKHJ0cGc3MjlwYXksCi0gICAgICAgIGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKGFkYXB0ZXIsIHBheWxvYWRfbGVuKSk7Ci0gICAgYXZhaWxhYmxlIC09IHBheWxvYWRfbGVuOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfc2l6ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXlsb2FkLCBTVFJFQU0sIFdST05HX1RZUEUsCi0gICAgICAgICgiSW52YWxpZCBpbnB1dCBidWZmZXIgc2l6ZSIpLAotICAgICAgICAoIkludmFsaWQgYnVmZmVyIHNpemUsIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIgotICAgICAgICAgICAgIiBHNzI5X0ZSQU1FX1NJWkUoMTApIHdpdGggYW4gb3B0aW9uYWwgRzcyOUJfQ05fRlJBTUVfU0laRSgyKSIKLSAgICAgICAgICAgICIgYWRkZWQgdG8gaXQsIGJ1dCBpdCBpcyAlIiBHX0dTSVpFX0ZPUk1BVCwgc2l6ZSkpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9nNzI5X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgLyogaGFuZGxlIHVwd2FyZHMgc3RhdGUgY2hhbmdlcyBoZXJlICovCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIC8qIGhhbmRsZSBkb3dud2FyZHMgc3RhdGUgY2hhbmdlcyAqLwotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9nNzI5X3BheV9yZXNldCAoR1NUX1JUUF9HNzI5X1BBWSAoZWxlbWVudCkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfZzcyOV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBnNzI5cGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0c3MjlfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZzcyOXBheS5oIGIvZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOTI0NjAuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBnNzI5cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBDb2xsYWJvcmEgTHRkCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfRzcyOV9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9HNzI5X1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VhdWRpb3BheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9HNzI5X1BBWSBcCi0gIChnc3RfcnRwX2c3MjlfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfRzcyOV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfRzcyOV9QQVksR3N0UlRQRzcyOVBheSkpCi0jZGVmaW5lIEdTVF9SVFBfRzcyOV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0c3MjlfUEFZLEdzdFJUUEc3MjlQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfRzcyOV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfRzcyOV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0c3MjlfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HNzI5X1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBHNzI5UGF5IEdzdFJUUEc3MjlQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQRzcyOVBheUNsYXNzIEdzdFJUUEc3MjlQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSVFBHNzI5UGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfdHM7Ci0gIGd1aW50MzIgbmV4dF9ydHBfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X3RzOwotICBndWludDMyIGZpcnN0X3J0cF90aW1lOwotICBnYm9vbGVhbiBkaXNjb250OwotfTsKLQotc3RydWN0IF9Hc3RSVFBHNzI5UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2c3MjlfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9nNzI5X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9HNzI5X1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkZTNmMC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGdzbWRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gWmVlc2hhbiBBbGkgPHplZW5peEBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgImdzdHJ0cGdzbWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwZ3NtZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGdzbWRlcGF5X2RlYnVnKQotCi0vKiBSVFBHU01EZXBheSBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2dzbV9kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtZ3NtLCAiICJyYXRlID0gKGludCkgODAwMCwgIiAiY2hhbm5lbHMgPSAxIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nc21fZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiR1NNXCI7IgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfR1NNX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCIpCi0gICAgKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9nc21fZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIF9kZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2dzbV9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogX2RlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9nc21fZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UlRQR1NNRGVwYXksIGdzdF9ydHBfZ3NtX2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc21fZGVwYXlfY2xhc3NfaW5pdCAoR3N0UlRQR1NNRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZV9kZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VfZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2dzbV9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2dzbV9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBHU00gZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIEdTTSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwgIlplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VfZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2dzbV9kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlX2RlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2dzbV9kZXBheV9zZXRjYXBzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBnc21kZXBheV9kZWJ1ZywgInJ0cGdzbWRlcGF5IiwgMCwKLSAgICAgICJHU00gQXVkaW8gUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzbV9kZXBheV9pbml0IChHc3RSVFBHU01EZXBheSAqIHJ0cGdzbWRlcGF5KQotewotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZ3NtX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNjYXBzOwotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IGNsb2NrX3JhdGU7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IDgwMDA7ICAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtZ3NtIiwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsICJyYXRlIiwgR19UWVBFX0lOVCwgY2xvY2tfcmF0ZSwgTlVMTCk7Ci0gIHJldCA9IGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9nc21fZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIGdib29sZWFuIG1hcmtlcjsKLQotICBtYXJrZXIgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIEdTVF9ERUJVRyAoInByb2Nlc3MgOiBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgbWFyayAlZCB0cyAldSBzZXFuICVkIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHJ0cC0+YnVmZmVyKSwgbWFya2VyLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKSwgZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAocnRwKSk7Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotCi0gIGlmIChtYXJrZXIgJiYgb3V0YnVmKSB7Ci0gICAgLyogbWFyayBzdGFydCBvZiB0YWxrc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheWxvYWQpLCBvdXRidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9nc21fZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBnc21kZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9HU01fREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBnc21kZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBnc21kZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDI4YWEwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZ3NtZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9HU01fREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9HU01fREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUEdTTURlcGF5IEdzdFJUUEdTTURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUEdTTURlcGF5Q2xhc3MgR3N0UlRQR1NNRGVwYXlDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfR1NNX0RFUEFZIFwKLSAgKGdzdF9ydHBfZ3NtX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfR1NNX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0dTTV9ERVBBWSxHc3RSVFBHU01EZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfR1NNX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HU01fREVQQVksR3N0UlRQR1NNRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfR1NNX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0dTTV9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfR1NNX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HU01fREVQQVkpKQotCi1zdHJ1Y3QgX0dzdFJUUEdTTURlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgX2RlcGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBfR3N0UlRQR1NNRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9nc21fZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2dzbV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9HU01fREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGdzbXBheS5jIGIvZ3N0L3J0cC9nc3RydHBnc21wYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4ODhkNy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGdzbXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cGdzbXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGdzbXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwZ3NtcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nc21fcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1nc20sICIgInJhdGUgPSAoaW50KSA4MDAwLCAiICJjaGFubmVscyA9IChpbnQpIDEiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2dzbV9wYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfR1NNX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiR1NNXCI7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJHU01cIiIpCi0gICAgKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfZ3NtX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9nc21fcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfZ3NtX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSVFBHU01QYXksIGdzdF9ydHBfZ3NtX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzbV9wYXlfY2xhc3NfaW5pdCAoR3N0UlRQR1NNUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZ3NtcGF5X2RlYnVnLCAicnRwZ3NtcGF5IiwgMCwKLSAgICAgICJHU00gQXVkaW8gUlRQIFBheWxvYWRlciIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZ3NtX3BheV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9nc21fcGF5X3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJUUCBHU00gcGF5bG9hZGVyIiwKLSAgICAgICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQtZW5jb2RlcyBHU00gYXVkaW8gaW50byBhIFJUUCBwYWNrZXQiLAotICAgICAgIlplZXNoYW4gQWxpIDx6ZWVuaXhAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfZ3NtX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfZ3NtX3BheV9oYW5kbGVfYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc21fcGF5X2luaXQgKEdzdFJUUEdTTVBheSAqIHJ0cGdzbXBheSkKLXsKLSAgR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cGdzbXBheSktPmNsb2NrX3JhdGUgPSA4MDAwOwotICBHU1RfUlRQX0JBU0VfUEFZTE9BRF9QVCAocnRwZ3NtcGF5KSA9IEdTVF9SVFBfUEFZTE9BRF9HU007Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nc21fcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGNvbnN0IGNoYXIgKnN0bmFtZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdib29sZWFuIHJlczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBzdG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOwotCi0gIGlmIChzdHJjbXAgKCJhdWRpby94LWdzbSIsIHN0bmFtZSkpCi0gICAgZ290byBpbnZhbGlkX3R5cGU7Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJhdWRpbyIsCi0gICAgICBwYXlsb2FkLT5wdCAhPSBHU1RfUlRQX1BBWUxPQURfR1NNLCAiR1NNIiwgODAwMCk7Ci0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChwYXlsb2FkLCBOVUxMKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF90eXBlOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXlsb2FkLCAiaW52YWxpZCBtZWRpYSB0eXBlIHJlY2VpdmVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2dzbV9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJUUEdTTVBheSAqcnRwZ3NtcGF5OwotICBndWludCBwYXlsb2FkX2xlbjsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBydHBnc21wYXkgPSBHU1RfUlRQX0dTTV9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gIC8qIEZJWE1FLCBvbmx5IG9uZSBHU00gZnJhbWUgcGVyIFJUUCBwYWNrZXQgZm9yIG5vdyAqLwotICBwYXlsb2FkX2xlbiA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0KLSAgLyogRklYTUUsIGp1c3QgZXJyb3Igb3V0IGZvciBub3cgKi8KLSAgaWYgKHBheWxvYWRfbGVuID4gR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBnc21wYXkpKQotICAgIGdvdG8gdG9vX2JpZzsKLQotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKHBheWxvYWRfbGVuLCAwLCAwKTsKLQotICAvKiBjb3B5IHRpbWVzdGFtcCBhbmQgZHVyYXRpb24gKi8KLSAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSB0aW1lc3RhbXA7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBkdXJhdGlvbjsKLQotICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwZ3NtcGF5KSwgb3V0YnVmLCBidWZmZXIsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotCi0gIC8qIGFwcGVuZCBwYXlsb2FkICovCi0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChvdXRidWYsIGJ1ZmZlcik7Ci0KLSAgR1NUX0RFQlVHICgiZ3N0X3J0cF9nc21fcGF5X2NoYWluOiBwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSk7Ci0KLSAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoYmFzZXBheWxvYWQsIG91dGJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19iaWc6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwZ3NtcGF5LCBTVFJFQU0sIEVOQ09ERSwgKE5VTEwpLAotICAgICAgICAoInBheWxvYWRfbGVuICV1ID4gbXR1ICV1IiwgcGF5bG9hZF9sZW4sCi0gICAgICAgICAgICBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHJ0cGdzbXBheSkpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfZ3NtX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGdzbXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9HU01fUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZ3NtcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGdzbXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjQzN2Y1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwZ3NtcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1JUUF9HU01fUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfR1NNX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUEdTTVBheSBHc3RSVFBHU01QYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQR1NNUGF5Q2xhc3MgR3N0UlRQR1NNUGF5Q2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0dTTV9QQVkgXAotICAoZ3N0X3J0cF9nc21fcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfR1NNX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9HU01fUEFZLEdzdFJUUEdTTVBheSkpCi0jZGVmaW5lIEdTVF9SVFBfR1NNX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfR1NNX1BBWSxHc3RSVFBHU01QYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfR1NNX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9HU01fUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HU01fUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HU01fUEFZKSkKLQotc3RydWN0IF9Hc3RSVFBHU01QYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBfR3N0UlRQR1NNUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2dzbV9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2dzbV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfR1NNX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QwNTc0Mi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBnc3RkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGdzdGRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBnc3RkZXBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZ3N0X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2dzdF9kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXBwbGljYXRpb25cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJYLUdTVFwiIikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfZ3N0X2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEdTVERlcGF5LCBnc3RfcnRwX2dzdF9kZXBheSwgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9nc3RfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nc3RfZGVwYXlfaGFuZGxlX2V2ZW50IChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXksCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9nc3RfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9nc3RfZGVwYXlfcmVzZXQgKEdzdFJ0cEdTVERlcGF5ICogcnRwZ3N0ZGVwYXksIGdib29sZWFuCi0gICAgZnVsbCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nc3RfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2dzdF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzdF9kZXBheV9jbGFzc19pbml0IChHc3RSdHBHU1REZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGdzdGRlcGF5X2RlYnVnLCAicnRwZ3N0ZGVwYXkiLCAwLAotICAgICAgIkdzdHJlYW1lciBSVFAgRGVwYXlsb2FkZXIiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9nc3RfZGVwYXlfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF9nc3RfZGVwYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZ3N0X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZ3N0X2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiR1N0cmVhbWVyIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsiLAotICAgICAgIkV4dHJhY3RzIEdTdHJlYW1lciBidWZmZXJzIGZyb20gUlRQIHBhY2tldHMiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2V2ZW50ID0gZ3N0X3J0cF9nc3RfZGVwYXlfaGFuZGxlX2V2ZW50OwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfZ3N0X2RlcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfZ3N0X2RlcGF5X3Byb2Nlc3M7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzdF9kZXBheV9pbml0IChHc3RSdHBHU1REZXBheSAqIHJ0cGdzdGRlcGF5KQotewotICBydHBnc3RkZXBheS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZ3N0X2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBHU1REZXBheSAqcnRwZ3N0ZGVwYXk7Ci0KLSAgcnRwZ3N0ZGVwYXkgPSBHU1RfUlRQX0dTVF9ERVBBWSAob2JqZWN0KTsKLQotICBnc3RfcnRwX2dzdF9kZXBheV9yZXNldCAocnRwZ3N0ZGVwYXksIFRSVUUpOwotICBnX29iamVjdF91bnJlZiAocnRwZ3N0ZGVwYXktPmFkYXB0ZXIpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLXN0b3JlX2NhY2hlIChHc3RSdHBHU1REZXBheSAqIHJ0cGdzdGRlcGF5LCBndWludCBDViwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGlmIChydHBnc3RkZXBheS0+Q1ZfY2FjaGVbQ1ZdKQotICAgIGdzdF9jYXBzX3VucmVmIChydHBnc3RkZXBheS0+Q1ZfY2FjaGVbQ1ZdKTsKLSAgcnRwZ3N0ZGVwYXktPkNWX2NhY2hlW0NWXSA9IGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzdF9kZXBheV9yZXNldCAoR3N0UnRwR1NURGVwYXkgKiBydHBnc3RkZXBheSwgZ2Jvb2xlYW4gZnVsbCkKLXsKLSAgZ3VpbnQgaTsKLQotICBnc3RfYWRhcHRlcl9jbGVhciAocnRwZ3N0ZGVwYXktPmFkYXB0ZXIpOwotICBpZiAoZnVsbCkgewotICAgIHJ0cGdzdGRlcGF5LT5jdXJyZW50X0NWID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotICAgICAgc3RvcmVfY2FjaGUgKHJ0cGdzdGRlcGF5LCBpLCBOVUxMKTsKLSAgICBnX2ZyZWUgKHJ0cGdzdGRlcGF5LT5zdHJlYW1faWQpOwotICAgIHJ0cGdzdGRlcGF5LT5zdHJlYW1faWQgPSBOVUxMOwotICAgIGlmIChydHBnc3RkZXBheS0+dGFncykKLSAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAocnRwZ3N0ZGVwYXktPnRhZ3MpOwotICAgIHJ0cGdzdGRlcGF5LT50YWdzID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZ3N0X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBHU1REZXBheSAqcnRwZ3N0ZGVwYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IGNsb2NrX3JhdGU7Ci0gIGdib29sZWFuIHJlczsKLSAgY29uc3QgZ2NoYXIgKmNhcHNlbmM7Ci0KLSAgcnRwZ3N0ZGVwYXkgPSBHU1RfUlRQX0dTVF9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7Ci0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgY2Fwc2VuYyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiY2FwcyIpOwotICBpZiAoY2Fwc2VuYykgewotICAgIEdzdENhcHMgKm91dGNhcHM7Ci0gICAgZ3NpemUgb3V0X2xlbjsKLSAgICBnY2hhciAqY2Fwc3N0cjsKLSAgICBjb25zdCBnY2hhciAqY2Fwc3ZlcjsKLSAgICBndWludCBDVjsKLQotICAgIC8qIGRlY29kZSBjYXBzICovCi0gICAgY2Fwc3N0ciA9IChnY2hhciAqKSBnX2Jhc2U2NF9kZWNvZGUgKGNhcHNlbmMsICZvdXRfbGVuKTsKLSAgICBvdXRjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHNzdHIpOwotICAgIGdfZnJlZSAoY2Fwc3N0cik7Ci0KLSAgICAvKiBwYXJzZSB2ZXJzaW9uICovCi0gICAgY2Fwc3ZlciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiY2Fwc3ZlcnNpb24iKTsKLSAgICBpZiAoY2Fwc3ZlcikgewotICAgICAgQ1YgPSBhdG9pIChjYXBzdmVyKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm8gdmVyc2lvbiwgYXNzdW1lIDAgKi8KLSAgICAgIENWID0gMDsKLSAgICB9Ci0gICAgLyogc3RvcmUgaW4gY2FjaGUgKi8KLSAgICBydHBnc3RkZXBheS0+Y3VycmVudF9DViA9IENWOwotICAgIGdzdF9jYXBzX3JlZiAob3V0Y2Fwcyk7Ci0gICAgc3RvcmVfY2FjaGUgKHJ0cGdzdGRlcGF5LCBDViwgb3V0Y2Fwcyk7Ci0KLSAgICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChkZXBheWxvYWQtPnNyY3BhZCwgb3V0Y2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAibm8gY2FwcyBnaXZlbiIpOwotICAgIHJ0cGdzdGRlcGF5LT5jdXJyZW50X0NWID0gLTE7Ci0gICAgcmVzID0gVFJVRTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVhZF9sZW5ndGggKEdzdFJ0cEdTVERlcGF5ICogcnRwZ3N0ZGVwYXksIGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgZ3VpbnQgKiBsZW5ndGgsIGd1aW50ICogc2tpcCkKLXsKLSAgZ3VpbnQgYiwgbGVuLCBvZmZzZXQ7Ci0KLSAgLyogc3RhcnQgcmVhZGluZyB0aGUgbGVuZ3RoLCB3ZSBuZWVkIHRoaXMgdG8gc2tpcCB0byB0aGUgZGF0YSBsYXRlciAqLwotICBsZW4gPSBvZmZzZXQgPSAwOwotICBkbyB7Ci0gICAgaWYgKG9mZnNldCA+PSBzaXplKQotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGIgPSBkYXRhW29mZnNldCsrXTsKLSAgICBsZW4gPSAobGVuIDw8IDcpIHwgKGIgJiAweDdmKTsKLSAgfSB3aGlsZSAoYiAmIDB4ODApOwotCi0gIC8qIGNoZWNrIHJlbWFpbmluZyBidWZmZXIgc2l6ZSAqLwotICBpZiAoc2l6ZSAtIG9mZnNldCA8IGxlbikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgKmxlbmd0aCA9IGxlbjsKLSAgKnNraXAgPSBvZmZzZXQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXJlYWRfY2FwcyAoR3N0UnRwR1NURGVwYXkgKiBydHBnc3RkZXBheSwgR3N0QnVmZmVyICogYnVmLCBndWludCAqIHNraXApCi17Ci0gIGd1aW50IG9mZnNldCwgbGVuZ3RoOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdGRlcGF5LCAiYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQsIG1hcC5zaXplKTsKLQotICBpZiAoIXJlYWRfbGVuZ3RoIChydHBnc3RkZXBheSwgbWFwLmRhdGEsIG1hcC5zaXplLCAmbGVuZ3RoLCAmb2Zmc2V0KSkKLSAgICBnb3RvIHRvb19zbWFsbDsKLQotICBpZiAobGVuZ3RoID09IDAgfHwgbWFwLmRhdGFbb2Zmc2V0ICsgbGVuZ3RoIC0gMV0gIT0gJ1wwJykKLSAgICBnb3RvIGludmFsaWRfYnVmZmVyOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdGRlcGF5LCAicGFyc2luZyBjYXBzICVzIiwgJm1hcC5kYXRhW29mZnNldF0pOwotCi0gIC8qIHBhcnNlIGFuZCBzdG9yZSBpbiBjYWNoZSAqLwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKChnY2hhciAqKSAmIG1hcC5kYXRhW29mZnNldF0pOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gICpza2lwID0gbGVuZ3RoICsgb2Zmc2V0OwotCi0gIHJldHVybiBjYXBzOwotCi10b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBnc3RkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiQnVmZmVyIHRvbyBzbWFsbC4iKSwgKE5VTEwpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1pbnZhbGlkX2J1ZmZlcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGdzdGRlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJjYXBzIHN0cmluZyBub3QgMC10ZXJtaW5hdGVkLiIpLCAoTlVMTCkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEV2ZW50ICoKLXJlYWRfZXZlbnQgKEdzdFJ0cEdTVERlcGF5ICogcnRwZ3N0ZGVwYXksIGd1aW50IHR5cGUsCi0gICAgR3N0QnVmZmVyICogYnVmLCBndWludCAqIHNraXApCi17Ci0gIGd1aW50IG9mZnNldCwgbGVuZ3RoOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0RXZlbnRUeXBlIGV0eXBlOwotICBnY2hhciAqZW5kOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdGRlcGF5LCAiYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQsIG1hcC5zaXplKTsKLQotICBpZiAoIXJlYWRfbGVuZ3RoIChydHBnc3RkZXBheSwgbWFwLmRhdGEsIG1hcC5zaXplLCAmbGVuZ3RoLCAmb2Zmc2V0KSkKLSAgICBnb3RvIHRvb19zbWFsbDsKLQotICBpZiAobGVuZ3RoID09IDApCi0gICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKLSAgLyogYmFja3dhcmQgY29tcGF0LCBvbGQgcGF5bG9hZGVyIGRpZCBub3QgcHV0IDAtYnl0ZSBhdCB0aGUgZW5kICovCi0gIGlmIChtYXAuZGF0YVtvZmZzZXQgKyBsZW5ndGggLSAxXSAhPSAnXDAnCi0gICAgICAmJiBtYXAuZGF0YVtvZmZzZXQgKyBsZW5ndGggLSAxXSAhPSAnOycpCi0gICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RkZXBheSwgInBhcnNpbmcgZXZlbnQgJXMiLCAmbWFwLmRhdGFbb2Zmc2V0XSk7Ci0KLSAgLyogcGFyc2UgKi8KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKChnY2hhciAqKSAmIG1hcC5kYXRhW29mZnNldF0sICZlbmQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIGlmIChzID09IE5VTEwpCi0gICAgZ290byBwYXJzZV9mYWlsZWQ7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSAxOgotICAgICAgZXR5cGUgPSBHU1RfRVZFTlRfVEFHOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgZXR5cGUgPSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU07Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICBldHlwZSA9IEdTVF9FVkVOVF9DVVNUT01fQk9USDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgIGV0eXBlID0gR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnb3RvIHVua25vd25fZXZlbnQ7Ci0gIH0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoZXR5cGUsIHMpOwotCi0gICpza2lwID0gbGVuZ3RoICsgb2Zmc2V0OwotCi0gIHJldHVybiBldmVudDsKLQotdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZ3N0ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIkJ1ZmZlciB0b28gc21hbGwuIiksIChOVUxMKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotaW52YWxpZF9idWZmZXI6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBnc3RkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiZXZlbnQgc3RyaW5nIG5vdCAwLXRlcm1pbmF0ZWQuIiksIChOVUxMKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotcGFyc2VfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBnc3RkZXBheSwgImNvdWxkIG5vdCBwYXJzZSBldmVudCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci11bmtub3duX2V2ZW50OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZ3N0ZGVwYXksICJ1bmtub3duIGV2ZW50IHR5cGUiKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdG9yZV9ldmVudCAoR3N0UnRwR1NURGVwYXkgKiBydHBnc3RkZXBheSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gZG9fcHVzaCA9IEZBTFNFOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKLSAgICB7Ci0gICAgICBHc3RUYWdMaXN0ICpvbGQsICp0YWdzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ3MpOwotCi0gICAgICBvbGQgPSBydHBnc3RkZXBheS0+dGFnczsKLSAgICAgIGlmICghb2xkIHx8ICFnc3RfdGFnX2xpc3RfaXNfZXF1YWwgKG9sZCwgdGFncykpIHsKLSAgICAgICAgZG9fcHVzaCA9IFRSVUU7Ci0gICAgICAgIGlmIChvbGQpCi0gICAgICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChvbGQpOwotICAgICAgICBydHBnc3RkZXBheS0+dGFncyA9IGdzdF90YWdfbGlzdF9yZWYgKHRhZ3MpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNOgotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgotICAgICAgLyogYWx3YXlzIHB1c2ggY3VzdG9tIGV2ZW50cyAqLwotICAgICAgZG9fcHVzaCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6Ci0gICAgewotICAgICAgZ2NoYXIgKm9sZDsKLSAgICAgIGNvbnN0IGdjaGFyICpzdHJlYW1faWQgPSBOVUxMOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0IChldmVudCwgJnN0cmVhbV9pZCk7Ci0KLSAgICAgIG9sZCA9IHJ0cGdzdGRlcGF5LT5zdHJlYW1faWQ7Ci0gICAgICBpZiAoIW9sZCB8fCBnX3N0cmNtcDAgKG9sZCwgc3RyZWFtX2lkKSkgewotICAgICAgICBkb19wdXNoID0gVFJVRTsKLSAgICAgICAgZ19mcmVlIChvbGQpOwotICAgICAgICBydHBnc3RkZXBheS0+c3RyZWFtX2lkID0gZ19zdHJkdXAgKHN0cmVhbV9pZCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIHVua25vd24gZXZlbnQsIGRvbid0IHB1c2ggKi8KLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmIChkb19wdXNoKQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwZ3N0ZGVwYXkpLT5zcmNwYWQsIGV2ZW50KTsKLSAgZWxzZQotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfZ3N0X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwR1NURGVwYXkgKnJ0cGdzdGRlcGF5OwotICBHc3RCdWZmZXIgKnN1YmJ1ZiwgKm91dGJ1ZiA9IE5VTEw7Ci0gIGdpbnQgcGF5bG9hZF9sZW47Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQgQ1YsIGZyYWdfb2Zmc2V0LCBhdmFpbCwgb2Zmc2V0OwotCi0gIHJ0cGdzdGRlcGF5ID0gR1NUX1JUUF9HU1RfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgaWYgKHBheWxvYWRfbGVuIDw9IDgpCi0gICAgZ290byBlbXB0eV9wYWNrZXQ7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAocnRwLT5idWZmZXIpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBnc3RkZXBheSwgIkRJU0NPTlQsIGNsZWFyIGFkYXB0ZXIiKTsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwZ3N0ZGVwYXktPmFkYXB0ZXIpOwotICB9Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIC8qIHN0cmlwIG9mZiBoZWFkZXIKLSAgICoKLSAgICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8Q3wgQ1YgIHxEfDB8MHwwfCAgICAgRVRZUEUgICAgIHwgIE1CWiAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnX29mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgZnJhZ19vZmZzZXQgPQotICAgICAgKHBheWxvYWRbNF0gPDwgMjQpIHwgKHBheWxvYWRbNV0gPDwgMTYpIHwgKHBheWxvYWRbNl0gPDwgOCkgfCBwYXlsb2FkWzddOwotCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBnc3RkZXBheS0+YWRhcHRlcik7Ci0gIGlmIChhdmFpbCAhPSBmcmFnX29mZnNldCkKLSAgICBnb3RvIHdyb25nX2ZyYWc7Ci0KLSAgLyogc3ViYnVmZmVyIHNraXBwaW5nIHRoZSA4IGhlYWRlciBieXRlcyAqLwotICBzdWJidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9zdWJidWZmZXIgKHJ0cCwgOCwgLTEpOwotICBnc3RfYWRhcHRlcl9wdXNoIChydHBnc3RkZXBheS0+YWRhcHRlciwgc3ViYnVmKTsKLQotICBvZmZzZXQgPSAwOwotICBpZiAoZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKSkgewotICAgIGd1aW50IGF2YWlsOwotICAgIEdzdENhcHMgKm91dGNhcHM7Ci0KLSAgICAvKiB0YWtlIHRoZSBidWZmZXIgKi8KLSAgICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwZ3N0ZGVwYXktPmFkYXB0ZXIpOwotICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBnc3RkZXBheS0+YWRhcHRlciwgYXZhaWwpOwotCi0gICAgQ1YgPSAocGF5bG9hZFswXSA+PiA0KSAmIDB4NzsKLQotICAgIGlmIChwYXlsb2FkWzBdICYgMHg4MCkgewotICAgICAgZ3VpbnQgc2l6ZTsKLQotICAgICAgLyogQyBiaXQsIHdlIGhhdmUgaW5saW5lIGNhcHMgKi8KLSAgICAgIG91dGNhcHMgPSByZWFkX2NhcHMgKHJ0cGdzdGRlcGF5LCBvdXRidWYsICZzaXplKTsKLSAgICAgIGlmIChvdXRjYXBzID09IE5VTEwpCi0gICAgICAgIGdvdG8gbm9fY2FwczsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZ3N0ZGVwYXksCi0gICAgICAgICAgImlubGluZSBjYXBzICV1LCBsZW5ndGggJXUsICUiIEdTVF9QVFJfRk9STUFULCBDViwgc2l6ZSwgb3V0Y2Fwcyk7Ci0KLSAgICAgIHN0b3JlX2NhY2hlIChydHBnc3RkZXBheSwgQ1YsIG91dGNhcHMpOwotCi0gICAgICAvKiBza2lwIGNhcHMgKi8KLSAgICAgIG9mZnNldCArPSBzaXplOwotICAgICAgYXZhaWwgLT0gc2l6ZTsKLSAgICB9Ci0gICAgaWYgKHBheWxvYWRbMV0pIHsKLSAgICAgIGd1aW50IHNpemU7Ci0gICAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICAgIC8qIHdlIGhhdmUgYW4gZXZlbnQgKi8KLSAgICAgIGV2ZW50ID0gcmVhZF9ldmVudCAocnRwZ3N0ZGVwYXksIHBheWxvYWRbMV0sIG91dGJ1ZiwgJnNpemUpOwotICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCi0gICAgICAgIGdvdG8gbm9fZXZlbnQ7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdGRlcGF5LAotICAgICAgICAgICJpbmxpbmUgZXZlbnQsIGxlbmd0aCAldSwgJSIgR1NUX1BUUl9GT1JNQVQsIHNpemUsIGV2ZW50KTsKLQotICAgICAgc3RvcmVfZXZlbnQgKHJ0cGdzdGRlcGF5LCBldmVudCk7Ci0KLSAgICAgIC8qIG5vIGJ1ZmZlciBhZnRlciBldmVudCAqLwotICAgICAgYXZhaWwgPSAwOwotICAgIH0KLQotICAgIGlmIChhdmFpbCkgewotICAgICAgaWYgKG9mZnNldCAhPSAwKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqdGVtcDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RkZXBheSwgInN1YiBidWZmZXI6IG9mZnNldCAldSwgc2l6ZSAldSIsIG9mZnNldCwKLSAgICAgICAgICAgIGF2YWlsKTsKLQotICAgICAgICB0ZW1wID0KLSAgICAgICAgICAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gKG91dGJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgb2Zmc2V0LCBhdmFpbCk7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICAgICAgb3V0YnVmID0gdGVtcDsKLSAgICAgIH0KLQotICAgICAgLyogc2VlIHdoYXQgY2FwcyB3ZSBuZWVkICovCi0gICAgICBpZiAoQ1YgIT0gcnRwZ3N0ZGVwYXktPmN1cnJlbnRfQ1YpIHsKLSAgICAgICAgLyogd2UgbmVlZCB0byBzd2l0Y2ggY2FwcywgY2hlY2sgaWYgd2UgaGF2ZSB0aGUgY2FwcyAqLwotICAgICAgICBpZiAoKG91dGNhcHMgPSBydHBnc3RkZXBheS0+Q1ZfY2FjaGVbQ1ZdKSA9PSBOVUxMKQotICAgICAgICAgIGdvdG8gbWlzc2luZ19jYXBzOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdGRlcGF5LAotICAgICAgICAgICAgIm5lZWQgY2FwcyBzd2l0Y2ggZnJvbSAldSB0byAldSwgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBydHBnc3RkZXBheS0+Y3VycmVudF9DViwgQ1YsIG91dGNhcHMpOwotCi0gICAgICAgIC8qIGFuZCBzZXQgY2FwcyAqLwotICAgICAgICBpZiAoZ3N0X3BhZF9zZXRfY2FwcyAoZGVwYXlsb2FkLT5zcmNwYWQsIG91dGNhcHMpKQotICAgICAgICAgIHJ0cGdzdGRlcGF5LT5jdXJyZW50X0NWID0gQ1Y7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXlsb2FkWzBdICYgMHg4KQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICAgIG91dGJ1ZiA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBnc3RkZXBheSksIG91dGJ1ZiwgMCk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotZW1wdHlfcGFja2V0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZ3N0ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIkVtcHR5IFBheWxvYWQuIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXdyb25nX2ZyYWc6Ci0gIHsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwZ3N0ZGVwYXktPmFkYXB0ZXIpOwotICAgIEdTVF9MT0dfT0JKRUNUIChydHBnc3RkZXBheSwgIndyb25nIGZyYWdtZW50LCBza2lwcGluZyIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19jYXBzOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBnc3RkZXBheSwgImZhaWxlZCB0byBwYXJzZSBjYXBzIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbm9fZXZlbnQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cGdzdGRlcGF5LCAiZmFpbGVkIHRvIHBhcnNlIGV2ZW50Iik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbWlzc2luZ19jYXBzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZ3N0ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIk1pc3NpbmcgY2FwcyAldS4iLCBDViksIChOVUxMKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZ3N0X2RlcGF5X2hhbmRsZV9ldmVudCAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBHU1REZXBheSAqcnRwZ3N0ZGVwYXk7Ci0KLSAgcnRwZ3N0ZGVwYXkgPSBHU1RfUlRQX0dTVF9ERVBBWSAoZGVwYXkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfcnRwX2dzdF9kZXBheV9yZXNldCAocnRwZ3N0ZGVwYXksIEZBTFNFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybgotICAgICAgR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+aGFuZGxlX2V2ZW50IChkZXBheSwgZXZlbnQpOwotfQotCi0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9nc3RfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwR1NURGVwYXkgKnJ0cGdzdGRlcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwZ3N0ZGVwYXkgPSBHU1RfUlRQX0dTVF9ERVBBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9ydHBfZ3N0X2RlcGF5X3Jlc2V0IChydHBnc3RkZXBheSwgVFJVRSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9nc3RfZGVwYXlfcmVzZXQgKHJ0cGdzdGRlcGF5LCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0KLWdib29sZWFuCi1nc3RfcnRwX2dzdF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGdzdGRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX01BUkdJTkFMLCBHU1RfVFlQRV9SVFBfR1NUX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwZ3N0ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI4ZjJjNi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGdzdGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTA+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfR1NUX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfR1NUX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9HU1RfREVQQVkgXAotICAoZ3N0X3J0cF9nc3RfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9HU1RfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfR1NUX0RFUEFZLEdzdFJ0cEdTVERlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9HU1RfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0dTVF9ERVBBWSxHc3RSdHBHU1REZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HU1RfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfR1NUX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HU1RfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0dTVF9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHU1REZXBheSBHc3RSdHBHU1REZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHU1REZXBheUNsYXNzIEdzdFJ0cEdTVERlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwR1NURGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ3VpbnQgY3VycmVudF9DVjsKLSAgR3N0Q2FwcyAqQ1ZfY2FjaGVbOF07Ci0KLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgZ2NoYXIgKnN0cmVhbV9pZDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwR1NURGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9nc3RfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2dzdF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9HU1RfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGdzdHBheS5jIGIvZ3N0L3J0cC9nc3RydHBnc3RwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU1MTFmNC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGdzdHBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgImdzdHJ0cGdzdHBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydHBfcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9ydHBfcGF5X2RlYnVnCi0KLS8qCi0gKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHxDfCBDViAgfER8MHwwfDB8ICAgICBFVFlQRSAgICAgfCAgTUJaICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ19vZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKgotICogQzogY2FwcyBpbmxpbmVkIGZsYWcKLSAqICAgV2hlbiBDIHNldCwgZmlyc3QgcGFydCBvZiBwYXlsb2FkIGNvbnRhaW5zIGNhcHMgZGVmaW5pdGlvbi4gQ2FwcyBkZWZpbml0aW9uCi0gKiAgIHN0YXJ0cyB3aXRoIHZhcmlhYmxlLWxlbmd0aCBsZW5ndGggcHJlZml4IGFuZCB0aGVuIGEgc3RyaW5nIG9mIHRoYXQgbGVuZ3RoLgotICogICB0aGUgbGVuZ3RoIGlzIGVuY29kZWQgaW4gYmlnIGVuZGlhbiA3IGJpdCBjaHVua3MsIHRoZSB0b3AgMSBiaXQgb2YgYSBieXRlCi0gKiAgIGlzIHRoZSBjb250aW51YXRpb24gbWFya2VyIGFuZCB0aGUgNyBuZXh0IGJpdHMgdGhlIGRhdGEuIEEgY29udGludWF0aW9uCi0gKiAgIG1hcmtlciBvZiAxIG1lYW5zIHRoYXQgdGhlIG5leHQgYnl0ZSBjb250YWlucyBtb3JlIGRhdGEuCi0gKgotICogQ1Y6IGNhcHMgdmVyc2lvbiwgMCA9IGNhcHMgZnJvbSBTRFAsIDEgLSA3IGlubGluZWQgY2FwcwotICogRDogZGVsdGEgdW5pdCBidWZmZXIKLSAqIEVUWVBFOiB0eXBlIG9mIGV2ZW50LiBQYXlsb2FkIGNvbnRhaW5zIHRoZSBldmVudCwgcHJlZml4ZWQgd2l0aCBhCi0gKiAgICAgICAgdmFyaWFibGUgbGVuZ3RoIGZpZWxkLgotICogICAwID0gTk8gZXZlbnQKLSAqICAgMSA9IEdTVF9FVkVOVF9UQUcKLSAqICAgMiA9IEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTQotICogICAzID0gR1NUX0VWRU5UX0NVU1RPTV9CT1RICi0gKiAgIDQgPSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUCi0gKi8KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZ3N0X3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9nc3RfcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhcHBsaWNhdGlvblwiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJYLUdTVFwiIikKLSAgICApOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9DT05GSUdfSU5URVJWQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9DT05GSUdfSU5URVJWQUwJCSAgICAgIDAKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9nc3RfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfZ3N0X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2dzdF9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmopOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfZ3N0X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nc3RfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2dzdF9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9nc3RfcGF5X3NpbmtfZXZlbnQgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotI2RlZmluZSBnc3RfcnRwX2dzdF9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwR1NUUGF5LCBnc3RfcnRwX2dzdF9wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc3RfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEdTVFBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9nc3RfcGF5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9nc3RfcGF5X2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2dzdF9wYXlfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIFBST1BfQ09ORklHX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjb25maWctaW50ZXJ2YWwiLAotICAgICAgICAgICJDYXBzL1RhZ3MgU2VuZCBJbnRlcnZhbCIsCi0gICAgICAgICAgIkludGVydmFsIGZvciBzZW5kaW5nIGNhcHMgYW5kIFRBRyBldmVudHMgaW4gc2Vjb25kcyAoMCA9IGRpc2FibGVkKSIsCi0gICAgICAgICAgMCwgMzYwMCwgREVGQVVMVF9DT05GSUdfSU5URVJWQUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX2dzdF9wYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfZ3N0X3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2dzdF9wYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgR1N0cmVhbWVyIHBheWxvYWRlciIsICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQgR1N0cmVhbWVyIGJ1ZmZlcnMgYXMgUlRQIHBhY2tldHMiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9nc3RfcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF9nc3RfcGF5X2hhbmRsZV9idWZmZXI7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zaW5rX2V2ZW50ID0gZ3N0X3J0cF9nc3RfcGF5X3NpbmtfZXZlbnQ7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfcGF5X2RlYnVnLCAicnRwZ3N0cGF5IiwgMCwKLSAgICAgICJydHBnc3RwYXkgZWxlbWVudCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc3RfcGF5X2luaXQgKEdzdFJ0cEdTVFBheSAqIHJ0cGdzdHBheSkKLXsKLSAgcnRwZ3N0cGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBnc3RwYXktPnBlbmRpbmdfYnVmZmVycyA9IE5VTEw7Ci0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwZ3N0cGF5KSwKLSAgICAgICJhcHBsaWNhdGlvbiIsIFRSVUUsICJYLUdTVCIsIDkwMDAwKTsKLSAgcnRwZ3N0cGF5LT5sYXN0X2NvbmZpZyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHJ0cGdzdHBheS0+dGFnbGlzdCA9IE5VTEw7Ci0gIHJ0cGdzdHBheS0+Y29uZmlnX2ludGVydmFsID0gREVGQVVMVF9DT05GSUdfSU5URVJWQUw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzdF9wYXlfcmVzZXQgKEdzdFJ0cEdTVFBheSAqIHJ0cGdzdHBheSwgZ2Jvb2xlYW4gZnVsbCkKLXsKLSAgcnRwZ3N0cGF5LT5sYXN0X2NvbmZpZyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChydHBnc3RwYXktPmFkYXB0ZXIpOwotICBydHBnc3RwYXktPmZsYWdzICY9IDB4NzA7Ci0gIHJ0cGdzdHBheS0+ZXR5cGUgPSAwOwotICBpZiAocnRwZ3N0cGF5LT5wZW5kaW5nX2J1ZmZlcnMpCi0gICAgZ19saXN0X2ZyZWVfZnVsbCAocnRwZ3N0cGF5LT5wZW5kaW5nX2J1ZmZlcnMsCi0gICAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl9saXN0X3VucmVmKTsKLSAgcnRwZ3N0cGF5LT5wZW5kaW5nX2J1ZmZlcnMgPSBOVUxMOwotICBpZiAoZnVsbCkgewotICAgIGlmIChydHBnc3RwYXktPnRhZ2xpc3QpCi0gICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHJ0cGdzdHBheS0+dGFnbGlzdCk7Ci0gICAgcnRwZ3N0cGF5LT50YWdsaXN0ID0gTlVMTDsKLSAgICBnX2ZyZWUgKHJ0cGdzdHBheS0+c3RyZWFtX2lkKTsKLSAgICBydHBnc3RwYXktPnN0cmVhbV9pZCA9IE5VTEw7Ci0gICAgcnRwZ3N0cGF5LT5jdXJyZW50X0NWID0gMDsKLSAgICBydHBnc3RwYXktPm5leHRfQ1YgPSAwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzdF9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFJ0cEdTVFBheSAqcnRwZ3N0cGF5OwotCi0gIHJ0cGdzdHBheSA9IEdTVF9SVFBfR1NUX1BBWSAob2JqKTsKLQotICBnc3RfcnRwX2dzdF9wYXlfcmVzZXQgKHJ0cGdzdHBheSwgVFJVRSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGdzdHBheS0+YWRhcHRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc3RfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBHU1RQYXkgKnJ0cGdzdHBheTsKLQotICBydHBnc3RwYXkgPSBHU1RfUlRQX0dTVF9QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NPTkZJR19JTlRFUlZBTDoKLSAgICAgIHJ0cGdzdHBheS0+Y29uZmlnX2ludGVydmFsID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc3RfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBHU1RQYXkgKnJ0cGdzdHBheTsKLQotICBydHBnc3RwYXkgPSBHU1RfUlRQX0dTVF9QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NPTkZJR19JTlRFUlZBTDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBnc3RwYXktPmNvbmZpZ19pbnRlcnZhbCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9nc3RfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEdTVFBheSAqcnRwZ3N0cGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwZ3N0cGF5ID0gR1NUX1JUUF9HU1RfUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9nc3RfcGF5X3Jlc2V0IChydHBnc3RwYXksIFRSVUUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfZ3N0X3BheV9yZXNldCAocnRwZ3N0cGF5LCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIFJUUF9IRUFERVJfTEVOIDEyCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nc3RfcGF5X2NyZWF0ZV9mcm9tX2FkYXB0ZXIgKEdzdFJ0cEdTVFBheSAqIHJ0cGdzdHBheSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBndWludCBhdmFpbCwgbXR1OwotICBndWludCBmcmFnX29mZnNldDsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdDsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwZ3N0cGF5LT5hZGFwdGVyKTsKLSAgaWYgKGF2YWlsID09IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIG10dSA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocnRwZ3N0cGF5KTsKLQotICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoKGF2YWlsIC8gKG10dSAtIChSVFBfSEVBREVSX0xFTiArIDgpKSkgKyAxKTsKLSAgZnJhZ19vZmZzZXQgPSAwOwotCi0gIHdoaWxlIChhdmFpbCkgewotICAgIGd1aW50IHRvd3JpdGU7Ci0gICAgZ3VpbnQ4ICpwYXlsb2FkOwotICAgIGd1aW50IHBheWxvYWRfbGVuOwotICAgIGd1aW50IHBhY2tldF9sZW47Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0gICAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotICAgIEdzdEJ1ZmZlciAqcGF5YnVmOwotCi0KLSAgICAvKiB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGxlbmdodCBvZiB0aGUgcGFja2V0ICovCi0gICAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAoOCArIGF2YWlsLCAwLCAwKTsKLQotICAgIC8qIGZpbGwgb25lIE1UVSBvciBhbGwgYXZhaWxhYmxlIGJ5dGVzICovCi0gICAgdG93cml0ZSA9IE1JTiAocGFja2V0X2xlbiwgbXR1KTsKLQotICAgIC8qIHRoaXMgaXMgdGhlIHBheWxvYWQgbGVuZ3RoICovCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuICh0b3dyaXRlLCAwLCAwKTsKLQotICAgIC8qIGNyZWF0ZSBidWZmZXIgdG8gaG9sZCB0aGUgaGVhZGVyICovCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlICg4LCAwLCAwKTsKLQotICAgIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLSAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZ3N0cGF5LCAibmV3IHBhY2tldCBsZW4gJXUsIGZyYWcgJXUiLCBwYWNrZXRfbGVuLAotICAgICAgICBmcmFnX29mZnNldCk7Ci0KLSAgICAvKgotICAgICAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfEN8IENWICB8RHwwfDB8MHwgICAgIEVUWVBFICAgICB8ICBNQlogICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdfb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKi8KLSAgICBwYXlsb2FkWzBdID0gcnRwZ3N0cGF5LT5mbGFnczsKLSAgICBwYXlsb2FkWzFdID0gcnRwZ3N0cGF5LT5ldHlwZTsKLSAgICBwYXlsb2FkWzJdID0gcGF5bG9hZFszXSA9IDA7Ci0gICAgcGF5bG9hZFs0XSA9IGZyYWdfb2Zmc2V0ID4+IDI0OwotICAgIHBheWxvYWRbNV0gPSBmcmFnX29mZnNldCA+PiAxNjsKLSAgICBwYXlsb2FkWzZdID0gZnJhZ19vZmZzZXQgPj4gODsKLSAgICBwYXlsb2FkWzddID0gZnJhZ19vZmZzZXQgJiAweGZmOwotCi0gICAgcGF5bG9hZCArPSA4OwotICAgIHBheWxvYWRfbGVuIC09IDg7Ci0KLSAgICBmcmFnX29mZnNldCArPSBwYXlsb2FkX2xlbjsKLSAgICBhdmFpbCAtPSBwYXlsb2FkX2xlbjsKLQotICAgIGlmIChhdmFpbCA9PSAwKQotICAgICAgZ3N0X3J0cF9idWZmZXJfc2V0X21hcmtlciAoJnJ0cCwgVFJVRSk7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICAvKiBjcmVhdGUgYSBuZXcgYnVmIHRvIGhvbGQgdGhlIHBheWxvYWQgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RwYXksICJ0YWtlICV1IGJ5dGVzIGZyb20gYWRhcHRlciIsIHBheWxvYWRfbGVuKTsKLSAgICBwYXlidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0IChydHBnc3RwYXktPmFkYXB0ZXIsIHBheWxvYWRfbGVuKTsKLQotICAgIC8qIGNyZWF0ZSBhIG5ldyBncm91cCB0byBob2xkIHRoZSBydHAgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCAqLwotICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBnc3RwYXkpLCBvdXRidWYsIHBheWJ1ZiwgMCk7Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgcGF5YnVmKTsKLQotICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gdGltZXN0YW1wOwotCi0gICAgLyogYW5kIGFkZCB0byBsaXN0ICovCi0gICAgZ3N0X2J1ZmZlcl9saXN0X2luc2VydCAobGlzdCwgLTEsIG91dGJ1Zik7Ci0gIH0KLQotICBydHBnc3RwYXktPmZsYWdzICY9IDB4NzA7Ci0gIHJ0cGdzdHBheS0+ZXR5cGUgPSAwOwotICBydHBnc3RwYXktPnBlbmRpbmdfYnVmZmVycyA9IGdfbGlzdF9hcHBlbmQgKHJ0cGdzdHBheS0+cGVuZGluZ19idWZmZXJzLCBsaXN0KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfZ3N0X3BheV9mbHVzaCAoR3N0UnRwR1NUUGF5ICogcnRwZ3N0cGF5LCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHTGlzdCAqaXRlcjsKLQotICBnc3RfcnRwX2dzdF9wYXlfY3JlYXRlX2Zyb21fYWRhcHRlciAocnRwZ3N0cGF5LCB0aW1lc3RhbXApOwotCi0gIGl0ZXIgPSBydHBnc3RwYXktPnBlbmRpbmdfYnVmZmVyczsKLSAgd2hpbGUgKGl0ZXIpIHsKLSAgICBHc3RCdWZmZXJMaXN0ICpsaXN0ID0gaXRlci0+ZGF0YTsKLQotICAgIHJ0cGdzdHBheS0+cGVuZGluZ19idWZmZXJzID0gaXRlciA9Ci0gICAgICAgIGdfbGlzdF9kZWxldGVfbGluayAocnRwZ3N0cGF5LT5wZW5kaW5nX2J1ZmZlcnMsIGl0ZXIpOwotCi0gICAgLyogcHVzaCB0aGUgd2hvbGUgYnVmZmVyIGxpc3QgYXQgb25jZSAqLwotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cGdzdHBheSksCi0gICAgICAgIGxpc3QpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotbWFrZV9kYXRhX2J1ZmZlciAoR3N0UnRwR1NUUGF5ICogcnRwZ3N0cGF5LCBnY2hhciAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIGd1aW50IHBsZW47Ci0gIGd1aW50OCAqcHRyOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgLyogY2FsY3VsYXRlIGxlbmd0aCAqLwotICBwbGVuID0gMTsKLSAgd2hpbGUgKHNpemUgPj4gKDcgKiBwbGVuKSkKLSAgICBwbGVuKys7Ci0KLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHBsZW4gKyBzaXplLCBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgcHRyID0gbWFwLmRhdGE7Ci0KLSAgLyogd3JpdGUgbGVuZ3RoICovCi0gIHdoaWxlIChwbGVuKSB7Ci0gICAgcGxlbi0tOwotICAgICpwdHIrKyA9ICgocGxlbiA+IDApID8gMHg4MCA6IDApIHwgKChzaXplID4+ICg3ICogcGxlbikpICYgMHg3Zik7Ci0gIH0KLSAgLyogY29weSBkYXRhICovCi0gIG1lbWNweSAocHRyLCBkYXRhLCBzaXplKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLQotICByZXR1cm4gb3V0YnVmOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9nc3RfcGF5X3NlbmRfY2FwcyAoR3N0UnRwR1NUUGF5ICogcnRwZ3N0cGF5LCBndWludDggY3YsIEdzdENhcHMgKiBjYXBzKQotewotICBnY2hhciAqY2Fwc3N0cjsKLSAgZ3VpbnQgY2Fwc2xlbjsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0KLSAgaWYgKHJ0cGdzdHBheS0+ZmxhZ3MgJiAoMSA8PCA3KSkKLSAgICByZXR1cm47Ci0KLSAgY2Fwc3N0ciA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7Ci0gIGNhcHNsZW4gPSBzdHJsZW4gKGNhcHNzdHIpOwotICAvKiBmb3IgMCBieXRlICovCi0gIGNhcHNsZW4rKzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RwYXksICJzZW5kaW5nIGNhcHM9JXMiLCBjYXBzc3RyKTsKLQotICAvKiBtYWtlIGEgZGF0YSBidWZmZXIgb2YgaXQgKi8KLSAgb3V0YnVmID0gbWFrZV9kYXRhX2J1ZmZlciAocnRwZ3N0cGF5LCBjYXBzc3RyLCBjYXBzbGVuKTsKLSAgZ19mcmVlIChjYXBzc3RyKTsKLQotICAvKiBzdG9yZSBpbiBhZGFwdGVyLCB3ZSBkb24ndCBmbHVzaCB5ZXQsIGJ1ZmZlciBtaWdodCBmb2xsb3cgKi8KLSAgcnRwZ3N0cGF5LT5mbGFncyA9ICgxIDw8IDcpIHwgKGN2IDw8IDQpOwotICBnc3RfYWRhcHRlcl9wdXNoIChydHBnc3RwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9nc3RfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJ0cEdTVFBheSAqcnRwZ3N0cGF5OwotICBnYm9vbGVhbiByZXM7Ci0gIGdjaGFyICpjYXBzc3RyLCAqY2Fwc2VuYywgKmNhcHN2ZXI7Ci0gIGd1aW50IGNhcHNsZW47Ci0KLSAgcnRwZ3N0cGF5ID0gR1NUX1JUUF9HU1RfUEFZIChwYXlsb2FkKTsKLQotICBjYXBzc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKLSAgY2Fwc2xlbiA9IHN0cmxlbiAoY2Fwc3N0cik7Ci0KLSAgLyogZW5jb2RlIHdpdGhvdXQgMCBieXRlICovCi0gIGNhcHNlbmMgPSBnX2Jhc2U2NF9lbmNvZGUgKChndWNoYXIgKikgY2Fwc3N0ciwgY2Fwc2xlbik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJjYXBzPSVzLCBjYXBzKGJhc2U2NCk9JXMiLCBjYXBzc3RyLCBjYXBzZW5jKTsKLSAgZ19mcmVlIChjYXBzc3RyKTsKLQotICAvKiBTZW5kIHRoZSBuZXcgY2FwcyAqLwotICBydHBnc3RwYXktPmN1cnJlbnRfQ1YgPSBydHBnc3RwYXktPm5leHRfQ1Y7Ci0gIHJ0cGdzdHBheS0+bmV4dF9DViA9IChydHBnc3RwYXktPm5leHRfQ1YgKyAxKSAmIDB4NzsKLSAgZ3N0X3J0cF9nc3RfcGF5X3NlbmRfY2FwcyAocnRwZ3N0cGF5LCBydHBnc3RwYXktPmN1cnJlbnRfQ1YsIGNhcHMpOwotCi0gIC8qIG1ha2UgY2FwcyBmb3IgU0RQICovCi0gIGNhcHN2ZXIgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHJ0cGdzdHBheS0+Y3VycmVudF9DVik7Ci0gIHJlcyA9Ci0gICAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgImNhcHMiLCBHX1RZUEVfU1RSSU5HLCBjYXBzZW5jLAotICAgICAgImNhcHN2ZXJzaW9uIiwgR19UWVBFX1NUUklORywgY2Fwc3ZlciwgTlVMTCk7Ci0gIGdfZnJlZSAoY2Fwc2VuYyk7Ci0gIGdfZnJlZSAoY2Fwc3Zlcik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZ3N0X3BheV9zZW5kX2V2ZW50IChHc3RSdHBHU1RQYXkgKiBydHBnc3RwYXksIGd1aW50IGV0eXBlLAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgZ2NoYXIgKmVzdHI7Ci0gIGd1aW50IGVsZW47Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotCi0gIC8qIENyZWF0ZSB0aGUgc3RhbmRhbG9uZSBjYXBzIHBhY2tldCBpZiBhbiBpbmxpbmVkIGNhcHMgd2FzIHBlbmRpbmcgKi8KLSAgZ3N0X3J0cF9nc3RfcGF5X2NyZWF0ZV9mcm9tX2FkYXB0ZXIgKHJ0cGdzdHBheSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0KLSAgZXN0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChzKTsKLSAgZWxlbiA9IHN0cmxlbiAoZXN0cik7Ci0gIC8qIGZvciAwIGJ5dGUgKi8KLSAgZWxlbisrOwotICBvdXRidWYgPSBtYWtlX2RhdGFfYnVmZmVyIChydHBnc3RwYXksIGVzdHIsIGVsZW4pOwotICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RwYXksICJzZW5kaW5nIGV2ZW50PSVzIiwgZXN0cik7Ci0gIGdfZnJlZSAoZXN0cik7Ci0KLSAgcnRwZ3N0cGF5LT5ldHlwZSA9IGV0eXBlOwotICBnc3RfYWRhcHRlcl9wdXNoIChydHBnc3RwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci0gIC8qIENyZWF0ZSB0aGUgZXZlbnQgcGFja2V0IG5vdyB0byBhdm9pZCBjb25mbGljdCB3aXRoIGRhdGEvY2FwcyBwYWNrZXRzICovCi0gIGdzdF9ydHBfZ3N0X3BheV9jcmVhdGVfZnJvbV9hZGFwdGVyIChydHBnc3RwYXksIEdTVF9DTE9DS19USU1FX05PTkUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfZ3N0X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0UnRwR1NUUGF5ICpydHBnc3RwYXk7Ci0gIGd1aW50IGV0eXBlID0gMDsKLQotICBydHBnc3RwYXkgPSBHU1RfUlRQX0dTVF9QQVkgKHBheWxvYWQpOwotCi0gIHJldCA9Ci0gICAgICBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAocGF5bG9hZCwKLSAgICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9ydHBfZ3N0X3BheV9yZXNldCAocnRwZ3N0cGF5LCBGQUxTRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9UQUc6ewotICAgICAgR3N0VGFnTGlzdCAqdGFnczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZ0YWdzKTsKLQotICAgICAgaWYgKGdzdF90YWdfbGlzdF9nZXRfc2NvcGUgKHRhZ3MpID09IEdTVF9UQUdfU0NPUEVfU1RSRUFNKSB7Ci0gICAgICAgIEdzdFRhZ0xpc3QgKm9sZDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RwYXksICJzdG9yaW5nIHN0cmVhbSB0YWdzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICAgICAgdGFncyk7Ci0gICAgICAgIGlmICgob2xkID0gcnRwZ3N0cGF5LT50YWdsaXN0KSkKLSAgICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKG9sZCk7Ci0gICAgICAgIHJ0cGdzdHBheS0+dGFnbGlzdCA9IGdzdF90YWdfbGlzdF9yZWYgKHRhZ3MpOwotICAgICAgfQotICAgICAgZXR5cGUgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNOgotICAgICAgZXR5cGUgPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0JPVEg6Ci0gICAgICBldHlwZSA9IDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6ewotICAgICAgY29uc3QgZ2NoYXIgKnN0cmVhbV9pZCA9IE5VTEw7Ci0KLSAgICAgIGlmIChydHBnc3RwYXktPnRhZ2xpc3QpCi0gICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAocnRwZ3N0cGF5LT50YWdsaXN0KTsKLSAgICAgIHJ0cGdzdHBheS0+dGFnbGlzdCA9IE5VTEw7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQgKGV2ZW50LCAmc3RyZWFtX2lkKTsKLSAgICAgIGlmIChzdHJlYW1faWQpIHsKLSAgICAgICAgZ19mcmVlIChydHBnc3RwYXktPnN0cmVhbV9pZCk7Ci0gICAgICAgIHJ0cGdzdHBheS0+c3RyZWFtX2lkID0gZ19zdHJkdXAgKHN0cmVhbV9pZCk7Ci0gICAgICB9Ci0gICAgICBldHlwZSA9IDQ7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBnc3RwYXksICJubyBldmVudCBmb3IgJXMiLAotICAgICAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgICBicmVhazsKLSAgfQotICBpZiAoZXR5cGUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RwYXksICJtYWtlIGV2ZW50IHR5cGUgJWQgZm9yICVzIiwKLSAgICAgICAgZXR5cGUsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgZ3N0X3J0cF9nc3RfcGF5X3NlbmRfZXZlbnQgKHJ0cGdzdHBheSwgZXR5cGUsIGV2ZW50KTsKLSAgICAvKiBEbyBub3Qgc2VuZCBzdHJlYW0tc3RhcnQgcmlnaHQgYXdheSBzaW5jZSBjYXBzL25ldy1zZWdtZW50IHdlcmUgbm90IHlldAotICAgICAgIHNlbnQsIHNvIG91ciBkYXRhIHdvdWxkIGJlIGNvbnNpZGVyZWQgaW52YWxpZCAqLwotICAgIGlmIChldHlwZSAhPSA0KSB7Ci0gICAgICAvKiBmbHVzaCB0aGUgYWRhcHRlciBpbW1lZGlhdGVseSAqLwotICAgICAgZ3N0X3J0cF9nc3RfcGF5X2ZsdXNoIChydHBnc3RwYXksIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgIH0KLSAgfQotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2dzdF9wYXlfc2VuZF9jb25maWcgKEdzdFJ0cEdTVFBheSAqIHJ0cGdzdHBheSwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0UGFkICpwYWQgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9TSU5LUEFEIChydHBnc3RwYXkpOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0RXZlbnQgKnRhZyA9IE5VTEw7Ci0gIEdzdEV2ZW50ICpzdHJlYW1fc3RhcnQgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdHBheSwgInRpbWUgdG8gc2VuZCBjb25maWciKTsKLSAgLyogU2VuZCB0YWdzICovCi0gIGlmIChydHBnc3RwYXktPnRhZ2xpc3QgJiYgIWdzdF90YWdfbGlzdF9pc19lbXB0eSAocnRwZ3N0cGF5LT50YWdsaXN0KSkKLSAgICB0YWcgPSBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X3JlZiAocnRwZ3N0cGF5LT50YWdsaXN0KSk7Ci0gIGlmICh0YWcpIHsKLSAgICAvKiBTZW5kIHN0YXJ0LXN0cmVhbSB0byBjbGVhciB0YWdzICovCi0gICAgaWYgKHJ0cGdzdHBheS0+c3RyZWFtX2lkKQotICAgICAgc3RyZWFtX3N0YXJ0ID0gZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHJ0cGdzdHBheS0+c3RyZWFtX2lkKTsKLSAgICBpZiAoc3RyZWFtX3N0YXJ0KSB7Ci0gICAgICBnc3RfcnRwX2dzdF9wYXlfc2VuZF9ldmVudCAocnRwZ3N0cGF5LCA0LCBzdHJlYW1fc3RhcnQpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChzdHJlYW1fc3RhcnQpOwotICAgIH0KLSAgICBnc3RfcnRwX2dzdF9wYXlfc2VuZF9ldmVudCAocnRwZ3N0cGF5LCAxLCB0YWcpOwotICAgIGdzdF9ldmVudF91bnJlZiAodGFnKTsKLSAgfQotICAvKiBzZW5kIGNhcHMgKi8KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgaWYgKGNhcHMpIHsKLSAgICBnc3RfcnRwX2dzdF9wYXlfc2VuZF9jYXBzIChydHBnc3RwYXksIHJ0cGdzdHBheS0+Y3VycmVudF9DViwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0gIHJ0cGdzdHBheS0+bGFzdF9jb25maWcgPSB0aW1lc3RhbXA7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2dzdF9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RSdHBHU1RQYXkgKnJ0cGdzdHBheTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICBydHBnc3RwYXkgPSBHU1RfUlRQX0dTVF9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHNlbmQgdGhlIGNhcHMgYW5kIHRhZ2xpc3Qgbm93ICovCi0gIGlmIChydHBnc3RwYXktPmNvbmZpZ19pbnRlcnZhbCA+IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBnc3RwYXksCi0gICAgICAgICJ0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFUICIsIGxhc3QgY29uZmlnICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSwgR1NUX1RJTUVfQVJHUyAocnRwZ3N0cGF5LT5sYXN0X2NvbmZpZykpOwotCi0gICAgaWYgKHRpbWVzdGFtcCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmCi0gICAgICAgIHJ0cGdzdHBheS0+bGFzdF9jb25maWcgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgZ3VpbnQ2NCBkaWZmOwotCi0gICAgICAvKiBjYWxjdWxhdGUgZGlmZiBiZXR3ZWVuIGxhc3QgU1BTL1BQUyBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICAgIGlmICh0aW1lc3RhbXAgPiBydHBnc3RwYXktPmxhc3RfY29uZmlnKQotICAgICAgICBkaWZmID0gdGltZXN0YW1wIC0gcnRwZ3N0cGF5LT5sYXN0X2NvbmZpZzsKLSAgICAgIGVsc2UKLSAgICAgICAgZGlmZiA9IDA7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGdzdHBheSwKLSAgICAgICAgICAiaW50ZXJ2YWwgc2luY2UgbGFzdCBjb25maWcgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkaWZmKSk7Ci0KLSAgICAgIC8qIGJpZ2dlciB0aGFuIGludGVydmFsLCBxdWV1ZSBTUFMvUFBTICovCi0gICAgICBpZiAoR1NUX1RJTUVfQVNfU0VDT05EUyAoZGlmZikgPj0gcnRwZ3N0cGF5LT5jb25maWdfaW50ZXJ2YWwpCi0gICAgICAgIGdzdF9ydHBfZ3N0X3BheV9zZW5kX2NvbmZpZyAocnRwZ3N0cGF5LCB0aW1lc3RhbXApOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfcnRwX2dzdF9wYXlfc2VuZF9jb25maWcgKHJ0cGdzdHBheSwgdGltZXN0YW1wKTsKLSAgICB9Ci0gIH0KLQotICAvKiBjYXBzIGFsd2F5cyBmcm9tIFNEUCBmb3Igbm93ICovCi0gIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKSkKLSAgICBydHBnc3RwYXktPmZsYWdzIHw9ICgxIDw8IDMpOwotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGdzdHBheS0+YWRhcHRlciwgYnVmZmVyKTsKLSAgcmV0ID0gZ3N0X3J0cF9nc3RfcGF5X2ZsdXNoIChydHBnc3RwYXksIHRpbWVzdGFtcCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfZ3N0X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGdzdHBheSIsCi0gICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9SVFBfR1NUX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGdzdHBheS5oIGIvZ3N0L3J0cC9nc3RydHBnc3RwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMyNzJiMi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGdzdHBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0dTVF9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9HU1RfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfR1NUX1BBWSBcCi0gIChnc3RfcnRwX2dzdF9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9HU1RfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0dTVF9QQVksR3N0UnRwR1NUUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9HU1RfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9HU1RfUEFZLEdzdFJ0cEdTVFBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9HU1RfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0dTVF9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0dTVF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0dTVF9QQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwR1NUUGF5IEdzdFJ0cEdTVFBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBHU1RQYXlDbGFzcyBHc3RSdHBHU1RQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBHU1RQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICBHTGlzdCAqcGVuZGluZ19idWZmZXJzOyAvKiBHc3RCdWZmZXJMaXN0ICovCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGd1aW50OCBmbGFnczsKLSAgZ3VpbnQ4IGV0eXBlOwotCi0gIGd1aW50OCBjdXJyZW50X0NWOyAvKiBDViBmaWVsZCBvZiBpbmNvbWluZyBjYXBzKi8KLSAgZ3VpbnQ4IG5leHRfQ1Y7Ci0KLSAgZ2NoYXIgKnN0cmVhbV9pZDsKLSAgR3N0VGFnTGlzdCAqdGFnbGlzdDsKLSAgZ3VpbnQgY29uZmlnX2ludGVydmFsOwotICBHc3RDbG9ja1RpbWUgbGFzdF9jb25maWc7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cEdTVFBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9nc3RfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9nc3RfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0dTVF9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjFkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBoMjYxZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwNDBjOS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjFkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMTQ+IFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGgyNjFkZXBheQotICogQHNlZV9hbHNvOiBydHBoMjYxcGF5Ci0gKgotICogRXh0cmFjdCBlbmNvZGVkIEguMjYxIHZpZGVvIGZyYW1lcyBmcm9tIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgNDU4Ny4KLSAqIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM0NTg3LnR4dAotICoKLSAqIFRoZSBkZXBheWxvYWRlciB0YWtlcyBhbiBSVFAgcGFja2V0IGFuZCBleHRyYWN0cyBpdHMgSC4yNjEgc3RyZWFtLiBJdAotICogYWdncmVnYXRlcyB0aGUgZXh0cmFjdGVkIHN0cmVhbSB1bnRpbCBhIGNvbXBsZXRlIGZyYW1lIGlzIHJlY2VpdmVkIGJlZm9yZQotICogaXQgcHVzaGVzIGl0IGRvd25zdHJlYW0uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHVkcHNyYyBjYXBzPSdhcHBsaWNhdGlvbi94LXJ0cCwgcGF5bG9hZD0zMScgISBydHBoMjYxZGVwYXkgISBhdmRlY19oMjYxICEgYXV0b3ZpZGVvc2luawotICogXXwgVGhpcyBleGFtcGxlIHBpcGVsaW5lIHdpbGwgZGVwYXlsb2FkIGFuZCBkZWNvZGUgYW4gUlRQIEguMjYxIHZpZGVvIHN0cmVhbS4KLSAqIFJlZmVyIHRvIHRoZSBydHBoMjYxcGF5IGV4YW1wbGUgdG8gY3JlYXRlIHRoZSBSVFAgc3RyZWFtLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlICJnc3RydHBoMjYxZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHBoMjYxcGF5LmgiICAgICAgLyogR3N0UnRwSDI2MVBheUhlYWRlciAqLwotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGgyNjFkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwaDI2MWRlcGF5X2RlYnVnKQotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IE5PX0xFRlRPVkVSID0gMHhGRjsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2MV9kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtaDI2MSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2MV9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9IMjYxX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkgyNjFcIjsgIgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYxXCIiKQotICAgICk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEgyNjFEZXBheSwgZ3N0X3J0cF9oMjYxX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfcnRwX2gyNjFfZGVwYXlfcGFyZW50X2NsYXNzCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9oMjYxX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwSDI2MURlcGF5ICpkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBnaW50IHBheWxvYWRfbGVuOwotICBndWludDggKnBheWxvYWQ7Ci0gIGNvbnN0IGd1aW50IGhlYWRlcl9sZW4gPSBHU1RfUlRQX0gyNjFfUEFZTE9BRF9IRUFERVJfTEVOOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0gIEdzdFJ0cEgyNjFQYXlIZWFkZXIgKmhlYWRlcjsKLQotICBkZXBheSA9IEdTVF9SVFBfSDI2MV9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgIkRpc2NvbnQgYnVmZmVyLCBmbHVzaGluZyBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGRlcGF5LT5hZGFwdGVyKTsKLSAgICBkZXBheS0+bGVmdG92ZXIgPSBOT19MRUZUT1ZFUjsKLSAgICBkZXBheS0+c3RhcnQgPSBGQUxTRTsKLSAgfQotCi0gIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuIChydHApOwotICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKHJ0cCk7Ci0KLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBpZiAocGF5bG9hZF9sZW4gPCBoZWFkZXJfbGVuICsgMSkgewotICAgIC8qIE11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYnl0ZSBwYXlsb2FkICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZXBheSwgIkRyb3BwaW5nIHBhY2tldCB3aXRoIGludmFsaWQgcGF5bG9hZCBsZW5ndGgiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGhlYWRlciA9IChHc3RSdHBIMjYxUGF5SGVhZGVyICopIHBheWxvYWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksCi0gICAgICAicGF5bG9hZF9sZW46ICVkLCBoZWFkZXJfbGVuOiAlZCwgc2JpdDogJWQsIGViaXQ6ICVkLCBtYXJrZXIgJWQiLAotICAgICAgcGF5bG9hZF9sZW4sIGhlYWRlcl9sZW4sIGhlYWRlci0+c2JpdCwgaGVhZGVyLT5lYml0LCBtYXJrZXIpOwotCi0gIHBheWxvYWQgKz0gaGVhZGVyX2xlbjsKLSAgcGF5bG9hZF9sZW4gLT0gaGVhZGVyX2xlbjsKLQotICBpZiAoIWRlcGF5LT5zdGFydCkgewotICAgIC8qIENoZWNrIGZvciBwaWN0dXJlIHN0YXJ0IGNvZGUgKi8KLSAgICBndWludDMyIGJpdHMgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQpIDw8IGhlYWRlci0+c2JpdDsKLSAgICBpZiAocGF5bG9hZF9sZW4gPiA0ICYmIGJpdHMgPj4gMTIgPT0gMHgxMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksICJGb3VuZCBwaWN0dXJlIHN0YXJ0IGNvZGUiKTsKLSAgICAgIGRlcGF5LT5zdGFydCA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAiTm8gcGljdHVyZSBzdGFydCBjb2RlIHlldCwgc2tpcHBpbmcgcGF5bG9hZCIpOwotICAgICAgZ290byBza2lwOwotICAgIH0KLSAgfQotCi0gIGlmIChoZWFkZXItPnNiaXQgIT0gMCkgewotICAgIC8qIFRha2UgdGhlIGxlZnRvdmVyIGZyb20gcHJldmlvdXMgcGFja2V0IGFuZCBtZXJnZSBpdCBhdCB0aGUgYmVnaW5uaW5nICovCi0gICAgcGF5bG9hZFswXSAmPSAweEZGID4+IGhlYWRlci0+c2JpdDsKLSAgICBpZiAoZGVwYXktPmxlZnRvdmVyICE9IE5PX0xFRlRPVkVSKSB7Ci0gICAgICAvKiBIYXBwZW5zIGlmIHNiaXQgaXMgc2V0IGZvciBmaXJzdCBwYWNrZXQgaW4gZnJhbWUuIFRoZW4gcHJldmlvdXMgYnl0ZQotICAgICAgICogaGFzIGFscmVhZHkgYmVlbiBmbHVzaGVkLiAqLwotICAgICAgcGF5bG9hZFswXSB8PSBkZXBheS0+bGVmdG92ZXI7Ci0gICAgfQotICAgIGRlcGF5LT5sZWZ0b3ZlciA9IE5PX0xFRlRPVkVSOwotICB9Ci0KLSAgaWYgKGhlYWRlci0+ZWJpdCA9PSAwKSB7Ci0gICAgLyogSC4yNjEgc3RyZWFtIGVuZHMgb24gYnl0ZSBib3VuZGFyeSwgdGFrZSBlbnRpcmUgcGFja2V0ICovCi0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAoZGVwYXktPmFkYXB0ZXIsCi0gICAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBoZWFkZXJfbGVuLCBwYXlsb2FkX2xlbikpOwotICB9IGVsc2UgewotICAgIC8qIFRha2UgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciB0aGUgbGFzdCBieXRlLCB3aGljaCB3aWxsIGJlIGtlcHQgdG8KLSAgICAgKiBtZXJnZSB3aXRoIG5leHQgcGFja2V0ICovCi0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAoZGVwYXktPmFkYXB0ZXIsCi0gICAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBoZWFkZXJfbGVuLAotICAgICAgICAgICAgcGF5bG9hZF9sZW4gLSAxKSk7Ci0gICAgZGVwYXktPmxlZnRvdmVyID0gcGF5bG9hZFtwYXlsb2FkX2xlbiAtIDFdICYgKDB4RkYgPDwgaGVhZGVyLT5lYml0KTsKLSAgfQotCi1za2lwOgotICBpZiAobWFya2VyKSB7Ci0gICAgaWYgKGRlcGF5LT5zdGFydCkgewotICAgICAgZ3VpbnQgYXZhaWw7Ci0KLSAgICAgIGlmIChkZXBheS0+bGVmdG92ZXIgIT0gTk9fTEVGVE9WRVIpIHsKLSAgICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEpOwotICAgICAgICBnc3RfYnVmZmVyX21lbXNldCAoYnVmLCAwLCBkZXBheS0+bGVmdG92ZXIsIDEpOwotICAgICAgICBnc3RfYWRhcHRlcl9wdXNoIChkZXBheS0+YWRhcHRlciwgYnVmKTsKLSAgICAgICAgZGVwYXktPmxlZnRvdmVyID0gTk9fTEVGVE9WRVI7Ci0gICAgICB9Ci0KLSAgICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZXBheS0+YWRhcHRlcik7Ci0gICAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoZGVwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLSAgICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0gICAgICAvKiBOb3RlIHRoYXQgdGhlIEkgZmxhZyBkb2VzIG5vdCBtZWFuIGludHJhIGZyYW1lLCBidXQgdGhhdCB0aGUgZW50aXJlCi0gICAgICAgKiBzdHJlYW0gaXMgaW50cmEgY29kZWQuICovCi0gICAgICBpZiAoaGVhZGVyLT5pKQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgICAgZWxzZQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksICJQdXNoaW5nIG91dCBhIGJ1ZmZlciBvZiAldSBieXRlcyIsIGF2YWlsKTsKLSAgICAgIGRlcGF5LT5zdGFydCA9IEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICBkZXBheS0+c3RhcnQgPSBUUlVFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBvdXRidWY7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9oMjYxX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNjYXBzOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC1oMjYxIik7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChmaWx0ZXIpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfaDI2MV9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEgyNjFEZXBheSAqZGVwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBkZXBheSA9IEdTVF9SVFBfSDI2MV9ERVBBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGRlcGF5LT5hZGFwdGVyKTsKLSAgICAgIGRlcGF5LT5zdGFydCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2MV9kZXBheV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBIMjYxRGVwYXkgKmRlcGF5OwotCi0gIGRlcGF5ID0gR1NUX1JUUF9IMjYxX0RFUEFZIChvYmplY3QpOwotCi0gIGlmIChkZXBheS0+YWRhcHRlcikgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlcGF5LT5hZGFwdGVyKTsKLSAgICBkZXBheS0+YWRhcHRlciA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2MV9kZXBheV9jbGFzc19pbml0IChHc3RSdHBIMjYxRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBnc3RlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjFfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9oMjYxX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEgyNjEgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIEgyNjEgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDQ1ODcpIiwKLSAgICAgICJTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2gyNjFfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2gyNjFfZGVwYXlfc2V0Y2FwczsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3J0cF9oMjYxX2RlcGF5X2Rpc3Bvc2U7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF9oMjYxX2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwaDI2MWRlcGF5X2RlYnVnLCAicnRwaDI2MWRlcGF5IiwgMCwKLSAgICAgICJIMjYxIFZpZGVvIFJUUCBEZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYxX2RlcGF5X2luaXQgKEdzdFJ0cEgyNjFEZXBheSAqIGRlcGF5KQotewotICBkZXBheS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgZGVwYXktPmxlZnRvdmVyID0gTk9fTEVGVE9WRVI7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2gyNjFfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBoMjYxZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfSDI2MV9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjFkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBoMjYxZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3ZjgxNy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjFkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9IMjYxX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfSDI2MV9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0gyNjFfREVQQVkgXAotICAoZ3N0X3J0cF9oMjYxX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2MV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9IMjYxX0RFUEFZLEdzdFJ0cEgyNjFEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2MV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2MV9ERVBBWSxHc3RSdHBIMjYxRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2MV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9IMjYxX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjYxX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9IMjYxX0RFUEFZKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBIMjYxRGVwYXkgR3N0UnRwSDI2MURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjFEZXBheUNsYXNzIEdzdFJ0cEgyNjFEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cEgyNjFEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLQotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBnYm9vbGVhbiBzdGFydDsKLSAgZ3VpbnQ4IGxlZnRvdmVyOwotfTsKLQotc3RydWN0IF9Hc3RSdHBIMjYxRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9oMjYxX2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9oMjYxX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9IMjYxX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjYxcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIwNDBiZS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjFwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwaDI2MXBheQotICogQHNlZV9hbHNvOiBydHBoMjYxZGVwYXkKLSAqCi0gKiBQYXlsb2FkIGVuY29kZWQgSC4yNjEgdmlkZW8gZnJhbWVzIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA0NTg3LgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzQ1ODcudHh0Ci0gKgotICogVGhlIHBheWxvYWRlciB0YWtlcyBhIEguMjYxIGZyYW1lLCBwYXJzZXMgaXQgYW5kIHNwbGl0cyBpdCBpbnRvIGZyYWdtZW50cwotICogb24gTUIgYm91bmRhcmllcyBpbiBvcmRlciB0byBtYXRjaCBjb25maWd1cmVkIE1UVSBzaXplLiBGb3IgZWFjaCBmcmFnbWVudAotICogYW4gUlRQIHBhY2tldCBpcyBjb25zdHJ1Y3RlZCB3aXRoIGFuIFJUUCBwYWNrZXQgaGVhZGVyIGZvbGxvd2VkIGJ5IHRoZQotICogZnJhZ21lbnQuIEluIGFkZGl0aW9uIHRoZSBwYXlsb2FkZXIgd2lsbCBtYWtlIHN1cmUgdGhlIHBhY2tldGl6ZWQgSC4yNjEKLSAqIHN0cmVhbSBhcHBlYXJzIGFzIGEgY29udGludW91cyBiaXQtc3RyZWFtIGFmdGVyIGRlcGFja2V0aXphdGlvbiBieSBzaGlmdGluZwotICogdGhlIGVuY29kZWQgYml0LXN0cmVhbSBvZiBhIGZyYW1lIHRvIGFsaWduIHdpdGggdGhlIGxhc3Qgc2lnbmlmaWNhbnQgYml0IG9mCi0gKiB0aGUgcHJldmlvdXMgZnJhbWUuIFRoaXMgaGVscHMgaW50ZXJvcGVyYWJpbGl0eSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUKLSAqIGVuY29kZXIgZG9lcyBub3QgcHJvZHVjZSBhIGNvbnRpbnVvdXMgYml0LXN0cmVhbSBidXQgdGhlIGRlY29kZXIgcmVxdWlyZXMKLSAqIGl0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBhdmVuY19oMjYxICEgcnRwaDI2MXBheSAhIHVkcHNpbmsKLSAqIF18IFRoaXMgd2lsbCBlbmNvZGUgYSB0ZXN0IHZpZGVvIGFuZCBwYXlsb2FkIGl0LiBSZWZlciB0byB0aGUgcnRwaDI2MWRlcGF5Ci0gKiBleGFtcGxlIHRvIGRlcGF5bG9hZCBhbmQgcGxheSB0aGUgUlRQIHN0cmVhbS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RydHBoMjYxcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBoMjYxcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBoMjYxcGF5X2RlYnVnKQotCi0jZGVmaW5lIEdTVF9SVFBfSEVBREVSX0xFTiAxMgotI2RlZmluZSBHU1RfUlRQX0gyNjFfUEFZTE9BRF9IRUFERVJfTEVOIDQKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2MV9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LWgyNjEiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjFfcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0gyNjFfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiSDI2MVwiOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkgyNjFcIiIpCi0gICAgKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwSDI2MVBheSwgZ3N0X3J0cF9oMjYxX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfcnRwX2gyNjFfcGF5X3BhcmVudF9jbGFzcwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDMyIG1iYTsKLSAgZ3VpbnQzMiBtdHlwZTsKLSAgZ3VpbnQzMiBxdWFudDsKLSAgZ2ludCBtdng7Ci0gIGdpbnQgbXZ5OwotICBndWludCBlbmRwb3M7Ci0gIGdpbnQgZ29ibjsKLX0gTWFjcm9ibG9jazsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgTWFjcm9ibG9jayBsYXN0OwotICBndWludCBzdGFydHBvczsKLSAgZ3VpbnQgZW5kcG9zOwotICBndWludDMyIGduOwotICBndWludDMyIGdxdWFudDsKLX0gR29iOwotCi0jZGVmaW5lIFBTQ19MRU4gMjAKLSNkZWZpbmUgVFJfTEVOIDUKLSNkZWZpbmUgUFRZUEVfTEVOIDYKLSNkZWZpbmUgR0JTQ19MRU4gMTYKLSNkZWZpbmUgR05fTEVOIDQKLSNkZWZpbmUgR1FVQU5UX0xFTiA1Ci0jZGVmaW5lIEdFSV9MRU4gMQotI2RlZmluZSBHU1BBUkVfTEVOIDgKLSNkZWZpbmUgTVFVQU5UX0xFTiA1Ci0jZGVmaW5lIE1BWF9OVU1fR09CIDEyCi0KLXR5cGVkZWYgZW51bQotewotICBQQVJTRV9FTkRfT0ZfQlVGRkVSID0gLTIsCi0gIFBBUlNFX0VSUk9SID0gLTEsCi0gIFBBUlNFX09LID0gMCwKLSAgUEFSU0VfRU5EX09GX0ZSQU1FLAotICBQQVJTRV9FTkRfT0ZfR09CLAotfSBQYXJzZVJldHVybjsKLQotCi0jZGVmaW5lIFNLSVBfQklUUyhicixuYml0cykgR19TVE1UX1NUQVJUIHsgICAgICBcCi0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9za2lwIChiciwgbmJpdHMpKSAgICAgICBcCi0gICAgICByZXR1cm4gUEFSU0VfRU5EX09GX0JVRkZFUjsgICAgICAgICAgICAgICBcCi0gIH0gR19TVE1UX0VORAotCi0jZGVmaW5lIEdFVF9CSVRTKGJyLHZhbCxuYml0cykgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgXAotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyIChiciwgdmFsLCBuYml0cykpIFwKLSAgICAgIHJldHVybiBQQVJTRV9FTkRfT0ZfQlVGRkVSOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gR19TVE1UX0VORAotCi0vKiBVbmNoZWNrZWQgc2luY2Ugd2UgcGVlayBvdXRzaWRlIHRoZSBidWZmZXIuIE9rIGJlY2F1c2Ugb2YgcGFkZGluZy4gKi8KLSNkZWZpbmUgUEVFS19CSVRTKGJyLHZhbCxuYml0cykgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqdmFsID0gZ3N0X2JpdF9yZWFkZXJfcGVla19iaXRzX3VpbnQxNl91bmNoZWNrZWQgKGJyLCBuYml0cyk7IFwKLSAgfSBHX1NUTVRfRU5ECi0KLQotI2RlZmluZSBNQkFfU1RVRkZJTkcgMzQKLSNkZWZpbmUgTUJBX1NUQVJUX0NPREUgMzUKLSNkZWZpbmUgTUJBX0xFTiAzNQotI2RlZmluZSBNQkFfV0lEIDQKLS8qIFtjb2RlLCBtYXNrLCBuYml0cywgbWJhXSAqLwotc3RhdGljIGNvbnN0IGd1aW50MTYgbWJhX3RhYmxlW01CQV9MRU5dW01CQV9XSURdID0gewotICB7MHg4MDAwLCAweDgwMDAsIDEsIDF9LAotICB7MHg2MDAwLCAweGUwMDAsIDMsIDJ9LAotICB7MHg0MDAwLCAweGUwMDAsIDMsIDN9LAotICB7MHgzMDAwLCAweGYwMDAsIDQsIDR9LAotICB7MHgyMDAwLCAweGYwMDAsIDQsIDV9LAotICB7MHgxODAwLCAweGY4MDAsIDUsIDZ9LAotICB7MHgxMDAwLCAweGY4MDAsIDUsIDd9LAotICB7MHgwZTAwLCAweGZlMDAsIDcsIDh9LAotICB7MHgwYzAwLCAweGZlMDAsIDcsIDl9LAotICB7MHgwYjAwLCAweGZmMDAsIDgsIDEwfSwKLSAgezB4MGEwMCwgMHhmZjAwLCA4LCAxMX0sCi0gIHsweDA5MDAsIDB4ZmYwMCwgOCwgMTJ9LAotICB7MHgwODAwLCAweGZmMDAsIDgsIDEzfSwKLSAgezB4MDcwMCwgMHhmZjAwLCA4LCAxNH0sCi0gIHsweDA2MDAsIDB4ZmYwMCwgOCwgMTV9LAotICB7MHgwNWMwLCAweGZmYzAsIDEwLCAxNn0sCi0gIHsweDA1ODAsIDB4ZmZjMCwgMTAsIDE3fSwKLSAgezB4MDU0MCwgMHhmZmMwLCAxMCwgMTh9LAotICB7MHgwNTAwLCAweGZmYzAsIDEwLCAxOX0sCi0gIHsweDA0YzAsIDB4ZmZjMCwgMTAsIDIwfSwKLSAgezB4MDQ4MCwgMHhmZmMwLCAxMCwgMjF9LAotICB7MHgwNDYwLCAweGZmZTAsIDExLCAyMn0sCi0gIHsweDA0NDAsIDB4ZmZlMCwgMTEsIDIzfSwKLSAgezB4MDQyMCwgMHhmZmUwLCAxMSwgMjR9LAotICB7MHgwNDAwLCAweGZmZTAsIDExLCAyNX0sCi0gIHsweDAzZTAsIDB4ZmZlMCwgMTEsIDI2fSwKLSAgezB4MDNjMCwgMHhmZmUwLCAxMSwgMjd9LAotICB7MHgwM2EwLCAweGZmZTAsIDExLCAyOH0sCi0gIHsweDAzODAsIDB4ZmZlMCwgMTEsIDI5fSwKLSAgezB4MDM2MCwgMHhmZmUwLCAxMSwgMzB9LAotICB7MHgwMzQwLCAweGZmZTAsIDExLCAzMX0sCi0gIHsweDAzMjAsIDB4ZmZlMCwgMTEsIDMyfSwKLSAgezB4MDMwMCwgMHhmZmUwLCAxMSwgMzN9LAotICB7MHgwMWUwLCAweGZmZTAsIDExLCBNQkFfU1RVRkZJTkd9LAotICB7MHgwMDAxLCAweGZmZmYsIDE2LCBNQkFfU1RBUlRfQ09ERX0sCi19OwotCi0jZGVmaW5lIE1UWVBFX0lOVFJBICAgICgxIDw8IDApCi0jZGVmaW5lIE1UWVBFX0lOVEVSICAgICgxIDw8IDEpCi0jZGVmaW5lIE1UWVBFX01DICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIE1UWVBFX0ZJTCAgICAgICgxIDw8IDMpCi0jZGVmaW5lIE1UWVBFX01RVUFOVCAgICgxIDw8IDQpCi0jZGVmaW5lIE1UWVBFX01WRCAgICAgICgxIDw8IDUpCi0jZGVmaW5lIE1UWVBFX0NCUCAgICAgICgxIDw8IDYpCi0jZGVmaW5lIE1UWVBFX1RDT0VGRiAgICgxIDw8IDcpCi0jZGVmaW5lIE1UWVBFX0xFTiAxMAotI2RlZmluZSBNVFlQRV9XSUQgNAotLyogW2NvZGUsIG1hc2ssIG5iaXRzLCBmbGFnc10gKi8KLXN0YXRpYyBjb25zdCBndWludDE2IG10eXBlX3RhYmxlW01UWVBFX0xFTl1bTVRZUEVfV0lEXSA9IHsKLSAgezB4ODAwMCwgMHg4MDAwLCAxLCBNVFlQRV9JTlRFUiB8IE1UWVBFX0NCUCB8IE1UWVBFX1RDT0VGRn0sCi0gIHsweDQwMDAsIDB4YzAwMCwgMiwKLSAgICAgIE1UWVBFX0lOVEVSIHwgTVRZUEVfTUMgfCBNVFlQRV9GSUwgfCBNVFlQRV9NVkQgfCBNVFlQRV9DQlAgfAotICAgICAgICBNVFlQRV9UQ09FRkZ9LAotICB7MHgyMDAwLCAweGUwMDAsIDMsIE1UWVBFX0lOVEVSIHwgTVRZUEVfTUMgfCBNVFlQRV9GSUwgfCBNVFlQRV9NVkR9LAotICB7MHgxMDAwLCAweGYwMDAsIDQsIE1UWVBFX0lOVFJBIHwgTVRZUEVfVENPRUZGfSwKLSAgezB4MDgwMCwgMHhmODAwLCA1LCBNVFlQRV9JTlRFUiB8IE1UWVBFX01RVUFOVCB8IE1UWVBFX0NCUCB8IE1UWVBFX1RDT0VGRn0sCi0gIHsweDA0MDAsIDB4ZmMwMCwgNiwKLSAgICAgIE1UWVBFX0lOVEVSIHwgTVRZUEVfTUMgfCBNVFlQRV9GSUwgfCBNVFlQRV9NUVVBTlQgfCBNVFlQRV9NVkQgfAotICAgICAgICBNVFlQRV9DQlAgfCBNVFlQRV9UQ09FRkZ9LAotICB7MHgwMjAwLCAweGZlMDAsIDcsIE1UWVBFX0lOVFJBIHwgTVRZUEVfTVFVQU5UIHwgTVRZUEVfVENPRUZGfSwKLSAgezB4MDEwMCwgMHhmZjAwLCA4LAotICAgICAgTVRZUEVfSU5URVIgfCBNVFlQRV9NQyB8IE1UWVBFX01WRCB8IE1UWVBFX0NCUCB8IE1UWVBFX1RDT0VGRn0sCi0gIHsweDAwODAsIDB4ZmY4MCwgOSwgTVRZUEVfSU5URVIgfCBNVFlQRV9NQyB8IE1UWVBFX01WRH0sCi0gIHsweDAwNDAsIDB4ZmZjMCwgMTAsCi0gICAgICBNVFlQRV9JTlRFUiB8IE1UWVBFX01DIHwgTVRZUEVfTVFVQU5UIHwgTVRZUEVfTVZEIHwgTVRZUEVfQ0JQIHwKLSAgICAgICAgTVRZUEVfVENPRUZGfSwKLX07Ci0KLSNkZWZpbmUgTVZEX0xFTiAzMgotI2RlZmluZSBNVkRfV0lEIDUKLS8qIFtjb2RlLCBtYXNrLCBuYml0cywgbXZkMSwgbXZkMl0gKi8KLXN0YXRpYyBjb25zdCBndWludDE2IG12ZF90YWJsZVtNVkRfTEVOXVtNVkRfV0lEXSA9IHsKLSAgezB4ODAwMCwgMHg4MDAwLCAxLCAwLCAwfSwKLSAgezB4NjAwMCwgMHhlMDAwLCAzLCAtMSwgLTF9LAotICB7MHg0MDAwLCAweGUwMDAsIDMsIDEsIDF9LAotICB7MHgzMDAwLCAweGYwMDAsIDQsIC0yLCAzMH0sCi0gIHsweDIwMDAsIDB4ZjAwMCwgNCwgMiwgLTMwfSwKLSAgezB4MTgwMCwgMHhmODAwLCA1LCAtMywgMjl9LAotICB7MHgxMDAwLCAweGY4MDAsIDUsIDMsIC0yOX0sCi0gIHsweDBlMDAsIDB4ZmUwMCwgNywgLTQsIDI4fSwKLSAgezB4MGMwMCwgMHhmZTAwLCA3LCA0LCAtMjh9LAotICB7MHgwNzAwLCAweGZmMDAsIDgsIC03LCAyNX0sCi0gIHsweDA5MDAsIDB4ZmYwMCwgOCwgLTYsIDI2fSwKLSAgezB4MGIwMCwgMHhmZjAwLCA4LCAtNSwgMjd9LAotICB7MHgwYTAwLCAweGZmMDAsIDgsIDUsIC0yN30sCi0gIHsweDA4MDAsIDB4ZmYwMCwgOCwgNiwgLTI2fSwKLSAgezB4MDYwMCwgMHhmZjAwLCA4LCA3LCAtMjV9LAotICB7MHgwNGMwLCAweGZmYzAsIDEwLCAtMTAsIDIyfSwKLSAgezB4MDU0MCwgMHhmZmMwLCAxMCwgLTksIDIzfSwKLSAgezB4MDVjMCwgMHhmZmMwLCAxMCwgLTgsIDI0fSwKLSAgezB4MDU4MCwgMHhmZmMwLCAxMCwgOCwgLTI0fSwKLSAgezB4MDUwMCwgMHhmZmMwLCAxMCwgOSwgLTIzfSwKLSAgezB4MDQ4MCwgMHhmZmMwLCAxMCwgMTAsIC0yMn0sCi0gIHsweDAzMjAsIDB4ZmZlMCwgMTEsIC0xNiwgMTZ9LAotICB7MHgwMzYwLCAweGZmZTAsIDExLCAtMTUsIDE3fSwKLSAgezB4MDNhMCwgMHhmZmUwLCAxMSwgLTE0LCAxOH0sCi0gIHsweDAzZTAsIDB4ZmZlMCwgMTEsIC0xMywgMTl9LAotICB7MHgwNDIwLCAweGZmZTAsIDExLCAtMTIsIDIwfSwKLSAgezB4MDQ2MCwgMHhmZmUwLCAxMSwgLTExLCAyMX0sCi0gIHsweDA0NDAsIDB4ZmZlMCwgMTEsIDExLCAtMjF9LAotICB7MHgwNDAwLCAweGZmZTAsIDExLCAxMiwgLTIwfSwKLSAgezB4MDNjMCwgMHhmZmUwLCAxMSwgMTMsIC0xOX0sCi0gIHsweDAzODAsIDB4ZmZlMCwgMTEsIDE0LCAtMTh9LAotICB7MHgwMzQwLCAweGZmZTAsIDExLCAxNSwgLTE3fSwKLX07Ci0KLSNkZWZpbmUgQ0JQX0xFTiA2MwotLyogW2NvZGUsIG1hc2ssIG5iaXRzLCBjYnBdICovCi1zdGF0aWMgY29uc3QgZ3VpbnQxNiBjYnBfdGFibGVbQ0JQX0xFTl1bNF0gPSB7Ci0gIHsweGUwMDAsIDB4ZTAwMCwgMywgNjB9LAotICB7MHhkMDAwLCAweGYwMDAsIDQsIDR9LAotICB7MHhjMDAwLCAweGYwMDAsIDQsIDh9LAotICB7MHhiMDAwLCAweGYwMDAsIDQsIDE2fSwKLSAgezB4YTAwMCwgMHhmMDAwLCA0LCAzMn0sCi0gIHsweDk4MDAsIDB4ZjgwMCwgNSwgMTJ9LAotICB7MHg5MDAwLCAweGY4MDAsIDUsIDQ4fSwKLSAgezB4ODgwMCwgMHhmODAwLCA1LCAyMH0sCi0gIHsweDgwMDAsIDB4ZjgwMCwgNSwgNDB9LAotICB7MHg3ODAwLCAweGY4MDAsIDUsIDI4fSwKLSAgezB4NzAwMCwgMHhmODAwLCA1LCA0NH0sCi0gIHsweDY4MDAsIDB4ZjgwMCwgNSwgNTJ9LAotICB7MHg2MDAwLCAweGY4MDAsIDUsIDU2fSwKLSAgezB4NTgwMCwgMHhmODAwLCA1LCAxfSwKLSAgezB4NTAwMCwgMHhmODAwLCA1LCA2MX0sCi0gIHsweDQ4MDAsIDB4ZjgwMCwgNSwgMn0sCi0gIHsweDQwMDAsIDB4ZjgwMCwgNSwgNjJ9LAotICB7MHgzYzAwLCAweGZjMDAsIDYsIDI0fSwKLSAgezB4MzgwMCwgMHhmYzAwLCA2LCAzNn0sCi0gIHsweDM0MDAsIDB4ZmMwMCwgNiwgM30sCi0gIHsweDMwMDAsIDB4ZmMwMCwgNiwgNjN9LAotICB7MHgyZTAwLCAweGZlMDAsIDcsIDV9LAotICB7MHgyYzAwLCAweGZlMDAsIDcsIDl9LAotICB7MHgyYTAwLCAweGZlMDAsIDcsIDE3fSwKLSAgezB4MjgwMCwgMHhmZTAwLCA3LCAzM30sCi0gIHsweDI2MDAsIDB4ZmUwMCwgNywgNn0sCi0gIHsweDI0MDAsIDB4ZmUwMCwgNywgMTB9LAotICB7MHgyMjAwLCAweGZlMDAsIDcsIDE4fSwKLSAgezB4MjAwMCwgMHhmZTAwLCA3LCAzNH0sCi0gIHsweDFmMDAsIDB4ZmYwMCwgOCwgN30sCi0gIHsweDFlMDAsIDB4ZmYwMCwgOCwgMTF9LAotICB7MHgxZDAwLCAweGZmMDAsIDgsIDE5fSwKLSAgezB4MWMwMCwgMHhmZjAwLCA4LCAzNX0sCi0gIHsweDFiMDAsIDB4ZmYwMCwgOCwgMTN9LAotICB7MHgxYTAwLCAweGZmMDAsIDgsIDQ5fSwKLSAgezB4MTkwMCwgMHhmZjAwLCA4LCAyMX0sCi0gIHsweDE4MDAsIDB4ZmYwMCwgOCwgNDF9LAotICB7MHgxNzAwLCAweGZmMDAsIDgsIDE0fSwKLSAgezB4MTYwMCwgMHhmZjAwLCA4LCA1MH0sCi0gIHsweDE1MDAsIDB4ZmYwMCwgOCwgMjJ9LAotICB7MHgxNDAwLCAweGZmMDAsIDgsIDQyfSwKLSAgezB4MTMwMCwgMHhmZjAwLCA4LCAxNX0sCi0gIHsweDEyMDAsIDB4ZmYwMCwgOCwgNTF9LAotICB7MHgxMTAwLCAweGZmMDAsIDgsIDIzfSwKLSAgezB4MTAwMCwgMHhmZjAwLCA4LCA0M30sCi0gIHsweDBmMDAsIDB4ZmYwMCwgOCwgMjV9LAotICB7MHgwZTAwLCAweGZmMDAsIDgsIDM3fSwKLSAgezB4MGQwMCwgMHhmZjAwLCA4LCAyNn0sCi0gIHsweDBjMDAsIDB4ZmYwMCwgOCwgMzh9LAotICB7MHgwYjAwLCAweGZmMDAsIDgsIDI5fSwKLSAgezB4MGEwMCwgMHhmZjAwLCA4LCA0NX0sCi0gIHsweDA5MDAsIDB4ZmYwMCwgOCwgNTN9LAotICB7MHgwODAwLCAweGZmMDAsIDgsIDU3fSwKLSAgezB4MDcwMCwgMHhmZjAwLCA4LCAzMH0sCi0gIHsweDA2MDAsIDB4ZmYwMCwgOCwgNDZ9LAotICB7MHgwNTAwLCAweGZmMDAsIDgsIDU0fSwKLSAgezB4MDQwMCwgMHhmZjAwLCA4LCA1OH0sCi0gIHsweDAzODAsIDB4ZmY4MCwgOSwgMzF9LAotICB7MHgwMzAwLCAweGZmODAsIDksIDQ3fSwKLSAgezB4MDI4MCwgMHhmZjgwLCA5LCA1NX0sCi0gIHsweDAyMDAsIDB4ZmY4MCwgOSwgNTl9LAotICB7MHgwMTgwLCAweGZmODAsIDksIDI3fSwKLSAgezB4MDEwMCwgMHhmZjgwLCA5LCAzOX0sCi19OwotCi0jZGVmaW5lIFRDT0VGRl9FT0IgMHhmZmZmCi0jZGVmaW5lIFRDT0VGRl9FU0MgMHhmZmZlCi0jZGVmaW5lIFRDT0VGRl9MRU4gNjUKLS8qIFtjb2RlLCBtYXNrLCBuYml0cywgcnVuLCBsZXZlbF0gKi8KLXN0YXRpYyBjb25zdCBndWludDE2IHRjb2VmZl90YWJsZVtUQ09FRkZfTEVOXVs1XSA9IHsKLSAgezB4ODAwMCwgMHhjMDAwLCAyLCBUQ09FRkZfRU9CLCAwfSwgICAvKiBOb3QgYXZhaWxhYmxlIGZvciBmaXJzdCBjb2VmZiAqLwotICAvKiB7MHg4MDAwLCAweDgwMDAsICAyLCAgMCwgIDF9LCAqLy8qIEF2YWlsYWJsZSBvbmx5IGZvciBmaXJzdCBJbnRlciBjb2VmZiAqLwotICB7MHhjMDAwLCAweGMwMDAsIDMsIDAsIDF9LCAgICAvKiBOb3QgYXZhaWxhYmxlIGZvciBmaXJzdCBjb2VmZiAqLwotICB7MHg2MDAwLCAweGUwMDAsIDQsIDEsIDF9LAotICB7MHg0MDAwLCAweGYwMDAsIDUsIDAsIDJ9LAotICB7MHg1MDAwLCAweGYwMDAsIDUsIDIsIDF9LAotICB7MHgyODAwLCAweGY4MDAsIDYsIDAsIDN9LAotICB7MHgzODAwLCAweGY4MDAsIDYsIDMsIDF9LAotICB7MHgzMDAwLCAweGY4MDAsIDYsIDQsIDF9LAotICB7MHgwNDAwLCAweGZjMDAsIDYsIFRDT0VGRl9FU0MsIDB9LAotICB7MHgxODAwLCAweGZjMDAsIDcsIDEsIDJ9LAotICB7MHgxYzAwLCAweGZjMDAsIDcsIDUsIDF9LAotICB7MHgxNDAwLCAweGZjMDAsIDcsIDYsIDF9LAotICB7MHgxMDAwLCAweGZjMDAsIDcsIDcsIDF9LAotICB7MHgwYzAwLCAweGZlMDAsIDgsIDAsIDR9LAotICB7MHgwODAwLCAweGZlMDAsIDgsIDIsIDJ9LAotICB7MHgwZTAwLCAweGZlMDAsIDgsIDgsIDF9LAotICB7MHgwYTAwLCAweGZlMDAsIDgsIDksIDF9LAotICB7MHgyNjAwLCAweGZmMDAsIDksIDAsIDV9LAotICB7MHgyMTAwLCAweGZmMDAsIDksIDAsIDZ9LAotICB7MHgyNTAwLCAweGZmMDAsIDksIDEsIDN9LAotICB7MHgyNDAwLCAweGZmMDAsIDksIDMsIDJ9LAotICB7MHgyNzAwLCAweGZmMDAsIDksIDEwLCAxfSwKLSAgezB4MjMwMCwgMHhmZjAwLCA5LCAxMSwgMX0sCi0gIHsweDIyMDAsIDB4ZmYwMCwgOSwgMTIsIDF9LAotICB7MHgyMDAwLCAweGZmMDAsIDksIDEzLCAxfSwKLSAgezB4MDI4MCwgMHhmZmMwLCAxMSwgMCwgN30sCi0gIHsweDAzMDAsIDB4ZmZjMCwgMTEsIDEsIDR9LAotICB7MHgwMmMwLCAweGZmYzAsIDExLCAyLCAzfSwKLSAgezB4MDNjMCwgMHhmZmMwLCAxMSwgNCwgMn0sCi0gIHsweDAyNDAsIDB4ZmZjMCwgMTEsIDUsIDJ9LAotICB7MHgwMzgwLCAweGZmYzAsIDExLCAxNCwgMX0sCi0gIHsweDAzNDAsIDB4ZmZjMCwgMTEsIDE1LCAxfSwKLSAgezB4MDIwMCwgMHhmZmMwLCAxMSwgMTYsIDF9LAotICB7MHgwMWQwLCAweGZmZjAsIDEzLCAwLCA4fSwKLSAgezB4MDE4MCwgMHhmZmYwLCAxMywgMCwgOX0sCi0gIHsweDAxMzAsIDB4ZmZmMCwgMTMsIDAsIDEwfSwKLSAgezB4MDEwMCwgMHhmZmYwLCAxMywgMCwgMTF9LAotICB7MHgwMWIwLCAweGZmZjAsIDEzLCAxLCA1fSwKLSAgezB4MDE0MCwgMHhmZmYwLCAxMywgMiwgNH0sCi0gIHsweDAxYzAsIDB4ZmZmMCwgMTMsIDMsIDN9LAotICB7MHgwMTIwLCAweGZmZjAsIDEzLCA0LCAzfSwKLSAgezB4MDFlMCwgMHhmZmYwLCAxMywgNiwgMn0sCi0gIHsweDAxNTAsIDB4ZmZmMCwgMTMsIDcsIDJ9LAotICB7MHgwMTEwLCAweGZmZjAsIDEzLCA4LCAyfSwKLSAgezB4MDFmMCwgMHhmZmYwLCAxMywgMTcsIDF9LAotICB7MHgwMWEwLCAweGZmZjAsIDEzLCAxOCwgMX0sCi0gIHsweDAxOTAsIDB4ZmZmMCwgMTMsIDE5LCAxfSwKLSAgezB4MDE3MCwgMHhmZmYwLCAxMywgMjAsIDF9LAotICB7MHgwMTYwLCAweGZmZjAsIDEzLCAyMSwgMX0sCi0gIHsweDAwZDAsIDB4ZmZmOCwgMTQsIDAsIDEyfSwKLSAgezB4MDBjOCwgMHhmZmY4LCAxNCwgMCwgMTN9LAotICB7MHgwMGMwLCAweGZmZjgsIDE0LCAwLCAxNH0sCi0gIHsweDAwYjgsIDB4ZmZmOCwgMTQsIDAsIDE1fSwKLSAgezB4MDBiMCwgMHhmZmY4LCAxNCwgMSwgNn0sCi0gIHsweDAwYTgsIDB4ZmZmOCwgMTQsIDEsIDd9LAotICB7MHgwMGEwLCAweGZmZjgsIDE0LCAyLCA1fSwKLSAgezB4MDA5OCwgMHhmZmY4LCAxNCwgMywgNH0sCi0gIHsweDAwOTAsIDB4ZmZmOCwgMTQsIDUsIDN9LAotICB7MHgwMDg4LCAweGZmZjgsIDE0LCA5LCAyfSwKLSAgezB4MDA4MCwgMHhmZmY4LCAxNCwgMTAsIDJ9LAotICB7MHgwMGY4LCAweGZmZjgsIDE0LCAyMiwgMX0sCi0gIHsweDAwZjAsIDB4ZmZmOCwgMTQsIDIzLCAxfSwKLSAgezB4MDBlOCwgMHhmZmY4LCAxNCwgMjQsIDF9LAotICB7MHgwMGUwLCAweGZmZjgsIDE0LCAyNSwgMX0sCi0gIHsweDAwZDgsIDB4ZmZmOCwgMTQsIDI2LCAxfSwKLX07Ci0KLXN0YXRpYyBQYXJzZVJldHVybgotZGVjb2RlX21iYSAoR3N0Qml0UmVhZGVyICogYnIsIGdpbnQgKiBtYmEpCi17Ci0gIGdpbnQgaTsKLSAgZ3VpbnQxNiBjb2RlOwotCi0gICptYmEgPSAtMTsKLSAgZG8gewotICAgIFBFRUtfQklUUyAoYnIsICZjb2RlLCAxNik7Ci0gICAgZm9yIChpID0gMDsgaSA8IE1CQV9MRU47IGkrKykgewotICAgICAgaWYgKChjb2RlICYgbWJhX3RhYmxlW2ldWzFdKSA9PSBtYmFfdGFibGVbaV1bMF0pIHsKLSAgICAgICAgKm1iYSA9IG1iYV90YWJsZVtpXVszXTsKLQotICAgICAgICBpZiAoKm1iYSA9PSBNQkFfU1RBUlRfQ09ERSkKLSAgICAgICAgICByZXR1cm4gUEFSU0VfRU5EX09GX0dPQjsKLSAgICAgICAgU0tJUF9CSVRTIChiciwgbWJhX3RhYmxlW2ldWzJdKTsKLSAgICAgICAgaWYgKCptYmEgIT0gTUJBX1NUVUZGSU5HKQotICAgICAgICAgIHJldHVybiBQQVJTRV9PSzsKLSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUgKCptYmEgPT0gTUJBX1NUVUZGSU5HKTsKLQotICAvKiAweDAgaW5kaWNhdGVzIGVuZCBvZiBmcmFtZSBzaW5jZSB3ZSBhcHBlbmRlZCAwLWJ5dGVzICovCi0gIGlmIChjb2RlID09IDB4MCkKLSAgICByZXR1cm4gUEFSU0VfRU5EX09GX0ZSQU1FOwotCi0gIHJldHVybiBQQVJTRV9FUlJPUjsKLX0KLQotc3RhdGljIFBhcnNlUmV0dXJuCi1kZWNvZGVfbXR5cGUgKEdzdEJpdFJlYWRlciAqIGJyLCBndWludCAqIG10eXBlKQotewotICBnaW50IGk7Ci0gIGd1aW50MTYgY29kZTsKLQotICBQRUVLX0JJVFMgKGJyLCAmY29kZSwgMTYpOwotICBmb3IgKGkgPSAwOyBpIDwgTVRZUEVfTEVOOyBpKyspIHsKLSAgICBpZiAoKGNvZGUgJiBtdHlwZV90YWJsZVtpXVsxXSkgPT0gbXR5cGVfdGFibGVbaV1bMF0pIHsKLSAgICAgIFNLSVBfQklUUyAoYnIsIG10eXBlX3RhYmxlW2ldWzJdKTsKLSAgICAgICptdHlwZSA9IG10eXBlX3RhYmxlW2ldWzNdOwotICAgICAgcmV0dXJuIFBBUlNFX09LOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBQQVJTRV9FUlJPUjsKLX0KLQotc3RhdGljIFBhcnNlUmV0dXJuCi1kZWNvZGVfbXZkIChHc3RCaXRSZWFkZXIgKiBiciwgZ2ludCAqIG12ZDEsIGdpbnQgKiBtdmQyKQotewotICBnaW50IGk7Ci0gIGd1aW50MTYgY29kZTsKLQotICBQRUVLX0JJVFMgKGJyLCAmY29kZSwgMTYpOwotICBmb3IgKGkgPSAwOyBpIDwgTVZEX0xFTjsgaSsrKSB7Ci0gICAgaWYgKChjb2RlICYgbXZkX3RhYmxlW2ldWzFdKSA9PSBtdmRfdGFibGVbaV1bMF0pIHsKLSAgICAgIFNLSVBfQklUUyAoYnIsIG12ZF90YWJsZVtpXVsyXSk7Ci0gICAgICAqbXZkMSA9IChnaW50MTYpIG12ZF90YWJsZVtpXVszXTsKLSAgICAgICptdmQyID0gKGdpbnQxNikgbXZkX3RhYmxlW2ldWzRdOwotICAgICAgcmV0dXJuIFBBUlNFX09LOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBQQVJTRV9FUlJPUjsKLX0KLQotc3RhdGljIFBhcnNlUmV0dXJuCi1kZWNvZGVfY2JwIChHc3RCaXRSZWFkZXIgKiBiciwgZ3VpbnQgKiBjYnApCi17Ci0gIGdpbnQgaTsKLSAgZ3VpbnQxNiBjb2RlOwotCi0gIFBFRUtfQklUUyAoYnIsICZjb2RlLCAxNik7Ci0gIGZvciAoaSA9IDA7IGkgPCBDQlBfTEVOOyBpKyspIHsKLSAgICBpZiAoKGNvZGUgJiBjYnBfdGFibGVbaV1bMV0pID09IGNicF90YWJsZVtpXVswXSkgewotICAgICAgU0tJUF9CSVRTIChiciwgY2JwX3RhYmxlW2ldWzJdKTsKLSAgICAgICpjYnAgPSBjYnBfdGFibGVbaV1bM107Ci0gICAgICByZXR1cm4gUEFSU0VfT0s7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFBBUlNFX0VSUk9SOwotfQotCi1zdGF0aWMgUGFyc2VSZXR1cm4KLWRlY29kZV90Y29lZmYgKEdzdEJpdFJlYWRlciAqIGJyLCBndWludCBtdHlwZSkKLXsKLSAgZ2ludCBpOwotICBndWludDE2IGNvZGU7Ci0gIGdib29sZWFuIGVvYjsKLQotICAvKiBTcGVjaWFsIGhhbmRsaW5nIG9mIGZpcnN0IGNvZWZmICovCi0gIGlmIChtdHlwZSAmIE1UWVBFX0lOVEVSKSB7Ci0gICAgLyogSW50ZXIsIGRpZmZlcmVudCB2bGMgc2luY2UgRU9CIGlzIG5vdCBhbGxvd2VkICovCi0gICAgUEVFS19CSVRTIChiciwgJmNvZGUsIDE2KTsKLSAgICBpZiAoY29kZSAmIDB4ODAwMCkgewotICAgICAgU0tJUF9CSVRTIChiciwgMik7Ci0gICAgICBHU1RfVFJBQ0UgKCJ0Y29lZmYgZmlyc3QgaW50ZXIgc3BlY2lhbCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBGYWxsdGhyb3VnaC4gTGV0IHRoZSBmaXJzdCBjb2VmZiBiZSBoYW5kbGVkIGxpa2Ugb3RoZXIgY29lZmZzIHNpbmNlCi0gICAgICAgKiB0aGUgdmxjIGlzIHRoZSBzYW1lIGFzIGxvbmcgYXMgdGhlIGZpcnN0IGJpdCBpcyBub3Qgc2V0LiAqLwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvKiBJbnRyYSwgZmlyc3QgY29lZmYgaXMgZml4ZWQgOC1iaXQgKi8KLSAgICBHU1RfVFJBQ0UgKCJ0Y29lZmYgZmlyc3QgaW50cmEgc3BlY2lhbCIpOwotICAgIFNLSVBfQklUUyAoYnIsIDgpOwotICB9Ci0KLSAgLyogQmxvY2sgbXVzdCBlbmQgd2l0aCBFT0IuICovCi0gIGVvYiA9IEZBTFNFOwotICB3aGlsZSAoIWVvYikgewotICAgIFBFRUtfQklUUyAoYnIsICZjb2RlLCAxNik7Ci0gICAgZm9yIChpID0gMDsgaSA8IFRDT0VGRl9MRU47IGkrKykgewotICAgICAgaWYgKChjb2RlICYgdGNvZWZmX3RhYmxlW2ldWzFdKSA9PSB0Y29lZmZfdGFibGVbaV1bMF0pIHsKLSAgICAgICAgR1NUX1RSQUNFICgidGNvZWZmIHZsY1slZF0sIHJ1bj0lZCwgbGV2ZWw9JWQiLCBpLCB0Y29lZmZfdGFibGVbaV1bM10sCi0gICAgICAgICAgICB0Y29lZmZfdGFibGVbaV1bNF0pOwotICAgICAgICBTS0lQX0JJVFMgKGJyLCB0Y29lZmZfdGFibGVbaV1bMl0pOwotICAgICAgICBpZiAodGNvZWZmX3RhYmxlW2ldWzNdID09IFRDT0VGRl9FT0IpIHsKLSAgICAgICAgICBlb2IgPSBUUlVFOwotICAgICAgICB9IGVsc2UgaWYgKHRjb2VmZl90YWJsZVtpXVszXSA9PSBUQ09FRkZfRVNDKSB7Ci0jaWYgMAotICAgICAgICAgIGd1aW50MTYgdmFsOwotICAgICAgICAgIHZhbCA9IGdzdF9iaXRfcmVhZGVyX3BlZWtfYml0c191aW50MTZfdW5jaGVja2VkIChiciwgNiArIDgpOwotICAgICAgICAgIEdTVF9UUkFDRSAoImVzYyBydW49JWQsIGxldmVsPSVkIiwgdmFsID4+IDgsIChnaW50OCkgKHZhbCAmIDB4ZmYpKTsKLSNlbmRpZgotICAgICAgICAgIFNLSVBfQklUUyAoYnIsIDYgKyA4KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPT0gVENPRUZGX0xFTikKLSAgICAgIC8qIE5vIG1hdGNoaW5nIFZMQyAqLwotICAgICAgcmV0dXJuIFBBUlNFX0VSUk9SOwotICB9Ci0KLSAgcmV0dXJuIFBBUlNFX09LOwotfQotCi1zdGF0aWMgZ2ludAotZmluZF9waWN0dXJlX2hlYWRlcl9vZmZzZXQgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGdzaXplIHNpemUpCi17Ci0gIGdpbnQgaTsKLSAgZ3VpbnQzMiB2YWw7Ci0KLSAgaWYgKHNpemUgPCA0KQotICAgIHJldHVybiAtMTsKLQotICB2YWwgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKGRhdGEpOwotICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgaWYgKCh2YWwgPj4gKDEyIC0gaSkpID09IDB4MTApCi0gICAgICByZXR1cm4gaTsKLSAgfQotCi0gIHJldHVybiAtMTsKLX0KLQotc3RhdGljIFBhcnNlUmV0dXJuCi1wYXJzZV9waWN0dXJlX2hlYWRlciAoR3N0UnRwSDI2MVBheSAqIHBheSwgR3N0Qml0UmVhZGVyICogYnIsIGdpbnQgKiBudW1fZ29iKQotewotICBndWludDMyIHZhbDsKLQotICBHRVRfQklUUyAoYnIsICZ2YWwsIFBTQ19MRU4pOwotICBpZiAodmFsICE9IDB4MTApCi0gICAgcmV0dXJuIFBBUlNFX0VSUk9SOwotICBTS0lQX0JJVFMgKGJyLCBUUl9MRU4pOwotICBHRVRfQklUUyAoYnIsICZ2YWwsIFBUWVBFX0xFTik7Ci0gICpudW1fZ29iID0gKHZhbCAmIDB4MDQpID09IDAgPyAzIDogMTI7Ci0KLSAgcmV0dXJuIFBBUlNFX09LOwotfQotCi1zdGF0aWMgUGFyc2VSZXR1cm4KLXBhcnNlX2dvYl9oZWFkZXIgKEdzdFJ0cEgyNjFQYXkgKiBwYXksIEdzdEJpdFJlYWRlciAqIGJyLCBHb2IgKiBnb2IpCi17Ci0gIGd1aW50MzIgdmFsOwotCi0gIEdFVF9CSVRTIChiciwgJnZhbCwgR0JTQ19MRU4pOwotICBpZiAodmFsICE9IDB4MDEpCi0gICAgcmV0dXJuIFBBUlNFX0VSUk9SOwotICBHRVRfQklUUyAoYnIsICZnb2ItPmduLCBHTl9MRU4pOwotICBHU1RfVFJBQ0VfT0JKRUNUIChwYXksICJQYXJzaW5nIEdPQiAlZCIsIGdvYi0+Z24pOwotCi0gIEdFVF9CSVRTIChiciwgJmdvYi0+Z3F1YW50LCBHUVVBTlRfTEVOKTsKLSAgR1NUX1RSQUNFX09CSkVDVCAocGF5LCAiR1FVQU5UICVkIiwgZ29iLT5ncXVhbnQpOwotICBHRVRfQklUUyAoYnIsICZ2YWwsIEdFSV9MRU4pOwotICB3aGlsZSAodmFsICE9IDApIHsKLSAgICBTS0lQX0JJVFMgKGJyLCBHU1BBUkVfTEVOKTsKLSAgICBHRVRfQklUUyAoYnIsICZ2YWwsIEdFSV9MRU4pOwotICB9Ci0KLSAgcmV0dXJuIFBBUlNFX09LOwotfQotCi1zdGF0aWMgUGFyc2VSZXR1cm4KLXBhcnNlX21iIChHc3RSdHBIMjYxUGF5ICogcGF5LCBHc3RCaXRSZWFkZXIgKiBiciwgY29uc3QgTWFjcm9ibG9jayAqIHByZXYsCi0gICAgTWFjcm9ibG9jayAqIG1iKQotewotICBnaW50IG1iYV9kaWZmOwotICBndWludCBjYnA7Ci0gIFBhcnNlUmV0dXJuIHJldDsKLQotICBjYnAgPSAweDNmOwotICBtYi0+cXVhbnQgPSBwcmV2LT5xdWFudDsKLQotICBpZiAoKHJldCA9IGRlY29kZV9tYmEgKGJyLCAmbWJhX2RpZmYpKSAhPSBQQVJTRV9PSykKLSAgICByZXR1cm4gcmV0OwotICBtYi0+bWJhID0gcHJldi0+bWJhID09IDAgPyBtYmFfZGlmZiA6IHByZXYtPm1iYSArIG1iYV9kaWZmOwotICBHU1RfVFJBQ0VfT0JKRUNUIChwYXksICJQYXJzZSBNQkEgJWQgKG1iYV9kaWZmICVkKSIsIG1iLT5tYmEsIG1iYV9kaWZmKTsKLQotICBpZiAoKHJldCA9IGRlY29kZV9tdHlwZSAoYnIsICZtYi0+bXR5cGUpKSAhPSBQQVJTRV9PSykKLSAgICByZXR1cm4gcmV0OwotICBHU1RfVFJBQ0VfT0JKRUNUIChwYXksCi0gICAgICAiTVRZUEU6IGludGVyICVkLCBtYyAlZCwgZmlsICVkLCBtcXVhbnQgJWQsIG12ZCAlZCwgY2JwICVkLCB0Y29lZmYgJWQiLAotICAgICAgKG1iLT5tdHlwZSAmIE1UWVBFX0lOVEVSKSAhPSAwLCAobWItPm10eXBlICYgTVRZUEVfTUMpICE9IDAsCi0gICAgICAobWItPm10eXBlICYgTVRZUEVfRklMKSAhPSAwLCAobWItPm10eXBlICYgTVRZUEVfTVFVQU5UKSAhPSAwLAotICAgICAgKG1iLT5tdHlwZSAmIE1UWVBFX01WRCkgIT0gMCwgKG1iLT5tdHlwZSAmIE1UWVBFX0NCUCkgIT0gMCwKLSAgICAgIChtYi0+bXR5cGUgJiBNVFlQRV9UQ09FRkYpICE9IDApOwotCi0gIGlmIChtYi0+bXR5cGUgJiBNVFlQRV9NUVVBTlQpIHsKLSAgICBHRVRfQklUUyAoYnIsICZtYi0+cXVhbnQsIE1RVUFOVF9MRU4pOwotICAgIEdTVF9UUkFDRV9PQkpFQ1QgKHBheSwgIk1RVUFOVDogJWQiLCBtYi0+cXVhbnQpOwotICB9Ci0KLSAgaWYgKG1iLT5tdHlwZSAmIE1UWVBFX01WRCkgewotICAgIGdpbnQgaSwgcG12WzJdLCBtdlsyXTsKLQotICAgIGlmIChtYi0+bWJhID09IDEgfHwgbWItPm1iYSA9PSAxMiB8fCBtYi0+bWJhID09IDIzIHx8IG1iYV9kaWZmICE9IDEgfHwKLSAgICAgICAgKHByZXYtPm10eXBlICYgTVRZUEVfSU5URVIpID09IDApIHsKLSAgICAgIHBtdlswXSA9IDA7Ci0gICAgICBwbXZbMV0gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBwbXZbMF0gPSBwcmV2LT5tdng7Ci0gICAgICBwbXZbMV0gPSBwcmV2LT5tdnk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIGdpbnQgbXZkMSwgbXZkMjsKLSAgICAgIGlmICgocmV0ID0gZGVjb2RlX212ZCAoYnIsICZtdmQxLCAmbXZkMikpICE9IFBBUlNFX09LKQotICAgICAgICByZXR1cm4gcmV0OwotICAgICAgaWYgKEFCUyAocG12W2ldICsgbXZkMSkgPD0gMTUpCi0gICAgICAgIG12W2ldID0gcG12W2ldICsgbXZkMTsKLSAgICAgIGVsc2UKLSAgICAgICAgbXZbaV0gPSBwbXZbaV0gKyBtdmQyOwotICAgIH0KLSAgICBtYi0+bXZ4ID0gbXZbMF07Ci0gICAgbWItPm12eSA9IG12WzFdOwotICB9IGVsc2UgewotICAgIG1iLT5tdnggPSAwOwotICAgIG1iLT5tdnkgPSAwOwotICB9Ci0KLSAgaWYgKG1iLT5tdHlwZSAmIE1UWVBFX0NCUCkgewotICAgIGlmICgocmV0ID0gZGVjb2RlX2NicCAoYnIsICZjYnApKSAhPSBQQVJTRV9PSykKLSAgICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICAvKiBCbG9jayBsYXllciAqLwotICBpZiAobWItPm10eXBlICYgTVRZUEVfVENPRUZGKSB7Ci0gICAgZ2ludCBibG9jazsKLSAgICBmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCA2OyBibG9jaysrKSB7Ci0gICAgICBpZiAoY2JwICYgKDEgPDwgKDUgLSBibG9jaykpKSB7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKHBheSwgIkRlY29kZSBUQ09FRkYgZm9yIGJsb2NrICVkIiwgYmxvY2spOwotICAgICAgICBpZiAoKHJldCA9IGRlY29kZV90Y29lZmYgKGJyLCBtYi0+bXR5cGUpKSAhPSBQQVJTRV9PSykKLSAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIG1iLT5lbmRwb3MgPSBnc3RfYml0X3JlYWRlcl9nZXRfcG9zIChicik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogUGFyc2UgbWFjcm9ibG9ja3MgdW50aWwgdGhlIG5leHQgTUIgdGhhdCBleGNlZWRzIG1heHBvcy4gQXQgbGVhc3Qgb25lIE1CIGlzCi0gKiBpbmNsdWRlZCBldmVuIGlmIGl0IGV4Y2VlZHMgbWF4cG9zLiBSZXR1cm5zIGVuZHBvcyBvZiBsYXN0IGluY2x1ZGVkIE1CLiAqLwotc3RhdGljIFBhcnNlUmV0dXJuCi1wYXJzZV9tYl91bnRpbF9wb3MgKEdzdFJ0cEgyNjFQYXkgKiBwYXksIEdzdEJpdFJlYWRlciAqIGJyLCBHb2IgKiBnb2IsCi0gICAgZ3VpbnQgKiBlbmRwb3MpCi17Ci0gIFBhcnNlUmV0dXJuIHJldDsKLSAgZ2ludCBjb3VudCA9IDA7Ci0gIGdib29sZWFuIHN0b3AgPSBGQUxTRTsKLSAgZ3VpbnQgbWF4cG9zID0gKmVuZHBvczsKLSAgTWFjcm9ibG9jayBtYjsKLQotICBHU1RfTE9HX09CSkVDVCAocGF5LCAiUGFyc2UgdW50aWwgcG9zICV1LCBzdGFydCBhdCBwb3MgJXUsIGdvYm4gJWQsIG1iYSAlZCIsCi0gICAgICBtYXhwb3MsIGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKGJyKSwgZ29iLT5nbiwgZ29iLT5sYXN0Lm1iYSk7Ci0KLSAgd2hpbGUgKCFzdG9wKSB7Ci0gICAgcmV0ID0gcGFyc2VfbWIgKHBheSwgYnIsICZnb2ItPmxhc3QsICZtYik7Ci0KLSAgICBzd2l0Y2ggKHJldCkgewotICAgICAgY2FzZSBQQVJTRV9PSzoKLSAgICAgICAgaWYgKG1iLmVuZHBvcyA+IG1heHBvcyAmJiBjb3VudCA+IDApIHsKLSAgICAgICAgICAvKiBEb24ndCBpbmNsdWRlIGN1cnJlbnQgTUIgKi8KLSAgICAgICAgICBzdG9wID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBVcGRhdGUgdG8gaW5jbHVkZSBjdXJyZW50IE1CICovCi0gICAgICAgICAgKmVuZHBvcyA9IG1iLmVuZHBvczsKLSAgICAgICAgICBnb2ItPmxhc3QgPSBtYjsKLSAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBBUlNFX0VORF9PRl9GUkFNRToKLSAgICAgICAgKmVuZHBvcyA9IGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKGJyKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAiRW5kIG9mIGZyYW1lIGF0IHBvcyAldSAobGFzdCBHT0JOICVkIE1CQSAlZCkiLAotICAgICAgICAgICAgKmVuZHBvcywgZ29iLT5nbiwgZ29iLT5sYXN0Lm1iYSk7Ci0gICAgICAgIHN0b3AgPSBUUlVFOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQVJTRV9FTkRfT0ZfR09COgotICAgICAgICAvKiBOb3RlIHRoYXQgYSBHT0IgY2FuIGNvbnRhaW4gbm90aGluZywgc28gd2UgbWF5IGdldCBoZXJlIG9uIHRoZSBmaXJzdAotICAgICAgICAgKiBpdGVyYXRpb24uICovCi0gICAgICAgICplbmRwb3MgPSBnb2ItPmxhc3QubWJhID09IDAgPwotICAgICAgICAgICAgZ29iLT5zdGFydHBvcyA6IGdzdF9iaXRfcmVhZGVyX2dldF9wb3MgKGJyKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAiRW5kIG9mIGdvYiBhdCBwb3MgJXUgKGxhc3QgR09CTiAlZCBNQkEgJWQpIiwKLSAgICAgICAgICAgICplbmRwb3MsIGdvYi0+Z24sIGdvYi0+bGFzdC5tYmEpOwotICAgICAgICBzdG9wID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgUEFSU0VfRU5EX09GX0JVRkZFUjoKLSAgICAgIGNhc2UgUEFSU0VfRVJST1I6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGF5LCAiRmFpbGVkIHRvIHBhcnNlIHN0cmVhbSAocmVhc29uICVkKSIsIHJldCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGdvYi0+bGFzdC5nb2JuID0gZ29iLT5nbjsKLQotICBpZiAocmV0ID09IFBBUlNFX09LKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LAotICAgICAgICAiU3BsaXQgR09CTiAlZCBhZnRlciBNQkEgJWQgKGVuZHBvcyAldSwgbWF4cG9zICV1LCBuZXh0cG9zICV1KSIsCi0gICAgICAgIGdvYi0+Z24sIGdvYi0+bGFzdC5tYmEsICplbmRwb3MsIG1heHBvcywgbWIuZW5kcG9zKTsKLSAgICBnc3RfYml0X3JlYWRlcl9zZXRfcG9zIChiciwgKmVuZHBvcyk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ3VpbnQKLWJpdHJhbmdlX3RvX2J5dGVzIChndWludCBmaXJzdCwgZ3VpbnQgbGFzdCkKLXsKLSAgcmV0dXJuIChHU1RfUk9VTkRfVVBfOCAobGFzdCkgLSBHU1RfUk9VTkRfRE9XTl84IChmaXJzdCkpIC8gODsKLX0KLQotLyogRmluZCBuZXh0IDE2LWJpdCBHT0Igc3RhcnQgY29kZSAoMHgwMDAxKSwgd2hpY2ggbWF5IG5vdCBiZSBieXRlIGFsaWduZWQuCi0gKiBSZXR1cm5zIHRoZSBiaXQgb2Zmc2V0IG9mIHRoZSBmaXJzdCBiaXQgb2YgR0JTQy4gKi8KLXN0YXRpYyBnc3NpemUKLWZpbmRfZ29iIChHc3RSdHBIMjYxUGF5ICogcGF5LCBjb25zdCBndWludDggKiBkYXRhLCBndWludCBzaXplLCBndWludCBwb3MpCi17Ci0gIGdzc2l6ZSByZXQgPSAtMTsKLSAgZ3VpbnQgb2Zmc2V0OwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXksICJTZWFyY2ggZm9yIEdPQiBmcm9tIHBvcyAldSIsIHBvcyk7Ci0KLSAgZm9yIChvZmZzZXQgPSBwb3MgLyA4OyBvZmZzZXQgPCBzaXplIC0gMTsgb2Zmc2V0KyspIHsKLSAgICBpZiAoZGF0YVtvZmZzZXRdID09IDB4MCkgewotICAgICAgZ2ludCBtc2IgPSBnX2JpdF9udGhfbXNmIChkYXRhW29mZnNldCArIDFdLCA4KTsKLSAgICAgIGdpbnQgbHNiID0gb2Zmc2V0ID4gMCA/IGdfYml0X250aF9sc2YgKGRhdGFbb2Zmc2V0IC0gMV0sIC0xKSA6IDA7Ci0gICAgICBpZiAobHNiID09IC0xKQotICAgICAgICBsc2IgPSA4OwotICAgICAgaWYgKG1zYiA+PSAwICYmIGxzYiA+PSBtc2IpIHsKLSAgICAgICAgcmV0ID0gb2Zmc2V0ICogOCAtIG1zYjsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgIkZvdW5kIEdPQiBzdGFydCBjb2RlIGF0IGJpdHBvcyAlIgotICAgICAgICAgICAgR19HU1NJWkVfRk9STUFUICIgKCUwMnggJTAyeCAlMDJ4KSIsIHJldCwKLSAgICAgICAgICAgIG9mZnNldCA+IDAgPyBkYXRhW29mZnNldCAtIDFdIDogMCwgZGF0YVtvZmZzZXRdLCBkYXRhW29mZnNldCArIDFdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogU2NhbnMgYWZ0ZXIgYWxsIEdPQiBzdGFydCBjb2RlcyBhbmQgaW5pdGFsaXplcyB0aGUgR09CIHN0cnVjdHVyZSB3aXRoIHN0YXJ0Ci0gKiBhbmQgZW5kIHBvc2l0aW9ucy4gKi8KLXN0YXRpYyBQYXJzZVJldHVybgotZ3N0X3J0cF9oMjYxX3BheV9pbml0X2dvYnMgKEdzdFJ0cEgyNjFQYXkgKiBwYXksIEdvYiAqIGdvYnMsIGdpbnQgbnVtX2dvYnMsCi0gICAgY29uc3QgZ3VpbnQ4ICogYml0cywgZ2ludCBsZW4sIGd1aW50IHBvcykKLXsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fZ29iczsgaSsrKSB7Ci0gICAgZ3NzaXplIGdvYnBvcyA9IGZpbmRfZ29iIChwYXksIGJpdHMsIGxlbiwgcG9zKTsKLSAgICBpZiAoZ29icG9zID09IC0xKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBheSwgIkZvdW5kIG9ubHkgJWQgb2YgJWQgR09CcyIsIGksIG51bV9nb2JzKTsKLSAgICAgIHJldHVybiBQQVJTRV9FUlJPUjsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgIkZvdW5kIEdPQiAlZCBhdCBwb3MgJSIgR19HU1NJWkVfRk9STUFULCBpLCBnb2Jwb3MpOwotICAgIHBvcyA9IGdvYnBvcyArIEdCU0NfTEVOOwotCi0gICAgZ29ic1tpXS5zdGFydHBvcyA9IGdvYnBvczsKLSAgICBpZiAoaSA+IDApCi0gICAgICBnb2JzW2kgLSAxXS5lbmRwb3MgPSBnb2Jwb3M7Ci0gIH0KLSAgZ29ic1tudW1fZ29icyAtIDFdLmVuZHBvcyA9IGxlbiAqIDg7Ci0KLSAgcmV0dXJuIFBBUlNFX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9oMjYxX3BheV9mcmFnbWVudF9wdXNoIChHc3RSdHBIMjYxUGF5ICogcGF5LCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgY29uc3QgZ3VpbnQ4ICogYml0cywgZ3VpbnQgc3RhcnQsIGd1aW50IGVuZCwKLSAgICBjb25zdCBNYWNyb2Jsb2NrICogbGFzdF9tYl9pbl9wcmV2aW91c19wYWNrZXQsIGdib29sZWFuIG1hcmtlcikKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgR3N0UnRwSDI2MVBheUhlYWRlciAqaGVhZGVyOwotICBnaW50IG5ieXRlczsKLSAgY29uc3QgTWFjcm9ibG9jayAqbGFzdCA9IGxhc3RfbWJfaW5fcHJldmlvdXNfcGFja2V0OwotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLQotICBuYnl0ZXMgPSBiaXRyYW5nZV90b19ieXRlcyAoc3RhcnQsIGVuZCk7Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChuYnl0ZXMgKwotICAgICAgR1NUX1JUUF9IMjYxX1BBWUxPQURfSEVBREVSX0xFTiwgMCwgMCk7Ci0gIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLSAgaGVhZGVyID0gKEdzdFJ0cEgyNjFQYXlIZWFkZXIgKikgcGF5bG9hZDsKLQotICBtZW1zZXQgKGhlYWRlciwgMCwgR1NUX1JUUF9IMjYxX1BBWUxPQURfSEVBREVSX0xFTik7Ci0gIGhlYWRlci0+diA9IDE7Ci0gIGhlYWRlci0+c2JpdCA9IHN0YXJ0ICYgNzsKLSAgaGVhZGVyLT5lYml0ID0gKDggLSAoZW5kICYgNykpICYgNzsKLQotICBpZiAobGFzdCAhPSBOVUxMICYmIGxhc3QtPm1iYSAhPSAwICYmIGxhc3QtPm1iYSAhPSAzMykgewotICAgIC8qIE5PVEU6IE1WRCBhc3N1bWVzIHRoYXQgd2UncmUgcnVubmluZyBvbiAyJ3MgY29tcGxlbWVudCBhcmNoaXRlY3R1cmUgKi8KLSAgICBndWludCBtYmFwID0gbGFzdC0+bWJhIC0gMTsKLSAgICBoZWFkZXItPmdvYm4gPSBsYXN0LT5nb2JuOwotICAgIGhlYWRlci0+bWJhcDEgPSBtYmFwID4+IDE7Ci0gICAgaGVhZGVyLT5tYmFwMiA9IG1iYXAgJiAxOwotICAgIGhlYWRlci0+cXVhbnQgPSBsYXN0LT5xdWFudDsKLSAgICBoZWFkZXItPmhtdmQxID0gbGFzdC0+bXZ4ID4+IDM7Ci0gICAgaGVhZGVyLT5obXZkMiA9IGxhc3QtPm12eCAmIDc7Ci0gICAgaGVhZGVyLT52bXZkID0gbGFzdC0+bXZ5OwotICB9Ci0KLSAgbWVtY3B5IChwYXlsb2FkICsgR1NUX1JUUF9IMjYxX1BBWUxPQURfSEVBREVSX0xFTiwKLSAgICAgIGJpdHMgKyBHU1RfUk9VTkRfRE9XTl84IChzdGFydCkgLyA4LCBuYnl0ZXMpOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gcGF5LT50aW1lc3RhbXA7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIG1hcmtlcik7Ci0gIHBheS0+b2Zmc2V0ID0gZW5kICYgNzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXksCi0gICAgICAiUHVzaCBmcmFnbWVudCwgYnl0ZXMgJWQsIHNiaXQgJWQsIGViaXQgJWQsIGdvYm4gJWQsIG1iYXAgJWQsIG1hcmtlciAlZCIsCi0gICAgICBuYnl0ZXMsIGhlYWRlci0+c2JpdCwgaGVhZGVyLT5lYml0LCBsYXN0ICE9IE5VTEwgPyBsYXN0LT5nb2JuIDogMCwKLSAgICAgIGxhc3QgIT0gTlVMTCA/IE1BWCAobGFzdC0+bWJhIC0gMSwgMCkgOiAwLCBtYXJrZXIpOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocGF5KSwgb3V0YnVmLCBidWZmZXIsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0gIHJldHVybiBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfUEFZTE9BRF9DQVNUIChwYXkpLCBvdXRidWYpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9oMjYxX3BhY2tldGl6ZV9hbmRfcHVzaCAoR3N0UnRwSDI2MVBheSAqIHBheSwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIGNvbnN0IGd1aW50OCAqIGJpdHMsIGdzaXplIGxlbikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Qml0UmVhZGVyIGJyXzsKLSAgR3N0Qml0UmVhZGVyICpiciA9ICZicl87Ci0gIGd1aW50IG1heF9wYXlsb2FkX3NpemUgPQotICAgICAgZ3N0X3J0cF9idWZmZXJfY2FsY19wYXlsb2FkX2xlbiAoR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChwYXkpIC0KLSAgICAgIEdTVF9SVFBfSDI2MV9QQVlMT0FEX0hFQURFUl9MRU4sIDAsIDApOwotICBndWludCBzdGFydHBvczsKLSAgZ2ludCBudW1fZ29icyA9IDA7Ci0gIEdvYiBnb2JzW01BWF9OVU1fR09CXTsKLSAgR29iICpnb2I7Ci0gIE1hY3JvYmxvY2sgbGFzdF9tYl9pbl9wcmV2aW91c19wYWNrZXQgPSB7IDAgfTsKLSAgZ2Jvb2xlYW4gbWFya2VyOwotICBQYXJzZVJldHVybiByZXN1bHQ7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoYnIsIGJpdHMsIGxlbik7Ci0gIGdzdF9iaXRfcmVhZGVyX3NldF9wb3MgKGJyLCBwYXktPm9mZnNldCk7Ci0gIHN0YXJ0cG9zID0gcGF5LT5vZmZzZXQ7Ci0KLSAgaWYgKHBhcnNlX3BpY3R1cmVfaGVhZGVyIChwYXksIGJyLCAmbnVtX2dvYnMpIDwgUEFSU0VfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBheSwgIkZhaWxlZCB0byBwYXJzZSBwaWN0dXJlIGhlYWRlciIpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICBpZiAoZ3N0X3J0cF9oMjYxX3BheV9pbml0X2dvYnMgKHBheSwgZ29icywgbnVtX2dvYnMsIGJpdHMsIGxlbiwKLSAgICAgICAgICBnc3RfYml0X3JlYWRlcl9nZXRfcG9zIChicikpIDwgUEFSU0VfT0spCi0gICAgZ290byBiZWFjaDsKLQotICAvKiBTcGxpdCwgY3JlYXRlIGFuZCBwdXNoIHBhY2tldHMgKi8KLSAgZ29iID0gZ29iczsKLSAgbWFya2VyID0gRkFMU0U7Ci0gIHdoaWxlIChtYXJrZXIgPT0gRkFMU0UgJiYgcmV0ID09IEdTVF9GTE9XX09LKSB7Ci0gICAgZ3VpbnQgZW5kcG9zOwotCi0gICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgd3JhcCBhcm91bmQgYmVjYXVzZSBvZiBleHRyZW1lbHkgaGlnaCBNVFUgKi8KLSAgICBlbmRwb3MgPSBHU1RfUk9VTkRfRE9XTl84IChzdGFydHBvcykgKyBtYXhfcGF5bG9hZF9zaXplICogODsKLSAgICBpZiAoZW5kcG9zIDwgc3RhcnRwb3MpCi0gICAgICBlbmRwb3MgPSBHX01BWFVJTlQ7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAiTmV4dCBwYWNrZXQgc3RhcnRwb3MgJXUgbWF4cG9zICV1Iiwgc3RhcnRwb3MsIGVuZHBvcyk7Ci0KLSAgICAvKiBGaW5kIHRoZSBsYXN0IEdPQiB0aGF0IGRvZXMgbm90IGNvbXBsZXRlbHkgZml0IGluIHBhY2tldCAqLwotICAgIGZvciAoOyBnb2IgPCAmZ29ic1tudW1fZ29icyAtIDFdOyBnb2IrKykgewotICAgICAgaWYgKGJpdHJhbmdlX3RvX2J5dGVzIChzdGFydHBvcywgZ29iLT5lbmRwb3MpID4gbWF4X3BheWxvYWRfc2l6ZSkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAiU3BsaXQgZ29iIChzdGFydCAldSwgZW5kICV1KSIsCi0gICAgICAgICAgICBnb2ItPnN0YXJ0cG9zLCBnb2ItPmVuZHBvcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChzdGFydHBvcyA8PSBnb2ItPnN0YXJ0cG9zKSB7Ci0gICAgICAvKiBGYXN0LWZvcndhcmQgdW50aWwgc3RhcnQgb2YgR09CICovCi0gICAgICBnc3RfYml0X3JlYWRlcl9zZXRfcG9zIChiciwgZ29iLT5zdGFydHBvcyk7Ci0gICAgICBpZiAocGFyc2VfZ29iX2hlYWRlciAocGF5LCBiciwgZ29iKSA8IFBBUlNFX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGF5LCAiRmFpbGVkIHRvIHBhcnNlIEdPQiBoZWFkZXIiKTsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLSAgICAgIGdvYi0+bGFzdC5tYmEgPSAwOwotICAgICAgZ29iLT5sYXN0LmdvYm4gPSBnb2ItPmduOwotICAgICAgZ29iLT5sYXN0LnF1YW50ID0gZ29iLT5ncXVhbnQ7Ci0gICAgfQotCi0gICAgLyogUGFyc2UgTUJzIHRvIGZpbmQgcG9zaXRpb24gd2hlcmUgdG8gc3BsaXQuIENhbiBvbmx5IGJlIGRvbmUgb24gYWZ0ZXIgTUIKLSAgICAgKiBvciBhdCBHT0IgYm91bmRhcnkuICovCi0gICAgcmVzdWx0ID0gcGFyc2VfbWJfdW50aWxfcG9zIChwYXksIGJyLCBnb2IsICZlbmRwb3MpOwotICAgIGlmIChyZXN1bHQgPCBQQVJTRV9PSykKLSAgICAgIGdvdG8gYmVhY2g7Ci0KLSAgICBtYXJrZXIgPSByZXN1bHQgPT0gUEFSU0VfRU5EX09GX0ZSQU1FOwotICAgIHJldCA9IGdzdF9ydHBfaDI2MV9wYXlfZnJhZ21lbnRfcHVzaCAocGF5LCBidWZmZXIsIGJpdHMsIHN0YXJ0cG9zLCBlbmRwb3MsCi0gICAgICAgICZsYXN0X21iX2luX3ByZXZpb3VzX3BhY2tldCwgbWFya2VyKTsKLQotICAgIGxhc3RfbWJfaW5fcHJldmlvdXNfcGFja2V0ID0gZ29iLT5sYXN0OwotICAgIGlmIChlbmRwb3MgPT0gZ29iLT5lbmRwb3MpCi0gICAgICBnb2IrKzsKLSAgICBzdGFydHBvcyA9IGVuZHBvczsKLSAgfQotCi1iZWFjaDoKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogU2hpZnQgYnVmZmVyIHRvIHBhY2tldGl6ZSBhIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGJpdHMgKG5vdCBieXRlcykuIFNvbWUKLSAqIHBheWxvYWRlcnMvZGVjb2RlcnMgYXJlIHZlcnkgcGlja3kgYWJvdXQgY29ycmVjdCBzYml0L2ViaXQgZm9yIGZyYW1lcy4gKi8KLXN0YXRpYyBndWludDggKgotZ3N0X3J0cF9oMjYxX3BheV9zaGlmdF9idWZmZXIgKEdzdFJ0cEgyNjFQYXkgKiBwYXksIGNvbnN0IGd1aW50OCAqIGRhdGEsCi0gICAgZ3NpemUgc2l6ZSwgZ2ludCBvZmZzZXQsIGdzaXplICogbmV3c2l6ZSkKLXsKLSAgLyogSW4gb3JkZXIgdG8gcmVhZCB2YXJpYWJsZSBsZW5ndGggY29kZXMgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBidWZmZXIKLSAgICogd2lob3V0IHBlZWtpbmcgaW50byBwb3NzaWJseSB1bmFsbG9jYXRlZCBkYXRhLCB3ZSBwYWQgd2l0aCBleHRyYSAwJ3MKLSAgICogd2hpY2ggd2lsbCBnZW5lcmF0ZSBhbiBpbnZhbGlkIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAqLwotICBndWludCBwYWQgPSA0OwotICBnc2l6ZSBhbGxvY3NpemUgPSBzaXplICsgcGFkOwotICBndWludDggKmJpdHMgPSBnX21hbGxvYyAoYWxsb2NzaXplKTsKLSAgZ2ludCBpOwotCi0gIGlmIChvZmZzZXQgPT0gMCkgewotICAgIG1lbWNweSAoYml0cywgZGF0YSwgc2l6ZSk7Ci0gICAgKm5ld3NpemUgPSBzaXplOwotICB9IGVsc2UgaWYgKG9mZnNldCA+IDApIHsKLSAgICBiaXRzWzBdID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICBiaXRzW2ldIHw9IGRhdGFbaV0gPj4gb2Zmc2V0OwotICAgICAgYml0c1tpICsgMV0gPSBkYXRhW2ldIDw8ICg4IC0gb2Zmc2V0KTsKLSAgICB9Ci0gICAgKm5ld3NpemUgPSBzaXplICsgMTsKLSAgfSBlbHNlIHsKLSAgICBnaW50IHNoaWZ0ID0gLW9mZnNldDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZSAtIDE7IGkrKykKLSAgICAgIGJpdHNbaV0gPSAoZGF0YVtpXSA8PCBzaGlmdCkgfCAoZGF0YVtpICsgMV0gPj4gKDggLSBzaGlmdCkpOwotICAgIGJpdHNbaV0gPSBkYXRhW2ldIDw8IHNoaWZ0OwotICAgICpuZXdzaXplID0gc2l6ZTsKLSAgfQotICBmb3IgKGkgPSAqbmV3c2l6ZTsgaSA8IGFsbG9jc2l6ZTsgaSsrKQotICAgIGJpdHNbaV0gPSAwOwotCi0gIHJldHVybiBiaXRzOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9oMjYxX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0UnRwSDI2MVBheSAqcGF5ID0gR1NUX1JUUF9IMjYxX1BBWSAocGF5bG9hZCk7Ci0gIGdzaXplIGxlbjsKLSAgZ3VpbnQ4ICpiaXRzOwotICBnaW50IHBzY19vZmZzZXQsIHNoaWZ0OwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYXksICJIYW5kbGUgYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpKTsKLQotICBwYXktPnRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKSB8fCAhbWFwLmRhdGEpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBheSwgIkZhaWxlZCB0byBtYXAgYnVmZmVyIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgcHNjX29mZnNldCA9IGZpbmRfcGljdHVyZV9oZWFkZXJfb2Zmc2V0IChtYXAuZGF0YSwgbWFwLnNpemUpOwotICBpZiAocHNjX29mZnNldCA8IDApIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBheSwgIkZhaWxlZCB0byBmaW5kIHBpY3R1cmUgaGVhZGVyIG9mZnNldCIpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAiUGljdHVyZSBoZWFkZXIgb2Zmc2V0OiAlZCIsIHBzY19vZmZzZXQpOwotICB9Ci0KLSAgc2hpZnQgPSBwYXktPm9mZnNldCAtIHBzY19vZmZzZXQ7Ci0gIGJpdHMgPSBnc3RfcnRwX2gyNjFfcGF5X3NoaWZ0X2J1ZmZlciAocGF5LCBtYXAuZGF0YSwgbWFwLnNpemUsIHNoaWZ0LCAmbGVuKTsKLSAgcmV0ID0gZ3N0X3J0cF9oMjYxX3BhY2tldGl6ZV9hbmRfcHVzaCAocGF5LCBidWZmZXIsIGJpdHMsIGxlbik7Ci0gIGdfZnJlZSAoYml0cyk7Ci0KLWJlYWNoOgotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9oMjYxX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJ2aWRlbyIsCi0gICAgICBwYXlsb2FkLT5wdCAhPSBHU1RfUlRQX1BBWUxPQURfSDI2MSwgIkgyNjEiLCA5MDAwMCk7Ci0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChwYXlsb2FkLCBOVUxMKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYxX3BheV9pbml0IChHc3RSdHBIMjYxUGF5ICogcGF5KQotewotICBHc3RSVFBCYXNlUGF5bG9hZCAqcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEIChwYXkpOwotICBwYXlsb2FkLT5wdCA9IEdTVF9SVFBfUEFZTE9BRF9IMjYxOwotICBwYXktPm9mZnNldCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjFfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEgyNjFQYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9oMjYxX3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjFfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEgyNjEgcGFja2V0IHBheWxvYWRlciIsICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQtZW5jb2RlcyBIMjYxIHZpZGVvIGluIFJUUCBwYWNrZXRzIChSRkMgNDU4NykiLAotICAgICAgIlN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfaDI2MV9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2gyNjFfcGF5X2hhbmRsZV9idWZmZXI7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGgyNjFwYXlfZGVidWcsICJydHBoMjYxcGF5IiwgMCwKLSAgICAgICJIMjYxIFJUUCBQYXlsb2FkZXIiKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2MV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBoMjYxcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0gyNjFfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaDI2MXBheS5oIGIvZ3N0L3J0cC9nc3RydHBoMjYxcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZTRiZjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBoMjYxcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKiBBdXRob3I6IERlamFuIFNha2Vsc2FrIHNhaGVsQGtpYmVycGlwYS5vcmcKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9IMjYxX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0gyNjFfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0gyNjFfUEFZICAgICAgICAgICAgICAgICAgIFwKLSAgKGdzdF9ydHBfaDI2MV9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9IMjYxX1BBWShvYmopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9IMjYxX1BBWSxHc3RSdHBIMjYxUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9IMjYxX1BBWV9DTEFTUyhrbGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0gyNjFfUEFZLEdzdFJ0cEgyNjFQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2MV9QQVkob2JqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfSDI2MV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0gyNjFfUEFZX0NMQVNTKGtsYXNzKSAgICAgICAgICAgICAgICAgICAgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2MV9QQVkpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjFQYXlDbGFzcyBHc3RSdHBIMjYxUGF5Q2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2MVBheSBHc3RSdHBIMjYxUGF5OwotCi1zdHJ1Y3QgX0dzdFJ0cEgyNjFQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBnaW50IG9mZnNldDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2MVBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjFQYXlIZWFkZXIKLXsKLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0gIHVuc2lnbmVkIGludCB2OjE7ICAgICAgICAgICAgIC8qIE1vdGlvbiB2ZWN0b3IgZmxhZyAqLwotICB1bnNpZ25lZCBpbnQgaToxOyAgICAgICAgICAgICAvKiBJbnRyYSBlbmNvZGVkIGRhdGEgKi8KLSAgdW5zaWduZWQgaW50IGViaXQ6MzsgICAgICAgICAgLyogRW5kIHBvc2l0aW9uICovCi0gIHVuc2lnbmVkIGludCBzYml0OjM7ICAgICAgICAgIC8qIFN0YXJ0IHBvc2l0aW9uICovCi0KLSAgdW5zaWduZWQgaW50IG1iYXAxOjQ7ICAgICAgICAgLyogTUIgYWRkcmVzcyBwcmVkaWN0b3IgLSBwYXJ0MSAqLwotICB1bnNpZ25lZCBpbnQgZ29ibjo0OyAgICAgICAgICAvKiBHT0IgbnVtYmVyICovCi0KLSAgdW5zaWduZWQgaW50IGhtdmQxOjI7ICAgICAgICAgLyogSG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIGRhdGEgLSBwYXJ0MSAqLwotICB1bnNpZ25lZCBpbnQgcXVhbnQ6NTsgICAgICAgICAvKiBRdWFudGl6ZXIgKi8KLSAgdW5zaWduZWQgaW50IG1iYXAyOjE7ICAgICAgICAgLyogTUIgYWRkcmVzcyBwcmVkaWN0b3IgLSBwYXJ0MiAqLwotCi0gIHVuc2lnbmVkIGludCB2bXZkOjU7ICAgICAgICAgIC8qIEhvcml6b250YWwgbW90aW9uIHZlY3RvciBkYXRhIC0gcGFydDEgKi8KLSAgdW5zaWduZWQgaW50IGhtdmQyOjM7ICAgICAgICAgLyogVmVydGljYWwgbW90aW9uIHZlY3RvciBkYXRhICovCi0jZWxpZiBHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOCi0gIHVuc2lnbmVkIGludCBzYml0OjM7ICAgICAgICAgIC8qIFN0YXJ0IHBvc2l0aW9uICovCi0gIHVuc2lnbmVkIGludCBlYml0OjM7ICAgICAgICAgIC8qIEVuZCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgaToxOyAgICAgICAgICAgICAvKiBJbnRyYSBlbmNvZGVkIGRhdGEgKi8KLSAgdW5zaWduZWQgaW50IHY6MTsgICAgICAgICAgICAgLyogTW90aW9uIHZlY3RvciBmbGFnICovCi0KLSAgdW5zaWduZWQgaW50IGdvYm46NDsgICAgICAgICAgLyogR09CIG51bWJlciAqLwotICB1bnNpZ25lZCBpbnQgbWJhcDE6NDsgICAgICAgICAvKiBNQiBhZGRyZXNzIHByZWRpY3RvciAtIHBhcnQxICovCi0KLSAgdW5zaWduZWQgaW50IG1iYXAyOjE7ICAgICAgICAgLyogTUIgYWRkcmVzcyBwcmVkaWN0b3IgLSBwYXJ0MiAqLwotICB1bnNpZ25lZCBpbnQgcXVhbnQ6NTsgICAgICAgICAvKiBRdWFudGl6ZXIgKi8KLSAgdW5zaWduZWQgaW50IGhtdmQxOjI7ICAgICAgICAgLyogSG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIGRhdGEgLSBwYXJ0MSAqLwotCi0gIHVuc2lnbmVkIGludCBobXZkMjozOyAgICAgICAgIC8qIFZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgZGF0YSAqLwotICB1bnNpZ25lZCBpbnQgdm12ZDo1OyAgICAgICAgICAvKiBIb3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgZGF0YSAtIHBhcnQxICovCi0jZWxzZQotI2Vycm9yICJHX0JZVEVfT1JERVIgc2hvdWxkIGJlIGJpZyBvciBsaXR0bGUgZW5kaWFuLiIKLSNlbmRpZgotfSBHc3RSdHBIMjYxUGF5SGVhZGVyOwotI2RlZmluZSBHU1RfUlRQX0gyNjFfUEFZTE9BRF9IRUFERVJfTEVOIDQKLQotR1R5cGUgZ3N0X3J0cF9oMjYxX3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfaDI2MV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUlRQX0gyNjFfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NTYzOWEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBoMjYzZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IDIwMDcgQ29sbGFib3JhIEx0ZCwKLSAqICBAYXV0aG9yOiBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiAgICAgICAgICAgICAgIDwyMDA3PiBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgImdzdHJ0cGgyNjNkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGgyNjNkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwaDI2M2RlcGF5X2RlYnVnKQotCi0jZGVmaW5lIEdTVF9SRkMyMTkwQV9IRUFERVJfTEVOIDQKLSNkZWZpbmUgR1NUX1JGQzIxOTBCX0hFQURFUl9MRU4gOAotI2RlZmluZSBHU1RfUkZDMjE5MENfSEVBREVSX0xFTiAxMgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9oMjYzX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1oMjYzLCAiCi0gICAgICAgICJ2YXJpYW50ID0gKHN0cmluZykgXCJpdHVcIiwgIiAiaDI2M3ZlcnNpb24gPSAoc3RyaW5nKSBcImgyNjNcIiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2M19kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9IMjYzX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDA7ICIKLSAgICAgICAgLyogb3B0aW9uYWwgU0RQIGF0dHJpYnV0ZToKLSAgICAgICAgICogImEtZnJhbWVzaXplID0gKHN0cmluZykgXCIxMjM0LTEyMzRcIiwgIgotICAgICAgICAgKi8KLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYzXCIiCi0gICAgICAgIC8qIG9wdGlvbmFsIFNEUCBhdHRyaWJ1dGU6Ci0gICAgICAgICAqICJhLWZyYW1lc2l6ZSA9IChzdHJpbmcpIFwiMTIzNC0xMjM0XCIsICIKLSAgICAgICAgICovCi0gICAgKQotICAgICk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9oMjYzX2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEgyNjNEZXBheSwgZ3N0X3J0cF9oMjYzX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfaDI2M19kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX2gyNjNfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9oMjYzX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLWdib29sZWFuIGdzdF9ydHBfaDI2M19kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZmlsdGVyLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19kZXBheV9jbGFzc19pbml0IChHc3RSdHBIMjYzRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjYzZGVwYXlfZGVidWcsICJydHBoMjYzZGVwYXkiLCAwLAotICAgICAgIkgyNjMgVmlkZW8gUlRQIERlcGF5bG9hZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfaDI2M19kZXBheV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX2gyNjNfZGVwYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2M19kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjNfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgSDI2MyBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgSDI2MyB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjE5MCkiLAotICAgICAgIlBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+LCAiCi0gICAgICAiRWR3YXJkIEhlcnZleSA8YmlsYm9lZEBiaWxib2VkLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2gyNjNfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2gyNjNfZGVwYXlfc2V0Y2FwczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19kZXBheV9pbml0IChHc3RSdHBIMjYzRGVwYXkgKiBydHBoMjYzZGVwYXkpCi17Ci0gIHJ0cGgyNjNkZXBheS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLQotICBydHBoMjYzZGVwYXktPm9mZnNldCA9IDA7Ci0gIHJ0cGgyNjNkZXBheS0+bGVmdG92ZXIgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBIMjYzRGVwYXkgKnJ0cGgyNjNkZXBheTsKLQotICBydHBoMjYzZGVwYXkgPSBHU1RfUlRQX0gyNjNfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGgyNjNkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cGgyNjNkZXBheS0+YWRhcHRlciA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2M19wYXJzZV9mcmFtZXNpemUgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsCi0gICAgY29uc3QgZ2NoYXIgKiBtZWRpYV9hdHRyLCBHc3RDYXBzICogc3JjY2FwcykKLXsKLSAgZ2NoYXIgKmRpbWVuc2lvbiwgKmVuZHB0cjsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBHc3RTdHJ1Y3R1cmUgKmQ7Ci0KLSAgd2lkdGggPSBnX2FzY2lpX3N0cnRvdWxsIChtZWRpYV9hdHRyLCAmZW5kcHRyLCAxMCk7Ci0gIGlmICh3aWR0aCA8PSAwKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAiRnJhbWVzaXplIG1lZGlhIGF0dHJpYnV0ZSB3aWR0aCBvdXQgb2YgdmFsaWQgcmFuZ2UiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0gZWxzZSBpZiAoKmVuZHB0ciAhPSAnLScpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChmaWx0ZXIsCi0gICAgICAgICJGcmFtZXNpemUgbWVkaWEgYXR0cmlidXRlIGhhcyBpbnZhbGlkIGRpbWVuc2lvbiBzZXBhcmF0b3IiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBkaW1lbnNpb24gPSBlbmRwdHIgKyAxOwotICBoZWlnaHQgPSBnX2FzY2lpX3N0cnRvdWxsIChkaW1lbnNpb24sICZlbmRwdHIsIDEwKTsKLSAgaWYgKGhlaWdodCA8PSAwKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmlsdGVyLAotICAgICAgICAiRnJhbWVzaXplIG1lZGlhIGF0dHJpYnV0ZSBoZWlnaHQgb3V0IG9mIHZhbGlkIHJhbmdlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgaWYgKCplbmRwdHIgIT0gJ1wwJykgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZpbHRlciwKLSAgICAgICAgIkZyYW1lc2l6ZSBtZWRpYSBhdHRyaWJ1dGUgdW5leHBlY3RlZGx5IGhhcyB0cmFpbGluZyBjaGFyYWN0ZXJzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZCA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHNyY2NhcHMsIDApOwotICBnc3Rfc3RydWN0dXJlX3NldCAoZCwgIndpZHRoIiwgR19UWVBFX0lOVCwgd2lkdGgsICJoZWlnaHQiLCBHX1RZUEVfSU5ULAotICAgICAgaGVpZ2h0LCBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2M19kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZmlsdGVyLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgZ2ludCBjbG9ja19yYXRlOwotICBjb25zdCBnY2hhciAqZnJhbWVzaXplOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1oMjYzIiwKLSAgICAgICJ2YXJpYW50IiwgR19UWVBFX1NUUklORywgIml0dSIsCi0gICAgICAiaDI2M3ZlcnNpb24iLCBHX1RZUEVfU1RSSU5HLCAiaDI2MyIsIE5VTEwpOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGNsb2NrX3JhdGUgPSA5MDAwMDsgICAgICAgICAvKiBkZWZhdWx0ICovCi0gIGZpbHRlci0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgZnJhbWVzaXplID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJhLWZyYW1lc2l6ZSIpOwotICBpZiAoZnJhbWVzaXplICE9IE5VTEwpIHsKLSAgICBpZiAoIWdzdF9ydHBfaDI2M19wYXJzZV9mcmFtZXNpemUgKGZpbHRlciwgZnJhbWVzaXplLCBzcmNjYXBzKSkgewotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChmaWx0ZXIpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfaDI2M19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEgyNjNEZXBheSAqcnRwaDI2M2RlcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ2ludCBwYXlsb2FkX2xlbjsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBndWludCBoZWFkZXJfbGVuOwotICBndWludCBTQklULCBFQklUOwotICBnYm9vbGVhbiBGLCBQLCBNOwotICBnYm9vbGVhbiBJOwotCi0gIHJ0cGgyNjNkZXBheSA9IEdTVF9SVFBfSDI2M19ERVBBWSAoZGVwYXlsb2FkKTsKLQotICAvKiBmbHVzaCByZW1haW5pbmcgZGF0YSBvbiBkaXNjb250ICovCi0gIGlmIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKHJ0cC0+YnVmZmVyKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChkZXBheWxvYWQsICJEaXNjb250IGJ1ZmZlciwgZmx1c2hpbmcgYWRhcHRlciIpOwotICAgIGdzdF9hZGFwdGVyX2NsZWFyIChydHBoMjYzZGVwYXktPmFkYXB0ZXIpOwotICAgIHJ0cGgyNjNkZXBheS0+b2Zmc2V0ID0gMDsKLSAgICBydHBoMjYzZGVwYXktPmxlZnRvdmVyID0gMDsKLSAgICBydHBoMjYzZGVwYXktPnN0YXJ0ID0gRkFMU0U7Ci0gIH0KLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIE0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIGlmIChwYXlsb2FkX2xlbiA8IDEpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgLyogTGV0J3Mgc2VlIHdoYXQgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KLSAgRiA9IChwYXlsb2FkWzBdICYgMHg4MCkgPT0gMHg4MDsKLSAgUCA9IChwYXlsb2FkWzBdICYgMHg0MCkgPT0gMHg0MDsKLQotICAvKiBCaXQgc2hpZnRpbmcgKi8KLSAgU0JJVCA9IChwYXlsb2FkWzBdICYgMHgzOCkgPj4gMzsKLSAgRUJJVCA9IChwYXlsb2FkWzBdICYgMHgwNyk7Ci0KLSAgLyogRmlndXJlIG91dCBoZWFkZXIgbGVuZ3RoIGFuZCBJLWZsYWcgKi8KLSAgaWYgKEYgPT0gMCkgewotICAgIC8qIEYgPT0gMCBhbmQgUCA9PSAwIG9yIDEKLSAgICAgKiBtb2RlIEEgKi8KLSAgICBoZWFkZXJfbGVuID0gR1NUX1JGQzIxOTBBX0hFQURFUl9MRU47Ci0gICAgR1NUX0xPRyAoIk1vZGUgQSIpOwotCi0gICAgLyogMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAqIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfEZ8UHxTQklUIHxFQklUIHwgU1JDIHxJfFV8U3xBfFIgICAgICB8REJRfCBUUkIgfCAgICBUUiAgICAgICAgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqLwotICAgIGlmIChwYXlsb2FkX2xlbiA8PSBoZWFkZXJfbGVuKQotICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgSSA9IChwYXlsb2FkWzFdICYgMHgxMCkgPT0gMHgxMDsKLSAgfSBlbHNlIHsKLSAgICBpZiAoUCA9PSAwKSB7Ci0gICAgICAvKiBGID09IDEgYW5kIFAgPT0gMAotICAgICAgICogbW9kZSBCICovCi0gICAgICBoZWFkZXJfbGVuID0gR1NUX1JGQzIxOTBCX0hFQURFUl9MRU47Ci0gICAgICBHU1RfTE9HICgiTW9kZSBCIik7Ci0KLSAgICAgIC8qIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICAgICAqIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHxGfFB8U0JJVCB8RUJJVCB8IFNSQyB8IFFVQU5UICAgfCAgR09CTiAgIHwgICBNQkEgICAgICAgICAgIHxSICB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICogfEl8VXxTfEF8IEhNVjEgICAgICAgIHwgVk1WMSAgICAgICAgfCBITVYyICAgICAgICB8IFZNVjIgICAgICAgIHwKLSAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKi8KLSAgICAgIGlmIChwYXlsb2FkX2xlbiA8PSBoZWFkZXJfbGVuKQotICAgICAgICBnb3RvIHRvb19zbWFsbDsKLSAgICAgIEkgPSAocGF5bG9hZFs0XSAmIDB4ODApID09IDB4ODA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIEYgPT0gMSBhbmQgUCA9PSAxCi0gICAgICAgKiBtb2RlIEMgKi8KLSAgICAgIGhlYWRlcl9sZW4gPSBHU1RfUkZDMjE5MENfSEVBREVSX0xFTjsKLSAgICAgIEdTVF9MT0cgKCJNb2RlIEMiKTsKLQotICAgICAgLyogMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICogMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICogfEZ8UHxTQklUIHxFQklUIHwgU1JDIHwgUVVBTlQgICB8ICBHT0JOICAgfCAgIE1CQSAgICAgICAgICAgfFIgIHwKLSAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKiB8SXxVfFN8QXwgSE1WMSAgICAgICAgfCBWTVYxICAgICAgICB8IEhNVjIgICAgICAgIHwgVk1WMiAgICAgICAgfAotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHwgUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfERCUXwgVFJCIHwgICAgVFIgICAgICAgICB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICovCi0gICAgICBpZiAocGF5bG9hZF9sZW4gPD0gaGVhZGVyX2xlbikKLSAgICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgICBJID0gKHBheWxvYWRbNF0gJiAweDgwKSA9PSAweDgwOwotICAgIH0KLSAgfQotCi0gIEdTVF9MT0cgKCJGL1AvTS9JIDogJWQvJWQvJWQvJWQiLCBGLCBQLCBNLCBJKTsKLSAgR1NUX0xPRyAoIlNCSVQgOiAlZCAsIEVCSVQgOiAlZCIsIFNCSVQsIEVCSVQpOwotICBHU1RfTE9HICgicGF5bG9hZF9sZW4gOiAlZCwgaGVhZGVyX2xlbiA6ICVkICwgbGVmdG92ZXIgOiAweCV4IiwKLSAgICAgIHBheWxvYWRfbGVuLCBoZWFkZXJfbGVuLCBydHBoMjYzZGVwYXktPmxlZnRvdmVyKTsKLQotICAvKiBza2lwIGhlYWRlciAqLwotICBwYXlsb2FkICs9IGhlYWRlcl9sZW47Ci0gIHBheWxvYWRfbGVuIC09IGhlYWRlcl9sZW47Ci0KLSAgaWYgKCFydHBoMjYzZGVwYXktPnN0YXJ0KSB7Ci0gICAgLyogb25seSBtb2RlIEEgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGVyZSBpcyBhIHBpY3R1cmUgc3RhcnQgY29kZSwgYnV0Ci0gICAgICogYnVnZ3kgcGF5bG9hZGVycyBtYXkgc2VuZCBtb2RlIEIvQyBpbiBzdGFydCBvZiBmcmFtZSAqLwotICAgIGlmIChwYXlsb2FkX2xlbiA+IDQgJiYgKEdTVF9SRUFEX1VJTlQzMl9CRSAocGF5bG9hZCkgPj4gMTAgPT0gMHgyMCkpIHsKLSAgICAgIEdTVF9ERUJVRyAoIk1vZGUgJWMgd2l0aCBQU0MgPT4gZnJhbWUgc3RhcnQiLCAiQUJDIltGK1BdKTsKLSAgICAgIHJ0cGgyNjNkZXBheS0+c3RhcnQgPSBUUlVFOwotICAgICAgaWYgKCghICEocGF5bG9hZFs0XSAmIDB4MDIpKSAhPSBJKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIldyb25nIFBpY3R1cmUgQ29kaW5nIFR5cGUgRmxhZyBpbiBydHAgaGVhZGVyIik7Ci0gICAgICAgIEkgPSAhSTsKLSAgICAgIH0KLSAgICAgIHJ0cGgyNjNkZXBheS0+cHNjX0kgPSBJOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUcgKCJubyBmcmFtZSBzdGFydCB5ZXQsIHNraXBwaW5nIHBheWxvYWQiKTsKLSAgICAgIGdvdG8gc2tpcDsKLSAgICB9Ci0gIH0KLQotICAvKiBvbmx5IHRydXN0IEkgaW5mbyBmcm9tIE1vZGUgQSBzdGFydGluZyBwYWNrZXQKLSAgICogZnJvbSBidWdneSBwYXlsb2FkZXJzIG9yIGh3ICovCi0gIEkgPSBydHBoMjYzZGVwYXktPnBzY19JOwotCi0gIGlmIChTQklUKSB7Ci0gICAgLyogdGFrZSB0aGUgbGVmdG92ZXIgYW5kIG1lcmdlIGl0IGF0IHRoZSBiZWdpbm5pbmcsIEZJWE1FIG1ha2UgdGhlIGJ1ZmZlcgotICAgICAqIGRhdGEgd3JpdGFibGUuICovCi0gICAgR1NUX0xPRyAoInBheWxvYWRbMF0gOiAweCV4IiwgcGF5bG9hZFswXSk7Ci0gICAgcGF5bG9hZFswXSAmPSAweEZGID4+IFNCSVQ7Ci0gICAgR1NUX0xPRyAoInBheWxvYWRbMF0gOiAweCV4IiwgcGF5bG9hZFswXSk7Ci0gICAgcGF5bG9hZFswXSB8PSBydHBoMjYzZGVwYXktPmxlZnRvdmVyOwotICAgIEdTVF9MT0cgKCJwYXlsb2FkWzBdIDogMHgleCIsIHBheWxvYWRbMF0pOwotICAgIHJ0cGgyNjNkZXBheS0+bGVmdG92ZXIgPSAwOwotICAgIHJ0cGgyNjNkZXBheS0+b2Zmc2V0ID0gMDsKLSAgfQotCi0gIGlmICghRUJJVCkgewotICAgIEdzdEJ1ZmZlciAqdG1wOwotCi0gICAgLyogVGFrZSB0aGUgZW50aXJlIGJ1ZmZlciAqLwotICAgIHRtcCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBoZWFkZXJfbGVuLCBwYXlsb2FkX2xlbik7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwaDI2M2RlcGF5LT5hZGFwdGVyLCB0bXApOwotICB9IGVsc2UgewotICAgIEdzdEJ1ZmZlciAqdG1wOwotCi0gICAgLyogVGFrZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIHRoZSBsYXN0IGJ5dGUgKi8KLSAgICB0bXAgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9zdWJidWZmZXIgKHJ0cCwgaGVhZGVyX2xlbiwKLSAgICAgICAgcGF5bG9hZF9sZW4gLSAxKTsKLSAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBoMjYzZGVwYXktPmFkYXB0ZXIsIHRtcCk7Ci0KLSAgICAvKiBQdXQgdGhlIGxhc3QgYnl0ZSBpbnRvIHRoZSBsZWZ0b3ZlciAqLwotICAgIEdTVF9ERUJVRyAoInBheWxvYWRbcGF5bG9hZF9sZW4gLSAxXSA6IDB4JXgiLCBwYXlsb2FkW3BheWxvYWRfbGVuIC0gMV0pOwotICAgIEdTVF9ERUJVRyAoIm1hc2sgOiAweCV4IiwgMHhGRiA8PCBFQklUKTsKLSAgICBydHBoMjYzZGVwYXktPmxlZnRvdmVyID0gKHBheWxvYWRbcGF5bG9hZF9sZW4gLSAxXSA+PiBFQklUKSA8PCBFQklUOwotICAgIHJ0cGgyNjNkZXBheS0+b2Zmc2V0ID0gMTsKLSAgICBHU1RfREVCVUcgKCJsZWZ0b3ZlciA6IDB4JXgiLCBydHBoMjYzZGVwYXktPmxlZnRvdmVyKTsKLSAgfQotCi1za2lwOgotICBpZiAoTSkgewotICAgIGlmIChydHBoMjYzZGVwYXktPnN0YXJ0KSB7Ci0gICAgICAvKiBmcmFtZSBpcyBjb21wbGV0ZWQgKi8KLSAgICAgIGd1aW50IGF2YWlsOwotCi0gICAgICBpZiAocnRwaDI2M2RlcGF5LT5vZmZzZXQpIHsKLSAgICAgICAgLyogcHVzaCBpbiB0aGUgbGVmdG92ZXIgKi8KLSAgICAgICAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEpOwotCi0gICAgICAgIEdTVF9ERUJVRyAoIlB1c2hpbmcgbGVmdG92ZXIgaW4gYWRhcHRlciIpOwotICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgJnJ0cGgyNjNkZXBheS0+bGVmdG92ZXIsIDEpOwotICAgICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBoMjYzZGVwYXktPmFkYXB0ZXIsIGJ1Zik7Ci0gICAgICB9Ci0KLSAgICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBoMjYzZGVwYXktPmFkYXB0ZXIpOwotICAgICAgb3V0YnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHJ0cGgyNjNkZXBheS0+YWRhcHRlciwgYXZhaWwpOwotCi0gICAgICBpZiAoSSkKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCk7Ci0KLSAgICAgIEdTVF9ERUJVRyAoIlB1c2hpbmcgb3V0IGEgYnVmZmVyIG9mICVkIGJ5dGVzIiwgYXZhaWwpOwotCi0gICAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2M2RlcGF5KSwgb3V0YnVmLAotICAgICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0KLSAgICAgIGdzdF9ydHBfYmFzZV9kZXBheWxvYWRfcHVzaCAoZGVwYXlsb2FkLCBvdXRidWYpOwotICAgICAgcnRwaDI2M2RlcGF5LT5vZmZzZXQgPSAwOwotICAgICAgcnRwaDI2M2RlcGF5LT5sZWZ0b3ZlciA9IDA7Ci0gICAgICBydHBoMjYzZGVwYXktPnN0YXJ0ID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJ0cGgyNjNkZXBheS0+c3RhcnQgPSBUUlVFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBOVUxMOwotCi10b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBoMjYzZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIlBhY2tldCBwYXlsb2FkIHdhcyB0b28gc21hbGwiKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfaDI2M19kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEgyNjNEZXBheSAqcnRwaDI2M2RlcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwaDI2M2RlcGF5ID0gR1NUX1JUUF9IMjYzX0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2M2RlcGF5LT5hZGFwdGVyKTsKLSAgICAgIHJ0cGgyNjNkZXBheS0+c3RhcnQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2M19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGgyNjNkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9IMjYzX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGgyNjNkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDljYTU1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2M2RlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSDI2M19ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0gyNjNfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0gyNjNfREVQQVkgXAotICAoZ3N0X3J0cF9oMjYzX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2M19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9IMjYzX0RFUEFZLEdzdFJ0cEgyNjNEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2M19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2M19ERVBBWSxHc3RSdHBIMjYzRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2M19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9IMjYzX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjYzX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9IMjYzX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNEZXBheSBHc3RSdHBIMjYzRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2M0RlcGF5Q2xhc3MgR3N0UnRwSDI2M0RlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIGd1aW50OCBvZmZzZXQ7CS8qIG9mZnNldCB0byBhcHBseSB0byBuZXh0IHBheWxvYWQgKi8KLSAgZ3VpbnQ4IGxlZnRvdmVyOwkvKiBsZWZ0b3ZlciBmcm9tIHByZXZpb3VzIHBheWxvYWQgKGlmIG9mZnNldCAhPSAwKSAqLwotICBnYm9vbGVhbiBwc2NfSTsgICAgICAgLyogUGljdHVyZS1Db2RpbmctVHlwZSA9PSBJIGZyb20gUGljdHVyZSBTdGFydCBDb2RlIHBhY2tldCAqLwotICBHc3RBZGFwdGVyICphZGFwdGVyOwotICBnYm9vbGVhbiBzdGFydDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M0RlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfaDI2M19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfaDI2M19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9IMjYzX0RFUEFZX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjNwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2M3BheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzRkNzYzLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2M3BheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgzOCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBEZWphbiBTYWtlbHNhayA8ZGVqYW4uc2FrZWxzYWtAbWFyYW5kLnNpPgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gSmFuaW4gS29sZW5jICA8amFuaW4ua29sZW5jQG1hcmFuZC5zaT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cGgyNjNwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX0gyNjNfRlJBTUVfVFlQRV9JID0gMCwKLSAgR1NUX0gyNjNfRlJBTUVfVFlQRV9QID0gMSwKLSAgR1NUX0gyNjNfRlJBTUVfVFlQRV9QQiA9IDIKLX0gR3N0UnRwSDI2M1BheUZyYW1lVHlwZTsKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9SVFBfSDI2M19QQVlMT0FEX1BJQ1RVUkVfRk9STUFUX1JFUzEgPSAwLAotICBHU1RfUlRQX0gyNjNfUEFZTE9BRF9QSUNUVVJFX0ZPUk1BVF9TUUNJRiA9IDEsCi0gIEdTVF9SVFBfSDI2M19QQVlMT0FEX1BJQ1RVUkVfRk9STUFUX1FDSUYgPSAyLAotICBHU1RfUlRQX0gyNjNfUEFZTE9BRF9QSUNUVVJFX0ZPUk1BVF9DSUYgPSAzLAotICBHU1RfUlRQX0gyNjNfUEFZTE9BRF9QSUNUVVJFX0ZPUk1BVF80Q0lGID0gNCwKLSAgR1NUX1JUUF9IMjYzX1BBWUxPQURfUElDVFVSRV9GT1JNQVRfMTZDSUYgPSA1LAotICBHU1RfUlRQX0gyNjNfUEFZTE9BRF9QSUNUVVJFX0ZPUk1BVF9SRVMyID0gNiwKLSAgR1NUX0gyNjNfUEFZTE9BRF9QSUNUVVJFX0ZPUk1BVF9QTFVTID0gNwotfSBHc3RSdHBIMjYzUGF5UGljdHVyZUZvcm1hdDsKLQotc3RhdGljIGNvbnN0IGd1aW50IGZvcm1hdF9wcm9wc1s4XVsyXSA9IHsgezI1NCwgMjU0fSwKLXs2LCA4fSwKLXs5LCAxMX0sCi17MTgsIDIyfSwKLXsxOCwgODh9LAotezE4LCAzNTJ9LAotezI1NCwgMjU0fSwKLXsyNTUsIDI1NX0KLX07Ci0KLS8qCi0gKiBJLWZyYW1lIE1DQlBDIHRhYmxlOiBjb2RlLCBtYXNrLCBuYml0cywgY2IsIGNyLCBtYiB0eXBlIC0+IDEwID0gdW5kZWZpbmVkIChiZWNhdXNlIHdlIGhhdmUgZ3VpbnQpCi0gKi8KLSNkZWZpbmUgTUNCUENfSV9MRU4gOQotI2RlZmluZSBNQ0JQQ19JX1dJRCA2Ci1zdGF0aWMgY29uc3QgZ3VpbnQzMiBtY2JwY19JWzldWzZdID0gewotICB7MHg4MDAwLCAweDgwMDAsIDEsIDAsIDAsIDN9LAotICB7MHgyMDAwLCAweGUwMDAsIDMsIDAsIDEsIDN9LAotICB7MHg0MDAwLCAweGUwMDAsIDMsIDEsIDAsIDN9LAotICB7MHg2MDAwLCAweGUwMDAsIDMsIDEsIDEsIDN9LAotICB7MHgxMDAwLCAweGYwMDAsIDQsIDAsIDAsIDR9LAotICB7MHgwNDAwLCAweGZjMDAsIDYsIDAsIDEsIDR9LAotICB7MHgwODAwLCAweGZjMDAsIDYsIDEsIDAsIDR9LAotICB7MHgwYzAwLCAweGZjMDAsIDYsIDEsIDEsIDR9LAotICB7MHgwMDgwLCAweGZmODAsIDksIDEwLCAxMCwgMTB9Ci19OwotCi0vKgotICogUC1mcmFtZSBNQ0JQQyB0YWJsZTogY29kZSwgbWFzaywgbmJpdHMsIGNiLCBjciwgbWIgdHlwZSAtPiAxMCA9IHVuZGVmaW5lZCAoYmVjYXVzZSB3ZSBoYXZlIGd1aW50KQotICovCi0jZGVmaW5lIE1DQlBDX1BfTEVOIDIxCi0jZGVmaW5lIE1DQlBDX1BfV0lEIDYKLXN0YXRpYyBjb25zdCBndWludDE2IG1jYnBjX1BbMjFdWzZdID0gewotICB7MHg4MDAwLCAweDgwMDAsIDEsIDAsIDAsIDB9LAotICB7MHgzMDAwLCAweGYwMDAsIDQsIDAsIDEsIDB9LAotICB7MHgyMDAwLCAweGYwMDAsIDQsIDEsIDAsIDB9LAotICB7MHgxNDAwLCAweGZjMDAsIDYsIDEsIDEsIDB9LAotICB7MHg2MDAwLCAweGUwMDAsIDMsIDAsIDAsIDF9LAotICB7MHgwZTAwLCAweGZlMDAsIDcsIDAsIDEsIDF9LAotICB7MHgwYzAwLCAweGZlMDAsIDcsIDEsIDAsIDF9LAotICB7MHgwMjgwLCAweGZmODAsIDksIDEsIDEsIDF9LAotICB7MHg0MDAwLCAweGUwMDAsIDMsIDAsIDAsIDJ9LAotICB7MHgwYTAwLCAweGZlMDAsIDcsIDAsIDEsIDJ9LAotICB7MHgwODAwLCAweGZlMDAsIDcsIDEsIDAsIDJ9LAotICB7MHgwNTAwLCAweGZmMDAsIDgsIDEsIDEsIDJ9LAotICB7MHgxODAwLCAweGY4MDAsIDUsIDAsIDAsIDN9LAotICB7MHgwNDAwLCAweGZmMDAsIDgsIDAsIDEsIDN9LAotICB7MHgwMzAwLCAweGZmMDAsIDgsIDEsIDAsIDN9LAotICB7MHgwNjAwLCAweGZlMDAsIDcsIDEsIDEsIDN9LAotICB7MHgxMDAwLCAweGZjMDAsIDYsIDAsIDAsIDR9LAotICB7MHgwMjAwLCAweGZmODAsIDksIDAsIDEsIDR9LAotICB7MHgwMTgwLCAweGZmODAsIDksIDEsIDAsIDR9LAotICB7MHgwMTAwLCAweGZmODAsIDksIDEsIDEsIDR9LAotICB7MHgwMDgwLCAweGZmODAsIDksIDEwLCAxMCwgMTB9Ci19OwotCi0vKgotICogSS1mcmFtZSBDQlBZIChjb2RlLCBtYXNrLCBuYml0cywgWTAsIFkxLCBZMiwgWTMpCi0gKi8KLSNkZWZpbmUgQ0JQWV9MRU4gMTYKLSNkZWZpbmUgQ0JQWV9XSUQgNwotc3RhdGljIGNvbnN0IGd1aW50OCBjYnB5X0lbMTZdWzddID0gewotICB7MHgzMCwgMHhmMCwgNCwgMCwgMCwgMCwgMH0sCi0gIHsweDI4LCAweGY4LCA1LCAwLCAwLCAwLCAxfSwKLSAgezB4MjAsIDB4ZjgsIDUsIDAsIDAsIDEsIDB9LAotICB7MHg5MCwgMHhmMCwgNCwgMCwgMCwgMSwgMX0sCi0gIHsweDE4LCAweGY4LCA1LCAwLCAxLCAwLCAwfSwKLSAgezB4NzAsIDB4ZjAsIDQsIDAsIDEsIDAsIDF9LAotICB7MHgwOCwgMHhmYywgNiwgMCwgMSwgMSwgMH0sCi0gIHsweGIwLCAweGYwLCA0LCAwLCAxLCAxLCAxfSwKLSAgezB4MTAsIDB4ZjgsIDUsIDEsIDAsIDAsIDB9LAotICB7MHgwYywgMHhmYywgNiwgMSwgMCwgMCwgMX0sCi0gIHsweDUwLCAweGYwLCA0LCAxLCAwLCAxLCAwfSwKLSAgezB4YTAsIDB4ZjAsIDQsIDEsIDAsIDEsIDF9LAotICB7MHg0MCwgMHhmMCwgNCwgMSwgMSwgMCwgMH0sCi0gIHsweDgwLCAweGYwLCA0LCAxLCAxLCAwLCAxfSwKLSAgezB4NjAsIDB4ZjAsIDQsIDEsIDEsIDEsIDB9LAotICB7MHhjMCwgMHhjMCwgMiwgMSwgMSwgMSwgMX0KLX07Ci0KLS8qCi0gKiBQLWZyYW1lIENCUFkgKGNvZGUsIG1hc2ssIG5iaXRzLCBZMCwgWTEsIFkyLCBZMykKLSAqLwotc3RhdGljIGNvbnN0IGd1aW50OCBjYnB5X1BbMTZdWzddID0gewotICB7MHgzMCwgMHhmMCwgNCwgMSwgMSwgMSwgMX0sCi0gIHsweDI4LCAweGY4LCA1LCAxLCAxLCAxLCAwfSwKLSAgezB4MjAsIDB4ZjgsIDUsIDEsIDEsIDAsIDF9LAotICB7MHg5MCwgMHhmMCwgNCwgMSwgMSwgMCwgMH0sCi0gIHsweDE4LCAweGY4LCA1LCAxLCAwLCAxLCAxfSwKLSAgezB4NzAsIDB4ZjAsIDQsIDEsIDAsIDEsIDB9LAotICB7MHgwOCwgMHhmYywgNiwgMSwgMCwgMCwgMX0sCi0gIHsweGIwLCAweGYwLCA0LCAxLCAwLCAwLCAwfSwKLSAgezB4MTAsIDB4ZjgsIDUsIDAsIDEsIDEsIDF9LAotICB7MHgwYywgMHhmYywgNiwgMCwgMSwgMSwgMH0sCi0gIHsweDUwLCAweGYwLCA0LCAwLCAxLCAwLCAxfSwKLSAgezB4YTAsIDB4ZjAsIDQsIDAsIDEsIDAsIDB9LAotICB7MHg0MCwgMHhmMCwgNCwgMCwgMCwgMSwgMX0sCi0gIHsweDgwLCAweGYwLCA0LCAwLCAwLCAxLCAwfSwKLSAgezB4NjAsIDB4ZjAsIDQsIDAsIDAsIDAsIDF9LAotICB7MHhjMCwgMHhjMCwgMiwgMCwgMCwgMCwgMH0KLX07Ci0KLS8qCi0gKiBCbG9jayBUQ09FRiB0YWJsZSAoY29kZSwgbWFzaywgbmJpdHMsIExBU1QsIFJVTiwgTEVWRUwpCi0gKi8KLSNkZWZpbmUgVENPRUZfTEVOIDEwMwotI2RlZmluZSBUQ09FRl9XSUQgNgotc3RhdGljIGNvbnN0IGd1aW50MTYgdGNvZWZbMTAzXVs2XSA9IHsKLSAgezB4ODAwMCwgMHhjMDAwLCAzLCAwLCAwLCAxfSwKLSAgezB4ZjAwMCwgMHhmMDAwLCA1LCAwLCAwLCAyfSwKLSAgezB4NTQwMCwgMHhmYzAwLCA3LCAwLCAwLCAzfSwKLSAgezB4MmUwMCwgMHhmZTAwLCA4LCAwLCAwLCA0fSwKLSAgezB4MWYwMCwgMHhmZjAwLCA5LCAwLCAwLCA1fSwKLSAgezB4MTI4MCwgMHhmZjgwLCAxMCwgMCwgMCwgNn0sCi0gIHsweDEyMDAsIDB4ZmY4MCwgMTAsIDAsIDAsIDd9LAotICB7MHgwODQwLCAweGZmYzAsIDExLCAwLCAwLCA4fSwKLSAgezB4MDgwMCwgMHhmZmMwLCAxMSwgMCwgMCwgOX0sCi0gIHsweDAwZTAsIDB4ZmZlMCwgMTIsIDAsIDAsIDEwfSwgICAgICAgLy8xMAotICB7MHgwMGMwLCAweGZmZTAsIDEyLCAwLCAwLCAxMX0sCi0gIHsweDA0MDAsIDB4ZmZlMCwgMTIsIDAsIDAsIDEyfSwKLSAgezB4YzAwMCwgMHhlMDAwLCA0LCAwLCAxLCAxfSwKLSAgezB4NTAwMCwgMHhmYzAwLCA3LCAwLCAxLCAyfSwKLSAgezB4MWUwMCwgMHhmZjAwLCA5LCAwLCAxLCAzfSwKLSAgezB4MDNjMCwgMHhmZmMwLCAxMSwgMCwgMSwgNH0sCi0gIHsweDA0MjAsIDB4ZmZlMCwgMTIsIDAsIDEsIDV9LAotICB7MHgwNTAwLCAweGZmZjAsIDEzLCAwLCAxLCA2fSwKLSAgezB4ZTAwMCwgMHhmMDAwLCA1LCAwLCAyLCAxfSwKLSAgezB4MWQwMCwgMHhmZjAwLCA5LCAwLCAyLCAyfSwgLy8yMAotICB7MHgwMzgwLCAweGZmYzAsIDExLCAwLCAyLCAzfSwKLSAgezB4MDUxMCwgMHhmZmYwLCAxMywgMCwgMiwgNH0sCi0gIHsweDY4MDAsIDB4ZjgwMCwgNiwgMCwgMywgMX0sCi0gIHsweDExODAsIDB4ZmY4MCwgMTAsIDAsIDMsIDJ9LAotICB7MHgwMzQwLCAweGZmYzAsIDExLCAwLCAzLCAzfSwKLSAgezB4NjAwMCwgMHhmODAwLCA2LCAwLCA0LCAxfSwKLSAgezB4MTEwMCwgMHhmZjgwLCAxMCwgMCwgNCwgMn0sCi0gIHsweDA1MjAsIDB4ZmZmMCwgMTMsIDAsIDQsIDN9LAotICB7MHg1ODAwLCAweGY4MDAsIDYsIDAsIDUsIDF9LAotICB7MHgwMzAwLCAweGZmYzAsIDExLCAwLCA1LCAyfSwgICAgICAgIC8vIDMwCi0gIHsweDA1MzAsIDB4ZmZmMCwgMTMsIDAsIDUsIDN9LAotICB7MHg0YzAwLCAweGZjMDAsIDcsIDAsIDYsIDF9LAotICB7MHgwMmMwLCAweGZmYzAsIDExLCAwLCA2LCAyfSwKLSAgezB4MDU0MCwgMHhmZmYwLCAxMywgMCwgNiwgM30sCi0gIHsweDQ4MDAsIDB4ZmMwMCwgNywgMCwgNywgMX0sCi0gIHsweDAyODAsIDB4ZmZjMCwgMTEsIDAsIDcsIDJ9LAotICB7MHg0NDAwLCAweGZjMDAsIDcsIDAsIDgsIDF9LAotICB7MHgwMjQwLCAweGZmYzAsIDExLCAwLCA4LCAyfSwKLSAgezB4NDAwMCwgMHhmYzAwLCA3LCAwLCA5LCAxfSwKLSAgezB4MDIwMCwgMHhmZmMwLCAxMSwgMCwgOSwgMn0sICAgICAgICAvLyA0MAotICB7MHgyYzAwLCAweGZlMDAsIDgsIDAsIDEwLCAxfSwKLSAgezB4MDU1MCwgMHhmZmYwLCAxMywgMCwgMTAsIDJ9LAotICB7MHgyYTAwLCAweGZlMDAsIDgsIDAsIDExLCAxfSwKLSAgezB4MjgwMCwgMHhmZTAwLCA4LCAwLCAxMiwgMX0sCi0gIHsweDFjMDAsIDB4ZmYwMCwgOSwgMCwgMTMsIDF9LAotICB7MHgxYjAwLCAweGZmMDAsIDksIDAsIDE0LCAxfSwKLSAgezB4MTA4MCwgMHhmZjgwLCAxMCwgMCwgMTUsIDF9LAotICB7MHgxMDAwLCAweGZmODAsIDEwLCAwLCAxNiwgMX0sCi0gIHsweDBmODAsIDB4ZmY4MCwgMTAsIDAsIDE3LCAxfSwKLSAgezB4MGYwMCwgMHhmZjgwLCAxMCwgMCwgMTgsIDF9LCAgICAgICAvLyA1MAotICB7MHgwZTgwLCAweGZmODAsIDEwLCAwLCAxOSwgMX0sCi0gIHsweDBlMDAsIDB4ZmY4MCwgMTAsIDAsIDIwLCAxfSwKLSAgezB4MGQ4MCwgMHhmZjgwLCAxMCwgMCwgMjEsIDF9LAotICB7MHgwZDAwLCAweGZmODAsIDEwLCAwLCAyMiwgMX0sCi0gIHsweDA0NDAsIDB4ZmZlMCwgMTIsIDAsIDIzLCAxfSwKLSAgezB4MDQ2MCwgMHhmZmUwLCAxMiwgMCwgMjQsIDF9LAotICB7MHgwNTYwLCAweGZmZjAsIDEzLCAwLCAyNSwgMX0sCi0gIHsweDA1NzAsIDB4ZmZmMCwgMTMsIDAsIDI2LCAxfSwKLSAgezB4NzAwMCwgMHhmMDAwLCA1LCAxLCAwLCAxfSwKLSAgezB4MGM4MCwgMHhmZjgwLCAxMCwgMSwgMCwgMn0sICAgICAgICAvLyA2MAotICB7MHgwMGEwLCAweGZmZTAsIDEyLCAxLCAwLCAzfSwKLSAgezB4M2MwMCwgMHhmYzAwLCA3LCAxLCAxLCAxfSwKLSAgezB4MDA4MCwgMHhmZmUwLCAxMiwgMSwgMSwgMn0sCi0gIHsweDM4MDAsIDB4ZmMwMCwgNywgMSwgMiwgMX0sCi0gIHsweDM0MDAsIDB4ZmMwMCwgNywgMSwgMywgMX0sCi0gIHsweDMwMDAsIDB4ZmMwMCwgNywgMSwgNCwgMX0sCi0gIHsweDI2MDAsIDB4ZmUwMCwgOCwgMSwgNSwgMX0sCi0gIHsweDI0MDAsIDB4ZmUwMCwgOCwgMSwgNiwgMX0sCi0gIHsweDIyMDAsIDB4ZmUwMCwgOCwgMSwgNywgMX0sCi0gIHsweDIwMDAsIDB4ZmUwMCwgOCwgMSwgOCwgMX0sIC8vIDcwCi0gIHsweDFhMDAsIDB4ZmYwMCwgOSwgMSwgOSwgMX0sCi0gIHsweDE5MDAsIDB4ZmYwMCwgOSwgMSwgMTAsIDF9LAotICB7MHgxODAwLCAweGZmMDAsIDksIDEsIDExLCAxfSwKLSAgezB4MTcwMCwgMHhmZjAwLCA5LCAxLCAxMiwgMX0sCi0gIHsweDE2MDAsIDB4ZmYwMCwgOSwgMSwgMTMsIDF9LAotICB7MHgxNTAwLCAweGZmMDAsIDksIDEsIDE0LCAxfSwKLSAgezB4MTQwMCwgMHhmZjAwLCA5LCAxLCAxNSwgMX0sCi0gIHsweDEzMDAsIDB4ZmYwMCwgOSwgMSwgMTYsIDF9LAotICB7MHgwYzAwLCAweGZmODAsIDEwLCAxLCAxNywgMX0sCi0gIHsweDBiODAsIDB4ZmY4MCwgMTAsIDEsIDE4LCAxfSwgICAgICAgLy8gODAKLSAgezB4MGIwMCwgMHhmZjgwLCAxMCwgMSwgMTksIDF9LAotICB7MHgwYTgwLCAweGZmODAsIDEwLCAxLCAyMCwgMX0sCi0gIHsweDBhMDAsIDB4ZmY4MCwgMTAsIDEsIDIxLCAxfSwKLSAgezB4MDk4MCwgMHhmZjgwLCAxMCwgMSwgMjIsIDF9LAotICB7MHgwOTAwLCAweGZmODAsIDEwLCAxLCAyMywgMX0sCi0gIHsweDA4ODAsIDB4ZmY4MCwgMTAsIDEsIDI0LCAxfSwKLSAgezB4MDFjMCwgMHhmZmMwLCAxMSwgMSwgMjUsIDF9LAotICB7MHgwMTgwLCAweGZmYzAsIDExLCAxLCAyNiwgMX0sCi0gIHsweDAxNDAsIDB4ZmZjMCwgMTEsIDEsIDI3LCAxfSwKLSAgezB4MDEwMCwgMHhmZmMwLCAxMSwgMSwgMjgsIDF9LCAgICAgICAvLyA5MAotICB7MHgwNDgwLCAweGZmZTAsIDEyLCAxLCAyOSwgMX0sCi0gIHsweDA0YTAsIDB4ZmZlMCwgMTIsIDEsIDMwLCAxfSwKLSAgezB4MDRjMCwgMHhmZmUwLCAxMiwgMSwgMzEsIDF9LAotICB7MHgwNGUwLCAweGZmZTAsIDEyLCAxLCAzMiwgMX0sCi0gIHsweDA1ODAsIDB4ZmZmMCwgMTMsIDEsIDMzLCAxfSwKLSAgezB4MDU5MCwgMHhmZmYwLCAxMywgMSwgMzQsIDF9LAotICB7MHgwNWEwLCAweGZmZjAsIDEzLCAxLCAzNSwgMX0sCi0gIHsweDA1YjAsIDB4ZmZmMCwgMTMsIDEsIDM2LCAxfSwKLSAgezB4MDVjMCwgMHhmZmYwLCAxMywgMSwgMzcsIDF9LAotICB7MHgwNWQwLCAweGZmZjAsIDEzLCAxLCAzOCwgMX0sICAgICAgIC8vIDEwMAotICB7MHgwNWUwLCAweGZmZjAsIDEzLCAxLCAzOSwgMX0sCi0gIHsweDA1ZjAsIDB4ZmZmMCwgMTMsIDEsIDQwLCAxfSwKLSAgezB4MDYwMCwgMHhmZTAwLCA3LCAwLCAweGZmZmYsIDB4ZmZmZn0KLX07Ci0KLS8qCi0gKiBNb3Rpb24gdmVjdG9yIGNvZGUgdGFibGUgKENvZGUsIG1hc2ssIG5iaXRzLCB2ZWN0b3IgKGhhbGZwaXhlbCwgdHdvJ3MgY29tcGxlbWVudCksIGRpZmYgKGhhbGZwaXhlbCwgdHdvJ3MgY29tcGxlbWVudCkpCi0gKi8KLSNkZWZpbmUgTVZEX0xFTiA2NAotI2RlZmluZSBNVkRfV0lEIDUKLXN0YXRpYyBjb25zdCBndWludDE2IG12ZFs2NF1bNV0gPSB7Ci0gIHsweDAwMjgsIDB4ZmZmOCwgMTMsIDB4MDA2MCwgMHgwMDIwfSwKLSAgezB4MDAzOCwgMHhmZmY4LCAxMywgMHgwMDYxLCAweDAwMjF9LAotICB7MHgwMDUwLCAweGZmZjAsIDEyLCAweDAwNjIsIDB4MDAyMn0sCi0gIHsweDAwNzAsIDB4ZmZmMCwgMTIsIDB4MDA2MywgMHgwMDIzfSwKLSAgezB4MDA5MCwgMHhmZmYwLCAxMiwgMHgwMDY0LCAweDAwMjR9LAotICB7MHgwMGIwLCAweGZmZjAsIDEyLCAweDAwNjUsIDB4MDAyNX0sCi0gIHsweDAwZDAsIDB4ZmZmMCwgMTIsIDB4MDA2NiwgMHgwMDI2fSwKLSAgezB4MDBmMCwgMHhmZmYwLCAxMiwgMHgwMDY3LCAweDAwMjd9LAotICB7MHgwMTIwLCAweGZmZTAsIDExLCAweDAwNjgsIDB4MDAyOH0sCi0gIHsweDAxNjAsIDB4ZmZlMCwgMTEsIDB4MDA2OSwgMHgwMDI5fSwKLSAgezB4MDFhMCwgMHhmZmUwLCAxMSwgMHgwMDZhLCAweDAwMmF9LAotICB7MHgwMWUwLCAweGZmZTAsIDExLCAweDAwNmIsIDB4MDAyYn0sCi0gIHsweDAyMjAsIDB4ZmZlMCwgMTEsIDB4MDA2YywgMHgwMDJjfSwKLSAgezB4MDI2MCwgMHhmZmUwLCAxMSwgMHgwMDZkLCAweDAwMmR9LAotICB7MHgwMmEwLCAweGZmZTAsIDExLCAweDAwNmUsIDB4MDAyZX0sCi0gIHsweDAyZTAsIDB4ZmZlMCwgMTEsIDB4MDA2ZiwgMHgwMDJmfSwKLSAgezB4MDMyMCwgMHhmZmUwLCAxMSwgMHgwMDcwLCAweDAwMzB9LAotICB7MHgwMzYwLCAweGZmZTAsIDExLCAweDAwNzEsIDB4MDAzMX0sCi0gIHsweDAzYTAsIDB4ZmZlMCwgMTEsIDB4MDA3MiwgMHgwMDMyfSwKLSAgezB4MDNlMCwgMHhmZmUwLCAxMSwgMHgwMDczLCAweDAwMzN9LAotICB7MHgwNDIwLCAweGZmZTAsIDExLCAweDAwNzQsIDB4MDAzNH0sCi0gIHsweDA0NjAsIDB4ZmZlMCwgMTEsIDB4MDA3NSwgMHgwMDM1fSwKLSAgezB4MDRjMCwgMHhmZmMwLCAxMCwgMHgwMDc2LCAweDAwMzZ9LAotICB7MHgwNTQwLCAweGZmYzAsIDEwLCAweDAwNzcsIDB4MDAzN30sCi0gIHsweDA1YzAsIDB4ZmZjMCwgMTAsIDB4MDA3OCwgMHgwMDM4fSwKLSAgezB4MDcwMCwgMHhmZjAwLCA4LCAweDAwNzksIDB4MDAzOX0sCi0gIHsweDA5MDAsIDB4ZmYwMCwgOCwgMHgwMDdhLCAweDAwM2F9LAotICB7MHgwYjAwLCAweGZmMDAsIDgsIDB4MDA3YiwgMHgwMDNifSwKLSAgezB4MGUwMCwgMHhmZTAwLCA3LCAweDAwN2MsIDB4MDAzY30sCi0gIHsweDE4MDAsIDB4ZjgwMCwgNSwgMHgwMDdkLCAweDAwM2R9LAotICB7MHgzMDAwLCAweGYwMDAsIDQsIDB4MDA3ZSwgMHgwMDNlfSwKLSAgezB4NjAwMCwgMHhlMDAwLCAzLCAweDAwN2YsIDB4MDAzZn0sCi0gIHsweDgwMDAsIDB4ODAwMCwgMSwgMHgwMDAwLCAweDAwMDB9LAotICB7MHg0MDAwLCAweGUwMDAsIDMsIDB4MDAwMSwgMHgwMDQxfSwKLSAgezB4MjAwMCwgMHhmMDAwLCA0LCAweDAwMDIsIDB4MDA0Mn0sCi0gIHsweDEwMDAsIDB4ZjgwMCwgNSwgMHgwMDAzLCAweDAwNDN9LAotICB7MHgwYzAwLCAweGZlMDAsIDcsIDB4MDAwNCwgMHgwMDQ0fSwKLSAgezB4MGEwMCwgMHhmZjAwLCA4LCAweDAwMDUsIDB4MDA0NX0sCi0gIHsweDA4MDAsIDB4ZmYwMCwgOCwgMHgwMDA2LCAweDAwNDZ9LAotICB7MHgwNjAwLCAweGZmMDAsIDgsIDB4MDAwNywgMHgwMDQ3fSwKLSAgezB4MDU4MCwgMHhmZmMwLCAxMCwgMHgwMDA4LCAweDAwNDh9LAotICB7MHgwNTAwLCAweGZmYzAsIDEwLCAweDAwMDksIDB4MDA0OX0sCi0gIHsweDA0ODAsIDB4ZmZjMCwgMTAsIDB4MDAwYSwgMHgwMDRhfSwKLSAgezB4MDQ0MCwgMHhmZmUwLCAxMSwgMHgwMDBiLCAweDAwNGJ9LAotICB7MHgwNDAwLCAweGZmZTAsIDExLCAweDAwMGMsIDB4MDA0Y30sCi0gIHsweDAzYzAsIDB4ZmZlMCwgMTEsIDB4MDAwZCwgMHgwMDRkfSwKLSAgezB4MDM4MCwgMHhmZmUwLCAxMSwgMHgwMDBlLCAweDAwNGV9LAotICB7MHgwMzQwLCAweGZmZTAsIDExLCAweDAwMGYsIDB4MDA0Zn0sCi0gIHsweDAzMDAsIDB4ZmZlMCwgMTEsIDB4MDAxMCwgMHgwMDUwfSwKLSAgezB4MDJjMCwgMHhmZmUwLCAxMSwgMHgwMDExLCAweDAwNTF9LAotICB7MHgwMjgwLCAweGZmZTAsIDExLCAweDAwMTIsIDB4MDA1Mn0sCi0gIHsweDAyNDAsIDB4ZmZlMCwgMTEsIDB4MDAxMywgMHgwMDUzfSwKLSAgezB4MDIwMCwgMHhmZmUwLCAxMSwgMHgwMDE0LCAweDAwNTR9LAotICB7MHgwMWMwLCAweGZmZTAsIDExLCAweDAwMTUsIDB4MDA1NX0sCi0gIHsweDAxODAsIDB4ZmZlMCwgMTEsIDB4MDAxNiwgMHgwMDU2fSwKLSAgezB4MDE0MCwgMHhmZmUwLCAxMSwgMHgwMDE3LCAweDAwNTd9LAotICB7MHgwMTAwLCAweGZmZTAsIDExLCAweDAwMTgsIDB4MDA1OH0sCi0gIHsweDAwZTAsIDB4ZmZmMCwgMTIsIDB4MDAxOSwgMHgwMDU5fSwKLSAgezB4MDBjMCwgMHhmZmYwLCAxMiwgMHgwMDFhLCAweDAwNWF9LAotICB7MHgwMGEwLCAweGZmZjAsIDEyLCAweDAwMWIsIDB4MDA1Yn0sCi0gIHsweDAwODAsIDB4ZmZmMCwgMTIsIDB4MDAxYywgMHgwMDVjfSwKLSAgezB4MDA2MCwgMHhmZmYwLCAxMiwgMHgwMDFkLCAweDAwNWR9LAotICB7MHgwMDQwLCAweGZmZjAsIDEyLCAweDAwMWUsIDB4MDA1ZX0sCi0gIHsweDAwMzAsIDB4ZmZmOCwgMTMsIDB4MDAxZiwgMHgwMDVmfQotfTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwaDI2M3BheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwaDI2M3BheV9kZWJ1ZykKLQotI2RlZmluZSBHU1RfUlRQX0hFQURFUl9MRU4gMTIKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTU9ERV9BX09OTFkKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjNfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1oMjYzLCAiCi0gICAgICAgICJ2YXJpYW50ID0gKHN0cmluZykgXCJpdHVcIiwgIiAiaDI2M3ZlcnNpb24gPSAoc3RyaW5nKSBcImgyNjNcIiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2M19wYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfSDI2M19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYzXCI7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiSDI2M1wiIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaDI2M19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfaDI2M19wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjYzX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2gyNjNfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICoKLSAgICBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNfcGF5X2JvdW5kcnlfaW5pdCAoR3N0UnRwSDI2M1BheUJvdW5kcnkgKiBib3VuZHJ5LAotICAgIGd1aW50OCAqIHN0YXJ0LCBndWludDggKiBlbmQsIGd1aW50OCBzYml0LCBndWludDggZWJpdCk7Ci1zdGF0aWMgR3N0UnRwSDI2M1BheUdvYiAqZ3N0X3J0cF9oMjYzX3BheV9nb2JfbmV3IChHc3RSdHBIMjYzUGF5Qm91bmRyeSAqCi0gICAgYm91bmRyeSwgZ3VpbnQgZ29ibik7Ci1zdGF0aWMgR3N0UnRwSDI2M1BheU1CICpnc3RfcnRwX2gyNjNfcGF5X21iX25ldyAoR3N0UnRwSDI2M1BheUJvdW5kcnkgKiBib3VuZHJ5LAotICAgIGd1aW50IG1iYSk7Ci1zdGF0aWMgR3N0UnRwSDI2M1BheVBhY2thZ2UgKmdzdF9ydHBfaDI2M19wYXlfcGFja2FnZV9uZXdfZW1wdHkgKCk7Ci1zdGF0aWMgR3N0UnRwSDI2M1BheVBhY2thZ2UgKmdzdF9ydHBfaDI2M19wYXlfcGFja2FnZV9uZXcgKGd1aW50OCAqIHN0YXJ0LAotICAgIGd1aW50OCAqIGVuZCwgZ3VpbnQgbGVuZ3RoLCBndWludDggc2JpdCwgZ3VpbnQ4IGViaXQsIEdzdEJ1ZmZlciAqIG91dGJ1ZiwKLSAgICBnYm9vbGVhbiBtYXJrZXIpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNfcGF5X21iX2Rlc3Ryb3kgKEdzdFJ0cEgyNjNQYXlNQiAqIG1iKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfaDI2M19wYXlfZ29iX2Rlc3Ryb3kgKEdzdFJ0cEgyNjNQYXlHb2IgKiBnb2IsIGd1aW50IGluZCk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNfcGF5X2NvbnRleHRfZGVzdHJveSAoR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0LAotICAgIGd1aW50IGluZCk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNfcGF5X3BhY2thZ2VfZGVzdHJveSAoR3N0UnRwSDI2M1BheVBhY2thZ2UgKiBwYWNrKTsKLQotI2RlZmluZSBnc3RfcnRwX2gyNjNfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEgyNjNQYXksIGdzdF9ydHBfaDI2M19wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzX3BheV9jbGFzc19pbml0IChHc3RSdHBIMjYzUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfaDI2M19wYXlfZmluYWxpemU7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9oMjYzX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfaDI2M19wYXlfaGFuZGxlX2J1ZmZlcjsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9oMjYzX3BheV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ydHBfaDI2M19wYXlfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX01PREVfQV9PTkxZLCBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm1vZGVhLW9ubHkiLAotICAgICAgICAgICJGcmFnbWVudCBwYWNrZXRzIGluIG1vZGUgQSBPbmx5IiwKLSAgICAgICAgICAiRGlzYWJsZSBwYWNrZXRpemF0aW9uIG1vZGVzIEIgYW5kIEMiLCBERUZBVUxUX01PREVfQSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjNfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2M19wYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgSDI2MyBwYWNrZXQgcGF5bG9hZGVyIiwgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZC1lbmNvZGVzIEgyNjMgdmlkZW8gaW4gUlRQIHBhY2tldHMgKFJGQyAyMTkwKSIsCi0gICAgICAiTmVpbCBTdHJhdGZvcmQgPG5laWxzQHZpcGFkaWEuY29tPiIKLSAgICAgICJEZWphbiBTYWtlbHNhayA8ZGVqYW4uc2FrZWxzYWtAbWFyYW5kLnNpPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjYzcGF5X2RlYnVnLCAicnRwaDI2M3BheSIsIDAsCi0gICAgICAiSDI2MyBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNfcGF5X2luaXQgKEdzdFJ0cEgyNjNQYXkgKiBydHBoMjYzcGF5KQotewotICBHU1RfUlRQX0JBU0VfUEFZTE9BRF9QVCAocnRwaDI2M3BheSkgPSBHU1RfUlRQX1BBWUxPQURfSDI2MzsKLSAgcnRwaDI2M3BheS0+cHJvcF9wYXlsb2FkX21vZGUgPSBERUZBVUxUX01PREVfQTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cEgyNjNQYXkgKnJ0cGgyNjNwYXk7Ci0KLSAgcnRwaDI2M3BheSA9IEdTVF9SVFBfSDI2M19QQVkgKG9iamVjdCk7Ci0KLSAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmcnRwaDI2M3BheS0+Y3VycmVudF9idWZmZXIsIE5VTEwpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjNfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdjaGFyICpmcmFtZXNpemUgPSBOVUxMOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAid2lkdGgiKSAmJgotICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHMsICJoZWlnaHQiKSkgewotICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAid2lkdGgiLCAmd2lkdGgpIHx8IHdpZHRoIDw9IDApIHsKLSAgICAgIGdvdG8gaW52YWxpZF9kaW1lbnNpb247Ci0gICAgfQotCi0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJoZWlnaHQiLCAmaGVpZ2h0KSB8fCBoZWlnaHQgPD0gMCkgewotICAgICAgZ290byBpbnZhbGlkX2RpbWVuc2lvbjsKLSAgICB9Ci0KLSAgICBmcmFtZXNpemUgPSBnX3N0cmR1cF9wcmludGYgKCIlZC0lZCIsIHdpZHRoLCBoZWlnaHQpOwotICB9Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJ2aWRlbyIsCi0gICAgICBwYXlsb2FkLT5wdCAhPSBHU1RfUlRQX1BBWUxPQURfSDI2MywgIkgyNjMiLCA5MDAwMCk7Ci0KLSAgaWYgKGZyYW1lc2l6ZSAhPSBOVUxMKSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsCi0gICAgICAgICJhLWZyYW1lc2l6ZSIsIEdfVFlQRV9TVFJJTkcsIGZyYW1lc2l6ZSwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotICB9Ci0gIGdfZnJlZSAoZnJhbWVzaXplKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9kaW1lbnNpb246Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwYXlsb2FkLCAiSW52YWxpZCB3aWR0aC9oZWlnaHQgZnJvbSBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNfcGF5X2NvbnRleHRfZGVzdHJveSAoR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0LCBndWludCBpbmQpCi17Ci0gIGlmICghY29udGV4dCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKGNvbnRleHQtPmdvYnMpIHsKLSAgICBndWludCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGZvcm1hdF9wcm9wc1tpbmRdWzBdOyBpKyspIHsKLSAgICAgIGlmIChjb250ZXh0LT5nb2JzW2ldKSB7Ci0gICAgICAgIGdzdF9ydHBfaDI2M19wYXlfZ29iX2Rlc3Ryb3kgKGNvbnRleHQtPmdvYnNbaV0sIGluZCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19mcmVlIChjb250ZXh0LT5nb2JzKTsKLSAgfQotCi0gIGdfZnJlZSAoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBIMjYzUGF5ICpydHBoMjYzcGF5OwotCi0gIHJ0cGgyNjNwYXkgPSBHU1RfUlRQX0gyNjNfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NT0RFX0FfT05MWToKLSAgICAgIHJ0cGgyNjNwYXktPnByb3BfcGF5bG9hZF9tb2RlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSDI2M1BheSAqcnRwaDI2M3BheTsKLQotICBydHBoMjYzcGF5ID0gR1NUX1JUUF9IMjYzX1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERV9BX09OTFk6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRwaDI2M3BheS0+cHJvcF9wYXlsb2FkX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0UnRwSDI2M1BheVBhY2thZ2UgKgotZ3N0X3J0cF9oMjYzX3BheV9wYWNrYWdlX25ld19lbXB0eSAodm9pZCkKLXsKLSAgcmV0dXJuIChHc3RSdHBIMjYzUGF5UGFja2FnZSAqKSBnX21hbGxvYzAgKHNpemVvZiAoR3N0UnRwSDI2M1BheVBhY2thZ2UpKTsKLX0KLQotc3RhdGljIEdzdFJ0cEgyNjNQYXlQYWNrYWdlICoKLWdzdF9ydHBfaDI2M19wYXlfcGFja2FnZV9uZXcgKGd1aW50OCAqIHN0YXJ0LCBndWludDggKiBlbmQsIGd1aW50IGxlbmd0aCwKLSAgICBndWludDggc2JpdCwgZ3VpbnQ4IGViaXQsIEdzdEJ1ZmZlciAqIG91dGJ1ZiwgZ2Jvb2xlYW4gbWFya2VyKQotewotCi0gIEdzdFJ0cEgyNjNQYXlQYWNrYWdlICpwYWNrYWdlOwotCi0gIHBhY2thZ2UgPSBnc3RfcnRwX2gyNjNfcGF5X3BhY2thZ2VfbmV3X2VtcHR5ICgpOwotCi0gIHBhY2thZ2UtPnBheWxvYWRfc3RhcnQgPSBzdGFydDsKLSAgcGFja2FnZS0+cGF5bG9hZF9lbmQgPSBlbmQ7Ci0gIHBhY2thZ2UtPnBheWxvYWRfbGVuID0gbGVuZ3RoOwotICBwYWNrYWdlLT5zYml0ID0gc2JpdDsKLSAgcGFja2FnZS0+ZWJpdCA9IGViaXQ7Ci0gIHBhY2thZ2UtPm91dGJ1ZiA9IG91dGJ1ZjsKLSAgcGFja2FnZS0+bWFya2VyID0gbWFya2VyOwotCi0gIHJldHVybiBwYWNrYWdlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzX3BheV9wYWNrYWdlX2Rlc3Ryb3kgKEdzdFJ0cEgyNjNQYXlQYWNrYWdlICogcGFjaykKLXsKLSAgaWYgKHBhY2spCi0gICAgZ19mcmVlIChwYWNrKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19wYXlfYm91bmRyeV9pbml0IChHc3RSdHBIMjYzUGF5Qm91bmRyeSAqIGJvdW5kcnksCi0gICAgZ3VpbnQ4ICogc3RhcnQsIGd1aW50OCAqIGVuZCwgZ3VpbnQ4IHNiaXQsIGd1aW50OCBlYml0KQotewotICBib3VuZHJ5LT5zdGFydCA9IHN0YXJ0OwotICBib3VuZHJ5LT5lbmQgPSBlbmQ7Ci0gIGJvdW5kcnktPnNiaXQgPSBzYml0OwotICBib3VuZHJ5LT5lYml0ID0gZWJpdDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19wYXlfc3BsYXRfaGVhZGVyX0EgKGd1aW50OCAqIGhlYWRlciwKLSAgICBHc3RSdHBIMjYzUGF5UGFja2FnZSAqIHBhY2thZ2UsIEdzdFJ0cEgyNjNQYXlQaWMgKiBwaWNsYXllcikKLXsKLQotICBHc3RSdHBIMjYzUGF5QUhlYWRlciAqYV9oZWFkZXI7Ci0KLSAgYV9oZWFkZXIgPSAoR3N0UnRwSDI2M1BheUFIZWFkZXIgKikgaGVhZGVyOwotCi0gIGFfaGVhZGVyLT5mID0gMDsKLSAgYV9oZWFkZXItPnAgPSAwOwotICBhX2hlYWRlci0+c2JpdCA9IHBhY2thZ2UtPnNiaXQ7Ci0gIGFfaGVhZGVyLT5lYml0ID0gcGFja2FnZS0+ZWJpdDsKLSAgYV9oZWFkZXItPnNyYyA9IEdTVF9IMjYzX1BJQ1RVUkVMQVlFUl9QTFNSQyAocGljbGF5ZXIpOwotICBhX2hlYWRlci0+aSA9IEdTVF9IMjYzX1BJQ1RVUkVMQVlFUl9QTFRZUEUgKHBpY2xheWVyKTsKLSAgYV9oZWFkZXItPnUgPSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExVTVYgKHBpY2xheWVyKTsKLSAgYV9oZWFkZXItPnMgPSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExTQUMgKHBpY2xheWVyKTsKLSAgYV9oZWFkZXItPmEgPSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExBUCAocGljbGF5ZXIpOwotICBhX2hlYWRlci0+cjEgPSAwOwotICBhX2hlYWRlci0+cjIgPSAwOwotICBhX2hlYWRlci0+ZGJxID0gMDsKLSAgYV9oZWFkZXItPnRyYiA9IDA7Ci0gIGFfaGVhZGVyLT50ciA9IDA7Ci0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19wYXlfc3BsYXRfaGVhZGVyX0IgKGd1aW50OCAqIGhlYWRlciwKLSAgICBHc3RSdHBIMjYzUGF5UGFja2FnZSAqIHBhY2thZ2UsIEdzdFJ0cEgyNjNQYXlQaWMgKiBwaWNsYXllcikKLXsKLQotICBHc3RSdHBIMjYzUGF5QkhlYWRlciAqYl9oZWFkZXI7Ci0KLSAgYl9oZWFkZXIgPSAoR3N0UnRwSDI2M1BheUJIZWFkZXIgKikgaGVhZGVyOwotCi0gIGJfaGVhZGVyLT5mID0gMTsKLSAgYl9oZWFkZXItPnAgPSAwOwotICBiX2hlYWRlci0+c2JpdCA9IHBhY2thZ2UtPnNiaXQ7Ci0gIGJfaGVhZGVyLT5lYml0ID0gcGFja2FnZS0+ZWJpdDsKLSAgYl9oZWFkZXItPnNyYyA9IEdTVF9IMjYzX1BJQ1RVUkVMQVlFUl9QTFNSQyAocGljbGF5ZXIpOwotICBiX2hlYWRlci0+cXVhbnQgPSBwYWNrYWdlLT5xdWFudDsKLSAgYl9oZWFkZXItPmdvYm4gPSBwYWNrYWdlLT5nb2JuOwotICBiX2hlYWRlci0+bWJhMSA9IHBhY2thZ2UtPm1iYSA+PiA2OwotICBiX2hlYWRlci0+bWJhMiA9IHBhY2thZ2UtPm1iYSAmIDB4MDAzZjsKLSAgYl9oZWFkZXItPnIgPSAwOwotICBiX2hlYWRlci0+aSA9IEdTVF9IMjYzX1BJQ1RVUkVMQVlFUl9QTFRZUEUgKHBpY2xheWVyKTsKLSAgYl9oZWFkZXItPnUgPSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExVTVYgKHBpY2xheWVyKTsKLSAgYl9oZWFkZXItPnMgPSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExTQUMgKHBpY2xheWVyKTsKLSAgYl9oZWFkZXItPmEgPSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExBUCAocGljbGF5ZXIpOwotCi0gIGJfaGVhZGVyLT5obXYxMSA9IDA7Ci0gIGJfaGVhZGVyLT5obXYxMiA9IDA7Ci0gIGJfaGVhZGVyLT52bXYxMSA9IDA7Ci0gIGJfaGVhZGVyLT52bXYxMiA9IDA7Ci0gIGJfaGVhZGVyLT5obXYyMSA9IDA7Ci0gIGJfaGVhZGVyLT5obXYyMiA9IDA7Ci0gIGJfaGVhZGVyLT52bXYyMSA9IDA7Ci0KLSAgaWYgKHBhY2thZ2UtPm5tdmQgPiAwKSB7Ci0gICAgLy9tdmRbMF0KLSAgICBiX2hlYWRlci0+aG12MTEgPSAocGFja2FnZS0+bXZkWzBdICYgMHg3ZikgPj4gMzsKLSAgICBiX2hlYWRlci0+aG12MTIgPSAocGFja2FnZS0+bXZkWzBdICYgMHgwNyk7Ci0gICAgLy9tdmRbMV0KLSAgICBiX2hlYWRlci0+dm12MTEgPSAocGFja2FnZS0+bXZkWzFdICYgMHgwN2YpID4+IDI7Ci0gICAgYl9oZWFkZXItPnZtdjEyID0gKHBhY2thZ2UtPm12ZFsxXSAmIDB4MDMpOwotCi0gICAgaWYgKHBhY2thZ2UtPm5tdmQgPT0gOCkgewotICAgICAgLy9tdmRbNF0KLSAgICAgIGJfaGVhZGVyLT5obXYyMSA9IChwYWNrYWdlLT5tdmRbNF0gJiAweDdmKSA+PiAxOwotICAgICAgYl9oZWFkZXItPmhtdjIyID0gKHBhY2thZ2UtPm12ZFs0XSAmIDB4MDEpOwotICAgICAgLy9tdmRbNV0KLSAgICAgIGJfaGVhZGVyLT52bXYyMSA9IChwYWNrYWdlLT5tdmRbNV0gJiAweDdmKTsKLSAgICB9Ci0gIH0KLQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2M19wYXlfZ29iZmluZGVyIChHc3RSdHBIMjYzUGF5ICogcnRwaDI2M3BheSwKLSAgICBHc3RSdHBIMjYzUGF5Qm91bmRyeSAqIGJvdW5kcnkpCi17Ci0gIGd1aW50OCAqY3VycmVudDsKLSAgZ3VpbnQgcmFuZ2U7Ci0gIGd1aW50IGk7Ci0KLSAgY3VycmVudCA9IGJvdW5kcnktPmVuZCArIDE7Ci0gIHJhbmdlID0gKHJ0cGgyNjNwYXktPmRhdGEgLSBjdXJyZW50KSArIHJ0cGgyNjNwYXktPmF2YWlsYWJsZV9kYXRhOwotCi0KLSAgR1NUX0RFQlVHICgiU2VhcmNoaW5nIGZvciBuZXh0IEdPQiwgZGF0YTolcCwgbGVuOiV1LCBwYXlsb2FkX2xlbjolcCwiCi0gICAgICAiIGN1cnJlbnQ6JXAsIHJhbmdlOiV1IiwgcnRwaDI2M3BheS0+ZGF0YSwgcnRwaDI2M3BheS0+YXZhaWxhYmxlX2RhdGEsCi0gICAgICBib3VuZHJ5LT5lbmQgKyAxLCBjdXJyZW50LCByYW5nZSk7Ci0KLSAgLyogSWYgd2UgYXJlIHBhc3QgdGhlIGVuZCwgc3RvcCAqLwotICBpZiAoY3VycmVudCA+PSBydHBoMjYzcGF5LT5kYXRhICsgcnRwaDI2M3BheS0+YXZhaWxhYmxlX2RhdGEpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZvciAoaSA9IDM7IGkgPCByYW5nZSAtIDM7IGkrKykgewotICAgIGlmICgoY3VycmVudFtpXSA9PSAweDApICYmCi0gICAgICAgIChjdXJyZW50W2kgKyAxXSA9PSAweDApICYmIChjdXJyZW50W2kgKyAyXSA+PiA3ID09IDB4MSkpIHsKLSAgICAgIEdTVF9MT0cgKCJHT0IgZW5kIGZvdW5kIGF0OiAlcCBzdGFydDogJXAgbGVuOiAldSIsIGN1cnJlbnQgKyBpIC0gMSwKLSAgICAgICAgICBib3VuZHJ5LT5lbmQgKyAxLCAoZ3VpbnQpIChjdXJyZW50ICsgaSAtIGJvdW5kcnktPmVuZCArIDIpKTsKLSAgICAgIGdzdF9ydHBfaDI2M19wYXlfYm91bmRyeV9pbml0IChib3VuZHJ5LCBib3VuZHJ5LT5lbmQgKyAxLAotICAgICAgICAgIGN1cnJlbnQgKyBpIC0gMSwgMCwgMCk7Ci0KLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIEdTVF9ERUJVRyAoIkNvdWxkbid0IGZpbmQgYW55IG5ldyBHQlNDIGluIHRoaXMgZnJhbWUsIHJhbmdlOiV1IiwgcmFuZ2UpOwotCi0gIGdzdF9ydHBfaDI2M19wYXlfYm91bmRyeV9pbml0IChib3VuZHJ5LCBib3VuZHJ5LT5lbmQgKyAxLAotICAgICAgKGd1aW50OCAqKSAocnRwaDI2M3BheS0+ZGF0YSArIHJ0cGgyNjNwYXktPmF2YWlsYWJsZV9kYXRhIC0gMSksIDAsIDApOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0UnRwSDI2M1BheUdvYiAqCi1nc3RfcnRwX2gyNjNfcGF5X2dvYl9uZXcgKEdzdFJ0cEgyNjNQYXlCb3VuZHJ5ICogYm91bmRyeSwgZ3VpbnQgZ29ibikKLXsKLSAgR3N0UnRwSDI2M1BheUdvYiAqZ29iOwotCi0gIGdvYiA9IChHc3RSdHBIMjYzUGF5R29iICopIGdfbWFsbG9jMCAoc2l6ZW9mIChHc3RSdHBIMjYzUGF5R29iKSk7Ci0KLSAgZ29iLT5zdGFydCA9IGJvdW5kcnktPnN0YXJ0OwotICBnb2ItPmVuZCA9IGJvdW5kcnktPmVuZDsKLSAgZ29iLT5sZW5ndGggPSBib3VuZHJ5LT5lbmQgLSBib3VuZHJ5LT5zdGFydCArIDE7Ci0gIGdvYi0+ZWJpdCA9IGJvdW5kcnktPmViaXQ7Ci0gIGdvYi0+c2JpdCA9IGJvdW5kcnktPnNiaXQ7Ci0gIGdvYi0+Z29ibiA9IGdvYm47Ci0gIGdvYi0+cXVhbnQgPSAwOwotICBnb2ItPm1hY3JvYmxvY2tzID0gTlVMTDsKLSAgZ29iLT5ubWFjcm9ibG9jcyA9IDA7Ci0KLSAgcmV0dXJuIGdvYjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2M19wYXlfZ29iX2Rlc3Ryb3kgKEdzdFJ0cEgyNjNQYXlHb2IgKiBnb2IsIGd1aW50IGluZCkKLXsKLQotICBpZiAoIWdvYikKLSAgICByZXR1cm47Ci0KLSAgaWYgKGdvYi0+bWFjcm9ibG9ja3MpIHsKLQotICAgIGd1aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZ29iLT5ubWFjcm9ibG9jczsgaSsrKSB7Ci0gICAgICBnc3RfcnRwX2gyNjNfcGF5X21iX2Rlc3Ryb3kgKGdvYi0+bWFjcm9ibG9ja3NbaV0pOwotICAgIH0KLQotICAgIGdfZnJlZSAoZ29iLT5tYWNyb2Jsb2Nrcyk7Ci0gIH0KLQotICBnX2ZyZWUgKGdvYik7Ci19Ci0KLS8qCi0gKiBkZWNvZGUgTUNCUEMgZm9yIEkgZnJhbWVzIGFuZCByZXR1cm4gaW5kZXggaW4gdGFibGUgb3IgLTEgaWYgbm90IGZvdW5kCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfcnRwX2gyNjNfcGF5X2RlY29kZV9tY2JwY19JIChndWludDMyIHZhbHVlKQotewotCi0gIGdpbnQgaTsKLSAgZ3VpbnQxNiBjb2RlOwotCi0gIGNvZGUgPSB2YWx1ZSA+PiAxNjsKLQotICBHU1RfTE9HICgidmFsdWU6MHglMDh4LCBjb2RlOjB4JTA0eCIsIHZhbHVlLCBjb2RlKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTUNCUENfSV9MRU47IGkrKykgewotICAgIGlmICgoY29kZSAmIG1jYnBjX0lbaV1bMV0pID09IG1jYnBjX0lbaV1bMF0pIHsKLSAgICAgIHJldHVybiBpOwotICAgIH0KLSAgfQotCi0gIEdTVF9XQVJOSU5HICgiQ291bGRuJ3QgZmluZCBjb2RlLCByZXR1cm5pbmcgLTEiKTsKLQotICByZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBkZWNvZGUgTUNCUEMgZm9yIFAgZnJhbWVzIGFuZCByZXR1cm4gaW5kZXggaW4gdGFibGUgb3IgLTEgaWYgbm90IGZvdW5kCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfcnRwX2gyNjNfcGF5X2RlY29kZV9tY2JwY19QIChndWludDMyIHZhbHVlKQotewotCi0gIGdpbnQgaTsKLSAgZ3VpbnQxNiBjb2RlOwotCi0gIGNvZGUgPSB2YWx1ZSA+PiAxNjsKLQotICBHU1RfTE9HICgidmFsdWU6MHglMDh4LCBjb2RlOjB4JTA0eCIsIHZhbHVlLCBjb2RlKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgTUNCUENfUF9MRU47IGkrKykgewotICAgIGlmICgoY29kZSAmIG1jYnBjX1BbaV1bMV0pID09IG1jYnBjX1BbaV1bMF0pIHsKLSAgICAgIHJldHVybiBpOwotICAgIH0KLSAgfQotCi0gIEdTVF9XQVJOSU5HICgiQ291bGRuJ3QgZmluZCBjb2RlLCByZXR1cm5pbmcgLTEiKTsKLQotICByZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBkZWNvZGUgQ0JQWSBhbmQgcmV0dXJuIGluZGV4IGluIHRhYmxlIG9yIC0xIGlmIG5vdCBmb3VuZAotICovCi1zdGF0aWMgZ2ludAotZ3N0X3J0cF9oMjYzX3BheV9kZWNvZGVfY2JweSAoZ3VpbnQzMiB2YWx1ZSwgY29uc3QgZ3VpbnQ4IGNicHlfdGFibGVbMTZdWzddKQotewotCi0gIGdpbnQgaTsKLSAgZ3VpbnQ4IGNvZGU7Ci0KLSAgY29kZSA9IHZhbHVlID4+IDI0OwotCi0gIEdTVF9MT0cgKCJ2YWx1ZToweCUwOHgsIGNvZGU6MHglMDR4IiwgdmFsdWUsIGNvZGUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBDQlBZX0xFTjsgaSsrKSB7Ci0gICAgaWYgKChjb2RlICYgY2JweV90YWJsZVtpXVsxXSkgPT0gY2JweV90YWJsZVtpXVswXSkgewotICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICB9Ci0KLSAgR1NUX1dBUk5JTkcgKCJDb3VsZG4ndCBmaW5kIGNvZGUsIHJldHVybmluZyAtMSIpOwotCi0gIHJldHVybiAtMTsKLX0KLQotLyoKLSAqIGRlY29kZSBNVkQgYW5kIHJldHVybiBpbmRleCBpbiB0YWJsZSBvciAtMSBpZiBub3QgZm91bmQKLSAqLwotc3RhdGljIGdpbnQKLWdzdF9ydHBfaDI2M19wYXlfZGVjb2RlX212ZCAoZ3VpbnQzMiB2YWx1ZSkKLXsKLQotICBnaW50IGk7Ci0gIGd1aW50MTYgY29kZTsKLQotICBjb2RlID0gdmFsdWUgPj4gMTY7Ci0KLSAgR1NUX0xPRyAoInZhbHVlOjB4JTA4eCwgY29kZToweCUwNHgiLCB2YWx1ZSwgY29kZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IE1WRF9MRU47IGkrKykgewotICAgIGlmICgoY29kZSAmIG12ZFtpXVsxXSkgPT0gbXZkW2ldWzBdKSB7Ci0gICAgICByZXR1cm4gaTsKLSAgICB9Ci0gIH0KLQotICBHU1RfV0FSTklORyAoIkNvdWxkbid0IGZpbmQgY29kZSwgcmV0dXJuaW5nIC0xIik7Ci0KLSAgcmV0dXJuIC0xOwotfQotCi0vKgotICogZGVjb2RlIFRDT0VGIGFuZCByZXR1cm4gaW5kZXggaW4gdGFibGUgb3IgLTEgaWYgbm90IGZvdW5kCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfcnRwX2gyNjNfcGF5X2RlY29kZV90Y29lZiAoZ3VpbnQzMiB2YWx1ZSkKLXsKLQotICBnaW50IGk7Ci0gIGd1aW50MTYgY29kZTsKLQotICBjb2RlID0gdmFsdWUgPj4gMTY7Ci0KLSAgR1NUX0xPRyAoInZhbHVlOjB4JTA4eCwgY29kZToweCUwNHgiLCB2YWx1ZSwgY29kZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IFRDT0VGX0xFTjsgaSsrKSB7Ci0gICAgaWYgKChjb2RlICYgdGNvZWZbaV1bMV0pID09IHRjb2VmW2ldWzBdKSB7Ci0gICAgICBHU1RfTE9HICgidGNvZWYgaXMgJWQiLCBpKTsKLSAgICAgIHJldHVybiBpOwotICAgIH0KLSAgfQotCi0gIEdTVF9XQVJOSU5HICgiQ291bGRuJ3QgZmluZCBjb2RlLCByZXR1cm5pbmcgLTEiKTsKLQotICByZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiB0aGUgMzItYml0IHJlZ2lzdGVyIGlzIGxpa2UgYSB3aW5kb3cgdGhhdCB3ZSBtb3ZlIHJpZ2h0IGZvciAibW92ZV9iaXRzIiB0byBnZXQgdGhlIG5leHQgdiAiZGF0YSIgaDI2MyBmaWVsZAotICogInJlc3RfYml0cyIgdGVsbHMgaG93IG1hbnkgYml0cyBpbiB0aGUgImRhdGEiIGJ5dGUgYWRkcmVzcyBhcmUgc3RpbGwgbm90IHVzZWQKLSAqLwotCi1zdGF0aWMgZ2ludAotZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0LCBndWludCBuLAotICAgIGd1aW50IHJlc3RfYml0cywgZ3VpbnQ4ICoqIG9yaWdfZGF0YSwgZ3VpbnQ4ICoqIGRhdGFfZW5kKQotewotCi0gIEdTVF9MT0cKLSAgICAgICgiTW92aW5nIHdpbmRvdzogMHglMDh4IGZyb206ICVwIGZvciAlZCBiaXRzLCByZXN0X2JpdHM6ICVkLCBkYXRhX2VuZCAlcCIsCi0gICAgICBjb250ZXh0LT53aW5kb3csIGNvbnRleHQtPndpbl9lbmQsIG4sIHJlc3RfYml0cywgKmRhdGFfZW5kKTsKLQotICBpZiAobiA9PSAwKQotICAgIHJldHVybiByZXN0X2JpdHM7Ci0KLSAgd2hpbGUgKG4gIT0gMCB8fCBjb250ZXh0LT53aW5fZW5kID09ICgoKmRhdGFfZW5kKSArIDEpKSB7Ci0gICAgZ3VpbnQ4IGIgPSBjb250ZXh0LT53aW5fZW5kIDw9ICpkYXRhX2VuZCA/ICpjb250ZXh0LT53aW5fZW5kIDogMDsKLSAgICBpZiAocmVzdF9iaXRzID09IDApIHsKLSAgICAgIGlmIChuID4gOCkgewotICAgICAgICBjb250ZXh0LT53aW5kb3cgPSAoY29udGV4dC0+d2luZG93IDw8IDgpIHwgYjsKLSAgICAgICAgbiAtPSA4OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+d2luZG93ID0gKGNvbnRleHQtPndpbmRvdyA8PCBuKSB8IChiID4+ICg4IC0gbikpOwotICAgICAgICByZXN0X2JpdHMgPSA4IC0gbjsKLSAgICAgICAgaWYgKHJlc3RfYml0cyA9PSAwKQotICAgICAgICAgIGNvbnRleHQtPndpbl9lbmQrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChuID4gcmVzdF9iaXRzKSB7Ci0gICAgICAgIGNvbnRleHQtPndpbmRvdyA9IChjb250ZXh0LT53aW5kb3cgPDwgcmVzdF9iaXRzKSB8Ci0gICAgICAgICAgICAoYiAmICgoKGd1aW50KSBwb3cgKDIuMCwgKGRvdWJsZSkgcmVzdF9iaXRzKSkgLSAxKSk7Ci0gICAgICAgIG4gLT0gcmVzdF9iaXRzOwotICAgICAgICByZXN0X2JpdHMgPSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC0+d2luZG93ID0gKGNvbnRleHQtPndpbmRvdyA8PCBuKSB8Ci0gICAgICAgICAgICAoKGIgJiAoKChndWludCkgcG93ICgyLjAsIChkb3VibGUpIHJlc3RfYml0cykpIC0gMSkpID4+Ci0gICAgICAgICAgICAocmVzdF9iaXRzIC0gbikpOwotICAgICAgICByZXN0X2JpdHMgLT0gbjsKLSAgICAgICAgaWYgKHJlc3RfYml0cyA9PSAwKQotICAgICAgICAgIGNvbnRleHQtPndpbl9lbmQrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC0+d2luX2VuZCsrOwotICB9Ci0KLSAgKm9yaWdfZGF0YSA9IGNvbnRleHQtPndpbl9lbmQgLSA0OwotCi0gIEdTVF9MT0cKLSAgICAgICgiV2luZG93IG1vdmVkIHRvICVwIHdpdGggdmFsdWU6IDB4JTA4eCBhbmQgb3JpZ19kYXRhOiAlcCByZXN0X2JpdHM6ICVkIiwKLSAgICAgIGNvbnRleHQtPndpbl9lbmQsIGNvbnRleHQtPndpbmRvdywgKm9yaWdfZGF0YSwgcmVzdF9iaXRzKTsKLSAgcmV0dXJuIHJlc3RfYml0czsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IE1CIChlbmQgb2YgdGhlIGN1cnJlbnQgTUIpCi0gKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXhjZXNzIGJpdHMgYW5kIHN0b3JlcyB0aGUgZW5kIG9mIHRoZSBNQiBpbiBlbmQKLSAqIGRhdGEgbXVzdCBiZSBwbGFjZWQgb24gZmlyc3QgTUIgYnl0ZQotICovCi1zdGF0aWMgR3N0UnRwSDI2M1BheU1CICoKLWdzdF9ydHBfaDI2M19wYXlfQl9tYmZpbmRlciAoR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0LAotICAgIEdzdFJ0cEgyNjNQYXlHb2IgKiBnb2IsIEdzdFJ0cEgyNjNQYXlNQiAqIG1hY3JvYmxvY2ssIGd1aW50IG1iYSkKLXsKLSAgZ3VpbnQgbWJfdHlwZV9pbmRleDsKLSAgZ3VpbnQgY2JweV90eXBlX2luZGV4OwotICBndWludCB0Y29lZl90eXBlX2luZGV4OwotICBHc3RSdHBIMjYzUGF5TUIgKm1hYzsKLSAgR3N0UnRwSDI2M1BheUJvdW5kcnkgYm91bmRyeTsKLQotICBnc3RfcnRwX2gyNjNfcGF5X2JvdW5kcnlfaW5pdCAoJmJvdW5kcnksIG1hY3JvYmxvY2stPmVuZCwKLSAgICAgIG1hY3JvYmxvY2stPmVuZCwgOCAtIG1hY3JvYmxvY2stPmViaXQsIG1hY3JvYmxvY2stPmViaXQpOwotICBtYWMgPSBnc3RfcnRwX2gyNjNfcGF5X21iX25ldyAoJmJvdW5kcnksIG1iYSk7Ci0KLSAgaWYgKG1hYy0+c2JpdCA9PSA4KSB7Ci0gICAgbWFjLT5zdGFydCsrOwotLy8gICAgIG1hYy0+ZW5kKys7Ci0gICAgbWFjLT5zYml0ID0gMDsKLSAgfQotCi0gIEdTVF9MT0cgKCJjdXJyZW50X3BvczolcCwgZW5kOiVwLCByZXN0X2JpdHM6JWQsIHdpbmRvdzoleCIsCi0gICAgICBtYWMtPnN0YXJ0LCBtYWMtPmVuZCwgbWFjcm9ibG9jay0+ZWJpdCwgY29udGV4dC0+d2luZG93KTsKLQotICBHU1RfTE9HICgiQ3VycmVudCBwb3MgYWZ0ZXIgQ09EOiAlcCIsIG1hYy0+ZW5kKTsKLQotICBpZiAoY29udGV4dC0+cGljbGF5ZXItPnB0eXBlX3BpY3R5cGUgPT0gMCkgewotICAgIC8vV2UgaGF2ZSBhbiBJIGZyYW1lCi0gICAgZ2ludCBpOwotICAgIGd1aW50IGxhc3Q7Ci0gICAgZ3VpbnQgaW5kOwotCi0gICAgLy9TdGVwIDIgZGVjb2RlIE1DQlBDIEkKLSAgICBtYl90eXBlX2luZGV4ID0gZ3N0X3J0cF9oMjYzX3BheV9kZWNvZGVfbWNicGNfSSAoY29udGV4dC0+d2luZG93KTsKLQotICAgIEdTVF9MT0cgKCJNQ0JQQyBpbmRleDogJWQiLCBtYl90eXBlX2luZGV4KTsKLSAgICBpZiAobWJfdHlwZV9pbmRleCA9PSAtMSkgewotICAgICAgR1NUX0VSUk9SICgiTUIgaW5kZXggc2hvdWxkbid0IGJlIC0xIGluIHdpbmRvdzogJTA4eCIsIGNvbnRleHQtPndpbmRvdyk7Ci0gICAgICBnb3RvIGJlYWNoOwotICAgIH0KLQotICAgIG1hYy0+ZWJpdCA9Ci0gICAgICAgIGdzdF9ydHBfaDI2M19wYXlfbW92ZV93aW5kb3dfcmlnaHQgKGNvbnRleHQsIG1jYnBjX0lbbWJfdHlwZV9pbmRleF1bMl0sCi0gICAgICAgIG1hYy0+ZWJpdCwgJm1hYy0+ZW5kLCAmZ29iLT5lbmQpOwotCi0gICAgbWFjLT5tYl90eXBlID0gbWNicGNfSVttYl90eXBlX2luZGV4XVs1XTsKLQotICAgIGlmIChtYl90eXBlX2luZGV4ID09IDgpIHsKLSAgICAgIEdTVF9MT0cgKCJTdHVmZmluZyBza2lwcGluZyByZXN0IG9mIE1CIGhlYWRlciIpOwotICAgICAgcmV0dXJuIG1hYzsKLSAgICB9Ci0gICAgLy9TdGVwIDMgZGVjb2RlIENCUFkgSQotICAgIGNicHlfdHlwZV9pbmRleCA9IGdzdF9ydHBfaDI2M19wYXlfZGVjb2RlX2NicHkgKGNvbnRleHQtPndpbmRvdywgY2JweV9JKTsKLQotICAgIEdTVF9MT0cgKCJDQlBZIGluZGV4OiAlZCIsIGNicHlfdHlwZV9pbmRleCk7Ci0gICAgaWYgKGNicHlfdHlwZV9pbmRleCA9PSAtMSkgewotICAgICAgR1NUX0VSUk9SICgiQ0JQWSBpbmRleCBzaG91bGRuJ3QgYmUgLTEgaW4gd2luZG93OiAlMDh4IiwgY29udGV4dC0+d2luZG93KTsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotCi0gICAgbWFjLT5lYml0ID0KLSAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgY2JweV9JW2NicHlfdHlwZV9pbmRleF1bMl0sCi0gICAgICAgIG1hYy0+ZWJpdCwgJm1hYy0+ZW5kLCAmZ29iLT5lbmQpOwotCi0gICAgLy9TdGVwIDQgZGVjb2RlIHJlc3Qgb2YgTUIKLSAgICAvL01CIHR5cGUgMSBhbmQgNCBoYXZlIERRVUFOVCAtIHdlIHN0b3JlIGl0IGZvciBwYWNrYWdpbmcgcHVycG9zZXMKLSAgICBpZiAobWNicGNfSVttYl90eXBlX2luZGV4XVs1XSA9PSA0KSB7Ci0gICAgICBHU1RfTE9HICgiU2hpZnRpbmcgRFFVQU5UIik7Ci0KLSAgICAgIG1hYy0+cXVhbnQgPSAoY29udGV4dC0+d2luZG93ID4+IDMwKTsKLQotICAgICAgbWFjLT5lYml0ID0KLSAgICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X21vdmVfd2luZG93X3JpZ2h0IChjb250ZXh0LCAyLCBtYWMtPmViaXQsICZtYWMtPmVuZCwKLSAgICAgICAgICAmZ29iLT5lbmQpOwotICAgIH0KLSAgICAvL1N0ZXAgNSBnbyB0cm91Z2ggdGhlIGJsb2NrcyAtIGRlY29kZSBEQyBhbmQgVENPRUYKLSAgICBsYXN0ID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgTl9CTE9DS1M7IGkrKykgewotCi0gICAgICBHU1RfTE9HICgiRGVjb2RpbmcgSU5UUkFEQyBhbmQgVENPRUYsIGk6JWQiLCBpKTsKLSAgICAgIG1hYy0+ZWJpdCA9Ci0gICAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgOCwgbWFjLT5lYml0LCAmbWFjLT5lbmQsCi0gICAgICAgICAgJmdvYi0+ZW5kKTsKLQotICAgICAgaWYgKGkgPiAzKSB7Ci0gICAgICAgIGluZCA9IG1jYnBjX0lbbWJfdHlwZV9pbmRleF1baSAtIDFdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW5kID0gY2JweV9JW2NicHlfdHlwZV9pbmRleF1baSArIDNdOwotICAgICAgfQotCi0gICAgICBpZiAoaW5kID09IDEpIHsKLSAgICAgICAgd2hpbGUgKGxhc3QgPT0gMCkgewotICAgICAgICAgIHRjb2VmX3R5cGVfaW5kZXggPSBnc3RfcnRwX2gyNjNfcGF5X2RlY29kZV90Y29lZiAoY29udGV4dC0+d2luZG93KTsKLQotICAgICAgICAgIEdTVF9MT0cgKCJUQ09FRiBpbmRleDogJWQiLCB0Y29lZl90eXBlX2luZGV4KTsKLSAgICAgICAgICBpZiAodGNvZWZfdHlwZV9pbmRleCA9PSAtMSkgewotICAgICAgICAgICAgR1NUX0VSUk9SICgiVENPRUYgaW5kZXggc2hvdWxkbid0IGJlIC0xIGluIHdpbmRvdzogJTA4eCIsCi0gICAgICAgICAgICAgICAgY29udGV4dC0+d2luZG93KTsKLSAgICAgICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICAgICAgfQotICAgICAgICAgIG1hYy0+ZWJpdCA9Ci0gICAgICAgICAgICAgIGdzdF9ydHBfaDI2M19wYXlfbW92ZV93aW5kb3dfcmlnaHQgKGNvbnRleHQsCi0gICAgICAgICAgICAgIHRjb2VmW3Rjb2VmX3R5cGVfaW5kZXhdWzJdLCBtYWMtPmViaXQsICZtYWMtPmVuZCwgJmdvYi0+ZW5kKTsKLQotICAgICAgICAgIGxhc3QgPSB0Y29lZlt0Y29lZl90eXBlX2luZGV4XVszXTsKLSAgICAgICAgICBpZiAodGNvZWZfdHlwZV9pbmRleCA9PSAxMDIpIHsKLSAgICAgICAgICAgIGlmICgoY29udGV4dC0+d2luZG93ICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkKLSAgICAgICAgICAgICAgbGFzdCA9IDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGxhc3QgPSAwOwotCi0gICAgICAgICAgICBtYWMtPmViaXQgPQotICAgICAgICAgICAgICAgIGdzdF9ydHBfaDI2M19wYXlfbW92ZV93aW5kb3dfcmlnaHQgKGNvbnRleHQsIDE1LAotICAgICAgICAgICAgICAgIG1hYy0+ZWJpdCwgJm1hYy0+ZW5kLCAmZ29iLT5lbmQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsYXN0ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfSBlbHNlIHsKLSAgICAvL1dlIGhhdmUgYSBQIGZyYW1lCi0gICAgZ3VpbnQgaTsKLSAgICBndWludCBsYXN0OwotICAgIGd1aW50IGluZDsKLQotICAgIC8vU3RlcCAxIGNoZWNrIENPRAotICAgIEdTVF9MT0cgKCJDaGVja2luZyBmb3IgQ09EIik7Ci0gICAgaWYgKChjb250ZXh0LT53aW5kb3cgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSB7Ci0gICAgICAvL1RoZSBNQiBpcyBub3QgY29kZWQKLSAgICAgIG1hYy0+ZWJpdCA9Ci0gICAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgMSwgbWFjLT5lYml0LCAmbWFjLT5lbmQsCi0gICAgICAgICAgJmdvYi0+ZW5kKTsKLSAgICAgIEdTVF9MT0cgKCJDT09PT09PT09PT09EID0gMSIpOwotCi0gICAgICByZXR1cm4gbWFjOwotICAgIH0gZWxzZSB7Ci0gICAgICAvL1RoZSBNQiBpcyBjb2RlZAotICAgICAgbWFjLT5lYml0ID0KLSAgICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X21vdmVfd2luZG93X3JpZ2h0IChjb250ZXh0LCAxLCBtYWMtPmViaXQsICZtYWMtPmVuZCwKLSAgICAgICAgICAmZ29iLT5lbmQpOwotICAgIH0KLQotICAgIC8vU3RlcCAyIGRlY29kZSBNQ0JQQyBQCi0gICAgbWJfdHlwZV9pbmRleCA9IGdzdF9ydHBfaDI2M19wYXlfZGVjb2RlX21jYnBjX1AgKGNvbnRleHQtPndpbmRvdyk7Ci0KLSAgICBHU1RfTE9HICgiTUNCUEMgaW5kZXg6ICVkIiwgbWJfdHlwZV9pbmRleCk7Ci0gICAgaWYgKG1iX3R5cGVfaW5kZXggPT0gLTEpIHsKLSAgICAgIEdTVF9FUlJPUiAoIk1CIGluZGV4IHNob3VsZG4ndCBiZSAtMSBpbiB3aW5kb3c6ICUwOHgiLCBjb250ZXh0LT53aW5kb3cpOwotICAgICAgZ290byBiZWFjaDsKLSAgICB9Ci0gICAgbWFjLT5lYml0ID0KLSAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgbWNicGNfUFttYl90eXBlX2luZGV4XVsyXSwKLSAgICAgICAgbWFjLT5lYml0LCAmbWFjLT5lbmQsICZnb2ItPmVuZCk7Ci0KLSAgICBtYWMtPm1iX3R5cGUgPSBtY2JwY19QW21iX3R5cGVfaW5kZXhdWzVdOwotCi0gICAgaWYgKG1iX3R5cGVfaW5kZXggPT0gMjApIHsKLSAgICAgIEdTVF9MT0cgKCJTdHVmZmluZyBza2lwcGluZyByZXN0IG9mIE1CIGhlYWRlciIpOwotICAgICAgcmV0dXJuIG1hYzsKLSAgICB9Ci0gICAgLy9TdGVwIDMgZGVjb2RlIENCUFkgUAotICAgIGNicHlfdHlwZV9pbmRleCA9IGdzdF9ydHBfaDI2M19wYXlfZGVjb2RlX2NicHkgKGNvbnRleHQtPndpbmRvdywgY2JweV9QKTsKLQotICAgIEdTVF9MT0cgKCJDQlBZIGluZGV4OiAlZCIsIGNicHlfdHlwZV9pbmRleCk7Ci0gICAgaWYgKGNicHlfdHlwZV9pbmRleCA9PSAtMSkgewotICAgICAgR1NUX0VSUk9SICgiQ0JQWSBpbmRleCBzaG91bGRuJ3QgYmUgLTEgaW4gd2luZG93OiAlMDh4IiwgY29udGV4dC0+d2luZG93KTsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotICAgIG1hYy0+ZWJpdCA9Ci0gICAgICAgIGdzdF9ydHBfaDI2M19wYXlfbW92ZV93aW5kb3dfcmlnaHQgKGNvbnRleHQsIGNicHlfUFtjYnB5X3R5cGVfaW5kZXhdWzJdLAotICAgICAgICBtYWMtPmViaXQsICZtYWMtPmVuZCwgJmdvYi0+ZW5kKTsKLQotICAgIC8vTUIgdHlwZSAxIGFuZCA0IGhhdmUgRFFVQU5UIC0gd2UgYWRkIGl0IHRvIE1CIG9iamVjdCBhbmQganVtcCBvdmVyCi0gICAgaWYgKG1jYnBjX1BbbWJfdHlwZV9pbmRleF1bNV0gPT0gNCB8fCBtY2JwY19QW21iX3R5cGVfaW5kZXhdWzVdID09IDEpIHsKLSAgICAgIEdTVF9MT0cgKCJTaGlmdGluZyBEUVVBTlQiKTsKLQotICAgICAgbWFjLT5xdWFudCA9IGNvbnRleHQtPndpbmRvdyA+PiAzMDsKLQotICAgICAgbWFjLT5lYml0ID0KLSAgICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X21vdmVfd2luZG93X3JpZ2h0IChjb250ZXh0LCAyLCBtYWMtPmViaXQsICZtYWMtPmVuZCwKLSAgICAgICAgICAmZ29iLT5lbmQpOwotICAgIH0KLSAgICAvL01CIHR5cGVzIDwgMyBoYXZlIE1WRDEtNAotICAgIGlmIChtY2JwY19QW21iX3R5cGVfaW5kZXhdWzVdIDwgMykgewotCi0gICAgICBndWludCBubXZkOwotICAgICAgZ2ludCBqOwotCi0gICAgICBubXZkID0gMjsKLSAgICAgIGlmIChtY2JwY19QW21iX3R5cGVfaW5kZXhdWzVdID09IDIpCi0gICAgICAgIG5tdmQgPSA4OwotCi0gICAgICBmb3IgKGogPSAwOyBqIDwgbm12ZDsgaisrKSB7Ci0gICAgICAgIGd1aW50IG12ZF90eXBlOwotCi0gICAgICAgIG12ZF90eXBlID0gZ3N0X3J0cF9oMjYzX3BheV9kZWNvZGVfbXZkIChjb250ZXh0LT53aW5kb3cpOwotCi0gICAgICAgIGlmIChtdmRfdHlwZSA9PSAtMSkgewotICAgICAgICAgIEdTVF9FUlJPUiAoIk1WRDEtNCBpbmRleCBzaG91bGRuJ3QgYmUgLTEgaW4gd2luZG93OiAlMDh4IiwKLSAgICAgICAgICAgICAgY29udGV4dC0+d2luZG93KTsKLSAgICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgICB9Ci0gICAgICAgIC8vc2V0IHRoZSBNQiBtdmQgdmFsdWVzCi0gICAgICAgIG1hYy0+bXZkW2pdID0gbXZkW212ZF90eXBlXVszXTsKLQotICAgICAgICBtYWMtPmViaXQgPQotICAgICAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgbXZkW212ZF90eXBlXVsyXSwKLSAgICAgICAgICAgIG1hYy0+ZWJpdCwgJm1hYy0+ZW5kLCAmZ29iLT5lbmQpOwotICAgICAgfQotCi0KLSAgICB9Ci0gICAgLy9TdGVwIDUgZ28gdHJvdWdoIHRoZSBibG9ja3MgLSBkZWNvZGUgREMgYW5kIFRDT0VGCi0gICAgbGFzdCA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IE5fQkxPQ0tTOyBpKyspIHsKLQotICAgICAgLy9pZiBNQiB0eXBlIDMgb3IgNCB0aGVuIElOVFJBREMgY29lZiBhcmUgcHJlc2VudCBpbiBibG9ja3MKLSAgICAgIGlmIChtY2JwY19QW21iX3R5cGVfaW5kZXhdWzVdID4gMikgewotICAgICAgICBHU1RfTE9HICgiSU5UUkFEQyBjb2VmOiAlZCIsIGkpOwotICAgICAgICBtYWMtPmViaXQgPQotICAgICAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgOCwgbWFjLT5lYml0LAotICAgICAgICAgICAgJm1hYy0+ZW5kLCAmZ29iLT5lbmQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0xPRyAoIklOVFJBREMgY29lZiBpcyBub3QgcHJlc2VudCIpOwotICAgICAgfQotCi0gICAgICAvL2NoZWNrIGlmIHRoZSBibG9jayBoYXMgVENPRUYKLSAgICAgIGlmIChpID4gMykgewotICAgICAgICBpbmQgPSBtY2JwY19QW21iX3R5cGVfaW5kZXhdW2kgLSAxXTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtY2JwY19QW21iX3R5cGVfaW5kZXhdWzVdID4gMikgewotICAgICAgICAgIGluZCA9IGNicHlfSVtjYnB5X3R5cGVfaW5kZXhdW2kgKyAzXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpbmQgPSBjYnB5X1BbY2JweV90eXBlX2luZGV4XVtpICsgM107Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGluZCA9PSAxKSB7Ci0gICAgICAgIHdoaWxlIChsYXN0ID09IDApIHsKLSAgICAgICAgICB0Y29lZl90eXBlX2luZGV4ID0gZ3N0X3J0cF9oMjYzX3BheV9kZWNvZGVfdGNvZWYgKGNvbnRleHQtPndpbmRvdyk7Ci0KLSAgICAgICAgICBHU1RfTE9HICgiVENPRUYgaW5kZXg6ICVkIiwgdGNvZWZfdHlwZV9pbmRleCk7Ci0gICAgICAgICAgaWYgKHRjb2VmX3R5cGVfaW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUiAoIlRDT0VGIGluZGV4IHNob3VsZG4ndCBiZSAtMSBpbiB3aW5kb3c6ICUwOHgiLAotICAgICAgICAgICAgICAgIGNvbnRleHQtPndpbmRvdyk7Ci0gICAgICAgICAgICBnb3RvIGJlYWNoOwotICAgICAgICAgIH0KLQotICAgICAgICAgIG1hYy0+ZWJpdCA9Ci0gICAgICAgICAgICAgIGdzdF9ydHBfaDI2M19wYXlfbW92ZV93aW5kb3dfcmlnaHQgKGNvbnRleHQsCi0gICAgICAgICAgICAgIHRjb2VmW3Rjb2VmX3R5cGVfaW5kZXhdWzJdLCBtYWMtPmViaXQsICZtYWMtPmVuZCwgJmdvYi0+ZW5kKTsKLQotICAgICAgICAgIGxhc3QgPSB0Y29lZlt0Y29lZl90eXBlX2luZGV4XVszXTsKLSAgICAgICAgICBpZiAodGNvZWZfdHlwZV9pbmRleCA9PSAxMDIpIHsKLSAgICAgICAgICAgIGlmICgoY29udGV4dC0+d2luZG93ICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkKLSAgICAgICAgICAgICAgbGFzdCA9IDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGxhc3QgPSAwOwotCi0gICAgICAgICAgICBtYWMtPmViaXQgPQotICAgICAgICAgICAgICAgIGdzdF9ydHBfaDI2M19wYXlfbW92ZV93aW5kb3dfcmlnaHQgKGNvbnRleHQsIDE1LAotICAgICAgICAgICAgICAgIG1hYy0+ZWJpdCwgJm1hYy0+ZW5kLCAmZ29iLT5lbmQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsYXN0ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBtYWMtPmxlbmd0aCA9IG1hYy0+ZW5kIC0gbWFjLT5zdGFydCArIDE7Ci0KLSAgcmV0dXJuIG1hYzsKLQotYmVhY2g6Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgR3N0UnRwSDI2M1BheU1CICoKLWdzdF9ydHBfaDI2M19wYXlfbWJfbmV3IChHc3RSdHBIMjYzUGF5Qm91bmRyeSAqIGJvdW5kcnksIGd1aW50IG1iYSkKLXsKLSAgR3N0UnRwSDI2M1BheU1CICptYjsKLSAgZ2ludCBpOwotCi0gIG1iID0gKEdzdFJ0cEgyNjNQYXlNQiAqKSBnX21hbGxvYzAgKHNpemVvZiAoR3N0UnRwSDI2M1BheU1CKSk7Ci0KLSAgbWItPnN0YXJ0ID0gYm91bmRyeS0+c3RhcnQ7Ci0gIG1iLT5lbmQgPSBib3VuZHJ5LT5lbmQ7Ci0gIG1iLT5sZW5ndGggPSBib3VuZHJ5LT5lbmQgLSBib3VuZHJ5LT5zdGFydCArIDE7Ci0gIG1iLT5zYml0ID0gYm91bmRyeS0+c2JpdDsKLSAgbWItPmViaXQgPSBib3VuZHJ5LT5lYml0OwotICBtYi0+bWJhID0gbWJhOwotCi0gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0gICAgbWItPm12ZFtpXSA9IDA7Ci0KLSAgcmV0dXJuIG1iOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzX3BheV9tYl9kZXN0cm95IChHc3RSdHBIMjYzUGF5TUIgKiBtYikKLXsKLSAgaWYgKCFtYikKLSAgICByZXR1cm47Ci0KLSAgZ19mcmVlIChtYik7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjNfcGF5X3B1c2ggKEdzdFJ0cEgyNjNQYXkgKiBydHBoMjYzcGF5LAotICAgIEdzdFJ0cEgyNjNQYXlDb250ZXh0ICogY29udGV4dCwgR3N0UnRwSDI2M1BheVBhY2thZ2UgKiBwYWNrYWdlKQotewotCi0gIC8qCi0gICAqIFNwbGF0IHRoZSBwYXlsb2FkIGhlYWRlciB2YWx1ZXMKLSAgICovCi0gIGd1aW50OCAqaGVhZGVyOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAocGFja2FnZS0+b3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLQotICBoZWFkZXIgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0KLSAgc3dpdGNoIChwYWNrYWdlLT5tb2RlKSB7Ci0gICAgY2FzZSBHU1RfUlRQX0gyNjNfUEFZTE9BRF9IRUFERVJfTU9ERV9BOgotICAgICAgR1NUX0xPRyAoIlB1c2hpbmcgQSBwYWNrZXQiKTsKLSAgICAgIGdzdF9ydHBfaDI2M19wYXlfc3BsYXRfaGVhZGVyX0EgKGhlYWRlciwgcGFja2FnZSwgY29udGV4dC0+cGljbGF5ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUlRQX0gyNjNfUEFZTE9BRF9IRUFERVJfTU9ERV9COgotICAgICAgR1NUX0xPRyAoIlB1c2hpbmcgQiBwYWNrZXQiKTsKLSAgICAgIGdzdF9ydHBfaDI2M19wYXlfc3BsYXRfaGVhZGVyX0IgKGhlYWRlciwgcGFja2FnZSwgY29udGV4dC0+cGljbGF5ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUlRQX0gyNjNfUEFZTE9BRF9IRUFERVJfTU9ERV9DOgotICAgICAgLy9nc3RfcnRwX2gyNjNfcGF5X3NwbGF0X2hlYWRlcl9DKGhlYWRlciwgcGFja2FnZSwgY29udGV4dC0+cGljbGF5ZXIpOwotICAgICAgLy9icmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgLyoKLSAgICogdGltZXN0YW1wIHRoZSBidWZmZXIKLSAgICovCi0gIEdTVF9CVUZGRVJfUFRTIChwYWNrYWdlLT5vdXRidWYpID0gcnRwaDI2M3BheS0+Zmlyc3RfdHM7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfc2V0X21hcmtlciAoJnJ0cCwgcGFja2FnZS0+bWFya2VyKTsKLSAgaWYgKHBhY2thZ2UtPm1hcmtlcikKLSAgICBHU1RfREVCVUcgKCJNYXJrZXIgc2V0ISIpOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAvKgotICAgKiBDb3B5IHRoZSBwYXlsb2FkIGRhdGEgaW4gdGhlIGJ1ZmZlcgotICAgKi8KLSAgR1NUX0RFQlVHICgiQ29weWluZyBtZW1vcnkiKTsKLSAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKHBhY2thZ2UtPm91dGJ1ZiwgcnRwaDI2M3BheS0+Y3VycmVudF9idWZmZXIsCi0gICAgICBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLCBwYWNrYWdlLT5wYXlsb2FkX3N0YXJ0IC0gcnRwaDI2M3BheS0+bWFwLmRhdGEsCi0gICAgICBwYWNrYWdlLT5wYXlsb2FkX2xlbik7Ci0gIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBoMjYzcGF5KSwgcGFja2FnZS0+b3V0YnVmLAotICAgICAgcnRwaDI2M3BheS0+Y3VycmVudF9idWZmZXIsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0gIHJldCA9Ci0gICAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwaDI2M3BheSksCi0gICAgICBwYWNrYWdlLT5vdXRidWYpOwotICBHU1RfREVCVUcgKCJQYWNrYWdlIHB1c2hlZCwgcmV0dXJuaW5nIik7Ci0KLSAgZ3N0X3J0cF9oMjYzX3BheV9wYWNrYWdlX2Rlc3Ryb3kgKHBhY2thZ2UpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjNfcGF5X0FfZnJhZ21lbnRfcHVzaCAoR3N0UnRwSDI2M1BheSAqIHJ0cGgyNjNwYXksCi0gICAgR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0LCBndWludCBmaXJzdCwgZ3VpbnQgbGFzdCkKLXsKLQotICBHc3RSdHBIMjYzUGF5UGFja2FnZSAqcGFjazsKLQotICBwYWNrID0gZ3N0X3J0cF9oMjYzX3BheV9wYWNrYWdlX25ld19lbXB0eSAoKTsKLQotICBwYWNrLT5wYXlsb2FkX3N0YXJ0ID0gY29udGV4dC0+Z29ic1tmaXJzdF0tPnN0YXJ0OwotICBwYWNrLT5zYml0ID0gY29udGV4dC0+Z29ic1tmaXJzdF0tPnNiaXQ7Ci0gIHBhY2stPmViaXQgPSBjb250ZXh0LT5nb2JzW2xhc3RdLT5lYml0OwotICBwYWNrLT5wYXlsb2FkX2xlbiA9Ci0gICAgICAoY29udGV4dC0+Z29ic1tsYXN0XS0+ZW5kIC0gY29udGV4dC0+Z29ic1tmaXJzdF0tPnN0YXJ0KSArIDE7Ci0gIHBhY2stPm1hcmtlciA9IEZBTFNFOwotCi0gIGlmIChsYXN0ID09IGNvbnRleHQtPm5vX2dvYnMgLSAxKSB7Ci0gICAgcGFjay0+bWFya2VyID0gVFJVRTsKLSAgfQotCi0gIHBhY2stPmdvYm4gPSBjb250ZXh0LT5nb2JzW2ZpcnN0XS0+Z29ibjsKLSAgcGFjay0+bW9kZSA9IEdTVF9SVFBfSDI2M19QQVlMT0FEX0hFQURFUl9NT0RFX0E7Ci0gIHBhY2stPm91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAocGFjay0+bW9kZSwgMCwgMCk7Ci0KLSAgR1NUX0RFQlVHICgiU2VuZGluZyBsZW46JWQgZGF0YSB0byBwdXNoIGZ1bmN0aW9uIiwgcGFjay0+cGF5bG9hZF9sZW4pOwotCi0gIHJldHVybiBnc3RfcnRwX2gyNjNfcGF5X3B1c2ggKHJ0cGgyNjNwYXksIGNvbnRleHQsIHBhY2spOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9oMjYzX3BheV9CX2ZyYWdtZW50X3B1c2ggKEdzdFJ0cEgyNjNQYXkgKiBydHBoMjYzcGF5LAotICAgIEdzdFJ0cEgyNjNQYXlDb250ZXh0ICogY29udGV4dCwgR3N0UnRwSDI2M1BheUdvYiAqIGdvYiwgZ3VpbnQgZmlyc3QsCi0gICAgZ3VpbnQgbGFzdCwgR3N0UnRwSDI2M1BheUJvdW5kcnkgKiBib3VuZHJ5KQotewotCi0gIEdzdFJ0cEgyNjNQYXlQYWNrYWdlICpwYWNrOwotICBndWludCBtdjsKLQotICBwYWNrID0gZ3N0X3J0cF9oMjYzX3BheV9wYWNrYWdlX25ld19lbXB0eSAoKTsKLQotICBwYWNrLT5wYXlsb2FkX3N0YXJ0ID0gZ29iLT5tYWNyb2Jsb2Nrc1tmaXJzdF0tPnN0YXJ0OwotICBwYWNrLT5zYml0ID0gZ29iLT5tYWNyb2Jsb2Nrc1tmaXJzdF0tPnNiaXQ7Ci0gIGlmIChmaXJzdCA9PSAwKSB7Ci0gICAgcGFjay0+cGF5bG9hZF9zdGFydCA9IGJvdW5kcnktPnN0YXJ0OwotICAgIHBhY2stPnNiaXQgPSBib3VuZHJ5LT5zYml0OwotICAgIHBhY2stPnF1YW50ID0gZ29iLT5xdWFudDsKLSAgfSBlbHNlIHsKLSAgICBwYWNrLT5xdWFudCA9IGdvYi0+bWFjcm9ibG9ja3NbZmlyc3RdLT5xdWFudDsKLSAgfQotICBwYWNrLT5wYXlsb2FkX2VuZCA9IGdvYi0+bWFjcm9ibG9ja3NbbGFzdF0tPmVuZDsKLQotICBwYWNrLT5lYml0ID0gZ29iLT5tYWNyb2Jsb2Nrc1tsYXN0XS0+ZWJpdDsKLSAgcGFjay0+bWJhID0gZ29iLT5tYWNyb2Jsb2Nrc1tmaXJzdF0tPm1iYTsKLSAgcGFjay0+Z29ibiA9IGdvYi0+Z29ibjsKLSAgcGFjay0+bW9kZSA9IEdTVF9SVFBfSDI2M19QQVlMT0FEX0hFQURFUl9NT0RFX0I7Ci0gIHBhY2stPm5tdmQgPSAwOwotCi0gIGlmIChnb2ItPm1hY3JvYmxvY2tzW2ZpcnN0XS0+bWJfdHlwZSA8IDMpIHsKLSAgICBpZiAoZ29iLT5tYWNyb2Jsb2Nrc1tmaXJzdF0tPm1iX3R5cGUgPT0gMikKLSAgICAgIHBhY2stPm5tdmQgPSA4OwotICAgIGVsc2UgaWYgKGdvYi0+bWFjcm9ibG9ja3NbZmlyc3RdLT5tYl90eXBlIDwgMikKLSAgICAgIHBhY2stPm5tdmQgPSAyOwotCi0gICAgZm9yIChtdiA9IDA7IG12IDwgcGFjay0+bm12ZDsgbXYrKykKLSAgICAgIHBhY2stPm12ZFttdl0gPSBnb2ItPm1hY3JvYmxvY2tzW2ZpcnN0XS0+bXZkW212XTsKLSAgfQotCi0gIHBhY2stPm1hcmtlciA9IEZBTFNFOwotICBpZiAobGFzdCA9PSBnb2ItPm5tYWNyb2Jsb2NzIC0gMSkgewotICAgIHBhY2stPmViaXQgPSAwOwotICB9Ci0KLSAgaWYgKChmb3JtYXRfcHJvcHNbY29udGV4dC0+cGljbGF5ZXItPnB0eXBlX3NyY2Zvcm1hdF1bMF0gLSAxID09IGdvYi0+Z29ibikKLSAgICAgICYmIChsYXN0ID09IGdvYi0+bm1hY3JvYmxvY3MgLSAxKSkgewotICAgIHBhY2stPm1hcmtlciA9IFRSVUU7Ci0gIH0KLQotICBwYWNrLT5wYXlsb2FkX2xlbiA9IHBhY2stPnBheWxvYWRfZW5kIC0gcGFjay0+cGF5bG9hZF9zdGFydCArIDE7Ci0gIHBhY2stPm91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAocGFjay0+bW9kZSwgMCwgMCk7Ci0KLSAgcmV0dXJuIGdzdF9ydHBfaDI2M19wYXlfcHVzaCAocnRwaDI2M3BheSwgY29udGV4dCwgcGFjayk7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjNfcGF5X21vZGVfQl9mcmFnbWVudCAoR3N0UnRwSDI2M1BheSAqIHJ0cGgyNjNwYXksCi0gICAgR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0LCBHc3RSdHBIMjYzUGF5R29iICogZ29iKQotewotCi0KLSAgICAvKi0tLS0tLS0tLS0gTU9ERSBCIE1PREUgRlJBR01FTlRBVElPTiAtLS0tLS0tLS0tKi8KLSAgR3N0UnRwSDI2M1BheU1CICptYWMsICptYWMwOwotICBndWludCBtYXhfcGF5bG9hZF9zaXplOwotICBHc3RSdHBIMjYzUGF5Qm91bmRyeSBib3VuZHJ5OwotICBndWludCBtYjsKLSAgZ3VpbnQ4IGViaXQ7Ci0KLSAgZ3VpbnQgZmlyc3QgPSAwOwotICBndWludCBwYXlsb2FkX2xlbjsKLQotICBtYXhfcGF5bG9hZF9zaXplID0KLSAgICAgIGNvbnRleHQtPm10dSAtIEdTVF9SVFBfSDI2M19QQVlMT0FEX0hFQURFUl9NT0RFX0IgLSBHU1RfUlRQX0hFQURFUl9MRU47Ci0KLSAgZ3N0X3J0cF9oMjYzX3BheV9ib3VuZHJ5X2luaXQgKCZib3VuZHJ5LCBnb2ItPnN0YXJ0LCBnb2ItPnN0YXJ0LCBnb2ItPnNiaXQsCi0gICAgICAwKTsKLQotICBnb2ItPm1hY3JvYmxvY2tzID0KLSAgICAgIChHc3RSdHBIMjYzUGF5TUIgKiopIGdfbWFsbG9jMCAoc2l6ZW9mIChHc3RSdHBIMjYzUGF5TUIgKikgKgotICAgICAgZm9ybWF0X3Byb3BzW2NvbnRleHQtPnBpY2xheWVyLT5wdHlwZV9zcmNmb3JtYXRdWzFdKTsKLQotICBHU1RfTE9HICgiR09CIGlzbid0IFBCIGZyYW1lLCBhcHBseWluZyBtb2RlIEIiKTsKLQotICAvL2luaXRpYWxpemluZyB3aW5kb3cKLSAgY29udGV4dC0+d2luX2VuZCA9IGJvdW5kcnkuZW5kOwotICBpZiAoZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgMzIsIGJvdW5kcnkuZWJpdCwKLSAgICAgICAgICAmYm91bmRyeS5lbmQsICZnb2ItPmVuZCkgIT0gMCkgewotICAgIEdTVF9FUlJPUgotICAgICAgICAoIlRoZSByZXN0IG9mIHRoZSBiaXRzIHNob3VsZCBiZSAwLCBleGl0aW5nLCBiZWNhdXNlIHNvbWV0aGluZyBiYWQgaGFwcGVuZCIpOwotICAgIGdvdG8gZGVjb2RlX2Vycm9yOwotICB9Ci0gIC8vVGhlIGZpcnN0IEdPQiBvZiBhIGZyYW1lICJoYXMgbm8iIGFjdHVhbCBoZWFkZXIgLSBQSUNUVVJFIGhlYWRlciBpcyBoaXMgaGVhZGVyCi0gIGlmIChnb2ItPmdvYm4gPT0gMCkgewotICAgIGd1aW50IHNoaWZ0OwotICAgIEdTVF9MT0cgKCJJbml0aWFsIEdPQiIpOwotICAgIHNoaWZ0ID0gNDM7Ci0KLSAgICBib3VuZHJ5LmViaXQgPQotICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X21vdmVfd2luZG93X3JpZ2h0IChjb250ZXh0LCBzaGlmdCwgYm91bmRyeS5lYml0LAotICAgICAgICAmYm91bmRyeS5lbmQsICZnb2ItPmVuZCk7Ci0KLSAgICAvL1dlIG5lZWQgUFFVQU5UIGZvciBtb2RlIEIgcGFja2FnZXMgLSBzbyB3ZSBzdG9yZSBpdAotICAgIGdvYi0+cXVhbnQgPSBjb250ZXh0LT53aW5kb3cgPj4gMjc7Ci0KLSAgICAvL2lmIFBDTSA9PSAxLCB0aGVuIFBTQkkgaXMgcHJlc2VudCAtIGhlYWRlciBoYXMgNTEgYml0cwotICAgIC8vc2hpZnQgZm9yIFBRVUFOVCAoNSkgYW5kIFBDTSAoMSkgPSA2IGJpdHMKLSAgICBzaGlmdCA9IDY7Ci0gICAgaWYgKGNvbnRleHQtPmNwbSA9PSAxKQotICAgICAgc2hpZnQgKz0gMjsKLSAgICBib3VuZHJ5LmViaXQgPQotICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X21vdmVfd2luZG93X3JpZ2h0IChjb250ZXh0LCBzaGlmdCwgYm91bmRyeS5lYml0LAotICAgICAgICAmYm91bmRyeS5lbmQsICZnb2ItPmVuZCk7Ci0KLSAgICBHU1RfREVCVUcgKCJ3aW5kb3c6IDB4JTA4eCIsIGNvbnRleHQtPndpbmRvdyk7Ci0KLSAgICAvL1NoaWZ0aW5nIHRoZSBQRUkgYW5kIFBTUEFSRSBmaWVsZHMKLSAgICB3aGlsZSAoKGNvbnRleHQtPndpbmRvdyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIHsKLSAgICAgIGJvdW5kcnkuZWJpdCA9Ci0gICAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgOSwKLSAgICAgICAgICBib3VuZHJ5LmViaXQsICZib3VuZHJ5LmVuZCwgJmdvYi0+ZW5kKTsKLSAgICAgIEdTVF9MT0cgKCJ3aW5kb3c6IDB4JXgiLCBjb250ZXh0LT53aW5kb3cpOwotICAgIH0KLQotICAgIC8vc2hpZnQgdGhlIGxhc3QgUEVJIGZpZWxkCi0gICAgYm91bmRyeS5lYml0ID0KLSAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgMSwgYm91bmRyeS5lYml0LAotICAgICAgICAmYm91bmRyeS5lbmQsICZnb2ItPmVuZCk7Ci0KLSAgfSBlbHNlIHsKLSAgICAvL3NraXBwaW5nIEdPQnMgMjQgaGVhZGVyIGJpdHMgKyA1IEdRVUFOVAotICAgIGd1aW50IHNoaWZ0ID0gMjQ7Ci0KLSAgICBHU1RfTE9HICgiSU5URVIgR09CIik7Ci0KLSAgICAvL2lmIENQTSA9PSAxLCB0aGVyZSBhcmUgMiBtb3JlIGJpdHMgaW4gdGhlIGhlYWRlciAtIEdTQkkgaGVhZGVyIGlzIDMxIGJpdHMgbG9uZwotICAgIGlmIChjb250ZXh0LT5jcG0gPT0gMSkKLSAgICAgIHNoaWZ0ICs9IDI7Ci0KLSAgICBHU1RfTE9HICgid2luZG93OiAweCV4IiwgY29udGV4dC0+d2luZG93KTsKLSAgICBib3VuZHJ5LmViaXQgPQotICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X21vdmVfd2luZG93X3JpZ2h0IChjb250ZXh0LCBzaGlmdCwKLSAgICAgICAgYm91bmRyeS5lYml0LCAmYm91bmRyeS5lbmQsICZnb2ItPmVuZCk7Ci0KLSAgICAvL1dlIG5lZWQgR1FVQU5UIGZvciBtb2RlIEIgcGFja2FnZXMgLSBzbyB3ZSBzdG9yZSBpdAotICAgIGdvYi0+cXVhbnQgPSBjb250ZXh0LT53aW5kb3cgPj4gMjc7Ci0KLSAgICBzaGlmdCA9IDU7Ci0gICAgYm91bmRyeS5lYml0ID0KLSAgICAgICAgZ3N0X3J0cF9oMjYzX3BheV9tb3ZlX3dpbmRvd19yaWdodCAoY29udGV4dCwgc2hpZnQsCi0gICAgICAgIGJvdW5kcnkuZWJpdCwgJmJvdW5kcnkuZW5kLCAmZ29iLT5lbmQpOwotCi0gICAgR1NUX0xPRyAoIndpbmRvdzogMHgleCIsIGNvbnRleHQtPndpbmRvdyk7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJHUVVBTlQgSVM6ICUwOHgiLCBnb2ItPnF1YW50KTsKLQotICAvLyBXZSBhcmUgb24gTUIgbGF5ZXIKLQotICBtYWMgPSBtYWMwID0gZ3N0X3J0cF9oMjYzX3BheV9tYl9uZXcgKCZib3VuZHJ5LCAwKTsKLSAgZm9yIChtYiA9IDA7IG1iIDwgZm9ybWF0X3Byb3BzW2NvbnRleHQtPnBpY2xheWVyLT5wdHlwZV9zcmNmb3JtYXRdWzFdOyBtYisrKSB7Ci0KLSAgICBHU1RfTE9HICgiPT09PT09PT09PT09PT09PSBTVEFSVCBNQiAlZCA9PT09PT09PT09PT09PT09PSIsIG1iKTsKLQotICAgIC8vRmluZCBuZXh0IG1hY3JvYmxvY2sgYm91bmRhcmllcwotICAgIGViaXQgPSBtYWMtPmViaXQ7Ci0gICAgaWYgKCEobWFjID0gZ3N0X3J0cF9oMjYzX3BheV9CX21iZmluZGVyIChjb250ZXh0LCBnb2IsIG1hYywgbWIpKSkgewotCi0gICAgICBHU1RfTE9HICgiRXJyb3IgZGVjb2RpbmcgTUIgLSBzYml0OiAlZCIsIDggLSBlYml0KTsKLSAgICAgIEdTVF9FUlJPUiAoIkVycm9yIGRlY29kaW5nIGluIEdPQiIpOwotCi0gICAgICBnc3RfcnRwX2gyNjNfcGF5X21iX2Rlc3Ryb3kgKG1hYzApOwotICAgICAgZ290byBkZWNvZGVfZXJyb3I7Ci0gICAgfQotCi0gICAgLyogU3RvcmUgbWFjcm9ibG9jayBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGFuZCBkZWxldGUgb2xkIE1CIGlmIGFueSAqLwotICAgIGdzdF9ydHBfaDI2M19wYXlfbWJfZGVzdHJveSAoZ29iLT5tYWNyb2Jsb2Nrc1ttYl0pOwotICAgIGdvYi0+bWFjcm9ibG9ja3NbbWJdID0gbWFjOwotCi0gICAgLy9JZiBtYl90eXBlID09IHN0dWZmaW5nLCBkb24ndCBpbmNyZW1lbnQgdGhlIG1iIGFkZHJlc3MKLSAgICBpZiAobWFjLT5tYl90eXBlID09IDEwKSB7Ci0gICAgICBtYi0tOwotICAgICAgY29udGludWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdvYi0+bm1hY3JvYmxvY3MrKzsKLSAgICB9Ci0KLSAgICBpZiAobWFjLT5lbmQgPj0gZ29iLT5lbmQpIHsKLSAgICAgIEdTVF9MT0cgKCJObyBtb3JlIE1CcyBpbiB0aGlzIEdPQiIpOwotICAgICAgaWYgKCFtYWMtPmViaXQpIHsKLSAgICAgICAgbWFjLT5lbmQtLTsKLSAgICAgIH0KLSAgICAgIGdvYi0+ZW5kID0gbWFjLT5lbmQ7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgR1NUX0RFQlVHICgiRm91bmQgTUI6IG1iYTogJWQgc3RhcnQ6ICVwIGVuZDogJXAgbGVuOiAlZCBzYml0OiAlZCBlYml0OiAlZCIsCi0gICAgICAgIG1hYy0+bWJhLCBtYWMtPnN0YXJ0LCBtYWMtPmVuZCwgbWFjLT5sZW5ndGgsIG1hYy0+c2JpdCwgbWFjLT5lYml0KTsKLSAgICBHU1RfTE9HICgiPT09PT09PT09PT09PT09PSBFTkQgTUIgJWQgPT09PT09PT09PT09PT09PT0iLCBtYik7Ci0gIH0KLSAgZ3N0X3J0cF9oMjYzX3BheV9tYl9kZXN0cm95IChtYWMwKTsKLQotICBtYiA9IDA7Ci0gIGZpcnN0ID0gMDsKLSAgcGF5bG9hZF9sZW4gPSBib3VuZHJ5LmVuZCAtIGJvdW5kcnkuc3RhcnQgKyAxOwotICBHU1RfREVCVUcgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5FVyBQQUNLQUdFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgd2hpbGUgKG1iIDwgZ29iLT5ubWFjcm9ibG9jcykgewotICAgIGlmIChwYXlsb2FkX2xlbiArIGdvYi0+bWFjcm9ibG9ja3NbbWJdLT5sZW5ndGggPCBtYXhfcGF5bG9hZF9zaXplKSB7Ci0KLSAgICAgIC8vRklYTUU6IHBheWxvYWRfbGVuIGlzIG5vdCB0aGUgcmVhbCBsZW5ndGggLT4gaWdub3Jpbmcgc2JpdC9lYml0Ci0gICAgICBwYXlsb2FkX2xlbiArPSBnb2ItPm1hY3JvYmxvY2tzW21iXS0+bGVuZ3RoOwotICAgICAgbWIrKzsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAvL0ZJWE1FOiB3ZSBzaG91bGQgaW5jbHVkZSB0aGUgbGFzdCBmZXcgYml0cyBvZiB0aGUgR09CIGluIHRoZSBwYWNrYWdlIC0gZG8gd2UgZG8gdGhhdCBub3c/Ci0gICAgICAvL0dTVF9ERUJVRyAoIlB1c2hpbmcgR09CUyAlZCB0byAlZCBiZWNhdXNlIHBheWxvYWQgc2l6ZSBpcyAlZCIsIGZpcnN0LAotICAgICAgLy8gICAgZmlyc3QgPT0gbWIgLSAxLCBwYXlsb2FkX2xlbik7Ci0KLSAgICAgIC8vIEZJWE1FOiBzZWdmYXVsdCBpZiBtYiA9PSAwIChmaXJzdCBNQiBpcyBsYXJnZXIgdGhhbiBtYXhfcGF5bG9hZF9zaXplKQotICAgICAgR1NUX0RFQlVHICgiUHVzaCBCIG1vZGUgZnJhZ21lbnQgZnJvbSBtYiAlZCB0byAlZCIsIGZpcnN0LCBtYiAtIDEpOwotICAgICAgaWYgKGdzdF9ydHBfaDI2M19wYXlfQl9mcmFnbWVudF9wdXNoIChydHBoMjYzcGF5LCBjb250ZXh0LCBnb2IsIGZpcnN0LAotICAgICAgICAgICAgICBtYiAtIDEsICZib3VuZHJ5KSkgewotICAgICAgICBHU1RfRVJST1IgKCJPb29vcHMsIHRoZXJlIHdhcyBhbiBlcnJvciBzZW5kaW5nIik7Ci0gICAgICAgIGdvdG8gZGVjb2RlX2Vycm9yOwotICAgICAgfQotCi0gICAgICBwYXlsb2FkX2xlbiA9IDA7Ci0gICAgICBmaXJzdCA9IG1iOwotICAgICAgR1NUX0RFQlVHCi0gICAgICAgICAgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBQQUNLQUdFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICAgIEdTVF9ERUJVRwotICAgICAgICAgICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBORVcgUEFDS0FHRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0gICAgfQotICB9Ci0KLSAgLyogUHVzaCByZXN0ICovCi0gIEdTVF9ERUJVRyAoIlJlbWFpbmRlciBmaXJzdDogJWQsIE1COiAlZCIsIGZpcnN0LCBtYik7Ci0gIGlmIChwYXlsb2FkX2xlbiAhPSAwKSB7Ci0gICAgR1NUX0RFQlVHICgiUHVzaCBCIG1vZGUgZnJhZ21lbnQgZnJvbSBtYiAlZCB0byAlZCIsIGZpcnN0LCBtYiAtIDEpOwotICAgIGlmIChnc3RfcnRwX2gyNjNfcGF5X0JfZnJhZ21lbnRfcHVzaCAocnRwaDI2M3BheSwgY29udGV4dCwgZ29iLCBmaXJzdCwKLSAgICAgICAgICAgIG1iIC0gMSwgJmJvdW5kcnkpKSB7Ci0gICAgICBHU1RfRVJST1IgKCJPb29vcHMsIHRoZXJlIHdhcyBhbiBlcnJvciBzZW5kaW5nISIpOwotICAgICAgZ290byBkZWNvZGVfZXJyb3I7Ci0gICAgfQotICB9Ci0KLSAgICAvKi0tLS0tLS0tLS0gRU5EIE9GIE1PREUgQiBGUkFHTUVOVEFUSU9OIC0tLS0tLS0tLS0qLwotCi0gIHJldHVybiBUUlVFOwotCi1kZWNvZGVfZXJyb3I6Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2M19zZW5kX2VudGlyZV9mcmFtZSAoR3N0UnRwSDI2M1BheSAqIHJ0cGgyNjNwYXksCi0gICAgR3N0UnRwSDI2M1BheUNvbnRleHQgKiBjb250ZXh0KQotewotICBHc3RSdHBIMjYzUGF5UGFja2FnZSAqcGFjazsKLSAgcGFjayA9Ci0gICAgICBnc3RfcnRwX2gyNjNfcGF5X3BhY2thZ2VfbmV3IChydHBoMjYzcGF5LT5kYXRhLAotICAgICAgcnRwaDI2M3BheS0+ZGF0YSArIHJ0cGgyNjNwYXktPmF2YWlsYWJsZV9kYXRhLAotICAgICAgcnRwaDI2M3BheS0+YXZhaWxhYmxlX2RhdGEsIDAsIDAsIE5VTEwsIFRSVUUpOwotICBwYWNrLT5tb2RlID0gR1NUX1JUUF9IMjYzX1BBWUxPQURfSEVBREVSX01PREVfQTsKLQotICBHU1RfREVCVUcgKCJBdmFpbGFibGUgZGF0YTogJWQiLCBydHBoMjYzcGF5LT5hdmFpbGFibGVfZGF0YSk7Ci0KLSAgcGFjay0+b3V0YnVmID0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoR1NUX1JUUF9IMjYzX1BBWUxPQURfSEVBREVSX01PREVfQSwgMCwgMCk7Ci0KLSAgcmV0dXJuIGdzdF9ydHBfaDI2M19wYXlfcHVzaCAocnRwaDI2M3BheSwgY29udGV4dCwgcGFjayk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjNfcGF5X2ZsdXNoIChHc3RSdHBIMjYzUGF5ICogcnRwaDI2M3BheSkKLXsKLQotICAvKgotICAgKiBGSVhNRTogR1NUVUYgYml0cyBhcmUgaWdub3JlZCByaWdodCBub3csCi0gICAqICAtIG5vdCB1c2luZyBFQklUL1NCSVQgcGF5bG9hZCBoZWFkZXIgZmllbGRzIGluIG1vZGUgQSBmcmFnbWVudGF0aW9uIC0gZmZtcGVnIGRvZXNuJ3QgbmVlZCB0aGVtLCBidXQgb3RoZXJzPwotICAgKi8KLQotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UnRwSDI2M1BheUNvbnRleHQgKmNvbnRleHQ7Ci0gIGdpbnQgaTsKLQotICByZXQgPSAwOwotICBjb250ZXh0ID0gKEdzdFJ0cEgyNjNQYXlDb250ZXh0ICopIGdfbWFsbG9jMCAoc2l6ZW9mIChHc3RSdHBIMjYzUGF5Q29udGV4dCkpOwotICBjb250ZXh0LT5tdHUgPQotICAgICAgcnRwaDI2M3BheS0+cGF5bG9hZC5tdHUgLSAoTVRVX1NFQ1VSSVRZX09GRlNFVCArIEdTVF9SVFBfSEVBREVSX0xFTiArCi0gICAgICBHU1RfUlRQX0gyNjNfUEFZTE9BRF9IRUFERVJfTU9ERV9DKTsKLQotICBHU1RfREVCVUcgKCJNVFU6ICVkIiwgY29udGV4dC0+bXR1KTsKLSAgcnRwaDI2M3BheS0+YXZhaWxhYmxlX2RhdGEgPSBnc3RfYnVmZmVyX2dldF9zaXplIChydHBoMjYzcGF5LT5jdXJyZW50X2J1ZmZlcik7Ci0gIGlmIChydHBoMjYzcGF5LT5hdmFpbGFibGVfZGF0YSA9PSAwKSB7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLQotICAvKiBHZXQgYSBwb2ludGVyIHRvIGFsbCB0aGUgZGF0YSBmb3IgdGhlIGZyYW1lICovCi0gIGdzdF9idWZmZXJfbWFwIChydHBoMjYzcGF5LT5jdXJyZW50X2J1ZmZlciwgJnJ0cGgyNjNwYXktPm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcnRwaDI2M3BheS0+ZGF0YSA9IChndWludDggKikgcnRwaDI2M3BheS0+bWFwLmRhdGE7Ci0KLSAgLyogUGljdHVyZSBoZWFkZXIgKi8KLSAgY29udGV4dC0+cGljbGF5ZXIgPSAoR3N0UnRwSDI2M1BheVBpYyAqKSBydHBoMjYzcGF5LT5kYXRhOwotCi0gIGlmIChjb250ZXh0LT5waWNsYXllci0+cHR5cGVfcGljdHlwZSA9PSAwKQotICAgIEdTVF9ERUJVRyAoIldlIGdvdCBhbiBJLWZyYW1lIik7Ci0gIGVsc2UKLSAgICBHU1RfREVCVUcgKCJXZSBnb3QgYSBQLWZyYW1lIik7Ci0KLSAgY29udGV4dC0+Y3BtID0gcnRwaDI2M3BheS0+ZGF0YVs2XSA+PiA3OwotCi0gIEdTVF9ERUJVRyAoIkNQTTogJWQiLCBjb250ZXh0LT5jcG0pOwotCi0gIEdTVF9ERUJVRyAoIlBheWxvYWQgbGVuZ3RoIGlzOiAlZCIsIHJ0cGgyNjNwYXktPmF2YWlsYWJsZV9kYXRhKTsKLQotICAvKgotICAgKiAtIE1PREUgQSAtIElmIG5vcm1hbCwgSSBhbmQgUCBmcmFtZXMsICAtPiBtb2RlIEEKLSAgICogICAtIEdPQiBsYXllciBmcmFnbWVudGF0aW9uCi0gICAqIC0gTU9ERSBCIC0gSWYgbm9ybWFsLCBJIGFuZCBQIGZyYW1lcywgYnV0IEdPQnMgPiBtdHUKLSAgICogICAtIE1CIGxheWVyIGZyYWdtZW50YXRpb24KLSAgICogLSBNT0RFIEMgLSBGb3IgUCBmcmFtZXMgd2l0aCBQQiBvcHRpb24sIGJ1dCBHT0JzID4gbXR1Ci0gICAqICAgLSBNQiBsYXllciBmcmFnbWVudGF0aW9uCi0gICAqLwotICBpZiAocnRwaDI2M3BheS0+YXZhaWxhYmxlX2RhdGEgKyBHU1RfUlRQX0gyNjNfUEFZTE9BRF9IRUFERVJfTU9ERV9BICsKLSAgICAgIEdTVF9SVFBfSEVBREVSX0xFTiA8IGNvbnRleHQtPm10dSkgewotICAgIHJldCA9IGdzdF9ydHBfaDI2M19zZW5kX2VudGlyZV9mcmFtZSAocnRwaDI2M3BheSwgY29udGV4dCk7Ci0gIH0gZWxzZSB7Ci0KLSAgICAgIC8qLS0tLS0tLS0tLSBGUkFHTUVOVElORyBUSEUgRlJBTUUgQkVDQVVTRSBUT08gTEFSR0UgVE8gRklUIElOIE1UVSAtLS0tLS0tLS0tKi8KLSAgICBHc3RSdHBIMjYzUGF5Qm91bmRyeSBib3VuZDsKLSAgICBnaW50IGZpcnN0OwotICAgIGd1aW50IHBheWxvYWRfbGVuOwotICAgIGdib29sZWFuIGZvcmNlYSA9IEZBTFNFOwotCi0gICAgR1NUX0RFQlVHICgiRnJhbWUgdG9vIGxhcmdlIGZvciBNVFUiKTsKLSAgICAvKgotICAgICAqIExldCdzIGdvIHRyb3VnaCBhbGwgdGhlIGRhdGEgYW5kIGZyYWdtZW50IGl0IHVudGlsbCBlbmQgaXMgcmVhY2hlZAotICAgICAqLwotCi0gICAgZ3N0X3J0cF9oMjYzX3BheV9ib3VuZHJ5X2luaXQgKCZib3VuZCwgTlVMTCwgcnRwaDI2M3BheS0+ZGF0YSAtIDEsIDAsIDApOwotICAgIGNvbnRleHQtPmdvYnMgPQotICAgICAgICAoR3N0UnRwSDI2M1BheUdvYiAqKikgZ19tYWxsb2MwIChmb3JtYXRfcHJvcHNbY29udGV4dC0+Ci0gICAgICAgICAgICBwaWNsYXllci0+cHR5cGVfc3JjZm9ybWF0XVswXSAqIHNpemVvZiAoR3N0UnRwSDI2M1BheUdvYiAqKSk7Ci0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBmb3JtYXRfcHJvcHNbY29udGV4dC0+cGljbGF5ZXItPnB0eXBlX3NyY2Zvcm1hdF1bMF07IGkrKykgewotICAgICAgR1NUX0RFQlVHICgiU2VhcmNoaW5nIGZvciBnb2IgJWQiLCBpKTsKLSAgICAgIGlmICghZ3N0X3J0cF9oMjYzX3BheV9nb2JmaW5kZXIgKHJ0cGgyNjNwYXksICZib3VuZCkpIHsKLSAgICAgICAgaWYgKGkgPD0gMSkgewotICAgICAgICAgIEdTVF9XQVJOSU5HCi0gICAgICAgICAgICAgICgiTm8gR09CJ3Mgd2VyZSBmb3VuZCBpbiBkYXRhIHN0cmVhbSEgUGxlYXNlIGVuYWJsZSBSVFAgbW9kZSBpbiBlbmNvZGVyLiBGb3JjaW5nIG1vZGUgQSBmb3Igbm93LiIpOwotICAgICAgICAgIHJldCA9IGdzdF9ydHBfaDI2M19zZW5kX2VudGlyZV9mcmFtZSAocnRwaDI2M3BheSwgY29udGV4dCk7Ci0gICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogdHJ5IHRvIHNlbmQgZnJhZ21lbnRzIGNvcnJlc3BvbmRpbmcgdG8gZm91bmQgR09CcyAqLwotICAgICAgICAgIGZvcmNlYSA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgY29udGV4dC0+Z29ic1tpXSA9IGdzdF9ydHBfaDI2M19wYXlfZ29iX25ldyAoJmJvdW5kLCBpKTsKLSAgICAgIC8vRklYTUUgLSBlbmNvZGVycyBtYXkgZ2VuZXJhdGUgYW4gRU9TIGdvYiB0aGF0IGhhcyB0byBiZSBwcm9jZXNzZWQKLSAgICAgIEdTVF9ERUJVRwotICAgICAgICAgICgiR29iIHZhbHVlcyBhcmU6IGdvYm46ICVkLCBzdGFydDogJXAgbGVuOiAlZCBlYml0OiAlZCBzYml0OiAlZCIsIGksCi0gICAgICAgICAgY29udGV4dC0+Z29ic1tpXS0+c3RhcnQsIGNvbnRleHQtPmdvYnNbaV0tPmxlbmd0aCwKLSAgICAgICAgICBjb250ZXh0LT5nb2JzW2ldLT5lYml0LCBjb250ZXh0LT5nb2JzW2ldLT5zYml0KTsKLSAgICB9Ci0gICAgLyogTk9URSBzb21lIHBsYWNlcyBtYXkgc3RpbGwgYXNzdW1lIHRoaXMgdG8gYmUgdGhlIG1heCBwb3NzaWJsZSAqLwotICAgIGNvbnRleHQtPm5vX2dvYnMgPSBpOwotICAgIEdTVF9ERUJVRyAoIkZvdW5kICVkIEdPQlMgb2YgbWF4aW11bSAlZCIsCi0gICAgICAgIGNvbnRleHQtPm5vX2dvYnMsIGZvcm1hdF9wcm9wc1tjb250ZXh0LT5waWNsYXllci0+cHR5cGVfc3JjZm9ybWF0XVswXSk7Ci0KLSAgICAvLyBNYWtlIHBhY2thZ2VzIHNtYWxsZXIgdGhhbiBNVFUKLSAgICAvLyAgIEEgbW9kZQotICAgIC8vIC0gaWYgKCBHT0IgPiBNVFUpIC0+IEIgbW9kZSB8fCBDIG1vZGUKLSAgICAvLyAgIFB1c2ggcGFja2FnZXMKLQotICAgIGZpcnN0ID0gMDsKLSAgICBwYXlsb2FkX2xlbiA9IDA7Ci0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKGkgPCBjb250ZXh0LT5ub19nb2JzKSB7Ci0KLSAgICAgIGlmIChjb250ZXh0LT5nb2JzW2ldLT5sZW5ndGggPj0gY29udGV4dC0+bXR1KSB7Ci0gICAgICAgIGlmIChwYXlsb2FkX2xlbiA9PSAwKSB7Ci0KLSAgICAgICAgICBHU1RfREVCVUcgKCJHT0IgbGVuID4gTVRVIik7Ci0gICAgICAgICAgaWYgKHJ0cGgyNjNwYXktPnByb3BfcGF5bG9hZF9tb2RlIHx8IGZvcmNlYSkgewotICAgICAgICAgICAgcGF5bG9hZF9sZW4gPSBjb250ZXh0LT5nb2JzW2ldLT5sZW5ndGg7Ci0gICAgICAgICAgICBnb3RvIGZvcmNlX2E7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghY29udGV4dC0+cGljbGF5ZXItPnB0eXBlX3BibW9kZSkgewotICAgICAgICAgICAgR1NUX0RFQlVHICgiTU9ERSBCIG9uIEdPQiAlZCBuZWVkZWQiLCBpKTsKLSAgICAgICAgICAgIGlmICghZ3N0X3J0cF9oMjYzX3BheV9tb2RlX0JfZnJhZ21lbnQgKHJ0cGgyNjNwYXksIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdvYnNbaV0pKSB7Ci0gICAgICAgICAgICAgIEdTVF9FUlJPUiAoIlRoZXJlIHdhcyBhbiBlcnJvciBmcmFnbWVudGluZyBpbiBtb2RlIEIiKTsKLSAgICAgICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvL0lNUExFTUVOVCBDIG1vZGUKLSAgICAgICAgICAgIEdTVF9FUlJPUiAoIk1PREUgQyBvbiBHT0IgJWQgbmVlZGVkLCBidXQgbm90IHN1cHBvcnRlZCB5ZXQiLCBpKTsKLSAgICAgICAgICAgIC8qaWYoIWdzdF9ydHBfaDI2M19wYXlfbW9kZV9DX2ZyYWdtZW50KHJ0cGgyNjNwYXksIGNvbnRleHQsIGNvbnRleHQtPmdvYnNbaV0pKSB7Ci0gICAgICAgICAgICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgICAgICAgICAgIEdTVF9FUlJPUigiVGhlcmUgd2FzIGFuIGVycm9yIGZyYWdtZW50aW5nIGluIG1vZGUgQyIpOwotICAgICAgICAgICAgICAgZ290byBkZWNvZGVfZXJyb3I7Ci0gICAgICAgICAgICAgICB9ICovCi0gICAgICAgICAgICBnb3RvIGRlY29kZV9lcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgIGRlY29kZV9lcnJvcjoKLSAgICAgICAgICBpKys7Ci0gICAgICAgICAgZmlyc3QgPSBpOwotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBwYXlsb2FkX2FfcHVzaDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAocGF5bG9hZF9sZW4gKyBjb250ZXh0LT5nb2JzW2ldLT5sZW5ndGggPCBjb250ZXh0LT5tdHUpIHsKLSAgICAgICAgR1NUX0RFQlVHICgiR09CICVkIGZpbGxzIG10dSIsIGkpOwotICAgICAgICBwYXlsb2FkX2xlbiArPSBjb250ZXh0LT5nb2JzW2ldLT5sZW5ndGg7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGkgPT0gY29udGV4dC0+bm9fZ29icykgewotICAgICAgICAgIEdTVF9ERUJVRyAoIkxBU1QgR09CICVkIiwgaSk7Ci0gICAgICAgICAgZ290byBwYXlsb2FkX2FfcHVzaDsKLSAgICAgICAgfQotCi0gICAgICB9IGVsc2UgewotICAgICAgcGF5bG9hZF9hX3B1c2g6Ci0gICAgICAgIEdTVF9ERUJVRyAoIlB1c2hpbmcgR09CUyAlZCB0byAlZCBiZWNhdXNlIHBheWxvYWQgc2l6ZSBpcyAlZCIsIGZpcnN0LAotICAgICAgICAgICAgZmlyc3QgPT0gaSA/IGkgOiBpIC0gMSwgcGF5bG9hZF9sZW4pOwotICAgICAgICBnc3RfcnRwX2gyNjNfcGF5X0FfZnJhZ21lbnRfcHVzaCAocnRwaDI2M3BheSwgY29udGV4dCwgZmlyc3QsCi0gICAgICAgICAgICBmaXJzdCA9PSBpID8gaSA6IGkgLSAxKTsKLSAgICAgICAgcGF5bG9hZF9sZW4gPSAwOwotICAgICAgICBmaXJzdCA9IGk7Ci0gICAgICB9Ci0gICAgICBjb250aW51ZTsKLQotICAgIGZvcmNlX2E6Ci0gICAgICBHU1RfREVCVUcgKCJQdXNoaW5nIEdPQlMgJWQgdG8gJWQgYmVjYXVzZSBwYXlsb2FkIHNpemUgaXMgJWQiLCBmaXJzdCwgaSwKLSAgICAgICAgICBwYXlsb2FkX2xlbik7Ci0gICAgICBnc3RfcnRwX2gyNjNfcGF5X0FfZnJhZ21lbnRfcHVzaCAocnRwaDI2M3BheSwgY29udGV4dCwgZmlyc3QsIGkpOwotICAgICAgcGF5bG9hZF9sZW4gPSAwOwotICAgICAgaSsrOwotICAgICAgZmlyc3QgPSBpOwotICAgIH0KLQotCi0gIH0vKi0tLS0tLS0tLS0gRU5EIE9GIEZSQUdNRU5UQVRJT04gLS0tLS0tLS0tLSovCi0KLSAgLyogRmx1c2ggdGhlIGlucHV0IGJ1ZmZlciBkYXRhICovCi0KLWVuZDoKLSAgZ3N0X3J0cF9oMjYzX3BheV9jb250ZXh0X2Rlc3Ryb3kgKGNvbnRleHQsCi0gICAgICBjb250ZXh0LT5waWNsYXllci0+cHR5cGVfc3JjZm9ybWF0KTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAocnRwaDI2M3BheS0+Y3VycmVudF9idWZmZXIsICZydHBoMjYzcGF5LT5tYXApOwotICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZydHBoMjYzcGF5LT5jdXJyZW50X2J1ZmZlciwgTlVMTCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2M19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0KLSAgR3N0UnRwSDI2M1BheSAqcnRwaDI2M3BheTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgR1NUX0RFQlVHICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0gTkVXIEZSQU1FIC0tLS0tLS0tLS0tLS0tLSIpOwotICBydHBoMjYzcGF5ID0gR1NUX1JUUF9IMjYzX1BBWSAocGF5bG9hZCk7Ci0KLSAgcnRwaDI2M3BheS0+Zmlyc3RfdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZydHBoMjYzcGF5LT5jdXJyZW50X2J1ZmZlciwgYnVmZmVyKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAvKiB3ZSBhbHdheXMgZW5jb2RlIGFuZCBmbHVzaCBhIGZ1bGwgcGljdHVyZSAqLwotICByZXQgPSBnc3RfcnRwX2gyNjNfcGF5X2ZsdXNoIChydHBoMjYzcGF5KTsKLSAgR1NUX0RFQlVHICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIEZSQU1FIC0tLS0tLS0tLS0tLS0tLSIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2gyNjNfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwaDI2M3BheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9IMjYzX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjNwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwaDI2M3BheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWJmYzg3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2M3BheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKiBBdXRob3I6IERlamFuIFNha2Vsc2FrIHNhaGVsQGtpYmVycGlwYS5vcmcKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9IMjYzX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0gyNjNfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9SVFBfSDI2M19QQVkgXAotICAoZ3N0X3J0cF9oMjYzX3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0gyNjNfUEFZKG9iaikgXAotIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfSDI2M19QQVksR3N0UnRwSDI2M1BheSkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2M19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2M19QQVksR3N0UnRwSDI2M1BheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjYzX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9IMjYzX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2M19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0gyNjNfUEFZKSkKLS8vIGJsb2NrcyBwZXIgbWFjcm9ibG9jawotI2RlZmluZSBOX0JMT0NLUyA2Ci0jZGVmaW5lIERFRkFVTFRfTU9ERV9BIEZBTFNFCi0jZGVmaW5lIE1UVV9TRUNVUklUWV9PRkZTRVQgNTAKLSAgICB0eXBlZGVmIGVudW0gX0dzdFJ0cEgyNjNQYXlIZWFkZXJNb2RlCi17Ci0gIEdTVF9SVFBfSDI2M19QQVlMT0FEX0hFQURFUl9NT0RFX0EgPSA0LAotICBHU1RfUlRQX0gyNjNfUEFZTE9BRF9IRUFERVJfTU9ERV9CID0gOCwKLSAgR1NUX1JUUF9IMjYzX1BBWUxPQURfSEVBREVSX01PREVfQyA9IDEyCi19IEdzdFJ0cEgyNjNQYXlIZWFkZXJNb2RlOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2M1BheUNvbnRleHQgR3N0UnRwSDI2M1BheUNvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2M1BheVBpYyBHc3RSdHBIMjYzUGF5UGljOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlDbGFzcyBHc3RSdHBIMjYzUGF5Q2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2M1BheSBHc3RSdHBIMjYzUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlCb3VuZHJ5IEdzdFJ0cEgyNjNQYXlCb3VuZHJ5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlNQiBHc3RSdHBIMjYzUGF5TUI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2M1BheUdvYiBHc3RSdHBIMjYzUGF5R29iOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlQYWNrYWdlIEdzdFJ0cEgyNjNQYXlQYWNrYWdlOwotCi0vL3R5cGVkZWYgZW51bSBfR3N0UnRwSDI2M1BheUhlYWRlck1vZGUgR3N0UnRwSDI2M1BheUhlYWRlck1vZGU7Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M1BheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCBwYXlsb2FkOwotCi0gIEdzdEJ1ZmZlciAqY3VycmVudF9idWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIEdzdENsb2NrVGltZSBmaXJzdF90czsKLSAgZ2Jvb2xlYW4gcHJvcF9wYXlsb2FkX21vZGU7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgYXZhaWxhYmxlX2RhdGE7Ci0KLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M1BheUNvbnRleHQKLXsKLSAgR3N0UnRwSDI2M1BheVBpYyAqcGljbGF5ZXI7Ci0KLSAgZ3VpbnQgbXR1OwotICBndWludCB3aW5kb3c7Ci0gIGd1aW50OCAqd2luX2VuZDsKLSAgZ3VpbnQ4IGNwbTsKLQotICBndWludCBub19nb2JzOwotICBHc3RSdHBIMjYzUGF5R29iICoqZ29iczsKLQotfTsKLQotc3RydWN0IF9Hc3RSdHBIMjYzUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2M1BheUFIZWFkZXIKLXsKLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0gIHVuc2lnbmVkIGludCBlYml0OjM7ICAgICAgICAgIC8qIEVuZCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgc2JpdDozOyAgICAgICAgICAvKiBTdGFydCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgcDoxOyAgICAgICAgICAgICAvKiBQQi1mcmFtZXMgbW9kZSAqLwotICB1bnNpZ25lZCBpbnQgZjoxOyAgICAgICAgICAgICAvKiBmbGFnIGJpdCAqLwotCi0gIHVuc2lnbmVkIGludCByMToxOyAgICAgICAgICAgIC8qIFJlc2VydmVkICovCi0gIHVuc2lnbmVkIGludCBhOjE7ICAgICAgICAgICAgIC8qIEFkdmFuY2VkIFByZWRpY3Rpb24gKi8KLSAgdW5zaWduZWQgaW50IHM6MTsgICAgICAgICAgICAgLyogc3ludGF4IGJhc2VkIGFyaXRobWV0aWMgY29kaW5nICovCi0gIHVuc2lnbmVkIGludCB1OjE7ICAgICAgICAgICAgIC8qIFVucmVzdHJpY3RlZCBtb3Rpb24gdmVjdG9yICovCi0gIHVuc2lnbmVkIGludCBpOjE7ICAgICAgICAgICAgIC8qIFBpY3R1cmUgY29kaW5nIHR5cGUgKi8KLSAgdW5zaWduZWQgaW50IHNyYzozOyAgICAgICAgICAgLyogU291cmNlIGZvcm1hdCAqLwotCi0gIHVuc2lnbmVkIGludCB0cmI6MzsgICAgICAgICAgIC8qIFRlbXBvcmFsIHJlZiBmb3IgQiBmcmFtZSAqLwotICB1bnNpZ25lZCBpbnQgZGJxOjI7ICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgUXVhbnRpc2F0aW9uIHBhcmFtZXRlciAqLwotICB1bnNpZ25lZCBpbnQgcjI6MzsgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICB1bnNpZ25lZCBpbnQgZjoxOyAgICAgICAgICAgICAvKiBmbGFnIGJpdCAqLwotICB1bnNpZ25lZCBpbnQgcDoxOyAgICAgICAgICAgICAvKiBQQi1mcmFtZXMgbW9kZSAqLwotICB1bnNpZ25lZCBpbnQgc2JpdDozOyAgICAgICAgICAvKiBTdGFydCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgZWJpdDozOyAgICAgICAgICAvKiBFbmQgcG9zaXRpb24gKi8KLQotICB1bnNpZ25lZCBpbnQgc3JjOjM7ICAgICAgICAgICAvKiBTb3VyY2UgZm9ybWF0ICovCi0gIHVuc2lnbmVkIGludCBpOjE7ICAgICAgICAgICAgIC8qIFBpY3R1cmUgY29kaW5nIHR5cGUgKi8KLSAgdW5zaWduZWQgaW50IHU6MTsgICAgICAgICAgICAgLyogVW5yZXN0cmljdGVkIG1vdGlvbiB2ZWN0b3IgKi8KLSAgdW5zaWduZWQgaW50IHM6MTsgICAgICAgICAgICAgLyogc3ludGF4IGJhc2VkIGFyaXRobWV0aWMgY29kaW5nICovCi0gIHVuc2lnbmVkIGludCBhOjE7ICAgICAgICAgICAgIC8qIEFkdmFuY2VkIFByZWRpY3Rpb24gKi8KLSAgdW5zaWduZWQgaW50IHIxOjE7ICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLQotICB1bnNpZ25lZCBpbnQgcjI6MzsgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotICB1bnNpZ25lZCBpbnQgZGJxOjI7ICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgUXVhbnRpc2F0aW9uIHBhcmFtZXRlciAqLwotICB1bnNpZ25lZCBpbnQgdHJiOjM7ICAgICAgICAgICAvKiBUZW1wb3JhbCByZWYgZm9yIEIgZnJhbWUgKi8KLSNlbHNlCi0jZXJyb3IgIkdfQllURV9PUkRFUiBzaG91bGQgYmUgYmlnIG9yIGxpdHRsZSBlbmRpYW4uIgotI2VuZGlmCi0gIHVuc2lnbmVkIGludCB0cjo4OyAgICAgICAgICAgIC8qIFRlbXBvcmFsIHJlZiBmb3IgUCBmcmFtZSAqLwotfSBHc3RSdHBIMjYzUGF5QUhlYWRlcjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlCSGVhZGVyCi17Ci0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotICB1bnNpZ25lZCBpbnQgZWJpdDozOyAgICAgICAgICAvKiBFbmQgcG9zaXRpb24gKi8KLSAgdW5zaWduZWQgaW50IHNiaXQ6MzsgICAgICAgICAgLyogU3RhcnQgcG9zaXRpb24gKi8KLSAgdW5zaWduZWQgaW50IHA6MTsgICAgICAgICAgICAgLyogUEItZnJhbWVzIG1vZGUgKi8KLSAgdW5zaWduZWQgaW50IGY6MTsgICAgICAgICAgICAgLyogZmxhZyBiaXQgKi8KLQotICB1bnNpZ25lZCBpbnQgcXVhbnQ6NTsgICAgICAgICAvKiBRdWFudGl6YXRpb24gdmFsdWUgZm9yIGZpcnN0IE1CICovCi0gIHVuc2lnbmVkIGludCBzcmM6MzsgICAgICAgICAgIC8qIFNvdXJjZSBmb3JtYXQgKi8KLQotICB1bnNpZ25lZCBpbnQgbWJhMTozOyAgICAgICAgICAvKiBBZGRyZXNzIG9mIGZpcnN0IE1CIHN0YXJ0aW5nIGNvdW50IGZyb20gMCAtIHBhcnQxICovCi0gIHVuc2lnbmVkIGludCBnb2JuOjU7ICAgICAgICAgIC8qIEdPQiBudW1iZXIgaW4gZWZmZWN0IGF0IHN0YXJ0IG9mIHBhY2tldCAqLwotCi0gIHVuc2lnbmVkIGludCByOjI7ICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCi0gIHVuc2lnbmVkIGludCBtYmEyOjY7ICAgICAgICAgIC8qIEFkZHJlc3Mgb2YgZmlyc3QgTUIgc3RhcnRpbmcgY291bnQgZnJvbSAwIC0gcGFydDIgKi8KLQotICB1bnNpZ25lZCBpbnQgaG12MTE6NDsgICAgICAgICAvKiBob3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAxICovCi0gIHVuc2lnbmVkIGludCBhOjE7ICAgICAgICAgICAgIC8qIEFkdmFuY2VkIFByZWRpY3Rpb24gKi8KLSAgdW5zaWduZWQgaW50IHM6MTsgICAgICAgICAgICAgLyogc3ludGF4IGJhc2VkIGFyaXRobWV0aWMgY29kaW5nICovCi0gIHVuc2lnbmVkIGludCB1OjE7ICAgICAgICAgICAgIC8qIFVucmVzdHJpY3RlZCBtb3Rpb24gdmVjdG9yICovCi0gIHVuc2lnbmVkIGludCBpOjE7ICAgICAgICAgICAgIC8qIFBpY3R1cmUgY29kaW5nIHR5cGUgKi8KLQotICB1bnNpZ25lZCBpbnQgdm12MTE6NTsgICAgICAgICAvKiB2ZXJ0aWNhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMSAtIHBhcnQgMSAqLwotICB1bnNpZ25lZCBpbnQgaG12MTI6MzsgICAgICAgICAvKiBob3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAyICovCi0KLSAgdW5zaWduZWQgaW50IGhtdjIxOjY7ICAgICAgICAgLyogaG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMyAtIHBhcnQgMSAqLwotICB1bnNpZ25lZCBpbnQgdm12MTI6MjsgICAgICAgICAvKiB2ZXJ0aWNhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMSAtIHBhcnQgMiAqLwotCi0gIHVuc2lnbmVkIGludCB2bXYyMTo3OyAgICAgICAgIC8qIHZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAzICovCi0gIHVuc2lnbmVkIGludCBobXYyMjoxOyAgICAgICAgIC8qIGhvcml6b250YWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDMgLSBwYXJ0IDIgKi8KLQotI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICB1bnNpZ25lZCBpbnQgZjoxOyAgICAgICAgICAgICAvKiBmbGFnIGJpdCAqLwotICB1bnNpZ25lZCBpbnQgcDoxOyAgICAgICAgICAgICAvKiBQQi1mcmFtZXMgbW9kZSAqLwotICB1bnNpZ25lZCBpbnQgc2JpdDozOyAgICAgICAgICAvKiBTdGFydCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgZWJpdDozOyAgICAgICAgICAvKiBFbmQgcG9zaXRpb24gKi8KLQotICB1bnNpZ25lZCBpbnQgc3JjOjM7ICAgICAgICAgICAvKiBTb3VyY2UgZm9ybWF0ICovCi0gIHVuc2lnbmVkIGludCBxdWFudDo1OyAgICAgICAgIC8qIFF1YW50aXphdGlvbiB2YWx1ZSBmb3IgZmlyc3QgTUIgKi8KLQotICB1bnNpZ25lZCBpbnQgZ29ibjo1OyAgICAgICAgICAvKiBHT0IgbnVtYmVyIGluIGVmZmVjdCBhdCBzdGFydCBvZiBwYWNrZXQgKi8KLSAgdW5zaWduZWQgaW50IG1iYTE6MzsgICAgICAgICAgLyogQWRkcmVzcyBvZiBmaXJzdCBNQiBzdGFydGluZyBjb3VudCBmcm9tIDAgLSBwYXJ0MSAqLwotCi0gIHVuc2lnbmVkIGludCBtYmEyOjY7ICAgICAgICAgIC8qIEFkZHJlc3Mgb2YgZmlyc3QgTUIgc3RhcnRpbmcgY291bnQgZnJvbSAwIC0gcGFydDIgKi8KLSAgdW5zaWduZWQgaW50IHI6MjsgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLQotICB1bnNpZ25lZCBpbnQgaToxOyAgICAgICAgICAgICAvKiBQaWN0dXJlIGNvZGluZyB0eXBlICovCi0gIHVuc2lnbmVkIGludCB1OjE7ICAgICAgICAgICAgIC8qIFVucmVzdHJpY3RlZCBtb3Rpb24gdmVjdG9yICovCi0gIHVuc2lnbmVkIGludCBzOjE7ICAgICAgICAgICAgIC8qIHN5bnRheCBiYXNlZCBhcml0aG1ldGljIGNvZGluZyAqLwotICB1bnNpZ25lZCBpbnQgYToxOyAgICAgICAgICAgICAvKiBBZHZhbmNlZCBQcmVkaWN0aW9uICovCi0gIHVuc2lnbmVkIGludCBobXYxMTo0OyAgICAgICAgIC8qIGhvcml6b250YWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDEgLSBwYXJ0IDEgKi8KLQotICB1bnNpZ25lZCBpbnQgaG12MTI6MzsgICAgICAgICAvKiBob3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAyICovCi0gIHVuc2lnbmVkIGludCB2bXYxMTo1OyAgICAgICAgIC8qIHZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAxICovCi0KLSAgdW5zaWduZWQgaW50IHZtdjEyOjI7ICAgICAgICAgLyogdmVydGljYWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDEgLSBwYXJ0IDIgKi8KLSAgdW5zaWduZWQgaW50IGhtdjIxOjY7ICAgICAgICAgLyogaG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMyAtIHBhcnQgMSAqLwotCi0gIHVuc2lnbmVkIGludCBobXYyMjoxOyAgICAgICAgIC8qIGhvcml6b250YWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDMgLSBwYXJ0IDIgKi8KLSAgdW5zaWduZWQgaW50IHZtdjIxOjc7ICAgICAgICAgIC8qIHZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAzICovCi0jZWxzZQotI2Vycm9yICJHX0JZVEVfT1JERVIgc2hvdWxkIGJlIGJpZyBvciBsaXR0bGUgZW5kaWFuLiIKLSNlbmRpZgotfSBHc3RSdHBIMjYzUGF5QkhlYWRlcjsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlDSGVhZGVyCi17Ci0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotICB1bnNpZ25lZCBpbnQgZWJpdDozOyAgICAgICAgICAvKiBFbmQgcG9zaXRpb24gKi8KLSAgdW5zaWduZWQgaW50IHNiaXQ6MzsgICAgICAgICAgLyogU3RhcnQgcG9zaXRpb24gKi8KLSAgdW5zaWduZWQgaW50IHA6MTsgICAgICAgICAgICAgLyogUEItZnJhbWVzIG1vZGUgKi8KLSAgdW5zaWduZWQgaW50IGY6MTsgICAgICAgICAgICAgLyogZmxhZyBiaXQgKi8KLQotICB1bnNpZ25lZCBpbnQgcXVhbnQ6NTsgICAgICAgICAvKiBRdWFudGl6YXRpb24gdmFsdWUgZm9yIGZpcnN0IE1CICovCi0gIHVuc2lnbmVkIGludCBzcmM6MzsgICAgICAgICAgIC8qIFNvdXJjZSBmb3JtYXQgKi8KLQotICB1bnNpZ25lZCBpbnQgbWJhMTozOyAgICAgICAgICAvKiBBZGRyZXNzIG9mIGZpcnN0IE1CIHN0YXJ0aW5nIGNvdW50IGZyb20gMCAtIHBhcnQxICovCi0gIHVuc2lnbmVkIGludCBnb2JuOjU7ICAgICAgICAgIC8qIEdPQiBudW1iZXIgaW4gZWZmZWN0IGF0IHN0YXJ0IG9mIHBhY2tldCAqLwotCi0gIHVuc2lnbmVkIGludCByOjI7ICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCi0gIHVuc2lnbmVkIGludCBtYmEyOjY7ICAgICAgICAgIC8qIEFkZHJlc3Mgb2YgZmlyc3QgTUIgc3RhcnRpbmcgY291bnQgZnJvbSAwIC0gcGFydDIgKi8KLQotICB1bnNpZ25lZCBpbnQgaG12MTE6NDsgICAgICAgICAvKiBob3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAxICovCi0gIHVuc2lnbmVkIGludCBhOjE7ICAgICAgICAgICAgIC8qIEFkdmFuY2VkIFByZWRpY3Rpb24gKi8KLSAgdW5zaWduZWQgaW50IHM6MTsgICAgICAgICAgICAgLyogc3ludGF4IGJhc2VkIGFyaXRobWV0aWMgY29kaW5nICovCi0gIHVuc2lnbmVkIGludCB1OjE7ICAgICAgICAgICAgIC8qIFVucmVzdHJpY3RlZCBtb3Rpb24gdmVjdG9yICovCi0gIHVuc2lnbmVkIGludCBpOjE7ICAgICAgICAgICAgIC8qIFBpY3R1cmUgY29kaW5nIHR5cGUgKi8KLQotICB1bnNpZ25lZCBpbnQgdm12MTE6NTsgICAgICAgICAvKiB2ZXJ0aWNhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMSAtIHBhcnQgMSAqLwotICB1bnNpZ25lZCBpbnQgaG12MTI6MzsgICAgICAgICAvKiBob3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAyICovCi0KLSAgdW5zaWduZWQgaW50IGhtdjIxOjY7ICAgICAgICAgLyogaG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMyAtIHBhcnQgMSAqLwotICB1bnNpZ25lZCBpbnQgdm12MTI6MjsgICAgICAgICAvKiB2ZXJ0aWNhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMSAtIHBhcnQgMiAqLwotCi0gIHVuc2lnbmVkIGludCB2bXYyMTo3OyAgICAgICAgIC8qIHZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAzICovCi0gIHVuc2lnbmVkIGludCBobXYyMjoxOyAgICAgICAgIC8qIGhvcml6b250YWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDMgLSBwYXJ0IDIgKi8KLQotICB1bnNpZ25lZCBpbnQgcnIxOjg7ICAgICAgICAgICAvKiByZXNlcnZlZCAqLwotCi0gIHVuc2lnbmVkIGludCBycjI6ODsgICAgICAgICAgIC8qIHJlc2VydmVkICovCi0KLSAgdW5zaWduZWQgaW50IHRyYjozOyAgICAgICAgICAgLyogVGVtcG9yYWwgUmVmZXJlbmNlIGZvciB0aGUgQiAqLwotICB1bnNpZ25lZCBpbnQgZGJxOjI7ICAgICAgICAgICAvKiBEaWZmZXJlbnRpYWwgcXVhbnRpemF0aW9uIHBhcmFtZXRlciAqLwotICB1bnNpZ25lZCBpbnQgcnIzOjM7ICAgICAgICAgICAvKiByZXNlcnZlZCAqLwotCi0gIHVuc2lnbmVkIGludCB0cjo4OyAgICAgICAgICAgIC8qIFRlbXBvcmFsIFJlZmVyZW5jZSBmb3IgdGhlIFAgZnJhbWUgKi8KLQotI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICB1bnNpZ25lZCBpbnQgZjoxOyAgICAgICAgICAgICAvKiBmbGFnIGJpdCAqLwotICB1bnNpZ25lZCBpbnQgcDoxOyAgICAgICAgICAgICAvKiBQQi1mcmFtZXMgbW9kZSAqLwotICB1bnNpZ25lZCBpbnQgc2JpdDozOyAgICAgICAgICAvKiBTdGFydCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgZWJpdDozOyAgICAgICAgICAvKiBFbmQgcG9zaXRpb24gKi8KLQotICB1bnNpZ25lZCBpbnQgc3JjOjM7ICAgICAgICAgICAvKiBTb3VyY2UgZm9ybWF0ICovCi0gIHVuc2lnbmVkIGludCBxdWFudDo1OyAgICAgICAgIC8qIFF1YW50aXphdGlvbiB2YWx1ZSBmb3IgZmlyc3QgTUIgKi8KLQotICB1bnNpZ25lZCBpbnQgZ29ibjo1OyAgICAgICAgICAvKiBHT0IgbnVtYmVyIGluIGVmZmVjdCBhdCBzdGFydCBvZiBwYWNrZXQgKi8KLSAgdW5zaWduZWQgaW50IG1iYTE6MzsgICAgICAgICAgLyogQWRkcmVzcyBvZiBmaXJzdCBNQiBzdGFydGluZyBjb3VudCBmcm9tIDAgLSBwYXJ0MSAqLwotCi0gIHVuc2lnbmVkIGludCBtYmEyOjY7ICAgICAgICAgIC8qIEFkZHJlc3Mgb2YgZmlyc3QgTUIgc3RhcnRpbmcgY291bnQgZnJvbSAwIC0gcGFydDIgKi8KLSAgdW5zaWduZWQgaW50IHI6MjsgICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLQotICB1bnNpZ25lZCBpbnQgaToxOyAgICAgICAgICAgICAvKiBQaWN0dXJlIGNvZGluZyB0eXBlICovCi0gIHVuc2lnbmVkIGludCB1OjE7ICAgICAgICAgICAgIC8qIFVucmVzdHJpY3RlZCBtb3Rpb24gdmVjdG9yICovCi0gIHVuc2lnbmVkIGludCBzOjE7ICAgICAgICAgICAgIC8qIHN5bnRheCBiYXNlZCBhcml0aG1ldGljIGNvZGluZyAqLwotICB1bnNpZ25lZCBpbnQgYToxOyAgICAgICAgICAgICAvKiBBZHZhbmNlZCBQcmVkaWN0aW9uICovCi0gIHVuc2lnbmVkIGludCBobXYxMTo0OyAgICAgICAgIC8qIGhvcml6b250YWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDEgLSBwYXJ0IDEgKi8KLQotICB1bnNpZ25lZCBpbnQgaG12MTI6MzsgICAgICAgICAvKiBob3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAyICovCi0gIHVuc2lnbmVkIGludCB2bXYxMTo1OyAgICAgICAgIC8qIHZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAxIC0gcGFydCAxICovCi0KLSAgdW5zaWduZWQgaW50IHZtdjEyOjI7ICAgICAgICAgLyogdmVydGljYWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDEgLSBwYXJ0IDIgKi8KLSAgdW5zaWduZWQgaW50IGhtdjIxOjY7ICAgICAgICAgLyogaG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3RvciBmb3IgTUIgMyAtIHBhcnQgMSAqLwotCi0gIHVuc2lnbmVkIGludCBobXYyMjoxOyAgICAgICAgIC8qIGhvcml6b250YWwgbW90aW9uIHZlY3RvciBwcmVkaWN0b3IgZm9yIE1CIDMgLSBwYXJ0IDIgKi8KLSAgdW5zaWduZWQgaW50IHZtdjIxOjc7ICAgICAgICAgIC8qIHZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgcHJlZGljdG9yIGZvciBNQiAzICovCi0gIHVuc2lnbmVkIGludCBycjE6ODsgICAgICAgICAgIC8qIHJlc2VydmVkICovCi0gIHVuc2lnbmVkIGludCBycjI6ODsgICAgICAgICAgIC8qIHJlc2VydmVkICovCi0KLSAgdW5zaWduZWQgaW50IHJyMzozOyAgICAgICAgICAgLyogcmVzZXJ2ZWQgKi8KLSAgdW5zaWduZWQgaW50IGRicToyOyAgICAgICAgICAgLyogRGlmZmVyZW50aWFsIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIgKi8KLSAgdW5zaWduZWQgaW50IHRyYjozOyAgICAgICAgICAgLyogVGVtcG9yYWwgUmVmZXJlbmNlIGZvciB0aGUgQiAqLwotCi0gIHVuc2lnbmVkIGludCB0cjo4OyAgICAgICAgICAgIC8qIFRlbXBvcmFsIFJlZmVyZW5jZSBmb3IgdGhlIFAgZnJhbWUgKi8KLSNlbHNlCi0jZXJyb3IgIkdfQllURV9PUkRFUiBzaG91bGQgYmUgYmlnIG9yIGxpdHRsZSBlbmRpYW4uIgotI2VuZGlmCi19IEdzdFJ0cEgyNjNQYXlDSGVhZGVyOwotCi1zdHJ1Y3QgX0dzdFJ0cEgyNjNQYXlQaWMKLXsKLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0gIHVuc2lnbmVkIGludCBwc2MxOjE2OwotCi0gIHVuc2lnbmVkIGludCB0cjE6MjsKLSAgdW5zaWduZWQgaW50IHBzYzI6NjsKLQotICB1bnNpZ25lZCBpbnQgcHR5cGVfMjYzOjE7Ci0gIHVuc2lnbmVkIGludCBwdHlwZV9zdGFydDoxOwotICB1bnNpZ25lZCBpbnQgdHIyOjY7Ci0KLSAgdW5zaWduZWQgaW50IHB0eXBlX3Vtdm1vZGU6MTsKLSAgdW5zaWduZWQgaW50IHB0eXBlX3BpY3R5cGU6MTsKLSAgdW5zaWduZWQgaW50IHB0eXBlX3NyY2Zvcm1hdDozOwotICB1bnNpZ25lZCBpbnQgcHR5cGVfZnJlZXplOjE7Ci0gIHVuc2lnbmVkIGludCBwdHlwZV9jYW1lcmE6MTsKLSAgdW5zaWduZWQgaW50IHB0eXBlX3NwbGl0OjE7Ci0KLSAgdW5zaWduZWQgaW50IHBxdWFudDo1OwotICB1bnNpZ25lZCBpbnQgcHR5cGVfcGJtb2RlOjE7Ci0gIHVuc2lnbmVkIGludCBwdHlwZV9hcG1vZGU6MTsKLSAgdW5zaWduZWQgaW50IHB0eXBlX3NhY21vZGU6MTsKLQotI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICB1bnNpZ25lZCBpbnQgcHNjMToxNjsKLQotICB1bnNpZ25lZCBpbnQgcHNjMjo2OwotICB1bnNpZ25lZCBpbnQgdHIxOjI7Ci0KLSAgdW5zaWduZWQgaW50IHRyMjo2OwotICB1bnNpZ25lZCBpbnQgcHR5cGVfc3RhcnQ6MjsKLQotICB1bnNpZ25lZCBpbnQgcHR5cGVfc3BsaXQ6MTsKLSAgdW5zaWduZWQgaW50IHB0eXBlX2NhbWVyYToxOwotICB1bnNpZ25lZCBpbnQgcHR5cGVfZnJlZXplOjE7Ci0gIHVuc2lnbmVkIGludCBwdHlwZV9zcmNmb3JtYXQ6MzsKLSAgdW5zaWduZWQgaW50IHB0eXBlX3BpY3R5cGU6MTsKLSAgdW5zaWduZWQgaW50IHB0eXBlX3Vtdm1vZGU6MTsKLQotICB1bnNpZ25lZCBpbnQgcHR5cGVfc2FjbW9kZToxOwotICB1bnNpZ25lZCBpbnQgcHR5cGVfYXBtb2RlOjE7Ci0gIHVuc2lnbmVkIGludCBwdHlwZV9wYm1vZGU6MTsKLSAgdW5zaWduZWQgaW50IHBxdWFudDo1OwotCi0jZWxzZQotI2Vycm9yICJHX0JZVEVfT1JERVIgc2hvdWxkIGJlIGJpZyBvciBsaXR0bGUgZW5kaWFuLiIKLSNlbmRpZgotfTsKLQotc3RydWN0IF9Hc3RSdHBIMjYzUGF5Qm91bmRyeQotewotCi0gIGd1aW50OCAqc3RhcnQ7Ci0gIGd1aW50OCAqZW5kOwotICBndWludDggc2JpdDsKLSAgZ3VpbnQ4IGViaXQ7Ci0KLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M1BheU1CCi17Ci0gIGd1aW50OCAqc3RhcnQ7Ci0gIGd1aW50OCAqZW5kOwotICBndWludDggc2JpdDsKLSAgZ3VpbnQ4IGViaXQ7Ci0gIGd1aW50IGxlbmd0aDsKLQotICBndWludDggbWJfdHlwZTsKLSAgZ3VpbnQgcXVhbnQ7Ci0KLSAgZ3VpbnQgbWJhOwotICBndWludDggbXZkWzEwXTsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M1BheUdvYgotewotICBndWludDggKnN0YXJ0OwotICBndWludDggKmVuZDsKLSAgZ3VpbnQgbGVuZ3RoOwotICBndWludDggc2JpdDsKLSAgZ3VpbnQ4IGViaXQ7Ci0KLSAgZ3VpbnQgZ29ibjsKLSAgZ3VpbnQgcXVhbnQ7Ci0KLSAgR3N0UnRwSDI2M1BheU1CICoqbWFjcm9ibG9ja3M7Ci0gIGd1aW50IG5tYWNyb2Jsb2NzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBIMjYzUGF5UGFja2FnZQotewotICBndWludDggKnBheWxvYWRfc3RhcnQ7Ci0gIGd1aW50OCAqcGF5bG9hZF9lbmQ7Ci0gIGd1aW50IHBheWxvYWRfbGVuOwotICBndWludDggc2JpdDsKLSAgZ3VpbnQ4IGViaXQ7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0KLSAgR3N0UnRwSDI2M1BheUhlYWRlck1vZGUgbW9kZTsKLQotICAvKgotICAgKiAgbW9kZSBCLEMgZGF0YQotICAgKi8KLQotICBndWludDE2IG1iYTsKLSAgZ3VpbnQgbm12ZDsKLSAgZ3VpbnQ4IG12ZFsxMF07Ci0gIGd1aW50IGdvYm47Ci0gIGd1aW50IHF1YW50OwotfTsKLQotI2RlZmluZSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExTUkMoYnVmKSAoKChHc3RSdHBIMjYzUGF5UGljICopKGJ1ZikpLT5wdHlwZV9zcmNmb3JtYXQpCi0jZGVmaW5lIEdTVF9IMjYzX1BJQ1RVUkVMQVlFUl9QTFRZUEUoYnVmKSAoKChHc3RSdHBIMjYzUGF5UGljICopKGJ1ZikpLT5wdHlwZV9waWN0eXBlKQotI2RlZmluZSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExVTVYoYnVmKSAoKChHc3RSdHBIMjYzUGF5UGljICopKGJ1ZikpLT5wdHlwZV91bXZtb2RlKQotI2RlZmluZSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExTQUMoYnVmKSAoKChHc3RSdHBIMjYzUGF5UGljICopKGJ1ZikpLT5wdHlwZV9zYWNtb2RlKQotI2RlZmluZSBHU1RfSDI2M19QSUNUVVJFTEFZRVJfUExBUChidWYpICgoKEdzdFJ0cEgyNjNQYXlQaWMgKikoYnVmKSktPnB0eXBlX2FwbW9kZSkKLQotLyoKLSAqIFRPRE86IFBCIGZyYW1lIHJlbGV2YW50IHRhYmxlcwotICovCi0KLSNkZWZpbmUgR1NUX1JUUF9IMjYzX1BBWV9FTkQoc3RhcnQsIGxlbikgKCgoZ3VpbnQ4ICopc3RhcnQpICsgKChndWludClsZW4pKQotI2RlZmluZSBHU1RfUlRQX0gyNjNfUEFZX0dPQk4oZ29iKSAoKCgoKGd1aW50OCAqKSBnb2IpWzJdID4+IDIpICYgMHgxZikKLQotR1R5cGUgZ3N0X3J0cF9oMjYzX3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfaDI2M19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUlRQX0gyNjNfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjYzcGRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MDYxNC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQwNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwaDI2M3BkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGgyNjNwZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGgyNjNwZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjNwX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1oMjYzLCAiICJ2YXJpYW50ID0gKHN0cmluZykgXCJpdHVcIiAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjNwX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVhdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYzLTE5OThcIjsgIgotICAgICAgICAvKiBvcHRpb25hbCBwYXJhbXMgKi8KLSAgICAgICAgLyogTk9URSBhbGwgb3B0aW9uYWwgU0RQIHBhcmFtcyBtdXN0IGJlIHN0cmluZ3MgaW4gdGhlIGNhcHMgKi8KLSAgICAgICAgLyoKLSAgICAgICAgICAgInNxY2lmID0gKHN0cmluZykgWzEsIDMyXSwgIgotICAgICAgICAgICAicWNpZiA9IChzdHJpbmcpIFsxLCAzMl0sICIKLSAgICAgICAgICAgImNpZiA9IChzdHJpbmcpIFsxLCAzMl0sICIKLSAgICAgICAgICAgImNpZjQgPSAoc3RyaW5nKSBbMSwgMzJdLCAiCi0gICAgICAgICAgICJjaWYxNiA9IChzdHJpbmcpIFsxLCAzMl0sICIKLSAgICAgICAgICAgImN1c3RvbSA9IChzdHJpbmcpIEFOWSwgIgotICAgICAgICAgICAiZiA9IChzdHJpbmcpIHswLCAxfSwiCi0gICAgICAgICAgICJpID0gKHN0cmluZykgezAsIDF9LCIKLSAgICAgICAgICAgImogPSAoc3RyaW5nKSB7MCwgMX0sIgotICAgICAgICAgICAidCA9IChzdHJpbmcpIHswLCAxfSwiCi0gICAgICAgICAgICJrID0gKHN0cmluZykgezEsIDIsIDMsIDR9LCIKLSAgICAgICAgICAgIm4gPSAoc3RyaW5nKSB7MSwgMiwgMywgNH0sIgotICAgICAgICAgICAicCA9IChzdHJpbmcpIEFOWSwiCi0gICAgICAgICAgICJwYXIgPSAoc3RyaW5nKSBBTlksICIKLSAgICAgICAgICAgImNwY2YgPSAoc3RyaW5nKSBBTlksICIKLSAgICAgICAgICAgImJwcCA9IChzdHJpbmcpIFswLCA2NTUzNl0sICIKLSAgICAgICAgICAgImhyZCA9IChzdHJpbmcpIHswLCAxfTsgIgotICAgICAgICAgKi8KLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVhdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYzLTIwMDBcIiAiCi0gICAgICAgIC8qIG9wdGlvbmFsIHBhcmFtcyAqLwotICAgICAgICAvKiBOT1RFIGFsbCBvcHRpb25hbCBTRFAgcGFyYW1zIG11c3QgYmUgc3RyaW5ncyBpbiB0aGUgY2FwcyAqLwotICAgICAgICAvKgotICAgICAgICAgICAicHJvZmlsZSA9IChzdHJpbmcpIFswLCAxMF0sICIKLSAgICAgICAgICAgImxldmVsID0gKHN0cmluZykgezEwLCAyMCwgMzAsIDQwLCA0NSwgNTAsIDYwLCA3MH0sICIKLSAgICAgICAgICAgImludGVybGFjZSA9IChzdHJpbmcpIHswLCAxfTsiCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfaDI2M3BfZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSDI2M1BEZXBheSwgZ3N0X3J0cF9oMjYzcF9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNwX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfaDI2M3BfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9oMjYzcF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1nYm9vbGVhbiBnc3RfcnRwX2gyNjNwX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzcF9kZXBheV9jbGFzc19pbml0IChHc3RSdHBIMjYzUERlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9oMjYzcF9kZXBheV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX2gyNjNwX2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjNwX2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2M3BfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgSDI2MyBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgSDI2My8rLysrIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA0NjI5KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2gyNjNwX2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9oMjYzcF9kZXBheV9zZXRjYXBzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjYzcGRlcGF5X2RlYnVnLCAicnRwaDI2M3BkZXBheSIsIDAsCi0gICAgICAiSDI2MysgVmlkZW8gUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNwX2RlcGF5X2luaXQgKEdzdFJ0cEgyNjNQRGVwYXkgKiBydHBoMjYzcGRlcGF5KQotewotICBydHBoMjYzcGRlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzcF9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwSDI2M1BEZXBheSAqcnRwaDI2M3BkZXBheTsKLQotICBydHBoMjYzcGRlcGF5ID0gR1NUX1JUUF9IMjYzUF9ERVBBWSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocnRwaDI2M3BkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cGgyNjNwZGVwYXktPmFkYXB0ZXIgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2M3BfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGZpbHRlciwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHMgKnNyY2NhcHMgPSBOVUxMOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBnaW50IGNsb2NrX3JhdGU7Ci0gIGNvbnN0IGdjaGFyICplbmNvZGluZ19uYW1lID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGNsb2NrX3JhdGUgPSA5MDAwMDsgICAgICAgICAvKiBkZWZhdWx0ICovCi0gIGZpbHRlci0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgZW5jb2RpbmdfbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpOwotICBpZiAoZW5jb2RpbmdfbmFtZSA9PSBOVUxMKQotICAgIGdvdG8gbm9fZW5jb2RpbmdfbmFtZTsKLQotICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wIChlbmNvZGluZ19uYW1lLCAiSDI2My0yMDAwIikgPT0gMCkgewotICAgIC8qIGFsd2F5cyBoMjYzKysgKi8KLSAgICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2MyIsCi0gICAgICAgICJ2YXJpYW50IiwgR19UWVBFX1NUUklORywgIml0dSIsCi0gICAgICAgICJoMjYzdmVyc2lvbiIsIEdfVFlQRV9TVFJJTkcsICJoMjYzcHAiLCBOVUxMKTsKLSAgfSBlbHNlIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKGVuY29kaW5nX25hbWUsICJIMjYzLTE5OTgiKSA9PSAwKSB7Ci0gICAgLyogdGhpcyBjYW4gYmUgSDI2MyBvciBIMjYzKyBkZXBlbmRpbmcgb24gZGVmaW5lZCBhcHBlbmRpeGVzIGluIHRoZSBvcHRpb25hbAotICAgICAqIFNEUCBwYXJhbXMgKi8KLSAgICBjb25zdCBnY2hhciAqRiwgKkksICpKLCAqVCwgKkssICpOLCAqUDsKLSAgICBnYm9vbGVhbiBpc19oMjYzcCA9IEZBTFNFOwotCi0gICAgRiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZiIpOwotICAgIGlmIChGKQotICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoRiwgIjEiKSA9PSAwKQotICAgICAgICBpc19oMjYzcCA9IFRSVUU7Ci0gICAgSSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiaSIpOwotICAgIGlmIChJKQotICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoSSwgIjEiKSA9PSAwKQotICAgICAgICBpc19oMjYzcCA9IFRSVUU7Ci0gICAgSiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiaiIpOwotICAgIGlmIChKKQotICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoSiwgIjEiKSA9PSAwKQotICAgICAgICBpc19oMjYzcCA9IFRSVUU7Ci0gICAgVCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAidCIpOwotICAgIGlmIChUKQotICAgICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoVCwgIjEiKSA9PSAwKQotICAgICAgICBpc19oMjYzcCA9IFRSVUU7Ci0gICAgSyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiayIpOwotICAgIGlmIChLKQotICAgICAgaXNfaDI2M3AgPSBUUlVFOwotICAgIE4gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgIm4iKTsKLSAgICBpZiAoTikKLSAgICAgIGlzX2gyNjNwID0gVFJVRTsKLSAgICBQID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJwIik7Ci0gICAgaWYgKFApCi0gICAgICBpc19oMjYzcCA9IFRSVUU7Ci0KLSAgICBpZiAoaXNfaDI2M3ApIHsKLSAgICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1oMjYzIiwKLSAgICAgICAgICAidmFyaWFudCIsIEdfVFlQRV9TVFJJTkcsICJpdHUiLAotICAgICAgICAgICJoMjYzdmVyc2lvbiIsIEdfVFlQRV9TVFJJTkcsICJoMjYzcCIsIE5VTEwpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2MyIsCi0gICAgICAgICAgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAiaXR1IiwKLSAgICAgICAgICAiaDI2M3ZlcnNpb24iLCBHX1RZUEVfU1RSSU5HLCAiaDI2MyIsIE5VTEwpOwotICAgIH0KLSAgfQotICBpZiAoIXNyY2NhcHMpCi0gICAgZ290byBub19jYXBzOwotCi0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChmaWx0ZXIpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19lbmNvZGluZ19uYW1lOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZmlsdGVyLCAibm8gZW5jb2RpbmctbmFtZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fY2FwczoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGZpbHRlciwgImludmFsaWQgZW5jb2RpbmctbmFtZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfaDI2M3BfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEgyNjNQRGVwYXkgKnJ0cGgyNjNwZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBnaW50IHBheWxvYWRfbGVuOwotICBndWludDggKnBheWxvYWQ7Ci0gIGdib29sZWFuIFAsIFYsIE07Ci0gIGd1aW50IGhlYWRlcl9sZW47Ci0gIGd1aW50OCBQTEVOLCBQRUJJVDsKLQotICBydHBoMjYzcGRlcGF5ID0gR1NUX1JUUF9IMjYzUF9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICAvKiBmbHVzaCByZW1haW5pbmcgZGF0YSBvbiBkaXNjb250ICovCi0gIGlmIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKHJ0cC0+YnVmZmVyKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChkZXBheWxvYWQsICJESVNDT05ULCBmbHVzaGluZyBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cGgyNjNwZGVwYXktPmFkYXB0ZXIpOwotICAgIHJ0cGgyNjNwZGVwYXktPndhaXRfc3RhcnQgPSBUUlVFOwotICB9Ci0KLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0gIGhlYWRlcl9sZW4gPSAyOwotCi0gIGlmIChwYXlsb2FkX2xlbiA8IGhlYWRlcl9sZW4pCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIE0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIC8qICAwICAgICAgICAgICAgICAgICAgIDEKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICBSUiAgICB8UHxWfCAgIFBMRU4gICAgfFBFQklUfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICovCi0gIFAgPSAocGF5bG9hZFswXSAmIDB4MDQpID09IDB4MDQ7Ci0gIFYgPSAocGF5bG9hZFswXSAmIDB4MDIpID09IDB4MDI7Ci0gIFBMRU4gPSAoKHBheWxvYWRbMF0gJiAweDEpIDw8IDUpIHwgKHBheWxvYWRbMV0gPj4gMyk7Ci0gIFBFQklUID0gcGF5bG9hZFsxXSAmIDB4NzsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVwYXlsb2FkLCAiUCAlZCwgViAlZCwgUExFTiAlZCwgUEVCSVQgJWQiLCBQLCBWLCBQTEVOLAotICAgICAgUEVCSVQpOwotCi0gIGlmIChWKSB7Ci0gICAgaGVhZGVyX2xlbisrOwotICB9Ci0gIGlmIChQTEVOKSB7Ci0gICAgaGVhZGVyX2xlbiArPSBQTEVOOwotICB9Ci0KLSAgaWYgKCghUCAmJiBwYXlsb2FkX2xlbiA8IGhlYWRlcl9sZW4pIHx8IChQICYmIHBheWxvYWRfbGVuIDwgaGVhZGVyX2xlbiAtIDIpKQotICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gIGlmIChQKSB7Ci0gICAgcnRwaDI2M3BkZXBheS0+d2FpdF9zdGFydCA9IEZBTFNFOwotICAgIGhlYWRlcl9sZW4gLT0gMjsKLSAgfQotCi0gIGlmIChydHBoMjYzcGRlcGF5LT53YWl0X3N0YXJ0KQotICAgIGdvdG8gd2FpdGluZ19zdGFydDsKLQotICBpZiAocGF5bG9hZF9sZW4gPCBoZWFkZXJfbGVuKQotICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gIC8qIEZJWE1FIGRvIG5vdCBpZ25vcmUgdGhlIFZSQyBoZWFkZXIgKFNlZSBSRkMgMjQyOSBzZWN0aW9uIDQuMikgKi8KLSAgLyogRklYTUUgYWN0dWFsbHkgdXNlIHRoZSBSVFAgcGljdHVyZSBoZWFkZXIgd2hlbiBpdCBpcyBsb3N0IGluIHRoZSBuZXR3b3JrICovCi0gIC8qIGZvciBub3cgc3RyaXAgb2ZmIGhlYWRlciAqLwotICBwYXlsb2FkX2xlbiAtPSBoZWFkZXJfbGVuOwotCi0gIGlmIChNKSB7Ci0gICAgLyogZnJhbWUgaXMgY29tcGxldGVkOiBhcHBlbmQgdG8gcHJldmlvdXMsIHB1c2ggaXQgb3V0ICovCi0gICAgZ3VpbnQgbGVuLCBwYWRsZW47Ci0gICAgZ3VpbnQgYXZhaWw7Ci0gICAgR3N0QnVmZmVyICpwYWRidWY7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZGVwYXlsb2FkLCAiRnJhbWUgY29tcGxldGUiKTsKLQotICAgIG91dGJ1ZiA9Ci0gICAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBoZWFkZXJfbGVuLCBwYXlsb2FkX2xlbik7Ci0gICAgaWYgKFApCi0gICAgICBnc3RfYnVmZmVyX21lbXNldCAob3V0YnVmLCAwLCAwLCAyKTsKLSAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBoMjYzcGRlcGF5LT5hZGFwdGVyLCBvdXRidWYpOwotICAgIG91dGJ1ZiA9IE5VTEw7Ci0KLSAgICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwaDI2M3BkZXBheS0+YWRhcHRlcik7Ci0gICAgbGVuID0gYXZhaWwgKyBwYXlsb2FkX2xlbjsKLSAgICBwYWRsZW4gPSAobGVuICUgNCkgKyA0OwotCi0gICAgaWYgKGF2YWlsID09IDApCi0gICAgICBnb3RvIGVtcHR5X2ZyYW1lOwotCi0gICAgb3V0YnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHJ0cGgyNjNwZGVwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLSAgICBpZiAocGFkbGVuKSB7Ci0gICAgICBwYWRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHBhZGxlbik7Ci0gICAgICBnc3RfYnVmZmVyX21lbXNldCAocGFkYnVmLCAwLCAwLCBwYWRsZW4pOwotICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgcGFkYnVmKTsKLSAgICB9Ci0KLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2M3BkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLQotICAgIHJldHVybiBvdXRidWY7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZnJhbWUgbm90IGNvbXBsZXRlZDogc3RvcmUgaW4gYWRhcHRlciAqLwotICAgIEdTVF9MT0dfT0JKRUNUIChkZXBheWxvYWQsICJGcmFtZSBpbmNvbXBsZXRlLCBzdG9yaW5nICVkIiwgcGF5bG9hZF9sZW4pOwotCi0gICAgb3V0YnVmID0KLSAgICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIGhlYWRlcl9sZW4sIHBheWxvYWRfbGVuKTsKLSAgICBpZiAoUCkKLSAgICAgIGdzdF9idWZmZXJfbWVtc2V0IChvdXRidWYsIDAsIDAsIDIpOwotICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGgyNjNwZGVwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci0KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGgyNjNwZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIlBhY2tldCBwYXlsb2FkIHdhcyB0b28gc21hbGwiKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotd2FpdGluZ19zdGFydDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjNwZGVwYXksICJ3YWl0aW5nIGZvciBwaWN0dXJlIHN0YXJ0Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWVtcHR5X2ZyYW1lOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBoMjYzcGRlcGF5LCAiRGVwYXlsb2FkZWQgZnJhbWUgaXMgZW1wdHksIGRyb3BwaW5nIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX2gyNjNwX2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwSDI2M1BEZXBheSAqcnRwaDI2M3BkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cGgyNjNwZGVwYXkgPSBHU1RfUlRQX0gyNjNQX0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2M3BkZXBheS0+YWRhcHRlcik7Ci0gICAgICBydHBoMjYzcGRlcGF5LT53YWl0X3N0YXJ0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2gyNjNwX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwaDI2M3BkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9IMjYzUF9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjNwZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmRiMmIwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2M3BkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0gyNjNQX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfSDI2M1BfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0gyNjNQX0RFUEFZIFwKLSAgKGdzdF9ydHBfaDI2M3BfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9IMjYzUF9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9IMjYzUF9ERVBBWSxHc3RSdHBIMjYzUERlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9IMjYzUF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2M1BfREVQQVksR3N0UnRwSDI2M1BEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjYzUF9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9IMjYzUF9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2M1BfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0gyNjNQX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjNQRGVwYXkgR3N0UnRwSDI2M1BEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBIMjYzUERlcGF5Q2xhc3MgR3N0UnRwSDI2M1BEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cEgyNjNQRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gICAgd2FpdF9zdGFydDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M1BEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2gyNjNwX2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9oMjYzcF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9IMjYzUF9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjliYzQ1YS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjNwcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MTUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBoMjYzcHBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLSNkZWZpbmUgREVGQVVMVF9GUkFHTUVOVEFUSU9OX01PREUgICBHU1RfRlJBR01FTlRBVElPTl9NT0RFX05PUk1BTAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9GUkFHTUVOVEFUSU9OX01PREUKLX07Ci0KLSNkZWZpbmUgR1NUX1RZUEVfRlJBR01FTlRBVElPTl9NT0RFIChnc3RfZnJhZ21lbnRhdGlvbl9tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9mcmFnbWVudGF0aW9uX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBmcmFnbWVudGF0aW9uX21vZGVfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGZyYWdtZW50YXRpb25fbW9kZVtdID0gewotICAgIHtHU1RfRlJBR01FTlRBVElPTl9NT0RFX05PUk1BTCwgIk5vcm1hbCIsICJub3JtYWwifSwKLSAgICB7R1NUX0ZSQUdNRU5UQVRJT05fTU9ERV9TWU5DLCAiRnJhZ21lbnQgYXQgc3luYyBwb2ludHMiLCAic3luYyJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIWZyYWdtZW50YXRpb25fbW9kZV90eXBlKSB7Ci0gICAgZnJhZ21lbnRhdGlvbl9tb2RlX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0RnJhZ21lbnRhdGlvbk1vZGUiLCBmcmFnbWVudGF0aW9uX21vZGUpOwotICB9Ci0gIHJldHVybiBmcmFnbWVudGF0aW9uX21vZGVfdHlwZTsKLX0KLQotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBoMjYzcHBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBydHBoMjYzcHBheV9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9oMjYzcF9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LWgyNjMsIHZhcmlhbnQgPSAoc3RyaW5nKSBpdHUiKQotICAgICk7Ci0KLS8qCi0gKiBXZSBhbHNvIHJldHVybiB0aGVzZSBpbiBnZXRjYXBzKCkgYXMgcmVxdWlyZWQgYnkgdGhlIFNEUCBjYXBzCi0gKgotICogd2lkdGggPSAoaW50KSBbMTYsIDQwOTZdCi0gKiBoZWlnaHQgPSAoaW50KSBbMTYsIDQwOTZdCi0gKiAiYW5uZXgtZiA9IChib29sZWFuKSB7dHJ1ZSwgZmFsc2V9LCIKLSAqICJhbm5leC1pID0gKGJvb2xlYW4pIHt0cnVlLCBmYWxzZX0sIgotICogImFubmV4LWogPSAoYm9vbGVhbikge3RydWUsIGZhbHNlfSwiCi0gKiAiYW5uZXgtbCA9IChib29sZWFuKSB7dHJ1ZSwgZmFsc2V9LCIKLSAqICJhbm5leC10ID0gKGJvb2xlYW4pIHt0cnVlLCBmYWxzZX0sIgotICogImFubmV4LXYgPSAoYm9vbGVhbikge3RydWUsIGZhbHNlfSIpCi0gKi8KLQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9oMjYzcF9wYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYzLTE5OThcIjsgIgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjYzLTIwMDBcIiIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjYzcF9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNwX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjNwX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2gyNjNwX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfaDI2M3BfcGF5X3NpbmtfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2gyNjNwX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqCi0gICAgcGF5bG9hZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotI2RlZmluZSBnc3RfcnRwX2gyNjNwX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBIMjYzUFBheSwgZ3N0X3J0cF9oMjYzcF9wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjYzcF9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwSDI2M1BQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9oMjYzcF9wYXlfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfaDI2M3BfcGF5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9oMjYzcF9wYXlfZ2V0X3Byb3BlcnR5OwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfaDI2M3BfcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5nZXRfY2FwcyA9IGdzdF9ydHBfaDI2M3BfcGF5X3NpbmtfZ2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2gyNjNwX3BheV9oYW5kbGVfYnVmZmVyOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX0ZSQUdNRU5UQVRJT05fTU9ERSwgZ19wYXJhbV9zcGVjX2VudW0gKCJmcmFnbWVudGF0aW9uLW1vZGUiLAotICAgICAgICAgICJGcmFnbWVudGF0aW9uIE1vZGUiLAotICAgICAgICAgICJQYWNrZXQgRnJhZ21lbnRhdGlvbiBNb2RlIiwgR1NUX1RZUEVfRlJBR01FTlRBVElPTl9NT0RFLAotICAgICAgICAgIERFRkFVTFRfRlJBR01FTlRBVElPTl9NT0RFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2M3BfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2M3BfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJSVFAgSDI2MyBwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZC1lbmNvZGVzIEgyNjMvKy8rKyB2aWRlbyBpbiBSVFAgcGFja2V0cyAoUkZDIDQ2MjkpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjYzcHBheV9kZWJ1ZywgInJ0cGgyNjNwcGF5IiwKLSAgICAgIDAsICJydHBoMjYzcHBheSAoUkZDIDQ2MjkpIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNwX3BheV9pbml0IChHc3RSdHBIMjYzUFBheSAqIHJ0cGgyNjNwcGF5KQotewotICBydHBoMjYzcHBheS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLQotICBydHBoMjYzcHBheS0+ZnJhZ21lbnRhdGlvbl9tb2RlID0gREVGQVVMVF9GUkFHTUVOVEFUSU9OX01PREU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNwX3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwSDI2M1BQYXkgKnJ0cGgyNjNwcGF5OwotCi0gIHJ0cGgyNjNwcGF5ID0gR1NUX1JUUF9IMjYzUF9QQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGgyNjNwcGF5LT5hZGFwdGVyKTsKLSAgcnRwaDI2M3BwYXktPmFkYXB0ZXIgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjNwX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdENhcHMgKnBlZXJjYXBzOwotICBnY2hhciAqZW5jb2RpbmdfbmFtZSA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSwgRkFMU0UpOwotCi0gIHBlZXJjYXBzID0KLSAgICAgIGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRF9TUkNQQUQgKHBheWxvYWQpLCBOVUxMKTsKLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgR3N0Q2FwcyAqdGNhcHMgPQotICAgICAgICBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFEIChwYXlsb2FkKSk7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChwZWVyY2FwcywgdGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmICh0Y2Fwcyk7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICAgIGlmICghZ3N0X2NhcHNfaXNfZW1wdHkgKGludGVyc2VjdCkpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGludGVyc2VjdCwgMCk7Ci0gICAgICBlbmNvZGluZ19uYW1lID0gZ19zdHJkdXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImVuY29kaW5nLW5hbWUiKSk7Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChpbnRlcnNlY3QpOwotICB9Ci0KLSAgaWYgKCFlbmNvZGluZ19uYW1lKQotICAgIGVuY29kaW5nX25hbWUgPSBnX3N0cmR1cCAoIkgyNjMtMTk5OCIpOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAidmlkZW8iLCBUUlVFLAotICAgICAgKGdjaGFyICopIGVuY29kaW5nX25hbWUsIDkwMDAwKTsKLSAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotICBnX2ZyZWUgKGVuY29kaW5nX25hbWUpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWNhcHNfYXBwZW5kIChHc3RDYXBzICogY2FwcywgR3N0U3RydWN0dXJlICogaW5fcywgZ3VpbnQgeCwgZ3VpbnQgeSwgZ3VpbnQgbXBpKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgaWYgKCFpbl9zKQotICAgIHJldHVybiBjYXBzOwotCi0gIGlmIChtcGkgPCAxIHx8IG1waSA+IDMyKQotICAgIHJldHVybiBjYXBzOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKGluX3MpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLAotICAgICAgIndpZHRoIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCB4LAotICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgeSwKLSAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgMzAwMDAsIDEwMDEgKiBtcGksIE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKGNhcHMsIHMpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfaDI2M3BfcGF5X3NpbmtfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RQYWQgKiBwYWQsCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0UnRwSDI2M1BQYXkgKnJ0cGgyNjNwcGF5OwotICBHc3RDYXBzICpjYXBzID0gTlVMTCwgKnRlbXBsOwotICBHc3RDYXBzICpwZWVyY2FwcyA9IE5VTEw7Ci0gIEdzdENhcHMgKmludGVyc2VjdCA9IE5VTEw7Ci0gIGd1aW50IGk7Ci0KLSAgcnRwaDI2M3BwYXkgPSBHU1RfUlRQX0gyNjNQX1BBWSAocGF5bG9hZCk7Ci0KLSAgcGVlcmNhcHMgPQotICAgICAgZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEX1NSQ1BBRCAocGF5bG9hZCksIE5VTEwpOwotCi0gIC8qIGlmIHdlJ3JlIGp1c3Qgb3V0cHV0dGluZyB0byB1ZHBzaW5rIG9yIGZha2VzaW5rIG9yIHNvLCB3ZSBzaG91bGQgYWxzbwotICAgKiBhY2NlcHQgYW55IGlucHV0IGNvbXBhdGlibGUgd2l0aCBvdXIgc2luayB0ZW1wbGF0ZSBjYXBzICovCi0gIGlmICghcGVlcmNhcHMgfHwgZ3N0X2NhcHNfaXNfYW55IChwZWVyY2FwcykpIHsKLSAgICBpZiAocGVlcmNhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICAgIGNhcHMgPQotICAgICAgICBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU0lOS1BBRCAocGF5bG9hZCkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIFdlIGJhc2ljYWxseSBuZWVkIHRvIGRpZmZlcmVudGlhdGUgdHdvIHVzZS1jYXNlcyBoZXJlOiBPbmUgd2hlcmUgdGhlcmUncwotICAgKiBhIGNhcHNmaWx0ZXIgYWZ0ZXIgdGhlIHBheWxvYWRlciB3aXRoIGNhcHMgY3JlYXRlZCBmcm9tIGFuIFNEUDsgaW4gdGhpcwotICAgKiBjYXNlIHRoZSBmaWx0ZXIgY2FwcyBhcmUgZml4ZWQgYW5kIHdlIHdhbnQgdG8gc2lnbmFsIHRvIGFuIGVuY29kZXIgd2hhdAotICAgKiB3ZSB3YW50IGl0IHRvIHByb2R1Y2UuIFRoZSBzZWNvbmQgY2FzZSBpcyBzaW1wbHkgcGF5bG9hZGVyICEgZGVwYXlsb2FkZXIKLSAgICogd2hlcmUgd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgZGVwYXlsb2FkZXIncyB0ZW1wbGF0ZSBjYXBzLiBJbiB0aGlzIGNhc2UKLSAgICogd2Ugc2hvdWxkIGFjY2VwdCBhbnkgaW5wdXQgY29tcGF0aWJsZSB3aXRoIG91ciBzaW5rIHRlbXBsYXRlIGNhcHMuICovCi0gIGlmICghZ3N0X2NhcHNfaXNfZml4ZWQgKHBlZXJjYXBzKSkgewotICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gICAgY2FwcyA9Ci0gICAgICAgIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRF9TSU5LUEFEIChwYXlsb2FkKSk7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFEIChwYXlsb2FkKSk7Ci0gIGludGVyc2VjdCA9IGdzdF9jYXBzX2ludGVyc2VjdCAocGVlcmNhcHMsIHRlbXBsKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsKTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGludGVyc2VjdCkpCi0gICAgcmV0dXJuIGludGVyc2VjdDsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGludGVyc2VjdCk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGludGVyc2VjdCwgaSk7Ci0gICAgY29uc3QgZ2NoYXIgKmVuY29kaW5nX25hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJlbmNvZGluZy1uYW1lIik7Ci0KLSAgICBpZiAoIXN0cmNtcCAoZW5jb2RpbmdfbmFtZSwgIkgyNjMtMjAwMCIpKSB7Ci0gICAgICBjb25zdCBnY2hhciAqcHJvZmlsZV9zdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJwcm9maWxlIik7Ci0gICAgICBjb25zdCBnY2hhciAqbGV2ZWxfc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAibGV2ZWwiKTsKLSAgICAgIGludCBwcm9maWxlID0gMDsKLSAgICAgIGludCBsZXZlbCA9IDA7Ci0KLSAgICAgIGlmIChwcm9maWxlX3N0ciAmJiBsZXZlbF9zdHIpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaSA9IEZBTFNFLCBqID0gRkFMU0UsIGwgPSBGQUxTRSwgdCA9IEZBTFNFLCBmID0gRkFMU0UsCi0gICAgICAgICAgICB2ID0gRkFMU0U7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSAqbmV3X3MgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtaDI2MyIsCi0gICAgICAgICAgICAidmFyaWFudCIsIEdfVFlQRV9TVFJJTkcsICJpdHUiLAotICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAgICAgcHJvZmlsZSA9IGF0b2kgKHByb2ZpbGVfc3RyKTsKLSAgICAgICAgbGV2ZWwgPSBhdG9pIChsZXZlbF9zdHIpOwotCi0gICAgICAgIC8qIFRoZXNlIHByb2ZpbGVzIGFyZSBkZWZpbmVkIGluIHRoZSBILjI2MyBBbm5leCBYICovCi0gICAgICAgIHN3aXRjaCAocHJvZmlsZSkgewotICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIC8qIFRoZSBCYXNlbGluZSBQcm9maWxlIChQcm9maWxlIDApICovCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAvKiBILjMyMCBDb2RpbmcgRWZmaWNpZW5jeSBWZXJzaW9uIDIgQmFja3dhcmQtQ29tcGF0aWJpbGl0eSBQcm9maWxlCi0gICAgICAgICAgICAgKiAoUHJvZmlsZSAxKQotICAgICAgICAgICAgICogQmFzZWxpbmUgKyBBbm5leGVzIEksIEosIEwuNCBhbmQgVAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpID0gaiA9IGwgPSB0ID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIC8qIFZlcnNpb24gMSBCYWNrd2FyZC1Db21wYXRpYmlsaXR5IFByb2ZpbGUgKFByb2ZpbGUgMikKLSAgICAgICAgICAgICAqIEJhc2VsaW5lICsgQW5uZXggRgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpID0gaiA9IGwgPSB0ID0gZiA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAvKiBWZXJzaW9uIDIgSW50ZXJhY3RpdmUgYW5kIFN0cmVhbWluZyBXaXJlbGVzcyBQcm9maWxlCi0gICAgICAgICAgICAgKiBCYXNlbGluZSArIEFubmV4ZXMgSSwgSiwgVAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpID0gaiA9IHQgPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgLyogVmVyc2lvbiAzIEludGVyYWN0aXZlIGFuZCBTdHJlYW1pbmcgV2lyZWxlc3MgUHJvZmlsZSAoUHJvZmlsZSA0KQotICAgICAgICAgICAgICogQmFzZWxpbmUgKyBBbm5leGVzIEksIEosIFQsIFYsIFcuNi4zLjgsCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIC8qIE1pc3NpbmcgVy42LjMuOCAqLwotICAgICAgICAgICAgaSA9IGogPSB0ID0gdiA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAvKiBDb252ZXJzYXRpb25hbCBIaWdoIENvbXByZXNzaW9uIFByb2ZpbGUgKFByb2ZpbGUgNSkKLSAgICAgICAgICAgICAqIEJhc2VsaW5lICsgQW5uZXhlcyBGLCBJLCBKLCBMLjQsIFQsIEQsIFUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgLyogTWlzc2luZyBELCBVICovCi0gICAgICAgICAgICBmID0gaSA9IGogPSBsID0gdCA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAvKiBDb252ZXJzYXRpb25hbCBJbnRlcm5ldCBQcm9maWxlIChQcm9maWxlIDYpCi0gICAgICAgICAgICAgKiBCYXNlbGluZSArIEFubmV4ZXMgRiwgSSwgSiwgTC40LCBULCBELCBVIGFuZAotICAgICAgICAgICAgICogSyB3aXRoIGFyYml0cmF0cnkgc2xpY2Ugb3JkZXJpbmcKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgLyogTWlzc2luZyBELCBVLCBLIHdpdGggYXJiaXRyYXRyeSBzbGljZSBvcmRlcmluZyAqLwotICAgICAgICAgICAgZiA9IGkgPSBqID0gbCA9IHQgPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgLyogQ29udmVyc2F0aW9uYWwgSW50ZXJsYWNlIFByb2ZpbGUgKFByb2ZpbGUgNykKLSAgICAgICAgICAgICAqIEJhc2VsaW5lICsgQW5uZXhlcyBGLCBJLCBKLCBMLjQsIFQsIEQsIFUsICBXLjYuMy4xMQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAvKiBNaXNzaW5nIEQsIFUsIFcuNi4zLjExICovCi0gICAgICAgICAgICBmID0gaSA9IGogPSBsID0gdCA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAvKiBIaWdoIExhdGVuY3kgUHJvZmlsZSAoUHJvZmlsZSA4KQotICAgICAgICAgICAgICogQmFzZWxpbmUgKyBBbm5leGVzIEYsIEksIEosIEwuNCwgVCwgRCwgVSwgUC41LCBPLjEuMSBhbmQKLSAgICAgICAgICAgICAqIEsgd2l0aCBhcmJpdHJhdHJ5IHNsaWNlIG9yZGVyaW5nCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIC8qIE1pc3NpbmcgRCwgVSwgUC41LCBPLjEuMSAqLwotICAgICAgICAgICAgZiA9IGkgPSBqID0gbCA9IHQgPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGlmIChmIHx8IGkgfHwgaiB8fCB0IHx8IGwgfHwgdikgewotICAgICAgICAgIEdWYWx1ZSBsaXN0ID0geyAwIH07Ci0gICAgICAgICAgR1ZhbHVlIHZzdHIgPSB7IDAgfTsKLQotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJmxpc3QsIEdTVF9UWVBFX0xJU1QpOwotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnZzdHIsIEdfVFlQRV9TVFJJTkcpOwotCi0gICAgICAgICAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZzdHIsICJoMjYzIik7Ci0gICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJnZzdHIpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZ2c3RyLCAiaDI2M3AiKTsKLSAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdnN0cik7Ci0KLSAgICAgICAgICBpZiAobCB8fCB2KSB7Ci0gICAgICAgICAgICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdnN0ciwgImgyNjNwcCIpOwotICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJnZzdHIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdnN0cik7Ci0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAobmV3X3MsICJoMjYzdmVyc2lvbiIsICZsaXN0KTsKLSAgICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmbGlzdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLCAiaDI2M3ZlcnNpb24iLCBHX1RZUEVfU1RSSU5HLCAiaDI2MyIsIE5VTEwpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAoIWYpCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLCAiYW5uZXgtZiIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICAgIGlmICghaSkKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsICJhbm5leC1pIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgICAgaWYgKCFqKQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywgImFubmV4LWoiLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICAgICAgICBpZiAoIXQpCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLCAiYW5uZXgtdCIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICAgIGlmICghbCkKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsICJhbm5leC1sIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywgImFubmV4LXYiLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotCi0KLSAgICAgICAgaWYgKGxldmVsIDw9IDEwIHx8IGxldmVsID09IDQ1KSB7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLAotICAgICAgICAgICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDE3NiwKLSAgICAgICAgICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMTQ0LAotICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsIDMwMDAwLCAyMDAyLCBOVUxMKTsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBuZXdfcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPD0gMjApIHsKLSAgICAgICAgICBHc3RTdHJ1Y3R1cmUgKnNfY29weSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAobmV3X3MpOwotCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLAotICAgICAgICAgICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDM1MiwKLSAgICAgICAgICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMjg4LAotICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsIDMwMDAwLCAyMDAyLCBOVUxMKTsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBuZXdfcyk7Ci0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc19jb3B5LAotICAgICAgICAgICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDE3NiwKLSAgICAgICAgICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMTQ0LAotICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsIDMwMDAwLCAxMDAxLCBOVUxMKTsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBzX2NvcHkpOwotICAgICAgICB9IGVsc2UgaWYgKGxldmVsIDw9IDQwKSB7Ci0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsCi0gICAgICAgICAgICAgICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMzUyLAotICAgICAgICAgICAgICAiaGVpZ2h0IiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCAyODgsCi0gICAgICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgMzAwMDAsIDEwMDEsIE5VTEwpOwotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKGNhcHMsIG5ld19zKTsKLSAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA8PSA1MCkgewotICAgICAgICAgIEdzdFN0cnVjdHVyZSAqc19jb3B5ID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChuZXdfcyk7Ci0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsCi0gICAgICAgICAgICAgICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMzUyLAotICAgICAgICAgICAgICAiaGVpZ2h0IiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCAyODgsCi0gICAgICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgNTAsIDEsIE5VTEwpOwotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKGNhcHMsIG5ld19zKTsKLQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzX2NvcHksCi0gICAgICAgICAgICAgICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMzUyLAotICAgICAgICAgICAgICAiaGVpZ2h0IiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCAyNDAsCi0gICAgICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgNjAwMDAsIDEwMDEsIE5VTEwpOwotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKGNhcHMsIHNfY29weSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPD0gNjApIHsKLSAgICAgICAgICBHc3RTdHJ1Y3R1cmUgKnNfY29weSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAobmV3X3MpOwotCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLAotICAgICAgICAgICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDcyMCwKLSAgICAgICAgICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMjg4LAotICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsIDUwLCAxLCBOVUxMKTsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBuZXdfcyk7Ci0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc19jb3B5LAotICAgICAgICAgICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDcyMCwKLSAgICAgICAgICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMjQwLAotICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsIDYwMDAwLCAxMDAxLCBOVUxMKTsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBzX2NvcHkpOwotICAgICAgICB9IGVsc2UgaWYgKGxldmVsIDw9IDcwKSB7Ci0gICAgICAgICAgR3N0U3RydWN0dXJlICpzX2NvcHkgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKG5ld19zKTsKLQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywKLSAgICAgICAgICAgICAgIndpZHRoIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCA3MjAsCi0gICAgICAgICAgICAgICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDU3NiwKLSAgICAgICAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCAwLCAxLCA1MCwgMSwgTlVMTCk7Ci0gICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZSAoY2FwcywgbmV3X3MpOwotCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHNfY29weSwKLSAgICAgICAgICAgICAgIndpZHRoIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCA3MjAsCi0gICAgICAgICAgICAgICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIDQ4MCwKLSAgICAgICAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCAwLCAxLCA2MDAwMCwgMTAwMSwgTlVMTCk7Ci0gICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZSAoY2Fwcywgc19jb3B5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBuZXdfcyk7Ci0gICAgICAgIH0KLQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR3N0U3RydWN0dXJlICpuZXdfcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8veC1oMjYzIiwKLSAgICAgICAgICAgICJ2YXJpYW50IiwgR19UWVBFX1NUUklORywgIml0dSIsCi0gICAgICAgICAgICAiaDI2M3ZlcnNpb24iLCBHX1RZUEVfU1RSSU5HLCAiaDI2MyIsCi0gICAgICAgICAgICBOVUxMKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjYzcHBheSwgIk5vIHByb2ZpbGUgb3IgbGV2ZWwgc3BlY2lmaWVkIgotICAgICAgICAgICAgIiBmb3IgSDI2My0yMDAwLCBkZWZhdWx0aW5nIHRvIGJhc2VsaW5lIEgyNjMiKTsKLQotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBuZXdfcyk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdib29sZWFuIGYgPSBGQUxTRSwgaSA9IEZBTFNFLCBqID0gRkFMU0UsIHQgPSBGQUxTRTsKLSAgICAgIC8qIEZJWE1FOiBmZm1wZWcgc3VwcG9ydCB0aGUgQXBwZW5kaXggSyB0b28sIGhvdyBkbyB3ZSBleHByZXNzIGl0ID8KLSAgICAgICAqICAgZ3VpbnQgazsKLSAgICAgICAqLwotICAgICAgY29uc3QgZ2NoYXIgKnN0cjsKLSAgICAgIEdzdFN0cnVjdHVyZSAqbmV3X3MgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtaDI2MyIsCi0gICAgICAgICAgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAiaXR1IiwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGdib29sZWFuIGFkZGVkID0gRkFMU0U7Ci0KLSAgICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImYiKTsKLSAgICAgIGlmIChzdHIgJiYgIXN0cmNtcCAoc3RyLCAiMSIpKQotICAgICAgICBmID0gVFJVRTsKLQotICAgICAgc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAiaSIpOwotICAgICAgaWYgKHN0ciAmJiAhc3RyY21wIChzdHIsICIxIikpCi0gICAgICAgIGkgPSBUUlVFOwotCi0gICAgICBzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJqIik7Ci0gICAgICBpZiAoc3RyICYmICFzdHJjbXAgKHN0ciwgIjEiKSkKLSAgICAgICAgaiA9IFRSVUU7Ci0KLSAgICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInQiKTsKLSAgICAgIGlmIChzdHIgJiYgIXN0cmNtcCAoc3RyLCAiMSIpKQotICAgICAgICB0ID0gVFJVRTsKLQotICAgICAgaWYgKGYgfHwgaSB8fCBqIHx8IHQpIHsKLSAgICAgICAgR1ZhbHVlIGxpc3QgPSB7IDAgfTsKLSAgICAgICAgR1ZhbHVlIHZzdHIgPSB7IDAgfTsKLQotICAgICAgICBnX3ZhbHVlX2luaXQgKCZsaXN0LCBHU1RfVFlQRV9MSVNUKTsKLSAgICAgICAgZ192YWx1ZV9pbml0ICgmdnN0ciwgR19UWVBFX1NUUklORyk7Ci0KLSAgICAgICAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZzdHIsICJoMjYzIik7Ci0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZ2c3RyKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RhdGljX3N0cmluZyAoJnZzdHIsICJoMjYzcCIpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdnN0cik7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2c3RyKTsKLQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAobmV3X3MsICJoMjYzdmVyc2lvbiIsICZsaXN0KTsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJmxpc3QpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLCAiaDI2M3ZlcnNpb24iLCBHX1RZUEVfU1RSSU5HLCAiaDI2MyIsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBpZiAoIWYpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywgImFubmV4LWYiLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotICAgICAgaWYgKCFpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsICJhbm5leC1pIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgIGlmICghaikKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLCAiYW5uZXgtaiIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgICBpZiAoIXQpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywgImFubmV4LXQiLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsIE5VTEwpOwotCi0KLSAgICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImN1c3RvbSIpOwotICAgICAgaWYgKHN0cikgewotICAgICAgICB1bnNpZ25lZCBpbnQgeG1heCwgeW1heCwgbXBpOwotICAgICAgICBpZiAoc3NjYW5mIChzdHIsICIldSwldSwldSIsICZ4bWF4LCAmeW1heCwgJm1waSkgPT0gMykgewotICAgICAgICAgIGlmICh4bWF4ICUgNCAmJiB5bWF4ICUgNCAmJiBtcGkgPj0gMSAmJiBtcGkgPD0gMzIpIHsKLSAgICAgICAgICAgIGNhcHMgPSBjYXBzX2FwcGVuZCAoY2FwcywgbmV3X3MsIHhtYXgsIHltYXgsIG1waSk7Ci0gICAgICAgICAgICBhZGRlZCA9IFRSVUU7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwaDI2M3BwYXksICJJbnZhbGlkIGN1c3RvbSBmcmFtZXNpemUvTVBJIgotICAgICAgICAgICAgICAgICIgJXUgeCAldSBhdCAldSwgaWdub3JpbmciLCB4bWF4LCB5bWF4LCBtcGkpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cGgyNjNwcGF5LCAiSW52YWxpZCBjdXN0b20gZnJhbWVzaXplL01QSTogJXMsIgotICAgICAgICAgICAgICAiIGlnbm9yaW5nIiwgc3RyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICIxNmNpZiIpOwotICAgICAgaWYgKHN0cikgewotICAgICAgICBpbnQgbXBpID0gYXRvaSAoc3RyKTsKLSAgICAgICAgY2FwcyA9IGNhcHNfYXBwZW5kIChjYXBzLCBuZXdfcywgMTQwOCwgMTE1MiwgbXBpKTsKLSAgICAgICAgYWRkZWQgPSBUUlVFOwotICAgICAgfQotCi0gICAgICBzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICI0Y2lmIik7Ci0gICAgICBpZiAoc3RyKSB7Ci0gICAgICAgIGludCBtcGkgPSBhdG9pIChzdHIpOwotICAgICAgICBjYXBzID0gY2Fwc19hcHBlbmQgKGNhcHMsIG5ld19zLCA3MDQsIDU3NiwgbXBpKTsKLSAgICAgICAgYWRkZWQgPSBUUlVFOwotICAgICAgfQotCi0gICAgICBzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJjaWYiKTsKLSAgICAgIGlmIChzdHIpIHsKLSAgICAgICAgaW50IG1waSA9IGF0b2kgKHN0cik7Ci0gICAgICAgIGNhcHMgPSBjYXBzX2FwcGVuZCAoY2FwcywgbmV3X3MsIDM1MiwgMjg4LCBtcGkpOwotICAgICAgICBhZGRlZCA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInFjaWYiKTsKLSAgICAgIGlmIChzdHIpIHsKLSAgICAgICAgaW50IG1waSA9IGF0b2kgKHN0cik7Ci0gICAgICAgIGNhcHMgPSBjYXBzX2FwcGVuZCAoY2FwcywgbmV3X3MsIDE3NiwgMTQ0LCBtcGkpOwotICAgICAgICBhZGRlZCA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInNxY2lmIik7Ci0gICAgICBpZiAoc3RyKSB7Ci0gICAgICAgIGludCBtcGkgPSBhdG9pIChzdHIpOwotICAgICAgICBjYXBzID0gY2Fwc19hcHBlbmQgKGNhcHMsIG5ld19zLCAxMjgsIDk2LCBtcGkpOwotICAgICAgICBhZGRlZCA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhZGRlZCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChuZXdfcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tZXJnZV9zdHJ1Y3R1cmUgKGNhcHMsIG5ld19zKTsKLSAgICB9Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAoaW50ZXJzZWN0KTsKLQotZG9uZToKLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqdG1wOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIkludGVyc2VjdCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGFuZCBmaWx0ZXIgJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMsIGZpbHRlcik7Ci0gICAgdG1wID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgY2FwcyA9IHRtcDsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNwX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSDI2M1BQYXkgKnJ0cGgyNjNwcGF5OwotCi0gIHJ0cGgyNjNwcGF5ID0gR1NUX1JUUF9IMjYzUF9QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZSQUdNRU5UQVRJT05fTU9ERToKLSAgICAgIHJ0cGgyNjNwcGF5LT5mcmFnbWVudGF0aW9uX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjNwX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSDI2M1BQYXkgKnJ0cGgyNjNwcGF5OwotCi0gIHJ0cGgyNjNwcGF5ID0gR1NUX1JUUF9IMjYzUF9QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0ZSQUdNRU5UQVRJT05fTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBydHBoMjYzcHBheS0+ZnJhZ21lbnRhdGlvbl9tb2RlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2M3BfcGF5X2ZsdXNoIChHc3RSdHBIMjYzUFBheSAqIHJ0cGgyNjNwcGF5KQotewotICBndWludCBhdmFpbDsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdCA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGdib29sZWFuIGZyYWdtZW50ZWQgPSBGQUxTRTsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwaDI2M3BwYXktPmFkYXB0ZXIpOwotICBpZiAoYXZhaWwgPT0gMCkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgZnJhZ21lbnRlZCA9IEZBTFNFOwotICAvKiBUaGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoZSBIMjYzLysvKysgZW5jb2RlciBzZW5kcyBjb21wbGV0ZSBmcmFtZXMgaW4gZWFjaAotICAgKiBidWZmZXIgKi8KLSAgLyogV2l0aCBGcmFnbWVudGF0aW9uIE1vZGUgYXQgR1NUX0ZSQUdNRU5UQVRJT05fTU9ERV9OT1JNQUw6Ci0gICAqICBUaGlzIGFsZ29yaXRobSBpbXBsZW1lbnRzIHRoZSBGb2xsb3ctb24gcGFja2V0cyBtZXRob2QgZm9yIHBhY2tldGl6YXRpb24uCi0gICAqICBUaGlzIGFzc3VtZXMgbG93IHBhY2tldCBsb3NzIG5ldHdvcmsuIAotICAgKiBXaXRoIEZyYWdtZW50YXRpb24gTW9kZSBhdCBHU1RfRlJBR01FTlRBVElPTl9NT0RFX1NZTkM6Ci0gICAqICBUaGlzIGFsZ29yaXRobSBzZXBhcmF0ZXMgbGFyZ2UgZnJhbWVzIGF0IHN5bmNocm9uaXNhdGlvbiBwb2ludHMgKFNlZ21lbnRzKQotICAgKiAgKFNlZSBSRkMgNDYyOSBzZWN0aW9uIDYpLiBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBoYXZlIGEgcHJvcGVydHkgc3VjaCBhcyBuZXR3b3JrCi0gICAqICBxdWFsaXR5IHRvIHNlbGVjdCBiZXR3ZWVuIGJvdGggcGFja2V0aXphdGlvbiBtZXRob2RzICovCi0gIC8qIFRPRE8gQWRkIFZSQyBzdXBwcnQgKFNlZSBSRkMgNDYyOSBzZWN0aW9uIDUuMikgKi8KLQotICB3aGlsZSAoYXZhaWwgPiAwKSB7Ci0gICAgZ3VpbnQgdG93cml0ZTsKLSAgICBndWludDggKnBheWxvYWQ7Ci0gICAgZ2ludCBoZWFkZXJfbGVuOwotICAgIGd1aW50IG5leHRfZ29wID0gMDsKLSAgICBnYm9vbGVhbiBmb3VuZF9nb2IgPSBGQUxTRTsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gICAgR3N0QnVmZmVyICpwYXlsb2FkX2J1ZjsKLQotICAgIGlmIChydHBoMjYzcHBheS0+ZnJhZ21lbnRhdGlvbl9tb2RlID09IEdTVF9GUkFHTUVOVEFUSU9OX01PREVfU1lOQykgewotICAgICAgLyogc3RhcnQgYWZ0ZXIgMXN0IGdvcCBwb3NzaWJsZSAqLwotCi0gICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgZ29iIG9yIGVvcyAsIGVvc3NicyAqLwotICAgICAgLyogRklYTUUgRU9TIGFuZCBFT1NTQlMgcGFja2V0cyBzaG91bGQgbmV2ZXIgY29udGFpbiBhbnkgZ29icyBhbmQgdmljZS12ZXJzYSAqLwotICAgICAgbmV4dF9nb3AgPQotICAgICAgICAgIGdzdF9hZGFwdGVyX21hc2tlZF9zY2FuX3VpbnQzMiAocnRwaDI2M3BwYXktPmFkYXB0ZXIsIDB4ZmZmZjgwMDAsCi0gICAgICAgICAgMHgwMDAwODAwMCwgMCwgYXZhaWwpOwotICAgICAgaWYgKG5leHRfZ29wID09IDApIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2M3BwYXksICIgRm91bmQgR09CIGhlYWRlciIpOwotICAgICAgICBmb3VuZF9nb2IgPSBUUlVFOwotICAgICAgfQotCi0gICAgICAvKiBGaW5kIG5leHQgYW5kIGN1dCB0aGUgcGFja2V0IGFjY29yZGluZ2x5ICovCi0gICAgICAvKiBUT0RPIHdlIHNob3VsZCBnZXQgYXMgbWFueSBnb2JzIGFzIHBvc3NpYmxlIHVudGlsIE1UVSBpcyByZWFjaGVkLCB0aGlzCi0gICAgICAgKiBjb2RlIHNlZW1zIHRvIGp1c3QgZ2V0IG9uZSBHT0IgcGVyIHBhY2tldCAqLwotICAgICAgaWYgKG5leHRfZ29wID09IDAgJiYgYXZhaWwgPiAzKQotICAgICAgICBuZXh0X2dvcCA9Ci0gICAgICAgICAgICBnc3RfYWRhcHRlcl9tYXNrZWRfc2Nhbl91aW50MzIgKHJ0cGgyNjNwcGF5LT5hZGFwdGVyLCAweGZmZmY4MDAwLAotICAgICAgICAgICAgMHgwMDAwODAwMCwgMywgYXZhaWwgLSAzKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjNwcGF5LCAiIE5leHQgR09CIERldGVjdGVkIGF0IDogICVkIiwgbmV4dF9nb3ApOwotICAgICAgaWYgKG5leHRfZ29wID09IC0xKQotICAgICAgICBuZXh0X2dvcCA9IDA7Ci0gICAgfQotCi0gICAgLyogZm9yIHBpY3R1cmUgc3RhcnQgZnJhbWVzIChub24tZnJhZ21lbnRlZCksIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBmaXJzdAotICAgICAqIHR3byAweDAwIGJ5dGVzIGFuZCBzZXQgUD0xICovCi0gICAgaWYgKCFmcmFnbWVudGVkIHx8IGZvdW5kX2dvYikgewotICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHJ0cGgyNjNwcGF5LT5hZGFwdGVyLCAyKTsKLSAgICAgIGF2YWlsIC09IDI7Ci0gICAgfQotICAgIGhlYWRlcl9sZW4gPSAyOwotCi0gICAgdG93cml0ZSA9IE1JTiAoYXZhaWwsIGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4KLSAgICAgICAgKEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocnRwaDI2M3BwYXkpIC0gaGVhZGVyX2xlbiwgMCwgMCkpOwotCi0gICAgaWYgKG5leHRfZ29wID4gMCkKLSAgICAgIHRvd3JpdGUgPSBNSU4gKG5leHRfZ29wLCB0b3dyaXRlKTsKLQotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoaGVhZGVyX2xlbiwgMCwgMCk7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0gICAgLyogbGFzdCBmcmFnbWVudCBnZXRzIHRoZSBtYXJrZXIgYml0IHNldCAqLwotICAgIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIGF2YWlsID4gdG93cml0ZSA/IDAgOiAxKTsKLQotICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0KLSAgICAvKiAgMCAgICAgICAgICAgICAgICAgICAxCi0gICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKiB8ICAgUlIgICAgfFB8VnwgICBQTEVOICAgIHxQRUJJVHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKi8KLSAgICAvKiBpZiBmcmFnbWVudGVkIG9yIGdvcCBoZWFkZXIgLCB3cml0ZSBwIGJpdCA9MSAqLwotICAgIHBheWxvYWRbMF0gPSAoZnJhZ21lbnRlZCAmJiAhZm91bmRfZ29iKSA/IDB4MDAgOiAweDA0OwotICAgIHBheWxvYWRbMV0gPSAwOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBydHBoMjYzcHBheS0+Zmlyc3RfdGltZXN0YW1wOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBydHBoMjYzcHBheS0+Zmlyc3RfZHVyYXRpb247Ci0gICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gICAgcGF5bG9hZF9idWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0IChydHBoMjYzcHBheS0+YWRhcHRlciwgdG93cml0ZSk7Ci0gICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjNwcGF5KSwgb3V0YnVmLCBwYXlsb2FkX2J1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAob3V0YnVmLCBwYXlsb2FkX2J1Zik7Ci0gICAgYXZhaWwgLT0gdG93cml0ZTsKLQotICAgIC8qIElmIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHRoaXMgaXMgb3VyIGZpcnN0IGl0ZXJhdGlvbiwKLSAgICAgKiB3ZSBjcmVhdGUgYSBidWZmZXIgbGlzdCBhbmQgcmVtZW1iZXIgdGhhdCB3ZSdyZSBmcmFnbWVudGVkLgotICAgICAqCi0gICAgICogSWYgd2UncmUgZnJhZ21lbnRlZCBhbHJlYWR5LCBhZGQgYnVmZmVycyB0byB0aGUgcHJldmlvdXNseQotICAgICAqIGNyZWF0ZWQgYnVmZmVyIGxpc3QuCi0gICAgICoKLSAgICAgKiBPdGhlcndpc2UgZnJhZ21lbnRlZCB3aWxsIGJlIEZBTFNFIGFuZCB3ZSBqdXN0IHB1c2ggdGhlIHNpbmdsZSBvdXRwdXQKLSAgICAgKiBidWZmZXIsIGFuZCBubyBsaXN0IGlzIGFsbG9jYXRlZC4KLSAgICAgKi8KLSAgICBpZiAoYXZhaWwgJiYgIWZyYWdtZW50ZWQpIHsKLSAgICAgIGZyYWdtZW50ZWQgPSBUUlVFOwotICAgICAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0gICAgICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBvdXRidWYpOwotICAgIH0gZWxzZSBpZiAoZnJhZ21lbnRlZCkgewotICAgICAgZ3N0X2J1ZmZlcl9saXN0X2FkZCAobGlzdCwgb3V0YnVmKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZnJhZ21lbnRlZCkgewotICAgIHJldCA9Ci0gICAgICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cGgyNjNwcGF5KSwKLSAgICAgICAgbGlzdCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0KLSAgICAgICAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cGgyNjNwcGF5KSwgb3V0YnVmKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjNwX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSdHBIMjYzUFBheSAqcnRwaDI2M3BwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIHJ0cGgyNjNwcGF5ID0gR1NUX1JUUF9IMjYzUF9QQVkgKHBheWxvYWQpOwotCi0gIHJ0cGgyNjNwcGF5LT5maXJzdF90aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgcnRwaDI2M3BwYXktPmZpcnN0X2R1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICAvKiB3ZSBhbHdheXMgZW5jb2RlIGFuZCBmbHVzaCBhIGZ1bGwgcGljdHVyZSAqLwotICBnc3RfYWRhcHRlcl9wdXNoIChydHBoMjYzcHBheS0+YWRhcHRlciwgYnVmZmVyKTsKLSAgcmV0ID0gZ3N0X3J0cF9oMjYzcF9wYXlfZmx1c2ggKHJ0cGgyNjNwcGF5KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9oMjYzcF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBoMjYzcHBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9IMjYzUF9QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5oIGIvZ3N0L3J0cC9nc3RydHBoMjYzcHBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2VjOGI4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2M3BwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9IMjYzUF9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9IMjYzUF9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9IMjYzUF9QQVkgXAotICAoZ3N0X3J0cF9oMjYzcF9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9IMjYzUF9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfSDI2M1BfUEFZLEdzdFJ0cEgyNjNQUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9IMjYzUF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0gyNjNQX1BBWSxHc3RSdHBIMjYzUFBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjYzUF9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfSDI2M1BfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjYzUF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0gyNjNQX1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBIMjYzUFBheSBHc3RSdHBIMjYzUFBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBIMjYzUFBheUNsYXNzIEdzdFJ0cEgyNjNQUGF5Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfRlJBR01FTlRBVElPTl9NT0RFX05PUk1BTCA9IDAsCi0gIEdTVF9GUkFHTUVOVEFUSU9OX01PREVfU1lOQyAgID0gMQotfSBHc3RGcmFnbWVudGF0aW9uTW9kZTsKLQotc3RydWN0IF9Hc3RSdHBIMjYzUFBheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCAgICBwYXlsb2FkOwotCi0gIEdzdEFkYXB0ZXIgICAgICAgICAgKmFkYXB0ZXI7Ci0gIEdzdENsb2NrVGltZSAgICAgICAgIGZpcnN0X3RpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lICAgICAgICAgZmlyc3RfZHVyYXRpb247Ci0gIEdzdEZyYWdtZW50YXRpb25Nb2RlIGZyYWdtZW50YXRpb25fbW9kZTsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwSDI2M1BQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfaDI2M3BfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9oMjYzcF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfSDI2M1BfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNTQxNWMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBoMjY0ZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNzUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgImdzdHJ0cGgyNjRkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGgyNjRkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwaDI2NGRlcGF5X2RlYnVnKQotCi0vKiBUaGlzIGlzIHdoYXQgd2UnbGwgZGVmYXVsdCB0byB3aGVuIGRvd25zdHJlYW0gaGFzbid0Ci0gKiBleHByZXNzZWQgYSByZXN0cmljdGlvbiBvciBwcmVmZXJlbmNlIHZpYSBjYXBzICovCi0jZGVmaW5lIERFRkFVTFRfQllURV9TVFJFQU0gICBUUlVFCi0jZGVmaW5lIERFRkFVTFRfQUNDRVNTX1VOSVQgICBGQUxTRQotCi0vKiAzIHplcm8gYnl0ZXMgc3luY3dvcmQgKi8KLXN0YXRpYyBjb25zdCBndWludDggc3luY19ieXRlc1tdID0geyAwLCAwLCAwLCAxIH07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjRfZGVwYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1oMjY0LCAiCi0gICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgYXZjLCBhbGlnbm1lbnQgPSAoc3RyaW5nKSBhdTsgIgotICAgICAgICAidmlkZW8veC1oMjY0LCAiCi0gICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgYnl0ZS1zdHJlYW0sIGFsaWdubWVudCA9IChzdHJpbmcpIHsgbmFsLCBhdSB9IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9oMjY0X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkgyNjRcIiIpCi0gICAgICAgIC8qKiBvcHRpb25hbCBwYXJhbWV0ZXJzICoqLwotICAgIC8qICJwcm9maWxlLWxldmVsLWlkID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogIm1heC1tYnBzID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogIm1heC1mcyA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJtYXgtY3BiID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogIm1heC1kcGIgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAibWF4LWJyID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogInJlZHVuZGFudC1waWMtY2FwID0gKHN0cmluZykgeyBcIjBcIiwgXCIxXCIgfSwgIiAqLwotICAgIC8qICJzcHJvcC1wYXJhbWV0ZXItc2V0cyA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJwYXJhbWV0ZXItYWRkID0gKHN0cmluZykgeyBcIjBcIiwgXCIxXCIgfSwgIiAqLwotICAgIC8qICJwYWNrZXRpemF0aW9uLW1vZGUgPSAoc3RyaW5nKSB7IFwiMFwiLCBcIjFcIiwgXCIyXCIgfSwgIiAqLwotICAgIC8qICJzcHJvcC1pbnRlcmxlYXZpbmctZGVwdGggPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAic3Byb3AtZGVpbnQtYnVmLXJlcSA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJkZWludC1idWYtY2FwID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogInNwcm9wLWluaXQtYnVmLXRpbWUgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAic3Byb3AtbWF4LWRvbi1kaWZmID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogIm1heC1yY21kLW5hbHUtc2l6ZSA9IChzdHJpbmcpIEFOWSAiICovCi0gICAgKTsKLQotI2RlZmluZSBnc3RfcnRwX2gyNjRfZGVwYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSDI2NERlcGF5LCBnc3RfcnRwX2gyNjRfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjY0X2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfaDI2NF9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2gyNjRfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaDI2NF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZmlsdGVyLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2gyNjRfZGVwYXlfaGFuZGxlX2V2ZW50IChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXksCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwSDI2NERlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9oMjY0X2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2NF9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjRfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgSDI2NCBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgSDI2NCB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzk4NCkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfaDI2NF9kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9oMjY0X2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9oMjY0X2RlcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9ldmVudCA9IGdzdF9ydHBfaDI2NF9kZXBheV9oYW5kbGVfZXZlbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfZGVwYXlfaW5pdCAoR3N0UnRwSDI2NERlcGF5ICogcnRwaDI2NGRlcGF5KQotewotICBydHBoMjY0ZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIHJ0cGgyNjRkZXBheS0+cGljdHVyZV9hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtID0gREVGQVVMVF9CWVRFX1NUUkVBTTsKLSAgcnRwaDI2NGRlcGF5LT5tZXJnZSA9IERFRkFVTFRfQUNDRVNTX1VOSVQ7Ci0gIHJ0cGgyNjRkZXBheS0+c3BzID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jICgKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIHJ0cGgyNjRkZXBheS0+cHBzID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jICgKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfZGVwYXlfcmVzZXQgKEdzdFJ0cEgyNjREZXBheSAqIHJ0cGgyNjRkZXBheSkKLXsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cGgyNjRkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cGgyNjRkZXBheS0+d2FpdF9zdGFydCA9IFRSVUU7Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChydHBoMjY0ZGVwYXktPnBpY3R1cmVfYWRhcHRlcik7Ci0gIHJ0cGgyNjRkZXBheS0+cGljdHVyZV9zdGFydCA9IEZBTFNFOwotICBydHBoMjY0ZGVwYXktPmxhc3Rfa2V5ZnJhbWUgPSBGQUxTRTsKLSAgcnRwaDI2NGRlcGF5LT5sYXN0X3RzID0gMDsKLSAgcnRwaDI2NGRlcGF5LT5jdXJyZW50X2Z1X3R5cGUgPSAwOwotICBydHBoMjY0ZGVwYXktPm5ld19jb2RlY19kYXRhID0gRkFMU0U7Ci0gIGdfcHRyX2FycmF5X3NldF9zaXplIChydHBoMjY0ZGVwYXktPnNwcywgMCk7Ci0gIGdfcHRyX2FycmF5X3NldF9zaXplIChydHBoMjY0ZGVwYXktPnBwcywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cEgyNjREZXBheSAqcnRwaDI2NGRlcGF5OwotCi0gIHJ0cGgyNjRkZXBheSA9IEdTVF9SVFBfSDI2NF9ERVBBWSAob2JqZWN0KTsKLQotICBpZiAocnRwaDI2NGRlcGF5LT5jb2RlY19kYXRhKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHJ0cGgyNjRkZXBheS0+Y29kZWNfZGF0YSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGgyNjRkZXBheS0+YWRhcHRlcik7Ci0gIGdfb2JqZWN0X3VucmVmIChydHBoMjY0ZGVwYXktPnBpY3R1cmVfYWRhcHRlcik7Ci0KLSAgZ19wdHJfYXJyYXlfZnJlZSAocnRwaDI2NGRlcGF5LT5zcHMsIFRSVUUpOwotICBnX3B0cl9hcnJheV9mcmVlIChydHBoMjY0ZGVwYXktPnBwcywgVFJVRSk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjY0X2RlcGF5X25lZ290aWF0ZSAoR3N0UnRwSDI2NERlcGF5ICogcnRwaDI2NGRlcGF5KQotewotICBHc3RDYXBzICpjYXBzOwotICBnaW50IGJ5dGVfc3RyZWFtID0gLTE7Ci0gIGdpbnQgbWVyZ2UgPSAtMTsKLQotICBjYXBzID0KLSAgICAgIGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKHJ0cGgyNjRkZXBheSkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRkZXBheSwgImFsbG93ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmIChjYXBzKSB7Ci0gICAgaWYgKGdzdF9jYXBzX2dldF9zaXplIChjYXBzKSA+IDApIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICAgICAgY29uc3QgZ2NoYXIgKnN0ciA9IE5VTEw7Ci0KLSAgICAgIGlmICgoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAic3RyZWFtLWZvcm1hdCIpKSkgewotICAgICAgICBpZiAoc3RyY21wIChzdHIsICJhdmMiKSA9PSAwKSB7Ci0gICAgICAgICAgYnl0ZV9zdHJlYW0gPSBGQUxTRTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKHN0ciwgImJ5dGUtc3RyZWFtIikgPT0gMCkgewotICAgICAgICAgIGJ5dGVfc3RyZWFtID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJ1bmtub3duIHN0cmVhbS1mb3JtYXQ6ICVzIiwgc3RyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImFsaWdubWVudCIpKSkgewotICAgICAgICBpZiAoc3RyY21wIChzdHIsICJhdSIpID09IDApIHsKLSAgICAgICAgICBtZXJnZSA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJuYWwiKSA9PSAwKSB7Ci0gICAgICAgICAgbWVyZ2UgPSBGQUxTRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJ1bmtub3duIGFsaWdubWVudDogJXMiLCBzdHIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIGlmIChieXRlX3N0cmVhbSAhPSAtMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRkZXBheSwgImRvd25zdHJlYW0gcmVxdWlyZXMgYnl0ZS1zdHJlYW0gJWQiLAotICAgICAgICBieXRlX3N0cmVhbSk7Ci0gICAgcnRwaDI2NGRlcGF5LT5ieXRlX3N0cmVhbSA9IGJ5dGVfc3RyZWFtOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRkZXBheSwgImRlZmF1bHRpbmcgdG8gYnl0ZS1zdHJlYW0gJWQiLAotICAgICAgICBERUZBVUxUX0JZVEVfU1RSRUFNKTsKLSAgICBydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtID0gREVGQVVMVF9CWVRFX1NUUkVBTTsKLSAgfQotICBpZiAobWVyZ2UgIT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJkb3duc3RyZWFtIHJlcXVpcmVzIG1lcmdlICVkIiwgbWVyZ2UpOwotICAgIHJ0cGgyNjRkZXBheS0+bWVyZ2UgPSBtZXJnZTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJkZWZhdWx0aW5nIHRvIG1lcmdlICVkIiwKLSAgICAgICAgREVGQVVMVF9BQ0NFU1NfVU5JVCk7Ci0gICAgcnRwaDI2NGRlcGF5LT5tZXJnZSA9IERFRkFVTFRfQUNDRVNTX1VOSVQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wYXJzZV9zcHMgKEdzdE1hcEluZm8gKiBtYXAsIGd1aW50MzIgKiBzcHNfaWQpCi17Ci0gIEdzdEJpdFJlYWRlciBiciA9IEdTVF9CSVRfUkVBREVSX0lOSVQgKG1hcC0+ZGF0YSArIDQsCi0gICAgICBtYXAtPnNpemUgLSA0KTsKLQotICBpZiAobWFwLT5zaXplIDwgNSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsIHNwc19pZCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX3BwcyAoR3N0TWFwSW5mbyAqIG1hcCwgZ3VpbnQzMiAqIHNwc19pZCwgZ3VpbnQzMiAqIHBwc19pZCkKLXsKLSAgR3N0Qml0UmVhZGVyIGJyID0gR1NUX0JJVF9SRUFERVJfSU5JVCAobWFwLT5kYXRhICsgMSwKLSAgICAgIG1hcC0+c2l6ZSAtIDEpOwotCi0gIGlmIChtYXAtPnNpemUgPCAyKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9ydHBfcmVhZF9nb2xvbWIgKCZiciwgcHBzX2lkKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X3J0cF9yZWFkX2dvbG9tYiAoJmJyLCBzcHNfaWQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2NF9zZXRfc3JjX2NhcHMgKEdzdFJ0cEgyNjREZXBheSAqIHJ0cGgyNjRkZXBheSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RDYXBzICpzcmNjYXBzOwotICBHc3RDYXBzICpvbGRfY2FwczsKLQotICBpZiAoIXJ0cGgyNjRkZXBheS0+Ynl0ZV9zdHJlYW0gJiYKLSAgICAgICghcnRwaDI2NGRlcGF5LT5uZXdfY29kZWNfZGF0YSB8fAotICAgICAgICAgIHJ0cGgyNjRkZXBheS0+c3BzLT5sZW4gPT0gMCB8fCBydHBoMjY0ZGVwYXktPnBwcy0+bGVuID09IDApKQotICAgIHJldHVybiBUUlVFOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1oMjY0IiwKLSAgICAgICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywKLSAgICAgIHJ0cGgyNjRkZXBheS0+Ynl0ZV9zdHJlYW0gPyAiYnl0ZS1zdHJlYW0iIDogImF2YyIsCi0gICAgICAiYWxpZ25tZW50IiwgR19UWVBFX1NUUklORywgcnRwaDI2NGRlcGF5LT5tZXJnZSA/ICJhdSIgOiAibmFsIiwgTlVMTCk7Ci0KLSAgaWYgKCFydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtKSB7Ci0gICAgR3N0QnVmZmVyICpjb2RlY19kYXRhOwotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIEdzdE1hcEluZm8gbmFsbWFwOwotICAgIGd1aW50OCAqZGF0YTsKLSAgICBndWludCBsZW47Ci0gICAgZ3VpbnQgbmV3X3NpemU7Ci0gICAgZ3VpbnQgaTsKLSAgICBndWNoYXIgbGV2ZWwgPSAwOwotICAgIGd1Y2hhciBwcm9maWxlX2NvbXBhdCA9IEdfTUFYVUlOVDg7Ci0KLSAgICAvKiBzdGFydCB3aXRoIDcgYnl0ZXMgaGVhZGVyICovCi0gICAgbGVuID0gNzsKLSAgICAvKiBjb3VudCBzcHMgJiBwcHMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgcnRwaDI2NGRlcGF5LT5zcHMtPmxlbjsgaSsrKQotICAgICAgbGVuICs9IDIgKyBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIGkpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgcnRwaDI2NGRlcGF5LT5wcHMtPmxlbjsgaSsrKQotICAgICAgbGVuICs9IDIgKyBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5wcHMsIGkpKTsKLQotICAgIGNvZGVjX2RhdGEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbik7Ci0gICAgZ19kZWJ1ZyAoImFsbG9jX2xlbjogJXUiLCBsZW4pOwotICAgIGdzdF9idWZmZXJfbWFwIChjb2RlY19kYXRhLCAmbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0gICAgZGF0YSA9IG1hcC5kYXRhOwotCi0gICAgLyogOCBiaXRzIHZlcnNpb24gPT0gMSAqLwotICAgICpkYXRhKysgPSAxOwotCi0gICAgLyogQWNjb3JkaW5nIHRvOiBJU08vSUVDIDE0NDk2LTE1OjIwMDQoRSkgc2VjdGlvbiA1LjIuNC4xCi0gICAgICogVGhlIGxldmVsIGlzIHRoZSBtYXggbGV2ZWwgb2YgYWxsIFNQU2VzCi0gICAgICogQSBwcm9maWxlIGNvbXBhdCBiaXQgY2FuIG9ubHkgYmUgc2V0IGlmIGFsbCBTUFNlcyBpbmNsdWRlIHRoYXQgYml0Ci0gICAgICovCi0gICAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjRkZXBheS0+c3BzLT5sZW47IGkrKykgewotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY0ZGVwYXktPnNwcywgaSksICZuYWxtYXAsCi0gICAgICAgICAgR1NUX01BUF9SRUFEKTsKLSAgICAgIHByb2ZpbGVfY29tcGF0ICY9IG5hbG1hcC5kYXRhWzJdOwotICAgICAgbGV2ZWwgPSBNQVggKGxldmVsLCBuYWxtYXAuZGF0YVszXSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIGkpLCAmbmFsbWFwKTsKLSAgICB9Ci0KLSAgICAvKiBBc3N1bWUgYWxsIFNQU2VzIHVzZSB0aGUgc2FtZSBwcm9maWxlLCBzbyBleHRyYWN0IGZyb20gdGhlIGZpcnN0IFNQUyAqLwotICAgIGdzdF9idWZmZXJfbWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIDApLCAmbmFsbWFwLAotICAgICAgICBHU1RfTUFQX1JFQUQpOwotICAgICpkYXRhKysgPSBuYWxtYXAuZGF0YVsxXTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIDApLCAmbmFsbWFwKTsKLSAgICAqZGF0YSsrID0gcHJvZmlsZV9jb21wYXQ7Ci0gICAgKmRhdGErKyA9IGxldmVsOwotCi0gICAgLyogNiBiaXRzIHJlc2VydmVkIHwgMiBiaXRzIGxlbmd0aFNpemVNaW51c09uICovCi0gICAgKmRhdGErKyA9IDB4ZmY7Ci0gICAgLyogMyBiaXRzIHJlc2VydmVkIHwgNSBiaXRzIG51bU9mU2VxdWVuY2VQYXJhbWV0ZXJTZXRzICovCi0gICAgKmRhdGErKyA9IDB4ZTAgfCAocnRwaDI2NGRlcGF5LT5zcHMtPmxlbiAmIDB4MWYpOwotCi0gICAgLyogY29weSBhbGwgU1BTICovCi0gICAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjRkZXBheS0+c3BzLT5sZW47IGkrKykgewotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY0ZGVwYXktPnNwcywgaSksICZuYWxtYXAsCi0gICAgICAgICAgR1NUX01BUF9SRUFEKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAiY29weSBTUFMgJWQgb2YgbGVuZ3RoICV1IiwgaSwKLSAgICAgICAgICAoZ3VpbnQpIG5hbG1hcC5zaXplKTsKLSAgICAgIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIG5hbG1hcC5zaXplKTsKLSAgICAgIGRhdGEgKz0gMjsKLSAgICAgIG1lbWNweSAoZGF0YSwgbmFsbWFwLmRhdGEsIG5hbG1hcC5zaXplKTsKLSAgICAgIGRhdGEgKz0gbmFsbWFwLnNpemU7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIGkpLCAmbmFsbWFwKTsKLSAgICB9Ci0KLSAgICAvKiA4IGJpdHMgbnVtT2ZQaWN0dXJlUGFyYW1ldGVyU2V0cyAqLwotICAgICpkYXRhKysgPSBydHBoMjY0ZGVwYXktPnBwcy0+bGVuOwotICAgIC8qIGNvcHkgYWxsIFBQUyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBydHBoMjY0ZGVwYXktPnBwcy0+bGVuOyBpKyspIHsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5wcHMsIGkpLCAmbmFsbWFwLAotICAgICAgICAgIEdTVF9NQVBfUkVBRCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRkZXBheSwgImNvcHkgUFBTICVkIG9mIGxlbmd0aCAldSIsIGksCi0gICAgICAgICAgKGd1aW50KSBuYWxtYXAuc2l6ZSk7Ci0gICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhLCBuYWxtYXAuc2l6ZSk7Ci0gICAgICBkYXRhICs9IDI7Ci0gICAgICBtZW1jcHkgKGRhdGEsIG5hbG1hcC5kYXRhLCBuYWxtYXAuc2l6ZSk7Ci0gICAgICBkYXRhICs9IG5hbG1hcC5zaXplOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjRkZXBheS0+cHBzLCBpKSwgJm5hbG1hcCk7Ci0gICAgfQotCi0gICAgbmV3X3NpemUgPSBkYXRhIC0gbWFwLmRhdGE7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoY29kZWNfZGF0YSwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoY29kZWNfZGF0YSwgbmV3X3NpemUpOwotCi0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3JjY2FwcywKLSAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGNvZGVjX2RhdGEsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGNvZGVjX2RhdGEpOwotICB9Ci0KLSAgLyogU2V0IHByb2ZpbGUgYSBsZXZlbCBmcm9tIFNQUyAqLwotICB7Ci0gICAgZ2ludCBpOwotICAgIEdzdEJ1ZmZlciAqbWF4X2xldmVsX3NwcyA9IE5VTEw7Ci0gICAgZ2ludCBsZXZlbCA9IDA7Ci0gICAgR3N0TWFwSW5mbyBuYWxtYXA7Ci0KLSAgICAvKiBHZXQgdGhlIFNQUyB3aXRoIHRoZSBoaWdoZXN0IGxldmVsLiBXZSBhc3N1bWUKLSAgICAgKiBhbGwgU1BTIGhhdmUgdGhlIHNhbWUgcHJvZmlsZSAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBydHBoMjY0ZGVwYXktPnNwcy0+bGVuOyBpKyspIHsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIGkpLCAmbmFsbWFwLAotICAgICAgICAgIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBpZiAobGV2ZWwgPT0gMCB8fCBsZXZlbCA8IG5hbG1hcC5kYXRhWzNdKSB7Ci0gICAgICAgIG1heF9sZXZlbF9zcHMgPSBnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIGkpOwotICAgICAgICBsZXZlbCA9IG5hbG1hcC5kYXRhWzNdOwotICAgICAgfQotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjRkZXBheS0+c3BzLCBpKSwgJm5hbG1hcCk7Ci0gICAgfQotCi0gICAgaWYgKG1heF9sZXZlbF9zcHMpIHsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChtYXhfbGV2ZWxfc3BzLCAmbmFsbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgZ3N0X2NvZGVjX3V0aWxzX2gyNjRfY2Fwc19zZXRfbGV2ZWxfYW5kX3Byb2ZpbGUgKHNyY2NhcHMsIG5hbG1hcC5kYXRhICsgMSwKLSAgICAgICAgICBuYWxtYXAuc2l6ZSAtIDEpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobWF4X2xldmVsX3NwcywgJm5hbG1hcCk7Ci0gICAgfQotICB9Ci0KLQotICBvbGRfY2FwcyA9Ci0gICAgICBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChydHBoMjY0ZGVwYXkpKTsKLQotICBpZiAob2xkX2NhcHMgIT0gTlVMTCkgewotICAgIC8qIE9ubHkgdXBkYXRlIHRoZSBjYXBzIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gRm9yCi0gICAgICogQVZDIHdlIGRvbid0IHVwZGF0ZSBjYXBzIGlmIG9ubHkgdGhlIGNvZGVjX2RhdGEKLSAgICAgKiBjaGFuZ2VzLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW91ciBhcyBpbiBoMjY0cGFyc2UKLSAgICAgKi8KLSAgICBpZiAocnRwaDI2NGRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgICAgaWYgKCFnc3RfY2Fwc19pc19lcXVhbCAoc3JjY2Fwcywgb2xkX2NhcHMpKQotICAgICAgICByZXMgPQotICAgICAgICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKHJ0cGgyNjRkZXBheSksCi0gICAgICAgICAgICBzcmNjYXBzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgR3N0Q2FwcyAqdG1wX2NhcHMgPSBnc3RfY2Fwc19jb3B5IChzcmNjYXBzKTsKLSAgICAgIEdzdFN0cnVjdHVyZSAqb2xkX3MsICp0bXBfczsKLQotICAgICAgb2xkX3MgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvbGRfY2FwcywgMCk7Ci0gICAgICB0bXBfcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHRtcF9jYXBzLCAwKTsKLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAob2xkX3MsICJjb2RlY19kYXRhIikpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICh0bXBfcywgImNvZGVjX2RhdGEiLAotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKG9sZF9zLCAiY29kZWNfZGF0YSIpKTsKLQotICAgICAgaWYgKCFnc3RfY2Fwc19pc19lcXVhbCAob2xkX2NhcHMsIHRtcF9jYXBzKSkKLSAgICAgICAgcmVzID0KLSAgICAgICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChydHBoMjY0ZGVwYXkpLAotICAgICAgICAgICAgc3JjY2Fwcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlcyA9IFRSVUU7Ci0KLSAgICAgIGdzdF9jYXBzX3VucmVmICh0bXBfY2Fwcyk7Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChvbGRfY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0KLSAgICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKHJ0cGgyNjRkZXBheSksCi0gICAgICAgIHNyY2NhcHMpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIC8qIEluc2VydCBTUFMgYW5kIFBQUyBpbnRvIHRoZSBzdHJlYW0gb24gbmV4dCBvcHBvcnR1bml0eSAqLwotICBpZiAocnRwaDI2NGRlcGF5LT5zcHMtPmxlbiA+IDAgfHwgcnRwaDI2NGRlcGF5LT5wcHMtPmxlbiA+IDApIHsKLSAgICBnaW50IGk7Ci0gICAgR3N0QnVmZmVyICpjb2RlY19kYXRhOwotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGd1aW50OCAqZGF0YTsKLSAgICBndWludCBsZW4gPSAwOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjRkZXBheS0+c3BzLT5sZW47IGkrKykgewotICAgICAgbGVuICs9IDQgKyBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NGRlcGF5LT5zcHMsIGkpKTsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcnRwaDI2NGRlcGF5LT5wcHMtPmxlbjsgaSsrKSB7Ci0gICAgICBsZW4gKz0gNCArIGdzdF9idWZmZXJfZ2V0X3NpemUgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY0ZGVwYXktPnBwcywgaSkpOwotICAgIH0KLQotICAgIGNvZGVjX2RhdGEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGxlbik7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGNvZGVjX2RhdGEsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIGRhdGEgPSBtYXAuZGF0YTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBydHBoMjY0ZGVwYXktPnNwcy0+bGVuOyBpKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqc3BzX2J1ZiA9IGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY0ZGVwYXktPnNwcywgaSk7Ci0gICAgICBndWludCBzcHNfc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKHNwc19idWYpOwotCi0gICAgICBpZiAocnRwaDI2NGRlcGF5LT5ieXRlX3N0cmVhbSkKLSAgICAgICAgbWVtY3B5IChkYXRhLCBzeW5jX2J5dGVzLCBzaXplb2YgKHN5bmNfYnl0ZXMpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoZGF0YSwgc3BzX3NpemUpOwotICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChzcHNfYnVmLCAwLCBkYXRhICsgNCwgLTEpOwotICAgICAgZGF0YSArPSA0ICsgc3BzX3NpemU7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjRkZXBheS0+cHBzLT5sZW47IGkrKykgewotICAgICAgR3N0QnVmZmVyICpwcHNfYnVmID0gZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjRkZXBheS0+cHBzLCBpKTsKLSAgICAgIGd1aW50IHBwc19zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocHBzX2J1Zik7Ci0KLSAgICAgIGlmIChydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtKQotICAgICAgICBtZW1jcHkgKGRhdGEsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICAgICAgZWxzZQotICAgICAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhLCBwcHNfc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKHBwc19idWYsIDAsIGRhdGEgKyA0LCAtMSk7Ci0gICAgICBkYXRhICs9IDQgKyBwcHNfc2l6ZTsKLSAgICB9Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChjb2RlY19kYXRhLCAmbWFwKTsKLSAgICBpZiAocnRwaDI2NGRlcGF5LT5jb2RlY19kYXRhKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocnRwaDI2NGRlcGF5LT5jb2RlY19kYXRhKTsKLSAgICBydHBoMjY0ZGVwYXktPmNvZGVjX2RhdGEgPSBjb2RlY19kYXRhOwotICB9Ci0KLSAgaWYgKHJlcykKLSAgICBydHBoMjY0ZGVwYXktPm5ld19jb2RlY19kYXRhID0gRkFMU0U7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2NF9hZGRfc3BzX3BwcyAoR3N0RWxlbWVudCAqIHJ0cGgyNjQsIEdQdHJBcnJheSAqIHNwc19hcnJheSwKLSAgICBHUHRyQXJyYXkgKiBwcHNfYXJyYXksIEdzdEJ1ZmZlciAqIG5hbCkKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1Y2hhciB0eXBlOwotICBndWludCBpOwotCi0gIGdzdF9idWZmZXJfbWFwIChuYWwsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgdHlwZSA9IG1hcC5kYXRhWzBdICYgMHgxZjsKLQotICBpZiAodHlwZSA9PSA3KSB7Ci0gICAgZ3VpbnQzMiBzcHNfaWQ7Ci0KLSAgICBpZiAoIXBhcnNlX3NwcyAoJm1hcCwgJnNwc19pZCkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwaDI2NCwgIkludmFsaWQgU1BTLCIKLSAgICAgICAgICAiIGNhbid0IHBhcnNlIHNlcV9wYXJhbWV0ZXJfc2V0X2lkIik7Ci0gICAgICBnb3RvIGRyb3A7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IHNwc19hcnJheS0+bGVuOyBpKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqc3BzID0gZ19wdHJfYXJyYXlfaW5kZXggKHNwc19hcnJheSwgaSk7Ci0gICAgICBHc3RNYXBJbmZvIHNwc21hcDsKLSAgICAgIGd1aW50MzIgdG1wX3Nwc19pZDsKLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHNwcywgJnNwc21hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIHBhcnNlX3NwcyAoJnNwc21hcCwgJnRtcF9zcHNfaWQpOwotCi0gICAgICBpZiAoc3BzX2lkID09IHRtcF9zcHNfaWQpIHsKLSAgICAgICAgaWYgKG1hcC5zaXplID09IHNwc21hcC5zaXplICYmCi0gICAgICAgICAgICBtZW1jbXAgKG1hcC5kYXRhLCBzcHNtYXAuZGF0YSwgc3BzbWFwLnNpemUpID09IDApIHsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NCwgIlVuY2hhbmdlZCBTUFMgJXUsIG5vdCB1cGRhdGluZyIsIHNwc19pZCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoc3BzLCAmc3BzbWFwKTsKLSAgICAgICAgICBnb3RvIGRyb3A7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoc3BzLCAmc3BzbWFwKTsKLSAgICAgICAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAoc3BzX2FycmF5LCBpKTsKLSAgICAgICAgICBnX3B0cl9hcnJheV9hZGQgKHNwc19hcnJheSwgbmFsKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NCwgIk1vZGlmaWVkIFNQUyAldSwgcmVwbGFjaW5nIiwgc3BzX2lkKTsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHNwcywgJnNwc21hcCk7Ci0gICAgfQotICAgIEdTVF9MT0dfT0JKRUNUIChydHBoMjY0LCAiQWRkaW5nIG5ldyBTUFMgJXUiLCBzcHNfaWQpOwotICAgIGdfcHRyX2FycmF5X2FkZCAoc3BzX2FycmF5LCBuYWwpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gOCkgewotICAgIGd1aW50MzIgc3BzX2lkOwotICAgIGd1aW50MzIgcHBzX2lkOwotCi0gICAgaWYgKCFwYXJzZV9wcHMgKCZtYXAsICZzcHNfaWQsICZwcHNfaWQpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cGgyNjQsICJJbnZhbGlkIFBQUywiCi0gICAgICAgICAgIiBjYW4ndCBwYXJzZSBzZXFfcGFyYW1ldGVyX3NldF9pZCBvciBwaWNfcGFyYW1ldGVyX3NldF9pZCIpOwotICAgICAgZ290byBkcm9wOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBwcHNfYXJyYXktPmxlbjsgaSsrKSB7Ci0gICAgICBHc3RCdWZmZXIgKnBwcyA9IGdfcHRyX2FycmF5X2luZGV4IChwcHNfYXJyYXksIGkpOwotICAgICAgR3N0TWFwSW5mbyBwcHNtYXA7Ci0gICAgICBndWludDMyIHRtcF9zcHNfaWQ7Ci0gICAgICBndWludDMyIHRtcF9wcHNfaWQ7Ci0KLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHBwcywgJnBwc21hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIHBhcnNlX3BwcyAoJnBwc21hcCwgJnRtcF9zcHNfaWQsICZ0bXBfcHBzX2lkKTsKLQotICAgICAgaWYgKHBwc19pZCA9PSB0bXBfcHBzX2lkKSB7Ci0gICAgICAgIGlmIChtYXAuc2l6ZSA9PSBwcHNtYXAuc2l6ZSAmJgotICAgICAgICAgICAgbWVtY21wIChtYXAuZGF0YSwgcHBzbWFwLmRhdGEsIHBwc21hcC5zaXplKSA9PSAwKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjQsICJVbmNoYW5nZWQgUFBTICV1OiV1LCBub3QgdXBkYXRpbmciLCBzcHNfaWQsCi0gICAgICAgICAgICAgIHBwc19pZCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAocHBzLCAmcHBzbWFwKTsKLSAgICAgICAgICBnb3RvIGRyb3A7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAocHBzLCAmcHBzbWFwKTsKLSAgICAgICAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAocHBzX2FycmF5LCBpKTsKLSAgICAgICAgICBnX3B0cl9hcnJheV9hZGQgKHBwc19hcnJheSwgbmFsKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NCwgIk1vZGlmaWVkIFBQUyAldToldSwgcmVwbGFjaW5nIiwKLSAgICAgICAgICAgICAgc3BzX2lkLCBwcHNfaWQpOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAocHBzLCAmcHBzbWFwKTsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjQsICJBZGRpbmcgbmV3IFBQUyAldTolaSIsIHNwc19pZCwgcHBzX2lkKTsKLSAgICBnX3B0cl9hcnJheV9hZGQgKHBwc19hcnJheSwgbmFsKTsKLSAgfSBlbHNlIHsKLSAgICBnb3RvIGRyb3A7Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLQotICByZXR1cm4gVFJVRTsKLQotZHJvcDoKLSAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAobmFsKTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2NF9kZXBheV9hZGRfc3BzX3BwcyAoR3N0UnRwSDI2NERlcGF5ICogcnRwaDI2NGRlcGF5LCBHc3RCdWZmZXIgKiBuYWwpCi17Ci0gIGlmIChnc3RfcnRwX2gyNjRfYWRkX3Nwc19wcHMgKEdTVF9FTEVNRU5UIChydHBoMjY0ZGVwYXkpLAotICAgICAgICAgIHJ0cGgyNjRkZXBheS0+c3BzLCBydHBoMjY0ZGVwYXktPnBwcywgbmFsKSkKLSAgICBydHBoMjY0ZGVwYXktPm5ld19jb2RlY19kYXRhID0gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjRfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgR3N0UnRwSDI2NERlcGF5ICpydHBoMjY0ZGVwYXk7Ci0gIGNvbnN0IGdjaGFyICpwczsKLSAgR3N0QnVmZmVyICpjb2RlY19kYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpwdHI7Ci0KLSAgcnRwaDI2NGRlcGF5ID0gR1NUX1JUUF9IMjY0X0RFUEFZIChkZXBheWxvYWQpOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGNsb2NrX3JhdGUgPSA5MDAwMDsKLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICAvKiBCYXNlNjQgZW5jb2RlZCwgY29tbWEgc2VwYXJhdGVkIGNvbmZpZyBOQUxzICovCi0gIHBzID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzcHJvcC1wYXJhbWV0ZXItc2V0cyIpOwotCi0gIC8qIG5lZ290aWF0ZSB3aXRoIGRvd25zdHJlYW0gdy5yLnQuIG91dHB1dCBmb3JtYXQgYW5kIGFsaWdubWVudCAqLwotICBnc3RfcnRwX2gyNjRfZGVwYXlfbmVnb3RpYXRlIChydHBoMjY0ZGVwYXkpOwotCi0gIGlmIChydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtICYmIHBzICE9IE5VTEwpIHsKLSAgICAvKiBmb3IgYnl0ZXN0cmVhbSB3ZSBvbmx5IG5lZWQgdGhlIHBhcmFtZXRlciBzZXRzIGJ1dCB3ZSBkb24ndCBlcnJvciBvdXQKLSAgICAgKiB3aGVuIHRoZXkgYXJlIG5vdCB0aGVyZSwgd2UgYXNzdW1lIHRoZXkgYXJlIGluIHRoZSBzdHJlYW0uICovCi0gICAgZ2NoYXIgKipwYXJhbXM7Ci0gICAgZ3VpbnQgbGVuLCB0b3RhbDsKLSAgICBnaW50IGk7Ci0KLSAgICBwYXJhbXMgPSBnX3N0cnNwbGl0IChwcywgIiwiLCAwKTsKLQotICAgIC8qIGNvdW50IHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBiYXNlNjQuIEFsc28gaW5jbHVkZSB0aGUgc3luYyBieXRlcyBpbgotICAgICAqIGZyb250IG9mIHRoZSBwYXJhbXMuICovCi0gICAgbGVuID0gMDsKLSAgICBmb3IgKGkgPSAwOyBwYXJhbXNbaV07IGkrKykgewotICAgICAgbGVuICs9IHN0cmxlbiAocGFyYW1zW2ldKTsKLSAgICAgIGxlbiArPSBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgIH0KLSAgICAvKiB3ZSBzZXJpb3VzbHkgb3ZlcnNob290IHRoZSBsZW5ndGgsIGJ1dCBpdCdzIGZpbmUuICovCi0gICAgY29kZWNfZGF0YSA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChjb2RlY19kYXRhLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBwdHIgPSBtYXAuZGF0YTsKLSAgICB0b3RhbCA9IDA7Ci0gICAgZm9yIChpID0gMDsgcGFyYW1zW2ldOyBpKyspIHsKLSAgICAgIGd1aW50IHNhdmUgPSAwOwotICAgICAgZ2ludCBzdGF0ZSA9IDA7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImRlY29kaW5nIHBhcmFtICVkICglcykiLCBpLCBwYXJhbXNbaV0pOwotICAgICAgbWVtY3B5IChwdHIsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICAgICAgcHRyICs9IHNpemVvZiAoc3luY19ieXRlcyk7Ci0gICAgICBsZW4gPQotICAgICAgICAgIGdfYmFzZTY0X2RlY29kZV9zdGVwIChwYXJhbXNbaV0sIHN0cmxlbiAocGFyYW1zW2ldKSwgcHRyLCAmc3RhdGUsCi0gICAgICAgICAgJnNhdmUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAiZGVjb2RlZCAlZCBieXRlcyIsIGxlbik7Ci0gICAgICB0b3RhbCArPSBsZW4gKyBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgICAgcHRyICs9IGxlbjsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoY29kZWNfZGF0YSwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGNvZGVjX2RhdGEsIDAsIHRvdGFsKTsKLSAgICBnX3N0cmZyZWV2IChwYXJhbXMpOwotCi0gICAgLyoga2VlcCB0aGUgY29kZWNfZGF0YSwgd2UgbmVlZCB0byBzZW5kIGl0IGFzIHRoZSBmaXJzdCBidWZmZXIuIFdlIGNhbm5vdAotICAgICAqIHB1c2ggaXQgaW4gdGhlIGFkYXB0ZXIgYmVjYXVzZSB0aGUgYWRhcHRlciBtaWdodCBiZSBmbHVzaGVkIG9uIGRpc2NvbnQuCi0gICAgICovCi0gICAgaWYgKHJ0cGgyNjRkZXBheS0+Y29kZWNfZGF0YSkKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHJ0cGgyNjRkZXBheS0+Y29kZWNfZGF0YSk7Ci0gICAgcnRwaDI2NGRlcGF5LT5jb2RlY19kYXRhID0gY29kZWNfZGF0YTsKLSAgfSBlbHNlIGlmICghcnRwaDI2NGRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgIGdjaGFyICoqcGFyYW1zOwotICAgIGdpbnQgaTsKLQotICAgIGlmIChwcyA9PSBOVUxMKQotICAgICAgZ290byBpbmNvbXBsZXRlX2NhcHM7Ci0KLSAgICBwYXJhbXMgPSBnX3N0cnNwbGl0IChwcywgIiwiLCAwKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgIndlIGhhdmUgJWQgcGFyYW1zIiwgZ19zdHJ2X2xlbmd0aCAocGFyYW1zKSk7Ci0KLSAgICAvKiBzdGFydCB3aXRoIDcgYnl0ZXMgaGVhZGVyICovCi0gICAgZm9yIChpID0gMDsgcGFyYW1zW2ldOyBpKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqbmFsOwotICAgICAgR3N0TWFwSW5mbyBuYWxtYXA7Ci0gICAgICBnc2l6ZSBuYWxfbGVuOwotICAgICAgZ3VpbnQgc2F2ZSA9IDA7Ci0gICAgICBnaW50IHN0YXRlID0gMDsKLQotICAgICAgbmFsX2xlbiA9IHN0cmxlbiAocGFyYW1zW2ldKTsKLSAgICAgIG5hbCA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobmFsX2xlbik7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAobmFsLCAmbmFsbWFwLCBHU1RfTUFQX1JFQURXUklURSk7Ci0KLSAgICAgIG5hbF9sZW4gPQotICAgICAgICAgIGdfYmFzZTY0X2RlY29kZV9zdGVwIChwYXJhbXNbaV0sIG5hbF9sZW4sIG5hbG1hcC5kYXRhLCAmc3RhdGUsICZzYXZlKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAiYWRkaW5nIHBhcmFtICVkIGFzICVzIiwgaSwKLSAgICAgICAgICAoKG5hbG1hcC5kYXRhWzBdICYgMHgxZikgPT0gNykgPyAiU1BTIiA6ICJQUFMiKTsKLQotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbmFsbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfc2V0X3NpemUgKG5hbCwgbmFsX2xlbik7Ci0KLSAgICAgIGdzdF9ydHBfaDI2NF9kZXBheV9hZGRfc3BzX3BwcyAocnRwaDI2NGRlcGF5LCBuYWwpOwotICAgIH0KLSAgICBnX3N0cmZyZWV2IChwYXJhbXMpOwotCi0gICAgaWYgKHJ0cGgyNjRkZXBheS0+c3BzLT5sZW4gPT0gMCB8fCBydHBoMjY0ZGVwYXktPnBwcy0+bGVuID09IDApCi0gICAgICBnb3RvIGluY29tcGxldGVfY2FwczsKLSAgfQotCi0gIHJldHVybiBnc3RfcnRwX2gyNjRfc2V0X3NyY19jYXBzIChydHBoMjY0ZGVwYXkpOwotCi0gIC8qIEVSUk9SUyAqLwotaW5jb21wbGV0ZV9jYXBzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAid2UgaGF2ZSBpbmNvbXBsZXRlIGNhcHMsIgotICAgICAgICAiIGRvaW5nIHNldGNhcHMgbGF0ZXIiKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfaDI2NF9jb21wbGV0ZV9hdSAoR3N0UnRwSDI2NERlcGF5ICogcnRwaDI2NGRlcGF5LAotICAgIEdzdENsb2NrVGltZSAqIG91dF90aW1lc3RhbXAsIGdib29sZWFuICogb3V0X2tleWZyYW1lKQotewotICBndWludCBvdXRzaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICAvKiB3ZSBoYWQgYSBwaWN0dXJlIGluIHRoZSBhZGFwdGVyIGFuZCB3ZSBjb21wbGV0ZWQgaXQgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAidGFraW5nIGNvbXBsZXRlZCBBVSIpOwotICBvdXRzaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBoMjY0ZGVwYXktPnBpY3R1cmVfYWRhcHRlcik7Ci0gIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBoMjY0ZGVwYXktPnBpY3R1cmVfYWRhcHRlciwgb3V0c2l6ZSk7Ci0KLSAgKm91dF90aW1lc3RhbXAgPSBydHBoMjY0ZGVwYXktPmxhc3RfdHM7Ci0gICpvdXRfa2V5ZnJhbWUgPSBydHBoMjY0ZGVwYXktPmxhc3Rfa2V5ZnJhbWU7Ci0KLSAgcnRwaDI2NGRlcGF5LT5sYXN0X2tleWZyYW1lID0gRkFMU0U7Ci0gIHJ0cGgyNjRkZXBheS0+cGljdHVyZV9zdGFydCA9IEZBTFNFOwotCi0gIHJldHVybiBvdXRidWY7Ci19Ci0KLS8qIFNQUy9QUFMvSURSIGNvbnNpZGVyZWQga2V5LCBhbGwgb3RoZXJzIERFTFRBOwotICogc28gZG93bnN0cmVhbSB3YWl0aW5nIGZvciBrZXlmcmFtZSBjYW4gcGljayB1cCBhdCBTUFMvUFBTL0lEUiAqLwotI2RlZmluZSBOQUxfVFlQRV9JU19LRVkobnQpICgoKG50KSA9PSA1KSB8fCAoKG50KSA9PSA3KSB8fCAoKG50KSA9PSA4KSkKLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2gyNjRfZGVwYXlfaGFuZGxlX25hbCAoR3N0UnRwSDI2NERlcGF5ICogcnRwaDI2NGRlcGF5LCBHc3RCdWZmZXIgKiBuYWwsCi0gICAgR3N0Q2xvY2tUaW1lIGluX3RpbWVzdGFtcCwgZ2Jvb2xlYW4gbWFya2VyKQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkICpkZXBheWxvYWQgPSBHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBoMjY0ZGVwYXkpOwotICBnaW50IG5hbF90eXBlOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgb3V0X3RpbWVzdGFtcDsKLSAgZ2Jvb2xlYW4ga2V5ZnJhbWUsIG91dF9rZXlmcmFtZTsKLQotICBnc3RfYnVmZmVyX21hcCAobmFsLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBpZiAoR19VTkxJS0VMWSAobWFwLnNpemUgPCA1KSkKLSAgICBnb3RvIHNob3J0X25hbDsKLQotICBuYWxfdHlwZSA9IG1hcC5kYXRhWzRdICYgMHgxZjsKLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAiaGFuZGxlIE5BTCB0eXBlICVkIiwgbmFsX3R5cGUpOwotCi0gIGtleWZyYW1lID0gTkFMX1RZUEVfSVNfS0VZIChuYWxfdHlwZSk7Ci0KLSAgb3V0X2tleWZyYW1lID0ga2V5ZnJhbWU7Ci0gIG91dF90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0KLSAgaWYgKCFydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtKSB7Ci0gICAgaWYgKG5hbF90eXBlID09IDcgfHwgbmFsX3R5cGUgPT0gOCkgewotICAgICAgZ3N0X3J0cF9oMjY0X2RlcGF5X2FkZF9zcHNfcHBzIChydHBoMjY0ZGVwYXksCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAobmFsLCBHU1RfQlVGRkVSX0NPUFlfQUxMLAotICAgICAgICAgICAgICA0LCBnc3RfYnVmZmVyX2dldF9zaXplIChuYWwpIC0gNCkpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG5hbCk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgaWYgKHJ0cGgyNjRkZXBheS0+c3BzLT5sZW4gPT0gMCB8fCBydHBoMjY0ZGVwYXktPnBwcy0+bGVuID09IDApIHsKLSAgICAgIC8qIERvd24gcHVzaCBkb3duIGFueSBidWZmZXIgaW4gbm9uLWJ5dGVzdHJlYW0gbW9kZSBpZiB0aGUgU1BTL1BQUyBoYXZlbid0Ci0gICAgICAgKiBnbyB0aHJvdWdoIHlldAotICAgICAgICovCi0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU0lOS1BBRCAoZGVwYXlsb2FkKSwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwKLSAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJHc3RGb3JjZUtleVVuaXQiLAotICAgICAgICAgICAgICAgICAgImFsbC1oZWFkZXJzIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpKSk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChuYWwsICZtYXApOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAobmFsKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmIChydHBoMjY0ZGVwYXktPm5ld19jb2RlY19kYXRhICYmCi0gICAgICAgIHJ0cGgyNjRkZXBheS0+c3BzLT5sZW4gPiAwICYmIHJ0cGgyNjRkZXBheS0+cHBzLT5sZW4gPiAwKQotICAgICAgZ3N0X3J0cF9oMjY0X3NldF9zcmNfY2FwcyAocnRwaDI2NGRlcGF5KTsKLSAgfQotCi0KLSAgaWYgKHJ0cGgyNjRkZXBheS0+bWVyZ2UpIHsKLSAgICBnYm9vbGVhbiBzdGFydCA9IEZBTFNFLCBjb21wbGV0ZSA9IEZBTFNFOwotCi0gICAgLyogbWFya2VyIGJpdCBpc24ndCBtYW5kYXRvcnkgc28gaW4gdGhlIGZvbGxvd2luZyBjb2RlIHdlIHRyeSB0byBndWVzcwotICAgICAqIGFuIEFVIGJvdW5kYXJ5IGJ5IGRldGVjdGluZyBhIG5ldyBwaWN0dXJlIHN0YXJ0ICovCi0gICAgaWYgKCFtYXJrZXIpIHsKLSAgICAgIC8qIGNvbnNpZGVyIGEgY29kZWQgc2xpY2VzIChJRFIgb3Igbm90KSB0byBzdGFydCBhIHBpY3R1cmUsCi0gICAgICAgKiAoc28gZW5kaW5nIHRoZSBwcmV2aW91cyBvbmUpIGlmIGZpcnN0X21iX2luX3NsaWNlID09IDAKLSAgICAgICAqIChub24tMCBpcyBwYXJ0IG9mIHByZXZpb3VzIG9uZSkgKi8KLSAgICAgIC8qIE5PVEUgdGhpcyBpcyBub3QgZW50aXJlbHkgYWNjb3JkaW5nIHRvIEFjY2VzcyBVbml0IHNwZWNzIGluIDcuNC4xLjIuNCwKLSAgICAgICAqIGJ1dCBpbiBwcmFjdGljZSBpdCB3b3JrcyBpbiBzYW5lIGNhc2VzLCBuZWVkcyBub3QgbXVjaCBwYXJzaW5nLAotICAgICAgICogYW5kIGFsc28gd29ya3Mgd2l0aCBicm9rZW4gZnJhbWVfbnVtIGluIE5BTCAod2hlcmUgc3BlYy13aXNlIHdvdWxkIGZhaWwpICovCi0gICAgICAvKiBGSVhNRTogdGhpcyBjb2RlIGlzbid0IGNvcnJlY3QgZm9yIGludGVybGFjZWQgY29udGVudCBhcyBBVXMgc2hvdWxkIGJlCi0gICAgICAgKiBjb25zdHJ1Y3RlZCB3aXRoIHBhaXJzIG9mIGZpZWxkcyBhbmQgdGhlIGd1ZXNzIGhlcmUgd2lsbCBqdXN0IHB1c2ggb3V0Ci0gICAgICAgKiBBVXMgd2l0aCBhIHNpbmdsZSBmaWVsZCBpbiBpdCAqLwotICAgICAgaWYgKG5hbF90eXBlID09IDEgfHwgbmFsX3R5cGUgPT0gMiB8fCBuYWxfdHlwZSA9PSA1KSB7Ci0gICAgICAgIC8qIHdlIGhhdmUgYSBwaWN0dXJlIHN0YXJ0ICovCi0gICAgICAgIHN0YXJ0ID0gVFJVRTsKLSAgICAgICAgaWYgKG1hcC5kYXRhWzVdICYgMHg4MCkgewotICAgICAgICAgIC8qIGZpcnN0X21iX2luX3NsaWNlID09IDAgY29tcGxldGVzIGEgcGljdHVyZSAqLwotICAgICAgICAgIGNvbXBsZXRlID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChuYWxfdHlwZSA+PSA2ICYmIG5hbF90eXBlIDw9IDkpIHsKLSAgICAgICAgLyogU0VJLCBTUFMsIFBQUywgQVUgdGVybWluYXRlIHBpY3R1cmUgKi8KLSAgICAgICAgY29tcGxldGUgPSBUUlVFOwotICAgICAgfQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAic3RhcnQgJWQsIGNvbXBsZXRlICVkIiwgc3RhcnQsIGNvbXBsZXRlKTsKLQotICAgICAgaWYgKGNvbXBsZXRlICYmIHJ0cGgyNjRkZXBheS0+cGljdHVyZV9zdGFydCkKLSAgICAgICAgb3V0YnVmID0gZ3N0X3J0cF9oMjY0X2NvbXBsZXRlX2F1IChydHBoMjY0ZGVwYXksICZvdXRfdGltZXN0YW1wLAotICAgICAgICAgICAgJm91dF9rZXlmcmFtZSk7Ci0gICAgfQotICAgIC8qIGFkZCB0byBhZGFwdGVyICovCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImFkZGluZyBOQUwgdG8gcGljdHVyZSBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwaDI2NGRlcGF5LT5waWN0dXJlX2FkYXB0ZXIsIG5hbCk7Ci0gICAgcnRwaDI2NGRlcGF5LT5sYXN0X3RzID0gaW5fdGltZXN0YW1wOwotICAgIHJ0cGgyNjRkZXBheS0+bGFzdF9rZXlmcmFtZSB8PSBrZXlmcmFtZTsKLSAgICBydHBoMjY0ZGVwYXktPnBpY3R1cmVfc3RhcnQgfD0gc3RhcnQ7Ci0KLSAgICBpZiAobWFya2VyKQotICAgICAgb3V0YnVmID0gZ3N0X3J0cF9oMjY0X2NvbXBsZXRlX2F1IChydHBoMjY0ZGVwYXksICZvdXRfdGltZXN0YW1wLAotICAgICAgICAgICZvdXRfa2V5ZnJhbWUpOwotICB9IGVsc2UgewotICAgIC8qIG5vIG1lcmdlLCBvdXRwdXQgaXMgaW5wdXQgbmFsICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAidXNpbmcgTkFMIGFzIG91dHB1dCIpOwotICAgIG91dGJ1ZiA9IG5hbDsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChuYWwsICZtYXApOwotICB9Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIC8qIHByZXBlbmQgY29kZWNfZGF0YSAqLwotICAgIGlmIChydHBoMjY0ZGVwYXktPmNvZGVjX2RhdGEpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgInByZXBlbmRpbmcgY29kZWNfZGF0YSIpOwotICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjRkZXBheSksCi0gICAgICAgICAgcnRwaDI2NGRlcGF5LT5jb2RlY19kYXRhLCBvdXRidWYsCi0gICAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChydHBoMjY0ZGVwYXktPmNvZGVjX2RhdGEsIG91dGJ1Zik7Ci0gICAgICBydHBoMjY0ZGVwYXktPmNvZGVjX2RhdGEgPSBOVUxMOwotICAgICAgb3V0X2tleWZyYW1lID0gVFJVRTsKLSAgICB9Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotCi0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjRkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLQotICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gb3V0X3RpbWVzdGFtcDsKLQotICAgIGlmIChvdXRfa2V5ZnJhbWUpCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgIGVsc2UKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLXNob3J0X25hbDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAiZHJvcHBpbmcgc2hvcnQgTkFMIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChuYWwpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9oMjY0X3B1c2hfZnJhZ21lbnRhdGlvbl91bml0IChHc3RSdHBIMjY0RGVwYXkgKiBydHBoMjY0ZGVwYXksCi0gICAgZ2Jvb2xlYW4gc2VuZCkKLXsKLSAgZ3VpbnQgb3V0c2l6ZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotCi0gIG91dHNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGgyNjRkZXBheS0+YWRhcHRlcik7Ci0gIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBoMjY0ZGVwYXktPmFkYXB0ZXIsIG91dHNpemUpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJvdXRwdXQgJWQgYnl0ZXMiLCBvdXRzaXplKTsKLQotICBpZiAocnRwaDI2NGRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgIG1lbWNweSAobWFwLmRhdGEsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICB9IGVsc2UgewotICAgIG91dHNpemUgLT0gNDsKLSAgICBtYXAuZGF0YVswXSA9IChvdXRzaXplID4+IDI0KTsKLSAgICBtYXAuZGF0YVsxXSA9IChvdXRzaXplID4+IDE2KTsKLSAgICBtYXAuZGF0YVsyXSA9IChvdXRzaXplID4+IDgpOwotICAgIG1hcC5kYXRhWzNdID0gKG91dHNpemUpOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0KLSAgcnRwaDI2NGRlcGF5LT5jdXJyZW50X2Z1X3R5cGUgPSAwOwotCi0gIG91dGJ1ZiA9IGdzdF9ydHBfaDI2NF9kZXBheV9oYW5kbGVfbmFsIChydHBoMjY0ZGVwYXksIG91dGJ1ZiwKLSAgICAgIHJ0cGgyNjRkZXBheS0+ZnVfdGltZXN0YW1wLCBydHBoMjY0ZGVwYXktPmZ1X21hcmtlcik7Ci0KLSAgaWYgKHNlbmQgJiYgb3V0YnVmKSB7Ci0gICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBoMjY0ZGVwYXkpLCBvdXRidWYpOwotICAgIG91dGJ1ZiA9IE5VTEw7Ci0gIH0KLSAgcmV0dXJuIG91dGJ1ZjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2gyNjRfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBIMjY0RGVwYXkgKnJ0cGgyNjRkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBndWludDggbmFsX3VuaXRfdHlwZTsKLQotICBydHBoMjY0ZGVwYXkgPSBHU1RfUlRQX0gyNjRfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgLyogZmx1c2ggcmVtYWluaW5nIGRhdGEgb24gZGlzY29udCAqLwotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpIHsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2NGRlcGF5LT5hZGFwdGVyKTsKLSAgICBydHBoMjY0ZGVwYXktPndhaXRfc3RhcnQgPSBUUlVFOwotICAgIHJ0cGgyNjRkZXBheS0+Y3VycmVudF9mdV90eXBlID0gMDsKLSAgfQotCi0gIHsKLSAgICBnaW50IHBheWxvYWRfbGVuOwotICAgIGd1aW50OCAqcGF5bG9hZDsKLSAgICBndWludCBoZWFkZXJfbGVuOwotICAgIGd1aW50OCBuYWxfcmVmX2lkYzsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBndWludCBvdXRzaXplLCBuYWx1X3NpemU7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgICBnYm9vbGVhbiBtYXJrZXI7Ci0KLSAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAocnRwLT5idWZmZXIpOwotCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0gICAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICAgIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJyZWNlaXZpbmcgJWQgYnl0ZXMiLCBwYXlsb2FkX2xlbik7Ci0KLSAgICBpZiAocGF5bG9hZF9sZW4gPT0gMCkKLSAgICAgIGdvdG8gZW1wdHlfcGFja2V0OwotCi0gICAgLyogKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgKiB8MHwxfDJ8M3w0fDV8Nnw3fAotICAgICAqICstKy0rLSstKy0rLSstKy0rCi0gICAgICogfEZ8TlJJfCAgVHlwZSAgIHwKLSAgICAgKiArLS0tLS0tLS0tLS0tLS0tKwotICAgICAqCi0gICAgICogRiBtdXN0IGJlIDAuCi0gICAgICovCi0gICAgbmFsX3JlZl9pZGMgPSAocGF5bG9hZFswXSAmIDB4NjApID4+IDU7Ci0gICAgbmFsX3VuaXRfdHlwZSA9IHBheWxvYWRbMF0gJiAweDFmOwotCi0gICAgLyogYXQgbGVhc3Qgb25lIGJ5dGUgaGVhZGVyIHdpdGggdHlwZSAqLwotICAgIGhlYWRlcl9sZW4gPSAxOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAiTlJJICVkLCBUeXBlICVkIiwgbmFsX3JlZl9pZGMsCi0gICAgICAgIG5hbF91bml0X3R5cGUpOwotCi0gICAgLyogSWYgRlUgdW5pdCB3YXMgYmVpbmcgcHJvY2Vzc2VkLCBidXQgdGhlIGN1cnJlbnQgbmFsIGlzIG9mIGEgZGlmZmVyZW50Ci0gICAgICogdHlwZS4gIEFzc3VtZSB0aGF0IHRoZSByZW1vdGUgcGF5bG9hZGVyIGlzIGJ1Z2d5IChkaWRuJ3Qgc2V0IHRoZSBlbmQgYml0Ci0gICAgICogd2hlbiB0aGUgRlUgZW5kZWQpIGFuZCBzZW5kIG91dCB3aGF0IHdlIGdhdGhlcmVkIHRodXNmYXIgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAocnRwaDI2NGRlcGF5LT5jdXJyZW50X2Z1X3R5cGUgIT0gMCAmJgotICAgICAgICAgICAgbmFsX3VuaXRfdHlwZSAhPSBydHBoMjY0ZGVwYXktPmN1cnJlbnRfZnVfdHlwZSkpCi0gICAgICBnc3RfcnRwX2gyNjRfcHVzaF9mcmFnbWVudGF0aW9uX3VuaXQgKHJ0cGgyNjRkZXBheSwgVFJVRSk7Ci0KLSAgICBzd2l0Y2ggKG5hbF91bml0X3R5cGUpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgIGNhc2UgMzA6Ci0gICAgICBjYXNlIDMxOgotICAgICAgICAvKiB1bmRlZmluZWQgKi8KLSAgICAgICAgZ290byB1bmRlZmluZWRfdHlwZTsKLSAgICAgIGNhc2UgMjU6Ci0gICAgICAgIC8qIFNUQVAtQiAgICBTaW5nbGUtdGltZSBhZ2dyZWdhdGlvbiBwYWNrZXQgICAgIDUuNy4xICovCi0gICAgICAgIC8qIDIgYnl0ZSBleHRyYSBoZWFkZXIgZm9yIERPTiAqLwotICAgICAgICBoZWFkZXJfbGVuICs9IDI7Ci0gICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICBjYXNlIDI0OgotICAgICAgewotICAgICAgICAvKiBzdHJpcCBoZWFkZXJzICovCi0gICAgICAgIHBheWxvYWQgKz0gaGVhZGVyX2xlbjsKLSAgICAgICAgcGF5bG9hZF9sZW4gLT0gaGVhZGVyX2xlbjsKLQotICAgICAgICBydHBoMjY0ZGVwYXktPndhaXRfc3RhcnQgPSBGQUxTRTsKLQotCi0gICAgICAgIC8qIFNUQVAtQSAgICBTaW5nbGUtdGltZSBhZ2dyZWdhdGlvbiBwYWNrZXQgICAgIDUuNy4xICovCi0gICAgICAgIHdoaWxlIChwYXlsb2FkX2xlbiA+IDIpIHsKLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAxCi0gICAgICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUKLSAgICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgKiB8ICAgICAgICAgTkFMVSBTaXplICAgICAgICAgICAgIHwKLSAgICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBuYWx1X3NpemUgPSAocGF5bG9hZFswXSA8PCA4KSB8IHBheWxvYWRbMV07Ci0KLSAgICAgICAgICAvKiBkb250IGluY2x1ZGUgbmFsdV9zaXplICovCi0gICAgICAgICAgaWYgKG5hbHVfc2l6ZSA+IChwYXlsb2FkX2xlbiAtIDIpKQotICAgICAgICAgICAgbmFsdV9zaXplID0gcGF5bG9hZF9sZW4gLSAyOwotCi0gICAgICAgICAgb3V0c2l6ZSA9IG5hbHVfc2l6ZSArIHNpemVvZiAoc3luY19ieXRlcyk7Ci0gICAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChvdXRzaXplKTsKLQotICAgICAgICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgICAgICAgIGlmIChydHBoMjY0ZGVwYXktPmJ5dGVfc3RyZWFtKSB7Ci0gICAgICAgICAgICBtZW1jcHkgKG1hcC5kYXRhLCBzeW5jX2J5dGVzLCBzaXplb2YgKHN5bmNfYnl0ZXMpKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWFwLmRhdGFbMF0gPSBtYXAuZGF0YVsxXSA9IDA7Ci0gICAgICAgICAgICBtYXAuZGF0YVsyXSA9IHBheWxvYWRbMF07Ci0gICAgICAgICAgICBtYXAuZGF0YVszXSA9IHBheWxvYWRbMV07Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogc3RyaXAgTkFMVSBzaXplICovCi0gICAgICAgICAgcGF5bG9hZCArPSAyOwotICAgICAgICAgIHBheWxvYWRfbGVuIC09IDI7Ci0KLSAgICAgICAgICBtZW1jcHkgKG1hcC5kYXRhICsgc2l6ZW9mIChzeW5jX2J5dGVzKSwgcGF5bG9hZCwgbmFsdV9zaXplKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gICAgICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjRkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgICAgICAgcnRwLT5idWZmZXIsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0KLSAgICAgICAgICBvdXRidWYgPQotICAgICAgICAgICAgICBnc3RfcnRwX2gyNjRfZGVwYXlfaGFuZGxlX25hbCAocnRwaDI2NGRlcGF5LCBvdXRidWYsIHRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgbWFya2VyKTsKLSAgICAgICAgICBpZiAob3V0YnVmKQotICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwaDI2NGRlcGF5LT5hZGFwdGVyLCBvdXRidWYpOwotCi0gICAgICAgICAgcGF5bG9hZCArPSBuYWx1X3NpemU7Ci0gICAgICAgICAgcGF5bG9hZF9sZW4gLT0gbmFsdV9zaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0c2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwaDI2NGRlcGF5LT5hZGFwdGVyKTsKLSAgICAgICAgaWYgKG91dHNpemUgPiAwKQotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBoMjY0ZGVwYXktPmFkYXB0ZXIsIG91dHNpemUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgMjY6Ci0gICAgICAgIC8qIE1UQVAxNiAgICBNdWx0aS10aW1lIGFnZ3JlZ2F0aW9uIHBhY2tldCAgICAgIDUuNy4yICovCi0gICAgICAgIC8vIGhlYWRlcl9sZW4gPSA1OwotICAgICAgICAvKiBmYWxsdGhyb3VnaCwgbm90IGltcGxlbWVudGVkICovCi0gICAgICBjYXNlIDI3OgotICAgICAgICAvKiBNVEFQMjQgICAgTXVsdGktdGltZSBhZ2dyZWdhdGlvbiBwYWNrZXQgICAgICA1LjcuMiAqLwotICAgICAgICAvLyBoZWFkZXJfbGVuID0gNjsKLSAgICAgICAgZ290byBub3RfaW1wbGVtZW50ZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAyODoKLSAgICAgIGNhc2UgMjk6Ci0gICAgICB7Ci0gICAgICAgIC8qIEZVLUEgICAgICBGcmFnbWVudGF0aW9uIHVuaXQgICAgICAgICAgICAgICAgIDUuOCAqLwotICAgICAgICAvKiBGVS1CICAgICAgRnJhZ21lbnRhdGlvbiB1bml0ICAgICAgICAgICAgICAgICA1LjggKi8KLSAgICAgICAgZ2Jvb2xlYW4gUywgRTsKLQotICAgICAgICAvKiArLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgKiB8MHwxfDJ8M3w0fDV8Nnw3fAotICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKwotICAgICAgICAgKiB8U3xFfFJ8ICBUeXBlICAgfAotICAgICAgICAgKiArLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgKgotICAgICAgICAgKiBSIGlzIHJlc2VydmVkIGFuZCBhbHdheXMgMAotICAgICAgICAgKi8KLSAgICAgICAgUyA9IChwYXlsb2FkWzFdICYgMHg4MCkgPT0gMHg4MDsKLSAgICAgICAgRSA9IChwYXlsb2FkWzFdICYgMHg0MCkgPT0gMHg0MDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJTICVkLCBFICVkIiwgUywgRSk7Ci0KLSAgICAgICAgaWYgKHJ0cGgyNjRkZXBheS0+d2FpdF9zdGFydCAmJiAhUykKLSAgICAgICAgICBnb3RvIHdhaXRpbmdfc3RhcnQ7Ci0KLSAgICAgICAgaWYgKFMpIHsKLSAgICAgICAgICAvKiBOQUwgdW5pdCBzdGFydHMgaGVyZSAqLwotICAgICAgICAgIGd1aW50OCBuYWxfaGVhZGVyOwotCi0gICAgICAgICAgLyogSWYgYSBuZXcgRlUgdW5pdCBzdGFydGVkLCB3aGlsZSBzdGlsbCBwcm9jZXNzaW5nIGFuIG9sZGVyIG9uZS4KLSAgICAgICAgICAgKiBBc3N1bWUgdGhhdCB0aGUgcmVtb3RlIHBheWxvYWRlciBpcyBidWdneSAoZG9lc24ndCBzZXQgdGhlIGVuZAotICAgICAgICAgICAqIGJpdCkgYW5kIHNlbmQgb3V0IHdoYXQgd2UndmUgZ2F0aGVyZWQgdGh1c2ZhciAqLwotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChydHBoMjY0ZGVwYXktPmN1cnJlbnRfZnVfdHlwZSAhPSAwKSkKLSAgICAgICAgICAgIGdzdF9ydHBfaDI2NF9wdXNoX2ZyYWdtZW50YXRpb25fdW5pdCAocnRwaDI2NGRlcGF5LCBUUlVFKTsKLQotICAgICAgICAgIHJ0cGgyNjRkZXBheS0+Y3VycmVudF9mdV90eXBlID0gbmFsX3VuaXRfdHlwZTsKLSAgICAgICAgICBydHBoMjY0ZGVwYXktPmZ1X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQotICAgICAgICAgIHJ0cGgyNjRkZXBheS0+d2FpdF9zdGFydCA9IEZBTFNFOwotCi0gICAgICAgICAgLyogcmVjb25zdHJ1Y3QgTkFMIGhlYWRlciAqLwotICAgICAgICAgIG5hbF9oZWFkZXIgPSAocGF5bG9hZFswXSAmIDB4ZTApIHwgKHBheWxvYWRbMV0gJiAweDFmKTsKLQotICAgICAgICAgIC8qIHN0cmlwIHR5cGUgaGVhZGVyLCBrZWVwIEZVIGhlYWRlciwgd2UnbGwgcmV1c2UgaXQgdG8gcmVjb25zdHJ1Y3QKLSAgICAgICAgICAgKiB0aGUgTkFMIGhlYWRlci4gKi8KLSAgICAgICAgICBwYXlsb2FkICs9IDE7Ci0gICAgICAgICAgcGF5bG9hZF9sZW4gLT0gMTsKLQotICAgICAgICAgIG5hbHVfc2l6ZSA9IHBheWxvYWRfbGVuOwotICAgICAgICAgIG91dHNpemUgPSBuYWx1X3NpemUgKyBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAob3V0c2l6ZSk7Ci0KLSAgICAgICAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICAgICAgICBtZW1jcHkgKG1hcC5kYXRhICsgc2l6ZW9mIChzeW5jX2J5dGVzKSwgcGF5bG9hZCwgbmFsdV9zaXplKTsKLSAgICAgICAgICBtYXAuZGF0YVtzaXplb2YgKHN5bmNfYnl0ZXMpXSA9IG5hbF9oZWFkZXI7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLQotICAgICAgICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBoMjY0ZGVwYXkpLCBvdXRidWYsCi0gICAgICAgICAgICAgIHJ0cC0+YnVmZmVyLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAicXVldWVpbmcgJWQgYnl0ZXMiLCBvdXRzaXplKTsKLQotICAgICAgICAgIC8qIGFuZCBhc3NlbWJsZSBpbiB0aGUgYWRhcHRlciAqLwotICAgICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGgyNjRkZXBheS0+YWRhcHRlciwgb3V0YnVmKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBzdHJpcCBvZmYgRlUgaW5kaWNhdG9yIGFuZCBGVSBoZWFkZXIgYnl0ZXMgKi8KLSAgICAgICAgICBwYXlsb2FkICs9IDI7Ci0gICAgICAgICAgcGF5bG9hZF9sZW4gLT0gMjsKLQotICAgICAgICAgIG91dHNpemUgPSBwYXlsb2FkX2xlbjsKLSAgICAgICAgICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG91dHNpemUpOwotICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAob3V0YnVmLCAwLCBwYXlsb2FkLCBvdXRzaXplKTsKLQotICAgICAgICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBoMjY0ZGVwYXkpLCBvdXRidWYsCi0gICAgICAgICAgICAgIHJ0cC0+YnVmZmVyLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAicXVldWVpbmcgJWQgYnl0ZXMiLCBvdXRzaXplKTsKLQotICAgICAgICAgIC8qIGFuZCBhc3NlbWJsZSBpbiB0aGUgYWRhcHRlciAqLwotICAgICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGgyNjRkZXBheS0+YWRhcHRlciwgb3V0YnVmKTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dGJ1ZiA9IE5VTEw7Ci0gICAgICAgIHJ0cGgyNjRkZXBheS0+ZnVfbWFya2VyID0gbWFya2VyOwotCi0gICAgICAgIC8qIGlmIE5BTCB1bml0IGVuZHMsIGZsdXNoIHRoZSBhZGFwdGVyICovCi0gICAgICAgIGlmIChFKQotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9ydHBfaDI2NF9wdXNoX2ZyYWdtZW50YXRpb25fdW5pdCAocnRwaDI2NGRlcGF5LCBGQUxTRSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgcnRwaDI2NGRlcGF5LT53YWl0X3N0YXJ0ID0gRkFMU0U7Ci0KLSAgICAgICAgLyogMS0yMyAgIE5BTCB1bml0ICBTaW5nbGUgTkFMIHVuaXQgcGFja2V0IHBlciBILjI2NCAgIDUuNiAqLwotICAgICAgICAvKiB0aGUgZW50aXJlIHBheWxvYWQgaXMgdGhlIG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgbmFsdV9zaXplID0gcGF5bG9hZF9sZW47Ci0gICAgICAgIG91dHNpemUgPSBuYWx1X3NpemUgKyBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgICAgICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG91dHNpemUpOwotCi0gICAgICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgICAgICBpZiAocnRwaDI2NGRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgICAgICAgIG1lbWNweSAobWFwLmRhdGEsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG1hcC5kYXRhWzBdID0gbWFwLmRhdGFbMV0gPSAwOwotICAgICAgICAgIG1hcC5kYXRhWzJdID0gbmFsdV9zaXplID4+IDg7Ci0gICAgICAgICAgbWFwLmRhdGFbM10gPSBuYWx1X3NpemUgJiAweGZmOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSAobWFwLmRhdGEgKyBzaXplb2YgKHN5bmNfYnl0ZXMpLCBwYXlsb2FkLCBuYWx1X3NpemUpOwotICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gICAgICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBoMjY0ZGVwYXkpLCBvdXRidWYsCi0gICAgICAgICAgICBydHAtPmJ1ZmZlciwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLQotICAgICAgICBvdXRidWYgPSBnc3RfcnRwX2gyNjRfZGVwYXlfaGFuZGxlX25hbCAocnRwaDI2NGRlcGF5LCBvdXRidWYsIHRpbWVzdGFtcCwKLSAgICAgICAgICAgIG1hcmtlcik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBvdXRidWY7Ci0KLSAgLyogRVJST1JTICovCi1lbXB0eV9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0ZGVwYXksICJlbXB0eSBwYWNrZXQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotdW5kZWZpbmVkX3R5cGU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBoMjY0ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiVW5kZWZpbmVkIHBhY2tldCB0eXBlIikpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci13YWl0aW5nX3N0YXJ0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NGRlcGF5LCAid2FpdGluZyBmb3Igc3RhcnQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbm90X2ltcGxlbWVudGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHJ0cGgyNjRkZXBheSwgU1RSRUFNLCBGT1JNQVQsCi0gICAgICAgIChOVUxMKSwgKCJOQUwgdW5pdCB0eXBlICVkIG5vdCBzdXBwb3J0ZWQgeWV0IiwgbmFsX3VuaXRfdHlwZSkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9oMjY0X2RlcGF5X2hhbmRsZV9ldmVudCAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBIMjY0RGVwYXkgKnJ0cGgyNjRkZXBheTsKLQotICBydHBoMjY0ZGVwYXkgPSBHU1RfUlRQX0gyNjRfREVQQVkgKGRlcGF5KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgZ3N0X3J0cF9oMjY0X2RlcGF5X3Jlc2V0IChydHBoMjY0ZGVwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuCi0gICAgICBHU1RfUlRQX0JBU0VfREVQQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5oYW5kbGVfZXZlbnQgKGRlcGF5LCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9oMjY0X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwSDI2NERlcGF5ICpydHBoMjY0ZGVwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBydHBoMjY0ZGVwYXkgPSBHU1RfUlRQX0gyNjRfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9ydHBfaDI2NF9kZXBheV9yZXNldCAocnRwaDI2NGRlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2gyNjRfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGgyNjRkZXBheV9kZWJ1ZywgInJ0cGgyNjRkZXBheSIsIDAsCi0gICAgICAiSDI2NCBWaWRlbyBSVFAgRGVwYXlsb2FkZXIiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGgyNjRkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9IMjY0X0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGgyNjRkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODk1MjM2Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2NGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSDI2NF9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0gyNjRfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0gyNjRfREVQQVkgXAotICAoZ3N0X3J0cF9oMjY0X2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2NF9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9IMjY0X0RFUEFZLEdzdFJ0cEgyNjREZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2NF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2NF9ERVBBWSxHc3RSdHBIMjY0RGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2NF9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9IMjY0X0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjY0X0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9IMjY0X0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjREZXBheSBHc3RSdHBIMjY0RGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2NERlcGF5Q2xhc3MgR3N0UnRwSDI2NERlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwSDI2NERlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIGdib29sZWFuICAgIGJ5dGVfc3RyZWFtOwotCi0gIEdzdEJ1ZmZlciAgKmNvZGVjX2RhdGE7Ci0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGdib29sZWFuICAgIHdhaXRfc3RhcnQ7Ci0KLSAgLyogbmFsIG1lcmdpbmcgKi8KLSAgZ2Jvb2xlYW4gICAgbWVyZ2U7Ci0gIEdzdEFkYXB0ZXIgKnBpY3R1cmVfYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gICAgcGljdHVyZV9zdGFydDsKLSAgR3N0Q2xvY2tUaW1lIGxhc3RfdHM7Ci0gIGdib29sZWFuICAgIGxhc3Rfa2V5ZnJhbWU7Ci0KLSAgLyogV29yayBhcm91bmQgYnJva2VuIHBheWxvYWRlcnMgd3J0LiBGVS1BICYgRlUtQiAqLwotICBndWludDggY3VycmVudF9mdV90eXBlOwotICBHc3RDbG9ja1RpbWUgZnVfdGltZXN0YW1wOwotICBnYm9vbGVhbiBmdV9tYXJrZXI7Ci0KLSAgLyogbWlzYyAqLwotICBHUHRyQXJyYXkgKnNwczsKLSAgR1B0ckFycmF5ICpwcHM7Ci0gIGdib29sZWFuIG5ld19jb2RlY19kYXRhOwotfTsKLQotc3RydWN0IF9Hc3RSdHBIMjY0RGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9oMjY0X2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9oMjY0X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1nYm9vbGVhbiBnc3RfcnRwX2gyNjRfYWRkX3Nwc19wcHMgKEdzdEVsZW1lbnQgKiBydHBoMjY0LCBHUHRyQXJyYXkgKiBzcHMsCi0gICAgR1B0ckFycmF5ICogcHBzLCBHc3RCdWZmZXIgKiBuYWwpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0gyNjRfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjRwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2NHBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDhlYjFkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2NHBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyMiArMCwwIEBACi0vKiBleDogc2V0IHRhYnN0b3A9MiBzaGlmdHdpZHRoPTIgZXhwYW5kdGFiOiAqLwotLyogR1N0cmVhbWVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0vKiBJbmNsdWRlZCB0byBub3QgZHVwbGljYXRlIGdzdF9ydHBfaDI2NF9hZGRfc3BzX3BwcyAoKSAqLwotI2luY2x1ZGUgImdzdHJ0cGgyNjRkZXBheS5oIgotCi0jaW5jbHVkZSAiZ3N0cnRwaDI2NHBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLQotI2RlZmluZSBJRFJfVFlQRV9JRCAgNQotI2RlZmluZSBTUFNfVFlQRV9JRCAgNwotI2RlZmluZSBQUFNfVFlQRV9JRCAgOAotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBoMjY0cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBoMjY0cGF5X2RlYnVnKQotCi0vKiByZWZlcmVuY2VzOgotICoKLSAqIFJGQyAzOTg0Ci0gKi8KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2NF9wYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1oMjY0LCAiCi0gICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgYXZjLCBhbGlnbm1lbnQgPSAoc3RyaW5nKSBhdTsiCi0gICAgICAgICJ2aWRlby94LWgyNjQsICIKLSAgICAgICAgInN0cmVhbS1mb3JtYXQgPSAoc3RyaW5nKSBieXRlLXN0cmVhbSwgYWxpZ25tZW50ID0gKHN0cmluZykgeyBuYWwsIGF1IH0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjRfcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJIMjY0XCIiKQotICAgICk7Ci0KLSNkZWZpbmUgREVGQVVMVF9TUFJPUF9QQVJBTUVURVJfU0VUUyAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfQ09ORklHX0lOVEVSVkFMCQkgICAgICAwCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NQUk9QX1BBUkFNRVRFUl9TRVRTLAotICBQUk9QX0NPTkZJR19JTlRFUlZBTAotfTsKLQotI2RlZmluZSBJU19BQ0NFU1NfVU5JVCh4KSAoKCh4KSA+IDB4MDApICYmICgoeCkgPCAweDA2KSkKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjY0X3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfaDI2NF9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjY0X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfcnRwX2gyNjRfcGF5X2dldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaDI2NF9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2gyNjRfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9oMjY0X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9oMjY0X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0jZGVmaW5lIGdzdF9ydHBfaDI2NF9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSDI2NFBheSwgZ3N0X3J0cF9oMjY0X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEgyNjRQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfaDI2NF9wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2gyNjRfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9TUFJPUF9QQVJBTUVURVJfU0VUUywgZ19wYXJhbV9zcGVjX3N0cmluZyAoInNwcm9wLXBhcmFtZXRlci1zZXRzIiwKLSAgICAgICAgICAic3Byb3AtcGFyYW1ldGVyLXNldHMiLAotICAgICAgICAgICJUaGUgYmFzZTY0IHNwcm9wLXBhcmFtZXRlci1zZXRzIHRvIHNldCBpbiBvdXQgY2FwcyAoc2V0IHRvIE5VTEwgdG8gIgotICAgICAgICAgICJleHRyYWN0IGZyb20gc3RyZWFtKSIsCi0gICAgICAgICAgREVGQVVMVF9TUFJPUF9QQVJBTUVURVJfU0VUUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX0RFUFJFQ0FURUQpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9DT05GSUdfSU5URVJWQUwsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY29uZmlnLWludGVydmFsIiwKLSAgICAgICAgICAiU1BTIFBQUyBTZW5kIEludGVydmFsIiwKLSAgICAgICAgICAiU2VuZCBTUFMgYW5kIFBQUyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoc3Byb3AgcGFyYW1ldGVyIHNldHMgIgotICAgICAgICAgICJ3aWxsIGJlIG11bHRpcGxleGVkIGluIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRldGVjdGVkLikgIgotICAgICAgICAgICIoMCA9IGRpc2FibGVkLCAtMSA9IHNlbmQgd2l0aCBldmVyeSBJRFIgZnJhbWUpIiwKLSAgICAgICAgICAtMSwgMzYwMCwgREVGQVVMVF9DT05GSUdfSU5URVJWQUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfaDI2NF9wYXlfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9oMjY0X3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjRfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJSVFAgSDI2NCBwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZC1lbmNvZGUgSDI2NCB2aWRlbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMzk4NCkiLAotICAgICAgIkxhdXJlbnQgR2xheWFsIDxzcGdsZWdsZUB5YWhvby5mcj4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaDI2NF9wYXlfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+Z2V0X2NhcHMgPSBnc3RfcnRwX2gyNjRfcGF5X2dldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfaDI2NF9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2gyNjRfcGF5X2hhbmRsZV9idWZmZXI7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zaW5rX2V2ZW50ID0gZ3N0X3J0cF9oMjY0X3BheV9zaW5rX2V2ZW50OwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjY0cGF5X2RlYnVnLCAicnRwaDI2NHBheSIsIDAsCi0gICAgICAiSDI2NCBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfcGF5X2luaXQgKEdzdFJ0cEgyNjRQYXkgKiBydHBoMjY0cGF5KQotewotICBydHBoMjY0cGF5LT5xdWV1ZSA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoZ3VpbnQpKTsKLSAgcnRwaDI2NHBheS0+cHJvZmlsZSA9IDA7Ci0gIHJ0cGgyNjRwYXktPnNwcyA9IGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBydHBoMjY0cGF5LT5wcHMgPSBnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMgKAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgcnRwaDI2NHBheS0+bGFzdF9zcHNwcHMgPSAtMTsKLSAgcnRwaDI2NHBheS0+c3BzcHBzX2ludGVydmFsID0gREVGQVVMVF9DT05GSUdfSU5URVJWQUw7Ci0gIHJ0cGgyNjRwYXktPmRlbHRhX3VuaXQgPSBGQUxTRTsKLSAgcnRwaDI2NHBheS0+ZGlzY29udCA9IEZBTFNFOwotCi0gIHJ0cGgyNjRwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfcGF5X2NsZWFyX3Nwc19wcHMgKEdzdFJ0cEgyNjRQYXkgKiBydHBoMjY0cGF5KQotewotICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAocnRwaDI2NHBheS0+c3BzLCAwKTsKLSAgZ19wdHJfYXJyYXlfc2V0X3NpemUgKHJ0cGgyNjRwYXktPnBwcywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBIMjY0UGF5ICpydHBoMjY0cGF5OwotCi0gIHJ0cGgyNjRwYXkgPSBHU1RfUlRQX0gyNjRfUEFZIChvYmplY3QpOwotCi0gIGdfYXJyYXlfZnJlZSAocnRwaDI2NHBheS0+cXVldWUsIFRSVUUpOwotCi0gIGdfcHRyX2FycmF5X2ZyZWUgKHJ0cGgyNjRwYXktPnNwcywgVFJVRSk7Ci0gIGdfcHRyX2FycmF5X2ZyZWUgKHJ0cGgyNjRwYXktPnBwcywgVFJVRSk7Ci0KLSAgZ19mcmVlIChydHBoMjY0cGF5LT5zcHJvcF9wYXJhbWV0ZXJfc2V0cyk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGgyNjRwYXktPmFkYXB0ZXIpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyIGFsbF9sZXZlbHNbXVs0XSA9IHsKLSAgIjEiLAotICAiMWIiLAotICAiMS4xIiwKLSAgIjEuMiIsCi0gICIxLjMiLAotICAiMiIsCi0gICIyLjEiLAotICAiMi4yIiwKLSAgIjMiLAotICAiMy4xIiwKLSAgIjMuMiIsCi0gICI0IiwKLSAgIjQuMSIsCi0gICI0LjIiLAotICAiNSIsCi0gICI1LjEiCi19OwotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX2gyNjRfcGF5X2dldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0UGFkICogcGFkLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnRlbXBsYXRlX2NhcHM7Ci0gIEdzdENhcHMgKmFsbG93ZWRfY2FwczsKLSAgR3N0Q2FwcyAqY2FwcywgKmljYXBzOwotICBnYm9vbGVhbiBhcHBlbmRfdW5yZXN0cmljdGVkOwotICBndWludCBpOwotCi0gIGFsbG93ZWRfY2FwcyA9Ci0gICAgICBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFEIChwYXlsb2FkKSwgTlVMTCk7Ci0KLSAgaWYgKGFsbG93ZWRfY2FwcyA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIHRlbXBsYXRlX2NhcHMgPQotICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZnc3RfcnRwX2gyNjRfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGlmIChnc3RfY2Fwc19pc19hbnkgKGFsbG93ZWRfY2FwcykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfcmVmICh0ZW1wbGF0ZV9jYXBzKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGFsbG93ZWRfY2FwcykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfcmVmIChhbGxvd2VkX2NhcHMpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgYXBwZW5kX3VucmVzdHJpY3RlZCA9IEZBTFNFOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGFsbG93ZWRfY2Fwcyk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFsbG93ZWRfY2FwcywgaSk7Ci0gICAgR3N0U3RydWN0dXJlICpuZXdfcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgidmlkZW8veC1oMjY0Iik7Ci0gICAgY29uc3QgZ2NoYXIgKnByb2ZpbGVfbGV2ZWxfaWQ7Ci0KLSAgICBwcm9maWxlX2xldmVsX2lkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAicHJvZmlsZS1sZXZlbC1pZCIpOwotCi0gICAgaWYgKHByb2ZpbGVfbGV2ZWxfaWQgJiYgc3RybGVuIChwcm9maWxlX2xldmVsX2lkKSA9PSA2KSB7Ci0gICAgICBjb25zdCBnY2hhciAqcHJvZmlsZTsKLSAgICAgIGNvbnN0IGdjaGFyICpsZXZlbDsKLSAgICAgIGxvbmcgaW50IHNwc2ludDsKLSAgICAgIGd1aW50OCBzcHNbM107Ci0KLSAgICAgIHNwc2ludCA9IHN0cnRvbCAocHJvZmlsZV9sZXZlbF9pZCwgTlVMTCwgMTYpOwotICAgICAgc3BzWzBdID0gc3BzaW50ID4+IDE2OwotICAgICAgc3BzWzFdID0gc3BzaW50ID4+IDg7Ci0gICAgICBzcHNbMl0gPSBzcHNpbnQ7Ci0KLSAgICAgIHByb2ZpbGUgPSBnc3RfY29kZWNfdXRpbHNfaDI2NF9nZXRfcHJvZmlsZSAoc3BzLCAzKTsKLSAgICAgIGxldmVsID0gZ3N0X2NvZGVjX3V0aWxzX2gyNjRfZ2V0X2xldmVsIChzcHMsIDMpOwotCi0gICAgICBpZiAocHJvZmlsZSAmJiBsZXZlbCkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGF5bG9hZCwgIkluIGNhcHMsIGhhdmUgcHJvZmlsZSAlcyBhbmQgbGV2ZWwgJXMiLAotICAgICAgICAgICAgcHJvZmlsZSwgbGV2ZWwpOwotCi0gICAgICAgIGlmICghc3RyY21wIChwcm9maWxlLCAiY29uc3RyYWluZWQtYmFzZWxpbmUiKSkKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsICJwcm9maWxlIiwgR19UWVBFX1NUUklORywgcHJvZmlsZSwgTlVMTCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0gICAgICAgICAgR1ZhbHVlIHByb2ZpbGVzID0geyAwLCB9OwotCi0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmcHJvZmlsZXMsIEdTVF9UWVBFX0xJU1QpOwotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1NUUklORyk7Ci0KLSAgICAgICAgICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCBwcm9maWxlKTsKLSAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZwcm9maWxlcywgJnZhbCk7Ci0KLSAgICAgICAgICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmdmFsLCAiY29uc3RyYWluZWQtYmFzZWxpbmUiKTsKLSAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZwcm9maWxlcywgJnZhbCk7Ci0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKG5ld19zLCAicHJvZmlsZSIsICZwcm9maWxlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXN0cmNtcCAobGV2ZWwsICIxIikpCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zLCAibGV2ZWwiLCBHX1RZUEVfU1RSSU5HLCBsZXZlbCwgTlVMTCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIEdWYWx1ZSBsZXZlbHMgPSB7IDAsIH07Ci0gICAgICAgICAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLSAgICAgICAgICBpbnQgajsKLQotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJmxldmVscywgR1NUX1RZUEVfTElTVCk7Ci0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLQotICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBHX05fRUxFTUVOVFMgKGFsbF9sZXZlbHMpOyBqKyspIHsKLSAgICAgICAgICAgIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZ2YWwsIGFsbF9sZXZlbHNbal0pOwotICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSAoJmxldmVscywgJnZhbCk7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcCAobGV2ZWwsIGFsbF9sZXZlbHNbal0pKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlIChuZXdfcywgImxldmVsIiwgJmxldmVscyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIEludmFsaWQgcHJvZmlsZS1sZXZlbC1pZCBtZWFucyBiYXNlbGluZSAqLwotCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywKLSAgICAgICAgICAgICJwcm9maWxlIiwgR19UWVBFX1NUUklORywgImNvbnN0cmFpbmVkLWJhc2VsaW5lIiwgTlVMTCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIE5vIHByb2ZpbGUtbGV2ZWwtaWQgbWVhbnMgYmFzZWxpbmUgb3IgdW5yZXN0cmljdGVkICovCi0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywKLSAgICAgICAgICAicHJvZmlsZSIsIEdfVFlQRV9TVFJJTkcsICJjb25zdHJhaW5lZC1iYXNlbGluZSIsIE5VTEwpOwotICAgICAgYXBwZW5kX3VucmVzdHJpY3RlZCA9IFRSVUU7Ci0gICAgfQotCi0gICAgY2FwcyA9IGdzdF9jYXBzX21lcmdlX3N0cnVjdHVyZSAoY2FwcywgbmV3X3MpOwotICB9Ci0KLSAgaWYgKGFwcGVuZF91bnJlc3RyaWN0ZWQpIHsKLSAgICBjYXBzID0KLSAgICAgICAgZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtaDI2NCIsIE5VTEwsCi0gICAgICAgICAgICBOVUxMKSk7Ci0gIH0KLQotICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgdGVtcGxhdGVfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgY2FwcyA9IGljYXBzOwotCi1kb25lOgotICBpZiAoZmlsdGVyKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIkludGVyc2VjdCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGFuZCBmaWx0ZXIgJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMsIGZpbHRlcik7Ci0gICAgaWNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBjYXBzID0gaWNhcHM7Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAodGVtcGxhdGVfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChhbGxvd2VkX2NhcHMpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXlsb2FkLCAicmV0dXJuaW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICByZXR1cm4gY2FwczsKLX0KLQotLyogdGFrZSB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgU1BTIGFuZCBQUFMgbGlzdHMgYW5kIHNldCB0aGVtIG9uIHRoZSBjYXBzIGFzCi0gKiBzcHJvcC1wYXJhbWV0ZXItc2V0cyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjRfcGF5X3NldF9zcHNfcHBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkKQotewotICBHc3RSdHBIMjY0UGF5ICpwYXlsb2FkZXIgPSBHU1RfUlRQX0gyNjRfUEFZIChiYXNlcGF5bG9hZCk7Ci0gIGdjaGFyICpwcm9maWxlOwotICBnY2hhciAqc2V0OwotICBHU3RyaW5nICpzcHJvcHM7Ci0gIGd1aW50IGNvdW50OwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBpOwotCi0gIHNwcm9wcyA9IGdfc3RyaW5nX25ldyAoIiIpOwotICBjb3VudCA9IDA7Ci0KLSAgLyogYnVpbGQgdGhlIHNwcm9wLXBhcmFtZXRlci1zZXRzICovCi0gIGZvciAoaSA9IDA7IGkgPCBwYXlsb2FkZXItPnNwcy0+bGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKnNwc19idWYgPQotICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGdfcHRyX2FycmF5X2luZGV4IChwYXlsb2FkZXItPnNwcywgaSkpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKHNwc19idWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgc2V0ID0gZ19iYXNlNjRfZW5jb2RlIChtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKHNwc19idWYsICZtYXApOwotCi0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3Byb3BzLCAiJXMlcyIsIGNvdW50ID8gIiwiIDogIiIsIHNldCk7Ci0gICAgZ19mcmVlIChzZXQpOwotICAgIGNvdW50Kys7Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IHBheWxvYWRlci0+cHBzLT5sZW47IGkrKykgewotICAgIEdzdEJ1ZmZlciAqcHBzX2J1ZiA9Ci0gICAgICAgIEdTVF9CVUZGRVJfQ0FTVCAoZ19wdHJfYXJyYXlfaW5kZXggKHBheWxvYWRlci0+cHBzLCBpKSk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAocHBzX2J1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBzZXQgPSBnX2Jhc2U2NF9lbmNvZGUgKG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAocHBzX2J1ZiwgJm1hcCk7Ci0KLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzcHJvcHMsICIlcyVzIiwgY291bnQgPyAiLCIgOiAiIiwgc2V0KTsKLSAgICBnX2ZyZWUgKHNldCk7Ci0gICAgY291bnQrKzsKLSAgfQotCi0gIGlmIChHX0xJS0VMWSAoY291bnQpKSB7Ci0gICAgaWYgKHBheWxvYWRlci0+cHJvZmlsZSAhPSAwKSB7Ci0gICAgICAvKiBwcm9maWxlIGlzIDI0IGJpdC4gRm9yY2UgaXQgdG8gcmVzcGVjdCB0aGUgbGltaXQgKi8KLSAgICAgIHByb2ZpbGUgPSBnX3N0cmR1cF9wcmludGYgKCIlMDZ4IiwgcGF5bG9hZGVyLT5wcm9maWxlICYgMHhmZmZmZmYpOwotICAgICAgLyogY29tYmluZSBpbnRvIG91dHB1dCBjYXBzICovCi0gICAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsCi0gICAgICAgICAgInBhY2tldGl6YXRpb24tbW9kZSIsIEdfVFlQRV9TVFJJTkcsICIxIiwKLSAgICAgICAgICAicHJvZmlsZS1sZXZlbC1pZCIsIEdfVFlQRV9TVFJJTkcsIHByb2ZpbGUsCi0gICAgICAgICAgInNwcm9wLXBhcmFtZXRlci1zZXRzIiwgR19UWVBFX1NUUklORywgc3Byb3BzLT5zdHIsIE5VTEwpOwotICAgICAgZ19mcmVlIChwcm9maWxlKTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKGJhc2VwYXlsb2FkLAotICAgICAgICAgICJwYWNrZXRpemF0aW9uLW1vZGUiLCBHX1RZUEVfU1RSSU5HLCAiMSIsCi0gICAgICAgICAgInNwcm9wLXBhcmFtZXRlci1zZXRzIiwgR19UWVBFX1NUUklORywgc3Byb3BzLT5zdHIsIE5VTEwpOwotICAgIH0KLQotICB9IGVsc2UgewotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwgTlVMTCk7Ci0gIH0KLSAgZ19zdHJpbmdfZnJlZSAoc3Byb3BzLCBUUlVFKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9oMjY0X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwSDI2NFBheSAqcnRwaDI2NHBheTsKLSAgR3N0U3RydWN0dXJlICpzdHI7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBjb25zdCBnY2hhciAqYWxpZ25tZW50LCAqc3RyZWFtX2Zvcm1hdDsKLQotICBydHBoMjY0cGF5ID0gR1NUX1JUUF9IMjY0X1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIC8qIHdlIGNhbiBvbmx5IHNldCB0aGUgb3V0cHV0IGNhcHMgd2hlbiB3ZSBmb3VuZCB0aGUgc3Byb3BzIGFuZCBwcm9maWxlCi0gICAqIE5BTHMgKi8KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKGJhc2VwYXlsb2FkLCAidmlkZW8iLCBUUlVFLCAiSDI2NCIsIDkwMDAwKTsKLQotICBydHBoMjY0cGF5LT5hbGlnbm1lbnQgPSBHU1RfSDI2NF9BTElHTk1FTlRfVU5LTk9XTjsKLSAgYWxpZ25tZW50ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHIsICJhbGlnbm1lbnQiKTsKLSAgaWYgKGFsaWdubWVudCkgewotICAgIGlmIChnX3N0cl9lcXVhbCAoYWxpZ25tZW50LCAiYXUiKSkKLSAgICAgIHJ0cGgyNjRwYXktPmFsaWdubWVudCA9IEdTVF9IMjY0X0FMSUdOTUVOVF9BVTsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKGFsaWdubWVudCwgIm5hbCIpKQotICAgICAgcnRwaDI2NHBheS0+YWxpZ25tZW50ID0gR1NUX0gyNjRfQUxJR05NRU5UX05BTDsKLSAgfQotCi0gIHJ0cGgyNjRwYXktPnN0cmVhbV9mb3JtYXQgPSBHU1RfSDI2NF9TVFJFQU1fRk9STUFUX1VOS05PV047Ci0gIHN0cmVhbV9mb3JtYXQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0ciwgInN0cmVhbS1mb3JtYXQiKTsKLSAgaWYgKHN0cmVhbV9mb3JtYXQpIHsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKHN0cmVhbV9mb3JtYXQsICJhdmMiKSkKLSAgICAgIHJ0cGgyNjRwYXktPnN0cmVhbV9mb3JtYXQgPSBHU1RfSDI2NF9TVFJFQU1fRk9STUFUX0FWQzsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKHN0cmVhbV9mb3JtYXQsICJieXRlLXN0cmVhbSIpKQotICAgICAgcnRwaDI2NHBheS0+c3RyZWFtX2Zvcm1hdCA9IEdTVF9IMjY0X1NUUkVBTV9GT1JNQVRfQllURVNUUkVBTTsKLSAgfQotCi0gIC8qIHBhY2tldGl6ZWQgQVZDIHZpZGVvIGhhcyBhIGNvZGVjX2RhdGEgKi8KLSAgaWYgKCh2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHIsICJjb2RlY19kYXRhIikpKSB7Ci0gICAgZ3VpbnQgbnVtX3NwcywgbnVtX3BwczsKLSAgICBnaW50IGksIG5hbF9zaXplOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NHBheSwgImhhdmUgcGFja2V0aXplZCBoMjY0Iik7Ci0KLSAgICBidWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAodmFsdWUpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgc2l6ZSA9IG1hcC5zaXplOwotCi0gICAgLyogcGFyc2UgdGhlIGF2Y0MgZGF0YSAqLwotICAgIGlmIChzaXplIDwgNykKLSAgICAgIGdvdG8gYXZjY190b29fc21hbGw7Ci0gICAgLyogcGFyc2UgdGhlIHZlcnNpb24sIHRoaXMgbXVzdCBiZSAxICovCi0gICAgaWYgKGRhdGFbMF0gIT0gMSkKLSAgICAgIGdvdG8gd3JvbmdfdmVyc2lvbjsKLQotICAgIC8qIEFWQ1Byb2ZpbGVJbmRpY2F0aW9uICovCi0gICAgLyogcHJvZmlsZV9jb21wYXQgKi8KLSAgICAvKiBBVkNMZXZlbEluZGljYXRpb24gKi8KLSAgICBydHBoMjY0cGF5LT5wcm9maWxlID0gKGRhdGFbMV0gPDwgMTYpIHwgKGRhdGFbMl0gPDwgOCkgfCBkYXRhWzNdOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJwcm9maWxlICUwNngiLCBydHBoMjY0cGF5LT5wcm9maWxlKTsKLQotICAgIC8qIDYgYml0cyByZXNlcnZlZCB8IDIgYml0cyBsZW5ndGhTaXplTWludXNPbmUgKi8KLSAgICAvKiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gZnJvbnQgb2YgdGhlIE5BTCB1bml0cyB0byBtYXJrIHRoZWlyCi0gICAgICogbGVuZ3RoICovCi0gICAgcnRwaDI2NHBheS0+bmFsX2xlbmd0aF9zaXplID0gKGRhdGFbNF0gJiAweDAzKSArIDE7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NHBheSwgIm5hbCBsZW5ndGggJXUiLCBydHBoMjY0cGF5LT5uYWxfbGVuZ3RoX3NpemUpOwotICAgIC8qIDMgYml0cyByZXNlcnZlZCB8IDUgYml0cyBudW1PZlNlcXVlbmNlUGFyYW1ldGVyU2V0cyAqLwotICAgIG51bV9zcHMgPSBkYXRhWzVdICYgMHgxZjsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0cGF5LCAibnVtIFNQUyAldSIsIG51bV9zcHMpOwotCi0gICAgZGF0YSArPSA2OwotICAgIHNpemUgLT0gNjsKLQotICAgIC8qIGNyZWF0ZSB0aGUgc3Byb3AtcGFyYW1ldGVyLXNldHMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NwczsgaSsrKSB7Ci0gICAgICBHc3RCdWZmZXIgKnNwc19idWY7Ci0KLSAgICAgIGlmIChzaXplIDwgMikKLSAgICAgICAgZ290byBhdmNjX2Vycm9yOwotCi0gICAgICBuYWxfc2l6ZSA9IChkYXRhWzBdIDw8IDgpIHwgZGF0YVsxXTsKLSAgICAgIGRhdGEgKz0gMjsKLSAgICAgIHNpemUgLT0gMjsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJTUFMgJWQgc2l6ZSAlZCIsIGksIG5hbF9zaXplKTsKLQotICAgICAgaWYgKHNpemUgPCBuYWxfc2l6ZSkKLSAgICAgICAgZ290byBhdmNjX2Vycm9yOwotCi0gICAgICAvKiBtYWtlIGEgYnVmZmVyIG91dCBvZiBpdCBhbmQgYWRkIHRvIFNQUyBsaXN0ICovCi0gICAgICBzcHNfYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuYWxfc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX2ZpbGwgKHNwc19idWYsIDAsIGRhdGEsIG5hbF9zaXplKTsKLSAgICAgIGdzdF9ydHBfaDI2NF9hZGRfc3BzX3BwcyAoR1NUX0VMRU1FTlQgKHJ0cGgyNjRwYXkpLCBydHBoMjY0cGF5LT5zcHMsCi0gICAgICAgICAgcnRwaDI2NHBheS0+cHBzLCBzcHNfYnVmKTsKLSAgICAgIGRhdGEgKz0gbmFsX3NpemU7Ci0gICAgICBzaXplIC09IG5hbF9zaXplOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8IDEpCi0gICAgICBnb3RvIGF2Y2NfZXJyb3I7Ci0KLSAgICAvKiA4IGJpdHMgbnVtT2ZQaWN0dXJlUGFyYW1ldGVyU2V0cyAqLwotICAgIG51bV9wcHMgPSBkYXRhWzBdOwotICAgIGRhdGEgKz0gMTsKLSAgICBzaXplIC09IDE7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0cGF5LCAibnVtIFBQUyAldSIsIG51bV9wcHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcHBzOyBpKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqcHBzX2J1ZjsKLQotICAgICAgaWYgKHNpemUgPCAyKQotICAgICAgICBnb3RvIGF2Y2NfZXJyb3I7Ci0KLSAgICAgIG5hbF9zaXplID0gKGRhdGFbMF0gPDwgOCkgfCBkYXRhWzFdOwotICAgICAgZGF0YSArPSAyOwotICAgICAgc2l6ZSAtPSAyOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NHBheSwgIlBQUyAlZCBzaXplICVkIiwgaSwgbmFsX3NpemUpOwotCi0gICAgICBpZiAoc2l6ZSA8IG5hbF9zaXplKQotICAgICAgICBnb3RvIGF2Y2NfZXJyb3I7Ci0KLSAgICAgIC8qIG1ha2UgYSBidWZmZXIgb3V0IG9mIGl0IGFuZCBhZGQgdG8gUFBTIGxpc3QgKi8KLSAgICAgIHBwc19idWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG5hbF9zaXplKTsKLSAgICAgIGdzdF9idWZmZXJfZmlsbCAocHBzX2J1ZiwgMCwgZGF0YSwgbmFsX3NpemUpOwotICAgICAgZ3N0X3J0cF9oMjY0X2FkZF9zcHNfcHBzIChHU1RfRUxFTUVOVCAocnRwaDI2NHBheSksIHJ0cGgyNjRwYXktPnNwcywKLSAgICAgICAgICBydHBoMjY0cGF5LT5wcHMsIHBwc19idWYpOwotCi0gICAgICBkYXRhICs9IG5hbF9zaXplOwotICAgICAgc2l6ZSAtPSBuYWxfc2l6ZTsKLSAgICB9Ci0KLSAgICAvKiBhbmQgdXBkYXRlIHRoZSBjYXBzIHdpdGggdGhlIGNvbGxlY3RlZCBkYXRhICovCi0gICAgaWYgKCFnc3RfcnRwX2gyNjRfcGF5X3NldF9zcHNfcHBzIChiYXNlcGF5bG9hZCkpCi0gICAgICBnb3RvIHNldF9zcHNfcHBzX2ZhaWxlZDsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NHBheSwgImhhdmUgYnl0ZXN0cmVhbSBoMjY0Iik7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotYXZjY190b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHBoMjY0cGF5LCAiYXZjQyBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgPCA3Iiwgc2l6ZSk7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotd3JvbmdfdmVyc2lvbjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGgyNjRwYXksICJ3cm9uZyBhdmNDIHZlcnNpb24iKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1hdmNjX2Vycm9yOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwaDI2NHBheSwgImF2Y0MgdG9vIHNtYWxsICIpOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLXNldF9zcHNfcHBzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGgyNjRwYXksICJmYWlsZWQgdG8gc2V0IHNwcy9wcHMiKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1lcnJvcjoKLSAgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfcGF5X3BhcnNlX3Nwcm9wX3BhcmFtZXRlcl9zZXRzIChHc3RSdHBIMjY0UGF5ICogcnRwaDI2NHBheSkKLXsKLSAgY29uc3QgZ2NoYXIgKnBzOwotICBnY2hhciAqKnBhcmFtczsKLSAgZ3VpbnQgbGVuOwotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIHBzID0gcnRwaDI2NHBheS0+c3Byb3BfcGFyYW1ldGVyX3NldHM7Ci0gIGlmIChwcyA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBnc3RfcnRwX2gyNjRfcGF5X2NsZWFyX3Nwc19wcHMgKHJ0cGgyNjRwYXkpOwotCi0gIHBhcmFtcyA9IGdfc3Ryc3BsaXQgKHBzLCAiLCIsIDApOwotICBsZW4gPSBnX3N0cnZfbGVuZ3RoIChwYXJhbXMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJ3ZSBoYXZlICVkIHBhcmFtcyIsIGxlbik7Ci0KLSAgZm9yIChpID0gMDsgcGFyYW1zW2ldOyBpKyspIHsKLSAgICBnc2l6ZSBuYWxfbGVuOwotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGd1aW50OCAqbmFscDsKLSAgICBndWludCBzYXZlID0gMDsKLSAgICBnaW50IHN0YXRlID0gMDsKLQotICAgIG5hbF9sZW4gPSBzdHJsZW4gKHBhcmFtc1tpXSk7Ci0gICAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuYWxfbGVuKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIG5hbHAgPSBtYXAuZGF0YTsKLSAgICBuYWxfbGVuID0gZ19iYXNlNjRfZGVjb2RlX3N0ZXAgKHBhcmFtc1tpXSwgbmFsX2xlbiwgbmFscCwgJnN0YXRlLCAmc2F2ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmLCAwLCBuYWxfbGVuKTsKLQotICAgIGlmICghbmFsX2xlbikgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGdzdF9ydHBfaDI2NF9hZGRfc3BzX3BwcyAoR1NUX0VMRU1FTlQgKHJ0cGgyNjRwYXkpLCBydHBoMjY0cGF5LT5zcHMsCi0gICAgICAgIHJ0cGgyNjRwYXktPnBwcywgYnVmKTsKLSAgfQotICBnX3N0cmZyZWV2IChwYXJhbXMpOwotfQotCi1zdGF0aWMgZ3VpbnQKLW5leHRfc3RhcnRfY29kZSAoY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgLyogQm95ZXItTW9vcmUgc3RyaW5nIG1hdGNoaW5nIGFsZ29yaXRobSwgaW4gYSBkZWdlbmVyYXRpdmUKLSAgICogc2Vuc2UgYmVjYXVzZSBvdXIgc2VhcmNoICdhbHBoYWJldCcgaXMgYmluYXJ5IC0gMCAmIDEgb25seS4KLSAgICogVGhpcyBhbGxvdyB1cyB0byBzaW1wbGlmeSB0aGUgZ2VuZXJhbCBCTSBhbGdvcml0aG0gdG8gYSB2ZXJ5Ci0gICAqIHNpbXBsZSBmb3JtLiAqLwotICAvKiBhc3N1bWUgMSBpcyBpbiB0aGUgM3RoIGJ5dGUgKi8KLSAgZ3VpbnQgb2Zmc2V0ID0gMjsKLQotICB3aGlsZSAob2Zmc2V0IDwgc2l6ZSkgewotICAgIGlmICgxID09IGRhdGFbb2Zmc2V0XSkgewotICAgICAgdW5zaWduZWQgaW50IHNoaWZ0ID0gb2Zmc2V0OwotCi0gICAgICBpZiAoMCA9PSBkYXRhWy0tc2hpZnRdKSB7Ci0gICAgICAgIGlmICgwID09IGRhdGFbLS1zaGlmdF0pIHsKLSAgICAgICAgICByZXR1cm4gc2hpZnQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIFRoZSBqdW1wIGlzIGFsd2F5cyAzIGJlY2F1c2Ugb2YgdGhlIDEgcHJldmlvdXNseSBtYXRjaGVkLgotICAgICAgICogQWxsIHRoZSAwJ3MgbXVzdCBiZSBhZnRlciB0aGlzICcxJyBtYXRjaGVkIGF0IG9mZnNldCAqLwotICAgICAgb2Zmc2V0ICs9IDM7Ci0gICAgfSBlbHNlIGlmICgwID09IGRhdGFbb2Zmc2V0XSkgewotICAgICAgLyogbWF5YmUgbmV4dCBieXRlIGlzIDE/ICovCi0gICAgICBvZmZzZXQrKzsKLSAgICB9IGVsc2UgewotICAgICAgLyogY2FuIGp1bXAgMyBieXRlcyBmb3J3YXJkICovCi0gICAgICBvZmZzZXQgKz0gMzsKLSAgICB9Ci0gICAgLyogYXQgZWFjaCBpdGVyYXRpb24sIHdlIHJlc2NhbiBpbiBhIGJhY2t3YXJkIG1hbm5lciB1bnRpbAotICAgICAqIHdlIG1hdGNoIDAuMC4xIGluIHJldmVyc2Ugb3JkZXIuIFNpbmNlIG91ciBzZWFyY2ggc3RyaW5nCi0gICAgICogaGFzIG9ubHkgMiAnYWxwYWJldHMnIChpLmUuIDAgJiAxKSwgd2Uga25vdyB0aGF0IGFueQotICAgICAqIG1pc21hdGNoIHdpbGwgZm9yY2UgdXMgdG8gc2hpZnQgYSBmaXhlZCBudW1iZXIgb2Ygc3RlcHMgKi8KLSAgfQotICBHU1RfREVCVUcgKCJDYW5ub3QgZmluZCBuZXh0IE5BTCBzdGFydCBjb2RlLiByZXR1cm5pbmcgJXUiLCBzaXplKTsKLQotICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjRfcGF5X2RlY29kZV9uYWwgKEdzdFJ0cEgyNjRQYXkgKiBwYXlsb2FkZXIsCi0gICAgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwgR3N0Q2xvY2tUaW1lIGR0cywgR3N0Q2xvY2tUaW1lIHB0cykKLXsKLSAgZ3VpbnQ4IGhlYWRlciwgdHlwZTsKLSAgZ2Jvb2xlYW4gdXBkYXRlZDsKLQotICAvKiBkZWZhdWx0IGlzIG5vIHVwZGF0ZSAqLwotICB1cGRhdGVkID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHICgiTkFMIHBheWxvYWQgbGVuPSV1Iiwgc2l6ZSk7Ci0KLSAgaGVhZGVyID0gZGF0YVswXTsKLSAgdHlwZSA9IGhlYWRlciAmIDB4MWY7Ci0KLSAgLyogV2UgcmVjb3JkIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgU1BTL1BQUyBzbwotICAgKiB0aGF0IHdlIGNhbiBpbnNlcnQgdGhlbSBhdCByZWd1bGFyIGludGVydmFscyBhbmQgd2hlbiBuZWVkZWQuICovCi0gIGlmIChTUFNfVFlQRV9JRCA9PSB0eXBlIHx8IFBQU19UWVBFX0lEID09IHR5cGUpIHsKLSAgICBHc3RCdWZmZXIgKm5hbDsKLQotICAgIC8qIGVuY29kZSB0aGUgZW50aXJlIFNQUyBOQUwgaW4gYmFzZTY0ICovCi0gICAgR1NUX0RFQlVHICgiRm91bmQgJXMgJXggJXggJXggTGVuPSV1IiwgdHlwZSA9PSBTUFNfVFlQRV9JRCA/ICJTUFMiIDogIlBQUyIsCi0gICAgICAgIChoZWFkZXIgPj4gNyksIChoZWFkZXIgPj4gNSkgJiAzLCB0eXBlLCBzaXplKTsKLQotICAgIG5hbCA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBzaXplLCBOVUxMKTsKLSAgICBnc3RfYnVmZmVyX2ZpbGwgKG5hbCwgMCwgZGF0YSwgc2l6ZSk7Ci0KLSAgICB1cGRhdGVkID0gZ3N0X3J0cF9oMjY0X2FkZF9zcHNfcHBzIChHU1RfRUxFTUVOVCAocGF5bG9hZGVyKSwKLSAgICAgICAgcGF5bG9hZGVyLT5zcHMsIHBheWxvYWRlci0+cHBzLCBuYWwpOwotCi0gICAgLyogcmVtZW1iZXIgd2hlbiB3ZSBsYXN0IHNhdyBTUFMgKi8KLSAgICBpZiAodXBkYXRlZCAmJiBwdHMgIT0gLTEpCi0gICAgICBwYXlsb2FkZXItPmxhc3Rfc3BzcHBzID0gcHRzOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVRyAoIk5BTDogJXggJXggJXggTGVuID0gJXUiLCAoaGVhZGVyID4+IDcpLAotICAgICAgICAoaGVhZGVyID4+IDUpICYgMywgdHlwZSwgc2l6ZSk7Ci0gIH0KLQotICByZXR1cm4gdXBkYXRlZDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2NF9wYXlfcGF5bG9hZF9uYWwgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogcGF5YnVmLCBHc3RDbG9ja1RpbWUgZHRzLCBHc3RDbG9ja1RpbWUgcHRzLCBnYm9vbGVhbiBlbmRfb2ZfYXUsCi0gICAgZ2Jvb2xlYW4gZGVsdGFfdW5pdCwgZ2Jvb2xlYW4gZGlzY29udCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjRfcGF5X3NlbmRfc3BzX3BwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RSdHBIMjY0UGF5ICogcnRwaDI2NHBheSwgR3N0Q2xvY2tUaW1lIGR0cywgR3N0Q2xvY2tUaW1lIHB0cykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gc2VudF9hbGxfc3BzX3BwcyA9IFRSVUU7Ci0gIGd1aW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjRwYXktPnNwcy0+bGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKnNwc19idWYgPQotICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY0cGF5LT5zcHMsIGkpKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJpbnNlcnRpbmcgU1BTIGluIHRoZSBzdHJlYW0iKTsKLSAgICAvKiByZXNlbmQgU1BTICovCi0gICAgcmV0ID0gZ3N0X3J0cF9oMjY0X3BheV9wYXlsb2FkX25hbCAoYmFzZXBheWxvYWQsIGdzdF9idWZmZXJfcmVmIChzcHNfYnVmKSwKLSAgICAgICAgZHRzLCBwdHMsIEZBTFNFLCBGQUxTRSwgRkFMU0UpOwotICAgIC8qIE5vdCBjcml0aWNhbCBoZXJlOyBidXQgdGhyb3cgYSB3YXJuaW5nICovCi0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgc2VudF9hbGxfc3BzX3BwcyA9IEZBTFNFOwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiYXNlcGF5bG9hZCwgIlByb2JsZW0gcHVzaGluZyBTUFMiKTsKLSAgICB9Ci0gIH0KLSAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjRwYXktPnBwcy0+bGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKnBwc19idWYgPQotICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY0cGF5LT5wcHMsIGkpKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJpbnNlcnRpbmcgUFBTIGluIHRoZSBzdHJlYW0iKTsKLSAgICAvKiByZXNlbmQgUFBTICovCi0gICAgcmV0ID0gZ3N0X3J0cF9oMjY0X3BheV9wYXlsb2FkX25hbCAoYmFzZXBheWxvYWQsIGdzdF9idWZmZXJfcmVmIChwcHNfYnVmKSwKLSAgICAgICAgZHRzLCBwdHMsIEZBTFNFLCBGQUxTRSwgRkFMU0UpOwotICAgIC8qIE5vdCBjcml0aWNhbCBoZXJlOyBidXQgdGhyb3cgYSB3YXJuaW5nICovCi0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgc2VudF9hbGxfc3BzX3BwcyA9IEZBTFNFOwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiYXNlcGF5bG9hZCwgIlByb2JsZW0gcHVzaGluZyBQUFMiKTsKLSAgICB9Ci0gIH0KLQotICBpZiAocHRzICE9IC0xICYmIHNlbnRfYWxsX3Nwc19wcHMpCi0gICAgcnRwaDI2NHBheS0+bGFzdF9zcHNwcHMgPSBwdHM7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogQGRlbHRhX3VuaXQ6IGlmICVGQUxTRSB0aGUgZmlyc3QgcGFja2V0IHNlbnQgd29uJ3QgaGF2ZSB0aGUKLSAqIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUIGZsYWcuCi0gKiBAZGlzY29udDogaWYgJVRSVUUgdGhlIGZpcnN0IHBhY2tldCBzZW50IHdpbGwgaGF2ZSB0aGUKLSAqIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UIGZsYWcuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjRfcGF5X3BheWxvYWRfbmFsIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIHBheWJ1ZiwgR3N0Q2xvY2tUaW1lIGR0cywgR3N0Q2xvY2tUaW1lIHB0cywgZ2Jvb2xlYW4gZW5kX29mX2F1LAotICAgIGdib29sZWFuIGRlbHRhX3VuaXQsIGdib29sZWFuIGRpc2NvbnQpCi17Ci0gIEdzdFJ0cEgyNjRQYXkgKnJ0cGgyNjRwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludDggbmFsSGVhZGVyOwotICBndWludDggbmFsVHlwZTsKLSAgZ3VpbnQgcGFja2V0X2xlbiwgcGF5bG9hZF9sZW4sIG10dTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdCA9IE5VTEw7Ci0gIGdib29sZWFuIHNlbmRfc3BzcHBzOwotICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gIGd1aW50IHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChwYXlidWYpOwotCi0gIHJ0cGgyNjRwYXkgPSBHU1RfUlRQX0gyNjRfUEFZIChiYXNlcGF5bG9hZCk7Ci0gIG10dSA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocnRwaDI2NHBheSk7Ci0KLSAgZ3N0X2J1ZmZlcl9leHRyYWN0IChwYXlidWYsIDAsICZuYWxIZWFkZXIsIDEpOwotICBuYWxUeXBlID0gbmFsSGVhZGVyICYgMHgxZjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0cGF5LCAiUHJvY2Vzc2luZyBCdWZmZXIgd2l0aCBOQUwgVFlQRT0lZCIsIG5hbFR5cGUpOwotCi0gIC8qIHNob3VsZCBzZXQgc3JjIGNhcHMgYmVmb3JlIHB1c2hpbmcgc3R1ZmYsCi0gICAqIGFuZCBpZiB3ZSBkaWQgbm90IHNlZSBlbm91Z2ggU1BTL1BQUywgdGhhdCBtYXkgbm90IGJlIHRoZSBjYXNlICovCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRF9TUkNQQUQKLSAgICAgICAgICAgICAgKGJhc2VwYXlsb2FkKSkpKQotICAgIGdzdF9ydHBfaDI2NF9wYXlfc2V0X3Nwc19wcHMgKGJhc2VwYXlsb2FkKTsKLQotICBzZW5kX3Nwc3BwcyA9IEZBTFNFOwotCi0gIC8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gZW1pdCBhbiBTUFMvUFBTIG5vdyAqLwotICBpZiAobmFsVHlwZSA9PSBJRFJfVFlQRV9JRCAmJiBydHBoMjY0cGF5LT5zcHNwcHNfaW50ZXJ2YWwgPiAwKSB7Ci0gICAgaWYgKHJ0cGgyNjRwYXktPmxhc3Rfc3BzcHBzICE9IC0xKSB7Ci0gICAgICBndWludDY0IGRpZmY7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBoMjY0cGF5LAotICAgICAgICAgICJub3cgJSIgR1NUX1RJTUVfRk9STUFUICIsIGxhc3QgU1BTL1BQUyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocHRzKSwgR1NUX1RJTUVfQVJHUyAocnRwaDI2NHBheS0+bGFzdF9zcHNwcHMpKTsKLQotICAgICAgLyogY2FsY3VsYXRlIGRpZmYgYmV0d2VlbiBsYXN0IFNQUy9QUFMgaW4gbWlsbGlzZWNvbmRzICovCi0gICAgICBpZiAocHRzID4gcnRwaDI2NHBheS0+bGFzdF9zcHNwcHMpCi0gICAgICAgIGRpZmYgPSBwdHMgLSBydHBoMjY0cGF5LT5sYXN0X3Nwc3BwczsKLSAgICAgIGVsc2UKLSAgICAgICAgZGlmZiA9IDA7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksCi0gICAgICAgICAgImludGVydmFsIHNpbmNlIGxhc3QgU1BTL1BQUyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGlmZikpOwotCi0gICAgICAvKiBiaWdnZXIgdGhhbiBpbnRlcnZhbCwgcXVldWUgU1BTL1BQUyAqLwotICAgICAgaWYgKEdTVF9USU1FX0FTX1NFQ09ORFMgKGRpZmYpID49IHJ0cGgyNjRwYXktPnNwc3Bwc19pbnRlcnZhbCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY0cGF5LCAidGltZSB0byBzZW5kIFNQUy9QUFMiKTsKLSAgICAgICAgc2VuZF9zcHNwcHMgPSBUUlVFOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBubyBrbm93IHByZXZpb3VzIFNQUy9QUFMgdGltZSwgc2VuZCBub3cgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJubyBwcmV2aW91cyBTUFMvUFBTIHRpbWUsIHNlbmQgbm93Iik7Ci0gICAgICBzZW5kX3Nwc3BwcyA9IFRSVUU7Ci0gICAgfQotICB9IGVsc2UgaWYgKG5hbFR5cGUgPT0gSURSX1RZUEVfSUQgJiYgcnRwaDI2NHBheS0+c3BzcHBzX2ludGVydmFsID09IC0xKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NHBheSwgInNlbmRpbmcgU1BTL1BQUyBiZWZvcmUgY3VycmVudCBJRFIgZnJhbWUiKTsKLSAgICAvKiBzZW5kIFNQUy9QUFMgYmVmb3JlIGV2ZXJ5IElEUiBmcmFtZSAqLwotICAgIHNlbmRfc3BzcHBzID0gVFJVRTsKLSAgfQotCi0gIGlmIChzZW5kX3Nwc3BwcyB8fCBydHBoMjY0cGF5LT5zZW5kX3Nwc3BwcykgewotICAgIC8qIHdlIG5lZWQgdG8gc2VuZCBTUFMvUFBTIG5vdyBmaXJzdC4gRklYTUUsIGRvbid0IHVzZSB0aGUgcHRzIGZvcgotICAgICAqIGNoZWNraW5nIHdoZW4gd2UgbmVlZCB0byBzZW5kIFNQUy9QUFMgYnV0IGNvbnZlcnQgdG8gcnVubmluZ190aW1lIGZpcnN0LiAqLwotICAgIHJ0cGgyNjRwYXktPnNlbmRfc3BzcHBzID0gRkFMU0U7Ci0gICAgcmV0ID0gZ3N0X3J0cF9oMjY0X3BheV9zZW5kX3Nwc19wcHMgKGJhc2VwYXlsb2FkLCBydHBoMjY0cGF5LCBkdHMsIHB0cyk7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocGF5YnVmKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0KLSAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAoc2l6ZSwgMCwgMCk7Ci0KLSAgaWYgKHBhY2tldF9sZW4gPCBtdHUpIHsKLSAgICAvKiB3aWxsIGZpdCBpbiBvbmUgcGFja2V0ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsCi0gICAgICAgICJOQUwgVW5pdCBmaXQgaW4gb25lIHBhY2tldCBkYXRhc2l6ZT0lZCBtdHU9JWQiLCBzaXplLCBtdHUpOwotCi0gICAgLyogY3JlYXRlIGJ1ZmZlciB3aXRob3V0IHBheWxvYWQgY29udGFpbmluZyBvbmx5IHRoZSBSVFAgaGVhZGVyCi0gICAgICogKG1lbW9yeSBibG9jayBhdCBpbmRleCAwKSAqLwotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMCwgMCwgMCk7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgICAvKiBvbmx5IHNldCB0aGUgbWFya2VyIGJpdCBvbiBwYWNrZXRzIGNvbnRhaW5pbmcgYWNjZXNzIHVuaXRzICovCi0gICAgaWYgKElTX0FDQ0VTU19VTklUIChuYWxUeXBlKSAmJiBlbmRfb2ZfYXUpIHsKLSAgICAgIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIDEpOwotICAgIH0KLQotICAgIC8qIHRpbWVzdGFtcCB0aGUgb3V0YnVmZmVyICovCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBwdHM7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHM7Ci0KLSAgICBpZiAoIWRlbHRhX3VuaXQpCi0gICAgICAvKiBPbmx5IHRoZSBmaXJzdCBwYWNrZXQgc2VudCBzaG91bGQgbm90IGhhdmUgdGhlIGZsYWcgKi8KLSAgICAgIGRlbHRhX3VuaXQgPSBUUlVFOwotICAgIGVsc2UKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgaWYgKGRpc2NvbnQpIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgLyogT25seSB0aGUgZmlyc3QgcGFja2V0IHNlbnQgc2hvdWxkIGhhdmUgdGhlIGZsYWcgKi8KLSAgICAgIGRpc2NvbnQgPSBGQUxTRTsKLSAgICB9Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICAvKiBpbnNlcnQgcGF5bG9hZCBtZW1vcnkgYmxvY2sgKi8KLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2NHBheSksIG91dGJ1ZiwgcGF5YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChvdXRidWYsIHBheWJ1Zik7Ci0KLSAgICAvKiBwdXNoIHRoZSBidWZmZXIgdG8gdGhlIG5leHQgZWxlbWVudCAqLwotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2ggKGJhc2VwYXlsb2FkLCBvdXRidWYpOwotICB9IGVsc2UgewotICAgIC8qIGZyYWdtZW50YXRpb24gVW5pdHMgRlUtQSAqLwotICAgIGd1aW50IGxpbWl0ZWRTaXplOwotICAgIGludCBpaSA9IDAsIHN0YXJ0ID0gMSwgZW5kID0gMCwgcG9zID0gMDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLAotICAgICAgICAiTkFMIFVuaXQgRE9FUyBOT1QgZml0IGluIG9uZSBwYWNrZXQgZGF0YXNpemU9JWQgbXR1PSVkIiwgc2l6ZSwgbXR1KTsKLQotICAgIHBvcysrOwotICAgIHNpemUtLTsKLQotICAgIHJldCA9IEdTVF9GTE9XX09LOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsICJVc2luZyBGVS1BIGZyYWdtZW50YXRpb24gZm9yIGRhdGEgc2l6ZT0lZCIsCi0gICAgICAgIHNpemUpOwotCi0gICAgLyogV2Uga2VlcCAyIGJ5dGVzIGZvciBGVSBpbmRpY2F0b3IgYW5kIEZVIEhlYWRlciAqLwotICAgIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYXlsb2FkX2xlbiAobXR1IC0gMiwgMCwgMCk7Ci0KLSAgICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoKHNpemUgLyBwYXlsb2FkX2xlbikgKyAxKTsKLQotICAgIHdoaWxlIChlbmQgPT0gMCkgewotICAgICAgbGltaXRlZFNpemUgPSBzaXplIDwgcGF5bG9hZF9sZW4gPyBzaXplIDogcGF5bG9hZF9sZW47Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwKLSAgICAgICAgICAiSW5zaWRlICBGVS1BIGZyYWdtZW50YXRpb24gbGltaXRlZFNpemU9JWQgaXRlcmF0aW9uPSVkIiwgbGltaXRlZFNpemUsCi0gICAgICAgICAgaWkpOwotCi0gICAgICAvKiB1c2UgYnVmZmVyIGxpc3RzCi0gICAgICAgKiBjcmVhdGUgYnVmZmVyIHdpdGhvdXQgcGF5bG9hZCBjb250YWluaW5nIG9ubHkgdGhlIFJUUCBoZWFkZXIKLSAgICAgICAqIChtZW1vcnkgYmxvY2sgYXQgaW5kZXggMCkgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMiwgMCwgMCk7Ci0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLQotICAgICAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHM7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHB0czsKLSAgICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0KLSAgICAgIGlmIChsaW1pdGVkU2l6ZSA9PSBzaXplKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiZW5kIHNpemU9JWQgaXRlcmF0aW9uPSVkIiwgc2l6ZSwgaWkpOwotICAgICAgICBlbmQgPSAxOwotICAgICAgfQotICAgICAgaWYgKElTX0FDQ0VTU19VTklUIChuYWxUeXBlKSkgewotICAgICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBlbmQgJiYgZW5kX29mX2F1KTsKLSAgICAgIH0KLQotICAgICAgLyogRlUgaW5kaWNhdG9yICovCi0gICAgICBwYXlsb2FkWzBdID0gKG5hbEhlYWRlciAmIDB4NjApIHwgMjg7Ci0KLSAgICAgIC8qIEZVIEhlYWRlciAqLwotICAgICAgcGF5bG9hZFsxXSA9IChzdGFydCA8PCA3KSB8IChlbmQgPDwgNikgfCAobmFsSGVhZGVyICYgMHgxZik7Ci0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgICAgLyogaW5zZXJ0IHBheWxvYWQgbWVtb3J5IGJsb2NrICovCi0gICAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2NHBheSksIG91dGJ1ZiwgcGF5YnVmLAotICAgICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAob3V0YnVmLCBwYXlidWYsIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlksIHBvcywKLSAgICAgICAgICBsaW1pdGVkU2l6ZSk7Ci0KLSAgICAgIGlmICghZGVsdGFfdW5pdCkKLSAgICAgICAgLyogT25seSB0aGUgZmlyc3QgcGFja2V0IHNlbnQgc2hvdWxkIG5vdCBoYXZlIHRoZSBmbGFnICovCi0gICAgICAgIGRlbHRhX3VuaXQgPSBUUlVFOwotICAgICAgZWxzZQotICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLQotICAgICAgaWYgKGRpc2NvbnQpIHsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICAgIC8qIE9ubHkgdGhlIGZpcnN0IHBhY2tldCBzZW50IHNob3VsZCBoYXZlIHRoZSBmbGFnICovCi0gICAgICAgIGRpc2NvbnQgPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgLyogYWRkIHRoZSBidWZmZXIgdG8gdGhlIGJ1ZmZlciBsaXN0ICovCi0gICAgICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBvdXRidWYpOwotCi0KLSAgICAgIHNpemUgLT0gbGltaXRlZFNpemU7Ci0gICAgICBwb3MgKz0gbGltaXRlZFNpemU7Ci0gICAgICBpaSsrOwotICAgICAgc3RhcnQgPSAwOwotICAgIH0KLQotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAoYmFzZXBheWxvYWQsIGxpc3QpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKHBheWJ1Zik7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2NF9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cEgyNjRQYXkgKnJ0cGgyNjRwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnc2l6ZSBzaXplOwotICBndWludCBuYWxfbGVuLCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICBHc3RDbG9ja1RpbWUgZHRzLCBwdHM7Ci0gIEdBcnJheSAqbmFsX3F1ZXVlOwotICBnYm9vbGVhbiBhdmM7Ci0gIEdzdEJ1ZmZlciAqcGF5YnVmID0gTlVMTDsKLSAgZ3NpemUgc2tpcDsKLSAgZ2Jvb2xlYW4gZGVsYXllZF9ub3RfZGVsdGFfdW5pdCA9IEZBTFNFOwotICBnYm9vbGVhbiBkZWxheWVkX2Rpc2NvbnQgPSBGQUxTRTsKLQotICBydHBoMjY0cGF5ID0gR1NUX1JUUF9IMjY0X1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIC8qIHRoZSBpbnB1dCBidWZmZXIgY29udGFpbnMgb25lIG9yIG1vcmUgTkFMIHVuaXRzICovCi0KLSAgYXZjID0gcnRwaDI2NHBheS0+c3RyZWFtX2Zvcm1hdCA9PSBHU1RfSDI2NF9TVFJFQU1fRk9STUFUX0FWQzsKLQotICBpZiAoYXZjKSB7Ci0gICAgLyogSW4gQVZDIG1vZGUsIHRoZXJlIGlzIG5vIGFkYXB0ZXIsIHNvIG5vdGhpZ24gdG8gZmx1c2ggKi8KLSAgICBpZiAoYnVmZmVyID09IE5VTEwpCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgc2l6ZSA9IG1hcC5zaXplOwotICAgIHB0cyA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICAgIGR0cyA9IEdTVF9CVUZGRVJfRFRTIChidWZmZXIpOwotICAgIHJ0cGgyNjRwYXktPmRlbHRhX3VuaXQgPSBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsCi0gICAgICAgIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICBydHBoMjY0cGF5LT5kaXNjb250ID0gR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCBzaXplKTsKLSAgfSBlbHNlIHsKLSAgICBkdHMgPSBnc3RfYWRhcHRlcl9wcmV2X2R0cyAocnRwaDI2NHBheS0+YWRhcHRlciwgTlVMTCk7Ci0gICAgcHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9wdHMgKHJ0cGgyNjRwYXktPmFkYXB0ZXIsIE5VTEwpOwotICAgIGlmIChidWZmZXIpIHsKLSAgICAgIGlmICghR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpIHsKLSAgICAgICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwaDI2NHBheS0+YWRhcHRlcikgPT0gMCkKLSAgICAgICAgICBydHBoMjY0cGF5LT5kZWx0YV91bml0ID0gRkFMU0U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAvKiBUaGlzIGJ1ZmZlciBjb250YWlucyBhIGtleSBmcmFtZSBidXQgdGhlIGFkYXB0ZXIgaXNuJ3QgZW1wdHkuIFNvCi0gICAgICAgICAgICogd2UnbGwgcHVyZ2UgaXQgZmlyc3QgYnkgc2VuZGluZyBhIGZpcnN0IHBhY2tldCBhbmQgdGhlbiB0aGUgc2Vjb25kCi0gICAgICAgICAgICogb25lIHdvbid0IGhhdmUgdGhlIERFTFRBX1VOSVQgZmxhZy4gKi8KLSAgICAgICAgICBkZWxheWVkX25vdF9kZWx0YV91bml0ID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoYnVmZmVyKSkgewotICAgICAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBoMjY0cGF5LT5hZGFwdGVyKSA9PSAwKQotICAgICAgICAgIHJ0cGgyNjRwYXktPmRpc2NvbnQgPSBUUlVFOwotICAgICAgICBlbHNlCi0gICAgICAgICAgLyogVGhpcyBidWZmZXIgaGFzIHRoZSBESVNDT05UIGZsYWcgYnV0IHRoZSBhZGFwdGVyIGlzbid0IGVtcHR5LiBTbwotICAgICAgICAgICAqIHdlJ2xsIHB1cmdlIGl0IGZpcnN0IGJ5IHNlbmRpbmcgYSBmaXJzdCBwYWNrZXQgYW5kIHRoZW4gdGhlIHNlY29uZAotICAgICAgICAgICAqIG9uZSB3aWxsIGhhdmUgdGhlIERJU0NPTlQgZmxhZyBzZXQuICovCi0gICAgICAgICAgZGVsYXllZF9kaXNjb250ID0gVFJVRTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHRzKSkKLSAgICAgICAgZHRzID0gR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcik7Ci0gICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChwdHMpKQotICAgICAgICBwdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwaDI2NHBheS0+YWRhcHRlciwgYnVmZmVyKTsKLSAgICB9Ci0gICAgc2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwaDI2NHBheS0+YWRhcHRlcik7Ci0gICAgLyogTm90aGluZyB0byBkbyBoZXJlIGlmIHRoZSBhZGFwdGVyIGlzIGVtcHR5LCBlLmcuIG9uIEVPUyAqLwotICAgIGlmIChzaXplID09IDApCi0gICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAocnRwaDI2NHBheS0+YWRhcHRlciwgc2l6ZSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsCi0gICAgICAgICJnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyAoJSIgR19HU0laRV9GT1JNQVQgIikiLCBzaXplLAotICAgICAgICBidWZmZXIgPyBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpIDogMCk7Ci0gIH0KLQotICByZXQgPSBHU1RfRkxPV19PSzsKLQotICAvKiBub3cgbG9vcCBvdmVyIGFsbCBOQUwgdW5pdHMgYW5kIHB1dCB0aGVtIGluIGEgcGFja2V0Ci0gICAqIEZJWE1FLCB3ZSBzaG91bGQgcmVhbGx5IHRyeSB0byBwYWNrIG11bHRpcGxlIE5BTCB1bml0cyBpbnRvIG9uZSBSVFAgcGFja2V0Ci0gICAqIGlmIHdlIGNhbiwgZXNwZWNpYWxseSBmb3IgdGhlIGNvbmZpZyBwYWNrZXRzIHRoYXQgd29udCd0IGNhdXNlIGRlY29kZXIgCi0gICAqIGxhdGVuY3kuICovCi0gIGlmIChhdmMpIHsKLSAgICBndWludCBuYWxfbGVuZ3RoX3NpemU7Ci0gICAgZ3NpemUgb2Zmc2V0ID0gMDsKLQotICAgIG5hbF9sZW5ndGhfc2l6ZSA9IHJ0cGgyNjRwYXktPm5hbF9sZW5ndGhfc2l6ZTsKLQotICAgIHdoaWxlIChzaXplID4gbmFsX2xlbmd0aF9zaXplKSB7Ci0gICAgICBnaW50IGk7Ci0gICAgICBnYm9vbGVhbiBlbmRfb2ZfYXUgPSBGQUxTRTsKLQotICAgICAgbmFsX2xlbiA9IDA7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgbmFsX2xlbmd0aF9zaXplOyBpKyspIHsKLSAgICAgICAgbmFsX2xlbiA9ICgobmFsX2xlbiA8PCA4KSArIGRhdGFbaV0pOwotICAgICAgfQotCi0gICAgICAvKiBza2lwIHRoZSBsZW5ndGggYnl0ZXMsIG1ha2Ugc3VyZSB3ZSBkb24ndCBydW4gcGFzdCB0aGUgYnVmZmVyIHNpemUgKi8KLSAgICAgIGRhdGEgKz0gbmFsX2xlbmd0aF9zaXplOwotICAgICAgb2Zmc2V0ICs9IG5hbF9sZW5ndGhfc2l6ZTsKLSAgICAgIHNpemUgLT0gbmFsX2xlbmd0aF9zaXplOwotCi0gICAgICBpZiAoc2l6ZSA+PSBuYWxfbGVuKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiZ290IE5BTCBvZiBzaXplICV1IiwgbmFsX2xlbik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBuYWxfbGVuID0gc2l6ZTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsICJnb3QgaW5jb21wbGV0ZSBOQUwgb2Ygc2l6ZSAldSIsCi0gICAgICAgICAgICBuYWxfbGVuKTsKLSAgICAgIH0KLQotICAgICAgLyogSWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB0aGVuIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlCi0gICAgICAgKiBhY2Nlc3MgdW5pdAotICAgICAgICovCi0gICAgICBpZiAocnRwaDI2NHBheS0+YWxpZ25tZW50ID09IEdTVF9IMjY0X0FMSUdOTUVOVF9BVQotICAgICAgICAgICYmIHNpemUgLSBuYWxfbGVuIDw9IG5hbF9sZW5ndGhfc2l6ZSkgewotICAgICAgICBlbmRfb2ZfYXUgPSBUUlVFOwotICAgICAgfQotCi0gICAgICBwYXlidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIG9mZnNldCwKLSAgICAgICAgICBuYWxfbGVuKTsKLSAgICAgIHJldCA9Ci0gICAgICAgICAgZ3N0X3J0cF9oMjY0X3BheV9wYXlsb2FkX25hbCAoYmFzZXBheWxvYWQsIHBheWJ1ZiwgZHRzLCBwdHMsCi0gICAgICAgICAgZW5kX29mX2F1LCBydHBoMjY0cGF5LT5kZWx0YV91bml0LCBydHBoMjY0cGF5LT5kaXNjb250KTsKLQotICAgICAgaWYgKCFydHBoMjY0cGF5LT5kZWx0YV91bml0KQotICAgICAgICAvKiBPbmx5IHRoZSBmaXJzdCBvdXRnb2luZyBwYWNrZXQgZG9lc24ndCBoYXZlIHRoZSBERUxUQV9VTklUIGZsYWcgKi8KLSAgICAgICAgcnRwaDI2NHBheS0+ZGVsdGFfdW5pdCA9IFRSVUU7Ci0KLSAgICAgIGlmIChydHBoMjY0cGF5LT5kaXNjb250KQotICAgICAgICAvKiBPbmx5IHRoZSBmaXJzdCBvdXRnb2luZyBwYWNrZXQgaGF2ZSB0aGUgRElTQ09OVCBmbGFnICovCi0gICAgICAgIHJ0cGgyNjRwYXktPmRpc2NvbnQgPSBGQUxTRTsKLQotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRhdGEgKz0gbmFsX2xlbjsKLSAgICAgIG9mZnNldCArPSBuYWxfbGVuOwotICAgICAgc2l6ZSAtPSBuYWxfbGVuOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBndWludCBuZXh0OwotICAgIGdib29sZWFuIHVwZGF0ZSA9IEZBTFNFOwotCi0gICAgLyogZ2V0IG9mZnNldCBvZiBmaXJzdCBzdGFydCBjb2RlICovCi0gICAgbmV4dCA9IG5leHRfc3RhcnRfY29kZSAoZGF0YSwgc2l6ZSk7Ci0KLSAgICAvKiBza2lwIHRvIHN0YXJ0IGNvZGUsIGlmIG5vIHN0YXJ0IGNvZGUgaXMgZm91bmQsIG5leHQgd2lsbCBiZSBzaXplIGFuZCB3ZQotICAgICAqIHdpbGwgbm90IGNvbGxlY3QgZGF0YS4gKi8KLSAgICBkYXRhICs9IG5leHQ7Ci0gICAgc2l6ZSAtPSBuZXh0OwotICAgIG5hbF9xdWV1ZSA9IHJ0cGgyNjRwYXktPnF1ZXVlOwotICAgIHNraXAgPSBuZXh0OwotCi0gICAgLyogYXJyYXkgbXVzdCBiZSBlbXB0eSB3aGVuIHdlIGdldCBoZXJlICovCi0gICAgZ19hc3NlcnQgKG5hbF9xdWV1ZS0+bGVuID09IDApOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsCi0gICAgICAgICJmb3VuZCBmaXJzdCBzdGFydCBhdCAldSwgYnl0ZXMgbGVmdCAlIiBHX0dTSVpFX0ZPUk1BVCwgbmV4dCwgc2l6ZSk7Ci0KLSAgICAvKiBmaXJzdCBwYXNzIHRvIGxvY2F0ZSBOQUxzIGFuZCBwYXJzZSBTUFMvUFBTICovCi0gICAgd2hpbGUgKHNpemUgPiA0KSB7Ci0gICAgICAvKiBza2lwIHN0YXJ0IGNvZGUgKi8KLSAgICAgIGRhdGEgKz0gMzsKLSAgICAgIHNpemUgLT0gMzsKLQotICAgICAgLyogdXNlIG5leHRfc3RhcnRfY29kZSgpIHRvIHNjYW4gYnVmZmVyLgotICAgICAgICogbmV4dF9zdGFydF9jb2RlKCkgcmV0dXJucyB0aGUgb2Zmc2V0IGluIGRhdGEsIAotICAgICAgICogc3RhcnRpbmcgZnJvbSB6ZXJvIHRvIHRoZSBmaXJzdCBieXRlIG9mIDAuMC4wLjEKLSAgICAgICAqIElmIG5vIHN0YXJ0IGNvZGUgaXMgZm91bmQsIGl0IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAKLSAgICAgICAqICdzaXplJyBwYXJhbWV0ZXIuIAotICAgICAgICogZGF0YSBpcyB1bmNoYW5nZWQgYnkgdGhlIGNhbGwgdG8gbmV4dF9zdGFydF9jb2RlKCkKLSAgICAgICAqLwotICAgICAgbmV4dCA9IG5leHRfc3RhcnRfY29kZSAoZGF0YSwgc2l6ZSk7Ci0KLSAgICAgIC8qIG5hbCBvciBhdSBhbGlnbmVkIGlucHV0IG5lZWRzIG5vIGRlbGF5aW5nIHVudGlsIG5leHQgdGltZSAqLwotICAgICAgaWYgKG5leHQgPT0gc2l6ZSAmJiBidWZmZXIgIT0gTlVMTCAmJgotICAgICAgICAgIHJ0cGgyNjRwYXktPmFsaWdubWVudCA9PSBHU1RfSDI2NF9BTElHTk1FTlRfVU5LTk9XTikgewotICAgICAgICAvKiBEaWRuJ3QgZmluZCB0aGUgc3RhcnQgb2YgbmV4dCBOQUwgYW5kIGl0J3Mgbm90IEVPUywKLSAgICAgICAgICogaGFuZGxlIGl0IG5leHQgdGltZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogbmFsIGxlbmd0aCBpcyBkaXN0YW5jZSB0byBuZXh0IHN0YXJ0IGNvZGUgKi8KLSAgICAgIG5hbF9sZW4gPSBuZXh0OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwgImZvdW5kIG5leHQgc3RhcnQgYXQgJXUgb2Ygc2l6ZSAldSIsIG5leHQsCi0gICAgICAgICAgbmFsX2xlbik7Ci0KLSAgICAgIGlmIChydHBoMjY0cGF5LT5zcHJvcF9wYXJhbWV0ZXJfc2V0cyAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIGV4cGxpY2l0bHkgc2V0IHByb2ZpbGUgYW5kIHNwcm9wLCB1c2UgdGhvc2UgKi8KLSAgICAgICAgaWYgKHJ0cGgyNjRwYXktPnVwZGF0ZV9jYXBzKSB7Ci0gICAgICAgICAgaWYgKCFnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsCi0gICAgICAgICAgICAgICAgICAic3Byb3AtcGFyYW1ldGVyLXNldHMiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgcnRwaDI2NHBheS0+c3Byb3BfcGFyYW1ldGVyX3NldHMsIE5VTEwpKQotICAgICAgICAgICAgZ290byBjYXBzX3JlamVjdGVkOwotCi0gICAgICAgICAgLyogcGFyc2UgU1BTIGFuZCBQUFMgZnJvbSBwcm92aWRlZCBwYXJhbWV0ZXIgc2V0IChmb3IgaW5zZXJ0aW9uKSAqLwotICAgICAgICAgIGdzdF9ydHBfaDI2NF9wYXlfcGFyc2Vfc3Byb3BfcGFyYW1ldGVyX3NldHMgKHJ0cGgyNjRwYXkpOwotCi0gICAgICAgICAgcnRwaDI2NHBheS0+dXBkYXRlX2NhcHMgPSBGQUxTRTsKLQotICAgICAgICAgIEdTVF9ERUJVRyAoIm91dGNhcHMgdXBkYXRlOiBzcHJvcC1wYXJhbWV0ZXItc2V0cz0lcyIsCi0gICAgICAgICAgICAgIHJ0cGgyNjRwYXktPnNwcm9wX3BhcmFtZXRlcl9zZXRzKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogV2Uga25vdyBvdXIgc3RyZWFtIGlzIGEgdmFsaWQgSDI2NCBOQUwgcGFja2V0LAotICAgICAgICAgKiBnbyBwYXJzZSBpdCBmb3IgU1BTL1BQUyB0byBlbnJpY2ggdGhlIGNhcHMgKi8KLSAgICAgICAgLyogb3JkZXI6IG1ha2Ugc3VyZSB0byBjaGVjayBuYWwgKi8KLSAgICAgICAgdXBkYXRlID0KLSAgICAgICAgICAgIGdzdF9ydHBfaDI2NF9wYXlfZGVjb2RlX25hbCAocnRwaDI2NHBheSwgZGF0YSwgbmFsX2xlbiwgZHRzLCBwdHMpCi0gICAgICAgICAgICB8fCB1cGRhdGU7Ci0gICAgICB9Ci0gICAgICAvKiBtb3ZlIHRvIG5leHQgTkFMIHBhY2tldCAqLwotICAgICAgZGF0YSArPSBuYWxfbGVuOwotICAgICAgc2l6ZSAtPSBuYWxfbGVuOwotCi0gICAgICBnX2FycmF5X2FwcGVuZF92YWwgKG5hbF9xdWV1ZSwgbmFsX2xlbik7Ci0gICAgfQotCi0gICAgLyogaWYgaGFzIG5ldyBTUFMgJiBQUFMsIHVwZGF0ZSB0aGUgb3V0cHV0IGNhcHMgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAodXBkYXRlKSkKLSAgICAgIGlmICghZ3N0X3J0cF9oMjY0X3BheV9zZXRfc3BzX3BwcyAoYmFzZXBheWxvYWQpKQotICAgICAgICBnb3RvIGNhcHNfcmVqZWN0ZWQ7Ci0KLSAgICAvKiBzZWNvbmQgcGFzcyB0byBwYXlsb2FkIGFuZCBwdXNoICovCi0KLSAgICBpZiAobmFsX3F1ZXVlLT5sZW4gIT0gMCkKLSAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChydHBoMjY0cGF5LT5hZGFwdGVyLCBza2lwKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuYWxfcXVldWUtPmxlbjsgaSsrKSB7Ci0gICAgICBndWludCBzaXplOwotICAgICAgZ2Jvb2xlYW4gZW5kX29mX2F1ID0gRkFMU0U7Ci0KLSAgICAgIG5hbF9sZW4gPSBnX2FycmF5X2luZGV4IChuYWxfcXVldWUsIGd1aW50LCBpKTsKLSAgICAgIC8qIHNraXAgc3RhcnQgY29kZSAqLwotICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHJ0cGgyNjRwYXktPmFkYXB0ZXIsIDMpOwotCi0gICAgICAvKiBUcmltIHRoZSBlbmQgdW5sZXNzIHdlJ3JlIHRoZSBsYXN0IE5BTCBpbiB0aGUgc3RyZWFtLgotICAgICAgICogSW4gY2FzZSB3ZSdyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIHdlIGtub3cgdGhlIG5leHQgYmxvY2sKLSAgICAgICAqIHN0YXJ0cyB3aXRoIDB4MDAwMDAxIHNvIGFsbCB0aGUgMHgwMCBieXRlcyBhdCB0aGUgZW5kIG9mIHRoaXMgb25lIGFyZQotICAgICAgICogdHJhaWxpbmcgMHgwIHRoYXQgY2FuIGJlIGRpc2NhcmRlZCAqLwotICAgICAgc2l6ZSA9IG5hbF9sZW47Ci0gICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChydHBoMjY0cGF5LT5hZGFwdGVyLCBzaXplKTsKLSAgICAgIGlmIChpICsgMSAhPSBuYWxfcXVldWUtPmxlbiB8fCBidWZmZXIgIT0gTlVMTCkKLSAgICAgICAgZm9yICg7IHNpemUgPiAxICYmIGRhdGFbc2l6ZSAtIDFdID09IDB4MDsgc2l6ZS0tKQotICAgICAgICAgIC8qIHNraXAgKi8gOwotCi0KLSAgICAgIC8qIElmIGl0J3MgdGhlIGxhc3QgbmFsIHVuaXQgd2UgaGF2ZSBpbiBub24tYnl0ZXN0cmVhbSBtb2RlLCB3ZSBjYW4KLSAgICAgICAqIGFzc3VtZSBpdCdzIHRoZSBlbmQgb2YgYW4gYWNjZXNzLXVuaXQKLSAgICAgICAqCi0gICAgICAgKiBGSVhNRTogV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBuZXh0IHBhY2tldCBvciBFT1MgdG8KLSAgICAgICAqIGFjdHVhbGx5IHBheWxvYWQgdGhlIE5BTCBzbyB3ZSBjYW4ga25vdyBpZiB0aGUgY3VycmVudCBOQUwgaXMKLSAgICAgICAqIHRoZSBsYXN0IG9uZSBvZiBhbiBhY2Nlc3MgdW5pdCBvciBub3QgaWYgd2UgYXJlIGluIGJ5dGVzdHJlYW0gbW9kZQotICAgICAgICovCi0gICAgICBpZiAoKHJ0cGgyNjRwYXktPmFsaWdubWVudCA9PSBHU1RfSDI2NF9BTElHTk1FTlRfQVUgfHwgYnVmZmVyID09IE5VTEwpICYmCi0gICAgICAgICAgaSA9PSBuYWxfcXVldWUtPmxlbiAtIDEpCi0gICAgICAgIGVuZF9vZl9hdSA9IFRSVUU7Ci0gICAgICBwYXlidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocnRwaDI2NHBheS0+YWRhcHRlciwgc2l6ZSk7Ci0gICAgICBnX2Fzc2VydCAocGF5YnVmKTsKLQotICAgICAgLyogcHV0IHRoZSBkYXRhIGluIG9uZSBvciBtb3JlIFJUUCBwYWNrZXRzICovCi0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9ydHBfaDI2NF9wYXlfcGF5bG9hZF9uYWwgKGJhc2VwYXlsb2FkLCBwYXlidWYsIGR0cywgcHRzLAotICAgICAgICAgIGVuZF9vZl9hdSwgcnRwaDI2NHBheS0+ZGVsdGFfdW5pdCwgcnRwaDI2NHBheS0+ZGlzY29udCk7Ci0KLSAgICAgIGlmIChkZWxheWVkX25vdF9kZWx0YV91bml0KSB7Ci0gICAgICAgIHJ0cGgyNjRwYXktPmRlbHRhX3VuaXQgPSBGQUxTRTsKLSAgICAgICAgZGVsYXllZF9ub3RfZGVsdGFfdW5pdCA9IEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogT25seSB0aGUgZmlyc3Qgb3V0Z29pbmcgcGFja2V0IGRvZXNuJ3QgaGF2ZSB0aGUgREVMVEFfVU5JVCBmbGFnICovCi0gICAgICAgIHJ0cGgyNjRwYXktPmRlbHRhX3VuaXQgPSBUUlVFOwotICAgICAgfQotCi0gICAgICBpZiAoZGVsYXllZF9kaXNjb250KSB7Ci0gICAgICAgIHJ0cGgyNjRwYXktPmRpc2NvbnQgPSBUUlVFOwotICAgICAgICBkZWxheWVkX2Rpc2NvbnQgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIE9ubHkgdGhlIGZpcnN0IG91dGdvaW5nIHBhY2tldCBoYXZlIHRoZSBESVNDT05UIGZsYWcgKi8KLSAgICAgICAgcnRwaDI2NHBheS0+ZGlzY29udCA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICAvKiBtb3ZlIHRvIG5leHQgTkFMIHBhY2tldCAqLwotICAgICAgLyogU2tpcHMgdGhlIHRyYWlsaW5nIHplcm9zICovCi0gICAgICBnc3RfYWRhcHRlcl9mbHVzaCAocnRwaDI2NHBheS0+YWRhcHRlciwgbmFsX2xlbiAtIHNpemUpOwotICAgIH0KLSAgICBnX2FycmF5X3NldF9zaXplIChuYWxfcXVldWUsIDApOwotICB9Ci0KLWRvbmU6Ci0gIGlmIChhdmMpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKHJ0cGgyNjRwYXktPmFkYXB0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotY2Fwc19yZWplY3RlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmFzZXBheWxvYWQsICJDb3VsZCBub3Qgc2V0IG91dGNhcHMiKTsKLSAgICBnX2FycmF5X3NldF9zaXplIChuYWxfcXVldWUsIDApOwotICAgIHJldCA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2NF9wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0UnRwSDI2NFBheSAqcnRwaDI2NHBheSA9IEdTVF9SVFBfSDI2NF9QQVkgKHBheWxvYWQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2NHBheS0+YWRhcHRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTToKLSAgICAgIHMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJHc3RGb3JjZUtleVVuaXQiKSkgewotICAgICAgICBnYm9vbGVhbiByZXNlbmRfY29kZWNfZGF0YTsKLQotICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbiAocywgImFsbC1oZWFkZXJzIiwKLSAgICAgICAgICAgICAgICAmcmVzZW5kX2NvZGVjX2RhdGEpICYmIHJlc2VuZF9jb2RlY19kYXRhKQotICAgICAgICAgIHJ0cGgyNjRwYXktPnNlbmRfc3BzcHBzID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICAvKiBjYWxsIGhhbmRsZV9idWZmZXIgd2l0aCBOVUxMIHRvIGZsdXNoIGxhc3QgTkFMIGZyb20gYWRhcHRlcgotICAgICAgICogaW4gYnl0ZS1zdHJlYW0gbW9kZQotICAgICAgICovCi0gICAgICBnc3RfcnRwX2gyNjRfcGF5X2hhbmRsZV9idWZmZXIgKHBheWxvYWQsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVDoKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjRwYXksICJOZXcgc3RyZWFtIGRldGVjdGVkID0+IENsZWFyIFNQUyBhbmQgUFBTIik7Ci0gICAgICBnc3RfcnRwX2gyNjRfcGF5X2NsZWFyX3Nwc19wcHMgKHJ0cGgyNjRwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmVzID0gR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKHBheWxvYWQsIGV2ZW50KTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfaDI2NF9wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RSdHBIMjY0UGF5ICpydHBoMjY0cGF5ID0gR1NUX1JUUF9IMjY0X1BBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIHJ0cGgyNjRwYXktPnNlbmRfc3BzcHBzID0gRkFMU0U7Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2NHBheS0+YWRhcHRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgcnRwaDI2NHBheS0+bGFzdF9zcHNwcHMgPSAtMTsKLSAgICAgIGdzdF9ydHBfaDI2NF9wYXlfY2xlYXJfc3BzX3BwcyAocnRwaDI2NHBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjY0X3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSDI2NFBheSAqcnRwaDI2NHBheTsKLQotICBydHBoMjY0cGF5ID0gR1NUX1JUUF9IMjY0X1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1BST1BfUEFSQU1FVEVSX1NFVFM6Ci0gICAgICBnX2ZyZWUgKHJ0cGgyNjRwYXktPnNwcm9wX3BhcmFtZXRlcl9zZXRzKTsKLSAgICAgIHJ0cGgyNjRwYXktPnNwcm9wX3BhcmFtZXRlcl9zZXRzID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBydHBoMjY0cGF5LT51cGRhdGVfY2FwcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09ORklHX0lOVEVSVkFMOgotICAgICAgcnRwaDI2NHBheS0+c3BzcHBzX2ludGVydmFsID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjRfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBIMjY0UGF5ICpydHBoMjY0cGF5OwotCi0gIHJ0cGgyNjRwYXkgPSBHU1RfUlRQX0gyNjRfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TUFJPUF9QQVJBTUVURVJfU0VUUzoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHJ0cGgyNjRwYXktPnNwcm9wX3BhcmFtZXRlcl9zZXRzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05GSUdfSU5URVJWQUw6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBydHBoMjY0cGF5LT5zcHNwcHNfaW50ZXJ2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9oMjY0X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGgyNjRwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfSDI2NF9QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjY0cGF5LmggYi9nc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVhNWU5Zi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjRwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9IMjY0X1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0gyNjRfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfSDI2NF9QQVkgXAotICAoZ3N0X3J0cF9oMjY0X3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0gyNjRfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0gyNjRfUEFZLEdzdFJ0cEgyNjRQYXkpKQotI2RlZmluZSBHU1RfUlRQX0gyNjRfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9IMjY0X1BBWSxHc3RSdHBIMjY0UGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0gyNjRfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0gyNjRfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjY0X1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2NF9QQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2NFBheSBHc3RSdHBIMjY0UGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjRQYXlDbGFzcyBHc3RSdHBIMjY0UGF5Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfSDI2NF9TVFJFQU1fRk9STUFUX1VOS05PV04sCi0gIEdTVF9IMjY0X1NUUkVBTV9GT1JNQVRfQllURVNUUkVBTSwKLSAgR1NUX0gyNjRfU1RSRUFNX0ZPUk1BVF9BVkMKLX0gR3N0SDI2NFN0cmVhbUZvcm1hdDsKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9IMjY0X0FMSUdOTUVOVF9VTktOT1dOLAotICBHU1RfSDI2NF9BTElHTk1FTlRfTkFMLAotICBHU1RfSDI2NF9BTElHTk1FTlRfQVUKLX0gR3N0SDI2NEFsaWdubWVudDsKLQotc3RydWN0IF9Hc3RSdHBIMjY0UGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgZ3VpbnQgcHJvZmlsZTsKLSAgR1B0ckFycmF5ICpzcHMsICpwcHM7Ci0KLSAgR3N0SDI2NFN0cmVhbUZvcm1hdCBzdHJlYW1fZm9ybWF0OwotICBHc3RIMjY0QWxpZ25tZW50IGFsaWdubWVudDsKLSAgZ3VpbnQgbmFsX2xlbmd0aF9zaXplOwotICBHQXJyYXkgKnF1ZXVlOwotCi0gIGdjaGFyICpzcHJvcF9wYXJhbWV0ZXJfc2V0czsKLSAgZ2Jvb2xlYW4gdXBkYXRlX2NhcHM7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLQotICBnaW50IHNwc3Bwc19pbnRlcnZhbDsKLSAgZ2Jvb2xlYW4gc2VuZF9zcHNwcHM7Ci0gIEdzdENsb2NrVGltZSBsYXN0X3Nwc3BwczsKLQotICAvKiBUUlVFIGlmIHRoZSBuZXh0IE5BTFUgcHJvY2Vzc2VkIHNob3VsZCBoYXZlIHRoZSBERUxUQV9VTklUIGZsYWcgKi8KLSAgZ2Jvb2xlYW4gZGVsdGFfdW5pdDsKLSAgLyogVFJVRSBpZiB0aGUgbmV4dCBOQUxVIHByb2Nlc3NlZCBzaG91bGQgaGF2ZSB0aGUgRElTQ09OVCBmbGFnICovCi0gIGdib29sZWFuIGRpc2NvbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cEgyNjRQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfaDI2NF9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2gyNjRfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0gyNjRfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2NWRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZGNiNGIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MDQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSA8MjAxND4gSnVyZ2VuIFNsb3dhY2sgPGp1cmdlbnNsb3dhY2tAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwaDI2NWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwaDI2NWRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBoMjY1ZGVwYXlfZGVidWcpCi0KLS8qIFRoaXMgaXMgd2hhdCB3ZSdsbCBkZWZhdWx0IHRvIHdoZW4gZG93bnN0cmVhbSBoYXNuJ3QKLSAqIGV4cHJlc3NlZCBhIHJlc3RyaWN0aW9uIG9yIHByZWZlcmVuY2UgdmlhIGNhcHMgKi8KLSNkZWZpbmUgREVGQVVMVF9CWVRFX1NUUkVBTSAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9BQ0NFU1NfVU5JVCAgIEZBTFNFCi0KLS8qIDMgemVybyBieXRlcyBzeW5jd29yZCAqLwotc3RhdGljIGNvbnN0IGd1aW50OCBzeW5jX2J5dGVzW10gPSB7IDAsIDAsIDAsIDEgfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaDI2NV9kZXBheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKAotICAgICAgICAvKiBGSVhNRSAtIGh2YzEgYW5kIGhldjEgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQgKi8KLSAgICAgICAgLyoidmlkZW8veC1oMjY1LCAiCi0gICAgICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgaHZjMSwgYWxpZ25tZW50ID0gKHN0cmluZykgYXU7ICIKLSAgICAgICAgICAgInZpZGVvL3gtaDI2NSwgIgotICAgICAgICAgICAic3RyZWFtLWZvcm1hdCA9IChzdHJpbmcpIGhldjEsIGFsaWdubWVudCA9IChzdHJpbmcpIGF1OyAiICovCi0gICAgICAgICJ2aWRlby94LWgyNjUsICIKLSAgICAgICAgInN0cmVhbS1mb3JtYXQgPSAoc3RyaW5nKSBieXRlLXN0cmVhbSwgYWxpZ25tZW50ID0gKHN0cmluZykgeyBuYWwsIGF1IH0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2gyNjVfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiSDI2NVwiIikKLSAgICAgICAgLyoqIG9wdGlvbmFsIHBhcmFtZXRlcnMgKiovCi0gICAgLyogInByb2ZpbGUtc3BhY2UgPSAoaW50KSBbIDAsIDMgXSwgIiAqLwotICAgIC8qICJwcm9maWxlLWlkID0gKGludCkgWyAwLCAzMSBdLCAiICovCi0gICAgLyogInRpZXItZmxhZyA9IChpbnQpIFsgMCwgMSBdLCAiICovCi0gICAgLyogImxldmVsLWlkID0gKGludCkgWyAwLCAyNTUgXSwgIiAqLwotICAgIC8qICJpbnRlcm9wLWNvbnN0cmFpbnRzID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogInByb2ZpbGUtY29tcGF0aWJpbGl0eS1pbmRpY2F0b3IgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAic3Byb3Atc3ViLWxheWVyLWlkID0gKGludCkgWyAwLCA2IF0sICIgKi8KLSAgICAvKiAicmVjdi1zdWItbGF5ZXItaWQgPSAoaW50KSBbIDAsIDYgXSwgIiAqLwotICAgIC8qICJtYXgtcmVjdi1sZXZlbC1pZCA9IChpbnQpIFsgMCwgMjU1IF0sICIgKi8KLSAgICAvKiAidHgtbW9kZSA9IChzdHJpbmcpIHtNU1QgLCBTU1R9LCAiICovCi0gICAgLyogInNwcm9wLXZwcyA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJzcHJvcC1zcHMgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAic3Byb3AtcHBzID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogInNwcm9wLXNlaSA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJtYXgtbHNyID0gKGludCkgQU5ZLCAiICovLyogTVVTVCBiZSBpbiB0aGUgcmFuZ2Ugb2YgTWF4THVtYVNSIHRvIDE2ICogTWF4THVtYVNSLCBpbmNsdXNpdmUgKi8KLSAgICAvKiAibWF4LWxwcyA9IChpbnQpIEFOWSwgIiAqLy8qIE1VU1QgYmUgaW4gdGhlIHJhbmdlIG9mIE1heEx1bWFQUyB0byAxNiAqIE1heEx1bWFQUywgaW5jbHVzaXZlICovCi0gICAgLyogIm1heC1jcGIgPSAoaW50KSBBTlksICIgKi8vKiBNVVNUIGJlIGluIHRoZSByYW5nZSBvZiBNYXhDUEIgdG8gMTYgKiBNYXhDUEIsIGluY2x1c2l2ZSAqLwotICAgIC8qICJtYXgtZHBiID0gKGludCkgWzEsIDE2XSwgIiAqLwotICAgIC8qICJtYXgtYnIgPSAoaW50KSBBTlksICIgKi8vKiBNVVNUIGJlIGluIHRoZSByYW5nZSBvZiBNYXhCUiB0byAxNiAqIE1heEJSLCBpbmNsdXNpdmUsIGZvciB0aGUgaGlnaGVzdCBsZXZlbCAqLwotICAgIC8qICJtYXgtdHIgPSAoaW50KSBBTlksICIgKi8vKiBNVVNUIGJlIGluIHRoZSByYW5nZSBvZiBNYXhUaWxlUm93cyB0byAxNiAqIE1heFRpbGVSb3dzLCBpbmNsdXNpdmUsIGZvciB0aGUgaGlnaGVzdCBsZXZlbCAqLwotICAgIC8qICJtYXgtdGMgPSAoaW50KSBBTlksICIgKi8vKiBNVVNUIGJlIGluIHRoZSByYW5nZSBvZiBNYXhUaWxlQ29scyB0byAxNiAqIE1heFRpbGVDb2xzLCBpbmNsdXNpdmUsIGZvciB0aGUgaGlnaGVzdCBsZXZlbCAqLwotICAgIC8qICJtYXgtZnBzID0gKGludCkgQU5ZLCAiICovCi0gICAgLyogInNwcm9wLW1heC1kb24tZGlmZiA9IChpbnQpIFswLCAzMjc2N10sICIgKi8KLSAgICAvKiAic3Byb3AtZGVwYWNrLWJ1Zi1uYWx1cyA9IChpbnQpIFswLCAzMjc2N10sICIgKi8KLSAgICAvKiAic3Byb3AtZGVwYWNrLWJ1Zi1uYWx1cyA9IChpbnQpIFswLCA0Mjk0OTY3Mjk1XSwgIiAqLwotICAgIC8qICJkZXBhY2stYnVmLWNhcCA9IChpbnQpIFsxLCA0Mjk0OTY3Mjk1XSwgIiAqLwotICAgIC8qICJzcHJvcC1zZWdtZW50YXRpb24taWQgPSAoaW50KSBbMCwgM10sICIgKi8KLSAgICAvKiAic3Byb3Atc3BhdGlhbC1zZWdtZW50YXRpb24taWRjID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogImRlYy1wYXJhbGxlbC1jYXAgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfaDI2NV9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBIMjY1RGVwYXksIGdzdF9ydHBfaDI2NV9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2gyNjVfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9oMjY1X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfaDI2NV9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9oMjY1X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaDI2NV9kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2NV9kZXBheV9jbGFzc19pbml0IChHc3RSdHBIMjY1RGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2gyNjVfZGVwYXlfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9oMjY1X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaDI2NV9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBIMjY1IGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBIMjY1IHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA3Nzk4KSIsCi0gICAgICAiSnVyZ2VuIFNsb3dhY2sgPGp1cmdlbnNsb3dhY2tAZ21haWwuY29tPiIpOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX2gyNjVfZGVwYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfaDI2NV9kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfaDI2NV9kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5oYW5kbGVfZXZlbnQgPSBnc3RfcnRwX2gyNjVfZGVwYXlfaGFuZGxlX2V2ZW50OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjY1X2RlcGF5X2luaXQgKEdzdFJ0cEgyNjVEZXBheSAqIHJ0cGgyNjVkZXBheSkKLXsKLSAgcnRwaDI2NWRlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBoMjY1ZGVwYXktPnBpY3R1cmVfYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgcnRwaDI2NWRlcGF5LT5ieXRlX3N0cmVhbSA9IERFRkFVTFRfQllURV9TVFJFQU07Ci0gIHJ0cGgyNjVkZXBheS0+c3RyZWFtX2Zvcm1hdCA9IE5VTEw7Ci0gIHJ0cGgyNjVkZXBheS0+bWVyZ2UgPSBERUZBVUxUX0FDQ0VTU19VTklUOwotICBydHBoMjY1ZGVwYXktPnZwcyA9IGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBydHBoMjY1ZGVwYXktPnNwcyA9IGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBydHBoMjY1ZGVwYXktPnBwcyA9IGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjY1X2RlcGF5X3Jlc2V0IChHc3RSdHBIMjY1RGVwYXkgKiBydHBoMjY1ZGVwYXkpCi17Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChydHBoMjY1ZGVwYXktPmFkYXB0ZXIpOwotICBydHBoMjY1ZGVwYXktPndhaXRfc3RhcnQgPSBUUlVFOwotICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2NWRlcGF5LT5waWN0dXJlX2FkYXB0ZXIpOwotICBydHBoMjY1ZGVwYXktPnBpY3R1cmVfc3RhcnQgPSBGQUxTRTsKLSAgcnRwaDI2NWRlcGF5LT5sYXN0X2tleWZyYW1lID0gRkFMU0U7Ci0gIHJ0cGgyNjVkZXBheS0+bGFzdF90cyA9IDA7Ci0gIHJ0cGgyNjVkZXBheS0+Y3VycmVudF9mdV90eXBlID0gMDsKLSAgcnRwaDI2NWRlcGF5LT5uZXdfY29kZWNfZGF0YSA9IEZBTFNFOwotICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAocnRwaDI2NWRlcGF5LT52cHMsIDApOwotICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAocnRwaDI2NWRlcGF5LT5zcHMsIDApOwotICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAocnRwaDI2NWRlcGF5LT5wcHMsIDApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjY1X2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBIMjY1RGVwYXkgKnJ0cGgyNjVkZXBheTsKLQotICBydHBoMjY1ZGVwYXkgPSBHU1RfUlRQX0gyNjVfREVQQVkgKG9iamVjdCk7Ci0KLSAgaWYgKHJ0cGgyNjVkZXBheS0+Y29kZWNfZGF0YSkKLSAgICBnc3RfYnVmZmVyX3VucmVmIChydHBoMjY1ZGVwYXktPmNvZGVjX2RhdGEpOwotCi0gIGdfZnJlZSAocnRwaDI2NWRlcGF5LT5zdHJlYW1fZm9ybWF0KTsKLQotICBnX29iamVjdF91bnJlZiAocnRwaDI2NWRlcGF5LT5hZGFwdGVyKTsKLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGgyNjVkZXBheS0+cGljdHVyZV9hZGFwdGVyKTsKLQotICBnX3B0cl9hcnJheV9mcmVlIChydHBoMjY1ZGVwYXktPnZwcywgVFJVRSk7Ci0gIGdfcHRyX2FycmF5X2ZyZWUgKHJ0cGgyNjVkZXBheS0+c3BzLCBUUlVFKTsKLSAgZ19wdHJfYXJyYXlfZnJlZSAocnRwaDI2NWRlcGF5LT5wcHMsIFRSVUUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2NV9kZXBheV9uZWdvdGlhdGUgKEdzdFJ0cEgyNjVEZXBheSAqIHJ0cGgyNjVkZXBheSkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludCBieXRlX3N0cmVhbSA9IC0xOwotICBnaW50IG1lcmdlID0gLTE7Ci0KLSAgY2FwcyA9Ci0gICAgICBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChydHBoMjY1ZGVwYXkpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJhbGxvd2VkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBpZiAoY2FwcykgewotICAgIGlmIChnc3RfY2Fwc19nZXRfc2l6ZSAoY2FwcykgPiAwKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICAgIGNvbnN0IGdjaGFyICpzdHIgPSBOVUxMOwotCi0gICAgICBpZiAoKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInN0cmVhbS1mb3JtYXQiKSkpIHsKLSAgICAgICAgZ19mcmVlIChydHBoMjY1ZGVwYXktPnN0cmVhbV9mb3JtYXQpOwotICAgICAgICBydHBoMjY1ZGVwYXktPnN0cmVhbV9mb3JtYXQgPSBnX3N0cmR1cCAoc3RyKTsKLQotICAgICAgICBpZiAoc3RyY21wIChzdHIsICJoZXYxIikgPT0gMCkgewotICAgICAgICAgIGJ5dGVfc3RyZWFtID0gRkFMU0U7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJodmMxIikgPT0gMCkgewotICAgICAgICAgIGJ5dGVfc3RyZWFtID0gRkFMU0U7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJieXRlLXN0cmVhbSIpID09IDApIHsKLSAgICAgICAgICBieXRlX3N0cmVhbSA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NWRlcGF5LCAidW5rbm93biBzdHJlYW0tZm9ybWF0OiAlcyIsIHN0cik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKChzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJhbGlnbm1lbnQiKSkpIHsKLSAgICAgICAgaWYgKHN0cmNtcCAoc3RyLCAiYXUiKSA9PSAwKSB7Ci0gICAgICAgICAgbWVyZ2UgPSBUUlVFOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoc3RyLCAibmFsIikgPT0gMCkgewotICAgICAgICAgIG1lcmdlID0gRkFMU0U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NWRlcGF5LCAidW5rbm93biBhbGlnbm1lbnQ6ICVzIiwgc3RyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIH0KLQotICBpZiAoYnl0ZV9zdHJlYW0gIT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJkb3duc3RyZWFtIHJlcXVpcmVzIGJ5dGUtc3RyZWFtICVkIiwKLSAgICAgICAgYnl0ZV9zdHJlYW0pOwotICAgIHJ0cGgyNjVkZXBheS0+Ynl0ZV9zdHJlYW0gPSBieXRlX3N0cmVhbTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJkZWZhdWx0aW5nIHRvIGJ5dGUtc3RyZWFtICVkIiwKLSAgICAgICAgREVGQVVMVF9CWVRFX1NUUkVBTSk7Ci0gICAgZ19mcmVlIChydHBoMjY1ZGVwYXktPnN0cmVhbV9mb3JtYXQpOwotICAgIHJ0cGgyNjVkZXBheS0+c3RyZWFtX2Zvcm1hdCA9IGdfc3RyZHVwICgiYnl0ZS1zdHJlYW0iKTsKLSAgICBydHBoMjY1ZGVwYXktPmJ5dGVfc3RyZWFtID0gREVGQVVMVF9CWVRFX1NUUkVBTTsKLSAgfQotICBpZiAobWVyZ2UgIT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJkb3duc3RyZWFtIHJlcXVpcmVzIG1lcmdlICVkIiwgbWVyZ2UpOwotICAgIHJ0cGgyNjVkZXBheS0+bWVyZ2UgPSBtZXJnZTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJkZWZhdWx0aW5nIHRvIG1lcmdlICVkIiwKLSAgICAgICAgREVGQVVMVF9BQ0NFU1NfVU5JVCk7Ci0gICAgcnRwaDI2NWRlcGF5LT5tZXJnZSA9IERFRkFVTFRfQUNDRVNTX1VOSVQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1wYXJzZV9zcHMgKEdzdE1hcEluZm8gKiBtYXAsIGd1aW50MzIgKiBzcHNfaWQpCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIHBhcnNlIHNlcV9wYXJhbWV0ZXJfc2V0X2lkICovCi0gIEdzdEJpdFJlYWRlciBiciA9IEdTVF9CSVRfUkVBREVSX0lOSVQgKG1hcC0+ZGF0YSArIDE1LAotICAgICAgbWFwLT5zaXplIC0gMTUpOwotCi0gIGlmIChtYXAtPnNpemUgPCAxNikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsIHNwc19pZCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBhcnNlX3BwcyAoR3N0TWFwSW5mbyAqIG1hcCwgZ3VpbnQzMiAqIHNwc19pZCwgZ3VpbnQzMiAqIHBwc19pZCkKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gcGFyc2UgcGljdHVyZV9wYXJhbWV0ZXJfc2V0X2lkICovCi0gIEdzdEJpdFJlYWRlciBiciA9IEdTVF9CSVRfUkVBREVSX0lOSVQgKG1hcC0+ZGF0YSArIDIsCi0gICAgICBtYXAtPnNpemUgLSAyKTsKLQotICBpZiAobWFwLT5zaXplIDwgMykKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsIHBwc19pZCkpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9ydHBfcmVhZF9nb2xvbWIgKCZiciwgc3BzX2lkKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjVfc2V0X3NyY19jYXBzIChHc3RSdHBIMjY1RGVwYXkgKiBydHBoMjY1ZGVwYXkpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0Q2FwcyAqb2xkX2NhcHM7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0KLSAgaWYgKCFydHBoMjY1ZGVwYXktPmJ5dGVfc3RyZWFtICYmCi0gICAgICAoIXJ0cGgyNjVkZXBheS0+bmV3X2NvZGVjX2RhdGEgfHwKLSAgICAgICAgICBydHBoMjY1ZGVwYXktPnZwcy0+bGVuID09IDAgfHwgcnRwaDI2NWRlcGF5LT5zcHMtPmxlbiA9PSAwCi0gICAgICAgICAgfHwgcnRwaDI2NWRlcGF5LT5wcHMtPmxlbiA9PSAwKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtaDI2NSIsCi0gICAgICAic3RyZWFtLWZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIHJ0cGgyNjVkZXBheS0+c3RyZWFtX2Zvcm1hdCwKLSAgICAgICJhbGlnbm1lbnQiLCBHX1RZUEVfU1RSSU5HLCBydHBoMjY1ZGVwYXktPm1lcmdlID8gImF1IiA6ICJuYWwiLCBOVUxMKTsKLQotICBpZiAoIXJ0cGgyNjVkZXBheS0+Ynl0ZV9zdHJlYW0pIHsKLSAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGE7Ci0gICAgZ2ludCBpID0gMDsKLSAgICBnaW50IGxlbjsKLSAgICBndWludCBudW1fdnBzID0gcnRwaDI2NWRlcGF5LT52cHMtPmxlbjsKLSAgICBndWludCBudW1fc3BzID0gcnRwaDI2NWRlcGF5LT5zcHMtPmxlbjsKLSAgICBndWludCBudW1fcHBzID0gcnRwaDI2NWRlcGF5LT5wcHMtPmxlbjsKLSAgICBHc3RNYXBJbmZvIG1hcCwgbmFsbWFwOwotICAgIGd1aW50OCAqZGF0YTsKLSAgICBnaW50IG5sOwotICAgIGd1aW50OCBudW1fYXJyYXlzID0gMDsKLSAgICBndWludCBuZXdfc2l6ZTsKLSAgICBHc3RCaXRSZWFkZXIgYnI7Ci0gICAgZ3VpbnQzMiB0bXA7Ci0gICAgZ3VpbnQ4IHRtcDggPSAwOwotICAgIGd1aW50MzIgbWF4X3N1Yl9sYXllcnNfbWludXMxLCB0ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcsIGNocm9tYV9mb3JtYXRfaWRjLAotICAgICAgICBiaXRfZGVwdGhfbHVtYV9taW51czgsIGJpdF9kZXB0aF9jaHJvbWFfbWludXM4LAotICAgICAgICBtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjOwotCi0gICAgLyogRml4bWU6IEN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90IGVtYmVkZGluZyBTRUkgaW4gY29kZWNfZGF0YSAqLwotCi0gICAgaWYgKG51bV9zcHMgPT0gMCkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8qIHN0YXJ0IHdpdGggMjMgYnl0ZXMgaGVhZGVyICovCi0gICAgbGVuID0gMjM7Ci0KLSAgICBudW1fYXJyYXlzID0gKG51bV92cHMgPiAwKSArIChudW1fc3BzID4gMCkgKyAobnVtX3BwcyA+IDApOwotICAgIGxlbiArPSBudW1fYXJyYXlzOwotCi0gICAgLyogYWRkIHNpemUgb2YgdnBzLCBzcHMgJiBwcHMgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZwczsgaSsrKQotICAgICAgbGVuICs9IDIgKyBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT52cHMsIGkpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NwczsgaSsrKQotICAgICAgbGVuICs9IDIgKyBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT5zcHMsIGkpKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BwczsgaSsrKQotICAgICAgbGVuICs9IDIgKyBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT5wcHMsIGkpKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVkZXBheSwKLSAgICAgICAgImNvbnN0cnVjdGluZyBjb2RlY19kYXRhOiBudW1fdnBzID0lZCBudW1fc3BzPSVkLCBudW1fcHBzPSVkIiwgbnVtX3ZwcywKLSAgICAgICAgbnVtX3NwcywgbnVtX3Bwcyk7Ci0KLSAgICBjb2RlY19kYXRhID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChsZW4pOwotICAgIGdfZGVidWcgKCJhbGxvY19sZW46ICV1IiwgbGVuKTsKLSAgICBnc3RfYnVmZmVyX21hcCAoY29kZWNfZGF0YSwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICAgIGRhdGEgPSBtYXAuZGF0YTsKLQotICAgIG1lbXNldCAoZGF0YSwgMCwgbWFwLnNpemUpOwotCi0gICAgLyogUGFyc2luZyBzcHMgdG8gZ2V0IHRoZSBpbmZvIHJlcXVpcmVkIGZ1cnRoZXIgb24gKi8KLQotICAgIGdzdF9idWZmZXJfbWFwIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT5zcHMsIDApLCAmbmFsbWFwLAotICAgICAgICBHU1RfTUFQX1JFQUQpOwotCi0gICAgbWF4X3N1Yl9sYXllcnNfbWludXMxID0gKChuYWxtYXAuZGF0YVsyXSkgPj4gMSkgJiAweDA3OwotICAgIHRlbXBvcmFsX2lkX25lc3RpbmdfZmxhZyA9IG5hbG1hcC5kYXRhWzJdICYgMHgwMTsKLQotICAgIGdzdF9iaXRfcmVhZGVyX2luaXQgKCZiciwgbmFsbWFwLmRhdGEgKyAxNSwgbmFsbWFwLnNpemUgLSAxNSk7Ci0KLSAgICBnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsICZ0bXApOyAgICAvKiBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgKi8KLSAgICBnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsICZjaHJvbWFfZm9ybWF0X2lkYyk7ICAgICAgLyogY2hyb21hX2Zvcm1hdF9pZGMgKi8KLQotICAgIGlmIChjaHJvbWFfZm9ybWF0X2lkYyA9PSAzKQotCi0gICAgICBnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJmJyLCAmdG1wOCwgMSk7ICAgIC8qIHNlcGFyYXRlX2NvbG91cl9wbGFuZV9mbGFnICovCi0KLSAgICBnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsICZ0bXApOyAgICAvKiBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzICovCi0gICAgZ3N0X3J0cF9yZWFkX2dvbG9tYiAoJmJyLCAmdG1wKTsgICAgLyogcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMgKi8KLQotICAgIGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZ0bXA4LCAxKTsgICAgICAvKiBjb25mb3JtYW5jZV93aW5kb3dfZmxhZyAqLwotICAgIGlmICh0bXA4KSB7Ci0gICAgICBnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsICZ0bXApOyAgLyogY29uZl93aW5fbGVmdF9vZmZzZXQgKi8KLSAgICAgIGdzdF9ydHBfcmVhZF9nb2xvbWIgKCZiciwgJnRtcCk7ICAvKiBjb25mX3dpbl9yaWdodF9vZmZzZXQgKi8KLSAgICAgIGdzdF9ydHBfcmVhZF9nb2xvbWIgKCZiciwgJnRtcCk7ICAvKiBjb25mX3dpbl90b3Bfb2Zmc2V0ICovCi0gICAgICBnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsICZ0bXApOyAgLyogY29uZl93aW5fYm90dG9tX29mZnNldCAqLwotICAgIH0KLQotICAgIGdzdF9ydHBfcmVhZF9nb2xvbWIgKCZiciwgJmJpdF9kZXB0aF9sdW1hX21pbnVzOCk7ICAvKiBiaXRfZGVwdGhfbHVtYV9taW51czggKi8KLSAgICBnc3RfcnRwX3JlYWRfZ29sb21iICgmYnIsICZiaXRfZGVwdGhfY2hyb21hX21pbnVzOCk7ICAgICAgICAvKiBiaXRfZGVwdGhfY2hyb21hX21pbnVzOCAqLwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NWRlcGF5LAotICAgICAgICAiSWdub3JpbmcgbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uIGZvciBub3cgKGFzc3VtaW5nIHplcm8pIik7Ci0KLSAgICBtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjID0gMDsgICAvKiBOT1RFIC0gd2UgaWdub3JlIHRoaXMgZm9yIG5vdywgYnV0IGluIGEgcGVyZmVjdCB3b3JsZCwgd2Ugc2hvdWxkIGNvbnRpbnVlIHBhcnNpbmcgdG8gb2J0YWluIHRoZSByZWFsIHZhbHVlICovCi0KLSAgICBubCA9IG5hbG1hcC5zaXplOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjVkZXBheS0+c3BzLCAwKSwgJm5hbG1hcCk7Ci0KLSAgICAvKiBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25WZXJzaW9uID0gMSAqLwotICAgIGRhdGFbMF0gPSAxOwotCi0gICAgLyogQ29weSBmcm9tIHByb2ZpbGVfdGllcl9sZXZlbCAoUmVjLiBJVFUtVCBILjI2NSAoMDQvMjAxMykgc2VjdGlvbiA3LjMuMwotICAgICAqCi0gICAgICogcHJvZmlsZV9zcGFjZSB8IHRpZXJfZmxhdCB8IHByb2ZpbGVfaWRjIHwKLSAgICAgKiBwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3MgfCBjb25zdHJhaW50X2luZGljYXRvcl9mbGFncyB8Ci0gICAgICogbGV2ZWxfaWRjIHwgcHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcgfCBpbnRlcmxhY2VkX3NvdXJjZV9mbGFnCi0gICAgICogbm9uX3BhY2tlZF9jb25zdHJhaW50X2ZsYWcgfCBmcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZwotICAgICAqIHJlc2VydmVkX3plcm9fNDRiaXRzIHwgbGV2ZWxfaWRjICovCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY1ZGVwYXktPnNwcywgMCksICZuYWxtYXAsCi0gICAgICAgIEdTVF9NQVBfUkVBRCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0gICAgICBkYXRhW2kgKyAxXSA9IG5hbG1hcC5kYXRhW2ldOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY1ZGVwYXktPnNwcywgMCksICZuYWxtYXApOwotCi0gICAgLyogbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYyAqLwotICAgIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEgKyAxMywgbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYyk7Ci0gICAgZGF0YVsxM10gfD0gMHhmMDsKLSAgICBkYXRhWzE1XSA9IDB4ZmM7ICAgICAgICAgICAgLyoga2VlcGluZyBwYXJyYWxsZWxpc21UeXBlIGFzIHplcm8gKHVua25vd24pICovCi0gICAgZGF0YVsxNl0gPSAweGZjIHwgY2hyb21hX2Zvcm1hdF9pZGM7Ci0gICAgZGF0YVsxN10gPSAweGY4IHwgYml0X2RlcHRoX2x1bWFfbWludXM4OwotICAgIGRhdGFbMThdID0gMHhmOCB8IGJpdF9kZXB0aF9jaHJvbWFfbWludXM4OwotICAgIGRhdGFbMTldID0gMHgwMDsgICAgICAgICAgICAvKiBrZWVwIGF2Z0ZyYW1lUmF0ZSBhcyB1bnNwZWNpZmllZCAqLwotICAgIGRhdGFbMjBdID0gMHgwMDsgICAgICAgICAgICAvKiBrZWVwIGF2Z0ZyYW1lUmF0ZSBhcyB1bnNwZWNpZmllZCAqLwotICAgIC8qIGNvbnN0RnJhbWVSYXRlKDIgYml0cyk6IDAsIHN0cmVhbSBtYXkgb3IgbWF5IG5vdCBiZSBvZiBjb25zdGFudCBmcmFtZXJhdGUKLSAgICAgKiBudW1UZW1wb3JhbExheWVycyAoMyBiaXRzKTogbnVtYmVyIG9mIHRlbXBvcmFsIGxheWVycywgdmFsdWUgZnJvbSBTUFMKLSAgICAgKiBUZW1wb3JhbElkTmVzdGVkICgxIGJpdCk6IHNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcgZnJvbSBTUFMKLSAgICAgKiBsZW5ndGhTaXplTWludXNPbmUgKDIgYml0cyk6IHBsdXMgMSBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgTkFMVW5pdExlbmd0aCAqLwotICAgIGRhdGFbMjFdID0KLSAgICAgICAgMHgwMCB8ICgobWF4X3N1Yl9sYXllcnNfbWludXMxICsKLSAgICAgICAgICAgIDEpIDw8IDMpIHwgKHRlbXBvcmFsX2lkX25lc3RpbmdfZmxhZyA8PCAyKSB8IChubCAtIDEpOwotICAgIEdTVF9XUklURV9VSU5UOCAoZGF0YSArIDIyLCBudW1fYXJyYXlzKTsgICAgLyogbnVtT2ZBcnJheXMgKi8KLQotICAgIGRhdGEgKz0gMjM7Ci0KLSAgICAvKiBjb3B5IGFsbCBWUFMgKi8KLSAgICBpZiAobnVtX3ZwcyA+IDApIHsKLSAgICAgIC8qIGFycmF5X2NvbXBsZXRlbmVzcyB8IHJlc2VydmVkX3plcm8gYml0IHwgbmFsX3VuaXRfdHlwZSAqLwotICAgICAgZGF0YVswXSA9IDB4MDAgfCAweDIwOwotICAgICAgZGF0YSsrOwotCi0gICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhLCBudW1fdnBzKTsKLSAgICAgIGRhdGEgKz0gMjsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IG51bV92cHM7IGkrKykgewotICAgICAgICBnc2l6ZSBuYWxfc2l6ZSA9Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT52cHMsIGkpKTsKLSAgICAgICAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSwgbmFsX3NpemUpOwotICAgICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY1ZGVwYXktPnZwcywgaSksIDAsCi0gICAgICAgICAgICBkYXRhICsgMiwgbmFsX3NpemUpOwotICAgICAgICBkYXRhICs9IDIgKyBuYWxfc2l6ZTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NWRlcGF5LCAiQ29waWVkIFZQUyAlZCBvZiBsZW5ndGggJXUiLCBpLAotICAgICAgICAgICAgKGd1aW50KSBuYWxfc2l6ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogY29weSBhbGwgU1BTICovCi0gICAgaWYgKG51bV9zcHMgPiAwKSB7Ci0gICAgICAvKiBhcnJheV9jb21wbGV0ZW5lc3MgfCByZXNlcnZlZF96ZXJvIGJpdCB8IG5hbF91bml0X3R5cGUgKi8KLSAgICAgIGRhdGFbMF0gPSAweDAwIHwgMHgyMTsKLSAgICAgIGRhdGErKzsKLQotICAgICAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSwgbnVtX3Nwcyk7Ci0gICAgICBkYXRhICs9IDI7Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fc3BzOyBpKyspIHsKLSAgICAgICAgZ3NpemUgbmFsX3NpemUgPQotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjVkZXBheS0+c3BzLCBpKSk7Ci0gICAgICAgIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIG5hbF9zaXplKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT5zcHMsIGkpLCAwLAotICAgICAgICAgICAgZGF0YSArIDIsIG5hbF9zaXplKTsKLSAgICAgICAgZGF0YSArPSAyICsgbmFsX3NpemU7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVkZXBheSwgIkNvcGllZCBTUFMgJWQgb2YgbGVuZ3RoICV1IiwgaSwKLSAgICAgICAgICAgIChndWludCkgbmFsX3NpemUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIGNvcHkgYWxsIFBQUyAqLwotICAgIGlmIChudW1fcHBzID4gMCkgewotICAgICAgLyogYXJyYXlfY29tcGxldGVuZXNzIHwgcmVzZXJ2ZWRfemVybyBiaXQgfCBuYWxfdW5pdF90eXBlICovCi0gICAgICBkYXRhWzBdID0gMHgwMCB8IDB4MjI7Ci0gICAgICBkYXRhKys7Ci0KLSAgICAgIEdTVF9XUklURV9VSU5UMTZfQkUgKGRhdGEsIG51bV9wcHMpOwotICAgICAgZGF0YSArPSAyOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3BwczsgaSsrKSB7Ci0gICAgICAgIGdzaXplIG5hbF9zaXplID0KLSAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY1ZGVwYXktPnBwcywgaSkpOwotICAgICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhLCBuYWxfc2l6ZSk7Ci0gICAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjVkZXBheS0+cHBzLCBpKSwgMCwKLSAgICAgICAgICAgIGRhdGEgKyAyLCBuYWxfc2l6ZSk7Ci0gICAgICAgIGRhdGEgKz0gMiArIG5hbF9zaXplOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJDb3BpZWQgUFBTICVkIG9mIGxlbmd0aCAldSIsIGksCi0gICAgICAgICAgICAoZ3VpbnQpIG5hbF9zaXplKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBuZXdfc2l6ZSA9IGRhdGEgLSBtYXAuZGF0YTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChjb2RlY19kYXRhLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3NldF9zaXplIChjb2RlY19kYXRhLCBuZXdfc2l6ZSk7Ci0KLSAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzcmNjYXBzLAotICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgY29kZWNfZGF0YSwgTlVMTCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoY29kZWNfZGF0YSk7Ci0gIH0KLQotICBvbGRfY2FwcyA9Ci0gICAgICBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChydHBoMjY1ZGVwYXkpKTsKLSAgaWYgKG9sZF9jYXBzICE9IE5VTEwpIHsKLQotICAgIC8qIE9ubHkgdXBkYXRlIHRoZSBjYXBzIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gRm9yCi0gICAgICogQVZDIHdlIGRvbid0IHVwZGF0ZSBjYXBzIGlmIG9ubHkgdGhlIGNvZGVjX2RhdGEKLSAgICAgKiBjaGFuZ2VzLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW91ciBhcyBpbiBoMjY0cGFyc2UKLSAgICAgKiBhbmQgZ3N0cnRwaDI2NGRlcGF5Ci0gICAgICovCi0gICAgaWYgKHJ0cGgyNjVkZXBheS0+Ynl0ZV9zdHJlYW0pIHsKLSAgICAgIGlmICghZ3N0X2NhcHNfaXNfZXF1YWwgKHNyY2NhcHMsIG9sZF9jYXBzKSkKLSAgICAgICAgcmVzID0KLSAgICAgICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChydHBoMjY1ZGVwYXkpLAotICAgICAgICAgICAgc3JjY2Fwcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdzdENhcHMgKnRtcF9jYXBzID0gZ3N0X2NhcHNfY29weSAoc3JjY2Fwcyk7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKm9sZF9zLCAqdG1wX3M7Ci0KLSAgICAgIG9sZF9zID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob2xkX2NhcHMsIDApOwotICAgICAgdG1wX3MgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlICh0bXBfY2FwcywgMCk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKG9sZF9zLCAiY29kZWNfZGF0YSIpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAodG1wX3MsICJjb2RlY19kYXRhIiwKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChvbGRfcywgImNvZGVjX2RhdGEiKSk7Ci0KLSAgICAgIGlmICghZ3N0X2NhcHNfaXNfZXF1YWwgKG9sZF9jYXBzLCB0bXBfY2FwcykpCi0gICAgICAgIHJlcyA9Ci0gICAgICAgICAgICBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAocnRwaDI2NWRlcGF5KSwKLSAgICAgICAgICAgIHNyY2NhcHMpOwotICAgICAgZWxzZQotICAgICAgICByZXMgPSBUUlVFOwotCi0gICAgICBnc3RfY2Fwc191bnJlZiAodG1wX2NhcHMpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXMgPQotICAgICAgICBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAocnRwaDI2NWRlcGF5KSwKLSAgICAgICAgc3JjY2Fwcyk7Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgLyogSW5zZXJ0IFNQUyBhbmQgUFBTIGludG8gdGhlIHN0cmVhbSBvbiBuZXh0IG9wcG9ydHVuaXR5ICovCi0gIGlmIChydHBoMjY1ZGVwYXktPnNwcy0+bGVuID4gMCB8fCBydHBoMjY1ZGVwYXktPnBwcy0+bGVuID4gMCkgewotICAgIGdpbnQgaTsKLSAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGE7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ3VpbnQ4ICpkYXRhOwotICAgIGd1aW50IGxlbiA9IDA7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcnRwaDI2NWRlcGF5LT5zcHMtPmxlbjsgaSsrKSB7Ci0gICAgICBsZW4gKz0gNCArIGdzdF9idWZmZXJfZ2V0X3NpemUgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY1ZGVwYXktPnNwcywgaSkpOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBydHBoMjY1ZGVwYXktPnBwcy0+bGVuOyBpKyspIHsKLSAgICAgIGxlbiArPSA0ICsgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjVkZXBheS0+cHBzLCBpKSk7Ci0gICAgfQotCi0gICAgY29kZWNfZGF0YSA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuKTsKLSAgICBnc3RfYnVmZmVyX21hcCAoY29kZWNfZGF0YSwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgZGF0YSA9IG1hcC5kYXRhOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjVkZXBheS0+c3BzLT5sZW47IGkrKykgewotICAgICAgR3N0QnVmZmVyICpzcHNfYnVmID0gZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjVkZXBheS0+c3BzLCBpKTsKLSAgICAgIGd1aW50IHNwc19zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc3BzX2J1Zik7Ci0KLSAgICAgIGlmIChydHBoMjY1ZGVwYXktPmJ5dGVfc3RyZWFtKQotICAgICAgICBtZW1jcHkgKGRhdGEsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICAgICAgZWxzZQotICAgICAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChkYXRhLCBzcHNfc2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKHNwc19idWYsIDAsIGRhdGEgKyA0LCAtMSk7Ci0gICAgICBkYXRhICs9IDQgKyBzcHNfc2l6ZTsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcnRwaDI2NWRlcGF5LT5wcHMtPmxlbjsgaSsrKSB7Ci0gICAgICBHc3RCdWZmZXIgKnBwc19idWYgPSBnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NWRlcGF5LT5wcHMsIGkpOwotICAgICAgZ3VpbnQgcHBzX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChwcHNfYnVmKTsKLQotICAgICAgaWYgKHJ0cGgyNjVkZXBheS0+Ynl0ZV9zdHJlYW0pCi0gICAgICAgIG1lbWNweSAoZGF0YSwgc3luY19ieXRlcywgc2l6ZW9mIChzeW5jX2J5dGVzKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKGRhdGEsIHBwc19zaXplKTsKLSAgICAgIGdzdF9idWZmZXJfZXh0cmFjdCAocHBzX2J1ZiwgMCwgZGF0YSArIDQsIC0xKTsKLSAgICAgIGRhdGEgKz0gNCArIHBwc19zaXplOwotICAgIH0KLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGNvZGVjX2RhdGEsICZtYXApOwotICAgIGlmIChydHBoMjY1ZGVwYXktPmNvZGVjX2RhdGEpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChydHBoMjY1ZGVwYXktPmNvZGVjX2RhdGEpOwotICAgIHJ0cGgyNjVkZXBheS0+Y29kZWNfZGF0YSA9IGNvZGVjX2RhdGE7Ci0gIH0KLQotICBpZiAocmVzKQotICAgIHJ0cGgyNjVkZXBheS0+bmV3X2NvZGVjX2RhdGEgPSBGQUxTRTsKLQotICByZXR1cm4gcmVzOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9oMjY1X2FkZF92cHNfc3BzX3BwcyAoR3N0RWxlbWVudCAqIHJ0cGgyNjUsIEdQdHJBcnJheSAqIHZwc19hcnJheSwKLSAgICBHUHRyQXJyYXkgKiBzcHNfYXJyYXksIEdQdHJBcnJheSAqIHBwc19hcnJheSwgR3N0QnVmZmVyICogbmFsKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VjaGFyIHR5cGU7Ci0gIGd1aW50IGk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG5hbCwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICB0eXBlID0gKG1hcC5kYXRhWzBdID4+IDEpICYgMHgzZjsKLQotICBpZiAodHlwZSA9PSBHU1RfSDI2NV9WUFNfTlVUKSB7Ci0gICAgZ3VpbnQzMiB2cHNfaWQgPSAobWFwLmRhdGFbMl0gPj4gNCkgJiAweDBmOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHZwc19hcnJheS0+bGVuOyBpKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqdnBzID0gZ19wdHJfYXJyYXlfaW5kZXggKHZwc19hcnJheSwgaSk7Ci0gICAgICBHc3RNYXBJbmZvIHZwc21hcDsKLSAgICAgIGd1aW50MzIgdG1wX3Zwc19pZDsKLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKHZwcywgJnZwc21hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIHRtcF92cHNfaWQgPSAodnBzbWFwLmRhdGFbMl0gPj4gNCkgJiAweDBmOwotCi0gICAgICBpZiAodnBzX2lkID09IHRtcF92cHNfaWQpIHsKLSAgICAgICAgaWYgKG1hcC5zaXplID09IHZwc21hcC5zaXplICYmCi0gICAgICAgICAgICBtZW1jbXAgKG1hcC5kYXRhLCB2cHNtYXAuZGF0YSwgdnBzbWFwLnNpemUpID09IDApIHsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NSwgIlVuY2hhbmdlZCBWUFMgJXUsIG5vdCB1cGRhdGluZyIsIHZwc19pZCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAodnBzLCAmdnBzbWFwKTsKLSAgICAgICAgICBnb3RvIGRyb3A7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAodnBzLCAmdnBzbWFwKTsKLSAgICAgICAgICBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAodnBzX2FycmF5LCBpKTsKLSAgICAgICAgICBnX3B0cl9hcnJheV9hZGQgKHZwc19hcnJheSwgbmFsKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NSwgIk1vZGlmaWVkIFZQUyAldSwgcmVwbGFjaW5nIiwgdnBzX2lkKTsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHZwcywgJnZwc21hcCk7Ci0gICAgfQotICAgIEdTVF9MT0dfT0JKRUNUIChydHBoMjY1LCAiQWRkaW5nIG5ldyBWUFMgJXUiLCB2cHNfaWQpOwotICAgIGdfcHRyX2FycmF5X2FkZCAodnBzX2FycmF5LCBuYWwpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0gR1NUX0gyNjVfU1BTX05VVCkgewotICAgIGd1aW50MzIgc3BzX2lkOwotCi0gICAgaWYgKCFwYXJzZV9zcHMgKCZtYXAsICZzcHNfaWQpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cGgyNjUsICJJbnZhbGlkIFNQUywiCi0gICAgICAgICAgIiBjYW4ndCBwYXJzZSBzZXFfcGFyYW1ldGVyX3NldF9pZCIpOwotICAgICAgZ290byBkcm9wOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBzcHNfYXJyYXktPmxlbjsgaSsrKSB7Ci0gICAgICBHc3RCdWZmZXIgKnNwcyA9IGdfcHRyX2FycmF5X2luZGV4IChzcHNfYXJyYXksIGkpOwotICAgICAgR3N0TWFwSW5mbyBzcHNtYXA7Ci0gICAgICBndWludDMyIHRtcF9zcHNfaWQ7Ci0KLSAgICAgIGdzdF9idWZmZXJfbWFwIChzcHMsICZzcHNtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBwYXJzZV9zcHMgKCZzcHNtYXAsICZ0bXBfc3BzX2lkKTsKLQotICAgICAgaWYgKHNwc19pZCA9PSB0bXBfc3BzX2lkKSB7Ci0gICAgICAgIGlmIChtYXAuc2l6ZSA9PSBzcHNtYXAuc2l6ZSAmJgotICAgICAgICAgICAgbWVtY21wIChtYXAuZGF0YSwgc3BzbWFwLmRhdGEsIHNwc21hcC5zaXplKSA9PSAwKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjUsICJVbmNoYW5nZWQgU1BTICV1LCBub3QgdXBkYXRpbmciLCBzcHNfaWQpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHNwcywgJnNwc21hcCk7Ci0gICAgICAgICAgZ290byBkcm9wOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHNwcywgJnNwc21hcCk7Ci0gICAgICAgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKHNwc19hcnJheSwgaSk7Ci0gICAgICAgICAgZ19wdHJfYXJyYXlfYWRkIChzcHNfYXJyYXksIG5hbCk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjUsICJNb2RpZmllZCBTUFMgJXUsIHJlcGxhY2luZyIsIHNwc19pZCk7Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChzcHMsICZzcHNtYXApOwotICAgIH0KLSAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NSwgIkFkZGluZyBuZXcgU1BTICV1Iiwgc3BzX2lkKTsKLSAgICBnX3B0cl9hcnJheV9hZGQgKHNwc19hcnJheSwgbmFsKTsKLSAgfSBlbHNlIGlmICh0eXBlID09IEdTVF9IMjY1X1BQU19OVVQpIHsKLSAgICBndWludDMyIHNwc19pZDsKLSAgICBndWludDMyIHBwc19pZDsKLQotICAgIGlmICghcGFyc2VfcHBzICgmbWFwLCAmc3BzX2lkLCAmcHBzX2lkKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBoMjY1LCAiSW52YWxpZCBQUFMsIgotICAgICAgICAgICIgY2FuJ3QgcGFyc2Ugc2VxX3BhcmFtZXRlcl9zZXRfaWQgb3IgcGljX3BhcmFtZXRlcl9zZXRfaWQiKTsKLSAgICAgIGdvdG8gZHJvcDsKLSAgICB9Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcHBzX2FycmF5LT5sZW47IGkrKykgewotICAgICAgR3N0QnVmZmVyICpwcHMgPSBnX3B0cl9hcnJheV9pbmRleCAocHBzX2FycmF5LCBpKTsKLSAgICAgIEdzdE1hcEluZm8gcHBzbWFwOwotICAgICAgZ3VpbnQzMiB0bXBfc3BzX2lkOwotICAgICAgZ3VpbnQzMiB0bXBfcHBzX2lkOwotCi0KLSAgICAgIGdzdF9idWZmZXJfbWFwIChwcHMsICZwcHNtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBwYXJzZV9wcHMgKCZwcHNtYXAsICZ0bXBfc3BzX2lkLCAmdG1wX3Bwc19pZCk7Ci0KLSAgICAgIGlmIChwcHNfaWQgPT0gdG1wX3Bwc19pZCkgewotICAgICAgICBpZiAobWFwLnNpemUgPT0gcHBzbWFwLnNpemUgJiYKLSAgICAgICAgICAgIG1lbWNtcCAobWFwLmRhdGEsIHBwc21hcC5kYXRhLCBwcHNtYXAuc2l6ZSkgPT0gMCkgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBoMjY1LCAiVW5jaGFuZ2VkIFBQUyAldToldSwgbm90IHVwZGF0aW5nIiwgc3BzX2lkLAotICAgICAgICAgICAgICBwcHNfaWQpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHBwcywgJnBwc21hcCk7Ci0gICAgICAgICAgZ290byBkcm9wOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHBwcywgJnBwc21hcCk7Ci0gICAgICAgICAgZ19wdHJfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKHBwc19hcnJheSwgaSk7Ci0gICAgICAgICAgZ19wdHJfYXJyYXlfYWRkIChwcHNfYXJyYXksIG5hbCk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjUsICJNb2RpZmllZCBQUFMgJXU6JXUsIHJlcGxhY2luZyIsCi0gICAgICAgICAgICAgIHNwc19pZCwgcHBzX2lkKTsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHBwcywgJnBwc21hcCk7Ci0gICAgfQotICAgIEdTVF9MT0dfT0JKRUNUIChydHBoMjY1LCAiQWRkaW5nIG5ldyBQUFMgJXU6JWkiLCBzcHNfaWQsIHBwc19pZCk7Ci0gICAgZ19wdHJfYXJyYXlfYWRkIChwcHNfYXJyYXksIG5hbCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ290byBkcm9wOwotICB9Ci0KLWRvbmU6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG5hbCwgJm1hcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLWRyb3A6Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG5hbCwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG5hbCk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjVfZGVwYXlfYWRkX3Zwc19zcHNfcHBzIChHc3RSdHBIMjY1RGVwYXkgKiBydHBoMjY1ZGVwYXksCi0gICAgR3N0QnVmZmVyICogbmFsKQotewotICBpZiAoZ3N0X3J0cF9oMjY1X2FkZF92cHNfc3BzX3BwcyAoR1NUX0VMRU1FTlQgKHJ0cGgyNjVkZXBheSksCi0gICAgICAgICAgcnRwaDI2NWRlcGF5LT52cHMsIHJ0cGgyNjVkZXBheS0+c3BzLCBydHBoMjY1ZGVwYXktPnBwcywgbmFsKSkKLSAgICBydHBoMjY1ZGVwYXktPm5ld19jb2RlY19kYXRhID0gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjVfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgR3N0UnRwSDI2NURlcGF5ICpydHBoMjY1ZGVwYXk7Ci0gIGNvbnN0IGdjaGFyICp2cHM7Ci0gIGNvbnN0IGdjaGFyICpzcHM7Ci0gIGNvbnN0IGdjaGFyICpwcHM7Ci0gIGdjaGFyICpwczsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqcHRyOwotCi0gIHJ0cGgyNjVkZXBheSA9IEdTVF9SVFBfSDI2NV9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7Ci0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgLyogQmFzZTY0IGVuY29kZWQsIGNvbW1hIHNlcGFyYXRlZCBjb25maWcgTkFMcyAqLwotICB2cHMgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgInNwcm9wLXZwcyIpOwotICBzcHMgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgInNwcm9wLXNwcyIpOwotICBwcHMgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgInNwcm9wLXBwcyIpOwotICBpZiAodnBzID09IE5VTEwgfHwgc3BzID09IE5VTEwgfHwgcHBzID09IE5VTEwpIHsKLSAgICBwcyA9IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgcHMgPSBnX3N0cmR1cF9wcmludGYgKCIlcywlcywlcyIsIHZwcywgc3BzLCBwcHMpOwotICB9Ci0KLSAgLyogbmVnb3RpYXRlIHdpdGggZG93bnN0cmVhbSB3LnIudC4gb3V0cHV0IGZvcm1hdCBhbmQgYWxpZ25tZW50ICovCi0gIGdzdF9ydHBfaDI2NV9kZXBheV9uZWdvdGlhdGUgKHJ0cGgyNjVkZXBheSk7Ci0KLSAgaWYgKHJ0cGgyNjVkZXBheS0+Ynl0ZV9zdHJlYW0gJiYgcHMgIT0gTlVMTCkgewotICAgIC8qIGZvciBieXRlc3RyZWFtIHdlIG9ubHkgbmVlZCB0aGUgcGFyYW1ldGVyIHNldHMgYnV0IHdlIGRvbid0IGVycm9yIG91dAotICAgICAqIHdoZW4gdGhleSBhcmUgbm90IHRoZXJlLCB3ZSBhc3N1bWUgdGhleSBhcmUgaW4gdGhlIHN0cmVhbS4gKi8KLSAgICBnY2hhciAqKnBhcmFtczsKLSAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGE7Ci0gICAgZ3VpbnQgbGVuLCB0b3RhbDsKLSAgICBnaW50IGk7Ci0KLSAgICBwYXJhbXMgPSBnX3N0cnNwbGl0IChwcywgIiwiLCAwKTsKLQotICAgIC8qIGNvdW50IHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiBiYXNlNjQuIEFsc28gaW5jbHVkZSB0aGUgc3luYyBieXRlcyBpbgotICAgICAqIGZyb250IG9mIHRoZSBwYXJhbXMuICovCi0gICAgbGVuID0gMDsKLSAgICBmb3IgKGkgPSAwOyBwYXJhbXNbaV07IGkrKykgewotICAgICAgbGVuICs9IHN0cmxlbiAocGFyYW1zW2ldKTsKLSAgICAgIGxlbiArPSBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgIH0KLSAgICAvKiB3ZSBzZXJpb3VzbHkgb3ZlcnNob290IHRoZSBsZW5ndGgsIGJ1dCBpdCdzIGZpbmUuICovCi0gICAgY29kZWNfZGF0YSA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobGVuKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChjb2RlY19kYXRhLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBwdHIgPSBtYXAuZGF0YTsKLSAgICB0b3RhbCA9IDA7Ci0gICAgZm9yIChpID0gMDsgcGFyYW1zW2ldOyBpKyspIHsKLSAgICAgIGd1aW50IHNhdmUgPSAwOwotICAgICAgZ2ludCBzdGF0ZSA9IDA7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImRlY29kaW5nIHBhcmFtICVkICglcykiLCBpLCBwYXJhbXNbaV0pOwotICAgICAgbWVtY3B5IChwdHIsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICAgICAgcHRyICs9IHNpemVvZiAoc3luY19ieXRlcyk7Ci0gICAgICBsZW4gPQotICAgICAgICAgIGdfYmFzZTY0X2RlY29kZV9zdGVwIChwYXJhbXNbaV0sIHN0cmxlbiAocGFyYW1zW2ldKSwgcHRyLCAmc3RhdGUsCi0gICAgICAgICAgJnNhdmUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAiZGVjb2RlZCAlZCBieXRlcyIsIGxlbik7Ci0gICAgICB0b3RhbCArPSBsZW4gKyBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgICAgcHRyICs9IGxlbjsKLSAgICB9Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoY29kZWNfZGF0YSwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGNvZGVjX2RhdGEsIDAsIHRvdGFsKTsKLSAgICBnX3N0cmZyZWV2IChwYXJhbXMpOwotCi0gICAgLyoga2VlcCB0aGUgY29kZWNfZGF0YSwgd2UgbmVlZCB0byBzZW5kIGl0IGFzIHRoZSBmaXJzdCBidWZmZXIuIFdlIGNhbm5vdAotICAgICAqIHB1c2ggaXQgaW4gdGhlIGFkYXB0ZXIgYmVjYXVzZSB0aGUgYWRhcHRlciBtaWdodCBiZSBmbHVzaGVkIG9uIGRpc2NvbnQuCi0gICAgICovCi0gICAgaWYgKHJ0cGgyNjVkZXBheS0+Y29kZWNfZGF0YSkKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHJ0cGgyNjVkZXBheS0+Y29kZWNfZGF0YSk7Ci0gICAgcnRwaDI2NWRlcGF5LT5jb2RlY19kYXRhID0gY29kZWNfZGF0YTsKLSAgfSBlbHNlIGlmICghcnRwaDI2NWRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgIGdjaGFyICoqcGFyYW1zOwotICAgIGdpbnQgaTsKLQotICAgIGlmIChwcyA9PSBOVUxMKQotICAgICAgZ290byBpbmNvbXBsZXRlX2NhcHM7Ci0KLSAgICBwYXJhbXMgPSBnX3N0cnNwbGl0IChwcywgIiwiLCAwKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgIndlIGhhdmUgJWQgcGFyYW1zIiwgZ19zdHJ2X2xlbmd0aCAocGFyYW1zKSk7Ci0KLSAgICAvKiBzdGFydCB3aXRoIDIzIGJ5dGVzIGhlYWRlciAqLwotICAgIGZvciAoaSA9IDA7IHBhcmFtc1tpXTsgaSsrKSB7Ci0gICAgICBHc3RCdWZmZXIgKm5hbDsKLSAgICAgIEdzdE1hcEluZm8gbmFsbWFwOwotICAgICAgZ3NpemUgbmFsX2xlbjsKLSAgICAgIGd1aW50IHNhdmUgPSAwOwotICAgICAgZ2ludCBzdGF0ZSA9IDA7Ci0KLSAgICAgIG5hbF9sZW4gPSBzdHJsZW4gKHBhcmFtc1tpXSk7Ci0gICAgICBuYWwgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG5hbF9sZW4pOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKG5hbCwgJm5hbG1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotCi0gICAgICBuYWxfbGVuID0KLSAgICAgICAgICBnX2Jhc2U2NF9kZWNvZGVfc3RlcCAocGFyYW1zW2ldLCBuYWxfbGVuLCBuYWxtYXAuZGF0YSwgJnN0YXRlLCAmc2F2ZSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImFkZGluZyBwYXJhbSAlZCBhcyAlcyIsIGksCi0gICAgICAgICAgKCgobmFsbWFwLmRhdGFbMF0gPj4gMSkgJiAweDNmKSA9PQotICAgICAgICAgICAgICAzMikgPyAiVlBTIiA6ICgoKG5hbG1hcC5kYXRhWzBdID4+IDEpICYgMHgzZikgPT0KLSAgICAgICAgICAgICAgMzMpID8gIlNQUyIgOiAiUFBTIik7Ci0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG5hbCwgJm5hbG1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3NldF9zaXplIChuYWwsIG5hbF9sZW4pOwotCi0gICAgICBnc3RfcnRwX2gyNjVfZGVwYXlfYWRkX3Zwc19zcHNfcHBzIChydHBoMjY1ZGVwYXksIG5hbCk7Ci0gICAgfQotICAgIGdfc3RyZnJlZXYgKHBhcmFtcyk7Ci0KLSAgICBpZiAocnRwaDI2NWRlcGF5LT52cHMtPmxlbiA9PSAwIHx8IHJ0cGgyNjVkZXBheS0+c3BzLT5sZW4gPT0gMCB8fAotICAgICAgICBydHBoMjY1ZGVwYXktPnBwcy0+bGVuID09IDApIHsKLSAgICAgIGdvdG8gaW5jb21wbGV0ZV9jYXBzOwotICAgIH0KLSAgfQotCi0gIGdfZnJlZSAocHMpOwotCi0gIHJldHVybiBnc3RfcnRwX2gyNjVfc2V0X3NyY19jYXBzIChydHBoMjY1ZGVwYXkpOwotCi0gIC8qIEVSUk9SUyAqLwotaW5jb21wbGV0ZV9jYXBzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAid2UgaGF2ZSBpbmNvbXBsZXRlIGNhcHMsIgotICAgICAgICAiIGRvaW5nIHNldGNhcHMgbGF0ZXIiKTsKLSAgICBnX2ZyZWUgKHBzKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfaDI2NV9jb21wbGV0ZV9hdSAoR3N0UnRwSDI2NURlcGF5ICogcnRwaDI2NWRlcGF5LAotICAgIEdzdENsb2NrVGltZSAqIG91dF90aW1lc3RhbXAsIGdib29sZWFuICogb3V0X2tleWZyYW1lKQotewotICBndWludCBvdXRzaXplOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICAvKiB3ZSBoYWQgYSBwaWN0dXJlIGluIHRoZSBhZGFwdGVyIGFuZCB3ZSBjb21wbGV0ZWQgaXQgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NWRlcGF5LCAidGFraW5nIGNvbXBsZXRlZCBBVSIpOwotICBvdXRzaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBoMjY1ZGVwYXktPnBpY3R1cmVfYWRhcHRlcik7Ci0gIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBoMjY1ZGVwYXktPnBpY3R1cmVfYWRhcHRlciwgb3V0c2l6ZSk7Ci0KLSAgKm91dF90aW1lc3RhbXAgPSBydHBoMjY1ZGVwYXktPmxhc3RfdHM7Ci0gICpvdXRfa2V5ZnJhbWUgPSBydHBoMjY1ZGVwYXktPmxhc3Rfa2V5ZnJhbWU7Ci0KLSAgcnRwaDI2NWRlcGF5LT5sYXN0X2tleWZyYW1lID0gRkFMU0U7Ci0gIHJ0cGgyNjVkZXBheS0+cGljdHVyZV9zdGFydCA9IEZBTFNFOwotCi0gIHJldHVybiBvdXRidWY7Ci19Ci0KLS8qIFZQUy9TUFMvUFBTL1JBREwvVFNBL1JBU0wvSURSL0NSQSBpcyBjb25zaWRlcmVkIGtleSwgYWxsIG90aGVycyBERUxUQTsKLSAqIHNvIGRvd25zdHJlYW0gd2FpdGluZyBmb3Iga2V5ZnJhbWUgY2FuIHBpY2sgdXAgYXQgVlBTL1NQUy9QUFMvSURSICovCi0KLSNkZWZpbmUgTkFMX1RZUEVfSVNfUEFSQU1FVEVSX1NFVChudCkgKAkJKChudCkgPT0gR1NUX0gyNjVfVlBTX05VVClcCi0JCQkJCQkJCQkJfHwgICgobnQpID09IEdTVF9IMjY1X1NQU19OVVQpXAotCQkJCQkJCQkJCXx8ICAoKG50KSA9PSBHU1RfSDI2NV9QUFNfTlVUKQkJCQkpCi0KLSNkZWZpbmUgTkFMX1RZUEVfSVNfQ09ERURfU0xJQ0VfU0VHTUVOVChudCkgKAkJKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1RSQUlMX04pXAotCQkJCQkJCQkJCQkJfHwgCSgobnQpID09IEdTVF9IMjY1X05BTF9TTElDRV9UUkFJTF9SKVwKLQkJCQkJCQkJCQkJCXx8ICAoKG50KSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfVFNBX04pXAotCQkJCQkJCQkJCQkJfHwgICgobnQpID09IEdTVF9IMjY1X05BTF9TTElDRV9UU0FfUilcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1NUU0FfTilcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1NUU0FfUilcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1JBU0xfTilcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1JBU0xfUilcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX0JMQV9XX0xQKVwKLQkJCQkJCQkJCQkJCXx8ICAoKG50KSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfQkxBX1dfUkFETClcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX0JMQV9OX0xQKVwKLQkJCQkJCQkJCQkJCXx8ICAoKG50KSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfSURSX1dfUkFETClcCi0JCQkJCQkJCQkJCQl8fCAgKChudCkgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX0lEUl9OX0xQKVwKLQkJCQkJCQkJCQkJCXx8ICAoKG50KSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfQ1JBX05VVCkJCSkKLQotI2RlZmluZSBOQUxfVFlQRV9JU19LRVkobnQpIChOQUxfVFlQRV9JU19QQVJBTUVURVJfU0VUKG50KSB8fCBOQUxfVFlQRV9JU19DT0RFRF9TTElDRV9TRUdNRU5UKG50KSkKLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2gyNjVfZGVwYXlfaGFuZGxlX25hbCAoR3N0UnRwSDI2NURlcGF5ICogcnRwaDI2NWRlcGF5LCBHc3RCdWZmZXIgKiBuYWwsCi0gICAgR3N0Q2xvY2tUaW1lIGluX3RpbWVzdGFtcCwgZ2Jvb2xlYW4gbWFya2VyKQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkICpkZXBheWxvYWQgPSBHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBoMjY1ZGVwYXkpOwotICBnaW50IG5hbF90eXBlOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBHc3RDbG9ja1RpbWUgb3V0X3RpbWVzdGFtcDsKLSAgZ2Jvb2xlYW4ga2V5ZnJhbWUsIG91dF9rZXlmcmFtZTsKLQotICBnc3RfYnVmZmVyX21hcCAobmFsLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBpZiAoR19VTkxJS0VMWSAobWFwLnNpemUgPCA1KSkKLSAgICBnb3RvIHNob3J0X25hbDsKLQotICBuYWxfdHlwZSA9IChtYXAuZGF0YVs0XSA+PiAxKSAmIDB4M2Y7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVkZXBheSwgImhhbmRsZSBOQUwgdHlwZSAlZCAoUlRQIG1hcmtlciBiaXQgJWQpIiwKLSAgICAgIG5hbF90eXBlLCBtYXJrZXIpOwotCi0gIGtleWZyYW1lID0gTkFMX1RZUEVfSVNfS0VZIChuYWxfdHlwZSk7Ci0KLSAgb3V0X2tleWZyYW1lID0ga2V5ZnJhbWU7Ci0gIG91dF90aW1lc3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0KLSAgaWYgKCFydHBoMjY1ZGVwYXktPmJ5dGVfc3RyZWFtKSB7Ci0gICAgaWYgKE5BTF9UWVBFX0lTX1BBUkFNRVRFUl9TRVQgKG5hbF90eXBlKSkgewotICAgICAgZ3N0X3J0cF9oMjY1X2RlcGF5X2FkZF92cHNfc3BzX3BwcyAocnRwaDI2NWRlcGF5LAotICAgICAgICAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gKG5hbCwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKLSAgICAgICAgICAgICAgNCwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAobmFsKSAtIDQpKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG5hbCwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChuYWwpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIGlmIChydHBoMjY1ZGVwYXktPnNwcy0+bGVuID09IDAgfHwgcnRwaDI2NWRlcGF5LT5wcHMtPmxlbiA9PSAwKSB7Ci0gICAgICAvKiBEb3duIHB1c2ggZG93biBhbnkgYnVmZmVyIGluIG5vbi1ieXRlc3RyZWFtIG1vZGUgaWYgdGhlIFNQUy9QUFMgaGF2ZW4ndAotICAgICAgICogZ28gdGhyb3VnaCB5ZXQKLSAgICAgICAqLwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NJTktQQUQgKGRlcGF5bG9hZCksCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0Rm9yY2VLZXlVbml0IiwKLSAgICAgICAgICAgICAgICAgICJhbGwtaGVhZGVycyIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKSkpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG5hbCk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAocnRwaDI2NWRlcGF5LT5uZXdfY29kZWNfZGF0YSAmJgotICAgICAgICBydHBoMjY1ZGVwYXktPnNwcy0+bGVuID4gMCAmJiBydHBoMjY1ZGVwYXktPnBwcy0+bGVuID4gMCkKLSAgICAgIGdzdF9ydHBfaDI2NV9zZXRfc3JjX2NhcHMgKHJ0cGgyNjVkZXBheSk7Ci0gIH0KLQotICBpZiAocnRwaDI2NWRlcGF5LT5tZXJnZSkgewotICAgIGdib29sZWFuIHN0YXJ0ID0gRkFMU0UsIGNvbXBsZXRlID0gRkFMU0U7Ci0KLSAgICAvKiBtYXJrZXIgYml0IGlzbid0IG1hbmRhdG9yeSBzbyBpbiB0aGUgZm9sbG93aW5nIGNvZGUgd2UgdHJ5IHRvIGRldGVjdAotICAgICAqIGFuIEFVIGJvdW5kYXJ5IChzZWUgSC4yNjUgc3BlYyBzZWN0aW9uIDcuNC4yLjQuNCkgKi8KLSAgICBpZiAoIW1hcmtlcikgewotICAgICAgaWYgKE5BTF9UWVBFX0lTX0NPREVEX1NMSUNFX1NFR01FTlQgKG5hbF90eXBlKSkgewotICAgICAgICAvKiBBIE5BTCB1bml0IChYKSBlbmRzIGFuIGFjY2VzcyB1bml0IGlmIHRoZSBuZXh0LW9jY3VycmluZyBWQ0wgTkFMIHVuaXQgKFkpIGhhcyB0aGUgaGlnaC1vcmRlciBiaXQgb2YgdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgaXRzIE5BTCB1bml0IGhlYWRlciBlcXVhbCB0byAxICovCi0gICAgICAgIHN0YXJ0ID0gVFJVRTsKLSAgICAgICAgaWYgKCgobWFwLmRhdGFbNl0gPj4gNykgJiAweDAxKSA9PSAxKSB7Ci0gICAgICAgICAgY29tcGxldGUgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKChuYWxfdHlwZSA+PSAzMiAmJiBuYWxfdHlwZSA8PSAzNSkKLSAgICAgICAgICB8fCBuYWxfdHlwZSA9PSAzOSB8fCAobmFsX3R5cGUgPj0gNDEgJiYgbmFsX3R5cGUgPD0gNDQpCi0gICAgICAgICAgfHwgKG5hbF90eXBlID49IDQ4ICYmIG5hbF90eXBlIDw9IDU1KSkgewotICAgICAgICAvKiBWUFMsIFNQUywgUFBTLCBTRUksIC4uLiB0ZXJtaW5hdGUgYW4gYWNjZXNzIHVuaXQgKi8KLSAgICAgICAgY29tcGxldGUgPSBUUlVFOwotICAgICAgfQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAic3RhcnQgJWQsIGNvbXBsZXRlICVkIiwgc3RhcnQsIGNvbXBsZXRlKTsKLQotICAgICAgaWYgKGNvbXBsZXRlICYmIHJ0cGgyNjVkZXBheS0+cGljdHVyZV9zdGFydCkKLSAgICAgICAgb3V0YnVmID0gZ3N0X3J0cF9oMjY1X2NvbXBsZXRlX2F1IChydHBoMjY1ZGVwYXksICZvdXRfdGltZXN0YW1wLAotICAgICAgICAgICAgJm91dF9rZXlmcmFtZSk7Ci0gICAgfQotICAgIC8qIGFkZCB0byBhZGFwdGVyICovCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImFkZGluZyBOQUwgdG8gcGljdHVyZSBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwaDI2NWRlcGF5LT5waWN0dXJlX2FkYXB0ZXIsIG5hbCk7Ci0gICAgcnRwaDI2NWRlcGF5LT5sYXN0X3RzID0gaW5fdGltZXN0YW1wOwotICAgIHJ0cGgyNjVkZXBheS0+bGFzdF9rZXlmcmFtZSB8PSBrZXlmcmFtZTsKLSAgICBydHBoMjY1ZGVwYXktPnBpY3R1cmVfc3RhcnQgfD0gc3RhcnQ7Ci0KLSAgICBpZiAobWFya2VyKQotICAgICAgb3V0YnVmID0gZ3N0X3J0cF9oMjY1X2NvbXBsZXRlX2F1IChydHBoMjY1ZGVwYXksICZvdXRfdGltZXN0YW1wLAotICAgICAgICAgICZvdXRfa2V5ZnJhbWUpOwotICB9IGVsc2UgewotICAgIC8qIG5vIG1lcmdlLCBvdXRwdXQgaXMgaW5wdXQgbmFsICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAidXNpbmcgTkFMIGFzIG91dHB1dCIpOwotICAgIG91dGJ1ZiA9IG5hbDsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChuYWwsICZtYXApOwotICB9Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIC8qIHByZXBlbmQgY29kZWNfZGF0YSAqLwotICAgIGlmIChydHBoMjY1ZGVwYXktPmNvZGVjX2RhdGEpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgInByZXBlbmRpbmcgY29kZWNfZGF0YSIpOwotICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjVkZXBheSksCi0gICAgICAgICAgcnRwaDI2NWRlcGF5LT5jb2RlY19kYXRhLCBvdXRidWYsCi0gICAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChydHBoMjY1ZGVwYXktPmNvZGVjX2RhdGEsIG91dGJ1Zik7Ci0gICAgICBydHBoMjY1ZGVwYXktPmNvZGVjX2RhdGEgPSBOVUxMOwotICAgICAgb3V0X2tleWZyYW1lID0gVFJVRTsKLSAgICB9Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotCi0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjVkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLQotICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gb3V0X3RpbWVzdGFtcDsKLQotICAgIGlmIChvdXRfa2V5ZnJhbWUpCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgIGVsc2UKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLXNob3J0X25hbDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAiZHJvcHBpbmcgc2hvcnQgTkFMIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAobmFsLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChuYWwpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9oMjY1X3B1c2hfZnJhZ21lbnRhdGlvbl91bml0IChHc3RSdHBIMjY1RGVwYXkgKiBydHBoMjY1ZGVwYXksCi0gICAgZ2Jvb2xlYW4gc2VuZCkKLXsKLSAgZ3VpbnQgb3V0c2l6ZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotCi0gIG91dHNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGgyNjVkZXBheS0+YWRhcHRlcik7Ci0gIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBoMjY1ZGVwYXktPmFkYXB0ZXIsIG91dHNpemUpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJvdXRwdXQgJWQgYnl0ZXMiLCBvdXRzaXplKTsKLQotICBpZiAocnRwaDI2NWRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgIG1lbWNweSAobWFwLmRhdGEsIHN5bmNfYnl0ZXMsIHNpemVvZiAoc3luY19ieXRlcykpOwotICB9IGVsc2UgewotICAgIGdvdG8gbm90X2ltcGxlbWVudGVkOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0KLSAgcnRwaDI2NWRlcGF5LT5jdXJyZW50X2Z1X3R5cGUgPSAwOwotCi0gIG91dGJ1ZiA9IGdzdF9ydHBfaDI2NV9kZXBheV9oYW5kbGVfbmFsIChydHBoMjY1ZGVwYXksIG91dGJ1ZiwKLSAgICAgIHJ0cGgyNjVkZXBheS0+ZnVfdGltZXN0YW1wLCBydHBoMjY1ZGVwYXktPmZ1X21hcmtlcik7Ci0KLSAgaWYgKHNlbmQgJiYgb3V0YnVmKSB7Ci0gICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBoMjY1ZGVwYXkpLCBvdXRidWYpOwotICAgIG91dGJ1ZiA9IE5VTEw7Ci0gIH0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotbm90X2ltcGxlbWVudGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwaDI2NWRlcGF5LAotICAgICAgICAoIk9ubHkgYnl0ZXN0cmVhbSBmb3JtYXQgaXMgY3VycmVudGx5IHN1cHBvcnRlZC4iKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfaDI2NV9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEgyNjVEZXBheSAqcnRwaDI2NWRlcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIGd1aW50OCBuYWxfdW5pdF90eXBlOwotCi0gIHJ0cGgyNjVkZXBheSA9IEdTVF9SVFBfSDI2NV9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICAvKiBmbHVzaCByZW1haW5pbmcgZGF0YSBvbiBkaXNjb250ICovCi0gIGlmIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKHJ0cC0+YnVmZmVyKSkgewotICAgIGdzdF9hZGFwdGVyX2NsZWFyIChydHBoMjY1ZGVwYXktPmFkYXB0ZXIpOwotICAgIHJ0cGgyNjVkZXBheS0+d2FpdF9zdGFydCA9IFRSVUU7Ci0gICAgcnRwaDI2NWRlcGF5LT5jdXJyZW50X2Z1X3R5cGUgPSAwOwotICB9Ci0KLSAgewotICAgIGdpbnQgcGF5bG9hZF9sZW47Ci0gICAgZ3VpbnQ4ICpwYXlsb2FkOwotICAgIGd1aW50IGhlYWRlcl9sZW47Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ3VpbnQgb3V0c2l6ZSwgbmFsdV9zaXplOwotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gICAgZ2Jvb2xlYW4gbWFya2VyOwotICAgIGd1aW50OCBudWhfbGF5ZXJfaWQsIG51aF90ZW1wb3JhbF9pZF9wbHVzMTsKLSAgICBndWludDggUywgRTsKLSAgICBndWludDE2IG5hbF9oZWFkZXI7Ci0jaWYgMAotICAgIGdib29sZWFuIGRvbmxfcHJlc2VudCA9IEZBTFNFOwotI2VuZGlmCi0KLSAgICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAocnRwLT5idWZmZXIpOwotCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0gICAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICAgIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJyZWNlaXZpbmcgJWQgYnl0ZXMiLCBwYXlsb2FkX2xlbik7Ci0KLSAgICBpZiAocGF5bG9hZF9sZW4gPT0gMCkKLSAgICAgIGdvdG8gZW1wdHlfcGFja2V0OwotCi0gICAgLyogKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICogfDB8MXwyfDN8NHw1fDZ8N3wwfDF8MnwzfDR8NXw2fDd8Ci0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfEZ8ICAgVHlwZSAgICB8ICBMYXllcklkICB8IFRJRCB8Ci0gICAgICogKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICoKLSAgICAgKiBGIG11c3QgYmUgMC4KLSAgICAgKgotICAgICAqLwotICAgIG5hbF91bml0X3R5cGUgPSAocGF5bG9hZFswXSA+PiAxKSAmIDB4M2Y7Ci0gICAgbnVoX2xheWVyX2lkID0gKChwYXlsb2FkWzBdICYgMHgwMSkgPDwgNSkgfCAocGF5bG9hZFsxXSA+PiAzKTsgICAgICAvKiBzaG91bGQgYmUgemVybyBmb3Igbm93IGJ1dCB0aGlzIGNvdWxkIGNoYW5nZSBpbiBmdXR1cmUgSEVWQyBleHRlbnNpb25zICovCi0gICAgbnVoX3RlbXBvcmFsX2lkX3BsdXMxID0gcGF5bG9hZFsxXSAmIDB4MDM7Ci0KLSAgICAvKiBBdCBsZWFzdCB0d28gYnl0ZSBoZWFkZXIgd2l0aCB0eXBlICovCi0gICAgaGVhZGVyX2xlbiA9IDI7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksCi0gICAgICAgICJOQUwgaGVhZGVyIG5hbF91bml0X3R5cGUgJWQsIG51aF90ZW1wb3JhbF9pZF9wbHVzMSAlZCIsIG5hbF91bml0X3R5cGUsCi0gICAgICAgIG51aF90ZW1wb3JhbF9pZF9wbHVzMSk7Ci0KLSAgICBHU1RfRklYTUVfT0JKRUNUIChydHBoMjY1ZGVwYXksICJBc3N1bWluZyBET05MIGZpZWxkIGlzIG5vdCBwcmVzZW50Iik7Ci0KLSAgICAvKiBGSVhNRSAtIGFzc3VtaW5nIERPTkwgZmllbGQgaXMgbm90IHByZXNlbnQgZm9yIG5vdyAqLwotICAgIC8qZG9ubF9wcmVzZW50ID0gKHR4LW1vZGUgPT0gIk1TVCIpIHx8IChzcHJvcC1tYXgtZG9uLWRpZmYgPiAwKTsgKi8KLQotICAgIC8qIElmIEZVIHVuaXQgd2FzIGJlaW5nIHByb2Nlc3NlZCwgYnV0IHRoZSBjdXJyZW50IG5hbCBpcyBvZiBhIGRpZmZlcmVudAotICAgICAqIHR5cGUuICBBc3N1bWUgdGhhdCB0aGUgcmVtb3RlIHBheWxvYWRlciBpcyBidWdneSAoZGlkbid0IHNldCB0aGUgZW5kIGJpdAotICAgICAqIHdoZW4gdGhlIEZVIGVuZGVkKSBhbmQgc2VuZCBvdXQgd2hhdCB3ZSBnYXRoZXJlZCB0aHVzZmFyICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJ0cGgyNjVkZXBheS0+Y3VycmVudF9mdV90eXBlICE9IDAgJiYKLSAgICAgICAgICAgIG5hbF91bml0X3R5cGUgIT0gcnRwaDI2NWRlcGF5LT5jdXJyZW50X2Z1X3R5cGUpKQotICAgICAgZ3N0X3J0cF9oMjY1X3B1c2hfZnJhZ21lbnRhdGlvbl91bml0IChydHBoMjY1ZGVwYXksIFRSVUUpOwotCi0gICAgc3dpdGNoIChuYWxfdW5pdF90eXBlKSB7Ci0gICAgICBjYXNlIDQ4OgotICAgICAgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJQcm9jZXNzaW5nIGFnZ3JlZ2F0aW9uIHBhY2tldCIpOwotCi0gICAgICAgIC8qIEFnZ3JlZ2F0aW9uIHBhY2tldCAoc2VjdGlvbiA0LjcpICovCi0KLSAgICAgICAgLyogIEFuIGV4YW1wbGUgb2YgYW4gQVAgcGFja2V0IGNvbnRhaW5pbmcgdHdvIGFnZ3JlZ2F0aW9uIHVuaXRzCi0gICAgICAgICAgIHdpdGhvdXQgdGhlIERPTkwgYW5kIERPTkQgZmllbGRzCi0KLSAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgUlRQIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCAgIFBheWxvYWRIZHIgKFR5cGU9NDgpICAgICAgICB8ICAgICAgICAgTkFMVSAxIFNpemUgICAgICAgICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCAgICAgICAgICBOQUxVIDEgSERSICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rICAgICAgICAgTkFMVSAxIERhdGEgICAgICAgICAgIHwKLSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAuIC4gLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgKyAgICAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCAgLiAuIC4gICAgICAgIHwgTkFMVSAyIFNpemUgICAgICAgICAgICAgICAgICAgfCBOQUxVIDIgSERSICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCBOQUxVIDIgSERSICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSsgICAgICAgICAgICAgIE5BTFUgMiBEYXRhICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAuIC4gLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Li4uT1BUSU9OQUwgUlRQIHBhZGRpbmcgICAgICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICovCi0KLSAgICAgICAgLyogc3RyaXAgaGVhZGVycyAqLwotICAgICAgICBwYXlsb2FkICs9IGhlYWRlcl9sZW47Ci0gICAgICAgIHBheWxvYWRfbGVuIC09IGhlYWRlcl9sZW47Ci0KLSAgICAgICAgcnRwaDI2NWRlcGF5LT53YWl0X3N0YXJ0ID0gRkFMU0U7Ci0KLSNpZiAwCi0gICAgICAgIGlmIChkb25sX3ByZXNlbnQpCi0gICAgICAgICAgZ290byBub3RfaW1wbGVtZW50ZWRfZG9ubF9wcmVzZW50OwotI2VuZGlmCi0KLSAgICAgICAgd2hpbGUgKHBheWxvYWRfbGVuID4gMikgewotCi0gICAgICAgICAgbmFsdV9zaXplID0gKHBheWxvYWRbMF0gPDwgOCkgfCBwYXlsb2FkWzFdOwotCi0gICAgICAgICAgLyogZG9udCBpbmNsdWRlIG5hbHVfc2l6ZSAqLwotICAgICAgICAgIGlmIChuYWx1X3NpemUgPiAocGF5bG9hZF9sZW4gLSAyKSkKLSAgICAgICAgICAgIG5hbHVfc2l6ZSA9IHBheWxvYWRfbGVuIC0gMjsKLQotICAgICAgICAgIG91dHNpemUgPSBuYWx1X3NpemUgKyBzaXplb2YgKHN5bmNfYnl0ZXMpOwotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAob3V0c2l6ZSk7Ci0KLSAgICAgICAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICAgICAgICBpZiAocnRwaDI2NWRlcGF5LT5ieXRlX3N0cmVhbSkgewotICAgICAgICAgICAgbWVtY3B5IChtYXAuZGF0YSwgc3luY19ieXRlcywgc2l6ZW9mIChzeW5jX2J5dGVzKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gbm90X2ltcGxlbWVudGVkOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIHN0cmlwIE5BTFUgc2l6ZSAqLwotICAgICAgICAgIHBheWxvYWQgKz0gMjsKLSAgICAgICAgICBwYXlsb2FkX2xlbiAtPSAyOwotCi0gICAgICAgICAgbWVtY3B5IChtYXAuZGF0YSArIHNpemVvZiAoc3luY19ieXRlcyksIHBheWxvYWQsIG5hbHVfc2l6ZSk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLQotICAgICAgICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBoMjY1ZGVwYXkpLCBvdXRidWYsCi0gICAgICAgICAgICAgIHJ0cC0+YnVmZmVyLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0gICAgICAgICAgb3V0YnVmID0KLSAgICAgICAgICAgICAgZ3N0X3J0cF9oMjY1X2RlcGF5X2hhbmRsZV9uYWwgKHJ0cGgyNjVkZXBheSwgb3V0YnVmLCB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgIG1hcmtlcik7Ci0gICAgICAgICAgaWYgKG91dGJ1ZikKLSAgICAgICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGgyNjVkZXBheS0+YWRhcHRlciwgb3V0YnVmKTsKLQotICAgICAgICAgIHBheWxvYWQgKz0gbmFsdV9zaXplOwotICAgICAgICAgIHBheWxvYWRfbGVuIC09IG5hbHVfc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dHNpemUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGgyNjVkZXBheS0+YWRhcHRlcik7Ci0gICAgICAgIGlmIChvdXRzaXplID4gMCkKLSAgICAgICAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocnRwaDI2NWRlcGF5LT5hZGFwdGVyLCBvdXRzaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIDQ5OgotICAgICAgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJQcm9jZXNzaW5nIEZyYWdtZW50YXRpb24gVW5pdCIpOwotCi0gICAgICAgIC8qIEZyYWdtZW50YXRpb24gdW5pdHMgKEZVcykgIFNlY3Rpb24gNC44ICovCi0KLSAgICAgICAgLyogICAgVGhlIHN0cnVjdHVyZSBvZiBhIEZyYWdtZW50YXRpb24gVW5pdCAoRlUpCi0gICAgICAgICAqCi0gICAgICAgICAqICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgIHwgICAgUGF5bG9hZEhkciAoVHlwZT00OSkgICAgICAgfCAgIEZVIGhlYWRlciAgIHwgRE9OTCAoY29uZCkgICB8Ci0gICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstfAotICAgICAgICAgfCBET05MIChjb25kKSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgIHwtKy0rLSstKy0rLSstKy0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIEZVIHBheWxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDouLi5PUFRJT05BTCBSVFAgcGFkZGluZyAgICAgICAgfAotICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICoKLSAgICAgICAgICoKLSAgICAgICAgICovCi0KLSAgICAgICAgLyogc3RyaXAgaGVhZGVycyAqLwotICAgICAgICBwYXlsb2FkICs9IGhlYWRlcl9sZW47Ci0gICAgICAgIHBheWxvYWRfbGVuIC09IGhlYWRlcl9sZW47Ci0KLSAgICAgICAgLyogcHJvY2Vzc2luZyBGVSBoZWFkZXIgKi8KLSAgICAgICAgUyA9IChwYXlsb2FkWzBdICYgMHg4MCkgPT0gMHg4MDsKLSAgICAgICAgRSA9IChwYXlsb2FkWzBdICYgMHg0MCkgPT0gMHg0MDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksCi0gICAgICAgICAgICAiRlUgaGVhZGVyIHdpdGggUyAlZCwgRSAlZCwgbmFsX3VuaXRfdHlwZSAlZCIsIFMsIEUsCi0gICAgICAgICAgICBwYXlsb2FkWzBdICYgMHgzZik7Ci0KLSAgICAgICAgaWYgKHJ0cGgyNjVkZXBheS0+d2FpdF9zdGFydCAmJiAhUykKLSAgICAgICAgICBnb3RvIHdhaXRpbmdfc3RhcnQ7Ci0KLSNpZiAwCi0gICAgICAgIGlmIChkb25sX3ByZXNlbnQpCi0gICAgICAgICAgZ290byBub3RfaW1wbGVtZW50ZWRfZG9ubF9wcmVzZW50OwotI2VuZGlmCi0KLSAgICAgICAgaWYgKFMpIHsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVkZXBheSwgIlN0YXJ0IG9mIEZyYWdtZW50YXRpb24gVW5pdCIpOwotCi0gICAgICAgICAgLyogSWYgYSBuZXcgRlUgdW5pdCBzdGFydGVkLCB3aGlsZSBzdGlsbCBwcm9jZXNzaW5nIGFuIG9sZGVyIG9uZS4KLSAgICAgICAgICAgKiBBc3N1bWUgdGhhdCB0aGUgcmVtb3RlIHBheWxvYWRlciBpcyBidWdneSAoZG9lc24ndCBzZXQgdGhlIGVuZAotICAgICAgICAgICAqIGJpdCkgYW5kIHNlbmQgb3V0IHdoYXQgd2UndmUgZ2F0aGVyZWQgdGh1c2ZhciAqLwotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChydHBoMjY1ZGVwYXktPmN1cnJlbnRfZnVfdHlwZSAhPSAwKSkKLSAgICAgICAgICAgIGdzdF9ydHBfaDI2NV9wdXNoX2ZyYWdtZW50YXRpb25fdW5pdCAocnRwaDI2NWRlcGF5LCBUUlVFKTsKLQotICAgICAgICAgIHJ0cGgyNjVkZXBheS0+Y3VycmVudF9mdV90eXBlID0gbmFsX3VuaXRfdHlwZTsKLSAgICAgICAgICBydHBoMjY1ZGVwYXktPmZ1X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQotICAgICAgICAgIHJ0cGgyNjVkZXBheS0+d2FpdF9zdGFydCA9IEZBTFNFOwotCi0gICAgICAgICAgLyogcmVjb25zdHJ1Y3QgTkFMIGhlYWRlciAqLwotICAgICAgICAgIG5hbF9oZWFkZXIgPQotICAgICAgICAgICAgICAoKHBheWxvYWRbMF0gJiAweDNmKSA8PCA5KSB8IChudWhfbGF5ZXJfaWQgPDwgMykgfAotICAgICAgICAgICAgICBudWhfdGVtcG9yYWxfaWRfcGx1czE7Ci0KLSAgICAgICAgICAvKiBnbyBiYWNrIG9uZSBieXRlIHNvIHdlIGNhbiBjb3B5IHRoZSBwYXlsb2FkICsgdHdvIGJ5dGVzIG1vcmUgaW4gdGhlIGZyb250IHdoaWNoCi0gICAgICAgICAgICogd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgbmFsX2hlYWRlcgotICAgICAgICAgICAqLwotICAgICAgICAgIHBheWxvYWQgLT0gMTsKLSAgICAgICAgICBwYXlsb2FkX2xlbiArPSAxOwotCi0gICAgICAgICAgbmFsdV9zaXplID0gcGF5bG9hZF9sZW47Ci0gICAgICAgICAgb3V0c2l6ZSA9IG5hbHVfc2l6ZSArIHNpemVvZiAoc3luY19ieXRlcyk7Ci0gICAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChvdXRzaXplKTsKLQotICAgICAgICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgICAgICAgIG1lbWNweSAobWFwLmRhdGEgKyBzaXplb2YgKHN5bmNfYnl0ZXMpLCBwYXlsb2FkLCBuYWx1X3NpemUpOwotICAgICAgICAgIG1hcC5kYXRhW3NpemVvZiAoc3luY19ieXRlcyldID0gbmFsX2hlYWRlciA+PiA4OwotICAgICAgICAgIG1hcC5kYXRhW3NpemVvZiAoc3luY19ieXRlcykgKyAxXSA9IG5hbF9oZWFkZXIgJiAweGZmOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0KLSAgICAgICAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2NWRlcGF5KSwgb3V0YnVmLAotICAgICAgICAgICAgICBydHAtPmJ1ZmZlciwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVkZXBheSwgInF1ZXVlaW5nICVkIGJ5dGVzIiwgb3V0c2l6ZSk7Ci0KLSAgICAgICAgICAvKiBhbmQgYXNzZW1ibGUgaW4gdGhlIGFkYXB0ZXIgKi8KLSAgICAgICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBoMjY1ZGVwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci0gICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksCi0gICAgICAgICAgICAgICJGb2xsb3dpbmcgcGFydCBvZiBGcmFnbWVudGF0aW9uIFVuaXQiKTsKLQotICAgICAgICAgIC8qIHN0cmlwIG9mZiBGVSBoZWFkZXIgYnl0ZSAqLwotICAgICAgICAgIHBheWxvYWQgKz0gMTsKLSAgICAgICAgICBwYXlsb2FkX2xlbiAtPSAxOwotCi0gICAgICAgICAgb3V0c2l6ZSA9IHBheWxvYWRfbGVuOwotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAob3V0c2l6ZSk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChvdXRidWYsIDAsIHBheWxvYWQsIG91dHNpemUpOwotCi0gICAgICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGgyNjVkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgICAgICAgcnRwLT5idWZmZXIsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJxdWV1ZWluZyAlZCBieXRlcyIsIG91dHNpemUpOwotCi0gICAgICAgICAgLyogYW5kIGFzc2VtYmxlIGluIHRoZSBhZGFwdGVyICovCi0gICAgICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwaDI2NWRlcGF5LT5hZGFwdGVyLCBvdXRidWYpOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0YnVmID0gTlVMTDsKLSAgICAgICAgcnRwaDI2NWRlcGF5LT5mdV9tYXJrZXIgPSBtYXJrZXI7Ci0KLSAgICAgICAgLyogaWYgTkFMIHVuaXQgZW5kcywgZmx1c2ggdGhlIGFkYXB0ZXIgKi8KLSAgICAgICAgaWYgKEUpIHsKLSAgICAgICAgICBvdXRidWYgPSBnc3RfcnRwX2gyNjVfcHVzaF9mcmFnbWVudGF0aW9uX3VuaXQgKHJ0cGgyNjVkZXBheSwgRkFMU0UpOwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVkZXBheSwgIkVuZCBvZiBGcmFnbWVudGF0aW9uIFVuaXQiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgNTA6Ci0gICAgICAgIGdvdG8gbm90X2ltcGxlbWVudGVkOyAgIC8qIFBBQ0kgcGFja2V0cyAgU2VjdGlvbiA0LjkgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICB7Ci0gICAgICAgIHJ0cGgyNjVkZXBheS0+d2FpdF9zdGFydCA9IEZBTFNFOwotCi0gICAgICAgIC8qIEFsbCBvdGhlciBjYXNlczogU2luZ2xlIE5BTCB1bml0IHBhY2tldCAgIFNlY3Rpb24gNC42ICovCi0gICAgICAgIC8qIHRoZSBlbnRpcmUgcGF5bG9hZCBpcyB0aGUgb3V0cHV0IGJ1ZmZlciAqLwotCi0jaWYgMAotICAgICAgICBpZiAoZG9ubF9wcmVzZW50KQotICAgICAgICAgIGdvdG8gbm90X2ltcGxlbWVudGVkX2RvbmxfcHJlc2VudDsKLSNlbmRpZgotCi0gICAgICAgIG5hbHVfc2l6ZSA9IHBheWxvYWRfbGVuOwotICAgICAgICBvdXRzaXplID0gbmFsdV9zaXplICsgc2l6ZW9mIChzeW5jX2J5dGVzKTsKLSAgICAgICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChvdXRzaXplKTsKLQotICAgICAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICAgICAgaWYgKHJ0cGgyNjVkZXBheS0+Ynl0ZV9zdHJlYW0pIHsKLSAgICAgICAgICBtZW1jcHkgKG1hcC5kYXRhLCBzeW5jX2J5dGVzLCBzaXplb2YgKHN5bmNfYnl0ZXMpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnb3RvIG5vdF9pbXBsZW1lbnRlZDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkgKG1hcC5kYXRhICsgc2l6ZW9mIChzeW5jX2J5dGVzKSwgcGF5bG9hZCwgbmFsdV9zaXplKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLQotICAgICAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2NWRlcGF5KSwgb3V0YnVmLAotICAgICAgICAgICAgcnRwLT5idWZmZXIsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0KLSAgICAgICAgb3V0YnVmID0gZ3N0X3J0cF9oMjY1X2RlcGF5X2hhbmRsZV9uYWwgKHJ0cGgyNjVkZXBheSwgb3V0YnVmLCB0aW1lc3RhbXAsCi0gICAgICAgICAgICBtYXJrZXIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotZW1wdHlfcGFja2V0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NWRlcGF5LCAiZW1wdHkgcGFja2V0Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXdhaXRpbmdfc3RhcnQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1ZGVwYXksICJ3YWl0aW5nIGZvciBzdGFydCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0jaWYgMAotbm90X2ltcGxlbWVudGVkX2RvbmxfcHJlc2VudDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBoMjY1ZGVwYXksIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoTlVMTCksICgiRE9OTCBmaWVsZCBwcmVzZW50IG5vdCBzdXBwb3J0ZWQgeWV0IikpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0jZW5kaWYKLW5vdF9pbXBsZW1lbnRlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBoMjY1ZGVwYXksIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoTlVMTCksICgiTkFMIHVuaXQgdHlwZSAlZCBub3Qgc3VwcG9ydGVkIHlldCIsIG5hbF91bml0X3R5cGUpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2NV9kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwSDI2NURlcGF5ICpydHBoMjY1ZGVwYXk7Ci0KLSAgcnRwaDI2NWRlcGF5ID0gR1NUX1JUUF9IMjY1X0RFUEFZIChkZXBheSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9ydHBfaDI2NV9kZXBheV9yZXNldCAocnRwaDI2NWRlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybgotICAgICAgR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+aGFuZGxlX2V2ZW50IChkZXBheSwgZXZlbnQpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfaDI2NV9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEgyNjVEZXBheSAqcnRwaDI2NWRlcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwaDI2NWRlcGF5ID0gR1NUX1JUUF9IMjY1X0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfcnRwX2gyNjVfZGVwYXlfcmVzZXQgKHJ0cGgyNjVkZXBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9oMjY1X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjY1ZGVwYXlfZGVidWcsICJydHBoMjY1ZGVwYXkiLCAwLAotICAgICAgIkgyNjUgVmlkZW8gUlRQIERlcGF5bG9hZGVyIik7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBoMjY1ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfSDI2NV9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBoMjY1ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNiOTEwZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjVkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMTQ+IEp1cmdlbiBTbG93YWNrIDxqdXJnZW5zbG93YWNrQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9IMjY1X0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfSDI2NV9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwaDI2NXR5cGVzLmgiCi0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0gyNjVfREVQQVkgXAotICAoZ3N0X3J0cF9oMjY1X2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2NV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9IMjY1X0RFUEFZLEdzdFJ0cEgyNjVEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2NV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSDI2NV9ERVBBWSxHc3RSdHBIMjY1RGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2NV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9IMjY1X0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9IMjY1X0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9IMjY1X0RFUEFZKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBIMjY1RGVwYXkgR3N0UnRwSDI2NURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjVEZXBheUNsYXNzIEdzdFJ0cEgyNjVEZXBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9IMjY1X1ZQU19OVVQgMzIKLSNkZWZpbmUgR1NUX0gyNjVfU1BTX05VVCAzMwotI2RlZmluZSBHU1RfSDI2NV9QUFNfTlVUIDM0Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX1VOS05PV04sCi0gIEdTVF9IMjY1X1NUUkVBTV9GT1JNQVRfQllURVNUUkVBTSwKLSAgR1NUX0gyNjVfU1RSRUFNX0ZPUk1BVF9IVkMxLAotICBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX0hFVjEKLX0gR3N0SDI2NVN0cmVhbUZvcm1hdDsKLQotc3RydWN0IF9Hc3RSdHBIMjY1RGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgZ2NoYXIgKnN0cmVhbV9mb3JtYXQ7Ci0gIGdib29sZWFuIGJ5dGVfc3RyZWFtOwotCi0gIEdzdEJ1ZmZlciAqY29kZWNfZGF0YTsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gd2FpdF9zdGFydDsKLQotICAvKiBuYWwgbWVyZ2luZyAqLwotICBnYm9vbGVhbiBtZXJnZTsKLSAgR3N0QWRhcHRlciAqcGljdHVyZV9hZGFwdGVyOwotICBnYm9vbGVhbiBwaWN0dXJlX3N0YXJ0OwotICBHc3RDbG9ja1RpbWUgbGFzdF90czsKLSAgZ2Jvb2xlYW4gbGFzdF9rZXlmcmFtZTsKLQotICAvKiBXb3JrIGFyb3VuZCBicm9rZW4gcGF5bG9hZGVycyB3cnQuIEZyYWdtZW50YXRpb24gVW5pdHMgKi8KLSAgZ3VpbnQ4IGN1cnJlbnRfZnVfdHlwZTsKLSAgR3N0Q2xvY2tUaW1lIGZ1X3RpbWVzdGFtcDsKLSAgZ2Jvb2xlYW4gZnVfbWFya2VyOwotCi0gIC8qIG1pc2MgKi8KLSAgR1B0ckFycmF5ICp2cHM7Ci0gIEdQdHJBcnJheSAqc3BzOwotICBHUHRyQXJyYXkgKnBwczsKLSAgZ2Jvb2xlYW4gbmV3X2NvZGVjX2RhdGE7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cEgyNjVEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR1F1YXJrIGNvcHlfdGFnOwotfSBDb3B5TWV0YURhdGE7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdRdWFyayBrZWVwX3RhZzsKLX0gRHJvcE1ldGFEYXRhOwotCi1HVHlwZSBnc3RfcnRwX2gyNjVfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2gyNjVfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLWdib29sZWFuIGdzdF9ydHBfaDI2NV9hZGRfdnBzX3Nwc19wcHMgKEdzdEVsZW1lbnQgKiBydHBoMjY1LCBHUHRyQXJyYXkgKiB2cHMsCi0gICAgR1B0ckFycmF5ICogc3BzLCBHUHRyQXJyYXkgKiBwcHMsIEdzdEJ1ZmZlciAqIG5hbCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUlRQX0gyNjVfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwaDI2NXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTlhODg3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwaDI2NXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBKdXJnZW4gU2xvd2FjayA8anVyZ2Vuc2xvd2Fja0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0vKiBJbmNsdWRlZCB0byBub3QgZHVwbGljYXRlIGdzdF9ydHBfaDI2NV9hZGRfdnBzX3Nwc19wcHMgKCkgKi8KLSNpbmNsdWRlICJnc3RydHBoMjY1ZGVwYXkuaCIKLQotI2luY2x1ZGUgImdzdHJ0cGgyNjVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBoMjY1cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBoMjY1cGF5X2RlYnVnKQotCi0vKiByZWZlcmVuY2VzOgotICoKLSAqIEludGVybmV0IERyYWZ0IFJUUCBQYXlsb2FkIEZvcm1hdCBmb3IgSGlnaCBFZmZpY2llbmN5IFZpZGVvIENvZGluZwotICoKLSAqICAgICAgICAgICAgICAgICAgIGRyYWZ0LWlldGYtcGF5bG9hZC1ydHAtaDI2NS0wMy50eHQKLSAqCi0gKiBUaGlzIGRyYWZ0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhbiBSRkMsIHNvIHNvbWUgZGV0YWlscyBtYXkgY2hhbmdlLgotICoKLSAqLwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9oMjY1X3BheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKAotICAgICAgICAvKiBvbmx5IGh2YzEgYW5kIGJ5dGUtc3RyZWFtIGZvcm1hdHMgc3VwcG9ydGVkIGZvciBub3cgKi8KLSAgICAgICAgInZpZGVvL3gtaDI2NSwgc3RyZWFtLWZvcm1hdCA9IChzdHJpbmcpIGh2YzEsIGFsaWdubWVudCA9IChzdHJpbmcpIGF1OyAiCi0gICAgICAgIC8qICJ2aWRlby94LWgyNjUsICIKLSAgICAgICAgICAgInN0cmVhbS1mb3JtYXQgPSAoc3RyaW5nKSBoZXYxLCBhbGlnbm1lbnQgPSAoc3RyaW5nKSBhdTsgIiAqLwotICAgICAgICAidmlkZW8veC1oMjY1LCBzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgYnl0ZS1zdHJlYW0sICIKLSAgICAgICAgImFsaWdubWVudCA9IChzdHJpbmcpIHsgbmFsLCBhdSB9IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9oMjY1X3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiSDI2NVwiIikKLSAgICAgICAgICAgICAgICAvKiogb3B0aW9uYWwgcGFyYW1ldGVycyAqKi8KLSAgICAvKiAicHJvZmlsZS1zcGFjZSA9IChpbnQpIFsgMCwgMyBdLCAiICovCi0gICAgLyogInByb2ZpbGUtaWQgPSAoaW50KSBbIDAsIDMxIF0sICIgKi8KLSAgICAvKiAidGllci1mbGFnID0gKGludCkgWyAwLCAxIF0sICIgKi8KLSAgICAvKiAibGV2ZWwtaWQgPSAoaW50KSBbIDAsIDI1NSBdLCAiICovCi0gICAgLyogImludGVyb3AtY29uc3RyYWludHMgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAicHJvZmlsZS1jb21wYXRpYmlsaXR5LWluZGljYXRvciA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJzcHJvcC1zdWItbGF5ZXItaWQgPSAoaW50KSBbIDAsIDYgXSwgIiAqLwotICAgIC8qICJyZWN2LXN1Yi1sYXllci1pZCA9IChpbnQpIFsgMCwgNiBdLCAiICovCi0gICAgLyogIm1heC1yZWN2LWxldmVsLWlkID0gKGludCkgWyAwLCAyNTUgXSwgIiAqLwotICAgIC8qICJ0eC1tb2RlID0gKHN0cmluZykge01TVCAsIFNTVH0sICIgKi8KLSAgICAvKiAic3Byb3AtdnBzID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogInNwcm9wLXNwcyA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgIC8qICJzcHJvcC1wcHMgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAic3Byb3Atc2VpID0gKHN0cmluZykgQU5ZLCAiICovCi0gICAgLyogIm1heC1sc3IgPSAoaW50KSBBTlksICIgKi8vKiBNVVNUIGJlIGluIHRoZSByYW5nZSBvZiBNYXhMdW1hU1IgdG8gMTYgKiBNYXhMdW1hU1IsIGluY2x1c2l2ZSAqLwotICAgIC8qICJtYXgtbHBzID0gKGludCkgQU5ZLCAiICovLyogTVVTVCBiZSBpbiB0aGUgcmFuZ2Ugb2YgTWF4THVtYVBTIHRvIDE2ICogTWF4THVtYVBTLCBpbmNsdXNpdmUgKi8KLSAgICAvKiAibWF4LWNwYiA9IChpbnQpIEFOWSwgIiAqLy8qIE1VU1QgYmUgaW4gdGhlIHJhbmdlIG9mIE1heENQQiB0byAxNiAqIE1heENQQiwgaW5jbHVzaXZlICovCi0gICAgLyogIm1heC1kcGIgPSAoaW50KSBbMSwgMTZdLCAiICovCi0gICAgLyogIm1heC1iciA9IChpbnQpIEFOWSwgIiAqLy8qIE1VU1QgYmUgaW4gdGhlIHJhbmdlIG9mIE1heEJSIHRvIDE2ICogTWF4QlIsIGluY2x1c2l2ZSwgZm9yIHRoZSBoaWdoZXN0IGxldmVsICovCi0gICAgLyogIm1heC10ciA9IChpbnQpIEFOWSwgIiAqLy8qIE1VU1QgYmUgaW4gdGhlIHJhbmdlIG9mIE1heFRpbGVSb3dzIHRvIDE2ICogTWF4VGlsZVJvd3MsIGluY2x1c2l2ZSwgZm9yIHRoZSBoaWdoZXN0IGxldmVsICovCi0gICAgLyogIm1heC10YyA9IChpbnQpIEFOWSwgIiAqLy8qIE1VU1QgYmUgaW4gdGhlIHJhbmdlIG9mIE1heFRpbGVDb2xzIHRvIDE2ICogTWF4VGlsZUNvbHMsIGluY2x1c2l2ZSwgZm9yIHRoZSBoaWdoZXN0IGxldmVsICovCi0gICAgLyogIm1heC1mcHMgPSAoaW50KSBBTlksICIgKi8KLSAgICAvKiAic3Byb3AtbWF4LWRvbi1kaWZmID0gKGludCkgWzAsIDMyNzY3XSwgIiAqLwotICAgIC8qICJzcHJvcC1kZXBhY2stYnVmLW5hbHVzID0gKGludCkgWzAsIDMyNzY3XSwgIiAqLwotICAgIC8qICJzcHJvcC1kZXBhY2stYnVmLW5hbHVzID0gKGludCkgWzAsIDQyOTQ5NjcyOTVdLCAiICovCi0gICAgLyogImRlcGFjay1idWYtY2FwID0gKGludCkgWzEsIDQyOTQ5NjcyOTVdLCAiICovCi0gICAgLyogInNwcm9wLXNlZ21lbnRhdGlvbi1pZCA9IChpbnQpIFswLCAzXSwgIiAqLwotICAgIC8qICJzcHJvcC1zcGF0aWFsLXNlZ21lbnRhdGlvbi1pZGMgPSAoc3RyaW5nKSBBTlksICIgKi8KLSAgICAvKiAiZGVjLXBhcmFsbGVsLWNhcCA9IChzdHJpbmcpIEFOWSwgIiAqLwotICAgICk7Ci0KLSNkZWZpbmUgREVGQVVMVF9DT05GSUdfSU5URVJWQUwJCSAgICAgIDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ09ORklHX0lOVEVSVkFMCi19OwotCi0jZGVmaW5lIElTX0FDQ0VTU19VTklUKHgpICgoKHgpID49IDB4MDApICYmICgoeCkgPCAweDIwKSkKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjY1X3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfaDI2NV9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9oMjY1X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfcnRwX2gyNjVfcGF5X2dldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaDI2NV9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2gyNjVfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9oMjY1X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9oMjY1X3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0jZGVmaW5lIGdzdF9ydHBfaDI2NV9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSDI2NVBheSwgZ3N0X3J0cF9oMjY1X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjVfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEgyNjVQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfaDI2NV9wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2gyNjVfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9DT05GSUdfSU5URVJWQUwsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY29uZmlnLWludGVydmFsIiwKLSAgICAgICAgICAiVlBTIFNQUyBQUFMgU2VuZCBJbnRlcnZhbCIsCi0gICAgICAgICAgIlNlbmQgVlBTLCBTUFMgYW5kIFBQUyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoc3Byb3AgcGFyYW1ldGVyIHNldHMgIgotICAgICAgICAgICJ3aWxsIGJlIG11bHRpcGxleGVkIGluIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRldGVjdGVkLikgIgotICAgICAgICAgICIoMCA9IGRpc2FibGVkLCAtMSA9IHNlbmQgd2l0aCBldmVyeSBJRFIgZnJhbWUpIiwKLSAgICAgICAgICAtMSwgMzYwMCwgREVGQVVMVF9DT05GSUdfSU5URVJWQUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfaDI2NV9wYXlfZmluYWxpemU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9oMjY1X3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2gyNjVfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJSVFAgSDI2NSBwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZC1lbmNvZGUgSDI2NSB2aWRlbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNzc5OCkiLAotICAgICAgIkp1cmdlbiBTbG93YWNrIDxqdXJnZW5zbG93YWNrQGdtYWlsLmNvbT4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaDI2NV9wYXlfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+Z2V0X2NhcHMgPSBnc3RfcnRwX2gyNjVfcGF5X2dldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfaDI2NV9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2gyNjVfcGF5X2hhbmRsZV9idWZmZXI7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zaW5rX2V2ZW50ID0gZ3N0X3J0cF9oMjY1X3BheV9zaW5rX2V2ZW50OwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBoMjY1cGF5X2RlYnVnLCAicnRwaDI2NXBheSIsIDAsCi0gICAgICAiSDI2NSBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjVfcGF5X2luaXQgKEdzdFJ0cEgyNjVQYXkgKiBydHBoMjY1cGF5KQotewotICBydHBoMjY1cGF5LT5xdWV1ZSA9IGdfYXJyYXlfbmV3IChGQUxTRSwgRkFMU0UsIHNpemVvZiAoZ3VpbnQpKTsKLSAgcnRwaDI2NXBheS0+c3BzID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jICgKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIHJ0cGgyNjVwYXktPnBwcyA9IGdfcHRyX2FycmF5X25ld193aXRoX2ZyZWVfZnVuYyAoCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBydHBoMjY1cGF5LT52cHMgPSBnX3B0cl9hcnJheV9uZXdfd2l0aF9mcmVlX2Z1bmMgKAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgcnRwaDI2NXBheS0+bGFzdF92cHNfc3BzX3BwcyA9IC0xOwotICBydHBoMjY1cGF5LT52cHNfc3BzX3Bwc19pbnRlcnZhbCA9IERFRkFVTFRfQ09ORklHX0lOVEVSVkFMOwotCi0gIHJ0cGgyNjVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2gyNjVfcGF5X2NsZWFyX3Zwc19zcHNfcHBzIChHc3RSdHBIMjY1UGF5ICogcnRwaDI2NXBheSkKLXsKLSAgZ19wdHJfYXJyYXlfc2V0X3NpemUgKHJ0cGgyNjVwYXktPnZwcywgMCk7Ci0gIGdfcHRyX2FycmF5X3NldF9zaXplIChydHBoMjY1cGF5LT5zcHMsIDApOwotICBnX3B0cl9hcnJheV9zZXRfc2l6ZSAocnRwaDI2NXBheS0+cHBzLCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2NV9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cEgyNjVQYXkgKnJ0cGgyNjVwYXk7Ci0KLSAgcnRwaDI2NXBheSA9IEdTVF9SVFBfSDI2NV9QQVkgKG9iamVjdCk7Ci0KLSAgZ19hcnJheV9mcmVlIChydHBoMjY1cGF5LT5xdWV1ZSwgVFJVRSk7Ci0KLSAgZ19wdHJfYXJyYXlfZnJlZSAocnRwaDI2NXBheS0+c3BzLCBUUlVFKTsKLSAgZ19wdHJfYXJyYXlfZnJlZSAocnRwaDI2NXBheS0+cHBzLCBUUlVFKTsKLSAgZ19wdHJfYXJyYXlfZnJlZSAocnRwaDI2NXBheS0+dnBzLCBUUlVFKTsKLQotICBnX29iamVjdF91bnJlZiAocnRwaDI2NXBheS0+YWRhcHRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgYWxsX2xldmVsc1tdWzRdID0gewotICAiMSIsCi0gICIyIiwKLSAgIjIuMSIsCi0gICIzIiwKLSAgIjMuMSIsCi0gICI0IiwKLSAgIjQuMSIsCi0gICI1IiwKLSAgIjUuMSIsCi0gICI1LjIiLAotICAiNiIsCi0gICI2LjEiLAotICAiNi4yIgotfTsKLQotc3RhdGljIGdib29sZWFuCi1wYXJzZV9maWVsZCAoR3N0U3RydWN0dXJlICogcywgY29uc3QgZ2NoYXIgKiBmaWVsZCwgZ3Vsb25nIG1pbiwgZ3Vsb25nIG1heCwKLSAgICBndWludDggKiByZXN1bHQpCi17Ci0gIGNvbnN0IGdjaGFyICpzdHI7Ci0KLSAgZ19hc3NlcnQgKHJlc3VsdCAhPSBOVUxMKTsKLQotICBzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsIGZpZWxkKTsKLSAgaWYgKHN0ciAhPSBOVUxMICYmICpzdHIgIT0gJ1wwJykgewotICAgIGd1bG9uZyB2YWx1ZTsKLSAgICBnY2hhciAqZW5kOwotCi0gICAgdmFsdWUgPSBzdHJ0b3VsIChzdHIsICZlbmQsIDEwKTsKLSAgICBpZiAoKmVuZCA9PSAnXDAnICYmIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgpIHsKLSAgICAgICpyZXN1bHQgPSAoZ3VpbnQ4KSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3J0cF9oMjY1X3BheV9nZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICp0ZW1wbGF0ZV9jYXBzOwotICBHc3RDYXBzICphbGxvd2VkX2NhcHM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdENhcHMgKmljYXBzOwotICBndWludCBpOwotCi0gIGFsbG93ZWRfY2FwcyA9Ci0gICAgICBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFEIChwYXlsb2FkKSwgTlVMTCk7Ci0KLSAgaWYgKGFsbG93ZWRfY2FwcyA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIHRlbXBsYXRlX2NhcHMgPQotICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZnc3RfcnRwX2gyNjVfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGlmIChnc3RfY2Fwc19pc19hbnkgKGFsbG93ZWRfY2FwcykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfcmVmICh0ZW1wbGF0ZV9jYXBzKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGFsbG93ZWRfY2FwcykpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfcmVmIChhbGxvd2VkX2NhcHMpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoYWxsb3dlZF9jYXBzKTsgaSsrKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWxsb3dlZF9jYXBzLCBpKTsKLSAgICBHc3RTdHJ1Y3R1cmUgKm5ld19zID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJ2aWRlby94LWgyNjUiKTsKLSAgICBndWludDggcHRsWzEyXSA9IHsgMCwgfTsKLSAgICBndWludDggdmFsdWU7Ci0KLSAgICBpZiAocGFyc2VfZmllbGQgKHMsICJwcm9maWxlLWlkIiwgMCwgMzEsICZ2YWx1ZSkpIHsKLSAgICAgIGNvbnN0IGdjaGFyICpwcm9maWxlOwotCi0gICAgICBwdGxbMF0gPSB2YWx1ZTsKLSAgICAgIHByb2ZpbGUgPSBnc3RfY29kZWNfdXRpbHNfaDI2NV9nZXRfcHJvZmlsZSAocHRsLCBzaXplb2YgKHB0bCkpOwotICAgICAgaWYgKHByb2ZpbGUgIT0gTlVMTCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXlsb2FkLCAicHJvZmlsZSAlcyIsIHByb2ZpbGUpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3MsICJwcm9maWxlIiwgR19UWVBFX1NUUklORywgcHJvZmlsZSwgTlVMTCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBheWxvYWQsICJpbnZhbGlkIHByb2ZpbGUtaWQgJWQgaW4gY2FwcyIsIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIm5vIHZhbGlkIHByb2ZpbGUtaWQgaW4gY2FwcyIpOwotICAgIH0KLQotICAgIGlmIChwYXJzZV9maWVsZCAocywgInRpZXItZmxhZyIsIDAsIDEsICZ2YWx1ZSkpIHsKLSAgICAgIGNvbnN0IGdjaGFyICp0aWVyOwotCi0gICAgICBwdGxbMF0gfD0gdmFsdWUgPDwgNTsKLSAgICAgIHRpZXIgPSBnc3RfY29kZWNfdXRpbHNfaDI2NV9nZXRfdGllciAocHRsLCBzaXplb2YgKHB0bCkpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgInRpZXIgJXMiLCB0aWVyKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywgInRpZXIiLCBHX1RZUEVfU1RSSU5HLCB0aWVyLCBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIm5vIHZhbGlkIHRpZXItZmxhZyBpbiBjYXBzIik7Ci0gICAgfQotCi0gICAgaWYgKHBhcnNlX2ZpZWxkIChzLCAibGV2ZWwtaWQiLCAwLCAyNTUsICZ2YWx1ZSkpIHsKLSAgICAgIGNvbnN0IGdjaGFyICpsZXZlbDsKLQotICAgICAgcHRsWzExXSA9IHZhbHVlOwotICAgICAgbGV2ZWwgPSBnc3RfY29kZWNfdXRpbHNfaDI2NV9nZXRfbGV2ZWwgKHB0bCwgc2l6ZW9mIChwdGwpKTsKLSAgICAgIGlmIChsZXZlbCAhPSBOVUxMKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJsZXZlbCAlcyIsIGxldmVsKTsKLSAgICAgICAgaWYgKHN0cmNtcCAobGV2ZWwsICIxIikgPT0gMCkgewotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfcywgImxldmVsIiwgR19UWVBFX1NUUklORywgbGV2ZWwsIE5VTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdWYWx1ZSBsZXZlbHMgPSB7IDAsIH07Ci0gICAgICAgICAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLSAgICAgICAgICBpbnQgajsKLQotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJmxldmVscywgR1NUX1RZUEVfTElTVCk7Ci0gICAgICAgICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHX1RZUEVfU1RSSU5HKTsKLQotICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBHX05fRUxFTUVOVFMgKGFsbF9sZXZlbHMpOyBqKyspIHsKLSAgICAgICAgICAgIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZ2YWwsIGFsbF9sZXZlbHNbal0pOwotICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfcHJlcGVuZF92YWx1ZSAoJmxldmVscywgJnZhbCk7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcCAobGV2ZWwsIGFsbF9sZXZlbHNbal0pKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlIChuZXdfcywgImxldmVsIiwgJmxldmVscyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGF5bG9hZCwgImludmFsaWQgbGV2ZWwtaWQgJWQgaW4gY2FwcyIsIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIm5vIHZhbGlkIGxldmVsLWlkIGluIGNhcHMiKTsKLSAgICB9Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfbWVyZ2Vfc3RydWN0dXJlIChjYXBzLCBuZXdfcyk7Ci0gIH0KLQotICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgdGVtcGxhdGVfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgY2FwcyA9IGljYXBzOwotCi1kb25lOgotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0bXA7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXlsb2FkLCAiSW50ZXJzZWN0ICUiIEdTVF9QVFJfRk9STUFUICIgYW5kIGZpbHRlciAlIgotICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgY2FwcywgZmlsdGVyKTsKLSAgICB0bXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBjYXBzID0gdG1wOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsYXRlX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoYWxsb3dlZF9jYXBzKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGF5bG9hZCwgInJldHVybmluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLS8qIHRha2UgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIFZQUywgU1BTIGFuZCBQUFMgbGlzdHMgYW5kIHNldCB0aGVtIG9uIHRoZQotICogY2FwcyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjVfcGF5X3NldF92cHNfc3BzX3BwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCkKLXsKLSAgR3N0UnRwSDI2NVBheSAqcGF5bG9hZGVyID0gR1NUX1JUUF9IMjY1X1BBWSAoYmFzZXBheWxvYWQpOwotICBnY2hhciAqc2V0OwotICBHU3RyaW5nICp2cHM7Ci0gIEdTdHJpbmcgKnNwczsKLSAgR1N0cmluZyAqcHBzOwotICBndWludCBjb3VudDsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQgaTsKLQotICB2cHMgPSBnX3N0cmluZ19uZXcgKCIiKTsKLSAgc3BzID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0gIHBwcyA9IGdfc3RyaW5nX25ldyAoIiIpOwotICBjb3VudCA9IDA7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHBheWxvYWRlci0+dnBzLT5sZW47IGkrKykgewotICAgIEdzdEJ1ZmZlciAqdnBzX2J1ZiA9Ci0gICAgICAgIEdTVF9CVUZGRVJfQ0FTVCAoZ19wdHJfYXJyYXlfaW5kZXggKHBheWxvYWRlci0+dnBzLCBpKSk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAodnBzX2J1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBzZXQgPSBnX2Jhc2U2NF9lbmNvZGUgKG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAodnBzX2J1ZiwgJm1hcCk7Ci0KLSAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmICh2cHMsICIlcyVzIiwgaSA/ICIsIiA6ICIiLCBzZXQpOwotICAgIGdfZnJlZSAoc2V0KTsKLSAgICBjb3VudCsrOwotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBwYXlsb2FkZXItPnNwcy0+bGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKnNwc19idWYgPQotICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGdfcHRyX2FycmF5X2luZGV4IChwYXlsb2FkZXItPnNwcywgaSkpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKHNwc19idWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgc2V0ID0gZ19iYXNlNjRfZW5jb2RlIChtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKHNwc19idWYsICZtYXApOwotCi0gICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3BzLCAiJXMlcyIsIGkgPyAiLCIgOiAiIiwgc2V0KTsKLSAgICBnX2ZyZWUgKHNldCk7Ci0gICAgY291bnQrKzsKLSAgfQotICBmb3IgKGkgPSAwOyBpIDwgcGF5bG9hZGVyLT5wcHMtPmxlbjsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpwcHNfYnVmID0KLSAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChnX3B0cl9hcnJheV9pbmRleCAocGF5bG9hZGVyLT5wcHMsIGkpKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChwcHNfYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHNldCA9IGdfYmFzZTY0X2VuY29kZSAobWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChwcHNfYnVmLCAmbWFwKTsKLQotICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHBwcywgIiVzJXMiLCBpID8gIiwiIDogIiIsIHNldCk7Ci0gICAgZ19mcmVlIChzZXQpOwotICAgIGNvdW50Kys7Ci0gIH0KLQotICBpZiAoR19MSUtFTFkgKGNvdW50KSkgewotICAgIC8qIGNvbWJpbmUgaW50byBvdXRwdXQgY2FwcyAqLwotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwKLSAgICAgICAgInNwcm9wLXZwcyIsIEdfVFlQRV9TVFJJTkcsIHZwcy0+c3RyLAotICAgICAgICAic3Byb3Atc3BzIiwgR19UWVBFX1NUUklORywgc3BzLT5zdHIsCi0gICAgICAgICJzcHJvcC1wcHMiLCBHX1RZUEVfU1RSSU5HLCBwcHMtPnN0ciwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKGJhc2VwYXlsb2FkLCBOVUxMKTsKLSAgfQotICBnX3N0cmluZ19mcmVlICh2cHMsIFRSVUUpOwotICBnX3N0cmluZ19mcmVlIChzcHMsIFRSVUUpOwotICBnX3N0cmluZ19mcmVlIChwcHMsIFRSVUUpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjVfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBIMjY1UGF5ICpydHBoMjY1cGF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cjsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGNvbnN0IGdjaGFyICphbGlnbm1lbnQsICpzdHJlYW1fZm9ybWF0OwotICBndWludDggbnVtX2FycmF5czsKLQotICBydHBoMjY1cGF5ID0gR1NUX1JUUF9IMjY1X1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIHN0ciA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIC8qIHdlIGNhbiBvbmx5IHNldCB0aGUgb3V0cHV0IGNhcHMgd2hlbiB3ZSBmb3VuZCB0aGUgc3Byb3BzIGFuZCBwcm9maWxlCi0gICAqIE5BTHMgKi8KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKGJhc2VwYXlsb2FkLCAidmlkZW8iLCBUUlVFLCAiSDI2NSIsIDkwMDAwKTsKLQotICBydHBoMjY1cGF5LT5hbGlnbm1lbnQgPSBHU1RfSDI2NV9BTElHTk1FTlRfVU5LTk9XTjsKLSAgYWxpZ25tZW50ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHIsICJhbGlnbm1lbnQiKTsKLSAgaWYgKGFsaWdubWVudCkgewotICAgIGlmIChnX3N0cl9lcXVhbCAoYWxpZ25tZW50LCAiYXUiKSkKLSAgICAgIHJ0cGgyNjVwYXktPmFsaWdubWVudCA9IEdTVF9IMjY1X0FMSUdOTUVOVF9BVTsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKGFsaWdubWVudCwgIm5hbCIpKQotICAgICAgcnRwaDI2NXBheS0+YWxpZ25tZW50ID0gR1NUX0gyNjVfQUxJR05NRU5UX05BTDsKLSAgfQotCi0gIHJ0cGgyNjVwYXktPnN0cmVhbV9mb3JtYXQgPSBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX1VOS05PV047Ci0gIHN0cmVhbV9mb3JtYXQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0ciwgInN0cmVhbS1mb3JtYXQiKTsKLSAgaWYgKHN0cmVhbV9mb3JtYXQpIHsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKHN0cmVhbV9mb3JtYXQsICJodmMxIikpCi0gICAgICBydHBoMjY1cGF5LT5zdHJlYW1fZm9ybWF0ID0gR1NUX0gyNjVfU1RSRUFNX0ZPUk1BVF9IVkMxOwotICAgIGlmIChnX3N0cl9lcXVhbCAoc3RyZWFtX2Zvcm1hdCwgImhldjEiKSkKLSAgICAgIHJ0cGgyNjVwYXktPnN0cmVhbV9mb3JtYXQgPSBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX0hFVjE7Ci0gICAgaWYgKGdfc3RyX2VxdWFsIChzdHJlYW1fZm9ybWF0LCAiYnl0ZS1zdHJlYW0iKSkKLSAgICAgIHJ0cGgyNjVwYXktPnN0cmVhbV9mb3JtYXQgPSBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX0JZVEVTVFJFQU07Ci0gIH0KLQotICAvKiBwYWNrZXRpemVkIEhFVkMgdmlkZW8gaGFzIGEgY29kZWNfZGF0YSAqLwotICBpZiAoKHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0ciwgImNvZGVjX2RhdGEiKSkpIHsKLSAgICBndWludCBudW1fdnBzLCBudW1fc3BzLCBudW1fcHBzOwotICAgIGdpbnQgaSwgaiwgbmFsX3NpemU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAiaGF2ZSBwYWNrZXRpemVkIGgyNjUiKTsKLQotICAgIGJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGRhdGEgPSBtYXAuZGF0YTsKLSAgICBzaXplID0gbWFwLnNpemU7Ci0KLSAgICAvKiBwYXJzZSB0aGUgaGV2Y0MgZGF0YSAqLwotICAgIGlmIChzaXplIDwgMjMpCi0gICAgICBnb3RvIGhldmNjX3Rvb19zbWFsbDsKLSAgICAvKiBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25WZXJzaW9uIChtdXN0IGJlIDEpICovCi0gICAgaWYgKGRhdGFbMF0gIT0gMSkKLSAgICAgIGdvdG8gd3JvbmdfdmVyc2lvbjsKLQotICAgIC8qIHByb2ZpbGVfc3BhY2UgfCB0aWVyX2ZsYWcgfCBwcm9maWxlX2lkYyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJwcm9maWxlICUwNngiLCBkYXRhWzFdKTsKLQotICAgIC8qIHByb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFncyAqLwotICAgIGZvciAoaSA9IDI7IGkgPCA2OyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDc7IGogPj0gMDsgai0tKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJwcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZyAlMDZ4IiwKLSAgICAgICAgICAgIChkYXRhW2ldID4+IGopICYgMSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgInByb2dyZXNzaXZlX3NvdXJjZV9mbGFnICUwNngiLAotICAgICAgICAoZGF0YVs2XSA+PiA3KSAmIDEpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJpbnRlcmxhY2VkX3NvdXJjZV9mbGFnICUwNngiLAotICAgICAgICAoZGF0YVs2XSA+PiA2KSAmIDEpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJub25fcGFja2VkX2NvbnN0cmFpbnRfZmxhZyAlMDZ4IiwKLSAgICAgICAgKGRhdGFbNl0gPj4gNSkgJiAxKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAiZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgJTA2eCIsCi0gICAgICAgIChkYXRhWzZdID4+IDQpICYgMSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAibGV2ZWxfaWRjICUwNngiLCBkYXRhWzEyXSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAibWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYyAlMDZ4IiwKLSAgICAgICAgKChkYXRhWzEzXSBeIDB4ZjApIDw8IDgpICsgZGF0YVsxNF0pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJwYXJyYWxsZWxpc21UeXBlICUwNnggKGlnbm9yZWQgYnkgcGFsb2FkZXIpIiwKLSAgICAgICAgZGF0YVsxNV0pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgInNwc19jaHJvbWFfZm9ybWF0X2lkYyAlMDZ4IiwKLSAgICAgICAgZGF0YVsxNl0gXiAweGZjKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAiYml0X2RlcHRoX2x1bWFfbWludXM4ICUwNngiLAotICAgICAgICBkYXRhWzE3XSBeIDB4ZjgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJiaXRfZGVwdGhfY2hyb21hX21pbnVzOCAlMDZ4IiwKLSAgICAgICAgZGF0YVsxOF0gXiAweGY4KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAiYXZnRnJhbWVSYXRlICUwNngiLCBkYXRhWzE5XSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgImF2Z0ZyYW1lUmF0ZSAlMDZ4IiwgZGF0YVsyMF0pOwotCi0gICAgLyogY29uc3RGcmFtZVJhdGUoMiBiaXRzKTogMCwgc3RyZWFtIG1heSBvciBtYXkgbm90IGJlIG9mIGNvbnN0YW50IGZyYW1lcmF0ZQotICAgICAqIG51bVRlbXBvcmFsTGF5ZXJzICgzIGJpdHMpOiBudW1iZXIgb2YgdGVtcG9yYWwgbGF5ZXJzLCB2YWx1ZSBmcm9tIFNQUwotICAgICAqIFRlbXBvcmFsSWROZXN0ZWQgKDEgYml0KTogc3BzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZyBmcm9tIFNQUwotICAgICAqIGxlbmd0aFNpemVNaW51c09uZSAoMiBiaXRzKTogcGx1cyAxIGluZGljYXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSBOQUxVbml0TGVuZ3RoICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgImNvbnN0RnJhbWVSYXRlICUwNngiLAotICAgICAgICAoZGF0YVsyMV0gPj4gNikgJiAweDAzKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAibnVtVGVtcG9yYWxMYXllcnMgJTA2eCIsCi0gICAgICAgIChkYXRhWzIxXSA+PiAzKSAmIDB4MDcpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJ0ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcgJTA2eCIsCi0gICAgICAgIChkYXRhWzIxXSA+PiAyKSAmIDB4MDEpOwotCi0gICAgcnRwaDI2NXBheS0+bmFsX2xlbmd0aF9zaXplID0gKGRhdGFbMjFdICYgMHgzKSArIDE7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgIm5hbCBsZW5ndGggJXUiLCBydHBoMjY1cGF5LT5uYWxfbGVuZ3RoX3NpemUpOwotCi0gICAgbnVtX2FycmF5cyA9IEdTVF9SRUFEX1VJTlQ4IChkYXRhICsgMjIpOwotCi0gICAgZGF0YSArPSAyMzsKLSAgICBzaXplIC09IDIzOwotCi0gICAgaWYgKG51bV9hcnJheXMgPiAwKSB7Ci0gICAgICBpZiAoKGRhdGFbMF0gJiAweDNmKSA9PSAweDIwKSB7ICAgLyogVlBTICovCi0KLSAgICAgICAgZGF0YSsrOwotICAgICAgICBudW1fdnBzID0gZGF0YVswXSA8PCA4IHwgZGF0YVsxXTsKLSAgICAgICAgZGF0YSArPSAyOwotICAgICAgICBzaXplIC09IDI7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV92cHM7IGkrKykgewotCi0gICAgICAgICAgR3N0QnVmZmVyICp2cHNfYnVmOwotCi0gICAgICAgICAgaWYgKHNpemUgPCAyKQotICAgICAgICAgICAgZ290byBoZXZjY19lcnJvcjsKLQotICAgICAgICAgIG5hbF9zaXplID0gKGRhdGFbMF0gPDwgOCkgfCBkYXRhWzFdOwotICAgICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgICBzaXplIC09IDI7Ci0KLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwaDI2NXBheSwgIlZQUyAlZCBzaXplICVkIiwgaSwgbmFsX3NpemUpOwotCi0gICAgICAgICAgaWYgKHNpemUgPCBuYWxfc2l6ZSkKLSAgICAgICAgICAgIGdvdG8gaGV2Y2NfZXJyb3I7Ci0KLSAgICAgICAgICAvKiBtYWtlIGEgYnVmZmVyIG91dCBvZiBpdCBhbmQgYWRkIHRvIFZQUyBsaXN0ICovCi0gICAgICAgICAgdnBzX2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobmFsX3NpemUpOwotICAgICAgICAgIGdzdF9idWZmZXJfZmlsbCAodnBzX2J1ZiwgMCwgZGF0YSwgbmFsX3NpemUpOwotICAgICAgICAgIGdzdF9ydHBfaDI2NV9hZGRfdnBzX3Nwc19wcHMgKEdTVF9FTEVNRU5UIChydHBoMjY1cGF5KSwKLSAgICAgICAgICAgICAgcnRwaDI2NXBheS0+dnBzLCBydHBoMjY1cGF5LT5zcHMsIHJ0cGgyNjVwYXktPnBwcywgdnBzX2J1Zik7Ci0gICAgICAgICAgZGF0YSArPSBuYWxfc2l6ZTsKLSAgICAgICAgICBzaXplIC09IG5hbF9zaXplOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC0tbnVtX2FycmF5czsKLSAgICB9Ci0KLSAgICBpZiAobnVtX2FycmF5cyA+IDApIHsKLSAgICAgIGlmICgoZGF0YVswXSAmIDB4M2YpID09IDB4MjEpIHsgICAvKiBTUFMgKi8KLQotICAgICAgICBkYXRhKys7Ci0gICAgICAgIG51bV9zcHMgPSBkYXRhWzBdIDw8IDggfCBkYXRhWzFdOwotICAgICAgICBkYXRhICs9IDI7Ci0gICAgICAgIHNpemUgLT0gMjsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NwczsgaSsrKSB7Ci0KLSAgICAgICAgICBHc3RCdWZmZXIgKnNwc19idWY7Ci0KLSAgICAgICAgICBpZiAoc2l6ZSA8IDIpCi0gICAgICAgICAgICBnb3RvIGhldmNjX2Vycm9yOwotCi0gICAgICAgICAgbmFsX3NpemUgPSAoZGF0YVswXSA8PCA4KSB8IGRhdGFbMV07Ci0gICAgICAgICAgZGF0YSArPSAyOwotICAgICAgICAgIHNpemUgLT0gMjsKLQotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBoMjY1cGF5LCAiU1BTICVkIHNpemUgJWQiLCBpLCBuYWxfc2l6ZSk7Ci0KLSAgICAgICAgICBpZiAoc2l6ZSA8IG5hbF9zaXplKQotICAgICAgICAgICAgZ290byBoZXZjY19lcnJvcjsKLQotICAgICAgICAgIC8qIG1ha2UgYSBidWZmZXIgb3V0IG9mIGl0IGFuZCBhZGQgdG8gU1BTIGxpc3QgKi8KLSAgICAgICAgICBzcHNfYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuYWxfc2l6ZSk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9maWxsIChzcHNfYnVmLCAwLCBkYXRhLCBuYWxfc2l6ZSk7Ci0gICAgICAgICAgZ3N0X3J0cF9oMjY1X2FkZF92cHNfc3BzX3BwcyAoR1NUX0VMRU1FTlQgKHJ0cGgyNjVwYXkpLAotICAgICAgICAgICAgICBydHBoMjY1cGF5LT52cHMsIHJ0cGgyNjVwYXktPnNwcywgcnRwaDI2NXBheS0+cHBzLCBzcHNfYnVmKTsKLSAgICAgICAgICBkYXRhICs9IG5hbF9zaXplOwotICAgICAgICAgIHNpemUgLT0gbmFsX3NpemU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLS1udW1fYXJyYXlzOwotICAgIH0KLQotICAgIGlmIChudW1fYXJyYXlzID4gMCkgewotICAgICAgaWYgKChkYXRhWzBdICYgMHgzZikgPT0gMHgyMikgeyAgIC8qIFBQUyAqLwotCi0gICAgICAgIGRhdGErKzsKLSAgICAgICAgbnVtX3BwcyA9IGRhdGFbMF0gPDwgOCB8IGRhdGFbMV07Ci0gICAgICAgIGRhdGEgKz0gMjsKLSAgICAgICAgc2l6ZSAtPSAyOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcHBzOyBpKyspIHsKLQotICAgICAgICAgIEdzdEJ1ZmZlciAqcHBzX2J1ZjsKLQotICAgICAgICAgIGlmIChzaXplIDwgMikKLSAgICAgICAgICAgIGdvdG8gaGV2Y2NfZXJyb3I7Ci0KLSAgICAgICAgICBuYWxfc2l6ZSA9IChkYXRhWzBdIDw8IDgpIHwgZGF0YVsxXTsKLSAgICAgICAgICBkYXRhICs9IDI7Ci0gICAgICAgICAgc2l6ZSAtPSAyOwotCi0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJQUFMgJWQgc2l6ZSAlZCIsIGksIG5hbF9zaXplKTsKLQotICAgICAgICAgIGlmIChzaXplIDwgbmFsX3NpemUpCi0gICAgICAgICAgICBnb3RvIGhldmNjX2Vycm9yOwotCi0gICAgICAgICAgLyogbWFrZSBhIGJ1ZmZlciBvdXQgb2YgaXQgYW5kIGFkZCB0byBQUFMgbGlzdCAqLwotICAgICAgICAgIHBwc19idWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG5hbF9zaXplKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX2ZpbGwgKHBwc19idWYsIDAsIGRhdGEsIG5hbF9zaXplKTsKLSAgICAgICAgICBnc3RfcnRwX2gyNjVfYWRkX3Zwc19zcHNfcHBzIChHU1RfRUxFTUVOVCAocnRwaDI2NXBheSksCi0gICAgICAgICAgICAgIHJ0cGgyNjVwYXktPnZwcywgcnRwaDI2NXBheS0+c3BzLCBydHBoMjY1cGF5LT5wcHMsIHBwc19idWYpOwotICAgICAgICAgIGRhdGEgKz0gbmFsX3NpemU7Ci0gICAgICAgICAgc2l6ZSAtPSBuYWxfc2l6ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAtLW51bV9hcnJheXM7Ci0gICAgfQotCi0gICAgLyogYW5kIHVwZGF0ZSB0aGUgY2FwcyB3aXRoIHRoZSBjb2xsZWN0ZWQgZGF0YSAqLwotICAgIGlmICghZ3N0X3J0cF9oMjY1X3BheV9zZXRfdnBzX3Nwc19wcHMgKGJhc2VwYXlsb2FkKSkKLSAgICAgIGdvdG8gc2V0X3Zwc19zcHNfcHBzX2ZhaWxlZDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJDYXBzIGhhdmUgYmVlbiBzZXQiKTsKLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgImhhdmUgYnl0ZXN0cmVhbSBoMjY1Iik7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotaGV2Y2NfdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwaDI2NXBheSwgImhldmNDIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiA8IDciLCBzaXplKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci13cm9uZ192ZXJzaW9uOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwaDI2NXBheSwgIndyb25nIGhldmNDIHZlcnNpb24iKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1oZXZjY19lcnJvcjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGgyNjVwYXksICJoZXZjQyB0b28gc21hbGwgIik7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotc2V0X3Zwc19zcHNfcHBzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGgyNjVwYXksICJmYWlsZWQgdG8gc2V0IHZwcy9zcHMvcHBzIik7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotZXJyb3I6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ3VpbnQKLW5leHRfc3RhcnRfY29kZSAoY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgLyogQm95ZXItTW9vcmUgc3RyaW5nIG1hdGNoaW5nIGFsZ29yaXRobSwgaW4gYSBkZWdlbmVyYXRpdmUKLSAgICogc2Vuc2UgYmVjYXVzZSBvdXIgc2VhcmNoICdhbHBoYWJldCcgaXMgYmluYXJ5IC0gMCAmIDEgb25seS4KLSAgICogVGhpcyBhbGxvdyB1cyB0byBzaW1wbGlmeSB0aGUgZ2VuZXJhbCBCTSBhbGdvcml0aG0gdG8gYSB2ZXJ5Ci0gICAqIHNpbXBsZSBmb3JtLiAqLwotICAvKiBhc3N1bWUgMSBpcyBpbiB0aGUgM3RoIGJ5dGUgKi8KLSAgZ3VpbnQgb2Zmc2V0ID0gMjsKLQotICB3aGlsZSAob2Zmc2V0IDwgc2l6ZSkgewotICAgIGlmICgxID09IGRhdGFbb2Zmc2V0XSkgewotICAgICAgdW5zaWduZWQgaW50IHNoaWZ0ID0gb2Zmc2V0OwotCi0gICAgICBpZiAoMCA9PSBkYXRhWy0tc2hpZnRdKSB7Ci0gICAgICAgIGlmICgwID09IGRhdGFbLS1zaGlmdF0pIHsKLSAgICAgICAgICByZXR1cm4gc2hpZnQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIFRoZSBqdW1wIGlzIGFsd2F5cyAzIGJlY2F1c2Ugb2YgdGhlIDEgcHJldmlvdXNseSBtYXRjaGVkLgotICAgICAgICogQWxsIHRoZSAwJ3MgbXVzdCBiZSBhZnRlciB0aGlzICcxJyBtYXRjaGVkIGF0IG9mZnNldCAqLwotICAgICAgb2Zmc2V0ICs9IDM7Ci0gICAgfSBlbHNlIGlmICgwID09IGRhdGFbb2Zmc2V0XSkgewotICAgICAgLyogbWF5YmUgbmV4dCBieXRlIGlzIDE/ICovCi0gICAgICBvZmZzZXQrKzsKLSAgICB9IGVsc2UgewotICAgICAgLyogY2FuIGp1bXAgMyBieXRlcyBmb3J3YXJkICovCi0gICAgICBvZmZzZXQgKz0gMzsKLSAgICB9Ci0gICAgLyogYXQgZWFjaCBpdGVyYXRpb24sIHdlIHJlc2NhbiBpbiBhIGJhY2t3YXJkIG1hbm5lciB1bnRpbAotICAgICAqIHdlIG1hdGNoIDAuMC4xIGluIHJldmVyc2Ugb3JkZXIuIFNpbmNlIG91ciBzZWFyY2ggc3RyaW5nCi0gICAgICogaGFzIG9ubHkgMiAnYWxwYWJldHMnIChpLmUuIDAgJiAxKSwgd2Uga25vdyB0aGF0IGFueQotICAgICAqIG1pc21hdGNoIHdpbGwgZm9yY2UgdXMgdG8gc2hpZnQgYSBmaXhlZCBudW1iZXIgb2Ygc3RlcHMgKi8KLSAgfQotICBHU1RfREVCVUcgKCJDYW5ub3QgZmluZCBuZXh0IE5BTCBzdGFydCBjb2RlLiByZXR1cm5pbmcgJXUiLCBzaXplKTsKLQotICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2gyNjVfcGF5X2RlY29kZV9uYWwgKEdzdFJ0cEgyNjVQYXkgKiBwYXlsb2FkZXIsCi0gICAgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwgR3N0Q2xvY2tUaW1lIGR0cywgR3N0Q2xvY2tUaW1lIHB0cykKLXsKLSAgZ3VpbnQ4IHR5cGU7Ci0gIGdib29sZWFuIHVwZGF0ZWQ7Ci0KLSAgLyogZGVmYXVsdCBpcyBubyB1cGRhdGUgKi8KLSAgdXBkYXRlZCA9IEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWRlciwgIk5BTCBwYXlsb2FkIHNpemUgJXUiLCBzaXplKTsKLQotICB0eXBlID0gKGRhdGFbMF0gPj4gMSkgJiAweDNmOwotCi0gIC8qIFdlIHJlY29yZCB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IFNQUy9QUFMgc28KLSAgICogdGhhdCB3ZSBjYW4gaW5zZXJ0IHRoZW0gYXQgcmVndWxhciBpbnRlcnZhbHMgYW5kIHdoZW4gbmVlZGVkLiAqLwotICBpZiAoR1NUX0gyNjVfTkFMX1ZQUyA9PSB0eXBlIHx8IEdTVF9IMjY1X05BTF9TUFMgPT0gdHlwZQotICAgICAgfHwgR1NUX0gyNjVfTkFMX1BQUyA9PSB0eXBlKSB7Ci0gICAgR3N0QnVmZmVyICpuYWw7Ci0KLSAgICAvKiBlbmNvZGUgdGhlIGVudGlyZSBOQUwgaW4gYmFzZTY0ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZGVyLCAiZm91bmQgJXMgKHR5cGUgMHgleCksIHNpemUgJXUiLAotICAgICAgICB0eXBlID09IEdTVF9IMjY1X05BTF9WUFMgPyAiVlBTIiA6IHR5cGUgPT0gR1NUX0gyNjVfTkFMX1NQUyA/Ci0gICAgICAgICJTUFMiIDogIlBQUyIsIHR5cGUsIHNpemUpOwotCi0gICAgbmFsID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemUsIE5VTEwpOwotICAgIGdzdF9idWZmZXJfZmlsbCAobmFsLCAwLCBkYXRhLCBzaXplKTsKLQotICAgIHVwZGF0ZWQgPSBnc3RfcnRwX2gyNjVfYWRkX3Zwc19zcHNfcHBzIChHU1RfRUxFTUVOVCAocGF5bG9hZGVyKSwKLSAgICAgICAgcGF5bG9hZGVyLT52cHMsIHBheWxvYWRlci0+c3BzLCBwYXlsb2FkZXItPnBwcywgbmFsKTsKLQotICAgIC8qIHJlbWVtYmVyIHdoZW4gd2UgbGFzdCBzYXcgVlBTICovCi0gICAgaWYgKHVwZGF0ZWQgJiYgcHRzICE9IC0xKQotICAgICAgcGF5bG9hZGVyLT5sYXN0X3Zwc19zcHNfcHBzID0gcHRzOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWRlciwgIk5BTFUgdHlwZSAweCV4LCBzaXplICV1IiwgdHlwZSwgc2l6ZSk7Ci0gIH0KLQotICByZXR1cm4gdXBkYXRlZDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2NV9wYXlfcGF5bG9hZF9uYWwgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogcGF5YnVmLCBHc3RDbG9ja1RpbWUgZHRzLCBHc3RDbG9ja1RpbWUgcHRzLCBnYm9vbGVhbiBlbmRfb2ZfYXUpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9oMjY1X3BheV9zZW5kX3Zwc19zcHNfcHBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdFJ0cEgyNjVQYXkgKiBydHBoMjY1cGF5LCBHc3RDbG9ja1RpbWUgZHRzLCBHc3RDbG9ja1RpbWUgcHRzKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBnYm9vbGVhbiBzZW50X2FsbF92cHNfc3BzX3BwcyA9IFRSVUU7Ci0gIGd1aW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHJ0cGgyNjVwYXktPnZwcy0+bGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKnZwc19idWYgPQotICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGdfcHRyX2FycmF5X2luZGV4IChydHBoMjY1cGF5LT52cHMsIGkpKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJpbnNlcnRpbmcgVlBTIGluIHRoZSBzdHJlYW0iKTsKLSAgICAvKiByZXNlbmQgVlBTICovCi0gICAgcmV0ID0gZ3N0X3J0cF9oMjY1X3BheV9wYXlsb2FkX25hbCAoYmFzZXBheWxvYWQsIGdzdF9idWZmZXJfcmVmICh2cHNfYnVmKSwKLSAgICAgICAgZHRzLCBwdHMsIEZBTFNFKTsKLSAgICAvKiBOb3QgY3JpdGljYWwgaGVyZTsgYnV0IHRocm93IGEgd2FybmluZyAqLwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIHNlbnRfYWxsX3Zwc19zcHNfcHBzID0gRkFMU0U7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiUHJvYmxlbSBwdXNoaW5nIFZQUyIpOwotICAgIH0KLSAgfQotICBmb3IgKGkgPSAwOyBpIDwgcnRwaDI2NXBheS0+c3BzLT5sZW47IGkrKykgewotICAgIEdzdEJ1ZmZlciAqc3BzX2J1ZiA9Ci0gICAgICAgIEdTVF9CVUZGRVJfQ0FTVCAoZ19wdHJfYXJyYXlfaW5kZXggKHJ0cGgyNjVwYXktPnNwcywgaSkpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwgImluc2VydGluZyBTUFMgaW4gdGhlIHN0cmVhbSIpOwotICAgIC8qIHJlc2VuZCBTUFMgKi8KLSAgICByZXQgPSBnc3RfcnRwX2gyNjVfcGF5X3BheWxvYWRfbmFsIChiYXNlcGF5bG9hZCwgZ3N0X2J1ZmZlcl9yZWYgKHNwc19idWYpLAotICAgICAgICBkdHMsIHB0cywgRkFMU0UpOwotICAgIC8qIE5vdCBjcml0aWNhbCBoZXJlOyBidXQgdGhyb3cgYSB3YXJuaW5nICovCi0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgc2VudF9hbGxfdnBzX3Nwc19wcHMgPSBGQUxTRTsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmFzZXBheWxvYWQsICJQcm9ibGVtIHB1c2hpbmcgU1BTIik7Ci0gICAgfQotICB9Ci0gIGZvciAoaSA9IDA7IGkgPCBydHBoMjY1cGF5LT5wcHMtPmxlbjsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpwcHNfYnVmID0KLSAgICAgICAgR1NUX0JVRkZFUl9DQVNUIChnX3B0cl9hcnJheV9pbmRleCAocnRwaDI2NXBheS0+cHBzLCBpKSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAiaW5zZXJ0aW5nIFBQUyBpbiB0aGUgc3RyZWFtIik7Ci0gICAgLyogcmVzZW5kIFBQUyAqLwotICAgIHJldCA9IGdzdF9ydHBfaDI2NV9wYXlfcGF5bG9hZF9uYWwgKGJhc2VwYXlsb2FkLCBnc3RfYnVmZmVyX3JlZiAocHBzX2J1ZiksCi0gICAgICAgIGR0cywgcHRzLCBGQUxTRSk7Ci0gICAgLyogTm90IGNyaXRpY2FsIGhlcmU7IGJ1dCB0aHJvdyBhIHdhcm5pbmcgKi8KLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBzZW50X2FsbF92cHNfc3BzX3BwcyA9IEZBTFNFOwotICAgICAgR1NUX1dBUk5JTkcgKCJQcm9ibGVtIHB1c2hpbmcgUFBTIik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHB0cyAhPSAtMSAmJiBzZW50X2FsbF92cHNfc3BzX3BwcykKLSAgICBydHBoMjY1cGF5LT5sYXN0X3Zwc19zcHNfcHBzID0gcHRzOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2gyNjVfcGF5X3BheWxvYWRfbmFsIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIHBheWJ1ZiwgR3N0Q2xvY2tUaW1lIGR0cywgR3N0Q2xvY2tUaW1lIHB0cywgZ2Jvb2xlYW4gZW5kX29mX2F1KQotewotICBHc3RSdHBIMjY1UGF5ICpydHBoMjY1cGF5OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQ4IG5hbEhlYWRlclsyXTsKLSAgZ3VpbnQ4IG5hbFR5cGU7Ci0gIGd1aW50IHBhY2tldF9sZW4sIHBheWxvYWRfbGVuLCBtdHU7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBndWludDggKnBheWxvYWQ7Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3QgPSBOVUxMOwotICBnYm9vbGVhbiBzZW5kX3Zwc19zcHNfcHBzOwotICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gIGd1aW50IHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChwYXlidWYpOwotCi0gIHJ0cGgyNjVwYXkgPSBHU1RfUlRQX0gyNjVfUEFZIChiYXNlcGF5bG9hZCk7Ci0gIG10dSA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocnRwaDI2NXBheSk7Ci0KLSAgZ3N0X2J1ZmZlcl9leHRyYWN0IChwYXlidWYsIDAsIG5hbEhlYWRlciwgMik7Ci0gIG5hbFR5cGUgPSAobmFsSGVhZGVyWzBdID4+IDEpICYgMHgzZjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAiUHJvY2Vzc2luZyBCdWZmZXIgd2l0aCBOQUwgVFlQRT0lZCIsIG5hbFR5cGUpOwotCi0gIC8qIHNob3VsZCBzZXQgc3JjIGNhcHMgYmVmb3JlIHB1c2hpbmcgc3R1ZmYsCi0gICAqIGFuZCBpZiB3ZSBkaWQgbm90IHNlZSBlbm91Z2ggVlBTL1NQUy9QUFMsIHRoYXQgbWF5IG5vdCBiZSB0aGUgY2FzZSAqLwotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFECi0gICAgICAgICAgICAgIChiYXNlcGF5bG9hZCkpKSkKLSAgICBnc3RfcnRwX2gyNjVfcGF5X3NldF92cHNfc3BzX3BwcyAoYmFzZXBheWxvYWQpOwotCi0gIHNlbmRfdnBzX3Nwc19wcHMgPSBGQUxTRTsKLQotICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGVtaXQgYW4gVlBTL1NQUy9QUFMgbm93ICovCi0gIGlmICgobmFsVHlwZSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfVFJBSUxfTikKLSAgICAgIHx8IChuYWxUeXBlID09IEdTVF9IMjY1X05BTF9TTElDRV9UUkFJTF9SKQotICAgICAgfHwgKG5hbFR5cGUgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1RTQV9OKQotICAgICAgfHwgKG5hbFR5cGUgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1RTQV9SKQotICAgICAgfHwgKG5hbFR5cGUgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1NUU0FfTikKLSAgICAgIHx8IChuYWxUeXBlID09IEdTVF9IMjY1X05BTF9TTElDRV9TVFNBX1IpCi0gICAgICB8fCAobmFsVHlwZSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfUkFTTF9OKQotICAgICAgfHwgKG5hbFR5cGUgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX1JBU0xfUikKLSAgICAgIHx8IChuYWxUeXBlID09IEdTVF9IMjY1X05BTF9TTElDRV9CTEFfV19MUCkKLSAgICAgIHx8IChuYWxUeXBlID09IEdTVF9IMjY1X05BTF9TTElDRV9CTEFfV19SQURMKQotICAgICAgfHwgKG5hbFR5cGUgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX0JMQV9OX0xQKQotICAgICAgfHwgKG5hbFR5cGUgPT0gR1NUX0gyNjVfTkFMX1NMSUNFX0lEUl9XX1JBREwpCi0gICAgICB8fCAobmFsVHlwZSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfSURSX05fTFApCi0gICAgICB8fCAobmFsVHlwZSA9PSBHU1RfSDI2NV9OQUxfU0xJQ0VfQ1JBX05VVCkpIHsKLSAgICBpZiAocnRwaDI2NXBheS0+dnBzX3Nwc19wcHNfaW50ZXJ2YWwgPiAwKSB7Ci0gICAgICBpZiAocnRwaDI2NXBheS0+bGFzdF92cHNfc3BzX3BwcyAhPSAtMSkgewotICAgICAgICBndWludDY0IGRpZmY7Ci0KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cGgyNjVwYXksCi0gICAgICAgICAgICAibm93ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBsYXN0IFZQUy9TUFMvUFBTICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHB0cyksIEdTVF9USU1FX0FSR1MgKHJ0cGgyNjVwYXktPmxhc3RfdnBzX3Nwc19wcHMpKTsKLQotICAgICAgICAvKiBjYWxjdWxhdGUgZGlmZiBiZXR3ZWVuIGxhc3QgU1BTL1BQUyBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICAgICAgaWYgKHB0cyA+IHJ0cGgyNjVwYXktPmxhc3RfdnBzX3Nwc19wcHMpCi0gICAgICAgICAgZGlmZiA9IHB0cyAtIHJ0cGgyNjVwYXktPmxhc3RfdnBzX3Nwc19wcHM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkaWZmID0gMDsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LAotICAgICAgICAgICAgImludGVydmFsIHNpbmNlIGxhc3QgVlBTL1NQUy9QUFMgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGlmZikpOwotCi0gICAgICAgIC8qIGJpZ2dlciB0aGFuIGludGVydmFsLCBxdWV1ZSBTUFMvUFBTICovCi0gICAgICAgIGlmIChHU1RfVElNRV9BU19TRUNPTkRTIChkaWZmKSA+PSBydHBoMjY1cGF5LT52cHNfc3BzX3Bwc19pbnRlcnZhbCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGgyNjVwYXksICJ0aW1lIHRvIHNlbmQgVlBTL1NQUy9QUFMiKTsKLSAgICAgICAgICBzZW5kX3Zwc19zcHNfcHBzID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogbm8ga25vd24gcHJldmlvdXMgU1BTL1BQUyB0aW1lLCBzZW5kIG5vdyAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LCAibm8gcHJldmlvdXMgVlBTL1NQUy9QUFMgdGltZSwgc2VuZCBub3ciKTsKLSAgICAgICAgc2VuZF92cHNfc3BzX3BwcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChydHBoMjY1cGF5LT52cHNfc3BzX3Bwc19pbnRlcnZhbCA9PSAtMSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwKLSAgICAgICAgICAic2VuZGluZyBWUFMvU1BTL1BQUyBiZWZvcmUgY3VycmVudCBJRFIgZnJhbWUiKTsKLSAgICAgIC8qIHNlbmQgVlBTL1NQUy9QUFMgYmVmb3JlIGV2ZXJ5IElEUiBmcmFtZSAqLwotICAgICAgc2VuZF92cHNfc3BzX3BwcyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHNlbmRfdnBzX3Nwc19wcHMgfHwgcnRwaDI2NXBheS0+c2VuZF92cHNfc3BzX3BwcykgewotICAgIC8qIHdlIG5lZWQgdG8gc2VuZCBTUFMvUFBTIG5vdyBmaXJzdC4gRklYTUUsIGRvbid0IHVzZSB0aGUgcHRzIGZvcgotICAgICAqIGNoZWNraW5nIHdoZW4gd2UgbmVlZCB0byBzZW5kIFNQUy9QUFMgYnV0IGNvbnZlcnQgdG8gcnVubmluZ190aW1lIGZpcnN0LiAqLwotICAgIHJ0cGgyNjVwYXktPnNlbmRfdnBzX3Nwc19wcHMgPSBGQUxTRTsKLSAgICByZXQgPSBnc3RfcnRwX2gyNjVfcGF5X3NlbmRfdnBzX3Nwc19wcHMgKGJhc2VwYXlsb2FkLCBydHBoMjY1cGF5LCBkdHMsIHB0cyk7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocGF5YnVmKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0KLSAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAoc2l6ZSwgMCwgMCk7Ci0KLSAgaWYgKHBhY2tldF9sZW4gPCBtdHUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBoMjY1cGF5LAotICAgICAgICAiTkFMIFVuaXQgZml0IGluIG9uZSBwYWNrZXQgZGF0YXNpemU9JWQgbXR1PSVkIiwgc2l6ZSwgbXR1KTsKLSAgICAvKiB3aWxsIGZpdCBpbiBvbmUgcGFja2V0ICovCi0KLSAgICAvKiB1c2UgYnVmZmVyIGxpc3RzCi0gICAgICogY3JlYXRlIGJ1ZmZlciB3aXRob3V0IHBheWxvYWQgY29udGFpbmluZyBvbmx5IHRoZSBSVFAgaGVhZGVyCi0gICAgICogKG1lbW9yeSBibG9jayBhdCBpbmRleCAwKSAqLwotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMCwgMCwgMCk7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgICAvKiBvbmx5IHNldCB0aGUgbWFya2VyIGJpdCBvbiBwYWNrZXRzIGNvbnRhaW5pbmcgYWNjZXNzIHVuaXRzICovCi0gICAgaWYgKElTX0FDQ0VTU19VTklUIChuYWxUeXBlKSAmJiBlbmRfb2ZfYXUpIHsKLSAgICAgIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIDEpOwotICAgIH0KLQotICAgIC8qIHRpbWVzdGFtcCB0aGUgb3V0YnVmZmVyICovCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBwdHM7Ci0gICAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHM7Ci0KLSAgICAvKiBpbnNlcnQgcGF5bG9hZCBtZW1vcnkgYmxvY2sgKi8KLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2NXBheSksIG91dGJ1ZiwgcGF5YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChvdXRidWYsIHBheWJ1Zik7Ci0KLSAgICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldyAoKTsKLQotICAgIC8qIGFkZCB0aGUgYnVmZmVyIHRvIHRoZSBidWZmZXIgbGlzdCAqLwotICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIG91dGJ1Zik7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICAvKiBwdXNoIHRoZSBsaXN0IHRvIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHBpcGUgKi8KLSAgICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoX2xpc3QgKGJhc2VwYXlsb2FkLCBsaXN0KTsKLSAgfSBlbHNlIHsKLSAgICAvKiBmcmFnbWVudGF0aW9uIFVuaXRzICovCi0gICAgZ3VpbnQgbGltaXRlZFNpemU7Ci0gICAgaW50IGlpID0gMCwgc3RhcnQgPSAxLCBlbmQgPSAwLCBwb3MgPSAwOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsCi0gICAgICAgICJOQUwgVW5pdCBET0VTIE5PVCBmaXQgaW4gb25lIHBhY2tldCBkYXRhc2l6ZT0lZCBtdHU9JWQiLCBzaXplLCBtdHUpOwotCi0gICAgcG9zICs9IDI7Ci0gICAgc2l6ZSAtPSAyOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsICJVc2luZyBGVSBmcmFnbWVudGF0aW9uIGZvciBkYXRhIHNpemU9JWQiLAotICAgICAgICBzaXplKTsKLQotICAgIC8qIFdlIGtlZXAgMyBieXRlcyBmb3IgUGF5bG9hZEhkciBhbmQgRlUgSGVhZGVyICovCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuIChtdHUgLSAzLCAwLCAwKTsKLQotICAgIGxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3ICgpOwotCi0gICAgd2hpbGUgKGVuZCA9PSAwKSB7Ci0gICAgICBsaW1pdGVkU2l6ZSA9IHNpemUgPCBwYXlsb2FkX2xlbiA/IHNpemUgOiBwYXlsb2FkX2xlbjsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLAotICAgICAgICAgICJJbnNpZGUgIEZVIGZyYWdtZW50YXRpb24gbGltaXRlZFNpemU9JWQgaXRlcmF0aW9uPSVkIiwgbGltaXRlZFNpemUsCi0gICAgICAgICAgaWkpOwotCi0gICAgICAvKiB1c2UgYnVmZmVyIGxpc3RzCi0gICAgICAgKiBjcmVhdGUgYnVmZmVyIHdpdGhvdXQgcGF5bG9hZCBjb250YWluaW5nIG9ubHkgdGhlIFJUUCBoZWFkZXIKLSAgICAgICAqIChtZW1vcnkgYmxvY2sgYXQgaW5kZXggMCksIGFuZCB3aXRoIHNwYWNlIGZvciBQYXlsb2FkSGRyIGFuZCBGVSBoZWFkZXIgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMywgMCwgMCk7Ci0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLQotICAgICAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHM7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHB0czsKLSAgICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0KLSAgICAgIGlmIChsaW1pdGVkU2l6ZSA9PSBzaXplKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VwYXlsb2FkLCAiZW5kIHNpemU9JWQgaXRlcmF0aW9uPSVkIiwgc2l6ZSwgaWkpOwotICAgICAgICBlbmQgPSAxOwotICAgICAgfQotCi0gICAgICAvKiBQYXlsb2FkSGRyICh0eXBlID0gNDkpICovCi0gICAgICBwYXlsb2FkWzBdID0gKG5hbEhlYWRlclswXSAmIDB4ODEpIHwgKDQ5IDw8IDEpOwotICAgICAgcGF5bG9hZFsxXSA9IG5hbEhlYWRlclsxXTsKLQotICAgICAgLyogc2V0IHRoZSBtYXJrZXIgYml0IG9uIHRoZSBsYXN0IHBhY2tldCBvZiBhbiBhY2Nlc3MgdW5pdCAqLwotICAgICAgaWYgKElTX0FDQ0VTU19VTklUIChuYWxUeXBlKSkgewotICAgICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBlbmQgJiYgZW5kX29mX2F1KTsKLSAgICAgIH0KLQotICAgICAgLyogRlUgSGVhZGVyICovCi0gICAgICBwYXlsb2FkWzJdID0gKHN0YXJ0IDw8IDcpIHwgKGVuZCA8PCA2KSB8IChuYWxUeXBlICYgMHgzZik7Ci0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgICAgLyogaW5zZXJ0IHBheWxvYWQgbWVtb3J5IGJsb2NrICovCi0gICAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwaDI2NXBheSksIG91dGJ1ZiwgcGF5YnVmLAotICAgICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byAob3V0YnVmLCBwYXlidWYsIEdTVF9CVUZGRVJfQ09QWV9NRU1PUlksIHBvcywKLSAgICAgICAgICBsaW1pdGVkU2l6ZSk7Ci0gICAgICAvKiBhZGQgdGhlIGJ1ZmZlciB0byB0aGUgYnVmZmVyIGxpc3QgKi8KLSAgICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIG91dGJ1Zik7Ci0KLSAgICAgIHNpemUgLT0gbGltaXRlZFNpemU7Ci0gICAgICBwb3MgKz0gbGltaXRlZFNpemU7Ci0gICAgICBpaSsrOwotICAgICAgc3RhcnQgPSAwOwotICAgIH0KLQotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAoYmFzZXBheWxvYWQsIGxpc3QpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKHBheWJ1Zik7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaDI2NV9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cEgyNjVQYXkgKnJ0cGgyNjVwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnc2l6ZSBzaXplOwotICBndWludCBuYWxfbGVuLCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICBHc3RDbG9ja1RpbWUgZHRzLCBwdHM7Ci0gIEdBcnJheSAqbmFsX3F1ZXVlOwotICBnYm9vbGVhbiBoZXZjOwotICBHc3RCdWZmZXIgKnBheWJ1ZiA9IE5VTEw7Ci0gIGdzaXplIHNraXA7Ci0KLSAgcnRwaDI2NXBheSA9IEdTVF9SVFBfSDI2NV9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICAvKiB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIG9uZSBvciBtb3JlIE5BTCB1bml0cyAqLwotCi0gIGhldmMgPSAocnRwaDI2NXBheS0+c3RyZWFtX2Zvcm1hdCA9PSBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX0hFVjEpCi0gICAgICB8fCAocnRwaDI2NXBheS0+c3RyZWFtX2Zvcm1hdCA9PSBHU1RfSDI2NV9TVFJFQU1fRk9STUFUX0hWQzEpOwotCi0gIGlmIChoZXZjKSB7Ci0gICAgLyogSW4gaGV2YyBtb2RlLCB0aGVyZSBpcyBubyBhZGFwdGVyLCBzbyBub3RoaW5nIHRvIGZsdXNoICovCi0gICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgZGF0YSA9IG1hcC5kYXRhOwotICAgIHNpemUgPSBtYXAuc2l6ZTsKLSAgICBwdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgICBkdHMgPSBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwgImdvdCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZHRzID0gZ3N0X2FkYXB0ZXJfcHJldl9kdHMgKHJ0cGgyNjVwYXktPmFkYXB0ZXIsIE5VTEwpOwotICAgIHB0cyA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChydHBoMjY1cGF5LT5hZGFwdGVyLCBOVUxMKTsKLSAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdHMpKQotICAgICAgICBkdHMgPSBHU1RfQlVGRkVSX0RUUyAoYnVmZmVyKTsKLSAgICAgIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHB0cykpCi0gICAgICAgIHB0cyA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotCi0gICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBoMjY1cGF5LT5hZGFwdGVyLCBidWZmZXIpOwotICAgIH0KLSAgICBzaXplID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBoMjY1cGF5LT5hZGFwdGVyKTsKLSAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUgaWYgdGhlIGFkYXB0ZXIgaXMgZW1wdHksIGUuZy4gb24gRU9TICovCi0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwIChydHBoMjY1cGF5LT5hZGFwdGVyLCBzaXplKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwKLSAgICAgICAgImdvdCAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzICglIiBHX0dTSVpFX0ZPUk1BVCAiKSIsIHNpemUsCi0gICAgICAgIGJ1ZmZlciA/IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgOiAwKTsKLSAgfQotCi0gIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIG5vdyBsb29wIG92ZXIgYWxsIE5BTCB1bml0cyBhbmQgcHV0IHRoZW0gaW4gYSBwYWNrZXQKLSAgICogRklYTUUsIHdlIHNob3VsZCByZWFsbHkgdHJ5IHRvIHBhY2sgbXVsdGlwbGUgTkFMIHVuaXRzIGludG8gb25lIFJUUCBwYWNrZXQKLSAgICogaWYgd2UgY2FuLCBlc3BlY2lhbGx5IGZvciB0aGUgY29uZmlnIHBhY2tldHMgdGhhdCB3b250J3QgY2F1c2UgZGVjb2RlcgotICAgKiBsYXRlbmN5LiAqLwotICBpZiAoaGV2YykgewotICAgIGd1aW50IG5hbF9sZW5ndGhfc2l6ZTsKLSAgICBnc2l6ZSBvZmZzZXQgPSAwOwotCi0gICAgbmFsX2xlbmd0aF9zaXplID0gcnRwaDI2NXBheS0+bmFsX2xlbmd0aF9zaXplOwotCi0gICAgd2hpbGUgKHNpemUgPiBuYWxfbGVuZ3RoX3NpemUpIHsKLSAgICAgIGdpbnQgaTsKLSAgICAgIGdib29sZWFuIGVuZF9vZl9hdSA9IEZBTFNFOwotCi0gICAgICBuYWxfbGVuID0gMDsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuYWxfbGVuZ3RoX3NpemU7IGkrKykgewotICAgICAgICBuYWxfbGVuID0gKChuYWxfbGVuIDw8IDgpICsgZGF0YVtpXSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNraXAgdGhlIGxlbmd0aCBieXRlcywgbWFrZSBzdXJlIHdlIGRvbid0IHJ1biBwYXN0IHRoZSBidWZmZXIgc2l6ZSAqLwotICAgICAgZGF0YSArPSBuYWxfbGVuZ3RoX3NpemU7Ci0gICAgICBvZmZzZXQgKz0gbmFsX2xlbmd0aF9zaXplOwotICAgICAgc2l6ZSAtPSBuYWxfbGVuZ3RoX3NpemU7Ci0KLSAgICAgIGlmIChzaXplID49IG5hbF9sZW4pIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsICJnb3QgTkFMIG9mIHNpemUgJXUiLCBuYWxfbGVuKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hbF9sZW4gPSBzaXplOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwgImdvdCBpbmNvbXBsZXRlIE5BTCBvZiBzaXplICV1IiwKLSAgICAgICAgICAgIG5hbF9sZW4pOwotICAgICAgfQotCi0gICAgICAvKiBJZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHRoZW4gd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUKLSAgICAgICAqIGFjY2VzcyB1bml0Ci0gICAgICAgKi8KLSAgICAgIGlmIChydHBoMjY1cGF5LT5hbGlnbm1lbnQgPT0gR1NUX0gyNjVfQUxJR05NRU5UX0FVCi0gICAgICAgICAgJiYgc2l6ZSAtIG5hbF9sZW4gPD0gbmFsX2xlbmd0aF9zaXplKSB7Ci0gICAgICAgIGVuZF9vZl9hdSA9IFRSVUU7Ci0gICAgICB9Ci0KLSAgICAgIHBheWJ1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgb2Zmc2V0LAotICAgICAgICAgIG5hbF9sZW4pOwotCi0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9ydHBfaDI2NV9wYXlfcGF5bG9hZF9uYWwgKGJhc2VwYXlsb2FkLCBwYXlidWYsIGR0cywgcHRzLAotICAgICAgICAgIGVuZF9vZl9hdSk7Ci0gICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICBicmVhazsKLQotICAgICAgZGF0YSArPSBuYWxfbGVuOwotICAgICAgb2Zmc2V0ICs9IG5hbF9sZW47Ci0gICAgICBzaXplIC09IG5hbF9sZW47Ci0gICAgfQotICB9IGVsc2UgewotICAgIGd1aW50IG5leHQ7Ci0gICAgZ2Jvb2xlYW4gdXBkYXRlID0gRkFMU0U7Ci0KLSAgICAvKiBnZXQgb2Zmc2V0IG9mIGZpcnN0IHN0YXJ0IGNvZGUgKi8KLSAgICBuZXh0ID0gbmV4dF9zdGFydF9jb2RlIChkYXRhLCBzaXplKTsKLQotICAgIC8qIHNraXAgdG8gc3RhcnQgY29kZSwgaWYgbm8gc3RhcnQgY29kZSBpcyBmb3VuZCwgbmV4dCB3aWxsIGJlIHNpemUgYW5kIHdlCi0gICAgICogd2lsbCBub3QgY29sbGVjdCBkYXRhLiAqLwotICAgIGRhdGEgKz0gbmV4dDsKLSAgICBzaXplIC09IG5leHQ7Ci0gICAgbmFsX3F1ZXVlID0gcnRwaDI2NXBheS0+cXVldWU7Ci0gICAgc2tpcCA9IG5leHQ7Ci0KLSAgICAvKiBhcnJheSBtdXN0IGJlIGVtcHR5IHdoZW4gd2UgZ2V0IGhlcmUgKi8KLSAgICBnX2Fzc2VydCAobmFsX3F1ZXVlLT5sZW4gPT0gMCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlcGF5bG9hZCwKLSAgICAgICAgImZvdW5kIGZpcnN0IHN0YXJ0IGF0ICV1LCBieXRlcyBsZWZ0ICUiIEdfR1NJWkVfRk9STUFULCBuZXh0LCBzaXplKTsKLQotICAgIC8qIGZpcnN0IHBhc3MgdG8gbG9jYXRlIE5BTHMgYW5kIHBhcnNlIFZQUy9TUFMvUFBTICovCi0gICAgd2hpbGUgKHNpemUgPiA0KSB7Ci0gICAgICAvKiBza2lwIHN0YXJ0IGNvZGUgKi8KLSAgICAgIGRhdGEgKz0gMzsKLSAgICAgIHNpemUgLT0gMzsKLQotICAgICAgLyogdXNlIG5leHRfc3RhcnRfY29kZSgpIHRvIHNjYW4gYnVmZmVyLgotICAgICAgICogbmV4dF9zdGFydF9jb2RlKCkgcmV0dXJucyB0aGUgb2Zmc2V0IGluIGRhdGEsCi0gICAgICAgKiBzdGFydGluZyBmcm9tIHplcm8gdG8gdGhlIGZpcnN0IGJ5dGUgb2YgMC4wLjAuMQotICAgICAgICogSWYgbm8gc3RhcnQgY29kZSBpcyBmb3VuZCwgaXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlCi0gICAgICAgKiAnc2l6ZScgcGFyYW1ldGVyLgotICAgICAgICogZGF0YSBpcyB1bmNoYW5nZWQgYnkgdGhlIGNhbGwgdG8gbmV4dF9zdGFydF9jb2RlKCkKLSAgICAgICAqLwotICAgICAgbmV4dCA9IG5leHRfc3RhcnRfY29kZSAoZGF0YSwgc2l6ZSk7Ci0KLSAgICAgIGlmIChuZXh0ID09IHNpemUgJiYgYnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgLyogRGlkbid0IGZpbmQgdGhlIHN0YXJ0IG9mIG5leHQgTkFMIGFuZCBpdCdzIG5vdCBFT1MsCi0gICAgICAgICAqIGhhbmRsZSBpdCBuZXh0IHRpbWUgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG5hbCBsZW5ndGggaXMgZGlzdGFuY2UgdG8gbmV4dCBzdGFydCBjb2RlICovCi0gICAgICBuYWxfbGVuID0gbmV4dDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXBheWxvYWQsICJmb3VuZCBuZXh0IHN0YXJ0IGF0ICV1IG9mIHNpemUgJXUiLCBuZXh0LAotICAgICAgICAgIG5hbF9sZW4pOwotCi0gICAgICAvKiBXZSBrbm93IG91ciBzdHJlYW0gaXMgYSB2YWxpZCBIMjY1IE5BTCBwYWNrZXQsCi0gICAgICAgKiBnbyBwYXJzZSBpdCBmb3IgVlBTL1NQUy9QUFMgdG8gZW5yaWNoIHRoZSBjYXBzICovCi0gICAgICAvKiBvcmRlcjogbWFrZSBzdXJlIHRvIGNoZWNrIG5hbCAqLwotICAgICAgdXBkYXRlID0gZ3N0X3J0cF9oMjY1X3BheV9kZWNvZGVfbmFsIChydHBoMjY1cGF5LCBkYXRhLCBuYWxfbGVuLCBkdHMsIHB0cykKLSAgICAgICAgICB8fCB1cGRhdGU7Ci0KLSAgICAgIC8qIG1vdmUgdG8gbmV4dCBOQUwgcGFja2V0ICovCi0gICAgICBkYXRhICs9IG5hbF9sZW47Ci0gICAgICBzaXplIC09IG5hbF9sZW47Ci0KLSAgICAgIGdfYXJyYXlfYXBwZW5kX3ZhbCAobmFsX3F1ZXVlLCBuYWxfbGVuKTsKLSAgICB9Ci0KLSAgICAvKiBpZiBoYXMgbmV3IFZQUywgU1BTICYgUFBTLCB1cGRhdGUgdGhlIG91dHB1dCBjYXBzICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHVwZGF0ZSkpCi0gICAgICBpZiAoIWdzdF9ydHBfaDI2NV9wYXlfc2V0X3Zwc19zcHNfcHBzIChiYXNlcGF5bG9hZCkpCi0gICAgICAgIGdvdG8gY2Fwc19yZWplY3RlZDsKLQotICAgIC8qIHNlY29uZCBwYXNzIHRvIHBheWxvYWQgYW5kIHB1c2ggKi8KLQotICAgIGlmIChuYWxfcXVldWUtPmxlbiAhPSAwKQotICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHJ0cGgyNjVwYXktPmFkYXB0ZXIsIHNraXApOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG5hbF9xdWV1ZS0+bGVuOyBpKyspIHsKLSAgICAgIGd1aW50IHNpemU7Ci0gICAgICBnYm9vbGVhbiBlbmRfb2ZfYXUgPSBGQUxTRTsKLQotICAgICAgbmFsX2xlbiA9IGdfYXJyYXlfaW5kZXggKG5hbF9xdWV1ZSwgZ3VpbnQsIGkpOwotICAgICAgLyogc2tpcCBzdGFydCBjb2RlICovCi0gICAgICBnc3RfYWRhcHRlcl9mbHVzaCAocnRwaDI2NXBheS0+YWRhcHRlciwgMyk7Ci0KLSAgICAgIC8qIFRyaW0gdGhlIGVuZCB1bmxlc3Mgd2UncmUgdGhlIGxhc3QgTkFMIGluIHRoZSBzdHJlYW0uCi0gICAgICAgKiBJbiBjYXNlIHdlJ3JlIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgd2Uga25vdyB0aGUgbmV4dCBibG9jawotICAgICAgICogc3RhcnRzIHdpdGggMHgwMDAwMDEgc28gYWxsIHRoZSAweDAwIGJ5dGVzIGF0IHRoZSBlbmQgb2YgdGhpcyBvbmUgYXJlCi0gICAgICAgKiB0cmFpbGluZyAweDAgdGhhdCBjYW4gYmUgZGlzY2FyZGVkICovCi0gICAgICBzaXplID0gbmFsX2xlbjsKLSAgICAgIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKHJ0cGgyNjVwYXktPmFkYXB0ZXIsIHNpemUpOwotICAgICAgaWYgKGkgKyAxICE9IG5hbF9xdWV1ZS0+bGVuIHx8IGJ1ZmZlciAhPSBOVUxMKQotICAgICAgICBmb3IgKDsgc2l6ZSA+IDEgJiYgZGF0YVtzaXplIC0gMV0gPT0gMHgwOyBzaXplLS0pCi0gICAgICAgICAgLyogc2tpcCAqLyA7Ci0KLQotICAgICAgLyogSWYgaXQncyB0aGUgbGFzdCBuYWwgdW5pdCB3ZSBoYXZlIGluIG5vbi1ieXRlc3RyZWFtIG1vZGUsIHdlIGNhbgotICAgICAgICogYXNzdW1lIGl0J3MgdGhlIGVuZCBvZiBhbiBhY2Nlc3MtdW5pdAotICAgICAgICoKLSAgICAgICAqIEZJWE1FOiBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIG5leHQgcGFja2V0IG9yIEVPUyB0bwotICAgICAgICogYWN0dWFsbHkgcGF5bG9hZCB0aGUgTkFMIHNvIHdlIGNhbiBrbm93IGlmIHRoZSBjdXJyZW50IE5BTCBpcwotICAgICAgICogdGhlIGxhc3Qgb25lIG9mIGFuIGFjY2VzcyB1bml0IG9yIG5vdCBpZiB3ZSBhcmUgaW4gYnl0ZXN0cmVhbSBtb2RlCi0gICAgICAgKi8KLSAgICAgIGlmICgocnRwaDI2NXBheS0+YWxpZ25tZW50ID09IEdTVF9IMjY1X0FMSUdOTUVOVF9BVSB8fCBidWZmZXIgPT0gTlVMTCkgJiYKLSAgICAgICAgICBpID09IG5hbF9xdWV1ZS0+bGVuIC0gMSkKLSAgICAgICAgZW5kX29mX2F1ID0gVFJVRTsKLSAgICAgIHBheWJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBoMjY1cGF5LT5hZGFwdGVyLCBzaXplKTsKLSAgICAgIGdfYXNzZXJ0IChwYXlidWYpOwotCi0gICAgICAvKiBwdXQgdGhlIGRhdGEgaW4gb25lIG9yIG1vcmUgUlRQIHBhY2tldHMgKi8KLSAgICAgIHJldCA9Ci0gICAgICAgICAgZ3N0X3J0cF9oMjY1X3BheV9wYXlsb2FkX25hbCAoYmFzZXBheWxvYWQsIHBheWJ1ZiwgZHRzLCBwdHMsCi0gICAgICAgICAgZW5kX29mX2F1KTsKLSAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIG1vdmUgdG8gbmV4dCBOQUwgcGFja2V0ICovCi0gICAgICAvKiBTa2lwcyB0aGUgdHJhaWxpbmcgemVyb3MgKi8KLSAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChydHBoMjY1cGF5LT5hZGFwdGVyLCBuYWxfbGVuIC0gc2l6ZSk7Ci0gICAgfQotICAgIGdfYXJyYXlfc2V0X3NpemUgKG5hbF9xdWV1ZSwgMCk7Ci0gIH0KLQotZG9uZToKLSAgaWYgKGhldmMpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKHJ0cGgyNjVwYXktPmFkYXB0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLQotY2Fwc19yZWplY3RlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmFzZXBheWxvYWQsICJDb3VsZCBub3Qgc2V0IG91dGNhcHMiKTsKLSAgICBnX2FycmF5X3NldF9zaXplIChuYWxfcXVldWUsIDApOwotICAgIHJldCA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2NV9wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0UnRwSDI2NVBheSAqcnRwaDI2NXBheSA9IEdTVF9SVFBfSDI2NV9QQVkgKHBheWxvYWQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2NXBheS0+YWRhcHRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTToKLSAgICAgIHMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJHc3RGb3JjZUtleVVuaXQiKSkgewotICAgICAgICBnYm9vbGVhbiByZXNlbmRfY29kZWNfZGF0YTsKLQotICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbiAocywgImFsbC1oZWFkZXJzIiwKLSAgICAgICAgICAgICAgICAmcmVzZW5kX2NvZGVjX2RhdGEpICYmIHJlc2VuZF9jb2RlY19kYXRhKQotICAgICAgICAgIHJ0cGgyNjVwYXktPnNlbmRfdnBzX3Nwc19wcHMgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgIHsKLSAgICAgIC8qIGNhbGwgaGFuZGxlX2J1ZmZlciB3aXRoIE5VTEwgdG8gZmx1c2ggbGFzdCBOQUwgZnJvbSBhZGFwdGVyCi0gICAgICAgKiBpbiBieXRlLXN0cmVhbSBtb2RlCi0gICAgICAgKi8KLSAgICAgIGdzdF9ydHBfaDI2NV9wYXlfaGFuZGxlX2J1ZmZlciAocGF5bG9hZCwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU1RSRUFNX1NUQVJUOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwaDI2NXBheSwKLSAgICAgICAgICAiTmV3IHN0cmVhbSBkZXRlY3RlZCA9PiBDbGVhciBWUFMsIFNQUyBhbmQgUFBTIik7Ci0gICAgICBnc3RfcnRwX2gyNjVfcGF5X2NsZWFyX3Zwc19zcHNfcHBzIChydHBoMjY1cGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJlcyA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChwYXlsb2FkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX2gyNjVfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UnRwSDI2NVBheSAqcnRwaDI2NXBheSA9IEdTVF9SVFBfSDI2NV9QQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBydHBoMjY1cGF5LT5zZW5kX3Zwc19zcHNfcHBzID0gRkFMU0U7Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwaDI2NXBheS0+YWRhcHRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgcnRwaDI2NXBheS0+bGFzdF92cHNfc3BzX3BwcyA9IC0xOwotICAgICAgZ3N0X3J0cF9oMjY1X3BheV9jbGVhcl92cHNfc3BzX3BwcyAocnRwaDI2NXBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9oMjY1X3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSDI2NVBheSAqcnRwaDI2NXBheTsKLQotICBydHBoMjY1cGF5ID0gR1NUX1JUUF9IMjY1X1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ09ORklHX0lOVEVSVkFMOgotICAgICAgcnRwaDI2NXBheS0+dnBzX3Nwc19wcHNfaW50ZXJ2YWwgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaDI2NV9wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cEgyNjVQYXkgKnJ0cGgyNjVwYXk7Ci0KLSAgcnRwaDI2NXBheSA9IEdTVF9SVFBfSDI2NV9QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NPTkZJR19JTlRFUlZBTDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHJ0cGgyNjVwYXktPnZwc19zcHNfcHBzX2ludGVydmFsKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaDI2NV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBoMjY1cGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0gyNjVfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaDI2NXBheS5oIGIvZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNDJmYmEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBoMjY1cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDE0PiBKdXJnZW4gU2xvd2FjayA8anVyZ2Vuc2xvd2Fja0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSDI2NV9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9IMjY1X1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotI2luY2x1ZGUgImdzdHJ0cGgyNjV0eXBlcy5oIgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9IMjY1X1BBWSBcCi0gIChnc3RfcnRwX2gyNjVfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2NV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfSDI2NV9QQVksR3N0UnRwSDI2NVBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSDI2NV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0gyNjVfUEFZLEdzdFJ0cEgyNjVQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSDI2NV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfSDI2NV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0gyNjVfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9IMjY1X1BBWSkpCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSDI2NVBheSBHc3RSdHBIMjY1UGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEgyNjVQYXlDbGFzcyBHc3RSdHBIMjY1UGF5Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBHU1RfSDI2NV9BTElHTk1FTlRfVU5LTk9XTiwKLSAgR1NUX0gyNjVfQUxJR05NRU5UX05BTCwKLSAgR1NUX0gyNjVfQUxJR05NRU5UX0FVCi19IEdzdEgyNjVBbGlnbm1lbnQ7Ci0KLXN0cnVjdCBfR3N0UnRwSDI2NVBheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCBwYXlsb2FkOwotCi0gIEdQdHJBcnJheSAqc3BzLCAqcHBzLCAqdnBzOwotCi0gIEdzdEgyNjVTdHJlYW1Gb3JtYXQgc3RyZWFtX2Zvcm1hdDsKLSAgR3N0SDI2NUFsaWdubWVudCBhbGlnbm1lbnQ7Ci0gIGd1aW50IG5hbF9sZW5ndGhfc2l6ZTsKLSAgR0FycmF5ICpxdWV1ZTsKLQotICBHc3RBZGFwdGVyICphZGFwdGVyOwotCi0gIGdpbnQgdnBzX3Nwc19wcHNfaW50ZXJ2YWw7Ci0gIGdib29sZWFuIHNlbmRfdnBzX3Nwc19wcHM7Ci0gIEdzdENsb2NrVGltZSBsYXN0X3Zwc19zcHNfcHBzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBIMjY1UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2gyNjVfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9oMjY1X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9SVFBfSDI2NV9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGgyNjV0eXBlcy5oIGIvZ3N0L3J0cC9nc3RydHBoMjY1dHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2OTJlOS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGgyNjV0eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyogR1N0cmVhbWVyIEguMjY1IHBhcnNlciB0eXBlcwotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU3JlZXJlbmogQmFsYWNoYW5kcmFuIDxzcmVlcmVuai5iYWxhY2hhbmRyYW5AaW50ZWwuY29tPgotICoKLSAqICBDb250YWN0OiBTcmVlcmVuaiBCYWxhY2hhbmRyYW4gPHNyZWVyZW5qLmJhbGFjaGFuZHJhbkBpbnRlbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSDI2NV9UWVBFU19IX18KLSNkZWZpbmUgX19HU1RfUlRQX0gyNjVfVFlQRVNfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9IMjY1X05BTF9TTElDRV9UUkFJTF9OICAgID0gMCwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX1RSQUlMX1IgICAgPSAxLAotICBHU1RfSDI2NV9OQUxfU0xJQ0VfVFNBX04gICAgICA9IDIsCi0gIEdTVF9IMjY1X05BTF9TTElDRV9UU0FfUiAgICAgID0gMywKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX1NUU0FfTiAgICAgPSA0LAotICBHU1RfSDI2NV9OQUxfU0xJQ0VfU1RTQV9SICAgICA9IDUsCi0gIEdTVF9IMjY1X05BTF9TTElDRV9SQURMX04gICAgID0gNiwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX1JBRExfUiAgICAgPSA3LAotICBHU1RfSDI2NV9OQUxfU0xJQ0VfUkFTTF9OICAgICA9IDgsCi0gIEdTVF9IMjY1X05BTF9TTElDRV9SQVNMX1IgICAgID0gOSwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX0JMQV9XX0xQICAgPSAxNiwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX0JMQV9XX1JBREwgPSAxNywKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX0JMQV9OX0xQICAgPSAxOCwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX0lEUl9XX1JBREwgPSAxOSwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX0lEUl9OX0xQICAgPSAyMCwKLSAgR1NUX0gyNjVfTkFMX1NMSUNFX0NSQV9OVVQgICAgPSAyMSwKLSAgR1NUX0gyNjVfTkFMX1ZQUyAgICAgICAgICAgICAgPSAzMiwKLSAgR1NUX0gyNjVfTkFMX1NQUyAgICAgICAgICAgICAgPSAzMywKLSAgR1NUX0gyNjVfTkFMX1BQUyAgICAgICAgICAgICAgPSAzNCwKLSAgR1NUX0gyNjVfTkFMX0FVRCAgICAgICAgICAgICAgPSAzNSwKLSAgR1NUX0gyNjVfTkFMX0VPUyAgICAgICAgICAgICAgPSAzNiwKLSAgR1NUX0gyNjVfTkFMX0VPQiAgICAgICAgICAgICAgPSAzNywKLSAgR1NUX0gyNjVfTkFMX0ZEICAgICAgICAgICAgICAgPSAzOCwKLSAgR1NUX0gyNjVfTkFMX1BSRUZJWF9TRUkgICAgICAgPSAzOSwKLSAgR1NUX0gyNjVfTkFMX1NVRkZJWF9TRUkgICAgICAgPSA0MAotfSBHc3RIMjY1TmFsVW5pdFR5cGU7Ci0KLSNkZWZpbmUgUkVTRVJWRURfTk9OX0lSQVBfU1VCTEFZRVJfTkFMX1RZUEVfTUlOIDEwCi0jZGVmaW5lIFJFU0VSVkVEX05PTl9JUkFQX1NVQkxBWUVSX05BTF9UWVBFX01BWCAxNQotCi0jZGVmaW5lIFJFU0VSVkVEX0lSQVBfTkFMX1RZUEVfTUlOIDIyCi0jZGVmaW5lIFJFU0VSVkVEX0lSQVBfTkFMX1RZUEVfTUFYIDIzCi0KLSNkZWZpbmUgUkVTRVJWRURfTk9OX0lSQVBfTkFMX1RZUEVfTUlOIDI0Ci0jZGVmaW5lIFJFU0VSVkVEX05PTl9JUkFQX05BTF9UWVBFX01BWCAzMQotCi0jZGVmaW5lIFJFU0VSVkVEX05PTl9WQ0xfTkFMX1RZUEVfTUlOIDQxCi0jZGVmaW5lIFJFU0VSVkVEX05PTl9WQ0xfTkFMX1RZUEVfTUFYIDQ3Ci0KLSNkZWZpbmUgVU5TUEVDSUZJRURfTk9OX1ZDTF9OQUxfVFlQRV9NSU4gNDgKLSNkZWZpbmUgVU5TUEVDSUZJRURfTk9OX1ZDTF9OQUxfVFlQRV9NQVggNjMKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmODdkOC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGlsYmNkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwaWxiY2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotLyogUnRwaUxCQ0RlcGF5IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX01PREUgR1NUX0lMQkNfTU9ERV8zMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9NT0RFCi19OwotCi0vKiBGSVhNRSwgbW9kZSBzaG91bGQgYmUgc3RyaW5nIGJlY2F1c2UgaXQgaXMgYSBwYXJhbWV0ZXIgaW4gU0RQIGZtdHAgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2lsYmNfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJJTEJDXCIiKQotICAgIC8qICJtb2RlID0gKHN0cmluZykgeyBcIjIwXCIsIFwiMzBcIiB9IiAqLwotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2lsYmNfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWlMQkMsICIgIm1vZGUgPSAoaW50KSB7IDIwLCAzMCB9IikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfaWxiY19kZXBheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfaWxiY19kZXBheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfaWxiY19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9pbGJjX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi0jZGVmaW5lIGdzdF9ydHBfaWxiY19kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSVFBpTEJDRGVwYXksIGdzdF9ydHBfaWxiY19kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi0jZGVmaW5lIEdTVF9UWVBFX0lMQkNfTU9ERSAoZ3N0X2lsYmNfbW9kZV9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfaWxiY19tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgaWxiY19tb2RlX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBpbGJjX21vZGVzW10gPSB7Ci0gICAge0dTVF9JTEJDX01PREVfMjAsICIyMG1zIGZyYW1lcyIsICIyMG1zIn0sCi0gICAge0dTVF9JTEJDX01PREVfMzAsICIzMG1zIGZyYW1lcyIsICIzMG1zIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghaWxiY19tb2RlX3R5cGUpIHsKLSAgICBpbGJjX21vZGVfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJpTEJDTW9kZSIsIGlsYmNfbW9kZXMpOwotICB9Ci0gIHJldHVybiBpbGJjX21vZGVfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaWxiY19kZXBheV9jbGFzc19pbml0IChHc3RSVFBpTEJDRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2lsYmNfZGVwYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfaWxiY19kZXBheV9nZXRfcHJvcGVydHk7Ci0KLSAgLyogRklYTUUsIG1vZGUgaXMgaW4gdGhlIGNhcHMgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJtb2RlIiwgIk1vZGUiLCAiaUxCQyBmcmFtZSBtb2RlIiwKLSAgICAgICAgICBHU1RfVFlQRV9JTEJDX01PREUsIERFRkFVTFRfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2lsYmNfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9pbGJjX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIGlMQkMgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIGlMQkMgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDM5NTIpIiwKLSAgICAgICJQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfaWxiY19kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfaWxiY19kZXBheV9zZXRjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9pbGJjX2RlcGF5X2luaXQgKEdzdFJUUGlMQkNEZXBheSAqIHJ0cGlsYmNkZXBheSkKLXsKLSAgLyogU2V0IGRlZmF1bHQgbW9kZSAqLwotICBydHBpbGJjZGVwYXktPm1vZGUgPSBERUZBVUxUX01PREU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9pbGJjX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSVFBpTEJDRGVwYXkgKnJ0cGlsYmNkZXBheSA9IEdTVF9SVFBfSUxCQ19ERVBBWSAoZGVwYXlsb2FkKTsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGdjaGFyICptb2RlX3N0ciA9IE5VTEw7Ci0gIGdpbnQgbW9kZSwgY2xvY2tfcmF0ZTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIG1vZGUgPSBydHBpbGJjZGVwYXktPm1vZGU7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IDgwMDA7Ci0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgLyogcGFyc2UgbW9kZSwgaWYgd2UgY2FuICovCi0gIG1vZGVfc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJtb2RlIik7Ci0gIGlmIChtb2RlX3N0cikgewotICAgIG1vZGUgPSBzdHJ0b2wgKG1vZGVfc3RyLCBOVUxMLCAxMCk7Ci0gICAgaWYgKG1vZGUgIT0gMjAgJiYgbW9kZSAhPSAzMCkKLSAgICAgIG1vZGUgPSBydHBpbGJjZGVwYXktPm1vZGU7Ci0gIH0KLQotICBydHBpbGJjZGVwYXktPm1vZGUgPSBtb2RlOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1pTEJDIiwKLSAgICAgICJtb2RlIiwgR19UWVBFX0lOVCwgcnRwaWxiY2RlcGF5LT5tb2RlLCBOVUxMKTsKLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5bG9hZCksIHNyY2NhcHMpOwotCi0gIEdTVF9ERUJVRyAoInNldCBjYXBzIG9uIHNvdXJjZTogJSIgR1NUX1BUUl9GT1JNQVQgIiAocmV0PSVkKSIsIHNyY2NhcHMsIHJldCk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfaWxiY19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0KLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBHU1RfREVCVUcgKCJwcm9jZXNzIDogZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMsIG1hcmsgJWQgdHMgJXUgc2VxbiAlZCIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChydHAtPmJ1ZmZlciksIG1hcmtlciwKLSAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAgKHJ0cCksIGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKHJ0cCkpOwotCi0gIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2J1ZmZlciAocnRwKTsKLQotICBpZiAobWFya2VyICYmIG91dGJ1ZikgewotICAgIC8qIG1hcmsgc3RhcnQgb2YgdGFsa3NwdXJ0IHdpdGggUkVTWU5DICovCi0gICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DKTsKLSAgfQotCi0gIGlmIChvdXRidWYpIHsKLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVwYXlsb2FkKSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbGJjX2RlcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBpTEJDRGVwYXkgKnJ0cGlsYmNkZXBheSA9IEdTVF9SVFBfSUxCQ19ERVBBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIHJ0cGlsYmNkZXBheS0+bW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pbGJjX2RlcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBpTEJDRGVwYXkgKnJ0cGlsYmNkZXBheSA9IEdTVF9SVFBfSUxCQ19ERVBBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBydHBpbGJjZGVwYXktPm1vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9pbGJjX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwaWxiY2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0lMQkNfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwaWxiY2RlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZmQyMjUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBpbGJjZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4gCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSUxCQ19ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0lMQkNfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUGlMQkNEZXBheSBHc3RSVFBpTEJDRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQaUxCQ0RlcGF5Q2xhc3MgR3N0UlRQaUxCQ0RlcGF5Q2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0lMQkNfREVQQVkgXAotICAoZ3N0X3J0cF9pbGJjX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSUxCQ19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9JTEJDX0RFUEFZLEdzdFJUUGlMQkNEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSUxCQ19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSUxCQ19ERVBBWSxHc3RSVFBpTEJDRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSUxCQ19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9JTEJDX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9JTEJDX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9JTEJDX0RFUEFZKSkKLSAgCi10eXBlZGVmIGVudW0gewotICBHU1RfSUxCQ19NT0RFXzIwID0gMjAsCi0gIEdTVF9JTEJDX01PREVfMzAgPSAzMAotfSBHc3RpTEJDTW9kZTsgCi0KLXN0cnVjdCBfR3N0UlRQaUxCQ0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIEdzdGlMQkNNb2RlIG1vZGU7Ci19OwotCi1zdHJ1Y3QgX0dzdFJUUGlMQkNEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2lsYmNfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2lsYmNfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfSUxCQ19ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaWxiY3BheS5jIGIvZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYzdkOTMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBQaGlsaXBwZSBLaGFsYWYgPGJ1cmdlckBzcGVlZHkub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlICJnc3RydHBpbGJjcGF5LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cGlsYmNwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGlsYmNwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2lsYmNfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1pTEJDLCAiICJtb2RlID0gKGludCkgezIwLCAzMH0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2lsYmNfcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIklMQkNcIiwgIgotICAgICAgICAibW9kZSA9IChzdHJpbmcpIHsgXCIyMFwiLCBcIjMwXCIgfSIpCi0gICAgKTsKLQotCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3J0cF9pbGJjX3BheV9zaW5rX2dldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaWxiY19wYXlfc2lua19zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi0jZGVmaW5lIGdzdF9ydHBfaWxiY19wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UlRQSUxCQ1BheSwgZ3N0X3J0cF9pbGJjX3BheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9BVURJT19QQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaWxiY19wYXlfY2xhc3NfaW5pdCAoR3N0UlRQSUxCQ1BheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGlsYmNwYXlfZGVidWcsICJydHBpbGJjcGF5IiwgMCwKLSAgICAgICJpTEJDIGF1ZGlvIFJUUCBwYXlsb2FkZXIiKTsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2lsYmNfcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2lsYmNfcGF5X3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJUUCBpTEJDIFBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYWNrZXRpemUgaUxCQyBhdWRpbyBzdHJlYW1zIGludG8gUlRQIHBhY2tldHMiLAotICAgICAgIlBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9pbGJjX3BheV9zaW5rX3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5nZXRfY2FwcyA9IGdzdF9ydHBfaWxiY19wYXlfc2lua19nZXRjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9pbGJjX3BheV9pbml0IChHc3RSVFBJTEJDUGF5ICogcnRwaWxiY3BheSkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgKnJ0cGJhc2VwYXlsb2FkOwotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VwYXlsb2FkID0gR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cGlsYmNwYXkpOwotICBydHBiYXNlYXVkaW9wYXlsb2FkID0gR1NUX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQgKHJ0cGlsYmNwYXkpOwotCi0gIC8qIHdlIGRvbid0IHNldCB0aGUgcGF5bG9hZCB0eXBlLCBpdCBzaG91bGQgYmUgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiB1c2luZwotICAgKiB0aGUgcHQgcHJvcGVydHkgb3IgdGhlIGRlZmF1bHQgOTYgd2lsbCBiZSB1c2VkICovCi0gIHJ0cGJhc2VwYXlsb2FkLT5jbG9ja19yYXRlID0gODAwMDsKLQotICBydHBpbGJjcGF5LT5tb2RlID0gLTE7Ci0KLSAgLyogdGVsbCBydHBiYXNlYXVkaW9wYXlsb2FkIHRoYXQgdGhpcyBpcyBhIGZyYW1lIGJhc2VkIGNvZGVjICovCi0gIGdzdF9ydHBfYmFzZV9hdWRpb19wYXlsb2FkX3NldF9mcmFtZV9iYXNlZCAocnRwYmFzZWF1ZGlvcGF5bG9hZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9pbGJjX3BheV9zaW5rX3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcnRwYmFzZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJUUElMQkNQYXkgKnJ0cGlsYmNwYXk7Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgKnJ0cGJhc2VhdWRpb3BheWxvYWQ7Ci0gIGdib29sZWFuIHJldDsKLSAgZ2ludCBtb2RlOwotICBnY2hhciAqbW9kZV9zdHI7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBjaGFyICpwYXlsb2FkX25hbWU7Ci0KLSAgcnRwaWxiY3BheSA9IEdTVF9SVFBfSUxCQ19QQVkgKHJ0cGJhc2VwYXlsb2FkKTsKLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChydHBiYXNlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgcGF5bG9hZF9uYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKLSAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoImF1ZGlvL3gtaUxCQyIsIHBheWxvYWRfbmFtZSkpCi0gICAgZ290byB3cm9uZ19jYXBzOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJtb2RlIiwgJm1vZGUpKQotICAgIGdvdG8gbm9fbW9kZTsKLQotICBpZiAobW9kZSAhPSAyMCAmJiBtb2RlICE9IDMwKQotICAgIGdvdG8gd3JvbmdfbW9kZTsKLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocnRwYmFzZXBheWxvYWQsICJhdWRpbyIsIFRSVUUsICJJTEJDIiwKLSAgICAgIDgwMDApOwotICAvKiBzZXQgb3B0aW9ucyBmb3IgdGhpcyBmcmFtZSBiYXNlZCBhdWRpbyBjb2RlYyAqLwotICBnc3RfcnRwX2Jhc2VfYXVkaW9fcGF5bG9hZF9zZXRfZnJhbWVfb3B0aW9ucyAocnRwYmFzZWF1ZGlvcGF5bG9hZCwKLSAgICAgIG1vZGUsIG1vZGUgPT0gMzAgPyA1MCA6IDM4KTsKLQotICBtb2RlX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgbW9kZSk7Ci0gIHJldCA9Ci0gICAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocnRwYmFzZXBheWxvYWQsICJtb2RlIiwgR19UWVBFX1NUUklORywKLSAgICAgIG1vZGVfc3RyLCBOVUxMKTsKLSAgZ19mcmVlIChtb2RlX3N0cik7Ci0KLSAgaWYgKG1vZGUgIT0gcnRwaWxiY3BheS0+bW9kZSAmJiBydHBpbGJjcGF5LT5tb2RlICE9IC0xKQotICAgIGdvdG8gbW9kZV9jaGFuZ2VkOwotCi0gIHJ0cGlsYmNwYXktPm1vZGUgPSBtb2RlOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19jYXBzOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwaWxiY3BheSwgImV4cGVjdGVkIGF1ZGlvL3gtaUxCQywgcmVjZWl2ZWQgJXMiLAotICAgICAgICBwYXlsb2FkX25hbWUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fbW9kZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGlsYmNwYXksICJkaWQgbm90IHJlY2VpdmUgYSBtb2RlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19tb2RlOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwaWxiY3BheSwgIm1vZGUgbXVzdCBiZSAyMCBvciAzMCwgcmVjZWl2ZWQgJWQiLCBtb2RlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW1vZGVfY2hhbmdlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cGlsYmNwYXksICJNb2RlIGhhcyBjaGFuZ2VkIGZyb20gJWQgdG8gJWQhICIKLSAgICAgICAgIk1vZGUgY2Fubm90IGNoYW5nZSB3aGlsZSBzdHJlYW1pbmciLCBydHBpbGJjcGF5LT5tb2RlLCBtb2RlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogd2UgcmV0dXJuIHRoZSBwYWR0ZW1wbGF0ZSBjYXBzIHdpdGggdGhlIG1vZGUgZmllbGQgZml4YXRlZCB0byBhIHZhbHVlIGlmIHdlCi0gKiBjYW4gKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfaWxiY19wYXlfc2lua19nZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHJ0cHBheWxvYWQsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpvdGhlcnBhZGNhcHM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgb3RoZXJwYWRjYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChydHBwYXlsb2FkLT5zcmNwYWQpOwotICBjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0KLSAgaWYgKG90aGVycGFkY2FwcykgewotICAgIGlmICghZ3N0X2NhcHNfaXNfZW1wdHkgKG90aGVycGFkY2FwcykpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICAgICAgY29uc3QgZ2NoYXIgKm1vZGVfc3RyOwotICAgICAgZ2ludCBtb2RlOwotCi0gICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvdGhlcnBhZGNhcHMsIDApOwotCi0gICAgICAvKiBwYXJzZSBtb2RlLCBpZiB3ZSBjYW4gKi8KLSAgICAgIG1vZGVfc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJtb2RlIik7Ci0gICAgICBpZiAobW9kZV9zdHIpIHsKLSAgICAgICAgbW9kZSA9IHN0cnRvbCAobW9kZV9zdHIsIE5VTEwsIDEwKTsKLSAgICAgICAgaWYgKG1vZGUgPT0gMjAgfHwgbW9kZSA9PSAzMCkgewotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSAgICAgICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCAibW9kZSIsIEdfVFlQRV9JTlQsIG1vZGUsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF9jYXBzX3VucmVmIChvdGhlcnBhZGNhcHMpOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKnRtcDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHBheWxvYWQsICJJbnRlcnNlY3QgJSIgR1NUX1BUUl9GT1JNQVQgIiBhbmQgZmlsdGVyICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzLCBmaWx0ZXIpOwotICAgIHRtcCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGNhcHMgPSB0bXA7Ci0gIH0KLQotICByZXR1cm4gY2FwczsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfaWxiY19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBpbGJjcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0lMQkNfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwaWxiY3BheS5oIGIvZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MzYzYzAuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBpbGJjcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+IAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0lMQkNfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfSUxCQ19QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfSUxCQ19QQVkgXAotICAoZ3N0X3J0cF9pbGJjX3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0lMQkNfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0lMQkNfUEFZLEdzdFJUUElMQkNQYXkpKQotI2RlZmluZSBHU1RfUlRQX0lMQkNfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9JTEJDX1BBWSxHc3RSVFBJTEJDUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0lMQkNfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0lMQkNfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9JTEJDX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSUxCQ19QQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UlRQSUxCQ1BheSBHc3RSVFBJTEJDUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUElMQkNQYXlDbGFzcyBHc3RSVFBJTEJDUGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UlRQSUxCQ1BheQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkIGF1ZGlvcGF5bG9hZDsKLQotICBnaW50IG1vZGU7Ci19OwotCi1zdHJ1Y3QgX0dzdFJUUElMQkNQYXlDbGFzcwotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9pbGJjX3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfaWxiY19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfSUxCQ19QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGoya2NvbW1vbi5oIGIvZ3N0L3J0cC9nc3RydHBqMmtjb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlmMWJiYi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGoya2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotKiBDb3B5cmlnaHQgKEMpIDIwMDkgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSoKLSogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKgotKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qCi0qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0qIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0qIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLQotI2lmbmRlZiBfX0dTVF9SVFBfSjJLX0NPTU1PTl9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0oyS19DT01NT05fSF9fCi0KLQotCi0vKiBTYW1wbGluZyB2YWx1ZXMgZnJvbSBSRkMgNTM3MSBmb3IgSlBFRyAyMDAwIG92ZXIgUlRQIDogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvcmZjNTM3MS9DCi0KLVJHQjogIHN0YW5kYXJkIFJlZCwgR3JlZW4sIEJsdWUgY29sb3Igc3BhY2UuCi0KLUJHUjogIHN0YW5kYXJkIEJsdWUsIEdyZWVuLCBSZWQgY29sb3Igc3BhY2UuCi0KLVJHQkE6ICBzdGFuZGFyZCBSZWQsIEdyZWVuLCBCbHVlLCBBbHBoYSBjb2xvciBzcGFjZS4KLQotQkdSQTogIHN0YW5kYXJkIEJsdWUsIEdyZWVuLCBSZWQsIEFscGhhIGNvbG9yIHNwYWNlLgotCi1ZQ2JDci00OjQ6NDogIHN0YW5kYXJkIFlDYkNyIGNvbG9yIHNwYWNlOyBubyBzdWJzYW1wbGluZy4KLQotWUNiQ3ItNDoyOjI6ICBzdGFuZGFyZCBZQ2JDciBjb2xvciBzcGFjZTsgQ2IgYW5kIENyIGFyZSBzdWJzYW1wbGVkIGhvcml6b250YWxseSBieSAxLzIuCi0KLVlDYkNyLTQ6MjowOiAgc3RhbmRhcmQgWUNiQ3IgY29sb3Igc3BhY2U7IENiIGFuZCBDciBhcmUgc3Vic2FtcGxlZCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkgYnkgMS8yLgotCi1ZQ2JDci00OjE6MTogIHN0YW5kYXJkIFlDYkNyIGNvbG9yIHNwYWNlOyBDYiBhbmQgQ3IgYXJlIHN1YnNhbXBsZWQgdmVydGljYWxseSBieSAxLzQuCi0KLUdSQVlTQ0FMRTogIGJhc2ljYWxseSwgYSBzaW5nbGUgY29tcG9uZW50IGltYWdlIG9mIGp1c3QgbXVsdGlsZXZlbHMgb2YgZ3JleS4KLSovCi0KLQotI2RlZmluZSBHU1RfUlRQX0oyS19SR0IgICAgICAgIlJHQiIKLSNkZWZpbmUgR1NUX1JUUF9KMktfQkdSICAgICAgICJCR1IiCi0jZGVmaW5lIEdTVF9SVFBfSjJLX1JHQkEgICAgICAiUkdCQSIKLSNkZWZpbmUgR1NUX1JUUF9KMktfQkdSQSAgICAgICJCR1JBIgotI2RlZmluZSBHU1RfUlRQX0oyS19ZQlJBICAgCSAgIllDYkNyQSIKLSNkZWZpbmUgR1NUX1JUUF9KMktfWUJSNDQ0ICAgICJZQ2JDci00OjQ6NCIKLSNkZWZpbmUgR1NUX1JUUF9KMktfWUJSNDIyICAgICJZQ2JDci00OjI6MiIKLSNkZWZpbmUgR1NUX1JUUF9KMktfWUJSNDIwICAgICJZQ2JDci00OjI6MCIKLSNkZWZpbmUgR1NUX1JUUF9KMktfWUJSNDEwICAgICJZQ2JDci00OjE6MCIKLSNkZWZpbmUgR1NUX1JUUF9KMktfR1JBWVNDQUxFICJHUkFZU0NBTEUiCi0KLSNkZWZpbmUgR1NUX1JUUF9KMktfU0FNUExJTkdfTElTVCAic2FtcGxpbmcgPSAoc3RyaW5nKSB7XCJSR0JcIiwgXCJCR1JcIiwgXCJSR0JBXCIsIFwiQkdSQVwiLCBcIllDYkNyQVwiLCBcIllDYkNyLTQ6NDo0XCIsIFwiWUNiQ3ItNDoyOjJcIiwgXCJZQ2JDci00OjI6MFwiLCBcIllDYkNyLTQ6MToxXCIsIFwiR1JBWVNDQUxFXCJ9IgotCi10eXBlZGVmIGVudW0KLXsKLQotICBHU1RfUlRQX1NBTVBMSU5HX05PTkUsCi0gIEdTVF9SVFBfU0FNUExJTkdfUkdCLAotICBHU1RfUlRQX1NBTVBMSU5HX0JHUiwKLSAgR1NUX1JUUF9TQU1QTElOR19SR0JBLAotICBHU1RfUlRQX1NBTVBMSU5HX0JHUkEsCi0gIEdTVF9SVFBfU0FNUExJTkdfWUJSQSwKLSAgR1NUX1JUUF9TQU1QTElOR19ZQlI0NDQsCi0gIEdTVF9SVFBfU0FNUExJTkdfWUJSNDIyLAotICBHU1RfUlRQX1NBTVBMSU5HX1lCUjQyMCwKLSAgR1NUX1JUUF9TQU1QTElOR19ZQlI0MTAsCi0gIEdTVF9SVFBfU0FNUExJTkdfR1JBWVNDQUxFCi19IEdzdFJ0cFNhbXBsaW5nOwotCi0KLS8qCi0qIEdzdFJ0cEoyS01hcmtlcjoKLSogQEdTVF9KMktfTUFSS0VSOiBQcmVmaXggZm9yIEpQRUcgMjAwMCBtYXJrZXIKLSogQEdTVF9KMktfTUFSS0VSX1NPQzogU3RhcnQgb2YgQ29kZXN0cmVhbQotKiBAR1NUX0oyS19NQVJLRVJfU09UOiBTdGFydCBvZiB0aWxlCi0qIEBHU1RfSjJLX01BUktFUl9FT0M6IEVuZCBvZiBDb2Rlc3RyZWFtCi0qCi0qIElkZW50aWZpZXJzIGZvciBtYXJrZXJzIGluIEpQRUcgMjAwMCBjb2RlIHN0cmVhbXMKLSovCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX0oyS19NQVJLRVIgPSAweEZGLAotICBHU1RfSjJLX01BUktFUl9TT0MgPSAweDRGLAotICBHU1RfSjJLX01BUktFUl9TT1QgPSAweDkwLAotICBHU1RfSjJLX01BUktFUl9TT1AgPSAweDkxLAotICBHU1RfSjJLX01BUktFUl9FUEggPSAweDkyLAotICBHU1RfSjJLX01BUktFUl9TT0QgPSAweDkzLAotICBHU1RfSjJLX01BUktFUl9FT0MgPSAweEQ5Ci19IEdzdFJ0cEoyS01hcmtlcjsKLQotCi0jZGVmaW5lIEdTVF9SVFBfSjJLX0hFQURFUl9TSVpFIDgKLQotCi0jZW5kaWYgLyogX19HU1RfUlRQX0oyS19DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMWIxYjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjY4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSAvKioKLSAqIFNFQ1RJT046ZWxlbWVudC1ydHBqMmtkZXBheQotICoKLSAqIERlcGF5bG9hZCBhbiBSVFAtcGF5bG9hZGVkIEpQRUcgMjAwMCBpbWFnZSBpbnRvIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkMgNTM3MQotICogYW5kIFJGQyA1MzcyLgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvcmZjNTM3MS8KLSAqIGFuZCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9yZmM1MzcyLwotICovCi0KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwajJrY29tbW9uLmgiCi0jaW5jbHVkZSAiZ3N0cnRwajJrZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBqMmtkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwajJrZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2oya19kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImltYWdlL3gtanBjLCAiCi0gICAgICAgICJjb2xvcnNwYWNlID0gKHN0cmluZykgeyBzUkdCLCBzWVVWLCBHUkFZIH0iKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2oya19kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIgotICAgICAgICBHU1RfUlRQX0oyS19TQU1QTElOR19MSVNUICIsIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiSlBFRzIwMDBcIjsiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIgotICAgICAgICAiY29sb3JzcGFjZSA9IChzdHJpbmcpIHsgc1JHQiwgc1lVViwgR1JBWSB9LCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJKUEVHMjAwMFwiOyIpCi0gICAgKTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTEFTVAotfTsKLQotI2RlZmluZSBnc3RfcnRwX2oya19kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBKMktEZXBheSwgZ3N0X3J0cF9qMmtfZGVwYXksIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfajJrX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9qMmtfZGVwYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9qMmtfZGVwYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfajJrX2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2oya19kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfajJrX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfajJrX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEoyS0RlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9qMmtfZGVwYXlfZmluYWxpemU7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9qMmtfZGVwYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2oya19kZXBheV9nZXRfcHJvcGVydHk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9qMmtfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9qMmtfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgSlBFRyAyMDAwIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBKUEVHIDIwMDAgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDUzNzEpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfajJrX2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfajJrX2RlcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfajJrX2RlcGF5X3Byb2Nlc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGoya2RlcGF5X2RlYnVnLCAicnRwajJrZGVwYXkiLCAwLAotICAgICAgIkoySyBWaWRlbyBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfajJrX2RlcGF5X2luaXQgKEdzdFJ0cEoyS0RlcGF5ICogcnRwajJrZGVwYXkpCi17Ci0gIHJ0cGoya2RlcGF5LT5wdV9hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBqMmtkZXBheS0+dF9hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBqMmtkZXBheS0+Zl9hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotc3RvcmVfbWhlYWRlciAoR3N0UnRwSjJLRGVwYXkgKiBydHBqMmtkZXBheSwgZ3VpbnQgaWR4LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEJ1ZmZlciAqb2xkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGoya2RlcGF5LCAic3RvcmluZyBtYWluIGhlYWRlciAlcCBhdCBpbmRleCAldSIsIGJ1ZiwKLSAgICAgIGlkeCk7Ci0gIGlmICgob2xkID0gcnRwajJrZGVwYXktPk1IW2lkeF0pKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKG9sZCk7Ci0gIHJ0cGoya2RlcGF5LT5NSFtpZHhdID0gYnVmOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYXJfbWhlYWRlcnMgKEdzdFJ0cEoyS0RlcGF5ICogcnRwajJrZGVwYXkpCi17Ci0gIGd1aW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLSAgICBzdG9yZV9taGVhZGVyIChydHBqMmtkZXBheSwgaSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2oya19kZXBheV9yZXNldCAoR3N0UnRwSjJLRGVwYXkgKiBydHBqMmtkZXBheSkKLXsKLSAgY2xlYXJfbWhlYWRlcnMgKHJ0cGoya2RlcGF5KTsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cGoya2RlcGF5LT5wdV9hZGFwdGVyKTsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cGoya2RlcGF5LT50X2FkYXB0ZXIpOwotICBnc3RfYWRhcHRlcl9jbGVhciAocnRwajJrZGVwYXktPmZfYWRhcHRlcik7Ci0gIHJ0cGoya2RlcGF5LT5uZXh0X2ZyYWcgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qMmtfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cEoyS0RlcGF5ICpydHBqMmtkZXBheTsKLQotICBydHBqMmtkZXBheSA9IEdTVF9SVFBfSjJLX0RFUEFZIChvYmplY3QpOwotCi0gIGNsZWFyX21oZWFkZXJzIChydHBqMmtkZXBheSk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGoya2RlcGF5LT5wdV9hZGFwdGVyKTsKLSAgZ19vYmplY3RfdW5yZWYgKHJ0cGoya2RlcGF5LT50X2FkYXB0ZXIpOwotICBnX29iamVjdF91bnJlZiAocnRwajJrZGVwYXktPmZfYWRhcHRlcik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfajJrX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IE5VTEw7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgR3N0Q2FwcyAqb3V0Y2FwcyA9IE5VTEw7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBjb25zdCBnY2hhciAqY29sb3JzcGFjZSA9IE5VTEw7Ci0gIGNvbnN0IGdjaGFyICpzYW1wbGluZyA9IE5VTEw7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IDkwMDAwOwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNhbXBsaW5nID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzYW1wbGluZyIpOwotICBpZiAoc2FtcGxpbmcpIHsKLSAgICBpZiAoIXN0cmNtcCAoc2FtcGxpbmcsIEdTVF9SVFBfSjJLX1JHQikgfHwKLSAgICAgICAgIXN0cmNtcCAoc2FtcGxpbmcsIEdTVF9SVFBfSjJLX1JHQkEpIHx8Ci0gICAgICAgICFzdHJjbXAgKHNhbXBsaW5nLCBHU1RfUlRQX0oyS19CR1IpIHx8Ci0gICAgICAgICFzdHJjbXAgKHNhbXBsaW5nLCBHU1RfUlRQX0oyS19CR1JBKSkKLSAgICAgIGNvbG9yc3BhY2UgPSAic1JHQiI7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCAoc2FtcGxpbmcsIEdTVF9SVFBfSjJLX0dSQVlTQ0FMRSkpCi0gICAgICBjb2xvcnNwYWNlID0gIkdSQVkiOwotICAgIGVsc2UKLSAgICAgIGNvbG9yc3BhY2UgPSAic1lVViI7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZGVwYXlsb2FkLCBTVFJFQU0sIERFTVVYLCBOVUxMLAotICAgICAgICAoIk5vbi1jb21wbGlhbnQgc3RyZWFtOiBzYW1wbGluZyBmaWVsZCBtaXNzaW5nLiBGcmFtZXMgbXkgYXBwZWFyIGluY29ycmVjdCIpKTsKLSAgICBjb2xvcnNwYWNlID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJjb2xvcnNwYWNlIik7Ci0gICAgaWYgKCFzdHJjbXAgKGNvbG9yc3BhY2UsICJHUkFZIikpIHsKLSAgICAgIHNhbXBsaW5nID0gR1NUX1JUUF9KMktfR1JBWVNDQUxFOwotICAgIH0KLSAgfQotCi0gIG91dGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiaW1hZ2UveC1qcGMiLAotICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAwLCAxLAotICAgICAgImZpZWxkcyIsIEdfVFlQRV9JTlQsIDEsICJjb2xvcnNwYWNlIiwgR19UWVBFX1NUUklORywgY29sb3JzcGFjZSwgTlVMTCk7Ci0KLSAgaWYgKHNhbXBsaW5nKQotICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKG91dGNhcHMsICJzYW1wbGluZyIsIEdfVFlQRV9TVFJJTkcsIHNhbXBsaW5nLCBOVUxMKTsKLQotICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChkZXBheWxvYWQtPnNyY3BhZCwgb3V0Y2Fwcyk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2oya19kZXBheV9jbGVhcl9wdSAoR3N0UnRwSjJLRGVwYXkgKiBydHBqMmtkZXBheSkKLXsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cGoya2RlcGF5LT5wdV9hZGFwdGVyKTsKLSAgcnRwajJrZGVwYXktPmhhdmVfc3luYyA9IEZBTFNFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9qMmtfZGVwYXlfZmx1c2hfcHUgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQpCi17Ci0gIEdzdFJ0cEoyS0RlcGF5ICpydHBqMmtkZXBheTsKLSAgR3N0QnVmZmVyICptaGVhZGVyOwotICBndWludCBhdmFpbCwgTUhGLCBtaF9pZDsKLQotICBydHBqMmtkZXBheSA9IEdTVF9SVFBfSjJLX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIC8qIHRha2UgYWxsIGF2YWlsYWJsZSBidWZmZXJzICovCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBqMmtkZXBheS0+cHVfYWRhcHRlcik7Ci0gIGlmIChhdmFpbCA9PSAwKQotICAgIGdvdG8gZG9uZTsKLQotICBNSEYgPSBydHBqMmtkZXBheS0+cHVfTUhGOwotICBtaF9pZCA9IHJ0cGoya2RlcGF5LT5sYXN0X21oX2lkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGoya2RlcGF5LCAiZmx1c2hpbmcgUFUgb2Ygc2l6ZSAldSIsIGF2YWlsKTsKLQotICBpZiAoTUhGID09IDApIHsKLSAgICBHTGlzdCAqcGFja2V0cywgKndhbGs7Ci0KLSAgICBwYWNrZXRzID0gZ3N0X2FkYXB0ZXJfdGFrZV9saXN0IChydHBqMmtkZXBheS0+cHVfYWRhcHRlciwgYXZhaWwpOwotICAgIC8qIGFwcGVuZCBwYWNrZXRzICovCi0gICAgZm9yICh3YWxrID0gcGFja2V0czsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHdhbGstPmRhdGEpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksCi0gICAgICAgICAgImFwcGVuZCBwdSBwYWNrZXQgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKLSAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGoya2RlcGF5LT50X2FkYXB0ZXIsIGJ1Zik7Ci0gICAgfQotICAgIGdfbGlzdF9mcmVlIChwYWNrZXRzKTsKLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSBoYXZlIGEgaGVhZGVyICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJrZWVwaW5nIGhlYWRlciAldSIsIG1oX2lkKTsKLSAgICAvKiB3ZSBtYW5hZ2VkIHRvIHNlZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgaGVhZGVyLCB0YWtlIGFsbCBmcm9tCi0gICAgICogYWRhcHRlciBhbmQga2VlcCBpbiBoZWFkZXIgICovCi0gICAgbWhlYWRlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBqMmtkZXBheS0+cHVfYWRhcHRlciwgYXZhaWwpOwotCi0gICAgc3RvcmVfbWhlYWRlciAocnRwajJrZGVwYXksIG1oX2lkLCBtaGVhZGVyKTsKLSAgfQotCi1kb25lOgotICBydHBqMmtkZXBheS0+aGF2ZV9zeW5jID0gRkFMU0U7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9qMmtfZGVwYXlfZmx1c2hfdGlsZSAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCkKLXsKLSAgR3N0UnRwSjJLRGVwYXkgKnJ0cGoya2RlcGF5OwotICBndWludCBhdmFpbCwgbWhfaWQ7Ci0gIEdMaXN0ICpwYWNrZXRzLCAqd2FsazsKLSAgZ3VpbnQ4IGVuZFsyXTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIHJ0cGoya2RlcGF5ID0gR1NUX1JUUF9KMktfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgLyogZmx1c2ggcGVuZGluZyBQVSAqLwotICBnc3RfcnRwX2oya19kZXBheV9mbHVzaF9wdSAoZGVwYXlsb2FkKTsKLQotICAvKiB0YWtlIGFsbCBhdmFpbGFibGUgYnVmZmVycyAqLwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwajJrZGVwYXktPnRfYWRhcHRlcik7Ci0gIGlmIChhdmFpbCA9PSAwKQotICAgIGdvdG8gZG9uZTsKLQotICBtaF9pZCA9IHJ0cGoya2RlcGF5LT5sYXN0X21oX2lkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGoya2RlcGF5LCAiZmx1c2hpbmcgdGlsZSBvZiBzaXplICV1IiwgYXZhaWwpOwotCi0gIGlmIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGoya2RlcGF5LT5mX2FkYXB0ZXIpID09IDApIHsKLSAgICBHc3RCdWZmZXIgKm1oZWFkZXI7Ci0KLSAgICAvKiB3ZSBuZWVkIGEgaGVhZGVyIG5vdyAqLwotICAgIGlmICgobWhlYWRlciA9IHJ0cGoya2RlcGF5LT5NSFttaF9pZF0pID09IE5VTEwpCi0gICAgICBnb3RvIHdhaXRpbmdfaGVhZGVyOwotCi0gICAgLyogcHVzaCBoZWFkZXIgaW4gdGhlIGFkYXB0ZXIgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBqMmtkZXBheSwgInB1c2hpbmcgaGVhZGVyICV1IiwgbWhfaWQpOwotICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGoya2RlcGF5LT5mX2FkYXB0ZXIsIGdzdF9idWZmZXJfcmVmIChtaGVhZGVyKSk7Ci0gIH0KLQotICAvKiBjaGVjayBmb3IgbGFzdCBieXRlcyAqLwotICBnc3RfYWRhcHRlcl9jb3B5IChydHBqMmtkZXBheS0+dF9hZGFwdGVyLCBlbmQsIGF2YWlsIC0gMiwgMik7Ci0KLSAgLyogbm93IGFwcGVuZCB0aGUgdGlsZSBwYWNrZXRzIHRvIHRoZSBmcmFtZSAqLwotICBwYWNrZXRzID0gZ3N0X2FkYXB0ZXJfdGFrZV9saXN0IChydHBqMmtkZXBheS0+dF9hZGFwdGVyLCBhdmFpbCk7Ci0gIGZvciAod2FsayA9IHBhY2tldHM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHdhbGstPmRhdGEpOwotCi0gICAgaWYgKHdhbGsgPT0gcGFja2V0cykgewotICAgICAgLyogZmlyc3QgYnVmZmVyIHNob3VsZCBjb250YWluIHRoZSBTT1QgKi8KLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgICAgIGlmIChtYXAuc2l6ZSA8IDEyKQotICAgICAgICBnb3RvIGludmFsaWRfdGlsZTsKLQotICAgICAgaWYgKG1hcC5kYXRhWzBdID09IEdTVF9KMktfTUFSS0VSICYmIG1hcC5kYXRhWzFdID09IEdTVF9KMktfTUFSS0VSX1NPVCkgewotICAgICAgICBndWludCBQc290LCBuUHNvdDsKLQotICAgICAgICBpZiAoZW5kWzBdID09IEdTVF9KMktfTUFSS0VSICYmIGVuZFsxXSA9PSBHU1RfSjJLX01BUktFUl9FT0MpCi0gICAgICAgICAgblBzb3QgPSBhdmFpbCAtIDI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBuUHNvdCA9IGF2YWlsOwotCi0gICAgICAgIFBzb3QgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKCZtYXAuZGF0YVs2XSk7Ci0gICAgICAgIGlmIChQc290ICE9IG5Qc290ICYmIFBzb3QgIT0gMCkgewotICAgICAgICAgIC8qIFBzb3QgbXVzdCBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgdGlsZSAqLwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGoya2RlcGF5LCAic2V0IFBzb3QgZnJvbSAldSB0byAldSIsIFBzb3QsIG5Qc290KTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gICAgICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOwotCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgICAgICAgR1NUX1dSSVRFX1VJTlQzMl9CRSAoJm1hcC5kYXRhWzZdLCBuUHNvdCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJhcHBlbmQgcHUgcGFja2V0IG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGoya2RlcGF5LT5mX2FkYXB0ZXIsIGJ1Zik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKHBhY2tldHMpOwotCi1kb25lOgotICBydHBqMmtkZXBheS0+bGFzdF90aWxlID0gLTE7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBlcnJvcnMgKi8KLXdhaXRpbmdfaGVhZGVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJ3YWl0aW5nIGZvciBoZWFkZXIgJXUiLCBtaF9pZCk7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cGoya2RlcGF5LT50X2FkYXB0ZXIpOwotICAgIHJ0cGoya2RlcGF5LT5sYXN0X3RpbGUgPSAtMTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci1pbnZhbGlkX3RpbGU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBqMmtkZXBheSwgU1RSRUFNLCBERUNPREUsICgiSW52YWxpZCB0aWxlIiksIChOVUxMKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwajJrZGVwYXktPnRfYWRhcHRlcik7Ci0gICAgcnRwajJrZGVwYXktPmxhc3RfdGlsZSA9IC0xOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfajJrX2RlcGF5X2ZsdXNoX2ZyYW1lIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkKQotewotICBHc3RSdHBKMktEZXBheSAqcnRwajJrZGVwYXk7Ci0gIGd1aW50OCBlbmRbMl07Ci0gIGd1aW50IGF2YWlsOwotCi0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgcnRwajJrZGVwYXkgPSBHU1RfUlRQX0oyS19ERVBBWSAoZGVwYXlsb2FkKTsKLQotICAvKiBmbHVzaCBwZW5kaW5nIHRpbGUgKi8KLSAgZ3N0X3J0cF9qMmtfZGVwYXlfZmx1c2hfdGlsZSAoZGVwYXlsb2FkKTsKLQotICAvKiBsYXN0IGJ1ZmZlciB0YWtlIGFsbCBkYXRhIG91dCBvZiB0aGUgYWRhcHRlciAqLwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwajJrZGVwYXktPmZfYWRhcHRlcik7Ci0gIGlmIChhdmFpbCA9PSAwKQotICAgIGdvdG8gZG9uZTsKLQotICBpZiAoYXZhaWwgPiAyKSB7Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0KLSAgICAvKiB0YWtlIHRoZSBsYXN0IGJ5dGVzIG9mIHRoZSBKUEVHIDIwMDAgZGF0YSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gRU9DCi0gICAgICogbWFya2VyICovCi0gICAgZ3N0X2FkYXB0ZXJfY29weSAocnRwajJrZGVwYXktPmZfYWRhcHRlciwgZW5kLCBhdmFpbCAtIDIsIDIpOwotCi0gICAgaWYgKGVuZFswXSAhPSBHU1RfSjJLX01BUktFUiAmJiBlbmRbMV0gIT0gR1NUX0oyS19NQVJLRVJfRU9DKSB7Ci0gICAgICBlbmRbMF0gPSBHU1RfSjJLX01BUktFUjsKLSAgICAgIGVuZFsxXSA9IEdTVF9KMktfTUFSS0VSX0VPQzsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJubyBFT0MgbWFya2VyLCBhZGRpbmcgb25lIik7Ci0KLSAgICAgIC8qIG5vIEVPSSBtYXJrZXIsIGFkZCBvbmUgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMik7Ci0gICAgICBnc3RfYnVmZmVyX2ZpbGwgKG91dGJ1ZiwgMCwgZW5kLCAyKTsKLQotICAgICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwajJrZGVwYXktPmZfYWRhcHRlciwgb3V0YnVmKTsKLSAgICAgIGF2YWlsICs9IDI7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJwdXNoaW5nIGJ1ZmZlciBvZiAldSBieXRlcyIsIGF2YWlsKTsKLSAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocnRwajJrZGVwYXktPmZfYWRhcHRlciwgYXZhaWwpOwotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheWxvYWQpLAotICAgICAgICBvdXRidWYsIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgcmV0ID0gZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIG91dGJ1Zik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBqMmtkZXBheSwgImVtcHR5IHBhY2tldCIpOwotICAgIGdzdF9hZGFwdGVyX2NsZWFyIChydHBqMmtkZXBheS0+Zl9hZGFwdGVyKTsKLSAgfQotCi0gIC8qIHdlIGFjY2VwdCBhbnkgbWhfaWQgbm93ICovCi0gIHJ0cGoya2RlcGF5LT5sYXN0X21oX2lkID0gLTE7Ci0KLSAgLyogcmVzZXQgc3RhdGUgKi8KLSAgcnRwajJrZGVwYXktPm5leHRfZnJhZyA9IDA7Ci0gIHJ0cGoya2RlcGF5LT5oYXZlX3N5bmMgPSBGQUxTRTsKLQotZG9uZToKLSAgLyogd2UgY2FuJ3Qga2VlcCBoZWFkZXJzIHdpdGggbWhfaWQgb2YgMCAqLwotICBzdG9yZV9taGVhZGVyIChydHBqMmtkZXBheSwgMCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2oya19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cEoyS0RlcGF5ICpydHBqMmtkZXBheTsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBndWludCBNSEYsIG1oX2lkLCBmcmFnX29mZnNldCwgdGlsZSwgcGF5bG9hZF9sZW4sIGoya2xlbjsKLSAgZ2ludCBnYXA7Ci0gIGd1aW50MzIgcnRwdGltZTsKLQotICBydHBqMmtkZXBheSA9IEdTVF9SVFBfSjJLX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgLyogd2UgbmVlZCBhdCBsZWFzdCBhIGhlYWRlciAqLwotICBpZiAocGF5bG9hZF9sZW4gPCBHU1RfUlRQX0oyS19IRUFERVJfU0laRSkKLSAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotICBydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKTsKLQotICAvKiBuZXcgdGltZXN0YW1wIG1hcmtzIG5ldyBmcmFtZSAqLwotICBpZiAocnRwajJrZGVwYXktPmxhc3RfcnRwdGltZSAhPSBydHB0aW1lKSB7Ci0gICAgcnRwajJrZGVwYXktPmxhc3RfcnRwdGltZSA9IHJ0cHRpbWU7Ci0gICAgLyogZmx1c2ggcGVuZGluZyBmcmFtZSAqLwotICAgIGdzdF9ydHBfajJrX2RlcGF5X2ZsdXNoX2ZyYW1lIChkZXBheWxvYWQpOwotICB9Ci0KLSAgLyoKLSAgICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8dHAgfE1IRnxtaF9pZHxUfCAgICAgcHJpb3JpdHkgIHwgICAgICAgICAgIHRpbGUgbnVtYmVyICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8cmVzZXJ2ZWQgICAgICAgfCAgICAgICAgICAgICBmcmFnbWVudCBvZmZzZXQgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgTUhGID0gKHBheWxvYWRbMF0gJiAweDMwKSA+PiA0OwotICBtaF9pZCA9IChwYXlsb2FkWzBdICYgMHhlKSA+PiAxOwotCi0gIGlmIChydHBqMmtkZXBheS0+bGFzdF9taF9pZCA9PSAtMSkKLSAgICBydHBqMmtkZXBheS0+bGFzdF9taF9pZCA9IG1oX2lkOwotICBlbHNlIGlmIChydHBqMmtkZXBheS0+bGFzdF9taF9pZCAhPSBtaF9pZCkKLSAgICBnb3RvIHdyb25nX21oX2lkOwotCi0gIHRpbGUgPSAocGF5bG9hZFsyXSA8PCA4KSB8IHBheWxvYWRbM107Ci0gIGZyYWdfb2Zmc2V0ID0gKHBheWxvYWRbNV0gPDwgMTYpIHwgKHBheWxvYWRbNl0gPDwgOCkgfCBwYXlsb2FkWzddOwotICBqMmtsZW4gPSBwYXlsb2FkX2xlbiAtIEdTVF9SVFBfSjJLX0hFQURFUl9TSVpFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGoya2RlcGF5LCAiTUhGICV1LCB0aWxlICV1LCBmcmFnICV1LCBleHBlY3RlZCAldSIsIE1IRiwKLSAgICAgIHRpbGUsIGZyYWdfb2Zmc2V0LCBydHBqMmtkZXBheS0+bmV4dF9mcmFnKTsKLQotICAvKiBjYWxjdWxhdGUgdGhlIGdhcCBiZXR3ZWVuIGV4cGVjdGVkIGZyYWcgKi8KLSAgZ2FwID0gZnJhZ19vZmZzZXQgLSBydHBqMmtkZXBheS0+bmV4dF9mcmFnOwotICAvKiBjYWxjdWxhdGUgbmV4dCBmcmFnICovCi0gIHJ0cGoya2RlcGF5LT5uZXh0X2ZyYWcgPSBmcmFnX29mZnNldCArIGoya2xlbjsKLQotICBpZiAoZ2FwICE9IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBqMmtkZXBheSwgImRpc2NvbnQgb2YgJWQsIGNsZWFyIFBVIiwgZ2FwKTsKLSAgICAvKiBkaXNjb250LCBjbGVhciBwdSBhZGFwdGVyIGFuZCByZXN5bmMgKi8KLSAgICBnc3RfcnRwX2oya19kZXBheV9jbGVhcl9wdSAocnRwajJrZGVwYXkpOwotICB9Ci0KLSAgLyogY2hlY2sgZm9yIHN5bmMgY29kZSAqLwotICBpZiAoajJrbGVuID4gMiAmJiBwYXlsb2FkW0dTVF9SVFBfSjJLX0hFQURFUl9TSVpFXSA9PSBHU1RfSjJLX01BUktFUikgewotICAgIGd1aW50IG1hcmtlciA9IHBheWxvYWRbR1NUX1JUUF9KMktfSEVBREVSX1NJWkUgKyAxXTsKLQotICAgIC8qIHBhY2tldHMgbXVzdCBzdGFydCB3aXRoIFNPQywgU09UIG9yIFNPUCAqLwotICAgIHN3aXRjaCAobWFya2VyKSB7Ci0gICAgICBjYXNlIEdTVF9KMktfTUFSS0VSX1NPQzoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJmb3VuZCBTT0MgcGFja2V0Iik7Ci0gICAgICAgIC8qIGZsdXNoIHRoZSBwcmV2aW91cyBmcmFtZSwgc2hvdWxkIGhhdmUgaGFwcGVuZWQgd2hlbiB0aGUgdGltZXN0YW1wCi0gICAgICAgICAqIGNoYW5nZWQgYWJvdmUuICovCi0gICAgICAgIGdzdF9ydHBfajJrX2RlcGF5X2ZsdXNoX2ZyYW1lIChkZXBheWxvYWQpOwotICAgICAgICBydHBqMmtkZXBheS0+aGF2ZV9zeW5jID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9KMktfTUFSS0VSX1NPVDoKLSAgICAgICAgLyogZmx1c2ggdGhlIHByZXZpb3VzIHRpbGUgKi8KLSAgICAgICAgZ3N0X3J0cF9qMmtfZGVwYXlfZmx1c2hfdGlsZSAoZGVwYXlsb2FkKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJmb3VuZCBTT1QgcGFja2V0Iik7Ci0gICAgICAgIHJ0cGoya2RlcGF5LT5oYXZlX3N5bmMgPSBUUlVFOwotICAgICAgICAvKiB3ZSBzeW5jIG9uIHRoZSB0aWxlIG5vdyAqLwotICAgICAgICBydHBqMmtkZXBheS0+bGFzdF90aWxlID0gdGlsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9KMktfTUFSS0VSX1NPUDoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJmb3VuZCBTT1AgcGFja2V0Iik7Ci0gICAgICAgIC8qIGZsdXNoIHRoZSBwcmV2aW91cyBQVSAqLwotICAgICAgICBnc3RfcnRwX2oya19kZXBheV9mbHVzaF9wdSAoZGVwYXlsb2FkKTsKLSAgICAgICAgaWYgKHJ0cGoya2RlcGF5LT5sYXN0X3RpbGUgIT0gdGlsZSkgewotICAgICAgICAgIC8qIHdyb25nIHRpbGUsIHdlIGxvc2Ugc3luYyBhbmQgd2UgbmVlZCBhIG5ldyBTT1Qgb3IgU09DIHRvIHJlZ2FpbgotICAgICAgICAgICAqIHN5bmMuIEZpcnN0IGZsdXNoIG91dCB0aGUgcHJldmlvdXMgdGlsZSBpZiB3ZSBoYXZlIG9uZS4gKi8KLSAgICAgICAgICBpZiAocnRwajJrZGVwYXktPmxhc3RfdGlsZSAhPSAtMSkKLSAgICAgICAgICAgIGdzdF9ydHBfajJrX2RlcGF5X2ZsdXNoX3RpbGUgKGRlcGF5bG9hZCk7Ci0gICAgICAgICAgLyogbm93IHdlIGhhdmUgbm8gbW9yZSB2YWxpZCB0aWxlIGFuZCBubyBzeW5jICovCi0gICAgICAgICAgcnRwajJrZGVwYXktPmxhc3RfdGlsZSA9IC0xOwotICAgICAgICAgIHJ0cGoya2RlcGF5LT5oYXZlX3N5bmMgPSBGQUxTRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBydHBqMmtkZXBheS0+aGF2ZV9zeW5jID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGoya2RlcGF5LCAibm8gc3luYyBwYWNrZXQgMHglMDJkIiwgbWFya2VyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHJ0cGoya2RlcGF5LT5oYXZlX3N5bmMpIHsKLSAgICBHc3RCdWZmZXIgKnB1X2ZyYWc7Ci0KLSAgICBpZiAoZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBqMmtkZXBheS0+cHVfYWRhcHRlcikgPT0gMCkgewotICAgICAgLyogZmlyc3QgcGFydCBvZiBwdSwgcmVjb3JkIHN0YXRlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBqMmtkZXBheSwgImZpcnN0IFBVIik7Ci0gICAgICBydHBqMmtkZXBheS0+cHVfTUhGID0gTUhGOwotICAgIH0KLSAgICAvKiBhbmQgcHVzaCBpbiBwdSBhZGFwdGVyICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJwdXNoIHB1IG9mIHNpemUgJXUgaW4gYWRhcHRlciIsIGoya2xlbik7Ci0gICAgcHVfZnJhZyA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCA4LCAtMSk7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwajJrZGVwYXktPnB1X2FkYXB0ZXIsIHB1X2ZyYWcpOwotCi0gICAgaWYgKE1IRiAmIDIpIHsKLSAgICAgIC8qIGxhc3QgcGFydCBvZiBtYWluIGhlYWRlciByZWNlaXZlZCwgd2UgY2FuIGZsdXNoIGl0ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBqMmtkZXBheSwgImhlYWRlciBlbmQsIGZsdXNoIHB1Iik7Ci0gICAgICBnc3RfcnRwX2oya19kZXBheV9mbHVzaF9wdSAoZGVwYXlsb2FkKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwajJrZGVwYXksICJkaXNjYXJkIHBhY2tldCwgbm8gc3luYyIpOwotICB9Ci0KLSAgLyogbWFya2VyIGJpdCBmaW5pc2hlcyB0aGUgZnJhbWUgKi8KLSAgaWYgKGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBqMmtkZXBheSwgIm1hcmtlciBzZXQsIGxhc3QgYnVmZmVyIik7Ci0gICAgLyogdGhlbiBmbHVzaCBmcmFtZSAqLwotICAgIGdzdF9ydHBfajJrX2RlcGF5X2ZsdXNoX2ZyYW1lIChkZXBheWxvYWQpOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogRVJST1JTICovCi1lbXB0eV9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBqMmtkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiRW1wdHkgUGF5bG9hZC4iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotd3JvbmdfbWhfaWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBqMmtkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiSW52YWxpZCBtaF9pZCAldSwgZXhwZWN0ZWQgJXUiLCBtaF9pZCwgcnRwajJrZGVwYXktPmxhc3RfbWhfaWQpLAotICAgICAgICAoTlVMTCkpOwotICAgIGdzdF9ydHBfajJrX2RlcGF5X2NsZWFyX3B1IChydHBqMmtkZXBheSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfajJrX2RlcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2oya19kZXBheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfajJrX2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEoyS0RlcGF5ICpydHBqMmtkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cGoya2RlcGF5ID0gR1NUX1JUUF9KMktfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9ydHBfajJrX2RlcGF5X3Jlc2V0IChydHBqMmtkZXBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9qMmtfZGVwYXlfcmVzZXQgKHJ0cGoya2RlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2oya19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGoya2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0oyS19ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGoya2RlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzc0MzMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBqMmtkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0oyS19ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0oyS19ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0oyS19ERVBBWSBcCi0gIChnc3RfcnRwX2oya19kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0oyS19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9KMktfREVQQVksR3N0UnRwSjJLRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX0oyS19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSjJLX0RFUEFZLEdzdFJ0cEoyS0RlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0oyS19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9KMktfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0oyS19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSjJLX0RFUEFZKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBKMktEZXBheSBHc3RSdHBKMktEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBKMktEZXBheUNsYXNzIEdzdFJ0cEoyS0RlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwSjJLRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgZ3VpbnQ2NCBsYXN0X3J0cHRpbWU7Ci0gIGd1aW50IGxhc3RfbWhfaWQ7Ci0gIGd1aW50IGxhc3RfdGlsZTsKLQotICBHc3RCdWZmZXIgKk1IWzhdOwotCi0gIGd1aW50IHB1X01IRjsKLSAgR3N0QWRhcHRlciAqcHVfYWRhcHRlcjsKLSAgR3N0QWRhcHRlciAqdF9hZGFwdGVyOwotICBHc3RBZGFwdGVyICpmX2FkYXB0ZXI7Ci0KLSAgZ3VpbnQgbmV4dF9mcmFnOwotICBnYm9vbGVhbiBoYXZlX3N5bmM7Ci0KLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotfTsKLQotc3RydWN0IF9Hc3RSdHBKMktEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2oya19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfajJrX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9KMktfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGoya3BheS5jIGIvZ3N0L3J0cC9nc3RydHBqMmtwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFlNWVhNi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGoya3BheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotIC8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGoya3BheQotICoKLSAqIFBheWxvYWQgZW5jb2RlIEpQRUcgMjAwMCBpbWFnZXMgaW50byBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDUzNzEKLSAqIGFuZCBSRkMgNTM3Mi4KLSAqIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBzZWU6IGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL3JmYzUzNzEvCi0gKiBhbmQgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvcmZjNTM3Mi8KLSAqCi0gKiBUaGUgcGF5bG9hZGVyIHRha2VzIGEgSlBFRyAyMDAwIGltYWdlLCBzY2FucyBpdCBmb3IgInBhY2tldGl6YXRpb24KLSAqIHVuaXRzIiBhbmQgY29uc3RydWN0cyB0aGUgUlRQIHBhY2tldCBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlIEpQRUcgMjAwMAotICogY29kZXN0cmVhbS4gQSAicGFja2V0aXphdGlvbiB1bml0IiBpcyBkZWZpbmVkIGFzIGVpdGhlciBhIEpQRUcgMjAwMCBtYWluIGhlYWRlciwKLSAqIGEgSlBFRyAyMDAwIHRpbGUtcGFydCBoZWFkZXIsIG9yIGEgSlBFRyAyMDAwIHBhY2tldC4KLSAqCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlICJnc3RydHBqMmtjb21tb24uaCIKLSNpbmNsdWRlICJnc3RydHBqMmtwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9qMmtfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiaW1hZ2UveC1qcGMsICIgR1NUX1JUUF9KMktfU0FNUExJTkdfTElTVCkKLSAgICApOwotCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2oya19wYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAiICBtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAiICBwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiICBjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIKLSAgICAgICAgR1NUX1JUUF9KMktfU0FNUExJTkdfTElTVCAiLCIgIiAgZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiSlBFRzIwMDBcIiIpCi0gICAgKTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwajJrcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBqMmtwYXlfZGVidWcpCi0KLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTEFTVAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQgdHA6MjsKLSAgZ3VpbnQgTUhGOjI7Ci0gIGd1aW50IG1oX2lkOjM7Ci0gIGd1aW50IFQ6MTsKLSAgZ3VpbnQgcHJpb3JpdHk6ODsKLSAgZ3VpbnQgdGlsZToxNjsKLSAgZ3VpbnQgb2Zmc2V0OjI0OwotfSBSdHBKMktIZWFkZXI7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfajJrX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2oya19wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9qMmtfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2oya19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotI2RlZmluZSBnc3RfcnRwX2oya19wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSjJLUGF5LCBnc3RfcnRwX2oya19wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qMmtfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEoyS1BheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9qMmtfcGF5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9qMmtfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2oya19wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9qMmtfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEpQRUcgMjAwMCBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgSlBFRyAyMDAwIHBpY3R1cmVzIGludG8gUlRQIHBhY2tldHMgKFJGQyA1MzcxKSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2oya19wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2oya19wYXlfaGFuZGxlX2J1ZmZlcjsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwajJrcGF5X2RlYnVnLCAicnRwajJrcGF5IiwgMCwKLSAgICAgICJKUEVHIDIwMDAgUlRQIFBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qMmtfcGF5X2luaXQgKEdzdFJ0cEoyS1BheSAqIHBheSkKLXsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2oya19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqY2Fwc19zdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgZ2Jvb2xlYW4gcmVzOwotICBnaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgY29uc3QgZ2NoYXIgKnNhbXBsaW5nID0gTlVMTDsKLQotICBnYm9vbGVhbiBoYXNfd2lkdGggPSBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGNhcHNfc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpOwotICBnYm9vbGVhbiBoYXNfaGVpZ2h0ID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoY2Fwc19zdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KTsKLQotCi0gIC8qIHNhbXBsaW5nIGlzIGEgcmVxdWlyZWQgZmllbGQgKi8KLSAgc2FtcGxpbmcgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKGNhcHNfc3RydWN0dXJlLCAic2FtcGxpbmciKTsKLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAoYmFzZXBheWxvYWQsICJ2aWRlbyIsIFRSVUUsICJKUEVHMjAwMCIsCi0gICAgICA5MDAwMCk7Ci0KLSAgaWYgKGhhc193aWR0aCAmJiBoYXNfaGVpZ2h0KQotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwKLSAgICAgICAgInNhbXBsaW5nIiwgR19UWVBFX1NUUklORywgc2FtcGxpbmcsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHdpZHRoLAotICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgaGVpZ2h0LCBOVUxMKTsKLSAgZWxzZQotICAgIHJlcyA9Ci0gICAgICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwgInNhbXBsaW5nIiwKLSAgICAgICAgR19UWVBFX1NUUklORywgc2FtcGxpbmcsIE5VTEwpOwotICByZXR1cm4gcmVzOwotfQotCi0KLXN0YXRpYyBndWludAotZ3N0X3J0cF9qMmtfcGF5X2hlYWRlcl9zaXplIChjb25zdCBndWludDggKiBkYXRhLCBndWludCBvZmZzZXQpCi17Ci0gIHJldHVybiBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07Ci19Ci0KLQotc3RhdGljIEdzdFJ0cEoyS01hcmtlcgotZ3N0X3J0cF9qMmtfcGF5X3NjYW5fbWFya2VyIChjb25zdCBndWludDggKiBkYXRhLCBndWludCBzaXplLCBndWludCAqIG9mZnNldCkKLXsKLSAgd2hpbGUgKChkYXRhWygqb2Zmc2V0KSsrXSAhPSBHU1RfSjJLX01BUktFUikgJiYgKCgqb2Zmc2V0KSA8IHNpemUpKTsKLQotICBpZiAoR19VTkxJS0VMWSAoKCpvZmZzZXQpID49IHNpemUpKSB7Ci0gICAgcmV0dXJuIEdTVF9KMktfTUFSS0VSX0VPQzsKLSAgfSBlbHNlIHsKLSAgICBndWludDggbWFya2VyID0gZGF0YVsoKm9mZnNldCkrK107Ci0gICAgcmV0dXJuIChHc3RSdHBKMktNYXJrZXIpIG1hcmtlcjsKLSAgfQotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBSdHBKMktIZWFkZXIgaGVhZGVyOwotICBnYm9vbGVhbiBtdWx0aV90aWxlOwotICBnYm9vbGVhbiBiaXRzdHJlYW07Ci0gIGd1aW50IG5leHRfc290OwotICBnYm9vbGVhbiBmb3JjZV9wYWNrZXQ7Ci19IFJ0cEoyS1N0YXRlOwotCi0KLS8qIE5vdGU6IFRoZSBzdGFuZGFyZCByZWNvbW1lbmRzIHRoYXQgaGVhZGVycyBiZSBwdXQgaW4gdGhlaXIgb3duIFJUUCBwYWNrZXRzLCBzbyB3ZSBmb2xsb3cKLSAqIHRoaXMgcmVjb21tZW5kYXRpb24gaW4gdGhlIGNvZGUuIEFsc28sIHRoaXMgbWV0aG9kIGdyb3VwcyB0b2dldGhlciBhbGwgSjJLIHBhY2tldHMKLSAqIGZvciBhIHRpbGUgcGFydCBhbmQgdHJlYXRzIHRoaXMgZ3JvdXAgYXMgYSBwYWNrZXRpemF0aW9uIHVuaXQuIEFjY29yZGluZyB0byB0aGUgUkZDLAotICogb25seSBhbiBpbmRpdmlkdWFsIEoySyBwYWNrZXQgaXMgY29uc2lkZXJlZCBhIHBhY2tldGl6YXRpb24gdW5pdC4KLSAqLwotCi1zdGF0aWMgZ3VpbnQKLWZpbmRfcHVfZW5kIChHc3RSdHBKMktQYXkgKiBwYXksIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgZ3VpbnQgb2Zmc2V0LCBSdHBKMktTdGF0ZSAqIHN0YXRlKQotewotICBnYm9vbGVhbiBjdXRfc29wID0gRkFMU0U7Ci0gIEdzdFJ0cEoyS01hcmtlciBtYXJrZXI7Ci0KLSAgLyogcGFyc2UgdGhlIGoyayBoZWFkZXIgZm9yICdzdGFydCBvZiBjb2Rlc3RyZWFtJyAqLwotICBHU1RfTE9HX09CSkVDVCAocGF5LCAiY2hlY2tpbmcgZnJvbSBvZmZzZXQgJXUiLCBvZmZzZXQpOwotICB3aGlsZSAob2Zmc2V0IDwgc2l6ZSkgewotICAgIG1hcmtlciA9IGdzdF9ydHBfajJrX3BheV9zY2FuX21hcmtlciAoZGF0YSwgc2l6ZSwgJm9mZnNldCk7Ci0KLSAgICBpZiAoc3RhdGUtPmJpdHN0cmVhbSkgewotICAgICAgLyogcGFyc2luZyBiaXRzdHJlYW0sIG9ubHkgbG9vayBmb3IgU09QICovCi0gICAgICBzd2l0Y2ggKG1hcmtlcikgewotICAgICAgICBjYXNlIEdTVF9KMktfTUFSS0VSX1NPUDoKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAiZm91bmQgU09QIGF0ICV1Iiwgb2Zmc2V0KTsKLSAgICAgICAgICBpZiAoY3V0X3NvcCkKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQgLSAyOwotICAgICAgICAgIGN1dF9zb3AgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9KMktfTUFSS0VSX0VQSDoKLSAgICAgICAgICAvKiBqdXN0IHNraXAgb3ZlciBFUEggKi8KLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAiZm91bmQgRVBIIGF0ICV1Iiwgb2Zmc2V0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBpZiAob2Zmc2V0ID49IHN0YXRlLT5uZXh0X3NvdCkgewotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgInJlYWNoZWQgbmV4dCBTT1QgYXQgJXUiLCBvZmZzZXQpOwotICAgICAgICAgICAgc3RhdGUtPmJpdHN0cmVhbSA9IEZBTFNFOwotICAgICAgICAgICAgc3RhdGUtPmZvcmNlX3BhY2tldCA9IFRSVUU7Ci0gICAgICAgICAgICBpZiAobWFya2VyID09IEdTVF9KMktfTUFSS0VSX0VPQyAmJiBzdGF0ZS0+bmV4dF9zb3QgKyAyIDw9IHNpemUpCi0gICAgICAgICAgICAgIC8qIGluY2x1ZGUgRU9DIGJ1dCBuZXZlciBnbyBwYXN0IHRoZSBtYXggc2l6ZSAqLwotICAgICAgICAgICAgICByZXR1cm4gc3RhdGUtPm5leHRfc290ICsgMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5uZXh0X3NvdDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAobWFya2VyKSB7Ci0gICAgICAgIGNhc2UgR1NUX0oyS19NQVJLRVJfU09DOgotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJmb3VuZCBTT0MgYXQgJXUiLCBvZmZzZXQpOwotICAgICAgICAgIC8qIHN0YXJ0IG9mZiBieSBhc3N1bWluZyB0aGF0IHdlIHdpbGwgZml0IHRoZSBlbnRpcmUgaGVhZGVyCi0gICAgICAgICAgICAgaW50byB0aGUgUlRQIHBheWxvYWQgKi8KLSAgICAgICAgICBzdGF0ZS0+aGVhZGVyLk1IRiA9IDM7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0oyS19NQVJLRVJfU09UOgotICAgICAgICB7Ci0gICAgICAgICAgZ3VpbnQgbGVuLCBQc290LCB0aWxlOwotCi0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgImZvdW5kIFNPVCBhdCAldSIsIG9mZnNldCk7Ci0gICAgICAgICAgLyogU09UIGZvciBmaXJzdCB0aWxlIHBhcnQgaW4gY29kZSBzdHJlYW06Ci0gICAgICAgICAgICAgZm9yY2UgY2xvc2Ugb2YgY3VycmVudCBSVFAgcGFja2V0LCBzbyB0aGF0IGl0Ci0gICAgICAgICAgICAgb25seSBjb250YWlucyBtYWluIGhlYWRlciAgKi8KLSAgICAgICAgICBpZiAoc3RhdGUtPmhlYWRlci5NSEYpIHsKLSAgICAgICAgICAgIHN0YXRlLT5mb3JjZV9wYWNrZXQgPSBUUlVFOwotICAgICAgICAgICAgcmV0dXJuIG9mZnNldCAtIDI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogcGFyc2UgU09UIGJ1dCBkbyBzb21lIHNhbml0eSBjaGVja3MgZmlyc3QgKi8KLSAgICAgICAgICBsZW4gPSBnc3RfcnRwX2oya19wYXlfaGVhZGVyX3NpemUgKGRhdGEsIG9mZnNldCk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgIlNPVCBsZW5ndGggJXUiLCBsZW4pOwotICAgICAgICAgIGlmIChsZW4gPCA4KQotICAgICAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAgICAgICAgaWYgKG9mZnNldCArIGxlbiA+PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIHNpemU7Ci0KLSAgICAgICAgICAvKiBJc290ICovCi0gICAgICAgICAgdGlsZSA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoJmRhdGFbb2Zmc2V0ICsgMl0pOwotCi0gICAgICAgICAgaWYgKCFzdGF0ZS0+bXVsdGlfdGlsZSkgewotICAgICAgICAgICAgLyogd2UgaGF2ZSBkZXRlY3RlZCBtdWx0aXBsZSB0aWxlcyBpbiB0aGlzIHJ0cCBwYWNrZXQgOiB0aWxlIGJpdCBpcyBub3cgaW52YWxpZCAqLwotICAgICAgICAgICAgaWYgKHN0YXRlLT5oZWFkZXIuVCA9PSAwICYmIHN0YXRlLT5oZWFkZXIudGlsZSAhPSB0aWxlKSB7Ci0gICAgICAgICAgICAgIHN0YXRlLT5oZWFkZXIuVCA9IDE7Ci0gICAgICAgICAgICAgIHN0YXRlLT5tdWx0aV90aWxlID0gVFJVRTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHN0YXRlLT5oZWFkZXIuVCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0YXRlLT5oZWFkZXIudGlsZSA9IHRpbGU7Ci0KLSAgICAgICAgICAvKiBOb3RlOiBUaWxlIHBhcnRzIGZyb20gbXVsdGlwbGUgdGlsZXMgaW4gc2luZ2xlIFJUUCBwYWNrZXQgCi0gICAgICAgICAgICAgd2lsbCBtYWtlIFQgaW52YWxpZC4KLSAgICAgICAgICAgICBUaGlzIGNhbm5vdCBoYXBwZW4gaW4gb3VyIGNhc2Ugc2luY2Ugd2UgYWx3YXlzCi0gICAgICAgICAgICAgc2VuZCB0aWxlIGhlYWRlcnMgaW4gdGhlaXIgb3duIFJUUCBwYWNrZXRzLCBzbyB3ZSBjYW5ub3QgbWl4Ci0gICAgICAgICAgICAgdGlsZSBwYXJ0cyBpbiBhIHNpbmdsZSBSVFAgcGFja2V0ICAqLwotCi0gICAgICAgICAgLyogUHNvdDogb2Zmc2V0IG9mIG5leHQgdGlsZS4gSWYgaXQncyAwLCBuZXh0IHRpbGUgZ29lcyBhbGwgdGhlIHdheQotICAgICAgICAgICAgIHRvIHRoZSBlbmQgb2YgdGhlIGRhdGEgKi8KLSAgICAgICAgICBQc290ID0gR1NUX1JFQURfVUlOVDMyX0JFICgmZGF0YVtvZmZzZXQgKyA0XSk7Ci0gICAgICAgICAgaWYgKFBzb3QgPT0gMCkKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0X3NvdCA9IHNpemU7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUtPm5leHRfc290ID0gb2Zmc2V0IC0gMiArIFBzb3Q7Ci0KLSAgICAgICAgICBvZmZzZXQgKz0gbGVuOwotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJJc290ICV1LCBQc290ICV1LCBuZXh0ICV1Iiwgc3RhdGUtPmhlYWRlci50aWxlLAotICAgICAgICAgICAgICBQc290LCBzdGF0ZS0+bmV4dF9zb3QpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1NUX0oyS19NQVJLRVJfU09EOgotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJmb3VuZCBTT0QgYXQgJXUiLCBvZmZzZXQpOwotICAgICAgICAgIC8qIGdvIHRvIGJpdHN0cmVhbSBwYXJzaW5nICovCi0gICAgICAgICAgc3RhdGUtPmJpdHN0cmVhbSA9IFRSVUU7Ci0gICAgICAgICAgLyogY3V0IGF0IHRoZSBuZXh0IFNPUCBvciBlbHNlIGluY2x1ZGUgYWxsIGRhdGEgKi8KLSAgICAgICAgICBjdXRfc29wID0gVFJVRTsKLSAgICAgICAgICAvKiBmb3JjZSBhIG5ldyBwYWNrZXQgd2hlbiB3ZSBzZWUgU09QLCB0aGlzIGNhbiBiZSBvcHRpb25hbCBidXQgdGhlCi0gICAgICAgICAgICogc3BlYyByZWNvbW1lbmRzIHBhY2tpbmcgaGVhZGVycyBzZXBhcmF0ZWx5ICovCi0gICAgICAgICAgc3RhdGUtPmZvcmNlX3BhY2tldCA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0oyS19NQVJLRVJfRU9DOgotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJmb3VuZCBFT0MgYXQgJXUiLCBvZmZzZXQpOwotICAgICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICBndWludCBsZW4gPSBnc3RfcnRwX2oya19wYXlfaGVhZGVyX3NpemUgKGRhdGEsIG9mZnNldCk7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgInNraXAgMHglMDJ4IGxlbiAldSIsIG1hcmtlciwgbGVuKTsKLSAgICAgICAgICBvZmZzZXQgKz0gbGVuOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheSwgInJlYWNoZWQgZW5kIG9mIGRhdGEiKTsKLSAgcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2oya19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cEoyS1BheSAqcGF5OwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICBSdHBKMktTdGF0ZSBzdGF0ZTsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdCA9IE5VTEw7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBtdHUsIG1heF9zaXplOwotICBndWludCBvZmZzZXQ7Ci0gIGd1aW50IGVuZCwgcG9zOwotCi0gIHBheSA9IEdTVF9SVFBfSjJLX1BBWSAoYmFzZXBheWxvYWQpOwotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHBheSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcik7Ci0gIG9mZnNldCA9IHBvcyA9IGVuZCA9IDA7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBheSwKLSAgICAgICJnb3QgYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiwgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIG1hcC5zaXplLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICAvKiBkbyBzb21lIGhlYWRlciBkZWZhdWx0cyBmaXJzdCAqLwotICBzdGF0ZS5oZWFkZXIudHAgPSAwOyAgICAgICAgICAvKiBvbmx5IHByb2dyZXNzaXZlIHNjYW4gKi8KLSAgc3RhdGUuaGVhZGVyLk1IRiA9IDA7ICAgICAgICAgLyogbm8gaGVhZGVyICovCi0gIHN0YXRlLmhlYWRlci5taF9pZCA9IDA7ICAgICAgIC8qIGFsd2F5cyAwIGZvciBub3cgKi8KLSAgc3RhdGUuaGVhZGVyLlQgPSAxOyAgICAgICAgICAgLyogaW52YWxpZCB0aWxlLCBiZWNhdXNlIHdlIGFsd2F5cyBiZWdpbiB3aXRoIHRoZSBtYWluIGhlYWRlciAqLwotICBzdGF0ZS5oZWFkZXIucHJpb3JpdHkgPSAyNTU7ICAvKiBhbHdheXMgMjU1IGZvciBub3cgKi8KLSAgc3RhdGUuaGVhZGVyLnRpbGUgPSAweGZmZmY7ICAgLyogbm8gdGlsZSBudW1iZXIgKi8KLSAgc3RhdGUuaGVhZGVyLm9mZnNldCA9IDA7ICAgICAgLyogb2Zmc2V0IG9mIDAgKi8KLSAgc3RhdGUubXVsdGlfdGlsZSA9IEZBTFNFOwotICBzdGF0ZS5iaXRzdHJlYW0gPSBGQUxTRTsKLSAgc3RhdGUubmV4dF9zb3QgPSAwOwotICBzdGF0ZS5mb3JjZV9wYWNrZXQgPSBGQUxTRTsKLQotICAvKiBnZXQgbWF4IHBhY2tldCBsZW5ndGggKi8KLSAgbWF4X3NpemUgPQotICAgICAgZ3N0X3J0cF9idWZmZXJfY2FsY19wYXlsb2FkX2xlbiAobXR1IC0gR1NUX1JUUF9KMktfSEVBREVSX1NJWkUsIDAsIDApOwotCi0gIGxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkICgobXR1IC8gbWF4X3NpemUpICsgMSk7Ci0KLSAgZG8gewotICAgIEdzdEJ1ZmZlciAqb3V0YnVmOwotICAgIGd1aW50OCAqaGVhZGVyOwotICAgIGd1aW50IHBheWxvYWRfc2l6ZTsKLSAgICBndWludCBwdV9zaXplOwotICAgIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwgfTsKLQotICAgIC8qIHRyeSB0byBwYWNrIGFzIG11Y2ggYXMgd2UgY2FuICovCi0gICAgZG8gewotICAgICAgLyogc2VlIGhvdyBtdWNoIHdlIGhhdmUgc2Nhbm5lZCBhbHJlYWR5ICovCi0gICAgICBwdV9zaXplID0gZW5kIC0gb2Zmc2V0OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAic2Nhbm5lZCBwdSBzaXplICV1IiwgcHVfc2l6ZSk7Ci0KLSAgICAgIC8qIHdlIG5lZWQgdG8gbWFrZSBhIG5ldyBwYWNrZXQgKi8KLSAgICAgIGlmIChzdGF0ZS5mb3JjZV9wYWNrZXQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAibmVlZCB0byBmb3JjZSBhIG5ldyBwYWNrZXQiKTsKLSAgICAgICAgc3RhdGUuZm9yY2VfcGFja2V0ID0gRkFMU0U7Ci0gICAgICAgIHBvcyA9IGVuZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGVsc2Ugc2VlIGlmIHdlIGhhdmUgZW5vdWdoICovCi0gICAgICBpZiAocHVfc2l6ZSA+IG1heF9zaXplKSB7Ci0gICAgICAgIGlmIChwb3MgIT0gb2Zmc2V0KQotICAgICAgICAgIC8qIHRoZSBwYWNrZXQgYmVjYW1lIHRvbyBsYXJnZSwgdXNlIHByZXZpb3VzIHNjYW5wb3MgKi8KLSAgICAgICAgICBwdV9zaXplID0gcG9zIC0gb2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgLyogdGhlIGFscmVhZHkgc2Nhbm5lZCBkYXRhIHdhcyBhbHJlYWR5IHRvbyBiaWcsIG1ha2Ugc3VyZSB3ZSBzdGFydAotICAgICAgICAgICAqIHNjYW5uaW5nIGZyb20gdGhlIGxhc3Qgc2VhcmNoZWQgcG9zaXRpb24gKi8KLSAgICAgICAgICBwb3MgPSBlbmQ7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAibWF4IHNpemUgZXhjZWVkZWQgcHVfc2l6ZSAldSIsIHB1X3NpemUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgcG9zID0gZW5kOwotCi0gICAgICAvKiBleGl0IHdoZW4gZmluaXNoZWQgKi8KLSAgICAgIGlmIChwb3MgPT0gbWFwLnNpemUpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICAvKiBzY2FuIG5leHQgcGFja2V0aXphdGlvbiB1bml0IGFuZCBmaWxsIGluIHRoZSBoZWFkZXIgKi8KLSAgICAgIGVuZCA9IGZpbmRfcHVfZW5kIChwYXksIG1hcC5kYXRhLCBtYXAuc2l6ZSwgcG9zLCAmc3RhdGUpOwotICAgIH0gd2hpbGUgKFRSVUUpOwotCi0gICAgd2hpbGUgKHB1X3NpemUgPiAwKSB7Ci0gICAgICBndWludCBwYWNrZXRfc2l6ZSwgZGF0YV9zaXplOwotICAgICAgR3N0QnVmZmVyICpwYXlidWY7Ci0KLSAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcGFja2V0IHNpemUgKi8KLSAgICAgIHBhY2tldF9zaXplID0KLSAgICAgICAgICBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKHB1X3NpemUgKyBHU1RfUlRQX0oyS19IRUFERVJfU0laRSwgMCwKLSAgICAgICAgICAwKTsKLQotICAgICAgaWYgKHBhY2tldF9zaXplID4gbXR1KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBheSwgIm5lZWRlZCBwYWNrZXQgc2l6ZSAldSBjbGFtcGVkIHRvIE1UVSAldSIsCi0gICAgICAgICAgICBwYWNrZXRfc2l6ZSwgbXR1KTsKLSAgICAgICAgcGFja2V0X3NpemUgPSBtdHU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXksICJuZWVkZWQgcGFja2V0IHNpemUgJXUgZml0cyBpbiBNVFUgJXUiLAotICAgICAgICAgICAgcGFja2V0X3NpemUsIG10dSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGdldCB0b3RhbCBwYXlsb2FkIHNpemUgYW5kIGRhdGEgc2l6ZSAqLwotICAgICAgcGF5bG9hZF9zaXplID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYXlsb2FkX2xlbiAocGFja2V0X3NpemUsIDAsIDApOwotICAgICAgZGF0YV9zaXplID0gcGF5bG9hZF9zaXplIC0gR1NUX1JUUF9KMktfSEVBREVSX1NJWkU7Ci0KLSAgICAgIC8qIG1ha2UgYnVmZmVyIGZvciBoZWFkZXIgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoR1NUX1JUUF9KMktfSEVBREVSX1NJWkUsIDAsIDApOwotCi0gICAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHRpbWVzdGFtcDsKLQotICAgICAgZ3N0X3J0cF9idWZmZXJfbWFwIChvdXRidWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotCi0gICAgICAvKiBnZXQgcG9pbnRlciB0byBoZWFkZXIgKi8KLSAgICAgIGhlYWRlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLQotICAgICAgcHVfc2l6ZSAtPSBkYXRhX3NpemU7Ci0KLSAgICAgIC8qIHJlYWNoZWQgdGhlIGVuZCBvZiBhIHBhY2tldGl6YXRpb24gdW5pdCAqLwotICAgICAgaWYgKHB1X3NpemUgPT0gMCAmJiBlbmQgPj0gbWFwLnNpemUpIHsKLSAgICAgICAgZ3N0X3J0cF9idWZmZXJfc2V0X21hcmtlciAoJnJ0cCwgVFJVRSk7Ci0gICAgICB9Ci0gICAgICAvKiBJZiB3ZSB3ZXJlIHByb2Nlc3NpbmcgYSBoZWFkZXIsIHNlZSBpZiBhbGwgZml0cyBpbiBvbmUgUlRQIHBhY2tldAotICAgICAgICAgb3IgaWYgd2UgaGF2ZSB0byBmcmFnbWVudCBpdCAqLwotICAgICAgaWYgKHN0YXRlLmhlYWRlci5NSEYpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZS5oZWFkZXIuTUhGKSB7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgaWYgKHB1X3NpemUgPiAwKQotICAgICAgICAgICAgICBzdGF0ZS5oZWFkZXIuTUhGID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGlmIChwdV9zaXplID09IDApCi0gICAgICAgICAgICAgIHN0YXRlLmhlYWRlci5NSEYgPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qCi0gICAgICAgKiBSdHBKMktIZWFkZXI6Ci0gICAgICAgKiBAdHA6IHR5cGUgKDAgcHJvZ3Jlc3NpdmUsIDEgb2RkIGZpZWxkLCAyIGV2ZW4gZmllbGQpCi0gICAgICAgKiBATUhGOiBNYWluIEhlYWRlciBGbGFnCi0gICAgICAgKiBAbWhfaWQ6IE1haW4gSGVhZGVyIElkZW50aWZpY2F0aW9uCi0gICAgICAgKiBAVDogVGlsZSBmaWVsZCBpbnZhbGlkYXRpb24gZmxhZwotICAgICAgICogQHByaW9yaXR5OiBwcmlvcml0eQotICAgICAgICogQHRpbGUgbnVtYmVyOiB0aGUgdGlsZSBudW1iZXIgb2YgdGhlIHBheWxvYWQKLSAgICAgICAqIEByZXNlcnZlZDogc2V0IHRvIDAKLSAgICAgICAqIEBmcmFnbWVudCBvZmZzZXQ6IHRoZSBieXRlIG9mZnNldCBvZiB0aGUgY3VycmVudCBwYXlsb2FkCi0gICAgICAgKgotICAgICAgICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICAgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKiB8dHAgfE1IRnxtaF9pZHxUfCAgICAgcHJpb3JpdHkgIHwgICAgICAgICAgIHRpbGUgbnVtYmVyICAgICAgICAgfAotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHxyZXNlcnZlZCAgICAgICB8ICAgICAgICAgICAgIGZyYWdtZW50IG9mZnNldCAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICovCi0gICAgICBoZWFkZXJbMF0gPSAoc3RhdGUuaGVhZGVyLnRwIDw8IDYpIHwgKHN0YXRlLmhlYWRlci5NSEYgPDwgNCkgfAotICAgICAgICAgIChzdGF0ZS5oZWFkZXIubWhfaWQgPDwgMSkgfCBzdGF0ZS5oZWFkZXIuVDsKLSAgICAgIGhlYWRlclsxXSA9IHN0YXRlLmhlYWRlci5wcmlvcml0eTsKLSAgICAgIGhlYWRlclsyXSA9IHN0YXRlLmhlYWRlci50aWxlID4+IDg7Ci0gICAgICBoZWFkZXJbM10gPSBzdGF0ZS5oZWFkZXIudGlsZSAmIDB4ZmY7Ci0gICAgICBoZWFkZXJbNF0gPSAwOwotICAgICAgaGVhZGVyWzVdID0gc3RhdGUuaGVhZGVyLm9mZnNldCA+PiAxNjsKLSAgICAgIGhlYWRlcls2XSA9IChzdGF0ZS5oZWFkZXIub2Zmc2V0ID4+IDgpICYgMHhmZjsKLSAgICAgIGhlYWRlcls3XSA9IHN0YXRlLmhlYWRlci5vZmZzZXQgJiAweGZmOwotCi0gICAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICAgIC8qIG1ha2Ugc3ViYnVmZmVyIG9mIGoyayBkYXRhICovCi0gICAgICBwYXlidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsCi0gICAgICAgICAgb2Zmc2V0LCBkYXRhX3NpemUpOwotICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGJhc2VwYXlsb2FkKSwgb3V0YnVmLCBwYXlidWYsCi0gICAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChvdXRidWYsIHBheWJ1Zik7Ci0KLSAgICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIG91dGJ1Zik7Ci0KLSAgICAgIC8qIHJlc2V0IG11bHRpX3RpbGUgKi8KLSAgICAgIHN0YXRlLm11bHRpX3RpbGUgPSBGQUxTRTsKLQotCi0gICAgICAvKiBzZXQgTUhGIHRvIHplcm8gaWYgdGhlcmUgaXMgbm8gbW9yZSBtYWluIGhlYWRlciB0byBwcm9jZXNzICovCi0gICAgICBpZiAoc3RhdGUuaGVhZGVyLk1IRiAmIDIpCi0gICAgICAgIHN0YXRlLmhlYWRlci5NSEYgPSAwOwotCi0gICAgICAvKiB0aWxlIGlzIHZhbGlkLCBpZiB0aGVyZSBpcyBubyBtb3JlIGhlYWRlciB0byBwcm9jZXNzICovCi0gICAgICBpZiAoIXN0YXRlLmhlYWRlci5NSEYpCi0gICAgICAgIHN0YXRlLmhlYWRlci5UID0gMDsKLQotCi0gICAgICBvZmZzZXQgKz0gZGF0YV9zaXplOwotICAgICAgc3RhdGUuaGVhZGVyLm9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0gICAgb2Zmc2V0ID0gcG9zOwotICB9IHdoaWxlIChvZmZzZXQgPCBtYXAuc2l6ZSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAvKiBwdXNoIHRoZSB3aG9sZSBidWZmZXIgbGlzdCBhdCBvbmNlICovCi0gIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAoYmFzZXBheWxvYWQsIGxpc3QpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2oya19wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfajJrX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9qMmtfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwajJrcGF5IiwgR1NUX1JBTktfU0VDT05EQVJZLAotICAgICAgR1NUX1RZUEVfUlRQX0oyS19QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBqMmtwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwajJrcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZjUyOTUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBqMmtwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSjJLX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0oyS19QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9KMktfUEFZIFwKLSAgKGdzdF9ydHBfajJrX3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX0oyS19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfSjJLX1BBWSxHc3RSdHBKMktQYXkpKQotI2RlZmluZSBHU1RfUlRQX0oyS19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0oyS19QQVksR3N0UnRwSjJLUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX0oyS19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfSjJLX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfSjJLX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSjJLX1BBWSkpCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSjJLUGF5IEdzdFJ0cEoyS1BheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBKMktQYXlDbGFzcyBHc3RSdHBKMktQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBKMktQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICBnaW50IGhlaWdodDsKLSAgZ2ludCB3aWR0aDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwSjJLUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2oya19wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2oya19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUlRQX0oyS19QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBqcGVnZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlMmU4ZS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsODAwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RydHBqcGVnZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBqcGVnZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cGpwZWdkZXBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfanBlZ19kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImltYWdlL2pwZWciKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2pwZWdfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkpQRUdcIjsgIgotICAgICAgICAvKiBvcHRpb25hbCBTRFAgYXR0cmlidXRlcyAqLwotICAgICAgICAvKgotICAgICAgICAgKiAiYS1mcmFtZXJhdGUgPSAoc3RyaW5nKSAwLjAwLCAiCi0gICAgICAgICAqICJ4LWZyYW1lcmF0ZSA9IChzdHJpbmcpIDAuMDAsICIKLSAgICAgICAgICogIngtZGltZW5zaW9ucyA9IChzdHJpbmcpIFwiMTIzNCwxMjM0XCIsICIKLSAgICAgICAgICovCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9KUEVHX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAiCi0gICAgICAgIC8qIG9wdGlvbmFsIFNEUCBhdHRyaWJ1dGVzICovCi0gICAgICAgIC8qCi0gICAgICAgICAqICJhLWZyYW1lcmF0ZSA9IChzdHJpbmcpIDAuMDAsICIKLSAgICAgICAgICogIngtZnJhbWVyYXRlID0gKHN0cmluZykgMC4wMCwgIgotICAgICAgICAgKiAieC1kaW1lbnNpb25zID0gKHN0cmluZykgXCIxMjM0LDEyMzRcIiIKLSAgICAgICAgICovCi0gICAgKQotICAgICk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9qcGVnX2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEpQRUdEZXBheSwgZ3N0X3J0cF9qcGVnX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfanBlZ19kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX2pwZWdfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfanBlZ19kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfanBlZ19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2pwZWdfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwSlBFR0RlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9qcGVnX2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfanBlZ19kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2pwZWdfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgSlBFRyBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgSlBFRyB2aWRlbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjQzNSkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF9qcGVnX2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfanBlZ19kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2pwZWdfZGVwYXlfcHJvY2VzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwanBlZ2RlcGF5X2RlYnVnLCAicnRwanBlZ2RlcGF5IiwgMCwKLSAgICAgICJKUEVHIFZpZGVvIFJUUCBEZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qcGVnX2RlcGF5X2luaXQgKEdzdFJ0cEpQRUdEZXBheSAqIHJ0cGpwZWdkZXBheSkKLXsKLSAgcnRwanBlZ2RlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qcGVnX2RlcGF5X3Jlc2V0IChHc3RSdHBKUEVHRGVwYXkgKiBkZXBheSkKLXsKLSAgZ2ludCBpOwotCi0gIGRlcGF5LT53aWR0aCA9IDA7Ci0gIGRlcGF5LT5oZWlnaHQgPSAwOwotICBkZXBheS0+bWVkaWFfd2lkdGggPSAwOwotICBkZXBheS0+bWVkaWFfaGVpZ2h0ID0gMDsKLSAgZGVwYXktPmZyYXRlX251bSA9IDA7Ci0gIGRlcGF5LT5mcmF0ZV9kZW5vbSA9IDE7Ci0gIGRlcGF5LT5kaXNjb250ID0gVFJVRTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKLSAgICBnX2ZyZWUgKGRlcGF5LT5xdGFibGVzW2ldKTsKLSAgICBkZXBheS0+cXRhYmxlc1tpXSA9IE5VTEw7Ci0gIH0KLQotICBnc3RfYWRhcHRlcl9jbGVhciAoZGVwYXktPmFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qcGVnX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBKUEVHRGVwYXkgKnJ0cGpwZWdkZXBheTsKLQotICBydHBqcGVnZGVwYXkgPSBHU1RfUlRQX0pQRUdfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ3N0X3J0cF9qcGVnX2RlcGF5X3Jlc2V0IChydHBqcGVnZGVwYXkpOwotCi0gIGdfb2JqZWN0X3VucmVmIChydHBqcGVnZGVwYXktPmFkYXB0ZXIpOwotICBydHBqcGVnZGVwYXktPmFkYXB0ZXIgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGNvbnN0IGludCB6aWd6YWdbXSA9IHsKLSAgMCwgMSwgOCwgMTYsIDksIDIsIDMsIDEwLAotICAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCA0LCA1LAotICAxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsCi0gIDI3LCAyMCwgMTMsIDYsIDcsIDE0LCAyMSwgMjgsCi0gIDM1LCA0MiwgNDksIDU2LCA1NywgNTAsIDQzLCAzNiwKLSAgMjksIDIyLCAxNSwgMjMsIDMwLCAzNywgNDQsIDUxLAotICA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsCi0gIDUzLCA2MCwgNjEsIDU0LCA0NywgNTUsIDYyLCA2MwotfTsKLQotLyoKLSAqIFRhYmxlIEsuMSBmcm9tIEpQRUcgc3BlYy4KLSAqLwotc3RhdGljIGNvbnN0IGludCBqcGVnX2x1bWFfcXVhbnRpemVyWzY0XSA9IHsKLSAgMTYsIDExLCAxMCwgMTYsIDI0LCA0MCwgNTEsIDYxLAotICAxMiwgMTIsIDE0LCAxOSwgMjYsIDU4LCA2MCwgNTUsCi0gIDE0LCAxMywgMTYsIDI0LCA0MCwgNTcsIDY5LCA1NiwKLSAgMTQsIDE3LCAyMiwgMjksIDUxLCA4NywgODAsIDYyLAotICAxOCwgMjIsIDM3LCA1NiwgNjgsIDEwOSwgMTAzLCA3NywKLSAgMjQsIDM1LCA1NSwgNjQsIDgxLCAxMDQsIDExMywgOTIsCi0gIDQ5LCA2NCwgNzgsIDg3LCAxMDMsIDEyMSwgMTIwLCAxMDEsCi0gIDcyLCA5MiwgOTUsIDk4LCAxMTIsIDEwMCwgMTAzLCA5OQotfTsKLQotLyoKLSAqIFRhYmxlIEsuMiBmcm9tIEpQRUcgc3BlYy4KLSAqLwotc3RhdGljIGNvbnN0IGludCBqcGVnX2Nocm9tYV9xdWFudGl6ZXJbNjRdID0gewotICAxNywgMTgsIDI0LCA0NywgOTksIDk5LCA5OSwgOTksCi0gIDE4LCAyMSwgMjYsIDY2LCA5OSwgOTksIDk5LCA5OSwKLSAgMjQsIDI2LCA1NiwgOTksIDk5LCA5OSwgOTksIDk5LAotICA0NywgNjYsIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksCi0gIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwKLSAgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LAotICA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksCi0gIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OQotfTsKLQotLyogQ2FsbCBNYWtlVGFibGVzIHdpdGggdGhlIFEgZmFjdG9yIGFuZCBhIGd1aW50OFsxMjhdIHJldHVybiBhcnJheQotICovCi1zdGF0aWMgdm9pZAotTWFrZVRhYmxlcyAoR3N0UnRwSlBFR0RlcGF5ICogcnRwanBlZ2RlcGF5LCBnaW50IFEsIGd1aW50OCBxdGFibGVbMTI4XSkKLXsKLSAgZ2ludCBpOwotICBndWludCBmYWN0b3I7Ci0KLSAgZmFjdG9yID0gQ0xBTVAgKFEsIDEsIDk5KTsKLQotICBpZiAoUSA8IDUwKQotICAgIFEgPSA1MDAwIC8gZmFjdG9yOwotICBlbHNlCi0gICAgUSA9IDIwMCAtIGZhY3RvciAqIDI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLSAgICBnaW50IGxxID0gKGpwZWdfbHVtYV9xdWFudGl6ZXJbemlnemFnW2ldXSAqIFEgKyA1MCkgLyAxMDA7Ci0gICAgZ2ludCBjcSA9IChqcGVnX2Nocm9tYV9xdWFudGl6ZXJbemlnemFnW2ldXSAqIFEgKyA1MCkgLyAxMDA7Ci0KLSAgICAvKiBMaW1pdCB0aGUgcXVhbnRpemVycyB0byAxIDw9IHEgPD0gMjU1ICovCi0gICAgcXRhYmxlW2ldID0gQ0xBTVAgKGxxLCAxLCAyNTUpOwotICAgIHF0YWJsZVtpICsgNjRdID0gQ0xBTVAgKGNxLCAxLCAyNTUpOwotICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBndWludDggbHVtX2RjX2NvZGVsZW5zW10gPSB7Ci0gIDAsIDEsIDUsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludDggbHVtX2RjX3N5bWJvbHNbXSA9IHsKLSAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCi19OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGx1bV9hY19jb2RlbGVuc1tdID0gewotICAwLCAyLCAxLCAzLCAzLCAyLCA0LCAzLCA1LCA1LCA0LCA0LCAwLCAwLCAxLCAweDdkCi19OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGx1bV9hY19zeW1ib2xzW10gPSB7Ci0gIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MTEsIDB4MDUsIDB4MTIsCi0gIDB4MjEsIDB4MzEsIDB4NDEsIDB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsIDB4MDcsCi0gIDB4MjIsIDB4NzEsIDB4MTQsIDB4MzIsIDB4ODEsIDB4OTEsIDB4YTEsIDB4MDgsCi0gIDB4MjMsIDB4NDIsIDB4YjEsIDB4YzEsIDB4MTUsIDB4NTIsIDB4ZDEsIDB4ZjAsCi0gIDB4MjQsIDB4MzMsIDB4NjIsIDB4NzIsIDB4ODIsIDB4MDksIDB4MGEsIDB4MTYsCi0gIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCi0gIDB4MjksIDB4MmEsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksCi0gIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksCi0gIDB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksCi0gIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksCi0gIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksCi0gIDB4N2EsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksCi0gIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCi0gIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCi0gIDB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsCi0gIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsCi0gIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsCi0gIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTEsIDB4ZTIsCi0gIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsCi0gIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCi0gIDB4ZjksIDB4ZmEKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludDggY2htX2RjX2NvZGVsZW5zW10gPSB7Ci0gIDAsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludDggY2htX2RjX3N5bWJvbHNbXSA9IHsKLSAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExCi19OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGNobV9hY19jb2RlbGVuc1tdID0gewotICAwLCAyLCAxLCAyLCA0LCA0LCAzLCA0LCA3LCA1LCA0LCA0LCAwLCAxLCAyLCAweDc3Ci19OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGNobV9hY19zeW1ib2xzW10gPSB7Ci0gIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTEsIDB4MDQsIDB4MDUsIDB4MjEsCi0gIDB4MzEsIDB4MDYsIDB4MTIsIDB4NDEsIDB4NTEsIDB4MDcsIDB4NjEsIDB4NzEsCi0gIDB4MTMsIDB4MjIsIDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsCi0gIDB4YTEsIDB4YjEsIDB4YzEsIDB4MDksIDB4MjMsIDB4MzMsIDB4NTIsIDB4ZjAsCi0gIDB4MTUsIDB4NjIsIDB4NzIsIDB4ZDEsIDB4MGEsIDB4MTYsIDB4MjQsIDB4MzQsCi0gIDB4ZTEsIDB4MjUsIDB4ZjEsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjYsCi0gIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCi0gIDB4MzksIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsCi0gIDB4NDksIDB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCi0gIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCi0gIDB4NjksIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0gIDB4NzksIDB4N2EsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCi0gIDB4ODgsIDB4ODksIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCi0gIDB4OTcsIDB4OTgsIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsCi0gIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsCi0gIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsCi0gIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsCi0gIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsCi0gIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksCi0gIDB4ZWEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCi0gIDB4ZjksIDB4ZmEKLX07Ci0KLXN0YXRpYyBndWludDggKgotTWFrZVF1YW50SGVhZGVyIChndWludDggKiBwLCBndWludDggKiBxdCwgZ2ludCBzaXplLCBnaW50IHRhYmxlTm8pCi17Ci0gICpwKysgPSAweGZmOwotICAqcCsrID0gMHhkYjsgICAgICAgICAgICAgICAgICAvKiBEUVQgKi8KLSAgKnArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG1zYiAqLwotICAqcCsrID0gc2l6ZSArIDM7ICAgICAgICAgICAgICAvKiBsZW5ndGggbHNiICovCi0gICpwKysgPSB0YWJsZU5vOwotICBtZW1jcHkgKHAsIHF0LCBzaXplKTsKLQotICByZXR1cm4gKHAgKyBzaXplKTsKLX0KLQotc3RhdGljIGd1aW50OCAqCi1NYWtlSHVmZm1hbkhlYWRlciAoZ3VpbnQ4ICogcCwgY29uc3QgZ3VpbnQ4ICogY29kZWxlbnMsIGludCBuY29kZXMsCi0gICAgY29uc3QgZ3VpbnQ4ICogc3ltYm9scywgaW50IG5zeW1ib2xzLCBpbnQgdGFibGVObywgaW50IHRhYmxlQ2xhc3MpCi17Ci0gICpwKysgPSAweGZmOwotICAqcCsrID0gMHhjNDsgICAgICAgICAgICAgICAgICAvKiBESFQgKi8KLSAgKnArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG1zYiAqLwotICAqcCsrID0gMyArIG5jb2RlcyArIG5zeW1ib2xzOyAvKiBsZW5ndGggbHNiICovCi0gICpwKysgPSAodGFibGVDbGFzcyA8PCA0KSB8IHRhYmxlTm87Ci0gIG1lbWNweSAocCwgY29kZWxlbnMsIG5jb2Rlcyk7Ci0gIHAgKz0gbmNvZGVzOwotICBtZW1jcHkgKHAsIHN5bWJvbHMsIG5zeW1ib2xzKTsKLSAgcCArPSBuc3ltYm9sczsKLQotICByZXR1cm4gKHApOwotfQotCi1zdGF0aWMgZ3VpbnQ4ICoKLU1ha2VEUklIZWFkZXIgKGd1aW50OCAqIHAsIGd1aW50MTYgZHJpKQotewotICAqcCsrID0gMHhmZjsKLSAgKnArKyA9IDB4ZGQ7ICAgICAgICAgICAgICAgICAgLyogRFJJICovCi0gICpwKysgPSAweDA7ICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBtc2IgKi8KLSAgKnArKyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGxzYiAqLwotICAqcCsrID0gZHJpID4+IDg7ICAgICAgICAgICAgICAvKiBkcmkgbXNiICovCi0gICpwKysgPSBkcmkgJiAweGZmOyAgICAgICAgICAgIC8qIGRyaSBsc2IgKi8KLQotICByZXR1cm4gKHApOwotfQotCi0vKgotICogIEFyZ3VtZW50czoKLSAqICAgIHR5cGUsIHdpZHRoLCBoZWlnaHQ6IGFzIHN1cHBsaWVkIGluIFJUUC9KUEVHIGhlYWRlcgotICogICAgcXQ6IHF1YW50aXphdGlvbiB0YWJsZXMgYXMgZWl0aGVyIGRlcml2ZWQgZnJvbQotICogICAgICAgIHRoZSBRIGZpZWxkIHVzaW5nIE1ha2VUYWJsZXMoKSBvciBhcyBzcGVjaWZpZWQKLSAqICAgICAgICBpbiBzZWN0aW9uIDQuMi4KLSAqICAgIGRyaTogcmVzdGFydCBpbnRlcnZhbCBpbiBNQ1VzLCBvciAwIGlmIG5vIHJlc3RhcnRzLgotICoKLSAqICAgIHA6IHBvaW50ZXIgdG8gcmV0dXJuIGFyZWEKLSAqCi0gKiAgUmV0dXJuIHZhbHVlOgotICogICAgVGhlIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGhlYWRlcnMuCi0gKgotICogICAgR2VuZXJhdGUgYSBmcmFtZSBhbmQgc2NhbiBoZWFkZXJzIHRoYXQgY2FuIGJlIHByZXBlbmRlZCB0byB0aGUKLSAqICAgIFJUUC9KUEVHIGRhdGEgcGF5bG9hZCB0byBwcm9kdWNlIGEgSlBFRyBjb21wcmVzc2VkIGltYWdlIGluCi0gKiAgICBpbnRlcmNoYW5nZSBmb3JtYXQgKGV4Y2VwdCBmb3IgcG9zc2libGUgdHJhaWxpbmcgZ2FyYmFnZSBhbmQKLSAqICAgIGFic2VuY2Ugb2YgYW4gRU9JIG1hcmtlciB0byB0ZXJtaW5hdGUgdGhlIHNjYW4pLgotICovCi1zdGF0aWMgZ3VpbnQKLU1ha2VIZWFkZXJzIChndWludDggKiBwLCBpbnQgdHlwZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBndWludDggKiBxdCwKLSAgICBndWludCBwcmVjaXNpb24sIGd1aW50MTYgZHJpKQotewotICBndWludDggKnN0YXJ0ID0gcDsKLSAgZ2ludCBzaXplOwotCi0gICpwKysgPSAweGZmOwotICAqcCsrID0gMHhkODsgICAgICAgICAgICAgICAgICAvKiBTT0kgKi8KLQotICBzaXplID0gKChwcmVjaXNpb24gJiAxKSA/IDEyOCA6IDY0KTsKLSAgcCA9IE1ha2VRdWFudEhlYWRlciAocCwgcXQsIHNpemUsIDApOwotICBxdCArPSBzaXplOwotCi0gIHNpemUgPSAoKHByZWNpc2lvbiAmIDIpID8gMTI4IDogNjQpOwotICBwID0gTWFrZVF1YW50SGVhZGVyIChwLCBxdCwgc2l6ZSwgMSk7Ci0gIHF0ICs9IHNpemU7Ci0KLSAgaWYgKGRyaSAhPSAwKQotICAgIHAgPSBNYWtlRFJJSGVhZGVyIChwLCBkcmkpOwotCi0gICpwKysgPSAweGZmOwotICAqcCsrID0gMHhjMDsgICAgICAgICAgICAgICAgICAvKiBTT0YgKi8KLSAgKnArKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG1zYiAqLwotICAqcCsrID0gMTc7ICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggbHNiICovCi0gICpwKysgPSA4OyAgICAgICAgICAgICAgICAgICAgIC8qIDgtYml0IHByZWNpc2lvbiAqLwotICAqcCsrID0gaGVpZ2h0ID4+IDg7ICAgICAgICAgICAvKiBoZWlnaHQgbXNiICovCi0gICpwKysgPSBoZWlnaHQ7ICAgICAgICAgICAgICAgIC8qIGhlaWdodCBsc2IgKi8KLSAgKnArKyA9IHdpZHRoID4+IDg7ICAgICAgICAgICAgLyogd2lkdGggbXNiICovCi0gICpwKysgPSB3aWR0aDsgICAgICAgICAgICAgICAgIC8qIHdpZHRoIGxzYiAqLwotICAqcCsrID0gMzsgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29tcG9uZW50cyAqLwotICAqcCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBjb21wIDAgKi8KLSAgaWYgKCh0eXBlICYgMHgzZikgPT0gMCkKLSAgICAqcCsrID0gMHgyMTsgICAgICAgICAgICAgICAgLyogaHNhbXAgPSAyLCB2c2FtcCA9IDEgKi8KLSAgZWxzZQotICAgICpwKysgPSAweDIyOyAgICAgICAgICAgICAgICAvKiBoc2FtcCA9IDIsIHZzYW1wID0gMiAqLwotICAqcCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBxdWFudCB0YWJsZSAwICovCi0gICpwKysgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXAgMSAqLwotICAqcCsrID0gMHgxMTsgICAgICAgICAgICAgICAgICAvKiBoc2FtcCA9IDEsIHZzYW1wID0gMSAqLwotICAqcCsrID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBxdWFudCB0YWJsZSAxICovCi0gICpwKysgPSAyOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXAgMiAqLwotICAqcCsrID0gMHgxMTsgICAgICAgICAgICAgICAgICAvKiBoc2FtcCA9IDEsIHZzYW1wID0gMSAqLwotICAqcCsrID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBxdWFudCB0YWJsZSAxICovCi0KLSAgcCA9IE1ha2VIdWZmbWFuSGVhZGVyIChwLCBsdW1fZGNfY29kZWxlbnMsCi0gICAgICBzaXplb2YgKGx1bV9kY19jb2RlbGVucyksIGx1bV9kY19zeW1ib2xzLCBzaXplb2YgKGx1bV9kY19zeW1ib2xzKSwgMCwgMCk7Ci0gIHAgPSBNYWtlSHVmZm1hbkhlYWRlciAocCwgbHVtX2FjX2NvZGVsZW5zLAotICAgICAgc2l6ZW9mIChsdW1fYWNfY29kZWxlbnMpLCBsdW1fYWNfc3ltYm9scywgc2l6ZW9mIChsdW1fYWNfc3ltYm9scyksIDAsIDEpOwotICBwID0gTWFrZUh1ZmZtYW5IZWFkZXIgKHAsIGNobV9kY19jb2RlbGVucywKLSAgICAgIHNpemVvZiAoY2htX2RjX2NvZGVsZW5zKSwgY2htX2RjX3N5bWJvbHMsIHNpemVvZiAoY2htX2RjX3N5bWJvbHMpLCAxLCAwKTsKLSAgcCA9IE1ha2VIdWZmbWFuSGVhZGVyIChwLCBjaG1fYWNfY29kZWxlbnMsCi0gICAgICBzaXplb2YgKGNobV9hY19jb2RlbGVucyksIGNobV9hY19zeW1ib2xzLCBzaXplb2YgKGNobV9hY19zeW1ib2xzKSwgMSwgMSk7Ci0KLSAgKnArKyA9IDB4ZmY7Ci0gICpwKysgPSAweGRhOyAgICAgICAgICAgICAgICAgIC8qIFNPUyAqLwotICAqcCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggbXNiICovCi0gICpwKysgPSAxMjsgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBsc2IgKi8KLSAgKnArKyA9IDM7ICAgICAgICAgICAgICAgICAgICAgLyogMyBjb21wb25lbnRzICovCi0gICpwKysgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXAgMCAqLwotICAqcCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBodWZmbWFuIHRhYmxlIDAgKi8KLSAgKnArKyA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogY29tcCAxICovCi0gICpwKysgPSAweDExOyAgICAgICAgICAgICAgICAgIC8qIGh1ZmZtYW4gdGFibGUgMSAqLwotICAqcCsrID0gMjsgICAgICAgICAgICAgICAgICAgICAvKiBjb21wIDIgKi8KLSAgKnArKyA9IDB4MTE7ICAgICAgICAgICAgICAgICAgLyogaHVmZm1hbiB0YWJsZSAxICovCi0gICpwKysgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IERDVCBjb2VmZiAqLwotICAqcCsrID0gNjM7ICAgICAgICAgICAgICAgICAgICAvKiBsYXN0IERDVCBjb2VmZiAqLwotICAqcCsrID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBzdWNlc3NpdmUgYXBwcm94LiAqLwotCi0gIHJldHVybiAocCAtIHN0YXJ0KTsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qcGVnX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBKUEVHRGVwYXkgKnJ0cGpwZWdkZXBheTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgY29uc3QgZ2NoYXIgKm1lZGlhX2F0dHI7Ci0KLSAgcnRwanBlZ2RlcGF5ID0gR1NUX1JUUF9KUEVHX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBHU1RfREVCVUdfT0JKRUNUIChydHBqcGVnZGVwYXksICJDYXBzIHNldDogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGNsb2NrX3JhdGUgPSA5MDAwMDsKLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICAvKiByZXNldCBkZWZhdWx0cyAqLwotICBydHBqcGVnZGVwYXktPndpZHRoID0gMDsKLSAgcnRwanBlZ2RlcGF5LT5oZWlnaHQgPSAwOwotICBydHBqcGVnZGVwYXktPm1lZGlhX3dpZHRoID0gMDsKLSAgcnRwanBlZ2RlcGF5LT5tZWRpYV9oZWlnaHQgPSAwOwotICBydHBqcGVnZGVwYXktPmZyYXRlX251bSA9IDA7Ci0gIHJ0cGpwZWdkZXBheS0+ZnJhdGVfZGVub20gPSAxOwotCi0gIC8qIGNoZWNrIGZvciBvcHRpb25hbCBTRFAgYXR0cmlidXRlcyAqLwotICBpZiAoKG1lZGlhX2F0dHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgIngtZGltZW5zaW9ucyIpKSkgewotICAgIGdpbnQgdywgaDsKLQotICAgIGlmIChzc2NhbmYgKG1lZGlhX2F0dHIsICIlZCwlZCIsICZ3LCAmaCkgPT0gMikgewotICAgICAgcnRwanBlZ2RlcGF5LT5tZWRpYV93aWR0aCA9IHc7Ci0gICAgICBydHBqcGVnZGVwYXktPm1lZGlhX2hlaWdodCA9IGg7Ci0gICAgfQotICB9Ci0KLSAgLyogdHJ5IHRvIGdldCBhIGZyYW1lcmF0ZSAqLwotICBtZWRpYV9hdHRyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJhLWZyYW1lcmF0ZSIpOwotICBpZiAoIW1lZGlhX2F0dHIpCi0gICAgbWVkaWFfYXR0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAieC1mcmFtZXJhdGUiKTsKLQotICBpZiAobWVkaWFfYXR0cikgewotICAgIEdWYWx1ZSBzcmMgPSB7IDAgfTsKLSAgICBHVmFsdWUgZGVzdCA9IHsgMCB9OwotICAgIGdjaGFyICpzOwotCi0gICAgLyogY2Fub25pY2FsaXNlIGZsb2F0aW5nIHBvaW50IHN0cmluZyBzbyB3ZSBjYW4gaGFuZGxlIGZyYW1lcmF0ZSBzdHJpbmdzCi0gICAgICogaW4gdGhlIGZvcm0gIjI0LjkzMCIgb3IgIjI0LDkzMCIgaXJyZXNwZWN0aXZlIG9mIHRoZSBjdXJyZW50IGxvY2FsZSAqLwotICAgIHMgPSBnX3N0cmR1cCAobWVkaWFfYXR0cik7Ci0gICAgZ19zdHJkZWxpbWl0IChzLCAiLCIsICcuJyk7Ci0KLSAgICAvKiBjb252ZXJ0IHRoZSBmbG9hdCB0byBhIGZyYWN0aW9uICovCi0gICAgZ192YWx1ZV9pbml0ICgmc3JjLCBHX1RZUEVfRE9VQkxFKTsKLSAgICBnX3ZhbHVlX3NldF9kb3VibGUgKCZzcmMsIGdfYXNjaWlfc3RydG9kIChzLCBOVUxMKSk7Ci0gICAgZ192YWx1ZV9pbml0ICgmZGVzdCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICAgIGdfdmFsdWVfdHJhbnNmb3JtICgmc3JjLCAmZGVzdCk7Ci0KLSAgICBydHBqcGVnZGVwYXktPmZyYXRlX251bSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yICgmZGVzdCk7Ci0gICAgcnRwanBlZ2RlcGF5LT5mcmF0ZV9kZW5vbSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZkZXN0KTsKLQotICAgIGdfZnJlZSAocyk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX2pwZWdfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBKUEVHRGVwYXkgKnJ0cGpwZWdkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGdpbnQgcGF5bG9hZF9sZW4sIGhlYWRlcl9sZW47Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQgZnJhZ19vZmZzZXQ7Ci0gIGdpbnQgUTsKLSAgZ3VpbnQgdHlwZSwgd2lkdGgsIGhlaWdodDsKLSAgZ3VpbnQxNiBkcmksIHByZWNpc2lvbiwgbGVuZ3RoOwotICBndWludDggKnF0YWJsZTsKLQotICBydHBqcGVnZGVwYXkgPSBHU1RfUlRQX0pQRUdfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAocnRwLT5idWZmZXIpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAiRElTQ09OVCwgcmVzZXQgYWRhcHRlciIpOwotICAgIGdzdF9hZGFwdGVyX2NsZWFyIChydHBqcGVnZGVwYXktPmFkYXB0ZXIpOwotICAgIHJ0cGpwZWdkZXBheS0+ZGlzY29udCA9IFRSVUU7Ci0gIH0KLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBpZiAocGF5bG9hZF9sZW4gPCA4KQotICAgIGdvdG8gZW1wdHlfcGFja2V0OwotCi0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLSAgaGVhZGVyX2xlbiA9IDA7Ci0KLSAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8IFR5cGUtc3BlY2lmaWMgfCAgICAgICAgICAgICAgRnJhZ21lbnQgT2Zmc2V0ICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgVHlwZSAgICAgfCAgICAgICBRICAgICAgIHwgICAgIFdpZHRoICAgICB8ICAgICBIZWlnaHQgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgZnJhZ19vZmZzZXQgPSAocGF5bG9hZFsxXSA8PCAxNikgfCAocGF5bG9hZFsyXSA8PCA4KSB8IHBheWxvYWRbM107Ci0gIHR5cGUgPSBwYXlsb2FkWzRdOwotICBRID0gcGF5bG9hZFs1XTsKLSAgd2lkdGggPSBwYXlsb2FkWzZdICogODsKLSAgaGVpZ2h0ID0gcGF5bG9hZFs3XSAqIDg7Ci0KLSAgLyogc2F3IGEgcGFja2V0IHdpdGggZnJhZ21lbnQgb2Zmc2V0ID4gMCBhbmQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGRhdGEgcXVldWVkCi0gICAqIHVwIChtb3N0IGltcG9ydGFudGx5LCB3ZSBkb24ndCBoYXZlIGEgaGVhZGVyIGZvciB0aGlzIGRhdGEpIC0tIGRyb3AgaXQKLSAgICogWFhYOiBtYXliZSB3ZSBjYW4gY2hlY2sgaWYgdGhlIGpwZWcgaXMgcHJvZ3Jlc3NpdmUgYW5kIHNhbHZhZ2UgdGhlIGRhdGE/Ci0gICAqIFhYWDogbm90IGltcGxlbWVudGVkIHlldCBiZWNhdXNlIGpwZWdlbmMgY2FuJ3QgY3JlYXRlIHByb2dyZXNzaXZlIGpwZWdzICovCi0gIGlmIChmcmFnX29mZnNldCA+IDAgJiYgZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBqcGVnZGVwYXktPmFkYXB0ZXIpID09IDApCi0gICAgZ290byBub19oZWFkZXJfcGFja2V0OwotCi0gIC8qIGFsbG93IGZyYW1lIGRpbWVuc2lvbnMgPiAyMDQwLCBwYXNzZWQgaW4gU0RQIHNlc3Npb24gb3IgbWVkaWEgYXR0cmlidXRlcwotICAgKiBmcm9tIGdzdHJ0c3BzcmMuYyAoZ3N0X3J0c3BzcmNfc2RwX2F0dHJpYnV0ZXNfdG9fY2FwcyksIG9yIGluIGNhcHMgKi8KLSAgaWYgKCF3aWR0aCkKLSAgICB3aWR0aCA9IHJ0cGpwZWdkZXBheS0+bWVkaWFfd2lkdGg7Ci0KLSAgaWYgKCFoZWlnaHQpCi0gICAgaGVpZ2h0ID0gcnRwanBlZ2RlcGF5LT5tZWRpYV9oZWlnaHQ7Ci0KLSAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgZ290byBpbnZhbGlkX2RpbWVuc2lvbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBqcGVnZGVwYXksICJmcmFnICV1LCB0eXBlICV1LCBRICVkLCB3aWR0aCAldSwgaGVpZ2h0ICV1IiwKLSAgICAgIGZyYWdfb2Zmc2V0LCB0eXBlLCBRLCB3aWR0aCwgaGVpZ2h0KTsKLQotICBoZWFkZXJfbGVuICs9IDg7Ci0gIHBheWxvYWQgKz0gODsKLSAgcGF5bG9hZF9sZW4gLT0gODsKLQotICBkcmkgPSAwOwotICBpZiAodHlwZSA+IDYzKSB7Ci0gICAgaWYgKHBheWxvYWRfbGVuIDwgNCkKLSAgICAgIGdvdG8gZW1wdHlfcGFja2V0OwotCi0gICAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKiB8ICAgICAgIFJlc3RhcnQgSW50ZXJ2YWwgICAgICAgIHxGfEx8ICAgICAgIFJlc3RhcnQgQ291bnQgICAgICAgfAotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICovCi0gICAgZHJpID0gKHBheWxvYWRbMF0gPDwgOCkgfCBwYXlsb2FkWzFdOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwanBlZ2RlcGF5LCAiRFJJICUiIEdfR1VJTlQxNl9GT1JNQVQsIGRyaSk7Ci0KLSAgICBwYXlsb2FkICs9IDQ7Ci0gICAgaGVhZGVyX2xlbiArPSA0OwotICAgIHBheWxvYWRfbGVuIC09IDQ7Ci0gIH0KLQotICBpZiAoUSA+PSAxMjggJiYgZnJhZ19vZmZzZXQgPT0gMCkgewotICAgIGlmIChwYXlsb2FkX2xlbiA8IDQpCi0gICAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotICAgIC8qICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfCAgICAgIE1CWiAgICAgIHwgICBQcmVjaXNpb24gICB8ICAgICAgICAgICAgIExlbmd0aCAgICAgICAgICAgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqIHwgICAgICAgICAgICAgICAgICAgIFF1YW50aXphdGlvbiBUYWJsZSBEYXRhICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqLwotICAgIHByZWNpc2lvbiA9IHBheWxvYWRbMV07Ci0gICAgbGVuZ3RoID0gKHBheWxvYWRbMl0gPDwgOCkgfCBwYXlsb2FkWzNdOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwanBlZ2RlcGF5LCAicHJlY2lzaW9uICUwNHgsIGxlbmd0aCAlIiBHX0dVSU5UMTZfRk9STUFULAotICAgICAgICBwcmVjaXNpb24sIGxlbmd0aCk7Ci0KLSAgICBpZiAoUSA9PSAyNTUgJiYgbGVuZ3RoID09IDApCi0gICAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotICAgIHBheWxvYWQgKz0gNDsKLSAgICBoZWFkZXJfbGVuICs9IDQ7Ci0gICAgcGF5bG9hZF9sZW4gLT0gNDsKLQotICAgIGlmIChsZW5ndGggPiBwYXlsb2FkX2xlbikKLSAgICAgIGdvdG8gZW1wdHlfcGFja2V0OwotCi0gICAgaWYgKGxlbmd0aCA+IDApCi0gICAgICBxdGFibGUgPSBwYXlsb2FkOwotICAgIGVsc2UKLSAgICAgIHF0YWJsZSA9IHJ0cGpwZWdkZXBheS0+cXRhYmxlc1tRXTsKLQotICAgIHBheWxvYWQgKz0gbGVuZ3RoOwotICAgIGhlYWRlcl9sZW4gKz0gbGVuZ3RoOwotICAgIHBheWxvYWRfbGVuIC09IGxlbmd0aDsKLSAgfSBlbHNlIHsKLSAgICBsZW5ndGggPSAwOwotICAgIHF0YWJsZSA9IE5VTEw7Ci0gICAgcHJlY2lzaW9uID0gMDsKLSAgfQotCi0gIGlmIChmcmFnX29mZnNldCA9PSAwKSB7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ3VpbnQgc2l6ZTsKLQotICAgIGlmIChydHBqcGVnZGVwYXktPndpZHRoICE9IHdpZHRoIHx8IHJ0cGpwZWdkZXBheS0+aGVpZ2h0ICE9IGhlaWdodCkgewotICAgICAgR3N0Q2FwcyAqb3V0Y2FwczsKLQotICAgICAgb3V0Y2FwcyA9Ci0gICAgICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImltYWdlL2pwZWciLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICAgICAgcnRwanBlZ2RlcGF5LT5mcmF0ZV9udW0sIHJ0cGpwZWdkZXBheS0+ZnJhdGVfZGVub20sICJ3aWR0aCIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgd2lkdGgsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQsIE5VTEwpOwotICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAoZGVwYXlsb2FkLT5zcmNwYWQsIG91dGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOwotCi0gICAgICBydHBqcGVnZGVwYXktPndpZHRoID0gd2lkdGg7Ci0gICAgICBydHBqcGVnZGVwYXktPmhlaWdodCA9IGhlaWdodDsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocnRwanBlZ2RlcGF5LCAiZmlyc3QgcGFja2V0LCBsZW5ndGggJSIgR19HVUlOVDE2X0ZPUk1BVCwKLSAgICAgICAgbGVuZ3RoKTsKLQotICAgIC8qIGZpcnN0IHBhY2tldCAqLwotICAgIGlmIChsZW5ndGggPT0gMCkgewotICAgICAgaWYgKFEgPCAxMjgpIHsKLSAgICAgICAgLyogbm8gcXVhbnQgdGFibGUsIHNlZSBpZiB3ZSBoYXZlIG9uZSBjYWNoZWQgKi8KLSAgICAgICAgcXRhYmxlID0gcnRwanBlZ2RlcGF5LT5xdGFibGVzW1FdOwotICAgICAgICBpZiAoIXF0YWJsZSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGpwZWdkZXBheSwgIm1ha2luZyBRICVkIHRhYmxlIiwgUSk7Ci0gICAgICAgICAgLyogbWFrZSBhbmQgY2FjaGUgdGhlIHRhYmxlICovCi0gICAgICAgICAgcXRhYmxlID0gZ19uZXcgKGd1aW50OCwgMTI4KTsKLSAgICAgICAgICBNYWtlVGFibGVzIChydHBqcGVnZGVwYXksIFEsIHF0YWJsZSk7Ci0gICAgICAgICAgcnRwanBlZ2RlcGF5LT5xdGFibGVzW1FdID0gcXRhYmxlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGpwZWdkZXBheSwgInVzaW5nIGNhY2hlZCB0YWJsZSBmb3IgUSAlZCIsIFEpOwotICAgICAgICB9Ci0gICAgICAgIC8qIGFsbCA4IGJpdCBxdWFudGl6ZXJzICovCi0gICAgICAgIHByZWNpc2lvbiA9IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXF0YWJsZSkKLSAgICAgICAgICBnb3RvIG5vX3F0YWJsZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJIHRoaW5rIHdlIGNhbiBnZXQgaGVyZSB3aXRoIGEgTlVMTCBxdGFibGUsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndAotICAgICAgIGdvIGRlcmVmZXJlbmNpbmcgaXQgaW4gTWFrZUhlYWRlcnMgaWYgd2UgZG8gKi8KLSAgICBpZiAoIXF0YWJsZSkKLSAgICAgIGdvdG8gbm9fcXRhYmxlOwotCi0gICAgLyogbWF4IGhlYWRlciBsZW5ndGgsIHNob3VsZCBiZSBiaWcgZW5vdWdoICovCi0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDAwKTsKLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBzaXplID0gTWFrZUhlYWRlcnMgKG1hcC5kYXRhLCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBxdGFibGUsIHByZWNpc2lvbiwgZHJpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotICAgIGdzdF9idWZmZXJfcmVzaXplIChvdXRidWYsIDAsIHNpemUpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwanBlZ2RlcGF5LCAicHVzaGluZyAldSBieXRlcyBvZiBoZWFkZXIiLCBzaXplKTsKLQotICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cGpwZWdkZXBheS0+YWRhcHRlciwgb3V0YnVmKTsKLSAgfQotCi0gIC8qIHRha2UgSlBFRyBkYXRhLCBwdXNoIGluIHRoZSBhZGFwdGVyICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGpwZWdkZXBheSwgInB1c2hpbmcgZGF0YSBhdCBvZmZzZXQgJWQiLCBoZWFkZXJfbGVuKTsKLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIGhlYWRlcl9sZW4sIC0xKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwanBlZ2RlcGF5LT5hZGFwdGVyLCBvdXRidWYpOwotICBvdXRidWYgPSBOVUxMOwotCi0gIGlmIChnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApKSB7Ci0gICAgZ3VpbnQgYXZhaWw7Ci0gICAgZ3VpbnQ4IGVuZFsyXTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgIC8qIGxhc3QgYnVmZmVyIHRha2UgYWxsIGRhdGEgb3V0IG9mIHRoZSBhZGFwdGVyICovCi0gICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cGpwZWdkZXBheS0+YWRhcHRlcik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwanBlZ2RlcGF5LCAibWFya2VyIHNldCwgbGFzdCBidWZmZXIiKTsKLQotICAgIGlmIChhdmFpbCA8IDIpCi0gICAgICBnb3RvIGludmFsaWRfcGFja2V0OwotCi0gICAgLyogdGFrZSB0aGUgbGFzdCBieXRlcyBvZiB0aGUganBlZyBkYXRhIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBFT0kKLSAgICAgKiBtYXJrZXIgKi8KLSAgICBnc3RfYWRhcHRlcl9jb3B5IChydHBqcGVnZGVwYXktPmFkYXB0ZXIsIGVuZCwgYXZhaWwgLSAyLCAyKTsKLQotICAgIGlmIChlbmRbMF0gIT0gMHhmZiAmJiBlbmRbMV0gIT0gMHhkOSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwanBlZ2RlcGF5LCAibm8gRU9JIG1hcmtlciwgYWRkaW5nIG9uZSIpOwotCi0gICAgICAvKiBubyBFT0kgbWFya2VyLCBhZGQgb25lICovCi0gICAgICBvdXRidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIpOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgICBtYXAuZGF0YVswXSA9IDB4ZmY7Ci0gICAgICBtYXAuZGF0YVsxXSA9IDB4ZDk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBqcGVnZGVwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci0gICAgICBhdmFpbCArPSAyOwotICAgIH0KLSAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocnRwanBlZ2RlcGF5LT5hZGFwdGVyLCBhdmFpbCk7Ci0KLSAgICBpZiAocnRwanBlZ2RlcGF5LT5kaXNjb250KSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICAgIHJ0cGpwZWdkZXBheS0+ZGlzY29udCA9IEZBTFNFOwotICAgIH0KLQotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBqcGVnZGVwYXkpLCBvdXRidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBqcGVnZGVwYXksICJyZXR1cm5pbmcgJXUgYnl0ZXMiLCBhdmFpbCk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotZW1wdHlfcGFja2V0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwanBlZ2RlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJFbXB0eSBQYXlsb2FkLiIpLCAoTlVMTCkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1pbnZhbGlkX2RpbWVuc2lvbjoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cGpwZWdkZXBheSwgU1RSRUFNLCBGT1JNQVQsCi0gICAgICAgICgiSW52YWxpZCBEaW1lbnNpb24gJWR4JWQuIiwgd2lkdGgsIGhlaWdodCksIChOVUxMKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX3F0YWJsZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwanBlZ2RlcGF5LCAibm8gcXRhYmxlIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWludmFsaWRfcGFja2V0OgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHBqcGVnZGVwYXksICJpbnZhbGlkIHBhY2tldCIpOwotICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChydHBqcGVnZGVwYXktPmFkYXB0ZXIsCi0gICAgICAgIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwanBlZ2RlcGF5LT5hZGFwdGVyKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX2hlYWRlcl9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cGpwZWdkZXBheSwKLSAgICAgICAgImRpc2NhcmRpbmcgZGF0YSBwYWNrZXRzIHJlY2VpdmVkIHdoZW4gd2UgaGF2ZSBubyBoZWFkZXIiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9qcGVnX2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwSlBFR0RlcGF5ICpydHBqcGVnZGVwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBydHBqcGVnZGVwYXkgPSBHU1RfUlRQX0pQRUdfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfcnRwX2pwZWdfZGVwYXlfcmVzZXQgKHJ0cGpwZWdkZXBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfanBlZ19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGpwZWdkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9KUEVHX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGpwZWdkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjc0ZjEyLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwanBlZ2RlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfSlBFR19ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX0pQRUdfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0pQRUdfREVQQVkgXAotICAoZ3N0X3J0cF9qcGVnX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSlBFR19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9KUEVHX0RFUEFZLEdzdFJ0cEpQRUdEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfSlBFR19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSlBFR19ERVBBWSxHc3RSdHBKUEVHRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSlBFR19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9KUEVHX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9KUEVHX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9KUEVHX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEpQRUdEZXBheSBHc3RSdHBKUEVHRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSlBFR0RlcGF5Q2xhc3MgR3N0UnRwSlBFR0RlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwSlBFR0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGdib29sZWFuICAgIGRpc2NvbnQ7Ci0KLSAgLyogY2FjaGVkIHF1YW50IHRhYmxlcyAqLwotICBndWludDggKiBxdGFibGVzWzI1NV07Ci0gIGdpbnQgZnJhdGVfbnVtOwotICBnaW50IGZyYXRlX2Rlbm9tOwotICBnaW50IG1lZGlhX3dpZHRoOwotICBnaW50IG1lZGlhX2hlaWdodDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotfTsKLQotc3RydWN0IF9Hc3RSdHBKUEVHRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9qcGVnX2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9qcGVnX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0pQRUdfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGpwZWdwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwanBlZ3BheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQwY2I2Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwanBlZ3BheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBeGlzIENvbW11bmljYXRpb25zIDxkZXYtZ3N0cmVhbWVyQGF4aXMuY29tPgotICogQGF1dGhvciBCam9ybiBPc3RieSA8Ympvcm4ub3N0YnlAYXhpcy5jb20+Ci0gKiBAYXV0aG9yIFBldGVyIEtqZWxsZXJzdGVkdCA8cGV0ZXIua2plbGxlcnN0ZWR0QGF4aXMuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGpwZWdwYXkKLSAqCi0gKiBQYXlsb2FkIGVuY29kZSBKUEVHIHBpY3R1cmVzIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyAyNDM1LgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMjQzNS50eHQKLSAqCi0gKiBUaGUgcGF5bG9hZGVyIHRha2VzIGEgSlBFRyBwaWN0dXJlLCBzY2FucyB0aGUgaGVhZGVyIGZvciBxdWFudGl6YXRpb24KLSAqIHRhYmxlcyAoaWYgbmVlZGVkKSBhbmQgY29uc3RydWN0cyB0aGUgUlRQIHBhY2tldCBoZWFkZXIgZm9sbG93ZWQgYnkKLSAqIHRoZSBhY3R1YWwgSlBFRyBlbnRyb3B5IHNjYW4uCi0gKgotICogVGhlIHBheWxvYWRlciBhc3N1bWVzIHRoYXQgY29ycmVjdCB3aWR0aCBhbmQgaGVpZ2h0IGlzIGZvdW5kIGluIHRoZSBjYXBzLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cGpwZWdwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9qcGVnX3BheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJpbWFnZS9qcGVnOyAiICJ2aWRlby94LWpwZWciKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2pwZWdfcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICIgIG1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICIgIHBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9KUEVHX1NUUklORyAiLCAiCi0gICAgICAgICIgIGNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgICAiCi0gICAgICAgICIgIGVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIkpQRUdcIiwgIgotICAgICAgICAiICB3aWR0aCA9IChpbnQpIFsgMSwgNjU1MzYgXSwgIiAiICBoZWlnaHQgPSAoaW50KSBbIDEsIDY1NTM2IF07ICIKLSAgICAgICAgIiBhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAiICBtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAiICBwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiICBjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICAgIgotICAgICAgICAiICBlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJKUEVHXCIsICIKLSAgICAgICAgIiAgd2lkdGggPSAoaW50KSBbIDEsIDY1NTM2IF0sICIgIiAgaGVpZ2h0ID0gKGludCkgWyAxLCA2NTUzNiBdIikKLSAgICApOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBqcGVncGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBqcGVncGF5X2RlYnVnKQotCi0vKgotICogUVVBTlRfUFJFRklYX0xFTjoKLSAqCi0gKiBQcmVmaXggbGVuZ3RoIGluIHRoZSBoZWFkZXIgYmVmb3JlIHRoZSBxdWFudGl6YXRpb24gdGFibGVzOgotICogVHdvIHNpemUgYnl0ZXMgYW5kIG9uZSBieXRlIGZvciBwcmVjaXNpb24KLSAqLwotI2RlZmluZSBRVUFOVF9QUkVGSVhfTEVOICAgICAzCi0KLQotdHlwZWRlZiBlbnVtIF9SdHBKcGVnTWFya2VyIFJ0cEpwZWdNYXJrZXI7Ci0KLS8qCi0gKiBSdHBKcGVnTWFya2VyOgotICogQEpQRUdfTUFSS0VSOiBQcmVmaXggZm9yIEpQRUcgbWFya2VyCi0gKiBASlBFR19NQVJLRVJfU09JOiBTdGFydCBvZiBJbWFnZSBtYXJrZXIKLSAqIEBKUEVHX01BUktFUl9KRklGOiBKRklGIG1hcmtlcgotICogQEpQRUdfTUFSS0VSX0NNVDogQ29tbWVudCBtYXJrZXIKLSAqIEBKUEVHX01BUktFUl9EUVQ6IERlZmluZSBRdWFudGl6YXRpb24gVGFibGUgbWFya2VyCi0gKiBASlBFR19NQVJLRVJfU09GOiBTdGFydCBvZiBGcmFtZSBtYXJrZXIKLSAqIEBKUEVHX01BUktFUl9ESFQ6IERlZmluZSBIdWZmbWFuIFRhYmxlIG1hcmtlcgotICogQEpQRUdfTUFSS0VSX1NPUzogU3RhcnQgb2YgU2NhbiBtYXJrZXIKLSAqIEBKUEVHX01BUktFUl9FT0k6IEVuZCBvZiBJbWFnZSBtYXJrZXIKLSAqIEBKUEVHX01BUktFUl9EUkk6IERlZmluZSBSZXN0YXJ0IEludGVydmFsIG1hcmtlcgotICogQEpQRUdfTUFSS0VSX0gyNjQ6IEgyNjQgbWFya2VyCi0gKgotICogSWRlbnRpZmVycyBmb3IgbWFya2VycyBpbiBKUEVHIGhlYWRlcgotICovCi1lbnVtIF9SdHBKcGVnTWFya2VyCi17Ci0gIEpQRUdfTUFSS0VSID0gMHhGRiwKLSAgSlBFR19NQVJLRVJfU09JID0gMHhEOCwKLSAgSlBFR19NQVJLRVJfSkZJRiA9IDB4RTAsCi0gIEpQRUdfTUFSS0VSX0NNVCA9IDB4RkUsCi0gIEpQRUdfTUFSS0VSX0RRVCA9IDB4REIsCi0gIEpQRUdfTUFSS0VSX1NPRiA9IDB4QzAsCi0gIEpQRUdfTUFSS0VSX0RIVCA9IDB4QzQsCi0gIEpQRUdfTUFSS0VSX0pQRyA9IDB4QzgsCi0gIEpQRUdfTUFSS0VSX1NPUyA9IDB4REEsCi0gIEpQRUdfTUFSS0VSX0VPSSA9IDB4RDksCi0gIEpQRUdfTUFSS0VSX0RSSSA9IDB4REQsCi0gIEpQRUdfTUFSS0VSX0FQUDAgPSAweEUwLAotICBKUEVHX01BUktFUl9IMjY0ID0gMHhFNCwgICAgICAvKiBBUFA0ICovCi0gIEpQRUdfTUFSS0VSX0FQUDE1ID0gMHhFRiwKLSAgSlBFR19NQVJLRVJfSlBHMCA9IDB4RjAsCi0gIEpQRUdfTUFSS0VSX0pQRzEzID0gMHhGRAotfTsKLQotI2RlZmluZSBERUZBVUxUX0pQRUdfUVVBTlQgICAgMjU1Ci0KLSNkZWZpbmUgREVGQVVMVF9KUEVHX1FVQUxJVFkgIDI1NQotI2RlZmluZSBERUZBVUxUX0pQRUdfVFlQRSAgICAgMQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9KUEVHX1FVQUxJVFksCi0gIFBST1BfSlBFR19UWVBFCi19OwotCi1lbnVtCi17Ci0gIFFfVEFCTEVfMCA9IDAsCi0gIFFfVEFCTEVfMSwKLSAgUV9UQUJMRV9NQVggICAgICAgICAgICAgICAgICAgLyogb25seSBzdXBwb3J0IGZvciB0d28gdGFibGVzIGF0IHRoZSBtb21lbnQgKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9SdHBKcGVnSGVhZGVyIFJ0cEpwZWdIZWFkZXI7Ci0KLS8qCi0gKiBSdHBKcGVnSGVhZGVyOgotICogQHR5cGVfc3BlYzogdHlwZSBzcGVjaWZpYwotICogQG9mZnNldDogZnJhZ21lbnQgb2Zmc2V0Ci0gKiBAdHlwZTogdHlwZSBmaWVsZAotICogQHE6IHF1YW50aXphdGlvbiB0YWJsZSBmb3IgdGhpcyBmcmFtZQotICogQHdpZHRoOiB3aWR0aCBvZiBpbWFnZSBpbiA4LXBpeGVsIG11bHRpcGxlcwotICogQGhlaWdodDogaGVpZ2h0IG9mIGltYWdlIGluIDgtcGl4ZWwgbXVsdGlwbGVzCi0gKgotICogMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICogMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCBUeXBlLXNwZWNpZmljIHwgICAgICAgICAgICAgIEZyYWdtZW50IE9mZnNldCAgICAgICAgICAgICAgICAgIHwKLSAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8ICAgICAgVHlwZSAgICAgfCAgICAgICBRICAgICAgIHwgICAgIFdpZHRoICAgICB8ICAgICBIZWlnaHQgICAgfAotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqLwotc3RydWN0IF9SdHBKcGVnSGVhZGVyCi17Ci0gIGd1aW50IHR5cGVfc3BlYzo4OwotICBndWludCBvZmZzZXQ6MjQ7Ci0gIGd1aW50OCB0eXBlOwotICBndWludDggcTsKLSAgZ3VpbnQ4IHdpZHRoOwotICBndWludDggaGVpZ2h0OwotfTsKLQotLyoKLSAqIFJ0cFF1YW50SGVhZGVyCi0gKiBAbWJ6OiBtdXN0IGJlIHplcm8KLSAqIEBwcmVjaXNpb246IHNwZWNpZnkgc2l6ZSBvZiBxdWFudGl6YXRpb24gdGFibGVzCi0gKiBAbGVuZ3RoOiBsZW5ndGggb2YgcXVhbnRpemF0aW9uIGRhdGEKLSAqCi0gKiAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gKiAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8ICAgICAgTUJaICAgICAgfCAgIFByZWNpc2lvbiAgIHwgICAgICAgICAgICAgTGVuZ3RoICAgICAgICAgICAgfAotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHwgICAgICAgICAgICAgICAgICAgIFF1YW50aXphdGlvbiBUYWJsZSBEYXRhICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQ4IG1iejsKLSAgZ3VpbnQ4IHByZWNpc2lvbjsKLSAgZ3VpbnQxNiBsZW5ndGg7Ci19IFJ0cFF1YW50SGVhZGVyOwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDggc2l6ZTsKLSAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotfSBSdHBRdWFudFRhYmxlOwotCi0vKgotICogUnRwUmVzdGFydE1hcmtlckhlYWRlcjoKLSAqIEByZXN0YXJ0SW50ZXJ2YWw6IG51bWJlciBvZiBNQ1VzIHRoYXQgYXBwZWFyIGJldHdlZW4gcmVzdGFydCBtYXJrZXJzCi0gKiBAcmVzdGFydEZpcnN0TGFzdENvdW50OiBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmaXJzdCBwYWNrZXQgbWFyayBpbiB0aGUgY2h1bmsKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcGFja2V0IG1hcmsgaW4gdGhlIGNodW5rIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCByZXN0YXJ0IGludGVydmFsIGluIHRoZSBjdXJyZW50ICJjaHVuayIKLSAqCi0gKiAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gKiAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiAgfCAgICAgICBSZXN0YXJ0IEludGVydmFsICAgICAgICB8RnxMfCAgICAgICBSZXN0YXJ0IENvdW50ICAgICAgIHwKLSAqICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICoKLSAqICBUaGUgcmVzdGFydCBtYXJrZXIgaGVhZGVyIGlzIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nCi0gKiAgbWV0aG9kb2xvZ3kgc3BlY2lmaWVkIGluIHNlY3Rpb24gMy4xLjcgb2YgcmZjMjQzNS50eHQuCi0gKgotICogICJJZiB0aGUgcmVzdGFydCBpbnRlcnZhbHMgaW4gYSBmcmFtZSBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZAotICogIHdpdGggcGFja2V0IGJvdW5kYXJpZXMsIHRoZSBGIChmaXJzdCkgYW5kIEwgKGxhc3QpIGJpdHMgTVVTVCBiZSBzZXQKLSAqICB0byAxIGFuZCB0aGUgUmVzdGFydCBDb3VudCBNVVNUIGJlIHNldCB0byAweDNGRkYuICBUaGlzIGluZGljYXRlcwotICogIHRoYXQgYSByZWNlaXZlciBNVVNUIHJlYXNzZW1ibGUgdGhlIGVudGlyZSBmcmFtZSBiZWZvcmUgZGVjb2RpbmcgaXQuIgotICoKLSAqLwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDE2IHJlc3RhcnRfaW50ZXJ2YWw7Ci0gIGd1aW50MTYgcmVzdGFydF9jb3VudDsKLX0gUnRwUmVzdGFydE1hcmtlckhlYWRlcjsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQ4IGlkOwotICBndWludDggc2FtcDsKLSAgZ3VpbnQ4IHF0OwotfSBDb21wSW5mbzsKLQotLyogRklYTUU6IHJlc3RhcnQgbWFya2VyIGhlYWRlciBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9qcGVnX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfanBlZ19wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9qcGVnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9qcGVnX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfanBlZ19wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSlBFR1BheSwgZ3N0X3J0cF9qcGVnX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2pwZWdfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEpQRUdQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfanBlZ19wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2pwZWdfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2pwZWdfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfanBlZ19wYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJUUCBKUEVHIHBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgSlBFRyBwaWN0dXJlcyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgMjQzNSkiLAotICAgICAgIkF4aXMgQ29tbXVuaWNhdGlvbnMgPGRldi1nc3RyZWFtZXJAYXhpcy5jb20+Iik7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9qcGVnX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfanBlZ19wYXlfaGFuZGxlX2J1ZmZlcjsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0pQRUdfUVVBTElUWSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJxdWFsaXR5IiwgIlF1YWxpdHkiLAotICAgICAgICAgICJRdWFsaXR5IGZhY3RvciBvbiBKUEVHIGRhdGEgKHVudXNlZCkiLCAwLCAyNTUsIDI1NSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0pQRUdfVFlQRSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ0eXBlIiwgIlR5cGUiLAotICAgICAgICAgICJEZWZhdWx0IEpQRUcgVHlwZSwgb3ZlcndyaXR0ZW4gYnkgU09GIHdoZW4gcHJlc2VudCIsIDAsIDI1NSwKLSAgICAgICAgICBERUZBVUxUX0pQRUdfVFlQRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cGpwZWdwYXlfZGVidWcsICJydHBqcGVncGF5IiwgMCwKLSAgICAgICJNb3Rpb24gSlBFRyBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2pwZWdfcGF5X2luaXQgKEdzdFJ0cEpQRUdQYXkgKiBwYXkpCi17Ci0gIHBheS0+cXVhbGl0eSA9IERFRkFVTFRfSlBFR19RVUFMSVRZOwotICBwYXktPnF1YW50ID0gREVGQVVMVF9KUEVHX1FVQU5UOwotICBwYXktPnR5cGUgPSBERUZBVUxUX0pQRUdfVFlQRTsKLSAgcGF5LT53aWR0aCA9IC0xOwotICBwYXktPmhlaWdodCA9IC0xOwotCi0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEX1BUIChwYXkpID0gR1NUX1JUUF9QQVlMT0FEX0pQRUc7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qcGVnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpjYXBzX3N0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBHc3RSdHBKUEVHUGF5ICpwYXk7Ci0gIGdib29sZWFuIHJlczsKLSAgZ2ludCB3aWR0aCA9IC0xLCBoZWlnaHQgPSAtMTsKLSAgZ2ludCBudW0gPSAwLCBkZW5vbTsKLSAgZ2NoYXIgKnJhdGUgPSBOVUxMOwotICBnY2hhciAqZGltID0gTlVMTDsKLQotICBwYXkgPSBHU1RfUlRQX0pQRUdfUEFZIChiYXNlcGF5bG9hZCk7Ci0KLSAgLyogdGhlc2UgcHJvcGVydGllcyBhcmUgbWFuZGF0b3J5LCBidXQgdGhleSBtaWdodCBiZSBhZGp1c3RlZCBieSB0aGUgU09GLCBpZiB0aGVyZQotICAgKiBpcyBvbmUuICovCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChjYXBzX3N0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpIHx8IGhlaWdodCA8PSAwKSB7Ci0gICAgZ290byBpbnZhbGlkX2RpbWVuc2lvbjsKLSAgfQotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChjYXBzX3N0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKSB8fCB3aWR0aCA8PSAwKSB7Ci0gICAgZ290byBpbnZhbGlkX2RpbWVuc2lvbjsKLSAgfQotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoY2Fwc19zdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAmbnVtLCAmZGVub20pICYmCi0gICAgICAobnVtIDwgMCB8fCBkZW5vbSA8PSAwKSkgewotICAgIGdvdG8gaW52YWxpZF9mcmFtZXJhdGU7Ci0gIH0KLQotICBpZiAoaGVpZ2h0ID4gMjA0MCB8fCB3aWR0aCA+IDIwNDApIHsKLSAgICBwYXktPmhlaWdodCA9IDA7Ci0gICAgcGF5LT53aWR0aCA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgcGF5LT5oZWlnaHQgPSBHU1RfUk9VTkRfVVBfOCAoaGVpZ2h0KSAvIDg7Ci0gICAgcGF5LT53aWR0aCA9IEdTVF9ST1VORF9VUF84ICh3aWR0aCkgLyA4OwotICB9Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKGJhc2VwYXlsb2FkLCAidmlkZW8iLAotICAgICAgYmFzZXBheWxvYWQtPnB0ICE9IEdTVF9SVFBfUEFZTE9BRF9KUEVHLCAiSlBFRyIsIDkwMDAwKTsKLQotICBpZiAobnVtID4gMCkgewotICAgIGdkb3VibGUgZnJhbWVyYXRlOwotICAgIGdzdF91dGlsX2ZyYWN0aW9uX3RvX2RvdWJsZSAobnVtLCBkZW5vbSwgJmZyYW1lcmF0ZSk7Ci0gICAgcmF0ZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVmIiwgZnJhbWVyYXRlKTsKLSAgfQotCi0gIGlmIChwYXktPndpZHRoID09IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXksCi0gICAgICAgICJ3aWR0aCBvciBoZWlnaHQgYXJlIGdyZWF0ZXIgdGhhbiAyMDQwLCBhZGRpbmcgeC1kaW1lbnNpb25zIHRvIGNhcHMiKTsKLSAgICBkaW0gPSBnX3N0cmR1cF9wcmludGYgKCIlZCwlZCIsIHdpZHRoLCBoZWlnaHQpOwotICB9Ci0KLSAgaWYgKHJhdGUgIT0gTlVMTCAmJiBkaW0gIT0gTlVMTCkgewotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwgImEtZnJhbWVyYXRlIiwKLSAgICAgICAgR19UWVBFX1NUUklORywgcmF0ZSwgIngtZGltZW5zaW9ucyIsIEdfVFlQRV9TVFJJTkcsIGRpbSwgTlVMTCk7Ci0gIH0gZWxzZSBpZiAocmF0ZSAhPSBOVUxMICYmIGRpbSA9PSBOVUxMKSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKGJhc2VwYXlsb2FkLCAiYS1mcmFtZXJhdGUiLAotICAgICAgICBHX1RZUEVfU1RSSU5HLCByYXRlLCBOVUxMKTsKLSAgfSBlbHNlIGlmIChyYXRlID09IE5VTEwgJiYgZGltICE9IE5VTEwpIHsKLSAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAoYmFzZXBheWxvYWQsICJ4LWRpbWVuc2lvbnMiLAotICAgICAgICBHX1RZUEVfU1RSSU5HLCBkaW0sIE5VTEwpOwotICB9IGVsc2UgewotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwgTlVMTCk7Ci0gIH0KLQotICBnX2ZyZWUgKGRpbSk7Ci0gIGdfZnJlZSAocmF0ZSk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfZGltZW5zaW9uOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocGF5LCAiSW52YWxpZCB3aWR0aC9oZWlnaHQgZnJvbSBjYXBzIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX2ZyYW1lcmF0ZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBheSwgIkludmFsaWQgZnJhbWVyYXRlIGZyb20gY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9ydHBfanBlZ19wYXlfaGVhZGVyX3NpemUgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IG9mZnNldCkKLXsKLSAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTsKLX0KLQotc3RhdGljIGd1aW50Ci1nc3RfcnRwX2pwZWdfcGF5X3JlYWRfcXVhbnRfdGFibGUgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgZ3VpbnQgb2Zmc2V0LCBSdHBRdWFudFRhYmxlIHRhYmxlc1tdKQotewotICBndWludCBxdWFudF9zaXplLCB0YWJfc2l6ZTsKLSAgZ3VpbnQ4IHByZWM7Ci0gIGd1aW50OCBpZDsKLQotICBpZiAob2Zmc2V0ICsgMiA+IHNpemUpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgcXVhbnRfc2l6ZSA9IGdzdF9ydHBfanBlZ19wYXlfaGVhZGVyX3NpemUgKGRhdGEsIG9mZnNldCk7Ci0gIGlmIChxdWFudF9zaXplIDwgMikKLSAgICBnb3RvIHNtYWxsX3F1YW50X3NpemU7Ci0KLSAgLyogY2xhbXAgdG8gYXZhaWxhYmxlIGRhdGEgKi8KLSAgaWYgKG9mZnNldCArIHF1YW50X3NpemUgPiBzaXplKQotICAgIHF1YW50X3NpemUgPSBzaXplIC0gb2Zmc2V0OwotCi0gIG9mZnNldCArPSAyOwotICBxdWFudF9zaXplIC09IDI7Ci0KLSAgd2hpbGUgKHF1YW50X3NpemUgPiAwKSB7Ci0gICAgLyogbm90IGVub3VnaCB0byByZWFkIHRoZSBpZCAqLwotICAgIGlmIChvZmZzZXQgKyAxID4gc2l6ZSkKLSAgICAgIGJyZWFrOwotCi0gICAgaWQgPSBkYXRhW29mZnNldF0gJiAweDBmOwotICAgIGlmIChpZCA9PSAxNSkKLSAgICAgIC8qIGludmFsaWQgaWQgcmVjZWl2ZWQgLSBjb3JydXB0IGRhdGEgKi8KLSAgICAgIGdvdG8gaW52YWxpZF9pZDsKLQotICAgIHByZWMgPSAoZGF0YVtvZmZzZXRdICYgMHhmMCkgPj4gNDsKLSAgICBpZiAocHJlYykKLSAgICAgIHRhYl9zaXplID0gMTI4OwotICAgIGVsc2UKLSAgICAgIHRhYl9zaXplID0gNjQ7Ci0KLSAgICAvKiB0aGVyZSBpcyBub3QgZW5vdWdoIGZvciB0aGUgdGFibGUgKi8KLSAgICBpZiAocXVhbnRfc2l6ZSA8IHRhYl9zaXplICsgMSkKLSAgICAgIGdvdG8gbm9fdGFibGU7Ci0KLSAgICBHU1RfTE9HICgicmVhZCBxdWFudCB0YWJsZSAlZCwgdGFiX3NpemUgJWQsIHByZWMgJTAyeCIsIGlkLCB0YWJfc2l6ZSwgcHJlYyk7Ci0KLSAgICB0YWJsZXNbaWRdLnNpemUgPSB0YWJfc2l6ZTsKLSAgICB0YWJsZXNbaWRdLmRhdGEgPSAmZGF0YVtvZmZzZXQgKyAxXTsKLQotICAgIHRhYl9zaXplICs9IDE7Ci0gICAgcXVhbnRfc2l6ZSAtPSB0YWJfc2l6ZTsKLSAgICBvZmZzZXQgKz0gdGFiX3NpemU7Ci0gIH0KLWRvbmU6Ci0gIHJldHVybiBvZmZzZXQgKyBxdWFudF9zaXplOwotCi0gIC8qIEVSUk9SUyAqLwotdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJub3QgZW5vdWdoIGRhdGEiKTsKLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotc21hbGxfcXVhbnRfc2l6ZToKLSAgewotICAgIEdTVF9XQVJOSU5HICgicXVhbnRfc2l6ZSB0b28gc21hbGwgKCV1IDwgMikiLCBxdWFudF9zaXplKTsKLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotaW52YWxpZF9pZDoKLSAgewotICAgIEdTVF9XQVJOSU5HICgiaW52YWxpZCBpZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotbm9fdGFibGU6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoIm5vdCBlbm91Z2ggZGF0YSBmb3IgdGFibGUgKCV1IDwgJXUpIiwgcXVhbnRfc2l6ZSwKLSAgICAgICAgdGFiX3NpemUgKyAxKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2pwZWdfcGF5X3JlYWRfc29mIChHc3RSdHBKUEVHUGF5ICogcGF5LCBjb25zdCBndWludDggKiBkYXRhLAotICAgIGd1aW50IHNpemUsIGd1aW50ICogb2Zmc2V0LCBDb21wSW5mbyBpbmZvW10sIFJ0cFF1YW50VGFibGUgdGFibGVzW10sCi0gICAgZ3Vsb25nIHRhYmxlc19lbGVtZW50cykKLXsKLSAgZ3VpbnQgc29mX3NpemUsIG9mZjsKLSAgZ3VpbnQgd2lkdGgsIGhlaWdodCwgaW5mb2xlbjsKLSAgQ29tcEluZm8gZWxlbTsKLSAgZ2ludCBpLCBqOwotCi0gIG9mZiA9ICpvZmZzZXQ7Ci0KLSAgLyogd2UgbmVlZCBhdCBsZWFzdCAxNyBieXRlcyBmb3IgdGhlIFNPRiAqLwotICBpZiAob2ZmICsgMTcgPiBzaXplKQotICAgIGdvdG8gd3Jvbmdfc2l6ZTsKLQotICBzb2Zfc2l6ZSA9IGdzdF9ydHBfanBlZ19wYXlfaGVhZGVyX3NpemUgKGRhdGEsIG9mZik7Ci0gIGlmIChzb2Zfc2l6ZSA8IDE3KQotICAgIGdvdG8gd3JvbmdfbGVuZ3RoOwotCi0gICpvZmZzZXQgKz0gc29mX3NpemU7Ci0KLSAgLyogc2tpcCBzaXplICovCi0gIG9mZiArPSAyOwotCi0gIC8qIHByZWNpc2lvbiBzaG91bGQgYmUgOCAqLwotICBpZiAoZGF0YVtvZmYrK10gIT0gOCkKLSAgICBnb3RvIGJhZF9wcmVjaXNpb247Ci0KLSAgLyogcmVhZCBkaW1lbnNpb25zICovCi0gIGhlaWdodCA9IGRhdGFbb2ZmXSA8PCA4IHwgZGF0YVtvZmYgKyAxXTsKLSAgd2lkdGggPSBkYXRhW29mZiArIDJdIDw8IDggfCBkYXRhW29mZiArIDNdOwotICBvZmYgKz0gNDsKLQotICBHU1RfTE9HX09CSkVDVCAocGF5LCAiZ290IGRpbWVuc2lvbnMgJXV4JXUiLCBoZWlnaHQsIHdpZHRoKTsKLQotICBpZiAoaGVpZ2h0ID09IDApIHsKLSAgICBnb3RvIGludmFsaWRfZGltZW5zaW9uOwotICB9Ci0gIGlmIChoZWlnaHQgPiAyMDQwKSB7Ci0gICAgaGVpZ2h0ID0gMDsKLSAgfQotICBpZiAod2lkdGggPT0gMCkgewotICAgIGdvdG8gaW52YWxpZF9kaW1lbnNpb247Ci0gIH0KLSAgaWYgKHdpZHRoID4gMjA0MCkgewotICAgIHdpZHRoID0gMDsKLSAgfQotCi0gIGlmIChoZWlnaHQgPT0gMCB8fCB3aWR0aCA9PSAwKSB7Ci0gICAgcGF5LT5oZWlnaHQgPSAwOwotICAgIHBheS0+d2lkdGggPSAwOwotICB9IGVsc2UgewotICAgIHBheS0+aGVpZ2h0ID0gR1NUX1JPVU5EX1VQXzggKGhlaWdodCkgLyA4OwotICAgIHBheS0+d2lkdGggPSBHU1RfUk9VTkRfVVBfOCAod2lkdGgpIC8gODsKLSAgfQotCi0gIC8qIHdlIG9ubHkgc3VwcG9ydCAzIGNvbXBvbmVudHMgKi8KLSAgaWYgKGRhdGFbb2ZmKytdICE9IDMpCi0gICAgZ290byBiYWRfY29tcG9uZW50czsKLQotICBpbmZvbGVuID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgIGVsZW0uaWQgPSBkYXRhW29mZisrXTsKLSAgICBlbGVtLnNhbXAgPSBkYXRhW29mZisrXTsKLSAgICBlbGVtLnF0ID0gZGF0YVtvZmYrK107Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgImdvdCBjb21wICVkLCBzYW1wICUwMngsIHF0ICVkIiwgZWxlbS5pZCwgZWxlbS5zYW1wLAotICAgICAgICBlbGVtLnF0KTsKLSAgICAvKiBpbnNlcnRpb24gc29ydCBmcm9tIHRoZSBsYXN0IGVsZW1lbnQgdG8gdGhlIGZpcnN0ICovCi0gICAgZm9yIChqID0gaW5mb2xlbjsgaiA+IDE7IGotLSkgewotICAgICAgaWYgKEdfTElLRUxZIChpbmZvW2ogLSAxXS5pZCA8IGVsZW0uaWQpKQotICAgICAgICBicmVhazsKLSAgICAgIGluZm9bal0gPSBpbmZvW2ogLSAxXTsKLSAgICB9Ci0gICAgaW5mb1tqXSA9IGVsZW07Ci0gICAgaW5mb2xlbisrOwotICB9Ci0KLSAgLyogc2VlIHRoYXQgdGhlIGNvbXBvbmVudHMgYXJlIHN1cHBvcnRlZCAqLwotICBpZiAoaW5mb1swXS5zYW1wID09IDB4MjEpCi0gICAgcGF5LT50eXBlID0gMDsKLSAgZWxzZSBpZiAoaW5mb1swXS5zYW1wID09IDB4MjIpCi0gICAgcGF5LT50eXBlID0gMTsKLSAgZWxzZQotICAgIGdvdG8gaW52YWxpZF9jb21wOwotCi0gIGlmICghKGluZm9bMV0uc2FtcCA9PSAweDExKSkKLSAgICBnb3RvIGludmFsaWRfY29tcDsKLQotICBpZiAoIShpbmZvWzJdLnNhbXAgPT0gMHgxMSkpCi0gICAgZ290byBpbnZhbGlkX2NvbXA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19zaXplOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocGF5LCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKCJXcm9uZyBzaXplICV1IChuZWVkZWQgJXUpLiIsIHNpemUsIG9mZiArIDE3KSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2xlbmd0aDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHBheSwgU1RSRUFNLCBGT1JNQVQsCi0gICAgICAgICgiV3JvbmcgU09GIGxlbmd0aCAldS4iLCBzb2Zfc2l6ZSksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1iYWRfcHJlY2lzaW9uOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocGF5LCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKCJXcm9uZyBwcmVjaXNpb24sIGV4cGVjdGluZyA4LiIpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9kaW1lbnNpb246Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXksIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoIldyb25nIGRpbWVuc2lvbiwgc2l6ZSAldXgldSIsIHdpZHRoLCBoZWlnaHQpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotYmFkX2NvbXBvbmVudHM6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXksIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoIldyb25nIG51bWJlciBvZiBjb21wb25lbnRzIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX2NvbXA6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXksIFNUUkVBTSwgRk9STUFULCAoIkludmFsaWQgY29tcG9uZW50IiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qcGVnX3BheV9yZWFkX2RyaSAoR3N0UnRwSlBFR1BheSAqIHBheSwgY29uc3QgZ3VpbnQ4ICogZGF0YSwKLSAgICBndWludCBzaXplLCBndWludCAqIG9mZnNldCwgUnRwUmVzdGFydE1hcmtlckhlYWRlciAqIGRyaSkKLXsKLSAgZ3VpbnQgZHJpX3NpemUsIG9mZjsKLQotICBvZmYgPSAqb2Zmc2V0OwotCi0gIC8qIHdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyBmb3IgdGhlIERSSSAqLwotICBpZiAob2ZmICsgNCA+IHNpemUpCi0gICAgZ290byB3cm9uZ19zaXplOwotCi0gIGRyaV9zaXplID0gZ3N0X3J0cF9qcGVnX3BheV9oZWFkZXJfc2l6ZSAoZGF0YSwgb2ZmKTsKLSAgaWYgKGRyaV9zaXplIDwgNCkKLSAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAqb2Zmc2V0ICs9IGRyaV9zaXplOwotICBvZmYgKz0gMjsKLQotICBkcmktPnJlc3RhcnRfaW50ZXJ2YWwgPSBnX2h0b25zICgoZGF0YVtvZmZdIDw8IDgpIHwgKGRhdGFbb2ZmICsgMV0pKTsKLSAgZHJpLT5yZXN0YXJ0X2NvdW50ID0gZ19odG9ucyAoMHhGRkZGKTsKLQotICByZXR1cm4gZHJpLT5yZXN0YXJ0X2ludGVydmFsID4gMDsKLQotd3Jvbmdfc2l6ZToKLSAgewotICAgIEdTVF9XQVJOSU5HICgibm90IGVub3VnaCBkYXRhIGZvciBEUkkiKTsKLSAgICAqb2Zmc2V0ID0gc2l6ZTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2xlbmd0aDoKLSAgewotICAgIEdTVF9XQVJOSU5HICgiRFJJIHNpemUgdG9vIHNtYWxsICgldSkiLCBkcmlfc2l6ZSk7Ci0gICAgKm9mZnNldCArPSBkcmlfc2l6ZTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIFJ0cEpwZWdNYXJrZXIKLWdzdF9ydHBfanBlZ19wYXlfc2Nhbl9tYXJrZXIgKGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsIGd1aW50ICogb2Zmc2V0KQotewotICB3aGlsZSAoKGRhdGFbKCpvZmZzZXQpKytdICE9IEpQRUdfTUFSS0VSKSAmJiAoKCpvZmZzZXQpIDwgc2l6ZSkpOwotCi0gIGlmIChHX1VOTElLRUxZICgoKm9mZnNldCkgPj0gc2l6ZSkpIHsKLSAgICBHU1RfTE9HICgiZm91bmQgRU9JIG1hcmtlciIpOwotICAgIHJldHVybiBKUEVHX01BUktFUl9FT0k7Ci0gIH0gZWxzZSB7Ci0gICAgZ3VpbnQ4IG1hcmtlcjsKLQotICAgIG1hcmtlciA9IGRhdGFbKm9mZnNldF07Ci0gICAgR1NUX0xPRyAoImZvdW5kIDB4JTAyeCBtYXJrZXIgYXQgb2Zmc2V0ICV1IiwgbWFya2VyLCAqb2Zmc2V0KTsKLSAgICAoKm9mZnNldCkrKzsKLSAgICByZXR1cm4gbWFya2VyOwotICB9Ci19Ci0KLSNkZWZpbmUgUlRQX0hFQURFUl9MRU4gMTIKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfanBlZ19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cEpQRUdQYXkgKnBheTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgUnRwSnBlZ0hlYWRlciBqcGVnX2hlYWRlcjsKLSAgUnRwUXVhbnRIZWFkZXIgcXVhbnRfaGVhZGVyOwotICBSdHBSZXN0YXJ0TWFya2VySGVhZGVyIHJlc3RhcnRfbWFya2VyX2hlYWRlcjsKLSAgUnRwUXVhbnRUYWJsZSB0YWJsZXNbMTVdID0geyB7MCwgTlVMTH0sIH07Ci0gIENvbXBJbmZvIGluZm9bM10gPSB7IHswLH0sIH07Ci0gIGd1aW50IHF1YW50X2RhdGFfc2l6ZTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3VpbnQgbXR1LCBtYXhfcGF5bG9hZF9zaXplOwotICBndWludCBieXRlc19sZWZ0OwotICBndWludCBqcGVnX2hlYWRlcl9zaXplID0gMDsKLSAgZ3VpbnQgb2Zmc2V0OwotICBnYm9vbGVhbiBmcmFtZV9kb25lOwotICBnYm9vbGVhbiBzb3NfZm91bmQsIHNvZl9mb3VuZCwgZHF0X2ZvdW5kLCBkcmlfZm91bmQ7Ci0gIGdpbnQgaTsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdCA9IE5VTEw7Ci0gIGdib29sZWFuIGRpc2NvbnQ7Ci0KLSAgcGF5ID0gR1NUX1JUUF9KUEVHX1BBWSAoYmFzZXBheWxvYWQpOwotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHBheSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotICBzaXplID0gbWFwLnNpemU7Ci0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICBvZmZzZXQgPSAwOwotICBkaXNjb250ID0gR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXksICJnb3QgYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQKLSAgICAgICIgLCB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFULCBzaXplLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICAvKiBwYXJzZSB0aGUganBlZyBoZWFkZXIgZm9yICdzdGFydCBvZiBzY2FuJyBhbmQgcmVhZCBxdWFudCB0YWJsZXMgaWYgbmVlZGVkICovCi0gIHNvc19mb3VuZCA9IEZBTFNFOwotICBkcXRfZm91bmQgPSBGQUxTRTsKLSAgc29mX2ZvdW5kID0gRkFMU0U7Ci0gIGRyaV9mb3VuZCA9IEZBTFNFOwotCi0gIHdoaWxlICghc29zX2ZvdW5kICYmIChvZmZzZXQgPCBzaXplKSkgewotICAgIGdpbnQgbWFya2VyOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgImNoZWNraW5nIGZyb20gb2Zmc2V0ICV1Iiwgb2Zmc2V0KTsKLSAgICBzd2l0Y2ggKChtYXJrZXIgPSBnc3RfcnRwX2pwZWdfcGF5X3NjYW5fbWFya2VyIChkYXRhLCBzaXplLCAmb2Zmc2V0KSkpIHsKLSAgICAgIGNhc2UgSlBFR19NQVJLRVJfSkZJRjoKLSAgICAgIGNhc2UgSlBFR19NQVJLRVJfQ01UOgotICAgICAgY2FzZSBKUEVHX01BUktFUl9ESFQ6Ci0gICAgICBjYXNlIEpQRUdfTUFSS0VSX0gyNjQ6Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJza2lwcGluZyBtYXJrZXIiKTsKLSAgICAgICAgb2Zmc2V0ICs9IGdzdF9ydHBfanBlZ19wYXlfaGVhZGVyX3NpemUgKGRhdGEsIG9mZnNldCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBKUEVHX01BUktFUl9TT0Y6Ci0gICAgICAgIGlmICghZ3N0X3J0cF9qcGVnX3BheV9yZWFkX3NvZiAocGF5LCBkYXRhLCBzaXplLCAmb2Zmc2V0LCBpbmZvLCB0YWJsZXMsCi0gICAgICAgICAgICAgICAgR19OX0VMRU1FTlRTICh0YWJsZXMpKSkKLSAgICAgICAgICBnb3RvIGludmFsaWRfZm9ybWF0OwotICAgICAgICBzb2ZfZm91bmQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSlBFR19NQVJLRVJfRFFUOgotICAgICAgICBHU1RfTE9HICgiRFFUIGZvdW5kIik7Ci0gICAgICAgIG9mZnNldCA9IGdzdF9ydHBfanBlZ19wYXlfcmVhZF9xdWFudF90YWJsZSAoZGF0YSwgc2l6ZSwgb2Zmc2V0LCB0YWJsZXMpOwotICAgICAgICBkcXRfZm91bmQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSlBFR19NQVJLRVJfU09TOgotICAgICAgICBzb3NfZm91bmQgPSBUUlVFOwotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAiU09TIGZvdW5kIik7Ci0gICAgICAgIGpwZWdfaGVhZGVyX3NpemUgPSBvZmZzZXQgKyBnc3RfcnRwX2pwZWdfcGF5X2hlYWRlcl9zaXplIChkYXRhLCBvZmZzZXQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSlBFR19NQVJLRVJfRU9JOgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBheSwgIkVPSSByZWFjaGVkIGJlZm9yZSBTT1MhIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBKUEVHX01BUktFUl9TT0k6Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJTT0kgZm91bmQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEpQRUdfTUFSS0VSX0RSSToKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgIkRSSSBmb3VuZCIpOwotICAgICAgICBpZiAoZ3N0X3J0cF9qcGVnX3BheV9yZWFkX2RyaSAocGF5LCBkYXRhLCBzaXplLCAmb2Zmc2V0LAotICAgICAgICAgICAgICAgICZyZXN0YXJ0X21hcmtlcl9oZWFkZXIpKQotICAgICAgICAgIGRyaV9mb3VuZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1hcmtlciA9PSBKUEVHX01BUktFUl9KUEcgfHwKLSAgICAgICAgICAgIChtYXJrZXIgPj0gSlBFR19NQVJLRVJfSlBHMCAmJiBtYXJrZXIgPD0gSlBFR19NQVJLRVJfSlBHMTMpIHx8Ci0gICAgICAgICAgICAobWFya2VyID49IEpQRUdfTUFSS0VSX0FQUDAgJiYgbWFya2VyIDw9IEpQRUdfTUFSS0VSX0FQUDE1KSkgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJza2lwcGluZyBtYXJrZXIiKTsKLSAgICAgICAgICBvZmZzZXQgKz0gZ3N0X3J0cF9qcGVnX3BheV9oZWFkZXJfc2l6ZSAoZGF0YSwgb2Zmc2V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfRklYTUVfT0JKRUNUIChwYXksICJ1bmhhbmRsZWQgbWFya2VyIDB4JTAyeCIsIG1hcmtlcik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGlmICghZHF0X2ZvdW5kIHx8ICFzb2ZfZm91bmQpCi0gICAgZ290byB1bnN1cHBvcnRlZF9qcGVnOwotCi0gIC8qIGJ5IG5vdyB3ZSBzaG91bGQgZWl0aGVyIGhhdmUgbmVnb3RpYXRlZCB0aGUgd2lkdGgvaGVpZ2h0IG9yIHRoZSBTT0YgaGVhZGVyCi0gICAqIHNob3VsZCBoYXZlIGZpbGxlZCB1cyBpbiAqLwotICBpZiAocGF5LT53aWR0aCA8IDAgfHwgcGF5LT5oZWlnaHQgPCAwKSB7Ci0gICAgZ290byBub19kaW1lbnNpb247Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAocGF5LCAiaGVhZGVyIHNpemUgJXUiLCBqcGVnX2hlYWRlcl9zaXplKTsKLQotICBzaXplIC09IGpwZWdfaGVhZGVyX3NpemU7Ci0gIGRhdGEgKz0ganBlZ19oZWFkZXJfc2l6ZTsKLSAgb2Zmc2V0ID0gMDsKLQotICBpZiAoZHJpX2ZvdW5kKQotICAgIHBheS0+dHlwZSArPSA2NDsKLQotICAvKiBwcmVwYXJlIHN0dWZmIGZvciB0aGUganBlZyBoZWFkZXIgKi8KLSAganBlZ19oZWFkZXIudHlwZV9zcGVjID0gMDsKLSAganBlZ19oZWFkZXIudHlwZSA9IHBheS0+dHlwZTsKLSAganBlZ19oZWFkZXIucSA9IHBheS0+cXVhbnQ7Ci0gIGpwZWdfaGVhZGVyLndpZHRoID0gcGF5LT53aWR0aDsKLSAganBlZ19oZWFkZXIuaGVpZ2h0ID0gcGF5LT5oZWlnaHQ7Ci0KLSAgLyogY29sbGVjdCB0aGUgcXVhbnQgaGVhZGVycyBzaXplcyAqLwotICBxdWFudF9oZWFkZXIubWJ6ID0gMDsKLSAgcXVhbnRfaGVhZGVyLnByZWNpc2lvbiA9IDA7Ci0gIHF1YW50X2hlYWRlci5sZW5ndGggPSAwOwotICBxdWFudF9kYXRhX3NpemUgPSAwOwotCi0gIGlmIChwYXktPnF1YW50ID4gMTI3KSB7Ci0gICAgLyogZm9yIHRoZSBZIGFuZCBVIGNvbXBvbmVudCwgbG9vayB1cCB0aGUgcXVhbnQgdGFibGUgYW5kIGl0cyBzaXplLiBxdWFudAotICAgICAqIHRhYmxlcyBmb3IgVSBhbmQgViBzaG91bGQgYmUgdGhlIHNhbWUgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICBndWludCBxc2l6ZTsKLSAgICAgIGd1aW50IHF0OwotCi0gICAgICBxdCA9IGluZm9baV0ucXQ7Ci0gICAgICBpZiAocXQgPj0gR19OX0VMRU1FTlRTICh0YWJsZXMpKQotICAgICAgICBnb3RvIGludmFsaWRfcXVhbnQ7Ci0KLSAgICAgIHFzaXplID0gdGFibGVzW3F0XS5zaXplOwotICAgICAgaWYgKHFzaXplID09IDApCi0gICAgICAgIGdvdG8gaW52YWxpZF9xdWFudDsKLQotICAgICAgcXVhbnRfaGVhZGVyLnByZWNpc2lvbiB8PSAocXNpemUgPT0gNjQgPyAwIDogKDEgPDwgaSkpOwotICAgICAgcXVhbnRfZGF0YV9zaXplICs9IHFzaXplOwotICAgIH0KLSAgICBxdWFudF9oZWFkZXIubGVuZ3RoID0gZ19odG9ucyAocXVhbnRfZGF0YV9zaXplKTsKLSAgICBxdWFudF9kYXRhX3NpemUgKz0gc2l6ZW9mIChxdWFudF9oZWFkZXIpOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBheSwgInF1YW50X2RhdGEgc2l6ZSAldSIsIHF1YW50X2RhdGFfc2l6ZSk7Ci0KLSAgYnl0ZXNfbGVmdCA9IHNpemVvZiAoanBlZ19oZWFkZXIpICsgcXVhbnRfZGF0YV9zaXplICsgc2l6ZTsKLQotICBpZiAoZHJpX2ZvdW5kKQotICAgIGJ5dGVzX2xlZnQgKz0gc2l6ZW9mIChyZXN0YXJ0X21hcmtlcl9oZWFkZXIpOwotCi0gIG1heF9wYXlsb2FkX3NpemUgPSBtdHUgLSAoUlRQX0hFQURFUl9MRU4gKyBzaXplb2YgKGpwZWdfaGVhZGVyKSk7Ci0gIGxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkICgoYnl0ZXNfbGVmdCAvIG1heF9wYXlsb2FkX3NpemUpICsgMSk7Ci0KLSAgZnJhbWVfZG9uZSA9IEZBTFNFOwotICBkbyB7Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0gICAgZ3VpbnQ4ICpwYXlsb2FkOwotICAgIGd1aW50IHBheWxvYWRfc2l6ZTsKLSAgICBndWludCBoZWFkZXJfc2l6ZTsKLSAgICBHc3RCdWZmZXIgKnBheWJ1ZjsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gICAgZ3VpbnQgcnRwX2hlYWRlcl9zaXplID0gZ3N0X3J0cF9idWZmZXJfY2FsY19oZWFkZXJfbGVuICgwKTsKLQotICAgIC8qIFRoZSBhdmFpbGFibGUgcm9vbSBpcyB0aGUgcGFja2V0IE1UVSwgbWludXMgdGhlIFJUUCBoZWFkZXIgbGVuZ3RoLiAqLwotICAgIHBheWxvYWRfc2l6ZSA9Ci0gICAgICAgIChieXRlc19sZWZ0IDwgKG10dSAtIHJ0cF9oZWFkZXJfc2l6ZSkgPyBieXRlc19sZWZ0IDoKLSAgICAgICAgKG10dSAtIHJ0cF9oZWFkZXJfc2l6ZSkpOwotCi0gICAgaGVhZGVyX3NpemUgPSBzaXplb2YgKGpwZWdfaGVhZGVyKSArIHF1YW50X2RhdGFfc2l6ZTsKLSAgICBpZiAoZHJpX2ZvdW5kKQotICAgICAgaGVhZGVyX3NpemUgKz0gc2l6ZW9mIChyZXN0YXJ0X21hcmtlcl9oZWFkZXIpOwotCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChoZWFkZXJfc2l6ZSwgMCwgMCk7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgICBpZiAocGF5bG9hZF9zaXplID09IGJ5dGVzX2xlZnQpIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJsYXN0IHBhY2tldCBvZiBmcmFtZSIpOwotICAgICAgZnJhbWVfZG9uZSA9IFRSVUU7Ci0gICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCAxKTsKLSAgICB9Ci0KLSAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotCi0gICAgLyogdXBkYXRlIG9mZnNldCAqLwotI2lmIChHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOKQotICAgIGpwZWdfaGVhZGVyLm9mZnNldCA9ICgob2Zmc2V0ICYgMHgwMDAwRkYpIDw8IDE2KSB8Ci0gICAgICAgICgob2Zmc2V0ICYgMHhGRjAwMDApID4+IDE2KSB8IChvZmZzZXQgJiAweDAwRkYwMCk7Ci0jZWxzZQotICAgIGpwZWdfaGVhZGVyLm9mZnNldCA9IG9mZnNldDsKLSNlbmRpZgotICAgIG1lbWNweSAocGF5bG9hZCwgJmpwZWdfaGVhZGVyLCBzaXplb2YgKGpwZWdfaGVhZGVyKSk7Ci0gICAgcGF5bG9hZCArPSBzaXplb2YgKGpwZWdfaGVhZGVyKTsKLSAgICBwYXlsb2FkX3NpemUgLT0gc2l6ZW9mIChqcGVnX2hlYWRlcik7Ci0KLSAgICBpZiAoZHJpX2ZvdW5kKSB7Ci0gICAgICBtZW1jcHkgKHBheWxvYWQsICZyZXN0YXJ0X21hcmtlcl9oZWFkZXIsIHNpemVvZiAocmVzdGFydF9tYXJrZXJfaGVhZGVyKSk7Ci0gICAgICBwYXlsb2FkICs9IHNpemVvZiAocmVzdGFydF9tYXJrZXJfaGVhZGVyKTsKLSAgICAgIHBheWxvYWRfc2l6ZSAtPSBzaXplb2YgKHJlc3RhcnRfbWFya2VyX2hlYWRlcik7Ci0gICAgfQotCi0gICAgLyogb25seSBzZW5kIHF1YW50IHRhYmxlIHdpdGggZmlyc3QgcGFja2V0ICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHF1YW50X2RhdGFfc2l6ZSA+IDApKSB7Ci0gICAgICBtZW1jcHkgKHBheWxvYWQsICZxdWFudF9oZWFkZXIsIHNpemVvZiAocXVhbnRfaGVhZGVyKSk7Ci0gICAgICBwYXlsb2FkICs9IHNpemVvZiAocXVhbnRfaGVhZGVyKTsKLQotICAgICAgLyogY29weSB0aGUgcXVhbnQgdGFibGVzIGZvciBsdW1hIGFuZCBjaHJvbWluYW5jZSAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgICBndWludCBxc2l6ZTsKLSAgICAgICAgZ3VpbnQgcXQ7Ci0KLSAgICAgICAgcXQgPSBpbmZvW2ldLnF0OwotICAgICAgICBxc2l6ZSA9IHRhYmxlc1txdF0uc2l6ZTsKLSAgICAgICAgbWVtY3B5IChwYXlsb2FkLCB0YWJsZXNbcXRdLmRhdGEsIHFzaXplKTsKLQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAiY29tcG9uZW50ICVkIHVzaW5nIHF1YW50ICVkLCBzaXplICVkIiwgaSwgcXQsCi0gICAgICAgICAgICBxc2l6ZSk7Ci0KLSAgICAgICAgcGF5bG9hZCArPSBxc2l6ZTsKLSAgICAgIH0KLSAgICAgIHBheWxvYWRfc2l6ZSAtPSBxdWFudF9kYXRhX3NpemU7Ci0gICAgICBieXRlc19sZWZ0IC09IHF1YW50X2RhdGFfc2l6ZTsKLSAgICAgIHF1YW50X2RhdGFfc2l6ZSA9IDA7Ci0gICAgfQotICAgIEdTVF9MT0dfT0JKRUNUIChwYXksICJzZW5kaW5nIHBheWxvYWQgc2l6ZSAlZCIsIHBheWxvYWRfc2l6ZSk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gICAgLyogY3JlYXRlIGEgbmV3IGJ1ZiB0byBob2xkIHRoZSBwYXlsb2FkICovCi0gICAgcGF5YnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMLAotICAgICAgICBqcGVnX2hlYWRlcl9zaXplICsgb2Zmc2V0LCBwYXlsb2FkX3NpemUpOwotCi0gICAgLyogam9pbiBtZW1vcnkgcGFydHMgKi8KLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocGF5KSwgb3V0YnVmLCBwYXlidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgcGF5YnVmKTsKLQotICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gdGltZXN0YW1wOwotCi0gICAgaWYgKGRpc2NvbnQpIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgLyogT25seSB0aGUgZmlyc3Qgb3V0cHV0dGVkIGJ1ZmZlciBoYXMgdGhlIERJU0NPTlQgZmxhZyAqLwotICAgICAgZGlzY29udCA9IEZBTFNFOwotICAgIH0KLQotICAgIC8qIGFuZCBhZGQgdG8gbGlzdCAqLwotICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIC0xLCBvdXRidWYpOwotCi0gICAgYnl0ZXNfbGVmdCAtPSBwYXlsb2FkX3NpemU7Ci0gICAgb2Zmc2V0ICs9IHBheWxvYWRfc2l6ZTsKLSAgICBkYXRhICs9IHBheWxvYWRfc2l6ZTsKLSAgfQotICB3aGlsZSAoIWZyYW1lX2RvbmUpOwotCi0gIC8qIHB1c2ggdGhlIHdob2xlIGJ1ZmZlciBsaXN0IGF0IG9uY2UgKi8KLSAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaF9saXN0IChiYXNlcGF5bG9hZCwgbGlzdCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotdW5zdXBwb3J0ZWRfanBlZzoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHBheSwgU1RSRUFNLCBGT1JNQVQsICgiVW5zdXBwb3J0ZWQgSlBFRyIpLCAoTlVMTCkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLW5vX2RpbWVuc2lvbjoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHBheSwgU1RSRUFNLCBGT1JNQVQsICgiTm8gc2l6ZSBnaXZlbiIpLCAoTlVMTCkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLWludmFsaWRfZm9ybWF0OgotICB7Ci0gICAgLyogZXJyb3Igd2FzIHBvc3RlZCAqLwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLWludmFsaWRfcXVhbnQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChwYXksIFNUUkVBTSwgRk9STUFULCAoIkludmFsaWQgcXVhbnQgdGFibGVzIiksIChOVUxMKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qcGVnX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSlBFR1BheSAqcnRwanBlZ3BheTsKLQotICBydHBqcGVncGF5ID0gR1NUX1JUUF9KUEVHX1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfSlBFR19RVUFMSVRZOgotICAgICAgcnRwanBlZ3BheS0+cXVhbGl0eSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAob2JqZWN0LCAicXVhbGl0eSA9ICVkIiwgcnRwanBlZ3BheS0+cXVhbGl0eSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSlBFR19UWVBFOgotICAgICAgcnRwanBlZ3BheS0+dHlwZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAob2JqZWN0LCAidHlwZSA9ICVkIiwgcnRwanBlZ3BheS0+dHlwZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2pwZWdfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBKUEVHUGF5ICpydHBqcGVncGF5OwotCi0gIHJ0cGpwZWdwYXkgPSBHU1RfUlRQX0pQRUdfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9KUEVHX1FVQUxJVFk6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBydHBqcGVncGF5LT5xdWFsaXR5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9KUEVHX1RZUEU6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBydHBqcGVncGF5LT50eXBlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfanBlZ19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBqcGVncGF5IiwgR1NUX1JBTktfU0VDT05EQVJZLAotICAgICAgR1NUX1RZUEVfUlRQX0pQRUdfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwanBlZ3BheS5oIGIvZ3N0L3J0cC9nc3RydHBqcGVncGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNjVlYTcuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBqcGVncGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBeGlzIENvbW11bmljYXRpb25zIDxkZXYtZ3N0cmVhbWVyQGF4aXMuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0pQRUdfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfSlBFR19QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9KUEVHX1BBWSBcCi0gIChnc3RfcnRwX2pwZWdfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSlBFR19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfSlBFR19QQVksR3N0UnRwSlBFR1BheSkpCi0jZGVmaW5lIEdTVF9SVFBfSlBFR19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0pQRUdfUEFZLEdzdFJ0cEpQRUdQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSlBFR19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfSlBFR19QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX0pQRUdfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9KUEVHX1BBWSkpCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSlBFR1BheSBHc3RSdHBKUEVHUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEpQRUdQYXlDbGFzcyBHc3RSdHBKUEVHUGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwSlBFR1BheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCBwYXlsb2FkOwotCi0gIGd1aW50OCBxdWFsaXR5OwotICBndWludDggdHlwZTsKLQotICBnaW50IGhlaWdodDsKLSAgZ2ludCB3aWR0aDsKLQotICBndWludDggcXVhbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cEpQRUdQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfanBlZ19wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX2pwZWdfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9KUEVHX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwa2x2ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwa2x2ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlZmU3ZS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGtsdmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJUUCBLTFYgRGVwYXlsb2FkZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+PgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQ2VudHJpY3VsYXIgTHRkCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwa2x2ZGVwYXkKLSAqIEBzZWVfYWxzbzogcnRwa2x2cGF5Ci0gKgotICogRXh0cmFjdCBLTFYgbWV0YWRhdGEgZnJvbSBSVFAgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDIDY1OTcuCi0gKiBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTk3Ci0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHVkcHNyYyBjYXBzPSdhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhcHBsaWNhdGlvbiwgY2xvY2stcmF0ZT0oaW50KTkwMDAwLCBlbmNvZGluZy1uYW1lPShzdHJpbmcpU01QVEUzMzZNJyAhIHJ0cGtsdmRlcGF5ICEgZmFrZXNpbmsgZHVtcD10cnVlCi0gKiBdfCBUaGlzIGV4YW1wbGUgcGlwZWxpbmUgd2lsbCBkZXBheWxvYWQgYW4gUlRQIEtMViBzdHJlYW0gYW5kIGRpc3BsYXkKLSAqIGEgaGV4ZHVtcCBvZiB0aGUgS0xWIGRhdGEgb24gc3Rkb3V0LgotICogPC9yZWZzZWN0Mj4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cnRwa2x2ZGVwYXkuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChrbHZkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAoa2x2ZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgibWV0YS94LWtsdiwgcGFyc2VkID0gKGJvb2wpIHRydWUiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgYXBwbGljYXRpb24sIGNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYXSwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFNNUFRFMzM2TSIpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfcnRwX2tsdl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBLbHZEZXBheSwgZ3N0X3J0cF9rbHZfZGVwYXksIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfa2x2X2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfa2x2X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9rbHZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX2tsdl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfa2x2X2RlcGF5X3Jlc2V0IChHc3RSdHBLbHZEZXBheSAqIGtsdmRlcGF5KTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfa2x2X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cEtsdkRlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChrbHZkZXBheV9kZWJ1ZywgImtsdmRlcGF5IiwgMCwKLSAgICAgICJSVFAgS0xWIERlcGF5bG9hZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2tsdl9kZXBheV9maW5hbGl6ZTsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX2tsdl9kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEtMViBEZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgS0xWIChTTVBURSBTVCAzMzYpIG1ldGFkYXRhIGZyb20gUlRQIHBhY2tldHMiLAotICAgICAgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Iik7Ci0KLSAgcnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgcnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX2tsdl9kZXBheV9zZXRjYXBzOwotICBydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX2tsdl9kZXBheV9wcm9jZXNzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9rbHZfZGVwYXlfaW5pdCAoR3N0UnRwS2x2RGVwYXkgKiBrbHZkZXBheSkKLXsKLSAga2x2ZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2tsdl9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwS2x2RGVwYXkgKmtsdmRlcGF5OwotCi0gIGtsdmRlcGF5ID0gR1NUX1JUUF9LTFZfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ3N0X3J0cF9rbHZfZGVwYXlfcmVzZXQgKGtsdmRlcGF5KTsKLSAgZ19vYmplY3RfdW5yZWYgKGtsdmRlcGF5LT5hZGFwdGVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2tsdl9kZXBheV9yZXNldCAoR3N0UnRwS2x2RGVwYXkgKiBrbHZkZXBheSkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoa2x2ZGVwYXksICJyZXNldHRpbmciKTsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKGtsdmRlcGF5LT5hZGFwdGVyKTsKLSAga2x2ZGVwYXktPnJlc3luYyA9IFRSVUU7Ci0gIGtsdmRlcGF5LT5sYXN0X3J0cF90cyA9IC0xOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfa2x2X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdENhcHMgKnNyY19jYXBzOwotICBnYm9vbGVhbiByZXM7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNyY19jYXBzID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZzcmNfdGVtcGxhdGUpOwotICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjX2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgota2x2X2dldF92bGVuIChjb25zdCBndWludDggKiBkYXRhLCBndWludCBkYXRhX2xlbiwgZ3VpbnQ2NCAqIHZfbGVuLAotICAgIGdzaXplICogbGVuX3NpemUpCi17Ci0gIGd1aW50OCBmaXJzdF9ieXRlLCBsZW5fbGVuOwotICBndWludDY0IGxlbjsKLQotICBnX2Fzc2VydCAoZGF0YV9sZW4gPiAwKTsKLQotICBmaXJzdF9ieXRlID0gKmRhdGErKzsKLQotICBpZiAoKGZpcnN0X2J5dGUgJiAweDgwKSA9PSAwKSB7Ci0gICAgKnZfbGVuID0gZmlyc3RfYnl0ZSAmIDB4N2Y7Ci0gICAgKmxlbl9zaXplID0gMTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGxlbl9sZW4gPSBmaXJzdF9ieXRlICYgMHg3ZjsKLQotICBpZiAobGVuX2xlbiA9PSAwIHx8IGxlbl9sZW4gPiA4KQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoKDEgKyBsZW5fbGVuKSA+IGRhdGFfbGVuKQotICAgIHJldHVybiBGQUxTRTsKLQotICAqbGVuX3NpemUgPSAxICsgbGVuX2xlbjsKLQotICBsZW4gPSAwOwotICB3aGlsZSAobGVuX2xlbiA+IDApIHsKLSAgICBsZW4gPSBsZW4gPDwgOCB8ICpkYXRhKys7Ci0gICAgLS1sZW5fbGVuOwotICB9Ci0KLSAgKnZfbGVuID0gbGVuOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfa2x2X2RlcGF5X3Byb2Nlc3NfZGF0YSAoR3N0UnRwS2x2RGVwYXkgKiBrbHZkZXBheSkKLXsKLSAgZ3NpemUgYXZhaWwsIGRhdGFfbGVuLCBsZW5fc2l6ZTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGd1aW50OCBkYXRhWzEgKyA4XTsKLSAgZ3VpbnQ2NCB2X2xlbjsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoa2x2ZGVwYXktPmFkYXB0ZXIpOwotCi0gIEdTVF9UUkFDRV9PQkpFQ1QgKGtsdmRlcGF5LCAiJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBpbiBhZGFwdGVyIiwgYXZhaWwpOwotCi0gIGlmIChhdmFpbCA9PSAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIG5lZWQgYXQgbGVhc3QgMTYgYnl0ZXMgb2YgVUwga2V5IHBsdXMgMSBieXRlIG9mIGxlbmd0aCAqLwotICBpZiAoYXZhaWwgPCAxNiArIDEpCi0gICAgZ290byBiYWRfa2x2X3BhY2tldDsKLQotICAvKiBjaGVjayBpZiB0aGUgZGVjbGFyZWQgS0xWIHVuaXQgc2l6ZSBtYXRjaGVzIGFjdHVhbCBieXRlcyBhdmFpbGFibGUgKi8KLSAgZGF0YV9sZW4gPSBNSU4gKGF2YWlsIC0gMTYsIDEgKyA4KTsKLSAgZ3N0X2FkYXB0ZXJfY29weSAoa2x2ZGVwYXktPmFkYXB0ZXIsIGRhdGEsIDE2LCBkYXRhX2xlbik7Ci0gIGlmICgha2x2X2dldF92bGVuIChkYXRhLCBkYXRhX2xlbiwgJnZfbGVuLCAmbGVuX3NpemUpKQotICAgIGdvdG8gYmFkX2tsdl9wYWNrZXQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGtsdmRlcGF5LCAid2FudCAlIiBHX0dVSU5UNjRfRk9STUFUICIgYnl0ZXMsICIKLSAgICAgICJoYXZlICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLCAxNiArIGxlbl9zaXplICsgdl9sZW4sIGF2YWlsKTsKLQotICBpZiAoYXZhaWwgPCAxNiArIGxlbl9zaXplICsgdl9sZW4pCi0gICAgZ290byBpbmNvbXBsZXRlX2tsdl9wYWNrZXQ7Ci0KLSAgLyogc29tZXRoaW5nIGlzIHdyb25nLCB0aGlzIHNob3VsZG4ndCBldmVyIGhhcHBlbiAqLwotICBpZiAoYXZhaWwgPiAxNiArIGxlbl9zaXplICsgdl9sZW4pCi0gICAgZ290byBiYWRfa2x2X3BhY2tldDsKLQotICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoa2x2ZGVwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLQotICAvKiBNYXJrIGJ1ZmZlcnMgYXMga2V5IHVuaXQgdG8gc2lnbmFsIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgS0xWIHVuaXQKLSAgICogKGZvciBub3cgYWxsIGJ1ZmZlcnMgd2lsbCBiZSBmbGFnZ2VkIGxpa2UgdGhpcywgc2luY2UgYWxsIGJ1ZmZlcnMgYXJlCi0gICAqIHNlbGYtY29udGFpbmVkIEtMViB1bml0cywgYnV0IGluIGZ1dHVyZSB0aGF0IG1pZ2h0IGNoYW5nZSkgKi8KLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gIHJldHVybiBvdXRidWY7Ci0KLS8qIEVSUk9SUyAqLwotYmFkX2tsdl9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGtsdmRlcGF5LCAiYmFkIEtMViBwYWNrZXQsIGRyb3BwaW5nIik7Ci0gICAgZ3N0X3J0cF9rbHZfZGVwYXlfcmVzZXQgKGtsdmRlcGF5KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotaW5jb21wbGV0ZV9rbHZfcGFja2V0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoa2x2ZGVwYXksICJwYXJ0aWFsIEtMViBwYWNrZXQ6IGhhdmUgJXUgYnl0ZXMsIHdhbnQgJXUiLAotICAgICAgICAoZ3VpbnQpIGF2YWlsLCAoZ3VpbnQpICgxNiArIGxlbl9zaXplICsgdl9sZW4pKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKiBXZSdyZSB0cnlpbmcgdG8gYmUgcHJhZ21hdGljIGhlcmUsIG5vdCBxdWl0ZSBhcyBzdHJpY3QgYXMgdGhlIHNwZWMgd2FudHMKLSAqIHVzIHRvIGJlIHdpdGggcmVnYXJkIHRvIG1hcmtlciBiaXRzIGFuZCByZXN5bmNpbmcgYWZ0ZXIgcGFja2V0IGxvc3MgKi8KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9rbHZfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBLbHZEZXBheSAqa2x2ZGVwYXkgPSBHU1RfUlRQX0tMVl9ERVBBWSAoZGVwYXlsb2FkKTsKLSAgR3N0QnVmZmVyICpwYXlsb2FkLCAqb3V0YnVmID0gTlVMTDsKLSAgZ2Jvb2xlYW4gbWFya2VyLCBzdGFydCA9IEZBTFNFLCBtYXliZV9zdGFydDsKLSAgZ3VpbnQzMiBydHBfdHM7Ci0gIGd1aW50MTYgc2VxOwotICBndWludCBwYXlsb2FkX2xlbjsKLQotICAvKiBJZ25vcmUgRElTQ09OVCBvbiBmaXJzdCBidWZmZXIgYW5kIG9uIGJ1ZmZlcnMgZm9sbG93aW5nIGEgZGlzY29udCAqLwotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikgJiYga2x2ZGVwYXktPmxhc3RfcnRwX3RzICE9IC0xKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChrbHZkZXBheSwgIkRJU0NPTlQsIG5lZWQgdG8gcmVzeW5jIik7Ci0gICAgZ3N0X3J0cF9rbHZfZGVwYXlfcmVzZXQgKGtsdmRlcGF5KTsKLSAgfQotCi0gIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuIChydHApOwotCi0gIC8qIG1hcmtlciBiaXQgc2lnbmFscyBsYXN0IGZyYWdtZW50IG9mIGEgS0xWIHVuaXQgKi8KLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBzZXEgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxIChydHApOwotCi0gIC8qIHBhY2tldCBkaXJlY3RseSBhZnRlciBvbmUgd2l0aCBtYXJrZXIgYml0IHNldCA9PiBzdGFydCAqLwotICBzdGFydCA9IGtsdmRlcGF5LT5sYXN0X21hcmtlcl9zZXEgIT0gLTEKLSAgICAgICYmIGdzdF9ydHBfYnVmZmVyX2NvbXBhcmVfc2VxbnVtIChrbHZkZXBheS0+bGFzdF9tYXJrZXJfc2VxLCBzZXEpID09IDE7Ci0KLSAgLyogZGVkdWNlIHN0YXJ0IG9mIG5ldyBLTFYgdW5pdCBpbiBjYXNlIHNlbmRlciBkb2Vzbid0IHNldCBtYXJrZXIgYml0cwotICAgKiAoaXQncyBub3QgbGlrZSB0aGUgc3BlYyBpcyBhbWJpZ3VvdXMgYWJvdXQgdGhhdCwgYnV0IHdoYXQgY2FuIHlvdSBkbykgKi8KLSAgcnRwX3RzID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKTsKLQotICBtYXliZV9zdGFydCA9IGtsdmRlcGF5LT5sYXN0X3J0cF90cyA9PSAtMSB8fCBrbHZkZXBheS0+bGFzdF9ydHBfdHMgIT0gcnRwX3RzOwotCi0gIGtsdmRlcGF5LT5sYXN0X3J0cF90cyA9IHJ0cF90czsKLQotICAvKiBmYWxsYmFjayB0byBkZXRlY3Qgc2VsZi1jb250YWluZWQgc2luZ2xlIEtMViB1bml0ICh1c3VhbCBjYXNlKSAqLwotICBpZiAoKCFzdGFydCB8fCAhbWFya2VyIHx8IG1heWJlX3N0YXJ0KSAmJiBwYXlsb2FkX2xlbiA+IDE2KSB7Ci0gICAgY29uc3QgZ3VpbnQ4ICpkYXRhOwotICAgIGd1aW50NjQgdl9sZW47Ci0gICAgZ3NpemUgbGVuX3NpemU7Ci0KLSAgICBkYXRhID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKHJ0cCk7Ci0gICAgaWYgKEdTVF9SRUFEX1VJTlQzMl9CRSAoZGF0YSkgPT0gMHgwNjBlMmIzNCAmJgotICAgICAgICBrbHZfZ2V0X3ZsZW4gKGRhdGEgKyAxNiwgcGF5bG9hZF9sZW4gLSAxNiwgJnZfbGVuLCAmbGVuX3NpemUpKSB7Ci0gICAgICBpZiAoMTYgKyBsZW5fc2l6ZSArIHZfbGVuID09IHBheWxvYWRfbGVuKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChrbHZkZXBheSwgIkxvb2tzIGxpa2UgYSBzZWxmLWNvbnRhaW5lZCBLTFYgdW5pdCIpOwotICAgICAgICBtYXJrZXIgPSBUUlVFOwotICAgICAgICBzdGFydCA9IFRSVUU7Ci0gICAgICB9IGVsc2UgaWYgKDE2ICsgbGVuX3NpemUgKyB2X2xlbiA+IHBheWxvYWRfbGVuKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChrbHZkZXBheSwKLSAgICAgICAgICAgICJMb29rcyBsaWtlIHRoZSBzdGFydCBvZiBhIGZyYWdtZW50ZWQgS0xWIHVuaXQiKTsKLSAgICAgICAgc3RhcnQgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBhY2tldCBhbmQgbG9va3MgbGlrZSBhIHN0YXJ0LCBjbGVhciByZXN5bmMgZmxhZyAqLwotICBpZiAoa2x2ZGVwYXktPnJlc3luYyAmJiBrbHZkZXBheS0+bGFzdF9tYXJrZXJfc2VxID09IC0xICYmIHN0YXJ0KQotICAgIGtsdmRlcGF5LT5yZXN5bmMgPSBGQUxTRTsKLQotICBpZiAobWFya2VyKQotICAgIGtsdmRlcGF5LT5sYXN0X21hcmtlcl9zZXEgPSBzZXE7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGtsdmRlcGF5LCAicGF5bG9hZCBvZiAldSBieXRlcywgbWFya2VyPSVkLCBzdGFydD0lZCIsCi0gICAgICBwYXlsb2FkX2xlbiwgbWFya2VyLCBzdGFydCk7Ci0KLSAgaWYgKGtsdmRlcGF5LT5yZXN5bmMgJiYgIXN0YXJ0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoa2x2ZGVwYXksICJEcm9wcGluZyBidWZmZXIsIHdhaXRpbmcgdG8gcmVzeW5jIik7Ci0KLSAgICBpZiAobWFya2VyKQotICAgICAga2x2ZGVwYXktPnJlc3luYyA9IEZBTFNFOwotCi0gICAgZ290byBkb25lOwotICB9Ci0KLSAgaWYgKHN0YXJ0ICYmICFtYXJrZXIpCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9rbHZfZGVwYXlfcHJvY2Vzc19kYXRhIChrbHZkZXBheSk7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2J1ZmZlciAocnRwKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoa2x2ZGVwYXktPmFkYXB0ZXIsIHBheWxvYWQpOwotCi0gIGlmIChtYXJrZXIpCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9rbHZfZGVwYXlfcHJvY2Vzc19kYXRhIChrbHZkZXBheSk7Ci0KLWRvbmU6Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX2tsdl9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSdHBLbHZEZXBheSAqa2x2ZGVwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBrbHZkZXBheSA9IEdTVF9SVFBfS0xWX0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9rbHZfZGVwYXlfcmVzZXQgKGtsdmRlcGF5KTsKLSAgICAgIGtsdmRlcGF5LT5sYXN0X21hcmtlcl9zZXEgPSAtMTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfcnRwX2tsdl9kZXBheV9yZXNldCAoa2x2ZGVwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2tsdl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGtsdmRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX0tMVl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGtsdmRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cGtsdmRlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTI1NmQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBrbHZkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJUUCBLTFYgRGVwYXlsb2FkZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+PgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQ2VudHJpY3VsYXIgTHRkCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfS0xWX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfS0xWX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9LTFZfREVQQVkgXAotICAoZ3N0X3J0cF9rbHZfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9LTFZfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfS0xWX0RFUEFZLEdzdFJ0cEtsdkRlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9LTFZfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX0tMVl9ERVBBWSxHc3RSdHBLbHZEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9LTFZfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfS0xWX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9LTFZfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0tMVl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBLbHZEZXBheSBHc3RSdHBLbHZEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBLbHZEZXBheUNsYXNzIEdzdFJ0cEtsdkRlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwS2x2RGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gICAgcmVzeW5jOwotICBnaW50ICAgICAgICBsYXN0X21hcmtlcl9zZXE7ICAgLyogLTEgaWYgdW5zZXQsIG90aGVyd2lzZSAwLUdfTUFYVUlOVDE2ICovCi0gIGdpbnQ2NCAgICAgIGxhc3RfcnRwX3RzOyAgICAgICAvKiAtMSBpZiB1bnNldCwgb3RoZXJ3aXNlIDAtR19NQVhVSU5UMzIgKi8KLX07Ci0KLXN0cnVjdCBfR3N0UnRwS2x2RGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19HTlVDX0lOVEVSTkFMIEdUeXBlICAgICBnc3RfcnRwX2tsdl9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfR05VQ19JTlRFUk5BTCBnYm9vbGVhbiAgZ3N0X3J0cF9rbHZfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfS0xWX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBrbHZwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwa2x2cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDdkMmMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBrbHZwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKiBHU3RyZWFtZXIgUlRQIEtMViBQYXlsb2FkZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+PgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQ2VudHJpY3VsYXIgTHRkCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwa2x2cGF5Ci0gKiBAc2VlX2Fsc286IHJ0cGtsdmRlcGF5Ci0gKgotICogUGF5bG9hZHMgS0xWIG1ldGFkYXRhIGludG8gUlRQIHBhY2tldHMgYWNjb3JkaW5nIHRvIFJGQyA2NTk3LgotICogRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIHNlZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU5NwotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXZpZGVvLXdpdGgta2x2LnRzICEgdHNkZW11eCAhIHJ0cGtsdnBheSAhIHVkcHNpbmsKLSAqIF18IFRoaXMgZXhhbXBsZSBwaXBlbGluZSB3aWxsIHBheWxvYWQgYW4gUlRQIEtMViBzdHJlYW0gZXh0cmFjdGVkIGZyb20gYW4KLSAqIE1QRUctVFMgc3RyZWFtIGFuZCBzZW5kIGl0IHZpYSBVRFAgdG8gYW4gUlRQIHJlY2VpdmVyLgotICogPC9yZWZzZWN0Mj4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cnRwa2x2cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChrbHZwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKGtsdnBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBhcHBsaWNhdGlvbiwgY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVhdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgU01QVEUzMzZNIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoIm1ldGEveC1rbHYsIHBhcnNlZCA9IChib29sKSB0cnVlIikpOwotCi0jZGVmaW5lIGdzdF9ydHBfa2x2X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBLbHZQYXksIGdzdF9ydHBfa2x2X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2tsdl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXksCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9rbHZfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5LAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2tsdl9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwS2x2UGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqcnRwYmFzZXBheV9jbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoa2x2cGF5X2RlYnVnLCAia2x2cGF5IiwgMCwgIlJUUCBLTFYgUGF5bG9hZGVyIik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZzcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIEtMViBQYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkcyBLTFYgKFNNUFRFIFNUIDMzNikgbWV0YWRhdGEgYXMgUlRQIHBhY2tldHMiLAotICAgICAgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbUBjZW50cmljdWxhci5jb20+Iik7Ci0KLSAgcnRwYmFzZXBheV9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIHJ0cGJhc2VwYXlfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9rbHZfcGF5X3NldGNhcHM7Ci0gIHJ0cGJhc2VwYXlfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX2tsdl9wYXlfaGFuZGxlX2J1ZmZlcjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfa2x2X3BheV9pbml0IChHc3RSdHBLbHZQYXkgKiBrbHZwYXkpCi17Ci0gIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSB5ZXQgKi8KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2tsdl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXksIEdzdENhcHMgKiBjYXBzKQotewotICAvKiBGSVhNRTogYWxsb3cgb3RoZXIgY2xvY2sgcmF0ZXMgKi8KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheSwgImFwcGxpY2F0aW9uIiwgVFJVRSwgIlNNUFRFMzM2TSIsCi0gICAgICA5MDAwMCk7Ci0KLSAgcmV0dXJuIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChwYXksIE5VTEwpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9rbHZfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdCA9IE5VTEw7Ci0gIEdzdFJ0cEtsdlBheSAqcGF5OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBnc2l6ZSBvZmZzZXQ7Ci0gIGd1aW50IG10dSwgcnRwX2hlYWRlcl9zaXplLCBtYXhfcGF5bG9hZF9zaXplOwotCi0gIHBheSA9IEdTVF9SVFBfS0xWX1BBWSAoYmFzZXBheWxvYWQpOwotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKGJhc2VwYXlsb2FkKTsKLQotICBydHBfaGVhZGVyX3NpemUgPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX2hlYWRlcl9sZW4gKDApOwotICBtYXhfcGF5bG9hZF9zaXplID0gbXR1IC0gcnRwX2hlYWRlcl9zaXplOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG1hcC5zaXplID09IDApCi0gICAgZ290byBkb25lOwotCi0gIC8qIEtMViBjb2Rpbmcgc2hhbGwgdXNlIGFuZCBvbmx5IHVzZSBhIGZpeGVkIDE2LWJ5dGUgU01QVEUtYWRtaW5pc3RlcmVkCi0gICAqIFVuaXZlcnNhbCBMYWJlbCwgYWNjb3JkaW5nIHRvIFNNUFRFIDI5OE0gYXMgS2V5IChSZWMuIElUVSBSLUJULjE2NTMtMSkgKi8KLSAgaWYgKG1hcC5zaXplIDwgMTYgfHwgR1NUX1JFQURfVUlOVDMyX0JFIChtYXAuZGF0YSkgIT0gMHgwNjBFMkIzNCkKLSAgICBnb3RvIGJhZF9pbnB1dDsKLQotICBpZiAobWFwLnNpemUgPiBtYXhfcGF5bG9hZF9zaXplKQotICAgIGxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3ICgpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYXksICIlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIG9mIGRhdGEgdG8gcGF5bG9hZCIsCi0gICAgICBtYXAuc2l6ZSk7Ci0KLSAgb2Zmc2V0ID0gMDsKLSAgd2hpbGUgKG9mZnNldCA8IG1hcC5zaXplKSB7Ci0gICAgR3N0QnVmZmVyICpwYXlsb2FkYnVmOwotICAgIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwgfTsKLSAgICBndWludCBwYXlsb2FkX3NpemU7Ci0gICAgZ3VpbnQgYnl0ZXNfbGVmdDsKLQotICAgIGJ5dGVzX2xlZnQgPSBtYXAuc2l6ZSAtIG9mZnNldDsKLSAgICBwYXlsb2FkX3NpemUgPSBNSU4gKGJ5dGVzX2xlZnQsIG1heF9wYXlsb2FkX3NpemUpOwotCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlICgwLCAwLCAwKTsKLQotICAgIGlmIChwYXlsb2FkX3NpemUgPT0gYnl0ZXNfbGVmdCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHBheSwgImxhc3QgcGFja2V0IG9mIEtMViB1bml0Iik7Ci0gICAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0gICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCAxKTsKLSAgICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocGF5LCAicGFja2V0IHdpdGggcGF5bG9hZCBzaXplICV1IiwgcGF5bG9hZF9zaXplKTsKLQotICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChwYXkpLCBvdXRidWYsIGJ1ZiwgMCk7Ci0KLSAgICBwYXlsb2FkYnVmID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoYnVmLCBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLAotICAgICAgICBvZmZzZXQsIHBheWxvYWRfc2l6ZSk7Ci0KLSAgICAvKiBqb2luIHJ0cCBoZWFkZXIgKyBwYXlsb2FkIG1lbW9yeSBwYXJ0cyAqLwotICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChvdXRidWYsIHBheWxvYWRidWYpOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBHU1RfQlVGRkVSX1BUUyAoYnVmKTsKLSAgICBHU1RfQlVGRkVSX0RUUyAob3V0YnVmKSA9IEdTVF9CVUZGRVJfRFRTIChidWYpOwotCi0gICAgLyogYW5kIGFkZCB0byBsaXN0ICovCi0gICAgaWYgKGxpc3QgIT0gTlVMTCkKLSAgICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIC0xLCBvdXRidWYpOwotCi0gICAgb2Zmc2V0ICs9IHBheWxvYWRfc2l6ZTsKLSAgfQotCi1kb25lOgotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgaWYgKGxpc3QgIT0gTlVMTCkKLSAgICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoX2xpc3QgKGJhc2VwYXlsb2FkLCBsaXN0KTsKLSAgZWxzZSBpZiAob3V0YnVmICE9IE5VTEwpCi0gICAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoYmFzZXBheWxvYWQsIG91dGJ1Zik7Ci0KLSAgcmV0dXJuIHJldDsKLQotLyogRVJST1JTICovCi1iYWRfaW5wdXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwYXksICJJbnB1dCBkb2Vzbid0IGxvb2sgbGlrZSBhIEtMViBwYWNrZXQsIGlnbm9yaW5nIik7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2tsdl9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBrbHZwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfS0xWX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cGtsdnBheS5oIGIvZ3N0L3J0cC9nc3RydHBrbHZwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlODEzNC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cGtsdnBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJUUCBLTFYgUGF5bG9hZGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW1AY2VudHJpY3VsYXIuY29tPj4KLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IENlbnRyaWN1bGFyIEx0ZAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX0tMVl9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9LTFZfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0tMVl9QQVkgXAotICAoZ3N0X3J0cF9rbHZfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfS0xWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9LTFZfUEFZLEdzdFJ0cEtsdlBheSkpCi0jZGVmaW5lIEdTVF9SVFBfS0xWX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfS0xWX1BBWSxHc3RSdHBLbHZQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfS0xWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9LTFZfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9LTFZfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9LTFZfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEtsdlBheSBHc3RSdHBLbHZQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwS2x2UGF5Q2xhc3MgR3N0UnRwS2x2UGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwS2x2UGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHJ0cGJhc2VwYXlsb2FkOwotfTsKLQotc3RydWN0IF9Hc3RSdHBLbHZQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotfTsKLQotR19HTlVDX0lOVEVSTkFMICBHVHlwZSAgICAgZ3N0X3J0cF9rbHZfcGF5X2dldF90eXBlICh2b2lkKTsKLQotR19HTlVDX0lOVEVSTkFMICBnYm9vbGVhbiAgZ3N0X3J0cF9rbHZfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0tMVl9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhMzEwOC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wMXNkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RydHBtcDFzZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi0vKiBSdHBNUDFTRGVwYXkgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MQVNUCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDFzX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vbXBlZyxzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZSIpCi0gICAgKTsKLQotLyogVGhlIHNwZWMgc2F5cyB2aWRlby9NUDFTIGJ1dCBJIGhhdmUgc2VlbiBzdHJlYW1zIHdpdGggb3RoZXIvTVAxUyBzbyB3ZSB3aWxsCi0gKiBhbGxvdyB0aGVtIGJvdGggKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX21wMXNfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJvdGhlclwiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJNUDFTXCI7IgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJNUDFTXCIiKQotICAgICk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFJ0cE1QMVNEZXBheSwgZ3N0X3J0cF9tcDFzX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wMXNfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX21wMXNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDFzX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cE1QMVNEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX21wMXNfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX21wMXNfZGVwYXlfc2V0Y2FwczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wMXNfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcDFzX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIE1QRUcxIFN5c3RlbSBTdHJlYW0gZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIE1QRUcxIFN5c3RlbSBTdHJlYW1zIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzNTU1KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXAxc19kZXBheV9pbml0IChHc3RSdHBNUDFTRGVwYXkgKiBydHBtcDFzZGVwYXkpCi17Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcDFzX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBjbG9ja19yYXRlOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGNsb2NrX3JhdGUgPSA5MDAwMDsgICAgICAgICAvKiBkZWZhdWx0ICovCi0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgc3JjY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby9tcGVnIiwKLSAgICAgICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9tcDFzX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotCi0gIGlmIChvdXRidWYpIHsKLSAgICBHU1RfREVCVUcgKCJnc3RfcnRwX21wMXNfZGVwYXlfY2hhaW46IHB1c2hpbmcgYnVmZmVyIG9mIHNpemUgJSIKLSAgICAgICAgR19HU0laRV9GT1JNQVQsIGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dGJ1ZikpOwotCi0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGRlcGF5bG9hZCksIG91dGJ1ZiwgMCk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9tcDFzX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwbXAxc2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX01QMVNfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXAxc2RlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MjkzM2IuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDFzZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9NUDFTX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVAxU19ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfTVAxU19ERVBBWSBcCi0gIChnc3RfcnRwX21wMXNfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9NUDFTX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX01QMVNfREVQQVksR3N0UnRwTVAxU0RlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9NUDFTX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NUDFTX0RFUEFZLEdzdFJ0cE1QMVNEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9NUDFTX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX01QMVNfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QMVNfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX01QMVNfREVQQVkpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QMVNEZXBheSBHc3RSdHBNUDFTRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTVAxU0RlcGF5Q2xhc3MgR3N0UnRwTVAxU0RlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwTVAxU0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotfTsKLQotc3RydWN0IF9Hc3RSdHBNUDFTRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9tcDFzX2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9tcDFzX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX01QMVNfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhlMGQwYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RydHBtcDJ0ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi0vKiBSdHBNUDJURGVwYXkgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfU0tJUF9GSVJTVF9CWVRFUwkwCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1NLSVBfRklSU1RfQllURVMKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX21wMnRfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby9tcGVndHMsIgotICAgICAgICAicGFja2V0c2l6ZT0oaW50KTE4OCwiICJzeXN0ZW1zdHJlYW09KGJvb2xlYW4pdHJ1ZSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXAydF9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYIF0sICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSB7IE1QMlQsIE1QMlQtRVMgfSA7IgotICAgICAgICAvKiBBbGwgb3B0aW9uYWwgcGFyYW1ldGVycwotICAgICAgICAgKgotICAgICAgICAgKiAicHJvZmlsZS1sZXZlbC1pZD1bMSxNQVhdIgotICAgICAgICAgKiAiY29uZmlnPSIgCi0gICAgICAgICAqLwotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfTVAyVF9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVggXSIpCi0gICAgKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwTVAyVERlcGF5LCBnc3RfcnRwX21wMnRfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfbXAydF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfbXAydF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXAydF9kZXBheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX21wMnRfZGVwYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDJ0X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cE1QMlREZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX21wMnRfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX21wMnRfZGVwYXlfc2V0Y2FwczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcnRwX21wMnRfZGVwYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX21wMnRfZGVwYXlfZ2V0X3Byb3BlcnR5OwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXAydF9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wMnRfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgTVBFRyBUcmFuc3BvcnQgU3RyZWFtIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBNUEVHMiBUUyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjI1MCkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+LCAiCi0gICAgICAiVGhpanMgVmVybWVpciA8dGhpanMudmVybWVpckBiYXJjby5jb20+Iik7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TS0lQX0ZJUlNUX0JZVEVTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJza2lwLWZpcnN0LWJ5dGVzIiwKLSAgICAgICAgICAiU2tpcCBmaXJzdCBieXRlcyIsCi0gICAgICAgICAgIlRoZSBhbW91bnQgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIHNraXBwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF5bG9hZCIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDJ0X2RlcGF5X2luaXQgKEdzdFJ0cE1QMlREZXBheSAqIHJ0cG1wMnRkZXBheSkKLXsKLSAgcnRwbXAydGRlcGF5LT5za2lwX2ZpcnN0X2J5dGVzID0gREVGQVVMVF9TS0lQX0ZJUlNUX0JZVEVTOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXAydF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZ3RzIiwKLSAgICAgICJwYWNrZXRzaXplIiwgR19UWVBFX0lOVCwgMTg4LAotICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5bG9hZCksIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX21wMnRfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBNUDJURGVwYXkgKnJ0cG1wMnRkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGdpbnQgcGF5bG9hZF9sZW4sIGxlZnRvdmVyOwotCi0gIHJ0cG1wMnRkZXBheSA9IEdTVF9SVFBfTVAyVF9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBpZiAoR19VTkxJS0VMWSAocGF5bG9hZF9sZW4gPD0gcnRwbXAydGRlcGF5LT5za2lwX2ZpcnN0X2J5dGVzKSkKLSAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotICBwYXlsb2FkX2xlbiAtPSBydHBtcDJ0ZGVwYXktPnNraXBfZmlyc3RfYnl0ZXM7Ci0KLSAgLyogUkZDIDIyNTAKLSAgICoKLSAgICogMi4gRW5jYXBzdWxhdGlvbiBvZiBNUEVHIFN5c3RlbSBhbmQgVHJhbnNwb3J0IFN0cmVhbXMKLSAgICoKLSAgICogRm9yIE1QRUcyIFRyYW5zcG9ydCBTdHJlYW1zIHRoZSBSVFAgcGF5bG9hZCB3aWxsIGNvbnRhaW4gYW4gaW50ZWdyYWwKLSAgICogbnVtYmVyIG9mIE1QRUcgdHJhbnNwb3J0IHBhY2tldHMuCi0gICAqLwotICBsZWZ0b3ZlciA9IHBheWxvYWRfbGVuICUgMTg4OwotICBpZiAoR19VTkxJS0VMWSAobGVmdG92ZXIpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJXZSBkb24ndCBoYXZlIGFuIGludGVncmFsIG51bWJlciBvZiBidWZmZXJzIChsZWZ0b3ZlcjogJWQpIiwKLSAgICAgICAgbGVmdG92ZXIpOwotCi0gICAgcGF5bG9hZF9sZW4gLT0gbGVmdG92ZXI7Ci0gIH0KLQotICBvdXRidWYgPQotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsCi0gICAgICBydHBtcDJ0ZGVwYXktPnNraXBfZmlyc3RfYnl0ZXMsIHBheWxvYWRfbGVuKTsKLQotICBpZiAob3V0YnVmKSB7Ci0gICAgR1NUX0RFQlVHICgiZ3N0X3J0cF9tcDJ0X2RlcGF5X2NoYWluOiBwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpKTsKLQotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheWxvYWQpLCBvdXRidWYsIDApOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLWVtcHR5X3BhY2tldDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cG1wMnRkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJQYWNrZXQgd2FzIGVtcHR5IikpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wMnRfZGVwYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cE1QMlREZXBheSAqcnRwbXAydGRlcGF5OwotCi0gIHJ0cG1wMnRkZXBheSA9IEdTVF9SVFBfTVAyVF9ERVBBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU0tJUF9GSVJTVF9CWVRFUzoKLSAgICAgIHJ0cG1wMnRkZXBheS0+c2tpcF9maXJzdF9ieXRlcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXAydF9kZXBheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwTVAyVERlcGF5ICpydHBtcDJ0ZGVwYXk7Ci0KLSAgcnRwbXAydGRlcGF5ID0gR1NUX1JUUF9NUDJUX0RFUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TS0lQX0ZJUlNUX0JZVEVTOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0cG1wMnRkZXBheS0+c2tpcF9maXJzdF9ieXRlcyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX21wMnRfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtcDJ0ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfTVAyVF9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBtcDJ0ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE5MzZkYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wMnRkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX01QMlRfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9NUDJUX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9NUDJUX0RFUEFZIFwKLSAgKGdzdF9ydHBfbXAydF9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX01QMlRfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTVAyVF9ERVBBWSxHc3RSdHBNUDJURGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX01QMlRfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX01QMlRfREVQQVksR3N0UnRwTVAyVERlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QMlRfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVAyVF9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVAyVF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVAyVF9ERVBBWSkpCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTVAyVERlcGF5IEdzdFJ0cE1QMlREZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDJURGVwYXlDbGFzcyBHc3RSdHBNUDJURGVwYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBNUDJURGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgZ3VpbnQ4IHNraXBfZmlyc3RfYnl0ZXM7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cE1QMlREZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX21wMnRfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX21wMnRfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfTVAyVF9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXAydHBheS5jIGIvZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZjk0OGUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgImdzdHJ0cG1wMnRwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDJ0X3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL21wZWd0cywiCi0gICAgICAgICJwYWNrZXRzaXplPShpbnQpMTg4LCIgInN5c3RlbXN0cmVhbT0oYm9vbGVhbil0cnVlIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDJ0X3BheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9NUDJUX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIk1QMlRcIiA7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTVAyVFwiIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tcDJ0X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcDJ0X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqCi0gICAgcGF5bG9hZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfbXAydF9wYXlfZmx1c2ggKEdzdFJUUE1QMlRQYXkgKiBydHBtcDJ0cGF5KTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXAydF9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi0jZGVmaW5lIGdzdF9ydHBfbXAydF9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UlRQTVAyVFBheSwgZ3N0X3J0cF9tcDJ0X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wMnRfcGF5X2NsYXNzX2luaXQgKEdzdFJUUE1QMlRQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9tcDJ0X3BheV9maW5hbGl6ZTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX21wMnRfcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF9tcDJ0X3BheV9oYW5kbGVfYnVmZmVyOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXAydF9wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXAydF9wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgTVBFRzIgVHJhbnNwb3J0IFN0cmVhbSBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgTVBFRzIgVFMgaW50byBSVFAgcGFja2V0cyAoUkZDIDIyNTApIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDJ0X3BheV9pbml0IChHc3RSVFBNUDJUUGF5ICogcnRwbXAydHBheSkKLXsKLSAgR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cG1wMnRwYXkpLT5jbG9ja19yYXRlID0gOTAwMDA7Ci0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEX1BUIChydHBtcDJ0cGF5KSA9IEdTVF9SVFBfUEFZTE9BRF9NUDJUOwotCi0gIHJ0cG1wMnRwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wMnRfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSVFBNUDJUUGF5ICpydHBtcDJ0cGF5OwotCi0gIHJ0cG1wMnRwYXkgPSBHU1RfUlRQX01QMlRfUEFZIChvYmplY3QpOwotCi0gIGdfb2JqZWN0X3VucmVmIChydHBtcDJ0cGF5LT5hZGFwdGVyKTsKLSAgcnRwbXAydHBheS0+YWRhcHRlciA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXAydF9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAidmlkZW8iLAotICAgICAgcGF5bG9hZC0+cHQgIT0gR1NUX1JUUF9QQVlMT0FEX01QMlQsICJNUDJUIiwgOTAwMDApOwotICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXAydF9wYXlfZmx1c2ggKEdzdFJUUE1QMlRQYXkgKiBydHBtcDJ0cGF5KQotewotICBndWludCBhdmFpbCwgbXR1OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwbXAydHBheS0+YWRhcHRlcik7Ci0KLSAgbXR1ID0gR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBtcDJ0cGF5KTsKLQotICB3aGlsZSAoYXZhaWwgPiAwICYmIChyZXQgPT0gR1NUX0ZMT1dfT0spKSB7Ci0gICAgZ3VpbnQgdG93cml0ZTsKLSAgICBndWludCBwYXlsb2FkX2xlbjsKLSAgICBndWludCBwYWNrZXRfbGVuOwotICAgIEdzdEJ1ZmZlciAqcGF5YnVmOwotCi0gICAgLyogdGhpcyB3aWxsIGJlIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHBhY2tldCAqLwotICAgIHBhY2tldF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKGF2YWlsLCAwLCAwKTsKLQotICAgIC8qIGZpbGwgb25lIE1UVSBvciBhbGwgYXZhaWxhYmxlIGJ5dGVzICovCi0gICAgdG93cml0ZSA9IE1JTiAocGFja2V0X2xlbiwgbXR1KTsKLQotICAgIC8qIHRoaXMgaXMgdGhlIHBheWxvYWQgbGVuZ3RoICovCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuICh0b3dyaXRlLCAwLCAwKTsKLSAgICBwYXlsb2FkX2xlbiAtPSBwYXlsb2FkX2xlbiAlIDE4ODsKLQotICAgIC8qIG5lZWQgd2hvbGUgcGFja2V0cyAqLwotICAgIGlmICghcGF5bG9hZF9sZW4pCi0gICAgICBicmVhazsKLQotICAgIC8qIGNyZWF0ZSBidWZmZXIgdG8gaG9sZCB0aGUgcGF5bG9hZCAqLwotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMCwgMCwgMCk7Ci0KLSAgICAvKiBnZXQgcGF5bG9hZCAqLwotICAgIHBheWJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKHJ0cG1wMnRwYXktPmFkYXB0ZXIsIHBheWxvYWRfbGVuKTsKLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXAydHBheSksIG91dGJ1ZiwgcGF5YnVmLCAwKTsKLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAob3V0YnVmLCBwYXlidWYpOwotICAgIGF2YWlsIC09IHBheWxvYWRfbGVuOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBydHBtcDJ0cGF5LT5maXJzdF90czsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gcnRwbXAydHBheS0+ZHVyYXRpb247Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDJ0cGF5LCAicHVzaGluZyBidWZmZXIgb2Ygc2l6ZSAldSIsCi0gICAgICAgIChndWludCkgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSk7Ci0KLSAgICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwbXAydHBheSksIG91dGJ1Zik7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9tcDJ0X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UlRQTVAyVFBheSAqcnRwbXAydHBheTsKLSAgZ3VpbnQgc2l6ZSwgYXZhaWwsIHBhY2tldF9sZW47Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBydHBtcDJ0cGF5ID0gR1NUX1JUUF9NUDJUX1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi1hZ2FpbjoKLSAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcDJ0cGF5LT5hZGFwdGVyKTsKLQotICAvKiBJbml0aWFsaXplIG5ldyBSVFAgcGF5bG9hZCAqLwotICBpZiAoYXZhaWwgPT0gMCkgewotICAgIHJ0cG1wMnRwYXktPmZpcnN0X3RzID0gdGltZXN0YW1wOwotICAgIHJ0cG1wMnRwYXktPmR1cmF0aW9uID0gZHVyYXRpb247Ci0gIH0KLQotICAvKiBnZXQgcGFja2V0IGxlbmd0aCBvZiBwcmV2aW91cyBkYXRhIGFuZCB0aGlzIG5ldyBkYXRhICovCi0gIHBhY2tldF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKGF2YWlsICsgc2l6ZSwgMCwgMCk7Ci0KLSAgLyogaWYgdGhpcyBidWZmZXIgaXMgZ29pbmcgdG8gb3ZlcmZsb3cgdGhlIHBhY2tldCwgZmx1c2ggd2hhdCB3ZSBoYXZlLAotICAgKiBvciBpZiB1cHN0cmVhbSBpcyBoYW5kaW5nIHVzIHNldmVyYWwgcGFja2V0cywgdG8ga2VlcCBsYXRlbmN5IGxvdyAqLwotICBpZiAoIXNpemUgfHwgZ3N0X3J0cF9iYXNlX3BheWxvYWRfaXNfZmlsbGVkIChiYXNlcGF5bG9hZCwKLSAgICAgICAgICBwYWNrZXRfbGVuLCBydHBtcDJ0cGF5LT5kdXJhdGlvbiArIGR1cmF0aW9uKSkgewotICAgIHJldCA9IGdzdF9ydHBfbXAydF9wYXlfZmx1c2ggKHJ0cG1wMnRwYXkpOwotICAgIHJ0cG1wMnRwYXktPmZpcnN0X3RzID0gdGltZXN0YW1wOwotICAgIHJ0cG1wMnRwYXktPmR1cmF0aW9uID0gZHVyYXRpb247Ci0KLSAgICAvKiBrZWVwIGZpbGxpbmcgdGhlIHBheWxvYWQgKi8KLSAgfSBlbHNlIHsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSkKLSAgICAgIHJ0cG1wMnRwYXktPmR1cmF0aW9uICs9IGR1cmF0aW9uOwotICB9Ci0KLSAgLyogY29weSBidWZmZXIgdG8gYWRhcHRlciAqLwotICBpZiAoYnVmZmVyKSB7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwbXAydHBheS0+YWRhcHRlciwgYnVmZmVyKTsKLSAgICBidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHNpemUgPj0gKDE4OCAqIDIpKSB7Ci0gICAgc2l6ZSA9IDA7Ci0gICAgZ290byBhZ2FpbjsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXAydF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtcDJ0cGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX01QMlRfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXAydHBheS5oIGIvZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZjQ5NTkuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDJ0cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1JUUF9NUDJUX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX01QMlRfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUE1QMlRQYXkgR3N0UlRQTVAyVFBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBNUDJUUGF5Q2xhc3MgR3N0UlRQTVAyVFBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9NUDJUX1BBWSBcCi0gIChnc3RfcnRwX21wMnRfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTVAyVF9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTVAyVF9QQVksR3N0UlRQTVAyVFBheSkpCi0jZGVmaW5lIEdTVF9SVFBfTVAyVF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX01QMlRfUEFZLEdzdFJUUE1QMlRQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVAyVF9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVAyVF9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QMlRfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NUDJUX1BBWSkpCi0KLXN0cnVjdCBfR3N0UlRQTVAyVFBheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCBwYXlsb2FkOwotICAKLSAgR3N0QWRhcHRlciAgKmFkYXB0ZXI7Ci0gIEdzdENsb2NrVGltZSBmaXJzdF90czsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotfTsKLQotc3RydWN0IF9Hc3RSVFBNUDJUUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX21wMnRfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9tcDJ0X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUDJUX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTVmMzQxLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBOb2tpYSBDb3Jwb3JhdGlvbiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqICAgICAgICAgICAgICAgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwbXA0YWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwbXA0YWRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBtcDRhZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX21wNGFfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby9tcGVnLCIKLSAgICAgICAgIm1wZWd2ZXJzaW9uID0gKGludCkgNCwiICJmcmFtZWQgPSAoYm9vbGVhbikgeyBmYWxzZSwgdHJ1ZSB9LCAiCi0gICAgICAgICJzdHJlYW0tZm9ybWF0ID0gKHN0cmluZykgcmF3IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDRhX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJNUDRBLUxBVE1cIiIKLSAgICAgICAgLyogQWxsIG9wdGlvbmFsIHBhcmFtZXRlcnMKLSAgICAgICAgICoKLSAgICAgICAgICogInByb2ZpbGUtbGV2ZWwtaWQ9WzEsTUFYXSIKLSAgICAgICAgICogImNvbmZpZz0iCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfbXA0YV9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBNUDRBRGVwYXksIGdzdF9ydHBfbXA0YV9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX21wNGFfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tcDRhX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9tcDRhX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfbXA0YV9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNGFfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwTVA0QURlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9tcDRhX2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfbXA0YV9kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9tcDRhX2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9tcDRhX2RlcGF5X3NldGNhcHM7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcDRhX2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXA0YV9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBNUEVHNCBhdWRpbyBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgTVBFRzQgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDMwMTYpIiwKLSAgICAgICJOb2tpYSBDb3Jwb3JhdGlvbiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPiksICIKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBtcDRhZGVwYXlfZGVidWcsICJydHBtcDRhZGVwYXkiLCAwLAotICAgICAgIk1QRUc0IGF1ZGlvIFJUUCBEZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRhX2RlcGF5X2luaXQgKEdzdFJ0cE1QNEFEZXBheSAqIHJ0cG1wNGFkZXBheSkKLXsKLSAgcnRwbXA0YWRlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBtcDRhZGVwYXktPmZyYW1lZCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRhX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBNUDRBRGVwYXkgKnJ0cG1wNGFkZXBheTsKLQotICBydHBtcDRhZGVwYXkgPSBHU1RfUlRQX01QNEFfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cG1wNGFkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cG1wNGFkZXBheS0+YWRhcHRlciA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgY29uc3QgZ3VpbnQgYWFjX3NhbXBsZV9yYXRlc1tdID0geyA5NjAwMCwgODgyMDAsIDY0MDAwLCA0ODAwMCwKLSAgNDQxMDAsIDMyMDAwLCAyNDAwMCwgMjIwNTAsIDE2MDAwLCAxMjAwMCwgMTEwMjUsIDgwMDAsIDczNTAKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcDRhX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0UnRwTVA0QURlcGF5ICpydHBtcDRhZGVwYXk7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIGNvbnN0IGdjaGFyICpzdHI7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgZ2ludCBvYmplY3RfdHlwZTsKLSAgZ2ludCBjaGFubmVscyA9IDI7ICAgICAgICAgICAgLyogZGVmYXVsdCAqLwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwbXA0YWRlcGF5ID0gR1NUX1JUUF9NUDRBX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHJ0cG1wNGFkZXBheS0+ZnJhbWVkID0gRkFMU0U7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IDkwMDAwOyAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAib2JqZWN0IiwgJm9iamVjdF90eXBlKSkKLSAgICBvYmplY3RfdHlwZSA9IDI7ICAgICAgICAgICAgLyogQUFDIExDIGRlZmF1bHQgKi8KLQotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLAotICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNCwKLSAgICAgICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgRkFMU0UsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLAotICAgICAgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAicmF3IiwgTlVMTCk7Ci0KLSAgaWYgKChzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImNvbmZpZyIpKSkgewotICAgIEdWYWx1ZSB2ID0geyAwIH07Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHU1RfVFlQRV9CVUZGRVIpOwotICAgIGlmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2LCBzdHIpKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICAgIEdzdE1hcEluZm8gbWFwOwotICAgICAgZ3VpbnQ4ICpkYXRhOwotICAgICAgZ3NpemUgc2l6ZTsKLSAgICAgIGdpbnQgaTsKLSAgICAgIGd1aW50MzIgcmF0ZSA9IDA7Ci0gICAgICBndWludDggb2JqX3R5cGUgPSAwLCBzcl9pZHggPSAwLCBjaGFubmVscyA9IDA7Ci0gICAgICBHc3RCaXRSZWFkZXIgYnI7Ci0KLSAgICAgIGJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICgmdik7Ci0gICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKTsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgIGRhdGEgPSBtYXAuZGF0YTsKLSAgICAgIHNpemUgPSBtYXAuc2l6ZTsKLQotICAgICAgaWYgKHNpemUgPCAyKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAiY29uZmlnIHRvbyBzaG9ydCAoJWQgPCAyKSIsCi0gICAgICAgICAgICAoZ2ludCkgc2l6ZSk7Ci0gICAgICAgIGdvdG8gYmFkX2NvbmZpZzsKLSAgICAgIH0KLQotICAgICAgLyogUGFyc2UgU3RyZWFtTXV4Q29uZmlnIGFjY29yZGluZyB0byBJU08vSUVDIDE0NDk2LTM6Ci0gICAgICAgKgotICAgICAgICogYXVkaW9NdXhWZXJzaW9uICAgICAgICAgICA9PSAwICgxIGJpdCkKLSAgICAgICAqIGFsbFN0cmVhbXNTYW1lVGltZUZyYW1pbmcgPT0gMSAoMSBiaXQpCi0gICAgICAgKiBudW1TdWJGcmFtZXMgICAgICAgICAgICAgID09IHJ0cG1wNGFkZXBheS0+bnVtU3ViRnJhbWVzICg2IGJpdHMpCi0gICAgICAgKiBudW1Qcm9ncmFtICAgICAgICAgICAgICAgID09IDAgKDQgYml0cykKLSAgICAgICAqIG51bUxheWVyICAgICAgICAgICAgICAgICAgPT0gMCAoMyBiaXRzKQotICAgICAgICoKLSAgICAgICAqIFdlIG9ubHkgcmVxdWlyZSBhdWRpb011eFZlcnNpb24gPT0gMDsKLSAgICAgICAqCi0gICAgICAgKiBUaGUgcmVtYWluaW5nIGJpdCBvZiB0aGUgc2Vjb25kIGJ5dGUgYW5kIHRoZSByZXN0IG9mIHRoZSBiaXRzIGFyZSB1c2VkCi0gICAgICAgKiBmb3IgYXVkaW9TcGVjaWZpY0NvbmZpZyB3aGljaCB3ZSBuZWVkIHRvIHNldCBpbiBjb2RlY19pbmZvLgotICAgICAgICovCi0gICAgICBpZiAoKGRhdGFbMF0gJiAweDgwKSAhPSAweDAwKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAidW5rbm93biBhdWRpb011eFZlcnNpb24gMSIpOwotICAgICAgICBnb3RvIGJhZF9jb25maWc7Ci0gICAgICB9Ci0KLSAgICAgIHJ0cG1wNGFkZXBheS0+bnVtU3ViRnJhbWVzID0gKGRhdGFbMF0gJiAweDNGKTsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGFkZXBheSwgIm51bVN1YkZyYW1lcyAlZCIsCi0gICAgICAgICAgcnRwbXA0YWRlcGF5LT5udW1TdWJGcmFtZXMpOwotCi0gICAgICAvKiBzaGlmdCByZXN0IG9mIHN0cmluZyAxNSBiaXRzIGRvd24gKi8KLSAgICAgIHNpemUgLT0gMjsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgZGF0YVtpXSA9ICgoZGF0YVtpICsgMV0gJiAxKSA8PCA3KSB8ICgoZGF0YVtpICsgMl0gJiAweGZlKSA+PiAxKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJmJyLCBkYXRhLCBzaXplKTsKLQotICAgICAgLyogYW55IG9iamVjdCB0eXBlIGlzIGZpbmUsIHdlIG5lZWQgdG8gY29weSBpdCB0byB0aGUgcHJvZmlsZS1sZXZlbC1pZCBmaWVsZC4gKi8KLSAgICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZiciwgJm9ial90eXBlLCA1KSkKLSAgICAgICAgZ290byBiYWRfY29uZmlnOwotICAgICAgaWYgKG9ial90eXBlID09IDApIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZXBheWxvYWQsICJpbnZhbGlkIG9iamVjdCB0eXBlIDAiKTsKLSAgICAgICAgZ290byBiYWRfY29uZmlnOwotICAgICAgfQotCi0gICAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZzcl9pZHgsIDQpKQotICAgICAgICBnb3RvIGJhZF9jb25maWc7Ci0gICAgICBpZiAoc3JfaWR4ID49IEdfTl9FTEVNRU5UUyAoYWFjX3NhbXBsZV9yYXRlcykgJiYgc3JfaWR4ICE9IDE1KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAiaW52YWxpZCBzYW1wbGUgcmF0ZSBpbmRleCAlZCIsIHNyX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFkX2NvbmZpZzsKLSAgICAgIH0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRhZGVwYXksICJzYW1wbGUgcmF0ZSBpbmRleCAldSIsIHNyX2lkeCk7Ci0KLSAgICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZiciwgJmNoYW5uZWxzLCA0KSkKLSAgICAgICAgZ290byBiYWRfY29uZmlnOwotICAgICAgaWYgKGNoYW5uZWxzID4gNykgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5bG9hZCwgImludmFsaWQgY2hhbm5lbHMgJXUiLCAoZ3VpbnQpIGNoYW5uZWxzKTsKLSAgICAgICAgZ290byBiYWRfY29uZmlnOwotICAgICAgfQotCi0gICAgICAvKiBydHAgcmF0ZSBkZXBlbmRzIG9uIHNhbXBsaW5nIHJhdGUgb2YgdGhlIGF1ZGlvICovCi0gICAgICBpZiAoc3JfaWR4ID09IDE1KSB7Ci0gICAgICAgIC8qIGluZGV4IG9mIDE1IG1lYW5zIHdlIGdldCB0aGUgcmF0ZSBpbiB0aGUgbmV4dCAyNCBiaXRzICovCi0gICAgICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyICgmYnIsICZyYXRlLCAyNCkpCi0gICAgICAgICAgZ290byBiYWRfY29uZmlnOwotICAgICAgfSBlbHNlIGlmIChzcl9pZHggPj0gR19OX0VMRU1FTlRTIChhYWNfc2FtcGxlX3JhdGVzKSkgewotICAgICAgICBnb3RvIGJhZF9jb25maWc7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBlbHNlIHVzZSB0aGUgcmF0ZSBmcm9tIHRoZSB0YWJsZSAqLwotICAgICAgICByYXRlID0gYWFjX3NhbXBsZV9yYXRlc1tzcl9pZHhdOwotICAgICAgfQotCi0gICAgICBydHBtcDRhZGVwYXktPmZyYW1lX2xlbiA9IDEwMjQ7Ci0KLSAgICAgIHN3aXRjaCAob2JqX3R5cGUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICBjYXNlIDI6Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgY2FzZSA0OgotICAgICAgICBjYXNlIDY6Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgewotICAgICAgICAgIGd1aW50OCBmcmFtZUxlbkZsYWcgPSAwOwotCi0gICAgICAgICAgaWYgKGdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZmcmFtZUxlbkZsYWcsIDEpKQotICAgICAgICAgICAgaWYgKGZyYW1lTGVuRmxhZykKLSAgICAgICAgICAgICAgcnRwbXA0YWRlcGF5LT5mcmFtZV9sZW4gPSA5NjA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogaWdub3JlIHJlbWFpbmluZyBiaXQsIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBmdWxsIGJ5dGVzICovCi0gICAgICBnc3RfYnVmZmVyX3Jlc2l6ZSAoYnVmZmVyLCAwLCBzaXplKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgICBkYXRhID0gTlVMTDsKLQotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3JjY2FwcywKLSAgICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAoZ2ludCkgY2hhbm5lbHMsCi0gICAgICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCAoZ2ludCkgcmF0ZSwKLSAgICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgYnVmZmVyLCBOVUxMKTsKLSAgICBiYWRfY29uZmlnOgotICAgICAgaWYgKGRhdGEpCi0gICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX3dhcm5pbmcgKCJjYW5ub3QgY29udmVydCBjb25maWcgdG8gYnVmZmVyIik7Ci0gICAgfQotICB9Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9tcDRhX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwTVA0QURlcGF5ICpydHBtcDRhZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBydHBtcDRhZGVwYXkgPSBHU1RfUlRQX01QNEFfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgLyogZmx1c2ggcmVtYWluaW5nIGRhdGEgb24gZGlzY29udCAqLwotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpIHsKLSAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwbXA0YWRlcGF5LT5hZGFwdGVyKTsKLSAgfQotCi0gIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2J1ZmZlciAocnRwKTsKLQotICBpZiAoIXJ0cG1wNGFkZXBheS0+ZnJhbWVkKSB7Ci0gICAgaWYgKGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCkpIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIHJ0cG1wNGFkZXBheS0+ZnJhbWVkID0gVFJVRTsKLQotICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIG91dGJ1Zik7Ci0KLSAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJmcmFtZWQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gICAgICBnc3RfcGFkX3NldF9jYXBzIChkZXBheWxvYWQtPnNyY3BhZCwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIG91dGJ1ZjsKLSAgICB9Ci0gIH0KLQotICBvdXRidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKG91dGJ1Zik7Ci0gIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gR1NUX0JVRkZFUl9QVFMgKHJ0cC0+YnVmZmVyKTsKLSAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwbXA0YWRlcGF5LT5hZGFwdGVyLCBvdXRidWYpOwotCi0gIC8qIFJUUCBtYXJrZXIgYml0IGluZGljYXRlcyB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlIEF1ZGlvTXV4RWxlbWVudCA9PiBjcmVhdGUKLSAgICogYW5kIHB1c2ggYSBidWZmZXIgKi8KLSAgaWYgKGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCkpIHsKLSAgICBndWludCBhdmFpbDsKLSAgICBndWludCBpOwotICAgIGd1aW50OCAqZGF0YTsKLSAgICBndWludCBwb3M7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcDRhZGVwYXktPmFkYXB0ZXIpOwotICAgIHRpbWVzdGFtcCA9IGdzdF9hZGFwdGVyX3ByZXZfcHRzIChydHBtcDRhZGVwYXktPmFkYXB0ZXIsIE5VTEwpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGFkZXBheSwgImhhdmUgbWFya2VyIGFuZCAldSBhdmFpbGFibGUiLCBhdmFpbCk7Ci0KLSAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocnRwbXA0YWRlcGF5LT5hZGFwdGVyLCBhdmFpbCk7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gbWFwLmRhdGE7Ci0gICAgLyogcG9zaXRpb24gaW4gZGF0YSB3ZSBhcmUgYXQgKi8KLSAgICBwb3MgPSAwOwotCi0gICAgLyogbG9vcGluZyB0aHJvdWdoIHRoZSBudW1iZXIgb2Ygc3ViLWZyYW1lcyBpbiB0aGUgYXVkaW8gcGF5bG9hZCAqLwotICAgIGZvciAoaSA9IDA7IGkgPD0gcnRwbXA0YWRlcGF5LT5udW1TdWJGcmFtZXM7IGkrKykgewotICAgICAgLyogZGV0ZXJtaW5lIHBheWxvYWQgbGVuZ3RoIGFuZCBzZXQgYnVmZmVyIGRhdGEgcG9pbnRlciBhY2NvcmRpbmdseSAqLwotICAgICAgZ3VpbnQgc2tpcDsKLSAgICAgIGd1aW50IGRhdGFfbGVuOwotICAgICAgR3N0QnVmZmVyICp0bXAgPSBOVUxMOwotCi0gICAgICAvKiBlYWNoIHN1YmZyYW1lIHN0YXJ0cyB3aXRoIGEgdmFyaWFibGUgbGVuZ3RoIGVuY29kaW5nICovCi0gICAgICBkYXRhX2xlbiA9IDA7Ci0gICAgICBmb3IgKHNraXAgPSAwOyBza2lwIDwgYXZhaWw7IHNraXArKykgewotICAgICAgICBkYXRhX2xlbiArPSBkYXRhW3NraXBdOwotICAgICAgICBpZiAoZGF0YVtza2lwXSAhPSAweGZmKQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc2tpcCsrOwotCi0gICAgICAvKiB0aGlzIGNhbiBub3QgYmUgcG9zc2libGUsIHdlIGhhdmUgbm90IGVub3VnaCBkYXRhIG9yIHRoZSBsZW5ndGgKLSAgICAgICAqIGRlY29kaW5nIGZhaWxlZCBiZWNhdXNlIHdlIHJhbiBvdXQgb2YgZGF0YS4gKi8KLSAgICAgIGlmIChza2lwICsgZGF0YV9sZW4gPiBhdmFpbCkKLSAgICAgICAgZ290byB3cm9uZ19zaXplOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0YWRlcGF5LAotICAgICAgICAgICJzdWJmcmFtZSAldSwgaGVhZGVyIGxlbiAldSwgZGF0YSBsZW4gJXUsIGxlZnQgJXUiLCBpLCBza2lwLCBkYXRhX2xlbiwKLSAgICAgICAgICBhdmFpbCk7Ci0KLSAgICAgIC8qIHRha2UgZGF0YSBvdXQsIHNraXAgdGhlIGhlYWRlciAqLwotICAgICAgcG9zICs9IHNraXA7Ci0gICAgICB0bXAgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChvdXRidWYsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIHBvcywgZGF0YV9sZW4pOwotCi0gICAgICAvKiBza2lwIGRhdGEgdG9vICovCi0gICAgICBza2lwICs9IGRhdGFfbGVuOwotICAgICAgcG9zICs9IGRhdGFfbGVuOwotCi0gICAgICAvKiB1cGRhdGUgb3VyIHBvaW50ZXJzIHdoaXRoIHdoYXQgd2UgY29uc3VtZWQgKi8KLSAgICAgIGRhdGEgKz0gc2tpcDsKLSAgICAgIGF2YWlsIC09IHNraXA7Ci0KLSAgICAgIEdTVF9CVUZGRVJfUFRTICh0bXApID0gdGltZXN0YW1wOwotICAgICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGRlcGF5bG9hZCksIHRtcCwKLSAgICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIHRtcCk7Ci0KLSAgICAgIC8qIHNoaWZ0IHRzIGZvciBuZXh0IGJ1ZmZlcnMgKi8KLSAgICAgIGlmIChydHBtcDRhZGVwYXktPmZyYW1lX2xlbiAmJiB0aW1lc3RhbXAgIT0gLTEKLSAgICAgICAgICAmJiBkZXBheWxvYWQtPmNsb2NrX3JhdGUgIT0gMCkgewotICAgICAgICB0aW1lc3RhbXAgKz0KLSAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHJ0cG1wNGFkZXBheS0+ZnJhbWVfbGVuLCBHU1RfU0VDT05ELAotICAgICAgICAgICAgZGVwYXlsb2FkLT5jbG9ja19yYXRlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBqdXN0IGEgY2hlY2sgdGhhdCBsZW5ndGhzIG1hdGNoICovCi0gICAgaWYgKGF2YWlsKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChkZXBheWxvYWQsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAgICgiUGFja2V0IGludmFsaWQiKSwgKCJOb3QgYWxsIHBheWxvYWQgY29uc3VtZWQ6ICIKLSAgICAgICAgICAgICAgInBvc3NpYmxlIHdyb25nbHkgZW5jb2RlZCBwYWNrZXQuIikpOwotICAgIH0KLQotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLSAgfQotICByZXR1cm4gTlVMTDsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3NpemU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBtcDRhZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIlBhY2tldCBkaWQgbm90IHZhbGlkYXRlIiksICgid3JvbmcgcGFja2V0IHNpemUiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9tcDRhX2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwTVA0QURlcGF5ICpydHBtcDRhZGVwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBydHBtcDRhZGVwYXkgPSBHU1RfUlRQX01QNEFfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwbXA0YWRlcGF5LT5hZGFwdGVyKTsKLSAgICAgIHJ0cG1wNGFkZXBheS0+ZnJhbWVfbGVuID0gMDsKLSAgICAgIHJ0cG1wNGFkZXBheS0+bnVtU3ViRnJhbWVzID0gMDsKLSAgICAgIHJ0cG1wNGFkZXBheS0+ZnJhbWVkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0YV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cG1wNGFkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9NUDRBX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cG1wNGFkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWVhZjU2Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0YWRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uIChjb250YWN0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+KQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX01QNEFfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9NUDRBX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9NUDRBX0RFUEFZIFwKLSAgKGdzdF9ydHBfbXA0YV9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX01QNEFfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTVA0QV9ERVBBWSxHc3RSdHBNUDRBRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX01QNEFfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX01QNEFfREVQQVksR3N0UnRwTVA0QURlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QNEFfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVA0QV9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVA0QV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVA0QV9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDRBRGVwYXkgR3N0UnRwTVA0QURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QNEFEZXBheUNsYXNzIEdzdFJ0cE1QNEFEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cE1QNEFEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ3VpbnQ4IG51bVN1YkZyYW1lczsKLSAgZ3VpbnQgZnJhbWVfbGVuOwotCi0gIGdib29sZWFuIGZyYW1lZDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTVA0QURlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfbXA0YV9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfbXA0YV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUDRBX0RFUEFZX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wNGFwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwbXA0YXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGI0YmFhLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0YXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cG1wNGFwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBtcDRhcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBtcDRhcGF5X2RlYnVnKQotCi0vKiBGSVhNRTogYWRkIGZyYW1lZD0oYm9vbGVhbil0cnVlIG9uY2Ugb3VyIGVuY29kZXJzIGhhdmUgdGhpcyBmaWVsZCBzZXQKLSAqIG9uIHRoZWlyIG91dHB1dCBjYXBzICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDRhX3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgIgotICAgICAgICAic3RyZWFtLWZvcm1hdD0oc3RyaW5nKXJhdyIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXA0YV9wYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJNUDRBLUxBVE1cIiIKLSAgICAgICAgLyogQWxsIG9wdGlvbmFsIHBhcmFtZXRlcnMKLSAgICAgICAgICoKLSAgICAgICAgICogImNwcmVzZW50ID0gKHN0cmluZykgXCIwXCIiCi0gICAgICAgICAqICJjb25maWc9IiAKLSAgICAgICAgICovCi0gICAgKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXA0YV9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tcDRhX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcDRhX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqCi0gICAgcGF5bG9hZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLQotI2RlZmluZSBnc3RfcnRwX21wNGFfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cE1QNEFQYXksIGdzdF9ydHBfbXA0YV9wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpCi0KLSAgICAgc3RhdGljIHZvaWQgZ3N0X3J0cF9tcDRhX3BheV9jbGFzc19pbml0IChHc3RSdHBNUDRBUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfbXA0YV9wYXlfZmluYWxpemU7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9tcDRhX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfbXA0YV9wYXlfaGFuZGxlX2J1ZmZlcjsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wNGFfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXA0YV9wYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgTVBFRzQgYXVkaW8gcGF5bG9hZGVyIiwgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZCBNUEVHNCBhdWRpbyBhcyBSVFAgcGFja2V0cyAoUkZDIDMwMTYpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBtcDRhcGF5X2RlYnVnLCAicnRwbXA0YXBheSIsIDAsCi0gICAgICAiTVA0QS1MQVRNIFJUUCBQYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0YV9wYXlfaW5pdCAoR3N0UnRwTVA0QVBheSAqIHJ0cG1wNGFwYXkpCi17Ci0gIHJ0cG1wNGFwYXktPnJhdGUgPSA5MDAwMDsKLSAgcnRwbXA0YXBheS0+cHJvZmlsZSA9IGdfc3RyZHVwICgiMSIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRhX3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwTVA0QVBheSAqcnRwbXA0YXBheTsKLQotICBydHBtcDRhcGF5ID0gR1NUX1JUUF9NUDRBX1BBWSAob2JqZWN0KTsKLQotICBnX2ZyZWUgKHJ0cG1wNGFwYXktPnBhcmFtcyk7Ci0gIHJ0cG1wNGFwYXktPnBhcmFtcyA9IE5VTEw7Ci0KLSAgaWYgKHJ0cG1wNGFwYXktPmNvbmZpZykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChydHBtcDRhcGF5LT5jb25maWcpOwotICBydHBtcDRhcGF5LT5jb25maWcgPSBOVUxMOwotCi0gIGdfZnJlZSAocnRwbXA0YXBheS0+cHJvZmlsZSk7Ci0gIHJ0cG1wNGFwYXktPnByb2ZpbGUgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzYW1wbGluZ190YWJsZVsxNl0gPSB7Ci0gIDk2MDAwLCA4ODIwMCwgNjQwMDAsIDQ4MDAwLCA0NDEwMCwgMzIwMDAsIDI0MDAwLCAyMjA1MCwKLSAgMTYwMDAsIDEyMDAwLCAxMTAyNSwgODAwMCwgNzM1MCwgMCwgMCwgMAotfTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNGFfcGF5X3BhcnNlX2F1ZGlvX2NvbmZpZyAoR3N0UnRwTVA0QVBheSAqIHJ0cG1wNGFwYXksCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnc2l6ZSBzaXplOwotICBndWludDggb2JqZWN0VHlwZTsKLSAgZ3VpbnQ4IHNhbXBsaW5nSWR4OwotICBndWludDggY2hhbm5lbENmZzsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLQotICBpZiAoc2l6ZSA8IDIpCi0gICAgZ290byB0b29fc2hvcnQ7Ci0KLSAgLyogYW55IG9iamVjdCB0eXBlIGlzIGZpbmUsIHdlIG5lZWQgdG8gY29weSBpdCB0byB0aGUgcHJvZmlsZS1sZXZlbC1pZCBmaWVsZC4gKi8KLSAgb2JqZWN0VHlwZSA9IChkYXRhWzBdICYgMHhmOCkgPj4gMzsKLSAgaWYgKG9iamVjdFR5cGUgPT0gMCkKLSAgICBnb3RvIGludmFsaWRfb2JqZWN0OwotCi0gIHNhbXBsaW5nSWR4ID0gKChkYXRhWzBdICYgMHgwNykgPDwgMSkgfCAoKGRhdGFbMV0gJiAweDgwKSA+PiA3KTsKLSAgLyogb25seSBmaXhlZCB2YWx1ZXMgZm9yIG5vdyAqLwotICBpZiAoc2FtcGxpbmdJZHggPiAxMiAmJiBzYW1wbGluZ0lkeCAhPSAxNSkKLSAgICBnb3RvIHdyb25nX2ZyZXE7Ci0KLSAgY2hhbm5lbENmZyA9ICgoZGF0YVsxXSAmIDB4NzgpID4+IDMpOwotICBpZiAoY2hhbm5lbENmZyA+IDcpCi0gICAgZ290byB3cm9uZ19jaGFubmVsczsKLQotICAvKiBydHAgcmF0ZSBkZXBlbmRzIG9uIHNhbXBsaW5nIHJhdGUgb2YgdGhlIGF1ZGlvICovCi0gIGlmIChzYW1wbGluZ0lkeCA9PSAxNSkgewotICAgIGlmIChzaXplIDwgNSkKLSAgICAgIGdvdG8gdG9vX3Nob3J0OwotCi0gICAgLyogaW5kZXggb2YgMTUgbWVhbnMgd2UgZ2V0IHRoZSByYXRlIGluIHRoZSBuZXh0IDI0IGJpdHMgKi8KLSAgICBydHBtcDRhcGF5LT5yYXRlID0gKChkYXRhWzFdICYgMHg3ZikgPDwgMTcpIHwKLSAgICAgICAgKChkYXRhWzJdKSA8PCA5KSB8ICgoZGF0YVszXSkgPDwgMSkgfCAoKGRhdGFbNF0gJiAweDgwKSA+PiA3KTsKLSAgfSBlbHNlIHsKLSAgICAvKiBlbHNlIHVzZSB0aGUgcmF0ZSBmcm9tIHRoZSB0YWJsZSAqLwotICAgIHJ0cG1wNGFwYXktPnJhdGUgPSBzYW1wbGluZ190YWJsZVtzYW1wbGluZ0lkeF07Ci0gIH0KLSAgLyogZXh0cmEgcnRwIHBhcmFtcyBjb250YWluIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgKi8KLSAgZ19mcmVlIChydHBtcDRhcGF5LT5wYXJhbXMpOwotICBydHBtcDRhcGF5LT5wYXJhbXMgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIGNoYW5uZWxDZmcpOwotICAvKiBhdWRpbyBzdHJlYW0gdHlwZSAqLwotICBydHBtcDRhcGF5LT5zdHJlYW10eXBlID0gIjUiOwotICAvKiBwcm9maWxlICovCi0gIGdfZnJlZSAocnRwbXA0YXBheS0+cHJvZmlsZSk7Ci0gIHJ0cG1wNGFwYXktPnByb2ZpbGUgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIG9iamVjdFR5cGUpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGFwYXksCi0gICAgICAib2JqZWN0VHlwZTogJWQsIHNhbXBsaW5nSWR4OiAlZCAoJWQpLCBjaGFubmVsQ2ZnOiAlZCIsIG9iamVjdFR5cGUsCi0gICAgICBzYW1wbGluZ0lkeCwgcnRwbXA0YXBheS0+cmF0ZSwgY2hhbm5lbENmZyk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUiAqLwotdG9vX3Nob3J0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHJ0cG1wNGFwYXksIFNUUkVBTSwgRk9STUFULAotICAgICAgICAoTlVMTCksCi0gICAgICAgICgiY29uZmlnIHN0cmluZyB0b28gc2hvcnQsIGV4cGVjdGVkIDIgYnl0ZXMsIGdvdCAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICAgIHNpemUpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9vYmplY3Q6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwbXA0YXBheSwgU1RSRUFNLCBGT1JNQVQsCi0gICAgICAgIChOVUxMKSwgKCJpbnZhbGlkIG9iamVjdCB0eXBlIDAiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2ZyZXE6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwbXA0YXBheSwgU1RSRUFNLCBOT1RfSU1QTEVNRU5URUQsCi0gICAgICAgIChOVUxMKSwgKCJ1bnN1cHBvcnRlZCBmcmVxdWVuY3kgaW5kZXggJWQiLCBzYW1wbGluZ0lkeCkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19jaGFubmVsczoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBtcDRhcGF5LCBTVFJFQU0sIE5PVF9JTVBMRU1FTlRFRCwKLSAgICAgICAgKE5VTEwpLCAoInVuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVscyAlZCwgbXVzdCA8IDgiLCBjaGFubmVsQ2ZnKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNGFfcGF5X25ld19jYXBzIChHc3RSdHBNUDRBUGF5ICogcnRwbXA0YXBheSkKLXsKLSAgZ2NoYXIgKmNvbmZpZzsKLSAgR1ZhbHVlIHYgPSB7IDAgfTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfdmFsdWVfaW5pdCAoJnYsIEdTVF9UWVBFX0JVRkZFUik7Ci0gIGdzdF92YWx1ZV9zZXRfYnVmZmVyICgmdiwgcnRwbXA0YXBheS0+Y29uZmlnKTsKLSAgY29uZmlnID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnYpOwotCi0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwbXA0YXBheSksCi0gICAgICAiY3ByZXNlbnQiLCBHX1RZUEVfU1RSSU5HLCAiMCIsICJjb25maWciLCBHX1RZUEVfU1RSSU5HLCBjb25maWcsIE5VTEwpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLSAgZ19mcmVlIChjb25maWcpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcDRhX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBNUDRBUGF5ICpydHBtcDRhcGF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgR1ZhbHVlICpjb2RlY19kYXRhOwotICBnYm9vbGVhbiByZXMsIGZyYW1lZCA9IFRSVUU7Ci0gIGNvbnN0IGdjaGFyICpzdHJlYW1fZm9ybWF0OwotCi0gIHJ0cG1wNGFwYXkgPSBHU1RfUlRQX01QNEFfUEFZIChwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAvKiB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgdGVtcGxhdGUgY2FwcywgYnV0IGl0IGlzIGJldHRlcgotICAgKiB0byBsZWF2ZSBoZXJlIHRvIGhhdmUgbWVhbmluZ2Z1bCB3YXJuaW5nIG1lc3NhZ2VzIHdoZW4gbGlua2luZwotICAgKiBmYWlscyAqLwotICBzdHJlYW1fZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzdHJlYW0tZm9ybWF0Iik7Ci0gIGlmIChzdHJlYW1fZm9ybWF0KSB7Ci0gICAgaWYgKHN0cmNtcCAoc3RyZWFtX2Zvcm1hdCwgInJhdyIpICE9IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwbXA0YXBheSwgIkFBQydzIHN0cmVhbS1mb3JtYXQgbXVzdCBiZSAncmF3JywgIgotICAgICAgICAgICIlcyBpcyBub3Qgc3VwcG9ydGVkIiwgc3RyZWFtX2Zvcm1hdCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwbXA0YXBheSwgIkFBQydzIHN0cmVhbS1mb3JtYXQgbm90IHNwZWNpZmllZCwgIgotICAgICAgICAiYXNzdW1pbmcgJ3JhdyciKTsKLSAgfQotCi0gIGNvZGVjX2RhdGEgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAiY29kZWNfZGF0YSIpOwotICBpZiAoY29kZWNfZGF0YSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDRhcGF5LCAiZ290IGNvZGVjX2RhdGEiKTsKLSAgICBpZiAoR19WQUxVRV9UWVBFIChjb2RlY19kYXRhKSA9PSBHU1RfVFlQRV9CVUZGRVIpIHsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyLCAqY2J1ZmZlcjsKLSAgICAgIEdzdE1hcEluZm8gbWFwOwotICAgICAgR3N0TWFwSW5mbyBjbWFwOwotICAgICAgZ3VpbnQgaTsKLQotICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGFwYXksICJjb25maWd1cmluZyBjb2RlY19kYXRhIik7Ci0KLSAgICAgIC8qIHBhcnNlIGJ1ZmZlciAqLwotICAgICAgcmVzID0gZ3N0X3J0cF9tcDRhX3BheV9wYXJzZV9hdWRpb19jb25maWcgKHJ0cG1wNGFwYXksIGJ1ZmZlcik7Ci0KLSAgICAgIGlmICghcmVzKQotICAgICAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7Ci0KLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgICAgIC8qIG1ha2UgdGhlIFN0cmVhbU11eENvbmZpZywgd2UgbmVlZCAxNSBiaXRzIGZvciB0aGUgaGVhZGVyICovCi0gICAgICBjYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChtYXAuc2l6ZSArIDIpOwotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGNidWZmZXIsICZjbWFwLCBHU1RfTUFQX1dSSVRFKTsKLQotICAgICAgbWVtc2V0IChjbWFwLmRhdGEsIDAsIG1hcC5zaXplICsgMik7Ci0KLSAgICAgIC8qIENyZWF0ZSBTdHJlYW1NdXhDb25maWcgYWNjb3JkaW5nIHRvIElTTy9JRUMgMTQ0OTYtMzoKLSAgICAgICAqCi0gICAgICAgKiBhdWRpb011eFZlcnNpb24gICAgICAgICAgID09IDAgKDEgYml0KQotICAgICAgICogYWxsU3RyZWFtc1NhbWVUaW1lRnJhbWluZyA9PSAxICgxIGJpdCkKLSAgICAgICAqIG51bVN1YkZyYW1lcyAgICAgICAgICAgICAgPT0gbnVtU3ViRnJhbWVzICg2IGJpdHMpCi0gICAgICAgKiBudW1Qcm9ncmFtICAgICAgICAgICAgICAgID09IDAgKDQgYml0cykKLSAgICAgICAqIG51bUxheWVyICAgICAgICAgICAgICAgICAgPT0gMCAoMyBiaXRzKQotICAgICAgICovCi0gICAgICBjbWFwLmRhdGFbMF0gPSAweDQwOwotICAgICAgY21hcC5kYXRhWzFdID0gMHgwMDsKLQotICAgICAgLyogYXBwZW5kIHRoZSBjb25maWcgYml0cywgc2hpZnRpbmcgdGhlbSAxIGJpdCBsZWZ0ICovCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgbWFwLnNpemU7IGkrKykgewotICAgICAgICBjbWFwLmRhdGFbaSArIDFdIHw9ICgobWFwLmRhdGFbaV0gJiAweDgwKSA+PiA3KTsKLSAgICAgICAgY21hcC5kYXRhW2kgKyAyXSB8PSAoKG1hcC5kYXRhW2ldICYgMHg3ZikgPDwgMSk7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGNidWZmZXIsICZjbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgICAgIC8qIG5vdyB3ZSBjYW4gY29uZmlndXJlIHRoZSBidWZmZXIgKi8KLSAgICAgIGlmIChydHBtcDRhcGF5LT5jb25maWcpCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHJ0cG1wNGFwYXktPmNvbmZpZyk7Ci0gICAgICBydHBtcDRhcGF5LT5jb25maWcgPSBjYnVmZmVyOwotICAgIH0KLSAgfQotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuIChzdHJ1Y3R1cmUsICJmcmFtZWQiLCAmZnJhbWVkKSAmJiAhZnJhbWVkKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXlsb2FkLCAiTmVlZCBmcmFtZWQgQUFDIGRhdGEgYXMgaW5wdXQhIik7Ci0gIH0KLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocGF5bG9hZCwgImF1ZGlvIiwgVFJVRSwgIk1QNEEtTEFUTSIsCi0gICAgICBydHBtcDRhcGF5LT5yYXRlKTsKLQotICByZXMgPSBnc3RfcnRwX21wNGFfcGF5X25ld19jYXBzIChydHBtcDRhcGF5KTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotY29uZmlnX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGFwYXksICJmYWlsZWQgdG8gcGFyc2UgY29uZmlnIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLSNkZWZpbmUgUlRQX0hFQURFUl9MRU4gMTIKLQotLyogd2UgZXhwZWN0IGJ1ZmZlcnMgYXMgZXhhY3RseSBvbmUgY29tcGxldGUgQVUKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXA0YV9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cE1QNEFQYXkgKnJ0cG1wNGFwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotICBndWludCBtdHU7Ci0gIGd1aW50IG9mZnNldDsKLSAgZ3NpemUgc2l6ZTsKLSAgZ2Jvb2xlYW4gZnJhZ21lbnRlZDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICByZXQgPSBHU1RfRkxPV19PSzsKLQotICBydHBtcDRhcGF5ID0gR1NUX1JUUF9NUDRBX1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIG9mZnNldCA9IDA7Ci0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotCi0gIGZyYWdtZW50ZWQgPSBGQUxTRTsKLSAgbXR1ID0gR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBtcDRhcGF5KTsKLQotICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoc2l6ZSAvIChtdHUgLSBSVFBfSEVBREVSX0xFTikgKyAxKTsKLQotICB3aGlsZSAoc2l6ZSA+IDApIHsKLSAgICBndWludCB0b3dyaXRlOwotICAgIEdzdEJ1ZmZlciAqb3V0YnVmOwotICAgIGd1aW50IHBheWxvYWRfbGVuOwotICAgIGd1aW50IHBhY2tldF9sZW47Ci0gICAgZ3VpbnQgaGVhZGVyX2xlbjsKLSAgICBHc3RCdWZmZXIgKnBheWJ1ZjsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0KLSAgICBoZWFkZXJfbGVuID0gMDsKLSAgICBpZiAoIWZyYWdtZW50ZWQpIHsKLSAgICAgIGd1aW50IGNvdW50OwotICAgICAgLyogZmlyc3QgcGFja2V0IGNhbGN1bGF0ZSBzcGFjZSBmb3IgdGhlIHBhY2tldCBpbmNsdWRpbmcgdGhlIGhlYWRlciAqLwotICAgICAgY291bnQgPSBzaXplOwotICAgICAgd2hpbGUgKGNvdW50ID49IDB4ZmYpIHsKLSAgICAgICAgaGVhZGVyX2xlbisrOwotICAgICAgICBjb3VudCAtPSAweGZmOwotICAgICAgfQotICAgICAgaGVhZGVyX2xlbisrOwotICAgIH0KLQotICAgIHBhY2tldF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKGhlYWRlcl9sZW4gKyBzaXplLCAwLCAwKTsKLSAgICB0b3dyaXRlID0gTUlOIChwYWNrZXRfbGVuLCBtdHUpOwotICAgIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYXlsb2FkX2xlbiAodG93cml0ZSwgMCwgMCk7Ci0gICAgcGF5bG9hZF9sZW4gLT0gaGVhZGVyX2xlbjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGFwYXksCi0gICAgICAgICJhdmFpbCAlIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgICAiLCBoZWFkZXJfbGVuICVkLCBwYWNrZXRfbGVuICVkLCBwYXlsb2FkX2xlbiAlZCIsIHNpemUsIGhlYWRlcl9sZW4sCi0gICAgICAgIHBhY2tldF9sZW4sIHBheWxvYWRfbGVuKTsKLQotICAgIC8qIGNyZWF0ZSBidWZmZXIgdG8gaG9sZCB0aGUgcGF5bG9hZC4gKi8KLSAgICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKGhlYWRlcl9sZW4sIDAsIDApOwotCi0gICAgLyogY29weSBwYXlsb2FkICovCi0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChvdXRidWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotCi0gICAgaWYgKCFmcmFnbWVudGVkKSB7Ci0gICAgICBndWludDggKnBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gICAgICBndWludCBjb3VudDsKLQotICAgICAgLyogZmlyc3QgcGFja2V0IHdyaXRlIHRoZSBoZWFkZXIgKi8KLSAgICAgIGNvdW50ID0gc2l6ZTsKLSAgICAgIHdoaWxlIChjb3VudCA+PSAweGZmKSB7Ci0gICAgICAgICpwYXlsb2FkKysgPSAweGZmOwotICAgICAgICBjb3VudCAtPSAweGZmOwotICAgICAgfQotICAgICAgKnBheWxvYWQrKyA9IGNvdW50OwotICAgIH0KLQotICAgIC8qIG1hcmtlciBvbmx5IGlmIHRoZSBwYWNrZXQgaXMgY29tcGxldGUgKi8KLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBzaXplID09IHBheWxvYWRfbGVuKTsKLQotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgIC8qIGNyZWF0ZSBhIG5ldyBidWYgdG8gaG9sZCB0aGUgcGF5bG9hZCAqLwotICAgIHBheWJ1ZiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKLSAgICAgICAgb2Zmc2V0LCBwYXlsb2FkX2xlbik7Ci0KLSAgICAvKiBqb2luIG1lbW9yeSBwYXJ0cyAqLwotICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBtcDRhcGF5KSwgb3V0YnVmLCBwYXlidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgcGF5YnVmKTsKLSAgICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBvdXRidWYpOwotICAgIG9mZnNldCArPSBwYXlsb2FkX2xlbjsKLSAgICBzaXplIC09IHBheWxvYWRfbGVuOwotCi0gICAgLyogY29weSBpbmNvbW1pbmcgdGltZXN0YW1wIChpZiBhbnkpIHRvIG91dGdvaW5nIGJ1ZmZlcnMgKi8KLSAgICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHRpbWVzdGFtcDsKLQotICAgIGZyYWdtZW50ZWQgPSBUUlVFOwotICB9Ci0KLSAgcmV0ID0KLSAgICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cG1wNGFwYXkpLCBsaXN0KTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX21wNGFfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwbXA0YXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9NUDRBX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wNGFwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXA0YXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWQ5YjY1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0YXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX01QNEFfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVA0QV9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9NUDRBX1BBWSBcCi0gIChnc3RfcnRwX21wNGFfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTVA0QV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTVA0QV9QQVksR3N0UnRwTVA0QVBheSkpCi0jZGVmaW5lIEdTVF9SVFBfTVA0QV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX01QNEFfUEFZLEdzdFJ0cE1QNEFQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVA0QV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVA0QV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QNEFfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NUDRBX1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDRBUGF5IEdzdFJ0cE1QNEFQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTVA0QVBheUNsYXNzIEdzdFJ0cE1QNEFQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBNUDRBUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkICAgIHBheWxvYWQ7Ci0KLSAgZ2ludCAgICAgICAgICByYXRlOwotICBnY2hhciAgICAgICAgKnBhcmFtczsKLSAgZ2NoYXIgICAgICAgICpwcm9maWxlOwotICBjb25zdCBnY2hhciAgKnN0cmVhbXR5cGU7Ci0gIEdzdEJ1ZmZlciAgICAqY29uZmlnOwotfTsKLQotc3RydWN0IF9Hc3RSdHBNUDRBUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX21wNGFfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9tcDRhX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUDRBX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wNGdkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2Q5MWM0Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ODkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgImdzdHJ0cG1wNGdkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cG1wNGdkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwbXA0Z2RlcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDRnX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL21wZWcsIgotICAgICAgICAibXBlZ3ZlcnNpb249KGludCkgNCwiCi0gICAgICAgICJzeXN0ZW1zdHJlYW09KGJvb2xlYW4pZmFsc2U7IgotICAgICAgICAiYXVkaW8vbXBlZywiICJtcGVndmVyc2lvbj0oaW50KSA0LCAiICJzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDRnX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgeyBcInZpZGVvXCIsIFwiYXVkaW9cIiwgXCJhcHBsaWNhdGlvblwiIH0sICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYIF0sICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIk1QRUc0LUdFTkVSSUNcIiwgIgotICAgICAgICAvKiByZXF1aXJlZCBzdHJpbmcgcGFyYW1zICovCi0gICAgICAgIC8qICJzdHJlYW10eXBlID0gKHN0cmluZykgeyBcIjRcIiwgXCI1XCIgfSwgIiAgTm90IHNldCBieSBXb3d6YSAgICA0ID0gdmlkZW8sIDUgPSBhdWRpbyAqLwotICAgICAgICAvKiAicHJvZmlsZS1sZXZlbC1pZCA9IChzdHJpbmcpIFsxLE1BWF0sICIgKi8KLSAgICAgICAgLyogImNvbmZpZyA9IChzdHJpbmcpIFsxLE1BWF0iICovCi0gICAgICAgICJtb2RlID0gKHN0cmluZykgeyBcImdlbmVyaWNcIiwgXCJDRUxQLWNiclwiLCBcIkNFTFAtdmJyXCIsIFwiQUFDLWxiclwiLCBcIkFBQy1oYnJcIiB9ICIKLSAgICAgICAgLyogT3B0aW9uYWwgZ2VuZXJhbCBwYXJhbWV0ZXJzICovCi0gICAgICAgIC8qICJvYmplY3R0eXBlID0gKHN0cmluZykgWzEsTUFYXSwgIiAqLwotICAgICAgICAvKiAiY29uc3RhbnRzaXplID0gKHN0cmluZykgWzEsTUFYXSwgIiAqLy8qIGNvbnN0YW50IHNpemUgb2YgZWFjaCBBVSAqLwotICAgICAgICAvKiAiY29uc3RhbnRkdXJhdGlvbiA9IChzdHJpbmcpIFsxLE1BWF0sICIgKi8vKiBjb25zdGFudCBkdXJhdGlvbiBvZiBlYWNoIEFVICovCi0gICAgICAgIC8qICJtYXhkaXNwbGFjZW1lbnQgPSAoc3RyaW5nKSBbMSxNQVhdLCAiICovCi0gICAgICAgIC8qICJkZS1pbnRlcmxlYXZlYnVmZmVyc2l6ZSA9IChzdHJpbmcpIFsxLE1BWF0sICIgKi8KLSAgICAgICAgLyogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCi0gICAgICAgIC8qICJzaXplbGVuZ3RoID0gKHN0cmluZykgWzEsIDMyXSwgIiAqLwotICAgICAgICAvKiAiaW5kZXhsZW5ndGggPSAoc3RyaW5nKSBbMSwgMzJdLCAiICovCi0gICAgICAgIC8qICJpbmRleGRlbHRhbGVuZ3RoID0gKHN0cmluZykgWzEsIDMyXSwgIiAqLwotICAgICAgICAvKiAiY3RzZGVsdGFsZW5ndGggPSAoc3RyaW5nKSBbMSwgMzJdLCAiICovCi0gICAgICAgIC8qICJkdHNkZWx0YWxlbmd0aCA9IChzdHJpbmcpIFsxLCAzMl0sICIgKi8KLSAgICAgICAgLyogInJhbmRvbWFjY2Vzc2luZGljYXRpb24gPSAoc3RyaW5nKSB7MCwgMX0sICIgKi8KLSAgICAgICAgLyogInN0cmVhbXN0YXRlaW5kaWNhdGlvbiA9IChzdHJpbmcpIFswLCAzMl0sICIgKi8KLSAgICAgICAgLyogImF1eGlsaWFyeWRhdGFzaXplbGVuZ3RoID0gKHN0cmluZykgWzAsIDMyXSIgKi8gKQotICAgICk7Ci0KLS8qIHNpbXBsZSBiaXRzdHJlYW0gcGFyc2VyICovCi10eXBlZGVmIHN0cnVjdAotewotICBjb25zdCBndWludDggKmRhdGE7Ci0gIGNvbnN0IGd1aW50OCAqZW5kOwotICBnaW50IGhlYWQ7ICAgICAgICAgICAgICAgICAgICAvKiBiaXRwb3MgaW4gdGhlIGNhY2hlIG9mIG5leHQgYml0ICovCi0gIGd1aW50NjQgY2FjaGU7ICAgICAgICAgICAgICAgIC8qIGNhY2hlZCBieXRlcyAqLwotfSBHc3RCc1BhcnNlOwotCi1zdGF0aWMgdm9pZAotZ3N0X2JzX3BhcnNlX2luaXQgKEdzdEJzUGFyc2UgKiBicywgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgYnMtPmRhdGEgPSBkYXRhOwotICBicy0+ZW5kID0gZGF0YSArIHNpemU7Ci0gIGJzLT5oZWFkID0gMDsKLSAgYnMtPmNhY2hlID0gMHhmZmZmZmZmZjsKLX0KLQotc3RhdGljIGd1aW50MzIKLWdzdF9ic19wYXJzZV9yZWFkIChHc3RCc1BhcnNlICogYnMsIGd1aW50IG4pCi17Ci0gIGd1aW50MzIgcmVzID0gMDsKLSAgZ2ludCBzaGlmdDsKLQotICBpZiAobiA9PSAwKQotICAgIHJldHVybiByZXM7Ci0KLSAgLyogZmlsbCB1cCB0aGUgY2FjaGUgaWYgd2UgbmVlZCB0byAqLwotICB3aGlsZSAoYnMtPmhlYWQgPCBuKSB7Ci0gICAgaWYgKGJzLT5kYXRhID49IGJzLT5lbmQpIHsKLSAgICAgIC8qIHdlJ3JlIGF0IHRoZSBlbmQsIGNhbid0IHByb2R1Y2UgbW9yZSB0aGFuIGhlYWQgbnVtYmVyIG9mIGJpdHMgKi8KLSAgICAgIG4gPSBicy0+aGVhZDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvKiBzaGlmdCBieXRlcyBpbiBjYWNoZSwgbW92aW5nIHRoZSBoZWFkIGJpdHMgb2YgdGhlIGNhY2hlIGxlZnQgKi8KLSAgICBicy0+Y2FjaGUgPSAoYnMtPmNhY2hlIDw8IDgpIHwgKmJzLT5kYXRhKys7Ci0gICAgYnMtPmhlYWQgKz0gODsKLSAgfQotCi0gIC8qIGJyaW5nIHRoZSByZXF1aXJlZCBiaXRzIGRvd24gYW5kIHRydW5jYXRlICovCi0gIGlmICgoc2hpZnQgPSBicy0+aGVhZCAtIG4pID4gMCkKLSAgICByZXMgPSBicy0+Y2FjaGUgPj4gc2hpZnQ7Ci0gIGVsc2UKLSAgICByZXMgPSBicy0+Y2FjaGU7Ci0KLSAgLyogbWFzayBvdXQgcmVxdWlyZWQgYml0cyAqLwotICBpZiAobiA8IDMyKQotICAgIHJlcyAmPSAoMSA8PCBuKSAtIDE7Ci0KLSAgYnMtPmhlYWQgPSBzaGlmdDsKLQotICByZXR1cm4gcmVzOwotfQotCi0KLSNkZWZpbmUgZ3N0X3J0cF9tcDRnX2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cE1QNEdEZXBheSwgZ3N0X3J0cF9tcDRnX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXA0Z19kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wNGdfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX21wNGdfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfbXA0Z19kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX21wNGdfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRnX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cE1QNEdEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfbXA0Z19kZXBheV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX21wNGdfZGVwYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfbXA0Z19kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfbXA0Z19kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5oYW5kbGVfZXZlbnQgPSBnc3RfcnRwX21wNGdfZGVwYXlfaGFuZGxlX2V2ZW50OwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXA0Z19kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wNGdfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgTVBFRzQgRVMgZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIE1QRUc0IGVsZW1lbnRhcnkgc3RyZWFtcyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMzY0MCkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cG1wNGdkZXBheV9kZWJ1ZywgInJ0cG1wNGdkZXBheSIsIDAsCi0gICAgICAiTVA0LWdlbmVyaWMgUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNGdfZGVwYXlfaW5pdCAoR3N0UnRwTVA0R0RlcGF5ICogcnRwbXA0Z2RlcGF5KQotewotICBydHBtcDRnZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIHJ0cG1wNGdkZXBheS0+cGFja2V0cyA9IGdfcXVldWVfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRnX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBNUDRHRGVwYXkgKnJ0cG1wNGdkZXBheTsKLQotICBydHBtcDRnZGVwYXkgPSBHU1RfUlRQX01QNEdfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cG1wNGdkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cG1wNGdkZXBheS0+YWRhcHRlciA9IE5VTEw7Ci0gIGdfcXVldWVfZnJlZSAocnRwbXA0Z2RlcGF5LT5wYWNrZXRzKTsKLSAgcnRwbXA0Z2RlcGF5LT5wYWNrZXRzID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfcnRwX21wNGdfZGVwYXlfcGFyc2VfaW50IChHc3RTdHJ1Y3R1cmUgKiBzdHJ1Y3R1cmUsIGNvbnN0IGdjaGFyICogZmllbGQsCi0gICAgZ2ludCBkZWYpCi17Ci0gIGNvbnN0IGdjaGFyICpzdHI7Ci0gIGdpbnQgcmVzOwotCi0gIGlmICgoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsIGZpZWxkKSkpCi0gICAgcmV0dXJuIGF0b2kgKHN0cik7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCBmaWVsZCwgJnJlcykpCi0gICAgcmV0dXJuIHJlczsKLQotICByZXR1cm4gZGVmOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0Z19kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdFJ0cE1QNEdEZXBheSAqcnRwbXA0Z2RlcGF5OwotICBHc3RDYXBzICpzcmNjYXBzID0gTlVMTDsKLSAgY29uc3QgZ2NoYXIgKnN0cjsKLSAgZ2ludCBjbG9ja19yYXRlOwotICBnaW50IHNvbWVpbnQ7Ci0gIGdib29sZWFuIHJlczsKLQotICBydHBtcDRnZGVwYXkgPSBHU1RfUlRQX01QNEdfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgY2xvY2tfcmF0ZSA9IDkwMDAwOyAgICAgICAgIC8qIGRlZmF1bHQgKi8KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICBpZiAoKHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAibWVkaWEiKSkpIHsKLSAgICBpZiAoc3RyY21wIChzdHIsICJhdWRpbyIpID09IDApIHsKLSAgICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vbXBlZyIsCi0gICAgICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNCwgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAicmF3IiwKLSAgICAgICAgICBOVUxMKTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcCAoc3RyLCAidmlkZW8iKSA9PSAwKSB7Ci0gICAgICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDQsCi0gICAgICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gICAgfQotICB9Ci0gIGlmIChzcmNjYXBzID09IE5VTEwpCi0gICAgZ290byB1bmtub3duX21lZGlhOwotCi0gIC8qIHRoZXNlIHZhbHVlcyBhcmUgb3B0aW9uYWwgYW5kIGhhdmUgYSBkZWZhdWx0IHZhbHVlIG9mIDAgKG5vIGhlYWRlcikgKi8KLSAgcnRwbXA0Z2RlcGF5LT5zaXplbGVuZ3RoID0KLSAgICAgIGdzdF9ydHBfbXA0Z19kZXBheV9wYXJzZV9pbnQgKHN0cnVjdHVyZSwgInNpemVsZW5ndGgiLCAwKTsKLSAgcnRwbXA0Z2RlcGF5LT5pbmRleGxlbmd0aCA9Ci0gICAgICBnc3RfcnRwX21wNGdfZGVwYXlfcGFyc2VfaW50IChzdHJ1Y3R1cmUsICJpbmRleGxlbmd0aCIsIDApOwotICBydHBtcDRnZGVwYXktPmluZGV4ZGVsdGFsZW5ndGggPQotICAgICAgZ3N0X3J0cF9tcDRnX2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiaW5kZXhkZWx0YWxlbmd0aCIsIDApOwotICBydHBtcDRnZGVwYXktPmN0c2RlbHRhbGVuZ3RoID0KLSAgICAgIGdzdF9ydHBfbXA0Z19kZXBheV9wYXJzZV9pbnQgKHN0cnVjdHVyZSwgImN0c2RlbHRhbGVuZ3RoIiwgMCk7Ci0gIHJ0cG1wNGdkZXBheS0+ZHRzZGVsdGFsZW5ndGggPQotICAgICAgZ3N0X3J0cF9tcDRnX2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiZHRzZGVsdGFsZW5ndGgiLCAwKTsKLSAgc29tZWludCA9Ci0gICAgICBnc3RfcnRwX21wNGdfZGVwYXlfcGFyc2VfaW50IChzdHJ1Y3R1cmUsICJyYW5kb21hY2Nlc3NpbmRpY2F0aW9uIiwgMCk7Ci0gIHJ0cG1wNGdkZXBheS0+cmFuZG9tYWNjZXNzaW5kaWNhdGlvbiA9IHNvbWVpbnQgPiAwID8gMSA6IDA7Ci0gIHJ0cG1wNGdkZXBheS0+c3RyZWFtc3RhdGVpbmRpY2F0aW9uID0KLSAgICAgIGdzdF9ydHBfbXA0Z19kZXBheV9wYXJzZV9pbnQgKHN0cnVjdHVyZSwgInN0cmVhbXN0YXRlaW5kaWNhdGlvbiIsIDApOwotICBydHBtcDRnZGVwYXktPmF1eGlsaWFyeWRhdGFzaXplbGVuZ3RoID0KLSAgICAgIGdzdF9ydHBfbXA0Z19kZXBheV9wYXJzZV9pbnQgKHN0cnVjdHVyZSwgImF1eGlsaWFyeWRhdGFzaXplbGVuZ3RoIiwgMCk7Ci0gIHJ0cG1wNGdkZXBheS0+Y29uc3RhbnRTaXplID0KLSAgICAgIGdzdF9ydHBfbXA0Z19kZXBheV9wYXJzZV9pbnQgKHN0cnVjdHVyZSwgImNvbnN0YW50c2l6ZSIsIDApOwotICBydHBtcDRnZGVwYXktPmNvbnN0YW50RHVyYXRpb24gPQotICAgICAgZ3N0X3J0cF9tcDRnX2RlcGF5X3BhcnNlX2ludCAoc3RydWN0dXJlLCAiY29uc3RhbnRkdXJhdGlvbiIsIDApOwotICBydHBtcDRnZGVwYXktPm1heERpc3BsYWNlbWVudCA9Ci0gICAgICBnc3RfcnRwX21wNGdfZGVwYXlfcGFyc2VfaW50IChzdHJ1Y3R1cmUsICJtYXhkaXNwbGFjZW1lbnQiLCAwKTsKLQotCi0gIC8qIGdldCBjb25maWcgc3RyaW5nICovCi0gIGlmICgoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJjb25maWciKSkpIHsKLSAgICBHVmFsdWUgdiA9IHsgMCB9OwotCi0gICAgZ192YWx1ZV9pbml0ICgmdiwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgICBpZiAoZ3N0X3ZhbHVlX2Rlc2VyaWFsaXplICgmdiwgc3RyKSkgewotICAgICAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgIGJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICgmdik7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzcmNjYXBzLAotICAgICAgICAgICJjb2RlY19kYXRhIiwgR1NUX1RZUEVfQlVGRkVSLCBidWZmZXIsIE5VTEwpOwotICAgICAgZ192YWx1ZV91bnNldCAoJnYpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX3dhcm5pbmcgKCJjYW5ub3QgY29udmVydCBjb25maWcgdG8gYnVmZmVyIik7Ci0gICAgfQotICB9Ci0KLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoZGVwYXlsb2FkLT5zcmNwYWQsIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXVua25vd25fbWVkaWE6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRnZGVwYXksICJVbmtub3duIG1lZGlhIHR5cGUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0Z19kZXBheV9jbGVhcl9xdWV1ZSAoR3N0UnRwTVA0R0RlcGF5ICogcnRwbXA0Z2RlcGF5KQotewotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICB3aGlsZSAoKG91dGJ1ZiA9IGdfcXVldWVfcG9wX2hlYWQgKHJ0cG1wNGdkZXBheS0+cGFja2V0cykpKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNGdfZGVwYXlfcmVzZXQgKEdzdFJ0cE1QNEdEZXBheSAqIHJ0cG1wNGdkZXBheSkKLXsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cG1wNGdkZXBheS0+YWRhcHRlcik7Ci0gIHJ0cG1wNGdkZXBheS0+bWF4X0FVX2luZGV4ID0gLTE7Ci0gIHJ0cG1wNGdkZXBheS0+bmV4dF9BVV9pbmRleCA9IC0xOwotICBydHBtcDRnZGVwYXktPnByZXZfQVVfaW5kZXggPSAtMTsKLSAgcnRwbXA0Z2RlcGF5LT5wcmV2X3J0cHRpbWUgPSAtMTsKLSAgcnRwbXA0Z2RlcGF5LT5sYXN0X0FVX2luZGV4ID0gLTE7Ci0gIGdzdF9ydHBfbXA0Z19kZXBheV9jbGVhcl9xdWV1ZSAocnRwbXA0Z2RlcGF5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0Z19kZXBheV9mbHVzaF9xdWV1ZSAoR3N0UnRwTVA0R0RlcGF5ICogcnRwbXA0Z2RlcGF5KQotewotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ2Jvb2xlYW4gZGlzY29udCA9IEZBTFNFOwotICBndWludCBBVV9pbmRleDsKLQotICB3aGlsZSAoKG91dGJ1ZiA9IGdfcXVldWVfcG9wX2hlYWQgKHJ0cG1wNGdkZXBheS0+cGFja2V0cykpKSB7Ci0gICAgQVVfaW5kZXggPSBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgIm5leHQgYXZhaWxhYmxlIEFVX2luZGV4ICV1IiwgQVVfaW5kZXgpOwotCi0gICAgaWYgKHJ0cG1wNGdkZXBheS0+bmV4dF9BVV9pbmRleCAhPSBBVV9pbmRleCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAiZGlzY29udCwgZXhwZWN0ZWQgQVVfaW5kZXggJXUiLAotICAgICAgICAgIHJ0cG1wNGdkZXBheS0+bmV4dF9BVV9pbmRleCk7Ci0gICAgICBkaXNjb250ID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoZGlzY29udCkgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gICAgICBkaXNjb250ID0gRkFMU0U7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAicHVzaGluZyBBVV9pbmRleCAldSIsIEFVX2luZGV4KTsKLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXA0Z2RlcGF5KSwgb3V0YnVmLCAwKTsKLSAgICBnc3RfcnRwX2Jhc2VfZGVwYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9ERVBBWUxPQUQgKHJ0cG1wNGdkZXBheSksIG91dGJ1Zik7Ci0gICAgcnRwbXA0Z2RlcGF5LT5uZXh0X0FVX2luZGV4ID0gQVVfaW5kZXggKyAxOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNGdfZGVwYXlfcXVldWUgKEdzdFJ0cE1QNEdEZXBheSAqIHJ0cG1wNGdkZXBheSwgR3N0QnVmZmVyICogb3V0YnVmKQotewotICBndWludCBBVV9pbmRleCA9IEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpOwotCi0gIGlmIChydHBtcDRnZGVwYXktPm5leHRfQVVfaW5kZXggPT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRnZGVwYXksICJJbml0IEFVIGNvdW50ZXIgJXUiLCBBVV9pbmRleCk7Ci0gICAgcnRwbXA0Z2RlcGF5LT5uZXh0X0FVX2luZGV4ID0gQVVfaW5kZXg7Ci0gIH0KLQotICBpZiAocnRwbXA0Z2RlcGF5LT5uZXh0X0FVX2luZGV4ID09IEFVX2luZGV4KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAicHVzaGluZyBleHBlY3RlZCBBVV9pbmRleCAldSIsIEFVX2luZGV4KTsKLQotICAgIC8qIHdlIHJlY2VpdmVkIHRoZSBleHBlY3RlZCBwYWNrZXQsIHB1c2ggaXQgYW5kIGZsdXNoIGFzIG11Y2ggYXMgd2UgY2FuIGZyb20KLSAgICAgKiB0aGUgcXVldWUgKi8KLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXA0Z2RlcGF5KSwgb3V0YnVmLCAwKTsKLSAgICBnc3RfcnRwX2Jhc2VfZGVwYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9ERVBBWUxPQUQgKHJ0cG1wNGdkZXBheSksIG91dGJ1Zik7Ci0gICAgcnRwbXA0Z2RlcGF5LT5uZXh0X0FVX2luZGV4Kys7Ci0KLSAgICB3aGlsZSAoKG91dGJ1ZiA9IGdfcXVldWVfcGVla19oZWFkIChydHBtcDRnZGVwYXktPnBhY2tldHMpKSkgewotICAgICAgQVVfaW5kZXggPSBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAibmV4dCBhdmFpbGFibGUgQVVfaW5kZXggJXUiLCBBVV9pbmRleCk7Ci0KLSAgICAgIGlmIChydHBtcDRnZGVwYXktPm5leHRfQVVfaW5kZXggPT0gQVVfaW5kZXgpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAicHVzaGluZyBleHBlY3RlZCBBVV9pbmRleCAldSIsCi0gICAgICAgICAgICBBVV9pbmRleCk7Ci0gICAgICAgIG91dGJ1ZiA9IGdfcXVldWVfcG9wX2hlYWQgKHJ0cG1wNGdkZXBheS0+cGFja2V0cyk7Ci0gICAgICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBtcDRnZGVwYXkpLCBvdXRidWYsIDApOwotICAgICAgICBnc3RfcnRwX2Jhc2VfZGVwYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9ERVBBWUxPQUQgKHJ0cG1wNGdkZXBheSksCi0gICAgICAgICAgICBvdXRidWYpOwotICAgICAgICBydHBtcDRnZGVwYXktPm5leHRfQVVfaW5kZXgrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgIndhaXRpbmcgZm9yIG5leHQgQVVfaW5kZXggJXUiLAotICAgICAgICAgICAgcnRwbXA0Z2RlcGF5LT5uZXh0X0FVX2luZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdMaXN0ICpsaXN0OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAicXVldWVpbmcgQVVfaW5kZXggJXUiLCBBVV9pbmRleCk7Ci0KLSAgICAvKiBsb29wIHRoZSBsaXN0IHRvIHNraXAgc3RyaWN0bHkgc21hbGxlciBBVV9pbmRleCBidWZmZXJzICovCi0gICAgZm9yIChsaXN0ID0gcnRwbXA0Z2RlcGF5LT5wYWNrZXRzLT5oZWFkOyBsaXN0OyBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpKSB7Ci0gICAgICBndWludCBpZHg7Ci0gICAgICBnaW50IGdhcDsKLQotICAgICAgaWR4ID0gR1NUX0JVRkZFUl9PRkZTRVQgKEdTVF9CVUZGRVJfQ0FTVCAobGlzdC0+ZGF0YSkpOwotCi0gICAgICAvKiBjb21wYXJlIHRoZSBuZXcgc2VxbnVtIHRvIHRoZSBvbmUgaW4gdGhlIGJ1ZmZlciAqLwotICAgICAgZ2FwID0gKGdpbnQpIChpZHggLSBBVV9pbmRleCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgImNvbXBhcmUgd2l0aCBBVV9pbmRleCAldSwgZ2FwICVkIiwgaWR4LAotICAgICAgICAgIGdhcCk7Ci0KLSAgICAgIC8qIEFVX2luZGV4IDw9IGlkeCwgd2UgY2FuIHN0b3AgbG9va2luZyAqLwotICAgICAgaWYgKEdfTElLRUxZIChnYXAgPiAwKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChHX0xJS0VMWSAobGlzdCkpCi0gICAgICBnX3F1ZXVlX2luc2VydF9iZWZvcmUgKHJ0cG1wNGdkZXBheS0+cGFja2V0cywgbGlzdCwgb3V0YnVmKTsKLSAgICBlbHNlCi0gICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAocnRwbXA0Z2RlcGF5LT5wYWNrZXRzLCBvdXRidWYpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9tcDRnX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwTVA0R0RlcGF5ICpydHBtcDRnZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICBydHBtcDRnZGVwYXkgPSBHU1RfUlRQX01QNEdfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgLyogZmx1c2ggcmVtYWluaW5nIGRhdGEgb24gZGlzY29udCAqLwotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRnZGVwYXksICJyZWNlaXZlZCBESVNDT05UIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cG1wNGdkZXBheS0+YWRhcHRlcik7Ci0gIH0KLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAocnRwLT5idWZmZXIpOwotCi0gIHsKLSAgICBnaW50IHBheWxvYWRfbGVuLCBwYXlsb2FkX0FVOwotICAgIGd1aW50OCAqcGF5bG9hZDsKLSAgICBndWludDMyIHJ0cHRpbWU7Ci0gICAgZ3VpbnQgQVVfaGVhZGVyc19sZW47Ci0gICAgZ3VpbnQgQVVfc2l6ZSwgQVVfaW5kZXgsIEFVX2luZGV4X2RlbHRhLCBwYXlsb2FkX0FVX3NpemU7Ci0gICAgZ2Jvb2xlYW4gTTsKLQotICAgIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuIChydHApOwotICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgInJlY2VpdmVkIHBheWxvYWQgb2YgJWQiLCBwYXlsb2FkX2xlbik7Ci0KLSAgICBydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKTsKLSAgICBNID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICAgIGlmIChydHBtcDRnZGVwYXktPnNpemVsZW5ndGggPiAwKSB7Ci0gICAgICBnaW50IG51bV9BVV9oZWFkZXJzLCBBVV9oZWFkZXJzX2J5dGVzLCBpOwotICAgICAgR3N0QnNQYXJzZSBiczsKLQotICAgICAgaWYgKHBheWxvYWRfbGVuIDwgMikKLSAgICAgICAgZ290byBzaG9ydF9wYXlsb2FkOwotCi0gICAgICAvKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstIC4uIC0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKiB8QVUtaGVhZGVycy1sZW5ndGh8QVUtaGVhZGVyfEFVLWhlYWRlcnwgICAgICB8QVUtaGVhZGVyfHBhZGRpbmd8Ci0gICAgICAgKiB8ICAgICAgICAgICAgICAgICB8ICAgKDEpICAgfCAgICgyKSAgIHwgICAgICB8ICAgKG4pICogfCBiaXRzICB8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstIC4uIC0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKgotICAgICAgICogVGhlIGxlbmd0aCBpcyAyIGJ5dGVzIGFuZCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBmb2xsb3dpbmcKLSAgICAgICAqIEFVLWhlYWRlcnMgaW4gYml0cy4KLSAgICAgICAqLwotICAgICAgQVVfaGVhZGVyc19sZW4gPSAocGF5bG9hZFswXSA8PCA4KSB8IHBheWxvYWRbMV07Ci0gICAgICBBVV9oZWFkZXJzX2J5dGVzID0gKEFVX2hlYWRlcnNfbGVuICsgNykgLyA4OwotICAgICAgbnVtX0FVX2hlYWRlcnMgPSBBVV9oZWFkZXJzX2xlbiAvIDE2OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRnZGVwYXksICJBVSBoZWFkZXJzIGxlbiAlZCwgYnl0ZXMgJWQsIG51bSAlZCIsCi0gICAgICAgICAgQVVfaGVhZGVyc19sZW4sIEFVX2hlYWRlcnNfYnl0ZXMsIG51bV9BVV9oZWFkZXJzKTsKLQotICAgICAgLyogc2tpcCBoZWFkZXIgKi8KLSAgICAgIHBheWxvYWQgKz0gMjsKLSAgICAgIHBheWxvYWRfbGVuIC09IDI7Ci0KLSAgICAgIGlmIChwYXlsb2FkX2xlbiA8IEFVX2hlYWRlcnNfYnl0ZXMpCi0gICAgICAgIGdvdG8gc2hvcnRfcGF5bG9hZDsKLQotICAgICAgLyogc2tpcCBzcGVjaWFsIGhlYWRlcnMsIHBvaW50IHRvIGZpcnN0IHBheWxvYWQgQVUgKi8KLSAgICAgIHBheWxvYWRfQVUgPSAyICsgQVVfaGVhZGVyc19ieXRlczsKLSAgICAgIHBheWxvYWRfQVVfc2l6ZSA9IHBheWxvYWRfbGVuIC0gQVVfaGVhZGVyc19ieXRlczsKLQotICAgICAgaWYgKEdfVU5MSUtFTFkgKHJ0cG1wNGdkZXBheS0+YXV4aWxpYXJ5ZGF0YXNpemVsZW5ndGgpKSB7Ci0gICAgICAgIGdpbnQgYXV4X3NpemU7Ci0KLSAgICAgICAgLyogcG9pbnQgdGhlIGJpdHN0cmVhbSBwYXJzZXIgdG8gdGhlIGZpcnN0IGF1eGlsaWFyeSBkYXRhIGJpdCAqLwotICAgICAgICBnc3RfYnNfcGFyc2VfaW5pdCAoJmJzLCBwYXlsb2FkICsgQVVfaGVhZGVyc19ieXRlcywKLSAgICAgICAgICAgIHBheWxvYWRfbGVuIC0gQVVfaGVhZGVyc19ieXRlcyk7Ci0gICAgICAgIGF1eF9zaXplID0KLSAgICAgICAgICAgIGdzdF9ic19wYXJzZV9yZWFkICgmYnMsIHJ0cG1wNGdkZXBheS0+YXV4aWxpYXJ5ZGF0YXNpemVsZW5ndGgpOwotICAgICAgICAvKiBjb252ZXJ0IHRvIGJ5dGVzICovCi0gICAgICAgIGF1eF9zaXplID0gKGF1eF9zaXplICsgNykgLyA4OwotICAgICAgICAvKiBBVSBkYXRhIHRoZW4gZm9sbG93cyBhdXhpbGlhcnkgZGF0YSAqLwotICAgICAgICBpZiAocGF5bG9hZF9BVV9zaXplIDwgYXV4X3NpemUpCi0gICAgICAgICAgZ290byBzaG9ydF9wYXlsb2FkOwotICAgICAgICBwYXlsb2FkX0FVICs9IGF1eF9zaXplOwotICAgICAgICBwYXlsb2FkX0FVX3NpemUgLT0gYXV4X3NpemU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHBvaW50IHRoZSBiaXRzdHJlYW0gcGFyc2VyIHRvIHRoZSBmaXJzdCBBVSBoZWFkZXIgYml0ICovCi0gICAgICBnc3RfYnNfcGFyc2VfaW5pdCAoJmJzLCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0gICAgICBBVV9pbmRleCA9IEFVX2luZGV4X2RlbHRhID0gMDsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9BVV9oZWFkZXJzICYmIHBheWxvYWRfQVVfc2l6ZSA+IDA7IGkrKykgewotICAgICAgICAvKiBwYXJzZSBBVSBoZWFkZXIKLSAgICAgICAgICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAqICB8ICAgICBBVS1zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICogIHwgICAgIEFVLUluZGV4IC8gQVUtSW5kZXgtZGVsdGEgICAgICAgICB8Ci0gICAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgKiAgfCAgICAgQ1RTLWZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAqICB8ICAgICBDVFMtZGVsdGEgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICogIHwgICAgIERUUy1mbGFnICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgKiAgfCAgICAgRFRTLWRlbHRhICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAqICB8ICAgICBSQVAtZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICogIHwgICAgIFN0cmVhbS1zdGF0ZSAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgKi8KLSAgICAgICAgQVVfc2l6ZSA9IGdzdF9ic19wYXJzZV9yZWFkICgmYnMsIHJ0cG1wNGdkZXBheS0+c2l6ZWxlbmd0aCk7Ci0KLSAgICAgICAgLyogY2FsY3VsYXRlIHRoZSBBVV9pbmRleCwgd2hpY2ggaXMgb25seSBvbiB0aGUgZmlyc3QgQVUgb2YgdGhlIHBhY2tldAotICAgICAgICAgKiBhbmQgdGhlIEFVX2luZGV4X2RlbHRhIG9uIHRoZSBvdGhlciBBVXMuIFRoaXMgd2lsbCBiZSB1c2VkIHRvCi0gICAgICAgICAqIHJlY29uc3RydWN0IHRoZSBBVSBvcmRlcmluZyB3aGVuIGludGVybGVhdmluZy4gKi8KLSAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgIEFVX2luZGV4ID0gZ3N0X2JzX3BhcnNlX3JlYWQgKCZicywgcnRwbXA0Z2RlcGF5LT5pbmRleGxlbmd0aCk7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRnZGVwYXksICJBVSBpbmRleCAldSIsIEFVX2luZGV4KTsKLQotICAgICAgICAgIGlmIChBVV9pbmRleCA9PSAwICYmIHJ0cG1wNGdkZXBheS0+cHJldl9BVV9pbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICBnaW50IGRpZmY7Ci0gICAgICAgICAgICBnaW50IGNkOwotCi0gICAgICAgICAgICAvKiBpZiB3ZSBzZWUgdHdvIGNvbnNlY3V0aXZlIHBhY2tldHMgd2l0aCBBVV9pbmRleCBvZiAwLCB3ZSBjYW4KLSAgICAgICAgICAgICAqIGFzc3VtZSB3ZSBoYXZlIGNvbnN0YW50RHVyYXRpb24gcGFja2V0cy4gU2luY2Ugd2UgZG9uJ3QgaGF2ZQotICAgICAgICAgICAgICogdGhlIGluZGV4IHdlIG11c3QgdXNlIHRoZSBBVSBkdXJhdGlvbiB0byBjYWxjdWxhdGUgdGhlCi0gICAgICAgICAgICAgKiBpbmRleC4gR2V0IHRoZSBkaWZmIGJldHdlZW4gdGhlIHRpbWVzdGFtcHMgZmlyc3QsIHRoaXMgY2FuIGJlCi0gICAgICAgICAgICAgKiBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4gKi8KLSAgICAgICAgICAgIGlmIChydHBtcDRnZGVwYXktPnByZXZfcnRwdGltZSA8PSBydHB0aW1lKQotICAgICAgICAgICAgICBkaWZmID0gcnRwdGltZSAtIHJ0cG1wNGdkZXBheS0+cHJldl9ydHB0aW1lOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBkaWZmID0gLShydHBtcDRnZGVwYXktPnByZXZfcnRwdGltZSAtIHJ0cHRpbWUpOwotCi0gICAgICAgICAgICAvKiBpZiBubyBjb25zdGFudER1cmF0aW9uIHdhcyBnaXZlbiwgbWFrZSBvbmUgKi8KLSAgICAgICAgICAgIGlmIChydHBtcDRnZGVwYXktPmNvbnN0YW50RHVyYXRpb24gIT0gMCkgewotICAgICAgICAgICAgICBjZCA9IHJ0cG1wNGdkZXBheS0+Y29uc3RhbnREdXJhdGlvbjsKLSAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAidXNpbmcgY29uc3RhbnREdXJhdGlvbiAlZCIsIGNkKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocnRwbXA0Z2RlcGF5LT5wcmV2X0FVX251bSA+IDApIHsKLSAgICAgICAgICAgICAgLyogdXNlIG51bWJlciBvZiBwYWNrZXRzIGFuZCBvZiBwcmV2aW91cyBmcmFtZSAqLwotICAgICAgICAgICAgICBjZCA9IGRpZmYgLyBydHBtcDRnZGVwYXktPnByZXZfQVVfbnVtOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJndWVzc2luZyBjb25zdGFudER1cmF0aW9uICVkIiwgY2QpOwotICAgICAgICAgICAgICBpZiAoIUdTVF9CVUZGRVJfSVNfRElTQ09OVCAocnRwLT5idWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgLyogcmZjMzY0MCAtIDMuMi4zLjIKLSAgICAgICAgICAgICAgICAgKiBpZiB3ZSBzZWUgdHdvIGNvbnNlY3V0aXZlIHBhY2tldHMgd2l0aCBBVV9pbmRleCBvZiAwIGFuZAotICAgICAgICAgICAgICAgICAqIHRoZXJlIGhhcyBiZWVuIG5vIGRpc2NvbnRpbnVpdHksIHdlIG11c3QgY29uY2x1ZGUgdGhhdCB0aGlzCi0gICAgICAgICAgICAgICAgICogdmFsdWUgb2YgY29uc3RhbnREdXJhdGlvbiBpcyBjb3JyZWN0IGZyb20gbm93IG9uLiAqLwotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwKLSAgICAgICAgICAgICAgICAgICAgImNvbnN0YW50RHVyYXRpb24gb2YgJWQgZGV0ZWN0ZWQiLCBjZCk7Ci0gICAgICAgICAgICAgICAgcnRwbXA0Z2RlcGF5LT5jb25zdGFudER1cmF0aW9uID0gY2Q7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8qIGFzc3VtZSB0aGlzIGZyYW1lIGhhcyB0aGUgc2FtZSBudW1iZXIgb2YgcGFja2V0cyBhcyB0aGUKLSAgICAgICAgICAgICAgICogcHJldmlvdXMgb25lICovCi0gICAgICAgICAgICAgIGNkID0gZGlmZiAvIG51bV9BVV9oZWFkZXJzOwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJndWVzc2luZyBjb25zdGFudER1cmF0aW9uICVkIiwgY2QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2QgPiAwKSB7Ci0gICAgICAgICAgICAgIC8qIGdldCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgYnkgZGl2aWRpbmcgd2l0aCB0aGUgZHVyYXRpb24gKi8KLSAgICAgICAgICAgICAgZGlmZiAvPSBjZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGRpZmYgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBydHBtcDRnZGVwYXktPmxhc3RfQVVfaW5kZXggKz0gZGlmZjsKLSAgICAgICAgICAgIHJ0cG1wNGdkZXBheS0+cHJldl9BVV9pbmRleCA9IEFVX2luZGV4OwotCi0gICAgICAgICAgICBBVV9pbmRleCA9IHJ0cG1wNGdkZXBheS0+bGFzdF9BVV9pbmRleDsKLQotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z2RlcGF5LCAiZGlmZiAlZCwgQVUgaW5kZXggJXUiLCBkaWZmLAotICAgICAgICAgICAgICAgIEFVX2luZGV4KTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcnRwbXA0Z2RlcGF5LT5wcmV2X0FVX2luZGV4ID0gQVVfaW5kZXg7Ci0gICAgICAgICAgICBydHBtcDRnZGVwYXktPmxhc3RfQVVfaW5kZXggPSBBVV9pbmRleDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiBrZWVwIHRyYWNrIG9mIHRoZSBoaWdlc3QgQVVfaW5kZXggKi8KLSAgICAgICAgICBpZiAocnRwbXA0Z2RlcGF5LT5tYXhfQVVfaW5kZXggIT0gLTEKLSAgICAgICAgICAgICAgJiYgcnRwbXA0Z2RlcGF5LT5tYXhfQVVfaW5kZXggPD0gQVVfaW5kZXgpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgIm5ldyBpbnRlcmxlYXZlIGdyb3VwLCBmbHVzaGluZyIpOwotICAgICAgICAgICAgLyogYSBuZXcgaW50ZXJsZWF2ZSBncm91cCBzdGFydGVkLCBmbHVzaCAqLwotICAgICAgICAgICAgZ3N0X3J0cF9tcDRnX2RlcGF5X2ZsdXNoX3F1ZXVlIChydHBtcDRnZGVwYXkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoIXJ0cG1wNGdkZXBheS0+bWF4RGlzcGxhY2VtZW50ICYmCi0gICAgICAgICAgICAgICAgICBydHBtcDRnZGVwYXktPm1heF9BVV9pbmRleCAhPSAtMQotICAgICAgICAgICAgICAgICAgJiYgcnRwbXA0Z2RlcGF5LT5tYXhfQVVfaW5kZXggPj0gQVVfaW5kZXgpKSB7Ci0gICAgICAgICAgICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICAgICAgICAgICAgLyogc29tZSBicm9rZW4gbm9uLWludGVybGVhdmVkIHN0cmVhbXMgaGF2ZSBBVS1pbmRleCBqdW1waW5nIGFyb3VuZAotICAgICAgICAgICAgICogYWxsIG92ZXIgdGhlIHBsYWNlLCBhcHBhcmVudGx5IGFzc3VtaW5nIHJlY2VpdmVyIGRpc3JlZ2FyZHMgKi8KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgIm5vbi1pbnRlcmxlYXZlZCBicm9rZW4gQVUgaW5kaWNlczsiCi0gICAgICAgICAgICAgICAgIiBmb3JjaW5nIGNvbnRpbnVvdXMgZmx1c2giKTsKLSAgICAgICAgICAgIC8qIHJlc2V0IEFVIHRvIGF2b2lkIHJlcGVhdGVkIERJU0NPTlQgaW4gc3VjaCBjYXNlICovCi0gICAgICAgICAgICBvdXRidWYgPSBnX3F1ZXVlX3BlZWtfaGVhZCAocnRwbXA0Z2RlcGF5LT5wYWNrZXRzKTsKLSAgICAgICAgICAgIGlmIChHX0xJS0VMWSAob3V0YnVmKSkgewotICAgICAgICAgICAgICBydHBtcDRnZGVwYXktPm5leHRfQVVfaW5kZXggPSBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKTsKLSAgICAgICAgICAgICAgZ3N0X3J0cF9tcDRnX2RlcGF5X2ZsdXNoX3F1ZXVlIChydHBtcDRnZGVwYXkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogcmViYXNlIG5leHRfQVVfaW5kZXggdG8gY3VycmVudCBydHAncyBmaXJzdCBBVV9pbmRleCAqLwotICAgICAgICAgICAgcnRwbXA0Z2RlcGF5LT5uZXh0X0FVX2luZGV4ID0gQVVfaW5kZXg7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJ0cG1wNGdkZXBheS0+cHJldl9ydHB0aW1lID0gcnRwdGltZTsKLSAgICAgICAgICBydHBtcDRnZGVwYXktPnByZXZfQVVfbnVtID0gbnVtX0FVX2hlYWRlcnM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgQVVfaW5kZXhfZGVsdGEgPQotICAgICAgICAgICAgICBnc3RfYnNfcGFyc2VfcmVhZCAoJmJzLCBydHBtcDRnZGVwYXktPmluZGV4ZGVsdGFsZW5ndGgpOwotICAgICAgICAgIEFVX2luZGV4ICs9IEFVX2luZGV4X2RlbHRhICsgMTsKLSAgICAgICAgfQotICAgICAgICAvKiBrZWVwIHRyYWNrIG9mIGhpZ2hlc3QgQVVfaW5kZXggKi8KLSAgICAgICAgaWYgKHJ0cG1wNGdkZXBheS0+bWF4X0FVX2luZGV4ID09IC0xCi0gICAgICAgICAgICB8fCBBVV9pbmRleCA+IHJ0cG1wNGdkZXBheS0+bWF4X0FVX2luZGV4KQotICAgICAgICAgIHJ0cG1wNGdkZXBheS0+bWF4X0FVX2luZGV4ID0gQVVfaW5kZXg7Ci0KLSAgICAgICAgLyogdGhlIHByZXNlbnRhdGlvbiB0aW1lIG9mZnNldCwgYSAycy1jb21wbGVtZW50IHZhbHVlLCB3ZSBuZWVkIHRoaXMgdG8KLSAgICAgICAgICogY2FsY3VsYXRlIHRoZSB0aW1lc3RhbXAgb24gdGhlIG91dHB1dCBwYWNrZXQuICovCi0gICAgICAgIGlmIChydHBtcDRnZGVwYXktPmN0c2RlbHRhbGVuZ3RoID4gMCkgewotICAgICAgICAgIGlmIChnc3RfYnNfcGFyc2VfcmVhZCAoJmJzLCAxKSkKLSAgICAgICAgICAgIGdzdF9ic19wYXJzZV9yZWFkICgmYnMsIHJ0cG1wNGdkZXBheS0+Y3RzZGVsdGFsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIC8qIHRoZSBkZWNvZGluZyB0aW1lIG9mZnNldCwgYSAycy1jb21wbGVtZW50IHZhbHVlICovCi0gICAgICAgIGlmIChydHBtcDRnZGVwYXktPmR0c2RlbHRhbGVuZ3RoID4gMCkgewotICAgICAgICAgIGlmIChnc3RfYnNfcGFyc2VfcmVhZCAoJmJzLCAxKSkKLSAgICAgICAgICAgIGdzdF9ic19wYXJzZV9yZWFkICgmYnMsIHJ0cG1wNGdkZXBheS0+ZHRzZGVsdGFsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIC8qIFJBUC1mbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIEFVIGNvbnRhaW5zIGEga2V5ZnJhbWUgKi8KLSAgICAgICAgaWYgKHJ0cG1wNGdkZXBheS0+cmFuZG9tYWNjZXNzaW5kaWNhdGlvbikKLSAgICAgICAgICBnc3RfYnNfcGFyc2VfcmVhZCAoJmJzLCAxKTsKLSAgICAgICAgLyogc3RyZWFtLXN0YXRlICovCi0gICAgICAgIGlmIChydHBtcDRnZGVwYXktPnN0cmVhbXN0YXRlaW5kaWNhdGlvbiA+IDApCi0gICAgICAgICAgZ3N0X2JzX3BhcnNlX3JlYWQgKCZicywgcnRwbXA0Z2RlcGF5LT5zdHJlYW1zdGF0ZWluZGljYXRpb24pOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNGdkZXBheSwgInNpemUgJWQsIGluZGV4ICVkLCBkZWx0YSAlZCIsIEFVX3NpemUsCi0gICAgICAgICAgICBBVV9pbmRleCwgQVVfaW5kZXhfZGVsdGEpOwotCi0gICAgICAgIC8qIGZyYWdtZW50ZWQgcGFrZXRzIGhhdmUgdGhlIEFVX3NpemUgc2V0IHRvIHRoZSBzaXplIG9mIHRoZQotICAgICAgICAgKiB1bmZyYWdtZW50ZWQgQVUuICovCi0gICAgICAgIGlmIChBVV9zaXplID4gcGF5bG9hZF9BVV9zaXplKQotICAgICAgICAgIEFVX3NpemUgPSBwYXlsb2FkX0FVX3NpemU7Ci0KLSAgICAgICAgLyogY29sbGVjdCBzdHVmZiBpbiB0aGUgYWRhcHRlciwgc3RyaXAgaGVhZGVyIGZyb20gcGF5bG9hZCBhbmQgcHVzaCBpbgotICAgICAgICAgKiB0aGUgYWRhcHRlciAqLwotICAgICAgICBvdXRidWYgPQotICAgICAgICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIHBheWxvYWRfQVUsIEFVX3NpemUpOwotICAgICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBtcDRnZGVwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci0KLSAgICAgICAgaWYgKE0pIHsKLSAgICAgICAgICBndWludCBhdmFpbDsKLQotICAgICAgICAgIC8qIHBhY2tldCBpcyBjb21wbGV0ZSwgZmx1c2ggKi8KLSAgICAgICAgICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwbXA0Z2RlcGF5LT5hZGFwdGVyKTsKLQotICAgICAgICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBtcDRnZGVwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLQotICAgICAgICAgIC8qIGNvcHkgc29tZSBvZiB0aGUgZmllbGRzIHdlIGNhbGN1bGF0ZWQgYWJvdmUgb24gdGhlIGJ1ZmZlci4gV2UgYWxzbwotICAgICAgICAgICAqIGNvcHkgdGhlIEFVX2luZGV4IHNvIHRoYXQgd2UgY2FuIHNvcnQgdGhlIHBhY2tldHMgaW4gb3VyIHF1ZXVlLiAqLwotICAgICAgICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gdGltZXN0YW1wOwotICAgICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpID0gQVVfaW5kZXg7Ci0KLSAgICAgICAgICBpZiAocnRwbXA0Z2RlcGF5LT5jb25zdGFudER1cmF0aW9uICE9IDApIHsKLSAgICAgICAgICAgIC8qIGlmIHdlIGhhdmUgY29uc3RhbnREdXJhdGlvbiwgY2FsY3VsYXRlIHRpbWVzdGFtcCBmb3IgbmV4dCBBVQotICAgICAgICAgICAgICogaW4gdGhpcyBSVFAgcGFja2V0LiAqLwotICAgICAgICAgICAgdGltZXN0YW1wICs9IChydHBtcDRnZGVwYXktPmNvbnN0YW50RHVyYXRpb24gKiBHU1RfU0VDT05EKSAvCi0gICAgICAgICAgICAgICAgZGVwYXlsb2FkLT5jbG9ja19yYXRlOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBvdGhlcndpc2UsIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgdGhlIHRpbWVzdGFtcCBhZ2FpbiBmb3Igb3RoZXIKLSAgICAgICAgICAgICAqIEFVcy4gKi8KLSAgICAgICAgICAgIHRpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLAotICAgICAgICAgICAgICAicHVzaGluZyBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSk7Ci0KLSAgICAgICAgICBnc3RfcnRwX21wNGdfZGVwYXlfcXVldWUgKHJ0cG1wNGdkZXBheSwgb3V0YnVmKTsKLQotICAgICAgICB9Ci0gICAgICAgIHBheWxvYWRfQVUgKz0gQVVfc2l6ZTsKLSAgICAgICAgcGF5bG9hZF9BVV9zaXplIC09IEFVX3NpemU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHB1c2ggY29tcGxldGUgYnVmZmVyIGluIGFkYXB0ZXIgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCAwLCBwYXlsb2FkX2xlbik7Ci0gICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBtcDRnZGVwYXktPmFkYXB0ZXIsIG91dGJ1Zik7Ci0KLSAgICAgIC8qIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgVk9QLCBjcmVhdGUgYW5kIHB1c2ggYSBidWZmZXIgKi8KLSAgICAgIGlmIChNKSB7Ci0gICAgICAgIGd1aW50IGF2YWlsOwotCi0gICAgICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcDRnZGVwYXktPmFkYXB0ZXIpOwotCi0gICAgICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBtcDRnZGVwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLQotICAgICAgICBHU1RfREVCVUcgKCJnc3RfcnRwX21wNGdfZGVwYXlfY2hhaW46IHB1c2hpbmcgYnVmZmVyIG9mIHNpemUgJSIKLSAgICAgICAgICAgIEdfR1NJWkVfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpKTsKLQotICAgICAgICByZXR1cm4gb3V0YnVmOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBOVUxMOwotCi0gIC8qIEVSUk9SUyAqLwotc2hvcnRfcGF5bG9hZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cG1wNGdkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiUGFja2V0IHBheWxvYWQgd2FzIHRvbyBzaG9ydC4iKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0Z19kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBmaWx0ZXIsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0UnRwTVA0R0RlcGF5ICpydHBtcDRnZGVwYXk7Ci0KLSAgcnRwbXA0Z2RlcGF5ID0gR1NUX1JUUF9NUDRHX0RFUEFZIChmaWx0ZXIpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfcnRwX21wNGdfZGVwYXlfcmVzZXQgKHJ0cG1wNGdkZXBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPQotICAgICAgR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+aGFuZGxlX2V2ZW50IChmaWx0ZXIsIGV2ZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfbXA0Z19kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cE1QNEdEZXBheSAqcnRwbXA0Z2RlcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwbXA0Z2RlcGF5ID0gR1NUX1JUUF9NUDRHX0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9tcDRnX2RlcGF5X3Jlc2V0IChydHBtcDRnZGVwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfbXA0Z19kZXBheV9yZXNldCAocnRwbXA0Z2RlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9tcDRnX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwbXA0Z2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX01QNEdfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXA0Z2RlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNTk5N2EuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDRnZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9NUDRHX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVA0R19ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfTVA0R19ERVBBWSBcCi0gIChnc3RfcnRwX21wNGdfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9NUDRHX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX01QNEdfREVQQVksR3N0UnRwTVA0R0RlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9NUDRHX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NUDRHX0RFUEFZLEdzdFJ0cE1QNEdEZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9NUDRHX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX01QNEdfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QNEdfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX01QNEdfREVQQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTVA0R0RlcGF5IEdzdFJ0cE1QNEdEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDRHRGVwYXlDbGFzcyBHc3RSdHBNUDRHRGVwYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBNUDRHRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgZ2ludCBwcm9maWxlX2xldmVsX2lkOwotICBnaW50IHN0cmVhbXR5cGU7Ci0KLSAgZ2ludCBjb25zdGFudFNpemU7Ci0gIGdpbnQgY29uc3RhbnREdXJhdGlvbjsKLSAgZ2ludCBtYXhEaXNwbGFjZW1lbnQ7Ci0KLSAgZ2ludCBzaXplbGVuZ3RoOwotICBnaW50IGluZGV4bGVuZ3RoOwotICBnaW50IGluZGV4ZGVsdGFsZW5ndGg7Ci0gIGdpbnQgY3RzZGVsdGFsZW5ndGg7Ci0gIGdpbnQgZHRzZGVsdGFsZW5ndGg7Ci0gIGdpbnQgcmFuZG9tYWNjZXNzaW5kaWNhdGlvbjsKLSAgZ2ludCBzdHJlYW1zdGF0ZWluZGljYXRpb247Ci0gIGdpbnQgYXV4aWxpYXJ5ZGF0YXNpemVsZW5ndGg7Ci0KLSAgZ3VpbnQgbWF4X0FVX2luZGV4OwotICBndWludCBwcmV2X0FVX2luZGV4OwotICBndWludCBsYXN0X0FVX2luZGV4OwotICBndWludCBuZXh0X0FVX2luZGV4OwotICBndWludDMyIHByZXZfcnRwdGltZTsKLSAgZ3VpbnQgcHJldl9BVV9udW07Ci0KLSAgR1F1ZXVlICpwYWNrZXRzOwotICAKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTVA0R0RlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfbXA0Z19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfbXA0Z19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUDRHX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMzM2I0OS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDYzOSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBtcDRncGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwbXA0Z3BheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwbXA0Z3BheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXA0Z19wYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vbXBlZywiCi0gICAgICAgICJtcGVndmVyc2lvbj0oaW50KSA0LCIKLSAgICAgICAgInN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZTsiCi0gICAgICAgICJhdWRpby9tcGVnLCIgIm1wZWd2ZXJzaW9uPShpbnQpIDQsICIgInN0cmVhbS1mb3JtYXQ9KHN0cmluZykgcmF3IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDRnX3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIHsgXCJ2aWRlb1wiLCBcImF1ZGlvXCIsIFwiYXBwbGljYXRpb25cIiB9LCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVggXSwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTVBFRzQtR0VORVJJQ1wiLCAiCi0gICAgICAgIC8qIHJlcXVpcmVkIHN0cmluZyBwYXJhbXMgKi8KLSAgICAgICAgInN0cmVhbXR5cGUgPSAoc3RyaW5nKSB7IFwiNFwiLCBcIjVcIiB9LCAiICAgICAgLyogNCA9IHZpZGVvLCA1ID0gYXVkaW8gKi8KLSAgICAgICAgLyogInByb2ZpbGUtbGV2ZWwtaWQgPSAoc3RyaW5nKSBbMSxNQVhdLCAiICovCi0gICAgICAgIC8qICJjb25maWcgPSAoc3RyaW5nKSBbMSxNQVhdIiAqLwotICAgICAgICAibW9kZSA9IChzdHJpbmcpIHsgXCJnZW5lcmljXCIsIFwiQ0VMUC1jYnJcIiwgXCJDRUxQLXZiclwiLCBcIkFBQy1sYnJcIiwgXCJBQUMtaGJyXCIgfSAiCi0gICAgICAgIC8qIE9wdGlvbmFsIGdlbmVyYWwgcGFyYW1ldGVycyAqLwotICAgICAgICAvKiAib2JqZWN0dHlwZSA9IChzdHJpbmcpIFsxLE1BWF0sICIgKi8KLSAgICAgICAgLyogImNvbnN0YW50c2l6ZSA9IChzdHJpbmcpIFsxLE1BWF0sICIgKi8vKiBjb25zdGFudCBzaXplIG9mIGVhY2ggQVUgKi8KLSAgICAgICAgLyogImNvbnN0YW50ZHVyYXRpb24gPSAoc3RyaW5nKSBbMSxNQVhdLCAiICovLyogY29uc3RhbnQgZHVyYXRpb24gb2YgZWFjaCBBVSAqLwotICAgICAgICAvKiAibWF4ZGlzcGxhY2VtZW50ID0gKHN0cmluZykgWzEsTUFYXSwgIiAqLwotICAgICAgICAvKiAiZGUtaW50ZXJsZWF2ZWJ1ZmZlcnNpemUgPSAoc3RyaW5nKSBbMSxNQVhdLCAiICovCi0gICAgICAgIC8qIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLwotICAgICAgICAvKiAic2l6ZWxlbmd0aCA9IChzdHJpbmcpIFsxLCAxNl0sICIgKi8vKiBtYXggMTYgYml0cywgc2hvdWxkIGJlIGVub3VnaC4uLiAqLwotICAgICAgICAvKiAiaW5kZXhsZW5ndGggPSAoc3RyaW5nKSBbMSwgOF0sICIgKi8KLSAgICAgICAgLyogImluZGV4ZGVsdGFsZW5ndGggPSAoc3RyaW5nKSBbMSwgOF0sICIgKi8KLSAgICAgICAgLyogImN0c2RlbHRhbGVuZ3RoID0gKHN0cmluZykgWzEsIDY0XSwgIiAqLwotICAgICAgICAvKiAiZHRzZGVsdGFsZW5ndGggPSAoc3RyaW5nKSBbMSwgNjRdLCAiICovCi0gICAgICAgIC8qICJyYW5kb21hY2Nlc3NpbmRpY2F0aW9uID0gKHN0cmluZykgezAsIDF9LCAiICovCi0gICAgICAgIC8qICJzdHJlYW1zdGF0ZWluZGljYXRpb24gPSAoc3RyaW5nKSBbMCwgNjRdLCAiICovCi0gICAgICAgIC8qICJhdXhpbGlhcnlkYXRhc2l6ZWxlbmd0aCA9IChzdHJpbmcpIFswLCA2NF0iICovICkKLSAgICApOwotCi0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXA0Z19wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9tcDRnX3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcDRnX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqCi0gICAgcGF5bG9hZCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wNGdfcGF5X3NpbmtfZXZlbnQgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotI2RlZmluZSBnc3RfcnRwX21wNGdfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cE1QNEdQYXksIGdzdF9ydHBfbXA0Z19wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpCi0KLSAgICAgc3RhdGljIHZvaWQgZ3N0X3J0cF9tcDRnX3BheV9jbGFzc19pbml0IChHc3RSdHBNUDRHUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfbXA0Z19wYXlfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF9tcDRnX3BheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfbXA0Z19wYXlfaGFuZGxlX2J1ZmZlcjsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNpbmtfZXZlbnQgPSBnc3RfcnRwX21wNGdfcGF5X3NpbmtfZXZlbnQ7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcDRnX3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wNGdfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIE1QRUc0IEVTIHBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkIE1QRUc0IGVsZW1lbnRhcnkgc3RyZWFtcyBhcyBSVFAgcGFja2V0cyAoUkZDIDM2NDApIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBtcDRncGF5X2RlYnVnLCAicnRwbXA0Z3BheSIsIDAsCi0gICAgICAiTVA0LWdlbmVyaWMgUlRQIFBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRnX3BheV9pbml0IChHc3RSdHBNUDRHUGF5ICogcnRwbXA0Z3BheSkKLXsKLSAgcnRwbXA0Z3BheS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0Z19wYXlfcmVzZXQgKEdzdFJ0cE1QNEdQYXkgKiBydHBtcDRncGF5KQotewotICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRncGF5LCAicmVzZXQiKTsKLQotICBnc3RfYWRhcHRlcl9jbGVhciAocnRwbXA0Z3BheS0+YWRhcHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNGdfcGF5X2NsZWFudXAgKEdzdFJ0cE1QNEdQYXkgKiBydHBtcDRncGF5KQotewotICBnc3RfcnRwX21wNGdfcGF5X3Jlc2V0IChydHBtcDRncGF5KTsKLQotICBnX2ZyZWUgKHJ0cG1wNGdwYXktPnBhcmFtcyk7Ci0gIHJ0cG1wNGdwYXktPnBhcmFtcyA9IE5VTEw7Ci0KLSAgaWYgKHJ0cG1wNGdwYXktPmNvbmZpZykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChydHBtcDRncGF5LT5jb25maWcpOwotICBydHBtcDRncGF5LT5jb25maWcgPSBOVUxMOwotCi0gIGdfZnJlZSAocnRwbXA0Z3BheS0+cHJvZmlsZSk7Ci0gIHJ0cG1wNGdwYXktPnByb2ZpbGUgPSBOVUxMOwotCi0gIHJ0cG1wNGdwYXktPnN0cmVhbXR5cGUgPSBOVUxMOwotICBydHBtcDRncGF5LT5tb2RlID0gTlVMTDsKLQotICBydHBtcDRncGF5LT5mcmFtZV9sZW4gPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDRnX3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwTVA0R1BheSAqcnRwbXA0Z3BheTsKLQotICBydHBtcDRncGF5ID0gR1NUX1JUUF9NUDRHX1BBWSAob2JqZWN0KTsKLQotICBnc3RfcnRwX21wNGdfcGF5X2NsZWFudXAgKHJ0cG1wNGdwYXkpOwotCi0gIGdfb2JqZWN0X3VucmVmIChydHBtcDRncGF5LT5hZGFwdGVyKTsKLSAgcnRwbXA0Z3BheS0+YWRhcHRlciA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNhbXBsaW5nX3RhYmxlWzE2XSA9IHsKLSAgOTYwMDAsIDg4MjAwLCA2NDAwMCwgNDgwMDAsIDQ0MTAwLCAzMjAwMCwgMjQwMDAsIDIyMDUwLAotICAxNjAwMCwgMTIwMDAsIDExMDI1LCA4MDAwLCA3MzUwLCAwLCAwLCAwCi19OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0Z19wYXlfcGFyc2VfYXVkaW9fY29uZmlnIChHc3RSdHBNUDRHUGF5ICogcnRwbXA0Z3BheSwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggb2JqZWN0VHlwZSA9IDA7Ci0gIGd1aW50OCBzYW1wbGluZ0lkeCA9IDA7Ci0gIGd1aW50OCBjaGFubmVsQ2ZnID0gMDsKLSAgR3N0Qml0UmVhZGVyIGJyOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJmJyLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotCi0gIC8qIGFueSBvYmplY3QgdHlwZSBpcyBmaW5lLCB3ZSBuZWVkIHRvIGNvcHkgaXQgdG8gdGhlIHByb2ZpbGUtbGV2ZWwtaWQgZmllbGQuICovCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZiciwgJm9iamVjdFR5cGUsIDUpKQotICAgIGdvdG8gdG9vX3Nob3J0OwotICBpZiAob2JqZWN0VHlwZSA9PSAwKQotICAgIGdvdG8gaW52YWxpZF9vYmplY3Q7Ci0KLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJmJyLCAmc2FtcGxpbmdJZHgsIDQpKQotICAgIGdvdG8gdG9vX3Nob3J0OwotICAvKiBvbmx5IGZpeGVkIHZhbHVlcyBmb3Igbm93ICovCi0gIGlmIChzYW1wbGluZ0lkeCA+IDEyICYmIHNhbXBsaW5nSWR4ICE9IDE1KQotICAgIGdvdG8gd3JvbmdfZnJlcTsKLQotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmYnIsICZjaGFubmVsQ2ZnLCA0KSkKLSAgICBnb3RvIHRvb19zaG9ydDsKLSAgaWYgKGNoYW5uZWxDZmcgPiA3KQotICAgIGdvdG8gd3JvbmdfY2hhbm5lbHM7Ci0KLSAgLyogcnRwIHJhdGUgZGVwZW5kcyBvbiBzYW1wbGluZyByYXRlIG9mIHRoZSBhdWRpbyAqLwotICBpZiAoc2FtcGxpbmdJZHggPT0gMTUpIHsKLSAgICBndWludDMyIHJhdGUgPSAwOwotCi0gICAgLyogaW5kZXggb2YgMTUgbWVhbnMgd2UgZ2V0IHRoZSByYXRlIGluIHRoZSBuZXh0IDI0IGJpdHMgKi8KLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJmJyLCAmcmF0ZSwgMjQpKQotICAgICAgZ290byB0b29fc2hvcnQ7Ci0KLSAgICBydHBtcDRncGF5LT5yYXRlID0gcmF0ZTsKLSAgfSBlbHNlIHsKLSAgICAvKiBlbHNlIHVzZSB0aGUgcmF0ZSBmcm9tIHRoZSB0YWJsZSAqLwotICAgIHJ0cG1wNGdwYXktPnJhdGUgPSBzYW1wbGluZ190YWJsZVtzYW1wbGluZ0lkeF07Ci0gIH0KLQotICBydHBtcDRncGF5LT5mcmFtZV9sZW4gPSAxMDI0OwotCi0gIHN3aXRjaCAob2JqZWN0VHlwZSkgewotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgIGNhc2UgNDoKLSAgICBjYXNlIDY6Ci0gICAgY2FzZSA3OgotICAgIHsKLSAgICAgIGd1aW50OCBmcmFtZUxlbkZsYWcgPSAwOwotCi0gICAgICBpZiAoZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZiciwgJmZyYW1lTGVuRmxhZywgMSkpCi0gICAgICAgIGlmIChmcmFtZUxlbkZsYWcpCi0gICAgICAgICAgcnRwbXA0Z3BheS0+ZnJhbWVfbGVuID0gOTYwOwotCi0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogZXh0cmEgcnRwIHBhcmFtcyBjb250YWluIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgKi8KLSAgZ19mcmVlIChydHBtcDRncGF5LT5wYXJhbXMpOwotICBydHBtcDRncGF5LT5wYXJhbXMgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIGNoYW5uZWxDZmcpOwotICAvKiBhdWRpbyBzdHJlYW0gdHlwZSAqLwotICBydHBtcDRncGF5LT5zdHJlYW10eXBlID0gIjUiOwotICAvKiBtb2RlIG9ubHkgaGlnaCBiaXRyYXRlIGZvciBub3cgKi8KLSAgcnRwbXA0Z3BheS0+bW9kZSA9ICJBQUMtaGJyIjsKLSAgLyogcHJvZmlsZSAqLwotICBnX2ZyZWUgKHJ0cG1wNGdwYXktPnByb2ZpbGUpOwotICBydHBtcDRncGF5LT5wcm9maWxlID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBvYmplY3RUeXBlKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRncGF5LAotICAgICAgIm9iamVjdFR5cGU6ICVkLCBzYW1wbGluZ0lkeDogJWQgKCVkKSwgY2hhbm5lbENmZzogJWQsIGZyYW1lX2xlbiAlZCIsCi0gICAgICBvYmplY3RUeXBlLCBzYW1wbGluZ0lkeCwgcnRwbXA0Z3BheS0+cmF0ZSwgY2hhbm5lbENmZywKLSAgICAgIHJ0cG1wNGdwYXktPmZyYW1lX2xlbik7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1IgKi8KLXRvb19zaG9ydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBtcDRncGF5LCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKE5VTEwpLCAoImNvbmZpZyBzdHJpbmcgdG9vIHNob3J0IikpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX29iamVjdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBtcDRncGF5LCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKE5VTEwpLCAoImludmFsaWQgb2JqZWN0IHR5cGUiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2ZyZXE6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwbXA0Z3BheSwgU1RSRUFNLCBOT1RfSU1QTEVNRU5URUQsCi0gICAgICAgIChOVUxMKSwgKCJ1bnN1cHBvcnRlZCBmcmVxdWVuY3kgaW5kZXggJWQiLCBzYW1wbGluZ0lkeCkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19jaGFubmVsczoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHBtcDRncGF5LCBTVFJFQU0sIE5PVF9JTVBMRU1FTlRFRCwKLSAgICAgICAgKE5VTEwpLCAoInVuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVscyAlZCwgbXVzdCA8IDgiLCBjaGFubmVsQ2ZnKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotI2RlZmluZSBWT1NfU1RBUlRDT0RFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQjAKLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNGdfcGF5X3BhcnNlX3ZpZGVvX2NvbmZpZyAoR3N0UnRwTVA0R1BheSAqIHJ0cG1wNGdwYXksCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQzMiBjb2RlOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG1hcC5zaXplIDwgNSkKLSAgICBnb3RvIHRvb19zaG9ydDsKLQotICBjb2RlID0gR1NUX1JFQURfVUlOVDMyX0JFIChtYXAuZGF0YSk7Ci0KLSAgZ19mcmVlIChydHBtcDRncGF5LT5wcm9maWxlKTsKLSAgaWYgKGNvZGUgPT0gVk9TX1NUQVJUQ09ERSkgewotICAgIC8qIGdldCBwcm9maWxlICovCi0gICAgcnRwbXA0Z3BheS0+cHJvZmlsZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgKGdpbnQpIG1hcC5kYXRhWzRdKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBtcDRncGF5LCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKE5VTEwpLCAoInByb2ZpbGUgbm90IGZvdW5kIGluIGNvbmZpZyBzdHJpbmcsIGFzc3VtaW5nIFwnMVwnIikpOwotICAgIHJ0cG1wNGdwYXktPnByb2ZpbGUgPSBnX3N0cmR1cCAoIjEiKTsKLSAgfQotCi0gIC8qIGZpeGVkIHJhdGUgKi8KLSAgcnRwbXA0Z3BheS0+cmF0ZSA9IDkwMDAwOwotICAvKiB2aWRlbyBzdHJlYW0gdHlwZSAqLwotICBydHBtcDRncGF5LT5zdHJlYW10eXBlID0gIjQiOwotICAvKiBubyBwYXJhbXMgZm9yIHZpZGVvICovCi0gIHJ0cG1wNGdwYXktPnBhcmFtcyA9IE5VTEw7Ci0gIC8qIG1vZGUgKi8KLSAgcnRwbXA0Z3BheS0+bW9kZSA9ICJnZW5lcmljIjsKLQotICBHU1RfTE9HX09CSkVDVCAocnRwbXA0Z3BheSwgInByb2ZpbGUgJXMiLCBydHBtcDRncGF5LT5wcm9maWxlKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SICovCi10b29fc2hvcnQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwbXA0Z3BheSwgU1RSRUFNLCBGT1JNQVQsCi0gICAgICAgIChOVUxMKSwgKCJjb25maWcgc3RyaW5nIHRvbyBzaG9ydCIpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0Z19wYXlfbmV3X2NhcHMgKEdzdFJ0cE1QNEdQYXkgKiBydHBtcDRncGF5KQotewotICBnY2hhciAqY29uZmlnOwotICBHVmFsdWUgdiA9IHsgMCB9OwotICBnYm9vbGVhbiByZXM7Ci0KLSNkZWZpbmUgTVA0R0NBUFMJCQkJCQlcCi0gICJzdHJlYW10eXBlIiwgR19UWVBFX1NUUklORywgcnRwbXA0Z3BheS0+c3RyZWFtdHlwZSwgCQlcCi0gICJwcm9maWxlLWxldmVsLWlkIiwgR19UWVBFX1NUUklORywgcnRwbXA0Z3BheS0+cHJvZmlsZSwJXAotICAibW9kZSIsIEdfVFlQRV9TVFJJTkcsIHJ0cG1wNGdwYXktPm1vZGUsCQkJXAotICAiY29uZmlnIiwgR19UWVBFX1NUUklORywgY29uZmlnLAkJCQlcCi0gICJzaXplbGVuZ3RoIiwgR19UWVBFX1NUUklORywgIjEzIiwJCQkJXAotICAiaW5kZXhsZW5ndGgiLCBHX1RZUEVfU1RSSU5HLCAiMyIsCQkJCVwKLSAgImluZGV4ZGVsdGFsZW5ndGgiLCBHX1RZUEVfU1RSSU5HLCAiMyIsCQkJXAotICBOVUxMCi0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR1NUX1RZUEVfQlVGRkVSKTsKLSAgZ3N0X3ZhbHVlX3NldF9idWZmZXIgKCZ2LCBydHBtcDRncGF5LT5jb25maWcpOwotICBjb25maWcgPSBnc3RfdmFsdWVfc2VyaWFsaXplICgmdik7Ci0KLSAgLyogaG1tLCBzaWxseSAqLwotICBpZiAocnRwbXA0Z3BheS0+cGFyYW1zKSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBtcDRncGF5KSwKLSAgICAgICAgImVuY29kaW5nLXBhcmFtcyIsIEdfVFlQRV9TVFJJTkcsIHJ0cG1wNGdwYXktPnBhcmFtcywgTVA0R0NBUFMpOwotICB9IGVsc2UgewotICAgIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwbXA0Z3BheSksCi0gICAgICAgIE1QNEdDQVBTKTsKLSAgfQotCi0gIGdfdmFsdWVfdW5zZXQgKCZ2KTsKLSAgZ19mcmVlIChjb25maWcpOwotCi0jdW5kZWYgTVA0R0NBUFMKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJ0cE1QNEdQYXkgKnJ0cG1wNGdwYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBHVmFsdWUgKmNvZGVjX2RhdGE7Ci0gIGNvbnN0IGdjaGFyICptZWRpYV90eXBlID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHJ0cG1wNGdwYXkgPSBHU1RfUlRQX01QNEdfUEFZIChwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBjb2RlY19kYXRhID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvZGVjX2RhdGEiKTsKLSAgaWYgKGNvZGVjX2RhdGEpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0Z3BheSwgImdvdCBjb2RlY19kYXRhIik7Ci0gICAgaWYgKEdfVkFMVUVfVFlQRSAoY29kZWNfZGF0YSkgPT0gR1NUX1RZUEVfQlVGRkVSKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgICAgIGNvbnN0IGdjaGFyICpuYW1lOwotCi0gICAgICBidWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAoY29kZWNfZGF0YSk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0Z3BheSwgImNvbmZpZ3VyaW5nIGNvZGVjX2RhdGEiKTsKLQotICAgICAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSk7Ci0KLSAgICAgIC8qIHBhcnNlIGJ1ZmZlciAqLwotICAgICAgaWYgKCFzdHJjbXAgKG5hbWUsICJhdWRpby9tcGVnIikpIHsKLSAgICAgICAgcmVzID0gZ3N0X3J0cF9tcDRnX3BheV9wYXJzZV9hdWRpb19jb25maWcgKHJ0cG1wNGdwYXksIGJ1ZmZlcik7Ci0gICAgICAgIG1lZGlhX3R5cGUgPSAiYXVkaW8iOwotICAgICAgfSBlbHNlIGlmICghc3RyY21wIChuYW1lLCAidmlkZW8vbXBlZyIpKSB7Ci0gICAgICAgIHJlcyA9IGdzdF9ydHBfbXA0Z19wYXlfcGFyc2VfdmlkZW9fY29uZmlnIChydHBtcDRncGF5LCBidWZmZXIpOwotICAgICAgICBtZWRpYV90eXBlID0gInZpZGVvIjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgfQotICAgICAgaWYgKCFyZXMpCi0gICAgICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKLQotICAgICAgLyogbm93IHdlIGNhbiBjb25maWd1cmUgdGhlIGJ1ZmZlciAqLwotICAgICAgaWYgKHJ0cG1wNGdwYXktPmNvbmZpZykKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAocnRwbXA0Z3BheS0+Y29uZmlnKTsKLQotICAgICAgcnRwbXA0Z3BheS0+Y29uZmlnID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOwotICAgIH0KLSAgfQotICBpZiAobWVkaWFfdHlwZSA9PSBOVUxMKQotICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocGF5bG9hZCwgbWVkaWFfdHlwZSwgVFJVRSwgIk1QRUc0LUdFTkVSSUMiLAotICAgICAgcnRwbXA0Z3BheS0+cmF0ZSk7Ci0KLSAgcmVzID0gZ3N0X3J0cF9tcDRnX3BheV9uZXdfY2FwcyAocnRwbXA0Z3BheSk7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWNvbmZpZ19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDRncGF5LCAiZmFpbGVkIHRvIHBhcnNlIGNvbmZpZyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9tcDRnX3BheV9mbHVzaCAoR3N0UnRwTVA0R1BheSAqIHJ0cG1wNGdwYXkpCi17Ci0gIGd1aW50IGF2YWlsLCB0b3RhbDsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludCBtdHU7Ci0KLSAgLyogdGhlIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBhZGFwdGVyIGlzIGVpdGhlciBzbWFsbGVyCi0gICAqIHRoYW4gdGhlIE1UVSBvciBiaWdnZXIuIEluIHRoZSBjYXNlIGl0IGlzIHNtYWxsZXIsIHRoZSBjb21wbGV0ZQotICAgKiBhZGFwdGVyIGNvbnRlbnRzIGNhbiBiZSBwdXQgaW4gb25lIHBhY2tldC4gSW4gdGhlIGNhc2UgdGhlCi0gICAqIGFkYXB0ZXIgaGFzIG1vcmUgdGhhbiBvbmUgTVRVLCB3ZSBuZWVkIHRvIGZyYWdtZW50IHRoZSBNUEVHIGRhdGEKLSAgICogb3ZlciBtdWx0aXBsZSBwYWNrZXRzLiAqLwotICB0b3RhbCA9IGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcDRncGF5LT5hZGFwdGVyKTsKLQotICByZXQgPSBHU1RfRkxPV19PSzsKLSAgbXR1ID0gR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBtcDRncGF5KTsKLQotICB3aGlsZSAoYXZhaWwgPiAwKSB7Ci0gICAgZ3VpbnQgdG93cml0ZTsKLSAgICBndWludDggKnBheWxvYWQ7Ci0gICAgZ3VpbnQgcGF5bG9hZF9sZW47Ci0gICAgZ3VpbnQgcGFja2V0X2xlbjsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gICAgR3N0QnVmZmVyICpwYXlidWY7Ci0KLSAgICAvKiB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGxlbmdodCBvZiB0aGUgcGFja2V0ICovCi0gICAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAoYXZhaWwsIDAsIDApOwotCi0gICAgLyogZmlsbCBvbmUgTVRVIG9yIGFsbCBhdmFpbGFibGUgYnl0ZXMsIHdlIG5lZWQgNCBzcGFyZSBieXRlcyBmb3IKLSAgICAgKiB0aGUgQVUgaGVhZGVyLiAqLwotICAgIHRvd3JpdGUgPSBNSU4gKHBhY2tldF9sZW4sIG10dSAtIDQpOwotCi0gICAgLyogdGhpcyBpcyB0aGUgcGF5bG9hZCBsZW5ndGggKi8KLSAgICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4gKHRvd3JpdGUsIDAsIDApOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0Z3BheSwKLSAgICAgICAgImF2YWlsICVkLCB0b3dyaXRlICVkLCBwYWNrZXRfbGVuICVkLCBwYXlsb2FkX2xlbiAlZCIsIGF2YWlsLCB0b3dyaXRlLAotICAgICAgICBwYWNrZXRfbGVuLCBwYXlsb2FkX2xlbik7Ci0KLSAgICAvKiBjcmVhdGUgYnVmZmVyIHRvIGhvbGQgdGhlIHBheWxvYWQsIGFsc28gbWFrZSByb29tIGZvciB0aGUgNCBoZWFkZXIgYnl0ZXMuICovCi0gICAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlICg0LCAwLCAwKTsKLQotICAgIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLQotICAgIC8qIGNvcHkgcGF5bG9hZCAqLwotICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0KLSAgICAvKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstIC4uIC0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfEFVLWhlYWRlcnMtbGVuZ3RofEFVLWhlYWRlcnxBVS1oZWFkZXJ8ICAgICAgfEFVLWhlYWRlcnxwYWRkaW5nfAotICAgICAqIHwgICAgICAgICAgICAgICAgIHwgICAoMSkgICB8ICAgKDIpICAgfCAgICAgIHwgICAobikgICB8IGJpdHMgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstIC4uIC0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICovCi0gICAgLyogQVUtaGVhZGVycy1sZW5ndGgsIHdlIG9ubHkgaGF2ZSAxIEFVLWhlYWRlciAqLwotICAgIHBheWxvYWRbMF0gPSAweDAwOwotICAgIHBheWxvYWRbMV0gPSAweDEwOyAgICAgICAgICAvKiB3ZSB1c2UgMTYgYml0cyBmb3IgdGhlIGhlYWRlciAqLwotCi0gICAgLyogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgKiB8ICAgICBBVS1zaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICogfCAgICAgQVUtSW5kZXggLyBBVS1JbmRleC1kZWx0YSAgICAgICAgIHwKLSAgICAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAqIHwgICAgIENUUy1mbGFnICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgKiB8ICAgICBDVFMtZGVsdGEgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICogfCAgICAgRFRTLWZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAqIHwgICAgIERUUy1kZWx0YSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgKiB8ICAgICBSQVAtZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICAgICogfCAgICAgU3RyZWFtLXN0YXRlICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgICAqLwotICAgIC8qIFRoZSBBVS1oZWFkZXIsIG5vIENUUywgRFRTLCBSQVAsIFN0cmVhbS1zdGF0ZSAKLSAgICAgKgotICAgICAqIEFVLXNpemUgaXMgYWx3YXlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBBVSwgbm90IHRoZSBmcmFnbWVudGVkIHNpemUgCi0gICAgICovCi0gICAgcGF5bG9hZFsyXSA9ICh0b3RhbCAmIDB4MWZlMCkgPj4gNTsKLSAgICBwYXlsb2FkWzNdID0gKHRvdGFsICYgMHgxZikgPDwgMzsgICAvKiB3ZSB1c2UgMTMgYml0cyBmb3IgdGhlIHNpemUsIDMgYml0cyBpbmRleCAqLwotCi0gICAgLyogbWFya2VyIG9ubHkgaWYgdGhlIHBhY2tldCBpcyBjb21wbGV0ZSAqLwotICAgIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIGF2YWlsIDw9IHBheWxvYWRfbGVuKTsKLQotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgIHBheWJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKHJ0cG1wNGdwYXktPmFkYXB0ZXIsIHBheWxvYWRfbGVuKTsKLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXA0Z3BheSksIG91dGJ1ZiwgcGF5YnVmLCAwKTsKLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAob3V0YnVmLCBwYXlidWYpOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBydHBtcDRncGF5LT5maXJzdF90aW1lc3RhbXA7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IHJ0cG1wNGdwYXktPmZpcnN0X2R1cmF0aW9uOwotCi0gICAgR1NUX0JVRkZFUl9PRkZTRVQgKG91dGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotCi0gICAgaWYgKHJ0cG1wNGdwYXktPmRpc2NvbnQpIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgLyogT25seSB0aGUgZmlyc3Qgb3V0cHV0dGVkIGJ1ZmZlciBoYXMgdGhlIERJU0NPTlQgZmxhZyAqLwotICAgICAgcnRwbXA0Z3BheS0+ZGlzY29udCA9IEZBTFNFOwotICAgIH0KLQotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBtcDRncGF5KSwgb3V0YnVmKTsKLQotICAgIGF2YWlsIC09IHBheWxvYWRfbGVuOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogd2UgZXhwZWN0IGJ1ZmZlcnMgYXMgZXhhY3RseSBvbmUgY29tcGxldGUgQVUKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXA0Z19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cE1QNEdQYXkgKnJ0cG1wNGdwYXk7Ci0KLSAgcnRwbXA0Z3BheSA9IEdTVF9SVFBfTVA0R19QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBydHBtcDRncGF5LT5maXJzdF90aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgcnRwbXA0Z3BheS0+Zmlyc3RfZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICBydHBtcDRncGF5LT5kaXNjb250ID0gR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpOwotCi0gIC8qIHdlIGFsd2F5cyBlbmNvZGUgYW5kIGZsdXNoIGEgZnVsbCBBVSAqLwotICBnc3RfYWRhcHRlcl9wdXNoIChydHBtcDRncGF5LT5hZGFwdGVyLCBidWZmZXIpOwotCi0gIHJldHVybiBnc3RfcnRwX21wNGdfcGF5X2ZsdXNoIChydHBtcDRncGF5KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNGdfcGF5X3NpbmtfZXZlbnQgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwTVA0R1BheSAqcnRwbXA0Z3BheTsKLQotICBydHBtcDRncGF5ID0gR1NUX1JUUF9NUDRHX1BBWSAocGF5bG9hZCk7Ci0KLSAgR1NUX0RFQlVHICgiR290IGV2ZW50OiAlcyIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAvKiBUaGlzIGZsdXNoIGNhbGwgbWFrZXMgc3VyZSB0aGF0IHRoZSBsYXN0IGJ1ZmZlciBpcyBhbHdheXMgcHVzaGVkCi0gICAgICAgKiB0byB0aGUgYmFzZSBwYXlsb2FkZXIgKi8KLSAgICAgIGdzdF9ydHBfbXA0Z19wYXlfZmx1c2ggKHJ0cG1wNGdwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9ydHBfbXA0Z19wYXlfcmVzZXQgKHJ0cG1wNGdwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogbGV0IHBhcmVudCBoYW5kbGUgZXZlbnQgdG9vICovCi0gIHJldHVybiBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAocGF5bG9hZCwgZXZlbnQpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfbXA0Z19wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RSdHBNUDRHUGF5ICpydHBtcDRncGF5OwotCi0gIHJ0cG1wNGdwYXkgPSBHU1RfUlRQX01QNEdfUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9tcDRnX3BheV9jbGVhbnVwIChydHBtcDRncGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfcnRwX21wNGdfcGF5X2NsZWFudXAgKHJ0cG1wNGdwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0Z19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtcDRncGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX01QNEdfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5oIGIvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZmQ2OGEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTVA0R19QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9NUDRHX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01QNEdfUEFZIFwKLSAgKGdzdF9ydHBfbXA0Z19wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9NUDRHX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9NUDRHX1BBWSxHc3RSdHBNUDRHUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9NUDRHX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVA0R19QQVksR3N0UnRwTVA0R1BheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9NUDRHX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9NUDRHX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVA0R19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX01QNEdfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QNEdQYXkgR3N0UnRwTVA0R1BheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDRHUGF5Q2xhc3MgR3N0UnRwTVA0R1BheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cE1QNEdQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgICAgcGF5bG9hZDsKLQotICBHc3RBZGFwdGVyICAgKmFkYXB0ZXI7Ci0gIEdzdENsb2NrVGltZSAgZmlyc3RfdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgIGZpcnN0X2R1cmF0aW9uOwotICBnYm9vbGVhbiAgICAgIGRpc2NvbnQ7Ci0KLSAgZ2ludCAgICAgICAgICByYXRlOwotICBnY2hhciAgICAgICAgKnBhcmFtczsKLSAgZ2NoYXIgICAgICAgICpwcm9maWxlOwotICBjb25zdCBnY2hhciAgKnN0cmVhbXR5cGU7Ci0gIGNvbnN0IGdjaGFyICAqbW9kZTsKLSAgR3N0QnVmZmVyICAgICpjb25maWc7Ci0gIGd1aW50ICAgICAgICAgZnJhbWVfbGVuOwotfTsKLQotc3RydWN0IF9Hc3RSdHBNUDRHUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX21wNGdfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9tcDRnX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUDRHX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWI2ZjBmLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXA0dmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHJ0cG1wNHZkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cG1wNHZkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwbXA0dmRlcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcDR2X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vbXBlZywiCi0gICAgICAgICJtcGVndmVyc2lvbj0oaW50KSA0LCIgInN5c3RlbXN0cmVhbT0oYm9vbGVhbilmYWxzZSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXA0dl9kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVggXSwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTVA0Vi1FU1wiIgotICAgICAgICAvKiBBbGwgb3B0aW9uYWwgcGFyYW1ldGVycwotICAgICAgICAgKgotICAgICAgICAgKiAicHJvZmlsZS1sZXZlbC1pZD1bMSxNQVhdIgotICAgICAgICAgKiAiY29uZmlnPSIgCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfbXA0dl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBNUDRWRGVwYXksIGdzdF9ydHBfbXA0dl9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX21wNHZfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tcDR2X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9tcDR2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfbXA0dl9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDR2X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cE1QNFZEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfbXA0dl9kZXBheV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX21wNHZfZGVwYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfbXA0dl9kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfbXA0dl9kZXBheV9zZXRjYXBzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXA0dl9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wNHZfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgTVBFRzQgdmlkZW8gZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIE1QRUc0IHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKFJGQyAzMDE2KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwbXA0dmRlcGF5X2RlYnVnLCAicnRwbXA0dmRlcGF5IiwgMCwKLSAgICAgICJNUEVHNCB2aWRlbyBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0dl9kZXBheV9pbml0IChHc3RSdHBNUDRWRGVwYXkgKiBydHBtcDR2ZGVwYXkpCi17Ci0gIHJ0cG1wNHZkZXBheS0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0dl9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwTVA0VkRlcGF5ICpydHBtcDR2ZGVwYXk7Ci0KLSAgcnRwbXA0dmRlcGF5ID0gR1NUX1JUUF9NUDRWX0RFUEFZIChvYmplY3QpOwotCi0gIGdfb2JqZWN0X3VucmVmIChydHBtcDR2ZGVwYXktPmFkYXB0ZXIpOwotICBydHBtcDR2ZGVwYXktPmFkYXB0ZXIgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNHZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RDYXBzICpzcmNjYXBzOwotICBjb25zdCBnY2hhciAqc3RyOwotICBnaW50IGNsb2NrX3JhdGU7Ci0gIGdib29sZWFuIHJlczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZyIsCi0gICAgICAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCA0LAotICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0KLSAgaWYgKChzdHIgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImNvbmZpZyIpKSkgewotICAgIEdWYWx1ZSB2ID0geyAwIH07Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2LCBHU1RfVFlQRV9CVUZGRVIpOwotICAgIGlmIChnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZ2LCBzdHIpKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKCZ2KTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY2NhcHMsCi0gICAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGJ1ZmZlciwgTlVMTCk7Ci0gICAgICAvKiBjYXBzIHRha2VzIHJlZiAqLwotICAgICAgZ192YWx1ZV91bnNldCAoJnYpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX3dhcm5pbmcgKCJjYW5ub3QgY29udmVydCBjb25maWcgdG8gYnVmZmVyIik7Ci0gICAgfQotICB9Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9tcDR2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwTVA0VkRlcGF5ICpydHBtcDR2ZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqcGJ1ZiwgKm91dGJ1ZiA9IE5VTEw7Ci0gIGdib29sZWFuIG1hcmtlcjsKLQotICBydHBtcDR2ZGVwYXkgPSBHU1RfUlRQX01QNFZfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgLyogZmx1c2ggcmVtYWluaW5nIGRhdGEgb24gZGlzY29udCAqLwotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpCi0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cG1wNHZkZXBheS0+YWRhcHRlcik7Ci0KLSAgcGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2J1ZmZlciAocnRwKTsKLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBnc3RfYWRhcHRlcl9wdXNoIChydHBtcDR2ZGVwYXktPmFkYXB0ZXIsIHBidWYpOwotCi0gIC8qIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHBhY2tldCBvZiB0aGUgVk9QLCBjcmVhdGUgYW5kIHB1c2ggYSBidWZmZXIgKi8KLSAgaWYgKG1hcmtlcikgewotICAgIGd1aW50IGF2YWlsOwotCi0gICAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cG1wNHZkZXBheS0+YWRhcHRlcik7Ci0gICAgb3V0YnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHJ0cG1wNHZkZXBheS0+YWRhcHRlciwgYXZhaWwpOwotCi0gICAgR1NUX0RFQlVHICgiZ3N0X3J0cF9tcDR2X2RlcGF5X2NoYWluOiBwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFULCBnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWYpKTsKLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXA0dmRlcGF5KSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX21wNHZfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSdHBNUDRWRGVwYXkgKnJ0cG1wNHZkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cG1wNHZkZXBheSA9IEdTVF9SVFBfTVA0Vl9ERVBBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChydHBtcDR2ZGVwYXktPmFkYXB0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX21wNHZfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtcDR2ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfTVA0Vl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBtcDR2ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM2ZTBkYi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wNHZkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX01QNFZfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9NUDRWX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9NUDRWX0RFUEFZIFwKLSAgKGdzdF9ydHBfbXA0dl9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX01QNFZfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTVA0Vl9ERVBBWSxHc3RSdHBNUDRWRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX01QNFZfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX01QNFZfREVQQVksR3N0UnRwTVA0VkRlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QNFZfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVA0Vl9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVA0Vl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVA0Vl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDRWRGVwYXkgR3N0UnRwTVA0VkRlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QNFZEZXBheUNsYXNzIEdzdFJ0cE1QNFZEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cE1QNFZEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLSAgCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cE1QNFZEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX21wNHZfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX21wNHZfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfTVA0Vl9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0dnBheS5jIGIvZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MWYzNTMuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwbXA0dnBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cG1wNHZwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cG1wNHZwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX21wNHZfcGF5X3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL21wZWcsIgotICAgICAgICAibXBlZ3ZlcnNpb249KGludCkgNCwgc3lzdGVtc3RyZWFtPShib29sZWFuKWZhbHNlOyIgInZpZGVvL3gtZGl2eCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXA0dl9wYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJNUDRWLUVTXCIiCi0gICAgICAgIC8qIHR3byBzdHJpbmcgcGFyYW1zCi0gICAgICAgICAqCi0gICAgICAgICAicHJvZmlsZS1sZXZlbC1pZCA9IChzdHJpbmcpIFsxLE1BWF0iCi0gICAgICAgICAiY29uZmlnID0gKHN0cmluZykgWzEsTUFYXSIKLSAgICAgICAgICovCi0gICAgKQotICAgICk7Ci0KLSNkZWZpbmUgREVGQVVMVF9DT05GSUdfSU5URVJWQUwgMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9DT05GSUdfSU5URVJWQUwKLX07Ci0KLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9tcDR2X3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXA0dl9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9tcDR2X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wNHZfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX21wNHZfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICoKLSAgICBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfbXA0dl9wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXksCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9tcDR2X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBNUDRWUGF5LCBnc3RfcnRwX21wNHZfcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9QQVlMT0FEKQotCi0gICAgIHN0YXRpYyB2b2lkIGdzdF9ydHBfbXA0dl9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwTVA0VlBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9tcDR2X3BheV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ydHBfbXA0dl9wYXlfZ2V0X3Byb3BlcnR5OwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXA0dl9wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcDR2X3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBNUEVHNCBWaWRlbyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkIE1QRUctNCB2aWRlbyBhcyBSVFAgcGFja2V0cyAoUkZDIDMwMTYpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQ09ORklHX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjb25maWctaW50ZXJ2YWwiLCAiQ29uZmlnIFNlbmQgSW50ZXJ2YWwiLAotICAgICAgICAgICJTZW5kIENvbmZpZyBJbnNlcnRpb24gSW50ZXJ2YWwgaW4gc2Vjb25kcyAoY29uZmlndXJhdGlvbiBoZWFkZXJzICIKLSAgICAgICAgICAid2lsbCBiZSBtdWx0aXBsZXhlZCBpbiB0aGUgZGF0YSBzdHJlYW0gd2hlbiBkZXRlY3RlZC4pICgwID0gZGlzYWJsZWQpIiwKLSAgICAgICAgICAwLCAzNjAwLCBERUZBVUxUX0NPTkZJR19JTlRFUlZBTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpCi0gICAgICApOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9tcDR2X3BheV9maW5hbGl6ZTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX21wNHZfcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF9tcDR2X3BheV9oYW5kbGVfYnVmZmVyOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2lua19ldmVudCA9IGdzdF9ydHBfbXA0dl9wYXlfc2lua19ldmVudDsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwbXA0dnBheV9kZWJ1ZywgInJ0cG1wNHZwYXkiLCAwLAotICAgICAgIk1QNCB2aWRlbyBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNHZfcGF5X2luaXQgKEdzdFJ0cE1QNFZQYXkgKiBydHBtcDR2cGF5KQotewotICBydHBtcDR2cGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBtcDR2cGF5LT5yYXRlID0gOTAwMDA7Ci0gIHJ0cG1wNHZwYXktPnByb2ZpbGUgPSAxOwotICBydHBtcDR2cGF5LT5uZWVkX2NvbmZpZyA9IFRSVUU7Ci0gIHJ0cG1wNHZwYXktPmNvbmZpZ19pbnRlcnZhbCA9IERFRkFVTFRfQ09ORklHX0lOVEVSVkFMOwotICBydHBtcDR2cGF5LT5sYXN0X2NvbmZpZyA9IC0xOwotCi0gIHJ0cG1wNHZwYXktPmNvbmZpZyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wNHZfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBNUDRWUGF5ICpydHBtcDR2cGF5OwotCi0gIHJ0cG1wNHZwYXkgPSBHU1RfUlRQX01QNFZfUEFZIChvYmplY3QpOwotCi0gIGlmIChydHBtcDR2cGF5LT5jb25maWcpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChydHBtcDR2cGF5LT5jb25maWcpOwotICAgIHJ0cG1wNHZwYXktPmNvbmZpZyA9IE5VTEw7Ci0gIH0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cG1wNHZwYXktPmFkYXB0ZXIpOwotICBydHBtcDR2cGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcDR2X3BheV9uZXdfY2FwcyAoR3N0UnRwTVA0VlBheSAqIHJ0cG1wNHZwYXkpCi17Ci0gIGdjaGFyICpwcm9maWxlLCAqY29uZmlnOwotICBHVmFsdWUgdiA9IHsgMCB9OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcHJvZmlsZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgcnRwbXA0dnBheS0+cHJvZmlsZSk7Ci0gIGdfdmFsdWVfaW5pdCAoJnYsIEdTVF9UWVBFX0JVRkZFUik7Ci0gIGdzdF92YWx1ZV9zZXRfYnVmZmVyICgmdiwgcnRwbXA0dnBheS0+Y29uZmlnKTsKLSAgY29uZmlnID0gZ3N0X3ZhbHVlX3NlcmlhbGl6ZSAoJnYpOwotCi0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwbXA0dnBheSksCi0gICAgICAicHJvZmlsZS1sZXZlbC1pZCIsIEdfVFlQRV9TVFJJTkcsIHByb2ZpbGUsCi0gICAgICAiY29uZmlnIiwgR19UWVBFX1NUUklORywgY29uZmlnLCBOVUxMKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0KLSAgZ19mcmVlIChwcm9maWxlKTsKLSAgZ19mcmVlIChjb25maWcpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcDR2X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBNUDRWUGF5ICpydHBtcDR2cGF5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgR1ZhbHVlICpjb2RlY19kYXRhOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwbXA0dnBheSA9IEdTVF9SVFBfTVA0Vl9QQVkgKHBheWxvYWQpOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAidmlkZW8iLCBUUlVFLCAiTVA0Vi1FUyIsCi0gICAgICBydHBtcDR2cGF5LT5yYXRlKTsKLQotICByZXMgPSBUUlVFOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBjb2RlY19kYXRhID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImNvZGVjX2RhdGEiKTsKLSAgaWYgKGNvZGVjX2RhdGEpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0dnBheSwgImdvdCBjb2RlY19kYXRhIik7Ci0gICAgaWYgKEdfVkFMVUVfVFlQRSAoY29kZWNfZGF0YSkgPT0gR1NUX1RZUEVfQlVGRkVSKSB7Ci0gICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgYnVmZmVyID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGNvZGVjX2RhdGEpOwotCi0gICAgICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA8IDUpCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWZmZXIsIDQsICZydHBtcDR2cGF5LT5wcm9maWxlLCAxKTsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDR2cGF5LCAiY29uZmlndXJpbmcgY29kZWNfZGF0YSwgcHJvZmlsZSAlZCIsCi0gICAgICAgICAgcnRwbXA0dnBheS0+cHJvZmlsZSk7Ci0KLSAgICAgIGlmIChydHBtcDR2cGF5LT5jb25maWcpCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHJ0cG1wNHZwYXktPmNvbmZpZyk7Ci0gICAgICBydHBtcDR2cGF5LT5jb25maWcgPSBnc3RfYnVmZmVyX2NvcHkgKGJ1ZmZlcik7Ci0gICAgICByZXMgPSBnc3RfcnRwX21wNHZfcGF5X25ld19jYXBzIChydHBtcDR2cGF5KTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0dl9wYXlfZW1wdHkgKEdzdFJ0cE1QNFZQYXkgKiBydHBtcDR2cGF5KQotewotICBnc3RfYWRhcHRlcl9jbGVhciAocnRwbXA0dnBheS0+YWRhcHRlcik7Ci19Ci0KLSNkZWZpbmUgUlRQX0hFQURFUl9MRU4gMTIKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXA0dl9wYXlfZmx1c2ggKEdzdFJ0cE1QNFZQYXkgKiBydHBtcDR2cGF5KQotewotICBndWludCBhdmFpbCwgbXR1OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0QnVmZmVyICpvdXRidWZfZGF0YSA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXJMaXN0ICpsaXN0ID0gTlVMTDsKLQotICAvKiB0aGUgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGFkYXB0ZXIgaXMgZWl0aGVyIHNtYWxsZXIKLSAgICogdGhhbiB0aGUgTVRVIG9yIGJpZ2dlci4gSW4gdGhlIGNhc2UgaXQgaXMgc21hbGxlciwgdGhlIGNvbXBsZXRlCi0gICAqIGFkYXB0ZXIgY29udGVudHMgY2FuIGJlIHB1dCBpbiBvbmUgcGFja2V0LiBJbiB0aGUgY2FzZSB0aGUKLSAgICogYWRhcHRlciBoYXMgbW9yZSB0aGFuIG9uZSBNVFUsIHdlIG5lZWQgdG8gc3BsaXQgdGhlIE1QNFYgZGF0YQotICAgKiBvdmVyIG11bHRpcGxlIHBhY2tldHMuICovCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcDR2cGF5LT5hZGFwdGVyKTsKLQotICBpZiAocnRwbXA0dnBheS0+Y29uZmlnID09IE5VTEwgJiYgcnRwbXA0dnBheS0+bmVlZF9jb25maWcpIHsKLSAgICAvKiB3aGVuIHdlIGRvbid0IGhhdmUgYSBjb25maWcgeWV0LCBmbHVzaCB0aGluZ3Mgb3V0ICovCi0gICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHJ0cG1wNHZwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLSAgICBhdmFpbCA9IDA7Ci0gIH0KLQotICBpZiAoIWF2YWlsKQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHJ0cG1wNHZwYXkpOwotCi0gIC8qIFVzZSBidWZmZXIgbGlzdHMuIEVhY2ggZnJhbWUgd2lsbCBiZSBwdXQgaW50byBhIGxpc3QKLSAgICogb2YgYnVmZmVycyBhbmQgdGhlIHdob2xlIGxpc3Qgd2lsbCBiZSBwdXNoZWQgZG93bnN0cmVhbQotICAgKiBhdCBvbmNlICovCi0gIGxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbmV3X3NpemVkICgoYXZhaWwgLyAobXR1IC0gUlRQX0hFQURFUl9MRU4pKSArIDEpOwotCi0gIHdoaWxlIChhdmFpbCA+IDApIHsKLSAgICBndWludCB0b3dyaXRlOwotICAgIGd1aW50IHBheWxvYWRfbGVuOwotICAgIGd1aW50IHBhY2tldF9sZW47Ci0gICAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotCi0gICAgLyogdGhpcyB3aWxsIGJlIHRoZSB0b3RhbCBsZW5naHQgb2YgdGhlIHBhY2tldCAqLwotICAgIHBhY2tldF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKGF2YWlsLCAwLCAwKTsKLQotICAgIC8qIGZpbGwgb25lIE1UVSBvciBhbGwgYXZhaWxhYmxlIGJ5dGVzICovCi0gICAgdG93cml0ZSA9IE1JTiAocGFja2V0X2xlbiwgbXR1KTsKLQotICAgIC8qIHRoaXMgaXMgdGhlIHBheWxvYWQgbGVuZ3RoICovCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuICh0b3dyaXRlLCAwLCAwKTsKLQotICAgIC8qIGNyZWF0ZSBidWZmZXIgd2l0aG91dCBwYXlsb2FkLiBUaGUgcGF5bG9hZCB3aWxsIGJlIHB1dAotICAgICAqIGluIG5leHQgYnVmZmVyIGluc3RlYWQuIEJvdGggYnVmZmVycyB3aWxsIGJlIG1lcmdlZCAqLwotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMCwgMCwgMCk7Ci0KLSAgICAvKiBUYWtlIGJ1ZmZlciB3aXRoIHRoZSBwYXlsb2FkIGZyb20gdGhlIGFkYXB0ZXIgKi8KLSAgICBvdXRidWZfZGF0YSA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKHJ0cG1wNHZwYXktPmFkYXB0ZXIsCi0gICAgICAgIHBheWxvYWRfbGVuKTsKLQotICAgIGF2YWlsIC09IHBheWxvYWRfbGVuOwotCi0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChvdXRidWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotICAgIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIGF2YWlsID09IDApOwotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXA0dnBheSksIG91dGJ1Ziwgb3V0YnVmX2RhdGEsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1Ziwgb3V0YnVmX2RhdGEpOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBydHBtcDR2cGF5LT5maXJzdF90aW1lc3RhbXA7Ci0KLSAgICAvKiBhZGQgdG8gbGlzdCAqLwotICAgIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIC0xLCBvdXRidWYpOwotICB9Ci0KLSAgLyogcHVzaCB0aGUgd2hvbGUgYnVmZmVyIGxpc3QgYXQgb25jZSAqLwotICByZXQgPQotICAgICAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaF9saXN0IChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwbXA0dnBheSksIGxpc3QpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgVk9TX1NUQVJUQ09ERSAgICAgICAgICAgICAgICAgICAweDAwMDAwMUIwCi0jZGVmaW5lIFZPU19FTkRDT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDFCMQotI2RlZmluZSBVU0VSX0RBVEFfU1RBUlRDT0RFICAgICAgICAgICAgIDB4MDAwMDAxQjIKLSNkZWZpbmUgR09QX1NUQVJUQ09ERSAgICAgICAgICAgICAgICAgICAweDAwMDAwMUIzCi0jZGVmaW5lIFZJU1VBTF9PQkpFQ1RfU1RBUlRDT0RFICAgICAgICAgMHgwMDAwMDFCNQotI2RlZmluZSBWT1BfU1RBUlRDT0RFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxQjYKLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wNHZfcGF5X2RlcGF5X2RhdGEgKEdzdFJ0cE1QNFZQYXkgKiBlbmMsIGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgZ2ludCAqIHN0cmlwLCBnYm9vbGVhbiAqIHZvcGkpCi17Ci0gIGd1aW50MzIgY29kZTsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotICAqdm9waSA9IEZBTFNFOwotCi0gICpzdHJpcCA9IDA7Ci0KLSAgaWYgKHNpemUgPCA1KQotICAgIHJldHVybiBGQUxTRTsKLQotICBjb2RlID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAic3RhcnQgY29kZSAweCUwOHgiLCBjb2RlKTsKLQotICBzd2l0Y2ggKGNvZGUpIHsKLSAgICBjYXNlIFZPU19TVEFSVENPREU6Ci0gICAgY2FzZSAweDAwMDAwMTAxOgotICAgIHsKLSAgICAgIGdpbnQgaTsKLSAgICAgIGd1aW50OCBwcm9maWxlOwotICAgICAgZ2Jvb2xlYW4gbmV3cHJvZmlsZSA9IEZBTFNFOwotICAgICAgZ2Jvb2xlYW4gZXF1YWw7Ci0KLSAgICAgIGlmIChjb2RlID09IFZPU19TVEFSVENPREUpIHsKLSAgICAgICAgLyogcHJvZmlsZV9hbmRfbGV2ZWxfaW5kaWNhdGlvbiAqLwotICAgICAgICBwcm9maWxlID0gZGF0YVs0XTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJWT1MgcHJvZmlsZSAweCUwOHgiLCBwcm9maWxlKTsKLQotICAgICAgICBpZiAocHJvZmlsZSAhPSBlbmMtPnByb2ZpbGUpIHsKLSAgICAgICAgICBuZXdwcm9maWxlID0gVFJVRTsKLSAgICAgICAgICBlbmMtPnByb2ZpbGUgPSBwcm9maWxlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIHVwIHRvIHRoZSBuZXh0IEdPUF9TVEFSVENPREUgb3IgVk9QX1NUQVJUQ09ERSBpcwotICAgICAgICogdGhlIGNvbmZpZyBpbmZvcm1hdGlvbiAqLwotICAgICAgY29kZSA9IDB4ZmZmZmZmZmY7Ci0gICAgICBmb3IgKGkgPSA1OyBpIDwgc2l6ZSAtIDQ7IGkrKykgewotICAgICAgICBjb2RlID0gKGNvZGUgPDwgOCkgfCBkYXRhW2ldOwotICAgICAgICBpZiAoY29kZSA9PSBHT1BfU1RBUlRDT0RFIHx8IGNvZGUgPT0gVk9QX1NUQVJUQ09ERSkKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGkgLT0gMzsKLSAgICAgIC8qIHNlZSBpZiBjb25maWcgY2hhbmdlZCAqLwotICAgICAgZXF1YWwgPSBGQUxTRTsKLSAgICAgIGlmIChlbmMtPmNvbmZpZykgewotICAgICAgICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZW5jLT5jb25maWcpID09IGkpIHsKLSAgICAgICAgICBlcXVhbCA9IGdzdF9idWZmZXJfbWVtY21wIChlbmMtPmNvbmZpZywgMCwgZGF0YSwgaSkgPT0gMDsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogaWYgY29uZmlnIHN0cmluZyBjaGFuZ2VkIG9yIG5ldyBwcm9maWxlLCBtYWtlIG5ldyBjYXBzICovCi0gICAgICBpZiAoIWVxdWFsIHx8IG5ld3Byb2ZpbGUpIHsKLSAgICAgICAgaWYgKGVuYy0+Y29uZmlnKQotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGVuYy0+Y29uZmlnKTsKLSAgICAgICAgZW5jLT5jb25maWcgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGkpOwotCi0gICAgICAgIGdzdF9idWZmZXJfZmlsbCAoZW5jLT5jb25maWcsIDAsIGRhdGEsIGkpOwotCi0gICAgICAgIGdzdF9ydHBfbXA0dl9wYXlfbmV3X2NhcHMgKGVuYyk7Ci0gICAgICB9Ci0gICAgICAqc3RyaXAgPSBpOwotICAgICAgLyogd2UgbmVlZCB0byBmbHVzaCBvdXQgdGhlIGN1cnJlbnQgcGFja2V0LiAqLwotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFZPUF9TVEFSVENPREU6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJWT1AiKTsKLSAgICAgIC8qIFZPUCBzdGFydGNvZGUsIHdlIGRvbid0IGhhdmUgdG8gZmx1c2ggdGhlIHBhY2tldCAqLwotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAvKiB2b3AtY29kaW5nLXR5cGUgPT0gSS1mcmFtZSAqLwotICAgICAgaWYgKHNpemUgPiA0ICYmIChkYXRhWzRdID4+IDYgPT0gMCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAiVk9QLUkiKTsKLSAgICAgICAgKnZvcGkgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHT1BfU1RBUlRDT0RFOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZW5jLCAiR09QIik7Ci0gICAgICAqdm9waSA9IFRSVUU7Ci0gICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDAwMDAwMTAwOgotICAgICAgZW5jLT5uZWVkX2NvbmZpZyA9IEZBTFNFOwotICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoY29kZSA+PSAweDIwICYmIGNvZGUgPD0gMHgyZikgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJzaG9ydCBoZWFkZXIiKTsKLSAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlbmMsICJvdGhlciBzdGFydGNvZGUiKTsKLSAgICAgICAgLyogYWxsIG90aGVyIHN0YXJ0Y29kZXMgbmVlZCBhIGZsdXNoICovCi0gICAgICAgIHJlc3VsdCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiB3ZSBleHBlY3QgYnVmZmVycyBzdGFydGluZyBvbiBzdGFydGNvZGVzLiAKLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXA0dl9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cE1QNFZQYXkgKnJ0cG1wNHZwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBndWludCBhdmFpbDsKLSAgZ3VpbnQgcGFja2V0X2xlbjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdzaXplIHNpemU7Ci0gIGdib29sZWFuIGZsdXNoOwotICBnaW50IHN0cmlwOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLSAgZ2Jvb2xlYW4gdm9waTsKLSAgZ2Jvb2xlYW4gc2VuZF9jb25maWc7Ci0KLSAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIHNlbmRfY29uZmlnID0gRkFMU0U7Ci0KLSAgcnRwbXA0dnBheSA9IEdTVF9SVFBfTVA0Vl9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBzaXplID0gbWFwLnNpemU7Ci0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICBkdXJhdGlvbiA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcik7Ci0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcDR2cGF5LT5hZGFwdGVyKTsKLQotICBpZiAoZHVyYXRpb24gPT0gLTEpCi0gICAgZHVyYXRpb24gPSAwOwotCi0gIC8qIGVtcHR5IGJ1ZmZlciwgdGFrZSB0aW1lc3RhbXAgKi8KLSAgaWYgKGF2YWlsID09IDApIHsKLSAgICBydHBtcDR2cGF5LT5maXJzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgcnRwbXA0dnBheS0+ZHVyYXRpb24gPSAwOwotICB9Ci0KLSAgLyogZGVwYXkgaW5jb21taW5nIGRhdGEgYW5kIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGEgbmV3IFJUUAotICAgKiBwYWNrZXQgKi8KLSAgZmx1c2ggPQotICAgICAgZ3N0X3J0cF9tcDR2X3BheV9kZXBheV9kYXRhIChydHBtcDR2cGF5LCBtYXAuZGF0YSwgc2l6ZSwgJnN0cmlwLCAmdm9waSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgaWYgKHN0cmlwKSB7Ci0gICAgLyogc3RyaXAgb2ZmIGNvbmZpZyBpZiByZXF1ZXN0ZWQgKi8KLSAgICBpZiAoIShydHBtcDR2cGF5LT5jb25maWdfaW50ZXJ2YWwgPiAwKSkgewotICAgICAgR3N0QnVmZmVyICpzdWJidWY7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDR2cGF5LCAic3RyaXBwaW5nIGNvbmZpZyBhdCAlZCwgc2l6ZSAlZCIsIHN0cmlwLAotICAgICAgICAgIChnaW50KSBzaXplIC0gc3RyaXApOwotCi0gICAgICAvKiBzdHJpcCBvZmYgaGVhZGVyICovCi0gICAgICBzdWJidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIHN0cmlwLAotICAgICAgICAgIHNpemUgLSBzdHJpcCk7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAoc3ViYnVmKSA9IHRpbWVzdGFtcDsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICBidWZmZXIgPSBzdWJidWY7Ci0KLSAgICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXA0dnBheSwgImZvdW5kIGNvbmZpZyBpbiBzdHJlYW0iKTsKLSAgICAgIHJ0cG1wNHZwYXktPmxhc3RfY29uZmlnID0gdGltZXN0YW1wOwotICAgIH0KLSAgfQotCi0gIC8qIHRoZXJlIGlzIGEgY29uZmlnIHJlcXVlc3QsIHNlZSBpZiB3ZSBuZWVkIHRvIGluc2VydCBpdCAqLwotICBpZiAodm9waSAmJiAocnRwbXA0dnBheS0+Y29uZmlnX2ludGVydmFsID4gMCkgJiYgcnRwbXA0dnBheS0+Y29uZmlnKSB7Ci0gICAgaWYgKHJ0cG1wNHZwYXktPmxhc3RfY29uZmlnICE9IC0xKSB7Ci0gICAgICBndWludDY0IGRpZmY7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDR2cGF5LAotICAgICAgICAgICJub3cgJSIgR1NUX1RJTUVfRk9STUFUICIsIGxhc3QgVk9QLUkgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCksIEdTVF9USU1FX0FSR1MgKHJ0cG1wNHZwYXktPmxhc3RfY29uZmlnKSk7Ci0KLSAgICAgIC8qIGNhbGN1bGF0ZSBkaWZmIGJldHdlZW4gbGFzdCBjb25maWcgaW4gbWlsbGlzZWNvbmRzICovCi0gICAgICBpZiAodGltZXN0YW1wID4gcnRwbXA0dnBheS0+bGFzdF9jb25maWcpIHsKLSAgICAgICAgZGlmZiA9IHRpbWVzdGFtcCAtIHJ0cG1wNHZwYXktPmxhc3RfY29uZmlnOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGlmZiA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wNHZwYXksCi0gICAgICAgICAgImludGVydmFsIHNpbmNlIGxhc3QgY29uZmlnICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoZGlmZikpOwotCi0gICAgICAvKiBiaWdnZXIgdGhhbiBpbnRlcnZhbCwgcXVldWUgY29uZmlnICovCi0gICAgICAvKiBGSVhNRSBzaG91bGQgY29udmVydCB0aW1lc3RhbXBzIHRvIHJ1bm5pbmcgdGltZSAqLwotICAgICAgaWYgKEdTVF9USU1FX0FTX1NFQ09ORFMgKGRpZmYpID49IHJ0cG1wNHZwYXktPmNvbmZpZ19pbnRlcnZhbCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcDR2cGF5LCAidGltZSB0byBzZW5kIGNvbmZpZyIpOwotICAgICAgICBzZW5kX2NvbmZpZyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5vIGtub3duIHByZXZpb3VzIGNvbmZpZyB0aW1lLCBzZW5kIG5vdyAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXA0dnBheSwgIm5vIHByZXZpb3VzIGNvbmZpZyB0aW1lLCBzZW5kIG5vdyIpOwotICAgICAgc2VuZF9jb25maWcgPSBUUlVFOwotICAgIH0KLQotICAgIGlmIChzZW5kX2NvbmZpZykgewotICAgICAgLyogd2UgbmVlZCB0byBzZW5kIGNvbmZpZyBub3cgZmlyc3QgKi8KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcDR2cGF5LCAiaW5zZXJ0aW5nIGNvbmZpZyBpbiBzdHJlYW0iKTsKLQotICAgICAgLyogaW5zZXJ0IGhlYWRlciAqLwotICAgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGdzdF9idWZmZXJfcmVmIChydHBtcDR2cGF5LT5jb25maWcpLCBidWZmZXIpOwotCi0gICAgICBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9IHRpbWVzdGFtcDsKLSAgICAgIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotCi0gICAgICBpZiAodGltZXN0YW1wICE9IC0xKSB7Ci0gICAgICAgIHJ0cG1wNHZwYXktPmxhc3RfY29uZmlnID0gdGltZXN0YW1wOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIGlmIHdlIG5lZWQgdG8gZmx1c2gsIGRvIHNvIG5vdyAqLwotICBpZiAoZmx1c2gpIHsKLSAgICByZXQgPSBnc3RfcnRwX21wNHZfcGF5X2ZsdXNoIChydHBtcDR2cGF5KTsKLSAgICBydHBtcDR2cGF5LT5maXJzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgcnRwbXA0dnBheS0+ZHVyYXRpb24gPSAwOwotICAgIGF2YWlsID0gMDsKLSAgfQotCi0gIC8qIGdldCBwYWNrZXQgbGVuZ3RoIG9mIGRhdGEgYW5kIHNlZSBpZiB3ZSBleGNlZWRlZCBNVFUuICovCi0gIHBhY2tldF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BhY2tldF9sZW4gKGF2YWlsICsgc2l6ZSwgMCwgMCk7Ci0KLSAgaWYgKGdzdF9ydHBfYmFzZV9wYXlsb2FkX2lzX2ZpbGxlZCAoYmFzZXBheWxvYWQsCi0gICAgICAgICAgcGFja2V0X2xlbiwgcnRwbXA0dnBheS0+ZHVyYXRpb24gKyBkdXJhdGlvbikpIHsKLSAgICByZXQgPSBnc3RfcnRwX21wNHZfcGF5X2ZsdXNoIChydHBtcDR2cGF5KTsKLSAgICBydHBtcDR2cGF5LT5maXJzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgcnRwbXA0dnBheS0+ZHVyYXRpb24gPSAwOwotICB9Ci0KLSAgLyogcHVzaCBuZXcgZGF0YSAqLwotICBnc3RfYWRhcHRlcl9wdXNoIChydHBtcDR2cGF5LT5hZGFwdGVyLCBidWZmZXIpOwotCi0gIHJ0cG1wNHZwYXktPmR1cmF0aW9uICs9IGR1cmF0aW9uOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcDR2X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwTVA0VlBheSAqcnRwbXA0dnBheTsKLQotICBydHBtcDR2cGF5ID0gR1NUX1JUUF9NUDRWX1BBWSAocGF5KTsKLQotICBHU1RfREVCVUcgKCJHb3QgZXZlbnQ6ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICAgIC8qIFRoaXMgZmx1c2ggY2FsbCBtYWtlcyBzdXJlIHRoYXQgdGhlIGxhc3QgYnVmZmVyIGlzIGFsd2F5cyBwdXNoZWQKLSAgICAgICAqIHRvIHRoZSBiYXNlIHBheWxvYWRlciAqLwotICAgICAgZ3N0X3J0cF9tcDR2X3BheV9mbHVzaCAocnRwbXA0dnBheSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgZ3N0X3J0cF9tcDR2X3BheV9lbXB0eSAocnRwbXA0dnBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBsZXQgcGFyZW50IGhhbmRsZSBldmVudCB0b28gKi8KLSAgcmV0dXJuIEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChwYXksIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXA0dl9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cE1QNFZQYXkgKnJ0cG1wNHZwYXk7Ci0KLSAgcnRwbXA0dnBheSA9IEdTVF9SVFBfTVA0Vl9QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NPTkZJR19JTlRFUlZBTDoKLSAgICAgIHJ0cG1wNHZwYXktPmNvbmZpZ19pbnRlcnZhbCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcDR2X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwTVA0VlBheSAqcnRwbXA0dnBheTsKLQotICBydHBtcDR2cGF5ID0gR1NUX1JUUF9NUDRWX1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ09ORklHX0lOVEVSVkFMOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0cG1wNHZwYXktPmNvbmZpZ19pbnRlcnZhbCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXA0dl9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtcDR2cGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX01QNFZfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0dnBheS5oIGIvZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NzRhOTEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcDR2cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTVA0Vl9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9NUDRWX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01QNFZfUEFZIFwKLSAgKGdzdF9ydHBfbXA0dl9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9NUDRWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9NUDRWX1BBWSxHc3RSdHBNUDRWUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9NUDRWX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVA0Vl9QQVksR3N0UnRwTVA0VlBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9NUDRWX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9NUDRWX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVA0Vl9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX01QNFZfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QNFZQYXkgR3N0UnRwTVA0VlBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUDRWUGF5Q2xhc3MgR3N0UnRwTVA0VlBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cE1QNFZQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgICAgcGF5bG9hZDsKLQotICBHc3RBZGFwdGVyICAgKmFkYXB0ZXI7Ci0gIEdzdENsb2NrVGltZSAgZmlyc3RfdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgIGR1cmF0aW9uOwotCi0gIGdpbnQgICAgICAgICAgcmF0ZTsKLSAgZ2ludCAgICAgICAgICBwcm9maWxlOwotICBHc3RCdWZmZXIgICAgKmNvbmZpZzsKLSAgZ2Jvb2xlYW4gICAgICBzZW5kX2NvbmZpZzsKLSAgZ2Jvb2xlYW4gICAgICBuZWVkX2NvbmZpZzsKLQotICAvKiBuYW1pbmcgbWlnaHQgYmUgY29uZnVzaW5nIHdpdGggc2VuZF9jb25maWc7IGJ1dCBuYW1pbmcgbWF0Y2hlcyBoMjY0Ci0gICAqIHBheWxvYWRlciAqLwotICBndWludCAgICAgICAgIGNvbmZpZ19pbnRlcnZhbDsKLSAgR3N0Q2xvY2tUaW1lICBsYXN0X2NvbmZpZzsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTVA0VlBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9tcDR2X3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfbXA0dl9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfTVA0Vl9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ODA3NzAuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcGFkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RydHBtcGFkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cG1wYWRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBtcGFkZXBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXBhX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vbXBlZywgIiAibXBlZ3ZlcnNpb24gPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcGFfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfTVBBX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAgOyIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTVBBXCIsIGNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYXSIpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfcnRwX21wYV9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBNUEFEZXBheSwgZ3N0X3J0cF9tcGFfZGVwYXksIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wYV9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfbXBhX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXBhX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cE1QQURlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cG1wYWRlcGF5X2RlYnVnLCAicnRwbXBhZGVwYXkiLCAwLAotICAgICAgIk1QRUcgQXVkaW8gUlRQIERlcGF5bG9hZGVyIik7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXBhX2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXBhX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIE1QRUcgYXVkaW8gZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIE1QRUcgYXVkaW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDIwMzgpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9tcGFfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9tcGFfZGVwYXlfcHJvY2VzczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXBhX2RlcGF5X2luaXQgKEdzdFJ0cE1QQURlcGF5ICogcnRwbXBhZGVwYXkpCi17Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcGFfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RDYXBzICpvdXRjYXBzOwotICBnaW50IGNsb2NrX3JhdGU7Ci0gIGdib29sZWFuIHJlczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7Ci0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgb3V0Y2FwcyA9Ci0gICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vbXBlZyIsICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChkZXBheWxvYWQtPnNyY3BhZCwgb3V0Y2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfbXBhX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwTVBBRGVwYXkgKnJ0cG1wYWRlcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ2ludCBwYXlsb2FkX2xlbjsKLSNpZiAwCi0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQxNiBmcmFnX29mZnNldDsKLSNlbmRpZgotICBnYm9vbGVhbiBtYXJrZXI7Ci0KLSAgcnRwbXBhZGVwYXkgPSBHU1RfUlRQX01QQV9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBpZiAocGF5bG9hZF9sZW4gPD0gNCkKLSAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotI2lmIDAKLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLSAgLyogc3RyaXAgb2ZmIGhlYWRlcgotICAgKgotICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICAgTUJaICAgICAgICAgICAgICAgfCAgICAgICAgICBGcmFnX29mZnNldCAgICAgICAgICB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqLwotICBmcmFnX29mZnNldCA9IChwYXlsb2FkWzJdIDw8IDgpIHwgcGF5bG9hZFszXTsKLSNlbmRpZgotCi0gIC8qIHN1YmJ1ZmZlciBza2lwcGluZyB0aGUgNCBoZWFkZXIgYnl0ZXMgKi8KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIDQsIC0xKTsKLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBpZiAobWFya2VyKSB7Ci0gICAgLyogbWFyayBzdGFydCBvZiB0YWxrc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19SRVNZTkMpOwotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LAotICAgICAgImdzdF9ydHBfbXBhX2RlcGF5X2NoYWluOiBwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmKSk7Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBtcGFkZXBheSksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgfQotCi0gIC8qIEZJWE1FLCB3ZSBjYW4gcHVzaCBoYWxmIG1wZWcgZnJhbWVzIHdoZW4gdGhleSBhcmUgc3BsaXQgb3ZlciBtdWx0aXBsZQotICAgKiBSVFAgcGFja2V0cyAqLwotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotZW1wdHlfcGFja2V0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwbXBhZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoIkVtcHR5IFBheWxvYWQuIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXBhX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwbXBhZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfTVBBX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXBhZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA3MGQ3Ny4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wYWRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTVBBX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVBBX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01QQV9ERVBBWSBcCi0gIChnc3RfcnRwX21wYV9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX01QQV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9NUEFfREVQQVksR3N0UnRwTVBBRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX01QQV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBBX0RFUEFZLEdzdFJ0cE1QQURlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QQV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9NUEFfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QQV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBBX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QQURlcGF5IEdzdFJ0cE1QQURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QQURlcGF5Q2xhc3MgR3N0UnRwTVBBRGVwYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBNUEFEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTVBBRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9tcGFfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX21wYV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUEFfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wYXBheS5jIGIvZ3N0L3J0cC9nc3RydHBtcGFwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2MDU0ZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wYXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cG1wYXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cG1wYXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwbXBhcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcGFfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vbXBlZywgIiAibXBlZ3ZlcnNpb24gPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcGFfcGF5X3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX01QQV9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIk1QQVwiIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX21wYV9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9tcGFfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wYV9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wYV9wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcGFfcGF5X2ZsdXNoIChHc3RSdHBNUEFQYXkgKiBydHBtcGFwYXkpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcGFfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0jZGVmaW5lIGdzdF9ydHBfbXBhX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBNUEFQYXksIGdzdF9ydHBfbXBhX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wYV9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwTVBBUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBtcGFwYXlfZGVidWcsICJydHBtcGFwYXkiLCAwLAotICAgICAgIk1QRUcgQXVkaW8gUlRQIERlcGF5bG9hZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9tcGFfcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfbXBhX3BheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcGFfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXBhX3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBNUEVHIGF1ZGlvIHBheWxvYWRlciIsICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQgTVBFRyBhdWRpbyBhcyBSVFAgcGFja2V0cyAoUkZDIDIwMzgpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfbXBhX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2lua19ldmVudCA9IGdzdF9ydHBfbXBhX3BheV9zaW5rX2V2ZW50OwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfbXBhX3BheV9oYW5kbGVfYnVmZmVyOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcGFfcGF5X2luaXQgKEdzdFJ0cE1QQVBheSAqIHJ0cG1wYXBheSkKLXsKLSAgcnRwbXBhcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotCi0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBtcGFwYXkpLT5wdCA9IEdTVF9SVFBfUEFZTE9BRF9NUEE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wYV9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cE1QQVBheSAqcnRwbXBhcGF5OwotCi0gIHJ0cG1wYXBheSA9IEdTVF9SVFBfTVBBX1BBWSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocnRwbXBhcGF5LT5hZGFwdGVyKTsKLSAgcnRwbXBhcGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wYV9wYXlfcmVzZXQgKEdzdFJ0cE1QQVBheSAqIHBheSkKLXsKLSAgcGF5LT5maXJzdF90cyA9IC0xOwotICBwYXktPmR1cmF0aW9uID0gMDsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBheS0+YWRhcHRlcik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheSwgInJlc2V0IGRlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcGFfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocGF5bG9hZCwgImF1ZGlvIiwKLSAgICAgIHBheWxvYWQtPnB0ICE9IEdTVF9SVFBfUEFZTE9BRF9NUEEsICJNUEEiLCA5MDAwMCk7Ci0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChwYXlsb2FkLCBOVUxMKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXBhX3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0UnRwTVBBUGF5ICpydHBtcGFwYXk7Ci0KLSAgcnRwbXBhcGF5ID0gR1NUX1JUUF9NUEFfUEFZIChwYXlsb2FkKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICAvKiBtYWtlIHN1cmUgd2UgcHVzaCB0aGUgbGFzdCBwYWNrZXRzIGluIHRoZSBhZGFwdGVyIG9uIEVPUyAqLwotICAgICAgZ3N0X3J0cF9tcGFfcGF5X2ZsdXNoIChydHBtcGFwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9ydHBfbXBhX3BheV9yZXNldCAocnRwbXBhcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChwYXlsb2FkLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBSVFBfSEVBREVSX0xFTiAxMgotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9tcGFfcGF5X2ZsdXNoIChHc3RSdHBNUEFQYXkgKiBydHBtcGFwYXkpCi17Ci0gIGd1aW50IGF2YWlsOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50MTYgZnJhZ19vZmZzZXQ7Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3Q7Ci0KLSAgLyogdGhlIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBhZGFwdGVyIGlzIGVpdGhlciBzbWFsbGVyCi0gICAqIHRoYW4gdGhlIE1UVSBvciBiaWdnZXIuIEluIHRoZSBjYXNlIGl0IGlzIHNtYWxsZXIsIHRoZSBjb21wbGV0ZQotICAgKiBhZGFwdGVyIGNvbnRlbnRzIGNhbiBiZSBwdXQgaW4gb25lIHBhY2tldC4gSW4gdGhlIGNhc2UgdGhlCi0gICAqIGFkYXB0ZXIgaGFzIG1vcmUgdGhhbiBvbmUgTVRVLCB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBNUEEgZGF0YQotICAgKiBvdmVyIG11bHRpcGxlIHBhY2tldHMuIFRoZSBmcmFnX29mZnNldCBpbiBlYWNoIHBhY2tldCBoZWFkZXIKLSAgICogbmVlZHMgdG8gYmUgdXBkYXRlZCB3aXRoIHRoZSBwb3NpdGlvbiBpbiB0aGUgTVBBIGZyYW1lLiAqLwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwbXBhcGF5LT5hZGFwdGVyKTsKLQotICByZXQgPSBHU1RfRkxPV19PSzsKLQotICBsaXN0ID0KLSAgICAgIGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKGF2YWlsIC8gKEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocnRwbXBhcGF5KSAtCi0gICAgICAgICAgUlRQX0hFQURFUl9MRU4pICsgMSk7Ci0KLSAgZnJhZ19vZmZzZXQgPSAwOwotICB3aGlsZSAoYXZhaWwgPiAwKSB7Ci0gICAgZ3VpbnQgdG93cml0ZTsKLSAgICBndWludDggKnBheWxvYWQ7Ci0gICAgZ3VpbnQgcGF5bG9hZF9sZW47Ci0gICAgZ3VpbnQgcGFja2V0X2xlbjsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gICAgR3N0QnVmZmVyICpwYXlidWY7Ci0KLSAgICAvKiB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgcGFja2V0ICovCi0gICAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAoNCArIGF2YWlsLCAwLCAwKTsKLQotICAgIC8qIGZpbGwgb25lIE1UVSBvciBhbGwgYXZhaWxhYmxlIGJ5dGVzICovCi0gICAgdG93cml0ZSA9IE1JTiAocGFja2V0X2xlbiwgR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBtcGFwYXkpKTsKLQotICAgIC8qIHRoaXMgaXMgdGhlIHBheWxvYWQgbGVuZ3RoICovCi0gICAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuICh0b3dyaXRlLCAwLCAwKTsKLQotICAgIC8qIGNyZWF0ZSBidWZmZXIgdG8gaG9sZCB0aGUgcGF5bG9hZCAqLwotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoNCwgMCwgMCk7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKG91dGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgICBwYXlsb2FkX2xlbiAtPSA0OwotCi0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJnJ0cCwgR1NUX1JUUF9QQVlMT0FEX01QQSk7Ci0KLSAgICAvKgotICAgICAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogfCAgICAgICAgICAgICBNQlogICAgICAgICAgICAgICB8ICAgICAgICAgIEZyYWdfb2Zmc2V0ICAgICAgICAgIHwKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqLwotICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gICAgcGF5bG9hZFswXSA9IDA7Ci0gICAgcGF5bG9hZFsxXSA9IDA7Ci0gICAgcGF5bG9hZFsyXSA9IGZyYWdfb2Zmc2V0ID4+IDg7Ci0gICAgcGF5bG9hZFszXSA9IGZyYWdfb2Zmc2V0ICYgMHhmZjsKLQotICAgIGF2YWlsIC09IHBheWxvYWRfbGVuOwotICAgIGZyYWdfb2Zmc2V0ICs9IHBheWxvYWRfbGVuOwotCi0gICAgaWYgKGF2YWlsID09IDApCi0gICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLQotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAgIHBheWJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyX2Zhc3QgKHJ0cG1wYXBheS0+YWRhcHRlciwgcGF5bG9hZF9sZW4pOwotICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHBtcGFwYXkpLCBvdXRidWYsIHBheWJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgICBvdXRidWYgPSBnc3RfYnVmZmVyX2FwcGVuZCAob3V0YnVmLCBwYXlidWYpOwotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBydHBtcGFwYXktPmZpcnN0X3RzOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBydHBtcGFwYXktPmR1cmF0aW9uOwotICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIG91dGJ1Zik7Ci0gIH0KLQotICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoX2xpc3QgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBtcGFwYXkpLCBsaXN0KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9tcGFfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSdHBNUEFQYXkgKnJ0cG1wYXBheTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50IHNpemUsIGF2YWlsOwotICBndWludCBwYWNrZXRfbGVuOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIHRpbWVzdGFtcDsKLQotICBydHBtcGFwYXkgPSBHU1RfUlRQX01QQV9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXBhcGF5LCAiRElTQ09OVCIpOwotICAgIGdzdF9ydHBfbXBhX3BheV9yZXNldCAocnRwbXBhcGF5KTsKLSAgfQotCi0gIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcGFwYXktPmFkYXB0ZXIpOwotCi0gIC8qIGdldCBwYWNrZXQgbGVuZ3RoIG9mIHByZXZpb3VzIGRhdGEgYW5kIHRoaXMgbmV3IGRhdGEsCi0gICAqIHBheWxvYWQgbGVuZ3RoIGluY2x1ZGVzIGEgNCBieXRlIGhlYWRlciAqLwotICBwYWNrZXRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYWNrZXRfbGVuICg0ICsgYXZhaWwgKyBzaXplLCAwLCAwKTsKLQotICAvKiBpZiB0aGlzIGJ1ZmZlciBpcyBnb2luZyB0byBvdmVyZmxvdyB0aGUgcGFja2V0LCBmbHVzaCB3aGF0IHdlCi0gICAqIGhhdmUuICovCi0gIGlmIChnc3RfcnRwX2Jhc2VfcGF5bG9hZF9pc19maWxsZWQgKGJhc2VwYXlsb2FkLAotICAgICAgICAgIHBhY2tldF9sZW4sIHJ0cG1wYXBheS0+ZHVyYXRpb24gKyBkdXJhdGlvbikpIHsKLSAgICByZXQgPSBnc3RfcnRwX21wYV9wYXlfZmx1c2ggKHJ0cG1wYXBheSk7Ci0gICAgYXZhaWwgPSAwOwotICB9IGVsc2UgewotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgaWYgKGF2YWlsID09IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcGFwYXksCi0gICAgICAgICJmaXJzdCBwYWNrZXQsIHNhdmUgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0gICAgcnRwbXBhcGF5LT5maXJzdF90cyA9IHRpbWVzdGFtcDsKLSAgICBydHBtcGFwYXktPmR1cmF0aW9uID0gMDsKLSAgfQotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cG1wYXBheS0+YWRhcHRlciwgYnVmZmVyKTsKLSAgcnRwbXBhcGF5LT5kdXJhdGlvbiA9IGR1cmF0aW9uOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9tcGFfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cE1QQVBheSAqcnRwbXBhcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwbXBhcGF5ID0gR1NUX1JUUF9NUEFfUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3J0cF9tcGFfcGF5X3Jlc2V0IChydHBtcGFwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfbXBhX3BheV9yZXNldCAocnRwbXBhcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9tcGFfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwbXBhcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX01QQV9QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBtcGFwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXBhcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMjk4NTIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcGFwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9NUEFfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVBBX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01QQV9QQVkgXAotICAoZ3N0X3J0cF9tcGFfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTVBBX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9NUEFfUEFZLEdzdFJ0cE1QQVBheSkpCi0jZGVmaW5lIEdTVF9SVFBfTVBBX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBBX1BBWSxHc3RSdHBNUEFQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVBBX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9NUEFfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9NUEFfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NUEFfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QQVBheSBHc3RSdHBNUEFQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwTVBBUGF5Q2xhc3MgR3N0UnRwTVBBUGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwTVBBUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgR3N0Q2xvY2tUaW1lIGZpcnN0X3RzOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cE1QQVBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9tcGFfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9tcGFfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX01QQV9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMmQyYjAuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBtcGFyb2J1c3RkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsODExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEwPiBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwbXBhcm9idXN0ZGVwYXkuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwbXBhcm9idXN0ZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cG1wYXJvYnVzdGRlcGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vbXBlZywgIiAibXBlZ3ZlcnNpb24gPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJNUEEtUk9CVVNUXCIgIiAiOyAiCi0gICAgICAgIC8qIGRyYWZ0IHZlcnNpb25zIGFwcGVhciBzdGlsbCBpbiB1c2Ugb3V0IHRoZXJlICovCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYXSwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIHsgXCJYLU1QMy1EUkFGVC0wMFwiLCBcIlgtTVAzLURSQUZULTAxXCIsICIKLSAgICAgICAgIiBcIlgtTVAzLURSQUZULTAyXCIsIFwiWC1NUDMtRFJBRlQtMDNcIiwgXCJYLU1QMy1EUkFGVC0wNFwiLCAiCi0gICAgICAgICIgXCJYLU1QMy1EUkFGVC0wNVwiLCBcIlgtTVAzLURSQUZULTA2XCIgfSIpCi0gICAgKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFEVUZyYW1lCi17Ci0gIGd1aW50MzIgaGVhZGVyOwotICBnaW50IHNpemU7Ci0gIGdpbnQgc2lkZV9pbmZvOwotICBnaW50IGRhdGFfc2l6ZTsKLSAgZ2ludCBsYXllcjsKLSAgZ2ludCBiYWNrcG9pbnRlcjsKLQotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLX0gR3N0QURVRnJhbWU7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cE1QQVJvYnVzdERlcGF5LCBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfbXBhX3JvYnVzdF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKgotICAgIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKgotICAgIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwTVBBUm9idXN0RGVwYXkgKnJ0cG1wYWRlcGF5OwotCi0gIHJ0cG1wYWRlcGF5ID0gKEdzdFJ0cE1QQVJvYnVzdERlcGF5ICopIG9iamVjdDsKLQotICBnX29iamVjdF91bnJlZiAocnRwbXBhZGVwYXktPmFkYXB0ZXIpOwotICBnX3F1ZXVlX2ZyZWUgKHJ0cG1wYWRlcGF5LT5hZHVfZnJhbWVzKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwTVBBUm9idXN0RGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBtcGFyb2J1c3RkZXBheV9kZWJ1ZywgInJ0cG1wYXJvYnVzdGRlcGF5IiwgMCwKLSAgICAgICJSb2J1c3QgTVBFRyBBdWRpbyBSVFAgRGVwYXlsb2FkZXIiKTsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9tcGFfcm9idXN0X2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBNUEVHIGF1ZGlvIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBNUEVHIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA1MjE5KSIsCi0gICAgICAiTWFyayBOYXV3ZWxhZXJ0cyA8bWFyay5uYXV3ZWxhZXJ0c0Bjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0KLSAgICAgIGdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9wcm9jZXNzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X2luaXQgKEdzdFJ0cE1QQVJvYnVzdERlcGF5ICogcnRwbXBhZGVwYXkpCi17Ci0gIHJ0cG1wYWRlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBydHBtcGFkZXBheS0+YWR1X2ZyYW1lcyA9IGdfcXVldWVfbmV3ICgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBNUEFSb2J1c3REZXBheSAqcnRwbXBhZGVwYXk7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RDYXBzICpvdXRjYXBzOwotICBnaW50IGNsb2NrX3JhdGUsIGRyYWZ0OwotICBnYm9vbGVhbiByZXM7Ci0gIGNvbnN0IGdjaGFyICplbmNvZGluZzsKLQotICBydHBtcGFkZXBheSA9IEdTVF9SVFBfTVBBX1JPQlVTVF9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7Ci0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgcnRwbXBhZGVwYXktPmhhc19kZXNjcmlwdG9yID0gVFJVRTsKLSAgaWYgKChlbmNvZGluZyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSkgewotICAgIGlmIChzc2NhbmYgKGVuY29kaW5nLCAiWC1NUDMtRFJBRlQtJWQiLCAmZHJhZnQpICYmIChkcmFmdCA9PSAwKSkKLSAgICAgIHJ0cG1wYWRlcGF5LT5oYXNfZGVzY3JpcHRvciA9IEZBTFNFOwotICB9Ci0KLSAgb3V0Y2FwcyA9Ci0gICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vbXBlZyIsICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChkZXBheWxvYWQtPnNyY3BhZCwgb3V0Y2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKLQotICByZXR1cm4gcmVzOwotfQotCi0vKiB0aGFua3MgYWdhaW4gZ28gdG8gbXAzcGFyc2UgLi4uICovCi0KLXN0YXRpYyBjb25zdCBndWludCBtcDN0eXBlc19iaXRyYXRlc1syXVszXVsxNl0gPSB7Ci0gIHsKLSAgICAgICAgezAsIDMyLCA2NCwgOTYsIDEyOCwgMTYwLCAxOTIsIDIyNCwgMjU2LCAyODgsIDMyMCwgMzUyLCAzODQsIDQxNiwgNDQ4LH0sCi0gICAgICAgIHswLCAzMiwgNDgsIDU2LCA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTYwLCAxOTIsIDIyNCwgMjU2LCAzMjAsIDM4NCx9LAotICAgICAgICB7MCwgMzIsIDQwLCA0OCwgNTYsIDY0LCA4MCwgOTYsIDExMiwgMTI4LCAxNjAsIDE5MiwgMjI0LCAyNTYsIDMyMCx9Ci0gICAgICB9LAotICB7Ci0gICAgICAgIHswLCAzMiwgNDgsIDU2LCA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTQ0LCAxNjAsIDE3NiwgMTkyLCAyMjQsIDI1Nix9LAotICAgICAgICB7MCwgOCwgMTYsIDI0LCAzMiwgNDAsIDQ4LCA1NiwgNjQsIDgwLCA5NiwgMTEyLCAxMjgsIDE0NCwgMTYwLH0sCi0gICAgICAgIHswLCA4LCAxNiwgMjQsIDMyLCA0MCwgNDgsIDU2LCA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTQ0LCAxNjAsfQotICAgICAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludCBtcDN0eXBlc19mcmVxc1szXVszXSA9IHsgezQ0MTAwLCA0ODAwMCwgMzIwMDB9LAotezIyMDUwLCAyNDAwMCwgMTYwMDB9LAotezExMDI1LCAxMjAwMCwgODAwMH0KLX07Ci0KLXN0YXRpYyBpbmxpbmUgZ3VpbnQKLW1wM190eXBlX2ZyYW1lX2xlbmd0aF9mcm9tX2hlYWRlciAoR3N0RWxlbWVudCAqIG1wM3BhcnNlLCBndWludDMyIGhlYWRlciwKLSAgICBndWludCAqIHB1dF92ZXJzaW9uLCBndWludCAqIHB1dF9sYXllciwgZ3VpbnQgKiBwdXRfY2hhbm5lbHMsCi0gICAgZ3VpbnQgKiBwdXRfYml0cmF0ZSwgZ3VpbnQgKiBwdXRfc2FtcGxlcmF0ZSwgZ3VpbnQgKiBwdXRfbW9kZSwKLSAgICBndWludCAqIHB1dF9jcmMpCi17Ci0gIGd1aW50IGxlbmd0aDsKLSAgZ3Vsb25nIG1vZGUsIHNhbXBsZXJhdGUsIGJpdHJhdGUsIGxheWVyLCBjaGFubmVscywgcGFkZGluZywgY3JjOwotICBndWxvbmcgdmVyc2lvbjsKLSAgZ2ludCBsc2YsIG1wZzI1OwotCi0gIGlmIChoZWFkZXIgJiAoMSA8PCAyMCkpIHsKLSAgICBsc2YgPSAoaGVhZGVyICYgKDEgPDwgMTkpKSA/IDAgOiAxOwotICAgIG1wZzI1ID0gMDsKLSAgfSBlbHNlIHsKLSAgICBsc2YgPSAxOwotICAgIG1wZzI1ID0gMTsKLSAgfQotCi0gIHZlcnNpb24gPSAxICsgbHNmICsgbXBnMjU7Ci0KLSAgbGF5ZXIgPSA0IC0gKChoZWFkZXIgPj4gMTcpICYgMHgzKTsKLQotICBjcmMgPSAoaGVhZGVyID4+IDE2KSAmIDB4MTsKLQotICBiaXRyYXRlID0gKGhlYWRlciA+PiAxMikgJiAweEY7Ci0gIGJpdHJhdGUgPSBtcDN0eXBlc19iaXRyYXRlc1tsc2ZdW2xheWVyIC0gMV1bYml0cmF0ZV0gKiAxMDAwOwotICAvKiBUaGUgY2FsbGVyIGhhcyBlbnN1cmVkIHdlIGhhdmUgYSB2YWxpZCBoZWFkZXIsIHNvIGJpdHJhdGUgY2FuJ3QgYmUKLSAgICAgemVybyBoZXJlLiAqLwotICBpZiAoYml0cmF0ZSA9PSAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobXAzcGFyc2UsICJpbnZhbGlkIGJpdHJhdGUiKTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIHNhbXBsZXJhdGUgPSAoaGVhZGVyID4+IDEwKSAmIDB4MzsKLSAgc2FtcGxlcmF0ZSA9IG1wM3R5cGVzX2ZyZXFzW2xzZiArIG1wZzI1XVtzYW1wbGVyYXRlXTsKLQotICBwYWRkaW5nID0gKGhlYWRlciA+PiA5KSAmIDB4MTsKLQotICBtb2RlID0gKGhlYWRlciA+PiA2KSAmIDB4MzsKLSAgY2hhbm5lbHMgPSAobW9kZSA9PSAzKSA/IDEgOiAyOwotCi0gIHN3aXRjaCAobGF5ZXIpIHsKLSAgICBjYXNlIDE6Ci0gICAgICBsZW5ndGggPSA0ICogKChiaXRyYXRlICogMTIpIC8gc2FtcGxlcmF0ZSArIHBhZGRpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgbGVuZ3RoID0gKGJpdHJhdGUgKiAxNDQpIC8gc2FtcGxlcmF0ZSArIHBhZGRpbmc7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgMzoKLSAgICAgIGxlbmd0aCA9IChiaXRyYXRlICogMTQ0KSAvIChzYW1wbGVyYXRlIDw8IGxzZikgKyBwYWRkaW5nOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAobXAzcGFyc2UsICJDYWxjdWxhdGVkIG1wMyBmcmFtZSBsZW5ndGggb2YgJXUgYnl0ZXMiLCBsZW5ndGgpOwotICBHU1RfTE9HX09CSkVDVCAobXAzcGFyc2UsICJzYW1wbGVyYXRlID0gJWx1LCBiaXRyYXRlID0gJWx1LCB2ZXJzaW9uID0gJWx1LCAiCi0gICAgICAibGF5ZXIgPSAlbHUsIGNoYW5uZWxzID0gJWx1LCBtb2RlID0gJWx1Iiwgc2FtcGxlcmF0ZSwgYml0cmF0ZSwgdmVyc2lvbiwKLSAgICAgIGxheWVyLCBjaGFubmVscywgbW9kZSk7Ci0KLSAgaWYgKHB1dF92ZXJzaW9uKQotICAgICpwdXRfdmVyc2lvbiA9IHZlcnNpb247Ci0gIGlmIChwdXRfbGF5ZXIpCi0gICAgKnB1dF9sYXllciA9IGxheWVyOwotICBpZiAocHV0X2NoYW5uZWxzKQotICAgICpwdXRfY2hhbm5lbHMgPSBjaGFubmVsczsKLSAgaWYgKHB1dF9iaXRyYXRlKQotICAgICpwdXRfYml0cmF0ZSA9IGJpdHJhdGU7Ci0gIGlmIChwdXRfc2FtcGxlcmF0ZSkKLSAgICAqcHV0X3NhbXBsZXJhdGUgPSBzYW1wbGVyYXRlOwotICBpZiAocHV0X21vZGUpCi0gICAgKnB1dF9tb2RlID0gbW9kZTsKLSAgaWYgKHB1dF9jcmMpCi0gICAgKnB1dF9jcmMgPSBjcmM7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG1wM3BhcnNlLCAic2l6ZSA9ICV1IiwgbGVuZ3RoKTsKLSAgcmV0dXJuIGxlbmd0aDsKLX0KLQotLyogZ2VuZXJhdGUgZW1wdHkvc2lsZW50L2R1bW15IGZyYW1lIHRoYXQgbWltaWNzIEBmcmFtZSwKLSAqIGV4Y2VwdCBmb3IgcmF0ZSwgd2hlcmUgbWF4aW11bSBwb3NzaWJsZSBpcyBzZWxlY3RlZCAqLwotc3RhdGljIEdzdEFEVUZyYW1lICoKLWdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9nZW5lcmF0ZV9kdW1teV9mcmFtZSAoR3N0UnRwTVBBUm9idXN0RGVwYXkgKgotICAgIHJ0cG1wYWRlcGF5LCBHc3RBRFVGcmFtZSAqIGZyYW1lKQotewotICBHc3RBRFVGcmFtZSAqZHVtbXk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGR1bW15ID0gZ19zbGljZV9kdXAgKEdzdEFEVUZyYW1lLCBmcmFtZSk7Ci0KLSAgLyogZ28gZm9yIG1heGltdW0gYml0cmF0ZSAqLwotICBkdW1teS0+aGVhZGVyID0gKGZyYW1lLT5oZWFkZXIgJiB+KDB4ZiA8PCAxMikpIHwgKDB4ZSA8PCAxMik7Ci0gIGR1bW15LT5zaXplID0KLSAgICAgIG1wM190eXBlX2ZyYW1lX2xlbmd0aF9mcm9tX2hlYWRlciAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXBhZGVwYXkpLAotICAgICAgZHVtbXktPmhlYWRlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gIGR1bW15LT5kYXRhX3NpemUgPSBkdW1teS0+c2l6ZSAtIDQgLSBkdW1teS0+c2lkZV9pbmZvOwotICBkdW1teS0+YmFja3BvaW50ZXIgPSAwOwotCi0gIGR1bW15LT5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGR1bW15LT5zaWRlX2luZm8gKyA0KTsKLQotICBnc3RfYnVmZmVyX21hcCAoZHVtbXktPmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIG1lbXNldCAobWFwLmRhdGEsIDAsIG1hcC5zaXplKTsKLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAobWFwLmRhdGEsIGR1bW15LT5oZWFkZXIpOwotICBnc3RfYnVmZmVyX3VubWFwIChkdW1teS0+YnVmZmVyLCAmbWFwKTsKLQotICBHU1RfQlVGRkVSX1BUUyAoZHVtbXktPmJ1ZmZlcikgPSBHU1RfQlVGRkVSX1BUUyAoZnJhbWUtPmJ1ZmZlcik7Ci0KLSAgcmV0dXJuIGR1bW15OwotfQotCi0vKiB2YWxpZGF0ZXMgYW5kIHBhcnNlcyBAYnVmLCBhbmQgcXVldWVzIGZvciBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uIGlmIHZhbGlkLAotICogb3RoZXJ3aXNlIGRpc2NhcmRzIEBidWYKLSAqIFRha2VzIG93bmVyc2hpcCBvZiBAYnVmLiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfcXVldWVfZnJhbWUgKEdzdFJ0cE1QQVJvYnVzdERlcGF5ICogcnRwbXBhZGVwYXksCi0gICAgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RBRFVGcmFtZSAqZnJhbWUgPSBOVUxMOwotICBndWludCB2ZXJzaW9uLCBsYXllciwgY2hhbm5lbHMsIHNpemU7Ci0gIGd1aW50IGNyYzsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGJ1ZiAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICBpZiAobWFwLnNpemUgPCA2KQotICAgIGdvdG8gY29ycnVwdF9mcmFtZTsKLQotICBmcmFtZSA9IGdfc2xpY2VfbmV3MCAoR3N0QURVRnJhbWUpOwotICBmcmFtZS0+aGVhZGVyID0gR1NUX1JFQURfVUlOVDMyX0JFIChtYXAuZGF0YSk7Ci0KLSAgc2l6ZSA9IG1wM190eXBlX2ZyYW1lX2xlbmd0aF9mcm9tX2hlYWRlciAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXBhZGVwYXkpLAotICAgICAgZnJhbWUtPmhlYWRlciwgJnZlcnNpb24sICZsYXllciwgJmNoYW5uZWxzLCBOVUxMLCBOVUxMLCBOVUxMLCAmY3JjKTsKLSAgaWYgKCFzaXplKQotICAgIGdvdG8gY29ycnVwdF9mcmFtZTsKLQotICBmcmFtZS0+c2l6ZSA9IHNpemU7Ci0gIGZyYW1lLT5sYXllciA9IGxheWVyOwotICBpZiAodmVyc2lvbiA9PSAxICYmIGNoYW5uZWxzID09IDIpCi0gICAgZnJhbWUtPnNpZGVfaW5mbyA9IDMyOwotICBlbHNlIGlmICgodmVyc2lvbiA9PSAxICYmIGNoYW5uZWxzID09IDEpIHx8ICh2ZXJzaW9uID49IDIgJiYgY2hhbm5lbHMgPT0gMikpCi0gICAgZnJhbWUtPnNpZGVfaW5mbyA9IDE3OwotICBlbHNlIGlmICh2ZXJzaW9uID49IDIgJiYgY2hhbm5lbHMgPT0gMSkKLSAgICBmcmFtZS0+c2lkZV9pbmZvID0gOTsKLSAgZWxzZSB7Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgZ290byBjb3JydXB0X2ZyYW1lOwotICB9Ci0KLSAgLyogYmFja3BvaW50ZXIgKi8KLSAgaWYgKGxheWVyID09IDMpIHsKLSAgICBmcmFtZS0+YmFja3BvaW50ZXIgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKG1hcC5kYXRhICsgNCk7Ci0gICAgZnJhbWUtPmJhY2twb2ludGVyID4+PSA3OwotICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcGFkZXBheSwgImJhY2twb2ludGVyOiAlZCIsIGZyYW1lLT5iYWNrcG9pbnRlcik7Ci0gIH0KLQotICBpZiAoIWNyYykKLSAgICBmcmFtZS0+c2lkZV9pbmZvICs9IDI7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAic2lkZSBpbmZvOiAlZCIsIGZyYW1lLT5zaWRlX2luZm8pOwotICBmcmFtZS0+ZGF0YV9zaXplID0gZnJhbWUtPnNpemUgLSA0IC0gZnJhbWUtPnNpZGVfaW5mbzsKLQotICAvKiBzb21lIHNpemUgdmFsaWRhdGlvbiBjaGVja3MgKi8KLSAgaWYgKDQgKyBmcmFtZS0+c2lkZV9pbmZvID4gbWFwLnNpemUpCi0gICAgZ290byBjb3JydXB0X2ZyYW1lOwotCi0gIC8qIEFEVSBkYXRhIHdvdWxkIHRoZW4gZXh0ZW5kIHBhc3QgTVAzIGZyYW1lLAotICAgKiBldmVuIHVzaW5nIHBhc3QgYnl0ZSByZXNlcnZvaXIgKi8KLSAgaWYgKC1mcmFtZS0+YmFja3BvaW50ZXIgKyAoZ2ludCkgKG1hcC5zaXplKSA+IGZyYW1lLT5zaXplKQotICAgIGdvdG8gY29ycnVwdF9mcmFtZTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIC8qIG9rLCB0YWtlIGJ1ZmZlciBhbmQgcXVldWUgKi8KLSAgZnJhbWUtPmJ1ZmZlciA9IGJ1ZjsKLSAgZ19xdWV1ZV9wdXNoX3RhaWwgKHJ0cG1wYWRlcGF5LT5hZHVfZnJhbWVzLCBmcmFtZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1jb3JydXB0X2ZyYW1lOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXBhZGVwYXksICJmcmFtZSBpcyBjb3JydXB0Iik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGlmIChmcmFtZSkKLSAgICAgIGdfc2xpY2VfZnJlZSAoR3N0QURVRnJhbWUsIGZyYW1lKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZnJlZV9mcmFtZSAoR3N0QURVRnJhbWUgKiBmcmFtZSkKLXsKLSAgaWYgKGZyYW1lLT5idWZmZXIpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoZnJhbWUtPmJ1ZmZlcik7Ci0gIGdfc2xpY2VfZnJlZSAoR3N0QURVRnJhbWUsIGZyYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZGVxdWV1ZV9mcmFtZSAoR3N0UnRwTVBBUm9idXN0RGVwYXkgKiBydHBtcGFkZXBheSkKLXsKLSAgR3N0QURVRnJhbWUgKmhlYWQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAiZGVxdWV1ZWluZyBBRFUgZnJhbWUiKTsKLQotICBpZiAocnRwbXBhZGVwYXktPmFkdV9mcmFtZXMtPmhlYWQgPT0gcnRwbXBhZGVwYXktPmN1cl9hZHVfZnJhbWUpCi0gICAgcnRwbXBhZGVwYXktPmN1cl9hZHVfZnJhbWUgPSBOVUxMOwotCi0gIGhlYWQgPSBnX3F1ZXVlX3BvcF9oZWFkIChydHBtcGFkZXBheS0+YWR1X2ZyYW1lcyk7Ci0gIGdfYXNzZXJ0IChoZWFkLT5idWZmZXIpOwotICBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZnJlZV9mcmFtZSAoaGVhZCk7Ci0KLSAgcmV0dXJuOwotfQotCi0vKiByZXR1cm5zIFRSVUUgaWYgYXQgbGVhc3Qgb25lIG5ldyBBRFUgZnJhbWUgd2FzIGVucXVldWVkIGZvciBNUDMgY29udmVyc2lvbi4KLSAqIFRha2VzIG93bmVyc2hpcCBvZiBAYnVmLiAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZGVpbnRlcmxlYXZlIChHc3RSdHBNUEFSb2J1c3REZXBheSAqIHJ0cG1wYWRlcGF5LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCB2YWwsIGlpbmRleCwgaWNjOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHZhbCA9IEdTVF9SRUFEX1VJTlQxNl9CRSAobWFwLmRhdGEpID4+IDU7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgaWluZGV4ID0gdmFsID4+IDM7Ci0gIGljYyA9IHZhbCAmIDB4NzsKLQotICBHU1RfTE9HX09CSkVDVCAocnRwbXBhZGVwYXksICJzeW5jOiAweCV4LCBpbmRleDogJXUsIGN5Y2xlIGNvdW50OiAldSIsCi0gICAgICB2YWwsIGlpbmRleCwgaWNjKTsKLQotICAvKiBiYXNpYyBjYXNlOyBubyBpbnRlcmxlYXZpbmcgZXZlciBzZWVuICovCi0gIGlmICh2YWwgPT0gMHg3ZmYgJiYgcnRwbXBhZGVwYXktPmxhc3RfaWNjIDwgMCkgewotICAgIHJldCA9IGdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9xdWV1ZV9mcmFtZSAocnRwbXBhZGVwYXksIGJ1Zik7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHJ0cG1wYWRlcGF5LT5sYXN0X2ljYyA8IDApKSB7Ci0gICAgICBydHBtcGFkZXBheS0+bGFzdF9pY2MgPSBpY2M7Ci0gICAgICBydHBtcGFkZXBheS0+bGFzdF9paSA9IGlpbmRleDsKLSAgICB9Ci0gICAgaWYgKGljYyAhPSBydHBtcGFkZXBheS0+bGFzdF9pY2MgfHwgaWluZGV4ID09IHJ0cG1wYWRlcGF5LT5sYXN0X2lpKSB7Ci0gICAgICBnaW50IGk7Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkgewotICAgICAgICBpZiAocnRwbXBhZGVwYXktPmRlaW50ZXJbaV0gIT0gTlVMTCkgewotICAgICAgICAgIHJldCB8PSBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfcXVldWVfZnJhbWUgKHJ0cG1wYWRlcGF5LAotICAgICAgICAgICAgICBydHBtcGFkZXBheS0+ZGVpbnRlcltpXSk7Ci0gICAgICAgICAgcnRwbXBhZGVwYXktPmRlaW50ZXJbaV0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIHJld3JpdGUgYnVmZmVyIHN5bmMgaGVhZGVyICovCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICAgIHZhbCA9IEdTVF9SRUFEX1VJTlQxNl9CRSAobWFwLmRhdGEpOwotICAgIHZhbCA9ICgweDdmZiA8PCA1KSB8IHZhbDsKLSAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChtYXAuZGF0YSwgdmFsKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIC8qIHN0b3JlIGFuZCBrZWVwIHRyYWNrIG9mIGxhc3QgaW5kaWNlcyAqLwotICAgIHJ0cG1wYWRlcGF5LT5sYXN0X2ljYyA9IGljYzsKLSAgICBydHBtcGFkZXBheS0+bGFzdF9paSA9IGlpbmRleDsKLSAgICBydHBtcGFkZXBheS0+ZGVpbnRlcltpaW5kZXhdID0gYnVmOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogSGVhZCBBRFUgZnJhbWUgY29ycmVzcG9uZHMgdG8gbXAzX2ZyYW1lIChpLmUuIGluIGhlYWRlciBpbiBzaWRlLWluZm8pIHRoYXQKLSAqIGlzIGN1cnJlbnRseSBiZWluZyB3cml0dGVuCi0gKiBjdXJfYWR1X2ZyYW1lIHJlZmVycyB0byBBRFUgZnJhbWUgd2hvc2UgZGF0YSBzaG91bGQgYmUgYnl0ZXdyaXR0ZW4gbmV4dAotICogKHBvc3NpYmx5IHN0YXJ0aW5nIGZyb20gb2Zmc2V0IHJhdGhlciB0aGFuIHN0YXJ0IDApIChhbmQgaXMgdHlwaWNhbGwgdGFpbAotICogYXQgdGltZSBvZiBsYXN0IHB1c2ggcm91bmQpLgotICogSWYgYXQgc3RhcnQsIHBvc2l0aW9uIHdoZXJlIGl0IHNob3VsZCBzdGFydCB3cml0aW5nIGRlcGVuZHMgb24gKGRhdGEpIHNpemVzCi0gKiBvZiBwcmV2aW91cyBtcDMgZnJhbWVzIChjb3JyZXNwb25kaW5nIHRvIGZvcmVnb2luZyBBRFUgZnJhbWVzKSBrZXB0IGluIHNpemUsCi0gKiBhbmQgaXRzIGJhY2twb2ludGVyICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3B1c2hfbXAzX2ZyYW1lcyAoR3N0UnRwTVBBUm9idXN0RGVwYXkgKiBydHBtcGFkZXBheSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdEFEVUZyYW1lICpmcmFtZSwgKmhlYWQ7Ci0gIGdpbnQgYXY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgIGlmIChHX1VOTElLRUxZICghcnRwbXBhZGVwYXktPmN1cl9hZHVfZnJhbWUpKSB7Ci0gICAgICBydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZSA9IHJ0cG1wYWRlcGF5LT5hZHVfZnJhbWVzLT5oZWFkOwotICAgICAgcnRwbXBhZGVwYXktPm9mZnNldCA9IDA7Ci0gICAgICBydHBtcGFkZXBheS0+c2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKEdfVU5MSUtFTFkgKCFydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZSkpCi0gICAgICBicmVhazsKLQotICAgIGZyYW1lID0gKEdzdEFEVUZyYW1lICopIHJ0cG1wYWRlcGF5LT5jdXJfYWR1X2ZyYW1lLT5kYXRhOwotICAgIGhlYWQgPSAoR3N0QURVRnJhbWUgKikgcnRwbXBhZGVwYXktPmFkdV9mcmFtZXMtPmhlYWQtPmRhdGE7Ci0KLSAgICAvKiBzcGVjaWFsIGNhc2U6IG5vbi1sYXllciBJSUkgYXJlIHNlbnQgc3RyYWlnaHQgdGhyb3VnaCAqLwotICAgIGlmIChHX1VOTElLRUxZIChmcmFtZS0+bGF5ZXIgIT0gMykpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAibGF5ZXIgJWQgZnJhbWUsIHNlbmRpbmcgYXMtaXMiLAotICAgICAgICAgIGZyYW1lLT5sYXllcik7Ci0gICAgICBnc3RfcnRwX2Jhc2VfZGVwYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9ERVBBWUxPQUQgKHJ0cG1wYWRlcGF5KSwKLSAgICAgICAgICBmcmFtZS0+YnVmZmVyKTsKLSAgICAgIGZyYW1lLT5idWZmZXIgPSBOVUxMOwotICAgICAgLyogYW5kIHJlbW92ZSBpdCBmcm9tIGFueSBmdXJ0aGVyIGNvbnNpZGVyYXRpb24gKi8KLSAgICAgIGdfc2xpY2VfZnJlZSAoR3N0QURVRnJhbWUsIGZyYW1lKTsKLSAgICAgIGdfcXVldWVfZGVsZXRlX2xpbmsgKHJ0cG1wYWRlcGF5LT5hZHVfZnJhbWVzLCBydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZSk7Ci0gICAgICBydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZSA9IE5VTEw7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAocnRwbXBhZGVwYXktPm9mZnNldCA9PSBnc3RfYnVmZmVyX2dldF9zaXplIChmcmFtZS0+YnVmZmVyKSkgewotICAgICAgaWYgKGdfbGlzdF9uZXh0IChydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZSkpIHsKLSAgICAgICAgcnRwbXBhZGVwYXktPnNpemUgKz0gZnJhbWUtPmRhdGFfc2l6ZTsKLSAgICAgICAgcnRwbXBhZGVwYXktPmN1cl9hZHVfZnJhbWUgPSBnX2xpc3RfbmV4dCAocnRwbXBhZGVwYXktPmN1cl9hZHVfZnJhbWUpOwotICAgICAgICBmcmFtZSA9IChHc3RBRFVGcmFtZSAqKSBydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZS0+ZGF0YTsKLSAgICAgICAgcnRwbXBhZGVwYXktPm9mZnNldCA9IDA7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcGFkZXBheSwKLSAgICAgICAgICAgICJtb3ZpbmcgdG8gbmV4dCBBRFUgZnJhbWUsIHNpemUgJWQsIHNpZGVfaW5mbyAlZCwgYmFja3BvaW50ZXIgJWQiLAotICAgICAgICAgICAgZnJhbWUtPnNpemUsIGZyYW1lLT5zaWRlX2luZm8sIGZyYW1lLT5iYWNrcG9pbnRlcik7Ci0gICAgICAgIC8qIGxheWVyIEkgYW5kIElJIHBhY2tldHMgaGF2ZSBubyBiaXRyZXNlcnZvaXIgYW5kIG11c3QgYmUgc2VudCBhcy1pczsKLSAgICAgICAgICogc28gZmx1c2ggYW55IHBlbmRpbmcgZnJhbWUgKi8KLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKGZyYW1lLT5sYXllciAhPSAzICYmIHJ0cG1wYWRlcGF5LT5tcDNfZnJhbWUpKQotICAgICAgICAgIGdvdG8gZmx1c2g7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoIXJ0cG1wYWRlcGF5LT5tcDNfZnJhbWUpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXBhZGVwYXksCi0gICAgICAgICAgInNldHRpbmcgdXAgbmV3IE1QMyBmcmFtZSBvZiBzaXplICVkLCBzaWRlX2luZm8gJWQiLAotICAgICAgICAgIGhlYWQtPnNpemUsIGhlYWQtPnNpZGVfaW5mbyk7Ci0gICAgICBydHBtcGFkZXBheS0+bXAzX2ZyYW1lID0gZ3N0X2J5dGVfd3JpdGVyX25ld193aXRoX3NpemUgKGhlYWQtPnNpemUsIFRSVUUpOwotICAgICAgLyogMC1maWxsIHBvc3NpYmxlIGdhcHMgKi8KLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9maWxsX3VuY2hlY2tlZCAocnRwbXBhZGVwYXktPm1wM19mcmFtZSwgMCwgaGVhZC0+c2l6ZSk7Ci0gICAgICBnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAocnRwbXBhZGVwYXktPm1wM19mcmFtZSwgMCk7Ci0gICAgICAvKiBieXRld3JpdGVyIGNvcnJlc3BvbmRzIHRvIGhlYWQgZnJhbWUsCi0gICAgICAgKiBpLmUuIHRoZSBoZWFkZXIgYW5kIHRoZSBzaWRlIGluZm8gbXVzdCBtYXRjaCAqLwotICAgICAgZ19hc3NlcnQgKDQgKyBoZWFkLT5zaWRlX2luZm8gPD0gaGVhZC0+c2l6ZSk7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAoaGVhZC0+YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZCAocnRwbXBhZGVwYXktPm1wM19mcmFtZSwKLSAgICAgICAgICBtYXAuZGF0YSwgNCArIGhlYWQtPnNpZGVfaW5mbyk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChoZWFkLT5idWZmZXIsICZtYXApOwotICAgIH0KLQotICAgIGJ1ZiA9IGZyYW1lLT5idWZmZXI7Ci0gICAgYXYgPSBnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAocnRwbXBhZGVwYXktPm1wM19mcmFtZSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAiY3VycmVudCBtcDMgZnJhbWUgcmVtYWluaW5nOiAlZCIsIGF2KTsKLSAgICBHU1RfTE9HX09CSkVDVCAocnRwbXBhZGVwYXksICJhY2N1bXVsYXRlZCBBRFUgZnJhbWUgZGF0YV9zaXplOiAlZCIsCi0gICAgICAgIHJ0cG1wYWRlcGF5LT5zaXplKTsKLQotICAgIGlmIChydHBtcGFkZXBheS0+b2Zmc2V0KSB7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgLyogbm8gbmVlZCB0byBwb3NpdGlvbiwgc2ltcGx5IGFwcGVuZCAqLwotICAgICAgZ19hc3NlcnQgKG1hcC5zaXplID4gcnRwbXBhZGVwYXktPm9mZnNldCk7Ci0gICAgICBhdiA9IE1JTiAoYXYsIG1hcC5zaXplIC0gcnRwbXBhZGVwYXktPm9mZnNldCk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXBhZGVwYXksCi0gICAgICAgICAgImFwcGVuZGluZyAlZCBieXRlcyBmcm9tIEFEVSBmcmFtZSBhdCBvZmZzZXQgJWQiLCBhdiwKLSAgICAgICAgICBydHBtcGFkZXBheS0+b2Zmc2V0KTsKLSAgICAgIGdzdF9ieXRlX3dyaXRlcl9wdXRfZGF0YV91bmNoZWNrZWQgKHJ0cG1wYWRlcGF5LT5tcDNfZnJhbWUsCi0gICAgICAgICAgbWFwLmRhdGEgKyBydHBtcGFkZXBheS0+b2Zmc2V0LCBhdik7Ci0gICAgICBydHBtcGFkZXBheS0+b2Zmc2V0ICs9IGF2OwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICB9IGVsc2UgewotICAgICAgZ2ludCBwb3MsIHRwb3M7Ci0KLSAgICAgIC8qIHBvc2l0aW9uIHdyaXRpbmcgYWNjb3JkaW5nIHRvIEFEVSBmcmFtZSBiYWNrcG9pbnRlciAqLwotICAgICAgcG9zID0gZ3N0X2J5dGVfd3JpdGVyX2dldF9wb3MgKHJ0cG1wYWRlcGF5LT5tcDNfZnJhbWUpOwotICAgICAgdHBvcyA9IHJ0cG1wYWRlcGF5LT5zaXplIC0gZnJhbWUtPmJhY2twb2ludGVyICsgNCArIGhlYWQtPnNpZGVfaW5mbzsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcGFkZXBheSwgImN1cnJlbnQgTVAzIGZyYW1lIGF0IHBvc2l0aW9uICVkLCAiCi0gICAgICAgICAgInN0YXJ0aW5nIG5ldyBBRFUgZnJhbWUgZGF0YSBhdCBvZmZzZXQgJWQiLCBwb3MsIHRwb3MpOwotICAgICAgaWYgKHRwb3MgPCBwb3MpIHsKLSAgICAgICAgR3N0QURVRnJhbWUgKmR1bW15OwotCi0gICAgICAgIC8qIHRyeSB0byBpbnNlcnQgYXMgZmV3IGZyYW1lcyBhcyBwb3NzaWJsZSwKLSAgICAgICAgICogc28gZ28gZm9yIGEgcmVhc29uYWJseSBsYXJnZSBkdW1teSBmcmFtZSBzaXplICovCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcGFkZXBheSwKLSAgICAgICAgICAgICJvdmVybGFwcGluZyBwcmV2aW91cyBkYXRhOyBpbnNlcnRpbmcgZHVtbXkgZnJhbWUiKTsKLSAgICAgICAgZHVtbXkgPQotICAgICAgICAgICAgZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X2dlbmVyYXRlX2R1bW15X2ZyYW1lIChydHBtcGFkZXBheSwgZnJhbWUpOwotICAgICAgICBnX3F1ZXVlX2luc2VydF9iZWZvcmUgKHJ0cG1wYWRlcGF5LT5hZHVfZnJhbWVzLAotICAgICAgICAgICAgcnRwbXBhZGVwYXktPmN1cl9hZHVfZnJhbWUsIGR1bW15KTsKLSAgICAgICAgLyogb2Zmc2V0IGlzIGtub3duIHRvIGJlIHplcm8sIHNvIHdlIGNhbiBzaGlmdCBjdXJyZW50IG9uZSAqLwotICAgICAgICBydHBtcGFkZXBheS0+Y3VyX2FkdV9mcmFtZSA9IHJ0cG1wYWRlcGF5LT5jdXJfYWR1X2ZyYW1lLT5wcmV2OwotICAgICAgICBpZiAoIXJ0cG1wYWRlcGF5LT5zaXplKSB7Ci0gICAgICAgICAgZ19hc3NlcnQgKHJ0cG1wYWRlcGF5LT5jdXJfYWR1X2ZyYW1lID09Ci0gICAgICAgICAgICAgIHJ0cG1wYWRlcGF5LT5hZHVfZnJhbWVzLT5oZWFkKTsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwbXBhZGVwYXksICIuLi4gd2hpY2ggaXMgbmV3IGhlYWQgZnJhbWUiKTsKLSAgICAgICAgICBnc3RfYnl0ZV93cml0ZXJfZnJlZSAocnRwbXBhZGVwYXktPm1wM19mcmFtZSk7Ci0gICAgICAgICAgcnRwbXBhZGVwYXktPm1wM19mcmFtZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgLyogLi4uIGFuZCBjb250aW51ZSBhZGRpbmcgdGhhdCBlbXB0eSBvbmUgaW1tZWRpYXRlbHksCi0gICAgICAgICAqIGFuZCB0aGVuIHNlZSBpZiB0aGF0IHByb3ZpZGVkIGVub3VnaCBleHRyYSBzcGFjZSAqLwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0gZWxzZSBpZiAodHBvcyA+PSBwb3MgKyBhdikgewotICAgICAgICAvKiBBRFUgZnJhbWUgbm8gbG9uZ2VyIG5lZWRzIGN1cnJlbnQgTVAzIGZyYW1lOyBtb3ZlIHRvIGl0cyBlbmQgKi8KLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAicGFzc2VkIGN1cnJlbnQgTVAzIGZyYW1lIik7Ci0gICAgICAgIGdzdF9ieXRlX3dyaXRlcl9zZXRfcG9zIChydHBtcGFkZXBheS0+bXAzX2ZyYW1lLCBwb3MgKyBhdik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBwb3NpdGlvbiBhbmQgYXBwZW5kICovCi0gICAgICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBtcGFkZXBheSwgImFkZGluZyB0byBjdXJyZW50IE1QMyBmcmFtZSIpOwotICAgICAgICBnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAocnRwbXBhZGVwYXktPm1wM19mcmFtZSwgdHBvcyk7Ci0gICAgICAgIGF2IC09ICh0cG9zIC0gcG9zKTsKLSAgICAgICAgZ19hc3NlcnQgKG1hcC5zaXplID49IDQgKyBmcmFtZS0+c2lkZV9pbmZvKTsKLSAgICAgICAgYXYgPSBNSU4gKGF2LCBtYXAuc2l6ZSAtIDQgLSBmcmFtZS0+c2lkZV9pbmZvKTsKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhX3VuY2hlY2tlZCAocnRwbXBhZGVwYXktPm1wM19mcmFtZSwKLSAgICAgICAgICAgIG1hcC5kYXRhICsgNCArIGZyYW1lLT5zaWRlX2luZm8sIGF2KTsKLSAgICAgICAgcnRwbXBhZGVwYXktPm9mZnNldCArPSBhdiArIDQgKyBmcmFtZS0+c2lkZV9pbmZvOwotICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIGlmIG1wMyBmcmFtZSBmaWxsZWQsIHNlbmQgb24gaXRzIHdheSAqLwotICAgIGlmIChnc3RfYnl0ZV93cml0ZXJfZ2V0X3JlbWFpbmluZyAocnRwbXBhZGVwYXktPm1wM19mcmFtZSkgPT0gMCkgewotICAgIGZsdXNoOgotICAgICAgYnVmID0gZ3N0X2J5dGVfd3JpdGVyX2ZyZWVfYW5kX2dldF9idWZmZXIgKHJ0cG1wYWRlcGF5LT5tcDNfZnJhbWUpOwotICAgICAgcnRwbXBhZGVwYXktPm1wM19mcmFtZSA9IE5VTEw7Ci0gICAgICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IEdTVF9CVUZGRVJfUFRTIChoZWFkLT5idWZmZXIpOwotICAgICAgLyogbm8gbG9uZ2VyIG5lZWQgaGVhZCBBRFUgZnJhbWUgaGVhZGVyIGFuZCBzaWRlIGluZm8gKi8KLSAgICAgIC8qIE5PVEUgbWF5YmUgaGVhZCA9PSBjdXJyZW50LCB0aGVuIHNpemUgYW5kIG9mZnNldCBnbyBvZmYgYSBiaXQsCi0gICAgICAgKiBidXQgY3VycmVudCBnZXRzIHJlc2V0IHRvIE5VTEwsIGFuZCB0aGVuIGFsc28gb2Zmc2V0IGFuZCBzaXplICovCi0gICAgICBydHBtcGFkZXBheS0+c2l6ZSAtPSBoZWFkLT5kYXRhX3NpemU7Ci0gICAgICBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZGVxdWV1ZV9mcmFtZSAocnRwbXBhZGVwYXkpOwotICAgICAgLyogc2VuZCAqLwotICAgICAgcmV0ID0gZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBtcGFkZXBheSksCi0gICAgICAgICAgYnVmKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBwcm9jZXNzIEFEVSBmcmFtZSBAYnVmIHRocm91Z2g6Ci0gKiAtIGRlaW50ZXJsZWF2aW5nCi0gKiAtIGNvbnZlcnRpbmcgdG8gTVAzIGZyYW1lcwotICogVGFrZXMgb3duZXJzaGlwIG9mIEBidWYuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfc3VibWl0X2FkdSAoR3N0UnRwTVBBUm9idXN0RGVwYXkgKiBydHBtcGFkZXBheSwKLSAgICBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIGlmIChnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZGVpbnRlcmxlYXZlIChydHBtcGFkZXBheSwgYnVmKSkKLSAgICByZXR1cm4gZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3B1c2hfbXAzX2ZyYW1lcyAocnRwbXBhZGVwYXkpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cE1QQVJvYnVzdERlcGF5ICpydHBtcGFkZXBheTsKLSAgZ2ludCBwYXlsb2FkX2xlbiwgb2Zmc2V0OwotICBndWludDggKnBheWxvYWQ7Ci0gIGdib29sZWFuIGNvbnQsIGR0eXBlOwotICBndWludCBhdiwgc2l6ZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgcnRwbXBhZGVwYXkgPSBHU1RfUlRQX01QQV9ST0JVU1RfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9QVFMgKHJ0cC0+YnVmZmVyKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgaWYgKHBheWxvYWRfbGVuIDw9IDEpCi0gICAgZ290byBzaG9ydF9yZWFkOwotCi0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLSAgb2Zmc2V0ID0gMDsKLSAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAicGF5bG9hZF9sZW46ICVkIiwgcGF5bG9hZF9sZW4pOwotCi0gIC8qIHN0cmlwIG9mZiBkZXNjcmlwdG9yCi0gICAqCi0gICAqICAwICAgICAgICAgICAgICAgICAgIDEKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8Q3xUfCAgICAgICAgICAgIEFEVSBzaXplICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKgotICAgKiBDOiBpZiAxLCBkYXRhIGlzIGNvbnRpbnVhdGlvbgotICAgKiBUOiBpZiAxLCBzaXplIGlzIDE0IGJpdHMsIG90aGVyd2lzZSA2IGJpdHMKLSAgICogQURVIHNpemU6IHNpemUgb2YgZm9sbG93aW5nIHBhY2tldCAobm90IGluY2x1ZGluZyBkZXNjcmlwdG9yKQotICAgKi8KLSAgd2hpbGUgKHBheWxvYWRfbGVuKSB7Ci0gICAgaWYgKEdfTElLRUxZIChydHBtcGFkZXBheS0+aGFzX2Rlc2NyaXB0b3IpKSB7Ci0gICAgICBjb250ID0gISAhKHBheWxvYWRbb2Zmc2V0XSAmIDB4ODApOwotICAgICAgZHR5cGUgPSAhICEocGF5bG9hZFtvZmZzZXRdICYgMHg0MCk7Ci0gICAgICBpZiAoZHR5cGUpIHsKLSAgICAgICAgc2l6ZSA9IChwYXlsb2FkW29mZnNldF0gJiAweDNmKSA8PCA4IHwgcGF5bG9hZFtvZmZzZXQgKyAxXTsKLSAgICAgICAgcGF5bG9hZF9sZW4tLTsKLSAgICAgICAgb2Zmc2V0Kys7Ci0gICAgICB9IGVsc2UgaWYgKHBheWxvYWRfbGVuID49IDIpIHsKLSAgICAgICAgc2l6ZSA9IChwYXlsb2FkW29mZnNldF0gJiAweDNmKTsKLSAgICAgICAgcGF5bG9hZF9sZW4gLT0gMjsKLSAgICAgICAgb2Zmc2V0ICs9IDI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIHNob3J0X3JlYWQ7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNvbnQgPSBGQUxTRTsKLSAgICAgIGR0eXBlID0gLTE7Ci0gICAgICBzaXplID0gcGF5bG9hZF9sZW47Ci0gICAgfQotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LCAib2Zmc2V0ICVkIGhhcyBjb250OiAlZCwgZHR5cGU6ICVkLCBzaXplOiAlZCIsCi0gICAgICAgIG9mZnNldCwgY29udCwgZHR5cGUsIHNpemUpOwotCi0gICAgYnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIG9mZnNldCwKLSAgICAgICAgTUlOIChzaXplLCBwYXlsb2FkX2xlbikpOwotCi0gICAgaWYgKGNvbnQpIHsKLSAgICAgIGF2ID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBtcGFkZXBheS0+YWRhcHRlcik7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoIWF2KSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcGFkZXBheSwKLSAgICAgICAgICAgICJkaXNjYXJkaW5nIGNvbnRpbnVhdGlvbiBmcmFnbWVudCB3aXRob3V0IHByaW9yIGZyYWdtZW50Iik7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhdiArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICAgICAgICBnc3RfYWRhcHRlcl9wdXNoIChydHBtcGFkZXBheS0+YWRhcHRlciwgYnVmKTsKLSAgICAgICAgaWYgKGF2ID09IHNpemUpIHsKLSAgICAgICAgICB0aW1lc3RhbXAgPSBnc3RfYWRhcHRlcl9wcmV2X3B0cyAocnRwbXBhZGVwYXktPmFkYXB0ZXIsIE5VTEwpOwotICAgICAgICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBtcGFkZXBheS0+YWRhcHRlciwgc2l6ZSk7Ci0gICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSB0aW1lc3RhbXA7Ci0gICAgICAgICAgZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X3N1Ym1pdF9hZHUgKHJ0cG1wYWRlcGF5LCBidWYpOwotICAgICAgICB9IGVsc2UgaWYgKGF2ID4gc2l6ZSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cG1wYWRlcGF5LAotICAgICAgICAgICAgICAiYXNzZW1ibGVkIEFEVSBzaXplICVkIGxhcmdlciB0aGFuIGV4cGVjdGVkICVkOyBkaXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgYXYsIHNpemUpOwotICAgICAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChydHBtcGFkZXBheS0+YWRhcHRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHNpemUgPSBwYXlsb2FkX2xlbjsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm90IGNvbnRpbnVhdGlvbiwgZmlyc3QgZnJhZ21lbnQgb3Igd2hvbGUgQURVICovCi0gICAgICBpZiAocGF5bG9hZF9sZW4gPT0gc2l6ZSkgewotICAgICAgICAvKiB3aG9sZSBBRFUgKi8KLSAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSB0aW1lc3RhbXA7Ci0gICAgICAgIGdzdF9ydHBfbXBhX3JvYnVzdF9kZXBheV9zdWJtaXRfYWR1IChydHBtcGFkZXBheSwgYnVmKTsKLSAgICAgIH0gZWxzZSBpZiAocGF5bG9hZF9sZW4gPCBzaXplKSB7Ci0gICAgICAgIC8qIGZpcnN0IGZyYWdtZW50ICovCi0gICAgICAgIGdzdF9hZGFwdGVyX3B1c2ggKHJ0cG1wYWRlcGF5LT5hZGFwdGVyLCBidWYpOwotICAgICAgICBzaXplID0gcGF5bG9hZF9sZW47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgb2Zmc2V0ICs9IHNpemU7Ci0gICAgcGF5bG9hZF9sZW4gLT0gc2l6ZTsKLQotICAgIC8qIHRpbWVzdGFtcCBhcHBsaWVzIHRvIGZpcnN0IHBheWxvYWQsIG5vIGlkZWEgZm9yIHN1YnNlcXVlbnQgb25lcyAqLwotICAgIHRpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLQotICAvKiBFUlJPUlMgKi8KLXNob3J0X3JlYWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBtcGFkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJQYWNrZXQgY29udGFpbnMgaW52YWxpZCBkYXRhIikpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9tcGFfcm9idXN0X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RSdHBNUEFSb2J1c3REZXBheSAqcnRwbXBhZGVwYXk7Ci0KLSAgcnRwbXBhZGVwYXkgPSBHU1RfUlRQX01QQV9ST0JVU1RfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBydHBtcGFkZXBheS0+bGFzdF9paSA9IC0xOwotICAgICAgcnRwbXBhZGVwYXktPmxhc3RfaWNjID0gLTE7Ci0gICAgICBydHBtcGFkZXBheS0+c2l6ZSA9IDA7Ci0gICAgICBydHBtcGFkZXBheS0+b2Zmc2V0ID0gMDsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCi0gICAgcmV0dXJuIHJldDsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgIHsKLSAgICAgIGdpbnQgaTsKLQotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cG1wYWRlcGF5LT5hZGFwdGVyKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHJ0cG1wYWRlcGF5LT5kZWludGVyKTsgaSsrKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJnJ0cG1wYWRlcGF5LT5kZWludGVyW2ldLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIHJ0cG1wYWRlcGF5LT5jdXJfYWR1X2ZyYW1lID0gTlVMTDsKLSAgICAgIGdfcXVldWVfZm9yZWFjaCAocnRwbXBhZGVwYXktPmFkdV9mcmFtZXMsCi0gICAgICAgICAgKEdGdW5jKSBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZnJlZV9mcmFtZSwgTlVMTCk7Ci0gICAgICBnX3F1ZXVlX2NsZWFyIChydHBtcGFkZXBheS0+YWR1X2ZyYW1lcyk7Ci0gICAgICBpZiAocnRwbXBhZGVwYXktPm1wM19mcmFtZSkKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX2ZyZWUgKHJ0cG1wYWRlcGF5LT5tcDNfZnJhbWUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtcGFyb2J1c3RkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9NUEFfUk9CVVNUX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXBhcm9idXN0ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM5ZWMwYi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wYXJvYnVzdGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTA+IE1hcmsgTmF1d2VsYWVydHMgPG1hcmsubmF1d2VsYWVydHNAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9NUEFfUk9CVVNUX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVBBX1JPQlVTVF9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Ynl0ZXdyaXRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01QQV9ST0JVU1RfREVQQVkgXAotICAoZ3N0X3J0cF9tcGFfcm9idXN0X2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfTVBBX1JPQlVTVF9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9NUEFfUk9CVVNUX0RFUEFZLEdzdFJ0cE1QQVJvYnVzdERlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9NUEFfUk9CVVNUX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NUEFfUk9CVVNUX0RFUEFZLEdzdFJ0cE1QQVJvYnVzdERlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QQV9ST0JVU1RfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVBBX1JPQlVTVF9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVBBX1JPQlVTVF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBBX1JPQlVTVF9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUEFSb2J1c3REZXBheSBHc3RSdHBNUEFSb2J1c3REZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBNUEFSb2J1c3REZXBheUNsYXNzIEdzdFJ0cE1QQVJvYnVzdERlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwTVBBUm9idXN0RGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gICAgaGFzX2Rlc2NyaXB0b3I7Ci0KLSAgLyogbGFzdCBpbnRlcmxlYXZlIGluZGV4ICovCi0gIGdpbnQgICAgICAgIGxhc3RfaWk7Ci0gIC8qIGxhc3QgaW50ZXJsZWF2ZSBjeWNsZSBjb3VudCAqLwotICBnaW50ICAgICAgICBsYXN0X2ljYzsKLSAgLyogYnVmZmVycyBwZW5kaW5nIGRlaW50ZXJsZWF2aW5nICovCi0gIEdzdEJ1ZmZlciAgICpkZWludGVyWzI1Nl07Ci0KLSAgLyogQURVIGJ1ZmZlcnMgcGVuZGluZyBNUDMgdHJhbnNmb3JtYXRpb24gKi8KLSAgR1F1ZXVlICAgICAgKmFkdV9mcmFtZXM7Ci0gIEdMaXN0ICAgICAgICpjdXJfYWR1X2ZyYW1lOwotICBnaW50ICAgICAgICAgb2Zmc2V0OwotICBnaW50ICAgICAgICAgc2l6ZTsKLSAgR3N0Qnl0ZVdyaXRlciAqbXAzX2ZyYW1lOwotfTsKLQotc3RydWN0IF9Hc3RSdHBNUEFSb2J1c3REZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX21wYV9yb2J1c3RfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfTVBBX1JPQlVTVF9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFiNWUyMi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHJ0cG1wdmRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwbXB2ZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cG1wdmRlcGF5X2RlYnVnKQotCi0vKiBGSVhNRSwgd2Ugc2V0IHRoZSBtcGVnIHZlcnNpb24gdG8gMiwgd2Ugc2hvdWxkIGlkZWFsbHkgYmUgbG9va2luZyBhdCBjb250ZW50cwotICogb2YgdGhlIHN0cmVhbSB0byBmaWd1cmUgb3V0IHRoZSB2ZXJzaW9uICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcHZfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMKLSAgICAoInZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uID0gKGludCkgMiwgc3lzdGVtc3RyZWFtID0gKGJvb2xlYW4pIEZBTFNFIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9tcHZfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIk1QVlwiOyIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX01QVl9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwIikKLSAgICApOwotCi1HX0RFRklORV9UWVBFIChHc3RSdHBNUFZEZXBheSwgZ3N0X3J0cF9tcHZfZGVwYXksIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX21wdl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfbXB2X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXB2X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cE1QVkRlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXB2X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfbXB2X2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIE1QRUcgdmlkZW8gZGVwYXlsb2FkZXIiLCAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIE1QRUcgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDIyNTApIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9tcHZfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9tcHZfZGVwYXlfcHJvY2VzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwbXB2ZGVwYXlfZGVidWcsICJydHBtcHZkZXBheSIsIDAsCi0gICAgICAiTVBFRyBWaWRlbyBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXB2X2RlcGF5X2luaXQgKEdzdFJ0cE1QVkRlcGF5ICogcnRwbXB2ZGVwYXkpCi17Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcHZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnaW50IGNsb2NrX3JhdGU7Ci0gIEdzdENhcHMgKm91dGNhcHM7Ci0gIGdib29sZWFuIHJlczsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIG91dGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vbXBlZyIsCi0gICAgICAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAyLAotICAgICAgInN5c3RlbXN0cmVhbSIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBvdXRjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9tcHZfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBNUFZEZXBheSAqcnRwbXB2ZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLQotICBydHBtcHZkZXBheSA9IEdTVF9SVFBfTVBWX0RFUEFZIChkZXBheWxvYWQpOwotCi0gIHsKLSAgICBnaW50IHBheWxvYWRfbGVuLCBwYXlsb2FkX2hlYWRlcjsKLSAgICBndWludDggKnBheWxvYWQ7Ci0gICAgZ3VpbnQ4IFQ7Ci0KLSAgICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKHJ0cCk7Ci0gICAgcGF5bG9hZF9oZWFkZXIgPSAwOwotCi0gICAgaWYgKHBheWxvYWRfbGVuIDw9IDQpCi0gICAgICBnb3RvIGVtcHR5X3BhY2tldDsKLQotICAgIC8qIDMuNCBNUEVHIFZpZGVvLXNwZWNpZmljIGhlYWRlcgotICAgICAqCi0gICAgICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKiB8ICAgIE1CWiAgfFR8ICAgICAgICAgVFIgICAgICAgIHwgfE58U3xCfEV8ICBQICB8IHwgQkZDIHwgfCBGRkMgfAotICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU4gICAgICAgICAgICAgIEZCViAgICAgRkZWCi0gICAgICovCi0gICAgVCA9IChwYXlsb2FkWzBdICYgMHgwNCk7Ci0KLSAgICBwYXlsb2FkX2xlbiAtPSA0OwotICAgIHBheWxvYWRfaGVhZGVyICs9IDQ7Ci0gICAgcGF5bG9hZCArPSA0OwotCi0gICAgaWYgKFQpIHsKLSAgICAgIC8qIAotICAgICAgICogMy40LjEgTVBFRy0yIFZpZGVvLXNwZWNpZmljIGhlYWRlciBleHRlbnNpb24KLSAgICAgICAqCi0gICAgICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqIHxYfEV8Zl9bMCwwXXxmX1swLDFdfGZfWzEsMF18Zl9bMSwxXXwgREN8IFBTfFR8UHxDfFF8VnxBfFJ8SHxHfER8Ci0gICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICovCi0gICAgICBpZiAocGF5bG9hZF9sZW4gPD0gNCkKLSAgICAgICAgZ290byBlbXB0eV9wYWNrZXQ7Ci0KLSAgICAgIHBheWxvYWRfbGVuIC09IDQ7Ci0gICAgICBwYXlsb2FkX2hlYWRlciArPSA0OwotICAgICAgcGF5bG9hZCArPSA0OwotICAgIH0KLQotICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBwYXlsb2FkX2hlYWRlciwgLTEpOwotCi0gICAgaWYgKG91dGJ1ZikgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwbXB2ZGVwYXksCi0gICAgICAgICAgImdzdF9ydHBfbXB2X2RlcGF5X2NoYWluOiBwdXNoaW5nIGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dGJ1ZikpOwotICAgICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cG1wdmRlcGF5KSwgb3V0YnVmLAotICAgICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotZW1wdHlfcGFja2V0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwbXB2ZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiRW1wdHkgcGF5bG9hZC4iKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXB2X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwbXB2ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfTVBWX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwbXB2ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmNmM0My4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wdmRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTVBWX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVBWX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01QVl9ERVBBWSBcCi0gIChnc3RfcnRwX21wdl9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX01QVl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9NUFZfREVQQVksR3N0UnRwTVBWRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX01QVl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBWX0RFUEFZLEdzdFJ0cE1QVkRlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QVl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9NUFZfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QVl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBWX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QVkRlcGF5IEdzdFJ0cE1QVkRlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cE1QVkRlcGF5Q2xhc3MgR3N0UnRwTVBWRGVwYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBNUFZEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwTVBWRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9tcHZfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX21wdl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUFZfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cG1wdnBheS5jIGIvZ3N0L3J0cC9nc3RydHBtcHZwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE2YjNhMC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cG1wdnBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gVGhpanMgVmVybWVpciA8dGhpanN2ZXJtZWlyQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwbXB2cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwbXB2cGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBtcHZwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX21wdl9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby9tcGVnLCAiCi0gICAgICAgICJtcGVndmVyc2lvbiA9IChpbnQpIDIsIHN5c3RlbXN0cmVhbSA9IChib29sZWFuKSBGQUxTRSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfbXB2X3BheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9NUFZfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTVBWXCI7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiTVBWXCIiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX21wdl9wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9tcHZfcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcHZfcGF5X2ZsdXNoIChHc3RSVFBNUFZQYXkgKiBydHBtcHZwYXkpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfbXB2X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tcHZfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICoKLSAgICBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfbXB2X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9tcHZfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJUUE1QVlBheSwgZ3N0X3J0cF9tcHZfcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9QQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXB2X3BheV9jbGFzc19pbml0IChHc3RSVFBNUFZQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9tcHZfcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfbXB2X3BheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9tcHZfcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX21wdl9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBNUEVHMiBFUyB2aWRlbyBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgTVBFRzIgRVMgaW50byBSVFAgcGFja2V0cyAoUkZDIDIyNTApIiwKLSAgICAgICJUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfbXB2X3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfbXB2X3BheV9oYW5kbGVfYnVmZmVyOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2lua19ldmVudCA9IGdzdF9ydHBfbXB2X3BheV9zaW5rX2V2ZW50OwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBtcHZwYXlfZGVidWcsICJydHBtcHZwYXkiLCAwLAotICAgICAgIk1QRUcyIEVTIFZpZGVvIFJUUCBQYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXB2X3BheV9pbml0IChHc3RSVFBNUFZQYXkgKiBydHBtcHZwYXkpCi17Ci0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBtcHZwYXkpLT5jbG9ja19yYXRlID0gOTAwMDA7Ci0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEX1BUIChydHBtcHZwYXkpID0gR1NUX1JUUF9QQVlMT0FEX01QVjsKLQotICBydHBtcHZwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wdl9wYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJUUE1QVlBheSAqcnRwbXB2cGF5OwotCi0gIHJ0cG1wdnBheSA9IEdTVF9SVFBfTVBWX1BBWSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocnRwbXB2cGF5LT5hZGFwdGVyKTsKLSAgcnRwbXB2cGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX21wdl9wYXlfcmVzZXQgKEdzdFJUUE1QVlBheSAqIHBheSkKLXsKLSAgcGF5LT5maXJzdF90cyA9IC0xOwotICBwYXktPmR1cmF0aW9uID0gMDsKLSAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHBheS0+YWRhcHRlcik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheSwgInJlc2V0IGRlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tcHZfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAidmlkZW8iLAotICAgICAgcGF5bG9hZC0+cHQgIT0gR1NUX1JUUF9QQVlMT0FEX01QViwgIk1QViIsIDkwMDAwKTsKLSAgcmV0dXJuIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChwYXlsb2FkLCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX21wdl9wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFJUUE1QVlBheSAqcnRwbXB2cGF5OwotCi0gIHJ0cG1wdnBheSA9IEdTVF9SVFBfTVBWX1BBWSAocGF5bG9hZCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgLyogbWFrZSBzdXJlIHdlIHB1c2ggdGhlIGxhc3QgcGFja2V0cyBpbiB0aGUgYWRhcHRlciBvbiBFT1MgKi8KLSAgICAgIGdzdF9ydHBfbXB2X3BheV9mbHVzaCAocnRwbXB2cGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfcnRwX21wdl9wYXlfcmVzZXQgKHJ0cG1wdnBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAocGF5bG9hZCwgZXZlbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgUlRQX0hFQURFUl9MRU4gMTIKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXB2X3BheV9mbHVzaCAoR3N0UlRQTVBWUGF5ICogcnRwbXB2cGF5KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQgYXZhaWw7Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3Q7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotCi0gIGd1aW50OCAqcGF5bG9hZDsKLQotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwbXB2cGF5LT5hZGFwdGVyKTsKLQotICByZXQgPSBHU1RfRkxPV19PSzsKLQotICBsaXN0ID0KLSAgICAgIGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKGF2YWlsIC8gKEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocnRwbXB2cGF5KSAtCi0gICAgICAgICAgUlRQX0hFQURFUl9MRU4pICsgMSk7Ci0KLSAgd2hpbGUgKGF2YWlsID4gMCkgewotICAgIGd1aW50IHRvd3JpdGU7Ci0gICAgZ3VpbnQgcGFja2V0X2xlbjsKLSAgICBndWludCBwYXlsb2FkX2xlbjsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gICAgR3N0QnVmZmVyICpwYXlidWY7Ci0KLSAgICBwYWNrZXRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYWNrZXRfbGVuIChhdmFpbCArIDQsIDAsIDApOwotCi0gICAgdG93cml0ZSA9IE1JTiAocGFja2V0X2xlbiwgR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBtcHZwYXkpKTsKLQotICAgIHBheWxvYWRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYXlsb2FkX2xlbiAodG93cml0ZSwgMCwgMCk7Ci0KLSAgICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKDQsIDAsIDApOwotCi0gICAgcGF5bG9hZF9sZW4gLT0gNDsKLQotICAgIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0YnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLQotICAgIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gICAgLyogZW5hYmxlIE1QRUcgVmlkZW8tc3BlY2lmaWMgaGVhZGVyCi0gICAgICoKLSAgICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAqIHwgICAgTUJaICB8VHwgICAgICAgICBUUiAgICAgICAgfCB8TnxTfEJ8RXwgIFAgIHwgfCBCRkMgfCB8IEZGQyB8Ci0gICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTiAgICAgICAgICAgICAgRkJWICAgICBGRlYKLSAgICAgKi8KLQotICAgIC8qIGZpbGwgaW4gdGhlIE1QRUcgVmlkZW8tc3BlY2lmaWMgaGVhZGVyIAotICAgICAqIGRhdGEgaXMgc2V0IHRvIDB4MCBoZXJlCi0gICAgICovCi0gICAgbWVtc2V0IChwYXlsb2FkLCAweDAsIDQpOwotCi0gICAgYXZhaWwgLT0gcGF5bG9hZF9sZW47Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBhdmFpbCA9PSAwKTsKLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICBwYXlidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlcl9mYXN0IChydHBtcHZwYXktPmFkYXB0ZXIsIHBheWxvYWRfbGVuKTsKLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwbXB2cGF5KSwgb3V0YnVmLCBwYXlidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgcGF5YnVmKTsKLQotICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gcnRwbXB2cGF5LT5maXJzdF90czsKLSAgICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBvdXRidWYpOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaF9saXN0IChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwbXB2cGF5KSwgbGlzdCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXB2X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UlRQTVBWUGF5ICpydHBtcHZwYXk7Ci0gIGd1aW50IGF2YWlsLCBwYWNrZXRfbGVuOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBkdXJhdGlvbjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLQotICBydHBtcHZwYXkgPSBHU1RfUlRQX01QVl9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotCi0gIGlmIChHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKGJ1ZmZlcikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBtcHZwYXksICJESVNDT05UIik7Ci0gICAgZ3N0X3J0cF9tcHZfcGF5X3Jlc2V0IChydHBtcHZwYXkpOwotICB9Ci0KLSAgYXZhaWwgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cG1wdnBheS0+YWRhcHRlcik7Ci0KLSAgaWYgKGR1cmF0aW9uID09IC0xKQotICAgIGR1cmF0aW9uID0gMDsKLQotICBpZiAocnRwbXB2cGF5LT5maXJzdF90cyA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FIHx8IGF2YWlsID09IDApCi0gICAgcnRwbXB2cGF5LT5maXJzdF90cyA9IHRpbWVzdGFtcDsKLQotICBpZiAoYXZhaWwgPT0gMCkgewotICAgIHJ0cG1wdnBheS0+ZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgfSBlbHNlIHsKLSAgICBydHBtcHZwYXktPmR1cmF0aW9uICs9IGR1cmF0aW9uOwotICB9Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwbXB2cGF5LT5hZGFwdGVyLCBidWZmZXIpOwotICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwbXB2cGF5LT5hZGFwdGVyKTsKLQotICAvKiBnZXQgcGFja2V0IGxlbmd0aCBvZiBwcmV2aW91cyBkYXRhIGFuZCB0aGlzIG5ldyBkYXRhLAotICAgKiBwYXlsb2FkIGxlbmd0aCBpbmNsdWRlcyBhIDQgYnl0ZSBNUEVHIHZpZGVvLXNwZWNpZmljIGhlYWRlciAqLwotICBwYWNrZXRfbGVuID0gZ3N0X3J0cF9idWZmZXJfY2FsY19wYWNrZXRfbGVuIChhdmFpbCwgNCwgMCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChydHBtcHZwYXksICJhdmFpbGFibGUgJWQsIHJ0cCBwYWNrZXQgbGVuZ3RoICVkIiwgYXZhaWwsCi0gICAgICBwYWNrZXRfbGVuKTsKLQotICBpZiAoZ3N0X3J0cF9iYXNlX3BheWxvYWRfaXNfZmlsbGVkIChiYXNlcGF5bG9hZCwKLSAgICAgICAgICBwYWNrZXRfbGVuLCBydHBtcHZwYXktPmR1cmF0aW9uKSkgewotICAgIHJldCA9IGdzdF9ydHBfbXB2X3BheV9mbHVzaCAocnRwbXB2cGF5KTsKLSAgfSBlbHNlIHsKLSAgICBydHBtcHZwYXktPmZpcnN0X3RzID0gdGltZXN0YW1wOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX21wdl9wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UlRQTVBWUGF5ICpydHBtcHZwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBydHBtcHZwYXkgPSBHU1RfUlRQX01QVl9QQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfcnRwX21wdl9wYXlfcmVzZXQgKHJ0cG1wdnBheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9tcHZfcGF5X3Jlc2V0IChydHBtcHZwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfbXB2X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cG1wdnBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9NUFZfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXB2cGF5LmggYi9nc3QvcnRwL2dzdHJ0cG1wdnBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2ViYWQ5Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwbXB2cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1JUUF9NUFZfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVBWX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBNUFZQYXkgR3N0UlRQTVBWUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUE1QVlBheUNsYXNzIEdzdFJUUE1QVlBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9NUFZfUEFZIFwKLSAgKGdzdF9ydHBfbXB2X3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX01QVl9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfTVBWX1BBWSxHc3RSVFBNUFZQYXkpKQotI2RlZmluZSBHU1RfUlRQX01QVl9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX01QVl9QQVksR3N0UlRQTVBWUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX01QVl9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfTVBWX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVBWX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfTVBWX1BBWSkpCi0KLXN0cnVjdCBfR3N0UlRQTVBWUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci0KLSAgR3N0QWRhcHRlciAgKmFkYXB0ZXI7Ci0gIEdzdENsb2NrVGltZSBmaXJzdF90czsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotfTsKLQotc3RydWN0IF9Hc3RSVFBNUFZQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfbXB2X3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfbXB2X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9NUFZfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBvcHVzZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTZiYTcuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBvcHVzZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICogT3B1cyBEZXBheWxvYWRlciBHc3QgRWxlbWVudAotICoKLSAqICAgQGF1dGhvcjogRGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhIDxkYW5pbG8uY2VzYXJAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlICJnc3RydHBvcHVzZGVwYXkuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwb3B1c2RlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBvcHVzZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX29wdXNfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA0ODAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIHsgXCJPUFVTXCIsIFwiWC1HU1QtT1BVUy1EUkFGVC1TUElUVEtBLTAwXCIgfSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfb3B1c19kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtb3B1cywgY2hhbm5lbC1tYXBwaW5nLWZhbWlseSA9IChpbnQpIDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfb3B1c19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9vcHVzX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi1HX0RFRklORV9UWVBFIChHc3RSVFBPcHVzRGVwYXksIGdzdF9ydHBfb3B1c19kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9vcHVzX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJUUE9wdXNEZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0YmFzZXJ0cGRlcGF5bG9hZF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotICBnc3RiYXNlcnRwZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX29wdXNfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9vcHVzX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBPcHVzIHBhY2tldCBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgT3B1cyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwKLSAgICAgICJEYW5pbG8gQ2VzYXIgTGVtZXMgZGUgUGF1bGEgPGRhbmlsby5jZXNhckBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ3N0YmFzZXJ0cGRlcGF5bG9hZF9jbGFzcy0+cHJvY2VzcyA9IGdzdF9ydHBfb3B1c19kZXBheV9wcm9jZXNzOwotICBnc3RiYXNlcnRwZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfb3B1c19kZXBheV9zZXRjYXBzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBvcHVzZGVwYXlfZGVidWcsICJydHBvcHVzZGVwYXkiLCAwLAotICAgICAgIk9wdXMgUlRQIERlcGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX29wdXNfZGVwYXlfaW5pdCAoR3N0UlRQT3B1c0RlcGF5ICogcnRwb3B1c2RlcGF5KQotewotCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9vcHVzX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGdib29sZWFuIHJldDsKLSAgY29uc3QgZ2NoYXIgKnNwcm9wX3N0ZXJlbywgKnNwcm9wX21heGNhcHR1cmVyYXRlOwotCi0gIHNyY2NhcHMgPQotICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtb3B1cyIsICJjaGFubmVsLW1hcHBpbmctZmFtaWx5IiwgR19UWVBFX0lOVCwKLSAgICAgIDAsIE5VTEwpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKChzcHJvcF9zdGVyZW8gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJzcHJvcC1zdGVyZW8iKSkpIHsKLSAgICBpZiAoc3RyY21wIChzcHJvcF9zdGVyZW8sICIwIikgPT0gMCkKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKHNyY2NhcHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICAgIGVsc2UgaWYgKHN0cmNtcCAoc3Byb3Bfc3RlcmVvLCAiMSIpID09IDApCi0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzcmNjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAyLCBOVUxMKTsKLSAgICBlbHNlCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5bG9hZCwgIlVua25vd24gc3Byb3Atc3RlcmVvIHZhbHVlICclcyciLAotICAgICAgICAgIHNwcm9wX3N0ZXJlbyk7Ci0gIH0KLQotICBpZiAoKHNwcm9wX21heGNhcHR1cmVyYXRlID0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJzcHJvcC1tYXhjYXB0dXJlcmF0ZSIpKSkgewotICAgIGd1bG9uZyByYXRlOwotICAgIGdjaGFyICp0YWlscHRyOwotCi0gICAgcmF0ZSA9IHN0cnRvdWwgKHNwcm9wX21heGNhcHR1cmVyYXRlLCAmdGFpbHB0ciwgMTApOwotICAgIGlmIChyYXRlID4gSU5UX01BWCB8fCAqdGFpbHB0ciAhPSAnXDAnKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5bG9hZCwKLSAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIHNwcm9wLW1heGNhcHR1cmVyYXRlIHZhbHVlICclcyciLAotICAgICAgICAgIHNwcm9wX21heGNhcHR1cmVyYXRlKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3JjY2FwcywgInJhdGUiLCBHX1RZUEVfSU5ULCByYXRlLCBOVUxMKTsKLSAgICB9Ci0gIH0KLQotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLAotICAgICAgInNldCBjYXBzIG9uIHNvdXJjZTogJSIgR1NUX1BUUl9GT1JNQVQgIiAocmV0PSVkKSIsIHNyY2NhcHMsIHJldCk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSA0ODAwMDsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcmVhY2hfbWV0YWRhdGEgKEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RNZXRhICoqIG1ldGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UlRQT3B1c0RlcGF5ICpkZXBheSA9IHVzZXJfZGF0YTsKLSAgY29uc3QgR3N0TWV0YUluZm8gKmluZm8gPSAoKm1ldGEpLT5pbmZvOwotICBjb25zdCBnY2hhciAqY29uc3QgKnRhZ3MgPSBnc3RfbWV0YV9hcGlfdHlwZV9nZXRfdGFncyAoaW5mby0+YXBpKTsKLQotICBpZiAoIXRhZ3MgfHwgKGdfc3Rydl9sZW5ndGggKChnY2hhciAqKikgdGFncykgPT0gMQotICAgICAgICAgICYmIGdzdF9tZXRhX2FwaV90eXBlX2hhc190YWcgKGluZm8tPmFwaSwKLSAgICAgICAgICAgICAgZ19xdWFya19mcm9tX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAia2VlcGluZyBtZXRhZGF0YSAlcyIsIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgImRyb3BwaW5nIG1ldGFkYXRhICVzIiwgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICAgICptZXRhID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfb3B1c19kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RSVFBCdWZmZXIgcnRwYnVmID0geyBOVUxMLCB9OwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1JFQUQsICZydHBidWYpOwotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgKCZydHBidWYpOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cGJ1Zik7Ci0KLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXRidWYpOwotICAvKiBGaWx0ZXIgYXdheSBhbGwgbWV0YXMgdGhhdCBhcmUgbm90IHNlbnNpYmxlIHRvIGNvcHkgKi8KLSAgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEgKG91dGJ1ZiwgZm9yZWFjaF9tZXRhZGF0YSwgZGVwYXlsb2FkKTsKLQotICByZXR1cm4gb3V0YnVmOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9vcHVzX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwb3B1c2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1BSSU1BUlksIEdTVF9UWVBFX1JUUF9PUFVTX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cG9wdXNkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGNjODUxLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwb3B1c2RlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogT3B1cyBEZXBheWxvYWRlciBHc3QgRWxlbWVudAotICoKLSAqICAgQGF1dGhvcjogRGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhIDxkYW5pbG8uZXVAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX09QVVNfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9PUFVTX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTIHR5cGVkZWYgc3RydWN0IF9Hc3RSVFBPcHVzRGVwYXkgR3N0UlRQT3B1c0RlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUE9wdXNEZXBheUNsYXNzIEdzdFJUUE9wdXNEZXBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9PUFVTX0RFUEFZIFwKLSAgKGdzdF9ydHBfb3B1c19kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX09QVVNfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfT1BVU19ERVBBWSxHc3RSVFBPcHVzRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX09QVVNfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX09QVVNfREVQQVksR3N0UlRQT3B1c0RlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX09QVVNfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfT1BVU19ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfT1BVU19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfT1BVU19ERVBBWSkpCi0KLQotc3RydWN0IF9Hc3RSVFBPcHVzRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci0KLX07Ci0KLXN0cnVjdCBfR3N0UlRQT3B1c0RlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfb3B1c19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfb3B1c19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9SVFBfT1BVU19ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwb3B1c3BheS5jIGIvZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNmViODAuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIE9wdXMgUGF5bG9hZGVyIEdzdCBFbGVtZW50Ci0gKgotICogICBAYXV0aG9yOiBEYW5pbG8gQ2VzYXIgTGVtZXMgZGUgUGF1bGEgPGRhbmlsby5jZXNhckBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBvcHVzcGF5LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cG9wdXNwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cG9wdXNwYXlfZGVidWcpCi0KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfb3B1c19wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMKLSAgICAoImF1ZGlvL3gtb3B1cywgY2hhbm5lbHMgPSAoaW50KSBbMSwgMl0sIGNoYW5uZWwtbWFwcGluZy1mYW1pbHkgPSAoaW50KSAwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9vcHVzX3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA0ODAwMCwgIgotICAgICAgICAiZW5jb2RpbmctcGFyYW1zID0gKHN0cmluZykgXCIyXCIsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSB7IFwiT1BVU1wiLCBcIlgtR1NULU9QVVMtRFJBRlQtU1BJVFRLQS0wMFwiIH0iKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX29wdXNfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3J0cF9vcHVzX3BheV9nZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfb3B1c19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKgotICAgIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFJ0cE9QVVNQYXksIGdzdF9ydHBfb3B1c19wYXksIEdTVF9UWVBFX1JUUF9CQVNFX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9vcHVzX3BheV9jbGFzc19pbml0IChHc3RSdHBPUFVTUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0YmFzZXJ0cHBheWxvYWRfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLQotICBnc3RiYXNlcnRwcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotICBlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RiYXNlcnRwcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX29wdXNfcGF5X3NldGNhcHM7Ci0gIGdzdGJhc2VydHBwYXlsb2FkX2NsYXNzLT5nZXRfY2FwcyA9IGdzdF9ydHBfb3B1c19wYXlfZ2V0Y2FwczsKLSAgZ3N0YmFzZXJ0cHBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX29wdXNfcGF5X2hhbmRsZV9idWZmZXI7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9vcHVzX3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX29wdXNfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIE9wdXMgcGF5bG9hZGVyIiwKLSAgICAgICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlB1dHMgT3B1cyBhdWRpbyBpbiBSVFAgcGFja2V0cyIsCi0gICAgICAiRGFuaWxvIENlc2FyIExlbWVzIGRlIFBhdWxhIDxkYW5pbG8uY2VzYXJAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBvcHVzcGF5X2RlYnVnLCAicnRwb3B1c3BheSIsIDAsCi0gICAgICAiT3B1cyBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX29wdXNfcGF5X2luaXQgKEdzdFJ0cE9QVVNQYXkgKiBydHBvcHVzcGF5KQotewotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfb3B1c19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RDYXBzICpzcmNfY2FwczsKLSAgR3N0U3RydWN0dXJlICpzOwotICBjaGFyICplbmNvZGluZ19uYW1lOwotICBnaW50IGNoYW5uZWxzLCByYXRlOwotICBjb25zdCBjaGFyICpzcHJvcF9zdGVyZW8gPSBOVUxMOwotICBjaGFyICpzcHJvcF9tYXhjYXB0dXJlcmF0ZSA9IE5VTEw7Ci0KLSAgc3JjX2NhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEX1NSQ1BBRCAocGF5bG9hZCkpOwotICBpZiAoc3JjX2NhcHMpIHsKLSAgICBzcmNfY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHNyY19jYXBzKTsKLSAgICBzcmNfY2FwcyA9IGdzdF9jYXBzX3RydW5jYXRlIChzcmNfY2Fwcyk7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHNyY19jYXBzLCAwKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9zdHJpbmcgKHMsICJlbmNvZGluZy1uYW1lIiwgIk9QVVMiKTsKLSAgICBlbmNvZGluZ19uYW1lID0gZ19zdHJkdXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImVuY29kaW5nLW5hbWUiKSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY19jYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBlbmNvZGluZ19uYW1lID0gZ19zdHJkdXAgKCJYLUdTVC1PUFVTLURSQUZULVNQSVRUS0EtMDAiKTsKLSAgfQotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgImNoYW5uZWxzIiwgJmNoYW5uZWxzKSkgewotICAgIGlmIChjaGFubmVscyA+IDIpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBheWxvYWQsCi0gICAgICAgICAgIk1vcmUgdGhhbiAyIGNoYW5uZWxzIHdpdGggY2hhbm5lbC1tYXBwaW5nLWZhbWlseT0wIGlzIGludmFsaWQiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9IGVsc2UgaWYgKGNoYW5uZWxzID09IDIpIHsKLSAgICAgIHNwcm9wX3N0ZXJlbyA9ICIxIjsKLSAgICB9IGVsc2UgewotICAgICAgc3Byb3Bfc3RlcmVvID0gIjAiOwotICAgIH0KLSAgfQotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJyYXRlIiwgJnJhdGUpKSB7Ci0gICAgc3Byb3BfbWF4Y2FwdHVyZXJhdGUgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHJhdGUpOwotICB9Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJhdWRpbyIsIEZBTFNFLAotICAgICAgZW5jb2RpbmdfbmFtZSwgNDgwMDApOwotICBnX2ZyZWUgKGVuY29kaW5nX25hbWUpOwotCi0gIGlmIChzcHJvcF9tYXhjYXB0dXJlcmF0ZSAmJiBzcHJvcF9zdGVyZW8pIHsKLSAgICByZXMgPQotICAgICAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgInNwcm9wLW1heGNhcHR1cmVyYXRlIiwKLSAgICAgICAgR19UWVBFX1NUUklORywgc3Byb3BfbWF4Y2FwdHVyZXJhdGUsICJzcHJvcC1zdGVyZW8iLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICBzcHJvcF9zdGVyZW8sIE5VTEwpOwotICB9IGVsc2UgaWYgKHNwcm9wX21heGNhcHR1cmVyYXRlKSB7Ci0gICAgcmVzID0KLSAgICAgICAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsICJzcHJvcC1tYXhjYXB0dXJlcmF0ZSIsCi0gICAgICAgIEdfVFlQRV9TVFJJTkcsIHNwcm9wX21heGNhcHR1cmVyYXRlLCBOVUxMKTsKLSAgfSBlbHNlIGlmIChzcHJvcF9zdGVyZW8pIHsKLSAgICByZXMgPQotICAgICAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgInNwcm9wLXN0ZXJlbyIsCi0gICAgICAgIEdfVFlQRV9TVFJJTkcsIHNwcm9wX3N0ZXJlbywgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotICB9Ci0KLSAgZ19mcmVlIChzcHJvcF9tYXhjYXB0dXJlcmF0ZSk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0UnRwT1BVU1BheSAqcGF5OwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLX0gQ29weU1ldGFEYXRhOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcmVhY2hfbWV0YWRhdGEgKEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RNZXRhICoqIG1ldGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQ29weU1ldGFEYXRhICpkYXRhID0gdXNlcl9kYXRhOwotICBHc3RSdHBPUFVTUGF5ICpwYXkgPSBkYXRhLT5wYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gZGF0YS0+b3V0YnVmOwotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9ICgqbWV0YSktPmluZm87Ci0gIGNvbnN0IGdjaGFyICpjb25zdCAqdGFncyA9IGdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzIChpbmZvLT5hcGkpOwotCi0gIGlmICghdGFncyB8fCAoZ19zdHJ2X2xlbmd0aCAoKGdjaGFyICoqKSB0YWdzKSA9PSAxCi0gICAgICAgICAgJiYgZ3N0X21ldGFfYXBpX3R5cGVfaGFzX3RhZyAoaW5mby0+YXBpLAotICAgICAgICAgICAgICBnX3F1YXJrX2Zyb21fc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSkpKSB7Ci0gICAgR3N0TWV0YVRyYW5zZm9ybUNvcHkgY29weV9kYXRhID0geyBGQUxTRSwgMCwgLTEgfTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChwYXksICJjb3B5IG1ldGFkYXRhICVzIiwgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICAgIC8qIHNpbXBseSBjb3B5IHRoZW4gKi8KLSAgICBpbmZvLT50cmFuc2Zvcm1fZnVuYyAob3V0YnVmLCAqbWV0YSwgaW5idWYsCi0gICAgICAgIF9nc3RfbWV0YV90cmFuc2Zvcm1fY29weSwgJmNvcHlfZGF0YSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocGF5LCAibm90IGNvcHlpbmcgbWV0YWRhdGEgJXMiLCBnX3R5cGVfbmFtZSAoaW5mby0+YXBpKSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfb3B1c19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RDbG9ja1RpbWUgcHRzLCBkdHMsIGR1cmF0aW9uOwotICBDb3B5TWV0YURhdGEgZGF0YTsKLQotICBwdHMgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgZHRzID0gR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcik7Ci0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKDAsIDAsIDApOwotICBkYXRhLnBheSA9IEdTVF9SVFBfT1BVU19QQVkgKGJhc2VwYXlsb2FkKTsKLSAgZGF0YS5vdXRidWYgPSBvdXRidWY7Ci0gIGdzdF9idWZmZXJfZm9yZWFjaF9tZXRhIChidWZmZXIsIGZvcmVhY2hfbWV0YWRhdGEsICZkYXRhKTsKLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgYnVmZmVyKTsKLQotICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHB0czsKLSAgR1NUX0JVRkZFUl9EVFMgKG91dGJ1ZikgPSBkdHM7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSBkdXJhdGlvbjsKLQotICAvKiBQdXNoIG91dCAqLwotICByZXR1cm4gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoYmFzZXBheWxvYWQsIG91dGJ1Zik7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfb3B1c19wYXlfZ2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqY2FwcywgKnBlZXJjYXBzLCAqdGNhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY29uc3QgZ2NoYXIgKnN0ZXJlbzsKLQotICBpZiAocGFkID09IEdTVF9SVFBfQkFTRV9QQVlMT0FEX1NSQ1BBRCAocGF5bG9hZCkpCi0gICAgcmV0dXJuCi0gICAgICAgIEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChnc3RfcnRwX29wdXNfcGF5X3BhcmVudF9jbGFzcyktPmdldF9jYXBzCi0gICAgICAgIChwYXlsb2FkLCBwYWQsIGZpbHRlcik7Ci0KLSAgdGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFEIChwYXlsb2FkKSk7Ci0gIHBlZXJjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKEdTVF9SVFBfQkFTRV9QQVlMT0FEX1NSQ1BBRCAocGF5bG9hZCksCi0gICAgICB0Y2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmICh0Y2Fwcyk7Ci0gIGlmICghcGVlcmNhcHMpCi0gICAgcmV0dXJuCi0gICAgICAgIEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChnc3RfcnRwX29wdXNfcGF5X3BhcmVudF9jbGFzcyktPmdldF9jYXBzCi0gICAgICAgIChwYXlsb2FkLCBwYWQsIGZpbHRlcik7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChwZWVyY2FwcykpCi0gICAgcmV0dXJuIHBlZXJjYXBzOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU0lOS1BBRCAocGF5bG9hZCkpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChwZWVyY2FwcywgMCk7Ci0gIHN0ZXJlbyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInN0ZXJlbyIpOwotICBpZiAoc3RlcmVvICE9IE5VTEwpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0KLSAgICBpZiAoIXN0cmNtcCAoc3RlcmVvLCAiMSIpKSB7Ci0gICAgICBHc3RDYXBzICpjYXBzMiA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotCi0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAyLCBOVUxMKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMyLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19tZXJnZSAoY2FwcywgY2FwczIpOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcCAoc3RlcmVvLCAiMCIpKSB7Ci0gICAgICBHc3RDYXBzICpjYXBzMiA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotCi0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMyLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAyLCBOVUxMKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19tZXJnZSAoY2FwcywgY2FwczIpOwotICAgIH0KLSAgfQotICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0bXAgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoY2FwcywgZmlsdGVyLAotICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBjYXBzID0gdG1wOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgIlJldHVybmluZyBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIHJldHVybiBjYXBzOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9vcHVzX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cG9wdXNwYXkiLAotICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfUlRQX09QVVNfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwb3B1c3BheS5oIGIvZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZjQwZDguLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBvcHVzcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogT3B1cyBQYXlsb2FkZXIgR3N0IEVsZW1lbnQKLSAqCi0gKiAgIEBhdXRob3I6IERhbmlsbyBDZXNhciBMZW1lcyBkZSBQYXVsYSA8ZGFuaWxvLmV1QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9PUFVTX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX09QVVNfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9PUFVTX1BBWSBcCi0gIChnc3RfcnRwX29wdXNfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfT1BVU19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfT1BVU19QQVksR3N0UnRwT1BVU1BheSkpCi0jZGVmaW5lIEdTVF9SVFBfT1BVU19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX09QVVNfUEFZLEdzdFJ0cE9QVVNQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfT1BVU19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfT1BVU19QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX09QVVNfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9PUFVTX1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBPUFVTUGF5IEdzdFJ0cE9QVVNQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwT1BVU1BheUNsYXNzIEdzdFJ0cE9QVVNQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBPUFVTUGF5Ci17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkIHBheWxvYWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cE9QVVNQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfb3B1c19wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX29wdXNfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX09QVVNfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMTM1MjguLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBwY21hZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBaZWVzaGFuIEFsaSA8emVlbml4QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwcGNtYWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotLyogUnRwUGNtYURlcGF5IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3BjbWFfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfUENNQV9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDA7IgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCBlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJQQ01BXCIiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3BjbWFfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LWFsYXcsIGNoYW5uZWxzID0gKGludCkgMSwgcmF0ZSA9IChpbnQpIFsxLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9wY21hX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3BjbWFfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9wY21hX2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFBjbWFEZXBheSwgZ3N0X3J0cF9wY21hX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3BjbWFfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwUGNtYURlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfcGNtYV9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3BjbWFfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgUENNQSBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgUENNQSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwKLSAgICAgICJFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+LCBaZWVzaGFuIEFsaSA8emVlbml4QGdtYWlsLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX3BjbWFfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3BjbWFfZGVwYXlfc2V0Y2FwczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcGNtYV9kZXBheV9pbml0IChHc3RSdHBQY21hRGVwYXkgKiBydHBwY21hZGVwYXkpCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgKmRlcGF5bG9hZDsKLQotICBkZXBheWxvYWQgPSBHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBwY21hZGVwYXkpOwotCi0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3BjbWFfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnYm9vbGVhbiByZXQ7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gODAwMDsgICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1hbGF3IiwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsICJyYXRlIiwgR19UWVBFX0lOVCwgY2xvY2tfcmF0ZSwgTlVMTCk7Ci0gIHJldCA9IGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9wY21hX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0gIGd1aW50IGxlbjsKLQotICBtYXJrZXIgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIEdTVF9ERUJVRyAoInByb2Nlc3MgOiBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgbWFyayAlZCB0cyAldSBzZXFuICVkIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHJ0cC0+YnVmZmVyKSwgbWFya2VyLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKSwgZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAocnRwKSk7Ci0KLSAgbGVuID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuIChydHApOwotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgKHJ0cCk7Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChsZW4sIEdTVF9TRUNPTkQsIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSk7Ci0KLSAgICBpZiAobWFya2VyKSB7Ci0gICAgICAvKiBtYXJrIHN0YXJ0IG9mIHRhbGtzcHVydCB3aXRoIFJFU1lOQyAqLwotICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DKTsKLSAgICB9Ci0KLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVwYXlsb2FkKSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfcGNtYV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHBjbWFkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9QQ01BX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHBjbWFkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWEwZjQ1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwcGNtYWRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKLSAqLwotIAotI2lmbmRlZiBfX0dTVF9SVFBfUENNQV9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1BDTUFfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFBjbWFEZXBheSBHc3RSdHBQY21hRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwUGNtYURlcGF5Q2xhc3MgR3N0UnRwUGNtYURlcGF5Q2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1BDTUFfREVQQVkgXAotICAoZ3N0X3J0cF9wY21hX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfUENNQV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9QQ01BX0RFUEFZLEdzdFJ0cFBjbWFEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfUENNQV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfUENNQV9ERVBBWSxHc3RSdHBQY21hRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfUENNQV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9QQ01BX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9QQ01BX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9QQ01BX0RFUEFZKSkKLQotc3RydWN0IF9Hc3RSdHBQY21hRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFBjbWFEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3BjbWFfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3BjbWFfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfUENNQV9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwcGNtYXBheS5jIGIvZ3N0L3J0cC9nc3RydHBwY21hcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMGNhMTYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBwY21hcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gTm9raWEgQ29ycG9yYXRpb24gPGthaS52ZWhtYW5lbkBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwcGNtYXBheS5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9wY21hX3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtYWxhdywgY2hhbm5lbHM9KGludCkxLCByYXRlPShpbnQpODAwMCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfcGNtYV9wYXlfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfUENNQV9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlBDTUFcIjsgIgotICAgICAgICAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVggXSwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiUENNQVwiIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9wY21hX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi0jZGVmaW5lIGdzdF9ydHBfcGNtYV9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwUGNtYVBheSwgZ3N0X3J0cF9wY21hX3BheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9BVURJT19QQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcGNtYV9wYXlfY2xhc3NfaW5pdCAoR3N0UnRwUGNtYVBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9wY21hX3BheV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9wY21hX3BheV9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJSVFAgUENNQSBwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZC1lbmNvZGVzIFBDTUEgYXVkaW8gaW50byBhIFJUUCBwYWNrZXQiLAotICAgICAgIkVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4iKTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3BjbWFfcGF5X3NldGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3BjbWFfcGF5X2luaXQgKEdzdFJ0cFBjbWFQYXkgKiBydHBwY21hcGF5KQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VhdWRpb3BheWxvYWQgPSBHU1RfUlRQX0JBU0VfQVVESU9fUEFZTE9BRCAocnRwcGNtYXBheSk7Ci0KLSAgR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cHBjbWFwYXkpLT5wdCA9IEdTVF9SVFBfUEFZTE9BRF9QQ01BOwotICBHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwcGNtYXBheSktPmNsb2NrX3JhdGUgPSA4MDAwOwotCi0gIC8qIHRlbGwgcnRwYmFzZWF1ZGlvcGF5bG9hZCB0aGF0IHRoaXMgaXMgYSBzYW1wbGUgYmFzZWQgY29kZWMgKi8KLSAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X3NhbXBsZV9iYXNlZCAocnRwYmFzZWF1ZGlvcGF5bG9hZCk7Ci0KLSAgLyogb2N0ZXQtcGVyLXNhbXBsZSBpcyAxIGZvciBQQ00gKi8KLSAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X3NhbXBsZV9vcHRpb25zIChydHBiYXNlYXVkaW9wYXlsb2FkLCAxKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3BjbWFfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAocGF5bG9hZCwgImF1ZGlvIiwKLSAgICAgIHBheWxvYWQtPnB0ICE9IEdTVF9SVFBfUEFZTE9BRF9QQ01BLCAiUENNQSIsIDgwMDApOwotICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfcGNtYV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBwY21hcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1BDTUFfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwcGNtYXBheS5oIGIvZ3N0L3J0cC9nc3RydHBwY21hcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZGUxYmYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBwY21hcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfUlRQX1BDTUFfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfUENNQV9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlYXVkaW9wYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFBjbWFQYXkgR3N0UnRwUGNtYVBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBQY21hUGF5Q2xhc3MgR3N0UnRwUGNtYVBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9QQ01BX1BBWSBcCi0gIChnc3RfcnRwX3BjbWFfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfUENNQV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfUENNQV9QQVksR3N0UnRwUGNtYVBheSkpCi0jZGVmaW5lIEdTVF9SVFBfUENNQV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1BDTUFfUEFZLEdzdFJ0cFBjbWFQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfUENNQV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfUENNQV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1BDTUFfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9QQ01BX1BBWSkpCi0KLXN0cnVjdCBfR3N0UnRwUGNtYVBheQotewotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkIGF1ZGlvcGF5bG9hZDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwUGNtYVBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3BjbWFfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9wY21hX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9QQ01BX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODU0MzE1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwcGNtdWRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gWmVlc2hhbiBBbGkgPHplZW5peEBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgImdzdHJ0cHBjbXVkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLS8qIFJ0cFBjbXVEZXBheSBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9wY211X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX1BDTVVfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlBDTVVcIiwgY2xvY2stcmF0ZSA9IChpbnQpIFsxLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfcGNtdV9kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtbXVsYXcsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgcmF0ZSA9IChpbnQpIFsxLCBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9wY211X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3BjbXVfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9wY211X2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFBjbXVEZXBheSwgZ3N0X3J0cF9wY211X2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3BjbXVfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwUGNtdURlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfcGNtdV9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3BjbXVfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgUENNVSBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgUENNVSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwKLSAgICAgICJFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+LCBaZWVzaGFuIEFsaSA8emVlbml4QGdtYWlsLmNvbT4iKTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX3BjbXVfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3BjbXVfZGVwYXlfc2V0Y2FwczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcGNtdV9kZXBheV9pbml0IChHc3RSdHBQY211RGVwYXkgKiBydHBwY211ZGVwYXkpCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgKmRlcGF5bG9hZDsKLQotICBkZXBheWxvYWQgPSBHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBwY211ZGVwYXkpOwotCi0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3BjbXVfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnYm9vbGVhbiByZXQ7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gODAwMDsgICAgICAgICAgLyogZGVmYXVsdCAqLwotICBkZXBheWxvYWQtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1tdWxhdyIsCi0gICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCAicmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrX3JhdGUsIE5VTEwpOwotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfcGNtdV9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgZ3VpbnQgbGVuOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0KLSAgbWFya2VyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKTsKLQotICBHU1RfREVCVUcgKCJwcm9jZXNzIDogZ290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMsIG1hcmsgJWQgdHMgJXUgc2VxbiAlZCIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChydHAtPmJ1ZmZlciksIG1hcmtlciwKLSAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAgKHJ0cCksIGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKHJ0cCkpOwotCi0gIGxlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotCi0gIGlmIChvdXRidWYpIHsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAobGVuLCBHU1RfU0VDT05ELCBkZXBheWxvYWQtPmNsb2NrX3JhdGUpOwotCi0gICAgaWYgKG1hcmtlcikgewotICAgICAgLyogbWFyayBzdGFydCBvZiB0YWxrc3B1cnQgd2l0aCBSRVNZTkMgKi8KLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX1JFU1lOQyk7Ci0gICAgfQotCi0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGRlcGF5bG9hZCksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgfQotCi0gIHJldHVybiBvdXRidWY7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3BjbXVfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBwY211ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfUENNVV9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBwY211ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyY2ViOS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHBjbXVkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCi0gKi8KLSAKLSNpZm5kZWYgX19HU1RfUlRQX1BDTVVfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9QQ01VX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBQY211RGVwYXkgR3N0UnRwUGNtdURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFBjbXVEZXBheUNsYXNzIEdzdFJ0cFBjbXVEZXBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9QQ01VX0RFUEFZIFwKLSAgKGdzdF9ydHBfcGNtdV9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1BDTVVfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfUENNVV9ERVBBWSxHc3RSdHBQY211RGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX1BDTVVfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1BDTVVfREVQQVksR3N0UnRwUGNtdURlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1BDTVVfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfUENNVV9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfUENNVV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfUENNVV9ERVBBWSkpCi0KLXN0cnVjdCBfR3N0UnRwUGNtdURlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotfTsKLQotc3RydWN0IF9Hc3RSdHBQY211RGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9wY211X2RlcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9wY211X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1BDTVVfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHBjbXVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwcGNtdXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2JjZDdkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwcGNtdXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IE5va2lhIENvcnBvcmF0aW9uIDxrYWkudmVobWFuZW5Abm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgImdzdHJ0cHBjbXVwYXkuaCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfcGNtdV9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LW11bGF3LCBjaGFubmVscz0oaW50KTEsIHJhdGU9KGludCk4MDAwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9wY211X3BheV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9QQ01VX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgODAwMCwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiUENNVVwiOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWCBdLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJQQ01VXCIiKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3BjbXVfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9wY211X3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBQY211UGF5LCBnc3RfcnRwX3BjbXVfcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9wY211X3BheV9jbGFzc19pbml0IChHc3RSdHBQY211UGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3BjbXVfcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3BjbXVfcGF5X3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJUUCBQQ01VIHBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgUENNVSBhdWRpbyBpbnRvIGEgUlRQIHBhY2tldCIsCi0gICAgICAiRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPiIpOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfcGNtdV9wYXlfc2V0Y2FwczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcGNtdV9wYXlfaW5pdCAoR3N0UnRwUGNtdVBheSAqIHJ0cHBjbXVwYXkpCi17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgKnJ0cGJhc2VhdWRpb3BheWxvYWQ7Ci0KLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChydHBwY211cGF5KTsKLQotICBHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwcGNtdXBheSktPnB0ID0gR1NUX1JUUF9QQVlMT0FEX1BDTVU7Ci0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHBwY211cGF5KS0+Y2xvY2tfcmF0ZSA9IDgwMDA7Ci0KLSAgLyogdGVsbCBydHBiYXNlYXVkaW9wYXlsb2FkIHRoYXQgdGhpcyBpcyBhIHNhbXBsZSBiYXNlZCBjb2RlYyAqLwotICBnc3RfcnRwX2Jhc2VfYXVkaW9fcGF5bG9hZF9zZXRfc2FtcGxlX2Jhc2VkIChydHBiYXNlYXVkaW9wYXlsb2FkKTsKLQotICAvKiBvY3RldC1wZXItc2FtcGxlIGlzIDEgZm9yIFBDTSAqLwotICBnc3RfcnRwX2Jhc2VfYXVkaW9fcGF5bG9hZF9zZXRfc2FtcGxlX29wdGlvbnMgKHJ0cGJhc2VhdWRpb3BheWxvYWQsIDEpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfcGNtdV9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAiYXVkaW8iLAotICAgICAgcGF5bG9hZC0+cHQgIT0gR1NUX1JUUF9QQVlMT0FEX1BDTVUsICJQQ01VIiwgODAwMCk7Ci0gIHJlcyA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChwYXlsb2FkLCBOVUxMKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9wY211X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHBjbXVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfUENNVV9QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBwY211cGF5LmggYi9nc3QvcnRwL2dzdHJ0cHBjbXVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkYTgwMy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHBjbXVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAotICovCi0KLQotI2lmbmRlZiBfX0dTVF9SVFBfUENNVV9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9QQ01VX1BBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VhdWRpb3BheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwUGNtdVBheSBHc3RSdHBQY211UGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFBjbXVQYXlDbGFzcyBHc3RSdHBQY211UGF5Q2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1BDTVVfUEFZIFwKLSAgKGdzdF9ydHBfcGNtdV9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9QQ01VX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9QQ01VX1BBWSxHc3RSdHBQY211UGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9QQ01VX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfUENNVV9QQVksR3N0UnRwUGNtdVBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9QQ01VX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9QQ01VX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfUENNVV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1BDTVVfUEFZKSkKLQotc3RydWN0IF9Hc3RSdHBQY211UGF5Ci17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgYXVkaW9wYXlsb2FkOwotfTsKLQotc3RydWN0IF9Hc3RSdHBQY211UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZUF1ZGlvUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfcGNtdV9wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3BjbXVfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1BDTVVfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0ZDcxZS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHFjZWxwZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQzMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTA+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwcWNlbHBkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cHFjZWxwZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cHFjZWxwZGVwYXlfZGVidWcpCi0KLS8qIHJlZmVyZW5jZXM6Ci0gKgotICogUkZDIDI2NTggLSBSVFAgUGF5bG9hZCBGb3JtYXQgZm9yIFB1cmVWb2ljZSh0bSkgQXVkaW8KLSAqLwotI2RlZmluZSBGUkFNRV9EVVJBVElPTiAoMjAgKiBHU1RfTVNFQ09ORCkKLQotLyogUnRwUUNFTFBEZXBheSBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9xY2VscF9kZXBheV9zaW5rX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJRQ0VMUFwiOyAiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9RQ0VMUF9TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDgwMDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3FjZWxwX2RlcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8vcWNlbHAsICIgImNoYW5uZWxzID0gKGludCkgMSwiICJyYXRlID0gKGludCkgODAwMCIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9xY2VscF9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3FjZWxwX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9xY2VscF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9xY2VscF9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBRQ0VMUERlcGF5LCBnc3RfcnRwX3FjZWxwX2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3FjZWxwX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFFDRUxQRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX3FjZWxwX2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfcWNlbHBfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3FjZWxwX2RlcGF5X3NldGNhcHM7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9xY2VscF9kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3FjZWxwX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFFDRUxQIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBRQ0VMUCAoUHVyZVZvaWNlKSBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIChSRkMgMjY1OCkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cHFjZWxwZGVwYXlfZGVidWcsICJydHBxY2VscGRlcGF5IiwgMCwKLSAgICAgICJRQ0VMUCBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcWNlbHBfZGVwYXlfaW5pdCAoR3N0UnRwUUNFTFBEZXBheSAqIHJ0cHFjZWxwZGVwYXkpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3FjZWxwX2RlcGF5X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBRQ0VMUERlcGF5ICpkZXBheTsKLQotICBkZXBheSA9IEdTVF9SVFBfUUNFTFBfREVQQVkgKG9iamVjdCk7Ci0KLSAgaWYgKGRlcGF5LT5wYWNrZXRzICE9IE5VTEwpIHsKLSAgICBnX3B0cl9hcnJheV9mb3JlYWNoIChkZXBheS0+cGFja2V0cywgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKLSAgICBnX3B0cl9hcnJheV9mcmVlIChkZXBheS0+cGFja2V0cywgVFJVRSk7Ci0gICAgZGVwYXktPnBhY2tldHMgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9xY2VscF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8vcWNlbHAiLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMSwgInJhdGUiLCBHX1RZUEVfSU5ULCA4MDAwLCBOVUxMKTsKLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5bG9hZCksIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGNvbnN0IGdpbnQgZnJhbWVfc2l6ZVsxNl0gPSB7Ci0gIDEsIDQsIDgsIDE3LCAzNSwgLTgsIDAsIDAsCi0gIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAKLX07Ci0KLS8qIGdldCB0aGUgZnJhbWUgbGVuZ3RoLCAwIGlzIGludmFsaWQsIG5lZ2F0aXZlIHZhbHVlcyBhcmUgaW52YWxpZCBidXQgY2FuIGJlCi0gKiByZWNvdmVyZWQgZnJvbS4gKi8KLXN0YXRpYyBnaW50Ci1nZXRfZnJhbWVfbGVuIChHc3RSdHBRQ0VMUERlcGF5ICogZGVwYXksIGd1aW50OCBmcmFtZV90eXBlKQotewotICBpZiAoZnJhbWVfdHlwZSA+PSBHX05fRUxFTUVOVFMgKGZyYW1lX3NpemUpKQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiBmcmFtZV9zaXplW2ZyYW1lX3R5cGVdOwotfQotCi1zdGF0aWMgZ3VpbnQKLWNvdW50X3BhY2tldHMgKEdzdFJ0cFFDRUxQRGVwYXkgKiBkZXBheSwgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSkKLXsKLSAgZ3VpbnQgY291bnQgPSAwOwotCi0gIHdoaWxlIChzaXplID4gMCkgewotICAgIGdpbnQgZnJhbWVfbGVuOwotCi0gICAgZnJhbWVfbGVuID0gZ2V0X2ZyYW1lX2xlbiAoZGVwYXksIGRhdGFbMF0pOwotCi0gICAgLyogMCBpcyBpbnZhbGlkIGFuZCB3ZSB0aHJvdyBhd2F5IHRoZSByZW1haW5kZXIgb2YgdGhlIGZyYW1lcyAqLwotICAgIGlmIChmcmFtZV9sZW4gPT0gMCkKLSAgICAgIGJyZWFrOwotCi0gICAgaWYgKGZyYW1lX2xlbiA8IDApCi0gICAgICBmcmFtZV9sZW4gPSAtZnJhbWVfbGVuOwotCi0gICAgaWYgKGZyYW1lX2xlbiA+IHNpemUpCi0gICAgICBicmVhazsKLQotICAgIHNpemUgLT0gZnJhbWVfbGVuOwotICAgIGRhdGEgKz0gZnJhbWVfbGVuOwotICAgIGNvdW50Kys7Ci0gIH0KLSAgcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdm9pZAotZmx1c2hfcGFja2V0cyAoR3N0UnRwUUNFTFBEZXBheSAqIGRlcGF5KQotewotICBndWludCBpLCBzaXplOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAiZmx1c2hpbmcgcGFja2V0cyIpOwotCi0gIHNpemUgPSBkZXBheS0+cGFja2V0cy0+bGVuOwotCi0gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKm91dGJ1ZjsKLQotICAgIG91dGJ1ZiA9IGdfcHRyX2FycmF5X2luZGV4IChkZXBheS0+cGFja2V0cywgaSk7Ci0gICAgZ19wdHJfYXJyYXlfaW5kZXggKGRlcGF5LT5wYWNrZXRzLCBpKSA9IE5VTEw7Ci0KLSAgICBnc3RfcnRwX2Jhc2VfZGVwYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9ERVBBWUxPQUQgKGRlcGF5KSwgb3V0YnVmKTsKLSAgfQotCi0gIC8qIGFuZCByZXNldCBpbnRlcmxlYXZpbmcgc3RhdGUgKi8KLSAgZGVwYXktPmludGVybGVhdmVkID0gRkFMU0U7Ci0gIGRlcGF5LT5idW5kbGluZyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfcGFja2V0IChHc3RSdHBRQ0VMUERlcGF5ICogZGVwYXksIGd1aW50IExMTCwgZ3VpbnQgTk5OLCBndWludCBpbmRleCwKLSAgICBHc3RCdWZmZXIgKiBvdXRidWYpCi17Ci0gIGd1aW50IGlkeDsKLSAgR3N0QnVmZmVyICpvbGQ7Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgcG9zaXRpb24gaW4gdGhlIGFycmF5LCBub3RlIHRoYXQgaW5kZXggaXMgbmV2ZXIgMCBiZWNhdXNlIHdlCi0gICAqIHB1c2ggdGhvc2UgcGFja2V0cyBpbW1lZGlhdGVseS4gKi8KLSAgaWR4ID0gTk5OICsgKChMTEwgKyAxKSAqIChpbmRleCAtIDEpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgImFkZGluZyBwYWNrZXQgYXQgaW5kZXggJXUiLCBpZHgpOwotICAvKiBmcmVlIG9sZCBidWZmZXIgKHNob3VsZCBub3QgaGFwcGVuKSAqLwotICBvbGQgPSBnX3B0cl9hcnJheV9pbmRleCAoZGVwYXktPnBhY2tldHMsIGlkeCk7Ci0gIGlmIChvbGQpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob2xkKTsKLQotICAvKiBzdG9yZSBuZXcgYnVmZmVyICovCi0gIGdfcHRyX2FycmF5X2luZGV4IChkZXBheS0+cGFja2V0cywgaWR4KSA9IG91dGJ1ZjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfZXJhc3VyZV9idWZmZXIgKEdzdFJ0cFFDRUxQRGVwYXkgKiBkZXBheSkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMSk7Ci0gIGdzdF9idWZmZXJfbWFwIChvdXRidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtYXAuZGF0YVswXSA9IDE0OwotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWYsICZtYXApOwotCi0gIHJldHVybiBvdXRidWY7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9xY2VscF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwUUNFTFBEZXBheSAqZGVwYXk7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBndWludCBwYXlsb2FkX2xlbiwgb2Zmc2V0LCBpbmRleDsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBndWludCBMTEwsIE5OTjsKLQotICBkZXBheSA9IEdTVF9SVFBfUUNFTFBfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgaWYgKHBheWxvYWRfbGVuIDwgMikKLSAgICBnb3RvIHRvb19zbWFsbDsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAocnRwLT5idWZmZXIpOwotCi0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLQotICAvKiAgMCAxIDIgMyA0IDUgNiA3Ci0gICAqICstKy0rLSstKy0rLSstKy0rCi0gICAqIHxSUiB8IExMTCB8IE5OTiB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rCi0gICAqLwotICAvKiBSUiA9IHBheWxvYWRbMF0gPj4gNjsgKi8KLSAgTExMID0gKHBheWxvYWRbMF0gJiAweDM4KSA+PiAzOwotICBOTk4gPSAocGF5bG9hZFswXSAmIDB4MDcpOwotCi0gIHBheWxvYWRfbGVuLS07Ci0gIHBheWxvYWQrKzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgIkxMTCAldSwgTk5OICV1IiwgTExMLCBOTk4pOwotCi0gIGlmIChMTEwgPiA1KQotICAgIGdvdG8gaW52YWxpZF9sbGw7Ci0KLSAgaWYgKE5OTiA+IExMTCkKLSAgICBnb3RvIGludmFsaWRfbm5uOwotCi0gIGlmIChMTEwgIT0gMCkgewotICAgIC8qIHdlIGFyZSBpbnRlcmxlYXZlZCAqLwotICAgIGlmICghZGVwYXktPmludGVybGVhdmVkKSB7Ci0gICAgICBndWludCBzaXplOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgInN0YXJ0aW5nIGludGVybGVhdmluZyBncm91cCIpOwotICAgICAgLyogYnVuZGxpbmcgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIGluIG9uZSBpbnRlcmxlYXZlIGdyb3VwICovCi0gICAgICBkZXBheS0+YnVuZGxpbmcgPSBjb3VudF9wYWNrZXRzIChkZXBheSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksICJnb3QgYnVuZGxpbmcgb2YgJXUiLCBkZXBheS0+YnVuZGxpbmcpOwotICAgICAgLyogd2UgaGF2ZSBvbmUgYnVuZGxlIHdoZXJlIE5OTiBnb2VzIGZyb20gMCB0byBMLCB3ZSBkb24ndCBzdG9yZSB0aGUgaW5kZXgKLSAgICAgICAqIDAgZnJhbWVzLCBzbyBMKzEgcGFja2V0cy4gRWFjaCBwYWNrZXQgaGFzICdidW5kbGluZyAtIDEnIHBhY2tldHMgKi8KLSAgICAgIHNpemUgPSAoZGVwYXktPmJ1bmRsaW5nIC0gMSkgKiAoTExMICsgMSk7Ci0gICAgICAvKiBjcmVhdGUgdGhlIGFycmF5IHRvIGhvbGQgdGhlIHBhY2tldHMgKi8KLSAgICAgIGlmIChkZXBheS0+cGFja2V0cyA9PSBOVUxMKQotICAgICAgICBkZXBheS0+cGFja2V0cyA9IGdfcHRyX2FycmF5X3NpemVkX25ldyAoc2l6ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgImNyZWF0ZWQgcGFja2V0IGFycmF5IG9mIHNpemUgJXUiLCBzaXplKTsKLSAgICAgIGdfcHRyX2FycmF5X3NldF9zaXplIChkZXBheS0+cGFja2V0cywgc2l6ZSk7Ci0gICAgICAvKiB3ZSB3ZXJlIHByZXZpb3VzbHkgbm90IGludGVybGVhdmVkLCBmaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIHdlCi0gICAgICAgKiBuZWVkIHRvIGRlaW50ZXJsZWF2ZSAqLwotICAgICAgZGVwYXktPmludGVybGVhdmVkID0gVFJVRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogd2UgYXJlIG5vdCBpbnRlcmxlYXZlZCAqLwotICAgIGlmIChkZXBheS0+aW50ZXJsZWF2ZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAic3RvcHBpbmcgaW50ZXJsZWF2aW5nIik7Ci0gICAgICAvKiBmbHVzaCBwYWNrZXRzIGlmIHdlIHdlcmUgcHJldmlvdXNseSBpbnRlcmxlYXZlZCAqLwotICAgICAgZmx1c2hfcGFja2V0cyAoZGVwYXkpOwotICAgIH0KLSAgICBkZXBheS0+YnVuZGxpbmcgPSAwOwotICB9Ci0KLSAgaW5kZXggPSAwOwotICBvZmZzZXQgPSAxOwotCi0gIHdoaWxlIChwYXlsb2FkX2xlbiA+IDApIHsKLSAgICBnaW50IGZyYW1lX2xlbjsKLSAgICBnYm9vbGVhbiBkb19lcmFzdXJlOwotCi0gICAgZnJhbWVfbGVuID0gZ2V0X2ZyYW1lX2xlbiAoZGVwYXksIHBheWxvYWRbMF0pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAiZ290IGZyYW1lIGxlbiAlZCIsIGZyYW1lX2xlbik7Ci0KLSAgICBpZiAoZnJhbWVfbGVuID09IDApCi0gICAgICBnb3RvIGludmFsaWRfZnJhbWU7Ci0KLSAgICBpZiAoZnJhbWVfbGVuIDwgMCkgewotICAgICAgLyogbmVlZCB0byBhZGQgYW4gZXJhc3VyZSBmcmFtZSBidXQgd2UgY2FuIHJlY292ZXIgKi8KLSAgICAgIGZyYW1lX2xlbiA9IC1mcmFtZV9sZW47Ci0gICAgICBkb19lcmFzdXJlID0gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgZG9fZXJhc3VyZSA9IEZBTFNFOwotICAgIH0KLQotICAgIGlmIChmcmFtZV9sZW4gPiBwYXlsb2FkX2xlbikKLSAgICAgIGdvdG8gaW52YWxpZF9mcmFtZTsKLQotICAgIGlmIChkb19lcmFzdXJlKSB7Ci0gICAgICAvKiBjcmVhdGUgZXJhc3VyZSBmcmFtZSAqLwotICAgICAgb3V0YnVmID0gY3JlYXRlX2VyYXN1cmVfYnVmZmVyIChkZXBheSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGVhY2ggZnJhbWUgZ29lcyBpbnRvIGl0cyBidWZmZXIgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBvZmZzZXQsIGZyYW1lX2xlbik7Ci0gICAgfQotCi0gICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSB0aW1lc3RhbXA7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IEZSQU1FX0RVUkFUSU9OOwotCi0gICAgZ3N0X3J0cF9kcm9wX21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKGRlcGF5bG9hZCksIG91dGJ1ZiwKLSAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLQotICAgIGlmICghZGVwYXktPmludGVybGVhdmVkIHx8IGluZGV4ID09IDApIHsKLSAgICAgIC8qIG5vdCBpbnRlcmxlYXZlZCBvciBmaXJzdCBmcmFtZSBpbiBwYWNrZXQsIGp1c3QgcHVzaCAqLwotICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIG91dGJ1Zik7Ci0KLSAgICAgIGlmICh0aW1lc3RhbXAgIT0gLTEpCi0gICAgICAgIHRpbWVzdGFtcCArPSBGUkFNRV9EVVJBVElPTjsKLSAgICB9IGVsc2UgewotICAgICAgLyogcHV0IGluIGludGVybGVhdmUgYnVmZmVyICovCi0gICAgICBhZGRfcGFja2V0IChkZXBheSwgTExMLCBOTk4sIGluZGV4LCBvdXRidWYpOwotCi0gICAgICBpZiAodGltZXN0YW1wICE9IC0xKQotICAgICAgICB0aW1lc3RhbXAgKz0gKEZSQU1FX0RVUkFUSU9OICogKExMTCArIDEpKTsKLSAgICB9Ci0KLSAgICBwYXlsb2FkX2xlbiAtPSBmcmFtZV9sZW47Ci0gICAgcGF5bG9hZCArPSBmcmFtZV9sZW47Ci0gICAgb2Zmc2V0ICs9IGZyYW1lX2xlbjsKLSAgICBpbmRleCsrOwotCi0gICAgLyogZGlzY2FyZCBleGNlc3MgcGFja2V0cyAqLwotICAgIGlmIChkZXBheS0+YnVuZGxpbmcgPiAwICYmIGRlcGF5LT5idW5kbGluZyA8PSBpbmRleCkKLSAgICAgIGJyZWFrOwotICB9Ci0gIHdoaWxlIChpbmRleCA8IGRlcGF5LT5idW5kbGluZykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAiZmlsbGluZyB3aXRoIGVyYXN1cmUgYnVmZmVyIik7Ci0gICAgLyogZmlsbCByZW1haW5kZXIgd2l0aCBlcmFzdXJlIHBhY2tldHMgKi8KLSAgICBvdXRidWYgPSBjcmVhdGVfZXJhc3VyZV9idWZmZXIgKGRlcGF5KTsKLSAgICBhZGRfcGFja2V0IChkZXBheSwgTExMLCBOTk4sIGluZGV4LCBvdXRidWYpOwotICAgIGluZGV4Kys7Ci0gIH0KLSAgaWYgKGRlcGF5LT5pbnRlcmxlYXZlZCAmJiBMTEwgPT0gTk5OKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksICJpbnRlcmxlYXZlIGdyb3VwIGVuZGVkLCBmbHVzaGluZyIpOwotICAgIC8qIHdlIGhhdmUgdGhlIGNvbXBsZXRlIGludGVybGVhdmUgZ3JvdXAsIGZsdXNoICovCi0gICAgZmx1c2hfcGFja2V0cyAoZGVwYXkpOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogRVJST1JTICovCi10b29fc21hbGw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJRQ0VMUCBSVFAgcGF5bG9hZCB0b28gc21hbGwgKCVkKSIsIHBheWxvYWRfbGVuKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWludmFsaWRfbGxsOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiUUNFTFAgUlRQIGludmFsaWQgTExMIHJlY2VpdmVkICglZCkiLCBMTEwpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotaW52YWxpZF9ubm46Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJRQ0VMUCBSVFAgaW52YWxpZCBOTk4gcmVjZWl2ZWQgKCVkKSIsIE5OTikpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1pbnZhbGlkX2ZyYW1lOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiUUNFTFAgUlRQIGludmFsaWQgZnJhbWUgcmVjZWl2ZWQiKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfcWNlbHBfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBxY2VscGRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1FDRUxQX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwcWNlbHBkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZTI3NGQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBxY2VscGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMTA+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfUUNFTFBfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9RQ0VMUF9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9RQ0VMUF9ERVBBWSBcCi0gIChnc3RfcnRwX3FjZWxwX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfUUNFTFBfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfUUNFTFBfREVQQVksR3N0UnRwUUNFTFBEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfUUNFTFBfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1FDRUxQX0RFUEFZLEdzdFJ0cFFDRUxQRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfUUNFTFBfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfUUNFTFBfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1FDRUxQX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9RQ0VMUF9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBRQ0VMUERlcGF5IEdzdFJ0cFFDRUxQRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwUUNFTFBEZXBheUNsYXNzIEdzdFJ0cFFDRUxQRGVwYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBRQ0VMUERlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIGdib29sZWFuIGludGVybGVhdmVkOwotICBndWludCBidW5kbGluZzsKLSAgR1B0ckFycmF5ICpwYWNrZXRzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBRQ0VMUERlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfcWNlbHBfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3FjZWxwX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1FDRUxQX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTg2NjNhLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwcWRtZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IEVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwcWRtZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKHJ0cHFkbTJkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBydHBxZG0yZGVwYXlfZGVidWcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfcWRtMl9kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcWRtMiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfcWRtMl9kZXBheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIiAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpXCJYLVFETVwiIikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfcWRtMl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBRRE0yRGVwYXksIGdzdF9ydHBfcWRtMl9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IGhlYWRoZWFkZXJbMjBdID0gewotICAweDAsIDB4MCwgMHgwLCAweGMsIDB4NjYsIDB4NzIsIDB4NmQsIDB4NjEsCi0gIDB4NTEsIDB4NDQsIDB4NGQsIDB4MzIsIDB4MCwgMHgwLCAweDAsIDB4MjQsCi0gIDB4NTEsIDB4NDQsIDB4NDMsIDB4NDEKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfcWRtMl9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX3FkbTJfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9xZG0yX2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLWdib29sZWFuIGdzdF9ydHBfcWRtMl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZmlsdGVyLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcWRtMl9kZXBheV9jbGFzc19pbml0IChHc3RSdHBRRE0yRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9xZG0yX2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9xZG0yX2RlcGF5X3NldGNhcHM7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX3FkbTJfZGVwYXlfZmluYWxpemU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF9xZG0yX2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3FkbTJfZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9xZG0yX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFFETTIgZGVwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBRRE0yIGF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKG5vIFJGQykiLAotICAgICAgIkVkd2FyZCBIZXJ2ZXkgPGJpbGJvZWRAYmlsYm9lZC5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3FkbTJfZGVwYXlfaW5pdCAoR3N0UnRwUURNMkRlcGF5ICogcnRwcWRtMmRlcGF5KQotewotICBydHBxZG0yZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3FkbTJfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFFETTJEZXBheSAqcnRwcWRtMmRlcGF5OwotCi0gIHJ0cHFkbTJkZXBheSA9IEdTVF9SVFBfUURNMl9ERVBBWSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocnRwcWRtMmRlcGF5LT5hZGFwdGVyKTsKLSAgcnRwcWRtMmRlcGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLS8qIG9ubHkgb24gdGhlIHNpbmsgKi8KLWdib29sZWFuCi1nc3RfcnRwX3FkbTJfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGZpbHRlciwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gNDQxMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBmaWx0ZXItPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIC8qIHdpbGwgc2V0IGNhcHMgbGF0ZXIgKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWZsdXNoX2RhdGEgKEdzdFJ0cFFETTJEZXBheSAqIGRlcGF5KQotewotICBndWludCBpOwotICBndWludCBhdmFpbDsKLQotICBpZiAoKGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChkZXBheS0+YWRhcHRlcikpKQotICAgIGdzdF9hZGFwdGVyX2ZsdXNoIChkZXBheS0+YWRhcHRlciwgYXZhaWwpOwotCi0gIEdTVF9ERUJVRyAoIkZsdXNoaW5nICVkIHBhY2tldHMiLCBkZXBheS0+bmJwYWNrZXRzKTsKLQotICBmb3IgKGkgPSAwOyBkZXBheS0+cGFja2V0c1tpXTsgaSsrKSB7Ci0gICAgUURNMlBhY2tldCAqcGFjayA9IGRlcGF5LT5wYWNrZXRzW2ldOwotICAgIGd1aW50MzIgY3JjID0gMDsKLSAgICBpbnQgaSA9IDA7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgZ3VpbnQ4ICpkYXRhOwotCi0gICAgLyogQ1JDIGlzIHRoZSBzdW0gb2YgZXZlcnl0aGluZyAoaW5jbHVkaW5nIGZpcnN0IGJ5dGVzKSAqLwotCi0gICAgZGF0YSA9IHBhY2stPmRhdGE7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoZGF0YSA9PSBOVUxMKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogSWYgdGhlIHBhY2tldCBzaXplIGlzIGJpZ2dlciB0aGFuIDB4ZmYsIHdlIG5lZWQgMiBieXRlcyB0byBzdG9yZSB0aGUgc2l6ZSAqLwotICAgIGlmIChkZXBheS0+cGFja2V0c2l6ZSA+IDB4ZmYpIHsKLSAgICAgIC8qIEV4cGFuZGVkIHNpemUgMHgwMiB8IDB4ODAgKi8KLSAgICAgIGRhdGFbMF0gPSAweDgyOwotICAgICAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoZGF0YSArIDEsIGRlcGF5LT5wYWNrZXRzaXplIC0gMyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRhdGFbMF0gPSAweDI7Ci0gICAgICBkYXRhWzFdID0gZGVwYXktPnBhY2tldHNpemUgLSAyOwotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBDUkMgKi8KLSAgICBmb3IgKDsgaSA8IGRlcGF5LT5wYWNrZXRzaXplOyBpKyspCi0gICAgICBjcmMgKz0gZGF0YVtpXTsKLQotICAgIEdTVF9ERUJVRyAoIkNSQyBpcyAweCV4IiwgY3JjKTsKLQotICAgIC8qIFdyaXRlIENSQyAqLwotICAgIGlmIChkZXBheS0+cGFja2V0c2l6ZSA+IDB4ZmYpCi0gICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhICsgMywgY3JjKTsKLSAgICBlbHNlCi0gICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkYXRhICsgMiwgY3JjKTsKLQotICAgIEdTVF9NRU1EVU1QICgiRXh0cmFjdGVkIHBhY2tldCIsIGRhdGEsIGRlcGF5LT5wYWNrZXRzaXplKTsKLQotICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmLAotICAgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkYXRhLCBkZXBheS0+cGFja2V0c2l6ZSwgMCwKLSAgICAgICAgICAgIGRlcGF5LT5wYWNrZXRzaXplLCBkYXRhLCBnX2ZyZWUpKTsKLQotICAgIGdzdF9hZGFwdGVyX3B1c2ggKGRlcGF5LT5hZGFwdGVyLCBidWYpOwotCi0gICAgcGFjay0+ZGF0YSA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWFkZF9wYWNrZXQgKEdzdFJ0cFFETTJEZXBheSAqIGRlcGF5LCBndWludDMyIHBpZCwgZ3VpbnQzMiBsZW4sIGd1aW50OCAqIGRhdGEpCi17Ci0gIFFETTJQYWNrZXQgKnBhY2tldDsKLQotICBpZiAoR19VTkxJS0VMWSAoIWRlcGF5LT5jb25maWd1cmVkKSkKLSAgICByZXR1cm47Ci0KLSAgR1NUX0RFQlVHICgicGlkOiVkLCBsZW46JWQsIGRhdGE6JXAiLCBwaWQsIGxlbiwgZGF0YSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGRlcGF5LT5wYWNrZXRzW3BpZF0gPT0gTlVMTCkpIHsKLSAgICBkZXBheS0+cGFja2V0c1twaWRdID0gZ19tYWxsb2MwIChzaXplb2YgKFFETTJQYWNrZXQpKTsKLSAgICBkZXBheS0+bmJwYWNrZXRzID0gTUFYIChkZXBheS0+bmJwYWNrZXRzLCBwaWQgKyAxKTsKLSAgfQotICBwYWNrZXQgPSBkZXBheS0+cGFja2V0c1twaWRdOwotCi0gIEdTVF9ERUJVRyAoInBhY2tldDolcCIsIHBhY2tldCk7Ci0gIEdTVF9ERUJVRyAoInBhY2tldC0+ZGF0YTolcCIsIHBhY2tldC0+ZGF0YSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHBhY2tldC0+ZGF0YSA9PSBOVUxMKSkgewotICAgIHBhY2tldC0+ZGF0YSA9IGdfbWFsbG9jMCAoZGVwYXktPnBhY2tldHNpemUpOwotICAgIC8qIFdlIGxlYXZlIHNwYWNlIGZvciB0aGUgaGVhZGVyL2NyYyAqLwotICAgIGlmIChkZXBheS0+cGFja2V0c2l6ZSA+IDB4ZmYpCi0gICAgICBwYWNrZXQtPm9mZnMgPSA1OwotICAgIGVsc2UKLSAgICAgIHBhY2tldC0+b2ZmcyA9IDQ7Ci0gIH0KLQotICAvKiBGaW5hbGx5IGNvcHkgdGhlIGRhdGEgb3ZlciAqLwotICBtZW1jcHkgKHBhY2tldC0+ZGF0YSArIHBhY2tldC0+b2ZmcywgZGF0YSwgbGVuKTsKLSAgcGFja2V0LT5vZmZzICs9IGxlbjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX3FkbTJfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBRRE0yRGVwYXkgKnJ0cHFkbTJkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotICBndWludDE2IHNlcTsKLQotICBydHBxZG0yZGVwYXkgPSBHU1RfUlRQX1FETTJfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgewotICAgIGdpbnQgcGF5bG9hZF9sZW47Ci0gICAgZ3VpbnQ4ICpwYXlsb2FkOwotICAgIGd1aW50IGF2YWlsOwotICAgIGd1aW50IHBvcyA9IDA7Ci0KLSAgICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgICBpZiAocGF5bG9hZF9sZW4gPCAzKQotICAgICAgZ290byBiYWRfcGFja2V0OwotCi0gICAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICAgIHNlcSA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKHJ0cCk7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHNlcSAhPSBydHBxZG0yZGVwYXktPm5leHRzZXEpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJHQVAgaW4gc2VxdWVuY2UgbnVtYmVyLCBSZXNldHRpbmcgZGF0YSAhIik7Ci0gICAgICAvKiBGbHVzaCBwcmV2aW91cyBkYXRhICovCi0gICAgICBmbHVzaF9kYXRhIChydHBxZG0yZGVwYXkpOwotICAgICAgLyogQW5kIHN0b3JlIG5ldyB0aW1lc3RhbXAgKi8KLSAgICAgIHJ0cHFkbTJkZXBheS0+cHRpbWVzdGFtcCA9IHJ0cHFkbTJkZXBheS0+dGltZXN0YW1wOwotICAgICAgcnRwcWRtMmRlcGF5LT50aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAocnRwLT5idWZmZXIpOwotICAgICAgLyogQW5kIHRoYXQgcHJldmlvdXMgZGF0YSB3aWxsIGJlIHB1c2hlZCBhdCB0aGUgYm90dG9tICovCi0gICAgfQotICAgIHJ0cHFkbTJkZXBheS0+bmV4dHNlcSA9IHNlcSArIDE7Ci0KLSAgICBHU1RfREVCVUcgKCJQYXlsb2FkIHNpemUgJWQgMHgleCBzZXF1ZW5jZTolZCIsIHBheWxvYWRfbGVuLCBwYXlsb2FkX2xlbiwKLSAgICAgICAgc2VxKTsKLQotICAgIEdTVF9NRU1EVU1QICgiSW5jb21pbmcgcGF5bG9hZCIsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKLQotICAgIHdoaWxlIChwb3MgPCBwYXlsb2FkX2xlbikgewotICAgICAgc3dpdGNoIChwYXlsb2FkW3Bvc10pIHsKLSAgICAgICAgY2FzZSAweDgwOnsKLSAgICAgICAgICBHU1RfREVCVUcgKCJVbnJlY29nbml6ZWQgMHg4MCBtYXJrZXIsIHNraXBwaW5nIDEyIGJ5dGVzIik7Ci0gICAgICAgICAgcG9zICs9IDEyOwotICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHhmZjoKLSAgICAgICAgICAvKiBIRUFERVJTICovCi0gICAgICAgICAgR1NUX0RFQlVHICgiSGVhZGVycyIpOwotICAgICAgICAgIC8qIFN0b3JlIHRoZSBpbmNvbWluZyB0aW1lc3RhbXAgKi8KLSAgICAgICAgICBydHBxZG0yZGVwYXktPnB0aW1lc3RhbXAgPSBydHBxZG0yZGVwYXktPnRpbWVzdGFtcDsKLSAgICAgICAgICBydHBxZG0yZGVwYXktPnRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChydHAtPmJ1ZmZlcik7Ci0gICAgICAgICAgLyogZmx1c2ggdGhlIGludGVybmFsIGRhdGEgaWYgbmVlZGVkICovCi0gICAgICAgICAgZmx1c2hfZGF0YSAocnRwcWRtMmRlcGF5KTsKLSAgICAgICAgICBpZiAoR19VTkxJS0VMWSAoIXJ0cHFkbTJkZXBheS0+Y29uZmlndXJlZCkpIHsKLSAgICAgICAgICAgIGd1aW50OCAqb3VyZGF0YTsKLSAgICAgICAgICAgIEdzdEJ1ZmZlciAqY29kZWNkYXRhOwotICAgICAgICAgICAgR3N0TWFwSW5mbyBjbWFwOwotICAgICAgICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgICAgICAgLyogRmlyc3QgYnl0ZXMgYXJlIHVua25vd24gKi8KLSAgICAgICAgICAgIEdTVF9NRU1EVU1QICgiSGVhZGVyIiwgcGF5bG9hZCArIHBvcywgMzIpOwotICAgICAgICAgICAgb3VyZGF0YSA9IHBheWxvYWQgKyBwb3MgKyAxMDsKLSAgICAgICAgICAgIHBvcyArPSAxMDsKLSAgICAgICAgICAgIHJ0cHFkbTJkZXBheS0+Y2hhbm5zID0gR1NUX1JFQURfVUlOVDMyX0JFIChwYXlsb2FkICsgcG9zICsgNCk7Ci0gICAgICAgICAgICBydHBxZG0yZGVwYXktPnNhbXBsZXJhdGUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQgKyBwb3MgKyA4KTsKLSAgICAgICAgICAgIHJ0cHFkbTJkZXBheS0+Yml0cmF0ZSA9IEdTVF9SRUFEX1VJTlQzMl9CRSAocGF5bG9hZCArIHBvcyArIDEyKTsKLSAgICAgICAgICAgIHJ0cHFkbTJkZXBheS0+YmxvY2tzaXplID0gR1NUX1JFQURfVUlOVDMyX0JFIChwYXlsb2FkICsgcG9zICsgMTYpOwotICAgICAgICAgICAgcnRwcWRtMmRlcGF5LT5mcmFtZXNpemUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQgKyBwb3MgKyAyMCk7Ci0gICAgICAgICAgICBydHBxZG0yZGVwYXktPnBhY2tldHNpemUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQgKyBwb3MgKyAyNCk7Ci0gICAgICAgICAgICAvKiAxNiBiaXQgZW1wdHkgYmxvY2sgKDB4MDIgMHgwMCkgKi8KLSAgICAgICAgICAgIHBvcyArPSAzMDsKLSAgICAgICAgICAgIEdTVF9ERUJVRwotICAgICAgICAgICAgICAgICgiY2hhbm5zOiVkLCBzYW1wbGVyYXRlOiVkLCBiaXRyYXRlOiVkLCBibG9ja3NpemU6JWQsIGZyYW1lc2l6ZTolZCwgcGFja2V0c2l6ZTolZCIsCi0gICAgICAgICAgICAgICAgcnRwcWRtMmRlcGF5LT5jaGFubnMsIHJ0cHFkbTJkZXBheS0+c2FtcGxlcmF0ZSwKLSAgICAgICAgICAgICAgICBydHBxZG0yZGVwYXktPmJpdHJhdGUsIHJ0cHFkbTJkZXBheS0+YmxvY2tzaXplLAotICAgICAgICAgICAgICAgIHJ0cHFkbTJkZXBheS0+ZnJhbWVzaXplLCBydHBxZG0yZGVwYXktPnBhY2tldHNpemUpOwotCi0gICAgICAgICAgICAvKiBDYXBzICovCi0gICAgICAgICAgICBjb2RlY2RhdGEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQ4KTsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfbWFwIChjb2RlY2RhdGEsICZjbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICAgICAgICAgIG1lbWNweSAoY21hcC5kYXRhLCBoZWFkaGVhZGVyLCAyMCk7Ci0gICAgICAgICAgICBtZW1jcHkgKGNtYXAuZGF0YSArIDIwLCBvdXJkYXRhLCAyOCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChjb2RlY2RhdGEsICZjbWFwKTsKLQotICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXFkbTIiLAotICAgICAgICAgICAgICAgICJzYW1wbGVzaXplIiwgR19UWVBFX0lOVCwgMTYsCi0gICAgICAgICAgICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCBydHBxZG0yZGVwYXktPnNhbXBsZXJhdGUsCi0gICAgICAgICAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgcnRwcWRtMmRlcGF5LT5jaGFubnMsCi0gICAgICAgICAgICAgICAgImNvZGVjX2RhdGEiLCBHU1RfVFlQRV9CVUZGRVIsIGNvZGVjZGF0YSwgTlVMTCk7Ci0gICAgICAgICAgICBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgY2Fwcyk7Ci0gICAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICAgICAgICBydHBxZG0yZGVwYXktPmNvbmZpZ3VyZWQgPSBUUlVFOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHU1RfREVCVUcgKCJBbHJlYWR5IGNvbmZpZ3VyZWQsIHNraXBwaW5nIGhlYWRlcnMiKTsKLSAgICAgICAgICAgIHBvcyArPSA0MDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ewotICAgICAgICAgIC8qIFNodWZmbGVkIHBhY2tldCBjb250ZW50cyAqLwotICAgICAgICAgIGd1aW50IHBhY2tldGlkID0gcGF5bG9hZFtwb3MrK107Ci0gICAgICAgICAgZ3VpbnQgcGFja2V0dHlwZSA9IHBheWxvYWRbcG9zKytdOwotICAgICAgICAgIGd1aW50IHBhY2tsZW4gPSBwYXlsb2FkW3BvcysrXTsKLSAgICAgICAgICBndWludCBoc2l6ZSA9IDI7Ci0KLSAgICAgICAgICBHU1RfREVCVUcgKCJQYWNrZXQgaWQ6JWQsIHR5cGU6MHgleCwgbGVuOiVkIiwKLSAgICAgICAgICAgICAgcGFja2V0aWQsIHBhY2tldHR5cGUsIHBhY2tsZW4pOwotCi0gICAgICAgICAgLyogUGFja2V0cyBiaWdnZXIgdGhhbiAweGZmIGJ5dGVzIGhhdmUgYSB0eXBlIHdpdGggdGhlIGhpZ2ggYml0IHNldCAqLwotICAgICAgICAgIGlmIChHX1VOTElLRUxZIChwYWNrZXR0eXBlICYgMHg4MCkpIHsKLSAgICAgICAgICAgIHBhY2tldHR5cGUgJj0gMHg3ZjsKLSAgICAgICAgICAgIHBhY2tsZW4gPDw9IDg7Ci0gICAgICAgICAgICBwYWNrbGVuIHw9IHBheWxvYWRbcG9zKytdOwotICAgICAgICAgICAgaHNpemUgPSAzOwotICAgICAgICAgICAgR1NUX0RFQlVHICgiUGFja2V0IGlkOiVkLCB0eXBlOjB4JXgsIGxlbjolZCIsCi0gICAgICAgICAgICAgICAgcGFja2V0aWQsIHBhY2tldHR5cGUsIHBhY2tsZW4pOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChwYWNrZXR0eXBlID4gMHg3ZikgewotICAgICAgICAgICAgR1NUX0VSUk9SICgiSE9VU1RPTiBXRSBIQVZFIEEgUFJPQkxFTSAhISEhIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGFkZF9wYWNrZXQgKHJ0cHFkbTJkZXBheSwgcGFja2V0aWQsIHBhY2tsZW4gKyBoc2l6ZSwKLSAgICAgICAgICAgICAgcGF5bG9hZCArIHBvcyAtIGhzaXplKTsKLSAgICAgICAgICBwb3MgKz0gcGFja2xlbjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEdTVF9ERUJVRyAoImZpbmFsIHBvcyAlZCIsIHBvcyk7Ci0KLSAgICBhdmFpbCA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAocnRwcWRtMmRlcGF5LT5hZGFwdGVyKTsKLSAgICBpZiAoR19VTkxJS0VMWSAoYXZhaWwpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJQdXNoaW5nIG91dCAlZCBieXRlcyBvZiBjb2xsZWN0ZWQgZGF0YSIsIGF2YWlsKTsKLSAgICAgIG91dGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHBxZG0yZGVwYXktPmFkYXB0ZXIsIGF2YWlsKTsKLSAgICAgIEdTVF9CVUZGRVJfUFRTIChvdXRidWYpID0gcnRwcWRtMmRlcGF5LT5wdGltZXN0YW1wOwotICAgICAgR1NUX0RFQlVHICgiT3V0Z29pbmcgYnVmZmVyIHRpbWVzdGFtcCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocnRwcWRtMmRlcGF5LT5wdGltZXN0YW1wKSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLWJhZF9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHBxZG0yZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiUGFja2V0IHdhcyB0b28gc2hvcnQiKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX3FkbTJfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSdHBRRE0yRGVwYXkgKnJ0cHFkbTJkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cHFkbTJkZXBheSA9IEdTVF9SVFBfUURNMl9ERVBBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cHFkbTJkZXBheS0+YWRhcHRlcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9xZG0yX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHBxZG0yZGVwYXlfZGVidWcsICJydHBxZG0yZGVwYXkiLCAwLAotICAgICAgIlJUUCBRRE0yIGRlcGF5bG9hZGVyIik7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBxZG0yZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfUURNMl9ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHFkbWRlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNmIyYjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBxZG1kZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBFZHdhcmQgSGVydmV5IDxiaWxib2VkQGJpbGJvZWQuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1FETTJfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9RRE0yX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9RRE0yX0RFUEFZIFwKLSAgKGdzdF9ydHBfcWRtMl9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1FETTJfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfUURNMl9ERVBBWSxHc3RSdHBRRE0yRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX1FETTJfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1FETTJfREVQQVksR3N0UnRwUURNMkRlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1FETTJfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfUURNMl9ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfUURNMl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfUURNMl9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBRRE0yRGVwYXkgR3N0UnRwUURNMkRlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFFETTJEZXBheUNsYXNzIEdzdFJ0cFFETTJEZXBheUNsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfUURNMlBhY2tldCB7Ci0gIGd1aW50OCogZGF0YTsKLSAgZ3VpbnQgb2ZmczsJCS8qIFN0YXJ0cyBhdCA0IHRvIGdpdmUgcm9vbSBmb3IgdGhlIHByZWZpeCAqLwotfSBRRE0yUGFja2V0OwotCi0jZGVmaW5lIE1BWF9TQ1JBTUJMRURfUEFDS0VUUyA2NAotCi1zdHJ1Y3QgX0dzdFJ0cFFETTJEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIGRlcGF5bG9hZDsKLQotICBHc3RBZGFwdGVyICphZGFwdGVyOwotCi0gIGd1aW50MTYgbmV4dHNlcTsKLSAgZ2Jvb2xlYW4gY29uZmlndXJlZDsKLQotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOyAvKiBUaW1lc3RhbXAgb2YgY3VycmVudCBpbmNvbWluZyBkYXRhICovCi0gIEdzdENsb2NrVGltZSBwdGltZXN0YW1wOyAvKiBUaW1lc3RhbXAgb2YgZGF0YSBzdG9yZWQgaW4gdGhlIGFkYXB0ZXIgKi8KLQotICBndWludDMyIGNoYW5uczsKLSAgZ3VpbnQzMiBzYW1wbGVyYXRlOwotICBndWludDMyIGJpdHJhdGU7Ci0gIGd1aW50MzIgYmxvY2tzaXplOwotICBndWludDMyIGZyYW1lc2l6ZTsKLSAgZ3VpbnQzMiBwYWNrZXRzaXplOwotCi0gIGd1aW50IG5icGFja2V0czsJLyogTnVtYmVyIG9mIHBhY2tldHMgdG8gdW5zY3JhbWJsZSAqLwotCi0gIFFETTJQYWNrZXQgKnBhY2tldHNbTUFYX1NDUkFNQkxFRF9QQUNLRVRTXTsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwUURNMkRlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfcWRtMl9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfcWRtMl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9RRE0yX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzYmNkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBzYmNkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTNiNDAzLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBACi0vKgotICogR1N0cmVhbWVyIFJUUCBTQkMgZGVwYXlsb2FkZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgIENvbGxhYm9yYSBMdGQuCi0gKiAgIEBhdXRob3I6IEFydW4gUmFnaGF2YW4gPGFydW4ucmFnaGF2YW5AY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwc2JjZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHBzYmNkZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwc2JjZGVwYXlfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3NiY19kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1zYmMsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSB7IDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0sICIKLSAgICAgICAgIm1vZGUgPSAoc3RyaW5nKSB7IG1vbm8sIGR1YWwsIHN0ZXJlbywgam9pbnQgfSwgIgotICAgICAgICAiYmxvY2tzID0gKGludCkgeyA0LCA4LCAxMiwgMTYgfSwgIgotICAgICAgICAic3ViYmFuZHMgPSAoaW50KSB7IDQsIDggfSwgIgotICAgICAgICAiYWxsb2NhdGlvbi1tZXRob2QgPSAoc3RyaW5nKSB7IHNuciwgbG91ZG5lc3MgfSwgIgotICAgICAgICAiYml0cG9vbCA9IChpbnQpIFsgMiwgNjQgXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfc2JjX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBhdWRpbywiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIHsgMTYwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSwiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgU0JDIikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfc2JjX2RlcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFNiY0RlcGF5LCBnc3RfcnRwX3NiY19kZXBheSwgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9zYmNfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9zYmNfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGJhc2UsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF9zYmNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGJhc2UsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2JjX2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFNiY0RlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RiYXNlcnRwZGVwYXlsb2FkX2NsYXNzID0KLSAgICAgIEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfc2JjX2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdGJhc2VydHBkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9zYmNfZGVwYXlfc2V0Y2FwczsKLSAgZ3N0YmFzZXJ0cGRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9zYmNfZGVwYXlfcHJvY2VzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3NiY19kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3NiY19kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwc2JjZGVwYXlfZGVidWcsICJydHBzYmNkZXBheSIsIDAsCi0gICAgICAiU0JDIEF1ZGlvIFJUUCBEZXBheWxvYWRlciIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFNCQyBhdWRpbyBkZXBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvRGVwYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIkV4dHJhY3RzIFNCQyBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwKLSAgICAgICJBcnVuIFJhZ2hhdmFuIDxhcnVuLnJhZ2hhdmFuQGNvbGxhYm9yYS5jby51az4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2JjX2RlcGF5X2luaXQgKEdzdFJ0cFNiY0RlcGF5ICogcnRwc2JjZGVwYXkpCi17Ci0gIHJ0cHNiY2RlcGF5LT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zYmNfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFNiY0RlcGF5ICpkZXBheSA9IEdTVF9SVFBfU0JDX0RFUEFZIChvYmplY3QpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGRlcGF5LT5hZGFwdGVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLS8qIEZJWE1FOiBUaGlzIGR1cGxpY2F0ZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHJ0cHNiY3BheSwgYnV0IHRoZXJlIGlzbid0IGEKLSAqIHNpbXBsZSB3YXkgdG8gY29uc29saWRhdGUgdGhlIHR3by4gVGhpcyBpcyBiZXN0IGRvbmUgYnkgbW92aW5nIHRoZSBmdW5jdGlvbgotICogdG8gdGhlIGNvZGVjLXV0aWxzIGxpYnJhcnkgaW4gZ3N0LXBsdWdpbnMtYmFzZSB3aGVuIHRoZXNlIGVsZW1lbnRzIG1vdmUgdG8KLSAqIEdTdHJlYW1lci4gKi8KLXN0YXRpYyBpbnQKLWdzdF9ydHBfc2JjX2RlcGF5X2dldF9wYXJhbXMgKEdzdFJ0cFNiY0RlcGF5ICogZGVwYXksIGNvbnN0IGd1aW50OCAqIGRhdGEsCi0gICAgZ2ludCBzaXplLCBpbnQgKmZyYW1lbGVuLCBpbnQgKnNhbXBsZXMpCi17Ci0gIGludCBibG9ja3MsIGNoYW5uZWxfbW9kZSwgY2hhbm5lbHMsIHN1YmJhbmRzLCBiaXRwb29sOwotICBpbnQgbGVuZ3RoOwotCi0gIGlmIChzaXplIDwgMykgewotICAgIC8qIE5vdCBlbm91Z2ggZGF0YSBmb3IgdGhlIGhlYWRlciAqLwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIFNhbml0eSBjaGVjayAqLwotICBpZiAoZGF0YVswXSAhPSAweDljKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZXBheSwgIkJhZCBwYWNrZXQ6IGNvdWxkbid0IGZpbmQgc3luY3dvcmQiKTsKLSAgICByZXR1cm4gLTI7Ci0gIH0KLQotICBibG9ja3MgPSAoZGF0YVsxXSA+PiA0KSAmIDB4MzsKLSAgYmxvY2tzID0gKGJsb2NrcyArIDEpICogNDsKLSAgY2hhbm5lbF9tb2RlID0gKGRhdGFbMV0gPj4gMikgJiAweDM7Ci0gIGNoYW5uZWxzID0gY2hhbm5lbF9tb2RlID8gMiA6IDE7Ci0gIHN1YmJhbmRzID0gKGRhdGFbMV0gJiAweDEpOwotICBzdWJiYW5kcyA9IChzdWJiYW5kcyArIDEpICogNDsKLSAgYml0cG9vbCA9IGRhdGFbMl07Ci0KLSAgbGVuZ3RoID0gNCArICgoNCAqIHN1YmJhbmRzICogY2hhbm5lbHMpIC8gOCk7Ci0KLSAgaWYgKGNoYW5uZWxfbW9kZSA9PSAwIHx8IGNoYW5uZWxfbW9kZSA9PSAxKSB7Ci0gICAgLyogTW9ubyB8fCBEdWFsIGNoYW5uZWwgKi8KLSAgICBsZW5ndGggKz0gKChibG9ja3MgKiBjaGFubmVscyAqIGJpdHBvb2wpCi0gICAgICAgICsgNCAvKiByb3VuZCB1cCAqLyApIC8gODsKLSAgfSBlbHNlIHsKLSAgICAvKiBTdGVyZW8gfHwgSm9pbnQgc3RlcmVvICovCi0gICAgZ2Jvb2xlYW4gam9pbnQgPSAoY2hhbm5lbF9tb2RlID09IDMpOwotCi0gICAgbGVuZ3RoICs9ICgoam9pbnQgKiBzdWJiYW5kcykgKyAoYmxvY2tzICogYml0cG9vbCkKLSAgICAgICAgKyA0IC8qIHJvdW5kIHVwICovICkgLyA4OwotICB9Ci0KLSAgKmZyYW1lbGVuID0gbGVuZ3RoOwotICAqc2FtcGxlcyA9IGJsb2NrcyAqIHN1YmJhbmRzOwotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc2JjX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBiYXNlLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwU2JjRGVwYXkgKmRlcGF5ID0gR1NUX1JUUF9TQkNfREVQQVkgKGJhc2UpOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2FwcyAqb3V0Y2FwcywgKm9sZGNhcHM7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmZGVwYXktPnJhdGUpKQotICAgIGdvdG8gYmFkX2NhcHM7Ci0KLSAgb3V0Y2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXNiYyIsICJyYXRlIiwgR19UWVBFX0lOVCwKLSAgICAgIGRlcGF5LT5yYXRlLCBOVUxMKTsKLQotICBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoYmFzZSksIG91dGNhcHMpOwotCi0gIG9sZGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU0lOS1BBRCAoYmFzZSkpOwotICBpZiAob2xkY2FwcyAmJiAhZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAob2xkY2FwcywgY2FwcykpIHsKLSAgICAvKiBDYXBzIGhhdmUgY2hhbmdlZCwgZmx1c2ggb2xkIGRhdGEgKi8KLSAgICBnc3RfYWRhcHRlcl9jbGVhciAoZGVwYXktPmFkYXB0ZXIpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKG91dGNhcHMpOwotICBpZiAob2xkY2FwcykKLSAgICAgZ3N0X2NhcHNfdW5yZWYgKG9sZGNhcHMpOwotCi0gIHJldHVybiBUUlVFOwotCi1iYWRfY2FwczoKLSAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZXBheSwgIkNhbid0IHN1cHBvcnQgdGhlIGNhcHMgd2UgZ290OiAlIgotICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9zYmNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGJhc2UsIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwU2JjRGVwYXkgKmRlcGF5ID0gR1NUX1JUUF9TQkNfREVQQVkgKGJhc2UpOwotICBHc3RCdWZmZXIgKmRhdGEgPSBOVUxMOwotCi0gIGdib29sZWFuIGZyYWdtZW50LCBzdGFydCwgbGFzdDsKLSAgZ3VpbnQ4IG5mcmFtZXM7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQgcGF5bG9hZF9sZW47Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGRlcGF5LCAiR290ICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAocnRwLT5idWZmZXIpKTsKLQotICBpZiAoZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKSkgewotICAgIC8qIE1hcmtlciBpc24ndCBzdXBwb3NlZCB0byBiZSBzZXQgKi8KLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5LCAiTWFya2VyIGJpdCB3YXMgc2V0Iik7Ci0gICAgZ290byBiYWRfcGFja2V0OwotICB9Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBmcmFnbWVudCA9IHBheWxvYWRbMF0gJiAweDgwOwotICBzdGFydCA9IHBheWxvYWRbMF0gJiAweDQwOwotICBsYXN0ID0gcGF5bG9hZFswXSAmIDB4MjA7Ci0gIG5mcmFtZXMgPSBwYXlsb2FkWzBdICYgMHgwZjsKLQotICBwYXlsb2FkICs9IDE7Ci0gIHBheWxvYWRfbGVuIC09IDE7Ci0KLSAgZGF0YSA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCAxLCAtMSk7Ci0KLSAgaWYgKGZyYWdtZW50KSB7Ci0gICAgLyogR290IGEgcGFja2V0IHdpdGggYSBmcmFnbWVudCAqLwotICAgIEdTVF9MT0dfT0JKRUNUIChkZXBheSwgIkdvdCBmcmFnbWVudCIpOwotCi0gICAgaWYgKHN0YXJ0ICYmIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVwYXktPmFkYXB0ZXIpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5LCAiTWlzc2luZyBsYXN0IGZyYWdtZW50Iik7Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAoZGVwYXktPmFkYXB0ZXIpOwotCi0gICAgfSBlbHNlIGlmICghc3RhcnQgJiYgIWdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVwYXktPmFkYXB0ZXIpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5LCAiTWlzc2luZyBzdGFydCBmcmFnbWVudCIpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZGF0YSk7Ci0gICAgICBkYXRhID0gTlVMTDsKLSAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGdzdF9hZGFwdGVyX3B1c2ggKGRlcGF5LT5hZGFwdGVyLCBkYXRhKTsKLQotICAgIGlmIChsYXN0KSB7Ci0gICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKGRlcGF5LT5hZGFwdGVyLAotICAgICAgICAgIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoZGVwYXktPmFkYXB0ZXIpKTsKLSAgICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheSksIGRhdGEsCi0gICAgICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgICB9IGVsc2UKLSAgICAgIGRhdGEgPSBOVUxMOwotCi0gIH0gZWxzZSB7Ci0gICAgLyogIWZyYWdtZW50ICovCi0gICAgZ2ludCBmcmFtZWxlbiwgc2FtcGxlczsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChkZXBheSwgIkdvdCAlZCBmcmFtZXMiLCBuZnJhbWVzKTsKLQotICAgIGlmIChnc3RfcnRwX3NiY19kZXBheV9nZXRfcGFyYW1zIChkZXBheSwgcGF5bG9hZCwKLSAgICAgICAgICAgIHBheWxvYWRfbGVuLCAmZnJhbWVsZW4sICZzYW1wbGVzKSA8IDApIHsKLSAgICAgIGdzdF9hZGFwdGVyX2NsZWFyIChkZXBheS0+YWRhcHRlcik7Ci0gICAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gICAgfQotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGRlcGF5LCAiR290IHBheWxvYWQgb2YgJWQiLCBwYXlsb2FkX2xlbik7Ci0KLSAgICBpZiAobmZyYW1lcyAqIGZyYW1lbGVuID4gKGdpbnQpIHBheWxvYWRfbGVuKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5LCAiU2hvcnQgcGFja2V0Iik7Ci0gICAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0gICAgfSBlbHNlIGlmIChuZnJhbWVzICogZnJhbWVsZW4gPCAoZ2ludCkgcGF5bG9hZF9sZW4pIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXksICJKdW5rIGF0IGVuZCBvZiBwYWNrZXQiKTsKLSAgICB9Ci0gIH0KLQotb3V0OgotICByZXR1cm4gZGF0YTsKLQotYmFkX3BhY2tldDoKLSAgR1NUX0VMRU1FTlRfV0FSTklORyAoZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgKCJSZWNlaXZlZCBpbnZhbGlkIFJUUCBwYXlsb2FkLCBkcm9wcGluZyIpLCAoTlVMTCkpOwotICBnb3RvIG91dDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfc2JjX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwc2JjZGVwYXkiLCBHU1RfUkFOS19TRUNPTkRBUlksCi0gICAgICBHU1RfVFlQRV9SVFBfU0JDX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwc2JjZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE0N2EzMS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHNiY2RlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICoKLSAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEyICBDb2xsYWJvcmEgTHRkLgotICoKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfU0JDX0RFUEFZX0gKLSNkZWZpbmUgX19HU1RfUlRQX1NCQ19ERVBBWV9ICi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9TQkNfREVQQVkgXAotCShnc3RfcnRwX3NiY19kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1NCQ19ERVBBWShvYmopIFwKLQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1NCQ19ERVBBWSxcCi0JCUdzdFJ0cFNiY0RlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9TQkNfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU0JDX0RFUEFZLFwKLQkJR3N0UnRwU2JjRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfU0JDX0RFUEFZKG9iaikgXAotCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfU0JDX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TQkNfREVQQVlfQ0xBU1Mob2JqKSBcCi0JKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1NCQ19ERVBBWSkpCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU2JjRGVwYXkgR3N0UnRwU2JjRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU2JjRGVwYXlDbGFzcyBHc3RSdHBTYmNEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cFNiY0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgYmFzZTsKLQotICBpbnQgcmF0ZTsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwU2JjRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9zYmNfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3NiY19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzYmNwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwc2JjcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NGE4MTcuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBzYmNwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKiAgR1N0cmVhbWVyIFJUUCBTQkMgcGF5bG9hZGVyCi0gKiAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4Ci0gKgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgImdzdHJ0cHNiY3BheS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi0jZGVmaW5lIFJUUF9TQkNfUEFZTE9BRF9IRUFERVJfU0laRSAxCi0jZGVmaW5lIERFRkFVTFRfTUlOX0ZSQU1FUyAwCi0jZGVmaW5lIFJUUF9TQkNfSEVBREVSX1RPVEFMICgxMiArIFJUUF9TQkNfUEFZTE9BRF9IRUFERVJfU0laRSkKLQotLyogQkVHSU46IFBhY2tpbmcgZm9yIHJ0cF9wYXlsb2FkICovCi0jaWZkZWYgX01TQ19WRVIKLSNwcmFnbWEgcGFjayhwdXNoLCAxKQotI2VuZGlmCi0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0vKiBGSVhNRTogdGhpcyBzZWVtcyBhbGwgYSBiaXQgb3ZlciB0aGUgdG9wIGZvciBhIHNpbmdsZSBieXRlLi4gKi8KLXN0cnVjdCBydHBfcGF5bG9hZAotewotICBndWludDggZnJhbWVfY291bnQ6NDsKLSAgZ3VpbnQ4IHJmYTA6MTsKLSAgZ3VpbnQ4IGlzX2xhc3RfZnJhZ21lbnQ6MTsKLSAgZ3VpbnQ4IGlzX2ZpcnN0X2ZyYWdtZW50OjE7Ci0gIGd1aW50OCBpc19mcmFnbWVudGVkOjE7Ci19Ci0jZWxpZiBHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOCi1zdHJ1Y3QgcnRwX3BheWxvYWQKLXsKLSAgZ3VpbnQ4IGlzX2ZyYWdtZW50ZWQ6MTsKLSAgZ3VpbnQ4IGlzX2ZpcnN0X2ZyYWdtZW50OjE7Ci0gIGd1aW50OCBpc19sYXN0X2ZyYWdtZW50OjE7Ci0gIGd1aW50OCByZmEwOjE7Ci0gIGd1aW50OCBmcmFtZV9jb3VudDo0OwotfQotI2Vsc2UKLSNlcnJvciAiVW5rbm93biBieXRlIG9yZGVyIgotI2VuZGlmCi0KLSNpZmRlZiBfTVNDX1ZFUgotOwotI3ByYWdtYSBwYWNrKHBvcCkKLSNlbHNlCi1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0jZW5kaWYKLS8qIEVORDogUGFja2luZyBmb3IgcnRwX3BheWxvYWQgKi8KLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTUlOX0ZSQU1FUwotfTsKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3J0cF9zYmNfcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9ydHBfc2JjX3BheV9kZWJ1ZwotCi0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfcnRwX3NiY19wYXlfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBTQkNQYXksIGdzdF9ydHBfc2JjX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3NiY19wYXlfc2lua19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1zYmMsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSB7IDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwIH0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0sICIKLSAgICAgICAgImNoYW5uZWwtbW9kZSA9IChzdHJpbmcpIHsgbW9ubywgZHVhbCwgc3RlcmVvLCBqb2ludCB9LCAiCi0gICAgICAgICJibG9ja3MgPSAoaW50KSB7IDQsIDgsIDEyLCAxNiB9LCAiCi0gICAgICAgICJzdWJiYW5kcyA9IChpbnQpIHsgNCwgOCB9LCAiCi0gICAgICAgICJhbGxvY2F0aW9uLW1ldGhvZCA9IChzdHJpbmcpIHsgc25yLCBsb3VkbmVzcyB9LCAiCi0gICAgICAgICJiaXRwb29sID0gKGludCkgWyAyLCA2NCBdIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9zYmNfcGF5X3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIGF1ZGlvLCIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgeyAxNjAwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCB9LCIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBTQkMiKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2JjX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX3NiY19wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2ludAotZ3N0X3J0cF9zYmNfcGF5X2dldF9mcmFtZV9sZW4gKGdpbnQgc3ViYmFuZHMsIGdpbnQgY2hhbm5lbHMsCi0gICAgZ2ludCBibG9ja3MsIGdpbnQgYml0cG9vbCwgY29uc3QgZ2NoYXIgKiBjaGFubmVsX21vZGUpCi17Ci0gIGdpbnQgbGVuOwotICBnaW50IGpvaW47Ci0KLSAgbGVuID0gNCArICg0ICogc3ViYmFuZHMgKiBjaGFubmVscykgLyA4OwotCi0gIGlmIChzdHJjbXAgKGNoYW5uZWxfbW9kZSwgIm1vbm8iKSA9PSAwIHx8IHN0cmNtcCAoY2hhbm5lbF9tb2RlLCAiZHVhbCIpID09IDApCi0gICAgbGVuICs9ICgoYmxvY2tzICogY2hhbm5lbHMgKiBiaXRwb29sKSArIDcpIC8gODsKLSAgZWxzZSB7Ci0gICAgam9pbiA9IHN0cmNtcCAoY2hhbm5lbF9tb2RlLCAiam9pbnQiKSA9PSAwID8gMSA6IDA7Ci0gICAgbGVuICs9ICgoam9pbiAqIHN1YmJhbmRzICsgYmxvY2tzICogYml0cG9vbCkgKyA3KSAvIDg7Ci0gIH0KLQotICByZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc2JjX3BheV9zZXRfY2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwU0JDUGF5ICpzYmNwYXk7Ci0gIGdpbnQgcmF0ZSwgc3ViYmFuZHMsIGNoYW5uZWxzLCBibG9ja3MsIGJpdHBvb2w7Ci0gIGdpbnQgZnJhbWVfbGVuOwotICBjb25zdCBnY2hhciAqY2hhbm5lbF9tb2RlOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLQotICBzYmNwYXkgPSBHU1RfUlRQX1NCQ19QQVkgKHBheWxvYWQpOwotCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAicmF0ZSIsICZyYXRlKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsICZjaGFubmVscykpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiYmxvY2tzIiwgJmJsb2NrcykpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiYml0cG9vbCIsICZiaXRwb29sKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJzdWJiYW5kcyIsICZzdWJiYW5kcykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGNoYW5uZWxfbW9kZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiY2hhbm5lbC1tb2RlIik7Ci0gIGlmICghY2hhbm5lbF9tb2RlKQotICAgIHJldHVybiBGQUxTRTsKLQotICBmcmFtZV9sZW4gPSBnc3RfcnRwX3NiY19wYXlfZ2V0X2ZyYW1lX2xlbiAoc3ViYmFuZHMsIGNoYW5uZWxzLCBibG9ja3MsCi0gICAgICBiaXRwb29sLCBjaGFubmVsX21vZGUpOwotCi0gIHNiY3BheS0+ZnJhbWVfbGVuZ3RoID0gZnJhbWVfbGVuOwotICBzYmNwYXktPmZyYW1lX2R1cmF0aW9uID0gKChibG9ja3MgKiBzdWJiYW5kcykgKiBHU1RfU0VDT05EKSAvIHJhdGU7Ci0gIHNiY3BheS0+bGFzdF90aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAiYXVkaW8iLCBUUlVFLCAiU0JDIiwgcmF0ZSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGF5bG9hZCwgImNhbGN1bGF0ZWQgZnJhbWUgbGVuZ3RoOiAlZCAiLCBmcmFtZV9sZW4pOwotCi0gIHJldHVybiBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3NiY19wYXlfZmx1c2hfYnVmZmVycyAoR3N0UnRwU0JDUGF5ICogc2JjcGF5KQotewotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgZ3VpbnQgYXZhaWxhYmxlOwotICBndWludCBtYXhfcGF5bG9hZDsKLSAgR3N0QnVmZmVyICpvdXRidWYsICpwYXlidWY7Ci0gIGd1aW50OCAqcGF5bG9hZF9kYXRhOwotICBndWludCBmcmFtZV9jb3VudDsKLSAgZ3VpbnQgcGF5bG9hZF9sZW5ndGg7Ci0gIHN0cnVjdCBydHBfcGF5bG9hZCAqcGF5bG9hZDsKLQotICBpZiAoc2JjcGF5LT5mcmFtZV9sZW5ndGggPT0gMCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNiY3BheSwgIkZyYW1lIGxlbmd0aCBpcyAwIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgYXZhaWxhYmxlID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChzYmNwYXktPmFkYXB0ZXIpOwotCi0gIG1heF9wYXlsb2FkID0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4gKEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAoc2JjcGF5KSAtCi0gICAgICBSVFBfU0JDX1BBWUxPQURfSEVBREVSX1NJWkUsIDAsIDApOwotCi0gIG1heF9wYXlsb2FkID0gTUlOIChtYXhfcGF5bG9hZCwgYXZhaWxhYmxlKTsKLSAgZnJhbWVfY291bnQgPSBtYXhfcGF5bG9hZCAvIHNiY3BheS0+ZnJhbWVfbGVuZ3RoOwotICBwYXlsb2FkX2xlbmd0aCA9IGZyYW1lX2NvdW50ICogc2JjcGF5LT5mcmFtZV9sZW5ndGg7Ci0gIGlmIChwYXlsb2FkX2xlbmd0aCA9PSAwKSAgICAgIC8qIE5vdGhpbmcgdG8gc2VuZCAqLwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKFJUUF9TQkNfUEFZTE9BRF9IRUFERVJfU0laRSwgMCwgMCk7Ci0KLSAgLyogZ2V0IHBheWxvYWQgKi8KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChvdXRidWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotCi0gIGdzdF9ydHBfYnVmZmVyX3NldF9wYXlsb2FkX3R5cGUgKCZydHAsIEdTVF9SVFBfQkFTRV9QQVlMT0FEX1BUIChzYmNwYXkpKTsKLQotICAvKiB3cml0ZSBoZWFkZXIgYW5kIGNvcHkgZGF0YSBpbnRvIHBheWxvYWQgKi8KLSAgcGF5bG9hZF9kYXRhID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotICBwYXlsb2FkID0gKHN0cnVjdCBydHBfcGF5bG9hZCAqKSBwYXlsb2FkX2RhdGE7Ci0gIG1lbXNldCAocGF5bG9hZCwgMCwgc2l6ZW9mIChzdHJ1Y3QgcnRwX3BheWxvYWQpKTsKLSAgcGF5bG9hZC0+ZnJhbWVfY291bnQgPSBmcmFtZV9jb3VudDsKLQotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgcGF5YnVmID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXJfZmFzdCAoc2JjcGF5LT5hZGFwdGVyLCBwYXlsb2FkX2xlbmd0aCk7Ci0gIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChzYmNwYXkpLCBvdXRidWYsIHBheWJ1ZiwKLSAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChvdXRidWYsIHBheWJ1Zik7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBzYmNwYXktPmxhc3RfdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWYpID0gZnJhbWVfY291bnQgKiBzYmNwYXktPmZyYW1lX2R1cmF0aW9uOwotICBHU1RfREVCVUdfT0JKRUNUIChzYmNwYXksICJQdXNoaW5nICVkIGJ5dGVzOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBwYXlsb2FkX2xlbmd0aCwgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikpKTsKLQotICBzYmNwYXktPmxhc3RfdGltZXN0YW1wICs9IGZyYW1lX2NvdW50ICogc2JjcGF5LT5mcmFtZV9kdXJhdGlvbjsKLQotICByZXR1cm4gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaCAoR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHNiY3BheSksIG91dGJ1Zik7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3NiY19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cFNCQ1BheSAqc2JjcGF5OwotICBndWludCBhdmFpbGFibGU7Ci0KLSAgLyogRklYTUUgY2hlY2sgZm9yIG5lZ290aWF0aW9uICovCi0KLSAgc2JjcGF5ID0gR1NUX1JUUF9TQkNfUEFZIChwYXlsb2FkKTsKLQotICBpZiAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChidWZmZXIpKSB7Ci0gICAgLyogVHJ5IHRvIGZsdXNoIHdoYXRldmVyJ3MgbGVmdCAqLwotICAgIGdzdF9ydHBfc2JjX3BheV9mbHVzaF9idWZmZXJzIChzYmNwYXkpOwotICAgIC8qIERyb3AgdGhlIHJlc3QgKi8KLSAgICBnc3RfYWRhcHRlcl9mbHVzaCAoc2JjcGF5LT5hZGFwdGVyLAotICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNiY3BheS0+YWRhcHRlcikpOwotICAgIC8qIFJlc2V0IHRpbWVzdGFtcHMgKi8KLSAgICBzYmNwYXktPmxhc3RfdGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIGlmIChzYmNwYXktPmxhc3RfdGltZXN0YW1wID09IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgc2JjcGF5LT5sYXN0X3RpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKHNiY3BheS0+YWRhcHRlciwgYnVmZmVyKTsKLQotICBhdmFpbGFibGUgPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNiY3BheS0+YWRhcHRlcik7Ci0gIGlmIChhdmFpbGFibGUgKyBSVFBfU0JDX0hFQURFUl9UT1RBTCA+PQotICAgICAgR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChzYmNwYXkpIHx8Ci0gICAgICAoYXZhaWxhYmxlID4gKHNiY3BheS0+bWluX2ZyYW1lcyAqIHNiY3BheS0+ZnJhbWVfbGVuZ3RoKSkpCi0gICAgcmV0dXJuIGdzdF9ydHBfc2JjX3BheV9mbHVzaF9idWZmZXJzIChzYmNwYXkpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3NiY19wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBTQkNQYXkgKnNiY3BheSA9IEdTVF9SVFBfU0JDX1BBWSAocGF5bG9hZCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgZ3N0X3J0cF9zYmNfcGF5X2ZsdXNoX2J1ZmZlcnMgKHNiY3BheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKHBheWxvYWQsIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2JjX3BheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwU0JDUGF5ICpzYmNwYXkgPSBHU1RfUlRQX1NCQ19QQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNiY3BheS0+YWRhcHRlcik7Ci0KLSAgR1NUX0NBTExfUEFSRU5UIChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2JjX3BheV9jbGFzc19pbml0IChHc3RSdHBTQkNQYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpwYXlsb2FkX2NsYXNzID0gR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfc2JjX3BheV9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9zYmNfcGF5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9zYmNfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3NiY19wYXlfc2V0X2NhcHMpOwotICBwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3NiY19wYXlfaGFuZGxlX2J1ZmZlcik7Ci0gIHBheWxvYWRfY2xhc3MtPnNpbmtfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zYmNfcGF5X3NpbmtfZXZlbnQpOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwKLSAgICAgIFBST1BfTUlOX0ZSQU1FUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJtaW4tZnJhbWVzIiwgIm1pbmltdW0gZnJhbWUgbnVtYmVyIiwKLSAgICAgICAgICAiTWluaW11bSBxdWFudGl0eSBvZiBmcmFtZXMgdG8gc2VuZCBpbiBvbmUgcGFja2V0ICIKLSAgICAgICAgICAiKC0xIGZvciBtYXhpbXVtIGFsbG93ZWQgYnkgdGhlIG10dSkiLAotICAgICAgICAgIC0xLCBHX01BWElOVCwgREVGQVVMVF9NSU5fRlJBTUVTLCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfc2JjX3BheV9zaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3NiY19wYXlfc3JjX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJSVFAgcGFja2V0IHBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsiLCAiUGF5bG9hZCBTQkMgYXVkaW8gYXMgUlRQIHBhY2tldHMiLAotICAgICAgIlRoaWFnbyBTb3VzYSBTYW50b3MgPHRoaWFnb3NzQGxjYy51ZmNnLmVkdS5icj4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3J0cF9zYmNfcGF5X2RlYnVnLCAicnRwc2JjcGF5IiwgMCwKLSAgICAgICJSVFAgU0JDIHBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zYmNfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBTQkNQYXkgKnNiY3BheTsKLQotICBzYmNwYXkgPSBHU1RfUlRQX1NCQ19QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX01JTl9GUkFNRVM6Ci0gICAgICBzYmNwYXktPm1pbl9mcmFtZXMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2JjX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwU0JDUGF5ICpzYmNwYXk7Ci0KLSAgc2JjcGF5ID0gR1NUX1JUUF9TQkNfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NSU5fRlJBTUVTOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2JjcGF5LT5taW5fZnJhbWVzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2JjX3BheV9pbml0IChHc3RSdHBTQkNQYXkgKiBzZWxmKQotewotICBzZWxmLT5hZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBzZWxmLT5mcmFtZV9sZW5ndGggPSAwOwotICBzZWxmLT5sYXN0X3RpbWVzdGFtcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgc2VsZi0+bWluX2ZyYW1lcyA9IERFRkFVTFRfTUlOX0ZSQU1FUzsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfc2JjX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHNiY3BheSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9SVFBfU0JDX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHNiY3BheS5oIGIvZ3N0L3J0cC9nc3RydHBzYmNwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZlZTY2ZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHNiY3BheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyogIEdTdHJlYW1lciBSVFAgU0JDIHBheWxvYWRlcgotICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9TQkNfUEFZIFwKLQkoZ3N0X3J0cF9zYmNfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfU0JDX1BBWShvYmopIFwKLQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1NCQ19QQVksXAotCQlHc3RSdHBTQkNQYXkpKQotI2RlZmluZSBHU1RfUlRQX1NCQ19QQVlfQ0xBU1Moa2xhc3MpIFwKLQkoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU0JDX1BBWSxcCi0JCUdzdFJ0cFNCQ1BheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TQkNfUEFZKG9iaikgXAotCShHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfU0JDX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfU0JDX1BBWV9DTEFTUyhvYmopIFwKLQkoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU0JDX1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBTQkNQYXkgR3N0UnRwU0JDUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFNCQ1BheUNsYXNzIEdzdFJ0cFNCQ1BheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cFNCQ1BheSB7Ci0JR3N0UlRQQmFzZVBheWxvYWQgYmFzZTsKLQotCUdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0JR3N0Q2xvY2tUaW1lIGxhc3RfdGltZXN0YW1wOwotCi0JZ3VpbnQgZnJhbWVfbGVuZ3RoOwotICAgICAgICBHc3RDbG9ja1RpbWUgZnJhbWVfZHVyYXRpb247Ci0KLQlndWludCBtaW5fZnJhbWVzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBTQkNQYXlDbGFzcyB7Ci0JR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3NiY19wYXlfZ2V0X3R5cGUodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfc2JjX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwc2lyZW5kZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YjcxMDkuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIFNpcmVuIERlcGF5bG9hZGVyIEdzdCBFbGVtZW50Ci0gKgotICogICBAYXV0aG9yOiBZb3VuZXNzIEFsYW91aSA8a2FrYXJvdG9Aa2FrYXJvdG8uaG9tZWxpbnV4Lm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwc2lyZW5kZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3NpcmVuX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgMTYwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlNJUkVOXCIiKQotICAgIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQsIHNvIHRoZSBwZWVyIGRvZXNuJ3QgaGF2ZSB0byBzcGVjaWZ5IGl0ICovCi0gICAgLyogICIgImRjdC1sZW5ndGggPSAoaW50KSAzMjAiKSAqLwotICAgICk7Ci0KLSAgICAgc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfc2lyZW5fZGVwYXlfc3JjX3RlbXBsYXRlID0KLSAgICAgICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXNpcmVuLCAiICJkY3QtbGVuZ3RoID0gKGludCkgMzIwIikKLSAgICApOwotCi0gICAgIHN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfc2lyZW5fZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqCi0gICAgZGVwYXlsb2FkLCBHc3RSVFBCdWZmZXIgKiBydHApOwotICAgICBzdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9zaXJlbl9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICoKLSAgICBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UlRQU2lyZW5EZXBheSwgZ3N0X3J0cF9zaXJlbl9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi0gICAgIHN0YXRpYyB2b2lkIGdzdF9ydHBfc2lyZW5fZGVwYXlfY2xhc3NfaW5pdCAoR3N0UlRQU2lyZW5EZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzID0gKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPSBnc3RfcnRwX3NpcmVuX2RlcGF5X3Byb2Nlc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9zaXJlbl9kZXBheV9zZXRjYXBzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfc2lyZW5fZGVwYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9zaXJlbl9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgU2lyZW4gcGFja2V0IGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBTaXJlbiBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwKLSAgICAgICJQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zaXJlbl9kZXBheV9pbml0IChHc3RSVFBTaXJlbkRlcGF5ICogcnRwc2lyZW5kZXBheSkKLXsKLQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc2lyZW5fZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIGdib29sZWFuIHJldDsKLQotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtc2lyZW4iLAotICAgICAgImRjdC1sZW5ndGgiLCBHX1RZUEVfSU5ULCAzMjAsIE5VTEwpOwotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHICgic2V0IGNhcHMgb24gc291cmNlOiAlIiBHU1RfUFRSX0ZPUk1BVCAiIChyZXQ9JWQpIiwgc3JjY2FwcywgcmV0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIC8qIGFsd2F5cyBmaXhlZCBjbG9jayByYXRlIG9mIDE2MDAwICovCi0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IDE2MDAwOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9zaXJlbl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0KLSAgb3V0YnVmID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfYnVmZmVyIChydHApOwotCi0gIGlmIChvdXRidWYpIHsKLSAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVwYXlsb2FkKSwgb3V0YnVmLAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICB9Ci0KLSAgcmV0dXJuIG91dGJ1ZjsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfc2lyZW5fZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBzaXJlbmRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1NJUkVOX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwc2lyZW5kZXBheS5oIGIvZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZmZiMTEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBzaXJlbmRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogU2lyZW4gRGVwYXlsb2FkZXIgR3N0IEVsZW1lbnQKLSAqCi0gKiAgIEBhdXRob3I6IFlvdW5lc3MgQWxhb3VpIDxrYWthcm90b0BrYWthcm90by5ob21lbGludXgubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1NJUkVOX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfU0lSRU5fREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMgdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUFNpcmVuRGVwYXkgR3N0UlRQU2lyZW5EZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBTaXJlbkRlcGF5Q2xhc3MgR3N0UlRQU2lyZW5EZXBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9TSVJFTl9ERVBBWSBcCi0gIChnc3RfcnRwX3NpcmVuX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfU0lSRU5fREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfU0lSRU5fREVQQVksR3N0UlRQU2lyZW5EZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfU0lSRU5fREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1NJUkVOX0RFUEFZLEdzdFJUUFNpcmVuRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfU0lSRU5fREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfU0lSRU5fREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1NJUkVOX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9TSVJFTl9ERVBBWSkpCi0KLQotc3RydWN0IF9Hc3RSVFBTaXJlbkRlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi19OwotCi1zdHJ1Y3QgX0dzdFJUUFNpcmVuRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9zaXJlbl9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfc2lyZW5fZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUlRQX1NJUkVOX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzaXJlbnBheS5jIGIvZ3N0L3J0cC9nc3RydHBzaXJlbnBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YWE4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc2lyZW5wYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogU2lyZW4gUGF5bG9hZGVyIEdzdCBFbGVtZW50Ci0gKgotICogICBAYXV0aG9yOiBZb3VuZXNzIEFsYW91aSA8a2FrYXJvdG9Aa2FrYXJvdG8uaG9tZWxpbnV4Lm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RydHBzaXJlbnBheS5oIgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cHNpcmVucGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBzaXJlbnBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfc2lyZW5fcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1zaXJlbiwgIiAiZGN0LWxlbmd0aCA9IChpbnQpIDMyMCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfc2lyZW5fcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDE2MDAwLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJTSVJFTlwiLCAiCi0gICAgICAgICJiaXRyYXRlID0gKHN0cmluZykgXCIxNjAwMFwiLCAiICJkY3QtbGVuZ3RoID0gKGludCkgMzIwIikKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9zaXJlbl9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UlRQU2lyZW5QYXksIGdzdF9ydHBfc2lyZW5fcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zaXJlbl9wYXlfY2xhc3NfaW5pdCAoR3N0UlRQU2lyZW5QYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfc2lyZW5fcGF5X3NldGNhcHM7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9zaXJlbl9wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfc2lyZW5fcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFBheWxvYWRlciBmb3IgU2lyZW4gQXVkaW8iLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYWNrZXRpemUgU2lyZW4gYXVkaW8gc3RyZWFtcyBpbnRvIFJUUCBwYWNrZXRzIiwKLSAgICAgICJZb3VuZXNzIEFsYW91aSA8a2FrYXJvdG9Aa2FrYXJvdG8uaG9tZWxpbnV4Lm5ldD4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwc2lyZW5wYXlfZGVidWcsICJydHBzaXJlbnBheSIsIDAsCi0gICAgICAic2lyZW4gYXVkaW8gUlRQIHBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zaXJlbl9wYXlfaW5pdCAoR3N0UlRQU2lyZW5QYXkgKiBydHBzaXJlbnBheSkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgKnJ0cGJhc2VwYXlsb2FkOwotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotCi0gIHJ0cGJhc2VwYXlsb2FkID0gR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cHNpcmVucGF5KTsKLSAgcnRwYmFzZWF1ZGlvcGF5bG9hZCA9IEdTVF9SVFBfQkFTRV9BVURJT19QQVlMT0FEIChydHBzaXJlbnBheSk7Ci0KLSAgLyogd2UgZG9uJ3Qgc2V0IHRoZSBwYXlsb2FkIHR5cGUsIGl0IHNob3VsZCBiZSBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uIHVzaW5nCi0gICAqIHRoZSBwdCBwcm9wZXJ0eSBvciB0aGUgZGVmYXVsdCA5NiB3aWxsIGJlIHVzZWQgKi8KLSAgcnRwYmFzZXBheWxvYWQtPmNsb2NrX3JhdGUgPSAxNjAwMDsKLQotICAvKiB0ZWxsIHJ0cGJhc2VhdWRpb3BheWxvYWQgdGhhdCB0aGlzIGlzIGEgZnJhbWUgYmFzZWQgY29kZWMgKi8KLSAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X2ZyYW1lX2Jhc2VkIChydHBiYXNlYXVkaW9wYXlsb2FkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3NpcmVuX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHJ0cGJhc2VwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UlRQU2lyZW5QYXkgKnJ0cHNpcmVucGF5OwotICBHc3RSVFBCYXNlQXVkaW9QYXlsb2FkICpydHBiYXNlYXVkaW9wYXlsb2FkOwotICBnaW50IGRjdF9sZW5ndGg7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBjaGFyICpwYXlsb2FkX25hbWU7Ci0KLSAgcnRwc2lyZW5wYXkgPSBHU1RfUlRQX1NJUkVOX1BBWSAocnRwYmFzZXBheWxvYWQpOwotICBydHBiYXNlYXVkaW9wYXlsb2FkID0gR1NUX1JUUF9CQVNFX0FVRElPX1BBWUxPQUQgKHJ0cGJhc2VwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImRjdC1sZW5ndGgiLCAmZGN0X2xlbmd0aCk7Ci0gIGlmIChkY3RfbGVuZ3RoICE9IDMyMCkKLSAgICBnb3RvIHdyb25nX2RjdDsKLQotICBwYXlsb2FkX25hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOwotICBpZiAoZ19hc2NpaV9zdHJjYXNlY21wICgiYXVkaW8veC1zaXJlbiIsIHBheWxvYWRfbmFtZSkpCi0gICAgZ290byB3cm9uZ19jYXBzOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChydHBiYXNlcGF5bG9hZCwgImF1ZGlvIiwgVFJVRSwgIlNJUkVOIiwKLSAgICAgIDE2MDAwKTsKLSAgLyogc2V0IG9wdGlvbnMgZm9yIHRoaXMgZnJhbWUgYmFzZWQgYXVkaW8gY29kZWMgKi8KLSAgZ3N0X3J0cF9iYXNlX2F1ZGlvX3BheWxvYWRfc2V0X2ZyYW1lX29wdGlvbnMgKHJ0cGJhc2VhdWRpb3BheWxvYWQsIDIwLCA0MCk7Ci0KLSAgcmV0dXJuIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChydHBiYXNlcGF5bG9hZCwgTlVMTCk7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19kY3Q6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHBzaXJlbnBheSwgImRjdC1sZW5ndGggbXVzdCBiZSAzMjAsIHJlY2VpdmVkICVkIiwKLSAgICAgICAgZGN0X2xlbmd0aCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci13cm9uZ19jYXBzOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocnRwc2lyZW5wYXksICJleHBlY3RlZCBhdWRpby94LXNpcmVuLCByZWNlaXZlZCAlcyIsCi0gICAgICAgIHBheWxvYWRfbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3NpcmVuX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHNpcmVucGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1NJUkVOX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHNpcmVucGF5LmggYi9nc3QvcnRwL2dzdHJ0cHNpcmVucGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYmE1YjUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBzaXJlbnBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIFNpcmVuIFBheWxvYWRlciBHc3QgRWxlbWVudAotICoKLSAqICAgQGF1dGhvcjogWW91bmVzcyBBbGFvdWkgPGtha2Fyb3RvQGtha2Fyb3RvLmhvbWVsaW51eC5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfU0lSRU5fUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfU0lSRU5fUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWF1ZGlvcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9TSVJFTl9QQVkgXAotICAoZ3N0X3J0cF9zaXJlbl9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9TSVJFTl9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfU0lSRU5fUEFZLEdzdFJUUFNpcmVuUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9TSVJFTl9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1NJUkVOX1BBWSxHc3RSVFBTaXJlblBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TSVJFTl9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfU0lSRU5fUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TSVJFTl9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1NJUkVOX1BBWSkpCi10eXBlZGVmIHN0cnVjdCBfR3N0UlRQU2lyZW5QYXkgR3N0UlRQU2lyZW5QYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQU2lyZW5QYXlDbGFzcyBHc3RSVFBTaXJlblBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJUUFNpcmVuUGF5Ci17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWQgYXVkaW9wYXlsb2FkOwotfTsKLQotc3RydWN0IF9Hc3RSVFBTaXJlblBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VBdWRpb1BheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3NpcmVuX3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfc2lyZW5fcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9TSVJFTl9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjU3N2U1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc3BlZXhkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cHNwZWV4ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi0vKiBSdHBTUEVFWERlcGF5IHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3NwZWV4X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gIChpbnQpIFs2MDAwLCA0ODAwMF0sICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlNQRUVYXCIiKQotICAgIC8qICAiZW5jb2RpbmctcGFyYW1zID0gKHN0cmluZykgXCIxXCIiICovCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfc3BlZXhfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXNwZWV4IikKLSAgICApOwotCi1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX3NwZWV4X2RlcGF5X3Byb2Nlc3MgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0UlRQQnVmZmVyICogcnRwKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3NwZWV4X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi1HX0RFRklORV9UWVBFIChHc3RSdHBTUEVFWERlcGF5LCBnc3RfcnRwX3NwZWV4X2RlcGF5LAotICAgIEdTVF9UWVBFX1JUUF9CQVNFX0RFUEFZTE9BRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3NwZWV4X2RlcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFNQRUVYRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF9zcGVleF9kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfc3BlZXhfZGVwYXlfc2V0Y2FwczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3NwZWV4X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfc3BlZXhfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFNwZWV4IGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBTcGVleCBhdWRpbyBmcm9tIFJUUCBwYWNrZXRzIiwKLSAgICAgICJFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3NwZWV4X2RlcGF5X2luaXQgKEdzdFJ0cFNQRUVYRGVwYXkgKiBydHBzcGVleGRlcGF5KQotewotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3J0cF9zcGVleF9kZXBheV9nZXRfbW9kZSAoZ2ludCByYXRlKQotewotICBpZiAocmF0ZSA+IDI1MDAwKQotICAgIHJldHVybiAyOwotICBlbHNlIGlmIChyYXRlID4gMTI1MDApCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UKLSAgICByZXR1cm4gMDsKLX0KLQotLyogbGVuIDQgYnl0ZXMgTEUsCi0gKiB2ZW5kb3Igc3RyaW5nIChsZW4gYnl0ZXMpLAotICogdXNlcl9sZW4gNCAoMCkgYnl0ZXMgTEUKLSAqLwotc3RhdGljIGNvbnN0IGdjaGFyIGdzdF9ydHBfc3BlZXhfY29tbWVudFtdID0KLSAgICAiXDA0NVwwXDBcMERlcGF5bG9hZGVkIHdpdGggR1N0cmVhbWVyIHNwZWV4ZGVwYXlcMFwwXDBcMCI7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zcGVleF9kZXBheV9zZXRjYXBzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdFJ0cFNQRUVYRGVwYXkgKnJ0cHNwZWV4ZGVwYXk7Ci0gIGdpbnQgY2xvY2tfcmF0ZSwgbmJfY2hhbm5lbHM7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBjb25zdCBnY2hhciAqcGFyYW1zOwotICBHc3RDYXBzICpzcmNjYXBzOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwc3BlZXhkZXBheSA9IEdTVF9SVFBfU1BFRVhfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmY2xvY2tfcmF0ZSkpCi0gICAgZ290byBub19jbG9ja3JhdGU7Ci0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgaWYgKCEocGFyYW1zID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJlbmNvZGluZy1wYXJhbXMiKSkpCi0gICAgbmJfY2hhbm5lbHMgPSAxOwotICBlbHNlIHsKLSAgICBuYl9jaGFubmVscyA9IGF0b2kgKHBhcmFtcyk7Ci0gIH0KLQotICAvKiBjb25zdHJ1Y3QgbWluaW1hbCBoZWFkZXIgYW5kIGNvbW1lbnQgcGFja2V0IGZvciB0aGUgZGVjb2RlciAqLwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDgwKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgbWVtY3B5IChkYXRhLCAiU3BlZXggICAiLCA4KTsKLSAgZGF0YSArPSA4OwotICBtZW1jcHkgKGRhdGEsICIxLjEuMTIiLCA3KTsKLSAgZGF0YSArPSAyMDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgMSk7ICAgICAgICAvKiB2ZXJzaW9uICovCi0gIGRhdGEgKz0gNDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgODApOyAgICAgICAvKiBoZWFkZXJfc2l6ZSAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIGNsb2NrX3JhdGUpOyAgICAgICAvKiByYXRlICovCi0gIGRhdGEgKz0gNDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgZ3N0X3J0cF9zcGVleF9kZXBheV9nZXRfbW9kZSAoY2xvY2tfcmF0ZSkpOyAgICAgICAgLyogbW9kZSAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIDQpOyAgICAgICAgLyogbW9kZV9iaXRzdHJlYW1fdmVyc2lvbiAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIG5iX2NoYW5uZWxzKTsgICAgICAvKiBuYl9jaGFubmVscyAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIC0xKTsgICAgICAgLyogYml0cmF0ZSAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIDB4YTApOyAgICAgLyogZnJhbWVfc2l6ZSAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIDApOyAgICAgICAgLyogVkJSICovCi0gIGRhdGEgKz0gNDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgMSk7ICAgICAgICAvKiBmcmFtZXNfcGVyX3BhY2tldCAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIDApOyAgICAgICAgLyogZXh0cmFfaGVhZGVycyAqLwotICBkYXRhICs9IDQ7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEsIDApOyAgICAgICAgLyogcmVzZXJ2ZWQxICovCi0gIGRhdGEgKz0gNDsKLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSwgMCk7ICAgICAgICAvKiByZXNlcnZlZDIgKi8KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtc3BlZXgiKTsKLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoZGVwYXlsb2FkLT5zcmNwYWQsIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHBzcGVleGRlcGF5KSwgYnVmKTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAoZ3N0X3J0cF9zcGVleF9jb21tZW50KSk7Ci0gIGdzdF9idWZmZXJfZmlsbCAoYnVmLCAwLCBnc3RfcnRwX3NwZWV4X2NvbW1lbnQsCi0gICAgICBzaXplb2YgKGdzdF9ydHBfc3BlZXhfY29tbWVudCkpOwotCi0gIGdzdF9ydHBfYmFzZV9kZXBheWxvYWRfcHVzaCAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRCAocnRwc3BlZXhkZXBheSksIGJ1Zik7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2Nsb2NrcmF0ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgIm5vIGNsb2NrLXJhdGUgc3BlY2lmaWVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF9zcGVleF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotCi0gIEdTVF9ERUJVRyAoInByb2Nlc3MgOiBnb3QgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcywgbWFyayAlZCB0cyAldSBzZXFuICVkIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHJ0cC0+YnVmZmVyKSwKLSAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCksCi0gICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0YW1wIChydHApLCBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxIChydHApKTsKLQotICAvKiBub3RoaW5nIHNwZWNpYWwgdG8gYmUgZG9uZSAqLwotICBvdXRidWYgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9idWZmZXIgKHJ0cCk7Ci0KLSAgaWYgKG91dGJ1ZikgewotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZikgPSAyMCAqIEdTVF9NU0VDT05EOwotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChkZXBheWxvYWQpLCBvdXRidWYsCi0gICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfQVVESU9fU1RSKSk7Ci0gIH0KLQotICByZXR1cm4gb3V0YnVmOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9zcGVleF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHNwZWV4ZGVwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfU1BFRVhfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzcGVleGRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc4ZDMyYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHNwZWV4ZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAotICovCi0gCi0jaWZuZGVmIF9fR1NUX1JUUF9TUEVFWF9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1NQRUVYX0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBTUEVFWERlcGF5IEdzdFJ0cFNQRUVYRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU1BFRVhEZXBheUNsYXNzIEdzdFJ0cFNQRUVYRGVwYXlDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfU1BFRVhfREVQQVkgXAotICAoZ3N0X3J0cF9zcGVleF9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1NQRUVYX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1NQRUVYX0RFUEFZLEdzdFJ0cFNQRUVYRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX1NQRUVYX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9TUEVFWF9ERVBBWSxHc3RSdHBTUEVFWERlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1NQRUVYX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX1NQRUVYX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TUEVFWF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU1BFRVhfREVQQVkpKQotCi1zdHJ1Y3QgX0dzdFJ0cFNQRUVYRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBkZXBheWxvYWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFNQRUVYRGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9zcGVleF9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfc3BlZXhfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfU1BFRVhfREVQQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHNwZWV4cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjRhMDIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBzcGVleHBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgImdzdHJ0cHNwZWV4cGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwc3BlZXhwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cHNwZWV4cGF5X2RlYnVnKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9zcGVleF9wYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXNwZWV4LCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyA2MDAwLCA0ODAwMCBdLCAiICJjaGFubmVscyA9IChpbnQpIDEiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3NwZWV4X3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAgKGludCkgWyA2MDAwLCA0ODAwMCBdLCAiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJTUEVFWFwiLCAiCi0gICAgICAgICJlbmNvZGluZy1wYXJhbXMgPSAoc3RyaW5nKSBcIjFcIiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfc3BlZXhfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3NwZWV4X3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfc3BlZXhfcGF5X2dldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9zcGVleF9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKgotICAgIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLSNkZWZpbmUgZ3N0X3J0cF9zcGVleF9wYXlfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwU1BFRVhQYXksIGdzdF9ydHBfc3BlZXhfcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9QQVlMT0FEKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc3BlZXhfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFNQRUVYUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX3NwZWV4X3BheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF9zcGVleF9wYXlfc2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmdldF9jYXBzID0gZ3N0X3J0cF9zcGVleF9wYXlfZ2V0Y2FwczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPmhhbmRsZV9idWZmZXIgPSBnc3RfcnRwX3NwZWV4X3BheV9oYW5kbGVfYnVmZmVyOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfc3BlZXhfcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3NwZWV4X3BheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBTcGVleCBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZXMgU3BlZXggYXVkaW8gaW50byBhIFJUUCBwYWNrZXQiLAotICAgICAgIkVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwc3BlZXhwYXlfZGVidWcsICJydHBzcGVleHBheSIsIDAsCi0gICAgICAiU3BlZXggUlRQIFBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zcGVleF9wYXlfaW5pdCAoR3N0UnRwU1BFRVhQYXkgKiBydHBzcGVleHBheSkKLXsKLSAgR1NUX1JUUF9CQVNFX1BBWUxPQUQgKHJ0cHNwZWV4cGF5KS0+Y2xvY2tfcmF0ZSA9IDgwMDA7Ci0gIEdTVF9SVFBfQkFTRV9QQVlMT0FEX1BUIChydHBzcGVleHBheSkgPSAxMTA7ICAvKiBDcmVhdGUgU3RyaW5nICovCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zcGVleF9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgLyogZG9uJ3QgY29uZmlndXJlIHlldCwgd2Ugd2FpdCBmb3IgdGhlIGlkZW50IHBhY2tldCAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX3NwZWV4X3BheV9nZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpvdGhlcnBhZGNhcHM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgb3RoZXJwYWRjYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChwYXlsb2FkLT5zcmNwYWQpOwotICBjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0KLSAgaWYgKG90aGVycGFkY2FwcykgewotICAgIGlmICghZ3N0X2NhcHNfaXNfZW1wdHkgKG90aGVycGFkY2FwcykpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcHM7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgICBnaW50IGNsb2NrX3JhdGU7Ci0KLSAgICAgIHBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob3RoZXJwYWRjYXBzLCAwKTsKLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSAgICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocHMsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChzLCAicmF0ZSIsIGNsb2NrX3JhdGUpOwotICAgICAgfQotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAob3RoZXJwYWRjYXBzKTsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICp0Y2FwcyA9IGNhcHM7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgdGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRjYXBzKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3BlZXhfcGF5X3BhcnNlX2lkZW50IChHc3RSdHBTUEVFWFBheSAqIHJ0cHNwZWV4cGF5LAotICAgIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIGd1aW50MzIgdmVyc2lvbiwgaGVhZGVyX3NpemUsIHJhdGUsIG1vZGUsIG5iX2NoYW5uZWxzOwotICBHc3RSVFBCYXNlUGF5bG9hZCAqcGF5bG9hZDsKLSAgZ2NoYXIgKmNzdHI7Ci0gIGdib29sZWFuIHJlczsKLQotICAvKiB3ZSBuZWVkIHRoZSBoZWFkZXIgc3RyaW5nICg4KSwgdGhlIHZlcnNpb24gc3RyaW5nICgyMCksIHRoZSB2ZXJzaW9uCi0gICAqIGFuZCB0aGUgaGVhZGVyIGxlbmd0aC4gKi8KLSAgaWYgKHNpemUgPCAzNikKLSAgICBnb3RvIHRvb19zbWFsbDsKLQotICBpZiAoIWdfc3RyX2hhc19wcmVmaXggKChjb25zdCBnY2hhciAqKSBkYXRhLCAiU3BlZXggICAiKSkKLSAgICBnb3RvIHdyb25nX2hlYWRlcjsKLQotICAvKiBza2lwIGhlYWRlciBhbmQgdmVyc2lvbiBzdHJpbmcgKi8KLSAgZGF0YSArPSAyODsKLQotICB2ZXJzaW9uID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgaWYgKHZlcnNpb24gIT0gMSkKLSAgICBnb3RvIHdyb25nX3ZlcnNpb247Ci0KLSAgZGF0YSArPSA0OwotICAvKiBlbnN1cmUgc2l6ZXMgKi8KLSAgaGVhZGVyX3NpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICBpZiAoaGVhZGVyX3NpemUgPCA4MCkKLSAgICBnb3RvIGhlYWRlcl90b29fc21hbGw7Ci0KLSAgaWYgKHNpemUgPCBoZWFkZXJfc2l6ZSkKLSAgICBnb3RvIHBheWxvYWRfdG9vX3NtYWxsOwotCi0gIGRhdGEgKz0gNDsKLSAgcmF0ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gIGRhdGEgKz0gNDsKLSAgbW9kZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gIGRhdGEgKz0gODsKLSAgbmJfY2hhbm5lbHMgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNwZWV4cGF5LCAicmF0ZSAlZCwgbW9kZSAlZCwgbmJfY2hhbm5lbHMgJWQiLAotICAgICAgcmF0ZSwgbW9kZSwgbmJfY2hhbm5lbHMpOwotCi0gIHBheWxvYWQgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwc3BlZXhwYXkpOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAiYXVkaW8iLCBGQUxTRSwgIlNQRUVYIiwgcmF0ZSk7Ci0gIGNzdHIgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIG5iX2NoYW5uZWxzKTsKLSAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsICJlbmNvZGluZy1wYXJhbXMiLAotICAgICAgR19UWVBFX1NUUklORywgY3N0ciwgTlVMTCk7Ci0gIGdfZnJlZSAoY3N0cik7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNwZWV4cGF5LAotICAgICAgICAiaWRlbnQgcGFja2V0IHRvbyBzbWFsbCwgbmVlZCBhdCBsZWFzdCAzMiBieXRlcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotd3JvbmdfaGVhZGVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc3BlZXhwYXksCi0gICAgICAgICJpZGVudCBwYWNrZXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBcIlNwZWV4ICAgXCIiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX3ZlcnNpb246Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBzcGVleHBheSwgImNhbiBvbmx5IGhhbmRsZSB2ZXJzaW9uIDEsIGhhdmUgdmVyc2lvbiAlZCIsCi0gICAgICAgIHZlcnNpb24pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaGVhZGVyX3Rvb19zbWFsbDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNwZWV4cGF5LAotICAgICAgICAiaGVhZGVyIHNpemUgdG9vIHNtYWxsLCBuZWVkIGF0IGxlYXN0IDgwIGJ5dGVzLCAiICJnb3Qgb25seSAlZCIsCi0gICAgICAgIGhlYWRlcl9zaXplKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXBheWxvYWRfdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc3BlZXhwYXksCi0gICAgICAgICJwYXlsb2FkIHRvbyBzbWFsbCwgbmVlZCBhdCBsZWFzdCAlZCBieXRlcywgZ290IG9ubHkgJWQiLCBoZWFkZXJfc2l6ZSwKLSAgICAgICAgc2l6ZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3NwZWV4X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwU1BFRVhQYXkgKnJ0cHNwZWV4cGF5OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBydHBzcGVleHBheSA9IEdTVF9SVFBfU1BFRVhfUEFZIChiYXNlcGF5bG9hZCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICBzd2l0Y2ggKHJ0cHNwZWV4cGF5LT5wYWNrZXQpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAvKiBpZGVudCBwYWNrZXQuIFdlIG5lZWQgdG8gcGFyc2UgdGhlIGhlYWRlcnMgdG8gY29uc3RydWN0IHRoZSBSVFAKLSAgICAgICAqIHByb3BlcnRpZXMuICovCi0gICAgICBpZiAoIWdzdF9ydHBfc3BlZXhfcGF5X3BhcnNlX2lkZW50IChydHBzcGVleHBheSwgbWFwLmRhdGEsIG1hcC5zaXplKSkgewotICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICAgICAgfQotCi0gICAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgY2FzZSAxOgotICAgICAgLyogY29tbWVudCBwYWNrZXQsIHdlIGlnbm9yZSBpdCAqLwotICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgICAgZ290byBkb25lOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBvdGhlciBwYWNrZXRzIGdvIGluIHRoZSBwYXlsb2FkICovCi0gICAgICBicmVhazsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9CVUZGRVJfRkxBR19HQVApKSB7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcik7Ci0gIGR1cmF0aW9uID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKTsKLQotICAvKiBGSVhNRSwgb25seSBvbmUgU1BFRVggZnJhbWUgcGVyIFJUUCBwYWNrZXQgZm9yIG5vdyAqLwotCi0gIG91dGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMCwgMCwgMCk7Ci0gIC8qIEZJWE1FLCBhc3NlcnQgZm9yIG5vdyAqLwotICBnX2Fzc2VydCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA8PQotICAgICAgR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVIChydHBzcGVleHBheSkpOwotCi0gIC8qIGNvcHkgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiAqLwotICBHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSA9IHRpbWVzdGFtcDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSA9IGR1cmF0aW9uOwotCi0gIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChiYXNlcGF5bG9hZCksIG91dGJ1ZiwgYnVmZmVyLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19BVURJT19TVFIpKTsKLSAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKG91dGJ1ZiwgYnVmZmVyKTsKLSAgYnVmZmVyID0gTlVMTDsKLQotICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoIChiYXNlcGF5bG9hZCwgb3V0YnVmKTsKLQotZG9uZToKLSAgaWYgKGJ1ZmZlcikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJ0cHNwZWV4cGF5LT5wYWNrZXQrKzsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotcGFyc2VfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwc3BlZXhwYXksIFNUUkVBTSwgREVDT0RFLCAoTlVMTCksCi0gICAgICAgICgiRXJyb3IgcGFyc2luZyBmaXJzdCBpZGVudGlmaWNhdGlvbiBwYWNrZXQuIikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9zcGVleF9wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwU1BFRVhQYXkgKnJ0cHNwZWV4cGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwc3BlZXhwYXkgPSBHU1RfUlRQX1NQRUVYX1BBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgcnRwc3BlZXhwYXktPnBhY2tldCA9IDA7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9zcGVleF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBzcGVleHBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9TUEVFWF9QQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzcGVleHBheS5oIGIvZ3N0L3J0cC9nc3RydHBzcGVleHBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTM5NzhlLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc3BlZXhwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAotICovCi0KLQotI2lmbmRlZiBfX0dTVF9SVFBfU1BFRVhfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfU1BFRVhfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU1BFRVhQYXkgR3N0UnRwU1BFRVhQYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU1BFRVhQYXlDbGFzcyBHc3RSdHBTUEVFWFBheUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9TUEVFWF9QQVkgXAotICAoZ3N0X3J0cF9zcGVleF9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9TUEVFWF9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfU1BFRVhfUEFZLEdzdFJ0cFNQRUVYUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9TUEVFWF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1NQRUVYX1BBWSxHc3RSdHBTUEVFWFBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TUEVFWF9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfU1BFRVhfUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TUEVFWF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1NQRUVYX1BBWSkpCi0KLXN0cnVjdCBfR3N0UnRwU1BFRVhQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICBndWludDY0IHBhY2tldDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwU1BFRVhQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfc3BlZXhfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF9zcGVleF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfU1BFRVhfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzdHJlYW1kZXBheS5jIGIvZ3N0L3J0cC9nc3RydHBzdHJlYW1kZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDUwMGU5Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc3RyZWFtZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cHN0cmVhbWRlcGF5Ci0gKgotICogSW1wbGVtZW50cyBzdHJlYW0gZGVwYXlsb2FkaW5nIG9mIFJUUCBhbmQgUlRDUCBwYWNrZXRzIGZvciBjb25uZWN0aW9uLW9yaWVudGVkCi0gKiB0cmFuc3BvcnQgcHJvdG9jb2xzIGFjY29yZGluZyB0byBSRkM0NTcxLgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyAhICJhdWRpby94LXJhdyxyYXRlPTQ4MDAwIiAhIHZvcmJpc2VuYyAhIHJ0cHZvcmJpc3BheSBjb25maWctaW50ZXJ2YWw9MSAhIHJ0cHN0cmVhbXBheSAhIHRjcHNlcnZlcnNpbmsgcG9ydD01Njc4Ci0gKiBnc3QtbGF1bmNoLTEuMCB0Y3BjbGllbnRzcmMgcG9ydD01Njc4IGhvc3Q9MTI3LjAuMC4xIGRvLXRpbWVzdGFtcD10cnVlICEgImFwcGxpY2F0aW9uL3gtcnRwLXN0cmVhbSxtZWRpYT1hdWRpbyxjbG9jay1yYXRlPTQ4MDAwLGVuY29kaW5nLW5hbWU9Vk9SQklTIiAhIHJ0cHN0cmVhbWRlcGF5ICEgcnRwdm9yYmlzZGVwYXkgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cnRwc3RyZWFtZGVwYXkuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChnc3RfcnRwX3N0cmVhbV9kZXBheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcnRwX3N0cmVhbV9kZXBheV9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwOyBhcHBsaWNhdGlvbi94LXJ0Y3A7IgotICAgICAgICAiYXBwbGljYXRpb24veC1zcnRwOyBhcHBsaWNhdGlvbi94LXNydGNwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLXN0cmVhbTsgYXBwbGljYXRpb24veC1ydGNwLXN0cmVhbTsiCi0gICAgICAgICJhcHBsaWNhdGlvbi94LXNydHAtc3RyZWFtOyBhcHBsaWNhdGlvbi94LXNydGNwLXN0cmVhbSIpCi0gICAgKTsKLQotI2RlZmluZSBwYXJlbnRfY2xhc3MgZ3N0X3J0cF9zdHJlYW1fZGVwYXlfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBTdHJlYW1EZXBheSwgZ3N0X3J0cF9zdHJlYW1fZGVwYXksIEdTVF9UWVBFX0JBU0VfUEFSU0UpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9zdHJlYW1fZGVwYXlfc2V0X3NpbmtfY2FwcyAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9ydHBfc3RyZWFtX2RlcGF5X2dldF9zaW5rX2NhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9zdHJlYW1fZGVwYXlfaGFuZGxlX2ZyYW1lIChHc3RCYXNlUGFyc2UgKiBwYXJzZSwKLSAgICBHc3RCYXNlUGFyc2VGcmFtZSAqIGZyYW1lLCBnaW50ICogc2tpcHNpemUpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9zdHJlYW1fZGVwYXlfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3N0cmVhbV9kZXBheV9jbGFzc19pbml0IChHc3RSdHBTdHJlYW1EZXBheUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VQYXJzZUNsYXNzICpwYXJzZV9jbGFzcyA9IEdTVF9CQVNFX1BBUlNFX0NMQVNTIChrbGFzcyk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfc3RyZWFtX2RlcGF5X2RlYnVnLCAicnRwc3RyZWFtZGVwYXkiLCAwLAotICAgICAgIlJUUCBzdHJlYW0gZGVwYXlsb2FkZXIiKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgU3RyZWFtIERlcGF5bG9hZGluZyIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrIiwKLSAgICAgICJEZXBheWxvYWRzIFJUUC9SVENQIHBhY2tldHMgZm9yIHN0cmVhbWluZyBwcm90b2NvbHMgYWNjb3JkaW5nIHRvIFJGQzQ1NzEiLAotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Iik7Ci0KLSAgcGFyc2VfY2xhc3MtPnNldF9zaW5rX2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfc3RyZWFtX2RlcGF5X3NldF9zaW5rX2NhcHMpOwotICBwYXJzZV9jbGFzcy0+Z2V0X3NpbmtfY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zdHJlYW1fZGVwYXlfZ2V0X3NpbmtfY2Fwcyk7Ci0gIHBhcnNlX2NsYXNzLT5oYW5kbGVfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfc3RyZWFtX2RlcGF5X2hhbmRsZV9mcmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3N0cmVhbV9kZXBheV9pbml0IChHc3RSdHBTdHJlYW1EZXBheSAqIHNlbGYpCi17Ci0gIGdzdF9iYXNlX3BhcnNlX3NldF9taW5fZnJhbWVfc2l6ZSAoR1NUX0JBU0VfUEFSU0UgKHNlbGYpLCAyKTsKLQotICAvKiBGb3JjZSBhY3RpdmF0aW9uIGluIHB1c2ggbW9kZS4gV2UgbmVlZCB0byBnZXQgYSBjYXBzIGV2ZW50IGZyb20gdXBzdHJlYW0KLSAgICogdG8ga25vdyB0aGUgZnVsbCBSVFAgY2Fwcy4gKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKEdTVF9CQVNFX1BBUlNFX1NJTktfUEFEIChzZWxmKSwKLSAgICAgIGdzdF9ydHBfc3RyZWFtX2RlcGF5X3NpbmtfYWN0aXZhdGUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3RyZWFtX2RlcGF5X3NldF9zaW5rX2NhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqb3RoZXJjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIG90aGVyY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvdGhlcmNhcHMsIDApOwotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0iKSkKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpOwotICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0Y3Atc3RyZWFtIikpCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydGNwIik7Ci0gIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0cC1zdHJlYW0iKSkKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydHAiKTsKLSAgZWxzZQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0Y3AiKTsKLQotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSksIG90aGVyY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdGhlcmNhcHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfc3RyZWFtX2RlcGF5X2dldF9zaW5rX2NhcHMgKEdzdEJhc2VQYXJzZSAqIHBhcnNlLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpwZWVyZmlsdGVyID0gTlVMTCwgKnBlZXJjYXBzLCAqdGVtcGw7Ci0gIEdzdENhcHMgKnJlczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGd1aW50IGksIG47Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIHBlZXJmaWx0ZXIgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAocGVlcmZpbHRlcik7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAocGVlcmZpbHRlciwgaSk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0iKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydHAiKTsKLSAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRjcC1zdHJlYW0iKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydGNwIik7Ci0gICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydHAtc3RyZWFtIikpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0cCIpOwotICAgICAgZWxzZQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydGNwIik7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX0JBU0VfUEFSU0VfU0lOS19QQUQgKHBhcnNlKSk7Ci0gIHBlZXJjYXBzID0KLSAgICAgIGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChHU1RfQkFTRV9QQVJTRV9TUkNfUEFEIChwYXJzZSksIHBlZXJmaWx0ZXIpOwotCi0gIGlmIChwZWVyY2FwcykgewotICAgIC8qIFJlbmFtZSBzdHJ1Y3R1cmUgbmFtZXMgKi8KLSAgICBwZWVyY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHBlZXJjYXBzKTsKLSAgICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKHBlZXJjYXBzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChwZWVyY2FwcywgaSk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0iKTsKLSAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRjcCIpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0Y3Atc3RyZWFtIik7Ci0gICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydHAiKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1zcnRwLXN0cmVhbSIpOwotICAgICAgZWxzZQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydGNwLXN0cmVhbSIpOwotICAgIH0KLQotICAgIHJlcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChwZWVyY2FwcywgdGVtcGwsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSB0ZW1wbDsKLSAgfQotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJlcyk7Ci0gICAgcmVzID0gaW50ZXJzZWN0aW9uOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJmaWx0ZXIpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfc3RyZWFtX2RlcGF5X2hhbmRsZV9mcmFtZSAoR3N0QmFzZVBhcnNlICogcGFyc2UsCi0gICAgR3N0QmFzZVBhcnNlRnJhbWUgKiBmcmFtZSwgZ2ludCAqIHNraXBzaXplKQotewotICBnc2l6ZSBidWZfc2l6ZTsKLSAgZ3VpbnQxNiBzaXplOwotCi0gIGlmIChnc3RfYnVmZmVyX2V4dHJhY3QgKGZyYW1lLT5idWZmZXIsIDAsICZzaXplLCAyKSAhPSAyKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLQotICBzaXplID0gR1VJTlQxNl9GUk9NX0JFIChzaXplKTsKLSAgYnVmX3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChmcmFtZS0+YnVmZmVyKTsKLQotICAvKiBOZWVkIG1vcmUgZGF0YSAqLwotICBpZiAoc2l6ZSArIDIgPiBidWZfc2l6ZSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgZnJhbWUtPm91dF9idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoZnJhbWUtPmJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMiwgc2l6ZSk7Ci0KLSAgcmV0dXJuIGdzdF9iYXNlX3BhcnNlX2ZpbmlzaF9mcmFtZSAocGFyc2UsIGZyYW1lLCBzaXplICsgMik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zdHJlYW1fZGVwYXlfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIHJldHVybiBnc3RfcGFkX2FjdGl2YXRlX21vZGUgKHBhZCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9zdHJlYW1fZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBzdHJlYW1kZXBheSIsCi0gICAgICBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9SVFBfU1RSRUFNX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwc3RyZWFtZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwc3RyZWFtZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwMTFjYi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHN0cmVhbWRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1NUUkVBTV9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1NUUkVBTV9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlcGFyc2UuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9TVFJFQU1fREVQQVkgXAotICAoZ3N0X3J0cF9zdHJlYW1fZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9TVFJFQU1fREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfU1RSRUFNX0RFUEFZLEdzdFJ0cFN0cmVhbURlcGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9TVFJFQU1fREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1NUUkVBTV9ERVBBWSxHc3RSdHBTdHJlYW1EZXBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TVFJFQU1fREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfU1RSRUFNX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TVFJFQU1fREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1NUUkVBTV9ERVBBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBTdHJlYW1EZXBheSBHc3RSdHBTdHJlYW1EZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBTdHJlYW1EZXBheUNsYXNzIEdzdFJ0cFN0cmVhbURlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwU3RyZWFtRGVwYXkKLXsKLSAgR3N0QmFzZVBhcnNlIHBhcmVudDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwU3RyZWFtRGVwYXlDbGFzcwotewotICBHc3RCYXNlUGFyc2VDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3N0cmVhbV9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci1nYm9vbGVhbiBnc3RfcnRwX3N0cmVhbV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHN0cmVhbXBheS5jIGIvZ3N0L3J0cC9nc3RydHBzdHJlYW1wYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4NDhjNC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHN0cmVhbXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cHN0cmVhbXBheQotICoKLSAqIEltcGxlbWVudHMgc3RyZWFtIHBheWxvYWRpbmcgb2YgUlRQIGFuZCBSVENQIHBhY2tldHMgZm9yIGNvbm5lY3Rpb24tb3JpZW50ZWQKLSAqIHRyYW5zcG9ydCBwcm90b2NvbHMgYWNjb3JkaW5nIHRvIFJGQzQ1NzEuCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgYXVkaW90ZXN0c3JjICEgImF1ZGlvL3gtcmF3LHJhdGU9NDgwMDAiICEgdm9yYmlzZW5jICEgcnRwdm9yYmlzcGF5IGNvbmZpZy1pbnRlcnZhbD0xICEgcnRwc3RyZWFtcGF5ICEgdGNwc2VydmVyc2luayBwb3J0PTU2NzgKLSAqIGdzdC1sYXVuY2gtMS4wIHRjcGNsaWVudHNyYyBwb3J0PTU2NzggaG9zdD0xMjcuMC4wLjEgZG8tdGltZXN0YW1wPXRydWUgISAiYXBwbGljYXRpb24veC1ydHAtc3RyZWFtLG1lZGlhPWF1ZGlvLGNsb2NrLXJhdGU9NDgwMDAsZW5jb2RpbmctbmFtZT1WT1JCSVMiICEgcnRwc3RyZWFtZGVwYXkgISBydHB2b3JiaXNkZXBheSAhIGRlY29kZWJpbiAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RydHBzdHJlYW1wYXkuaCIKLQotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF9zdHJlYW1fcGF5X2RlYnVnCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChHU1RfQ0FUX0RFRkFVTFQpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwOyBhcHBsaWNhdGlvbi94LXJ0Y3A7ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtc3J0cDsgYXBwbGljYXRpb24veC1zcnRjcCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW07IGFwcGxpY2F0aW9uL3gtcnRjcC1zdHJlYW07ICIKLSAgICAgICAgImFwcGxpY2F0aW9uL3gtc3J0cC1zdHJlYW07IGFwcGxpY2F0aW9uL3gtc3J0Y3Atc3RyZWFtIikKLSAgICApOwotCi0jZGVmaW5lIHBhcmVudF9jbGFzcyBnc3RfcnRwX3N0cmVhbV9wYXlfcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBTdHJlYW1QYXksIGdzdF9ydHBfc3RyZWFtX3BheSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3N0cmVhbV9wYXlfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3N0cmVhbV9wYXlfc2lua19jaGFpbiAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogaW5idWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfc3RyZWFtX3BheV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc3RyZWFtX3BheV9jbGFzc19pbml0IChHc3RSdHBTdHJlYW1QYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfc3RyZWFtX3BheV9kZWJ1ZywgInJ0cHN0cmVhbXBheSIsIDAsCi0gICAgICAiUlRQIHN0cmVhbSBwYXlsb2FkZXIiKTsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBTdHJlYW0gUGF5bG9hZGluZyIsICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yayIsCi0gICAgICAiUGF5bG9hZHMgUlRQL1JUQ1AgcGFja2V0cyBmb3Igc3RyZWFtaW5nIHByb3RvY29scyBhY2NvcmRpbmcgdG8gUkZDNDU3MSIsCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuQGNlbnRyaWN1bGFyLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3N0cmVhbV9wYXlfaW5pdCAoR3N0UnRwU3RyZWFtUGF5ICogc2VsZikKLXsKLSAgc2VsZi0+c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zdHJlYW1fcGF5X3NpbmtfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zdHJlYW1fcGF5X3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNlbGYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zdHJlYW1fcGF5X3NpbmtfcXVlcnkpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbGYpLCBzZWxmLT5zaW5rcGFkKTsKLQotICBzZWxmLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY190ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChzZWxmLT5zcmNwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyY3BhZCk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfc3RyZWFtX3BheV9zaW5rX2dldF9jYXBzIChHc3RSdHBTdHJlYW1QYXkgKiBzZWxmLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICpwZWVyZmlsdGVyID0gTlVMTCwgKnBlZXJjYXBzLCAqdGVtcGw7Ci0gIEdzdENhcHMgKnJlczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGd1aW50IGksIG47Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIHBlZXJmaWx0ZXIgPSBnc3RfY2Fwc19jb3B5IChmaWx0ZXIpOwotICAgIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAocGVlcmZpbHRlcik7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAocGVlcmZpbHRlciwgaSk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0iKTsKLSAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRjcCIpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0Y3Atc3RyZWFtIik7Ci0gICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydHAiKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1zcnRwLXN0cmVhbSIpOwotICAgICAgZWxzZQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydGNwLXN0cmVhbSIpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHNlbGYtPnNpbmtwYWQpOwotICBwZWVyY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChzZWxmLT5zcmNwYWQsIHBlZXJmaWx0ZXIpOwotCi0gIGlmIChwZWVyY2FwcykgewotICAgIC8qIFJlbmFtZSBzdHJ1Y3R1cmUgbmFtZXMgKi8KLSAgICBwZWVyY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHBlZXJjYXBzKTsKLSAgICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKHBlZXJjYXBzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChwZWVyY2FwcywgaSk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cC1zdHJlYW0iKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydHAiKTsKLSAgICAgIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRjcC1zdHJlYW0iKSkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydGNwIik7Ci0gICAgICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydHAtc3RyZWFtIikpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0cCIpOwotICAgICAgZWxzZQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXNydGNwIik7Ci0gICAgfQotCi0gICAgcmVzID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKHBlZXJjYXBzLCB0ZW1wbCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICB9IGVsc2UgewotICAgIHJlcyA9IHRlbXBsOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJlcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmVzKTsKLSAgICByZXMgPSBpbnRlcnNlY3Rpb247Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmZpbHRlcik7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3RyZWFtX3BheV9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RSdHBTdHJlYW1QYXkgKnNlbGYgPSBHU1RfUlRQX1NUUkVBTV9QQVkgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiSGFuZGxpbmcgcXVlcnkgb2YgdHlwZSAnJXMnIiwKLSAgICAgIGdzdF9xdWVyeV90eXBlX2dldF9uYW1lIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZjYXBzKTsKLSAgICAgIGNhcHMgPSBnc3RfcnRwX3N0cmVhbV9wYXlfc2lua19nZXRfY2FwcyAoc2VsZiwgY2Fwcyk7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3RyZWFtX3BheV9zaW5rX3NldF9jYXBzIChHc3RSdHBTdHJlYW1QYXkgKiBzZWxmLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqb3RoZXJjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIG90aGVyY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvdGhlcmNhcHMsIDApOwotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwLXN0cmVhbSIpOwotICBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0Y3AiKSkKLSAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0Y3Atc3RyZWFtIik7Ci0gIGVsc2UgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0cCIpKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0cC1zdHJlYW0iKTsKLSAgZWxzZQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtc3J0Y3Atc3RyZWFtIik7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoc2VsZi0+c3JjcGFkLCBvdGhlcmNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAob3RoZXJjYXBzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3RyZWFtX3BheV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBTdHJlYW1QYXkgKnNlbGYgPSBHU1RfUlRQX1NUUkVBTV9QQVkgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiR290ICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgcmV0ID0gZ3N0X3J0cF9zdHJlYW1fcGF5X3Npbmtfc2V0X2NhcHMgKHNlbGYsIGNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfc3RyZWFtX3BheV9zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBpbmJ1ZikKLXsKLSAgR3N0UnRwU3RyZWFtUGF5ICpzZWxmID0gR1NUX1JUUF9TVFJFQU1fUEFZIChwYXJlbnQpOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3VpbnQ4IHNpemUxNlsyXTsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWYpOwotICBpZiAoc2l6ZSA+IEdfTUFYVUlOVDE2KSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIENPUkUsIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoIk9ubHkgYnVmZmVycyB1cCB0byAlZCBieXRlcyBzdXBwb3J0ZWQsIGdvdCAlIiBHX0dTSVpFX0ZPUk1BVCwKLSAgICAgICAgICAgIEdfTUFYVUlOVDE2LCBzaXplKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMik7Ci0KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAoc2l6ZTE2LCBzaXplKTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChvdXRidWYsIDAsIHNpemUxNiwgMik7Ci0KLSAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG91dGJ1ZiwgaW5idWYsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIDAsIC0xKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChpbmJ1Zik7Ci0KLSAgcmV0dXJuIGdzdF9wYWRfcHVzaCAoc2VsZi0+c3JjcGFkLCBvdXRidWYpOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9zdHJlYW1fcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwc3RyZWFtcGF5IiwKLSAgICAgIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX1JUUF9TVFJFQU1fUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwc3RyZWFtcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHN0cmVhbXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTQzNmE4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc3RyZWFtcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKiAKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSAKLSNpZm5kZWYgX19HU1RfUlRQX1NUUkVBTV9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9TVFJFQU1fUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1NUUkVBTV9QQVkgICAgICAgICAgICAoZ3N0X3J0cF9zdHJlYW1fcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfU1RSRUFNX1BBWShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9TVFJFQU1fUEFZLEdzdFJ0cFN0cmVhbVBheSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfU1RSRUFNX1BBWShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9TVFJFQU1fUEFZKSkKLSNkZWZpbmUgR1NUX1JUUF9TVFJFQU1fUEFZX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSAsR1NUX1RZUEVfUlRQX1NUUkVBTV9QQVksR3N0UnRwU3RyZWFtUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1NUUkVBTV9QQVlfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpICxHU1RfVFlQRV9SVFBfU1RSRUFNX1BBWSkpCi0jZGVmaW5lIEdTVF9SVFBfU1RSRUFNX1BBWV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaikgLEdTVF9UWVBFX1JUUF9TVFJFQU1fUEFZLEdzdFJ0cFN0cmVhbVBheUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFN0cmVhbVBheSAgICAgIEdzdFJ0cFN0cmVhbVBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBTdHJlYW1QYXlDbGFzcyBHc3RSdHBTdHJlYW1QYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBTdHJlYW1QYXkgewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFN0cmVhbVBheUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfc3RyZWFtX3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfc3RyZWFtX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9TVFJFQU1fUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMmViMWUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHBzdjN2ZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSAiZ3N0cnRwc3YzdmRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChydHBzdjN2ZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgcnRwc3YzdmRlcGF5X2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3N2M3ZfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXN2cSwgIiAic3ZxdmVyc2lvbiA9IChpbnQpIDMiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3N2M3ZfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcInZpZGVvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIHsgXCJYLVNWM1YtRVNcIiwgXCJYLVNPUkVOU09OLVZJREVPXCIgLCBcIlgtU09SRU5TT05WSURFT1wiICwgXCJYLVNvcmVuc29uVmlkZW9cIiB9IikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfc3Yzdl9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBTVjNWRGVwYXksIGdzdF9ydHBfc3Yzdl9kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3N2M3ZfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9zdjN2X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKmdzdF9ydHBfc3Yzdl9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1nYm9vbGVhbiBnc3RfcnRwX3N2M3ZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGZpbHRlciwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3N2M3ZfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwU1YzVkRlcGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdHJ0cGJhc2VkZXBheWxvYWRfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfc3Yzdl9kZXBheV9wcm9jZXNzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfc3Yzdl9kZXBheV9zZXRjYXBzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9zdjN2X2RlcGF5X2ZpbmFsaXplOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfc3Yzdl9kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9zdjN2X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfc3Yzdl9kZXBheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBTVlEzIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBTVlEzIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKG5vIFJGQykiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3N2M3ZfZGVwYXlfaW5pdCAoR3N0UnRwU1YzVkRlcGF5ICogcnRwc3YzdmRlcGF5KQotewotICBydHBzdjN2ZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3N2M3ZfZGVwYXlfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFNWM1ZEZXBheSAqcnRwc3YzdmRlcGF5OwotCi0gIHJ0cHN2M3ZkZXBheSA9IEdTVF9SVFBfU1YzVl9ERVBBWSAob2JqZWN0KTsKLQotICBnX29iamVjdF91bnJlZiAocnRwc3YzdmRlcGF5LT5hZGFwdGVyKTsKLSAgcnRwc3YzdmRlcGF5LT5hZGFwdGVyID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLS8qIG9ubHkgb24gdGhlIHNpbmsgKi8KLWdib29sZWFuCi1nc3RfcnRwX3N2M3ZfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGZpbHRlciwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZjbG9ja19yYXRlKSkKLSAgICBjbG9ja19yYXRlID0gOTAwMDA7ICAgICAgICAgLyogZGVmYXVsdCAqLwotICBmaWx0ZXItPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotCi0gIC8qIHdpbGwgc2V0IGNhcHMgbGF0ZXIgKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX3N2M3ZfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0UlRQQnVmZmVyICogcnRwKQotewotICBHc3RSdHBTVjNWRGVwYXkgKnJ0cHN2M3ZkZXBheTsKLSAgc3RhdGljIHN0cnVjdAotICB7Ci0gICAgZ3VpbnQgd2lkdGgsIGhlaWdodDsKLSAgfSByZXNvbHV0aW9uc1s3XSA9IHsKLSAgICB7Ci0gICAgMTYwLCAxMjh9LCB7Ci0gICAgMTI4LCA5Nn0sIHsKLSAgICAxNzYsIDE0NH0sIHsKLSAgICAzNTIsIDI4OH0sIHsKLSAgICA3MDQsIDU3Nn0sIHsKLSAgICAyNDAsIDE4MH0sIHsKLSAgICAzMjAsIDI0MH0KLSAgfTsKLSAgZ2ludCBwYXlsb2FkX2xlbjsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBnYm9vbGVhbiBNOwotICBnYm9vbGVhbiBDLCBTLCBFOwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIGd1aW50MTYgc2VxOwotCi0gIHJ0cHN2M3ZkZXBheSA9IEdTVF9SVFBfU1YzVl9ERVBBWSAoZGVwYXlsb2FkKTsKLQotCi0gIC8qIGZsdXNoIG9uIHNlcXVlbmNlIG51bWJlciBnYXBzICovCi0gIHNlcSA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKHJ0cCk7Ci0KLSAgR1NUX0RFQlVHICgidGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBzZXF1ZW5jZSBudW1iZXI6JWQiLAotICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9QVFMgKHJ0cC0+YnVmZmVyKSksIHNlcSk7Ci0KLSAgaWYgKHNlcSAhPSBydHBzdjN2ZGVwYXktPm5leHRzZXEpIHsKLSAgICBHU1RfREVCVUcgKCJTZXF1ZW5jZSBkaXNjb250aW51aXR5LCBjbGVhcmluZyBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cHN2M3ZkZXBheS0+YWRhcHRlcik7Ci0gIH0KLSAgcnRwc3YzdmRlcGF5LT5uZXh0c2VxID0gc2VxICsgMTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLSAgaWYgKHBheWxvYWRfbGVuIDwgMykKLSAgICBnb3RvIGJhZF9wYWNrZXQ7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIE0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApOwotCi0gIC8qIFRoaXMgaXMgYWxsIGEgZ3Vlc3M6Ci0gICAqICAgICAgICAgICAgICAgICAgICAgIDEgMSAxIDEgMSAxCi0gICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfDB8Q3xTfEV8MHwwfDB8MHwwfDB8MHwwfDB8MHwwfDB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKgotICAgKiBDOiBjb25maWcsIHBhY2tldCBjb250YWlucyBjb25maWcgaW5mbwotICAgKiBTOiBzdGFydCwgcGFja2V0IGNvbnRhaW5zIHN0YXJ0IG9mIGZyYW1lCi0gICAqIEU6IGVuZCwgcGFja2V0IGNvbnRhaW5zIGVuZCBvZiBmcmFtZQotICAgKi8KLSAgLyogdGhpcyBzZWVtcyB0byBpbmRpY2F0ZSBhIHBhY2tldCB3aXRoIGEgY29uZmlnIHN0cmluZyBzZW50IGJlZm9yZSBlYWNoCi0gICAqIGtleWZyYW1lICovCi0gIEMgPSAocGF5bG9hZFswXSAmIDB4NDApID09IDB4NDA7Ci0KLSAgLyogcmVkdW5kYW50IHdpdGggdGhlIFJUUCBtYXJrZXIgYml0ICovCi0gIFMgPSAocGF5bG9hZFswXSAmIDB4MjApID09IDB4MjA7Ci0gIEUgPSAocGF5bG9hZFswXSAmIDB4MTApID09IDB4MTA7Ci0KLSAgR1NUX0RFQlVHICgiTTolZCwgQzolZCwgUzolZCwgRTolZCIsIE0sIEMsIFMsIEUpOwotCi0gIEdTVF9NRU1EVU1QICgiaW5jb21pbmcgYnVmZmVyIiwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotCi0gIGlmIChHX1VOTElLRUxZIChDKSkgewotICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgR3N0QnVmZmVyICpjb2RlY19kYXRhOwotICAgIEdzdE1hcEluZm8gY21hcDsKLSAgICBndWludDggcmVzOwotCi0gICAgR1NUX0RFQlVHICgiQ29uZmlndXJhdGlvbiBwYWNrZXQiKTsKLQotICAgIC8qIGlmIHdlIGFscmVhZHkgaGF2ZSBjYXBzLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBGSVhNRSwgY2hlY2sgaWYKLSAgICAgKiBzb21ldGhpbmcgY2hhbmdlZC4gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRAotICAgICAgICAgICAgICAgIChkZXBheWxvYWQpKSkpIHsKLSAgICAgIEdTVF9ERUJVRyAoIkFscmVhZHkgY29uZmlndXJlZCwgc2tpcHBpbmcgY29uZmlnIHBhcnNpbmciKTsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotCi0gICAgcmVzID0gcGF5bG9hZFsyXSA+PiA1OwotCi0gICAgLyogd2lkdGggYW5kIGhlaWdodCwgYWNjb3JkaW5nIHRvIGh0dHA6Ly93aWtpLm11bHRpbWVkaWEuY3gvaW5kZXgucGhwP3RpdGxlPVNvcmVuc29uX1ZpZGVvXzEjU3RyZWFtX0Zvcm1hdF9BbmRfSGVhZGVyICovCi0gICAgaWYgKEdfTElLRUxZIChyZXMgPCA3KSkgewotICAgICAgcnRwc3YzdmRlcGF5LT53aWR0aCA9IHJlc29sdXRpb25zW3Jlc10ud2lkdGg7Ci0gICAgICBydHBzdjN2ZGVwYXktPmhlaWdodCA9IHJlc29sdXRpb25zW3Jlc10uaGVpZ2h0OwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBleHRlbmRlZCB3aWR0aC9oZWlnaHQsIHRoZXkncmUgY29udGFpbmVkIGluIHRoZSBmb2xsb3dpbmcgMjRiaXQgKi8KLSAgICAgIHJ0cHN2M3ZkZXBheS0+d2lkdGggPSAoKHBheWxvYWRbMl0gJiAweDFmKSA8PCA3KSB8IChwYXlsb2FkWzNdID4+IDEpOwotICAgICAgcnRwc3YzdmRlcGF5LT5oZWlnaHQgPQotICAgICAgICAgIChwYXlsb2FkWzNdICYgMHgxKSA8PCAxMSB8IHBheWxvYWRbNF0gPDwgMyB8IChwYXlsb2FkWzVdID4+IDUpOwotICAgIH0KLQotICAgIC8qIENvZGVjRGF0YSBuZWVkcyB0byBiZSAnU0VRSCcgKyBsZW4gKDMyYml0KSArIGRhdGEgYWNjb3JkaW5nIHRvCi0gICAgICogZmZtcGVnJ3MgbGliYXZjb2RlYy9zdnEzLmM6c3ZxM19kZWNvZGVfaW5pdCAqLwotICAgIGNvZGVjX2RhdGEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHBheWxvYWRfbGVuICsgNik7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGNvZGVjX2RhdGEsICZjbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBtZW1jcHkgKGNtYXAuZGF0YSwgIlNFUUgiLCA0KTsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChjbWFwLmRhdGEgKyA0LCBwYXlsb2FkX2xlbiAtIDIpOwotICAgIG1lbWNweSAoY21hcC5kYXRhICsgOCwgcGF5bG9hZCArIDIsIHBheWxvYWRfbGVuIC0gMik7Ci0gICAgR1NUX01FTURVTVAgKCJjb2RlY19kYXRhIiwgY21hcC5kYXRhLCBnc3RfYnVmZmVyX2dldF9zaXplIChjb2RlY19kYXRhKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoY29kZWNfZGF0YSwgJmNtYXApOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXN2cSIsCi0gICAgICAgICJzdnF2ZXJzaW9uIiwgR19UWVBFX0lOVCwgMywKLSAgICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgcnRwc3YzdmRlcGF5LT53aWR0aCwKLSAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIHJ0cHN2M3ZkZXBheS0+aGVpZ2h0LAotICAgICAgICAiY29kZWNfZGF0YSIsIEdTVF9UWVBFX0JVRkZFUiwgY29kZWNfZGF0YSwgTlVMTCk7Ci0gICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5bG9hZCksIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIEdTVF9ERUJVRyAoIkRlcGF5bG9hZGVyIG5vdyBjb25maWd1cmVkIik7Ci0KLSAgICBydHBzdjN2ZGVwYXktPmNvbmZpZ3VyZWQgPSBUUlVFOwotCi0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIGlmIChHX0xJS0VMWSAocnRwc3YzdmRlcGF5LT5jb25maWd1cmVkKSkgewotICAgIEdzdEJ1ZmZlciAqdG1wYnVmOwotCi0gICAgR1NUX0RFQlVHICgiU3RvcmluZyBpbmNvbWluZyBwYXlsb2FkIik7Ci0gICAgLyogc3RvcmUgZGF0YSBpbiBhZGFwdGVyLCBzdGlwIG9mZiAyIGJ5dGVzIGhlYWRlciAqLwotICAgIHRtcGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCAyLCAtMSk7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwc3YzdmRlcGF5LT5hZGFwdGVyLCB0bXBidWYpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKE0pKSB7Ci0gICAgICAvKiBmcmFtZSBpcyBjb21wbGV0ZWQ6IHB1c2ggY29udGVudHMgb2YgYWRhcHRlciAqLwotICAgICAgZ3VpbnQgYXZhaWw7Ci0KLSAgICAgIGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChydHBzdjN2ZGVwYXktPmFkYXB0ZXIpOwotICAgICAgR1NUX0RFQlVHICgiUmV0dXJuaW5nIGNvbXBsZXRlZCBvdXRwdXQgYnVmZmVyIFslZCBieXRlc10iLCBhdmFpbCk7Ci0gICAgICBvdXRidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAocnRwc3YzdmRlcGF5LT5hZGFwdGVyLCBhdmFpbCk7Ci0gICAgICBnc3RfcnRwX2Ryb3BfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc3YzdmRlcGF5KSwgb3V0YnVmLAotICAgICAgICAgIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nIChHU1RfTUVUQV9UQUdfVklERU9fU1RSKSk7Ci0gICAgfQotICB9Ci0KLWJlYWNoOgotICByZXR1cm4gb3V0YnVmOwotCi0gIC8qIEVSUk9SUyAqLwotYmFkX3BhY2tldDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cHN2M3ZkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJQYWNrZXQgd2FzIHRvbyBzaG9ydCIpKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfc3Yzdl9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cFNWM1ZEZXBheSAqcnRwc3YzdmRlcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwc3YzdmRlcGF5ID0gR1NUX1JUUF9TVjNWX0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfYWRhcHRlcl9jbGVhciAocnRwc3YzdmRlcGF5LT5hZGFwdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3N2M3ZfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cHN2M3ZkZXBheV9kZWJ1ZywgInJ0cHN2M3ZkZXBheSIsIDAsCi0gICAgICAiUlRQIFNWM1YgZGVwYXlsb2FkZXIiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHN2M3ZkZXBheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9TVjNWX0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHN2M3ZkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjg2ODRhLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwc3YzdmRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfU1YzVl9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1NWM1ZfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1NWM1ZfREVQQVkgXAotICAoZ3N0X3J0cF9zdjN2X2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfU1YzVl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9TVjNWX0RFUEFZLEdzdFJ0cFNWM1ZEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfU1YzVl9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU1YzVl9ERVBBWSxHc3RSdHBTVjNWRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfU1YzVl9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9TVjNWX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TVjNWX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9TVjNWX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFNWM1ZEZXBheSBHc3RSdHBTVjNWRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU1YzVkRlcGF5Q2xhc3MgR3N0UnRwU1YzVkRlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwU1YzVkRlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgZGVwYXlsb2FkOwotCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0KLSAgZ2Jvb2xlYW4gY29uZmlndXJlZDsKLSAgCi0gIGd1aW50MTYgbmV4dHNlcTsKLSAgZ3VpbnQgd2lkdGg7Ci0gIGd1aW50IGhlaWdodDsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwU1YzVkRlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfc3Yzdl9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfc3Yzdl9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9TVjNWX0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGM1MGNmLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDcwNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RydHB0aGVvcmFkZXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cHRoZW9yYWRlcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHB0aGVvcmFkZXBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdGhlb3JhX2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlRIRU9SQVwiIgotICAgICAgICAvKiBBbGwgcmVxdWlyZWQgcGFyYW1ldGVycyAKLSAgICAgICAgICoKLSAgICAgICAgICogInNhbXBsaW5nID0gKHN0cmluZykgeyAiWUNiQ3ItNDoyOjAiLCAiWUNiQ3ItNDoyOjIiLCAiWUNiQ3ItNDo0OjQiIH0gIgotICAgICAgICAgKiAid2lkdGggPSAoc3RyaW5nKSBbMSwgMTA0ODU2MV0gKG11bHRpcGxlcyBvZiAxNikgIgotICAgICAgICAgKiAiaGVpZ2h0ID0gKHN0cmluZykgWzEsIDEwNDg1NjFdIChtdWx0aXBsZXMgb2YgMTYpICIKLSAgICAgICAgICogImRlbGl2ZXJ5LW1ldGhvZCA9IChzdHJpbmcpIHsgaW5saW5lLCBpbl9iYW5kLCBvdXRfYmFuZC88c3BlY2lmaWNfbmFtZT4gfSAiIAotICAgICAgICAgKiAiY29uZmlndXJhdGlvbiA9IChzdHJpbmcpIEFOWSIgCi0gICAgICAgICAqLwotICAgICAgICAvKiBBbGwgb3B0aW9uYWwgcGFyYW1ldGVycwotICAgICAgICAgKgotICAgICAgICAgKiAiY29uZmlndXJhdGlvbi11cmkgPSIgCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF90aGVvcmFfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXRoZW9yYSIpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfcnRwX3RoZW9yYV9kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBUaGVvcmFEZXBheSwgZ3N0X3J0cF90aGVvcmFfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdGhlb3JhX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF90aGVvcmFfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdGhlb3JhX2RlcGF5X3BhY2tldF9sb3N0IChHc3RSVFBCYXNlRGVwYXlsb2FkICoKLSAgICBkZXBheWxvYWQsIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3RoZW9yYV9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX3RoZW9yYV9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF90aGVvcmFfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwVGhlb3JhRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX3RoZW9yYV9kZXBheV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX3RoZW9yYV9kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF90aGVvcmFfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3RoZW9yYV9kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wYWNrZXRfbG9zdCA9IGdzdF9ydHBfdGhlb3JhX2RlcGF5X3BhY2tldF9sb3N0OwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdGhlb3JhX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3RoZW9yYV9kZXBheV9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFRoZW9yYSBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgVGhlb3JhIHZpZGVvIGZyb20gUlRQIHBhY2tldHMgKGRyYWZ0LTAxIG9mIFJGQyBYWFhYKSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwdGhlb3JhZGVwYXlfZGVidWcsICJydHB0aGVvcmFkZXBheSIsIDAsCi0gICAgICAiVGhlb3JhIFJUUCBEZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF90aGVvcmFfZGVwYXlfaW5pdCAoR3N0UnRwVGhlb3JhRGVwYXkgKiBydHB0aGVvcmFkZXBheSkKLXsKLSAgcnRwdGhlb3JhZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2NvbmZpZyAoR3N0UnRwVGhlb3JhQ29uZmlnICogY29uZmlnKQotewotICBnX2xpc3RfZnJlZV9mdWxsIChjb25maWctPmhlYWRlcnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIGdfZnJlZSAoY29uZmlnKTsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfaW5kZW50cyAoR3N0UnRwVGhlb3JhRGVwYXkgKiBydHB0aGVvcmFkZXBheSkKLXsKLSAgZ19saXN0X2ZyZWVfZnVsbCAocnRwdGhlb3JhZGVwYXktPmNvbmZpZ3MsIChHRGVzdHJveU5vdGlmeSkgZnJlZV9jb25maWcpOwotICBydHB0aGVvcmFkZXBheS0+Y29uZmlncyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3RoZW9yYV9kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwVGhlb3JhRGVwYXkgKnJ0cHRoZW9yYWRlcGF5ID0gR1NUX1JUUF9USEVPUkFfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cHRoZW9yYWRlcGF5LT5hZGFwdGVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF90aGVvcmFfZGVwYXlfcGFyc2VfY29uZmlndXJhdGlvbiAoR3N0UnRwVGhlb3JhRGVwYXkgKiBydHB0aGVvcmFkZXBheSwKLSAgICBHc3RCdWZmZXIgKiBjb25mYnVmKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQzMiBudW1faGVhZGVyczsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ2ludCBpLCBqOwotCi0gIGdzdF9idWZmZXJfbWFwIChjb25mYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFkZXBheSwgImNvbmZpZyBzaXplICUiIEdfR1NJWkVfRk9STUFULCBzaXplKTsKLQotICAvKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHBhY2tlZCBoZWFkZXJzICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZWQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZWQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgaWYgKHNpemUgPCA0KQotICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gIG51bV9oZWFkZXJzID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgc2l6ZSAtPSA0OwotICBkYXRhICs9IDQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhZGVwYXksICJoYXZlICV1IGhlYWRlcnMiLCBudW1faGVhZGVycyk7Ci0KLSAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgIElkZW50ICAgICAgICAgICAgICAgICAgICAgICB8IGxlbmd0aCAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgfCBuLiBvZiBoZWFkZXJzIHwgICAgbGVuZ3RoMSAgICB8ICAgIGxlbmd0aDIgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBJZGVudGlmaWNhdGlvbiBIZWFkZXIgICAgICAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgfCAgICAgICAgIENvbW1lbnQgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgZm9yIChpID0gMDsgaSA8IG51bV9oZWFkZXJzOyBpKyspIHsKLSAgICBndWludDMyIGlkZW50OwotICAgIGd1aW50MTYgbGVuZ3RoOwotICAgIGd1aW50OCBuX2hlYWRlcnMsIGI7Ci0gICAgR3N0UnRwVGhlb3JhQ29uZmlnICpjb25mOwotICAgIGd1aW50ICpoX3NpemVzOwotICAgIGd1aW50IGV4dHJhID0gMTsKLQotICAgIGlmIChzaXplIDwgNikKLSAgICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gICAgaWRlbnQgPSAoZGF0YVswXSA8PCAxNikgfCAoZGF0YVsxXSA8PCA4KSB8IGRhdGFbMl07Ci0gICAgbGVuZ3RoID0gKGRhdGFbM10gPDwgOCkgfCBkYXRhWzRdOwotICAgIG5faGVhZGVycyA9IGRhdGFbNV07Ci0gICAgc2l6ZSAtPSA2OwotICAgIGRhdGEgKz0gNjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYWRlcGF5LAotICAgICAgICAiaGVhZGVyICVkLCBpZGVudCAweCUwOHgsIGxlbmd0aCAldSwgbGVmdCAlIiBHX0dTSVpFX0ZPUk1BVCwgaSwgaWRlbnQsCi0gICAgICAgIGxlbmd0aCwgc2l6ZSk7Ci0KLSAgICAvKiBGSVhNRSBjaGVjayBpZiB3ZSBhbHJlYWR5IGdvdCB0aGlzIGlkZW50ICovCi0KLSAgICAvKiBsZW5ndGggbWlnaHQgYWxzbyBpbmNsdWRlIGNvdW50IG9mIGZvbGxvd2luZyBzaXplIGZpZWxkcyAqLwotICAgIGlmIChzaXplIDwgbGVuZ3RoICYmIHNpemUgKyAxICE9IGxlbmd0aCkKLSAgICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gICAgLyogcmVhZCBoZWFkZXIgc2l6ZXMgd2UgcmVhZCAyIHNpemVzLCB0aGUgdGhpcmQgc2l6ZSAoZm9yIHdoaWNoIHdlIGFsbG9jYXRlCi0gICAgICogc3BhY2UpIG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSB0b3RhbCBwYWNrZWQgaGVhZGVyIGxlbmd0aC4gKi8KLSAgICBoX3NpemVzID0gZ19uZXdhIChndWludCwgbl9oZWFkZXJzICsgMSk7Ci0gICAgZm9yIChqID0gMDsgaiA8IG5faGVhZGVyczsgaisrKSB7Ci0gICAgICBndWludCBoX3NpemU7Ci0KLSAgICAgIGhfc2l6ZSA9IDA7Ci0gICAgICBkbyB7Ci0gICAgICAgIGlmIChzaXplIDwgMSkKLSAgICAgICAgICBnb3RvIHRvb19zbWFsbDsKLSAgICAgICAgYiA9ICpkYXRhKys7Ci0gICAgICAgIHNpemUtLTsKLSAgICAgICAgZXh0cmErKzsKLSAgICAgICAgaF9zaXplID0gKGhfc2l6ZSA8PCA3KSB8IChiICYgMHg3Zik7Ci0gICAgICB9IHdoaWxlIChiICYgMHg4MCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFkZXBheSwgImhlYWRlcnMgJWQ6IHNpemU6ICV1IiwgaiwgaF9zaXplKTsKLSAgICAgIGhfc2l6ZXNbal0gPSBoX3NpemU7Ci0gICAgICBsZW5ndGggLT0gaF9zaXplOwotICAgIH0KLSAgICAvKiBsYXN0IGhlYWRlciBsZW5ndGggaXMgdGhlIHJlbWFpbmluZyBzcGFjZSAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYWRlcGF5LCAibGFzdCBoZWFkZXIgc2l6ZTogJXUiLCBsZW5ndGgpOwotICAgIGhfc2l6ZXNbal0gPSBsZW5ndGg7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFkZXBheSwgInByZXBhcmluZyBoZWFkZXJzIik7Ci0gICAgY29uZiA9IGdfbmV3MCAoR3N0UnRwVGhlb3JhQ29uZmlnLCAxKTsKLSAgICBjb25mLT5pZGVudCA9IGlkZW50OwotCi0gICAgZm9yIChqID0gMDsgaiA8PSBuX2hlYWRlcnM7IGorKykgewotICAgICAgZ3VpbnQgaF9zaXplOwotCi0gICAgICBoX3NpemUgPSBoX3NpemVzW2pdOwotICAgICAgaWYgKHNpemUgPCBoX3NpemUpIHsKLSAgICAgICAgaWYgKGogIT0gbl9oZWFkZXJzIHx8IHNpemUgKyBleHRyYSAhPSBoX3NpemUpIHsKLSAgICAgICAgICBmcmVlX2NvbmZpZyAoY29uZik7Ci0gICAgICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogb3RoZXJ3aXNlIG1lYW5zIHRoYXQgb3ZlcmFsbCBsZW5ndGggZmllbGQgY29udGFpbmVkIHRvdGFsIGxlbmd0aCwKLSAgICAgICAgICAgKiBpbmNsdWRpbmcgZXh0cmEgZmllbGRzICovCi0gICAgICAgICAgaF9zaXplIC09IGV4dHJhOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYWRlcGF5LCAicmVhZGluZyBoZWFkZXIgJWQsIHNpemUgJXUiLCBqLAotICAgICAgICAgIGhfc2l6ZSk7Ci0KLSAgICAgIGJ1ZiA9Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoY29uZmJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgZGF0YSAtIG1hcC5kYXRhLAotICAgICAgICAgIGhfc2l6ZSk7Ci0gICAgICBjb25mLT5oZWFkZXJzID0gZ19saXN0X2FwcGVuZCAoY29uZi0+aGVhZGVycywgYnVmKTsKLSAgICAgIGRhdGEgKz0gaF9zaXplOwotICAgICAgc2l6ZSAtPSBoX3NpemU7Ci0gICAgfQotICAgIHJ0cHRoZW9yYWRlcGF5LT5jb25maWdzID0gZ19saXN0X2FwcGVuZCAocnRwdGhlb3JhZGVwYXktPmNvbmZpZ3MsIGNvbmYpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoY29uZmJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGNvbmZidWYpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdG9vX3NtYWxsOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhZGVwYXksICJjb25maWd1cmF0aW9uIHRvbyBzbWFsbCIpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGNvbmZidWYsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGNvbmZidWYpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdGhlb3JhX2RlcGF5X3BhcnNlX2luYmFuZF9jb25maWd1cmF0aW9uIChHc3RSdHBUaGVvcmFEZXBheSAqCi0gICAgcnRwdGhlb3JhZGVwYXksIGd1aW50IGlkZW50LCBndWludDggKiBjb25maWd1cmF0aW9uLCBndWludCBzaXplLAotICAgIGd1aW50IGxlbmd0aCkKLXsKLSAgR3N0QnVmZmVyICpjb25mYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IDQpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiB0cmFuc2Zvcm0gaW5saW5lIHRvIG91dC1vZi1iYW5kIGFuZCBwYXJzZSB0aGF0IG9uZSAqLwotICBjb25mYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplICsgOSk7Ci0gIGdzdF9idWZmZXJfbWFwIChjb25mYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgLyogMSBoZWFkZXIgKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9CRSAobWFwLmRhdGEsIDEpOwotICAvKiB3cml0ZSBJZGVudCAqLwotICBHU1RfV1JJVEVfVUlOVDI0X0JFIChtYXAuZGF0YSArIDQsIGlkZW50KTsKLSAgLyogd3JpdGUgc29ydC1vZi1sZW5ndGggKi8KLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAobWFwLmRhdGEgKyA3LCBsZW5ndGgpOwotICAvKiBjb3B5IHJlbWFpbmRlciAqLwotICBtZW1jcHkgKG1hcC5kYXRhICsgOSwgY29uZmlndXJhdGlvbiwgc2l6ZSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGNvbmZidWYsICZtYXApOwotCi0gIHJldHVybiBnc3RfcnRwX3RoZW9yYV9kZXBheV9wYXJzZV9jb25maWd1cmF0aW9uIChydHB0aGVvcmFkZXBheSwgY29uZmJ1Zik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF90aGVvcmFfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RSdHBUaGVvcmFEZXBheSAqcnRwdGhlb3JhZGVwYXk7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIGNvbnN0IGdjaGFyICpjb25maWd1cmF0aW9uOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwdGhlb3JhZGVwYXkgPSBHU1RfUlRQX1RIRU9SQV9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBydHB0aGVvcmFkZXBheS0+bmVlZHNfa2V5ZnJhbWUgPSBGQUxTRTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAvKiByZWFkIGFuZCBwYXJzZSBjb25maWd1cmF0aW9uIHN0cmluZyAqLwotICBjb25maWd1cmF0aW9uID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJjb25maWd1cmF0aW9uIik7Ci0gIGlmIChjb25maWd1cmF0aW9uKSB7Ci0gICAgR3N0QnVmZmVyICpjb25mYnVmOwotICAgIGd1aW50OCAqZGF0YTsKLSAgICBnc2l6ZSBzaXplOwotCi0gICAgLyogZGVzZXJpYWxpemUgYmFzZTY0IHRvIGJ1ZmZlciAqLwotICAgIGRhdGEgPSBnX2Jhc2U2NF9kZWNvZGUgKGNvbmZpZ3VyYXRpb24sICZzaXplKTsKLQotICAgIGNvbmZidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGNvbmZidWYsCi0gICAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIHNpemUsIDAsIHNpemUsIGRhdGEsIGdfZnJlZSkpOwotCi0gICAgaWYgKCFnc3RfcnRwX3RoZW9yYV9kZXBheV9wYXJzZV9jb25maWd1cmF0aW9uIChydHB0aGVvcmFkZXBheSwgY29uZmJ1ZikpCi0gICAgICBnb3RvIGludmFsaWRfY29uZmlndXJhdGlvbjsKLSAgfQotCi0gIC8qIHNldCBjYXBzIG9uIHBhZCBhbmQgb24gaGVhZGVyICovCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgidmlkZW8veC10aGVvcmEiKTsKLSAgcmVzID0gZ3N0X3BhZF9zZXRfY2FwcyAoZGVwYXlsb2FkLT5zcmNwYWQsIHNyY2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgLyogQ2xvY2sgcmF0ZSBpcyBhbHdheXMgOTAwMDAgYWNjb3JkaW5nIHRvIGRyYWZ0LWJhcmJhdG8tYXZ0LXJ0cC10aGVvcmEtMDEgKi8KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gOTAwMDA7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfY29uZmlndXJhdGlvbjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cHRoZW9yYWRlcGF5LCAiaW52YWxpZCBjb25maWd1cmF0aW9uIHNwZWNpZmllZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdGhlb3JhX2RlcGF5X3N3aXRjaF9jb2RlYm9vayAoR3N0UnRwVGhlb3JhRGVwYXkgKiBydHB0aGVvcmFkZXBheSwKLSAgICBndWludDMyIGlkZW50KQotewotICBHTGlzdCAqd2FsazsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgZm9yICh3YWxrID0gcnRwdGhlb3JhZGVwYXktPmNvbmZpZ3M7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSdHBUaGVvcmFDb25maWcgKmNvbmYgPSAoR3N0UnRwVGhlb3JhQ29uZmlnICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoY29uZi0+aWRlbnQgPT0gaWRlbnQpIHsKLSAgICAgIEdMaXN0ICpoZWFkZXJzOwotCi0gICAgICAvKiBGSVhNRSwgcmVtb3ZlIHBhZHMsIGNyZWF0ZSBuZXcgcGFkLi4gKi8KLQotICAgICAgLyogcHVzaCBvdXQgYWxsIHRoZSBoZWFkZXJzICovCi0gICAgICBmb3IgKGhlYWRlcnMgPSBjb25mLT5oZWFkZXJzOyBoZWFkZXJzOyBoZWFkZXJzID0gZ19saXN0X25leHQgKGhlYWRlcnMpKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqaGVhZGVyID0gR1NUX0JVRkZFUl9DQVNUIChoZWFkZXJzLT5kYXRhKTsKLQotICAgICAgICBnc3RfYnVmZmVyX3JlZiAoaGVhZGVyKTsKLSAgICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHB0aGVvcmFkZXBheSksCi0gICAgICAgICAgICBoZWFkZXIpOwotICAgICAgfQotICAgICAgLyogcmVtZW1iZXIgdGhlIGN1cnJlbnQgY29uZmlnICovCi0gICAgICBydHB0aGVvcmFkZXBheS0+Y29uZmlnID0gY29uZjsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgfQotICB9Ci0gIGlmICghcmVzKSB7Ci0gICAgLyogd2UgZG9uJ3Qga25vdyBhYm91dCB0aGUgaGVhZGVycywgZmlndXJlIG91dCBhbiBhbHRlcm5hdGl2ZSBtZXRob2QgZm9yCi0gICAgICogZ2V0dGluZyB0aGUgY29kZWJvb2tzLiBGSVhNRSwgZmFpbCBmb3Igbm93LiAqLwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF90aGVvcmFfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cFRoZW9yYURlcGF5ICpydHB0aGVvcmFkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnaW50IHBheWxvYWRfbGVuOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpwYXlsb2FkX2J1ZmZlciA9IE5VTEw7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQzMiBoZWFkZXIsIGlkZW50OwotICBndWludDggRiwgVERULCBwYWNrZXRzOwotICBndWludCBsZW5ndGg7Ci0KLSAgcnRwdGhlb3JhZGVwYXkgPSBHU1RfUlRQX1RIRU9SQV9ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJnb3QgUlRQIHBhY2tldCBvZiBzaXplICVkIiwgcGF5bG9hZF9sZW4pOwotCi0gIC8qIHdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyBmb3IgdGhlIHBhY2tldCBoZWFkZXIgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHBheWxvYWRfbGVuIDwgNCkpCi0gICAgZ290byBwYWNrZXRfc2hvcnQ7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIGhlYWRlciA9IEdTVF9SRUFEX1VJTlQzMl9CRSAocGF5bG9hZCk7Ci0gIC8qCi0gICAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICAgIElkZW50ICAgICAgICAgICAgICAgICAgICAgfCBGIHxURFR8IyBwa3RzLnwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICoKLSAgICogRjogRnJhZ21lbnQgdHlwZSAoMD1ub25lLCAxPXN0YXJ0LCAyPWNvbnQsIDM9ZW5kKQotICAgKiBURFQ6IFRoZW9yYSBkYXRhIHR5cGUgKDA9dGhlb3JhLCAxPWNvbmZpZywgMj1jb21tZW50LCAzPXJlc2VydmVkKQotICAgKiBwa3RzOiBudW1iZXIgb2YgcGFja2V0cy4KLSAgICovCi0gIFREVCA9IChoZWFkZXIgJiAweDMwKSA+PiA0OwotICBpZiAoR19VTkxJS0VMWSAoVERUID09IDMpKQotICAgIGdvdG8gaWdub3JlX3Jlc2VydmVkOwotCi0gIGlkZW50ID0gKGhlYWRlciA+PiA4KSAmIDB4ZmZmZmZmOwotICBGID0gKGhlYWRlciAmIDB4YzApID4+IDY7Ci0gIHBhY2tldHMgPSAoaGVhZGVyICYgMHhmKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJpZGVudDogMHglMDh4LCBGOiAlZCwgVERUOiAlZCwgcGFja2V0czogJWQiLAotICAgICAgaWRlbnQsIEYsIFREVCwgcGFja2V0cyk7Ci0KLSAgaWYgKFREVCA9PSAwKSB7Ci0gICAgZ2Jvb2xlYW4gZG9fc3dpdGNoID0gRkFMU0U7Ci0KLSAgICAvKiB3ZSBoYXZlIGEgcmF3IHBheWxvYWQsIGZpbmQgdGhlIGNvZGVib29rIGZvciB0aGUgaWRlbnQgKi8KLSAgICBpZiAoIXJ0cHRoZW9yYWRlcGF5LT5jb25maWcpIHsKLSAgICAgIC8qIHdlIGRvbid0IGhhdmUgYW4gYWN0aXZlIGNvZGVib29rLCBmaW5kIHRoZSBjb2RlYm9vayBhbmQKLSAgICAgICAqIGFjdGl2YXRlIGl0ICovCi0gICAgICBkb19zd2l0Y2ggPSBUUlVFOwotICAgIH0gZWxzZSBpZiAocnRwdGhlb3JhZGVwYXktPmNvbmZpZy0+aWRlbnQgIT0gaWRlbnQpIHsKLSAgICAgIC8qIGNvZGVib29rIGNoYW5nZWQgKi8KLSAgICAgIGRvX3N3aXRjaCA9IFRSVUU7Ci0gICAgfQotICAgIGlmIChkb19zd2l0Y2gpIHsKLSAgICAgIGlmICghZ3N0X3J0cF90aGVvcmFfZGVwYXlfc3dpdGNoX2NvZGVib29rIChydHB0aGVvcmFkZXBheSwgaWRlbnQpKQotICAgICAgICBnb3RvIHN3aXRjaF9mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgLyogZnJhZ21lbnRlZCBwYWNrZXRzLCBhc3NlbWJsZSAqLwotICBpZiAoRiAhPSAwKSB7Ci0gICAgR3N0QnVmZmVyICp2ZGF0YTsKLQotICAgIGlmIChGID09IDEpIHsKLSAgICAgIC8qIGlmIHdlIHN0YXJ0IGEgcGFja2V0LCBjbGVhciBhZGFwdGVyIGFuZCBzdGFydCBhc3NlbWJsaW5nLiAqLwotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cHRoZW9yYWRlcGF5LT5hZGFwdGVyKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgInN0YXJ0IGFzc2VtYmxlIik7Ci0gICAgICBydHB0aGVvcmFkZXBheS0+YXNzZW1ibGluZyA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKCFydHB0aGVvcmFkZXBheS0+YXNzZW1ibGluZykKLSAgICAgIGdvdG8gbm9fb3V0cHV0OwotCi0gICAgLyogc2tpcCBoZWFkZXIgYW5kIGxlbmd0aC4gKi8KLSAgICB2ZGF0YSA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCA2LCAtMSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJhc3NlbWJsZSB0aGVvcmEgcGFja2V0Iik7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwdGhlb3JhZGVwYXktPmFkYXB0ZXIsIHZkYXRhKTsKLQotICAgIC8qIHBhY2tldCBpcyBub3QgY29tcGxldGUsIHdlIGFyZSBkb25lICovCi0gICAgaWYgKEYgIT0gMykKLSAgICAgIGdvdG8gbm9fb3V0cHV0OwotCi0gICAgLyogY29uc3RydWN0IGFzc2VtYmxlZCBidWZmZXIgKi8KLSAgICBsZW5ndGggPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cHRoZW9yYWRlcGF5LT5hZGFwdGVyKTsKLSAgICBwYXlsb2FkX2J1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHB0aGVvcmFkZXBheS0+YWRhcHRlciwgbGVuZ3RoKTsKLSAgfSBlbHNlIHsKLSAgICBsZW5ndGggPSAwOwotICAgIHBheWxvYWRfYnVmZmVyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfc3ViYnVmZmVyIChydHAsIDQsIC0xKTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImFzc2VtYmxlIGRvbmUsIHBheWxvYWRfbGVuICVkIiwgcGF5bG9hZF9sZW4pOwotCi0gIGdzdF9idWZmZXJfbWFwIChwYXlsb2FkX2J1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcGF5bG9hZCA9IG1hcC5kYXRhOwotICBwYXlsb2FkX2xlbiA9IG1hcC5zaXplOwotCi0gIC8qIHdlIG5vdCBhc3NlbWJsaW5nIGFueW1vcmUgbm93ICovCi0gIHJ0cHRoZW9yYWRlcGF5LT5hc3NlbWJsaW5nID0gRkFMU0U7Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChydHB0aGVvcmFkZXBheS0+YWRhcHRlcik7Ci0KLSAgLyogcGF5bG9hZCBub3cgcG9pbnRzIHRvIGEgbGVuZ3RoIHdpdGggdGhhdCBtYW55IHRoZW9yYSBkYXRhIGJ5dGVzLgotICAgKiBJdGVyYXRlIG92ZXIgdGhlIHBhY2tldHMgYW5kIHNlbmQgdGhlbSBvdXQuCi0gICAqCi0gICAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICBsZW5ndGggICAgICAgICAgICB8ICAgICAgICAgIHRoZW9yYSBkYXRhICAgICAgICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgICAgICAgICAgICB0aGVvcmEgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgIGxlbmd0aCAgICAgICAgICAgICB8ICAgbmV4dCB0aGVvcmEgcGFja2V0IGRhdGEgICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgICAgICAgICAgICB0aGVvcmEgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsqCi0gICAqLwotICB3aGlsZSAocGF5bG9hZF9sZW4gPj0gMikgewotICAgIC8qIElmIGxlbmd0aCBpcyBub3QgMCwgd2UgaGF2ZSBhIHJlYXNzZW1ibGVkIHBhY2tldCBmb3Igd2hpY2ggd2UKLSAgICAgKiBjYWxjdWxhdGVkIHRoZSBsZW5ndGggYWxyZWFkeSBhbmQgZG9uJ3QgaGF2ZSB0byBza2lwIG92ZXIgdGhlCi0gICAgICogbGVuZ3RoIGZpZWxkIGFueW1vcmUKLSAgICAgKi8KLSAgICBpZiAobGVuZ3RoID09IDApIHsKLSAgICAgIGxlbmd0aCA9IEdTVF9SRUFEX1VJTlQxNl9CRSAocGF5bG9hZCk7Ci0gICAgICBwYXlsb2FkICs9IDI7Ci0gICAgICBwYXlsb2FkX2xlbiAtPSAyOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgInJlYWQgbGVuZ3RoICV1LCBhdmFpbDogJWQiLCBsZW5ndGgsCi0gICAgICAgIHBheWxvYWRfbGVuKTsKLQotICAgIC8qIHNraXAgcGFja2V0IGlmIHNvbWV0aGluZyBvZGQgaGFwcGVucyAqLwotICAgIGlmIChHX1VOTElLRUxZIChsZW5ndGggPiBwYXlsb2FkX2xlbikpCi0gICAgICBnb3RvIGxlbmd0aF9zaG9ydDsKLQotICAgIC8qIGhhbmRsZSBpbi1iYW5kIGNvbmZpZ3VyYXRpb24gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoVERUID09IDEpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFkZXBheSwgImluLWJhbmQgY29uZmlndXJhdGlvbiIpOwotICAgICAgaWYgKCFnc3RfcnRwX3RoZW9yYV9kZXBheV9wYXJzZV9pbmJhbmRfY29uZmlndXJhdGlvbiAocnRwdGhlb3JhZGVwYXksCi0gICAgICAgICAgICAgIGlkZW50LCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgbGVuZ3RoKSkKLSAgICAgICAgZ290byBpbnZhbGlkX2NvbmZpZ3VyYXRpb247Ci0gICAgICBnb3RvIG5vX291dHB1dDsKLSAgICB9Ci0KLSAgICAvKiBjcmVhdGUgYnVmZmVyIGZvciBwYWNrZXQgKi8KLSAgICBvdXRidWYgPQotICAgICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChwYXlsb2FkX2J1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKLSAgICAgICAgcGF5bG9hZCAtIG1hcC5kYXRhLCBsZW5ndGgpOwotCi0gICAgaWYgKHBheWxvYWRfbGVuID4gMCAmJiAocGF5bG9hZFswXSAmIDB4QzApID09IDB4MCkgewotICAgICAgcnRwdGhlb3JhZGVwYXktPm5lZWRzX2tleWZyYW1lID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotICAgIH0KLQotICAgIHBheWxvYWQgKz0gbGVuZ3RoOwotICAgIHBheWxvYWRfbGVuIC09IGxlbmd0aDsKLSAgICAvKiBtYWtlIHN1cmUgdG8gcmVhZCBuZXh0IGxlbmd0aCAqLwotICAgIGxlbmd0aCA9IDA7Ci0KLSAgICByZXQgPSBnc3RfcnRwX2Jhc2VfZGVwYXlsb2FkX3B1c2ggKGRlcGF5bG9hZCwgb3V0YnVmKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAocnRwdGhlb3JhZGVwYXktPm5lZWRzX2tleWZyYW1lKQotICAgIGdvdG8gcmVxdWVzdF9rZXlmcmFtZTsKLQotb3V0Ogotbm9fb3V0cHV0OgotCi0gIGlmIChwYXlsb2FkX2J1ZmZlcikgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKHBheWxvYWRfYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChwYXlsb2FkX2J1ZmZlcik7Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLQotICAvKiBFUk9SUlMgKi8KLXN3aXRjaF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHB0aGVvcmFkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJDb3VsZCBub3Qgc3dpdGNoIGNvZGVib29rcyIpKTsKLSAgICBnb3RvIHJlcXVlc3RfY29uZmlnOwotICB9Ci1wYWNrZXRfc2hvcnQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHB0aGVvcmFkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJQYWNrZXQgd2FzIHRvbyBzaG9ydCAoJWQgPCA0KSIsIHBheWxvYWRfbGVuKSk7Ci0gICAgZ290byByZXF1ZXN0X2tleWZyYW1lOwotICB9Ci1pZ25vcmVfcmVzZXJ2ZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cHRoZW9yYWRlcGF5LCAicmVzZXJ2ZWQgVERUIGlnbm9yZWQiKTsKLSAgICBnb3RvIG91dDsKLSAgfQotbGVuZ3RoX3Nob3J0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwdGhlb3JhZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiUGFja2V0IGNvbnRhaW5zIGludmFsaWQgZGF0YSIpKTsKLSAgICBnb3RvIHJlcXVlc3Rfa2V5ZnJhbWU7Ci0gIH0KLWludmFsaWRfY29uZmlndXJhdGlvbjoKLSAgewotICAgIC8qIGZhdGFsLCBhcyB3ZSBvdGhlcndpc2UgcmlzayBjYXJyeWluZyBvbiB3aXRob3V0IG91dHB1dCAqLwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChydHB0aGVvcmFkZXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJQYWNrZXQgY29udGFpbnMgaW52YWxpZCBjb25maWd1cmF0aW9uIikpOwotICAgIGdvdG8gcmVxdWVzdF9jb25maWc7Ci0gIH0KLXJlcXVlc3RfY29uZmlnOgotICB7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NJTktQQUQgKGRlcGF5bG9hZCksCi0gICAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLAotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJHc3RGb3JjZUtleVVuaXQiLAotICAgICAgICAgICAgICAgICJhbGwtaGVhZGVycyIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKSkpOwotICAgIGdvdG8gb3V0OwotICB9Ci1yZXF1ZXN0X2tleWZyYW1lOgotICB7Ci0gICAgcnRwdGhlb3JhZGVwYXktPm5lZWRzX2tleWZyYW1lID0gVFJVRTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU0lOS1BBRCAoZGVwYXlsb2FkKSwKLSAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoIkdzdEZvcmNlS2V5VW5pdCIpKSk7Ci0gICAgZ290byBvdXQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX3RoZW9yYV9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cFRoZW9yYURlcGF5ICpydHB0aGVvcmFkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cHRoZW9yYWRlcGF5ID0gR1NUX1JUUF9USEVPUkFfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBmcmVlX2luZGVudHMgKHJ0cHRoZW9yYWRlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3RoZW9yYV9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHRoZW9yYWRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1RIRU9SQV9ERVBBWSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF90aGVvcmFfZGVwYXlfcGFja2V0X2xvc3QgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwVGhlb3JhRGVwYXkgKnJ0cHRoZW9yYWRlcGF5ID0gR1NUX1JUUF9USEVPUkFfREVQQVkgKGRlcGF5bG9hZCk7Ci0gIGd1aW50IHNlcW51bSA9IDA7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KSwgInNlcW51bSIsICZzZXFudW0pOwotICBHU1RfTE9HX09CSkVDVCAoZGVwYXlsb2FkLCAiUmVxdWVzdGVkIGtleWZyYW1lIGJlY2F1c2UgZnJhbWUgd2l0aCBzZXFudW0gJXUiCi0gICAgICAiIGlzIG1pc3NpbmciLCBzZXFudW0pOwotICBydHB0aGVvcmFkZXBheS0+bmVlZHNfa2V5ZnJhbWUgPSBUUlVFOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TSU5LUEFEIChkZXBheWxvYWQpLAotICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJHc3RGb3JjZUtleVVuaXQiKSkpOwotCi0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHB0aGVvcmFkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjBiMjYwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdGhlb3JhZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9USEVPUkFfREVQQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9USEVPUkFfREVQQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1RIRU9SQV9ERVBBWSBcCi0gIChnc3RfcnRwX3RoZW9yYV9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1RIRU9SQV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9USEVPUkFfREVQQVksR3N0UnRwVGhlb3JhRGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX1RIRU9SQV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfVEhFT1JBX0RFUEFZLEdzdFJ0cFRoZW9yYURlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1RIRU9SQV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9USEVPUkFfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1RIRU9SQV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfVEhFT1JBX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFRoZW9yYURlcGF5IEdzdFJ0cFRoZW9yYURlcGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFRoZW9yYURlcGF5Q2xhc3MgR3N0UnRwVGhlb3JhRGVwYXlDbGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFRoZW9yYUNvbmZpZyB7Ci0gIGd1aW50MzIgIGlkZW50OwotICBHTGlzdCAgICpoZWFkZXJzOwotfSBHc3RSdHBUaGVvcmFDb25maWc7Ci0KLXN0cnVjdCBfR3N0UnRwVGhlb3JhRGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBwYXJlbnQ7Ci0KLSAgR0xpc3QgICAgICAgICAgICAgICpjb25maWdzOwotICBHc3RSdHBUaGVvcmFDb25maWcgKmNvbmZpZzsKLQotICBHc3RBZGFwdGVyICAgICAgICAgKmFkYXB0ZXI7Ci0gIGdib29sZWFuICAgICAgICAgICAgYXNzZW1ibGluZzsKLQotICBnYm9vbGVhbiAgICAgICAgICAgIG5lZWRzX2tleWZyYW1lOwotfTsKLQotc3RydWN0IF9Hc3RSdHBUaGVvcmFEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3RoZW9yYV9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfdGhlb3JhX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1RIRU9SQV9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmM1YmRlLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdGhlb3JhcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSAiZm52MWhhc2guaCIKLSNpbmNsdWRlICJnc3RydHB0aGVvcmFwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi0jZGVmaW5lIFRIRU9SQV9JRF9MRU4JNDIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwdGhlb3JhcGF5X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHB0aGVvcmFwYXlfZGVidWcpCi0KLS8qIHJlZmVyZW5jZXM6Ci0gKiBodHRwOi8vc3ZuLnhpcGgub3JnL3RydW5rL3RoZW9yYS9kb2MvZHJhZnQtaWV0Zi1hdnQtcnRwLXRoZW9yYS0wMS50eHQKLSAqLwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF90aGVvcmFfcGF5X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCAiICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgXCJUSEVPUkFcIiIKLSAgICAgICAgLyogQWxsIHJlcXVpcmVkIHBhcmFtZXRlcnMKLSAgICAgICAgICoKLSAgICAgICAgICogInNhbXBsaW5nID0gKHN0cmluZykgeyAiWUNiQ3ItNDoyOjAiLCAiWUNiQ3ItNDoyOjIiLCAiWUNiQ3ItNDo0OjQiIH0gIgotICAgICAgICAgKiAid2lkdGggPSAoc3RyaW5nKSBbMSwgMTA0ODU2MV0gKG11bHRpcGxlcyBvZiAxNikgIgotICAgICAgICAgKiAiaGVpZ2h0ID0gKHN0cmluZykgWzEsIDEwNDg1NjFdIChtdWx0aXBsZXMgb2YgMTYpICIKLSAgICAgICAgICogImNvbmZpZ3VyYXRpb24gPSAoc3RyaW5nKSBBTlkiCi0gICAgICAgICAqLwotICAgICAgICAvKiBBbGwgb3B0aW9uYWwgcGFyYW1ldGVycwotICAgICAgICAgKgotICAgICAgICAgKiAiY29uZmlndXJhdGlvbi11cmkgPSIKLSAgICAgICAgICogImRlbGl2ZXJ5LW1ldGhvZCA9IChzdHJpbmcpIHsgaW5saW5lLCBpbl9iYW5kLCBvdXRfYmFuZC88c3BlY2lmaWNfbmFtZT4gfSAiCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF90aGVvcmFfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC10aGVvcmEiKQotICAgICk7Ci0KLSNkZWZpbmUgREVGQVVMVF9DT05GSUdfSU5URVJWQUwgMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9DT05GSUdfSU5URVJWQUwKLX07Ci0KLSNkZWZpbmUgZ3N0X3J0cF90aGVvcmFfcGF5X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFRoZW9yYVBheSwgZ3N0X3J0cF90aGVvcmFfcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9QQVlMT0FEKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdGhlb3JhX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX3RoZW9yYV9wYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfdGhlb3JhX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdGhlb3JhX3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3RoZW9yYV9wYXlfcGFyc2VfaWQgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsCi0gICAgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF90aGVvcmFfcGF5X2ZpbmlzaF9oZWFkZXJzIChHc3RSVFBCYXNlUGF5bG9hZCAqCi0gICAgYmFzZXBheWxvYWQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3RoZW9yYV9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF90aGVvcmFfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdGhlb3JhX3BheV9jbGFzc19pbml0IChHc3RSdHBUaGVvcmFQYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfdGhlb3JhX3BheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF90aGVvcmFfcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF90aGVvcmFfcGF5X2hhbmRsZV9idWZmZXI7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zaW5rX2V2ZW50ID0gZ3N0X3J0cF90aGVvcmFfcGF5X3NpbmtfZXZlbnQ7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF90aGVvcmFfcGF5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF90aGVvcmFfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3RoZW9yYV9wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF90aGVvcmFfcGF5X3NpbmtfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFRoZW9yYSBwYXlsb2FkZXIiLCAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXlsb2FkLWVuY29kZSBUaGVvcmEgdmlkZW8gaW50byBSVFAgcGFja2V0cyAoZHJhZnQtMDEgUkZDIFhYWFgpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHB0aGVvcmFwYXlfZGVidWcsICJydHB0aGVvcmFwYXkiLCAwLAotICAgICAgIlRoZW9yYSBSVFAgUGF5bG9hZGVyIik7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9DT05GSUdfSU5URVJWQUwsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoImNvbmZpZy1pbnRlcnZhbCIsICJDb25maWcgU2VuZCBJbnRlcnZhbCIsCi0gICAgICAgICAgIlNlbmQgQ29uZmlnIEluc2VydGlvbiBJbnRlcnZhbCBpbiBzZWNvbmRzIChjb25maWd1cmF0aW9uIGhlYWRlcnMgIgotICAgICAgICAgICJ3aWxsIGJlIG11bHRpcGxleGVkIGluIHRoZSBkYXRhIHN0cmVhbSB3aGVuIGRldGVjdGVkLikgKDAgPSBkaXNhYmxlZCkiLAotICAgICAgICAgIDAsIDM2MDAsIERFRkFVTFRfQ09ORklHX0lOVEVSVkFMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykKLSAgICAgICk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3RoZW9yYV9wYXlfaW5pdCAoR3N0UnRwVGhlb3JhUGF5ICogcnRwdGhlb3JhcGF5KQotewotICBydHB0aGVvcmFwYXktPmxhc3RfY29uZmlnID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdGhlb3JhX3BheV9jbGVhcl9wYWNrZXQgKEdzdFJ0cFRoZW9yYVBheSAqIHJ0cHRoZW9yYXBheSkKLXsKLSAgaWYgKHJ0cHRoZW9yYXBheS0+cGFja2V0KQotICAgIGdzdF9idWZmZXJfdW5yZWYgKHJ0cHRoZW9yYXBheS0+cGFja2V0KTsKLSAgcnRwdGhlb3JhcGF5LT5wYWNrZXQgPSBOVUxMOwotICBnX2xpc3RfZnJlZV9mdWxsIChydHB0aGVvcmFwYXktPnBhY2tldF9idWZmZXJzLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgcnRwdGhlb3JhcGF5LT5wYWNrZXRfYnVmZmVycyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3RoZW9yYV9wYXlfY2xlYW51cCAoR3N0UnRwVGhlb3JhUGF5ICogcnRwdGhlb3JhcGF5KQotewotICBnc3RfcnRwX3RoZW9yYV9wYXlfY2xlYXJfcGFja2V0IChydHB0aGVvcmFwYXkpOwotICBnX2xpc3RfZnJlZV9mdWxsIChydHB0aGVvcmFwYXktPmhlYWRlcnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIHJ0cHRoZW9yYXBheS0+aGVhZGVycyA9IE5VTEw7Ci0gIGdfZnJlZSAocnRwdGhlb3JhcGF5LT5jb25maWdfZGF0YSk7Ci0gIHJ0cHRoZW9yYXBheS0+Y29uZmlnX2RhdGEgPSBOVUxMOwotICBydHB0aGVvcmFwYXktPmxhc3RfY29uZmlnID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3RoZW9yYV9wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJ0cFRoZW9yYVBheSAqcnRwdGhlb3JhcGF5OwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGNvbnN0IEdWYWx1ZSAqYXJyYXk7Ci0gIGdpbnQgYXNpemUsIGk7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBydHB0aGVvcmFwYXkgPSBHU1RfUlRQX1RIRU9SQV9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgcnRwdGhlb3JhcGF5LT5uZWVkX2hlYWRlcnMgPSBUUlVFOwotCi0gIGlmICgoYXJyYXkgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInN0cmVhbWhlYWRlciIpKSA9PSBOVUxMKQotICAgIGdvdG8gZG9uZTsKLQotICBpZiAoR19WQUxVRV9UWVBFIChhcnJheSkgIT0gR1NUX1RZUEVfQVJSQVkpCi0gICAgZ290byBkb25lOwotCi0gIGlmICgoYXNpemUgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3NpemUgKGFycmF5KSkgPCAzKQotICAgIGdvdG8gZG9uZTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXNpemU7IGkrKykgewotICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgICB2YWx1ZSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfdmFsdWUgKGFycmF5LCBpKTsKLSAgICBpZiAoKGJ1ZiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2YWx1ZSkpID09IE5VTEwpCi0gICAgICBnb3RvIG51bGxfYnVmZmVyOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAvKiBubyBkYXRhIHBhY2tldHMgYWxsb3dlZCAqLwotICAgIGlmIChtYXAuc2l6ZSA8IDEpCi0gICAgICBnb3RvIGludmFsaWRfc3RyZWFtaGVhZGVyOwotCi0gICAgLyogd2UgbmVlZCBwYWNrZXRzIHdpdGggaWQgMHg4MCwgMHg4MSwgMHg4MiAqLwotICAgIGlmIChtYXAuZGF0YVswXSAhPSAweDgwICsgaSkKLSAgICAgIGdvdG8gaW52YWxpZF9zdHJlYW1oZWFkZXI7Ci0KLSAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAvKiBpZGVudGlmaWNhdGlvbiwgd2UgbmVlZCB0byBwYXJzZSB0aGlzIGluIG9yZGVyIHRvIGdldCB0aGUgY2xvY2sgcmF0ZS4gKi8KLSAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3J0cF90aGVvcmFfcGF5X3BhcnNlX2lkIChiYXNlcGF5bG9hZCwgbWFwLmRhdGEsCi0gICAgICAgICAgICAgICAgICBtYXAuc2l6ZSkpKQotICAgICAgICBnb3RvIHBhcnNlX2lkX2ZhaWxlZDsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhcGF5LCAiY29sbGVjdGluZyBoZWFkZXIgJWQiLCBpKTsKLSAgICBydHB0aGVvcmFwYXktPmhlYWRlcnMgPQotICAgICAgICBnX2xpc3RfYXBwZW5kIChydHB0aGVvcmFwYXktPmhlYWRlcnMsIGdzdF9idWZmZXJfcmVmIChidWYpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICB9Ci0gIGlmICghZ3N0X3J0cF90aGVvcmFfcGF5X2ZpbmlzaF9oZWFkZXJzIChiYXNlcGF5bG9hZCkpCi0gICAgZ290byBmaW5pc2hfZmFpbGVkOwotCi1kb25lOgotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW51bGxfYnVmZmVyOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHB0aGVvcmFwYXksICJzdHJlYW1oZWFkZXIgd2l0aCBudWxsIGJ1ZmZlciByZWNlaXZlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9zdHJlYW1oZWFkZXI6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cHRoZW9yYXBheSwgInVuYWJsZSB0byBwYXJzZSBpbml0aWFsIGhlYWRlciIpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1wYXJzZV9pZF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cHRoZW9yYXBheSwgInVuYWJsZSB0byBwYXJzZSBpbml0aWFsIGhlYWRlciIpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1maW5pc2hfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHB0aGVvcmFwYXksICJ1bmFibGUgdG8gZmluaXNoIGhlYWRlcnMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdGhlb3JhX3BheV9yZXNldF9wYWNrZXQgKEdzdFJ0cFRoZW9yYVBheSAqIHJ0cHRoZW9yYXBheSwgZ3VpbnQ4IFREVCkKLXsKLSAgZ3VpbnQgcGF5bG9hZF9sZW47Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwgfTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFwYXksICJyZXNldCBwYWNrZXQiKTsKLQotICBydHB0aGVvcmFwYXktPnBheWxvYWRfcG9zID0gNDsKLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChydHB0aGVvcmFwYXktPnBhY2tldCwgR1NUX01BUF9SRUFELCAmcnRwKTsKLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKCZydHApOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9sZWZ0ID0gcGF5bG9hZF9sZW4gLSA0OwotICBydHB0aGVvcmFwYXktPnBheWxvYWRfZHVyYXRpb24gPSAwOwotICBydHB0aGVvcmFwYXktPnBheWxvYWRfRiA9IDA7Ci0gIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9URFQgPSBURFQ7Ci0gIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9wa3RzID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdGhlb3JhX3BheV9pbml0X3BhY2tldCAoR3N0UnRwVGhlb3JhUGF5ICogcnRwdGhlb3JhcGF5LCBndWludDggVERULAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYXBheSwgInN0YXJ0aW5nIG5ldyBwYWNrZXQsIFREVDogJWQiLCBURFQpOwotCi0gIGdzdF9ydHBfdGhlb3JhX3BheV9jbGVhcl9wYWNrZXQgKHJ0cHRoZW9yYXBheSk7Ci0KLSAgLyogbmV3IHBhY2tldCBhbGxvY2F0ZSBtYXggcGFja2V0IHNpemUgKi8KLSAgcnRwdGhlb3JhcGF5LT5wYWNrZXQgPQotICAgICAgZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlX2xlbiAoR1NUX1JUUF9CQVNFX1BBWUxPQURfTVRVCi0gICAgICAocnRwdGhlb3JhcGF5KSwgMCwgMCk7Ci0gIGdzdF9ydHBfdGhlb3JhX3BheV9yZXNldF9wYWNrZXQgKHJ0cHRoZW9yYXBheSwgVERUKTsKLQotICBHU1RfQlVGRkVSX1BUUyAocnRwdGhlb3JhcGF5LT5wYWNrZXQpID0gdGltZXN0YW1wOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF90aGVvcmFfcGF5X2ZsdXNoX3BhY2tldCAoR3N0UnRwVGhlb3JhUGF5ICogcnRwdGhlb3JhcGF5KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBndWludCBobGVuOwotICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0gIEdMaXN0ICpsOwotCi0gIC8qIGNoZWNrIGZvciBlbXB0eSBwYWNrZXQgKi8KLSAgaWYgKCFydHB0aGVvcmFwYXktPnBhY2tldCB8fCBydHB0aGVvcmFwYXktPnBheWxvYWRfcG9zIDw9IDQpCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYXBheSwgImZsdXNoaW5nIHBhY2tldCIpOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAocnRwdGhlb3JhcGF5LT5wYWNrZXQsIEdTVF9NQVBfV1JJVEUsICZydHApOwotCi0gIC8qIGZpeCBoZWFkZXIgKi8KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLSAgLyoKLSAgICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgSWRlbnQgICAgICAgICAgICAgICAgICAgICB8IEYgfFREVHwjIHBrdHMufAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKgotICAgKiBGOiBGcmFnbWVudCB0eXBlICgwPW5vbmUsIDE9c3RhcnQsIDI9Y29udCwgMz1lbmQpCi0gICAqIFREVDogVGhlb3JhIGRhdGEgdHlwZSAoMD10aGVvcmEsIDE9Y29uZmlnLCAyPWNvbW1lbnQsIDM9cmVzZXJ2ZWQpCi0gICAqIHBrdHM6IG51bWJlciBvZiBwYWNrZXRzLgotICAgKi8KLSAgcGF5bG9hZFswXSA9IChydHB0aGVvcmFwYXktPnBheWxvYWRfaWRlbnQgPj4gMTYpICYgMHhmZjsKLSAgcGF5bG9hZFsxXSA9IChydHB0aGVvcmFwYXktPnBheWxvYWRfaWRlbnQgPj4gOCkgJiAweGZmOwotICBwYXlsb2FkWzJdID0gKHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9pZGVudCkgJiAweGZmOwotICBwYXlsb2FkWzNdID0gKHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9GICYgMHgzKSA8PCA2IHwKLSAgICAgIChydHB0aGVvcmFwYXktPnBheWxvYWRfVERUICYgMHgzKSA8PCA0IHwKLSAgICAgIChydHB0aGVvcmFwYXktPnBheWxvYWRfcGt0cyAmIDB4Zik7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIC8qIHNocmluayB0aGUgYnVmZmVyIHNpemUgdG8gdGhlIGxhc3Qgd3JpdHRlbiBieXRlICovCi0gIGhsZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX2hlYWRlcl9sZW4gKDApOwotICBnc3RfYnVmZmVyX3Jlc2l6ZSAocnRwdGhlb3JhcGF5LT5wYWNrZXQsIDAsIGhsZW4gKyBydHB0aGVvcmFwYXktPnBheWxvYWRfcG9zKTsKLQotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChydHB0aGVvcmFwYXktPnBhY2tldCkgPSBydHB0aGVvcmFwYXktPnBheWxvYWRfZHVyYXRpb247Ci0KLSAgZm9yIChsID0gZ19saXN0X2xhc3QgKHJ0cHRoZW9yYXBheS0+cGFja2V0X2J1ZmZlcnMpOyBsOyBsID0gbC0+cHJldikgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gR1NUX0JVRkZFUl9DQVNUIChsLT5kYXRhKTsKLSAgICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwdGhlb3JhcGF5KSwgcnRwdGhlb3JhcGF5LT5wYWNrZXQsCi0gICAgICAgIGJ1ZiwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChydHB0aGVvcmFwYXktPnBhY2tldF9idWZmZXJzKTsKLSAgcnRwdGhlb3JhcGF5LT5wYWNrZXRfYnVmZmVycyA9IE5VTEw7Ci0KLSAgLyogcHVzaCwgdGhpcyBnaXZlcyBhd2F5IG91ciByZWYgdG8gdGhlIHBhY2tldCwgc28gY2xlYXIgaXQuICovCi0gIHJldCA9Ci0gICAgICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfUEFZTE9BRCAocnRwdGhlb3JhcGF5KSwKLSAgICAgIHJ0cHRoZW9yYXBheS0+cGFja2V0KTsKLSAgcnRwdGhlb3JhcGF5LT5wYWNrZXQgPSBOVUxMOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF90aGVvcmFfcGF5X2ZpbmlzaF9oZWFkZXJzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkKQotewotICBHc3RSdHBUaGVvcmFQYXkgKnJ0cHRoZW9yYXBheSA9IEdTVF9SVFBfVEhFT1JBX1BBWSAoYmFzZXBheWxvYWQpOwotICBHTGlzdCAqd2FsazsKLSAgZ3VpbnQgbGVuZ3RoLCBzaXplLCBuX2hlYWRlcnMsIGNvbmZpZ2xlbiwgZXh0cmFsZW47Ci0gIGdjaGFyICp3c3RyLCAqaHN0ciwgKmNvbmZpZ3VyYXRpb247Ci0gIGd1aW50OCAqZGF0YSwgKmNvbmZpZzsKLSAgZ3VpbnQzMiBpZGVudDsKLSAgZ2Jvb2xlYW4gcmVzOwotICBjb25zdCBnY2hhciAqc2FtcGxpbmcgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYXBheSwgImZpbmlzaCBoZWFkZXJzIik7Ci0KLSAgaWYgKCFydHB0aGVvcmFwYXktPmhlYWRlcnMpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFwYXksICJXZSBuZWVkIDIgaGVhZGVycyBidXQgaGF2ZSBub25lIik7Ci0gICAgZ290byBub19oZWFkZXJzOwotICB9Ci0KLSAgLyogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBwYWNrZWQgaGVhZGVycyAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2VkIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2VkIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICoKLSAgICogV2Ugb25seSBjb25zdHJ1Y3QgYSBjb25maWcgY29udGFpbmluZyAxIHBhY2tlZCBoZWFkZXIgbGlrZSB0aGlzOgotICAgKgotICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICAgICAgICAgSWRlbnQgICAgICAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoICAgICAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICB8IG4uIG9mIGhlYWRlcnMgfCAgICBsZW5ndGgxICAgIHwgICAgbGVuZ3RoMiAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICB8ICAgICAgICAgICAgIElkZW50aWZpY2F0aW9uIEhlYWRlciAgICAgICAgICAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICB8ICAgICAgICAgQ29tbWVudCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqLwotCi0gIC8qIHdlIG5lZWQgNCBieXRlcyBmb3IgdGhlIG51bWJlciBvZiBoZWFkZXJzICh3aGljaCBpcyBhbHdheXMgMSksIDMgYnl0ZXMgZm9yCi0gICAqIHRoZSBpZGVudCwgMiBieXRlcyBmb3IgbGVuZ3RoLCAxIGJ5dGUgZm9yIG4uIG9mIGhlYWRlcnMuICovCi0gIHNpemUgPSA0ICsgMyArIDIgKyAxOwotCi0gIC8qIGNvdW50IHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZpcnN0IGFuZCB1cGRhdGUgdGhlIGhhc2ggKi8KLSAgbGVuZ3RoID0gMDsKLSAgbl9oZWFkZXJzID0gMDsKLSAgaWRlbnQgPSBmbnYxX2hhc2hfMzJfbmV3ICgpOwotICBleHRyYWxlbiA9IDE7Ci0gIGZvciAod2FsayA9IHJ0cHRoZW9yYXBheS0+aGVhZGVyczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gR1NUX0JVRkZFUl9DQVNUICh3YWxrLT5kYXRhKTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBndWludCBic2l6ZTsKLQotICAgIGJzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgICBsZW5ndGggKz0gYnNpemU7Ci0gICAgbl9oZWFkZXJzKys7Ci0KLSAgICAvKiBjb3VudCBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIGZvciBsZW5ndGggZmllbGRzLCB3ZSBkb24ndCBuZWVkIHRoaXMgZm9yCi0gICAgICogdGhlIGxhc3QgaGVhZGVyLiAqLwotICAgIGlmIChnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICAgIGRvIHsKLSAgICAgICAgc2l6ZSsrOwotICAgICAgICBleHRyYWxlbisrOwotICAgICAgICBic2l6ZSA+Pj0gNzsKLSAgICAgIH0gd2hpbGUgKGJzaXplKTsKLSAgICB9Ci0gICAgLyogdXBkYXRlIGhhc2ggKi8KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGlkZW50ID0gZm52MV9oYXNoXzMyX3VwZGF0ZSAoaWRlbnQsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgfQotCi0gIC8qIHBhY2tldCBsZW5ndGggaXMgaGVhZGVyIHNpemUgKyBwYWNrZXQgbGVuZ3RoICovCi0gIGNvbmZpZ2xlbiA9IHNpemUgKyBsZW5ndGg7Ci0gIGNvbmZpZyA9IGRhdGEgPSBnX21hbGxvYyAoY29uZmlnbGVuKTsKLQotICAvKiBudW1iZXIgb2YgcGFja2VkIGhlYWRlcnMsIHdlIG9ubHkgcGFjayAxIGhlYWRlciAqLwotICBkYXRhWzBdID0gMDsKLSAgZGF0YVsxXSA9IDA7Ci0gIGRhdGFbMl0gPSAwOwotICBkYXRhWzNdID0gMTsKLQotICBpZGVudCA9IGZudjFfaGFzaF8zMl90b18yNCAoaWRlbnQpOwotICBydHB0aGVvcmFwYXktPnBheWxvYWRfaWRlbnQgPSBpZGVudDsKLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhcGF5LCAiaWRlbnQgMHglMDh4IiwgaWRlbnQpOwotCi0gIC8qIHRha2UgbG93ZXIgMyBieXRlcyAqLwotICBkYXRhWzRdID0gKGlkZW50ID4+IDE2KSAmIDB4ZmY7Ci0gIGRhdGFbNV0gPSAoaWRlbnQgPj4gOCkgJiAweGZmOwotICBkYXRhWzZdID0gaWRlbnQgJiAweGZmOwotCi0gIC8qIHN0b3JlIGxlbmd0aCBvZiBhbGwgdGhlb3JhIGhlYWRlcnMgKi8KLSAgZGF0YVs3XSA9ICgobGVuZ3RoKSA+PiA4KSAmIDB4ZmY7Ci0gIGRhdGFbOF0gPSAobGVuZ3RoKSAmIDB4ZmY7Ci0KLSAgLyogc3RvcmUgbnVtYmVyIG9mIGhlYWRlcnMgbWludXMgb25lLiAqLwotICBkYXRhWzldID0gbl9oZWFkZXJzIC0gMTsKLSAgZGF0YSArPSAxMDsKLQotICAvKiBzdG9yZSBsZW5ndGggZm9yIGVhY2ggaGVhZGVyICovCi0gIGZvciAod2FsayA9IHJ0cHRoZW9yYXBheS0+aGVhZGVyczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gR1NUX0JVRkZFUl9DQVNUICh3YWxrLT5kYXRhKTsKLSAgICBndWludCBic2l6ZSwgc2l6ZSwgdGVtcDsKLSAgICBndWludCBmbGFnOwotCi0gICAgLyogb25seSBuZWVkIHRvIHN0b3JlIHRoZSBsZW5ndGggd2hlbiBpdCdzIG5vdCB0aGUgbGFzdCBoZWFkZXIgKi8KLSAgICBpZiAoIWdfbGlzdF9uZXh0ICh3YWxrKSkKLSAgICAgIGJyZWFrOwotCi0gICAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gICAgLyogY2FsYyBzaXplICovCi0gICAgc2l6ZSA9IDA7Ci0gICAgZG8gewotICAgICAgc2l6ZSsrOwotICAgICAgYnNpemUgPj49IDc7Ci0gICAgfSB3aGlsZSAoYnNpemUpOwotICAgIHRlbXAgPSBzaXplOwotCi0gICAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICAgIC8qIHdyaXRlIHRoZSBzaXplIGJhY2t3YXJkcyAqLwotICAgIGZsYWcgPSAwOwotICAgIHdoaWxlIChzaXplKSB7Ci0gICAgICBzaXplLS07Ci0gICAgICBkYXRhW3NpemVdID0gKGJzaXplICYgMHg3ZikgfCBmbGFnOwotICAgICAgYnNpemUgPj49IDc7Ci0gICAgICBmbGFnID0gMHg4MDsgICAgICAgICAgICAgIC8qIEZsYWcgYml0IG9uIGFsbCBieXRlcyBvZiB0aGUgbGVuZ3RoIGV4Y2VwdCB0aGUgbGFzdCAqLwotICAgIH0KLSAgICBkYXRhICs9IHRlbXA7Ci0gIH0KLQotICAvKiBjb3B5IGhlYWRlciBkYXRhICovCi0gIGZvciAod2FsayA9IHJ0cHRoZW9yYXBheS0+aGVhZGVyczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdEJ1ZmZlciAqYnVmID0gR1NUX0JVRkZFUl9DQVNUICh3YWxrLT5kYXRhKTsKLQotICAgIGdzdF9idWZmZXJfZXh0cmFjdCAoYnVmLCAwLCBkYXRhLCBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpKTsKLSAgICBkYXRhICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gIH0KLSAgcnRwdGhlb3JhcGF5LT5uZWVkX2hlYWRlcnMgPSBGQUxTRTsKLQotICAvKiBzZXJpYWxpemUgdG8gYmFzZTY0ICovCi0gIGNvbmZpZ3VyYXRpb24gPSBnX2Jhc2U2NF9lbmNvZGUgKGNvbmZpZywgY29uZmlnbGVuKTsKLQotICAvKiBzdG9yZSBmb3IgbGF0ZXIgcmUtc2VuZGluZyAqLwotICBnX2ZyZWUgKHJ0cHRoZW9yYXBheS0+Y29uZmlnX2RhdGEpOwotICBydHB0aGVvcmFwYXktPmNvbmZpZ19zaXplID0gY29uZmlnbGVuIC0gNCAtIDMgLSAyOwotICBydHB0aGVvcmFwYXktPmNvbmZpZ19kYXRhID0gZ19tYWxsb2MgKHJ0cHRoZW9yYXBheS0+Y29uZmlnX3NpemUpOwotICBydHB0aGVvcmFwYXktPmNvbmZpZ19leHRyYV9sZW4gPSBleHRyYWxlbjsKLSAgbWVtY3B5IChydHB0aGVvcmFwYXktPmNvbmZpZ19kYXRhLCBjb25maWcgKyA0ICsgMyArIDIsCi0gICAgICBydHB0aGVvcmFwYXktPmNvbmZpZ19zaXplKTsKLQotICBnX2ZyZWUgKGNvbmZpZyk7Ci0KLSAgLyogY29uZmlndXJlIHBheWxvYWRlciBzZXR0aW5ncyAqLwotICBzd2l0Y2ggKHJ0cHRoZW9yYXBheS0+cGl4ZWxfZm9ybWF0KSB7Ci0gICAgY2FzZSAyOgotICAgICAgc2FtcGxpbmcgPSAiWUNiQ3ItNDoyOjIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgc2FtcGxpbmcgPSAiWUNiQ3ItNDo0OjQiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAwOgotICAgIGRlZmF1bHQ6Ci0gICAgICBzYW1wbGluZyA9ICJZQ2JDci00OjI6MCI7Ci0gICAgICBicmVhazsKLSAgfQotCi0KLSAgd3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgcnRwdGhlb3JhcGF5LT53aWR0aCk7Ci0gIGhzdHIgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHJ0cHRoZW9yYXBheS0+aGVpZ2h0KTsKLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKGJhc2VwYXlsb2FkLCAidmlkZW8iLCBUUlVFLCAiVEhFT1JBIiwKLSAgICAgIDkwMDAwKTsKLSAgcmVzID0KLSAgICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwgInNhbXBsaW5nIiwgR19UWVBFX1NUUklORywKLSAgICAgIHNhbXBsaW5nLCAid2lkdGgiLCBHX1RZUEVfU1RSSU5HLCB3c3RyLCAiaGVpZ2h0IiwgR19UWVBFX1NUUklORywKLSAgICAgIGhzdHIsICJjb25maWd1cmF0aW9uIiwgR19UWVBFX1NUUklORywgY29uZmlndXJhdGlvbiwgImRlbGl2ZXJ5LW1ldGhvZCIsCi0gICAgICBHX1RZUEVfU1RSSU5HLCAiaW5saW5lIiwKLSAgICAgIC8qIGRvbid0IHNldCB0aGUgb3RoZXIgZGVmYXVsdHMgCi0gICAgICAgKi8KLSAgICAgIE5VTEwpOwotICBnX2ZyZWUgKHdzdHIpOwotICBnX2ZyZWUgKGhzdHIpOwotICBnX2ZyZWUgKGNvbmZpZ3VyYXRpb24pOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19oZWFkZXJzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhcGF5LCAiZmluaXNoIGhlYWRlcnMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3RoZW9yYV9wYXlfcGFyc2VfaWQgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsIGd1aW50OCAqIGRhdGEsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgR3N0UnRwVGhlb3JhUGF5ICpydHB0aGVvcmFwYXk7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodCwgcGl4ZWxfZm9ybWF0OwotCi0gIHJ0cHRoZW9yYXBheSA9IEdTVF9SVFBfVEhFT1JBX1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIGlmIChHX1VOTElLRUxZIChzaXplIDwgNDIpKQotICAgIGdvdG8gdG9vX3Nob3J0OwotCi0gIGlmIChHX1VOTElLRUxZIChtZW1jbXAgKGRhdGEsICJcMjAwdGhlb3JhIiwgNykpKQotICAgIGdvdG8gaW52YWxpZF9zdGFydDsKLSAgZGF0YSArPSA3OwotCi0gIGlmIChHX1VOTElLRUxZIChkYXRhWzBdICE9IDMpKQotICAgIGdvdG8gaW52YWxpZF92ZXJzaW9uOwotICBpZiAoR19VTkxJS0VMWSAoZGF0YVsxXSAhPSAyKSkKLSAgICBnb3RvIGludmFsaWRfdmVyc2lvbjsKLSAgZGF0YSArPSAzOwotCi0gIHdpZHRoID0gR1NUX1JFQURfVUlOVDE2X0JFIChkYXRhKSA8PCA0OwotICBkYXRhICs9IDI7Ci0gIGhlaWdodCA9IEdTVF9SRUFEX1VJTlQxNl9CRSAoZGF0YSkgPDwgNDsKLSAgZGF0YSArPSAyOTsKLQotICBwaXhlbF9mb3JtYXQgPSAoR1NUX1JFQURfVUlOVDggKGRhdGEpID4+IDMpICYgMHgwMzsKLQotICAvKiBzdG9yZSB2YWx1ZXMgKi8KLSAgcnRwdGhlb3JhcGF5LT5waXhlbF9mb3JtYXQgPSBwaXhlbF9mb3JtYXQ7Ci0gIHJ0cHRoZW9yYXBheS0+d2lkdGggPSB3aWR0aDsKLSAgcnRwdGhlb3JhcGF5LT5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi10b29fc2hvcnQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYmFzZXBheWxvYWQsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksCi0gICAgICAgICgiSWRlbnRpZmljYXRpb24gcGFja2V0IGlzIHRvbyBzaG9ydCwgbmVlZCBhdCBsZWFzdCA0MiwgZ290ICVkIiwgc2l6ZSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9zdGFydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlcGF5bG9hZCwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJJbnZhbGlkIGhlYWRlciBzdGFydCBpbiBpZGVudGlmaWNhdGlvbiBwYWNrZXQiKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX3ZlcnNpb246Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoYmFzZXBheWxvYWQsIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiSW52YWxpZCB2ZXJzaW9uIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF90aGVvcmFfcGF5X3BheWxvYWRfYnVmZmVyIChHc3RSdHBUaGVvcmFQYXkgKiBydHB0aGVvcmFwYXksIGd1aW50OCBURFQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBndWludDggKiBkYXRhLCBndWludCBzaXplLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgZ3VpbnQgbm90X2luX2xlbmd0aCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQgbmV3c2l6ZTsKLSAgZ3VpbnQgcGFja2V0X2xlbjsKLSAgR3N0Q2xvY2tUaW1lIG5ld2R1cmF0aW9uOwotICBnYm9vbGVhbiBmbHVzaDsKLSAgZ3VpbnQgcGxlbjsKLSAgZ3VpbnQ4ICpwcG9zLCAqcGF5bG9hZDsKLSAgZ2Jvb2xlYW4gZnJhZ21lbnRlZDsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotCi0gIC8qIHNpemUgaW5jcmVhc2VzIHdpdGggcGFja2V0IGxlbmd0aCBhbmQgMiBieXRlcyBzaXplIGVhZGVyLiAqLwotICBuZXdkdXJhdGlvbiA9IHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9kdXJhdGlvbjsKLSAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgbmV3ZHVyYXRpb24gKz0gZHVyYXRpb247Ci0KLSAgbmV3c2l6ZSA9IHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9wb3MgKyAyICsgc2l6ZTsKLSAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAobmV3c2l6ZSwgMCwgMCk7Ci0KLSAgLyogY2hlY2sgYnVmZmVyIGZpbGxlZCBhZ2FpbnN0IGxlbmd0aCBhbmQgbWF4IGxhdGVuY3kgKi8KLSAgZmx1c2ggPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9pc19maWxsZWQgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHB0aGVvcmFwYXkpLAotICAgICAgcGFja2V0X2xlbiwgbmV3ZHVyYXRpb24pOwotICAvKiB3ZSBjYW4gc3RvcmUgdXAgdG8gMTUgdGhlb3JhIHBhY2tldHMgaW4gb25lIFJUUCBwYWNrZXQuICovCi0gIGZsdXNoIHw9IChydHB0aGVvcmFwYXktPnBheWxvYWRfcGt0cyA9PSAxNSk7Ci0gIC8qIGZsdXNoIGlmIHdlIGhhdmUgYSBuZXcgVERUICovCi0gIGlmIChydHB0aGVvcmFwYXktPnBhY2tldCkKLSAgICBmbHVzaCB8PSAocnRwdGhlb3JhcGF5LT5wYXlsb2FkX1REVCAhPSBURFQpOwotICBpZiAoZmx1c2gpCi0gICAgcmV0ID0gZ3N0X3J0cF90aGVvcmFfcGF5X2ZsdXNoX3BhY2tldCAocnRwdGhlb3JhcGF5KTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBjcmVhdGUgbmV3IHBhY2tldCBpZiB3ZSBtdXN0ICovCi0gIGlmICghcnRwdGhlb3JhcGF5LT5wYWNrZXQpIHsKLSAgICBnc3RfcnRwX3RoZW9yYV9wYXlfaW5pdF9wYWNrZXQgKHJ0cHRoZW9yYXBheSwgVERULCB0aW1lc3RhbXApOwotICB9Ci0KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChydHB0aGVvcmFwYXktPnBhY2tldCwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gIHBwb3MgPSBwYXlsb2FkICsgcnRwdGhlb3JhcGF5LT5wYXlsb2FkX3BvczsKLSAgZnJhZ21lbnRlZCA9IEZBTFNFOwotCi0gIC8qIHB1dCBidWZmZXIgaW4gcGFja2V0LCBpdCBlaXRoZXIgZml0cyBjb21wbGV0ZWx5IG9yIG5lZWRzIHRvIGJlIGZyYWdtZW50ZWQKLSAgICogb3ZlciBtdWx0aXBsZSBSVFAgcGFja2V0cy4gKi8KLSAgZG8gewotICAgIHBsZW4gPSBNSU4gKHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9sZWZ0IC0gMiwgc2l6ZSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFwYXksICJhcHBlbmQgJXUgYnl0ZXMiLCBwbGVuKTsKLQotICAgIC8qIGRhdGEgaXMgY29waWVkIGluIHRoZSBwYXlsb2FkIHdpdGggYSAyIGJ5dGUgbGVuZ3RoIGhlYWRlciAqLwotICAgIHBwb3NbMF0gPSAoKHBsZW4gLSBub3RfaW5fbGVuZ3RoKSA+PiA4KSAmIDB4ZmY7Ci0gICAgcHBvc1sxXSA9ICgocGxlbiAtIG5vdF9pbl9sZW5ndGgpICYgMHhmZik7Ci0gICAgaWYgKHBsZW4pCi0gICAgICBtZW1jcHkgKCZwcG9zWzJdLCBkYXRhLCBwbGVuKTsKLQotICAgIGlmIChidWZmZXIpIHsKLSAgICAgIGlmICghcnRwdGhlb3JhcGF5LT5wYWNrZXRfYnVmZmVycwotICAgICAgICAgIHx8IHJ0cHRoZW9yYXBheS0+cGFja2V0X2J1ZmZlcnMtPmRhdGEgIT0gKGdwb2ludGVyKSBidWZmZXIpCi0gICAgICAgIHJ0cHRoZW9yYXBheS0+cGFja2V0X2J1ZmZlcnMgPQotICAgICAgICAgICAgZ19saXN0X3ByZXBlbmQgKHJ0cHRoZW9yYXBheS0+cGFja2V0X2J1ZmZlcnMsCi0gICAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoYnVmZmVyKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdMaXN0ICpsOwotCi0gICAgICBmb3IgKGwgPSBydHB0aGVvcmFwYXktPmhlYWRlcnM7IGw7IGwgPSBsLT5uZXh0KQotICAgICAgICBydHB0aGVvcmFwYXktPnBhY2tldF9idWZmZXJzID0KLSAgICAgICAgICAgIGdfbGlzdF9wcmVwZW5kIChydHB0aGVvcmFwYXktPnBhY2tldF9idWZmZXJzLAotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGwtPmRhdGEpKTsKLSAgICB9Ci0KLSAgICAvKiBvbmx5IGZpcnN0IChvbmx5KSBjb25maWd1cmF0aW9uIGN1dHMgbGVuZ3RoIGZpZWxkICovCi0gICAgLyogTk9URTogc3BlYyAoaWYgYW55KSBpcyBub3QgY2xlYXIgb24gdGhpcyAuLi4gKi8KLSAgICBub3RfaW5fbGVuZ3RoID0gMDsKLQotICAgIHNpemUgLT0gcGxlbjsKLSAgICBkYXRhICs9IHBsZW47Ci0KLSAgICBydHB0aGVvcmFwYXktPnBheWxvYWRfcG9zICs9IHBsZW4gKyAyOwotICAgIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9sZWZ0IC09IHBsZW4gKyAyOwotCi0gICAgaWYgKGZyYWdtZW50ZWQpIHsKLSAgICAgIGlmIChzaXplID09IDApCi0gICAgICAgIC8qIGxhc3QgZnJhZ21lbnQsIHNldCBGIHRvIDB4My4gKi8KLSAgICAgICAgcnRwdGhlb3JhcGF5LT5wYXlsb2FkX0YgPSAweDM7Ci0gICAgICBlbHNlCi0gICAgICAgIC8qIGZyYWdtZW50IGNvbnRpbnVlcywgc2V0IEYgdG8gMHgyLiAqLwotICAgICAgICBydHB0aGVvcmFwYXktPnBheWxvYWRfRiA9IDB4MjsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgIC8qIGZyYWdtZW50ZWQgcGFja2V0IHN0YXJ0cywgc2V0IEYgdG8gMHgxLCBtYXJrIG91cnNlbHZlcyBhcwotICAgICAgICAgKiBmcmFnbWVudGVkLiAqLwotICAgICAgICBydHB0aGVvcmFwYXktPnBheWxvYWRfRiA9IDB4MTsKLSAgICAgICAgZnJhZ21lbnRlZCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChmcmFnbWVudGVkKSB7Ci0gICAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gICAgICAvKiBmcmFnbWVudGVkIHBhY2tldHMgYXJlIGFsd2F5cyBmbHVzaGVkIGFuZCBoYXZlIHB0a3Mgb2YgMCAqLwotICAgICAgcnRwdGhlb3JhcGF5LT5wYXlsb2FkX3BrdHMgPSAwOwotICAgICAgcmV0ID0gZ3N0X3J0cF90aGVvcmFfcGF5X2ZsdXNoX3BhY2tldCAocnRwdGhlb3JhcGF5KTsKLQotICAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgIC8qIHN0YXJ0IG5ldyBwYWNrZXQgYW5kIGdldCBwb2ludGVycy4gVERUIHN0YXlzIHRoZSBzYW1lLiAqLwotICAgICAgICBnc3RfcnRwX3RoZW9yYV9wYXlfaW5pdF9wYWNrZXQgKHJ0cHRoZW9yYXBheSwKLSAgICAgICAgICAgIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9URFQsIHRpbWVzdGFtcCk7Ci0gICAgICAgIGdzdF9ydHBfYnVmZmVyX21hcCAocnRwdGhlb3JhcGF5LT5wYWNrZXQsIEdTVF9NQVBfV1JJVEUsICZydHApOwotICAgICAgICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotICAgICAgICBwcG9zID0gcGF5bG9hZCArIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9wb3M7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHVuZnJhZ21lbnRlZCBwYWNrZXQsIHVwZGF0ZSBzdGF0cyBmb3IgbmV4dCBwYWNrZXQsIHNpemUgPT0gMCBhbmQgd2UKLSAgICAgICAqIGV4aXQgdGhlIHdoaWxlIGxvb3AgKi8KLSAgICAgIHJ0cHRoZW9yYXBheS0+cGF5bG9hZF9wa3RzKys7Ci0gICAgICBpZiAoZHVyYXRpb24gIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICAgICAgcnRwdGhlb3JhcGF5LT5wYXlsb2FkX2R1cmF0aW9uICs9IGR1cmF0aW9uOwotICAgIH0KLSAgfSB3aGlsZSAoc2l6ZSAmJiByZXQgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGlmIChydHAuYnVmZmVyKQotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLWRvbmU6Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfdGhlb3JhX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwVGhlb3JhUGF5ICpydHB0aGVvcmFwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3VpbnQ4ICpkYXRhOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIHRpbWVzdGFtcDsKLSAgZ3VpbnQ4IFREVDsKLSAgZ2Jvb2xlYW4ga2V5ZnJhbWUgPSBGQUxTRTsKLQotICBydHB0aGVvcmFwYXkgPSBHU1RfUlRQX1RIRU9SQV9QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFwYXksICJzaXplICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAiLCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsIHNpemUsIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0KLSAgLyogZmluZCBwYWNrZXQgdHlwZSAqLwotICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgVERUID0gMDsKLSAgICBrZXlmcmFtZSA9IEZBTFNFOwotICB9IGVsc2UgaWYgKGRhdGFbMF0gJiAweDgwKSB7Ci0gICAgLyogaGVhZGVyICovCi0gICAgaWYgKGRhdGFbMF0gPT0gMHg4MCkgewotICAgICAgLyogaWRlbnRpZmljYXRpb24sIHdlIG5lZWQgdG8gcGFyc2UgdGhpcyBpbiBvcmRlciB0byBnZXQgdGhlIGNsb2NrIHJhdGUuCi0gICAgICAgKi8KLSAgICAgIGlmIChHX1VOTElLRUxZICghZ3N0X3J0cF90aGVvcmFfcGF5X3BhcnNlX2lkIChiYXNlcGF5bG9hZCwgZGF0YSwgc2l6ZSkpKQotICAgICAgICBnb3RvIHBhcnNlX2lkX2ZhaWxlZDsKLSAgICAgIFREVCA9IDE7Ci0gICAgfSBlbHNlIGlmIChkYXRhWzBdID09IDB4ODEpIHsKLSAgICAgIC8qIGNvbW1lbnQgKi8KLSAgICAgIFREVCA9IDI7Ci0gICAgfSBlbHNlIGlmIChkYXRhWzBdID09IDB4ODIpIHsKLSAgICAgIC8qIHNldHVwICovCi0gICAgICBURFQgPSAxOwotICAgIH0gZWxzZQotICAgICAgZ290byB1bmtub3duX2hlYWRlcjsKLSAgfSBlbHNlIHsKLSAgICAvKiBkYXRhICovCi0gICAgVERUID0gMDsKLSAgICBrZXlmcmFtZSA9ICgoZGF0YVswXSAmIDB4NDApID09IDApOwotICB9Ci0KLSAgLyogd2UgbmVlZCB0byBjb2xsZWN0IHRoZSBoZWFkZXJzIGFuZCBjb25zdHJ1Y3QgYSBjb25maWcgc3RyaW5nIGZyb20gdGhlbSAqLwotICBpZiAoVERUICE9IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHB0aGVvcmFwYXksICJjb2xsZWN0aW5nIGhlYWRlciwgYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAgICAvKiBhcHBlbmQgaGVhZGVyIHRvIHRoZSBsaXN0IG9mIGhlYWRlcnMgKi8KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJ0cHRoZW9yYXBheS0+aGVhZGVycyA9IGdfbGlzdF9hcHBlbmQgKHJ0cHRoZW9yYXBheS0+aGVhZGVycywgYnVmZmVyKTsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0gZWxzZSBpZiAocnRwdGhlb3JhcGF5LT5oZWFkZXJzICYmIHJ0cHRoZW9yYXBheS0+bmVlZF9oZWFkZXJzKSB7Ci0gICAgaWYgKCFnc3RfcnRwX3RoZW9yYV9wYXlfZmluaXNoX2hlYWRlcnMgKGJhc2VwYXlsb2FkKSkKLSAgICAgIGdvdG8gaGVhZGVyX2Vycm9yOwotICB9Ci0KLSAgLyogdGhlcmUgaXMgYSBjb25maWcgcmVxdWVzdCwgc2VlIGlmIHdlIG5lZWQgdG8gaW5zZXJ0IGl0ICovCi0gIGlmIChrZXlmcmFtZSAmJiAocnRwdGhlb3JhcGF5LT5jb25maWdfaW50ZXJ2YWwgPiAwKSAmJgotICAgICAgcnRwdGhlb3JhcGF5LT5jb25maWdfZGF0YSkgewotICAgIGdib29sZWFuIHNlbmRfY29uZmlnID0gRkFMU0U7Ci0KLSAgICBpZiAocnRwdGhlb3JhcGF5LT5sYXN0X2NvbmZpZyAhPSAtMSkgewotICAgICAgZ3VpbnQ2NCBkaWZmOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwdGhlb3JhcGF5LAotICAgICAgICAgICJub3cgJSIgR1NUX1RJTUVfRk9STUFUICIsIGxhc3QgVk9QLUkgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCksIEdTVF9USU1FX0FSR1MgKHJ0cHRoZW9yYXBheS0+bGFzdF9jb25maWcpKTsKLQotICAgICAgLyogY2FsY3VsYXRlIGRpZmYgYmV0d2VlbiBsYXN0IGNvbmZpZyBpbiBtaWxsaXNlY29uZHMgKi8KLSAgICAgIGlmICh0aW1lc3RhbXAgPiBydHB0aGVvcmFwYXktPmxhc3RfY29uZmlnKSB7Ci0gICAgICAgIGRpZmYgPSB0aW1lc3RhbXAgLSBydHB0aGVvcmFwYXktPmxhc3RfY29uZmlnOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGlmZiA9IDA7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHRoZW9yYXBheSwKLSAgICAgICAgICAiaW50ZXJ2YWwgc2luY2UgbGFzdCBjb25maWcgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkaWZmKSk7Ci0KLSAgICAgIC8qIGJpZ2dlciB0aGFuIGludGVydmFsLCBxdWV1ZSBjb25maWcgKi8KLSAgICAgIC8qIEZJWE1FIHNob3VsZCBjb252ZXJ0IHRpbWVzdGFtcHMgdG8gcnVubmluZyB0aW1lICovCi0gICAgICBpZiAoR1NUX1RJTUVfQVNfU0VDT05EUyAoZGlmZikgPj0gcnRwdGhlb3JhcGF5LT5jb25maWdfaW50ZXJ2YWwpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhcGF5LCAidGltZSB0byBzZW5kIGNvbmZpZyIpOwotICAgICAgICBzZW5kX2NvbmZpZyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIG5vIGtub3duIHByZXZpb3VzIGNvbmZpZyB0aW1lLCBzZW5kIG5vdyAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdGhlb3JhcGF5LCAibm8gcHJldmlvdXMgY29uZmlnIHRpbWUsIHNlbmQgbm93Iik7Ci0gICAgICBzZW5kX2NvbmZpZyA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKHNlbmRfY29uZmlnKSB7Ci0gICAgICAvKiB3ZSBuZWVkIHRvIHNlbmQgY29uZmlnIG5vdyBmaXJzdCAqLwotICAgICAgLyogZGlmZmVyZW50IFREVCB0eXBlIGZvcmNlcyBmbHVzaCAqLwotICAgICAgZ3N0X3J0cF90aGVvcmFfcGF5X3BheWxvYWRfYnVmZmVyIChydHB0aGVvcmFwYXksIDEsCi0gICAgICAgICAgTlVMTCwgcnRwdGhlb3JhcGF5LT5jb25maWdfZGF0YSwgcnRwdGhlb3JhcGF5LT5jb25maWdfc2l6ZSwKLSAgICAgICAgICB0aW1lc3RhbXAsIEdTVF9DTE9DS19USU1FX05PTkUsIHJ0cHRoZW9yYXBheS0+Y29uZmlnX2V4dHJhX2xlbik7Ci0KLSAgICAgIGlmICh0aW1lc3RhbXAgIT0gLTEpIHsKLSAgICAgICAgcnRwdGhlb3JhcGF5LT5sYXN0X2NvbmZpZyA9IHRpbWVzdGFtcDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXQgPQotICAgICAgZ3N0X3J0cF90aGVvcmFfcGF5X3BheWxvYWRfYnVmZmVyIChydHB0aGVvcmFwYXksIFREVCwgYnVmZmVyLCBkYXRhLCBzaXplLAotICAgICAgdGltZXN0YW1wLCBkdXJhdGlvbiwgMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLXBhcnNlX2lkX2ZhaWxlZDoKLSAgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLXVua25vd25faGVhZGVyOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwdGhlb3JhcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIklnbm9yaW5nIHVua25vd24gaGVhZGVyIHJlY2VpdmVkIikpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLWhlYWRlcl9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cHRoZW9yYXBheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJFcnJvciBpbml0aWFsaXppbmcgaGVhZGVyIGNvbmZpZyIpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF90aGVvcmFfcGF5X3NpbmtfZXZlbnQgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwVGhlb3JhUGF5ICpydHB0aGVvcmFwYXkgPSBHU1RfUlRQX1RIRU9SQV9QQVkgKHBheWxvYWQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfcnRwX3RoZW9yYV9wYXlfY2xlYXJfcGFja2V0IChydHB0aGVvcmFwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIC8qIGZhbHNlIHRvIGxldCBwYXJlbnQgaGFuZGxlIGV2ZW50IGFzIHdlbGwgKi8KLSAgcmV0dXJuIEdTVF9SVFBfQkFTRV9QQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChwYXlsb2FkLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF90aGVvcmFfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwVGhlb3JhUGF5ICpydHB0aGVvcmFwYXk7Ci0KLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cHRoZW9yYXBheSA9IEdTVF9SVFBfVEhFT1JBX1BBWSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfdGhlb3JhX3BheV9jbGVhbnVwIChydHB0aGVvcmFwYXkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3RoZW9yYV9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cFRoZW9yYVBheSAqcnRwdGhlb3JhcGF5OwotCi0gIHJ0cHRoZW9yYXBheSA9IEdTVF9SVFBfVEhFT1JBX1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ09ORklHX0lOVEVSVkFMOgotICAgICAgcnRwdGhlb3JhcGF5LT5jb25maWdfaW50ZXJ2YWwgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdGhlb3JhX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwVGhlb3JhUGF5ICpydHB0aGVvcmFwYXk7Ci0KLSAgcnRwdGhlb3JhcGF5ID0gR1NUX1JUUF9USEVPUkFfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DT05GSUdfSU5URVJWQUw6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRwdGhlb3JhcGF5LT5jb25maWdfaW50ZXJ2YWwpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3RoZW9yYV9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHB0aGVvcmFwYXkiLAotICAgICAgR1NUX1JBTktfU0VDT05EQVJZLCBHU1RfVFlQRV9SVFBfVEhFT1JBX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5oIGIvZ3N0L3J0cC9nc3RydHB0aGVvcmFwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiYzAxZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHRoZW9yYXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1RIRU9SQV9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9USEVPUkFfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZXBheWxvYWQuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfVEhFT1JBX1BBWSBcCi0gIChnc3RfcnRwX3RoZW9yYV9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9USEVPUkFfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1RIRU9SQV9QQVksR3N0UnRwVGhlb3JhUGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9USEVPUkFfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9USEVPUkFfUEFZLEdzdFJ0cFRoZW9yYVBheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9USEVPUkFfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX1RIRU9SQV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1RIRU9SQV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1RIRU9SQV9QQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVGhlb3JhUGF5IEdzdFJ0cFRoZW9yYVBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBUaGVvcmFQYXlDbGFzcyBHc3RSdHBUaGVvcmFQYXlDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBUaGVvcmFQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICAvKiB0aGUgaGVhZGVycyAqLwotICBnYm9vbGVhbiAgICAgIG5lZWRfaGVhZGVyczsKLSAgR0xpc3QgICAgICAgICpoZWFkZXJzOwotCi0gIC8qIHF1ZXVlcyBvZiBidWZmZXJzIGFsb25nIHdpdGggc29tZSBzdGF0cy4gKi8KLSAgR3N0QnVmZmVyICAgICpwYWNrZXQ7Ci0gIEdMaXN0ICAgICAgICAqcGFja2V0X2J1ZmZlcnM7Ci0gIGd1aW50ICAgICAgICAgcGF5bG9hZF9wb3M7Ci0gIGd1aW50ICAgICAgICAgcGF5bG9hZF9sZWZ0OwotICBndWludDMyICAgICAgIHBheWxvYWRfaWRlbnQ7Ci0gIGd1aW50OCAgICAgICAgcGF5bG9hZF9GOwotICBndWludDggICAgICAgIHBheWxvYWRfVERUOwotICBndWludCAgICAgICAgIHBheWxvYWRfcGt0czsKLSAgR3N0Q2xvY2tUaW1lICBwYXlsb2FkX3RpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lICBwYXlsb2FkX2R1cmF0aW9uOwotCi0gIC8qIGNvbmZpZyAocmUtc2VuZGluZykgKi8KLSAgZ3VpbnQ4ICAgICAgICpjb25maWdfZGF0YTsKLSAgZ3VpbnQgICAgICAgICBjb25maWdfc2l6ZTsKLSAgZ3VpbnQgICAgICAgICBjb25maWdfZXh0cmFfbGVuOwotICBndWludCAgICAgICAgIGNvbmZpZ19pbnRlcnZhbDsKLSAgR3N0Q2xvY2tUaW1lICBsYXN0X2NvbmZpZzsKLQotICBnaW50ICAgICAgICAgIHBpeGVsX2Zvcm1hdDsKLSAgZ2ludCAgICAgICAgICB3aWR0aDsKLSAgZ2ludCAgICAgICAgICBoZWlnaHQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFRoZW9yYVBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0cF90aGVvcmFfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF90aGVvcmFfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1RIRU9SQV9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHV0aWxzLmMgYi9nc3QvcnRwL2dzdHJ0cHV0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NzM1YWYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHB1dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHUXVhcmsgY29weV90YWc7Ci19IENvcHlNZXRhRGF0YTsKLQotc3RhdGljIGdib29sZWFuCi1mb3JlYWNoX21ldGFkYXRhX2NvcHkgKEdzdEJ1ZmZlciAqIGluYnVmLCBHc3RNZXRhICoqIG1ldGEsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgQ29weU1ldGFEYXRhICpkYXRhID0gdXNlcl9kYXRhOwotICBHc3RFbGVtZW50ICplbGVtZW50ID0gZGF0YS0+ZWxlbWVudDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBkYXRhLT5vdXRidWY7Ci0gIEdRdWFyayBjb3B5X3RhZyA9IGRhdGEtPmNvcHlfdGFnOwotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9ICgqbWV0YSktPmluZm87Ci0gIGNvbnN0IGdjaGFyICpjb25zdCAqdGFncyA9IGdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzIChpbmZvLT5hcGkpOwotCi0gIGlmICghdGFncyB8fCAoY29weV90YWcgIT0gMCAmJiBnX3N0cnZfbGVuZ3RoICgoZ2NoYXIgKiopIHRhZ3MpID09IDEKLSAgICAgICAgICAmJiBnc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnIChpbmZvLT5hcGksIGNvcHlfdGFnKSkpIHsKLSAgICBHc3RNZXRhVHJhbnNmb3JtQ29weSBjb3B5X2RhdGEgPSB7IEZBTFNFLCAwLCAtMSB9OwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJjb3B5IG1ldGFkYXRhICVzIiwgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICAgIC8qIHNpbXBseSBjb3B5IHRoZW4gKi8KLSAgICBpbmZvLT50cmFuc2Zvcm1fZnVuYyAob3V0YnVmLCAqbWV0YSwgaW5idWYsCi0gICAgICAgIF9nc3RfbWV0YV90cmFuc2Zvcm1fY29weSwgJmNvcHlfZGF0YSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgIm5vdCBjb3B5aW5nIG1ldGFkYXRhICVzIiwKLSAgICAgICAgZ190eXBlX25hbWUgKGluZm8tPmFwaSkpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIFRPRE86IFNob3VsZCBwcm9iYWJseSBtYWtlIGNvcHlfdGFnIGFuIGFycmF5IGF0IHNvbWUgcG9pbnQgKi8KLXZvaWQKLWdzdF9ydHBfY29weV9tZXRhIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogb3V0YnVmLCBHc3RCdWZmZXIgKiBpbmJ1ZiwKLSAgICBHUXVhcmsgY29weV90YWcpCi17Ci0gIENvcHlNZXRhRGF0YSBkYXRhID0geyBlbGVtZW50LCBvdXRidWYsIGNvcHlfdGFnIH07Ci0KLSAgZ3N0X2J1ZmZlcl9mb3JlYWNoX21ldGEgKGluYnVmLCBmb3JlYWNoX21ldGFkYXRhX2NvcHksICZkYXRhKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR1F1YXJrIGtlZXBfdGFnOwotfSBEcm9wTWV0YURhdGE7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yZWFjaF9tZXRhZGF0YV9kcm9wIChHc3RCdWZmZXIgKiBpbmJ1ZiwgR3N0TWV0YSAqKiBtZXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIERyb3BNZXRhRGF0YSAqZGF0YSA9IHVzZXJfZGF0YTsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IGRhdGEtPmVsZW1lbnQ7Ci0gIEdRdWFyayBrZWVwX3RhZyA9IGRhdGEtPmtlZXBfdGFnOwotICBjb25zdCBHc3RNZXRhSW5mbyAqaW5mbyA9ICgqbWV0YSktPmluZm87Ci0gIGNvbnN0IGdjaGFyICpjb25zdCAqdGFncyA9IGdzdF9tZXRhX2FwaV90eXBlX2dldF90YWdzIChpbmZvLT5hcGkpOwotCi0gIGlmICghdGFncyB8fCAoa2VlcF90YWcgIT0gMCAmJiBnX3N0cnZfbGVuZ3RoICgoZ2NoYXIgKiopIHRhZ3MpID09IDEKLSAgICAgICAgICAmJiBnc3RfbWV0YV9hcGlfdHlwZV9oYXNfdGFnIChpbmZvLT5hcGksIGtlZXBfdGFnKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAia2VlcGluZyBtZXRhZGF0YSAlcyIsIGdfdHlwZV9uYW1lIChpbmZvLT5hcGkpKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAiZHJvcHBpbmcgbWV0YWRhdGEgJXMiLCBnX3R5cGVfbmFtZSAoaW5mby0+YXBpKSk7Ci0gICAgKm1ldGEgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIFRPRE86IFNob3VsZCBwcm9iYWJseSBtYWtlIGtlZXBfdGFnIGFuIGFycmF5IGF0IHNvbWUgcG9pbnQgKi8KLXZvaWQKLWdzdF9ydHBfZHJvcF9tZXRhIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogYnVmLCBHUXVhcmsga2VlcF90YWcpCi17Ci0gIERyb3BNZXRhRGF0YSBkYXRhID0geyBlbGVtZW50LCBrZWVwX3RhZyB9OwotCi0gIGdzdF9idWZmZXJfZm9yZWFjaF9tZXRhIChidWYsIGZvcmVhY2hfbWV0YWRhdGFfZHJvcCwgJmRhdGEpOwotfQotCi0vKiBTdG9sZW4gZnJvbSBiYWQvZ3N0L21wZWd0c2RlbXV4L3BheWxvYWRlcl9wYXJzZXJzLmMgKi8KLS8qIHZhcmlhYmxlIGxlbmd0aCBFeHAtR29sb21iIHBhcnNpbmcgYWNjb3JkaW5nIHRvIEguMjY1IHNwZWMgc2VjdGlvbiA5LjIqLwotZ2Jvb2xlYW4KLWdzdF9ydHBfcmVhZF9nb2xvbWIgKEdzdEJpdFJlYWRlciAqIGJyLCBndWludDMyICogdmFsdWUpCi17Ci0gIGd1aW50OCBiLCBsZWFkaW5nX3plcm9zID0gLTE7Ci0gICp2YWx1ZSA9IDE7Ci0KLSAgZm9yIChiID0gMDsgIWI7IGxlYWRpbmdfemVyb3MrKykgewotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKGJyLCAmYiwgMSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgKnZhbHVlICo9IDI7Ci0gIH0KLQotICAqdmFsdWUgPSAoKnZhbHVlID4+IDEpIC0gMTsKLSAgaWYgKGxlYWRpbmdfemVyb3MgPiAwKSB7Ci0gICAgZ3VpbnQzMiB0bXAgPSAwOwotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyIChiciwgJnRtcCwgbGVhZGluZ196ZXJvcykpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgKnZhbHVlICs9IHRtcDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHB1dGlscy5oIGIvZ3N0L3J0cC9nc3RydHB1dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTEwYWViLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDE1IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbkBjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfVVRJTFNfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9VVElMU19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi1HX0dOVUNfSU5URVJOQUwKLXZvaWQgZ3N0X3J0cF9jb3B5X21ldGEgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCdWZmZXIgKm91dGJ1ZiwgR3N0QnVmZmVyICppbmJ1ZiwgR1F1YXJrIGNvcHlfdGFnKTsKLQotR19HTlVDX0lOVEVSTkFMCi12b2lkIGdzdF9ydHBfZHJvcF9tZXRhIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICpidWYsIEdRdWFyayBrZWVwX3RhZyk7Ci0KLUdfR05VQ19JTlRFUk5BTAotZ2Jvb2xlYW4gZ3N0X3J0cF9yZWFkX2dvbG9tYiAoR3N0Qml0UmVhZGVyICogYnIsIGd1aW50MzIgKiB2YWx1ZSk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfVVRJTFNfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2Mjc1MGEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC90YWcvdGFnLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHJ0cHZvcmJpc2RlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwdm9yYmlzZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cHZvcmJpc2RlcGF5X2RlYnVnKQotCi0vKiByZWZlcmVuY2VzOgotICogaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIxNS50eHQKLSAqLwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92b3JiaXNfZGVwYXlfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYIF0sICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlZPUkJJU1wiIgotICAgICAgICAvKiBBbGwgcmVxdWlyZWQgcGFyYW1ldGVycyAKLSAgICAgICAgICoKLSAgICAgICAgICogImVuY29kaW5nLXBhcmFtcyA9IChzdHJpbmcpIDxudW0gY2hhbm5lbHM+IgotICAgICAgICAgKiAiY29uZmlndXJhdGlvbiA9IChzdHJpbmcpIEFOWSIgCi0gICAgICAgICAqLwotICAgICkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92b3JiaXNfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXZvcmJpcyIpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfcnRwX3ZvcmJpc19kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBWb3JiaXNEZXBheSwgZ3N0X3J0cF92b3JiaXNfZGVwYXksCi0gICAgR1NUX1RZUEVfUlRQX0JBU0VfREVQQVlMT0FEKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdm9yYmlzX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF92b3JiaXNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3ZvcmJpc19kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX3ZvcmJpc19kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92b3JiaXNfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwVm9yYmlzRGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzICpnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX3ZvcmJpc19kZXBheV9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX3ZvcmJpc19kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF92b3JiaXNfZGVwYXlfcHJvY2VzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3ZvcmJpc19kZXBheV9zZXRjYXBzOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdm9yYmlzX2RlcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3ZvcmJpc19kZXBheV9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIFZvcmJpcyBkZXBheWxvYWRlciIsICJDb2RlYy9EZXBheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiRXh0cmFjdHMgVm9yYmlzIEF1ZGlvIGZyb20gUlRQIHBhY2tldHMgKFJGQyA1MjE1KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwdm9yYmlzZGVwYXlfZGVidWcsICJydHB2b3JiaXNkZXBheSIsIDAsCi0gICAgICAiVm9yYmlzIFJUUCBEZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92b3JiaXNfZGVwYXlfaW5pdCAoR3N0UnRwVm9yYmlzRGVwYXkgKiBydHB2b3JiaXNkZXBheSkKLXsKLSAgcnRwdm9yYmlzZGVwYXktPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2NvbmZpZyAoR3N0UnRwVm9yYmlzQ29uZmlnICogY29uZikKLXsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoY29uZi0+aGVhZGVycywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgZ19mcmVlIChjb25mKTsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfaW5kZW50cyAoR3N0UnRwVm9yYmlzRGVwYXkgKiBydHB2b3JiaXNkZXBheSkKLXsKLSAgZ19saXN0X2ZyZWVfZnVsbCAocnRwdm9yYmlzZGVwYXktPmNvbmZpZ3MsIChHRGVzdHJveU5vdGlmeSkgZnJlZV9jb25maWcpOwotICBydHB2b3JiaXNkZXBheS0+Y29uZmlncyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZvcmJpc19kZXBheV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwVm9yYmlzRGVwYXkgKnJ0cHZvcmJpc2RlcGF5ID0gR1NUX1JUUF9WT1JCSVNfREVQQVkgKG9iamVjdCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHJ0cHZvcmJpc2RlcGF5LT5hZGFwdGVyKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLS8qIHRha2VzIG93bmVyc2hpcCBvZiBjb25mYnVmICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdm9yYmlzX2RlcGF5X3BhcnNlX2NvbmZpZ3VyYXRpb24gKEdzdFJ0cFZvcmJpc0RlcGF5ICogcnRwdm9yYmlzZGVwYXksCi0gICAgR3N0QnVmZmVyICogY29uZmJ1ZikKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50MzIgbnVtX2hlYWRlcnM7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDggKmRhdGE7Ci0gIGdzaXplIHNpemU7Ci0gIGd1aW50IG9mZnNldDsKLSAgZ2ludCBpLCBqOwotCi0gIGdzdF9idWZmZXJfbWFwIChjb25mYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgImNvbmZpZyBzaXplICUiIEdfR1NJWkVfRk9STUFULCBzaXplKTsKLQotICAvKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHBhY2tlZCBoZWFkZXJzICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZWQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZWQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgaWYgKHNpemUgPCA0KQotICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gIG51bV9oZWFkZXJzID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLSAgc2l6ZSAtPSA0OwotICBkYXRhICs9IDQ7Ci0gIG9mZnNldCA9IDQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwdm9yYmlzZGVwYXksICJoYXZlICV1IGhlYWRlcnMiLCBudW1faGVhZGVycyk7Ci0KLSAgLyogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgIElkZW50ICAgICAgICAgICAgICAgICAgICAgICB8IGxlbmd0aCAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgfCBuLiBvZiBoZWFkZXJzIHwgICAgbGVuZ3RoMSAgICB8ICAgIGxlbmd0aDIgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBJZGVudGlmaWNhdGlvbiBIZWFkZXIgICAgICAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgfCAgICAgICAgIENvbW1lbnQgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAuLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiAuLiAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cCBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKi8KLSAgZm9yIChpID0gMDsgaSA8IG51bV9oZWFkZXJzOyBpKyspIHsKLSAgICBndWludDMyIGlkZW50OwotICAgIGd1aW50MTYgbGVuZ3RoOwotICAgIGd1aW50OCBuX2hlYWRlcnMsIGI7Ci0gICAgR3N0UnRwVm9yYmlzQ29uZmlnICpjb25mOwotICAgIGd1aW50ICpoX3NpemVzOwotICAgIGd1aW50IGV4dHJhID0gMTsKLQotICAgIGlmIChzaXplIDwgNikKLSAgICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gICAgaWRlbnQgPSAoZGF0YVswXSA8PCAxNikgfCAoZGF0YVsxXSA8PCA4KSB8IGRhdGFbMl07Ci0gICAgbGVuZ3RoID0gKGRhdGFbM10gPDwgOCkgfCBkYXRhWzRdOwotICAgIG5faGVhZGVycyA9IGRhdGFbNV07Ci0gICAgc2l6ZSAtPSA2OwotICAgIGRhdGEgKz0gNjsKLSAgICBvZmZzZXQgKz0gNjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHZvcmJpc2RlcGF5LAotICAgICAgICAiaGVhZGVyICVkLCBpZGVudCAweCUwOHgsIGxlbmd0aCAldSwgbGVmdCAlIiBHX0dTSVpFX0ZPUk1BVCwgaSwgaWRlbnQsCi0gICAgICAgIGxlbmd0aCwgc2l6ZSk7Ci0KLSAgICAvKiBGSVhNRSBjaGVjayBpZiB3ZSBhbHJlYWR5IGdvdCB0aGlzIGlkZW50ICovCi0KLSAgICAvKiBsZW5ndGggbWlnaHQgYWxzbyBpbmNsdWRlIGNvdW50IG9mIGZvbGxvd2luZyBzaXplIGZpZWxkcyAqLwotICAgIGlmIChzaXplIDwgbGVuZ3RoICYmIHNpemUgKyAxICE9IGxlbmd0aCkKLSAgICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gICAgLyogcmVhZCBoZWFkZXIgc2l6ZXMgd2UgcmVhZCAyIHNpemVzLCB0aGUgdGhpcmQgc2l6ZSAoZm9yIHdoaWNoIHdlIGFsbG9jYXRlCi0gICAgICogc3BhY2UpIG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSB0b3RhbCBwYWNrZWQgaGVhZGVyIGxlbmd0aC4gKi8KLSAgICBoX3NpemVzID0gZ19uZXdhIChndWludCwgbl9oZWFkZXJzICsgMSk7Ci0gICAgZm9yIChqID0gMDsgaiA8IG5faGVhZGVyczsgaisrKSB7Ci0gICAgICBndWludCBoX3NpemU7Ci0KLSAgICAgIGhfc2l6ZSA9IDA7Ci0gICAgICBkbyB7Ci0gICAgICAgIGlmIChzaXplIDwgMSkKLSAgICAgICAgICBnb3RvIHRvb19zbWFsbDsKLSAgICAgICAgYiA9ICpkYXRhKys7Ci0gICAgICAgIG9mZnNldCsrOwotICAgICAgICBleHRyYSsrOwotICAgICAgICBzaXplLS07Ci0gICAgICAgIGhfc2l6ZSA9IChoX3NpemUgPDwgNykgfCAoYiAmIDB4N2YpOwotICAgICAgfSB3aGlsZSAoYiAmIDB4ODApOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdm9yYmlzZGVwYXksICJoZWFkZXJzICVkOiBzaXplOiAldSIsIGosIGhfc2l6ZSk7Ci0KLSAgICAgIGlmIChsZW5ndGggPCBoX3NpemUpCi0gICAgICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gICAgICBoX3NpemVzW2pdID0gaF9zaXplOwotICAgICAgbGVuZ3RoIC09IGhfc2l6ZTsKLSAgICB9Ci0gICAgLyogbGFzdCBoZWFkZXIgbGVuZ3RoIGlzIHRoZSByZW1haW5pbmcgc3BhY2UgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgImxhc3QgaGVhZGVyIHNpemU6ICV1IiwgbGVuZ3RoKTsKLSAgICBoX3NpemVzW2pdID0gbGVuZ3RoOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdm9yYmlzZGVwYXksICJwcmVwYXJpbmcgaGVhZGVycyIpOwotICAgIGNvbmYgPSBnX25ldzAgKEdzdFJ0cFZvcmJpc0NvbmZpZywgMSk7Ci0gICAgY29uZi0+aWRlbnQgPSBpZGVudDsKLQotICAgIGZvciAoaiA9IDA7IGogPD0gbl9oZWFkZXJzOyBqKyspIHsKLSAgICAgIGd1aW50IGhfc2l6ZTsKLQotICAgICAgaF9zaXplID0gaF9zaXplc1tqXTsKLSAgICAgIGlmIChzaXplIDwgaF9zaXplKSB7Ci0gICAgICAgIGlmIChqICE9IG5faGVhZGVycyB8fCBzaXplICsgZXh0cmEgIT0gaF9zaXplKSB7Ci0gICAgICAgICAgZnJlZV9jb25maWcgKGNvbmYpOwotICAgICAgICAgIGdvdG8gdG9vX3NtYWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIG90aGVyd2lzZSBtZWFucyB0aGF0IG92ZXJhbGwgbGVuZ3RoIGZpZWxkIGNvbnRhaW5lZCB0b3RhbCBsZW5ndGgsCi0gICAgICAgICAgICogaW5jbHVkaW5nIGV4dHJhIGZpZWxkcyAqLwotICAgICAgICAgIGhfc2l6ZSAtPSBleHRyYTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgInJlYWRpbmcgaGVhZGVyICVkLCBzaXplICV1IiwgaiwKLSAgICAgICAgICBoX3NpemUpOwotCi0gICAgICBidWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChjb25mYnVmLCBHU1RfQlVGRkVSX0NPUFlfQUxMLCBvZmZzZXQsCi0gICAgICAgICAgaF9zaXplKTsKLSAgICAgIGNvbmYtPmhlYWRlcnMgPSBnX2xpc3RfYXBwZW5kIChjb25mLT5oZWFkZXJzLCBidWYpOwotICAgICAgb2Zmc2V0ICs9IGhfc2l6ZTsKLSAgICAgIHNpemUgLT0gaF9zaXplOwotICAgIH0KLSAgICBydHB2b3JiaXNkZXBheS0+Y29uZmlncyA9IGdfbGlzdF9hcHBlbmQgKHJ0cHZvcmJpc2RlcGF5LT5jb25maWdzLCBjb25mKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGNvbmZidWYsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChjb25mYnVmKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHZvcmJpc2RlcGF5LCAiY29uZmlndXJhdGlvbiB0b28gc21hbGwiKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChjb25mYnVmLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChjb25mYnVmKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3ZvcmJpc19kZXBheV9wYXJzZV9pbmJhbmRfY29uZmlndXJhdGlvbiAoR3N0UnRwVm9yYmlzRGVwYXkgKgotICAgIHJ0cHZvcmJpc2RlcGF5LCBndWludCBpZGVudCwgZ3VpbnQ4ICogY29uZmlndXJhdGlvbiwgZ3VpbnQgc2l6ZSwKLSAgICBndWludCBsZW5ndGgpCi17Ci0gIEdzdEJ1ZmZlciAqY29uZmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPCA0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogdHJhbnNmb3JtIGlubGluZSB0byBvdXQtb2YtYmFuZCBhbmQgcGFyc2UgdGhhdCBvbmUgKi8KLSAgY29uZmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSArIDkpOwotICBnc3RfYnVmZmVyX21hcCAoY29uZmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIC8qIDEgaGVhZGVyICovCi0gIEdTVF9XUklURV9VSU5UMzJfQkUgKG1hcC5kYXRhLCAxKTsKLSAgLyogd3JpdGUgSWRlbnQgKi8KLSAgR1NUX1dSSVRFX1VJTlQyNF9CRSAobWFwLmRhdGEgKyA0LCBpZGVudCk7Ci0gIC8qIHdyaXRlIHNvcnQtb2YtbGVuZ3RoICovCi0gIEdTVF9XUklURV9VSU5UMTZfQkUgKG1hcC5kYXRhICsgNywgbGVuZ3RoKTsKLSAgLyogY29weSByZW1haW5kZXIgKi8KLSAgbWVtY3B5IChtYXAuZGF0YSArIDksIGNvbmZpZ3VyYXRpb24sIHNpemUpOwotICBnc3RfYnVmZmVyX3VubWFwIChjb25mYnVmLCAmbWFwKTsKLQotICByZXR1cm4gZ3N0X3J0cF92b3JiaXNfZGVwYXlfcGFyc2VfY29uZmlndXJhdGlvbiAocnRwdm9yYmlzZGVwYXksIGNvbmZidWYpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdm9yYmlzX2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0UnRwVm9yYmlzRGVwYXkgKnJ0cHZvcmJpc2RlcGF5OwotICBHc3RDYXBzICpzcmNjYXBzOwotICBjb25zdCBnY2hhciAqY29uZmlndXJhdGlvbjsKLSAgZ2ludCBjbG9ja19yYXRlOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcnRwdm9yYmlzZGVwYXkgPSBHU1RfUlRQX1ZPUkJJU19ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAvKiBnZXQgY2xvY2tyYXRlICovCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGdvdG8gbm9fcmF0ZTsKLQotICAvKiByZWFkIGFuZCBwYXJzZSBjb25maWd1cmF0aW9uIHN0cmluZyAqLwotICBjb25maWd1cmF0aW9uID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJjb25maWd1cmF0aW9uIik7Ci0gIGlmIChjb25maWd1cmF0aW9uKSB7Ci0gICAgR3N0QnVmZmVyICpjb25mYnVmOwotICAgIGd1aW50OCAqZGF0YTsKLSAgICBnc2l6ZSBzaXplOwotCi0gICAgLyogZGVzZXJpYWxpemUgYmFzZTY0IHRvIGJ1ZmZlciAqLwotICAgIGRhdGEgPSBnX2Jhc2U2NF9kZWNvZGUgKGNvbmZpZ3VyYXRpb24sICZzaXplKTsKLQotICAgIGNvbmZidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGNvbmZidWYsCi0gICAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIHNpemUsIDAsIHNpemUsIGRhdGEsIGdfZnJlZSkpOwotICAgIGlmICghZ3N0X3J0cF92b3JiaXNfZGVwYXlfcGFyc2VfY29uZmlndXJhdGlvbiAocnRwdm9yYmlzZGVwYXksIGNvbmZidWYpKQotICAgICAgZ290byBpbnZhbGlkX2NvbmZpZ3VyYXRpb247Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgIm5vIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIik7Ci0gIH0KLQotICAvKiBjYXBzIHNlZW0gZ29vZCwgY29uZmlndXJlIGVsZW1lbnQgKi8KLSAgZGVwYXlsb2FkLT5jbG9ja19yYXRlID0gY2xvY2tfcmF0ZTsKLQotICAvKiBzZXQgY2FwcyBvbiBwYWQgYW5kIG9uIGhlYWRlciAqLwotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtdm9yYmlzIik7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2NhcHMgKGRlcGF5bG9hZC0+c3JjcGFkLCBzcmNjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX2NvbmZpZ3VyYXRpb246Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgImludmFsaWQgY29uZmlndXJhdGlvbiBzcGVjaWZpZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3JhdGU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgIm5vIGNsb2NrLXJhdGUgc3BlY2lmaWVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF92b3JiaXNfZGVwYXlfc3dpdGNoX2NvZGVib29rIChHc3RSdHBWb3JiaXNEZXBheSAqIHJ0cHZvcmJpc2RlcGF5LAotICAgIGd1aW50MzIgaWRlbnQpCi17Ci0gIEdMaXN0ICp3YWxrOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgIkxvb2tpbmcgdXAgY29kZSBib29rIGlkZW50IDB4JTA4eCIsIGlkZW50KTsKLSAgZm9yICh3YWxrID0gcnRwdm9yYmlzZGVwYXktPmNvbmZpZ3M7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSdHBWb3JiaXNDb25maWcgKmNvbmYgPSAoR3N0UnRwVm9yYmlzQ29uZmlnICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoY29uZi0+aWRlbnQgPT0gaWRlbnQpIHsKLSAgICAgIEdMaXN0ICpoZWFkZXJzOwotCi0gICAgICAvKiBGSVhNRSwgcmVtb3ZlIHBhZHMsIGNyZWF0ZSBuZXcgcGFkLi4gKi8KLQotICAgICAgLyogcHVzaCBvdXQgYWxsIHRoZSBoZWFkZXJzICovCi0gICAgICBmb3IgKGhlYWRlcnMgPSBjb25mLT5oZWFkZXJzOyBoZWFkZXJzOyBoZWFkZXJzID0gZ19saXN0X25leHQgKGhlYWRlcnMpKSB7Ci0gICAgICAgIEdzdEJ1ZmZlciAqaGVhZGVyID0gR1NUX0JVRkZFUl9DQVNUIChoZWFkZXJzLT5kYXRhKTsKLQotICAgICAgICBnc3RfYnVmZmVyX3JlZiAoaGVhZGVyKTsKLSAgICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEIChydHB2b3JiaXNkZXBheSksCi0gICAgICAgICAgICBoZWFkZXIpOwotICAgICAgfQotICAgICAgLyogcmVtZW1iZXIgdGhlIGN1cnJlbnQgY29uZmlnICovCi0gICAgICBydHB2b3JiaXNkZXBheS0+Y29uZmlnID0gY29uZjsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgfQotICB9Ci0gIGlmICghcmVzKSB7Ci0gICAgLyogd2UgZG9uJ3Qga25vdyBhYm91dCB0aGUgaGVhZGVycywgZmlndXJlIG91dCBhbiBhbHRlcm5hdGl2ZSBtZXRob2QgZm9yCi0gICAgICogZ2V0dGluZyB0aGUgY29kZWJvb2tzLiBGSVhNRSwgZmFpbCBmb3Igbm93LiAqLwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF92b3JiaXNfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwKLSAgICBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cFZvcmJpc0RlcGF5ICpydHB2b3JiaXNkZXBheTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBnaW50IHBheWxvYWRfbGVuOwotICBHc3RCdWZmZXIgKnBheWxvYWRfYnVmZmVyID0gTlVMTDsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQzMiBoZWFkZXIsIGlkZW50OwotICBndWludDggRiwgVkRULCBwYWNrZXRzOwotICBndWludCBsZW5ndGg7Ci0KLSAgcnRwdm9yYmlzZGVwYXkgPSBHU1RfUlRQX1ZPUkJJU19ERVBBWSAoZGVwYXlsb2FkKTsKLQotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJnb3QgUlRQIHBhY2tldCBvZiBzaXplICVkIiwgcGF5bG9hZF9sZW4pOwotCi0gIC8qIHdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyBmb3IgdGhlIHBhY2tldCBoZWFkZXIgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKHBheWxvYWRfbGVuIDwgNCkpCi0gICAgZ290byBwYWNrZXRfc2hvcnQ7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICBoZWFkZXIgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBheWxvYWQpOwotICAvKgotICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICAgICAgICAgICBJZGVudCAgICAgICAgICAgICAgICAgICAgIHwgRiB8VkRUfCMgcGt0cy58Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqCi0gICAqIEY6IEZyYWdtZW50IHR5cGUgKDA9bm9uZSwgMT1zdGFydCwgMj1jb250LCAzPWVuZCkKLSAgICogVkRUOiBWb3JiaXMgZGF0YSB0eXBlICgwPXZvcmJpcywgMT1jb25maWcsIDI9Y29tbWVudCwgMz1yZXNlcnZlZCkKLSAgICogcGt0czogbnVtYmVyIG9mIHBhY2tldHMuCi0gICAqLwotICBWRFQgPSAoaGVhZGVyICYgMHgzMCkgPj4gNDsKLSAgaWYgKEdfVU5MSUtFTFkgKFZEVCA9PSAzKSkKLSAgICBnb3RvIGlnbm9yZV9yZXNlcnZlZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJoZWFkZXI6IDB4JTA4eCIsIGhlYWRlcik7Ci0gIGlkZW50ID0gKGhlYWRlciA+PiA4KSAmIDB4ZmZmZmZmOwotICBGID0gKGhlYWRlciAmIDB4YzApID4+IDY7Ci0gIHBhY2tldHMgPSAoaGVhZGVyICYgMHhmKTsKLQotICBpZiAoVkRUID09IDApIHsKLSAgICBnYm9vbGVhbiBkb19zd2l0Y2ggPSBGQUxTRTsKLQotICAgIC8qIHdlIGhhdmUgYSByYXcgcGF5bG9hZCwgZmluZCB0aGUgY29kZWJvb2sgZm9yIHRoZSBpZGVudCAqLwotICAgIGlmICghcnRwdm9yYmlzZGVwYXktPmNvbmZpZykgewotICAgICAgLyogd2UgZG9uJ3QgaGF2ZSBhbiBhY3RpdmUgY29kZWJvb2ssIGZpbmQgdGhlIGNvZGVib29rIGFuZAotICAgICAgICogYWN0aXZhdGUgaXQgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHZvcmJpc2RlcGF5LCAiTm8gYWN0aXZlIGNvZGVib29rLCBzd2l0Y2hpbmciKTsKLSAgICAgIGRvX3N3aXRjaCA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmIChydHB2b3JiaXNkZXBheS0+Y29uZmlnLT5pZGVudCAhPSBpZGVudCkgewotICAgICAgLyogY29kZWJvb2sgY2hhbmdlZCAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdm9yYmlzZGVwYXksICJjb2RlYm9vayBjaGFuZ2VkLCBzd2l0Y2hpbmciKTsKLSAgICAgIGRvX3N3aXRjaCA9IFRSVUU7Ci0gICAgfQotICAgIGlmIChkb19zd2l0Y2gpIHsKLSAgICAgIGlmICghZ3N0X3J0cF92b3JiaXNfZGVwYXlfc3dpdGNoX2NvZGVib29rIChydHB2b3JiaXNkZXBheSwgaWRlbnQpKQotICAgICAgICBnb3RvIHN3aXRjaF9mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAiaWRlbnQ6ICV1LCBGOiAlZCwgVkRUOiAlZCwgcGFja2V0czogJWQiLCBpZGVudCwKLSAgICAgIEYsIFZEVCwgcGFja2V0cyk7Ci0KLSAgLyogZnJhZ21lbnRlZCBwYWNrZXRzLCBhc3NlbWJsZSAqLwotICBpZiAoRiAhPSAwKSB7Ci0gICAgR3N0QnVmZmVyICp2ZGF0YTsKLQotICAgIGlmIChGID09IDEpIHsKLSAgICAgIC8qIGlmIHdlIHN0YXJ0IGEgcGFja2V0LCBjbGVhciBhZGFwdGVyIGFuZCBzdGFydCBhc3NlbWJsaW5nLiAqLwotICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHJ0cHZvcmJpc2RlcGF5LT5hZGFwdGVyKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgInN0YXJ0IGFzc2VtYmxlIik7Ci0gICAgICBydHB2b3JiaXNkZXBheS0+YXNzZW1ibGluZyA9IFRSVUU7Ci0gICAgfQotCi0gICAgaWYgKCFydHB2b3JiaXNkZXBheS0+YXNzZW1ibGluZykKLSAgICAgIGdvdG8gbm9fb3V0cHV0OwotCi0gICAgLyogc2tpcCBoZWFkZXIgYW5kIGxlbmd0aC4gKi8KLSAgICB2ZGF0YSA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCA2LCAtMSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJhc3NlbWJsZSB2b3JiaXMgcGFja2V0Iik7Ci0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAocnRwdm9yYmlzZGVwYXktPmFkYXB0ZXIsIHZkYXRhKTsKLQotICAgIC8qIHBhY2tldCBpcyBub3QgY29tcGxldGUsIHdlIGFyZSBkb25lICovCi0gICAgaWYgKEYgIT0gMykKLSAgICAgIGdvdG8gbm9fb3V0cHV0OwotCi0gICAgLyogY29uc3RydWN0IGFzc2VtYmxlZCBidWZmZXIgKi8KLSAgICBsZW5ndGggPSBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHJ0cHZvcmJpc2RlcGF5LT5hZGFwdGVyKTsKLSAgICBwYXlsb2FkX2J1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChydHB2b3JiaXNkZXBheS0+YWRhcHRlciwgbGVuZ3RoKTsKLSAgfSBlbHNlIHsKLSAgICBwYXlsb2FkX2J1ZmZlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCA0LCAtMSk7Ci0gICAgbGVuZ3RoID0gMDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgImFzc2VtYmxlIGRvbmUiKTsKLQotICBnc3RfYnVmZmVyX21hcCAocGF5bG9hZF9idWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHBheWxvYWQgPSBtYXAuZGF0YTsKLSAgcGF5bG9hZF9sZW4gPSBtYXAuc2l6ZTsKLQotICAvKiB3ZSBub3QgYXNzZW1ibGluZyBhbnltb3JlIG5vdyAqLwotICBydHB2b3JiaXNkZXBheS0+YXNzZW1ibGluZyA9IEZBTFNFOwotICBnc3RfYWRhcHRlcl9jbGVhciAocnRwdm9yYmlzZGVwYXktPmFkYXB0ZXIpOwotCi0gIC8qIHBheWxvYWQgbm93IHBvaW50cyB0byBhIGxlbmd0aCB3aXRoIHRoYXQgbWFueSB2b3JiaXMgZGF0YSBieXRlcy4KLSAgICogSXRlcmF0ZSBvdmVyIHRoZSBwYWNrZXRzIGFuZCBzZW5kIHRoZW0gb3V0LgotICAgKgotICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICAgbGVuZ3RoICAgICAgICAgICAgfCAgICAgICAgICB2b3JiaXMgZGF0YSAgICAgICAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICAgICAgICAgICAgdm9yYmlzIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICBsZW5ndGggICAgICAgICAgICAgfCAgIG5leHQgdm9yYmlzIHBhY2tldCBkYXRhICAgIC4uCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIC4uICAgICAgICAgICAgICAgICAgICAgICAgdm9yYmlzIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rKgotICAgKi8KLSAgd2hpbGUgKHBheWxvYWRfbGVuID4gMikgewotICAgIC8qIElmIGxlbmd0aCBpcyBub3QgMCwgd2UgaGF2ZSBhIHJlYXNzZW1ibGVkIHBhY2tldCBmb3Igd2hpY2ggd2UKLSAgICAgKiBjYWxjdWxhdGVkIHRoZSBsZW5ndGggYWxyZWFkeSBhbmQgZG9uJ3QgaGF2ZSB0byBza2lwIG92ZXIgdGhlCi0gICAgICogbGVuZ3RoIGZpZWxkIGFueW1vcmUKLSAgICAgKi8KLSAgICBpZiAobGVuZ3RoID09IDApIHsKLSAgICAgIGxlbmd0aCA9IEdTVF9SRUFEX1VJTlQxNl9CRSAocGF5bG9hZCk7Ci0gICAgICBwYXlsb2FkICs9IDI7Ci0gICAgICBwYXlsb2FkX2xlbiAtPSAyOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5bG9hZCwgInJlYWQgbGVuZ3RoICV1LCBhdmFpbDogJWQiLCBsZW5ndGgsCi0gICAgICAgIHBheWxvYWRfbGVuKTsKLQotICAgIC8qIHNraXAgcGFja2V0IGlmIHNvbWV0aGluZyBvZGQgaGFwcGVucyAqLwotICAgIGlmIChHX1VOTElLRUxZIChsZW5ndGggPiBwYXlsb2FkX2xlbikpCi0gICAgICBnb3RvIGxlbmd0aF9zaG9ydDsKLQotICAgIC8qIGhhbmRsZSBpbi1iYW5kIGNvbmZpZ3VyYXRpb24gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAoVkRUID09IDEpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgImluLWJhbmQgY29uZmlndXJhdGlvbiIpOwotICAgICAgaWYgKCFnc3RfcnRwX3ZvcmJpc19kZXBheV9wYXJzZV9pbmJhbmRfY29uZmlndXJhdGlvbiAocnRwdm9yYmlzZGVwYXksCi0gICAgICAgICAgICAgIGlkZW50LCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgbGVuZ3RoKSkKLSAgICAgICAgZ290byBpbnZhbGlkX2NvbmZpZ3VyYXRpb247Ci0gICAgICBnb3RvIG5vX291dHB1dDsKLSAgICB9Ci0KLSAgICAvKiBjcmVhdGUgYnVmZmVyIGZvciBwYWNrZXQgKi8KLSAgICBvdXRidWYgPQotICAgICAgICBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChwYXlsb2FkX2J1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwKLSAgICAgICAgcGF5bG9hZCAtIG1hcC5kYXRhLCBsZW5ndGgpOwotCi0gICAgcGF5bG9hZCArPSBsZW5ndGg7Ci0gICAgcGF5bG9hZF9sZW4gLT0gbGVuZ3RoOwotICAgIC8qIG1ha2Ugc3VyZSB0byByZWFkIG5leHQgbGVuZ3RoICovCi0gICAgbGVuZ3RoID0gMDsKLQotICAgIHJldCA9IGdzdF9ydHBfYmFzZV9kZXBheWxvYWRfcHVzaCAoZGVwYXlsb2FkLCBvdXRidWYpOwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBicmVhazsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKHBheWxvYWRfYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAocGF5bG9hZF9idWZmZXIpOwotCi0gIHJldHVybiBOVUxMOwotCi1ub19vdXRwdXQ6Ci0gIHsKLSAgICBpZiAocGF5bG9hZF9idWZmZXIpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHBheWxvYWRfYnVmZmVyLCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHBheWxvYWRfYnVmZmVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgLyogRVJPUlJTICovCi1zd2l0Y2hfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwdm9yYmlzZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiQ291bGQgbm90IHN3aXRjaCBjb2RlYm9va3MiKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXBhY2tldF9zaG9ydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cHZvcmJpc2RlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIlBhY2tldCB3YXMgdG9vIHNob3J0ICglZCA8IDQpIiwgcGF5bG9hZF9sZW4pKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotaWdub3JlX3Jlc2VydmVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHB2b3JiaXNkZXBheSwgInJlc2VydmVkIFZEVCBpZ25vcmVkIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWxlbmd0aF9zaG9ydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cHZvcmJpc2RlcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKE5VTEwpLCAoIlBhY2tldCBjb250YWlucyBpbnZhbGlkIGRhdGEiKSk7Ci0gICAgaWYgKHBheWxvYWRfYnVmZmVyKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChwYXlsb2FkX2J1ZmZlciwgJm1hcCk7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChwYXlsb2FkX2J1ZmZlcik7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotICB9Ci1pbnZhbGlkX2NvbmZpZ3VyYXRpb246Ci0gIHsKLSAgICAvKiBmYXRhbCwgYXMgd2Ugb3RoZXJ3aXNlIHJpc2sgY2Fycnlpbmcgb24gd2l0aG91dCBvdXRwdXQgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocnRwdm9yYmlzZGVwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiUGFja2V0IGNvbnRhaW5zIGludmFsaWQgY29uZmlndXJhdGlvbiIpKTsKLSAgICBpZiAocGF5bG9hZF9idWZmZXIpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKHBheWxvYWRfYnVmZmVyLCAmbWFwKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKHBheWxvYWRfYnVmZmVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX3ZvcmJpc19kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cFZvcmJpc0RlcGF5ICpydHB2b3JiaXNkZXBheTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0cHZvcmJpc2RlcGF5ID0gR1NUX1JUUF9WT1JCSVNfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBmcmVlX2luZGVudHMgKHJ0cHZvcmJpc2RlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3ZvcmJpc19kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHZvcmJpc2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1ZPUkJJU19ERVBBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHZvcmJpc2RlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNDNkMDQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHB2b3JiaXNkZXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1ZPUkJJU19ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1ZPUkJJU19ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RhZGFwdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlZGVwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfVk9SQklTX0RFUEFZIFwKLSAgKGdzdF9ydHBfdm9yYmlzX2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfVk9SQklTX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1ZPUkJJU19ERVBBWSxHc3RSdHBWb3JiaXNEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfVk9SQklTX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9WT1JCSVNfREVQQVksR3N0UnRwVm9yYmlzRGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfVk9SQklTX0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX1ZPUkJJU19ERVBBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfVk9SQklTX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9WT1JCSVNfREVQQVkpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVm9yYmlzRGVwYXkgR3N0UnRwVm9yYmlzRGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVm9yYmlzRGVwYXlDbGFzcyBHc3RSdHBWb3JiaXNEZXBheUNsYXNzOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVm9yYmlzQ29uZmlnIHsKLSAgZ3VpbnQzMiAgaWRlbnQ7Ci0gIEdMaXN0ICAgKmhlYWRlcnM7Ci19IEdzdFJ0cFZvcmJpc0NvbmZpZzsKLQotc3RydWN0IF9Hc3RSdHBWb3JiaXNEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIHBhcmVudDsKLQotICBHTGlzdCAgICAgICAgICAgICAgKmNvbmZpZ3M7Ci0gIEdzdFJ0cFZvcmJpc0NvbmZpZyAqY29uZmlnOwotCi0gIEdzdEFkYXB0ZXIgICAgICAgICAqYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICBhc3NlbWJsaW5nOwotfTsKLQotc3RydWN0IF9Hc3RSdHBWb3JiaXNEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3ZvcmJpc19kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfdm9yYmlzX2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1ZPUkJJU19ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTY5OGMwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSAiZm52MWhhc2guaCIKLSNpbmNsdWRlICJnc3RydHB2b3JiaXNwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHB2b3JiaXNwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cHZvcmJpc3BheV9kZWJ1ZykKLQotLyogcmVmZXJlbmNlczoKLSAqIGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzUyMTUudHh0Ci0gKi8KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdm9yYmlzX3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwiYXVkaW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSBbMSwgTUFYIF0sICIgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlZPUkJJU1wiIgotICAgICAgICAvKiBBbGwgcmVxdWlyZWQgcGFyYW1ldGVycwotICAgICAgICAgKgotICAgICAgICAgKiAiZW5jb2RpbmctcGFyYW1zID0gKHN0cmluZykgPG51bSBjaGFubmVscz4iCi0gICAgICAgICAqICJjb25maWd1cmF0aW9uID0gKHN0cmluZykgQU5ZIgotICAgICAgICAgKi8KLSAgICApCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdm9yYmlzX3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtdm9yYmlzIikKLSAgICApOwotCi0jZGVmaW5lIERFRkFVTFRfQ09ORklHX0lOVEVSVkFMIDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQ09ORklHX0lOVEVSVkFMCi19OwotCi0jZGVmaW5lIGdzdF9ydHBfdm9yYmlzX3BheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBWb3JiaXNQYXksIGdzdF9ydHBfdm9yYmlzX3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3ZvcmJpc19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBiYXNlcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF92b3JiaXNfcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3ZvcmJpc19wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYWQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3ZvcmJpc19wYXlfc2lua19ldmVudCAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF92b3JiaXNfcGF5X3BhcnNlX2lkIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdm9yYmlzX3BheV9maW5pc2hfaGVhZGVycyAoR3N0UlRQQmFzZVBheWxvYWQgKgotICAgIGJhc2VwYXlsb2FkKTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF92b3JiaXNfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfdm9yYmlzX3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZvcmJpc19wYXlfY2xhc3NfaW5pdCAoR3N0UnRwVm9yYmlzUGF5Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKmdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZXBheWxvYWRfY2xhc3MgPSAoR3N0UlRQQmFzZVBheWxvYWRDbGFzcyAqKSBrbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX3ZvcmJpc19wYXlfY2hhbmdlX3N0YXRlOwotCi0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfdm9yYmlzX3BheV9zZXRjYXBzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfdm9yYmlzX3BheV9oYW5kbGVfYnVmZmVyOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2lua19ldmVudCA9IGdzdF9ydHBfdm9yYmlzX3BheV9zaW5rX2V2ZW50OwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfdm9yYmlzX3BheV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ydHBfdm9yYmlzX3BheV9nZXRfcHJvcGVydHk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF92b3JiaXNfcGF5X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdm9yYmlzX3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBWb3JiaXMgcGF5bG9hZGVyIiwKLSAgICAgICJDb2RlYy9QYXlsb2FkZXIvTmV0d29yay9SVFAiLAotICAgICAgIlBheWxvYWQtZW5jb2RlIFZvcmJpcyBhdWRpbyBpbnRvIFJUUCBwYWNrZXRzIChSRkMgNTIxNSkiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0cHZvcmJpc3BheV9kZWJ1ZywgInJ0cHZvcmJpc3BheSIsIDAsCi0gICAgICAiVm9yYmlzIFJUUCBQYXlsb2FkZXIiKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0NPTkZJR19JTlRFUlZBTCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiY29uZmlnLWludGVydmFsIiwgIkNvbmZpZyBTZW5kIEludGVydmFsIiwKLSAgICAgICAgICAiU2VuZCBDb25maWcgSW5zZXJ0aW9uIEludGVydmFsIGluIHNlY29uZHMgKGNvbmZpZ3VyYXRpb24gaGVhZGVycyAiCi0gICAgICAgICAgIndpbGwgYmUgbXVsdGlwbGV4ZWQgaW4gdGhlIGRhdGEgc3RyZWFtIHdoZW4gZGV0ZWN0ZWQuKSAoMCA9IGRpc2FibGVkKSIsCi0gICAgICAgICAgMCwgMzYwMCwgREVGQVVMVF9DT05GSUdfSU5URVJWQUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdm9yYmlzX3BheV9pbml0IChHc3RSdHBWb3JiaXNQYXkgKiBydHB2b3JiaXNwYXkpCi17Ci0gIHJ0cHZvcmJpc3BheS0+bGFzdF9jb25maWcgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92b3JiaXNfcGF5X2NsZWFyX3BhY2tldCAoR3N0UnRwVm9yYmlzUGF5ICogcnRwdm9yYmlzcGF5KQotewotICBpZiAocnRwdm9yYmlzcGF5LT5wYWNrZXQpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAocnRwdm9yYmlzcGF5LT5wYWNrZXQpOwotICBydHB2b3JiaXNwYXktPnBhY2tldCA9IE5VTEw7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKHJ0cHZvcmJpc3BheS0+cGFja2V0X2J1ZmZlcnMsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9idWZmZXJfdW5yZWYpOwotICBydHB2b3JiaXNwYXktPnBhY2tldF9idWZmZXJzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdm9yYmlzX3BheV9jbGVhbnVwIChHc3RSdHBWb3JiaXNQYXkgKiBydHB2b3JiaXNwYXkpCi17Ci0gIGdzdF9ydHBfdm9yYmlzX3BheV9jbGVhcl9wYWNrZXQgKHJ0cHZvcmJpc3BheSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKHJ0cHZvcmJpc3BheS0+aGVhZGVycywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLSAgcnRwdm9yYmlzcGF5LT5oZWFkZXJzID0gTlVMTDsKLSAgZ19mcmVlIChydHB2b3JiaXNwYXktPmNvbmZpZ19kYXRhKTsKLSAgcnRwdm9yYmlzcGF5LT5jb25maWdfZGF0YSA9IE5VTEw7Ci0gIHJ0cHZvcmJpc3BheS0+bGFzdF9jb25maWcgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdm9yYmlzX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwVm9yYmlzUGF5ICpydHB2b3JiaXNwYXk7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY29uc3QgR1ZhbHVlICphcnJheTsKLSAgZ2ludCBhc2l6ZSwgaTsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIHJ0cHZvcmJpc3BheSA9IEdTVF9SVFBfVk9SQklTX1BBWSAoYmFzZXBheWxvYWQpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBydHB2b3JiaXNwYXktPm5lZWRfaGVhZGVycyA9IFRSVUU7Ci0KLSAgaWYgKChhcnJheSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAic3RyZWFtaGVhZGVyIikpID09IE5VTEwpCi0gICAgZ290byBkb25lOwotCi0gIGlmIChHX1ZBTFVFX1RZUEUgKGFycmF5KSAhPSBHU1RfVFlQRV9BUlJBWSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgaWYgKChhc2l6ZSA9IGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoYXJyYXkpKSA8IDMpCi0gICAgZ290byBkb25lOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhc2l6ZTsgaSsrKSB7Ci0gICAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLQotICAgIHZhbHVlID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoYXJyYXksIGkpOwotICAgIGlmICgoYnVmID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKHZhbHVlKSkgPT0gTlVMTCkKLSAgICAgIGdvdG8gbnVsbF9idWZmZXI7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGlmIChtYXAuc2l6ZSA8IDEpCi0gICAgICBnb3RvIGludmFsaWRfc3RyZWFtaGVhZGVyOwotCi0gICAgLyogbm8gZGF0YSBwYWNrZXRzIGFsbG93ZWQgKi8KLSAgICBpZiAoKG1hcC5kYXRhWzBdICYgMSkgPT0gMCkKLSAgICAgIGdvdG8gaW52YWxpZF9zdHJlYW1oZWFkZXI7Ci0KLSAgICAvKiB3ZSBuZWVkIHBhY2tldHMgd2l0aCBpZCAxLCAzLCA1ICovCi0gICAgaWYgKG1hcC5kYXRhWzBdICE9IChpICogMikgKyAxKQotICAgICAgZ290byBpbnZhbGlkX3N0cmVhbWhlYWRlcjsKLQotICAgIGlmIChpID09IDApIHsKLSAgICAgIC8qIGlkZW50aWZpY2F0aW9uLCB3ZSBuZWVkIHRvIHBhcnNlIHRoaXMgaW4gb3JkZXIgdG8gZ2V0IHRoZSBjbG9jayByYXRlLiAqLwotICAgICAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcnRwX3ZvcmJpc19wYXlfcGFyc2VfaWQgKGJhc2VwYXlsb2FkLCBtYXAuZGF0YSwKLSAgICAgICAgICAgICAgICAgIG1hcC5zaXplKSkpCi0gICAgICAgIGdvdG8gcGFyc2VfaWRfZmFpbGVkOwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNwYXksICJjb2xsZWN0aW5nIGhlYWRlciAlZCIsIGkpOwotICAgIHJ0cHZvcmJpc3BheS0+aGVhZGVycyA9Ci0gICAgICAgIGdfbGlzdF9hcHBlbmQgKHJ0cHZvcmJpc3BheS0+aGVhZGVycywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZikpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIH0KLSAgaWYgKCFnc3RfcnRwX3ZvcmJpc19wYXlfZmluaXNoX2hlYWRlcnMgKGJhc2VwYXlsb2FkKSkKLSAgICBnb3RvIGZpbmlzaF9mYWlsZWQ7Ci0KLWRvbmU6Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbnVsbF9idWZmZXI6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cHZvcmJpc3BheSwgInN0cmVhbWhlYWRlciB3aXRoIG51bGwgYnVmZmVyIHJlY2VpdmVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX3N0cmVhbWhlYWRlcjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwdm9yYmlzcGF5LCAidW5hYmxlIHRvIHBhcnNlIGluaXRpYWwgaGVhZGVyIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXBhcnNlX2lkX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwdm9yYmlzcGF5LCAidW5hYmxlIHRvIHBhcnNlIGluaXRpYWwgaGVhZGVyIik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWZpbmlzaF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cHZvcmJpc3BheSwgInVuYWJsZSB0byBmaW5pc2ggaGVhZGVycyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92b3JiaXNfcGF5X3Jlc2V0X3BhY2tldCAoR3N0UnRwVm9yYmlzUGF5ICogcnRwdm9yYmlzcGF5LCBndWludDggVkRUKQotewotICBndWludCBwYXlsb2FkX2xlbjsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotCi0gIEdTVF9MT0dfT0JKRUNUIChydHB2b3JiaXNwYXksICJyZXNldCBwYWNrZXQiKTsKLQotICBydHB2b3JiaXNwYXktPnBheWxvYWRfcG9zID0gNDsKLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChydHB2b3JiaXNwYXktPnBhY2tldCwgR1NUX01BUF9SRUFELCAmcnRwKTsKLSAgcGF5bG9hZF9sZW4gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKCZydHApOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9sZWZ0ID0gcGF5bG9hZF9sZW4gLSA0OwotICBydHB2b3JiaXNwYXktPnBheWxvYWRfZHVyYXRpb24gPSAwOwotICBydHB2b3JiaXNwYXktPnBheWxvYWRfRiA9IDA7Ci0gIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9WRFQgPSBWRFQ7Ci0gIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9wa3RzID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdm9yYmlzX3BheV9pbml0X3BhY2tldCAoR3N0UnRwVm9yYmlzUGF5ICogcnRwdm9yYmlzcGF5LCBndWludDggVkRULAotICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdTVF9MT0dfT0JKRUNUIChydHB2b3JiaXNwYXksICJzdGFydGluZyBuZXcgcGFja2V0LCBWRFQ6ICVkIiwgVkRUKTsKLQotICBnc3RfcnRwX3ZvcmJpc19wYXlfY2xlYXJfcGFja2V0IChydHB2b3JiaXNwYXkpOwotCi0gIC8qIG5ldyBwYWNrZXQgYWxsb2NhdGUgbWF4IHBhY2tldCBzaXplICovCi0gIHJ0cHZvcmJpc3BheS0+cGFja2V0ID0KLSAgICAgIGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZV9sZW4gKEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVQotICAgICAgKHJ0cHZvcmJpc3BheSksIDAsIDApOwotICBnc3RfcnRwX3ZvcmJpc19wYXlfcmVzZXRfcGFja2V0IChydHB2b3JiaXNwYXksIFZEVCk7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKHJ0cHZvcmJpc3BheS0+cGFja2V0KSA9IHRpbWVzdGFtcDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfdm9yYmlzX3BheV9mbHVzaF9wYWNrZXQgKEdzdFJ0cFZvcmJpc1BheSAqIHJ0cHZvcmJpc3BheSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQgaGxlbjsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotICBHTGlzdCAqbDsKLQotICAvKiBjaGVjayBmb3IgZW1wdHkgcGFja2V0ICovCi0gIGlmICghcnRwdm9yYmlzcGF5LT5wYWNrZXQgfHwgcnRwdm9yYmlzcGF5LT5wYXlsb2FkX3BvcyA8PSA0KQotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLQotICBHU1RfTE9HX09CSkVDVCAocnRwdm9yYmlzcGF5LCAiZmx1c2hpbmcgcGFja2V0Iik7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChydHB2b3JiaXNwYXktPnBhY2tldCwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0KLSAgLyogZml4IGhlYWRlciAqLwotICBwYXlsb2FkID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApOwotICAvKgotICAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwotICAgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqIHwgICAgICAgICAgICAgICAgICAgICBJZGVudCAgICAgICAgICAgICAgICAgICAgIHwgRiB8VkRUfCMgcGt0cy58Ci0gICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAqCi0gICAqIEY6IEZyYWdtZW50IHR5cGUgKDA9bm9uZSwgMT1zdGFydCwgMj1jb250LCAzPWVuZCkKLSAgICogVkRUOiBWb3JiaXMgZGF0YSB0eXBlICgwPXZvcmJpcywgMT1jb25maWcsIDI9Y29tbWVudCwgMz1yZXNlcnZlZCkKLSAgICogcGt0czogbnVtYmVyIG9mIHBhY2tldHMuCi0gICAqLwotICBwYXlsb2FkWzBdID0gKHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9pZGVudCA+PiAxNikgJiAweGZmOwotICBwYXlsb2FkWzFdID0gKHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9pZGVudCA+PiA4KSAmIDB4ZmY7Ci0gIHBheWxvYWRbMl0gPSAocnRwdm9yYmlzcGF5LT5wYXlsb2FkX2lkZW50KSAmIDB4ZmY7Ci0gIHBheWxvYWRbM10gPSAocnRwdm9yYmlzcGF5LT5wYXlsb2FkX0YgJiAweDMpIDw8IDYgfAotICAgICAgKHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9WRFQgJiAweDMpIDw8IDQgfAotICAgICAgKHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9wa3RzICYgMHhmKTsKLQotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgLyogc2hyaW5rIHRoZSBidWZmZXIgc2l6ZSB0byB0aGUgbGFzdCB3cml0dGVuIGJ5dGUgKi8KLSAgaGxlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfaGVhZGVyX2xlbiAoMCk7Ci0gIGdzdF9idWZmZXJfcmVzaXplIChydHB2b3JiaXNwYXktPnBhY2tldCwgMCwgaGxlbiArIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9wb3MpOwotCi0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKHJ0cHZvcmJpc3BheS0+cGFja2V0KSA9IHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9kdXJhdGlvbjsKLQotICBmb3IgKGwgPSBnX2xpc3RfbGFzdCAocnRwdm9yYmlzcGF5LT5wYWNrZXRfYnVmZmVycyk7IGw7IGwgPSBsLT5wcmV2KSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKGwtPmRhdGEpOwotICAgIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChydHB2b3JiaXNwYXkpLCBydHB2b3JiaXNwYXktPnBhY2tldCwKLSAgICAgICAgYnVmLCBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX0FVRElPX1NUUikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKHJ0cHZvcmJpc3BheS0+cGFja2V0X2J1ZmZlcnMpOwotICBydHB2b3JiaXNwYXktPnBhY2tldF9idWZmZXJzID0gTlVMTDsKLQotICAvKiBwdXNoLCB0aGlzIGdpdmVzIGF3YXkgb3VyIHJlZiB0byB0aGUgcGFja2V0LCBzbyBjbGVhciBpdC4gKi8KLSAgcmV0ID0KLSAgICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2ggKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHB2b3JiaXNwYXkpLAotICAgICAgcnRwdm9yYmlzcGF5LT5wYWNrZXQpOwotICBydHB2b3JiaXNwYXktPnBhY2tldCA9IE5VTEw7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3ZvcmJpc19wYXlfZmluaXNoX2hlYWRlcnMgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQpCi17Ci0gIEdzdFJ0cFZvcmJpc1BheSAqcnRwdm9yYmlzcGF5ID0gR1NUX1JUUF9WT1JCSVNfUEFZIChiYXNlcGF5bG9hZCk7Ci0gIEdMaXN0ICp3YWxrOwotICBndWludCBsZW5ndGgsIHNpemUsIG5faGVhZGVycywgY29uZmlnbGVuLCBleHRyYWxlbjsKLSAgZ2NoYXIgKmNzdHIsICpjb25maWd1cmF0aW9uOwotICBndWludDggKmRhdGEsICpjb25maWc7Ci0gIGd1aW50MzIgaWRlbnQ7Ci0gIGdib29sZWFuIHJlczsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNwYXksICJmaW5pc2ggaGVhZGVycyIpOwotCi0gIGlmICghcnRwdm9yYmlzcGF5LT5oZWFkZXJzKQotICAgIGdvdG8gbm9faGVhZGVyczsKLQotICAvKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHBhY2tlZCBoZWFkZXJzICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZWQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZWQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgKgotICAgKiBXZSBvbmx5IGNvbnN0cnVjdCBhIGNvbmZpZyBjb250YWluaW5nIDEgcGFja2VkIGhlYWRlciBsaWtlIHRoaXM6Ci0gICAqCi0gICAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCi0gICAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICBJZGVudCAgICAgICAgICAgICAgICAgICAgICAgfCBsZW5ndGggICAgICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgIHwgbi4gb2YgaGVhZGVycyB8ICAgIGxlbmd0aDEgICAgfCAgICBsZW5ndGgyICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgIHwgICAgICAgICAgICAgSWRlbnRpZmljYXRpb24gSGVhZGVyICAgICAgICAgICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgIHwgICAgICAgICBDb21tZW50IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICogLi4gICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICovCi0KLSAgLyogd2UgbmVlZCA0IGJ5dGVzIGZvciB0aGUgbnVtYmVyIG9mIGhlYWRlcnMgKHdoaWNoIGlzIGFsd2F5cyAxKSwgMyBieXRlcyBmb3IKLSAgICogdGhlIGlkZW50LCAyIGJ5dGVzIGZvciBsZW5ndGgsIDEgYnl0ZSBmb3Igbi4gb2YgaGVhZGVycy4gKi8KLSAgc2l6ZSA9IDQgKyAzICsgMiArIDE7Ci0KLSAgLyogY291bnQgdGhlIHNpemUgb2YgdGhlIGhlYWRlcnMgZmlyc3QgYW5kIHVwZGF0ZSB0aGUgaGFzaCAqLwotICBsZW5ndGggPSAwOwotICBuX2hlYWRlcnMgPSAwOwotICBpZGVudCA9IGZudjFfaGFzaF8zMl9uZXcgKCk7Ci0gIGV4dHJhbGVuID0gMTsKLSAgZm9yICh3YWxrID0gcnRwdm9yYmlzcGF5LT5oZWFkZXJzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHdhbGstPmRhdGEpOwotICAgIEdzdE1hcEluZm8gbWFwOwotICAgIGd1aW50IGJzaXplOwotCi0gICAgYnNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotICAgIGxlbmd0aCArPSBic2l6ZTsKLSAgICBuX2hlYWRlcnMrKzsKLQotICAgIC8qIGNvdW50IG51bWJlciBvZiBieXRlcyBuZWVkZWQgZm9yIGxlbmd0aCBmaWVsZHMsIHdlIGRvbid0IG5lZWQgdGhpcyBmb3IKLSAgICAgKiB0aGUgbGFzdCBoZWFkZXIuICovCi0gICAgaWYgKGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgICAgZG8gewotICAgICAgICBzaXplKys7Ci0gICAgICAgIGV4dHJhbGVuKys7Ci0gICAgICAgIGJzaXplID4+PSA3OwotICAgICAgfSB3aGlsZSAoYnNpemUpOwotICAgIH0KLSAgICAvKiB1cGRhdGUgaGFzaCAqLwotICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgaWRlbnQgPSBmbnYxX2hhc2hfMzJfdXBkYXRlIChpZGVudCwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICB9Ci0KLSAgLyogcGFja2V0IGxlbmd0aCBpcyBoZWFkZXIgc2l6ZSArIHBhY2tldCBsZW5ndGggKi8KLSAgY29uZmlnbGVuID0gc2l6ZSArIGxlbmd0aDsKLSAgY29uZmlnID0gZGF0YSA9IGdfbWFsbG9jIChjb25maWdsZW4pOwotCi0gIC8qIG51bWJlciBvZiBwYWNrZWQgaGVhZGVycywgd2Ugb25seSBwYWNrIDEgaGVhZGVyICovCi0gIGRhdGFbMF0gPSAwOwotICBkYXRhWzFdID0gMDsKLSAgZGF0YVsyXSA9IDA7Ci0gIGRhdGFbM10gPSAxOwotCi0gIGlkZW50ID0gZm52MV9oYXNoXzMyX3RvXzI0IChpZGVudCk7Ci0gIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9pZGVudCA9IGlkZW50OwotICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNwYXksICJpZGVudCAweCUwOHgiLCBpZGVudCk7Ci0KLSAgLyogdGFrZSBsb3dlciAzIGJ5dGVzICovCi0gIGRhdGFbNF0gPSAoaWRlbnQgPj4gMTYpICYgMHhmZjsKLSAgZGF0YVs1XSA9IChpZGVudCA+PiA4KSAmIDB4ZmY7Ci0gIGRhdGFbNl0gPSBpZGVudCAmIDB4ZmY7Ci0KLSAgLyogc3RvcmUgbGVuZ3RoIG9mIGFsbCB2b3JiaXMgaGVhZGVycyAqLwotICBkYXRhWzddID0gKChsZW5ndGgpID4+IDgpICYgMHhmZjsKLSAgZGF0YVs4XSA9IChsZW5ndGgpICYgMHhmZjsKLQotICAvKiBzdG9yZSBudW1iZXIgb2YgaGVhZGVycyBtaW51cyBvbmUuICovCi0gIGRhdGFbOV0gPSBuX2hlYWRlcnMgLSAxOwotICBkYXRhICs9IDEwOwotCi0gIC8qIHN0b3JlIGxlbmd0aCBmb3IgZWFjaCBoZWFkZXIgKi8KLSAgZm9yICh3YWxrID0gcnRwdm9yYmlzcGF5LT5oZWFkZXJzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHdhbGstPmRhdGEpOwotICAgIGd1aW50IGJzaXplLCBzaXplLCB0ZW1wOwotICAgIGd1aW50IGZsYWc7Ci0KLSAgICAvKiBvbmx5IG5lZWQgdG8gc3RvcmUgdGhlIGxlbmd0aCB3aGVuIGl0J3Mgbm90IHRoZSBsYXN0IGhlYWRlciAqLwotICAgIGlmICghZ19saXN0X25leHQgKHdhbGspKQotICAgICAgYnJlYWs7Ci0KLSAgICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0KLSAgICAvKiBjYWxjIHNpemUgKi8KLSAgICBzaXplID0gMDsKLSAgICBkbyB7Ci0gICAgICBzaXplKys7Ci0gICAgICBic2l6ZSA+Pj0gNzsKLSAgICB9IHdoaWxlIChic2l6ZSk7Ci0gICAgdGVtcCA9IHNpemU7Ci0KLSAgICBic2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gICAgLyogd3JpdGUgdGhlIHNpemUgYmFja3dhcmRzICovCi0gICAgZmxhZyA9IDA7Ci0gICAgd2hpbGUgKHNpemUpIHsKLSAgICAgIHNpemUtLTsKLSAgICAgIGRhdGFbc2l6ZV0gPSAoYnNpemUgJiAweDdmKSB8IGZsYWc7Ci0gICAgICBic2l6ZSA+Pj0gNzsKLSAgICAgIGZsYWcgPSAweDgwOyAgICAgICAgICAgICAgLyogRmxhZyBiaXQgb24gYWxsIGJ5dGVzIG9mIHRoZSBsZW5ndGggZXhjZXB0IHRoZSBsYXN0ICovCi0gICAgfQotICAgIGRhdGEgKz0gdGVtcDsKLSAgfQotCi0gIC8qIGNvcHkgaGVhZGVyIGRhdGEgKi8KLSAgZm9yICh3YWxrID0gcnRwdm9yYmlzcGF5LT5oZWFkZXJzOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBHU1RfQlVGRkVSX0NBU1QgKHdhbGstPmRhdGEpOwotCi0gICAgZ3N0X2J1ZmZlcl9leHRyYWN0IChidWYsIDAsIGRhdGEsIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikpOwotICAgIGRhdGEgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLSAgfQotICBydHB2b3JiaXNwYXktPm5lZWRfaGVhZGVycyA9IEZBTFNFOwotCi0gIC8qIHNlcmlhbGl6ZSB0byBiYXNlNjQgKi8KLSAgY29uZmlndXJhdGlvbiA9IGdfYmFzZTY0X2VuY29kZSAoY29uZmlnLCBjb25maWdsZW4pOwotCi0gIC8qIHN0b3JlIGZvciBsYXRlciByZS1zZW5kaW5nICovCi0gIGdfZnJlZSAocnRwdm9yYmlzcGF5LT5jb25maWdfZGF0YSk7Ci0gIHJ0cHZvcmJpc3BheS0+Y29uZmlnX3NpemUgPSBjb25maWdsZW4gLSA0IC0gMyAtIDI7Ci0gIHJ0cHZvcmJpc3BheS0+Y29uZmlnX2RhdGEgPSBnX21hbGxvYyAocnRwdm9yYmlzcGF5LT5jb25maWdfc2l6ZSk7Ci0gIHJ0cHZvcmJpc3BheS0+Y29uZmlnX2V4dHJhX2xlbiA9IGV4dHJhbGVuOwotICBtZW1jcHkgKHJ0cHZvcmJpc3BheS0+Y29uZmlnX2RhdGEsIGNvbmZpZyArIDQgKyAzICsgMiwKLSAgICAgIHJ0cHZvcmJpc3BheS0+Y29uZmlnX3NpemUpOwotCi0gIGdfZnJlZSAoY29uZmlnKTsKLQotICAvKiBjb25maWd1cmUgcGF5bG9hZGVyIHNldHRpbmdzICovCi0gIGNzdHIgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHJ0cHZvcmJpc3BheS0+Y2hhbm5lbHMpOwotICBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3B0aW9ucyAoYmFzZXBheWxvYWQsICJhdWRpbyIsIFRSVUUsICJWT1JCSVMiLAotICAgICAgcnRwdm9yYmlzcGF5LT5yYXRlKTsKLSAgcmVzID0KLSAgICAgIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vdXRjYXBzIChiYXNlcGF5bG9hZCwgImVuY29kaW5nLXBhcmFtcyIsCi0gICAgICBHX1RZUEVfU1RSSU5HLCBjc3RyLCAiY29uZmlndXJhdGlvbiIsIEdfVFlQRV9TVFJJTkcsIGNvbmZpZ3VyYXRpb24sIE5VTEwpOwotICBnX2ZyZWUgKGNzdHIpOwotICBnX2ZyZWUgKGNvbmZpZ3VyYXRpb24pOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19oZWFkZXJzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdm9yYmlzcGF5LCAiZmluaXNoIGhlYWRlcnMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3ZvcmJpc19wYXlfcGFyc2VfaWQgKEdzdFJUUEJhc2VQYXlsb2FkICogYmFzZXBheWxvYWQsIGd1aW50OCAqIGRhdGEsCi0gICAgZ3VpbnQgc2l6ZSkKLXsKLSAgR3N0UnRwVm9yYmlzUGF5ICpydHB2b3JiaXNwYXkgPSBHU1RfUlRQX1ZPUkJJU19QQVkgKGJhc2VwYXlsb2FkKTsKLSAgZ3VpbnQ4IGNoYW5uZWxzOwotICBnaW50MzIgcmF0ZSwgdmVyc2lvbjsKLQotICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IDE2KSkKLSAgICBnb3RvIHRvb19zaG9ydDsKLQotICBpZiAoR19VTkxJS0VMWSAobWVtY21wIChkYXRhLCAiXDAwMXZvcmJpcyIsIDcpKSkKLSAgICBnb3RvIGludmFsaWRfc3RhcnQ7Ci0gIGRhdGEgKz0gNzsKLQotICBpZiAoR19VTkxJS0VMWSAoKHZlcnNpb24gPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpKSAhPSAwKSkKLSAgICBnb3RvIGludmFsaWRfdmVyc2lvbjsKLSAgZGF0YSArPSA0OwotCi0gIGlmIChHX1VOTElLRUxZICgoY2hhbm5lbHMgPSAqZGF0YSsrKSA8IDEpKQotICAgIGdvdG8gaW52YWxpZF9jaGFubmVsczsKLQotICBpZiAoR19VTkxJS0VMWSAoKHJhdGUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpKSA8IDEpKQotICAgIGdvdG8gaW52YWxpZF9yYXRlOwotCi0gIC8qIGFsbCBmaW5lLCBzdG9yZSB0aGUgdmFsdWVzICovCi0gIHJ0cHZvcmJpc3BheS0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLSAgcnRwdm9yYmlzcGF5LT5yYXRlID0gcmF0ZTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXRvb19zaG9ydDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlcGF5bG9hZCwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiSWRlbnRpZmljYXRpb24gcGFja2V0IGlzIHRvbyBzaG9ydCwgbmVlZCBhdCBsZWFzdCAxNiwgZ290ICVkIiwgc2l6ZSksCi0gICAgICAgIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX3N0YXJ0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGJhc2VwYXlsb2FkLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJJbnZhbGlkIGhlYWRlciBzdGFydCBpbiBpZGVudGlmaWNhdGlvbiBwYWNrZXQiKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfdmVyc2lvbjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlcGF5bG9hZCwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiSW52YWxpZCB2ZXJzaW9uLCBleHBlY3RlZCAwLCBnb3QgJWQiLCB2ZXJzaW9uKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfcmF0ZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChiYXNlcGF5bG9hZCwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgICgiSW52YWxpZCByYXRlICVkIiwgcmF0ZSksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX2NoYW5uZWxzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGJhc2VwYXlsb2FkLCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJJbnZhbGlkIGNoYW5uZWxzICVkIiwgY2hhbm5lbHMpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF92b3JiaXNfcGF5X3BheWxvYWRfYnVmZmVyIChHc3RSdHBWb3JiaXNQYXkgKiBydHB2b3JiaXNwYXksIGd1aW50OCBWRFQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBndWludDggKiBkYXRhLCBndWludCBzaXplLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLAotICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbiwgZ3VpbnQgbm90X2luX2xlbmd0aCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQgbmV3c2l6ZTsKLSAgZ3VpbnQgcGFja2V0X2xlbjsKLSAgR3N0Q2xvY2tUaW1lIG5ld2R1cmF0aW9uOwotICBnYm9vbGVhbiBmbHVzaDsKLSAgZ3VpbnQgcGxlbjsKLSAgZ3VpbnQ4ICpwcG9zLCAqcGF5bG9hZDsKLSAgZ2Jvb2xlYW4gZnJhZ21lbnRlZDsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotCi0gIC8qIHNpemUgaW5jcmVhc2VzIHdpdGggcGFja2V0IGxlbmd0aCBhbmQgMiBieXRlcyBzaXplIGVhZGVyLiAqLwotICBuZXdkdXJhdGlvbiA9IHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9kdXJhdGlvbjsKLSAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgbmV3ZHVyYXRpb24gKz0gZHVyYXRpb247Ci0KLSAgbmV3c2l6ZSA9IHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9wb3MgKyAyICsgc2l6ZTsKLSAgcGFja2V0X2xlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGFja2V0X2xlbiAobmV3c2l6ZSwgMCwgMCk7Ci0KLSAgLyogY2hlY2sgYnVmZmVyIGZpbGxlZCBhZ2FpbnN0IGxlbmd0aCBhbmQgbWF4IGxhdGVuY3kgKi8KLSAgZmx1c2ggPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9pc19maWxsZWQgKEdTVF9SVFBfQkFTRV9QQVlMT0FEIChydHB2b3JiaXNwYXkpLAotICAgICAgcGFja2V0X2xlbiwgbmV3ZHVyYXRpb24pOwotICAvKiB3ZSBjYW4gc3RvcmUgdXAgdG8gMTUgdm9yYmlzIHBhY2tldHMgaW4gb25lIFJUUCBwYWNrZXQuICovCi0gIGZsdXNoIHw9IChydHB2b3JiaXNwYXktPnBheWxvYWRfcGt0cyA9PSAxNSk7Ci0gIC8qIGZsdXNoIGlmIHdlIGhhdmUgYSBuZXcgVkRUICovCi0gIGlmIChydHB2b3JiaXNwYXktPnBhY2tldCkKLSAgICBmbHVzaCB8PSAocnRwdm9yYmlzcGF5LT5wYXlsb2FkX1ZEVCAhPSBWRFQpOwotICBpZiAoZmx1c2gpCi0gICAgcmV0ID0gZ3N0X3J0cF92b3JiaXNfcGF5X2ZsdXNoX3BhY2tldCAocnRwdm9yYmlzcGF5KTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBjcmVhdGUgbmV3IHBhY2tldCBpZiB3ZSBtdXN0ICovCi0gIGlmICghcnRwdm9yYmlzcGF5LT5wYWNrZXQpIHsKLSAgICBnc3RfcnRwX3ZvcmJpc19wYXlfaW5pdF9wYWNrZXQgKHJ0cHZvcmJpc3BheSwgVkRULCB0aW1lc3RhbXApOwotICB9Ci0KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChydHB2b3JiaXNwYXktPnBhY2tldCwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gIHBwb3MgPSBwYXlsb2FkICsgcnRwdm9yYmlzcGF5LT5wYXlsb2FkX3BvczsKLSAgZnJhZ21lbnRlZCA9IEZBTFNFOwotCi0gIC8qIHB1dCBidWZmZXIgaW4gcGFja2V0LCBpdCBlaXRoZXIgZml0cyBjb21wbGV0ZWx5IG9yIG5lZWRzIHRvIGJlIGZyYWdtZW50ZWQKLSAgICogb3ZlciBtdWx0aXBsZSBSVFAgcGFja2V0cy4gKi8KLSAgZG8gewotICAgIHBsZW4gPSBNSU4gKHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9sZWZ0IC0gMiwgc2l6ZSk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAocnRwdm9yYmlzcGF5LCAiYXBwZW5kICV1IGJ5dGVzIiwgcGxlbik7Ci0KLSAgICAvKiBkYXRhIGlzIGNvcGllZCBpbiB0aGUgcGF5bG9hZCB3aXRoIGEgMiBieXRlIGxlbmd0aCBoZWFkZXIgKi8KLSAgICBwcG9zWzBdID0gKChwbGVuIC0gbm90X2luX2xlbmd0aCkgPj4gOCkgJiAweGZmOwotICAgIHBwb3NbMV0gPSAoKHBsZW4gLSBub3RfaW5fbGVuZ3RoKSAmIDB4ZmYpOwotICAgIGlmIChwbGVuKQotICAgICAgbWVtY3B5ICgmcHBvc1syXSwgZGF0YSwgcGxlbik7Ci0KLSAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICBpZiAoIXJ0cHZvcmJpc3BheS0+cGFja2V0X2J1ZmZlcnMKLSAgICAgICAgICB8fCBydHB2b3JiaXNwYXktPnBhY2tldF9idWZmZXJzLT5kYXRhICE9IChncG9pbnRlcikgYnVmZmVyKQotICAgICAgICBydHB2b3JiaXNwYXktPnBhY2tldF9idWZmZXJzID0KLSAgICAgICAgICAgIGdfbGlzdF9wcmVwZW5kIChydHB2b3JiaXNwYXktPnBhY2tldF9idWZmZXJzLAotICAgICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHTGlzdCAqbDsKLQotICAgICAgZm9yIChsID0gcnRwdm9yYmlzcGF5LT5oZWFkZXJzOyBsOyBsID0gbC0+bmV4dCkKLSAgICAgICAgcnRwdm9yYmlzcGF5LT5wYWNrZXRfYnVmZmVycyA9Ci0gICAgICAgICAgICBnX2xpc3RfcHJlcGVuZCAocnRwdm9yYmlzcGF5LT5wYWNrZXRfYnVmZmVycywKLSAgICAgICAgICAgIGdzdF9idWZmZXJfcmVmIChsLT5kYXRhKSk7Ci0gICAgfQotCi0gICAgLyogb25seSBmaXJzdCAob25seSkgY29uZmlndXJhdGlvbiBjdXRzIGxlbmd0aCBmaWVsZCAqLwotICAgIC8qIE5PVEU6IHNwZWMgKGlmIGFueSkgaXMgbm90IGNsZWFyIG9uIHRoaXMgLi4uICovCi0gICAgbm90X2luX2xlbmd0aCA9IDA7Ci0KLSAgICBzaXplIC09IHBsZW47Ci0gICAgZGF0YSArPSBwbGVuOwotCi0gICAgcnRwdm9yYmlzcGF5LT5wYXlsb2FkX3BvcyArPSBwbGVuICsgMjsKLSAgICBydHB2b3JiaXNwYXktPnBheWxvYWRfbGVmdCAtPSBwbGVuICsgMjsKLQotICAgIGlmIChmcmFnbWVudGVkKSB7Ci0gICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICAvKiBsYXN0IGZyYWdtZW50LCBzZXQgRiB0byAweDMuICovCi0gICAgICAgIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9GID0gMHgzOwotICAgICAgZWxzZQotICAgICAgICAvKiBmcmFnbWVudCBjb250aW51ZXMsIHNldCBGIHRvIDB4Mi4gKi8KLSAgICAgICAgcnRwdm9yYmlzcGF5LT5wYXlsb2FkX0YgPSAweDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChzaXplID4gMCkgewotICAgICAgICAvKiBmcmFnbWVudGVkIHBhY2tldCBzdGFydHMsIHNldCBGIHRvIDB4MSwgbWFyayBvdXJzZWx2ZXMgYXMKLSAgICAgICAgICogZnJhZ21lbnRlZC4gKi8KLSAgICAgICAgcnRwdm9yYmlzcGF5LT5wYXlsb2FkX0YgPSAweDE7Ci0gICAgICAgIGZyYWdtZW50ZWQgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZnJhZ21lbnRlZCkgewotICAgICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotICAgICAgLyogZnJhZ21lbnRlZCBwYWNrZXRzIGFyZSBhbHdheXMgZmx1c2hlZCBhbmQgaGF2ZSBwdGtzIG9mIDAgKi8KLSAgICAgIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9wa3RzID0gMDsKLSAgICAgIHJldCA9IGdzdF9ydHBfdm9yYmlzX3BheV9mbHVzaF9wYWNrZXQgKHJ0cHZvcmJpc3BheSk7Ci0KLSAgICAgIGlmIChzaXplID4gMCkgewotICAgICAgICAvKiBzdGFydCBuZXcgcGFja2V0IGFuZCBnZXQgcG9pbnRlcnMuIFZEVCBzdGF5cyB0aGUgc2FtZS4gKi8KLSAgICAgICAgZ3N0X3J0cF92b3JiaXNfcGF5X2luaXRfcGFja2V0IChydHB2b3JiaXNwYXksCi0gICAgICAgICAgICBydHB2b3JiaXNwYXktPnBheWxvYWRfVkRULCB0aW1lc3RhbXApOwotICAgICAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKHJ0cHZvcmJpc3BheS0+cGFja2V0LCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLSAgICAgICAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLSAgICAgICAgcHBvcyA9IHBheWxvYWQgKyBydHB2b3JiaXNwYXktPnBheWxvYWRfcG9zOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiB1bmZyYWdtZW50ZWQgcGFja2V0LCB1cGRhdGUgc3RhdHMgZm9yIG5leHQgcGFja2V0LCBzaXplID09IDAgYW5kIHdlCi0gICAgICAgKiBleGl0IHRoZSB3aGlsZSBsb29wICovCi0gICAgICBydHB2b3JiaXNwYXktPnBheWxvYWRfcGt0cysrOwotICAgICAgaWYgKGR1cmF0aW9uICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgICAgIHJ0cHZvcmJpc3BheS0+cGF5bG9hZF9kdXJhdGlvbiArPSBkdXJhdGlvbjsKLSAgICB9Ci0gIH0gd2hpbGUgKHNpemUgJiYgcmV0ID09IEdTVF9GTE9XX09LKTsKLQotICBpZiAocnRwLmJ1ZmZlcikKLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLWRvbmU6Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfdm9yYmlzX3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIGJhc2VwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwVm9yYmlzUGF5ICpydHB2b3JiaXNwYXk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3VpbnQ4ICpkYXRhOwotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIHRpbWVzdGFtcDsKLSAgZ3VpbnQ4IFZEVDsKLQotICBydHB2b3JiaXNwYXkgPSBHU1RfUlRQX1ZPUkJJU19QQVkgKGJhc2VwYXlsb2FkKTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLSAgZHVyYXRpb24gPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICBHU1RfTE9HX09CSkVDVCAocnRwdm9yYmlzcGF5LCAic2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVAotICAgICAgIiwgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBzaXplLCBHU1RfVElNRV9BUkdTIChkdXJhdGlvbikpOwotCi0gIGlmIChHX1VOTElLRUxZIChzaXplIDwgMSkpCi0gICAgZ290byB3cm9uZ19zaXplOwotCi0gIC8qIGZpbmQgcGFja2V0IHR5cGUgKi8KLSAgaWYgKGRhdGFbMF0gJiAxKSB7Ci0gICAgLyogaGVhZGVyICovCi0gICAgaWYgKGRhdGFbMF0gPT0gMSkgewotICAgICAgLyogaWRlbnRpZmljYXRpb24sIHdlIG5lZWQgdG8gcGFyc2UgdGhpcyBpbiBvcmRlciB0byBnZXQgdGhlIGNsb2NrIHJhdGUuICovCi0gICAgICBpZiAoR19VTkxJS0VMWSAoIWdzdF9ydHBfdm9yYmlzX3BheV9wYXJzZV9pZCAoYmFzZXBheWxvYWQsIGRhdGEsIHNpemUpKSkKLSAgICAgICAgZ290byBwYXJzZV9pZF9mYWlsZWQ7Ci0gICAgICBWRFQgPSAxOwotICAgIH0gZWxzZSBpZiAoZGF0YVswXSA9PSAzKSB7Ci0gICAgICAvKiBjb21tZW50ICovCi0gICAgICBWRFQgPSAyOwotICAgIH0gZWxzZSBpZiAoZGF0YVswXSA9PSA1KSB7Ci0gICAgICAvKiBzZXR1cCAqLwotICAgICAgVkRUID0gMTsKLSAgICB9IGVsc2UKLSAgICAgIGdvdG8gdW5rbm93bl9oZWFkZXI7Ci0gIH0gZWxzZQotICAgIC8qIGRhdGEgKi8KLSAgICBWRFQgPSAwOwotCi0gIC8qIHdlIG5lZWQgdG8gY29sbGVjdCB0aGUgaGVhZGVycyBhbmQgY29uc3RydWN0IGEgY29uZmlnIHN0cmluZyBmcm9tIHRoZW0gKi8KLSAgaWYgKFZEVCAhPSAwKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwdm9yYmlzcGF5LCAiY29sbGVjdGluZyBoZWFkZXIiKTsKLSAgICAvKiBhcHBlbmQgaGVhZGVyIHRvIHRoZSBsaXN0IG9mIGhlYWRlcnMgKi8KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIHJ0cHZvcmJpc3BheS0+aGVhZGVycyA9IGdfbGlzdF9hcHBlbmQgKHJ0cHZvcmJpc3BheS0+aGVhZGVycywgYnVmZmVyKTsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0gZWxzZSBpZiAocnRwdm9yYmlzcGF5LT5oZWFkZXJzICYmIHJ0cHZvcmJpc3BheS0+bmVlZF9oZWFkZXJzKSB7Ci0gICAgaWYgKCFnc3RfcnRwX3ZvcmJpc19wYXlfZmluaXNoX2hlYWRlcnMgKGJhc2VwYXlsb2FkKSkKLSAgICAgIGdvdG8gaGVhZGVyX2Vycm9yOwotICB9Ci0KLSAgLyogdGhlcmUgaXMgYSBjb25maWcgcmVxdWVzdCwgc2VlIGlmIHdlIG5lZWQgdG8gaW5zZXJ0IGl0ICovCi0gIGlmIChydHB2b3JiaXNwYXktPmNvbmZpZ19pbnRlcnZhbCA+IDAgJiYgcnRwdm9yYmlzcGF5LT5jb25maWdfZGF0YSkgewotICAgIGdib29sZWFuIHNlbmRfY29uZmlnID0gRkFMU0U7Ci0KLSAgICBpZiAocnRwdm9yYmlzcGF5LT5sYXN0X2NvbmZpZyAhPSAtMSkgewotICAgICAgZ3VpbnQ2NCBkaWZmOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwdm9yYmlzcGF5LAotICAgICAgICAgICJub3cgJSIgR1NUX1RJTUVfRk9STUFUICIsIGxhc3QgY29uZmlnICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLCBHU1RfVElNRV9BUkdTIChydHB2b3JiaXNwYXktPmxhc3RfY29uZmlnKSk7Ci0KLSAgICAgIC8qIGNhbGN1bGF0ZSBkaWZmIGJldHdlZW4gbGFzdCBjb25maWcgaW4gbWlsbGlzZWNvbmRzICovCi0gICAgICBpZiAodGltZXN0YW1wID4gcnRwdm9yYmlzcGF5LT5sYXN0X2NvbmZpZykgewotICAgICAgICBkaWZmID0gdGltZXN0YW1wIC0gcnRwdm9yYmlzcGF5LT5sYXN0X2NvbmZpZzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRpZmYgPSAwOwotICAgICAgfQotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHB2b3JiaXNwYXksCi0gICAgICAgICAgImludGVydmFsIHNpbmNlIGxhc3QgY29uZmlnICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoZGlmZikpOwotCi0gICAgICAvKiBiaWdnZXIgdGhhbiBpbnRlcnZhbCwgcXVldWUgY29uZmlnICovCi0gICAgICAvKiBGSVhNRSBzaG91bGQgY29udmVydCB0aW1lc3RhbXBzIHRvIHJ1bm5pbmcgdGltZSAqLwotICAgICAgaWYgKEdTVF9USU1FX0FTX1NFQ09ORFMgKGRpZmYpID49IHJ0cHZvcmJpc3BheS0+Y29uZmlnX2ludGVydmFsKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHZvcmJpc3BheSwgInRpbWUgdG8gc2VuZCBjb25maWciKTsKLSAgICAgICAgc2VuZF9jb25maWcgPSBUUlVFOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBubyBrbm93biBwcmV2aW91cyBjb25maWcgdGltZSwgc2VuZCBub3cgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHZvcmJpc3BheSwgIm5vIHByZXZpb3VzIGNvbmZpZyB0aW1lLCBzZW5kIG5vdyIpOwotICAgICAgc2VuZF9jb25maWcgPSBUUlVFOwotICAgIH0KLQotICAgIGlmIChzZW5kX2NvbmZpZykgewotICAgICAgLyogd2UgbmVlZCB0byBzZW5kIGNvbmZpZyBub3cgZmlyc3QgKi8KLSAgICAgIC8qIGRpZmZlcmVudCBURFQgdHlwZSBmb3JjZXMgZmx1c2ggKi8KLSAgICAgIGdzdF9ydHBfdm9yYmlzX3BheV9wYXlsb2FkX2J1ZmZlciAocnRwdm9yYmlzcGF5LCAxLAotICAgICAgICAgIE5VTEwsIHJ0cHZvcmJpc3BheS0+Y29uZmlnX2RhdGEsIHJ0cHZvcmJpc3BheS0+Y29uZmlnX3NpemUsCi0gICAgICAgICAgdGltZXN0YW1wLCBHU1RfQ0xPQ0tfVElNRV9OT05FLCBydHB2b3JiaXNwYXktPmNvbmZpZ19leHRyYV9sZW4pOwotCi0gICAgICBpZiAodGltZXN0YW1wICE9IC0xKSB7Ci0gICAgICAgIHJ0cHZvcmJpc3BheS0+bGFzdF9jb25maWcgPSB0aW1lc3RhbXA7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0KLSAgICAgIGdzdF9ydHBfdm9yYmlzX3BheV9wYXlsb2FkX2J1ZmZlciAocnRwdm9yYmlzcGF5LCBWRFQsIGJ1ZmZlciwgZGF0YSwgc2l6ZSwKLSAgICAgIHRpbWVzdGFtcCwgZHVyYXRpb24sIDApOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19zaXplOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwdm9yYmlzcGF5LCBTVFJFQU0sIERFQ09ERSwKLSAgICAgICAgKCJJbnZhbGlkIHBhY2tldCBzaXplICgxIDwgJSIgR19HU0laRV9GT1JNQVQgIikiLCBzaXplKSwgKE5VTEwpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1wYXJzZV9pZF9mYWlsZWQ6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci11bmtub3duX2hlYWRlcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHJ0cHZvcmJpc3BheSwgU1RSRUFNLCBERUNPREUsCi0gICAgICAgIChOVUxMKSwgKCJJZ25vcmluZyB1bmtub3duIGhlYWRlciByZWNlaXZlZCIpKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1oZWFkZXJfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChydHB2b3JiaXNwYXksIFNUUkVBTSwgREVDT0RFLAotICAgICAgICAoTlVMTCksICgiRXJyb3IgaW5pdGlhbGl6aW5nIGhlYWRlciBjb25maWciKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdm9yYmlzX3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJ0cFZvcmJpc1BheSAqcnRwdm9yYmlzcGF5ID0gR1NUX1JUUF9WT1JCSVNfUEFZIChwYXlsb2FkKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgZ3N0X3J0cF92b3JiaXNfcGF5X2NsZWFyX3BhY2tldCAocnRwdm9yYmlzcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICAvKiBmYWxzZSB0byBsZXQgcGFyZW50IGhhbmRsZSBldmVudCBhcyB3ZWxsICovCi0gIHJldHVybiBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAocGFyZW50X2NsYXNzKS0+c2lua19ldmVudCAocGF5bG9hZCwgZXZlbnQpOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfdm9yYmlzX3BheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cFZvcmJpc1BheSAqcnRwdm9yYmlzcGF5OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgcnRwdm9yYmlzcGF5ID0gR1NUX1JUUF9WT1JCSVNfUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF92b3JiaXNfcGF5X2NsZWFudXAgKHJ0cHZvcmJpc3BheSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdm9yYmlzX3BheV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwVm9yYmlzUGF5ICpydHB2b3JiaXNwYXk7Ci0KLSAgcnRwdm9yYmlzcGF5ID0gR1NUX1JUUF9WT1JCSVNfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DT05GSUdfSU5URVJWQUw6Ci0gICAgICBydHB2b3JiaXNwYXktPmNvbmZpZ19pbnRlcnZhbCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92b3JiaXNfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBWb3JiaXNQYXkgKnJ0cHZvcmJpc3BheTsKLQotICBydHB2b3JiaXNwYXkgPSBHU1RfUlRQX1ZPUkJJU19QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NPTkZJR19JTlRFUlZBTDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHB2b3JiaXNwYXktPmNvbmZpZ19pbnRlcnZhbCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfdm9yYmlzX3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHZvcmJpc3BheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9WT1JCSVNfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmggYi9nc3QvcnRwL2dzdHJ0cHZvcmJpc3BheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWQ2OTNhLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdm9yYmlzcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfVk9SQklTX1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1ZPUkJJU19QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9WT1JCSVNfUEFZIFwKLSAgKGdzdF9ydHBfdm9yYmlzX3BheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1ZPUkJJU19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfVk9SQklTX1BBWSxHc3RSdHBWb3JiaXNQYXkpKQotI2RlZmluZSBHU1RfUlRQX1ZPUkJJU19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1ZPUkJJU19QQVksR3N0UnRwVm9yYmlzUGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1ZPUkJJU19QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfVk9SQklTX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfVk9SQklTX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfVk9SQklTX1BBWSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBWb3JiaXNQYXkgR3N0UnRwVm9yYmlzUGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFZvcmJpc1BheUNsYXNzIEdzdFJ0cFZvcmJpc1BheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cFZvcmJpc1BheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCBwYXlsb2FkOwotCi0gIC8qIHRoZSBoZWFkZXJzICovCi0gIGdib29sZWFuICAgICAgbmVlZF9oZWFkZXJzOwotICBHTGlzdCAgICAgICAgKmhlYWRlcnM7Ci0KLSAgLyogcXVldWVzIG9mIGJ1ZmZlcnMgYWxvbmcgd2l0aCBzb21lIHN0YXRzLiAqLwotICBHc3RCdWZmZXIgICAgKnBhY2tldDsKLSAgR0xpc3QgICAgICAgICpwYWNrZXRfYnVmZmVyczsKLSAgZ3VpbnQgICAgICAgICBwYXlsb2FkX3BvczsKLSAgZ3VpbnQgICAgICAgICBwYXlsb2FkX2xlZnQ7Ci0gIGd1aW50MzIgICAgICAgcGF5bG9hZF9pZGVudDsKLSAgZ3VpbnQ4ICAgICAgICBwYXlsb2FkX0Y7Ci0gIGd1aW50OCAgICAgICAgcGF5bG9hZF9WRFQ7Ci0gIGd1aW50ICAgICAgICAgcGF5bG9hZF9wa3RzOwotICBHc3RDbG9ja1RpbWUgIHBheWxvYWRfdGltZXN0YW1wOwotICBHc3RDbG9ja1RpbWUgIHBheWxvYWRfZHVyYXRpb247Ci0KLSAgLyogY29uZmlnIChyZS1zZW5kaW5nKSAqLwotICBndWludDggICAgICAgKmNvbmZpZ19kYXRhOwotICBndWludCAgICAgICAgIGNvbmZpZ19zaXplOwotICBndWludCAgICAgICAgIGNvbmZpZ19leHRyYV9sZW47Ci0gIGd1aW50ICAgICAgICAgY29uZmlnX2ludGVydmFsOwotICBHc3RDbG9ja1RpbWUgIGxhc3RfY29uZmlnOwotCi0gIGdpbnQgICAgICAgICAgcmF0ZTsKLSAgZ2ludCAgICAgICAgICBjaGFubmVsczsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwVm9yYmlzUGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3ZvcmJpc19wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3ZvcmJpc19wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfVk9SQklTX1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZiNjMxYS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyogZ3N0cnRwdnA4ZGVwYXkuYyAtIFNvdXJjZSBmb3IgR3N0UnRwVlA4RGVwYXkKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0ZC4KLSAqICAgQ29udGFjdDogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHJ0cHZwOGRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3J0cF92cDhfZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF92cDhfZGVwYXlfZGVidWcKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF92cDhfZGVwYXlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX3ZwOF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF92cDhfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3ZwOF9kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwVlA4RGVwYXksIGdzdF9ydHBfdnA4X2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92cDhfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXZwOCIpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdnA4X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgeyBcIlZQOFwiLCBcIlZQOC1EUkFGVC1JRVRGLTAxXCIgfSIpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnA4X2RlcGF5X2luaXQgKEdzdFJ0cFZQOERlcGF5ICogc2VsZikKLXsKLSAgc2VsZi0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgc2VsZi0+c3RhcnRlZCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDhfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwVlA4RGVwYXlDbGFzcyAqIGdzdF9ydHBfdnA4X2RlcGF5X2NsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChnc3RfcnRwX3ZwOF9kZXBheV9jbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfcnRwX3ZwOF9kZXBheV9jbGFzcyk7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZGVwYXlfY2xhc3MgPQotICAgICAgKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSAoZ3N0X3J0cF92cDhfZGVwYXlfY2xhc3MpOwotCi0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF92cDhfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdnA4X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlJUUCBWUDggZGVwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBWUDggdmlkZW8gZnJvbSBSVFAgcGFja2V0cykiLAotICAgICAgIlNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4iKTsKLQotICBvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfcnRwX3ZwOF9kZXBheV9kaXNwb3NlOwotCi0gIGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9ydHBfdnA4X2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBkZXBheV9jbGFzcy0+cHJvY2Vzc19ydHBfcGFja2V0ID0gZ3N0X3J0cF92cDhfZGVwYXlfcHJvY2VzczsKLSAgZGVwYXlfY2xhc3MtPmhhbmRsZV9ldmVudCA9IGdzdF9ydHBfdnA4X2RlcGF5X2hhbmRsZV9ldmVudDsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3J0cF92cDhfZGVwYXlfZGVidWcsICJydHB2cDhkZXBheSIsIDAsCi0gICAgICAiVlA4IFZpZGVvIFJUUCBEZXBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDhfZGVwYXlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwVlA4RGVwYXkgKnNlbGYgPSBHU1RfUlRQX1ZQOF9ERVBBWSAob2JqZWN0KTsKLQotICBpZiAoc2VsZi0+YWRhcHRlciAhPSBOVUxMKQotICAgIGdfb2JqZWN0X3VucmVmIChzZWxmLT5hZGFwdGVyKTsKLSAgc2VsZi0+YWRhcHRlciA9IE5VTEw7Ci0KLSAgLyogcmVsZWFzZSBhbnkgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBvYmplY3QgaGVyZSAqLwotCi0gIGlmIChHX09CSkVDVF9DTEFTUyAoZ3N0X3J0cF92cDhfZGVwYXlfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSkKLSAgICBHX09CSkVDVF9DTEFTUyAoZ3N0X3J0cF92cDhfZGVwYXlfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX3ZwOF9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXksIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwVlA4RGVwYXkgKnNlbGYgPSBHU1RfUlRQX1ZQOF9ERVBBWSAoZGVwYXkpOwotICBHc3RCdWZmZXIgKnBheWxvYWQ7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgaGRyc2l6ZTsKLSAgZ3VpbnQgc2l6ZTsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJEaXNjb250aW51aXR5LCBmbHVzaGluZyBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHNlbGYtPmFkYXB0ZXIpOwotICAgIHNlbGYtPnN0YXJ0ZWQgPSBGQUxTRTsKLSAgfQotCi0gIHNpemUgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgLyogQXQgbGVhc3Qgb25lIGhlYWRlciBhbmQgb25lIHZwOCBieXRlICovCi0gIGlmIChHX1VOTElLRUxZIChzaXplIDwgMikpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgZGF0YSA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotCi0gIGlmIChHX1VOTElLRUxZICghc2VsZi0+c3RhcnRlZCkpIHsKLSAgICAvKiBDaGVjayBpZiB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIFZQOCBmcmFtZSwgb3RoZXJ3aXNlIGJhaWwgKi8KLSAgICAvKiBTPTEgYW5kIFBhcnRJRD0gMCAqLwotICAgIGlmICgoZGF0YVswXSAmIDB4MTcpICE9IDB4MTApCi0gICAgICBnb3RvIGRvbmU7Ci0KLSAgICBzZWxmLT5zdGFydGVkID0gVFJVRTsKLSAgfQotCi0gIGhkcnNpemUgPSAxOwotICAvKiBDaGVjayBYIG9wdGlvbmFsIGhlYWRlciAqLwotICBpZiAoKGRhdGFbMF0gJiAweDgwKSAhPSAwKSB7Ci0gICAgaGRyc2l6ZSsrOwotICAgIC8qIENoZWNrIEkgb3B0aW9uYWwgaGVhZGVyICovCi0gICAgaWYgKChkYXRhWzFdICYgMHg4MCkgIT0gMCkgewotICAgICAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPCAzKSkKLSAgICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgICBoZHJzaXplKys7Ci0gICAgICAvKiBDaGVjayBmb3IgMTYgYml0cyBQaWN0dXJlSUQgKi8KLSAgICAgIGlmICgoZGF0YVsyXSAmIDB4ODApICE9IDApCi0gICAgICAgIGhkcnNpemUrKzsKLSAgICB9Ci0gICAgLyogQ2hlY2sgTCBvcHRpb25hbCBoZWFkZXIgKi8KLSAgICBpZiAoKGRhdGFbMV0gJiAweDQwKSAhPSAwKQotICAgICAgaGRyc2l6ZSsrOwotICAgIC8qIENoZWNrIFQgb3IgSyBvcHRpb25hbCBoZWFkZXJzICovCi0gICAgaWYgKChkYXRhWzFdICYgMHgyMCkgIT0gMCB8fCAoZGF0YVsxXSAmIDB4MTApICE9IDApCi0gICAgICBoZHJzaXplKys7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksICJoZHJzaXplICV1LCBzaXplICV1IiwgaGRyc2l6ZSwgc2l6ZSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGhkcnNpemUgPj0gc2l6ZSkpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBoZHJzaXplLCAtMSk7Ci0gIGdzdF9hZGFwdGVyX3B1c2ggKHNlbGYtPmFkYXB0ZXIsIHBheWxvYWQpOwotCi0gIC8qIE1hcmtlciBpbmRpY2F0ZXMgdGhhdCBpdCB3YXMgdGhlIGxhc3QgcnRwIHBhY2tldCBmb3IgdGhpcyBmcmFtZSAqLwotICBpZiAoZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAocnRwKSkgewotICAgIEdzdEJ1ZmZlciAqb3V0OwotICAgIGd1aW50OCBoZWFkZXJbMTBdOwotCi0gICAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoc2VsZi0+YWRhcHRlcikgPCAxMCkKLSAgICAgIGdvdG8gdG9vX3NtYWxsOwotICAgIGdzdF9hZGFwdGVyX2NvcHkgKHNlbGYtPmFkYXB0ZXIsICZoZWFkZXIsIDAsIDEwKTsKLQotICAgIG91dCA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChzZWxmLT5hZGFwdGVyLAotICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNlbGYtPmFkYXB0ZXIpKTsKLQotICAgIHNlbGYtPnN0YXJ0ZWQgPSBGQUxTRTsKLQotICAgIC8qIG1hcmsga2V5ZnJhbWVzICovCi0gICAgb3V0ID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXQpOwotICAgIC8qIEZpbHRlciBhd2F5IGFsbCBtZXRhcyB0aGF0IGFyZSBub3Qgc2Vuc2libGUgdG8gY29weSAqLwotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSwgb3V0LAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotICAgIGlmICgoaGVhZGVyWzBdICYgMHgwMSkpIHsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dCwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgICBpZiAoIXNlbGYtPmNhcHNfc2VudCkgewotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChvdXQpOwotICAgICAgICBvdXQgPSBOVUxMOwotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJEcm9wcGluZyBpbnRlci1mcmFtZSBiZWZvcmUgaW50cmEtZnJhbWUiKTsKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NJTktQQUQgKGRlcGF5KSwKLSAgICAgICAgICAgIGdzdF92aWRlb19ldmVudF9uZXdfdXBzdHJlYW1fZm9yY2Vfa2V5X3VuaXQgKEdTVF9DTE9DS19USU1FX05PTkUsCi0gICAgICAgICAgICAgICAgVFJVRSwgMCkpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBndWludCBwcm9maWxlLCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dCwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpOwotCi0gICAgICBwcm9maWxlID0gKGhlYWRlclswXSAmIDB4MGUpID4+IDE7Ci0gICAgICB3aWR0aCA9IEdTVF9SRUFEX1VJTlQxNl9MRSAoaGVhZGVyICsgNikgJiAweDNmZmY7Ci0gICAgICBoZWlnaHQgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKGhlYWRlciArIDgpICYgMHgzZmZmOwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoc2VsZi0+bGFzdF93aWR0aCAhPSB3aWR0aCB8fAotICAgICAgICAgICAgICBzZWxmLT5sYXN0X2hlaWdodCAhPSBoZWlnaHQgfHwgc2VsZi0+bGFzdF9wcm9maWxlICE9IHByb2ZpbGUpKSB7Ci0gICAgICAgIGdjaGFyIHByb2ZpbGVfc3RyWzNdOwotICAgICAgICBHc3RDYXBzICpzcmNjYXBzOwotCi0gICAgICAgIHNucHJpbnRmIChwcm9maWxlX3N0ciwgMywgIiV1IiwgcHJvZmlsZSk7Ci0gICAgICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC12cDgiLAotICAgICAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAwLCAxLAotICAgICAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIGhlaWdodCwKLSAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHdpZHRoLAotICAgICAgICAgICAgInByb2ZpbGUiLCBHX1RZUEVfU1RSSU5HLCBwcm9maWxlX3N0ciwgTlVMTCk7Ci0KLSAgICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5KSwgc3JjY2Fwcyk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICAgICAgICBzZWxmLT5jYXBzX3NlbnQgPSBUUlVFOwotICAgICAgICBzZWxmLT5sYXN0X3dpZHRoID0gd2lkdGg7Ci0gICAgICAgIHNlbGYtPmxhc3RfaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBzZWxmLT5sYXN0X3Byb2ZpbGUgPSBwcm9maWxlOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIE5VTEw7Ci0KLXRvb19zbWFsbDoKLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJJbnZhbGlkIHJ0cCBwYWNrZXQgKHRvbyBzbWFsbCksIGlnbm9yaW5nIik7Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChzZWxmLT5hZGFwdGVyKTsKLSAgc2VsZi0+c3RhcnRlZCA9IEZBTFNFOwotCi0gIGdvdG8gZG9uZTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX3ZwOF9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSdHBWUDhEZXBheSAqc2VsZiA9IEdTVF9SVFBfVlA4X0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgc2VsZi0+bGFzdF9wcm9maWxlID0gLTE7Ci0gICAgICBzZWxmLT5sYXN0X2hlaWdodCA9IC0xOwotICAgICAgc2VsZi0+bGFzdF93aWR0aCA9IC0xOwotICAgICAgc2VsZi0+Y2Fwc19zZW50ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4KLSAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfcnRwX3ZwOF9kZXBheV9wYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsCi0gICAgICB0cmFuc2l0aW9uKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3ZwOF9kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheSwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwVlA4RGVwYXkgKnNlbGYgPSBHU1RfUlRQX1ZQOF9ERVBBWSAoZGVwYXkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBzZWxmLT5sYXN0X3Byb2ZpbGUgPSAtMTsKLSAgICAgIHNlbGYtPmxhc3RfaGVpZ2h0ID0gLTE7Ci0gICAgICBzZWxmLT5sYXN0X3dpZHRoID0gLTE7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4KLSAgICAgIEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfQ0xBU1MKLSAgICAgIChnc3RfcnRwX3ZwOF9kZXBheV9wYXJlbnRfY2xhc3MpLT5oYW5kbGVfZXZlbnQgKGRlcGF5LCBldmVudCk7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3ZwOF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHZwOGRlcGF5IiwKLSAgICAgIEdTVF9SQU5LX01BUkdJTkFMLCBHU1RfVFlQRV9SVFBfVlA4X0RFUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwdnA4ZGVwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU4NTQ2YS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHZwOGRlcGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogZ3N0cnRwdnA4ZGVwYXkuaCAtIEhlYWRlciBmb3IgR3N0UnRwVlA4RGVwYXkKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1ZQOF9ERVBBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1ZQOF9ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGFkYXB0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VkZXBheWxvYWQuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9WUDhfREVQQVkgXAotICAoZ3N0X3J0cF92cDhfZGVwYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9WUDhfREVQQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfUlRQX1ZQOF9ERVBBWSwgR3N0UnRwVlA4RGVwYXkpKQotI2RlZmluZSBHU1RfUlRQX1ZQOF9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgR1NUX1RZUEVfUlRQX1ZQOF9ERVBBWSwgXAotICAgIEdzdFJ0cFZQOERlcGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1ZQOF9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHU1RfVFlQRV9SVFBfVlA4X0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9WUDhfREVQQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIEdTVF9UWVBFX1JUUF9WUDhfREVQQVkpKQotI2RlZmluZSBHU1RfUlRQX1ZQOF9ERVBBWV9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUlRQX1ZQOF9ERVBBWSwgXAotICAgIEdzdFJ0cFZQOERlcGF5Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVlA4RGVwYXkgR3N0UnRwVlA4RGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVlA4RGVwYXlDbGFzcyBHc3RSdHBWUDhEZXBheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cFZQOERlcGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLXN0cnVjdCBfR3N0UnRwVlA4RGVwYXkKLXsKLSAgR3N0UlRQQmFzZURlcGF5bG9hZCBwYXJlbnQ7Ci0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGdib29sZWFuIHN0YXJ0ZWQ7Ci0KLSAgZ2Jvb2xlYW4gY2Fwc19zZW50OwotICBnaW50IGxhc3RfcHJvZmlsZTsKLSAgZ2ludCBsYXN0X3dpZHRoOwotICBnaW50IGxhc3RfaGVpZ2h0OwotfTsKLQotR1R5cGUgZ3N0X3J0cF92cDhfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3ZwOF9kZXBheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qICNpZm5kZWYgX19HU1RfUlRQX1ZQOF9ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdnA4cGF5LmMgYi9nc3QvcnRwL2dzdHJ0cHZwOHBheS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTQ5NGQwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdnA4cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NDEgKzAsMCBAQAotLyoKLSAqIGdzdHJ0cHZwOHBheS5jIC0gU291cmNlIGZvciBHc3RSdHBWUDhQYXkKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0ZC4KLSAqICAgQ29udGFjdDogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiaXRyZWFkZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cHBheWxvYWRzLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlICJkYm9vbGh1ZmYuaCIKLSNpbmNsdWRlICJnc3RydHB2cDhwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX3ZwOF9wYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF92cDhfcGF5X2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9QSUNUVVJFX0lEX01PREUgVlA4X1BBWV9OT19QSUNUVVJFX0lECi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1BJQ1RVUkVfSURfTU9ERQotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfVlA4X1BBWV9QSUNUVVJFX0lEX01PREUgKGdzdF9ydHBfdnA4X3BheV9waWN0dXJlX2lkX21vZGVfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3J0cF92cDhfcGF5X3BpY3R1cmVfaWRfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIG1vZGVfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIG1vZGVzW10gPSB7Ci0gICAge1ZQOF9QQVlfTk9fUElDVFVSRV9JRCwgIk5vIFBpY3R1cmUgSUQiLCAibm9uZSJ9LAotICAgIHtWUDhfUEFZX1BJQ1RVUkVfSURfN0JJVFMsICI3LWJpdCBQaWN0dXJlIElEIiwgIjctYml0In0sCi0gICAge1ZQOF9QQVlfUElDVFVSRV9JRF8xNUJJVFMsICIxNS1iaXQgUGljdHVyZSBJRCIsICIxNS1iaXQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFtb2RlX3R5cGUpIHsKLSAgICBtb2RlX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VlA4UlRQUGF5TW9kZSIsIG1vZGVzKTsKLSAgfQotICByZXR1cm4gbW9kZV90eXBlOwotfQotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3ZwOF9wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF92cDhfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF92cDhfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfdnA4X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF92cDhfcGF5X3NldF9jYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotCi1HX0RFRklORV9UWVBFIChHc3RSdHBWUDhQYXksIGdzdF9ydHBfdnA4X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX3ZwOF9wYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIDkwMDAwLCBlbmNvZGluZy1uYW1lID0gKHN0cmluZykgeyBcIlZQOFwiLCBcIlZQOC1EUkFGVC1JRVRGLTAxXCIgfSIpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdnA4X3BheV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtdnA4IikpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDhfcGF5X2luaXQgKEdzdFJ0cFZQOFBheSAqIG9iaikKLXsKLSAgb2JqLT5waWN0dXJlX2lkX21vZGUgPSBERUZBVUxUX1BJQ1RVUkVfSURfTU9ERTsKLSAgaWYgKG9iai0+cGljdHVyZV9pZF9tb2RlID09IFZQOF9QQVlfUElDVFVSRV9JRF83QklUUykKLSAgICBvYmotPnBpY3R1cmVfaWQgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIEdfTUFYVUlOVDgpICYgMHg3RjsKLSAgZWxzZSBpZiAob2JqLT5waWN0dXJlX2lkX21vZGUgPT0gVlA4X1BBWV9QSUNUVVJFX0lEXzE1QklUUykKLSAgICBvYmotPnBpY3R1cmVfaWQgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIEdfTUFYVUlOVDE2KSAmIDB4N0ZGRjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnA4X3BheV9jbGFzc19pbml0IChHc3RSdHBWUDhQYXlDbGFzcyAqIGdzdF9ydHBfdnA4X3BheV9jbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGdzdF9ydHBfdnA4X3BheV9jbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfcnRwX3ZwOF9wYXlfY2xhc3MpOwotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpwYXlfY2xhc3MgPQotICAgICAgR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKGdzdF9ydHBfdnA4X3BheV9jbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF92cDhfcGF5X3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF92cDhfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BJQ1RVUkVfSURfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgicGljdHVyZS1pZC1tb2RlIiwgIlBpY3R1cmUgSUQgTW9kZSIsCi0gICAgICAgICAgIlRoZSBwaWN0dXJlIElEIG1vZGUgZm9yIHBheWxvYWRpbmciLAotICAgICAgICAgIEdTVF9UWVBFX1JUUF9WUDhfUEFZX1BJQ1RVUkVfSURfTU9ERSwgREVGQVVMVF9QSUNUVVJFX0lEX01PREUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF92cDhfcGF5X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3ZwOF9wYXlfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiUlRQIFZQOCBwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUHV0cyBWUDggdmlkZW8gaW4gUlRQIHBhY2tldHMiLCAiU2pvZXJkIFNpbW9ucyA8c2pvZXJkQGx1b24ubmV0PiIpOwotCi0gIHBheV9jbGFzcy0+aGFuZGxlX2J1ZmZlciA9IGdzdF9ydHBfdnA4X3BheV9oYW5kbGVfYnVmZmVyOwotICBwYXlfY2xhc3MtPnNpbmtfZXZlbnQgPSBnc3RfcnRwX3ZwOF9wYXlfc2lua19ldmVudDsKLSAgcGF5X2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfdnA4X3BheV9zZXRfY2FwczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3J0cF92cDhfcGF5X2RlYnVnLCAicnRwdnA4cGF5IiwgMCwKLSAgICAgICJWUDggVmlkZW8gUlRQIFBheWxvYWRlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDhfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBWUDhQYXkgKnJ0cHZwOHBheSA9IEdTVF9SVFBfVlA4X1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUElDVFVSRV9JRF9NT0RFOgotICAgICAgcnRwdnA4cGF5LT5waWN0dXJlX2lkX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBpZiAocnRwdnA4cGF5LT5waWN0dXJlX2lkX21vZGUgPT0gVlA4X1BBWV9QSUNUVVJFX0lEXzdCSVRTKQotICAgICAgICBydHB2cDhwYXktPnBpY3R1cmVfaWQgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIEdfTUFYVUlOVDgpICYgMHg3RjsKLSAgICAgIGVsc2UgaWYgKHJ0cHZwOHBheS0+cGljdHVyZV9pZF9tb2RlID09IFZQOF9QQVlfUElDVFVSRV9JRF8xNUJJVFMpCi0gICAgICAgIHJ0cHZwOHBheS0+cGljdHVyZV9pZCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgR19NQVhVSU5UMTYpICYgMHg3RkZGOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDhfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBWUDhQYXkgKnJ0cHZwOHBheSA9IEdTVF9SVFBfVlA4X1BBWSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUElDVFVSRV9JRF9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHJ0cHZwOHBheS0+cGljdHVyZV9pZF9tb2RlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3ZwOF9wYXlfcGFyc2VfZnJhbWUgKEdzdFJ0cFZQOFBheSAqIHNlbGYsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBnc2l6ZSBidWZmZXJfc2l6ZSkKLXsKLSAgR3N0TWFwSW5mbyBtYXAgPSBHU1RfTUFQX0lORk9fSU5JVDsKLSAgR3N0Qml0UmVhZGVyIHJlYWRlcjsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnc2l6ZSBzaXplOwotICBpbnQgaTsKLSAgZ2Jvb2xlYW4ga2V5ZnJhbWU7Ci0gIGd1aW50MzIgcGFydGl0aW9uMF9zaXplOwotICBndWludDggdmVyc2lvbjsKLSAgZ3VpbnQ4IHRtcDggPSAwOwotICBndWludDggcGFydGl0aW9uczsKLSAgZ3VpbnQgb2Zmc2V0OwotICBCT09MX0RFQ09ERVIgYmM7Ci0gIGd1aW50OCAqcGRhdGE7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGJ1ZmZlcl9zaXplIDwgMykpCi0gICAgZ290byBlcnJvcjsKLQotICBpZiAoIWdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCkgfHwgIW1hcC5kYXRhKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgZGF0YSA9IG1hcC5kYXRhOwotICBzaXplID0gbWFwLnNpemU7Ci0KLSAgZ3N0X2JpdF9yZWFkZXJfaW5pdCAoJnJlYWRlciwgZGF0YSwgc2l6ZSk7Ci0KLSAgc2VsZi0+aXNfa2V5ZnJhbWUgPSBrZXlmcmFtZSA9ICgoZGF0YVswXSAmIDB4MSkgPT0gMCk7Ci0gIHZlcnNpb24gPSAoZGF0YVswXSA+PiAxKSAmIDB4NzsKLQotICBpZiAoR19VTkxJS0VMWSAodmVyc2lvbiA+IDMpKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgIlVua25vd24gVlA4IHZlcnNpb24gJXUiLCB2ZXJzaW9uKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci0KLSAgLyoga2V5ZnJhbWUsIHZlcnNpb24gYW5kIHNob3dfZnJhbWUgdXNlIDUgYml0cyAqLwotICBwYXJ0aXRpb24wX3NpemUgPSBkYXRhWzJdIDw8IDExIHwgZGF0YVsxXSA8PCAzIHwgKGRhdGFbMF0gPj4gNSk7Ci0KLSAgLyogSW5jbHVkZSB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYmxvYiBpbiB0aGUgZmlyc3QgcGFydGl0aW9uICovCi0gIG9mZnNldCA9IGtleWZyYW1lID8gMTAgOiAzOwotICBwYXJ0aXRpb24wX3NpemUgKz0gb2Zmc2V0OwotCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMjQpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKGtleWZyYW1lKSB7Ci0gICAgLyogY2hlY2sgc3RhcnQgdGFnOiAweDlkIDB4MDEgMHgyYSAqLwotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDggKCZyZWFkZXIsICZ0bXA4LCA4KSB8fCB0bXA4ICE9IDB4OWQpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50OCAoJnJlYWRlciwgJnRtcDgsIDgpIHx8IHRtcDggIT0gMHgwMSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQ4ICgmcmVhZGVyLCAmdG1wOCwgOCkgfHwgdG1wOCAhPSAweDJhKQotICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIFNraXAgaG9yaXpvbnRhbCBzaXplIGNvZGUgKDE2IGJpdHMpIHZlcnRpY2FsIHNpemUgY29kZSAoMTYgYml0cykgKi8KLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDMyKSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gIH0KLQotICBvZmZzZXQgPSBrZXlmcmFtZSA/IDEwIDogMzsKLSAgdnA4ZHhfc3RhcnRfZGVjb2RlICgmYmMsIGRhdGEgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQpOwotCi0gIGlmIChrZXlmcmFtZSkgewotICAgIC8qIGNvbG9yIHNwYWNlICgxIGJpdCkgYW5kIGNsYW1waW5nIHR5cGUgKDEgYml0KSAqLwotICAgIHZwOGR4X2RlY29kZV9ib29sICgmYmMsIDB4ODApOwotICAgIHZwOGR4X2RlY29kZV9ib29sICgmYmMsIDB4ODApOwotICB9Ci0KLSAgLyogc2VnbWVudGF0aW9uX2VuYWJsZWQgKi8KLSAgaWYgKHZwOGR4X2RlY29kZV9ib29sICgmYmMsIDB4ODApKSB7Ci0gICAgZ3VpbnQ4IHVwZGF0ZV9tYl9zZWdtZW50YXRpb25fbWFwID0gdnA4ZHhfZGVjb2RlX2Jvb2wgKCZiYywgMHg4MCk7Ci0gICAgZ3VpbnQ4IHVwZGF0ZV9zZWdtZW50X2ZlYXR1cmVfZGF0YSA9IHZwOGR4X2RlY29kZV9ib29sICgmYmMsIDB4ODApOwotCi0gICAgaWYgKHVwZGF0ZV9zZWdtZW50X2ZlYXR1cmVfZGF0YSkgewotICAgICAgLyogc2tpcCBzZWdtZW50IGZlYXR1cmUgbW9kZSAqLwotICAgICAgdnA4ZHhfZGVjb2RlX2Jvb2wgKCZiYywgMHg4MCk7Ci0KLSAgICAgIC8qIHF1YW50aXplciB1cGRhdGUgKi8KLSAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgLyogc2tpcCBmbGFnZ2VkIHF1YW50aXplciB2YWx1ZSAoNyBiaXRzKSBhbmQgc2lnbiAoMSBiaXQpICovCi0gICAgICAgIGlmICh2cDhkeF9kZWNvZGVfYm9vbCAoJmJjLCAweDgwKSkKLSAgICAgICAgICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDgpOwotICAgICAgfQotCi0gICAgICAvKiBsb29wIGZpbHRlciB1cGRhdGUgKi8KLSAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgLyogc2tpcCBmbGFnZ2VkIGxmIHVwZGF0ZSB2YWx1ZSAoNiBiaXRzKSBhbmQgc2lnbiAoMSBiaXQpICovCi0gICAgICAgIGlmICh2cDhkeF9kZWNvZGVfYm9vbCAoJmJjLCAweDgwKSkKLSAgICAgICAgICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDcpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh1cGRhdGVfbWJfc2VnbWVudGF0aW9uX21hcCkgewotICAgICAgLyogc2VnbWVudCBwcm9iIHVwZGF0ZSAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAvKiBza2lwIGZsYWdnZWQgc2VnbWVudCBwcm9iICovCi0gICAgICAgIGlmICh2cDhkeF9kZWNvZGVfYm9vbCAoJmJjLCAweDgwKSkKLSAgICAgICAgICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIHNraXAgZmlsdGVyIHR5cGUgKDEgYml0KSwgbG9vcCBmaWx0ZXIgbGV2ZWwgKDYgYml0cykgYW5kCi0gICAqIHNoYXJwbmVzcyBsZXZlbCAoMyBiaXRzKSAqLwotICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDEpOwotICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDYpOwotICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDMpOwotCi0gIC8qIGxvb3BfZmlsdGVyX2Fkal9lbmFibGVkICovCi0gIGlmICh2cDhkeF9kZWNvZGVfYm9vbCAoJmJjLCAweDgwKSkgewotCi0gICAgLyogZGVsdGEgdXBkYXRlICovCi0gICAgaWYgKHZwOGR4X2RlY29kZV9ib29sICgmYmMsIDB4ODApKSB7Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICAgICAgLyogOCB1cGRhdGVzLCAxIGJpdCBpbmRpY2F0ZSB3aGV0aGVyIHRoZXJlIGlzIG9uZSBhbmQgaWYgZm9sbG93IGJ5IGEKLSAgICAgICAgICogNyBiaXQgdXBkYXRlICovCi0gICAgICAgIGlmICh2cDhkeF9kZWNvZGVfYm9vbCAoJmJjLCAweDgwKSkKLSAgICAgICAgICB2cDhfZGVjb2RlX3ZhbHVlICgmYmMsIDcpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICh2cDhkeF9ib29sX2Vycm9yICgmYmMpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgdG1wOCA9IHZwOF9kZWNvZGVfdmFsdWUgKCZiYywgMik7Ci0KLSAgcGFydGl0aW9ucyA9IDEgPDwgdG1wODsKLQotICAvKiBDaGVjayBpZiB0aGluZ3MgYXJlIHN0aWxsIHNlbnNpYmxlICovCi0gIGlmIChwYXJ0aXRpb24wX3NpemUgKyAocGFydGl0aW9ucyAtIDEpICogMyA+PSBzaXplKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgLyogcGFydGl0aW9uIGRhdGEgaXMgcmlnaHQgYWZ0ZXIgdGhlIG1vZGUgcGFydGl0aW9uICovCi0gIHBkYXRhID0gZGF0YSArIHBhcnRpdGlvbjBfc2l6ZTsKLQotICAvKiBTZXQgdXAgbWFwcGluZyAqLwotICBzZWxmLT5uX3BhcnRpdGlvbnMgPSBwYXJ0aXRpb25zICsgMTsKLSAgc2VsZi0+cGFydGl0aW9uX29mZnNldFswXSA9IDA7Ci0gIHNlbGYtPnBhcnRpdGlvbl9zaXplWzBdID0gcGFydGl0aW9uMF9zaXplICsgKHBhcnRpdGlvbnMgLSAxKSAqIDM7Ci0KLSAgc2VsZi0+cGFydGl0aW9uX29mZnNldFsxXSA9IHNlbGYtPnBhcnRpdGlvbl9zaXplWzBdOwotICBmb3IgKGkgPSAxOyBpIDwgcGFydGl0aW9uczsgaSsrKSB7Ci0gICAgZ3VpbnQgcHNpemUgPSAocGRhdGFbMl0gPDwgMTYgfCBwZGF0YVsxXSA8PCA4IHwgcGRhdGFbMF0pOwotCi0gICAgcGRhdGEgKz0gMzsKLSAgICBzZWxmLT5wYXJ0aXRpb25fc2l6ZVtpXSA9IHBzaXplOwotICAgIHNlbGYtPnBhcnRpdGlvbl9vZmZzZXRbaSArIDFdID0gc2VsZi0+cGFydGl0aW9uX29mZnNldFtpXSArIHBzaXplOwotICB9Ci0KLSAgLyogQ2hlY2sgdGhhdCBvdXIgcGFydGl0aW9uIG9mZnNldHMgYW5kIHNpemVzIGRvbid0IGdvIG91dHNpemUgdGhlIGJ1ZmZlcgotICAgKiBzaXplLiAqLwotICBpZiAoc2VsZi0+cGFydGl0aW9uX29mZnNldFtpXSA+PSBzaXplKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgc2VsZi0+cGFydGl0aW9uX3NpemVbaV0gPSBzaXplIC0gc2VsZi0+cGFydGl0aW9uX29mZnNldFtpXTsKLQotICBzZWxmLT5wYXJ0aXRpb25fb2Zmc2V0W2kgKyAxXSA9IHNpemU7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgcmV0dXJuIFRSVUU7Ci0KLWVycm9yOgotICBHU1RfREVCVUcgKCJGYWlsZWQgdG8gcGFyc2UgZnJhbWUiKTsKLSAgaWYgKG1hcC5tZW1vcnkgIT0gTlVMTCkgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9ydHBfdnA4X29mZnNldF90b19wYXJ0aXRpb24gKEdzdFJ0cFZQOFBheSAqIHNlbGYsIGd1aW50IG9mZnNldCkKLXsKLSAgaW50IGk7Ci0KLSAgZm9yIChpID0gMTsgaSA8IHNlbGYtPm5fcGFydGl0aW9uczsgaSsrKSB7Ci0gICAgaWYgKG9mZnNldCA8IHNlbGYtPnBhcnRpdGlvbl9vZmZzZXRbaV0pCi0gICAgICByZXR1cm4gaSAtIDE7Ci0gIH0KLQotICByZXR1cm4gaSAtIDE7Ci19Ci0KLXN0YXRpYyBnc2l6ZQotZ3N0X3J0cF92cDhfY2FsY19oZWFkZXJfbGVuIChHc3RSdHBWUDhQYXkgKiBzZWxmKQotewotICBzd2l0Y2ggKHNlbGYtPnBpY3R1cmVfaWRfbW9kZSkgewotICAgIGNhc2UgVlA4X1BBWV9QSUNUVVJFX0lEXzdCSVRTOgotICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBWUDhfUEFZX1BJQ1RVUkVfSURfMTVCSVRTOgotICAgICAgcmV0dXJuIDQ7Ci0gICAgY2FzZSBWUDhfUEFZX05PX1BJQ1RVUkVfSUQ6Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAxOwotICB9Ci19Ci0KLS8qIFdoZW4gZ3Jvd2luZyB0aGUgdnA4IGhlYWRlciBrZWVwIG1heCBwYXlsb2FkIGxlbiBjYWxjdWxhdGlvbiBpbiBzeW5jICovCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfdnA4X2NyZWF0ZV9oZWFkZXJfYnVmZmVyIChHc3RSdHBWUDhQYXkgKiBzZWxmLCBndWludDggcGFydGlkLAotICAgIGdib29sZWFuIHN0YXJ0LCBnYm9vbGVhbiBtYXJrLCBHc3RCdWZmZXIgKiBpbikKLXsKLSAgR3N0QnVmZmVyICpvdXQ7Ci0gIGd1aW50OCAqcDsKLSAgR3N0UlRQQnVmZmVyIHJ0cGJ1ZmZlciA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0KLSAgb3V0ID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChnc3RfcnRwX3ZwOF9jYWxjX2hlYWRlcl9sZW4gKHNlbGYpLCAwLCAwKTsKLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChvdXQsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRwYnVmZmVyKTsKLSAgcCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwYnVmZmVyKTsKLSAgLyogWD0wLFI9MCxOPTAsUz1zdGFydCxQYXJ0SUQ9cGFydGlkICovCi0gIHBbMF0gPSAoc3RhcnQgPDwgNCkgfCBwYXJ0aWQ7Ci0gIGlmIChzZWxmLT5waWN0dXJlX2lkX21vZGUgIT0gVlA4X1BBWV9OT19QSUNUVVJFX0lEKSB7Ci0gICAgLyogRW5hYmxlIFg9MSAqLwotICAgIHBbMF0gfD0gMHg4MDsKLSAgICAvKiBYOiBJPTEsTD0wLFQ9MCxLPTAsUlNWPTAgKi8KLSAgICBwWzFdID0gMHg4MDsKLSAgICBpZiAoc2VsZi0+cGljdHVyZV9pZF9tb2RlID09IFZQOF9QQVlfUElDVFVSRV9JRF83QklUUykgewotICAgICAgLyogSTogNyBiaXQgcGljdHVyZV9pZCAqLwotICAgICAgcFsyXSA9IHNlbGYtPnBpY3R1cmVfaWQgJiAweDdGOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBJOiAxNSBiaXQgcGljdHVyZV9pZCAqLwotICAgICAgcFsyXSA9IDB4ODAgfCAoKHNlbGYtPnBpY3R1cmVfaWQgJiAweDdGRkYpID4+IDgpOwotICAgICAgcFszXSA9IHNlbGYtPnBpY3R1cmVfaWQgJiAweEZGOwotICAgIH0KLSAgfQotCi0gIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHBidWZmZXIsIG1hcmspOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLQotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXQpID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoaW4pOwotICBHU1RfQlVGRkVSX1BUUyAob3V0KSA9IEdTVF9CVUZGRVJfUFRTIChpbik7Ci0KLSAgcmV0dXJuIG91dDsKLX0KLQotc3RhdGljIGd1aW50Ci1nc3RfcnRwX3ZwOF9wYXlsb2FkX25leHQgKEdzdFJ0cFZQOFBheSAqIHNlbGYsIEdzdEJ1ZmZlckxpc3QgKiBsaXN0LAotICAgIGd1aW50IG9mZnNldCwgR3N0QnVmZmVyICogYnVmZmVyLCBnc2l6ZSBidWZmZXJfc2l6ZSwgZ3NpemUgbWF4X3BheWxvYWRfbGVuKQotewotICBndWludCBwYXJ0aXRpb247Ci0gIEdzdEJ1ZmZlciAqaGVhZGVyOwotICBHc3RCdWZmZXIgKnN1YjsKLSAgR3N0QnVmZmVyICpvdXQ7Ci0gIGdib29sZWFuIG1hcms7Ci0gIGdzaXplIHJlbWFpbmluZzsKLSAgZ3NpemUgYXZhaWxhYmxlOwotCi0gIHJlbWFpbmluZyA9IGJ1ZmZlcl9zaXplIC0gb2Zmc2V0OwotICBhdmFpbGFibGUgPSBtYXhfcGF5bG9hZF9sZW47Ci0gIGlmIChhdmFpbGFibGUgPiByZW1haW5pbmcpCi0gICAgYXZhaWxhYmxlID0gcmVtYWluaW5nOwotCi0gIHBhcnRpdGlvbiA9IGdzdF9ydHBfdnA4X29mZnNldF90b19wYXJ0aXRpb24gKHNlbGYsIG9mZnNldCk7Ci0gIGdfYXNzZXJ0IChwYXJ0aXRpb24gPCBzZWxmLT5uX3BhcnRpdGlvbnMpOwotCi0gIG1hcmsgPSAocmVtYWluaW5nID09IGF2YWlsYWJsZSk7Ci0gIC8qIHdob2xlIHNldCBvZiBwYXJ0aXRpb25zLCBwYXlsb2FkIHRoZW0gYW5kIGRvbmUgKi8KLSAgaGVhZGVyID0gZ3N0X3J0cF92cDhfY3JlYXRlX2hlYWRlcl9idWZmZXIgKHNlbGYsIHBhcnRpdGlvbiwKLSAgICAgIG9mZnNldCA9PSBzZWxmLT5wYXJ0aXRpb25fb2Zmc2V0W3BhcnRpdGlvbl0sIG1hcmssIGJ1ZmZlcik7Ci0gIHN1YiA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgb2Zmc2V0LCBhdmFpbGFibGUpOwotCi0gIGdzdF9ydHBfY29weV9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSwgaGVhZGVyLCBidWZmZXIsCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotICBvdXQgPSBnc3RfYnVmZmVyX2FwcGVuZCAoaGVhZGVyLCBzdWIpOwotCi0gIGdzdF9idWZmZXJfbGlzdF9pbnNlcnQgKGxpc3QsIC0xLCBvdXQpOwotCi0gIHJldHVybiBhdmFpbGFibGU7Ci19Ci0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfdnA4X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwVlA4UGF5ICpzZWxmID0gR1NUX1JUUF9WUDhfUEFZIChwYXlsb2FkKTsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3Q7Ci0gIGdzaXplIHNpemUsIG1heF9wYXlsZW47Ci0gIGd1aW50IG9mZnNldCwgbXR1LCB2cDhfaGRyX2xlbjsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9ydHBfdnA4X3BheV9wYXJzZV9mcmFtZSAoc2VsZiwgYnVmZmVyLCBzaXplKSkpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2VsZiwgU1RSRUFNLCBFTkNPREUsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gcGFyc2UgVlA4IGZyYW1lIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIG10dSA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocGF5bG9hZCk7Ci0gIHZwOF9oZHJfbGVuID0gZ3N0X3J0cF92cDhfY2FsY19oZWFkZXJfbGVuIChzZWxmKTsKLSAgbWF4X3BheWxlbiA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4gKG10dSAtIHZwOF9oZHJfbGVuLCAwLCAwKTsKLQotICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoKHNpemUgLyBtYXhfcGF5bGVuKSArIDEpOwotCi0gIG9mZnNldCA9IDA7Ci0gIHdoaWxlIChvZmZzZXQgPCBzaXplKSB7Ci0gICAgb2Zmc2V0ICs9Ci0gICAgICAgIGdzdF9ydHBfdnA4X3BheWxvYWRfbmV4dCAoc2VsZiwgbGlzdCwgb2Zmc2V0LCBidWZmZXIsIHNpemUsIG1heF9wYXlsZW4pOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfcHVzaF9saXN0IChwYXlsb2FkLCBsaXN0KTsKLQotICAvKiBJbmNyZW1lbmVudCBhbmQgd3JhcCB0aGUgcGljdHVyZSBpZCBpZiBpdCBvdmVyZmxvd3MgKi8KLSAgaWYgKChzZWxmLT5waWN0dXJlX2lkX21vZGUgPT0gVlA4X1BBWV9QSUNUVVJFX0lEXzdCSVRTICYmCi0gICAgICAgICAgKytzZWxmLT5waWN0dXJlX2lkID49IDB4ODApIHx8Ci0gICAgICAoc2VsZi0+cGljdHVyZV9pZF9tb2RlID09IFZQOF9QQVlfUElDVFVSRV9JRF8xNUJJVFMgJiYKLSAgICAgICAgICArK3NlbGYtPnBpY3R1cmVfaWQgPj0gMHg4MDAwKSkKLSAgICBzZWxmLT5waWN0dXJlX2lkID0gMDsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF92cDhfcGF5X3NpbmtfZXZlbnQgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwVlA4UGF5ICpzZWxmID0gR1NUX1JUUF9WUDhfUEFZIChwYXlsb2FkKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQpIHsKLSAgICBpZiAoc2VsZi0+cGljdHVyZV9pZF9tb2RlID09IFZQOF9QQVlfUElDVFVSRV9JRF83QklUUykKLSAgICAgIHNlbGYtPnBpY3R1cmVfaWQgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIEdfTUFYVUlOVDgpICYgMHg3RjsKLSAgICBlbHNlIGlmIChzZWxmLT5waWN0dXJlX2lkX21vZGUgPT0gVlA4X1BBWV9QSUNUVVJFX0lEXzE1QklUUykKLSAgICAgIHNlbGYtPnBpY3R1cmVfaWQgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIEdfTUFYVUlOVDE2KSAmIDB4N0ZGRjsKLSAgfQotCi0gIHJldHVybiBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAoZ3N0X3J0cF92cDhfcGF5X3BhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQKLSAgICAgIChwYXlsb2FkLCBldmVudCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF92cDhfcGF5X3NldF9jYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpzcmNfY2FwczsKLSAgR3N0U3RydWN0dXJlICpzOwotICBjaGFyICplbmNvZGluZ19uYW1lOwotCi0gIHNyY19jYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChHU1RfUlRQX0JBU0VfUEFZTE9BRF9TUkNQQUQgKHBheWxvYWQpKTsKLSAgaWYgKHNyY19jYXBzKSB7Ci0gICAgc3JjX2NhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChzcmNfY2Fwcyk7Ci0gICAgc3JjX2NhcHMgPSBnc3RfY2Fwc190cnVuY2F0ZSAoc3JjX2NhcHMpOwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzcmNfY2FwcywgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfc3RyaW5nIChzLCAiZW5jb2RpbmctbmFtZSIsICJWUDgiKTsKLSAgICBlbmNvZGluZ19uYW1lID0gZ19zdHJkdXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImVuY29kaW5nLW5hbWUiKSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY19jYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBlbmNvZGluZ19uYW1lID0gZ19zdHJkdXAgKCJWUDgtRFJBRlQtSUVURi0wMSIpOwotICB9Ci0KLSAgZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X29wdGlvbnMgKHBheWxvYWQsICJ2aWRlbyIsIFRSVUUsCi0gICAgICBlbmNvZGluZ19uYW1lLCA5MDAwMCk7Ci0gIGdfZnJlZSAoZW5jb2RpbmdfbmFtZSk7Ci0gIHJldHVybiBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgTlVMTCk7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3ZwOF9wYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHB2cDhwYXkiLAotICAgICAgR1NUX1JBTktfTUFSR0lOQUwsIEdTVF9UWVBFX1JUUF9WUDhfUEFZKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdnA4cGF5LmggYi9nc3QvcnRwL2dzdHJ0cHZwOHBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDcyMDYwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdnA4cGF5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogZ3N0cnRwdnA4cGF5LmggLSBIZWFkZXIgZm9yIEdzdFJ0cFZQOFBheQotICogQ29weXJpZ2h0IChDKSAyMDExIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfVlA4X1BBWV9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1ZQOF9QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJhc2VwYXlsb2FkLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfVlA4X1BBWSBcCi0gIChnc3RfcnRwX3ZwOF9wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9WUDhfUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdTVF9UWVBFX1JUUF9WUDhfUEFZLCBHc3RSdHBWUDhQYXkpKQotI2RlZmluZSBHU1RfUlRQX1ZQOF9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIEdTVF9UWVBFX1JUUF9WUDhfUEFZLCBHc3RSdHBWUDhQYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfVlA4X1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHU1RfVFlQRV9SVFBfVlA4X1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfVlA4X1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfUlRQX1ZQOF9QQVkpKQotI2RlZmluZSBHU1RfUlRQX1ZQOF9QQVlfR0VUX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1JUUF9WUDhfUEFZLCBHc3RSdHBWUDhQYXlDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBWUDhQYXkgR3N0UnRwVlA4UGF5OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFZQOFBheUNsYXNzIEdzdFJ0cFZQOFBheUNsYXNzOwotdHlwZWRlZiBlbnVtIF9QaWN0dXJlSURNb2RlIFBpY3R1cmVJRE1vZGU7Ci0KLWVudW0gX1BpY3R1cmVJRE1vZGUgewotICBWUDhfUEFZX05PX1BJQ1RVUkVfSUQsCi0gIFZQOF9QQVlfUElDVFVSRV9JRF83QklUUywKLSAgVlA4X1BBWV9QSUNUVVJFX0lEXzE1QklUUywKLX07Ci0KLXN0cnVjdCBfR3N0UnRwVlA4UGF5Q2xhc3MKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFZQOFBheQotewotICBHc3RSVFBCYXNlUGF5bG9hZCBwYXJlbnQ7Ci0gIGdib29sZWFuIGlzX2tleWZyYW1lOwotICBnaW50IG5fcGFydGl0aW9uczsKLSAgLyogVHJlYXQgZnJhbWUgaGVhZGVyICYgdGFnICYgcGFydGl0aW9uIHNpemUgYmxvY2sgYXMgdGhlIGZpcnN0IHBhcnRpdGlvbiwKLSAgICogZm9sb3dlZCBieSBtYXguIDggZGF0YSBwYXJ0aXRpb25zLiBsYXN0IG9mZnNldCBpcyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKi8KLSAgZ3VpbnQgcGFydGl0aW9uX29mZnNldFsxMF07Ci0gIGd1aW50IHBhcnRpdGlvbl9zaXplWzldOwotICBQaWN0dXJlSURNb2RlIHBpY3R1cmVfaWRfbW9kZTsKLSAgZ3VpbnQxNiBwaWN0dXJlX2lkOwotfTsKLQotR1R5cGUgZ3N0X3J0cF92cDhfcGF5X2dldF90eXBlICh2b2lkKTsKLQotZ2Jvb2xlYW4gZ3N0X3J0cF92cDhfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogI2lmbmRlZiBfX0dTVF9SVFBfVlA4X1BBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdnA5ZGVwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwdnA5ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQxYjIyMC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHZwOWRlcGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotLyogZ3N0cnRwdnA5ZGVwYXkuYyAtIFNvdXJjZSBmb3IgR3N0UnRwVlA5RGVwYXkKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQ29sbGFib3JhIEx0ZC4KLSAqICAgQ29udGFjdDogWW91bmVzcyBBbGFvdWkgPHlvdW5lc3MuYWxhb3VpQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHJ0cHZwOWRlcGF5LmgiCi0jaW5jbHVkZSAiZ3N0cnRwdXRpbHMuaCIKLQotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3J0cF92cDlfZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF92cDlfZGVwYXlfZGVidWcKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF92cDlfZGVwYXlfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgR3N0QnVmZmVyICpnc3RfcnRwX3ZwOV9kZXBheV9wcm9jZXNzIChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCk7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF92cDlfZGVwYXlfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICoKLSAgICBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3ZwOV9kZXBheV9oYW5kbGVfZXZlbnQgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwVlA5RGVwYXksIGdzdF9ydHBfdnA5X2RlcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92cDlfZGVwYXlfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXZwOSIpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdnA5X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwiCi0gICAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgeyBcIlZQOVwiLCBcIlZQOS1EUkFGVC1JRVRGLTAxXCIgfSIpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnA5X2RlcGF5X2luaXQgKEdzdFJ0cFZQOURlcGF5ICogc2VsZikKLXsKLSAgc2VsZi0+YWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgc2VsZi0+c3RhcnRlZCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDlfZGVwYXlfY2xhc3NfaW5pdCAoR3N0UnRwVlA5RGVwYXlDbGFzcyAqIGdzdF9ydHBfdnA5X2RlcGF5X2NsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChnc3RfcnRwX3ZwOV9kZXBheV9jbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfcnRwX3ZwOV9kZXBheV9jbGFzcyk7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZGVwYXlfY2xhc3MgPQotICAgICAgKEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqKSAoZ3N0X3J0cF92cDlfZGVwYXlfY2xhc3MpOwotCi0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF92cDlfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdnA5X2RlcGF5X3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlJUUCBWUDkgZGVwYXlsb2FkZXIiLAotICAgICAgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyBWUDkgdmlkZW8gZnJvbSBSVFAgcGFja2V0cykiLCAiU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Iik7Ci0KLSAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3J0cF92cDlfZGVwYXlfZGlzcG9zZTsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRwX3ZwOV9kZXBheV9jaGFuZ2Vfc3RhdGU7Ci0KLSAgZGVwYXlfY2xhc3MtPnByb2Nlc3NfcnRwX3BhY2tldCA9IGdzdF9ydHBfdnA5X2RlcGF5X3Byb2Nlc3M7Ci0gIGRlcGF5X2NsYXNzLT5oYW5kbGVfZXZlbnQgPSBnc3RfcnRwX3ZwOV9kZXBheV9oYW5kbGVfZXZlbnQ7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfdnA5X2RlcGF5X2RlYnVnLCAicnRwdnA5ZGVwYXkiLCAwLAotICAgICAgIlZQOSBWaWRlbyBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnA5X2RlcGF5X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFZQOURlcGF5ICpzZWxmID0gR1NUX1JUUF9WUDlfREVQQVkgKG9iamVjdCk7Ci0KLSAgaWYgKHNlbGYtPmFkYXB0ZXIgIT0gTlVMTCkKLSAgICBnX29iamVjdF91bnJlZiAoc2VsZi0+YWRhcHRlcik7Ci0gIHNlbGYtPmFkYXB0ZXIgPSBOVUxMOwotCi0gIC8qIHJlbGVhc2UgYW55IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgb2JqZWN0IGhlcmUgKi8KLQotICBpZiAoR19PQkpFQ1RfQ0xBU1MgKGdzdF9ydHBfdnA5X2RlcGF5X3BhcmVudF9jbGFzcyktPmRpc3Bvc2UpCi0gICAgR19PQkpFQ1RfQ0xBU1MgKGdzdF9ydHBfdnA5X2RlcGF5X3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF92cDlfZGVwYXlfcHJvY2VzcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5LCBHc3RSVFBCdWZmZXIgKiBydHApCi17Ci0gIEdzdFJ0cFZQOURlcGF5ICpzZWxmID0gR1NUX1JUUF9WUDlfREVQQVkgKGRlcGF5KTsKLSAgR3N0QnVmZmVyICpwYXlsb2FkOwotICBndWludDggKmRhdGE7Ci0gIGd1aW50IGhkcnNpemUgPSAxOwotICBndWludCBzaXplOwotICBnaW50IHNwYXRpYWxfbGF5ZXIgPSAwOwotICBnYm9vbGVhbiBpX2JpdCwgcF9iaXQsIGxfYml0LCBmX2JpdCwgYl9iaXQsIGVfYml0LCB2X2JpdDsKLQotICBpZiAoR19VTkxJS0VMWSAoR1NUX0JVRkZFUl9JU19ESVNDT05UIChydHAtPmJ1ZmZlcikpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJEaXNjb250aW51aXR5LCBmbHVzaGluZyBhZGFwdGVyIik7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHNlbGYtPmFkYXB0ZXIpOwotICAgIHNlbGYtPnN0YXJ0ZWQgPSBGQUxTRTsKLSAgfQotCi0gIHNpemUgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKHJ0cCk7Ci0KLSAgLyogTWFuZGF0b3J5IHdpdGggYXQgbGVhc3Qgb25lIGhlYWRlciBhbmQgb25lIHZwOSBieXRlICovCi0gIGlmIChHX1VOTElLRUxZIChzaXplIDwgaGRyc2l6ZSArIDEpKQotICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gIGRhdGEgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAocnRwKTsKLSAgaV9iaXQgPSAoZGF0YVswXSAmIDB4ODApICE9IDA7Ci0gIHBfYml0ID0gKGRhdGFbMF0gJiAweDQwKSAhPSAwOwotICBsX2JpdCA9IChkYXRhWzBdICYgMHgyMCkgIT0gMDsKLSAgZl9iaXQgPSAoZGF0YVswXSAmIDB4MTApICE9IDA7Ci0gIGJfYml0ID0gKGRhdGFbMF0gJiAweDA4KSAhPSAwOwotICBlX2JpdCA9IChkYXRhWzBdICYgMHgwNCkgIT0gMDsKLSAgdl9iaXQgPSAoZGF0YVswXSAmIDB4MDIpICE9IDA7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFzZWxmLT5zdGFydGVkKSkgewotICAgIC8qIENoZWNrIGlmIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgVlA5IGxheWVyIGZyYW1lLCBvdGhlcndpc2UgYmFpbCAqLwotICAgIGlmICghYl9iaXQpCi0gICAgICBnb3RvIGRvbmU7Ci0KLSAgICBzZWxmLT5zdGFydGVkID0gVFJVRTsKLSAgfQotCi0gIEdTVF9UUkFDRV9PQkpFQ1QgKHNlbGYsICJJUExGQkVWIDogJWQlZCVkJWQlZCVkJWQiLCBpX2JpdCwgcF9iaXQsIGxfYml0LAotICAgICAgZl9iaXQsIGJfYml0LCBlX2JpdCwgdl9iaXQpOwotCi0gIC8qIENoZWNrIEkgb3B0aW9uYWwgaGVhZGVyIFBpY3R1cmUgSUQgKi8KLSAgaWYgKGlfYml0KSB7Ci0gICAgaGRyc2l6ZSsrOwotICAgIGlmIChHX1VOTElLRUxZIChzaXplIDwgaGRyc2l6ZSArIDEpKQotICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgLyogQ2hlY2sgTSBmb3IgMTUgYml0cyBQaWN0dXJlSUQgKi8KLSAgICBpZiAoKGRhdGFbMV0gJiAweDgwKSAhPSAwKSB7Ci0gICAgICBoZHJzaXplKys7Ci0gICAgICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IGhkcnNpemUgKyAxKSkKLSAgICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgTCBvcHRpb25hbCBoZWFkZXIgbGF5ZXIgaW5kaWNlcyAqLwotICBpZiAobF9iaXQpIHsKLSAgICBoZHJzaXplKys7Ci0gICAgLyogQ2hlY2sgVEwwUElDSURYIHRlbXBvcmFsIGxheWVyIHplcm8gaW5kZXggKG5vbi1mbGV4aWJsZSBtb2RlKSAqLwotICAgIGlmICghZl9iaXQpCi0gICAgICBoZHJzaXplKys7Ci0gIH0KLQotICBpZiAocF9iaXQgJiYgZl9iaXQpIHsKLSAgICAvKiBBdCBsZWFzdCBvbmUgUF9ESUZGfE4sIHVwIHRvIHRocmVlIHRpbWVzICovCi0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICBndWludCBwX2RpZmYsIG5fYml0OwotCi0gICAgICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IGhkcnNpemUgKyAxKSkKLSAgICAgICAgZ290byB0b29fc21hbGw7Ci0KLSAgICAgIHBfZGlmZiA9IGRhdGFbaGRyc2l6ZV0gPj4gMTsKLSAgICAgIG5fYml0ID0gZGF0YVtoZHJzaXplXSAmIDB4MTsKLSAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKHNlbGYsICJQX0RJRkZbJWRdPSVkIiwgaSwgcF9kaWZmKTsKLSAgICAgIGhkcnNpemUrKzsKLQotICAgICAgaWYgKCFuX2JpdCkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgViBvcHRpb25hbCBTY2FsYWJpbGl0eSBTdHJ1Y3R1cmUgKi8KLSAgaWYgKHZfYml0KSB7Ci0gICAgZ3VpbnQgbl9zLCB5X2JpdCwgZ19iaXQ7Ci0gICAgZ3VpbnQ4ICpzcyA9ICZkYXRhW2hkcnNpemVdOwotICAgIGd1aW50IHNzc2l6ZSA9IDE7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoc2l6ZSA8IGhkcnNpemUgKyBzc3NpemUgKyAxKSkKLSAgICAgIGdvdG8gdG9vX3NtYWxsOwotCi0gICAgbl9zID0gKHNzWzBdICYgMHhlMCkgPj4gNTsKLSAgICB5X2JpdCA9IChzc1swXSAmIDB4MTApICE9IDA7Ci0gICAgZ19iaXQgPSAoc3NbMF0gJiAweDA4KSAhPSAwOwotCi0gICAgR1NUX1RSQUNFX09CSkVDVCAoc2VsZiwgIlNTIGhlYWRlcjogTl9TPSV1LCBZPSV1LCBHPSV1Iiwgbl9zLCB5X2JpdCwgZ19iaXQpOwotCi0gICAgc3NzaXplICs9IHlfYml0ID8gKG5fcyArIDEpICogNCA6IDA7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPCBoZHJzaXplICsgc3NzaXplICsgMSkpCi0gICAgICBnb3RvIHRvb19zbWFsbDsKLQotICAgIGlmICh5X2JpdCkgewotICAgICAgZ3VpbnQgaTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPD0gbl9zOyBpKyspIHsKLSAgICAgICAgLyogRm9yIG5vdywgc2ltcGx5IHVzZSB0aGUgbGFzdCBsYXllciBzcGVjaWZpZWQgZm9yIHdpZHRoIGFuZCBoZWlnaHQgKi8KLSAgICAgICAgc2VsZi0+c3Nfd2lkdGggPSBzc1sxICsgaSAqIDRdICogMjU2ICsgc3NbMiArIGkgKiA0XTsKLSAgICAgICAgc2VsZi0+c3NfaGVpZ2h0ID0gc3NbMyArIGkgKiA0XSAqIDI1NiArIHNzWzQgKyBpICogNF07Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKHNlbGYsICJOX1NbJWRdOiBXSURUSD0ldSwgSEVJR0hUPSV1IiwgaSwKLSAgICAgICAgICAgIHNlbGYtPnNzX3dpZHRoLCBzZWxmLT5zc19oZWlnaHQpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChnX2JpdCkgewotICAgICAgZ3VpbnQgaSwgajsKLSAgICAgIGd1aW50IG5fZyA9IHNzW3Nzc2l6ZV07Ci0gICAgICBzc3NpemUrKzsKLSAgICAgIGlmIChHX1VOTElLRUxZIChzaXplIDwgaGRyc2l6ZSArIHNzc2l6ZSArIDEpKQotICAgICAgICBnb3RvIHRvb19zbWFsbDsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBuX2c7IGkrKykgewotICAgICAgICBndWludCB0ID0gKHNzW3Nzc2l6ZV0gJiAweGUwKSA+PiA1OwotICAgICAgICBndWludCB1ID0gKHNzW3Nzc2l6ZV0gJiAweDEwKSA+PiA0OwotICAgICAgICBndWludCByID0gKHNzW3Nzc2l6ZV0gJiAweDBjKSA+PiAyOwotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUIChzZWxmLCAiTl9HWyV1XTogMHglMDJ4IC0+IFQ9JXUsIFU9JXUsIFI9JXUiLCBpLAotICAgICAgICAgICAgc3Nbc3NzaXplXSwgdCwgdSwgcik7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCByOyBqKyspCi0gICAgICAgICAgR1NUX1RSQUNFX09CSkVDVCAoc2VsZiwgIiAgUlsldV06IFBfRElGRj0ldSIsIGosIHNzW3Nzc2l6ZSArIDEgKyBqXSk7Ci0gICAgICAgIHNzc2l6ZSArPSAxICsgcjsKLSAgICAgICAgaWYgKEdfVU5MSUtFTFkgKHNpemUgPCBoZHJzaXplICsgc3NzaXplICsgMSkpCi0gICAgICAgICAgZ290byB0b29fc21hbGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGhkcnNpemUgKz0gc3NzaXplOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXksICJoZHJzaXplICV1LCBzaXplICV1IiwgaGRyc2l6ZSwgc2l6ZSk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGhkcnNpemUgPj0gc2l6ZSkpCi0gICAgZ290byB0b29fc21hbGw7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3N1YmJ1ZmZlciAocnRwLCBoZHJzaXplLCAtMSk7Ci0gIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBnc3RfYnVmZmVyX21hcCAocGF5bG9hZCwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBHU1RfTUVNRFVNUF9PQkpFQ1QgKHNlbGYsICJ2cDkgcGF5bG9hZCIsIG1hcC5kYXRhLCAxNik7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAocGF5bG9hZCwgJm1hcCk7Ci0gIH0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoc2VsZi0+YWRhcHRlciwgcGF5bG9hZCk7Ci0KLSAgLyogTWFya2VyIGluZGljYXRlcyB0aGF0IGl0IHdhcyB0aGUgbGFzdCBydHAgcGFja2V0IGZvciB0aGlzIGZyYW1lICovCi0gIGlmIChnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyIChydHApKSB7Ci0gICAgR3N0QnVmZmVyICpvdXQ7Ci0gICAgZ2Jvb2xlYW4ga2V5X2ZyYW1lX2ZpcnN0X2xheWVyID0gIXBfYml0ICYmIHNwYXRpYWxfbGF5ZXIgPT0gMDsKLQotICAgIGlmIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNlbGYtPmFkYXB0ZXIpIDwgMTApCi0gICAgICBnb3RvIHRvb19zbWFsbDsKLQotICAgIG91dCA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChzZWxmLT5hZGFwdGVyLAotICAgICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNlbGYtPmFkYXB0ZXIpKTsKLQotICAgIHNlbGYtPnN0YXJ0ZWQgPSBGQUxTRTsKLQotICAgIC8qIG1hcmsga2V5ZnJhbWVzICovCi0gICAgb3V0ID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChvdXQpOwotICAgIC8qIEZpbHRlciBhd2F5IGFsbCBtZXRhcyB0aGF0IGFyZSBub3Qgc2Vuc2libGUgdG8gY29weSAqLwotICAgIGdzdF9ydHBfZHJvcF9tZXRhIChHU1RfRUxFTUVOVF9DQVNUIChzZWxmKSwgb3V0LAotICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotICAgIGlmICgha2V5X2ZyYW1lX2ZpcnN0X2xheWVyKSB7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXQsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLQotICAgICAgaWYgKCFzZWxmLT5jYXBzX3NlbnQpIHsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0KTsKLSAgICAgICAgb3V0ID0gTlVMTDsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChzZWxmLCAiRHJvcHBpbmcgaW50ZXItZnJhbWUgYmVmb3JlIGludHJhLWZyYW1lIik7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TSU5LUEFEIChkZXBheSksCi0gICAgICAgICAgICBnc3RfdmlkZW9fZXZlbnRfbmV3X3Vwc3RyZWFtX2ZvcmNlX2tleV91bml0IChHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgICAgICAgICAgIFRSVUUsIDApKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXQsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLQotICAgICAgaWYgKHNlbGYtPmxhc3Rfd2lkdGggIT0gc2VsZi0+c3Nfd2lkdGggfHwKLSAgICAgICAgICBzZWxmLT5sYXN0X2hlaWdodCAhPSBzZWxmLT5zc19oZWlnaHQpIHsKLSAgICAgICAgR3N0Q2FwcyAqc3JjY2FwczsKLQotICAgICAgICAvKiBXaWR0aCBhbmQgaGVpZ2h0IGFyZSBvcHRpb25hbCBpbiB0aGUgUlRQIGhlYWRlci4gQ29uc2lkZXIgdG8gcGFyc2UKLSAgICAgICAgICogdGhlIGZyYW1lIGhlYWRlciBpbiBhZGRpdGlvbiBpZiBtaXNzaW5nIGZyb20gUlRQIGhlYWRlciAqLwotICAgICAgICBpZiAoc2VsZi0+c3Nfd2lkdGggIT0gMCAmJiBzZWxmLT5zc19oZWlnaHQgIT0gMCkgewotICAgICAgICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC12cDkiLAotICAgICAgICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDAsIDEsCi0gICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHNlbGYtPnNzX3dpZHRoLAotICAgICAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgc2VsZi0+c3NfaGVpZ2h0LCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtdnA5IiwKLSAgICAgICAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAwLCAxLCBOVUxMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdzdF9wYWRfc2V0X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheSksIHNyY2NhcHMpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAoc3JjY2Fwcyk7Ci0KLSAgICAgICAgc2VsZi0+Y2Fwc19zZW50ID0gVFJVRTsKLSAgICAgICAgc2VsZi0+bGFzdF93aWR0aCA9IHNlbGYtPnNzX3dpZHRoOwotICAgICAgICBzZWxmLT5sYXN0X2hlaWdodCA9IHNlbGYtPnNzX2hlaWdodDsKLSAgICAgICAgc2VsZi0+c3Nfd2lkdGggPSAwOwotICAgICAgICBzZWxmLT5zc19oZWlnaHQgPSAwOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIE5VTEw7Ci0KLXRvb19zbWFsbDoKLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJJbnZhbGlkIHJ0cCBwYWNrZXQgKHRvbyBzbWFsbCksIGlnbm9yaW5nIik7Ci0gIGdzdF9hZGFwdGVyX2NsZWFyIChzZWxmLT5hZGFwdGVyKTsKLSAgc2VsZi0+c3RhcnRlZCA9IEZBTFNFOwotCi0gIGdvdG8gZG9uZTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX3ZwOV9kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSdHBWUDlEZXBheSAqc2VsZiA9IEdTVF9SVFBfVlA5X0RFUEFZIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgc2VsZi0+bGFzdF93aWR0aCA9IC0xOwotICAgICAgc2VsZi0+bGFzdF9oZWlnaHQgPSAtMTsKLSAgICAgIHNlbGYtPmNhcHNfc2VudCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuCi0gICAgICBHU1RfRUxFTUVOVF9DTEFTUyAoZ3N0X3J0cF92cDlfZGVwYXlfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LAotICAgICAgdHJhbnNpdGlvbik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF92cDlfZGVwYXlfaGFuZGxlX2V2ZW50IChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXksIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJ0cFZQOURlcGF5ICpzZWxmID0gR1NUX1JUUF9WUDlfREVQQVkgKGRlcGF5KTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgICAgc2VsZi0+bGFzdF93aWR0aCA9IC0xOwotICAgICAgc2VsZi0+bGFzdF9oZWlnaHQgPSAtMTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybgotICAgICAgR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9DTEFTUwotICAgICAgKGdzdF9ydHBfdnA5X2RlcGF5X3BhcmVudF9jbGFzcyktPmhhbmRsZV9ldmVudCAoZGVwYXksIGV2ZW50KTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9ydHBfdnA5X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwdnA5ZGVwYXkiLAotICAgICAgR1NUX1JBTktfTUFSR0lOQUwsIEdTVF9UWVBFX1JUUF9WUDlfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHB2cDlkZXBheS5oIGIvZ3N0L3J0cC9nc3RydHB2cDlkZXBheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Zjc4M2FiLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdnA5ZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBnc3RydHB2cDlkZXBheS5oIC0gSGVhZGVyIGZvciBHc3RSdHBWUDlEZXBheQotICogQ29weXJpZ2h0IChDKSAyMDExIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfVlA5X0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfVlA5X0RFUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1ZQOV9ERVBBWSBcCi0gIChnc3RfcnRwX3ZwOV9kZXBheV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1ZQOV9ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHU1RfVFlQRV9SVFBfVlA5X0RFUEFZLCBHc3RSdHBWUDlEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfVlA5X0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHU1RfVFlQRV9SVFBfVlA5X0RFUEFZLCBcCi0gICAgR3N0UnRwVlA5RGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfVlA5X0RFUEFZKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdTVF9UWVBFX1JUUF9WUDlfREVQQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1ZQOV9ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfUlRQX1ZQOV9ERVBBWSkpCi0jZGVmaW5lIEdTVF9SVFBfVlA5X0RFUEFZX0dFVF9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9SVFBfVlA5X0RFUEFZLCBcCi0gICAgR3N0UnRwVlA5RGVwYXlDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBWUDlEZXBheSBHc3RSdHBWUDlEZXBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBWUDlEZXBheUNsYXNzIEdzdFJ0cFZQOURlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwVlA5RGVwYXlDbGFzcwotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBWUDlEZXBheQotewotICBHc3RSVFBCYXNlRGVwYXlsb2FkIHBhcmVudDsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgZ2Jvb2xlYW4gc3RhcnRlZDsKLQotICBnaW50IHNzX3dpZHRoOwotICBnaW50IHNzX2hlaWdodDsKLSAgZ2ludCBsYXN0X3dpZHRoOwotICBnaW50IGxhc3RfaGVpZ2h0OwotICBnYm9vbGVhbiBjYXBzX3NlbnQ7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3ZwOV9kZXBheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfdnA5X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogI2lmbmRlZiBfX0dTVF9SVFBfVlA5X0RFUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHB2cDlwYXkuYyBiL2dzdC9ydHAvZ3N0cnRwdnA5cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NWFmZmIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHB2cDlwYXkuYworKysgL2Rldi9udWxsCkBAIC0xLDU1NiArMCwwIEBACi0vKgotICogZ3N0cnRwdnA5cGF5LmMgLSBTb3VyY2UgZm9yIEdzdFJ0cFZQOVBheQotICogQ29weXJpZ2h0IChDKSAyMDExIFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRkLgotICogICBDb250YWN0OiBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDE1IFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJpdHJlYWRlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwcGF5bG9hZHMuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgImRib29saHVmZi5oIgotI2luY2x1ZGUgImdzdHJ0cHZwOXBheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydHBfdnA5X3BheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcnRwX3ZwOV9wYXlfZGVidWcKLQotI2RlZmluZSBERUZBVUxUX1BJQ1RVUkVfSURfTU9ERSBWUDlfUEFZX05PX1BJQ1RVUkVfSUQKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfUElDVFVSRV9JRF9NT0RFCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9WUDlfUEFZX1BJQ1RVUkVfSURfTU9ERSAoZ3N0X3J0cF92cDlfcGF5X3BpY3R1cmVfaWRfbW9kZV9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfcnRwX3ZwOV9wYXlfcGljdHVyZV9pZF9tb2RlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgbW9kZV90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgbW9kZXNbXSA9IHsKLSAgICB7VlA5X1BBWV9OT19QSUNUVVJFX0lELCAiTm8gUGljdHVyZSBJRCIsICJub25lIn0sCi0gICAge1ZQOV9QQVlfUElDVFVSRV9JRF83QklUUywgIjctYml0IFBpY3R1cmUgSUQiLCAiNy1iaXQifSwKLSAgICB7VlA5X1BBWV9QSUNUVVJFX0lEXzE1QklUUywgIjE1LWJpdCBQaWN0dXJlIElEIiwgIjE1LWJpdCJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIW1vZGVfdHlwZSkgewotICAgIG1vZGVfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RWUDlSVFBQYXlNb2RlIiwgbW9kZXMpOwotICB9Ci0gIHJldHVybiBtb2RlX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfdnA5X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX3ZwOV9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3ZwOV9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF92cDlfcGF5X3NpbmtfZXZlbnQgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3ZwOV9wYXlfc2V0X2NhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFZQOVBheSwgZ3N0X3J0cF92cDlfcGF5LCBHU1RfVFlQRV9SVFBfQkFTRV9QQVlMT0FEKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdnA5X3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgIiBHU1RfUlRQX1BBWUxPQURfRFlOQU1JQ19TVFJJTkcgIiwiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsIGVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSB7IFwiVlA5XCIsIFwiVlA5LURSQUZULUlFVEYtMDFcIiB9IikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92cDlfcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC12cDkiKSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZwOV9wYXlfaW5pdCAoR3N0UnRwVlA5UGF5ICogb2JqKQotewotICBvYmotPnBpY3R1cmVfaWRfbW9kZSA9IERFRkFVTFRfUElDVFVSRV9JRF9NT0RFOwotICBpZiAob2JqLT5waWN0dXJlX2lkX21vZGUgPT0gVlA5X1BBWV9QSUNUVVJFX0lEXzdCSVRTKQotICAgIG9iai0+cGljdHVyZV9pZCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgR19NQVhVSU5UOCkgJiAweDdGOwotICBlbHNlIGlmIChvYmotPnBpY3R1cmVfaWRfbW9kZSA9PSBWUDlfUEFZX1BJQ1RVUkVfSURfMTVCSVRTKQotICAgIG9iai0+cGljdHVyZV9pZCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgR19NQVhVSU5UMTYpICYgMHg3RkZGOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF92cDlfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFZQOVBheUNsYXNzICogZ3N0X3J0cF92cDlfcGF5X2NsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoZ3N0X3J0cF92cDlfcGF5X2NsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9ydHBfdnA5X3BheV9jbGFzcyk7Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgKnBheV9jbGFzcyA9Ci0gICAgICBHU1RfUlRQX0JBU0VfUEFZTE9BRF9DTEFTUyAoZ3N0X3J0cF92cDlfcGF5X2NsYXNzKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcnRwX3ZwOV9wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX3ZwOV9wYXlfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUElDVFVSRV9JRF9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJwaWN0dXJlLWlkLW1vZGUiLCAiUGljdHVyZSBJRCBNb2RlIiwKLSAgICAgICAgICAiVGhlIHBpY3R1cmUgSUQgbW9kZSBmb3IgcGF5bG9hZGluZyIsCi0gICAgICAgICAgR1NUX1RZUEVfUlRQX1ZQOV9QQVlfUElDVFVSRV9JRF9NT0RFLCBERUZBVUxUX1BJQ1RVUkVfSURfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3ZwOV9wYXlfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdnA5X3BheV9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJSVFAgVlA5IHBheWxvYWRlciIsCi0gICAgICAiQ29kZWMvUGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJQdXRzIFZQOSB2aWRlbyBpbiBSVFAgcGFja2V0cykiLCAiU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Iik7Ci0KLSAgcGF5X2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF92cDlfcGF5X2hhbmRsZV9idWZmZXI7Ci0gIHBheV9jbGFzcy0+c2lua19ldmVudCA9IGdzdF9ydHBfdnA5X3BheV9zaW5rX2V2ZW50OwotICBwYXlfY2xhc3MtPnNldF9jYXBzID0gZ3N0X3J0cF92cDlfcGF5X3NldF9jYXBzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcnRwX3ZwOV9wYXlfZGVidWcsICJydHB2cDlwYXkiLCAwLAotICAgICAgIlZQOSBWaWRlbyBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZwOV9wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cFZQOVBheSAqcnRwdnA5cGF5ID0gR1NUX1JUUF9WUDlfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QSUNUVVJFX0lEX01PREU6Ci0gICAgICBydHB2cDlwYXktPnBpY3R1cmVfaWRfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGlmIChydHB2cDlwYXktPnBpY3R1cmVfaWRfbW9kZSA9PSBWUDlfUEFZX1BJQ1RVUkVfSURfN0JJVFMpCi0gICAgICAgIHJ0cHZwOXBheS0+cGljdHVyZV9pZCA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgR19NQVhVSU5UOCkgJiAweDdGOwotICAgICAgZWxzZSBpZiAocnRwdnA5cGF5LT5waWN0dXJlX2lkX21vZGUgPT0gVlA5X1BBWV9QSUNUVVJFX0lEXzE1QklUUykKLSAgICAgICAgcnRwdnA5cGF5LT5waWN0dXJlX2lkID0gZ19yYW5kb21faW50X3JhbmdlICgwLCBHX01BWFVJTlQxNikgJiAweDdGRkY7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZwOV9wYXlfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cFZQOVBheSAqcnRwdnA5cGF5ID0gR1NUX1JUUF9WUDlfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QSUNUVVJFX0lEX01PREU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgcnRwdnA5cGF5LT5waWN0dXJlX2lkX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0jZGVmaW5lIFZQOV9QUk9GSUxFXzAgMAotI2RlZmluZSBWUDlfUFJPRklMRV8xIDEKLSNkZWZpbmUgVlA5X1BST0ZJTEVfMiAyCi0jZGVmaW5lIFZQOV9QUk9GSUxFXzMgMwotI2RlZmluZSBWUDlfRlJBTUVfTUFSS0VSIDB4MgotI2RlZmluZSBWUFhfQ1NfU1JHQiA3Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF92cDlfcGF5X3BhcnNlX2ZyYW1lIChHc3RSdHBWUDlQYXkgKiBzZWxmLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgZ3NpemUgYnVmZmVyX3NpemUpCi17Ci0gIEdzdE1hcEluZm8gbWFwID0gR1NUX01BUF9JTkZPX0lOSVQ7Ci0gIEdzdEJpdFJlYWRlciByZWFkZXI7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ2Jvb2xlYW4ga2V5ZnJhbWU7Ci0gIGd1aW50MzIgdG1wLCBwcm9maWxlOwotCi0gIGlmIChHX1VOTElLRUxZIChidWZmZXJfc2l6ZSA8IDMpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKCFnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpIHx8ICFtYXAuZGF0YSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgc2l6ZSA9IG1hcC5zaXplOwotCi0gIGdzdF9iaXRfcmVhZGVyX2luaXQgKCZyZWFkZXIsIGRhdGEsIHNpemUpOwotCi0KLSAgLyogZnJhbWUgbWFya2VyICovCi0gIGlmICghZ3N0X2JpdF9yZWFkZXJfZ2V0X2JpdHNfdWludDMyICgmcmVhZGVyLCAmdG1wLCAyKQotICAgICAgfHwgdG1wICE9IFZQOV9GUkFNRV9NQVJLRVIpCi0gICAgZ290byBlcnJvcjsKLQotICAvKiBwcm9maWxlLCB2YXJpYWJsZSBsZW5ndGggKi8KLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCZyZWFkZXIsICZwcm9maWxlLCAyKSkKLSAgICBnb3RvIGVycm9yOwotICBpZiAocHJvZmlsZSA+IDIpIHsKLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJnRtcCwgMSkpCi0gICAgICBnb3RvIGVycm9yOwotICAgIHByb2ZpbGUgKz0gdG1wOwotICB9Ci0KLSAgLyogc2hvdyBleGlzdGluZyBmcmFtZSAqLwotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJnRtcCwgMSkpCi0gICAgZ290byBlcnJvcjsKLSAgaWYgKHRtcCkgewotICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMykpCi0gICAgICBnb3RvIGVycm9yOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogZnJhbWUgdHlwZSAqLwotICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJnRtcCwgMSkpCi0gICAgZ290byBlcnJvcjsKLSAgc2VsZi0+aXNfa2V5ZnJhbWUgPSBrZXlmcmFtZSA9ICh0bXAgPT0gMCk7Ci0KLSAgLyogc2hvdyBmcmFtZSBhbmQgcmVzaWxpZW50IG1vZGUgKi8KLSAgaWYgKCFnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAyKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIGlmIChrZXlmcmFtZSkgewotICAgIC8qIHN5bmMgY29kZSAqLwotICAgIGNvbnN0IGd1aW50MzIgc3luY19jb2RlID0gMHg0OTgzNDI7Ci0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCZyZWFkZXIsICZ0bXAsIDI0KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKHRtcCAhPSBzeW5jX2NvZGUpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgaWYgKHByb2ZpbGUgPj0gVlA5X1BST0ZJTEVfMikgewotICAgICAgLyogYml0IGRlcHRoICovCi0gICAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDEpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQotICAgIC8qIGNvbG9yIHNwYWNlICovCi0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCZyZWFkZXIsICZ0bXAsIDMpKQotICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAodG1wICE9IFZQWF9DU19TUkdCKSB7Ci0gICAgICAvKiBjb2xvciByYW5nZSAqLwotICAgICAgaWYgKCFnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAxKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICAgIGlmIChwcm9maWxlID09IFZQOV9QUk9GSUxFXzEgfHwgcHJvZmlsZSA9PSBWUDlfUFJPRklMRV8zKSB7Ci0gICAgICAgIC8qIHN1YnNhbXBsaW5nICsgcmVzZXJ2ZWQgYml0ICovCi0gICAgICAgIGlmICghZ3N0X2JpdF9yZWFkZXJfc2tpcCAoJnJlYWRlciwgMiArIDEpKQotICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChwcm9maWxlID09IFZQOV9QUk9GSUxFXzEgfHwgcHJvZmlsZSA9PSBWUDlfUFJPRklMRV8zKQotICAgICAgICAvKiByZXNlcnZlZCBiaXQgKi8KLSAgICAgICAgaWYgKCFnc3RfYml0X3JlYWRlcl9za2lwICgmcmVhZGVyLCAxKSkKLSAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQotICAgIC8qIGZyYW1lIHNpemUgKi8KLSAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX2dldF9iaXRzX3VpbnQzMiAoJnJlYWRlciwgJnRtcCwgMTYpKQotICAgICAgZ290byBlcnJvcjsKLSAgICBzZWxmLT53aWR0aCA9IHRtcCArIDE7Ci0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCZyZWFkZXIsICZ0bXAsIDE2KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc2VsZi0+aGVpZ2h0ID0gdG1wICsgMTsKLQotICAgIC8qIHJlbmRlciBzaXplICovCi0gICAgaWYgKCFnc3RfYml0X3JlYWRlcl9nZXRfYml0c191aW50MzIgKCZyZWFkZXIsICZ0bXAsIDEpKQotICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAodG1wKSB7Ci0gICAgICBpZiAoIWdzdF9iaXRfcmVhZGVyX3NraXAgKCZyZWFkZXIsIDMyKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNlbGYsICJwYXJzZWQgd2lkdGg9JWQgaGVpZ2h0PSVkIiwgc2VsZi0+d2lkdGgsCi0gICAgICAgIHNlbGYtPmhlaWdodCk7Ci0gIH0KLQotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIHJldHVybiBUUlVFOwotCi1lcnJvcjoKLSAgR1NUX0RFQlVHICgiRmFpbGVkIHRvIHBhcnNlIGZyYW1lIik7Ci0gIGlmIChtYXAubWVtb3J5ICE9IE5VTEwpIHsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdzaXplCi1nc3RfcnRwX3ZwOV9jYWxjX2hlYWRlcl9sZW4gKEdzdFJ0cFZQOVBheSAqIHNlbGYsIGdib29sZWFuIHN0YXJ0KQotewotICBnc2l6ZSBsZW4gPSAxOwotCi0gIHN3aXRjaCAoc2VsZi0+cGljdHVyZV9pZF9tb2RlKSB7Ci0gICAgY2FzZSBWUDlfUEFZX1BJQ1RVUkVfSURfN0JJVFM6Ci0gICAgICBsZW4gKz0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVlA5X1BBWV9QSUNUVVJFX0lEXzE1QklUUzoKLSAgICAgIGxlbiArPSAyOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIEFzc3VtZSBub24tZmxleGlibGUgbW9kZSAqLwotICAvKiBBc3N1bWUgTC1iaXQgbm90IHNldCwgbm8gTCBoZWFkZXIgKi8KLQotICBpZiAoc2VsZi0+aXNfa2V5ZnJhbWUgJiYgc3RhcnQpIHsKLSAgICAvKiBBc3N1bWUgVi1iaXQgc2V0ICovCi0gICAgLyogRklYTUU6IFNTIGRlcGVuZHMgb24gbGF5ZXJzIGFuZCBwcmVkaWN0aW9uIHN0cnVjdHVyZSAqLwotICAgIC8qIEZvciBub3cgYXNzdW1lIDEgc3BhdGlhbCBhbmQgMSB0ZW1wb3JhbCBsYXllci4gKi8KLSAgICAvKiBGSVhNRTogT25seSBmb3IgdGhlIGZpcnN0IHBhY2tldCBpbiB0aGUga2V5IGZyYW1lICovCi0gICAgbGVuICs9IDg7Ci0gIH0KLQotICByZXR1cm4gbGVuOwotfQotCi0vKiBWUDkgUlRQIGhlYWRlciwgbm9uLWZsZXhpYmxlIG1vZGU6Ci0KLSAgICAgICAgIDAgMSAyIDMgNCA1IDYgNwotICAgICAgICArLSstKy0rLSstKy0rLSstKwotICAgICAgICB8SXxQfEx8RnxCfEV8VnwtfCAoUkVRVUlSRUQpCi0gICAgICAgICstKy0rLSstKy0rLSstKy0rCi0gICBJOiAgIHxNfCBQSUNUVVJFIElEICB8IChSRUNPTU1FTkRFRCkKLSAgICAgICAgKy0rLSstKy0rLSstKy0rLSsKLSAgIE06ICAgfCBFWFRFTkRFRCBQSUQgIHwgKFJFQ09NTUVOREVEKQotICAgICAgICArLSstKy0rLSstKy0rLSstKwotICAgTDogICB8ICBUICB8VXwgIFMgIHxEfCAoQ09ORElUSU9OQUxMWSBSRUNPTU1FTkRFRCkKLSAgICAgICAgKy0rLSstKy0rLSstKy0rLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1cCi0gICBQLEY6IHwgUF9ESUZGICAgIHxYfE58IChDT05ESVRJT05BTExZIFJFQ09NTUVOREVEKSAgLgotICAgICAgICArLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gLSB1cCB0byAzIHRpbWVzCi0gICBYOiAgIHxFWFRFTkRFRCBQX0RJRkZ8IChPUFRJT05BTCkgICAgICAgICAgICAgICAgICAgLgotICAgICAgICArLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS8KLSAgIFY6ICAgfCBTUyAgICAgICAgICAgIHwKLSAgICAgICAgfCAuLiAgICAgICAgICAgIHwKLSAgICAgICAgKy0rLSstKy0rLSstKy0rLSsKLQotICAgU2NhbGFiaWxpdHkgc3RydWN0dXJlIChTUykKLSAgICAgKGZyb20gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2V4dGVybmFsL3dlYnJ0Yy8rL0hFQUQvd2VicnRjL21vZHVsZXMvcnRwX3J0Y3Avc291cmNlL3J0cF9mb3JtYXRfdnA5LmNjCi0gICAgIHNpbmNlIGxhdGVzdCBkcmFmdCBpcyBub3QgdXAgdG8gZGF0ZSB3aXRoIGNocm9taXVtKQotCi0gICAgICAgICstKy0rLSstKy0rLSstKy0rCi0gICBWOiAgIHwgTl9TIHxZfEd8LXwtfC18Ci0gICAgICAgICstKy0rLSstKy0rLSstKy0rICAgICAgICAgICAgICAtfAotICAgWTogICB8ICAgICBXSURUSCAgICAgfCAoT1BUSU9OQUwpICAgIC4KLSAgICAgICAgKyAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAuCi0gICAgICAgIHwgICAgICAgICAgICAgICB8IChPUFRJT05BTCkgICAgLgotICAgICAgICArLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgIC4gTl9TICsgMSB0aW1lcwotICAgICAgICB8ICAgICBIRUlHSFQgICAgfCAoT1BUSU9OQUwpICAgIC4KLSAgICAgICAgKyAgICAgICAgICAgICAgICsgICAgICAgICAgICAgICAuCi0gICAgICAgIHwgICAgICAgICAgICAgICB8IChPUFRJT05BTCkgICAgLgotICAgICAgICArLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgLXwKLSAgIEc6ICAgfCAgICAgIE5fRyAgICAgIHwgKE9QVElPTkFMKQotICAgICAgICArLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC18Ci0gICBOX0c6IHwgIFQgIHxVfCBSIHwtfC18IChPUFRJT05BTCkgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgKy0rLSstKy0rLSstKy0rLSsgICAgICAgICAgICAgIC18ICAgICAgICAgICAgLiBOX0cgdGltZXMKLSAgICAgICAgfCAgICBQX0RJRkYgICAgIHwgKE9QVElPTkFMKSAgICAuIFIgdGltZXMgICAgLgotICAgICAgICArLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgLXwgICAgICAgICAgIC18Ci0KLSoqLwotCi0vKiBXaGVuIGdyb3dpbmcgdGhlIHZwOSBoZWFkZXIga2VlcCBtYXggcGF5bG9hZCBsZW4gY2FsY3VsYXRpb24gaW4gc3luYyAqLwotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfcnRwX3ZwOV9jcmVhdGVfaGVhZGVyX2J1ZmZlciAoR3N0UnRwVlA5UGF5ICogc2VsZiwKLSAgICBnYm9vbGVhbiBzdGFydCwgZ2Jvb2xlYW4gbWFyaywgR3N0QnVmZmVyICogaW4pCi17Ci0gIEdzdEJ1ZmZlciAqb3V0OwotICBndWludDggKnA7Ci0gIEdzdFJUUEJ1ZmZlciBydHBidWZmZXIgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBndWludCBvZmYgPSAxOwotICBndWludCBoZHJsZW4gPSBnc3RfcnRwX3ZwOV9jYWxjX2hlYWRlcl9sZW4gKHNlbGYsIHN0YXJ0KTsKLQotICBvdXQgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKGhkcmxlbiwgMCwgMCk7Ci0gIGdzdF9ydHBfYnVmZmVyX21hcCAob3V0LCBHU1RfTUFQX1JFQURXUklURSwgJnJ0cGJ1ZmZlcik7Ci0gIHAgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cGJ1ZmZlcik7Ci0gIHBbMF0gPSAweDA7Ci0KLSAgaWYgKHNlbGYtPnBpY3R1cmVfaWRfbW9kZSAhPSBWUDlfUEFZX05PX1BJQ1RVUkVfSUQpIHsKLSAgICBwWzBdIHw9IDB4ODA7Ci0gICAgaWYgKHNlbGYtPnBpY3R1cmVfaWRfbW9kZSA9PSBWUDlfUEFZX1BJQ1RVUkVfSURfN0JJVFMpIHsKLSAgICAgIC8qIE09MCAqLwotICAgICAgcFtvZmYrK10gPSBzZWxmLT5waWN0dXJlX2lkICYgMHg3RjsKLSAgICB9IGVsc2UgewotICAgICAgLyogTT0xICovCi0gICAgICBwW29mZisrXSA9IDB4ODAgfCAoKHNlbGYtPnBpY3R1cmVfaWQgJiAweDdGRkYpID4+IDgpOwotICAgICAgcFtvZmYrK10gPSBzZWxmLT5waWN0dXJlX2lkICYgMHhGRjsKLSAgICB9Ci0gIH0KLQotICBpZiAoIXNlbGYtPmlzX2tleWZyYW1lKQotICAgIHBbMF0gfD0gMHg0MDsKLSAgaWYgKHN0YXJ0KQotICAgIHBbMF0gfD0gMHgwODsKLSAgaWYgKG1hcmspCi0gICAgcFswXSB8PSAweDA0OwotCi0gIGlmIChzZWxmLT5pc19rZXlmcmFtZSAmJiBzdGFydCkgewotICAgIHBbMF0gfD0gMHgwMjsKLSAgICAvKiBzY2FsYWJpbGl0eSBzdHJ1Y3R1cmUsIGhhcmQgY29kZWQgZm9yIG5vdyB0byBiZSBzaW1pbGFyIHRvIGNocm9taXVtIGZvcgotICAgICAqIHF1aWNrIGFuZCBkaXJ0eSBpbnRlcm9wICovCi0gICAgcFtvZmYrK10gPSAweDE4OyAgICAgICAgICAgIC8qIE5fUz0wIFk9MSBHPTEgKi8KLSAgICBwW29mZisrXSA9IHNlbGYtPndpZHRoID4+IDg7Ci0gICAgcFtvZmYrK10gPSBzZWxmLT53aWR0aCAmIDB4RkY7Ci0gICAgcFtvZmYrK10gPSBzZWxmLT5oZWlnaHQgPj4gODsKLSAgICBwW29mZisrXSA9IHNlbGYtPmhlaWdodCAmIDB4RkY7Ci0gICAgcFtvZmYrK10gPSAweDAxOyAgICAgICAgICAgIC8qIE5fRz0xICovCi0gICAgcFtvZmYrK10gPSAweDA0OyAgICAgICAgICAgIC8qIFQ9MCwgVT0wLCBSPTEgKi8KLSAgICBwW29mZisrXSA9IDB4MDE7ICAgICAgICAgICAgLyogUF9ESUZGPTEgKi8KLSAgfQotCi0gIGdfYXNzZXJ0X2NtcGludCAob2ZmLCA9PSwgaGRybGVuKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwYnVmZmVyLCBtYXJrKTsKLQotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cGJ1ZmZlcik7Ci0KLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0KSA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGluKTsKLSAgR1NUX0JVRkZFUl9QVFMgKG91dCkgPSBHU1RfQlVGRkVSX1BUUyAoaW4pOwotCi0gIHJldHVybiBvdXQ7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X3J0cF92cDlfcGF5bG9hZF9uZXh0IChHc3RSdHBWUDlQYXkgKiBzZWxmLCBHc3RCdWZmZXJMaXN0ICogbGlzdCwKLSAgICBndWludCBvZmZzZXQsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3NpemUgYnVmZmVyX3NpemUsIGdzaXplIG1heF9wYXlsb2FkX2xlbikKLXsKLSAgR3N0QnVmZmVyICpoZWFkZXI7Ci0gIEdzdEJ1ZmZlciAqc3ViOwotICBHc3RCdWZmZXIgKm91dDsKLSAgZ2Jvb2xlYW4gbWFyazsKLSAgZ3NpemUgcmVtYWluaW5nOwotICBnc2l6ZSBhdmFpbGFibGU7Ci0KLSAgcmVtYWluaW5nID0gYnVmZmVyX3NpemUgLSBvZmZzZXQ7Ci0gIGF2YWlsYWJsZSA9IG1heF9wYXlsb2FkX2xlbjsKLSAgaWYgKGF2YWlsYWJsZSA+IHJlbWFpbmluZykKLSAgICBhdmFpbGFibGUgPSByZW1haW5pbmc7Ci0KLSAgbWFyayA9IChyZW1haW5pbmcgPT0gYXZhaWxhYmxlKTsKLSAgaGVhZGVyID0gZ3N0X3J0cF92cDlfY3JlYXRlX2hlYWRlcl9idWZmZXIgKHNlbGYsIG9mZnNldCA9PSAwLCBtYXJrLCBidWZmZXIpOwotICBzdWIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChidWZmZXIsIEdTVF9CVUZGRVJfQ09QWV9BTEwsIG9mZnNldCwgYXZhaWxhYmxlKTsKLQotICBnc3RfcnRwX2NvcHlfbWV0YSAoR1NUX0VMRU1FTlRfQ0FTVCAoc2VsZiksIGhlYWRlciwgYnVmZmVyLAotICAgICAgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLSAgb3V0ID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGhlYWRlciwgc3ViKTsKLQotICBnc3RfYnVmZmVyX2xpc3RfaW5zZXJ0IChsaXN0LCAtMSwgb3V0KTsKLQotICByZXR1cm4gYXZhaWxhYmxlOwotfQotCi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3ZwOV9wYXlfaGFuZGxlX2J1ZmZlciAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cFZQOVBheSAqc2VsZiA9IEdTVF9SVFBfVlA5X1BBWSAocGF5bG9hZCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotICBnc2l6ZSBzaXplLCBtYXhfcGF5bGVuOwotICBndWludCBvZmZzZXQsIG10dSwgdnA5X2hkcl9sZW47Ci0KLSAgc2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFnc3RfcnRwX3ZwOV9wYXlfcGFyc2VfZnJhbWUgKHNlbGYsIGJ1ZmZlciwgc2l6ZSkpKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIFNUUkVBTSwgRU5DT0RFLCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIHBhcnNlIFZQOSBmcmFtZSIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBtdHUgPSBHU1RfUlRQX0JBU0VfUEFZTE9BRF9NVFUgKHBheWxvYWQpOwotICB2cDlfaGRyX2xlbiA9IGdzdF9ydHBfdnA5X2NhbGNfaGVhZGVyX2xlbiAoc2VsZiwgVFJVRSk7Ci0gIG1heF9wYXlsZW4gPSBnc3RfcnRwX2J1ZmZlcl9jYWxjX3BheWxvYWRfbGVuIChtdHUgLSB2cDlfaGRyX2xlbiwgMCwgMCk7Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKChzaXplIC8gbWF4X3BheWxlbikgKyAxKTsKLQotICBvZmZzZXQgPSAwOwotICB3aGlsZSAob2Zmc2V0IDwgc2l6ZSkgewotICAgIG9mZnNldCArPQotICAgICAgICBnc3RfcnRwX3ZwOV9wYXlsb2FkX25leHQgKHNlbGYsIGxpc3QsIG9mZnNldCwgYnVmZmVyLCBzaXplLCBtYXhfcGF5bGVuKTsKLSAgfQotCi0gIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2hfbGlzdCAocGF5bG9hZCwgbGlzdCk7Ci0KLSAgLyogSW5jcmVtZW5lbnQgYW5kIHdyYXAgdGhlIHBpY3R1cmUgaWQgaWYgaXQgb3ZlcmZsb3dzICovCi0gIGlmICgoc2VsZi0+cGljdHVyZV9pZF9tb2RlID09IFZQOV9QQVlfUElDVFVSRV9JRF83QklUUyAmJgotICAgICAgICAgICsrc2VsZi0+cGljdHVyZV9pZCA+PSAweDgwKSB8fAotICAgICAgKHNlbGYtPnBpY3R1cmVfaWRfbW9kZSA9PSBWUDlfUEFZX1BJQ1RVUkVfSURfMTVCSVRTICYmCi0gICAgICAgICAgKytzZWxmLT5waWN0dXJlX2lkID49IDB4ODAwMCkpCi0gICAgc2VsZi0+cGljdHVyZV9pZCA9IDA7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdnA5X3BheV9zaW5rX2V2ZW50IChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJ0cFZQOVBheSAqc2VsZiA9IEdTVF9SVFBfVlA5X1BBWSAocGF5bG9hZCk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKSB7Ci0gICAgaWYgKHNlbGYtPnBpY3R1cmVfaWRfbW9kZSA9PSBWUDlfUEFZX1BJQ1RVUkVfSURfN0JJVFMpCi0gICAgICBzZWxmLT5waWN0dXJlX2lkID0gZ19yYW5kb21faW50X3JhbmdlICgwLCBHX01BWFVJTlQ4KSAmIDB4N0Y7Ci0gICAgZWxzZSBpZiAoc2VsZi0+cGljdHVyZV9pZF9tb2RlID09IFZQOV9QQVlfUElDVFVSRV9JRF8xNUJJVFMpCi0gICAgICBzZWxmLT5waWN0dXJlX2lkID0gZ19yYW5kb21faW50X3JhbmdlICgwLCBHX01BWFVJTlQxNikgJiAweDdGRkY7Ci0gIH0KLQotICByZXR1cm4gR1NUX1JUUF9CQVNFX1BBWUxPQURfQ0xBU1MgKGdzdF9ydHBfdnA5X3BheV9wYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50Ci0gICAgICAocGF5bG9hZCwgZXZlbnQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdnA5X3BheV9zZXRfY2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0Q2FwcyAqc3JjX2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY2hhciAqZW5jb2RpbmdfbmFtZTsKLQotICBzcmNfY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAoR1NUX1JUUF9CQVNFX1BBWUxPQURfU1JDUEFEIChwYXlsb2FkKSk7Ci0gIGlmIChzcmNfY2FwcykgewotICAgIHNyY19jYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoc3JjX2NhcHMpOwotICAgIHNyY19jYXBzID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKHNyY19jYXBzKTsKLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoc3JjX2NhcHMsIDApOwotICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZyAocywgImVuY29kaW5nLW5hbWUiLCAiVlA5Iik7Ci0gICAgZW5jb2RpbmdfbmFtZSA9IGdfc3RyZHVwIChnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJlbmNvZGluZy1uYW1lIikpOwotICAgIGdzdF9jYXBzX3VucmVmIChzcmNfY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgZW5jb2RpbmdfbmFtZSA9IGdfc3RyZHVwICgiVlA5LURSQUZULUlFVEYtMDEiKTsKLSAgfQotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAidmlkZW8iLCBUUlVFLAotICAgICAgZW5jb2RpbmdfbmFtZSwgOTAwMDApOwotICBnX2ZyZWUgKGVuY29kaW5nX25hbWUpOwotICByZXR1cm4gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsIE5VTEwpOwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF92cDlfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwdnA5cGF5IiwKLSAgICAgIEdTVF9SQU5LX01BUkdJTkFMLCBHU1RfVFlQRV9SVFBfVlA5X1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHZwOXBheS5oIGIvZ3N0L3J0cC9nc3RydHB2cDlwYXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMyYWE4ZS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHZwOXBheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIGdzdHJ0cHZwOXBheS5oIC0gSGVhZGVyIGZvciBHc3RSdHBWUDlQYXkKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTam9lcmQgU2ltb25zIDxzam9lcmRAbHVvbi5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1ZQOV9QQVlfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9WUDlfUEFZX0hfXwotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1ZQOV9QQVkgXAotICAoZ3N0X3J0cF92cDlfcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfVlA5X1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHU1RfVFlQRV9SVFBfVlA5X1BBWSwgR3N0UnRwVlA5UGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9WUDlfUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHU1RfVFlQRV9SVFBfVlA5X1BBWSwgR3N0UnRwVlA5UGF5Q2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1ZQOV9QQVkob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR1NUX1RZUEVfUlRQX1ZQOV9QQVkpKQotI2RlZmluZSBHU1RfSVNfUlRQX1ZQOV9QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIEdTVF9UWVBFX1JUUF9WUDlfUEFZKSkKLSNkZWZpbmUgR1NUX1JUUF9WUDlfUEFZX0dFVF9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9SVFBfVlA5X1BBWSwgR3N0UnRwVlA5UGF5Q2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVlA5UGF5IEdzdFJ0cFZQOVBheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBWUDlQYXlDbGFzcyBHc3RSdHBWUDlQYXlDbGFzczsKLXR5cGVkZWYgZW51bSBfVlA5UGljdHVyZUlETW9kZSBWUDlQaWN0dXJlSURNb2RlOwotCi1lbnVtIF9WUDlQaWN0dXJlSURNb2RlIHsKLSAgVlA5X1BBWV9OT19QSUNUVVJFX0lELAotICBWUDlfUEFZX1BJQ1RVUkVfSURfN0JJVFMsCi0gIFZQOV9QQVlfUElDVFVSRV9JRF8xNUJJVFMsCi19OwotCi1zdHJ1Y3QgX0dzdFJ0cFZQOVBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VQYXlsb2FkQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotc3RydWN0IF9Hc3RSdHBWUDlQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGFyZW50OwotICBnYm9vbGVhbiBpc19rZXlmcmFtZTsKLSAgZ3VpbnQgd2lkdGg7Ci0gIGd1aW50IGhlaWdodDsKLSAgVlA5UGljdHVyZUlETW9kZSBwaWN0dXJlX2lkX21vZGU7Ci0gIGd1aW50MTYgcGljdHVyZV9pZDsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfdnA5X3BheV9nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF9ydHBfdnA5X3BheV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qICNpZm5kZWYgX19HU1RfUlRQX1ZQOV9QQVlfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jIGIvZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg4NDhmYi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwL2dzdHJ0cHZyYXdkZXBheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjY3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJnc3RydHB2cmF3ZGVwYXkuaCIKLSNpbmNsdWRlICJnc3RydHB1dGlscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChydHB2cmF3ZGVwYXlfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKHJ0cHZyYXdkZXBheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdnJhd19kZXBheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtcmF3IikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92cmF3X2RlcGF5X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJ2aWRlb1wiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgOTAwMDAsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSBcIlJBV1wiLCAiCi0gICAgICAgICJzYW1wbGluZyA9IChzdHJpbmcpIHsgXCJSR0JcIiwgXCJSR0JBXCIsIFwiQkdSXCIsIFwiQkdSQVwiLCAiCi0gICAgICAgICJcIllDYkNyLTQ6NDo0XCIsIFwiWUNiQ3ItNDoyOjJcIiwgXCJZQ2JDci00OjI6MFwiLCAiCi0gICAgICAgICJcIllDYkNyLTQ6MToxXCIgfSwiCi0gICAgICAgIC8qIHdlIGNhbm5vdCBleHByZXNzIHRoZXNlIGFzIHN0cmluZ3MgCi0gICAgICAgICAqICJ3aWR0aCA9IChzdHJpbmcpIFsxIDMyNzY3XSwiCi0gICAgICAgICAqICJoZWlnaHQgPSAoc3RyaW5nKSBbMSAzMjc2N10sIgotICAgICAgICAgKi8KLSAgICAgICAgImRlcHRoID0gKHN0cmluZykgeyBcIjhcIiwgXCIxMFwiLCBcIjEyXCIsIFwiMTZcIiB9IikKLSAgICApOwotCi0jZGVmaW5lIGdzdF9ydHBfdnJhd19kZXBheV9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RSdHBWUmF3RGVwYXksIGdzdF9ydHBfdnJhd19kZXBheSwKLSAgICBHU1RfVFlQRV9SVFBfQkFTRV9ERVBBWUxPQUQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF92cmF3X2RlcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VEZXBheWxvYWQgKiBkZXBheWxvYWQsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X3J0cF92cmF3X2RlcGF5X3Byb2Nlc3NfcGFja2V0IChHc3RSVFBCYXNlRGVwYXlsb2FkICoKLSAgICBkZXBheSwgR3N0UlRQQnVmZmVyICogcnRwKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfdnJhd19kZXBheV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF92cmF3X2RlcGF5X2hhbmRsZV9ldmVudCAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGZpbHRlciwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnJhd19kZXBheV9jbGFzc19pbml0IChHc3RSdHBWUmF3RGVwYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyAqZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzczsKLQotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cnRwYmFzZWRlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlRGVwYXlsb2FkQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gZ3N0X3J0cF92cmF3X2RlcGF5X2NoYW5nZV9zdGF0ZTsKLQotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5zZXRfY2FwcyA9IGdzdF9ydHBfdnJhd19kZXBheV9zZXRjYXBzOwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5wcm9jZXNzX3J0cF9wYWNrZXQgPQotICAgICAgZ3N0X3J0cF92cmF3X2RlcGF5X3Byb2Nlc3NfcGFja2V0OwotICBnc3RydHBiYXNlZGVwYXlsb2FkX2NsYXNzLT5oYW5kbGVfZXZlbnQgPSBnc3RfcnRwX3ZyYXdfZGVwYXlfaGFuZGxlX2V2ZW50OwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdnJhd19kZXBheV9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX3ZyYXdfZGVwYXlfc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFAgUmF3IFZpZGVvIGRlcGF5bG9hZGVyIiwgIkNvZGVjL0RlcGF5bG9hZGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJFeHRyYWN0cyByYXcgdmlkZW8gZnJvbSBSVFAgcGFja2V0cyAoUkZDIDQxNzUpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHB2cmF3ZGVwYXlfZGVidWcsICJydHB2cmF3ZGVwYXkiLCAwLAotICAgICAgInJhdyB2aWRlbyBSVFAgRGVwYXlsb2FkZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnJhd19kZXBheV9pbml0IChHc3RSdHBWUmF3RGVwYXkgKiBydHB2cmF3ZGVwYXkpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZyYXdfZGVwYXlfcmVzZXQgKEdzdFJ0cFZSYXdEZXBheSAqIHJ0cHZyYXdkZXBheSkKLXsKLSAgaWYgKHJ0cHZyYXdkZXBheS0+b3V0YnVmKSB7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmcnRwdnJhd2RlcGF5LT5mcmFtZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAocnRwdnJhd2RlcGF5LT5vdXRidWYpOwotICAgIHJ0cHZyYXdkZXBheS0+b3V0YnVmID0gTlVMTDsKLSAgfQotICBydHB2cmF3ZGVwYXktPnRpbWVzdGFtcCA9IC0xOwotICBpZiAocnRwdnJhd2RlcGF5LT5wb29sKSB7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHJ0cHZyYXdkZXBheS0+cG9vbCwgRkFMU0UpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJ0cHZyYXdkZXBheS0+cG9vbCk7Ci0gICAgcnRwdnJhd2RlcGF5LT5wb29sID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF92cmF3X2RlcGF5X25lZ290aWF0ZV9wb29sIChHc3RSdHBWUmF3RGVwYXkgKiBkZXBheSwgR3N0Q2FwcyAqIGNhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogaW5mbykKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHc3RCdWZmZXJQb29sICpwb29sID0gTlVMTDsKLSAgZ3VpbnQgc2l6ZSwgbWluLCBtYXg7Ci0gIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotCi0gIC8qIGZpbmQgYSBwb29sIGZvciB0aGUgbmVnb3RpYXRlZCBjYXBzIG5vdyAqLwotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYWxsb2NhdGlvbiAoY2FwcywgVFJVRSk7Ci0KLSAgaWYgKCFnc3RfcGFkX3BlZXJfcXVlcnkgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheSksIHF1ZXJ5KSkgewotICAgIC8qIG5vdCBhIHByb2JsZW0sIHdlIHVzZSB0aGUgZGVmYXVsdHMgb2YgcXVlcnkgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheSwgImNvdWxkIG5vdCBnZXQgZG93bnN0cmVhbSBBTExPQ0FUSU9OIGhpbnRzIik7Ci0gIH0KLQotICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KSA+IDApIHsKLSAgICAvKiB3ZSBnb3QgY29uZmlndXJhdGlvbiBmcm9tIG91ciBwZWVyLCBwYXJzZSB0aGVtICovCi0gICAgZ3N0X3F1ZXJ5X3BhcnNlX250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCAmcG9vbCwgJnNpemUsICZtaW4sICZtYXgpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlcGF5LCAiZGlkbid0IGdldCBkb3duc3RyZWFtIHBvb2wgaGludHMiKTsKLSAgICBzaXplID0gaW5mby0+c2l6ZTsKLSAgICBtaW4gPSBtYXggPSAwOwotICB9Ci0KLSAgaWYgKHBvb2wgPT0gTlVMTCkgewotICAgIC8qIHdlIGRpZCBub3QgZ2V0IGEgcG9vbCwgbWFrZSBvbmUgb3Vyc2VsdmVzIHRoZW4gKi8KLSAgICBwb29sID0gZ3N0X3ZpZGVvX2J1ZmZlcl9wb29sX25ldyAoKTsKLSAgfQotCi0gIGlmIChkZXBheS0+cG9vbCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChkZXBheS0+cG9vbCk7Ci0gIGRlcGF5LT5wb29sID0gcG9vbDsKLQotICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBjYXBzLCBzaXplLCBtaW4sIG1heCk7Ci0gIGlmIChnc3RfcXVlcnlfZmluZF9hbGxvY2F0aW9uX21ldGEgKHF1ZXJ5LCBHU1RfVklERU9fTUVUQV9BUElfVFlQRSwgTlVMTCkpIHsKLSAgICAvKiBqdXN0IHNldCB0aGUgbWV0YWRhdGEsIGlmIHRoZSBwb29sIGNhbiBzdXBwb3J0IGl0IHdlIHdpbGwgdHJhbnNwYXJlbnRseSB1c2UKLSAgICAgKiBpdCB0aHJvdWdoIHRoZSB2aWRlbyBpbmZvIEFQSS4gV2UgY291bGQgYWxzbyBzZWUgaWYgdGhlIHBvb2wgc3VwcG9ydCB0aGlzCi0gICAgICogbWV0YWRhdGEgYW5kIG9ubHkgYWN0aXZhdGUgaXQgdGhlbi4gKi8KLSAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2FkZF9vcHRpb24gKGNvbmZpZywKLSAgICAgICAgR1NUX0JVRkZFUl9QT09MX09QVElPTl9WSURFT19NRVRBKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChwb29sLCBjb25maWcpOwotICAvKiBhbmQgYWN0aXZhdGUgKi8KLSAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpOwotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3ZyYXdfZGVwYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGRlcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBHc3RSdHBWUmF3RGVwYXkgKnJ0cHZyYXdkZXBheTsKLSAgZ2ludCBjbG9ja19yYXRlOwotICBjb25zdCBnY2hhciAqc3RyOwotICBnaW50IGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHBncm91cCwgeGluYywgeWluYzsKLSAgR3N0Q2FwcyAqc3JjY2FwczsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBydHB2cmF3ZGVwYXkgPSBHU1RfUlRQX1ZSQVdfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgeGluYyA9IHlpbmMgPSAxOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJmNsb2NrX3JhdGUpKQotICAgIGNsb2NrX3JhdGUgPSA5MDAwMDsgICAgICAgICAvKiBkZWZhdWx0ICovCi0gIGRlcGF5bG9hZC0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0KLSAgaWYgKCEoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJ3aWR0aCIpKSkKLSAgICBnb3RvIG5vX3dpZHRoOwotICB3aWR0aCA9IGF0b2kgKHN0cik7Ci0KLSAgaWYgKCEoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJoZWlnaHQiKSkpCi0gICAgZ290byBub19oZWlnaHQ7Ci0gIGhlaWdodCA9IGF0b2kgKHN0cik7Ci0KLSAgaWYgKCEoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJkZXB0aCIpKSkKLSAgICBnb3RvIG5vX2RlcHRoOwotICBkZXB0aCA9IGF0b2kgKHN0cik7Ci0KLSAgLyogb3B0aW9uYWwgaW50ZXJsYWNlIHZhbHVlIGJ1dCB3ZSBkb24ndCBoYW5kbGUgaW50ZXJsYWNlZAotICAgKiBmb3JtYXRzIHlldCAqLwotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJpbnRlcmxhY2UiKSkKLSAgICBnb3RvIGludGVybGFjZWQ7Ci0KLSAgaWYgKCEoc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJzYW1wbGluZyIpKSkKLSAgICBnb3RvIG5vX3NhbXBsaW5nOwotCi0gIGlmICghc3RyY21wIChzdHIsICJSR0IiKSkgewotICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfUkdCOwotICAgIHBncm91cCA9IDM7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoc3RyLCAiUkdCQSIpKSB7Ci0gICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOwotICAgIHBncm91cCA9IDQ7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoc3RyLCAiQkdSIikpIHsKLSAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0JHUjsKLSAgICBwZ3JvdXAgPSAzOwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKHN0ciwgIkJHUkEiKSkgewotICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfQkdSQTsKLSAgICBwZ3JvdXAgPSA0OwotICB9IGVsc2UgaWYgKCFzdHJjbXAgKHN0ciwgIllDYkNyLTQ6NDo0IikpIHsKLSAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0FZVVY7Ci0gICAgcGdyb3VwID0gMzsKLSAgfSBlbHNlIGlmICghc3RyY21wIChzdHIsICJZQ2JDci00OjI6MiIpKSB7Ci0gICAgaWYgKGRlcHRoID09IDgpIHsKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfVVlWWTsKLSAgICAgIHBncm91cCA9IDQ7Ci0gICAgfSBlbHNlIGlmIChkZXB0aCA9PSAxMCkgewotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9VWVZQOwotICAgICAgcGdyb3VwID0gNTsKLSAgICB9IGVsc2UKLSAgICAgIGdvdG8gdW5rbm93bl9mb3JtYXQ7Ci0gICAgeGluYyA9IDI7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoc3RyLCAiWUNiQ3ItNDoyOjAiKSkgewotICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfSTQyMDsKLSAgICBwZ3JvdXAgPSA2OwotICAgIHhpbmMgPSB5aW5jID0gMjsKLSAgfSBlbHNlIGlmICghc3RyY21wIChzdHIsICJZQ2JDci00OjE6MSIpKSB7Ci0gICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOwotICAgIHBncm91cCA9IDY7Ci0gICAgeGluYyA9IDQ7Ci0gIH0gZWxzZSB7Ci0gICAgZ290byB1bmtub3duX2Zvcm1hdDsKLSAgfQotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZydHB2cmF3ZGVwYXktPnZpbmZvKTsKLSAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCAoJnJ0cHZyYXdkZXBheS0+dmluZm8sIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gIEdTVF9WSURFT19JTkZPX0ZQU19OICgmcnRwdnJhd2RlcGF5LT52aW5mbykgPSAwOwotICBHU1RfVklERU9fSU5GT19GUFNfRCAoJnJ0cHZyYXdkZXBheS0+dmluZm8pID0gMTsKLQotICBydHB2cmF3ZGVwYXktPnBncm91cCA9IHBncm91cDsKLSAgcnRwdnJhd2RlcGF5LT54aW5jID0geGluYzsKLSAgcnRwdnJhd2RlcGF5LT55aW5jID0geWluYzsKLQotICBzcmNjYXBzID0gZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcyAoJnJ0cHZyYXdkZXBheS0+dmluZm8pOwotICByZXMgPSBnc3RfcGFkX3NldF9jYXBzIChHU1RfUlRQX0JBU0VfREVQQVlMT0FEX1NSQ1BBRCAoZGVwYXlsb2FkKSwgc3JjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJ3aWR0aCAlZCwgaGVpZ2h0ICVkLCBmb3JtYXQgJWQiLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgZm9ybWF0KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVwYXlsb2FkLCAieGluYyAlZCwgeWluYyAlZCwgcGdyb3VwICVkIiwKLSAgICAgIHhpbmMsIHlpbmMsIHBncm91cCk7Ci0KLSAgLyogbmVnb3RpYXRlIGEgYnVmZmVycG9vbCAqLwotICBpZiAoKHJldCA9IGdzdF9ydHBfdnJhd19kZXBheV9uZWdvdGlhdGVfcG9vbCAocnRwdnJhd2RlcGF5LCBzcmNjYXBzLAotICAgICAgICAgICAgICAmcnRwdnJhd2RlcGF5LT52aW5mbykpICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gbm9fYnVmZmVycG9vbDsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fd2lkdGg6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkZXBheWxvYWQsICJubyB3aWR0aCBzcGVjaWZpZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2hlaWdodDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlcGF5bG9hZCwgIm5vIGhlaWdodCBzcGVjaWZpZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2RlcHRoOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVwYXlsb2FkLCAibm8gZGVwdGggc3BlY2lmaWVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnRlcmxhY2VkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZGVwYXlsb2FkLCAiaW50ZXJsYWNlZCBmb3JtYXRzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19zYW1wbGluZzoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlcGF5bG9hZCwgIm5vIHNhbXBsaW5nIHNwZWNpZmllZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5rbm93bl9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChkZXBheWxvYWQsICJ1bmtub3duIHNhbXBsaW5nIGZvcm1hdCAnJXMnIiwgc3RyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2J1ZmZlcnBvb2w6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZXBheWxvYWQsICJubyBidWZmZXJwb29sIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3J0cF92cmF3X2RlcGF5X3Byb2Nlc3NfcGFja2V0IChHc3RSVFBCYXNlRGVwYXlsb2FkICogZGVwYXlsb2FkLAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cCkKLXsKLSAgR3N0UnRwVlJhd0RlcGF5ICpydHB2cmF3ZGVwYXk7Ci0gIGd1aW50OCAqcGF5bG9hZCwgKnAwLCAqeXAsICp1cCwgKnZwLCAqaGVhZGVyczsKLSAgZ3VpbnQzMiB0aW1lc3RhbXA7Ci0gIGd1aW50IGNvbnQsIHlzdHJpZGUsIHV2c3RyaWRlLCBwZ3JvdXAsIHBheWxvYWRfbGVuOwotICBnaW50IHdpZHRoLCBoZWlnaHQsIHhpbmMsIHlpbmM7Ci0gIEdzdFZpZGVvRnJhbWUgKmZyYW1lOwotICBnYm9vbGVhbiBtYXJrZXI7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLQotICBydHB2cmF3ZGVwYXkgPSBHU1RfUlRQX1ZSQVdfREVQQVkgKGRlcGF5bG9hZCk7Ci0KLSAgdGltZXN0YW1wID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwKTsKLQotICBpZiAodGltZXN0YW1wICE9IHJ0cHZyYXdkZXBheS0+dGltZXN0YW1wIHx8IHJ0cHZyYXdkZXBheS0+b3V0YnVmID09IE5VTEwpIHsKLSAgICBHc3RCdWZmZXIgKm5ld19idWZmZXI7Ci0gICAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZGVwYXlsb2FkLCAibmV3IGZyYW1lIHdpdGggdGltZXN0YW1wICV1IiwgdGltZXN0YW1wKTsKLSAgICAvKiBuZXcgdGltZXN0YW1wLCBmbHVzaCBvbGQgYnVmZmVyIGFuZCBjcmVhdGUgbmV3IG91dHB1dCBidWZmZXIgKi8KLSAgICBpZiAocnRwdnJhd2RlcGF5LT5vdXRidWYpIHsKLSAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJnJ0cHZyYXdkZXBheS0+ZnJhbWUpOwotICAgICAgZ3N0X3J0cF9iYXNlX2RlcGF5bG9hZF9wdXNoIChkZXBheWxvYWQsIHJ0cHZyYXdkZXBheS0+b3V0YnVmKTsKLSAgICAgIHJ0cHZyYXdkZXBheS0+b3V0YnVmID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAoR1NUX1JUUF9CQVNFX0RFUEFZTE9BRF9TUkNQQUQgKGRlcGF5bG9hZCkpKSB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBjYXBzID0KLSAgICAgICAgICBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9SVFBfQkFTRV9ERVBBWUxPQURfU1JDUEFEIChkZXBheWxvYWQpKTsKLSAgICAgIGdzdF9ydHBfdnJhd19kZXBheV9uZWdvdGlhdGVfcG9vbCAocnRwdnJhd2RlcGF5LCBjYXBzLAotICAgICAgICAgICZydHB2cmF3ZGVwYXktPnZpbmZvKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICB9Ci0KLSAgICByZXQgPQotICAgICAgICBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKHJ0cHZyYXdkZXBheS0+cG9vbCwgJm5ld19idWZmZXIsIE5VTEwpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLQotICAgIC8qIGNsZWFyIHRpbWVzdGFtcCBmcm9tIGFsbG9jLi4uICovCi0gICAgR1NUX0JVRkZFUl9QVFMgKG5ld19idWZmZXIpID0gLTE7Ci0KLSAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZydHB2cmF3ZGVwYXktPmZyYW1lLCAmcnRwdnJhd2RlcGF5LT52aW5mbywKLSAgICAgICAgICAgIG5ld19idWZmZXIsIEdTVF9NQVBfV1JJVEUgfCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSkgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAobmV3X2J1ZmZlcik7Ci0gICAgICBnb3RvIGludmFsaWRfZnJhbWU7Ci0gICAgfQotCi0gICAgcnRwdnJhd2RlcGF5LT5vdXRidWYgPSBuZXdfYnVmZmVyOwotICAgIHJ0cHZyYXdkZXBheS0+dGltZXN0YW1wID0gdGltZXN0YW1wOwotICB9Ci0KLSAgZnJhbWUgPSAmcnRwdnJhd2RlcGF5LT5mcmFtZTsKLQotICBnX2Fzc2VydCAoZnJhbWUtPmJ1ZmZlciAhPSBOVUxMKTsKLQotICAvKiBnZXQgcG9pbnRlciBhbmQgc3RyaWRlcyBvZiB0aGUgcGxhbmVzICovCi0gIHAwID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsKLSAgeXAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMCk7Ci0gIHVwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDEpOwotICB2cCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAyKTsKLQotICB5c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCk7Ci0gIHV2c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMSk7Ci0KLSAgcGdyb3VwID0gcnRwdnJhd2RlcGF5LT5wZ3JvdXA7Ci0gIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKCZydHB2cmF3ZGVwYXktPnZpbmZvKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmcnRwdnJhd2RlcGF5LT52aW5mbyk7Ci0gIHhpbmMgPSBydHB2cmF3ZGVwYXktPnhpbmM7Ci0gIHlpbmMgPSBydHB2cmF3ZGVwYXktPnlpbmM7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkIChydHApOwotICBwYXlsb2FkX2xlbiA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX2xlbiAocnRwKTsKLQotICBpZiAocGF5bG9hZF9sZW4gPCAzKQotICAgIGdvdG8gc2hvcnRfcGFja2V0OwotCi0gIC8qIHNraXAgZXh0ZW5kZWQgc2VxbnVtICovCi0gIHBheWxvYWQgKz0gMjsKLSAgcGF5bG9hZF9sZW4gLT0gMjsKLQotICAvKiByZW1lbWJlciBoZWFkZXIgcG9zaXRpb24gKi8KLSAgaGVhZGVycyA9IHBheWxvYWQ7Ci0KLSAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHZyYXdkZXBheSksIGZyYW1lLT5idWZmZXIsCi0gICAgICBydHAtPmJ1ZmZlciwgZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKEdTVF9NRVRBX1RBR19WSURFT19TVFIpKTsKLQotICAvKiBmaW5kIGRhdGEgc3RhcnQgKi8KLSAgZG8gewotICAgIGlmIChwYXlsb2FkX2xlbiA8IDYpCi0gICAgICBnb3RvIHNob3J0X3BhY2tldDsKLQotICAgIGNvbnQgPSBwYXlsb2FkWzRdICYgMHg4MDsKLQotICAgIHBheWxvYWQgKz0gNjsKLSAgICBwYXlsb2FkX2xlbiAtPSA2OwotICB9IHdoaWxlIChjb250KTsKLQotICB3aGlsZSAoVFJVRSkgewotICAgIGd1aW50IGxlbmd0aCwgbGluZSwgb2ZmcywgcGxlbjsKLSAgICBndWludDggKmRhdGFwOwotCi0gICAgLyogc3RvcCB3aGVuIHdlIHJ1biBvdXQgb2YgZGF0YSAqLwotICAgIGlmIChwYXlsb2FkX2xlbiA9PSAwKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiByZWFkIGxlbmd0aCBhbmQgY29udC4gVGhpcyBzaG91bGQgd29yayBiZWNhdXNlIHdlIGl0ZXJhdGVkIHRoZSBoZWFkZXJzCi0gICAgICogYWJvdmUuICovCi0gICAgbGVuZ3RoID0gKGhlYWRlcnNbMF0gPDwgOCkgfCBoZWFkZXJzWzFdOwotICAgIGxpbmUgPSAoKGhlYWRlcnNbMl0gJiAweDdmKSA8PCA4KSB8IGhlYWRlcnNbM107Ci0gICAgb2ZmcyA9ICgoaGVhZGVyc1s0XSAmIDB4N2YpIDw8IDgpIHwgaGVhZGVyc1s1XTsKLSAgICBjb250ID0gaGVhZGVyc1s0XSAmIDB4ODA7Ci0gICAgaGVhZGVycyArPSA2OwotCi0gICAgLyogbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBwZ3JvdXAgKi8KLSAgICBpZiAobGVuZ3RoICUgcGdyb3VwICE9IDApCi0gICAgICBnb3RvIHdyb25nX2xlbmd0aDsKLQotICAgIGlmIChsZW5ndGggPiBwYXlsb2FkX2xlbikKLSAgICAgIGxlbmd0aCA9IHBheWxvYWRfbGVuOwotCi0gICAgLyogc2FuaXR5IGNoZWNrICovCi0gICAgaWYgKGxpbmUgPiAoaGVpZ2h0IC0geWluYykpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAic2tpcHBpbmcgbGluZSAlZDogb3V0IG9mIHJhbmdlIiwgbGluZSk7Ci0gICAgICBnb3RvIG5leHQ7Ci0gICAgfQotICAgIGlmIChvZmZzID4gKHdpZHRoIC0geGluYykpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAic2tpcHBpbmcgb2Zmc2V0ICVkOiBvdXQgb2YgcmFuZ2UiLCBvZmZzKTsKLSAgICAgIGdvdG8gbmV4dDsKLSAgICB9Ci0KLSAgICAvKiBjYWxjdWxhdGUgdGhlIG1heGltaW0gYW1vdW50IG9mIGJ5dGVzIHdlIGNhbiB1c2UgcGVyIGxpbmUgKi8KLSAgICBpZiAob2ZmcyArICgobGVuZ3RoIC8gcGdyb3VwKSAqIHhpbmMpID4gd2lkdGgpIHsKLSAgICAgIHBsZW4gPSAoKHdpZHRoIC0gb2ZmcykgKiBwZ3JvdXApIC8geGluYzsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAiY2xpcHBpbmcgbGVuZ3RoICVkLCBvZmZzZXQgJWQsIHBsZW4gJWQiLAotICAgICAgICAgIGxlbmd0aCwgb2ZmcywgcGxlbik7Ci0gICAgfSBlbHNlCi0gICAgICBwbGVuID0gbGVuZ3RoOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGRlcGF5bG9hZCwKLSAgICAgICAgIndyaXRpbmcgbGVuZ3RoICV1LyV1LCBsaW5lICV1LCBvZmZzZXQgJXUsIHJlbWFpbmluZyAldSIsIHBsZW4sIGxlbmd0aCwKLSAgICAgICAgbGluZSwgb2ZmcywgcGF5bG9hZF9sZW4pOwotCi0gICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZydHB2cmF3ZGVwYXktPnZpbmZvKSkgewotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUjoKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfVVlWUDoKLSAgICAgICAgLyogc2FtcGxlcyBhcmUgcGFja2VkIGp1c3QgbGlrZSBnc3RyZWFtZXIgcGFja3MgdGhlbSAqLwotICAgICAgICBvZmZzIC89IHhpbmM7Ci0gICAgICAgIGRhdGFwID0gcDAgKyAobGluZSAqIHlzdHJpZGUpICsgKG9mZnMgKiBwZ3JvdXApOwotCi0gICAgICAgIG1lbWNweSAoZGF0YXAsIHBheWxvYWQsIHBsZW4pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgewotICAgICAgICBnaW50IGk7Ci0gICAgICAgIGd1aW50OCAqcDsKLQotICAgICAgICBkYXRhcCA9IHAwICsgKGxpbmUgKiB5c3RyaWRlKSArIChvZmZzICogNCk7Ci0gICAgICAgIHAgPSBwYXlsb2FkOwotCi0gICAgICAgIC8qIHNhbXBsZXMgYXJlIHBhY2tlZCBpbiBvcmRlciBDYi1ZLUNyIGZvciBib3RoIGludGVybGFjZWQgYW5kCi0gICAgICAgICAqIHByb2dyZXNzaXZlIGZyYW1lcyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGxlbjsgaSArPSBwZ3JvdXApIHsKLSAgICAgICAgICAqZGF0YXArKyA9IDA7Ci0gICAgICAgICAgKmRhdGFwKysgPSBwWzFdOwotICAgICAgICAgICpkYXRhcCsrID0gcFswXTsKLSAgICAgICAgICAqZGF0YXArKyA9IHBbMl07Ci0gICAgICAgICAgcCArPSBwZ3JvdXA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICAgIHsKLSAgICAgICAgZ2ludCBpOwotICAgICAgICBndWludCB1dm9mZjsKLSAgICAgICAgZ3VpbnQ4ICp5ZDFwLCAqeWQycCwgKnVkcCwgKnZkcCwgKnA7Ci0KLSAgICAgICAgeWQxcCA9IHlwICsgKGxpbmUgKiB5c3RyaWRlKSArIChvZmZzKTsKLSAgICAgICAgeWQycCA9IHlkMXAgKyB5c3RyaWRlOwotICAgICAgICB1dm9mZiA9IChsaW5lIC8geWluYyAqIHV2c3RyaWRlKSArIChvZmZzIC8geGluYyk7Ci0KLSAgICAgICAgdWRwID0gdXAgKyB1dm9mZjsKLSAgICAgICAgdmRwID0gdnAgKyB1dm9mZjsKLSAgICAgICAgcCA9IHBheWxvYWQ7Ci0KLSAgICAgICAgLyogbGluZSAwLzE6IFkwMC1ZMDEtWTEwLVkxMS1DYjAwLUNyMDAgWTAyLVkwMy1ZMTItWTEzLUNiMDEtQ3IwMSAuLi4gICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbGVuOyBpICs9IHBncm91cCkgewotICAgICAgICAgICp5ZDFwKysgPSBwWzBdOwotICAgICAgICAgICp5ZDFwKysgPSBwWzFdOwotICAgICAgICAgICp5ZDJwKysgPSBwWzJdOwotICAgICAgICAgICp5ZDJwKysgPSBwWzNdOwotICAgICAgICAgICp1ZHArKyA9IHBbNF07Ci0gICAgICAgICAgKnZkcCsrID0gcFs1XTsKLSAgICAgICAgICBwICs9IHBncm91cDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgICAgewotICAgICAgICBnaW50IGk7Ci0gICAgICAgIGd1aW50IHV2b2ZmOwotICAgICAgICBndWludDggKnlkcCwgKnVkcCwgKnZkcCwgKnA7Ci0KLSAgICAgICAgeWRwID0geXAgKyAobGluZSAqIHlzdHJpZGUpICsgKG9mZnMpOwotICAgICAgICB1dm9mZiA9IChsaW5lIC8geWluYyAqIHV2c3RyaWRlKSArIChvZmZzIC8geGluYyk7Ci0KLSAgICAgICAgdWRwID0gdXAgKyB1dm9mZjsKLSAgICAgICAgdmRwID0gdnAgKyB1dm9mZjsKLSAgICAgICAgcCA9IHBheWxvYWQ7Ci0KLSAgICAgICAgLyogU2FtcGxlcyBhcmUgcGFja2VkIGluIG9yZGVyIENiMC1ZMC1ZMS1DcjAtWTItWTMgZm9yIGJvdGggaW50ZXJsYWNlZAotICAgICAgICAgKiBhbmQgcHJvZ3Jlc3NpdmUgc2NhbiBsaW5lcyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGxlbjsgaSArPSBwZ3JvdXApIHsKLSAgICAgICAgICAqdWRwKysgPSBwWzBdOwotICAgICAgICAgICp5ZHArKyA9IHBbMV07Ci0gICAgICAgICAgKnlkcCsrID0gcFsyXTsKLSAgICAgICAgICAqdmRwKysgPSBwWzNdOwotICAgICAgICAgICp5ZHArKyA9IHBbNF07Ci0gICAgICAgICAgKnlkcCsrID0gcFs1XTsKLSAgICAgICAgICBwICs9IHBncm91cDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdvdG8gdW5rbm93bl9zYW1wbGluZzsKLSAgICB9Ci0KLSAgbmV4dDoKLSAgICBpZiAoIWNvbnQpCi0gICAgICBicmVhazsKLQotICAgIHBheWxvYWQgKz0gbGVuZ3RoOwotICAgIHBheWxvYWRfbGVuIC09IGxlbmd0aDsKLSAgfQotCi0gIG1hcmtlciA9IGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKHJ0cCk7Ci0KLSAgaWYgKG1hcmtlcikgewotICAgIEdTVF9MT0dfT0JKRUNUIChkZXBheWxvYWQsICJtYXJrZXIsIGZsdXNoaW5nIGZyYW1lIik7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmcnRwdnJhd2RlcGF5LT5mcmFtZSk7Ci0gICAgb3V0YnVmID0gcnRwdnJhd2RlcGF5LT5vdXRidWY7Ci0gICAgcnRwdnJhd2RlcGF5LT5vdXRidWYgPSBOVUxMOwotICAgIHJ0cHZyYXdkZXBheS0+dGltZXN0YW1wID0gLTE7Ci0gIH0KLSAgcmV0dXJuIG91dGJ1ZjsKLQotICAvKiBFUlJPUlMgKi8KLXVua25vd25fc2FtcGxpbmc6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVwYXlsb2FkLCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKE5VTEwpLCAoInVuaW1wbGVtZW50ZWQgc2FtcGxpbmciKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWFsbG9jX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVwYXlsb2FkLCAiZmFpbGVkIHRvIGFsbG9jIG91dHB1dCBidWZmZXIiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotaW52YWxpZF9mcmFtZToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGRlcGF5bG9hZCwgImNvdWxkIG5vdCBtYXAgdmlkZW8gZnJhbWUiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotd3JvbmdfbGVuZ3RoOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChkZXBheWxvYWQsICJsZW5ndGggbm90IG11bHRpcGxlIG9mIHBncm91cCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1zaG9ydF9wYWNrZXQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGRlcGF5bG9hZCwgInNob3J0IHBhY2tldCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF92cmF3X2RlcGF5X2hhbmRsZV9ldmVudCAoR3N0UlRQQmFzZURlcGF5bG9hZCAqIGZpbHRlciwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RSdHBWUmF3RGVwYXkgKnJ0cHZyYXdkZXBheTsKLQotICBydHB2cmF3ZGVwYXkgPSBHU1RfUlRQX1ZSQVdfREVQQVkgKGZpbHRlcik7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9ydHBfdnJhd19kZXBheV9yZXNldCAocnRwdnJhd2RlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9Ci0gICAgICBHU1RfUlRQX0JBU0VfREVQQVlMT0FEX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5oYW5kbGVfZXZlbnQgKGZpbHRlciwgZXZlbnQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF92cmF3X2RlcGF5X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UnRwVlJhd0RlcGF5ICpydHB2cmF3ZGVwYXk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBydHB2cmF3ZGVwYXkgPSBHU1RfUlRQX1ZSQVdfREVQQVkgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9ydHBfdnJhd19kZXBheV9yZXNldCAocnRwdnJhd2RlcGF5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfcnRwX3ZyYXdfZGVwYXlfcmVzZXQgKHJ0cHZyYXdkZXBheSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF92cmF3X2RlcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwdnJhd2RlcGF5IiwKLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfUlRQX1ZSQVdfREVQQVkpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwdnJhd2RlcGF5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4Y2E3NTUuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHB2cmF3ZGVwYXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9WUkFXX0RFUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfVlJBV19ERVBBWV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYmFzZWRlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1ZSQVdfREVQQVkgXAotICAoZ3N0X3J0cF92cmF3X2RlcGF5X2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfVlJBV19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9WUkFXX0RFUEFZLEdzdFJ0cFZSYXdEZXBheSkpCi0jZGVmaW5lIEdTVF9SVFBfVlJBV19ERVBBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfVlJBV19ERVBBWSxHc3RSdHBWUmF3RGVwYXlDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfVlJBV19ERVBBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9WUkFXX0RFUEFZKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9WUkFXX0RFUEFZX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9WUkFXX0RFUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFZSYXdEZXBheSBHc3RSdHBWUmF3RGVwYXk7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwVlJhd0RlcGF5Q2xhc3MgR3N0UnRwVlJhd0RlcGF5Q2xhc3M7Ci0KLXN0cnVjdCBfR3N0UnRwVlJhd0RlcGF5Ci17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWQgcGF5bG9hZDsKLQotICBHc3RCdWZmZXJQb29sICpwb29sOwotICBHc3RWaWRlb0luZm8gdmluZm87Ci0KLSAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIGd1aW50MzIgdGltZXN0YW1wOwotCi0gIGdpbnQgcGdyb3VwOwotICBnaW50IHhpbmMsIHlpbmM7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFZSYXdEZXBheUNsYXNzCi17Ci0gIEdzdFJUUEJhc2VEZXBheWxvYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfcnRwX3ZyYXdfZGVwYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3ZyYXdfZGVwYXlfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfVlJBV19ERVBBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwdnJhd3BheS5jIGIvZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNjg5MzYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cC9nc3RydHB2cmF3cGF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwdnJhd3BheS5oIgotI2luY2x1ZGUgImdzdHJ0cHV0aWxzLmgiCi0KLWVudW0KLXsKLSAgUFJPUF9DSFVOS1NfUEVSX0ZSQU1FID0gMQotfTsKLQotI2RlZmluZSBERUZBVUxUX0NIVU5LU19QRVJfRlJBTUUgMTAKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwdnJhd3BheV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRwdnJhd3BheV9kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfdnJhd19wYXlfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgUkdCLCBSR0JBLCBCR1IsIEJHUkEsIEFZVVYsIFVZVlksIEk0MjAsIFk0MUIsIFVZVlAgfSwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDEsIDMyNzY3IF0sICIgImhlaWdodCA9IChpbnQpIFsgMSwgMzI3NjcgXTsgIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF92cmF3X3BheV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAgICJtZWRpYSA9IChzdHJpbmcpIFwidmlkZW9cIiwgIgotICAgICAgICAicGF5bG9hZCA9IChpbnQpICIgR1NUX1JUUF9QQVlMT0FEX0RZTkFNSUNfU1RSSU5HICIsICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSA5MDAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiUkFXXCIsIgotICAgICAgICAic2FtcGxpbmcgPSAoc3RyaW5nKSB7IFwiUkdCXCIsIFwiUkdCQVwiLCBcIkJHUlwiLCBcIkJHUkFcIiwgIgotICAgICAgICAiXCJZQ2JDci00OjQ6NFwiLCBcIllDYkNyLTQ6MjoyXCIsIFwiWUNiQ3ItNDoyOjBcIiwgIgotICAgICAgICAiXCJZQ2JDci00OjE6MVwiIH0sIgotICAgICAgICAvKiB3ZSBjYW5ub3QgZXhwcmVzcyB0aGVzZSBhcyBzdHJpbmdzIAotICAgICAgICAgKiAid2lkdGggPSAoc3RyaW5nKSBbMSAzMjc2N10sIgotICAgICAgICAgKiAiaGVpZ2h0ID0gKHN0cmluZykgWzEgMzI3NjddLCIKLSAgICAgICAgICovCi0gICAgICAgICJkZXB0aCA9IChzdHJpbmcpIHsgXCI4XCIsIFwiMTBcIiwgXCIxMlwiLCBcIjE2XCIgfSwiCi0gICAgICAgICJjb2xvcmltZXRyeSA9IChzdHJpbmcpIHsgXCJCVDYwMS01XCIsIFwiQlQ3MDktMlwiLCBcIlNNUFRFMjQwTVwiIH0iCi0gICAgICAgIC8qIG9wdGlvbmFsIAotICAgICAgICAgKiBpbnRlcmxhY2UgPSAKLSAgICAgICAgICogdG9wLWZpZWxkLWZpcnN0ID0gCi0gICAgICAgICAqIGNocm9tYS1wb3NpdGlvbiA9IChzdHJpbmcpIAotICAgICAgICAgKiBnYW1tYSA9IChmbG9hdCkKLSAgICAgICAgICovCi0gICAgKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3ZyYXdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwKLSAgICBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3ZyYXdfcGF5X2hhbmRsZV9idWZmZXIgKEdzdFJUUEJhc2VQYXlsb2FkICoKLSAgICBwYXlsb2FkLCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF92cmF3X3BheV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX3ZyYXdfcGF5X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwVlJhd1BheSwgZ3N0X3J0cF92cmF3X3BheSwgR1NUX1RZUEVfUlRQX0JBU0VfUEFZTE9BRCkKLQotICAgICBzdGF0aWMgdm9pZCBnc3RfcnRwX3ZyYXdfcGF5X2NsYXNzX2luaXQgKEdzdFJ0cFZSYXdQYXlDbGFzcyAqIGtsYXNzKQotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzICpnc3RydHBiYXNlcGF5bG9hZF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcyA9IChHc3RSVFBCYXNlUGF5bG9hZENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfdnJhd19wYXlfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX3ZyYXdfcGF5X2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLAotICAgICAgUFJPUF9DSFVOS1NfUEVSX0ZSQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImNodW5rcy1wZXItZnJhbWUiLCAiQ2h1bmtzIHBlciBGcmFtZSIsCi0gICAgICAgICAgIlNwbGl0IGFuZCBzZW5kIG91dCBlYWNoIGZyYW1lIGluIG11bHRpcGxlIGNodW5rcyB0byByZWR1Y2Ugb3ZlcmhlYWQiLAotICAgICAgICAgIDEsIEdfTUFYSU5ULCBERUZBVUxUX0NIVU5LU19QRVJfRlJBTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKQotICAgICAgKTsKLQotICBnc3RydHBiYXNlcGF5bG9hZF9jbGFzcy0+c2V0X2NhcHMgPSBnc3RfcnRwX3ZyYXdfcGF5X3NldGNhcHM7Ci0gIGdzdHJ0cGJhc2VwYXlsb2FkX2NsYXNzLT5oYW5kbGVfYnVmZmVyID0gZ3N0X3J0cF92cmF3X3BheV9oYW5kbGVfYnVmZmVyOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfdnJhd19wYXlfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF92cmF3X3BheV9zaW5rX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBSYXcgVmlkZW8gcGF5bG9hZGVyIiwgIkNvZGVjL1BheWxvYWRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiUGF5bG9hZCByYXcgdmlkZW8gYXMgUlRQIHBhY2tldHMgKFJGQyA0MTc1KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwdnJhd3BheV9kZWJ1ZywgInJ0cHZyYXdwYXkiLCAwLAotICAgICAgIlJhdyB2aWRlbyBSVFAgUGF5bG9hZGVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZyYXdfcGF5X2luaXQgKEdzdFJ0cFZSYXdQYXkgKiBydHB2cmF3cGF5KQotewotICBydHB2cmF3cGF5LT5jaHVua3NfcGVyX2ZyYW1lID0gREVGQVVMVF9DSFVOS1NfUEVSX0ZSQU1FOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfdnJhd19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwVlJhd1BheSAqcnRwdnJhd3BheTsKLSAgZ2Jvb2xlYW4gcmVzOwotICBnaW50IHBncm91cCwgeGluYywgeWluYzsKLSAgY29uc3QgZ2NoYXIgKmRlcHRoc3RyLCAqc2FtcGxpbmdzdHIsICpjb2xvcmltZXRyeXN0cjsKLSAgZ2NoYXIgKndzdHIsICpoc3RyOwotICBHc3RWaWRlb0luZm8gaW5mbzsKLQotICBydHB2cmF3cGF5ID0gR1NUX1JUUF9WUkFXX1BBWSAocGF5bG9hZCk7Ci0KLSAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBydHB2cmF3cGF5LT52aW5mbyA9IGluZm87Ci0KLSAgaWYgKGdzdF92aWRlb19jb2xvcmltZXRyeV9tYXRjaGVzICgmaW5mby5jb2xvcmltZXRyeSwKLSAgICAgICAgICBHU1RfVklERU9fQ09MT1JJTUVUUllfQlQ2MDEpKSB7Ci0gICAgY29sb3JpbWV0cnlzdHIgPSAiQlQ2MDEtNSI7Ci0gIH0gZWxzZSBpZiAoZ3N0X3ZpZGVvX2NvbG9yaW1ldHJ5X21hdGNoZXMgKCZpbmZvLmNvbG9yaW1ldHJ5LAotICAgICAgICAgIEdTVF9WSURFT19DT0xPUklNRVRSWV9CVDcwOSkpIHsKLSAgICBjb2xvcmltZXRyeXN0ciA9ICJCVDcwOS0yIjsKLSAgfSBlbHNlIGlmIChnc3RfdmlkZW9fY29sb3JpbWV0cnlfbWF0Y2hlcyAoJmluZm8uY29sb3JpbWV0cnksCi0gICAgICAgICAgR1NUX1ZJREVPX0NPTE9SSU1FVFJZX1NNUFRFMjQwTSkpIHsKLSAgICBjb2xvcmltZXRyeXN0ciA9ICJTTVBURTI0ME0iOwotICB9IGVsc2UgewotICAgIGNvbG9yaW1ldHJ5c3RyID0gIlNNUFRFMjQwTSI7Ci0gIH0KLQotICB4aW5jID0geWluYyA9IDE7Ci0KLSAgLyogdGhlc2UgdmFsdWVzIGFyZSB0aGUgb25seSB0aGluZyB3ZSBjYW4gZG8gKi8KLSAgZGVwdGhzdHIgPSAiOCI7Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZpbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgc2FtcGxpbmdzdHIgPSAiUkdCQSI7Ci0gICAgICBwZ3JvdXAgPSA0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICBzYW1wbGluZ3N0ciA9ICJCR1JBIjsKLSAgICAgIHBncm91cCA9IDQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgICAgc2FtcGxpbmdzdHIgPSAiUkdCIjsKLSAgICAgIHBncm91cCA9IDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgc2FtcGxpbmdzdHIgPSAiQkdSIjsKLSAgICAgIHBncm91cCA9IDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgIHNhbXBsaW5nc3RyID0gIllDYkNyLTQ6NDo0IjsKLSAgICAgIHBncm91cCA9IDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfVVlWWToKLSAgICAgIHNhbXBsaW5nc3RyID0gIllDYkNyLTQ6MjoyIjsKLSAgICAgIHBncm91cCA9IDQ7Ci0gICAgICB4aW5jID0gMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgICAgc2FtcGxpbmdzdHIgPSAiWUNiQ3ItNDoxOjEiOwotICAgICAgcGdyb3VwID0gNjsKLSAgICAgIHhpbmMgPSA0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgICBzYW1wbGluZ3N0ciA9ICJZQ2JDci00OjI6MCI7Ci0gICAgICBwZ3JvdXAgPSA2OwotICAgICAgeGluYyA9IHlpbmMgPSAyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlA6Ci0gICAgICBzYW1wbGluZ3N0ciA9ICJZQ2JDci00OjI6MiI7Ci0gICAgICBwZ3JvdXAgPSA1OwotICAgICAgeGluYyA9IDI7Ci0gICAgICBkZXB0aHN0ciA9ICIxMCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byB1bmtub3duX2Zvcm1hdDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0lTX0lOVEVSTEFDRUQgKCZpbmZvKSkgewotICAgIHlpbmMgKj0gMjsKLSAgfQotCi0gIHJ0cHZyYXdwYXktPnBncm91cCA9IHBncm91cDsKLSAgcnRwdnJhd3BheS0+eGluYyA9IHhpbmM7Ci0gIHJ0cHZyYXdwYXktPnlpbmMgPSB5aW5jOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBheWxvYWQsICJ3aWR0aCAlZCwgaGVpZ2h0ICVkLCBzYW1wbGluZyAlcyIsCi0gICAgICBHU1RfVklERU9fSU5GT19XSURUSCAoJmluZm8pLCBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZpbmZvKSwgc2FtcGxpbmdzdHIpOwotICBHU1RfREVCVUdfT0JKRUNUIChwYXlsb2FkLCAieGluYyAlZCwgeWluYyAlZCwgcGdyb3VwICVkIiwgeGluYywgeWluYywgcGdyb3VwKTsKLQotICB3c3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCBHU1RfVklERU9fSU5GT19XSURUSCAoJmluZm8pKTsKLSAgaHN0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmaW5mbykpOwotCi0gIGdzdF9ydHBfYmFzZV9wYXlsb2FkX3NldF9vcHRpb25zIChwYXlsb2FkLCAidmlkZW8iLCBUUlVFLCAiUkFXIiwgOTAwMDApOwotICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfSU5URVJMQUNFRCAoJmluZm8pKSB7Ci0gICAgcmVzID0gZ3N0X3J0cF9iYXNlX3BheWxvYWRfc2V0X291dGNhcHMgKHBheWxvYWQsICJzYW1wbGluZyIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgIHNhbXBsaW5nc3RyLCAiZGVwdGgiLCBHX1RZUEVfU1RSSU5HLCBkZXB0aHN0ciwgIndpZHRoIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgd3N0ciwgImhlaWdodCIsIEdfVFlQRV9TVFJJTkcsIGhzdHIsICJjb2xvcmltZXRyeSIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgIGNvbG9yaW1ldHJ5c3RyLCAiaW50ZXJsYWNlIiwgR19UWVBFX1NUUklORywgInRydWUiLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9zZXRfb3V0Y2FwcyAocGF5bG9hZCwgInNhbXBsaW5nIiwgR19UWVBFX1NUUklORywKLSAgICAgICAgc2FtcGxpbmdzdHIsICJkZXB0aCIsIEdfVFlQRV9TVFJJTkcsIGRlcHRoc3RyLCAid2lkdGgiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICB3c3RyLCAiaGVpZ2h0IiwgR19UWVBFX1NUUklORywgaHN0ciwgImNvbG9yaW1ldHJ5IiwgR19UWVBFX1NUUklORywKLSAgICAgICAgY29sb3JpbWV0cnlzdHIsIE5VTEwpOwotICB9Ci0gIGdfZnJlZSAod3N0cik7Ci0gIGdfZnJlZSAoaHN0cik7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfY2FwczoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBheWxvYWQsICJjb3VsZCBub3QgcGFyc2UgY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5rbm93bl9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwYXlsb2FkLCAidW5rbm93biBjYXBzIGZvcm1hdCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF92cmF3X3BheV9oYW5kbGVfYnVmZmVyIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwVlJhd1BheSAqcnRwdnJhd3BheTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Zsb2F0IHBhY2tldHNfcGVyX3BhY2tsaW5lOwotICBndWludCBwZ3JvdXBzX3Blcl9wYWNrZXQ7Ci0gIGd1aW50IHBhY2tsaW5lc19wZXJfbGlzdCwgYnVmZmVyc19wZXJfbGlzdDsKLSAgZ3VpbnQgbGluZXNfZGVsYXk7ICAgICAgICAgICAgLyogYWZ0ZXIgaG93IG1hbnkgcGFja2VkIGxpbmVzIHdlIHB1c2ggb3V0IGEgYnVmZmVyIGxpc3QgKi8KLSAgZ3VpbnQgbGFzdF9saW5lOyAgICAgICAgICAgICAgLyogbGFzdCBwYWNrIGxpbmUgbnVtYmVyIHdlIHB1c2hlZCBvdXQgYSBidWZmZXIgbGlzdCAgICAgKi8KLSAgZ3VpbnQgbGluZSwgb2Zmc2V0OwotICBndWludDggKnAwLCAqeXAsICp1cCwgKnZwOwotICBndWludCB5c3RyaWRlLCB1dnN0cmlkZTsKLSAgZ3VpbnQgeGluYywgeWluYzsKLSAgZ3VpbnQgcGdyb3VwOwotICBndWludCBtdHU7Ci0gIGd1aW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgZmllbGQsIGZpZWxkczsKLSAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICBHc3RWaWRlb0ZyYW1lIGZyYW1lOwotICBnaW50IGludGVybGFjZWQ7Ci0gIGdib29sZWFuIHVzZV9idWZmZXJfbGlzdHM7Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3QgPSBOVUxMOwotICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMLCB9OwotCi0gIHJ0cHZyYXdwYXkgPSBHU1RfUlRQX1ZSQVdfUEFZIChwYXlsb2FkKTsKLQotICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJnJ0cHZyYXdwYXktPnZpbmZvLCBidWZmZXIsIEdTVF9NQVBfUkVBRCkpIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChydHB2cmF3cGF5LCAibmV3IGZyYW1lIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSk7Ci0KLSAgLyogZ2V0IHBvaW50ZXIgYW5kIHN0cmlkZXMgb2YgdGhlIHBsYW5lcyAqLwotICBwMCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBICgmZnJhbWUsIDApOwotICB5cCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKCZmcmFtZSwgMCk7Ci0gIHVwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoJmZyYW1lLCAxKTsKLSAgdnAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBICgmZnJhbWUsIDIpOwotCi0gIHlzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKCZmcmFtZSwgMCk7Ci0gIHV2c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFICgmZnJhbWUsIDEpOwotCi0gIG10dSA9IEdTVF9SVFBfQkFTRV9QQVlMT0FEX01UVSAocGF5bG9hZCk7Ci0KLSAgLyogYW1vdW50IG9mIGJ5dGVzIGZvciBvbmUgcGl4ZWwgKi8KLSAgcGdyb3VwID0gcnRwdnJhd3BheS0+cGdyb3VwOwotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIICgmcnRwdnJhd3BheS0+dmluZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZydHB2cmF3cGF5LT52aW5mbyk7Ci0KLSAgaW50ZXJsYWNlZCA9IEdTVF9WSURFT19JTkZPX0lTX0lOVEVSTEFDRUQgKCZydHB2cmF3cGF5LT52aW5mbyk7Ci0KLSAgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUICgmcnRwdnJhd3BheS0+dmluZm8pOwotCi0gIHlpbmMgPSBydHB2cmF3cGF5LT55aW5jOwotICB4aW5jID0gcnRwdnJhd3BheS0+eGluYzsKLQotICAvKiBhZnRlciBob3cgbWFueSBwYWNrZWQgbGluZXMgd2UgcHVzaCBvdXQgYSBidWZmZXIgbGlzdCAqLwotICBsaW5lc19kZWxheSA9IEdTVF9ST1VORF9VUF80IChoZWlnaHQgLyBydHB2cmF3cGF5LT5jaHVua3NfcGVyX2ZyYW1lKTsKLQotICAvKiBjYWxjdWxhdGUgaG93IG1hbnkgYnVmZmVycyB3ZSBleHBlY3QgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyIGxpc3QgKi8KLSAgcGdyb3Vwc19wZXJfcGFja2V0ID0gKG10dSAtICgxMiArIDE0KSkgLyBwZ3JvdXA7Ci0gIHBhY2tldHNfcGVyX3BhY2tsaW5lID0gd2lkdGggLyAoeGluYyAqIHBncm91cHNfcGVyX3BhY2tldCAqIDEuMCk7Ci0gIHBhY2tsaW5lc19wZXJfbGlzdCA9IGhlaWdodCAvICh5aW5jICogcnRwdnJhd3BheS0+Y2h1bmtzX3Blcl9mcmFtZSk7Ci0gIGJ1ZmZlcnNfcGVyX2xpc3QgPSBwYWNrbGluZXNfcGVyX2xpc3QgKiBwYWNrZXRzX3Blcl9wYWNrbGluZTsKLSAgYnVmZmVyc19wZXJfbGlzdCA9IEdTVF9ST1VORF9VUF84IChidWZmZXJzX3Blcl9saXN0KTsKLQotICB1c2VfYnVmZmVyX2xpc3RzID0gKHJ0cHZyYXdwYXktPmNodW5rc19wZXJfZnJhbWUgPCAoaGVpZ2h0IC8geWluYykpOwotCi0gIGZpZWxkcyA9IDEgKyBpbnRlcmxhY2VkOwotCi0gIC8qIHN0YXJ0IHdpdGggbGluZSAwLCBvZmZzZXQgMCAqLwotICBmb3IgKGZpZWxkID0gMDsgZmllbGQgPCBmaWVsZHM7IGZpZWxkKyspIHsKLSAgICBsaW5lID0gZmllbGQ7Ci0gICAgb2Zmc2V0ID0gMDsKLSAgICBsYXN0X2xpbmUgPSAwOwotCi0gICAgaWYgKHVzZV9idWZmZXJfbGlzdHMpCi0gICAgICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoYnVmZmVyc19wZXJfbGlzdCk7Ci0KLSAgICAvKiB3cml0ZSBhbGwgbGluZXMgKi8KLSAgICB3aGlsZSAobGluZSA8IGhlaWdodCkgewotICAgICAgZ3VpbnQgbGVmdCwgcGFja19saW5lOwotICAgICAgR3N0QnVmZmVyICpvdXQ7Ci0gICAgICBndWludDggKm91dGRhdGEsICpoZWFkZXJzOwotICAgICAgZ2Jvb2xlYW4gbmV4dF9saW5lLCBjb21wbGV0ZSA9IEZBTFNFOwotICAgICAgZ3VpbnQgbGVuZ3RoLCBjb250LCBwaXhlbHM7Ci0KLSAgICAgIC8qIGdldCB0aGUgbWF4IGFsbG93ZWQgcGF5bG9hZCBsZW5ndGggc2l6ZSwgd2UgdHJ5IHRvIGZpbGwgdGhlIGNvbXBsZXRlIE1UVSAqLwotICAgICAgbGVmdCA9IGdzdF9ydHBfYnVmZmVyX2NhbGNfcGF5bG9hZF9sZW4gKG10dSwgMCwgMCk7Ci0gICAgICBvdXQgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKGxlZnQsIDAsIDApOwotCi0gICAgICBpZiAoZmllbGQgPT0gMCkgewotICAgICAgICBHU1RfQlVGRkVSX1BUUyAob3V0KSA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0JVRkZFUl9QVFMgKG91dCkgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSArCi0gICAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpIC8gMjsKLSAgICAgIH0KLQotICAgICAgZ3N0X3J0cF9idWZmZXJfbWFwIChvdXQsIEdTVF9NQVBfV1JJVEUsICZydHApOwotICAgICAgb3V0ZGF0YSA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHZyYXdwYXksICJjcmVhdGVkIGJ1ZmZlciBvZiBzaXplICV1IGZvciBNVFUgJXUiLCBsZWZ0LAotICAgICAgICAgIG10dSk7Ci0KLSAgICAgIC8qCi0gICAgICAgKiAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAgICAgICAqICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCi0gICAgICAgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqICB8ICAgRXh0ZW5kZWQgU2VxdWVuY2UgTnVtYmVyICAgIHwgICAgICAgICAgICBMZW5ndGggICAgICAgICAgICAgfAotICAgICAgICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKiAgfEZ8ICAgICAgICAgIExpbmUgTm8gICAgICAgICAgICB8Q3wgICAgICAgICAgIE9mZnNldCAgICAgICAgICAgIHwKLSAgICAgICAqICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICogIHwgICAgICAgICAgICBMZW5ndGggICAgICAgICAgICAgfEZ8ICAgICAgICAgIExpbmUgTm8gICAgICAgICAgICB8Ci0gICAgICAgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAqICB8Q3wgICAgICAgICAgIE9mZnNldCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgotICAgICAgICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgKiAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAqICAuICAgICAgICAgICAgICAgICBUd28gKHBhcnRpYWwpIGxpbmVzIG9mIHZpZGVvIGRhdGEgICAgICAgICAgICAgLgotICAgICAgICogIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgKiAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAqLwotCi0gICAgICAvKiBuZWVkIDIgYnl0ZXMgZm9yIHRoZSBleHRlbmRlZCBzZXF1ZW5jZSBudW1iZXIgKi8KLSAgICAgICpvdXRkYXRhKysgPSAwOwotICAgICAgKm91dGRhdGErKyA9IDA7Ci0gICAgICBsZWZ0IC09IDI7Ci0KLSAgICAgIC8qIHRoZSBoZWFkZXJzIHN0YXJ0IGhlcmUgKi8KLSAgICAgIGhlYWRlcnMgPSBvdXRkYXRhOwotCi0gICAgICAvKiBtYWtlIHN1cmUgd2UgY2FuIGZpdCBhdCBsZWFzdCAqb25lKiBoZWFkZXIgYW5kIHBpeGVsICovCi0gICAgICBpZiAoIShsZWZ0ID4gKDYgKyBwZ3JvdXApKSkgewotICAgICAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dCk7Ci0gICAgICAgIGdvdG8gdG9vX3NtYWxsOwotICAgICAgfQotCi0gICAgICAvKiB3aGlsZSB3ZSBjYW4gZml0IGF0IGxlYXN0IG9uZSBoZWFkZXIgYW5kIG9uZSBwaXhlbCAqLwotICAgICAgd2hpbGUgKGxlZnQgPiAoNiArIHBncm91cCkpIHsKLSAgICAgICAgLyogd2UgbmVlZCBhIDYgYnl0ZXMgaGVhZGVyICovCi0gICAgICAgIGxlZnQgLT0gNjsKLQotICAgICAgICAvKiBnZXQgaG93IG1heSBieXRlcyB3ZSBuZWVkIGZvciB0aGUgcmVtYWluaW5nIHBpeGVscyAqLwotICAgICAgICBwaXhlbHMgPSB3aWR0aCAtIG9mZnNldDsKLSAgICAgICAgbGVuZ3RoID0gKHBpeGVscyAqIHBncm91cCkgLyB4aW5jOwotCi0gICAgICAgIGlmIChsZWZ0ID49IGxlbmd0aCkgewotICAgICAgICAgIC8qIHBpeGVscyBhbmQgaGVhZGVyIGZpdCBjb21wbGV0ZWx5LCB3ZSB3aWxsIHdyaXRlIHRoZW0gYW5kIHNraXAgdG8gdGhlCi0gICAgICAgICAgICogbmV4dCBsaW5lLiAqLwotICAgICAgICAgIG5leHRfbGluZSA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogbGluZSBkb2VzIG5vdCBmaXQgY29tcGxldGVseSwgc2VlIGhvdyBtYW55IHBpeGVscyBmaXQgKi8KLSAgICAgICAgICBwaXhlbHMgPSAobGVmdCAvIHBncm91cCkgKiB4aW5jOwotICAgICAgICAgIGxlbmd0aCA9IChwaXhlbHMgKiBwZ3JvdXApIC8geGluYzsKLSAgICAgICAgICBuZXh0X2xpbmUgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwdnJhd3BheSwgImZpbGxpbmcgJXUgYnl0ZXMgaW4gJXUgcGl4ZWxzIiwgbGVuZ3RoLAotICAgICAgICAgICAgcGl4ZWxzKTsKLSAgICAgICAgbGVmdCAtPSBsZW5ndGg7Ci0KLSAgICAgICAgLyogd3JpdGUgbGVuZ3RoICovCi0gICAgICAgICpvdXRkYXRhKysgPSAobGVuZ3RoID4+IDgpICYgMHhmZjsKLSAgICAgICAgKm91dGRhdGErKyA9IGxlbmd0aCAmIDB4ZmY7Ci0KLSAgICAgICAgLyogd3JpdGUgbGluZSBubyAqLwotICAgICAgICAqb3V0ZGF0YSsrID0gKChsaW5lID4+IDgpICYgMHg3ZikgfCAoKGZpZWxkIDw8IDcpICYgMHg4MCk7Ci0gICAgICAgICpvdXRkYXRhKysgPSBsaW5lICYgMHhmZjsKLQotICAgICAgICBpZiAobmV4dF9saW5lKSB7Ci0gICAgICAgICAgLyogZ28gdG8gbmV4dCBsaW5lIHdlIGRvIHRoaXMgaGVyZSB0byBtYWtlIHRoZSBjaGVjayBiZWxvdyBlYXNpZXIgKi8KLSAgICAgICAgICBsaW5lICs9IHlpbmM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjYWxjdWxhdGUgY29udGludWF0aW9uIG1hcmtlciAqLwotICAgICAgICBjb250ID0gKGxlZnQgPiAoNiArIHBncm91cCkgJiYgbGluZSA8IGhlaWdodCkgPyAweDgwIDogMHgwMDsKLQotICAgICAgICAvKiB3cml0ZSBvZmZzZXQgYW5kIGNvbnRpbnVhdGlvbiBtYXJrZXIgKi8KLSAgICAgICAgKm91dGRhdGErKyA9ICgob2Zmc2V0ID4+IDgpICYgMHg3ZikgfCBjb250OwotICAgICAgICAqb3V0ZGF0YSsrID0gb2Zmc2V0ICYgMHhmZjsKLQotICAgICAgICBpZiAobmV4dF9saW5lKSB7Ci0gICAgICAgICAgLyogcmVzZXQgb2Zmc2V0ICovCi0gICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocnRwdnJhd3BheSwgImdvIHRvIG5leHQgbGluZSAldSIsIGxpbmUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG9mZnNldCArPSBwaXhlbHM7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHZyYXdwYXksICJuZXh0IG9mZnNldCAldSIsIG9mZnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbnQpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwdnJhd3BheSwgImNvbnN1bWVkICV1IGJ5dGVzIiwKLSAgICAgICAgICAoZ3VpbnQpIChvdXRkYXRhIC0gaGVhZGVycykpOwotCi0gICAgICAvKiBzZWNvbmQgcGFzcywgcmVhZCBoZWFkZXJzIGFuZCB3cml0ZSB0aGUgZGF0YSAqLwotICAgICAgd2hpbGUgKFRSVUUpIHsKLSAgICAgICAgZ3VpbnQgb2ZmcywgbGluOwotCi0gICAgICAgIC8qIHJlYWQgbGVuZ3RoIGFuZCBjb250ICovCi0gICAgICAgIGxlbmd0aCA9IChoZWFkZXJzWzBdIDw8IDgpIHwgaGVhZGVyc1sxXTsKLSAgICAgICAgbGluID0gKChoZWFkZXJzWzJdICYgMHg3ZikgPDwgOCkgfCBoZWFkZXJzWzNdOwotICAgICAgICBvZmZzID0gKChoZWFkZXJzWzRdICYgMHg3ZikgPDwgOCkgfCBoZWFkZXJzWzVdOwotICAgICAgICBjb250ID0gaGVhZGVyc1s0XSAmIDB4ODA7Ci0gICAgICAgIHBpeGVscyA9IGxlbmd0aCAvIHBncm91cDsKLSAgICAgICAgaGVhZGVycyArPSA2OwotCi0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChwYXlsb2FkLAotICAgICAgICAgICAgIndyaXRpbmcgbGVuZ3RoICV1LCBsaW5lICV1LCBvZmZzZXQgJXUsIGNvbnQgJWQiLCBsZW5ndGgsIGxpbiwgb2ZmcywKLSAgICAgICAgICAgIGNvbnQpOwotCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1JBOgotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZQOgotICAgICAgICAgICAgb2ZmcyAvPSB4aW5jOwotICAgICAgICAgICAgbWVtY3B5IChvdXRkYXRhLCBwMCArIChsaW4gKiB5c3RyaWRlKSArIChvZmZzICogcGdyb3VwKSwgbGVuZ3RoKTsKLSAgICAgICAgICAgIG91dGRhdGEgKz0gbGVuZ3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICAgICAgewotICAgICAgICAgICAgZ2ludCBpOwotICAgICAgICAgICAgZ3VpbnQ4ICpkYXRhcDsKLQotICAgICAgICAgICAgZGF0YXAgPSBwMCArIChsaW4gKiB5c3RyaWRlKSArIChvZmZzICogNCk7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhlbHM7IGkrKykgewotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gZGF0YXBbMl07Ci0gICAgICAgICAgICAgICpvdXRkYXRhKysgPSBkYXRhcFsxXTsKLSAgICAgICAgICAgICAgKm91dGRhdGErKyA9IGRhdGFwWzNdOwotICAgICAgICAgICAgICBkYXRhcCArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdpbnQgaTsKLSAgICAgICAgICAgIGd1aW50IHV2b2ZmOwotICAgICAgICAgICAgZ3VpbnQ4ICp5ZDFwLCAqeWQycCwgKnVkcCwgKnZkcDsKLQotICAgICAgICAgICAgeWQxcCA9IHlwICsgKGxpbiAqIHlzdHJpZGUpICsgKG9mZnMpOwotICAgICAgICAgICAgeWQycCA9IHlkMXAgKyB5c3RyaWRlOwotICAgICAgICAgICAgdXZvZmYgPSAobGluIC8geWluYyAqIHV2c3RyaWRlKSArIChvZmZzIC8geGluYyk7Ci0gICAgICAgICAgICB1ZHAgPSB1cCArIHV2b2ZmOwotICAgICAgICAgICAgdmRwID0gdnAgKyB1dm9mZjsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeGVsczsgaSsrKSB7Ci0gICAgICAgICAgICAgICpvdXRkYXRhKysgPSAqeWQxcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnlkMXArKzsKLSAgICAgICAgICAgICAgKm91dGRhdGErKyA9ICp5ZDJwKys7Ci0gICAgICAgICAgICAgICpvdXRkYXRhKysgPSAqeWQycCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnVkcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnZkcCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIGdpbnQgaTsKLSAgICAgICAgICAgIGd1aW50IHV2b2ZmOwotICAgICAgICAgICAgZ3VpbnQ4ICp5ZHAsICp1ZHAsICp2ZHA7Ci0KLSAgICAgICAgICAgIHlkcCA9IHlwICsgKGxpbiAqIHlzdHJpZGUpICsgb2ZmczsKLSAgICAgICAgICAgIHV2b2ZmID0gKGxpbiAvIHlpbmMgKiB1dnN0cmlkZSkgKyAob2ZmcyAvIHhpbmMpOwotICAgICAgICAgICAgdWRwID0gdXAgKyB1dm9mZjsKLSAgICAgICAgICAgIHZkcCA9IHZwICsgdXZvZmY7Ci0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhlbHM7IGkrKykgewotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnVkcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnlkcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnlkcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnZkcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnlkcCsrOwotICAgICAgICAgICAgICAqb3V0ZGF0YSsrID0gKnlkcCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChvdXQpOwotICAgICAgICAgICAgZ290byB1bmtub3duX3NhbXBsaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjb250KQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAobGluZSA+PSBoZWlnaHQpIHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHZyYXdwYXksICJmaWVsZC9mcmFtZSBjb21wbGV0ZSwgc2V0IG1hcmtlciIpOwotICAgICAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLSAgICAgICAgY29tcGxldGUgPSBUUlVFOwotICAgICAgfQotICAgICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotICAgICAgaWYgKGxlZnQgPiAwKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHB2cmF3cGF5LCAid2UgaGF2ZSAldSBieXRlcyBsZWZ0IiwgbGVmdCk7Ci0gICAgICAgIGdzdF9idWZmZXJfcmVzaXplIChvdXQsIDAsIGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dCkgLSBsZWZ0KTsKLSAgICAgIH0KLQotICAgICAgZ3N0X3J0cF9jb3B5X21ldGEgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHZyYXdwYXkpLCBvdXQsIGJ1ZmZlciwKLSAgICAgICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoR1NUX01FVEFfVEFHX1ZJREVPX1NUUikpOwotCi0KLSAgICAgIC8qIE5vdyBlaXRoZXIgcHVzaCBvdXQgdGhlIGJ1ZmZlciBkaXJlY3RseSAqLwotICAgICAgaWYgKCF1c2VfYnVmZmVyX2xpc3RzKSB7Ci0gICAgICAgIHJldCA9IGdzdF9ydHBfYmFzZV9wYXlsb2FkX3B1c2ggKHBheWxvYWQsIG91dCk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvKiBvciBhZGQgdGhlIGJ1ZmZlciB0byBidWZmZXIgbGlzdCAuLi4gKi8KLSAgICAgIGdzdF9idWZmZXJfbGlzdF9hZGQgKGxpc3QsIG91dCk7Ci0KLSAgICAgIC8qIC4uIGFuZCBjaGVjayBpZiB3ZSBuZWVkIHRvIHB1c2ggb3V0IHRoZSBsaXN0ICovCi0gICAgICBwYWNrX2xpbmUgPSAobGluZSAtIGZpZWxkKSAvIGZpZWxkczsKLSAgICAgIGlmIChjb21wbGV0ZSB8fCAocGFja19saW5lID4gbGFzdF9saW5lICYmIHBhY2tfbGluZSAlIGxpbmVzX2RlbGF5ID09IDApKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHB2cmF3cGF5LCAicHVzaGluZyBsaXN0IG9mICV1IGJ1ZmZlcnMgdXAgdG8gcGFjayAiCi0gICAgICAgICAgICAibGluZSAldSIsIGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGxpc3QpLCBwYWNrX2xpbmUpOwotICAgICAgICByZXQgPSBnc3RfcnRwX2Jhc2VfcGF5bG9hZF9wdXNoX2xpc3QgKHBheWxvYWQsIGxpc3QpOwotICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgaWYgKCFjb21wbGV0ZSkKLSAgICAgICAgICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ld19zaXplZCAoYnVmZmVyc19wZXJfbGlzdCk7Ci0gICAgICAgIGxhc3RfbGluZSA9IHBhY2tfbGluZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotdW5rbm93bl9zYW1wbGluZzoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXlsb2FkLCBTVFJFQU0sIEZPUk1BVCwKLSAgICAgICAgKE5VTEwpLCAoInVuaW1wbGVtZW50ZWQgc2FtcGxpbmciKSk7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gIH0KLXRvb19zbWFsbDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChwYXlsb2FkLCBSRVNPVVJDRSwgTk9fU1BBQ0VfTEVGVCwKLSAgICAgICAgKE5VTEwpLCAoIm5vdCBlbm91Z2ggc3BhY2UgdG8gc2VuZCBhdCBsZWFzdCBvbmUgcGl4ZWwiKSk7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9TVVBQT1JURUQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfdnJhd19wYXlfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cFZSYXdQYXkgKnJ0cHZyYXdwYXk7Ci0KLSAgcnRwdnJhd3BheSA9IEdTVF9SVFBfVlJBV19QQVkgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0NIVU5LU19QRVJfRlJBTUU6Ci0gICAgICBydHB2cmF3cGF5LT5jaHVua3NfcGVyX2ZyYW1lID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3ZyYXdfcGF5X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBWUmF3UGF5ICpydHB2cmF3cGF5OwotCi0gIHJ0cHZyYXdwYXkgPSBHU1RfUlRQX1ZSQVdfUEFZIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9DSFVOS1NfUEVSX0ZSQU1FOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcnRwdnJhd3BheS0+Y2h1bmtzX3Blcl9mcmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX3ZyYXdfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwdnJhd3BheSIsCi0gICAgICBHU1RfUkFOS19TRUNPTkRBUlksIEdTVF9UWVBFX1JUUF9WUkFXX1BBWSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwL2dzdHJ0cHZyYXdwYXkuaCBiL2dzdC9ydHAvZ3N0cnRwdnJhd3BheS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQyNDQyLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHAvZ3N0cnRwdnJhd3BheS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA4PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfUlRQX1ZSQVdfUEFZX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfVlJBV19QQVlfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBiYXNlcGF5bG9hZC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1ZSQVdfUEFZIFwKLSAgKGdzdF9ydHBfdnJhd19wYXlfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9WUkFXX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9WUkFXX1BBWSxHc3RSdHBWUmF3UGF5KSkKLSNkZWZpbmUgR1NUX1JUUF9WUkFXX1BBWV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfVlJBV19QQVksR3N0UnRwVlJhd1BheUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9WUkFXX1BBWShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9WUkFXX1BBWSkpCi0jZGVmaW5lIEdTVF9JU19SVFBfVlJBV19QQVlfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1ZSQVdfUEFZKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFZSYXdQYXkgR3N0UnRwVlJhd1BheTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBWUmF3UGF5Q2xhc3MgR3N0UnRwVlJhd1BheUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cFZSYXdQYXkKLXsKLSAgR3N0UlRQQmFzZVBheWxvYWQgcGF5bG9hZDsKLQotICBHc3RWaWRlb0luZm8gdmluZm87Ci0KLSAgZ2ludCBwZ3JvdXA7Ci0gIGdpbnQgeGluYywgeWluYzsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGd1aW50IGNodW5rc19wZXJfZnJhbWU7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFZSYXdQYXlDbGFzcwotewotICBHc3RSVFBCYXNlUGF5bG9hZENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfdnJhd19wYXlfZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfcnRwX3ZyYXdfcGF5X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1ZSQVdfUEFZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuYW0gYi9nc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyYThjNy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHJ0cG1hbmFnZXIubGEKLQotbGliZ3N0cnRwbWFuYWdlcl9sYV9TT1VSQ0VTID0gZ3N0cnRwbWFuYWdlci5jIFwKLQkJCSAgICAgIGdzdHJ0cGJpbi5jIFwKLQkJCSAgICAgIGdzdHJ0cGR0bWZtdXguYyBcCi0JCQkgICAgICBnc3RydHBqaXR0ZXJidWZmZXIuYyBcCi0JCQkgICAgICBnc3RydHBtdXguYyBcCi0JCQkgICAgICBnc3RydHBwdGRlbXV4LmMgXAotCQkJICAgICAgZ3N0cnRwcnR4cXVldWUuYyBcCi0JCQkgICAgICBnc3RydHBydHhyZWNlaXZlLmMgXAotCQkJICAgICAgZ3N0cnRwcnR4c2VuZC5jIFwKLQkJCSAgICAgIGdzdHJ0cHNzcmNkZW11eC5jIFwKLQkJCSAgICAgIHJ0cGppdHRlcmJ1ZmZlci5jICAgICAgXAotCQkJICAgICAgcnRwc2Vzc2lvbi5jICAgICAgXAotCQkJICAgICAgcnRwc291cmNlLmMgICAgICBcCi0JCQkgICAgICBydHBzdGF0cy5jICAgICAgXAotCQkJICAgICAgZ3N0cnRwc2Vzc2lvbi5jCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0cnRwYmluLmggXAotCQkgZ3N0cnRwZHRtZm11eC5oIFwKLQkJIGdzdHJ0cGppdHRlcmJ1ZmZlci5oIFwKLQkJIGdzdHJ0cG11eC5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0cnRwcHRkZW11eC5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0cnRwc3NyY2RlbXV4LmggXAotICAgICAgICAgICAgICAgICBnc3RydHBydHhxdWV1ZS5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0cnRwcnR4cmVjZWl2ZS5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0cnRwcnR4c2VuZC5oIFwKLSAgICAgICAgICAgICAgICAgcnRwaml0dGVyYnVmZmVyLmggXAotCQkgcnRwc2Vzc2lvbi5oICBcCi0JCSBydHBzb3VyY2UuaCAgXAotCQkgcnRwc3RhdHMuaCAgXAotCQkgZ3N0cnRwc2Vzc2lvbi5oCi0KLWxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSBcCi0JJChHU1RfTkVUX0NGTEFHUykgJChXQVJOSU5HX0NGTEFHUykgJChFUlJPUl9DRkxBR1MpCi1saWJnc3RydHBtYW5hZ2VyX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JJChHU1RfTkVUX0xJQlMpIC1sZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi1saWJnc3RydHBtYW5hZ2VyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL01ha2VmaWxlLmluIGIvZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYWIwYjQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMDcwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9ydHBtYW5hZ2VyCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0cnRwbWFuYWdlcl9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0cnRwbWFuYWdlcl9sYV9PQkpFQ1RTID0gbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtYW5hZ2VyLmxvIFwKLQlsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGJpbi5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBkdG1mbXV4LmxvIFwKLQlsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGppdHRlcmJ1ZmZlci5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXgubG8gXAotCWxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcHRkZW11eC5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhxdWV1ZS5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhyZWNlaXZlLmxvIFwKLQlsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHNlbmQubG8gXAotCWxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwc3NyY2RlbXV4LmxvIFwKLQlsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cGppdHRlcmJ1ZmZlci5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzZXNzaW9uLmxvIFwKLQlsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNvdXJjZS5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5sbyBcCi0JbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzZXNzaW9uLmxvCi1saWJnc3RydHBtYW5hZ2VyX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHJ0cG1hbmFnZXJfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHJ0cG1hbmFnZXJfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0cnRwbWFuYWdlcl9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RydHBtYW5hZ2VyLmxhCi1saWJnc3RydHBtYW5hZ2VyX2xhX1NPVVJDRVMgPSBnc3RydHBtYW5hZ2VyLmMgXAotCQkJICAgICAgZ3N0cnRwYmluLmMgXAotCQkJICAgICAgZ3N0cnRwZHRtZm11eC5jIFwKLQkJCSAgICAgIGdzdHJ0cGppdHRlcmJ1ZmZlci5jIFwKLQkJCSAgICAgIGdzdHJ0cG11eC5jIFwKLQkJCSAgICAgIGdzdHJ0cHB0ZGVtdXguYyBcCi0JCQkgICAgICBnc3RydHBydHhxdWV1ZS5jIFwKLQkJCSAgICAgIGdzdHJ0cHJ0eHJlY2VpdmUuYyBcCi0JCQkgICAgICBnc3RydHBydHhzZW5kLmMgXAotCQkJICAgICAgZ3N0cnRwc3NyY2RlbXV4LmMgXAotCQkJICAgICAgcnRwaml0dGVyYnVmZmVyLmMgICAgICBcCi0JCQkgICAgICBydHBzZXNzaW9uLmMgICAgICBcCi0JCQkgICAgICBydHBzb3VyY2UuYyAgICAgIFwKLQkJCSAgICAgIHJ0cHN0YXRzLmMgICAgICBcCi0JCQkgICAgICBnc3RydHBzZXNzaW9uLmMKLQotbm9pbnN0X0hFQURFUlMgPSBnc3RydHBiaW4uaCBcCi0JCSBnc3RydHBkdG1mbXV4LmggXAotCQkgZ3N0cnRwaml0dGVyYnVmZmVyLmggXAotCQkgZ3N0cnRwbXV4LmggXAotICAgICAgICAgICAgICAgICBnc3RydHBwdGRlbXV4LmggXAotICAgICAgICAgICAgICAgICBnc3RydHBzc3JjZGVtdXguaCBcCi0gICAgICAgICAgICAgICAgIGdzdHJ0cHJ0eHF1ZXVlLmggXAotICAgICAgICAgICAgICAgICBnc3RydHBydHhyZWNlaXZlLmggXAotICAgICAgICAgICAgICAgICBnc3RydHBydHhzZW5kLmggXAotICAgICAgICAgICAgICAgICBydHBqaXR0ZXJidWZmZXIuaCBcCi0JCSBydHBzZXNzaW9uLmggIFwKLQkJIHJ0cHNvdXJjZS5oICBcCi0JCSBydHBzdGF0cy5oICBcCi0JCSBnc3RydHBzZXNzaW9uLmgKLQotbGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpIFwKLQkkKEdTVF9ORVRfQ0ZMQUdTKSAkKFdBUk5JTkdfQ0ZMQUdTKSAkKEVSUk9SX0NGTEFHUykKLQotbGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCSQoR1NUX05FVF9MSUJTKSAtbGdzdHJ0cC1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotCi1saWJnc3RydHBtYW5hZ2VyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9ydHBtYW5hZ2VyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0cnRwbWFuYWdlci5sYTogJChsaWJnc3RydHBtYW5hZ2VyX2xhX09CSkVDVFMpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0cnRwbWFuYWdlcl9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9PQkpFQ1RTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGJpbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwZHRtZm11eC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwaml0dGVyYnVmZmVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtYW5hZ2VyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHB0ZGVtdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHF1ZXVlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhyZWNlaXZlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhzZW5kLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzZXNzaW9uLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzc3JjZGVtdXguUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLXJ0cGppdHRlcmJ1ZmZlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc2Vzc2lvbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc291cmNlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtYW5hZ2VyLmxvOiBnc3RydHBtYW5hZ2VyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwbWFuYWdlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtYW5hZ2VyLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cG1hbmFnZXIubG8gYHRlc3QgLWYgJ2dzdHJ0cG1hbmFnZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbWFuYWdlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cG1hbmFnZXIuVHBvICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cG1hbmFnZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwbWFuYWdlci5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwbWFuYWdlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cG1hbmFnZXIubG8gYHRlc3QgLWYgJ2dzdHJ0cG1hbmFnZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbWFuYWdlci5jCi0KLWxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwYmluLmxvOiBnc3RydHBiaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBiaW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwYmluLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGJpbi5sbyBgdGVzdCAtZiAnZ3N0cnRwYmluLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGJpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGJpbi5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwYmluLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGJpbi5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwYmluLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwYmluLmxvIGB0ZXN0IC1mICdnc3RydHBiaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwYmluLmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBkdG1mbXV4LmxvOiBnc3RydHBkdG1mbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwZHRtZm11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBkdG1mbXV4LlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGR0bWZtdXgubG8gYHRlc3QgLWYgJ2dzdHJ0cGR0bWZtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZHRtZm11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGR0bWZtdXguVHBvICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGR0bWZtdXguUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZHRtZm11eC5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwZHRtZm11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGR0bWZtdXgubG8gYHRlc3QgLWYgJ2dzdHJ0cGR0bWZtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZHRtZm11eC5jCi0KLWxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwaml0dGVyYnVmZmVyLmxvOiBnc3RydHBqaXR0ZXJidWZmZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBqaXR0ZXJidWZmZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwaml0dGVyYnVmZmVyLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGppdHRlcmJ1ZmZlci5sbyBgdGVzdCAtZiAnZ3N0cnRwaml0dGVyYnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cGppdHRlcmJ1ZmZlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cGppdHRlcmJ1ZmZlci5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwaml0dGVyYnVmZmVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cGppdHRlcmJ1ZmZlci5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwaml0dGVyYnVmZmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwaml0dGVyYnVmZmVyLmxvIGB0ZXN0IC1mICdnc3RydHBqaXR0ZXJidWZmZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwaml0dGVyYnVmZmVyLmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXgubG86IGdzdHJ0cG11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cG11eC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXguVHBvIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwbXV4LmxvIGB0ZXN0IC1mICdnc3RydHBtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwbXV4LlRwbyAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXguUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwbXV4LmMnIG9iamVjdD0nbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXgubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBtdXgubG8gYHRlc3QgLWYgJ2dzdHJ0cG11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBtdXguYwotCi1saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHB0ZGVtdXgubG86IGdzdHJ0cHB0ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBwdGRlbXV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHB0ZGVtdXguVHBvIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcHRkZW11eC5sbyBgdGVzdCAtZiAnZ3N0cnRwcHRkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBwdGRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcHRkZW11eC5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcHRkZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBwdGRlbXV4LmMnIG9iamVjdD0nbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBwdGRlbXV4LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcHRkZW11eC5sbyBgdGVzdCAtZiAnZ3N0cnRwcHRkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBwdGRlbXV4LmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhxdWV1ZS5sbzogZ3N0cnRwcnR4cXVldWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhxdWV1ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhxdWV1ZS5UcG8gLWMgLW8gbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhxdWV1ZS5sbyBgdGVzdCAtZiAnZ3N0cnRwcnR4cXVldWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcnR4cXVldWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhxdWV1ZS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcnR4cXVldWUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwcnR4cXVldWUuYycgb2JqZWN0PSdsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHF1ZXVlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcnR4cXVldWUubG8gYHRlc3QgLWYgJ2dzdHJ0cHJ0eHF1ZXVlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHJ0eHF1ZXVlLmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhyZWNlaXZlLmxvOiBnc3RydHBydHhyZWNlaXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcnR4cmVjZWl2ZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhyZWNlaXZlLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHJlY2VpdmUubG8gYHRlc3QgLWYgJ2dzdHJ0cHJ0eHJlY2VpdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcnR4cmVjZWl2ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHJlY2VpdmUuVHBvICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHJlY2VpdmUuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwcnR4cmVjZWl2ZS5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcnR4cmVjZWl2ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHJlY2VpdmUubG8gYHRlc3QgLWYgJ2dzdHJ0cHJ0eHJlY2VpdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwcnR4cmVjZWl2ZS5jCi0KLWxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcnR4c2VuZC5sbzogZ3N0cnRwcnR4c2VuZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHNlbmQubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwcnR4c2VuZC5UcG8gLWMgLW8gbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhzZW5kLmxvIGB0ZXN0IC1mICdnc3RydHBydHhzZW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHJ0eHNlbmQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhzZW5kLlRwbyAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhzZW5kLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0cHJ0eHNlbmQuYycgb2JqZWN0PSdsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHJ0eHNlbmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBydHhzZW5kLmxvIGB0ZXN0IC1mICdnc3RydHBydHhzZW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHJ0eHNlbmQuYwotCi1saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNzcmNkZW11eC5sbzogZ3N0cnRwc3NyY2RlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwc3NyY2RlbXV4LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNzcmNkZW11eC5UcG8gLWMgLW8gbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzc3JjZGVtdXgubG8gYHRlc3QgLWYgJ2dzdHJ0cHNzcmNkZW11eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBzc3JjZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzc3JjZGVtdXguVHBvICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNzcmNkZW11eC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHBzc3JjZGVtdXguYycgb2JqZWN0PSdsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNzcmNkZW11eC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNzcmNkZW11eC5sbyBgdGVzdCAtZiAnZ3N0cnRwc3NyY2RlbXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0cHNzcmNkZW11eC5jCi0KLWxpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwaml0dGVyYnVmZmVyLmxvOiBydHBqaXR0ZXJidWZmZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBqaXR0ZXJidWZmZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwaml0dGVyYnVmZmVyLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cGppdHRlcmJ1ZmZlci5sbyBgdGVzdCAtZiAncnRwaml0dGVyYnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJ0cGppdHRlcmJ1ZmZlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLXJ0cGppdHRlcmJ1ZmZlci5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwaml0dGVyYnVmZmVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3J0cGppdHRlcmJ1ZmZlci5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwaml0dGVyYnVmZmVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwaml0dGVyYnVmZmVyLmxvIGB0ZXN0IC1mICdydHBqaXR0ZXJidWZmZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwaml0dGVyYnVmZmVyLmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzZXNzaW9uLmxvOiBydHBzZXNzaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc2Vzc2lvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzZXNzaW9uLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNlc3Npb24ubG8gYHRlc3QgLWYgJ3J0cHNlc3Npb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwc2Vzc2lvbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNlc3Npb24uVHBvICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNlc3Npb24uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncnRwc2Vzc2lvbi5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc2Vzc2lvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNlc3Npb24ubG8gYHRlc3QgLWYgJ3J0cHNlc3Npb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwc2Vzc2lvbi5jCi0KLWxpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc291cmNlLmxvOiBydHBzb3VyY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzb3VyY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc291cmNlLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNvdXJjZS5sbyBgdGVzdCAtZiAncnRwc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJ0cHNvdXJjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHNvdXJjZS5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc291cmNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3J0cHNvdXJjZS5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc291cmNlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc291cmNlLmxvIGB0ZXN0IC1mICdydHBzb3VyY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwc291cmNlLmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5sbzogcnRwc3RhdHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5UcG8gLWMgLW8gbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5sbyBgdGVzdCAtZiAncnRwc3RhdHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcnRwc3RhdHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1ydHBzdGF0cy5UcG8gJChERVBESVIpL2xpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc3RhdHMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncnRwc3RhdHMuYycgb2JqZWN0PSdsaWJnc3RydHBtYW5hZ2VyX2xhLXJ0cHN0YXRzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRwbWFuYWdlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0cG1hbmFnZXJfbGEtcnRwc3RhdHMubG8gYHRlc3QgLWYgJ3J0cHN0YXRzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHJ0cHN0YXRzLmMKLQotbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzZXNzaW9uLmxvOiBnc3RydHBzZXNzaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHBtYW5hZ2VyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwc2Vzc2lvbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRwbWFuYWdlcl9sYS1nc3RydHBzZXNzaW9uLlRwbyAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNlc3Npb24ubG8gYHRlc3QgLWYgJ2dzdHJ0cHNlc3Npb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc2Vzc2lvbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNlc3Npb24uVHBvICQoREVQRElSKS9saWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNlc3Npb24uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwc2Vzc2lvbi5jJyBvYmplY3Q9J2xpYmdzdHJ0cG1hbmFnZXJfbGEtZ3N0cnRwc2Vzc2lvbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0cG1hbmFnZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRwbWFuYWdlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RydHBtYW5hZ2VyX2xhLWdzdHJ0cHNlc3Npb24ubG8gYHRlc3QgLWYgJ2dzdHJ0cHNlc3Npb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwc2Vzc2lvbi5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGJpbi5jIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0OGFkYjkuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjI5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1ydHBiaW4KLSAqIEBzZWVfYWxzbzogcnRwaml0dGVyYnVmZmVyLCBydHBzZXNzaW9uLCBydHBwdGRlbXV4LCBydHBzc3JjZGVtdXgKLSAqCi0gKiBSVFAgYmluIGNvbWJpbmVzIHRoZSBmdW5jdGlvbnMgb2YgI0dzdFJ0cFNlc3Npb24sICNHc3RSdHBTc3JjRGVtdXgsCi0gKiAjR3N0UnRwSml0dGVyQnVmZmVyIGFuZCAjR3N0UnRwUHREZW11eCBpbiBvbmUgZWxlbWVudC4gSXQgYWxsb3dzIGZvciBtdWx0aXBsZQotICogUlRQIHNlc3Npb25zIHRoYXQgd2lsbCBiZSBzeW5jaHJvbml6ZWQgdG9nZXRoZXIgdXNpbmcgUlRDUCBTUiBwYWNrZXRzLgotICoKLSAqICNHc3RSdHBCaW4gaXMgY29uZmlndXJlZCB3aXRoIGEgbnVtYmVyIG9mIHJlcXVlc3QgcGFkcyB0aGF0IGRlZmluZSB0aGUKLSAqIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBhY3RpdmF0ZWQsIHNpbWlsYXIgdG8gdGhlICNHc3RSdHBTZXNzaW9uIGVsZW1lbnQuCi0gKgotICogVG8gdXNlICNHc3RSdHBCaW4gYXMgYW4gUlRQIHJlY2VpdmVyLCByZXF1ZXN0IGEgcmVjdl9ydHBfc2lua19cJXUgcGFkLiBUaGUgc2Vzc2lvbgotICogbnVtYmVyIG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSBwYWQgbmFtZS4KLSAqIERhdGEgcmVjZWl2ZWQgb24gdGhlIHJlY3ZfcnRwX3NpbmtfXCV1IHBhZCB3aWxsIGJlIHByb2Nlc3NlZCBpbiB0aGUgI0dzdFJ0cFNlc3Npb24KLSAqIG1hbmFnZXIgYW5kIGFmdGVyIGJlaW5nIHZhbGlkYXRlZCBmb3J3YXJkZWQgb24gI0dzdFJ0cFNzcmNEZW11eCBlbGVtZW50LiBFYWNoCi0gKiBSVFAgc3RyZWFtIGlzIGRlbXV4ZWQgYmFzZWQgb24gdGhlIFNTUkMgYW5kIHNlbmQgdG8gYSAjR3N0UnRwSml0dGVyQnVmZmVyLiBBZnRlcgotICogdGhlIHBhY2tldHMgYXJlIHJlbGVhc2VkIGZyb20gdGhlIGppdHRlcmJ1ZmZlciwgdGhleSB3aWxsIGJlIGZvcndhcmRlZCB0byBhCi0gKiAjR3N0UnRwUHREZW11eCBlbGVtZW50LiBUaGUgI0dzdFJ0cFB0RGVtdXggZWxlbWVudCB3aWxsIGRlbXV4IHRoZSBwYWNrZXRzIGJhc2VkCi0gKiBvbiB0aGUgcGF5bG9hZCB0eXBlIGFuZCB3aWxsIGNyZWF0ZSBhIHVuaXF1ZSBwYWQgcmVjdl9ydHBfc3JjX1wldV9cJXVfXCV1IG9uCi0gKiBydHBiaW4gd2l0aCB0aGUgc2Vzc2lvbiBudW1iZXIsIFNTUkMgYW5kIHBheWxvYWQgdHlwZSByZXNwZWN0aXZlbHkgYXMgdGhlIHBhZAotICogbmFtZS4KLSAqCi0gKiBUbyBhbHNvIHVzZSAjR3N0UnRwQmluIGFzIGFuIFJUQ1AgcmVjZWl2ZXIsIHJlcXVlc3QgYSByZWN2X3J0Y3Bfc2lua19cJXUgcGFkLiBUaGUKLSAqIHNlc3Npb24gbnVtYmVyIG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSBwYWQgbmFtZS4KLSAqCi0gKiBJZiB5b3Ugd2FudCB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHRvIGdlbmVyYXRlIGFuZCBzZW5kIFJUQ1AgcGFja2V0cywgcmVxdWVzdAotICogdGhlIHNlbmRfcnRjcF9zcmNfXCV1IHBhZCB3aXRoIHRoZSBzZXNzaW9uIG51bWJlciBpbiB0aGUgcGFkIG5hbWUuIFBhY2tldCBwdXNoZWQKLSAqIG9uIHRoaXMgcGFkIGNvbnRhaW4gU1IvUlIgUlRDUCByZXBvcnRzIHRoYXQgc2hvdWxkIGJlIHNlbnQgdG8gYWxsIHBhcnRpY2lwYW50cwotICogaW4gdGhlIHNlc3Npb24uCi0gKgotICogVG8gdXNlICNHc3RSdHBCaW4gYXMgYSBzZW5kZXIsIHJlcXVlc3QgYSBzZW5kX3J0cF9zaW5rX1wldSBwYWQsIHdoaWNoIHdpbGwKLSAqIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2VuZF9ydHBfc3JjX1wldSBwYWQuIElmIHRoZSBzZXNzaW9uIG51bWJlciBpcyBub3QgcHJvdmlkZWQsCi0gKiB0aGUgcGFkIGZyb20gdGhlIGxvd2VzdCBhdmFpbGFibGUgc2Vzc2lvbiB3aWxsIGJlIHJldHVybmVkLiBUaGUgc2Vzc2lvbiBtYW5hZ2VyIHdpbGwgbW9kaWZ5IHRoZQotICogU1NSQyBpbiB0aGUgUlRQIHBhY2tldHMgdG8gaXRzIG93biBTU1JDIGFuZCB3aWwgZm9yd2FyZCB0aGUgcGFja2V0cyBvbiB0aGUKLSAqIHNlbmRfcnRwX3NyY19cJXUgcGFkIGFmdGVyIHVwZGF0aW5nIGl0cyBpbnRlcm5hbCBzdGF0ZS4KLSAqCi0gKiBUaGUgc2Vzc2lvbiBtYW5hZ2VyIG5lZWRzIHRoZSBjbG9jay1yYXRlIG9mIHRoZSBwYXlsb2FkIHR5cGVzIGl0IGlzIGhhbmRsaW5nCi0gKiBhbmQgd2lsbCBzaWduYWwgdGhlICNHc3RSdHBTZXNzaW9uOjpyZXF1ZXN0LXB0LW1hcCBzaWduYWwgd2hlbiBpdCBuZWVkcyBzdWNoIGEKLSAqIG1hcHBpbmcuIE9uZSBjYW4gY2xlYXIgdGhlIGNhY2hlZCB2YWx1ZXMgd2l0aCB0aGUgI0dzdFJ0cFNlc3Npb246OmNsZWFyLXB0LW1hcAotICogc2lnbmFsLgotICoKLSAqIEFjY2VzcyB0byB0aGUgaW50ZXJuYWwgc3RhdGlzdGljcyBvZiBydHBiaW4gaXMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGdldC1pbnRlcm5hbC1zZXNzaW9uIHByb3BlcnR5LiBUaGlzIGFjdGlvbiBzaWduYWwgZ2l2ZXMgYWNjZXNzIHRvIHRoZQotICogUlRQU2Vzc2lvbiBvYmplY3Qgd2hpY2ggZnVydGhlciBwcm92aWRlcyBhY3Rpb24gc2lnbmFscyB0byByZXRyaWV2ZSB0aGUKLSAqIGludGVybmFsIHNvdXJjZSBhbmQgb3RoZXIgc291cmNlcy4KLSAqCi0gKiAjR3N0UnRwQmluIGFsc28gaGFzIHNpZ25hbHMgKCNHc3RSdHBCaW46OnJlcXVlc3QtcnRwLWVuY29kZXIsCi0gKiAjR3N0UnRwQmluOjpyZXF1ZXN0LXJ0cC1kZWNvZGVyLCAjR3N0UnRwQmluOjpyZXF1ZXN0LXJ0Y3AtZW5jb2RlciBhbmQKLSAqICNHc3RSdHBCaW46OnJlcXVlc3QtcnRwLWRlY29kZXIpIHRvIGR5bmFtaWNhbGx5IHJlcXVlc3QgZm9yIFJUUCBhbmQgUlRDUCBlbmNvZGVycwotICogYW5kIGRlY29kZXJzIGluIG9yZGVyIHRvIHN1cHBvcnQgU1JUUC4gVGhlIGVuY29kZXJzIG11c3QgcHJvdmlkZSB0aGUgcGFkcwotICogcnRwX3NpbmtfXCV1IGFuZCBydHBfc3JjX1wldSBmb3IgUlRQIGFuZCBydGNwX3NpbmtfXCV1IGFuZCBydGNwX3NyY19cJXUgZm9yCi0gKiBSVENQLiBUaGUgc2Vzc2lvbiBudW1iZXIgd2lsbCBiZSB1c2VkIGluIHRoZSBwYWQgbmFtZS4gVGhlIGRlY29kZXJzIG11c3QgcHJvdmlkZQotICogcnRwX3NpbmsgYW5kIHJ0cF9zcmMgZm9yIFJUUCBhbmQgcnRjcF9zaW5rIGFuZCBydGNwX3NyYyBmb3IgUlRDUC4gVGhlIGRlY29kZXJzIHdpbGwKLSAqIGJlIHBsYWNlZCBiZWZvcmUgdGhlICNHc3RSdHBTZXNzaW9uIGVsZW1lbnQsIHRodXMgdGhleSBtdXN0IHN1cHBvcnQgU1NSQyBkZW11eGluZwotICogaW50ZXJuYWxseS4KLSAqCi0gKiAjR3N0UnRwQmluIGhhcyBzaWduYWxzICgjR3N0UnRwQmluOjpyZXF1ZXN0LWF1eC1zZW5kZXIgYW5kCi0gKiAjR3N0UnRwQmluOjpyZXF1ZXN0LWF1eC1yZWNlaXZlciB0byBkeW5hbWljYWxseSByZXF1ZXN0IGFuIGVsZW1lbnQgdGhhdCBjYW4gYmUKLSAqIHVzZWQgdG8gY3JlYXRlIG9yIG1lcmdlIGFkZGl0aW9uYWwgUlRQIHN0cmVhbXMuIEFVWCBlbGVtZW50cyBhcmUgbmVlZGVkIHRvCi0gKiBpbXBsZW1lbnQgRkVDIG9yIHJldHJhbnNtaXNzaW9uIChzdWNoIGFzIFJGQyA0NTg4KS4gQW4gQVVYIHNlbmRlciBtdXN0IGhhdmUgb25lCi0gKiBzaW5rX1wldSBwYWQgdGhhdCBtYXRjaGVzIHRoZSBzZXNzaW9uaWQgaW4gdGhlIHNpZ25hbCBhbmQgaXQgc2hvdWxkIGhhdmUgMSBvcgotICogbW9yZSBzcmNfXCV1IHBhZHMuIEZvciBlYWNoIHNyY18lXHUgcGFkLCBhIHNlc3Npb24gd2lsbCBiZSBtYWRlIChpZiBuZWVkZWQpCi0gKiBhbmQgdGhlIHBhZCB3aWxsIGJlIGxpbmtlZCB0byB0aGUgc2Vzc2lvbiBzZW5kX3J0cF9zaW5rIHBhZC4gRWFjaCBzZXNzaW9uIHdpbGwKLSAqIHRoZW4gZXhwb3NlIGl0cyBzb3VyY2UgcGFkIGFzIHNlbmRfcnRwX3NyY19cJXUgb24gI0dzdFJ0cEJpbi4KLSAqIEFuIEFVWCByZWNlaXZlciBoYXMgMSBzcmNfXCV1IHBhZCB0aGF0IG11Y2ggbWF0Y2ggdGhlIHNlc3Npb25pZCBpbiB0aGUgc2lnbmFsCi0gKiBhbmQgMSBvciBtb3JlIHNpbmtfXCV1IHBhZHMuIEEgc2Vzc2lvbiB3aWxsIGJlIG1hZGUgZm9yIGVhY2ggc2lua19cJXUgcGFkCi0gKiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHJlY3ZfcnRwX3NpbmtfXCV1IHBhZCBpcyByZXF1ZXN0ZWQgb24gI0dzdFJ0cEJpbi4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHVkcHNyYyBwb3J0PTUwMDAgY2Fwcz0iYXBwbGljYXRpb24veC1ydHAsIC4uLiIgISAucmVjdl9ydHBfc2lua18wIFwKLSAqICAgICBydHBiaW4gISBydHB0aGVvcmFkZXBheSAhIHRoZW9yYWRlYyAhIHh2aW1hZ2VzaW5rCi0gKiBdfCBSZWNlaXZlIFJUUCBkYXRhIGZyb20gcG9ydCA1MDAwIGFuZCBzZW5kIHRvIHRoZSBzZXNzaW9uIDAgaW4gcnRwYmluLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHJ0cGJpbiBuYW1lPXJ0cGJpbiBcCi0gKiAgICAgICAgIHY0bDJzcmMgISB2aWRlb2NvbnZlcnQgISBmZmVuY19oMjYzICEgcnRwaDI2M3BwYXkgISBydHBiaW4uc2VuZF9ydHBfc2lua18wIFwKLSAqICAgICAgICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0cF9zcmNfMCAhIHVkcHNpbmsgcG9ydD01MDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzAgISB1ZHBzaW5rIHBvcnQ9NTAwMSBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlICAgIFwKLSAqICAgICAgICAgICAgICAgICAgIHVkcHNyYyBwb3J0PTUwMDUgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICAgYXVkaW90ZXN0c3JjICEgYW1ybmJlbmMgISBydHBhbXJwYXkgISBydHBiaW4uc2VuZF9ydHBfc2lua18xICAgICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0cF9zcmNfMSAhIHVkcHNpbmsgcG9ydD01MDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzEgISB1ZHBzaW5rIHBvcnQ9NTAwMyBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlICAgIFwKLSAqICAgICAgICAgICAgICAgICAgIHVkcHNyYyBwb3J0PTUwMDcgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMQotICogXXwgRW5jb2RlIGFuZCBwYXlsb2FkIEgyNjMgdmlkZW8gY2FwdHVyZWQgZnJvbSBhIHY0bDJzcmMuIEVuY29kZSBhbmQgcGF5bG9hZCBBTVIKLSAqIGF1ZGlvIGdlbmVyYXRlZCBmcm9tIGF1ZGlvdGVzdHNyYy4gVGhlIHZpZGVvIGlzIHNlbnQgdG8gc2Vzc2lvbiAwIGluIHJ0cGJpbgotICogYW5kIHRoZSBhdWRpbyBpcyBzZW50IHRvIHNlc3Npb24gMS4gVmlkZW8gcGFja2V0cyBhcmUgc2VudCBvbiBVRFAgcG9ydCA1MDAwCi0gKiBhbmQgYXVkaW8gcGFja2V0cyBvbiBwb3J0IDUwMDIuIFRoZSB2aWRlbyBSVENQIHBhY2tldHMgZm9yIHNlc3Npb24gMCBhcmUgc2VudAotICogb24gcG9ydCA1MDAxIGFuZCB0aGUgYXVkaW8gUlRDUCBwYWNrZXRzIGZvciBzZXNzaW9uIDAgYXJlIHNlbnQgb24gcG9ydCA1MDAzLgotICogUlRDUCBwYWNrZXRzIGZvciBzZXNzaW9uIDAgYXJlIHJlY2VpdmVkIG9uIHBvcnQgNTAwNSBhbmQgUlRDUCBmb3Igc2Vzc2lvbiAxCi0gKiBpcyByZWNlaXZlZCBvbiBwb3J0IDUwMDcuIFNpbmNlIFJUQ1AgcGFja2V0cyBmcm9tIHRoZSBzZW5kZXIgc2hvdWxkIGJlIHNlbnQKLSAqIGFzIHNvb24gYXMgcG9zc2libGUgYW5kIGRvIG5vdCBwYXJ0aWNpcGF0ZSBpbiBwcmVyb2xsLCBzeW5jPWZhbHNlIGFuZAotICogYXN5bmM9ZmFsc2UgaXMgY29uZmlndXJlZCBvbiB1ZHBzaW5rCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgcnRwYmluIG5hbWU9cnRwYmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgIHVkcHNyYyBjYXBzPSJhcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKXZpZGVvLGNsb2NrLXJhdGU9KGludCk5MDAwMCxlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0xOTk4IiBcCi0gKiAgICAgICAgICAgICBwb3J0PTUwMDAgISBydHBiaW4ucmVjdl9ydHBfc2lua18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKiAgICAgICAgIHJ0cGJpbi4gISBydHBoMjYzcGRlcGF5ICEgZmZkZWNfaDI2MyAhIHh2aW1hZ2VzaW5rICAgICAgICAgICAgICAgICAgICBcCi0gKiAgICAgIHVkcHNyYyBwb3J0PTUwMDEgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gKiAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzAgISB1ZHBzaW5rIHBvcnQ9NTAwNSBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlICAgICAgICBcCi0gKiAgICAgdWRwc3JjIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpYXVkaW8sY2xvY2stcmF0ZT0oaW50KTgwMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKUFNUixlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLG9jdGV0LWFsaWduPShzdHJpbmcpMSIgXAotICogICAgICAgICAgICAgcG9ydD01MDAyICEgcnRwYmluLnJlY3ZfcnRwX3NpbmtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICAgICBydHBiaW4uICEgcnRwYW1yZGVwYXkgISBhbXJuYmRlYyAhIGFsc2FzaW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICB1ZHBzcmMgcG9ydD01MDAzICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18xICEgdWRwc2luayBwb3J0PTUwMDcgc3luYz1mYWxzZSBhc3luYz1mYWxzZQotICogXXwgUmVjZWl2ZSBIMjYzIG9uIHBvcnQgNTAwMCwgc2VuZCBpdCB0aHJvdWdoIHJ0cGJpbiBpbiBzZXNzaW9uIDAsIGRlcGF5bG9hZCwKLSAqIGRlY29kZSBhbmQgZGlzcGxheSB0aGUgdmlkZW8uCi0gKiBSZWNlaXZlIEFNUiBvbiBwb3J0IDUwMDIsIHNlbmQgaXQgdGhyb3VnaCBydHBiaW4gaW4gc2Vzc2lvbiAxLCBkZXBheWxvYWQsCi0gKiBkZWNvZGUgYW5kIHBsYXkgdGhlIGF1ZGlvLgotICogUmVjZWl2ZSBzZXJ2ZXIgUlRDUCBwYWNrZXRzIGZvciBzZXNzaW9uIDAgb24gcG9ydCA1MDAxIGFuZCBSVENQIHBhY2tldHMgZm9yCi0gKiBzZXNzaW9uIDEgb24gcG9ydCA1MDAzLiBUaGVzZSBwYWNrZXRzIHdpbGwgYmUgdXNlZCBmb3Igc2Vzc2lvbiBtYW5hZ2VtZW50IGFuZAotICogc3luY2hyb25pc2F0aW9uLgotICogU2VuZCBSVENQIHJlcG9ydHMgZm9yIHNlc3Npb24gMCBvbiBwb3J0IDUwMDUgYW5kIFJUQ1AgcmVwb3J0cyBmb3Igc2Vzc2lvbiAxCi0gKiBvbiBwb3J0IDUwMDcuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0Y3BidWZmZXIuaD4KLQotI2luY2x1ZGUgImdzdHJ0cGJpbi5oIgotI2luY2x1ZGUgInJ0cHNlc3Npb24uaCIKLSNpbmNsdWRlICJnc3RydHBzZXNzaW9uLmgiCi0jaW5jbHVkZSAiZ3N0cnRwaml0dGVyYnVmZmVyLmgiCi0KLSNpbmNsdWRlIDxnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX2Jpbl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcnRwX2Jpbl9kZWJ1ZwotCi0vKiBzaW5rIHBhZHMgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBydHBiaW5fcmVjdl9ydHBfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJyZWN2X3J0cF9zaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwO2FwcGxpY2F0aW9uL3gtc3J0cCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cGJpbl9yZWN2X3J0Y3Bfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJyZWN2X3J0Y3Bfc2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0Y3A7YXBwbGljYXRpb24veC1zcnRjcCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cGJpbl9zZW5kX3J0cF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2VuZF9ydHBfc2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpCi0gICAgKTsKLQotLyogc3JjIHBhZHMgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBydHBiaW5fcmVjdl9ydHBfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgicmVjdl9ydHBfc3JjXyV1XyV1XyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cGJpbl9zZW5kX3J0Y3Bfc3JjX3RlbXBsYXRlID0KLSAgICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNlbmRfcnRjcF9zcmNfJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0Y3A7YXBwbGljYXRpb24veC1zcnRjcCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cGJpbl9zZW5kX3J0cF9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2VuZF9ydHBfc3JjXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cDthcHBsaWNhdGlvbi94LXNydHAiKQotICAgICk7Ci0KLSNkZWZpbmUgR1NUX1JUUF9CSU5fR0VUX1BSSVZBVEUob2JqKSAgXAotICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG9iaiksIEdTVF9UWVBFX1JUUF9CSU4sIEdzdFJ0cEJpblByaXZhdGUpKQotCi0jZGVmaW5lIEdTVF9SVFBfQklOX0xPQ0soYmluKSAgIGdfbXV0ZXhfbG9jayAoJihiaW4pLT5wcml2LT5iaW5fbG9jaykKLSNkZWZpbmUgR1NUX1JUUF9CSU5fVU5MT0NLKGJpbikgZ19tdXRleF91bmxvY2sgKCYoYmluKS0+cHJpdi0+YmluX2xvY2spCi0KLS8qIGxvY2sgdG8gcHJvdGVjdCBkeW5hbWljIGNhbGxiYWNrcywgbGlrZSBwYWQtYWRkZWQgYW5kIG5ldyBzc3JjLiAqLwotI2RlZmluZSBHU1RfUlRQX0JJTl9EWU5fTE9DSyhiaW4pICAgIGdfbXV0ZXhfbG9jayAoJihiaW4pLT5wcml2LT5keW5fbG9jaykKLSNkZWZpbmUgR1NUX1JUUF9CSU5fRFlOX1VOTE9DSyhiaW4pICBnX211dGV4X3VubG9jayAoJihiaW4pLT5wcml2LT5keW5fbG9jaykKLQotLyogbG9jayBmb3Igc2h1dGRvd24gKi8KLSNkZWZpbmUgR1NUX1JUUF9CSU5fU0hVVERPV05fTE9DSyhiaW4sbGFiZWwpICAgICBcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoZ19hdG9taWNfaW50X2dldCAoJmJpbi0+cHJpdi0+c2h1dGRvd24pKSAgIFwKLSAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9SVFBfQklOX0RZTl9MT0NLIChiaW4pOyAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoZ19hdG9taWNfaW50X2dldCAoJmJpbi0+cHJpdi0+c2h1dGRvd24pKSB7IFwKLSAgICBHU1RfUlRQX0JJTl9EWU5fVU5MT0NLIChiaW4pOyAgICAgICAgICAgICAgICBcCi0gICAgZ290byBsYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0vKiB1bmxvY2sgZm9yIHNodXRkb3duICovCi0jZGVmaW5lIEdTVF9SVFBfQklOX1NIVVRET1dOX1VOTE9DSyhiaW4pICAgICAgICAgXAotICBHU1RfUlRQX0JJTl9EWU5fVU5MT0NLIChiaW4pOyAgICAgICAgICAgICAgICAgIFwKLQotc3RydWN0IF9Hc3RSdHBCaW5Qcml2YXRlCi17Ci0gIEdNdXRleCBiaW5fbG9jazsKLQotICAvKiBsb2NrIHByb3RlY3RpbmcgZHluYW1pYyBhZGRpbmcvcmVtb3ZpbmcgKi8KLSAgR011dGV4IGR5bl9sb2NrOwotCi0gIC8qIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duIG9yIG5vdCAqLwotICBnaW50IHNodXRkb3duOwotCi0gIGdib29sZWFuIGF1dG9yZW1vdmU7Ci0KLSAgLyogTlRQIHRpbWUgaW4gbnMgb2YgbGFzdCBTUiBzeW5jIHVzZWQgKi8KLSAgZ3VpbnQ2NCBsYXN0X250cG5zdGltZTsKLQotICAvKiBsaXN0IG9mIGV4dHJhIGVsZW1lbnRzICovCi0gIEdMaXN0ICplbGVtZW50czsKLX07Ci0KLS8qIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgU0lHTkFMX1JFUVVFU1RfUFRfTUFQLAotICBTSUdOQUxfUEFZTE9BRF9UWVBFX0NIQU5HRSwKLSAgU0lHTkFMX0NMRUFSX1BUX01BUCwKLSAgU0lHTkFMX1JFU0VUX1NZTkMsCi0gIFNJR05BTF9HRVRfU0VTU0lPTiwKLSAgU0lHTkFMX0dFVF9JTlRFUk5BTF9TRVNTSU9OLAotCi0gIFNJR05BTF9PTl9ORVdfU1NSQywKLSAgU0lHTkFMX09OX1NTUkNfQ09MTElTSU9OLAotICBTSUdOQUxfT05fU1NSQ19WQUxJREFURUQsCi0gIFNJR05BTF9PTl9TU1JDX0FDVElWRSwKLSAgU0lHTkFMX09OX1NTUkNfU0RFUywKLSAgU0lHTkFMX09OX0JZRV9TU1JDLAotICBTSUdOQUxfT05fQllFX1RJTUVPVVQsCi0gIFNJR05BTF9PTl9USU1FT1VULAotICBTSUdOQUxfT05fU0VOREVSX1RJTUVPVVQsCi0gIFNJR05BTF9PTl9OUFRfU1RPUCwKLQotICBTSUdOQUxfUkVRVUVTVF9SVFBfRU5DT0RFUiwKLSAgU0lHTkFMX1JFUVVFU1RfUlRQX0RFQ09ERVIsCi0gIFNJR05BTF9SRVFVRVNUX1JUQ1BfRU5DT0RFUiwKLSAgU0lHTkFMX1JFUVVFU1RfUlRDUF9ERUNPREVSLAotCi0gIFNJR05BTF9ORVdfSklUVEVSQlVGRkVSLAotCi0gIFNJR05BTF9SRVFVRVNUX0FVWF9TRU5ERVIsCi0gIFNJR05BTF9SRVFVRVNUX0FVWF9SRUNFSVZFUiwKLQotICBTSUdOQUxfT05fTkVXX1NFTkRFUl9TU1JDLAotICBTSUdOQUxfT05fU0VOREVSX1NTUkNfQUNUSVZFLAotCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfTEFURU5DWV9NUyAgICAgICAgICAgMjAwCi0jZGVmaW5lIERFRkFVTFRfRFJPUF9PTl9MQVRFTkNZICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9TREVTICAgICAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfRE9fTE9TVCAgICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9JR05PUkVfUFQgICAgICAgICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX05UUF9TWU5DICAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfQVVUT1JFTU9WRSAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9CVUZGRVJfTU9ERSAgICAgICAgICBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX1NMQVZFCi0jZGVmaW5lIERFRkFVTFRfVVNFX1BJUEVMSU5FX0NMT0NLICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9SVENQX1NZTkMgICAgICAgICAgICBHU1RfUlRQX0JJTl9SVENQX1NZTkNfQUxXQVlTCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9TWU5DX0lOVEVSVkFMICAgMAotI2RlZmluZSBERUZBVUxUX0RPX1NZTkNfRVZFTlQgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfRE9fUkVUUkFOU01JU1NJT04gICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9SVFBfUFJPRklMRSAgICAgICAgICBHU1RfUlRQX1BST0ZJTEVfQVZQCi0jZGVmaW5lIERFRkFVTFRfTlRQX1RJTUVfU09VUkNFICAgICAgR1NUX1JUUF9OVFBfVElNRV9TT1VSQ0VfTlRQCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9TWU5DX1NFTkRfVElNRSAgVFJVRQotI2RlZmluZSBERUZBVUxUX01BWF9SVENQX1JUUF9USU1FX0RJRkYgMTAwMAotI2RlZmluZSBERUZBVUxUX01BWF9EUk9QT1VUX1RJTUUgICAgIDYwMDAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX01JU09SREVSX1RJTUUgICAgMjAwMAotI2RlZmluZSBERUZBVUxUX1JGQzcyNzNfU1lOQyAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NUUkVBTVMgICAgICAgICAgR19NQVhVSU5UCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0xBVEVOQ1ksCi0gIFBST1BfRFJPUF9PTl9MQVRFTkNZLAotICBQUk9QX1NERVMsCi0gIFBST1BfRE9fTE9TVCwKLSAgUFJPUF9JR05PUkVfUFQsCi0gIFBST1BfTlRQX1NZTkMsCi0gIFBST1BfUlRDUF9TWU5DLAotICBQUk9QX1JUQ1BfU1lOQ19JTlRFUlZBTCwKLSAgUFJPUF9BVVRPUkVNT1ZFLAotICBQUk9QX0JVRkZFUl9NT0RFLAotICBQUk9QX1VTRV9QSVBFTElORV9DTE9DSywKLSAgUFJPUF9ET19TWU5DX0VWRU5ULAotICBQUk9QX0RPX1JFVFJBTlNNSVNTSU9OLAotICBQUk9QX1JUUF9QUk9GSUxFLAotICBQUk9QX05UUF9USU1FX1NPVVJDRSwKLSAgUFJPUF9SVENQX1NZTkNfU0VORF9USU1FLAotICBQUk9QX01BWF9SVENQX1JUUF9USU1FX0RJRkYsCi0gIFBST1BfTUFYX0RST1BPVVRfVElNRSwKLSAgUFJPUF9NQVhfTUlTT1JERVJfVElNRSwKLSAgUFJPUF9SRkM3MjczX1NZTkMsCi0gIFBST1BfTUFYX1NUUkVBTVMKLX07Ci0KLSNkZWZpbmUgR1NUX1JUUF9CSU5fUlRDUF9TWU5DX1RZUEUgKGdzdF9ydHBfYmluX3J0Y3Bfc3luY19nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfcnRwX2Jpbl9ydGNwX3N5bmNfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBydGNwX3N5bmNfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHJ0Y3Bfc3luY190eXBlc1tdID0gewotICAgIHtHU1RfUlRQX0JJTl9SVENQX1NZTkNfQUxXQVlTLCAiYWx3YXlzIiwgImFsd2F5cyJ9LAotICAgIHtHU1RfUlRQX0JJTl9SVENQX1NZTkNfSU5JVElBTCwgImluaXRpYWwiLCAiaW5pdGlhbCJ9LAotICAgIHtHU1RfUlRQX0JJTl9SVENQX1NZTkNfUlRQLCAicnRwLWluZm8iLCAicnRwLWluZm8ifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFydGNwX3N5bmNfdHlwZSkgewotICAgIHJ0Y3Bfc3luY190eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFJUQ1BTeW5jIiwgcnRjcF9zeW5jX3R5cGVzKTsKLSAgfQotICByZXR1cm4gcnRjcF9zeW5jX3R5cGU7Ci19Ci0KLS8qIGhlbHBlciBvYmplY3RzICovCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQmluU2Vzc2lvbiBHc3RSdHBCaW5TZXNzaW9uOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEJpblN0cmVhbSBHc3RSdHBCaW5TdHJlYW07Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQmluQ2xpZW50IEdzdFJ0cEJpbkNsaWVudDsKLQotc3RhdGljIGd1aW50IGdzdF9ydHBfYmluX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyBHc3RDYXBzICpwdF9tYXBfcmVxdWVzdGVkIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ3VpbnQgcHQsCi0gICAgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3Npb24pOwotc3RhdGljIHZvaWQgcGF5bG9hZF90eXBlX2NoYW5nZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGd1aW50IHB0LAotICAgIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKTsKLXN0YXRpYyB2b2lkIHJlbW92ZV9yZWN2X3J0cCAoR3N0UnRwQmluICogcnRwYmluLCBHc3RSdHBCaW5TZXNzaW9uICogc2Vzc2lvbik7Ci1zdGF0aWMgdm9pZCByZW1vdmVfcmVjdl9ydGNwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKTsKLXN0YXRpYyB2b2lkIHJlbW92ZV9zZW5kX3J0cCAoR3N0UnRwQmluICogcnRwYmluLCBHc3RSdHBCaW5TZXNzaW9uICogc2Vzc2lvbik7Ci1zdGF0aWMgdm9pZCByZW1vdmVfcnRjcCAoR3N0UnRwQmluICogcnRwYmluLCBHc3RSdHBCaW5TZXNzaW9uICogc2Vzc2lvbik7Ci1zdGF0aWMgdm9pZCBmcmVlX2NsaWVudCAoR3N0UnRwQmluQ2xpZW50ICogY2xpZW50LCBHc3RSdHBCaW4gKiBiaW4pOwotc3RhdGljIHZvaWQgZnJlZV9zdHJlYW0gKEdzdFJ0cEJpblN0cmVhbSAqIHN0cmVhbSwgR3N0UnRwQmluICogYmluKTsKLQotLyogTWFuYWdlcyB0aGUgUlRQIHN0cmVhbSBmb3Igb25lIFNTUkMuCi0gKgotICogV2UgcGlwZSB0aGUgc3RyZWFtIChjb21taW5nIGZyb20gdGhlIFNTUkMgZGVtdXhlcikgaW50byBhIGppdHRlcmJ1ZmZlci4KLSAqIElmIHdlIHNlZSBhbiBTREVTIFJUQ1AgcGFja2V0IHRoYXQgbGlua3MgbXVsdGlwbGUgU1NSQ3MgdG9nZXRoZXIgYmFzZWQgb24gYQotICogY29tbW9uIENOQU1FLCB3ZSBjcmVhdGUgYSBHc3RSdHBCaW5DbGllbnQgc3RydWN0dXJlIHRvIGdyb3VwIHRoZSBTU1JDcwotICogdG9nZXRoZXIgKHNlZSBiZWxvdykuCi0gKi8KLXN0cnVjdCBfR3N0UnRwQmluU3RyZWFtCi17Ci0gIC8qIHRoZSBTU1JDIG9mIHRoaXMgc3RyZWFtICovCi0gIGd1aW50MzIgc3NyYzsKLQotICAvKiBwYXJlbnQgYmluICovCi0gIEdzdFJ0cEJpbiAqYmluOwotCi0gIC8qIHRoZSBzZXNzaW9uIHRoaXMgU1NSQyBiZWxvbmdzIHRvICovCi0gIEdzdFJ0cEJpblNlc3Npb24gKnNlc3Npb247Ci0KLSAgLyogdGhlIGppdHRlcmJ1ZmZlciBvZiB0aGUgU1NSQyAqLwotICBHc3RFbGVtZW50ICpidWZmZXI7Ci0gIGd1bG9uZyBidWZmZXJfaGFuZGxlc3luY19zaWc7Ci0gIGd1bG9uZyBidWZmZXJfcHRyZXFfc2lnOwotICBndWxvbmcgYnVmZmVyX250cHN0b3Bfc2lnOwotICBnaW50IHBlcmNlbnQ7Ci0KLSAgLyogdGhlIFBUIGRlbXV4ZXIgb2YgdGhlIFNTUkMgKi8KLSAgR3N0RWxlbWVudCAqZGVtdXg7Ci0gIGd1bG9uZyBkZW11eF9uZXdwYWRfc2lnOwotICBndWxvbmcgZGVtdXhfcGFkcmVtb3ZlZF9zaWc7Ci0gIGd1bG9uZyBkZW11eF9wdHJlcV9zaWc7Ci0gIGd1bG9uZyBkZW11eF9wdGNoYW5nZV9zaWc7Ci0KLSAgLyogaWYgd2UgaGF2ZSBjYWxjdWxhdGVkIGEgdmFsaWQgcnRfZGVsdGEgZm9yIHRoaXMgc3RyZWFtICovCi0gIGdib29sZWFuIGhhdmVfc3luYzsKLSAgLyogbWFwcGluZyB0byBsb2NhbCBSVFAgYW5kIE5UUCB0aW1lICovCi0gIGdpbnQ2NCBydF9kZWx0YTsKLSAgZ2ludDY0IHJ0cF9kZWx0YTsKLSAgLyogYmFzZSBydHB0aW1lIGluIGdzdCB0aW1lICovCi0gIGdpbnQ2NCBjbG9ja19iYXNlOwotfTsKLQotI2RlZmluZSBHU1RfUlRQX1NFU1NJT05fTE9DSyhzZXNzKSAgIGdfbXV0ZXhfbG9jayAoJihzZXNzKS0+bG9jaykKLSNkZWZpbmUgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyhzZXNzKSBnX211dGV4X3VubG9jayAoJihzZXNzKS0+bG9jaykKLQotLyogTWFuYWdlcyB0aGUgcmVjZWl2aW5nIGVuZCBvZiB0aGUgcGFja2V0cy4KLSAqCi0gKiBUaGVyZSBpcyBvbmUgc3VjaCBzdHJ1Y3R1cmUgZm9yIGVhY2ggUlRQIHNlc3Npb24gKGF1ZGlvL3ZpZGVvLy4uLikuCi0gKiBXZSBnZXQgdGhlIFJUUC9SVENQIHBhY2tldHMgYW5kIHN0dWZmIHRoZW0gaW50byB0aGUgc2Vzc2lvbiBtYW5hZ2VyLiBGcm9tCi0gKiB0aGVyZSB0aGV5IGFyZSBwdXNoZWQgaW50byBhbiBTU1JDIGRlbXV4ZXIgdGhhdCBzcGxpdHMgdGhlIHN0cmVhbSBiYXNlZCBvbgotICogU1NSQy4gRWFjaCBvZiB0aGUgU1NSQyBzdHJlYW1zIGdvIGludG8gdGhlaXIgb3duIGppdHRlcmJ1ZmZlciAobWFuYWdlZCB3aXRoCi0gKiB0aGUgR3N0UnRwQmluU3RyZWFtIGFib3ZlKS4KLSAqLwotc3RydWN0IF9Hc3RSdHBCaW5TZXNzaW9uCi17Ci0gIC8qIHNlc3Npb24gaWQgKi8KLSAgZ2ludCBpZDsKLSAgLyogdGhlIHBhcmVudCBiaW4gKi8KLSAgR3N0UnRwQmluICpiaW47Ci0gIC8qIHRoZSBzZXNzaW9uIGVsZW1lbnQgKi8KLSAgR3N0RWxlbWVudCAqc2Vzc2lvbjsKLSAgLyogdGhlIFNTUkMgZGVtdXhlciAqLwotICBHc3RFbGVtZW50ICpkZW11eDsKLSAgZ3Vsb25nIGRlbXV4X25ld3BhZF9zaWc7Ci0gIGd1bG9uZyBkZW11eF9wYWRyZW1vdmVkX3NpZzsKLQotICBHTXV0ZXggbG9jazsKLQotICAvKiBsaXN0IG9mIEdzdFJ0cEJpblN0cmVhbSAqLwotICBHU0xpc3QgKnN0cmVhbXM7Ci0KLSAgLyogbGlzdCBvZiBlbGVtZW50cyAqLwotICBHU0xpc3QgKmVsZW1lbnRzOwotCi0gIC8qIG1hcHBpbmcgb2YgcGF5bG9hZCB0eXBlIHRvIGNhcHMgKi8KLSAgR0hhc2hUYWJsZSAqcHRtYXA7Ci0KLSAgLyogdGhlIHBhZHMgb2YgdGhlIHNlc3Npb24gKi8KLSAgR3N0UGFkICpyZWN2X3J0cF9zaW5rOwotICBHc3RQYWQgKnJlY3ZfcnRwX3NpbmtfZ2hvc3Q7Ci0gIEdzdFBhZCAqcmVjdl9ydHBfc3JjOwotICBHc3RQYWQgKnJlY3ZfcnRjcF9zaW5rOwotICBHc3RQYWQgKnJlY3ZfcnRjcF9zaW5rX2dob3N0OwotICBHc3RQYWQgKnN5bmNfc3JjOwotICBHc3RQYWQgKnNlbmRfcnRwX3Npbms7Ci0gIEdzdFBhZCAqc2VuZF9ydHBfc2lua19naG9zdDsKLSAgR3N0UGFkICpzZW5kX3J0cF9zcmM7Ci0gIEdzdFBhZCAqc2VuZF9ydHBfc3JjX2dob3N0OwotICBHc3RQYWQgKnNlbmRfcnRjcF9zcmM7Ci0gIEdzdFBhZCAqc2VuZF9ydGNwX3NyY19naG9zdDsKLX07Ci0KLS8qIE1hbmFnZXMgdGhlIFJUUCBzdHJlYW1zIHRoYXQgY29tZSBmcm9tIG9uZSBjbGllbnQgYW5kIHNob3VsZCB0aGVyZWZvcmUgYmUKLSAqIHN5bmNocm9uaXplZC4KLSAqLwotc3RydWN0IF9Hc3RSdHBCaW5DbGllbnQKLXsKLSAgLyogdGhlIGNvbW1vbiBDTkFNRSBmb3IgdGhlIHN0cmVhbXMgKi8KLSAgZ2NoYXIgKmNuYW1lOwotICBndWludCBjbmFtZV9sZW47Ci0KLSAgLyogdGhlIHN0cmVhbXMgKi8KLSAgZ3VpbnQgbnN0cmVhbXM7Ci0gIEdTTGlzdCAqc3RyZWFtczsKLX07Ci0KLS8qIGZpbmQgYSBzZXNzaW9uIHdpdGggdGhlIGdpdmVuIGlkLiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJUUF9CSU5fTE9DSyAqLwotc3RhdGljIEdzdFJ0cEJpblNlc3Npb24gKgotZmluZF9zZXNzaW9uX2J5X2lkIChHc3RSdHBCaW4gKiBydHBiaW4sIGdpbnQgaWQpCi17Ci0gIEdTTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBydHBiaW4tPnNlc3Npb25zOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJ0cEJpblNlc3Npb24gKnNlc3MgPSAoR3N0UnRwQmluU2Vzc2lvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKHNlc3MtPmlkID09IGlkKQotICAgICAgcmV0dXJuIHNlc3M7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGZpbmQgYSBzZXNzaW9uIHdpdGggdGhlIGdpdmVuIHJlcXVlc3QgcGFkLiBNdXN0IGJlIGNhbGxlZCB3aXRoIFJUUF9CSU5fTE9DSyAqLwotc3RhdGljIEdzdFJ0cEJpblNlc3Npb24gKgotZmluZF9zZXNzaW9uX2J5X3BhZCAoR3N0UnRwQmluICogcnRwYmluLCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdTTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBydHBiaW4tPnNlc3Npb25zOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJ0cEJpblNlc3Npb24gKnNlc3MgPSAoR3N0UnRwQmluU2Vzc2lvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKChzZXNzLT5yZWN2X3J0cF9zaW5rX2dob3N0ID09IHBhZCkgfHwKLSAgICAgICAgKHNlc3MtPnJlY3ZfcnRjcF9zaW5rX2dob3N0ID09IHBhZCkgfHwKLSAgICAgICAgKHNlc3MtPnNlbmRfcnRwX3NpbmtfZ2hvc3QgPT0gcGFkKQotICAgICAgICB8fCAoc2Vzcy0+c2VuZF9ydGNwX3NyY19naG9zdCA9PSBwYWQpKQotICAgICAgcmV0dXJuIHNlc3M7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9uZXdfc3NyYyAoR3N0RWxlbWVudCAqIHNlc3Npb24sIGd1aW50MzIgc3NyYywgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MtPmJpbiwgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fTkVXX1NTUkNdLCAwLAotICAgICAgc2Vzcy0+aWQsIHNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fc3NyY19jb2xsaXNpb24gKEdzdEVsZW1lbnQgKiBzZXNzaW9uLCBndWludDMyIHNzcmMsIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzKQotewotICBnX3NpZ25hbF9lbWl0IChzZXNzLT5iaW4sIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX1NTUkNfQ09MTElTSU9OXSwgMCwKLSAgICAgIHNlc3MtPmlkLCBzc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3NzcmNfdmFsaWRhdGVkIChHc3RFbGVtZW50ICogc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjLCBHc3RSdHBCaW5TZXNzaW9uICogc2VzcykKLXsKLSAgZ19zaWduYWxfZW1pdCAoc2Vzcy0+YmluLCBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX1ZBTElEQVRFRF0sIDAsCi0gICAgICBzZXNzLT5pZCwgc3NyYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX2FjdGl2ZSAoR3N0RWxlbWVudCAqIHNlc3Npb24sIGd1aW50MzIgc3NyYywgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MtPmJpbiwgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19BQ1RJVkVdLCAwLAotICAgICAgc2Vzcy0+aWQsIHNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fc3NyY19zZGVzIChHc3RFbGVtZW50ICogc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjLCBHc3RSdHBCaW5TZXNzaW9uICogc2VzcykKLXsKLSAgZ19zaWduYWxfZW1pdCAoc2Vzcy0+YmluLCBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX1NERVNdLCAwLAotICAgICAgc2Vzcy0+aWQsIHNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fYnllX3NzcmMgKEdzdEVsZW1lbnQgKiBzZXNzaW9uLCBndWludDMyIHNzcmMsIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzKQotewotICBnX3NpZ25hbF9lbWl0IChzZXNzLT5iaW4sIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX0JZRV9TU1JDXSwgMCwKLSAgICAgIHNlc3MtPmlkLCBzc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2J5ZV90aW1lb3V0IChHc3RFbGVtZW50ICogc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjLCBHc3RSdHBCaW5TZXNzaW9uICogc2VzcykKLXsKLSAgZ19zaWduYWxfZW1pdCAoc2Vzcy0+YmluLCBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9CWUVfVElNRU9VVF0sIDAsCi0gICAgICBzZXNzLT5pZCwgc3NyYyk7Ci0KLSAgaWYgKHNlc3MtPmJpbi0+cHJpdi0+YXV0b3JlbW92ZSkKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHNlc3MtPmRlbXV4LCAiY2xlYXItc3NyYyIsIHNzcmMsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotb25fdGltZW91dCAoR3N0RWxlbWVudCAqIHNlc3Npb24sIGd1aW50MzIgc3NyYywgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MtPmJpbiwgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fVElNRU9VVF0sIDAsCi0gICAgICBzZXNzLT5pZCwgc3NyYyk7Ci0KLSAgaWYgKHNlc3MtPmJpbi0+cHJpdi0+YXV0b3JlbW92ZSkKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHNlc3MtPmRlbXV4LCAiY2xlYXItc3NyYyIsIHNzcmMsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotb25fc2VuZGVyX3RpbWVvdXQgKEdzdEVsZW1lbnQgKiBzZXNzaW9uLCBndWludDMyIHNzcmMsIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzKQotewotICBnX3NpZ25hbF9lbWl0IChzZXNzLT5iaW4sIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9USU1FT1VUXSwgMCwKLSAgICAgIHNlc3MtPmlkLCBzc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX25wdF9zdG9wIChHc3RFbGVtZW50ICogamJ1ZiwgR3N0UnRwQmluU3RyZWFtICogc3RyZWFtKQotewotICBnX3NpZ25hbF9lbWl0IChzdHJlYW0tPmJpbiwgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fTlBUX1NUT1BdLCAwLAotICAgICAgc3RyZWFtLT5zZXNzaW9uLT5pZCwgc3RyZWFtLT5zc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX25ld19zZW5kZXJfc3NyYyAoR3N0RWxlbWVudCAqIHNlc3Npb24sIGd1aW50MzIgc3NyYywgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MtPmJpbiwgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fTkVXX1NFTkRFUl9TU1JDXSwgMCwKLSAgICAgIHNlc3MtPmlkLCBzc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3NlbmRlcl9zc3JjX2FjdGl2ZSAoR3N0RWxlbWVudCAqIHNlc3Npb24sIGd1aW50MzIgc3NyYywKLSAgICBHc3RSdHBCaW5TZXNzaW9uICogc2VzcykKLXsKLSAgZ19zaWduYWxfZW1pdCAoc2Vzcy0+YmluLCBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9TRU5ERVJfU1NSQ19BQ1RJVkVdLAotICAgICAgMCwgc2Vzcy0+aWQsIHNzcmMpOwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBTRVNTSU9OIGxvY2sgKi8KLXN0YXRpYyBHc3RSdHBCaW5TdHJlYW0gKgotZmluZF9zdHJlYW1fYnlfc3NyYyAoR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3Npb24sIGd1aW50MzIgc3NyYykKLXsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIGZvciAod2FsayA9IHNlc3Npb24tPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UnRwQmluU3RyZWFtICpzdHJlYW0gPSAoR3N0UnRwQmluU3RyZWFtICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoc3RyZWFtLT5zc3JjID09IHNzcmMpCi0gICAgICByZXR1cm4gc3RyZWFtOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotc3NyY19kZW11eF9wYWRfcmVtb3ZlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGd1aW50IHNzcmMsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RSdHBCaW5TZXNzaW9uICogc2Vzc2lvbikKLXsKLSAgR3N0UnRwQmluU3RyZWFtICpzdHJlYW0gPSBOVUxMOwotICBHc3RSdHBCaW4gKnJ0cGJpbjsKLQotICBydHBiaW4gPSBzZXNzaW9uLT5iaW47Ci0KLSAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLQotICBHU1RfUlRQX1NFU1NJT05fTE9DSyAoc2Vzc2lvbik7Ci0gIGlmICgoc3RyZWFtID0gZmluZF9zdHJlYW1fYnlfc3NyYyAoc2Vzc2lvbiwgc3NyYykpKQotICAgIHNlc3Npb24tPnN0cmVhbXMgPSBnX3NsaXN0X3JlbW92ZSAoc2Vzc2lvbi0+c3RyZWFtcywgc3RyZWFtKTsKLSAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzc2lvbik7Ci0KLSAgaWYgKHN0cmVhbSkKLSAgICBmcmVlX3N0cmVhbSAoc3RyZWFtLCBydHBiaW4pOwotCi0gIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLX0KLQotLyogY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIHRoZSBnaXZlbiBpZC4gIE11c3QgYmUgY2FsbGVkIHdpdGggUlRQX0JJTl9MT0NLICovCi1zdGF0aWMgR3N0UnRwQmluU2Vzc2lvbiAqCi1jcmVhdGVfc2Vzc2lvbiAoR3N0UnRwQmluICogcnRwYmluLCBnaW50IGlkKQotewotICBHc3RSdHBCaW5TZXNzaW9uICpzZXNzOwotICBHc3RFbGVtZW50ICpzZXNzaW9uLCAqZGVtdXg7Ci0gIEdzdFN0YXRlIHRhcmdldDsKLQotICBpZiAoIShzZXNzaW9uID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwc2Vzc2lvbiIsIE5VTEwpKSkKLSAgICBnb3RvIG5vX3Nlc3Npb247Ci0KLSAgaWYgKCEoZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBzc3JjZGVtdXgiLCBOVUxMKSkpCi0gICAgZ290byBub19kZW11eDsKLQotICBzZXNzID0gZ19uZXcwIChHc3RSdHBCaW5TZXNzaW9uLCAxKTsKLSAgZ19tdXRleF9pbml0ICgmc2Vzcy0+bG9jayk7Ci0gIHNlc3MtPmlkID0gaWQ7Ci0gIHNlc3MtPmJpbiA9IHJ0cGJpbjsKLSAgc2Vzcy0+c2Vzc2lvbiA9IHNlc3Npb247Ci0gIHNlc3MtPmRlbXV4ID0gZGVtdXg7Ci0gIHNlc3MtPnB0bWFwID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY2Fwc191bnJlZik7Ci0gIHJ0cGJpbi0+c2Vzc2lvbnMgPSBnX3NsaXN0X3ByZXBlbmQgKHJ0cGJpbi0+c2Vzc2lvbnMsIHNlc3MpOwotCi0gIC8qIGNvbmZpZ3VyZSBTREVTIGl0ZW1zICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnRwYmluKTsKLSAgZ19vYmplY3Rfc2V0IChzZXNzaW9uLCAic2RlcyIsIHJ0cGJpbi0+c2RlcywgInJ0cC1wcm9maWxlIiwKLSAgICAgIHJ0cGJpbi0+cnRwX3Byb2ZpbGUsICJydGNwLXN5bmMtc2VuZC10aW1lIiwgcnRwYmluLT5ydGNwX3N5bmNfc2VuZF90aW1lLAotICAgICAgTlVMTCk7Ci0gIGlmIChydHBiaW4tPnVzZV9waXBlbGluZV9jbG9jaykKLSAgICBnX29iamVjdF9zZXQgKHNlc3Npb24sICJ1c2UtcGlwZWxpbmUtY2xvY2siLCBydHBiaW4tPnVzZV9waXBlbGluZV9jbG9jaywKLSAgICAgICAgTlVMTCk7Ci0gIGVsc2UKLSAgICBnX29iamVjdF9zZXQgKHNlc3Npb24sICJudHAtdGltZS1zb3VyY2UiLCBydHBiaW4tPm50cF90aW1lX3NvdXJjZSwgTlVMTCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChzZXNzaW9uLCAibWF4LWRyb3BvdXQtdGltZSIsIHJ0cGJpbi0+bWF4X2Ryb3BvdXRfdGltZSwKLSAgICAgICJtYXgtbWlzb3JkZXItdGltZSIsIHJ0cGJpbi0+bWF4X21pc29yZGVyX3RpbWUsIE5VTEwpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwYmluKTsKLQotICAvKiBwcm92aWRlIGNsb2NrX3JhdGUgdG8gdGhlIHNlc3Npb24gbWFuYWdlciB3aGVuIG5lZWRlZCAqLwotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzaW9uLCAicmVxdWVzdC1wdC1tYXAiLAotICAgICAgKEdDYWxsYmFjaykgcHRfbWFwX3JlcXVlc3RlZCwgc2Vzcyk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoc2Vzcy0+c2Vzc2lvbiwgIm9uLW5ldy1zc3JjIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX25ld19zc3JjLCBzZXNzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2Vzcy0+c2Vzc2lvbiwgIm9uLXNzcmMtY29sbGlzaW9uIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfY29sbGlzaW9uLCBzZXNzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2Vzcy0+c2Vzc2lvbiwgIm9uLXNzcmMtdmFsaWRhdGVkIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfdmFsaWRhdGVkLCBzZXNzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2Vzcy0+c2Vzc2lvbiwgIm9uLXNzcmMtYWN0aXZlIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfYWN0aXZlLCBzZXNzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2Vzcy0+c2Vzc2lvbiwgIm9uLXNzcmMtc2RlcyIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9zc3JjX3NkZXMsIHNlc3MpOwotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzLT5zZXNzaW9uLCAib24tYnllLXNzcmMiLAotICAgICAgKEdDYWxsYmFjaykgb25fYnllX3NzcmMsIHNlc3MpOwotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzLT5zZXNzaW9uLCAib24tYnllLXRpbWVvdXQiLAotICAgICAgKEdDYWxsYmFjaykgb25fYnllX3RpbWVvdXQsIHNlc3MpOwotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzLT5zZXNzaW9uLCAib24tdGltZW91dCIsIChHQ2FsbGJhY2spIG9uX3RpbWVvdXQsIHNlc3MpOwotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzLT5zZXNzaW9uLCAib24tc2VuZGVyLXRpbWVvdXQiLAotICAgICAgKEdDYWxsYmFjaykgb25fc2VuZGVyX3RpbWVvdXQsIHNlc3MpOwotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzLT5zZXNzaW9uLCAib24tbmV3LXNlbmRlci1zc3JjIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX25ld19zZW5kZXJfc3NyYywgc2Vzcyk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHNlc3MtPnNlc3Npb24sICJvbi1zZW5kZXItc3NyYy1hY3RpdmUiLAotICAgICAgKEdDYWxsYmFjaykgb25fc2VuZGVyX3NzcmNfYWN0aXZlLCBzZXNzKTsKLQotICBnc3RfYmluX2FkZCAoR1NUX0JJTl9DQVNUIChydHBiaW4pLCBzZXNzaW9uKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAocnRwYmluKSwgZGVtdXgpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnRwYmluKTsKLSAgdGFyZ2V0ID0gR1NUX1NUQVRFX1RBUkdFVCAocnRwYmluKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cGJpbik7Ci0KLSAgLyogY2hhbmdlIHN0YXRlIG9ubHkgdG8gd2hhdCdzIG5lZWRlZCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlbXV4LCB0YXJnZXQpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlc3Npb24sIHRhcmdldCk7Ci0KLSAgcmV0dXJuIHNlc3M7Ci0KLSAgLyogRVJST1JTICovCi1ub19zZXNzaW9uOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBjb3VsZCBub3QgY3JlYXRlIHJ0cHNlc3Npb24gZWxlbWVudCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19kZW11eDoKLSAgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlc3Npb24pOwotICAgIGdfd2FybmluZyAoInJ0cGJpbjogY291bGQgbm90IGNyZWF0ZSBydHBzc3JjZGVtdXggZWxlbWVudCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotYmluX21hbmFnZV9lbGVtZW50IChHc3RSdHBCaW4gKiBiaW4sIEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RSdHBCaW5Qcml2YXRlICpwcml2ID0gYmluLT5wcml2OwotCi0gIGlmIChnX2xpc3RfZmluZCAocHJpdi0+ZWxlbWVudHMsIGVsZW1lbnQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicmVxdWVzdGVkIGVsZW1lbnQgJXAgYWxyZWFkeSBpbiBiaW4iLCBlbGVtZW50KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJhZGRpbmcgcmVxdWVzdGVkIGVsZW1lbnQgJXAiLCBlbGVtZW50KTsKLSAgICBpZiAoIWdzdF9iaW5fYWRkIChHU1RfQklOX0NBU1QgKGJpbiksIGVsZW1lbnQpKQotICAgICAgZ290byBhZGRfZmFpbGVkOwotICAgIGlmICghZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoZWxlbWVudCkpCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJpbiwgInVuYWJsZSB0byBzeW5jIGVsZW1lbnQgc3RhdGUgd2l0aCBydHBiaW4iKTsKLSAgfQotICAvKiB3ZSBhZGQgdGhlIGVsZW1lbnQgbXVsdGlwbGUgdGltZXMsIGVhY2ggd2UgbmVlZCBhbiBlcXVhbCBudW1iZXIgb2YKLSAgICogcmVtb3ZlcyB0byByZWFsbHkgcmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gdGhlIGJpbiAqLwotICBwcml2LT5lbGVtZW50cyA9IGdfbGlzdF9wcmVwZW5kIChwcml2LT5lbGVtZW50cywgZWxlbWVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1hZGRfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiaW4sICJ1bmFibGUgdG8gYWRkIGVsZW1lbnQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9iaW5fZWxlbWVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFJ0cEJpbiAqIGJpbikKLXsKLSAgR3N0UnRwQmluUHJpdmF0ZSAqcHJpdiA9IGJpbi0+cHJpdjsKLSAgR0xpc3QgKmZpbmQ7Ci0KLSAgZmluZCA9IGdfbGlzdF9maW5kIChwcml2LT5lbGVtZW50cywgZWxlbWVudCk7Ci0gIGlmIChmaW5kKSB7Ci0gICAgcHJpdi0+ZWxlbWVudHMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKHByaXYtPmVsZW1lbnRzLCBmaW5kKTsKLQotICAgIGlmICghZ19saXN0X2ZpbmQgKHByaXYtPmVsZW1lbnRzLCBlbGVtZW50KSkKLSAgICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOX0NBU1QgKGJpbiksIGVsZW1lbnQpOwotICAgIGVsc2UKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotICB9Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIFJUUF9CSU5fTE9DSyAqLwotc3RhdGljIHZvaWQKLWZyZWVfc2Vzc2lvbiAoR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3MsIEdzdFJ0cEJpbiAqIGJpbikKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZnJlZWluZyBzZXNzaW9uICVwIiwgc2Vzcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc2Vzcy0+ZGVtdXgsIFRSVUUpOwotICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzZXNzLT5zZXNzaW9uLCBUUlVFKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNlc3MtPmRlbXV4LCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2Vzcy0+c2Vzc2lvbiwgR1NUX1NUQVRFX05VTEwpOwotCi0gIHJlbW92ZV9yZWN2X3J0cCAoYmluLCBzZXNzKTsKLSAgcmVtb3ZlX3JlY3ZfcnRjcCAoYmluLCBzZXNzKTsKLSAgcmVtb3ZlX3NlbmRfcnRwIChiaW4sIHNlc3MpOwotICByZW1vdmVfcnRjcCAoYmluLCBzZXNzKTsKLQotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTl9DQVNUIChiaW4pLCBzZXNzLT5zZXNzaW9uKTsKLSAgZ3N0X2Jpbl9yZW1vdmUgKEdTVF9CSU5fQ0FTVCAoYmluKSwgc2Vzcy0+ZGVtdXgpOwotCi0gIGdfc2xpc3RfZm9yZWFjaCAoc2Vzcy0+ZWxlbWVudHMsIChHRnVuYykgcmVtb3ZlX2Jpbl9lbGVtZW50LCBiaW4pOwotICBnX3NsaXN0X2ZyZWUgKHNlc3MtPmVsZW1lbnRzKTsKLQotICBnX3NsaXN0X2ZvcmVhY2ggKHNlc3MtPnN0cmVhbXMsIChHRnVuYykgZnJlZV9zdHJlYW0sIGJpbik7Ci0gIGdfc2xpc3RfZnJlZSAoc2Vzcy0+c3RyZWFtcyk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnNlc3MtPmxvY2spOwotICBnX2hhc2hfdGFibGVfZGVzdHJveSAoc2Vzcy0+cHRtYXApOwotCi0gIGdfZnJlZSAoc2Vzcyk7Ci19Ci0KLS8qIGdldCB0aGUgcGF5bG9hZCB0eXBlIGNhcHMgZm9yIHRoZSBzcGVjaWZpYyBwYXlsb2FkIEBwdCBpbiBAc2Vzc2lvbiAqLwotc3RhdGljIEdzdENhcHMgKgotZ2V0X3B0X21hcCAoR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3Npb24sIGd1aW50IHB0KQotewotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0UnRwQmluICpiaW47Ci0gIEdWYWx1ZSByZXQgPSB7IDAgfTsKLSAgR1ZhbHVlIGFyZ3NbM10gPSB7IHswfSwgezB9LCB7MH0gfTsKLQotICBHU1RfREVCVUcgKCJzZWFyY2hpbmcgcHQgJWQgaW4gY2FjaGUiLCBwdCk7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHNlc3Npb24pOwotCi0gIC8qIGZpcnN0IGxvb2sgaW4gdGhlIGNhY2hlICovCi0gIGNhcHMgPSBnX2hhc2hfdGFibGVfbG9va3VwIChzZXNzaW9uLT5wdG1hcCwgR0lOVF9UT19QT0lOVEVSIChwdCkpOwotICBpZiAoY2FwcykgewotICAgIGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgYmluID0gc2Vzc2lvbi0+YmluOwotCi0gIEdTVF9ERUJVRyAoImVtaXRpbmcgc2lnbmFsIGZvciBwdCAlZCBpbiBzZXNzaW9uICVkIiwgcHQsIHNlc3Npb24tPmlkKTsKLQotICAvKiBub3QgaW4gY2FjaGUsIHNlbmQgc2lnbmFsIHRvIHJlcXVlc3QgY2FwcyAqLwotICBnX3ZhbHVlX2luaXQgKCZhcmdzWzBdLCBHU1RfVFlQRV9FTEVNRU5UKTsKLSAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmYXJnc1swXSwgYmluKTsKLSAgZ192YWx1ZV9pbml0ICgmYXJnc1sxXSwgR19UWVBFX1VJTlQpOwotICBnX3ZhbHVlX3NldF91aW50ICgmYXJnc1sxXSwgc2Vzc2lvbi0+aWQpOwotICBnX3ZhbHVlX2luaXQgKCZhcmdzWzJdLCBHX1RZUEVfVUlOVCk7Ci0gIGdfdmFsdWVfc2V0X3VpbnQgKCZhcmdzWzJdLCBwdCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmcmV0LCBHU1RfVFlQRV9DQVBTKTsKLSAgZ192YWx1ZV9zZXRfYm94ZWQgKCZyZXQsIE5VTEwpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3Npb24pOwotCi0gIGdfc2lnbmFsX2VtaXR2IChhcmdzLCBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9SRVFVRVNUX1BUX01BUF0sIDAsICZyZXQpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChzZXNzaW9uKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmYXJnc1swXSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZhcmdzWzFdKTsKLSAgZ192YWx1ZV91bnNldCAoJmFyZ3NbMl0pOwotCi0gIC8qIGxvb2sgaW4gdGhlIGNhY2hlIGFnYWluIGJlY2F1c2Ugd2UgbGV0IHRoZSBsb2NrIGdvICovCi0gIGNhcHMgPSBnX2hhc2hfdGFibGVfbG9va3VwIChzZXNzaW9uLT5wdG1hcCwgR0lOVF9UT19QT0lOVEVSIChwdCkpOwotICBpZiAoY2FwcykgewotICAgIGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnJldCk7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgY2FwcyA9IChHc3RDYXBzICopIGdfdmFsdWVfZHVwX2JveGVkICgmcmV0KTsKLSAgZ192YWx1ZV91bnNldCAoJnJldCk7Ci0gIGlmICghY2FwcykKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgR1NUX0RFQlVHICgiY2FjaGluZyBwdCAlZCBhcyAlIiBHU1RfUFRSX0ZPUk1BVCwgcHQsIGNhcHMpOwotCi0gIC8qIHN0b3JlIGluIGNhY2hlLCB0YWtlIGFkZGl0aW9uYWwgcmVmICovCi0gIGdfaGFzaF90YWJsZV9pbnNlcnQgKHNlc3Npb24tPnB0bWFwLCBHSU5UX1RPX1BPSU5URVIgKHB0KSwKLSAgICAgIGdzdF9jYXBzX3JlZiAoY2FwcykpOwotCi1kb25lOgotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzaW9uKTsKLQotICByZXR1cm4gY2FwczsKLQotICAvKiBFUlJPUlMgKi8KLW5vX2NhcHM6Ci0gIHsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzaW9uKTsKLSAgICBHU1RfREVCVUcgKCJubyBwdCBtYXAgY291bGQgYmUgb2J0YWluZWQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXJldHVybl90cnVlIChncG9pbnRlciBrZXksIGdwb2ludGVyIHZhbHVlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9iaW5fcmVzZXRfc3luYyAoR3N0UnRwQmluICogcnRwYmluKQotewotICBHU0xpc3QgKmNsaWVudHMsICpzdHJlYW1zOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgIlJlc2V0IHN5bmMgb24gYWxsIGNsaWVudHMiKTsKLQotICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotICBmb3IgKGNsaWVudHMgPSBydHBiaW4tPmNsaWVudHM7IGNsaWVudHM7IGNsaWVudHMgPSBnX3NsaXN0X25leHQgKGNsaWVudHMpKSB7Ci0gICAgR3N0UnRwQmluQ2xpZW50ICpjbGllbnQgPSAoR3N0UnRwQmluQ2xpZW50ICopIGNsaWVudHMtPmRhdGE7Ci0KLSAgICAvKiByZXNldCBzeW5jIG9uIGFsbCBzdHJlYW1zIGZvciB0aGlzIGNsaWVudCAqLwotICAgIGZvciAoc3RyZWFtcyA9IGNsaWVudC0+c3RyZWFtczsgc3RyZWFtczsgc3RyZWFtcyA9IGdfc2xpc3RfbmV4dCAoc3RyZWFtcykpIHsKLSAgICAgIEdzdFJ0cEJpblN0cmVhbSAqc3RyZWFtID0gKEdzdFJ0cEJpblN0cmVhbSAqKSBzdHJlYW1zLT5kYXRhOwotCi0gICAgICAvKiBtYWtlIHVzZSByZXF1aXJlIGEgbmV3IFNSIHBhY2tldCBmb3IgdGhpcyBzdHJlYW0gYmVmb3JlIHdlIGF0dGVtcHQgbmV3Ci0gICAgICAgKiBsaXAtc3luYyAqLwotICAgICAgc3RyZWFtLT5oYXZlX3N5bmMgPSBGQUxTRTsKLSAgICAgIHN0cmVhbS0+cnRfZGVsdGEgPSAwOwotICAgICAgc3RyZWFtLT5ydHBfZGVsdGEgPSAwOwotICAgICAgc3RyZWFtLT5jbG9ja19iYXNlID0gLTEwMCAqIEdTVF9TRUNPTkQ7Ci0gICAgfQotICB9Ci0gIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX2NsZWFyX3B0X21hcCAoR3N0UnRwQmluICogYmluKQotewotICBHU0xpc3QgKnNlc3Npb25zLCAqc3RyZWFtczsKLQotICBHU1RfUlRQX0JJTl9MT0NLIChiaW4pOwotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJjbGVhcmluZyBwdCBtYXAiKTsKLSAgZm9yIChzZXNzaW9ucyA9IGJpbi0+c2Vzc2lvbnM7IHNlc3Npb25zOyBzZXNzaW9ucyA9IGdfc2xpc3RfbmV4dCAoc2Vzc2lvbnMpKSB7Ci0gICAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbiA9IChHc3RSdHBCaW5TZXNzaW9uICopIHNlc3Npb25zLT5kYXRhOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiY2xlYXJpbmcgc2Vzc2lvbiAlcCIsIHNlc3Npb24pOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoc2Vzc2lvbi0+c2Vzc2lvbiwgImNsZWFyLXB0LW1hcCIsIE5VTEwpOwotCi0gICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHNlc3Npb24pOwotICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoX3JlbW92ZSAoc2Vzc2lvbi0+cHRtYXAsIHJldHVybl90cnVlLCBOVUxMKTsKLQotICAgIGZvciAoc3RyZWFtcyA9IHNlc3Npb24tPnN0cmVhbXM7IHN0cmVhbXM7IHN0cmVhbXMgPSBnX3NsaXN0X25leHQgKHN0cmVhbXMpKSB7Ci0gICAgICBHc3RSdHBCaW5TdHJlYW0gKnN0cmVhbSA9IChHc3RSdHBCaW5TdHJlYW0gKikgc3RyZWFtcy0+ZGF0YTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiY2xlYXJpbmcgc3RyZWFtICVwIiwgc3RyZWFtKTsKLSAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoc3RyZWFtLT5idWZmZXIsICJjbGVhci1wdC1tYXAiLCBOVUxMKTsKLSAgICAgIGlmIChzdHJlYW0tPmRlbXV4KQotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHN0cmVhbS0+ZGVtdXgsICJjbGVhci1wdC1tYXAiLCBOVUxMKTsKLSAgICB9Ci0gICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzc2lvbik7Ci0gIH0KLSAgR1NUX1JUUF9CSU5fVU5MT0NLIChiaW4pOwotCi0gIC8qIHJlc2V0IHN5bmMgdG9vICovCi0gIGdzdF9ydHBfYmluX3Jlc2V0X3N5bmMgKGJpbik7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWdzdF9ydHBfYmluX2dldF9zZXNzaW9uIChHc3RSdHBCaW4gKiBiaW4sIGd1aW50IHNlc3Npb25faWQpCi17Ci0gIEdzdFJ0cEJpblNlc3Npb24gKnNlc3Npb247Ci0gIEdzdEVsZW1lbnQgKnJldCA9IE5VTEw7Ci0KLSAgR1NUX1JUUF9CSU5fTE9DSyAoYmluKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicmV0cmlldmluZyBHc3RSdHBTZXNzaW9uLCBpbmRleDogJWQiLCBzZXNzaW9uX2lkKTsKLSAgc2Vzc2lvbiA9IGZpbmRfc2Vzc2lvbl9ieV9pZCAoYmluLCAoZ2ludCkgc2Vzc2lvbl9pZCk7Ci0gIGlmIChzZXNzaW9uKSB7Ci0gICAgcmV0ID0gZ3N0X29iamVjdF9yZWYgKHNlc3Npb24tPnNlc3Npb24pOwotICB9Ci0gIEdTVF9SVFBfQklOX1VOTE9DSyAoYmluKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgUlRQU2Vzc2lvbiAqCi1nc3RfcnRwX2Jpbl9nZXRfaW50ZXJuYWxfc2Vzc2lvbiAoR3N0UnRwQmluICogYmluLCBndWludCBzZXNzaW9uX2lkKQotewotICBSVFBTZXNzaW9uICppbnRlcm5hbF9zZXNzaW9uID0gTlVMTDsKLSAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbjsKLQotICBHU1RfUlRQX0JJTl9MT0NLIChiaW4pOwotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJyZXRyaWV2aW5nIGludGVybmFsIFJUUFNlc3Npb24gb2JqZWN0LCBpbmRleDogJWQiLAotICAgICAgc2Vzc2lvbl9pZCk7Ci0gIHNlc3Npb24gPSBmaW5kX3Nlc3Npb25fYnlfaWQgKGJpbiwgKGdpbnQpIHNlc3Npb25faWQpOwotICBpZiAoc2Vzc2lvbikgewotICAgIGdfb2JqZWN0X2dldCAoc2Vzc2lvbi0+c2Vzc2lvbiwgImludGVybmFsLXNlc3Npb24iLCAmaW50ZXJuYWxfc2Vzc2lvbiwKLSAgICAgICAgTlVMTCk7Ci0gIH0KLSAgR1NUX1JUUF9CSU5fVU5MT0NLIChiaW4pOwotCi0gIHJldHVybiBpbnRlcm5hbF9zZXNzaW9uOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1nc3RfcnRwX2Jpbl9yZXF1ZXN0X2VuY29kZXIgKEdzdFJ0cEJpbiAqIGJpbiwgZ3VpbnQgc2Vzc2lvbl9pZCkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAicmV0dXJuIE5VTEwgZW5jb2RlciIpOwotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotZ3N0X3J0cF9iaW5fcmVxdWVzdF9kZWNvZGVyIChHc3RSdHBCaW4gKiBiaW4sIGd1aW50IHNlc3Npb25faWQpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInJldHVybiBOVUxMIGRlY29kZXIiKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Jpbl9wcm9wYWdhdGVfcHJvcGVydHlfdG9faml0dGVyYnVmZmVyIChHc3RSdHBCaW4gKiBiaW4sCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1NMaXN0ICpzZXNzaW9ucywgKnN0cmVhbXM7Ci0KLSAgR1NUX1JUUF9CSU5fTE9DSyAoYmluKTsKLSAgZm9yIChzZXNzaW9ucyA9IGJpbi0+c2Vzc2lvbnM7IHNlc3Npb25zOyBzZXNzaW9ucyA9IGdfc2xpc3RfbmV4dCAoc2Vzc2lvbnMpKSB7Ci0gICAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbiA9IChHc3RSdHBCaW5TZXNzaW9uICopIHNlc3Npb25zLT5kYXRhOwotCi0gICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHNlc3Npb24pOwotICAgIGZvciAoc3RyZWFtcyA9IHNlc3Npb24tPnN0cmVhbXM7IHN0cmVhbXM7IHN0cmVhbXMgPSBnX3NsaXN0X25leHQgKHN0cmVhbXMpKSB7Ci0gICAgICBHc3RSdHBCaW5TdHJlYW0gKnN0cmVhbSA9IChHc3RSdHBCaW5TdHJlYW0gKikgc3RyZWFtcy0+ZGF0YTsKLQotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAoc3RyZWFtLT5idWZmZXIpLCBuYW1lLCB2YWx1ZSk7Ci0gICAgfQotICAgIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3Npb24pOwotICB9Ci0gIEdTVF9SVFBfQklOX1VOTE9DSyAoYmluKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19zZXNzaW9uIChHc3RSdHBCaW4gKiBiaW4sCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSkKLXsKLSAgR1NMaXN0ICpzZXNzaW9uczsKLQotICBHU1RfUlRQX0JJTl9MT0NLIChiaW4pOwotICBmb3IgKHNlc3Npb25zID0gYmluLT5zZXNzaW9uczsgc2Vzc2lvbnM7IHNlc3Npb25zID0gZ19zbGlzdF9uZXh0IChzZXNzaW9ucykpIHsKLSAgICBHc3RSdHBCaW5TZXNzaW9uICpzZXNzID0gKEdzdFJ0cEJpblNlc3Npb24gKikgc2Vzc2lvbnMtPmRhdGE7Ci0KLSAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChzZXNzLT5zZXNzaW9uKSwgbmFtZSwgdmFsdWUpOwotICB9Ci0gIEdTVF9SVFBfQklOX1VOTE9DSyAoYmluKTsKLX0KLQotLyogZ2V0IGEgY2xpZW50IHdpdGggdGhlIGdpdmVuIFNERVMgbmFtZS4gTXVzdCBiZSBjYWxsZWQgd2l0aCBSVFBfQklOX0xPQ0sgKi8KLXN0YXRpYyBHc3RSdHBCaW5DbGllbnQgKgotZ2V0X2NsaWVudCAoR3N0UnRwQmluICogYmluLCBndWludDggbGVuLCBndWludDggKiBkYXRhLCBnYm9vbGVhbiAqIGNyZWF0ZWQpCi17Ci0gIEdzdFJ0cEJpbkNsaWVudCAqcmVzdWx0ID0gTlVMTDsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIGZvciAod2FsayA9IGJpbi0+Y2xpZW50czsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSdHBCaW5DbGllbnQgKmNsaWVudCA9IChHc3RSdHBCaW5DbGllbnQgKikgd2Fsay0+ZGF0YTsKLQotICAgIGlmIChsZW4gIT0gY2xpZW50LT5jbmFtZV9sZW4pCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmICghc3RybmNtcCAoKGdjaGFyICopIGRhdGEsIGNsaWVudC0+Y25hbWUsIGNsaWVudC0+Y25hbWVfbGVuKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZm91bmQgZXhpc3RpbmcgY2xpZW50ICVwIHdpdGggQ05BTUUgJXMiLCBjbGllbnQsCi0gICAgICAgICAgY2xpZW50LT5jbmFtZSk7Ci0gICAgICByZXN1bHQgPSBjbGllbnQ7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvKiBub3RoaW5nIGZvdW5kLCBjcmVhdGUgb25lICovCi0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIHJlc3VsdCA9IGdfbmV3MCAoR3N0UnRwQmluQ2xpZW50LCAxKTsKLSAgICByZXN1bHQtPmNuYW1lID0gZ19zdHJuZHVwICgoZ2NoYXIgKikgZGF0YSwgbGVuKTsKLSAgICByZXN1bHQtPmNuYW1lX2xlbiA9IGxlbjsKLSAgICBiaW4tPmNsaWVudHMgPSBnX3NsaXN0X3ByZXBlbmQgKGJpbi0+Y2xpZW50cywgcmVzdWx0KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJjcmVhdGVkIG5ldyBjbGllbnQgJXAgd2l0aCBDTkFNRSAlcyIsIHJlc3VsdCwKLSAgICAgICAgcmVzdWx0LT5jbmFtZSk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfY2xpZW50IChHc3RSdHBCaW5DbGllbnQgKiBjbGllbnQsIEdzdFJ0cEJpbiAqIGJpbikKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZnJlZWluZyBjbGllbnQgJXAiLCBjbGllbnQpOwotICBnX3NsaXN0X2ZyZWUgKGNsaWVudC0+c3RyZWFtcyk7Ci0gIGdfZnJlZSAoY2xpZW50LT5jbmFtZSk7Ci0gIGdfZnJlZSAoY2xpZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9jdXJyZW50X3RpbWVzIChHc3RSdHBCaW4gKiBiaW4sIEdzdENsb2NrVGltZSAqIHJ1bm5pbmdfdGltZSwKLSAgICBndWludDY0ICogbnRwbnN0aW1lKQotewotICBndWludDY0IG50cG5zID0gLTE7Ci0gIEdzdENsb2NrICpjbG9jazsKLSAgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZSwgcnQsIGNsb2NrX3RpbWU7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChiaW4pOwotICBpZiAoKGNsb2NrID0gR1NUX0VMRU1FTlRfQ0xPQ0sgKGJpbikpKSB7Ci0gICAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmluKS0+YmFzZV90aW1lOwotICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGJpbik7Ci0KLSAgICAvKiBnZXQgY3VycmVudCBjbG9jayB0aW1lIGFuZCBjb252ZXJ0IHRvIHJ1bm5pbmcgdGltZSAqLwotICAgIGNsb2NrX3RpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICBydCA9IGNsb2NrX3RpbWUgLSBiYXNlX3RpbWU7Ci0KLSAgICBpZiAoYmluLT51c2VfcGlwZWxpbmVfY2xvY2spIHsKLSAgICAgIG50cG5zID0gcnQ7Ci0gICAgICAvKiBhZGQgY29uc3RhbnQgdG8gY29udmVydCBmcm9tIDE5NzAgYmFzZWQgdGltZSB0byAxOTAwIGJhc2VkIHRpbWUgKi8KLSAgICAgIG50cG5zICs9ICgyMjA4OTg4ODAwTEwgKiBHU1RfU0VDT05EKTsKLSAgICB9IGVsc2UgewotICAgICAgc3dpdGNoIChiaW4tPm50cF90aW1lX3NvdXJjZSkgewotICAgICAgICBjYXNlIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX05UUDoKLSAgICAgICAgY2FzZSBHU1RfUlRQX05UUF9USU1FX1NPVVJDRV9VTklYOnsKLSAgICAgICAgICBHVGltZVZhbCBjdXJyZW50OwotCi0gICAgICAgICAgLyogZ2V0IGN1cnJlbnQgTlRQIHRpbWUgKi8KLSAgICAgICAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZjdXJyZW50KTsKLSAgICAgICAgICBudHBucyA9IEdTVF9USU1FVkFMX1RPX1RJTUUgKGN1cnJlbnQpOwotCi0gICAgICAgICAgLyogYWRkIGNvbnN0YW50IHRvIGNvbnZlcnQgZnJvbSAxOTcwIGJhc2VkIHRpbWUgdG8gMTkwMCBiYXNlZCB0aW1lICovCi0gICAgICAgICAgaWYgKGJpbi0+bnRwX3RpbWVfc291cmNlID09IEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX05UUCkKLSAgICAgICAgICAgIG50cG5zICs9ICgyMjA4OTg4ODAwTEwgKiBHU1RfU0VDT05EKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX1JVTk5JTkdfVElNRToKLSAgICAgICAgICBudHBucyA9IHJ0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX0NMT0NLX1RJTUU6Ci0gICAgICAgICAgbnRwbnMgPSBjbG9ja190aW1lOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIG50cG5zID0gLTE7ICAgICAgICAgICAvKiBGaXggdW5pbml0ZWQgY29tcGlsZXIgd2FybmluZyAqLwotICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLSAgICBydCA9IC0xOwotICAgIG50cG5zID0gLTE7Ci0gIH0KLSAgaWYgKHJ1bm5pbmdfdGltZSkKLSAgICAqcnVubmluZ190aW1lID0gcnQ7Ci0gIGlmIChudHBuc3RpbWUpCi0gICAgKm50cG5zdGltZSA9IG50cG5zOwotfQotCi1zdGF0aWMgdm9pZAotc3RyZWFtX3NldF90c19vZmZzZXQgKEdzdFJ0cEJpbiAqIGJpbiwgR3N0UnRwQmluU3RyZWFtICogc3RyZWFtLAotICAgIGdpbnQ2NCB0c19vZmZzZXQsIGdib29sZWFuIGNoZWNrKQotewotICBnaW50NjQgcHJldl90c19vZmZzZXQ7Ci0KLSAgZ19vYmplY3RfZ2V0IChzdHJlYW0tPmJ1ZmZlciwgInRzLW9mZnNldCIsICZwcmV2X3RzX29mZnNldCwgTlVMTCk7Ci0KLSAgLyogZGVsdGEgY2hhbmdlZCwgc2VlIGhvdyBtdWNoICovCi0gIGlmIChwcmV2X3RzX29mZnNldCAhPSB0c19vZmZzZXQpIHsKLSAgICBnaW50NjQgZGlmZjsKLQotICAgIGRpZmYgPSBwcmV2X3RzX29mZnNldCAtIHRzX29mZnNldDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKLSAgICAgICAgInRzLW9mZnNldCAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgcHJldiAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICAgIiwgZGlmZjogJSIgR19HSU5UNjRfRk9STUFULCB0c19vZmZzZXQsIHByZXZfdHNfb2Zmc2V0LCBkaWZmKTsKLQotICAgIGlmIChjaGVjaykgewotICAgICAgLyogb25seSBjaGFuZ2UgZGlmZiB3aGVuIGl0IGNoYW5nZWQgbW9yZSB0aGFuIDQgbWlsbGlzZWNvbmRzLiBUaGlzCi0gICAgICAgKiBjb21wZW5zYXRlcyBmb3Igcm91bmRpbmcgZXJyb3JzIGluIE5UUCB0byBSVFAgdGltZXN0YW1wCi0gICAgICAgKiBjb252ZXJzaW9ucyAqLwotICAgICAgaWYgKEFCUyAoZGlmZikgPCA0ICogR1NUX01TRUNPTkQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAib2Zmc2V0IHRvbyBzbWFsbCwgaWdub3JpbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKEFCUyAoZGlmZikgPiAoMyAqIEdTVF9TRUNPTkQpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmluLCAib2Zmc2V0IHVudXN1YWxseSBsYXJnZSwgaWdub3JpbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBnX29iamVjdF9zZXQgKHN0cmVhbS0+YnVmZmVyLCAidHMtb2Zmc2V0IiwgdHNfb2Zmc2V0LCBOVUxMKTsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzdHJlYW0gU1NSQyAlMDh4LCBkZWx0YSAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICBzdHJlYW0tPnNzcmMsIHRzX29mZnNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Jpbl9zZW5kX3N5bmNfZXZlbnQgKEdzdFJ0cEJpblN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgaWYgKHN0cmVhbS0+YmluLT5zZW5kX3N5bmNfZXZlbnQpIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0gICAgR3N0UGFkICpzcmNwYWQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzdHJlYW0tPmJpbiwKLSAgICAgICAgInNlbmRpbmcgR3N0UlRDUFNSUmVjZWl2ZWQgZXZlbnQgZG93bnN0cmVhbSIpOwotCi0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNLAotICAgICAgICBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoIkdzdFJUQ1BTUlJlY2VpdmVkIikpOwotCi0gICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHN0cmVhbS0+YnVmZmVyLCAic3JjIik7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGV2ZW50KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICB9Ci19Ci0KLS8qIGFzc29jaWF0ZSBhIHN0cmVhbSB0byB0aGUgZ2l2ZW4gQ05BTUUuIFRoaXMgd2lsbCBtYWtlIHN1cmUgYWxsIHN0cmVhbXMgZm9yCi0gKiB0aGF0IENOQU1FIGFyZSBzeW5jaHJvbml6ZWQgdG9nZXRoZXIuCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIEdTVF9SVFBfQklOX0xPQ0sgKi8KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Jpbl9hc3NvY2lhdGUgKEdzdFJ0cEJpbiAqIGJpbiwgR3N0UnRwQmluU3RyZWFtICogc3RyZWFtLCBndWludDggbGVuLAotICAgIGd1aW50OCAqIGRhdGEsIGd1aW50NjQgbnRwdGltZSwgZ3VpbnQ2NCBsYXN0X2V4dHJ0cHRpbWUsCi0gICAgZ3VpbnQ2NCBiYXNlX3J0cHRpbWUsIGd1aW50NjQgYmFzZV90aW1lLCBndWludCBjbG9ja19yYXRlLAotICAgIGdpbnQ2NCBydHBfY2xvY2tfYmFzZSkKLXsKLSAgR3N0UnRwQmluQ2xpZW50ICpjbGllbnQ7Ci0gIGdib29sZWFuIGNyZWF0ZWQ7Ci0gIEdTTGlzdCAqd2FsazsKLSAgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSwgcnVubmluZ190aW1lX3J0cDsKLSAgZ3VpbnQ2NCBudHBuc3RpbWU7Ci0KLSAgLyogZmlyc3QgZmluZCBvciBjcmVhdGUgdGhlIENOQU1FICovCi0gIGNsaWVudCA9IGdldF9jbGllbnQgKGJpbiwgbGVuLCBkYXRhLCAmY3JlYXRlZCk7Ci0KLSAgLyogZmluZCBzdHJlYW0gaW4gdGhlIGNsaWVudCAqLwotICBmb3IgKHdhbGsgPSBjbGllbnQtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UnRwQmluU3RyZWFtICpvc3RyZWFtID0gKEdzdFJ0cEJpblN0cmVhbSAqKSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKG9zdHJlYW0gPT0gc3RyZWFtKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgLyogbm90IGZvdW5kLCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KLSAgaWYgKHdhbGsgPT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKLSAgICAgICAgIm5ldyBhc3NvY2lhdGlvbiBvZiBTU1JDICUwOHggd2l0aCBjbGllbnQgJXAgd2l0aCBDTkFNRSAlcyIsCi0gICAgICAgIHN0cmVhbS0+c3NyYywgY2xpZW50LCBjbGllbnQtPmNuYW1lKTsKLSAgICBjbGllbnQtPnN0cmVhbXMgPSBnX3NsaXN0X3ByZXBlbmQgKGNsaWVudC0+c3RyZWFtcywgc3RyZWFtKTsKLSAgICBjbGllbnQtPm5zdHJlYW1zKys7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLAotICAgICAgICAiZm91bmQgYXNzb2NpYXRpb24gb2YgU1NSQyAlMDh4IHdpdGggY2xpZW50ICVwIHdpdGggQ05BTUUgJXMiLAotICAgICAgICBzdHJlYW0tPnNzcmMsIGNsaWVudCwgY2xpZW50LT5jbmFtZSk7Ci0gIH0KLQotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChsYXN0X2V4dHJ0cHRpbWUpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiaW52YWxpZGF0ZWQgc3luYyBkYXRhIik7Ci0gICAgaWYgKGJpbi0+cnRjcF9zeW5jID09IEdTVF9SVFBfQklOX1JUQ1BfU1lOQ19SVFApIHsKLSAgICAgIC8qIHdlIGRvbid0IG5lZWQgdGhhdCBkYXRhLCBzbyBjYXJyeSBvbiwKLSAgICAgICAqIGJ1dCBtYWtlIHNvbWUgdmFsdWVzIGxvb2sgc2FuZXIgKi8KLSAgICAgIGxhc3RfZXh0cnRwdGltZSA9IGJhc2VfcnRwdGltZTsKLSAgICB9IGVsc2UgewotICAgICAgLyogbm90aGluZyB3ZSBjYW4gZG8gd2l0aCB0aGlzIGRhdGEgaW4gdGhpcyBjYXNlICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJiYWlsaW5nIG91dCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0gIC8qIFRha2UgdGhlIGV4dGVuZGVkIHJ0cHRpbWUgd2UgZm91bmQgaW4gdGhlIFNSIHBhY2tldCBhbmQgbWFwIGl0IHRvIHRoZQotICAgKiBsb2NhbCBydHB0aW1lLiBUaGUgbG9jYWwgcnRwIHRpbWUgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGltZXN0YW1wcyBvbiB0aGUKLSAgICogYnVmZmVycyBzbyB3ZSB3aWxsIGNhbGN1bGF0ZSB3aGF0IHJ1bm5pbmdfdGltZSBjb3JyZXNwb25kcyB0byB0aGUgUlRQCi0gICAqIHRpbWVzdGFtcCBpbiB0aGUgU1IgcGFja2V0LiAqLwotICBydW5uaW5nX3RpbWVfcnRwID0gbGFzdF9leHRydHB0aW1lIC0gYmFzZV9ydHB0aW1lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKLSAgICAgICJiYXNlICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZXh0cnRwdGltZSAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBsb2NhbCBSVFAgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBjbG9jay1yYXRlICVkLCAiCi0gICAgICAiY2xvY2stYmFzZSAlIiBHX0dJTlQ2NF9GT1JNQVQsIGJhc2VfcnRwdGltZSwKLSAgICAgIGxhc3RfZXh0cnRwdGltZSwgcnVubmluZ190aW1lX3J0cCwgY2xvY2tfcmF0ZSwgcnRwX2Nsb2NrX2Jhc2UpOwotCi0gIC8qIGNhbGN1bGF0ZSBsb2NhbCBSVFAgdGltZSBpbiBnc3RyZWFtZXIgdGltZXN0YW1wLCB3ZSBlc3NlbnRpYWxseSBwZXJmb3JtIHRoZQotICAgKiBzYW1lIGNvbnZlcnNpb24gdGhhdCBhIGppdHRlcmJ1ZmZlciB3b3VsZCB1c2UgdG8gY29udmVydCBhbiBydHAgdGltZXN0YW1wCi0gICAqIGludG8gYSBjb3JyZXNwb25kaW5nIGdzdHJlYW1lciB0aW1lc3RhbXAuIE5vdGUgdGhhdCB0aGUgYmFzZV90aW1lIGFsc28KLSAgICogY29udGFpbnMgdGhlIGRyaWZ0IGJldHdlZW4gc2VuZGVyIGFuZCByZWNlaXZlci4gKi8KLSAgcnVubmluZ190aW1lID0KLSAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHJ1bm5pbmdfdGltZV9ydHAsIEdTVF9TRUNPTkQsIGNsb2NrX3JhdGUpOwotICBydW5uaW5nX3RpbWUgKz0gYmFzZV90aW1lOwotCi0gIC8qIGNvbnZlcnQgbnRwdGltZSB0byBuYW5vc2Vjb25kcyAqLwotICBudHBuc3RpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG50cHRpbWUsIEdTVF9TRUNPTkQsCi0gICAgICAoR19HSU5UNjRfQ09OU1RBTlQgKDEpIDw8IDMyKSk7Ci0KLSAgc3RyZWFtLT5oYXZlX3N5bmMgPSBUUlVFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwKLSAgICAgICJTUiBSVFAgcnVubmluZyB0aW1lICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgU1IgTlRQICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICBydW5uaW5nX3RpbWUsIG50cG5zdGltZSk7Ci0KLSAgLyogcmVjYWxjIGludGVyIHN0cmVhbSBwbGF5b3V0IG9mZnNldCwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZQotICAgKiBzdHJlYW0gb3Igd2UncmUgZG9pbmcgTlRQIHN5bmMuICovCi0gIGlmIChiaW4tPm50cF9zeW5jKSB7Ci0gICAgZ2ludDY0IG50cGRpZmYsIHJ0ZGlmZjsKLSAgICBndWludDY0IGxvY2FsX250cG5zdGltZTsKLSAgICBHc3RDbG9ja1RpbWUgbG9jYWxfcnVubmluZ190aW1lOwotCi0gICAgLyogRm9yIE5UUCBzeW5jIHdlIG5lZWQgdG8gZmlyc3QgZ2V0IGEgc25hcHNob3Qgb2YgcnVubmluZ190aW1lIGFuZCBOVFAKLSAgICAgKiB0aW1lLiBXZSBrbm93IGF0IHdoYXQgcnVubmluZ190aW1lIHdlIHBsYXkgYSBjZXJ0YWluIFJUUCB0aW1lLCB3ZSBhbHNvCi0gICAgICogY2FsY3VsYXRlZCB3aGVuIHdlIHdvdWxkIHBsYXkgdGhlIFJUUCB0aW1lIGluIHRoZSBTUiBwYWNrZXQuIE5vdyB3ZSBuZWVkCi0gICAgICogdG8ga25vdyBob3cgdGhlIHJ1bm5pbmdfdGltZSBhbmQgdGhlIE5UUCB0aW1lIHJlbGF0ZSB0byBlYWNob3RoZXIuICovCi0gICAgZ2V0X2N1cnJlbnRfdGltZXMgKGJpbiwgJmxvY2FsX3J1bm5pbmdfdGltZSwgJmxvY2FsX250cG5zdGltZSk7Ci0KLSAgICAvKiBzZWUgaG93IGZhciBhd2F5IHRoZSBOVFAgdGltZSBpcy4gVGhpcyBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQotICAgICAqIGN1cnJlbnQgTlRQIHRpbWUgYW5kIHRoZSBOVFAgdGltZSBpbiB0aGUgbGFzdCBTUiBwYWNrZXQuICovCi0gICAgbnRwZGlmZiA9IGxvY2FsX250cG5zdGltZSAtIG50cG5zdGltZTsKLSAgICAvKiBzZWUgaG93IGZhciBhd2F5IHRoZSBydW5uaW5nX3RpbWUgaXMuIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUKLSAgICAgKiBjdXJyZW50IHJ1bm5pbmdfdGltZSBhbmQgdGhlIHJ1bm5pbmdfdGltZSBvZiB0aGUgUlRQIHRpbWVzdGFtcCBpbiB0aGUKLSAgICAgKiBsYXN0IFNSIHBhY2tldC4gKi8KLSAgICBydGRpZmYgPSBsb2NhbF9ydW5uaW5nX3RpbWUgLSBydW5uaW5nX3RpbWU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICJsb2NhbCBOVFAgdGltZSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIFNSIE5UUCB0aW1lICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGxvY2FsX250cG5zdGltZSwgbnRwbnN0aW1lKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICJOVFAgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiwgUlQgZGlmZiAlIiBHX0dJTlQ2NF9GT1JNQVQsIG50cGRpZmYsCi0gICAgICAgIHJ0ZGlmZik7Ci0KLSAgICAvKiBjb21iaW5lIHRvIGdldCB0aGUgZmluYWwgZGlmZiB0byBhcHBseSB0byB0aGUgcnVubmluZ190aW1lICovCi0gICAgc3RyZWFtLT5ydF9kZWx0YSA9IHJ0ZGlmZiAtIG50cGRpZmY7Ci0KLSAgICBzdHJlYW1fc2V0X3RzX29mZnNldCAoYmluLCBzdHJlYW0sIHN0cmVhbS0+cnRfZGVsdGEsIEZBTFNFKTsKLSAgfSBlbHNlIHsKLSAgICBnaW50NjQgbWluLCBydHBfbWluLCBjbG9ja19iYXNlID0gc3RyZWFtLT5jbG9ja19iYXNlOwotICAgIGdib29sZWFuIGFsbF9zeW5jLCB1c2VfcnRwOwotICAgIGdib29sZWFuIHJ0Y3Bfc3luYyA9IGdfYXRvbWljX2ludF9nZXQgKCZiaW4tPnJ0Y3Bfc3luYyk7Ci0KLSAgICAvKiBjYWxjdWxhdGUgZGVsdGEgYmV0d2VlbiBzZXJ2ZXIgYW5kIHJlY2VpdmVyLiBudHBuc3RpbWUgaXMgY3JlYXRlZCBieQotICAgICAqIGNvbnZlcnRpbmcgdGhlIG50cHRpbWUgaW4gdGhlIGxhc3QgU1IgcGFja2V0IHRvIGEgZ3N0cmVhbWVyIHRpbWVzdGFtcC4gVGhpcwotICAgICAqIGRlbHRhIGV4cHJlc3NlcyB0aGUgZGlmZmVyZW5jZSB0byBvdXIgdGltZWxpbmUgYW5kIHRoZSBzZXJ2ZXIgdGltZWxpbmUuIFRoZQotICAgICAqIGRpZmZlcmVuY2UgaW4gaXRzZWxmIGRvZXNuJ3QgbWVhbiBtdWNoIGJ1dCB3ZSBjYW4gY29tYmluZSB0aGUgZGVsdGEgb2YKLSAgICAgKiBtdWx0aXBsZSBzdHJlYW1zIHRvIGNyZWF0ZSBhIHN0cmVhbSBzcGVjaWZpYyBvZmZzZXQuICovCi0gICAgc3RyZWFtLT5ydF9kZWx0YSA9IG50cG5zdGltZSAtIHJ1bm5pbmdfdGltZTsKLQotICAgIC8qIGNhbGN1bGF0ZSB0aGUgbWluIG9mIGFsbCBkZWx0YXMsIGlnbm9yaW5nIHN0cmVhbXMgdGhhdCBkaWQgbm90IHlldCBoYXZlIGEKLSAgICAgKiB2YWxpZCBydF9kZWx0YSBiZWNhdXNlIHdlIGRpZCBub3QgeWV0IHJlY2VpdmUgYW4gU1IgcGFja2V0IGZvciB0aG9zZQotICAgICAqIHN0cmVhbXMuCi0gICAgICogV2UgY2FsY3VsYXRlIHRoZSBtaW5pbnVtIGJlY2F1c2Ugd2Ugd291bGQgbGlrZSB0byBvbmx5IGFwcGx5IHBvc2l0aXZlCi0gICAgICogb2Zmc2V0cyB0byBzdHJlYW1zLCBkZWxheWluZyB0aGVpciBwbGF5YmFjayBpbnN0ZWFkIG9mIHRyeWluZyB0byBzcGVlZCB1cAotICAgICAqIG90aGVyIHN0cmVhbXMgKHdoaWNoIG1pZ2h0IGJlIGltcG9zaWJsZSB3aGVuIHdlIGhhdmUgdG8gY3JlYXRlIG5lZ2F0aXZlCi0gICAgICogbGF0ZW5jaWVzKS4KLSAgICAgKiBUaGUgc3RyZWFtIHRoYXQgaGFzIHRoZSBzbWFsbGVzdCBkaWZmIGlzIHNlbGVjdGVkIGFzIHRoZSByZWZlcmVuY2Ugc3RyZWFtLAotICAgICAqIGFsbCBvdGhlciBzdHJlYW1zIHdpbGwgaGF2ZSBhIHBvc2l0aXZlIG9mZnNldCB0byB0aGlzIGRpZmZlcmVuY2UuICovCi0KLSAgICAvKiBzb21lIGFsdGVybmF0aXZlIHNldHRpbmcgYWxsb3cgaWdub3JpbmcgUlRDUCBhcyBtdWNoIGFzIHBvc3NpYmxlLAotICAgICAqIGZvciBzZXJ2ZXJzIGdlbmVyYXRpbmcgYm9ndXMgbnRwIHRpbWVsaW5lICovCi0gICAgbWluID0gcnRwX21pbiA9IEdfTUFYSU5UNjQ7Ci0gICAgdXNlX3J0cCA9IEZBTFNFOwotICAgIGlmIChydGNwX3N5bmMgPT0gR1NUX1JUUF9CSU5fUlRDUF9TWU5DX1JUUCkgewotICAgICAgZ3VpbnQ2NCBleHRfYmFzZTsKLQotICAgICAgdXNlX3J0cCA9IFRSVUU7Ci0gICAgICAvKiBzaWduZWQgdmVyc2lvbiBmb3IgY29udmllbmllbmNlICovCi0gICAgICBjbG9ja19iYXNlID0gYmFzZV9ydHB0aW1lOwotICAgICAgLyogZGVhbCB3aXRoIHBvc3NpYmxlIHdyYXAtYXJvdW5kICovCi0gICAgICBleHRfYmFzZSA9IGJhc2VfcnRwdGltZTsKLSAgICAgIHJ0cF9jbG9ja19iYXNlID0gZ3N0X3J0cF9idWZmZXJfZXh0X3RpbWVzdGFtcCAoJmV4dF9iYXNlLCBydHBfY2xvY2tfYmFzZSk7Ci0gICAgICAvKiBzYW5pdHkgY2hlY2s7IGJhc2UgcnRwIGFuZCBwcm92aWRlZCBjbG9ja19iYXNlIHNob3VsZCBiZSBjbG9zZSAqLwotICAgICAgaWYgKHJ0cF9jbG9ja19iYXNlID49IGNsb2NrX2Jhc2UpIHsKLSAgICAgICAgaWYgKHJ0cF9jbG9ja19iYXNlIC0gY2xvY2tfYmFzZSA8IDEwICogY2xvY2tfcmF0ZSkgewotICAgICAgICAgIHJ0cF9jbG9ja19iYXNlID0gYmFzZV90aW1lICsKLSAgICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAocnRwX2Nsb2NrX2Jhc2UgLSBjbG9ja19iYXNlLAotICAgICAgICAgICAgICBHU1RfU0VDT05ELCBjbG9ja19yYXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB1c2VfcnRwID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjbG9ja19iYXNlIC0gcnRwX2Nsb2NrX2Jhc2UgPCAxMCAqIGNsb2NrX3JhdGUpIHsKLSAgICAgICAgICBydHBfY2xvY2tfYmFzZSA9IGJhc2VfdGltZSAtCi0gICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGNsb2NrX2Jhc2UgLSBydHBfY2xvY2tfYmFzZSwKLSAgICAgICAgICAgICAgR1NUX1NFQ09ORCwgY2xvY2tfcmF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdXNlX3J0cCA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiB3YXJuIGFuZCBiYWlsIGZvciBjbGFyaXR5IG91dCBpZiBubyBzYW5lIHZhbHVlcyAqLwotICAgICAgaWYgKCF1c2VfcnRwKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYmluLCAidW5hYmxlIHRvIHN5bmMgdG8gcHJvdmlkZWQgcnRwdGltZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICAvKiBzdG9yZSB0byB0cmFjayBjaGFuZ2VzICovCi0gICAgICBjbG9ja19iYXNlID0gcnRwX2Nsb2NrX2Jhc2U7Ci0gICAgICAvKiBnZW5lcmF0ZSBhIGZha2UgYXMgYmVmb3JlLAotICAgICAgICogbm93IGVxdWF0aW5nIHJ0cHRpbWUgb2J0YWluZWQgZnJvbSBSVFAtSW5mbywKLSAgICAgICAqIHdoZXJlIHRoZSBsYXJnZSB0aW1lIHJlcHJlc2VudCB0aGUgb3RoZXJ3aXNlIGlycmVsZXZhbnQgbnB0L250cCB0aW1lICovCi0gICAgICBzdHJlYW0tPnJ0cF9kZWx0YSA9IChHU1RfU0VDT05EIDw8IDI4KSAtIHJ0cF9jbG9ja19iYXNlOwotICAgIH0gZWxzZSB7Ci0gICAgICBjbG9ja19iYXNlID0gcnRwX2Nsb2NrX2Jhc2U7Ci0gICAgfQotCi0gICAgYWxsX3N5bmMgPSBUUlVFOwotICAgIGZvciAod2FsayA9IGNsaWVudC0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICAgIEdzdFJ0cEJpblN0cmVhbSAqb3N0cmVhbSA9IChHc3RSdHBCaW5TdHJlYW0gKikgd2Fsay0+ZGF0YTsKLQotICAgICAgaWYgKCFvc3RyZWFtLT5oYXZlX3N5bmMpIHsKLSAgICAgICAgYWxsX3N5bmMgPSBGQUxTRTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIGNoYW5nZSBpbiBjdXJyZW50IHN0cmVhbSdzIGJhc2UgZnJvbSBwcmV2aW91c2x5IGluaXQnZWQgdmFsdWUKLSAgICAgICAqIGxlYWRzIHRvIHJlc2V0IG9mIGFsbCBzdHJlYW0ncyBiYXNlICovCi0gICAgICBpZiAoc3RyZWFtICE9IG9zdHJlYW0gJiYgc3RyZWFtLT5jbG9ja19iYXNlID49IDAgJiYKLSAgICAgICAgICAoc3RyZWFtLT5jbG9ja19iYXNlICE9IGNsb2NrX2Jhc2UpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInJlc2V0IHVwb24gY2xvY2sgYmFzZSBjaGFuZ2UiKTsKLSAgICAgICAgb3N0cmVhbS0+Y2xvY2tfYmFzZSA9IC0xMDAgKiBHU1RfU0VDT05EOwotICAgICAgICBvc3RyZWFtLT5ydHBfZGVsdGEgPSAwOwotICAgICAgfQotCi0gICAgICBpZiAob3N0cmVhbS0+cnRfZGVsdGEgPCBtaW4pCi0gICAgICAgIG1pbiA9IG9zdHJlYW0tPnJ0X2RlbHRhOwotICAgICAgaWYgKG9zdHJlYW0tPnJ0cF9kZWx0YSA8IHJ0cF9taW4pCi0gICAgICAgIHJ0cF9taW4gPSBvc3RyZWFtLT5ydHBfZGVsdGE7Ci0gICAgfQotCi0gICAgLyogYXJyYW5nZSB0byByZS1zeW5jIGZvciBlYWNoIHN0cmVhbSB1cG9uIHNpZ25pZmljYW50IGNoYW5nZSwKLSAgICAgKiBlLmcuIHBvc3Qtc2VlayAqLwotICAgIGFsbF9zeW5jID0gYWxsX3N5bmMgJiYgKHN0cmVhbS0+Y2xvY2tfYmFzZSA9PSBjbG9ja19iYXNlKTsKLSAgICBzdHJlYW0tPmNsb2NrX2Jhc2UgPSBjbG9ja19iYXNlOwotCi0gICAgLyogbWF5IG5lZWQgaW5pdCBwZXJmb3JtZWQgYWJvdmUgbGF0ZXIgb24sIGJ1dCBub3RoaW5nIG1vcmUgdG8gZG8gbm93ICovCi0gICAgaWYgKGNsaWVudC0+bnN0cmVhbXMgPD0gMSkKLSAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgImNsaWVudCAlcCBtaW4gZGVsdGEgJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAgICIgYWxsIHN5bmMgJWQiLCBjbGllbnQsIG1pbiwgYWxsX3N5bmMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInJ0Y3Agc3luYyBtb2RlICVkLCB1c2VfcnRwICVkIiwgcnRjcF9zeW5jLCB1c2VfcnRwKTsKLQotICAgIHN3aXRjaCAocnRjcF9zeW5jKSB7Ci0gICAgICBjYXNlIEdTVF9SVFBfQklOX1JUQ1BfU1lOQ19SVFA6Ci0gICAgICAgIGlmICghdXNlX3J0cCkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAidXNpbmcgcnRwIGdlbmVyYXRlZCByZXBvcnRzOyAiCi0gICAgICAgICAgICAiY2xpZW50ICVwIG1pbiBydHAgZGVsdGEgJSIgR19HSU5UNjRfRk9STUFULCBjbGllbnQsIHJ0cF9taW4pOwotICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICAgIGNhc2UgR1NUX1JUUF9CSU5fUlRDUF9TWU5DX0lOSVRJQUw6Ci0gICAgICAgIC8qIGlmIGFsbCBoYXZlIGJlZW4gc3luY2VkIGFscmVhZHksIGRvIG5vdCBib3RoZXIgZnVydGhlciAqLwotICAgICAgICBpZiAoYWxsX3N5bmMpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJhbGwgc3RyZWFtcyBhbHJlYWR5IHN5bmNlZDsgZG9uZSIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8qIGJhaWwgb3V0IGlmIHdlIGFkanVzdGVkIHJlY2VudGx5IGVub3VnaCAqLwotICAgIGlmIChhbGxfc3luYyAmJiAobnRwbnN0aW1lIC0gYmluLT5wcml2LT5sYXN0X250cG5zdGltZSkgPAotICAgICAgICBiaW4tPnJ0Y3Bfc3luY19pbnRlcnZhbCAqIEdTVF9NU0VDT05EKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJkaXNjYXJkaW5nIFJUQ1Agc2VuZGVyIHBhY2tldCBmb3Igc3luYzsgIgotICAgICAgICAgICJwcmV2aW91cyBzZW5kZXIgaW5mbyB0b28gcmVjZW50ICIKLSAgICAgICAgICAiKHByZXZpb3VzIE5UUCAlIiBHX0dVSU5UNjRfRk9STUFUICIpIiwgYmluLT5wcml2LT5sYXN0X250cG5zdGltZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGJpbi0+cHJpdi0+bGFzdF9udHBuc3RpbWUgPSBudHBuc3RpbWU7Ci0KLSAgICAvKiBjYWxjdWxhdGUgb2Zmc2V0cyBmb3IgZWFjaCBzdHJlYW0gKi8KLSAgICBmb3IgKHdhbGsgPSBjbGllbnQtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgICBHc3RSdHBCaW5TdHJlYW0gKm9zdHJlYW0gPSAoR3N0UnRwQmluU3RyZWFtICopIHdhbGstPmRhdGE7Ci0gICAgICBnaW50NjQgdHNfb2Zmc2V0OwotCi0gICAgICAvKiBpZ25vcmUgc3RyZWFtcyBmb3Igd2hpY2ggd2UgZGlkbid0IHJlY2VpdmUgYW4gU1IgcGFja2V0IHlldCwgd2UKLSAgICAgICAqIGNhbid0IHN5bmNocm9uaXplIHRoZW0geWV0LiBXZSBjYW4gaG93ZXZlciBzeW5jIG90aGVyIHN0cmVhbXMganVzdAotICAgICAgICogZmluZS4gKi8KLSAgICAgIGlmICghb3N0cmVhbS0+aGF2ZV9zeW5jKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgLyogY2FsY3VsYXRlIG9mZnNldCB0byBvdXIgcmVmZXJlbmNlIHN0cmVhbSwgdGhpcyBzaG91bGQgYWx3YXlzIGdpdmUgYQotICAgICAgICogcG9zaXRpdmUgbnVtYmVyLiAqLwotICAgICAgaWYgKHVzZV9ydHApCi0gICAgICAgIHRzX29mZnNldCA9IG9zdHJlYW0tPnJ0cF9kZWx0YSAtIHJ0cF9taW47Ci0gICAgICBlbHNlCi0gICAgICAgIHRzX29mZnNldCA9IG9zdHJlYW0tPnJ0X2RlbHRhIC0gbWluOwotCi0gICAgICBzdHJlYW1fc2V0X3RzX29mZnNldCAoYmluLCBvc3RyZWFtLCB0c19vZmZzZXQsIFRSVUUpOwotICAgIH0KLSAgfQotICBnc3RfcnRwX2Jpbl9zZW5kX3N5bmNfZXZlbnQgKHN0cmVhbSk7Ci0KLSAgcmV0dXJuOwotfQotCi0jZGVmaW5lIEdTVF9SVENQX0JVRkZFUl9GT1JfUEFDS0VUUyhiLGJ1ZmZlcixwYWNrZXQpIFwKLSAgZm9yICgoYikgPSBnc3RfcnRjcF9idWZmZXJfZ2V0X2ZpcnN0X3BhY2tldCAoKGJ1ZmZlciksIChwYWNrZXQpKTsgKGIpOyBcCi0gICAgICAgICAgKGIpID0gZ3N0X3J0Y3BfcGFja2V0X21vdmVfdG9fbmV4dCAoKHBhY2tldCkpKQotCi0jZGVmaW5lIEdTVF9SVENQX1NERVNfRk9SX0lURU1TKGIscGFja2V0KSBcCi0gIGZvciAoKGIpID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZmlyc3RfaXRlbSAoKHBhY2tldCkpOyAoYik7IFwKLSAgICAgICAgICAoYikgPSBnc3RfcnRjcF9wYWNrZXRfc2Rlc19uZXh0X2l0ZW0gKChwYWNrZXQpKSkKLQotI2RlZmluZSBHU1RfUlRDUF9TREVTX0ZPUl9FTlRSSUVTKGIscGFja2V0KSBcCi0gIGZvciAoKGIpID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZmlyc3RfZW50cnkgKChwYWNrZXQpKTsgKGIpOyBcCi0gICAgICAgICAgKGIpID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfbmV4dF9lbnRyeSAoKHBhY2tldCkpKQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9iaW5faGFuZGxlX3N5bmMgKEdzdEVsZW1lbnQgKiBqaXR0ZXJidWZmZXIsIEdzdFN0cnVjdHVyZSAqIHMsCi0gICAgR3N0UnRwQmluU3RyZWFtICogc3RyZWFtKQotewotICBHc3RSdHBCaW4gKmJpbjsKLSAgR3N0UlRDUFBhY2tldCBwYWNrZXQ7Ci0gIGd1aW50MzIgc3NyYzsKLSAgZ3VpbnQ2NCBudHB0aW1lOwotICBnYm9vbGVhbiBoYXZlX3NyLCBoYXZlX3NkZXM7Ci0gIGdib29sZWFuIG1vcmU7Ci0gIGd1aW50NjQgYmFzZV9ydHB0aW1lOwotICBndWludDY0IGJhc2VfdGltZTsKLSAgZ3VpbnQgY2xvY2tfcmF0ZTsKLSAgZ3VpbnQ2NCBjbG9ja19iYXNlOwotICBndWludDY0IGV4dHJ0cHRpbWU7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSB7IE5VTEwsIH07Ci0KLSAgYmluID0gc3RyZWFtLT5iaW47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAic3luYyBoYW5kbGVyIGNhbGxlZCIpOwotCi0gIC8qIGdldCB0aGUgbGFzdCByZWxhdGlvbiBiZXR3ZWVuIHRoZSBydHAgdGltZXN0YW1wcyBhbmQgdGhlIGdzdHJlYW1lcgotICAgKiB0aW1lc3RhbXBzLiBXZSBnZXQgdGhpcyBpbmZvIGRpcmVjdGx5IGZyb20gdGhlIGppdHRlcmJ1ZmZlciB3aGljaAotICAgKiBjb25zdHJ1Y3RzIGdzdHJlYW1lciB0aW1lc3RhbXBzIGZyb20gcnRwIHRpbWVzdGFtcHMgYW5kIHNvIGl0IGtub3cgZXhhY3RseQotICAgKiB3aGF0IHRoZSBjdXJyZW50IHNpdHVhdGlvbiBpcy4gKi8KLSAgYmFzZV9ydHB0aW1lID0KLSAgICAgIGdfdmFsdWVfZ2V0X3VpbnQ2NCAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJiYXNlLXJ0cHRpbWUiKSk7Ci0gIGJhc2VfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJiYXNlLXRpbWUiKSk7Ci0gIGNsb2NrX3JhdGUgPSBnX3ZhbHVlX2dldF91aW50IChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgImNsb2NrLXJhdGUiKSk7Ci0gIGNsb2NrX2Jhc2UgPSBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiY2xvY2stYmFzZSIpKTsKLSAgZXh0cnRwdGltZSA9Ci0gICAgICBnX3ZhbHVlX2dldF91aW50NjQgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAic3ItZXh0LXJ0cHRpbWUiKSk7Ci0gIGJ1ZmZlciA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyIChnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInNyLWJ1ZmZlciIpKTsKLQotICBoYXZlX3NyID0gRkFMU0U7Ci0gIGhhdmVfc2RlcyA9IEZBTFNFOwotCi0gIGdzdF9ydGNwX2J1ZmZlcl9tYXAgKGJ1ZmZlciwgR1NUX01BUF9SRUFELCAmcnRjcCk7Ci0KLSAgR1NUX1JUQ1BfQlVGRkVSX0ZPUl9QQUNLRVRTIChtb3JlLCAmcnRjcCwgJnBhY2tldCkgewotICAgIC8qIGZpcnN0IHBhY2tldCBtdXN0IGJlIFNSIG9yIFJSIG9yIGVsc2UgdGhlIHZhbGlkYXRlIHdvdWxkIGhhdmUgZmFpbGVkICovCi0gICAgc3dpdGNoIChnc3RfcnRjcF9wYWNrZXRfZ2V0X3R5cGUgKCZwYWNrZXQpKSB7Ci0gICAgICBjYXNlIEdTVF9SVENQX1RZUEVfU1I6Ci0gICAgICAgIC8qIG9ubHkgcGFyc2UgZmlyc3QuIFRoZXJlIGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgb25lIFNSIGluIHRoZSBwYWNrZXQKLSAgICAgICAgICogYnV0IHdlIHdpbGwgZGVhbCB3aXRoIG1hbGZvcm1lZCBwYWNrZXRzIGdyYWNlZnVsbHkgKi8KLSAgICAgICAgaWYgKGhhdmVfc3IpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIGdldCBOVFAgYW5kIFJUUCB0aW1lcyAqLwotICAgICAgICBnc3RfcnRjcF9wYWNrZXRfc3JfZ2V0X3NlbmRlcl9pbmZvICgmcGFja2V0LCAmc3NyYywgJm50cHRpbWUsIE5VTEwsCi0gICAgICAgICAgICBOVUxMLCBOVUxMKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJyZWNlaXZlZCBzeW5jIHBhY2tldCBmcm9tIFNTUkMgJTA4eCIsIHNzcmMpOwotICAgICAgICAvKiBpZ25vcmUgU1IgdGhhdCBpcyBub3Qgb3VycyAqLwotICAgICAgICBpZiAoc3NyYyAhPSBzdHJlYW0tPnNzcmMpCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaGF2ZV9zciA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUlRDUF9UWVBFX1NERVM6Ci0gICAgICB7Ci0gICAgICAgIGdib29sZWFuIG1vcmVfaXRlbXMsIG1vcmVfZW50cmllczsKLQotICAgICAgICAvKiBvbmx5IGRlYWwgd2l0aCBmaXJzdCBTREVTLCB0aGVyZSBpcyBvbmx5IHN1cHBvc2VkIHRvIGJlIG9uZSBTREVTIGluCi0gICAgICAgICAqIHRoZSBSVENQIHBhY2tldCBidXQgd2UgZGVhbCB3aXRoIGJhZCBwYWNrZXRzIGdyYWNlZnVsbHkuIEFsc28gYmFpbAotICAgICAgICAgKiBvdXQgaWYgd2UgaGF2ZSBub3Qgc2VlbiBhbiBTUiBpdGVtIHlldC4gKi8KLSAgICAgICAgaWYgKGhhdmVfc2RlcyB8fCAhaGF2ZV9zcikKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBHU1RfUlRDUF9TREVTX0ZPUl9JVEVNUyAobW9yZV9pdGVtcywgJnBhY2tldCkgewotICAgICAgICAgIC8qIHNraXAgaXRlbXMgdGhhdCBhcmUgbm90IGFib3V0IHRoZSBTU1JDIG9mIHRoZSBzZW5kZXIgKi8KLSAgICAgICAgICBpZiAoZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZ2V0X3NzcmMgKCZwYWNrZXQpICE9IHNzcmMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIC8qIGZpbmQgdGhlIENOQU1FIGVudHJ5ICovCi0gICAgICAgICAgR1NUX1JUQ1BfU0RFU19GT1JfRU5UUklFUyAobW9yZV9lbnRyaWVzLCAmcGFja2V0KSB7Ci0gICAgICAgICAgICBHc3RSVENQU0RFU1R5cGUgdHlwZTsKLSAgICAgICAgICAgIGd1aW50OCBsZW47Ci0gICAgICAgICAgICBndWludDggKmRhdGE7Ci0KLSAgICAgICAgICAgIGdzdF9ydGNwX3BhY2tldF9zZGVzX2dldF9lbnRyeSAoJnBhY2tldCwgJnR5cGUsICZsZW4sICZkYXRhKTsKLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR1NUX1JUQ1BfU0RFU19DTkFNRSkgewotICAgICAgICAgICAgICBHU1RfUlRQX0JJTl9MT0NLIChiaW4pOwotICAgICAgICAgICAgICAvKiBhc3NvY2lhdGUgdGhlIHN0cmVhbSB0byBDTkFNRSAqLwotICAgICAgICAgICAgICBnc3RfcnRwX2Jpbl9hc3NvY2lhdGUgKGJpbiwgc3RyZWFtLCBsZW4sIGRhdGEsCi0gICAgICAgICAgICAgICAgICBudHB0aW1lLCBleHRydHB0aW1lLCBiYXNlX3J0cHRpbWUsIGJhc2VfdGltZSwgY2xvY2tfcmF0ZSwKLSAgICAgICAgICAgICAgICAgIGNsb2NrX2Jhc2UpOwotICAgICAgICAgICAgICBHU1RfUlRQX0JJTl9VTkxPQ0sgKGJpbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGhhdmVfc2RlcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLyogd2UgY2FuIGlnbm9yZSB0aGVzZSBwYWNrZXRzICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBnc3RfcnRjcF9idWZmZXJfdW5tYXAgKCZydGNwKTsKLX0KLQotLyogY3JlYXRlIGEgbmV3IHN0cmVhbSB3aXRoIEBzc3JjIGluIEBzZXNzaW9uLiBNdXN0IGJlIGNhbGxlZCB3aXRoCi0gKiBSVFBfU0VTU0lPTl9MT0NLLiAqLwotc3RhdGljIEdzdFJ0cEJpblN0cmVhbSAqCi1jcmVhdGVfc3RyZWFtIChHc3RSdHBCaW5TZXNzaW9uICogc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKQotewotICBHc3RFbGVtZW50ICpidWZmZXIsICpkZW11eCA9IE5VTEw7Ci0gIEdzdFJ0cEJpblN0cmVhbSAqc3RyZWFtOwotICBHc3RSdHBCaW4gKnJ0cGJpbjsKLSAgR3N0U3RhdGUgdGFyZ2V0OwotCi0gIHJ0cGJpbiA9IHNlc3Npb24tPmJpbjsKLQotICBpZiAoZ19zbGlzdF9sZW5ndGggKHNlc3Npb24tPnN0cmVhbXMpID49IHJ0cGJpbi0+bWF4X3N0cmVhbXMpCi0gICAgZ290byBtYXhfc3RyZWFtczsKLQotICBpZiAoIShidWZmZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBqaXR0ZXJidWZmZXIiLCBOVUxMKSkpCi0gICAgZ290byBub19qaXR0ZXJidWZmZXI7Ci0KLSAgaWYgKCFydHBiaW4tPmlnbm9yZV9wdCkKLSAgICBpZiAoIShkZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHB0ZGVtdXgiLCBOVUxMKSkpCi0gICAgICBnb3RvIG5vX2RlbXV4OwotCi0gIHN0cmVhbSA9IGdfbmV3MCAoR3N0UnRwQmluU3RyZWFtLCAxKTsKLSAgc3RyZWFtLT5zc3JjID0gc3NyYzsKLSAgc3RyZWFtLT5iaW4gPSBydHBiaW47Ci0gIHN0cmVhbS0+c2Vzc2lvbiA9IHNlc3Npb247Ci0gIHN0cmVhbS0+YnVmZmVyID0gYnVmZmVyOwotICBzdHJlYW0tPmRlbXV4ID0gZGVtdXg7Ci0KLSAgc3RyZWFtLT5oYXZlX3N5bmMgPSBGQUxTRTsKLSAgc3RyZWFtLT5ydF9kZWx0YSA9IDA7Ci0gIHN0cmVhbS0+cnRwX2RlbHRhID0gMDsKLSAgc3RyZWFtLT5wZXJjZW50ID0gMTAwOwotICBzdHJlYW0tPmNsb2NrX2Jhc2UgPSAtMTAwICogR1NUX1NFQ09ORDsKLSAgc2Vzc2lvbi0+c3RyZWFtcyA9IGdfc2xpc3RfcHJlcGVuZCAoc2Vzc2lvbi0+c3RyZWFtcywgc3RyZWFtKTsKLQotICAvKiBwcm92aWRlIGNsb2NrX3JhdGUgdG8gdGhlIGppdHRlcmJ1ZmZlciB3aGVuIG5lZWRlZCAqLwotICBzdHJlYW0tPmJ1ZmZlcl9wdHJlcV9zaWcgPSBnX3NpZ25hbF9jb25uZWN0IChidWZmZXIsICJyZXF1ZXN0LXB0LW1hcCIsCi0gICAgICAoR0NhbGxiYWNrKSBwdF9tYXBfcmVxdWVzdGVkLCBzZXNzaW9uKTsKLSAgc3RyZWFtLT5idWZmZXJfbnRwc3RvcF9zaWcgPSBnX3NpZ25hbF9jb25uZWN0IChidWZmZXIsICJvbi1ucHQtc3RvcCIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9ucHRfc3RvcCwgc3RyZWFtKTsKLQotICBnX29iamVjdF9zZXRfZGF0YSAoR19PQkpFQ1QgKGJ1ZmZlciksICJHc3RSVFBCaW4uc2Vzc2lvbiIsIHNlc3Npb24pOwotICBnX29iamVjdF9zZXRfZGF0YSAoR19PQkpFQ1QgKGJ1ZmZlciksICJHc3RSVFBCaW4uc3RyZWFtIiwgc3RyZWFtKTsKLQotICAvKiBjb25maWd1cmUgbGF0ZW5jeSBhbmQgcGFja2V0IGxvc3QgKi8KLSAgZ19vYmplY3Rfc2V0IChidWZmZXIsICJsYXRlbmN5IiwgcnRwYmluLT5sYXRlbmN5X21zLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChidWZmZXIsICJkcm9wLW9uLWxhdGVuY3kiLCBydHBiaW4tPmRyb3Bfb25fbGF0ZW5jeSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoYnVmZmVyLCAiZG8tbG9zdCIsIHJ0cGJpbi0+ZG9fbG9zdCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoYnVmZmVyLCAibW9kZSIsIHJ0cGJpbi0+YnVmZmVyX21vZGUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGJ1ZmZlciwgImRvLXJldHJhbnNtaXNzaW9uIiwgcnRwYmluLT5kb19yZXRyYW5zbWlzc2lvbiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoYnVmZmVyLCAibWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiIsCi0gICAgICBydHBiaW4tPm1heF9ydGNwX3J0cF90aW1lX2RpZmYsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGJ1ZmZlciwgIm1heC1kcm9wb3V0LXRpbWUiLCBydHBiaW4tPm1heF9kcm9wb3V0X3RpbWUsCi0gICAgICAibWF4LW1pc29yZGVyLXRpbWUiLCBydHBiaW4tPm1heF9taXNvcmRlcl90aW1lLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChidWZmZXIsICJyZmM3MjczLXN5bmMiLCBydHBiaW4tPnJmYzcyNzNfc3luYywgTlVMTCk7Ci0KLSAgZ19zaWduYWxfZW1pdCAocnRwYmluLCBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9ORVdfSklUVEVSQlVGRkVSXSwgMCwKLSAgICAgIGJ1ZmZlciwgc2Vzc2lvbi0+aWQsIHNzcmMpOwotCi0gIGlmICghcnRwYmluLT5pZ25vcmVfcHQpCi0gICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAocnRwYmluKSwgZGVtdXgpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTl9DQVNUIChydHBiaW4pLCBidWZmZXIpOwotCi0gIC8qIGxpbmsgc3R1ZmYgKi8KLSAgaWYgKGRlbXV4KQotICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChidWZmZXIsICJzcmMiLCBkZW11eCwgInNpbmsiLAotICAgICAgICBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0KLSAgaWYgKHJ0cGJpbi0+YnVmZmVyaW5nKSB7Ci0gICAgZ3VpbnQ2NCBsYXN0X291dDsKLQotICAgIEdTVF9JTkZPX09CSkVDVCAocnRwYmluLAotICAgICAgICAiYmluIGlzIGJ1ZmZlcmluZywgc2V0IGppdHRlcmJ1ZmZlciBhcyBub3QgYWN0aXZlIik7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChidWZmZXIsICJzZXQtYWN0aXZlIiwgRkFMU0UsIChnaW50NjQpIDAsICZsYXN0X291dCk7Ci0gIH0KLQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnRwYmluKTsKLSAgdGFyZ2V0ID0gR1NUX1NUQVRFX1RBUkdFVCAocnRwYmluKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cGJpbik7Ci0KLSAgLyogZnJvbSBzaW5rIHRvIHNvdXJjZSAqLwotICBpZiAoZGVtdXgpCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZW11eCwgdGFyZ2V0KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJ1ZmZlciwgdGFyZ2V0KTsKLQotICByZXR1cm4gc3RyZWFtOwotCi0gIC8qIEVSUk9SUyAqLwotbWF4X3N0cmVhbXM6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0cGJpbiwgInN0cmVhbSBleGVlZHMgbWF4aW11bSAoJWQpIiwKLSAgICAgICAgcnRwYmluLT5tYXhfc3RyZWFtcyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX2ppdHRlcmJ1ZmZlcjoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogY291bGQgbm90IGNyZWF0ZSBydHBqaXR0ZXJidWZmZXIgZWxlbWVudCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1ub19kZW11eDoKLSAgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBjb3VsZCBub3QgY3JlYXRlIHJ0cHB0ZGVtdXggZWxlbWVudCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qIGNhbGxlZCB3aXRoIFJUUF9CSU5fTE9DSyAqLwotc3RhdGljIHZvaWQKLWZyZWVfc3RyZWFtIChHc3RSdHBCaW5TdHJlYW0gKiBzdHJlYW0sIEdzdFJ0cEJpbiAqIGJpbikKLXsKLSAgR1NMaXN0ICpjbGllbnRzLCAqbmV4dF9jbGllbnQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZnJlZWluZyBzdHJlYW0gJXAiLCBzdHJlYW0pOwotCi0gIGlmIChzdHJlYW0tPmRlbXV4KSB7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzdHJlYW0tPmRlbXV4LCBzdHJlYW0tPmRlbXV4X25ld3BhZF9zaWcpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoc3RyZWFtLT5kZW11eCwgc3RyZWFtLT5kZW11eF9wdHJlcV9zaWcpOwotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoc3RyZWFtLT5kZW11eCwgc3RyZWFtLT5kZW11eF9wdGNoYW5nZV9zaWcpOwotICB9Ci0gIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoc3RyZWFtLT5idWZmZXIsIHN0cmVhbS0+YnVmZmVyX2hhbmRsZXN5bmNfc2lnKTsKLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzdHJlYW0tPmJ1ZmZlciwgc3RyZWFtLT5idWZmZXJfcHRyZXFfc2lnKTsKLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzdHJlYW0tPmJ1ZmZlciwgc3RyZWFtLT5idWZmZXJfbnRwc3RvcF9zaWcpOwotCi0gIGlmIChzdHJlYW0tPmRlbXV4KQotICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHN0cmVhbS0+ZGVtdXgsIFRSVUUpOwotICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzdHJlYW0tPmJ1ZmZlciwgVFJVRSk7Ci0KLSAgaWYgKHN0cmVhbS0+ZGVtdXgpCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzdHJlYW0tPmRlbXV4LCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3RyZWFtLT5idWZmZXIsIEdTVF9TVEFURV9OVUxMKTsKLQotICAvKiBub3cgcmVtb3ZlIHRoaXMgc2lnbmFsLCB3ZSBuZWVkIHRoaXMgd2hpbGUgZ29pbmcgdG8gTlVMTCBiZWNhdXNlIGl0IHRvCi0gICAqIGRvIHNvbWUgY2xlYW51cHMgKi8KLSAgaWYgKHN0cmVhbS0+ZGVtdXgpCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChzdHJlYW0tPmRlbXV4LCBzdHJlYW0tPmRlbXV4X3BhZHJlbW92ZWRfc2lnKTsKLQotICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTl9DQVNUIChiaW4pLCBzdHJlYW0tPmJ1ZmZlcik7Ci0gIGlmIChzdHJlYW0tPmRlbXV4KQotICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOX0NBU1QgKGJpbiksIHN0cmVhbS0+ZGVtdXgpOwotCi0gIGZvciAoY2xpZW50cyA9IGJpbi0+Y2xpZW50czsgY2xpZW50czsgY2xpZW50cyA9IG5leHRfY2xpZW50KSB7Ci0gICAgR3N0UnRwQmluQ2xpZW50ICpjbGllbnQgPSAoR3N0UnRwQmluQ2xpZW50ICopIGNsaWVudHMtPmRhdGE7Ci0gICAgR1NMaXN0ICpzdHJlYW1zLCAqbmV4dF9zdHJlYW07Ci0KLSAgICBuZXh0X2NsaWVudCA9IGdfc2xpc3RfbmV4dCAoY2xpZW50cyk7Ci0KLSAgICBmb3IgKHN0cmVhbXMgPSBjbGllbnQtPnN0cmVhbXM7IHN0cmVhbXM7IHN0cmVhbXMgPSBuZXh0X3N0cmVhbSkgewotICAgICAgR3N0UnRwQmluU3RyZWFtICpvc3RyZWFtID0gKEdzdFJ0cEJpblN0cmVhbSAqKSBzdHJlYW1zLT5kYXRhOwotCi0gICAgICBuZXh0X3N0cmVhbSA9IGdfc2xpc3RfbmV4dCAoc3RyZWFtcyk7Ci0KLSAgICAgIGlmIChvc3RyZWFtID09IHN0cmVhbSkgewotICAgICAgICBjbGllbnQtPnN0cmVhbXMgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChjbGllbnQtPnN0cmVhbXMsIHN0cmVhbXMpOwotICAgICAgICAvKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzdHJlYW0gYmVsb25naW5nIHRvIHRoaXMgY2xpZW50LAotICAgICAgICAgKiBjbGVhbiB1cCB0aGUgY2xpZW50LiAqLwotICAgICAgICBpZiAoLS1jbGllbnQtPm5zdHJlYW1zID09IDApIHsKLSAgICAgICAgICBiaW4tPmNsaWVudHMgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChiaW4tPmNsaWVudHMsIGNsaWVudHMpOwotICAgICAgICAgIGZyZWVfY2xpZW50IChjbGllbnQsIGJpbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZ19mcmVlIChzdHJlYW0pOwotfQotCi0vKiBHT2JqZWN0IHZtZXRob2RzICovCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2Jpbl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfYmluX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfYmluX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfYmluX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotLyogR3N0RWxlbWVudCB2bWV0aG9kcyAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfYmluX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0UGFkICpnc3RfcnRwX2Jpbl9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9iaW5fcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9iaW5faGFuZGxlX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpOwotCi0jZGVmaW5lIGdzdF9ydHBfYmluX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cEJpbiwgZ3N0X3J0cF9iaW4sIEdTVF9UWVBFX0JJTik7Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9lbGVtZW50X2FjY3VtdWxhdG9yIChHU2lnbmFsSW52b2NhdGlvbkhpbnQgKiBpaGludCwKLSAgICBHVmFsdWUgKiByZXR1cm5fYWNjdSwgY29uc3QgR1ZhbHVlICogaGFuZGxlcl9yZXR1cm4sIGdwb2ludGVyIGR1bW15KQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gIGVsZW1lbnQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGhhbmRsZXJfcmV0dXJuKTsKLSAgR1NUX0RFQlVHICgiZ290IGVsZW1lbnQgJSIgR1NUX1BUUl9GT1JNQVQsIGVsZW1lbnQpOwotCi0gIGlmICghKGloaW50LT5ydW5fdHlwZSAmIEdfU0lHTkFMX1JVTl9DTEVBTlVQKSkKLSAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHJldHVybl9hY2N1LCBlbGVtZW50KTsKLQotICAvKiBzdG9wIGVtaXNzaW9uIGlmIHdlIGhhdmUgYW4gZWxlbWVudCAqLwotICByZXR1cm4gKGVsZW1lbnQgPT0gTlVMTCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2dzdF9jYXBzX2FjY3VtdWxhdG9yIChHU2lnbmFsSW52b2NhdGlvbkhpbnQgKiBpaGludCwKLSAgICBHVmFsdWUgKiByZXR1cm5fYWNjdSwgY29uc3QgR1ZhbHVlICogaGFuZGxlcl9yZXR1cm4sIGdwb2ludGVyIGR1bW15KQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnX3ZhbHVlX2dldF9ib3hlZCAoaGFuZGxlcl9yZXR1cm4pOwotICBHU1RfREVCVUcgKCJnb3QgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgaWYgKCEoaWhpbnQtPnJ1bl90eXBlICYgR19TSUdOQUxfUlVOX0NMRUFOVVApKQotICAgIGdfdmFsdWVfc2V0X2JveGVkIChyZXR1cm5fYWNjdSwgY2Fwcyk7Ci0KLSAgLyogc3RvcCBlbWlzc2lvbiBpZiB3ZSBoYXZlIGEgY2FwcyAqLwotICByZXR1cm4gKGNhcHMgPT0gTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Jpbl9jbGFzc19pbml0IChHc3RSdHBCaW5DbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmluQ2xhc3MgKmdzdGJpbl9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGJpbl9jbGFzcyA9IChHc3RCaW5DbGFzcyAqKSBrbGFzczsKLQotICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKEdzdFJ0cEJpblByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3J0cF9iaW5fZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2Jpbl9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9iaW5fc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2Jpbl9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MQVRFTkNZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJsYXRlbmN5IiwgIkJ1ZmZlciBsYXRlbmN5IGluIG1zIiwKLSAgICAgICAgICAiRGVmYXVsdCBhbW91bnQgb2YgbXMgdG8gYnVmZmVyIGluIHRoZSBqaXR0ZXJidWZmZXJzIiwgMCwKLSAgICAgICAgICBHX01BWFVJTlQsIERFRkFVTFRfTEFURU5DWV9NUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RST1BfT05fTEFURU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHJvcC1vbi1sYXRlbmN5IiwKLSAgICAgICAgICAiRHJvcCBidWZmZXJzIHdoZW4gbWF4aW11bSBsYXRlbmN5IGlzIHJlYWNoZWQiLAotICAgICAgICAgICJUZWxscyB0aGUgaml0dGVyYnVmZmVyIHRvIG5ldmVyIGV4Y2VlZCB0aGUgZ2l2ZW4gbGF0ZW5jeSBpbiBzaXplIiwKLSAgICAgICAgICBERUZBVUxUX0RST1BfT05fTEFURU5DWSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6cmVxdWVzdC1wdC1tYXA6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHB0OiB0aGUgcHQKLSAgICoKLSAgICogUmVxdWVzdCB0aGUgcGF5bG9hZCB0eXBlIGFzICNHc3RDYXBzIGZvciBAcHQgaW4gQHNlc3Npb24uCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9SRVFVRVNUX1BUX01BUF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicmVxdWVzdC1wdC1tYXAiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIHJlcXVlc3RfcHRfbWFwKSwKLSAgICAgIF9nc3RfY2Fwc19hY2N1bXVsYXRvciwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdTVF9UWVBFX0NBUFMsCi0gICAgICAyLCBHX1RZUEVfVUlOVCwgR19UWVBFX1VJTlQpOwotCi0gICAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6cGF5bG9hZC10eXBlLWNoYW5nZToKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKiBAcHQ6IHRoZSBwdAotICAgKgotICAgKiBTaWduYWwgdGhhdCB0aGUgY3VycmVudCBwYXlsb2FkIHR5cGUgY2hhbmdlZCB0byBAcHQgaW4gQHNlc3Npb24uCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9QQVlMT0FEX1RZUEVfQ0hBTkdFXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJwYXlsb2FkLXR5cGUtY2hhbmdlIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEJpbkNsYXNzLCBwYXlsb2FkX3R5cGVfY2hhbmdlKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6Y2xlYXItcHQtbWFwOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICoKLSAgICogQ2xlYXIgYWxsIHByZXZpb3VzbHkgY2FjaGVkIHB0LW1hcHBpbmcgb2J0YWluZWQgd2l0aAotICAgKiAjR3N0UnRwQmluOjpyZXF1ZXN0LXB0LW1hcC4KLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX0NMRUFSX1BUX01BUF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiY2xlYXItcHQtbWFwIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OLCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEJpbkNsYXNzLAotICAgICAgICAgIGNsZWFyX3B0X21hcCksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwKLSAgICAgIDAsIEdfVFlQRV9OT05FKTsKLQotICAvKioKLSAgICogR3N0UnRwQmluOjpyZXNldC1zeW5jOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICoKLSAgICogUmVzZXQgYWxsIGN1cnJlbnRseSBjb25maWd1cmVkIGxpcC1zeW5jIHBhcmFtZXRlcnMgYW5kIHJlcXVpcmUgbmV3IFNSCi0gICAqIHBhY2tldHMgZm9yIGFsbCBzdHJlYW1zIGJlZm9yZSBsaXAtc3luYyBpcyBhdHRlbXB0ZWQgYWdhaW4uCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9SRVNFVF9TWU5DXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJyZXNldC1zeW5jIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OLCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEJpbkNsYXNzLAotICAgICAgICAgIHJlc2V0X3N5bmMpLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsCi0gICAgICAwLCBHX1RZUEVfTk9ORSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6Z2V0LXNlc3Npb246Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAaWQ6IHRoZSBzZXNzaW9uIGlkCi0gICAqCi0gICAqIFJlcXVlc3QgdGhlIHJlbGF0ZWQgR3N0UnRwU2Vzc2lvbiBhcyAjR3N0RWxlbWVudCByZWxhdGVkIHdpdGggc2Vzc2lvbiBAaWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX0dFVF9TRVNTSU9OXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJnZXQtc2Vzc2lvbiIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywKLSAgICAgICAgICBnZXRfc2Vzc2lvbiksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAotICAgICAgR1NUX1RZUEVfRUxFTUVOVCwgMSwgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46OmdldC1pbnRlcm5hbC1zZXNzaW9uOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQGlkOiB0aGUgc2Vzc2lvbiBpZAotICAgKgotICAgKiBSZXF1ZXN0IHRoZSBpbnRlcm5hbCBSVFBTZXNzaW9uIG9iamVjdCBhcyAjR09iamVjdCBpbiBzZXNzaW9uIEBpZC4KLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX0dFVF9JTlRFUk5BTF9TRVNTSU9OXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJnZXQtaW50ZXJuYWwtc2Vzc2lvbiIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywKLSAgICAgICAgICBnZXRfaW50ZXJuYWxfc2Vzc2lvbiksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAotICAgICAgUlRQX1RZUEVfU0VTU0lPTiwgMSwgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLW5ldy1zc3JjOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYSBuZXcgU1NSQyB0aGF0IGVudGVyZWQgQHNlc3Npb24uCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9ORVdfU1NSQ10gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tbmV3LXNzcmMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIG9uX25ld19zc3JjKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLXNzcmMtY29sbGlzaW9uOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgd2hlbiB3ZSBoYXZlIGFuIFNTUkMgY29sbGlzaW9uCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX0NPTExJU0lPTl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy1jb2xsaXNpb24iLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIG9uX3NzcmNfY29sbGlzaW9uKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLXNzcmMtdmFsaWRhdGVkOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYSBuZXcgU1NSQyB0aGF0IGJlY2FtZSB2YWxpZGF0ZWQuCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX1ZBTElEQVRFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy12YWxpZGF0ZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIG9uX3NzcmNfdmFsaWRhdGVkKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLXNzcmMtYWN0aXZlOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYSBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX0FDVElWRV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy1hY3RpdmUiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIG9uX3NzcmNfYWN0aXZlKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLXNzcmMtc2RlczoKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKiBAc3NyYzogdGhlIFNTUkMKLSAgICoKLSAgICogTm90aWZ5IG9mIGEgU1NSQyB0aGF0IGlzIGFjdGl2ZSwgaS5lLiwgc2VuZGluZyBSVENQLgotICAgKi8KLSAgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19TREVTXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1zc3JjLXNkZXMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIG9uX3NzcmNfc2RlcyksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9VSU5ULAotICAgICAgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLWJ5ZS1zc3JjOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYW4gU1NSQyB0aGF0IGJlY2FtZSBpbmFjdGl2ZSBiZWNhdXNlIG9mIGEgQllFIHBhY2tldC4KLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX0JZRV9TU1JDXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1ieWUtc3NyYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywgb25fYnllX3NzcmMpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfVUlOVCwKLSAgICAgIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6b24tYnllLXRpbWVvdXQ6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHNzcmM6IHRoZSBTU1JDCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgaGFzIHRpbWVkIG91dCBiZWNhdXNlIG9mIEJZRQotICAgKi8KLSAgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fQllFX1RJTUVPVVRdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLWJ5ZS10aW1lb3V0IiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEJpbkNsYXNzLCBvbl9ieWVfdGltZW91dCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9VSU5ULAotICAgICAgR19UWVBFX1VJTlQpOwotICAvKioKLSAgICogR3N0UnRwQmluOjpvbi10aW1lb3V0OgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYW4gU1NSQyB0aGF0IGhhcyB0aW1lZCBvdXQKLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX1RJTUVPVVRdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXRpbWVvdXQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsIG9uX3RpbWVvdXQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfVUlOVCwKLSAgICAgIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6b24tc2VuZGVyLXRpbWVvdXQ6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHNzcmM6IHRoZSBTU1JDCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhIHNlbmRlciBTU1JDIHRoYXQgaGFzIHRpbWVkIG91dCBhbmQgYmVjYW1lIGEgcmVjZWl2ZXIKLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9USU1FT1VUXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1zZW5kZXItdGltZW91dCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywgb25fc2VuZGVyX3RpbWVvdXQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfVUlOVCwKLSAgICAgIEdfVFlQRV9VSU5UKTsKLQotICAvKioKLSAgICogR3N0UnRwQmluOjpvbi1ucHQtc3RvcDoKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKiBAc3NyYzogdGhlIFNTUkMKLSAgICoKLSAgICogTm90aWZ5IHRoYXQgU1NSQyBzZW5kZXIgaGFzIHNlbnQgZGF0YSB1cCB0byB0aGUgY29uZmlndXJlZCBOUFQgc3RvcCB0aW1lLgotICAgKi8KLSAgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfT05fTlBUX1NUT1BdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLW5wdC1zdG9wIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEJpbkNsYXNzLCBvbl9ucHRfc3RvcCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9VSU5ULAotICAgICAgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46OnJlcXVlc3QtcnRwLWVuY29kZXI6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICoKLSAgICogUmVxdWVzdCBhbiBSVFAgZW5jb2RlciBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gQHNlc3Npb24uIFRoZSBlbmNvZGVyCi0gICAqIGVsZW1lbnQgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmluIGlmIG5vdCBwcmV2aW91c2x5IGFkZGVkLgotICAgKgotICAgKiBJZiBubyBoYW5kbGVyIGlzIGNvbm5lY3RlZCwgbm8gZW5jb2RlciB3aWxsIGJlIHVzZWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUlRQX0VOQ09ERVJdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJlcXVlc3QtcnRwLWVuY29kZXIiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsCi0gICAgICAgICAgcmVxdWVzdF9ydHBfZW5jb2RlciksIF9nc3RfZWxlbWVudF9hY2N1bXVsYXRvciwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHU1RfVFlQRV9FTEVNRU5ULCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6cmVxdWVzdC1ydHAtZGVjb2RlcjoKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKgotICAgKiBSZXF1ZXN0IGFuIFJUUCBkZWNvZGVyIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiBAc2Vzc2lvbi4gVGhlIGRlY29kZXIKLSAgICogZWxlbWVudCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiaW4gaWYgbm90IHByZXZpb3VzbHkgYWRkZWQuCi0gICAqCi0gICAqIElmIG5vIGhhbmRsZXIgaXMgY29ubmVjdGVkLCBubyBlbmNvZGVyIHdpbGwgYmUgdXNlZC4KLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfUkVRVUVTVF9SVFBfREVDT0RFUl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicmVxdWVzdC1ydHAtZGVjb2RlciIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywKLSAgICAgICAgICByZXF1ZXN0X3J0cF9kZWNvZGVyKSwgX2dzdF9lbGVtZW50X2FjY3VtdWxhdG9yLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdTVF9UWVBFX0VMRU1FTlQsIDEsIEdfVFlQRV9VSU5UKTsKLQotICAvKioKLSAgICogR3N0UnRwQmluOjpyZXF1ZXN0LXJ0Y3AtZW5jb2RlcjoKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKgotICAgKiBSZXF1ZXN0IGFuIFJUQ1AgZW5jb2RlciBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gQHNlc3Npb24uIFRoZSBlbmNvZGVyCi0gICAqIGVsZW1lbnQgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmluIGlmIG5vdCBwcmV2aW91c2x5IGFkZGVkLgotICAgKgotICAgKiBJZiBubyBoYW5kbGVyIGlzIGNvbm5lY3RlZCwgbm8gZW5jb2RlciB3aWxsIGJlIHVzZWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUlRDUF9FTkNPREVSXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJyZXF1ZXN0LXJ0Y3AtZW5jb2RlciIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywKLSAgICAgICAgICByZXF1ZXN0X3J0Y3BfZW5jb2RlciksIF9nc3RfZWxlbWVudF9hY2N1bXVsYXRvciwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHU1RfVFlQRV9FTEVNRU5ULCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6cmVxdWVzdC1ydGNwLWRlY29kZXI6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICoKLSAgICogUmVxdWVzdCBhbiBSVENQIGRlY29kZXIgZWxlbWVudCBmb3IgdGhlIGdpdmVuIEBzZXNzaW9uLiBUaGUgZGVjb2RlcgotICAgKiBlbGVtZW50IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJpbiBpZiBub3QgcHJldmlvdXNseSBhZGRlZC4KLSAgICoKLSAgICogSWYgbm8gaGFuZGxlciBpcyBjb25uZWN0ZWQsIG5vIGVuY29kZXIgd2lsbCBiZSB1c2VkLgotICAgKgotICAgKiBTaW5jZTogMS40Ci0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9SRVFVRVNUX1JUQ1BfREVDT0RFUl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicmVxdWVzdC1ydGNwLWRlY29kZXIiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsCi0gICAgICAgICAgcmVxdWVzdF9ydGNwX2RlY29kZXIpLCBfZ3N0X2VsZW1lbnRfYWNjdW11bGF0b3IsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR1NUX1RZUEVfRUxFTUVOVCwgMSwgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46Om5ldy1qaXR0ZXJidWZmZXI6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAaml0dGVyYnVmZmVyOiB0aGUgbmV3IGppdHRlcmJ1ZmZlcgotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHNzcmM6IHRoZSBTU1JDCi0gICAqCi0gICAqIE5vdGlmeSB0aGF0IGEgbmV3IEBqaXR0ZXJidWZmZXIgd2FzIGNyZWF0ZWQgZm9yIEBzZXNzaW9uIGFuZCBAc3NyYy4KLSAgICogVGhpcyBzaWduYWwgY2FuLCBmb3IgZXhhbXBsZSwgYmUgdXNlZCB0byBjb25maWd1cmUgQGppdHRlcmJ1ZmZlci4KLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfTkVXX0pJVFRFUkJVRkZFUl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgibmV3LWppdHRlcmJ1ZmZlciIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywKLSAgICAgICAgICBuZXdfaml0dGVyYnVmZmVyKSwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCi0gICAgICBHX1RZUEVfTk9ORSwgMywgR1NUX1RZUEVfRUxFTUVOVCwgR19UWVBFX1VJTlQsIEdfVFlQRV9VSU5UKTsKLQotICAvKioKLSAgICogR3N0UnRwQmluOjpyZXF1ZXN0LWF1eC1zZW5kZXI6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICoKLSAgICogUmVxdWVzdCBhbiBBVVggc2VuZGVyIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiBAc2Vzc2lvbi4gVGhlIEFVWAotICAgKiBlbGVtZW50IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJpbi4KLSAgICoKLSAgICogSWYgbm8gaGFuZGxlciBpcyBjb25uZWN0ZWQsIG5vIEFVWCBlbGVtZW50IHdpbGwgYmUgdXNlZC4KLSAgICoKLSAgICogU2luY2U6IDEuNAotICAgKi8KLSAgZ3N0X3J0cF9iaW5fc2lnbmFsc1tTSUdOQUxfUkVRVUVTVF9BVVhfU0VOREVSXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJyZXF1ZXN0LWF1eC1zZW5kZXIiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsCi0gICAgICAgICAgcmVxdWVzdF9hdXhfc2VuZGVyKSwgX2dzdF9lbGVtZW50X2FjY3VtdWxhdG9yLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdTVF9UWVBFX0VMRU1FTlQsIDEsIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjo6cmVxdWVzdC1hdXgtcmVjZWl2ZXI6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICoKLSAgICogUmVxdWVzdCBhbiBBVVggcmVjZWl2ZXIgZWxlbWVudCBmb3IgdGhlIGdpdmVuIEBzZXNzaW9uLiBUaGUgQVVYCi0gICAqIGVsZW1lbnQgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmluLgotICAgKgotICAgKiBJZiBubyBoYW5kbGVyIGlzIGNvbm5lY3RlZCwgbm8gQVVYIGVsZW1lbnQgd2lsbCBiZSB1c2VkLgotICAgKgotICAgKiBTaW5jZTogMS40Ci0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9SRVFVRVNUX0FVWF9SRUNFSVZFUl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicmVxdWVzdC1hdXgtcmVjZWl2ZXIiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwQmluQ2xhc3MsCi0gICAgICAgICAgcmVxdWVzdF9hdXhfcmVjZWl2ZXIpLCBfZ3N0X2VsZW1lbnRfYWNjdW11bGF0b3IsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR1NUX1RZUEVfRUxFTUVOVCwgMSwgR19UWVBFX1VJTlQpOwotICAvKioKLSAgICogR3N0UnRwQmluOjpvbi1uZXctc2VuZGVyLXNzcmM6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHNzcmM6IHRoZSBzZW5kZXIgU1NSQwotICAgKgotICAgKiBTaW5jZTogMS44Ci0gICAqCi0gICAqIE5vdGlmeSBvZiBhIG5ldyBzZW5kZXIgU1NSQyB0aGF0IGVudGVyZWQgQHNlc3Npb24uCi0gICAqLwotICBnc3RfcnRwX2Jpbl9zaWduYWxzW1NJR05BTF9PTl9ORVdfU0VOREVSX1NTUkNdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLW5ldy1zZW5kZXItc3NyYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBCaW5DbGFzcywgb25fbmV3X3NlbmRlcl9zc3JjKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBCaW46Om9uLXNlbmRlci1zc3JjLWFjdGl2ZToKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKiBAc3NyYzogdGhlIHNlbmRlciBTU1JDCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICoKLSAgICogTm90aWZ5IG9mIGEgc2VuZGVyIFNTUkMgdGhhdCBpcyBhY3RpdmUsIGkuZS4sIHNlbmRpbmcgUlRDUC4KLSAgICovCi0gIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9TU1JDX0FDVElWRV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc2VuZGVyLXNzcmMtYWN0aXZlIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEJpbkNsYXNzLAotICAgICAgICAgIG9uX3NlbmRlcl9zc3JjX2FjdGl2ZSksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAotICAgICAgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9VSU5ULCBHX1RZUEVfVUlOVCk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TREVTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgic2RlcyIsICJTREVTIiwKLSAgICAgICAgICAiVGhlIFNERVMgaXRlbXMgb2YgdGhpcyBzZXNzaW9uIiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9fTE9TVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZG8tbG9zdCIsICJEbyBMb3N0IiwKLSAgICAgICAgICAiU2VuZCBhbiBldmVudCBkb3duc3RyZWFtIHdoZW4gYSBwYWNrZXQgaXMgbG9zdCIsIERFRkFVTFRfRE9fTE9TVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FVVE9SRU1PVkUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImF1dG9yZW1vdmUiLCAiQXV0byBSZW1vdmUiLAotICAgICAgICAgICJBdXRvbWF0aWNhbGx5IHJlbW92ZSB0aW1lZCBvdXQgc291cmNlcyIsIERFRkFVTFRfQVVUT1JFTU9WRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lHTk9SRV9QVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaWdub3JlLXB0IiwgIklnbm9yZSBQVCIsCi0gICAgICAgICAgIkRvIG5vdCBkZW11bHRpcGxleCBiYXNlZCBvbiBQVCB2YWx1ZXMiLCBERUZBVUxUX0lHTk9SRV9QVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRV9QSVBFTElORV9DTE9DSywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidXNlLXBpcGVsaW5lLWNsb2NrIiwgIlVzZSBwaXBlbGluZSBjbG9jayIsCi0gICAgICAgICAgIlVzZSB0aGUgcGlwZWxpbmUgcnVubmluZy10aW1lIHRvIHNldCB0aGUgTlRQIHRpbWUgaW4gdGhlIFJUQ1AgU1IgbWVzc2FnZXMgIgotICAgICAgICAgICIoREVQUkVDQVRFRDogVXNlIG50cC10aW1lLXNvdXJjZSBwcm9wZXJ0eSkiLAotICAgICAgICAgIERFRkFVTFRfVVNFX1BJUEVMSU5FX0NMT0NLLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fREVQUkVDQVRFRCkpOwotICAvKioKLSAgICogR3N0UnRwQmluOmJ1ZmZlci1tb2RlOgotICAgKgotICAgKiBDb250cm9sIHRoZSBidWZmZXJpbmcgYW5kIHRpbWVzdGFtcGluZyBtb2RlIHVzZWQgYnkgdGhlIGppdHRlcmJ1ZmZlci4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQlVGRkVSX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImJ1ZmZlci1tb2RlIiwgIkJ1ZmZlciBNb2RlIiwKLSAgICAgICAgICAiQ29udHJvbCB0aGUgYnVmZmVyaW5nIGFsZ29yaXRobSBpbiB1c2UiLCBSVFBfVFlQRV9KSVRURVJfQlVGRkVSX01PREUsCi0gICAgICAgICAgREVGQVVMVF9CVUZGRVJfTU9ERSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSdHBCaW46bnRwLXN5bmM6Ci0gICAqCi0gICAqIFNldCB0aGUgTlRQIHRpbWUgZnJvbSB0aGUgc2VuZGVyIHJlcG9ydHMgYXMgdGhlIHJ1bm5pbmctdGltZSBvbiB0aGUKLSAgICogYnVmZmVycy4gV2hlbiBib3RoIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyIGhhdmUgc3ljaHJvbml6ZWQKLSAgICogcnVubmluZy10aW1lLCBpLmUuIHdoZW4gdGhlIGNsb2NrIGFuZCBiYXNlLXRpbWUgaXMgc2hhcmVkCi0gICAqIGJldHdlZW4gdGhlIHJlY2VpdmVycyBhbmQgdGhlIGFuZCB0aGUgc2VuZGVycywgdGhpcyBvcHRpb24gY2FuIGJlCi0gICAqIHVzZWQgdG8gc3luY2hyb25pemUgcmVjZWl2ZXJzIG9uIG11bHRpcGxlIG1hY2hpbmVzLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OVFBfU1lOQywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibnRwLXN5bmMiLCAiU3luYyBvbiBOVFAgY2xvY2siLAotICAgICAgICAgICJTeW5jaHJvbml6ZSByZWNlaXZlZCBzdHJlYW1zIHRvIHRoZSBOVFAgY2xvY2siLCBERUZBVUxUX05UUF9TWU5DLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46cnRjcC1zeW5jOgotICAgKgotICAgKiBJZiBub3Qgc3luY2hyb25pemluZyAoZGlyZWN0bHkpIHRvIHRoZSBOVFAgY2xvY2ssIGRldGVybWluZXMgaG93IHRvIHN5bmMKLSAgICogdGhlIHZhcmlvdXMgc3RyZWFtcy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRDUF9TWU5DLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJydGNwLXN5bmMiLCAiUlRDUCBTeW5jIiwKLSAgICAgICAgICAiVXNlIG9mIFJUQ1AgU1IgaW4gc3luY2hyb25pemF0aW9uIiwgR1NUX1JUUF9CSU5fUlRDUF9TWU5DX1RZUEUsCi0gICAgICAgICAgREVGQVVMVF9SVENQX1NZTkMsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46cnRjcC1zeW5jLWludGVydmFsOgotICAgKgotICAgKiBEZXRlcm1pbmVzIGhvdyBvZnRlbiB0byBzeW5jIHN0cmVhbXMgdXNpbmcgUlRDUCBkYXRhLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVENQX1NZTkNfSU5URVJWQUwsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInJ0Y3Atc3luYy1pbnRlcnZhbCIsICJSVENQIFN5bmMgSW50ZXJ2YWwiLAotICAgICAgICAgICJSVENQIFNSIGludGVydmFsIHN5bmNocm9uaXphdGlvbiAobXMpICgwID0gYWx3YXlzKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX1JUQ1BfU1lOQ19JTlRFUlZBTCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RPX1NZTkNfRVZFTlQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRvLXN5bmMtZXZlbnQiLCAiRG8gU3luYyBFdmVudCIsCi0gICAgICAgICAgIlNlbmQgZXZlbnQgZG93bnN0cmVhbSB3aGVuIGEgc3RyZWFtIGlzIHN5bmNocm9uaXplZCB0byB0aGUgc2VuZGVyIiwKLSAgICAgICAgICBERUZBVUxUX0RPX1NZTkNfRVZFTlQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBCaW46ZG8tcmV0cmFuc21pc3Npb246Ci0gICAqCi0gICAqIEVuYWJsZXMgUlRQIHJldHJhbnNtaXNzaW9uIG9uIGFsbCBzdHJlYW1zLiBUbyBjb250cm9sIHJldHJhbnNtaXNzaW9uIG9uCi0gICAqIGEgcGVyLVNTUkMgYmFzaXMsIGNvbm5lY3QgdG8gdGhlICNHc3RSdHBCaW46Om5ldy1qaXR0ZXJidWZmZXIgc2lnbmFsIGFuZAotICAgKiBzZXQgdGhlICNHc3RSdHBKaXR0ZXJCdWZmZXI6OmRvLXJldHJhbnNtaXNzaW9uIHByb3BlcnR5IG9uIHRoZQotICAgKiAjR3N0UnRwSml0dGVyQnVmZmVyIG9iamVjdCBpbnN0ZWFkLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ET19SRVRSQU5TTUlTU0lPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZG8tcmV0cmFuc21pc3Npb24iLCAiRG8gcmV0cmFuc21pc3Npb24iLAotICAgICAgICAgICJFbmFibGUgcmV0cmFuc21pc3Npb24gb24gYWxsIHN0cmVhbXMiLAotICAgICAgICAgIERFRkFVTFRfRE9fUkVUUkFOU01JU1NJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEJpbjpydHAtcHJvZmlsZToKLSAgICoKLSAgICogU2V0cyB0aGUgZGVmYXVsdCBSVFAgcHJvZmlsZSBvZiBuZXdseSBjcmVhdGVkIFJUUCBzZXNzaW9ucy4gVGhlCi0gICAqIHByb2ZpbGUgY2FuIGJlIGNoYW5nZWQgYWZ0ZXJ3YXJkcyBvbiBhIHBlci1zZXNzaW9uIGJhc2lzLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFBfUFJPRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgicnRwLXByb2ZpbGUiLCAiUlRQIFByb2ZpbGUiLAotICAgICAgICAgICJEZWZhdWx0IFJUUCBwcm9maWxlIG9mIG5ld2x5IGNyZWF0ZWQgc2Vzc2lvbnMiLAotICAgICAgICAgIEdTVF9UWVBFX1JUUF9QUk9GSUxFLCBERUZBVUxUX1JUUF9QUk9GSUxFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTlRQX1RJTUVfU09VUkNFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJudHAtdGltZS1zb3VyY2UiLCAiTlRQIFRpbWUgU291cmNlIiwKLSAgICAgICAgICAiTlRQIHRpbWUgc291cmNlIGZvciBSVENQIHBhY2tldHMiLAotICAgICAgICAgIGdzdF9ydHBfbnRwX3RpbWVfc291cmNlX2dldF90eXBlICgpLCBERUZBVUxUX05UUF9USU1FX1NPVVJDRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUQ1BfU1lOQ19TRU5EX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInJ0Y3Atc3luYy1zZW5kLXRpbWUiLCAiUlRDUCBTeW5jIFNlbmQgVGltZSIsCi0gICAgICAgICAgIlVzZSBzZW5kIHRpbWUgb3IgY2FwdHVyZSB0aW1lIGZvciBSVENQIHN5bmMgIgotICAgICAgICAgICIoVFJVRSA9IHNlbmQgdGltZSwgRkFMU0UgPSBjYXB0dXJlIHRpbWUpIiwKLSAgICAgICAgICBERUZBVUxUX1JUQ1BfU1lOQ19TRU5EX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm1heC1ydGNwLXJ0cC10aW1lLWRpZmYiLCAiTWF4IFJUQ1AgUlRQIFRpbWUgRGlmZiIsCi0gICAgICAgICAgIk1heGltdW0gYW1vdW50IG9mIHRpbWUgaW4gbXMgdGhhdCB0aGUgUlRQIHRpbWUgaW4gUlRDUCBTUnMgIgotICAgICAgICAgICJpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkiLCAtMSwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX0RST1BPVVRfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LWRyb3BvdXQtdGltZSIsICJNYXggZHJvcG91dCB0aW1lIiwKLSAgICAgICAgICAiVGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNzaW5nIHBhY2tldHMgdG9sZXJhdGVkLiIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX01BWF9EUk9QT1VUX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfTUlTT1JERVJfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LW1pc29yZGVyLXRpbWUiLCAiTWF4IG1pc29yZGVyIHRpbWUiLAotICAgICAgICAgICJUaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc29yZGVyZWQgcGFja2V0cyB0b2xlcmF0ZWQuIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX01JU09SREVSX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRkM3MjczX1NZTkMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInJmYzcyNzMtc3luYyIsICJTeW5jIG9uIFJGQzcyNzMgY2xvY2siLAotICAgICAgICAgICJTeW5jaHJvbml6ZSByZWNlaXZlZCBzdHJlYW1zIHRvIHRoZSBSRkM3MjczIGNsb2NrICIKLSAgICAgICAgICAiKHJlcXVpcmVzIGNsb2NrIGFuZCBvZmZzZXQgdG8gYmUgcHJvdmlkZWQpIiwgREVGQVVMVF9SRkM3MjczX1NZTkMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU1RSRUFNUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXN0cmVhbXMiLCAiTWF4IFN0cmVhbXMiLAotICAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtcyB0byBjcmVhdGUgZm9yIG9uZSBzZXNzaW9uIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX1NUUkVBTVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfYmluX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9iaW5fcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9iaW5fcmVsZWFzZV9wYWQpOwotCi0gIC8qIHNpbmsgcGFkcyAqLwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZydHBiaW5fcmVjdl9ydHBfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnJ0cGJpbl9yZWN2X3J0Y3Bfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnJ0cGJpbl9zZW5kX3J0cF9zaW5rX3RlbXBsYXRlKTsKLQotICAvKiBzcmMgcGFkcyAqLwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZydHBiaW5fcmVjdl9ydHBfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmcnRwYmluX3NlbmRfcnRjcF9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZydHBiaW5fc2VuZF9ydHBfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIEJpbiIsCi0gICAgICAiRmlsdGVyL05ldHdvcmsvUlRQIiwKLSAgICAgICJSZWFsLVRpbWUgVHJhbnNwb3J0IFByb3RvY29sIGJpbiIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RiaW5fY2xhc3MtPmhhbmRsZV9tZXNzYWdlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfYmluX2hhbmRsZV9tZXNzYWdlKTsKLQotICBrbGFzcy0+Y2xlYXJfcHRfbWFwID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfYmluX2NsZWFyX3B0X21hcCk7Ci0gIGtsYXNzLT5yZXNldF9zeW5jID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfYmluX3Jlc2V0X3N5bmMpOwotICBrbGFzcy0+Z2V0X3Nlc3Npb24gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9iaW5fZ2V0X3Nlc3Npb24pOwotICBrbGFzcy0+Z2V0X2ludGVybmFsX3Nlc3Npb24gPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfYmluX2dldF9pbnRlcm5hbF9zZXNzaW9uKTsKLSAga2xhc3MtPnJlcXVlc3RfcnRwX2VuY29kZXIgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9iaW5fcmVxdWVzdF9lbmNvZGVyKTsKLSAga2xhc3MtPnJlcXVlc3RfcnRwX2RlY29kZXIgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9iaW5fcmVxdWVzdF9kZWNvZGVyKTsKLSAga2xhc3MtPnJlcXVlc3RfcnRjcF9lbmNvZGVyID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfYmluX3JlcXVlc3RfZW5jb2Rlcik7Ci0gIGtsYXNzLT5yZXF1ZXN0X3J0Y3BfZGVjb2RlciA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2Jpbl9yZXF1ZXN0X2RlY29kZXIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcnRwX2Jpbl9kZWJ1ZywgInJ0cGJpbiIsIDAsICJSVFAgYmluIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Jpbl9pbml0IChHc3RSdHBCaW4gKiBydHBiaW4pCi17Ci0gIGdjaGFyICpjbmFtZTsKLQotICBydHBiaW4tPnByaXYgPSBHU1RfUlRQX0JJTl9HRVRfUFJJVkFURSAocnRwYmluKTsKLSAgZ19tdXRleF9pbml0ICgmcnRwYmluLT5wcml2LT5iaW5fbG9jayk7Ci0gIGdfbXV0ZXhfaW5pdCAoJnJ0cGJpbi0+cHJpdi0+ZHluX2xvY2spOwotCi0gIHJ0cGJpbi0+bGF0ZW5jeV9tcyA9IERFRkFVTFRfTEFURU5DWV9NUzsKLSAgcnRwYmluLT5sYXRlbmN5X25zID0gREVGQVVMVF9MQVRFTkNZX01TICogR1NUX01TRUNPTkQ7Ci0gIHJ0cGJpbi0+ZHJvcF9vbl9sYXRlbmN5ID0gREVGQVVMVF9EUk9QX09OX0xBVEVOQ1k7Ci0gIHJ0cGJpbi0+ZG9fbG9zdCA9IERFRkFVTFRfRE9fTE9TVDsKLSAgcnRwYmluLT5pZ25vcmVfcHQgPSBERUZBVUxUX0lHTk9SRV9QVDsKLSAgcnRwYmluLT5udHBfc3luYyA9IERFRkFVTFRfTlRQX1NZTkM7Ci0gIHJ0cGJpbi0+cnRjcF9zeW5jID0gREVGQVVMVF9SVENQX1NZTkM7Ci0gIHJ0cGJpbi0+cnRjcF9zeW5jX2ludGVydmFsID0gREVGQVVMVF9SVENQX1NZTkNfSU5URVJWQUw7Ci0gIHJ0cGJpbi0+cHJpdi0+YXV0b3JlbW92ZSA9IERFRkFVTFRfQVVUT1JFTU9WRTsKLSAgcnRwYmluLT5idWZmZXJfbW9kZSA9IERFRkFVTFRfQlVGRkVSX01PREU7Ci0gIHJ0cGJpbi0+dXNlX3BpcGVsaW5lX2Nsb2NrID0gREVGQVVMVF9VU0VfUElQRUxJTkVfQ0xPQ0s7Ci0gIHJ0cGJpbi0+c2VuZF9zeW5jX2V2ZW50ID0gREVGQVVMVF9ET19TWU5DX0VWRU5UOwotICBydHBiaW4tPmRvX3JldHJhbnNtaXNzaW9uID0gREVGQVVMVF9ET19SRVRSQU5TTUlTU0lPTjsKLSAgcnRwYmluLT5ydHBfcHJvZmlsZSA9IERFRkFVTFRfUlRQX1BST0ZJTEU7Ci0gIHJ0cGJpbi0+bnRwX3RpbWVfc291cmNlID0gREVGQVVMVF9OVFBfVElNRV9TT1VSQ0U7Ci0gIHJ0cGJpbi0+cnRjcF9zeW5jX3NlbmRfdGltZSA9IERFRkFVTFRfUlRDUF9TWU5DX1NFTkRfVElNRTsKLSAgcnRwYmluLT5tYXhfcnRjcF9ydHBfdGltZV9kaWZmID0gREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGOwotICBydHBiaW4tPm1heF9kcm9wb3V0X3RpbWUgPSBERUZBVUxUX01BWF9EUk9QT1VUX1RJTUU7Ci0gIHJ0cGJpbi0+bWF4X21pc29yZGVyX3RpbWUgPSBERUZBVUxUX01BWF9NSVNPUkRFUl9USU1FOwotICBydHBiaW4tPnJmYzcyNzNfc3luYyA9IERFRkFVTFRfUkZDNzI3M19TWU5DOwotICBydHBiaW4tPm1heF9zdHJlYW1zID0gREVGQVVMVF9NQVhfU1RSRUFNUzsKLQotICAvKiBzb21lIGRlZmF1bHQgU0RFUyBlbnRyaWVzICovCi0gIGNuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgidXNlciV1QGhvc3QtJXgiLCBnX3JhbmRvbV9pbnQgKCksIGdfcmFuZG9tX2ludCAoKSk7Ci0gIHJ0cGJpbi0+c2RlcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtc291cmNlLXNkZXMiLAotICAgICAgImNuYW1lIiwgR19UWVBFX1NUUklORywgY25hbWUsICJ0b29sIiwgR19UWVBFX1NUUklORywgIkdTdHJlYW1lciIsIE5VTEwpOwotICBnX2ZyZWUgKGNuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cEJpbiAqcnRwYmluOwotCi0gIHJ0cGJpbiA9IEdTVF9SVFBfQklOIChvYmplY3QpOwotCi0gIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKG9iamVjdCwgImZyZWVpbmcgc2Vzc2lvbnMiKTsKLSAgZ19zbGlzdF9mb3JlYWNoIChydHBiaW4tPnNlc3Npb25zLCAoR0Z1bmMpIGZyZWVfc2Vzc2lvbiwgcnRwYmluKTsKLSAgZ19zbGlzdF9mcmVlIChydHBiaW4tPnNlc3Npb25zKTsKLSAgcnRwYmluLT5zZXNzaW9ucyA9IE5VTEw7Ci0gIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBCaW4gKnJ0cGJpbjsKLQotICBydHBiaW4gPSBHU1RfUlRQX0JJTiAob2JqZWN0KTsKLQotICBpZiAocnRwYmluLT5zZGVzKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocnRwYmluLT5zZGVzKTsKLQotICBnX211dGV4X2NsZWFyICgmcnRwYmluLT5wcml2LT5iaW5fbG9jayk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZydHBiaW4tPnByaXYtPmR5bl9sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX3NldF9zZGVzX3N0cnVjdCAoR3N0UnRwQmluICogYmluLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzZGVzKQotewotICBHU0xpc3QgKml0ZW07Ci0KLSAgaWYgKHNkZXMgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSAgR1NUX1JUUF9CSU5fTE9DSyAoYmluKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJpbik7Ci0gIGlmIChiaW4tPnNkZXMpCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChiaW4tPnNkZXMpOwotICBiaW4tPnNkZXMgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHNkZXMpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICAvKiBzdG9yZSBpbiBhbGwgc2Vzc2lvbnMgKi8KLSAgZm9yIChpdGVtID0gYmluLT5zZXNzaW9uczsgaXRlbTsgaXRlbSA9IGdfc2xpc3RfbmV4dCAoaXRlbSkpIHsKLSAgICBHc3RSdHBCaW5TZXNzaW9uICpzZXNzaW9uID0gaXRlbS0+ZGF0YTsKLSAgICBnX29iamVjdF9zZXQgKHNlc3Npb24tPnNlc3Npb24sICJzZGVzIiwgc2RlcywgTlVMTCk7Ci0gIH0KLQotICBHU1RfUlRQX0JJTl9VTkxPQ0sgKGJpbik7Ci19Ci0KLXN0YXRpYyBHc3RTdHJ1Y3R1cmUgKgotZ3N0X3J0cF9iaW5fZ2V0X3NkZXNfc3RydWN0IChHc3RSdHBCaW4gKiBiaW4pCi17Ci0gIEdzdFN0cnVjdHVyZSAqcmVzdWx0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYmluKTsKLSAgcmVzdWx0ID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChiaW4tPnNkZXMpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoYmluKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9iaW5fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cEJpbiAqcnRwYmluOwotCi0gIHJ0cGJpbiA9IEdTVF9SVFBfQklOIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MQVRFTkNZOgotICAgICAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLSAgICAgIHJ0cGJpbi0+bGF0ZW5jeV9tcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIHJ0cGJpbi0+bGF0ZW5jeV9ucyA9IHJ0cGJpbi0+bGF0ZW5jeV9tcyAqIEdTVF9NU0VDT05EOwotICAgICAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotICAgICAgLyogcHJvcGFnYXRlIHRoZSBwcm9wZXJ0eSBkb3duIHRvIHRoZSBqaXR0ZXJidWZmZXIgKi8KLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwgImxhdGVuY3kiLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFJPUF9PTl9MQVRFTkNZOgotICAgICAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLSAgICAgIHJ0cGJpbi0+ZHJvcF9vbl9sYXRlbmN5ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotICAgICAgLyogcHJvcGFnYXRlIHRoZSBwcm9wZXJ0eSBkb3duIHRvIHRoZSBqaXR0ZXJidWZmZXIgKi8KLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwKLSAgICAgICAgICAiZHJvcC1vbi1sYXRlbmN5IiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NERVM6Ci0gICAgICBnc3RfcnRwX2Jpbl9zZXRfc2Rlc19zdHJ1Y3QgKHJ0cGJpbiwgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fTE9TVDoKLSAgICAgIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICBydHBiaW4tPmRvX2xvc3QgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBHU1RfUlRQX0JJTl9VTkxPQ0sgKHJ0cGJpbik7Ci0gICAgICBnc3RfcnRwX2Jpbl9wcm9wYWdhdGVfcHJvcGVydHlfdG9faml0dGVyYnVmZmVyIChydHBiaW4sICJkby1sb3N0IiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05UUF9TWU5DOgotICAgICAgcnRwYmluLT5udHBfc3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX1NZTkM6Ci0gICAgICBnX2F0b21pY19pbnRfc2V0ICgmcnRwYmluLT5ydGNwX3N5bmMsIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9TWU5DX0lOVEVSVkFMOgotICAgICAgcnRwYmluLT5ydGNwX3N5bmNfaW50ZXJ2YWwgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSUdOT1JFX1BUOgotICAgICAgcnRwYmluLT5pZ25vcmVfcHQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT1JFTU9WRToKLSAgICAgIHJ0cGJpbi0+cHJpdi0+YXV0b3JlbW92ZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfUElQRUxJTkVfQ0xPQ0s6Ci0gICAgewotICAgICAgR1NMaXN0ICpzZXNzaW9uczsKLSAgICAgIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICBydHBiaW4tPnVzZV9waXBlbGluZV9jbG9jayA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGZvciAoc2Vzc2lvbnMgPSBydHBiaW4tPnNlc3Npb25zOyBzZXNzaW9uczsKLSAgICAgICAgICBzZXNzaW9ucyA9IGdfc2xpc3RfbmV4dCAoc2Vzc2lvbnMpKSB7Ci0gICAgICAgIEdzdFJ0cEJpblNlc3Npb24gKnNlc3Npb24gPSAoR3N0UnRwQmluU2Vzc2lvbiAqKSBzZXNzaW9ucy0+ZGF0YTsKLQotICAgICAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzZXNzaW9uLT5zZXNzaW9uKSwKLSAgICAgICAgICAgICJ1c2UtcGlwZWxpbmUtY2xvY2siLCBydHBiaW4tPnVzZV9waXBlbGluZV9jbG9jaywgTlVMTCk7Ci0gICAgICB9Ci0gICAgICBHU1RfUlRQX0JJTl9VTkxPQ0sgKHJ0cGJpbik7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPX1NZTkNfRVZFTlQ6Ci0gICAgICBydHBiaW4tPnNlbmRfc3luY19ldmVudCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CVUZGRVJfTU9ERToKLSAgICAgIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICBydHBiaW4tPmJ1ZmZlcl9tb2RlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotICAgICAgLyogcHJvcGFnYXRlIHRoZSBwcm9wZXJ0eSBkb3duIHRvIHRoZSBqaXR0ZXJidWZmZXIgKi8KLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwgIm1vZGUiLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fUkVUUkFOU01JU1NJT046Ci0gICAgICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotICAgICAgcnRwYmluLT5kb19yZXRyYW5zbWlzc2lvbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwKLSAgICAgICAgICAiZG8tcmV0cmFuc21pc3Npb24iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRQX1BST0ZJTEU6Ci0gICAgICBydHBiaW4tPnJ0cF9wcm9maWxlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05UUF9USU1FX1NPVVJDRTp7Ci0gICAgICBHU0xpc3QgKnNlc3Npb25zOwotICAgICAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLSAgICAgIHJ0cGJpbi0+bnRwX3RpbWVfc291cmNlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgZm9yIChzZXNzaW9ucyA9IHJ0cGJpbi0+c2Vzc2lvbnM7IHNlc3Npb25zOwotICAgICAgICAgIHNlc3Npb25zID0gZ19zbGlzdF9uZXh0IChzZXNzaW9ucykpIHsKLSAgICAgICAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbiA9IChHc3RSdHBCaW5TZXNzaW9uICopIHNlc3Npb25zLT5kYXRhOwotCi0gICAgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNlc3Npb24tPnNlc3Npb24pLAotICAgICAgICAgICAgIm50cC10aW1lLXNvdXJjZSIsIHJ0cGJpbi0+bnRwX3RpbWVfc291cmNlLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUlRDUF9TWU5DX1NFTkRfVElNRTp7Ci0gICAgICBHU0xpc3QgKnNlc3Npb25zOwotICAgICAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLSAgICAgIHJ0cGJpbi0+cnRjcF9zeW5jX3NlbmRfdGltZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGZvciAoc2Vzc2lvbnMgPSBydHBiaW4tPnNlc3Npb25zOyBzZXNzaW9uczsKLSAgICAgICAgICBzZXNzaW9ucyA9IGdfc2xpc3RfbmV4dCAoc2Vzc2lvbnMpKSB7Ci0gICAgICAgIEdzdFJ0cEJpblNlc3Npb24gKnNlc3Npb24gPSAoR3N0UnRwQmluU2Vzc2lvbiAqKSBzZXNzaW9ucy0+ZGF0YTsKLQotICAgICAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzZXNzaW9uLT5zZXNzaW9uKSwKLSAgICAgICAgICAgICJydGNwLXN5bmMtc2VuZC10aW1lIiwgcnRwYmluLT5ydGNwX3N5bmNfc2VuZF90aW1lLCBOVUxMKTsKLSAgICAgIH0KLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfTUFYX1JUQ1BfUlRQX1RJTUVfRElGRjoKLSAgICAgIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICBydHBiaW4tPm1heF9ydGNwX3J0cF90aW1lX2RpZmYgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwKLSAgICAgICAgICAibWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfRFJPUE9VVF9USU1FOgotICAgICAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLSAgICAgIHJ0cGJpbi0+bWF4X2Ryb3BvdXRfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwKLSAgICAgICAgICAibWF4LWRyb3BvdXQtdGltZSIsIHZhbHVlKTsKLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19zZXNzaW9uIChydHBiaW4sICJtYXgtZHJvcG91dC10aW1lIiwKLSAgICAgICAgICB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX01JU09SREVSX1RJTUU6Ci0gICAgICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotICAgICAgcnRwYmluLT5tYXhfbWlzb3JkZXJfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwKLSAgICAgICAgICAibWF4LW1pc29yZGVyLXRpbWUiLCB2YWx1ZSk7Ci0gICAgICBnc3RfcnRwX2Jpbl9wcm9wYWdhdGVfcHJvcGVydHlfdG9fc2Vzc2lvbiAocnRwYmluLCAibWF4LW1pc29yZGVyLXRpbWUiLAotICAgICAgICAgIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRkM3MjczX1NZTkM6Ci0gICAgICBydHBiaW4tPnJmYzcyNzNfc3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGdzdF9ydHBfYmluX3Byb3BhZ2F0ZV9wcm9wZXJ0eV90b19qaXR0ZXJidWZmZXIgKHJ0cGJpbiwKLSAgICAgICAgICAicmZjNzI3My1zeW5jIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9TVFJFQU1TOgotICAgICAgcnRwYmluLT5tYXhfc3RyZWFtcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBCaW4gKnJ0cGJpbjsKLQotICBydHBiaW4gPSBHU1RfUlRQX0JJTiAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEFURU5DWToKLSAgICAgIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRwYmluLT5sYXRlbmN5X21zKTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EUk9QX09OX0xBVEVOQ1k6Ci0gICAgICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0cGJpbi0+ZHJvcF9vbl9sYXRlbmN5KTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TREVTOgotICAgICAgZ192YWx1ZV90YWtlX2JveGVkICh2YWx1ZSwgZ3N0X3J0cF9iaW5fZ2V0X3NkZXNfc3RydWN0IChydHBiaW4pKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET19MT1NUOgotICAgICAgR1NUX1JUUF9CSU5fTE9DSyAocnRwYmluKTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBiaW4tPmRvX2xvc3QpOwotICAgICAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lHTk9SRV9QVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBiaW4tPmlnbm9yZV9wdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlRQX1NZTkM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRwYmluLT5udHBfc3luYyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9TWU5DOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIGdfYXRvbWljX2ludF9nZXQgKCZydHBiaW4tPnJ0Y3Bfc3luYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfU1lOQ19JTlRFUlZBTDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBiaW4tPnJ0Y3Bfc3luY19pbnRlcnZhbCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT1JFTU9WRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBiaW4tPnByaXYtPmF1dG9yZW1vdmUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JVRkZFUl9NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHJ0cGJpbi0+YnVmZmVyX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9QSVBFTElORV9DTE9DSzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBiaW4tPnVzZV9waXBlbGluZV9jbG9jayk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fU1lOQ19FVkVOVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBiaW4tPnNlbmRfc3luY19ldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fUkVUUkFOU01JU1NJT046Ci0gICAgICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0cGJpbi0+ZG9fcmV0cmFuc21pc3Npb24pOwotICAgICAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUUF9QUk9GSUxFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHJ0cGJpbi0+cnRwX3Byb2ZpbGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05UUF9USU1FX1NPVVJDRToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBydHBiaW4tPm50cF90aW1lX3NvdXJjZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9TWU5DX1NFTkRfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBiaW4tPnJ0Y3Bfc3luY19zZW5kX3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9SVENQX1JUUF9USU1FX0RJRkY6Ci0gICAgICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcnRwYmluLT5tYXhfcnRjcF9ydHBfdGltZV9kaWZmKTsKLSAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfRFJPUE9VVF9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0cGJpbi0+bWF4X2Ryb3BvdXRfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX01JU09SREVSX1RJTUU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRwYmluLT5tYXhfbWlzb3JkZXJfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkZDNzI3M19TWU5DOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0cGJpbi0+cmZjNzI3M19zeW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU1RSRUFNUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBiaW4tPm1heF9zdHJlYW1zKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfYmluX2hhbmRsZV9tZXNzYWdlIChHc3RCaW4gKiBiaW4sIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBHc3RSdHBCaW4gKnJ0cGJpbjsKLQotICBydHBiaW4gPSBHU1RfUlRQX0JJTiAoYmluKTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FTEVNRU5UOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotCi0gICAgICAvKiB3ZSBjaGFuZ2UgdGhlIHN0cnVjdHVyZSBuYW1lIGFuZCBhZGQgdGhlIHNlc3Npb24gSUQgdG8gaXQgKi8KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXBwbGljYXRpb24veC1ydHAtc291cmNlLXNkZXMiKSkgewotICAgICAgICBHc3RSdHBCaW5TZXNzaW9uICpzZXNzOwotCi0gICAgICAgIC8qIGZpbmQgdGhlIHNlc3Npb24gd2Ugc2V0IGl0IGFzIG9iamVjdCBkYXRhICovCi0gICAgICAgIHNlc3MgPSBnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpLAotICAgICAgICAgICAgIkdzdFJUUEJpbi5zZXNzaW9uIik7Ci0KLSAgICAgICAgaWYgKEdfTElLRUxZIChzZXNzKSkgewotICAgICAgICAgIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9tYWtlX3dyaXRhYmxlIChtZXNzYWdlKTsKLSAgICAgICAgICBzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKChHc3RTdHJ1Y3R1cmUgKikgcywgInNlc3Npb24iLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAgICAgc2Vzcy0+aWQsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBHU1RfQklOX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZSAoYmluLCBtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0JVRkZFUklORzoKLSAgICB7Ci0gICAgICBnaW50IHBlcmNlbnQ7Ci0gICAgICBnaW50IG1pbl9wZXJjZW50ID0gMTAwOwotICAgICAgR1NMaXN0ICpzZXNzaW9ucywgKnN0cmVhbXM7Ci0gICAgICBHc3RSdHBCaW5TdHJlYW0gKnN0cmVhbTsKLSAgICAgIGdib29sZWFuIGNoYW5nZSA9IEZBTFNFLCBhY3RpdmUgPSBGQUxTRTsKLSAgICAgIEdzdENsb2NrVGltZSBtaW5fb3V0X3RpbWU7Ci0gICAgICBHc3RCdWZmZXJpbmdNb2RlIG1vZGU7Ci0gICAgICBnaW50IGF2Z19pbiwgYXZnX291dDsKLSAgICAgIGdpbnQ2NCBidWZmZXJpbmdfbGVmdDsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nIChtZXNzYWdlLCAmcGVyY2VudCk7Ci0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMgKG1lc3NhZ2UsICZtb2RlLCAmYXZnX2luLCAmYXZnX291dCwKLSAgICAgICAgICAmYnVmZmVyaW5nX2xlZnQpOwotCi0gICAgICBzdHJlYW0gPQotICAgICAgICAgIGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSksCi0gICAgICAgICAgIkdzdFJUUEJpbi5zdHJlYW0iKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAiZ290IHBlcmNlbnQgJWQgZnJvbSBzdHJlYW0gJXAiLCBwZXJjZW50LCBzdHJlYW0pOwotCi0gICAgICAvKiBnZXQgdGhlIHN0cmVhbSAqLwotICAgICAgaWYgKEdfTElLRUxZIChzdHJlYW0pKSB7Ci0gICAgICAgIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICAgIC8qIGZpbGwgaW4gdGhlIHBlcmNlbnQgKi8KLSAgICAgICAgc3RyZWFtLT5wZXJjZW50ID0gcGVyY2VudDsKLQotICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIG1pbiB2YWx1ZSBmb3IgYWxsIHN0cmVhbXMgKi8KLSAgICAgICAgZm9yIChzZXNzaW9ucyA9IHJ0cGJpbi0+c2Vzc2lvbnM7IHNlc3Npb25zOwotICAgICAgICAgICAgc2Vzc2lvbnMgPSBnX3NsaXN0X25leHQgKHNlc3Npb25zKSkgewotICAgICAgICAgIEdzdFJ0cEJpblNlc3Npb24gKnNlc3Npb24gPSAoR3N0UnRwQmluU2Vzc2lvbiAqKSBzZXNzaW9ucy0+ZGF0YTsKLQotICAgICAgICAgIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChzZXNzaW9uKTsKLSAgICAgICAgICBpZiAoc2Vzc2lvbi0+c3RyZWFtcykgewotICAgICAgICAgICAgZm9yIChzdHJlYW1zID0gc2Vzc2lvbi0+c3RyZWFtczsgc3RyZWFtczsKLSAgICAgICAgICAgICAgICBzdHJlYW1zID0gZ19zbGlzdF9uZXh0IChzdHJlYW1zKSkgewotICAgICAgICAgICAgICBHc3RSdHBCaW5TdHJlYW0gKnN0cmVhbSA9IChHc3RSdHBCaW5TdHJlYW0gKikgc3RyZWFtcy0+ZGF0YTsKLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJzdHJlYW0gJXAgcGVyY2VudCAlZCIsIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cGVyY2VudCk7Ci0KLSAgICAgICAgICAgICAgLyogZmluZCBtaW4gcGVyY2VudCAqLwotICAgICAgICAgICAgICBpZiAobWluX3BlcmNlbnQgPiBzdHJlYW0tPnBlcmNlbnQpCi0gICAgICAgICAgICAgICAgbWluX3BlcmNlbnQgPSBzdHJlYW0tPnBlcmNlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoYmluLAotICAgICAgICAgICAgICAgICJzZXNzaW9uIGhhcyBubyBzdHJlYW1zLCBzZXR0aW5nIG1pbl9wZXJjZW50IHRvIDAiKTsKLSAgICAgICAgICAgIG1pbl9wZXJjZW50ID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzc2lvbik7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLCAibWluIHBlcmNlbnQgJWQiLCBtaW5fcGVyY2VudCk7Ci0KLSAgICAgICAgaWYgKHJ0cGJpbi0+YnVmZmVyaW5nKSB7Ci0gICAgICAgICAgaWYgKG1pbl9wZXJjZW50ID09IDEwMCkgewotICAgICAgICAgICAgcnRwYmluLT5idWZmZXJpbmcgPSBGQUxTRTsKLSAgICAgICAgICAgIGFjdGl2ZSA9IFRSVUU7Ci0gICAgICAgICAgICBjaGFuZ2UgPSBUUlVFOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAobWluX3BlcmNlbnQgPCAxMDApIHsKLSAgICAgICAgICAgIC8qIHBhdXNlIHRoZSBzdHJlYW1zICovCi0gICAgICAgICAgICBydHBiaW4tPmJ1ZmZlcmluZyA9IFRSVUU7Ci0gICAgICAgICAgICBhY3RpdmUgPSBGQUxTRTsKLSAgICAgICAgICAgIGNoYW5nZSA9IFRSVUU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLQotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgICAgICAgLyogbWFrZSBhIG5ldyBidWZmZXJpbmcgbWVzc2FnZSB3aXRoIHRoZSBtaW4gdmFsdWUgKi8KLSAgICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfYnVmZmVyaW5nIChHU1RfT0JKRUNUX0NBU1QgKGJpbiksIG1pbl9wZXJjZW50KTsKLSAgICAgICAgZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAobWVzc2FnZSwgbW9kZSwgYXZnX2luLCBhdmdfb3V0LAotICAgICAgICAgICAgYnVmZmVyaW5nX2xlZnQpOwotCi0gICAgICAgIGlmIChHX1VOTElLRUxZIChjaGFuZ2UpKSB7Ci0gICAgICAgICAgR3N0Q2xvY2sgKmNsb2NrOwotICAgICAgICAgIGd1aW50NjQgcnVubmluZ190aW1lID0gMDsKLSAgICAgICAgICBndWludDY0IG9mZnNldCA9IDA7Ci0KLSAgICAgICAgICAvKiBmaWd1cmUgb3V0IHRoZSBydW5uaW5nIHRpbWUgd2hlbiB3ZSBoYXZlIGEgY2xvY2sgKi8KLSAgICAgICAgICBpZiAoR19MSUtFTFkgKChjbG9jayA9Ci0gICAgICAgICAgICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHU1RfRUxFTUVOVF9DQVNUIChiaW4pKSkpKSB7Ci0gICAgICAgICAgICBndWludDY0IG5vdywgYmFzZV90aW1lOwotCi0gICAgICAgICAgICBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICAgICAgICAgIGJhc2VfdGltZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdTVF9FTEVNRU5UX0NBU1QgKGJpbikpOwotICAgICAgICAgICAgcnVubmluZ190aW1lID0gbm93IC0gYmFzZV90aW1lOwotICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotICAgICAgICAgIH0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICAgICAgICJydW5uaW5nIHRpbWUgbm93ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAocnVubmluZ190aW1lKSk7Ci0KLSAgICAgICAgICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotCi0gICAgICAgICAgLyogd2hlbiB3ZSByZWFjdGl2YXRlLCBjYWxjdWxhdGUgdGhlIG9mZnNldHMgc28gdGhhdCBhbGwgc3RyZWFtcyBoYXZlCi0gICAgICAgICAgICogYW4gb3V0cHV0IHRpbWUgdGhhdCBpcyBhdCBsZWFzdCBhcyBiaWcgYXMgdGhlIHJ1bm5pbmdfdGltZSAqLwotICAgICAgICAgIG9mZnNldCA9IDA7Ci0gICAgICAgICAgaWYgKGFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKHJ1bm5pbmdfdGltZSA+IHJ0cGJpbi0+YnVmZmVyX3N0YXJ0KSB7Ci0gICAgICAgICAgICAgIG9mZnNldCA9IHJ1bm5pbmdfdGltZSAtIHJ0cGJpbi0+YnVmZmVyX3N0YXJ0OwotICAgICAgICAgICAgICBpZiAob2Zmc2V0ID49IHJ0cGJpbi0+bGF0ZW5jeV9ucykKLSAgICAgICAgICAgICAgICBvZmZzZXQgLT0gcnRwYmluLT5sYXRlbmN5X25zOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiBwYXVzZSBhbGwgc3RyZWFtcyAqLwotICAgICAgICAgIG1pbl9vdXRfdGltZSA9IC0xOwotICAgICAgICAgIGZvciAoc2Vzc2lvbnMgPSBydHBiaW4tPnNlc3Npb25zOyBzZXNzaW9uczsKLSAgICAgICAgICAgICAgc2Vzc2lvbnMgPSBnX3NsaXN0X25leHQgKHNlc3Npb25zKSkgewotICAgICAgICAgICAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbiA9IChHc3RSdHBCaW5TZXNzaW9uICopIHNlc3Npb25zLT5kYXRhOwotCi0gICAgICAgICAgICBHU1RfUlRQX1NFU1NJT05fTE9DSyAoc2Vzc2lvbik7Ci0gICAgICAgICAgICBmb3IgKHN0cmVhbXMgPSBzZXNzaW9uLT5zdHJlYW1zOyBzdHJlYW1zOwotICAgICAgICAgICAgICAgIHN0cmVhbXMgPSBnX3NsaXN0X25leHQgKHN0cmVhbXMpKSB7Ci0gICAgICAgICAgICAgIEdzdFJ0cEJpblN0cmVhbSAqc3RyZWFtID0gKEdzdFJ0cEJpblN0cmVhbSAqKSBzdHJlYW1zLT5kYXRhOwotICAgICAgICAgICAgICBHc3RFbGVtZW50ICplbGVtZW50ID0gc3RyZWFtLT5idWZmZXI7Ci0gICAgICAgICAgICAgIGd1aW50NjQgbGFzdF9vdXQ7Ci0KLSAgICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChlbGVtZW50LCAic2V0LWFjdGl2ZSIsIGFjdGl2ZSwgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgJmxhc3Rfb3V0KTsKLQotICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkgewotICAgICAgICAgICAgICAgIGdfb2JqZWN0X2dldCAoZWxlbWVudCwgInBlcmNlbnQiLCAmc3RyZWFtLT5wZXJjZW50LCBOVUxMKTsKLQotICAgICAgICAgICAgICAgIGlmIChsYXN0X291dCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgIGxhc3Rfb3V0ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAobWluX291dF90aW1lID09IC0xIHx8IGxhc3Rfb3V0IDwgbWluX291dF90aW1lKQotICAgICAgICAgICAgICAgICAgbWluX291dF90aW1lID0gbGFzdF9vdXQ7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChiaW4sCi0gICAgICAgICAgICAgICAgICAic2V0dGluZyAlcCB0byAlZCwgb2Zmc2V0ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBsYXN0ICUiCi0gICAgICAgICAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgcGVyY2VudCAlZCIsIGVsZW1lbnQsIGFjdGl2ZSwKLSAgICAgICAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG9mZnNldCksIEdTVF9USU1FX0FSR1MgKGxhc3Rfb3V0KSwKLSAgICAgICAgICAgICAgICAgIHN0cmVhbS0+cGVyY2VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzaW9uKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmluLAotICAgICAgICAgICAgICAibWluIG91dCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobWluX291dF90aW1lKSk7Ci0KLSAgICAgICAgICAvKiB0aGUgYnVmZmVyX3N0YXJ0IGlzIHRoZSBtaW4gb3V0IHRpbWUgb2YgYWxsIHBhdXNlZCBqaXR0ZXJidWZmZXJzICovCi0gICAgICAgICAgaWYgKCFhY3RpdmUpCi0gICAgICAgICAgICBydHBiaW4tPmJ1ZmZlcl9zdGFydCA9IG1pbl9vdXRfdGltZTsKLQotICAgICAgICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgR1NUX0JJTl9DTEFTUyAocGFyZW50X2NsYXNzKS0+aGFuZGxlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICB7Ci0gICAgICBHU1RfQklOX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZSAoYmluLCBtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfYmluX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJlczsKLSAgR3N0UnRwQmluICpydHBiaW47Ci0gIEdzdFJ0cEJpblByaXZhdGUgKnByaXY7Ci0KLSAgcnRwYmluID0gR1NUX1JUUF9CSU4gKGVsZW1lbnQpOwotICBwcml2ID0gcnRwYmluLT5wcml2OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIHByaXYtPmxhc3RfbnRwbnN0aW1lID0gMDsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBiaW4sICJjbGVhcmluZyBzaHV0ZG93biBmbGFnIik7Ci0gICAgICBnX2F0b21pY19pbnRfc2V0ICgmcHJpdi0+c2h1dGRvd24sIDApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBiaW4sICJzZXR0aW5nIHNodXRkb3duIGZsYWciKTsKLSAgICAgIGdfYXRvbWljX2ludF9zZXQgKCZwcml2LT5zaHV0ZG93biwgMSk7Ci0gICAgICAvKiB3YWl0IGZvciBhbGwgY2FsbGJhY2tzIHRvIGVuZCBieSB0YWtpbmcgdGhlIGxvY2suIE5vIG5ldyBjYWxsYmFja3Mgd2lsbAotICAgICAgICogYmUgYWJsZSB0byBoYXBwZW4gYXMgd2Ugc2V0IHRoZSBzaHV0ZG93biBmbGFnLiAqLwotICAgICAgR1NUX1JUUF9CSU5fRFlOX0xPQ0sgKHJ0cGJpbik7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwYmluLCAiZHluYW1pYyBsb2NrIHRha2VuLCB3ZSBjYW4gY29udGludWUgc2h1dGRvd24iKTsKLSAgICAgIEdTVF9SVFBfQklOX0RZTl9VTkxPQ0sgKHJ0cGJpbik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXMgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2Vzc2lvbl9yZXF1ZXN0X2VsZW1lbnQgKEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uLCBndWludCBzaWduYWwpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBOVUxMOwotICBHc3RSdHBCaW4gKmJpbiA9IHNlc3Npb24tPmJpbjsKLQotICBnX3NpZ25hbF9lbWl0IChiaW4sIGdzdF9ydHBfYmluX3NpZ25hbHNbc2lnbmFsXSwgMCwgc2Vzc2lvbi0+aWQsICZlbGVtZW50KTsKLQotICBpZiAoZWxlbWVudCkgewotICAgIGlmICghYmluX21hbmFnZV9lbGVtZW50IChiaW4sIGVsZW1lbnQpKQotICAgICAgZ290byBtYW5hZ2VfZmFpbGVkOwotICAgIHNlc3Npb24tPmVsZW1lbnRzID0gZ19zbGlzdF9wcmVwZW5kIChzZXNzaW9uLT5lbGVtZW50cywgZWxlbWVudCk7Ci0gIH0KLSAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgLyogRVJST1JTICovCi1tYW5hZ2VfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChiaW4sICJ1bmFibGUgdG8gbWFuYWdlIGVsZW1lbnQiKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChlbGVtZW50KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNvcHlfc3RpY2t5X2V2ZW50cyAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWQgKmdwYWQgPSBHU1RfUEFEX0NBU1QgKHVzZXJfZGF0YSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZ3BhZCwgInN0b3JlIHN0aWNreSBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgKmV2ZW50KTsKLSAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKGdwYWQsICpldmVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIGEgbmV3IHBhZCAoU1NSQykgd2FzIGNyZWF0ZWQgaW4gQHNlc3Npb24uIFRoaXMgc2lnbmFsIGlzIGVtaXRlZCBmcm9tIHRoZQotICogcGF5bG9hZCBkZW11eGVyLiAqLwotc3RhdGljIHZvaWQKLW5ld19wYXlsb2FkX2ZvdW5kIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ3VpbnQgcHQsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RSdHBCaW5TdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdzdFJ0cEJpbiAqcnRwYmluOwotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzOwotICBHc3RQYWRUZW1wbGF0ZSAqdGVtcGw7Ci0gIGdjaGFyICpwYWRuYW1lOwotICBHc3RQYWQgKmdwYWQ7Ci0KLSAgcnRwYmluID0gc3RyZWFtLT5iaW47Ci0KLSAgR1NUX0RFQlVHICgibmV3IHBheWxvYWQgcGFkICVkIiwgcHQpOwotCi0gIEdTVF9SVFBfQklOX1NIVVRET1dOX0xPQ0sgKHJ0cGJpbiwgc2h1dGRvd24pOwotCi0gIC8qIGdob3N0IHRoZSBwYWQgdG8gdGhlIHBhcmVudCAqLwotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAocnRwYmluKTsKLSAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInJlY3ZfcnRwX3NyY18ldV8ldV8ldSIpOwotICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgicmVjdl9ydHBfc3JjXyV1XyV1XyV1IiwKLSAgICAgIHN0cmVhbS0+c2Vzc2lvbi0+aWQsIHN0cmVhbS0+c3NyYywgcHQpOwotICBncGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAocGFkbmFtZSwgcGFkLCB0ZW1wbCk7Ci0gIGdfZnJlZSAocGFkbmFtZSk7Ci0gIGdfb2JqZWN0X3NldF9kYXRhIChHX09CSkVDVCAocGFkKSwgIkdzdFJUUEJpbi5naG9zdHBhZCIsIGdwYWQpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZ3BhZCwgVFJVRSk7Ci0gIEdTVF9SVFBfQklOX1NIVVRET1dOX1VOTE9DSyAocnRwYmluKTsKLQotICBnc3RfcGFkX3N0aWNreV9ldmVudHNfZm9yZWFjaCAocGFkLCBjb3B5X3N0aWNreV9ldmVudHMsIGdwYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBiaW4pLCBncGFkKTsKLQotICByZXR1cm47Ci0KLXNodXRkb3duOgotICB7Ci0gICAgR1NUX0RFQlVHICgiaWdub3JpbmcsIHdlIGFyZSBzaHV0dGluZyBkb3duIik7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYXlsb2FkX3BhZF9yZW1vdmVkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkLAotICAgIEdzdFJ0cEJpblN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgR3N0UnRwQmluICpydHBiaW47Ci0gIEdzdFBhZCAqZ3BhZDsKLQotICBydHBiaW4gPSBzdHJlYW0tPmJpbjsKLQotICBHU1RfREVCVUcgKCJwYXlsb2FkIHBhZCByZW1vdmVkIik7Ci0KLSAgR1NUX1JUUF9CSU5fRFlOX0xPQ0sgKHJ0cGJpbik7Ci0gIGlmICgoZ3BhZCA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAocGFkKSwgIkdzdFJUUEJpbi5naG9zdHBhZCIpKSkgewotICAgIGdfb2JqZWN0X3NldF9kYXRhIChHX09CSkVDVCAocGFkKSwgIkdzdFJUUEJpbi5naG9zdHBhZCIsIE5VTEwpOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChncGFkLCBGQUxTRSk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYmluKSwgZ3BhZCk7Ci0gIH0KLSAgR1NUX1JUUF9CSU5fRFlOX1VOTE9DSyAocnRwYmluKTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotcHRfbWFwX3JlcXVlc3RlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGd1aW50IHB0LCBHc3RSdHBCaW5TZXNzaW9uICogc2Vzc2lvbikKLXsKLSAgR3N0UnRwQmluICpydHBiaW47Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgcnRwYmluID0gc2Vzc2lvbi0+YmluOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgInBheWxvYWQgbWFwIHJlcXVlc3RlZCBmb3IgcHQgJWQgaW4gc2Vzc2lvbiAlZCIsIHB0LAotICAgICAgc2Vzc2lvbi0+aWQpOwotCi0gIGNhcHMgPSBnZXRfcHRfbWFwIChzZXNzaW9uLCBwdCk7Ci0gIGlmICghY2FwcykKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgcmV0dXJuIGNhcHM7Ci0KLSAgLyogRVJST1JTICovCi1ub19jYXBzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAiY291bGQgbm90IGdldCBjYXBzIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXBheWxvYWRfdHlwZV9jaGFuZ2UgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBndWludCBwdCwgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3Npb24pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlc3Npb24tPmJpbiwKLSAgICAgICJlbWl0aW5nIHNpZ25hbCBmb3IgcHQgdHlwZSBjaGFuZ2VkIHRvICVkIGluIHNlc3Npb24gJWQiLCBwdCwKLSAgICAgIHNlc3Npb24tPmlkKTsKLQotICBnX3NpZ25hbF9lbWl0IChzZXNzaW9uLT5iaW4sIGdzdF9ydHBfYmluX3NpZ25hbHNbU0lHTkFMX1BBWUxPQURfVFlQRV9DSEFOR0VdLAotICAgICAgMCwgc2Vzc2lvbi0+aWQsIHB0KTsKLX0KLQotLyogZW1pdGVkIHdoZW4gY2FwcyBjaGFuZ2VkIGZvciB0aGUgc2Vzc2lvbiAqLwotc3RhdGljIHZvaWQKLWNhcHNfY2hhbmdlZCAoR3N0UGFkICogcGFkLCBHUGFyYW1TcGVjICogcHNwZWMsIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKQotewotICBHc3RSdHBCaW4gKmJpbjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludCBwYXlsb2FkOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgYmluID0gc2Vzc2lvbi0+YmluOwotCi0gIGdfb2JqZWN0X2dldCAocGFkLCAiY2FwcyIsICZjYXBzLCBOVUxMKTsKLQotICBpZiAoY2FwcyA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJnb3QgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIC8qIGdldCBwYXlsb2FkLCBmaW5pc2ggd2hlbiBpdCdzIG5vdCB0aGVyZSAqLwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgInBheWxvYWQiLCAmcGF5bG9hZCkpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHNlc3Npb24pOwotICBHU1RfREVCVUdfT0JKRUNUIChiaW4sICJpbnNlcnQgY2FwcyBmb3IgcGF5bG9hZCAlZCIsIHBheWxvYWQpOwotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChzZXNzaW9uLT5wdG1hcCwgR0lOVF9UT19QT0lOVEVSIChwYXlsb2FkKSwgY2Fwcyk7Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3Npb24pOwotfQotCi0vKiBhIG5ldyBwYWQgKFNTUkMpIHdhcyBjcmVhdGVkIGluIEBzZXNzaW9uICovCi1zdGF0aWMgdm9pZAotbmV3X3NzcmNfcGFkX2ZvdW5kIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ3VpbnQgc3NyYywgR3N0UGFkICogcGFkLAotICAgIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKQotewotICBHc3RSdHBCaW4gKnJ0cGJpbjsKLSAgR3N0UnRwQmluU3RyZWFtICpzdHJlYW07Ci0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLSAgZ2NoYXIgKnBhZG5hbWU7Ci0KLSAgcnRwYmluID0gc2Vzc2lvbi0+YmluOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgIm5ldyBTU1JDIHBhZCAlMDh4LCAlczolcyIsIHNzcmMsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIEdTVF9SVFBfQklOX1NIVVRET1dOX0xPQ0sgKHJ0cGJpbiwgc2h1dGRvd24pOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChzZXNzaW9uKTsKLQotICAvKiBjcmVhdGUgbmV3IHN0cmVhbSAqLwotICBzdHJlYW0gPSBjcmVhdGVfc3RyZWFtIChzZXNzaW9uLCBzc3JjKTsKLSAgaWYgKCFzdHJlYW0pCi0gICAgZ290byBub19zdHJlYW07Ci0KLSAgLyogZ2V0IHBhZCBhbmQgbGluayAqLwotICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIGppdHRlcmJ1ZmZlciBSVFAiKTsKLSAgcGFkbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNyY18ldSIsIHNzcmMpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgcGFkbmFtZSk7Ci0gIGdfZnJlZSAocGFkbmFtZSk7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3RyZWFtLT5idWZmZXIsICJzaW5rIik7Ci0gIGdzdF9wYWRfbGlua19mdWxsIChzcmNwYWQsIHNpbmtwYWQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAibGlua2luZyBqaXR0ZXJidWZmZXIgUlRDUCIpOwotICBwYWRuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgicnRjcF9zcmNfJXUiLCBzc3JjKTsKLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIHBhZG5hbWUpOwotICBnX2ZyZWUgKHBhZG5hbWUpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChzdHJlYW0tPmJ1ZmZlciwgInNpbmtfcnRjcCIpOwotICBnc3RfcGFkX2xpbmtfZnVsbCAoc3JjcGFkLCBzaW5rcGFkLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIC8qIGNvbm5lY3QgdG8gdGhlIFJUQ1Agc3luYyBzaWduYWwgZnJvbSB0aGUgaml0dGVyYnVmZmVyICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImNvbm5lY3Rpbmcgc3luYyBzaWduYWwiKTsKLSAgc3RyZWFtLT5idWZmZXJfaGFuZGxlc3luY19zaWcgPSBnX3NpZ25hbF9jb25uZWN0IChzdHJlYW0tPmJ1ZmZlciwKLSAgICAgICJoYW5kbGUtc3luYyIsIChHQ2FsbGJhY2spIGdzdF9ydHBfYmluX2hhbmRsZV9zeW5jLCBzdHJlYW0pOwotCi0gIGlmIChzdHJlYW0tPmRlbXV4KSB7Ci0gICAgLyogY29ubmVjdCB0byB0aGUgbmV3LXBhZCBzaWduYWwgb2YgdGhlIHBheWxvYWQgZGVtdXhlciwgdGhpcyB3aWxsIGV4cG9zZSB0aGUKLSAgICAgKiBuZXcgcGFkIGJ5IGdob3N0aW5nIGl0LiAqLwotICAgIHN0cmVhbS0+ZGVtdXhfbmV3cGFkX3NpZyA9IGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbS0+ZGVtdXgsCi0gICAgICAgICJuZXctcGF5bG9hZC10eXBlIiwgKEdDYWxsYmFjaykgbmV3X3BheWxvYWRfZm91bmQsIHN0cmVhbSk7Ci0gICAgc3RyZWFtLT5kZW11eF9wYWRyZW1vdmVkX3NpZyA9IGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbS0+ZGVtdXgsCi0gICAgICAgICJwYWQtcmVtb3ZlZCIsIChHQ2FsbGJhY2spIHBheWxvYWRfcGFkX3JlbW92ZWQsIHN0cmVhbSk7Ci0KLSAgICAvKiBjb25uZWN0IHRvIHRoZSByZXF1ZXN0LXB0LW1hcCBzaWduYWwuIFRoaXMgc2lnbmFsIHdpbGwgYmUgZW1pdGVkIGJ5IHRoZQotICAgICAqIGRlbXV4ZXIgc28gdGhhdCBpdCBjYW4gYXBwbHkgYSBwcm9wZXIgY2FwcyBvbiB0aGUgYnVmZmVycyBmb3IgdGhlCi0gICAgICogZGVwYXlsb2FkZXJzLiAqLwotICAgIHN0cmVhbS0+ZGVtdXhfcHRyZXFfc2lnID0gZ19zaWduYWxfY29ubmVjdCAoc3RyZWFtLT5kZW11eCwKLSAgICAgICAgInJlcXVlc3QtcHQtbWFwIiwgKEdDYWxsYmFjaykgcHRfbWFwX3JlcXVlc3RlZCwgc2Vzc2lvbik7Ci0gICAgLyogY29ubmVjdCB0byB0aGUgIHNpZ25hbCBzbyBpdCBjYW4gYmUgZm9yd2FyZGVkLiAqLwotICAgIHN0cmVhbS0+ZGVtdXhfcHRjaGFuZ2Vfc2lnID0gZ19zaWduYWxfY29ubmVjdCAoc3RyZWFtLT5kZW11eCwKLSAgICAgICAgInBheWxvYWQtdHlwZS1jaGFuZ2UiLCAoR0NhbGxiYWNrKSBwYXlsb2FkX3R5cGVfY2hhbmdlLCBzZXNzaW9uKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBhZGQgcnRwaml0dGVyYnVmZmVyIHNyYyBwYWQgdG8gcGFkcyAqLwotICAgIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3M7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICAgIGdjaGFyICpwYWRuYW1lOwotICAgIEdzdFBhZCAqZ3BhZCwgKnBhZDsKLQotICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzdHJlYW0tPmJ1ZmZlciwgInNyYyIpOwotCi0gICAgLyogZ2hvc3QgdGhlIHBhZCB0byB0aGUgcGFyZW50ICovCi0gICAga2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKHJ0cGJpbik7Ci0gICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInJlY3ZfcnRwX3NyY18ldV8ldV8ldSIpOwotICAgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJyZWN2X3J0cF9zcmNfJXVfJXVfJXUiLAotICAgICAgICBzdHJlYW0tPnNlc3Npb24tPmlkLCBzdHJlYW0tPnNzcmMsIDI1NSk7Ci0gICAgZ3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHBhZG5hbWUsIHBhZCwgdGVtcGwpOwotICAgIGdfZnJlZSAocGFkbmFtZSk7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGdwYWQsIFRSVUUpOwotICAgIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChwYWQsIGNvcHlfc3RpY2t5X2V2ZW50cywgZ3BhZCk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYmluKSwgZ3BhZCk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICB9Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzc2lvbik7Ci0gIEdTVF9SVFBfQklOX1NIVVRET1dOX1VOTE9DSyAocnRwYmluKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1zaHV0ZG93bjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgIndlIGFyZSBzaHV0dGluZyBkb3duIik7Ci0gICAgcmV0dXJuOwotICB9Ci1ub19zdHJlYW06Ci0gIHsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzaW9uKTsKLSAgICBHU1RfUlRQX0JJTl9TSFVURE9XTl9VTkxPQ0sgKHJ0cGJpbik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAiY291bGQgbm90IGNyZWF0ZSBzdHJlYW0iKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1jb21wbGV0ZV9zZXNzaW9uX3NpbmsgKEdzdFJ0cEJpbiAqIHJ0cGJpbiwgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3Npb24pCi17Ci0gIGdjaGFyICpnbmFtZTsKLSAgZ3VpbnQgc2Vzc2lkID0gc2Vzc2lvbi0+aWQ7Ci0gIEdzdFBhZCAqcmVjdl9ydHBfc2luazsKLSAgR3N0RWxlbWVudCAqZGVjb2RlcjsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotCi0gIC8qIGdldCByZWN2X3J0cCBwYWQgYW5kIHN0b3JlICovCi0gIHNlc3Npb24tPnJlY3ZfcnRwX3NpbmsgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChzZXNzaW9uLT5zZXNzaW9uLCAicmVjdl9ydHBfc2luayIpOwotICBpZiAoc2Vzc2lvbi0+cmVjdl9ydHBfc2luayA9PSBOVUxMKQotICAgIGdvdG8gcGFkX2ZhaWxlZDsKLQotICBnX3NpZ25hbF9jb25uZWN0IChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLCAibm90aWZ5OjpjYXBzIiwKLSAgICAgIChHQ2FsbGJhY2spIGNhcHNfY2hhbmdlZCwgc2Vzc2lvbik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAicmVxdWVzdGluZyBSVFAgZGVjb2RlciIpOwotICBkZWNvZGVyID0gc2Vzc2lvbl9yZXF1ZXN0X2VsZW1lbnQgKHNlc3Npb24sIFNJR05BTF9SRVFVRVNUX1JUUF9ERUNPREVSKTsKLSAgaWYgKGRlY29kZXIpIHsKLSAgICBHc3RQYWQgKmRlY3NyYywgKmRlY3Npbms7Ci0gICAgR3N0UGFkTGlua1JldHVybiByZXQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIFJUUCBkZWNvZGVyIik7Ci0gICAgZGVjc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZWNvZGVyLCAicnRwX3NpbmsiKTsKLSAgICBpZiAoZGVjc2luayA9PSBOVUxMKQotICAgICAgZ290byBkZWNfc2lua19mYWlsZWQ7Ci0KLSAgICByZWN2X3J0cF9zaW5rID0gZGVjc2luazsKLQotICAgIGRlY3NyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZWNvZGVyLCAicnRwX3NyYyIpOwotICAgIGlmIChkZWNzcmMgPT0gTlVMTCkKLSAgICAgIGdvdG8gZGVjX3NyY19mYWlsZWQ7Ci0KLSAgICByZXQgPSBnc3RfcGFkX2xpbmsgKGRlY3NyYywgc2Vzc2lvbi0+cmVjdl9ydHBfc2luayk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVjc3JjKTsKLQotICAgIGlmIChyZXQgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgICAgZ290byBkZWNfbGlua19mYWlsZWQ7Ci0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJubyBSVFAgZGVjb2RlciBnaXZlbiIpOwotICAgIHJlY3ZfcnRwX3NpbmsgPSBnc3Rfb2JqZWN0X3JlZiAoc2Vzc2lvbi0+cmVjdl9ydHBfc2luayk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJnaG9zdGluZyBzZXNzaW9uIHNpbmsgcGFkIik7Ci0gIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChydHBiaW4pOwotICBnbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInJlY3ZfcnRwX3NpbmtfJXUiLCBzZXNzaWQpOwotICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAicmVjdl9ydHBfc2lua18ldSIpOwotICBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rX2dob3N0ID0KLSAgICAgIGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGduYW1lLCByZWN2X3J0cF9zaW5rLCB0ZW1wbCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJlY3ZfcnRwX3NpbmspOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNlc3Npb24tPnJlY3ZfcnRwX3NpbmtfZ2hvc3QsIFRSVUUpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBiaW4pLCBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rX2dob3N0KTsKLSAgZ19mcmVlIChnbmFtZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1wYWRfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gZ2V0IHNlc3Npb24gcmVjdl9ydHBfc2luayBwYWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWRlY19zaW5rX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBkZWNvZGVyIHNpbmsgcGFkIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWRlY19zcmNfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gZ2V0IGRlY29kZXIgc3JjIHBhZCBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocmVjdl9ydHBfc2luayk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1kZWNfbGlua19mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBsaW5rIHJ0cCBkZWNvZGVyIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChyZWN2X3J0cF9zaW5rKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogQ3JlYXRlIGEgcGFkIGZvciByZWNlaXZpbmcgUlRQIGZvciB0aGUgc2Vzc2lvbiBpbiBAbmFtZS4gTXVzdCBiZSBjYWxsZWQgd2l0aAotICogUlRQX0JJTl9MT0NLLgotICovCi1zdGF0aWMgR3N0UGFkICoKLWNyZWF0ZV9yZWN2X3J0cCAoR3N0UnRwQmluICogcnRwYmluLCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGd1aW50IHNlc3NpZDsKLSAgR3N0RWxlbWVudCAqYXV4OwotICBHc3RQYWQgKnJlY3ZfcnRwX3NyYzsKLSAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbjsKLQotICAvKiBmaXJzdCBnZXQgdGhlIHNlc3Npb24gbnVtYmVyICovCi0gIGlmIChuYW1lID09IE5VTEwgfHwgc3NjYW5mIChuYW1lLCAicmVjdl9ydHBfc2lua18ldSIsICZzZXNzaWQpICE9IDEpCi0gICAgZ290byBub19uYW1lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImZpbmRpbmcgc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0KLSAgLyogZ2V0IG9yIGNyZWF0ZSBzZXNzaW9uICovCi0gIHNlc3Npb24gPSBmaW5kX3Nlc3Npb25fYnlfaWQgKHJ0cGJpbiwgc2Vzc2lkKTsKLSAgaWYgKCFzZXNzaW9uKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAiY3JlYXRpbmcgc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgLyogY3JlYXRlIHNlc3Npb24gbm93ICovCi0gICAgc2Vzc2lvbiA9IGNyZWF0ZV9zZXNzaW9uIChydHBiaW4sIHNlc3NpZCk7Ci0gICAgaWYgKHNlc3Npb24gPT0gTlVMTCkKLSAgICAgIGdvdG8gY3JlYXRlX2Vycm9yOwotICB9Ci0KLSAgLyogY2hlY2sgaWYgcGFkIHdhcyByZXF1ZXN0ZWQgKi8KLSAgaWYgKHNlc3Npb24tPnJlY3ZfcnRwX3NpbmtfZ2hvc3QgIT0gTlVMTCkKLSAgICByZXR1cm4gc2Vzc2lvbi0+cmVjdl9ydHBfc2lua19naG9zdDsKLQotICAvKiBzZXR1cCB0aGUgc2Vzc2lvbiBzaW5rIHBhZCAqLwotICBpZiAoIWNvbXBsZXRlX3Nlc3Npb25fc2luayAocnRwYmluLCBzZXNzaW9uKSkKLSAgICBnb3RvIHNlc3Npb25fc2lua19mYWlsZWQ7Ci0KLSAgc2Vzc2lvbi0+cmVjdl9ydHBfc3JjID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZXNzaW9uLT5zZXNzaW9uLCAicmVjdl9ydHBfc3JjIik7Ci0gIGlmIChzZXNzaW9uLT5yZWN2X3J0cF9zcmMgPT0gTlVMTCkKLSAgICBnb3RvIHBhZF9mYWlsZWQ7Ci0KLSAgLyogZmluZCBvdXQgaWYgd2UgbmVlZCBBVVggZWxlbWVudHMgb3IgaWYgd2UgY2FuIGdvIGludG8gdGhlIFNTUkMgZGVtdXhlcgotICAgKiBkaXJlY3RseSAqLwotICBhdXggPSBzZXNzaW9uX3JlcXVlc3RfZWxlbWVudCAoc2Vzc2lvbiwgU0lHTkFMX1JFUVVFU1RfQVVYX1JFQ0VJVkVSKTsKLSAgaWYgKGF1eCkgewotICAgIGdjaGFyICpwbmFtZTsKLSAgICBHc3RQYWQgKmF1eHNpbms7Ci0gICAgR3N0UGFkTGlua1JldHVybiByZXQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIEFVWCByZWNlaXZlciIpOwotCi0gICAgcG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzaW5rXyVkIiwgc2Vzc2lkKTsKLSAgICBhdXhzaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGF1eCwgcG5hbWUpOwotICAgIGdfZnJlZSAocG5hbWUpOwotICAgIGlmIChhdXhzaW5rID09IE5VTEwpCi0gICAgICBnb3RvIGF1eF9zaW5rX2ZhaWxlZDsKLQotICAgIHJldCA9IGdzdF9wYWRfbGluayAoc2Vzc2lvbi0+cmVjdl9ydHBfc3JjLCBhdXhzaW5rKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChhdXhzaW5rKTsKLSAgICBpZiAocmV0ICE9IEdTVF9QQURfTElOS19PSykKLSAgICAgIGdvdG8gYXV4X2xpbmtfZmFpbGVkOwotCi0gICAgLyogdGhpcyBjYW4gYmUgTlVMTCB3aGVuIHRoaXMgQVVYIGVsZW1lbnQgaXMgbm90IHRvIGJlIGxpbmtlZCB0bwotICAgICAqIGFuIFNTUkMgZGVtdXhlciAqLwotICAgIHBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyVkIiwgc2Vzc2lkKTsKLSAgICByZWN2X3J0cF9zcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoYXV4LCBwbmFtZSk7Ci0gICAgZ19mcmVlIChwbmFtZSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVjdl9ydHBfc3JjID0gZ3N0X29iamVjdF9yZWYgKHNlc3Npb24tPnJlY3ZfcnRwX3NyYyk7Ci0gIH0KLQotICBpZiAocmVjdl9ydHBfc3JjKSB7Ci0gICAgR3N0UGFkICpzaW5rZHBhZDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImdldHRpbmcgZGVtdXhlciBSVFAgc2luayBwYWQiKTsKLSAgICBzaW5rZHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZXNzaW9uLT5kZW11eCwgInNpbmsiKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIGRlbXV4ZXIgUlRQIHNpbmsgcGFkIik7Ci0gICAgZ3N0X3BhZF9saW5rX2Z1bGwgKHJlY3ZfcnRwX3NyYywgc2lua2RwYWQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChyZWN2X3J0cF9zcmMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtkcGFkKTsKLQotICAgIC8qIGNvbm5lY3QgdG8gdGhlIG5ldy1zc3JjLXBhZCBzaWduYWwgb2YgdGhlIFNTUkMgZGVtdXhlciAqLwotICAgIHNlc3Npb24tPmRlbXV4X25ld3BhZF9zaWcgPSBnX3NpZ25hbF9jb25uZWN0IChzZXNzaW9uLT5kZW11eCwKLSAgICAgICAgIm5ldy1zc3JjLXBhZCIsIChHQ2FsbGJhY2spIG5ld19zc3JjX3BhZF9mb3VuZCwgc2Vzc2lvbik7Ci0gICAgc2Vzc2lvbi0+ZGVtdXhfcGFkcmVtb3ZlZF9zaWcgPSBnX3NpZ25hbF9jb25uZWN0IChzZXNzaW9uLT5kZW11eCwKLSAgICAgICAgInJlbW92ZWQtc3NyYy1wYWQiLCAoR0NhbGxiYWNrKSBzc3JjX2RlbXV4X3BhZF9yZW1vdmVkLCBzZXNzaW9uKTsKLSAgfQotICByZXR1cm4gc2Vzc2lvbi0+cmVjdl9ydHBfc2lua19naG9zdDsKLQotICAvKiBFUlJPUlMgKi8KLW5vX25hbWU6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGludmFsaWQgbmFtZSBnaXZlbiIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1jcmVhdGVfZXJyb3I6Ci0gIHsKLSAgICAvKiBjcmVhdGVfc2Vzc2lvbiBhbHJlYWR5IHdhcm5lZCAqLwotICAgIHJldHVybiBOVUxMOwotICB9Ci1zZXNzaW9uX3NpbmtfZmFpbGVkOgotICB7Ci0gICAgLyogd2FybmluZyBhbHJlYWR5IGRvbmUgKi8KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotcGFkX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBzZXNzaW9uIHJlY3ZfcnRwX3NyYyBwYWQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotYXV4X3NpbmtfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gZ2V0IEFVWCBzaW5rIHBhZCBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWF1eF9saW5rX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGxpbmsgQVVYIHBhZCB0byBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX3JlY3ZfcnRwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKQotewotICBpZiAoc2Vzc2lvbi0+ZGVtdXhfbmV3cGFkX3NpZykgewotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoc2Vzc2lvbi0+ZGVtdXgsIHNlc3Npb24tPmRlbXV4X25ld3BhZF9zaWcpOwotICAgIHNlc3Npb24tPmRlbXV4X25ld3BhZF9zaWcgPSAwOwotICB9Ci0gIGlmIChzZXNzaW9uLT5kZW11eF9wYWRyZW1vdmVkX3NpZykgewotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoc2Vzc2lvbi0+ZGVtdXgsIHNlc3Npb24tPmRlbXV4X3BhZHJlbW92ZWRfc2lnKTsKLSAgICBzZXNzaW9uLT5kZW11eF9wYWRyZW1vdmVkX3NpZyA9IDA7Ci0gIH0KLSAgaWYgKHNlc3Npb24tPnJlY3ZfcnRwX3NyYykgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlc3Npb24tPnJlY3ZfcnRwX3NyYyk7Ci0gICAgc2Vzc2lvbi0+cmVjdl9ydHBfc3JjID0gTlVMTDsKLSAgfQotICBpZiAoc2Vzc2lvbi0+cmVjdl9ydHBfc2luaykgewotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNlc3Npb24tPnNlc3Npb24sIHNlc3Npb24tPnJlY3ZfcnRwX3NpbmspOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlc3Npb24tPnJlY3ZfcnRwX3NpbmspOwotICAgIHNlc3Npb24tPnJlY3ZfcnRwX3NpbmsgPSBOVUxMOwotICB9Ci0gIGlmIChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rX2dob3N0KSB7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rX2dob3N0LCBGQUxTRSk7Ci0gICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYmluKSwKLSAgICAgICAgc2Vzc2lvbi0+cmVjdl9ydHBfc2lua19naG9zdCk7Ci0gICAgc2Vzc2lvbi0+cmVjdl9ydHBfc2lua19naG9zdCA9IE5VTEw7Ci0gIH0KLX0KLQotLyogQ3JlYXRlIGEgcGFkIGZvciByZWNlaXZpbmcgUlRDUCBmb3IgdGhlIHNlc3Npb24gaW4gQG5hbWUuIE11c3QgYmUgY2FsbGVkIHdpdGgKLSAqIFJUUF9CSU5fTE9DSy4KLSAqLwotc3RhdGljIEdzdFBhZCAqCi1jcmVhdGVfcmVjdl9ydGNwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBndWludCBzZXNzaWQ7Ci0gIEdzdEVsZW1lbnQgKmRlY29kZXI7Ci0gIEdzdFJ0cEJpblNlc3Npb24gKnNlc3Npb247Ci0gIEdzdFBhZCAqc2lua2RwYWQsICpkZWNzaW5rOwotCi0gIC8qIGZpcnN0IGdldCB0aGUgc2Vzc2lvbiBudW1iZXIgKi8KLSAgaWYgKG5hbWUgPT0gTlVMTCB8fCBzc2NhbmYgKG5hbWUsICJyZWN2X3J0Y3Bfc2lua18ldSIsICZzZXNzaWQpICE9IDEpCi0gICAgZ290byBub19uYW1lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImZpbmRpbmcgc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0KLSAgLyogZ2V0IG9yIGNyZWF0ZSB0aGUgc2Vzc2lvbiAqLwotICBzZXNzaW9uID0gZmluZF9zZXNzaW9uX2J5X2lkIChydHBiaW4sIHNlc3NpZCk7Ci0gIGlmICghc2Vzc2lvbikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImNyZWF0aW5nIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIC8qIGNyZWF0ZSBzZXNzaW9uIG5vdyAqLwotICAgIHNlc3Npb24gPSBjcmVhdGVfc2Vzc2lvbiAocnRwYmluLCBzZXNzaWQpOwotICAgIGlmIChzZXNzaW9uID09IE5VTEwpCi0gICAgICBnb3RvIGNyZWF0ZV9lcnJvcjsKLSAgfQotCi0gIC8qIGNoZWNrIGlmIHBhZCB3YXMgcmVxdWVzdGVkICovCi0gIGlmIChzZXNzaW9uLT5yZWN2X3J0Y3Bfc2lua19naG9zdCAhPSBOVUxMKQotICAgIHJldHVybiBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2lua19naG9zdDsKLQotICAvKiBnZXQgcmVjdl9ydHAgcGFkIGFuZCBzdG9yZSAqLwotICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJnZXR0aW5nIFJUQ1Agc2luayBwYWQiKTsKLSAgc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmsgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChzZXNzaW9uLT5zZXNzaW9uLCAicmVjdl9ydGNwX3NpbmsiKTsKLSAgaWYgKHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rID09IE5VTEwpCi0gICAgZ290byBwYWRfZmFpbGVkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImdldHRpbmcgUlRDUCBkZWNvZGVyIik7Ci0gIGRlY29kZXIgPSBzZXNzaW9uX3JlcXVlc3RfZWxlbWVudCAoc2Vzc2lvbiwgU0lHTkFMX1JFUVVFU1RfUlRDUF9ERUNPREVSKTsKLSAgaWYgKGRlY29kZXIpIHsKLSAgICBHc3RQYWQgKmRlY3NyYzsKLSAgICBHc3RQYWRMaW5rUmV0dXJuIHJldDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgImxpbmtpbmcgUlRDUCBkZWNvZGVyIik7Ci0gICAgZGVjc2luayA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZWNvZGVyLCAicnRjcF9zaW5rIik7Ci0gICAgZGVjc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlY29kZXIsICJydGNwX3NyYyIpOwotCi0gICAgaWYgKGRlY3NpbmsgPT0gTlVMTCkKLSAgICAgIGdvdG8gZGVjX3NpbmtfZmFpbGVkOwotCi0gICAgaWYgKGRlY3NyYyA9PSBOVUxMKQotICAgICAgZ290byBkZWNfc3JjX2ZhaWxlZDsKLQotICAgIHJldCA9IGdzdF9wYWRfbGluayAoZGVjc3JjLCBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVjc3JjKTsKLQotICAgIGlmIChyZXQgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgICAgZ290byBkZWNfbGlua19mYWlsZWQ7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAibm8gUlRDUCBkZWNvZGVyIGdpdmVuIik7Ci0gICAgZGVjc2luayA9IGdzdF9vYmplY3RfcmVmIChzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayk7Ci0gIH0KLQotICAvKiBnZXQgc3JjcGFkLCBsaW5rIHRvIFNTUkNEZW11eCAqLwotICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJnZXR0aW5nIHN5bmMgc3JjIHBhZCIpOwotICBzZXNzaW9uLT5zeW5jX3NyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZXNzaW9uLT5zZXNzaW9uLCAic3luY19zcmMiKTsKLSAgaWYgKHNlc3Npb24tPnN5bmNfc3JjID09IE5VTEwpCi0gICAgZ290byBzcmNfcGFkX2ZhaWxlZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJnZXR0aW5nIGRlbXV4ZXIgUlRDUCBzaW5rIHBhZCIpOwotICBzaW5rZHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZXNzaW9uLT5kZW11eCwgInJ0Y3Bfc2luayIpOwotICBnc3RfcGFkX2xpbmtfZnVsbCAoc2Vzc2lvbi0+c3luY19zcmMsIHNpbmtkcGFkLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtkcGFkKTsKLQotICBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2lua19naG9zdCA9Ci0gICAgICBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChuYW1lLCBkZWNzaW5rLCB0ZW1wbCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRlY3NpbmspOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rX2dob3N0LCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYmluKSwKLSAgICAgIHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rX2dob3N0KTsKLQotICByZXR1cm4gc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmtfZ2hvc3Q7Ci0KLSAgLyogRVJST1JTICovCi1ub19uYW1lOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBpbnZhbGlkIG5hbWUgZ2l2ZW4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotY3JlYXRlX2Vycm9yOgotICB7Ci0gICAgLyogY3JlYXRlX3Nlc3Npb24gYWxyZWFkeSB3YXJuZWQgKi8KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotcGFkX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBzZXNzaW9uIHJ0Y3Bfc2luayBwYWQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotZGVjX3NpbmtfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gZ2V0IGRlY29kZXIgc2luayBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1kZWNfc3JjX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBkZWNvZGVyIHNyYyBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRlY3NpbmspOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1kZWNfbGlua19mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBsaW5rIHJ0Y3AgZGVjb2RlciBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVjc2luayk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXNyY19wYWRfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gZ2V0IHNlc3Npb24gc3luY19zcmMgcGFkIik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZGVjc2luayk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9yZWN2X3J0Y3AgKEdzdFJ0cEJpbiAqIHJ0cGJpbiwgR3N0UnRwQmluU2Vzc2lvbiAqIHNlc3Npb24pCi17Ci0gIGlmIChzZXNzaW9uLT5yZWN2X3J0Y3Bfc2lua19naG9zdCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmtfZ2hvc3QsIEZBTFNFKTsKLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBiaW4pLAotICAgICAgICBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2lua19naG9zdCk7Ci0gICAgc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmtfZ2hvc3QgPSBOVUxMOwotICB9Ci0gIGlmIChzZXNzaW9uLT5zeW5jX3NyYykgewotICAgIC8qIHJlbGVhc2luZyB0aGUgcmVxdWVzdCBwYWQgc2hvdWxkIGFsc28gdW5yZWYgdGhlIHN5bmMgcGFkICovCi0gICAgZ3N0X29iamVjdF91bnJlZiAoc2Vzc2lvbi0+c3luY19zcmMpOwotICAgIHNlc3Npb24tPnN5bmNfc3JjID0gTlVMTDsKLSAgfQotICBpZiAoc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmspIHsKLSAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChzZXNzaW9uLT5zZXNzaW9uLCBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmspOwotICAgIHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rID0gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNvbXBsZXRlX3Nlc3Npb25fc3JjIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKQotewotICBnY2hhciAqZ25hbWU7Ci0gIGd1aW50IHNlc3NpZCA9IHNlc3Npb24tPmlkOwotICBHc3RQYWQgKnNlbmRfcnRwX3NyYzsKLSAgR3N0RWxlbWVudCAqZW5jb2RlcjsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotCi0gIC8qIGdldCBzcmNwYWQgKi8KLSAgc2Vzc2lvbi0+c2VuZF9ydHBfc3JjID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZXNzaW9uLT5zZXNzaW9uLCAic2VuZF9ydHBfc3JjIik7Ci0gIGlmIChzZXNzaW9uLT5zZW5kX3J0cF9zcmMgPT0gTlVMTCkKLSAgICBnb3RvIG5vX3NyY3BhZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJnZXR0aW5nIFJUUCBlbmNvZGVyIik7Ci0gIGVuY29kZXIgPSBzZXNzaW9uX3JlcXVlc3RfZWxlbWVudCAoc2Vzc2lvbiwgU0lHTkFMX1JFUVVFU1RfUlRQX0VOQ09ERVIpOwotICBpZiAoZW5jb2RlcikgewotICAgIGdjaGFyICplbmFtZTsKLSAgICBHc3RQYWQgKmVuY3NyYywgKmVuY3Npbms7Ci0gICAgR3N0UGFkTGlua1JldHVybiByZXQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIFJUUCBlbmNvZGVyIik7Ci0gICAgZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJydHBfc3JjXyVkIiwgc2Vzc2lkKTsKLSAgICBlbmNzcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZW5jb2RlciwgZW5hbWUpOwotICAgIGdfZnJlZSAoZW5hbWUpOwotCi0gICAgaWYgKGVuY3NyYyA9PSBOVUxMKQotICAgICAgZ290byBlbmNfc3JjX2ZhaWxlZDsKLQotICAgIHNlbmRfcnRwX3NyYyA9IGVuY3NyYzsKLQotICAgIGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgicnRwX3NpbmtfJWQiLCBzZXNzaWQpOwotICAgIGVuY3NpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZW5jb2RlciwgZW5hbWUpOwotICAgIGdfZnJlZSAoZW5hbWUpOwotICAgIGlmIChlbmNzaW5rID09IE5VTEwpCi0gICAgICBnb3RvIGVuY19zaW5rX2ZhaWxlZDsKLQotICAgIHJldCA9IGdzdF9wYWRfbGluayAoc2Vzc2lvbi0+c2VuZF9ydHBfc3JjLCBlbmNzaW5rKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChlbmNzaW5rKTsKLQotICAgIGlmIChyZXQgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgICAgZ290byBlbmNfbGlua19mYWlsZWQ7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAibm8gUlRQIGVuY29kZXIgZ2l2ZW4iKTsKLSAgICBzZW5kX3J0cF9zcmMgPSBnc3Rfb2JqZWN0X3JlZiAoc2Vzc2lvbi0+c2VuZF9ydHBfc3JjKTsKLSAgfQotCi0gIC8qIGdob3N0IHRoZSBuZXcgc291cmNlIHBhZCAqLwotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAocnRwYmluKTsKLSAgZ25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzZW5kX3J0cF9zcmNfJXUiLCBzZXNzaWQpOwotICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic2VuZF9ydHBfc3JjXyV1Iik7Ci0gIHNlc3Npb24tPnNlbmRfcnRwX3NyY19naG9zdCA9Ci0gICAgICBnc3RfZ2hvc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChnbmFtZSwgc2VuZF9ydHBfc3JjLCB0ZW1wbCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNlbmRfcnRwX3NyYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+c2VuZF9ydHBfc3JjX2dob3N0LCBUUlVFKTsKLSAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHNlbmRfcnRwX3NyYywgY29weV9zdGlja3lfZXZlbnRzLAotICAgICAgc2Vzc2lvbi0+c2VuZF9ydHBfc3JjX2dob3N0KTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYmluKSwgc2Vzc2lvbi0+c2VuZF9ydHBfc3JjX2dob3N0KTsKLSAgZ19mcmVlIChnbmFtZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19zcmNwYWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBnZXQgcnRwIHNvdXJjZSBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZW5jX3NyY19mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBnZXQgZW5jb2RlciBzcmMgcGFkIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWVuY19zaW5rX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBlbmNvZGVyIHNpbmsgcGFkIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzZW5kX3J0cF9zcmMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZW5jX2xpbmtfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gbGluayBydHAgZW5jb2RlciBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2VuZF9ydHBfc3JjKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1zZXR1cF9hdXhfc2VuZGVyX2ZvbGQgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWQgKnBhZDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIGd1aW50IHNlc3NpZDsKLSAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbiA9IHVzZXJfZGF0YSwgKm5ld3Nlc3M7Ci0gIEdzdFJ0cEJpbiAqcnRwYmluID0gc2Vzc2lvbi0+YmluOwotICBHc3RQYWRMaW5rUmV0dXJuIHJldDsKLQotICBwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGl0ZW0pOwotICBuYW1lID0gZ3N0X3BhZF9nZXRfbmFtZSAocGFkKTsKLQotICBpZiAobmFtZSA9PSBOVUxMIHx8IHNzY2FuZiAobmFtZSwgInNyY18ldSIsICZzZXNzaWQpICE9IDEpCi0gICAgZ290byBub19uYW1lOwotCi0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgbmV3c2VzcyA9IGZpbmRfc2Vzc2lvbl9ieV9pZCAocnRwYmluLCBzZXNzaWQpOwotICBpZiAobmV3c2VzcyA9PSBOVUxMKSB7Ci0gICAgLyogY3JlYXRlIG5ldyBzZXNzaW9uICovCi0gICAgbmV3c2VzcyA9IGNyZWF0ZV9zZXNzaW9uIChydHBiaW4sIHNlc3NpZCk7Ci0gICAgaWYgKG5ld3Nlc3MgPT0gTlVMTCkKLSAgICAgIGdvdG8gY3JlYXRlX2Vycm9yOwotICB9IGVsc2UgaWYgKG5ld3Nlc3MtPnNlbmRfcnRwX3NpbmsgIT0gTlVMTCkKLSAgICBnb3RvIGV4aXN0aW5nX3Nlc3Npb247Ci0KLSAgLyogZ2V0IHNlbmRfcnRwIHBhZCBhbmQgc3RvcmUgKi8KLSAgbmV3c2Vzcy0+c2VuZF9ydHBfc2luayA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKG5ld3Nlc3MtPnNlc3Npb24sICJzZW5kX3J0cF9zaW5rIik7Ci0gIGlmIChuZXdzZXNzLT5zZW5kX3J0cF9zaW5rID09IE5VTEwpCi0gICAgZ290byBwYWRfZmFpbGVkOwotCi0gIHJldCA9IGdzdF9wYWRfbGluayAocGFkLCBuZXdzZXNzLT5zZW5kX3J0cF9zaW5rKTsKLSAgaWYgKHJldCAhPSBHU1RfUEFEX0xJTktfT0spCi0gICAgZ290byBhdXhfbGlua19mYWlsZWQ7Ci0KLSAgaWYgKCFjb21wbGV0ZV9zZXNzaW9uX3NyYyAocnRwYmluLCBuZXdzZXNzKSkKLSAgICBnb3RvIHNlc3Npb25fc3JjX2ZhaWxlZDsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX25hbWU6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoImlnbm9yaW5nIGludmFsaWQgcGFkIG5hbWUgJXMiLCBHU1RfU1RSX05VTEwgKG5hbWUpKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci1jcmVhdGVfZXJyb3I6Ci0gIHsKLSAgICAvKiBjcmVhdGVfc2Vzc2lvbiBhbHJlYWR5IHdhcm5lZCAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZXhpc3Rpbmdfc2Vzc2lvbjoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogc2Vzc2lvbiAlZCBpcyBhbHJlYWR5IGEgc2VuZGVyIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXBhZF9mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBnZXQgc2Vzc2lvbiBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotYXV4X2xpbmtfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gbGluayBBVVggZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc2Vzc2lvbl9zcmNfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gY29tcGxldGUgQVVYIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1zZXR1cF9hdXhfc2VuZGVyIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uLAotICAgIEdzdEVsZW1lbnQgKiBhdXgpCi17Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgR1ZhbHVlIHJlc3VsdCA9IHsgMCwgfTsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzOwotCi0gIGl0ID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyAoYXV4KTsKLSAgcmVzID0gZ3N0X2l0ZXJhdG9yX2ZvbGQgKGl0LCBzZXR1cF9hdXhfc2VuZGVyX2ZvbGQsICZyZXN1bHQsIHNlc3Npb24pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIHJldHVybiByZXMgPT0gR1NUX0lURVJBVE9SX0RPTkU7Ci19Ci0KLS8qIENyZWF0ZSBhIHBhZCBmb3Igc2VuZGluZyBSVFAgZm9yIHRoZSBzZXNzaW9uIGluIEBuYW1lLiBNdXN0IGJlIGNhbGxlZCB3aXRoCi0gKiBSVFBfQklOX0xPQ0suCi0gKi8KLXN0YXRpYyBHc3RQYWQgKgotY3JlYXRlX3NlbmRfcnRwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ2NoYXIgKnBuYW1lOwotICBndWludCBzZXNzaWQ7Ci0gIEdzdFBhZCAqc2VuZF9ydHBfc2luazsKLSAgR3N0RWxlbWVudCAqYXV4OwotICBHc3RSdHBCaW5TZXNzaW9uICpzZXNzaW9uOwotCi0gIC8qIGZpcnN0IGdldCB0aGUgc2Vzc2lvbiBudW1iZXIgKi8KLSAgaWYgKG5hbWUgPT0gTlVMTCB8fCBzc2NhbmYgKG5hbWUsICJzZW5kX3J0cF9zaW5rXyV1IiwgJnNlc3NpZCkgIT0gMSkKLSAgICBnb3RvIG5vX25hbWU7Ci0KLSAgLyogZ2V0IG9yIGNyZWF0ZSBzZXNzaW9uICovCi0gIHNlc3Npb24gPSBmaW5kX3Nlc3Npb25fYnlfaWQgKHJ0cGJpbiwgc2Vzc2lkKTsKLSAgaWYgKCFzZXNzaW9uKSB7Ci0gICAgLyogY3JlYXRlIHNlc3Npb24gbm93ICovCi0gICAgc2Vzc2lvbiA9IGNyZWF0ZV9zZXNzaW9uIChydHBiaW4sIHNlc3NpZCk7Ci0gICAgaWYgKHNlc3Npb24gPT0gTlVMTCkKLSAgICAgIGdvdG8gY3JlYXRlX2Vycm9yOwotICB9Ci0KLSAgLyogY2hlY2sgaWYgcGFkIHdhcyByZXF1ZXN0ZWQgKi8KLSAgaWYgKHNlc3Npb24tPnNlbmRfcnRwX3NpbmtfZ2hvc3QgIT0gTlVMTCkKLSAgICByZXR1cm4gc2Vzc2lvbi0+c2VuZF9ydHBfc2lua19naG9zdDsKLQotICAvKiBjaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSB1c2luZyB0aGlzIHNlc3Npb24gYXMgYSBzZW5kZXIgKi8KLSAgaWYgKHNlc3Npb24tPnNlbmRfcnRwX3NpbmsgIT0gTlVMTCkKLSAgICBnb3RvIGV4aXN0aW5nX3Nlc3Npb247Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAiZ2V0dGluZyBSVFAgQVVYIHNlbmRlciIpOwotICBhdXggPSBzZXNzaW9uX3JlcXVlc3RfZWxlbWVudCAoc2Vzc2lvbiwgU0lHTkFMX1JFUVVFU1RfQVVYX1NFTkRFUik7Ci0gIGlmIChhdXgpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIEFVWCBzZW5kZXIiKTsKLSAgICBpZiAoIXNldHVwX2F1eF9zZW5kZXIgKHJ0cGJpbiwgc2Vzc2lvbiwgYXV4KSkKLSAgICAgIGdvdG8gYXV4X3Nlc3Npb25fZmFpbGVkOwotCi0gICAgcG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzaW5rXyVkIiwgc2Vzc2lkKTsKLSAgICBzZW5kX3J0cF9zaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGF1eCwgcG5hbWUpOwotICAgIGdfZnJlZSAocG5hbWUpOwotCi0gICAgaWYgKHNlbmRfcnRwX3NpbmsgPT0gTlVMTCkKLSAgICAgIGdvdG8gYXV4X3NpbmtfZmFpbGVkOwotICB9IGVsc2UgewotICAgIC8qIGdldCBzZW5kX3J0cCBwYWQgYW5kIHN0b3JlICovCi0gICAgc2Vzc2lvbi0+c2VuZF9ydHBfc2luayA9Ci0gICAgICAgIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc2Vzc2lvbi0+c2Vzc2lvbiwgInNlbmRfcnRwX3NpbmsiKTsKLSAgICBpZiAoc2Vzc2lvbi0+c2VuZF9ydHBfc2luayA9PSBOVUxMKQotICAgICAgZ290byBwYWRfZmFpbGVkOwotCi0gICAgaWYgKCFjb21wbGV0ZV9zZXNzaW9uX3NyYyAocnRwYmluLCBzZXNzaW9uKSkKLSAgICAgIGdvdG8gc2Vzc2lvbl9zcmNfZmFpbGVkOwotCi0gICAgc2VuZF9ydHBfc2luayA9IGdzdF9vYmplY3RfcmVmIChzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKTsKLSAgfQotCi0gIHNlc3Npb24tPnNlbmRfcnRwX3NpbmtfZ2hvc3QgPQotICAgICAgZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAobmFtZSwgc2VuZF9ydHBfc2luaywgdGVtcGwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzZW5kX3J0cF9zaW5rKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzZXNzaW9uLT5zZW5kX3J0cF9zaW5rX2dob3N0LCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwYmluKSwgc2Vzc2lvbi0+c2VuZF9ydHBfc2lua19naG9zdCk7Ci0KLSAgcmV0dXJuIHNlc3Npb24tPnNlbmRfcnRwX3NpbmtfZ2hvc3Q7Ci0KLSAgLyogRVJST1JTICovCi1ub19uYW1lOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBpbnZhbGlkIG5hbWUgZ2l2ZW4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotY3JlYXRlX2Vycm9yOgotICB7Ci0gICAgLyogY3JlYXRlX3Nlc3Npb24gYWxyZWFkeSB3YXJuZWQgKi8KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotZXhpc3Rpbmdfc2Vzc2lvbjoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogc2Vzc2lvbiAlZCBpcyBhbHJlYWR5IGluIHVzZSIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWF1eF9zZXNzaW9uX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBBVVggc2luayBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1hdXhfc2lua19mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBnZXQgQVVYIHNpbmsgcGFkIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotcGFkX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBzZXNzaW9uIHBhZCBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXNlc3Npb25fc3JjX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIHNldHVwIHNvdXJjZSBwYWRzIGZvciBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX3NlbmRfcnRwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKQotewotICBpZiAoc2Vzc2lvbi0+c2VuZF9ydHBfc3JjX2dob3N0KSB7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzZXNzaW9uLT5zZW5kX3J0cF9zcmNfZ2hvc3QsIEZBTFNFKTsKLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBiaW4pLAotICAgICAgICBzZXNzaW9uLT5zZW5kX3J0cF9zcmNfZ2hvc3QpOwotICAgIHNlc3Npb24tPnNlbmRfcnRwX3NyY19naG9zdCA9IE5VTEw7Ci0gIH0KLSAgaWYgKHNlc3Npb24tPnNlbmRfcnRwX3NyYykgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlc3Npb24tPnNlbmRfcnRwX3NyYyk7Ci0gICAgc2Vzc2lvbi0+c2VuZF9ydHBfc3JjID0gTlVMTDsKLSAgfQotICBpZiAoc2Vzc2lvbi0+c2VuZF9ydHBfc2luaykgewotICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHNlc3Npb24tPnNlc3Npb24pLAotICAgICAgICBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKTsKLSAgICBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rID0gTlVMTDsKLSAgfQotICBpZiAoc2Vzc2lvbi0+c2VuZF9ydHBfc2lua19naG9zdCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+c2VuZF9ydHBfc2lua19naG9zdCwgRkFMU0UpOwotICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGJpbiksCi0gICAgICAgIHNlc3Npb24tPnNlbmRfcnRwX3NpbmtfZ2hvc3QpOwotICAgIHNlc3Npb24tPnNlbmRfcnRwX3NpbmtfZ2hvc3QgPSBOVUxMOwotICB9Ci19Ci0KLS8qIENyZWF0ZSBhIHBhZCBmb3Igc2VuZGluZyBSVENQIGZvciB0aGUgc2Vzc2lvbiBpbiBAbmFtZS4gTXVzdCBiZSBjYWxsZWQgd2l0aAotICogUlRQX0JJTl9MT0NLLgotICovCi1zdGF0aWMgR3N0UGFkICoKLWNyZWF0ZV9ydGNwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ3VpbnQgc2Vzc2lkOwotICBHc3RQYWQgKmVuY3NyYzsKLSAgR3N0RWxlbWVudCAqZW5jb2RlcjsKLSAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbjsKLQotICAvKiBmaXJzdCBnZXQgdGhlIHNlc3Npb24gbnVtYmVyICovCi0gIGlmIChuYW1lID09IE5VTEwgfHwgc3NjYW5mIChuYW1lLCAic2VuZF9ydGNwX3NyY18ldSIsICZzZXNzaWQpICE9IDEpCi0gICAgZ290byBub19uYW1lOwotCi0gIC8qIGdldCBvciBjcmVhdGUgc2Vzc2lvbiAqLwotICBzZXNzaW9uID0gZmluZF9zZXNzaW9uX2J5X2lkIChydHBiaW4sIHNlc3NpZCk7Ci0gIGlmICghc2Vzc2lvbikKLSAgICBnb3RvIG5vX3Nlc3Npb247Ci0KLSAgLyogY2hlY2sgaWYgcGFkIHdhcyByZXF1ZXN0ZWQgKi8KLSAgaWYgKHNlc3Npb24tPnNlbmRfcnRjcF9zcmNfZ2hvc3QgIT0gTlVMTCkKLSAgICByZXR1cm4gc2Vzc2lvbi0+c2VuZF9ydGNwX3NyY19naG9zdDsKLQotICAvKiBnZXQgcnRjcF9zcmMgcGFkIGFuZCBzdG9yZSAqLwotICBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjID0KLSAgICAgIGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc2Vzc2lvbi0+c2Vzc2lvbiwgInNlbmRfcnRjcF9zcmMiKTsKLSAgaWYgKHNlc3Npb24tPnNlbmRfcnRjcF9zcmMgPT0gTlVMTCkKLSAgICBnb3RvIHBhZF9mYWlsZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAiZ2V0dGluZyBSVENQIGVuY29kZXIiKTsKLSAgZW5jb2RlciA9IHNlc3Npb25fcmVxdWVzdF9lbGVtZW50IChzZXNzaW9uLCBTSUdOQUxfUkVRVUVTVF9SVENQX0VOQ09ERVIpOwotICBpZiAoZW5jb2RlcikgewotICAgIGdjaGFyICplbmFtZTsKLSAgICBHc3RQYWQgKmVuY3Npbms7Ci0gICAgR3N0UGFkTGlua1JldHVybiByZXQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBiaW4sICJsaW5raW5nIFJUQ1AgZW5jb2RlciIpOwotCi0gICAgZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJydGNwX3NyY18lZCIsIHNlc3NpZCk7Ci0gICAgZW5jc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVuY29kZXIsIGVuYW1lKTsKLSAgICBnX2ZyZWUgKGVuYW1lKTsKLSAgICBpZiAoZW5jc3JjID09IE5VTEwpCi0gICAgICBnb3RvIGVuY19zcmNfZmFpbGVkOwotCi0gICAgZW5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJydGNwX3NpbmtfJWQiLCBzZXNzaWQpOwotICAgIGVuY3NpbmsgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZW5jb2RlciwgZW5hbWUpOwotICAgIGdfZnJlZSAoZW5hbWUpOwotICAgIGlmIChlbmNzaW5rID09IE5VTEwpCi0gICAgICBnb3RvIGVuY19zaW5rX2ZhaWxlZDsKLQotICAgIHJldCA9IGdzdF9wYWRfbGluayAoc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYywgZW5jc2luayk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZW5jc2luayk7Ci0KLSAgICBpZiAocmV0ICE9IEdTVF9QQURfTElOS19PSykKLSAgICAgIGdvdG8gZW5jX2xpbmtfZmFpbGVkOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgIm5vIFJUQ1AgZW5jb2RlciBnaXZlbiIpOwotICAgIGVuY3NyYyA9IGdzdF9vYmplY3RfcmVmIChzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjKTsKLSAgfQotCi0gIHNlc3Npb24tPnNlbmRfcnRjcF9zcmNfZ2hvc3QgPQotICAgICAgZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAobmFtZSwgZW5jc3JjLCB0ZW1wbCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVuY3NyYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+c2VuZF9ydGNwX3NyY19naG9zdCwgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGJpbiksIHNlc3Npb24tPnNlbmRfcnRjcF9zcmNfZ2hvc3QpOwotCi0gIHJldHVybiBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjX2dob3N0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbmFtZToKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogaW52YWxpZCBuYW1lIGdpdmVuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX3Nlc3Npb246Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IHNlc3Npb24gd2l0aCBpZCAlZCBkb2VzIG5vdCBleGlzdCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLXBhZF9mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBnZXQgcnRjcCBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1lbmNfc3JjX2ZhaWxlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGJpbjogZmFpbGVkIHRvIGdldCBlbmNvZGVyIHNyYyBwYWQgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1lbmNfc2lua19mYWlsZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IGZhaWxlZCB0byBnZXQgZW5jb2RlciBzaW5rIHBhZCBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoZW5jc3JjKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotZW5jX2xpbmtfZmFpbGVkOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiBmYWlsZWQgdG8gbGluayBydGNwIGVuY29kZXIgZm9yIHNlc3Npb24gJWQiLCBzZXNzaWQpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGVuY3NyYyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9ydGNwIChHc3RSdHBCaW4gKiBydHBiaW4sIEdzdFJ0cEJpblNlc3Npb24gKiBzZXNzaW9uKQotewotICBpZiAoc2Vzc2lvbi0+c2VuZF9ydGNwX3NyY19naG9zdCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+c2VuZF9ydGNwX3NyY19naG9zdCwgRkFMU0UpOwotICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGJpbiksCi0gICAgICAgIHNlc3Npb24tPnNlbmRfcnRjcF9zcmNfZ2hvc3QpOwotICAgIHNlc3Npb24tPnNlbmRfcnRjcF9zcmNfZ2hvc3QgPSBOVUxMOwotICB9Ci0gIGlmIChzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjKSB7Ci0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoc2Vzc2lvbi0+c2Vzc2lvbiwgc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYyk7Ci0gICAgc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYyA9IE5VTEw7Ci0gIH0KLX0KLQotLyogSWYgdGhlIHJlcXVlc3RlZCBuYW1lIGlzIE5VTEwgd2Ugc2hvdWxkIGNyZWF0ZSBhIG5hbWUgd2l0aAotICogdGhlIHNlc3Npb24gbnVtYmVyIGFzc3VtaW5nIHdlIHdhbnQgdGhlIGxvd2VzdCBwb3NpYmxlIHNlc3Npb24KLSAqIHdpdGggYSBmcmVlIHBhZCBsaWtlIHRoZSB0ZW1wbGF0ZSAqLwotc3RhdGljIGdjaGFyICoKLWdzdF9ydHBfYmluX2dldF9mcmVlX3BhZF9uYW1lIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCkKLXsKLSAgZ2Jvb2xlYW4gbmFtZV9mb3VuZCA9IEZBTFNFOwotICBnaW50IHNlc3Npb24gPSAwOwotICBHc3RJdGVyYXRvciAqcGFkX2l0ID0gTlVMTDsKLSAgZ2NoYXIgKnBhZF9uYW1lID0gTlVMTDsKLSAgR1ZhbHVlIGRhdGEgPSB7IDAsIH07Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgImZpbmQgYSBmcmVlIHBhZCBuYW1lIGZvciB0ZW1wbGF0ZSIpOwotICB3aGlsZSAoIW5hbWVfZm91bmQpIHsKLSAgICBnYm9vbGVhbiBkb25lID0gRkFMU0U7Ci0KLSAgICBnX2ZyZWUgKHBhZF9uYW1lKTsKLSAgICBwYWRfbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAodGVtcGwtPm5hbWVfdGVtcGxhdGUsIHNlc3Npb24rKyk7Ci0gICAgcGFkX2l0ID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9wYWRzIChHU1RfRUxFTUVOVCAoZWxlbWVudCkpOwotICAgIG5hbWVfZm91bmQgPSBUUlVFOwotICAgIHdoaWxlICghZG9uZSkgewotICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAocGFkX2l0LCAmZGF0YSkpIHsKLSAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICAgIHsKLSAgICAgICAgICBHc3RQYWQgKnBhZDsKLSAgICAgICAgICBnY2hhciAqbmFtZTsKLQotICAgICAgICAgIHBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoJmRhdGEpOwotICAgICAgICAgIG5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChwYWQpOwotCi0gICAgICAgICAgaWYgKHN0cmNtcCAobmFtZSwgcGFkX25hbWUpID09IDApIHsKLSAgICAgICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICAgICAgbmFtZV9mb3VuZCA9IEZBTFNFOwotICAgICAgICAgIH0KLSAgICAgICAgICBnX2ZyZWUgKG5hbWUpOwotICAgICAgICAgIGdfdmFsdWVfcmVzZXQgKCZkYXRhKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKLSAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAgIC8qIHJlc3RhcnQgaXRlcmF0aW9uICovCi0gICAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgICAgbmFtZV9mb3VuZCA9IEZBTFNFOwotICAgICAgICAgIHNlc3Npb24gPSAwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgotICAgICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBnX3ZhbHVlX3Vuc2V0ICgmZGF0YSk7Ci0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKHBhZF9pdCk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAiZnJlZSBwYWQgbmFtZSBmb3VuZDogJyVzJyIsIHBhZF9uYW1lKTsKLSAgcmV0dXJuIHBhZF9uYW1lOwotfQotCi0vKgotICovCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9ydHBfYmluX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwQmluICpydHBiaW47Ci0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3M7Ci0gIEdzdFBhZCAqcmVzdWx0OwotCi0gIGdjaGFyICpwYWRfbmFtZSA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JUUF9CSU4gKGVsZW1lbnQpLCBOVUxMKTsKLQotICBydHBiaW4gPSBHU1RfUlRQX0JJTiAoZWxlbWVudCk7Ci0gIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICBHU1RfUlRQX0JJTl9MT0NLIChydHBiaW4pOwotCi0gIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICAvKiB1c2UgYSBmcmVlIHBhZCBuYW1lICovCi0gICAgcGFkX25hbWUgPSBnc3RfcnRwX2Jpbl9nZXRfZnJlZV9wYWRfbmFtZSAoZWxlbWVudCwgdGVtcGwpOwotICB9IGVsc2UgewotICAgIC8qIHVzZSB0aGUgcHJvdmlkZWQgbmFtZSAqLwotICAgIHBhZF9uYW1lID0gZ19zdHJkdXAgKG5hbWUpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAiVHJ5aW5nIHRvIHJlcXVlc3QgYSBwYWQgd2l0aCBuYW1lICVzIiwgcGFkX25hbWUpOwotCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIHRlbXBsYXRlICovCi0gIGlmICh0ZW1wbCA9PSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInJlY3ZfcnRwX3NpbmtfJXUiKSkgewotICAgIHJlc3VsdCA9IGNyZWF0ZV9yZWN2X3J0cCAocnRwYmluLCB0ZW1wbCwgcGFkX25hbWUpOwotICB9IGVsc2UgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJyZWN2X3J0Y3Bfc2lua18ldSIpKSB7Ci0gICAgcmVzdWx0ID0gY3JlYXRlX3JlY3ZfcnRjcCAocnRwYmluLCB0ZW1wbCwgcGFkX25hbWUpOwotICB9IGVsc2UgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzZW5kX3J0cF9zaW5rXyV1IikpIHsKLSAgICByZXN1bHQgPSBjcmVhdGVfc2VuZF9ydHAgKHJ0cGJpbiwgdGVtcGwsIHBhZF9uYW1lKTsKLSAgfSBlbHNlIGlmICh0ZW1wbCA9PSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywKLSAgICAgICAgICAic2VuZF9ydGNwX3NyY18ldSIpKSB7Ci0gICAgcmVzdWx0ID0gY3JlYXRlX3J0Y3AgKHJ0cGJpbiwgdGVtcGwsIHBhZF9uYW1lKTsKLSAgfSBlbHNlCi0gICAgZ290byB3cm9uZ190ZW1wbGF0ZTsKLQotICBnX2ZyZWUgKHBhZF9uYW1lKTsKLSAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ190ZW1wbGF0ZToKLSAgewotICAgIGdfZnJlZSAocGFkX25hbWUpOwotICAgIEdTVF9SVFBfQklOX1VOTE9DSyAocnRwYmluKTsKLSAgICBnX3dhcm5pbmcgKCJydHBiaW46IHRoaXMgaXMgbm90IG91ciB0ZW1wbGF0ZSIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2Jpbl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0UnRwQmluU2Vzc2lvbiAqc2Vzc2lvbjsKLSAgR3N0UnRwQmluICpydHBiaW47Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX0dIT1NUX1BBRCAocGFkKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19SVFBfQklOIChlbGVtZW50KSk7Ci0KLSAgcnRwYmluID0gR1NUX1JUUF9CSU4gKGVsZW1lbnQpOwotCi0gIEdTVF9SVFBfQklOX0xPQ0sgKHJ0cGJpbik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGJpbiwgIlRyeWluZyB0byByZWxlYXNlIHBhZCAlczolcyIsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGlmICghKHNlc3Npb24gPSBmaW5kX3Nlc3Npb25fYnlfcGFkIChydHBiaW4sIHBhZCkpKQotICAgIGdvdG8gdW5rbm93bl9wYWQ7Ci0KLSAgaWYgKHNlc3Npb24tPnJlY3ZfcnRwX3NpbmtfZ2hvc3QgPT0gcGFkKSB7Ci0gICAgcmVtb3ZlX3JlY3ZfcnRwIChydHBiaW4sIHNlc3Npb24pOwotICB9IGVsc2UgaWYgKHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rX2dob3N0ID09IHBhZCkgewotICAgIHJlbW92ZV9yZWN2X3J0Y3AgKHJ0cGJpbiwgc2Vzc2lvbik7Ci0gIH0gZWxzZSBpZiAoc2Vzc2lvbi0+c2VuZF9ydHBfc2lua19naG9zdCA9PSBwYWQpIHsKLSAgICByZW1vdmVfc2VuZF9ydHAgKHJ0cGJpbiwgc2Vzc2lvbik7Ci0gIH0gZWxzZSBpZiAoc2Vzc2lvbi0+c2VuZF9ydGNwX3NyY19naG9zdCA9PSBwYWQpIHsKLSAgICByZW1vdmVfcnRjcCAocnRwYmluLCBzZXNzaW9uKTsKLSAgfQotCi0gIC8qIG5vIG1vcmUgcmVxdWVzdCBwYWRzLCBmcmVlIHRoZSBjb21wbGV0ZSBzZXNzaW9uICovCi0gIGlmIChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rX2dob3N0ID09IE5VTEwKLSAgICAgICYmIHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rX2dob3N0ID09IE5VTEwKLSAgICAgICYmIHNlc3Npb24tPnNlbmRfcnRwX3NpbmtfZ2hvc3QgPT0gTlVMTAotICAgICAgJiYgc2Vzc2lvbi0+c2VuZF9ydGNwX3NyY19naG9zdCA9PSBOVUxMKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwYmluLCAibm8gbW9yZSBwYWRzIGZvciBzZXNzaW9uICVwIiwgc2Vzc2lvbik7Ci0gICAgcnRwYmluLT5zZXNzaW9ucyA9IGdfc2xpc3RfcmVtb3ZlIChydHBiaW4tPnNlc3Npb25zLCBzZXNzaW9uKTsKLSAgICBmcmVlX3Nlc3Npb24gKHNlc3Npb24sIHJ0cGJpbik7Ci0gIH0KLSAgR1NUX1JUUF9CSU5fVU5MT0NLIChydHBiaW4pOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUiAqLwotdW5rbm93bl9wYWQ6Ci0gIHsKLSAgICBHU1RfUlRQX0JJTl9VTkxPQ0sgKHJ0cGJpbik7Ci0gICAgZ193YXJuaW5nICgicnRwYmluOiAlczolcyBpcyBub3Qgb25lIG9mIG91ciByZXF1ZXN0IHBhZHMiLAotICAgICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotICAgIHJldHVybjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwYmluLmggYi9nc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIxM2E0Ny4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBiaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfQklOX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfQklOX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAicnRwc2Vzc2lvbi5oIgotI2luY2x1ZGUgImdzdHJ0cHNlc3Npb24uaCIKLSNpbmNsdWRlICJydHBqaXR0ZXJidWZmZXIuaCIKLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfQklOIFwKLSAgKGdzdF9ydHBfYmluX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfQklOKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX0JJTixHc3RSdHBCaW4pKQotI2RlZmluZSBHU1RfUlRQX0JJTl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfQklOLEdzdFJ0cEJpbkNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9CSU4ob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfQklOKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9CSU5fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0JJTikpCi0KLXR5cGVkZWYgZW51bQotewotICBHU1RfUlRQX0JJTl9SVENQX1NZTkNfQUxXQVlTLAotICBHU1RfUlRQX0JJTl9SVENQX1NZTkNfSU5JVElBTCwKLSAgR1NUX1JUUF9CSU5fUlRDUF9TWU5DX1JUUAotfSBHc3RSVENQU3luYzsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cEJpbiBHc3RSdHBCaW47Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQmluQ2xhc3MgR3N0UnRwQmluQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwQmluUHJpdmF0ZSBHc3RSdHBCaW5Qcml2YXRlOwotCi1zdHJ1Y3QgX0dzdFJ0cEJpbiB7Ci0gIEdzdEJpbiAgICAgICAgIGJpbjsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgLyogZGVmYXVsdCBsYXRlbmN5IGZvciBzZXNzaW9ucyAqLwotICBndWludCAgICAgICAgICAgbGF0ZW5jeV9tczsKLSAgZ3VpbnQ2NCAgICAgICAgIGxhdGVuY3lfbnM7Ci0gIGdib29sZWFuICAgICAgICBkcm9wX29uX2xhdGVuY3k7Ci0gIGdib29sZWFuICAgICAgICBkb19sb3N0OwotICBnYm9vbGVhbiAgICAgICAgaWdub3JlX3B0OwotICBnYm9vbGVhbiAgICAgICAgbnRwX3N5bmM7Ci0gIGdpbnQgICAgICAgICAgICBydGNwX3N5bmM7Ci0gIGd1aW50ICAgICAgICAgICBydGNwX3N5bmNfaW50ZXJ2YWw7Ci0gIFJUUEppdHRlckJ1ZmZlck1vZGUgYnVmZmVyX21vZGU7Ci0gIGdib29sZWFuICAgICAgICBidWZmZXJpbmc7Ci0gIGdib29sZWFuICAgICAgICB1c2VfcGlwZWxpbmVfY2xvY2s7Ci0gIEdzdFJ0cE50cFRpbWVTb3VyY2UgbnRwX3RpbWVfc291cmNlOwotICBnYm9vbGVhbiAgICAgICAgc2VuZF9zeW5jX2V2ZW50OwotICBHc3RDbG9ja1RpbWUgICAgYnVmZmVyX3N0YXJ0OwotICBnYm9vbGVhbiAgICAgICAgZG9fcmV0cmFuc21pc3Npb247Ci0gIEdzdFJUUFByb2ZpbGUgICBydHBfcHJvZmlsZTsKLSAgZ2Jvb2xlYW4gICAgICAgIHJ0Y3Bfc3luY19zZW5kX3RpbWU7Ci0gIGdpbnQgICAgICAgICAgICBtYXhfcnRjcF9ydHBfdGltZV9kaWZmOwotICBndWludDMyICAgICAgICAgbWF4X2Ryb3BvdXRfdGltZTsKLSAgZ3VpbnQzMiAgICAgICAgIG1heF9taXNvcmRlcl90aW1lOwotICBnYm9vbGVhbiAgICAgICAgcmZjNzI3M19zeW5jOwotICBndWludCAgICAgICAgICAgbWF4X3N0cmVhbXM7Ci0KLSAgLyogYSBsaXN0IG9mIHNlc3Npb24gKi8KLSAgR1NMaXN0ICAgICAgICAgKnNlc3Npb25zOwotCi0gIC8qIGEgbGlzdCBvZiBjbGllbnRzLCB0aGVzZSBhcmUgc3RyZWFtcyB3aXRoIHRoZSBzYW1lIENOQU1FICovCi0gIEdTTGlzdCAgICAgICAgICpjbGllbnRzOwotCi0gIC8qIHRoZSBkZWZhdWx0IFNERVMgaXRlbXMgZm9yIHNlc3Npb25zICovCi0gIEdzdFN0cnVjdHVyZSAgICpzZGVzOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RSdHBCaW5Qcml2YXRlICpwcml2OwotfTsKLQotc3RydWN0IF9Hc3RSdHBCaW5DbGFzcyB7Ci0gIEdzdEJpbkNsYXNzICBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogZ2V0IHRoZSBjYXBzIGZvciBwdCAqLwotICBHc3RDYXBzKiAgICAoKnJlcXVlc3RfcHRfbWFwKSAgICAgICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24sIGd1aW50IHB0KTsKLQotICB2b2lkICAgICAgICAoKnBheWxvYWRfdHlwZV9jaGFuZ2UpICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24sIGd1aW50IHB0KTsKLQotICB2b2lkICAgICAgICAoKm5ld19qaXR0ZXJidWZmZXIpICAgICAoR3N0UnRwQmluICpydHBiaW4sIEdzdEVsZW1lbnQgKmppdHRlcmJ1ZmZlciwgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLQotICAvKiBhY3Rpb24gc2lnbmFscyAqLwotICB2b2lkICAgICAgICAoKmNsZWFyX3B0X21hcCkgICAgICAgICAoR3N0UnRwQmluICpydHBiaW4pOwotICB2b2lkICAgICAgICAoKnJlc2V0X3N5bmMpICAgICAgICAgICAoR3N0UnRwQmluICpydHBiaW4pOwotICBHc3RFbGVtZW50KiAoKmdldF9zZXNzaW9uKSAgICAgICAgICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24pOwotICBSVFBTZXNzaW9uKiAoKmdldF9pbnRlcm5hbF9zZXNzaW9uKSAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24pOwotCi0gIC8qIHNlc3Npb24gbWFuYWdlciBzaWduYWxzICovCi0gIHZvaWQgICAgICgqb25fbmV3X3NzcmMpICAgICAgIChHc3RSdHBCaW4gKnJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl9zc3JjX2NvbGxpc2lvbikgKEdzdFJ0cEJpbiAqcnRwYmluLCBndWludCBzZXNzaW9uLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX3NzcmNfdmFsaWRhdGVkKSAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24sIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fc3NyY19hY3RpdmUpICAgIChHc3RSdHBCaW4gKnJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl9zc3JjX3NkZXMpICAgICAgKEdzdFJ0cEJpbiAqcnRwYmluLCBndWludCBzZXNzaW9uLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX2J5ZV9zc3JjKSAgICAgICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24sIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fYnllX3RpbWVvdXQpICAgIChHc3RSdHBCaW4gKnJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl90aW1lb3V0KSAgICAgICAgKEdzdFJ0cEJpbiAqcnRwYmluLCBndWludCBzZXNzaW9uLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX3NlbmRlcl90aW1lb3V0KSAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24sIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fbnB0X3N0b3ApICAgICAgIChHc3RSdHBCaW4gKnJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLQotICBHc3RFbGVtZW50KiAoKnJlcXVlc3RfcnRwX2VuY29kZXIpICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24pOwotICBHc3RFbGVtZW50KiAoKnJlcXVlc3RfcnRwX2RlY29kZXIpICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24pOwotICBHc3RFbGVtZW50KiAoKnJlcXVlc3RfcnRjcF9lbmNvZGVyKSAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24pOwotICBHc3RFbGVtZW50KiAoKnJlcXVlc3RfcnRjcF9kZWNvZGVyKSAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24pOwotCi0gIEdzdEVsZW1lbnQqICgqcmVxdWVzdF9hdXhfc2VuZGVyKSAgIChHc3RSdHBCaW4gKnJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbik7Ci0gIEdzdEVsZW1lbnQqICgqcmVxdWVzdF9hdXhfcmVjZWl2ZXIpIChHc3RSdHBCaW4gKnJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbik7Ci0KLSAgdm9pZCAgICAgKCpvbl9uZXdfc2VuZGVyX3NzcmMpICAgICAgKEdzdFJ0cEJpbiAqcnRwYmluLCBndWludCBzZXNzaW9uLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX3NlbmRlcl9zc3JjX2FjdGl2ZSkgICAoR3N0UnRwQmluICpydHBiaW4sIGd1aW50IHNlc3Npb24sIGd1aW50MzIgc3NyYyk7Ci19OwotCi1HVHlwZSBnc3RfcnRwX2Jpbl9nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfQklOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwZHRtZm11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzZkNzQ3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDIzMyArMCwwIEBACi0vKiBSVFAgRFRNRiBtdXhlciBlbGVtZW50IGZvciBHU3RyZWFtZXIKLSAqCi0gKiBnc3RydHBkdG1mbXV4LmM6Ci0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNy0yMDEwPiBOb2tpYSBDb3Jwb3JhdGlvbi4KLSAqICAgQ29udGFjdDogWmVlc2hhbiBBbGkgPHplZXNoYW4uYWxpQG5va2lhLmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDctMjAxMD4gQ29sbGFib3JhIEx0ZAotICogICBDb250YWN0OiBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jby51az4KLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDIwMDAsMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGR0bWZtdXgKLSAqIEBzZWVfYWxzbzogcnRwZHRtZnNyYywgZHRtZnNyYywgcnRwbXV4Ci0gKgotICogVGhlIFJUUCAiRFRNRiIgTXV4ZXIgbXV4ZXMgbXVsdGlwbGUgUlRQIHN0cmVhbXMgaW50byBhIHZhbGlkIFJUUAotICogc3RyZWFtLiBJdCBkb2VzIGV4YWN0bHkgd2hhdCBpdHMgcGFyZW50ICgjcnRwbXV4KSBkb2VzLCBleGNlcHQKLSAqIHRoYXQgaXQgcHJldmVudCBidWZmZXJzIGNvbWluZyBvdmVyIGEgcmVndWxhciBzaW5rX1wldSBwYWQgZnJvbSBnb2luZyB0aHJvdWdoCi0gKiBmb3IgdGhlIGR1cmF0aW9uIG9mIGJ1ZmZlcnMgdGhhdCBjYW1lIGluIGEgcHJpb3JpdHlfc2lua19cJXUgcGFkLgotICoKLSAqIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaWYgYSBkaXNjb250aW51b3VzIHNvdXJjZSBsaWtlIGR0bWZzcmMgb3IKLSAqIHJ0cGR0bWZzcmMgYXJlIGNvbm5lY3RlZCB0byB0aGUgcHJpb3JpdHkgc2luayBwYWRzLiBUaGlzIHdheSwgdGhlIGdlbmVyYXRlZAotICogRFRNRiBzaWduYWwgY2FuIHJlcGxhY2UgdGhlIHJlY29yZGVkIGF1ZGlvIHdoaWxlIHRoZSB0b25lIGlzIGJlaW5nIHNlbnQuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwZHRtZm11eC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX2R0bWZfbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9ydHBfZHRtZl9tdXhfZGVidWcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHByaW9yaXR5X3NpbmtfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInByaW9yaXR5X3NpbmtfJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKSk7Ci0KLXN0YXRpYyBHc3RQYWQgKmdzdF9ydHBfZHRtZl9tdXhfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX2R0bWZfbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2R0bWZfbXV4X2FjY2VwdF9idWZmZXJfbG9ja2VkIChHc3RSVFBNdXggKiBydHBfbXV4LAotICAgIEdzdFJUUE11eFBhZFByaXZhdGUgKiBwYWRwcml2LCBHc3RSVFBCdWZmZXIgKiBydHBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfZHRtZl9tdXhfc3JjX2V2ZW50IChHc3RSVFBNdXggKiBydHBfbXV4LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1HX0RFRklORV9UWVBFIChHc3RSVFBEVE1GTXV4LCBnc3RfcnRwX2R0bWZfbXV4LCBHU1RfVFlQRV9SVFBfTVVYKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZHRtZl9tdXhfaW5pdCAoR3N0UlRQRFRNRk11eCAqIG11eCkKLXsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kdG1mX211eF9jbGFzc19pbml0IChHc3RSVFBEVE1GTXV4Q2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RSVFBNdXhDbGFzcyAqZ3N0cnRwbXV4X2NsYXNzOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBtdXhfY2xhc3MgPSAoR3N0UlRQTXV4Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmcHJpb3JpdHlfc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIG11eGVyIiwKLSAgICAgICJDb2RlYy9NdXhlciIsCi0gICAgICAibWl4ZXMgUlRQIERUTUYgc3RyZWFtcyBpbnRvIG90aGVyIFJUUCBzdHJlYW1zIiwKLSAgICAgICJaZWVzaGFuIEFsaSA8Zmlyc3QubGFzdEBub2tpYS5jb20+Iik7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2R0bWZfbXV4X3JlcXVlc3RfbmV3X3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kdG1mX211eF9jaGFuZ2Vfc3RhdGUpOwotICBnc3RydHBtdXhfY2xhc3MtPmFjY2VwdF9idWZmZXJfbG9ja2VkID0gZ3N0X3J0cF9kdG1mX211eF9hY2NlcHRfYnVmZmVyX2xvY2tlZDsKLSAgZ3N0cnRwbXV4X2NsYXNzLT5zcmNfZXZlbnQgPSBnc3RfcnRwX2R0bWZfbXV4X3NyY19ldmVudDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2R0bWZfbXV4X2FjY2VwdF9idWZmZXJfbG9ja2VkIChHc3RSVFBNdXggKiBydHBfbXV4LAotICAgIEdzdFJUUE11eFBhZFByaXZhdGUgKiBwYWRwcml2LCBHc3RSVFBCdWZmZXIgKiBydHBidWZmZXIpCi17Ci0gIEdzdFJUUERUTUZNdXggKm11eCA9IEdTVF9SVFBfRFRNRl9NVVggKHJ0cF9tdXgpOwotICBHc3RDbG9ja1RpbWUgcnVubmluZ190czsKLQotICBydW5uaW5nX3RzID0gR1NUX0JVRkZFUl9QVFMgKHJ0cGJ1ZmZlci0+YnVmZmVyKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHJ1bm5pbmdfdHMpKSB7Ci0gICAgaWYgKHBhZHByaXYgJiYgcGFkcHJpdi0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKQotICAgICAgcnVubmluZ190cyA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnBhZHByaXYtPnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBHU1RfQlVGRkVSX1BUUyAocnRwYnVmZmVyLT5idWZmZXIpKTsKLQotICAgIGlmIChwYWRwcml2ICYmIHBhZHByaXYtPnByaW9yaXR5KSB7Ci0gICAgICBpZiAoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQgKHJ0cGJ1ZmZlci0+YnVmZmVyKSkgewotICAgICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKG11eC0+bGFzdF9wcmlvcml0eV9lbmQpKQotICAgICAgICAgIG11eC0+bGFzdF9wcmlvcml0eV9lbmQgPQotICAgICAgICAgICAgICBNQVggKHJ1bm5pbmdfdHMgKyBHU1RfQlVGRkVSX0RVUkFUSU9OIChydHBidWZmZXItPmJ1ZmZlciksCi0gICAgICAgICAgICAgIG11eC0+bGFzdF9wcmlvcml0eV9lbmQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgbXV4LT5sYXN0X3ByaW9yaXR5X2VuZCA9IHJ1bm5pbmdfdHMgKwotICAgICAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChydHBidWZmZXItPmJ1ZmZlcik7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChtdXgsICJHb3QgYnVmZmVyICVwIG9uIHByaW9yaXR5IHBhZCwgIgotICAgICAgICAgICAgIiBibG9ja2luZyByZWd1bGFyIHBhZHMgdW50aWwgJSIgR1NUX1RJTUVfRk9STUFULCBydHBidWZmZXItPmJ1ZmZlciwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG11eC0+bGFzdF9wcmlvcml0eV9lbmQpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobXV4LCAiQnVmZmVyICVwIGhhcyBhbiBpbnZhbGlkIGR1cmF0aW9uLCIKLSAgICAgICAgICAgICIgbm90IGJsb2NraW5nIG90aGVyIHBhZCIsIHJ0cGJ1ZmZlci0+YnVmZmVyKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChtdXgtPmxhc3RfcHJpb3JpdHlfZW5kKSAmJgotICAgICAgICAgIHJ1bm5pbmdfdHMgPCBtdXgtPmxhc3RfcHJpb3JpdHlfZW5kKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChtdXgsICJEcm9wcGluZyBidWZmZXIgJXAgYmVjYXVzZSBydW5uaW5nIHRpbWUiCi0gICAgICAgICAgICAiICUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFULCBydHBidWZmZXItPmJ1ZmZlciwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHJ1bm5pbmdfdHMpLCBHU1RfVElNRV9BUkdTIChtdXgtPmxhc3RfcHJpb3JpdHlfZW5kKSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG11eCwgIkJ1ZmZlciAlcCBoYXMgYW4gaW52YWxpZCB0aW1lc3RhbXAsIgotICAgICAgICAiIGxldHRpbmcgdGhyb3VnaCIsIHJ0cGJ1ZmZlci0+YnVmZmVyKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X3J0cF9kdG1mX211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLAotICAgIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHBhZCA9Ci0gICAgICBHU1RfRUxFTUVOVF9DTEFTUyAoZ3N0X3J0cF9kdG1mX211eF9wYXJlbnRfY2xhc3MpLT5yZXF1ZXN0X25ld19wYWQKLSAgICAgIChlbGVtZW50LCB0ZW1wbCwgbmFtZSwgY2Fwcyk7Ci0KLSAgaWYgKHBhZCkgewotICAgIEdzdFJUUE11eFBhZFByaXZhdGUgKnBhZHByaXY7Ci0KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGVsZW1lbnQpOwotICAgIHBhZHByaXYgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0KLSAgICBpZiAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KSwKLSAgICAgICAgICAgICJwcmlvcml0eV9zaW5rXyV1IikgPT0gR1NUX1BBRF9QQURfVEVNUExBVEUgKHBhZCkpCi0gICAgICBwYWRwcml2LT5wcmlvcml0eSA9IFRSVUU7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKGVsZW1lbnQpOwotICB9Ci0KLSAgcmV0dXJuIHBhZDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2R0bWZfbXV4X3NyY19ldmVudCAoR3N0UlRQTXV4ICogcnRwX211eCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0KLSAgICBpZiAocyAmJiBnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiZHRtZi1ldmVudCIpKSB7Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cF9tdXgpOwotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChydHBfbXV4LT5sYXN0X3N0b3ApKSB7Ci0gICAgICAgIGV2ZW50ID0gKEdzdEV2ZW50ICopCi0gICAgICAgICAgICBnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZSAoR1NUX01JTklfT0JKRUNUX0NBU1QgKGV2ZW50KSk7Ci0gICAgICAgIHMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoKEdzdFN0cnVjdHVyZSAqKSBzLAotICAgICAgICAgICAgImxhc3Qtc3RvcCIsIEdfVFlQRV9VSU5UNjQsIHJ0cF9tdXgtPmxhc3Rfc3RvcCwgTlVMTCk7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwX211eCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEdTVF9SVFBfTVVYX0NMQVNTIChnc3RfcnRwX2R0bWZfbXV4X3BhcmVudF9jbGFzcyktPnNyY19ldmVudCAocnRwX211eCwKLSAgICAgIGV2ZW50KTsKLX0KLQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfZHRtZl9tdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RSVFBEVE1GTXV4ICptdXggPSBHU1RfUlRQX0RUTUZfTVVYIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgIHsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAobXV4KTsKLSAgICAgIG11eC0+bGFzdF9wcmlvcml0eV9lbmQgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG11eCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0KLSAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfcnRwX2R0bWZfbXV4X3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwKLSAgICAgIHRyYW5zaXRpb24pOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX2R0bWZfbXV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcnRwX2R0bWZfbXV4X2RlYnVnLCAicnRwZHRtZm11eCIsIDAsCi0gICAgICAicnRwIGR0bWYgbXV4ZXIiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGR0bWZtdXgiLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfUlRQX0RUTUZfTVVYKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaCBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGR0bWZtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxZTllYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBkdG1mbXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBSVFAgbXV4ZXIgZWxlbWVudCBmb3IgR1N0cmVhbWVyCi0gKgotICogZ3N0cnRwZHRtZm11eC5oOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uLgotICogICBDb250YWN0OiBaZWVzaGFuIEFsaSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfRFRNRl9NVVhfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9EVE1GX01VWF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3RydHBtdXguaCIKLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9SVFBfRFRNRl9NVVggKGdzdF9ydHBfZHRtZl9tdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9EVE1GX01VWChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFBfRFRNRl9NVVgsIEdzdFJUUERUTUZNdXgpKQotI2RlZmluZSBHU1RfUlRQX0RUTUZfTVVYX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRFRNRl9NVVgsIEdzdFJUUERUTUZNdXgpKQotI2RlZmluZSBHU1RfSVNfUlRQX0RUTUZfTVVYKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9EVE1GX01VWCkpCi0jZGVmaW5lIEdTVF9JU19SVFBfRFRNRl9NVVhfQ0xBU1Mob2JqKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfRFRNRl9NVVgpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUERUTUZNdXggR3N0UlRQRFRNRk11eDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFBEVE1GTXV4Q2xhc3MgR3N0UlRQRFRNRk11eENsYXNzOwotCi0vKioKLSAqIEdzdFJUUERUTUZNdXg6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0UlRQRFRNRk11eCBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0UlRQRFRNRk11eAotewotICBHc3RSVFBNdXggbXV4OwotCi0gIC8qIFByb3RlY3RlZCBieSBvYmplY3QgbG9jayAqLwotICBHc3RDbG9ja1RpbWUgbGFzdF9wcmlvcml0eV9lbmQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFJUUERUTUZNdXhDbGFzcwotewotICBHc3RSVFBNdXhDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotICB2b2lkICgqbG9ja2luZykgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotICB2b2lkICgqdW5sb2NrZWQpIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKTsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfZHRtZl9tdXhfZ2V0X3R5cGUgKHZvaWQpOwotZ2Jvb2xlYW4gZ3N0X3J0cF9kdG1mX211eF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9SVFBfRFRNRl9NVVhfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBqaXR0ZXJidWZmZXIuYyBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2E5ZmU3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDY3NiArMCwwIEBACi0vKgotICogRmFyc2lnaHQgVm9pY2UrVmlkZW8gbGlicmFyeQotICoKLSAqICBDb3B5cmlnaHQgMjAwNyBDb2xsYWJvcmEgTHRkLAotICogIENvcHlyaWdodCAyMDA3IE5va2lhIENvcnBvcmF0aW9uCi0gKiAgIEBhdXRob3I6IFBoaWxpcHBlIEthbGFmIDxwaGlsaXBwZS5rYWxhZkBjb2xsYWJvcmEuY28udWs+LgotICogIENvcHlyaWdodCAyMDA3IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiAgQ29weXJpZ2h0IDIwMTUgS3VyZW50byAoaHR0cDovL2t1cmVudG8ub3JnLykKLSAqICAgQGF1dGhvcjogTWlndWVsIFBhcsOtcyA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0gKiAgQ29weXJpZ2h0IDIwMTYgUGV4aXAgQVMKLSAqICAgQGF1dGhvcjogSGF2YXJkIEdyYWZmIDxoYXZhcmRAcGV4aXAuY29tPgotICogICBAYXV0aG9yOiBTdGlhbiBTZWxuZXMgPHN0aWFuQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwaml0dGVyYnVmZmVyCi0gKgotICogVGhpcyBlbGVtZW50IHJlb3JkZXJzIGFuZCByZW1vdmVzIGR1cGxpY2F0ZSBSVFAgcGFja2V0cyBhcyB0aGV5IGFyZSByZWNlaXZlZAotICogZnJvbSBhIG5ldHdvcmsgc291cmNlLgotICoKLSAqIFRoZSBlbGVtZW50IG5lZWRzIHRoZSBjbG9jay1yYXRlIG9mIHRoZSBSVFAgcGF5bG9hZCBpbiBvcmRlciB0byBlc3RpbWF0ZSB0aGUKLSAqIGRlbGF5LiBUaGlzIGluZm9ybWF0aW9uIGlzIG9idGFpbmVkIGVpdGhlciBmcm9tIHRoZSBjYXBzIG9uIHRoZSBzaW5rIHBhZCBvciwKLSAqIHdoZW4gbm8gY2FwcyBhcmUgcHJlc2VudCwgZnJvbSB0aGUgI0dzdFJ0cEppdHRlckJ1ZmZlcjo6cmVxdWVzdC1wdC1tYXAgc2lnbmFsLgotICogVG8gY2xlYXIgdGhlIHByZXZpb3VzIHB0LW1hcCB1c2UgdGhlICNHc3RSdHBKaXR0ZXJCdWZmZXI6OmNsZWFyLXB0LW1hcCBzaWduYWwuCi0gKgotICogVGhlIHJ0cGppdHRlcmJ1ZmZlciB3aWxsIHdhaXQgZm9yIG1pc3NpbmcgcGFja2V0cyB1cCB0byBhIGNvbmZpZ3VyYWJsZSB0aW1lCi0gKiBsaW1pdCB1c2luZyB0aGUgI0dzdFJ0cEppdHRlckJ1ZmZlcjpsYXRlbmN5IHByb3BlcnR5LiBQYWNrZXRzIGFycml2aW5nIHRvbwotICogbGF0ZSBhcmUgY29uc2lkZXJlZCB0byBiZSBsb3N0IHBhY2tldHMuIElmIHRoZSAjR3N0UnRwSml0dGVyQnVmZmVyOmRvLWxvc3QKLSAqIHByb3BlcnR5IGlzIHNldCwgbG9zdCBwYWNrZXRzIHdpbGwgcmVzdWx0IGluIGEgY3VzdG9tIHNlcmlhbGl6ZWQgZG93bnN0cmVhbQotICogZXZlbnQgb2YgbmFtZSBHc3RSVFBQYWNrZXRMb3N0LiBUaGUgbG9zdCBwYWNrZXQgZXZlbnRzIGFyZSB1c3VhbGx5IHVzZWQgYnkgYQotICogZGVwYXlsb2FkZXIgb3Igb3RoZXIgZWxlbWVudCB0byBjcmVhdGUgY29uY2VhbG1lbnQgZGF0YSBvciBzb21lIG90aGVyIGxvZ2ljCi0gKiB0byBncmFjZWZ1bGx5IGhhbmRsZSB0aGUgbWlzc2luZyBwYWNrZXRzLgotICoKLSAqIFRoZSBqaXR0ZXJidWZmZXIgd2lsbCB1c2UgdGhlIERUUyAob3IgUFRTIGlmIG5vIERUUyBpcyBzZXQpIG9mIHRoZSBpbmNvbW1pbmcKLSAqIGJ1ZmZlciBhbmQgdGhlIHJ0cHRpbWUgaW5zaWRlIHRoZSBSVFAgcGFja2V0IHRvIGNyZWF0ZSBhIFBUUyBvbiB0aGUgb3V0Z29pbmcKLSAqIGJ1ZmZlci4KLSAqCi0gKiBUaGUgaml0dGVyYnVmZmVyIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gc2VuZCBlYXJseSByZXRyYW5zbWlzc2lvbiBldmVudHMKLSAqIHVwc3RyZWFtIGJ5IHNldHRpbmcgdGhlICNHc3RSdHBKaXR0ZXJCdWZmZXI6ZG8tcmV0cmFuc21pc3Npb24gcHJvcGVydHkuIEluCi0gKiB0aGlzIG1vZGUsIHRoZSBqaXR0ZXJidWZmZXIgdHJpZXMgdG8gZXN0aW1hdGUgd2hlbiBhIHBhY2tldCBzaG91bGQgYXJyaXZlIGFuZAotICogc2VuZHMgYSBjdXN0b20gdXBzdHJlYW0gZXZlbnQgbmFtZWQgR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IHdoZW4gdGhlCi0gKiBwYWNrZXQgaXMgY29uc2lkZXJlZCBsYXRlLiBUaGUgaW5pdGlhbCBleHBlY3RlZCBwYWNrZXQgYXJyaXZhbCB0aW1lIGlzCi0gKiBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6Ci0gKgotICogLSBJZiBzZXFudW0gTiBhcnJpdmVkIGF0IHRpbWUgVCwgc2VxbnVtIE4rMSBpcyBleHBlY3RlZCB0byBhcnJpdmUgYXQKLSAqICAgICBUICsgcGFja2V0LXNwYWNpbmcgKyAjR3N0UnRwSml0dGVyQnVmZmVyOnJ0eC1kZWxheS4gVGhlIHBhY2tldCBzcGFjaW5nIGlzCi0gKiAgICAgY2FsY3VsYXRlZCBmcm9tIHRoZSBEVFMgKG9yIFBUUyBpcyBubyBEVFMpIG9mIHR3byBjb25zZWN1dGl2ZSBSVFAKLSAqICAgICBwYWNrZXRzIHdpdGggZGlmZmVyZW50IHJ0cHRpbWUuCi0gKgotICogLSBJZiBzZXFudW0gTjAgYXJyaXZlZCBhdCB0aW1lIFQwIGFuZCBzZXFudW0gTm0gYXJyaXZlZCBhdCB0aW1lIFRtLAotICogICAgIHNlcW51bSBOaSBpcyBleHBlY3RlZCBhdCB0aW1lIFRpID0gVDAgKyBpKihUbSAtIFQwKS8oTm0gLSBOMCkuIEFueQotICogICAgIHByZXZpb3VzbHkgc2NoZWR1bGVkIHRpbWVvdXQgaXMgb3ZlcndyaXR0ZW4uCi0gKgotICogLSBJZiBzZXFudW0gTiBhcnJpdmVkLCBhbGwgc2VxbnVtIG9sZGVyIHRoYW4KLSAqICAgICBOIC0gI0dzdFJ0cEppdHRlckJ1ZmZlcjpydHgtZGVsYXktcmVvcmRlciBhcmUgY29uc2lkZXJlZCBsYXRlCi0gKiAgICAgaW1tZWRpYXRlbHkuIFRoaXMgaXMgdG8gcmVxdWVzdCBmYXN0IGZlZWRiYWNrIGZvciBhYm9ub3JtYWxseSByZW9yZGVyCi0gKiAgICAgcGFja2V0cyBiZWZvcmUgYW55IG9mIHRoZSBwcmV2aW91cyB0aW1lb3V0cyBpcyB0cmlnZ2VyZWQuCi0gKgotICogQSBsYXRlIHBhY2tldCB0cmlnZ2VycyB0aGUgR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IGN1c3RvbSB1cHN0cmVhbQotICogZXZlbnQuIEFmdGVyIHRoZSBpbml0aWFsIHRpbWVvdXQgZXhwaXJlcyBhbmQgdGhlIHJldHJhbnNtaXNzaW9uIGV2ZW50IGlzCi0gKiBzZW50LCB0aGUgdGltZW91dCBpcyBzY2hlZHVsZWQgZm9yCi0gKiBUICsgI0dzdFJ0cEppdHRlckJ1ZmZlcjpydHgtcmV0cnktdGltZW91dC4gSWYgdGhlIG1pc3NpbmcgcGFja2V0IGRpZCBub3QKLSAqIGFycml2ZSBhZnRlciAjR3N0UnRwSml0dGVyQnVmZmVyOnJ0eC1yZXRyeS10aW1lb3V0LCBhIG5ldwotICogR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IGlzIHNlbnQgdXBzdHJlYW0gYW5kIHRoZSB0aW1lb3V0IGlzIHJlc2NoZWR1bGVkCi0gKiBhZ2FpbiBmb3IgVCArICNHc3RSdHBKaXR0ZXJCdWZmZXI6cnR4LXJldHJ5LXRpbWVvdXQuIFRoaXMgcmVwZWF0cyB1bnRpbAotICogI0dzdFJ0cEppdHRlckJ1ZmZlcjpydHgtcmV0cnktcGVyaW9kIGVsYXBzZWQsIGF0IHdoaWNoIHBvaW50IG5vIGZ1cnRoZXIKLSAqIHJldHJhbnNtaXNzaW9uIHJlcXVlc3RzIGFyZSBzZW50IGFuZCB0aGUgcmVndWxhciBsb2dpYyBpcyBwZXJmb3JtZWQgdG8KLSAqIHNjaGVkdWxlIGEgbG9zdCBwYWNrZXQgYXMgZGlzY3Vzc2VkIGFib3ZlLgotICoKLSAqIFRoaXMgZWxlbWVudCBhY3RzIGFzIGEgbGl2ZSBlbGVtZW50IGFuZCBzbyBhZGRzICNHc3RSdHBKaXR0ZXJCdWZmZXI6bGF0ZW5jeQotICogdG8gdGhlIHBpcGVsaW5lLgotICoKLSAqIFRoaXMgZWxlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgdXNlZCBpbnNpZGUgcnRwYmluLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgcnRzcHNyYyBsb2NhdGlvbj1ydHNwOi8vMTkyLjE2OC4xLjEzMzo4NTU0L21wZWcxb3IyQXVkaW9WaWRlb1Rlc3QgISBydHBqaXR0ZXJidWZmZXIgISBydHBtcHZkZXBheSAhIG1wZWcyZGVjICEgeHZpbWFnZXNpbmsKLSAqIF18IENvbm5lY3QgdG8gYSBzdHJlYW1pbmcgc2VydmVyIGFuZCBkZWNvZGUgdGhlIE1QRUcgdmlkZW8uIFRoZSBqaXR0ZXJidWZmZXIgaXMKLSAqIGluc2VydGVkIGludG8gdGhlIHBpcGVsaW5lIHRvIHNtb290aCBvdXQgbmV0d29yayBqaXR0ZXIgYW5kIHRvIHJlb3JkZXIgdGhlCi0gKiBvdXQtb2Ytb3JkZXIgUlRQIHBhY2tldHMuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvbmV0L25ldC5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwaml0dGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAicnRwaml0dGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAicnRwc3RhdHMuaCIKLQotI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWSAocnRwaml0dGVyYnVmZmVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBqaXR0ZXJidWZmZXJfZGVidWcpCi0KLS8qIFJUUEppdHRlckJ1ZmZlciBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIFNJR05BTF9SRVFVRVNUX1BUX01BUCwKLSAgU0lHTkFMX0NMRUFSX1BUX01BUCwKLSAgU0lHTkFMX0hBTkRMRV9TWU5DLAotICBTSUdOQUxfT05fTlBUX1NUT1AsCi0gIFNJR05BTF9TRVRfQUNUSVZFLAotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX0xBVEVOQ1lfTVMgICAgICAgICAgMjAwCi0jZGVmaW5lIERFRkFVTFRfRFJPUF9PTl9MQVRFTkNZICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX1RTX09GRlNFVCAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX0RPX0xPU1QgICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9NT0RFICAgICAgICAgICAgICAgIFJUUF9KSVRURVJfQlVGRkVSX01PREVfU0xBVkUKLSNkZWZpbmUgREVGQVVMVF9QRVJDRU5UICAgICAgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9ET19SRVRSQU5TTUlTU0lPTiAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfUlRYX05FWFRfU0VRTlVNICAgICBUUlVFCi0jZGVmaW5lIERFRkFVTFRfUlRYX0RFTEFZICAgICAgICAgICAtMQotI2RlZmluZSBERUZBVUxUX1JUWF9NSU5fREVMQVkgICAgICAgMAotI2RlZmluZSBERUZBVUxUX1JUWF9ERUxBWV9SRU9SREVSICAgMwotI2RlZmluZSBERUZBVUxUX1JUWF9SRVRSWV9USU1FT1VUICAgLTEKLSNkZWZpbmUgREVGQVVMVF9SVFhfTUlOX1JFVFJZX1RJTUVPVVQgICAtMQotI2RlZmluZSBERUZBVUxUX1JUWF9SRVRSWV9QRVJJT0QgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9SVFhfTUFYX1JFVFJJRVMgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9SVFhfREVBRExJTkUgICAgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9SVFhfU1RBVFNfVElNRU9VVCAgIDEwMDAKLSNkZWZpbmUgREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGIDEwMDAKLSNkZWZpbmUgREVGQVVMVF9NQVhfRFJPUE9VVF9USU1FICAgIDYwMDAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX01JU09SREVSX1RJTUUgICAyMDAwCi0jZGVmaW5lIERFRkFVTFRfUkZDNzI3M19TWU5DICAgICAgICBGQUxTRQotCi0jZGVmaW5lIERFRkFVTFRfQVVUT19SVFhfREVMQVkgKDIwICogR1NUX01TRUNPTkQpCi0jZGVmaW5lIERFRkFVTFRfQVVUT19SVFhfVElNRU9VVCAoNDAgKiBHU1RfTVNFQ09ORCkKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTEFURU5DWSwKLSAgUFJPUF9EUk9QX09OX0xBVEVOQ1ksCi0gIFBST1BfVFNfT0ZGU0VULAotICBQUk9QX0RPX0xPU1QsCi0gIFBST1BfTU9ERSwKLSAgUFJPUF9QRVJDRU5ULAotICBQUk9QX0RPX1JFVFJBTlNNSVNTSU9OLAotICBQUk9QX1JUWF9ORVhUX1NFUU5VTSwKLSAgUFJPUF9SVFhfREVMQVksCi0gIFBST1BfUlRYX01JTl9ERUxBWSwKLSAgUFJPUF9SVFhfREVMQVlfUkVPUkRFUiwKLSAgUFJPUF9SVFhfUkVUUllfVElNRU9VVCwKLSAgUFJPUF9SVFhfTUlOX1JFVFJZX1RJTUVPVVQsCi0gIFBST1BfUlRYX1JFVFJZX1BFUklPRCwKLSAgUFJPUF9SVFhfTUFYX1JFVFJJRVMsCi0gIFBST1BfUlRYX0RFQURMSU5FLAotICBQUk9QX1JUWF9TVEFUU19USU1FT1VULAotICBQUk9QX1NUQVRTLAotICBQUk9QX01BWF9SVENQX1JUUF9USU1FX0RJRkYsCi0gIFBST1BfTUFYX0RST1BPVVRfVElNRSwKLSAgUFJPUF9NQVhfTUlTT1JERVJfVElNRSwKLSAgUFJPUF9SRkM3MjczX1NZTkMKLX07Ci0KLSNkZWZpbmUgSkJVRl9MT0NLKHByaXYpICAgR19TVE1UX1NUQVJUIHsJCQlcCi0gICAgR1NUX1RSQUNFKCJMb2NraW5nIGZyb20gdGhyZWFkICVwIiwgZ190aHJlYWRfc2VsZigpKTsJXAotICAgIChnX211dGV4X2xvY2sgKCYocHJpdiktPmpidWZfbG9jaykpOwkJCVwKLSAgICBHU1RfVFJBQ0UoIkxvY2tlZCBmcm9tIHRocmVhZCAlcCIsIGdfdGhyZWFkX3NlbGYoKSk7CVwKLSAgfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgSkJVRl9MT0NLX0NIRUNLKHByaXYsbGFiZWwpIEdfU1RNVF9TVEFSVCB7ICAgIFwKLSAgSkJVRl9MT0NLIChwcml2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKEdfVU5MSUtFTFkgKHByaXYtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19PSykpICAgIFwKLSAgICBnb3RvIGxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotI2RlZmluZSBKQlVGX1VOTE9DSyhwcml2KSBHX1NUTVRfU1RBUlQgewkJCVwKLSAgICBHU1RfVFJBQ0UgKCJVbmxvY2tpbmcgZnJvbSB0aHJlYWQgJXAiLCBnX3RocmVhZF9zZWxmICgpKTsJXAotICAgIChnX211dGV4X3VubG9jayAoJihwcml2KS0+amJ1Zl9sb2NrKSk7CQkJXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgSkJVRl9XQUlUX1RJTUVSKHByaXYpICAgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICBcCi0gIEdTVF9ERUJVRyAoIndhaXRpbmcgdGltZXIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAocHJpdiktPndhaXRpbmdfdGltZXIgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19jb25kX3dhaXQgKCYocHJpdiktPmpidWZfdGltZXIsICYocHJpdiktPmpidWZfbG9jayk7ICBcCi0gIChwcml2KS0+d2FpdGluZ190aW1lciA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJ3YWl0aW5nIHRpbWVyIGRvbmUiKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotI2RlZmluZSBKQlVGX1NJR05BTF9USU1FUihwcml2KSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgIFwKLSAgaWYgKEdfVU5MSUtFTFkgKChwcml2KS0+d2FpdGluZ190aW1lcikpIHsgICAgICAgICAgICAgICBcCi0gICAgR1NUX0RFQlVHICgic2lnbmFsIHRpbWVyIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdfY29uZF9zaWduYWwgKCYocHJpdiktPmpidWZfdGltZXIpOyAgICAgICAgICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBKQlVGX1dBSVRfRVZFTlQocHJpdixsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgXAotICBHU1RfREVCVUcgKCJ3YWl0aW5nIGV2ZW50Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAocHJpdiktPndhaXRpbmdfZXZlbnQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX2NvbmRfd2FpdCAoJihwcml2KS0+amJ1Zl9ldmVudCwgJihwcml2KS0+amJ1Zl9sb2NrKTsgXAotICAocHJpdiktPndhaXRpbmdfZXZlbnQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJ3YWl0aW5nIGV2ZW50IGRvbmUiKTsgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoR19VTkxJS0VMWSAocHJpdi0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX09LKSkgICAgICAgXAotICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0jZGVmaW5lIEpCVUZfU0lHTkFMX0VWRU5UKHByaXYpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICBcCi0gIGlmIChHX1VOTElLRUxZICgocHJpdiktPndhaXRpbmdfZXZlbnQpKSB7ICAgICAgICAgICAgICBcCi0gICAgR1NUX0RFQlVHICgic2lnbmFsIGV2ZW50Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ19jb25kX3NpZ25hbCAoJihwcml2KS0+amJ1Zl9ldmVudCk7ICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBKQlVGX1dBSVRfUVVFUlkocHJpdixsYWJlbCkgR19TVE1UX1NUQVJUIHsgICAgICAgXAotICBHU1RfREVCVUcgKCJ3YWl0aW5nIHF1ZXJ5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAocHJpdiktPndhaXRpbmdfcXVlcnkgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX2NvbmRfd2FpdCAoJihwcml2KS0+amJ1Zl9xdWVyeSwgJihwcml2KS0+amJ1Zl9sb2NrKTsgXAotICAocHJpdiktPndhaXRpbmdfcXVlcnkgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUcgKCJ3YWl0aW5nIHF1ZXJ5IGRvbmUiKTsgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoR19VTkxJS0VMWSAocHJpdi0+c3JjcmVzdWx0ICE9IEdTVF9GTE9XX09LKSkgICAgICAgXAotICAgIGdvdG8gbGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0jZGVmaW5lIEpCVUZfU0lHTkFMX1FVRVJZKHByaXYscmVzKSBHX1NUTVRfU1RBUlQgeyAgICAgICBcCi0gIChwcml2KS0+bGFzdF9xdWVyeSA9IHJlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChHX1VOTElLRUxZICgocHJpdiktPndhaXRpbmdfcXVlcnkpKSB7ICAgICAgICAgICAgICBcCi0gICAgR1NUX0RFQlVHICgic2lnbmFsIHF1ZXJ5Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ19jb25kX3NpZ25hbCAoJihwcml2KS0+amJ1Zl9xdWVyeSk7ICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBHU1RfQlVGRkVSX0lTX1JFVFJBTlNNSVNTSU9OKGJ1ZmZlcikgXAotICBHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWZmZXIsIEdTVF9SVFBfQlVGRkVSX0ZMQUdfUkVUUkFOU01JU1NJT04pCi0KLXR5cGVkZWYgc3RydWN0IFRpbWVyUXVldWUKLXsKLSAgR1F1ZXVlICp0aW1lcnM7Ci0gIEdIYXNoVGFibGUgKmhhc2h0YWJsZTsKLX0gVGltZXJRdWV1ZTsKLQotc3RydWN0IF9Hc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlCi17Ci0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLSAgR3N0UGFkICpydGNwc2lua3BhZDsKLQotICBSVFBKaXR0ZXJCdWZmZXIgKmpidWY7Ci0gIEdNdXRleCBqYnVmX2xvY2s7Ci0gIGdib29sZWFuIHdhaXRpbmdfdGltZXI7Ci0gIEdDb25kIGpidWZfdGltZXI7Ci0gIGdib29sZWFuIHdhaXRpbmdfZXZlbnQ7Ci0gIEdDb25kIGpidWZfZXZlbnQ7Ci0gIGdib29sZWFuIHdhaXRpbmdfcXVlcnk7Ci0gIEdDb25kIGpidWZfcXVlcnk7Ci0gIGdib29sZWFuIGxhc3RfcXVlcnk7Ci0gIGdib29sZWFuIGRpc2NvbnQ7Ci0gIGdib29sZWFuIHRzX2Rpc2NvbnQ7Ci0gIGdib29sZWFuIGFjdGl2ZTsKLSAgZ3VpbnQ2NCBvdXRfb2Zmc2V0OwotCi0gIGdib29sZWFuIHRpbWVyX3J1bm5pbmc7Ci0gIEdUaHJlYWQgKnRpbWVyX3RocmVhZDsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGd1aW50IGxhdGVuY3lfbXM7Ci0gIGd1aW50NjQgbGF0ZW5jeV9uczsKLSAgZ2Jvb2xlYW4gZHJvcF9vbl9sYXRlbmN5OwotICBnaW50NjQgdHNfb2Zmc2V0OwotICBnYm9vbGVhbiBkb19sb3N0OwotICBnYm9vbGVhbiBkb19yZXRyYW5zbWlzc2lvbjsKLSAgZ2Jvb2xlYW4gcnR4X25leHRfc2VxbnVtOwotICBnaW50IHJ0eF9kZWxheTsKLSAgZ3VpbnQgcnR4X21pbl9kZWxheTsKLSAgZ2ludCBydHhfZGVsYXlfcmVvcmRlcjsKLSAgZ2ludCBydHhfcmV0cnlfdGltZW91dDsKLSAgZ2ludCBydHhfbWluX3JldHJ5X3RpbWVvdXQ7Ci0gIGdpbnQgcnR4X3JldHJ5X3BlcmlvZDsKLSAgZ2ludCBydHhfbWF4X3JldHJpZXM7Ci0gIGd1aW50IHJ0eF9zdGF0c190aW1lb3V0OwotICBnaW50IHJ0eF9kZWFkbGluZV9tczsKLSAgZ2ludCBtYXhfcnRjcF9ydHBfdGltZV9kaWZmOwotICBndWludDMyIG1heF9kcm9wb3V0X3RpbWU7Ci0gIGd1aW50MzIgbWF4X21pc29yZGVyX3RpbWU7Ci0KLSAgLyogdGhlIGxhc3Qgc2VxbnVtIHdlIHB1c2hlZCBvdXQgKi8KLSAgZ3VpbnQzMiBsYXN0X3BvcHBlZF9zZXFudW07Ci0gIC8qIHRoZSBuZXh0IGV4cGVjdGVkIHNlcW51bSB3ZSBwdXNoICovCi0gIGd1aW50MzIgbmV4dF9zZXFudW07Ci0gIC8qIHNlcW51bS1iYXNlLCBpZiBrbm93biAqLwotICBndWludDMyIHNlcW51bV9iYXNlOwotICAvKiBsYXN0IG91dHB1dCB0aW1lICovCi0gIEdzdENsb2NrVGltZSBsYXN0X291dF90aW1lOwotICAvKiBsYXN0IHZhbGlkIGlucHV0IHRpbWVzdGFtcCBhbmQgcnRwdGltZSBwYWlyICovCi0gIEdzdENsb2NrVGltZSBpcHNfcHRzOwotICBndWludDY0IGlwc19ydHB0aW1lOwotICBHc3RDbG9ja1RpbWUgcGFja2V0X3NwYWNpbmc7Ci0gIGdpbnQgZXF1aWRpc3RhbnQ7Ci0KLSAgR1F1ZXVlIGdhcF9wYWNrZXRzOwotCi0gIC8qIHRoZSBuZXh0IGV4cGVjdGVkIHNlcW51bSB3ZSByZWNlaXZlICovCi0gIEdzdENsb2NrVGltZSBsYXN0X2luX3B0czsKLSAgZ3VpbnQzMiBuZXh0X2luX3NlcW51bTsKLQotICBHQXJyYXkgKnRpbWVyczsKLSAgVGltZXJRdWV1ZSAqcnR4X3N0YXRzX3RpbWVyczsKLQotICAvKiBzdGFydCBhbmQgc3RvcCByYW5nZXMgKi8KLSAgR3N0Q2xvY2tUaW1lIG5wdF9zdGFydDsKLSAgR3N0Q2xvY2tUaW1lIG5wdF9zdG9wOwotICBndWludDY0IGV4dF90aW1lc3RhbXA7Ci0gIGd1aW50NjQgbGFzdF9lbGFwc2VkOwotICBndWludDY0IGVzdGltYXRlZF9lb3M7Ci0gIEdzdENsb2NrSUQgZW9zX2lkOwotCi0gIC8qIHN0YXRlICovCi0gIGdib29sZWFuIGVvczsKLSAgZ3VpbnQgbGFzdF9wZXJjZW50OwotCi0gIC8qIGNsb2NrIHJhdGUgYW5kIHJ0cCB0aW1lc3RhbXAgb2Zmc2V0ICovCi0gIGdpbnQgbGFzdF9wdDsKLSAgZ2ludDMyIGNsb2NrX3JhdGU7Ci0gIGdpbnQ2NCBjbG9ja19iYXNlOwotICBnaW50NjQgcHJldl90c19vZmZzZXQ7Ci0KLSAgLyogd2hlbiB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLwotICBHc3RGbG93UmV0dXJuIHNyY3Jlc3VsdDsKLSAgZ2Jvb2xlYW4gYmxvY2tlZDsKLQotICAvKiBmb3Igc3luYyAqLwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lcl90aW1lb3V0OwotICBndWludDE2IHRpbWVyX3NlcW51bTsKLSAgLyogdGhlIGxhdGVuY3kgb2YgdGhlIHVwc3RyZWFtIHBlZXIsIHdlIGhhdmUgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuCi0gICAqIHN5bmNocm9uaXppbmcgdGhlIGJ1ZmZlcnMuICovCi0gIEdzdENsb2NrVGltZSBwZWVyX2xhdGVuY3k7Ci0gIGd1aW50NjQgZXh0X3J0cHRpbWU7Ci0gIEdzdEJ1ZmZlciAqbGFzdF9zcjsKLQotICAvKiBzb21lIGFjY291bnRpbmcgKi8KLSAgZ3VpbnQ2NCBudW1fcHVzaGVkOwotICBndWludDY0IG51bV9sb3N0OwotICBndWludDY0IG51bV9sYXRlOwotICBndWludDY0IG51bV9kdXBsaWNhdGVzOwotICBndWludDY0IG51bV9ydHhfcmVxdWVzdHM7Ci0gIGd1aW50NjQgbnVtX3J0eF9zdWNjZXNzOwotICBndWludDY0IG51bV9ydHhfZmFpbGVkOwotICBnZG91YmxlIGF2Z19ydHhfbnVtOwotICBndWludDY0IGF2Z19ydHhfcnR0OwotICBSVFBQYWNrZXRSYXRlQ3R4IHBhY2tldF9yYXRlX2N0eDsKLQotICAvKiBmb3IgdGhlIGppdHRlciAqLwotICBHc3RDbG9ja1RpbWUgbGFzdF9kdHM7Ci0gIGd1aW50NjQgbGFzdF9ydHB0aW1lOwotICBHc3RDbG9ja1RpbWUgYXZnX2ppdHRlcjsKLX07Ci0KLXR5cGVkZWYgZW51bQotewotICBUSU1FUl9UWVBFX0VYUEVDVEVELAotICBUSU1FUl9UWVBFX0xPU1QsCi0gIFRJTUVSX1RZUEVfREVBRExJTkUsCi0gIFRJTUVSX1RZUEVfRU9TCi19IFRpbWVyVHlwZTsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQgaWR4OwotICBndWludDE2IHNlcW51bTsKLSAgZ3VpbnQgbnVtOwotICBUaW1lclR5cGUgdHlwZTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQ7Ci0gIEdzdENsb2NrVGltZSBkdXJhdGlvbjsKLSAgR3N0Q2xvY2tUaW1lIHJ0eF9iYXNlOwotICBHc3RDbG9ja1RpbWUgcnR4X2RlbGF5OwotICBHc3RDbG9ja1RpbWUgcnR4X3JldHJ5OwotICBHc3RDbG9ja1RpbWUgcnR4X2xhc3Q7Ci0gIGd1aW50IG51bV9ydHhfcmV0cnk7Ci0gIGd1aW50IG51bV9ydHhfcmVjZWl2ZWQ7Ci19IFRpbWVyRGF0YTsKLQotI2RlZmluZSBHU1RfUlRQX0pJVFRFUl9CVUZGRVJfR0VUX1BSSVZBVEUobykgXAotICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIEdTVF9UWVBFX1JUUF9KSVRURVJfQlVGRkVSLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUpKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiCi0gICAgICAgIC8qICJjbG9jay1yYXRlID0gKGludCkgWyAxLCAyMTQ3NDgzNjQ3IF0sICIKLSAgICAgICAgICogInBheWxvYWQgPSAoaW50KSAsICIKLSAgICAgICAgICogImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKSAiCi0gICAgICAgICAqLyApCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaW5rX3J0Y3BfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rX3J0Y3AiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydGNwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiCi0gICAgICAgIC8qICJwYXlsb2FkID0gKGludCkgLCAiCi0gICAgICAgICAqICJjbG9jay1yYXRlID0gKGludCkgLCAiCi0gICAgICAgICAqICJlbmNvZGluZy1uYW1lID0gKHN0cmluZykgIgotICAgICAgICAgKi8gKQotICAgICk7Ci0KLXN0YXRpYyBndWludCBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotI2RlZmluZSBnc3RfcnRwX2ppdHRlcl9idWZmZXJfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwSml0dGVyQnVmZmVyLCBnc3RfcnRwX2ppdHRlcl9idWZmZXIsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi0vKiBvYmplY3Qgb3ZlcnJpZGVzICovCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLS8qIGVsZW1lbnQgb3ZlcnJpZGVzICovCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudAotICAgICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0UGFkICpnc3RfcnRwX2ppdHRlcl9idWZmZXJfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWQgKiBwYWQpOwotc3RhdGljIEdzdENsb2NrICpnc3RfcnRwX2ppdHRlcl9idWZmZXJfcHJvdmlkZV9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdENsb2NrICogY2xvY2spOwotCi0vKiBwYWQgb3ZlcnJpZGVzICovCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgR3N0SXRlcmF0b3IgKmdzdF9ydHBfaml0dGVyX2J1ZmZlcl9pdGVyYXRlX2ludGVybmFsX2xpbmtzIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50KTsKLQotLyogc2lua3BhZCBvdmVycmlkZXMgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4gKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lua19ydGNwX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFpbl9ydGNwIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpOwotCi0vKiBzcmNwYWQgb3ZlcnJpZGVzICovCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NyY19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jbGVhcl9wdF9tYXAgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlcik7Ci1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfc2V0X2FjdGl2ZSAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLAotICAgIGdib29sZWFuIGFjdGl2ZSwgZ3VpbnQ2NCBiYXNlX3RpbWUpOwotc3RhdGljIHZvaWQgZG9faGFuZGxlX3N5bmMgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlcik7Ci0KLXN0YXRpYyB2b2lkIHVuc2NoZWR1bGVfY3VycmVudF90aW1lciAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKTsKLXN0YXRpYyB2b2lkIHJlbW92ZV9hbGxfdGltZXJzIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIpOwotCi1zdGF0aWMgdm9pZCB3YWl0X25leHRfdGltZW91dCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKTsKLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NyZWF0ZV9zdGF0cyAoR3N0UnRwSml0dGVyQnVmZmVyICoKLSAgICBqaXR0ZXJidWZmZXIpOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVfcnR4X3N0YXRzIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsCi0gICAgVGltZXJEYXRhICogdGltZXIsIEdzdENsb2NrVGltZSBkdHMsIGdib29sZWFuIHN1Y2Nlc3MpOwotCi1zdGF0aWMgVGltZXJRdWV1ZSAqdGltZXJfcXVldWVfbmV3ICh2b2lkKTsKLXN0YXRpYyB2b2lkIHRpbWVyX3F1ZXVlX2ZyZWUgKFRpbWVyUXVldWUgKiBxdWV1ZSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfY2xhc3NfaW5pdCAoR3N0UnRwSml0dGVyQnVmZmVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSkpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2ZpbmFsaXplOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjpsYXRlbmN5OgotICAgKgotICAgKiBUaGUgbWF4aW11bSBsYXRlbmN5IG9mIHRoZSBqaXR0ZXJidWZmZXIuIFBhY2tldHMgd2lsbCBiZSBrZXB0IGluIHRoZSBidWZmZXIKLSAgICogZm9yIGF0IG1vc3QgdGhpcyB0aW1lLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MQVRFTkNZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJsYXRlbmN5IiwgIkJ1ZmZlciBsYXRlbmN5IGluIG1zIiwKLSAgICAgICAgICAiQW1vdW50IG9mIG1zIHRvIGJ1ZmZlciIsIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9MQVRFTkNZX01TLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0UnRwSml0dGVyQnVmZmVyOmRyb3Atb24tbGF0ZW5jeToKLSAgICoKLSAgICogRHJvcCBvbGRlc3QgYnVmZmVycyB3aGVuIHRoZSBxdWV1ZSBpcyBjb21wbGV0ZWx5IGZpbGxlZC4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRFJPUF9PTl9MQVRFTkNZLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJkcm9wLW9uLWxhdGVuY3kiLAotICAgICAgICAgICJEcm9wIGJ1ZmZlcnMgd2hlbiBtYXhpbXVtIGxhdGVuY3kgaXMgcmVhY2hlZCIsCi0gICAgICAgICAgIlRlbGxzIHRoZSBqaXR0ZXJidWZmZXIgdG8gbmV2ZXIgZXhjZWVkIHRoZSBnaXZlbiBsYXRlbmN5IGluIHNpemUiLAotICAgICAgICAgIERFRkFVTFRfRFJPUF9PTl9MQVRFTkNZLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjp0cy1vZmZzZXQ6Ci0gICAqCi0gICAqIEFkanVzdCBHU3RyZWFtZXIgb3V0cHV0IGJ1ZmZlciB0aW1lc3RhbXBzIGluIHRoZSBqaXR0ZXJidWZmZXIgd2l0aCBvZmZzZXQuCi0gICAqIFRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZW5zdXJlIGludGVyc3RyZWFtIHN5bmNocm9uaXNhdGlvbi4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVFNfT0ZGU0VULAotICAgICAgZ19wYXJhbV9zcGVjX2ludDY0ICgidHMtb2Zmc2V0IiwgIlRpbWVzdGFtcCBPZmZzZXQiLAotICAgICAgICAgICJBZGp1c3QgYnVmZmVyIHRpbWVzdGFtcHMgd2l0aCBvZmZzZXQgaW4gbmFub3NlY29uZHMiLCBHX01JTklOVDY0LAotICAgICAgICAgIEdfTUFYSU5UNjQsIERFRkFVTFRfVFNfT0ZGU0VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6ZG8tbG9zdDoKLSAgICoKLSAgICogU2VuZCBvdXQgYSBHc3RSVFBQYWNrZXRMb3N0IGV2ZW50IGRvd25zdHJlYW0gd2hlbiBhIHBhY2tldCBpcyBjb25zaWRlcmVkCi0gICAqIGxvc3QuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RPX0xPU1QsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRvLWxvc3QiLCAiRG8gTG9zdCIsCi0gICAgICAgICAgIlNlbmQgYW4gZXZlbnQgZG93bnN0cmVhbSB3aGVuIGEgcGFja2V0IGlzIGxvc3QiLCBERUZBVUxUX0RPX0xPU1QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjptb2RlOgotICAgKgotICAgKiBDb250cm9sIHRoZSBidWZmZXJpbmcgYW5kIHRpbWVzdGFtcGluZyBtb2RlIHVzZWQgYnkgdGhlIGppdHRlcmJ1ZmZlci4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibW9kZSIsICJNb2RlIiwKLSAgICAgICAgICAiQ29udHJvbCB0aGUgYnVmZmVyaW5nIGFsZ29yaXRobSBpbiB1c2UiLCBSVFBfVFlQRV9KSVRURVJfQlVGRkVSX01PREUsCi0gICAgICAgICAgREVGQVVMVF9NT0RFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjpwZXJjZW50OgotICAgKgotICAgKiBUaGUgcGVyY2VudCBvZiB0aGUgaml0dGVyYnVmZmVyIHRoYXQgaXMgZmlsbGVkLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QRVJDRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInBlcmNlbnQiLCAicGVyY2VudCIsCi0gICAgICAgICAgIlRoZSBidWZmZXIgZmlsbGVkIHBlcmNlbnQiLCAwLCAxMDAsCi0gICAgICAgICAgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjpkby1yZXRyYW5zbWlzc2lvbjoKLSAgICoKLSAgICogU2VuZCBvdXQgYSBHc3RSVFBSZXRyYW5zbWlzc2lvbiBldmVudCB1cHN0cmVhbSB3aGVuIGEgcGFja2V0IGlzIGNvbnNpZGVyZWQKLSAgICogbGF0ZSBhbmQgc2hvdWxkIGJlIHJldHJhbnNtaXR0ZWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjIKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9fUkVUUkFOU01JU1NJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRvLXJldHJhbnNtaXNzaW9uIiwgIkRvIFJldHJhbnNtaXNzaW9uIiwKLSAgICAgICAgICAiU2VuZCByZXRyYW5zbWlzc2lvbiBldmVudHMgdXBzdHJlYW0gd2hlbiBhIHBhY2tldCBpcyBsYXRlIiwKLSAgICAgICAgICBERUZBVUxUX0RPX1JFVFJBTlNNSVNTSU9OLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6cnR4LW5leHQtc2VxbnVtCi0gICAqCi0gICAqIEVzdGltYXRlIHdoZW4gdGhlIG5leHQgcGFja2V0IHNob3VsZCBhcnJpdmUgYW5kIHNjaGVkdWxlIGEgcmV0cmFuc21pc3Npb24KLSAgICogcmVxdWVzdCBmb3IgaXQuCi0gICAqIFRoaXMgaXMsIHdoZW4gcGFja2V0IE4gYXJyaXZlcywgYSBHc3RSVFBSZXRyYW5zbWlzc2lvbiBldmVudCBpcyBzY2hlZHVsZQotICAgKiBmb3IgcGFja2V0IE4rMS4gU28gaXQgd2lsbCBiZSByZXF1ZXN0ZWQgaWYgaXQgZG9lcyBub3QgYXJyaXZlIGF0IHRoZSBleHBlY3RlZCB0aW1lLgotICAgKiBUaGUgZXhwZWN0ZWQgdGltZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBkdHMgb2YgTiBhbmQgdGhlIHBhY2tldCBzcGFjaW5nLgotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUWF9ORVhUX1NFUU5VTSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicnR4LW5leHQtc2VxbnVtIiwgIlJUWCBuZXh0IHNlcW51bSIsCi0gICAgICAgICAgIkVzdGltYXRlIHdoZW4gdGhlIG5leHQgcGFja2V0IHNob3VsZCBhcnJpdmUgYW5kIHNjaGVkdWxlIGEgIgotICAgICAgICAgICJyZXRyYW5zbWlzc2lvbiByZXF1ZXN0IGZvciBpdC4iLAotICAgICAgICAgIERFRkFVTFRfUlRYX05FWFRfU0VRTlVNLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UnRwSml0dGVyQnVmZmVyOnJ0eC1kZWxheToKLSAgICoKLSAgICogV2hlbiBhIHBhY2tldCBkaWQgbm90IGFycml2ZSBhdCB0aGUgZXhwZWN0ZWQgdGltZSwgd2FpdCB0aGlzIGV4dHJhIGFtb3VudAotICAgKiBvZiB0aW1lIGJlZm9yZSBzZW5kaW5nIGEgcmV0cmFuc21pc3Npb24gZXZlbnQuCi0gICAqCi0gICAqIFdoZW4gLTEgaXMgdXNlZCwgdGhlIG1heCBqaXR0ZXIgd2lsbCBiZSB1c2VkIGFzIGV4dHJhIGRlbGF5LgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUWF9ERUxBWSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJydHgtZGVsYXkiLCAiUlRYIERlbGF5IiwKLSAgICAgICAgICAiRXh0cmEgdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBzZW5kaW5nIHJldHJhbnNtaXNzaW9uICIKLSAgICAgICAgICAiZXZlbnQgKC0xIGF1dG9tYXRpYykiLCAtMSwgR19NQVhJTlQsIERFRkFVTFRfUlRYX0RFTEFZLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6cnR4LW1pbi1kZWxheToKLSAgICoKLSAgICogV2hlbiBhIHBhY2tldCBkaWQgbm90IGFycml2ZSBhdCB0aGUgZXhwZWN0ZWQgdGltZSwgd2FpdCBhdCBsZWFzdCB0aGlzIGV4dHJhIGFtb3VudAotICAgKiBvZiB0aW1lIGJlZm9yZSBzZW5kaW5nIGEgcmV0cmFuc21pc3Npb24gZXZlbnQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRYX01JTl9ERUxBWSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgicnR4LW1pbi1kZWxheSIsICJNaW5pbXVtIFJUWCBEZWxheSIsCi0gICAgICAgICAgIk1pbmltdW0gdGltZSBpbiBtcyB0byB3YWl0IGJlZm9yZSBzZW5kaW5nIHJldHJhbnNtaXNzaW9uICIKLSAgICAgICAgICAiZXZlbnQiLCAwLCBHX01BWFVJTlQsIERFRkFVTFRfUlRYX01JTl9ERUxBWSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjpydHgtZGVsYXktcmVvcmRlcjoKLSAgICoKLSAgICogQXNzdW1lIHRoYXQgYSByZXRyYW5zbWlzc2lvbiBldmVudCBzaG91bGQgYmUgc2VudCB3aGVuIHdlIHNlZQotICAgKiB0aGlzIG11Y2ggcGFja2V0IHJlb3JkZXJpbmcuCi0gICAqCi0gICAqIFdoZW4gLTEgaXMgdXNlZCwgdGhlIHZhbHVlIHdpbGwgYmUgZXN0aW1hdGVkIGJhc2VkIG9uIG9ic2VydmVkIHBhY2tldAotICAgKiByZW9yZGVyaW5nLiBXaGVuIDAgaXMgdXNlZCBwYWNrZXQgcmVvcmRlcmluZyBhbG9uZSB3aWxsIG5vdCBjYXVzZSBhCi0gICAqIHJldHJhbnNtaXNzaW9uIGV2ZW50IChTaW5jZSAxLjEwKS4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFhfREVMQVlfUkVPUkRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJydHgtZGVsYXktcmVvcmRlciIsICJSVFggRGVsYXkgUmVvcmRlciIsCi0gICAgICAgICAgIlNlbmRpbmcgcmV0cmFuc21pc3Npb24gZXZlbnQgd2hlbiB0aGlzIG11Y2ggcmVvcmRlcmluZyAiCi0gICAgICAgICAgIigwIGRpc2FibGUsIC0xIGF1dG9tYXRpYykiLAotICAgICAgICAgIC0xLCBHX01BWElOVCwgREVGQVVMVF9SVFhfREVMQVlfUkVPUkRFUiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LXJldHJ5LXRpbWVvdXQ6Ci0gICAqCi0gICAqIFdoZW4gbm8gcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkIGFmdGVyIHNlbmRpbmcgYSByZXRyYW5zbWlzc2lvbiBldmVudAotICAgKiBmb3IgdGhpcyB0aW1lLCByZXRyeSBzZW5kaW5nIGEgcmV0cmFuc21pc3Npb24gZXZlbnQuCi0gICAqCi0gICAqIFdoZW4gLTEgaXMgdXNlZCwgdGhlIHZhbHVlIHdpbGwgYmUgZXN0aW1hdGVkIGJhc2VkIG9uIG9ic2VydmVkIHJvdW5kCi0gICAqIHRyaXAgdGltZS4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFhfUkVUUllfVElNRU9VVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJydHgtcmV0cnktdGltZW91dCIsICJSVFggUmV0cnkgVGltZW91dCIsCi0gICAgICAgICAgIlJldHJ5IHNlbmRpbmcgYSB0cmFuc21pc3Npb24gZXZlbnQgYWZ0ZXIgdGhpcyB0aW1lb3V0IGluICIKLSAgICAgICAgICAibXMgKC0xIGF1dG9tYXRpYykiLCAtMSwgR19NQVhJTlQsIERFRkFVTFRfUlRYX1JFVFJZX1RJTUVPVVQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6OnJ0eC1taW4tcmV0cnktdGltZW91dDoKLSAgICoKLSAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiByZXRyeSB0aW1lb3V0cy4gV2hlbgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6OnJ0eC1yZXRyeS10aW1lb3V0IGlzIC0xLCB0aGlzIHZhbHVlIGVuc3VyZXMgYQotICAgKiBtaW5pbXVtIGludGVydmFsIGJldHdlZW4gcmV0cnkgdGltZW91dHMuCi0gICAqCi0gICAqIFdoZW4gLTEgaXMgdXNlZCwgdGhlIHZhbHVlIHdpbGwgYmUgZXN0aW1hdGVkIGJhc2VkIG9uIHRoZQotICAgKiBwYWNrZXQgc3BhY2luZy4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFhfTUlOX1JFVFJZX1RJTUVPVVQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicnR4LW1pbi1yZXRyeS10aW1lb3V0IiwgIlJUWCBNaW4gUmV0cnkgVGltZW91dCIsCi0gICAgICAgICAgIk1pbmltdW0gdGltZW91dCBiZXR3ZWVuIHNlbmRpbmcgYSB0cmFuc21pc3Npb24gZXZlbnQgaW4gIgotICAgICAgICAgICJtcyAoLTEgYXV0b21hdGljKSIsIC0xLCBHX01BWElOVCwgREVGQVVMVF9SVFhfTUlOX1JFVFJZX1RJTUVPVVQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6cnR4LXJldHJ5LXBlcmlvZDoKLSAgICoKLSAgICogVGhlIGFtb3VudCBvZiB0aW1lIHRvIHRyeSB0byBnZXQgYSByZXRyYW5zbWlzc2lvbi4KLSAgICoKLSAgICogV2hlbiAtMSBpcyB1c2VkLCB0aGUgdmFsdWUgd2lsbCBiZSBlc3RpbWF0ZWQgYmFzZWQgb24gdGhlIGppdHRlcmJ1ZmZlcgotICAgKiBsYXRlbmN5IGFuZCB0aGUgb2JzZXJ2ZWQgcm91bmQgdHJpcCB0aW1lLgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUWF9SRVRSWV9QRVJJT0QsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicnR4LXJldHJ5LXBlcmlvZCIsICJSVFggUmV0cnkgUGVyaW9kIiwKLSAgICAgICAgICAiVHJ5IHRvIGdldCBhIHJldHJhbnNtaXNzaW9uIGZvciB0aGlzIG1hbnkgbXMgIgotICAgICAgICAgICIoLTEgYXV0b21hdGljKSIsIC0xLCBHX01BWElOVCwgREVGQVVMVF9SVFhfUkVUUllfUEVSSU9ELAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0UnRwSml0dGVyQnVmZmVyOnJ0eC1tYXgtcmV0cmllczoKLSAgICoKLSAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgdG8gcmVxdWVzdCBhIHJldHJhbnNtaXNzaW9uLgotICAgKgotICAgKiBUaGlzIGltcGxpZXMgdGhhdCBhcyBtYXhpbXVtIChydHgtbWF4LXJldHJpZXMgKyAxKSByZXRyYW5zbWlzc2lvbnMgd2lsbCBiZSByZXF1ZXN0ZWQuCi0gICAqIFdoZW4gLTEgaXMgdXNlZCwgdGhlIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbiByZXF1ZXN0IHdpbGwgbm90IGJlIGxpbWl0ZWQuCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRYX01BWF9SRVRSSUVTLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInJ0eC1tYXgtcmV0cmllcyIsICJSVFggTWF4IFJldHJpZXMiLAotICAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyB0byByZXF1ZXN0IGEgcmV0cmFuc21pc3Npb24uICIKLSAgICAgICAgICAiKC0xIG5vdCBsaW1pdGVkKSIsIC0xLCBHX01BWElOVCwgREVGQVVMVF9SVFhfTUFYX1JFVFJJRVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6cnR4LWRlYWRsaW5lOgotICAgKgotICAgKiBUaGUgZGVhZGxpbmUgZm9yIGEgdmFsaWQgUlRYIHJlcXVlc3QgaW4gbXMuCi0gICAqCi0gICAqIEhvdyBsb25nIHRoZSBSVFggUlRDUCB3aWxsIGJlIHZhbGlkIGZvci4KLSAgICogV2hlbiAtMSBpcyB1c2VkLCB0aGUgc2l6ZSBvZiB0aGUgaml0dGVyYnVmZmVyIHdpbGwgYmUgdXNlZC4KLSAgICoKLSAgICogU2luY2U6IDEuMTAKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRYX0RFQURMSU5FLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInJ0eC1kZWFkbGluZSIsICJSVFggRGVhZGxpbmUgKG1zKSIsCi0gICAgICAgICAgIlRoZSBkZWFkbGluZSBmb3IgYSB2YWxpZCBSVFggcmVxdWVzdCBpbiBtaWxsaXNlY29uZHMuICIKLSAgICAgICAgICAiKC0xIGF1dG9tYXRpYykiLCAtMSwgR19NQVhJTlQsIERFRkFVTFRfUlRYX0RFQURMSU5FLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjo6cnR4LXN0YXRzLXRpbWVvdXQ6Ci0gICAqCi0gICAqIFRoZSB0aW1lIHRvIHdhaXQgZm9yIGEgcmV0cmFuc21pdHRlZCBwYWNrZXQgYWZ0ZXIgaXQgaGFzIGJlZW4KLSAgICogY29uc2lkZXJlZCBsb3N0IGluIG9yZGVyIHRvIGNvbGxlY3QgUlRYIHN0YXRpc3RpY3MuCi0gICAqCi0gICAqIFNpbmNlOiAxLjEwCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUWF9TVEFUU19USU1FT1VULAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJydHgtc3RhdHMtdGltZW91dCIsICJSVFggU3RhdGlzdGljcyBUaW1lb3V0IiwKLSAgICAgICAgICAiVGhlIHRpbWUgdG8gd2FpdCBmb3IgYSByZXRyYW5zbWl0dGVkIHBhY2tldCBhZnRlciBpdCBoYXMgYmVlbiAiCi0gICAgICAgICAgImNvbnNpZGVyZWQgbG9zdCBpbiBvcmRlciB0byBjb2xsZWN0IHN0YXRpc3RpY3MgKG1zKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX1JUWF9TVEFUU19USU1FT1VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX0RST1BPVVRfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LWRyb3BvdXQtdGltZSIsICJNYXggZHJvcG91dCB0aW1lIiwKLSAgICAgICAgICAiVGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNzaW5nIHBhY2tldHMgdG9sZXJhdGVkLiIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX01BWF9EUk9QT1VUX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfTUlTT1JERVJfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LW1pc29yZGVyLXRpbWUiLCAiTWF4IG1pc29yZGVyIHRpbWUiLAotICAgICAgICAgICJUaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc29yZGVyZWQgcGFja2V0cyB0b2xlcmF0ZWQuIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX01JU09SREVSX1RJTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6c3RhdHM6Ci0gICAqCi0gICAqIFZhcmlvdXMgaml0dGVyYnVmZmVyIHN0YXRpc3RpY3MuIFRoaXMgcHJvcGVydHkgcmV0dXJucyBhIEdzdFN0cnVjdHVyZQotICAgKiB3aXRoIG5hbWUgYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6Ci0gICAqCi0gICAqIDxpdGVtaXplZGxpc3Q+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogICA8cGFyYT4KLSAgICogICAjZ3VpbnQ2NAotICAgKiAgIDxjbGFzc25hbWU+JnF1b3Q7bnVtLXB1c2hlZCZxdW90OzwvY2xhc3NuYW1lPjoKLSAgICogICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcHVzaGVkIG91dC4KLSAgICogICA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogICA8cGFyYT4KLSAgICogICAjZ3VpbnQ2NAotICAgKiAgIDxjbGFzc25hbWU+JnF1b3Q7bnVtLWxvc3QmcXVvdDs8L2NsYXNzbmFtZT46Ci0gICAqICAgdGhlIG51bWJlciBvZiBwYWNrZXRzIGNvbnNpZGVyZWQgbG9zdC4KLSAgICogICA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogICA8cGFyYT4KLSAgICogICAjZ3VpbnQ2NAotICAgKiAgIDxjbGFzc25hbWU+JnF1b3Q7bnVtLWxhdGUmcXVvdDs8L2NsYXNzbmFtZT46Ci0gICAqICAgdGhlIG51bWJlciBvZiBwYWNrZXRzIGFycml2aW5nIHRvbyBsYXRlLgotICAgKiAgIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPGxpc3RpdGVtPgotICAgKiAgIDxwYXJhPgotICAgKiAgICNndWludDY0Ci0gICAqICAgPGNsYXNzbmFtZT4mcXVvdDtudW0tZHVwbGljYXRlcyZxdW90OzwvY2xhc3NuYW1lPjoKLSAgICogICB0aGUgbnVtYmVyIG9mIGR1cGxpY2F0ZSBwYWNrZXRzLgotICAgKiAgIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPGxpc3RpdGVtPgotICAgKiAgIDxwYXJhPgotICAgKiAgICNndWludDY0Ci0gICAqICAgPGNsYXNzbmFtZT4mcXVvdDtydHgtY291bnQmcXVvdDs8L2NsYXNzbmFtZT46Ci0gICAqICAgdGhlIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgcmVxdWVzdGVkLgotICAgKiAgIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPGxpc3RpdGVtPgotICAgKiAgIDxwYXJhPgotICAgKiAgICNndWludDY0Ci0gICAqICAgPGNsYXNzbmFtZT4mcXVvdDtydHgtc3VjY2Vzcy1jb3VudCZxdW90OzwvY2xhc3NuYW1lPjoKLSAgICogICB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgcmV0cmFuc21pc3Npb25zLgotICAgKiAgIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPGxpc3RpdGVtPgotICAgKiAgIDxwYXJhPgotICAgKiAgICNnZG91YmxlCi0gICAqICAgPGNsYXNzbmFtZT4mcXVvdDtydHgtcGVyLXBhY2tldCZxdW90OzwvY2xhc3NuYW1lPjoKLSAgICogICBhdmVyYWdlIG51bWJlciBvZiBSVFggcGVyIHBhY2tldC4KLSAgICogICA8L3BhcmE+Ci0gICAqIDwvbGlzdGl0ZW0+Ci0gICAqIDxsaXN0aXRlbT4KLSAgICogICA8cGFyYT4KLSAgICogICAjZ3VpbnQ2NAotICAgKiAgIDxjbGFzc25hbWU+JnF1b3Q7cnR4LXJ0dCZxdW90OzwvY2xhc3NuYW1lPjoKLSAgICogICBhdmVyYWdlIHJvdW5kIHRyaXAgdGltZSBwZXIgUlRYLgotICAgKiAgIDwvcGFyYT4KLSAgICogPC9saXN0aXRlbT4KLSAgICogPC9pdGVtaXplZGxpc3Q+Ci0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJzdGF0cyIsICJTdGF0aXN0aWNzIiwKLSAgICAgICAgICAiVmFyaW91cyBzdGF0aXN0aWNzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjptYXgtcnRjcC1ydHAtdGltZS1kaWZmCi0gICAqCi0gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIGluIG1zIHRoYXQgdGhlIFJUUCB0aW1lIGluIHRoZSBSVENQIFNScwotICAgKiBpcyBhbGxvd2VkIHRvIGJlIGFoZWFkIG9mIHRoZSBsYXN0IFJUUCBwYWNrZXQgd2UgcmVjZWl2ZWQuIFVzZQotICAgKiAtMSB0byBkaXNhYmxlIGlnbm9yaW5nIG9mIFJUQ1AgcGFja2V0cy4KLSAgICoKLSAgICogU2luY2U6IDEuOAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm1heC1ydGNwLXJ0cC10aW1lLWRpZmYiLCAiTWF4IFJUQ1AgUlRQIFRpbWUgRGlmZiIsCi0gICAgICAgICAgIk1heGltdW0gYW1vdW50IG9mIHRpbWUgaW4gbXMgdGhhdCB0aGUgUlRQIHRpbWUgaW4gUlRDUCBTUnMgIgotICAgICAgICAgICJpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkiLCAtMSwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkZDNzI3M19TWU5DLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJyZmM3MjczLXN5bmMiLCAiU3luYyBvbiBSRkM3MjczIGNsb2NrIiwKLSAgICAgICAgICAiU3luY2hyb25pemUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgUkZDNzI3MyBjbG9jayAiCi0gICAgICAgICAgIihyZXF1aXJlcyBjbG9jayBhbmQgb2Zmc2V0IHRvIGJlIHByb3ZpZGVkKSIsIERFRkFVTFRfUkZDNzI3M19TWU5DLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6OnJlcXVlc3QtcHQtbWFwOgotICAgKiBAYnVmZmVyOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHB0OiB0aGUgcHQKLSAgICoKLSAgICogUmVxdWVzdCB0aGUgcGF5bG9hZCB0eXBlIGFzICNHc3RDYXBzIGZvciBAcHQuCi0gICAqLwotICBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lnbmFsc1tTSUdOQUxfUkVRVUVTVF9QVF9NQVBdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJlcXVlc3QtcHQtbWFwIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEppdHRlckJ1ZmZlckNsYXNzLAotICAgICAgICAgIHJlcXVlc3RfcHRfbWFwKSwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsCi0gICAgICBHU1RfVFlQRV9DQVBTLCAxLCBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBKaXR0ZXJCdWZmZXI6OmhhbmRsZS1zeW5jOgotICAgKiBAYnVmZmVyOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHN0cnVjdDogYSBHc3RTdHJ1Y3R1cmUgY29udGFpbmluZyBzeW5jIHZhbHVlcy4KLSAgICoKLSAgICogQmUgbm90aWZpZWQgb2YgbmV3IHN5bmMgdmFsdWVzLgotICAgKi8KLSAgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpZ25hbHNbU0lHTkFMX0hBTkRMRV9TWU5DXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJoYW5kbGUtc3luYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBKaXR0ZXJCdWZmZXJDbGFzcywKLSAgICAgICAgICBoYW5kbGVfc3luYyksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT1hFRCwKLSAgICAgIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9TVFJVQ1RVUkUgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjo6b24tbnB0LXN0b3A6Ci0gICAqIEBidWZmZXI6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKgotICAgKiBTaWduYWwgdGhhdCB0aGUgaml0dGVyYnVmZXIgaGFzIHB1c2hlZCB0aGUgUlRQIHBhY2tldCB0aGF0IGNvcnJlc3BvbmRzIHRvCi0gICAqIHRoZSBucHQtc3RvcCBwb3NpdGlvbi4KLSAgICovCi0gIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaWduYWxzW1NJR05BTF9PTl9OUFRfU1RPUF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tbnB0LXN0b3AiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwSml0dGVyQnVmZmVyQ2xhc3MsCi0gICAgICAgICAgb25fbnB0X3N0b3ApLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKLSAgICAgIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjo6Y2xlYXItcHQtbWFwOgotICAgKiBAYnVmZmVyOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICoKLSAgICogSW52YWxpZGF0ZSB0aGUgY2xvY2stcmF0ZSBhcyBvYnRhaW5lZCB3aXRoIHRoZQotICAgKiAjR3N0UnRwSml0dGVyQnVmZmVyOjpyZXF1ZXN0LXB0LW1hcCBzaWduYWwuCi0gICAqLwotICBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lnbmFsc1tTSUdOQUxfQ0xFQVJfUFRfTUFQXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJjbGVhci1wdC1tYXAiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04sCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cEppdHRlckJ1ZmZlckNsYXNzLCBjbGVhcl9wdF9tYXApLCBOVUxMLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwLCBHX1RZUEVfTk9ORSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cEppdHRlckJ1ZmZlcjo6c2V0LWFjdGl2ZToKLSAgICogQGJ1ZmZlcjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqCi0gICAqIFN0YXJ0IHB1c2hpbmcgb3V0IHBhY2tldHMgd2l0aCB0aGUgZ2l2ZW4gYmFzZSB0aW1lLiBUaGlzIHNpZ25hbCBpcyBvbmx5Ci0gICAqIHVzZWZ1bCBpbiBidWZmZXJpbmcgbW9kZS4KLSAgICoKLSAgICogUmV0dXJuczogdGhlIHRpbWUgb2YgdGhlIGxhc3QgcHVzaGVkIHBhY2tldC4KLSAgICovCi0gIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaWduYWxzW1NJR05BTF9TRVRfQUNUSVZFXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJzZXQtYWN0aXZlIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OLAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBKaXR0ZXJCdWZmZXJDbGFzcywgc2V0X2FjdGl2ZSksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX1VJTlQ2NCwgMiwgR19UWVBFX0JPT0xFQU4sCi0gICAgICBHX1RZUEVfVUlOVDY0KTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFuZ2Vfc3RhdGUpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3JlbGVhc2VfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cHJvdmlkZV9jbG9jayA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3Byb3ZpZGVfY2xvY2spOwotICBnc3RlbGVtZW50X2NsYXNzLT5zZXRfY2xvY2sgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfY2xvY2spOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaW5rX3J0Y3BfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUlRQIHBhY2tldCBqaXR0ZXItYnVmZmVyIiwgIkZpbHRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiQSBidWZmZXIgdGhhdCBkZWFscyB3aXRoIG5ldHdvcmsgaml0dGVyIGFuZCBvdGhlciB0cmFuc21pc3Npb24gZmF1bHRzIiwKLSAgICAgICJQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPiwgIgotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAga2xhc3MtPmNsZWFyX3B0X21hcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2xlYXJfcHRfbWFwKTsKLSAga2xhc3MtPnNldF9hY3RpdmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NldF9hY3RpdmUpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUCi0gICAgICAocnRwaml0dGVyYnVmZmVyX2RlYnVnLCAicnRwaml0dGVyYnVmZmVyIiwgMCwgIlJUUCBKaXR0ZXIgQnVmZmVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfaW5pdCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBHU1RfUlRQX0pJVFRFUl9CVUZGRVJfR0VUX1BSSVZBVEUgKGppdHRlcmJ1ZmZlcik7Ci0gIGppdHRlcmJ1ZmZlci0+cHJpdiA9IHByaXY7Ci0KLSAgcHJpdi0+bGF0ZW5jeV9tcyA9IERFRkFVTFRfTEFURU5DWV9NUzsKLSAgcHJpdi0+bGF0ZW5jeV9ucyA9IHByaXYtPmxhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORDsKLSAgcHJpdi0+ZHJvcF9vbl9sYXRlbmN5ID0gREVGQVVMVF9EUk9QX09OX0xBVEVOQ1k7Ci0gIHByaXYtPmRvX2xvc3QgPSBERUZBVUxUX0RPX0xPU1Q7Ci0gIHByaXYtPmRvX3JldHJhbnNtaXNzaW9uID0gREVGQVVMVF9ET19SRVRSQU5TTUlTU0lPTjsKLSAgcHJpdi0+cnR4X25leHRfc2VxbnVtID0gREVGQVVMVF9SVFhfTkVYVF9TRVFOVU07Ci0gIHByaXYtPnJ0eF9kZWxheSA9IERFRkFVTFRfUlRYX0RFTEFZOwotICBwcml2LT5ydHhfbWluX2RlbGF5ID0gREVGQVVMVF9SVFhfTUlOX0RFTEFZOwotICBwcml2LT5ydHhfZGVsYXlfcmVvcmRlciA9IERFRkFVTFRfUlRYX0RFTEFZX1JFT1JERVI7Ci0gIHByaXYtPnJ0eF9yZXRyeV90aW1lb3V0ID0gREVGQVVMVF9SVFhfUkVUUllfVElNRU9VVDsKLSAgcHJpdi0+cnR4X21pbl9yZXRyeV90aW1lb3V0ID0gREVGQVVMVF9SVFhfTUlOX1JFVFJZX1RJTUVPVVQ7Ci0gIHByaXYtPnJ0eF9yZXRyeV9wZXJpb2QgPSBERUZBVUxUX1JUWF9SRVRSWV9QRVJJT0Q7Ci0gIHByaXYtPnJ0eF9tYXhfcmV0cmllcyA9IERFRkFVTFRfUlRYX01BWF9SRVRSSUVTOwotICBwcml2LT5ydHhfZGVhZGxpbmVfbXMgPSBERUZBVUxUX1JUWF9ERUFETElORTsKLSAgcHJpdi0+cnR4X3N0YXRzX3RpbWVvdXQgPSBERUZBVUxUX1JUWF9TVEFUU19USU1FT1VUOwotICBwcml2LT5tYXhfcnRjcF9ydHBfdGltZV9kaWZmID0gREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGOwotICBwcml2LT5tYXhfZHJvcG91dF90aW1lID0gREVGQVVMVF9NQVhfRFJPUE9VVF9USU1FOwotICBwcml2LT5tYXhfbWlzb3JkZXJfdGltZSA9IERFRkFVTFRfTUFYX01JU09SREVSX1RJTUU7Ci0KLSAgcHJpdi0+bGFzdF9kdHMgPSAtMTsKLSAgcHJpdi0+bGFzdF9ydHB0aW1lID0gLTE7Ci0gIHByaXYtPmF2Z19qaXR0ZXIgPSAwOwotICBwcml2LT50aW1lcnMgPSBnX2FycmF5X25ldyAoRkFMU0UsIFRSVUUsIHNpemVvZiAoVGltZXJEYXRhKSk7Ci0gIHByaXYtPnJ0eF9zdGF0c190aW1lcnMgPSB0aW1lcl9xdWV1ZV9uZXcgKCk7Ci0gIHByaXYtPmpidWYgPSBydHBfaml0dGVyX2J1ZmZlcl9uZXcgKCk7Ci0gIGdfbXV0ZXhfaW5pdCAoJnByaXYtPmpidWZfbG9jayk7Ci0gIGdfY29uZF9pbml0ICgmcHJpdi0+amJ1Zl90aW1lcik7Ci0gIGdfY29uZF9pbml0ICgmcHJpdi0+amJ1Zl9ldmVudCk7Ci0gIGdfY29uZF9pbml0ICgmcHJpdi0+amJ1Zl9xdWVyeSk7Ci0gIGdfcXVldWVfaW5pdCAoJnByaXYtPmdhcF9wYWNrZXRzKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnByaXYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgLyogcmVzZXQgc2tldyBkZXRlY3Rpb24gaW5pdGlhbHkgKi8KLSAgcnRwX2ppdHRlcl9idWZmZXJfcmVzZXRfc2tldyAocHJpdi0+amJ1Zik7Ci0gIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9kZWxheSAocHJpdi0+amJ1ZiwgcHJpdi0+bGF0ZW5jeV9ucyk7Ci0gIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9idWZmZXJpbmcgKHByaXYtPmpidWYsIEZBTFNFKTsKLSAgcHJpdi0+YWN0aXZlID0gVFJVRTsKLQotICBwcml2LT5zcmNwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZnc3RfcnRwX2ppdHRlcl9idWZmZXJfc3JjX3RlbXBsYXRlLAotICAgICAgInNyYyIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAocHJpdi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zcmNfYWN0aXZhdGVfbW9kZSkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocHJpdi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zcmNfcXVlcnkpKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHByaXYtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfc3JjX2V2ZW50KSk7Ci0KLSAgcHJpdi0+c2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJmdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaW5rX3RlbXBsYXRlLAotICAgICAgInNpbmsiKTsKLQotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocHJpdi0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHByaXYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHByaXYtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfcXVlcnkpKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoaml0dGVyYnVmZmVyKSwgcHJpdi0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKGppdHRlcmJ1ZmZlciksIHByaXYtPnNpbmtwYWQpOwotCi0gIEdTVF9PQkpFQ1RfRkxBR19TRVQgKGppdHRlcmJ1ZmZlciwgR1NUX0VMRU1FTlRfRkxBR19QUk9WSURFX0NMT0NLKTsKLX0KLQotI2RlZmluZSBJU19EUk9QQUJMRShpdCkgKCgoaXQpLT50eXBlID09IElURU1fVFlQRV9CVUZGRVIpIHx8ICgoaXQpLT50eXBlID09IElURU1fVFlQRV9MT1NUKSkKLQotI2RlZmluZSBJVEVNX1RZUEVfQlVGRkVSICAgICAgICAwCi0jZGVmaW5lIElURU1fVFlQRV9MT1NUICAgICAgICAgIDEKLSNkZWZpbmUgSVRFTV9UWVBFX0VWRU5UICAgICAgICAgMgotI2RlZmluZSBJVEVNX1RZUEVfUVVFUlkgICAgICAgICAzCi0KLXN0YXRpYyBSVFBKaXR0ZXJCdWZmZXJJdGVtICoKLWFsbG9jX2l0ZW0gKGdwb2ludGVyIGRhdGEsIGd1aW50IHR5cGUsIEdzdENsb2NrVGltZSBkdHMsIEdzdENsb2NrVGltZSBwdHMsCi0gICAgZ3VpbnQgc2VxbnVtLCBndWludCBjb3VudCwgZ3VpbnQgcnRwdGltZSkKLXsKLSAgUlRQSml0dGVyQnVmZmVySXRlbSAqaXRlbTsKLQotICBpdGVtID0gZ19zbGljZV9uZXcgKFJUUEppdHRlckJ1ZmZlckl0ZW0pOwotICBpdGVtLT5kYXRhID0gZGF0YTsKLSAgaXRlbS0+bmV4dCA9IE5VTEw7Ci0gIGl0ZW0tPnByZXYgPSBOVUxMOwotICBpdGVtLT50eXBlID0gdHlwZTsKLSAgaXRlbS0+ZHRzID0gZHRzOwotICBpdGVtLT5wdHMgPSBwdHM7Ci0gIGl0ZW0tPnNlcW51bSA9IHNlcW51bTsKLSAgaXRlbS0+Y291bnQgPSBjb3VudDsKLSAgaXRlbS0+cnRwdGltZSA9IHJ0cHRpbWU7Ci0KLSAgcmV0dXJuIGl0ZW07Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2l0ZW0gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKiBpdGVtKQotewotICBnX3JldHVybl9pZl9mYWlsIChpdGVtICE9IE5VTEwpOwotCi0gIGlmIChpdGVtLT5kYXRhICYmIGl0ZW0tPnR5cGUgIT0gSVRFTV9UWVBFX1FVRVJZKQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoaXRlbS0+ZGF0YSk7Ci0gIGdfc2xpY2VfZnJlZSAoUlRQSml0dGVyQnVmZmVySXRlbSwgaXRlbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mcmVlX2l0ZW1fYW5kX3JldGFpbl9ldmVudHMgKFJUUEppdHRlckJ1ZmZlckl0ZW0gKiBpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdMaXN0ICoqbCA9IHVzZXJfZGF0YTsKLQotICBpZiAoaXRlbS0+ZGF0YSAmJiBpdGVtLT50eXBlID09IElURU1fVFlQRV9FVkVOVAotICAgICAgJiYgR1NUX0VWRU5UX0lTX1NUSUNLWSAoaXRlbS0+ZGF0YSkpIHsKLSAgICAqbCA9IGdfbGlzdF9wcmVwZW5kICgqbCwgaXRlbS0+ZGF0YSk7Ci0gIH0gZWxzZSBpZiAoaXRlbS0+ZGF0YSAmJiBpdGVtLT50eXBlICE9IElURU1fVFlQRV9RVUVSWSkgewotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoaXRlbS0+ZGF0YSk7Ci0gIH0KLSAgZ19zbGljZV9mcmVlIChSVFBKaXR0ZXJCdWZmZXJJdGVtLCBpdGVtKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyICpqaXR0ZXJidWZmZXI7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChvYmplY3QpOwotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotCi0gIGdfYXJyYXlfZnJlZSAocHJpdi0+dGltZXJzLCBUUlVFKTsKLSAgdGltZXJfcXVldWVfZnJlZSAocHJpdi0+cnR4X3N0YXRzX3RpbWVycyk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZwcml2LT5qYnVmX2xvY2spOwotICBnX2NvbmRfY2xlYXIgKCZwcml2LT5qYnVmX3RpbWVyKTsKLSAgZ19jb25kX2NsZWFyICgmcHJpdi0+amJ1Zl9ldmVudCk7Ci0gIGdfY29uZF9jbGVhciAoJnByaXYtPmpidWZfcXVlcnkpOwotCi0gIHJ0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoIChwcml2LT5qYnVmLCAoR0Z1bmMpIGZyZWVfaXRlbSwgTlVMTCk7Ci0gIGdfcXVldWVfZm9yZWFjaCAoJnByaXYtPmdhcF9wYWNrZXRzLCAoR0Z1bmMpIGdzdF9idWZmZXJfdW5yZWYsIE5VTEwpOwotICBnX3F1ZXVlX2NsZWFyICgmcHJpdi0+Z2FwX3BhY2tldHMpOwotICBnX29iamVjdF91bnJlZiAocHJpdi0+amJ1Zik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgR3N0SXRlcmF0b3IgKgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlcjsKLSAgR3N0UGFkICpvdGhlcnBhZCA9IE5VTEw7Ci0gIEdzdEl0ZXJhdG9yICppdCA9IE5VTEw7Ci0gIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSX0NBU1QgKHBhcmVudCk7Ci0KLSAgaWYgKHBhZCA9PSBqaXR0ZXJidWZmZXItPnByaXYtPnNpbmtwYWQpIHsKLSAgICBvdGhlcnBhZCA9IGppdHRlcmJ1ZmZlci0+cHJpdi0+c3JjcGFkOwotICB9IGVsc2UgaWYgKHBhZCA9PSBqaXR0ZXJidWZmZXItPnByaXYtPnNyY3BhZCkgewotICAgIG90aGVycGFkID0gaml0dGVyYnVmZmVyLT5wcml2LT5zaW5rcGFkOwotICB9IGVsc2UgaWYgKHBhZCA9PSBqaXR0ZXJidWZmZXItPnByaXYtPnJ0Y3BzaW5rcGFkKSB7Ci0gICAgaXQgPSBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1NUX1RZUEVfUEFELCBOVUxMKTsKLSAgfQotCi0gIGlmIChpdCA9PSBOVUxMKSB7Ci0gICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9QQUQpOwotICAgIGdfdmFsdWVfc2V0X29iamVjdCAoJnZhbCwgb3RoZXJwYWQpOwotICAgIGl0ID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgJnZhbCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gIH0KLQotICByZXR1cm4gaXQ7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotY3JlYXRlX3J0Y3Bfc2luayAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiY3JlYXRpbmcgUlRDUCBzaW5rIHBhZCIpOwotCi0gIHByaXYtPnJ0Y3BzaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlCi0gICAgICAoJmdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaW5rX3J0Y3BfdGVtcGxhdGUsICJzaW5rX3J0Y3AiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHByaXYtPnJ0Y3BzaW5rcGFkLAotICAgICAgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluX3J0Y3ApOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocHJpdi0+cnRjcHNpbmtwYWQsCi0gICAgICAoR3N0UGFkRXZlbnRGdW5jdGlvbikgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfcnRjcF9ldmVudCk7Ci0gIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24gKHByaXYtPnJ0Y3BzaW5rcGFkLAotICAgICAgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHByaXYtPnJ0Y3BzaW5rcGFkLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoaml0dGVyYnVmZmVyKSwgcHJpdi0+cnRjcHNpbmtwYWQpOwotCi0gIHJldHVybiBwcml2LT5ydGNwc2lua3BhZDsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9ydGNwX3NpbmsgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlcikKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLQotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInJlbW92aW5nIFJUQ1Agc2luayBwYWQiKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHByaXYtPnJ0Y3BzaW5rcGFkLCBGQUxTRSk7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoaml0dGVyYnVmZmVyKSwgcHJpdi0+cnRjcHNpbmtwYWQpOwotICBwcml2LT5ydGNwc2lua3BhZCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlcjsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR3N0UGFkICpyZXN1bHQ7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JUUF9KSVRURVJfQlVGRkVSIChlbGVtZW50KSwgTlVMTCk7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSX0NBU1QgKGVsZW1lbnQpOwotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInJlcXVlc3RpbmcgcGFkICVzIiwgR1NUX1NUUl9OVUxMIChuYW1lKSk7Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgdGVtcGxhdGUgKi8KLSAgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic2lua19ydGNwIikpIHsKLSAgICBpZiAocHJpdi0+cnRjcHNpbmtwYWQgIT0gTlVMTCkKLSAgICAgIGdvdG8gZXhpc3RzOwotCi0gICAgcmVzdWx0ID0gY3JlYXRlX3J0Y3Bfc2luayAoaml0dGVyYnVmZmVyKTsKLSAgfSBlbHNlCi0gICAgZ290byB3cm9uZ190ZW1wbGF0ZTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfdGVtcGxhdGU6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBqaXR0ZXJidWZmZXI6IHRoaXMgaXMgbm90IG91ciB0ZW1wbGF0ZSIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1leGlzdHM6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBqaXR0ZXJidWZmZXI6IHBhZCBhbHJlYWR5IHJlcXVlc3RlZCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlciAqaml0dGVyYnVmZmVyOwotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19SVFBfSklUVEVSX0JVRkZFUiAoZWxlbWVudCkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBqaXR0ZXJidWZmZXIgPSBHU1RfUlRQX0pJVFRFUl9CVUZGRVJfQ0FTVCAoZWxlbWVudCk7Ci0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInJlbGVhc2luZyBwYWQgJXM6JXMiLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGlmIChwcml2LT5ydGNwc2lua3BhZCA9PSBwYWQpIHsKLSAgICByZW1vdmVfcnRjcF9zaW5rIChqaXR0ZXJidWZmZXIpOwotICB9IGVsc2UKLSAgICBnb3RvIHdyb25nX3BhZDsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19wYWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJnc3RqaXR0ZXJidWZmZXI6IGFza2VkIHRvIHJlbGVhc2UgYW4gdW5rbm93biBwYWQiKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIEdzdENsb2NrICoKLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9wcm92aWRlX2Nsb2NrIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgcmV0dXJuIGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zZXRfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RDbG9jayAqIGNsb2NrKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlciA9IEdTVF9SVFBfSklUVEVSX0JVRkZFUiAoZWxlbWVudCk7Ci0KLSAgcnRwX2ppdHRlcl9idWZmZXJfc2V0X3BpcGVsaW5lX2Nsb2NrIChqaXR0ZXJidWZmZXItPnByaXYtPmpidWYsIGNsb2NrKTsKLQotICByZXR1cm4gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNldF9jbG9jayAoZWxlbWVudCwgY2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NsZWFyX3B0X21hcCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgLyogdGhpcyB3aWxsIHRyaWdnZXIgYSBuZXcgcHQtbWFwIHJlcXVlc3Qgc2lnbmFsLCBGSVhNRSwgZG8gc29tZXRoaW5nIGJldHRlci4gKi8KLQotICBKQlVGX0xPQ0sgKHByaXYpOwotICBwcml2LT5jbG9ja19yYXRlID0gLTE7Ci0gIC8qIGRvIG5vdCBjbGVhciBjdXJyZW50IGNvbnRlbnQsIGJ1dCByZWZyZXNoIHN0YXRlIGZvciBuZXcgYXJyaXZhbCAqLwotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJyZXNldCBqaXR0ZXJidWZmZXIiKTsKLSAgcnRwX2ppdHRlcl9idWZmZXJfcmVzZXRfc2tldyAocHJpdi0+amJ1Zik7Ci0gIEpCVUZfVU5MT0NLIChwcml2KTsKLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NldF9hY3RpdmUgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGpidWYsIGdib29sZWFuIGFjdGl2ZSwKLSAgICBndWludDY0IG9mZnNldCkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLSAgR3N0Q2xvY2tUaW1lIGxhc3Rfb3V0OwotICBSVFBKaXR0ZXJCdWZmZXJJdGVtICppdGVtOwotCi0gIHByaXYgPSBqYnVmLT5wcml2OwotCi0gIEpCVUZfTE9DSyAocHJpdik7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGpidWYsICJzZXR0aW5nIGFjdGl2ZSAlZCB3aXRoIG9mZnNldCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBhY3RpdmUsIEdTVF9USU1FX0FSR1MgKG9mZnNldCkpOwotCi0gIGlmIChhY3RpdmUgIT0gcHJpdi0+YWN0aXZlKSB7Ci0gICAgLyogYWRkIHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCBpbiBwYXVzZWQgdG8gdGhlIG91dHB1dCBvZmZzZXQuIEFsbAotICAgICAqIG91dGdvaW5nIGJ1ZmZlcnMgd2lsbCBoYXZlIHRoaXMgb2Zmc2V0IGFwcGxpZWQgdG8gdGhlaXIgdGltZXN0YW1wcyBpbgotICAgICAqIG9yZGVyIHRvIG1ha2UgdGhlbSBhcnJpdmUgaW4gdGltZSBpbiB0aGUgc2luay4gKi8KLSAgICBwcml2LT5vdXRfb2Zmc2V0ID0gb2Zmc2V0OwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGpidWYsICJvdXQgb2Zmc2V0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+b3V0X29mZnNldCkpOwotICAgIHByaXYtPmFjdGl2ZSA9IGFjdGl2ZTsKLSAgICBKQlVGX1NJR05BTF9FVkVOVCAocHJpdik7Ci0gIH0KLSAgaWYgKCFhY3RpdmUpIHsKLSAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfYnVmZmVyaW5nIChwcml2LT5qYnVmLCBUUlVFKTsKLSAgfQotICBpZiAoKGl0ZW0gPSBydHBfaml0dGVyX2J1ZmZlcl9wZWVrIChwcml2LT5qYnVmKSkpIHsKLSAgICAvKiBoZWFkIGJ1ZmZlciB0aW1lc3RhbXAgYW5kIG9mZnNldCBnaXZlcyBvdXIgb3V0cHV0IHRpbWUgKi8KLSAgICBsYXN0X291dCA9IGl0ZW0tPnB0cyArIHByaXYtPnRzX29mZnNldDsKLSAgfSBlbHNlIHsKLSAgICAvKiB1c2UgbGFzdCBrbm93biB0aW1lIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eSAqLwotICAgIGxhc3Rfb3V0ID0gcHJpdi0+bGFzdF9vdXRfdGltZTsKLSAgfQotICBKQlVGX1VOTE9DSyAocHJpdik7Ci0KLSAgcmV0dXJuIGxhc3Rfb3V0OwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfZ2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlcjsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLSAgR3N0UGFkICpvdGhlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0Q2FwcyAqdGVtcGw7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChnc3RfcGFkX2dldF9wYXJlbnQgKHBhZCkpOwotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotCi0gIG90aGVyID0gKHBhZCA9PSBwcml2LT5zcmNwYWQgPyBwcml2LT5zaW5rcGFkIDogcHJpdi0+c3JjcGFkKTsKLQotICBjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKG90aGVyLCBmaWx0ZXIpOwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gIGlmIChjYXBzID09IE5VTEwpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJ1c2UgdGVtcGxhdGUiKTsKLSAgICBjYXBzID0gdGVtcGw7Ci0gIH0gZWxzZSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiaW50ZXJzZWN0IHdpdGggdGVtcGxhdGUiKTsKLQotICAgIGludGVyc2VjdCA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgdGVtcGwpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotCi0gICAgY2FwcyA9IGludGVyc2VjdDsKLSAgfQotICBnc3Rfb2JqZWN0X3VucmVmIChqaXR0ZXJidWZmZXIpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi0vKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBKQlVGX0xPQ0sgaGVsZAotICovCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2ppdHRlcl9idWZmZXJfc2lua19wYXJzZV9jYXBzIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsCi0gICAgR3N0Q2FwcyAqIGNhcHMsIGdpbnQgcHQpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0gIEdzdFN0cnVjdHVyZSAqY2Fwc19zdHJ1Y3Q7Ci0gIGd1aW50IHZhbDsKLSAgZ2ludCBwYXlsb2FkID0gLTE7Ci0gIEdzdENsb2NrVGltZSB0dmFsOwotICBjb25zdCBnY2hhciAqdHNfcmVmY2xrLCAqbWVkaWFjbGs7Ci0KLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICAvKiBmaXJzdCBwYXJzZSB0aGUgY2FwcyAqLwotICBjYXBzX3N0cnVjdCA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImdvdCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChjYXBzX3N0cnVjdCwgInBheWxvYWQiLCAmcGF5bG9hZCkgJiYgcHQgIT0gLTEKLSAgICAgICYmIHBheWxvYWQgIT0gcHQpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAgICJHb3QgY2FwcyB3aXRoIHdyb25nIHBheWxvYWQgdHlwZSAoZ290ICVkLCBleHBlY3RlZCAlZCkiLCBwYXlsb2FkLCBwdCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKHBheWxvYWQgIT0gLTEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJHb3QgcGF5bG9hZCB0eXBlICVkIiwgcGF5bG9hZCk7Ci0gICAgcHJpdi0+bGFzdF9wdCA9IHBheWxvYWQ7Ci0gIH0KLQotICAvKiB3ZSBuZWVkIGEgY2xvY2stcmF0ZSB0byBjb252ZXJ0IHRoZSBydHAgdGltZXN0YW1wcyB0byBHU3RyZWFtZXIgdGltZSBhbmQgdG8KLSAgICogbWVhc3VyZSB0aGUgYW1vdW50IG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoY2Fwc19zdHJ1Y3QsICJjbG9jay1yYXRlIiwgJnByaXYtPmNsb2NrX3JhdGUpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgaWYgKHByaXYtPmNsb2NrX3JhdGUgPD0gMCkKLSAgICBnb3RvIHdyb25nX3JhdGU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiZ290IGNsb2NrLXJhdGUgJWQiLCBwcml2LT5jbG9ja19yYXRlKTsKLQotICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfY2xvY2tfcmF0ZSAocHJpdi0+amJ1ZiwgcHJpdi0+Y2xvY2tfcmF0ZSk7Ci0KLSAgZ3N0X3J0cF9wYWNrZXRfcmF0ZV9jdHhfcmVzZXQgKCZwcml2LT5wYWNrZXRfcmF0ZV9jdHgsIHByaXYtPmNsb2NrX3JhdGUpOwotCi0gIC8qIFRoZSBjbG9jayBiYXNlIGlzIHRoZSBSVFAgdGltZXN0YW1wIGNvcnJzcG9uZGluZyB0byB0aGUgbnB0LXN0YXJ0IHZhbHVlLiBXZQotICAgKiBjYW4gdXNlIHRoaXMgdG8gdHJhY2sgdGhlIGFtb3VudCBvZiB0aW1lIGVsYXBzZWQgb24gdGhlIHNlbmRlci4gKi8KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKGNhcHNfc3RydWN0LCAiY2xvY2stYmFzZSIsICZ2YWwpKQotICAgIHByaXYtPmNsb2NrX2Jhc2UgPSB2YWw7Ci0gIGVsc2UKLSAgICBwcml2LT5jbG9ja19iYXNlID0gLTE7Ci0KLSAgcHJpdi0+ZXh0X3RpbWVzdGFtcCA9IHByaXYtPmNsb2NrX2Jhc2U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiZ290IGNsb2NrLWJhc2UgJSIgR19HSU5UNjRfRk9STUFULAotICAgICAgcHJpdi0+Y2xvY2tfYmFzZSk7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKGNhcHNfc3RydWN0LCAic2VxbnVtLWJhc2UiLCAmdmFsKSkgewotICAgIC8qIGZpcnN0IGV4cGVjdGVkIHNlcW51bSwgb25seSB1cGRhdGUgd2hlbiB3ZSBkaWRuJ3QgaGF2ZSBhIHByZXZpb3VzIGJhc2UuICovCi0gICAgaWYgKHByaXYtPm5leHRfaW5fc2VxbnVtID09IC0xKQotICAgICAgcHJpdi0+bmV4dF9pbl9zZXFudW0gPSB2YWw7Ci0gICAgaWYgKHByaXYtPm5leHRfc2VxbnVtID09IC0xKSB7Ci0gICAgICBwcml2LT5uZXh0X3NlcW51bSA9IHZhbDsKLSAgICAgIEpCVUZfU0lHTkFMX0VWRU5UIChwcml2KTsKLSAgICB9Ci0gICAgcHJpdi0+c2VxbnVtX2Jhc2UgPSB2YWw7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpdi0+c2VxbnVtX2Jhc2UgPSAtMTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImdvdCBzZXFudW0tYmFzZSAlZCIsIHByaXYtPm5leHRfaW5fc2VxbnVtKTsKLQotICAvKiB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZXMuIFRoZSBzZXFudW0tYmFzZSBjb3JyZXNwb25kcyB0byB0aGUgc3RhcnQgdGltZS4gV2UKLSAgICogd2lsbCBrZWVwIHRyYWNrIG9mIHRoZSBzZXFudW1zIG9uIHRoZSBvdXRwdXQgYW5kIHdoZW4gd2UgcmVhY2ggdGhlIG9uZQotICAgKiBjb3JyZXNwb25kaW5nIHRvIG5wdC1zdG9wLCB3ZSBlbWl0IHRoZSBucHQtc3RvcC1yZWFjaGVkIHNpZ25hbCAqLwotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoY2Fwc19zdHJ1Y3QsICJucHQtc3RhcnQiLCAmdHZhbCkpCi0gICAgcHJpdi0+bnB0X3N0YXJ0ID0gdHZhbDsKLSAgZWxzZQotICAgIHByaXYtPm5wdF9zdGFydCA9IDA7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKGNhcHNfc3RydWN0LCAibnB0LXN0b3AiLCAmdHZhbCkpCi0gICAgcHJpdi0+bnB0X3N0b3AgPSB0dmFsOwotICBlbHNlCi0gICAgcHJpdi0+bnB0X3N0b3AgPSAtMTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAibnB0IHN0YXJ0L3N0b3A6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLSUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHByaXYtPm5wdF9zdGFydCksIEdTVF9USU1FX0FSR1MgKHByaXYtPm5wdF9zdG9wKSk7Ci0KLSAgaWYgKCh0c19yZWZjbGsgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKGNhcHNfc3RydWN0LCAiYS10cy1yZWZjbGsiKSkpIHsKLSAgICBHc3RDbG9jayAqY2xvY2sgPSBOVUxMOwotICAgIGd1aW50NjQgY2xvY2tfb2Zmc2V0ID0gLTE7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJIYXZlIHRpbWVzdGFtcCByZWZlcmVuY2UgY2xvY2sgJXMiLAotICAgICAgICB0c19yZWZjbGspOwotCi0gICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHRzX3JlZmNsaywgIm50cD0iKSkgewotICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHRzX3JlZmNsaywgIm50cD0vdHJhY2VhYmxlLyIpKSB7Ci0gICAgICAgIEdTVF9GSVhNRV9PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIkNhbid0IGhhbmRsZSB0cmFjZWFibGUgTlRQIGNsb2NrcyIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgZ2NoYXIgKmhvc3QsICpwb3J0c3RyOwotICAgICAgICBnY2hhciAqaG9zdG5hbWU7Ci0gICAgICAgIGd1aW50IHBvcnQ7Ci0KLSAgICAgICAgaG9zdCA9IHRzX3JlZmNsayArIHNpemVvZiAoIm50cD0iKSAtIDE7Ci0gICAgICAgIGlmIChob3N0WzBdID09ICdbJykgewotICAgICAgICAgIC8qIElQdjYgKi8KLSAgICAgICAgICBwb3J0c3RyID0gc3RyY2hyIChob3N0LCAnXScpOwotICAgICAgICAgIGlmIChwb3J0c3RyICYmIHBvcnRzdHJbMV0gPT0gJzonKQotICAgICAgICAgICAgcG9ydHN0ciA9IHBvcnRzdHIgKyAxOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBvcnRzdHIgPSBOVUxMOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHBvcnRzdHIgPSBzdHJyY2hyIChob3N0LCAnOicpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAoIXBvcnRzdHIgfHwgc3NjYW5mIChwb3J0c3RyLCAiOiV1IiwgJnBvcnQpICE9IDEpCi0gICAgICAgICAgcG9ydCA9IDEyMzsKLQotICAgICAgICBpZiAocG9ydHN0cikKLSAgICAgICAgICBob3N0bmFtZSA9IGdfc3RybmR1cCAoaG9zdCwgKHBvcnRzdHIgLSBob3N0KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBob3N0bmFtZSA9IGdfc3RyZHVwIChob3N0KTsKLQotICAgICAgICBjbG9jayA9IGdzdF9udHBfY2xvY2tfbmV3IChOVUxMLCBob3N0bmFtZSwgcG9ydCwgMCk7Ci0gICAgICAgIGdfZnJlZSAoaG9zdG5hbWUpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAodHNfcmVmY2xrLCAicHRwPUlFRUUxNTg4LTIwMDg6IikpIHsKLSAgICAgIGNvbnN0IGdjaGFyICpkb21haW5zdHIgPQotICAgICAgICAgIHRzX3JlZmNsayArIHNpemVvZiAoInB0cD1JRUVFMTU4OC0yMDA4OlhYLVhYLVhYLVhYLVhYLVhYLVhYLVhYIikgLSAxOwotICAgICAgZ3VpbnQgZG9tYWluOwotCi0gICAgICBpZiAoZG9tYWluc3RyWzBdICE9ICc6JyB8fCBzc2NhbmYgKGRvbWFpbnN0ciwgIjoldSIsICZkb21haW4pICE9IDEpCi0gICAgICAgIGRvbWFpbiA9IDA7Ci0KLSAgICAgIGNsb2NrID0gZ3N0X3B0cF9jbG9ja19uZXcgKE5VTEwsIGRvbWFpbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9GSVhNRV9PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIlVuc3VwcG9ydGVkIHRpbWVzdGFtcCByZWZlcmVuY2UgY2xvY2siKTsKLSAgICB9Ci0KLSAgICBpZiAoKG1lZGlhY2xrID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChjYXBzX3N0cnVjdCwgImEtbWVkaWFjbGsiKSkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIkdvdCBtZWRpYSBjbG9jayAlcyIsIG1lZGlhY2xrKTsKLQotICAgICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4IChtZWRpYWNsaywgImRpcmVjdD0iKQotICAgICAgICAgIHx8IHNzY2FuZiAobWVkaWFjbGssICJkaXJlY3Q9JSIgR19HVUlOVDY0X0ZPUk1BVCwgJmNsb2NrX29mZnNldCkgIT0gMSkKLSAgICAgICAgR1NUX0ZJWE1FX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiVW5zdXBwb3J0ZWQgbWVkaWEgY2xvY2siKTsKLSAgICAgIGlmIChzdHJzdHIgKG1lZGlhY2xrLCAicmF0ZT0iKSAhPSBOVUxMKSB7Ci0gICAgICAgIEdTVF9GSVhNRV9PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIlJhdGUgcHJvcGVydHkgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICBjbG9ja19vZmZzZXQgPSAtMTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfbWVkaWFfY2xvY2sgKHByaXYtPmpidWYsIGNsb2NrLCBjbG9ja19vZmZzZXQpOwotICB9IGVsc2UgewotICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9tZWRpYV9jbG9jayAocHJpdi0+amJ1ZiwgTlVMTCwgLTEpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1lcnJvcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIk5vIGNsb2NrLXJhdGUgaW4gY2FwcyEiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX3JhdGU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJJbnZhbGlkIGNsb2NrLXJhdGUgJWQiLCBwcml2LT5jbG9ja19yYXRlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9mbHVzaF9zdGFydCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgSkJVRl9MT0NLIChwcml2KTsKLSAgLyogbWFyayBvdXJzZWx2ZXMgYXMgZmx1c2hpbmcgKi8KLSAgcHJpdi0+c3JjcmVzdWx0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIkRpc2FibGluZyBwb3Agb24gcXVldWUiKTsKLSAgLyogdGhpcyB1bmJsb2NrcyBhbnkgd2FpdGluZyBwb3BzIG9uIHRoZSBzcmMgcGFkIHRhc2sgKi8KLSAgSkJVRl9TSUdOQUxfRVZFTlQgKHByaXYpOwotICBKQlVGX1NJR05BTF9RVUVSWSAocHJpdiwgRkFMU0UpOwotICBKQlVGX1VOTE9DSyAocHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RvcCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgSkJVRl9MT0NLIChwcml2KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiRW5hYmxpbmcgcG9wIG9uIHF1ZXVlIik7Ci0gIC8qIE1hcmsgYXMgbm9uIGZsdXNoaW5nICovCi0gIHByaXYtPnNyY3Jlc3VsdCA9IEdTVF9GTE9XX09LOwotICBnc3Rfc2VnbWVudF9pbml0ICgmcHJpdi0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgcHJpdi0+bGFzdF9wb3BwZWRfc2VxbnVtID0gLTE7Ci0gIHByaXYtPmxhc3Rfb3V0X3RpbWUgPSAtMTsKLSAgcHJpdi0+bmV4dF9zZXFudW0gPSAtMTsKLSAgcHJpdi0+c2VxbnVtX2Jhc2UgPSAtMTsKLSAgcHJpdi0+aXBzX3J0cHRpbWUgPSAtMTsKLSAgcHJpdi0+aXBzX3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHByaXYtPnBhY2tldF9zcGFjaW5nID0gMDsKLSAgcHJpdi0+bmV4dF9pbl9zZXFudW0gPSAtMTsKLSAgcHJpdi0+Y2xvY2tfcmF0ZSA9IC0xOwotICBwcml2LT5sYXN0X3B0ID0gLTE7Ci0gIHByaXYtPmVvcyA9IEZBTFNFOwotICBwcml2LT5lc3RpbWF0ZWRfZW9zID0gLTE7Ci0gIHByaXYtPmxhc3RfZWxhcHNlZCA9IDA7Ci0gIHByaXYtPmV4dF90aW1lc3RhbXAgPSAtMTsKLSAgcHJpdi0+YXZnX2ppdHRlciA9IDA7Ci0gIHByaXYtPmxhc3RfZHRzID0gLTE7Ci0gIHByaXYtPmxhc3RfcnRwdGltZSA9IC0xOwotICBwcml2LT5sYXN0X2luX3B0cyA9IDA7Ci0gIHByaXYtPmVxdWlkaXN0YW50ID0gMDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiZmx1c2ggYW5kIHJlc2V0IGppdHRlcmJ1ZmZlciIpOwotICBydHBfaml0dGVyX2J1ZmZlcl9mbHVzaCAocHJpdi0+amJ1ZiwgKEdGdW5jKSBmcmVlX2l0ZW0sIE5VTEwpOwotICBydHBfaml0dGVyX2J1ZmZlcl9kaXNhYmxlX2J1ZmZlcmluZyAocHJpdi0+amJ1ZiwgRkFMU0UpOwotICBydHBfaml0dGVyX2J1ZmZlcl9yZXNldF9za2V3IChwcml2LT5qYnVmKTsKLSAgcmVtb3ZlX2FsbF90aW1lcnMgKGppdHRlcmJ1ZmZlcik7Ci0gIGdfcXVldWVfZm9yZWFjaCAoJnByaXYtPmdhcF9wYWNrZXRzLCAoR0Z1bmMpIGdzdF9idWZmZXJfdW5yZWYsIE5VTEwpOwotICBnX3F1ZXVlX2NsZWFyICgmcHJpdi0+Z2FwX3BhY2tldHMpOwotICBKQlVGX1VOTE9DSyAocHJpdik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NyY19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlciA9IE5VTEw7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChwYXJlbnQpOwotCi0gIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVU0g6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIC8qIGFsbG93IGRhdGEgcHJvY2Vzc2luZyAqLwotICAgICAgICBnc3RfcnRwX2ppdHRlcl9idWZmZXJfZmx1c2hfc3RvcCAoaml0dGVyYnVmZmVyKTsKLQotICAgICAgICAvKiBzdGFydCBwdXNoaW5nIG91dCBidWZmZXJzICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIlN0YXJ0aW5nIHRhc2sgb24gc3JjcGFkIik7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9wYWRfc3RhcnRfdGFzayAoaml0dGVyYnVmZmVyLT5wcml2LT5zcmNwYWQsCi0gICAgICAgICAgICAoR3N0VGFza0Z1bmN0aW9uKSBnc3RfcnRwX2ppdHRlcl9idWZmZXJfbG9vcCwgaml0dGVyYnVmZmVyLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG1ha2Ugc3VyZSBhbGwgZGF0YSBwcm9jZXNzaW5nIHN0b3BzIEFTQVAgKi8KLSAgICAgICAgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoX3N0YXJ0IChqaXR0ZXJidWZmZXIpOwotCi0gICAgICAgIC8qIE5PVEUgdGhpcyB3aWxsIGhhcmRsb2NrIGlmIHRoZSBzdGF0ZSBjaGFuZ2UgaXMgY2FsbGVkIGZyb20gdGhlIHNyYyBwYWQKLSAgICAgICAgICogdGFzayB0aHJlYWQgYmVjYXVzZSB3ZSB3aWxsIF9qb2luKCkgdGhlIHRocmVhZC4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiU3RvcHBpbmcgdGFzayBvbiBzcmNwYWQiKTsKLSAgICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9zdG9wX3Rhc2sgKHBhZCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlciAqaml0dGVyYnVmZmVyOwotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChlbGVtZW50KTsKLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgLyogcmVzZXQgbmVnb3RpYXRlZCB2YWx1ZXMgKi8KLSAgICAgIHByaXYtPmNsb2NrX3JhdGUgPSAtMTsKLSAgICAgIHByaXYtPmNsb2NrX2Jhc2UgPSAtMTsKLSAgICAgIHByaXYtPnBlZXJfbGF0ZW5jeSA9IDA7Ci0gICAgICBwcml2LT5sYXN0X3B0ID0gLTE7Ci0gICAgICAvKiBibG9jayB1bnRpbCB3ZSBnbyB0byBQTEFZSU5HICovCi0gICAgICBwcml2LT5ibG9ja2VkID0gVFJVRTsKLSAgICAgIHByaXYtPnRpbWVyX3J1bm5pbmcgPSBUUlVFOwotICAgICAgcHJpdi0+dGltZXJfdGhyZWFkID0KLSAgICAgICAgICBnX3RocmVhZF9uZXcgKCJ0aW1lciIsIChHVGhyZWFkRnVuYykgd2FpdF9uZXh0X3RpbWVvdXQsIGppdHRlcmJ1ZmZlcik7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1BMQVlJTkc6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgLyogdW5ibG9jayB0byBhbGxvdyBzdHJlYW1pbmcgaW4gUExBWUlORyAqLwotICAgICAgcHJpdi0+YmxvY2tlZCA9IEZBTFNFOwotICAgICAgSkJVRl9TSUdOQUxfRVZFTlQgKHByaXYpOwotICAgICAgSkJVRl9TSUdOQUxfVElNRVIgKHByaXYpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIC8qIHdlIGFyZSBhIGxpdmUgZWxlbWVudCBiZWNhdXNlIHdlIHN5bmMgdG8gdGhlIGNsb2NrLCB3aGljaCB3ZSBjYW4gb25seQotICAgICAgICogZG8gaW4gdGhlIFBMQVlJTkcgc3RhdGUgKi8KLSAgICAgIGlmIChyZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUExBWUlOR19UT19QQVVTRUQ6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgLyogYmxvY2sgdG8gc3RvcCBzdHJlYW1pbmcgd2hlbiBQQVVTRUQgKi8KLSAgICAgIHByaXYtPmJsb2NrZWQgPSBUUlVFOwotICAgICAgdW5zY2hlZHVsZV9jdXJyZW50X3RpbWVyIChqaXR0ZXJidWZmZXIpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmcHJpdi0+bGFzdF9zciwgTlVMTCk7Ci0gICAgICBwcml2LT50aW1lcl9ydW5uaW5nID0gRkFMU0U7Ci0gICAgICB1bnNjaGVkdWxlX2N1cnJlbnRfdGltZXIgKGppdHRlcmJ1ZmZlcik7Ci0gICAgICBKQlVGX1NJR05BTF9USU1FUiAocHJpdik7Ci0gICAgICBKQlVGX1NJR05BTF9RVUVSWSAocHJpdiwgRkFMU0UpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgZ190aHJlYWRfam9pbiAocHJpdi0+dGltZXJfdGhyZWFkKTsKLSAgICAgIHByaXYtPnRpbWVyX3RocmVhZCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0UnRwSml0dGVyQnVmZmVyICpqaXR0ZXJidWZmZXI7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSX0NBU1QgKHBhcmVudCk7Ci0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAicmVjZWl2ZWQgJXMiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0xBVEVOQ1k6Ci0gICAgewotICAgICAgR3N0Q2xvY2tUaW1lIGxhdGVuY3k7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9sYXRlbmN5IChldmVudCwgJmxhdGVuY3kpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAgICAgImNvbmZpZ3VyaW5nIGxhdGVuY3kgb2YgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChsYXRlbmN5KSk7Ci0KLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICAvKiBhZGp1c3QgdGhlIG92ZXJhbGwgYnVmZmVyIGRlbGF5IHRvIHRoZSB0b3RhbCBwaXBlbGluZSBsYXRlbmN5IGluCi0gICAgICAgKiBidWZmZXJpbmcgbW9kZSBiZWNhdXNlIGlmIGRvd25zdHJlYW0gY29uc3VtZXMgdG9vIGZhc3QgKGJlY2F1c2Ugb2YKLSAgICAgICAqIGxhcmdlIGxhdGVuY3kgb3IgcXVldWVzLCB3ZSB3b3VsZCBzdGFydCByZWJ1ZmZlcmluZyBhZ2Fpbi4gKi8KLSAgICAgIGlmIChydHBfaml0dGVyX2J1ZmZlcl9nZXRfbW9kZSAocHJpdi0+amJ1ZikgPT0KLSAgICAgICAgICBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX0JVRkZFUikgewotICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfZGVsYXkgKHByaXYtPmpidWYsIGxhdGVuY3kpOwotICAgICAgfQotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotCi0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHByaXYtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwcml2LT5zaW5rcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIGhhbmRsZXMgYW5kIHN0b3JlcyB0aGUgZXZlbnQgaW4gdGhlIGppdHRlcmJ1ZmZlciwgbXVzdCBiZSBjYWxsZWQgd2l0aAotICogTE9DSyAqLwotc3RhdGljIGdib29sZWFuCi1xdWV1ZV9ldmVudCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBSVFBKaXR0ZXJCdWZmZXJJdGVtICppdGVtOwotICBnYm9vbGVhbiBoZWFkOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICBnc3Rfaml0dGVyX2J1ZmZlcl9zaW5rX3BhcnNlX2NhcHMgKGppdHRlcmJ1ZmZlciwgY2FwcywgLTEpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgR3N0U2VnbWVudCBzZWdtZW50OwotICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLQotICAgICAgLyogd2UgbmVlZCB0aW1lIGZvciBub3cgKi8KLSAgICAgIGlmIChzZWdtZW50LmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiaWdub3Jpbmcgbm9uLVRJTUUgbmV3c2VnbWVudCIpOwotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICAgICAgICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KTsKLSAgICAgIH0KLQotICAgICAgcHJpdi0+c2VnbWVudCA9IHNlZ21lbnQ7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgcHJpdi0+ZW9zID0gVFJVRTsKLSAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2Rpc2FibGVfYnVmZmVyaW5nIChwcml2LT5qYnVmLCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiYWRkaW5nIGV2ZW50Iik7Ci0gIGl0ZW0gPSBhbGxvY19pdGVtIChldmVudCwgSVRFTV9UWVBFX0VWRU5ULCAtMSwgLTEsIC0xLCAwLCAtMSk7Ci0gIHJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCAocHJpdi0+amJ1ZiwgaXRlbSwgJmhlYWQsIE5VTEwpOwotICBpZiAoaGVhZCkKLSAgICBKQlVGX1NJR05BTF9FVkVOVCAocHJpdik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlciAqaml0dGVyYnVmZmVyOwotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIGppdHRlcmJ1ZmZlciA9IEdTVF9SVFBfSklUVEVSX0JVRkZFUiAocGFyZW50KTsKLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJyZWNlaXZlZCAlcyIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHByaXYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoX3N0YXJ0IChqaXR0ZXJidWZmZXIpOwotICAgICAgLyogd2FpdCBmb3IgdGhlIGxvb3AgdG8gZ28gaW50byBQQVVTRUQgKi8KLSAgICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocHJpdi0+c3JjcGFkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHByaXYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgcmV0ID0KLSAgICAgICAgICBnc3RfcnRwX2ppdHRlcl9idWZmZXJfc3JjX2FjdGl2YXRlX21vZGUgKHByaXYtPnNyY3BhZCwgcGFyZW50LAotICAgICAgICAgIEdTVF9QQURfTU9ERV9QVVNILCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoR1NUX0VWRU5UX0lTX1NFUklBTElaRUQgKGV2ZW50KSkgewotICAgICAgICAvKiBzZXJpYWxpemVkIGV2ZW50cyBnbyBpbiB0aGUgcXVldWUgKi8KLSAgICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgICAgaWYgKHByaXYtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19PSykgewotICAgICAgICAgIC8qIEVycm9ycyBpbiBzdGlja3kgZXZlbnQgcHVzaGluZyBhcmUgbm8gcHJvYmxlbSBhbmQgaWdub3JlZCBoZXJlCi0gICAgICAgICAgICogYXMgdGhleSB3aWxsIGNhdXNlIG1vcmUgbWVhbmluZ2Z1bCBlcnJvcnMgZHVyaW5nIGRhdGEgZmxvdy4KLSAgICAgICAgICAgKiBGb3IgRU9TIGV2ZW50cywgdGhhdCBhcmUgbm90IGZvbGxvd2VkIGJ5IGRhdGEgZmxvdywgd2Ugc3RpbGwKLSAgICAgICAgICAgKiByZXR1cm4gRkFMU0UgaGVyZSB0aG91Z2guCi0gICAgICAgICAgICovCi0gICAgICAgICAgaWYgKCFHU1RfRVZFTlRfSVNfU1RJQ0tZIChldmVudCkgfHwKLSAgICAgICAgICAgICAgR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfRU9TKQotICAgICAgICAgICAgZ290byBvdXRfZmxvd19lcnJvcjsKLSAgICAgICAgfQotICAgICAgICAvKiByZWZ1c2UgbW9yZSBldmVudHMgb24gRU9TICovCi0gICAgICAgIGlmIChwcml2LT5lb3MpCi0gICAgICAgICAgZ290byBvdXRfZW9zOwotICAgICAgICByZXQgPSBxdWV1ZV9ldmVudCAoaml0dGVyYnVmZmVyLCBldmVudCk7Ci0gICAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIG5vbi1zZXJpYWxpemVkIGV2ZW50cyBhcmUgZm9yd2FyZGVkIGRvd25zdHJlYW0gaW1tZWRpYXRlbHkgKi8KLSAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwcml2LT5zcmNwYWQsIGV2ZW50KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1vdXRfZmxvd19lcnJvcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwKLSAgICAgICAgInJlZnVzaW5nIGV2ZW50LCB3ZSBoYXZlIGEgZG93bnN0cmVhbSBmbG93IGVycm9yOiAlcyIsCi0gICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChwcml2LT5zcmNyZXN1bHQpKTsKLSAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1vdXRfZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAicmVmdXNpbmcgZXZlbnQsIHdlIGFyZSBFT1MiKTsKLSAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpbmtfcnRjcF9ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0UnRwSml0dGVyQnVmZmVyICpqaXR0ZXJidWZmZXI7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInJlY2VpdmVkICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVEFSVDoKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggSkJVRl9MT0NLIGhlbGQsIHdpbGwgcmVsZWFzZSB0aGUgTE9DSyB3aGVuIGVtaXRpbmcgdGhlCi0gKiBzaWduYWwuIFRoZSBmdW5jdGlvbiByZXR1cm5zIEdTVF9GTE9XX0VSUk9SIHdoZW4gYSBwYXJzaW5nIGVycm9yIGhhcHBlbmVkIGFuZAotICogR1NUX0ZMT1dfRkxVU0hJTkcgd2hlbiB0aGUgZWxlbWVudCBpcyBzaHV0dGluZyBkb3duLiBPbiBzdWNjZXNzCi0gKiBHU1RfRkxPV19PSyBpcyByZXR1cm5lZC4KLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfY2xvY2tfcmF0ZSAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLAotICAgIGd1aW50OCBwdCkKLXsKLSAgR1ZhbHVlIHJldCA9IHsgMCB9OwotICBHVmFsdWUgYXJnc1syXSA9IHsgezB9LCB7MH0gfTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGdfdmFsdWVfaW5pdCAoJmFyZ3NbMF0sIEdTVF9UWVBFX0VMRU1FTlQpOwotICBnX3ZhbHVlX3NldF9vYmplY3QgKCZhcmdzWzBdLCBqaXR0ZXJidWZmZXIpOwotICBnX3ZhbHVlX2luaXQgKCZhcmdzWzFdLCBHX1RZUEVfVUlOVCk7Ci0gIGdfdmFsdWVfc2V0X3VpbnQgKCZhcmdzWzFdLCBwdCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmcmV0LCBHU1RfVFlQRV9DQVBTKTsKLSAgZ192YWx1ZV9zZXRfYm94ZWQgKCZyZXQsIE5VTEwpOwotCi0gIEpCVUZfVU5MT0NLIChqaXR0ZXJidWZmZXItPnByaXYpOwotICBnX3NpZ25hbF9lbWl0diAoYXJncywgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUFRfTUFQXSwgMCwKLSAgICAgICZyZXQpOwotICBKQlVGX0xPQ0tfQ0hFQ0sgKGppdHRlcmJ1ZmZlci0+cHJpdiwgb3V0X2ZsdXNoaW5nKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmYXJnc1swXSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZhcmdzWzFdKTsKLSAgY2FwcyA9IChHc3RDYXBzICopIGdfdmFsdWVfZHVwX2JveGVkICgmcmV0KTsKLSAgZ192YWx1ZV91bnNldCAoJnJldCk7Ci0gIGlmICghY2FwcykKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgcmVzID0gZ3N0X2ppdHRlcl9idWZmZXJfc2lua19wYXJzZV9jYXBzIChqaXR0ZXJidWZmZXIsIGNhcHMsIHB0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGlmIChHX1VOTElLRUxZICghcmVzKSkKLSAgICBnb3RvIHBhcnNlX2ZhaWxlZDsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1ub19jYXBzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiY291bGQgbm90IGdldCBjYXBzIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1vdXRfZmx1c2hpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJ3ZSBhcmUgZmx1c2hpbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXBhcnNlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInBhcnNlIGZhaWxlZCIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi0vKiBjYWxsIHdpdGggamJ1ZiBsb2NrIGhlbGQgKi8KLXN0YXRpYyBHc3RNZXNzYWdlICoKLWNoZWNrX2J1ZmZlcmluZ19wZXJjZW50IChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIGdpbnQgcGVyY2VudCkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7Ci0KLSAgaWYgKHBlcmNlbnQgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgLyogUG9zdCBhIGJ1ZmZlcmluZyBtZXNzYWdlICovCi0gIGlmIChwcml2LT5sYXN0X3BlcmNlbnQgIT0gcGVyY2VudCkgewotICAgIHByaXYtPmxhc3RfcGVyY2VudCA9IHBlcmNlbnQ7Ci0gICAgbWVzc2FnZSA9Ci0gICAgICAgIGdzdF9tZXNzYWdlX25ld19idWZmZXJpbmcgKEdTVF9PQkpFQ1RfQ0FTVCAoaml0dGVyYnVmZmVyKSwgcGVyY2VudCk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X2J1ZmZlcmluZ19zdGF0cyAobWVzc2FnZSwgR1NUX0JVRkZFUklOR19MSVZFLCAtMSwgLTEsIC0xKTsKLSAgfQotCi0gIHJldHVybiBtZXNzYWdlOwotfQotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1hcHBseV9vZmZzZXQgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLQotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotCi0gIGlmICh0aW1lc3RhbXAgPT0gLTEpCi0gICAgcmV0dXJuIC0xOwotCi0gIC8qIGFwcGx5IHRoZSB0aW1lc3RhbXAgb2Zmc2V0LCB0aGlzIGlzIHVzZWQgZm9yIGludGVyIHN0cmVhbSBzeW5jICovCi0gIHRpbWVzdGFtcCArPSBwcml2LT50c19vZmZzZXQ7Ci0gIC8qIGFkZCB0aGUgb2Zmc2V0LCB0aGlzIGlzIHVzZWQgd2hlbiBidWZmZXJpbmcgKi8KLSAgdGltZXN0YW1wICs9IHByaXYtPm91dF9vZmZzZXQ7Ci0KLSAgcmV0dXJuIHRpbWVzdGFtcDsKLX0KLQotc3RhdGljIFRpbWVyUXVldWUgKgotdGltZXJfcXVldWVfbmV3ICh2b2lkKQotewotICBUaW1lclF1ZXVlICpxdWV1ZTsKLQotICBxdWV1ZSA9IGdfc2xpY2VfbmV3IChUaW1lclF1ZXVlKTsKLSAgcXVldWUtPnRpbWVycyA9IGdfcXVldWVfbmV3ICgpOwotICBxdWV1ZS0+aGFzaHRhYmxlID0gZ19oYXNoX3RhYmxlX25ldyAoTlVMTCwgTlVMTCk7Ci0KLSAgcmV0dXJuIHF1ZXVlOwotfQotCi1zdGF0aWMgdm9pZAotdGltZXJfcXVldWVfZnJlZSAoVGltZXJRdWV1ZSAqIHF1ZXVlKQotewotICBpZiAoIXF1ZXVlKQotICAgIHJldHVybjsKLQotICBnX2hhc2hfdGFibGVfZGVzdHJveSAocXVldWUtPmhhc2h0YWJsZSk7Ci0gIGdfcXVldWVfZnJlZV9mdWxsIChxdWV1ZS0+dGltZXJzLCBnX2ZyZWUpOwotICBnX3NsaWNlX2ZyZWUgKFRpbWVyUXVldWUsIHF1ZXVlKTsKLX0KLQotc3RhdGljIHZvaWQKLXRpbWVyX3F1ZXVlX2FwcGVuZCAoVGltZXJRdWV1ZSAqIHF1ZXVlLCBjb25zdCBUaW1lckRhdGEgKiB0aW1lciwKLSAgICBHc3RDbG9ja1RpbWUgdGltZW91dCwgZ2Jvb2xlYW4gbG9zdCkKLXsKLSAgVGltZXJEYXRhICpjb3B5OwotCi0gIGNvcHkgPSBnX21lbWR1cCAodGltZXIsIHNpemVvZiAoKnRpbWVyKSk7Ci0gIGNvcHktPnRpbWVvdXQgPSB0aW1lb3V0OwotICBjb3B5LT50eXBlID0gbG9zdCA/IFRJTUVSX1RZUEVfTE9TVCA6IFRJTUVSX1RZUEVfRVhQRUNURUQ7Ci0gIGNvcHktPmlkeCA9IC0xOwotCi0gIEdTVF9MT0cgKCJBcHBlbmQgcnR4LXN0YXRzIHRpbWVyICMlZCwgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgY29weS0+c2VxbnVtLCBHU1RfVElNRV9BUkdTIChjb3B5LT50aW1lb3V0KSk7Ci0gIGdfcXVldWVfcHVzaF90YWlsIChxdWV1ZS0+dGltZXJzLCBjb3B5KTsKLSAgZ19oYXNoX3RhYmxlX2luc2VydCAocXVldWUtPmhhc2h0YWJsZSwgR0lOVF9UT19QT0lOVEVSIChjb3B5LT5zZXFudW0pLCBjb3B5KTsKLX0KLQotc3RhdGljIHZvaWQKLXRpbWVyX3F1ZXVlX2NsZWFyX3VudGlsIChUaW1lclF1ZXVlICogcXVldWUsIEdzdENsb2NrVGltZSB0aW1lb3V0KQotewotICBUaW1lckRhdGEgKnRlc3Q7Ci0KLSAgdGVzdCA9IGdfcXVldWVfcGVla19oZWFkIChxdWV1ZS0+dGltZXJzKTsKLSAgd2hpbGUgKHRlc3QgJiYgdGVzdC0+dGltZW91dCA8IHRpbWVvdXQpIHsKLSAgICBHU1RfTE9HICgiUG9wIHJ0eC1zdGF0cyB0aW1lciAjJWQsICUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCB0ZXN0LT5zZXFudW0sIEdTVF9USU1FX0FSR1MgKHRlc3QtPnRpbWVvdXQpLAotICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lb3V0KSk7Ci0gICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocXVldWUtPmhhc2h0YWJsZSwgR0lOVF9UT19QT0lOVEVSICh0ZXN0LT5zZXFudW0pKTsKLSAgICBnX2ZyZWUgKGdfcXVldWVfcG9wX2hlYWQgKHF1ZXVlLT50aW1lcnMpKTsKLSAgICB0ZXN0ID0gZ19xdWV1ZV9wZWVrX2hlYWQgKHF1ZXVlLT50aW1lcnMpOwotICB9Ci19Ci0KLXN0YXRpYyBUaW1lckRhdGEgKgotdGltZXJfcXVldWVfZmluZCAoVGltZXJRdWV1ZSAqIHF1ZXVlLCBndWludDE2IHNlcW51bSkKLXsKLSAgcmV0dXJuIGdfaGFzaF90YWJsZV9sb29rdXAgKHF1ZXVlLT5oYXNodGFibGUsIEdJTlRfVE9fUE9JTlRFUiAoc2VxbnVtKSk7Ci19Ci0KLXN0YXRpYyBUaW1lckRhdGEgKgotZmluZF90aW1lciAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBndWludDE2IHNlcW51bSkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLSAgVGltZXJEYXRhICp0aW1lciA9IE5VTEw7Ci0gIGdpbnQgaSwgbGVuOwotCi0gIGxlbiA9IHByaXYtPnRpbWVycy0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBUaW1lckRhdGEgKnRlc3QgPSAmZ19hcnJheV9pbmRleCAocHJpdi0+dGltZXJzLCBUaW1lckRhdGEsIGkpOwotICAgIGlmICh0ZXN0LT5zZXFudW0gPT0gc2VxbnVtKSB7Ci0gICAgICB0aW1lciA9IHRlc3Q7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRpbWVyOwotfQotCi1zdGF0aWMgdm9pZAotdW5zY2hlZHVsZV9jdXJyZW50X3RpbWVyIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgaWYgKHByaXYtPmNsb2NrX2lkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAidW5zY2hlZHVsZSBjdXJyZW50IHRpbWVyIik7Ci0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKHByaXYtPmNsb2NrX2lkKTsKLSAgICBwcml2LT5jbG9ja19pZCA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotZ2V0X3RpbWVvdXQgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgVGltZXJEYXRhICogdGltZXIpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0gIEdzdENsb2NrVGltZSB0ZXN0X3RpbWVvdXQ7Ci0KLSAgaWYgKCh0ZXN0X3RpbWVvdXQgPSB0aW1lci0+dGltZW91dCkgPT0gLTEpCi0gICAgcmV0dXJuIC0xOwotCi0gIGlmICh0aW1lci0+dHlwZSAhPSBUSU1FUl9UWVBFX0VYUEVDVEVEKSB7Ci0gICAgLyogYWRkIG91ciBsYXRlbmN5IGFuZCBvZmZzZXQgdG8gZ2V0IG91dHB1dCB0aW1lcy4gKi8KLSAgICB0ZXN0X3RpbWVvdXQgPSBhcHBseV9vZmZzZXQgKGppdHRlcmJ1ZmZlciwgdGVzdF90aW1lb3V0KTsKLSAgICB0ZXN0X3RpbWVvdXQgKz0gcHJpdi0+bGF0ZW5jeV9uczsKLSAgfQotICByZXR1cm4gdGVzdF90aW1lb3V0OwotfQotCi1zdGF0aWMgdm9pZAotcmVjYWxjdWxhdGVfdGltZXIgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgVGltZXJEYXRhICogdGltZXIpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgaWYgKHByaXYtPmNsb2NrX2lkKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIHRpbWVvdXQgPSBnZXRfdGltZW91dCAoaml0dGVyYnVmZmVyLCB0aW1lcik7Ci0KLSAgICBHU1RfREVCVUcgKCIlIiBHU1RfVElNRV9GT1JNQVQgIiA8PiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVvdXQpLCBHU1RfVElNRV9BUkdTIChwcml2LT50aW1lcl90aW1lb3V0KSk7Ci0KLSAgICBpZiAodGltZW91dCA9PSAtMSB8fCB0aW1lb3V0IDwgcHJpdi0+dGltZXJfdGltZW91dCkKLSAgICAgIHVuc2NoZWR1bGVfY3VycmVudF90aW1lciAoaml0dGVyYnVmZmVyKTsKLSAgfQotfQotCi1zdGF0aWMgVGltZXJEYXRhICoKLWFkZF90aW1lciAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBUaW1lclR5cGUgdHlwZSwKLSAgICBndWludDE2IHNlcW51bSwgZ3VpbnQgbnVtLCBHc3RDbG9ja1RpbWUgdGltZW91dCwgR3N0Q2xvY2tUaW1lIGRlbGF5LAotICAgIEdzdENsb2NrVGltZSBkdXJhdGlvbikKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLSAgVGltZXJEYXRhICp0aW1lcjsKLSAgZ2ludCBsZW47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgImFkZCB0aW1lciAlZCBmb3Igc2VxbnVtICVkIHRvICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkZWxheSAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCB0eXBlLCBzZXFudW0sIEdTVF9USU1FX0FSR1MgKHRpbWVvdXQpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoZGVsYXkpKTsKLQotICBsZW4gPSBwcml2LT50aW1lcnMtPmxlbjsKLSAgZ19hcnJheV9zZXRfc2l6ZSAocHJpdi0+dGltZXJzLCBsZW4gKyAxKTsKLSAgdGltZXIgPSAmZ19hcnJheV9pbmRleCAocHJpdi0+dGltZXJzLCBUaW1lckRhdGEsIGxlbik7Ci0gIHRpbWVyLT5pZHggPSBsZW47Ci0gIHRpbWVyLT50eXBlID0gdHlwZTsKLSAgdGltZXItPnNlcW51bSA9IHNlcW51bTsKLSAgdGltZXItPm51bSA9IG51bTsKLSAgdGltZXItPnRpbWVvdXQgPSB0aW1lb3V0ICsgZGVsYXk7Ci0gIHRpbWVyLT5kdXJhdGlvbiA9IGR1cmF0aW9uOwotICBpZiAodHlwZSA9PSBUSU1FUl9UWVBFX0VYUEVDVEVEKSB7Ci0gICAgdGltZXItPnJ0eF9iYXNlID0gdGltZW91dDsKLSAgICB0aW1lci0+cnR4X2RlbGF5ID0gZGVsYXk7Ci0gICAgdGltZXItPnJ0eF9yZXRyeSA9IDA7Ci0gIH0KLSAgdGltZXItPnJ0eF9sYXN0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgdGltZXItPm51bV9ydHhfcmV0cnkgPSAwOwotICB0aW1lci0+bnVtX3J0eF9yZWNlaXZlZCA9IDA7Ci0gIHJlY2FsY3VsYXRlX3RpbWVyIChqaXR0ZXJidWZmZXIsIHRpbWVyKTsKLSAgSkJVRl9TSUdOQUxfVElNRVIgKHByaXYpOwotCi0gIHJldHVybiB0aW1lcjsKLX0KLQotc3RhdGljIHZvaWQKLXJlc2NoZWR1bGVfdGltZXIgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgVGltZXJEYXRhICogdGltZXIsCi0gICAgZ3VpbnQxNiBzZXFudW0sIEdzdENsb2NrVGltZSB0aW1lb3V0LCBHc3RDbG9ja1RpbWUgZGVsYXksIGdib29sZWFuIHJlc2V0KQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBnYm9vbGVhbiBzZXFjaGFuZ2UsIHRpbWVjaGFuZ2U7Ci0gIGd1aW50MTYgb2xkc2VxOwotICBHc3RDbG9ja1RpbWUgbmV3X3RpbWVvdXQ7Ci0KLSAgb2xkc2VxID0gdGltZXItPnNlcW51bTsKLSAgbmV3X3RpbWVvdXQgPSB0aW1lb3V0ICsgZGVsYXk7Ci0gIHNlcWNoYW5nZSA9IG9sZHNlcSAhPSBzZXFudW07Ci0gIHRpbWVjaGFuZ2UgPSB0aW1lci0+dGltZW91dCAhPSBuZXdfdGltZW91dDsKLQotICBpZiAoIXNlcWNoYW5nZSAmJiAhdGltZWNoYW5nZSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwKLSAgICAgICAgIk5vIGNoYW5nZXMgaW4gc2VxbnVtICglZCkgYW5kIHRpbWVvdXQgKCUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiKSwgc2tpcHBpbmciLCBvbGRzZXEsIEdTVF9USU1FX0FSR1MgKHRpbWVyLT50aW1lb3V0KSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgInJlcGxhY2UgdGltZXIgJWQgZm9yIHNlcW51bSAlZC0+JWQgdGltZW91dCAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICItPiUiIEdTVF9USU1FX0ZPUk1BVCwgdGltZXItPnR5cGUsIG9sZHNlcSwgc2VxbnVtLAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXItPnRpbWVvdXQpLCBHU1RfVElNRV9BUkdTIChuZXdfdGltZW91dCkpOwotCi0gIHRpbWVyLT50aW1lb3V0ID0gbmV3X3RpbWVvdXQ7Ci0gIHRpbWVyLT5zZXFudW0gPSBzZXFudW07Ci0gIGlmIChyZXNldCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInJlc2V0IHJ0eCBkZWxheSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgIi0+JSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lci0+cnR4X2RlbGF5KSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZGVsYXkpKTsKLSAgICB0aW1lci0+cnR4X2Jhc2UgPSB0aW1lb3V0OwotICAgIHRpbWVyLT5ydHhfZGVsYXkgPSBkZWxheTsKLSAgICB0aW1lci0+cnR4X3JldHJ5ID0gMDsKLSAgfQotICBpZiAoc2VxY2hhbmdlKSB7Ci0gICAgdGltZXItPm51bV9ydHhfcmV0cnkgPSAwOwotICAgIHRpbWVyLT5udW1fcnR4X3JlY2VpdmVkID0gMDsKLSAgfQotCi0gIGlmIChwcml2LT5jbG9ja19pZCkgewotICAgIC8qIHdlIGNoYW5nZWQgdGhlIHNlcW51bSBhbmQgdGhlcmUgaXMgYSB0aW1lciBjdXJyZW50bHkgd2FpdGluZyB3aXRoIHRoaXMKLSAgICAgKiBzZXFudW0sIHVuc2NoZWR1bGUgaXQgKi8KLSAgICBpZiAoc2VxY2hhbmdlICYmIHByaXYtPnRpbWVyX3NlcW51bSA9PSBvbGRzZXEpCi0gICAgICB1bnNjaGVkdWxlX2N1cnJlbnRfdGltZXIgKGppdHRlcmJ1ZmZlcik7Ci0gICAgLyogd2UgY2hhbmdlZCB0aGUgdGltZSwgY2hlY2sgaWYgaXQgaXMgZWFybGllciB0aGFuIHdoYXQgd2UgYXJlIHdhaXRpbmcKLSAgICAgKiBmb3IgYW5kIHVuc2NoZWR1bGUgaWYgc28gKi8KLSAgICBlbHNlIGlmICh0aW1lY2hhbmdlKQotICAgICAgcmVjYWxjdWxhdGVfdGltZXIgKGppdHRlcmJ1ZmZlciwgdGltZXIpOwotICB9Ci19Ci0KLXN0YXRpYyBUaW1lckRhdGEgKgotc2V0X3RpbWVyIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIFRpbWVyVHlwZSB0eXBlLAotICAgIGd1aW50MTYgc2VxbnVtLCBHc3RDbG9ja1RpbWUgdGltZW91dCkKLXsKLSAgVGltZXJEYXRhICp0aW1lcjsKLQotICAvKiBmaW5kIHRoZSBzZXFudW0gdGltZXIgKi8KLSAgdGltZXIgPSBmaW5kX3RpbWVyIChqaXR0ZXJidWZmZXIsIHNlcW51bSk7Ci0gIGlmICh0aW1lciA9PSBOVUxMKSB7Ci0gICAgdGltZXIgPSBhZGRfdGltZXIgKGppdHRlcmJ1ZmZlciwgdHlwZSwgc2VxbnVtLCAwLCB0aW1lb3V0LCAwLCAtMSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzY2hlZHVsZV90aW1lciAoaml0dGVyYnVmZmVyLCB0aW1lciwgc2VxbnVtLCB0aW1lb3V0LCAwLCBGQUxTRSk7Ci0gIH0KLSAgcmV0dXJuIHRpbWVyOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX3RpbWVyIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIFRpbWVyRGF0YSAqIHRpbWVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBndWludCBpZHg7Ci0KLSAgaWYgKHRpbWVyLT5pZHggPT0gLTEpCi0gICAgcmV0dXJuOwotCi0gIGlmIChwcml2LT5jbG9ja19pZCAmJiBwcml2LT50aW1lcl9zZXFudW0gPT0gdGltZXItPnNlcW51bSkKLSAgICB1bnNjaGVkdWxlX2N1cnJlbnRfdGltZXIgKGppdHRlcmJ1ZmZlcik7Ci0KLSAgaWR4ID0gdGltZXItPmlkeDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAicmVtb3ZlZCBpbmRleCAlZCIsIGlkeCk7Ci0gIGdfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKHByaXYtPnRpbWVycywgaWR4KTsKLSAgdGltZXItPmlkeCA9IGlkeDsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9hbGxfdGltZXJzIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInJlbW92ZWQgYWxsIHRpbWVycyIpOwotICBnX2FycmF5X3NldF9zaXplIChwcml2LT50aW1lcnMsIDApOwotICB1bnNjaGVkdWxlX2N1cnJlbnRfdGltZXIgKGppdHRlcmJ1ZmZlcik7Ci19Ci0KLS8qIGdldCB0aGUgZXh0cmEgZGVsYXkgdG8gd2FpdCBiZWZvcmUgc2VuZGluZyBSVFggKi8KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWdldF9ydHhfZGVsYXkgKEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKiBwcml2KQotewotICBHc3RDbG9ja1RpbWUgZGVsYXk7Ci0KLSAgaWYgKHByaXYtPnJ0eF9kZWxheSA9PSAtMSkgewotICAgIGlmIChwcml2LT5hdmdfaml0dGVyID09IDAgJiYgcHJpdi0+cGFja2V0X3NwYWNpbmcgPT0gMCkgewotICAgICAgZGVsYXkgPSBERUZBVUxUX0FVVE9fUlRYX0RFTEFZOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBqaXR0ZXIgaXMgaW4gbmFub3NlY29uZHMsIG1heGltdW0gb2YgMnggaml0dGVyIGFuZCBoYWxmIHRoZQotICAgICAgICogcGFja2V0IHNwYWNpbmcgaXMgYSBnb29kIG1hcmdpbiAqLwotICAgICAgZGVsYXkgPSBNQVggKHByaXYtPmF2Z19qaXR0ZXIgKiAyLCBwcml2LT5wYWNrZXRfc3BhY2luZyAvIDIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBkZWxheSA9IHByaXYtPnJ0eF9kZWxheSAqIEdTVF9NU0VDT05EOwotICB9Ci0gIGlmIChwcml2LT5ydHhfbWluX2RlbGF5ID4gMCkKLSAgICBkZWxheSA9IE1BWCAoZGVsYXksIHByaXYtPnJ0eF9taW5fZGVsYXkgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgcmV0dXJuIGRlbGF5OwotfQotCi0vKiBDaGVjayBpZiBwYWNrZXQgd2l0aCBzZXFudW0gaXMgYWxyZWFkeSBjb25zaWRlcmVkIGRlZmluaXRlbHkgbG9zdCBieSBiZWluZwotICogcGFydCBvZiBhICJsb3N0IHRpbWVyIiBmb3IgbXVsdGlwbGUgcGFja2V0cyAqLwotc3RhdGljIGdib29sZWFuCi1hbHJlYWR5X2xvc3QgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgZ3VpbnQxNiBzZXFudW0pCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0gIGdpbnQgaSwgbGVuOwotCi0gIGxlbiA9IHByaXYtPnRpbWVycy0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBUaW1lckRhdGEgKnRlc3QgPSAmZ19hcnJheV9pbmRleCAocHJpdi0+dGltZXJzLCBUaW1lckRhdGEsIGkpOwotICAgIGdpbnQgZ2FwID0gZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKHRlc3QtPnNlcW51bSwgc2VxbnVtKTsKLQotICAgIGlmICh0ZXN0LT5udW0gPiAxICYmIHRlc3QtPnR5cGUgPT0gVElNRVJfVFlQRV9MT1NUICYmIGdhcCA+PSAwICYmCi0gICAgICAgIGdhcCA8IHRlc3QtPm51bSkgewotICAgICAgR1NUX0RFQlVHICgic2VxbnVtICMlZCBhbHJlYWR5IGNvbnNpZGVyZWQgZGVmaW5pdGVseSBsb3N0ICgjJWQtPiMlZCkiLAotICAgICAgICAgIHNlcW51bSwgdGVzdC0+c2VxbnVtLCAodGVzdC0+c2VxbnVtICsgdGVzdC0+bnVtIC0gMSkgJiAweGZmZmYpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiB3ZSBqdXN0IHJlY2VpdmVkIGEgcGFja2V0IHdpdGggc2VxbnVtIGFuZCBkdHMuCi0gKgotICogRmlyc3QgY2hlY2sgZm9yIG9sZCBzZXFudW0gdGhhdCB3ZSBhcmUgc3RpbGwgZXhwZWN0aW5nLiBJZiB0aGUgZ2FwIHdpdGggdGhlCi0gKiBjdXJyZW50IHNlcW51bSBpcyB0b28gYmlnLCB1bnNjaGVkdWxlIHRoZSB0aW1lb3V0cy4KLSAqCi0gKiBJZiB3ZSBoYXZlIGEgdmFsaWQgcGFja2V0IHNwYWNpbmcgZXN0aW1hdGUgd2UgY2FuIHNldCBhIHRpbWVyIGZvciB3aGVuIHdlCi0gKiBzaG91bGQgcmVjZWl2ZSB0aGUgbmV4dCBwYWNrZXQuCi0gKiBJZiB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgZXN0aW1hdGUsIHdlIHJlbW92ZSBhbnkgdGltZXIgd2UgbWlnaHQgaGF2ZQotICogaGFkIGZvciB0aGlzIHBhY2tldC4KLSAqLwotc3RhdGljIHZvaWQKLXVwZGF0ZV90aW1lcnMgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgZ3VpbnQxNiBzZXFudW0sCi0gICAgR3N0Q2xvY2tUaW1lIGR0cywgR3N0Q2xvY2tUaW1lIHB0cywgZ2Jvb2xlYW4gZG9fbmV4dF9zZXFudW0sCi0gICAgZ2Jvb2xlYW4gaXNfcnR4LCBUaW1lckRhdGEgKiB0aW1lcikKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICAvKiBnbyB0aHJvdWdoIGFsbCB0aW1lcnMgYW5kIHVuc2NoZWR1bGUgdGhlIG9uZXMgd2l0aCBhIGxhcmdlIGdhcCAqLwotICBpZiAocHJpdi0+ZG9fcmV0cmFuc21pc3Npb24gJiYgcHJpdi0+cnR4X2RlbGF5X3Jlb3JkZXIgPiAwKSB7Ci0gICAgZ2ludCBpLCBsZW47Ci0gICAgbGVuID0gcHJpdi0+dGltZXJzLT5sZW47Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICBUaW1lckRhdGEgKnRlc3QgPSAmZ19hcnJheV9pbmRleCAocHJpdi0+dGltZXJzLCBUaW1lckRhdGEsIGkpOwotICAgICAgZ2ludCBnYXA7Ci0KLSAgICAgIGdhcCA9IGdzdF9ydHBfYnVmZmVyX2NvbXBhcmVfc2VxbnVtICh0ZXN0LT5zZXFudW0sIHNlcW51bSk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIiVkLCAjJWQ8LT4jJWQgZ2FwICVkIiwKLSAgICAgICAgICB0ZXN0LT50eXBlLCB0ZXN0LT5zZXFudW0sIHNlcW51bSwgZ2FwKTsKLQotICAgICAgaWYgKGdhcCA+IHByaXYtPnJ0eF9kZWxheV9yZW9yZGVyKSB7Ci0gICAgICAgIC8qIG1heCBnYXAsIHdlIGV4Y2VlZGVkIHRoZSBtYXggcmVvcmRlciBkaXN0YW5jZSBhbmQgd2UgZG9uJ3QgZXhwZWN0IHRoZQotICAgICAgICAgKiBtaXNzaW5nIHBhY2tldCB0byBiZSB0aGlzIHJlb3JkZXJlZCAqLwotICAgICAgICBpZiAodGVzdC0+bnVtX3J0eF9yZXRyeSA9PSAwICYmIHRlc3QtPnR5cGUgPT0gVElNRVJfVFlQRV9FWFBFQ1RFRCkKLSAgICAgICAgICByZXNjaGVkdWxlX3RpbWVyIChqaXR0ZXJidWZmZXIsIHRlc3QsIHRlc3QtPnNlcW51bSwgLTEsIDAsIEZBTFNFKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBkb19uZXh0X3NlcW51bSA9IGRvX25leHRfc2VxbnVtICYmIHByaXYtPnBhY2tldF9zcGFjaW5nID4gMAotICAgICAgJiYgcHJpdi0+ZG9fcmV0cmFuc21pc3Npb24gJiYgcHJpdi0+cnR4X25leHRfc2VxbnVtOwotCi0gIGlmICh0aW1lciAmJiB0aW1lci0+dHlwZSAhPSBUSU1FUl9UWVBFX0RFQURMSU5FKSB7Ci0gICAgaWYgKHRpbWVyLT5udW1fcnR4X3JldHJ5ID4gMCkgewotICAgICAgaWYgKGlzX3J0eCkgewotICAgICAgICB1cGRhdGVfcnR4X3N0YXRzIChqaXR0ZXJidWZmZXIsIHRpbWVyLCBkdHMsIFRSVUUpOwotICAgICAgICAvKiBkb24ndCB0cnkgdG8gZXN0aW1hdGUgdGhlIG5leHQgc2VxbnVtIGJlY2F1c2UgdGhpcyBpcyBhIHJldHJhbnNtaXR0ZWQKLSAgICAgICAgICogcGFja2V0IGFuZCBpdCBwcm9iYWJseSBkaWQgbm90IGFycml2ZSB3aXRoIHRoZSBleHBlY3RlZCBwYWNrZXQKLSAgICAgICAgICogc3BhY2luZy4gKi8KLSAgICAgICAgZG9fbmV4dF9zZXFudW0gPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFpc19ydHggfHwgdGltZXItPm51bV9ydHhfcmV0cnkgPiAxKSB7Ci0gICAgICAgIC8qIFN0b3JlIHRpbWVyIGluIG9yZGVyIHRvIHJlY29yZCBzdGF0cyB3aGVuL2lmIHRoZSByZXRyYW5zbWl0dGVkCi0gICAgICAgICAqIHBhY2tldCBhcnJpdmVzLiBXZSBzaG91bGQgYWxzbyBzdG9yZSB0aW1lciBpbmZvcm1hdGlvbiBpZiB3ZSd2ZQotICAgICAgICAgKiByZXF1ZXN0ZWQgcmV0cmFuc21pc3Npb24gbW9yZSB0aGFuIG9uY2Ugc2luY2Ugd2UgbWF5IHJlY2VpdmUKLSAgICAgICAgICogc2V2ZXJhbCByZXRyYW5zbWl0dGVkIHBhY2tldHMuIEZvciBhY2N1cmFjeSB3ZSBzaG91bGQgdXBkYXRlIHRoZQotICAgICAgICAgKiBzdGF0cyBhbHNvIHdoZW4gdGhlIHJlZHVuZGFudCByZXRyYW5zbWl0dGVkIHBhY2tldHMgYXJyaXZlcy4gKi8KLSAgICAgICAgdGltZXJfcXVldWVfYXBwZW5kIChwcml2LT5ydHhfc3RhdHNfdGltZXJzLCB0aW1lciwKLSAgICAgICAgICAgIHB0cyArIHByaXYtPnJ0eF9zdGF0c190aW1lb3V0ICogR1NUX01TRUNPTkQsIEZBTFNFKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoZG9fbmV4dF9zZXFudW0gJiYgcHRzICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBHc3RDbG9ja1RpbWUgZXhwZWN0ZWQsIGRlbGF5OwotCi0gICAgLyogY2FsY3VsYXRlIGV4cGVjdGVkIGFycml2YWwgdGltZSBvZiB0aGUgbmV4dCBzZXFudW0gKi8KLSAgICBleHBlY3RlZCA9IHB0cyArIHByaXYtPnBhY2tldF9zcGFjaW5nOwotCi0gICAgZGVsYXkgPSBnZXRfcnR4X2RlbGF5IChwcml2KTsKLQotICAgIC8qIGFuZCB1cGRhdGUvaW5zdGFsbCB0aW1lciBmb3IgbmV4dCBzZXFudW0gKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJBZGQgUlRYIHRpbWVyICMlZCwgZXhwZWN0ZWQgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIsIGRlbGF5ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBwYWNrZXQtc3BhY2luZyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiwgaml0dGVyICUiIEdTVF9USU1FX0ZPUk1BVCwgcHJpdi0+bmV4dF9pbl9zZXFudW0sCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGV4cGVjdGVkKSwgR1NUX1RJTUVfQVJHUyAoZGVsYXkpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChwcml2LT5wYWNrZXRfc3BhY2luZyksIEdTVF9USU1FX0FSR1MgKHByaXYtPmF2Z19qaXR0ZXIpKTsKLQotICAgIGlmICh0aW1lcikgewotICAgICAgdGltZXItPnR5cGUgPSBUSU1FUl9UWVBFX0VYUEVDVEVEOwotICAgICAgcmVzY2hlZHVsZV90aW1lciAoaml0dGVyYnVmZmVyLCB0aW1lciwgcHJpdi0+bmV4dF9pbl9zZXFudW0sIGV4cGVjdGVkLAotICAgICAgICAgIGRlbGF5LCBUUlVFKTsKLSAgICB9IGVsc2UgewotICAgICAgYWRkX3RpbWVyIChqaXR0ZXJidWZmZXIsIFRJTUVSX1RZUEVfRVhQRUNURUQsIHByaXYtPm5leHRfaW5fc2VxbnVtLCAwLAotICAgICAgICAgIGV4cGVjdGVkLCBkZWxheSwgcHJpdi0+cGFja2V0X3NwYWNpbmcpOwotICAgIH0KLSAgfSBlbHNlIGlmICh0aW1lciAmJiB0aW1lci0+dHlwZSAhPSBUSU1FUl9UWVBFX0RFQURMSU5FKSB7Ci0gICAgLyogaWYgd2UgaGFkIGEgdGltZXIsIHJlbW92ZSBpdCwgd2UgZG9uJ3Qga25vdyB3aGVuIHRvIGV4cGVjdCB0aGUgbmV4dAotICAgICAqIHBhY2tldC4gKi8KLSAgICByZW1vdmVfdGltZXIgKGppdHRlcmJ1ZmZlciwgdGltZXIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxjdWxhdGVfcGFja2V0X3NwYWNpbmcgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgZ3VpbnQzMiBydHB0aW1lLAotICAgIEdzdENsb2NrVGltZSBwdHMpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgLyogd2UgbmVlZCBjb25zZWN1dGl2ZSBzZXFudW1zIHdpdGggYSBkaWZmZXJlbnQKLSAgICogcnRwdGltZSB0byBlc3RpbWF0ZSB0aGUgcGFja2V0IHNwYWNpbmcuICovCi0gIGlmIChwcml2LT5pcHNfcnRwdGltZSAhPSBydHB0aW1lKSB7Ci0gICAgLyogcnRwdGltZSBjaGFuZ2VkLCBjaGVjayBwdHMgZGlmZiAqLwotICAgIGlmIChwcml2LT5pcHNfcHRzICE9IC0xICYmIHB0cyAhPSAtMSAmJiBwdHMgPiBwcml2LT5pcHNfcHRzKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgbmV3X3BhY2tldF9zcGFjaW5nID0gcHRzIC0gcHJpdi0+aXBzX3B0czsKLSAgICAgIEdzdENsb2NrVGltZSBvbGRfcGFja2V0X3NwYWNpbmcgPSBwcml2LT5wYWNrZXRfc3BhY2luZzsKLQotICAgICAgLyogQmlhc2VkIHRvd2FyZHMgYmlnZ2VyIHBhY2tldCBzcGFjaW5ncyB0byBwcmV2ZW50Ci0gICAgICAgKiB0b28gbWFueSB1bm5lZWRlZCByZXRyYW5zbWlzc2lvbiByZXF1ZXN0cyBmb3IgbmV4dAotICAgICAgICogcGFja2V0cyB0aGF0IGp1c3QgYXJyaXZlIGEgbGl0dGxlIGxhdGVyIHRoYW4gd2Ugd291bGQKLSAgICAgICAqIGV4cGVjdCAqLwotICAgICAgaWYgKG9sZF9wYWNrZXRfc3BhY2luZyA+IG5ld19wYWNrZXRfc3BhY2luZykKLSAgICAgICAgcHJpdi0+cGFja2V0X3NwYWNpbmcgPQotICAgICAgICAgICAgKG5ld19wYWNrZXRfc3BhY2luZyArIDMgKiBvbGRfcGFja2V0X3NwYWNpbmcpIC8gNDsKLSAgICAgIGVsc2UgaWYgKG9sZF9wYWNrZXRfc3BhY2luZyA+IDApCi0gICAgICAgIHByaXYtPnBhY2tldF9zcGFjaW5nID0KLSAgICAgICAgICAgICgzICogbmV3X3BhY2tldF9zcGFjaW5nICsgb2xkX3BhY2tldF9zcGFjaW5nKSAvIDQ7Ci0gICAgICBlbHNlCi0gICAgICAgIHByaXYtPnBhY2tldF9zcGFjaW5nID0gbmV3X3BhY2tldF9zcGFjaW5nOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAgICAgIm5ldyBwYWNrZXQgc3BhY2luZyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiIG9sZCBwYWNrZXQgc3BhY2luZyAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiIGNvbWJpbmVkIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChuZXdfcGFja2V0X3NwYWNpbmcpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG9sZF9wYWNrZXRfc3BhY2luZyksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocHJpdi0+cGFja2V0X3NwYWNpbmcpKTsKLSAgICB9Ci0gICAgcHJpdi0+aXBzX3J0cHRpbWUgPSBydHB0aW1lOwotICAgIHByaXYtPmlwc19wdHMgPSBwdHM7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNhbGN1bGF0ZV9leHBlY3RlZCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBndWludDMyIGV4cGVjdGVkLAotICAgIGd1aW50MTYgc2VxbnVtLCBHc3RDbG9ja1RpbWUgcHRzLCBnaW50IGdhcCkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCBleHBlY3RlZF9wdHMsIGRlbGF5OwotICBUaW1lclR5cGUgdHlwZTsKLSAgZ2Jvb2xlYW4gZXF1aWRpc3RhbnQgPSBwcml2LT5lcXVpZGlzdGFudCA+IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgInB0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgbGFzdCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChwdHMpLCBHU1RfVElNRV9BUkdTIChwcml2LT5sYXN0X2luX3B0cykpOwotCi0gIGlmIChwdHMgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiSGF2ZSBubyBQVFMiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoZXF1aWRpc3RhbnQpIHsKLSAgICBHc3RDbG9ja1RpbWUgdG90YWxfZHVyYXRpb247Ci0gICAgLyogdGhlIHRvdGFsIGR1cmF0aW9uIHNwYW5uZWQgYnkgdGhlIG1pc3NpbmcgcGFja2V0cyAqLwotICAgIGlmIChwdHMgPj0gcHJpdi0+bGFzdF9pbl9wdHMpCi0gICAgICB0b3RhbF9kdXJhdGlvbiA9IHB0cyAtIHByaXYtPmxhc3RfaW5fcHRzOwotICAgIGVsc2UKLSAgICAgIHRvdGFsX2R1cmF0aW9uID0gMDsKLQotICAgIC8qIGludGVycG9sYXRlIGJldHdlZW4gdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhlIGxhc3QgdGltZSBiYXNlZCBvbgotICAgICAqIG51bWJlciBvZiBwYWNrZXRzIHdlIGFyZSBtaXNzaW5nLCB0aGlzIGlzIHRoZSBlc3RpbWF0ZWQgZHVyYXRpb24KLSAgICAgKiBmb3IgdGhlIG1pc3NpbmcgcGFja2V0IGJhc2VkIG9uIGVxdWlkaXN0YW50IHBhY2tldCBzcGFjaW5nLiAqLwotICAgIGR1cmF0aW9uID0gdG90YWxfZHVyYXRpb24gLyAoZ2FwICsgMSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSk7Ci0KLSAgICBpZiAodG90YWxfZHVyYXRpb24gPiBwcml2LT5sYXRlbmN5X25zKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgZ2FwX3RpbWU7Ci0gICAgICBndWludCBsb3N0X3BhY2tldHM7Ci0KLSAgICAgIGlmIChkdXJhdGlvbiA+IDApIHsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIGdhcF9kdXIgPSBnYXAgKiBkdXJhdGlvbjsKLSAgICAgICAgaWYgKGdhcF9kdXIgPiBwcml2LT5sYXRlbmN5X25zKQotICAgICAgICAgIGdhcF90aW1lID0gZ2FwX2R1ciAtIHByaXYtPmxhdGVuY3lfbnM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnYXBfdGltZSA9IDA7Ci0gICAgICAgIGxvc3RfcGFja2V0cyA9IGdhcF90aW1lIC8gZHVyYXRpb247Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnYXBfdGltZSA9IHRvdGFsX2R1cmF0aW9uIC0gcHJpdi0+bGF0ZW5jeV9uczsKLSAgICAgICAgbG9zdF9wYWNrZXRzID0gZ2FwOwotICAgICAgfQotCi0gICAgICAvKiB0b28gbWFueSBsb3N0IHBhY2tldHMsIHNvbWUgb2YgdGhlIG1pc3NpbmcgcGFja2V0cyBhcmUgYWxyZWFkeQotICAgICAgICogdG9vIGxhdGUgYW5kIHdlIGNhbiBnZW5lcmF0ZSBsb3N0IHBhY2tldCBldmVudHMgZm9yIHRoZW0uICovCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwKLSAgICAgICAgICAibG9zdCBwYWNrZXRzICglZCwgIyVkLT4jJWQpIGR1cmF0aW9uIHRvbyBsYXJnZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICAgICAiID4gJSIgR1NUX1RJTUVfRk9STUFUICIsIGNvbnNpZGVyICV1IGxvc3QgKCUiIEdTVF9USU1FX0ZPUk1BVCAiKSIsCi0gICAgICAgICAgZ2FwLCBleHBlY3RlZCwgc2VxbnVtIC0gMSwgR1NUX1RJTUVfQVJHUyAodG90YWxfZHVyYXRpb24pLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHByaXYtPmxhdGVuY3lfbnMpLCBsb3N0X3BhY2tldHMsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZ2FwX3RpbWUpKTsKLQotICAgICAgLyogdGhpcyB0aW1lciB3aWxsIGZpcmUgaW1tZWRpYXRlbHkgYW5kIHRoZSBsb3N0IGV2ZW50IHdpbGwgYmUgcHVzaGVkIGZyb20KLSAgICAgICAqIHRoZSB0aW1lciB0aHJlYWQgKi8KLSAgICAgIGlmIChsb3N0X3BhY2tldHMgPiAwKSB7Ci0gICAgICAgIGFkZF90aW1lciAoaml0dGVyYnVmZmVyLCBUSU1FUl9UWVBFX0xPU1QsIGV4cGVjdGVkLCBsb3N0X3BhY2tldHMsCi0gICAgICAgICAgICBwcml2LT5sYXN0X2luX3B0cyArIGR1cmF0aW9uLCAwLCBnYXBfdGltZSk7Ci0gICAgICAgIGV4cGVjdGVkICs9IGxvc3RfcGFja2V0czsKLSAgICAgICAgcHJpdi0+bGFzdF9pbl9wdHMgKz0gZ2FwX3RpbWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZXhwZWN0ZWRfcHRzID0gcHJpdi0+bGFzdF9pbl9wdHMgKyBkdXJhdGlvbjsKLSAgfSBlbHNlIHsKLSAgICAvKiBJZiB3ZSBjYW5ub3QgYXNzdW1lIGVxdWlkaXN0YW50IHBhY2tldCBzcGFjaW5nLCB0aGUgb25seSB0aGluZyB3ZSBub3cKLSAgICAgKiBmb3Igc3VyZSBpcyB0aGF0IHRoZSBtaXNzaW5nIHBhY2tldHMgaGF2ZSBleHBlY3RlZCBwdHMgbm90IGxhdGVyIHRoYW4KLSAgICAgKiB0aGUgbGFzdCByZWNlaXZlZCBwdHMuICovCi0gICAgZHVyYXRpb24gPSAwOwotICAgIGV4cGVjdGVkX3B0cyA9IHB0czsKLSAgfQotCi0gIGRlbGF5ID0gMDsKLQotICBpZiAocHJpdi0+ZG9fcmV0cmFuc21pc3Npb24pIHsKLSAgICBUaW1lckRhdGEgKnRpbWVyID0gZmluZF90aW1lciAoaml0dGVyYnVmZmVyLCBleHBlY3RlZCk7Ci0KLSAgICB0eXBlID0gVElNRVJfVFlQRV9FWFBFQ1RFRDsKLSAgICBkZWxheSA9IGdldF9ydHhfZGVsYXkgKHByaXYpOwotCi0gICAgLyogaWYgd2UgaGFkIGEgdGltZXIgZm9yIHRoZSBmaXJzdCBtaXNzaW5nIHBhY2tldCwgdXBkYXRlIGl0LiAqLwotICAgIGlmICh0aW1lciAmJiB0aW1lci0+dHlwZSA9PSBUSU1FUl9UWVBFX0VYUEVDVEVEKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGltZW91dCA9IHRpbWVyLT50aW1lb3V0OwotCi0gICAgICB0aW1lci0+ZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICAgIGlmICh0aW1lb3V0ID4gKGV4cGVjdGVkX3B0cyArIGRlbGF5KSAmJiB0aW1lci0+bnVtX3J0eF9yZXRyeSA9PSAwKSB7Ci0gICAgICAgIHJlc2NoZWR1bGVfdGltZXIgKGppdHRlcmJ1ZmZlciwgdGltZXIsIHRpbWVyLT5zZXFudW0sIGV4cGVjdGVkX3B0cywKLSAgICAgICAgICAgIGRlbGF5LCBUUlVFKTsKLSAgICAgIH0KLSAgICAgIGV4cGVjdGVkKys7Ci0gICAgICBleHBlY3RlZF9wdHMgKz0gZHVyYXRpb247Ci0gICAgfQotICB9IGVsc2UgewotICAgIHR5cGUgPSBUSU1FUl9UWVBFX0xPU1Q7Ci0gIH0KLQotICB3aGlsZSAoZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKGV4cGVjdGVkLCBzZXFudW0pID4gMCkgewotICAgIGFkZF90aW1lciAoaml0dGVyYnVmZmVyLCB0eXBlLCBleHBlY3RlZCwgMCwgZXhwZWN0ZWRfcHRzLCBkZWxheSwgZHVyYXRpb24pOwotICAgIGV4cGVjdGVkX3B0cyArPSBkdXJhdGlvbjsKLSAgICBleHBlY3RlZCsrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxjdWxhdGVfaml0dGVyIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIEdzdENsb2NrVGltZSBkdHMsCi0gICAgZ3VpbnQzMiBydHB0aW1lKQotewotICBnaW50MzIgcnRwZGlmZjsKLSAgR3N0Q2xvY2tUaW1lRGlmZiBkdHNkaWZmLCBydHBkaWZmbnMsIGRpZmY7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0KLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBpZiAoR19VTkxJS0VMWSAoZHRzID09IEdTVF9DTE9DS19USU1FX05PTkUpIHx8IHByaXYtPmNsb2NrX3JhdGUgPD0gMCkKLSAgICBnb3RvIG5vX3RpbWU7Ci0KLSAgaWYgKHByaXYtPmxhc3RfZHRzICE9IC0xKQotICAgIGR0c2RpZmYgPSBkdHMgLSBwcml2LT5sYXN0X2R0czsKLSAgZWxzZQotICAgIGR0c2RpZmYgPSAwOwotCi0gIGlmIChwcml2LT5sYXN0X3J0cHRpbWUgIT0gLTEpCi0gICAgcnRwZGlmZiA9IHJ0cHRpbWUgLSAoZ3VpbnQzMikgcHJpdi0+bGFzdF9ydHB0aW1lOwotICBlbHNlCi0gICAgcnRwZGlmZiA9IDA7Ci0KLSAgLyogR3Vlc3Mgd2hldGhlciBzdHJlYW0gY3VycmVudGx5IHVzZXMgZXF1aWRpc3RhbnQgcGFja2V0IHNwYWNpbmcuIElmIHdlCi0gICAqIG9mdGVuIHNlZSBpZGVudGljYWwgdGltZXN0YW1wcyBpdCBtZWFucyB0aGUgcGFja2V0cyBhcmUgbm90Ci0gICAqIGVxdWlkaXN0YW50LiAqLwotICBpZiAocnRwdGltZSA9PSBwcml2LT5sYXN0X3J0cHRpbWUpCi0gICAgcHJpdi0+ZXF1aWRpc3RhbnQgLT0gMjsKLSAgZWxzZQotICAgIHByaXYtPmVxdWlkaXN0YW50ICs9IDE7Ci0gIHByaXYtPmVxdWlkaXN0YW50ID0gQ0xBTVAgKHByaXYtPmVxdWlkaXN0YW50LCAtNywgNyk7Ci0KLSAgcHJpdi0+bGFzdF9kdHMgPSBkdHM7Ci0gIHByaXYtPmxhc3RfcnRwdGltZSA9IHJ0cHRpbWU7Ci0KLSAgaWYgKHJ0cGRpZmYgPiAwKQotICAgIHJ0cGRpZmZucyA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHJ0cGRpZmYsIEdTVF9TRUNPTkQsIHByaXYtPmNsb2NrX3JhdGUpOwotICBlbHNlCi0gICAgcnRwZGlmZm5zID0KLSAgICAgICAgLWdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKC1ydHBkaWZmLCBHU1RfU0VDT05ELCBwcml2LT5jbG9ja19yYXRlKTsKLQotICBkaWZmID0gQUJTIChkdHNkaWZmIC0gcnRwZGlmZm5zKTsKLQotICAvKiBqaXR0ZXIgaXMgc3RvcmVkIGluIG5hbm9zZWNvbmRzICovCi0gIHByaXYtPmF2Z19qaXR0ZXIgPSAoZGlmZiArICgxNSAqIHByaXYtPmF2Z19qaXR0ZXIpKSA+PiA0OwotCi0gIEdTVF9MT0dfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAiZHRzZGlmZiAlIiBHU1RfVElNRV9GT1JNQVQgIiBydHB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgY2xvY2stcmF0ZSAlZCwgZGlmZiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgaml0dGVyOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChkdHNkaWZmKSwgR1NUX1RJTUVfQVJHUyAocnRwZGlmZm5zKSwgcHJpdi0+Y2xvY2tfcmF0ZSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGRpZmYpLCBHU1RfVElNRV9BUkdTIChwcml2LT5hdmdfaml0dGVyKSk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fdGltZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwKLSAgICAgICAgIm5vIGR0cyBvciBubyBjbG9jay1yYXRlLCBjYW4ndCBjYWxjdWxhdGUgaml0dGVyIik7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyBnaW50Ci1jb21wYXJlX2J1ZmZlcl9zZXFudW0gKEdzdEJ1ZmZlciAqIGEsIEdzdEJ1ZmZlciAqIGIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UlRQQnVmZmVyIHJ0cF9hID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgR3N0UlRQQnVmZmVyIHJ0cF9iID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgZ3VpbnQgc2VxX2EsIHNlcV9iOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYSwgR1NUX01BUF9SRUFELCAmcnRwX2EpOwotICBzZXFfYSA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKCZydHBfYSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwX2EpOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYiwgR1NUX01BUF9SRUFELCAmcnRwX2IpOwotICBzZXFfYiA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKCZydHBfYik7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwX2IpOwotCi0gIHJldHVybiBnc3RfcnRwX2J1ZmZlcl9jb21wYXJlX3NlcW51bSAoc2VxX2IsIHNlcV9hKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1oYW5kbGVfYmlnX2dhcF9idWZmZXIgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIGd1aW50OCBwdCwgZ3VpbnQxNiBzZXFudW0sIGdpbnQgZ2FwLCBndWludCBtYXhfZHJvcG91dCwgZ3VpbnQgbWF4X21pc29yZGVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotICBndWludCBnYXBfcGFja2V0c19sZW5ndGg7Ci0gIGdib29sZWFuIHJlc2V0ID0gRkFMU0U7Ci0gIGdib29sZWFuIGZ1dHVyZSA9IGdhcCA+IDA7Ci0KLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBpZiAoKGdhcF9wYWNrZXRzX2xlbmd0aCA9IGdfcXVldWVfZ2V0X2xlbmd0aCAoJnByaXYtPmdhcF9wYWNrZXRzKSkgPiAwKSB7Ci0gICAgR0xpc3QgKmw7Ci0gICAgZ3VpbnQzMiBwcmV2X2dhcF9zZXEgPSAtMTsKLSAgICBnYm9vbGVhbiBhbGxfY29uc2VjdXRpdmUgPSBUUlVFOwotCi0gICAgZ19xdWV1ZV9pbnNlcnRfc29ydGVkICgmcHJpdi0+Z2FwX3BhY2tldHMsIGJ1ZmZlciwKLSAgICAgICAgKEdDb21wYXJlRGF0YUZ1bmMpIGNvbXBhcmVfYnVmZmVyX3NlcW51bSwgTlVMTCk7Ci0KLSAgICBmb3IgKGwgPSBwcml2LT5nYXBfcGFja2V0cy5oZWFkOyBsOyBsID0gbC0+bmV4dCkgewotICAgICAgR3N0QnVmZmVyICpnYXBfYnVmZmVyID0gbC0+ZGF0YTsKLSAgICAgIEdzdFJUUEJ1ZmZlciBnYXBfcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgICAgIGd1aW50MzIgZ2FwX3NlcTsKLQotICAgICAgZ3N0X3J0cF9idWZmZXJfbWFwIChnYXBfYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZnYXBfcnRwKTsKLQotICAgICAgYWxsX2NvbnNlY3V0aXZlID0gKGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3R5cGUgKCZnYXBfcnRwKSA9PSBwdCk7Ci0KLSAgICAgIGdhcF9zZXEgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmZ2FwX3J0cCk7Ci0gICAgICBpZiAocHJldl9nYXBfc2VxID09IC0xKQotICAgICAgICBwcmV2X2dhcF9zZXEgPSBnYXBfc2VxOwotICAgICAgZWxzZSBpZiAoZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKGdhcF9zZXEsIHByZXZfZ2FwX3NlcSkgIT0gLTEpCi0gICAgICAgIGFsbF9jb25zZWN1dGl2ZSA9IEZBTFNFOwotICAgICAgZWxzZQotICAgICAgICBwcmV2X2dhcF9zZXEgPSBnYXBfc2VxOwotCi0gICAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJmdhcF9ydHApOwotICAgICAgaWYgKCFhbGxfY29uc2VjdXRpdmUpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChhbGxfY29uc2VjdXRpdmUgJiYgZ2FwX3BhY2tldHNfbGVuZ3RoID4gMykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICJidWZmZXIgdG9vICVzICVkIDwgJWQsIGdvdCA1IGNvbnNlY3V0aXZlIG9uZXMgLSByZXNldCIsCi0gICAgICAgICAgKGZ1dHVyZSA/ICJuZXciIDogIm9sZCIpLCBnYXAsCi0gICAgICAgICAgKGZ1dHVyZSA/IG1heF9kcm9wb3V0IDogLW1heF9taXNvcmRlcikpOwotICAgICAgcmVzZXQgPSBUUlVFOwotICAgIH0gZWxzZSBpZiAoIWFsbF9jb25zZWN1dGl2ZSkgewotICAgICAgZ19xdWV1ZV9mb3JlYWNoICgmcHJpdi0+Z2FwX3BhY2tldHMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gICAgICBnX3F1ZXVlX2NsZWFyICgmcHJpdi0+Z2FwX3BhY2tldHMpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICJidWZmZXIgdG9vICVzICVkIDwgJWQsIGdvdCBubyA1IGNvbnNlY3V0aXZlIG9uZXMgLSBkcm9wcGluZyIsCi0gICAgICAgICAgKGZ1dHVyZSA/ICJuZXciIDogIm9sZCIpLCBnYXAsCi0gICAgICAgICAgKGZ1dHVyZSA/IG1heF9kcm9wb3V0IDogLW1heF9taXNvcmRlcikpOwotICAgICAgYnVmZmVyID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICJidWZmZXIgdG9vICVzICVkIDwgJWQsIGdvdCAldSBjb25zZWN1dGl2ZSBvbmVzIC0gd2FpdGluZyIsCi0gICAgICAgICAgKGZ1dHVyZSA/ICJuZXciIDogIm9sZCIpLCBnYXAsCi0gICAgICAgICAgKGZ1dHVyZSA/IG1heF9kcm9wb3V0IDogLW1heF9taXNvcmRlciksIGdhcF9wYWNrZXRzX2xlbmd0aCArIDEpOwotICAgICAgYnVmZmVyID0gTlVMTDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAiYnVmZmVyIHRvbyAlcyAlZCA8ICVkLCBmaXJzdCBvbmUgLSB3YWl0aW5nIiwgKGZ1dHVyZSA/ICJuZXciIDogIm9sZCIpLAotICAgICAgICBnYXAsIC1tYXhfbWlzb3JkZXIpOwotICAgIGdfcXVldWVfcHVzaF90YWlsICgmcHJpdi0+Z2FwX3BhY2tldHMsIGJ1ZmZlcik7Ci0gICAgYnVmZmVyID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiByZXNldDsKLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotZ2V0X2N1cnJlbnRfcnVubmluZ190aW1lIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIpCi17Ci0gIEdzdENsb2NrICpjbG9jayA9IGdzdF9lbGVtZW50X2dldF9jbG9jayAoR1NUX0VMRU1FTlRfQ0FTVCAoaml0dGVyYnVmZmVyKSk7Ci0gIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGlmIChjbG9jaykgewotICAgIEdzdENsb2NrVGltZSBiYXNlX3RpbWUgPQotICAgICAgICBnc3RfZWxlbWVudF9nZXRfYmFzZV90aW1lIChHU1RfRUxFTUVOVF9DQVNUIChqaXR0ZXJidWZmZXIpKTsKLSAgICBHc3RDbG9ja1RpbWUgY2xvY2tfdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotCi0gICAgaWYgKGNsb2NrX3RpbWUgPiBiYXNlX3RpbWUpCi0gICAgICBydW5uaW5nX3RpbWUgPSBjbG9ja190aW1lIC0gYmFzZV90aW1lOwotICAgIGVsc2UKLSAgICAgIHJ1bm5pbmdfdGltZSA9IDA7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChjbG9jayk7Ci0gIH0KLQotICByZXR1cm4gcnVubmluZ190aW1lOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0IChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsCi0gICAgR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIGd1aW50MTYgc2VxbnVtKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHTGlzdCAqZXZlbnRzID0gTlVMTCwgKmw7Ci0gIEdMaXN0ICpidWZmZXJzOwotICBnYm9vbGVhbiBoZWFkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImZsdXNoIGFuZCByZXNldCBqaXR0ZXJidWZmZXIiKTsKLSAgcnRwX2ppdHRlcl9idWZmZXJfZmx1c2ggKHByaXYtPmpidWYsCi0gICAgICAoR0Z1bmMpIGZyZWVfaXRlbV9hbmRfcmV0YWluX2V2ZW50cywgJmV2ZW50cyk7Ci0gIHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcgKHByaXYtPmpidWYpOwotICByZW1vdmVfYWxsX3RpbWVycyAoaml0dGVyYnVmZmVyKTsKLSAgcHJpdi0+ZGlzY29udCA9IFRSVUU7Ci0gIHByaXYtPmxhc3RfcG9wcGVkX3NlcW51bSA9IC0xOwotCi0gIGlmIChwcml2LT5nYXBfcGFja2V0cy5oZWFkKSB7Ci0gICAgR3N0QnVmZmVyICpnYXBfYnVmZmVyID0gcHJpdi0+Z2FwX3BhY2tldHMuaGVhZC0+ZGF0YTsKLSAgICBHc3RSVFBCdWZmZXIgZ2FwX3J0cCA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGdhcF9idWZmZXIsIEdTVF9NQVBfUkVBRCwgJmdhcF9ydHApOwotICAgIHByaXYtPm5leHRfc2VxbnVtID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAoJmdhcF9ydHApOwotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmZ2FwX3J0cCk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpdi0+bmV4dF9zZXFudW0gPSBzZXFudW07Ci0gIH0KLQotICBwcml2LT5sYXN0X2luX3B0cyA9IC0xOwotICBwcml2LT5uZXh0X2luX3NlcW51bSA9IC0xOwotCi0gIC8qIEluc2VydCBhbGwgc3RpY2t5IGV2ZW50cyBhZ2FpbiBpbiBvcmRlciwgb3RoZXJ3aXNlIHdlIHdvdWxkCi0gICAqIHBvdGVudGlhbGx5IGxvb3NlIFNUUkVBTV9TVEFSVCwgQ0FQUyBvciBTRUdNRU5UIGV2ZW50cwotICAgKi8KLSAgZXZlbnRzID0gZ19saXN0X3JldmVyc2UgKGV2ZW50cyk7Ci0gIGZvciAobCA9IGV2ZW50czsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBSVFBKaXR0ZXJCdWZmZXJJdGVtICppdGVtOwotCi0gICAgaXRlbSA9IGFsbG9jX2l0ZW0gKGwtPmRhdGEsIElURU1fVFlQRV9FVkVOVCwgLTEsIC0xLCAtMSwgMCwgLTEpOwotICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCAocHJpdi0+amJ1ZiwgaXRlbSwgJmhlYWQsIE5VTEwpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChldmVudHMpOwotCi0gIEpCVUZfU0lHTkFMX0VWRU5UIChwcml2KTsKLQotICAvKiByZXNldCBzcGFjaW5nIGVzdGltYXRpb24gd2hlbiBnYXAgKi8KLSAgcHJpdi0+aXBzX3J0cHRpbWUgPSAtMTsKLSAgcHJpdi0+aXBzX3B0cyA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgYnVmZmVycyA9IGdfbGlzdF9jb3B5IChwcml2LT5nYXBfcGFja2V0cy5oZWFkKTsKLSAgZ19xdWV1ZV9jbGVhciAoJnByaXYtPmdhcF9wYWNrZXRzKTsKLQotICBwcml2LT5pcHNfcnRwdGltZSA9IC0xOwotICBwcml2LT5pcHNfcHRzID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgSkJVRl9VTkxPQ0sgKGppdHRlcmJ1ZmZlci0+cHJpdik7Ci0KLSAgZm9yIChsID0gYnVmZmVyczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICByZXQgPSBnc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW4gKHBhZCwgcGFyZW50LCBsLT5kYXRhKTsKLSAgICBsLT5kYXRhID0gTlVMTDsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBsID0gbC0+bmV4dDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBmb3IgKDsgbDsgbCA9IGwtPm5leHQpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAobC0+ZGF0YSk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlciAqaml0dGVyYnVmZmVyOwotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotICBndWludDE2IHNlcW51bTsKLSAgZ3VpbnQzMiBleHBlY3RlZCwgcnRwdGltZTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Q2xvY2tUaW1lIGR0cywgcHRzOwotICBndWludDY0IGxhdGVuY3lfdHM7Ci0gIGdib29sZWFuIGhlYWQ7Ci0gIGdpbnQgcGVyY2VudCA9IC0xOwotICBndWludDggcHQ7Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBnYm9vbGVhbiBkb19uZXh0X3NlcW51bSA9IEZBTFNFOwotICBSVFBKaXR0ZXJCdWZmZXJJdGVtICppdGVtOwotICBHc3RNZXNzYWdlICptc2cgPSBOVUxMOwotICBnYm9vbGVhbiBlc3RpbWF0ZWRfZHRzID0gRkFMU0U7Ci0gIGdpbnQzMiBwYWNrZXRfcmF0ZSwgbWF4X2Ryb3BvdXQsIG1heF9taXNvcmRlcjsKLSAgVGltZXJEYXRhICp0aW1lciA9IE5VTEw7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSX0NBU1QgKHBhcmVudCk7Ci0KLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9ydHBfYnVmZmVyX21hcCAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHApKSkKLSAgICBnb3RvIGludmFsaWRfYnVmZmVyOwotCi0gIHB0ID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfdHlwZSAoJnJ0cCk7Ci0gIHNlcW51bSA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKCZydHApOwotICBydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAoJnJ0cCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBQVFMgYW5kIERUUyBzZXQgKi8KLSAgcHRzID0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcik7Ci0gIGR0cyA9IEdTVF9CVUZGRVJfRFRTIChidWZmZXIpOwotICBpZiAoZHRzID09IC0xKQotICAgIGR0cyA9IHB0czsKLSAgZWxzZSBpZiAocHRzID09IC0xKQotICAgIHB0cyA9IGR0czsKLQotICBpZiAoZHRzID09IC0xKSB7Ci0gICAgLyogSWYgd2UgaGF2ZSBubyBEVFMgaGVyZSwgaS5lLiBubyBjYXB0dXJlIHRpbWUsIGdldCBvbmUgZnJvbSB0aGUKLSAgICAgKiBjbG9jayBub3cgdG8gaGF2ZSBzb21ldGhpbmcgdG8gY2FsY3VsYXRlIHdpdGggaW4gdGhlIGZ1dHVyZS4gKi8KLSAgICBkdHMgPSBnZXRfY3VycmVudF9ydW5uaW5nX3RpbWUgKGppdHRlcmJ1ZmZlcik7Ci0gICAgcHRzID0gZHRzOwotCi0gICAgLyogUmVtZW1iZXIgdGhhdCB3ZSBlc3RpbWF0ZWQgdGhlIERUUyBpZiB3ZSBhcmUgcnVubmluZyBhbHJlYWR5Ci0gICAgICogYW5kIHRoaXMgaXMgbm90IG91ciBmaXJzdCBwYWNrZXQgKG9yIGZpcnN0IHBhY2tldCBhZnRlciBhIHJlc2V0KS4KLSAgICAgKiBJZiBpdCdzIHRoZSBmaXJzdCBwYWNrZXQsIHdlIHNvbWVob3cgbXVzdCBnZW5lcmF0ZSBhIHRpbWVzdGFtcCBmb3IKLSAgICAgKiBldmVyeXRoaW5nLCBvdGhlcndpc2Ugd2UgY2FuJ3QgY2FsY3VsYXRlIGFueSB0aW1lcwotICAgICAqLwotICAgIGVzdGltYXRlZF9kdHMgPSAocHJpdi0+bmV4dF9pbl9zZXFudW0gIT0gLTEpOwotICB9IGVsc2UgewotICAgIC8qIHRha2UgdGhlIERUUyBvZiB0aGUgYnVmZmVyLiBUaGlzIGlzIHRoZSB0aW1lIHdoZW4gdGhlIHBhY2tldCB3YXMKLSAgICAgKiByZWNlaXZlZCBhbmQgaXMgdXNlZCB0byBjYWxjdWxhdGUgaml0dGVyIGFuZCBjbG9jayBza2V3LiBXZSB3aWxsIGFkanVzdAotICAgICAqIHRoaXMgRFRTIHdpdGggdGhlIHNtb290aGVkIHZhbHVlIGFmdGVyIHByb2Nlc3NpbmcgaXQgaW4gdGhlCi0gICAgICogaml0dGVyYnVmZmVyIGFuZCBhc3NpZ24gaXQgYXMgdGhlIFBUUy4gKi8KLSAgICAvKiBicmluZyB0byBydW5uaW5nIHRpbWUgKi8KLSAgICBkdHMgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZwcml2LT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIGR0cyk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAiUmVjZWl2ZWQgcGFja2V0ICMlZCBhdCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkaXNjb250ICVkLCBydHggJWQiLAotICAgICAgc2VxbnVtLCBHU1RfVElNRV9BUkdTIChkdHMpLCBHU1RfQlVGRkVSX0lTX0RJU0NPTlQgKGJ1ZmZlciksCi0gICAgICBHU1RfQlVGRkVSX0lTX1JFVFJBTlNNSVNTSU9OIChidWZmZXIpKTsKLQotICBKQlVGX0xPQ0tfQ0hFQ0sgKHByaXYsIG91dF9mbHVzaGluZyk7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHByaXYtPmxhc3RfcHQgIT0gcHQpKSB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInB0IGNoYW5nZWQgZnJvbSAldSB0byAldSIsIHByaXYtPmxhc3RfcHQsCi0gICAgICAgIHB0KTsKLQotICAgIHByaXYtPmxhc3RfcHQgPSBwdDsKLSAgICAvKiByZXNldCBjbG9jay1yYXRlIHNvIHRoYXQgd2UgZ2V0IGEgbmV3IG9uZSAqLwotICAgIHByaXYtPmNsb2NrX3JhdGUgPSAtMTsKLQotICAgIC8qIFRyeSB0byBnZXQgdGhlIGNsb2NrLXJhdGUgZnJvbSB0aGUgY2FwcyBmaXJzdCBpZiB3ZSBjYW4uIElmIHRoZXJlIGFyZSBubwotICAgICAqIGNhcHMgd2UgbXVzdCBmaXJlIHRoZSBzaWduYWwgdG8gZ2V0IHRoZSBjbG9jay1yYXRlLiAqLwotICAgIGlmICgoY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKSkpIHsKLSAgICAgIGdzdF9qaXR0ZXJfYnVmZmVyX3NpbmtfcGFyc2VfY2FwcyAoaml0dGVyYnVmZmVyLCBjYXBzLCBwdCk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHByaXYtPmNsb2NrX3JhdGUgPT0gLTEpKSB7Ci0gICAgLyogbm8gY2xvY2sgcmF0ZSBnaXZlbiBvbiB0aGUgY2FwcywgdHJ5IHRvIGdldCBvbmUgd2l0aCB0aGUgc2lnbmFsICovCi0gICAgaWYgKGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfY2xvY2tfcmF0ZSAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICAgcHQpID09IEdTVF9GTE9XX0ZMVVNISU5HKQotICAgICAgZ290byBvdXRfZmx1c2hpbmc7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAocHJpdi0+Y2xvY2tfcmF0ZSA9PSAtMSkpCi0gICAgICBnb3RvIG5vX2Nsb2NrX3JhdGU7Ci0KLSAgICBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9yZXNldCAoJnByaXYtPnBhY2tldF9yYXRlX2N0eCwgcHJpdi0+Y2xvY2tfcmF0ZSk7Ci0gIH0KLQotICAvKiBkb24ndCBhY2NlcHQgbW9yZSBkYXRhIG9uIEVPUyAqLwotICBpZiAoR19VTkxJS0VMWSAocHJpdi0+ZW9zKSkKLSAgICBnb3RvIGhhdmVfZW9zOwotCi0gIGlmICghR1NUX0JVRkZFUl9JU19SRVRSQU5TTUlTU0lPTiAoYnVmZmVyKSkKLSAgICBjYWxjdWxhdGVfaml0dGVyIChqaXR0ZXJidWZmZXIsIGR0cywgcnRwdGltZSk7Ci0KLSAgaWYgKHByaXYtPnNlcW51bV9iYXNlICE9IC0xKSB7Ci0gICAgZ2ludCBnYXA7Ci0KLSAgICBnYXAgPSBnc3RfcnRwX2J1ZmZlcl9jb21wYXJlX3NlcW51bSAocHJpdi0+c2VxbnVtX2Jhc2UsIHNlcW51bSk7Ci0KLSAgICBpZiAoZ2FwIDwgMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICJwYWNrZXQgc2VxbnVtICMlZCBiZWZvcmUgc2VxbnVtLWJhc2UgIyVkIiwgc2VxbnVtLAotICAgICAgICAgIHByaXYtPnNlcW51bV9iYXNlKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICBnb3RvIGZpbmlzaGVkOwotICAgIH0gZWxzZSBpZiAoZ2FwID4gMTYzODQpIHsKLSAgICAgIC8qIEZyb20gbm93IG9uIGRvbid0IGNvbXBhcmUgYWdhaW5zdCB0aGUgc2VxbnVtIGJhc2UgYW55bW9yZSBhcwotICAgICAgICogYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlIHdlIHdpbGwgd3JhcCBhcm91bmQgYW5kIGFsc28gdGhhdAotICAgICAgICogbXVjaCByZW9yZGVyaW5nIGlzIHZlcnkgdW5saWtlbHkgKi8KLSAgICAgIHByaXYtPnNlcW51bV9iYXNlID0gLTE7Ci0gICAgfQotICB9Ci0KLSAgZXhwZWN0ZWQgPSBwcml2LT5uZXh0X2luX3NlcW51bTsKLQotICBwYWNrZXRfcmF0ZSA9Ci0gICAgICBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF91cGRhdGUgKCZwcml2LT5wYWNrZXRfcmF0ZV9jdHgsIHNlcW51bSwgcnRwdGltZSk7Ci0gIG1heF9kcm9wb3V0ID0KLSAgICAgIGdzdF9ydHBfcGFja2V0X3JhdGVfY3R4X2dldF9tYXhfZHJvcG91dCAoJnByaXYtPnBhY2tldF9yYXRlX2N0eCwKLSAgICAgIHByaXYtPm1heF9kcm9wb3V0X3RpbWUpOwotICBtYXhfbWlzb3JkZXIgPQotICAgICAgZ3N0X3J0cF9wYWNrZXRfcmF0ZV9jdHhfZ2V0X21heF9taXNvcmRlciAoJnByaXYtPnBhY2tldF9yYXRlX2N0eCwKLSAgICAgIHByaXYtPm1heF9taXNvcmRlcl90aW1lKTsKLSAgR1NUX1RSQUNFX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgInBhY2tldF9yYXRlOiAlZCwgbWF4X2Ryb3BvdXQ6ICVkLCBtYXhfbWlzb3JkZXI6ICVkIiwgcGFja2V0X3JhdGUsCi0gICAgICBtYXhfZHJvcG91dCwgbWF4X21pc29yZGVyKTsKLQotICAvKiBub3cgY2hlY2sgYWdhaW5zdCBvdXIgZXhwZWN0ZWQgc2VxbnVtICovCi0gIGlmIChHX1VOTElLRUxZIChleHBlY3RlZCA9PSAtMSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJGaXJzdCBidWZmZXIgIyVkIiwgc2VxbnVtKTsKLQotICAgIC8qIGNhbGN1bGF0ZSBhIHB0cyBiYXNlZCBvbiBydHB0aW1lIGFuZCBhcnJpdmFsIHRpbWUgKGR0cykgKi8KLSAgICBwdHMgPSBydHBfaml0dGVyX2J1ZmZlcl9jYWxjdWxhdGVfcHRzIChwcml2LT5qYnVmLCBkdHMsIHJ0cHRpbWUsCi0gICAgICAgIGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdTVF9FTEVNRU5UX0NBU1QgKGppdHRlcmJ1ZmZlcikpKTsKLQotICAgIC8qIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgbmV4dF9pbl9zZXFudW0gc2hvdWxkIGJlLCB3YWl0IGZvciB0aGUgbGFzdAotICAgICAqIHBvc3NpYmxlIG1vbWVudCB0byBwdXNoIHRoaXMgYnVmZmVyLCBtYXliZSB3ZSBnZXQgYW4gZWFybGllciBzZXFudW0KLSAgICAgKiB3aGlsZSB3ZSB3YWl0ICovCi0gICAgc2V0X3RpbWVyIChqaXR0ZXJidWZmZXIsIFRJTUVSX1RZUEVfREVBRExJTkUsIHNlcW51bSwgcHRzKTsKLQotICAgIGRvX25leHRfc2VxbnVtID0gVFJVRTsKLSAgICAvKiB0YWtlIHJ0cHRpbWUgYW5kIHB0cyB0byBjYWxjdWxhdGUgcGFja2V0IHNwYWNpbmcgKi8KLSAgICBwcml2LT5pcHNfcnRwdGltZSA9IHJ0cHRpbWU7Ci0gICAgcHJpdi0+aXBzX3B0cyA9IHB0czsKLQotICB9IGVsc2UgewotICAgIGdpbnQgZ2FwOwotICAgIC8qIG5vdyBjYWxjdWxhdGUgZ2FwICovCi0gICAgZ2FwID0gZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKGV4cGVjdGVkLCBzZXFudW0pOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImV4cGVjdGVkICMlZCwgZ290ICMlZCwgZ2FwIG9mICVkIiwKLSAgICAgICAgZXhwZWN0ZWQsIHNlcW51bSwgZ2FwKTsKLQotICAgIGlmIChHX1VOTElLRUxZIChnYXAgPiAwICYmIHByaXYtPnRpbWVycy0+bGVuID49IG1heF9kcm9wb3V0KSkgewotICAgICAgLyogSWYgd2UgaGF2ZSB0aW1lcnMgZm9yIG1vcmUgdGhhbiBSVFBfTUFYX0RST1BPVVQgcGFja2V0cwotICAgICAgICogcGVuZGluZyB0aGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSBhIGh1Z2UgZ2FwIG92ZXJhbGwuIFdlIGNhbgotICAgICAgICogcmVzZXQgdGhlIGppdHRlcmJ1ZmZlciBhdCB0aGlzIHBvaW50IGJlY2F1c2UgdGhlcmUncwotICAgICAgICoganVzdCB0b28gbXVjaCBkYXRhIG1pc3NpbmcgdG8gYmUgYWJsZSB0byBkbyBhbnl0aGluZwotICAgICAgICogc2Vuc2libGUgd2l0aCB0aGUgcGFzdCBkYXRhLiBKdXN0IHRyeSBhZ2FpbiBmcm9tIHRoZQotICAgICAgICogbmV4dCBwYWNrZXQgKi8KLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiJWQgcGVuZGluZyB0aW1lcnMgPiAlZCAtIHJlc2V0dGluZyIsCi0gICAgICAgICAgcHJpdi0+dGltZXJzLT5sZW4sIG1heF9kcm9wb3V0KTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICByZXR1cm4gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0IChqaXR0ZXJidWZmZXIsIHBhZCwgcGFyZW50LCBzZXFudW0pOwotICAgIH0KLQotICAgIC8qIFNwZWNpYWwgaGFuZGxpbmcgb2YgbGFyZ2UgZ2FwcyAqLwotICAgIGlmICgoZ2FwICE9IC0xICYmIGdhcCA8IC1tYXhfbWlzb3JkZXIpIHx8IChnYXAgPj0gbWF4X2Ryb3BvdXQpKSB7Ci0gICAgICBnYm9vbGVhbiByZXNldCA9IGhhbmRsZV9iaWdfZ2FwX2J1ZmZlciAoaml0dGVyYnVmZmVyLCBidWZmZXIsIHB0LCBzZXFudW0sCi0gICAgICAgICAgZ2FwLCBtYXhfZHJvcG91dCwgbWF4X21pc29yZGVyKTsKLSAgICAgIGlmIChyZXNldCkgewotICAgICAgICByZXR1cm4gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0IChqaXR0ZXJidWZmZXIsIHBhZCwgcGFyZW50LCBzZXFudW0pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICAgIkhhZCBiaWcgZ2FwLCB3YWl0aW5nIGZvciBtb3JlIGNvbnNlY3V0aXZlIHBhY2tldHMiKTsKLSAgICAgICAgZ290byBmaW5pc2hlZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBXZSBoYWQgbm8gaHVnZSBnYXAsIGxldCdzIGRyb3AgYWxsIHRoZSBnYXAgcGFja2V0cyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIkNsZWFyaW5nIGdhcCBwYWNrZXRzIik7Ci0gICAgZ19xdWV1ZV9mb3JlYWNoICgmcHJpdi0+Z2FwX3BhY2tldHMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gICAgZ19xdWV1ZV9jbGVhciAoJnByaXYtPmdhcF9wYWNrZXRzKTsKLQotICAgIC8qIGNhbGN1bGF0ZSBhIHB0cyBiYXNlZCBvbiBydHB0aW1lIGFuZCBhcnJpdmFsIHRpbWUgKGR0cykgKi8KLSAgICBwdHMgPSBydHBfaml0dGVyX2J1ZmZlcl9jYWxjdWxhdGVfcHRzIChwcml2LT5qYnVmLCBkdHMsIHJ0cHRpbWUsCi0gICAgICAgIGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKEdTVF9FTEVNRU5UX0NBU1QgKGppdHRlcmJ1ZmZlcikpKTsKLQotICAgIGlmIChHX0xJS0VMWSAoZ2FwID09IDApKSB7Ci0gICAgICAvKiBwYWNrZXQgaXMgZXhwZWN0ZWQgKi8KLSAgICAgIGNhbGN1bGF0ZV9wYWNrZXRfc3BhY2luZyAoaml0dGVyYnVmZmVyLCBydHB0aW1lLCBwdHMpOwotICAgICAgZG9fbmV4dF9zZXFudW0gPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0KLSAgICAgIC8qIHdlIGhhdmUgYSBnYXAgKi8KLSAgICAgIGlmIChnYXAgPiAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIiVkIG1pc3NpbmcgcGFja2V0cyIsIGdhcCk7Ci0gICAgICAgIC8qIGZpbGwgaW4gdGhlIGdhcCB3aXRoIEVYUEVDVEVEIHRpbWVycyAqLwotICAgICAgICBjYWxjdWxhdGVfZXhwZWN0ZWQgKGppdHRlcmJ1ZmZlciwgZXhwZWN0ZWQsIHNlcW51bSwgcHRzLCBnYXApOwotICAgICAgICBkb19uZXh0X3NlcW51bSA9IFRSVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJvbGQgcGFja2V0IHJlY2VpdmVkIik7Ci0gICAgICAgIGRvX25leHRfc2VxbnVtID0gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHJlc2V0IHNwYWNpbmcgZXN0aW1hdGlvbiB3aGVuIGdhcCAqLwotICAgICAgcHJpdi0+aXBzX3J0cHRpbWUgPSAtMTsKLSAgICAgIHByaXYtPmlwc19wdHMgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIH0KLSAgfQotCi0gIGlmIChkb19uZXh0X3NlcW51bSkgewotICAgIHByaXYtPmxhc3RfaW5fcHRzID0gcHRzOwotICAgIHByaXYtPm5leHRfaW5fc2VxbnVtID0gKHNlcW51bSArIDEpICYgMHhmZmZmOwotICB9Ci0KLSAgdGltZXIgPSBmaW5kX3RpbWVyIChqaXR0ZXJidWZmZXIsIHNlcW51bSk7Ci0gIGlmIChHU1RfQlVGRkVSX0lTX1JFVFJBTlNNSVNTSU9OIChidWZmZXIpKSB7Ci0gICAgaWYgKCF0aW1lcikKLSAgICAgIHRpbWVyID0gdGltZXJfcXVldWVfZmluZCAocHJpdi0+cnR4X3N0YXRzX3RpbWVycywgc2VxbnVtKTsKLSAgICBpZiAodGltZXIpCi0gICAgICB0aW1lci0+bnVtX3J0eF9yZWNlaXZlZCsrOwotICB9Ci0KLSAgLyogbGV0J3MgY2hlY2sgaWYgdGhpcyBidWZmZXIgaXMgdG9vIGxhdGUsIHdlIGNhbiBvbmx5IGFjY2VwdCBwYWNrZXRzIHdpdGgKLSAgICogYmlnZ2VyIHNlcW51bSB0aGFuIHRoZSBvbmUgd2UgbGFzdCBwdXNoZWQuICovCi0gIGlmIChHX0xJS0VMWSAocHJpdi0+bGFzdF9wb3BwZWRfc2VxbnVtICE9IC0xKSkgewotICAgIGdpbnQgZ2FwOwotCi0gICAgZ2FwID0gZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKHByaXYtPmxhc3RfcG9wcGVkX3NlcW51bSwgc2VxbnVtKTsKLQotICAgIC8qIHByaXYtPmxhc3RfcG9wcGVkX3NlcW51bSA+PSBzZXFudW0sIHdlJ3JlIHRvbyBsYXRlLiAqLwotICAgIGlmIChHX1VOTElLRUxZIChnYXAgPD0gMCkpIHsKLSAgICAgIGlmIChwcml2LT5kb19yZXRyYW5zbWlzc2lvbikgewotICAgICAgICBpZiAoR1NUX0JVRkZFUl9JU19SRVRSQU5TTUlTU0lPTiAoYnVmZmVyKSAmJiB0aW1lcikgewotICAgICAgICAgIHVwZGF0ZV9ydHhfc3RhdHMgKGppdHRlcmJ1ZmZlciwgdGltZXIsIGR0cywgRkFMU0UpOwotICAgICAgICAgIC8qIE9ubHkgY291bnQgdGhlIHJldHJhbm1pdHRlZCBwYWNrZXQgdG9vIGxhdGUgaWYgaXQgaGFzIGJlZW4KLSAgICAgICAgICAgKiBjb25zaWRlcmVkIGxvc3QuIElmIHRoZSBvcmlnaW5hbCBwYWNrZXQgYXJyaXZlZCBiZWZvcmUgdGhlCi0gICAgICAgICAgICogcmV0cmFuc21pdHRlZCB3ZSBqdXN0IGNvdW50IGl0IGFzIGEgZHVwbGljYXRlLiAqLwotICAgICAgICAgIGlmICh0aW1lci0+dHlwZSAhPSBUSU1FUl9UWVBFX0xPU1QpCi0gICAgICAgICAgICBnb3RvIHJ0eF9kdXBsaWNhdGU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdvdG8gdG9vX2xhdGU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGFscmVhZHlfbG9zdCAoaml0dGVyYnVmZmVyLCBzZXFudW0pKQotICAgIGdvdG8gYWxyZWFkeV9sb3N0OwotCi0gIC8qIGxldCdzIGRyb3Agb2xkZXN0IHBhY2tldCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBmdWxsIGFuZCBkcm9wLW9uLWxhdGVuY3kKLSAgICogaXMgc2V0LiBXZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gdGhlcmUgYWN0dWFsbHkgaXMgYSBsYXRlbmN5LiBXaGVuIG5vCi0gICAqIGxhdGVuY3kgaXMgc2V0LCB3ZSBqdXN0IHB1bXAgaXQgaW4gdGhlIHF1ZXVlIGFuZCBsZXQgdGhlIG90aGVyIGVuZCBwdXNoIGl0Ci0gICAqIG91dCBhcyBmYXN0IGFzIHBvc3NpYmxlLiAqLwotICBpZiAocHJpdi0+bGF0ZW5jeV9tcyAmJiBwcml2LT5kcm9wX29uX2xhdGVuY3kpIHsKLSAgICBsYXRlbmN5X3RzID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAocHJpdi0+bGF0ZW5jeV9tcywgcHJpdi0+Y2xvY2tfcmF0ZSwgMTAwMCk7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAocnRwX2ppdHRlcl9idWZmZXJfZ2V0X3RzX2RpZmYgKHByaXYtPmpidWYpID49IGxhdGVuY3lfdHMpKSB7Ci0gICAgICBSVFBKaXR0ZXJCdWZmZXJJdGVtICpvbGRfaXRlbTsKLQotICAgICAgb2xkX2l0ZW0gPSBydHBfaml0dGVyX2J1ZmZlcl9wZWVrIChwcml2LT5qYnVmKTsKLQotICAgICAgaWYgKElTX0RST1BBQkxFIChvbGRfaXRlbSkpIHsKLSAgICAgICAgb2xkX2l0ZW0gPSBydHBfaml0dGVyX2J1ZmZlcl9wb3AgKHByaXYtPmpidWYsICZwZXJjZW50KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiUXVldWUgZnVsbCwgZHJvcHBpbmcgb2xkIHBhY2tldCAlcCIsCi0gICAgICAgICAgICBvbGRfaXRlbSk7Ci0gICAgICAgIHByaXYtPm5leHRfc2VxbnVtID0gKG9sZF9pdGVtLT5zZXFudW0gKyBvbGRfaXRlbS0+Y291bnQpICYgMHhmZmZmOwotICAgICAgICBmcmVlX2l0ZW0gKG9sZF9pdGVtKTsKLSAgICAgIH0KLSAgICAgIC8qIHdlIG1pZ2h0IGhhdmUgcmVtb3ZlZCBzb21lIGhlYWQgYnVmZmVycywgc2lnbmFsIHRoZSBwdXNoaW5nIHRocmVhZCB0bwotICAgICAgICogc2VlIGlmIGl0IGNhbiBwdXNoIG5vdyAqLwotICAgICAgSkJVRl9TSUdOQUxfRVZFTlQgKHByaXYpOwotICAgIH0KLSAgfQotCi0gIC8qIElmIHdlIGVzdGltYXRlZCB0aGUgRFRTLCBkb24ndCBjb25zaWRlciBpdCBpbiB0aGUgY2xvY2sgc2tldyBjYWxjdWxhdGlvbnMKLSAgICogbGF0ZXIuIFRoZSBjb2RlIGFib3ZlIGFsd2F5cyBzZXRzIGR0cyB0byBwdHMgb3IgdGhlIG90aGVyIHdheSBhcm91bmQgaWYKLSAgICogYW55IG9mIHRob3NlIGlzIHZhbGlkIGluIHRoZSBidWZmZXIsIHNvIHdlIGtub3cgdGhhdCBpZiB3ZSBlc3RpbWF0ZWQgdGhlCi0gICAqIGR0cyB0aGF0IGJvdGggYXJlIHVua25vd24gKi8KLSAgaWYgKGVzdGltYXRlZF9kdHMpCi0gICAgaXRlbSA9Ci0gICAgICAgIGFsbG9jX2l0ZW0gKGJ1ZmZlciwgSVRFTV9UWVBFX0JVRkZFUiwgR1NUX0NMT0NLX1RJTUVfTk9ORSwKLSAgICAgICAgcHRzLCBzZXFudW0sIDEsIHJ0cHRpbWUpOwotICBlbHNlCi0gICAgaXRlbSA9IGFsbG9jX2l0ZW0gKGJ1ZmZlciwgSVRFTV9UWVBFX0JVRkZFUiwgZHRzLCBwdHMsIHNlcW51bSwgMSwgcnRwdGltZSk7Ci0KLSAgLyogbm93IGluc2VydCB0aGUgcGFja2V0IGludG8gdGhlIHF1ZXVlIGluIHNvcnRlZCBvcmRlci4gVGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gICAqIEZBTFNFIGlmIGEgcGFja2V0IHdpdGggdGhlIHNhbWUgc2VxbnVtIHdhcyBhbHJlYWR5IGluIHRoZSBxdWV1ZSwgbWVhbmluZyB3ZQotICAgKiBoYXZlIGEgZHVwbGljYXRlLiAqLwotICBpZiAoR19VTkxJS0VMWSAoIXJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCAocHJpdi0+amJ1ZiwgaXRlbSwgJmhlYWQsCi0gICAgICAgICAgICAgICZwZXJjZW50KSkpIHsKLSAgICBpZiAoR1NUX0JVRkZFUl9JU19SRVRSQU5TTUlTU0lPTiAoYnVmZmVyKSAmJiB0aW1lcikKLSAgICAgIHVwZGF0ZV9ydHhfc3RhdHMgKGppdHRlcmJ1ZmZlciwgdGltZXIsIGR0cywgRkFMU0UpOwotICAgIGdvdG8gZHVwbGljYXRlOwotICB9Ci0KLSAgLyogdXBkYXRlIHRpbWVycyAqLwotICB1cGRhdGVfdGltZXJzIChqaXR0ZXJidWZmZXIsIHNlcW51bSwgZHRzLCBwdHMsIGRvX25leHRfc2VxbnVtLAotICAgICAgR1NUX0JVRkZFUl9JU19SRVRSQU5TTUlTU0lPTiAoYnVmZmVyKSwgdGltZXIpOwotCi0gIC8qIHdlIGhhZCBhbiB1bmhhbmRsZWQgU1IsIGhhbmRsZSBpdCBub3cgKi8KLSAgaWYgKHByaXYtPmxhc3Rfc3IpCi0gICAgZG9faGFuZGxlX3N5bmMgKGppdHRlcmJ1ZmZlcik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGhlYWQpKSB7Ci0gICAgLyogc2lnbmFsIGFkZGl0aW9uIG9mIG5ldyBidWZmZXIgd2hlbiB0aGUgX2xvb3AgaXMgd2FpdGluZy4gKi8KLSAgICBpZiAoR19MSUtFTFkgKHByaXYtPmFjdGl2ZSkpCi0gICAgICBKQlVGX1NJR05BTF9FVkVOVCAocHJpdik7Ci0KLSAgICAvKiBsZXQncyB1bnNjaGVkdWxlIGFuZCB1bmJsb2NrIGFueSB3YWl0aW5nIGJ1ZmZlcnMuIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzCi0gICAgICogd2hlbiB0aGUgaGVhZCBidWZmZXIgY2hhbmdlZCAqLwotICAgIGlmIChHX1VOTElLRUxZIChwcml2LT5jbG9ja19pZCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIlVuc2NoZWR1bGluZyB3YWl0aW5nIG5ldyBidWZmZXIiKTsKLSAgICAgIHVuc2NoZWR1bGVfY3VycmVudF90aW1lciAoaml0dGVyYnVmZmVyKTsKLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAiUHVzaGVkIHBhY2tldCAjJWQsIG5vdyAlZCBwYWNrZXRzLCBoZWFkOiAlZCwgIiAicGVyY2VudCAlZCIsIHNlcW51bSwKLSAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX251bV9wYWNrZXRzIChwcml2LT5qYnVmKSwgaGVhZCwgcGVyY2VudCk7Ci0KLSAgbXNnID0gY2hlY2tfYnVmZmVyaW5nX3BlcmNlbnQgKGppdHRlcmJ1ZmZlciwgcGVyY2VudCk7Ci0KLWZpbmlzaGVkOgotICBKQlVGX1VOTE9DSyAocHJpdik7Ci0KLSAgaWYgKG1zZykKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGppdHRlcmJ1ZmZlciksIG1zZyk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfYnVmZmVyOgotICB7Ci0gICAgLyogdGhpcyBpcyBub3QgZmF0YWwgYnV0IHNob3VsZCBiZSBmaWx0ZXJlZCBlYXJsaWVyICovCi0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoaml0dGVyYnVmZmVyLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoIlJlY2VpdmVkIGludmFsaWQgUlRQIHBheWxvYWQsIGRyb3BwaW5nIikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1ub19jbG9ja19yYXRlOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChqaXR0ZXJidWZmZXIsCi0gICAgICAgICJObyBjbG9jay1yYXRlIGluIGNhcHMhLCBkcm9wcGluZyBidWZmZXIiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KLW91dF9mbHVzaGluZzoKLSAgewotICAgIHJldCA9IHByaXYtPnNyY3Jlc3VsdDsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJmbHVzaGluZyAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXQpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KLWhhdmVfZW9zOgotICB7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRU9TOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoaml0dGVyYnVmZmVyLCAid2UgYXJlIEVPUywgcmVmdXNpbmcgYnVmZmVyIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBnb3RvIGZpbmlzaGVkOwotICB9Ci10b29fbGF0ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIlBhY2tldCAjJWQgdG9vIGxhdGUgYXMgIyVkIHdhcyBhbHJlYWR5IgotICAgICAgICAiIHBvcHBlZCwgZHJvcHBpbmciLCBzZXFudW0sIHByaXYtPmxhc3RfcG9wcGVkX3NlcW51bSk7Ci0gICAgcHJpdi0+bnVtX2xhdGUrKzsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIGdvdG8gZmluaXNoZWQ7Ci0gIH0KLWFscmVhZHlfbG9zdDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIlBhY2tldCAjJWQgdG9vIGxhdGUgYXMgaXQgd2FzIGFscmVhZHkgIgotICAgICAgICAiY29uc2lkZXJlZCBsb3N0Iiwgc2VxbnVtKTsKLSAgICBwcml2LT5udW1fbGF0ZSsrOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgZ290byBmaW5pc2hlZDsKLSAgfQotZHVwbGljYXRlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiRHVwbGljYXRlIHBhY2tldCAjJWQgZGV0ZWN0ZWQsIGRyb3BwaW5nIiwKLSAgICAgICAgc2VxbnVtKTsKLSAgICBwcml2LT5udW1fZHVwbGljYXRlcysrOwotICAgIGZyZWVfaXRlbSAoaXRlbSk7Ci0gICAgZ290byBmaW5pc2hlZDsKLSAgfQotcnR4X2R1cGxpY2F0ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwKLSAgICAgICAgIkR1cGxpY2F0ZSBSVFggcGFja2V0ICMlZCBkZXRlY3RlZCwgZHJvcHBpbmciLCBzZXFudW0pOwotICAgIHByaXYtPm51bV9kdXBsaWNhdGVzKys7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBnb3RvIGZpbmlzaGVkOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWNvbXB1dGVfZWxhcHNlZCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBSVFBKaXR0ZXJCdWZmZXJJdGVtICogaXRlbSkKLXsKLSAgZ3VpbnQ2NCBleHRfdGltZSwgZWxhcHNlZDsKLSAgZ3VpbnQzMiBydHBfdGltZTsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLQotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBydHBfdGltZSA9IGl0ZW0tPnJ0cHRpbWU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInJ0cCAlIiBHX0dVSU5UMzJfRk9STUFUICIsIGV4dCAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgcnRwX3RpbWUsIHByaXYtPmV4dF90aW1lc3RhbXApOwotCi0gIGV4dF90aW1lID0gcHJpdi0+ZXh0X3RpbWVzdGFtcDsKLSAgZXh0X3RpbWUgPSBnc3RfcnRwX2J1ZmZlcl9leHRfdGltZXN0YW1wICgmZXh0X3RpbWUsIHJ0cF90aW1lKTsKLSAgaWYgKGV4dF90aW1lIDwgcHJpdi0+ZXh0X3RpbWVzdGFtcCkgewotICAgIGV4dF90aW1lID0gcHJpdi0+ZXh0X3RpbWVzdGFtcDsKLSAgfSBlbHNlIHsKLSAgICBwcml2LT5leHRfdGltZXN0YW1wID0gZXh0X3RpbWU7Ci0gIH0KLQotICBpZiAoZXh0X3RpbWUgPiBwcml2LT5jbG9ja19iYXNlKQotICAgIGVsYXBzZWQgPSBleHRfdGltZSAtIHByaXYtPmNsb2NrX2Jhc2U7Ci0gIGVsc2UKLSAgICBlbGFwc2VkID0gMDsKLQotICBlbGFwc2VkID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoZWxhcHNlZCwgR1NUX1NFQ09ORCwgcHJpdi0+Y2xvY2tfcmF0ZSk7Ci0gIHJldHVybiBlbGFwc2VkOwotfQotCi1zdGF0aWMgdm9pZAotdXBkYXRlX2VzdGltYXRlZF9lb3MgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwKLSAgICBSVFBKaXR0ZXJCdWZmZXJJdGVtICogaXRlbSkKLXsKLSAgZ3VpbnQ2NCB0b3RhbCwgZWxhcHNlZCwgbGVmdCwgZXN0aW1hdGVkOwotICBHc3RDbG9ja1RpbWUgb3V0X3RpbWU7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgaWYgKHByaXYtPm5wdF9zdG9wID09IC0xIHx8IHByaXYtPmV4dF90aW1lc3RhbXAgPT0gLTEKLSAgICAgIHx8IHByaXYtPmNsb2NrX2Jhc2UgPT0gLTEgfHwgcHJpdi0+Y2xvY2tfcmF0ZSA8PSAwKQotICAgIHJldHVybjsKLQotICAvKiBjb21wdXRlIHRoZSBlbGFwc2VkIHRpbWUgKi8KLSAgZWxhcHNlZCA9IGNvbXB1dGVfZWxhcHNlZCAoaml0dGVyYnVmZmVyLCBpdGVtKTsKLQotICAvKiBkbyBub3RoaW5nIGlmIGVsYXBzZWQgdGltZSBkb2Vzbid0IGluY3JlbWVudCAqLwotICBpZiAocHJpdi0+bGFzdF9lbGFwc2VkICYmIGVsYXBzZWQgPD0gcHJpdi0+bGFzdF9lbGFwc2VkKQotICAgIHJldHVybjsKLQotICBwcml2LT5sYXN0X2VsYXBzZWQgPSBlbGFwc2VkOwotCi0gIC8qIHRoaXMgaXMgdGhlIHRvdGFsIHRpbWUgd2UgbmVlZCB0byBwbGF5ICovCi0gIHRvdGFsID0gcHJpdi0+bnB0X3N0b3AgLSBwcml2LT5ucHRfc3RhcnQ7Ci0gIEdTVF9MT0dfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJ0b3RhbCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0b3RhbCkpOwotCi0gIC8qIHRoaXMgaXMgaG93IG11Y2ggdGltZSB0aGVyZSBpcyBsZWZ0ICovCi0gIGlmICh0b3RhbCA+IGVsYXBzZWQpCi0gICAgbGVmdCA9IHRvdGFsIC0gZWxhcHNlZDsKLSAgZWxzZQotICAgIGxlZnQgPSAwOwotCi0gIC8qIGlmIHdlIGhhdmUgbGVzcyB0aW1lIGxlZnQgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCB3ZSB3aWxsIG5vdAotICAgKiBiZSBhYmxlIHRvIGtlZXAgaXQgZmlsbGVkLCBkaXNhYmxlZCBidWZmZXJpbmcgdGhlbiAqLwotICBpZiAobGVmdCA8IHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9kZWxheSAocHJpdi0+amJ1ZikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJsZWZ0ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiLCBkaXNhYmxlIGJ1ZmZlcmluZyBjbG9zZSB0byBFT1MiLCBHU1RfVElNRV9BUkdTIChsZWZ0KSk7Ci0gICAgcnRwX2ppdHRlcl9idWZmZXJfZGlzYWJsZV9idWZmZXJpbmcgKHByaXYtPmpidWYsIFRSVUUpOwotICB9Ci0KLSAgLyogdGhpcyBpcyB0aGUgY3VycmVudCB0aW1lIGFzIHJ1bm5pbmctdGltZSAqLwotICBvdXRfdGltZSA9IGl0ZW0tPnB0czsKLQotICBpZiAoZWxhcHNlZCA+IDApCi0gICAgZXN0aW1hdGVkID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChvdXRfdGltZSwgdG90YWwsIGVsYXBzZWQpOwotICBlbHNlIHsKLSAgICAvKiBpZiB0aGVyZSBpcyBhbG1vc3Qgbm90aGluZyBsZWZ0LAotICAgICAqIHdlIG1heSBuZXZlciBhZHZhbmNlIGVub3VnaCB0byBlbmQgdXAgaW4gdGhlIGFib3ZlIGNhc2UgKi8KLSAgICBpZiAodG90YWwgPCBHU1RfU0VDT05EKQotICAgICAgZXN0aW1hdGVkID0gR1NUX1NFQ09ORDsKLSAgICBlbHNlCi0gICAgICBlc3RpbWF0ZWQgPSAtMTsKLSAgfQotICBHU1RfTE9HX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiZWxhcHNlZCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZXN0aW1hdGVkICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGVsYXBzZWQpLCBHU1RfVElNRV9BUkdTIChlc3RpbWF0ZWQpKTsKLQotICBpZiAoZXN0aW1hdGVkICE9IC0xICYmIHByaXYtPmVzdGltYXRlZF9lb3MgIT0gZXN0aW1hdGVkKSB7Ci0gICAgc2V0X3RpbWVyIChqaXR0ZXJidWZmZXIsIFRJTUVSX1RZUEVfRU9TLCAtMSwgZXN0aW1hdGVkKTsKLSAgICBwcml2LT5lc3RpbWF0ZWRfZW9zID0gZXN0aW1hdGVkOwotICB9Ci19Ci0KLS8qIHRha2UgYSBidWZmZXIgZnJvbSB0aGUgcXVldWUgYW5kIHB1c2ggaXQgKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1wb3BfYW5kX3B1c2hfbmV4dCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBndWludCBzZXFudW0pCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gIFJUUEppdHRlckJ1ZmZlckl0ZW0gKml0ZW07Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgR3N0RXZlbnQgKm91dGV2ZW50ID0gTlVMTDsKLSAgR3N0UXVlcnkgKm91dHF1ZXJ5ID0gTlVMTDsKLSAgR3N0Q2xvY2tUaW1lIGR0cywgcHRzOwotICBnaW50IHBlcmNlbnQgPSAtMTsKLSAgZ2Jvb2xlYW4gZG9fcHVzaCA9IFRSVUU7Ci0gIGd1aW50IHR5cGU7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLQotICAvKiB3aGVuIHdlIGdldCBoZXJlIHdlIGFyZSByZWFkeSB0byBwb3AgYW5kIHB1c2ggdGhlIGJ1ZmZlciAqLwotICBpdGVtID0gcnRwX2ppdHRlcl9idWZmZXJfcG9wIChwcml2LT5qYnVmLCAmcGVyY2VudCk7Ci0gIHR5cGUgPSBpdGVtLT50eXBlOwotCi0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgSVRFTV9UWVBFX0JVRkZFUjoKLQotICAgICAgLyogd2UgbmVlZCB0byBtYWtlIHdyaXRhYmxlIHRvIGNoYW5nZSB0aGUgZmxhZ3MgYW5kIHRpbWVzdGFtcHMgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoaXRlbS0+ZGF0YSk7Ci0KLSAgICAgIGlmIChHX1VOTElLRUxZIChwcml2LT5kaXNjb250KSkgewotICAgICAgICAvKiBzZXQgRElTQ09OVCBmbGFnIHdoZW4gd2UgbWlzc2VkIGEgcGFja2V0LiBXZSBwdXNoZWQgdGhlIGJ1ZmZlciB3cml0YWJsZQotICAgICAgICAgKiBpbnRvIHRoZSBqaXR0ZXJidWZmZXIgc28gd2UgY2FuIG1vZGlmeSBub3cuICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIm1hcmsgb3V0cHV0IGJ1ZmZlciBkaXNjb250Iik7Ci0gICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgICBwcml2LT5kaXNjb250ID0gRkFMU0U7Ci0gICAgICB9Ci0gICAgICBpZiAoR19VTkxJS0VMWSAocHJpdi0+dHNfZGlzY29udCkpIHsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfQlVGRkVSX0ZMQUdfUkVTWU5DKTsKLSAgICAgICAgcHJpdi0+dHNfZGlzY29udCA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBkdHMgPQotICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lICgmcHJpdi0+c2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIGl0ZW0tPmR0cyk7Ci0gICAgICBwdHMgPQotICAgICAgICAgIGdzdF9zZWdtZW50X3Bvc2l0aW9uX2Zyb21fcnVubmluZ190aW1lICgmcHJpdi0+c2VnbWVudCwKLSAgICAgICAgICBHU1RfRk9STUFUX1RJTUUsIGl0ZW0tPnB0cyk7Ci0KLSAgICAgIC8qIGFwcGx5IHRpbWVzdGFtcCB3aXRoIG9mZnNldCB0byBidWZmZXIgbm93ICovCi0gICAgICBHU1RfQlVGRkVSX0RUUyAob3V0YnVmKSA9IGFwcGx5X29mZnNldCAoaml0dGVyYnVmZmVyLCBkdHMpOwotICAgICAgR1NUX0JVRkZFUl9QVFMgKG91dGJ1ZikgPSBhcHBseV9vZmZzZXQgKGppdHRlcmJ1ZmZlciwgcHRzKTsKLQotICAgICAgLyogdXBkYXRlIHRoZSBlbGFwc2VkIHRpbWUgd2hlbiB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIG5wdCBzdG9wIHRpbWUuICovCi0gICAgICB1cGRhdGVfZXN0aW1hdGVkX2VvcyAoaml0dGVyYnVmZmVyLCBpdGVtKTsKLQotICAgICAgcHJpdi0+bGFzdF9vdXRfdGltZSA9IEdTVF9CVUZGRVJfUFRTIChvdXRidWYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJVEVNX1RZUEVfTE9TVDoKLSAgICAgIHByaXYtPmRpc2NvbnQgPSBUUlVFOwotICAgICAgaWYgKCFwcml2LT5kb19sb3N0KQotICAgICAgICBkb19wdXNoID0gRkFMU0U7Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLwotICAgIGNhc2UgSVRFTV9UWVBFX0VWRU5UOgotICAgICAgb3V0ZXZlbnQgPSBpdGVtLT5kYXRhOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJVEVNX1RZUEVfUVVFUlk6Ci0gICAgICBvdXRxdWVyeSA9IGl0ZW0tPmRhdGE7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIG5vdyB3ZSBhcmUgcmVhZHkgdG8gcHVzaCB0aGUgYnVmZmVyLiBTYXZlIHRoZSBzZXFudW0gYW5kIHJlbGVhc2UgdGhlIGxvY2sKLSAgICogc28gdGhlIG90aGVyIGVuZCBjYW4gcHVzaCBzdHVmZiBpbiB0aGUgcXVldWUgYWdhaW4uICovCi0gIGlmIChzZXFudW0gIT0gLTEpIHsKLSAgICBwcml2LT5sYXN0X3BvcHBlZF9zZXFudW0gPSBzZXFudW07Ci0gICAgcHJpdi0+bmV4dF9zZXFudW0gPSAoc2VxbnVtICsgaXRlbS0+Y291bnQpICYgMHhmZmZmOwotICB9Ci0gIG1zZyA9IGNoZWNrX2J1ZmZlcmluZ19wZXJjZW50IChqaXR0ZXJidWZmZXIsIHBlcmNlbnQpOwotICBKQlVGX1VOTE9DSyAocHJpdik7Ci0KLSAgaXRlbS0+ZGF0YSA9IE5VTEw7Ci0gIGZyZWVfaXRlbSAoaXRlbSk7Ci0KLSAgaWYgKG1zZykKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKGppdHRlcmJ1ZmZlciksIG1zZyk7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJVEVNX1RZUEVfQlVGRkVSOgotICAgICAgLyogcHVzaCBidWZmZXIgKi8KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwKLSAgICAgICAgICAiUHVzaGluZyBidWZmZXIgJWQsIGR0cyAlIiBHU1RfVElNRV9GT1JNQVQgIiwgcHRzICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBzZXFudW0sIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFRTIChvdXRidWYpKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChHU1RfQlVGRkVSX1BUUyAob3V0YnVmKSkpOwotICAgICAgcHJpdi0+bnVtX3B1c2hlZCsrOwotICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9wdXNoIChwcml2LT5zcmNwYWQsIG91dGJ1Zik7Ci0KLSAgICAgIEpCVUZfTE9DS19DSEVDSyAocHJpdiwgb3V0X2ZsdXNoaW5nKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSVRFTV9UWVBFX0xPU1Q6Ci0gICAgY2FzZSBJVEVNX1RZUEVfRVZFTlQ6Ci0gICAgICAvKiBXZSBnb3Qgbm90IGVub3VnaCBjb25zZWN1dGl2ZSBwYWNrZXRzIHdpdGggYSBodWdlIGdhcCwgd2UgY2FuCi0gICAgICAgKiBhcyB3ZWxsIGp1c3QgZHJvcCB0aGVtIGhlcmUgbm93IG9uIEVPUyAqLwotICAgICAgaWYgKG91dGV2ZW50ICYmIEdTVF9FVkVOVF9UWVBFIChvdXRldmVudCkgPT0gR1NUX0VWRU5UX0VPUykgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJDbGVhcmluZyBnYXAgcGFja2V0cyBvbiBFT1MiKTsKLSAgICAgICAgZ19xdWV1ZV9mb3JlYWNoICgmcHJpdi0+Z2FwX3BhY2tldHMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gICAgICAgIGdfcXVldWVfY2xlYXIgKCZwcml2LT5nYXBfcGFja2V0cyk7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIiVzUHVzaGluZyBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgICAgICIsIHNlcW51bSAlZCIsIGRvX3B1c2ggPyAiIiA6ICJOT1QgIiwgb3V0ZXZlbnQsIHNlcW51bSk7Ci0KLSAgICAgIGlmIChkb19wdXNoKQotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHByaXYtPnNyY3BhZCwgb3V0ZXZlbnQpOwotICAgICAgZWxzZSBpZiAob3V0ZXZlbnQpCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAob3V0ZXZlbnQpOwotCi0gICAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLQotICAgICAgSkJVRl9MT0NLX0NIRUNLIChwcml2LCBvdXRfZmx1c2hpbmcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJVEVNX1RZUEVfUVVFUlk6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gcmVzOwotCi0gICAgICByZXMgPSBnc3RfcGFkX3BlZXJfcXVlcnkgKHByaXYtPnNyY3BhZCwgb3V0cXVlcnkpOwotCi0gICAgICBKQlVGX0xPQ0tfQ0hFQ0sgKHByaXYsIG91dF9mbHVzaGluZyk7Ci0gICAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgICAgIEdTVF9MT0dfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJkaWQgcXVlcnkgJXAsIHJldHVybiAlZCIsIG91dHF1ZXJ5LCByZXMpOwotICAgICAgSkJVRl9TSUdOQUxfUVVFUlkgKHByaXYsIHJlcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLW91dF9mbHVzaGluZzoKLSAgewotICAgIHJldHVybiBwcml2LT5zcmNyZXN1bHQ7Ci0gIH0KLX0KLQotI2RlZmluZSBHU1RfRkxPV19XQUlUIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTCi0KLS8qIFBlZWsgYSBidWZmZXIgYW5kIGNvbXBhcmUgdGhlIHNlcW51bSB0byB0aGUgZXhwZWN0ZWQgc2VxbnVtLgotICogSWYgYWxsIGlzIGZpbmUsIHRoZSBidWZmZXIgaXMgcHVzaGVkLgotICogSWYgc29tZXRoaW5nIGlzIHdyb25nLCB3ZSB3YWl0IGZvciBzb21lIGV2ZW50Ci0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1oYW5kbGVfbmV4dF9idWZmZXIgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlcikKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0gIFJUUEppdHRlckJ1ZmZlckl0ZW0gKml0ZW07Ci0gIGd1aW50IHNlcW51bTsKLSAgZ3VpbnQzMiBuZXh0X3NlcW51bTsKLQotICAvKiBvbmx5IHB1c2ggYnVmZmVycyB3aGVuIFBMQVlJTkcgYW5kIGFjdGl2ZSBhbmQgbm90IGJ1ZmZlcmluZyAqLwotICBpZiAocHJpdi0+YmxvY2tlZCB8fCAhcHJpdi0+YWN0aXZlIHx8Ci0gICAgICBydHBfaml0dGVyX2J1ZmZlcl9pc19idWZmZXJpbmcgKHByaXYtPmpidWYpKSB7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX1dBSVQ7Ci0gIH0KLQotICAvKiBwZWVrIGEgYnVmZmVyLCB3ZSdyZSBqdXN0IGxvb2tpbmcgYXQgdGhlIHNlcXVlbmNlIG51bWJlci4KLSAgICogSWYgYWxsIGlzIGZpbmUsIHdlJ2xsIHBvcCBhbmQgcHVzaCBpdC4gSWYgdGhlIHNlcXVlbmNlIG51bWJlciBpcyB3cm9uZyB3ZQotICAgKiB3YWl0IGZvciBhIHRpbWVvdXQgb3Igc29tZXRoaW5nIHRvIGNoYW5nZS4KLSAgICogVGhlIHBlZWtlZCBidWZmZXIgaXMgdmFsaWQgZm9yIGFzIGxvbmcgYXMgd2UgaG9sZCB0aGUgaml0dGVyYnVmZmVyIGxvY2suICovCi0gIGl0ZW0gPSBydHBfaml0dGVyX2J1ZmZlcl9wZWVrIChwcml2LT5qYnVmKTsKLSAgaWYgKGl0ZW0gPT0gTlVMTCkgewotICAgIGdvdG8gd2FpdDsKLSAgfQotCi0gIC8qIGdldCB0aGUgc2VxbnVtIGFuZCB0aGUgbmV4dCBleHBlY3RlZCBzZXFudW0gKi8KLSAgc2VxbnVtID0gaXRlbS0+c2VxbnVtOwotICBpZiAoc2VxbnVtID09IC0xKSB7Ci0gICAgcmV0dXJuIHBvcF9hbmRfcHVzaF9uZXh0IChqaXR0ZXJidWZmZXIsIHNlcW51bSk7Ci0gIH0KLQotICBuZXh0X3NlcW51bSA9IHByaXYtPm5leHRfc2VxbnVtOwotCi0gIC8qIGdldCB0aGUgZ2FwIGJldHdlZW4gdGhpcyBhbmQgdGhlIHByZXZpb3VzIHBhY2tldC4gSWYgd2UgZG9uJ3Qga25vdyB0aGUKLSAgICogcHJldmlvdXMgcGFja2V0IHNlcW51bSBhc3N1bWUgbm8gZ2FwLiAqLwotICBpZiAoR19VTkxJS0VMWSAobmV4dF9zZXFudW0gPT0gLTEpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiRmlyc3QgYnVmZmVyICMlZCIsIHNlcW51bSk7Ci0gICAgLyogd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBuZXh0X3NlcW51bSBzaG91bGQgYmUsIHRoZSBjaGFpbiBmdW5jdGlvbiBzaG91bGQKLSAgICAgKiBoYXZlIHNjaGVkdWxlZCBhIERFQURMSU5FIHRpbWVyIHRoYXQgd2lsbCBpbmNyZW1lbnQgbmV4dF9zZXFudW0gd2hlbiBpdAotICAgICAqIGZpcmVzLCBzbyB3YWl0IGZvciB0aGF0ICovCi0gICAgcmVzdWx0ID0gR1NUX0ZMT1dfV0FJVDsKLSAgfSBlbHNlIHsKLSAgICBnaW50IGdhcCA9IGdzdF9ydHBfYnVmZmVyX2NvbXBhcmVfc2VxbnVtIChuZXh0X3NlcW51bSwgc2VxbnVtKTsKLQotICAgIGlmIChHX0xJS0VMWSAoZ2FwID09IDApKSB7Ci0gICAgICAvKiBubyBtaXNzaW5nIHBhY2tldCwgcG9wIGFuZCBwdXNoICovCi0gICAgICByZXN1bHQgPSBwb3BfYW5kX3B1c2hfbmV4dCAoaml0dGVyYnVmZmVyLCBzZXFudW0pOwotICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAoZ2FwIDwgMCkpIHsKLSAgICAgIC8qIGlmIHdlIGhhdmUgYSBwYWNrZXQgdGhhdCB3ZSBhbHJlYWR5IHB1c2hlZCBvciBjb25zaWRlcmVkIGRyb3BwZWQsIHBvcCBpdAotICAgICAgICogb2ZmIGFuZCBnZXQgdGhlIG5leHQgcGFja2V0ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJPbGQgcGFja2V0ICMlZCwgbmV4dCAjJWQgZHJvcHBpbmciLAotICAgICAgICAgIHNlcW51bSwgbmV4dF9zZXFudW0pOwotICAgICAgaXRlbSA9IHJ0cF9qaXR0ZXJfYnVmZmVyX3BvcCAocHJpdi0+amJ1ZiwgTlVMTCk7Ci0gICAgICBmcmVlX2l0ZW0gKGl0ZW0pOwotICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHRoZSBjaGFpbiBmdW5jdGlvbiBoYXMgc2NoZWR1bGVkIHRpbWVycyB0byByZXF1ZXN0IHJldHJhbnNtaXNzaW9uIG9yCi0gICAgICAgKiB3aGVuIHRvIGNvbnNpZGVyIHRoZSBwYWNrZXQgbG9zdCwgd2FpdCBmb3IgdGhhdCAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICJTZXF1ZW5jZSBudW1iZXIgR0FQIGRldGVjdGVkOiBleHBlY3RlZCAlZCBpbnN0ZWFkIG9mICVkICglZCBtaXNzaW5nKSIsCi0gICAgICAgICAgbmV4dF9zZXFudW0sIHNlcW51bSwgZ2FwKTsKLSAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX1dBSVQ7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLQotd2FpdDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIm5vIGJ1ZmZlciwgZ29pbmcgdG8gd2FpdCIpOwotICAgIGlmIChwcml2LT5lb3MpIHsKLSAgICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBHU1RfRkxPV19XQUlUOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1nZXRfcnR4X3JldHJ5X3RpbWVvdXQgKEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKiBwcml2KQotewotICBHc3RDbG9ja1RpbWUgcnR4X3JldHJ5X3RpbWVvdXQ7Ci0gIEdzdENsb2NrVGltZSBydHhfbWluX3JldHJ5X3RpbWVvdXQ7Ci0KLSAgaWYgKHByaXYtPnJ0eF9yZXRyeV90aW1lb3V0ID09IC0xKSB7Ci0gICAgaWYgKHByaXYtPmF2Z19ydHhfcnR0ID09IDApCi0gICAgICBydHhfcmV0cnlfdGltZW91dCA9IERFRkFVTFRfQVVUT19SVFhfVElNRU9VVDsKLSAgICBlbHNlCi0gICAgICAvKiB3ZSB3YW50IHRvIGFzayBmb3IgYSByZXRyYW5zbWlzc2lvbiBhZnRlciB3ZSB3YWl0ZWQgZm9yIGEKLSAgICAgICAqIGNvbXBsZXRlIFJUVCBhbmQgdGhlIGFkZGl0aW9uYWwgaml0dGVyICovCi0gICAgICBydHhfcmV0cnlfdGltZW91dCA9IHByaXYtPmF2Z19ydHhfcnR0ICsgcHJpdi0+YXZnX2ppdHRlciAqIDI7Ci0gIH0gZWxzZSB7Ci0gICAgcnR4X3JldHJ5X3RpbWVvdXQgPSBwcml2LT5ydHhfcmV0cnlfdGltZW91dCAqIEdTVF9NU0VDT05EOwotICB9Ci0gIC8qIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXRyeSB0b28gb2Z0ZW4uIE9uIHZlcnkgbG93IGxhdGVuY3kgbmV0d29ya3MsCi0gICAqIHRoZSBSVFQgYW5kIGppdHRlciBjYW4gYmUgdmVyeSBsb3cuICovCi0gIGlmIChwcml2LT5ydHhfbWluX3JldHJ5X3RpbWVvdXQgPT0gLTEpIHsKLSAgICBydHhfbWluX3JldHJ5X3RpbWVvdXQgPSBwcml2LT5wYWNrZXRfc3BhY2luZzsKLSAgfSBlbHNlIHsKLSAgICBydHhfbWluX3JldHJ5X3RpbWVvdXQgPSBwcml2LT5ydHhfbWluX3JldHJ5X3RpbWVvdXQgKiBHU1RfTVNFQ09ORDsKLSAgfQotICBydHhfcmV0cnlfdGltZW91dCA9IE1BWCAocnR4X3JldHJ5X3RpbWVvdXQsIHJ0eF9taW5fcmV0cnlfdGltZW91dCk7Ci0KLSAgcmV0dXJuIHJ0eF9yZXRyeV90aW1lb3V0OwotfQotCi1zdGF0aWMgR3N0Q2xvY2tUaW1lCi1nZXRfcnR4X3JldHJ5X3BlcmlvZCAoR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqIHByaXYsCi0gICAgR3N0Q2xvY2tUaW1lIHJ0eF9yZXRyeV90aW1lb3V0KQotewotICBHc3RDbG9ja1RpbWUgcnR4X3JldHJ5X3BlcmlvZDsKLQotICBpZiAocHJpdi0+cnR4X3JldHJ5X3BlcmlvZCA9PSAtMSkgewotICAgIC8qIHdlIHJldHJ5IHVwIHRvIHRoZSBjb25maWd1cmVkIGppdHRlcmJ1ZmZlciBzaXplIGJ1dCBsZWF2aW5nIHNvbWUKLSAgICAgKiByb29tIGZvciB0aGUgcmV0cmFuc21pc3Npb24gdG8gYXJyaXZlIGluIHRpbWUgKi8KLSAgICBpZiAocnR4X3JldHJ5X3RpbWVvdXQgPiBwcml2LT5sYXRlbmN5X25zKSB7Ci0gICAgICBydHhfcmV0cnlfcGVyaW9kID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgcnR4X3JldHJ5X3BlcmlvZCA9IHByaXYtPmxhdGVuY3lfbnMgLSBydHhfcmV0cnlfdGltZW91dDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgcnR4X3JldHJ5X3BlcmlvZCA9IHByaXYtPnJ0eF9yZXRyeV9wZXJpb2QgKiBHU1RfTVNFQ09ORDsKLSAgfQotICByZXR1cm4gcnR4X3JldHJ5X3BlcmlvZDsKLX0KLQotLyoKLSAgMS4gRm9yICpsYXJnZXIqIHJ0eC1ydHQsIHdlaWdoIGEgbmV3IG1lYXN1cmVtZW50IGFzIGJlZm9yZSAoMS84dGgpCi0gIDIuIEZvciAqc21hbGxlciogcnR4LXJ0dCwgYmUgYSBiaXQgbW9yZSBjb25zZXJ2YXRpdmUgYW5kIHdlaWdoIGEgYml0IGxlc3MgKDEvMTZ0aCkKLSAgMy4gRm9yIHZlcnkgbGFyZ2UgbWVhc3VyZW1lbnRzICg+IGF2ZyAqIDIpLCBjb25zaWRlciB0aGVtICJvdXRsaWVycyIKLSAgICAgYW5kIGNvdW50IHRoZW0gYSBsb3QgbGVzcyAoMS80OHRoKQotKi8KLXN0YXRpYyB2b2lkCi11cGRhdGVfYXZnX3J0eF9ydHQgKEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKiBwcml2LCBHc3RDbG9ja1RpbWUgcnR0KQotewotICBnaW50IHdlaWdodDsKLQotICBpZiAocHJpdi0+YXZnX3J0eF9ydHQgPT0gMCkgewotICAgIHByaXYtPmF2Z19ydHhfcnR0ID0gcnR0OwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChydHQgPiAyICogcHJpdi0+YXZnX3J0eF9ydHQpCi0gICAgd2VpZ2h0ID0gNDg7Ci0gIGVsc2UgaWYgKHJ0dCA+IHByaXYtPmF2Z19ydHhfcnR0KQotICAgIHdlaWdodCA9IDg7Ci0gIGVsc2UKLSAgICB3ZWlnaHQgPSAxNjsKLQotICBwcml2LT5hdmdfcnR4X3J0dCA9IChydHQgKyAod2VpZ2h0IC0gMSkgKiBwcml2LT5hdmdfcnR4X3J0dCkgLyB3ZWlnaHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfcnR4X3N0YXRzIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIFRpbWVyRGF0YSAqIHRpbWVyLAotICAgIEdzdENsb2NrVGltZSBkdHMsIGdib29sZWFuIHN1Y2Nlc3MpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0gIEdzdENsb2NrVGltZSBkZWxheTsKLQotICBpZiAoc3VjY2VzcykgewotICAgIC8qIHdlIHNjaGVkdWxlZCBhIHJldHJ5IGZvciB0aGlzIHBhY2tldCBhbmQgbm93IHdlIGhhdmUgaXQgKi8KLSAgICBwcml2LT5udW1fcnR4X3N1Y2Nlc3MrKzsKLSAgICAvKiBhbGwgdGhlIHByZXZpb3VzIHJldHJ5IGF0dGVtcHRzIGZhaWxlZCAqLwotICAgIHByaXYtPm51bV9ydHhfZmFpbGVkICs9IHRpbWVyLT5udW1fcnR4X3JldHJ5IC0gMTsKLSAgfSBlbHNlIHsKLSAgICAvKiBBbGwgcmV0cmllcyBmYWlsZWQgb3Igd2FzIHRvbyBsYXRlICovCi0gICAgcHJpdi0+bnVtX3J0eF9mYWlsZWQgKz0gdGltZXItPm51bV9ydHhfcmV0cnk7Ci0gIH0KLQotICAvKiBudW1iZXIgb2YgcmV0cmllcyBiZWZvcmUgKGhvcGVmdWxseSkgcmVjZWl2aW5nIHRoZSBwYWNrZXQgKi8KLSAgaWYgKHByaXYtPmF2Z19ydHhfbnVtID09IDAuMCkKLSAgICBwcml2LT5hdmdfcnR4X251bSA9IHRpbWVyLT5udW1fcnR4X3JldHJ5OwotICBlbHNlCi0gICAgcHJpdi0+YXZnX3J0eF9udW0gPSAodGltZXItPm51bV9ydHhfcmV0cnkgKyA3ICogcHJpdi0+YXZnX3J0eF9udW0pIC8gODsKLQotICAvKiBDYWxjdWxhdGUgdGhlIGRlbGF5IGJldHdlZW4gcmV0cmFuc21pc3Npb24gcmVxdWVzdCBhbmQgcmVjZWl2aW5nIHRoaXMKLSAgICogcGFja2V0LiBXZSBoYXZlIGEgdmFsaWQgZGVsYXkgaWYgYW5kIG9ubHkgaWYgdGhpcyBwYWNrZXQgaXMgYSByZXNwb25zZSB0bwotICAgKiBvdXIgbGFzdCByZXF1ZXN0LiBJZiBub3Qgd2UgZG9uJ3Qga25vdyBpZiB0aGlzIGlzIGEgcmVzcG9uc2UgdG8gYW4KLSAgICogZWFybGllciByZXF1ZXN0IGFuZCBkZWxheSBjb3VsZCBiZSB3YXkgb2ZmLiBGb3IgUlRUIGlzIG1vcmUgaW1wb3J0YW50Ci0gICAqIHdpdGggY29ycmVjdCB2YWx1ZXMgdGhhbiB0byB1cGRhdGUgZm9yIGV2ZXJ5IHBhY2tldC4gKi8KLSAgaWYgKHRpbWVyLT5udW1fcnR4X3JldHJ5ID09IHRpbWVyLT5udW1fcnR4X3JlY2VpdmVkICYmCi0gICAgICBkdHMgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJiBkdHMgPiB0aW1lci0+cnR4X2xhc3QpIHsKLSAgICBkZWxheSA9IGR0cyAtIHRpbWVyLT5ydHhfbGFzdDsKLSAgICB1cGRhdGVfYXZnX3J0eF9ydHQgKHByaXYsIGRlbGF5KTsKLSAgfSBlbHNlIHsKLSAgICBkZWxheSA9IDA7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgIlJUWCAjJWQsIHJlc3VsdCAlZCwgc3VjY2VzcyAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGZhaWxlZCAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLCByZXF1ZXN0cyAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGR1cHMgJSIKLSAgICAgIEdfR1VJTlQ2NF9GT1JNQVQgIiwgYXZnLW51bSAlZywgZGVsYXkgJSIgR1NUX1RJTUVfRk9STUFUICIsIGF2Zy1ydHQgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgdGltZXItPnNlcW51bSwgc3VjY2VzcywgcHJpdi0+bnVtX3J0eF9zdWNjZXNzLAotICAgICAgcHJpdi0+bnVtX3J0eF9mYWlsZWQsIHByaXYtPm51bV9ydHhfcmVxdWVzdHMsIHByaXYtPm51bV9kdXBsaWNhdGVzLAotICAgICAgcHJpdi0+YXZnX3J0eF9udW0sIEdTVF9USU1FX0FSR1MgKGRlbGF5KSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHByaXYtPmF2Z19ydHhfcnR0KSk7Ci19Ci0KLS8qIHRoZSB0aW1lb3V0IGZvciB3aGVuIHdlIGV4cGVjdGVkIGEgcGFja2V0IGV4cGlyZWQgKi8KLXN0YXRpYyBnYm9vbGVhbgotZG9fZXhwZWN0ZWRfdGltZW91dCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBUaW1lckRhdGEgKiB0aW1lciwKLSAgICBHc3RDbG9ja1RpbWUgbm93KQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGd1aW50IGRlbGF5LCBkZWxheV9tcywgYXZnX3J0eF9ydHRfbXM7Ci0gIGd1aW50IHJ0eF9yZXRyeV90aW1lb3V0X21zLCBydHhfcmV0cnlfcGVyaW9kX21zOwotICBndWludCBydHhfZGVhZGxpbmVfbXM7Ci0gIEdzdENsb2NrVGltZSBydHhfcmV0cnlfcGVyaW9kOwotICBHc3RDbG9ja1RpbWUgcnR4X3JldHJ5X3RpbWVvdXQ7Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJleHBlY3RlZCAlZCBkaWRuJ3QgYXJyaXZlLCBub3cgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgdGltZXItPnNlcW51bSwgR1NUX1RJTUVfQVJHUyAobm93KSk7Ci0KLSAgcnR4X3JldHJ5X3RpbWVvdXQgPSBnZXRfcnR4X3JldHJ5X3RpbWVvdXQgKHByaXYpOwotICBydHhfcmV0cnlfcGVyaW9kID0gZ2V0X3J0eF9yZXRyeV9wZXJpb2QgKHByaXYsIHJ0eF9yZXRyeV90aW1lb3V0KTsKLQotICBkZWxheSA9IHRpbWVyLT5ydHhfZGVsYXkgKyB0aW1lci0+cnR4X3JldHJ5OwotCi0gIGRlbGF5X21zID0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKGRlbGF5KTsKLSAgcnR4X3JldHJ5X3RpbWVvdXRfbXMgPSBHU1RfVElNRV9BU19NU0VDT05EUyAocnR4X3JldHJ5X3RpbWVvdXQpOwotICBydHhfcmV0cnlfcGVyaW9kX21zID0gR1NUX1RJTUVfQVNfTVNFQ09ORFMgKHJ0eF9yZXRyeV9wZXJpb2QpOwotICBhdmdfcnR4X3J0dF9tcyA9IEdTVF9USU1FX0FTX01TRUNPTkRTIChwcml2LT5hdmdfcnR4X3J0dCk7Ci0gIHJ0eF9kZWFkbGluZV9tcyA9Ci0gICAgICBwcml2LT5ydHhfZGVhZGxpbmVfbXMgIT0gLTEgPyBwcml2LT5ydHhfZGVhZGxpbmVfbXMgOiBwcml2LT5sYXRlbmN5X21zOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCIsCi0gICAgICAgICAgInNlcW51bSIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIHRpbWVyLT5zZXFudW0sCi0gICAgICAgICAgInJ1bm5pbmctdGltZSIsIEdfVFlQRV9VSU5UNjQsIHRpbWVyLT5ydHhfYmFzZSwKLSAgICAgICAgICAiZGVsYXkiLCBHX1RZUEVfVUlOVCwgZGVsYXlfbXMsCi0gICAgICAgICAgInJldHJ5IiwgR19UWVBFX1VJTlQsIHRpbWVyLT5udW1fcnR4X3JldHJ5LAotICAgICAgICAgICJmcmVxdWVuY3kiLCBHX1RZUEVfVUlOVCwgcnR4X3JldHJ5X3RpbWVvdXRfbXMsCi0gICAgICAgICAgInBlcmlvZCIsIEdfVFlQRV9VSU5ULCBydHhfcmV0cnlfcGVyaW9kX21zLAotICAgICAgICAgICJkZWFkbGluZSIsIEdfVFlQRV9VSU5ULCBydHhfZGVhZGxpbmVfbXMsCi0gICAgICAgICAgInBhY2tldC1zcGFjaW5nIiwgR19UWVBFX1VJTlQ2NCwgcHJpdi0+cGFja2V0X3NwYWNpbmcsCi0gICAgICAgICAgImF2Zy1ydHQiLCBHX1RZUEVfVUlOVCwgYXZnX3J0eF9ydHRfbXMsIE5VTEwpKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiUmVxdWVzdCBSVFg6ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0KLSAgcHJpdi0+bnVtX3J0eF9yZXF1ZXN0cysrOwotICB0aW1lci0+bnVtX3J0eF9yZXRyeSsrOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoaml0dGVyYnVmZmVyKTsKLSAgaWYgKChjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChqaXR0ZXJidWZmZXIpKSkgewotICAgIHRpbWVyLT5ydHhfbGFzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIHRpbWVyLT5ydHhfbGFzdCAtPSBHU1RfRUxFTUVOVF9DQVNUIChqaXR0ZXJidWZmZXIpLT5iYXNlX3RpbWU7Ci0gIH0gZWxzZSB7Ci0gICAgdGltZXItPnJ0eF9sYXN0ID0gbm93OwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChqaXR0ZXJidWZmZXIpOwotCi0gIC8qIGNhbGN1bGF0ZSB0aGUgdGltZW91dCBmb3IgdGhlIG5leHQgcmV0cmFuc21pc3Npb24gYXR0ZW1wdCAqLwotICB0aW1lci0+cnR4X3JldHJ5ICs9IHJ0eF9yZXRyeV90aW1lb3V0OwotICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJiYXNlICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBkZWxheSAlIgotICAgICAgR1NUX1RJTUVfRk9STUFUICIsIHJldHJ5ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBudW1fcmV0cnkgJXUiLAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXItPnJ0eF9iYXNlKSwgR1NUX1RJTUVfQVJHUyAodGltZXItPnJ0eF9kZWxheSksCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lci0+cnR4X3JldHJ5KSwgdGltZXItPm51bV9ydHhfcmV0cnkpOwotICBpZiAoKHByaXYtPnJ0eF9tYXhfcmV0cmllcyAhPSAtMQotICAgICAgICAgICYmIHRpbWVyLT5udW1fcnR4X3JldHJ5ID49IHByaXYtPnJ0eF9tYXhfcmV0cmllcykKLSAgICAgIHx8ICh0aW1lci0+cnR4X3JldHJ5ICsgdGltZXItPnJ0eF9kZWxheSA+IHJ0eF9yZXRyeV9wZXJpb2QpCi0gICAgICB8fCAodGltZXItPnJ0eF9iYXNlICsgcnR4X3JldHJ5X3BlcmlvZCA8IG5vdykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJyZXNjaGVkdWxlIGFzIExPU1QgdGltZXIiKTsKLSAgICAvKiB0b28gbWFueSByZXRyYW5zbWlzc2lvbiByZXF1ZXN0LCB3ZSBub3cgY29udmVydCB0aGUgdGltZXIKLSAgICAgKiB0byBhIGxvc3QgdGltZXIsIGxlYXZlIHRoZSBudW1fcnR4X3JldHJ5IGFzIGl0IGlzIGZvciBzdGF0cyAqLwotICAgIHRpbWVyLT50eXBlID0gVElNRVJfVFlQRV9MT1NUOwotICAgIHRpbWVyLT5ydHhfZGVsYXkgPSAwOwotICAgIHRpbWVyLT5ydHhfcmV0cnkgPSAwOwotICB9Ci0gIHJlc2NoZWR1bGVfdGltZXIgKGppdHRlcmJ1ZmZlciwgdGltZXIsIHRpbWVyLT5zZXFudW0sCi0gICAgICB0aW1lci0+cnR4X2Jhc2UgKyB0aW1lci0+cnR4X3JldHJ5LCB0aW1lci0+cnR4X2RlbGF5LCBGQUxTRSk7Ci0KLSAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHByaXYtPnNpbmtwYWQsIGV2ZW50KTsKLSAgSkJVRl9MT0NLIChwcml2KTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIGEgcGFja2V0IGlzIGxvc3QgKi8KLXN0YXRpYyBnYm9vbGVhbgotZG9fbG9zdF90aW1lb3V0IChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIFRpbWVyRGF0YSAqIHRpbWVyLAotICAgIEdzdENsb2NrVGltZSBub3cpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0gIGd1aW50IHNlcW51bSwgbG9zdF9wYWNrZXRzLCBudW1fcnR4X3JldHJ5LCBuZXh0X2luX3NlcW51bTsKLSAgZ2Jvb2xlYW4gaGVhZDsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gTlVMTDsKLSAgUlRQSml0dGVyQnVmZmVySXRlbSAqaXRlbTsKLQotICBzZXFudW0gPSB0aW1lci0+c2VxbnVtOwotICBsb3N0X3BhY2tldHMgPSBNQVggKHRpbWVyLT5udW0sIDEpOwotICBudW1fcnR4X3JldHJ5ID0gdGltZXItPm51bV9ydHhfcmV0cnk7Ci0KLSAgLyogd2UgaGFkIGEgZ2FwIGFuZCB0aHVzIHdlIGxvc3Qgc29tZSBwYWNrZXRzLiBDcmVhdGUgYW4gZXZlbnQgZm9yIHRoaXMuICAqLwotICBpZiAobG9zdF9wYWNrZXRzID4gMSkKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJQYWNrZXRzICMlZCAtPiAjJWQgbG9zdCIsIHNlcW51bSwKLSAgICAgICAgc2VxbnVtICsgbG9zdF9wYWNrZXRzIC0gMSk7Ci0gIGVsc2UKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJQYWNrZXQgIyVkIGxvc3QiLCBzZXFudW0pOwotCi0gIHByaXYtPm51bV9sb3N0ICs9IGxvc3RfcGFja2V0czsKLSAgcHJpdi0+bnVtX3J0eF9mYWlsZWQgKz0gbnVtX3J0eF9yZXRyeTsKLQotICBuZXh0X2luX3NlcW51bSA9IChzZXFudW0gKyBsb3N0X3BhY2tldHMpICYgMHhmZmZmOwotCi0gIC8qIHdlIG5vdyBvbmx5IGFjY2VwdCBzZXFudW0gYmlnZ2VyIHRoYW4gdGhpcyAqLwotICBpZiAoZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKHByaXYtPm5leHRfaW5fc2VxbnVtLCBuZXh0X2luX3NlcW51bSkgPiAwKSB7Ci0gICAgcHJpdi0+bmV4dF9pbl9zZXFudW0gPSBuZXh0X2luX3NlcW51bTsKLSAgICBwcml2LT5sYXN0X2luX3B0cyA9IGFwcGx5X29mZnNldCAoaml0dGVyYnVmZmVyLCB0aW1lci0+dGltZW91dCk7Ci0gIH0KLQotICAvKiBBdm9pZCBjcmVhdGluZyBldmVudHMgaWYgd2UgZG9uJ3QgbmVlZCBpdC4gTm90ZSB0aGF0IHdlIHN0aWxsIG5lZWQgdG8gY3JlYXRlCi0gICAqIHRoZSBsb3N0ICpJVEVNKiBzaW5jZSBpdCB3aWxsIGJlIHVzZWQgdG8gbm90aWZ5IHRoZSBvdXRnb2luZyB0aHJlYWQgb2YKLSAgICogbG9zdCBpdGVtcyAoc28gdGhhdCB3ZSBjYW4gc2V0IGRpc2NvbnQgZmxhZ3MgYW5kIHN1Y2gpICovCi0gIGlmIChwcml2LT5kb19sb3N0KSB7Ci0gICAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLCB0aW1lc3RhbXA7Ci0gICAgLyogY3JlYXRlIHBha2V0IGxvc3QgZXZlbnQgKi8KLSAgICB0aW1lc3RhbXAgPSBhcHBseV9vZmZzZXQgKGppdHRlcmJ1ZmZlciwgdGltZXItPnRpbWVvdXQpOwotICAgIGR1cmF0aW9uID0gdGltZXItPmR1cmF0aW9uOwotICAgIGlmIChkdXJhdGlvbiA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FICYmIHByaXYtPnBhY2tldF9zcGFjaW5nID4gMCkKLSAgICAgIGR1cmF0aW9uID0gcHJpdi0+cGFja2V0X3NwYWNpbmc7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNLAotICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdFJUUFBhY2tldExvc3QiLAotICAgICAgICAgICAgInNlcW51bSIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIHNlcW51bSwKLSAgICAgICAgICAgICJ0aW1lc3RhbXAiLCBHX1RZUEVfVUlOVDY0LCB0aW1lc3RhbXAsCi0gICAgICAgICAgICAiZHVyYXRpb24iLCBHX1RZUEVfVUlOVDY0LCBkdXJhdGlvbiwKLSAgICAgICAgICAgICJyZXRyeSIsIEdfVFlQRV9VSU5ULCBudW1fcnR4X3JldHJ5LCBOVUxMKSk7Ci0gIH0KLSAgaXRlbSA9IGFsbG9jX2l0ZW0gKGV2ZW50LCBJVEVNX1RZUEVfTE9TVCwgLTEsIC0xLCBzZXFudW0sIGxvc3RfcGFja2V0cywgLTEpOwotICBpZiAoIXJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCAocHJpdi0+amJ1ZiwgaXRlbSwgJmhlYWQsIE5VTEwpKQotICAgIC8qIER1cGxpY2F0ZSAqLwotICAgIGZyZWVfaXRlbSAoaXRlbSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lci0+cnR4X2xhc3QpKSB7Ci0gICAgLyogU3RvcmUgaW5mbyB0byB1cGRhdGUgc3RhdHMgaWYgdGhlIHBhY2tldCBhcnJpdmVzIHRvbyBsYXRlICovCi0gICAgdGltZXJfcXVldWVfYXBwZW5kIChwcml2LT5ydHhfc3RhdHNfdGltZXJzLCB0aW1lciwKLSAgICAgICAgbm93ICsgcHJpdi0+cnR4X3N0YXRzX3RpbWVvdXQgKiBHU1RfTVNFQ09ORCwgVFJVRSk7Ci0gIH0KLSAgcmVtb3ZlX3RpbWVyIChqaXR0ZXJidWZmZXIsIHRpbWVyKTsKLQotICBpZiAoaGVhZCkKLSAgICBKQlVGX1NJR05BTF9FVkVOVCAocHJpdik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG9fZW9zX3RpbWVvdXQgKEdzdFJ0cEppdHRlckJ1ZmZlciAqIGppdHRlcmJ1ZmZlciwgVGltZXJEYXRhICogdGltZXIsCi0gICAgR3N0Q2xvY2tUaW1lIG5vdykKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBHU1RfSU5GT19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImdvdCB0aGUgTlBUIHRpbWVvdXQiKTsKLSAgcmVtb3ZlX3RpbWVyIChqaXR0ZXJidWZmZXIsIHRpbWVyKTsKLSAgaWYgKCFwcml2LT5lb3MpIHsKLSAgICAvKiB0aGVyZSB3YXMgbm8gRU9TIGluIHRoZSBidWZmZXIsIHB1dCBvbmUgaW4gdGhlcmUgbm93ICovCi0gICAgcXVldWVfZXZlbnQgKGppdHRlcmJ1ZmZlciwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICB9Ci0gIEpCVUZfU0lHTkFMX0VWRU5UIChwcml2KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kb19kZWFkbGluZV90aW1lb3V0IChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIsIFRpbWVyRGF0YSAqIHRpbWVyLAotICAgIEdzdENsb2NrVGltZSBub3cpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChqaXR0ZXJidWZmZXIsICJnb3QgZGVhZGxpbmUgdGltZW91dCIpOwotCi0gIC8qIHRpbWVyIHNlcW51bSBtaWdodCBoYXZlIGJlZW4gb2Jzb2xldGVkIGJ5IGNhcHMgc2VxbnVtLWJhc2UsCi0gICAqIG9ubHkgbWVzcyB3aXRoIGN1cnJlbnQgb25nb2luZyBzZXFudW0gaWYgc3RpbGwgdW5rbm93biAqLwotICBpZiAocHJpdi0+bmV4dF9zZXFudW0gPT0gLTEpCi0gICAgcHJpdi0+bmV4dF9zZXFudW0gPSB0aW1lci0+c2VxbnVtOwotICByZW1vdmVfdGltZXIgKGppdHRlcmJ1ZmZlciwgdGltZXIpOwotICBKQlVGX1NJR05BTF9FVkVOVCAocHJpdik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG9fdGltZW91dCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyLCBUaW1lckRhdGEgKiB0aW1lciwKLSAgICBHc3RDbG9ja1RpbWUgbm93KQotewotICBnYm9vbGVhbiByZW1vdmVkID0gRkFMU0U7Ci0KLSAgc3dpdGNoICh0aW1lci0+dHlwZSkgewotICAgIGNhc2UgVElNRVJfVFlQRV9FWFBFQ1RFRDoKLSAgICAgIHJlbW92ZWQgPSBkb19leHBlY3RlZF90aW1lb3V0IChqaXR0ZXJidWZmZXIsIHRpbWVyLCBub3cpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUSU1FUl9UWVBFX0xPU1Q6Ci0gICAgICByZW1vdmVkID0gZG9fbG9zdF90aW1lb3V0IChqaXR0ZXJidWZmZXIsIHRpbWVyLCBub3cpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUSU1FUl9UWVBFX0RFQURMSU5FOgotICAgICAgcmVtb3ZlZCA9IGRvX2RlYWRsaW5lX3RpbWVvdXQgKGppdHRlcmJ1ZmZlciwgdGltZXIsIG5vdyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFRJTUVSX1RZUEVfRU9TOgotICAgICAgcmVtb3ZlZCA9IGRvX2Vvc190aW1lb3V0IChqaXR0ZXJidWZmZXIsIHRpbWVyLCBub3cpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlbW92ZWQ7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdGltZW91dC4KLSAqCi0gKiBXZSBsb29wIG92ZXIgdGhlIGFycmF5IG9mIHJlY29yZGVkIHRpbWVvdXRzIGFuZCB3YWl0IGZvciB0aGUgZWFybGllc3Qgb25lLgotICogV2hlbiBpdCB0aW1lZCBvdXQsIGRvIHRoZSBsb2dpYyBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbWVyLgotICoKLSAqIElmIHRoZXJlIGFyZSBubyB0aW1lcnMsIHdlIHdhaXQgb24gYSBnY29uZCB1bnRpbCBzb21ldGhpbmcgbmV3IGhhcHBlbnMuCi0gKi8KLXN0YXRpYyB2b2lkCi13YWl0X25leHRfdGltZW91dCAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotICBHc3RDbG9ja1RpbWUgbm93ID0gMDsKLQotICBKQlVGX0xPQ0sgKHByaXYpOwotICB3aGlsZSAocHJpdi0+dGltZXJfcnVubmluZykgewotICAgIFRpbWVyRGF0YSAqdGltZXIgPSBOVUxMOwotICAgIEdzdENsb2NrVGltZSB0aW1lcl90aW1lb3V0ID0gLTE7Ci0gICAgZ2ludCBpLCBsZW47Ci0KLSAgICAvKiBJZiB3ZSBoYXZlIGEgY2xvY2ssIHVwZGF0ZSAibm93IiBub3cgd2l0aCB0aGUgdmVyeQotICAgICAqIGxhdGVzdCBydW5uaW5nIHRpbWUgd2UgaGF2ZS4gSWYgdGltZXJzIGFyZSB1bnNjaGVkdWxlZCBiZWxvdyB3ZQotICAgICAqIG90aGVyd2lzZSB3b3VsZG4ndCB1cGRhdGUgbm93IChpdCdzIG9ubHkgdXBkYXRlZCB3aGVuIHRpbWVycwotICAgICAqIGV4cGlyZSksIGFuZCBhbHNvIGZvciB0aGUgdmVyeSBmaXJzdCBsb29wIGl0ZXJhdGlvbiBub3cgd291bGQKLSAgICAgKiBvdGhlcndpc2UgYWx3YXlzIGJlIDAKLSAgICAgKi8KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKGppdHRlcmJ1ZmZlcik7Ci0gICAgaWYgKEdTVF9FTEVNRU5UX0NMT0NLIChqaXR0ZXJidWZmZXIpKSB7Ci0gICAgICBub3cgPQotICAgICAgICAgIGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0VMRU1FTlRfQ0xPQ0sgKGppdHRlcmJ1ZmZlcikpIC0KLSAgICAgICAgICBHU1RfRUxFTUVOVF9DQVNUIChqaXR0ZXJidWZmZXIpLT5iYXNlX3RpbWU7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChqaXR0ZXJidWZmZXIpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAibm93ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAobm93KSk7Ci0KLSAgICAvKiBDbGVhciBleHBpcmVkIHJ0eC1zdGF0cyB0aW1lcnMgKi8KLSAgICBpZiAocHJpdi0+ZG9fcmV0cmFuc21pc3Npb24pCi0gICAgICB0aW1lcl9xdWV1ZV9jbGVhcl91bnRpbCAocHJpdi0+cnR4X3N0YXRzX3RpbWVycywgbm93KTsKLQotICAgIC8qIEl0ZXJhdGUgIm5vcm1hbCIgdGltZXJzICovCi0gICAgbGVuID0gcHJpdi0+dGltZXJzLT5sZW47Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjspIHsKLSAgICAgIFRpbWVyRGF0YSAqdGVzdCA9ICZnX2FycmF5X2luZGV4IChwcml2LT50aW1lcnMsIFRpbWVyRGF0YSwgaSk7Ci0gICAgICBHc3RDbG9ja1RpbWUgdGVzdF90aW1lb3V0ID0gZ2V0X3RpbWVvdXQgKGppdHRlcmJ1ZmZlciwgdGVzdCk7Ci0gICAgICBnYm9vbGVhbiBzYXZlX2Jlc3QgPSBGQUxTRTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICIlZCwgJWQsICVkLCAlIiBHU1RfVElNRV9GT1JNQVQgIiBkaWZmOiUiIEdTVF9TVElNRV9GT1JNQVQsIGksCi0gICAgICAgICAgdGVzdC0+dHlwZSwgdGVzdC0+c2VxbnVtLCBHU1RfVElNRV9BUkdTICh0ZXN0X3RpbWVvdXQpLAotICAgICAgICAgIEdTVF9TVElNRV9BUkdTICgoZ2ludDY0KSAodGVzdF90aW1lb3V0IC0gbm93KSkpOwotCi0gICAgICAvKiBXZWVkIG91dCBhbnl0aGluZyB0b28gbGF0ZSAqLwotICAgICAgaWYgKHRlc3QtPnR5cGUgPT0gVElNRVJfVFlQRV9MT1NUICYmCi0gICAgICAgICAgKHRlc3RfdGltZW91dCA9PSAtMSB8fCB0ZXN0X3RpbWVvdXQgPD0gbm93KSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJXZWVkaW5nIG91dCBsYXRlIGVudHJ5Iik7Ci0gICAgICAgIGRvX2xvc3RfdGltZW91dCAoaml0dGVyYnVmZmVyLCB0ZXN0LCBub3cpOwotICAgICAgICBpZiAoIXByaXYtPnRpbWVyX3J1bm5pbmcpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIFdlIGRvbid0IG1vdmUgdGhlIGl0ZXJhdG9yIGZvcndhcmQgc2luY2Ugd2UganVzdCByZW1vdmVkIHRoZSBjdXJyZW50IGVudHJ5LAotICAgICAgICAgKiBidXQgd2UgdXBkYXRlIHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gKi8KLSAgICAgICAgbGVuID0gcHJpdi0+dGltZXJzLT5sZW47Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBmaW5kIHRoZSBzbWFsbGVzdCB0aW1lb3V0ICovCi0gICAgICAgIGlmICh0aW1lciA9PSBOVUxMKSB7Ci0gICAgICAgICAgc2F2ZV9iZXN0ID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIGlmICh0aW1lcl90aW1lb3V0ID09IC0xKSB7Ci0gICAgICAgICAgLyogd2UgYWxyZWFkeSBoYXZlIGFuIGltbWVkaWF0ZSB0aW1lb3V0LCB0aGUgbmV3IHRpbWVyIG11c3QgYmUgYW4KLSAgICAgICAgICAgKiBpbW1lZGlhdGUgdGltZXIgd2l0aCBzbWFsbGVyIHNlcW51bSB0byBiZWNvbWUgdGhlIGJlc3QgKi8KLSAgICAgICAgICBpZiAodGVzdF90aW1lb3V0ID09IC0xCi0gICAgICAgICAgICAgICYmIChnc3RfcnRwX2J1ZmZlcl9jb21wYXJlX3NlcW51bSAodGVzdC0+c2VxbnVtLAotICAgICAgICAgICAgICAgICAgICAgIHRpbWVyLT5zZXFudW0pID4gMCkpCi0gICAgICAgICAgICBzYXZlX2Jlc3QgPSBUUlVFOwotICAgICAgICB9IGVsc2UgaWYgKHRlc3RfdGltZW91dCA9PSAtMSkgewotICAgICAgICAgIC8qIGZpcnN0IGltbWVkaWF0ZSB0aW1lciAqLwotICAgICAgICAgIHNhdmVfYmVzdCA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSBpZiAodGVzdF90aW1lb3V0IDwgdGltZXJfdGltZW91dCkgewotICAgICAgICAgIC8qIGVhcmxpZXIgdGltZXIgKi8KLSAgICAgICAgICBzYXZlX2Jlc3QgPSBUUlVFOwotICAgICAgICB9IGVsc2UgaWYgKHRlc3RfdGltZW91dCA9PSB0aW1lcl90aW1lb3V0Ci0gICAgICAgICAgICAmJiAoZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKHRlc3QtPnNlcW51bSwKLSAgICAgICAgICAgICAgICAgICAgdGltZXItPnNlcW51bSkgPiAwKSkgewotICAgICAgICAgIC8qIHNhbWUgdGltZXIsIHNtYWxsZXIgc2VxbnVtICovCi0gICAgICAgICAgc2F2ZV9iZXN0ID0gVFJVRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzYXZlX2Jlc3QpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJuZXcgYmVzdCAlZCIsIGkpOwotICAgICAgICAgIHRpbWVyID0gdGVzdDsKLSAgICAgICAgICB0aW1lcl90aW1lb3V0ID0gdGVzdF90aW1lb3V0OwotICAgICAgICB9Ci0gICAgICAgIGkrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRpbWVyICYmICFwcml2LT5ibG9ja2VkKSB7Ci0gICAgICBHc3RDbG9jayAqY2xvY2s7Ci0gICAgICBHc3RDbG9ja1RpbWUgc3luY190aW1lOwotICAgICAgR3N0Q2xvY2tJRCBpZDsKLSAgICAgIEdzdENsb2NrUmV0dXJuIHJldDsKLSAgICAgIEdzdENsb2NrVGltZURpZmYgY2xvY2tfaml0dGVyOwotCi0gICAgICBpZiAodGltZXJfdGltZW91dCA9PSAtMSB8fCB0aW1lcl90aW1lb3V0IDw9IG5vdykgewotICAgICAgICAvKiBXZSBoYXZlIG5vcm1hbGx5IHJlbW92ZWQgYWxsIGxvc3QgdGltZXJzIGluIHRoZSBsb29wIGFib3ZlICovCi0gICAgICAgIGdfYXNzZXJ0ICh0aW1lci0+dHlwZSAhPSBUSU1FUl9UWVBFX0xPU1QpOwotCi0gICAgICAgIGRvX3RpbWVvdXQgKGppdHRlcmJ1ZmZlciwgdGltZXIsIG5vdyk7Ci0gICAgICAgIC8qIGNoZWNrIGhlcmUsIGRvX3RpbWVvdXQgY291bGQgaGF2ZSByZWxlYXNlZCB0aGUgbG9jayAqLwotICAgICAgICBpZiAoIXByaXYtPnRpbWVyX3J1bm5pbmcpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKGppdHRlcmJ1ZmZlcik7Ci0gICAgICBjbG9jayA9IEdTVF9FTEVNRU5UX0NMT0NLIChqaXR0ZXJidWZmZXIpOwotICAgICAgaWYgKCFjbG9jaykgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoaml0dGVyYnVmZmVyKTsKLSAgICAgICAgLyogbGV0J3MganVzdCBwdXNoIGlmIHRoZXJlIGlzIG5vIGNsb2NrICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIk5vIGNsb2NrLCB0aW1lb3V0IHJpZ2h0IGF3YXkiKTsKLSAgICAgICAgbm93ID0gdGltZXJfdGltZW91dDsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHByZXBhcmUgZm9yIHN5bmMgYWdhaW5zdCBjbG9jayAqLwotICAgICAgc3luY190aW1lID0gdGltZXJfdGltZW91dCArIEdTVF9FTEVNRU5UX0NBU1QgKGppdHRlcmJ1ZmZlciktPmJhc2VfdGltZTsKLSAgICAgIC8qIGFkZCBsYXRlbmN5IG9mIHBlZXIgdG8gZ2V0IGlucHV0IHRpbWUgKi8KLSAgICAgIHN5bmNfdGltZSArPSBwcml2LT5wZWVyX2xhdGVuY3k7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInN5bmMgdG8gdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIgd2l0aCBzeW5jIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVyX3RpbWVvdXQpLCBHU1RfVElNRV9BUkdTIChzeW5jX3RpbWUpKTsKLQotICAgICAgLyogY3JlYXRlIGFuIGVudHJ5IGZvciB0aGUgY2xvY2sgKi8KLSAgICAgIGlkID0gcHJpdi0+Y2xvY2tfaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChjbG9jaywgc3luY190aW1lKTsKLSAgICAgIHByaXYtPnRpbWVyX3RpbWVvdXQgPSB0aW1lcl90aW1lb3V0OwotICAgICAgcHJpdi0+dGltZXJfc2VxbnVtID0gdGltZXItPnNlcW51bTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChqaXR0ZXJidWZmZXIpOwotCi0gICAgICAvKiByZWxlYXNlIHRoZSBsb2NrIHNvIHRoYXQgdGhlIG90aGVyIGVuZCBjYW4gcHVzaCBzdHVmZiBvciB1bmxvY2sgKi8KLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLQotICAgICAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCAmY2xvY2tfaml0dGVyKTsKLQotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGlmICghcHJpdi0+dGltZXJfcnVubmluZykgewotICAgICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKLSAgICAgICAgcHJpdi0+Y2xvY2tfaWQgPSBOVUxMOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYgKHJldCAhPSBHU1RfQ0xPQ0tfVU5TQ0hFRFVMRUQpIHsKLSAgICAgICAgbm93ID0gdGltZXJfdGltZW91dCArIE1BWCAoY2xvY2tfaml0dGVyLCAwKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLAotICAgICAgICAgICAgInN5bmMgZG9uZSwgJWQsICMlZCwgJSIgR1NUX1NUSU1FX0ZPUk1BVCwgcmV0LCBwcml2LT50aW1lcl9zZXFudW0sCi0gICAgICAgICAgICBHU1RfU1RJTUVfQVJHUyAoY2xvY2tfaml0dGVyKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJzeW5jIHVuc2NoZWR1bGVkIik7Ci0gICAgICB9Ci0gICAgICAvKiBhbmQgZnJlZSB0aGUgZW50cnkgKi8KLSAgICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICAgICAgcHJpdi0+Y2xvY2tfaWQgPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBubyB0aW1lcnMsIHdhaXQgZm9yIGFjdGl2aXR5ICovCi0gICAgICBKQlVGX1dBSVRfVElNRVIgKHByaXYpOwotICAgIH0KLSAgfQotICBKQlVGX1VOTE9DSyAocHJpdik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAid2UgYXJlIHN0b3BwaW5nIik7Ci0gIHJldHVybjsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY2lvbiBpbXBsZW1lbnRzIHRoZSBtYWluIHB1c2hpbmcgbG9vcCBvbiB0aGUgc291cmNlIHBhZC4KLSAqCi0gKiBJdCBmaXJzdCB0cmllcyB0byBwdXNoIGFzIG1hbnkgYnVmZmVycyBhcyBwb3NzaWJsZS4gSWYgdGhlcmUgaXMgYSBzZXFudW0KLSAqIG1pc21hdGNoLCB3ZSB3YWl0IGZvciB0aGUgbmV4dCB0aW1lb3V0cy4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9sb29wIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqaXR0ZXJidWZmZXIpCi17Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBKQlVGX0xPQ0tfQ0hFQ0sgKHByaXYsIGZsdXNoaW5nKTsKLSAgZG8gewotICAgIHJlc3VsdCA9IGhhbmRsZV9uZXh0X2J1ZmZlciAoaml0dGVyYnVmZmVyKTsKLSAgICBpZiAoR19MSUtFTFkgKHJlc3VsdCA9PSBHU1RfRkxPV19XQUlUKSkgewotICAgICAgLyogbm93IHdhaXQgZm9yIHRoZSBuZXh0IGV2ZW50ICovCi0gICAgICBKQlVGX1dBSVRfRVZFTlQgKHByaXYsIGZsdXNoaW5nKTsKLSAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOwotICAgIH0KLSAgfSB3aGlsZSAocmVzdWx0ID09IEdTVF9GTE9XX09LKTsKLSAgLyogc3RvcmUgcmVzdWx0IGZvciB1cHN0cmVhbSAqLwotICBwcml2LT5zcmNyZXN1bHQgPSByZXN1bHQ7Ci0gIC8qIGlmIHdlIGdldCBoZXJlIHdlIG5lZWQgdG8gcGF1c2UgKi8KLSAgZ290byBwYXVzZTsKLQotICAvKiBFUlJPUlMgKi8KLWZsdXNoaW5nOgotICB7Ci0gICAgcmVzdWx0ID0gcHJpdi0+c3JjcmVzdWx0OwotICAgIGdvdG8gcGF1c2U7Ci0gIH0KLXBhdXNlOgotICB7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotCi0gICAgSkJVRl9TSUdOQUxfUVVFUlkgKHByaXYsIEZBTFNFKTsKLSAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJwYXVzaW5nIHRhc2ssIHJlYXNvbiAlcyIsCi0gICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChyZXN1bHQpKTsKLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHByaXYtPnNyY3BhZCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBHU1RfRkxPV19FT1MpIHsKLSAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHByaXYtPnNyY3BhZCwgZXZlbnQpOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLX0KLQotLyogY29sbGVjdCB0aGUgaW5mbyBmcm9tIHRoZSBsYXN0ZXN0IFJUQ1AgcGFja2V0IGFuZCB0aGUgaml0dGVyYnVmZmVyIHN5bmMsIGRvCi0gKiBzb21lIHNhbml0eSBjaGVja3MgYW5kIHRoZW4gZW1pdCB0aGUgaGFuZGxlLXN5bmMgc2lnbmFsIHdpdGggdGhlIHBhcmFtZXRlcnMuCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIExPQ0sgKi8KLXN0YXRpYyB2b2lkCi1kb19oYW5kbGVfc3luYyAoR3N0UnRwSml0dGVyQnVmZmVyICogaml0dGVyYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotICBndWludDY0IGJhc2VfcnRwdGltZSwgYmFzZV90aW1lOwotICBndWludDMyIGNsb2NrX3JhdGU7Ci0gIGd1aW50NjQgbGFzdF9ydHB0aW1lOwotICBndWludDY0IGNsb2NrX2Jhc2U7Ci0gIGd1aW50NjQgZXh0X3J0cHRpbWUsIGRpZmY7Ci0gIGdib29sZWFuIHZhbGlkID0gVFJVRSwga2VlcCA9IEZBTFNFOwotCi0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgLyogZ2V0IHRoZSBsYXN0IHZhbHVlcyBmcm9tIHRoZSBqaXR0ZXJidWZmZXIgKi8KLSAgcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3N5bmMgKHByaXYtPmpidWYsICZiYXNlX3J0cHRpbWUsICZiYXNlX3RpbWUsCi0gICAgICAmY2xvY2tfcmF0ZSwgJmxhc3RfcnRwdGltZSk7Ci0KLSAgY2xvY2tfYmFzZSA9IHByaXYtPmNsb2NrX2Jhc2U7Ci0gIGV4dF9ydHB0aW1lID0gcHJpdi0+ZXh0X3J0cHRpbWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiZXh0IFNSICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgYmFzZSAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCAiLCBjbG9jay1yYXRlICUiIEdfR1VJTlQzMl9GT1JNQVQKLSAgICAgICIsIGNsb2NrLWJhc2UgJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBsYXN0LXJ0cHRpbWUgJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIGV4dF9ydHB0aW1lLCBiYXNlX3J0cHRpbWUsIGNsb2NrX3JhdGUsIGNsb2NrX2Jhc2UsIGxhc3RfcnRwdGltZSk7Ci0KLSAgaWYgKGJhc2VfcnRwdGltZSA9PSAtMSB8fCBjbG9ja19yYXRlID09IC0xIHx8IGJhc2VfdGltZSA9PSAtMSkgewotICAgIC8qIHdlIGtlZXAgdGhpcyBTUiBwYWNrZXQgZm9yIGxhdGVyLiBXaGVuIHdlIGdldCBhIHZhbGlkIFJUUCBwYWNrZXQgdGhlCi0gICAgICogYWJvdmUgdmFsdWVzIHdpbGwgYmUgc2V0IGFuZCB3ZSBjYW4gdHJ5IHRvIHVzZSB0aGUgU1IgcGFja2V0ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAia2VlcGluZyBmb3IgbGF0ZXIsIG5vIFJUUCB2YWx1ZXMiKTsKLSAgICBrZWVwID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSBjYW4ndCBhY2NlcHQgYW55dGhpbmcgdGhhdCBoYXBwZW5lZCBiZWZvcmUgd2UgZGlkIHRoZSBsYXN0IHJlc3luYyAqLwotICAgIGlmIChiYXNlX3J0cHRpbWUgPiBleHRfcnRwdGltZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiZHJvcHBpbmcsIG9sZGVyIHRoYW4gYmFzZSB0aW1lIik7Ci0gICAgICB2YWxpZCA9IEZBTFNFOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiB0aGUgU1IgUlRQIHRpbWVzdGFtcCBtdXN0IGJlIHNvbWV0aGluZyBjbG9zZSB0byB3aGF0IHdlIGxhc3Qgb2JzZXJ2ZWQKLSAgICAgICAqIGluIHRoZSBqaXR0ZXJidWZmZXIgKi8KLSAgICAgIGlmIChleHRfcnRwdGltZSA+IGxhc3RfcnRwdGltZSkgewotICAgICAgICAvKiBjaGVjayBob3cgZmFyIGFoZWFkIGl0IGlzIHRvIG91ciBSVFAgdGltZXN0YW1wcyAqLwotICAgICAgICBkaWZmID0gZXh0X3J0cHRpbWUgLSBsYXN0X3J0cHRpbWU7Ci0gICAgICAgIC8qIGlmIGJpZ2dlciB0aGFuIDEgc2Vjb25kLCB3ZSBkcm9wIGl0ICovCi0gICAgICAgIGlmIChqaXR0ZXJidWZmZXItPnByaXYtPm1heF9ydGNwX3J0cF90aW1lX2RpZmYgIT0gLTEgJiYKLSAgICAgICAgICAgIGRpZmYgPgotICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChqaXR0ZXJidWZmZXItPnByaXYtPm1heF9ydGNwX3J0cF90aW1lX2RpZmYsCi0gICAgICAgICAgICAgICAgY2xvY2tfcmF0ZSwgMTAwMCkpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJ0b28gZmFyIGFoZWFkIik7Ci0gICAgICAgICAgLyogc2hvdWxkIGRyb3AgdGhpcywgYnV0IHNvbWUgUlRTUCBzZXJ2ZXJzIGVuZCB1cCB3aXRoIGJvZ3VzCi0gICAgICAgICAgICogd2F5IHRvbyBhaGVhZCBSVENQIHBhY2tldCB3aGVuIHJlcGVhdGVkIFBBVVNFL1BMQVksCi0gICAgICAgICAgICogc28gc3RpbGwgdHJpZ2dlciBycHRiaW4gc3luYyBidXQgaW52YWxpZGF0ZSBSVENQIGRhdGEKLSAgICAgICAgICAgKiAoc3luYyBtaWdodCB1c2Ugb3RoZXIgbWV0aG9kcykgKi8KLSAgICAgICAgICBleHRfcnRwdGltZSA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImV4dCBsYXN0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZGlmZiAlIgotICAgICAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgbGFzdF9ydHB0aW1lLCBkaWZmKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoa2VlcCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImtlZXBpbmcgUlRDUCBwYWNrZXQgZm9yIGxhdGVyIik7Ci0gIH0gZWxzZSBpZiAodmFsaWQpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1zeW5jIiwKLSAgICAgICAgImJhc2UtcnRwdGltZSIsIEdfVFlQRV9VSU5UNjQsIGJhc2VfcnRwdGltZSwKLSAgICAgICAgImJhc2UtdGltZSIsIEdfVFlQRV9VSU5UNjQsIGJhc2VfdGltZSwKLSAgICAgICAgImNsb2NrLXJhdGUiLCBHX1RZUEVfVUlOVCwgY2xvY2tfcmF0ZSwKLSAgICAgICAgImNsb2NrLWJhc2UiLCBHX1RZUEVfVUlOVDY0LCBjbG9ja19iYXNlLAotICAgICAgICAic3ItZXh0LXJ0cHRpbWUiLCBHX1RZUEVfVUlOVDY0LCBleHRfcnRwdGltZSwKLSAgICAgICAgInNyLWJ1ZmZlciIsIEdTVF9UWVBFX0JVRkZFUiwgcHJpdi0+bGFzdF9zciwgTlVMTCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJzaWduYWxpbmcgc3luYyIpOwotICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJnByaXYtPmxhc3Rfc3IsIE5VTEwpOwotICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICBnX3NpZ25hbF9lbWl0IChqaXR0ZXJidWZmZXIsCi0gICAgICAgIGdzdF9ydHBfaml0dGVyX2J1ZmZlcl9zaWduYWxzW1NJR05BTF9IQU5ETEVfU1lOQ10sIDAsIHMpOwotICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJkcm9wcGluZyBSVENQIHBhY2tldCIpOwotICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJnByaXYtPmxhc3Rfc3IsIE5VTEwpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfY2hhaW5fcnRjcCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlcjsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ3VpbnQzMiBzc3JjOwotICBHc3RSVENQUGFja2V0IHBhY2tldDsKLSAgZ3VpbnQ2NCBleHRfcnRwdGltZTsKLSAgZ3VpbnQzMiBydHB0aW1lOwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSB7IE5VTEwsIH07Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChwYXJlbnQpOwotCi0gIGlmIChHX1VOTElLRUxZICghZ3N0X3J0Y3BfYnVmZmVyX3ZhbGlkYXRlX3JlZHVjZWQgKGJ1ZmZlcikpKQotICAgIGdvdG8gaW52YWxpZF9idWZmZXI7Ci0KLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBnc3RfcnRjcF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0Y3ApOwotCi0gIGlmICghZ3N0X3J0Y3BfYnVmZmVyX2dldF9maXJzdF9wYWNrZXQgKCZydGNwLCAmcGFja2V0KSkKLSAgICBnb3RvIGVtcHR5X2J1ZmZlcjsKLQotICAvKiBmaXJzdCBwYWNrZXQgbXVzdCBiZSBTUiBvciBSUiBvciBlbHNlIHRoZSB2YWxpZGF0ZSB3b3VsZCBoYXZlIGZhaWxlZCAqLwotICBzd2l0Y2ggKGdzdF9ydGNwX3BhY2tldF9nZXRfdHlwZSAoJnBhY2tldCkpIHsKLSAgICBjYXNlIEdTVF9SVENQX1RZUEVfU1I6Ci0gICAgICBnc3RfcnRjcF9wYWNrZXRfc3JfZ2V0X3NlbmRlcl9pbmZvICgmcGFja2V0LCAmc3NyYywgTlVMTCwgJnJ0cHRpbWUsCi0gICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byBpZ25vcmVfYnVmZmVyOwotICB9Ci0gIGdzdF9ydGNwX2J1ZmZlcl91bm1hcCAoJnJ0Y3ApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgInJlY2VpdmVkIFJUQ1Agb2YgU1NSQyAlMDh4Iiwgc3NyYyk7Ci0KLSAgSkJVRl9MT0NLIChwcml2KTsKLSAgLyogY29udmVydCB0aGUgUlRQIHRpbWVzdGFtcCB0byBvdXIgZXh0ZW5kZWQgdGltZXN0YW1wLCB1c2luZyB0aGUgc2FtZSBvZmZzZXQKLSAgICogd2UgdXNlZCBpbiB0aGUgaml0dGVyYnVmZmVyICovCi0gIGV4dF9ydHB0aW1lID0gcHJpdi0+amJ1Zi0+ZXh0X3J0cHRpbWU7Ci0gIGV4dF9ydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZXh0X3RpbWVzdGFtcCAoJmV4dF9ydHB0aW1lLCBydHB0aW1lKTsKLQotICBwcml2LT5leHRfcnRwdGltZSA9IGV4dF9ydHB0aW1lOwotICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZwcml2LT5sYXN0X3NyLCBidWZmZXIpOwotCi0gIGRvX2hhbmRsZV9zeW5jIChqaXR0ZXJidWZmZXIpOwotICBKQlVGX1VOTE9DSyAocHJpdik7Ci0KLWRvbmU6Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIHJldDsKLQotaW52YWxpZF9idWZmZXI6Ci0gIHsKLSAgICAvKiB0aGlzIGlzIG5vdCBmYXRhbCBidXQgc2hvdWxkIGJlIGZpbHRlcmVkIGVhcmxpZXIgKi8KLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChqaXR0ZXJidWZmZXIsIFNUUkVBTSwgREVDT0RFLCAoTlVMTCksCi0gICAgICAgICgiUmVjZWl2ZWQgaW52YWxpZCBSVENQIHBheWxvYWQsIGRyb3BwaW5nIikpOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIGdvdG8gZG9uZTsKLSAgfQotZW1wdHlfYnVmZmVyOgotICB7Ci0gICAgLyogdGhpcyBpcyBub3QgZmF0YWwgYnV0IHNob3VsZCBiZSBmaWx0ZXJlZCBlYXJsaWVyICovCi0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoaml0dGVyYnVmZmVyLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoIlJlY2VpdmVkIGVtcHR5IFJUQ1AgcGF5bG9hZCwgZHJvcHBpbmciKSk7Ci0gICAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgZ290byBkb25lOwotICB9Ci1pZ25vcmVfYnVmZmVyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAiaWdub3JpbmcgUlRDUCBwYWNrZXQiKTsKLSAgICBnc3RfcnRjcF9idWZmZXJfdW5tYXAgKCZydGNwKTsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlciAqaml0dGVyYnVmZmVyOwotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2OwotCi0gIGppdHRlcmJ1ZmZlciA9IEdTVF9SVFBfSklUVEVSX0JVRkZFUiAocGFyZW50KTsKLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKmNhcHM7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBjYXBzID0gZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldGNhcHMgKHBhZCwgZmlsdGVyKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmIChHU1RfUVVFUllfSVNfU0VSSUFMSVpFRCAocXVlcnkpKSB7Ci0gICAgICAgIFJUUEppdHRlckJ1ZmZlckl0ZW0gKml0ZW07Ci0gICAgICAgIGdib29sZWFuIGhlYWQ7Ci0KLSAgICAgICAgSkJVRl9MT0NLX0NIRUNLIChwcml2LCBvdXRfZmx1c2hpbmcpOwotICAgICAgICBpZiAocnRwX2ppdHRlcl9idWZmZXJfZ2V0X21vZGUgKHByaXYtPmpidWYpICE9Ci0gICAgICAgICAgICBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX0JVRkZFUikgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgImFkZGluZyBzZXJpYWxpemVkIHF1ZXJ5Iik7Ci0gICAgICAgICAgaXRlbSA9IGFsbG9jX2l0ZW0gKHF1ZXJ5LCBJVEVNX1RZUEVfUVVFUlksIC0xLCAtMSwgLTEsIDAsIC0xKTsKLSAgICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9pbnNlcnQgKHByaXYtPmpidWYsIGl0ZW0sICZoZWFkLCBOVUxMKTsKLSAgICAgICAgICBpZiAoaGVhZCkKLSAgICAgICAgICAgIEpCVUZfU0lHTkFMX0VWRU5UIChwcml2KTsKLSAgICAgICAgICBKQlVGX1dBSVRfUVVFUlkgKHByaXYsIG91dF9mbHVzaGluZyk7Ci0gICAgICAgICAgcmVzID0gcHJpdi0+bGFzdF9xdWVyeTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJyZWZ1c2luZyBxdWVyeSwgd2UgYXJlIGJ1ZmZlcmluZyIpOwotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci0gIC8qIEVSUk9SUyAqLwotb3V0X2ZsdXNoaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAid2UgYXJlIGZsdXNoaW5nIik7Ci0gICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyICpqaXR0ZXJidWZmZXI7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGppdHRlcmJ1ZmZlciA9IEdTVF9SVFBfSklUVEVSX0JVRkZFUiAocGFyZW50KTsKLSAgcHJpdiA9IGppdHRlcmJ1ZmZlci0+cHJpdjsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIC8qIFdlIG5lZWQgdG8gc2VuZCB0aGUgcXVlcnkgdXBzdHJlYW0gYW5kIGFkZCB0aGUgcmV0dXJuZWQgbGF0ZW5jeSB0byBvdXIKLSAgICAgICAqIG93biAqLwotICAgICAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeTsKLSAgICAgIGdib29sZWFuIHVzX2xpdmU7Ci0gICAgICBHc3RDbG9ja1RpbWUgb3VyX2xhdGVuY3k7Ci0KLSAgICAgIGlmICgocmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChwcml2LT5zaW5rcGFkLCBxdWVyeSkpKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9sYXRlbmN5IChxdWVyeSwgJnVzX2xpdmUsICZtaW5fbGF0ZW5jeSwgJm1heF9sYXRlbmN5KTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJQZWVyIGxhdGVuY3k6IG1pbiAlIgotICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSwgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpKTsKLQotICAgICAgICAvKiBzdG9yZSB0aGlzIHNvIHRoYXQgd2UgY2FuIHNhZmVseSBzeW5jIG9uIHRoZSBwZWVyIGJ1ZmZlcnMuICovCi0gICAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICAgIHByaXYtPnBlZXJfbGF0ZW5jeSA9IG1pbl9sYXRlbmN5OwotICAgICAgICBvdXJfbGF0ZW5jeSA9IHByaXYtPmxhdGVuY3lfbnM7Ci0gICAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChqaXR0ZXJidWZmZXIsICJPdXIgbGF0ZW5jeTogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAob3VyX2xhdGVuY3kpKTsKLQotICAgICAgICAvKiB3ZSBhZGQgc29tZSBsYXRlbmN5IGJ1dCBjYW4gYnVmZmVyIGFuIGluZmluaXRlIGFtb3VudCBvZiB0aW1lICovCi0gICAgICAgIG1pbl9sYXRlbmN5ICs9IG91cl9sYXRlbmN5OwotICAgICAgICBtYXhfbGF0ZW5jeSA9IC0xOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciwgIkNhbGN1bGF0ZWQgdG90YWwgbGF0ZW5jeSA6IG1pbiAlIgotICAgICAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKG1pbl9sYXRlbmN5KSwgR1NUX1RJTUVfQVJHUyAobWF4X2xhdGVuY3kpKTsKLQotICAgICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBUUlVFLCBtaW5fbGF0ZW5jeSwgbWF4X2xhdGVuY3kpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIEdzdENsb2NrVGltZSBzdGFydCwgbGFzdF9vdXQ7Ci0gICAgICBHc3RGb3JtYXQgZm10OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm10LCBOVUxMKTsKLSAgICAgIGlmIChmbXQgIT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBzdGFydCA9IHByaXYtPm5wdF9zdGFydDsKLSAgICAgIGxhc3Rfb3V0ID0gcHJpdi0+bGFzdF9vdXRfdGltZTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAibnB0IHN0YXJ0ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICIsIGxhc3Qgb3V0ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3RhcnQpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGxhc3Rfb3V0KSk7Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RhcnQpICYmIEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChsYXN0X291dCkpIHsKLSAgICAgICAgLyogYnJpbmcgMC1iYXNlZCBvdXRnb2luZyB0aW1lIHRvIHN0cmVhbSB0aW1lICovCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfcG9zaXRpb24gKHF1ZXJ5LCBHU1RfRk9STUFUX1RJTUUsIHN0YXJ0ICsgbGFzdF9vdXQpOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqZmlsdGVyLCAqY2FwczsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGNhcHMgPSBnc3RfcnRwX2ppdHRlcl9idWZmZXJfZ2V0Y2FwcyAocGFkLCBmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXIgKmppdHRlcmJ1ZmZlcjsKLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsKLQotICBqaXR0ZXJidWZmZXIgPSBHU1RfUlRQX0pJVFRFUl9CVUZGRVIgKG9iamVjdCk7Ci0gIHByaXYgPSBqaXR0ZXJidWZmZXItPnByaXY7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xBVEVOQ1k6Ci0gICAgewotICAgICAgZ3VpbnQgbmV3X2xhdGVuY3ksIG9sZF9sYXRlbmN5OwotCi0gICAgICBuZXdfbGF0ZW5jeSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLQotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIG9sZF9sYXRlbmN5ID0gcHJpdi0+bGF0ZW5jeV9tczsKLSAgICAgIHByaXYtPmxhdGVuY3lfbXMgPSBuZXdfbGF0ZW5jeTsKLSAgICAgIHByaXYtPmxhdGVuY3lfbnMgPSBwcml2LT5sYXRlbmN5X21zICogR1NUX01TRUNPTkQ7Ci0gICAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfZGVsYXkgKHByaXYtPmpidWYsIHByaXYtPmxhdGVuY3lfbnMpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotCi0gICAgICAvKiBwb3N0IG1lc3NhZ2UgaWYgbGF0ZW5jeSBjaGFuZ2VkLCB0aGlzIHdpbGwgaW5mb3JtIHRoZSBwYXJlbnQgcGlwZWxpbmUKLSAgICAgICAqIHRoYXQgYSBsYXRlbmN5IHJlY29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZS9uZWVkZWQuICovCi0gICAgICBpZiAobmV3X2xhdGVuY3kgIT0gb2xkX2xhdGVuY3kpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoaml0dGVyYnVmZmVyLCAibGF0ZW5jeSBjaGFuZ2VkIHRvOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChuZXdfbGF0ZW5jeSAqIEdTVF9NU0VDT05EKSk7Ci0KLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChqaXR0ZXJidWZmZXIpLAotICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2xhdGVuY3kgKEdTVF9PQkpFQ1RfQ0FTVCAoaml0dGVyYnVmZmVyKSkpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9EUk9QX09OX0xBVEVOQ1k6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcHJpdi0+ZHJvcF9vbl9sYXRlbmN5ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RTX09GRlNFVDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBwcml2LT50c19vZmZzZXQgPSBnX3ZhbHVlX2dldF9pbnQ2NCAodmFsdWUpOwotICAgICAgcHJpdi0+dHNfZGlzY29udCA9IFRSVUU7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fTE9TVDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBwcml2LT5kb19sb3N0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01PREU6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcnRwX2ppdHRlcl9idWZmZXJfc2V0X21vZGUgKHByaXYtPmpidWYsIGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fUkVUUkFOU01JU1NJT046Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcHJpdi0+ZG9fcmV0cmFuc21pc3Npb24gPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX05FWFRfU0VRTlVNOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIHByaXYtPnJ0eF9uZXh0X3NlcW51bSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfREVMQVk6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcHJpdi0+cnR4X2RlbGF5ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX01JTl9ERUxBWToKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBwcml2LT5ydHhfbWluX2RlbGF5ID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUWF9ERUxBWV9SRU9SREVSOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIHByaXYtPnJ0eF9kZWxheV9yZW9yZGVyID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX1JFVFJZX1RJTUVPVVQ6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcHJpdi0+cnR4X3JldHJ5X3RpbWVvdXQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfTUlOX1JFVFJZX1RJTUVPVVQ6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcHJpdi0+cnR4X21pbl9yZXRyeV90aW1lb3V0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX1JFVFJZX1BFUklPRDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBwcml2LT5ydHhfcmV0cnlfcGVyaW9kID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX01BWF9SRVRSSUVTOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIHByaXYtPnJ0eF9tYXhfcmV0cmllcyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUWF9ERUFETElORToKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBwcml2LT5ydHhfZGVhZGxpbmVfbXMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfU1RBVFNfVElNRU9VVDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBwcml2LT5ydHhfc3RhdHNfdGltZW91dCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIHByaXYtPm1heF9ydGNwX3J0cF90aW1lX2RpZmYgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfRFJPUE9VVF9USU1FOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIHByaXYtPm1heF9kcm9wb3V0X3RpbWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX01JU09SREVSX1RJTUU6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgcHJpdi0+bWF4X21pc29yZGVyX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkZDNzI3M19TWU5DOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9yZmM3MjczX3N5bmMgKHByaXYtPmpidWYsCi0gICAgICAgICAgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfaml0dGVyX2J1ZmZlcl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwSml0dGVyQnVmZmVyICpqaXR0ZXJidWZmZXI7Ci0gIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGUgKnByaXY7Ci0KLSAgaml0dGVyYnVmZmVyID0gR1NUX1JUUF9KSVRURVJfQlVGRkVSIChvYmplY3QpOwotICBwcml2ID0gaml0dGVyYnVmZmVyLT5wcml2OwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MQVRFTkNZOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBwcml2LT5sYXRlbmN5X21zKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EUk9QX09OX0xBVEVOQ1k6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHByaXYtPmRyb3Bfb25fbGF0ZW5jeSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFNfT0ZGU0VUOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludDY0ICh2YWx1ZSwgcHJpdi0+dHNfb2Zmc2V0KTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET19MT1NUOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwcml2LT5kb19sb3N0KTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NT0RFOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBydHBfaml0dGVyX2J1ZmZlcl9nZXRfbW9kZSAocHJpdi0+amJ1ZikpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BFUkNFTlQ6Ci0gICAgewotICAgICAgZ2ludCBwZXJjZW50OwotCi0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgaWYgKHByaXYtPnNyY3Jlc3VsdCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgcGVyY2VudCA9IDEwMDsKLSAgICAgIGVsc2UKLSAgICAgICAgcGVyY2VudCA9IHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9wZXJjZW50IChwcml2LT5qYnVmKTsKLQotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcGVyY2VudCk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0RPX1JFVFJBTlNNSVNTSU9OOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwcml2LT5kb19yZXRyYW5zbWlzc2lvbik7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX05FWFRfU0VRTlVNOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwcml2LT5ydHhfbmV4dF9zZXFudW0pOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUWF9ERUxBWToKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwcml2LT5ydHhfZGVsYXkpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUWF9NSU5fREVMQVk6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHByaXYtPnJ0eF9taW5fZGVsYXkpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUWF9ERUxBWV9SRU9SREVSOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPnJ0eF9kZWxheV9yZW9yZGVyKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfUkVUUllfVElNRU9VVDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwcml2LT5ydHhfcmV0cnlfdGltZW91dCk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX01JTl9SRVRSWV9USU1FT1VUOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPnJ0eF9taW5fcmV0cnlfdGltZW91dCk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRYX1JFVFJZX1BFUklPRDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwcml2LT5ydHhfcmV0cnlfcGVyaW9kKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfTUFYX1JFVFJJRVM6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+cnR4X21heF9yZXRyaWVzKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfREVBRExJTkU6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+cnR4X2RlYWRsaW5lX21zKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFhfU1RBVFNfVElNRU9VVDoKLSAgICAgIEpCVUZfTE9DSyAocHJpdik7Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcHJpdi0+cnR4X3N0YXRzX3RpbWVvdXQpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUQVRTOgotICAgICAgZ192YWx1ZV90YWtlX2JveGVkICh2YWx1ZSwKLSAgICAgICAgICBnc3RfcnRwX2ppdHRlcl9idWZmZXJfY3JlYXRlX3N0YXRzIChqaXR0ZXJidWZmZXIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPm1heF9ydGNwX3J0cF90aW1lX2RpZmYpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9EUk9QT1VUX1RJTUU6Ci0gICAgICBKQlVGX0xPQ0sgKHByaXYpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHByaXYtPm1heF9kcm9wb3V0X3RpbWUpOwotICAgICAgSkJVRl9VTkxPQ0sgKHByaXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9NSVNPUkRFUl9USU1FOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBwcml2LT5tYXhfbWlzb3JkZXJfdGltZSk7Ci0gICAgICBKQlVGX1VOTE9DSyAocHJpdik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkZDNzI3M19TWU5DOgotICAgICAgSkJVRl9MT0NLIChwcml2KTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLAotICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9yZmM3MjczX3N5bmMgKHByaXYtPmpidWYpKTsKLSAgICAgIEpCVUZfVU5MT0NLIChwcml2KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1nc3RfcnRwX2ppdHRlcl9idWZmZXJfY3JlYXRlX3N0YXRzIChHc3RSdHBKaXR0ZXJCdWZmZXIgKiBqYnVmKQotewotICBHc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlICpwcml2ID0gamJ1Zi0+cHJpdjsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIEpCVUZfTE9DSyAocHJpdik7Ci0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIHByaXYtPm51bV9wdXNoZWQsCi0gICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCBwcml2LT5udW1fbG9zdCwKLSAgICAgICJudW0tbGF0ZSIsIEdfVFlQRV9VSU5UNjQsIHByaXYtPm51bV9sYXRlLAotICAgICAgIm51bS1kdXBsaWNhdGVzIiwgR19UWVBFX1VJTlQ2NCwgcHJpdi0+bnVtX2R1cGxpY2F0ZXMsCi0gICAgICAiYXZnLWppdHRlciIsIEdfVFlQRV9VSU5UNjQsIHByaXYtPmF2Z19qaXR0ZXIsCi0gICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgcHJpdi0+bnVtX3J0eF9yZXF1ZXN0cywKLSAgICAgICJydHgtc3VjY2Vzcy1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIHByaXYtPm51bV9ydHhfc3VjY2VzcywKLSAgICAgICJydHgtcGVyLXBhY2tldCIsIEdfVFlQRV9ET1VCTEUsIHByaXYtPmF2Z19ydHhfbnVtLAotICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCBwcml2LT5hdmdfcnR4X3J0dCwgTlVMTCk7Ci0gIEpCVUZfVU5MT0NLIChwcml2KTsKLQotICByZXR1cm4gczsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cGppdHRlcmJ1ZmZlci5oIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYmIxM2IuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwaml0dGVyYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogRmFyc2lnaHQgVm9pY2UrVmlkZW8gbGlicmFyeQotICoKLSAqICBDb3B5cmlnaHQgMjAwNyBDb2xsYWJvcmEgTHRkLCAKLSAqICBDb3B5cmlnaHQgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbgotICogICBAYXV0aG9yOiBQaGlsaXBwZSBLYWxhZiA8cGhpbGlwcGUua2FsYWZAY29sbGFib3JhLmNvLnVrPi4KLSAqICBDb3B5cmlnaHQgMjAwNyBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9KSVRURVJfQlVGRkVSX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfSklUVEVSX0JVRkZFUl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qICNkZWZpbmUncyBkb24ndCBsaWtlIHdoaXRlc3BhY2V5IGJpdHMgKi8KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0pJVFRFUl9CVUZGRVIgXAotICAoZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfSklUVEVSX0JVRkZFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBcCi0gIEdTVF9UWVBFX1JUUF9KSVRURVJfQlVGRkVSLEdzdFJ0cEppdHRlckJ1ZmZlcikpCi0jZGVmaW5lIEdTVF9SVFBfSklUVEVSX0JVRkZFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgXAotICBHU1RfVFlQRV9SVFBfSklUVEVSX0JVRkZFUixHc3RSdHBKaXR0ZXJCdWZmZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfSklUVEVSX0JVRkZFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9KSVRURVJfQlVGRkVSKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9KSVRURVJfQlVGRkVSX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfSklUVEVSX0JVRkZFUikpCi0jZGVmaW5lIEdTVF9SVFBfSklUVEVSX0JVRkZFUl9DQVNUKG9iaikgXAotICAoKEdzdFJ0cEppdHRlckJ1ZmZlciAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwSml0dGVyQnVmZmVyIEdzdFJ0cEppdHRlckJ1ZmZlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBKaXR0ZXJCdWZmZXJDbGFzcyBHc3RSdHBKaXR0ZXJCdWZmZXJDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBKaXR0ZXJCdWZmZXJQcml2YXRlIEdzdFJ0cEppdHRlckJ1ZmZlclByaXZhdGU7Ci0KLS8qKgotICogR3N0UnRwSml0dGVyQnVmZmVyOgotICoKLSAqIE9wYXF1ZSBqaXR0ZXJidWZmZXIgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFJ0cEppdHRlckJ1ZmZlcgotewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgR3N0UnRwSml0dGVyQnVmZmVyUHJpdmF0ZSAqcHJpdjsgLyogRklYTUU6IHJlbW92ZT8gKi8KLX07Ci0KLXN0cnVjdCBfR3N0UnRwSml0dGVyQnVmZmVyQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBzaWduYWxzICovCi0gIEdzdENhcHMqICgqcmVxdWVzdF9wdF9tYXApICAgKEdzdFJ0cEppdHRlckJ1ZmZlciAqYnVmZmVyLCBndWludCBwdCk7Ci0KLSAgdm9pZCAgICAgKCpoYW5kbGVfc3luYykgICAgICAoR3N0UnRwSml0dGVyQnVmZmVyICpidWZmZXIsIEdzdFN0cnVjdHVyZSAqcyk7Ci0gIHZvaWQgICAgICgqb25fbnB0X3N0b3ApICAgICAgKEdzdFJ0cEppdHRlckJ1ZmZlciAqYnVmZmVyKTsKLQotICAvKiBhY3Rpb25zICovCi0gIHZvaWQgICAgICgqY2xlYXJfcHRfbWFwKSAgIChHc3RSdHBKaXR0ZXJCdWZmZXIgKmJ1ZmZlcik7Ci0KLSAgR3N0Q2xvY2tUaW1lICgqc2V0X2FjdGl2ZSkgICAgIChHc3RSdHBKaXR0ZXJCdWZmZXIgKmJ1ZmZlciwgZ2Jvb2xlYW4gYWN0aXZlLCBndWludDY0IGVsYXBzZWQpOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9qaXR0ZXJfYnVmZmVyX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9KSVRURVJfQlVGRkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbWFuYWdlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjZiMGI3Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cG1hbmFnZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3RydHBiaW4uaCIKLSNpbmNsdWRlICJnc3RydHBqaXR0ZXJidWZmZXIuaCIKLSNpbmNsdWRlICJnc3RydHBwdGRlbXV4LmgiCi0jaW5jbHVkZSAiZ3N0cnRwc2Vzc2lvbi5oIgotI2luY2x1ZGUgImdzdHJ0cHJ0eHF1ZXVlLmgiCi0jaW5jbHVkZSAiZ3N0cnRwcnR4cmVjZWl2ZS5oIgotI2luY2x1ZGUgImdzdHJ0cHJ0eHNlbmQuaCIKLSNpbmNsdWRlICJnc3RydHBzc3JjZGVtdXguaCIKLSNpbmNsdWRlICJnc3RydHBkdG1mbXV4LmgiCi0jaW5jbHVkZSAiZ3N0cnRwbXV4LmgiCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwYmluIiwgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfUlRQX0JJTikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cGppdHRlcmJ1ZmZlciIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfUlRQX0pJVFRFUl9CVUZGRVIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBwdGRlbXV4IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9SVFBfUFRfREVNVVgpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBzZXNzaW9uIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9SVFBfU0VTU0lPTikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9ydHhfcXVldWVfcGx1Z2luX2luaXQgKHBsdWdpbikpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X3J0cF9ydHhfcmVjZWl2ZV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX3J0eF9zZW5kX3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBzc3JjZGVtdXgiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX1JUUF9TU1JDX0RFTVVYKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX211eF9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCFnc3RfcnRwX2R0bWZfbXV4X3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIHJ0cG1hbmFnZXIsCi0gICAgIlJUUCBzZXNzaW9uIG1hbmFnZW1lbnQgcGx1Z2luIGxpYnJhcnkiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5jIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZjRhNjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ODYgKzAsMCBAQAotLyogUlRQIG11eGVyIGVsZW1lbnQgZm9yIEdTdHJlYW1lcgotICoKLSAqIGdzdHJ0cG11eC5jOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDctMjAxMD4gTm9raWEgQ29ycG9yYXRpb24uCi0gKiAgIENvbnRhY3Q6IFplZXNoYW4gQWxpIDx6ZWVzaGFuLmFsaUBub2tpYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3LTIwMTA+IENvbGxhYm9yYSBMdGQKLSAqICAgQ29udGFjdDogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1ydHBtdXgKLSAqIEBzZWVfYWxzbzogcnRwZHRtZm11eAotICoKLSAqIFRoZSBydHAgbXV4ZXIgdGFrZXMgbXVsdGlwbGUgUlRQIHN0cmVhbXMgaGF2aW5nIHRoZSBzYW1lIGNsb2NrLXJhdGUgYW5kCi0gKiBtdXhlcyBpbnRvIGEgc2luZ2xlIHN0cmVhbSB3aXRoIGEgc2luZ2xlIFNTUkMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBydHBtdXggbmFtZT1tdXggISB1ZHBzaW5rIGhvc3Q9MTI3LjAuMC4xIHBvcnQ9ODg4OCAgICAgICAgXAotICogICAgICAgICAgICAgIGFsc2FzcmMgISBhbGF3ZW5jICEgcnRwcGNtYXBheSAhICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICAgICAgICAgIGFwcGxpY2F0aW9uL3gtcnRwLCBwYXlsb2FkPTgsIHJhdGU9ODAwMCAhIG11eC5zaW5rXzAgICAgXAotICogICAgICAgICAgICAgIGF1ZGlvdGVzdHNyYyBpcy1saXZlPTEgISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICAgICAgICAgIG11bGF3ZW5jICEgcnRwcGNtdXBheSAhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICAgICAgICAgIGFwcGxpY2F0aW9uL3gtcnRwLCBwYXlsb2FkPTAsIHJhdGU9ODAwMCAhIG11eC5zaW5rXzEKLSAqIF18Ci0gKiBJbiB0aGlzIGV4YW1wbGUsIGFuIGF1ZGlvIHN0cmVhbSBpcyBjYXB0dXJlZCBmcm9tIEFMU0EgYW5kIGFub3RoZXIgaXMKLSAqIGdlbmVyYXRlZCwgYm90aCBhcmUgZW5jb2RlZCBpbnRvIGRpZmZlcmVudCBwYXlsb2FkIHR5cGVzIGFuZCBtdXhlZCB0b2dldGhlcgotICogc28gdGhleSBjYW4gYmUgc2VudCBvbiB0aGUgc2FtZSBwb3J0LgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdHJ0cG11eC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX211eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcnRwX211eF9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9USU1FU1RBTVBfT0ZGU0VULAotICBQUk9QX1NFUU5VTV9PRkZTRVQsCi0gIFBST1BfU0VRTlVNLAotICBQUk9QX1NTUkMKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9USU1FU1RBTVBfT0ZGU0VUIC0xCi0jZGVmaW5lIERFRkFVTFRfU0VRTlVNX09GRlNFVCAgICAtMQotI2RlZmluZSBERUZBVUxUX1NTUkMgICAgICAgICAgICAgLTEKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0UGFkICpnc3RfcnRwX211eF9yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9tdXhfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9tdXhfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX211eF9jaGFpbl9saXN0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXJMaXN0ICogYnVmZmVybGlzdCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tdXhfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RSVFBNdXggKiBydHBfbXV4LAotICAgIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX211eF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX211eF9zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfbXV4X2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXV4X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfbXV4X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9tdXhfc3JjX2V2ZW50X3JlYWwgKEdzdFJUUE11eCAqIHJ0cF9tdXgsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFJUUE11eCwgZ3N0X3J0cF9tdXgsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX211eF9jbGFzc19pbml0IChHc3RSVFBNdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJSVFAgbXV4ZXIiLAotICAgICAgIkNvZGVjL011eGVyIiwKLSAgICAgICJtdWx0aXBsZXggTiBydHAgc3RyZWFtcyBpbnRvIG9uZSIsICJaZWVzaGFuIEFsaSA8Zmlyc3QubGFzdEBub2tpYS5jb20+Iik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9tdXhfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcnRwX211eF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfcnRwX211eF9kaXNwb3NlOwotCi0gIGtsYXNzLT5zcmNfZXZlbnQgPSBnc3RfcnRwX211eF9zcmNfZXZlbnRfcmVhbDsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLAotICAgICAgUFJPUF9USU1FU1RBTVBfT0ZGU0VULCBnX3BhcmFtX3NwZWNfaW50ICgidGltZXN0YW1wLW9mZnNldCIsCi0gICAgICAgICAgIlRpbWVzdGFtcCBPZmZzZXQiLAotICAgICAgICAgICJPZmZzZXQgdG8gYWRkIHRvIGFsbCBvdXRnb2luZyB0aW1lc3RhbXBzICgtMSA9IHJhbmRvbSkiLCAtMSwKLSAgICAgICAgICBHX01BWElOVCwgREVGQVVMVF9USU1FU1RBTVBfT0ZGU0VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1NFUU5VTV9PRkZTRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgic2VxbnVtLW9mZnNldCIsICJTZXF1ZW5jZSBudW1iZXIgT2Zmc2V0IiwKLSAgICAgICAgICAiT2Zmc2V0IHRvIGFkZCB0byBhbGwgb3V0Z29pbmcgc2VxbnVtICgtMSA9IHJhbmRvbSkiLCAtMSwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9TRVFOVU1fT0ZGU0VULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9TRVFOVU0sCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInNlcW51bSIsICJTZXF1ZW5jZSBudW1iZXIiLAotICAgICAgICAgICJUaGUgUlRQIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgcGFja2V0IiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfU1NSQywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgic3NyYyIsICJTU1JDIiwKLSAgICAgICAgICAiVGhlIFNTUkMgb2YgdGhlIHBhY2tldHMgKGRlZmF1bHQgPT0gcmFuZG9tKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX1NTUkMsCi0gICAgICAgICAgR1NUX1BBUkFNX01VVEFCTEVfUExBWUlORyB8IEdfUEFSQU1fUkVBRFdSSVRFIHwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVxdWVzdF9uZXdfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX211eF9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX211eF9yZWxlYXNlX3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX211eF9jaGFuZ2Vfc3RhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tdXhfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UlRQTXV4ICpydHBfbXV4ID0gR1NUX1JUUF9NVVggKG9iamVjdCk7Ci0gIEdMaXN0ICppdGVtOwotCi0gIGdfY2xlYXJfb2JqZWN0ICgmcnRwX211eC0+bGFzdF9wYWQpOwotCi1yZXN0YXJ0OgotICBmb3IgKGl0ZW0gPSBHU1RfRUxFTUVOVF9QQURTIChvYmplY3QpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQgKGl0ZW0pKSB7Ci0gICAgR3N0UGFkICpwYWQgPSBHU1RfUEFEIChpdGVtLT5kYXRhKTsKLSAgICBpZiAoR1NUX1BBRF9JU19TSU5LIChwYWQpKSB7Ci0gICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChHU1RfRUxFTUVOVCAob2JqZWN0KSwgcGFkKTsKLSAgICAgIGdvdG8gcmVzdGFydDsKLSAgICB9Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3J0cF9tdXhfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX211eF9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSVFBNdXggKnJ0cF9tdXggPSBHU1RfUlRQX01VWCAocGFyZW50KTsKLSAgR3N0UlRQTXV4Q2xhc3MgKmtsYXNzOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAga2xhc3MgPSBHU1RfUlRQX01VWF9HRVRfQ0xBU1MgKHJ0cF9tdXgpOwotCi0gIHJldCA9IGtsYXNzLT5zcmNfZXZlbnQgKHJ0cF9tdXgsIGV2ZW50KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXV4X3NyY19ldmVudF9yZWFsIChHc3RSVFBNdXggKiBydHBfbXV4LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU06Ci0gICAgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJHc3RSVFBDb2xsaXNpb24iKSkgewotICAgICAgICBndWludCBzc3JjID0gMDsKLQotICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzc3JjIiwgJnNzcmMpKQotICAgICAgICAgIHNzcmMgPSAtMTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHBfbXV4LCAiY29sbGlkZWQgc3NyYzogJSIgR19HVUlOVDMyX0ZPUk1BVCwgc3NyYyk7Ci0KLSAgICAgICAgLyogY2hvb3NlIGFub3RoZXIgc3NyYyBmb3Igb3VyIHN0cmVhbSAqLwotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cF9tdXgpOwotICAgICAgICBpZiAoc3NyYyA9PSBydHBfbXV4LT5jdXJyZW50X3NzcmMpIHsKLSAgICAgICAgICBHc3RDYXBzICpjYXBzOwotICAgICAgICAgIGd1aW50IHN1Z2dlc3RlZF9zc3JjID0gMDsKLSAgICAgICAgICBndWludDMyIG5ld19zc3JjOwotCi0gICAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzdWdnZXN0ZWQtc3NyYyIsICZzdWdnZXN0ZWRfc3NyYykpCi0gICAgICAgICAgICBydHBfbXV4LT5jdXJyZW50X3NzcmMgPSBzdWdnZXN0ZWRfc3NyYzsKLQotICAgICAgICAgIHdoaWxlIChzc3JjID09IHJ0cF9tdXgtPmN1cnJlbnRfc3NyYykKLSAgICAgICAgICAgIHJ0cF9tdXgtPmN1cnJlbnRfc3NyYyA9IGdfcmFuZG9tX2ludCAoKTsKLQotICAgICAgICAgIG5ld19zc3JjID0gcnRwX211eC0+Y3VycmVudF9zc3JjOwotICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBfbXV4KTsKLQotICAgICAgICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHJ0cF9tdXgtPnNyY3BhZCk7Ci0gICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotICAgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJzc3JjIiwgR19UWVBFX1VJTlQsIG5ld19zc3JjLCBOVUxMKTsKLSAgICAgICAgICBnc3RfcGFkX3NldF9jYXBzIChydHBfbXV4LT5zcmNwYWQsIGNhcHMpOwotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwX211eCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHJ0cF9tdXgtPnNyY3BhZCwgR1NUX09CSkVDVCAocnRwX211eCksIGV2ZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXV4X2luaXQgKEdzdFJUUE11eCAqIHJ0cF9tdXgpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKHJ0cF9tdXgpOwotCi0gIHJ0cF9tdXgtPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywKLSAgICAgICAgICAic3JjIiksICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHJ0cF9tdXgtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX211eF9zcmNfZXZlbnQpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAocnRwX211eC0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHJ0cF9tdXgpLCBydHBfbXV4LT5zcmNwYWQpOwotCi0gIHJ0cF9tdXgtPnNzcmMgPSBERUZBVUxUX1NTUkM7Ci0gIHJ0cF9tdXgtPmN1cnJlbnRfc3NyYyA9IERFRkFVTFRfU1NSQzsKLSAgcnRwX211eC0+c3NyY19yYW5kb20gPSBUUlVFOwotICBydHBfbXV4LT50c19vZmZzZXQgPSBERUZBVUxUX1RJTUVTVEFNUF9PRkZTRVQ7Ci0gIHJ0cF9tdXgtPnNlcW51bV9vZmZzZXQgPSBERUZBVUxUX1NFUU5VTV9PRkZTRVQ7Ci0KLSAgcnRwX211eC0+bGFzdF9zdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXV4X3NldHVwX3NpbmtwYWQgKEdzdFJUUE11eCAqIHJ0cF9tdXgsIEdzdFBhZCAqIHNpbmtwYWQpCi17Ci0gIEdzdFJUUE11eFBhZFByaXZhdGUgKnBhZHByaXYgPSBnX3NsaWNlX25ldzAgKEdzdFJUUE11eFBhZFByaXZhdGUpOwotCi0gIC8qIHNldHVwIHNvbWUgcGFkIGZ1bmN0aW9ucyAqLwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua3BhZCwgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfbXV4X2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24gKHNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9tdXhfY2hhaW5fbGlzdCkpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX211eF9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfbXV4X3NpbmtfcXVlcnkpKTsKLQotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZwYWRwcml2LT5zZWdtZW50LCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0KLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzaW5rcGFkLCBwYWRwcml2KTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocnRwX211eCksIHNpbmtwYWQpOwotfQotCi1zdGF0aWMgR3N0UGFkICoKLWdzdF9ydHBfbXV4X3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiByZXFfbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJUUE11eCAqcnRwX211eDsKLSAgR3N0UGFkICpuZXdwYWQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JUUF9NVVggKGVsZW1lbnQpLCBOVUxMKTsKLQotICBydHBfbXV4ID0gR1NUX1JUUF9NVVggKGVsZW1lbnQpOwotCi0gIGlmICh0ZW1wbC0+ZGlyZWN0aW9uICE9IEdTVF9QQURfU0lOSykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwX211eCwgInJlcXVlc3QgcGFkIHRoYXQgaXMgbm90IGEgU0lOSyBwYWQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIG5ld3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCByZXFfbmFtZSk7Ci0gIGlmIChuZXdwYWQpCi0gICAgZ3N0X3J0cF9tdXhfc2V0dXBfc2lua3BhZCAocnRwX211eCwgbmV3cGFkKTsKLSAgZWxzZQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnRwX211eCwgImZhaWxlZCB0byBjcmVhdGUgcmVxdWVzdCBwYWQiKTsKLQotICByZXR1cm4gbmV3cGFkOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tdXhfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpCi17Ci0gIEdzdFJUUE11eFBhZFByaXZhdGUgKnBhZHByaXY7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChlbGVtZW50KTsKLSAgcGFkcHJpdiA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChwYWQsIE5VTEwpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZWxlbWVudCk7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoZWxlbWVudCwgcGFkKTsKLQotICBpZiAocGFkcHJpdikgewotICAgIGdfc2xpY2VfZnJlZSAoR3N0UlRQTXV4UGFkUHJpdmF0ZSwgcGFkcHJpdik7Ci0gIH0KLX0KLQotLyogUHV0IG91ciBvd24gdGltZXN0YW1wLW9mZnNldCBvbiB0aGUgYnVmZmVyICovCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9tdXhfcmVhZGp1c3RfcnRwX3RpbWVzdGFtcF9sb2NrZWQgKEdzdFJUUE11eCAqIHJ0cF9tdXgsCi0gICAgR3N0UlRQTXV4UGFkUHJpdmF0ZSAqIHBhZHByaXYsIEdzdFJUUEJ1ZmZlciAqIHJ0cGJ1ZmZlcikKLXsKLSAgZ3VpbnQzMiB0czsKLSAgZ3VpbnQzMiBzaW5rX3RzX2Jhc2UgPSAwOwotCi0gIGlmIChwYWRwcml2ICYmIHBhZHByaXYtPmhhdmVfdGltZXN0YW1wX29mZnNldCkKLSAgICBzaW5rX3RzX2Jhc2UgPSBwYWRwcml2LT50aW1lc3RhbXBfb2Zmc2V0OwotCi0gIHRzID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwYnVmZmVyKSAtIHNpbmtfdHNfYmFzZSArCi0gICAgICBydHBfbXV4LT50c19iYXNlOwotICBHU1RfTE9HX09CSkVDVCAocnRwX211eCwgIlJlLWFkanVzdGluZyBSVFAgdHMgJXUgdG8gJXUiLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAocnRwYnVmZmVyKSwgdHMpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfdGltZXN0YW1wIChydHBidWZmZXIsIHRzKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wcm9jZXNzX2J1ZmZlcl9sb2NrZWQgKEdzdFJUUE11eCAqIHJ0cF9tdXgsIEdzdFJUUE11eFBhZFByaXZhdGUgKiBwYWRwcml2LAotICAgIEdzdFJUUEJ1ZmZlciAqIHJ0cGJ1ZmZlcikKLXsKLSAgR3N0UlRQTXV4Q2xhc3MgKmtsYXNzID0gR1NUX1JUUF9NVVhfR0VUX0NMQVNTIChydHBfbXV4KTsKLQotICBpZiAoa2xhc3MtPmFjY2VwdF9idWZmZXJfbG9ja2VkKQotICAgIGlmICgha2xhc3MtPmFjY2VwdF9idWZmZXJfbG9ja2VkIChydHBfbXV4LCBwYWRwcml2LCBydHBidWZmZXIpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gIHJ0cF9tdXgtPnNlcW51bSsrOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxIChydHBidWZmZXIsIHJ0cF9tdXgtPnNlcW51bSk7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3NzcmMgKHJ0cGJ1ZmZlciwgcnRwX211eC0+Y3VycmVudF9zc3JjKTsKLSAgZ3N0X3J0cF9tdXhfcmVhZGp1c3RfcnRwX3RpbWVzdGFtcF9sb2NrZWQgKHJ0cF9tdXgsIHBhZHByaXYsIHJ0cGJ1ZmZlcik7Ci0gIEdTVF9MT0dfT0JKRUNUIChydHBfbXV4LAotICAgICAgIlB1c2hpbmcgcGFja2V0IHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiwgc2VxPSVkLCB0cz0ldSIsCi0gICAgICBydHBidWZmZXItPm1hcFswXS5zaXplLCBydHBfbXV4LT5zZXFudW0sCi0gICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0YW1wIChydHBidWZmZXIpKTsKLQotICBpZiAocGFkcHJpdikgewotICAgIGlmIChwYWRwcml2LT5zZWdtZW50LmZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpCi0gICAgICBHU1RfQlVGRkVSX1BUUyAocnRwYnVmZmVyLT5idWZmZXIpID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZwYWRwcml2LT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKHJ0cGJ1ZmZlci0+YnVmZmVyKSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RydWN0IEJ1ZmZlckxpc3REYXRhCi17Ci0gIEdzdFJUUE11eCAqcnRwX211eDsKLSAgR3N0UlRQTXV4UGFkUHJpdmF0ZSAqcGFkcHJpdjsKLSAgZ2Jvb2xlYW4gZHJvcDsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotcHJvY2Vzc19saXN0X2l0ZW0gKEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50IGlkeCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBzdHJ1Y3QgQnVmZmVyTGlzdERhdGEgKmJkID0gdXNlcl9kYXRhOwotICBHc3RSVFBCdWZmZXIgcnRwYnVmZmVyID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLQotICAqYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICgqYnVmZmVyKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKCpidWZmZXIsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRwYnVmZmVyKTsKLQotICBiZC0+ZHJvcCA9ICFwcm9jZXNzX2J1ZmZlcl9sb2NrZWQgKGJkLT5ydHBfbXV4LCBiZC0+cGFkcHJpdiwgJnJ0cGJ1ZmZlcik7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHBidWZmZXIpOwotCi0gIGlmIChiZC0+ZHJvcCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfRFVSQVRJT05fSVNfVkFMSUQgKCpidWZmZXIpICYmCi0gICAgICBHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoKmJ1ZmZlcikpCi0gICAgYmQtPnJ0cF9tdXgtPmxhc3Rfc3RvcCA9IEdTVF9CVUZGRVJfUFRTICgqYnVmZmVyKSArCi0gICAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKCpidWZmZXIpOwotICBlbHNlCi0gICAgYmQtPnJ0cF9tdXgtPmxhc3Rfc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiByZXNlbmRfZXZlbnRzIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICoqIGV2ZW50LAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX211eF9jaGFpbl9saXN0IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXJMaXN0ICogYnVmZmVybGlzdCkKLXsKLSAgR3N0UlRQTXV4ICpydHBfbXV4OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0UlRQTXV4UGFkUHJpdmF0ZSAqcGFkcHJpdjsKLSAgZ2Jvb2xlYW4gY2hhbmdlZCA9IEZBTFNFOwotICBzdHJ1Y3QgQnVmZmVyTGlzdERhdGEgYmQ7Ci0KLSAgcnRwX211eCA9IEdTVF9SVFBfTVVYIChwYXJlbnQpOwotCi0gIGlmIChnc3RfcGFkX2NoZWNrX3JlY29uZmlndXJlIChydHBfbXV4LT5zcmNwYWQpKSB7Ci0gICAgR3N0Q2FwcyAqY3VycmVudF9jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpOwotCi0gICAgaWYgKCFnc3RfcnRwX211eF9zZXRjYXBzIChwYWQsIHJ0cF9tdXgsIGN1cnJlbnRfY2FwcykpIHsKLSAgICAgIHJldCA9IEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOwotICAgICAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChidWZmZXJsaXN0KTsKLSAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAoY3VycmVudF9jYXBzKTsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnRwX211eCk7Ci0KLSAgcGFkcHJpdiA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgaWYgKCFwYWRwcml2KSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cF9tdXgpOwotICAgIHJldCA9IEdTVF9GTE9XX05PVF9MSU5LRUQ7Ci0gICAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChidWZmZXJsaXN0KTsKLSAgICBnb3RvIG91dDsKLSAgfQotCi0gIGJkLnJ0cF9tdXggPSBydHBfbXV4OwotICBiZC5wYWRwcml2ID0gcGFkcHJpdjsKLSAgYmQuZHJvcCA9IEZBTFNFOwotCi0gIGJ1ZmZlcmxpc3QgPSBnc3RfYnVmZmVyX2xpc3RfbWFrZV93cml0YWJsZSAoYnVmZmVybGlzdCk7Ci0gIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChidWZmZXJsaXN0LCBwcm9jZXNzX2xpc3RfaXRlbSwgJmJkKTsKLQotICBpZiAoIWJkLmRyb3AgJiYgcGFkICE9IHJ0cF9tdXgtPmxhc3RfcGFkKSB7Ci0gICAgY2hhbmdlZCA9IFRSVUU7Ci0gICAgZ19jbGVhcl9vYmplY3QgKCZydHBfbXV4LT5sYXN0X3BhZCk7Ci0gICAgcnRwX211eC0+bGFzdF9wYWQgPSBnX29iamVjdF9yZWYgKHBhZCk7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwX211eCk7Ci0KLSAgaWYgKGNoYW5nZWQpCi0gICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHBhZCwgcmVzZW5kX2V2ZW50cywgcnRwX211eCk7Ci0KLSAgaWYgKGJkLmRyb3ApIHsKLSAgICBnc3RfYnVmZmVyX2xpc3RfdW5yZWYgKGJ1ZmZlcmxpc3QpOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9IGVsc2UgewotICAgIHJldCA9IGdzdF9wYWRfcHVzaF9saXN0IChydHBfbXV4LT5zcmNwYWQsIGJ1ZmZlcmxpc3QpOwotICB9Ci0KLW91dDoKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXJlc2VuZF9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UlRQTXV4ICpydHBfbXV4ID0gdXNlcl9kYXRhOwotCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoKmV2ZW50KSA9PSBHU1RfRVZFTlRfQ0FQUykgewotICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoKmV2ZW50LCAmY2Fwcyk7Ci0gICAgZ3N0X3J0cF9tdXhfc2V0Y2FwcyAocGFkLCBydHBfbXV4LCBjYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0cF9tdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X3JlZiAoKmV2ZW50KSk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfbXV4X2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSVFBNdXggKnJ0cF9tdXg7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RSVFBNdXhQYWRQcml2YXRlICpwYWRwcml2OwotICBnYm9vbGVhbiBkcm9wOwotICBnYm9vbGVhbiBjaGFuZ2VkID0gRkFMU0U7Ci0gIEdzdFJUUEJ1ZmZlciBydHBidWZmZXIgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotCi0gIHJ0cF9tdXggPSBHU1RfUlRQX01VWCAocGFyZW50KTsKLQotICBpZiAoZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAocnRwX211eC0+c3JjcGFkKSkgewotICAgIEdzdENhcHMgKmN1cnJlbnRfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLQotICAgIGlmICghZ3N0X3J0cF9tdXhfc2V0Y2FwcyAocGFkLCBydHBfbXV4LCBjdXJyZW50X2NhcHMpKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGN1cnJlbnRfY2Fwcyk7Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cF9tdXgpOwotICBwYWRwcml2ID0gZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotCi0gIGlmICghcGFkcHJpdikgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBfbXV4KTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfTElOS0VEOwotICB9Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWZmZXIpOwotCi0gIGlmICghZ3N0X3J0cF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRwYnVmZmVyKSkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBfbXV4KTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHJ0cF9tdXgsICJJbnZhbGlkIFJUUCBidWZmZXIiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBkcm9wID0gIXByb2Nlc3NfYnVmZmVyX2xvY2tlZCAocnRwX211eCwgcGFkcHJpdiwgJnJ0cGJ1ZmZlcik7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHBidWZmZXIpOwotCi0gIGlmICghZHJvcCkgewotICAgIGlmIChwYWQgIT0gcnRwX211eC0+bGFzdF9wYWQpIHsKLSAgICAgIGNoYW5nZWQgPSBUUlVFOwotICAgICAgZ19jbGVhcl9vYmplY3QgKCZydHBfbXV4LT5sYXN0X3BhZCk7Ci0gICAgICBydHBfbXV4LT5sYXN0X3BhZCA9IGdfb2JqZWN0X3JlZiAocGFkKTsKLSAgICB9Ci0KLSAgICBpZiAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmZmVyKSAmJgotICAgICAgICBHU1RfQlVGRkVSX1BUU19JU19WQUxJRCAoYnVmZmVyKSkKLSAgICAgIHJ0cF9tdXgtPmxhc3Rfc3RvcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpICsKLSAgICAgICAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICAgIGVsc2UKLSAgICAgIHJ0cF9tdXgtPmxhc3Rfc3RvcCA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwX211eCk7Ci0KLSAgaWYgKGNoYW5nZWQpCi0gICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHBhZCwgcmVzZW5kX2V2ZW50cywgcnRwX211eCk7Ci0KLSAgaWYgKGRyb3ApIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9IGVsc2UgewotICAgIHJldCA9IGdzdF9wYWRfcHVzaCAocnRwX211eC0+c3JjcGFkLCBidWZmZXIpOwotICB9Ci0KLW91dDoKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX211eF9zZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdFJUUE11eCAqIHJ0cF9tdXgsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdFJUUE11eFBhZFByaXZhdGUgKnBhZHByaXY7Ci0gIEdzdENhcHMgKnBlZXJjYXBzOwotCi0gIGlmICghZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBwZWVyY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChydHBfbXV4LT5zcmNwYWQsIE5VTEwpOwotICBpZiAocGVlcmNhcHMpIHsKLSAgICBHc3RDYXBzICp0Y2FwcywgKm90aGVyY2Fwczs7Ci0gICAgdGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICBvdGhlcmNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocGVlcmNhcHMsIHRjYXBzLAotICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotCi0gICAgaWYgKGdzdF9jYXBzX2dldF9zaXplIChvdGhlcmNhcHMpID4gMCkgewotICAgICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob3RoZXJjYXBzLCAwKTsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocnRwX211eCk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAoc3RydWN0dXJlLCAic3NyYyIsICZydHBfbXV4LT5jdXJyZW50X3NzcmMpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlVzZSBkb3duc3RyZWFtIHNzcmM6ICV4IiwKLSAgICAgICAgICAgIHJ0cF9tdXgtPmN1cnJlbnRfc3NyYyk7Ci0gICAgICAgIHJ0cF9tdXgtPmhhdmVfc3NyYyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwX211eCk7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKG90aGVyY2Fwcyk7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmICh0Y2Fwcyk7Ci0gIH0KLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICBpZiAoIXN0cnVjdHVyZSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChydHBfbXV4KTsKLSAgcGFkcHJpdiA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLSAgaWYgKHBhZHByaXYgJiYKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHN0cnVjdHVyZSwgInRpbWVzdGFtcC1vZmZzZXQiLAotICAgICAgICAgICZwYWRwcml2LT50aW1lc3RhbXBfb2Zmc2V0KSkgewotICAgIHBhZHByaXYtPmhhdmVfdGltZXN0YW1wX29mZnNldCA9IFRSVUU7Ci0gIH0KLQotICBjYXBzID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0KLSAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIHNwZWNpZmllZCBzc3JjLCBmaXJzdCB0cnkgdG8gdGFrZSBvbmUgZnJvbSB0aGUgY2FwcywKLSAgICAgYW5kIGlmIHRoYXQgZmFpbHMsIGdlbmVyYXRlIG9uZSAqLwotICBpZiAoIXJ0cF9tdXgtPmhhdmVfc3NyYykgewotICAgIGlmIChydHBfbXV4LT5zc3JjX3JhbmRvbSkgewotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzdHJ1Y3R1cmUsICJzc3JjIiwgJnJ0cF9tdXgtPmN1cnJlbnRfc3NyYykpCi0gICAgICAgIHJ0cF9tdXgtPmN1cnJlbnRfc3NyYyA9IGdfcmFuZG9tX2ludCAoKTsKLSAgICAgIHJ0cF9tdXgtPmhhdmVfc3NyYyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywKLSAgICAgICJ0aW1lc3RhbXAtb2Zmc2V0IiwgR19UWVBFX1VJTlQsIHJ0cF9tdXgtPnRzX2Jhc2UsCi0gICAgICAic2VxbnVtLW9mZnNldCIsIEdfVFlQRV9VSU5ULCBydHBfbXV4LT5zZXFudW1fYmFzZSwKLSAgICAgICJzc3JjIiwgR19UWVBFX1VJTlQsIHJ0cF9tdXgtPmN1cnJlbnRfc3NyYywgTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cF9tdXgpOwotCi0gIGlmIChydHBfbXV4LT5zZW5kX3N0cmVhbV9zdGFydCkgewotICAgIGdjaGFyIHNfaWRbMzJdOwotCi0gICAgLyogc3RyZWFtLXN0YXJ0IChGSVhNRTogY3JlYXRlIGlkIGJhc2VkIG9uIGlucHV0IGlkcykgKi8KLSAgICBnX3NucHJpbnRmIChzX2lkLCBzaXplb2YgKHNfaWQpLCAiaW50ZXJsZWF2ZS0lMDh4IiwgZ19yYW5kb21faW50ICgpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0cF9tdXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKHNfaWQpKTsKLQotICAgIHJ0cF9tdXgtPnNlbmRfc3RyZWFtX3N0YXJ0ID0gRkFMU0U7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBfbXV4LAotICAgICAgInNldHRpbmcgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiIG9uIHNyYyBwYWQuLiIsIGNhcHMpOwotICByZXQgPSBnc3RfcGFkX3NldF9jYXBzIChydHBfbXV4LT5zcmNwYWQsIGNhcHMpOwotCi0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhcl9jYXBzIChHc3RDYXBzICogY2FwcywgZ2Jvb2xlYW4gb25seV9jbG9ja19yYXRlKQotewotICBnaW50IGksIGo7Ci0KLSAgLyogTGV0cyBvbmx5IG1hdGNoIG9uIHRoZSBjbG9jay1yYXRlICovCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZm9yIChqID0gMDsgaiA8IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHMpOyBqKyspIHsKLSAgICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAocywgaik7Ci0KLSAgICAgIGlmIChzdHJjbXAgKG5hbWUsICJjbG9jay1yYXRlIikgJiYgKG9ubHlfY2xvY2tfcmF0ZSB8fAotICAgICAgICAgICAgICAoc3RyY21wIChuYW1lLCAic3NyYyIpKSkpIHsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsIG5hbWUpOwotICAgICAgICBqLS07Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc2FtZV9jbG9ja19yYXRlX2ZvbGQgKGNvbnN0IEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWQgKm15cGFkID0gdXNlcl9kYXRhOwotICBHc3RQYWQgKnBhZCA9IGdfdmFsdWVfZ2V0X29iamVjdCAoaXRlbSk7Ci0gIEdzdENhcHMgKnBlZXJjYXBzOwotICBHc3RDYXBzICphY2N1bWNhcHM7Ci0KLSAgaWYgKHBhZCA9PSBteXBhZCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBhY2N1bWNhcHMgPSBnX3ZhbHVlX2dldF9ib3hlZCAocmV0KTsKLSAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAocGFkLCBhY2N1bWNhcHMpOwotICBpZiAoIXBlZXJjYXBzKSB7Ci0gICAgZ193YXJuaW5nICgibm8gcGVlcmNhcHMiKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICBwZWVyY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHBlZXJjYXBzKTsKLSAgY2xlYXJfY2FwcyAocGVlcmNhcHMsIFRSVUUpOwotCi0gIGdfdmFsdWVfdGFrZV9ib3hlZCAocmV0LCBwZWVyY2Fwcyk7Ci0KLSAgcmV0dXJuICFnc3RfY2Fwc19pc19lbXB0eSAocGVlcmNhcHMpOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX211eF9nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdFJUUE11eCAqIG11eCwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIEdzdEl0ZXJhdG9yICppdGVyID0gTlVMTDsKLSAgR1ZhbHVlIHYgPSB7IDAgfTsKLSAgR3N0SXRlcmF0b3JSZXN1bHQgcmVzOwotICBHc3RDYXBzICpwZWVyY2FwczsKLSAgR3N0Q2FwcyAqb3RoZXJjYXBzOwotICBHc3RDYXBzICp0Y2FwczsKLQotICBwZWVyY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChtdXgtPnNyY3BhZCwgTlVMTCk7Ci0KLSAgaWYgKHBlZXJjYXBzKSB7Ci0gICAgdGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLSAgICBvdGhlcmNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocGVlcmNhcHMsIHRjYXBzLAotICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChwZWVyY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgdGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAobXV4LT5zcmNwYWQpOwotICAgIGlmIChmaWx0ZXIpCi0gICAgICBvdGhlcmNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCB0Y2FwcywKLSAgICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGVsc2UKLSAgICAgIG90aGVyY2FwcyA9IGdzdF9jYXBzX2NvcHkgKHRjYXBzKTsKLSAgfQotICBnc3RfY2Fwc191bnJlZiAodGNhcHMpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJJbnRlcnNlY3RlZCBzcmNwYWQtcGVlcmNhcHMgYW5kIHRlbXBsYXRlIGNhcHM6ICUiCi0gICAgICBHU1RfUFRSX0ZPUk1BVCwgb3RoZXJjYXBzKTsKLQotICBjbGVhcl9jYXBzIChvdGhlcmNhcHMsIFRSVUUpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnYsIEdTVF9UWVBFX0NBUFMpOwotCi0gIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NpbmtfcGFkcyAoR1NUX0VMRU1FTlQgKG11eCkpOwotICBkbyB7Ci0gICAgZ3N0X3ZhbHVlX3NldF9jYXBzICgmdiwgb3RoZXJjYXBzKTsKLSAgICByZXMgPSBnc3RfaXRlcmF0b3JfZm9sZCAoaXRlciwgc2FtZV9jbG9ja19yYXRlX2ZvbGQsICZ2LCBwYWQpOwotICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMgKGl0ZXIpOwotICB9IHdoaWxlIChyZXMgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gIGdzdF9pdGVyYXRvcl9mcmVlIChpdGVyKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICgoR3N0Q2FwcyAqKSBnc3RfdmFsdWVfZ2V0X2NhcHMgKCZ2KSwgb3RoZXJjYXBzKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0gIGdzdF9jYXBzX3VucmVmIChvdGhlcmNhcHMpOwotCi0gIGlmIChyZXMgPT0gR1NUX0lURVJBVE9SX0VSUk9SKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIH0KLQotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfbXV4X3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RSVFBNdXggKm11eCA9IEdTVF9SVFBfTVVYIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKmNhcHM7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiUmVjZWl2ZWQgY2Fwcy1xdWVyeSB3aXRoIGZpbHRlci1jYXBzOiAlIgotICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBmaWx0ZXIpOwotICAgICAgY2FwcyA9IGdzdF9ydHBfbXV4X2dldGNhcHMgKHBhZCwgbXV4LCBmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKG11eCwgIkFuc3dlcmluZyBjYXBzLXF1ZXJ5IHdpdGggY2FwczogJSIKLSAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX211eF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UlRQTXV4ICpydHBfbXV4OwotCi0gIHJ0cF9tdXggPSBHU1RfUlRQX01VWCAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cF9tdXgpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVElNRVNUQU1QX09GRlNFVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHJ0cF9tdXgtPnRzX29mZnNldCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VRTlVNX09GRlNFVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHJ0cF9tdXgtPnNlcW51bV9vZmZzZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NFUU5VTToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBfbXV4LT5zZXFudW0pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NTUkM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRwX211eC0+c3NyYyk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBfbXV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXV4X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBNdXggKnJ0cF9tdXg7Ci0KLSAgcnRwX211eCA9IEdTVF9SVFBfTVVYIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9USU1FU1RBTVBfT0ZGU0VUOgotICAgICAgcnRwX211eC0+dHNfb2Zmc2V0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VRTlVNX09GRlNFVDoKLSAgICAgIHJ0cF9tdXgtPnNlcW51bV9vZmZzZXQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TU1JDOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHBfbXV4KTsKLSAgICAgIHJ0cF9tdXgtPnNzcmMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBydHBfbXV4LT5jdXJyZW50X3NzcmMgPSBydHBfbXV4LT5zc3JjOwotICAgICAgcnRwX211eC0+aGF2ZV9zc3JjID0gVFJVRTsKLSAgICAgIHJ0cF9tdXgtPnNzcmNfcmFuZG9tID0gRkFMU0U7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwX211eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9tdXhfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJUUE11eCAqbXV4ID0gR1NUX1JUUF9NVVggKHBhcmVudCk7Ci0gIGdib29sZWFuIGlzX3BhZDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiUmVjZWl2ZWQgY2Fwcy1ldmVudCB3aXRoIGNhcHM6ICUiCi0gICAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgICAgcmV0ID0gZ3N0X3J0cF9tdXhfc2V0Y2FwcyAocGFkLCBtdXgsIGNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9GTFVTSF9TVE9QOgotICAgIHsKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAobXV4KTsKLSAgICAgIG11eC0+bGFzdF9zdG9wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgR3N0UlRQTXV4UGFkUHJpdmF0ZSAqcGFkcHJpdjsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChtdXgpOwotICAgICAgcGFkcHJpdiA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLQotICAgICAgaWYgKHBhZHByaXYpIHsKLSAgICAgICAgZ3N0X2V2ZW50X2NvcHlfc2VnbWVudCAoZXZlbnQsICZwYWRwcml2LT5zZWdtZW50KTsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobXV4KTsKLSAgaXNfcGFkID0gKHBhZCA9PSBtdXgtPmxhc3RfcGFkKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG11eCk7Ci0KLSAgaWYgKGlzX3BhZCkgewotICAgIHJldHVybiBnc3RfcGFkX3B1c2hfZXZlbnQgKG11eC0+c3JjcGFkLCBldmVudCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfbXV4X3JlYWR5X3RvX3BhdXNlZCAoR3N0UlRQTXV4ICogcnRwX211eCkKLXsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cF9tdXgpOwotCi0gIGdfY2xlYXJfb2JqZWN0ICgmcnRwX211eC0+bGFzdF9wYWQpOwotICBydHBfbXV4LT5zZW5kX3N0cmVhbV9zdGFydCA9IFRSVUU7Ci0KLSAgaWYgKHJ0cF9tdXgtPnNlcW51bV9vZmZzZXQgPT0gLTEpCi0gICAgcnRwX211eC0+c2VxbnVtX2Jhc2UgPSBnX3JhbmRvbV9pbnRfcmFuZ2UgKDAsIEdfTUFYVUlOVDE2KTsKLSAgZWxzZQotICAgIHJ0cF9tdXgtPnNlcW51bV9iYXNlID0gcnRwX211eC0+c2VxbnVtX29mZnNldDsKLSAgcnRwX211eC0+c2VxbnVtID0gcnRwX211eC0+c2VxbnVtX2Jhc2U7Ci0KLSAgaWYgKHJ0cF9tdXgtPnRzX29mZnNldCA9PSAtMSkKLSAgICBydHBfbXV4LT50c19iYXNlID0gZ19yYW5kb21faW50ICgpOwotICBlbHNlCi0gICAgcnRwX211eC0+dHNfYmFzZSA9IHJ0cF9tdXgtPnRzX29mZnNldDsKLQotICBydHBfbXV4LT5sYXN0X3N0b3AgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIGlmIChydHBfbXV4LT5zc3JjX3JhbmRvbSkgewotICAgIHJ0cF9tdXgtPmhhdmVfc3NyYyA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIHJ0cF9tdXgtPmN1cnJlbnRfc3NyYyA9IHJ0cF9tdXgtPnNzcmM7Ci0gICAgcnRwX211eC0+aGF2ZV9zc3JjID0gVFJVRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cF9tdXgsICJzZXQgdGltZXN0YW1wLW9mZnNldCB0byAldSIsIHJ0cF9tdXgtPnRzX2Jhc2UpOwotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBfbXV4KTsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX211eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RSVFBNdXggKnJ0cF9tdXg7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBydHBfbXV4ID0gR1NUX1JUUF9NVVggKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBnc3RfcnRwX211eF9yZWFkeV90b19wYXVzZWQgKHJ0cF9tdXgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9ydHBfbXV4X3BhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwKLSAgICAgIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnX2NsZWFyX29iamVjdCAoJnJ0cF9tdXgtPmxhc3RfcGFkKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRwX211eF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3J0cF9tdXhfZGVidWcsICJydHBtdXgiLCAwLCAicnRwIG11eGVyIik7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBtdXgiLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfUlRQX01VWCk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBtdXguaCBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGU5ZjQxLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cG11eC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyogUlRQIG11eGVyIGVsZW1lbnQgZm9yIEdTdHJlYW1lcgotICoKLSAqIGdzdHJ0cG11eC5oOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uLgotICogICBDb250YWN0OiBaZWVzaGFuIEFsaSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfTVVYX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfTVVYX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX01VWCAoZ3N0X3J0cF9tdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9NVVgob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX01VWCwgR3N0UlRQTXV4KSkKLSNkZWZpbmUgR1NUX1JUUF9NVVhfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NVVgsIEdzdFJUUE11eENsYXNzKSkKLSNkZWZpbmUgR1NUX1JUUF9NVVhfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9SVFBfTVVYLCBHc3RSVFBNdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfTVVYKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9NVVgpKQotI2RlZmluZSBHU1RfSVNfUlRQX01VWF9DTEFTUyhvYmopIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9NVVgpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUE11eCBHc3RSVFBNdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQTXV4Q2xhc3MgR3N0UlRQTXV4Q2xhc3M7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ2Jvb2xlYW4gaGF2ZV90aW1lc3RhbXBfb2Zmc2V0OwotICBndWludCB0aW1lc3RhbXBfb2Zmc2V0OwotCi0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnYm9vbGVhbiBwcmlvcml0eTsKLX0gR3N0UlRQTXV4UGFkUHJpdmF0ZTsKLQotCi0vKioKLSAqIEdzdFJUUE11eDoKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RSVFBNdXggc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFJUUE11eAotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyogcGFkICovCi0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIGd1aW50MzIgdHNfYmFzZTsKLSAgZ3VpbnQxNiBzZXFudW1fYmFzZTsKLQotICBnaW50MzIgdHNfb2Zmc2V0OwotICBnaW50MTYgc2VxbnVtX29mZnNldDsKLSAgZ3VpbnQxNiBzZXFudW07ICAgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IG9iamVjdCBsb2NrICovCi0gIGd1aW50IHNzcmM7Ci0gIGd1aW50IGN1cnJlbnRfc3NyYzsKLSAgZ2Jvb2xlYW4gaGF2ZV9zc3JjOwotICBnYm9vbGVhbiBzc3JjX3JhbmRvbTsKLQotICBHc3RQYWQgKmxhc3RfcGFkOyAvKiBwcm90ZWN0ZWQgYnkgb2JqZWN0IGxvY2sgKi8KLQotICBHc3RDbG9ja1RpbWUgbGFzdF9zdG9wOwotICBnYm9vbGVhbiBzZW5kX3N0cmVhbV9zdGFydDsKLX07Ci0KLXN0cnVjdCBfR3N0UlRQTXV4Q2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICBnYm9vbGVhbiAoKmFjY2VwdF9idWZmZXJfbG9ja2VkKSAoR3N0UlRQTXV4ICpydHBfbXV4LAotICAgICAgR3N0UlRQTXV4UGFkUHJpdmF0ZSAqIHBhZHByaXYsIEdzdFJUUEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLSAgZ2Jvb2xlYW4gKCpzcmNfZXZlbnQpIChHc3RSVFBNdXggKnJ0cF9tdXgsIEdzdEV2ZW50ICpldmVudCk7Ci19OwotCi0KLUdUeXBlIGdzdF9ydHBfbXV4X2dldF90eXBlICh2b2lkKTsKLWdib29sZWFuIGdzdF9ydHBfbXV4X3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9NVVhfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmMgYi9nc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwMjBhNDQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcHRkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQ2ICswLDAgQEAKLS8qIAotICogUlRQIERlbXV4IGVsZW1lbnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24uCi0gKiBAYXV0aG9yIEthaSBWZWhtYW5lbiA8a2FpLnZlaG1hbmVuQG5va2lhLmNvbT4KLSAqCi0gKiBMb29zZWx5IGJhc2VkIG9uIEdTdHJlYW1lciBnc3RkZWNvZGViaW4KLSAqIENvcHlyaWdodCAoQykgPDIwMDQ+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwcHRkZW11eAotICoKLSAqIHJ0cHB0ZGVtdXggYWN0cyBhcyBhIGRlbXV4ZXIgZm9yIFJUUCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBwYXlsb2FkIHR5cGUgb2YKLSAqIHRoZSBwYWNrZXRzLiBJdHMgbWFpbiBwdXJwb3NlIGlzIHRvIGFsbG93IGFuIGFwcGxpY2F0aW9uIHRvIGVhc2lseSByZWNlaXZlCi0gKiBhbmQgZGVjb2RlIGFuIFJUUCBzdHJlYW0gd2l0aCBtdWx0aXBsZSBwYXlsb2FkIHR5cGVzLgotICogCi0gKiBGb3IgZWFjaCBwYXlsb2FkIHR5cGUgdGhhdCBpcyBkZXRlY3RlZCwgYSBuZXcgcGFkIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlCi0gKiAjR3N0UnRwUHREZW11eDo6bmV3LXBheWxvYWQtdHlwZSBzaWduYWwgd2lsbCBiZSBlbWl0dGVkLiBXaGVuIHRoZSBwYXlsb2FkIGZvcgotICogdGhlIFJUUCBzdHJlYW0gY2hhbmdlcywgdGhlICNHc3RSdHBQdERlbXV4OjpwYXlsb2FkLXR5cGUtY2hhbmdlIHNpZ25hbCB3aWxsIGJlCi0gKiBlbWl0dGVkLgotICogCi0gKiBUaGUgZWxlbWVudCB3aWxsIHRyeSB0byBzZXQgY29tcGxldGUgYW5kIHVuaXF1ZSBhcHBsaWNhdGlvbi94LXJ0cCBjYXBzCi0gKiBvbiB0aGUgb3V0cHV0IHBhZHMgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiB0aGUgI0dzdFJ0cFB0RGVtdXg6OnJlcXVlc3QtcHQtbWFwCi0gKiBzaWduYWwuCi0gKiAKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdWRwc3JjIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwIiAhIHJ0cHB0ZGVtdXggISBmYWtlc2luawotICogXXwgVGFrZXMgYW4gUlRQIHN0cmVhbSBhbmQgc2VuZCB0aGUgUlRQIHBhY2tldHMgd2l0aCB0aGUgZmlyc3QgZGV0ZWN0ZWQKLSAqIHBheWxvYWQgdHlwZSB0byBmYWtlc2luaywgZGlzY2FyZGluZyB0aGUgb3RoZXIgcGF5bG9hZCB0eXBlcy4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotLyoKLSAqIENvbnRyaWJ1dG9yczoKLSAqIEFuZHJlIE1vcmVpcmEgTWFnYWxoYWVzIDxhbmRyZS5tYWdhbGhhZXNAaW5kdC5vcmcuYnI+Ci0gKi8KLS8qCi0gKiBTdGF0dXM6Ci0gKiAgLSB3b3JrcyB3aXRoIHRoZSB0ZXN0X3J0cGRlbXV4LmMgdG9vbAotICoKLSAqIENoZWNrOgotICogIC0gaXMgZW1pdHRpbmcgYSBzaWduYWwgZW5vdWdoLCBvciBzaG91bGQgd2UKLSAqICAgIHVzZSBHc3RFdmVudCB0byBub3RpZnkgZG93bnN0cmVhbSBlbGVtZW50cwotICogICAgb2YgdGhlIG5ldyBwYWNrZXQuLi4gbm8/Ci0gKgotICogTm90ZXM6Ci0gKiAgLSBlbWl0cyBldmVudCBib3RoIGZvciBuZXcgUFRzLCBhbmQgd2hlbmV2ZXIKLSAqICAgIGEgUFQgaXMgY2hhbmdlZAotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwcHRkZW11eC5oIgotCi0vKiBnZW5lcmljIHRlbXBsYXRlcyAqLwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cF9wdF9kZW11eF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwX3B0X2RlbXV4X3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyY18ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIgInBheWxvYWQgPSAoaW50KSBbIDAsIDI1NSBdIikKLSAgICApOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX3B0X2RlbXV4X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9ydHBfcHRfZGVtdXhfZGVidWcKLQotLyoKLSAqIEl0ZW0gZm9yIHN0b3JpbmcgR3N0UGFkPC0+cHQgcGFpcnMuCi0gKi8KLXN0cnVjdCBfR3N0UnRwUHREZW11eFBhZAotewotICBHc3RQYWQgKnBhZDsgICAgICAgIC8qKjwgcG9pbnRlciB0byB0aGUgYWN0dWFsIHBhZCAqLwotICBnaW50IHB0OyAgICAgICAgICAgICAvKio8IFJUUCBwYXlsb2FkLXR5cGUgYXR0YWNoZWQgdG8gcGFkICovCi0gIGdib29sZWFuIG5ld2NhcHM7Ci19OwotCi0vKiBzaWduYWxzICovCi1lbnVtCi17Ci0gIFNJR05BTF9SRVFVRVNUX1BUX01BUCwKLSAgU0lHTkFMX05FV19QQVlMT0FEX1RZUEUsCi0gIFNJR05BTF9QQVlMT0FEX1RZUEVfQ0hBTkdFLAotICBTSUdOQUxfQ0xFQVJfUFRfTUFQLAotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBnc3RfcnRwX3B0X2RlbXV4X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFB0RGVtdXgsIGdzdF9ydHBfcHRfZGVtdXgsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3B0X2RlbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9wdF9kZW11eF9yZWxlYXNlIChHc3RSdHBQdERlbXV4ICogcHRkZW11eCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9wdF9kZW11eF9zZXR1cCAoR3N0UnRwUHREZW11eCAqIHB0ZGVtdXgpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9wdF9kZW11eF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfcHRfZGVtdXhfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9wdF9kZW11eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9wdF9kZW11eF9jbGVhcl9wdF9tYXAgKEdzdFJ0cFB0RGVtdXggKiBydHBkZW11eCk7Ci0KLXN0YXRpYyBHc3RQYWQgKmZpbmRfcGFkX2Zvcl9wdCAoR3N0UnRwUHREZW11eCAqIHJ0cGRlbXV4LCBndWludDggcHQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9wdF9kZW11eF9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi0KLXN0YXRpYyBndWludCBnc3RfcnRwX3B0X2RlbXV4X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3B0X2RlbXV4X2NsYXNzX2luaXQgKEdzdFJ0cFB0RGVtdXhDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3Rfa2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9rbGFzczsKLQotICBnb2JqZWN0X2tsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9rbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cFB0RGVtdXg6OnJlcXVlc3QtcHQtbWFwOgotICAgKiBAZGVtdXg6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAcHQ6IHRoZSBwYXlsb2FkIHR5cGUKLSAgICoKLSAgICogUmVxdWVzdCB0aGUgcGF5bG9hZCB0eXBlIGFzICNHc3RDYXBzIGZvciBAcHQuCi0gICAqLwotICBnc3RfcnRwX3B0X2RlbXV4X3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUFRfTUFQXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJyZXF1ZXN0LXB0LW1hcCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBQdERlbXV4Q2xhc3MsIHJlcXVlc3RfcHRfbWFwKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHU1RfVFlQRV9DQVBTLCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cFB0RGVtdXg6Om5ldy1wYXlsb2FkLXR5cGU6Ci0gICAqIEBkZW11eDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBwdDogdGhlIHBheWxvYWQgdHlwZQotICAgKiBAcGFkOiB0aGUgcGFkIHdpdGggdGhlIG5ldyBwYXlsb2FkCi0gICAqCi0gICAqIEVtaXRlZCB3aGVuIGEgbmV3IHBheWxvYWQgdHlwZSBwYWQgaGFzIGJlZW4gY3JlYXRlZCBpbiBAZGVtdXguCi0gICAqLwotICBnc3RfcnRwX3B0X2RlbXV4X3NpZ25hbHNbU0lHTkFMX05FV19QQVlMT0FEX1RZUEVdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm5ldy1wYXlsb2FkLXR5cGUiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwUHREZW11eENsYXNzLCBuZXdfcGF5bG9hZF90eXBlKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHU1RfVFlQRV9QQUQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBQdERlbXV4OjpwYXlsb2FkLXR5cGUtY2hhbmdlOgotICAgKiBAZGVtdXg6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAcHQ6IHRoZSBuZXcgcGF5bG9hZCB0eXBlCi0gICAqCi0gICAqIEVtaXRlZCB3aGVuIHRoZSBwYXlsb2FkIHR5cGUgY2hhbmdlZC4KLSAgICovCi0gIGdzdF9ydHBfcHRfZGVtdXhfc2lnbmFsc1tTSUdOQUxfUEFZTE9BRF9UWVBFX0NIQU5HRV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgicGF5bG9hZC10eXBlLWNoYW5nZSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBQdERlbXV4Q2xhc3MsCi0gICAgICAgICAgcGF5bG9hZF90eXBlX2NoYW5nZSksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULAotICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKLQotICAvKioKLSAgICogR3N0UnRwUHREZW11eDo6Y2xlYXItcHQtbWFwOgotICAgKiBAZGVtdXg6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKgotICAgKiBUaGUgYXBwbGljYXRpb24gY2FuIGNhbGwgdGhpcyBzaWduYWwgdG8gaW5zdHJ1Y3QgdGhlIGVsZW1lbnQgdG8gZGlzY2FyZCB0aGUKLSAgICogY3VycmVudGx5IGNhY2hlZCBwYXlsb2FkIHR5cGUgbWFwLgotICAgKi8KLSAgZ3N0X3J0cF9wdF9kZW11eF9zaWduYWxzW1NJR05BTF9DTEVBUl9QVF9NQVBdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImNsZWFyLXB0LW1hcCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9BQ1RJT04gfCBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBQdERlbXV4Q2xhc3MsCi0gICAgICAgICAgY2xlYXJfcHRfbWFwKSwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCi0gICAgICBHX1RZUEVfTk9ORSwgMCwgR19UWVBFX05PTkUpOwotCi0gIGdvYmplY3Rfa2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9wdF9kZW11eF9maW5hbGl6ZTsKLQotICBnc3RlbGVtZW50X2tsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcHRfZGVtdXhfY2hhbmdlX3N0YXRlKTsKLQotICBrbGFzcy0+Y2xlYXJfcHRfbWFwID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcHRfZGVtdXhfY2xlYXJfcHRfbWFwKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9rbGFzcywKLSAgICAgICZydHBfcHRfZGVtdXhfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2tsYXNzLAotICAgICAgJnJ0cF9wdF9kZW11eF9zcmNfdGVtcGxhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfa2xhc3MsICJSVFAgRGVtdXgiLAotICAgICAgIkRlbXV4L05ldHdvcmsvUlRQIiwKLSAgICAgICJQYXJzZXMgY29kZWMgc3RyZWFtcyB0cmFuc21pdHRlZCBpbiB0aGUgc2FtZSBSVFAgc2Vzc2lvbiIsCi0gICAgICAiS2FpIFZlaG1hbmVuIDxrYWkudmVobWFuZW5Abm9raWEuY29tPiIpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfcnRwX3B0X2RlbXV4X2RlYnVnLAotICAgICAgInJ0cHB0ZGVtdXgiLCAwLCAiUlRQIGNvZGVjIGRlbXV4ZXIiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcHRfZGVtdXhfaW5pdCAoR3N0UnRwUHREZW11eCAqIHB0ZGVtdXgpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3MgPSBHU1RfRUxFTUVOVF9HRVRfQ0xBU1MgKHB0ZGVtdXgpOwotCi0gIHB0ZGVtdXgtPnNpbmsgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsCi0gICAgICAgICAgInNpbmsiKSwgInNpbmsiKTsKLSAgZ19hc3NlcnQgKHB0ZGVtdXgtPnNpbmsgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHB0ZGVtdXgtPnNpbmssIGdzdF9ydHBfcHRfZGVtdXhfY2hhaW4pOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocHRkZW11eC0+c2luaywgZ3N0X3J0cF9wdF9kZW11eF9zaW5rX2V2ZW50KTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocHRkZW11eCksIHB0ZGVtdXgtPnNpbmspOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9wdF9kZW11eF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgZ3N0X3J0cF9wdF9kZW11eF9yZWxlYXNlIChHU1RfUlRQX1BUX0RFTVVYIChvYmplY3QpKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9ydHBfcHRfZGVtdXhfZ2V0X2NhcHMgKEdzdFJ0cFB0RGVtdXggKiBydHBkZW11eCwgZ3VpbnQgcHQpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdWYWx1ZSByZXQgPSB7IDAgfTsKLSAgR1ZhbHVlIGFyZ3NbMl0gPSB7IHswfSwgezB9IH07Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgY2FwcyAqLwotICBnX3ZhbHVlX2luaXQgKCZhcmdzWzBdLCBHU1RfVFlQRV9FTEVNRU5UKTsKLSAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmYXJnc1swXSwgcnRwZGVtdXgpOwotICBnX3ZhbHVlX2luaXQgKCZhcmdzWzFdLCBHX1RZUEVfVUlOVCk7Ci0gIGdfdmFsdWVfc2V0X3VpbnQgKCZhcmdzWzFdLCBwdCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmcmV0LCBHU1RfVFlQRV9DQVBTKTsKLSAgZ192YWx1ZV9zZXRfYm94ZWQgKCZyZXQsIE5VTEwpOwotCi0gIGdfc2lnbmFsX2VtaXR2IChhcmdzLCBnc3RfcnRwX3B0X2RlbXV4X3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUFRfTUFQXSwgMCwKLSAgICAgICZyZXQpOwotCi0gIGdfdmFsdWVfdW5zZXQgKCZhcmdzWzBdKTsKLSAgZ192YWx1ZV91bnNldCAoJmFyZ3NbMV0pOwotICBjYXBzID0gZ192YWx1ZV9kdXBfYm94ZWQgKCZyZXQpOwotICBnX3ZhbHVlX3Vuc2V0ICgmcmV0KTsKLSAgaWYgKGNhcHMgPT0gTlVMTCkgewotICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHJ0cGRlbXV4LT5zaW5rKTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoInB0ICVkLCBnb3QgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgcHQsIGNhcHMpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9wdF9kZW11eF9jbGVhcl9wdF9tYXAgKEdzdFJ0cFB0RGVtdXggKiBydHBkZW11eCkKLXsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnRwZGVtdXgpOwotICBHU1RfREVCVUcgKCJjbGVhcmluZyBwdCBtYXAiKTsKLSAgZm9yICh3YWxrID0gcnRwZGVtdXgtPnNyY3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UnRwUHREZW11eFBhZCAqcGFkID0gd2Fsay0+ZGF0YTsKLQotICAgIHBhZC0+bmV3Y2FwcyA9IFRSVUU7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cGRlbXV4KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1uZWVkX2NhcHNfZm9yX3B0IChHc3RSdHBQdERlbXV4ICogcnRwZGVtdXgsIGd1aW50OCBwdCkKLXsKLSAgR1NMaXN0ICp3YWxrOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cGRlbXV4KTsKLSAgZm9yICh3YWxrID0gcnRwZGVtdXgtPnNyY3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UnRwUHREZW11eFBhZCAqcGFkID0gd2Fsay0+ZGF0YTsKLQotICAgIGlmIChwYWQtPnB0ID09IHB0KSB7Ci0gICAgICByZXQgPSBwYWQtPm5ld2NhcHM7Ci0gICAgfQotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBkZW11eCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgdm9pZAotY2xlYXJfbmV3Y2Fwc19mb3JfcHQgKEdzdFJ0cFB0RGVtdXggKiBydHBkZW11eCwgZ3VpbnQ4IHB0KQotewotICBHU0xpc3QgKndhbGs7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChydHBkZW11eCk7Ci0gIGZvciAod2FsayA9IHJ0cGRlbXV4LT5zcmNwYWRzOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJ0cFB0RGVtdXhQYWQgKnBhZCA9IHdhbGstPmRhdGE7Ci0KLSAgICBpZiAocGFkLT5wdCA9PSBwdCkgewotICAgICAgcGFkLT5uZXdjYXBzID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cGRlbXV4KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3J3YXJkX3N0aWNreV9ldmVudHMgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpzcmNwYWQgPSBHU1RfUEFEX0NBU1QgKHVzZXJfZGF0YSk7Ci0KLSAgLyogU3RyZWFtIHN0YXJ0IGFuZCBjYXBzIGhhdmUgYWxyZWFkeSBiZWVuIHB1c2hlZCAqLwotICBpZiAoR1NUX0VWRU5UX1RZUEUgKCpldmVudCkgPj0gR1NUX0VWRU5UX1NFR01FTlQpCi0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9yZWYgKCpldmVudCkpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9wdF9kZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0UnRwUHREZW11eCAqcnRwZGVtdXg7Ci0gIGd1aW50OCBwdDsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwgfTsKLQotICBydHBkZW11eCA9IEdTVF9SVFBfUFRfREVNVVggKHBhcmVudCk7Ci0KLSAgaWYgKCFnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9SRUFELCAmcnRwKSkKLSAgICBnb3RvIGludmFsaWRfYnVmZmVyOwotCi0gIHB0ID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfdHlwZSAoJnJ0cCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBkZW11eCwgInJlY2VpdmVkIGJ1ZmZlciBmb3IgcHQgJWQiLCBwdCk7Ci0KLSAgc3JjcGFkID0gZmluZF9wYWRfZm9yX3B0IChydHBkZW11eCwgcHQpOwotICBpZiAoc3JjcGFkID09IE5VTEwpIHsKLSAgICAvKiBuZXcgUFQsIGNyZWF0ZSBhIHNyYyBwYWQgKi8KLSAgICBHc3RSdHBQdERlbXV4UGFkICpydHBkZW11eHBhZDsKLSAgICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzOwotICAgIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLSAgICBnY2hhciAqcGFkbmFtZTsKLQotICAgIGNhcHMgPSBnc3RfcnRwX3B0X2RlbXV4X2dldF9jYXBzIChydHBkZW11eCwgcHQpOwotICAgIGlmICghY2FwcykKLSAgICAgIGdvdG8gbm9fY2FwczsKLQotICAgIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChydHBkZW11eCk7Ci0gICAgdGVtcGwgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywgInNyY18ldSIpOwotICAgIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzcmNfJXUiLCBwdCk7Ci0gICAgc3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIHBhZG5hbWUpOwotICAgIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHNyY3BhZCk7Ci0gICAgZ19mcmVlIChwYWRuYW1lKTsKLSAgICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc3JjcGFkLCBnc3RfcnRwX3B0X2RlbXV4X3NyY19ldmVudCk7Ci0KLSAgICBHU1RfREVCVUcgKCJBZGRpbmcgcHQ9JWQgdG8gdGhlIGxpc3QuIiwgcHQpOwotICAgIHJ0cGRlbXV4cGFkID0gZ19zbGljZV9uZXcwIChHc3RSdHBQdERlbXV4UGFkKTsKLSAgICBydHBkZW11eHBhZC0+cHQgPSBwdDsKLSAgICBydHBkZW11eHBhZC0+bmV3Y2FwcyA9IEZBTFNFOwotICAgIHJ0cGRlbXV4cGFkLT5wYWQgPSBzcmNwYWQ7Ci0gICAgZ3N0X29iamVjdF9yZWYgKHNyY3BhZCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChydHBkZW11eCk7Ci0gICAgcnRwZGVtdXgtPnNyY3BhZHMgPSBnX3NsaXN0X2FwcGVuZCAocnRwZGVtdXgtPnNyY3BhZHMsIHJ0cGRlbXV4cGFkKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwZGVtdXgpOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIFRSVUUpOwotCi0KLSAgICAvKiBGaXJzdCBwdXNoIHRoZSBzdHJlYW0tc3RhcnQgZXZlbnQsIGl0IG11c3QgYWx3YXlzIGNvbWUgZmlyc3QgKi8KLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwKLSAgICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50IChydHBkZW11eC0+c2luaywgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpOwotCi0gICAgLyogVGhlbiBjYXBzIGV2ZW50IGlzIHNlbnQgKi8KLSAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgInBheWxvYWQiLCBHX1RZUEVfSU5ULCBwdCwgTlVMTCk7Ci0gICAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjcGFkLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICAvKiBGaXJzdCBzdGlja3kgZXZlbnRzIG9uIHNpbmsgcGFkIGFyZSBmb3J3YXJkZWQgdG8gdGhlIG5ldyBzcmMgcGFkICovCi0gICAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHJ0cGRlbXV4LT5zaW5rLCBmb3J3YXJkX3N0aWNreV9ldmVudHMsCi0gICAgICAgIHNyY3BhZCk7Ci0KLSAgICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBkZW11eCksIHNyY3BhZCk7Ci0KLSAgICBHU1RfREVCVUcgKCJlbWl0dGluZyBuZXctcGF5bG9hZC10eXBlIGZvciBwdCAlZCIsIHB0KTsKLSAgICBnX3NpZ25hbF9lbWl0IChHX09CSkVDVCAocnRwZGVtdXgpLAotICAgICAgICBnc3RfcnRwX3B0X2RlbXV4X3NpZ25hbHNbU0lHTkFMX05FV19QQVlMT0FEX1RZUEVdLCAwLCBwdCwgc3JjcGFkKTsKLSAgfQotCi0gIGlmIChwdCAhPSBydHBkZW11eC0+bGFzdF9wdCkgewotICAgIGdpbnQgZW1pdF9wdCA9IHB0OwotCi0gICAgLyogb3VyIG93biBzaWduYWwgd2l0aCBhbiBleHRyYSBmbGFnIHRoYXQgdGhpcyBpcyB0aGUgb25seSBwYWQgKi8KLSAgICBydHBkZW11eC0+bGFzdF9wdCA9IHB0OwotICAgIEdTVF9ERUJVRyAoImVtaXR0aW5nIHBheWxvYWQtdHlwZS1jaGFuZ2VkIGZvciBwdCAlZCIsIGVtaXRfcHQpOwotICAgIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChydHBkZW11eCksCi0gICAgICAgIGdzdF9ydHBfcHRfZGVtdXhfc2lnbmFsc1tTSUdOQUxfUEFZTE9BRF9UWVBFX0NIQU5HRV0sIDAsIGVtaXRfcHQpOwotICB9Ci0KLSAgd2hpbGUgKG5lZWRfY2Fwc19mb3JfcHQgKHJ0cGRlbXV4LCBwdCkpIHsKLSAgICBHU1RfREVCVUcgKCJuZWVkIG5ldyBjYXBzIGZvciAlZCIsIHB0KTsKLSAgICBjYXBzID0gZ3N0X3J0cF9wdF9kZW11eF9nZXRfY2FwcyAocnRwZGVtdXgsIHB0KTsKLSAgICBpZiAoIWNhcHMpCi0gICAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgICBjbGVhcl9uZXdjYXBzX2Zvcl9wdCAocnRwZGVtdXgsIHB0KTsKLQotICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChjYXBzKTsKLSAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIHB0LCBOVUxMKTsKLSAgICBnc3RfcGFkX3NldF9jYXBzIChzcmNwYWQsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIC8qIHB1c2ggdG8gc3JjcGFkICovCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWYpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWludmFsaWRfYnVmZmVyOgotICB7Ci0gICAgLyogdGhpcyBzaG91bGQgbm90IGJlIGZhdGFsICovCi0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZGVtdXgsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwKLSAgICAgICAgKCJEcm9wcGluZyBpbnZhbGlkIFJUUCBwYXlsb2FkIikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1ub19jYXBzOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHJ0cGRlbXV4LCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBnZXQgY2FwcyBmb3IgcGF5bG9hZCIpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIGlmIChzcmNwYWQpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgR3N0UGFkICoKLWZpbmRfcGFkX2Zvcl9wdCAoR3N0UnRwUHREZW11eCAqIHJ0cGRlbXV4LCBndWludDggcHQpCi17Ci0gIEdzdFBhZCAqcmVzcGFkID0gTlVMTDsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnRwZGVtdXgpOwotICBmb3IgKHdhbGsgPSBydHBkZW11eC0+c3JjcGFkczsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSdHBQdERlbXV4UGFkICpwYWQgPSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKHBhZC0+cHQgPT0gcHQpIHsKLSAgICAgIHJlc3BhZCA9IGdzdF9vYmplY3RfcmVmIChwYWQtPnBhZCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0cGRlbXV4KTsKLQotICByZXR1cm4gcmVzcGFkOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfcHRfZGVtdXhfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJ0cFB0RGVtdXggKnJ0cGRlbXV4OwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBydHBkZW11eCA9IEdTVF9SVFBfUFRfREVNVVggKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBnc3RfcnRwX3B0X2RlbXV4X2NsZWFyX3B0X21hcCAocnRwZGVtdXgpOwotICAgICAgLyogZG9uJ3QgZm9yd2FyZCB0aGUgZXZlbnQsIHdlIGNsZWFyZWQgdGhlIHB0bWFwIGFuZCBvbiB0aGUgbmV4dCBidWZmZXIgd2UKLSAgICAgICAqIHdpbGwgYWRkIHRoZSBwdCB0byB0aGUgY2FwcyBhbmQgcHVzaCBhIG5ldyBjYXBzIGV2ZW50ICovCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU06Ci0gICAgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICBzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJHc3RSVFBQYWNrZXRMb3N0IikpIHsKLSAgICAgICAgR3N0UGFkICpzcmNwYWQgPSBmaW5kX3BhZF9mb3JfcHQgKHJ0cGRlbXV4LCBydHBkZW11eC0+bGFzdF9wdCk7Ci0KLSAgICAgICAgaWYgKHNyY3BhZCkgewotICAgICAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBldmVudCk7Ci0gICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgICAgfQotCi0gICAgICB9IGVsc2UgewotICAgICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfcHRfZGVtdXhfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwUHREZW11eCAqZGVtdXg7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLQotICBkZW11eCA9IEdTVF9SVFBfUFRfREVNVVggKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNOgotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIOgotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9CT1RIX09PQjoKLSAgICAgIHMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgICAgaWYgKHMgJiYgIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicGF5bG9hZCIpKSB7Ci0gICAgICAgIEdTTGlzdCAqd2FsazsKLQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKGRlbXV4KTsKLSAgICAgICAgZm9yICh3YWxrID0gZGVtdXgtPnNyY3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgICAgICAgR3N0UnRwUHREZW11eFBhZCAqZHBhZCA9IChHc3RSdHBQdERlbXV4UGFkICopIHdhbGstPmRhdGE7Ci0KLSAgICAgICAgICBpZiAoZHBhZC0+cGFkID09IHBhZCkgewotICAgICAgICAgICAgR3N0U3RydWN0dXJlICp3czsKLQotICAgICAgICAgICAgZXZlbnQgPQotICAgICAgICAgICAgICAgIEdTVF9FVkVOVF9DQVNUIChnc3RfbWluaV9vYmplY3RfbWFrZV93cml0YWJsZQotICAgICAgICAgICAgICAgIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZXZlbnQpKSk7Ci0gICAgICAgICAgICB3cyA9IGdzdF9ldmVudF93cml0YWJsZV9zdHJ1Y3R1cmUgKGV2ZW50KTsKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0ICh3cywgInBheWxvYWQiLCBHX1RZUEVfVUlOVCwgZHBhZC0+cHQsIE5VTEwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChkZW11eCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotfQotCi0vKgotICogUmVzZXJ2ZXMgcmVzb3VyY2VzIGZvciB0aGUgb2JqZWN0LgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfcHRfZGVtdXhfc2V0dXAgKEdzdFJ0cFB0RGVtdXggKiBwdGRlbXV4KQotewotICBwdGRlbXV4LT5zcmNwYWRzID0gTlVMTDsKLSAgcHRkZW11eC0+bGFzdF9wdCA9IDB4RkZGRjsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAqIEZyZWUgcmVzb3VyY2VzIGZvciB0aGUgb2JqZWN0LgotICovCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9wdF9kZW11eF9yZWxlYXNlIChHc3RSdHBQdERlbXV4ICogcHRkZW11eCkKLXsKLSAgR1NMaXN0ICp0bXBwYWRzOwotICBHU0xpc3QgKndhbGs7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwdGRlbXV4KTsKLSAgdG1wcGFkcyA9IHB0ZGVtdXgtPnNyY3BhZHM7Ci0gIHB0ZGVtdXgtPnNyY3BhZHMgPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocHRkZW11eCk7Ci0KLSAgZm9yICh3YWxrID0gdG1wcGFkczsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSdHBQdERlbXV4UGFkICpwYWQgPSB3YWxrLT5kYXRhOwotCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQtPnBhZCwgRkFMU0UpOwotICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHB0ZGVtdXgpLCBwYWQtPnBhZCk7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RSdHBQdERlbXV4UGFkLCBwYWQpOwotICB9Ci0gIGdfc2xpc3RfZnJlZSAodG1wcGFkcyk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9wdF9kZW11eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFJ0cFB0RGVtdXggKnB0ZGVtdXg7Ci0KLSAgcHRkZW11eCA9IEdTVF9SVFBfUFRfREVNVVggKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgaWYgKGdzdF9ydHBfcHRfZGVtdXhfc2V0dXAgKHB0ZGVtdXgpICE9IFRSVUUpCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBnc3RfcnRwX3B0X2RlbXV4X3JlbGVhc2UgKHB0ZGVtdXgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguaCBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHB0ZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWExYmI3Zi4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBwdGRlbXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfUFRfREVNVVhfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9QVF9ERU1VWF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfUFRfREVNVVggICAgICAgICAgICAoZ3N0X3J0cF9wdF9kZW11eF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1BUX0RFTVVYKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1BUX0RFTVVYLEdzdFJ0cFB0RGVtdXgpKQotI2RlZmluZSBHU1RfUlRQX1BUX0RFTVVYX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfUFRfREVNVVgsR3N0UnRwUHREZW11eENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9QVF9ERU1VWChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9QVF9ERU1VWCkpCi0jZGVmaW5lIEdTVF9JU19SVFBfUFRfREVNVVhfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9QVF9ERU1VWCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBQdERlbXV4IEdzdFJ0cFB0RGVtdXg7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwUHREZW11eENsYXNzIEdzdFJ0cFB0RGVtdXhDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBQdERlbXV4UGFkIEdzdFJ0cFB0RGVtdXhQYWQ7Ci0KLXN0cnVjdCBfR3N0UnRwUHREZW11eAotewotICBHc3RFbGVtZW50IHBhcmVudDsgIC8qKjwgcGFyZW50IGNsYXNzICovCi0KLSAgR3N0UGFkICpzaW5rOyAgICAgICAvKio8IHRoZSBzaW5rIHBhZCAqLwotICBndWludDE2IGxhc3RfcHQ7ICAgIC8qKjwgcHQgb2YgdGhlIGxhc3QgcGFja2V0IDB4RkZGRiBpZiBub25lICovCi0gIEdTTGlzdCAqc3JjcGFkczsgICAgLyoqPCBhIGxpbmtlZCBsaXN0IG9mIEdzdFJ0cFB0RGVtdXhQYWQgb2JqZWN0cyAqLwotfTsKLQotc3RydWN0IF9Hc3RSdHBQdERlbXV4Q2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLQotICAvKiBnZXQgdGhlIGNhcHMgZm9yIHB0ICovCi0gIEdzdENhcHMqICgqcmVxdWVzdF9wdF9tYXApICAgICAgKEdzdFJ0cFB0RGVtdXggKmRlbXV4LCBndWludCBwdCk7Ci0KLSAgLyogc2lnbmFsIGVtbWl0ZWQgd2hlbiBhIG5ldyBQVCBpcyBmb3VuZCBmcm9tIHRoZSBpbmNvbWluZyBzdHJlYW0gKi8KLSAgdm9pZCAgICAgKCpuZXdfcGF5bG9hZF90eXBlKSAgICAoR3N0UnRwUHREZW11eCAqZGVtdXgsIGd1aW50IHB0LCBHc3RQYWQgKiBwYWQpOwotCi0gIC8qIHNpZ25hbCBlbWl0dGVkIHdoZW4gdGhlIHBheWxvYWQgdHlwZSBjaGFuZ2VzICovCi0gIHZvaWQgICAgICgqcGF5bG9hZF90eXBlX2NoYW5nZSkgKEdzdFJ0cFB0RGVtdXggKmRlbXV4LCBndWludCBwdCk7Ci0KLSAgdm9pZCAgICAgKCpjbGVhcl9wdF9tYXApICAgICAgICAoR3N0UnRwUHREZW11eCAqZGVtdXgpOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9wdF9kZW11eF9nZXRfdHlwZSAodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0dTVF9SVFBfUFRfREVNVVhfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhxdWV1ZS5jIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cXVldWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIxYzU0NC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhxdWV1ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLS8qIFJUUCBSZXRyYW5zbWlzc2lvbiBxdWV1ZSBlbGVtZW50IGZvciBHU3RyZWFtZXIKLSAqCi0gKiBnc3RydHBydHhxdWV1ZS5jOgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cHJ0eHF1ZXVlCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBydHhxdWV1ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX3J0eF9xdWV1ZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcnRwX3J0eF9xdWV1ZV9kZWJ1ZwotCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfVElNRSAgICAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfUEFDS0VUUyAxMDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgUFJPUF9NQVhfU0laRV9QQUNLRVRTCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpCi0gICAgKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfcnR4X3F1ZXVlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3J0eF9xdWV1ZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfcnR4X3F1ZXVlX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfcnR4X3F1ZXVlX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfcnR4X3F1ZXVlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfcnR4X3F1ZXVlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfcnR4X3F1ZXVlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UlRQUnR4UXVldWUsIGdzdF9ydHBfcnR4X3F1ZXVlLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3F1ZXVlX2NsYXNzX2luaXQgKEdzdFJUUFJ0eFF1ZXVlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ydHBfcnR4X3F1ZXVlX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9ydHhfcXVldWVfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfcnR4X3F1ZXVlX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX1NJWkVfVElNRSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibWF4LXNpemUtdGltZSIsICJNYXggU2l6ZSBUaW1lcyIsCi0gICAgICAgICAgIkFtb3VudCBvZiBtcyB0byBxdWV1ZSAoMCA9IHVubGltaXRlZCkiLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfU0laRV9USU1FLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9TSVpFX1BBQ0tFVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1zaXplLXBhY2tldHMiLCAiTWF4IFNpemUgUGFja2V0cyIsCi0gICAgICAgICAgIkFtb3VudCBvZiBwYWNrZXRzIHRvIHF1ZXVlICgwID0gdW5saW1pdGVkKSIsIDAsIEdfTUFYVUlOVCwKLSAgICAgICAgICBERUZBVUxUX01BWF9TSVpFX1BBQ0tFVFMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBSZXRyYW5zbWlzc2lvbiBRdWV1ZSIsICJDb2RlYyIsCi0gICAgICAiS2VlcCBSVFAgcGFja2V0cyBpbiBhIHF1ZXVlIGZvciByZXRyYW5zbWlzc2lvbiIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcnR4X3F1ZXVlX2NoYW5nZV9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3J0eF9xdWV1ZV9yZXNldCAoR3N0UlRQUnR4UXVldWUgKiBydHgsIGdib29sZWFuIGZ1bGwpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJnJ0eC0+bG9jayk7Ci0gIGdfcXVldWVfZm9yZWFjaCAocnR4LT5xdWV1ZSwgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKLSAgZ19xdWV1ZV9jbGVhciAocnR4LT5xdWV1ZSk7Ci0gIGdfbGlzdF9mb3JlYWNoIChydHgtPnBlbmRpbmcsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChydHgtPnBlbmRpbmcpOwotICBydHgtPnBlbmRpbmcgPSBOVUxMOwotICBnX211dGV4X3VubG9jayAoJnJ0eC0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3J0eF9xdWV1ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UlRQUnR4UXVldWUgKnJ0eCA9IEdTVF9SVFBfUlRYX1FVRVVFIChvYmplY3QpOwotCi0gIGdzdF9ydHBfcnR4X3F1ZXVlX3Jlc2V0IChydHgsIFRSVUUpOwotICBnX3F1ZXVlX2ZyZWUgKHJ0eC0+cXVldWUpOwotICBnX211dGV4X2NsZWFyICgmcnR4LT5sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3J0cF9ydHhfcXVldWVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3J0eF9xdWV1ZV9pbml0IChHc3RSVFBSdHhRdWV1ZSAqIHJ0eCkKLXsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAocnR4KTsKLQotICBydHgtPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywKLSAgICAgICAgICAic3JjIiksICJzcmMiKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAocnR4LT5zcmNwYWQpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OIChydHgtPnNyY3BhZCk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChydHgtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3J0eF9xdWV1ZV9zcmNfZXZlbnQpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHJ0eCksIHJ0eC0+c3JjcGFkKTsKLQotICBydHgtPnNpbmtwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAoZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsCi0gICAgICAgICAgInNpbmsiKSwgInNpbmsiKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAocnR4LT5zaW5rcGFkKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQUxMT0NBVElPTiAocnR4LT5zaW5rcGFkKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHJ0eC0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3J0eF9xdWV1ZV9jaGFpbikpOwotICBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uIChydHgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9ydHhfcXVldWVfY2hhaW5fbGlzdCkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocnR4KSwgcnR4LT5zaW5rcGFkKTsKLQotICBydHgtPnF1ZXVlID0gZ19xdWV1ZV9uZXcgKCk7Ci0gIGdfbXV0ZXhfaW5pdCAoJnJ0eC0+bG9jayk7Ci0KLSAgcnR4LT5tYXhfc2l6ZV90aW1lID0gREVGQVVMVF9NQVhfU0laRV9USU1FOwotICBydHgtPm1heF9zaXplX3BhY2tldHMgPSBERUZBVUxUX01BWF9TSVpFX1BBQ0tFVFM7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdFJUUFJ0eFF1ZXVlICpydHg7Ci0gIGd1aW50IHNlcW51bTsKLSAgZ2Jvb2xlYW4gZm91bmQ7Ci19IFJUWERhdGE7Ci0KLXN0YXRpYyB2b2lkCi1wdXNoX3NlcW51bSAoR3N0QnVmZmVyICogYnVmZmVyLCBSVFhEYXRhICogZGF0YSkKLXsKLSAgR3N0UlRQUnR4UXVldWUgKnJ0eCA9IGRhdGEtPnJ0eDsKLSAgR3N0UlRQQnVmZmVyIHJ0cGJ1ZmZlciA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0gIGd1aW50MTYgc2VxbnVtOwotCi0gIGlmIChkYXRhLT5mb3VuZCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKCFnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZmZlciwgR1NUX01BUF9SRUFELCAmcnRwYnVmZmVyKSkKLSAgICByZXR1cm47Ci0KLSAgc2VxbnVtID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAoJnJ0cGJ1ZmZlcik7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLQotICBpZiAoc2VxbnVtID09IGRhdGEtPnNlcW51bSkgewotICAgIGRhdGEtPmZvdW5kID0gVFJVRTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHgsICJmb3VuZCAlZCIsIHNlcW51bSk7Ci0gICAgcnR4LT5wZW5kaW5nID0gZ19saXN0X3ByZXBlbmQgKHJ0eC0+cGVuZGluZywgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9ydHhfcXVldWVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UlRQUnR4UXVldWUgKnJ0eCA9IEdTVF9SVFBfUlRYX1FVRVVFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLQotICAgICAgcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIkdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCIpKSB7Ci0gICAgICAgIGd1aW50IHNlcW51bTsKLSAgICAgICAgUlRYRGF0YSBkYXRhOwotCi0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAocywgInNlcW51bSIsICZzZXFudW0pKQotICAgICAgICAgIHNlcW51bSA9IC0xOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0eCwgInJlcXVlc3QgJWQiLCBzZXFudW0pOwotCi0gICAgICAgIGdfbXV0ZXhfbG9jayAoJnJ0eC0+bG9jayk7Ci0gICAgICAgIGRhdGEucnR4ID0gcnR4OwotICAgICAgICBkYXRhLnNlcW51bSA9IHNlcW51bTsKLSAgICAgICAgZGF0YS5mb3VuZCA9IEZBTFNFOwotICAgICAgICBnX3F1ZXVlX2ZvcmVhY2ggKHJ0eC0+cXVldWUsIChHRnVuYykgcHVzaF9zZXFudW0sICZkYXRhKTsKLSAgICAgICAgZ19tdXRleF91bmxvY2sgKCZydHgtPmxvY2spOwotCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZG9fcHVzaCAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RSVFBSdHhRdWV1ZSAqIHJ0eCkKLXsKLSAgZ3N0X3BhZF9wdXNoIChydHgtPnNyY3BhZCwgYnVmZmVyKTsKLX0KLQotLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBydHgtPmxvY2sgKi8KLXN0YXRpYyB2b2lkCi1zaHJpbmtfcXVldWUgKEdzdFJUUFJ0eFF1ZXVlICogcnR4KQotewotICBpZiAocnR4LT5tYXhfc2l6ZV9wYWNrZXRzKSB7Ci0gICAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAocnR4LT5xdWV1ZSkgPiBydHgtPm1heF9zaXplX3BhY2tldHMpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChnX3F1ZXVlX3BvcF90YWlsIChydHgtPnF1ZXVlKSk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfcnR4X3F1ZXVlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSVFBSdHhRdWV1ZSAqcnR4OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR0xpc3QgKnBlbmRpbmc7Ci0KLSAgcnR4ID0gR1NUX1JUUF9SVFhfUVVFVUUgKHBhcmVudCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmcnR4LT5sb2NrKTsKLSAgZ19xdWV1ZV9wdXNoX2hlYWQgKHJ0eC0+cXVldWUsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKTsKLSAgc2hyaW5rX3F1ZXVlIChydHgpOwotCi0gIHBlbmRpbmcgPSBydHgtPnBlbmRpbmc7Ci0gIHJ0eC0+cGVuZGluZyA9IE5VTEw7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmcnR4LT5sb2NrKTsKLQotICBwZW5kaW5nID0gZ19saXN0X3JldmVyc2UgKHBlbmRpbmcpOwotICBnX2xpc3RfZm9yZWFjaCAocGVuZGluZywgKEdGdW5jKSBkb19wdXNoLCBydHgpOwotICBnX2xpc3RfZnJlZSAocGVuZGluZyk7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChydHgtPnNyY3BhZCwgYnVmZmVyKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXB1c2hfdG9fcXVldWUgKEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50IGlkeCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHUXVldWUgKnF1ZXVlID0gdXNlcl9kYXRhOwotCi0gIGdfcXVldWVfcHVzaF9oZWFkIChxdWV1ZSwgZ3N0X2J1ZmZlcl9yZWYgKCpidWZmZXIpKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfcnR4X3F1ZXVlX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBHc3RSVFBSdHhRdWV1ZSAqcnR4OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR0xpc3QgKnBlbmRpbmc7Ci0KLSAgcnR4ID0gR1NUX1JUUF9SVFhfUVVFVUUgKHBhcmVudCk7Ci0KLSAgZ19tdXRleF9sb2NrICgmcnR4LT5sb2NrKTsKLSAgZ3N0X2J1ZmZlcl9saXN0X2ZvcmVhY2ggKGxpc3QsIHB1c2hfdG9fcXVldWUsIHJ0eC0+cXVldWUpOwotICBzaHJpbmtfcXVldWUgKHJ0eCk7Ci0KLSAgcGVuZGluZyA9IHJ0eC0+cGVuZGluZzsKLSAgcnR4LT5wZW5kaW5nID0gTlVMTDsKLSAgZ19tdXRleF91bmxvY2sgKCZydHgtPmxvY2spOwotCi0gIHBlbmRpbmcgPSBnX2xpc3RfcmV2ZXJzZSAocGVuZGluZyk7Ci0gIGdfbGlzdF9mb3JlYWNoIChwZW5kaW5nLCAoR0Z1bmMpIGRvX3B1c2gsIHJ0eCk7Ci0gIGdfbGlzdF9mcmVlIChwZW5kaW5nKTsKLQotICByZXQgPSBnc3RfcGFkX3B1c2hfbGlzdCAocnR4LT5zcmNwYWQsIGxpc3QpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3J0eF9xdWV1ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UlRQUnR4UXVldWUgKnJ0eCA9IEdTVF9SVFBfUlRYX1FVRVVFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0eC0+bWF4X3NpemVfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfUEFDS0VUUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHgtPm1heF9zaXplX3BhY2tldHMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfcXVldWVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJUUFJ0eFF1ZXVlICpydHggPSBHU1RfUlRQX1JUWF9RVUVVRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTUFYX1NJWkVfVElNRToKLSAgICAgIHJ0eC0+bWF4X3NpemVfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9QQUNLRVRTOgotICAgICAgcnR4LT5tYXhfc2l6ZV9wYWNrZXRzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfcnR4X3F1ZXVlX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0UlRQUnR4UXVldWUgKnJ0eDsKLQotICBydHggPSBHU1RfUlRQX1JUWF9RVUVVRSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0KLSAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChnc3RfcnRwX3J0eF9xdWV1ZV9wYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsCi0gICAgICB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0cF9ydHhfcXVldWVfcmVzZXQgKHJ0eCwgVFJVRSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9ydHhfcXVldWVfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfcnR4X3F1ZXVlX2RlYnVnLCAicnRwcnR4cXVldWUiLCAwLAotICAgICAgInJ0cCByZXRyYW5zbWlzc2lvbiBxdWV1ZSIpOwotCi0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwcnR4cXVldWUiLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfUlRQX1JUWF9RVUVVRSk7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhxdWV1ZS5oIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZkNjYxYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhxdWV1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogUlRQIG11eGVyIGVsZW1lbnQgZm9yIEdTdHJlYW1lcgotICoKLSAqIGdzdHJ0cG11eC5oOgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IE5va2lhIENvcnBvcmF0aW9uLgotICogICBDb250YWN0OiBaZWVzaGFuIEFsaSA8emVlc2hhbi5hbGlAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfUlRYX1FVRVVFX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfUlRYX1FVRVVFX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1JUWF9RVUVVRSAoZ3N0X3J0cF9ydHhfcXVldWVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9SVFhfUVVFVUUob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1JUWF9RVUVVRSwgR3N0UlRQUnR4UXVldWUpKQotI2RlZmluZSBHU1RfUlRQX1JUWF9RVUVVRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1JUWF9RVUVVRSwgR3N0UlRQUnR4UXVldWVDbGFzcykpCi0jZGVmaW5lIEdTVF9SVFBfUlRYX1FVRVVFX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUlRQX1JUWF9RVUVVRSwgR3N0UlRQUnR4UXVldWVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfUlRYX1FVRVVFKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9SVFhfUVVFVUUpKQotI2RlZmluZSBHU1RfSVNfUlRQX1JUWF9RVUVVRV9DTEFTUyhvYmopIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUUF9SVFhfUVVFVUUpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUFJ0eFF1ZXVlIEdzdFJUUFJ0eFF1ZXVlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUFJ0eFF1ZXVlQ2xhc3MgR3N0UlRQUnR4UXVldWVDbGFzczsKLQotLyoqCi0gKiBHc3RSVFBSdHhRdWV1ZToKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RSVFBSdHhRdWV1ZSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0UlRQUnR4UXVldWUKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qIHBhZCAqLwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIEdNdXRleCBsb2NrOwotICBHUXVldWUgKnF1ZXVlOwotICBHTGlzdCAqcGVuZGluZzsKLQotICBndWludCBtYXhfc2l6ZV90aW1lOwotICBndWludCBtYXhfc2l6ZV9wYWNrZXRzOwotfTsKLQotc3RydWN0IF9Hc3RSVFBSdHhRdWV1ZUNsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi0KLUdUeXBlIGdzdF9ydHBfcnR4X3F1ZXVlX2dldF90eXBlICh2b2lkKTsKLWdib29sZWFuIGdzdF9ydHBfcnR4X3F1ZXVlX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9SVFhfUVVFVUVfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmMgYi9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhyZWNlaXZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZWRkYTIuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzI1ICswLDAgQEAKLS8qIFJUUCBSZXRyYW5zbWlzc2lvbiByZWNlaXZlciBlbGVtZW50IGZvciBHU3RyZWFtZXIKLSAqCi0gKiBnc3RydHBydHhyZWNlaXZlLmM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKiAgIEBhdXRob3IgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwcnR4cmVjZWl2ZQotICogQHNlZV9hbHNvOiBydHBydHhzZW5kLCBydHBzZXNzaW9uLCBydHBqaXR0ZXJidWZmZXIKLSAqCi0gKiBUaGUgcmVjZWl2ZXIgd2lsbCBsaXN0ZW4gdG8gdGhlIGN1c3RvbSByZXRyYW5zbWlzc2lvbiBldmVudHMgZnJvbSB0aGUKLSAqIGRvd25zdHJlYW0gaml0dGVyYnVmZmVyIGFuZCB3aWxsIHJlbWVtYmVyIHRoZSBTU1JDMSBvZiB0aGUgc3RyZWFtIGFuZAotICogc2VxbnVtIHRoYXQgd2FzIHJlcXVlc3RlZC4gV2hlbiBpdCBzZWVzIGEgcGFja2V0IHdpdGggb25lIG9mIHRoZSBzdG9yZWQKLSAqIHNlcW51bSwgaXQgYXNzb2NpYXRlcyB0aGUgU1NSQzIgb2YgdGhlIHN0cmVhbSB3aXRoIHRoZSBTU1JDMSBvZiB0aGUKLSAqIG1hc3RlciBzdHJlYW0uIEZyb20gdGhlbiBpdCBrbm93cyB0aGF0IFNTUkMyIGlzIHRoZSByZXRyYW5zbWlzc2lvbgotICogc3RyZWFtIG9mIFNTUkMxLiBUaGlzIGFsZ29yaXRobSBpcyBzdGF0ZWQgaW4gUkZDIDQ1ODguIEZvciB0aGlzCi0gKiBhbGdvcml0aG0gdG8gd29yaywgUkZDNDU4OCBhbHNvIHN0YXRlcyB0aGF0IG5vIHR3byBwZW5kaW5nIHJldHJhbnNtaXNzaW9uCi0gKiByZXF1ZXN0cyBjYW4gZXhpc3QgZm9yIHRoZSBzYW1lIHNlcW51bSBhbmQgZGlmZmVyZW50IFNTUkNzIG9yIGVsc2UgaXQKLSAqIHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzb2NpYXRlIHRoZSByZXRyYW5zbWlzc2lvbiB3aXRoIHRoZSBvcmlnaW5hbAotICogcmVxdWVzdGVyIFNTUkMuCi0gKiBXaGVuIHRoZSBSVFggcmVjZWl2ZXIgaGFzIGFzc29jaWF0ZWQgdGhlIHJldHJhbnNtaXNzaW9uIHBhY2tldHMsCi0gKiBpdCBjYW4gZGVwYXlsb2FkIGFuZCBmb3J3YXJkIHRoZW0gdG8gdGhlIHNvdXJjZSBwYWQgb2YgdGhlIGVsZW1lbnQuCi0gKiBSVFggaXMgU1NSQy1tdWx0aXBsZXhlZC4gU2VlICNHc3RSdHBSdHhTZW5kCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBydHBzZXNzaW9uIG5hbWU9cnRwc2Vzc2lvbiBcCi0gKiAgICAgICAgIGF1ZGlvdGVzdHNyYyAhIHNwZWV4ZW5jICEgcnRwc3BlZXhwYXkgcHQ9OTcgISBydHBydHhzZW5kIHJ0eC1wYXlsb2FkLXR5cGU9OTkgISBcCi0gKiAgICAgICAgICAgICBpZGVudGl0eSBkcm9wLXByb2JhYmlsaXR5PTAuMSAhIHJ0cHNlc3Npb24uc2VuZF9ydHBfc2luayBcCi0gKiAgICAgICAgICAgICBydHBzZXNzaW9uLnNlbmRfcnRwX3NyYyAhIHVkcHNpbmsgaG9zdD0iMTI3LjAuMC4xIiBwb3J0PTUwMDAgXAotICogICAgICAgICB1ZHBzcmMgcG9ydD01MDAxICEgcnRwc2Vzc2lvbi5yZWN2X3J0Y3Bfc2luayBcCi0gKiAgICAgICAgIHJ0cHNlc3Npb24uc2VuZF9ydGNwX3NyYyAhIHVkcHNpbmsgaG9zdD0iMTI3LjAuMC4xIiBwb3J0PTUwMDIgc3luYz1mYWxzZSBhc3luYz1mYWxzZQotICogXXwgU2VuZCBhdWRpbyBzdHJlYW0gdGhyb3VnaCBwb3J0IDUwMDAuICg1MDAxIGFuZCA1MDAyIGFyZSBqdXN0IHRoZSBydGNwIGxpbmsgd2l0aCB0aGUgcmVjZWl2ZXIpCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgcnRwc2Vzc2lvbiBuYW1lPXJ0cHNlc3Npb24gXAotICogICAgICAgICB1ZHBzcmMgcG9ydD01MDAwIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpYXVkaW8sY2xvY2stcmF0ZT0oaW50KTQ0MTAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylTUEVFWCxlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLG9jdGV0LWFsaWduPShzdHJpbmcpMSIgISBcCi0gKiAgICAgICAgICAgICBydHBzZXNzaW9uLnJlY3ZfcnRwX3NpbmsgXAotICogICAgICAgICAgICAgcnRwc2Vzc2lvbi5yZWN2X3J0cF9zcmMgISBydHBydHhyZWNlaXZlIHJ0eC1wYXlsb2FkLXR5cGVzPSI5OSIgISBydHBqaXR0ZXJidWZmZXIgZG8tcmV0cmFuc21pc3Npb249dHJ1ZSAhIHJ0cHNwZWV4ZGVwYXkgISBcCi0gKiAgICAgICAgICAgICBzcGVleGRlYyAhIGF1ZGlvY29udmVydCAhIGF1dG9hdWRpb3NpbmsgXAotICogICAgICAgICBydHBzZXNzaW9uLnNlbmRfcnRjcF9zcmMgISB1ZHBzaW5rIGhvc3Q9IjEyNy4wLjAuMSIgcG9ydD01MDAxIFwKLSAqICAgICAgICAgdWRwc3JjIHBvcnQ9NTAwMiAhIHJ0cHNlc3Npb24ucmVjdl9ydGNwX3Npbmsgc3luYz1mYWtzZSBhc3luYz1mYWxzZQotICogXXwgUmVjZWl2ZSBhdWRpbyBzdHJlYW0gZnJvbSBwb3J0IDUwMDAuICg1MDAxIGFuZCA1MDAyIGFyZSBqdXN0IHRoZSBydGNwIGxpbmsgd2l0aCB0aGUgc2VuZGVyKQotICogT24gc2VuZGVyIHNpZGUgbWFrZSBzdXJlIHRvIHVzZSBhIGRpZmZlcmVudCBwYXlsb2FkIHR5cGUgZm9yIHRoZSBzdHJlYW0gYW5kCi0gKiBpdHMgYXNzb2NpYXRlZCByZXRyYW5zbWlzc2lvbiBzdHJlYW0gKHNlZSAjR3N0UnRwUnR4U2VuZCkuIE5vdGUgdGhhdCBzZXZlcmFsIHJldHJhbnNtaXNzaW9uIHN0cmVhbXMgY2FuCi0gKiBoYXZlIHRoZSBzYW1lIHBheWxvYWQgdHlwZSBzbyB0aGlzIGlzIG5vdCBkZXRlcm1pbmlzdGljLiBBY3R1YWxseSB0aGUKLSAqIHJ0cHJ0eHJlY2VpdmVyIGVsZW1lbnQgZG9lcyB0aGUgYXNzb2NpYXRpb24gdXNpbmcgc2VxbnVtIHZhbHVlcy4KLSAqIE9uIHJlY2VpdmVyIHNpZGUgc2V0IGFsbCB0aGUgcmV0cmFuc21pc3Npb24gcGF5bG9hZCB0eXBlcyAoVGhvc2UgaW5mb3JtYXRpb25zIGFyZSByZXRyaWV2ZQotICogdGhyb3VnaCBTRFApLgotICogWW91IHNob3VsZCBzdGlsbCBoZWFyIGEgY2xlYXIgc291bmQgd2hlbiBzZXR0aW5nIGRyb3AtcHJvYmFiaWxpdHkgdG8gc29tZXRoaW5nIGdyZWF0ZXIgdGhhbiAwLgotICogVGhlIHJ0cGppdHRlcmJ1ZmZlciB3aWxsIGdlbmVyYXRlIGEgY3VzdG9tIHVwc3RyZWFtIGV2ZW50IEdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCB3aGVuCi0gKiBpdCBhc3N1bWVzIHRoYXQgb25lIHBhY2tldCBpcyBtaXNzaW5nLiBUaGVuIHRoaXMgcmVxdWVzdCBpcyB0cmFuc2xhdGVkIHRvIGEgRkIgTkFDSyBpbiB0aGUgcnRjcCBsaW5rCi0gKiBGaW5hbGx5IHRoZSBydHBzZXNzaW9uIG9mIHRoZSBzZW5kZXIgc2lkZSByZS1jb252ZXJ0IGl0IGluIGEgR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IHRoYXQgd2lsbAotICogYmUgaGFuZGxlIGJ5IHJ0cHJ0eHNlbmQuCi0gKiBXaGVuIGluY3JlYXNpbmcgdGhpcyB2YWx1ZSBpdCBtYXkgYmUgcG9zc2libGUgdGhhdCBldmVuIHRoZSByZXRyYW5zbWlzc2lvbiBzdHJlYW0gd291bGQgYmUgZHJvcHBlZAotICogc28gdGhlIHJlY2VpdmVyIHdpbGwgYXNrIHRvIHJlc2VuZCB0aGUgcGFja2V0cyBhZ2FpbiBhbmQgYWdhaW4gdW50aWwgaXQgYWN0dWFsbHkgcmVjZWl2ZSB0aGVtLgotICogSWYgdGhlIHZhbHVlIGlzIHRvbyBoaWdoIHRoZSBydHBydHhzZW5kIHdpbGwgbm90IGJlIGFibGUgdG8gcmV0cmlldmUgdGhlIHBhY2tldCBpbiBpdHMgbGlzdCBvZgotICogc3RvcmVkIHBhY2tldHMuIEZvciBsZWFybmluZyBwdXJwb3NlIHlvdSBjb3VsZCB0cnkgdG8gaW5jcmVhc2UgdGhlIG1heC1zaXplLXBhY2tldHMgb3IgbWF4LXNpemUtdGltZQotICogcnRwcnR4c2VuZGVyJ3MgcHJvcGVydGllcy4KLSAqIEFsc28gbm90ZSB0aGF0IHlvdSBzaG91bGQgdXNlIHJ0cHJ0eHNlbmQgdGhyb3VnaCBydHBiaW4gYW5kIGl0cyBzZXQtYXV4LXNlbmQgcHJvcGVydHkuIFNlZSAjR3N0UnRwQmluLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHJ0cHNlc3Npb24gbmFtZT1ydHBzZXNzaW9uMCBcCi0gKiAgICAgICAgIGF1ZGlvdGVzdHNyYyB3YXZlPTAgISBzcGVleGVuYyAhIHJ0cHNwZWV4cGF5IHB0PTk3ICEgcnRwcnR4c2VuZCBydHgtcGF5bG9hZC10eXBlPTk5IHNlcW51bS1vZmZzZXQ9MSAhIFwKLSAqICAgICAgICAgICAgIGlkZW50aXR5IGRyb3AtcHJvYmFiaWxpdHk9MC4xICEgcnRwc2Vzc2lvbjAuc2VuZF9ydHBfc2luayBcCi0gKiAgICAgICAgICAgICBydHBzZXNzaW9uMC5zZW5kX3J0cF9zcmMgISB1ZHBzaW5rIGhvc3Q9IjEyNy4wLjAuMSIgcG9ydD01MDAwIFwKLSAqICAgICAgICAgdWRwc3JjIHBvcnQ9NTAwMSAhIHJ0cHNlc3Npb24wLnJlY3ZfcnRjcF9zaW5rIFwKLSAqICAgICAgICAgcnRwc2Vzc2lvbjAuc2VuZF9ydGNwX3NyYyAhIHVkcHNpbmsgaG9zdD0iMTI3LjAuMC4xIiBwb3J0PTUwMDIgc3luYz1mYWxzZSBhc3luYz1mYWxzZSBcCi0gKiAgICAgICAgICAgICAgICBydHBzZXNzaW9uIG5hbWU9cnRwc2Vzc2lvbjEgXAotICogICAgICAgICBhdWRpb3Rlc3RzcmMgd2F2ZT0wICEgc3BlZXhlbmMgISBydHBzcGVleHBheSBwdD05NyAhIHJ0cHJ0eHNlbmQgcnR4LXBheWxvYWQtdHlwZT05OSBzZXFudW0tb2Zmc2V0PTEwICEgXAotICogICAgICAgICAgICAgaWRlbnRpdHkgZHJvcC1wcm9iYWJpbGl0eT0wLjEgISBydHBzZXNzaW9uMS5zZW5kX3J0cF9zaW5rIFwKLSAqICAgICAgICAgICAgIHJ0cHNlc3Npb24xLnNlbmRfcnRwX3NyYyAhIHVkcHNpbmsgaG9zdD0iMTI3LjAuMC4xIiBwb3J0PTUwMDAgXAotICogICAgICAgICB1ZHBzcmMgcG9ydD01MDA0ICEgcnRwc2Vzc2lvbjEucmVjdl9ydGNwX3NpbmsgXAotICogICAgICAgICBydHBzZXNzaW9uMS5zZW5kX3J0Y3Bfc3JjICEgdWRwc2luayBob3N0PSIxMjcuMC4wLjEiIHBvcnQ9NTAwMiBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlCi0gKiBdfCBTZW5kIHR3byBhdWRpbyBzdHJlYW1zIHRvIHBvcnQgNTAwMC4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBydHBzZXNzaW9uIG5hbWU9cnRwc2Vzc2lvbgotICogICAgICAgICB1ZHBzcmMgcG9ydD01MDAwIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpYXVkaW8sY2xvY2stcmF0ZT0oaW50KTQ0MTAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylTUEVFWCxlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLG9jdGV0LWFsaWduPShzdHJpbmcpMSIgISBcCi0gKiAgICAgICAgICAgICBydHBzZXNzaW9uLnJlY3ZfcnRwX3NpbmsgXAotICogICAgICAgICAgICAgcnRwc2Vzc2lvbi5yZWN2X3J0cF9zcmMgISBydHBydHhyZWNlaXZlIHJ0eC1wYXlsb2FkLXR5cGVzPSI5OSIgISBydHBzc3JjZGVtdXggbmFtZT1kZW11eCBcCi0gKiAgICAgICAgICAgICBkZW11eC4gISBxdWV1ZSAhIHJ0cGppdHRlcmJ1ZmZlciBkby1yZXRyYW5zbWlzc2lvbj10cnVlICEgcnRwc3BlZXhkZXBheSAhIHNwZWV4ZGVjICEgYXVkaW9jb252ZXJ0ICEgYXV0b2F1ZGlvc2luayBcCi0gKiAgICAgICAgICAgICBkZW11eC4gISBxdWV1ZSAhIHJ0cGppdHRlcmJ1ZmZlciBkby1yZXRyYW5zbWlzc2lvbj10cnVlICEgcnRwc3BlZXhkZXBheSAhIHNwZWV4ZGVjICEgYXVkaW9jb252ZXJ0ICEgYXV0b2F1ZGlvc2luayBcCi0gKiAgICAgICAgIHJ0cHNlc3Npb24uc2VuZF9ydGNwX3NyYyAhICEgdGVlIG5hbWU9dCAhIHF1ZXVlICEgdWRwc2luayBob3N0PSIxMjcuMC4wLjEiIHBvcnQ9NTAwMSB0LiAhIHF1ZXVlICEgdWRwc2luayBob3N0PSIxMjcuMC4wLjEiIHBvcnQ9NTAwNCBcCi0gKiAgICAgICAgIHVkcHNyYyBwb3J0PTUwMDIgISBydHBzZXNzaW9uLnJlY3ZfcnRjcF9zaW5rIHN5bmM9ZmFrc2UgYXN5bmM9ZmFsc2UKLSAqIF18IFJlY2VpdmUgYXVkaW8gc3RyZWFtIGZyb20gcG9ydCA1MDAwLgotICogT24gc2VuZGVyIHNpZGUgdGhlIHR3byBzdHJlYW1zIGhhdmUgdGhlIHNhbWUgcGF5bG9hZCB0eXBlIGZvciBtYXN0ZXIgc3RyZWFtcywgU2FtZSBhYm91dCByZXRyYW5zbWlzc2lvbiBzdHJlYW1zLgotICogVGhlIHN0cmVhbXMgYXJlIHNlbnQgdG8gdGhlIG5ldHdvcmsgdGhyb3VnaCB0d28gZGlzdGluY3RzIHNlc3Npb25zLgotICogQnV0IHdlIG5lZWQgdG8gc2V0IGEgZGlmZmVyZW50IHNlcW51bS1vZmZzZXQgdG8gbWFrZSBzdXJlIHRoZWlyIHNlcW51bSBuYXZpZ2F0ZSBhdCBhIGRpZmZlcmVudCByYXRlIGxpa2UgaW4gY29uY3JldGUgY2FzZXMuCi0gKiBXZSBjb3VsZCBhbHNvIGNob29zZSB0aGUgc2FtZSBzZXFudW0gb2Zmc2V0IGJ1dCB3ZSB3b3VsZCByZXF1aXJlIHRvIHNldCBhIGRpZmZlcmVudCBpbml0aWFsIHNlcW51bSB2YWx1ZS4KLSAqIFRoaXMgaXMgYWxzbyB3aHkgdGhlIHJ0cHJ0eHJlY2VpdmUgY2FuIHN1Y2NlZWQgdG8gZG8gdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gbWFzdGVyIGFuZCByZXRyYW5zbWlzc2lvbiBzdHJlYW0uCi0gKiBPbiByZWNlaXZlciBzaWRlIHRoZSBzYW1lIHNlc3Npb24gaXMgdXNlZCB0byByZWNlaXZlIHRoZSB0d28gc3RyZWFtcy4gU28gdGhlIHJ0cHNzcmNkZW11eCBpcyBoZXJlIHRvIGRlbXVsdGlwbGV4Ci0gKiB0aG9zZSB0d28gc3RyZWFtcy4gVGhlIHJ0cHJ0eHJlY2VpdmUgaXMgcmVzcG9uc2libGUgZm9yIHJlY29uc3RydWN0aW5nIHRoZSBvcmlnaW5hbCBwYWNrZXRzIGZyb20gdGhlIHR3byByZXRyYW5zbWlzc2lvbiBzdHJlYW1zLgotICogWW91IGNhbiBwbGF5IHdpdGggdGhlIGRyb3AtcHJvYmFiaWxpdHkgdmFsdWUgZm9yIG9uZSBvciBib3RoIHN0cmVhbXMuCi0gKiBZb3Ugc2hvdWxkIGhlYXIgYSBjbGVhciBzb3VuZC4gKGFmdGVyIGEgZmV3IHNlY29uZHMgdGhlIHR3byBzdHJlYW1zIHdhdmUgZmVlbCBzeW5jaHJvbml6ZWQpCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwcnR4cmVjZWl2ZS5oIgotCi0jZGVmaW5lIEFTU09DX1RJTUVPVVQgKEdTVF9TRUNPTkQpCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydHBfcnR4X3JlY2VpdmVfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF9ydHhfcmVjZWl2ZV9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9QQVlMT0FEX1RZUEVfTUFQLAotICBQUk9QX05VTV9SVFhfUkVRVUVTVFMsCi0gIFBST1BfTlVNX1JUWF9QQUNLRVRTLAotICBQUk9QX05VTV9SVFhfQVNTT0NfUEFDS0VUUwotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3J0eF9yZWNlaXZlX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3J0eF9yZWNlaXZlX2NoYWluIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9ydHhfcmVjZWl2ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3J0eF9yZWNlaXZlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfcnR4X3JlY2VpdmVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9ydHhfcmVjZWl2ZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFJ0eFJlY2VpdmUsIGdzdF9ydHBfcnR4X3JlY2VpdmUsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfcmVjZWl2ZV9jbGFzc19pbml0IChHc3RSdHBSdHhSZWNlaXZlQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9ydHBfcnR4X3JlY2VpdmVfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfcnRwX3J0eF9yZWNlaXZlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX3J0eF9yZWNlaXZlX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFZTE9BRF9UWVBFX01BUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoInBheWxvYWQtdHlwZS1tYXAiLCAiUGF5bG9hZCBUeXBlIE1hcCIsCi0gICAgICAgICAgIk1hcCBvZiBvcmlnaW5hbCBwYXlsb2FkIHR5cGVzIHRvIHRoZWlyIHJldHJhbnNtaXNzaW9uIHBheWxvYWQgdHlwZXMiLAotICAgICAgICAgIEdTVF9UWVBFX1NUUlVDVFVSRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OVU1fUlRYX1JFUVVFU1RTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJudW0tcnR4LXJlcXVlc3RzIiwgIk51bSBSVFggUmVxdWVzdHMiLAotICAgICAgICAgICJOdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gZXZlbnRzIHJlY2VpdmVkIiwgMCwgR19NQVhVSU5ULAotICAgICAgICAgIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OVU1fUlRYX1BBQ0tFVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm51bS1ydHgtcGFja2V0cyIsICJOdW0gUlRYIFBhY2tldHMiLAotICAgICAgICAgICIgTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHBhY2tldHMgcmVjZWl2ZWQiLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9SVFhfQVNTT0NfUEFDS0VUUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibnVtLXJ0eC1hc3NvYy1wYWNrZXRzIiwKLSAgICAgICAgICAiTnVtIFJUWCBBc3NvY2lhdGVkIFBhY2tldHMiLCAiTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIHBhY2tldHMgIgotICAgICAgICAgICJjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHJldHJhbnNtaXNzaW9uIHJlcXVlc3RzIiwgMCwgR19NQVhVSU5ULAotICAgICAgICAgIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBSZXRyYW5zbWlzc2lvbiByZWNlaXZlciIsICJDb2RlYyIsCi0gICAgICAiUmVjZWl2ZSByZXRyYW5zbWl0dGVkIFJUUCBwYWNrZXRzIGFjY29yZGluZyB0byBSRkM0NTg4IiwKLSAgICAgICJKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcnR4X3JlY2VpdmVfY2hhbmdlX3N0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3JlY2VpdmVfcmVzZXQgKEdzdFJ0cFJ0eFJlY2VpdmUgKiBydHgpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgZ19oYXNoX3RhYmxlX3JlbW92ZV9hbGwgKHJ0eC0+c3NyYzJfc3NyYzFfbWFwKTsKLSAgZ19oYXNoX3RhYmxlX3JlbW92ZV9hbGwgKHJ0eC0+c2VxbnVtX3NzcmMxX21hcCk7Ci0gIHJ0eC0+bnVtX3J0eF9yZXF1ZXN0cyA9IDA7Ci0gIHJ0eC0+bnVtX3J0eF9wYWNrZXRzID0gMDsKLSAgcnR4LT5udW1fcnR4X2Fzc29jX3BhY2tldHMgPSAwOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3JlY2VpdmVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFJ0eFJlY2VpdmUgKnJ0eCA9IEdTVF9SVFBfUlRYX1JFQ0VJVkUgKG9iamVjdCk7Ci0KLSAgZ19oYXNoX3RhYmxlX3VucmVmIChydHgtPnNzcmMyX3NzcmMxX21hcCk7Ci0gIGdfaGFzaF90YWJsZV91bnJlZiAocnR4LT5zZXFudW1fc3NyYzFfbWFwKTsKLSAgZ19oYXNoX3RhYmxlX3VucmVmIChydHgtPnJ0eF9wdF9tYXApOwotICBpZiAocnR4LT5ydHhfcHRfbWFwX3N0cnVjdHVyZSkKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHJ0eC0+cnR4X3B0X21hcF9zdHJ1Y3R1cmUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfcnRwX3J0eF9yZWNlaXZlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDMyIHNzcmM7Ci0gIEdzdENsb2NrVGltZSB0aW1lOwotfSBTc3JjQXNzb2M7Ci0KLXN0YXRpYyBTc3JjQXNzb2MgKgotc3NyY19hc3NvY19uZXcgKGd1aW50MzIgc3NyYywgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIFNzcmNBc3NvYyAqYXNzb2MgPSBnX3NsaWNlX25ldyAoU3NyY0Fzc29jKTsKLQotICBhc3NvYy0+c3NyYyA9IHNzcmM7Ci0gIGFzc29jLT50aW1lID0gdGltZTsKLQotICByZXR1cm4gYXNzb2M7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zc3JjX2Fzc29jX2ZyZWUgKFNzcmNBc3NvYyAqIGFzc29jKQotewotICBnX3NsaWNlX2ZyZWUgKFNzcmNBc3NvYywgYXNzb2MpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfcmVjZWl2ZV9pbml0IChHc3RSdHBSdHhSZWNlaXZlICogcnR4KQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChydHgpOwotCi0gIHJ0eC0+c3JjcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzcmMiKSwgInNyYyIpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChydHgtPnNyY3BhZCk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04gKHJ0eC0+c3JjcGFkKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHJ0eC0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcnR4X3JlY2VpdmVfc3JjX2V2ZW50KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChydHgpLCBydHgtPnNyY3BhZCk7Ci0KLSAgcnR4LT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzaW5rIiksICJzaW5rIik7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0NBUFMgKHJ0eC0+c2lua3BhZCk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04gKHJ0eC0+c2lua3BhZCk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChydHgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9ydHhfcmVjZWl2ZV9jaGFpbikpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAocnR4KSwgcnR4LT5zaW5rcGFkKTsKLQotICBydHgtPnNzcmMyX3NzcmMxX21hcCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsKTsKLSAgcnR4LT5zZXFudW1fc3NyYzFfbWFwID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCwKLSAgICAgIE5VTEwsIChHRGVzdHJveU5vdGlmeSkgc3NyY19hc3NvY19mcmVlKTsKLQotICBydHgtPnJ0eF9wdF9tYXAgPSBnX2hhc2hfdGFibGVfbmV3IChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9ydHhfcmVjZWl2ZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJ0cFJ0eFJlY2VpdmUgKnJ0eCA9IEdTVF9SVFBfUlRYX1JFQ0VJVkUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlczsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU06Ci0gICAgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLQotICAgICAgLyogVGhpcyBldmVudCB1c3VhbGx5IGNvbWVzIGZyb20gdGhlIGRvd25zdHJlYW0gZ3N0cnRwaml0dGVyYnVmZmVyICovCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIkdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCIpKSB7Ci0gICAgICAgIGd1aW50IHNlcW51bSA9IDA7Ci0gICAgICAgIGd1aW50IHNzcmMgPSAwOwotICAgICAgICBncG9pbnRlciBzc3JjMiA9IDA7Ci0KLSAgICAgICAgLyogcmV0cmlldmUgc2VxbnVtIG9mIHRoZSBwYWNrZXQgdGhhdCBuZWVkIHRvIGJlIHJldHJhbnNtaXR0ZWQgKi8KLSAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAic2VxbnVtIiwgJnNlcW51bSkpCi0gICAgICAgICAgc2VxbnVtID0gLTE7Ci0KLSAgICAgICAgLyogcmV0cmlldmUgc3NyYyBvZiB0aGUgcGFja2V0IHRoYXQgbmVlZCB0byBiZSByZXRyYW5zbWl0dGVkCi0gICAgICAgICAqIGl0J3MgdXNlZnVsIHdoZW4gcmVjb25zdHJ1Y3RpbmcgdGhlIG9yaWdpbmFsIHBhY2tldCBmcm9tIHRoZSBydHggcGFja2V0ICovCi0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAocywgInNzcmMiLCAmc3NyYykpCi0gICAgICAgICAgc3NyYyA9IC0xOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0eCwKLSAgICAgICAgICAgICJyZXF1ZXN0IHNlcW51bTogJSIgR19HVUlOVDMyX0ZPUk1BVCAiLCBzc3JjOiAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgICAgICAgc2VxbnVtLCBzc3JjKTsKLQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0KLSAgICAgICAgLyogaW5jcmVhc2UgbnVtYmVyIG9mIHNlZW4gcmVxdWVzdHMgZm9yIG91ciBzdGF0aXN0aWNzICovCi0gICAgICAgICsrcnR4LT5udW1fcnR4X3JlcXVlc3RzOwotCi0gICAgICAgIC8qIEZpcnN0LCB3ZSBsb29rdXAgaW4gb3VyIG1hcCB0byBzZWUgaWYgd2UgaGF2ZSBhbHJlYWR5IGFzc29jaWF0ZSB0aGlzCi0gICAgICAgICAqIG1hc3RlciBzdHJlYW0gc3NyYyB3aXRoIGl0cyByZXRyYW5zbWl0dGVkIHN0cmVhbS4KLSAgICAgICAgICogRXZlcnkgc3NyYyBhcmUgdW5pcXVlIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgaGFzaCB0YWJsZQotICAgICAgICAgKiBmb3IgYm90aCByZXRyaWV2aW5nIHRoZSBzc3JjMSBmcm9tIHNzcmMyIGFuZCBhbHNvIHNzcmMyIGZyb20gc3NyYzEKLSAgICAgICAgICovCi0gICAgICAgIGlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChydHgtPnNzcmMyX3NzcmMxX21hcCwKLSAgICAgICAgICAgICAgICBHVUlOVF9UT19QT0lOVEVSIChzc3JjKSwgTlVMTCwgJnNzcmMyKQotICAgICAgICAgICAgJiYgR1BPSU5URVJfVE9fVUlOVCAoc3NyYzIpICE9IEdQT0lOVEVSX1RPX1VJTlQgKHNzcmMpKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnR4LCAiUmV0cmFuc21pdGVkIHN0cmVhbSAlIiBHX0dVSU5UMzJfRk9STUFUCi0gICAgICAgICAgICAgICIgYWxyZWFkeSBhc3NvY2lhdGVkIHRvIGl0cyBtYXN0ZXIiLCBHUE9JTlRFUl9UT19VSU5UIChzc3JjMikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFNzcmNBc3NvYyAqYXNzb2M7Ci0KLSAgICAgICAgICAvKiBub3QgYWxyZWFkeSBhc3NvY2lhdGVkIGJ1dCBhbHNvIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCB3ZSBoYXZlIG5vdAotICAgICAgICAgICAqIGFscmVhZHkgY29uc2lkZXJlZCB0aGlzIHJlcXVlc3QuCi0gICAgICAgICAgICovCi0gICAgICAgICAgaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKHJ0eC0+c2VxbnVtX3NzcmMxX21hcCwKLSAgICAgICAgICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKHNlcW51bSksIE5VTEwsIChncG9pbnRlciAqKSAmIGFzc29jKSkgewotICAgICAgICAgICAgaWYgKGFzc29jLT5zc3JjID09IHNzcmMpIHsKLSAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBiZWNhdXNlIHdlIGhhdmUgYWxyZWFkeSBjb25zaWRlcmVkIHRoaXMgcmVxdWVzdAotICAgICAgICAgICAgICAgKiBUaGUgaml0dGVyIG1heSBiZSB0b28gaW1wYXRpZW50IG9mIHRoZSBydHggcGFja2V0IGhhcyBiZWVuCi0gICAgICAgICAgICAgICAqIGxvc3QgdG9vLgotICAgICAgICAgICAgICAgKiBJdCBkb2VzIG5vdCBtZWFuIHdlIHJlamVjdCB0aGUgZXZlbnQsIHdlIHN0aWxsIHdhbnQgdG8gZm9yd2FyZAotICAgICAgICAgICAgICAgKiB0aGUgcmVxdWVzdCB0byB0aGUgZ3N0cnRwc2Vzc2lvbiB0byBiZSB0cmFuc2xhdGVyIGludG8gYSBGQiBOQUNLCi0gICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHgsICJEdXBsaWNhdGVkIHJlcXVlc3Qgc2VxbnVtOiAlIgotICAgICAgICAgICAgICAgICAgR19HVUlOVDMyX0ZPUk1BVCAiLCBzc3JjMTogJSIgR19HVUlOVDMyX0ZPUk1BVCwgc2VxbnVtLCBzc3JjKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgLyogSWYgdGhlIGFzc29jaWF0aW9uIGF0dGVtcHQgaXMgbGFyZ2VyIHRoYW4gQVNTT0NfVElNRU9VVCwKLSAgICAgICAgICAgICAgICogdGhlbiB3ZSBnaXZlIHVwIG9uIGl0LCBhbmQgdHJ5IHRoaXMgb25lLgotICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgaWYgKCFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAocnR4LT5sYXN0X3RpbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGFzc29jLT50aW1lKSB8fAotICAgICAgICAgICAgICAgICAgYXNzb2MtPnRpbWUgKyBBU1NPQ19USU1FT1VUIDwgcnR4LT5sYXN0X3RpbWUpIHsKLSAgICAgICAgICAgICAgICAvKiBGcm9tIFJGQyA0NTg4OgotICAgICAgICAgICAgICAgICAqIHRoZSByZWNlaXZlciBNVVNUIE5PVCBoYXZlIHR3byBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3IgdGhlCi0gICAgICAgICAgICAgICAgICogc2FtZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGluIHR3byBkaWZmZXJlbnQgb3JpZ2luYWwgc3RyZWFtcwotICAgICAgICAgICAgICAgICAqIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gaXMgcmVzb2x2ZWQuIE90aGVyd2lzZSBpdCdzIGltcG9zc2libGUKLSAgICAgICAgICAgICAgICAgKiB0byBhc3NvY2lhdGUgYSBydHggc3RyZWFtIGFuZCBpdHMgbWFzdGVyIHN0cmVhbQotICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgLyogcmVtb3ZlIHNlcW51bSBpbiBvcmRlciB0byByZXVzZSB0aGUgc3BvdCAqLwotICAgICAgICAgICAgICAgIGdfaGFzaF90YWJsZV9yZW1vdmUgKHJ0eC0+c2VxbnVtX3NzcmMxX21hcCwKLSAgICAgICAgICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoc2VxbnVtKSk7Ci0gICAgICAgICAgICAgICAgZ290byByZXRyYW5zbWl0OwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0eCwKLSAgICAgICAgICAgICAgICAgICAgInJlamVjdCByZXF1ZXN0IGZvciBzZXFudW0gJSIgR19HVUlOVDMyX0ZPUk1BVAotICAgICAgICAgICAgICAgICAgICAiIG9mIG1hc3RlciBzdHJlYW0gJSIgR19HVUlOVDMyX0ZPUk1BVCwgc2VxbnVtLCBzc3JjKTsKLQotICAgICAgICAgICAgICAgIC8qIGRvIG5vdCBmb3J3YXJkIHRoZSBldmVudCBhcyB3ZSBhcmUgcmVqZWN0aW5nIHRoaXMgcmVxdWVzdCAqLwotICAgICAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXRyYW5zbWl0OgotICAgICAgICAgICAgLyogdGhlIHJlcXVlc3QgaGFzIG5vdCBiZWVuIGFscmVhZHkgY29uc2lkZXJlZAotICAgICAgICAgICAgICogaW5zZXJ0IGl0IGZvciB0aGUgZmlyc3QgdGltZSAqLwotICAgICAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAocnR4LT5zZXFudW1fc3NyYzFfbWFwLAotICAgICAgICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKHNlcW51bSksCi0gICAgICAgICAgICAgICAgc3NyY19hc3NvY19uZXcgKHNzcmMsIHJ0eC0+bGFzdF90aW1lKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnR4LAotICAgICAgICAgICAgInBhY2tldCBudW1iZXIgJSIgR19HVUlOVDMyX0ZPUk1BVCAiIG9mIG1hc3RlciBzdHJlYW0gJSIKLSAgICAgICAgICAgIEdfR1VJTlQzMl9GT1JNQVQgIiBuZWVkcyB0byBiZSByZXRyYW5zbWl0dGVkIiwgc2VxbnVtLCBzc3JjKTsKLQotICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIH0KLQotICAgICAgLyogVHJhbnNmZXIgZXZlbnQgdXBzdHJlYW0gc28gdGhhdCB0aGUgcmVxdWVzdCBjYW4gYWN1dGFsbHkgYnkgdHJhbnNsYXRlZAotICAgICAgICogdGhyb3VnaCBnc3RydHBzZXNzaW9uIHRocm91Z2ggdGhlIG5ldHdvcmsgKi8KLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogQ29weSBmaXhlZCBoZWFkZXIgYW5kIGV4dGVuc2lvbi4gUmVwbGFjZSBjdXJyZW50IHNzcmMgYnkgc3NyYzEsCi0gKiByZW1vdmUgT1NOIGFuZCByZXBsYWNlIGN1cnJlbnQgc2VxIG51bSBieSBPU04uCi0gKiBDb3B5IG1lbW9yeSB0byBhdm9pZCB0byBtYW51YWxseSBjb3B5IGVhY2ggcnRwIGJ1ZmZlciBmaWVsZC4KLSAqLwotc3RhdGljIEdzdEJ1ZmZlciAqCi1fZ3N0X3J0cF9idWZmZXJfbmV3X2Zyb21fcnR4IChHc3RSVFBCdWZmZXIgKiBydHAsIGd1aW50MzIgc3NyYzEsCi0gICAgZ3VpbnQxNiBvcmlnbl9zZXFudW0sIGd1aW50OCBvcmlnaW5fcGF5bG9hZF90eXBlKQotewotICBHc3RNZW1vcnkgKm1lbSA9IE5VTEw7Ci0gIEdzdFJUUEJ1ZmZlciBuZXdfcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgR3N0QnVmZmVyICpuZXdfYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBwYXlsb2FkX2xlbiA9IDA7Ci0KLSAgLyogY29weSBmaXhlZCBoZWFkZXIgKi8KLSAgbWVtID0gZ3N0X21lbW9yeV9jb3B5IChydHAtPm1hcFswXS5tZW1vcnksCi0gICAgICAoZ3VpbnQ4ICopIHJ0cC0+ZGF0YVswXSAtIHJ0cC0+bWFwWzBdLmRhdGEsIHJ0cC0+c2l6ZVswXSk7Ci0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAobmV3X2J1ZmZlciwgbWVtKTsKLQotICAvKiBjb3B5IGV4dGVuc2lvbiBpZiBhbnkgKi8KLSAgaWYgKHJ0cC0+c2l6ZVsxXSkgewotICAgIG1lbSA9IGdzdF9tZW1vcnlfY29weSAocnRwLT5tYXBbMV0ubWVtb3J5LAotICAgICAgICAoZ3VpbnQ4ICopIHJ0cC0+ZGF0YVsxXSAtIHJ0cC0+bWFwWzFdLmRhdGEsIHJ0cC0+c2l6ZVsxXSk7Ci0gICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChuZXdfYnVmZmVyLCBtZW0pOwotICB9Ci0KLSAgLyogY29weSBwYXlsb2FkIGFuZCByZW1vdmUgT1NOICovCi0gIHBheWxvYWRfbGVuID0gcnRwLT5zaXplWzJdIC0gMjsKLSAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoTlVMTCwgcGF5bG9hZF9sZW4sIE5VTEwpOwotCi0gIGdzdF9tZW1vcnlfbWFwIChtZW0sICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpZiAocnRwLT5zaXplWzJdKQotICAgIG1lbWNweSAobWFwLmRhdGEsIChndWludDggKikgcnRwLT5kYXRhWzJdICsgMiwgcGF5bG9hZF9sZW4pOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZtYXApOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKG5ld19idWZmZXIsIG1lbSk7Ci0KLSAgLyogdGhlIHNlbmRlciBhbHdheXMgY29uc3RydWN0cyBydHggcGFja2V0cyB3aXRob3V0IHBhZGRpbmcsCi0gICAqIEJ1dCB0aGUgcmVjZWl2ZXIgY2FuIHN0aWxsIHJlY2VpdmUgcnR4IHBhY2tldHMgd2l0aCBwYWRkaW5nLgotICAgKiBTbyBqdXN0IGNvcHkgaXQuCi0gICAqLwotICBpZiAocnRwLT5zaXplWzNdKSB7Ci0gICAgZ3VpbnQgcGFkX2xlbiA9IHJ0cC0+c2l6ZVszXTsKLQotICAgIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIHBhZF9sZW4sIE5VTEwpOwotCi0gICAgZ3N0X21lbW9yeV9tYXAgKG1lbSwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgbWFwLmRhdGFbcGFkX2xlbiAtIDFdID0gcGFkX2xlbjsKLSAgICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZtYXApOwotCi0gICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChuZXdfYnVmZmVyLCBtZW0pOwotICB9Ci0KLSAgLyogc2V0IHNzcmMgYW5kIHNlcSBudW0gKi8KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChuZXdfYnVmZmVyLCBHU1RfTUFQX1dSSVRFLCAmbmV3X3J0cCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9zc3JjICgmbmV3X3J0cCwgc3NyYzEpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxICgmbmV3X3J0cCwgb3JpZ25fc2VxbnVtKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJm5ld19ydHAsIG9yaWdpbl9wYXlsb2FkX3R5cGUpOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJm5ld19ydHApOwotCi0gIGdzdF9idWZmZXJfY29weV9pbnRvIChuZXdfYnVmZmVyLCBydHAtPmJ1ZmZlciwKLSAgICAgIEdTVF9CVUZGRVJfQ09QWV9GTEFHUyB8IEdTVF9CVUZGRVJfQ09QWV9USU1FU1RBTVBTLCAwLCAtMSk7Ci0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKG5ld19idWZmZXIsIEdTVF9SVFBfQlVGRkVSX0ZMQUdfUkVUUkFOU01JU1NJT04pOwotCi0gIHJldHVybiBuZXdfYnVmZmVyOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9ydHhfcmVjZWl2ZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwUnR4UmVjZWl2ZSAqcnR4ID0gR1NUX1JUUF9SVFhfUkVDRUlWRSAocGFyZW50KTsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJ1ZmZlciAqbmV3X2J1ZmZlciA9IE5VTEw7Ci0gIGd1aW50MzIgc3NyYyA9IDA7Ci0gIGdwb2ludGVyIHNzcmMxID0gMDsKLSAgZ3VpbnQzMiBzc3JjMiA9IDA7Ci0gIGd1aW50MTYgc2VxbnVtID0gMDsKLSAgZ3VpbnQxNiBvcmlnbl9zZXFudW0gPSAwOwotICBndWludDggcGF5bG9hZF90eXBlID0gMDsKLSAgZ3VpbnQ4IG9yaWdpbl9wYXlsb2FkX3R5cGUgPSAwOwotICBnYm9vbGVhbiBpc19ydHg7Ci0gIGdib29sZWFuIGRyb3AgPSBGQUxTRTsKLQotICAvKiBtYXAgY3VycmVudCBydHAgcGFja2V0IHRvIHBhcnNlIGl0cyBoZWFkZXIgKi8KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cCk7Ci0gIHNzcmMgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoJnJ0cCk7Ci0gIHNlcW51bSA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKCZydHApOwotICBwYXlsb2FkX3R5cGUgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF90eXBlICgmcnRwKTsKLQotICAvKiBjaGVjayBpZiB3ZSBoYXZlIGEgcmV0cmFuc21pc3Npb24gcGFja2V0ICh0aGlzIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gU0RQKSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0KLSAgcnR4LT5sYXN0X3RpbWUgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLQotICBpc19ydHggPQotICAgICAgZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAocnR4LT5ydHhfcHRfbWFwLAotICAgICAgR1VJTlRfVE9fUE9JTlRFUiAocGF5bG9hZF90eXBlKSwgTlVMTCwgTlVMTCk7Ci0KLSAgLyogaWYgdGhlIGN1cnJlbnQgcGFja2V0IGlzIGZyb20gYSByZXRyYW5zbWlzc2lvbiBzdHJlYW0gKi8KLSAgaWYgKGlzX3J0eCkgewotICAgIC8qIGluY3JlYXNlIG91ciBzdGF0aXN0aWMgKi8KLSAgICArK3J0eC0+bnVtX3J0eF9wYWNrZXRzOwotCi0gICAgLyogcmVhZCBPU04gaW4gdGhlIHJ0eCBwYXlsb2FkICovCi0gICAgb3JpZ25fc2VxbnVtID0gR1NUX1JFQURfVUlOVDE2X0JFIChnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCkpOwotICAgIG9yaWdpbl9wYXlsb2FkX3R5cGUgPQotICAgICAgICBHUE9JTlRFUl9UT19VSU5UIChnX2hhc2hfdGFibGVfbG9va3VwIChydHgtPnJ0eF9wdF9tYXAsCi0gICAgICAgICAgICBHVUlOVF9UT19QT0lOVEVSIChwYXlsb2FkX3R5cGUpKSk7Ci0KLSAgICAvKiBmaXJzdCB3ZSBjaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYXNzb2NpYXRlZCB0aGlzIHJldHJhbnNtaXNzaW9uIHN0cmVhbQotICAgICAqIHRvIGEgbWFzdGVyIHN0cmVhbSAqLwotICAgIGlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChydHgtPnNzcmMyX3NzcmMxX21hcCwKLSAgICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKHNzcmMpLCBOVUxMLCAmc3NyYzEpKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHgsCi0gICAgICAgICAgInBhY2tldCBpcyBmcm9tIHJldHJhbnNtaXNzaW9uIHN0cmVhbSAlIiBHX0dVSU5UMzJfRk9STUFUCi0gICAgICAgICAgIiBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gbWFzdGVyIHN0cmVhbSAlIiBHX0dVSU5UMzJfRk9STUFULCBzc3JjLAotICAgICAgICAgIEdQT0lOVEVSX1RPX1VJTlQgKHNzcmMxKSk7Ci0gICAgICBzc3JjMiA9IHNzcmM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFNzcmNBc3NvYyAqYXNzb2M7Ci0KLSAgICAgIC8qIHRoZSBjdXJyZW50IHJldHJhbnNtaXR0ZWQgcGFja2V0IGhhcyBpdHMgcnR4IHN0cmVhbSBub3QgYWxyZWFkeQotICAgICAgICogYXNzb2NpYXRlZCB0byBhIG1hc3RlciBzdHJlYW0sIHNvIHJldHJpZXZlIGl0IGZyb20gb3VyIHJlcXVlc3QKLSAgICAgICAqIGhpc3RvcnkgKi8KLSAgICAgIGlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChydHgtPnNlcW51bV9zc3JjMV9tYXAsCi0gICAgICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKG9yaWduX3NlcW51bSksIE5VTEwsIChncG9pbnRlciAqKSAmIGFzc29jKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHgsCi0gICAgICAgICAgICAiYXNzb2NpYXRlIHJldHJhbnNtaXR0ZWQgc3RyZWFtICUiIEdfR1VJTlQzMl9GT1JNQVQKLSAgICAgICAgICAgICIgdG8gbWFzdGVyIHN0cmVhbSAlIiBHX0dVSU5UMzJfRk9STUFUICIgdGhhbmtzIHRvIHBhY2tldCAlIgotICAgICAgICAgICAgR19HVUlOVDE2X0ZPUk1BVCAiIiwgc3NyYywgYXNzb2MtPnNzcmMsIG9yaWduX3NlcW51bSk7Ci0gICAgICAgIHNzcmMxID0gR1VJTlRfVE9fUE9JTlRFUiAoYXNzb2MtPnNzcmMpOwotICAgICAgICBzc3JjMiA9IHNzcmM7Ci0KLSAgICAgICAgLyoganVzdCBwdXQgYSBndWFyZCAqLwotICAgICAgICBpZiAoR1BPSU5URVJfVE9fVUlOVCAoc3NyYzEpID09IHNzcmMyKQotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocnR4LCAiUlRYIHJlY2VpdmVyIHNzcmMyX3NzcmMxX21hcCBiYWQgc3RhdGUsICIKLSAgICAgICAgICAgICAgInNzcmMgJSIgR19HVUlOVDMyX0ZPUk1BVCAiIGFyZSB0aGUgc2FtZVxuIiwgc3NyYyk7Ci0KLSAgICAgICAgLyogZnJlZSB0aGUgc3BvdCBzbyB0aGF0IHRoaXMgc2VxbnVtIGNhbiBiZSB1c2VkIHRvIGRvIGFub3RoZXIKLSAgICAgICAgICogYXNzb2NpYXRpb24gKi8KLSAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocnR4LT5zZXFudW1fc3NyYzFfbWFwLAotICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAob3JpZ25fc2VxbnVtKSk7Ci0KLSAgICAgICAgLyogYWN0dWFsbHkgZG8gdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gcnR4IHN0cmVhbSBhbmQgbWFzdGVyIHN0cmVhbSAqLwotICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChydHgtPnNzcmMyX3NzcmMxX21hcCwgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYzIpLAotICAgICAgICAgICAgc3NyYzEpOwotCi0gICAgICAgIC8qIGFsc28gZG8gdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gbWFzdGVyIHN0cmVhbSBhbmQgcnR4IHN0cmVhbQotICAgICAgICAgKiBldmVyeSBzc3JjIGFyZSB1bmlxdWUgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBoYXNoIHRhYmxlCi0gICAgICAgICAqIGZvciBib3RoIHJldHJpZXZpbmcgdGhlIHNzcmMxIGZyb20gc3NyYzIgYW5kIGFsc28gc3NyYzIgZnJvbSBzc3JjMQotICAgICAgICAgKi8KLSAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAocnR4LT5zc3JjMl9zc3JjMV9tYXAsIHNzcmMxLAotICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYzIpKTsKLQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogd2UgYXJlIG5vdCBhYmxlIHRvIGFzc29jaWF0ZSB0aGlzIHJ0eCBwYWNrZXQgd2l0aCBhIG1hc3RlciBzdHJlYW0gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnR4LAotICAgICAgICAgICAgImRyb3AgcnR4IHBhY2tldCBiZWNhdXNlIGl0cyBvcmlnbl9zZXFudW0gJSIgR19HVUlOVDE2X0ZPUk1BVAotICAgICAgICAgICAgIiBpcyBub3QgaW4gcGVuZGluZyByZXRyYW5zbWlzc2lvbiByZXF1ZXN0cyIsIG9yaWduX3NlcW51bSk7Ci0gICAgICAgIGRyb3AgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIGlmIG5vdCBkcm9wcGVkIHRoZSBwYWNrZXQgd2FzIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkICovCi0gIGlmIChpc19ydHggJiYgIWRyb3ApCi0gICAgKytydHgtPm51bV9ydHhfYXNzb2NfcGFja2V0czsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLQotICAvKiBqdXN0IGRyb3AgdGhlIHBhY2tldCBpZiB0aGUgYXNzb2NpYXRpb24gY291bGQgbm90IGhhdmUgYmVlbiBtYWRlICovCi0gIGlmIChkcm9wKSB7Ci0gICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0KLSAgLyogY3JlYXRlIHRoZSByZXRyYW5zbWlzc2lvbiBwYWNrZXQgKi8KLSAgaWYgKGlzX3J0eCkKLSAgICBuZXdfYnVmZmVyID0KLSAgICAgICAgX2dzdF9ydHBfYnVmZmVyX25ld19mcm9tX3J0eCAoJnJ0cCwgR1BPSU5URVJfVE9fVUlOVCAoc3NyYzEpLAotICAgICAgICBvcmlnbl9zZXFudW0sIG9yaWdpbl9wYXlsb2FkX3R5cGUpOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAvKiBwdXNoIHRoZSBwYWNrZXQgKi8KLSAgaWYgKGlzX3J0eCkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0eCwgInB1c2ggcGFja2V0IHNlcW51bTolIiBHX0dVSU5UMTZfRk9STUFUCi0gICAgICAgICIgZnJvbSBhIHJlc3RyYW5zbWlzc2lvbiBzdHJlYW0gc3NyYzI6JSIgR19HVUlOVDMyX0ZPUk1BVCAiIChzcmMgJSIKLSAgICAgICAgR19HVUlOVDMyX0ZPUk1BVCAiKSIsIG9yaWduX3NlcW51bSwgc3NyYzIsIEdQT0lOVEVSX1RPX1VJTlQgKHNzcmMxKSk7Ci0gICAgcmV0ID0gZ3N0X3BhZF9wdXNoIChydHgtPnNyY3BhZCwgbmV3X2J1ZmZlcik7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0eCwgInB1c2ggcGFja2V0IHNlcW51bTolIiBHX0dVSU5UMTZfRk9STUFUCi0gICAgICAgICIgZnJvbSBhIG1hc3RlciBzdHJlYW0gc3NyYzogJSIgR19HVUlOVDMyX0ZPUk1BVCwgc2VxbnVtLCBzc3JjKTsKLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKHJ0eC0+c3JjcGFkLCBidWZmZXIpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3JlY2VpdmVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cFJ0eFJlY2VpdmUgKnJ0eCA9IEdTVF9SVFBfUlRYX1JFQ0VJVkUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BBWUxPQURfVFlQRV9NQVA6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0gICAgICBnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJ0eC0+cnR4X3B0X21hcF9zdHJ1Y3R1cmUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVNX1JUWF9SRVFVRVNUUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHgtPm51bV9ydHhfcmVxdWVzdHMpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlVNX1JUWF9QQUNLRVRTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0eC0+bnVtX3J0eF9wYWNrZXRzKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05VTV9SVFhfQVNTT0NfUEFDS0VUUzoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHgtPm51bV9ydHhfYXNzb2NfcGFja2V0cyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1zdHJ1Y3R1cmVfdG9faGFzaF90YWJsZV9pbnYgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgZ3BvaW50ZXIgaGFzaCkKLXsKLSAgY29uc3QgZ2NoYXIgKmZpZWxkX3N0cjsKLSAgZ3VpbnQgZmllbGRfdWludDsKLSAgZ3VpbnQgdmFsdWVfdWludDsKLQotICBmaWVsZF9zdHIgPSBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpOwotICBmaWVsZF91aW50ID0gYXRvaSAoZmllbGRfc3RyKTsKLSAgdmFsdWVfdWludCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgZ19oYXNoX3RhYmxlX2luc2VydCAoKEdIYXNoVGFibGUgKikgaGFzaCwgR1VJTlRfVE9fUE9JTlRFUiAodmFsdWVfdWludCksCi0gICAgICBHVUlOVF9UT19QT0lOVEVSIChmaWVsZF91aW50KSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3J0eF9yZWNlaXZlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBSdHhSZWNlaXZlICpydHggPSBHU1RfUlRQX1JUWF9SRUNFSVZFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQVlMT0FEX1RZUEVfTUFQOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgaWYgKHJ0eC0+cnR4X3B0X21hcF9zdHJ1Y3R1cmUpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocnR4LT5ydHhfcHRfbWFwX3N0cnVjdHVyZSk7Ci0gICAgICBydHgtPnJ0eF9wdF9tYXBfc3RydWN0dXJlID0gZ192YWx1ZV9kdXBfYm94ZWQgKHZhbHVlKTsKLSAgICAgIGdfaGFzaF90YWJsZV9yZW1vdmVfYWxsIChydHgtPnJ0eF9wdF9tYXApOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChydHgtPnJ0eF9wdF9tYXBfc3RydWN0dXJlLAotICAgICAgICAgIHN0cnVjdHVyZV90b19oYXNoX3RhYmxlX2ludiwgcnR4LT5ydHhfcHRfbWFwKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfcnR4X3JlY2VpdmVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFJ0cFJ0eFJlY2VpdmUgKnJ0eDsKLQotICBydHggPSBHU1RfUlRQX1JUWF9SRUNFSVZFIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPQotICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9ydHBfcnR4X3JlY2VpdmVfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlCi0gICAgICAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfcnR4X3JlY2VpdmVfcmVzZXQgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9ydHhfcmVjZWl2ZV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3J0cF9ydHhfcmVjZWl2ZV9kZWJ1ZywgInJ0cHJ0eHJlY2VpdmUiLCAwLAotICAgICAgInJ0cCByZXRyYW5zbWlzc2lvbiByZWNlaXZlciIpOwotCi0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRwcnR4cmVjZWl2ZSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9SVFBfUlRYX1JFQ0VJVkUpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5oIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwcnR4cmVjZWl2ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjZjNGE5Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHJlY2VpdmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qIFJUUCBSZXRyYW5zbWlzc2lvbiByZWNlaXZlciBlbGVtZW50IGZvciBHU3RyZWFtZXIKLSAqCi0gKiBnc3RydHBydHhyZWNlaXZlLmg6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKiAgIEBhdXRob3IgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfUlRYX1JFQ0VJVkVfSF9fCi0jZGVmaW5lIF9fR1NUX1JUUF9SVFhfUkVDRUlWRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0jZGVmaW5lIEdTVF9UWVBFX1JUUF9SVFhfUkVDRUlWRSAoZ3N0X3J0cF9ydHhfcmVjZWl2ZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfUlRQX1JUWF9SRUNFSVZFKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9SVFhfUkVDRUlWRSwgR3N0UnRwUnR4UmVjZWl2ZSkpCi0jZGVmaW5lIEdTVF9SVFBfUlRYX1JFQ0VJVkVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9SVFhfUkVDRUlWRSwgR3N0UnRwUnR4UmVjZWl2ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX1JUUF9SVFhfUkVDRUlWRV9HRVRfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX1JUUF9SVFhfUkVDRUlWRSwgR3N0UnRwUnR4UmVjZWl2ZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9SVFhfUkVDRUlWRShvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9SVFBfUlRYX1JFQ0VJVkUpKQotI2RlZmluZSBHU1RfSVNfUlRQX1JUWF9SRUNFSVZFX0NMQVNTKG9iaikgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1JUWF9SRUNFSVZFKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBSdHhSZWNlaXZlIEdzdFJ0cFJ0eFJlY2VpdmU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwUnR4UmVjZWl2ZUNsYXNzIEdzdFJ0cFJ0eFJlY2VpdmVDbGFzczsKLQotc3RydWN0IF9Hc3RSdHBSdHhSZWNlaXZlCi17Ci0gIEdzdEVsZW1lbnQgZWxlbWVudDsKLQotICAvKiBwYWQgKi8KLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RQYWQgKnNyY3BhZDsKLQotICAvKiByZXRyaWV2ZSBhc3NvY2lhdGVkIG1hc3RlciBzdHJlYW0gZnJvbSBydHggc3RyZWFtCi0gICAqIGl0IGFsc28gd29ya3MgdG8gcmV0cmlldmUgcnR4IHN0cmVhbSBmcm9tIG1hc3RlciBzdHJlYW0KLSAgICogYXMgd2UgbWFrZSBzdXJlIGFsbCBzc3JjIGFyZSB1bmlxdWUgKi8KLSAgR0hhc2hUYWJsZSAqc3NyYzJfc3NyYzFfbWFwOwotCi0gIC8qIGNvbnRhaW5zIHNlcW51bSBvZiByZXF1ZXN0IHBhY2tldHMgb2Ygd2hvbSB0aGVpciBzc3JjIGhhdmUKLSAgICogbm90IGJlZW4gYXNzb2NpYXRlZCB0byBhIHJ0eCBzdHJlYW0geWV0ICovCi0gIEdIYXNoVGFibGUgKnNlcW51bV9zc3JjMV9tYXA7Ci0KLSAgLyogcnR4IHB0ICh1aW50KSAtPiBvcmlnaW4gcHQgKHVpbnQpICovCi0gIEdIYXNoVGFibGUgKnJ0eF9wdF9tYXA7Ci0gIC8qIG9yaWdpbiBwdCAoc3RyaW5nKSAtPiBydHggcHQgKHVpbnQpICovCi0gIEdzdFN0cnVjdHVyZSAqcnR4X3B0X21hcF9zdHJ1Y3R1cmU7Ci0KLSAgLyogc3RhdGlzdGljcyAqLwotICBndWludCBudW1fcnR4X3JlcXVlc3RzOwotICBndWludCBudW1fcnR4X3BhY2tldHM7Ci0gIGd1aW50IG51bV9ydHhfYXNzb2NfcGFja2V0czsKLQotICBHc3RDbG9ja1RpbWUgbGFzdF90aW1lOwotfTsKLQotc3RydWN0IF9Hc3RSdHBSdHhSZWNlaXZlQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLQotR1R5cGUgZ3N0X3J0cF9ydHhfcmVjZWl2ZV9nZXRfdHlwZSAodm9pZCk7Ci1nYm9vbGVhbiBnc3RfcnRwX3J0eF9yZWNlaXZlX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1JUUF9SVFhfUkVDRUlWRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYyBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZiNDAwZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NTAgKzAsMCBAQAotLyogUlRQIFJldHJhbnNtaXNzaW9uIHNlbmRlciBlbGVtZW50IGZvciBHU3RyZWFtZXIKLSAqCi0gKiBnc3RydHBydHhzZW5kLmM6Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKiAgIEBhdXRob3IgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwcnR4c2VuZAotICoKLSAqIFNlZSAjR3N0UnRwUnR4UmVjZWl2ZSBmb3IgZXhhbXBsZXMKLSAqIAotICogVGhlIHB1cnBvc2Ugb2YgdGhlIHNlbmRlciBSVFggb2JqZWN0IGlzIHRvIGtlZXAgYSBoaXN0b3J5IG9mIFJUUCBwYWNrZXRzIHVwCi0gKiB0byBhIGNvbmZpZ3VyYWJsZSBsaW1pdCAobWF4LXNpemUtdGltZSBvciBtYXgtc2l6ZS1wYWNrZXRzKS4gSXQgd2lsbCBsaXN0ZW4KLSAqIGZvciB1cHN0cmVhbSBjdXN0b20gcmV0cmFuc21pc3Npb24gZXZlbnRzIChHc3RSVFBSZXRyYW5zbWlzc2lvblJlcXVlc3QpIHRoYXQKLSAqIGNvbWVzIGZyb20gZG93bnN0cmVhbSAoI0dzdFJ0cFNlc3Npb24pLiBXaGVuIHJlY2VpdmluZyBhIHJlcXVlc3QgaXQgd2lsbAotICogbG9vayB1cCB0aGUgcmVxdWVzdGVkIHNlcW51bSBpbiBpdHMgbGlzdCBvZiBzdG9yZWQgcGFja2V0cy4gSWYgdGhlIHBhY2tldAotICogaXMgYXZhaWxhYmxlLCBpdCB3aWxsIGNyZWF0ZSBhIFJUWCBwYWNrZXQgYWNjb3JkaW5nIHRvIFJGQyA0NTg4IGFuZCBzZW5kCi0gKiB0aGlzIGFzIGFuIGF1eGlsaWFyeSBzdHJlYW0uIFJUWCBpcyBTU1JDLW11bHRpcGxleGVkCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBydHhzZW5kLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydHBfcnR4X3NlbmRfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF9ydHhfc2VuZF9kZWJ1ZwotCi0jZGVmaW5lIERFRkFVTFRfUlRYX1BBWUxPQURfVFlQRSAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfVElNRSAgICAwCi0jZGVmaW5lIERFRkFVTFRfTUFYX1NJWkVfUEFDS0VUUyAxMDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfU1NSQ19NQVAsCi0gIFBST1BfUEFZTE9BRF9UWVBFX01BUCwKLSAgUFJPUF9NQVhfU0laRV9USU1FLAotICBQUk9QX01BWF9TSVpFX1BBQ0tFVFMsCi0gIFBST1BfTlVNX1JUWF9SRVFVRVNUUywKLSAgUFJPUF9OVU1fUlRYX1BBQ0tFVFMKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwLCAiICJjbG9jay1yYXRlID0gKGludCkgWzEsIE1BWF0iKQotICAgICk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3J0eF9zZW5kX3F1ZXVlX2NoZWNrX2Z1bGwgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLAotICAgIGd1aW50IHZpc2libGUsIGd1aW50IGJ5dGVzLCBndWludDY0IHRpbWUsIGdwb2ludGVyIGNoZWNrZGF0YSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3J0eF9zZW5kX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9ydHhfc2VuZF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfcnR4X3NlbmRfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3J0eF9zZW5kX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0cF9ydHhfc2VuZF9zcmNfbG9vcCAoR3N0UnRwUnR4U2VuZCAqIHJ0eCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0cF9ydHhfc2VuZF9hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3RfcnRwX3J0eF9zZW5kX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfcnR4X3NlbmRfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9ydHhfc2VuZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX3J0eF9zZW5kX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotR19ERUZJTkVfVFlQRSAoR3N0UnRwUnR4U2VuZCwgZ3N0X3J0cF9ydHhfc2VuZCwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50MTYgc2VxbnVtOwotICBndWludDMyIHRpbWVzdGFtcDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci19IEJ1ZmZlclF1ZXVlSXRlbTsKLQotc3RhdGljIHZvaWQKLWJ1ZmZlcl9xdWV1ZV9pdGVtX2ZyZWUgKEJ1ZmZlclF1ZXVlSXRlbSAqIGl0ZW0pCi17Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGl0ZW0tPmJ1ZmZlcik7Ci0gIGdfc2xpY2VfZnJlZSAoQnVmZmVyUXVldWVJdGVtLCBpdGVtKTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQzMiBydHhfc3NyYzsKLSAgZ3VpbnQxNiBzZXFudW1fYmFzZSwgbmV4dF9zZXFudW07Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLQotICAvKiBoaXN0b3J5IG9mIHJ0cCBwYWNrZXRzICovCi0gIEdTZXF1ZW5jZSAqcXVldWU7Ci19IFNTUkNSdHhEYXRhOwotCi1zdGF0aWMgU1NSQ1J0eERhdGEgKgotc3NyY19ydHhfZGF0YV9uZXcgKGd1aW50MzIgcnR4X3NzcmMpCi17Ci0gIFNTUkNSdHhEYXRhICpkYXRhID0gZ19zbGljZV9uZXcwIChTU1JDUnR4RGF0YSk7Ci0KLSAgZGF0YS0+cnR4X3NzcmMgPSBydHhfc3NyYzsKLSAgZGF0YS0+bmV4dF9zZXFudW0gPSBkYXRhLT5zZXFudW1fYmFzZSA9IGdfcmFuZG9tX2ludF9yYW5nZSAoMCwgR19NQVhVSU5UMTYpOwotICBkYXRhLT5xdWV1ZSA9IGdfc2VxdWVuY2VfbmV3ICgoR0Rlc3Ryb3lOb3RpZnkpIGJ1ZmZlcl9xdWV1ZV9pdGVtX2ZyZWUpOwotCi0gIHJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgdm9pZAotc3NyY19ydHhfZGF0YV9mcmVlIChTU1JDUnR4RGF0YSAqIGRhdGEpCi17Ci0gIGdfc2VxdWVuY2VfZnJlZSAoZGF0YS0+cXVldWUpOwotICBnX3NsaWNlX2ZyZWUgKFNTUkNSdHhEYXRhLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3NlbmRfY2xhc3NfaW5pdCAoR3N0UnRwUnR4U2VuZENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX3J0eF9zZW5kX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9ydHhfc2VuZF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3J0cF9ydHhfc2VuZF9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NTUkNfTUFQLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgic3NyYy1tYXAiLCAiU1NSQyBNYXAiLAotICAgICAgICAgICJNYXAgb2YgU1NSQ3MgdG8gdGhlaXIgcmV0cmFuc21pc3Npb24gU1NSQ3MgZm9yIFNTUkMtbXVsdGlwbGV4ZWQgbW9kZSIKLSAgICAgICAgICAiIChkZWZhdWx0ID0gcmFuZG9tKSIsIEdTVF9UWVBFX1NUUlVDVFVSRSwKLSAgICAgICAgICBHX1BBUkFNX1dSSVRBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUEFZTE9BRF9UWVBFX01BUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoInBheWxvYWQtdHlwZS1tYXAiLCAiUGF5bG9hZCBUeXBlIE1hcCIsCi0gICAgICAgICAgIk1hcCBvZiBvcmlnaW5hbCBwYXlsb2FkIHR5cGVzIHRvIHRoZWlyIHJldHJhbnNtaXNzaW9uIHBheWxvYWQgdHlwZXMiLAotICAgICAgICAgIEdTVF9UWVBFX1NUUlVDVFVSRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtc2l6ZS10aW1lIiwgIk1heCBTaXplIFRpbWUiLAotICAgICAgICAgICJBbW91bnQgb2YgbXMgdG8gcXVldWUgKDAgPSB1bmxpbWl0ZWQpIiwgMCwgR19NQVhVSU5ULAotICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfVElNRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfU0laRV9QQUNLRVRTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtc2l6ZS1wYWNrZXRzIiwgIk1heCBTaXplIFBhY2tldHMiLAotICAgICAgICAgICJBbW91bnQgb2YgcGFja2V0cyB0byBxdWV1ZSAoMCA9IHVubGltaXRlZCkiLCAwLCBHX01BWElOVDE2LAotICAgICAgICAgIERFRkFVTFRfTUFYX1NJWkVfUEFDS0VUUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9SVFhfUkVRVUVTVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm51bS1ydHgtcmVxdWVzdHMiLCAiTnVtIFJUWCBSZXF1ZXN0cyIsCi0gICAgICAgICAgIk51bWJlciBvZiByZXRyYW5zbWlzc2lvbiBldmVudHMgcmVjZWl2ZWQiLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgMCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9SVFhfUEFDS0VUUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibnVtLXJ0eC1wYWNrZXRzIiwgIk51bSBSVFggUGFja2V0cyIsCi0gICAgICAgICAgIiBOdW1iZXIgb2YgcmV0cmFuc21pc3Npb24gcGFja2V0cyBzZW50IiwgMCwgR19NQVhVSU5ULAotICAgICAgICAgIDAsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlJUUCBSZXRyYW5zbWlzc2lvbiBTZW5kZXIiLCAiQ29kZWMiLAotICAgICAgIlJldHJhbnNtaXQgUlRQIHBhY2tldHMgd2hlbiBuZWVkZWQsIGFjY29yZGluZyB0byBSRkM0NTg4IiwKLSAgICAgICJKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4iKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcnR4X3NlbmRfY2hhbmdlX3N0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3NlbmRfcmVzZXQgKEdzdFJ0cFJ0eFNlbmQgKiBydHgpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHJ0eC0+cXVldWUpOwotICBnX2hhc2hfdGFibGVfcmVtb3ZlX2FsbCAocnR4LT5zc3JjX2RhdGEpOwotICBnX2hhc2hfdGFibGVfcmVtb3ZlX2FsbCAocnR4LT5ydHhfc3NyY3MpOwotICBydHgtPm51bV9ydHhfcmVxdWVzdHMgPSAwOwotICBydHgtPm51bV9ydHhfcGFja2V0cyA9IDA7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfc2VuZF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UnRwUnR4U2VuZCAqcnR4ID0gR1NUX1JUUF9SVFhfU0VORCAob2JqZWN0KTsKLQotICBnX2hhc2hfdGFibGVfdW5yZWYgKHJ0eC0+c3NyY19kYXRhKTsKLSAgZ19oYXNoX3RhYmxlX3VucmVmIChydHgtPnJ0eF9zc3Jjcyk7Ci0gIGlmIChydHgtPmV4dGVybmFsX3NzcmNfbWFwKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocnR4LT5leHRlcm5hbF9zc3JjX21hcCk7Ci0gIGdfaGFzaF90YWJsZV91bnJlZiAocnR4LT5ydHhfcHRfbWFwKTsKLSAgaWYgKHJ0eC0+cnR4X3B0X21hcF9zdHJ1Y3R1cmUpCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChydHgtPnJ0eF9wdF9tYXBfc3RydWN0dXJlKTsKLSAgZ19vYmplY3RfdW5yZWYgKHJ0eC0+cXVldWUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChnc3RfcnRwX3J0eF9zZW5kX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfc2VuZF9pbml0IChHc3RSdHBSdHhTZW5kICogcnR4KQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChydHgpOwotCi0gIHJ0eC0+c3JjcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzcmMiKSwgInNyYyIpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChydHgtPnNyY3BhZCk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04gKHJ0eC0+c3JjcGFkKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHJ0eC0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfcnR4X3NlbmRfc3JjX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAocnR4LT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9ydHhfc2VuZF9hY3RpdmF0ZV9tb2RlKSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChydHgpLCBydHgtPnNyY3BhZCk7Ci0KLSAgcnR4LT5zaW5rcGFkID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzaW5rIiksICJzaW5rIik7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0NBUFMgKHJ0eC0+c2lua3BhZCk7Ci0gIEdTVF9QQURfU0VUX1BST1hZX0FMTE9DQVRJT04gKHJ0eC0+c2lua3BhZCk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChydHgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9ydHhfc2VuZF9zaW5rX2V2ZW50KSk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChydHgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9ydHhfc2VuZF9jaGFpbikpOwotICBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uIChydHgtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9ydHhfc2VuZF9jaGFpbl9saXN0KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChydHgpLCBydHgtPnNpbmtwYWQpOwotCi0gIHJ0eC0+cXVldWUgPSBnc3RfZGF0YV9xdWV1ZV9uZXcgKGdzdF9ydHBfcnR4X3NlbmRfcXVldWVfY2hlY2tfZnVsbCwgTlVMTCwKLSAgICAgIE5VTEwsIHJ0eCk7Ci0gIHJ0eC0+c3NyY19kYXRhID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCwKLSAgICAgIE5VTEwsIChHRGVzdHJveU5vdGlmeSkgc3NyY19ydHhfZGF0YV9mcmVlKTsKLSAgcnR4LT5ydHhfc3NyY3MgPSBnX2hhc2hfdGFibGVfbmV3IChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCk7Ci0gIHJ0eC0+cnR4X3B0X21hcCA9IGdfaGFzaF90YWJsZV9uZXcgKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsKTsKLQotICBydHgtPm1heF9zaXplX3RpbWUgPSBERUZBVUxUX01BWF9TSVpFX1RJTUU7Ci0gIHJ0eC0+bWF4X3NpemVfcGFja2V0cyA9IERFRkFVTFRfTUFYX1NJWkVfUEFDS0VUUzsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3NlbmRfc2V0X2ZsdXNoaW5nIChHc3RSdHBSdHhTZW5kICogcnR4LCBnYm9vbGVhbiBmbHVzaCkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICBnc3RfZGF0YV9xdWV1ZV9zZXRfZmx1c2hpbmcgKHJ0eC0+cXVldWUsIGZsdXNoKTsKLSAgZ3N0X2RhdGFfcXVldWVfZmx1c2ggKHJ0eC0+cXVldWUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3J0eF9zZW5kX3F1ZXVlX2NoZWNrX2Z1bGwgKEdzdERhdGFRdWV1ZSAqIHF1ZXVlLAotICAgIGd1aW50IHZpc2libGUsIGd1aW50IGJ5dGVzLCBndWludDY0IHRpbWUsIGdwb2ludGVyIGNoZWNrZGF0YSkKLXsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfZGF0YV9xdWV1ZV9pdGVtX2ZyZWUgKGdwb2ludGVyIGl0ZW0pCi17Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKmRhdGEgPSBpdGVtOwotICBpZiAoZGF0YS0+b2JqZWN0KQotICAgIGdzdF9taW5pX29iamVjdF91bnJlZiAoZGF0YS0+b2JqZWN0KTsKLSAgZ19zbGljZV9mcmVlIChHc3REYXRhUXVldWVJdGVtLCBkYXRhKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3J0eF9zZW5kX3B1c2hfb3V0IChHc3RSdHBSdHhTZW5kICogcnR4LCBncG9pbnRlciBvYmplY3QpCi17Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKmRhdGE7Ci0gIGdib29sZWFuIHN1Y2Nlc3M7Ci0KLSAgZGF0YSA9IGdfc2xpY2VfbmV3MCAoR3N0RGF0YVF1ZXVlSXRlbSk7Ci0gIGRhdGEtPm9iamVjdCA9IEdTVF9NSU5JX09CSkVDVCAob2JqZWN0KTsKLSAgZGF0YS0+c2l6ZSA9IDE7Ci0gIGRhdGEtPmR1cmF0aW9uID0gMTsKLSAgZGF0YS0+dmlzaWJsZSA9IFRSVUU7Ci0gIGRhdGEtPmRlc3Ryb3kgPSBnc3RfcnRwX3J0eF9kYXRhX3F1ZXVlX2l0ZW1fZnJlZTsKLQotICBzdWNjZXNzID0gZ3N0X2RhdGFfcXVldWVfcHVzaCAocnR4LT5xdWV1ZSwgZGF0YSk7Ci0KLSAgaWYgKCFzdWNjZXNzKQotICAgIGRhdGEtPmRlc3Ryb3kgKGRhdGEpOwotCi0gIHJldHVybiBzdWNjZXNzOwotfQotCi1zdGF0aWMgZ3VpbnQzMgotZ3N0X3J0cF9ydHhfc2VuZF9jaG9vc2Vfc3NyYyAoR3N0UnRwUnR4U2VuZCAqIHJ0eCwgZ3VpbnQzMiBjaG9pY2UsCi0gICAgZ2Jvb2xlYW4gY29uc2lkZXJfY2hvaWNlKQotewotICBndWludDMyIHNzcmMgPSBjb25zaWRlcl9jaG9pY2UgPyBjaG9pY2UgOiBnX3JhbmRvbV9pbnQgKCk7Ci0KLSAgLyogbWFrZSBzdXJlIHRvIGJlIGRpZmZlcmVudCB0aGFuIGFueSBvdGhlciAqLwotICB3aGlsZSAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zIChydHgtPnNzcmNfZGF0YSwgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpIHx8Ci0gICAgICBnX2hhc2hfdGFibGVfY29udGFpbnMgKHJ0eC0+cnR4X3NzcmNzLCBHVUlOVF9UT19QT0lOVEVSIChzc3JjKSkpIHsKLSAgICBzc3JjID0gZ19yYW5kb21faW50ICgpOwotICB9Ci0KLSAgcmV0dXJuIHNzcmM7Ci19Ci0KLXN0YXRpYyBTU1JDUnR4RGF0YSAqCi1nc3RfcnRwX3J0eF9zZW5kX2dldF9zc3JjX2RhdGEgKEdzdFJ0cFJ0eFNlbmQgKiBydHgsIGd1aW50MzIgc3NyYykKLXsKLSAgU1NSQ1J0eERhdGEgKmRhdGE7Ci0gIGd1aW50MzIgcnR4X3NzcmMgPSAwOwotICBnYm9vbGVhbiBjb25zaWRlciA9IEZBTFNFOwotCi0gIGlmIChHX1VOTElLRUxZICghZ19oYXNoX3RhYmxlX2NvbnRhaW5zIChydHgtPnNzcmNfZGF0YSwKLSAgICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpKSkgewotICAgIGlmIChydHgtPmV4dGVybmFsX3NzcmNfbWFwKSB7Ci0gICAgICBnY2hhciAqc3NyY19zdHI7Ci0gICAgICBzc3JjX3N0ciA9IGdfc3RyZHVwX3ByaW50ZiAoIiUiIEdfR1VJTlQzMl9GT1JNQVQsIHNzcmMpOwotICAgICAgY29uc2lkZXIgPSBnc3Rfc3RydWN0dXJlX2dldF91aW50IChydHgtPmV4dGVybmFsX3NzcmNfbWFwLCBzc3JjX3N0ciwKLSAgICAgICAgICAmcnR4X3NzcmMpOwotICAgICAgZ19mcmVlIChzc3JjX3N0cik7Ci0gICAgfQotICAgIHJ0eF9zc3JjID0gZ3N0X3J0cF9ydHhfc2VuZF9jaG9vc2Vfc3NyYyAocnR4LCBydHhfc3NyYywgY29uc2lkZXIpOwotICAgIGRhdGEgPSBzc3JjX3J0eF9kYXRhX25ldyAocnR4X3NzcmMpOwotICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKHJ0eC0+c3NyY19kYXRhLCBHVUlOVF9UT19QT0lOVEVSIChzc3JjKSwgZGF0YSk7Ci0gICAgZ19oYXNoX3RhYmxlX2luc2VydCAocnR4LT5ydHhfc3NyY3MsIEdVSU5UX1RPX1BPSU5URVIgKHJ0eF9zc3JjKSwKLSAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpOwotICB9IGVsc2UgewotICAgIGRhdGEgPSBnX2hhc2hfdGFibGVfbG9va3VwIChydHgtPnNzcmNfZGF0YSwgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpOwotICB9Ci0gIHJldHVybiBkYXRhOwotfQotCi0vKiBDb3B5IGZpeGVkIGhlYWRlciBhbmQgZXh0ZW5zaW9uLiBBZGQgT1NOIGJlZm9yZSB0byBjb3B5IHBheWxvYWQKLSAqIENvcHkgbWVtb3J5IHRvIGF2b2lkIHRvIG1hbnVhbGx5IGNvcHkgZWFjaCBydHAgYnVmZmVyIGZpZWxkLgotICovCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF9ydHBfcnR4X2J1ZmZlcl9uZXcgKEdzdFJ0cFJ0eFNlbmQgKiBydHgsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TWVtb3J5ICptZW0gPSBOVUxMOwotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgR3N0UlRQQnVmZmVyIG5ld19ydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBHc3RCdWZmZXIgKm5ld19idWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50IHBheWxvYWRfbGVuID0gMDsKLSAgU1NSQ1J0eERhdGEgKmRhdGE7Ci0gIGd1aW50MzIgc3NyYzsKLSAgZ3VpbnQxNiBzZXFudW07Ci0gIGd1aW50OCBmbXRwOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHApOwotCi0gIC8qIGdldCBuZWVkZWQgZGF0YSBmcm9tIEdzdFJ0cFJ0eFNlbmQgKi8KLSAgc3NyYyA9IGdzdF9ydHBfYnVmZmVyX2dldF9zc3JjICgmcnRwKTsKLSAgZGF0YSA9IGdzdF9ydHBfcnR4X3NlbmRfZ2V0X3NzcmNfZGF0YSAocnR4LCBzc3JjKTsKLSAgc3NyYyA9IGRhdGEtPnJ0eF9zc3JjOwotICBzZXFudW0gPSBkYXRhLT5uZXh0X3NlcW51bSsrOwotICBmbXRwID0gR1BPSU5URVJfVE9fVUlOVCAoZ19oYXNoX3RhYmxlX2xvb2t1cCAocnR4LT5ydHhfcHRfbWFwLAotICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3R5cGUgKCZydHApKSkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0eCwKLSAgICAgICJyZXRyYW5zbWl0IHNlcW51bTogJSIgR19HVUlOVDE2X0ZPUk1BVCAiLCBzc3JjOiAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgc2VxbnVtLCBzc3JjKTsKLQotICAvKiBnc3RfcnRwX2J1ZmZlcl9tYXAgZG9lcyBub3QgbWFwIHRoZSBwYXlsb2FkIHNvIGRvIGl0IG5vdyAqLwotICBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0KLSAgLyogY29weSBmaXhlZCBoZWFkZXIgKi8KLSAgbWVtID0gZ3N0X21lbW9yeV9jb3B5IChydHAubWFwWzBdLm1lbW9yeSwgMCwgcnRwLnNpemVbMF0pOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKG5ld19idWZmZXIsIG1lbSk7Ci0KLSAgLyogY29weSBleHRlbnNpb24gaWYgYW55ICovCi0gIGlmIChydHAuc2l6ZVsxXSkgewotICAgIG1lbSA9IGdzdF9tZW1vcnlfY29weSAocnRwLm1hcFsxXS5tZW1vcnksIDAsIHJ0cC5zaXplWzFdKTsKLSAgICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKG5ld19idWZmZXIsIG1lbSk7Ci0gIH0KLQotICAvKiBjb3B5IHBheWxvYWQgYW5kIGFkZCBPU04ganVzdCBiZWZvcmUgKi8KLSAgcGF5bG9hZF9sZW4gPSAyICsgcnRwLnNpemVbMl07Ci0gIG1lbSA9IGdzdF9hbGxvY2F0b3JfYWxsb2MgKE5VTEwsIHBheWxvYWRfbGVuLCBOVUxMKTsKLQotICBnc3RfbWVtb3J5X21hcCAobWVtLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgR1NUX1dSSVRFX1VJTlQxNl9CRSAobWFwLmRhdGEsIGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKCZydHApKTsKLSAgaWYgKHJ0cC5zaXplWzJdKQotICAgIG1lbWNweSAobWFwLmRhdGEgKyAyLCBydHAuZGF0YVsyXSwgcnRwLnNpemVbMl0pOwotICBnc3RfbWVtb3J5X3VubWFwIChtZW0sICZtYXApOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKG5ld19idWZmZXIsIG1lbSk7Ci0KLSAgLyogZXZlcnl0aGluZyBuZWVkZWQgaXMgY29waWVkICovCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICAvKiBzZXQgc3NyYywgc2VxbnVtIGFuZCBmbXRwICovCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAobmV3X2J1ZmZlciwgR1NUX01BUF9XUklURSwgJm5ld19ydHApOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc3NyYyAoJm5ld19ydHAsIHNzcmMpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxICgmbmV3X3J0cCwgc2VxbnVtKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJm5ld19ydHAsIGZtdHApOwotICAvKiBSRkMgNDU4ODogbGV0IG90aGVyIGVsZW1lbnRzIGRvIHRoZSBwYWRkaW5nLCBhcyBub3JtYWwgKi8KLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3BhZGRpbmcgKCZuZXdfcnRwLCBGQUxTRSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmbmV3X3J0cCk7Ci0KLSAgLyogQ29weSBvdmVyIHRpbWVzdGFtcHMgKi8KLSAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG5ld19idWZmZXIsIGJ1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMsIDAsIC0xKTsKLQotICByZXR1cm4gbmV3X2J1ZmZlcjsKLX0KLQotc3RhdGljIGdpbnQKLWJ1ZmZlcl9xdWV1ZV9pdGVtc19jbXAgKEJ1ZmZlclF1ZXVlSXRlbSAqIGEsIEJ1ZmZlclF1ZXVlSXRlbSAqIGIsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICAvKiBnc3RfcnRwX2J1ZmZlcl9jb21wYXJlX3NlcW51bSByZXR1cm5zIHRoZSBvcHBvc2l0ZSBvZiB3aGF0IHdlIHdhbnQsCi0gICAqIGl0IHJldHVybnMgbmVnYXRpdmUgd2hlbiBzZXFudW0xID4gc2VxbnVtMiBhbmQgd2Ugd2FudCBuZWdhdGl2ZQotICAgKiB3aGVuIGIgPiBhLCBpLmUuIGEgaXMgc21hbGxlciwgc28gaXQgY29tZXMgZmlyc3QgaW4gdGhlIHNlcXVlbmNlICovCi0gIHJldHVybiBnc3RfcnRwX2J1ZmZlcl9jb21wYXJlX3NlcW51bSAoYi0+c2VxbnVtLCBhLT5zZXFudW0pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfcnR4X3NlbmRfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwUnR4U2VuZCAqcnR4ID0gR1NUX1JUUF9SVFhfU0VORCAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTToKLSAgICB7Ci0gICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotCi0gICAgICAvKiBUaGlzIGV2ZW50IHVzdWFsbHkgY29tZXMgZnJvbSB0aGUgZG93bnN0cmVhbSBnc3RydHBzZXNzaW9uICovCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIkdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCIpKSB7Ci0gICAgICAgIGd1aW50IHNlcW51bSA9IDA7Ci0gICAgICAgIGd1aW50IHNzcmMgPSAwOwotICAgICAgICBHc3RCdWZmZXIgKnJ0eF9idWYgPSBOVUxMOwotCi0gICAgICAgIC8qIHJldHJpZXZlIHNlcW51bSBvZiB0aGUgcGFja2V0IHRoYXQgbmVlZCB0byBiZSByZXRyYW5zbWl0dGVkICovCi0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAocywgInNlcW51bSIsICZzZXFudW0pKQotICAgICAgICAgIHNlcW51bSA9IC0xOwotCi0gICAgICAgIC8qIHJldHJpZXZlIHNzcmMgb2YgdGhlIHBhY2tldCB0aGF0IG5lZWQgdG8gYmUgcmV0cmFuc21pdHRlZCAqLwotICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzc3JjIiwgJnNzcmMpKQotICAgICAgICAgIHNzcmMgPSAtMTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChydHgsCi0gICAgICAgICAgICAicmVxdWVzdCBzZXFudW06ICUiIEdfR1VJTlQzMl9GT1JNQVQgIiwgc3NyYzogJSIgR19HVUlOVDMyX0ZPUk1BVCwKLSAgICAgICAgICAgIHNlcW51bSwgc3NyYyk7Ci0KLSAgICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgICAvKiBjaGVjayBpZiByZXF1ZXN0IGlzIGZvciB1cyAqLwotICAgICAgICBpZiAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zIChydHgtPnNzcmNfZGF0YSwgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpKSB7Ci0gICAgICAgICAgU1NSQ1J0eERhdGEgKmRhdGE7Ci0gICAgICAgICAgR1NlcXVlbmNlSXRlciAqaXRlcjsKLSAgICAgICAgICBCdWZmZXJRdWV1ZUl0ZW0gc2VhcmNoX2l0ZW07Ci0KLSAgICAgICAgICAvKiB1cGRhdGUgc3RhdGlzdGljcyAqLwotICAgICAgICAgICsrcnR4LT5udW1fcnR4X3JlcXVlc3RzOwotCi0gICAgICAgICAgZGF0YSA9IGdzdF9ydHBfcnR4X3NlbmRfZ2V0X3NzcmNfZGF0YSAocnR4LCBzc3JjKTsKLQotICAgICAgICAgIHNlYXJjaF9pdGVtLnNlcW51bSA9IHNlcW51bTsKLSAgICAgICAgICBpdGVyID0gZ19zZXF1ZW5jZV9sb29rdXAgKGRhdGEtPnF1ZXVlLCAmc2VhcmNoX2l0ZW0sCi0gICAgICAgICAgICAgIChHQ29tcGFyZURhdGFGdW5jKSBidWZmZXJfcXVldWVfaXRlbXNfY21wLCBOVUxMKTsKLSAgICAgICAgICBpZiAoaXRlcikgewotICAgICAgICAgICAgQnVmZmVyUXVldWVJdGVtICppdGVtID0gZ19zZXF1ZW5jZV9nZXQgKGl0ZXIpOwotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnR4LCAiZm91bmQgJSIgR19HVUlOVDE2X0ZPUk1BVCwgaXRlbS0+c2VxbnVtKTsKLSAgICAgICAgICAgIHJ0eF9idWYgPSBnc3RfcnRwX3J0eF9idWZmZXJfbmV3IChydHgsIGl0ZW0tPmJ1ZmZlcik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotCi0gICAgICAgIGlmIChydHhfYnVmKQotICAgICAgICAgIGdzdF9ydHBfcnR4X3NlbmRfcHVzaF9vdXQgKHJ0eCwgcnR4X2J1Zik7Ci0KLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0KLSAgICAgICAgLyogVGhpcyBldmVudCB1c3VhbGx5IGNvbWVzIGZyb20gdGhlIGRvd25zdHJlYW0gZ3N0cnRwc2Vzc2lvbiAqLwotICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiR3N0UlRQQ29sbGlzaW9uIikpIHsKLSAgICAgICAgZ3VpbnQgc3NyYyA9IDA7Ci0KLSAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAic3NyYyIsICZzc3JjKSkKLSAgICAgICAgICBzc3JjID0gLTE7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnR4LCAiY29sbGlzaW9uIHNzcmM6ICUiIEdfR1VJTlQzMl9GT1JNQVQsIHNzcmMpOwotCi0gICAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLQotICAgICAgICAvKiBjaG9vc2UgYW5vdGhlciBzc3JjIGZvciBvdXIgcmV0cmFuc21pdGVkIHN0cmVhbSAqLwotICAgICAgICBpZiAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zIChydHgtPnJ0eF9zc3JjcywgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpKSB7Ci0gICAgICAgICAgZ3VpbnQgbWFzdGVyX3NzcmM7Ci0gICAgICAgICAgU1NSQ1J0eERhdGEgKmRhdGE7Ci0KLSAgICAgICAgICBtYXN0ZXJfc3NyYyA9IEdQT0lOVEVSX1RPX1VJTlQgKGdfaGFzaF90YWJsZV9sb29rdXAgKHJ0eC0+cnR4X3NzcmNzLAotICAgICAgICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpKTsKLSAgICAgICAgICBkYXRhID0gZ3N0X3J0cF9ydHhfc2VuZF9nZXRfc3NyY19kYXRhIChydHgsIG1hc3Rlcl9zc3JjKTsKLQotICAgICAgICAgIC8qIGNoYW5nZSBydHhfc3NyYyBhbmQgdXBkYXRlIHRoZSByZXZlcnNlIG1hcCAqLwotICAgICAgICAgIGRhdGEtPnJ0eF9zc3JjID0gZ3N0X3J0cF9ydHhfc2VuZF9jaG9vc2Vfc3NyYyAocnR4LCAwLCBGQUxTRSk7Ci0gICAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocnR4LT5ydHhfc3NyY3MsIEdVSU5UX1RPX1BPSU5URVIgKHNzcmMpKTsKLSAgICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0IChydHgtPnJ0eF9zc3JjcywKLSAgICAgICAgICAgICAgR1VJTlRfVE9fUE9JTlRFUiAoZGF0YS0+cnR4X3NzcmMpLAotICAgICAgICAgICAgICBHVUlOVF9UT19QT0lOVEVSIChtYXN0ZXJfc3NyYykpOwotCi0gICAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0KLSAgICAgICAgICAvKiBubyBuZWVkIHRvIGZvcndhcmQgdG8gcGF5bG9hZGVyIGJlY2F1c2Ugd2UgbWFrZSBzdXJlIHRvIGhhdmUKLSAgICAgICAgICAgKiBhIGRpZmZlcmVudCBzc3JjCi0gICAgICAgICAgICovCi0gICAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBpZiBtYXN0ZXIgc3NyYyBoYXMgY29sbGlkZWQsIHJlbW92ZSBpdCBmcm9tIG91ciBkYXRhLCBhcyBpdAotICAgICAgICAgICAqIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGFueSBsb25nZXIgKi8KLSAgICAgICAgICBpZiAoZ19oYXNoX3RhYmxlX2NvbnRhaW5zIChydHgtPnNzcmNfZGF0YSwgR1VJTlRfVE9fUE9JTlRFUiAoc3NyYykpKSB7Ci0gICAgICAgICAgICBTU1JDUnR4RGF0YSAqZGF0YTsKLSAgICAgICAgICAgIGRhdGEgPSBnc3RfcnRwX3J0eF9zZW5kX2dldF9zc3JjX2RhdGEgKHJ0eCwgc3NyYyk7Ci0gICAgICAgICAgICBnX2hhc2hfdGFibGVfcmVtb3ZlIChydHgtPnJ0eF9zc3JjcywKLSAgICAgICAgICAgICAgICBHVUlOVF9UT19QT0lOVEVSIChkYXRhLT5ydHhfc3NyYykpOwotICAgICAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSAocnR4LT5zc3JjX2RhdGEsIEdVSU5UX1RPX1BPSU5URVIgKHNzcmMpKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLQotICAgICAgICAgIC8qIGZvcndhcmQgZXZlbnQgdG8gcGF5bG9hZGVyIGluIGNhc2UgY29sbGlkZWQgc3NyYyBpcwotICAgICAgICAgICAqIG1hc3RlciBzdHJlYW0gKi8KLSAgICAgICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3J0eF9zZW5kX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBSdHhTZW5kICpydHggPSBHU1RfUlRQX1JUWF9TRU5EIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChydHgtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgZ3N0X3J0cF9ydHhfc2VuZF9zZXRfZmx1c2hpbmcgKHJ0eCwgVFJVRSk7Ci0gICAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHJ0eC0+c3JjcGFkKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0eC0+c3JjcGFkLCBldmVudCk7Ci0gICAgICBnc3RfcnRwX3J0eF9zZW5kX3NldF9mbHVzaGluZyAocnR4LCBGQUxTRSk7Ci0gICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHJ0eC0+c3JjcGFkLAotICAgICAgICAgIChHc3RUYXNrRnVuY3Rpb24pIGdzdF9ydHBfcnR4X3NlbmRfc3JjX2xvb3AsIHJ0eCwgTlVMTCk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHJ0eCwgIkdvdCBFT1MgLSBlbnF1ZXVlaW5nIGl0Iik7Ci0gICAgICBnc3RfcnRwX3J0eF9zZW5kX3B1c2hfb3V0IChydHgsIGV2ZW50KTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLSAgICAgIEdzdFN0cnVjdHVyZSAqczsKLSAgICAgIGd1aW50IHNzcmM7Ci0gICAgICBnaW50IHBheWxvYWQ7Ci0gICAgICBncG9pbnRlciBydHhfcGF5bG9hZDsKLSAgICAgIFNTUkNSdHhEYXRhICpkYXRhOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLQotICAgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAic3NyYyIsICZzc3JjKSkKLSAgICAgICAgc3NyYyA9IC0xOwotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJwYXlsb2FkIiwgJnBheWxvYWQpKQotICAgICAgICBwYXlsb2FkID0gLTE7Ci0KLSAgICAgIGlmIChwYXlsb2FkID09IC0xKQotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHJ0eCwgIk5vIHBheWxvYWQgaW4gY2FwcyIpOwotCi0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0gICAgICBkYXRhID0gZ3N0X3J0cF9ydHhfc2VuZF9nZXRfc3NyY19kYXRhIChydHgsIHNzcmMpOwotICAgICAgaWYgKCFnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChydHgtPnJ0eF9wdF9tYXAsCi0gICAgICAgICAgICAgIEdVSU5UX1RPX1BPSU5URVIgKHBheWxvYWQpLCBOVUxMLCAmcnR4X3BheWxvYWQpKQotICAgICAgICBydHhfcGF5bG9hZCA9IEdJTlRfVE9fUE9JTlRFUiAoLTEpOwotCi0gICAgICBpZiAoR1BPSU5URVJfVE9fSU5UIChydHhfcGF5bG9hZCkgPT0gLTEgJiYgcGF5bG9hZCAhPSAtMSkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChydHgsICJQYXlsb2FkICVkIG5vdCBpbiBydHgtcHQtbWFwIiwgcGF5bG9hZCk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0eCwKLSAgICAgICAgICAiZ290IGNhcHMgZm9yIHBheWxvYWQ6ICVkLT4lZCwgc3NyYzogJXUtPiUiIEdfR1VJTlQzMl9GT1JNQVQgIjogJSIKLSAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgcGF5bG9hZCwgR1BPSU5URVJfVE9fSU5UIChydHhfcGF5bG9hZCksIHNzcmMsCi0gICAgICAgICAgZGF0YS0+cnR4X3NzcmMsIGNhcHMpOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjbG9jay1yYXRlIiwgJmRhdGEtPmNsb2NrX3JhdGUpOwotCi0gICAgICAvKiBUaGUgc2Vzc2lvbiBtaWdodCBuZWVkIHRvIGtub3cgdGhlIFJUWCBzc3JjICovCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfY29weSAoY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAicnR4LXNzcmMiLCBHX1RZUEVfVUlOVCwgZGF0YS0+cnR4X3NzcmMsCi0gICAgICAgICAgInJ0eC1zZXFudW0tb2Zmc2V0IiwgR19UWVBFX1VJTlQsIGRhdGEtPnNlcW51bV9iYXNlLCBOVUxMKTsKLQotICAgICAgaWYgKEdQT0lOVEVSX1RPX0lOVCAocnR4X3BheWxvYWQpICE9IC0xKQotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAicnR4LXBheWxvYWQiLCBHX1RZUEVfSU5ULAotICAgICAgICAgICAgR1BPSU5URVJfVE9fSU5UIChydHhfcGF5bG9hZCksIE5VTEwpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHgsICJnb3QgY2xvY2stcmF0ZSBmcm9tIGNhcHM6ICVkIGZvciBzc3JjOiAldSIsCi0gICAgICAgICAgZGF0YS0+Y2xvY2tfcmF0ZSwgc3NyYyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfY2FwcyAoY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci19Ci0KLS8qIGxpa2UgcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3RzX2RpZmYoKSAqLwotc3RhdGljIGd1aW50MzIKLWdzdF9ydHBfcnR4X3NlbmRfZ2V0X3RzX2RpZmYgKFNTUkNSdHhEYXRhICogZGF0YSkKLXsKLSAgZ3VpbnQ2NCBoaWdoX3RzLCBsb3dfdHM7Ci0gIEJ1ZmZlclF1ZXVlSXRlbSAqaGlnaF9idWYsICpsb3dfYnVmOwotICBndWludDMyIHJlc3VsdDsKLQotICBoaWdoX2J1ZiA9Ci0gICAgICBnX3NlcXVlbmNlX2dldCAoZ19zZXF1ZW5jZV9pdGVyX3ByZXYgKGdfc2VxdWVuY2VfZ2V0X2VuZF9pdGVyCi0gICAgICAgICAgKGRhdGEtPnF1ZXVlKSkpOwotICBsb3dfYnVmID0gZ19zZXF1ZW5jZV9nZXQgKGdfc2VxdWVuY2VfZ2V0X2JlZ2luX2l0ZXIgKGRhdGEtPnF1ZXVlKSk7Ci0KLSAgaWYgKCFoaWdoX2J1ZiB8fCAhbG93X2J1ZiB8fCBoaWdoX2J1ZiA9PSBsb3dfYnVmKQotICAgIHJldHVybiAwOwotCi0gIGhpZ2hfdHMgPSBoaWdoX2J1Zi0+dGltZXN0YW1wOwotICBsb3dfdHMgPSBsb3dfYnVmLT50aW1lc3RhbXA7Ci0KLSAgLyogaXQgbmVlZHMgdG8gd29yayBpZiB0cyB3cmFwcyAqLwotICBpZiAoaGlnaF90cyA+PSBsb3dfdHMpIHsKLSAgICByZXN1bHQgPSAoZ3VpbnQzMikgKGhpZ2hfdHMgLSBsb3dfdHMpOwotICB9IGVsc2UgewotICAgIHJlc3VsdCA9IChndWludDMyKSAoaGlnaF90cyArIEdfTUFYVUlOVDMyICsgMSAtIGxvd190cyk7Ci0gIH0KLQotICAvKiByZXR1cm4gdmFsdWUgaW4gbXMgaW5zdGVhZCBvZiBjbG9jayB0aWNrcyAqLwotICByZXR1cm4gKGd1aW50MzIpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHJlc3VsdCwgMTAwMCwgZGF0YS0+Y2xvY2tfcmF0ZSk7Ci19Ci0KLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayAqLwotc3RhdGljIHZvaWQKLXByb2Nlc3NfYnVmZmVyIChHc3RSdHBSdHhTZW5kICogcnR4LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBCdWZmZXJRdWV1ZUl0ZW0gKml0ZW07Ci0gIFNTUkNSdHhEYXRhICpkYXRhOwotICBndWludDE2IHNlcW51bTsKLSAgZ3VpbnQ4IHBheWxvYWRfdHlwZTsKLSAgZ3VpbnQzMiBzc3JjLCBydHB0aW1lOwotCi0gIC8qIHJlYWQgdGhlIGluZm9ybWF0aW9uIHdlIHdhbnQgZnJvbSB0aGUgYnVmZmVyICovCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHApOwotICBzZXFudW0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmcnRwKTsKLSAgcGF5bG9hZF90eXBlID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfdHlwZSAoJnJ0cCk7Ci0gIHNzcmMgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoJnJ0cCk7Ci0gIHJ0cHRpbWUgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0YW1wICgmcnRwKTsKLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIEdTVF9MT0dfT0JKRUNUIChydHgsCi0gICAgICAiUHJvY2Vzc2luZyBidWZmZXIgc2VxbnVtOiAlIiBHX0dVSU5UMTZfRk9STUFUICIsIHNzcmM6ICUiCi0gICAgICBHX0dVSU5UMzJfRk9STUFULCBzZXFudW0sIHNzcmMpOwotCi0gIC8qIGRvIG5vdCBzdG9yZSB0aGUgYnVmZmVyIGlmIGl0J3MgcGF5bG9hZCB0eXBlIGlzIHVua25vd24gKi8KLSAgaWYgKGdfaGFzaF90YWJsZV9jb250YWlucyAocnR4LT5ydHhfcHRfbWFwLCBHVUlOVF9UT19QT0lOVEVSIChwYXlsb2FkX3R5cGUpKSkgewotICAgIGRhdGEgPSBnc3RfcnRwX3J0eF9zZW5kX2dldF9zc3JjX2RhdGEgKHJ0eCwgc3NyYyk7Ci0KLSAgICAvKiBhZGQgY3VycmVudCBydHAgYnVmZmVyIHRvIHF1ZXVlIGhpc3RvcnkgKi8KLSAgICBpdGVtID0gZ19zbGljZV9uZXcwIChCdWZmZXJRdWV1ZUl0ZW0pOwotICAgIGl0ZW0tPnNlcW51bSA9IHNlcW51bTsKLSAgICBpdGVtLT50aW1lc3RhbXAgPSBydHB0aW1lOwotICAgIGl0ZW0tPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotICAgIGdfc2VxdWVuY2VfYXBwZW5kIChkYXRhLT5xdWV1ZSwgaXRlbSk7Ci0KLSAgICAvKiByZW1vdmUgb2xkZXN0IHBhY2tldHMgZnJvbSBoaXN0b3J5IGlmIHRoZXkgYXJlIHRvbyBtYW55ICovCi0gICAgaWYgKHJ0eC0+bWF4X3NpemVfcGFja2V0cykgewotICAgICAgd2hpbGUgKGdfc2VxdWVuY2VfZ2V0X2xlbmd0aCAoZGF0YS0+cXVldWUpID4gcnR4LT5tYXhfc2l6ZV9wYWNrZXRzKQotICAgICAgICBnX3NlcXVlbmNlX3JlbW92ZSAoZ19zZXF1ZW5jZV9nZXRfYmVnaW5faXRlciAoZGF0YS0+cXVldWUpKTsKLSAgICB9Ci0gICAgaWYgKHJ0eC0+bWF4X3NpemVfdGltZSkgewotICAgICAgd2hpbGUgKGdzdF9ydHBfcnR4X3NlbmRfZ2V0X3RzX2RpZmYgKGRhdGEpID4gcnR4LT5tYXhfc2l6ZV90aW1lKQotICAgICAgICBnX3NlcXVlbmNlX3JlbW92ZSAoZ19zZXF1ZW5jZV9nZXRfYmVnaW5faXRlciAoZGF0YS0+cXVldWUpKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfcnR4X3NlbmRfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cFJ0eFNlbmQgKnJ0eCA9IEdTVF9SVFBfUlRYX1NFTkQgKHBhcmVudCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgcHJvY2Vzc19idWZmZXIgKHJ0eCwgYnVmZmVyKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0gIHJldCA9IGdzdF9wYWRfcHVzaCAocnR4LT5zcmNwYWQsIGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wcm9jZXNzX2J1ZmZlcl9mcm9tX2xpc3QgKEdzdEJ1ZmZlciAqKiBidWZmZXIsIGd1aW50IGlkeCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBwcm9jZXNzX2J1ZmZlciAodXNlcl9kYXRhLCAqYnVmZmVyKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3J0eF9zZW5kX2NoYWluX2xpc3QgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBHc3RSdHBSdHhTZW5kICpydHggPSBHU1RfUlRQX1JUWF9TRU5EIChwYXJlbnQpOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0gIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChsaXN0LCBwcm9jZXNzX2J1ZmZlcl9mcm9tX2xpc3QsIHJ0eCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotCi0gIHJldCA9IGdzdF9wYWRfcHVzaF9saXN0IChydHgtPnNyY3BhZCwgbGlzdCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfcnR4X3NlbmRfc3JjX2xvb3AgKEdzdFJ0cFJ0eFNlbmQgKiBydHgpCi17Ci0gIEdzdERhdGFRdWV1ZUl0ZW0gKmRhdGE7Ci0KLSAgaWYgKGdzdF9kYXRhX3F1ZXVlX3BvcCAocnR4LT5xdWV1ZSwgJmRhdGEpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0eCwgInB1c2hpbmcgcnR4IGJ1ZmZlciAlcCIsIGRhdGEtPm9iamVjdCk7Ci0KLSAgICBpZiAoR19MSUtFTFkgKEdTVF9JU19CVUZGRVIgKGRhdGEtPm9iamVjdCkpKSB7Ci0gICAgICBnc3RfcGFkX3B1c2ggKHJ0eC0+c3JjcGFkLCBHU1RfQlVGRkVSIChkYXRhLT5vYmplY3QpKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgcnR4LT5udW1fcnR4X3BhY2tldHMrKzsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotICAgIH0gZWxzZSBpZiAoR1NUX0lTX0VWRU5UIChkYXRhLT5vYmplY3QpKSB7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0eC0+c3JjcGFkLCBHU1RfRVZFTlQgKGRhdGEtPm9iamVjdCkpOwotCi0gICAgICAvKiBhZnRlciBFT1MsIHdlIHNob3VsZCBub3Qgc2VuZCBhbnkgbW9yZSBidWZmZXJzLAotICAgICAgICogZXZlbiBpZiB0aGVyZSBhcmUgbW9yZSByZXF1ZXN0cyBjb21pbmcgaW4gKi8KLSAgICAgIGlmIChHU1RfRVZFTlRfVFlQRSAoZGF0YS0+b2JqZWN0KSA9PSBHU1RfRVZFTlRfRU9TKSB7Ci0gICAgICAgIGdzdF9ydHBfcnR4X3NlbmRfc2V0X2ZsdXNoaW5nIChydHgsIFRSVUUpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICB9Ci0KLSAgICBkYXRhLT5vYmplY3QgPSBOVUxMOyAgICAgICAgLyogd2Ugbm8gbG9uZ2VyIG93biB0aGF0IG9iamVjdCAqLwotICAgIGRhdGEtPmRlc3Ryb3kgKGRhdGEpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUIChydHgsICJmbHVzaGluZyIpOwotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAocnR4LT5zcmNwYWQpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9ydHhfc2VuZF9hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKLXsKLSAgR3N0UnRwUnR4U2VuZCAqcnR4ID0gR1NUX1JUUF9SVFhfU0VORCAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfUEFEX01PREVfUFVTSDoKLSAgICAgIGlmIChhY3RpdmUpIHsKLSAgICAgICAgZ3N0X3J0cF9ydHhfc2VuZF9zZXRfZmx1c2hpbmcgKHJ0eCwgRkFMU0UpOwotICAgICAgICByZXQgPSBnc3RfcGFkX3N0YXJ0X3Rhc2sgKHJ0eC0+c3JjcGFkLAotICAgICAgICAgICAgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X3J0cF9ydHhfc2VuZF9zcmNfbG9vcCwgcnR4LCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9ydHBfcnR4X3NlbmRfc2V0X2ZsdXNoaW5nIChydHgsIFRSVUUpOwotICAgICAgICByZXQgPSBnc3RfcGFkX3N0b3BfdGFzayAocnR4LT5zcmNwYWQpOwotICAgICAgfQotICAgICAgR1NUX0lORk9fT0JKRUNUIChydHgsICJhY3RpdmF0ZV9tb2RlOiBhY3RpdmUgJWQsIHJldCAlZCIsIGFjdGl2ZSwgcmV0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfc2VuZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwUnR4U2VuZCAqcnR4ID0gR1NUX1JUUF9SVFhfU0VORCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUEFZTE9BRF9UWVBFX01BUDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgcnR4LT5ydHhfcHRfbWFwX3N0cnVjdHVyZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9USU1FOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0eC0+bWF4X3NpemVfdGltZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9QQUNLRVRTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0eC0+bWF4X3NpemVfcGFja2V0cyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fUlRYX1JFUVVFU1RTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0eC0+bnVtX3J0eF9yZXF1ZXN0cyk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fUlRYX1BBQ0tFVFM6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnR4LT5udW1fcnR4X3BhY2tldHMpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc3RydWN0dXJlX3RvX2hhc2hfdGFibGUgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIGdwb2ludGVyIGhhc2gpCi17Ci0gIGNvbnN0IGdjaGFyICpmaWVsZF9zdHI7Ci0gIGd1aW50IGZpZWxkX3VpbnQ7Ci0gIGd1aW50IHZhbHVlX3VpbnQ7Ci0KLSAgZmllbGRfc3RyID0gZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKTsKLSAgZmllbGRfdWludCA9IGF0b2kgKGZpZWxkX3N0cik7Ci0gIHZhbHVlX3VpbnQgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gIGdfaGFzaF90YWJsZV9pbnNlcnQgKChHSGFzaFRhYmxlICopIGhhc2gsIEdVSU5UX1RPX1BPSU5URVIgKGZpZWxkX3VpbnQpLAotICAgICAgR1VJTlRfVE9fUE9JTlRFUiAodmFsdWVfdWludCkpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9ydHhfc2VuZF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0UnRwUnR4U2VuZCAqcnR4ID0gR1NUX1JUUF9SVFhfU0VORCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU1NSQ19NQVA6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0gICAgICBpZiAocnR4LT5leHRlcm5hbF9zc3JjX21hcCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChydHgtPmV4dGVybmFsX3NzcmNfbWFwKTsKLSAgICAgIHJ0eC0+ZXh0ZXJuYWxfc3NyY19tYXAgPSBnX3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEFZTE9BRF9UWVBFX01BUDoKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAocnR4KTsKLSAgICAgIGlmIChydHgtPnJ0eF9wdF9tYXBfc3RydWN0dXJlKQotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHJ0eC0+cnR4X3B0X21hcF9zdHJ1Y3R1cmUpOwotICAgICAgcnR4LT5ydHhfcHRfbWFwX3N0cnVjdHVyZSA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7Ci0gICAgICBnX2hhc2hfdGFibGVfcmVtb3ZlX2FsbCAocnR4LT5ydHhfcHRfbWFwKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAocnR4LT5ydHhfcHRfbWFwX3N0cnVjdHVyZSwgc3RydWN0dXJlX3RvX2hhc2hfdGFibGUsCi0gICAgICAgICAgcnR4LT5ydHhfcHRfbWFwKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9TSVpFX1RJTUU6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0eCk7Ci0gICAgICBydHgtPm1heF9zaXplX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnR4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfU0laRV9QQUNLRVRTOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChydHgpOwotICAgICAgcnR4LT5tYXhfc2l6ZV9wYWNrZXRzID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9ydHhfc2VuZF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFJ0cFJ0eFNlbmQgKnJ0eDsKLQotICBydHggPSBHU1RfUlRQX1JUWF9TRU5EIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPQotICAgICAgR1NUX0VMRU1FTlRfQ0xBU1MgKGdzdF9ydHBfcnR4X3NlbmRfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LAotICAgICAgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9ydHBfcnR4X3NlbmRfcmVzZXQgKHJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1nYm9vbGVhbgotZ3N0X3J0cF9ydHhfc2VuZF9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3J0cF9ydHhfc2VuZF9kZWJ1ZywgInJ0cHJ0eHNlbmQiLCAwLAotICAgICAgInJ0cCByZXRyYW5zbWlzc2lvbiBzZW5kZXIiKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInJ0cHJ0eHNlbmQiLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfUlRQX1JUWF9TRU5EKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaCBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHJ0eHNlbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwODRlOC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBydHhzZW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKiBSVFAgUmV0cmFuc21pc3Npb24gc2VuZGVyIGVsZW1lbnQgZm9yIEdTdHJlYW1lcgotICoKLSAqIGdzdHJ0cHJ0eHNlbmQuaDoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KLSAqICAgQGF1dGhvciBKdWxpZW4gSXNvcmNlIDxqdWxpZW4uaXNvcmNlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9SVFhfU0VORF9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1JUWF9TRU5EX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0ZGF0YXF1ZXVlLmg+Ci0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1JUWF9TRU5EIChnc3RfcnRwX3J0eF9zZW5kX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfUlRYX1NFTkQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1JUWF9TRU5ELCBHc3RSdHBSdHhTZW5kKSkKLSNkZWZpbmUgR1NUX1JUUF9SVFhfU0VORF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1JUWF9TRU5ELCBHc3RSdHBSdHhTZW5kQ2xhc3MpKQotI2RlZmluZSBHU1RfUlRQX1JUWF9TRU5EX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfUlRQX1JUWF9TRU5ELCBHc3RSdHBSdHhTZW5kQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfUlRQX1JUWF9TRU5EKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9SVFhfU0VORCkpCi0jZGVmaW5lIEdTVF9JU19SVFBfUlRYX1NFTkRfQ0xBU1Mob2JqKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfUlRYX1NFTkQpKQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFJ0eFNlbmQgR3N0UnRwUnR4U2VuZDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBSdHhTZW5kQ2xhc3MgR3N0UnRwUnR4U2VuZENsYXNzOwotCi1zdHJ1Y3QgX0dzdFJ0cFJ0eFNlbmQKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qIHBhZCAqLwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIC8qIHJ0cCBwYWNrZXRzIHRoYXQgd2lsbCBiZSBwdXNoZWQgb3V0ICovCi0gIEdzdERhdGFRdWV1ZSAqcXVldWU7Ci0KLSAgLyogc3NyYyAtPiBTU1JDUnR4RGF0YSAqLwotICBHSGFzaFRhYmxlICpzc3JjX2RhdGE7Ci0gIC8qIHJ0eCBzc3JjIC0+IG1hc3RlciBzc3JjICovCi0gIEdIYXNoVGFibGUgKnJ0eF9zc3JjczsKLQotICAvKiBtYXN0ZXIgc3NyYyAtPiBydHggc3NyYyAocHJvcGVydHkpICovCi0gIEdzdFN0cnVjdHVyZSAqZXh0ZXJuYWxfc3NyY19tYXA7Ci0KLSAgLyogb3JpZyBwdCAodWludCkgLT4gcnR4IHB0ICh1aW50KSAqLwotICBHSGFzaFRhYmxlICpydHhfcHRfbWFwOwotICAvKiBvcmlnIHB0IChzdHJpbmcpIC0+IHJ0eCBwdCAodWludCkgKi8KLSAgR3N0U3RydWN0dXJlICpydHhfcHRfbWFwX3N0cnVjdHVyZTsKLQotICAvKiBidWZmZXJpbmcgY29udHJvbCBwcm9wZXJ0aWVzICovCi0gIGd1aW50IG1heF9zaXplX3RpbWU7Ci0gIGd1aW50IG1heF9zaXplX3BhY2tldHM7Ci0KLSAgLyogc3RhdGlzdGljcyAqLwotICBndWludCBudW1fcnR4X3JlcXVlc3RzOwotICBndWludCBudW1fcnR4X3BhY2tldHM7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFJ0eFNlbmRDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotCi1HVHlwZSBnc3RfcnRwX3J0eF9zZW5kX2dldF90eXBlICh2b2lkKTsKLWdib29sZWFuIGdzdF9ydHBfcnR4X3NlbmRfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfUlRQX1JUWF9TRU5EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jIGIvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc2Vzc2lvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDFmMmIxLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uYworKysgL2Rldi9udWxsCkBAIC0xLDI3MjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cHNlc3Npb24KLSAqIEBzZWVfYWxzbzogcnRwaml0dGVyYnVmZmVyLCBydHBiaW4sIHJ0cHB0ZGVtdXgsIHJ0cHNzcmNkZW11eAotICoKLSAqIFRoZSBSVFAgc2Vzc2lvbiBtYW5hZ2VyIG1vZGVscyBwYXJ0aWNpcGFudHMgd2l0aCB1bmlxdWUgU1NSQyBpbiBhbiBSVFAKLSAqIHNlc3Npb24uIFRoaXMgc2Vzc2lvbiBjYW4gYmUgdXNlZCB0byBzZW5kIGFuZCByZWNlaXZlIFJUUCBhbmQgUlRDUCBwYWNrZXRzLgotICogQmFzZWQgb24gd2hhdCBSRVFVRVNUIHBhZHMgYXJlIHJlcXVlc3RlZCBmcm9tIHRoZSBzZXNzaW9uIG1hbmFnZXIsIHNwZWNpZmljCi0gKiBmdW5jdGlvbmFsaXR5IGNhbiBiZSBhY3RpdmF0ZWQuCi0gKgotICogVGhlIHNlc3Npb24gbWFuYWdlciBjdXJyZW50bHkgaW1wbGVtZW50cyBSRkMgMzU1MCBpbmNsdWRpbmc6Ci0gKiA8aXRlbWl6ZWRsaXN0PgotICogICA8bGlzdGl0ZW0+Ci0gKiAgICAgPHBhcmE+UlRQIHBhY2tldCB2YWxpZGF0aW9uIGJhc2VkIG9uIGNvbnNlY3V0aXZlIHNlcXVlbmNlIG51bWJlcnMuPC9wYXJhPgotICogICA8L2xpc3RpdGVtPgotICogICA8bGlzdGl0ZW0+Ci0gKiAgICAgPHBhcmE+TWFpbnRhaW5hbmNlIG9mIHRoZSBTU1JDIHBhcnRpY2lwYW50IGRhdGFiYXNlLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPgotICogICAgIDxwYXJhPktlZXBpbmcgcGVyIHBhcnRpY2lwYW50IHN0YXRpc3RpY3MgYmFzZWQgb24gcmVjZWl2ZWQgUlRDUCBwYWNrZXRzLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPgotICogICAgIDxwYXJhPlNjaGVkdWxpbmcgb2YgUlIvU1IgUlRDUCBwYWNrZXRzLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqICAgPGxpc3RpdGVtPgotICogICAgIDxwYXJhPlN1cHBvcnQgZm9yIG11bHRpcGxlIHNlbmRlciBTU1JDLjwvcGFyYT4KLSAqICAgPC9saXN0aXRlbT4KLSAqIDwvaXRlbWl6ZWRsaXN0PgotICoKLSAqIFRoZSBydHBzZXNzaW9uIHdpbGwgbm90IGRlbXV4IHBhY2tldHMgYmFzZWQgb24gU1NSQyBvciBwYXlsb2FkIHR5cGUsIG5vciB3aWxsCi0gKiBpdCBjb3JyZWN0IGZvciBwYWNrZXQgcmVvcmRlcmluZyBhbmQgaml0dGVyLiBVc2UgI0dzdFJ0cHNTcmNEZW11eCwKLSAqICNHc3RSdHBQdERlbXV4IGFuZCBHc3RSdHBKaXR0ZXJCdWZmZXIgaW4gYWRkaXRpb24gdG8gI0dzdFJ0cFNlc3Npb24gdG8KLSAqIHBlcmZvcm0gdGhlc2UgdGFza3MuIEl0IGlzIHVzdWFsbHkgYSBnb29kIGlkZWEgdG8gdXNlICNHc3RSdHBCaW4sIHdoaWNoCi0gKiBjb21iaW5lcyBhbGwgdGhlc2UgZmVhdHVyZXMgaW4gb25lIGVsZW1lbnQuCi0gKgotICogVG8gdXNlICNHc3RSdHBTZXNzaW9uIGFzIGFuIFJUUCByZWNlaXZlciwgcmVxdWVzdCBhIHJlY3ZfcnRwX3NpbmsgcGFkLCB3aGljaCB3aWxsCi0gKiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSByZWN2X3J0cF9zcmMgcGFkLiBEYXRhIHJlY2VpdmVkIG9uIHRoZSByZWN2X3J0cF9zaW5rIHBhZAotICogd2lsbCBiZSBwcm9jZXNzZWQgaW4gdGhlIHNlc3Npb24gYW5kIGFmdGVyIGJlaW5nIHZhbGlkYXRlZCBmb3J3YXJkZWQgb24gdGhlCi0gKiByZWN2X3J0cF9zcmMgcGFkLgotICoKLSAqIFRvIGFsc28gdXNlICNHc3RSdHBTZXNzaW9uIGFzIGFuIFJUQ1AgcmVjZWl2ZXIsIHJlcXVlc3QgYSByZWN2X3J0Y3Bfc2luayBwYWQsCi0gKiB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc3luY19zcmMgcGFkLiBQYWNrZXRzIHJlY2VpdmVkIG9uIHRoZSBSVENQCi0gKiBwYWQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzZXNzaW9uIG1hbmFnZXIgdG8gdXBkYXRlIHRoZSBzdGF0cyBhbmQgZGF0YWJhc2Ugb2YKLSAqIHRoZSBvdGhlciBwYXJ0aWNpcGFudHMuIFNSIHBhY2tldHMgd2lsbCBiZSBmb3J3YXJkZWQgb24gdGhlIHN5bmNfc3JjIHBhZAotICogc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gaW50ZXItc3RyZWFtIHN5bmNocm9uaXNhdGlvbiB3aGVuIG5lZWRlZC4KLSAqCi0gKiBJZiB5b3Ugd2FudCB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHRvIGdlbmVyYXRlIGFuZCBzZW5kIFJUQ1AgcGFja2V0cywgcmVxdWVzdAotICogdGhlIHNlbmRfcnRjcF9zcmMgcGFkLiBQYWNrZXQgcHVzaGVkIG9uIHRoaXMgcGFkIGNvbnRhaW4gU1IvUlIgUlRDUCByZXBvcnRzCi0gKiB0aGF0IHNob3VsZCBiZSBzZW50IHRvIGFsbCBwYXJ0aWNpcGFudHMgaW4gdGhlIHNlc3Npb24uCi0gKgotICogVG8gdXNlICNHc3RSdHBTZXNzaW9uIGFzIGEgc2VuZGVyLCByZXF1ZXN0IGEgc2VuZF9ydHBfc2luayBwYWQsIHdoaWNoIHdpbGwKLSAqIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2VuZF9ydHBfc3JjIHBhZC4gVGhlIHNlc3Npb24gbWFuYWdlciB3aWxsCi0gKiBmb3J3YXJkIHRoZSBwYWNrZXRzIG9uIHRoZSBzZW5kX3J0cF9zcmMgcGFkIGFmdGVyIHVwZGF0aW5nIGl0cyBpbnRlcm5hbCBzdGF0ZS4KLSAqCi0gKiBUaGUgc2Vzc2lvbiBtYW5hZ2VyIG5lZWRzIHRoZSBjbG9jay1yYXRlIG9mIHRoZSBwYXlsb2FkIHR5cGVzIGl0IGlzIGhhbmRsaW5nCi0gKiBhbmQgd2lsbCBzaWduYWwgdGhlICNHc3RSdHBTZXNzaW9uOjpyZXF1ZXN0LXB0LW1hcCBzaWduYWwgd2hlbiBpdCBuZWVkcyBzdWNoIGEKLSAqIG1hcHBpbmcuIE9uZSBjYW4gY2xlYXIgdGhlIGNhY2hlZCB2YWx1ZXMgd2l0aCB0aGUgI0dzdFJ0cFNlc3Npb246OmNsZWFyLXB0LW1hcAotICogc2lnbmFsLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdWRwc3JjIHBvcnQ9NTAwMCBjYXBzPSJhcHBsaWNhdGlvbi94LXJ0cCwgLi4uIiAhIC5yZWN2X3J0cF9zaW5rIHJ0cHNlc3Npb24gLnJlY3ZfcnRwX3NyYyAhIHJ0cHRoZW9yYWRlcGF5ICEgdGhlb3JhZGVjICEgeHZpbWFnZXNpbmsKLSAqIF18IFJlY2VpdmUgdGhlb3JhIFJUUCBwYWNrZXRzIGZyb20gcG9ydCA1MDAwIGFuZCBzZW5kIHRoZW0gdG8gdGhlIGRlcGF5bG9hZGVyLAotICogZGVjb2RlciBhbmQgZGlzcGxheS4gTm90ZSB0aGF0IHRoZSBhcHBsaWNhdGlvbi94LXJ0cCBjYXBzIG9uIHVkcHNyYyBzaG91bGQgYmUKLSAqIGNvbmZpZ3VyZWQgYmFzZWQgb24gc29tZSBuZWdvdGlhdGlvbiBwcm9jZXNzIHN1Y2ggYXMgUlRTUCBmb3IgdGhpcyBwaXBlbGluZQotICogdG8gd29yayBjb3JyZWN0bHkuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdWRwc3JjIHBvcnQ9NTAwMCBjYXBzPSJhcHBsaWNhdGlvbi94LXJ0cCwgLi4uIiAhIC5yZWN2X3J0cF9zaW5rIHJ0cHNlc3Npb24gbmFtZT1zZXNzaW9uIFwKLSAqICAgICAgICAucmVjdl9ydHBfc3JjICEgcnRwdGhlb3JhZGVwYXkgISB0aGVvcmFkZWMgISB4dmltYWdlc2luayBcCi0gKiAgICAgdWRwc3JjIHBvcnQ9NTAwMSBjYXBzPSJhcHBsaWNhdGlvbi94LXJ0Y3AiICEgc2Vzc2lvbi5yZWN2X3J0Y3Bfc2luawotICogXXwgUmVjZWl2ZSB0aGVvcmEgUlRQIHBhY2tldHMgZnJvbSBwb3J0IDUwMDAgYW5kIHNlbmQgdGhlbSB0byB0aGUgZGVwYXlsb2FkZXIsCi0gKiBkZWNvZGVyIGFuZCBkaXNwbGF5LiBSZWNlaXZlIFJUQ1AgcGFja2V0cyBmcm9tIHBvcnQgNTAwMSBhbmQgcHJvY2VzcyB0aGVtIGluCi0gKiB0aGUgc2Vzc2lvbiBtYW5hZ2VyLgotICogTm90ZSB0aGF0IHRoZSBhcHBsaWNhdGlvbi94LXJ0cCBjYXBzIG9uIHVkcHNyYyBzaG91bGQgYmUKLSAqIGNvbmZpZ3VyZWQgYmFzZWQgb24gc29tZSBuZWdvdGlhdGlvbiBwcm9jZXNzIHN1Y2ggYXMgUlRTUCBmb3IgdGhpcyBwaXBlbGluZQotICogdG8gd29yayBjb3JyZWN0bHkuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjICEgdGhlb3JhZW5jICEgcnRwdGhlb3JhcGF5ICEgLnNlbmRfcnRwX3NpbmsgcnRwc2Vzc2lvbiAuc2VuZF9ydHBfc3JjICEgdWRwc2luayBwb3J0PTUwMDAKLSAqIF18IFNlbmQgdGhlb3JhIFJUUCBwYWNrZXRzIHRocm91Z2ggdGhlIHNlc3Npb24gbWFuYWdlciBhbmQgb3V0IG9uIFVEUCBwb3J0Ci0gKiA1MDAwLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhIHRoZW9yYWVuYyAhIHJ0cHRoZW9yYXBheSAhIC5zZW5kX3J0cF9zaW5rIHJ0cHNlc3Npb24gbmFtZT1zZXNzaW9uIC5zZW5kX3J0cF9zcmMgXAotICogICAgICEgdWRwc2luayBwb3J0PTUwMDAgIHNlc3Npb24uc2VuZF9ydGNwX3NyYyAhIHVkcHNpbmsgcG9ydD01MDAxCi0gKiBdfCBTZW5kIHRoZW9yYSBSVFAgcGFja2V0cyB0aHJvdWdoIHRoZSBzZXNzaW9uIG1hbmFnZXIgYW5kIG91dCBvbiBVRFAgcG9ydAotICogNTAwMC4gU2VuZCBSVENQIHBhY2tldHMgb24gcG9ydCA1MDAxLiBOb3RlIHRoYXQgdGhpcyBwaXBlbGluZSB3aWxsIG5vdCBwcmVyb2xsCi0gKiBjb3JyZWN0bHkgYmVjYXVzZSB0aGUgc2Vjb25kIHVkcHNpbmsgd2lsbCBub3QgcHJlcm9sbCBjb3JyZWN0bHkgKG5vIFJUQ1AKLSAqIHBhY2tldHMgYXJlIHNlbnQgaW4gdGhlIFBBVVNFRCBzdGF0ZSkuIEFwcGxpY2F0aW9ucyBzaG91bGQgbWFudWFsbHkgc2V0IGFuZAotICoga2VlcCAoc2VlIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUoKSkgdGhlIFJUQ1AgdWRwc2luayB0byB0aGUgUExBWUlORyBzdGF0ZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2luY2x1ZGUgPGdzdC9nbGliLWNvbXBhdC1wcml2YXRlLmg+Ci0KLSNpbmNsdWRlICJnc3RydHBzZXNzaW9uLmgiCi0jaW5jbHVkZSAicnRwc2Vzc2lvbi5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfcnRwX3Nlc3Npb25fZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3J0cF9zZXNzaW9uX2RlYnVnCi0KLUdUeXBlCi1nc3RfcnRwX250cF90aW1lX3NvdXJjZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHR5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICB7R1NUX1JUUF9OVFBfVElNRV9TT1VSQ0VfTlRQLCAiTlRQIHRpbWUgYmFzZWQgb24gcmVhbHRpbWUgY2xvY2siLCAibnRwIn0sCi0gICAge0dTVF9SVFBfTlRQX1RJTUVfU09VUkNFX1VOSVgsICJVTklYIHRpbWUgYmFzZWQgb24gcmVhbHRpbWUgY2xvY2siLCAidW5peCJ9LAotICAgIHtHU1RfUlRQX05UUF9USU1FX1NPVVJDRV9SVU5OSU5HX1RJTUUsCi0gICAgICAgICAgIlJ1bm5pbmcgdGltZSBiYXNlZCBvbiBwaXBlbGluZSBjbG9jayIsCi0gICAgICAgICJydW5uaW5nLXRpbWUifSwKLSAgICB7R1NUX1JUUF9OVFBfVElNRV9TT1VSQ0VfQ0xPQ0tfVElNRSwgIlBpcGVsaW5lIGNsb2NrIHRpbWUiLCAiY2xvY2stdGltZSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIXR5cGUpIHsKLSAgICB0eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFJ0cE50cFRpbWVTb3VyY2UiLCB2YWx1ZXMpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi0vKiBzaW5rIHBhZHMgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBydHBzZXNzaW9uX3JlY3ZfcnRwX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJyZWN2X3J0cF9zaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwc2Vzc2lvbl9yZWN2X3J0Y3Bfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInJlY3ZfcnRjcF9zaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRjcCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cHNlc3Npb25fc2VuZF9ydHBfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNlbmRfcnRwX3NpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKQotICAgICk7Ci0KLS8qIHNyYyBwYWRzICovCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwc2Vzc2lvbl9yZWN2X3J0cF9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJyZWN2X3J0cF9zcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwc2Vzc2lvbl9zeW5jX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInN5bmNfc3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0Y3AiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBydHBzZXNzaW9uX3NlbmRfcnRwX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNlbmRfcnRwX3NyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBydHBzZXNzaW9uX3NlbmRfcnRjcF9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzZW5kX3J0Y3Bfc3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydGNwIikKLSAgICApOwotCi0vKiBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIFNJR05BTF9SRVFVRVNUX1BUX01BUCwKLSAgU0lHTkFMX0NMRUFSX1BUX01BUCwKLQotICBTSUdOQUxfT05fTkVXX1NTUkMsCi0gIFNJR05BTF9PTl9TU1JDX0NPTExJU0lPTiwKLSAgU0lHTkFMX09OX1NTUkNfVkFMSURBVEVELAotICBTSUdOQUxfT05fU1NSQ19BQ1RJVkUsCi0gIFNJR05BTF9PTl9TU1JDX1NERVMsCi0gIFNJR05BTF9PTl9CWUVfU1NSQywKLSAgU0lHTkFMX09OX0JZRV9USU1FT1VULAotICBTSUdOQUxfT05fVElNRU9VVCwKLSAgU0lHTkFMX09OX1NFTkRFUl9USU1FT1VULAotICBTSUdOQUxfT05fTkVXX1NFTkRFUl9TU1JDLAotICBTSUdOQUxfT05fU0VOREVSX1NTUkNfQUNUSVZFLAotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX0JBTkRXSURUSCAgICAgICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9SVENQX0ZSQUNUSU9OICAgICAgICBSVFBfU1RBVFNfUlRDUF9GUkFDVElPTgotI2RlZmluZSBERUZBVUxUX1JUQ1BfUlJfQkFORFdJRFRIICAgIC0xCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9SU19CQU5EV0lEVEggICAgLTEKLSNkZWZpbmUgREVGQVVMVF9TREVTICAgICAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfTlVNX1NPVVJDRVMgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX05VTV9BQ1RJVkVfU09VUkNFUyAgIDAKLSNkZWZpbmUgREVGQVVMVF9VU0VfUElQRUxJTkVfQ0xPQ0sgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX1JUQ1BfTUlOX0lOVEVSVkFMICAgIChSVFBfU1RBVFNfTUlOX0lOVEVSVkFMICogR1NUX1NFQ09ORCkKLSNkZWZpbmUgREVGQVVMVF9QUk9CQVRJT04gICAgICAgICAgICBSVFBfREVGQVVMVF9QUk9CQVRJT04KLSNkZWZpbmUgREVGQVVMVF9NQVhfRFJPUE9VVF9USU1FICAgICA2MDAwMAotI2RlZmluZSBERUZBVUxUX01BWF9NSVNPUkRFUl9USU1FICAgIDIwMDAKLSNkZWZpbmUgREVGQVVMVF9SVFBfUFJPRklMRSAgICAgICAgICBHU1RfUlRQX1BST0ZJTEVfQVZQCi0jZGVmaW5lIERFRkFVTFRfTlRQX1RJTUVfU09VUkNFICAgICAgR1NUX1JUUF9OVFBfVElNRV9TT1VSQ0VfTlRQCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9TWU5DX1NFTkRfVElNRSAgVFJVRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9CQU5EV0lEVEgsCi0gIFBST1BfUlRDUF9GUkFDVElPTiwKLSAgUFJPUF9SVENQX1JSX0JBTkRXSURUSCwKLSAgUFJPUF9SVENQX1JTX0JBTkRXSURUSCwKLSAgUFJPUF9TREVTLAotICBQUk9QX05VTV9TT1VSQ0VTLAotICBQUk9QX05VTV9BQ1RJVkVfU09VUkNFUywKLSAgUFJPUF9JTlRFUk5BTF9TRVNTSU9OLAotICBQUk9QX1VTRV9QSVBFTElORV9DTE9DSywKLSAgUFJPUF9SVENQX01JTl9JTlRFUlZBTCwKLSAgUFJPUF9QUk9CQVRJT04sCi0gIFBST1BfTUFYX0RST1BPVVRfVElNRSwKLSAgUFJPUF9NQVhfTUlTT1JERVJfVElNRSwKLSAgUFJPUF9TVEFUUywKLSAgUFJPUF9SVFBfUFJPRklMRSwKLSAgUFJPUF9OVFBfVElNRV9TT1VSQ0UsCi0gIFBST1BfUlRDUF9TWU5DX1NFTkRfVElNRQotfTsKLQotI2RlZmluZSBHU1RfUlRQX1NFU1NJT05fR0VUX1BSSVZBVEUob2JqKSAgXAotCSAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvYmopLCBHU1RfVFlQRV9SVFBfU0VTU0lPTiwgR3N0UnRwU2Vzc2lvblByaXZhdGUpKQotCi0jZGVmaW5lIEdTVF9SVFBfU0VTU0lPTl9MT0NLKHNlc3MpICAgZ19tdXRleF9sb2NrICgmKHNlc3MpLT5wcml2LT5sb2NrKQotI2RlZmluZSBHU1RfUlRQX1NFU1NJT05fVU5MT0NLKHNlc3MpIGdfbXV0ZXhfdW5sb2NrICgmKHNlc3MpLT5wcml2LT5sb2NrKQotCi0jZGVmaW5lIEdTVF9SVFBfU0VTU0lPTl9XQUlUKHNlc3MpICAgZ19jb25kX3dhaXQgKCYoc2VzcyktPnByaXYtPmNvbmQsICYoc2VzcyktPnByaXYtPmxvY2spCi0jZGVmaW5lIEdTVF9SVFBfU0VTU0lPTl9TSUdOQUwoc2VzcykgZ19jb25kX3NpZ25hbCAoJihzZXNzKS0+cHJpdi0+Y29uZCkKLQotc3RydWN0IF9Hc3RSdHBTZXNzaW9uUHJpdmF0ZQotewotICBHTXV0ZXggbG9jazsKLSAgR0NvbmQgY29uZDsKLSAgR3N0Q2xvY2sgKnN5c2Nsb2NrOwotCi0gIFJUUFNlc3Npb24gKnNlc3Npb247Ci0KLSAgLyogdGhyZWFkIGZvciBzZW5kaW5nIG91dCBSVENQICovCi0gIEdzdENsb2NrSUQgaWQ7Ci0gIGdib29sZWFuIHN0b3BfdGhyZWFkOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIGdib29sZWFuIHRocmVhZF9zdG9wcGVkOwotICBnYm9vbGVhbiB3YWl0X3NlbmQ7Ci0KLSAgLyogY2FwcyBtYXBwaW5nICovCi0gIEdIYXNoVGFibGUgKnB0bWFwOwotCi0gIEdzdENsb2NrVGltZSBzZW5kX2xhdGVuY3k7Ci0KLSAgZ2Jvb2xlYW4gdXNlX3BpcGVsaW5lX2Nsb2NrOwotICBHc3RSdHBOdHBUaW1lU291cmNlIG50cF90aW1lX3NvdXJjZTsKLSAgZ2Jvb2xlYW4gcnRjcF9zeW5jX3NlbmRfdGltZTsKLQotICBndWludCBydHhfY291bnQ7Ci19OwotCi0vKiBjYWxsYmFja3MgdG8gaGFuZGxlIGFjdGlvbnMgZnJvbSB0aGUgc2Vzc2lvbiBtYW5hZ2VyICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3Nlc3Npb25fcHJvY2Vzc19ydHAgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIFJUUFNvdXJjZSAqIHNyYywgR3N0QnVmZmVyICogYnVmZmVyLCBncG9pbnRlciB1c2VyX2RhdGEpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRwIChSVFBTZXNzaW9uICogc2VzcywKLSAgICBSVFBTb3VyY2UgKiBzcmMsIGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX3Nlc3Npb25fc2VuZF9ydGNwIChSVFBTZXNzaW9uICogc2VzcywKLSAgICBSVFBTb3VyY2UgKiBzcmMsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9ydHBfc2Vzc2lvbl9zeW5jX3J0Y3AgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBnaW50IGdzdF9ydHBfc2Vzc2lvbl9jbG9ja19yYXRlIChSVFBTZXNzaW9uICogc2VzcywgZ3VpbnQ4IHBheWxvYWQsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2Vzc2lvbl9yZWNvbnNpZGVyIChSVFBTZXNzaW9uICogc2VzcywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2Vzc2lvbl9yZXF1ZXN0X2tleV91bml0IChSVFBTZXNzaW9uICogc2VzcywKLSAgICBnYm9vbGVhbiBhbGxfaGVhZGVycywgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyBHc3RDbG9ja1RpbWUgZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfdGltZSAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2Vzc2lvbl9ub3RpZnlfbmFjayAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgZ3VpbnQxNiBzZXFudW0sIGd1aW50MTYgYmxwLCBndWludDMyIHNzcmMsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX3Nlc3Npb25fcmVjb25maWd1cmUgKFJUUFNlc3Npb24gKiBzZXNzLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi1zdGF0aWMgUlRQU2Vzc2lvbkNhbGxiYWNrcyBjYWxsYmFja3MgPSB7Ci0gIGdzdF9ydHBfc2Vzc2lvbl9wcm9jZXNzX3J0cCwKLSAgZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRwLAotICBnc3RfcnRwX3Nlc3Npb25fc3luY19ydGNwLAotICBnc3RfcnRwX3Nlc3Npb25fc2VuZF9ydGNwLAotICBnc3RfcnRwX3Nlc3Npb25fY2xvY2tfcmF0ZSwKLSAgZ3N0X3J0cF9zZXNzaW9uX3JlY29uc2lkZXIsCi0gIGdzdF9ydHBfc2Vzc2lvbl9yZXF1ZXN0X2tleV91bml0LAotICBnc3RfcnRwX3Nlc3Npb25fcmVxdWVzdF90aW1lLAotICBnc3RfcnRwX3Nlc3Npb25fbm90aWZ5X25hY2ssCi0gIGdzdF9ydHBfc2Vzc2lvbl9yZWNvbmZpZ3VyZQotfTsKLQotLyogR09iamVjdCB2bWV0aG9kcyAqLwotc3RhdGljIHZvaWQgZ3N0X3J0cF9zZXNzaW9uX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2Vzc2lvbl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0vKiBHc3RFbGVtZW50IHZtZXRob2RzICovCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3J0cF9zZXNzaW9uX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0UGFkICpnc3RfcnRwX3Nlc3Npb25fcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2Vzc2lvbl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3Nlc3Npb25fc2lua19zZXRjYXBzIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24sIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3Nlc3Npb25fc2V0Y2Fwc19zZW5kX3J0cCAoR3N0UGFkICogcGFkLAotICAgIEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uLCBHc3RDYXBzICogY2Fwcyk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHBfc2Vzc2lvbl9jbGVhcl9wdF9tYXAgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKTsKLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqZ3N0X3J0cF9zZXNzaW9uX2NyZWF0ZV9zdGF0cyAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24pOwotCi1zdGF0aWMgZ3VpbnQgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyB2b2lkCi1vbl9uZXdfc3NyYyAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sIFJUUFNvdXJjZSAqIHNyYywgR3N0UnRwU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9ORVdfU1NSQ10sIDAsCi0gICAgICBzcmMtPnNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fc3NyY19jb2xsaXNpb24gKFJUUFNlc3Npb24gKiBzZXNzaW9uLCBSVFBTb3VyY2UgKiBzcmMsIEdzdFJ0cFNlc3Npb24gKiBzZXNzKQotewotICBHc3RQYWQgKnNlbmRfcnRwX3Npbms7Ci0KLSAgZ19zaWduYWxfZW1pdCAoc2VzcywgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NTUkNfQ09MTElTSU9OXSwgMCwKLSAgICAgIHNyYy0+c3NyYyk7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICBpZiAoKHNlbmRfcnRwX3NpbmsgPSBzZXNzLT5zZW5kX3J0cF9zaW5rKSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAoc2VuZF9ydHBfc2luayk7Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotCi0gIGlmIChzZW5kX3J0cF9zaW5rKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotICAgIFJUUFNvdXJjZSAqaW50ZXJuYWxfc3JjOwotICAgIGd1aW50MzIgc3VnZ2VzdGVkX3NzcmM7Ci0KLSAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdFJUUENvbGxpc2lvbiIsICJzc3JjIiwgR19UWVBFX1VJTlQsCi0gICAgICAgIChndWludCkgc3JjLT5zc3JjLCBOVUxMKTsKLQotICAgIC8qIGlmIHRoZXJlIGlzIG5vIHNvdXJjZSB1c2luZyB0aGUgc3VnZ2VzdGVkIHNzcmMsIG1vc3QgcHJvYmFibHkgYmVjYXVzZQotICAgICAqIHRoaXMgc3NyYyBoYXMganVzdCBjb2xsaWRlZCwgc3VnZ2VzdCB1cHN0cmVhbSB0byB1c2UgaXQgKi8KLSAgICBzdWdnZXN0ZWRfc3NyYyA9IHJ0cF9zZXNzaW9uX3N1Z2dlc3Rfc3NyYyAoc2Vzc2lvbiwgTlVMTCk7Ci0gICAgaW50ZXJuYWxfc3JjID0gcnRwX3Nlc3Npb25fZ2V0X3NvdXJjZV9ieV9zc3JjIChzZXNzaW9uLCBzdWdnZXN0ZWRfc3NyYyk7Ci0gICAgaWYgKCFpbnRlcm5hbF9zcmMpCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCAic3VnZ2VzdGVkLXNzcmMiLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAoZ3VpbnQpIHN1Z2dlc3RlZF9zc3JjLCBOVUxMKTsKLSAgICBlbHNlCi0gICAgICBnX29iamVjdF91bnJlZiAoaW50ZXJuYWxfc3JjKTsKLQotICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sIHN0cnVjdHVyZSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZW5kX3J0cF9zaW5rLCBldmVudCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2VuZF9ydHBfc2luayk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLW9uX3NzcmNfdmFsaWRhdGVkIChSVFBTZXNzaW9uICogc2Vzc2lvbiwgUlRQU291cmNlICogc3JjLCBHc3RSdHBTZXNzaW9uICogc2VzcykKLXsKLSAgZ19zaWduYWxfZW1pdCAoc2VzcywgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NTUkNfVkFMSURBVEVEXSwgMCwKLSAgICAgIHNyYy0+c3NyYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX2FjdGl2ZSAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sIFJUUFNvdXJjZSAqIHNyYywgR3N0UnRwU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX0FDVElWRV0sIDAsCi0gICAgICBzcmMtPnNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fc3NyY19zZGVzIChSVFBTZXNzaW9uICogc2Vzc2lvbiwgUlRQU291cmNlICogc3JjLCBHc3RSdHBTZXNzaW9uICogc2VzcykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RNZXNzYWdlICptOwotCi0gIC8qIGNvbnZlcnQgdGhlIG5ldyBTREVTIGluZm8gaW50byBhIG1lc3NhZ2UgKi8KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzc2lvbik7Ci0gIGdfb2JqZWN0X2dldCAoc3JjLCAic2RlcyIsICZzLCBOVUxMKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzaW9uKTsKLQotICBtID0gZ3N0X21lc3NhZ2VfbmV3X2N1c3RvbSAoR1NUX01FU1NBR0VfRUxFTUVOVCwgR1NUX09CSkVDVCAoc2VzcyksIHMpOwotICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHNlc3MpLCBtKTsKLQotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19TREVTXSwgMCwKLSAgICAgIHNyYy0+c3NyYyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9ieWVfc3NyYyAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sIFJUUFNvdXJjZSAqIHNyYywgR3N0UnRwU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9CWUVfU1NSQ10sIDAsCi0gICAgICBzcmMtPnNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fYnllX3RpbWVvdXQgKFJUUFNlc3Npb24gKiBzZXNzaW9uLCBSVFBTb3VyY2UgKiBzcmMsIEdzdFJ0cFNlc3Npb24gKiBzZXNzKQotewotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fQllFX1RJTUVPVVRdLCAwLAotICAgICAgc3JjLT5zc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3RpbWVvdXQgKFJUUFNlc3Npb24gKiBzZXNzaW9uLCBSVFBTb3VyY2UgKiBzcmMsIEdzdFJ0cFNlc3Npb24gKiBzZXNzKQotewotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fVElNRU9VVF0sIDAsCi0gICAgICBzcmMtPnNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fc2VuZGVyX3RpbWVvdXQgKFJUUFNlc3Npb24gKiBzZXNzaW9uLCBSVFBTb3VyY2UgKiBzcmMsIEdzdFJ0cFNlc3Npb24gKiBzZXNzKQotewotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fU0VOREVSX1RJTUVPVVRdLCAwLAotICAgICAgc3JjLT5zc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX25ld19zZW5kZXJfc3NyYyAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sIFJUUFNvdXJjZSAqIHNyYywgR3N0UnRwU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9ORVdfU0VOREVSX1NTUkNdLCAwLAotICAgICAgc3JjLT5zc3JjKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3NlbmRlcl9zc3JjX2FjdGl2ZSAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sIFJUUFNvdXJjZSAqIHNyYywKLSAgICBHc3RSdHBTZXNzaW9uICogc2VzcykKLXsKLSAgZ19zaWduYWxfZW1pdCAoc2VzcywgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9TU1JDX0FDVElWRV0sIDAsCi0gICAgICBzcmMtPnNzcmMpOwotfQotCi1zdGF0aWMgdm9pZAotb25fbm90aWZ5X3N0YXRzIChSVFBTZXNzaW9uICogc2Vzc2lvbiwgR1BhcmFtU3BlYyAqIHNwZWMsCi0gICAgR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24pCi17Ci0gIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHJ0cHNlc3Npb24pLCAic3RhdHMiKTsKLX0KLQotI2RlZmluZSBnc3RfcnRwX3Nlc3Npb25fcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0UnRwU2Vzc2lvbiwgZ3N0X3J0cF9zZXNzaW9uLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2Vzc2lvbl9jbGFzc19pbml0IChHc3RSdHBTZXNzaW9uQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoR3N0UnRwU2Vzc2lvblByaXZhdGUpKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfc2Vzc2lvbl9maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9zZXNzaW9uX2dldF9wcm9wZXJ0eTsKLQotICAvKioKLSAgICogR3N0UnRwU2Vzc2lvbjo6cmVxdWVzdC1wdC1tYXA6Ci0gICAqIEBzZXNzOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHB0OiB0aGUgcHQKLSAgICoKLSAgICogUmVxdWVzdCB0aGUgcGF5bG9hZCB0eXBlIGFzICNHc3RDYXBzIGZvciBAcHQuCi0gICAqLwotICBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfUkVRVUVTVF9QVF9NQVBdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJlcXVlc3QtcHQtbWFwIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cFNlc3Npb25DbGFzcywgcmVxdWVzdF9wdF9tYXApLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdTVF9UWVBFX0NBUFMsIDEsIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cFNlc3Npb246OmNsZWFyLXB0LW1hcDoKLSAgICogQHNlc3M6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKgotICAgKiBDbGVhciB0aGUgY2FjaGVkIHB0LW1hcHMgcmVxdWVzdGVkIHdpdGggI0dzdFJ0cFNlc3Npb246OnJlcXVlc3QtcHQtbWFwLgotICAgKi8KLSAgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX0NMRUFSX1BUX01BUF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiY2xlYXItcHQtbWFwIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX0FDVElPTiwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsIGNsZWFyX3B0X21hcCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLQotICAvKioKLSAgICogR3N0UnRwU2Vzc2lvbjo6b24tbmV3LXNzcmM6Ci0gICAqIEBzZXNzOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNzcmM6IHRoZSBTU1JDCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhIG5ldyBTU1JDIHRoYXQgZW50ZXJlZCBAc2Vzc2lvbi4KLSAgICovCi0gIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9ORVdfU1NSQ10gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tbmV3LXNzcmMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwU2Vzc2lvbkNsYXNzLCBvbl9uZXdfc3NyYyksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUlOVCwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cFNlc3Npb246Om9uLXNzcmNfY29sbGlzaW9uOgotICAgKiBAc2VzczogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgd2hlbiB3ZSBoYXZlIGFuIFNTUkMgY29sbGlzaW9uCi0gICAqLwotICBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19DT0xMSVNJT05dID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNzcmMtY29sbGlzaW9uIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cFNlc3Npb25DbGFzcywKLSAgICAgICAgICBvbl9zc3JjX2NvbGxpc2lvbiksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULAotICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cFNlc3Npb246Om9uLXNzcmNfdmFsaWRhdGVkOgotICAgKiBAc2VzczogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYSBuZXcgU1NSQyB0aGF0IGJlY2FtZSB2YWxpZGF0ZWQuCi0gICAqLwotICBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19WQUxJREFURURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNzcmMtdmFsaWRhdGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cFNlc3Npb25DbGFzcywKLSAgICAgICAgICBvbl9zc3JjX3ZhbGlkYXRlZCksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULAotICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cFNlc3Npb246Om9uLXNzcmMtYWN0aXZlOgotICAgKiBAc2VzczogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgb2YgYSBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuCi0gICAqLwotICBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19BQ1RJVkVdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNzcmMtYWN0aXZlIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cFNlc3Npb25DbGFzcywKLSAgICAgICAgICBvbl9zc3JjX2FjdGl2ZSksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULAotICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJ0cFNlc3Npb246Om9uLXNzcmMtc2RlczoKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3JjOiB0aGUgU1NSQwotICAgKgotICAgKiBOb3RpZnkgdGhhdCBhIG5ldyBTREVTIHdhcyByZWNlaXZlZCBmb3IgU1NSQy4KLSAgICovCi0gIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX1NERVNdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNzcmMtc2RlcyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsIG9uX3NzcmNfc2RlcyksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUlOVCwgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKLQotICAvKioKLSAgICogR3N0UnRwU2Vzc2lvbjo6b24tYnllLXNzcmM6Ci0gICAqIEBzZXNzOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNzcmM6IHRoZSBTU1JDCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgYmVjYW1lIGluYWN0aXZlIGJlY2F1c2Ugb2YgYSBCWUUgcGFja2V0LgotICAgKi8KLSAgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0JZRV9TU1JDXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1ieWUtc3NyYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsIG9uX2J5ZV9zc3JjKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOwotICAvKioKLSAgICogR3N0UnRwU2Vzc2lvbjo6b24tYnllLXRpbWVvdXQ6Ci0gICAqIEBzZXNzOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNzcmM6IHRoZSBTU1JDCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgaGFzIHRpbWVkIG91dCBiZWNhdXNlIG9mIEJZRQotICAgKi8KLSAgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0JZRV9USU1FT1VUXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1ieWUtdGltZW91dCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsIG9uX2J5ZV90aW1lb3V0KSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOwotICAvKioKLSAgICogR3N0UnRwU2Vzc2lvbjo6b24tdGltZW91dDoKLSAgICogQHNlc3M6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3NyYzogdGhlIFNTUkMKLSAgICoKLSAgICogTm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0Ci0gICAqLwotICBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fVElNRU9VVF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tdGltZW91dCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsIG9uX3RpbWVvdXQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1VJTlQsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSdHBTZXNzaW9uOjpvbi1zZW5kZXItdGltZW91dDoKLSAgICogQHNlc3M6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3NyYzogdGhlIFNTUkMKLSAgICoKLSAgICogTm90aWZ5IG9mIGEgc2VuZGVyIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0IGFuZCBiZWNhbWUgYSByZWNlaXZlcgotICAgKi8KLSAgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9USU1FT1VUXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1zZW5kZXItdGltZW91dCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsCi0gICAgICAgICAgb25fc2VuZGVyX3RpbWVvdXQpLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUlOVCwKLSAgICAgIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgLyoqCi0gICAqIEdzdFJ0cFNlc3Npb246Om9uLW5ldy1zZW5kZXItc3NyYzoKLSAgICogQHNlc3M6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3NyYzogdGhlIHNlbmRlciBTU1JDCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICoKLSAgICogTm90aWZ5IG9mIGEgbmV3IHNlbmRlciBTU1JDIHRoYXQgZW50ZXJlZCBAc2Vzc2lvbi4KLSAgICovCi0gIGdzdF9ydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9ORVdfU0VOREVSX1NTUkNdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLW5ldy1zZW5kZXItc3NyYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTZXNzaW9uQ2xhc3MsIG9uX25ld19zc3JjKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULCBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBTZXNzaW9uOjpvbi1zZW5kZXItc3NyYy1hY3RpdmU6Ci0gICAqIEBzZXNzOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNzcmM6IHRoZSBzZW5kZXIgU1NSQwotICAgKgotICAgKiBTaW5jZTogMS44Ci0gICAqCi0gICAqIE5vdGlmeSBvZiBhIHNlbmRlciBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuCi0gICAqLwotICBnc3RfcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fU0VOREVSX1NTUkNfQUNUSVZFXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1zZW5kZXItc3NyYy1hY3RpdmUiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwU2Vzc2lvbkNsYXNzLAotICAgICAgICAgIG9uX3NzcmNfYWN0aXZlKSwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1VJTlQsCi0gICAgICBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkFORFdJRFRILAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJhbmR3aWR0aCIsICJCYW5kd2lkdGgiLAotICAgICAgICAgICJUaGUgYmFuZHdpZHRoIG9mIHRoZSBzZXNzaW9uIGluIGJ5dGVzIHBlciBzZWNvbmQgKDAgZm9yIGF1dG8tZGlzY292ZXIpIiwKLSAgICAgICAgICAwLjAsIEdfTUFYRE9VQkxFLCBERUZBVUxUX0JBTkRXSURUSCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUQ1BfRlJBQ1RJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgicnRjcC1mcmFjdGlvbiIsICJSVENQIEZyYWN0aW9uIiwKLSAgICAgICAgICAiVGhlIFJUQ1AgYmFuZHdpZHRoIG9mIHRoZSBzZXNzaW9uIGluIGJ5dGVzIHBlciBzZWNvbmQgIgotICAgICAgICAgICIob3IgYXMgYSByZWFsIGZyYWN0aW9uIG9mIHRoZSBSVFAgYmFuZHdpZHRoIGlmIDwgMS4wKSIsCi0gICAgICAgICAgMC4wLCBHX01BWERPVUJMRSwgREVGQVVMVF9SVENQX0ZSQUNUSU9OLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRDUF9SUl9CQU5EV0lEVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicnRjcC1yci1iYW5kd2lkdGgiLCAiUlRDUCBSUiBiYW5kd2lkdGgiLAotICAgICAgICAgICJUaGUgUlRDUCBiYW5kd2lkdGggdXNlZCBmb3IgcmVjZWl2ZXJzIGluIGJ5dGVzIHBlciBzZWNvbmQgKC0xID0gZGVmYXVsdCkiLAotICAgICAgICAgIC0xLCBHX01BWElOVCwgREVGQVVMVF9SVENQX1JSX0JBTkRXSURUSCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUQ1BfUlNfQkFORFdJRFRILAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInJ0Y3AtcnMtYmFuZHdpZHRoIiwgIlJUQ1AgUlMgYmFuZHdpZHRoIiwKLSAgICAgICAgICAiVGhlIFJUQ1AgYmFuZHdpZHRoIHVzZWQgZm9yIHNlbmRlcnMgaW4gYnl0ZXMgcGVyIHNlY29uZCAoLTEgPSBkZWZhdWx0KSIsCi0gICAgICAgICAgLTEsIEdfTUFYSU5ULCBERUZBVUxUX1JUQ1BfUlNfQkFORFdJRFRILAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0RFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoInNkZXMiLCAiU0RFUyIsCi0gICAgICAgICAgIlRoZSBTREVTIGl0ZW1zIG9mIHRoaXMgc2Vzc2lvbiIsCi0gICAgICAgICAgR1NUX1RZUEVfU1RSVUNUVVJFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9TT1VSQ0VTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJudW0tc291cmNlcyIsICJOdW0gU291cmNlcyIsCi0gICAgICAgICAgIlRoZSBudW1iZXIgb2Ygc291cmNlcyBpbiB0aGUgc2Vzc2lvbiIsIDAsIEdfTUFYVUlOVCwKLSAgICAgICAgICBERUZBVUxUX05VTV9TT1VSQ0VTLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTlVNX0FDVElWRV9TT1VSQ0VTLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJudW0tYWN0aXZlLXNvdXJjZXMiLCAiTnVtIEFjdGl2ZSBTb3VyY2VzIiwKLSAgICAgICAgICAiVGhlIG51bWJlciBvZiBhY3RpdmUgc291cmNlcyBpbiB0aGUgc2Vzc2lvbiIsIDAsIEdfTUFYVUlOVCwKLSAgICAgICAgICBERUZBVUxUX05VTV9BQ1RJVkVfU09VUkNFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSU5URVJOQUxfU0VTU0lPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJpbnRlcm5hbC1zZXNzaW9uIiwgIkludGVybmFsIFNlc3Npb24iLAotICAgICAgICAgICJUaGUgaW50ZXJuYWwgUlRQU2Vzc2lvbiBvYmplY3QiLCBSVFBfVFlQRV9TRVNTSU9OLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9VU0VfUElQRUxJTkVfQ0xPQ0ssCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInVzZS1waXBlbGluZS1jbG9jayIsICJVc2UgcGlwZWxpbmUgY2xvY2siLAotICAgICAgICAgICJVc2UgdGhlIHBpcGVsaW5lIHJ1bm5pbmctdGltZSB0byBzZXQgdGhlIE5UUCB0aW1lIGluIHRoZSBSVENQIFNSIG1lc3NhZ2VzICIKLSAgICAgICAgICAiKERFUFJFQ0FURUQ6IFVzZSBudHAtdGltZS1zb3VyY2UgcHJvcGVydHkpIiwKLSAgICAgICAgICBERUZBVUxUX1VTRV9QSVBFTElORV9DTE9DSywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX0RFUFJFQ0FURUQpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUQ1BfTUlOX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInJ0Y3AtbWluLWludGVydmFsIiwgIk1pbmltdW0gUlRDUCBpbnRlcnZhbCIsCi0gICAgICAgICAgIk1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBSZWd1bGFyIFJUQ1AgcGFja2V0IChpbiBucykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1JUQ1BfTUlOX0lOVEVSVkFMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUFJPQkFUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJwcm9iYXRpb24iLCAiTnVtYmVyIG9mIHByb2JhdGlvbnMiLAotICAgICAgICAgICJDb25zZWN1dGl2ZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVycyB0byBhY2NlcHQgdGhlIHNvdXJjZSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX1BST0JBVElPTiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9EUk9QT1VUX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1kcm9wb3V0LXRpbWUiLCAiTWF4IGRyb3BvdXQgdGltZSIsCi0gICAgICAgICAgIlRoZSBtYXhpbXVtIHRpbWUgKG1pbGxpc2Vjb25kcykgb2YgbWlzc2luZyBwYWNrZXRzIHRvbGVyYXRlZC4iLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfRFJPUE9VVF9USU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUFYX01JU09SREVSX1RJTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoIm1heC1taXNvcmRlci10aW1lIiwgIk1heCBtaXNvcmRlciB0aW1lIiwKLSAgICAgICAgICAiVGhlIG1heGltdW0gdGltZSAobWlsbGlzZWNvbmRzKSBvZiBtaXNvcmRlcmVkIHBhY2tldHMgdG9sZXJhdGVkLiIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX01BWF9NSVNPUkRFUl9USU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSdHBTZXNzaW9uOjpzdGF0czoKLSAgICoKLSAgICogVmFyaW91cyBzZXNzaW9uIHN0YXRpc3RpY3MuIFRoaXMgcHJvcGVydHkgcmV0dXJucyBhIEdzdFN0cnVjdHVyZQotICAgKiB3aXRoIG5hbWUgYXBwbGljYXRpb24veC1ydHAtc2Vzc2lvbi1zdGF0cyB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOgotICAgKgotICAgKiAgInJ0eC1jb3VudCIgICAgICAgR19UWVBFX1VJTlQgICBUaGUgbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIGV2ZW50cwotICAgKiAgICAgIHJlY2VpdmVkIGZyb20gZG93bnN0cmVhbSAoaW4gcmVjZWl2ZXIgbW9kZSkKLSAgICogICJydHgtZHJvcC1jb3VudCIgIEdfVFlQRV9VSU5UICAgVGhlIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbiBldmVudHMKLSAgICogICAgICBkcm9wcGVkIChkdWUgdG8gYmFuZHdpZHRoIGNvbnN0cmFpbnRzKQotICAgKiAgInNlbnQtbmFjay1jb3VudCIgR19UWVBFX1VJTlQgICBOdW1iZXIgb2YgTkFDS3Mgc2VudAotICAgKiAgInJlY3YtbmFjay1jb3VudCIgR19UWVBFX1VJTlQgICBOdW1iZXIgb2YgTkFDS3MgcmVjZWl2ZWQKLSAgICogICJzb3VyY2Utc3RhdHMiICAgIEdfVFlQRV9CT1hFRCAgR1ZhbHVlQXJyYXkgb2YgI1JUUFNvdXJjZTo6c3RhdHMgZm9yIGFsbAotICAgKiAgICAgIFJUUCBzb3VyY2VzIChTaW5jZSAxLjgpCi0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJzdGF0cyIsICJTdGF0aXN0aWNzIiwKLSAgICAgICAgICAiVmFyaW91cyBzdGF0aXN0aWNzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFBfUFJPRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgicnRwLXByb2ZpbGUiLCAiUlRQIFByb2ZpbGUiLAotICAgICAgICAgICJSVFAgcHJvZmlsZSB0byB1c2UiLCBHU1RfVFlQRV9SVFBfUFJPRklMRSwgREVGQVVMVF9SVFBfUFJPRklMRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05UUF9USU1FX1NPVVJDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibnRwLXRpbWUtc291cmNlIiwgIk5UUCBUaW1lIFNvdXJjZSIsCi0gICAgICAgICAgIk5UUCB0aW1lIHNvdXJjZSBmb3IgUlRDUCBwYWNrZXRzIiwKLSAgICAgICAgICBnc3RfcnRwX250cF90aW1lX3NvdXJjZV9nZXRfdHlwZSAoKSwgREVGQVVMVF9OVFBfVElNRV9TT1VSQ0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVENQX1NZTkNfU0VORF9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJydGNwLXN5bmMtc2VuZC10aW1lIiwgIlJUQ1AgU3luYyBTZW5kIFRpbWUiLAotICAgICAgICAgICJVc2Ugc2VuZCB0aW1lIG9yIGNhcHR1cmUgdGltZSBmb3IgUlRDUCBzeW5jICIKLSAgICAgICAgICAiKFRSVUUgPSBzZW5kIHRpbWUsIEZBTFNFID0gY2FwdHVyZSB0aW1lKSIsCi0gICAgICAgICAgREVGQVVMVF9SVENQX1NZTkNfU0VORF9USU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zZXNzaW9uX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfbmV3X3BhZCk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlbGVhc2VfcGFkID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3Nlc3Npb25fcmVsZWFzZV9wYWQpOwotCi0gIGtsYXNzLT5jbGVhcl9wdF9tYXAgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9zZXNzaW9uX2NsZWFyX3B0X21hcCk7Ci0KLSAgLyogc2luayBwYWRzICovCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnJ0cHNlc3Npb25fcmVjdl9ydHBfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnJ0cHNlc3Npb25fcmVjdl9ydGNwX3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZydHBzZXNzaW9uX3NlbmRfcnRwX3NpbmtfdGVtcGxhdGUpOwotCi0gIC8qIHNyYyBwYWRzICovCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnJ0cHNlc3Npb25fcmVjdl9ydHBfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmcnRwc2Vzc2lvbl9zeW5jX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnJ0cHNlc3Npb25fc2VuZF9ydHBfc3JjX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmcnRwc2Vzc2lvbl9zZW5kX3J0Y3Bfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiUlRQIFNlc3Npb24iLAotICAgICAgIkZpbHRlci9OZXR3b3JrL1JUUCIsCi0gICAgICAiSW1wbGVtZW50IGFuIFJUUCBzZXNzaW9uIiwgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfc2Vzc2lvbl9kZWJ1ZywKLSAgICAgICJydHBzZXNzaW9uIiwgMCwgIlJUUCBTZXNzaW9uIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25faW5pdCAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24pCi17Ci0gIHJ0cHNlc3Npb24tPnByaXYgPSBHU1RfUlRQX1NFU1NJT05fR0VUX1BSSVZBVEUgKHJ0cHNlc3Npb24pOwotICBnX211dGV4X2luaXQgKCZydHBzZXNzaW9uLT5wcml2LT5sb2NrKTsKLSAgZ19jb25kX2luaXQgKCZydHBzZXNzaW9uLT5wcml2LT5jb25kKTsKLSAgcnRwc2Vzc2lvbi0+cHJpdi0+c3lzY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgcnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiA9IHJ0cF9zZXNzaW9uX25ldyAoKTsKLSAgcnRwc2Vzc2lvbi0+cHJpdi0+dXNlX3BpcGVsaW5lX2Nsb2NrID0gREVGQVVMVF9VU0VfUElQRUxJTkVfQ0xPQ0s7Ci0gIHJ0cHNlc3Npb24tPnByaXYtPnJ0Y3Bfc3luY19zZW5kX3RpbWUgPSBERUZBVUxUX1JUQ1BfU1lOQ19TRU5EX1RJTUU7Ci0KLSAgLyogY29uZmlndXJlIGNhbGxiYWNrcyAqLwotICBydHBfc2Vzc2lvbl9zZXRfY2FsbGJhY2tzIChydHBzZXNzaW9uLT5wcml2LT5zZXNzaW9uLCAmY2FsbGJhY2tzLCBydHBzZXNzaW9uKTsKLSAgLyogY29uZmlndXJlIHNpZ25hbHMgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLW5ldy1zc3JjIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX25ld19zc3JjLCBydHBzZXNzaW9uKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLXNzcmMtY29sbGlzaW9uIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfY29sbGlzaW9uLCBydHBzZXNzaW9uKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLXNzcmMtdmFsaWRhdGVkIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfdmFsaWRhdGVkLCBydHBzZXNzaW9uKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLXNzcmMtYWN0aXZlIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfYWN0aXZlLCBydHBzZXNzaW9uKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLXNzcmMtc2RlcyIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9zc3JjX3NkZXMsIHJ0cHNlc3Npb24pOwotICBnX3NpZ25hbF9jb25uZWN0IChydHBzZXNzaW9uLT5wcml2LT5zZXNzaW9uLCAib24tYnllLXNzcmMiLAotICAgICAgKEdDYWxsYmFjaykgb25fYnllX3NzcmMsIHJ0cHNlc3Npb24pOwotICBnX3NpZ25hbF9jb25uZWN0IChydHBzZXNzaW9uLT5wcml2LT5zZXNzaW9uLCAib24tYnllLXRpbWVvdXQiLAotICAgICAgKEdDYWxsYmFjaykgb25fYnllX3RpbWVvdXQsIHJ0cHNlc3Npb24pOwotICBnX3NpZ25hbF9jb25uZWN0IChydHBzZXNzaW9uLT5wcml2LT5zZXNzaW9uLCAib24tdGltZW91dCIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl90aW1lb3V0LCBydHBzZXNzaW9uKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLXNlbmRlci10aW1lb3V0IiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NlbmRlcl90aW1lb3V0LCBydHBzZXNzaW9uKTsKLSAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgIm9uLW5ldy1zZW5kZXItc3NyYyIsCi0gICAgICAoR0NhbGxiYWNrKSBvbl9uZXdfc2VuZGVyX3NzcmMsIHJ0cHNlc3Npb24pOwotICBnX3NpZ25hbF9jb25uZWN0IChydHBzZXNzaW9uLT5wcml2LT5zZXNzaW9uLCAib24tc2VuZGVyLXNzcmMtYWN0aXZlIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX3NlbmRlcl9zc3JjX2FjdGl2ZSwgcnRwc2Vzc2lvbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cHNlc3Npb24tPnByaXYtPnNlc3Npb24sICJub3RpZnk6OnN0YXRzIiwKLSAgICAgIChHQ2FsbGJhY2spIG9uX25vdGlmeV9zdGF0cywgcnRwc2Vzc2lvbik7Ci0gIHJ0cHNlc3Npb24tPnByaXYtPnB0bWFwID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfY2Fwc191bnJlZik7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NlZywgR1NUX0ZPUk1BVF9VTkRFRklORUQpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2VnLCBHU1RfRk9STUFUX1VOREVGSU5FRCk7Ci0KLSAgcnRwc2Vzc2lvbi0+cHJpdi0+dGhyZWFkX3N0b3BwZWQgPSBUUlVFOwotCi0gIHJ0cHNlc3Npb24tPnByaXYtPnJ0eF9jb3VudCA9IDA7Ci0KLSAgcnRwc2Vzc2lvbi0+cHJpdi0+bnRwX3RpbWVfc291cmNlID0gREVGQVVMVF9OVFBfVElNRV9TT1VSQ0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAob2JqZWN0KTsKLQotICBnX2hhc2hfdGFibGVfZGVzdHJveSAocnRwc2Vzc2lvbi0+cHJpdi0+cHRtYXApOwotICBnX211dGV4X2NsZWFyICgmcnRwc2Vzc2lvbi0+cHJpdi0+bG9jayk7Ci0gIGdfY29uZF9jbGVhciAoJnJ0cHNlc3Npb24tPnByaXYtPmNvbmQpOwotICBnX29iamVjdF91bnJlZiAocnRwc2Vzc2lvbi0+cHJpdi0+c3lzY2xvY2spOwotICBnX29iamVjdF91bnJlZiAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBHc3RSdHBTZXNzaW9uUHJpdmF0ZSAqcHJpdjsKLQotICBydHBzZXNzaW9uID0gR1NUX1JUUF9TRVNTSU9OIChvYmplY3QpOwotICBwcml2ID0gcnRwc2Vzc2lvbi0+cHJpdjsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQkFORFdJRFRIOgotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJiYW5kd2lkdGgiLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9GUkFDVElPTjoKLSAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAicnRjcC1mcmFjdGlvbiIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX1JSX0JBTkRXSURUSDoKLSAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAicnRjcC1yci1iYW5kd2lkdGgiLAotICAgICAgICAgIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX1JTX0JBTkRXSURUSDoKLSAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAicnRjcC1ycy1iYW5kd2lkdGgiLAotICAgICAgICAgIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TREVTOgotICAgICAgcnRwX3Nlc3Npb25fc2V0X3NkZXNfc3RydWN0IChwcml2LT5zZXNzaW9uLCBnX3ZhbHVlX2dldF9ib3hlZCAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfUElQRUxJTkVfQ0xPQ0s6Ci0gICAgICBwcml2LT51c2VfcGlwZWxpbmVfY2xvY2sgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9NSU5fSU5URVJWQUw6Ci0gICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChwcml2LT5zZXNzaW9uKSwgInJ0Y3AtbWluLWludGVydmFsIiwKLSAgICAgICAgICB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPQkFUSU9OOgotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJwcm9iYXRpb24iLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0RST1BPVVRfVElNRToKLSAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAibWF4LWRyb3BvdXQtdGltZSIsCi0gICAgICAgICAgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9NSVNPUkRFUl9USU1FOgotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJtYXgtbWlzb3JkZXItdGltZSIsCi0gICAgICAgICAgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUUF9QUk9GSUxFOgotICAgICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJydHAtcHJvZmlsZSIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVFBfVElNRV9TT1VSQ0U6Ci0gICAgICBwcml2LT5udHBfdGltZV9zb3VyY2UgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9TWU5DX1NFTkRfVElNRToKLSAgICAgIHByaXYtPnJ0Y3Bfc3luY19zZW5kX3RpbWUgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0gIEdzdFJ0cFNlc3Npb25Qcml2YXRlICpwcml2OwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKG9iamVjdCk7Ci0gIHByaXYgPSBydHBzZXNzaW9uLT5wcml2OwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9CQU5EV0lEVEg6Ci0gICAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChwcml2LT5zZXNzaW9uKSwgImJhbmR3aWR0aCIsIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX0ZSQUNUSU9OOgotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJydGNwLWZyYWN0aW9uIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfUlJfQkFORFdJRFRIOgotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJydGNwLXJyLWJhbmR3aWR0aCIsCi0gICAgICAgICAgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfUlNfQkFORFdJRFRIOgotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJydGNwLXJzLWJhbmR3aWR0aCIsCi0gICAgICAgICAgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NERVM6Ci0gICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKHZhbHVlLCBydHBfc2Vzc2lvbl9nZXRfc2Rlc19zdHJ1Y3QgKHByaXYtPnNlc3Npb24pKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fU09VUkNFUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBfc2Vzc2lvbl9nZXRfbnVtX3NvdXJjZXMgKHByaXYtPnNlc3Npb24pKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fQUNUSVZFX1NPVVJDRVM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwKLSAgICAgICAgICBydHBfc2Vzc2lvbl9nZXRfbnVtX2FjdGl2ZV9zb3VyY2VzIChwcml2LT5zZXNzaW9uKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJOQUxfU0VTU0lPTjoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHByaXYtPnNlc3Npb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRV9QSVBFTElORV9DTE9DSzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwcml2LT51c2VfcGlwZWxpbmVfY2xvY2spOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfTUlOX0lOVEVSVkFMOgotICAgICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAocHJpdi0+c2Vzc2lvbiksICJydGNwLW1pbi1pbnRlcnZhbCIsCi0gICAgICAgICAgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST0JBVElPTjoKLSAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAicHJvYmF0aW9uIiwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9EUk9QT1VUX1RJTUU6Ci0gICAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChwcml2LT5zZXNzaW9uKSwgIm1heC1kcm9wb3V0LXRpbWUiLAotICAgICAgICAgIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfTUlTT1JERVJfVElNRToKLSAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAibWF4LW1pc29yZGVyLXRpbWUiLAotICAgICAgICAgIHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVEFUUzoKLSAgICAgIGdfdmFsdWVfdGFrZV9ib3hlZCAodmFsdWUsIGdzdF9ydHBfc2Vzc2lvbl9jcmVhdGVfc3RhdHMgKHJ0cHNlc3Npb24pKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFBfUFJPRklMRToKLSAgICAgIGdfb2JqZWN0X2dldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHByaXYtPnNlc3Npb24pLCAicnRwLXByb2ZpbGUiLCB2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlRQX1RJTUVfU09VUkNFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHByaXYtPm50cF90aW1lX3NvdXJjZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9TWU5DX1NFTkRfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBwcml2LT5ydGNwX3N5bmNfc2VuZF90aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1nc3RfcnRwX3Nlc3Npb25fY3JlYXRlX3N0YXRzIChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbikKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIGdfb2JqZWN0X2dldCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgInN0YXRzIiwgJnMsIE5VTEwpOwotICBnc3Rfc3RydWN0dXJlX3NldCAocywgInJ0eC1jb3VudCIsIEdfVFlQRV9VSU5ULCBydHBzZXNzaW9uLT5wcml2LT5ydHhfY291bnQsCi0gICAgICBOVUxMKTsKLQotICByZXR1cm4gczsKLX0KLQotc3RhdGljIHZvaWQKLWdldF9jdXJyZW50X3RpbWVzIChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbiwgR3N0Q2xvY2tUaW1lICogcnVubmluZ190aW1lLAotICAgIGd1aW50NjQgKiBudHBuc3RpbWUpCi17Ci0gIGd1aW50NjQgbnRwbnMgPSAtMTsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lLCBydCwgY2xvY2tfdGltZTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBpZiAoKGNsb2NrID0gR1NUX0VMRU1FTlRfQ0xPQ0sgKHJ0cHNlc3Npb24pKSkgewotICAgIGJhc2VfdGltZSA9IEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHNlc3Npb24pLT5iYXNlX3RpbWU7Ci0gICAgZ3N0X29iamVjdF9yZWYgKGNsb2NrKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICAvKiBnZXQgY3VycmVudCBjbG9jayB0aW1lIGFuZCBjb252ZXJ0IHRvIHJ1bm5pbmcgdGltZSAqLwotICAgIGNsb2NrX3RpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKGNsb2NrKTsKLSAgICBydCA9IGNsb2NrX3RpbWUgLSBiYXNlX3RpbWU7Ci0KLSAgICBpZiAocnRwc2Vzc2lvbi0+cHJpdi0+dXNlX3BpcGVsaW5lX2Nsb2NrKSB7Ci0gICAgICBudHBucyA9IHJ0OwotICAgICAgLyogYWRkIGNvbnN0YW50IHRvIGNvbnZlcnQgZnJvbSAxOTcwIGJhc2VkIHRpbWUgdG8gMTkwMCBiYXNlZCB0aW1lICovCi0gICAgICBudHBucyArPSAoMjIwODk4ODgwMExMICogR1NUX1NFQ09ORCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN3aXRjaCAocnRwc2Vzc2lvbi0+cHJpdi0+bnRwX3RpbWVfc291cmNlKSB7Ci0gICAgICAgIGNhc2UgR1NUX1JUUF9OVFBfVElNRV9TT1VSQ0VfTlRQOgotICAgICAgICBjYXNlIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX1VOSVg6ewotICAgICAgICAgIEdUaW1lVmFsIGN1cnJlbnQ7Ci0KLSAgICAgICAgICAvKiBnZXQgY3VycmVudCBOVFAgdGltZSAqLwotICAgICAgICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJmN1cnJlbnQpOwotICAgICAgICAgIG50cG5zID0gR1NUX1RJTUVWQUxfVE9fVElNRSAoY3VycmVudCk7Ci0KLSAgICAgICAgICAvKiBhZGQgY29uc3RhbnQgdG8gY29udmVydCBmcm9tIDE5NzAgYmFzZWQgdGltZSB0byAxOTAwIGJhc2VkIHRpbWUgKi8KLSAgICAgICAgICBpZiAocnRwc2Vzc2lvbi0+cHJpdi0+bnRwX3RpbWVfc291cmNlID09IEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX05UUCkKLSAgICAgICAgICAgIG50cG5zICs9ICgyMjA4OTg4ODAwTEwgKiBHU1RfU0VDT05EKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX1JVTk5JTkdfVElNRToKLSAgICAgICAgICBudHBucyA9IHJ0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX0NMT0NLX1RJTUU6Ci0gICAgICAgICAgbnRwbnMgPSBjbG9ja190aW1lOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIG50cG5zID0gLTE7Ci0gICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHBzZXNzaW9uKTsKLSAgICBydCA9IC0xOwotICAgIG50cG5zID0gLTE7Ci0gIH0KLSAgaWYgKHJ1bm5pbmdfdGltZSkKLSAgICAqcnVubmluZ190aW1lID0gcnQ7Ci0gIGlmIChudHBuc3RpbWUpCi0gICAgKm50cG5zdGltZSA9IG50cG5zOwotfQotCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEdTVF9SVFBfU0VTU0lPTl9MT0NLICovCi1zdGF0aWMgdm9pZAotc2lnbmFsX3dhaXRpbmdfcnRjcF90aHJlYWRfdW5sb2NrZWQgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBpZiAocnRwc2Vzc2lvbi0+cHJpdi0+d2FpdF9zZW5kKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJzaWduYWwgUlRDUCB0aHJlYWQiKTsKLSAgICBydHBzZXNzaW9uLT5wcml2LT53YWl0X3NlbmQgPSBGQUxTRTsKLSAgICBHU1RfUlRQX1NFU1NJT05fU0lHTkFMIChydHBzZXNzaW9uKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcnRjcF90aHJlYWQgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBHc3RDbG9ja0lEIGlkOwotICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lOwotICBHc3RDbG9ja1RpbWUgbmV4dF90aW1lb3V0OwotICBndWludDY0IG50cG5zdGltZTsKLSAgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZTsKLSAgUlRQU2Vzc2lvbiAqc2Vzc2lvbjsKLSAgR3N0Q2xvY2sgKnN5c2Nsb2NrOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJlbnRlcmluZyBSVENQIHRocmVhZCIpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLQotICB3aGlsZSAocnRwc2Vzc2lvbi0+cHJpdi0+d2FpdF9zZW5kKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJ3YWl0aW5nIGZvciBnZXR0aW5nIHN0YXJ0ZWQiKTsKLSAgICBHU1RfUlRQX1NFU1NJT05fV0FJVCAocnRwc2Vzc2lvbik7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJzaWduYWxlZC4uLiIpOwotICB9Ci0KLSAgc3lzY2xvY2sgPSBydHBzZXNzaW9uLT5wcml2LT5zeXNjbG9jazsKLSAgY3VycmVudF90aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChzeXNjbG9jayk7Ci0KLSAgc2Vzc2lvbiA9IHJ0cHNlc3Npb24tPnByaXYtPnNlc3Npb247Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInN0YXJ0aW5nIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGN1cnJlbnRfdGltZSkpOwotICBzZXNzaW9uLT5zdGFydF90aW1lID0gY3VycmVudF90aW1lOwotCi0gIHdoaWxlICghcnRwc2Vzc2lvbi0+cHJpdi0+c3RvcF90aHJlYWQpIHsKLSAgICBHc3RDbG9ja1JldHVybiByZXM7Ci0KLSAgICAvKiBnZXQgaW5pdGlhbCBlc3RpbWF0ZSAqLwotICAgIG5leHRfdGltZW91dCA9IHJ0cF9zZXNzaW9uX25leHRfdGltZW91dCAoc2Vzc2lvbiwgY3VycmVudF90aW1lKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJuZXh0IGNoZWNrIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChuZXh0X3RpbWVvdXQpKTsKLQotICAgIC8qIGxlYXZlIGlmIG5vIG1vcmUgdGltZW91dHMsIHRoZSBzZXNzaW9uIGVuZGVkICovCi0gICAgaWYgKG5leHRfdGltZW91dCA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgICAgYnJlYWs7Ci0KLSAgICBpZCA9IHJ0cHNlc3Npb24tPnByaXYtPmlkID0KLSAgICAgICAgZ3N0X2Nsb2NrX25ld19zaW5nbGVfc2hvdF9pZCAoc3lzY2xvY2ssIG5leHRfdGltZW91dCk7Ci0gICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICByZXMgPSBnc3RfY2xvY2tfaWRfd2FpdCAoaWQsIE5VTEwpOwotCi0gICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICAgIHJ0cHNlc3Npb24tPnByaXYtPmlkID0gTlVMTDsKLQotICAgIGlmIChydHBzZXNzaW9uLT5wcml2LT5zdG9wX3RocmVhZCkKLSAgICAgIGJyZWFrOwotCi0gICAgLyogdXBkYXRlIGN1cnJlbnQgdGltZSAqLwotICAgIGN1cnJlbnRfdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoc3lzY2xvY2spOwotCi0gICAgLyogZ2V0IGN1cnJlbnQgTlRQIHRpbWUgKi8KLSAgICBnZXRfY3VycmVudF90aW1lcyAocnRwc2Vzc2lvbiwgJnJ1bm5pbmdfdGltZSwgJm50cG5zdGltZSk7Ci0KLSAgICAvKiB3ZSBnZXQgdW5sb2NrZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHBlcmZvcm0gcmVjb25zaWRlcmF0aW9uLCBkb24ndCBwZXJmb3JtCi0gICAgICogdGhlIHRpbWVvdXQgYnV0IGdldCBhIG5ldyByZXBvcnRpbmcgZXN0aW1hdGUuICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInVubG9ja2VkICVkLCBjdXJyZW50ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgcmVzLCBHU1RfVElNRV9BUkdTIChjdXJyZW50X3RpbWUpKTsKLQotICAgIC8qIHBlcmZvcm0gYWN0aW9ucywgd2UgaWdub3JlIHJlc3VsdC4gUmVsZWFzZSBsb2NrIGJlY2F1c2UgaXQgbWlnaHQgcHVzaC4gKi8KLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLSAgICBydHBfc2Vzc2lvbl9vbl90aW1lb3V0IChzZXNzaW9uLCBjdXJyZW50X3RpbWUsIG50cG5zdGltZSwgcnVubmluZ190aW1lKTsKLSAgICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICBpZiAoIXJ0cF9zZXNzaW9uX2dldF9udW1fc291cmNlcyAoc2Vzc2lvbikpIHsKLSAgICAgIC8qIHdoZW4gbm8gc291cmNlcyBsZWZ0IGluIHRoZSBzZXNzaW9uLCBhbGwgb2YgdGhlIHRoZW0gaGF2ZSB3ZW50Ci0gICAgICAgKiBCWUUgYXQgc29tZSBwb2ludCBhbmQgcmVtb3ZlZCwgd2UgY2FuIHNlbmQgRU9TIHRvIHRoZQotICAgICAgICogcGlwZWxpbmUuICovCi0gICAgICBHc3RQYWQgKnJ0Y3Bfc3JjID0gcnRwc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYzsKLQotICAgICAgaWYgKHJ0Y3Bfc3JjKSB7Ci0gICAgICAgIGdzdF9vYmplY3RfcmVmIChydGNwX3NyYyk7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUIChydHBzZXNzaW9uLCAic2VuZGluZyBFT1MiKTsKLSAgICAgICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYywgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgICAgICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHJ0Y3Bfc3JjKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyogbWFyayB0aGUgdGhyZWFkIGFzIHN0b3BwZWQgbm93ICovCi0gIHJ0cHNlc3Npb24tPnByaXYtPnRocmVhZF9zdG9wcGVkID0gVFJVRTsKLSAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgImxlYXZpbmcgUlRDUCB0aHJlYWQiKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zdGFydF9ydGNwX3RocmVhZCAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24pCi17Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInN0YXJ0aW5nIFJUQ1AgdGhyZWFkIik7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBydHBzZXNzaW9uLT5wcml2LT5zdG9wX3RocmVhZCA9IEZBTFNFOwotICBpZiAocnRwc2Vzc2lvbi0+cHJpdi0+dGhyZWFkX3N0b3BwZWQpIHsKLSAgICAvKiBpZiB0aGUgdGhyZWFkIHN0b3BwZWQsIGFuZCB3ZSBzdGlsbCBoYXZlIGEgaGFuZGxlIHRvIHRoZSB0aHJlYWQsIGpvaW4gaXQKLSAgICAgKiBub3cuIFdlIGNhbiBzYWZlbHkgam9pbiB3aXRoIHRoZSBsb2NrIGhlbGQsIHRoZSB0aHJlYWQgd2lsbCBub3QgdGFrZSBpdAotICAgICAqIGFueW1vcmUuICovCi0gICAgaWYgKHJ0cHNlc3Npb24tPnByaXYtPnRocmVhZCkKLSAgICAgIGdfdGhyZWFkX2pvaW4gKHJ0cHNlc3Npb24tPnByaXYtPnRocmVhZCk7Ci0gICAgLyogb25seSBjcmVhdGUgYSBuZXcgdGhyZWFkIGlmIHRoZSBvbGQgb25lIHdhcyBzdG9wcGVkLiBPdGhlcndpc2Ugd2UgY2FuCi0gICAgICoganVzdCByZXVzZSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgb25lLiAqLwotICAgIHJ0cHNlc3Npb24tPnByaXYtPnRocmVhZCA9IGdfdGhyZWFkX3RyeV9uZXcgKCJydHBzZXNzaW9uLXJ0Y3AtdGhyZWFkIiwKLSAgICAgICAgKEdUaHJlYWRGdW5jKSBydGNwX3RocmVhZCwgcnRwc2Vzc2lvbiwgJmVycm9yKTsKLSAgICBydHBzZXNzaW9uLT5wcml2LT50aHJlYWRfc3RvcHBlZCA9IEZBTFNFOwotICB9Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIGlmIChlcnJvciAhPSBOVUxMKSB7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgImZhaWxlZCB0byBzdGFydCB0aHJlYWQsICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOwotICB9IGVsc2UgewotICAgIHJlcyA9IFRSVUU7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQKLXN0b3BfcnRjcF90aHJlYWQgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAic3RvcHBpbmcgUlRDUCB0aHJlYWQiKTsKLQotICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gIHJ0cHNlc3Npb24tPnByaXYtPnN0b3BfdGhyZWFkID0gVFJVRTsKLSAgc2lnbmFsX3dhaXRpbmdfcnRjcF90aHJlYWRfdW5sb2NrZWQgKHJ0cHNlc3Npb24pOwotICBpZiAocnRwc2Vzc2lvbi0+cHJpdi0+aWQpCi0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKHJ0cHNlc3Npb24tPnByaXYtPmlkKTsKLSAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1qb2luX3J0Y3BfdGhyZWFkIChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbikKLXsKLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICAvKiBkb24ndCB0cnkgdG8gam9pbiB3aGVuIHdlIGhhdmUgbm8gdGhyZWFkICovCi0gIGlmIChydHBzZXNzaW9uLT5wcml2LT50aHJlYWQgIT0gTlVMTCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJqb2luaW5nIFJUQ1AgdGhyZWFkIik7Ci0gICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICBnX3RocmVhZF9qb2luIChydHBzZXNzaW9uLT5wcml2LT50aHJlYWQpOwotCi0gICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICAgIC8qIGFmdGVyIHRoZSBqb2luLCB0YWtlIHRoZSBsb2NrIGFuZCBjbGVhciB0aGUgdGhyZWFkIHN0cnVjdHVyZS4gVGhlIGNhbGxlcgotICAgICAqIGlzIHN1cHBvc2VkIHRvIG5vdCBjb25jdXJyZW50bHkgY2FsbCBzdGFydCBhbmQgam9pbi4gKi8KLSAgICBydHBzZXNzaW9uLT5wcml2LT50aHJlYWQgPSBOVUxMOwotICB9Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9ydHBfc2Vzc2lvbl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXM7Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICAgICAgaWYgKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYykKLSAgICAgICAgcnRwc2Vzc2lvbi0+cHJpdi0+d2FpdF9zZW5kID0gVFJVRTsKLSAgICAgIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICAvKiBubyBuZWVkIHRvIGpvaW4geWV0LCB3ZSBtaWdodCB3YW50IHRvIGNvbnRpbnVlIGxhdGVyLiBBbHNvLCB0aGUKLSAgICAgICAqIGRhdGFmbG93IGNvdWxkIGJsb2NrIGRvd25zdHJlYW0gc28gdGhhdCBhIGpvaW4gY291bGQganVzdCBibG9jawotICAgICAgICogZm9yZXZlci4gKi8KLSAgICAgIHN0b3BfcnRjcF90aHJlYWQgKHJ0cHNlc3Npb24pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmVzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgaWYgKCFzdGFydF9ydGNwX3RocmVhZCAocnRwc2Vzc2lvbikpCi0gICAgICAgIGdvdG8gZmFpbGVkX3RocmVhZDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICAvKiBkb3duc3RyZWFtIGlzIG5vdyByZWxlYXNpbmcgdGhlIGRhdGFmbG93IGFuZCB3ZSBjYW4gam9pbi4gKi8KLSAgICAgIGpvaW5fcnRjcF90aHJlYWQgKHJ0cHNlc3Npb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWZhaWxlZF90aHJlYWQ6Ci0gIHsKLSAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmV0dXJuX3RydWUgKGdwb2ludGVyIGtleSwgZ3BvaW50ZXIgdmFsdWUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25fY2xlYXJfcHRfbWFwIChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbikKLXsKLSAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlIChydHBzZXNzaW9uLT5wcml2LT5wdG1hcCwgcmV0dXJuX3RydWUsIE5VTEwpOwotfQotCi0vKiBjYWxsZWQgd2hlbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyIGhhcyBhbiBSVFAgcGFja2V0IG9yIGEgbGlzdCBvZiBwYWNrZXRzCi0gKiByZWFkeSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9zZXNzaW9uX3Byb2Nlc3NfcnRwIChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc3JjLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbjsKLSAgR3N0UGFkICpydHBfc3JjOwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHVzZXJfZGF0YSk7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBpZiAoKHJ0cF9zcmMgPSBydHBzZXNzaW9uLT5yZWN2X3J0cF9zcmMpKQotICAgIGdzdF9vYmplY3RfcmVmIChydHBfc3JjKTsKLSAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgaWYgKHJ0cF9zcmMpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocnRwc2Vzc2lvbiwgInB1c2hpbmcgcmVjZWl2ZWQgUlRQIHBhY2tldCIpOwotICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaCAocnRwX3NyYywgYnVmZmVyKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc3JjKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAiZHJvcHBpbmcgcmVjZWl2ZWQgUlRQIHBhY2tldCIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gbWFuYWdlciBoYXMgYW4gUlRQIHBhY2tldCByZWFkeSBmb3IgZnVydGhlcgotICogc2VuZGluZyAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfc2Vzc2lvbl9zZW5kX3J0cCAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNyYywKLSAgICBncG9pbnRlciBkYXRhLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0OwotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBHc3RQYWQgKnJ0cF9zcmM7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAodXNlcl9kYXRhKTsKLQotICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gIGlmICgocnRwX3NyYyA9IHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYykpCi0gICAgZ3N0X29iamVjdF9yZWYgKHJ0cF9zcmMpOwotICBzaWduYWxfd2FpdGluZ19ydGNwX3RocmVhZF91bmxvY2tlZCAocnRwc2Vzc2lvbik7Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIGlmIChydHBfc3JjKSB7Ci0gICAgaWYgKEdTVF9JU19CVUZGRVIgKGRhdGEpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRwc2Vzc2lvbiwgInNlbmRpbmcgUlRQIHBhY2tldCIpOwotICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9wdXNoIChydHBfc3JjLCBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJzZW5kaW5nIFJUUCBsaXN0Iik7Ci0gICAgICByZXN1bHQgPSBnc3RfcGFkX3B1c2hfbGlzdCAocnRwX3NyYywgR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpKTsKLSAgICB9Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocnRwX3NyYyk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZGF0YSkpOwotICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19ydGNwX2V2ZW50cyAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24sIEdzdFBhZCAqIHNyY3BhZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U2VnbWVudCBzZWc7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgZ2NoYXIgKnN0cmVhbV9pZDsKLSAgZ2Jvb2xlYW4gaGF2ZV9ncm91cF9pZDsKLSAgZ3VpbnQgZ3JvdXBfaWQ7Ci0KLSAgc3RyZWFtX2lkID0KLSAgICAgIGdfc3RyZHVwX3ByaW50ZiAoIiUwOHglMDh4JTA4eCUwOHgiLCBnX3JhbmRvbV9pbnQgKCksIGdfcmFuZG9tX2ludCAoKSwKLSAgICAgIGdfcmFuZG9tX2ludCAoKSwgZ19yYW5kb21faW50ICgpKTsKLQotICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gIGlmIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rKSB7Ci0gICAgZXZlbnQgPQotICAgICAgICBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQgKHJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NpbmssCi0gICAgICAgIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApOwotICAgIGlmIChldmVudCkgewotICAgICAgaWYgKGdzdF9ldmVudF9wYXJzZV9ncm91cF9pZCAoZXZlbnQsICZncm91cF9pZCkpCi0gICAgICAgIGhhdmVfZ3JvdXBfaWQgPSBUUlVFOwotICAgICAgZWxzZQotICAgICAgICBoYXZlX2dyb3VwX2lkID0gRkFMU0U7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgaGF2ZV9ncm91cF9pZCA9IFRSVUU7Ci0gICAgICBncm91cF9pZCA9IGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGhhdmVfZ3JvdXBfaWQgPSBUUlVFOwotICAgIGdyb3VwX2lkID0gZ3N0X3V0aWxfZ3JvdXBfaWRfbmV4dCAoKTsKLSAgfQotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICBpZiAoaGF2ZV9ncm91cF9pZCkKLSAgICBnc3RfZXZlbnRfc2V0X2dyb3VwX2lkIChldmVudCwgZ3JvdXBfaWQpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZXZlbnQpOwotICBnX2ZyZWUgKHN0cmVhbV9pZCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0Y3AiKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAoc3JjcGFkLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWcsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnKTsKLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGV2ZW50KTsKLX0KLQotLyogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gbWFuYWdlciBoYXMgYW4gUlRDUCBwYWNrZXQgcmVhZHkgZm9yIGZ1cnRoZXIKLSAqIHNlbmRpbmcuICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9zZXNzaW9uX3NlbmRfcnRjcCAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNyYywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0gIEdzdFBhZCAqcnRjcF9zcmM7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAodXNlcl9kYXRhKTsKLQotICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gIGlmIChydHBzZXNzaW9uLT5wcml2LT5zdG9wX3RocmVhZCkKLSAgICBnb3RvIHN0b3BwaW5nOwotCi0gIGlmICgocnRjcF9zcmMgPSBydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjKSkgewotICAgIGdzdF9vYmplY3RfcmVmIChydGNwX3NyYyk7Ci0gICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICAvKiBzZXQgcnRjcCBjYXBzIG9uIG91dHB1dCBwYWQgKi8KLSAgICBpZiAoIWdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAocnRjcF9zcmMpKQotICAgICAgZG9fcnRjcF9ldmVudHMgKHJ0cHNlc3Npb24sIHJ0Y3Bfc3JjKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChydHBzZXNzaW9uLCAic2VuZGluZyBSVENQIik7Ci0gICAgcmVzdWx0ID0gZ3N0X3BhZF9wdXNoIChydGNwX3NyYywgYnVmZmVyKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJ0Y3Bfc3JjKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJub3Qgc2VuZGluZyBSVENQLCBubyBvdXRwdXQgcGFkIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotc3RvcHBpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAid2UgYXJlIHN0b3BwaW5nIik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotLyogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gbWFuYWdlciBoYXMgYW4gU1IgUlRDUCBwYWNrZXQgcmVhZHkgZm9yIGhhbmRsaW5nCi0gKiBpbnRlciBzdHJlYW0gc3luY2hyb25pc2F0aW9uICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3J0cF9zZXNzaW9uX3N5bmNfcnRjcCAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgR3N0QnVmZmVyICogYnVmZmVyLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0OwotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBHc3RQYWQgKnN5bmNfc3JjOwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHVzZXJfZGF0YSk7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBpZiAocnRwc2Vzc2lvbi0+cHJpdi0+c3RvcF90aHJlYWQpCi0gICAgZ290byBzdG9wcGluZzsKLQotICBpZiAoKHN5bmNfc3JjID0gcnRwc2Vzc2lvbi0+c3luY19zcmMpKSB7Ci0gICAgZ3N0X29iamVjdF9yZWYgKHN5bmNfc3JjKTsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICAgIC8qIHNldCBydGNwIGNhcHMgb24gb3V0cHV0IHBhZCwgdGhpcyBoYXBwZW5zCi0gICAgICogd2hlbiB3ZSByZWNlaXZlIFJUQ1AgbXV4ZWQgd2l0aCBSVFAgYWNjb3JkaW5nCi0gICAgICogdG8gUkZDNTc2MS4gT3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgZm9yd2FyZGVkCi0gICAgICogdGhlIGV2ZW50cyBmcm9tIHRoZSByZWN2X3J0Y3Bfc2luayBwYWQgYWxyZWFkeQotICAgICAqLwotICAgIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChzeW5jX3NyYykpCi0gICAgICBkb19ydGNwX2V2ZW50cyAocnRwc2Vzc2lvbiwgc3luY19zcmMpOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJzZW5kaW5nIFN5bmMgUlRDUCIpOwotICAgIHJlc3VsdCA9IGdzdF9wYWRfcHVzaCAoc3luY19zcmMsIGJ1ZmZlcik7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc3luY19zcmMpOwotICB9IGVsc2UgewotICAgIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgIm5vdCBzZW5kaW5nIFN5bmMgUlRDUCwgbm8gb3V0cHV0IHBhZCIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLQotICAvKiBFUlJPUlMgKi8KLXN0b3BwaW5nOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgIndlIGFyZSBzdG9wcGluZyIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25fY2FjaGVfY2FwcyAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24sIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSdHBTZXNzaW9uUHJpdmF0ZSAqcHJpdjsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICBnaW50IHBheWxvYWQ7Ci0KLSAgcHJpdiA9IHJ0cHNlc3Npb24tPnByaXY7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInBhcnNpbmcgY2FwcyIpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJwYXlsb2FkIiwgJnBheWxvYWQpKQotICAgIHJldHVybjsKLQotICBpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cCAocHJpdi0+cHRtYXAsIEdJTlRfVE9fUE9JTlRFUiAocGF5bG9hZCkpKQotICAgIHJldHVybjsKLQotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5wdG1hcCwgR0lOVF9UT19QT0lOVEVSIChwYXlsb2FkKSwKLSAgICAgIGdzdF9jYXBzX3JlZiAoY2FwcykpOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfcnRwX3Nlc3Npb25fZ2V0X2NhcHNfZm9yX3B0IChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbiwgZ3VpbnQgcGF5bG9hZCkKLXsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIEdWYWx1ZSBhcmdzWzJdID0geyB7MH0sIHswfSB9OwotICBHVmFsdWUgcmV0ID0geyAwIH07Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBjYXBzID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAocnRwc2Vzc2lvbi0+cHJpdi0+cHRtYXAsCi0gICAgICBHSU5UX1RPX1BPSU5URVIgKHBheWxvYWQpKTsKLSAgaWYgKGNhcHMpIHsKLSAgICBnc3RfY2Fwc19yZWYgKGNhcHMpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIHRyeSB0byBnZXQgaXQgd2l0aCBhIHNpZ25hbCAqLwotICBnX3ZhbHVlX2luaXQgKCZhcmdzWzBdLCBHU1RfVFlQRV9FTEVNRU5UKTsKLSAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmYXJnc1swXSwgcnRwc2Vzc2lvbik7Ci0gIGdfdmFsdWVfaW5pdCAoJmFyZ3NbMV0sIEdfVFlQRV9VSU5UKTsKLSAgZ192YWx1ZV9zZXRfdWludCAoJmFyZ3NbMV0sIHBheWxvYWQpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnJldCwgR1NUX1RZUEVfQ0FQUyk7Ci0gIGdfdmFsdWVfc2V0X2JveGVkICgmcmV0LCBOVUxMKTsKLQotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICBnX3NpZ25hbF9lbWl0diAoYXJncywgZ3N0X3J0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUFRfTUFQXSwgMCwKLSAgICAgICZyZXQpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmYXJnc1swXSk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZhcmdzWzFdKTsKLSAgY2FwcyA9IChHc3RDYXBzICopIGdfdmFsdWVfZHVwX2JveGVkICgmcmV0KTsKLSAgZ192YWx1ZV91bnNldCAoJnJldCk7Ci0gIGlmICghY2FwcykKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgZ3N0X3J0cF9zZXNzaW9uX2NhY2hlX2NhcHMgKHJ0cHNlc3Npb24sIGNhcHMpOwotCi1kb25lOgotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICByZXR1cm4gY2FwczsKLQotbm9fY2FwczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJjb3VsZCBub3QgZ2V0IGNhcHMiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotLyogY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gbWFuYWdlciBuZWVkcyB0aGUgY2xvY2sgcmF0ZSAqLwotc3RhdGljIGdpbnQKLWdzdF9ydHBfc2Vzc2lvbl9jbG9ja19yYXRlIChSVFBTZXNzaW9uICogc2VzcywgZ3VpbnQ4IHBheWxvYWQsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnaW50IHJlc3VsdCA9IC0xOwotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBHc3RDYXBzICpjYXBzOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTl9DQVNUICh1c2VyX2RhdGEpOwotCi0gIGNhcHMgPSBnc3RfcnRwX3Nlc3Npb25fZ2V0X2NhcHNfZm9yX3B0IChydHBzZXNzaW9uLCBwYXlsb2FkKTsKLQotICBpZiAoIWNhcHMpCi0gICAgZ290byBkb25lOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjbG9jay1yYXRlIiwgJnJlc3VsdCkpCi0gICAgZ290byBub19jbG9ja19yYXRlOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicGFyc2VkIGNsb2NrLXJhdGUgJWQiLCByZXN1bHQpOwotCi1kb25lOgotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1ub19jbG9ja19yYXRlOgotICB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJObyBjbG9jay1yYXRlIGluIGNhcHMhIik7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIHRoZSBzZXNzaW9uIG1hbmFnZXIgYXNrcyB1cyB0byByZWNvbnNpZGVyIHRoZSB0aW1lb3V0ICovCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zZXNzaW9uX3JlY29uc2lkZXIgKFJUUFNlc3Npb24gKiBzZXNzLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTl9DQVNUICh1c2VyX2RhdGEpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInVubG9jayB0aW1lciBmb3IgcmVjb25zaWRlcmF0aW9uIik7Ci0gIGlmIChydHBzZXNzaW9uLT5wcml2LT5pZCkKLSAgICBnc3RfY2xvY2tfaWRfdW5zY2hlZHVsZSAocnRwc2Vzc2lvbi0+cHJpdi0+aWQpOwotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydHBfc2luayAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbjsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicmVjZWl2ZWQgZXZlbnQgJXMiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIC8qIHByb2Nlc3MgKi8KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgZ3N0X3J0cF9zZXNzaW9uX3Npbmtfc2V0Y2FwcyAocGFkLCBydHBzZXNzaW9uLCBjYXBzKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZydHBzZXNzaW9uLT5yZWN2X3J0cF9zZWcsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgIHsKLSAgICAgIEdzdFNlZ21lbnQgKnNlZ21lbnQsIGluX3NlZ21lbnQ7Ci0KLSAgICAgIHNlZ21lbnQgPSAmcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc2VnOwotCi0gICAgICAvKiB0aGUgbmV3c2VnbWVudCBldmVudCBpcyBuZWVkZWQgdG8gY29udmVydCB0aGUgUlRQIHRpbWVzdGFtcCB0bwotICAgICAgICogcnVubmluZ190aW1lLCB3aGljaCBpcyBuZWVkZWQgdG8gZ2VuZXJhdGUgYSBtYXBwaW5nIGZyb20gUlRQIHRvIE5UUAotICAgICAgICogdGltZXN0YW1wcyBpbiBTUiByZXBvcnRzICovCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJmluX3NlZ21lbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlY2VpdmVkIHNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgICAgICZpbl9zZWdtZW50KTsKLQotICAgICAgLyogYWNjZXB0IHVwc3RyZWFtICovCi0gICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCZpbl9zZWdtZW50LCBzZWdtZW50KTsKLQotICAgICAgLyogcHVzaCBldmVudCBmb3J3YXJkICovCi0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICBHc3RQYWQgKnJ0Y3Bfc3JjOwotCi0gICAgICByZXQgPQotICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjLCBnc3RfZXZlbnRfcmVmIChldmVudCkpOwotCi0gICAgICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gICAgICBpZiAoKHJ0Y3Bfc3JjID0gcnRwc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYykpCi0gICAgICAgIGdzdF9vYmplY3RfcmVmIChydGNwX3NyYyk7Ci0gICAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICAgICAgaWYgKHJ0Y3Bfc3JjKSB7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocnRjcF9zcmMsIGV2ZW50KTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocnRjcF9zcmMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICAgIHJldCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3Nlc3Npb25fcmVxdWVzdF9yZW1vdGVfa2V5X3VuaXQgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uLAotICAgIGd1aW50MzIgc3NyYywgZ3VpbnQgcGF5bG9hZCwgZ2Jvb2xlYW4gYWxsX2hlYWRlcnMsIGdpbnQgY291bnQpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9ydHBfc2Vzc2lvbl9nZXRfY2Fwc19mb3JfcHQgKHJ0cHNlc3Npb24sIHBheWxvYWQpOwotCi0gIGlmIChjYXBzKSB7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gICAgZ2Jvb2xlYW4gcGxpOwotICAgIGdib29sZWFuIGZpcjsKLQotICAgIHBsaSA9IGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicnRjcC1mYi1uYWNrLXBsaSIpOwotICAgIGZpciA9IGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicnRjcC1mYi1jY20tZmlyIikgJiYgYWxsX2hlYWRlcnM7Ci0KLSAgICAvKiBHb29nbGUgVGFsayB1c2VzIEZJUiBmb3IgcmVwYWlyLCBzbyBzZW5kIGl0IGV2ZW4gaWYgd2UganVzdCB3YW50IGEKLSAgICAgKiByZWd1bGFyIFBMSSAqLwotICAgIGlmICghcGxpICYmCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicnRjcC1mYi14LWdzdHJlYW1lci1maXItYXMtcmVwYWlyIikpCi0gICAgICBmaXIgPSBUUlVFOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgaWYgKHBsaSB8fCBmaXIpCi0gICAgICByZXR1cm4gcnRwX3Nlc3Npb25fcmVxdWVzdF9rZXlfdW5pdCAocnRwc2Vzc2lvbi0+cHJpdi0+c2Vzc2lvbiwgc3NyYywKLSAgICAgICAgICBmaXIsIGNvdW50KTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydHBfc3JjIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBnYm9vbGVhbiBmb3J3YXJkID0gVFJVRTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotICBndWludDMyIHNzcmM7Ci0gIGd1aW50IHB0OwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNOgotICAgICAgcyA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIkdzdEZvcmNlS2V5VW5pdCIpICYmCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAocywgInNzcmMiLCAmc3NyYykgJiYKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAicGF5bG9hZCIsICZwdCkpIHsKLSAgICAgICAgZ2Jvb2xlYW4gYWxsX2hlYWRlcnMgPSBGQUxTRTsKLSAgICAgICAgZ2ludCBjb3VudCA9IC0xOwotCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKHMsICJhbGwtaGVhZGVycyIsICZhbGxfaGVhZGVycyk7Ci0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjb3VudCIsICZjb3VudCkgJiYgY291bnQgPCAwKQotICAgICAgICAgIGNvdW50ICs9IEdfTUFYSU5UOyAgICAvKiBNYWtlIHN1cmUgY291bnQgaXMgcG9zaXRpdmUgaWYgcHJlc2VudCAqLwotICAgICAgICBpZiAoZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfcmVtb3RlX2tleV91bml0IChydHBzZXNzaW9uLCBzc3JjLCBwdCwKLSAgICAgICAgICAgICAgICBhbGxfaGVhZGVycywgY291bnQpKQotICAgICAgICAgIGZvcndhcmQgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgIkdzdFJUUFJldHJhbnNtaXNzaW9uUmVxdWVzdCIpKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWU7Ci0gICAgICAgIGd1aW50IHNlcW51bSwgZGVsYXksIGRlYWRsaW5lLCBtYXhfZGVsYXksIGF2Z19ydHQ7Ci0KLSAgICAgICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICAgICAgICBydHBzZXNzaW9uLT5wcml2LT5ydHhfY291bnQrKzsKLSAgICAgICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChzLCAicnVubmluZy10aW1lIiwgJnJ1bm5pbmdfdGltZSkpCi0gICAgICAgICAgcnVubmluZ190aW1lID0gLTE7Ci0gICAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAocywgInNzcmMiLCAmc3NyYykpCi0gICAgICAgICAgc3NyYyA9IC0xOwotICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzZXFudW0iLCAmc2VxbnVtKSkKLSAgICAgICAgICBzZXFudW0gPSAtMTsKLSAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAiZGVsYXkiLCAmZGVsYXkpKQotICAgICAgICAgIGRlbGF5ID0gMDsKLSAgICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAiZGVhZGxpbmUiLCAmZGVhZGxpbmUpKQotICAgICAgICAgIGRlYWRsaW5lID0gMTAwOwotICAgICAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJhdmctcnR0IiwgJmF2Z19ydHQpKQotICAgICAgICAgIGF2Z19ydHQgPSA0MDsKLQotICAgICAgICAvKiByZW1haW5pbmcgdGltZSB0byByZWNlaXZlIHRoZSBwYWNrZXQgKi8KLSAgICAgICAgbWF4X2RlbGF5ID0gZGVhZGxpbmU7Ci0gICAgICAgIGlmIChtYXhfZGVsYXkgPiBkZWxheSkKLSAgICAgICAgICBtYXhfZGVsYXkgLT0gZGVsYXk7Ci0gICAgICAgIC8qIGVzdGltYXRlZCBSVFQgKi8KLSAgICAgICAgaWYgKG1heF9kZWxheSA+IGF2Z19ydHQpCi0gICAgICAgICAgbWF4X2RlbGF5IC09IGF2Z19ydHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBtYXhfZGVsYXkgPSAwOwotCi0gICAgICAgIGlmIChydHBfc2Vzc2lvbl9yZXF1ZXN0X25hY2sgKHJ0cHNlc3Npb24tPnByaXYtPnNlc3Npb24sIHNzcmMsIHNlcW51bSwKLSAgICAgICAgICAgICAgICBtYXhfZGVsYXkgKiBHU1RfTVNFQ09ORCkpCi0gICAgICAgICAgZm9yd2FyZCA9IEZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGZvcndhcmQpIHsKLSAgICBHc3RQYWQgKnJlY3ZfcnRwX3Npbms7Ci0KLSAgICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0gICAgaWYgKChyZWN2X3J0cF9zaW5rID0gcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc2luaykpCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAocmVjdl9ydHBfc2luayk7Ci0gICAgR1NUX1JUUF9TRVNTSU9OX1VOTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgICBpZiAocmVjdl9ydHBfc2luaykgewotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChyZWN2X3J0cF9zaW5rLCBldmVudCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChyZWN2X3J0cF9zaW5rKTsKLSAgICB9IGVsc2UKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9IGVsc2UgewotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgR3N0SXRlcmF0b3IgKgotZ3N0X3J0cF9zZXNzaW9uX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBHc3RQYWQgKm90aGVycGFkID0gTlVMTDsKLSAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsKLQotICBydHBzZXNzaW9uID0gR1NUX1JUUF9TRVNTSU9OIChwYXJlbnQpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLSAgaWYgKHBhZCA9PSBydHBzZXNzaW9uLT5yZWN2X3J0cF9zcmMpIHsKLSAgICBvdGhlcnBhZCA9IGdzdF9vYmplY3RfcmVmIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rKTsKLSAgfSBlbHNlIGlmIChwYWQgPT0gcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc2luaykgewotICAgIG90aGVycGFkID0gZ3N0X29iamVjdF9yZWYgKHJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NyYyk7Ci0gIH0gZWxzZSBpZiAocGFkID09IHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYykgewotICAgIG90aGVycGFkID0gZ3N0X29iamVjdF9yZWYgKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NpbmspOwotICB9IGVsc2UgaWYgKHBhZCA9PSBydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKSB7Ci0gICAgb3RoZXJwYWQgPSBnc3Rfb2JqZWN0X3JlZiAocnRwc2Vzc2lvbi0+c2VuZF9ydHBfc3JjKTsKLSAgfQotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICBpZiAob3RoZXJwYWQpIHsKLSAgICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9QQUQpOwotICAgIGdfdmFsdWVfc2V0X29iamVjdCAoJnZhbCwgb3RoZXJwYWQpOwotICAgIGl0ID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgJnZhbCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAob3RoZXJwYWQpOwotICB9IGVsc2UgewotICAgIGl0ID0gZ3N0X2l0ZXJhdG9yX25ld19zaW5nbGUgKEdTVF9UWVBFX1BBRCwgTlVMTCk7Ci0gIH0KLQotICByZXR1cm4gaXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zZXNzaW9uX3Npbmtfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbiwKLSAgICBHc3RDYXBzICogY2FwcykKLXsKLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBnc3RfcnRwX3Nlc3Npb25fY2FjaGVfY2FwcyAocnRwc2Vzc2lvbiwgY2Fwcyk7Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiByZWNlaXZlIGEgcGFja2V0IGZyb20gYSBzZW5kZXIsIHNlbmQgaXQgdG8gdGhlIFJUUCBzZXNzaW9uIG1hbmFnZXIgYW5kCi0gKiBmb3J3YXJkIHRoZSBwYWNrZXQgb24gdGhlIHJ0cF9zcmMgcGFkCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbjsKLSAgR3N0UnRwU2Vzc2lvblByaXZhdGUgKnByaXY7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lLCBydW5uaW5nX3RpbWU7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gIGd1aW50NjQgbnRwbnN0aW1lOwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHBhcmVudCk7Ci0gIHByaXYgPSBydHBzZXNzaW9uLT5wcml2OwotCi0gIEdTVF9MT0dfT0JKRUNUIChydHBzZXNzaW9uLCAicmVjZWl2ZWQgUlRQIHBhY2tldCIpOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLSAgc2lnbmFsX3dhaXRpbmdfcnRjcF90aHJlYWRfdW5sb2NrZWQgKHJ0cHNlc3Npb24pOwotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICAvKiBnZXQgTlRQIHRpbWUgd2hlbiB0aGlzIHBhY2tldCB3YXMgY2FwdHVyZWQsIHRoaXMgZGVwZW5kcyBvbiB0aGUgdGltZXN0YW1wLiAqLwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKTsKLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lc3RhbXApKSB7Ci0gICAgLyogY29udmVydCB0byBydW5uaW5nIHRpbWUgdXNpbmcgdGhlIHNlZ21lbnQgdmFsdWVzICovCi0gICAgcnVubmluZ190aW1lID0KLSAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc2VnLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgIHRpbWVzdGFtcCk7Ci0gICAgbnRwbnN0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfSBlbHNlIHsKLSAgICBnZXRfY3VycmVudF90aW1lcyAocnRwc2Vzc2lvbiwgJnJ1bm5pbmdfdGltZSwgJm50cG5zdGltZSk7Ci0gIH0KLSAgY3VycmVudF90aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChwcml2LT5zeXNjbG9jayk7Ci0KLSAgcmV0ID0gcnRwX3Nlc3Npb25fcHJvY2Vzc19ydHAgKHByaXYtPnNlc3Npb24sIGJ1ZmZlciwgY3VycmVudF90aW1lLAotICAgICAgcnVubmluZ190aW1lLCBudHBuc3RpbWUpOwotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gcHVzaF9lcnJvcjsKLQotZG9uZToKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotcHVzaF9lcnJvcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJwcm9jZXNzIHJldHVybmVkICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc2Vzc2lvbl9ldmVudF9yZWN2X3J0Y3Bfc2luayAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbjsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicmVjZWl2ZWQgZXZlbnQgJXMiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgICAgLyogTWFrZSBzdXJlIHRoYXQgdGhlIHN5bmNfc3JjIHBhZCBoYXMgY2FwcyBiZWZvcmUgdGhlIHNlZ21lbnQgZXZlbnQuCi0gICAgICAgKiBPdGhlcndpc2Ugd2UgbWlnaHQgZ2V0IGEgc2VnbWVudCBldmVudCBiZWZvcmUgY2FwcyBmcm9tIHRoZSByZWNlaXZlCi0gICAgICAgKiBSVENQIHBhZCwgYW5kIHRoZW4gbGF0ZXIgd2hlbiByZWNlaXZpbmcgUlRDUCBwYWNrZXRzIHdpbGwgc2V0IGNhcHMuCi0gICAgICAgKiBUaGlzIHdpbGwgcmVzdWx0cyBpbiBhIHN0aWNreSBldmVudCBtaXNvcmRlcmluZyB3YXJuaW5nCi0gICAgICAgKi8KLSAgICAgIGlmICghZ3N0X3BhZF9oYXNfY3VycmVudF9jYXBzIChydHBzZXNzaW9uLT5zeW5jX3NyYykpIHsKLSAgICAgICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0Y3AiKTsKLSAgICAgICAgZ3N0X3BhZF9zZXRfY2FwcyAocnRwc2Vzc2lvbi0+c3luY19zcmMsIGNhcHMpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICB9Ci0gICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChydHBzZXNzaW9uLT5zeW5jX3NyYywgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBSZWNlaXZlIGFuIFJUQ1AgcGFja2V0IGZyb20gYSBzZW5kZXIsIHNlbmQgaXQgdG8gdGhlIFJUUCBzZXNzaW9uIG1hbmFnZXIgYW5kCi0gKiBmb3J3YXJkIHRoZSBTUiBwYWNrZXRzIHRvIHRoZSBzeW5jX3NyYyBwYWQuCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydGNwIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0gIEdzdFJ0cFNlc3Npb25Qcml2YXRlICpwcml2OwotICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lOwotICBndWludDY0IG50cG5zdGltZTsKLQotICBydHBzZXNzaW9uID0gR1NUX1JUUF9TRVNTSU9OIChwYXJlbnQpOwotICBwcml2ID0gcnRwc2Vzc2lvbi0+cHJpdjsKLQotICBHU1RfTE9HX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlY2VpdmVkIFJUQ1AgcGFja2V0Iik7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBzaWduYWxfd2FpdGluZ19ydGNwX3RocmVhZF91bmxvY2tlZCAocnRwc2Vzc2lvbik7Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIGN1cnJlbnRfdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAocHJpdi0+c3lzY2xvY2spOwotICBnZXRfY3VycmVudF90aW1lcyAocnRwc2Vzc2lvbiwgTlVMTCwgJm50cG5zdGltZSk7Ci0KLSAgcnRwX3Nlc3Npb25fcHJvY2Vzc19ydGNwIChwcml2LT5zZXNzaW9uLCBidWZmZXIsIGN1cnJlbnRfdGltZSwgbnRwbnN0aW1lKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7ICAgICAgICAgICAvKiBhbHdheXMgcmV0dXJuIE9LICovCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zZXNzaW9uX3F1ZXJ5X3NlbmRfcnRjcF9zcmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHBhcmVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlY2VpdmVkIFFVRVJZICVzIiwKLSAgICAgIEdTVF9RVUVSWV9UWVBFX05BTUUgKHF1ZXJ5KSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfTEFURU5DWToKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICAvKiB1c2UgdGhlIGRlZmF1bHRzIGZvciB0aGUgbGF0ZW5jeSBxdWVyeS4gKi8KLSAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIEZBTFNFLCAwLCAtMSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyogb3RoZXIgcXVlcmllcyBzaW1wbHkgZmFpbCBmb3Igbm93ICovCi0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3NlbmRfcnRjcF9zcmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb247Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAocGFyZW50KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlY2VpdmVkIEVWRU5UICVzIiwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICBjYXNlIEdTVF9FVkVOVF9MQVRFTkNZOgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIG90aGVyIGV2ZW50cyBzaW1wbHkgZmFpbCBmb3Igbm93ICovCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc2Vzc2lvbl9ldmVudF9zZW5kX3J0cF9zaW5rIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBydHBzZXNzaW9uID0gR1NUX1JUUF9TRVNTSU9OIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJyZWNlaXZlZCBFVkVOVCAlcyIsCi0gICAgICBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgLyogcHJvY2VzcyAqLwotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICBnc3RfcnRwX3Nlc3Npb25fc2V0Y2Fwc19zZW5kX3J0cCAocGFkLCBydHBzZXNzaW9uLCBjYXBzKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+c2VuZF9ydHBfc3JjLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZydHBzZXNzaW9uLT5zZW5kX3J0cF9zZWcsIEdTVF9GT1JNQVRfVU5ERUZJTkVEKTsKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAocnRwc2Vzc2lvbi0+c2VuZF9ydHBfc3JjLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOnsKLSAgICAgIEdzdFNlZ21lbnQgKnNlZ21lbnQsIGluX3NlZ21lbnQ7Ci0KLSAgICAgIHNlZ21lbnQgPSAmcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2VnOwotCi0gICAgICAvKiB0aGUgbmV3c2VnbWVudCBldmVudCBpcyBuZWVkZWQgdG8gY29udmVydCB0aGUgUlRQIHRpbWVzdGFtcCB0bwotICAgICAgICogcnVubmluZ190aW1lLCB3aGljaCBpcyBuZWVkZWQgdG8gZ2VuZXJhdGUgYSBtYXBwaW5nIGZyb20gUlRQIHRvIE5UUAotICAgICAgICogdGltZXN0YW1wcyBpbiBTUiByZXBvcnRzICovCi0gICAgICBnc3RfZXZlbnRfY29weV9zZWdtZW50IChldmVudCwgJmluX3NlZ21lbnQpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlY2VpdmVkIHNlZ21lbnQgJSIgR1NUX1NFR01FTlRfRk9STUFULAotICAgICAgICAgICZpbl9zZWdtZW50KTsKLQotICAgICAgLyogYWNjZXB0IHVwc3RyZWFtICovCi0gICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCZpbl9zZWdtZW50LCBzZWdtZW50KTsKLQotICAgICAgLyogcHVzaCBldmVudCBmb3J3YXJkICovCi0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYywgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzp7Ci0gICAgICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lOwotCi0gICAgICAvKiBwdXNoIGRvd25zdHJlYW0gRklYTUUsIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIHNlc3Npb24ganVzdAotICAgICAgICogYmVjYXVzZSB3ZSBzdG9wIHNlbmRpbmcuICovCi0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYywgZXZlbnQpOwotICAgICAgY3VycmVudF90aW1lID0gZ3N0X2Nsb2NrX2dldF90aW1lIChydHBzZXNzaW9uLT5wcml2LT5zeXNjbG9jayk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJzY2hlZHVsaW5nIEJZRSBtZXNzYWdlIik7Ci0gICAgICBydHBfc2Vzc2lvbl9tYXJrX2FsbF9ieWUgKHJ0cHNlc3Npb24tPnByaXYtPnNlc3Npb24sICJFbmQgT2YgU3RyZWFtIik7Ci0gICAgICBydHBfc2Vzc2lvbl9zY2hlZHVsZV9ieWUgKHJ0cHNlc3Npb24tPnByaXYtPnNlc3Npb24sIGN1cnJlbnRfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDp7Ci0gICAgICBHc3RQYWQgKnNlbmRfcnRwX3NyYzsKLQotICAgICAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICAgICAgaWYgKChzZW5kX3J0cF9zcmMgPSBydHBzZXNzaW9uLT5zZW5kX3J0cF9zcmMpKQotICAgICAgICBnc3Rfb2JqZWN0X3JlZiAoc2VuZF9ydHBfc3JjKTsKLSAgICAgIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gICAgICBpZiAoc2VuZF9ydHBfc3JjKSB7Ci0gICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc2VuZF9ydHBfc3JjLCBldmVudCk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNlbmRfcnRwX3NyYyk7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3NlbmRfcnRwX3NyYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbjsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicmVjZWl2ZWQgRVZFTlQgJXMiLAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9MQVRFTkNZOgotICAgICAgLyogc2F2ZSB0aGUgbGF0ZW5jeSwgd2UgbmVlZCB0aGlzIHRvIGtub3cgd2hlbiBhbiBSVFAgcGFja2V0IHdpbGwgYmUKLSAgICAgICAqIHJlbmRlcmVkIGJ5IHRoZSBzaW5rICovCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfbGF0ZW5jeSAoZXZlbnQsICZydHBzZXNzaW9uLT5wcml2LT5zZW5kX2xhdGVuY3kpOwotCi0gICAgICByZXQgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3J0cF9zZXNzaW9uX2dldGNhcHNfc2VuZF9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24sCi0gICAgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0UnRwU2Vzc2lvblByaXZhdGUgKnByaXY7Ci0gIEdzdENhcHMgKnJlc3VsdDsKLSAgR3N0U3RydWN0dXJlICpzMSwgKnMyOwotICBndWludCBzc3JjOwotICBnYm9vbGVhbiBpc19yYW5kb207Ci0KLSAgcHJpdiA9IHJ0cHNlc3Npb24tPnByaXY7Ci0KLSAgc3NyYyA9IHJ0cF9zZXNzaW9uX3N1Z2dlc3Rfc3NyYyAocHJpdi0+c2Vzc2lvbiwgJmlzX3JhbmRvbSk7Ci0KLSAgLyogd2UgY2FuIGJhc2ljYWxseSBhY2NlcHQgYW55dGhpbmcgYnV0IHdlIHByZWZlciB0byByZWNlaXZlIHBhY2tldHMgd2l0aCBvdXIKLSAgICogaW50ZXJuYWwgU1NSQyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGF0Y2ggaXQuIENyZWF0ZSBhIHN0cnVjdHVyZSB3aXRoCi0gICAqIHRoZSBTU1JDIGFuZCBhbm90aGVyIG9uZSB3aXRob3V0LgotICAgKiBPbmx5IGRvIHRoaXMgaWYgdGhlIHNlc3Npb24gYWN0dWFsbHkgZGVjaWRlZCBvbiBhbiBzc3JjIGFscmVhZHksCi0gICAqIG90aGVyd2lzZSB3ZSBnaXZlIHVwc3RyZWFtIHRoZSBvcHBvcnR1bml0eSB0byBzZWxlY3QgYW4gc3NyYyBpdHNlbGYgKi8KLSAgaWYgKCFpc19yYW5kb20pIHsKLSAgICBzMSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAiLCAic3NyYyIsIEdfVFlQRV9VSU5ULCBzc3JjLAotICAgICAgICBOVUxMKTsKLSAgICBzMiA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiYXBwbGljYXRpb24veC1ydHAiKTsKLQotICAgIHJlc3VsdCA9IGdzdF9jYXBzX25ld19mdWxsIChzMSwgczIsIE5VTEwpOwotICB9IGVsc2UgewotICAgIHJlc3VsdCA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIpOwotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKmNhcHMgPSByZXN1bHQ7Ci0KLSAgICByZXN1bHQgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJnZXR0aW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRwX3Nlc3Npb25fcXVlcnlfc2VuZF9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotCi0gIHJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpmaWx0ZXIsICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotICAgICAgY2FwcyA9IGdzdF9ydHBfc2Vzc2lvbl9nZXRjYXBzX3NlbmRfcnRwIChwYWQsIHJ0cHNlc3Npb24sIGZpbHRlcik7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zZXNzaW9uX3NldGNhcHNfc2VuZF9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24sCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFJ0cFNlc3Npb25Qcml2YXRlICpwcml2OwotCi0gIHByaXYgPSBydHBzZXNzaW9uLT5wcml2OwotCi0gIHJ0cF9zZXNzaW9uX3VwZGF0ZV9zZW5kX2NhcHMgKHByaXYtPnNlc3Npb24sIGNhcHMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBSZWNpZXZlIGFuIFJUUCBwYWNrZXQgb3IgYSBsaXN0IG9mIHBhY2tldHMgdG8gYmUgc2VuZCB0byB0aGUgcmVjZWl2ZXJzLAotICogc2VuZCB0byBSVFAgc2Vzc2lvbiBtYW5hZ2VyIGFuZCBmb3J3YXJkIHRvIHNlbmRfcnRwX3NyYy4KLSAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9zZW5kX3J0cF9jb21tb24gKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uLAotICAgIGdwb2ludGVyIGRhdGEsIGdib29sZWFuIGlzX2xpc3QpCi17Ci0gIEdzdFJ0cFNlc3Npb25Qcml2YXRlICpwcml2OwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgcnVubmluZ190aW1lOwotICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lOwotCi0gIHByaXYgPSBydHBzZXNzaW9uLT5wcml2OwotCi0gIEdTVF9MT0dfT0JKRUNUIChydHBzZXNzaW9uLCAicmVjZWl2ZWQgUlRQICVzIiwgaXNfbGlzdCA/ICJsaXN0IiA6ICJwYWNrZXQiKTsKLQotICAvKiBnZXQgTlRQIHRpbWUgd2hlbiB0aGlzIHBhY2tldCB3YXMgY2FwdHVyZWQsIHRoaXMgZGVwZW5kcyBvbiB0aGUgdGltZXN0YW1wLiAqLwotICBpZiAoaXNfbGlzdCkgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLQotICAgIC8qIEFsbCBncm91cHMgaW4gYW4gbGlzdCBoYXZlIHRoZSBzYW1lIHRpbWVzdGFtcC4KLSAgICAgKiBTbywganVzdCB0YWtlIGl0IGZyb20gdGhlIGZpcnN0IGdyb3VwLiAqLwotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKEdTVF9CVUZGRVJfTElTVF9DQVNUIChkYXRhKSwgMCk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChidWZmZXIpOwotICAgIGVsc2UKLSAgICAgIHRpbWVzdGFtcCA9IC0xOwotICB9IGVsc2UgewotICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfUFRTIChHU1RfQlVGRkVSX0NBU1QgKGRhdGEpKTsKLSAgfQotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZXN0YW1wKSkgewotICAgIC8qIGNvbnZlcnQgdG8gcnVubmluZyB0aW1lIHVzaW5nIHRoZSBzZWdtZW50IHN0YXJ0IHZhbHVlLiAqLwotICAgIHJ1bm5pbmdfdGltZSA9Ci0gICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnJ0cHNlc3Npb24tPnNlbmRfcnRwX3NlZywgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICB0aW1lc3RhbXApOwotICAgIGlmIChwcml2LT5ydGNwX3N5bmNfc2VuZF90aW1lKQotICAgICAgcnVubmluZ190aW1lICs9IHByaXYtPnNlbmRfbGF0ZW5jeTsKLSAgfSBlbHNlIHsKLSAgICAvKiBubyB0aW1lc3RhbXAuICovCi0gICAgcnVubmluZ190aW1lID0gLTE7Ci0gIH0KLQotICBjdXJyZW50X3RpbWUgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKHByaXYtPnN5c2Nsb2NrKTsKLSAgcmV0ID0gcnRwX3Nlc3Npb25fc2VuZF9ydHAgKHByaXYtPnNlc3Npb24sIGRhdGEsIGlzX2xpc3QsIGN1cnJlbnRfdGltZSwKLSAgICAgIHJ1bm5pbmdfdGltZSk7Ci0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBwdXNoX2Vycm9yOwotCi1kb25lOgotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1wdXNoX2Vycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInByb2Nlc3MgcmV0dXJuZWQgJXMiLAotICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAocGFyZW50KTsKLQotICByZXR1cm4gZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3NlbmRfcnRwX2NvbW1vbiAocnRwc2Vzc2lvbiwgYnVmZmVyLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHBfbGlzdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHBhcmVudCk7Ci0KLSAgcmV0dXJuIGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9zZW5kX3J0cF9jb21tb24gKHJ0cHNlc3Npb24sIGxpc3QsIFRSVUUpOwotfQotCi0vKiBDcmVhdGUgc2lua3BhZCB0byByZWNlaXZlIFJUUCBwYWNrZXRzIGZyb20gc2VuZGVycy4gVGhpcyB3aWxsIGFsc28gY3JlYXRlIGEKLSAqIHNyY3BhZCBmb3IgdGhlIFJUUCBwYWNrZXRzLgotICovCi1zdGF0aWMgR3N0UGFkICoKLWNyZWF0ZV9yZWN2X3J0cF9zaW5rIChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbikKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgImNyZWF0aW5nIFJUUCBzaW5rIHBhZCIpOwotCi0gIHJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NpbmsgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZydHBzZXNzaW9uX3JlY3ZfcnRwX3NpbmtfdGVtcGxhdGUsCi0gICAgICAicmVjdl9ydHBfc2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocnRwc2Vzc2lvbi0+cmVjdl9ydHBfc2luaywKLSAgICAgIGdzdF9ydHBfc2Vzc2lvbl9jaGFpbl9yZWN2X3J0cCk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3JlY3ZfcnRwX3NpbmspOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9BTExPQ0FUSU9OIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc2Vzc2lvbiksCi0gICAgICBydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAiY3JlYXRpbmcgUlRQIHNyYyBwYWQiKTsKLSAgcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmcnRwc2Vzc2lvbl9yZWN2X3J0cF9zcmNfdGVtcGxhdGUsCi0gICAgICAicmVjdl9ydHBfc3JjIik7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zcmMsCi0gICAgICBnc3RfcnRwX3Nlc3Npb25fZXZlbnRfcmVjdl9ydHBfc3JjKTsKLSAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAocnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zcmMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHNlc3Npb24pLCBydHBzZXNzaW9uLT5yZWN2X3J0cF9zcmMpOwotCi0gIHJldHVybiBydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rOwotfQotCi0vKiBSZW1vdmUgc2lua3BhZCB0byByZWNlaXZlIFJUUCBwYWNrZXRzIGZyb20gc2VuZGVycy4gVGhpcyB3aWxsIGFsc28gcmVtb3ZlCi0gKiB0aGUgc3JjcGFkIGZvciB0aGUgUlRQIHBhY2tldHMuCi0gKi8KLXN0YXRpYyB2b2lkCi1yZW1vdmVfcmVjdl9ydHBfc2luayAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJyZW1vdmluZyBSVFAgc2luayBwYWQiKTsKLQotICAvKiBkZWFjdGl2YXRlIGZyb20gc291cmNlIHRvIHNpbmsgKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zcmMsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLCBGQUxTRSk7Ci0KLSAgLyogcmVtb3ZlIHBhZHMgKi8KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc2Vzc2lvbiksCi0gICAgICBydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rKTsKLSAgcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc2luayA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlbW92aW5nIFJUUCBzcmMgcGFkIik7Ci0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHNlc3Npb24pLAotICAgICAgcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjKTsKLSAgcnRwc2Vzc2lvbi0+cmVjdl9ydHBfc3JjID0gTlVMTDsKLX0KLQotLyogQ3JlYXRlIGEgc2lua3BhZCB0byByZWNlaXZlIFJUQ1AgbWVzc2FnZXMgZnJvbSBzZW5kZXJzLCB0aGlzIHdpbGwgYWxzbyBjcmVhdGUgYQotICogc3luY19zcmMgcGFkIGZvciB0aGUgU1IgcGFja2V0cy4KLSAqLwotc3RhdGljIEdzdFBhZCAqCi1jcmVhdGVfcmVjdl9ydGNwX3NpbmsgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAiY3JlYXRpbmcgUlRDUCBzaW5rIHBhZCIpOwotCi0gIHJ0cHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmcnRwc2Vzc2lvbl9yZWN2X3J0Y3Bfc2lua190ZW1wbGF0ZSwKLSAgICAgICJyZWN2X3J0Y3Bfc2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocnRwc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmssCi0gICAgICBnc3RfcnRwX3Nlc3Npb25fY2hhaW5fcmVjdl9ydGNwKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHJ0cHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3JlY3ZfcnRjcF9zaW5rKTsKLSAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAocnRwc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmssCi0gICAgICBnc3RfcnRwX3Nlc3Npb25faXRlcmF0ZV9pbnRlcm5hbF9saW5rcyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocnRwc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmssIFRSVUUpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBzZXNzaW9uKSwKLSAgICAgIHJ0cHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAiY3JlYXRpbmcgc3luYyBzcmMgcGFkIik7Ci0gIHJ0cHNlc3Npb24tPnN5bmNfc3JjID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmcnRwc2Vzc2lvbl9zeW5jX3NyY190ZW1wbGF0ZSwKLSAgICAgICJzeW5jX3NyYyIpOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChydHBzZXNzaW9uLT5zeW5jX3NyYywKLSAgICAgIGdzdF9ydHBfc2Vzc2lvbl9pdGVyYXRlX2ludGVybmFsX2xpbmtzKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAocnRwc2Vzc2lvbi0+c3luY19zcmMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHJ0cHNlc3Npb24tPnN5bmNfc3JjLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc2Vzc2lvbiksIHJ0cHNlc3Npb24tPnN5bmNfc3JjKTsKLQotICByZXR1cm4gcnRwc2Vzc2lvbi0+cmVjdl9ydGNwX3Npbms7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZW1vdmVfcmVjdl9ydGNwX3NpbmsgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicmVtb3ZpbmcgUlRDUCBzaW5rIHBhZCIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocnRwc2Vzc2lvbi0+c3luY19zcmMsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luaywgRkFMU0UpOwotCi0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHNlc3Npb24pLAotICAgICAgcnRwc2Vzc2lvbi0+cmVjdl9ydGNwX3NpbmspOwotICBydHBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgInJlbW92aW5nIHN5bmMgc3JjIHBhZCIpOwotICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBzZXNzaW9uKSwgcnRwc2Vzc2lvbi0+c3luY19zcmMpOwotICBydHBzZXNzaW9uLT5zeW5jX3NyYyA9IE5VTEw7Ci19Ci0KLS8qIENyZWF0ZSBhIHNpbmtwYWQgdG8gcmVjZWl2ZSBSVFAgcGFja2V0cyBmb3IgcmVjZWl2ZXJzLiBUaGlzIHdpbGwgYWxzbyBjcmVhdGUgYQotICogc2VuZF9ydHBfc3JjIHBhZC4KLSAqLwotc3RhdGljIEdzdFBhZCAqCi1jcmVhdGVfc2VuZF9ydHBfc2luayAoR3N0UnRwU2Vzc2lvbiAqIHJ0cHNlc3Npb24pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cHNlc3Npb24sICJjcmVhdGluZyBwYWQiKTsKLQotICBydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmcnRwc2Vzc2lvbl9zZW5kX3J0cF9zaW5rX3RlbXBsYXRlLAotICAgICAgInNlbmRfcnRwX3NpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NpbmssCi0gICAgICBnc3RfcnRwX3Nlc3Npb25fY2hhaW5fc2VuZF9ydHApOwotICBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2NoYWluX3NlbmRfcnRwX2xpc3QpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAocnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luaywKLSAgICAgIGdzdF9ydHBfc2Vzc2lvbl9xdWVyeV9zZW5kX3J0cCk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3NlbmRfcnRwX3NpbmspOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2l0ZXJhdGVfaW50ZXJuYWxfbGlua3MpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQUxMT0NBVElPTiAocnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luayk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luaywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHNlc3Npb24pLAotICAgICAgcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luayk7Ci0KLSAgcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc3JjID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmcnRwc2Vzc2lvbl9zZW5kX3J0cF9zcmNfdGVtcGxhdGUsCi0gICAgICAic2VuZF9ydHBfc3JjIik7Ci0gIGdzdF9wYWRfc2V0X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3NfZnVuY3Rpb24gKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYywKLSAgICAgIGdzdF9ydHBfc2Vzc2lvbl9pdGVyYXRlX2ludGVybmFsX2xpbmtzKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYywKLSAgICAgIGdzdF9ydHBfc2Vzc2lvbl9ldmVudF9zZW5kX3J0cF9zcmMpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zcmMpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NyYywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cHNlc3Npb24pLCBydHBzZXNzaW9uLT5zZW5kX3J0cF9zcmMpOwotCi0gIHJldHVybiBydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX3NlbmRfcnRwX3NpbmsgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicmVtb3ZpbmcgcGFkIik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zcmMsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rLCBGQUxTRSk7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc2Vzc2lvbiksCi0gICAgICBydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKTsKLSAgcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luayA9IE5VTEw7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc2Vzc2lvbiksCi0gICAgICBydHBzZXNzaW9uLT5zZW5kX3J0cF9zcmMpOwotICBydHBzZXNzaW9uLT5zZW5kX3J0cF9zcmMgPSBOVUxMOwotfQotCi0vKiBDcmVhdGUgYSBzcmNwYWQgd2l0aCB0aGUgUlRDUCBwYWNrZXRzIHRvIHNlbmQgb3V0LgotICogVGhpcyBwYWQgd2lsbCBiZSBkcml2ZW4gYnkgdGhlIFJUUCBzZXNzaW9uIG1hbmFnZXIgd2hlbiBpdCB3YW50cyB0byBzZW5kIG91dAotICogUlRDUCBwYWNrZXRzLgotICovCi1zdGF0aWMgR3N0UGFkICoKLWNyZWF0ZV9zZW5kX3J0Y3Bfc3JjIChHc3RSdHBTZXNzaW9uICogcnRwc2Vzc2lvbikKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwc2Vzc2lvbiwgImNyZWF0aW5nIHBhZCIpOwotCi0gIHJ0cHNlc3Npb24tPnNlbmRfcnRjcF9zcmMgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZydHBzZXNzaW9uX3NlbmRfcnRjcF9zcmNfdGVtcGxhdGUsCi0gICAgICAic2VuZF9ydGNwX3NyYyIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAocnRwc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYywKLSAgICAgIGdzdF9ydHBfc2Vzc2lvbl9pdGVyYXRlX2ludGVybmFsX2xpbmtzKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHJ0cHNlc3Npb24tPnNlbmRfcnRjcF9zcmMsCi0gICAgICBnc3RfcnRwX3Nlc3Npb25fcXVlcnlfc2VuZF9ydGNwX3NyYyk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjLAotICAgICAgZ3N0X3J0cF9zZXNzaW9uX2V2ZW50X3NlbmRfcnRjcF9zcmMpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBzZXNzaW9uKSwKLSAgICAgIHJ0cHNlc3Npb24tPnNlbmRfcnRjcF9zcmMpOwotCi0gIHJldHVybiBydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjOwotfQotCi1zdGF0aWMgdm9pZAotcmVtb3ZlX3NlbmRfcnRjcF9zcmMgKEdzdFJ0cFNlc3Npb24gKiBydHBzZXNzaW9uKQotewotICBHU1RfREVCVUdfT0JKRUNUIChydHBzZXNzaW9uLCAicmVtb3ZpbmcgcGFkIik7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjLCBGQUxTRSk7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwc2Vzc2lvbiksCi0gICAgICBydHBzZXNzaW9uLT5zZW5kX3J0Y3Bfc3JjKTsKLSAgcnRwc2Vzc2lvbi0+c2VuZF9ydGNwX3NyYyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfbmV3X3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbjsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR3N0UGFkICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JUUF9TRVNTSU9OIChlbGVtZW50KSwgTlVMTCk7Ci0KLSAgcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAoZWxlbWVudCk7Ci0gIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAicmVxdWVzdGluZyBwYWQgJXMiLCBHU1RfU1RSX05VTEwgKG5hbWUpKTsKLQotICBHU1RfUlRQX1NFU1NJT05fTE9DSyAocnRwc2Vzc2lvbik7Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgdGVtcGxhdGUgKi8KLSAgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAicmVjdl9ydHBfc2luayIpKSB7Ci0gICAgaWYgKHJ0cHNlc3Npb24tPnJlY3ZfcnRwX3NpbmsgIT0gTlVMTCkKLSAgICAgIGdvdG8gZXhpc3RzOwotCi0gICAgcmVzdWx0ID0gY3JlYXRlX3JlY3ZfcnRwX3NpbmsgKHJ0cHNlc3Npb24pOwotICB9IGVsc2UgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJyZWN2X3J0Y3Bfc2luayIpKSB7Ci0gICAgaWYgKHJ0cHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rICE9IE5VTEwpCi0gICAgICBnb3RvIGV4aXN0czsKLQotICAgIHJlc3VsdCA9IGNyZWF0ZV9yZWN2X3J0Y3Bfc2luayAocnRwc2Vzc2lvbik7Ci0gIH0gZWxzZSBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsCi0gICAgICAgICAgInNlbmRfcnRwX3NpbmsiKSkgewotICAgIGlmIChydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rICE9IE5VTEwpCi0gICAgICBnb3RvIGV4aXN0czsKLQotICAgIHJlc3VsdCA9IGNyZWF0ZV9zZW5kX3J0cF9zaW5rIChydHBzZXNzaW9uKTsKLSAgfSBlbHNlIGlmICh0ZW1wbCA9PSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywKLSAgICAgICAgICAic2VuZF9ydGNwX3NyYyIpKSB7Ci0gICAgaWYgKHJ0cHNlc3Npb24tPnNlbmRfcnRjcF9zcmMgIT0gTlVMTCkKLSAgICAgIGdvdG8gZXhpc3RzOwotCi0gICAgcmVzdWx0ID0gY3JlYXRlX3NlbmRfcnRjcF9zcmMgKHJ0cHNlc3Npb24pOwotICB9IGVsc2UKLSAgICBnb3RvIHdyb25nX3RlbXBsYXRlOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ190ZW1wbGF0ZToKLSAgewotICAgIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotICAgIGdfd2FybmluZyAoInJ0cHNlc3Npb246IHRoaXMgaXMgbm90IG91ciB0ZW1wbGF0ZSIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1leGlzdHM6Ci0gIHsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLSAgICBnX3dhcm5pbmcgKCJydHBzZXNzaW9uOiBwYWQgYWxyZWFkeSByZXF1ZXN0ZWQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zZXNzaW9uX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotICBHc3RSdHBTZXNzaW9uICpydHBzZXNzaW9uOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19SVFBfU0VTU0lPTiAoZWxlbWVudCkpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfUEFEIChwYWQpKTsKLQotICBydHBzZXNzaW9uID0gR1NUX1JUUF9TRVNTSU9OIChlbGVtZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlbGVtZW50LCAicmVsZWFzaW5nIHBhZCAlczolcyIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIGlmIChydHBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rID09IHBhZCkgewotICAgIHJlbW92ZV9yZWN2X3J0cF9zaW5rIChydHBzZXNzaW9uKTsKLSAgfSBlbHNlIGlmIChydHBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayA9PSBwYWQpIHsKLSAgICByZW1vdmVfcmVjdl9ydGNwX3NpbmsgKHJ0cHNlc3Npb24pOwotICB9IGVsc2UgaWYgKHJ0cHNlc3Npb24tPnNlbmRfcnRwX3NpbmsgPT0gcGFkKSB7Ci0gICAgcmVtb3ZlX3NlbmRfcnRwX3NpbmsgKHJ0cHNlc3Npb24pOwotICB9IGVsc2UgaWYgKHJ0cHNlc3Npb24tPnNlbmRfcnRjcF9zcmMgPT0gcGFkKSB7Ci0gICAgcmVtb3ZlX3NlbmRfcnRjcF9zcmMgKHJ0cHNlc3Npb24pOwotICB9IGVsc2UKLSAgICBnb3RvIHdyb25nX3BhZDsKLQotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ19wYWQ6Ci0gIHsKLSAgICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLSAgICBnX3dhcm5pbmcgKCJydHBzZXNzaW9uOiBhc2tlZCB0byByZWxlYXNlIGFuIHVua25vd24gcGFkIik7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25fcmVxdWVzdF9rZXlfdW5pdCAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgZ2Jvb2xlYW4gYWxsX2hlYWRlcnMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAodXNlcl9kYXRhKTsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RQYWQgKnNlbmRfcnRwX3Npbms7Ci0KLSAgR1NUX1JUUF9TRVNTSU9OX0xPQ0sgKHJ0cHNlc3Npb24pOwotICBpZiAoKHNlbmRfcnRwX3NpbmsgPSBydHBzZXNzaW9uLT5zZW5kX3J0cF9zaW5rKSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAoc2VuZF9ydHBfc2luayk7Ci0gIEdTVF9SVFBfU0VTU0lPTl9VTkxPQ0sgKHJ0cHNlc3Npb24pOwotCi0gIGlmIChzZW5kX3J0cF9zaW5rKSB7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJHc3RGb3JjZUtleVVuaXQiLAotICAgICAgICAgICAgImFsbC1oZWFkZXJzIiwgR19UWVBFX0JPT0xFQU4sIGFsbF9oZWFkZXJzLCBOVUxMKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzZW5kX3J0cF9zaW5rLCBldmVudCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2VuZF9ydHBfc2luayk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotZ3N0X3J0cF9zZXNzaW9uX3JlcXVlc3RfdGltZSAoUlRQU2Vzc2lvbiAqIHNlc3Npb24sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAodXNlcl9kYXRhKTsKLQotICByZXR1cm4gZ3N0X2Nsb2NrX2dldF90aW1lIChydHBzZXNzaW9uLT5wcml2LT5zeXNjbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3Nlc3Npb25fbm90aWZ5X25hY2sgKFJUUFNlc3Npb24gKiBzZXNzLCBndWludDE2IHNlcW51bSwKLSAgICBndWludDE2IGJscCwgZ3VpbnQzMiBzc3JjLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFJ0cFNlc3Npb24gKnJ0cHNlc3Npb24gPSBHU1RfUlRQX1NFU1NJT04gKHVzZXJfZGF0YSk7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0UGFkICpzZW5kX3J0cF9zaW5rOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLSAgaWYgKChzZW5kX3J0cF9zaW5rID0gcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luaykpCi0gICAgZ3N0X29iamVjdF9yZWYgKHNlbmRfcnRwX3NpbmspOwotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICBpZiAoc2VuZF9ydHBfc2luaykgewotICAgIHdoaWxlIChUUlVFKSB7Ci0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IiwKLSAgICAgICAgICAgICAgInNlcW51bSIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIHNlcW51bSwKLSAgICAgICAgICAgICAgInNzcmMiLCBHX1RZUEVfVUlOVCwgKGd1aW50KSBzc3JjLCBOVUxMKSk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbmRfcnRwX3NpbmssIGV2ZW50KTsKLQotICAgICAgaWYgKGJscCA9PSAwKQotICAgICAgICBicmVhazsKLQotICAgICAgc2VxbnVtKys7Ci0gICAgICB3aGlsZSAoKGJscCAmIDEpID09IDApIHsKLSAgICAgICAgc2VxbnVtKys7Ci0gICAgICAgIGJscCA+Pj0gMTsKLSAgICAgIH0KLSAgICAgIGJscCA+Pj0gMTsKLSAgICB9Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2VuZF9ydHBfc2luayk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc2Vzc2lvbl9yZWNvbmZpZ3VyZSAoUlRQU2Vzc2lvbiAqIHNlc3MsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UnRwU2Vzc2lvbiAqcnRwc2Vzc2lvbiA9IEdTVF9SVFBfU0VTU0lPTiAodXNlcl9kYXRhKTsKLSAgR3N0UGFkICpzZW5kX3J0cF9zaW5rOwotCi0gIEdTVF9SVFBfU0VTU0lPTl9MT0NLIChydHBzZXNzaW9uKTsKLSAgaWYgKChzZW5kX3J0cF9zaW5rID0gcnRwc2Vzc2lvbi0+c2VuZF9ydHBfc2luaykpCi0gICAgZ3N0X29iamVjdF9yZWYgKHNlbmRfcnRwX3NpbmspOwotICBHU1RfUlRQX1NFU1NJT05fVU5MT0NLIChydHBzZXNzaW9uKTsKLQotICBpZiAoc2VuZF9ydHBfc2luaykgewotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc2VuZF9ydHBfc2luaywgZ3N0X2V2ZW50X25ld19yZWNvbmZpZ3VyZSAoKSk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2VuZF9ydHBfc2luayk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uaCBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNlc3Npb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxYzEwOS4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBzZXNzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfU0VTU0lPTl9IX18KLSNkZWZpbmUgX19HU1RfUlRQX1NFU1NJT05fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX1NFU1NJT04gXAotICAoZ3N0X3J0cF9zZXNzaW9uX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9SVFBfU0VTU0lPTihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9TRVNTSU9OLEdzdFJ0cFNlc3Npb24pKQotI2RlZmluZSBHU1RfUlRQX1NFU1NJT05fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfUlRQX1NFU1NJT04sR3N0UnRwU2Vzc2lvbkNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TRVNTSU9OKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX1NFU1NJT04pKQotI2RlZmluZSBHU1RfSVNfUlRQX1NFU1NJT05fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX1NFU1NJT04pKQotI2RlZmluZSBHU1RfUlRQX1NFU1NJT05fQ0FTVChvYmopICgoR3N0UnRwU2Vzc2lvbiAqKShvYmopKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU2Vzc2lvbiBHc3RSdHBTZXNzaW9uOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFNlc3Npb25DbGFzcyBHc3RSdHBTZXNzaW9uQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UnRwU2Vzc2lvblByaXZhdGUgR3N0UnRwU2Vzc2lvblByaXZhdGU7Ci0KLXN0cnVjdCBfR3N0UnRwU2Vzc2lvbiB7Ci0gIEdzdEVsZW1lbnQgICAgIGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdFBhZCAgICAgICAgKnJlY3ZfcnRwX3Npbms7Ci0gIEdzdFNlZ21lbnQgICAgIHJlY3ZfcnRwX3NlZzsKLSAgR3N0UGFkICAgICAgICAqcmVjdl9ydGNwX3Npbms7Ci0gIEdzdFBhZCAgICAgICAgKnNlbmRfcnRwX3Npbms7Ci0gIEdzdFNlZ21lbnQgICAgIHNlbmRfcnRwX3NlZzsKLQotICBHc3RQYWQgICAgICAgICpyZWN2X3J0cF9zcmM7Ci0gIEdzdFBhZCAgICAgICAgKnN5bmNfc3JjOwotICBHc3RQYWQgICAgICAgICpzZW5kX3J0cF9zcmM7Ci0gIEdzdFBhZCAgICAgICAgKnNlbmRfcnRjcF9zcmM7Ci0KLSAgR3N0UnRwU2Vzc2lvblByaXZhdGUgKnByaXY7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFNlc3Npb25DbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotICBHc3RDYXBzKiAoKnJlcXVlc3RfcHRfbWFwKSAoR3N0UnRwU2Vzc2lvbiAqc2VzcywgZ3VpbnQgcHQpOwotICB2b2lkICAgICAoKmNsZWFyX3B0X21hcCkgICAoR3N0UnRwU2Vzc2lvbiAqc2Vzcyk7Ci0KLSAgdm9pZCAgICAgKCpvbl9uZXdfc3NyYykgICAgICAgKEdzdFJ0cFNlc3Npb24gKnNlc3MsIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fc3NyY19jb2xsaXNpb24pIChHc3RSdHBTZXNzaW9uICpzZXNzLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX3NzcmNfdmFsaWRhdGVkKSAoR3N0UnRwU2Vzc2lvbiAqc2VzcywgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl9zc3JjX2FjdGl2ZSkgICAgKEdzdFJ0cFNlc3Npb24gKnNlc3MsIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fc3NyY19zZGVzKSAgICAgIChHc3RSdHBTZXNzaW9uICpzZXNzLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX2J5ZV9zc3JjKSAgICAgICAoR3N0UnRwU2Vzc2lvbiAqc2VzcywgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl9ieWVfdGltZW91dCkgICAgKEdzdFJ0cFNlc3Npb24gKnNlc3MsIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fdGltZW91dCkgICAgICAgIChHc3RSdHBTZXNzaW9uICpzZXNzLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX3NlbmRlcl90aW1lb3V0KSAoR3N0UnRwU2Vzc2lvbiAqc2VzcywgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl9uZXdfc2VuZGVyX3NzcmMpICAgICAgKEdzdFJ0cFNlc3Npb24gKnNlc3MsIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fc2VuZGVyX3NzcmNfYWN0aXZlKSAgIChHc3RSdHBTZXNzaW9uICpzZXNzLCBndWludDMyIHNzcmMpOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9zZXNzaW9uX2dldF90eXBlICh2b2lkKTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1JUUF9OVFBfVElNRV9TT1VSQ0VfTlRQLAotICBHU1RfUlRQX05UUF9USU1FX1NPVVJDRV9VTklYLAotICBHU1RfUlRQX05UUF9USU1FX1NPVVJDRV9SVU5OSU5HX1RJTUUsCi0gIEdTVF9SVFBfTlRQX1RJTUVfU09VUkNFX0NMT0NLX1RJTUUKLX0gR3N0UnRwTnRwVGltZVNvdXJjZTsKLQotR1R5cGUgZ3N0X3J0cF9udHBfdGltZV9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi0jZW5kaWYgLyogX19HU1RfUlRQX1NFU1NJT05fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguYyBiL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGEzYzQzLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL2dzdHJ0cHNzcmNkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTU2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBSVFAgU1NSQyBkZW11eGVyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtcnRwc3NyY2RlbXV4Ci0gKgotICogcnRwc3NyY2RlbXV4IGFjdHMgYXMgYSBkZW11eGVyIGZvciBSVFAgcGFja2V0cyBiYXNlZCBvbiB0aGUgU1NSQyBvZiB0aGUKLSAqIHBhY2tldHMuIEl0cyBtYWluIHB1cnBvc2UgaXMgdG8gYWxsb3cgYW4gYXBwbGljYXRpb24gdG8gZWFzaWx5IHJlY2VpdmUgYW5kCi0gKiBkZWNvZGUgYW4gUlRQIHN0cmVhbSB3aXRoIG11bHRpcGxlIFNTUkNzLgotICogCi0gKiBGb3IgZWFjaCBTU1JDIHRoYXQgaXMgZGV0ZWN0ZWQsIGEgbmV3IHBhZCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZQotICogI0dzdFJ0cFNzcmNEZW11eDo6bmV3LXNzcmMtcGFkIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQuIAotICogCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHVkcHNyYyBjYXBzPSJhcHBsaWNhdGlvbi94LXJ0cCIgISBydHBzc3JjZGVtdXggISBmYWtlc2luawotICogXXwgVGFrZXMgYW4gUlRQIHN0cmVhbSBhbmQgc2VuZCB0aGUgUlRQIHBhY2tldHMgd2l0aCB0aGUgZmlyc3QgZGV0ZWN0ZWQgU1NSQwotICogdG8gZmFrZXNpbmssIGRpc2NhcmRpbmcgdGhlIG90aGVyIFNTUkNzLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAiZ3N0cnRwc3NyY2RlbXV4LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9ydHBfc3NyY19kZW11eF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfcnRwX3NzcmNfZGVtdXhfZGVidWcKLQotLyogZ2VuZXJpYyB0ZW1wbGF0ZXMgKi8KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBydHBfc3NyY19kZW11eF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwX3NzcmNfZGVtdXhfcnRjcF9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgicnRjcF9zaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydGNwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwX3NzcmNfZGVtdXhfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cF9zc3JjX2RlbXV4X3J0Y3Bfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgicnRjcF9zcmNfJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRjcCIpCi0gICAgKTsKLQotI2RlZmluZSBHU1RfUEFEX0xPQ0sob2JqKSAgIChnX3JlY19tdXRleF9sb2NrICgmKG9iaiktPnBhZGxvY2spKQotI2RlZmluZSBHU1RfUEFEX1VOTE9DSyhvYmopIChnX3JlY19tdXRleF91bmxvY2sgKCYob2JqKS0+cGFkbG9jaykpCi0KLXR5cGVkZWYgZW51bQotewotICBSVFBfUEFELAotICBSVENQX1BBRAotfSBQYWRUeXBlOwotCi0vKiBzaWduYWxzICovCi1lbnVtCi17Ci0gIFNJR05BTF9ORVdfU1NSQ19QQUQsCi0gIFNJR05BTF9SRU1PVkVEX1NTUkNfUEFELAotICBTSUdOQUxfQ0xFQVJfU1NSQywKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgZ3N0X3J0cF9zc3JjX2RlbXV4X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJ0cFNzcmNEZW11eCwgZ3N0X3J0cF9zc3JjX2RlbXV4LCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotLyogR09iamVjdCB2bWV0aG9kcyAqLwotc3RhdGljIHZvaWQgZ3N0X3J0cF9zc3JjX2RlbXV4X2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9zc3JjX2RlbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotLyogR3N0RWxlbWVudCB2bWV0aG9kcyAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfc3NyY19kZW11eF9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKgotICAgIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX3NzcmNfZGVtdXhfY2xlYXJfc3NyYyAoR3N0UnRwU3NyY0RlbXV4ICogZGVtdXgsCi0gICAgZ3VpbnQzMiBzc3JjKTsKLQotLyogc2lua3BhZCBzdHVmZiAqLwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9zc3JjX2RlbXV4X2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF9ydHBfc3NyY19kZW11eF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3J0cF9zc3JjX2RlbXV4X3J0Y3BfY2hhaW4gKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgR3N0SXRlcmF0b3IgKmdzdF9ydHBfc3NyY19kZW11eF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX3NpbmsgKEdzdFBhZCAqCi0gICAgcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpOwotCi0vKiBzcmNwYWQgc3R1ZmYgKi8KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3NzcmNfZGVtdXhfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RJdGVyYXRvciAqZ3N0X3J0cF9zc3JjX2RlbXV4X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3Nfc3JjIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRwX3NzcmNfZGVtdXhfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIGd1aW50IGdzdF9ydHBfc3NyY19kZW11eF9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi0vKgotICogSXRlbSBmb3Igc3RvcmluZyBHc3RQYWQgPC0+IFNTUkMgcGFpcnMuCi0gKi8KLXN0cnVjdCBfR3N0UnRwU3NyY0RlbXV4UGFkCi17Ci0gIGd1aW50MzIgc3NyYzsKLSAgR3N0UGFkICpydHBfcGFkOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RQYWQgKnJ0Y3BfcGFkOwotCi0gIGdib29sZWFuIHB1c2hlZF9pbml0aWFsX3J0cF9ldmVudHM7Ci0gIGdib29sZWFuIHB1c2hlZF9pbml0aWFsX3J0Y3BfZXZlbnRzOwotfTsKLQotLyogZmluZCBhIHNyYyBwYWQgZm9yIGEgZ2l2ZW4gU1NSQywgcmV0dXJucyBOVUxMIGlmIHRoZSBTU1JDIHdhcyBub3QgZm91bmQKLSAqLwotc3RhdGljIEdzdFJ0cFNzcmNEZW11eFBhZCAqCi1maW5kX2RlbXV4X3BhZF9mb3Jfc3NyYyAoR3N0UnRwU3NyY0RlbXV4ICogZGVtdXgsIGd1aW50MzIgc3NyYykKLXsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIGZvciAod2FsayA9IGRlbXV4LT5zcmNwYWRzOyB3YWxrOyB3YWxrID0gZ19zbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJ0cFNzcmNEZW11eFBhZCAqcGFkID0gKEdzdFJ0cFNzcmNEZW11eFBhZCAqKSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKHBhZC0+c3NyYyA9PSBzc3JjKQotICAgICAgcmV0dXJuIHBhZDsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIEdzdEV2ZW50ICoKLWFkZF9zc3JjX2FuZF9yZWYgKEdzdEV2ZW50ICogZXZlbnQsIGd1aW50MzIgc3NyYykKLXsKLSAgLyogU2V0IHRoZSBzc3JjIG9uIHRoZSBvdXRwdXQgY2FwcyAqLwotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgICBHc3RDYXBzICpuZXdjYXBzOwotICAgICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIG5ld2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLQotICAgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKG5ld2NhcHMsIDApOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJzc3JjIiwgR19UWVBFX1VJTlQsIHNzcmMsIE5VTEwpOwotICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2NhcHMgKG5ld2NhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKG5ld2NhcHMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBldmVudDsKLX0KLQotc3RydWN0IEZvcndhcmRTdGlja3lFdmVudERhdGEKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGd1aW50MzIgc3NyYzsKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotZm9yd2FyZF9zdGlja3lfZXZlbnRzIChHc3RQYWQgKiBwYWQsIEdzdEV2ZW50ICoqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHN0cnVjdCBGb3J3YXJkU3RpY2t5RXZlbnREYXRhICpkYXRhID0gdXNlcl9kYXRhOwotICBHc3RFdmVudCAqbmV3ZXZlbnQ7Ci0KLSAgbmV3ZXZlbnQgPSBhZGRfc3NyY19hbmRfcmVmICgqZXZlbnQsIGRhdGEtPnNzcmMpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAoZGF0YS0+cGFkLCBuZXdldmVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mb3J3YXJkX2luaXRpYWxfZXZlbnRzIChHc3RSdHBTc3JjRGVtdXggKiBkZW11eCwgZ3VpbnQzMiBzc3JjLCBHc3RQYWQgKiBwYWQsCi0gICAgUGFkVHlwZSBwYWR0eXBlKQotewotICBzdHJ1Y3QgRm9yd2FyZFN0aWNreUV2ZW50RGF0YSBmZGF0YTsKLSAgR3N0UGFkICpzaW5rcGFkID0gTlVMTDsKLQotICBpZiAocGFkdHlwZSA9PSBSVFBfUEFEKQotICAgIHNpbmtwYWQgPSBkZW11eC0+cnRwX3Npbms7Ci0gIGVsc2UgaWYgKHBhZHR5cGUgPT0gUlRDUF9QQUQpCi0gICAgc2lua3BhZCA9IGRlbXV4LT5ydGNwX3Npbms7Ci0gIGVsc2UKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLQotICBmZGF0YS5zc3JjID0gc3NyYzsKLSAgZmRhdGEucGFkID0gcGFkOwotCi0gIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChzaW5rcGFkLCBmb3J3YXJkX3N0aWNreV9ldmVudHMsICZmZGF0YSk7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotZmluZF9vcl9jcmVhdGVfZGVtdXhfcGFkX2Zvcl9zc3JjIChHc3RSdHBTc3JjRGVtdXggKiBkZW11eCwgZ3VpbnQzMiBzc3JjLAotICAgIFBhZFR5cGUgcGFkdHlwZSkKLXsKLSAgR3N0UGFkICpydHBfcGFkLCAqcnRjcF9wYWQ7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3M7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbDsKLSAgZ2NoYXIgKnBhZG5hbWU7Ci0gIEdzdFJ0cFNzcmNEZW11eFBhZCAqZGVtdXhwYWQ7Ci0gIEdzdFBhZCAqcmV0cGFkOwotICBndWxvbmcgcnRwX2Jsb2NrLCBydGNwX2Jsb2NrOwotCi0gIEdTVF9QQURfTE9DSyAoZGVtdXgpOwotCi0gIGRlbXV4cGFkID0gZmluZF9kZW11eF9wYWRfZm9yX3NzcmMgKGRlbXV4LCBzc3JjKTsKLSAgaWYgKGRlbXV4cGFkICE9IE5VTEwpIHsKLSAgICBnYm9vbGVhbiBmb3J3YXJkID0gRkFMU0U7Ci0KLSAgICBzd2l0Y2ggKHBhZHR5cGUpIHsKLSAgICAgIGNhc2UgUlRQX1BBRDoKLSAgICAgICAgcmV0cGFkID0gZ3N0X29iamVjdF9yZWYgKGRlbXV4cGFkLT5ydHBfcGFkKTsKLSAgICAgICAgaWYgKCFkZW11eHBhZC0+cHVzaGVkX2luaXRpYWxfcnRwX2V2ZW50cykgewotICAgICAgICAgIGZvcndhcmQgPSBUUlVFOwotICAgICAgICAgIGRlbXV4cGFkLT5wdXNoZWRfaW5pdGlhbF9ydHBfZXZlbnRzID0gVFJVRTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUlRDUF9QQUQ6Ci0gICAgICAgIHJldHBhZCA9IGdzdF9vYmplY3RfcmVmIChkZW11eHBhZC0+cnRjcF9wYWQpOwotICAgICAgICBpZiAoIWRlbXV4cGFkLT5wdXNoZWRfaW5pdGlhbF9ydGNwX2V2ZW50cykgewotICAgICAgICAgIGZvcndhcmQgPSBUUlVFOwotICAgICAgICAgIGRlbXV4cGFkLT5wdXNoZWRfaW5pdGlhbF9ydGNwX2V2ZW50cyA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXRwYWQgPSBOVUxMOwotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICB9Ci0KLSAgICBHU1RfUEFEX1VOTE9DSyAoZGVtdXgpOwotCi0gICAgaWYgKGZvcndhcmQpCi0gICAgICBmb3J3YXJkX2luaXRpYWxfZXZlbnRzIChkZW11eCwgc3NyYywgcmV0cGFkLCBwYWR0eXBlKTsKLSAgICByZXR1cm4gcmV0cGFkOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJjcmVhdGluZyBuZXcgcGFkIGZvciBTU1JDICUwOHgiLCBzc3JjKTsKLQotICBrbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZGVtdXgpOwotICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic3JjXyV1Iik7Ci0gIHBhZG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzcmNfJXUiLCBzc3JjKTsKLSAgcnRwX3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBwYWRuYW1lKTsKLSAgZ19mcmVlIChwYWRuYW1lKTsKLQotICB0ZW1wbCA9IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAicnRjcF9zcmNfJXUiKTsKLSAgcGFkbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInJ0Y3Bfc3JjXyV1Iiwgc3NyYyk7Ci0gIHJ0Y3BfcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGwsIHBhZG5hbWUpOwotICBnX2ZyZWUgKHBhZG5hbWUpOwotCi0gIC8qIHdyYXAgaW4gc3RydWN0dXJlIGFuZCBhZGQgdG8gbGlzdCAqLwotICBkZW11eHBhZCA9IGdfbmV3MCAoR3N0UnRwU3NyY0RlbXV4UGFkLCAxKTsKLSAgZGVtdXhwYWQtPnNzcmMgPSBzc3JjOwotICBkZW11eHBhZC0+cnRwX3BhZCA9IHJ0cF9wYWQ7Ci0gIGRlbXV4cGFkLT5ydGNwX3BhZCA9IHJ0Y3BfcGFkOwotCi0gIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAocnRwX3BhZCwgZGVtdXhwYWQpOwotICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKHJ0Y3BfcGFkLCBkZW11eHBhZCk7Ci0KLSAgZGVtdXgtPnNyY3BhZHMgPSBnX3NsaXN0X3ByZXBlbmQgKGRlbXV4LT5zcmNwYWRzLCBkZW11eHBhZCk7Ci0KLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHJ0cF9wYWQsIGdzdF9ydHBfc3NyY19kZW11eF9zcmNfcXVlcnkpOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChydHBfcGFkLAotICAgICAgZ3N0X3J0cF9zc3JjX2RlbXV4X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3Nfc3JjKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHJ0cF9wYWQsIGdzdF9ydHBfc3NyY19kZW11eF9zcmNfZXZlbnQpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChydHBfcGFkKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydHBfcGFkLCBUUlVFKTsKLQotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAocnRjcF9wYWQsIGdzdF9ydHBfc3NyY19kZW11eF9zcmNfZXZlbnQpOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChydGNwX3BhZCwKLSAgICAgIGdzdF9ydHBfc3NyY19kZW11eF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX3NyYyk7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHJ0Y3BfcGFkKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChydGNwX3BhZCwgVFJVRSk7Ci0KLSAgaWYgKHBhZHR5cGUgPT0gUlRQX1BBRCkgewotICAgIGRlbXV4cGFkLT5wdXNoZWRfaW5pdGlhbF9ydHBfZXZlbnRzID0gVFJVRTsKLSAgICBmb3J3YXJkX2luaXRpYWxfZXZlbnRzIChkZW11eCwgc3NyYywgcnRwX3BhZCwgcGFkdHlwZSk7Ci0gIH0gZWxzZSBpZiAocGFkdHlwZSA9PSBSVENQX1BBRCkgewotICAgIGRlbXV4cGFkLT5wdXNoZWRfaW5pdGlhbF9ydGNwX2V2ZW50cyA9IFRSVUU7Ci0gICAgZm9yd2FyZF9pbml0aWFsX2V2ZW50cyAoZGVtdXgsIHNzcmMsIHJ0Y3BfcGFkLCBwYWR0eXBlKTsKLSAgfSBlbHNlIHsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgcnRwX3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgcnRjcF9wYWQpOwotCi0gIHN3aXRjaCAocGFkdHlwZSkgewotICAgIGNhc2UgUlRQX1BBRDoKLSAgICAgIHJldHBhZCA9IGdzdF9vYmplY3RfcmVmIChkZW11eHBhZC0+cnRwX3BhZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJUQ1BfUEFEOgotICAgICAgcmV0cGFkID0gZ3N0X29iamVjdF9yZWYgKGRlbXV4cGFkLT5ydGNwX3BhZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0cGFkID0gTlVMTDsKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgZ3N0X29iamVjdF9yZWYgKHJ0cF9wYWQpOwotICBnc3Rfb2JqZWN0X3JlZiAocnRjcF9wYWQpOwotCi0gIHJ0cF9ibG9jayA9IGdzdF9wYWRfYWRkX3Byb2JlIChydHBfcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSwKLSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotICBydGNwX2Jsb2NrID0gZ3N0X3BhZF9hZGRfcHJvYmUgKHJ0Y3BfcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0tfRE9XTlNUUkVBTSwKLSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gIEdTVF9QQURfVU5MT0NLIChkZW11eCk7Ci0KLSAgZ19zaWduYWxfZW1pdCAoR19PQkpFQ1QgKGRlbXV4KSwKLSAgICAgIGdzdF9ydHBfc3NyY19kZW11eF9zaWduYWxzW1NJR05BTF9ORVdfU1NSQ19QQURdLCAwLCBzc3JjLCBydHBfcGFkKTsKLQotICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocnRwX3BhZCwgcnRwX2Jsb2NrKTsKLSAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHJ0Y3BfcGFkLCBydGNwX2Jsb2NrKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRjcF9wYWQpOwotCi0gIHJldHVybiByZXRwYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3NzcmNfZGVtdXhfY2xhc3NfaW5pdCAoR3N0UnRwU3NyY0RlbXV4Q2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2tsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfa2xhc3M7Ci0gIEdzdFJ0cFNzcmNEZW11eENsYXNzICpnc3RydHBzc3JjZGVtdXhfa2xhc3M7Ci0KLSAgZ29iamVjdF9rbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfa2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RydHBzc3JjZGVtdXhfa2xhc3MgPSAoR3N0UnRwU3NyY0RlbXV4Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9rbGFzcy0+ZGlzcG9zZSA9IGdzdF9ydHBfc3NyY19kZW11eF9kaXNwb3NlOwotICBnb2JqZWN0X2tsYXNzLT5maW5hbGl6ZSA9IGdzdF9ydHBfc3NyY19kZW11eF9maW5hbGl6ZTsKLQotICAvKioKLSAgICogR3N0UnRwU3NyY0RlbXV4OjpuZXctc3NyYy1wYWQ6Ci0gICAqIEBkZW11eDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzc3JjOiB0aGUgU1NSQyBvZiB0aGUgcGFkCi0gICAqIEBwYWQ6IHRoZSBuZXcgcGFkLgotICAgKgotICAgKiBFbWl0ZWQgd2hlbiBhIG5ldyBTU1JDIHBhZCBoYXMgYmVlbiBjcmVhdGVkLgotICAgKi8KLSAgZ3N0X3J0cF9zc3JjX2RlbXV4X3NpZ25hbHNbU0lHTkFMX05FV19TU1JDX1BBRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgibmV3LXNzcmMtcGFkIiwKLSAgICAgIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RSdHBTc3JjRGVtdXhDbGFzcywgbmV3X3NzcmNfcGFkKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHU1RfVFlQRV9QQUQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBTc3JjRGVtdXg6OnJlbW92ZWQtc3NyYy1wYWQ6Ci0gICAqIEBkZW11eDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzc3JjOiB0aGUgU1NSQyBvZiB0aGUgcGFkCi0gICAqIEBwYWQ6IHRoZSByZW1vdmVkIHBhZC4KLSAgICoKLSAgICogRW1pdGVkIHdoZW4gYSBTU1JDIHBhZCBoYXMgYmVlbiByZW1vdmVkLgotICAgKi8KLSAgZ3N0X3J0cF9zc3JjX2RlbXV4X3NpZ25hbHNbU0lHTkFMX1JFTU9WRURfU1NSQ19QQURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJlbW92ZWQtc3NyYy1wYWQiLAotICAgICAgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFJ0cFNzcmNEZW11eENsYXNzLCByZW1vdmVkX3NzcmNfcGFkKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHU1RfVFlQRV9QQUQpOwotCi0gIC8qKgotICAgKiBHc3RSdHBTc3JjRGVtdXg6OmNsZWFyLXNzcmM6Ci0gICAqIEBkZW11eDogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzc3JjOiB0aGUgU1NSQyBvZiB0aGUgcGFkCi0gICAqCi0gICAqIEFjdGlvbiBzaWduYWwgdG8gcmVtb3ZlIHRoZSBwYWQgZm9yIFNTUkMuCi0gICAqLwotICBnc3RfcnRwX3NzcmNfZGVtdXhfc2lnbmFsc1tTSUdOQUxfQ0xFQVJfU1NSQ10gPQotICAgICAgZ19zaWduYWxfbmV3ICgiY2xlYXItc3NyYyIsCi0gICAgICBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0UnRwU3NyY0RlbXV4Q2xhc3MsIGNsZWFyX3NzcmMpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgZ3N0ZWxlbWVudF9rbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3NzcmNfZGVtdXhfY2hhbmdlX3N0YXRlKTsKLSAgZ3N0cnRwc3NyY2RlbXV4X2tsYXNzLT5jbGVhcl9zc3JjID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX3NzcmNfZGVtdXhfY2xlYXJfc3NyYyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfa2xhc3MsCi0gICAgICAmcnRwX3NzcmNfZGVtdXhfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2tsYXNzLAotICAgICAgJnJ0cF9zc3JjX2RlbXV4X3J0Y3Bfc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2tsYXNzLAotICAgICAgJnJ0cF9zc3JjX2RlbXV4X3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2tsYXNzLAotICAgICAgJnJ0cF9zc3JjX2RlbXV4X3J0Y3Bfc3JjX3RlbXBsYXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2tsYXNzLCAiUlRQIFNTUkMgRGVtdXgiLAotICAgICAgIkRlbXV4L05ldHdvcmsvUlRQIiwKLSAgICAgICJTcGxpdHMgUlRQIHN0cmVhbXMgYmFzZWQgb24gdGhlIFNTUkMiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9ydHBfc3NyY19kZW11eF9kZWJ1ZywKLSAgICAgICJydHBzc3JjZGVtdXgiLCAwLCAiUlRQIFNTUkMgZGVtdXhlciIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zc3JjX2RlbXV4X2luaXQgKEdzdFJ0cFNzcmNEZW11eCAqIGRlbXV4KQotewotICBHc3RFbGVtZW50Q2xhc3MgKmtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChkZW11eCk7Ci0KLSAgZGVtdXgtPnJ0cF9zaW5rID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJzaW5rIiksICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChkZW11eC0+cnRwX3NpbmssIGdzdF9ydHBfc3NyY19kZW11eF9jaGFpbik7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChkZW11eC0+cnRwX3NpbmssIGdzdF9ydHBfc3NyY19kZW11eF9zaW5rX2V2ZW50KTsKLSAgZ3N0X3BhZF9zZXRfaXRlcmF0ZV9pbnRlcm5hbF9saW5rc19mdW5jdGlvbiAoZGVtdXgtPnJ0cF9zaW5rLAotICAgICAgZ3N0X3J0cF9zc3JjX2RlbXV4X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3Nfc2luayk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgZGVtdXgtPnJ0cF9zaW5rKTsKLQotICBkZW11eC0+cnRjcF9zaW5rID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJydGNwX3NpbmsiKSwgInJ0Y3Bfc2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoZGVtdXgtPnJ0Y3Bfc2luaywgZ3N0X3J0cF9zc3JjX2RlbXV4X3J0Y3BfY2hhaW4pOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoZGVtdXgtPnJ0Y3Bfc2luaywgZ3N0X3J0cF9zc3JjX2RlbXV4X3NpbmtfZXZlbnQpOwotICBnc3RfcGFkX3NldF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX2Z1bmN0aW9uIChkZW11eC0+cnRjcF9zaW5rLAotICAgICAgZ3N0X3J0cF9zc3JjX2RlbXV4X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3Nfc2luayk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgZGVtdXgtPnJ0Y3Bfc2luayk7Ci0KLSAgZ19yZWNfbXV0ZXhfaW5pdCAoJmRlbXV4LT5wYWRsb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc3NyY19kZW11eF9yZXNldCAoR3N0UnRwU3NyY0RlbXV4ICogZGVtdXgpCi17Ci0gIEdTTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBkZW11eC0+c3JjcGFkczsgd2Fsazsgd2FsayA9IGdfc2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSdHBTc3JjRGVtdXhQYWQgKmRwYWQgPSAoR3N0UnRwU3NyY0RlbXV4UGFkICopIHdhbGstPmRhdGE7Ci0KLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGRwYWQtPnJ0cF9wYWQsIEZBTFNFKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKGRwYWQtPnJ0Y3BfcGFkLCBGQUxTRSk7Ci0KLSAgICBnc3RfZWxlbWVudF9yZW1vdmVfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChkZW11eCksIGRwYWQtPnJ0cF9wYWQpOwotICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKGRlbXV4KSwgZHBhZC0+cnRjcF9wYWQpOwotICAgIGdfZnJlZSAoZHBhZCk7Ci0gIH0KLSAgZ19zbGlzdF9mcmVlIChkZW11eC0+c3JjcGFkcyk7Ci0gIGRlbXV4LT5zcmNwYWRzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfc3NyY19kZW11eF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBTc3JjRGVtdXggKmRlbXV4OwotCi0gIGRlbXV4ID0gR1NUX1JUUF9TU1JDX0RFTVVYIChvYmplY3QpOwotCi0gIGdzdF9ydHBfc3NyY19kZW11eF9yZXNldCAoZGVtdXgpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9zc3JjX2RlbXV4X2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RSdHBTc3JjRGVtdXggKmRlbXV4OwotCi0gIGRlbXV4ID0gR1NUX1JUUF9TU1JDX0RFTVVYIChvYmplY3QpOwotICBnX3JlY19tdXRleF9jbGVhciAoJmRlbXV4LT5wYWRsb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRwX3NzcmNfZGVtdXhfY2xlYXJfc3NyYyAoR3N0UnRwU3NyY0RlbXV4ICogZGVtdXgsIGd1aW50MzIgc3NyYykKLXsKLSAgR3N0UnRwU3NyY0RlbXV4UGFkICpkcGFkOwotCi0gIEdTVF9QQURfTE9DSyAoZGVtdXgpOwotICBkcGFkID0gZmluZF9kZW11eF9wYWRfZm9yX3NzcmMgKGRlbXV4LCBzc3JjKTsKLSAgaWYgKGRwYWQgPT0gTlVMTCkgewotICAgIEdTVF9QQURfVU5MT0NLIChkZW11eCk7Ci0gICAgZ290byB1bmtub3duX3BhZDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAiY2xlYXJpbmcgcGFkIGZvciBTU1JDICUwOHgiLCBzc3JjKTsKLQotICBkZW11eC0+c3JjcGFkcyA9IGdfc2xpc3RfcmVtb3ZlIChkZW11eC0+c3JjcGFkcywgZHBhZCk7Ci0gIEdTVF9QQURfVU5MT0NLIChkZW11eCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChkcGFkLT5ydHBfcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZHBhZC0+cnRjcF9wYWQsIEZBTFNFKTsKLQotICBnX3NpZ25hbF9lbWl0IChHX09CSkVDVCAoZGVtdXgpLAotICAgICAgZ3N0X3J0cF9zc3JjX2RlbXV4X3NpZ25hbHNbU0lHTkFMX1JFTU9WRURfU1NSQ19QQURdLCAwLCBzc3JjLAotICAgICAgZHBhZC0+cnRwX3BhZCk7Ci0KLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCBkcGFkLT5ydHBfcGFkKTsKLSAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoZGVtdXgpLCBkcGFkLT5ydGNwX3BhZCk7Ci0KLSAgZ19mcmVlIChkcGFkKTsKLQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi11bmtub3duX3BhZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVtdXgsICJ1bmtub3duIFNTUkMgJTA4eCIsIHNzcmMpOwotICAgIHJldHVybjsKLSAgfQotfQotCi1zdHJ1Y3QgRm9yd2FyZEV2ZW50RGF0YQotewotICBHc3RSdHBTc3JjRGVtdXggKmRlbXV4OwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0UGFkICpwYWQ7Ci19OwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWZvcndhcmRfZXZlbnQgKEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBzdHJ1Y3QgRm9yd2FyZEV2ZW50RGF0YSAqZmRhdGEgPSB1c2VyX2RhdGE7Ci0gIEdTTGlzdCAqd2FsayA9IE5VTEw7Ci0gIEdzdEV2ZW50ICpuZXdldmVudCA9IE5VTEw7Ci0KLSAgR1NUX1BBRF9MT0NLIChmZGF0YS0+ZGVtdXgpOwotICBmb3IgKHdhbGsgPSBmZGF0YS0+ZGVtdXgtPnNyY3BhZHM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgR3N0UnRwU3NyY0RlbXV4UGFkICpkcGFkID0gKEdzdFJ0cFNzcmNEZW11eFBhZCAqKSB3YWxrLT5kYXRhOwotCi0gICAgLyogT25seSBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgaW5pdGlhbCBldmVudHMgaGF2ZSBiZWVuIHRocm91Z2ggZmlyc3QsCi0gICAgICogdGhlIGluaXRpYWwgZXZlbnRzIHNob3VsZCBiZSBmb3J3YXJkZWQgYmVmb3JlIGFueSBvdGhlciBldmVudAotICAgICAqIG9yIGJ1ZmZlciBpcyBwdXNoZWQgKi8KLSAgICBpZiAoKHBhZCA9PSBkcGFkLT5ydHBfcGFkICYmIGRwYWQtPnB1c2hlZF9pbml0aWFsX3J0cF9ldmVudHMpIHx8Ci0gICAgICAgIChwYWQgPT0gZHBhZC0+cnRjcF9wYWQgJiYgZHBhZC0+cHVzaGVkX2luaXRpYWxfcnRjcF9ldmVudHMpKSB7Ci0gICAgICBuZXdldmVudCA9IGFkZF9zc3JjX2FuZF9yZWYgKGZkYXRhLT5ldmVudCwgZHBhZC0+c3NyYyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgR1NUX1BBRF9VTkxPQ0sgKGZkYXRhLT5kZW11eCk7Ci0KLSAgaWYgKG5ld2V2ZW50KQotICAgIGZkYXRhLT5yZXMgJj0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIG5ld2V2ZW50KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3NyY19kZW11eF9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RSdHBTc3JjRGVtdXggKmRlbXV4OwotICBzdHJ1Y3QgRm9yd2FyZEV2ZW50RGF0YSBmZGF0YTsKLQotICBkZW11eCA9IEdTVF9SVFBfU1NSQ19ERU1VWCAocGFyZW50KTsKLQotICBmZGF0YS5kZW11eCA9IGRlbXV4OwotICBmZGF0YS5wYWQgPSBwYWQ7Ci0gIGZkYXRhLmV2ZW50ID0gZXZlbnQ7Ci0gIGZkYXRhLnJlcyA9IFRSVUU7Ci0KLSAgZ3N0X3BhZF9mb3J3YXJkIChwYWQsIGZvcndhcmRfZXZlbnQsICZmZGF0YSk7Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIGZkYXRhLnJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfc3NyY19kZW11eF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdFJ0cFNzcmNEZW11eCAqZGVtdXg7Ci0gIGd1aW50MzIgc3NyYzsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IHsgTlVMTCB9OwotICBHc3RQYWQgKnNyY3BhZDsKLSAgR3N0UnRwU3NyY0RlbXV4UGFkICpkcGFkOwotCi0gIGRlbXV4ID0gR1NUX1JUUF9TU1JDX0RFTVVYIChwYXJlbnQpOwotCi0gIGlmICghZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRCwgJnJ0cCkpCi0gICAgZ290byBpbnZhbGlkX3BheWxvYWQ7Ci0KLSAgc3NyYyA9IGdzdF9ydHBfYnVmZmVyX2dldF9zc3JjICgmcnRwKTsKLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicmVjZWl2ZWQgYnVmZmVyIG9mIFNTUkMgJTA4eCIsIHNzcmMpOwotCi0gIHNyY3BhZCA9IGZpbmRfb3JfY3JlYXRlX2RlbXV4X3BhZF9mb3Jfc3NyYyAoZGVtdXgsIHNzcmMsIFJUUF9QQUQpOwotICBpZiAoc3JjcGFkID09IE5VTEwpCi0gICAgZ290byBjcmVhdGVfZmFpbGVkOwotCi0gIC8qIHB1c2ggdG8gc3JjcGFkICovCi0gIHJldCA9IGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWYpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAvKiBjaGVjayBpZiB0aGUgc3NyYyBzdGlsbCB0aGVyZSwgbWF5IGhhdmUgYmVlbiByZW1vdmVkICovCi0gICAgR1NUX1BBRF9MT0NLIChkZW11eCk7Ci0gICAgZHBhZCA9IGZpbmRfZGVtdXhfcGFkX2Zvcl9zc3JjIChkZW11eCwgc3NyYyk7Ci0gICAgaWYgKGRwYWQgPT0gTlVMTCB8fCBkcGFkLT5ydHBfcGFkICE9IHNyY3BhZCkgewotICAgICAgLyogU1NSQyB3YXMgcmVtb3ZlZCBkdXJpbmcgdGhlIHB1c2ggLi4uIGlnbm9yZSB0aGUgZXJyb3IgKi8KLSAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgIH0KLSAgICBHU1RfUEFEX1VOTE9DSyAoZGVtdXgpOwotICB9Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9wYXlsb2FkOgotICB7Ci0gICAgLyogdGhpcyBpcyBmYXRhbCBhbmQgc2hvdWxkIGJlIGZpbHRlcmVkIGVhcmxpZXIgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVtdXgsIFNUUkVBTSwgREVDT0RFLCAoTlVMTCksCi0gICAgICAgICgiRHJvcHBpbmcgaW52YWxpZCBSVFAgcGF5bG9hZCIpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotY3JlYXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgY3JlYXRlIG5ldyBwYWQiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfc3NyY19kZW11eF9ydGNwX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RSdHBTc3JjRGVtdXggKmRlbXV4OwotICBndWludDMyIHNzcmM7Ci0gIEdzdFJUQ1BQYWNrZXQgcGFja2V0OwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSB7IE5VTEwsIH07Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RSdHBTc3JjRGVtdXhQYWQgKmRwYWQ7Ci0KLSAgZGVtdXggPSBHU1RfUlRQX1NTUkNfREVNVVggKHBhcmVudCk7Ci0KLSAgaWYgKCFnc3RfcnRjcF9idWZmZXJfdmFsaWRhdGVfcmVkdWNlZCAoYnVmKSkKLSAgICBnb3RvIGludmFsaWRfcnRjcDsKLQotICBnc3RfcnRjcF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRCwgJnJ0Y3ApOwotICBpZiAoIWdzdF9ydGNwX2J1ZmZlcl9nZXRfZmlyc3RfcGFja2V0ICgmcnRjcCwgJnBhY2tldCkpIHsKLSAgICBnc3RfcnRjcF9idWZmZXJfdW5tYXAgKCZydGNwKTsKLSAgICBnb3RvIGludmFsaWRfcnRjcDsKLSAgfQotCi0gIC8qIGZpcnN0IHBhY2tldCBtdXN0IGJlIFNSIG9yIFJSLCBvciBpbiBjYXNlIG9mIGEgcmVkdWNlZCBzaXplIFJUQ1AgcGFja2V0Ci0gICAqIGl0IG11c3QgYmUgQVBQLCBSVFBGQiBvciBQU0ZCIGZlZWFkYmFjaywgb3IgZWxzZSB0aGUgdmFsaWRhdGUgd291bGQKLSAgICogaGF2ZSBmYWlsZWQgKi8KLSAgc3dpdGNoIChnc3RfcnRjcF9wYWNrZXRfZ2V0X3R5cGUgKCZwYWNrZXQpKSB7Ci0gICAgY2FzZSBHU1RfUlRDUF9UWVBFX1NSOgotICAgICAgLyogZ2V0IHRoZSBzc3JjIHNvIHRoYXQgd2UgY2FuIHJvdXRlIGl0IHRvIHRoZSByaWdodCBzb3VyY2UgcGFkICovCi0gICAgICBnc3RfcnRjcF9wYWNrZXRfc3JfZ2V0X3NlbmRlcl9pbmZvICgmcGFja2V0LCAmc3NyYywgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1JUQ1BfVFlQRV9SUjoKLSAgICAgIHNzcmMgPSBnc3RfcnRjcF9wYWNrZXRfcnJfZ2V0X3NzcmMgKCZwYWNrZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUlRDUF9UWVBFX0FQUDoKLSAgICBjYXNlIEdTVF9SVENQX1RZUEVfUlRQRkI6Ci0gICAgY2FzZSBHU1RfUlRDUF9UWVBFX1BTRkI6Ci0gICAgICBzc3JjID0gZ3N0X3J0Y3BfcGFja2V0X2ZiX2dldF9zZW5kZXJfc3NyYyAoJnBhY2tldCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byB1bmV4cGVjdGVkX3J0Y3A7Ci0gIH0KLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVtdXgsICJyZWNlaXZlZCBSVENQIG9mIFNTUkMgJTA4eCIsIHNzcmMpOwotCi0gIHNyY3BhZCA9IGZpbmRfb3JfY3JlYXRlX2RlbXV4X3BhZF9mb3Jfc3NyYyAoZGVtdXgsIHNzcmMsIFJUQ1BfUEFEKTsKLSAgaWYgKHNyY3BhZCA9PSBOVUxMKQotICAgIGdvdG8gY3JlYXRlX2ZhaWxlZDsKLQotICAvKiBwdXNoIHRvIHNyY3BhZCAqLwotICByZXQgPSBnc3RfcGFkX3B1c2ggKHNyY3BhZCwgYnVmKTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgLyogY2hlY2sgaWYgdGhlIHNzcmMgc3RpbGwgdGhlcmUsIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCAqLwotICAgIEdTVF9QQURfTE9DSyAoZGVtdXgpOwotICAgIGRwYWQgPSBmaW5kX2RlbXV4X3BhZF9mb3Jfc3NyYyAoZGVtdXgsIHNzcmMpOwotICAgIGlmIChkcGFkID09IE5VTEwgfHwgZHBhZC0+cnRjcF9wYWQgIT0gc3JjcGFkKSB7Ci0gICAgICAvKiBTU1JDIHdhcyByZW1vdmVkIGR1cmluZyB0aGUgcHVzaCAuLi4gaWdub3JlIHRoZSBlcnJvciAqLwotICAgICAgcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gICAgfQotICAgIEdTVF9QQURfVU5MT0NLIChkZW11eCk7Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX3J0Y3A6Ci0gIHsKLSAgICAvKiB0aGlzIGlzIGZhdGFsIGFuZCBzaG91bGQgYmUgZmlsdGVyZWQgZWFybGllciAqLwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCJEcm9wcGluZyBpbnZhbGlkIFJUQ1AgcGFja2V0IikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci11bmV4cGVjdGVkX3J0Y3A6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkZW11eCwgImRyb3BwaW5nIHVuZXhwZWN0ZWQgUlRDUCBwYWNrZXQiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotY3JlYXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkZW11eCwgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgY3JlYXRlIG5ldyBwYWQiKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFJ0cFNzcmNEZW11eFBhZCAqCi1maW5kX2RlbXV4X3BhZF9mb3JfcGFkIChHc3RSdHBTc3JjRGVtdXggKiBkZW11eCwgR3N0UGFkICogcGFkKQotewotICBHU0xpc3QgKndhbGs7Ci0KLSAgZm9yICh3YWxrID0gZGVtdXgtPnNyY3BhZHM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UnRwU3NyY0RlbXV4UGFkICpkcGFkID0gKEdzdFJ0cFNzcmNEZW11eFBhZCAqKSB3YWxrLT5kYXRhOwotICAgIGlmIChkcGFkLT5ydHBfcGFkID09IHBhZCB8fCBkcGFkLT5ydGNwX3BhZCA9PSBwYWQpIHsKLSAgICAgIHJldHVybiBkcGFkOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9zc3JjX2RlbXV4X3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UnRwU3NyY0RlbXV4ICpkZW11eDsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotCi0gIGRlbXV4ID0gR1NUX1JUUF9TU1JDX0RFTVVYIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTToKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fQk9USDoKLSAgICBjYXNlIEdTVF9FVkVOVF9DVVNUT01fQk9USF9PT0I6Ci0gICAgICBzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLSAgICAgIGlmIChzICYmICFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgInNzcmMiKSkgewotICAgICAgICBHc3RSdHBTc3JjRGVtdXhQYWQgKmRwYWQgPSBmaW5kX2RlbXV4X3BhZF9mb3JfcGFkIChkZW11eCwgcGFkKTsKLQotICAgICAgICBpZiAoZHBhZCkgewotICAgICAgICAgIEdzdFN0cnVjdHVyZSAqd3M7Ci0KLSAgICAgICAgICBldmVudCA9IGdzdF9ldmVudF9tYWtlX3dyaXRhYmxlIChldmVudCk7Ci0gICAgICAgICAgd3MgPSBnc3RfZXZlbnRfd3JpdGFibGVfc3RydWN0dXJlIChldmVudCk7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHdzLCAic3NyYyIsIEdfVFlQRV9VSU5ULCBkcGFkLT5zc3JjLCBOVUxMKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLX0KLQotc3RhdGljIEdzdEl0ZXJhdG9yICoKLWdzdF9ydHBfc3NyY19kZW11eF9pdGVyYXRlX2ludGVybmFsX2xpbmtzX3NyYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQpCi17Ci0gIEdzdFJ0cFNzcmNEZW11eCAqZGVtdXg7Ci0gIEdzdFBhZCAqb3RoZXJwYWQgPSBOVUxMOwotICBHc3RJdGVyYXRvciAqaXQgPSBOVUxMOwotICBHU0xpc3QgKmN1cnJlbnQ7Ci0KLSAgZGVtdXggPSBHU1RfUlRQX1NTUkNfREVNVVggKHBhcmVudCk7Ci0KLSAgR1NUX1BBRF9MT0NLIChkZW11eCk7Ci0gIGZvciAoY3VycmVudCA9IGRlbXV4LT5zcmNwYWRzOyBjdXJyZW50OyBjdXJyZW50ID0gZ19zbGlzdF9uZXh0IChjdXJyZW50KSkgewotICAgIEdzdFJ0cFNzcmNEZW11eFBhZCAqZHBhZCA9IChHc3RSdHBTc3JjRGVtdXhQYWQgKikgY3VycmVudC0+ZGF0YTsKLQotICAgIGlmIChwYWQgPT0gZHBhZC0+cnRwX3BhZCkgewotICAgICAgb3RoZXJwYWQgPSBkZW11eC0+cnRwX3Npbms7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYgKHBhZCA9PSBkcGFkLT5ydGNwX3BhZCkgewotICAgICAgb3RoZXJwYWQgPSBkZW11eC0+cnRjcF9zaW5rOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGlmIChvdGhlcnBhZCkgewotICAgIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX1BBRCk7Ci0gICAgZ192YWx1ZV9zZXRfb2JqZWN0ICgmdmFsLCBvdGhlcnBhZCk7Ci0gICAgaXQgPSBnc3RfaXRlcmF0b3JfbmV3X3NpbmdsZSAoR1NUX1RZUEVfUEFELCAmdmFsKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICB9Ci0gIEdTVF9QQURfVU5MT0NLIChkZW11eCk7Ci0KLSAgcmV0dXJuIGl0OwotfQotCi0vKiBTaG91bGQgcmV0dXJuIDAgZm9yIGVsZW1lbnRzIHRvIGJlIGluY2x1ZGVkICovCi1zdGF0aWMgZ2ludAotc3JjX3BhZF9jb21wYXJlX2Z1bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQotewotICBHc3RQYWQgKnBhZCA9IEdTVF9QQUQgKGdfdmFsdWVfZ2V0X29iamVjdCAoYSkpOwotICBjb25zdCBnY2hhciAqcHJlZml4ID0gZ192YWx1ZV9nZXRfc3RyaW5nIChiKTsKLSAgZ2ludCByZXM7Ci0KLSAgLyogMCBtZWFucyBlcXVhbCBtZWFucyB3ZSBhY2NlcHQgdGhlIHBhZCwgYWNjZXB0ZWQgaWYgdGhlcmUgaXMgYSBuYW1lCi0gICAqIGFuZCBpdCBzdGFydHMgd2l0aCB0aGUgcHJlZml4ICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAocGFkKTsKLSAgcmVzID0gIUdTVF9QQURfTkFNRSAocGFkKSB8fCAhZ19zdHJfaGFzX3ByZWZpeCAoR1NUX1BBRF9OQU1FIChwYWQpLCBwcmVmaXgpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAocGFkKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0SXRlcmF0b3IgKgotZ3N0X3J0cF9zc3JjX2RlbXV4X2l0ZXJhdGVfaW50ZXJuYWxfbGlua3Nfc2luayAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCkKLXsKLSAgR3N0UnRwU3NyY0RlbXV4ICpkZW11eDsKLSAgR3N0SXRlcmF0b3IgKml0ID0gTlVMTDsKLSAgR1ZhbHVlIGd2YWwgPSB7IDAsIH07Ci0KLSAgZGVtdXggPSBHU1RfUlRQX1NTUkNfREVNVVggKHBhcmVudCk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmZ3ZhbCwgR19UWVBFX1NUUklORyk7Ci0gIGlmIChwYWQgPT0gZGVtdXgtPnJ0cF9zaW5rKQotICAgIGdfdmFsdWVfc2V0X3N0YXRpY19zdHJpbmcgKCZndmFsLCAic3JjXyIpOwotICBlbHNlIGlmIChwYWQgPT0gZGVtdXgtPnJ0Y3Bfc2luaykKLSAgICBnX3ZhbHVlX3NldF9zdGF0aWNfc3RyaW5nICgmZ3ZhbCwgInJ0Y3Bfc3JjXyIpOwotICBlbHNlCi0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0KLSAgaXQgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzIChHU1RfRUxFTUVOVF9DQVNUIChkZW11eCkpOwotICBpdCA9IGdzdF9pdGVyYXRvcl9maWx0ZXIgKGl0LCBzcmNfcGFkX2NvbXBhcmVfZnVuYywgJmd2YWwpOwotCi0gIHJldHVybiBpdDsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHBfc3NyY19kZW11eF9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFJ0cFNzcmNEZW11eCAqZGVtdXg7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIGRlbXV4ID0gR1NUX1JUUF9TU1JDX0RFTVVYIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6Ci0gICAgewotCi0gICAgICBpZiAoKHJlcyA9IGdzdF9wYWRfcGVlcl9xdWVyeSAoZGVtdXgtPnJ0cF9zaW5rLCBxdWVyeSkpKSB7Ci0gICAgICAgIGdib29sZWFuIGxpdmU7Ci0gICAgICAgIEdzdENsb2NrVGltZSBtaW5fbGF0ZW5jeSwgbWF4X2xhdGVuY3k7Ci0gICAgICAgIEdzdFJ0cFNzcmNEZW11eFBhZCAqZGVtdXhwYWQ7Ci0KLSAgICAgICAgZGVtdXhwYWQgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0KLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2xhdGVuY3kgKHF1ZXJ5LCAmbGl2ZSwgJm1pbl9sYXRlbmN5LCAmbWF4X2xhdGVuY3kpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAicGVlciBtaW4gbGF0ZW5jeSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW5fbGF0ZW5jeSkpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlbXV4LCAibGF0ZW5jeSBmb3IgU1NSQyAlMDh4IiwgZGVtdXhwYWQtPnNzcmMpOwotCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfbGF0ZW5jeSAocXVlcnksIGxpdmUsIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfcnRwX3NzcmNfZGVtdXhfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFJ0cFNzcmNEZW11eCAqZGVtdXg7Ci0KLSAgZGVtdXggPSBHU1RfUlRQX1NTUkNfREVNVVggKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfcnRwX3NzcmNfZGVtdXhfcmVzZXQgKGRlbXV4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvZ3N0cnRwc3NyY2RlbXV4LmggYi9nc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJkZjQ0NC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9nc3RydHBzc3JjZGVtdXguaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1JUUF9TU1JDX0RFTVVYX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfU1NSQ19ERU1VWF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2RlZmluZSBHU1RfVFlQRV9SVFBfU1NSQ19ERU1VWCAgICAgICAgICAgIChnc3RfcnRwX3NzcmNfZGVtdXhfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUUF9TU1JDX0RFTVVYKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfUlRQX1NTUkNfREVNVVgsR3N0UnRwU3NyY0RlbXV4KSkKLSNkZWZpbmUgR1NUX1JUUF9TU1JDX0RFTVVYX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU1NSQ19ERU1VWCxHc3RSdHBTc3JjRGVtdXhDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFBfU1NSQ19ERU1VWChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1JUUF9TU1JDX0RFTVVYKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9TU1JDX0RFTVVYX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9SVFBfU1NSQ19ERU1VWCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBTc3JjRGVtdXggR3N0UnRwU3NyY0RlbXV4OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFNzcmNEZW11eENsYXNzIEdzdFJ0cFNzcmNEZW11eENsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJ0cFNzcmNEZW11eFBhZCBHc3RSdHBTc3JjRGVtdXhQYWQ7Ci0KLXN0cnVjdCBfR3N0UnRwU3NyY0RlbXV4Ci17Ci0gIEdzdEVsZW1lbnQgcGFyZW50OwotCi0gIEdzdFBhZCAqcnRwX3Npbms7Ci0gIEdzdFBhZCAqcnRjcF9zaW5rOwotCi0gIEdSZWNNdXRleCBwYWRsb2NrOwotICBHU0xpc3QgKnNyY3BhZHM7Ci19OwotCi1zdHJ1Y3QgX0dzdFJ0cFNzcmNEZW11eENsYXNzCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogc2lnbmFscyAqLwotICB2b2lkICgqbmV3X3NzcmNfcGFkKSAgICAgKEdzdFJ0cFNzcmNEZW11eCAqZGVtdXgsIGd1aW50MzIgc3NyYywgR3N0UGFkICpwYWQpOwotICB2b2lkICgqcmVtb3ZlZF9zc3JjX3BhZCkgKEdzdFJ0cFNzcmNEZW11eCAqZGVtdXgsIGd1aW50MzIgc3NyYywgR3N0UGFkICpwYWQpOwotCi0gIC8qIGFjdGlvbnMgKi8KLSAgdm9pZCAoKmNsZWFyX3NzcmMpICAgICAgIChHc3RSdHBTc3JjRGVtdXggKmRlbXV4LCBndWludDMyIHNzcmMpOwotfTsKLQotR1R5cGUgZ3N0X3J0cF9zc3JjX2RlbXV4X2dldF90eXBlICh2b2lkKTsKLQotI2VuZGlmIC8qIF9fR1NUX1JUUF9TU1JDX0RFTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmMgYi9nc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNiN2ViYy4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA3PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5oPgotCi0jaW5jbHVkZSAicnRwaml0dGVyYnVmZmVyLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHJ0cF9qaXR0ZXJfYnVmZmVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHJ0cF9qaXR0ZXJfYnVmZmVyX2RlYnVnCi0KLSNkZWZpbmUgTUFYX1dJTkRPVwlSVFBfSklUVEVSX0JVRkZFUl9NQVhfV0lORE9XCi0jZGVmaW5lIE1BWF9USU1FCSgyICogR1NUX1NFQ09ORCkKLQotLyogc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAKLX07Ci0KLS8qIEdPYmplY3Qgdm1ldGhvZHMgKi8KLXN0YXRpYyB2b2lkIHJ0cF9qaXR0ZXJfYnVmZmVyX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotR1R5cGUKLXJ0cF9qaXR0ZXJfYnVmZmVyX21vZGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBqaXR0ZXJfYnVmZmVyX21vZGVfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGppdHRlcl9idWZmZXJfbW9kZXNbXSA9IHsKLSAgICB7UlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9OT05FLCAiT25seSB1c2UgUlRQIHRpbWVzdGFtcHMiLCAibm9uZSJ9LAotICAgIHtSVFBfSklUVEVSX0JVRkZFUl9NT0RFX1NMQVZFLCAiU2xhdmUgcmVjZWl2ZXIgdG8gc2VuZGVyIGNsb2NrIiwgInNsYXZlIn0sCi0gICAge1JUUF9KSVRURVJfQlVGRkVSX01PREVfQlVGRkVSLCAiRG8gbG93L2hpZ2ggd2F0ZXJtYXJrIGJ1ZmZlcmluZyIsCi0gICAgICAgICJidWZmZXIifSwKLSAgICB7UlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9TWU5DRUQsICJTeW5jaHJvbml6ZWQgc2VuZGVyIGFuZCByZWNlaXZlciBjbG9ja3MiLAotICAgICAgICAic3luY2VkIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghaml0dGVyX2J1ZmZlcl9tb2RlX3R5cGUpIHsKLSAgICBqaXR0ZXJfYnVmZmVyX21vZGVfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJSVFBKaXR0ZXJCdWZmZXJNb2RlIiwgaml0dGVyX2J1ZmZlcl9tb2Rlcyk7Ci0gIH0KLSAgcmV0dXJuIGppdHRlcl9idWZmZXJfbW9kZV90eXBlOwotfQotCi0vKiBzdGF0aWMgZ3VpbnQgcnRwX2ppdHRlcl9idWZmZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KLQotR19ERUZJTkVfVFlQRSAoUlRQSml0dGVyQnVmZmVyLCBydHBfaml0dGVyX2J1ZmZlciwgR19UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkCi1ydHBfaml0dGVyX2J1ZmZlcl9jbGFzc19pbml0IChSVFBKaXR0ZXJCdWZmZXJDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBydHBfaml0dGVyX2J1ZmZlcl9maW5hbGl6ZTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwX2ppdHRlcl9idWZmZXJfZGVidWcsICJydHBqaXR0ZXJidWZmZXIiLCAwLAotICAgICAgIlJUUCBKaXR0ZXIgQnVmZmVyIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfaml0dGVyX2J1ZmZlcl9pbml0IChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmKQotewotICBnX211dGV4X2luaXQgKCZqYnVmLT5jbG9ja19sb2NrKTsKLQotICBqYnVmLT5wYWNrZXRzID0gZ19xdWV1ZV9uZXcgKCk7Ci0gIGpidWYtPm1vZGUgPSBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX1NMQVZFOwotCi0gIHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcgKGpidWYpOwotfQotCi1zdGF0aWMgdm9pZAotcnRwX2ppdHRlcl9idWZmZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIFJUUEppdHRlckJ1ZmZlciAqamJ1ZjsKLQotICBqYnVmID0gUlRQX0pJVFRFUl9CVUZGRVJfQ0FTVCAob2JqZWN0KTsKLQotICBpZiAoamJ1Zi0+bWVkaWFfY2xvY2tfc3luY2VkX2lkKQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoamJ1Zi0+bWVkaWFfY2xvY2ssCi0gICAgICAgIGpidWYtPm1lZGlhX2Nsb2NrX3N5bmNlZF9pZCk7Ci0gIGlmIChqYnVmLT5tZWRpYV9jbG9jaykKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChqYnVmLT5tZWRpYV9jbG9jayk7Ci0KLSAgaWYgKGpidWYtPnBpcGVsaW5lX2Nsb2NrKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKGpidWYtPnBpcGVsaW5lX2Nsb2NrKTsKLQotICBnX3F1ZXVlX2ZyZWUgKGpidWYtPnBhY2tldHMpOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZqYnVmLT5jbG9ja19sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocnRwX2ppdHRlcl9idWZmZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLS8qKgotICogcnRwX2ppdHRlcl9idWZmZXJfbmV3OgotICoKLSAqIENyZWF0ZSBhbiAjUlRQSml0dGVyQnVmZmVyLgotICoKLSAqIFJldHVybnM6IGEgbmV3ICNSVFBKaXR0ZXJCdWZmZXIuIFVzZSBnX29iamVjdF91bnJlZigpIGFmdGVyIHVzYWdlLgotICovCi1SVFBKaXR0ZXJCdWZmZXIgKgotcnRwX2ppdHRlcl9idWZmZXJfbmV3ICh2b2lkKQotewotICBSVFBKaXR0ZXJCdWZmZXIgKmpidWY7Ci0KLSAgamJ1ZiA9IGdfb2JqZWN0X25ldyAoUlRQX1RZUEVfSklUVEVSX0JVRkZFUiwgTlVMTCk7Ci0KLSAgcmV0dXJuIGpidWY7Ci19Ci0KLS8qKgotICogcnRwX2ppdHRlcl9idWZmZXJfZ2V0X21vZGU6Ci0gKiBAamJ1ZjogYW4gI1JUUEppdHRlckJ1ZmZlcgotICoKLSAqIEdldCB0aGUgY3VycmVudCBqaXR0ZXJidWZmZXIgbW9kZS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgY3VycmVudCBqaXR0ZXJidWZmZXIgbW9kZS4KLSAqLwotUlRQSml0dGVyQnVmZmVyTW9kZQotcnRwX2ppdHRlcl9idWZmZXJfZ2V0X21vZGUgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYpCi17Ci0gIHJldHVybiBqYnVmLT5tb2RlOwotfQotCi0vKioKLSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9tb2RlOgotICogQGpidWY6IGFuICNSVFBKaXR0ZXJCdWZmZXIKLSAqIEBtb2RlOiBhICNSVFBKaXR0ZXJCdWZmZXJNb2RlCi0gKgotICogU2V0IHRoZSBidWZmZXJpbmcgYW5kIGNsb2NrIHNsYXZpbmcgYWxnb3JpdGhtIHVzZWQgaW4gdGhlIEBqYnVmLgotICovCi12b2lkCi1ydHBfaml0dGVyX2J1ZmZlcl9zZXRfbW9kZSAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgUlRQSml0dGVyQnVmZmVyTW9kZSBtb2RlKQotewotICBqYnVmLT5tb2RlID0gbW9kZTsKLX0KLQotR3N0Q2xvY2tUaW1lCi1ydHBfaml0dGVyX2J1ZmZlcl9nZXRfZGVsYXkgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYpCi17Ci0gIHJldHVybiBqYnVmLT5kZWxheTsKLX0KLQotdm9pZAotcnRwX2ppdHRlcl9idWZmZXJfc2V0X2RlbGF5IChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmLCBHc3RDbG9ja1RpbWUgZGVsYXkpCi17Ci0gIGpidWYtPmRlbGF5ID0gZGVsYXk7Ci0gIGpidWYtPmxvd19sZXZlbCA9IChkZWxheSAqIDE1KSAvIDEwMDsKLSAgLyogdGhlIGhpZ2ggbGV2ZWwgaXMgYXQgOTAlIGluIG9yZGVyIHRvIHJlbGVhc2UgcGFja2V0cyBiZWZvcmUgd2UgZmlsbCB1cCB0aGUKLSAgICogYnVmZmVyIHVwIHRvIHRoZSBsYXRlbmN5ICovCi0gIGpidWYtPmhpZ2hfbGV2ZWwgPSAoZGVsYXkgKiA5MCkgLyAxMDA7Ci0KLSAgR1NUX0RFQlVHICgiZGVsYXkgJSIgR1NUX1RJTUVfRk9STUFUICIsIG1pbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgbWF4ICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGpidWYtPmRlbGF5KSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGpidWYtPmxvd19sZXZlbCksIEdTVF9USU1FX0FSR1MgKGpidWYtPmhpZ2hfbGV2ZWwpKTsKLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9zZXRfY2xvY2tfcmF0ZToKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKiBAY2xvY2tfcmF0ZTogdGhlIG5ldyBjbG9jayByYXRlCi0gKgotICogU2V0IHRoZSBjbG9jayByYXRlIGluIHRoZSBqaXR0ZXJidWZmZXIuCi0gKi8KLXZvaWQKLXJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9jbG9ja19yYXRlIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmLCBndWludDMyIGNsb2NrX3JhdGUpCi17Ci0gIGlmIChqYnVmLT5jbG9ja19yYXRlICE9IGNsb2NrX3JhdGUpIHsKLSAgICBHU1RfREVCVUcgKCJDbG9jayByYXRlIGNoYW5nZWQgZnJvbSAlIiBHX0dVSU5UMzJfRk9STUFUICIgdG8gJSIKLSAgICAgICAgR19HVUlOVDMyX0ZPUk1BVCwgamJ1Zi0+Y2xvY2tfcmF0ZSwgY2xvY2tfcmF0ZSk7Ci0gICAgamJ1Zi0+Y2xvY2tfcmF0ZSA9IGNsb2NrX3JhdGU7Ci0gICAgcnRwX2ppdHRlcl9idWZmZXJfcmVzZXRfc2tldyAoamJ1Zik7Ci0gIH0KLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9nZXRfY2xvY2tfcmF0ZToKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKgotICogR2V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlIGNsb2NrIHJhdGUgaW4gQGpidWYuCi0gKgotICogUmV0dXJuczogdGhlIGN1cnJlbnQgY2xvY2stcmF0ZQotICovCi1ndWludDMyCi1ydHBfaml0dGVyX2J1ZmZlcl9nZXRfY2xvY2tfcmF0ZSAoUlRQSml0dGVyQnVmZmVyICogamJ1ZikKLXsKLSAgcmV0dXJuIGpidWYtPmNsb2NrX3JhdGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tZWRpYV9jbG9ja19zeW5jZWRfY2IgKEdzdENsb2NrICogY2xvY2ssIGdib29sZWFuIHN5bmNlZCwKLSAgICBSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmKQotewotICBHc3RDbG9ja1RpbWUgaW50ZXJuYWwsIGV4dGVybmFsOwotCi0gIGdfbXV0ZXhfbG9jayAoJmpidWYtPmNsb2NrX2xvY2spOwotICBpZiAoamJ1Zi0+cGlwZWxpbmVfY2xvY2spIHsKLSAgICBpbnRlcm5hbCA9IGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoamJ1Zi0+bWVkaWFfY2xvY2spOwotICAgIGV4dGVybmFsID0gZ3N0X2Nsb2NrX2dldF90aW1lIChqYnVmLT5waXBlbGluZV9jbG9jayk7Ci0KLSAgICBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uIChqYnVmLT5tZWRpYV9jbG9jaywgaW50ZXJuYWwsIGV4dGVybmFsLCAxLCAxKTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmpidWYtPmNsb2NrX2xvY2spOwotfQotCi0vKioKLSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9tZWRpYV9jbG9jazoKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKiBAY2xvY2s6ICh0cmFuc2ZlciBmdWxsKTogbWVkaWEgI0dzdENsb2NrCi0gKiBAY2xvY2tfb2Zmc2V0OiBSVFAgdGltZSBhdCBjbG9jayBlcG9jaCBvciAtMQotICoKLSAqIFNldHMgdGhlIG1lZGlhIGNsb2NrIGZvciB0aGUgbWVkaWEgYW5kIHRoZSBjbG9jayBvZmZzZXQKLSAqCi0gKi8KLXZvaWQKLXJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9tZWRpYV9jbG9jayAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgR3N0Q2xvY2sgKiBjbG9jaywKLSAgICBndWludDY0IGNsb2NrX29mZnNldCkKLXsKLSAgZ19tdXRleF9sb2NrICgmamJ1Zi0+Y2xvY2tfbG9jayk7Ci0gIGlmIChqYnVmLT5tZWRpYV9jbG9jaykgewotICAgIGlmIChqYnVmLT5tZWRpYV9jbG9ja19zeW5jZWRfaWQpCi0gICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGpidWYtPm1lZGlhX2Nsb2NrLAotICAgICAgICAgIGpidWYtPm1lZGlhX2Nsb2NrX3N5bmNlZF9pZCk7Ci0gICAgamJ1Zi0+bWVkaWFfY2xvY2tfc3luY2VkX2lkID0gMDsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChqYnVmLT5tZWRpYV9jbG9jayk7Ci0gIH0KLSAgamJ1Zi0+bWVkaWFfY2xvY2sgPSBjbG9jazsKLSAgamJ1Zi0+bWVkaWFfY2xvY2tfb2Zmc2V0ID0gY2xvY2tfb2Zmc2V0OwotCi0gIGlmIChqYnVmLT5waXBlbGluZV9jbG9jayAmJiBqYnVmLT5tZWRpYV9jbG9jayAmJgotICAgICAgamJ1Zi0+cGlwZWxpbmVfY2xvY2sgIT0gamJ1Zi0+bWVkaWFfY2xvY2spIHsKLSAgICBqYnVmLT5tZWRpYV9jbG9ja19zeW5jZWRfaWQgPQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0IChqYnVmLT5tZWRpYV9jbG9jaywgInN5bmNlZCIsCi0gICAgICAgIEdfQ0FMTEJBQ0sgKG1lZGlhX2Nsb2NrX3N5bmNlZF9jYiksIGpidWYpOwotICAgIGlmIChnc3RfY2xvY2tfaXNfc3luY2VkIChqYnVmLT5tZWRpYV9jbG9jaykpIHsKLSAgICAgIEdzdENsb2NrVGltZSBpbnRlcm5hbCwgZXh0ZXJuYWw7Ci0KLSAgICAgIGludGVybmFsID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChqYnVmLT5tZWRpYV9jbG9jayk7Ci0gICAgICBleHRlcm5hbCA9IGdzdF9jbG9ja19nZXRfdGltZSAoamJ1Zi0+cGlwZWxpbmVfY2xvY2spOwotCi0gICAgICBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uIChqYnVmLT5tZWRpYV9jbG9jaywgaW50ZXJuYWwsIGV4dGVybmFsLCAxLCAxKTsKLSAgICB9Ci0KLSAgICBnc3RfY2xvY2tfc2V0X21hc3RlciAoamJ1Zi0+bWVkaWFfY2xvY2ssIGpidWYtPnBpcGVsaW5lX2Nsb2NrKTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmpidWYtPmNsb2NrX2xvY2spOwotfQotCi0vKioKLSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9waXBlbGluZV9jbG9jazoKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKiBAY2xvY2s6IHBpcGVsaW5lICNHc3RDbG9jawotICoKLSAqIFNldHMgdGhlIHBpcGVsaW5lIGNsb2NrCi0gKgotICovCi12b2lkCi1ydHBfaml0dGVyX2J1ZmZlcl9zZXRfcGlwZWxpbmVfY2xvY2sgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYsIEdzdENsb2NrICogY2xvY2spCi17Ci0gIGdfbXV0ZXhfbG9jayAoJmpidWYtPmNsb2NrX2xvY2spOwotICBpZiAoamJ1Zi0+cGlwZWxpbmVfY2xvY2spCi0gICAgZ3N0X29iamVjdF91bnJlZiAoamJ1Zi0+cGlwZWxpbmVfY2xvY2spOwotICBqYnVmLT5waXBlbGluZV9jbG9jayA9IGNsb2NrID8gZ3N0X29iamVjdF9yZWYgKGNsb2NrKSA6IE5VTEw7Ci0KLSAgaWYgKGpidWYtPnBpcGVsaW5lX2Nsb2NrICYmIGpidWYtPm1lZGlhX2Nsb2NrICYmCi0gICAgICBqYnVmLT5waXBlbGluZV9jbG9jayAhPSBqYnVmLT5tZWRpYV9jbG9jaykgewotICAgIGlmIChnc3RfY2xvY2tfaXNfc3luY2VkIChqYnVmLT5tZWRpYV9jbG9jaykpIHsKLSAgICAgIEdzdENsb2NrVGltZSBpbnRlcm5hbCwgZXh0ZXJuYWw7Ci0KLSAgICAgIGludGVybmFsID0gZ3N0X2Nsb2NrX2dldF9pbnRlcm5hbF90aW1lIChqYnVmLT5tZWRpYV9jbG9jayk7Ci0gICAgICBleHRlcm5hbCA9IGdzdF9jbG9ja19nZXRfdGltZSAoamJ1Zi0+cGlwZWxpbmVfY2xvY2spOwotCi0gICAgICBnc3RfY2xvY2tfc2V0X2NhbGlicmF0aW9uIChqYnVmLT5tZWRpYV9jbG9jaywgaW50ZXJuYWwsIGV4dGVybmFsLCAxLCAxKTsKLSAgICB9Ci0KLSAgICBnc3RfY2xvY2tfc2V0X21hc3RlciAoamJ1Zi0+bWVkaWFfY2xvY2ssIGpidWYtPnBpcGVsaW5lX2Nsb2NrKTsKLSAgfQotICBnX211dGV4X3VubG9jayAoJmpidWYtPmNsb2NrX2xvY2spOwotfQotCi1nYm9vbGVhbgotcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3JmYzcyNzNfc3luYyAoUlRQSml0dGVyQnVmZmVyICogamJ1ZikKLXsKLSAgcmV0dXJuIGpidWYtPnJmYzcyNzNfc3luYzsKLX0KLQotdm9pZAotcnRwX2ppdHRlcl9idWZmZXJfc2V0X3JmYzcyNzNfc3luYyAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwKLSAgICBnYm9vbGVhbiByZmM3MjczX3N5bmMpCi17Ci0gIGpidWYtPnJmYzcyNzNfc3luYyA9IHJmYzcyNzNfc3luYzsKLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9yZXNldF9za2V3OgotICogQGpidWY6IGFuICNSVFBKaXR0ZXJCdWZmZXIKLSAqCi0gKiBSZXNldCB0aGUgc2tldyBjYWxjdWxhdGlvbnMgaW4gQGpidWYuCi0gKi8KLXZvaWQKLXJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYpCi17Ci0gIGpidWYtPmJhc2VfdGltZSA9IC0xOwotICBqYnVmLT5iYXNlX3J0cHRpbWUgPSAtMTsKLSAgamJ1Zi0+YmFzZV9leHRydHAgPSAtMTsKLSAgamJ1Zi0+bWVkaWFfY2xvY2tfYmFzZV90aW1lID0gLTE7Ci0gIGpidWYtPmV4dF9ydHB0aW1lID0gLTE7Ci0gIGpidWYtPmxhc3RfcnRwdGltZSA9IC0xOwotICBqYnVmLT53aW5kb3dfcG9zID0gMDsKLSAgamJ1Zi0+d2luZG93X2ZpbGxpbmcgPSBUUlVFOwotICBqYnVmLT53aW5kb3dfbWluID0gMDsKLSAgamJ1Zi0+c2tldyA9IDA7Ci0gIGpidWYtPnByZXZfc2VuZF9kaWZmID0gLTE7Ci0gIGpidWYtPnByZXZfb3V0X3RpbWUgPSAtMTsKLSAgamJ1Zi0+bmVlZF9yZXN5bmMgPSBUUlVFOwotCi0gIEdTVF9ERUJVRyAoInJlc2V0IHNrZXcgY29ycmVjdGlvbiIpOwotfQotCi0vKioKLSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX2Rpc2FibGVfYnVmZmVyaW5nOgotICogQGpidWY6IGFuICNSVFBKaXR0ZXJCdWZmZXIKLSAqIEBkaXNhYmxlZDogdGhlIG5ldyBzdGF0ZQotICoKLSAqIEVuYWJsZSBvciBkaXNhYmxlIGJ1ZmZlcmluZyBvbiBAamJ1Zi4KLSAqLwotdm9pZAotcnRwX2ppdHRlcl9idWZmZXJfZGlzYWJsZV9idWZmZXJpbmcgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYsIGdib29sZWFuIGRpc2FibGVkKQotewotICBqYnVmLT5idWZmZXJpbmdfZGlzYWJsZWQgPSBkaXNhYmxlZDsKLX0KLQotc3RhdGljIHZvaWQKLXJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc3luYyAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgR3N0Q2xvY2tUaW1lIHRpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIGdzdHJ0cHRpbWUsIGd1aW50NjQgZXh0X3J0cHRpbWUsIGdib29sZWFuIHJlc2V0X3NrZXcpCi17Ci0gIGpidWYtPmJhc2VfdGltZSA9IHRpbWU7Ci0gIGpidWYtPm1lZGlhX2Nsb2NrX2Jhc2VfdGltZSA9IC0xOwotICBqYnVmLT5iYXNlX3J0cHRpbWUgPSBnc3RydHB0aW1lOwotICBqYnVmLT5iYXNlX2V4dHJ0cCA9IGV4dF9ydHB0aW1lOwotICBqYnVmLT5wcmV2X291dF90aW1lID0gLTE7Ci0gIGpidWYtPnByZXZfc2VuZF9kaWZmID0gLTE7Ci0gIGlmIChyZXNldF9za2V3KSB7Ci0gICAgamJ1Zi0+d2luZG93X2ZpbGxpbmcgPSBUUlVFOwotICAgIGpidWYtPndpbmRvd19wb3MgPSAwOwotICAgIGpidWYtPndpbmRvd19taW4gPSAwOwotICAgIGpidWYtPndpbmRvd19zaXplID0gMDsKLSAgICBqYnVmLT5za2V3ID0gMDsKLSAgfQotICBqYnVmLT5uZWVkX3Jlc3luYyA9IEZBTFNFOwotfQotCi1zdGF0aWMgZ3VpbnQ2NAotZ2V0X2J1ZmZlcl9sZXZlbCAoUlRQSml0dGVyQnVmZmVyICogamJ1ZikKLXsKLSAgUlRQSml0dGVyQnVmZmVySXRlbSAqaGlnaF9idWYgPSBOVUxMLCAqbG93X2J1ZiA9IE5VTEw7Ci0gIGd1aW50NjQgbGV2ZWw7Ci0KLSAgLyogZmlyc3QgYnVmZmVyIHdpdGggdGltZXN0YW1wICovCi0gIGhpZ2hfYnVmID0gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgZ19xdWV1ZV9wZWVrX3RhaWxfbGluayAoamJ1Zi0+cGFja2V0cyk7Ci0gIHdoaWxlIChoaWdoX2J1ZikgewotICAgIGlmIChoaWdoX2J1Zi0+ZHRzICE9IC0xIHx8IGhpZ2hfYnVmLT5wdHMgIT0gLTEpCi0gICAgICBicmVhazsKLQotICAgIGhpZ2hfYnVmID0gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgZ19saXN0X3ByZXZpb3VzIChoaWdoX2J1Zik7Ci0gIH0KLQotICBsb3dfYnVmID0gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgZ19xdWV1ZV9wZWVrX2hlYWRfbGluayAoamJ1Zi0+cGFja2V0cyk7Ci0gIHdoaWxlIChsb3dfYnVmKSB7Ci0gICAgaWYgKGxvd19idWYtPmR0cyAhPSAtMSB8fCBsb3dfYnVmLT5wdHMgIT0gLTEpCi0gICAgICBicmVhazsKLQotICAgIGxvd19idWYgPSAoUlRQSml0dGVyQnVmZmVySXRlbSAqKSBnX2xpc3RfbmV4dCAobG93X2J1Zik7Ci0gIH0KLQotICBpZiAoIWhpZ2hfYnVmIHx8ICFsb3dfYnVmIHx8IGhpZ2hfYnVmID09IGxvd19idWYpIHsKLSAgICBsZXZlbCA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgZ3VpbnQ2NCBoaWdoX3RzLCBsb3dfdHM7Ci0KLSAgICBoaWdoX3RzID0gaGlnaF9idWYtPmR0cyAhPSAtMSA/IGhpZ2hfYnVmLT5kdHMgOiBoaWdoX2J1Zi0+cHRzOwotICAgIGxvd190cyA9IGxvd19idWYtPmR0cyAhPSAtMSA/IGxvd19idWYtPmR0cyA6IGxvd19idWYtPnB0czsKLQotICAgIGlmIChoaWdoX3RzID4gbG93X3RzKQotICAgICAgbGV2ZWwgPSBoaWdoX3RzIC0gbG93X3RzOwotICAgIGVsc2UKLSAgICAgIGxldmVsID0gMDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChqYnVmLAotICAgICAgICAibG93ICUiIEdTVF9USU1FX0ZPUk1BVCAiIGhpZ2ggJSIgR1NUX1RJTUVfRk9STUFUICIgbGV2ZWwgJSIKLSAgICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobG93X3RzKSwgR1NUX1RJTUVfQVJHUyAoaGlnaF90cyksCi0gICAgICAgIGxldmVsKTsKLSAgfQotICByZXR1cm4gbGV2ZWw7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfYnVmZmVyX2xldmVsIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmLCBnaW50ICogcGVyY2VudCkKLXsKLSAgZ2Jvb2xlYW4gcG9zdCA9IEZBTFNFOwotICBndWludDY0IGxldmVsOwotCi0gIGxldmVsID0gZ2V0X2J1ZmZlcl9sZXZlbCAoamJ1Zik7Ci0gIEdTVF9ERUJVRyAoImJ1ZmZlciBsZXZlbCAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGxldmVsKSk7Ci0KLSAgaWYgKGpidWYtPmJ1ZmZlcmluZ19kaXNhYmxlZCkgewotICAgIEdTVF9ERUJVRyAoImJ1ZmZlcmluZyBpcyBkaXNhYmxlZCIpOwotICAgIGxldmVsID0gamJ1Zi0+aGlnaF9sZXZlbDsKLSAgfQotCi0gIGlmIChqYnVmLT5idWZmZXJpbmcpIHsKLSAgICBwb3N0ID0gVFJVRTsKLSAgICBpZiAobGV2ZWwgPj0gamJ1Zi0+aGlnaF9sZXZlbCkgewotICAgICAgR1NUX0RFQlVHICgiYnVmZmVyaW5nIGZpbmlzaGVkIik7Ci0gICAgICBqYnVmLT5idWZmZXJpbmcgPSBGQUxTRTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGxldmVsIDwgamJ1Zi0+bG93X2xldmVsKSB7Ci0gICAgICBHU1RfREVCVUcgKCJidWZmZXJpbmcgc3RhcnRlZCIpOwotICAgICAgamJ1Zi0+YnVmZmVyaW5nID0gVFJVRTsKLSAgICAgIHBvc3QgPSBUUlVFOwotICAgIH0KLSAgfQotICBpZiAocG9zdCkgewotICAgIGdpbnQgcGVyYzsKLQotICAgIGlmIChqYnVmLT5idWZmZXJpbmcgJiYgKGpidWYtPmhpZ2hfbGV2ZWwgIT0gMCkpIHsKLSAgICAgIHBlcmMgPSAobGV2ZWwgKiAxMDAgLyBqYnVmLT5oaWdoX2xldmVsKTsKLSAgICAgIHBlcmMgPSBNSU4gKHBlcmMsIDEwMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBlcmMgPSAxMDA7Ci0gICAgfQotCi0gICAgaWYgKHBlcmNlbnQpCi0gICAgICAqcGVyY2VudCA9IHBlcmM7Ci0KLSAgICBHU1RfREVCVUcgKCJidWZmZXJpbmcgJWQiLCBwZXJjKTsKLSAgfQotfQotCi0vKiBGb3IgdGhlIGNsb2NrIHNrZXcgd2UgdXNlIGEgd2luZG93ZWQgbG93IHBvaW50IGF2ZXJhZ2luZyBhbGdvcml0aG0gYXMgY2FuIGJlCi0gKiBmb3VuZCBpbiBGb2JlciwgT3JsYXJleSBhbmQgTGV0eiwgMjAwNSwgIlJlYWwgVGltZSBDbG9jayBTa2V3IEVzdGltYXRpb24KLSAqIG92ZXIgTmV0d29yayBEZWxheXMiOgotICogaHR0cDovL3d3dy5ncmFtZS5mci9SZXNzb3VyY2VzL3B1Yi9UUi0wNTA2MDEucGRmCi0gKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjEwMi4xNTQ2Ci0gKgotICogVGhlIGlkZWEgaXMgdGhhdCB0aGUgaml0dGVyIGlzIGNvbXBvc2VkIG9mOgotICoKLSAqICBKID0gTiArIG4KLSAqCi0gKiAgIE4gICA6IGEgY29uc3RhbnQgbmV0d29yayBkZWxheS4KLSAqICAgbiAgIDogcmFuZG9tIGFkZGVkIG5vaXNlLiBUaGUgbm9pc2UgaXMgY29uY2VudHJhdGVkIGFyb3VuZCAwCi0gKgotICogSW4gdGhlIHJlY2VpdmVyIHdlIGNhbiB0cmFjayB0aGUgZWxhcHNlZCB0aW1lIGF0IHRoZSBzZW5kZXIgd2l0aDoKLSAqCi0gKiAgc2VuZF9kaWZmKGkpID0gKFRzaSAtIFRzMCk7Ci0gKgotICogICBUc2kgOiBUaGUgdGltZSBhdCB0aGUgc2VuZGVyIGF0IHBhY2tldCBpCi0gKiAgIFRzMCA6IFRoZSB0aW1lIGF0IHRoZSBzZW5kZXIgYXQgdGhlIGZpcnN0IHBhY2tldAotICoKLSAqIFRoaXMgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgUlRQIHRpbWVzdGFtcCBpbiB0aGUgZmlyc3QgcmVjZWl2ZWQgcGFja2V0Ci0gKiBhbmQgdGhlIGN1cnJlbnQgcGFja2V0LgotICoKLSAqIEF0IHRoZSByZWNlaXZlciB3ZSBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgaml0dGVyIGludHJvZHVjZWQgYnkgdGhlIG5ldHdvcmsuCi0gKgotICogIHJlY3ZfZGlmZihpKSA9IChUcmkgLSBUcjApCi0gKgotICogICBUcmkgOiBUaGUgdGltZSBhdCB0aGUgcmVjZWl2ZXIgYXQgcGFja2V0IGkKLSAqICAgVHIwIDogVGhlIHRpbWUgYXQgdGhlIHJlY2VpdmVyIGF0IHRoZSBmaXJzdCBwYWNrZXQKLSAqCi0gKiBCb3RoIG9mIHRoZXNlIHZhbHVlcyBjb250YWluIGEgaml0dGVyIEppLCBhIGppdHRlciBmb3IgcGFja2V0IGksIHNvIHdlIGNhbgotICogd3JpdGU6Ci0gKgotICogIHJlY3ZfZGlmZihpKSA9IChDcmkgKyBEICsgbmkpIC0gKENyMCArIEQgKyBuMCkpCi0gKgotICogICAgQ3JpICAgIDogVGhlIHRpbWUgb2YgdGhlIGNsb2NrIGF0IHRoZSByZWNlaXZlciBmb3IgcGFja2V0IGkKLSAqICAgIEQgKyBuaSA6IFRoZSBqaXR0ZXIgd2hlbiByZWNlaXZpbmcgcGFja2V0IGkKLSAqCi0gKiBXZSBzZWUgdGhhdCB0aGUgbmV0d29yayBkZWxheSBpcyBpcnJlbGV2YW50IGhlcmUgYXMgd2UgY2FuIGVsbGltaW5hdGUgRDoKLSAqCi0gKiAgcmVjdl9kaWZmKGkpID0gKENyaSArIG5pKSAtIChDcjAgKyBuMCkpCi0gKgotICogVGhlIGRyaWZ0IGlzIG5vdyBleHByZXNzZWQgYXM6Ci0gKgotICogIERyaWZ0KGkpID0gcmVjdl9kaWZmKGkpIC0gc2VuZF9kaWZmKGkpOwotICoKLSAqIFdlIG5vdyBrZWVwIHRoZSBXIGxhdGVzdCB2YWx1ZXMgb2YgRHJpZnQgYW5kIGZpbmQgdGhlIG1pbmltdW0gKHRoaXMgaXMgdGhlCi0gKiBvbmUgd2l0aCB0aGUgbG93ZXN0IG5ldHdvcmsgaml0dGVyIGFuZCB0aHVzIHRoZSBvbmUgd2hpY2ggaXMgbGVhc3QgYWZmZWN0ZWQKLSAqIGJ5IGl0KS4gV2UgYXZlcmFnZSB0aGlzIGxvd2VzdCB2YWx1ZSB0byBzbW9vdGggb3V0IHRoZSByZXN1bHRpbmcgbmV0d29yayBza2V3LgotICoKLSAqIEJvdGggdGhlIHdpbmRvdyBhbmQgdGhlIHdlaWdodGluZyB1c2VkIGZvciBhdmVyYWdpbmcgaW5mbHVlbmNlIHRoZSBhY2N1cmFjeQotICogb2YgdGhlIGRyaWZ0IGVzdGltYXRpb24uIEZpbmRpbmcgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyB0dXJucyBvdXQgdG8gYmUgYQotICogY29tcHJvbWlzZSBiZXR3ZWVuIGFjY3VyYWN5IGFuZCBpbmVydGlhLgotICoKLSAqIFdlIHVzZSBhIDIgc2Vjb25kIHdpbmRvdyBvciB1cCB0byA1MTIgZGF0YSBwb2ludHMsIHdoaWNoIGlzIHN0YXRpc3RpY2FsbHkgYmlnCi0gKiBlbm91Z2ggdG8gY2F0Y2ggc3Bpa2VzIChGSVhNRSwgZGV0ZWN0IHNwaWtlcykuCi0gKiBXZSBhbHNvIHVzZSBhIHJhdGhlciBsYXJnZSB3ZWlnaHRpbmcgZmFjdG9yICgxMjUpIHRvIHNtb290aGx5IGFkYXB0LiBEdXJpbmcKLSAqIHN0YXJ0dXAsIHdoZW4gZmlsbGluZyB0aGUgd2luZG93LCB3ZSB1c2UgYSBwYXJhYm9saWMgd2VpZ2h0aW5nIGZhY3RvciwgdGhlCi0gKiBtb3JlIHRoZSB3aW5kb3cgaXMgZmlsbGVkLCB0aGUgZmFzdGVyIHdlIG1vdmUgdG8gdGhlIGRldGVjdGVkIHBvc3NpYmxlIHNrZXcuCi0gKgotICogUmV0dXJuczogQHRpbWUgYWRqdXN0ZWQgd2l0aCB0aGUgY2xvY2sgc2tldy4KLSAqLwotc3RhdGljIEdzdENsb2NrVGltZQotY2FsY3VsYXRlX3NrZXcgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYsIGd1aW50NjQgZXh0X3J0cHRpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIGdzdHJ0cHRpbWUsIEdzdENsb2NrVGltZSB0aW1lKQotewotICBndWludDY0IHNlbmRfZGlmZiwgcmVjdl9kaWZmOwotICBnaW50NjQgZGVsdGE7Ci0gIGdpbnQ2NCBvbGQ7Ci0gIGdpbnQgcG9zLCBpOwotICBHc3RDbG9ja1RpbWUgb3V0X3RpbWU7Ci0gIGd1aW50NjQgc2xvcGU7Ci0KLSAgLyogZWxhcHNlZCB0aW1lIGF0IHNlbmRlciAqLwotICBzZW5kX2RpZmYgPSBnc3RydHB0aW1lIC0gamJ1Zi0+YmFzZV9ydHB0aW1lOwotCi0gIC8qIHdlIGRvbid0IGhhdmUgYW4gYXJyaXZhbCB0aW1lc3RhbXAgc28gd2UgY2FuJ3QgZG8gc2tldyBkZXRlY3Rpb24uIHdlCi0gICAqIHNob3VsZCBzdGlsbCBhcHBseSBhIHRpbWVzdGFtcCBiYXNlZCBvbiBSVFAgdGltZXN0YW1wIGFuZCBiYXNlX3RpbWUgKi8KLSAgaWYgKHRpbWUgPT0gLTEgfHwgamJ1Zi0+YmFzZV90aW1lID09IC0xKQotICAgIGdvdG8gbm9fc2tldzsKLQotICAvKiBlbGFwc2VkIHRpbWUgYXQgcmVjZWl2ZXIsIGluY2x1ZGVzIHRoZSBqaXR0ZXIgKi8KLSAgcmVjdl9kaWZmID0gdGltZSAtIGpidWYtPmJhc2VfdGltZTsKLQotICAvKiBtZWFzdXJlIHRoZSBkaWZmICovCi0gIGRlbHRhID0gKChnaW50NjQpIHJlY3ZfZGlmZikgLSAoKGdpbnQ2NCkgc2VuZF9kaWZmKTsKLQotICAvKiBtZWFzdXJlIHRoZSBzbG9wZSwgdGhpcyBnaXZlcyBhIHJvdWdodCBlc3RpbWF0ZSBiZXR3ZWVuIHRoZSBzZW5kZXIgc3BlZWQKLSAgICogYW5kIHRoZSByZWNlaXZlciBzcGVlZC4gVGhpcyBzaG91bGQgYmUgYXBwcm94aW1hdGVseSA4LCBoaWdoZXIgdmFsdWVzCi0gICAqIGluZGljYXRlIGEgYnVyc3QgKGVzcGVjaWFsbHkgd2hlbiB0aGUgY29ubmVjdGlvbiBzdGFydHMpICovCi0gIGlmIChyZWN2X2RpZmYgPiAwKQotICAgIHNsb3BlID0gKHNlbmRfZGlmZiAqIDgpIC8gcmVjdl9kaWZmOwotICBlbHNlCi0gICAgc2xvcGUgPSA4OwotCi0gIEdTVF9ERUJVRyAoInRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIGJhc2UgJSIgR1NUX1RJTUVfRk9STUFUICIsIHJlY3ZfZGlmZiAlIgotICAgICAgR1NUX1RJTUVfRk9STUFUICIsIHNsb3BlICUiIEdfR1VJTlQ2NF9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHRpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoamJ1Zi0+YmFzZV90aW1lKSwgR1NUX1RJTUVfQVJHUyAocmVjdl9kaWZmKSwgc2xvcGUpOwotCi0gIC8qIGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNlbmRlciB0aW1lbGluZSBhbmQgdGhlIHJlY2VpdmVyIHRpbWVsaW5lCi0gICAqIGNoYW5nZWQgdG9vIHF1aWNrbHkgd2UgaGF2ZSB0byByZXN5bmMgYmVjYXVzZSB0aGUgc2VydmVyIGxpa2VseSByZXN0YXJ0ZWQKLSAgICogaXRzIHRpbWVzdGFtcHMuICovCi0gIGlmIChBQlMgKGRlbHRhIC0gamJ1Zi0+c2tldykgPiBHU1RfU0VDT05EKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJkZWx0YSAtIHNrZXc6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIHRvbyBiaWcsIHJlc2V0IHNrZXciLAotICAgICAgICBHU1RfVElNRV9BUkdTIChBQlMgKGRlbHRhIC0gamJ1Zi0+c2tldykpKTsKLSAgICBydHBfaml0dGVyX2J1ZmZlcl9yZXN5bmMgKGpidWYsIHRpbWUsIGdzdHJ0cHRpbWUsIGV4dF9ydHB0aW1lLCBUUlVFKTsKLSAgICBzZW5kX2RpZmYgPSAwOwotICAgIGRlbHRhID0gMDsKLSAgfQotCi0gIHBvcyA9IGpidWYtPndpbmRvd19wb3M7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGpidWYtPndpbmRvd19maWxsaW5nKSkgewotICAgIC8qIHdlIGFyZSBmaWxsaW5nIHRoZSB3aW5kb3cgKi8KLSAgICBHU1RfREVCVUcgKCJmaWxsaW5nICVkLCBkZWx0YSAlIiBHX0dJTlQ2NF9GT1JNQVQsIHBvcywgZGVsdGEpOwotICAgIGpidWYtPndpbmRvd1twb3MrK10gPSBkZWx0YTsKLSAgICAvKiBjYWxjIHRoZSBtaW4gZGVsdGEgd2Ugb2JzZXJ2ZWQgKi8KLSAgICBpZiAoR19VTkxJS0VMWSAocG9zID09IDEgfHwgZGVsdGEgPCBqYnVmLT53aW5kb3dfbWluKSkKLSAgICAgIGpidWYtPndpbmRvd19taW4gPSBkZWx0YTsKLQotICAgIGlmIChHX1VOTElLRUxZIChzZW5kX2RpZmYgPj0gTUFYX1RJTUUgfHwgcG9zID49IE1BWF9XSU5ET1cpKSB7Ci0gICAgICBqYnVmLT53aW5kb3dfc2l6ZSA9IHBvczsKLQotICAgICAgLyogd2luZG93IGZpbGxlZCAqLwotICAgICAgR1NUX0RFQlVHICgibWluICUiIEdfR0lOVDY0X0ZPUk1BVCwgamJ1Zi0+d2luZG93X21pbik7Ci0KLSAgICAgIC8qIHRoZSBza2V3IGlzIG5vdyB0aGUgbWluICovCi0gICAgICBqYnVmLT5za2V3ID0gamJ1Zi0+d2luZG93X21pbjsKLSAgICAgIGpidWYtPndpbmRvd19maWxsaW5nID0gRkFMU0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdpbnQgcGVyY190aW1lLCBwZXJjX3dpbmRvdywgcGVyYzsKLQotICAgICAgLyogZmlndXJlIG91dCBob3cgbXVjaCB3ZSBmaWxsZWQgdGhlIHdpbmRvdywgdGhpcyBkZXBlbmRzIG9uIHRoZSBhbW91bnQgb2YKLSAgICAgICAqIHRpbWUgd2UgaGF2ZSBvciB0aGUgbWF4IG51bWJlciBvZiBwb2ludHMgd2Uga2VlcC4gKi8KLSAgICAgIHBlcmNfdGltZSA9IHNlbmRfZGlmZiAqIDEwMCAvIE1BWF9USU1FOwotICAgICAgcGVyY193aW5kb3cgPSBwb3MgKiAxMDAgLyBNQVhfV0lORE9XOwotICAgICAgcGVyYyA9IE1BWCAocGVyY190aW1lLCBwZXJjX3dpbmRvdyk7Ci0KLSAgICAgIC8qIG1ha2UgYSBwYXJhYm9saWMgZnVuY3Rpb24sIHRoZSBjbG9zZXIgd2UgZ2V0IHRvIHRoZSBNQVgsIHRoZSBtb3JlIHZhbHVlCi0gICAgICAgKiB3ZSBnaXZlIHRvIHRoZSBzY2FsaW5nIGZhY3RvciBvZiB0aGUgbmV3IHZhbHVlICovCi0gICAgICBwZXJjID0gcGVyYyAqIHBlcmM7Ci0KLSAgICAgIC8qIHF1aWNrbHkgZ28gdG8gdGhlIG1pbiB2YWx1ZSB3aGVuIHdlIGFyZSBmaWxsaW5nIHVwLCBzbG93bHkgd2hlbiB3ZSBhcmUKLSAgICAgICAqIGp1c3Qgc3RhcnRpbmcgYmVjYXVzZSB3ZSdyZSBub3Qgc3VyZSBpdCdzIGEgZ29vZCB2YWx1ZSB5ZXQuICovCi0gICAgICBqYnVmLT5za2V3ID0KLSAgICAgICAgICAocGVyYyAqIGpidWYtPndpbmRvd19taW4gKyAoKDEwMDAwIC0gcGVyYykgKiBqYnVmLT5za2V3KSkgLyAxMDAwMDsKLSAgICAgIGpidWYtPndpbmRvd19zaXplID0gcG9zICsgMTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogcGljayBvbGQgdmFsdWUgYW5kIHN0b3JlIG5ldyB2YWx1ZS4gV2Uga2VlcCB0aGUgcHJldmlvdXMgdmFsdWUgaW4gb3JkZXIKLSAgICAgKiB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBtaW4gb2YgdGhlIHdpbmRvdyBjaGFuZ2VkICovCi0gICAgb2xkID0gamJ1Zi0+d2luZG93W3Bvc107Ci0gICAgamJ1Zi0+d2luZG93W3BvcysrXSA9IGRlbHRhOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKGRlbHRhIDw9IGpidWYtPndpbmRvd19taW4pKSB7Ci0gICAgICAvKiBpZiB0aGUgbmV3IHZhbHVlIHdlIGluc2VydGVkIGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgbWluLAotICAgICAgICogaXQgYmVjb21lcyB0aGUgbmV3IG1pbiAqLwotICAgICAgamJ1Zi0+d2luZG93X21pbiA9IGRlbHRhOwotICAgIH0gZWxzZSBpZiAoR19VTkxJS0VMWSAob2xkID09IGpidWYtPndpbmRvd19taW4pKSB7Ci0gICAgICBnaW50NjQgbWluID0gR19NQVhJTlQ2NDsKLQotICAgICAgLyogaWYgd2UgcmVtb3ZlZCB0aGUgb2xkIG1pbiwgd2UgaGF2ZSB0byBmaW5kIGEgbmV3IG1pbiAqLwotICAgICAgZm9yIChpID0gMDsgaSA8IGpidWYtPndpbmRvd19zaXplOyBpKyspIHsKLSAgICAgICAgLyogd2UgZm91bmQgYW5vdGhlciB2YWx1ZSBlcXVhbCB0byB0aGUgb2xkIG1pbiwgd2UgY2FuIHN0b3Agc2VhcmNoaW5nIG5vdyAqLwotICAgICAgICBpZiAoamJ1Zi0+d2luZG93W2ldID09IG9sZCkgewotICAgICAgICAgIG1pbiA9IG9sZDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoamJ1Zi0+d2luZG93W2ldIDwgbWluKQotICAgICAgICAgIG1pbiA9IGpidWYtPndpbmRvd1tpXTsKLSAgICAgIH0KLSAgICAgIGpidWYtPndpbmRvd19taW4gPSBtaW47Ci0gICAgfQotICAgIC8qIGF2ZXJhZ2UgdGhlIG1pbiB2YWx1ZXMgKi8KLSAgICBqYnVmLT5za2V3ID0gKGpidWYtPndpbmRvd19taW4gKyAoMTI0ICogamJ1Zi0+c2tldykpIC8gMTI1OwotICAgIEdTVF9ERUJVRyAoImRlbHRhICUiIEdfR0lOVDY0X0ZPUk1BVCAiLCBuZXcgbWluOiAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgIGRlbHRhLCBqYnVmLT53aW5kb3dfbWluKTsKLSAgfQotICAvKiB3cmFwIGFyb3VuZCBpbiB0aGUgd2luZG93ICovCi0gIGlmIChHX1VOTElLRUxZIChwb3MgPj0gamJ1Zi0+d2luZG93X3NpemUpKQotICAgIHBvcyA9IDA7Ci0gIGpidWYtPndpbmRvd19wb3MgPSBwb3M7Ci0KLW5vX3NrZXc6Ci0gIC8qIHRoZSBvdXRwdXQgdGltZSBpcyBkZWZpbmVkIGFzIHRoZSBiYXNlIHRpbWVzdGFtcCBwbHVzIHRoZSBSVFAgdGltZQotICAgKiBhZGp1c3RlZCBmb3IgdGhlIGNsb2NrIHNrZXcgLiovCi0gIGlmIChqYnVmLT5iYXNlX3RpbWUgIT0gLTEpIHsKLSAgICBvdXRfdGltZSA9IGpidWYtPmJhc2VfdGltZSArIHNlbmRfZGlmZjsKLSAgICAvKiBza2V3IGNhbiBiZSBuZWdhdGl2ZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtYWtlIGludmFsaWQgdGltZXN0YW1wcyAqLwotICAgIGlmIChqYnVmLT5za2V3IDwgMCAmJiBvdXRfdGltZSA8IC1qYnVmLT5za2V3KSB7Ci0gICAgICBvdXRfdGltZSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG91dF90aW1lICs9IGpidWYtPnNrZXc7Ci0gICAgfQotICB9IGVsc2UKLSAgICBvdXRfdGltZSA9IC0xOwotCi0gIEdTVF9ERUJVRyAoInNrZXcgJSIgR19HSU5UNjRfRk9STUFUICIsIG91dCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBqYnVmLT5za2V3LCBHU1RfVElNRV9BUkdTIChvdXRfdGltZSkpOwotCi0gIHJldHVybiBvdXRfdGltZTsKLX0KLQotc3RhdGljIHZvaWQKLXF1ZXVlX2RvX2luc2VydCAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgR0xpc3QgKiBsaXN0LCBHTGlzdCAqIGl0ZW0pCi17Ci0gIEdRdWV1ZSAqcXVldWUgPSBqYnVmLT5wYWNrZXRzOwotCi0gIC8qIEl0J3MgbW9yZSBsaWtlbHkgdGhhdCB0aGUgcGFja2V0IHdhcyBpbnNlcnRlZCBhdCB0aGUgdGFpbCBvZiB0aGUgcXVldWUgKi8KLSAgaWYgKEdfTElLRUxZIChsaXN0KSkgewotICAgIGl0ZW0tPnByZXYgPSBsaXN0OwotICAgIGl0ZW0tPm5leHQgPSBsaXN0LT5uZXh0OwotICAgIGxpc3QtPm5leHQgPSBpdGVtOwotICB9IGVsc2UgewotICAgIGl0ZW0tPnByZXYgPSBOVUxMOwotICAgIGl0ZW0tPm5leHQgPSBxdWV1ZS0+aGVhZDsKLSAgICBxdWV1ZS0+aGVhZCA9IGl0ZW07Ci0gIH0KLSAgaWYgKGl0ZW0tPm5leHQpCi0gICAgaXRlbS0+bmV4dC0+cHJldiA9IGl0ZW07Ci0gIGVsc2UKLSAgICBxdWV1ZS0+dGFpbCA9IGl0ZW07Ci0gIHF1ZXVlLT5sZW5ndGgrKzsKLX0KLQotR3N0Q2xvY2tUaW1lCi1ydHBfaml0dGVyX2J1ZmZlcl9jYWxjdWxhdGVfcHRzIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmLCBHc3RDbG9ja1RpbWUgZHRzLAotICAgICAgZ3VpbnQzMiBydHB0aW1lLCBHc3RDbG9ja1RpbWUgYmFzZV90aW1lKQotewotICBndWludDY0IGV4dF9ydHB0aW1lOwotICBHc3RDbG9ja1RpbWUgZ3N0cnRwdGltZSwgcHRzOwotICBHc3RDbG9jayAqbWVkaWFfY2xvY2ssICpwaXBlbGluZV9jbG9jazsKLSAgZ3VpbnQ2NCBtZWRpYV9jbG9ja19vZmZzZXQ7Ci0gIGdib29sZWFuIHJmYzcyNzNfbW9kZTsKLQotICAvKiBydHAgdGltZSBqdW1wcyBhcmUgY2hlY2tlZCBmb3IgZHVyaW5nIHNrZXcgY2FsY3VsYXRpb24sIGJ1dCBieXBhc3NlZAotICAgKiBpbiBvdGhlciBtb2RlLCBzbyBtaW5kIHRob3NlIGhlcmUgYW5kIHJlc2V0IGpiIGlmIG5lZWRlZC4KLSAgICogT25seSByZXNldCBpZiB2YWxpZCBpbnB1dCB0aW1lLCB3aGljaCBpcyBsaWtlbHkgZm9yIFVEUCBpbnB1dAotICAgKiB3aGVyZSB3ZSBleHBlY3QgdGhpcyBtaWdodCBoYXBwZW4gZHVlIHRvIGFzeW5jIHRocmVhZCBlZmZlY3RzCi0gICAqIChpbiBzZWVrIGFuZCBzdGF0ZSBjaGFuZ2UgY3ljbGVzKSwgYnV0IG5vdCBzbyBtdWNoIGZvciBUQ1AgaW5wdXQgKi8KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChkdHMpICYmCi0gICAgICBqYnVmLT5tb2RlICE9IFJUUF9KSVRURVJfQlVGRkVSX01PREVfU0xBVkUgJiYKLSAgICAgIGpidWYtPmJhc2VfdGltZSAhPSAtMSAmJiBqYnVmLT5sYXN0X3J0cHRpbWUgIT0gLTEpIHsKLSAgICBHc3RDbG9ja1RpbWUgZXh0X3J0cHRpbWUgPSBqYnVmLT5leHRfcnRwdGltZTsKLQotICAgIGV4dF9ydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZXh0X3RpbWVzdGFtcCAoJmV4dF9ydHB0aW1lLCBydHB0aW1lKTsKLSAgICBpZiAoZXh0X3J0cHRpbWUgPiBqYnVmLT5sYXN0X3J0cHRpbWUgKyAzICogamJ1Zi0+Y2xvY2tfcmF0ZSB8fAotICAgICAgICBleHRfcnRwdGltZSArIDMgKiBqYnVmLT5jbG9ja19yYXRlIDwgamJ1Zi0+bGFzdF9ydHB0aW1lKSB7Ci0gICAgICAvKiByZXNldCBldmVuIGlmIHdlIGRvbid0IGhhdmUgdmFsaWQgaW5jb21pbmcgdGltZTsKLSAgICAgICAqIHN0aWxsIGJldHRlciB0aGFuIHByb2R1Y2luZyBwb3NzaWJseSB2ZXJ5IGJvZ3VzIG91dHB1dCB0aW1lc3RhbXAgKi8KLSAgICAgIEdTVF9XQVJOSU5HICgicnRwIGRlbHRhIHRvbyBiaWcsIHJlc2V0IHNrZXciKTsKLSAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc2V0X3NrZXcgKGpidWYpOwotICAgIH0KLSAgfQotCi0gIC8qIFJldHVybiB0aGUgbGFzdCB0aW1lIGlmIHdlIGdvdCB0aGUgc2FtZSBSVFAgdGltZXN0YW1wIGFnYWluICovCi0gIGV4dF9ydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZXh0X3RpbWVzdGFtcCAoJmpidWYtPmV4dF9ydHB0aW1lLCBydHB0aW1lKTsKLSAgaWYgKGpidWYtPmxhc3RfcnRwdGltZSAhPSAtMSAmJiBleHRfcnRwdGltZSA9PSBqYnVmLT5sYXN0X3J0cHRpbWUpIHsKLSAgICByZXR1cm4gamJ1Zi0+cHJldl9vdXRfdGltZTsKLSAgfQotCi0gIC8qIGtlZXAgdHJhY2sgb2YgdGhlIGxhc3QgZXh0ZW5kZWQgcnRwdGltZSAqLwotICBqYnVmLT5sYXN0X3J0cHRpbWUgPSBleHRfcnRwdGltZTsKLQotICBnX211dGV4X2xvY2sgKCZqYnVmLT5jbG9ja19sb2NrKTsKLSAgbWVkaWFfY2xvY2sgPSBqYnVmLT5tZWRpYV9jbG9jayA/IGdzdF9vYmplY3RfcmVmIChqYnVmLT5tZWRpYV9jbG9jaykgOiBOVUxMOwotICBwaXBlbGluZV9jbG9jayA9Ci0gICAgICBqYnVmLT5waXBlbGluZV9jbG9jayA/IGdzdF9vYmplY3RfcmVmIChqYnVmLT5waXBlbGluZV9jbG9jaykgOiBOVUxMOwotICBtZWRpYV9jbG9ja19vZmZzZXQgPSBqYnVmLT5tZWRpYV9jbG9ja19vZmZzZXQ7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmamJ1Zi0+Y2xvY2tfbG9jayk7Ci0KLSAgZ3N0cnRwdGltZSA9Ci0gICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChleHRfcnRwdGltZSwgR1NUX1NFQ09ORCwgamJ1Zi0+Y2xvY2tfcmF0ZSk7Ci0KLSAgaWYgKEdfTElLRUxZIChqYnVmLT5iYXNlX3J0cHRpbWUgIT0gLTEpKSB7Ci0gICAgLyogY2hlY2sgZWxhcHNlZCB0aW1lIGluIFJUUCB1bml0cyAqLwotICAgIGlmIChnc3RydHB0aW1lIDwgamJ1Zi0+YmFzZV9ydHB0aW1lKSB7Ci0gICAgICAvKiBlbGFwc2VkIHRpbWUgYXQgc2VuZGVyLCB0aW1lc3RhbXBzIGNhbiBnbyBiYWNrd2FyZHMgYW5kIHRodXMgYmUKLSAgICAgICAqIHNtYWxsZXIgdGhhbiBvdXIgYmFzZSB0aW1lLCBzY2hlZHVsZSB0byB0YWtlIGEgbmV3IGJhc2UgdGltZSBpbgotICAgICAgICogdGhhdCBjYXNlLiAqLwotICAgICAgR1NUX1dBUk5JTkcgKCJiYWNrd2FyZCB0aW1lc3RhbXBzIGF0IHNlcnZlciwgc2NoZWR1bGUgcmVzeW5jIik7Ci0gICAgICBqYnVmLT5uZWVkX3Jlc3luYyA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgc3dpdGNoIChqYnVmLT5tb2RlKSB7Ci0gICAgY2FzZSBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX05PTkU6Ci0gICAgY2FzZSBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX0JVRkZFUjoKLSAgICAgIC8qIHNlbmQgMCBhcyB0aGUgZmlyc3QgdGltZXN0YW1wIGFuZCAtMSBmb3IgdGhlIG90aGVyIG9uZXMuIFRoaXMgd2lsbAotICAgICAgICogaW50ZXJwb2xhdGUgdGhlbSBmcm9tIHRoZSBSVFAgdGltZXN0YW1wcyB3aXRoIGEgMCBvcmlnaW4uIEluIGJ1ZmZlcmluZwotICAgICAgICogbW9kZSB3ZSB3aWxsIGFkanVzdCB0aGUgb3V0Z29pbmcgdGltZXN0YW1wcyBhY2NvcmRpbmcgdG8gdGhlIGFtb3VudCBvZgotICAgICAgICogdGltZSB3ZSBzcGVudCBidWZmZXJpbmcuICovCi0gICAgICBpZiAoamJ1Zi0+YmFzZV90aW1lID09IC0xKQotICAgICAgICBkdHMgPSAwOwotICAgICAgZWxzZQotICAgICAgICBkdHMgPSAtMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9TWU5DRUQ6Ci0gICAgICAvKiBzeW5jaHJvbml6ZWQgY2xvY2tzLCB0YWtlIGZpcnN0IHRpbWVzdGFtcCBhcyBiYXNlLCB1c2UgUlRQIHRpbWVzdGFtcHMKLSAgICAgICAqIHRvIGludGVycG9sYXRlICovCi0gICAgICBpZiAoamJ1Zi0+YmFzZV90aW1lICE9IC0xICYmICFqYnVmLT5uZWVkX3Jlc3luYykKLSAgICAgICAgZHRzID0gLTE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFJUUF9KSVRURVJfQlVGRkVSX01PREVfU0xBVkU6Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogbmVlZCByZXN5bmMsIGxvY2sgb24gdG8gdGltZSBhbmQgZ3N0cnRwdGltZSBpZiB3ZSBjYW4sIG90aGVyd2lzZSB3ZQotICAgKiBkbyB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZXMgKi8KLSAgaWYgKEdfVU5MSUtFTFkgKGpidWYtPm5lZWRfcmVzeW5jICYmIGR0cyAhPSAtMSkpIHsKLSAgICBHU1RfSU5GTyAoInJlc3luYyB0byB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBydHB0aW1lICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoZHRzKSwgR1NUX1RJTUVfQVJHUyAoZ3N0cnRwdGltZSkpOwotICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX3Jlc3luYyAoamJ1ZiwgZHRzLCBnc3RydHB0aW1lLCBleHRfcnRwdGltZSwgRkFMU0UpOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiZXh0cnRwICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZ3N0cnRwICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBiYXNlICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQgIiwgc2VuZF9kaWZmICUiIEdTVF9USU1FX0ZPUk1BVCwgZXh0X3J0cHRpbWUsCi0gICAgICBHU1RfVElNRV9BUkdTIChnc3RydHB0aW1lKSwgR1NUX1RJTUVfQVJHUyAoamJ1Zi0+YmFzZV9ydHB0aW1lKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGdzdHJ0cHRpbWUgLSBqYnVmLT5iYXNlX3J0cHRpbWUpKTsKLQotICByZmM3MjczX21vZGUgPSBtZWRpYV9jbG9jayAmJiBwaXBlbGluZV9jbG9jawotICAgICAgJiYgZ3N0X2Nsb2NrX2lzX3N5bmNlZCAobWVkaWFfY2xvY2spOwotCi0gIGlmIChyZmM3MjczX21vZGUgJiYgamJ1Zi0+bW9kZSA9PSBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX1NMQVZFCi0gICAgICAmJiAobWVkaWFfY2xvY2tfb2Zmc2V0ID09IC0xIHx8ICFqYnVmLT5yZmM3MjczX3N5bmMpKSB7Ci0gICAgR3N0Q2xvY2tUaW1lIGludGVybmFsLCBleHRlcm5hbDsKLSAgICBHc3RDbG9ja1RpbWUgcmF0ZV9udW0sIHJhdGVfZGVub207Ci0gICAgR3N0Q2xvY2tUaW1lIG5zcnRwdGltZWRpZmYsIHJ0cG50cHRpbWUsIHJ0cHN5c3RpbWU7Ci0KLSAgICBnc3RfY2xvY2tfZ2V0X2NhbGlicmF0aW9uIChtZWRpYV9jbG9jaywgJmludGVybmFsLCAmZXh0ZXJuYWwsICZyYXRlX251bSwKLSAgICAgICAgJnJhdGVfZGVub20pOwotCi0gICAgLyogU2xhdmUgdG8gdGhlIFJGQzcyNzMgbWVkaWEgY2xvY2sgaW5zdGVhZCBvZiB0cnlpbmcgdG8gZXN0aW1hdGUgaXQKLSAgICAgKiBiYXNlZCBvbiByZWNlaXZlIHRpbWVzIGFuZCBSVFAgdGltZXN0YW1wcyAqLwotCi0gICAgaWYgKGpidWYtPm1lZGlhX2Nsb2NrX2Jhc2VfdGltZSA9PSAtMSkgewotICAgICAgaWYgKGpidWYtPmJhc2VfdGltZSAhPSAtMSkgewotICAgICAgICBqYnVmLT5tZWRpYV9jbG9ja19iYXNlX3RpbWUgPQotICAgICAgICAgICAgZ3N0X2Nsb2NrX3VuYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKG1lZGlhX2Nsb2NrLAotICAgICAgICAgICAgamJ1Zi0+YmFzZV90aW1lICsgYmFzZV90aW1lLCBpbnRlcm5hbCwgZXh0ZXJuYWwsIHJhdGVfbnVtLAotICAgICAgICAgICAgcmF0ZV9kZW5vbSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoZHRzICE9IC0xKQotICAgICAgICAgIGpidWYtPm1lZGlhX2Nsb2NrX2Jhc2VfdGltZSA9Ci0gICAgICAgICAgICAgIGdzdF9jbG9ja191bmFkanVzdF93aXRoX2NhbGlicmF0aW9uIChtZWRpYV9jbG9jaywgZHRzICsgYmFzZV90aW1lLAotICAgICAgICAgICAgICBpbnRlcm5hbCwgZXh0ZXJuYWwsIHJhdGVfbnVtLCByYXRlX2Rlbm9tKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGpidWYtPm1lZGlhX2Nsb2NrX2Jhc2VfdGltZSA9Ci0gICAgICAgICAgICAgIGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAobWVkaWFfY2xvY2spOwotICAgICAgICBqYnVmLT5iYXNlX3J0cHRpbWUgPSBnc3RydHB0aW1lOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChnc3RydHB0aW1lID4gamJ1Zi0+YmFzZV9ydHB0aW1lKQotICAgICAgbnNydHB0aW1lZGlmZiA9IGdzdHJ0cHRpbWUgLSBqYnVmLT5iYXNlX3J0cHRpbWU7Ci0gICAgZWxzZQotICAgICAgbnNydHB0aW1lZGlmZiA9IDA7Ci0KLSAgICBydHBudHB0aW1lID0gbnNydHB0aW1lZGlmZiArIGpidWYtPm1lZGlhX2Nsb2NrX2Jhc2VfdGltZTsKLQotICAgIHJ0cHN5c3RpbWUgPQotICAgICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKG1lZGlhX2Nsb2NrLCBydHBudHB0aW1lLCBpbnRlcm5hbCwKLSAgICAgICAgZXh0ZXJuYWwsIHJhdGVfbnVtLCByYXRlX2Rlbm9tKTsKLQotICAgIGlmIChydHBzeXN0aW1lID4gYmFzZV90aW1lKQotICAgICAgcHRzID0gcnRwc3lzdGltZSAtIGJhc2VfdGltZTsKLSAgICBlbHNlCi0gICAgICBwdHMgPSAwOwotCi0gICAgR1NUX0RFQlVHICgiUkZDNzI3MyBjbG9jayB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBvdXQgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChydHBzeXN0aW1lKSwgR1NUX1RJTUVfQVJHUyAocHRzKSk7Ci0gIH0gZWxzZSBpZiAocmZjNzI3M19tb2RlICYmIChqYnVmLT5tb2RlID09IFJUUF9KSVRURVJfQlVGRkVSX01PREVfU0xBVkUKLSAgICAgICAgICB8fCBqYnVmLT5tb2RlID09IFJUUF9KSVRURVJfQlVGRkVSX01PREVfU1lOQ0VEKQotICAgICAgJiYgbWVkaWFfY2xvY2tfb2Zmc2V0ICE9IC0xICYmIGpidWYtPnJmYzcyNzNfc3luYykgewotICAgIEdzdENsb2NrVGltZSBudHB0aW1lLCBydHB0aW1lX3RtcDsKLSAgICBHc3RDbG9ja1RpbWUgbnRwcnRwdGltZSwgcnRwc3lzdGltZTsKLSAgICBHc3RDbG9ja1RpbWUgaW50ZXJuYWwsIGV4dGVybmFsOwotICAgIEdzdENsb2NrVGltZSByYXRlX251bSwgcmF0ZV9kZW5vbTsKLQotICAgIC8qIERvbid0IGRvIGFueSBvZiB0aGUgZHRzIHJlbGF0ZWQgYWRqdXN0bWVudHMgZnVydGhlciBkb3duICovCi0gICAgZHRzID0gLTE7Ci0KLSAgICAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBjbG9jayB0aW1lIG9uIHRoZSBzZW5kZXIgc2lkZSBiYXNlZCBvbiB0aGUKLSAgICAgKiBSRkM3MjczIGNsb2NrIGFuZCBjb252ZXJ0IGl0IHRvIG91ciBwaXBlbGluZSBjbG9jawotICAgICAqLwotCi0gICAgZ3N0X2Nsb2NrX2dldF9jYWxpYnJhdGlvbiAobWVkaWFfY2xvY2ssICZpbnRlcm5hbCwgJmV4dGVybmFsLCAmcmF0ZV9udW0sCi0gICAgICAgICZyYXRlX2Rlbm9tKTsKLQotICAgIG50cHRpbWUgPSBnc3RfY2xvY2tfZ2V0X2ludGVybmFsX3RpbWUgKG1lZGlhX2Nsb2NrKTsKLQotICAgIG50cHJ0cHRpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG50cHRpbWUsIGpidWYtPmNsb2NrX3JhdGUsIEdTVF9TRUNPTkQpOwotICAgIG50cHJ0cHRpbWUgKz0gbWVkaWFfY2xvY2tfb2Zmc2V0OwotICAgIG50cHJ0cHRpbWUgJj0gMHhmZmZmZmZmZjsKLQotICAgIHJ0cHRpbWVfdG1wID0gcnRwdGltZTsKLSAgICAvKiBDaGVjayBmb3Igd3JhcGFyb3VuZHMsIHdlIGFzc3VtZSB0aGF0IHRoZSBkaWZmIGJldHdlZW4gY3VycmVudCBSVFAKLSAgICAgKiB0aW1lc3RhbXAgYW5kIGN1cnJlbnQgbWVkaWEgY2xvY2sgdGltZSBjYW4ndCBiZSBiaWdnZXIgdGhhbgotICAgICAqIDIqKjMxIGNsb2NrIHVuaXRzICovCi0gICAgaWYgKG50cHJ0cHRpbWUgPiBydHB0aW1lX3RtcCAmJiBudHBydHB0aW1lIC0gcnRwdGltZV90bXAgPj0gMHg4MDAwMDAwMCkKLSAgICAgIHJ0cHRpbWVfdG1wICs9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMHgxMDAwMDAwMDApOwotICAgIGVsc2UgaWYgKHJ0cHRpbWVfdG1wID4gbnRwcnRwdGltZSAmJiBydHB0aW1lX3RtcCAtIG50cHJ0cHRpbWUgPj0gMHg4MDAwMDAwMCkKLSAgICAgIG50cHJ0cHRpbWUgKz0gR19HVUlOVDY0X0NPTlNUQU5UICgweDEwMDAwMDAwMCk7Ci0KLSAgICBpZiAobnRwcnRwdGltZSA+IHJ0cHRpbWVfdG1wKQotICAgICAgbnRwdGltZSAtPQotICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAobnRwcnRwdGltZSAtIHJ0cHRpbWVfdG1wLCBqYnVmLT5jbG9ja19yYXRlLAotICAgICAgICAgIEdTVF9TRUNPTkQpOwotICAgIGVsc2UKLSAgICAgIG50cHRpbWUgKz0KLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHJ0cHRpbWVfdG1wIC0gbnRwcnRwdGltZSwgamJ1Zi0+Y2xvY2tfcmF0ZSwKLSAgICAgICAgICBHU1RfU0VDT05EKTsKLQotICAgIHJ0cHN5c3RpbWUgPQotICAgICAgICBnc3RfY2xvY2tfYWRqdXN0X3dpdGhfY2FsaWJyYXRpb24gKG1lZGlhX2Nsb2NrLCBudHB0aW1lLCBpbnRlcm5hbCwKLSAgICAgICAgZXh0ZXJuYWwsIHJhdGVfbnVtLCByYXRlX2Rlbm9tKTsKLSAgICAvKiBBbGwgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIHBpcGVsaW5lIGhhcyBlbm91Z2ggYWRkaXRpb25hbAotICAgICAqIGxhdGVuY3kgdG8gY292ZXIgZm9yIHRoZSBuZXR3b3JrIGRlbGF5ICovCi0gICAgaWYgKHJ0cHN5c3RpbWUgPiBiYXNlX3RpbWUpCi0gICAgICBwdHMgPSBydHBzeXN0aW1lIC0gYmFzZV90aW1lOwotICAgIGVsc2UKLSAgICAgIHB0cyA9IDA7Ci0KLSAgICBHU1RfREVCVUcgKCJSRkM3MjczIGNsb2NrIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIG91dCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHJ0cHN5c3RpbWUpLCBHU1RfVElNRV9BUkdTIChwdHMpKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJZiB3ZSB1c2VkIHRoZSBSRkM3MjczIGNsb2NrIGJlZm9yZSBhbmQgbm90IGFueW1vcmUsCi0gICAgICogd2UgbmVlZCB0byByZXN5bmMgaXQgbGF0ZXIgYWdhaW4gKi8KLSAgICBqYnVmLT5tZWRpYV9jbG9ja19iYXNlX3RpbWUgPSAtMTsKLQotICAgIC8qIGRvIHNrZXcgY2FsY3VsYXRpb24gYnkgbWVhc3VyaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcnRwdGltZSBhbmQgdGhlCi0gICAgICogcmVjZWl2ZSBkdHMsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHNrZXcgY29ycmVjdGVkIHJ0cHRpbWUuICovCi0gICAgcHRzID0gY2FsY3VsYXRlX3NrZXcgKGpidWYsIGV4dF9ydHB0aW1lLCBnc3RydHB0aW1lLCBkdHMpOwotICB9Ci0KLSAgLyogY2hlY2sgaWYgdGltZXN0YW1wcyBhcmUgbm90IGdvaW5nIGJhY2t3YXJkcywgd2UgY2FuIG9ubHkgY2hlY2sgdGhpcyBpZiB3ZQotICAgKiBoYXZlIGEgcHJldmlvdXMgb3V0IHRpbWUgYW5kIGEgcHJldmlvdXMgc2VuZF9kaWZmICovCi0gIGlmIChHX0xJS0VMWSAocHRzICE9IC0xICYmIGpidWYtPnByZXZfb3V0X3RpbWUgIT0gLTEKLSAgICAgICAgICAmJiBqYnVmLT5wcmV2X3NlbmRfZGlmZiAhPSAtMSkpIHsKLSAgICAvKiBub3cgY2hlY2sgZm9yIGJhY2t3YXJkcyB0aW1lc3RhbXBzICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKAotICAgICAgICAgICAgLyogaWYgdGhlIHNlcnZlciB0aW1lc3RhbXBzIHdlbnQgdXAgYW5kIHRoZSBvdXRfdGltZSBiYWNrd2FyZHMgKi8KLSAgICAgICAgICAgIChnc3RydHB0aW1lIC0gamJ1Zi0+YmFzZV9ydHB0aW1lID4gamJ1Zi0+cHJldl9zZW5kX2RpZmYKLSAgICAgICAgICAgICAgICAmJiBwdHMgPCBqYnVmLT5wcmV2X291dF90aW1lKSB8fAotICAgICAgICAgICAgLyogaWYgdGhlIHNlcnZlciB0aW1lc3RhbXBzIHdlbnQgYmFja3dhcmRzIGFuZCB0aGUgb3V0X3RpbWUgZm9yd2FyZHMgKi8KLSAgICAgICAgICAgIChnc3RydHB0aW1lIC0gamJ1Zi0+YmFzZV9ydHB0aW1lIDwgamJ1Zi0+cHJldl9zZW5kX2RpZmYKLSAgICAgICAgICAgICAgICAmJiBwdHMgPiBqYnVmLT5wcmV2X291dF90aW1lKSB8fAotICAgICAgICAgICAgLyogaWYgdGhlIHNlcnZlciB0aW1lc3RhbXBzIGRpZCBub3QgY2hhbmdlICovCi0gICAgICAgICAgICBnc3RydHB0aW1lIC0gamJ1Zi0+YmFzZV9ydHB0aW1lID09IGpidWYtPnByZXZfc2VuZF9kaWZmKSkgewotICAgICAgR1NUX0RFQlVHICgiYmFja3dhcmRzIHRpbWVzdGFtcHMsIHVzaW5nIHByZXZpb3VzIHRpbWUiKTsKLSAgICAgIHB0cyA9IGpidWYtPnByZXZfb3V0X3RpbWU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGR0cyAhPSAtMSAmJiBwdHMgKyBqYnVmLT5kZWxheSA8IGR0cykgewotICAgIC8qIGlmIHdlIGFyZSBnb2luZyB0byBwcm9kdWNlIGEgdGltZXN0YW1wIHRoYXQgaXMgbGF0ZXIgdGhhbiB0aGUgaW5wdXQKLSAgICAgKiB0aW1lc3RhbXAsIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGppdHRlcmJ1ZmZlci4gTGlrZWx5IHRoZSBzZXJ2ZXIgcGF1c2VkCi0gICAgICogdGVtcG9yYXJpbHkgKi8KLSAgICBHU1RfREVCVUcgKCJvdXQgJSIgR1NUX1RJTUVfRk9STUFUICIgKyAlIiBHX0dVSU5UNjRfRk9STUFUICIgPCB0aW1lICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCAiLCByZXNldCBqaXR0ZXJidWZmZXIiLCBHU1RfVElNRV9BUkdTIChwdHMpLAotICAgICAgICBqYnVmLT5kZWxheSwgR1NUX1RJTUVfQVJHUyAoZHRzKSk7Ci0gICAgcnRwX2ppdHRlcl9idWZmZXJfcmVzeW5jIChqYnVmLCBkdHMsIGdzdHJ0cHRpbWUsIGV4dF9ydHB0aW1lLCBUUlVFKTsKLSAgICBwdHMgPSBkdHM7Ci0gIH0KLQotICBqYnVmLT5wcmV2X291dF90aW1lID0gcHRzOwotICBqYnVmLT5wcmV2X3NlbmRfZGlmZiA9IGdzdHJ0cHRpbWUgLSBqYnVmLT5iYXNlX3J0cHRpbWU7Ci0KLSAgaWYgKG1lZGlhX2Nsb2NrKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG1lZGlhX2Nsb2NrKTsKLSAgaWYgKHBpcGVsaW5lX2Nsb2NrKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lX2Nsb2NrKTsKLQotICByZXR1cm4gcHRzOwotfQotCi0KLS8qKgotICogcnRwX2ppdHRlcl9idWZmZXJfaW5zZXJ0OgotICogQGpidWY6IGFuICNSVFBKaXR0ZXJCdWZmZXIKLSAqIEBpdGVtOiBhbiAjUlRQSml0dGVyQnVmZmVySXRlbSB0byBpbnNlcnQKLSAqIEBoZWFkOiBUUlVFIHdoZW4gdGhlIGhlYWQgZWxlbWVudCBjaGFuZ2VkLgotICogQHBlcmNlbnQ6IHRoZSBidWZmZXJpbmcgcGVyY2VudCBhZnRlciBpbnNlcnRpb24KLSAqCi0gKiBJbnNlcnRzIEBpdGVtIGludG8gdGhlIHBhY2tldCBxdWV1ZSBvZiBAamJ1Zi4gVGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUKLSAqIHBhY2tldCB3aWxsIGJlIHVzZWQgdG8gc29ydCB0aGUgcGFja2V0cy4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcmhpcCBvZgotICogQGJ1ZiB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zICVUUlVFLgotICoKLSAqIFdoZW4gQGhlYWQgaXMgJVRSVUUsIHRoZSBuZXcgcGFja2V0IHdhcyBhZGRlZCBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgYW5kCi0gKiB3aWxsIGJlIGF2YWlsYWJsZSB3aXRoIHRoZSBuZXh0IGNhbGwgdG8gcnRwX2ppdHRlcl9idWZmZXJfcG9wKCkgYW5kCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9wZWVrKCkuCi0gKgotICogUmV0dXJuczogJUZBTFNFIGlmIGEgcGFja2V0IHdpdGggdGhlIHNhbWUgbnVtYmVyIGFscmVhZHkgZXhpc3RlZC4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgUlRQSml0dGVyQnVmZmVySXRlbSAqIGl0ZW0sCi0gICAgZ2Jvb2xlYW4gKiBoZWFkLCBnaW50ICogcGVyY2VudCkKLXsKLSAgR0xpc3QgKmxpc3QsICpldmVudCA9IE5VTEw7Ci0gIGd1aW50MTYgc2VxbnVtOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChqYnVmICE9IE5VTEwsIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGl0ZW0gIT0gTlVMTCwgRkFMU0UpOwotCi0gIGxpc3QgPSBqYnVmLT5wYWNrZXRzLT50YWlsOwotCi0gIC8qIG5vIHNlcW51bSwgc2ltcGx5IGFwcGVuZCB0aGVuICovCi0gIGlmIChpdGVtLT5zZXFudW0gPT0gLTEpCi0gICAgZ290byBhcHBlbmQ7Ci0KLSAgc2VxbnVtID0gaXRlbS0+c2VxbnVtOwotCi0gIC8qIGxvb3AgdGhlIGxpc3QgdG8gc2tpcCBzdHJpY3RseSBsYXJnZXIgc2VxbnVtIGJ1ZmZlcnMgKi8KLSAgZm9yICg7IGxpc3Q7IGxpc3QgPSBnX2xpc3RfcHJldmlvdXMgKGxpc3QpKSB7Ci0gICAgZ3VpbnQxNiBxc2VxOwotICAgIGdpbnQgZ2FwOwotICAgIFJUUEppdHRlckJ1ZmZlckl0ZW0gKnFpdGVtID0gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgbGlzdDsKLQotICAgIGlmIChxaXRlbS0+c2VxbnVtID09IC0xKSB7Ci0gICAgICAvKiBrZWVwIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY29uc2VjdXRpdmUgZXZlbnQgaWYgbm90IGFscmVhZHkKLSAgICAgICAqIHNldC4gd2Ugd2lsbCBpbnNlcnQgdGhlIHBhY2tldCBhZnRlciB0aGUgZXZlbnQgaWYgd2UgY2FuJ3QgZmluZAotICAgICAgICogYSBwYWNrZXQgd2l0aCBsb3dlciBzZXF1ZW5jZSBudW1iZXIgYmVmb3JlIHRoZSBldmVudC4gKi8KLSAgICAgIGlmIChldmVudCA9PSBOVUxMKQotICAgICAgICBldmVudCA9IGxpc3Q7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBxc2VxID0gcWl0ZW0tPnNlcW51bTsKLQotICAgIC8qIGNvbXBhcmUgdGhlIG5ldyBzZXFudW0gdG8gdGhlIG9uZSBpbiB0aGUgYnVmZmVyICovCi0gICAgZ2FwID0gZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKHNlcW51bSwgcXNlcSk7Ci0KLSAgICAvKiB3ZSBoaXQgYSBwYWNrZXQgd2l0aCB0aGUgc2FtZSBzZXFudW0sIG5vdGlmeSBhIGR1cGxpY2F0ZSAqLwotICAgIGlmIChHX1VOTElLRUxZIChnYXAgPT0gMCkpCi0gICAgICBnb3RvIGR1cGxpY2F0ZTsKLQotICAgIC8qIHNlcW51bSA+IHFzZXEsIHdlIGNhbiBzdG9wIGxvb2tpbmcgKi8KLSAgICBpZiAoR19MSUtFTFkgKGdhcCA8IDApKQotICAgICAgYnJlYWs7Ci0KLSAgICAvKiBpZiB3ZSd2ZSBmb3VuZCBhIHBhY2tldCB3aXRoIGdyZWF0ZXIgc2VxdWVuY2UgbnVtYmVyLCBjbGVhbnVwIHRoZQotICAgICAqIGV2ZW50IHBvaW50ZXIgYXMgdGhlIHBhY2tldCB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgZXZlbnQgKi8KLSAgICBldmVudCA9IE5VTEw7Ci0gIH0KLQotICAvKiBpZiBldmVudCBpcyBzZXQgaXQgbWVhbnMgdGhhdCBwYWNrZXRzIGJlZm9yZSB0aGUgZXZlbnQgaGFkIHNtYWxsZXIKLSAgICogc2VxdWVuY2UgbnVtYmVyLCBzbyB3ZSB3aWxsIGluc2VydCBvdXIgcGFja2V0IGFmdGVyIHRoZSBldmVudCAqLwotICBpZiAoZXZlbnQpCi0gICAgbGlzdCA9IGV2ZW50OwotCi1hcHBlbmQ6Ci0gIHF1ZXVlX2RvX2luc2VydCAoamJ1ZiwgbGlzdCwgKEdMaXN0ICopIGl0ZW0pOwotCi0gIC8qIGJ1ZmZlcmluZyBtb2RlLCB1cGRhdGUgYnVmZmVyIHN0YXRzICovCi0gIGlmIChqYnVmLT5tb2RlID09IFJUUF9KSVRURVJfQlVGRkVSX01PREVfQlVGRkVSKQotICAgIHVwZGF0ZV9idWZmZXJfbGV2ZWwgKGpidWYsIHBlcmNlbnQpOwotICBlbHNlIGlmIChwZXJjZW50KQotICAgICpwZXJjZW50ID0gLTE7Ci0KLSAgLyogaGVhZCB3YXMgY2hhbmdlZCB3aGVuIHdlIGRpZCBub3QgZmluZCBhIHByZXZpb3VzIHBhY2tldCwgd2Ugc2V0IHRoZSByZXR1cm4KLSAgICogZmxhZyB3aGVuIHJlcXVlc3RlZC4gKi8KLSAgaWYgKEdfTElLRUxZIChoZWFkKSkKLSAgICAqaGVhZCA9IChsaXN0ID09IE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZHVwbGljYXRlOgotICB7Ci0gICAgR1NUX0RFQlVHICgiZHVwbGljYXRlIHBhY2tldCAlZCBmb3VuZCIsIChnaW50KSBzZXFudW0pOwotICAgIGlmIChHX0xJS0VMWSAoaGVhZCkpCi0gICAgICAqaGVhZCA9IEZBTFNFOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX3BvcDoKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKiBAcGVyY2VudDogdGhlIGJ1ZmZlcmluZyBwZXJjZW50Ci0gKgotICogUG9wcyB0aGUgb2xkZXN0IGJ1ZmZlciBmcm9tIHRoZSBwYWNrZXQgcXVldWUgb2YgQGpidWYuIFRoZSBwb3BwZWQgYnVmZmVyIHdpbGwKLSAqIGhhdmUgaXRzIHRpbWVzdGFtcCBhZGp1c3RlZCB3aXRoIHRoZSBpbmNvbW1pbmcgcnVubmluZ190aW1lIGFuZCB0aGUgZGV0ZWN0ZWQKLSAqIGNsb2NrIHNrZXcuCi0gKgotICogUmV0dXJuczogYSAjR3N0QnVmZmVyIG9yICVOVUxMIHdoZW4gdGhlcmUgd2FzIG5vIHBhY2tldCBpbiB0aGUgcXVldWUuCi0gKi8KLVJUUEppdHRlckJ1ZmZlckl0ZW0gKgotcnRwX2ppdHRlcl9idWZmZXJfcG9wIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmLCBnaW50ICogcGVyY2VudCkKLXsKLSAgR0xpc3QgKml0ZW0gPSBOVUxMOwotICBHUXVldWUgKnF1ZXVlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChqYnVmICE9IE5VTEwsIE5VTEwpOwotCi0gIHF1ZXVlID0gamJ1Zi0+cGFja2V0czsKLQotICBpdGVtID0gcXVldWUtPmhlYWQ7Ci0gIGlmIChpdGVtKSB7Ci0gICAgcXVldWUtPmhlYWQgPSBpdGVtLT5uZXh0OwotICAgIGlmIChxdWV1ZS0+aGVhZCkKLSAgICAgIHF1ZXVlLT5oZWFkLT5wcmV2ID0gTlVMTDsKLSAgICBlbHNlCi0gICAgICBxdWV1ZS0+dGFpbCA9IE5VTEw7Ci0gICAgcXVldWUtPmxlbmd0aC0tOwotICB9Ci0KLSAgLyogYnVmZmVyaW5nIG1vZGUsIHVwZGF0ZSBidWZmZXIgc3RhdHMgKi8KLSAgaWYgKGpidWYtPm1vZGUgPT0gUlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9CVUZGRVIpCi0gICAgdXBkYXRlX2J1ZmZlcl9sZXZlbCAoamJ1ZiwgcGVyY2VudCk7Ci0gIGVsc2UgaWYgKHBlcmNlbnQpCi0gICAgKnBlcmNlbnQgPSAtMTsKLQotICByZXR1cm4gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgaXRlbTsKLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9wZWVrOgotICogQGpidWY6IGFuICNSVFBKaXR0ZXJCdWZmZXIKLSAqCi0gKiBQZWVrIHRoZSBvbGRlc3QgYnVmZmVyIGZyb20gdGhlIHBhY2tldCBxdWV1ZSBvZiBAamJ1Zi4KLSAqCi0gKiBTZWUgcnRwX2ppdHRlcl9idWZmZXJfaW5zZXJ0KCkgdG8gY2hlY2sgd2hlbiBhbiBvbGRlciBwYWNrZXQgd2FzCi0gKiBhZGRlZC4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RCdWZmZXIgb3IgJU5VTEwgd2hlbiB0aGVyZSB3YXMgbm8gcGFja2V0IGluIHRoZSBxdWV1ZS4KLSAqLwotUlRQSml0dGVyQnVmZmVySXRlbSAqCi1ydHBfaml0dGVyX2J1ZmZlcl9wZWVrIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoamJ1ZiAhPSBOVUxMLCBOVUxMKTsKLQotICByZXR1cm4gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgamJ1Zi0+cGFja2V0cy0+aGVhZDsKLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9mbHVzaDoKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKiBAZnJlZV9mdW5jOiBmdW5jdGlvbiB0byBmcmVlIGVhY2ggaXRlbQotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byBAZnJlZV9mdW5jCi0gKgotICogRmx1c2ggYWxsIHBhY2tldHMgZnJvbSB0aGUgaml0dGVyYnVmZmVyLgotICovCi12b2lkCi1ydHBfaml0dGVyX2J1ZmZlcl9mbHVzaCAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgR0Z1bmMgZnJlZV9mdW5jLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR0xpc3QgKml0ZW07Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoamJ1ZiAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoZnJlZV9mdW5jICE9IE5VTEwpOwotCi0gIHdoaWxlICgoaXRlbSA9IGdfcXVldWVfcG9wX2hlYWRfbGluayAoamJ1Zi0+cGFja2V0cykpKQotICAgIGZyZWVfZnVuYyAoKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgaXRlbSwgdXNlcl9kYXRhKTsKLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9pc19idWZmZXJpbmc6Ci0gKiBAamJ1ZjogYW4gI1JUUEppdHRlckJ1ZmZlcgotICoKLSAqIENoZWNrIGlmIEBqYnVmIGlzIGJ1ZmZlcmluZyBjdXJyZW50bHkuIFVzZXJzIG9mIHRoZSBqaXR0ZXJidWZmZXIgc2hvdWxkIG5vdAotICogcG9wIHBhY2tldHMgd2hpbGUgaW4gYnVmZmVyaW5nIG1vZGUuCi0gKgotICogUmV0dXJuczogdGhlIGJ1ZmZlcmluZyBzdGF0ZSBvZiBAamJ1ZgotICovCi1nYm9vbGVhbgotcnRwX2ppdHRlcl9idWZmZXJfaXNfYnVmZmVyaW5nIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmKQotewotICByZXR1cm4gamJ1Zi0+YnVmZmVyaW5nICYmICFqYnVmLT5idWZmZXJpbmdfZGlzYWJsZWQ7Ci19Ci0KLS8qKgotICogcnRwX2ppdHRlcl9idWZmZXJfc2V0X2J1ZmZlcmluZzoKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKiBAYnVmZmVyaW5nOiB0aGUgbmV3IGJ1ZmZlcmluZyBzdGF0ZQotICoKLSAqIEZvcmNlcyBAamJ1ZiB0byBnbyBpbnRvIHRoZSBidWZmZXJpbmcgc3RhdGUuCi0gKi8KLXZvaWQKLXJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9idWZmZXJpbmcgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYsIGdib29sZWFuIGJ1ZmZlcmluZykKLXsKLSAgamJ1Zi0+YnVmZmVyaW5nID0gYnVmZmVyaW5nOwotfQotCi0vKioKLSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9wZXJjZW50OgotICogQGpidWY6IGFuICNSVFBKaXR0ZXJCdWZmZXIKLSAqCi0gKiBHZXQgdGhlIGJ1ZmZlcmluZyBwZXJjZW50IG9mIHRoZSBqaXR0ZXJidWZmZXIuCi0gKgotICogUmV0dXJuczogdGhlIGJ1ZmZlcmluZyBwZXJjZW50Ci0gKi8KLWdpbnQKLXJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9wZXJjZW50IChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmKQotewotICBnaW50IHBlcmNlbnQ7Ci0gIGd1aW50NjQgbGV2ZWw7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKGpidWYtPmhpZ2hfbGV2ZWwgPT0gMCkpCi0gICAgcmV0dXJuIDEwMDsKLQotICBpZiAoR19VTkxJS0VMWSAoamJ1Zi0+YnVmZmVyaW5nX2Rpc2FibGVkKSkKLSAgICByZXR1cm4gMTAwOwotCi0gIGxldmVsID0gZ2V0X2J1ZmZlcl9sZXZlbCAoamJ1Zik7Ci0gIHBlcmNlbnQgPSAobGV2ZWwgKiAxMDAgLyBqYnVmLT5oaWdoX2xldmVsKTsKLSAgcGVyY2VudCA9IE1JTiAocGVyY2VudCwgMTAwKTsKLQotICByZXR1cm4gcGVyY2VudDsKLX0KLQotLyoqCi0gKiBydHBfaml0dGVyX2J1ZmZlcl9udW1fcGFja2V0czoKLSAqIEBqYnVmOiBhbiAjUlRQSml0dGVyQnVmZmVyCi0gKgotICogR2V0IHRoZSBudW1iZXIgb2YgcGFja2V0cyBjdXJyZW50bHkgaW4gImpidWYuCi0gKgotICogUmV0dXJuczogVGhlIG51bWJlciBvZiBwYWNrZXRzIGluIEBqYnVmLgotICovCi1ndWludAotcnRwX2ppdHRlcl9idWZmZXJfbnVtX3BhY2tldHMgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYpCi17Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChqYnVmICE9IE5VTEwsIDApOwotCi0gIHJldHVybiBqYnVmLT5wYWNrZXRzLT5sZW5ndGg7Ci19Ci0KLS8qKgotICogcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3RzX2RpZmY6Ci0gKiBAamJ1ZjogYW4gI1JUUEppdHRlckJ1ZmZlcgotICoKLSAqIEdldCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0aW1lc3RhbXBzIG9mIGZpcnN0IGFuZCBsYXN0IHBhY2tldCBpbiB0aGUKLSAqIGppdHRlcmJ1ZmZlci4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgZGlmZmVyZW5jZSBleHByZXNzZWQgaW4gdGhlIHRpbWVzdGFtcCB1bml0cyBvZiB0aGUgcGFja2V0cy4KLSAqLwotZ3VpbnQzMgotcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3RzX2RpZmYgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYpCi17Ci0gIGd1aW50NjQgaGlnaF90cywgbG93X3RzOwotICBSVFBKaXR0ZXJCdWZmZXJJdGVtICpoaWdoX2J1ZiwgKmxvd19idWY7Ci0gIGd1aW50MzIgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChqYnVmICE9IE5VTEwsIDApOwotCi0gIGhpZ2hfYnVmID0gKFJUUEppdHRlckJ1ZmZlckl0ZW0gKikgZ19xdWV1ZV9wZWVrX3RhaWxfbGluayAoamJ1Zi0+cGFja2V0cyk7Ci0gIGxvd19idWYgPSAoUlRQSml0dGVyQnVmZmVySXRlbSAqKSBnX3F1ZXVlX3BlZWtfaGVhZF9saW5rIChqYnVmLT5wYWNrZXRzKTsKLQotICBpZiAoIWhpZ2hfYnVmIHx8ICFsb3dfYnVmIHx8IGhpZ2hfYnVmID09IGxvd19idWYpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaGlnaF90cyA9IGhpZ2hfYnVmLT5ydHB0aW1lOwotICBsb3dfdHMgPSBsb3dfYnVmLT5ydHB0aW1lOwotCi0gIC8qIGl0IG5lZWRzIHRvIHdvcmsgaWYgdHMgd3JhcHMgKi8KLSAgaWYgKGhpZ2hfdHMgPj0gbG93X3RzKSB7Ci0gICAgcmVzdWx0ID0gKGd1aW50MzIpIChoaWdoX3RzIC0gbG93X3RzKTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQgPSAoZ3VpbnQzMikgKGhpZ2hfdHMgKyBHX01BWFVJTlQzMiArIDEgLSBsb3dfdHMpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3N5bmM6Ci0gKiBAamJ1ZjogYW4gI1JUUEppdHRlckJ1ZmZlcgotICogQHJ0cHRpbWU6IHJlc3VsdCBSVFAgdGltZQotICogQHRpbWVzdGFtcDogcmVzdWx0IEdTdHJlYW1lciB0aW1lc3RhbXAKLSAqIEBjbG9ja19yYXRlOiBjbG9jay1yYXRlIG9mIEBydHB0aW1lCi0gKiBAbGFzdF9ydHB0aW1lOiBsYXN0IHNlZW4gcnRwdGltZS4KLSAqCi0gKiBDYWxjdWxhdGVzIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBSVFAgdGltZXN0YW1wIGFuZCB0aGUgR1N0cmVhbWVyIHRpbWVzdGFtcAotICogdXNlZCBmb3IgY29uc3RydWN0aW5nIHRpbWVzdGFtcHMuCi0gKgotICogRm9yIGV4dGVuZGVkIFJUUCB0aW1lc3RhbXAgQHJ0cHRpbWUgd2l0aCBhIGNsb2NrLXJhdGUgb2YgQGNsb2NrX3JhdGUsCi0gKiB0aGUgR1N0cmVhbWVyIHRpbWVzdGFtcCBpcyBjdXJyZW50bHkgQHRpbWVzdGFtcC4KLSAqCi0gKiBUaGUgbGFzdCBzZWVuIGV4dGVuZGVkIFJUUCB0aW1lc3RhbXAgd2l0aCBjbG9jay1yYXRlIEBjbG9jay1yYXRlIGlzIHJldHVybmVkIGluCi0gKiBAbGFzdF9ydHB0aW1lLgotICovCi12b2lkCi1ydHBfaml0dGVyX2J1ZmZlcl9nZXRfc3luYyAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgZ3VpbnQ2NCAqIHJ0cHRpbWUsCi0gICAgZ3VpbnQ2NCAqIHRpbWVzdGFtcCwgZ3VpbnQzMiAqIGNsb2NrX3JhdGUsIGd1aW50NjQgKiBsYXN0X3J0cHRpbWUpCi17Ci0gIGlmIChydHB0aW1lKQotICAgICpydHB0aW1lID0gamJ1Zi0+YmFzZV9leHRydHA7Ci0gIGlmICh0aW1lc3RhbXApCi0gICAgKnRpbWVzdGFtcCA9IGpidWYtPmJhc2VfdGltZSArIGpidWYtPnNrZXc7Ci0gIGlmIChjbG9ja19yYXRlKQotICAgICpjbG9ja19yYXRlID0gamJ1Zi0+Y2xvY2tfcmF0ZTsKLSAgaWYgKGxhc3RfcnRwdGltZSkKLSAgICAqbGFzdF9ydHB0aW1lID0gamJ1Zi0+bGFzdF9ydHB0aW1lOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvcnRwaml0dGVyYnVmZmVyLmggYi9nc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA0YjVmZC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9ydHBqaXR0ZXJidWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1JUUF9KSVRURVJfQlVGRkVSX0hfXwotI2RlZmluZSBfX1JUUF9KSVRURVJfQlVGRkVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5oPgotCi10eXBlZGVmIHN0cnVjdCBfUlRQSml0dGVyQnVmZmVyIFJUUEppdHRlckJ1ZmZlcjsKLXR5cGVkZWYgc3RydWN0IF9SVFBKaXR0ZXJCdWZmZXJDbGFzcyBSVFBKaXR0ZXJCdWZmZXJDbGFzczsKLXR5cGVkZWYgc3RydWN0IF9SVFBKaXR0ZXJCdWZmZXJJdGVtIFJUUEppdHRlckJ1ZmZlckl0ZW07Ci0KLSNkZWZpbmUgUlRQX1RZUEVfSklUVEVSX0JVRkZFUiAgICAgICAgICAgICAocnRwX2ppdHRlcl9idWZmZXJfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgUlRQX0pJVFRFUl9CVUZGRVIoc3JjKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKHNyYyksUlRQX1RZUEVfSklUVEVSX0JVRkZFUixSVFBKaXR0ZXJCdWZmZXIpKQotI2RlZmluZSBSVFBfSklUVEVSX0JVRkZFUl9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLFJUUF9UWVBFX0pJVFRFUl9CVUZGRVIsUlRQSml0dGVyQnVmZmVyQ2xhc3MpKQotI2RlZmluZSBSVFBfSVNfSklUVEVSX0JVRkZFUihzcmMpICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgoc3JjKSxSVFBfVFlQRV9KSVRURVJfQlVGRkVSKSkKLSNkZWZpbmUgUlRQX0lTX0pJVFRFUl9CVUZGRVJfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxSVFBfVFlQRV9KSVRURVJfQlVGRkVSKSkKLSNkZWZpbmUgUlRQX0pJVFRFUl9CVUZGRVJfQ0FTVChzcmMpICAgICAgICAoKFJUUEppdHRlckJ1ZmZlciAqKShzcmMpKQotCi0vKioKLSAqIFJUUEppdHRlckJ1ZmZlck1vZGU6Ci0gKiBAUlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9OT05FOiBkb24ndCBkbyBhbnkgc2tldyBjb3JyZWN0aW9uLCBvdXRnb2luZwotICogICAgdGltZXN0YW1wcyBhcmUgY2FsY3VsYXRlZCBkaXJlY3RseSBmcm9tIHRoZSBSVFAgdGltZXN0YW1wcy4gVGhpcyBtb2RlIGlzCi0gKiAgICBnb29kIGZvciByZWNvcmRpbmcgYnV0IG5vdCBmb3IgcmVhbC10aW1lIGFwcGxpY2F0aW9ucy4KLSAqIEBSVFBfSklUVEVSX0JVRkZFUl9NT0RFX1NMQVZFOiBjYWxjdWxhdGUgdGhlIHNrZXcgYmV0d2VlbiBzZW5kZXIgYW5kIHJlY2VpdmVyCi0gKiAgICBhbmQgcHJvZHVjZSBzbW9vdGhlZCBhZGp1c3RlZCBvdXRnb2luZyB0aW1lc3RhbXBzLiBUaGlzIG1vZGUgaXMgZ29vZCBmb3IKLSAqICAgIGxvdyBsYXRlbmN5IGNvbW11bmljYXRpb25zLgotICogQFJUUF9KSVRURVJfQlVGRkVSX01PREVfQlVGRkVSOiBidWZmZXIgcGFja2V0cyBiZXR3ZWVuIGxvdy9oaWdoIHdhdGVybWFya3MuCi0gKiAgICBUaGlzIG1vZGUgaXMgZ29vZCBmb3Igc3RyZWFtaW5nIGNvbW11bmljYXRpb24uCi0gKiBAUlRQX0pJVFRFUl9CVUZGRVJfTU9ERV9TWU5DRUQ6IHNlbmRlciBhbmQgcmVjZWl2ZXIgY2xvY2tzIGFyZSBzeW5jaHJvbml6ZWQsCi0gKiAgICBsaWtlICNSVFBfSklUVEVSX0JVRkZFUl9NT0RFX1NMQVZFIGJ1dCBza2V3IGlzIGFzc3VtZWQgdG8gYmUgMC4gR29vZCBmb3IKLSAqICAgIGxvdyBsYXRlbmN5IGNvbW11bmljYXRpb24gd2hlbiBzZW5kZXIgYW5kIHJlY2VpdmVyIGNsb2NrcyBhcmUKLSAqICAgIHN5bmNocm9uaXplZCBhbmQgdGhlcmUgaXMgdGh1cyBubyBjbG9jayBza2V3LgotICogQFJUUF9KSVRURVJfQlVGRkVSX01PREVfTEFTVDogbGFzdCBidWZmZXIgbW9kZS4KLSAqCi0gKiBUaGUgZGlmZmVyZW50IGJ1ZmZlciBtb2RlcyBmb3IgYSBqaXR0ZXJidWZmZXIuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gIFJUUF9KSVRURVJfQlVGRkVSX01PREVfTk9ORSAgICA9IDAsCi0gIFJUUF9KSVRURVJfQlVGRkVSX01PREVfU0xBVkUgICA9IDEsCi0gIFJUUF9KSVRURVJfQlVGRkVSX01PREVfQlVGRkVSICA9IDIsCi0gIC8qIEZJWE1FIDMgaXMgbWlzc2luZyBiZWNhdXNlIGl0IHdhcyB1c2VkIGZvciAnYXV0bycgaW4gaml0dGVyYnVmZmVyICovCi0gIFJUUF9KSVRURVJfQlVGRkVSX01PREVfU1lOQ0VEICA9IDQsCi0gIFJUUF9KSVRURVJfQlVGRkVSX01PREVfTEFTVAotfSBSVFBKaXR0ZXJCdWZmZXJNb2RlOwotCi0jZGVmaW5lIFJUUF9UWVBFX0pJVFRFUl9CVUZGRVJfTU9ERSAocnRwX2ppdHRlcl9idWZmZXJfbW9kZV9nZXRfdHlwZSgpKQotR1R5cGUgcnRwX2ppdHRlcl9idWZmZXJfbW9kZV9nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgUlRQX0pJVFRFUl9CVUZGRVJfTUFYX1dJTkRPVyA1MTIKLS8qKgotICogUlRQSml0dGVyQnVmZmVyOgotICoKLSAqIEEgSml0dGVyQnVmZmVyIGluIHRoZSAjUlRQU2Vzc2lvbgotICovCi1zdHJ1Y3QgX1JUUEppdHRlckJ1ZmZlciB7Ci0gIEdPYmplY3QgICAgICAgIG9iamVjdDsKLQotICBHUXVldWUgICAgICAgICpwYWNrZXRzOwotCi0gIFJUUEppdHRlckJ1ZmZlck1vZGUgbW9kZTsKLQotICBHc3RDbG9ja1RpbWUgICBkZWxheTsKLQotICAvKiBmb3IgYnVmZmVyaW5nICovCi0gIGdib29sZWFuICAgICAgICAgIGJ1ZmZlcmluZzsKLSAgZ3VpbnQ2NCAgICAgICAgICAgbG93X2xldmVsOwotICBndWludDY0ICAgICAgICAgICBoaWdoX2xldmVsOwotCi0gIC8qIGZvciBjYWxjdWxhdGluZyBza2V3ICovCi0gIGdib29sZWFuICAgICAgIG5lZWRfcmVzeW5jOwotICBHc3RDbG9ja1RpbWUgICBiYXNlX3RpbWU7Ci0gIEdzdENsb2NrVGltZSAgIGJhc2VfcnRwdGltZTsKLSAgR3N0Q2xvY2tUaW1lICAgbWVkaWFfY2xvY2tfYmFzZV90aW1lOwotICBndWludDMyICAgICAgICBjbG9ja19yYXRlOwotICBHc3RDbG9ja1RpbWUgICBiYXNlX2V4dHJ0cDsKLSAgR3N0Q2xvY2tUaW1lICAgcHJldl9vdXRfdGltZTsKLSAgZ3VpbnQ2NCAgICAgICAgZXh0X3J0cHRpbWU7Ci0gIGd1aW50NjQgICAgICAgIGxhc3RfcnRwdGltZTsKLSAgZ2ludDY0ICAgICAgICAgd2luZG93W1JUUF9KSVRURVJfQlVGRkVSX01BWF9XSU5ET1ddOwotICBndWludCAgICAgICAgICB3aW5kb3dfcG9zOwotICBndWludCAgICAgICAgICB3aW5kb3dfc2l6ZTsKLSAgZ2Jvb2xlYW4gICAgICAgd2luZG93X2ZpbGxpbmc7Ci0gIGdpbnQ2NCAgICAgICAgIHdpbmRvd19taW47Ci0gIGdpbnQ2NCAgICAgICAgIHNrZXc7Ci0gIGdpbnQ2NCAgICAgICAgIHByZXZfc2VuZF9kaWZmOwotICBnYm9vbGVhbiAgICAgICBidWZmZXJpbmdfZGlzYWJsZWQ7Ci0KLSAgR011dGV4ICAgICAgICAgY2xvY2tfbG9jazsKLSAgR3N0Q2xvY2sgICAgICAqcGlwZWxpbmVfY2xvY2s7Ci0gIEdzdENsb2NrICAgICAgKm1lZGlhX2Nsb2NrOwotICBndWxvbmcgICAgICAgICBtZWRpYV9jbG9ja19zeW5jZWRfaWQ7Ci0gIGd1aW50NjQgICAgICAgIG1lZGlhX2Nsb2NrX29mZnNldDsKLQotICBnYm9vbGVhbiAgICAgICByZmM3MjczX3N5bmM7Ci19OwotCi1zdHJ1Y3QgX1JUUEppdHRlckJ1ZmZlckNsYXNzIHsKLSAgR09iamVjdENsYXNzICAgcGFyZW50X2NsYXNzOwotfTsKLQotLyoqCi0gKiBSVFBKaXR0ZXJCdWZmZXJJdGVtOgotICogQGRhdGE6IHRoZSBkYXRhIG9mIHRoZSBpdGVtCi0gKiBAbmV4dDogcG9pbnRlciB0byBuZXh0IGl0ZW0KLSAqIEBwcmV2OiBwb2ludGVyIHRvIHByZXZpb3VzIGl0ZW0KLSAqIEB0eXBlOiB0aGUgdHlwZSBvZiBAZGF0YSwgdXNlZCBmcmVlbHkgYnkgY2FsbGVyCi0gKiBAZHRzOiBpbnB1dCBEVFMKLSAqIEBwdHM6IG91dHB1dCBQVFMKLSAqIEBzZXFudW06IHNlcW51bSwgdGhlIHNlcW51bSBpcyB1c2VkIHRvIGluc2VydCB0aGUgaXRlbSBpbiB0aGUKLSAqICAgcmlnaHQgcG9zaXRpb24gaW4gdGhlIGppdHRlcmJ1ZmZlciBhbmQgZGV0ZWN0IGR1cGxpY2F0ZXMuIFVzZSAtMSB0bwotICogICBhcHBlbmQuCi0gKiBAY291bnQ6IGFtb3VudCBvZiBzZXFudW0gaW4gdGhpcyBpdGVtCi0gKiBAcnRwdGltZTogcnRwIHRpbWVzdGFtcAotICoKLSAqIEFuIG9iamVjdCBjb250YWluaW5nIGFuIFJUUCBwYWNrZXQgb3IgZXZlbnQuCi0gKi8KLXN0cnVjdCBfUlRQSml0dGVyQnVmZmVySXRlbSB7Ci0gIGdwb2ludGVyIGRhdGE7Ci0gIEdMaXN0ICpuZXh0OwotICBHTGlzdCAqcHJldjsKLSAgZ3VpbnQgdHlwZTsKLSAgR3N0Q2xvY2tUaW1lIGR0czsKLSAgR3N0Q2xvY2tUaW1lIHB0czsKLSAgZ3VpbnQgc2VxbnVtOwotICBndWludCBjb3VudDsKLSAgZ3VpbnQgcnRwdGltZTsKLX07Ci0KLUdUeXBlIHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF90eXBlICh2b2lkKTsKLQotLyogbWFuYWdpbmcgbGlmZXRpbWUgKi8KLVJUUEppdHRlckJ1ZmZlciogICAgICBydHBfaml0dGVyX2J1ZmZlcl9uZXcgICAgICAgICAgICAgICh2b2lkKTsKLQotUlRQSml0dGVyQnVmZmVyTW9kZSAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9tb2RlICAgICAgICAgKFJUUEppdHRlckJ1ZmZlciAqamJ1Zik7Ci12b2lkICAgICAgICAgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfc2V0X21vZGUgICAgICAgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmLCBSVFBKaXR0ZXJCdWZmZXJNb2RlIG1vZGUpOwotCi1Hc3RDbG9ja1RpbWUgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfZ2V0X2RlbGF5ICAgICAgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmKTsKLXZvaWQgICAgICAgICAgICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfZGVsYXkgICAgICAgIChSVFBKaXR0ZXJCdWZmZXIgKmpidWYsIEdzdENsb2NrVGltZSBkZWxheSk7Ci0KLXZvaWQgICAgICAgICAgICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfY2xvY2tfcmF0ZSAgIChSVFBKaXR0ZXJCdWZmZXIgKmpidWYsIGd1aW50MzIgY2xvY2tfcmF0ZSk7Ci1ndWludDMyICAgICAgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfZ2V0X2Nsb2NrX3JhdGUgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9tZWRpYV9jbG9jayAgKFJUUEppdHRlckJ1ZmZlciAqamJ1ZiwgR3N0Q2xvY2sgKiBjbG9jaywgZ3VpbnQ2NCBjbG9ja19vZmZzZXQpOwotdm9pZCAgICAgICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX3NldF9waXBlbGluZV9jbG9jayAoUlRQSml0dGVyQnVmZmVyICpqYnVmLCBHc3RDbG9jayAqIGNsb2NrKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9yZmM3MjczX3N5bmMgKFJUUEppdHRlckJ1ZmZlciAqamJ1Zik7Ci12b2lkICAgICAgICAgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfc2V0X3JmYzcyNzNfc3luYyAoUlRQSml0dGVyQnVmZmVyICpqYnVmLCBnYm9vbGVhbiByZmM3MjczX3N5bmMpOwotCi12b2lkICAgICAgICAgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfcmVzZXRfc2tldyAgICAgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2luc2VydCAgICAgICAgICAgKFJUUEppdHRlckJ1ZmZlciAqamJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVFBKaXR0ZXJCdWZmZXJJdGVtICppdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICpoZWFkLCBnaW50ICpwZXJjZW50KTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2Rpc2FibGVfYnVmZmVyaW5nIChSVFBKaXR0ZXJCdWZmZXIgKmpidWYsIGdib29sZWFuIGRpc2FibGVkKTsKLQotUlRQSml0dGVyQnVmZmVySXRlbSAqIHJ0cF9qaXR0ZXJfYnVmZmVyX3BlZWsgICAgICAgICAgICAgKFJUUEppdHRlckJ1ZmZlciAqamJ1Zik7Ci1SVFBKaXR0ZXJCdWZmZXJJdGVtICogcnRwX2ppdHRlcl9idWZmZXJfcG9wICAgICAgICAgICAgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmLCBnaW50ICpwZXJjZW50KTsKLQotdm9pZCAgICAgICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2ZsdXNoICAgICAgICAgICAgKFJUUEppdHRlckJ1ZmZlciAqamJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRnVuYyBmcmVlX2Z1bmMsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLWdib29sZWFuICAgICAgICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9pc19idWZmZXJpbmcgICAgIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmKTsKLXZvaWQgICAgICAgICAgICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9zZXRfYnVmZmVyaW5nICAgIChSVFBKaXR0ZXJCdWZmZXIgKiBqYnVmLCBnYm9vbGVhbiBidWZmZXJpbmcpOwotZ2ludCAgICAgICAgICAgICAgICAgIHJ0cF9qaXR0ZXJfYnVmZmVyX2dldF9wZXJjZW50ICAgICAgKFJUUEppdHRlckJ1ZmZlciAqIGpidWYpOwotCi1ndWludCAgICAgICAgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfbnVtX3BhY2tldHMgICAgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmKTsKLWd1aW50MzIgICAgICAgICAgICAgICBydHBfaml0dGVyX2J1ZmZlcl9nZXRfdHNfZGlmZiAgICAgIChSVFBKaXR0ZXJCdWZmZXIgKmpidWYpOwotCi12b2lkICAgICAgICAgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfZ2V0X3N5bmMgICAgICAgICAoUlRQSml0dGVyQnVmZmVyICpqYnVmLCBndWludDY0ICpydHB0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgKnRpbWVzdGFtcCwgZ3VpbnQzMiAqY2xvY2tfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICpsYXN0X3J0cHRpbWUpOwotCi1Hc3RDbG9ja1RpbWUgICAgICAgICAgcnRwX2ppdHRlcl9idWZmZXJfY2FsY3VsYXRlX3B0cyAgICAoUlRQSml0dGVyQnVmZmVyICogamJ1ZiwgR3N0Q2xvY2tUaW1lIGR0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHJ0cHRpbWUsIEdzdENsb2NrVGltZSBiYXNlX3RpbWUpOwotCi0jZW5kaWYgLyogX19SVFBfSklUVEVSX0JVRkZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYyBiL2dzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RiODllMC4uMDAwMDAwMAotLS0gYS9nc3QvcnRwbWFuYWdlci9ydHBzZXNzaW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0Mzg4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBGSVhNRSAwLjExOiBzdXBwcmVzcyB3YXJuaW5ncyBmb3IgZGVwcmVjYXRlZCBBUEkgc3VjaCBhcyBHVmFsdWVBcnJheQotICogd2l0aCBuZXdlciBHTGliIHZlcnNpb25zICg+PSAyLjMxLjApICovCi0jZGVmaW5lIEdMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRjcGJ1ZmZlci5oPgotCi0jaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0LXByaXZhdGUuaD4KLQotI2luY2x1ZGUgInJ0cHNlc3Npb24uaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwX3Nlc3Npb25fZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgcnRwX3Nlc3Npb25fZGVidWcKLQotLyogc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBTSUdOQUxfR0VUX1NPVVJDRV9CWV9TU1JDLAotICBTSUdOQUxfT05fTkVXX1NTUkMsCi0gIFNJR05BTF9PTl9TU1JDX0NPTExJU0lPTiwKLSAgU0lHTkFMX09OX1NTUkNfVkFMSURBVEVELAotICBTSUdOQUxfT05fU1NSQ19BQ1RJVkUsCi0gIFNJR05BTF9PTl9TU1JDX1NERVMsCi0gIFNJR05BTF9PTl9CWUVfU1NSQywKLSAgU0lHTkFMX09OX0JZRV9USU1FT1VULAotICBTSUdOQUxfT05fVElNRU9VVCwKLSAgU0lHTkFMX09OX1NFTkRFUl9USU1FT1VULAotICBTSUdOQUxfT05fU0VORElOR19SVENQLAotICBTSUdOQUxfT05fQVBQX1JUQ1AsCi0gIFNJR05BTF9PTl9GRUVEQkFDS19SVENQLAotICBTSUdOQUxfU0VORF9SVENQLAotICBTSUdOQUxfU0VORF9SVENQX0ZVTEwsCi0gIFNJR05BTF9PTl9SRUNFSVZJTkdfUlRDUCwKLSAgU0lHTkFMX09OX05FV19TRU5ERVJfU1NSQywKLSAgU0lHTkFMX09OX1NFTkRFUl9TU1JDX0FDVElWRSwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9JTlRFUk5BTF9TT1VSQ0UgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfQkFORFdJRFRIICAgICAgICAgICAgMC4wCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9GUkFDVElPTiAgICAgICAgUlRQX1NUQVRTX1JUQ1BfRlJBQ1RJT04KLSNkZWZpbmUgREVGQVVMVF9SVENQX1JSX0JBTkRXSURUSCAgICAtMQotI2RlZmluZSBERUZBVUxUX1JUQ1BfUlNfQkFORFdJRFRIICAgIC0xCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9NVFUgICAgICAgICAgICAgMTQwMAotI2RlZmluZSBERUZBVUxUX1NERVMgICAgICAgICAgICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9OVU1fU09VUkNFUyAgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfTlVNX0FDVElWRV9TT1VSQ0VTICAgMAotI2RlZmluZSBERUZBVUxUX1NPVVJDRVMgICAgICAgICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9SVENQX01JTl9JTlRFUlZBTCAgICAoUlRQX1NUQVRTX01JTl9JTlRFUlZBTCAqIEdTVF9TRUNPTkQpCi0jZGVmaW5lIERFRkFVTFRfUlRDUF9GRUVEQkFDS19SRVRFTlRJT05fV0lORE9XICgyICogR1NUX1NFQ09ORCkKLSNkZWZpbmUgREVGQVVMVF9SVENQX0lNTUVESUFURV9GRUVEQkFDS19USFJFU0hPTEQgKDMpCi0jZGVmaW5lIERFRkFVTFRfUFJPQkFUSU9OICAgICAgICAgICAgUlRQX0RFRkFVTFRfUFJPQkFUSU9OCi0jZGVmaW5lIERFRkFVTFRfTUFYX0RST1BPVVRfVElNRSAgICAgNjAwMDAKLSNkZWZpbmUgREVGQVVMVF9NQVhfTUlTT1JERVJfVElNRSAgICAyMDAwCi0jZGVmaW5lIERFRkFVTFRfUlRQX1BST0ZJTEUgICAgICAgICAgR1NUX1JUUF9QUk9GSUxFX0FWUAotI2RlZmluZSBERUZBVUxUX1JUQ1BfUkVEVUNFRF9TSVpFICAgIEZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0lOVEVSTkFMX1NTUkMsCi0gIFBST1BfSU5URVJOQUxfU09VUkNFLAotICBQUk9QX0JBTkRXSURUSCwKLSAgUFJPUF9SVENQX0ZSQUNUSU9OLAotICBQUk9QX1JUQ1BfUlJfQkFORFdJRFRILAotICBQUk9QX1JUQ1BfUlNfQkFORFdJRFRILAotICBQUk9QX1JUQ1BfTVRVLAotICBQUk9QX1NERVMsCi0gIFBST1BfTlVNX1NPVVJDRVMsCi0gIFBST1BfTlVNX0FDVElWRV9TT1VSQ0VTLAotICBQUk9QX1NPVVJDRVMsCi0gIFBST1BfRkFWT1JfTkVXLAotICBQUk9QX1JUQ1BfTUlOX0lOVEVSVkFMLAotICBQUk9QX1JUQ1BfRkVFREJBQ0tfUkVURU5USU9OX1dJTkRPVywKLSAgUFJPUF9SVENQX0lNTUVESUFURV9GRUVEQkFDS19USFJFU0hPTEQsCi0gIFBST1BfUFJPQkFUSU9OLAotICBQUk9QX01BWF9EUk9QT1VUX1RJTUUsCi0gIFBST1BfTUFYX01JU09SREVSX1RJTUUsCi0gIFBST1BfU1RBVFMsCi0gIFBST1BfUlRQX1BST0ZJTEUsCi0gIFBST1BfUlRDUF9SRURVQ0VEX1NJWkUKLX07Ci0KLS8qIHVwZGF0ZSBhdmVyYWdlIHBhY2tldCBzaXplICovCi0jZGVmaW5lIElOSVRfQVZHKGF2ZywgdmFsKSBcCi0gICAoYXZnKSA9ICh2YWwpOwotI2RlZmluZSBVUERBVEVfQVZHKGF2ZywgdmFsKSAgICAgICAgICAgIFwKLSAgaWYgKChhdmcpID09IDApICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoYXZnKSA9ICh2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIChhdmcpID0gKCh2YWwpICsgKDE1ICogKGF2ZykpKSA+PiA0OwotCi0KLS8qIEdPYmplY3Qgdm1ldGhvZHMgKi8KLXN0YXRpYyB2b2lkIHJ0cF9zZXNzaW9uX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIHJ0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIHJ0cF9zZXNzaW9uX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIGdib29sZWFuIHJ0cF9zZXNzaW9uX3NlbmRfcnRjcCAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgR3N0Q2xvY2tUaW1lIG1heF9kZWxheSk7Ci0KLXN0YXRpYyBndWludCBydHBfc2Vzc2lvbl9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi1HX0RFRklORV9UWVBFIChSVFBTZXNzaW9uLCBydHBfc2Vzc2lvbiwgR19UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyBndWludDMyIHJ0cF9zZXNzaW9uX2NyZWF0ZV9uZXdfc3NyYyAoUlRQU2Vzc2lvbiAqIHNlc3MpOwotc3RhdGljIFJUUFNvdXJjZSAqb2J0YWluX3NvdXJjZSAoUlRQU2Vzc2lvbiAqIHNlc3MsIGd1aW50MzIgc3NyYywKLSAgICBnYm9vbGVhbiAqIGNyZWF0ZWQsIFJUUFBhY2tldEluZm8gKiBwaW5mbywgZ2Jvb2xlYW4gcnRwKTsKLXN0YXRpYyBSVFBTb3VyY2UgKm9idGFpbl9pbnRlcm5hbF9zb3VyY2UgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIGd1aW50MzIgc3NyYywgZ2Jvb2xlYW4gKiBjcmVhdGVkLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIHJ0cF9zZXNzaW9uX3NjaGVkdWxlX2J5ZV9sb2NrZWQgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUpOwotc3RhdGljIEdzdENsb2NrVGltZSBjYWxjdWxhdGVfcnRjcF9pbnRlcnZhbCAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgZ2Jvb2xlYW4gZGV0ZXJtaW5pc3RpYywgZ2Jvb2xlYW4gZmlyc3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWFjY3VtdWxhdGVfdHJ1ZXMgKEdTaWduYWxJbnZvY2F0aW9uSGludCAqIGloaW50LCBHVmFsdWUgKiByZXR1cm5fYWNjdSwKLSAgICBjb25zdCBHVmFsdWUgKiBoYW5kbGVyX3JldHVybiwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgaWYgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGhhbmRsZXJfcmV0dXJuKSkKLSAgICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXR1cm5fYWNjdSwgVFJVRSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9jbGFzc19pbml0IChSVFBTZXNzaW9uQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gcnRwX3Nlc3Npb25fZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHJ0cF9zZXNzaW9uX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gcnRwX3Nlc3Npb25fZ2V0X3Byb3BlcnR5OwotCi0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpnZXQtc291cmNlLWJ5LXNzcmM6Ci0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNzcmM6IHRoZSBTU1JDIG9mIHRoZSBSVFBTb3VyY2UKLSAgICoKLSAgICogUmVxdWVzdCB0aGUgI1JUUFNvdXJjZSBvYmplY3Qgd2l0aCBTU1JDIEBzc3JjIGluIEBzZXNzaW9uLgotICAgKi8KLSAgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfR0VUX1NPVVJDRV9CWV9TU1JDXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJnZXQtc291cmNlLWJ5LXNzcmMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04sIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLAotICAgICAgICAgIGdldF9zb3VyY2VfYnlfc3NyYyksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAotICAgICAgUlRQX1RZUEVfU09VUkNFLCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgLyoqCi0gICAqIFJUUFNlc3Npb246Om9uLW5ldy1zc3JjOgotICAgKiBAc2Vzc2lvbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzcmM6IHRoZSBuZXcgUlRQU291cmNlCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhIG5ldyBTU1JDIHRoYXQgZW50ZXJlZCBAc2Vzc2lvbi4KLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX05FV19TU1JDXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1uZXctc3NyYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIG9uX25ld19zc3JjKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLAotICAgICAgUlRQX1RZUEVfU09VUkNFKTsKLSAgLyoqCi0gICAqIFJUUFNlc3Npb246Om9uLXNzcmMtY29sbGlzaW9uOgotICAgKiBAc2Vzc2lvbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzcmM6IHRoZSAjUlRQU291cmNlIHRoYXQgY2F1c2VkIGEgY29sbGlzaW9uCi0gICAqCi0gICAqIE5vdGlmeSB3aGVuIHdlIGhhdmUgYW4gU1NSQyBjb2xsaXNpb24KLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NTUkNfQ09MTElTSU9OXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1zc3JjLWNvbGxpc2lvbiIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIG9uX3NzcmNfY29sbGlzaW9uKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLAotICAgICAgUlRQX1RZUEVfU09VUkNFKTsKLSAgLyoqCi0gICAqIFJUUFNlc3Npb246Om9uLXNzcmMtdmFsaWRhdGVkOgotICAgKiBAc2Vzc2lvbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzcmM6IHRoZSBuZXcgdmFsaWRhdGVkIFJUUFNvdXJjZQotICAgKgotICAgKiBOb3RpZnkgb2YgYSBuZXcgU1NSQyB0aGF0IGJlY2FtZSB2YWxpZGF0ZWQuCi0gICAqLwotICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX1ZBTElEQVRFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy12YWxpZGF0ZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBvbl9zc3JjX3ZhbGlkYXRlZCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULCBHX1RZUEVfTk9ORSwgMSwKLSAgICAgIFJUUF9UWVBFX1NPVVJDRSk7Ci0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpvbi1zc3JjLWFjdGl2ZToKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3JjOiB0aGUgYWN0aXZlIFJUUFNvdXJjZQotICAgKgotICAgKiBOb3RpZnkgb2YgYSBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuCi0gICAqLwotICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX0FDVElWRV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy1hY3RpdmUiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBvbl9zc3JjX2FjdGl2ZSksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULCBHX1RZUEVfTk9ORSwgMSwKLSAgICAgIFJUUF9UWVBFX1NPVVJDRSk7Ci0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpvbi1zc3JjLXNkZXM6Ci0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNyYzogdGhlIFJUUFNvdXJjZQotICAgKgotICAgKiBOb3RpZnkgdGhhdCBhIG5ldyBTREVTIHdhcyByZWNlaXZlZCBmb3IgU1NSQy4KLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NTUkNfU0RFU10gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy1zZGVzIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKFJUUFNlc3Npb25DbGFzcywgb25fc3NyY19zZGVzKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLAotICAgICAgUlRQX1RZUEVfU09VUkNFKTsKLSAgLyoqCi0gICAqIFJUUFNlc3Npb246Om9uLWJ5ZS1zc3JjOgotICAgKiBAc2Vzc2lvbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzcmM6IHRoZSBSVFBTb3VyY2UgdGhhdCB3ZW50IGF3YXkKLSAgICoKLSAgICogTm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBiZWNhbWUgaW5hY3RpdmUgYmVjYXVzZSBvZiBhIEJZRSBwYWNrZXQuCi0gICAqLwotICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9CWUVfU1NSQ10gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tYnllLXNzcmMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBvbl9ieWVfc3NyYyksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULCBHX1RZUEVfTk9ORSwgMSwKLSAgICAgIFJUUF9UWVBFX1NPVVJDRSk7Ci0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpvbi1ieWUtdGltZW91dDoKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3JjOiB0aGUgUlRQU291cmNlIHRoYXQgdGltZWQgb3V0Ci0gICAqCi0gICAqIE5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgaGFzIHRpbWVkIG91dCBiZWNhdXNlIG9mIEJZRQotICAgKi8KLSAgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fQllFX1RJTUVPVVRdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLWJ5ZS10aW1lb3V0IiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKFJUUFNlc3Npb25DbGFzcywgb25fYnllX3RpbWVvdXQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsIDEsCi0gICAgICBSVFBfVFlQRV9TT1VSQ0UpOwotICAvKioKLSAgICogUlRQU2Vzc2lvbjo6b24tdGltZW91dDoKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3JjOiB0aGUgUlRQU291cmNlIHRoYXQgdGltZWQgb3V0Ci0gICAqCi0gICAqIE5vdGlmeSBvZiBhbiBTU1JDIHRoYXQgaGFzIHRpbWVkIG91dAotICAgKi8KLSAgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fVElNRU9VVF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tdGltZW91dCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIG9uX3RpbWVvdXQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsIDEsCi0gICAgICBSVFBfVFlQRV9TT1VSQ0UpOwotICAvKioKLSAgICogUlRQU2Vzc2lvbjo6b24tc2VuZGVyLXRpbWVvdXQ6Ci0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNyYzogdGhlIFJUUFNvdXJjZSB0aGF0IHRpbWVkIG91dAotICAgKgotICAgKiBOb3RpZnkgb2YgYW4gU1NSQyB0aGF0IHdhcyBhIHNlbmRlciBidXQgdGltZWQgb3V0IGFuZCBiZWNhbWUgYSByZWNlaXZlci4KLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9USU1FT1VUXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1zZW5kZXItdGltZW91dCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIG9uX3NlbmRlcl90aW1lb3V0KSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLAotICAgICAgUlRQX1RZUEVfU09VUkNFKTsKLQotICAvKioKLSAgICogUlRQU2Vzc2lvbjo6b24tc2VuZGluZy1ydGNwCi0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQGJ1ZmZlcjogdGhlICNHc3RCdWZmZXIgY29udGFpbmluZyB0aGUgUlRDUCBwYWNrZXQgYWJvdXQgdG8gYmUgc2VudAotICAgKiBAZWFybHk6ICVUUlVFIGlmIHRoZSBwYWNrZXQgaXMgZWFybHksICVGQUxTRSBpZiBpdCBpcyByZWd1bGFyCi0gICAqCi0gICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgYmVmb3JlIHNlbmRpbmcgYW4gUlRDUCBwYWNrZXQsIGl0IGNhbiBiZSB1c2VkCi0gICAqIHRvIGFkZCBleHRyYSBSVENQIFBhY2tldHMuCi0gICAqCi0gICAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBSVENQIGJ1ZmZlciBzaG91bGQgTk9UIGJlIHN1cHByZXNzZWQsICVGQUxTRQotICAgKiBpZiBzdXBwcmVzc2luZyBpdCBpcyBhY2NlcHRhYmxlCi0gICAqLwotICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TRU5ESU5HX1JUQ1BdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNlbmRpbmctcnRjcCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIG9uX3NlbmRpbmdfcnRjcCksCi0gICAgICBhY2N1bXVsYXRlX3RydWVzLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX0JPT0xFQU4sIDIsCi0gICAgICBHU1RfVFlQRV9CVUZGRVIgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSwgR19UWVBFX0JPT0xFQU4pOwotCi0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpvbi1hcHAtcnRjcDoKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3VidHlwZTogVGhlIHN1YnR5cGUgb2YgdGhlIHBhY2tldAotICAgKiBAc3NyYzogVGhlIFNTUkMvQ1NSQyBvZiB0aGUgcGFja2V0Ci0gICAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGFja2V0Ci0gICAqIEBkYXRhOiBhICNHc3RCdWZmZXIgd2l0aCB0aGUgYXBwbGljYXRpb24tZGVwZW5kYW50IGRhdGEgb3IgJU5VTEwgaWYKLSAgICogdGhlcmUgd2FzIG5vIGRhdGEKLSAgICoKLSAgICogTm90aWZ5IHRoYXQgYSBSVENQIEFQUCBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQKLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0FQUF9SVENQXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1hcHAtcnRjcCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIG9uX2FwcF9ydGNwKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgNCwKLSAgICAgIEdfVFlQRV9VSU5ULCBHX1RZUEVfVUlOVCwgR19UWVBFX1NUUklORywgR1NUX1RZUEVfQlVGRkVSKTsKLQotICAvKioKLSAgICogUlRQU2Vzc2lvbjo6b24tZmVlZGJhY2stcnRjcDoKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAdHlwZTogVHlwZSBvZiBSVENQIHBhY2tldCwgd2lsbCBiZSAlR1NUX1JUQ1BfVFlQRV9SVFBGQiBvcgotICAgKiAgJUdTVF9SVENQX1RZUEVfUlRQRkIKLSAgICogQGZidHlwZTogVGhlIHR5cGUgb2YgUlRDUCBGQiBwYWNrZXQsIHByb2JhYmx5IHBhcnQgb2YgI0dzdFJUQ1BGQlR5cGUKLSAgICogQHNlbmRlcl9zc3JjOiBUaGUgU1NSQyBvZiB0aGUgc2VuZGVyCi0gICAqIEBtZWRpYV9zc3JjOiBUaGUgU1NSQyBvZiB0aGUgbWVkaWEgdGhpcyByZWZlcnMgdG8KLSAgICogQGZjaTogYSAjR3N0QnVmZmVyIHdpdGggdGhlIEZDSSBkYXRhIGZyb20gdGhlIEZCIHBhY2tldCBvciAlTlVMTCBpZgotICAgKiB0aGVyZSB3YXMgbm8gRkNJCi0gICAqCi0gICAqIE5vdGlmeSB0aGF0IGEgUlRDUCBmZWVkYmFjayBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQKLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0ZFRURCQUNLX1JUQ1BdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLWZlZWRiYWNrLXJ0Y3AiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBvbl9mZWVkYmFja19ydGNwKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgNSwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCwgR19UWVBFX1VJTlQsIEdfVFlQRV9VSU5ULCBHU1RfVFlQRV9CVUZGRVIpOwotCi0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpzZW5kLXJ0Y3A6Ci0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQG1heF9kZWxheTogVGhlIG1heGltdW0gZGVsYXkgYWZ0ZXIgd2hpY2ggdGhlIGZlZWRiYWNrIHdpbGwgbm90IGJlIHVzZWZ1bAotICAgKiAgYW55bW9yZQotICAgKgotICAgKiBSZXF1ZXN0cyB0aGF0IHRoZSAjUlRQU2Vzc2lvbiBpbml0aWF0ZSBhIG5ldyBSVENQIHBhY2tldCBhcyBzb29uIGFzCi0gICAqIHBvc3NpYmxlIHdpdGhpbiB0aGUgcmVxdWVzdGVkIGRlbGF5LgotICAgKgotICAgKiBUaGlzIHNldHMgZmVlZGJhY2sgdG8gJVRSVUUgaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUuCi0gICAqLwotICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9TRU5EX1JUQ1BdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInNlbmQtcnRjcCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBzZW5kX3J0Y3ApLCBOVUxMLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVDY0KTsKLQotICAvKioKLSAgICogUlRQU2Vzc2lvbjo6c2VuZC1ydGNwLWZ1bGw6Ci0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQG1heF9kZWxheTogVGhlIG1heGltdW0gZGVsYXkgYWZ0ZXIgd2hpY2ggdGhlIGZlZWRiYWNrIHdpbGwgbm90IGJlIHVzZWZ1bAotICAgKiAgYW55bW9yZQotICAgKgotICAgKiBSZXF1ZXN0cyB0aGF0IHRoZSAjUlRQU2Vzc2lvbiBpbml0aWF0ZSBhIG5ldyBSVENQIHBhY2tldCBhcyBzb29uIGFzCi0gICAqIHBvc3NpYmxlIHdpdGhpbiB0aGUgcmVxdWVzdGVkIGRlbGF5LgotICAgKgotICAgKiBUaGlzIHNldHMgZmVlZGJhY2sgdG8gJVRSVUUgaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUuCi0gICAqCi0gICAqIFJldHVybnM6IFRSVUUgaWYgdGhlIG5ldyBSVENQIHBhY2tldCBjb3VsZCBiZSBzY2hlZHVsZWQgd2l0aGluIHRoZQotICAgKiByZXF1ZXN0ZWQgZGVsYXksIEZBTFNFIG90aGVyd2lzZS4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfU0VORF9SVENQX0ZVTExdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInNlbmQtcnRjcC1mdWxsIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OLAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChSVFBTZXNzaW9uQ2xhc3MsIHNlbmRfcnRjcCksIE5VTEwsIE5VTEwsCi0gICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX0JPT0xFQU4sIDEsIEdfVFlQRV9VSU5UNjQpOwotCi0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpvbi1yZWNlaXZpbmctcnRjcAotICAgKiBAc2Vzc2lvbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBidWZmZXI6IHRoZSAjR3N0QnVmZmVyIGNvbnRhaW5pbmcgdGhlIFJUQ1AgcGFja2V0IHRoYXQgd2FzIHJlY2VpdmVkCi0gICAqCi0gICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiByZWNlaXZpbmcgYW4gUlRDUCBwYWNrZXQgYmVmb3JlIGl0IGlzIGhhbmRsZWQKLSAgICogYnkgdGhlIHNlc3Npb24uIEl0IGNhbiBiZSB1c2VkIHRvIGV4dHJhY3QgY3VzdG9tIGluZm9ybWF0aW9uIGZyb20gUlRDUCBwYWNrZXRzLgotICAgKgotICAgKiBTaW5jZTogMS42Ci0gICAqLwotICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9SRUNFSVZJTkdfUlRDUF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tcmVjZWl2aW5nLXJ0Y3AiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBvbl9yZWNlaXZpbmdfcnRjcCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsCi0gICAgICBHU1RfVFlQRV9CVUZGRVIgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7Ci0KLSAgLyoqCi0gICAqIFJUUFNlc3Npb246Om9uLW5ldy1zZW5kZXItc3NyYzoKLSAgICogQHNlc3Npb246IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc3JjOiB0aGUgbmV3IHNlbmRlciBSVFBTb3VyY2UKLSAgICoKLSAgICogTm90aWZ5IG9mIGEgbmV3IHNlbmRlciBTU1JDIHRoYXQgZW50ZXJlZCBAc2Vzc2lvbi4KLSAgICoKLSAgICogU2luY2U6IDEuOAotICAgKi8KLSAgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fTkVXX1NFTkRFUl9TU1JDXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1uZXctc2VuZGVyLXNzcmMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoUlRQU2Vzc2lvbkNsYXNzLCBvbl9uZXdfc2VuZGVyX3NzcmMpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsIDEsCi0gICAgICBSVFBfVFlQRV9TT1VSQ0UpOwotCi0gIC8qKgotICAgKiBSVFBTZXNzaW9uOjpvbi1zZW5kZXItc3NyYy1hY3RpdmU6Ci0gICAqIEBzZXNzaW9uOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNyYzogdGhlIGFjdGl2ZSBzZW5kZXIgUlRQU291cmNlCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhIHNlbmRlciBTU1JDIHRoYXQgaXMgYWN0aXZlLCBpLmUuLCBzZW5kaW5nIFJUQ1AuCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICovCi0gIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NFTkRFUl9TU1JDX0FDVElWRV0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc2VuZGVyLXNzcmMtYWN0aXZlIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKFJUUFNlc3Npb25DbGFzcywKLSAgICAgICAgICBvbl9zZW5kZXJfc3NyY19hY3RpdmUpLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAotICAgICAgR19UWVBFX05PTkUsIDEsIFJUUF9UWVBFX1NPVVJDRSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JTlRFUk5BTF9TU1JDLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJpbnRlcm5hbC1zc3JjIiwgIkludGVybmFsIFNTUkMiLAotICAgICAgICAgICJUaGUgaW50ZXJuYWwgU1NSQyB1c2VkIGZvciB0aGUgc2Vzc2lvbiAoZGVwcmVjYXRlZCkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JTlRFUk5BTF9TT1VSQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgiaW50ZXJuYWwtc291cmNlIiwgIkludGVybmFsIFNvdXJjZSIsCi0gICAgICAgICAgIlRoZSBpbnRlcm5hbCBzb3VyY2UgZWxlbWVudCBvZiB0aGUgc2Vzc2lvbiAoZGVwcmVjYXRlZCkiLAotICAgICAgICAgIFJUUF9UWVBFX1NPVVJDRSwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JBTkRXSURUSCwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJiYW5kd2lkdGgiLCAiQmFuZHdpZHRoIiwKLSAgICAgICAgICAiVGhlIGJhbmR3aWR0aCBvZiB0aGUgc2Vzc2lvbiBpbiBiaXRzIHBlciBzZWNvbmQgKDAgZm9yIGF1dG8tZGlzY292ZXIpIiwKLSAgICAgICAgICAwLjAsIEdfTUFYRE9VQkxFLCBERUZBVUxUX0JBTkRXSURUSCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUQ1BfRlJBQ1RJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgicnRjcC1mcmFjdGlvbiIsICJSVENQIEZyYWN0aW9uIiwKLSAgICAgICAgICAiVGhlIGZyYWN0aW9uIG9mIHRoZSBiYW5kd2lkdGggdXNlZCBmb3IgUlRDUCBpbiBiaXRzIHBlciBzZWNvbmQgKG9yIGFzIGEgcmVhbCBmcmFjdGlvbiBvZiB0aGUgUlRQIGJhbmR3aWR0aCBpZiA8IDEpIiwKLSAgICAgICAgICAwLjAsIEdfTUFYRE9VQkxFLCBERUZBVUxUX1JUQ1BfRlJBQ1RJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVENQX1JSX0JBTkRXSURUSCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJydGNwLXJyLWJhbmR3aWR0aCIsICJSVENQIFJSIGJhbmR3aWR0aCIsCi0gICAgICAgICAgIlRoZSBSVENQIGJhbmR3aWR0aCB1c2VkIGZvciByZWNlaXZlcnMgaW4gYml0cyBwZXIgc2Vjb25kICgtMSA9IGRlZmF1bHQpIiwKLSAgICAgICAgICAtMSwgR19NQVhJTlQsIERFRkFVTFRfUlRDUF9SUl9CQU5EV0lEVEgsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVENQX1JTX0JBTkRXSURUSCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJydGNwLXJzLWJhbmR3aWR0aCIsICJSVENQIFJTIGJhbmR3aWR0aCIsCi0gICAgICAgICAgIlRoZSBSVENQIGJhbmR3aWR0aCB1c2VkIGZvciBzZW5kZXJzIGluIGJpdHMgcGVyIHNlY29uZCAoLTEgPSBkZWZhdWx0KSIsCi0gICAgICAgICAgLTEsIEdfTUFYSU5ULCBERUZBVUxUX1JUQ1BfUlNfQkFORFdJRFRILAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRDUF9NVFUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInJ0Y3AtbXR1IiwgIlJUQ1AgTVRVIiwKLSAgICAgICAgICAiVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgUlRDUCBwYWNrZXRzIiwKLSAgICAgICAgICAxNiwgR19NQVhJTlQxNiwgREVGQVVMVF9SVENQX01UVSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NERVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJzZGVzIiwgIlNERVMiLAotICAgICAgICAgICJUaGUgU0RFUyBpdGVtcyBvZiB0aGlzIHNlc3Npb24iLAotICAgICAgICAgIEdTVF9UWVBFX1NUUlVDVFVSRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9OVU1fU09VUkNFUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibnVtLXNvdXJjZXMiLCAiTnVtIFNvdXJjZXMiLAotICAgICAgICAgICJUaGUgbnVtYmVyIG9mIHNvdXJjZXMgaW4gdGhlIHNlc3Npb24iLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgREVGQVVMVF9OVU1fU09VUkNFUywgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX05VTV9BQ1RJVkVfU09VUkNFUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibnVtLWFjdGl2ZS1zb3VyY2VzIiwgIk51bSBBY3RpdmUgU291cmNlcyIsCi0gICAgICAgICAgIlRoZSBudW1iZXIgb2YgYWN0aXZlIHNvdXJjZXMgaW4gdGhlIHNlc3Npb24iLCAwLCBHX01BWFVJTlQsCi0gICAgICAgICAgREVGQVVMVF9OVU1fQUNUSVZFX1NPVVJDRVMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIFJUUFNvdXJjZTo6c291cmNlcwotICAgKgotICAgKiBHZXQgYSBHVmFsdWUgQXJyYXkgb2YgYWxsIHNvdXJjZXMgaW4gdGhlIHNlc3Npb24uCi0gICAqCi0gICAqIDxleGFtcGxlPgotICAgKiA8dGl0bGU+R2V0dGluZyB0aGUgI1JUUFNvdXJjZXMgb2YgYSBzZXNzaW9uCi0gICAqIDxwcm9ncmFtbGlzdGluZz4KLSAgICogewotICAgKiAgIEdWYWx1ZUFycmF5ICphcnI7Ci0gICAqICAgR1ZhbHVlICp2YWw7Ci0gICAqICAgZ3VpbnQgaTsKLSAgICoKLSAgICogICBnX29iamVjdF9nZXQgKHNlc3MsICJzb3VyY2VzIiwgJmFyciwgTlVMTCk7Ci0gICAqCi0gICAqICAgZm9yIChpID0gMDsgaSA8IGFyci0+bl92YWx1ZXM7IGkrKykgewotICAgKiAgICAgUlRQU291cmNlICpzb3VyY2U7Ci0gICAqCi0gICAqICAgICB2YWwgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFyciwgaSk7Ci0gICAqICAgICBzb3VyY2UgPSBnX3ZhbHVlX2dldF9vYmplY3QgKHZhbCk7Ci0gICAqICAgfQotICAgKiAgIGdfdmFsdWVfYXJyYXlfZnJlZSAoYXJyKTsKLSAgICogfQotICAgKiA8L3Byb2dyYW1saXN0aW5nPgotICAgKiA8L2V4YW1wbGU+Ci0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NPVVJDRVMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJzb3VyY2VzIiwgIlNvdXJjZXMiLAotICAgICAgICAgICJBbiBhcnJheSBvZiBhbGwga25vd24gc291cmNlcyBpbiB0aGUgc2Vzc2lvbiIsCi0gICAgICAgICAgR19UWVBFX1ZBTFVFX0FSUkFZLCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkFWT1JfTkVXLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJmYXZvci1uZXciLCAiRmF2b3IgbmV3IHNvdXJjZXMiLAotICAgICAgICAgICJSZXNvbHZlIFNTUkMgY29uZmxpY3QgaW4gZmF2b3Igb2YgbmV3IHNvdXJjZXMiLCBGQUxTRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1JUQ1BfTUlOX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInJ0Y3AtbWluLWludGVydmFsIiwgIk1pbmltdW0gUlRDUCBpbnRlcnZhbCIsCi0gICAgICAgICAgIk1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBSZWd1bGFyIFJUQ1AgcGFja2V0IChpbiBucykiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1JUQ1BfTUlOX0lOVEVSVkFMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX1JUQ1BfRkVFREJBQ0tfUkVURU5USU9OX1dJTkRPVywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJydGNwLWZlZWRiYWNrLXJldGVudGlvbi13aW5kb3ciLAotICAgICAgICAgICJSVENQIEZlZWRiYWNrIHJldGVudGlvbiB3aW5kb3ciLAotICAgICAgICAgICJEdXJhdGlvbiBkdXJpbmcgd2hpY2ggUlRDUCBGZWVkYmFjayBwYWNrZXRzIGFyZSByZXRhaW5lZCAoaW4gbnMpIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQ2NCwgREVGQVVMVF9SVENQX0ZFRURCQUNLX1JFVEVOVElPTl9XSU5ET1csCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfUlRDUF9JTU1FRElBVEVfRkVFREJBQ0tfVEhSRVNIT0xELAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJydGNwLWltbWVkaWF0ZS1mZWVkYmFjay10aHJlc2hvbGQiLAotICAgICAgICAgICJSVENQIEltbWVkaWF0ZSBGZWVkYmFjayB0aHJlc2hvbGQiLAotICAgICAgICAgICJUaGUgbWF4aW11bSBudW1iZXIgb2YgbWVtYmVycyBvZiBhIFJUUCBzZXNzaW9uIGZvciB3aGljaCBpbW1lZGlhdGUiCi0gICAgICAgICAgIiBmZWVkYmFjayBpcyB1c2VkIChERVBSRUNBVEVEOiBoYXMgbm8gZWZmZWN0IGFuZCBpcyBub3QgbmVlZGVkKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX1JUQ1BfSU1NRURJQVRFX0ZFRURCQUNLX1RIUkVTSE9MRCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX0RFUFJFQ0FURUQpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BST0JBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgicHJvYmF0aW9uIiwgIk51bWJlciBvZiBwcm9iYXRpb25zIiwKLSAgICAgICAgICAiQ29uc2VjdXRpdmUgcGFja2V0IHNlcXVlbmNlIG51bWJlcnMgdG8gYWNjZXB0IHRoZSBzb3VyY2UiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9QUk9CQVRJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfRFJPUE9VVF9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtZHJvcG91dC10aW1lIiwgIk1heCBkcm9wb3V0IHRpbWUiLAotICAgICAgICAgICJUaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc3NpbmcgcGFja2V0cyB0b2xlcmF0ZWQuIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX0RST1BPVVRfVElNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9NSVNPUkRFUl9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtbWlzb3JkZXItdGltZSIsICJNYXggbWlzb3JkZXIgdGltZSIsCi0gICAgICAgICAgIlRoZSBtYXhpbXVtIHRpbWUgKG1pbGxpc2Vjb25kcykgb2YgbWlzb3JkZXJlZCBwYWNrZXRzIHRvbGVyYXRlZC4iLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfTUlTT1JERVJfVElNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogUlRQU2Vzc2lvbjo6c3RhdHM6Ci0gICAqCi0gICAqIFZhcmlvdXMgc2Vzc2lvbiBzdGF0aXN0aWNzLiBUaGlzIHByb3BlcnR5IHJldHVybnMgYSBHc3RTdHJ1Y3R1cmUKLSAgICogd2l0aCBuYW1lIGFwcGxpY2F0aW9uL3gtcnRwLXNlc3Npb24tc3RhdHMgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKLSAgICoKLSAgICogICJydHgtZHJvcC1jb3VudCIgIEdfVFlQRV9VSU5UICAgVGhlIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbiBldmVudHMKLSAgICogICAgICBkcm9wcGVkIChkdWUgdG8gYmFuZHdpZHRoIGNvbnN0cmFpbnRzKQotICAgKiAgInNlbnQtbmFjay1jb3VudCIgR19UWVBFX1VJTlQgICBOdW1iZXIgb2YgTkFDS3Mgc2VudAotICAgKiAgInJlY3YtbmFjay1jb3VudCIgR19UWVBFX1VJTlQgICBOdW1iZXIgb2YgTkFDS3MgcmVjZWl2ZWQKLSAgICogICJzb3VyY2Utc3RhdHMiICAgIEdfVFlQRV9CT1hFRCAgR1ZhbHVlQXJyYXkgb2YgI1JUUFNvdXJjZTo6c3RhdHMgZm9yIGFsbAotICAgKiAgICAgIFJUUCBzb3VyY2VzIChTaW5jZSAxLjgpCi0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU1RBVFMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJzdGF0cyIsICJTdGF0aXN0aWNzIiwKLSAgICAgICAgICAiVmFyaW91cyBzdGF0aXN0aWNzIiwgR1NUX1RZUEVfU1RSVUNUVVJFLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFBfUFJPRklMRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgicnRwLXByb2ZpbGUiLCAiUlRQIFByb2ZpbGUiLAotICAgICAgICAgICJSVFAgcHJvZmlsZSB0byB1c2UgZm9yIHRoaXMgc2Vzc2lvbiIsIEdTVF9UWVBFX1JUUF9QUk9GSUxFLAotICAgICAgICAgIERFRkFVTFRfUlRQX1BST0ZJTEUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUlRDUF9SRURVQ0VEX1NJWkUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInJ0Y3AtcmVkdWNlZC1zaXplIiwgIlJUQ1AgUmVkdWNlZCBTaXplIiwKLSAgICAgICAgICAiVXNlIFJlZHVjZWQgU2l6ZSBSVENQIGZvciBmZWVkYmFjayBwYWNrZXRzIiwKLSAgICAgICAgICBERUZBVUxUX1JUQ1BfUkVEVUNFRF9TSVpFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGtsYXNzLT5nZXRfc291cmNlX2J5X3NzcmMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKHJ0cF9zZXNzaW9uX2dldF9zb3VyY2VfYnlfc3NyYyk7Ci0gIGtsYXNzLT5zZW5kX3J0Y3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAocnRwX3Nlc3Npb25fc2VuZF9ydGNwKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwX3Nlc3Npb25fZGVidWcsICJydHBzZXNzaW9uIiwgMCwgIlJUUCBTZXNzaW9uIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9pbml0IChSVFBTZXNzaW9uICogc2VzcykKLXsKLSAgZ2ludCBpOwotICBnY2hhciAqc3RyOwotCi0gIGdfbXV0ZXhfaW5pdCAoJnNlc3MtPmxvY2spOwotICBzZXNzLT5rZXkgPSBnX3JhbmRvbV9pbnQgKCk7Ci0gIHNlc3MtPm1hc2tfaWR4ID0gMDsKLSAgc2Vzcy0+bWFzayA9IDA7Ci0KLSAgLyogVE9ETzogV2UgY3VycmVudGx5IG9ubHkgdXNlIHRoZSBmaXJzdCBoYXNoIHRhYmxlIGJ1dCB0aGlzIGlzIHRoZQotICAgKiBiZWdpbm5pbmcgb2YgYW4gaW1wbGVtZW50YXRpb24gZm9yIFJGQzI3NjIKLSAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0gICAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTsgaSsrKSB7Ci0gICAgc2Vzcy0+c3NyY3NbaV0gPQotICAgICAgICBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgIChHRGVzdHJveU5vdGlmeSkgZ19vYmplY3RfdW5yZWYpOwotICB9Ci0KLSAgcnRwX3N0YXRzX2luaXRfZGVmYXVsdHMgKCZzZXNzLT5zdGF0cyk7Ci0gIElOSVRfQVZHIChzZXNzLT5zdGF0cy5hdmdfcnRjcF9wYWNrZXRfc2l6ZSwgMTAwKTsKLSAgcnRwX3N0YXRzX3NldF9taW5faW50ZXJ2YWwgKCZzZXNzLT5zdGF0cywKLSAgICAgIChnZG91YmxlKSBERUZBVUxUX1JUQ1BfTUlOX0lOVEVSVkFMIC8gR1NUX1NFQ09ORCk7Ci0KLSAgc2Vzcy0+cmVjYWxjX2JhbmR3aWR0aCA9IFRSVUU7Ci0gIHNlc3MtPmJhbmR3aWR0aCA9IERFRkFVTFRfQkFORFdJRFRIOwotICBzZXNzLT5ydGNwX2JhbmR3aWR0aCA9IERFRkFVTFRfUlRDUF9GUkFDVElPTjsKLSAgc2Vzcy0+cnRjcF9ycl9iYW5kd2lkdGggPSBERUZBVUxUX1JUQ1BfUlJfQkFORFdJRFRIOwotICBzZXNzLT5ydGNwX3JzX2JhbmR3aWR0aCA9IERFRkFVTFRfUlRDUF9SU19CQU5EV0lEVEg7Ci0KLSAgLyogZGVmYXVsdCBVRFAgaGVhZGVyIGxlbmd0aCAqLwotICBzZXNzLT5oZWFkZXJfbGVuID0gMjg7Ci0gIHNlc3MtPm10dSA9IERFRkFVTFRfUlRDUF9NVFU7Ci0KLSAgc2Vzcy0+cHJvYmF0aW9uID0gREVGQVVMVF9QUk9CQVRJT047Ci0gIHNlc3MtPm1heF9kcm9wb3V0X3RpbWUgPSBERUZBVUxUX01BWF9EUk9QT1VUX1RJTUU7Ci0gIHNlc3MtPm1heF9taXNvcmRlcl90aW1lID0gREVGQVVMVF9NQVhfTUlTT1JERVJfVElNRTsKLQotICAvKiBzb21lIGRlZmF1bHQgU0RFUyBlbnRyaWVzICovCi0gIHNlc3MtPnNkZXMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zZGVzIik7Ci0KLSAgLyogd2UgZG8gbm90IHdhbnQgdG8gbGVhayBkZXRhaWxzIGxpa2UgdGhlIHVzZXJuYW1lIG9yIGhvc3RuYW1lIGhlcmUgKi8KLSAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgidXNlciV1QGhvc3QtJXgiLCBnX3JhbmRvbV9pbnQgKCksIGdfcmFuZG9tX2ludCAoKSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzZXNzLT5zZGVzLCAiY25hbWUiLCBHX1RZUEVfU1RSSU5HLCBzdHIsIE5VTEwpOwotICBnX2ZyZWUgKHN0cik7Ci0KLSNpZiAwCi0gIC8qIHdlIGRvIG5vdCB3YW50IHRvIGxlYWsgdGhlIHVzZXIncyByZWFsIG5hbWUgaGVyZSAqLwotICBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJBbm9uJXUiLCBnX3JhbmRvbV9pbnQgKCkpOwotICBnc3Rfc3RydWN0dXJlX3NldCAoc2RlcywgIm5hbWUiLCBHX1RZUEVfU1RSSU5HLCBzdHIsIE5VTEwpOwotICBnX2ZyZWUgKHN0cik7Ci0jZW5kaWYKLQotICBnc3Rfc3RydWN0dXJlX3NldCAoc2Vzcy0+c2RlcywgInRvb2wiLCBHX1RZUEVfU1RSSU5HLCAiR1N0cmVhbWVyIiwgTlVMTCk7Ci0KLSAgLyogdGhpcyBpcyB0aGUgU1NSQyB3ZSBzdWdnZXN0ICovCi0gIHNlc3MtPnN1Z2dlc3RlZF9zc3JjID0gcnRwX3Nlc3Npb25fY3JlYXRlX25ld19zc3JjIChzZXNzKTsKLSAgc2Vzcy0+aW50ZXJuYWxfc3NyY19zZXQgPSBGQUxTRTsKLQotICBzZXNzLT5maXJzdF9ydGNwID0gVFJVRTsKLSAgc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBzZXNzLT5sYXN0X3J0Y3BfY2hlY2tfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHNlc3MtPmxhc3RfcnRjcF9zZW5kX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBzZXNzLT5sYXN0X3J0Y3BfaW50ZXJ2YWwgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gIHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc2Vzcy0+cnRjcF9mZWVkYmFja19yZXRlbnRpb25fd2luZG93ID0gREVGQVVMVF9SVENQX0ZFRURCQUNLX1JFVEVOVElPTl9XSU5ET1c7Ci0gIHNlc3MtPnJ0Y3BfaW1tZWRpYXRlX2ZlZWRiYWNrX3RocmVzaG9sZCA9Ci0gICAgICBERUZBVUxUX1JUQ1BfSU1NRURJQVRFX0ZFRURCQUNLX1RIUkVTSE9MRDsKLSAgc2Vzcy0+cnRwX3Byb2ZpbGUgPSBERUZBVUxUX1JUUF9QUk9GSUxFOwotICBzZXNzLT5yZWR1Y2VkX3NpemVfcnRjcCA9IERFRkFVTFRfUlRDUF9SRURVQ0VEX1NJWkU7Ci0KLSAgc2Vzcy0+bGFzdF9rZXlmcmFtZV9yZXF1ZXN0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBzZXNzLT5pc19kb2luZ19wdHAgPSBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotcnRwX3Nlc3Npb25fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIFJUUFNlc3Npb24gKnNlc3M7Ci0gIGdpbnQgaTsKLQotICBzZXNzID0gUlRQX1NFU1NJT05fQ0FTVCAob2JqZWN0KTsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHNlc3MtPnNkZXMpOwotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKHNlc3MtPmNvbmZsaWN0aW5nX2FkZHJlc3NlcywKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgcnRwX2NvbmZsaWN0aW5nX2FkZHJlc3NfZnJlZSk7Ci0KLSAgLyogVE9ETzogQ2hhbmdlIHRoaXMgYWdhaW4gd2hlbiBpbXBsZW1lbnRpbmcgUkZDIDI3NjIKLSAgICogZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0gICAqLwotICBmb3IgKGkgPSAwOyBpIDwgMTsgaSsrKQotICAgIGdfaGFzaF90YWJsZV9kZXN0cm95IChzZXNzLT5zc3Jjc1tpXSk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnNlc3MtPmxvY2spOwotCi0gIEdfT0JKRUNUX0NMQVNTIChydHBfc2Vzc2lvbl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfc291cmNlIChncG9pbnRlciBrZXksIFJUUFNvdXJjZSAqIHNvdXJjZSwgR1ZhbHVlQXJyYXkgKiBhcnIpCi17Ci0gIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBSVFBfVFlQRV9TT1VSQ0UpOwotICBnX3ZhbHVlX3Rha2Vfb2JqZWN0ICgmdmFsdWUsIHNvdXJjZSk7Ci0gIC8qIGNvcGllcyB0aGUgdmFsdWUgKi8KLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFyciwgJnZhbHVlKTsKLX0KLQotc3RhdGljIEdWYWx1ZUFycmF5ICoKLXJ0cF9zZXNzaW9uX2NyZWF0ZV9zb3VyY2VzIChSVFBTZXNzaW9uICogc2VzcykKLXsKLSAgR1ZhbHVlQXJyYXkgKnJlczsKLSAgZ3VpbnQgc2l6ZTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgLyogZ2V0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGFibGUgKi8KLSAgc2l6ZSA9IGdfaGFzaF90YWJsZV9zaXplIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0pOwotICAvKiBjcmVhdGUgdGhlIHJlc3VsdCB2YWx1ZSBhcnJheSAqLwotICByZXMgPSBnX3ZhbHVlX2FycmF5X25ldyAoc2l6ZSk7Ci0KLSAgLyogYW5kIGNvcHkgYWxsIHZhbHVlcyBpbnRvIHRoZSBhcnJheSAqLwotICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdLCAoR0hGdW5jKSBjb3B5X3NvdXJjZSwgcmVzKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotY3JlYXRlX3NvdXJjZV9zdGF0cyAoZ3BvaW50ZXIga2V5LCBSVFBTb3VyY2UgKiBzb3VyY2UsIEdWYWx1ZUFycmF5ICogYXJyKQotewotICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBnX29iamVjdF9nZXQgKHNvdXJjZSwgInN0YXRzIiwgJnMsIE5VTEwpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOwotICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSAoJnZhbHVlLCBzKTsKLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFyciwgJnZhbHVlKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbHVlKTsKLX0KLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1ydHBfc2Vzc2lvbl9jcmVhdGVfc3RhdHMgKFJUUFNlc3Npb24gKiBzZXNzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdWYWx1ZUFycmF5ICpzb3VyY2Vfc3RhdHM7Ci0gIEdWYWx1ZSBzb3VyY2Vfc3RhdHNfdiA9IEdfVkFMVUVfSU5JVDsKLSAgZ3VpbnQgc2l6ZTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtc2Vzc2lvbi1zdGF0cyIsCi0gICAgICAicnR4LWRyb3AtY291bnQiLCBHX1RZUEVfVUlOVCwgc2Vzcy0+c3RhdHMubmFja3NfZHJvcHBlZCwKLSAgICAgICJzZW50LW5hY2stY291bnQiLCBHX1RZUEVfVUlOVCwgc2Vzcy0+c3RhdHMubmFja3Nfc2VudCwKLSAgICAgICJyZWN2LW5hY2stY291bnQiLCBHX1RZUEVfVUlOVCwgc2Vzcy0+c3RhdHMubmFja3NfcmVjZWl2ZWQsIE5VTEwpOwotCi0gIHNpemUgPSBnX2hhc2hfdGFibGVfc2l6ZSAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdKTsKLSAgc291cmNlX3N0YXRzID0gZ192YWx1ZV9hcnJheV9uZXcgKHNpemUpOwotICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdLAotICAgICAgKEdIRnVuYykgY3JlYXRlX3NvdXJjZV9zdGF0cywgc291cmNlX3N0YXRzKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICBnX3ZhbHVlX2luaXQgKCZzb3VyY2Vfc3RhdHNfdiwgR19UWVBFX1ZBTFVFX0FSUkFZKTsKLSAgZ192YWx1ZV90YWtlX2JveGVkICgmc291cmNlX3N0YXRzX3YsIHNvdXJjZV9zdGF0cyk7Ci0gIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAocywgInNvdXJjZS1zdGF0cyIsICZzb3VyY2Vfc3RhdHNfdik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgUlRQU2Vzc2lvbiAqc2VzczsKLQotICBzZXNzID0gUlRQX1NFU1NJT04gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0lOVEVSTkFMX1NTUkM6Ci0gICAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgICAgIHNlc3MtPnN1Z2dlc3RlZF9zc3JjID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgc2Vzcy0+aW50ZXJuYWxfc3NyY19zZXQgPSBUUlVFOwotICAgICAgc2Vzcy0+aW50ZXJuYWxfc3NyY19mcm9tX2NhcHNfb3JfcHJvcGVydHkgPSBUUlVFOwotICAgICAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgICAgIGlmIChzZXNzLT5jYWxsYmFja3MucmVjb25maWd1cmUpCi0gICAgICAgIHNlc3MtPmNhbGxiYWNrcy5yZWNvbmZpZ3VyZSAoc2Vzcywgc2Vzcy0+cmVjb25maWd1cmVfdXNlcl9kYXRhKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5EV0lEVEg6Ci0gICAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgICAgIHNlc3MtPmJhbmR3aWR0aCA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgc2Vzcy0+cmVjYWxjX2JhbmR3aWR0aCA9IFRSVUU7Ci0gICAgICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfRlJBQ1RJT046Ci0gICAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgICAgIHNlc3MtPnJ0Y3BfYmFuZHdpZHRoID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBzZXNzLT5yZWNhbGNfYmFuZHdpZHRoID0gVFJVRTsKLSAgICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9SUl9CQU5EV0lEVEg6Ci0gICAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgICAgIHNlc3MtPnJ0Y3BfcnJfYmFuZHdpZHRoID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBzZXNzLT5yZWNhbGNfYmFuZHdpZHRoID0gVFJVRTsKLSAgICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9SU19CQU5EV0lEVEg6Ci0gICAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgICAgIHNlc3MtPnJ0Y3BfcnNfYmFuZHdpZHRoID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBzZXNzLT5yZWNhbGNfYmFuZHdpZHRoID0gVFJVRTsKLSAgICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9NVFU6Ci0gICAgICBzZXNzLT5tdHUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0RFUzoKLSAgICAgIHJ0cF9zZXNzaW9uX3NldF9zZGVzX3N0cnVjdCAoc2VzcywgZ192YWx1ZV9nZXRfYm94ZWQgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRkFWT1JfTkVXOgotICAgICAgc2Vzcy0+ZmF2b3JfbmV3ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfTUlOX0lOVEVSVkFMOgotICAgICAgcnRwX3N0YXRzX3NldF9taW5faW50ZXJ2YWwgKCZzZXNzLT5zdGF0cywKLSAgICAgICAgICAoZ2RvdWJsZSkgZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSkgLyBHU1RfU0VDT05EKTsKLSAgICAgIC8qIHRyaWdnZXIgcmVjb25zaWRlcmF0aW9uICovCi0gICAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgICAgIHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lID0gMDsKLSAgICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gICAgICBpZiAoc2Vzcy0+Y2FsbGJhY2tzLnJlY29uc2lkZXIpCi0gICAgICAgIHNlc3MtPmNhbGxiYWNrcy5yZWNvbnNpZGVyIChzZXNzLCBzZXNzLT5yZWNvbnNpZGVyX3VzZXJfZGF0YSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9JTU1FRElBVEVfRkVFREJBQ0tfVEhSRVNIT0xEOgotICAgICAgc2Vzcy0+cnRjcF9pbW1lZGlhdGVfZmVlZGJhY2tfdGhyZXNob2xkID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST0JBVElPTjoKLSAgICAgIHNlc3MtPnByb2JhdGlvbiA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfRFJPUE9VVF9USU1FOgotICAgICAgc2Vzcy0+bWF4X2Ryb3BvdXRfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfTUlTT1JERVJfVElNRToKLSAgICAgIHNlc3MtPm1heF9taXNvcmRlcl90aW1lID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUUF9QUk9GSUxFOgotICAgICAgc2Vzcy0+cnRwX3Byb2ZpbGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICAvKiB0cmlnZ2VyIHJlY29uc2lkZXJhdGlvbiAqLwotICAgICAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gICAgICBzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSA9IDA7Ci0gICAgICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICAgICAgaWYgKHNlc3MtPmNhbGxiYWNrcy5yZWNvbnNpZGVyKQotICAgICAgICBzZXNzLT5jYWxsYmFja3MucmVjb25zaWRlciAoc2Vzcywgc2Vzcy0+cmVjb25zaWRlcl91c2VyX2RhdGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfUkVEVUNFRF9TSVpFOgotICAgICAgc2Vzcy0+cmVkdWNlZF9zaXplX3J0Y3AgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgUlRQU2Vzc2lvbiAqc2VzczsKLQotICBzZXNzID0gUlRQX1NFU1NJT04gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0lOVEVSTkFMX1NTUkM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRwX3Nlc3Npb25fc3VnZ2VzdF9zc3JjIChzZXNzLCBOVUxMKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJOQUxfU09VUkNFOgotICAgICAgLyogRklYTUUsIHJldHVybiBhIHJhbmRvbSBzb3VyY2UgKi8KLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JBTkRXSURUSDoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlc3MtPmJhbmR3aWR0aCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9GUkFDVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHNlc3MtPnJ0Y3BfYmFuZHdpZHRoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX1JSX0JBTkRXSURUSDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlc3MtPnJ0Y3BfcnJfYmFuZHdpZHRoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX1JTX0JBTkRXSURUSDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNlc3MtPnJ0Y3BfcnNfYmFuZHdpZHRoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVENQX01UVToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZXNzLT5tdHUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NERVM6Ci0gICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKHZhbHVlLCBydHBfc2Vzc2lvbl9nZXRfc2Rlc19zdHJ1Y3QgKHNlc3MpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fU09VUkNFUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHBfc2Vzc2lvbl9nZXRfbnVtX3NvdXJjZXMgKHNlc3MpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9OVU1fQUNUSVZFX1NPVVJDRVM6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRwX3Nlc3Npb25fZ2V0X251bV9hY3RpdmVfc291cmNlcyAoc2VzcykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPVVJDRVM6Ci0gICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKHZhbHVlLCBydHBfc2Vzc2lvbl9jcmVhdGVfc291cmNlcyAoc2VzcykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZBVk9SX05FVzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZXNzLT5mYXZvcl9uZXcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUQ1BfTUlOX0lOVEVSVkFMOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgc2Vzcy0+c3RhdHMubWluX2ludGVydmFsICogR1NUX1NFQ09ORCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9JTU1FRElBVEVfRkVFREJBQ0tfVEhSRVNIT0xEOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNlc3MtPnJ0Y3BfaW1tZWRpYXRlX2ZlZWRiYWNrX3RocmVzaG9sZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPQkFUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNlc3MtPnByb2JhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0RST1BPVVRfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZXNzLT5tYXhfZHJvcG91dF90aW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfTUlTT1JERVJfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzZXNzLT5tYXhfbWlzb3JkZXJfdGltZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RBVFM6Ci0gICAgICBnX3ZhbHVlX3Rha2VfYm94ZWQgKHZhbHVlLCBydHBfc2Vzc2lvbl9jcmVhdGVfc3RhdHMgKHNlc3MpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SVFBfUFJPRklMRToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBzZXNzLT5ydHBfcHJvZmlsZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRDUF9SRURVQ0VEX1NJWkU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgc2Vzcy0+cmVkdWNlZF9zaXplX3J0Y3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotb25fbmV3X3NzcmMgKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBTb3VyY2UgKiBzb3VyY2UpCi17Ci0gIGdfb2JqZWN0X3JlZiAoc291cmNlKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgZ19zaWduYWxfZW1pdCAoc2VzcywgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fTkVXX1NTUkNdLCAwLCBzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX2NvbGxpc2lvbiAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSkKLXsKLSAgZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX0NPTExJU0lPTl0sIDAsCi0gICAgICBzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX3ZhbGlkYXRlZCAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSkKLXsKLSAgZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX1ZBTElEQVRFRF0sIDAsCi0gICAgICBzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX2FjdGl2ZSAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSkKLXsKLSAgZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TU1JDX0FDVElWRV0sIDAsIHNvdXJjZSk7Ci0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICBnX29iamVjdF91bnJlZiAoc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3NzcmNfc2RlcyAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSkKLXsKLSAgZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBHU1RfREVCVUcgKCJTREVTIGNoYW5nZWQgZm9yIFNTUkMgJTA4eCIsIHNvdXJjZS0+c3NyYyk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1NTUkNfU0RFU10sIDAsIHNvdXJjZSk7Ci0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICBnX29iamVjdF91bnJlZiAoc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2J5ZV9zc3JjIChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc291cmNlKQotewotICBnX29iamVjdF9yZWYgKHNvdXJjZSk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0JZRV9TU1JDXSwgMCwgc291cmNlKTsKLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIGdfb2JqZWN0X3VucmVmIChzb3VyY2UpOwotfQotCi1zdGF0aWMgdm9pZAotb25fYnllX3RpbWVvdXQgKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBTb3VyY2UgKiBzb3VyY2UpCi17Ci0gIGdfb2JqZWN0X3JlZiAoc291cmNlKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgZ19zaWduYWxfZW1pdCAoc2VzcywgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fQllFX1RJTUVPVVRdLCAwLCBzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl90aW1lb3V0IChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc291cmNlKQotewotICBnX29iamVjdF9yZWYgKHNvdXJjZSk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1RJTUVPVVRdLCAwLCBzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zZW5kZXJfdGltZW91dCAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSkKLXsKLSAgZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TRU5ERVJfVElNRU9VVF0sIDAsCi0gICAgICBzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9uZXdfc2VuZGVyX3NzcmMgKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBTb3VyY2UgKiBzb3VyY2UpCi17Ci0gIGdfb2JqZWN0X3JlZiAoc291cmNlKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgZ19zaWduYWxfZW1pdCAoc2VzcywgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fTkVXX1NFTkRFUl9TU1JDXSwgMCwKLSAgICAgIHNvdXJjZSk7Ci0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICBnX29iamVjdF91bnJlZiAoc291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3NlbmRlcl9zc3JjX2FjdGl2ZSAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSkKLXsKLSAgZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICBnX3NpZ25hbF9lbWl0IChzZXNzLCBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TRU5ERVJfU1NSQ19BQ1RJVkVdLCAwLAotICAgICAgc291cmNlKTsKLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIGdfb2JqZWN0X3VucmVmIChzb3VyY2UpOwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX25ldzoKLSAqCi0gKiBDcmVhdGUgYSBuZXcgc2Vzc2lvbiBvYmplY3QuCi0gKgotICogUmV0dXJuczogYSBuZXcgI1JUUFNlc3Npb24uIGdfb2JqZWN0X3VucmVmKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLVJUUFNlc3Npb24gKgotcnRwX3Nlc3Npb25fbmV3ICh2b2lkKQotewotICBSVFBTZXNzaW9uICpzZXNzOwotCi0gIHNlc3MgPSBnX29iamVjdF9uZXcgKFJUUF9UWVBFX1NFU1NJT04sIE5VTEwpOwotCi0gIHJldHVybiBzZXNzOwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX3NldF9jYWxsYmFja3M6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjYWxsYmFja3M6IGNhbGxiYWNrcyB0byBjb25maWd1cmUKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrcwotICoKLSAqIENvbmZpZ3VyZSBhIHNldCBvZiBjYWxsYmFja3MgdG8gYmUgbm90aWZpZWQgb2YgYWN0aW9ucy4KLSAqLwotdm9pZAotcnRwX3Nlc3Npb25fc2V0X2NhbGxiYWNrcyAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNlc3Npb25DYWxsYmFja3MgKiBjYWxsYmFja3MsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnX3JldHVybl9pZl9mYWlsIChSVFBfSVNfU0VTU0lPTiAoc2VzcykpOwotCi0gIGlmIChjYWxsYmFja3MtPnByb2Nlc3NfcnRwKSB7Ci0gICAgc2Vzcy0+Y2FsbGJhY2tzLnByb2Nlc3NfcnRwID0gY2FsbGJhY2tzLT5wcm9jZXNzX3J0cDsKLSAgICBzZXNzLT5wcm9jZXNzX3J0cF91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIH0KLSAgaWYgKGNhbGxiYWNrcy0+c2VuZF9ydHApIHsKLSAgICBzZXNzLT5jYWxsYmFja3Muc2VuZF9ydHAgPSBjYWxsYmFja3MtPnNlbmRfcnRwOwotICAgIHNlc3MtPnNlbmRfcnRwX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgfQotICBpZiAoY2FsbGJhY2tzLT5zZW5kX3J0Y3ApIHsKLSAgICBzZXNzLT5jYWxsYmFja3Muc2VuZF9ydGNwID0gY2FsbGJhY2tzLT5zZW5kX3J0Y3A7Ci0gICAgc2Vzcy0+c2VuZF9ydGNwX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgfQotICBpZiAoY2FsbGJhY2tzLT5zeW5jX3J0Y3ApIHsKLSAgICBzZXNzLT5jYWxsYmFja3Muc3luY19ydGNwID0gY2FsbGJhY2tzLT5zeW5jX3J0Y3A7Ci0gICAgc2Vzcy0+c3luY19ydGNwX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgfQotICBpZiAoY2FsbGJhY2tzLT5jbG9ja19yYXRlKSB7Ci0gICAgc2Vzcy0+Y2FsbGJhY2tzLmNsb2NrX3JhdGUgPSBjYWxsYmFja3MtPmNsb2NrX3JhdGU7Ci0gICAgc2Vzcy0+Y2xvY2tfcmF0ZV91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIH0KLSAgaWYgKGNhbGxiYWNrcy0+cmVjb25zaWRlcikgewotICAgIHNlc3MtPmNhbGxiYWNrcy5yZWNvbnNpZGVyID0gY2FsbGJhY2tzLT5yZWNvbnNpZGVyOwotICAgIHNlc3MtPnJlY29uc2lkZXJfdXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICB9Ci0gIGlmIChjYWxsYmFja3MtPnJlcXVlc3Rfa2V5X3VuaXQpIHsKLSAgICBzZXNzLT5jYWxsYmFja3MucmVxdWVzdF9rZXlfdW5pdCA9IGNhbGxiYWNrcy0+cmVxdWVzdF9rZXlfdW5pdDsKLSAgICBzZXNzLT5yZXF1ZXN0X2tleV91bml0X3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgfQotICBpZiAoY2FsbGJhY2tzLT5yZXF1ZXN0X3RpbWUpIHsKLSAgICBzZXNzLT5jYWxsYmFja3MucmVxdWVzdF90aW1lID0gY2FsbGJhY2tzLT5yZXF1ZXN0X3RpbWU7Ci0gICAgc2Vzcy0+cmVxdWVzdF90aW1lX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLSAgfQotICBpZiAoY2FsbGJhY2tzLT5ub3RpZnlfbmFjaykgewotICAgIHNlc3MtPmNhbGxiYWNrcy5ub3RpZnlfbmFjayA9IGNhbGxiYWNrcy0+bm90aWZ5X25hY2s7Ci0gICAgc2Vzcy0+bm90aWZ5X25hY2tfdXNlcl9kYXRhID0gdXNlcl9kYXRhOwotICB9Ci0gIGlmIChjYWxsYmFja3MtPnJlY29uZmlndXJlKSB7Ci0gICAgc2Vzcy0+Y2FsbGJhY2tzLnJlY29uZmlndXJlID0gY2FsbGJhY2tzLT5yZWNvbmZpZ3VyZTsKLSAgICBzZXNzLT5yZWNvbmZpZ3VyZV91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0gIH0KLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9zZXRfcHJvY2Vzc19ydHBfY2FsbGJhY2s6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjYWxsYmFjazogY2FsbGJhY2sgdG8gc2V0Ci0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIGluIHRoZSBjYWxsYmFjawotICoKLSAqIENvbmZpZ3VyZSBvbmx5IHRoZSBwcm9jZXNzX3J0cCBjYWxsYmFjayB0byBiZSBub3RpZmllZCBvZiB0aGUgcHJvY2Vzc19ydHAgYWN0aW9uLgotICovCi12b2lkCi1ydHBfc2Vzc2lvbl9zZXRfcHJvY2Vzc19ydHBfY2FsbGJhY2sgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIFJUUFNlc3Npb25Qcm9jZXNzUlRQIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgc2Vzcy0+Y2FsbGJhY2tzLnByb2Nlc3NfcnRwID0gY2FsbGJhY2s7Ci0gIHNlc3MtPnByb2Nlc3NfcnRwX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9zZXRfc2VuZF9ydHBfY2FsbGJhY2s6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjYWxsYmFjazogY2FsbGJhY2sgdG8gc2V0Ci0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIGluIHRoZSBjYWxsYmFjawotICoKLSAqIENvbmZpZ3VyZSBvbmx5IHRoZSBzZW5kX3J0cCBjYWxsYmFjayB0byBiZSBub3RpZmllZCBvZiB0aGUgc2VuZF9ydHAgYWN0aW9uLgotICovCi12b2lkCi1ydHBfc2Vzc2lvbl9zZXRfc2VuZF9ydHBfY2FsbGJhY2sgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIFJUUFNlc3Npb25TZW5kUlRQIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgc2Vzcy0+Y2FsbGJhY2tzLnNlbmRfcnRwID0gY2FsbGJhY2s7Ci0gIHNlc3MtPnNlbmRfcnRwX3VzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9zZXRfc2VuZF9ydGNwX2NhbGxiYWNrOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAY2FsbGJhY2s6IGNhbGxiYWNrIHRvIHNldAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCBpbiB0aGUgY2FsbGJhY2sKLSAqCi0gKiBDb25maWd1cmUgb25seSB0aGUgc2VuZF9ydGNwIGNhbGxiYWNrIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSBzZW5kX3J0Y3AgYWN0aW9uLgotICovCi12b2lkCi1ydHBfc2Vzc2lvbl9zZXRfc2VuZF9ydGNwX2NhbGxiYWNrIChSVFBTZXNzaW9uICogc2VzcywKLSAgICBSVFBTZXNzaW9uU2VuZFJUQ1AgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpKTsKLQotICBzZXNzLT5jYWxsYmFja3Muc2VuZF9ydGNwID0gY2FsbGJhY2s7Ci0gIHNlc3MtPnNlbmRfcnRjcF91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fc2V0X3N5bmNfcnRjcF9jYWxsYmFjazoKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICogQGNhbGxiYWNrOiBjYWxsYmFjayB0byBzZXQKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrCi0gKgotICogQ29uZmlndXJlIG9ubHkgdGhlIHN5bmNfcnRjcCBjYWxsYmFjayB0byBiZSBub3RpZmllZCBvZiB0aGUgc3luY19ydGNwIGFjdGlvbi4KLSAqLwotdm9pZAotcnRwX3Nlc3Npb25fc2V0X3N5bmNfcnRjcF9jYWxsYmFjayAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgUlRQU2Vzc2lvblN5bmNSVENQIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgc2Vzcy0+Y2FsbGJhY2tzLnN5bmNfcnRjcCA9IGNhbGxiYWNrOwotICBzZXNzLT5zeW5jX3J0Y3BfdXNlcl9kYXRhID0gdXNlcl9kYXRhOwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX3NldF9jbG9ja19yYXRlX2NhbGxiYWNrOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAY2FsbGJhY2s6IGNhbGxiYWNrIHRvIHNldAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCBpbiB0aGUgY2FsbGJhY2sKLSAqCi0gKiBDb25maWd1cmUgb25seSB0aGUgY2xvY2tfcmF0ZSBjYWxsYmFjayB0byBiZSBub3RpZmllZCBvZiB0aGUgY2xvY2tfcmF0ZSBhY3Rpb24uCi0gKi8KLXZvaWQKLXJ0cF9zZXNzaW9uX3NldF9jbG9ja19yYXRlX2NhbGxiYWNrIChSVFBTZXNzaW9uICogc2VzcywKLSAgICBSVFBTZXNzaW9uQ2xvY2tSYXRlIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgc2Vzcy0+Y2FsbGJhY2tzLmNsb2NrX3JhdGUgPSBjYWxsYmFjazsKLSAgc2Vzcy0+Y2xvY2tfcmF0ZV91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fc2V0X3JlY29uc2lkZXJfY2FsbGJhY2s6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjYWxsYmFjazogY2FsbGJhY2sgdG8gc2V0Ci0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIGluIHRoZSBjYWxsYmFjawotICoKLSAqIENvbmZpZ3VyZSBvbmx5IHRoZSByZWNvbnNpZGVyIGNhbGxiYWNrIHRvIGJlIG5vdGlmaWVkIG9mIHRoZSByZWNvbnNpZGVyIGFjdGlvbi4KLSAqLwotdm9pZAotcnRwX3Nlc3Npb25fc2V0X3JlY29uc2lkZXJfY2FsbGJhY2sgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIFJUUFNlc3Npb25SZWNvbnNpZGVyIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgc2Vzcy0+Y2FsbGJhY2tzLnJlY29uc2lkZXIgPSBjYWxsYmFjazsKLSAgc2Vzcy0+cmVjb25zaWRlcl91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fc2V0X3JlcXVlc3RfdGltZV9jYWxsYmFjazoKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICogQGNhbGxiYWNrOiBjYWxsYmFjayB0byBzZXQKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrCi0gKgotICogQ29uZmlndXJlIG9ubHkgdGhlIHJlcXVlc3RfdGltZSBjYWxsYmFjawotICovCi12b2lkCi1ydHBfc2Vzc2lvbl9zZXRfcmVxdWVzdF90aW1lX2NhbGxiYWNrIChSVFBTZXNzaW9uICogc2VzcywKLSAgICBSVFBTZXNzaW9uUmVxdWVzdFRpbWUgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpKTsKLQotICBzZXNzLT5jYWxsYmFja3MucmVxdWVzdF90aW1lID0gY2FsbGJhY2s7Ci0gIHNlc3MtPnJlcXVlc3RfdGltZV91c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fc2V0X2JhbmR3aWR0aDoKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICogQGJhbmR3aWR0aDogdGhlIGJhbmR3aWR0aCBhbGxvY2F0ZWQKLSAqCi0gKiBTZXQgdGhlIHNlc3Npb24gYmFuZHdpZHRoIGluIGJpdHMgcGVyIHNlY29uZC4KLSAqLwotdm9pZAotcnRwX3Nlc3Npb25fc2V0X2JhbmR3aWR0aCAoUlRQU2Vzc2lvbiAqIHNlc3MsIGdkb3VibGUgYmFuZHdpZHRoKQotewotICBnX3JldHVybl9pZl9mYWlsIChSVFBfSVNfU0VTU0lPTiAoc2VzcykpOwotCi0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICBzZXNzLT5zdGF0cy5iYW5kd2lkdGggPSBiYW5kd2lkdGg7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fZ2V0X2JhbmR3aWR0aDoKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICoKLSAqIEdldCB0aGUgc2Vzc2lvbiBiYW5kd2lkdGguCi0gKgotICogUmV0dXJuczogdGhlIHNlc3Npb24gYmFuZHdpZHRoLgotICovCi1nZG91YmxlCi1ydHBfc2Vzc2lvbl9nZXRfYmFuZHdpZHRoIChSVFBTZXNzaW9uICogc2VzcykKLXsKLSAgZ2RvdWJsZSByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSwgMCk7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIHJlc3VsdCA9IHNlc3MtPnN0YXRzLmJhbmR3aWR0aDsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX3NldF9ydGNwX2ZyYWN0aW9uOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAYmFuZHdpZHRoOiB0aGUgUlRDUCBiYW5kd2lkdGgKLSAqCi0gKiBTZXQgdGhlIGJhbmR3aWR0aCBpbiBiaXRzIHBlciBzZWNvbmQgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgUlRDUAotICogbWVzc2FnZXMuCi0gKi8KLXZvaWQKLXJ0cF9zZXNzaW9uX3NldF9ydGNwX2ZyYWN0aW9uIChSVFBTZXNzaW9uICogc2VzcywgZ2RvdWJsZSBiYW5kd2lkdGgpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIHNlc3MtPnN0YXRzLnJ0Y3BfYmFuZHdpZHRoID0gYmFuZHdpZHRoOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX2dldF9ydGNwX2ZyYWN0aW9uOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKgotICogR2V0IHRoZSBzZXNzaW9uIGJhbmR3aWR0aCB1c2VkIGZvciBSVENQLgotICoKLSAqIFJldHVybnM6IFRoZSBiYW5kd2lkdGggdXNlZCBmb3IgUlRDUCBtZXNzYWdlcy4KLSAqLwotZ2RvdWJsZQotcnRwX3Nlc3Npb25fZ2V0X3J0Y3BfZnJhY3Rpb24gKFJUUFNlc3Npb24gKiBzZXNzKQotewotICBnZG91YmxlIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpLCAwLjApOwotCi0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICByZXN1bHQgPSBzZXNzLT5zdGF0cy5ydGNwX2JhbmR3aWR0aDsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX2dldF9zZGVzX3N0cnVjdDoKLSAqIEBzZXNzOiBhbiAjUlRTUFNlc3Npb24KLSAqCi0gKiBHZXQgdGhlIFNERVMgZGF0YSBhcyBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1cm5zOiBhIEdzdFN0cnVjdHVyZSB3aXRoIFNERVMgaXRlbXMgZm9yIEBzZXNzLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYQotICogY29weSBvZiB0aGUgU0RFUyBzdHJ1Y3R1cmUsIHVzZSBnc3Rfc3RydWN0dXJlX2ZyZWUoKSBhZnRlciB1c2FnZS4KLSAqLwotR3N0U3RydWN0dXJlICoKLXJ0cF9zZXNzaW9uX2dldF9zZGVzX3N0cnVjdCAoUlRQU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIEdzdFN0cnVjdHVyZSAqcmVzdWx0ID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpLCBOVUxMKTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgaWYgKHNlc3MtPnNkZXMpCi0gICAgcmVzdWx0ID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzZXNzLT5zZGVzKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX3NldF9zZGVzX3N0cnVjdDoKLSAqIEBzZXNzOiBhbiAjUlRTUFNlc3Npb24KLSAqIEBzZGVzOiBhICNHc3RTdHJ1Y3R1cmUKLSAqCi0gKiBTZXQgdGhlIFNERVMgZGF0YSBhcyBhICNHc3RTdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mIEBzZGVzLgotICovCi12b2lkCi1ydHBfc2Vzc2lvbl9zZXRfc2Rlc19zdHJ1Y3QgKFJUUFNlc3Npb24gKiBzZXNzLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiBzZGVzKQotewotICBnX3JldHVybl9pZl9mYWlsIChzZGVzKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpKTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgaWYgKHNlc3MtPnNkZXMpCi0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzZXNzLT5zZGVzKTsKLSAgc2Vzcy0+c2RlcyA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoc2Rlcyk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1zb3VyY2VfcHVzaF9ydHAgKFJUUFNvdXJjZSAqIHNvdXJjZSwgZ3BvaW50ZXIgZGF0YSwgUlRQU2Vzc2lvbiAqIHNlc3Npb24pCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgaWYgKHNvdXJjZS0+aW50ZXJuYWwpIHsKLSAgICBHU1RfTE9HICgic291cmNlICUwOHggcHVzaGVkIHNlbmRlciBSVFAgcGFja2V0Iiwgc291cmNlLT5zc3JjKTsKLQotICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzc2lvbik7Ci0KLSAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLnNlbmRfcnRwKQotICAgICAgcmVzdWx0ID0KLSAgICAgICAgICBzZXNzaW9uLT5jYWxsYmFja3Muc2VuZF9ydHAgKHNlc3Npb24sIHNvdXJjZSwgZGF0YSwKLSAgICAgICAgICBzZXNzaW9uLT5zZW5kX3J0cF91c2VyX2RhdGEpOwotICAgIGVsc2UgewotICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZGF0YSkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HICgic291cmNlICUwOHggcHVzaGVkIHJlY2VpdmVyIFJUUCBwYWNrZXQiLCBzb3VyY2UtPnNzcmMpOwotICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzc2lvbik7Ci0KLSAgICBpZiAoc2Vzc2lvbi0+Y2FsbGJhY2tzLnByb2Nlc3NfcnRwKQotICAgICAgcmVzdWx0ID0KLSAgICAgICAgICBzZXNzaW9uLT5jYWxsYmFja3MucHJvY2Vzc19ydHAgKHNlc3Npb24sIHNvdXJjZSwKLSAgICAgICAgICBHU1RfQlVGRkVSX0NBU1QgKGRhdGEpLCBzZXNzaW9uLT5wcm9jZXNzX3J0cF91c2VyX2RhdGEpOwotICAgIGVsc2UKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSkpOwotICB9Ci0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3Npb24pOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnaW50Ci1zb3VyY2VfY2xvY2tfcmF0ZSAoUlRQU291cmNlICogc291cmNlLCBndWludDggcHQsIFJUUFNlc3Npb24gKiBzZXNzaW9uKQotewotICBnaW50IHJlc3VsdDsKLQotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3Npb24pOwotCi0gIGlmIChzZXNzaW9uLT5jYWxsYmFja3MuY2xvY2tfcmF0ZSkKLSAgICByZXN1bHQgPQotICAgICAgICBzZXNzaW9uLT5jYWxsYmFja3MuY2xvY2tfcmF0ZSAoc2Vzc2lvbiwgcHQsCi0gICAgICAgIHNlc3Npb24tPmNsb2NrX3JhdGVfdXNlcl9kYXRhKTsKLSAgZWxzZQotICAgIHJlc3VsdCA9IC0xOwotCi0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3Npb24pOwotCi0gIEdTVF9ERUJVRyAoImdvdCBjbG9jay1yYXRlICVkIGZvciBwdCAlZCIsIHJlc3VsdCwgcHQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBSVFBTb3VyY2VDYWxsYmFja3MgY2FsbGJhY2tzID0gewotICAoUlRQU291cmNlUHVzaFJUUCkgc291cmNlX3B1c2hfcnRwLAotICAoUlRQU291cmNlQ2xvY2tSYXRlKSBzb3VyY2VfY2xvY2tfcmF0ZSwKLX07Ci0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9maW5kX2NvbmZsaWN0aW5nX2FkZHJlc3M6Ci0gKiBAc2Vzc2lvbjogVGhlIHNlc3Npb24gdGhlIHBhY2tldCBjYW1lIGluCi0gKiBAYWRkcmVzczogYWRkcmVzcyB0byBjaGVjayBmb3IKLSAqIEB0aW1lOiBUaGUgdGltZSB3aGVuIHRoZSBwYWNrZXQgdGhhdCBpcyBwb3NzaWJseSBpbiBjb25mbGljdCBhcnJpdmVkCi0gKgotICogQ2hlY2tzIGlmIGFuIGFkZHJlc3Mgd2hpY2ggaGFzIGEgY29uZmxpY3QgaXMgYWxyZWFkeSBrbm93bi4gSWYgaXQgaXMKLSAqIGEga25vd24gY29uZmxpY3QsIHJlbWVtYmVyIHRoZSB0aW1lCi0gKgotICogUmV0dXJuczogVFJVRSBpZiBpdCB3YXMgYSBrbm93biBjb25mbGljdCwgRkFMU0Ugb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcnRwX3Nlc3Npb25fZmluZF9jb25mbGljdGluZ19hZGRyZXNzIChSVFBTZXNzaW9uICogc2Vzc2lvbiwKLSAgICBHU29ja2V0QWRkcmVzcyAqIGFkZHJlc3MsIEdzdENsb2NrVGltZSB0aW1lKQotewotICByZXR1cm4gZmluZF9jb25mbGljdGluZ19hZGRyZXNzIChzZXNzaW9uLT5jb25mbGljdGluZ19hZGRyZXNzZXMsIGFkZHJlc3MsCi0gICAgICB0aW1lKTsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9hZGRfY29uZmxpY3RpbmdfYWRkcmVzczoKLSAqIEBzZXNzaW9uOiBUaGUgc2Vzc2lvbiB0aGUgcGFja2V0IGNhbWUgaW4KLSAqIEBhZGRyZXNzOiBhZGRyZXNzIHRvIHJlbWVtYmVyCi0gKiBAdGltZTogVGhlIHRpbWUgd2hlbiB0aGUgcGFja2V0IHRoYXQgaXMgaW4gY29uZmxpY3QgYXJyaXZlZAotICoKLSAqIEFkZHMgYSBuZXcgY29uZmxpY3QgYWRkcmVzcwotICovCi1zdGF0aWMgdm9pZAotcnRwX3Nlc3Npb25fYWRkX2NvbmZsaWN0aW5nX2FkZHJlc3MgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgIEdTb2NrZXRBZGRyZXNzICogYWRkcmVzcywgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIHNlc3MtPmNvbmZsaWN0aW5nX2FkZHJlc3NlcyA9Ci0gICAgICBhZGRfY29uZmxpY3RpbmdfYWRkcmVzcyAoc2Vzcy0+Y29uZmxpY3RpbmdfYWRkcmVzc2VzLCBhZGRyZXNzLCB0aW1lKTsKLX0KLQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNoZWNrX2NvbGxpc2lvbiAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJUUFNvdXJjZSAqIHNvdXJjZSwKLSAgICBSVFBQYWNrZXRJbmZvICogcGluZm8sIGdib29sZWFuIHJ0cCkKLXsKLSAgZ3VpbnQzMiBzc3JjOwotCi0gIC8qIElmIHdlIGhhdmUgbm8gcGluZm8gYWRkcmVzcywgd2UgY2FuJ3QgZG8gY29sbGlzaW9uIGNoZWNraW5nICovCi0gIGlmICghcGluZm8tPmFkZHJlc3MpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHNzcmMgPSBydHBfc291cmNlX2dldF9zc3JjIChzb3VyY2UpOwotCi0gIGlmICghc291cmNlLT5pbnRlcm5hbCkgewotICAgIEdTb2NrZXRBZGRyZXNzICpmcm9tOwotCi0gICAgLyogVGhpcyBpcyBub3Qgb3VyIGxvY2FsIHNvdXJjZSwgYnV0IGxldHMgY2hlY2sgaWYgdHdvIHJlbW90ZQotICAgICAqIHNvdXJjZSBjb2xsaWRlICovCi0gICAgaWYgKHJ0cCkgewotICAgICAgZnJvbSA9IHNvdXJjZS0+cnRwX2Zyb207Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZyb20gPSBzb3VyY2UtPnJ0Y3BfZnJvbTsKLSAgICB9Ci0KLSAgICBpZiAoZnJvbSkgewotICAgICAgaWYgKF9fZ19zb2NrZXRfYWRkcmVzc19lcXVhbCAoZnJvbSwgcGluZm8tPmFkZHJlc3MpKSB7Ci0gICAgICAgIC8qIEFkZHJlc3MgaXMgdGhlIHNhbWUgKi8KLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0xPRyAoIndlIGhhdmUgYSB0aGlyZC1wYXJ0eSBjb2xsaXNpb24gb3IgbG9vcCBzc3JjOiV4Iiwgc3NyYyk7Ci0gICAgICAgIGlmIChzZXNzLT5mYXZvcl9uZXcpIHsKLSAgICAgICAgICBpZiAocnRwX3NvdXJjZV9maW5kX2NvbmZsaWN0aW5nX2FkZHJlc3MgKHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgIHBpbmZvLT5hZGRyZXNzLCBwaW5mby0+Y3VycmVudF90aW1lKSkgewotICAgICAgICAgICAgZ2NoYXIgKmJ1ZjE7Ci0KLSAgICAgICAgICAgIGJ1ZjEgPSBfX2dfc29ja2V0X2FkZHJlc3NfdG9fc3RyaW5nIChwaW5mby0+YWRkcmVzcyk7Ci0gICAgICAgICAgICBHU1RfTE9HICgiS25vd24gY29uZmxpY3Qgb24gJXggZm9yICVzLCBkcm9wcGluZyBwYWNrZXQiLCBzc3JjLAotICAgICAgICAgICAgICAgIGJ1ZjEpOwotICAgICAgICAgICAgZ19mcmVlIChidWYxKTsKLQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdjaGFyICpidWYxLCAqYnVmMjsKLQotICAgICAgICAgICAgLyogQ3VycmVudCBhZGRyZXNzIGlzIG5vdCBhIGtub3duIGNvbmZsaWN0LCBsZXRzIGFzc3VtZSB0aGlzIGlzCi0gICAgICAgICAgICAgKiBhIG5ldyBzb3VyY2UuIFNhdmUgb2xkIGFkZHJlc3MgaW4gcG9zc2libGUgY29uZmxpY3QgbGlzdAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBydHBfc291cmNlX2FkZF9jb25mbGljdGluZ19hZGRyZXNzIChzb3VyY2UsIGZyb20sCi0gICAgICAgICAgICAgICAgcGluZm8tPmN1cnJlbnRfdGltZSk7Ci0KLSAgICAgICAgICAgIGJ1ZjEgPSBfX2dfc29ja2V0X2FkZHJlc3NfdG9fc3RyaW5nIChmcm9tKTsKLSAgICAgICAgICAgIGJ1ZjIgPSBfX2dfc29ja2V0X2FkZHJlc3NfdG9fc3RyaW5nIChwaW5mby0+YWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIEdTVF9ERUJVRyAoIk5ldyBjb25mbGljdCBmb3Igc3NyYyAleCwgcmVwbGFjaW5nICVzIHdpdGggJXMsIgotICAgICAgICAgICAgICAgICIgc2F2aW5nIG9sZCBhcyBrbm93biBjb25mbGljdCIsIHNzcmMsIGJ1ZjEsIGJ1ZjIpOwotCi0gICAgICAgICAgICBpZiAocnRwKQotICAgICAgICAgICAgICBydHBfc291cmNlX3NldF9ydHBfZnJvbSAoc291cmNlLCBwaW5mby0+YWRkcmVzcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJ0cF9zb3VyY2Vfc2V0X3J0Y3BfZnJvbSAoc291cmNlLCBwaW5mby0+YWRkcmVzcyk7Ci0KLSAgICAgICAgICAgIGdfZnJlZSAoYnVmMSk7Ci0gICAgICAgICAgICBnX2ZyZWUgKGJ1ZjIpOwotCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIERvbid0IG5lZWQgdG8gc2F2ZSBvbGQgYWRkcmVzc2VzLCB3ZSBpZ25vcmUgbmV3IHNvdXJjZXMgKi8KLSAgICAgICAgICByZXR1cm4gVFJVRTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBXZSBkb24ndCBhbHJlYWR5IGhhdmUgYSBmcm9tIGFkZHJlc3MgZm9yIFJUUCwganVzdCBzZXQgaXQgKi8KLSAgICAgIGlmIChydHApCi0gICAgICAgIHJ0cF9zb3VyY2Vfc2V0X3J0cF9mcm9tIChzb3VyY2UsIHBpbmZvLT5hZGRyZXNzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcnRwX3NvdXJjZV9zZXRfcnRjcF9mcm9tIChzb3VyY2UsIHBpbmZvLT5hZGRyZXNzKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBGSVhNRTogTG9nIDNyZCBwYXJ0eSBjb2xsaXNpb24gc29tZWhvdwotICAgICAqIE1heWJlIHNob3VsZCBiZSBkb25lIGluIHVwcGVyIGxheWVyLCBvbmx5IHRoZSBTREVTIGNhbiB0ZWxsIHVzCi0gICAgICogaWYgaXRzIGEgY29sbGlzaW9uIG9yIGEgbG9vcAotICAgICAqLwotICB9IGVsc2UgewotICAgIC8qIFRoaXMgaXMgc2VuZGluZyB3aXRoIG91ciBzc3JjLCBpcyBpdCBhbiBhZGRyZXNzIHdlIGFscmVhZHkga25vdyAqLwotICAgIGlmIChydHBfc2Vzc2lvbl9maW5kX2NvbmZsaWN0aW5nX2FkZHJlc3MgKHNlc3MsIHBpbmZvLT5hZGRyZXNzLAotICAgICAgICAgICAgcGluZm8tPmN1cnJlbnRfdGltZSkpIHsKLSAgICAgIC8qIEl0cyBhIGtub3duIGNvbmZsaWN0LCBpdHMgcHJvYmFibHkgYSBsb29wLCBub3QgYSBjb2xsaXNpb24KLSAgICAgICAqIGxldHMganVzdCBkcm9wIHRoZSBpbmNvbWluZyBwYWNrZXQKLSAgICAgICAqLwotICAgICAgR1NUX0RFQlVHICgiT3VyIHBhY2tldHMgYXJlIGJlaW5nIGxvb3BlZCBiYWNrIHRvIHVzLCBkcm9wcGluZyIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBJdHMgYSBuZXcgY29sbGlzaW9uLCBsZXRzIGNoYW5nZSBvdXIgU1NSQyAqLwotICAgICAgcnRwX3Nlc3Npb25fYWRkX2NvbmZsaWN0aW5nX2FkZHJlc3MgKHNlc3MsIHBpbmZvLT5hZGRyZXNzLAotICAgICAgICAgIHBpbmZvLT5jdXJyZW50X3RpbWUpOwotCi0gICAgICBHU1RfREVCVUcgKCJDb2xsaXNpb24gZm9yIFNTUkMgJXgiLCBzc3JjKTsKLSAgICAgIC8qIG1hcmsgdGhlIHNvdXJjZSBCWUUgKi8KLSAgICAgIHJ0cF9zb3VyY2VfbWFya19ieWUgKHNvdXJjZSwgIlNTUkMgQ29sbGlzaW9uIik7Ci0gICAgICAvKiBpZiB3ZSB3ZXJlIHN1Z2dlc3RpbmcgdGhpcyBTU1JDLCBjaGFuZ2UgdG8gc29tZXRoaW5nIGVsc2UgKi8KLSAgICAgIGlmIChzZXNzLT5zdWdnZXN0ZWRfc3NyYyA9PSBzc3JjKSB7Ci0gICAgICAgIHNlc3MtPnN1Z2dlc3RlZF9zc3JjID0gcnRwX3Nlc3Npb25fY3JlYXRlX25ld19zc3JjIChzZXNzKTsKLSAgICAgICAgc2Vzcy0+aW50ZXJuYWxfc3NyY19zZXQgPSBUUlVFOwotICAgICAgfQotCi0gICAgICBvbl9zc3JjX2NvbGxpc2lvbiAoc2Vzcywgc291cmNlKTsKLQotICAgICAgcnRwX3Nlc3Npb25fc2NoZWR1bGVfYnllX2xvY2tlZCAoc2VzcywgcGluZm8tPmN1cnJlbnRfdGltZSk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdib29sZWFuIGlzX2RvaW5nX3B0cDsKLSAgR1NvY2tldEFkZHJlc3MgKm5ld19hZGRyOwotfSBDb21wYXJlQWRkckRhdGE7Ci0KLS8qIGNoZWNrIGlmIHRoZSB0d28gZ2l2ZW4gaXAgYWRkciBhcmUgdGhlIHNhbWUgKGRvIG5vdCBjYXJlIGFib3V0IHRoZSBwb3J0KSAqLwotc3RhdGljIGdib29sZWFuCi1pcF9hZGRyX2VxdWFsIChHU29ja2V0QWRkcmVzcyAqIGEsIEdTb2NrZXRBZGRyZXNzICogYikKLXsKLSAgcmV0dXJuCi0gICAgICBnX2luZXRfYWRkcmVzc19lcXVhbCAoZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzCi0gICAgICAoR19JTkVUX1NPQ0tFVF9BRERSRVNTIChhKSksCi0gICAgICBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MgKEdfSU5FVF9TT0NLRVRfQUREUkVTUyAoYikpKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbXBhcmVfcnRwX3NvdXJjZV9hZGRyIChjb25zdCBnY2hhciAqIGtleSwgUlRQU291cmNlICogc291cmNlLAotICAgIENvbXBhcmVBZGRyRGF0YSAqIGRhdGEpCi17Ci0gIC8qIG9ubHkgY29tcGFyZSBpcCBhZGRyIG9mIHJlbW90ZSBzb3VyY2VzIHdoaWNoIGFyZSBhbHNvIG5vdCBjbG9zaW5nICovCi0gIGlmICghc291cmNlLT5pbnRlcm5hbCAmJiAhc291cmNlLT5jbG9zaW5nICYmIHNvdXJjZS0+cnRwX2Zyb20pIHsKLSAgICAvKiBsb29rIGZvciB0aGUgZmlyc3QgcnRwIHNvdXJjZSAqLwotICAgIGlmICghZGF0YS0+bmV3X2FkZHIpCi0gICAgICBkYXRhLT5uZXdfYWRkciA9IHNvdXJjZS0+cnRwX2Zyb207Ci0gICAgLyogY29tcGFyZSBjdXJyZW50IGlwIGFkZHIgd2l0aCB0aGUgZmlyc3Qgb25lICovCi0gICAgZWxzZQotICAgICAgZGF0YS0+aXNfZG9pbmdfcHRwICY9IGlwX2FkZHJfZXF1YWwgKGRhdGEtPm5ld19hZGRyLCBzb3VyY2UtPnJ0cF9mcm9tKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29tcGFyZV9ydGNwX3NvdXJjZV9hZGRyIChjb25zdCBnY2hhciAqIGtleSwgUlRQU291cmNlICogc291cmNlLAotICAgIENvbXBhcmVBZGRyRGF0YSAqIGRhdGEpCi17Ci0gIC8qIG9ubHkgY29tcGFyZSBpcCBhZGRyIG9mIHJlbW90ZSBzb3VyY2VzIHdoaWNoIGFyZSBhbHNvIG5vdCBjbG9zaW5nICovCi0gIGlmICghc291cmNlLT5pbnRlcm5hbCAmJiAhc291cmNlLT5jbG9zaW5nICYmIHNvdXJjZS0+cnRjcF9mcm9tKSB7Ci0gICAgLyogbG9vayBmb3IgdGhlIGZpcnN0IHJ0Y3Agc291cmNlICovCi0gICAgaWYgKCFkYXRhLT5uZXdfYWRkcikKLSAgICAgIGRhdGEtPm5ld19hZGRyID0gc291cmNlLT5ydGNwX2Zyb207Ci0gICAgZWxzZQotICAgICAgLyogY29tcGFyZSBjdXJyZW50IGlwIGFkZHIgd2l0aCB0aGUgZmlyc3Qgb25lICovCi0gICAgICBkYXRhLT5pc19kb2luZ19wdHAgJj0gaXBfYWRkcl9lcXVhbCAoZGF0YS0+bmV3X2FkZHIsIHNvdXJjZS0+cnRjcF9mcm9tKTsKLSAgfQotfQotCi0vKiBsb29wIG92ZXIgb3VyIG5vbi1pbnRlcm5hbCBzb3VyY2UgdG8ga25vdyBpZiB0aGUgc2Vzc2lvbgotICogaXMgZG9pbmcgcG9pbnQtdG8tcG9pbnQgKi8KLXN0YXRpYyB2b2lkCi1zZXNzaW9uX3VwZGF0ZV9wdHAgKFJUUFNlc3Npb24gKiBzZXNzKQotewotICAvKiB0byBrbm93IGlmIHRoZSBzZXNzaW9uIGlzIGRvaW5nIHBvaW50IHRvIHBvaW50LCB0aGUgaXAgYWRkcgotICAgKiBvZiBlYWNoIG5vbi1pbnRlcm5hbCAoPXJlbW90ZXMpIHNvdXJjZSBoYXZlIHRvIGJlIGNvbXBhcmVkCi0gICAqIHRvIGVhY2ggb3RoZXIuCi0gICAqLwotICBnYm9vbGVhbiBpc19kb2luZ19ydHBfcHRwOwotICBnYm9vbGVhbiBpc19kb2luZ19ydGNwX3B0cDsKLSAgQ29tcGFyZUFkZHJEYXRhIGRhdGE7Ci0KLSAgLyogY29tcGFyZSB0aGUgZmlyc3QgcmVtb3RlIHNvdXJjZSdzIGlwIGFkZHIgdGhhdCByZWNlaXZlIHJ0cCBwYWNrZXRzCi0gICAqIHdpdGggb3RoZXIgcmVtb3RlIHJ0cCBzb3VyY2UuCi0gICAqIGl0J3MgZW5vdWdoIGJlY2F1c2UgdGhlIHNlc3Npb24ganVzdCBuZWVkcyB0byBrbm93IGlmIHRoZXkgYXJlIGFsbAotICAgKiBlcXVhbHMgb3Igbm90Ci0gICAqLwotICBkYXRhLmlzX2RvaW5nX3B0cCA9IFRSVUU7Ci0gIGRhdGEubmV3X2FkZHIgPSBOVUxMOwotICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdLAotICAgICAgKEdIRnVuYykgY29tcGFyZV9ydHBfc291cmNlX2FkZHIsIChncG9pbnRlcikgJiBkYXRhKTsKLSAgaXNfZG9pbmdfcnRwX3B0cCA9IGRhdGEuaXNfZG9pbmdfcHRwOwotCi0gIC8qIHNhbWUgYnV0IGFib3V0IHJ0Y3AgKi8KLSAgZGF0YS5pc19kb2luZ19wdHAgPSBUUlVFOwotICBkYXRhLm5ld19hZGRyID0gTlVMTDsKLSAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHNlc3MtPnNzcmNzW3Nlc3MtPm1hc2tfaWR4XSwKLSAgICAgIChHSEZ1bmMpIGNvbXBhcmVfcnRjcF9zb3VyY2VfYWRkciwgKGdwb2ludGVyKSAmIGRhdGEpOwotICBpc19kb2luZ19ydGNwX3B0cCA9IGRhdGEuaXNfZG9pbmdfcHRwOwotCi0gIC8qIHRoZSBzZXNzaW9uIGlzIGRvaW5nIHBvaW50LXRvLXBvaW50IGlmIGFsbCBydHAgcmVtb3RlIGhhdmUgdGhlIHNhbWUKLSAgICogaXAgYWRkciBhbmQgaWYgYWxsIHJ0Y3AgcmVtb3RlIHNvdXJjZXMgaGF2ZSB0aGUgc2FtZSBpcCBhZGRyICovCi0gIHNlc3MtPmlzX2RvaW5nX3B0cCA9IGlzX2RvaW5nX3J0cF9wdHAgJiYgaXNfZG9pbmdfcnRjcF9wdHA7Ci0KLSAgR1NUX0RFQlVHICgiZG9pbmcgcG9pbnQtdG8tcG9pbnQ6ICVkIiwgc2Vzcy0+aXNfZG9pbmdfcHRwKTsKLX0KLQotc3RhdGljIHZvaWQKLWFkZF9zb3VyY2UgKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIGdfaGFzaF90YWJsZV9pbnNlcnQgKHNlc3MtPnNzcmNzW3Nlc3MtPm1hc2tfaWR4XSwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAoc3JjLT5zc3JjKSwgc3JjKTsKLSAgLyogcmVwb3J0IHRoZSBuZXcgc291cmNlIEFTQVAgKi8KLSAgc3JjLT5nZW5lcmF0aW9uID0gc2Vzcy0+Z2VuZXJhdGlvbjsKLSAgLyogd2UgaGF2ZSBvbmUgbW9yZSBzb3VyY2Ugbm93ICovCi0gIHNlc3MtPnRvdGFsX3NvdXJjZXMrKzsKLSAgaWYgKFJUUF9TT1VSQ0VfSVNfQUNUSVZFIChzcmMpKQotICAgIHNlc3MtPnN0YXRzLmFjdGl2ZV9zb3VyY2VzKys7Ci0gIGlmIChzcmMtPmludGVybmFsKSB7Ci0gICAgc2Vzcy0+c3RhdHMuaW50ZXJuYWxfc291cmNlcysrOwotICAgIGlmICghc2Vzcy0+aW50ZXJuYWxfc3NyY19mcm9tX2NhcHNfb3JfcHJvcGVydHkKLSAgICAgICAgJiYgc2Vzcy0+c3VnZ2VzdGVkX3NzcmMgIT0gc3JjLT5zc3JjKSB7Ci0gICAgICBzZXNzLT5zdWdnZXN0ZWRfc3NyYyA9IHNyYy0+c3NyYzsKLSAgICAgIHNlc3MtPmludGVybmFsX3NzcmNfc2V0ID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICAvKiB1cGRhdGUgcG9pbnQtdG8tcG9pbnQgc3RhdHVzICovCi0gIGlmICghc3JjLT5pbnRlcm5hbCkKLSAgICBzZXNzaW9uX3VwZGF0ZV9wdHAgKHNlc3MpOwotfQotCi1zdGF0aWMgUlRQU291cmNlICoKLWZpbmRfc291cmNlIChSVFBTZXNzaW9uICogc2VzcywgZ3VpbnQzMiBzc3JjKQotewotICByZXR1cm4gZ19oYXNoX3RhYmxlX2xvb2t1cCAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdLAotICAgICAgR0lOVF9UT19QT0lOVEVSIChzc3JjKSk7Ci19Ci0KLS8qIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNlc3Npb24gbG9jaywgdGhlIHJldHVybmVkIHNvdXJjZSBuZWVkcyB0byBiZQotICogdW5yZWZmZWQgYWZ0ZXIgdXNhZ2UuICovCi1zdGF0aWMgUlRQU291cmNlICoKLW9idGFpbl9zb3VyY2UgKFJUUFNlc3Npb24gKiBzZXNzLCBndWludDMyIHNzcmMsIGdib29sZWFuICogY3JlYXRlZCwKLSAgICBSVFBQYWNrZXRJbmZvICogcGluZm8sIGdib29sZWFuIHJ0cCkKLXsKLSAgUlRQU291cmNlICpzb3VyY2U7Ci0KLSAgc291cmNlID0gZmluZF9zb3VyY2UgKHNlc3MsIHNzcmMpOwotICBpZiAoc291cmNlID09IE5VTEwpIHsKLSAgICAvKiBtYWtlIG5ldyBTb3VyY2UgaW4gcHJvYmF0aW9uIGFuZCBpbnNlcnQgKi8KLSAgICBzb3VyY2UgPSBydHBfc291cmNlX25ldyAoc3NyYyk7Ci0KLSAgICBHU1RfREVCVUcgKCJjcmVhdGluZyBuZXcgc291cmNlICUwOHggJXAiLCBzc3JjLCBzb3VyY2UpOwotCi0gICAgLyogZm9yIFJUUCBwYWNrZXRzIHdlIG5lZWQgdG8gc2V0IHRoZSBzb3VyY2UgaW4gcHJvYmF0aW9uLiBSZWNlaXZpbmcgUlRDUAotICAgICAqIHBhY2tldHMgb2YgYW4gU1NSQywgb24gdGhlIG90aGVyIGhhbmQsIGlzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB3ZQotICAgICAqIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBzb3VyY2UuICovCi0gICAgZ19vYmplY3Rfc2V0IChzb3VyY2UsICJwcm9iYXRpb24iLCBydHAgPyBzZXNzLT5wcm9iYXRpb24gOiAwLAotICAgICAgICAibWF4LWRyb3BvdXQtdGltZSIsIHNlc3MtPm1heF9kcm9wb3V0X3RpbWUsICJtYXgtbWlzb3JkZXItdGltZSIsCi0gICAgICAgIHNlc3MtPm1heF9taXNvcmRlcl90aW1lLCBOVUxMKTsKLQotICAgIC8qIHN0b3JlIGZyb20gYWRkcmVzcywgaWYgYW55ICovCi0gICAgaWYgKHBpbmZvLT5hZGRyZXNzKSB7Ci0gICAgICBpZiAocnRwKQotICAgICAgICBydHBfc291cmNlX3NldF9ydHBfZnJvbSAoc291cmNlLCBwaW5mby0+YWRkcmVzcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJ0cF9zb3VyY2Vfc2V0X3J0Y3BfZnJvbSAoc291cmNlLCBwaW5mby0+YWRkcmVzcyk7Ci0gICAgfQotCi0gICAgLyogY29uZmlndXJlIGEgY2FsbGJhY2sgb24gdGhlIHNvdXJjZSAqLwotICAgIHJ0cF9zb3VyY2Vfc2V0X2NhbGxiYWNrcyAoc291cmNlLCAmY2FsbGJhY2tzLCBzZXNzKTsKLQotICAgIGFkZF9zb3VyY2UgKHNlc3MsIHNvdXJjZSk7Ci0gICAgKmNyZWF0ZWQgPSBUUlVFOwotICB9IGVsc2UgewotICAgICpjcmVhdGVkID0gRkFMU0U7Ci0gICAgLyogY2hlY2sgZm9yIGNvbGxpc2lvbiwgdGhpcyB1cGRhdGVzIHRoZSBhZGRyZXNzIHdoZW4gbm90IHByZXZpb3VzbHkgc2V0ICovCi0gICAgaWYgKGNoZWNrX2NvbGxpc2lvbiAoc2Vzcywgc291cmNlLCBwaW5mbywgcnRwKSkgewotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIC8qIFJlY2VpdmluZyBSVENQIHBhY2tldHMgb2YgYW4gU1NSQyBpcyBhIHN0cm9uZyBpbmRpY2F0aW9uIHRoYXQgd2UKLSAgICAgKiBhcmUgZGVhbGluZyB3aXRoIGEgdmFsaWQgc291cmNlLiAqLwotICAgIGlmICghcnRwKQotICAgICAgZ19vYmplY3Rfc2V0IChzb3VyY2UsICJwcm9iYXRpb24iLCAwLCBOVUxMKTsKLSAgfQotICAvKiB1cGRhdGUgbGFzdCBhY3Rpdml0eSAqLwotICBzb3VyY2UtPmxhc3RfYWN0aXZpdHkgPSBwaW5mby0+Y3VycmVudF90aW1lOwotICBpZiAocnRwKQotICAgIHNvdXJjZS0+bGFzdF9ydHBfYWN0aXZpdHkgPSBwaW5mby0+Y3VycmVudF90aW1lOwotICBnX29iamVjdF9yZWYgKHNvdXJjZSk7Ci0KLSAgcmV0dXJuIHNvdXJjZTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2Vzc2lvbiBsb2NrLCB0aGUgcmV0dXJuZWQgc291cmNlIG5lZWRzIHRvIGJlCi0gKiB1bnJlZmZlZCBhZnRlciB1c2FnZS4gKi8KLXN0YXRpYyBSVFBTb3VyY2UgKgotb2J0YWluX2ludGVybmFsX3NvdXJjZSAoUlRQU2Vzc2lvbiAqIHNlc3MsIGd1aW50MzIgc3NyYywgZ2Jvb2xlYW4gKiBjcmVhdGVkLAotICAgIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUpCi17Ci0gIFJUUFNvdXJjZSAqc291cmNlOwotCi0gIHNvdXJjZSA9IGZpbmRfc291cmNlIChzZXNzLCBzc3JjKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKSB7Ci0gICAgLyogbWFrZSBuZXcgaW50ZXJuYWwgU291cmNlIGFuZCBpbnNlcnQgKi8KLSAgICBzb3VyY2UgPSBydHBfc291cmNlX25ldyAoc3NyYyk7Ci0KLSAgICBHU1RfREVCVUcgKCJjcmVhdGluZyBuZXcgaW50ZXJuYWwgc291cmNlICUwOHggJXAiLCBzc3JjLCBzb3VyY2UpOwotCi0gICAgc291cmNlLT52YWxpZGF0ZWQgPSBUUlVFOwotICAgIHNvdXJjZS0+aW50ZXJuYWwgPSBUUlVFOwotICAgIHNvdXJjZS0+cHJvYmF0aW9uID0gRkFMU0U7Ci0gICAgcnRwX3NvdXJjZV9zZXRfc2Rlc19zdHJ1Y3QgKHNvdXJjZSwgZ3N0X3N0cnVjdHVyZV9jb3B5IChzZXNzLT5zZGVzKSk7Ci0gICAgcnRwX3NvdXJjZV9zZXRfY2FsbGJhY2tzIChzb3VyY2UsICZjYWxsYmFja3MsIHNlc3MpOwotCi0gICAgYWRkX3NvdXJjZSAoc2Vzcywgc291cmNlKTsKLSAgICAqY3JlYXRlZCA9IFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgKmNyZWF0ZWQgPSBGQUxTRTsKLSAgfQotICAvKiB1cGRhdGUgbGFzdCBhY3Rpdml0eSAqLwotICBpZiAoY3VycmVudF90aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBzb3VyY2UtPmxhc3RfYWN0aXZpdHkgPSBjdXJyZW50X3RpbWU7Ci0gICAgc291cmNlLT5sYXN0X3J0cF9hY3Rpdml0eSA9IGN1cnJlbnRfdGltZTsKLSAgfQotICBnX29iamVjdF9yZWYgKHNvdXJjZSk7Ci0KLSAgcmV0dXJuIHNvdXJjZTsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9zdWdnZXN0X3NzcmM6Ci0gKiBAc2VzczogYSAjUlRQU2Vzc2lvbgotICogQGlzX3JhbmRvbTogaWYgdGhlIHN1Z2dlc3RlZCBzc3JjIGlzIHJhbmRvbQotICoKLSAqIFN1Z2dlc3QgYW4gdW51c2VkIFNTUkMgaW4gQHNlc3MuCi0gKgotICogUmV0dXJuczogYSBmcmVlIHVudXNlZCBTU1JDCi0gKi8KLWd1aW50MzIKLXJ0cF9zZXNzaW9uX3N1Z2dlc3Rfc3NyYyAoUlRQU2Vzc2lvbiAqIHNlc3MsIGdib29sZWFuICogaXNfcmFuZG9tKQotewotICBndWludDMyIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpLCAwKTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgcmVzdWx0ID0gc2Vzcy0+c3VnZ2VzdGVkX3NzcmM7Ci0gIGlmIChpc19yYW5kb20pCi0gICAgKmlzX3JhbmRvbSA9ICFzZXNzLT5pbnRlcm5hbF9zc3JjX3NldDsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX2FkZF9zb3VyY2U6Ci0gKiBAc2VzczogYSAjUlRQU2Vzc2lvbgotICogQHNyYzogI1JUUFNvdXJjZSB0byBhZGQKLSAqCi0gKiBBZGQgQHNyYyB0byBAc2Vzc2lvbi4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLCAlRkFMU0UgaWYgYSBzb3VyY2Ugd2l0aCB0aGUgc2FtZSBTU1JDIGFscmVhZHkKLSAqIGV4aXN0ZWQgaW4gdGhlIHNlc3Npb24uCi0gKi8KLWdib29sZWFuCi1ydHBfc2Vzc2lvbl9hZGRfc291cmNlIChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc3JjKQotewotICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKLSAgUlRQU291cmNlICpmaW5kOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU0VTU0lPTiAoc2VzcyksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNyYyAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIGZpbmQgPSBmaW5kX3NvdXJjZSAoc2Vzcywgc3JjLT5zc3JjKTsKLSAgaWYgKGZpbmQgPT0gTlVMTCkgewotICAgIGFkZF9zb3VyY2UgKHNlc3MsIHNyYyk7Ci0gICAgcmVzdWx0ID0gVFJVRTsKLSAgfQotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fZ2V0X251bV9zb3VyY2VzOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKgotICogR2V0IHRoZSBudW1iZXIgb2Ygc291cmNlcyBpbiBAc2Vzcy4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgbnVtYmVyIG9mIHNvdXJjZXMgaW4gQHNlc3MuCi0gKi8KLWd1aW50Ci1ydHBfc2Vzc2lvbl9nZXRfbnVtX3NvdXJjZXMgKFJUUFNlc3Npb24gKiBzZXNzKQotewotICBndWludCByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSwgRkFMU0UpOwotCi0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICByZXN1bHQgPSBzZXNzLT50b3RhbF9zb3VyY2VzOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fZ2V0X251bV9hY3RpdmVfc291cmNlczoKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICoKLSAqIEdldCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBzb3VyY2VzIGluIEBzZXNzLiBBIHNvdXJjZSBpcyBjb25zaWRlcmVkIGFjdGl2ZSB3aGVuCi0gKiBpdCBoYXMgYmVlbiB2YWxpZGF0ZWQgYW5kIGhhcyBub3QgeWV0IHJlY2VpdmVkIGEgQllFIFJUQ1AgbWVzc2FnZS4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgbnVtYmVyIG9mIGFjdGl2ZSBzb3VyY2VzIGluIEBzZXNzLgotICovCi1ndWludAotcnRwX3Nlc3Npb25fZ2V0X251bV9hY3RpdmVfc291cmNlcyAoUlRQU2Vzc2lvbiAqIHNlc3MpCi17Ci0gIGd1aW50IHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpLCAwKTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgcmVzdWx0ID0gc2Vzcy0+c3RhdHMuYWN0aXZlX3NvdXJjZXM7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9nZXRfc291cmNlX2J5X3NzcmM6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBzc3JjOiBhbiBTU1JDCi0gKgotICogRmluZCB0aGUgc291cmNlIHdpdGggQHNzcmMgaW4gQHNlc3MuCi0gKgotICogUmV0dXJuczogYSAjUlRQU291cmNlIHdpdGggU1NSQyBAc3NyYyBvciBOVUxMIGlmIHRoZSBzb3VyY2Ugd2FzIG5vdCBmb3VuZC4KLSAqIGdfb2JqZWN0X3VucmVmKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLVJUUFNvdXJjZSAqCi1ydHBfc2Vzc2lvbl9nZXRfc291cmNlX2J5X3NzcmMgKFJUUFNlc3Npb24gKiBzZXNzLCBndWludDMyIHNzcmMpCi17Ci0gIFJUUFNvdXJjZSAqcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU0VTU0lPTiAoc2VzcyksIE5VTEwpOwotCi0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICByZXN1bHQgPSBmaW5kX3NvdXJjZSAoc2Vzcywgc3NyYyk7Ci0gIGlmIChyZXN1bHQgIT0gTlVMTCkKLSAgICBnX29iamVjdF9yZWYgKHJlc3VsdCk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBTRVNTSU9OIGxvY2sgKi8KLXN0YXRpYyBndWludDMyCi1ydHBfc2Vzc2lvbl9jcmVhdGVfbmV3X3NzcmMgKFJUUFNlc3Npb24gKiBzZXNzKQotewotICBndWludDMyIHNzcmM7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBzc3JjID0gZ19yYW5kb21faW50ICgpOwotCi0gICAgLyogc2VlIGlmIGl0IGV4aXN0cyBpbiB0aGUgc2Vzc2lvbiwgd2UncmUgZG9uZSBpZiBpdCBkb2Vzbid0ICovCi0gICAgaWYgKGZpbmRfc291cmNlIChzZXNzLCBzc3JjKSA9PSBOVUxMKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHNzcmM7Ci19Ci0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9jcmVhdGVfc291cmNlOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKgotICogQ3JlYXRlIGFuICNSVFBTb3VyY2UgZm9yIHVzZSBpbiBAc2Vzcy4gVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhIHNvdXJjZQotICogd2l0aCBhbiBzc3JjIHRoYXQgaXMgY3VycmVudGx5IG5vdCB1c2VkIGJ5IGFueSBwYXJ0aWNpcGFudHMgaW4gdGhlIHNlc3Npb24uCi0gKgotICogUmV0dXJuczogYW4gI1JUUFNvdXJjZS4KLSAqLwotUlRQU291cmNlICoKLXJ0cF9zZXNzaW9uX2NyZWF0ZV9zb3VyY2UgKFJUUFNlc3Npb24gKiBzZXNzKQotewotICBndWludDMyIHNzcmM7Ci0gIFJUUFNvdXJjZSAqc291cmNlOwotCi0gIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICBzc3JjID0gcnRwX3Nlc3Npb25fY3JlYXRlX25ld19zc3JjIChzZXNzKTsKLSAgc291cmNlID0gcnRwX3NvdXJjZV9uZXcgKHNzcmMpOwotICBydHBfc291cmNlX3NldF9jYWxsYmFja3MgKHNvdXJjZSwgJmNhbGxiYWNrcywgc2Vzcyk7Ci0gIC8qIHdlIG5lZWQgYW4gYWRkaXRpb25hbCByZWYgZm9yIHRoZSBzb3VyY2UgaW4gdGhlIGhhc2h0YWJsZSAqLwotICBnX29iamVjdF9yZWYgKHNvdXJjZSk7Ci0gIGFkZF9zb3VyY2UgKHNlc3MsIHNvdXJjZSk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIHNvdXJjZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi11cGRhdGVfcGFja2V0IChHc3RCdWZmZXIgKiogYnVmZmVyLCBndWludCBpZHgsIFJUUFBhY2tldEluZm8gKiBwaW5mbykKLXsKLSAgR3N0TmV0QWRkcmVzc01ldGEgKm1ldGE7Ci0KLSAgLyogZ2V0IHBhY2tldCBzaXplIGluY2x1ZGluZyBoZWFkZXIgb3ZlcmhlYWQgKi8KLSAgcGluZm8tPmJ5dGVzICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpidWZmZXIpICsgcGluZm8tPmhlYWRlcl9sZW47Ci0gIHBpbmZvLT5wYWNrZXRzKys7Ci0KLSAgaWYgKHBpbmZvLT5ydHApIHsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0geyBOVUxMIH07Ci0KLSAgICBpZiAoIWdzdF9ydHBfYnVmZmVyX21hcCAoKmJ1ZmZlciwgR1NUX01BUF9SRUFELCAmcnRwKSkKLSAgICAgIGdvdG8gaW52YWxpZF9wYWNrZXQ7Ci0KLSAgICBwaW5mby0+cGF5bG9hZF9sZW4gKz0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuICgmcnRwKTsKLSAgICBpZiAoaWR4ID09IDApIHsKLSAgICAgIGdpbnQgaTsKLQotICAgICAgLyogb25seSBrZWVwIGluZm8gZm9yIGZpcnN0IGJ1ZmZlciAqLwotICAgICAgcGluZm8tPnNzcmMgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoJnJ0cCk7Ci0gICAgICBwaW5mby0+c2VxbnVtID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAoJnJ0cCk7Ci0gICAgICBwaW5mby0+cHQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF90eXBlICgmcnRwKTsKLSAgICAgIHBpbmZvLT5ydHB0aW1lID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAoJnJ0cCk7Ci0gICAgICAvKiBjb3B5IGF2YWlsYWJsZSBjc3JjICovCi0gICAgICBwaW5mby0+Y3NyY19jb3VudCA9IGdzdF9ydHBfYnVmZmVyX2dldF9jc3JjX2NvdW50ICgmcnRwKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBwaW5mby0+Y3NyY19jb3VudDsgaSsrKQotICAgICAgICBwaW5mby0+Y3NyY3NbaV0gPSBnc3RfcnRwX2J1ZmZlcl9nZXRfY3NyYyAoJnJ0cCwgaSk7Ci0gICAgfQotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLSAgfQotCi0gIGlmIChpZHggPT0gMCkgewotICAgIC8qIGZvciBuZXRidWZmZXIgd2UgY2FuIHN0b3JlIHRoZSBJUCBhZGRyZXNzIHRvIGNoZWNrIGZvciBjb2xsaXNpb25zICovCi0gICAgbWV0YSA9IGdzdF9idWZmZXJfZ2V0X25ldF9hZGRyZXNzX21ldGEgKCpidWZmZXIpOwotICAgIGlmIChwaW5mby0+YWRkcmVzcykKLSAgICAgIGdfb2JqZWN0X3VucmVmIChwaW5mby0+YWRkcmVzcyk7Ci0gICAgaWYgKG1ldGEpIHsKLSAgICAgIHBpbmZvLT5hZGRyZXNzID0gR19TT0NLRVRfQUREUkVTUyAoZ19vYmplY3RfcmVmIChtZXRhLT5hZGRyKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBpbmZvLT5hZGRyZXNzID0gTlVMTDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX3BhY2tldDoKLSAgewotICAgIEdTVF9ERUJVRyAoImludmFsaWQgUlRQIHBhY2tldCByZWNlaXZlZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiB1cGRhdGUgdGhlIFJUUFBhY2tldEluZm8gc3RydWN0dXJlIHdpdGggdGhlIGN1cnJlbnQgdGltZSBhbmQgb3RoZXIgYml0cwotICogYWJvdXQgdGhlIGN1cnJlbnQgYnVmZmVyIHdlIGFyZSBoYW5kbGluZy4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCB3aGVuIGEgdmFsaWRhdGVkIHBhY2tldCBpcyByZWNlaXZlZC4KLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBTRVNTSU9OX0xPQ0sKLSAqLwotc3RhdGljIGdib29sZWFuCi11cGRhdGVfcGFja2V0X2luZm8gKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBQYWNrZXRJbmZvICogcGluZm8sCi0gICAgZ2Jvb2xlYW4gc2VuZCwgZ2Jvb2xlYW4gcnRwLCBnYm9vbGVhbiBpc19saXN0LCBncG9pbnRlciBkYXRhLAotICAgIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUsIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsIGd1aW50NjQgbnRwbnN0aW1lKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgcGluZm8tPnNlbmQgPSBzZW5kOwotICBwaW5mby0+cnRwID0gcnRwOwotICBwaW5mby0+aXNfbGlzdCA9IGlzX2xpc3Q7Ci0gIHBpbmZvLT5kYXRhID0gZGF0YTsKLSAgcGluZm8tPmN1cnJlbnRfdGltZSA9IGN1cnJlbnRfdGltZTsKLSAgcGluZm8tPnJ1bm5pbmdfdGltZSA9IHJ1bm5pbmdfdGltZTsKLSAgcGluZm8tPm50cG5zdGltZSA9IG50cG5zdGltZTsKLSAgcGluZm8tPmhlYWRlcl9sZW4gPSBzZXNzLT5oZWFkZXJfbGVuOwotICBwaW5mby0+Ynl0ZXMgPSAwOwotICBwaW5mby0+cGF5bG9hZF9sZW4gPSAwOwotICBwaW5mby0+cGFja2V0cyA9IDA7Ci0KLSAgaWYgKGlzX2xpc3QpIHsKLSAgICBHc3RCdWZmZXJMaXN0ICpsaXN0ID0gR1NUX0JVRkZFUl9MSVNUX0NBU1QgKGRhdGEpOwotICAgIHJlcyA9Ci0gICAgICAgIGdzdF9idWZmZXJfbGlzdF9mb3JlYWNoIChsaXN0LCAoR3N0QnVmZmVyTGlzdEZ1bmMpIHVwZGF0ZV9wYWNrZXQsCi0gICAgICAgIHBpbmZvKTsKLSAgfSBlbHNlIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IEdTVF9CVUZGRVJfQ0FTVCAoZGF0YSk7Ci0gICAgcmVzID0gdXBkYXRlX3BhY2tldCAoJmJ1ZmZlciwgMCwgcGluZm8pOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbl9wYWNrZXRfaW5mbyAoUlRQUGFja2V0SW5mbyAqIHBpbmZvKQotewotICBpZiAocGluZm8tPmFkZHJlc3MpCi0gICAgZ19vYmplY3RfdW5yZWYgKHBpbmZvLT5hZGRyZXNzKTsKLSAgaWYgKHBpbmZvLT5kYXRhKSB7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChwaW5mby0+ZGF0YSk7Ci0gICAgcGluZm8tPmRhdGEgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotc291cmNlX3VwZGF0ZV9hY3RpdmUgKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBTb3VyY2UgKiBzb3VyY2UsCi0gICAgZ2Jvb2xlYW4gcHJldmFjdGl2ZSkKLXsKLSAgZ2Jvb2xlYW4gYWN0aXZlID0gUlRQX1NPVVJDRV9JU19BQ1RJVkUgKHNvdXJjZSk7Ci0gIGd1aW50MzIgc3NyYyA9IHNvdXJjZS0+c3NyYzsKLQotICBpZiAocHJldmFjdGl2ZSA9PSBhY3RpdmUpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChhY3RpdmUpIHsKLSAgICBzZXNzLT5zdGF0cy5hY3RpdmVfc291cmNlcysrOwotICAgIEdTVF9ERUJVRyAoInNvdXJjZTogJTA4eCBiZWNhbWUgYWN0aXZlLCAlZCBhY3RpdmUgc291cmNlcyIsIHNzcmMsCi0gICAgICAgIHNlc3MtPnN0YXRzLmFjdGl2ZV9zb3VyY2VzKTsKLSAgfSBlbHNlIHsKLSAgICBzZXNzLT5zdGF0cy5hY3RpdmVfc291cmNlcy0tOwotICAgIEdTVF9ERUJVRyAoInNvdXJjZTogJTA4eCBiZWNhbWUgaW5hY3RpdmUsICVkIGFjdGl2ZSBzb3VyY2VzIiwgc3NyYywKLSAgICAgICAgc2Vzcy0+c3RhdHMuYWN0aXZlX3NvdXJjZXMpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNvdXJjZV91cGRhdGVfc2VuZGVyIChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc291cmNlLAotICAgIGdib29sZWFuIHByZXZzZW5kZXIpCi17Ci0gIGdib29sZWFuIHNlbmRlciA9IFJUUF9TT1VSQ0VfSVNfU0VOREVSIChzb3VyY2UpOwotICBndWludDMyIHNzcmMgPSBzb3VyY2UtPnNzcmM7Ci0KLSAgaWYgKHByZXZzZW5kZXIgPT0gc2VuZGVyKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoc2VuZGVyKSB7Ci0gICAgc2Vzcy0+c3RhdHMuc2VuZGVyX3NvdXJjZXMrKzsKLSAgICBpZiAoc291cmNlLT5pbnRlcm5hbCkKLSAgICAgIHNlc3MtPnN0YXRzLmludGVybmFsX3NlbmRlcl9zb3VyY2VzKys7Ci0gICAgR1NUX0RFQlVHICgic291cmNlOiAlMDh4IGJlY2FtZSBzZW5kZXIsICVkIHNlbmRlciBzb3VyY2VzIiwgc3NyYywKLSAgICAgICAgc2Vzcy0+c3RhdHMuc2VuZGVyX3NvdXJjZXMpOwotICB9IGVsc2UgewotICAgIHNlc3MtPnN0YXRzLnNlbmRlcl9zb3VyY2VzLS07Ci0gICAgaWYgKHNvdXJjZS0+aW50ZXJuYWwpCi0gICAgICBzZXNzLT5zdGF0cy5pbnRlcm5hbF9zZW5kZXJfc291cmNlcy0tOwotICAgIEdTVF9ERUJVRyAoInNvdXJjZTogJTA4eCBiZWNhbWUgbm9uIHNlbmRlciwgJWQgc2VuZGVyIHNvdXJjZXMiLCBzc3JjLAotICAgICAgICBzZXNzLT5zdGF0cy5zZW5kZXJfc291cmNlcyk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fcHJvY2Vzc19ydHA6Ci0gKiBAc2VzczogYW5kICNSVFBTZXNzaW9uCi0gKiBAYnVmZmVyOiBhbiBSVFAgYnVmZmVyCi0gKiBAY3VycmVudF90aW1lOiB0aGUgY3VycmVudCBzeXN0ZW0gdGltZQotICogQHJ1bm5pbmdfdGltZTogdGhlIHJ1bm5pbmdfdGltZSBvZiBAYnVmZmVyCi0gKgotICogUHJvY2VzcyBhbiBSVFAgYnVmZmVyIGluIHRoZSBzZXNzaW9uIG1hbmFnZXIuIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwCi0gKiBvZiBAYnVmZmVyLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4uCi0gKi8KLUdzdEZsb3dSZXR1cm4KLXJ0cF9zZXNzaW9uX3Byb2Nlc3NfcnRwIChSVFBTZXNzaW9uICogc2VzcywgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUsIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsIGd1aW50NjQgbnRwbnN0aW1lKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKLSAgZ3VpbnQzMiBzc3JjOwotICBSVFBTb3VyY2UgKnNvdXJjZTsKLSAgZ2Jvb2xlYW4gY3JlYXRlZDsKLSAgZ2Jvb2xlYW4gcHJldnNlbmRlciwgcHJldmFjdGl2ZTsKLSAgUlRQUGFja2V0SW5mbyBwaW5mbyA9IHsgMCwgfTsKLSAgZ3VpbnQ2NCBvbGRyYXRlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU0VTU0lPTiAoc2VzcyksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlciksIEdTVF9GTE9XX0VSUk9SKTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLQotICAvKiB1cGRhdGUgcGluZm8gc3RhdHMgKi8KLSAgaWYgKCF1cGRhdGVfcGFja2V0X2luZm8gKHNlc3MsICZwaW5mbywgRkFMU0UsIFRSVUUsIEZBTFNFLCBidWZmZXIsCi0gICAgICAgICAgY3VycmVudF90aW1lLCBydW5uaW5nX3RpbWUsIG50cG5zdGltZSkpIHsKLSAgICBHU1RfREVCVUcgKCJpbnZhbGlkIFJUUCBwYWNrZXQgcmVjZWl2ZWQiKTsKLSAgICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICAgIHJldHVybiBydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3AgKHNlc3MsIGJ1ZmZlciwgY3VycmVudF90aW1lLCBudHBuc3RpbWUpOwotICB9Ci0KLSAgc3NyYyA9IHBpbmZvLnNzcmM7Ci0KLSAgc291cmNlID0gb2J0YWluX3NvdXJjZSAoc2Vzcywgc3NyYywgJmNyZWF0ZWQsICZwaW5mbywgVFJVRSk7Ci0gIGlmICghc291cmNlKQotICAgIGdvdG8gY29sbGlzaW9uOwotCi0gIHByZXZzZW5kZXIgPSBSVFBfU09VUkNFX0lTX1NFTkRFUiAoc291cmNlKTsKLSAgcHJldmFjdGl2ZSA9IFJUUF9TT1VSQ0VfSVNfQUNUSVZFIChzb3VyY2UpOwotICBvbGRyYXRlID0gc291cmNlLT5iaXRyYXRlOwotCi0gIC8qIGxldCBzb3VyY2UgcHJvY2VzcyB0aGUgcGFja2V0ICovCi0gIHJlc3VsdCA9IHJ0cF9zb3VyY2VfcHJvY2Vzc19ydHAgKHNvdXJjZSwgJnBpbmZvKTsKLQotICAvKiBzb3VyY2UgYmVjYW1lIGFjdGl2ZSAqLwotICBpZiAoc291cmNlX3VwZGF0ZV9hY3RpdmUgKHNlc3MsIHNvdXJjZSwgcHJldmFjdGl2ZSkpCi0gICAgb25fc3NyY192YWxpZGF0ZWQgKHNlc3MsIHNvdXJjZSk7Ci0KLSAgc291cmNlX3VwZGF0ZV9zZW5kZXIgKHNlc3MsIHNvdXJjZSwgcHJldnNlbmRlcik7Ci0KLSAgaWYgKG9sZHJhdGUgIT0gc291cmNlLT5iaXRyYXRlKQotICAgIHNlc3MtPnJlY2FsY19iYW5kd2lkdGggPSBUUlVFOwotCi0gIGlmIChjcmVhdGVkKQotICAgIG9uX25ld19zc3JjIChzZXNzLCBzb3VyY2UpOwotCi0gIGlmIChzb3VyY2UtPnZhbGlkYXRlZCkgewotICAgIGdib29sZWFuIGNyZWF0ZWQ7Ci0gICAgZ2ludCBpOwotCi0gICAgLyogZm9yIHZhbGlkYXRlZCBzb3VyY2VzLCB3ZSBhZGQgdGhlIENTUkNzIGFzIHdlbGwgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgcGluZm8uY3NyY19jb3VudDsgaSsrKSB7Ci0gICAgICBndWludDMyIGNzcmM7Ci0gICAgICBSVFBTb3VyY2UgKmNzcmNfc3JjOwotCi0gICAgICBjc3JjID0gcGluZm8uY3NyY3NbaV07Ci0KLSAgICAgIC8qIGdldCBzb3VyY2UgKi8KLSAgICAgIGNzcmNfc3JjID0gb2J0YWluX3NvdXJjZSAoc2VzcywgY3NyYywgJmNyZWF0ZWQsICZwaW5mbywgVFJVRSk7Ci0gICAgICBpZiAoIWNzcmNfc3JjKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgaWYgKGNyZWF0ZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHICgiY3JlYXRlZCBuZXcgQ1NSQzogJTA4eCIsIGNzcmMpOwotICAgICAgICBydHBfc291cmNlX3NldF9hc19jc3JjIChjc3JjX3NyYyk7Ci0gICAgICAgIHNvdXJjZV91cGRhdGVfYWN0aXZlIChzZXNzLCBjc3JjX3NyYywgRkFMU0UpOwotICAgICAgICBvbl9uZXdfc3NyYyAoc2VzcywgY3NyY19zcmMpOwotICAgICAgfQotICAgICAgZ19vYmplY3RfdW5yZWYgKGNzcmNfc3JjKTsKLSAgICB9Ci0gIH0KLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci0KLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICBjbGVhbl9wYWNrZXRfaW5mbyAoJnBpbmZvKTsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotY29sbGlzaW9uOgotICB7Ci0gICAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgICBjbGVhbl9wYWNrZXRfaW5mbyAoJnBpbmZvKTsKLSAgICBHU1RfREVCVUcgKCJpZ25vcmluZyBwYWNrZXQgYmVjYXVzZSBpdHMgY29sbGlzaW9uaW5nIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9wcm9jZXNzX3JiIChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc291cmNlLAotICAgIEdzdFJUQ1BQYWNrZXQgKiBwYWNrZXQsIFJUUFBhY2tldEluZm8gKiBwaW5mbykKLXsKLSAgZ3VpbnQgY291bnQsIGk7Ci0KLSAgY291bnQgPSBnc3RfcnRjcF9wYWNrZXRfZ2V0X3JiX2NvdW50IChwYWNrZXQpOwotICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgIGd1aW50MzIgc3NyYywgZXh0aGlnaGVzdHNlcSwgaml0dGVyLCBsc3IsIGRsc3I7Ci0gICAgZ3VpbnQ4IGZyYWN0aW9ubG9zdDsKLSAgICBnaW50MzIgcGFja2V0c2xvc3Q7Ci0gICAgUlRQU291cmNlICpzcmM7Ci0KLSAgICBnc3RfcnRjcF9wYWNrZXRfZ2V0X3JiIChwYWNrZXQsIGksICZzc3JjLCAmZnJhY3Rpb25sb3N0LAotICAgICAgICAmcGFja2V0c2xvc3QsICZleHRoaWdoZXN0c2VxLCAmaml0dGVyLCAmbHNyLCAmZGxzcik7Ci0KLSAgICBHU1RfREVCVUcgKCJSQiAlZDogU1NSQyAlMDh4LCBqaXR0ZXIgJSIgR19HVUlOVDMyX0ZPUk1BVCwgaSwgc3NyYywgaml0dGVyKTsKLQotICAgIC8qIGZpbmQgb3VyIG93biBzb3VyY2UgKi8KLSAgICBzcmMgPSBmaW5kX3NvdXJjZSAoc2Vzcywgc3NyYyk7Ci0gICAgaWYgKHNyYyA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoc3JjLT5pbnRlcm5hbCAmJiBSVFBfU09VUkNFX0lTX0FDVElWRSAoc3JjKSkgewotICAgICAgLyogb25seSBkZWFsIHdpdGggcmVwb3J0IGJsb2NrcyBmb3Igb3VyIHNlc3Npb24sIHdlIHVwZGF0ZSB0aGUgc3RhdHMgb2YKLSAgICAgICAqIHRoZSBzZW5kZXIgb2YgdGhlIFJUQ1AgbWVzc2FnZS4gV2UgY291bGQgYWxzbyBjb21wYXJlIG91ciBzdGF0cyBhZ2FpbnN0Ci0gICAgICAgKiB0aGUgb3RoZXIgc2VuZGVyIHRvIHNlZSBpZiB3ZSBhcmUgYmV0dGVyIG9yIHdvcnNlLiAqLwotICAgICAgLyogRklYTUUsIG5lZWQgdG8ga2VlcCB0cmFjayB3aG8gdGhlIFJCIGJsb2NrIGlzIGZyb20gKi8KLSAgICAgIHJ0cF9zb3VyY2VfcHJvY2Vzc19yYiAoc291cmNlLCBwaW5mby0+bnRwbnN0aW1lLCBmcmFjdGlvbmxvc3QsCi0gICAgICAgICAgcGFja2V0c2xvc3QsIGV4dGhpZ2hlc3RzZXEsIGppdHRlciwgbHNyLCBkbHNyKTsKLSAgICB9Ci0gIH0KLSAgb25fc3NyY19hY3RpdmUgKHNlc3MsIHNvdXJjZSk7Ci19Ci0KLS8qIEEgU2VuZGVyIHJlcG9ydCBjb250YWlucyBzdGF0aXN0aWNzIGFib3V0IGhvdyB0aGUgc2VuZGVyIGlzIGRvaW5nLiBUaGlzCi0gKiBpbmNsdWRlcyB0aW1pbmcgaW5mb3JtYXRhaW9uIHN1Y2ggYXMgdGhlIHJlbGF0aW9uIGJldHdlZW4gUlRQIGFuZCBOVFAKLSAqIHRpbWVzdGFtcHMgYW5kIHRoZSBudW1iZXIgb2YgcGFja2V0cy9ieXRlcyBpdCBzZW50IHRvIHVzLgotICoKLSAqIEluIHRoaXMgcmVwb3J0IGlzIGFsc28gaW5jbHVkZWQgYSBzZXQgb2YgcmVwb3J0IGJsb2NrcyByZWxhdGVkIHRvIGhvdyB0aGlzCi0gKiBzZW5kZXIgaXMgcmVjZWl2aW5nIGRhdGEgKGluIGNhc2Ugd2UgKG9yIHNvbWVib2R5IGVsc2UpIGlzIGFsc28gc2VuZGluZyBzdHVmZgotICogdG8gaXQpLiBUaGlzIGluZm8gaW5jbHVkZXMgdGhlIHBhY2tldCBsb3NzLCBqaXR0ZXIgYW5kIHNlcW51bS4gSXQgYWxzbwotICogY29udGFpbnMgaW5mb3JtYXRpb24gdG8gY2FsY3VsYXRlIHRoZSByb3VuZCB0cmlwIHRpbWUgKExTUi9ETFNSKS4KLSAqLwotc3RhdGljIHZvaWQKLXJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc3IgKFJUUFNlc3Npb24gKiBzZXNzLCBHc3RSVENQUGFja2V0ICogcGFja2V0LAotICAgIFJUUFBhY2tldEluZm8gKiBwaW5mbywgZ2Jvb2xlYW4gKiBkb19zeW5jKQotewotICBndWludDMyIHNlbmRlcnNzcmMsIHJ0cHRpbWUsIHBhY2tldF9jb3VudCwgb2N0ZXRfY291bnQ7Ci0gIGd1aW50NjQgbnRwdGltZTsKLSAgUlRQU291cmNlICpzb3VyY2U7Ci0gIGdib29sZWFuIGNyZWF0ZWQsIHByZXZzZW5kZXI7Ci0KLSAgZ3N0X3J0Y3BfcGFja2V0X3NyX2dldF9zZW5kZXJfaW5mbyAocGFja2V0LCAmc2VuZGVyc3NyYywgJm50cHRpbWUsICZydHB0aW1lLAotICAgICAgJnBhY2tldF9jb3VudCwgJm9jdGV0X2NvdW50KTsKLQotICBHU1RfREVCVUcgKCJnb3QgU1IgcGFja2V0OiBTU1JDICUwOHgsIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgc2VuZGVyc3NyYywgR1NUX1RJTUVfQVJHUyAocGluZm8tPmN1cnJlbnRfdGltZSkpOwotCi0gIHNvdXJjZSA9IG9idGFpbl9zb3VyY2UgKHNlc3MsIHNlbmRlcnNzcmMsICZjcmVhdGVkLCBwaW5mbywgRkFMU0UpOwotICBpZiAoIXNvdXJjZSkKLSAgICByZXR1cm47Ci0KLSAgLyogc2tpcCBub24tYnllIHBhY2tldHMgZm9yIHNvdXJjZXMgdGhhdCBhcmUgbWFya2VkIEJZRSAqLwotICBpZiAoc2Vzcy0+c2NoZWR1bGVkX2J5ZSAmJiBSVFBfU09VUkNFX0lTX01BUktFRF9CWUUgKHNvdXJjZSkpCi0gICAgZ290byBvdXQ7Ci0KLSAgLyogZG9uJ3QgdHJ5IHRvIGRvIGxpcC1zeW5jIGZvciBzb3VyY2VzIHRoYXQgc2VudCBhIEJZRSAqLwotICBpZiAoUlRQX1NPVVJDRV9JU19NQVJLRURfQllFIChzb3VyY2UpKQotICAgICpkb19zeW5jID0gRkFMU0U7Ci0gIGVsc2UKLSAgICAqZG9fc3luYyA9IFRSVUU7Ci0KLSAgcHJldnNlbmRlciA9IFJUUF9TT1VSQ0VfSVNfU0VOREVSIChzb3VyY2UpOwotCi0gIC8qIGZpcnN0IHVwZGF0ZSB0aGUgc291cmNlICovCi0gIHJ0cF9zb3VyY2VfcHJvY2Vzc19zciAoc291cmNlLCBwaW5mby0+Y3VycmVudF90aW1lLCBudHB0aW1lLCBydHB0aW1lLAotICAgICAgcGFja2V0X2NvdW50LCBvY3RldF9jb3VudCk7Ci0KLSAgc291cmNlX3VwZGF0ZV9zZW5kZXIgKHNlc3MsIHNvdXJjZSwgcHJldnNlbmRlcik7Ci0KLSAgaWYgKGNyZWF0ZWQpCi0gICAgb25fbmV3X3NzcmMgKHNlc3MsIHNvdXJjZSk7Ci0KLSAgcnRwX3Nlc3Npb25fcHJvY2Vzc19yYiAoc2Vzcywgc291cmNlLCBwYWNrZXQsIHBpbmZvKTsKLQotb3V0OgotICBnX29iamVjdF91bnJlZiAoc291cmNlKTsKLX0KLQotLyogQSByZWNlaXZlciByZXBvcnQgY29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBob3cgYSByZWNlaXZlciBpcyBkb2luZy4gSXQKLSAqIGluY2x1ZGVzIHN0dWZmIGxpa2UgcGFja2V0IGxvc3MsIGppdHRlciBhbmQgdGhlIHNlcW51bSBpdCByZWNlaXZlZCBsYXN0LiBJdAotICogYWxzbyBjb250YWlucyBpbmZvIHRvIGNhbGN1bGF0ZSB0aGUgcm91bmQgdHJpcCB0aW1lLgotICoKLSAqIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzZW5kZXIgb2YgdGhpcyByZXBvcnQgaXMgZG9pbmcgd3J0IHRvIHVzLgotICovCi1zdGF0aWMgdm9pZAotcnRwX3Nlc3Npb25fcHJvY2Vzc19yciAoUlRQU2Vzc2lvbiAqIHNlc3MsIEdzdFJUQ1BQYWNrZXQgKiBwYWNrZXQsCi0gICAgUlRQUGFja2V0SW5mbyAqIHBpbmZvKQotewotICBndWludDMyIHNlbmRlcnNzcmM7Ci0gIFJUUFNvdXJjZSAqc291cmNlOwotICBnYm9vbGVhbiBjcmVhdGVkOwotCi0gIHNlbmRlcnNzcmMgPSBnc3RfcnRjcF9wYWNrZXRfcnJfZ2V0X3NzcmMgKHBhY2tldCk7Ci0KLSAgR1NUX0RFQlVHICgiZ290IFJSIHBhY2tldDogU1NSQyAlMDh4Iiwgc2VuZGVyc3NyYyk7Ci0KLSAgc291cmNlID0gb2J0YWluX3NvdXJjZSAoc2Vzcywgc2VuZGVyc3NyYywgJmNyZWF0ZWQsIHBpbmZvLCBGQUxTRSk7Ci0gIGlmICghc291cmNlKQotICAgIHJldHVybjsKLQotICAvKiBza2lwIG5vbi1ieWUgcGFja2V0cyBmb3Igc291cmNlcyB0aGF0IGFyZSBtYXJrZWQgQllFICovCi0gIGlmIChzZXNzLT5zY2hlZHVsZWRfYnllICYmIFJUUF9TT1VSQ0VfSVNfTUFSS0VEX0JZRSAoc291cmNlKSkKLSAgICBnb3RvIG91dDsKLQotICBpZiAoY3JlYXRlZCkKLSAgICBvbl9uZXdfc3NyYyAoc2Vzcywgc291cmNlKTsKLQotICBydHBfc2Vzc2lvbl9wcm9jZXNzX3JiIChzZXNzLCBzb3VyY2UsIHBhY2tldCwgcGluZm8pOwotCi1vdXQ6Ci0gIGdfb2JqZWN0X3VucmVmIChzb3VyY2UpOwotfQotCi0vKiBHZXQgU0RFUyBpdGVtcyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgU1NSQyAqLwotc3RhdGljIHZvaWQKLXJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc2RlcyAoUlRQU2Vzc2lvbiAqIHNlc3MsIEdzdFJUQ1BQYWNrZXQgKiBwYWNrZXQsCi0gICAgUlRQUGFja2V0SW5mbyAqIHBpbmZvKQotewotICBndWludCBpdGVtcywgaSwgajsKLSAgZ2Jvb2xlYW4gbW9yZV9pdGVtcywgbW9yZV9lbnRyaWVzOwotCi0gIGl0ZW1zID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZ2V0X2l0ZW1fY291bnQgKHBhY2tldCk7Ci0gIEdTVF9ERUJVRyAoImdvdCBTREVTIHBhY2tldCB3aXRoICVkIGl0ZW1zIiwgaXRlbXMpOwotCi0gIG1vcmVfaXRlbXMgPSBnc3RfcnRjcF9wYWNrZXRfc2Rlc19maXJzdF9pdGVtIChwYWNrZXQpOwotICBpID0gMDsKLSAgd2hpbGUgKG1vcmVfaXRlbXMpIHsKLSAgICBndWludDMyIHNzcmM7Ci0gICAgZ2Jvb2xlYW4gY2hhbmdlZCwgY3JlYXRlZCwgcHJldmFjdGl2ZTsKLSAgICBSVFBTb3VyY2UgKnNvdXJjZTsKLSAgICBHc3RTdHJ1Y3R1cmUgKnNkZXM7Ci0KLSAgICBzc3JjID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZ2V0X3NzcmMgKHBhY2tldCk7Ci0KLSAgICBHU1RfREVCVUcgKCJpdGVtICVkLCBTU1JDICUwOHgiLCBpLCBzc3JjKTsKLQotICAgIGNoYW5nZWQgPSBGQUxTRTsKLQotICAgIC8qIGZpbmQgc3JjLCBubyBwcm9iYXRpb24gd2hlbiBkZWFsaW5nIHdpdGggUlRDUCAqLwotICAgIHNvdXJjZSA9IG9idGFpbl9zb3VyY2UgKHNlc3MsIHNzcmMsICZjcmVhdGVkLCBwaW5mbywgRkFMU0UpOwotICAgIGlmICghc291cmNlKQotICAgICAgcmV0dXJuOwotCi0gICAgLyogc2tpcCBub24tYnllIHBhY2tldHMgZm9yIHNvdXJjZXMgdGhhdCBhcmUgbWFya2VkIEJZRSAqLwotICAgIGlmIChzZXNzLT5zY2hlZHVsZWRfYnllICYmIFJUUF9TT1VSQ0VfSVNfTUFSS0VEX0JZRSAoc291cmNlKSkKLSAgICAgIGdvdG8gbmV4dDsKLQotICAgIHNkZXMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zZGVzIik7Ci0KLSAgICBtb3JlX2VudHJpZXMgPSBnc3RfcnRjcF9wYWNrZXRfc2Rlc19maXJzdF9lbnRyeSAocGFja2V0KTsKLSAgICBqID0gMDsKLSAgICB3aGlsZSAobW9yZV9lbnRyaWVzKSB7Ci0gICAgICBHc3RSVENQU0RFU1R5cGUgdHlwZTsKLSAgICAgIGd1aW50OCBsZW47Ci0gICAgICBndWludDggKmRhdGE7Ci0gICAgICBnY2hhciAqbmFtZTsKLSAgICAgIGdjaGFyICp2YWx1ZTsKLQotICAgICAgZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZ2V0X2VudHJ5IChwYWNrZXQsICZ0eXBlLCAmbGVuLCAmZGF0YSk7Ci0KLSAgICAgIEdTVF9ERUJVRyAoImVudHJ5ICVkLCB0eXBlICVkLCBsZW4gJWQsIGRhdGEgJS4qcyIsIGosIHR5cGUsIGxlbiwgbGVuLAotICAgICAgICAgIGRhdGEpOwotCi0gICAgICBpZiAodHlwZSA9PSBHU1RfUlRDUF9TREVTX1BSSVYpIHsKLSAgICAgICAgbmFtZSA9IGdfc3RybmR1cCAoKGNvbnN0IGdjaGFyICopICZkYXRhWzFdLCBkYXRhWzBdKTsKLSAgICAgICAgbGVuIC09IGRhdGFbMF0gKyAxOwotICAgICAgICBkYXRhICs9IGRhdGFbMF0gKyAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmFtZSA9IGdfc3RyZHVwIChnc3RfcnRjcF9zZGVzX3R5cGVfdG9fbmFtZSAodHlwZSkpOwotICAgICAgfQotCi0gICAgICB2YWx1ZSA9IGdfc3RybmR1cCAoKGNvbnN0IGdjaGFyICopIGRhdGEsIGxlbik7Ci0KLSAgICAgIGlmIChnX3V0ZjhfdmFsaWRhdGUgKHZhbHVlLCAtMSwgTlVMTCkpIHsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHNkZXMsIG5hbWUsIEdfVFlQRV9TVFJJTkcsIHZhbHVlLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HICgiaWdub3JlIFNERVMgZmllbGQgJXMgd2l0aCBub24tdXRmOCBkYXRhICVzIiwgbmFtZSwgdmFsdWUpOwotICAgICAgfQotCi0gICAgICBnX2ZyZWUgKG5hbWUpOwotICAgICAgZ19mcmVlICh2YWx1ZSk7Ci0KLSAgICAgIG1vcmVfZW50cmllcyA9IGdzdF9ydGNwX3BhY2tldF9zZGVzX25leHRfZW50cnkgKHBhY2tldCk7Ci0gICAgICBqKys7Ci0gICAgfQotCi0gICAgLyogdGFrZXMgb3duZXJzaGlwIG9mIHNkZXMgKi8KLSAgICBjaGFuZ2VkID0gcnRwX3NvdXJjZV9zZXRfc2Rlc19zdHJ1Y3QgKHNvdXJjZSwgc2Rlcyk7Ci0KLSAgICBwcmV2YWN0aXZlID0gUlRQX1NPVVJDRV9JU19BQ1RJVkUgKHNvdXJjZSk7Ci0gICAgc291cmNlLT52YWxpZGF0ZWQgPSBUUlVFOwotCi0gICAgaWYgKGNyZWF0ZWQpCi0gICAgICBvbl9uZXdfc3NyYyAoc2Vzcywgc291cmNlKTsKLQotICAgIC8qIHNvdXJjZSBiZWNhbWUgYWN0aXZlICovCi0gICAgaWYgKHNvdXJjZV91cGRhdGVfYWN0aXZlIChzZXNzLCBzb3VyY2UsIHByZXZhY3RpdmUpKQotICAgICAgb25fc3NyY192YWxpZGF0ZWQgKHNlc3MsIHNvdXJjZSk7Ci0KLSAgICBpZiAoY2hhbmdlZCkKLSAgICAgIG9uX3NzcmNfc2RlcyAoc2Vzcywgc291cmNlKTsKLQotICBuZXh0OgotICAgIGdfb2JqZWN0X3VucmVmIChzb3VyY2UpOwotCi0gICAgbW9yZV9pdGVtcyA9IGdzdF9ydGNwX3BhY2tldF9zZGVzX25leHRfaXRlbSAocGFja2V0KTsKLSAgICBpKys7Ci0gIH0KLX0KLQotLyogQllFIGlzIHNlbnQgd2hlbiBhIGNsaWVudCBsZWF2ZXMgdGhlIHNlc3Npb24KLSAqLwotc3RhdGljIHZvaWQKLXJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllIChSVFBTZXNzaW9uICogc2VzcywgR3N0UlRDUFBhY2tldCAqIHBhY2tldCwKLSAgICBSVFBQYWNrZXRJbmZvICogcGluZm8pCi17Ci0gIGd1aW50IGNvdW50LCBpOwotICBnY2hhciAqcmVhc29uOwotICBnYm9vbGVhbiByZWNvbnNpZGVyID0gRkFMU0U7Ci0KLSAgcmVhc29uID0gZ3N0X3J0Y3BfcGFja2V0X2J5ZV9nZXRfcmVhc29uIChwYWNrZXQpOwotICBHU1RfREVCVUcgKCJnb3QgQllFIHBhY2tldCAocmVhc29uOiAlcykiLCBHU1RfU1RSX05VTEwgKHJlYXNvbikpOwotCi0gIGNvdW50ID0gZ3N0X3J0Y3BfcGFja2V0X2J5ZV9nZXRfc3NyY19jb3VudCAocGFja2V0KTsKLSAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICBndWludDMyIHNzcmM7Ci0gICAgUlRQU291cmNlICpzb3VyY2U7Ci0gICAgZ2Jvb2xlYW4gcHJldmFjdGl2ZSwgcHJldnNlbmRlcjsKLSAgICBndWludCBwbWVtYmVycywgbWVtYmVyczsKLQotICAgIHNzcmMgPSBnc3RfcnRjcF9wYWNrZXRfYnllX2dldF9udGhfc3NyYyAocGFja2V0LCBpKTsKLSAgICBHU1RfREVCVUcgKCJTU1JDOiAlMDh4Iiwgc3NyYyk7Ci0KLSAgICAvKiBmaW5kIHNyYyBhbmQgbWFyayBieWUsIG5vIHByb2JhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aCBSVENQICovCi0gICAgc291cmNlID0gZmluZF9zb3VyY2UgKHNlc3MsIHNzcmMpOwotICAgIGlmICghc291cmNlIHx8IHNvdXJjZS0+aW50ZXJuYWwpIHsKLSAgICAgIEdTVF9ERUJVRyAoIklnbm9yaW5nIHN1c3BpY2lvdXMgQllFIHBhY2tldCAocmVhc29uOiAlcykiLAotICAgICAgICAgICFzb3VyY2UgPyAiY2FuJ3QgZmluZCBzb3VyY2UiIDogImhhcyBpbnRlcm5hbCBzb3VyY2UgU1NSQyIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLyogc3RvcmUgdGltZSBmb3Igd2hlbiB3ZSBuZWVkIHRvIHRpbWUgb3V0IHRoaXMgc291cmNlICovCi0gICAgc291cmNlLT5ieWVfdGltZSA9IHBpbmZvLT5jdXJyZW50X3RpbWU7Ci0KLSAgICBwcmV2YWN0aXZlID0gUlRQX1NPVVJDRV9JU19BQ1RJVkUgKHNvdXJjZSk7Ci0gICAgcHJldnNlbmRlciA9IFJUUF9TT1VSQ0VfSVNfU0VOREVSIChzb3VyY2UpOwotCi0gICAgLyogbWFyayB0aGUgc291cmNlIEJZRSAqLwotICAgIHJ0cF9zb3VyY2VfbWFya19ieWUgKHNvdXJjZSwgcmVhc29uKTsKLQotICAgIHBtZW1iZXJzID0gc2Vzcy0+c3RhdHMuYWN0aXZlX3NvdXJjZXM7Ci0KLSAgICBzb3VyY2VfdXBkYXRlX2FjdGl2ZSAoc2Vzcywgc291cmNlLCBwcmV2YWN0aXZlKTsKLSAgICBzb3VyY2VfdXBkYXRlX3NlbmRlciAoc2Vzcywgc291cmNlLCBwcmV2c2VuZGVyKTsKLQotICAgIG1lbWJlcnMgPSBzZXNzLT5zdGF0cy5hY3RpdmVfc291cmNlczsKLQotICAgIGlmICghc2Vzcy0+c2NoZWR1bGVkX2J5ZSAmJiBtZW1iZXJzIDwgcG1lbWJlcnMpIHsKLSAgICAgIC8qIHNvbWUgbWVtYmVycyB3ZW50IGF3YXkgc2luY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgZXN0aW1hdGUuCi0gICAgICAgKiBQZXJmb3JtIHJldmVyc2UgcmVjb25zaWRlcmF0aW9uIGJ1dCBvbmx5IHdoZW4gd2UgYXJlIG5vdCBzY2hlZHVsaW5nIGEKLSAgICAgICAqIEJZRSBvdXJzZWx2ZXMuICovCi0gICAgICBpZiAoc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSAmJgotICAgICAgICAgIHBpbmZvLT5jdXJyZW50X3RpbWUgPCBzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSkgewotICAgICAgICBHc3RDbG9ja1RpbWUgdGltZV9yZW1haW5pbmc7Ci0KLSAgICAgICAgLyogU2NhbGUgb3VyIG5leHQgUlRDUCBjaGVjayB0aW1lIGFjY29yZGluZyB0byB0aGUgY2hhbmdlIG9mIG51bWJlcnMKLSAgICAgICAgICogb2YgbWVtYmVycy4gQnV0IG9ubHkgaWYgYSkgdGhpcyBpcyB0aGUgZmlyc3QgUlRDUCwgb3IgYikgdGhpcyBpcyBub3QKLSAgICAgICAgICogYSBmZWVkYmFjayBzZXNzaW9uLCBvciBjKSB0aGlzIGlzIGEgZmVlZGJhY2sgc2Vzc2lvbiBidXQgd2Ugc2NoZWR1bGUKLSAgICAgICAgICogZm9yIGV2ZXJ5IFJUQ1AgaW50ZXJ2YWwgKGFrYSBubyB0LXJyLWludGVydmFsIHNldCkuCi0gICAgICAgICAqCi0gICAgICAgICAqIEZJWE1FOiBhKSBhbmQgYikgYXJlIG5vdCBncmVhdCBhcyB3ZSB3aWxsIHBvc3NpYmx5IGdvIGJlbG93IFRtaW4KLSAgICAgICAgICogZm9yIG5vbi1mZWVkYmFjayBwcm9maWxlcyBhbmQgaW4gY2FzZSBvZiBhKSBiZWxvdwotICAgICAgICAgKiBUbWluL3QtcnItaW50ZXJ2YWwgaW4gYW55IGNhc2UuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc2Vzcy0+bGFzdF9ydGNwX3NlbmRfdGltZSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FIHx8Ci0gICAgICAgICAgICAhKHNlc3MtPnJ0cF9wcm9maWxlID09IEdTVF9SVFBfUFJPRklMRV9BVlBGCi0gICAgICAgICAgICAgICAgfHwgc2Vzcy0+cnRwX3Byb2ZpbGUgPT0gR1NUX1JUUF9QUk9GSUxFX1NBVlBGKSB8fAotICAgICAgICAgICAgc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgLSBzZXNzLT5sYXN0X3J0Y3Bfc2VuZF90aW1lID09Ci0gICAgICAgICAgICBzZXNzLT5sYXN0X3J0Y3BfaW50ZXJ2YWwpIHsKLSAgICAgICAgICB0aW1lX3JlbWFpbmluZyA9IHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lIC0gcGluZm8tPmN1cnJlbnRfdGltZTsKLSAgICAgICAgICBzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSA9Ci0gICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAodGltZV9yZW1haW5pbmcsIG1lbWJlcnMsIHBtZW1iZXJzKTsKLSAgICAgICAgICBzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSArPSBwaW5mby0+Y3VycmVudF90aW1lOwotICAgICAgICB9Ci0gICAgICAgIHNlc3MtPmxhc3RfcnRjcF9pbnRlcnZhbCA9Ci0gICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNlc3MtPmxhc3RfcnRjcF9pbnRlcnZhbCwgbWVtYmVycywgcG1lbWJlcnMpOwotCi0gICAgICAgIEdTVF9ERUJVRyAoInJldmVyc2UgcmVjb25zaWRlcmF0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSk7Ci0KLSAgICAgICAgLyogbWFyayBwZW5kaW5nIHJlY29uc2lkZXIuIFdlIG9ubHkgd2FudCB0byBzaWduYWwgdGhlIHJlY29uc2lkZXJhdGlvbgotICAgICAgICAgKiBvbmNlIGFmdGVyIHdlIGhhbmRsZWQgYWxsIHRoZSBzb3VyY2UgaW4gdGhlIGJ5ZSBwYWNrZXQgKi8KLSAgICAgICAgcmVjb25zaWRlciA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgb25fYnllX3NzcmMgKHNlc3MsIHNvdXJjZSk7Ci0gIH0KLSAgaWYgKHJlY29uc2lkZXIpIHsKLSAgICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICAgIC8qIG5vdGlmeSBhcHAgb2YgcmVjb25zaWRlcmF0aW9uICovCi0gICAgaWYgKHNlc3MtPmNhbGxiYWNrcy5yZWNvbnNpZGVyKQotICAgICAgc2Vzcy0+Y2FsbGJhY2tzLnJlY29uc2lkZXIgKHNlc3MsIHNlc3MtPnJlY29uc2lkZXJfdXNlcl9kYXRhKTsKLSAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgfQotCi0gIGdfZnJlZSAocmVhc29uKTsKLX0KLQotc3RhdGljIHZvaWQKLXJ0cF9zZXNzaW9uX3Byb2Nlc3NfYXBwIChSVFBTZXNzaW9uICogc2VzcywgR3N0UlRDUFBhY2tldCAqIHBhY2tldCwKLSAgICBSVFBQYWNrZXRJbmZvICogcGluZm8pCi17Ci0gIEdTVF9ERUJVRyAoInJlY2VpdmVkIEFQUCIpOwotCi0gIGlmIChnX3NpZ25hbF9oYXNfaGFuZGxlcl9wZW5kaW5nIChzZXNzLAotICAgICAgICAgIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0FQUF9SVENQXSwgMCwgVFJVRSkpIHsKLSAgICBHc3RCdWZmZXIgKmRhdGFfYnVmZmVyID0gTlVMTDsKLSAgICBndWludDE2IGRhdGFfbGVuZ3RoOwotICAgIGdjaGFyIG5hbWVbNV07Ci0KLSAgICBkYXRhX2xlbmd0aCA9IGdzdF9ydGNwX3BhY2tldF9hcHBfZ2V0X2RhdGFfbGVuZ3RoIChwYWNrZXQpICogNDsKLSAgICBpZiAoZGF0YV9sZW5ndGggPiAwKSB7Ci0gICAgICBndWludDggKmRhdGEgPSBnc3RfcnRjcF9wYWNrZXRfYXBwX2dldF9kYXRhIChwYWNrZXQpOwotICAgICAgZGF0YV9idWZmZXIgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uIChwYWNrZXQtPnJ0Y3AtPmJ1ZmZlciwKLSAgICAgICAgICBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLCBkYXRhIC0gcGFja2V0LT5ydGNwLT5tYXAuZGF0YSwgZGF0YV9sZW5ndGgpOwotICAgICAgR1NUX0JVRkZFUl9QVFMgKGRhdGFfYnVmZmVyKSA9IHBpbmZvLT5ydW5uaW5nX3RpbWU7Ci0gICAgfQotCi0gICAgbWVtY3B5IChuYW1lLCBnc3RfcnRjcF9wYWNrZXRfYXBwX2dldF9uYW1lIChwYWNrZXQpLCA0KTsKLSAgICBuYW1lWzRdID0gJ1wwJzsKLQotICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gICAgZ19zaWduYWxfZW1pdCAoc2VzcywgcnRwX3Nlc3Npb25fc2lnbmFsc1tTSUdOQUxfT05fQVBQX1JUQ1BdLCAwLAotICAgICAgICBnc3RfcnRjcF9wYWNrZXRfYXBwX2dldF9zdWJ0eXBlIChwYWNrZXQpLAotICAgICAgICBnc3RfcnRjcF9wYWNrZXRfYXBwX2dldF9zc3JjIChwYWNrZXQpLCBuYW1lLCBkYXRhX2J1ZmZlcik7Ci0gICAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0KLSAgICBpZiAoZGF0YV9idWZmZXIpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChkYXRhX2J1ZmZlcik7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1ydHBfc2Vzc2lvbl9yZXF1ZXN0X2xvY2FsX2tleV91bml0IChSVFBTZXNzaW9uICogc2VzcywgUlRQU291cmNlICogc3JjLAotICAgIGdib29sZWFuIGZpciwgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSkKLXsKLSAgZ3VpbnQzMiByb3VuZF90cmlwID0gMDsKLQotICBydHBfc291cmNlX2dldF9sYXN0X3JiIChzcmMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICZyb3VuZF90cmlwKTsKLQotICBpZiAoc2Vzcy0+bGFzdF9rZXlmcmFtZV9yZXF1ZXN0ICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYgcm91bmRfdHJpcCkgewotICAgIEdzdENsb2NrVGltZSByb3VuZF90cmlwX2luX25zID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChyb3VuZF90cmlwLAotICAgICAgICBHU1RfU0VDT05ELCA2NTUzNik7Ci0KLSAgICAvKiBTYW5pdHkgY2hlY2sgdG8gYXZvaWQgYWx3YXlzIGlnbm9yaW5nIFBMSS9GSVIgaWYgd2UgcmVjZWl2ZSBSVENQCi0gICAgICogcGFja2V0cyB3aXRoIGVycm9uZW91cyB2YWx1ZXMgcmVzdWx0aW5nIGluIGNyYXp5IGhpZ2ggUlRULiAqLwotICAgIGlmIChyb3VuZF90cmlwX2luX25zID4gNSAqIEdTVF9TRUNPTkQpCi0gICAgICByb3VuZF90cmlwX2luX25zID0gR1NUX1NFQ09ORCAvIDI7Ci0KLSAgICBpZiAoY3VycmVudF90aW1lIC0gc2Vzcy0+bGFzdF9rZXlmcmFtZV9yZXF1ZXN0IDwgMiAqIHJvdW5kX3RyaXBfaW5fbnMpIHsKLSAgICAgIEdTVF9ERUJVRyAoIklnbm9yaW5nICVzIHJlcXVlc3QgYmVjYXVzZSBvbmUgd2FzIHNlbmQgd2l0aG91dCBvbmUgIgotICAgICAgICAgICJSVFQgKCUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFUICIpIiwKLSAgICAgICAgICBmaXIgPyAiRklSIiA6ICJQTEkiLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGN1cnJlbnRfdGltZSAtIHNlc3MtPmxhc3Rfa2V5ZnJhbWVfcmVxdWVzdCksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAocm91bmRfdHJpcF9pbl9ucykpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIHNlc3MtPmxhc3Rfa2V5ZnJhbWVfcmVxdWVzdCA9IGN1cnJlbnRfdGltZTsKLQotICBHU1RfTE9HICgicmVjZWl2ZWQgJXMgcmVxdWVzdCBmcm9tICVYICVwKCVwKSIsIGZpciA/ICJGSVIiIDogIlBMSSIsCi0gICAgICBydHBfc291cmNlX2dldF9zc3JjIChzcmMpLCBzZXNzLT5jYWxsYmFja3MucHJvY2Vzc19ydHAsCi0gICAgICBzZXNzLT5jYWxsYmFja3MucmVxdWVzdF9rZXlfdW5pdCk7Ci0KLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgc2Vzcy0+Y2FsbGJhY2tzLnJlcXVlc3Rfa2V5X3VuaXQgKHNlc3MsIGZpciwKLSAgICAgIHNlc3MtPnJlcXVlc3Rfa2V5X3VuaXRfdXNlcl9kYXRhKTsKLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9wcm9jZXNzX3BsaSAoUlRQU2Vzc2lvbiAqIHNlc3MsIGd1aW50MzIgc2VuZGVyX3NzcmMsCi0gICAgZ3VpbnQzMiBtZWRpYV9zc3JjLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lKQotewotICBSVFBTb3VyY2UgKnNyYzsKLQotICBpZiAoIXNlc3MtPmNhbGxiYWNrcy5yZXF1ZXN0X2tleV91bml0KQotICAgIHJldHVybjsKLQotICBzcmMgPSBmaW5kX3NvdXJjZSAoc2Vzcywgc2VuZGVyX3NzcmMpOwotICBpZiAoc3JjID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIHJ0cF9zZXNzaW9uX3JlcXVlc3RfbG9jYWxfa2V5X3VuaXQgKHNlc3MsIHNyYywgRkFMU0UsIGN1cnJlbnRfdGltZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc2Vzc2lvbl9wcm9jZXNzX2ZpciAoUlRQU2Vzc2lvbiAqIHNlc3MsIGd1aW50MzIgc2VuZGVyX3NzcmMsCi0gICAgZ3VpbnQ4ICogZmNpX2RhdGEsIGd1aW50IGZjaV9sZW5ndGgsIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUpCi17Ci0gIFJUUFNvdXJjZSAqc3JjOwotICBndWludDMyIHNzcmM7Ci0gIGd1aW50IHBvc2l0aW9uID0gMDsKLSAgZ2Jvb2xlYW4gb3VyX3JlcXVlc3QgPSBGQUxTRTsKLQotICBpZiAoIXNlc3MtPmNhbGxiYWNrcy5yZXF1ZXN0X2tleV91bml0KQotICAgIHJldHVybjsKLQotICBpZiAoZmNpX2xlbmd0aCA8IDgpCi0gICAgcmV0dXJuOwotCi0gIHNyYyA9IGZpbmRfc291cmNlIChzZXNzLCBzZW5kZXJfc3NyYyk7Ci0KLSAgLyogSGFjayBiZWNhdXNlIEdvb2dsZSBmYWlscyB0byBzZXQgdGhlIHNlbmRlcl9zc3JjIGNvcnJlY3RseSAqLwotICBpZiAoIXNyYyAmJiBzZW5kZXJfc3NyYyA9PSAxKSB7Ci0gICAgR0hhc2hUYWJsZUl0ZXIgaXRlcjsKLQotICAgIC8qIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgKi8KLSAgICBpZiAoc2Vzcy0+c3RhdHMuc2VuZGVyX3NvdXJjZXMgPiBzZXNzLT5zdGF0cy5pbnRlcm5hbF9zZW5kZXJfc291cmNlcyArIDEpCi0gICAgICByZXR1cm47Ci0KLSAgICBnX2hhc2hfdGFibGVfaXRlcl9pbml0ICgmaXRlciwgc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdKTsKLSAgICB3aGlsZSAoZ19oYXNoX3RhYmxlX2l0ZXJfbmV4dCAoJml0ZXIsIE5VTEwsIChncG9pbnRlciAqKSAmIHNyYykpIHsKLSAgICAgIGlmICghc3JjLT5pbnRlcm5hbCAmJiBydHBfc291cmNlX2lzX3NlbmRlciAoc3JjKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgICBzcmMgPSBOVUxMOwotICAgIH0KLSAgfQotICBpZiAoIXNyYykKLSAgICByZXR1cm47Ci0KLSAgZm9yIChwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgZmNpX2xlbmd0aDsgcG9zaXRpb24gKz0gOCkgewotICAgIGd1aW50OCAqZGF0YSA9IGZjaV9kYXRhICsgcG9zaXRpb247Ci0gICAgUlRQU291cmNlICpvd247Ci0KLSAgICBzc3JjID0gR1NUX1JFQURfVUlOVDMyX0JFIChkYXRhKTsKLQotICAgIG93biA9IGZpbmRfc291cmNlIChzZXNzLCBzc3JjKTsKLSAgICBpZiAob3duID09IE5VTEwpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChvd24tPmludGVybmFsKSB7Ci0gICAgICBvdXJfcmVxdWVzdCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgaWYgKCFvdXJfcmVxdWVzdCkKLSAgICByZXR1cm47Ci0KLSAgcnRwX3Nlc3Npb25fcmVxdWVzdF9sb2NhbF9rZXlfdW5pdCAoc2Vzcywgc3JjLCBUUlVFLCBjdXJyZW50X3RpbWUpOwotfQotCi1zdGF0aWMgdm9pZAotcnRwX3Nlc3Npb25fcHJvY2Vzc19uYWNrIChSVFBTZXNzaW9uICogc2VzcywgZ3VpbnQzMiBzZW5kZXJfc3NyYywKLSAgICBndWludDMyIG1lZGlhX3NzcmMsIGd1aW50OCAqIGZjaV9kYXRhLCBndWludCBmY2lfbGVuZ3RoLAotICAgIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUpCi17Ci0gIHNlc3MtPnN0YXRzLm5hY2tzX3JlY2VpdmVkKys7Ci0KLSAgaWYgKCFzZXNzLT5jYWxsYmFja3Mubm90aWZ5X25hY2spCi0gICAgcmV0dXJuOwotCi0gIHdoaWxlIChmY2lfbGVuZ3RoID4gMCkgewotICAgIGd1aW50MTYgc2VxbnVtLCBibHA7Ci0KLSAgICBzZXFudW0gPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGZjaV9kYXRhKTsKLSAgICBibHAgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGZjaV9kYXRhICsgMik7Ci0KLSAgICBHU1RfREVCVUcgKCJOQUNLICMldSwgYmxwICUwNHgsIFNTUkMgMHglMDh4Iiwgc2VxbnVtLCBibHAsIG1lZGlhX3NzcmMpOwotCi0gICAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgICBzZXNzLT5jYWxsYmFja3Mubm90aWZ5X25hY2sgKHNlc3MsIHNlcW51bSwgYmxwLCBtZWRpYV9zc3JjLAotICAgICAgICBzZXNzLT5ub3RpZnlfbmFja191c2VyX2RhdGEpOwotICAgIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotCi0gICAgZmNpX2RhdGEgKz0gNDsKLSAgICBmY2lfbGVuZ3RoIC09IDQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXJ0cF9zZXNzaW9uX3Byb2Nlc3NfZmVlZGJhY2sgKFJUUFNlc3Npb24gKiBzZXNzLCBHc3RSVENQUGFja2V0ICogcGFja2V0LAotICAgIFJUUFBhY2tldEluZm8gKiBwaW5mbywgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSkKLXsKLSAgR3N0UlRDUFR5cGUgdHlwZSA9IGdzdF9ydGNwX3BhY2tldF9nZXRfdHlwZSAocGFja2V0KTsKLSAgR3N0UlRDUEZCVHlwZSBmYnR5cGUgPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X3R5cGUgKHBhY2tldCk7Ci0gIGd1aW50MzIgc2VuZGVyX3NzcmMgPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X3NlbmRlcl9zc3JjIChwYWNrZXQpOwotICBndWludDMyIG1lZGlhX3NzcmMgPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X21lZGlhX3NzcmMgKHBhY2tldCk7Ci0gIGd1aW50OCAqZmNpX2RhdGEgPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X2ZjaSAocGFja2V0KTsKLSAgZ3VpbnQgZmNpX2xlbmd0aCA9IDQgKiBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X2ZjaV9sZW5ndGggKHBhY2tldCk7Ci0gIFJUUFNvdXJjZSAqc3JjOwotCi0gIHNyYyA9IGZpbmRfc291cmNlIChzZXNzLCBtZWRpYV9zc3JjKTsKLQotICAvKiBza2lwIG5vbi1ieWUgcGFja2V0cyBmb3Igc291cmNlcyB0aGF0IGFyZSBtYXJrZWQgQllFICovCi0gIGlmIChzZXNzLT5zY2hlZHVsZWRfYnllICYmIHNyYyAmJiBSVFBfU09VUkNFX0lTX01BUktFRF9CWUUgKHNyYykpCi0gICAgcmV0dXJuOwotCi0gIEdTVF9ERUJVRyAoInJlY2VpdmVkIGZlZWRiYWNrICVkOiVkIGZyb20gJTA4WCBhYm91dCAlMDhYIHdpdGggRkNJIG9mICIKLSAgICAgICJsZW5ndGggJWQiLCB0eXBlLCBmYnR5cGUsIHNlbmRlcl9zc3JjLCBtZWRpYV9zc3JjLCBmY2lfbGVuZ3RoKTsKLQotICBpZiAoZ19zaWduYWxfaGFzX2hhbmRsZXJfcGVuZGluZyAoc2VzcywKLSAgICAgICAgICBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9GRUVEQkFDS19SVENQXSwgMCwgVFJVRSkpIHsKLSAgICBHc3RCdWZmZXIgKmZjaV9idWZmZXIgPSBOVUxMOwotCi0gICAgaWYgKGZjaV9sZW5ndGggPiAwKSB7Ci0gICAgICBmY2lfYnVmZmVyID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAocGFja2V0LT5ydGNwLT5idWZmZXIsCi0gICAgICAgICAgR1NUX0JVRkZFUl9DT1BZX01FTU9SWSwgZmNpX2RhdGEgLSBwYWNrZXQtPnJ0Y3AtPm1hcC5kYXRhLAotICAgICAgICAgIGZjaV9sZW5ndGgpOwotICAgICAgR1NUX0JVRkZFUl9QVFMgKGZjaV9idWZmZXIpID0gcGluZm8tPnJ1bm5pbmdfdGltZTsKLSAgICB9Ci0KLSAgICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICAgIGdfc2lnbmFsX2VtaXQgKHNlc3MsIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX0ZFRURCQUNLX1JUQ1BdLCAwLAotICAgICAgICB0eXBlLCBmYnR5cGUsIHNlbmRlcl9zc3JjLCBtZWRpYV9zc3JjLCBmY2lfYnVmZmVyKTsKLSAgICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLQotICAgIGlmIChmY2lfYnVmZmVyKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZmNpX2J1ZmZlcik7Ci0gIH0KLQotICBpZiAoc3JjICYmIHNlc3MtPnJ0Y3BfZmVlZGJhY2tfcmV0ZW50aW9uX3dpbmRvdykgewotICAgIHJ0cF9zb3VyY2VfcmV0YWluX3J0Y3BfcGFja2V0IChzcmMsIHBhY2tldCwgcGluZm8tPnJ1bm5pbmdfdGltZSk7Ci0gIH0KLQotICBpZiAoKHNyYyAmJiBzcmMtPmludGVybmFsKSB8fAotICAgICAgLyogUFNGQiBGSVIgcHV0cyB0aGUgbWVkaWEgc3NyYyBpbnNpZGUgdGhlIEZDSSAqLwotICAgICAgKHR5cGUgPT0gR1NUX1JUQ1BfVFlQRV9QU0ZCICYmIGZidHlwZSA9PSBHU1RfUlRDUF9QU0ZCX1RZUEVfRklSKSkgewotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgY2FzZSBHU1RfUlRDUF9UWVBFX1BTRkI6Ci0gICAgICAgIHN3aXRjaCAoZmJ0eXBlKSB7Ci0gICAgICAgICAgY2FzZSBHU1RfUlRDUF9QU0ZCX1RZUEVfUExJOgotICAgICAgICAgICAgaWYgKHNyYykKLSAgICAgICAgICAgICAgc3JjLT5zdGF0cy5yZWN2X3BsaV9jb3VudCsrOwotICAgICAgICAgICAgcnRwX3Nlc3Npb25fcHJvY2Vzc19wbGkgKHNlc3MsIHNlbmRlcl9zc3JjLCBtZWRpYV9zc3JjLAotICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9SVENQX1BTRkJfVFlQRV9GSVI6Ci0gICAgICAgICAgICBpZiAoc3JjKQotICAgICAgICAgICAgICBzcmMtPnN0YXRzLnJlY3ZfZmlyX2NvdW50Kys7Ci0gICAgICAgICAgICBydHBfc2Vzc2lvbl9wcm9jZXNzX2ZpciAoc2Vzcywgc2VuZGVyX3NzcmMsIGZjaV9kYXRhLCBmY2lfbGVuZ3RoLAotICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9SVENQX1RZUEVfUlRQRkI6Ci0gICAgICAgIHN3aXRjaCAoZmJ0eXBlKSB7Ci0gICAgICAgICAgY2FzZSBHU1RfUlRDUF9SVFBGQl9UWVBFX05BQ0s6Ci0gICAgICAgICAgICBydHBfc2Vzc2lvbl9wcm9jZXNzX25hY2sgKHNlc3MsIHNlbmRlcl9zc3JjLCBtZWRpYV9zc3JjLAotICAgICAgICAgICAgICAgIGZjaV9kYXRhLCBmY2lfbGVuZ3RoLCBjdXJyZW50X3RpbWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3A6Ci0gKiBAc2VzczogYW5kICNSVFBTZXNzaW9uCi0gKiBAYnVmZmVyOiBhbiBSVENQIGJ1ZmZlcgotICogQGN1cnJlbnRfdGltZTogdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUKLSAqIEBudHBuc3RpbWU6IHRoZSBjdXJyZW50IE5UUCB0aW1lIGluIG5hbm9zZWNvbmRzCi0gKgotICogUHJvY2VzcyBhbiBSVENQIGJ1ZmZlciBpbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyLiBUaGlzIGZ1bmN0aW9uIHRha2VzIG93bmVyc2hpcAotICogb2YgQGJ1ZmZlci4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuLgotICovCi1Hc3RGbG93UmV0dXJuCi1ydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3AgKFJUUFNlc3Npb24gKiBzZXNzLCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSwgZ3VpbnQ2NCBudHBuc3RpbWUpCi17Ci0gIEdzdFJUQ1BQYWNrZXQgcGFja2V0OwotICBnYm9vbGVhbiBtb3JlLCBpc19ieWUgPSBGQUxTRSwgZG9fc3luYyA9IEZBTFNFOwotICBSVFBQYWNrZXRJbmZvIHBpbmZvID0geyAwLCB9OwotICBHc3RGbG93UmV0dXJuIHJlc3VsdCA9IEdTVF9GTE9XX09LOwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSB7IE5VTEwsIH07Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSwgR1NUX0ZMT1dfRVJST1IpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIGlmICghZ3N0X3J0Y3BfYnVmZmVyX3ZhbGlkYXRlX3JlZHVjZWQgKGJ1ZmZlcikpCi0gICAgZ290byBpbnZhbGlkX3BhY2tldDsKLQotICBHU1RfREVCVUcgKCJyZWNlaXZlZCBSVENQIHBhY2tldCIpOwotCi0gIGdfc2lnbmFsX2VtaXQgKHNlc3MsIHJ0cF9zZXNzaW9uX3NpZ25hbHNbU0lHTkFMX09OX1JFQ0VJVklOR19SVENQXSwgMCwKLSAgICAgIGJ1ZmZlcik7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIC8qIHVwZGF0ZSBwaW5mbyBzdGF0cyAqLwotICB1cGRhdGVfcGFja2V0X2luZm8gKHNlc3MsICZwaW5mbywgRkFMU0UsIEZBTFNFLCBGQUxTRSwgYnVmZmVyLCBjdXJyZW50X3RpbWUsCi0gICAgICAtMSwgbnRwbnN0aW1lKTsKLQotICAvKiBzdGFydCBwcm9jZXNzaW5nIHRoZSBjb21wb3VuZCBwYWNrZXQgKi8KLSAgZ3N0X3J0Y3BfYnVmZmVyX21hcCAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydGNwKTsKLSAgbW9yZSA9IGdzdF9ydGNwX2J1ZmZlcl9nZXRfZmlyc3RfcGFja2V0ICgmcnRjcCwgJnBhY2tldCk7Ci0gIHdoaWxlIChtb3JlKSB7Ci0gICAgR3N0UlRDUFR5cGUgdHlwZTsKLQotICAgIHR5cGUgPSBnc3RfcnRjcF9wYWNrZXRfZ2V0X3R5cGUgKCZwYWNrZXQpOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlIEdTVF9SVENQX1RZUEVfU1I6Ci0gICAgICAgIHJ0cF9zZXNzaW9uX3Byb2Nlc3Nfc3IgKHNlc3MsICZwYWNrZXQsICZwaW5mbywgJmRvX3N5bmMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUQ1BfVFlQRV9SUjoKLSAgICAgICAgcnRwX3Nlc3Npb25fcHJvY2Vzc19yciAoc2VzcywgJnBhY2tldCwgJnBpbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9SVENQX1RZUEVfU0RFUzoKLSAgICAgICAgcnRwX3Nlc3Npb25fcHJvY2Vzc19zZGVzIChzZXNzLCAmcGFja2V0LCAmcGluZm8pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUQ1BfVFlQRV9CWUU6Ci0gICAgICAgIGlzX2J5ZSA9IFRSVUU7Ci0gICAgICAgIC8qIGRvbid0IHRyeSB0byBhdHRlbXB0IGxpcC1zeW5jIGFueW1vcmUgZm9yIHN0cmVhbXMgd2l0aCBhIEJZRSAqLwotICAgICAgICBkb19zeW5jID0gRkFMU0U7Ci0gICAgICAgIHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYnllIChzZXNzLCAmcGFja2V0LCAmcGluZm8pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUQ1BfVFlQRV9BUFA6Ci0gICAgICAgIHJ0cF9zZXNzaW9uX3Byb2Nlc3NfYXBwIChzZXNzLCAmcGFja2V0LCAmcGluZm8pOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUQ1BfVFlQRV9SVFBGQjoKLSAgICAgIGNhc2UgR1NUX1JUQ1BfVFlQRV9QU0ZCOgotICAgICAgICBydHBfc2Vzc2lvbl9wcm9jZXNzX2ZlZWRiYWNrIChzZXNzLCAmcGFja2V0LCAmcGluZm8sIGN1cnJlbnRfdGltZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJnb3QgdW5rbm93biBSVENQIHBhY2tldCIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbW9yZSA9IGdzdF9ydGNwX3BhY2tldF9tb3ZlX3RvX25leHQgKCZwYWNrZXQpOwotICB9Ci0KLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0KLSAgLyogaWYgd2UgYXJlIHNjaGVkdWxpbmcgYSBCWUUsIHdlIG9ubHkgd2FudCB0byBjb3VudCBieWUgcGFja2V0cywgZWxzZSB3ZQotICAgKiBjb3VudCBldmVyeXRoaW5nICovCi0gIGlmIChzZXNzLT5zY2hlZHVsZWRfYnllICYmIGlzX2J5ZSkgewotICAgIHNlc3MtPmJ5ZV9zdGF0cy5ieWVfbWVtYmVycysrOwotICAgIFVQREFURV9BVkcgKHNlc3MtPmJ5ZV9zdGF0cy5hdmdfcnRjcF9wYWNrZXRfc2l6ZSwgcGluZm8uYnl0ZXMpOwotICB9Ci0KLSAgLyoga2VlcCB0cmFjayBvZiBhdmVyYWdlIHBhY2tldCBzaXplICovCi0gIFVQREFURV9BVkcgKHNlc3MtPnN0YXRzLmF2Z19ydGNwX3BhY2tldF9zaXplLCBwaW5mby5ieXRlcyk7Ci0KLSAgR1NUX0RFQlVHICgiJXAsIHJlY2VpdmVkIFJUQ1AgcGFja2V0LCBhdmcgc2l6ZSAldSwgJXUiLCAmc2Vzcy0+c3RhdHMsCi0gICAgICBzZXNzLT5zdGF0cy5hdmdfcnRjcF9wYWNrZXRfc2l6ZSwgcGluZm8uYnl0ZXMpOwotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotCi0gIHBpbmZvLmRhdGEgPSBOVUxMOwotICBjbGVhbl9wYWNrZXRfaW5mbyAoJnBpbmZvKTsKLQotICAvKiBub3RpZnkgY2FsbGVyIG9mIHNyIHBhY2tldHMgaW4gdGhlIGNhbGxiYWNrICovCi0gIGlmIChkb19zeW5jICYmIHNlc3MtPmNhbGxiYWNrcy5zeW5jX3J0Y3ApIHsKLSAgICByZXN1bHQgPSBzZXNzLT5jYWxsYmFja3Muc3luY19ydGNwIChzZXNzLCBidWZmZXIsCi0gICAgICAgIHNlc3MtPnN5bmNfcnRjcF91c2VyX2RhdGEpOwotICB9IGVsc2UKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1pbnZhbGlkX3BhY2tldDoKLSAgewotICAgIEdTVF9ERUJVRyAoImludmFsaWQgUlRDUCBwYWNrZXQgcmVjZWl2ZWQiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX3VwZGF0ZV9zZW5kX2NhcHM6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjYXBzOiBhICNHc3RDYXBzCi0gKgotICogVXBkYXRlIHRoZSBjYXBzIG9mIHRoZSBzZW5kZXIgaW4gdGhlIHJ0cCBzZXNzaW9uLgotICovCi12b2lkCi1ydHBfc2Vzc2lvbl91cGRhdGVfc2VuZF9jYXBzIChSVFBTZXNzaW9uICogc2VzcywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ3VpbnQgc3NyYzsKLQotICBnX3JldHVybl9pZl9mYWlsIChSVFBfSVNfU0VTU0lPTiAoc2VzcykpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfQ0FQUyAoY2FwcykpOwotCi0gIEdTVF9MT0cgKCJyZWNlaXZlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzc3JjIiwgJnNzcmMpKSB7Ci0gICAgUlRQU291cmNlICpzb3VyY2U7Ci0gICAgZ2Jvb2xlYW4gY3JlYXRlZDsKLQotICAgIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICAgIHNvdXJjZSA9IG9idGFpbl9pbnRlcm5hbF9zb3VyY2UgKHNlc3MsIHNzcmMsICZjcmVhdGVkLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICBzZXNzLT5zdWdnZXN0ZWRfc3NyYyA9IHNzcmM7Ci0gICAgc2Vzcy0+aW50ZXJuYWxfc3NyY19zZXQgPSBUUlVFOwotICAgIHNlc3MtPmludGVybmFsX3NzcmNfZnJvbV9jYXBzX29yX3Byb3BlcnR5ID0gVFJVRTsKLSAgICBpZiAoc291cmNlKSB7Ci0gICAgICBydHBfc291cmNlX3VwZGF0ZV9jYXBzIChzb3VyY2UsIGNhcHMpOwotCi0gICAgICBpZiAoY3JlYXRlZCkKLSAgICAgICAgb25fbmV3X3NlbmRlcl9zc3JjIChzZXNzLCBzb3VyY2UpOwotCi0gICAgICBnX29iamVjdF91bnJlZiAoc291cmNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludCAocywgInJ0eC1zc3JjIiwgJnNzcmMpKSB7Ci0gICAgICBzb3VyY2UgPQotICAgICAgICAgIG9idGFpbl9pbnRlcm5hbF9zb3VyY2UgKHNlc3MsIHNzcmMsICZjcmVhdGVkLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICAgIGlmIChzb3VyY2UpIHsKLSAgICAgICAgcnRwX3NvdXJjZV91cGRhdGVfY2FwcyAoc291cmNlLCBjYXBzKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gIH0gZWxzZSB7Ci0gICAgc2Vzcy0+aW50ZXJuYWxfc3NyY19mcm9tX2NhcHNfb3JfcHJvcGVydHkgPSBGQUxTRTsKLSAgfQotfQotCi0vKioKLSAqIHJ0cF9zZXNzaW9uX3NlbmRfcnRwOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAZGF0YTogcG9pbnRlciB0byBlaXRoZXIgYW4gUlRQIGJ1ZmZlciBvciBhIGxpc3Qgb2YgUlRQIGJ1ZmZlcnMKLSAqIEBpc19saXN0OiBUUlVFIHdoZW4gQGRhdGEgaXMgYSBidWZmZXIgbGlzdAotICogQGN1cnJlbnRfdGltZTogdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUKLSAqIEBydW5uaW5nX3RpbWU6IHRoZSBydW5uaW5nIHRpbWUgb2YgQGRhdGEKLSAqCi0gKiBTZW5kIHRoZSBSVFAgYnVmZmVyIGluIHRoZSBzZXNzaW9uIG1hbmFnZXIuIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlwIG9mCi0gKiBAYnVmZmVyLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4uCi0gKi8KLUdzdEZsb3dSZXR1cm4KLXJ0cF9zZXNzaW9uX3NlbmRfcnRwIChSVFBTZXNzaW9uICogc2VzcywgZ3BvaW50ZXIgZGF0YSwgZ2Jvb2xlYW4gaXNfbGlzdCwKLSAgICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lLCBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKLSAgUlRQU291cmNlICpzb3VyY2U7Ci0gIGdib29sZWFuIHByZXZzZW5kZXI7Ci0gIGd1aW50NjQgb2xkcmF0ZTsKLSAgUlRQUGFja2V0SW5mbyBwaW5mbyA9IHsgMCwgfTsKLSAgZ2Jvb2xlYW4gY3JlYXRlZDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpLCBHU1RfRkxPV19FUlJPUik7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpc19saXN0IHx8IEdTVF9JU19CVUZGRVIgKGRhdGEpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgR1NUX0xPRyAoInJlY2VpdmVkIFJUUCAlcyBmb3Igc2VuZGluZyIsIGlzX2xpc3QgPyAibGlzdCIgOiAicGFja2V0Iik7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIGlmICghdXBkYXRlX3BhY2tldF9pbmZvIChzZXNzLCAmcGluZm8sIFRSVUUsIFRSVUUsIGlzX2xpc3QsIGRhdGEsCi0gICAgICAgICAgY3VycmVudF90aW1lLCBydW5uaW5nX3RpbWUsIC0xKSkKLSAgICBnb3RvIGludmFsaWRfcGFja2V0OwotCi0gIHNvdXJjZSA9IG9idGFpbl9pbnRlcm5hbF9zb3VyY2UgKHNlc3MsIHBpbmZvLnNzcmMsICZjcmVhdGVkLCBjdXJyZW50X3RpbWUpOwotICBpZiAoY3JlYXRlZCkKLSAgICBvbl9uZXdfc2VuZGVyX3NzcmMgKHNlc3MsIHNvdXJjZSk7Ci0KLSAgcHJldnNlbmRlciA9IFJUUF9TT1VSQ0VfSVNfU0VOREVSIChzb3VyY2UpOwotICBvbGRyYXRlID0gc291cmNlLT5iaXRyYXRlOwotCi0gIC8qIHdlIHVzZSBvdXIgb3duIHNvdXJjZSB0byBzZW5kICovCi0gIHJlc3VsdCA9IHJ0cF9zb3VyY2Vfc2VuZF9ydHAgKHNvdXJjZSwgJnBpbmZvKTsKLQotICBzb3VyY2VfdXBkYXRlX3NlbmRlciAoc2Vzcywgc291cmNlLCBwcmV2c2VuZGVyKTsKLQotICBpZiAob2xkcmF0ZSAhPSBzb3VyY2UtPmJpdHJhdGUpCi0gICAgc2Vzcy0+cmVjYWxjX2JhbmR3aWR0aCA9IFRSVUU7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci0gIGNsZWFuX3BhY2tldF9pbmZvICgmcGluZm8pOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLWludmFsaWRfcGFja2V0OgotICB7Ci0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChHU1RfTUlOSV9PQkpFQ1RfQ0FTVCAoZGF0YSkpOwotICAgIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gICAgR1NUX0RFQlVHICgiaW52YWxpZCBSVFAgcGFja2V0IHJlY2VpdmVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfYml0cmF0ZXMgKGdwb2ludGVyIGtleSwgUlRQU291cmNlICogc291cmNlLCBnZG91YmxlICogYmFuZHdpZHRoKQotewotICAqYmFuZHdpZHRoICs9IHNvdXJjZS0+Yml0cmF0ZTsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBzZXNzaW9uIGxvY2sgKi8KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLWNhbGN1bGF0ZV9ydGNwX2ludGVydmFsIChSVFBTZXNzaW9uICogc2VzcywgZ2Jvb2xlYW4gZGV0ZXJtaW5pc3RpYywKLSAgICBnYm9vbGVhbiBmaXJzdCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHJlc3VsdDsKLSAgUlRQU2Vzc2lvblN0YXRzICpzdGF0czsKLQotICAvKiByZWNhbGN1bGF0ZSBiYW5kd2lkdGggd2hlbiBpdCBjaGFuZ2VkICovCi0gIGlmIChzZXNzLT5yZWNhbGNfYmFuZHdpZHRoKSB7Ci0gICAgZ2RvdWJsZSBiYW5kd2lkdGg7Ci0KLSAgICBpZiAoc2Vzcy0+YmFuZHdpZHRoID4gMCkKLSAgICAgIGJhbmR3aWR0aCA9IHNlc3MtPmJhbmR3aWR0aDsKLSAgICBlbHNlIHsKLSAgICAgIC8qIElmIGl0IGlzIDw9IDAsIHRoZW4gdHJ5IHRvIGVzdGltYXRlIHRoZSBhY3R1YWwgYmFuZHdpZHRoICovCi0gICAgICBiYW5kd2lkdGggPSAwOwotCi0gICAgICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdLAotICAgICAgICAgIChHSEZ1bmMpIGFkZF9iaXRyYXRlcywgJmJhbmR3aWR0aCk7Ci0gICAgfQotICAgIGlmIChiYW5kd2lkdGggPCBSVFBfU1RBVFNfQkFORFdJRFRIKQotICAgICAgYmFuZHdpZHRoID0gUlRQX1NUQVRTX0JBTkRXSURUSDsKLQotICAgIHJ0cF9zdGF0c19zZXRfYmFuZHdpZHRocyAoJnNlc3MtPnN0YXRzLCBiYW5kd2lkdGgsCi0gICAgICAgIHNlc3MtPnJ0Y3BfYmFuZHdpZHRoLCBzZXNzLT5ydGNwX3JzX2JhbmR3aWR0aCwgc2Vzcy0+cnRjcF9ycl9iYW5kd2lkdGgpOwotCi0gICAgc2Vzcy0+cmVjYWxjX2JhbmR3aWR0aCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKHNlc3MtPnNjaGVkdWxlZF9ieWUpIHsKLSAgICBzdGF0cyA9ICZzZXNzLT5ieWVfc3RhdHM7Ci0gICAgcmVzdWx0ID0gcnRwX3N0YXRzX2NhbGN1bGF0ZV9ieWVfaW50ZXJ2YWwgKHN0YXRzKTsKLSAgfSBlbHNlIHsKLSAgICBzZXNzaW9uX3VwZGF0ZV9wdHAgKHNlc3MpOwotCi0gICAgc3RhdHMgPSAmc2Vzcy0+c3RhdHM7Ci0gICAgcmVzdWx0ID0gcnRwX3N0YXRzX2NhbGN1bGF0ZV9ydGNwX2ludGVydmFsIChzdGF0cywKLSAgICAgICAgc3RhdHMtPmludGVybmFsX3NlbmRlcl9zb3VyY2VzID4gMCwgc2Vzcy0+cnRwX3Byb2ZpbGUsCi0gICAgICAgIHNlc3MtPmlzX2RvaW5nX3B0cCwgZmlyc3QpOwotICB9Ci0KLSAgR1NUX0RFQlVHICgibmV4dCBkZXRlcm1pbmlzdGljIGludGVydmFsOiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZmlyc3QgJWQiLAotICAgICAgR1NUX1RJTUVfQVJHUyAocmVzdWx0KSwgZmlyc3QpOwotCi0gIGlmICghZGV0ZXJtaW5pc3RpYyAmJiByZXN1bHQgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICByZXN1bHQgPSBydHBfc3RhdHNfYWRkX3J0Y3Bfaml0dGVyIChzdGF0cywgcmVzdWx0KTsKLQotICBHU1RfREVCVUcgKCJuZXh0IGludGVydmFsOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHJlc3VsdCkpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zb3VyY2VfbWFya19ieWUgKGNvbnN0IGdjaGFyICoga2V5LCBSVFBTb3VyY2UgKiBzb3VyY2UsIGNvbnN0IGdjaGFyICogcmVhc29uKQotewotICBpZiAoc291cmNlLT5pbnRlcm5hbCkKLSAgICBydHBfc291cmNlX21hcmtfYnllIChzb3VyY2UsIHJlYXNvbik7Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fbWFya19hbGxfYnllOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAcmVhc29uOiBhIHJlYXNvbgotICoKLSAqIE1hcmsgYWxsIGludGVybmFsIHNvdXJjZXMgb2YgdGhlIHNlc3Npb24gYXMgQllFIHdpdGggQHJlYXNvbi4KLSAqLwotdm9pZAotcnRwX3Nlc3Npb25fbWFya19hbGxfYnllIChSVFBTZXNzaW9uICogc2VzcywgY29uc3QgZ2NoYXIgKiByZWFzb24pCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSk7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0sCi0gICAgICAoR0hGdW5jKSBzb3VyY2VfbWFya19ieWUsIChncG9pbnRlcikgcmVhc29uKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLX0KLQotLyogU3RvcCB0aGUgY3VycmVudCBAc2VzcyBhbmQgc2NoZWR1bGUgYSBCWUUgbWVzc2FnZSBmb3IgdGhlIG90aGVyIG1lbWJlcnMuCi0gKiBPbmUgbXVzdCBoYXZlIHRoZSBzZXNzaW9uIGxvY2sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1ydHBfc2Vzc2lvbl9zY2hlZHVsZV9ieWVfbG9ja2VkIChSVFBTZXNzaW9uICogc2VzcywgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgR3N0Q2xvY2tUaW1lIGludGVydmFsOwotCi0gIC8qIG5vdGhpbmcgdG8gZG8gaXQgd2UgYWxyZWFkeSBzY2hlZHVsZWQgYnllICovCi0gIGlmIChzZXNzLT5zY2hlZHVsZWRfYnllKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiB3ZSBzY2hlZHVsZSBCWUUgbm93ICovCi0gIHNlc3MtPnNjaGVkdWxlZF9ieWUgPSBUUlVFOwotICAvKiBhdCBsZWFzdCBvbmUgbWVtYmVyIHdhbnRzIHRvIHNlbmQgYSBCWUUgKi8KLSAgbWVtY3B5ICgmc2Vzcy0+YnllX3N0YXRzLCAmc2Vzcy0+c3RhdHMsIHNpemVvZiAoUlRQU2Vzc2lvblN0YXRzKSk7Ci0gIElOSVRfQVZHIChzZXNzLT5ieWVfc3RhdHMuYXZnX3J0Y3BfcGFja2V0X3NpemUsIDEwMCk7Ci0gIHNlc3MtPmJ5ZV9zdGF0cy5ieWVfbWVtYmVycyA9IDE7Ci0gIHNlc3MtPmZpcnN0X3J0Y3AgPSBUUlVFOwotCi0gIC8qIHJlc2NoZWR1bGUgdHJhbnNtaXNzaW9uICovCi0gIHNlc3MtPmxhc3RfcnRjcF9zZW5kX3RpbWUgPSBjdXJyZW50X3RpbWU7Ci0gIHNlc3MtPmxhc3RfcnRjcF9jaGVja190aW1lID0gY3VycmVudF90aW1lOwotICBpbnRlcnZhbCA9IGNhbGN1bGF0ZV9ydGNwX2ludGVydmFsIChzZXNzLCBGQUxTRSwgVFJVRSk7Ci0KLSAgaWYgKGludGVydmFsICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgPSBjdXJyZW50X3RpbWUgKyBpbnRlcnZhbDsKLSAgZWxzZQotICAgIHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc2Vzcy0+bGFzdF9ydGNwX2ludGVydmFsID0gaW50ZXJ2YWw7Ci0KLSAgR1NUX0RFQlVHICgiU2NoZWR1bGUgQllFIGZvciAlIiBHU1RfVElNRV9GT1JNQVQgIiwgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoaW50ZXJ2YWwpLCBHU1RfVElNRV9BUkdTIChzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSkpOwotCi0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0gIC8qIG5vdGlmeSBhcHAgb2YgcmVjb25zaWRlcmF0aW9uICovCi0gIGlmIChzZXNzLT5jYWxsYmFja3MucmVjb25zaWRlcikKLSAgICBzZXNzLT5jYWxsYmFja3MucmVjb25zaWRlciAoc2Vzcywgc2Vzcy0+cmVjb25zaWRlcl91c2VyX2RhdGEpOwotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLWRvbmU6Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9zY2hlZHVsZV9ieWU6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjdXJyZW50X3RpbWU6IHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lCi0gKgotICogU2NoZWR1bGUgYSBCWUUgbWVzc2FnZSBmb3IgYWxsIHNvdXJjZXMgbWFya2VkIGFzIEJZRSBpbiBAc2Vzcy4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuLgotICovCi1Hc3RGbG93UmV0dXJuCi1ydHBfc2Vzc2lvbl9zY2hlZHVsZV9ieWUgKFJUUFNlc3Npb24gKiBzZXNzLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lKQotewotICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NFU1NJT04gKHNlc3MpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIHJlc3VsdCA9IHJ0cF9zZXNzaW9uX3NjaGVkdWxlX2J5ZV9sb2NrZWQgKHNlc3MsIGN1cnJlbnRfdGltZSk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9uZXh0X3RpbWVvdXQ6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjdXJyZW50X3RpbWU6IHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lCi0gKgotICogR2V0IHRoZSBuZXh0IHRpbWUgd2Ugc2hvdWxkIHBlcmZvcm0gc2Vzc2lvbiBtYWludGVuYW5jZSB0YXNrcy4KLSAqCi0gKiBSZXR1cm5zOiBhIHRpbWUgd2hlbiBydHBfc2Vzc2lvbl9vbl90aW1lb3V0KCkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZQotICogY3VycmVudCBzeXN0ZW0gdGltZS4KLSAqLwotR3N0Q2xvY2tUaW1lCi1ydHBfc2Vzc2lvbl9uZXh0X3RpbWVvdXQgKFJUUFNlc3Npb24gKiBzZXNzLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lKQotewotICBHc3RDbG9ja1RpbWUgcmVzdWx0LCBpbnRlcnZhbCA9IDA7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZXNzLT5uZXh0X2Vhcmx5X3J0Y3BfdGltZSkpIHsKLSAgICBHU1RfREVCVUcgKCJoYXZlIGVhcmx5IHJ0Y3AgdGltZSIpOwotICAgIHJlc3VsdCA9IHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lOwotICAgIGdvdG8gZWFybHlfZXhpdDsKLSAgfQotCi0gIHJlc3VsdCA9IHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lOwotCi0gIEdTVF9ERUJVRyAoImN1cnJlbnQgdGltZTogJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCBuZXh0IHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGN1cnJlbnRfdGltZSksIEdTVF9USU1FX0FSR1MgKHJlc3VsdCkpOwotCi0gIGlmIChyZXN1bHQgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fCByZXN1bHQgPCBjdXJyZW50X3RpbWUpIHsKLSAgICBHU1RfREVCVUcgKCJ0YWtlIGN1cnJlbnQgdGltZSBhcyBiYXNlIik7Ci0gICAgLyogb3VyIHByZXZpb3VzIGNoZWNrIHRpbWUgZXhwaXJlZCwgc3RhcnQgY291bnRpbmcgZnJvbSB0aGUgY3VycmVudCB0aW1lCi0gICAgICogYWdhaW4uICovCi0gICAgcmVzdWx0ID0gY3VycmVudF90aW1lOwotICB9Ci0KLSAgaWYgKHNlc3MtPnNjaGVkdWxlZF9ieWUpIHsKLSAgICBpZiAoc2Vzcy0+YnllX3N0YXRzLmFjdGl2ZV9zb3VyY2VzID49IDUwKSB7Ci0gICAgICBHU1RfREVCVUcgKCJyZWNvbnNpZGVyIEJZRSwgbW9yZSB0aGFuIDUwIHNvdXJjZXMiKTsKLSAgICAgIC8qIHJlY29uc2lkZXIgQllFIGlmIG1lbWJlcnMgPj0gNTAgKi8KLSAgICAgIGludGVydmFsID0gY2FsY3VsYXRlX3J0Y3BfaW50ZXJ2YWwgKHNlc3MsIEZBTFNFLCBUUlVFKTsKLSAgICAgIHNlc3MtPmxhc3RfcnRjcF9pbnRlcnZhbCA9IGludGVydmFsOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoc2Vzcy0+Zmlyc3RfcnRjcCkgewotICAgICAgR1NUX0RFQlVHICgiZmlyc3QgUlRDUCBwYWNrZXQiKTsKLSAgICAgIC8qIHdlIGFyZSBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lICovCi0gICAgICBpbnRlcnZhbCA9IGNhbGN1bGF0ZV9ydGNwX2ludGVydmFsIChzZXNzLCBGQUxTRSwgVFJVRSk7Ci0gICAgICBzZXNzLT5sYXN0X3J0Y3BfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICB9IGVsc2UgaWYgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lIDwgY3VycmVudF90aW1lKSB7Ci0gICAgICBHU1RfREVCVUcgKCJvbGQgY2hlY2sgdGltZSBleHBpcmVkLCBnZXR0aW5nIG5ldyB0aW1lb3V0Iik7Ci0gICAgICAvKiBnZXQgYSBuZXcgdGltZW91dCB3aGVuIHdlIG5lZWQgdG8gKi8KLSAgICAgIGludGVydmFsID0gY2FsY3VsYXRlX3J0Y3BfaW50ZXJ2YWwgKHNlc3MsIEZBTFNFLCBGQUxTRSk7Ci0gICAgICBzZXNzLT5sYXN0X3J0Y3BfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLQotICAgICAgaWYgKChzZXNzLT5ydHBfcHJvZmlsZSA9PSBHU1RfUlRQX1BST0ZJTEVfQVZQRgotICAgICAgICAgICAgICB8fCBzZXNzLT5ydHBfcHJvZmlsZSA9PSBHU1RfUlRQX1BST0ZJTEVfU0FWUEYpCi0gICAgICAgICAgJiYgaW50ZXJ2YWwgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgewotICAgICAgICAvKiBBcHBseSB0aGUgcnVsZXMgZnJvbSBSRkMgNDU4NSBzZWN0aW9uIDMuNS4zICovCi0gICAgICAgIGlmIChzZXNzLT5zdGF0cy5taW5faW50ZXJ2YWwgIT0gMCkgewotICAgICAgICAgIEdzdENsb2NrVGltZSBUX3JyX2N1cnJlbnRfaW50ZXJ2YWwgPSBnX3JhbmRvbV9kb3VibGVfcmFuZ2UgKDAuNSwKLSAgICAgICAgICAgICAgMS41KSAqIHNlc3MtPnN0YXRzLm1pbl9pbnRlcnZhbCAqIEdTVF9TRUNPTkQ7Ci0KLSAgICAgICAgICBpZiAoVF9ycl9jdXJyZW50X2ludGVydmFsID4gaW50ZXJ2YWwpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVRyAoIkFkanVzdGluZyBpbnRlcnZhbCBmb3IgdC1yci1pbnRlcnZhbDogJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgICAgICAgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoVF9ycl9jdXJyZW50X2ludGVydmFsKSwKLSAgICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChpbnRlcnZhbCkpOwotICAgICAgICAgICAgaW50ZXJ2YWwgPSBUX3JyX2N1cnJlbnRfaW50ZXJ2YWw7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGludGVydmFsICE9IEdTVF9DTE9DS19USU1FX05PTkUpCi0gICAgcmVzdWx0ICs9IGludGVydmFsOwotICBlbHNlCi0gICAgcmVzdWx0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSA9IHJlc3VsdDsKLQotZWFybHlfZXhpdDoKLQotICBHU1RfREVCVUcgKCJjdXJyZW50IHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgbmV4dCB0aW1lOiAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChjdXJyZW50X3RpbWUpLCBHU1RfVElNRV9BUkdTIChyZXN1bHQpKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi10eXBlZGVmIHN0cnVjdAotewotICBSVFBTb3VyY2UgKnNvdXJjZTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci19IFJlcG9ydE91dHB1dDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgR3N0UlRDUEJ1ZmZlciBydGNwYnVmOwotICBSVFBTZXNzaW9uICpzZXNzOwotICBSVFBTb3VyY2UgKnNvdXJjZTsKLSAgZ3VpbnQgbnVtX3RvX3JlcG9ydDsKLSAgZ2Jvb2xlYW4gaGF2ZV9maXI7Ci0gIGdib29sZWFuIGhhdmVfcGxpOwotICBnYm9vbGVhbiBoYXZlX25hY2s7Ci0gIEdzdEJ1ZmZlciAqcnRjcDsKLSAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZTsKLSAgZ3VpbnQ2NCBudHBuc3RpbWU7Ci0gIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWU7Ci0gIEdzdENsb2NrVGltZSBpbnRlcnZhbDsKLSAgR3N0UlRDUFBhY2tldCBwYWNrZXQ7Ci0gIGdib29sZWFuIGhhc19zZGVzOwotICBnYm9vbGVhbiBpc19lYXJseTsKLSAgZ2Jvb2xlYW4gbWF5X3N1cHByZXNzOwotICBHUXVldWUgb3V0cHV0OwotICBndWludCBuYWNrZWRfc2VxbnVtczsKLX0gUmVwb3J0RGF0YTsKLQotc3RhdGljIHZvaWQKLXNlc3Npb25fc3RhcnRfcnRjcCAoUlRQU2Vzc2lvbiAqIHNlc3MsIFJlcG9ydERhdGEgKiBkYXRhKQotewotICBHc3RSVENQUGFja2V0ICpwYWNrZXQgPSAmZGF0YS0+cGFja2V0OwotICBSVFBTb3VyY2UgKm93biA9IGRhdGEtPnNvdXJjZTsKLSAgR3N0UlRDUEJ1ZmZlciAqcnRjcCA9ICZkYXRhLT5ydGNwYnVmOwotCi0gIGRhdGEtPnJ0Y3AgPSBnc3RfcnRjcF9idWZmZXJfbmV3IChzZXNzLT5tdHUpOwotICBkYXRhLT5oYXNfc2RlcyA9IEZBTFNFOwotCi0gIGdzdF9ydGNwX2J1ZmZlcl9tYXAgKGRhdGEtPnJ0Y3AsIEdTVF9NQVBfUkVBRFdSSVRFLCBydGNwKTsKLQotICBpZiAoZGF0YS0+aXNfZWFybHkgJiYgc2Vzcy0+cmVkdWNlZF9zaXplX3J0Y3ApCi0gICAgcmV0dXJuOwotCi0gIGlmIChSVFBfU09VUkNFX0lTX1NFTkRFUiAob3duKSkgewotICAgIGd1aW50NjQgbnRwdGltZTsKLSAgICBndWludDMyIHJ0cHRpbWU7Ci0gICAgZ3VpbnQzMiBwYWNrZXRfY291bnQsIG9jdGV0X2NvdW50OwotCi0gICAgLyogd2UgYXJlIGEgc2VuZGVyLCBjcmVhdGUgU1IgKi8KLSAgICBHU1RfREVCVUcgKCJjcmVhdGUgU1IgZm9yIFNTUkMgJTA4eCIsIG93bi0+c3NyYyk7Ci0gICAgZ3N0X3J0Y3BfYnVmZmVyX2FkZF9wYWNrZXQgKHJ0Y3AsIEdTVF9SVENQX1RZUEVfU1IsIHBhY2tldCk7Ci0KLSAgICAvKiBnZXQgbGF0ZXN0IHN0YXRzICovCi0gICAgcnRwX3NvdXJjZV9nZXRfbmV3X3NyIChvd24sIGRhdGEtPm50cG5zdGltZSwgZGF0YS0+cnVubmluZ190aW1lLAotICAgICAgICAmbnRwdGltZSwgJnJ0cHRpbWUsICZwYWNrZXRfY291bnQsICZvY3RldF9jb3VudCk7Ci0gICAgLyogc3RvcmUgc3RhdHMgKi8KLSAgICBydHBfc291cmNlX3Byb2Nlc3Nfc3IgKG93biwgZGF0YS0+Y3VycmVudF90aW1lLCBudHB0aW1lLCBydHB0aW1lLAotICAgICAgICBwYWNrZXRfY291bnQsIG9jdGV0X2NvdW50KTsKLQotICAgIC8qIGZpbGwgaW4gc2VuZGVyIHJlcG9ydCBpbmZvICovCi0gICAgZ3N0X3J0Y3BfcGFja2V0X3NyX3NldF9zZW5kZXJfaW5mbyAocGFja2V0LCBvd24tPnNzcmMsCi0gICAgICAgIG50cHRpbWUsIHJ0cHRpbWUsIHBhY2tldF9jb3VudCwgb2N0ZXRfY291bnQpOwotICB9IGVsc2UgewotICAgIC8qIHdlIGFyZSBvbmx5IHJlY2VpdmVyLCBjcmVhdGUgUlIgKi8KLSAgICBHU1RfREVCVUcgKCJjcmVhdGUgUlIgZm9yIFNTUkMgJTA4eCIsIG93bi0+c3NyYyk7Ci0gICAgZ3N0X3J0Y3BfYnVmZmVyX2FkZF9wYWNrZXQgKHJ0Y3AsIEdTVF9SVENQX1RZUEVfUlIsIHBhY2tldCk7Ci0gICAgZ3N0X3J0Y3BfcGFja2V0X3JyX3NldF9zc3JjIChwYWNrZXQsIG93bi0+c3NyYyk7Ci0gIH0KLX0KLQotLyogY29uc3RydWN0IGEgU2VuZGVyIG9yIFJlY2VpdmVyIFJlcG9ydCAqLwotc3RhdGljIHZvaWQKLXNlc3Npb25fcmVwb3J0X2Jsb2NrcyAoY29uc3QgZ2NoYXIgKiBrZXksIFJUUFNvdXJjZSAqIHNvdXJjZSwgUmVwb3J0RGF0YSAqIGRhdGEpCi17Ci0gIFJUUFNlc3Npb24gKnNlc3MgPSBkYXRhLT5zZXNzOwotICBHc3RSVENQUGFja2V0ICpwYWNrZXQgPSAmZGF0YS0+cGFja2V0OwotICBndWludDggZnJhY3Rpb25sb3N0OwotICBnaW50MzIgcGFja2V0c2xvc3Q7Ci0gIGd1aW50MzIgZXh0aGlnaGVzdHNlcSwgaml0dGVyOwotICBndWludDMyIGxzciwgZGxzcjsKLQotICAvKiBkb24ndCByZXBvcnQgZm9yIHNvdXJjZXMgaW4gZnV0dXJlIGdlbmVyYXRpb25zICovCi0gIGlmICgoKGdpbnQxNikgKHNvdXJjZS0+Z2VuZXJhdGlvbiAtIHNlc3MtPmdlbmVyYXRpb24pKSA+IDApIHsKLSAgICBHU1RfREVCVUcgKCJzb3VyY2UgJTA4eCBnZW5lcmF0aW9uICV1ID4gJXUiLCBzb3VyY2UtPnNzcmMsCi0gICAgICAgIHNvdXJjZS0+Z2VuZXJhdGlvbiwgc2Vzcy0+Z2VuZXJhdGlvbik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGdfaGFzaF90YWJsZV9jb250YWlucyAoc291cmNlLT5yZXBvcnRlZF9pbl9zcl9vZiwKLSAgICAgICAgICBHVUlOVF9UT19QT0lOVEVSIChkYXRhLT5zb3VyY2UtPnNzcmMpKSkgewotICAgIEdTVF9ERUJVRyAoInNvdXJjZSAlMDh4IGFscmVhZHkgcmVwb3J0ZWQgaW4gdGhpcyBnZW5lcmF0aW9uIiwgc291cmNlLT5zc3JjKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoZ3N0X3J0Y3BfcGFja2V0X2dldF9yYl9jb3VudCAocGFja2V0KSA9PSBHU1RfUlRDUF9NQVhfUkJfQ09VTlQpIHsKLSAgICBHU1RfREVCVUcgKCJtYXggUkIgY291bnQgcmVhY2hlZCIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIG9ubHkgcmVwb3J0IGFib3V0IG90aGVyIHNlbmRlciAqLwotICBpZiAoc291cmNlID09IGRhdGEtPnNvdXJjZSkKLSAgICBnb3RvIHJlcG9ydGVkOwotCi0gIGlmICghUlRQX1NPVVJDRV9JU19TRU5ERVIgKHNvdXJjZSkpIHsKLSAgICBHU1RfREVCVUcgKCJzb3VyY2UgJTA4eCBub3Qgc2VuZGVyIiwgc291cmNlLT5zc3JjKTsKLSAgICBnb3RvIHJlcG9ydGVkOwotICB9Ci0KLSAgR1NUX0RFQlVHICgiY3JlYXRlIFJCIGZvciBTU1JDICUwOHgiLCBzb3VyY2UtPnNzcmMpOwotCi0gIC8qIGdldCBuZXcgc3RhdHMgKi8KLSAgcnRwX3NvdXJjZV9nZXRfbmV3X3JiIChzb3VyY2UsIGRhdGEtPmN1cnJlbnRfdGltZSwgJmZyYWN0aW9ubG9zdCwKLSAgICAgICZwYWNrZXRzbG9zdCwgJmV4dGhpZ2hlc3RzZXEsICZqaXR0ZXIsICZsc3IsICZkbHNyKTsKLQotICAvKiBzdG9yZSBsYXN0IGdlbmVyYXRlZCBSUiBwYWNrZXQgKi8KLSAgc291cmNlLT5sYXN0X3JyLmlzX3ZhbGlkID0gVFJVRTsKLSAgc291cmNlLT5sYXN0X3JyLmZyYWN0aW9ubG9zdCA9IGZyYWN0aW9ubG9zdDsKLSAgc291cmNlLT5sYXN0X3JyLnBhY2tldHNsb3N0ID0gcGFja2V0c2xvc3Q7Ci0gIHNvdXJjZS0+bGFzdF9yci5leHRoaWdoZXN0c2VxID0gZXh0aGlnaGVzdHNlcTsKLSAgc291cmNlLT5sYXN0X3JyLmppdHRlciA9IGppdHRlcjsKLSAgc291cmNlLT5sYXN0X3JyLmxzciA9IGxzcjsKLSAgc291cmNlLT5sYXN0X3JyLmRsc3IgPSBkbHNyOwotCi0gIC8qIHBhY2tldCBpcyBub3QgeWV0IGZpbGxlZCwgYWRkIHJlcG9ydCBibG9jayBmb3IgdGhpcyBzb3VyY2UuICovCi0gIGdzdF9ydGNwX3BhY2tldF9hZGRfcmIgKHBhY2tldCwgc291cmNlLT5zc3JjLCBmcmFjdGlvbmxvc3QsIHBhY2tldHNsb3N0LAotICAgICAgZXh0aGlnaGVzdHNlcSwgaml0dGVyLCBsc3IsIGRsc3IpOwotCi1yZXBvcnRlZDoKLSAgZ19oYXNoX3RhYmxlX2FkZCAoc291cmNlLT5yZXBvcnRlZF9pbl9zcl9vZiwKLSAgICAgIEdVSU5UX1RPX1BPSU5URVIgKGRhdGEtPnNvdXJjZS0+c3NyYykpOwotfQotCi0vKiBjb25zdHJ1Y3QgRklSICovCi1zdGF0aWMgdm9pZAotc2Vzc2lvbl9hZGRfZmlyIChjb25zdCBnY2hhciAqIGtleSwgUlRQU291cmNlICogc291cmNlLCBSZXBvcnREYXRhICogZGF0YSkKLXsKLSAgR3N0UlRDUFBhY2tldCAqcGFja2V0ID0gJmRhdGEtPnBhY2tldDsKLSAgZ3VpbnQxNiBsZW47Ci0gIGd1aW50OCAqZmNpX2RhdGE7Ci0KLSAgaWYgKCFzb3VyY2UtPnNlbmRfZmlyKQotICAgIHJldHVybjsKLQotICBsZW4gPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X2ZjaV9sZW5ndGggKHBhY2tldCk7Ci0gIGlmICghZ3N0X3J0Y3BfcGFja2V0X2ZiX3NldF9mY2lfbGVuZ3RoIChwYWNrZXQsIGxlbiArIDIpKQotICAgIC8qIGV4aXQgYmVjYXVzZSB0aGUgcGFja2V0IGlzIGZ1bGwsIHdpbGwgcHV0IG5leHQgcmVxdWVzdCBpbiBhCi0gICAgICogZnVydGhlciBwYWNrZXQgKi8KLSAgICByZXR1cm47Ci0KLSAgZmNpX2RhdGEgPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X2ZjaSAocGFja2V0KSArIChsZW4gKiA0KTsKLQotICBHU1RfV1JJVEVfVUlOVDMyX0JFIChmY2lfZGF0YSwgc291cmNlLT5zc3JjKTsKLSAgZmNpX2RhdGEgKz0gNDsKLSAgZmNpX2RhdGFbMF0gPSBzb3VyY2UtPmN1cnJlbnRfc2VuZF9maXJfc2VxbnVtOwotICBmY2lfZGF0YVsxXSA9IGZjaV9kYXRhWzJdID0gZmNpX2RhdGFbM10gPSAwOwotCi0gIHNvdXJjZS0+c2VuZF9maXIgPSBGQUxTRTsKLSAgc291cmNlLT5zdGF0cy5zZW50X2Zpcl9jb3VudCsrOwotfQotCi1zdGF0aWMgdm9pZAotc2Vzc2lvbl9maXIgKFJUUFNlc3Npb24gKiBzZXNzLCBSZXBvcnREYXRhICogZGF0YSkKLXsKLSAgR3N0UlRDUEJ1ZmZlciAqcnRjcCA9ICZkYXRhLT5ydGNwYnVmOwotICBHc3RSVENQUGFja2V0ICpwYWNrZXQgPSAmZGF0YS0+cGFja2V0OwotCi0gIGlmICghZ3N0X3J0Y3BfYnVmZmVyX2FkZF9wYWNrZXQgKHJ0Y3AsIEdTVF9SVENQX1RZUEVfUFNGQiwgcGFja2V0KSkKLSAgICByZXR1cm47Ci0KLSAgZ3N0X3J0Y3BfcGFja2V0X2ZiX3NldF90eXBlIChwYWNrZXQsIEdTVF9SVENQX1BTRkJfVFlQRV9GSVIpOwotICBnc3RfcnRjcF9wYWNrZXRfZmJfc2V0X3NlbmRlcl9zc3JjIChwYWNrZXQsIGRhdGEtPnNvdXJjZS0+c3NyYyk7Ci0gIGdzdF9ydGNwX3BhY2tldF9mYl9zZXRfbWVkaWFfc3NyYyAocGFja2V0LCAwKTsKLQotICBnX2hhc2hfdGFibGVfZm9yZWFjaCAoc2Vzcy0+c3NyY3Nbc2Vzcy0+bWFza19pZHhdLAotICAgICAgKEdIRnVuYykgc2Vzc2lvbl9hZGRfZmlyLCBkYXRhKTsKLQotICBpZiAoZ3N0X3J0Y3BfcGFja2V0X2ZiX2dldF9mY2lfbGVuZ3RoIChwYWNrZXQpID09IDApCi0gICAgZ3N0X3J0Y3BfcGFja2V0X3JlbW92ZSAocGFja2V0KTsKLSAgZWxzZQotICAgIGRhdGEtPm1heV9zdXBwcmVzcyA9IEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWhhc19wbGlfY29tcGFyZV9mdW5jIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgaWdub3JlZCkKLXsKLSAgR3N0UlRDUFBhY2tldCBwYWNrZXQ7Ci0gIEdzdFJUQ1BCdWZmZXIgcnRjcCA9IHsgTlVMTCwgfTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgZ3N0X3J0Y3BfYnVmZmVyX21hcCAoKEdzdEJ1ZmZlciAqKSBhLCBHU1RfTUFQX1JFQUQsICZydGNwKTsKLQotICBpZiAoZ3N0X3J0Y3BfYnVmZmVyX2dldF9maXJzdF9wYWNrZXQgKCZydGNwLCAmcGFja2V0KSkgewotICAgIGlmIChnc3RfcnRjcF9wYWNrZXRfZ2V0X3R5cGUgKCZwYWNrZXQpID09IEdTVF9SVENQX1RZUEVfUFNGQiAmJgotICAgICAgICBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X3R5cGUgKCZwYWNrZXQpID09IEdTVF9SVENQX1BTRkJfVFlQRV9QTEkpCi0gICAgICByZXQgPSBUUlVFOwotICB9Ci0KLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogY29uc3RydWN0IFBMSSAqLwotc3RhdGljIHZvaWQKLXNlc3Npb25fcGxpIChjb25zdCBnY2hhciAqIGtleSwgUlRQU291cmNlICogc291cmNlLCBSZXBvcnREYXRhICogZGF0YSkKLXsKLSAgR3N0UlRDUEJ1ZmZlciAqcnRjcCA9ICZkYXRhLT5ydGNwYnVmOwotICBHc3RSVENQUGFja2V0ICpwYWNrZXQgPSAmZGF0YS0+cGFja2V0OwotCi0gIGlmICghc291cmNlLT5zZW5kX3BsaSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKHJ0cF9zb3VyY2VfaGFzX3JldGFpbmVkIChzb3VyY2UsIGhhc19wbGlfY29tcGFyZV9mdW5jLCBOVUxMKSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKCFnc3RfcnRjcF9idWZmZXJfYWRkX3BhY2tldCAocnRjcCwgR1NUX1JUQ1BfVFlQRV9QU0ZCLCBwYWNrZXQpKQotICAgIC8qIGV4aXQgYmVjYXVzZSB0aGUgcGFja2V0IGlzIGZ1bGwsIHdpbGwgcHV0IG5leHQgcmVxdWVzdCBpbiBhCi0gICAgICogZnVydGhlciBwYWNrZXQgKi8KLSAgICByZXR1cm47Ci0KLSAgZ3N0X3J0Y3BfcGFja2V0X2ZiX3NldF90eXBlIChwYWNrZXQsIEdTVF9SVENQX1BTRkJfVFlQRV9QTEkpOwotICBnc3RfcnRjcF9wYWNrZXRfZmJfc2V0X3NlbmRlcl9zc3JjIChwYWNrZXQsIGRhdGEtPnNvdXJjZS0+c3NyYyk7Ci0gIGdzdF9ydGNwX3BhY2tldF9mYl9zZXRfbWVkaWFfc3NyYyAocGFja2V0LCBzb3VyY2UtPnNzcmMpOwotCi0gIHNvdXJjZS0+c2VuZF9wbGkgPSBGQUxTRTsKLSAgZGF0YS0+bWF5X3N1cHByZXNzID0gRkFMU0U7Ci0KLSAgc291cmNlLT5zdGF0cy5zZW50X3BsaV9jb3VudCsrOwotfQotCi0vKiBjb25zdHJ1Y3QgTkFDSyAqLwotc3RhdGljIHZvaWQKLXNlc3Npb25fbmFjayAoY29uc3QgZ2NoYXIgKiBrZXksIFJUUFNvdXJjZSAqIHNvdXJjZSwgUmVwb3J0RGF0YSAqIGRhdGEpCi17Ci0gIEdzdFJUQ1BCdWZmZXIgKnJ0Y3AgPSAmZGF0YS0+cnRjcGJ1ZjsKLSAgR3N0UlRDUFBhY2tldCAqcGFja2V0ID0gJmRhdGEtPnBhY2tldDsKLSAgZ3VpbnQzMiAqbmFja3M7Ci0gIGd1aW50IG5fbmFja3MsIGk7Ci0gIGd1aW50OCAqZmNpX2RhdGE7Ci0KLSAgaWYgKCFzb3VyY2UtPnNlbmRfbmFjaykKLSAgICByZXR1cm47Ci0KLSAgaWYgKCFnc3RfcnRjcF9idWZmZXJfYWRkX3BhY2tldCAocnRjcCwgR1NUX1JUQ1BfVFlQRV9SVFBGQiwgcGFja2V0KSkKLSAgICAvKiBleGl0IGJlY2F1c2UgdGhlIHBhY2tldCBpcyBmdWxsLCB3aWxsIHB1dCBuZXh0IHJlcXVlc3QgaW4gYQotICAgICAqIGZ1cnRoZXIgcGFja2V0ICovCi0gICAgcmV0dXJuOwotCi0gIGdzdF9ydGNwX3BhY2tldF9mYl9zZXRfdHlwZSAocGFja2V0LCBHU1RfUlRDUF9SVFBGQl9UWVBFX05BQ0spOwotICBnc3RfcnRjcF9wYWNrZXRfZmJfc2V0X3NlbmRlcl9zc3JjIChwYWNrZXQsIGRhdGEtPnNvdXJjZS0+c3NyYyk7Ci0gIGdzdF9ydGNwX3BhY2tldF9mYl9zZXRfbWVkaWFfc3NyYyAocGFja2V0LCBzb3VyY2UtPnNzcmMpOwotCi0gIG5hY2tzID0gcnRwX3NvdXJjZV9nZXRfbmFja3MgKHNvdXJjZSwgJm5fbmFja3MpOwotICBHU1RfREVCVUcgKCIldSBOQUNLcyIsIG5fbmFja3MpOwotICBpZiAoIWdzdF9ydGNwX3BhY2tldF9mYl9zZXRfZmNpX2xlbmd0aCAocGFja2V0LCBuX25hY2tzKSkKLSAgICByZXR1cm47Ci0KLSAgZmNpX2RhdGEgPSBnc3RfcnRjcF9wYWNrZXRfZmJfZ2V0X2ZjaSAocGFja2V0KTsKLSAgZm9yIChpID0gMDsgaSA8IG5fbmFja3M7IGkrKykgewotICAgIEdTVF9XUklURV9VSU5UMzJfQkUgKGZjaV9kYXRhLCBuYWNrc1tpXSk7Ci0gICAgZmNpX2RhdGEgKz0gNDsKLSAgICBkYXRhLT5uYWNrZWRfc2VxbnVtcysrOwotICB9Ci0KLSAgcnRwX3NvdXJjZV9jbGVhcl9uYWNrcyAoc291cmNlKTsKLSAgZGF0YS0+bWF5X3N1cHByZXNzID0gRkFMU0U7Ci19Ci0KLS8qIHBlcmZvcm0gY2xlYW51cCBvZiBzb3VyY2VzIHRoYXQgdGltZWQgb3V0ICovCi1zdGF0aWMgdm9pZAotc2Vzc2lvbl9jbGVhbnVwIChjb25zdCBnY2hhciAqIGtleSwgUlRQU291cmNlICogc291cmNlLCBSZXBvcnREYXRhICogZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gcmVtb3ZlID0gRkFMU0U7Ci0gIGdib29sZWFuIGJ5ZXRpbWVvdXQgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gc2VuZGVydGltZW91dCA9IEZBTFNFOwotICBnYm9vbGVhbiBpc19zZW5kZXIsIGlzX2FjdGl2ZTsKLSAgUlRQU2Vzc2lvbiAqc2VzcyA9IGRhdGEtPnNlc3M7Ci0gIEdzdENsb2NrVGltZSBpbnRlcnZhbCwgYmludGVydmFsOwotICBHc3RDbG9ja1RpbWUgYnRpbWU7Ci0KLSAgR1NUX0RFQlVHICgibG9vayBhdCAlMDh4LCBnZW5lcmF0aW9uICV1Iiwgc291cmNlLT5zc3JjLCBzb3VyY2UtPmdlbmVyYXRpb24pOwotCi0gIC8qIGNoZWNrIGZvciBvdXRkYXRlZCBjb2xsaXNpb25zICovCi0gIGlmIChzb3VyY2UtPmludGVybmFsKSB7Ci0gICAgR1NUX0RFQlVHICgiVGltaW5nIG91dCBjb2xsaXNpb25zIGZvciAleCIsIHNvdXJjZS0+c3NyYyk7Ci0gICAgcnRwX3NvdXJjZV90aW1lb3V0IChzb3VyY2UsIGRhdGEtPmN1cnJlbnRfdGltZSwKLSAgICAgICAgZGF0YS0+cnVubmluZ190aW1lIC0gc2Vzcy0+cnRjcF9mZWVkYmFja19yZXRlbnRpb25fd2luZG93KTsKLSAgfQotCi0gIC8qIG5vdGhpbmcgZWxzZSB0byBkbyB3aGVuIHdpdGhvdXQgUlRDUCAqLwotICBpZiAoZGF0YS0+aW50ZXJ2YWwgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICByZXR1cm47Ci0KLSAgaXNfc2VuZGVyID0gUlRQX1NPVVJDRV9JU19TRU5ERVIgKHNvdXJjZSk7Ci0gIGlzX2FjdGl2ZSA9IFJUUF9TT1VSQ0VfSVNfQUNUSVZFIChzb3VyY2UpOwotCi0gIC8qIG91ciBvd24gcnRjcCBpbnRlcnZhbCBtYXkgaGF2ZSBiZWVuIGZvcmNlZCBsb3cgYnkgc2Vjb25kYXJ5IGNvbmZpZ3VyYXRpb24sCi0gICAqIHdoaWxlIHNlbmRlciBzaWRlIG1heSBzdGlsbCBvcGVyYXRlIHdpdGggaGlnaGVyIGludGVydmFsLAotICAgKiBzbyBkbyBub3QganVzdCB0YWtlIG91ciBpbnRlcnZhbCB0byBkZWNpZGUgb24gdGltaW5nIG91dCBzZW5kZXIsCi0gICAqIGJ1dCB0YWtlIChpZiBkYXRhLT5pbnRlcnZhbCA8PSA1ICogR1NUX1NFQ09ORCk6Ci0gICAqICAgaW50ZXJ2YWwgPSBDTEFNUCAoc2VuZGVyX2ludGVydmFsLCBkYXRhLT5pbnRlcnZhbCwgNSAqIEdTVF9TRUNPTkQpCi0gICAqIHdoZXJlIHNlbmRlcl9pbnRlcnZhbCBpcyBkaWZmZXJlbmNlIGJldHdlZW4gbGFzdCAyIHJlY2VpdmVkIFJUQ1AgcmVwb3J0cwotICAgKi8KLSAgaWYgKGRhdGEtPmludGVydmFsID49IDUgKiBHU1RfU0VDT05EIHx8IHNvdXJjZS0+aW50ZXJuYWwpIHsKLSAgICBiaW50ZXJ2YWwgPSBkYXRhLT5pbnRlcnZhbDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HICgicHJldl9ydGNwICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBsYXN0X3J0Y3AgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChzb3VyY2UtPnN0YXRzLnByZXZfcnRjcHRpbWUpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzb3VyY2UtPnN0YXRzLmxhc3RfcnRjcHRpbWUpKTsKLSAgICAvKiBpZiBub3QgcmVjZWl2ZWQgZW5vdWdoIHlldCwgZmFsbGJhY2sgdG8gbGFyZ2VyIGRlZmF1bHQgKi8KLSAgICBpZiAoc291cmNlLT5zdGF0cy5sYXN0X3J0Y3B0aW1lID4gc291cmNlLT5zdGF0cy5wcmV2X3J0Y3B0aW1lKQotICAgICAgYmludGVydmFsID0gc291cmNlLT5zdGF0cy5sYXN0X3J0Y3B0aW1lIC0gc291cmNlLT5zdGF0cy5wcmV2X3J0Y3B0aW1lOwotICAgIGVsc2UKLSAgICAgIGJpbnRlcnZhbCA9IDUgKiBHU1RfU0VDT05EOwotICAgIGJpbnRlcnZhbCA9IENMQU1QIChiaW50ZXJ2YWwsIGRhdGEtPmludGVydmFsLCA1ICogR1NUX1NFQ09ORCk7Ci0gIH0KLSAgR1NUX0xPRyAoInRpbWVvdXQgYmFzZSBpbnRlcnZhbCAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTIChiaW50ZXJ2YWwpKTsKLQotICBpZiAoIXNvdXJjZS0+aW50ZXJuYWwgJiYgc291cmNlLT5tYXJrZWRfYnllKSB7Ci0gICAgLyogaWYgd2UgcmVjZWl2ZWQgYSBCWUUgZnJvbSB0aGUgc291cmNlLCByZW1vdmUgdGhlIHNvdXJjZSBhZnRlciBzb21lCi0gICAgICogdGltZS4gKi8KLSAgICBpZiAoZGF0YS0+Y3VycmVudF90aW1lID4gc291cmNlLT5ieWVfdGltZSAmJgotICAgICAgICBkYXRhLT5jdXJyZW50X3RpbWUgLSBzb3VyY2UtPmJ5ZV90aW1lID4gc2Vzcy0+c3RhdHMuYnllX3RpbWVvdXQpIHsKLSAgICAgIEdTVF9ERUJVRyAoInJlbW92aW5nIEJZRSBzb3VyY2UgJTA4eCIsIHNvdXJjZS0+c3NyYyk7Ci0gICAgICByZW1vdmUgPSBUUlVFOwotICAgICAgYnlldGltZW91dCA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHNvdXJjZS0+aW50ZXJuYWwgJiYgc291cmNlLT5zZW50X2J5ZSkgewotICAgIEdTVF9ERUJVRyAoInJlbW92aW5nIGludGVybmFsIHNvdXJjZSB0aGF0IGhhcyBzZW50IEJZRSAlMDh4Iiwgc291cmNlLT5zc3JjKTsKLSAgICByZW1vdmUgPSBUUlVFOwotICB9Ci0KLSAgLyogc291cmNlcyB0aGF0IHdlcmUgaW5hY3RpdmUgZm9yIG1vcmUgdGhhbiA1IHRpbWVzIHRoZSBkZXRlcm1pbmlzdGljIHJlcG9ydGluZwotICAgKiBpbnRlcnZhbCBnZXQgdGltZWQgb3V0LiB0aGUgbWluIHRpbWVvdXQgaXMgNSBzZWNvbmRzLiAqLwotICAvKiBtaW5kIG9sZCB0aW1lIHRoYXQgbWlnaHQgcHJlLWRhdGUgbGFzdCB0aW1lIGdvaW5nIHRvIFBMQVlJTkcgKi8KLSAgYnRpbWUgPSBNQVggKHNvdXJjZS0+bGFzdF9hY3Rpdml0eSwgc2Vzcy0+c3RhcnRfdGltZSk7Ci0gIGlmIChkYXRhLT5jdXJyZW50X3RpbWUgPiBidGltZSkgewotICAgIGludGVydmFsID0gTUFYIChiaW50ZXJ2YWwgKiA1LCA1ICogR1NUX1NFQ09ORCk7Ci0gICAgaWYgKGRhdGEtPmN1cnJlbnRfdGltZSAtIGJ0aW1lID4gaW50ZXJ2YWwpIHsKLSAgICAgIEdTVF9ERUJVRyAoInJlbW92aW5nIHRpbWVvdXQgc291cmNlICUwOHgsIGxhc3QgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIHNvdXJjZS0+c3NyYywgR1NUX1RJTUVfQVJHUyAoYnRpbWUpKTsKLSAgICAgIGlmIChzb3VyY2UtPmludGVybmFsKSB7Ci0gICAgICAgIC8qIHRoaXMgaXMgYW4gaW50ZXJuYWwgc291cmNlIHRoYXQgaXMgbm90IHVzaW5nIG91ciBzdWdnZXN0ZWQgc3NyYy4KLSAgICAgICAgICogc2luY2UgdGhlcmUgbXVzdCBiZSBhbm90aGVyIHNvdXJjZSB1c2luZyB0aGlzIHNzcmMsIHdlIGNhbiByZW1vdmUKLSAgICAgICAgICogdGhpcyBvbmUgaW5zdGVhZCBvZiBtYWtpbmcgaXQgYSByZWNlaXZlciBmb3JldmVyICovCi0gICAgICAgIGlmIChzb3VyY2UtPnNzcmMgIT0gc2Vzcy0+c3VnZ2VzdGVkX3NzcmMpIHsKLSAgICAgICAgICBydHBfc291cmNlX21hcmtfYnllIChzb3VyY2UsICJ0aW1lZCBvdXQiKTsKLSAgICAgICAgICAvKiBkbyBub3Qgc2NoZWR1bGUgYnllIGhlcmUsIHNpbmNlIHdlIGFyZSBpbnNpZGUgdGhlIFJUQ1AgdGltZW91dAotICAgICAgICAgICAqIHByb2Nlc3NpbmcgYW5kIHNjaGVkdWxpbmcgYnllIHdpbGwgaW50ZXJmZXJlIHdpdGggU1IvUlIgc2VuZGluZyAqLwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZW1vdmUgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qIHNlbmRlcnMgdGhhdCBkaWQgbm90IHNlbmQgZm9yIGEgbG9uZyB0aW1lIGJlY29tZSBhIHJlY2VpdmVyLCB0aGlzIGFsc28KLSAgICogaG9sZHMgZm9yIG91ciBvd24gc291cmNlcy4gKi8KLSAgaWYgKGlzX3NlbmRlcikgewotICAgIC8qIG1pbmQgb2xkIHRpbWUgdGhhdCBtaWdodCBwcmUtZGF0ZSBsYXN0IHRpbWUgZ29pbmcgdG8gUExBWUlORyAqLwotICAgIGJ0aW1lID0gTUFYIChzb3VyY2UtPmxhc3RfcnRwX2FjdGl2aXR5LCBzZXNzLT5zdGFydF90aW1lKTsKLSAgICBpZiAoZGF0YS0+Y3VycmVudF90aW1lID4gYnRpbWUpIHsKLSAgICAgIGludGVydmFsID0gTUFYIChiaW50ZXJ2YWwgKiAyLCA1ICogR1NUX1NFQ09ORCk7Ci0gICAgICBpZiAoZGF0YS0+Y3VycmVudF90aW1lIC0gYnRpbWUgPiBpbnRlcnZhbCkgewotICAgICAgICBHU1RfREVCVUcgKCJzZW5kZXIgc291cmNlICUwOHggdGltZWQgb3V0IGFuZCBiZWNhbWUgcmVjZWl2ZXIsIGxhc3QgJSIKLSAgICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgc291cmNlLT5zc3JjLCBHU1RfVElNRV9BUkdTIChidGltZSkpOwotICAgICAgICBzZW5kZXJ0aW1lb3V0ID0gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAocmVtb3ZlKSB7Ci0gICAgc2Vzcy0+dG90YWxfc291cmNlcy0tOwotICAgIGlmIChpc19zZW5kZXIpIHsKLSAgICAgIHNlc3MtPnN0YXRzLnNlbmRlcl9zb3VyY2VzLS07Ci0gICAgICBpZiAoc291cmNlLT5pbnRlcm5hbCkKLSAgICAgICAgc2Vzcy0+c3RhdHMuaW50ZXJuYWxfc2VuZGVyX3NvdXJjZXMtLTsKLSAgICB9Ci0gICAgaWYgKGlzX2FjdGl2ZSkKLSAgICAgIHNlc3MtPnN0YXRzLmFjdGl2ZV9zb3VyY2VzLS07Ci0KLSAgICBpZiAoc291cmNlLT5pbnRlcm5hbCkKLSAgICAgIHNlc3MtPnN0YXRzLmludGVybmFsX3NvdXJjZXMtLTsKLQotICAgIGlmIChieWV0aW1lb3V0KQotICAgICAgb25fYnllX3RpbWVvdXQgKHNlc3MsIHNvdXJjZSk7Ci0gICAgZWxzZQotICAgICAgb25fdGltZW91dCAoc2Vzcywgc291cmNlKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoc2VuZGVydGltZW91dCkgewotICAgICAgc291cmNlLT5pc19zZW5kZXIgPSBGQUxTRTsKLSAgICAgIHNlc3MtPnN0YXRzLnNlbmRlcl9zb3VyY2VzLS07Ci0gICAgICBpZiAoc291cmNlLT5pbnRlcm5hbCkKLSAgICAgICAgc2Vzcy0+c3RhdHMuaW50ZXJuYWxfc2VuZGVyX3NvdXJjZXMtLTsKLQotICAgICAgb25fc2VuZGVyX3RpbWVvdXQgKHNlc3MsIHNvdXJjZSk7Ci0gICAgfQotICAgIC8qIGNvdW50IGhvdyBtYW55IHNvdXJjZSB0byByZXBvcnQgaW4gdGhpcyBnZW5lcmF0aW9uICovCi0gICAgaWYgKCgoZ2ludDE2KSAoc291cmNlLT5nZW5lcmF0aW9uIC0gc2Vzcy0+Z2VuZXJhdGlvbikpIDw9IDApCi0gICAgICBkYXRhLT5udW1fdG9fcmVwb3J0Kys7Ci0gIH0KLSAgc291cmNlLT5jbG9zaW5nID0gcmVtb3ZlOwotfQotCi1zdGF0aWMgdm9pZAotc2Vzc2lvbl9zZGVzIChSVFBTZXNzaW9uICogc2VzcywgUmVwb3J0RGF0YSAqIGRhdGEpCi17Ci0gIEdzdFJUQ1BQYWNrZXQgKnBhY2tldCA9ICZkYXRhLT5wYWNrZXQ7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc2RlczsKLSAgZ2ludCBpLCBuX2ZpZWxkczsKLSAgR3N0UlRDUEJ1ZmZlciAqcnRjcCA9ICZkYXRhLT5ydGNwYnVmOwotCi0gIC8qIGFkZCBTREVTIHBhY2tldCAqLwotICBnc3RfcnRjcF9idWZmZXJfYWRkX3BhY2tldCAocnRjcCwgR1NUX1JUQ1BfVFlQRV9TREVTLCBwYWNrZXQpOwotCi0gIGdzdF9ydGNwX3BhY2tldF9zZGVzX2FkZF9pdGVtIChwYWNrZXQsIGRhdGEtPnNvdXJjZS0+c3NyYyk7Ci0KLSAgc2RlcyA9IHJ0cF9zb3VyY2VfZ2V0X3NkZXNfc3RydWN0IChkYXRhLT5zb3VyY2UpOwotCi0gIC8qIGFkZCBhbGwgZmllbGRzIGluIHRoZSBzdHJ1Y3R1cmUsIHRoZSBvcmRlciBpcyBub3QgaW1wb3J0YW50LiAqLwotICBuX2ZpZWxkcyA9IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHNkZXMpOwotICBmb3IgKGkgPSAwOyBpIDwgbl9maWVsZHM7ICsraSkgewotICAgIGNvbnN0IGdjaGFyICpmaWVsZDsKLSAgICBjb25zdCBnY2hhciAqdmFsdWU7Ci0gICAgR3N0UlRDUFNERVNUeXBlIHR5cGU7Ci0KLSAgICBmaWVsZCA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKHNkZXMsIGkpOwotICAgIGlmIChmaWVsZCA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0gICAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHNkZXMsIGZpZWxkKTsKLSAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgIGNvbnRpbnVlOwotICAgIHR5cGUgPSBnc3RfcnRjcF9zZGVzX25hbWVfdG9fdHlwZSAoZmllbGQpOwotCi0gICAgLyogRWFybHkgcGFja2V0cyBhcmUgbWluaW1hbCBhbmQgb25seSBpbmNsdWRlIHRoZSBDTkFNRSAqLwotICAgIGlmIChkYXRhLT5pc19lYXJseSAmJiB0eXBlICE9IEdTVF9SVENQX1NERVNfQ05BTUUpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmICh0eXBlID4gR1NUX1JUQ1BfU0RFU19FTkQgJiYgdHlwZSA8IEdTVF9SVENQX1NERVNfUFJJVikgewotICAgICAgZ3N0X3J0Y3BfcGFja2V0X3NkZXNfYWRkX2VudHJ5IChwYWNrZXQsIHR5cGUsIHN0cmxlbiAodmFsdWUpLAotICAgICAgICAgIChjb25zdCBndWludDggKikgdmFsdWUpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHU1RfUlRDUF9TREVTX1BSSVYpIHsKLSAgICAgIGdzaXplIHByZWZpeF9sZW47Ci0gICAgICBnc2l6ZSB2YWx1ZV9sZW47Ci0gICAgICBnc2l6ZSBkYXRhX2xlbjsKLSAgICAgIGd1aW50OCBkYXRhWzI1Nl07Ci0KLSAgICAgIC8qIGRvbid0IGFjY2VwdCBlbnRyaWVzIHRoYXQgYXJlIHRvbyBiaWcgKi8KLSAgICAgIHByZWZpeF9sZW4gPSBzdHJsZW4gKGZpZWxkKTsKLSAgICAgIGlmIChwcmVmaXhfbGVuID4gMjU1KQotICAgICAgICBjb250aW51ZTsKLSAgICAgIHZhbHVlX2xlbiA9IHN0cmxlbiAodmFsdWUpOwotICAgICAgaWYgKHZhbHVlX2xlbiA+IDI1NSkKLSAgICAgICAgY29udGludWU7Ci0gICAgICBkYXRhX2xlbiA9IDEgKyBwcmVmaXhfbGVuICsgdmFsdWVfbGVuOwotICAgICAgaWYgKGRhdGFfbGVuID4gMjU1KQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgZGF0YVswXSA9IHByZWZpeF9sZW47Ci0gICAgICBtZW1jcHkgKCZkYXRhWzFdLCBmaWVsZCwgcHJlZml4X2xlbik7Ci0gICAgICBtZW1jcHkgKCZkYXRhWzEgKyBwcmVmaXhfbGVuXSwgdmFsdWUsIHZhbHVlX2xlbik7Ci0KLSAgICAgIGdzdF9ydGNwX3BhY2tldF9zZGVzX2FkZF9lbnRyeSAocGFja2V0LCB0eXBlLCBkYXRhX2xlbiwgZGF0YSk7Ci0gICAgfQotICB9Ci0KLSAgZGF0YS0+aGFzX3NkZXMgPSBUUlVFOwotfQotCi0vKiBzY2hlZHVsZSBhIEJZRSBwYWNrZXQgKi8KLXN0YXRpYyB2b2lkCi1tYWtlX3NvdXJjZV9ieWUgKFJUUFNlc3Npb24gKiBzZXNzLCBSVFBTb3VyY2UgKiBzb3VyY2UsIFJlcG9ydERhdGEgKiBkYXRhKQotewotICBHc3RSVENQUGFja2V0ICpwYWNrZXQgPSAmZGF0YS0+cGFja2V0OwotICBHc3RSVENQQnVmZmVyICpydGNwID0gJmRhdGEtPnJ0Y3BidWY7Ci0KLSAgLyogYWRkIFNERVMgKi8KLSAgc2Vzc2lvbl9zZGVzIChzZXNzLCBkYXRhKTsKLSAgLyogYWRkIGEgQllFIHBhY2tldCAqLwotICBnc3RfcnRjcF9idWZmZXJfYWRkX3BhY2tldCAocnRjcCwgR1NUX1JUQ1BfVFlQRV9CWUUsIHBhY2tldCk7Ci0gIGdzdF9ydGNwX3BhY2tldF9ieWVfYWRkX3NzcmMgKHBhY2tldCwgc291cmNlLT5zc3JjKTsKLSAgaWYgKHNvdXJjZS0+YnllX3JlYXNvbikKLSAgICBnc3RfcnRjcF9wYWNrZXRfYnllX3NldF9yZWFzb24gKHBhY2tldCwgc291cmNlLT5ieWVfcmVhc29uKTsKLQotICAvKiB3ZSBoYXZlIGEgQllFIHBhY2tldCBub3cgKi8KLSAgc291cmNlLT5zZW50X2J5ZSA9IFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotaXNfcnRjcF90aW1lIChSVFBTZXNzaW9uICogc2VzcywgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSwgUmVwb3J0RGF0YSAqIGRhdGEpCi17Ci0gIEdzdENsb2NrVGltZSBuZXdfc2VuZF90aW1lOwotICBHc3RDbG9ja1RpbWUgaW50ZXJ2YWw7Ci0gIFJUUFNlc3Npb25TdGF0cyAqc3RhdHM7Ci0KLSAgaWYgKHNlc3MtPnNjaGVkdWxlZF9ieWUpCi0gICAgc3RhdHMgPSAmc2Vzcy0+YnllX3N0YXRzOwotICBlbHNlCi0gICAgc3RhdHMgPSAmc2Vzcy0+c3RhdHM7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZXNzLT5uZXh0X2Vhcmx5X3J0Y3BfdGltZSkpCi0gICAgZGF0YS0+aXNfZWFybHkgPSBUUlVFOwotICBlbHNlCi0gICAgZGF0YS0+aXNfZWFybHkgPSBGQUxTRTsKLQotICBpZiAoZGF0YS0+aXNfZWFybHkgJiYgc2Vzcy0+bmV4dF9lYXJseV9ydGNwX3RpbWUgPCBjdXJyZW50X3RpbWUpIHsKLSAgICBHU1RfREVCVUcgKCJlYXJseSBmZWVkYmFjayAlIiBHU1RfVElNRV9GT1JNQVQgIiA8IG5vdyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoY3VycmVudF90aW1lKSk7Ci0gIH0gZWxzZSBpZiAoc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fAotICAgICAgc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgPiBjdXJyZW50X3RpbWUpIHsKLSAgICBHU1RfREVCVUcgKCJubyBjaGVjayB0aW1lIHlldCwgbmV4dCAlIiBHU1RfVElNRV9GT1JNQVQgIiA+IG5vdyAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoY3VycmVudF90aW1lKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogdGFrZSBpbnRlcnZhbCBhbmQgYWRkIGppdHRlciAqLwotICBpbnRlcnZhbCA9IGRhdGEtPmludGVydmFsOwotICBpZiAoaW50ZXJ2YWwgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKLSAgICBpbnRlcnZhbCA9IHJ0cF9zdGF0c19hZGRfcnRjcF9qaXR0ZXIgKHN0YXRzLCBpbnRlcnZhbCk7Ci0KLSAgaWYgKHNlc3MtPmxhc3RfcnRjcF9jaGVja190aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAvKiBwZXJmb3JtIGZvcndhcmQgcmVjb25zaWRlcmF0aW9uICovCi0gICAgaWYgKGludGVydmFsICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICAgIEdzdENsb2NrVGltZSBlbGFwc2VkOwotCi0gICAgICAvKiBnZXQgZWxhcHNlZCB0aW1lIHNpbmNlIHdlIGxhc3QgcmVwb3J0ZWQgKi8KLSAgICAgIGVsYXBzZWQgPSBjdXJyZW50X3RpbWUgLSBzZXNzLT5sYXN0X3J0Y3BfY2hlY2tfdGltZTsKLQotICAgICAgR1NUX0RFQlVHICgiZm9yd2FyZCByZWNvbnNpZGVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFUICIsIGVsYXBzZWQgJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGludGVydmFsKSwgR1NUX1RJTUVfQVJHUyAoZWxhcHNlZCkpOwotICAgICAgbmV3X3NlbmRfdGltZSA9IGludGVydmFsICsgc2Vzcy0+bGFzdF9ydGNwX2NoZWNrX3RpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5ld19zZW5kX3RpbWUgPSBzZXNzLT5sYXN0X3J0Y3BfY2hlY2tfdGltZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgUlRDUCBwYWNrZXQsIHdlIGNhbiByZWNvbnNpZGVyIGFueXRoaW5nIGJhc2VkCi0gICAgICogb24gdGhlIGxhc3QgUlRDUCBzZW5kIHRpbWUgYmVjYXVzZSB0aGVyZSB3YXMgbm9uZS4KLSAgICAgKi8KLSAgICBnX3dhcm5faWZfZmFpbCAoIWRhdGEtPmlzX2Vhcmx5KTsKLSAgICBkYXRhLT5pc19lYXJseSA9IEZBTFNFOwotICAgIG5ld19zZW5kX3RpbWUgPSBjdXJyZW50X3RpbWU7Ci0gIH0KLQotICBpZiAoIWRhdGEtPmlzX2Vhcmx5KSB7Ci0gICAgLyogY2hlY2sgaWYgcmVjb25zaWRlcmF0aW9uICovCi0gICAgaWYgKG5ld19zZW5kX3RpbWUgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSB8fCBjdXJyZW50X3RpbWUgPCBuZXdfc2VuZF90aW1lKSB7Ci0gICAgICBHU1RfREVCVUcgKCJyZWNvbnNpZGVyIFJUQ1AgZm9yICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChuZXdfc2VuZF90aW1lKSk7Ci0gICAgICAvKiBzdG9yZSBuZXcgY2hlY2sgdGltZSAqLwotICAgICAgc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUgPSBuZXdfc2VuZF90aW1lOwotICAgICAgc2Vzcy0+bGFzdF9ydGNwX2ludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc2Vzcy0+bGFzdF9ydGNwX2ludGVydmFsID0gaW50ZXJ2YWw7Ci0gICAgaWYgKChzZXNzLT5ydHBfcHJvZmlsZSA9PSBHU1RfUlRQX1BST0ZJTEVfQVZQRgotICAgICAgICAgICAgfHwgc2Vzcy0+cnRwX3Byb2ZpbGUgPT0gR1NUX1JUUF9QUk9GSUxFX1NBVlBGKQotICAgICAgICAmJiBpbnRlcnZhbCAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7Ci0gICAgICAvKiBBcHBseSB0aGUgcnVsZXMgZnJvbSBSRkMgNDU4NSBzZWN0aW9uIDMuNS4zICovCi0gICAgICBpZiAoc3RhdHMtPm1pbl9pbnRlcnZhbCAhPSAwICYmICFzZXNzLT5maXJzdF9ydGNwKSB7Ci0gICAgICAgIEdzdENsb2NrVGltZSBUX3JyX2N1cnJlbnRfaW50ZXJ2YWwgPQotICAgICAgICAgICAgZ19yYW5kb21fZG91YmxlX3JhbmdlICgwLjUsIDEuNSkgKiBzdGF0cy0+bWluX2ludGVydmFsICogR1NUX1NFQ09ORDsKLQotICAgICAgICBpZiAoVF9ycl9jdXJyZW50X2ludGVydmFsID4gaW50ZXJ2YWwpIHsKLSAgICAgICAgICBHU1RfREVCVUcgKCJBZGp1c3RpbmcgaW50ZXJ2YWwgZm9yIHQtcnItaW50ZXJ2YWw6ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAgICAgICAiID4gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChUX3JyX2N1cnJlbnRfaW50ZXJ2YWwpLAotICAgICAgICAgICAgICBHU1RfVElNRV9BUkdTIChpbnRlcnZhbCkpOwotICAgICAgICAgIGludGVydmFsID0gVF9ycl9jdXJyZW50X2ludGVydmFsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lID0gY3VycmVudF90aW1lICsgaW50ZXJ2YWw7Ci0gIH0KLQotCi0gIEdTVF9ERUJVRyAoImNhbiBzZW5kIFJUQ1Agbm93LCBuZXh0ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbG9uZV9zc3Jjc19oYXNodGFibGUgKGdjaGFyICoga2V5LCBSVFBTb3VyY2UgKiBzb3VyY2UsIEdIYXNoVGFibGUgKiBoYXNoX3RhYmxlKQotewotICBnX2hhc2hfdGFibGVfaW5zZXJ0IChoYXNoX3RhYmxlLCBrZXksIGdfb2JqZWN0X3JlZiAoc291cmNlKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcmVtb3ZlX2Nsb3Npbmdfc291cmNlcyAoY29uc3QgZ2NoYXIgKiBrZXksIFJUUFNvdXJjZSAqIHNvdXJjZSwKLSAgICBSZXBvcnREYXRhICogZGF0YSkKLXsKLSAgaWYgKHNvdXJjZS0+Y2xvc2luZykKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAoc291cmNlLT5zZW5kX2ZpcikKLSAgICBkYXRhLT5oYXZlX2ZpciA9IFRSVUU7Ci0gIGlmIChzb3VyY2UtPnNlbmRfcGxpKQotICAgIGRhdGEtPmhhdmVfcGxpID0gVFJVRTsKLSAgaWYgKHNvdXJjZS0+c2VuZF9uYWNrKQotICAgIGRhdGEtPmhhdmVfbmFjayA9IFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ2VuZXJhdGVfcnRjcCAoY29uc3QgZ2NoYXIgKiBrZXksIFJUUFNvdXJjZSAqIHNvdXJjZSwgUmVwb3J0RGF0YSAqIGRhdGEpCi17Ci0gIFJUUFNlc3Npb24gKnNlc3MgPSBkYXRhLT5zZXNzOwotICBSZXBvcnRPdXRwdXQgKm91dHB1dDsKLQotICAvKiBvbmx5IGdlbmVyYXRlIFJUQ1AgZm9yIGFjdGl2ZSBpbnRlcm5hbCBzb3VyY2VzICovCi0gIGlmICghc291cmNlLT5pbnRlcm5hbCB8fCBzb3VyY2UtPnNlbnRfYnllKQotICAgIHJldHVybjsKLQotICAvKiBpZ25vcmUgb3RoZXIgc291cmNlcyB3aGVuIHdlIGRvIHRoZSB0aW1lb3V0IGFmdGVyIGEgc2NoZWR1bGVkIEJZRSAqLwotICBpZiAoc2Vzcy0+c2NoZWR1bGVkX2J5ZSAmJiAhc291cmNlLT5tYXJrZWRfYnllKQotICAgIHJldHVybjsKLQotICBkYXRhLT5zb3VyY2UgPSBzb3VyY2U7Ci0KLSAgLyogb3BlbiBwYWNrZXQgKi8KLSAgc2Vzc2lvbl9zdGFydF9ydGNwIChzZXNzLCBkYXRhKTsKLQotICBpZiAoc291cmNlLT5tYXJrZWRfYnllKSB7Ci0gICAgLyogc2VuZCBCWUUgKi8KLSAgICBtYWtlX3NvdXJjZV9ieWUgKHNlc3MsIHNvdXJjZSwgZGF0YSk7Ci0gIH0gZWxzZSBpZiAoIWRhdGEtPmlzX2Vhcmx5KSB7Ci0gICAgLyogbG9vcCBvdmVyIGFsbCBrbm93biBzb3VyY2VzIGFuZCBhZGQgcmVwb3J0IGJsb2Nrcy4gSWYgd2UgYXJlIGVhcmx5LCB3ZQotICAgICAqIGp1c3QgbWFrZSBhIG1pbmltYWwgUlRDUCBwYWNrZXQgYW5kIHNraXAgdGhpcyBzdGVwICovCi0gICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHNlc3MtPnNzcmNzW3Nlc3MtPm1hc2tfaWR4XSwKLSAgICAgICAgKEdIRnVuYykgc2Vzc2lvbl9yZXBvcnRfYmxvY2tzLCBkYXRhKTsKLSAgfQotICBpZiAoIWRhdGEtPmhhc19zZGVzICYmICghZGF0YS0+aXNfZWFybHkgfHwgIXNlc3MtPnJlZHVjZWRfc2l6ZV9ydGNwKSkKLSAgICBzZXNzaW9uX3NkZXMgKHNlc3MsIGRhdGEpOwotCi0gIGlmIChkYXRhLT5oYXZlX2ZpcikKLSAgICBzZXNzaW9uX2ZpciAoc2VzcywgZGF0YSk7Ci0KLSAgaWYgKGRhdGEtPmhhdmVfcGxpKQotICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0sCi0gICAgICAgIChHSEZ1bmMpIHNlc3Npb25fcGxpLCBkYXRhKTsKLQotICBpZiAoZGF0YS0+aGF2ZV9uYWNrKQotICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0sCi0gICAgICAgIChHSEZ1bmMpIHNlc3Npb25fbmFjaywgZGF0YSk7Ci0KLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmZGF0YS0+cnRjcGJ1Zik7Ci0KLSAgb3V0cHV0ID0gZ19zbGljZV9uZXcgKFJlcG9ydE91dHB1dCk7Ci0gIG91dHB1dC0+c291cmNlID0gZ19vYmplY3RfcmVmIChzb3VyY2UpOwotICBvdXRwdXQtPmJ1ZmZlciA9IGRhdGEtPnJ0Y3A7Ci0gIC8qIHF1ZXVlIHRoZSBSVENQIHBhY2tldCB0byBwdXNoIGxhdGVyICovCi0gIGdfcXVldWVfcHVzaF90YWlsICgmZGF0YS0+b3V0cHV0LCBvdXRwdXQpOwotfQotCi1zdGF0aWMgdm9pZAotdXBkYXRlX2dlbmVyYXRpb24gKGNvbnN0IGdjaGFyICoga2V5LCBSVFBTb3VyY2UgKiBzb3VyY2UsIFJlcG9ydERhdGEgKiBkYXRhKQotewotICBSVFBTZXNzaW9uICpzZXNzID0gZGF0YS0+c2VzczsKLQotICBpZiAoZ19oYXNoX3RhYmxlX3NpemUgKHNvdXJjZS0+cmVwb3J0ZWRfaW5fc3Jfb2YpID49Ci0gICAgICBzZXNzLT5zdGF0cy5pbnRlcm5hbF9zb3VyY2VzKSB7Ci0gICAgLyogc291cmNlIGlzIHJlcG9ydGVkLCBtb3ZlIHRvIG5leHQgZ2VuZXJhdGlvbiAqLwotICAgIHNvdXJjZS0+Z2VuZXJhdGlvbiA9IHNlc3MtPmdlbmVyYXRpb24gKyAxOwotICAgIGdfaGFzaF90YWJsZV9yZW1vdmVfYWxsIChzb3VyY2UtPnJlcG9ydGVkX2luX3NyX29mKTsKLQotICAgIEdTVF9MT0cgKCJyZXBvcnRlZCBzb3VyY2UgJXgsIG5ldyBnZW5lcmF0aW9uOiAlZCIsIHNvdXJjZS0+c3NyYywKLSAgICAgICAgc291cmNlLT5nZW5lcmF0aW9uKTsKLQotICAgIC8qIGlmIHdlIHJlcG9ydGVkIGFsbCBzb3VyY2VzIGluIHRoaXMgZ2VuZXJhdGlvbiwgbW92ZSB0byBuZXh0ICovCi0gICAgaWYgKC0tZGF0YS0+bnVtX3RvX3JlcG9ydCA9PSAwKSB7Ci0gICAgICBzZXNzLT5nZW5lcmF0aW9uKys7Ci0gICAgICBHU1RfREVCVUcgKCJhbGwgcmVwb3J0ZWQsIGdlbmVyYXRpb24gbm93ICV1Iiwgc2Vzcy0+Z2VuZXJhdGlvbik7Ci0gICAgfQotICB9Ci19Ci0KLS8qKgotICogcnRwX3Nlc3Npb25fb25fdGltZW91dDoKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICogQGN1cnJlbnRfdGltZTogdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUKLSAqIEBudHBuc3RpbWU6IHRoZSBjdXJyZW50IE5UUCB0aW1lIGluIG5hbm9zZWNvbmRzCi0gKiBAcnVubmluZ190aW1lOiB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lCi0gKgotICogUGVyZm9ybSBtYWludGVuYW5jZSBhY3Rpb25zIGFmdGVyIHRoZSB0aW1lb3V0IG9idGFpbmVkIHdpdGgKLSAqIHJ0cF9zZXNzaW9uX25leHRfdGltZW91dCgpIGV4cGlyZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gdGltZW91dHMgb2YgcmVjZWl2ZXJzIGFuZCBzZW5kZXJzLCBzZW5kIGEgQllFCi0gKiBwYWNrZXQgb3IgZ2VuZXJhdGUgUlRDUCBwYWNrZXRzIHdpdGggY3VycmVudCBzZXNzaW9uIHN0YXRzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIGNhbGwgdGhlICNSVFBTZXNzaW9uU2VuZFJUQ1AgY2FsbGJhY2ssIHBvc3NpYmx5IG11bHRpcGxlCi0gKiB0aW1lcywgZm9yIGVhY2ggcGFja2V0IHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuLgotICovCi1Hc3RGbG93UmV0dXJuCi1ydHBfc2Vzc2lvbl9vbl90aW1lb3V0IChSVFBTZXNzaW9uICogc2VzcywgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSwKLSAgICBndWludDY0IG50cG5zdGltZSwgR3N0Q2xvY2tUaW1lIHJ1bm5pbmdfdGltZSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQgPSBHU1RfRkxPV19PSzsKLSAgUmVwb3J0RGF0YSBkYXRhID0geyBHU1RfUlRDUF9CVUZGRVJfSU5JVCB9OwotICBHSGFzaFRhYmxlICp0YWJsZV9jb3B5OwotICBSZXBvcnRPdXRwdXQgKm91dHB1dDsKLSAgZ2Jvb2xlYW4gYWxsX2VtcHR5ID0gRkFMU0U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TRVNTSU9OIChzZXNzKSwgR1NUX0ZMT1dfRVJST1IpOwotCi0gIEdTVF9ERUJVRyAoInJlcG9ydGluZyBhdCAlIiBHU1RfVElNRV9GT1JNQVQgIiwgTlRQIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAiLCBydW5uaW5nLXRpbWUgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChjdXJyZW50X3RpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAobnRwbnN0aW1lKSwgR1NUX1RJTUVfQVJHUyAocnVubmluZ190aW1lKSk7Ci0KLSAgZGF0YS5zZXNzID0gc2VzczsKLSAgZGF0YS5jdXJyZW50X3RpbWUgPSBjdXJyZW50X3RpbWU7Ci0gIGRhdGEubnRwbnN0aW1lID0gbnRwbnN0aW1lOwotICBkYXRhLnJ1bm5pbmdfdGltZSA9IHJ1bm5pbmdfdGltZTsKLSAgZGF0YS5udW1fdG9fcmVwb3J0ID0gMDsKLSAgZGF0YS5tYXlfc3VwcHJlc3MgPSBGQUxTRTsKLSAgZGF0YS5uYWNrZWRfc2VxbnVtcyA9IDA7Ci0gIGdfcXVldWVfaW5pdCAoJmRhdGEub3V0cHV0KTsKLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLSAgLyogZ2V0IGEgbmV3IGludGVydmFsLCB3ZSBuZWVkIHRoaXMgZm9yIHZhcmlvdXMgY2xlYW51cHMgZXRjICovCi0gIGRhdGEuaW50ZXJ2YWwgPSBjYWxjdWxhdGVfcnRjcF9pbnRlcnZhbCAoc2VzcywgVFJVRSwgc2Vzcy0+Zmlyc3RfcnRjcCk7Ci0KLSAgR1NUX0RFQlVHICgiaW50ZXJ2YWwgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkYXRhLmludGVydmFsKSk7Ci0KLSAgLyogd2UgbmVlZCBhbiBpbnRlcm5hbCBzb3VyY2Ugbm93ICovCi0gIGlmIChzZXNzLT5zdGF0cy5pbnRlcm5hbF9zb3VyY2VzID09IDApIHsKLSAgICBSVFBTb3VyY2UgKnNvdXJjZTsKLSAgICBnYm9vbGVhbiBjcmVhdGVkOwotCi0gICAgc291cmNlID0gb2J0YWluX2ludGVybmFsX3NvdXJjZSAoc2Vzcywgc2Vzcy0+c3VnZ2VzdGVkX3NzcmMsICZjcmVhdGVkLAotICAgICAgICBjdXJyZW50X3RpbWUpOwotICAgIHNlc3MtPmludGVybmFsX3NzcmNfc2V0ID0gVFJVRTsKLQotICAgIGlmIChjcmVhdGVkKQotICAgICAgb25fbmV3X3NlbmRlcl9zc3JjIChzZXNzLCBzb3VyY2UpOwotCi0gICAgZ19vYmplY3RfdW5yZWYgKHNvdXJjZSk7Ci0gIH0KLQotICBzZXNzLT5jb25mbGljdGluZ19hZGRyZXNzZXMgPQotICAgICAgdGltZW91dF9jb25mbGljdGluZ19hZGRyZXNzZXMgKHNlc3MtPmNvbmZsaWN0aW5nX2FkZHJlc3NlcywgY3VycmVudF90aW1lKTsKLQotICAvKiBNYWtlIGEgbG9jYWwgY29weSBvZiB0aGUgaGFzaHRhYmxlLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUKLSAgICogY2xlYW51cCBzdGFnZSBiZWxvdyByZWxlYXNlcyB0aGUgc2Vzc2lvbiBsb2NrLiAqLwotICB0YWJsZV9jb3B5ID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnX29iamVjdF91bnJlZik7Ci0gIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0sCi0gICAgICAoR0hGdW5jKSBjbG9uZV9zc3Jjc19oYXNodGFibGUsIHRhYmxlX2NvcHkpOwotCi0gIC8qIENsZWFuIHVwIHRoZSBzZXNzaW9uLCBtYXJrIHRoZSBzb3VyY2UgZm9yIHJlbW92aW5nLCB0aGlzIG1pZ2h0IHJlbGVhc2UgdGhlCi0gICAqIHNlc3Npb24gbG9jay4gKi8KLSAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHRhYmxlX2NvcHksIChHSEZ1bmMpIHNlc3Npb25fY2xlYW51cCwgJmRhdGEpOwotICBnX2hhc2hfdGFibGVfZGVzdHJveSAodGFibGVfY29weSk7Ci0KLSAgLyogTm93IHJlbW92ZSB0aGUgbWFya2VkIHNvdXJjZXMgKi8KLSAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0sCi0gICAgICAoR0hSRnVuYykgcmVtb3ZlX2Nsb3Npbmdfc291cmNlcywgJmRhdGEpOwotCi0gIC8qIHVwZGF0ZSBwb2ludC10by1wb2ludCBzdGF0dXMgKi8KLSAgc2Vzc2lvbl91cGRhdGVfcHRwIChzZXNzKTsKLQotICAvKiBzZWUgaWYgd2UgbmVlZCB0byBnZW5lcmF0ZSBTUiBvciBSUiBwYWNrZXRzICovCi0gIGlmICghaXNfcnRjcF90aW1lIChzZXNzLCBjdXJyZW50X3RpbWUsICZkYXRhKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogY2hlY2sgaWYgYWxsIHRoZSBidWZmZXJzIGFyZSBlbXB0eSBhZmVyIGdlbmVyYXRpb24gKi8KLSAgYWxsX2VtcHR5ID0gVFJVRTsKLQotICBHU1RfREVCVUcKLSAgICAgICgiZG9pbmcgUlRDUCBnZW5lcmF0aW9uICV1IGZvciAldSBzb3VyY2VzLCBlYXJseSAlZCwgbWF5IHN1cHByZXNzICVkIiwKLSAgICAgIHNlc3MtPmdlbmVyYXRpb24sIGRhdGEubnVtX3RvX3JlcG9ydCwgZGF0YS5pc19lYXJseSwgZGF0YS5tYXlfc3VwcHJlc3MpOwotCi0gIC8qIGdlbmVyYXRlIFJUQ1AgZm9yIGFsbCBpbnRlcm5hbCBzb3VyY2VzICovCi0gIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzZXNzLT5zc3Jjc1tzZXNzLT5tYXNrX2lkeF0sCi0gICAgICAoR0hGdW5jKSBnZW5lcmF0ZV9ydGNwLCAmZGF0YSk7Ci0KLSAgLyogdXBkYXRlIHRoZSBnZW5lcmF0aW9uIGZvciBhbGwgdGhlIHNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVwb3J0ZWQgKi8KLSAgZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHNlc3MtPnNzcmNzW3Nlc3MtPm1hc2tfaWR4XSwKLSAgICAgIChHSEZ1bmMpIHVwZGF0ZV9nZW5lcmF0aW9uLCAmZGF0YSk7Ci0KLSAgLyogd2Uga2VlcCB0cmFjayBvZiB0aGUgbGFzdCByZXBvcnQgdGltZSBpbiBvcmRlciB0byB0aW1lb3V0IGluYWN0aXZlCi0gICAqIHJlY2VpdmVycyBvciBzZW5kZXJzICovCi0gIGlmICghZGF0YS5pc19lYXJseSkgewotICAgIEdTVF9ERUJVRyAoIlRpbWUgc2luY2UgbGFzdCByZWd1bGFyIFJUQ1A6ICUiIEdTVF9USU1FX0ZPUk1BVCAiIC0gJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgPSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGRhdGEuY3VycmVudF90aW1lKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bGFzdF9ydGNwX3NlbmRfdGltZSksCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKGRhdGEuY3VycmVudF90aW1lIC0gc2Vzcy0+bGFzdF9ydGNwX3NlbmRfdGltZSkpOwotICAgIHNlc3MtPmxhc3RfcnRjcF9zZW5kX3RpbWUgPSBkYXRhLmN1cnJlbnRfdGltZTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoIlRpbWUgc2luY2UgbGFzdCBSVENQOiAlIiBHU1RfVElNRV9GT1JNQVQgIiAtICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiA9ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoZGF0YS5jdXJyZW50X3RpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bGFzdF9ydGNwX3NlbmRfdGltZSksCi0gICAgICBHU1RfVElNRV9BUkdTIChkYXRhLmN1cnJlbnRfdGltZSAtIHNlc3MtPmxhc3RfcnRjcF9jaGVja190aW1lKSk7Ci0gIHNlc3MtPmxhc3RfcnRjcF9jaGVja190aW1lID0gZGF0YS5jdXJyZW50X3RpbWU7Ci0gIHNlc3MtPmZpcnN0X3J0Y3AgPSBGQUxTRTsKLSAgc2Vzcy0+bmV4dF9lYXJseV9ydGNwX3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBzZXNzLT5zY2hlZHVsZWRfYnllID0gRkFMU0U7Ci0KLWRvbmU6Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgLyogbm90aWZ5IGFib3V0IHVwZGF0ZWQgc3RhdGlzdGljcyAqLwotICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUIChzZXNzKSwgInN0YXRzIik7Ci0KLSAgLyogcHVzaCBvdXQgdGhlIFJUQ1AgcGFja2V0cyAqLwotICB3aGlsZSAoKG91dHB1dCA9IGdfcXVldWVfcG9wX2hlYWQgKCZkYXRhLm91dHB1dCkpKSB7Ci0gICAgZ2Jvb2xlYW4gZG9fbm90X3N1cHByZXNzLCBlbXB0eV9idWZmZXI7Ci0gICAgR3N0QnVmZmVyICpidWZmZXIgPSBvdXRwdXQtPmJ1ZmZlcjsKLSAgICBSVFBTb3VyY2UgKnNvdXJjZSA9IG91dHB1dC0+c291cmNlOwotCi0gICAgLyogR2l2ZSB0aGUgdXNlciBhIGNoYW5nZSB0byBhZGQgaXRzIG93biBwYWNrZXQgKi8KLSAgICBnX3NpZ25hbF9lbWl0IChzZXNzLCBydHBfc2Vzc2lvbl9zaWduYWxzW1NJR05BTF9PTl9TRU5ESU5HX1JUQ1BdLCAwLAotICAgICAgICBidWZmZXIsIGRhdGEuaXNfZWFybHksICZkb19ub3Rfc3VwcHJlc3MpOwotCi0gICAgZW1wdHlfYnVmZmVyID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSAwOwotCi0gICAgaWYgKCFlbXB0eV9idWZmZXIpCi0gICAgICBhbGxfZW1wdHkgPSBGQUxTRTsKLQotICAgIGlmIChzZXNzLT5jYWxsYmFja3Muc2VuZF9ydGNwICYmCi0gICAgICAgICFlbXB0eV9idWZmZXIgJiYgKGRvX25vdF9zdXBwcmVzcyB8fCAhZGF0YS5tYXlfc3VwcHJlc3MpKSB7Ci0gICAgICBndWludCBwYWNrZXRfc2l6ZTsKLQotICAgICAgcGFja2V0X3NpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpICsgc2Vzcy0+aGVhZGVyX2xlbjsKLQotICAgICAgVVBEQVRFX0FWRyAoc2Vzcy0+c3RhdHMuYXZnX3J0Y3BfcGFja2V0X3NpemUsIHBhY2tldF9zaXplKTsKLSAgICAgIEdTVF9ERUJVRyAoIiVwLCBzZW5kaW5nIFJUQ1AgcGFja2V0LCBhdmcgc2l6ZSAldSwgJXUiLCAmc2Vzcy0+c3RhdHMsCi0gICAgICAgICAgc2Vzcy0+c3RhdHMuYXZnX3J0Y3BfcGFja2V0X3NpemUsIHBhY2tldF9zaXplKTsKLSAgICAgIHJlc3VsdCA9Ci0gICAgICAgICAgc2Vzcy0+Y2FsbGJhY2tzLnNlbmRfcnRjcCAoc2Vzcywgc291cmNlLCBidWZmZXIsCi0gICAgICAgICAgc2Vzcy0+c2VuZF9ydGNwX3VzZXJfZGF0YSk7Ci0KLSAgICAgIFJUUF9TRVNTSU9OX0xPQ0sgKHNlc3MpOwotICAgICAgc2Vzcy0+c3RhdHMubmFja3Nfc2VudCArPSBkYXRhLm5hY2tlZF9zZXFudW1zOwotICAgICAgb25fc2VuZGVyX3NzcmNfYWN0aXZlIChzZXNzLCBzb3VyY2UpOwotICAgICAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHICgiZnJlZWluZyBwYWNrZXQgY2FsbGJhY2s6ICVwIgotICAgICAgICAgICIgZW1wdHlfYnVmZmVyOiAlZCwgIgotICAgICAgICAgICIgZG9fbm90X3N1cHByZXNzOiAlZCBtYXlfc3VwcHJlc3M6ICVkIiwgc2Vzcy0+Y2FsbGJhY2tzLnNlbmRfcnRjcCwKLSAgICAgICAgICBlbXB0eV9idWZmZXIsIGRvX25vdF9zdXBwcmVzcywgZGF0YS5tYXlfc3VwcHJlc3MpOwotICAgICAgaWYgKCFlbXB0eV9idWZmZXIpIHsKLSAgICAgICAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gICAgICAgIHNlc3MtPnN0YXRzLm5hY2tzX2Ryb3BwZWQgKz0gZGF0YS5uYWNrZWRfc2VxbnVtczsKLSAgICAgICAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgICAgIH0KLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgfQotICAgIGdfb2JqZWN0X3VucmVmIChzb3VyY2UpOwotICAgIGdfc2xpY2VfZnJlZSAoUmVwb3J0T3V0cHV0LCBvdXRwdXQpOwotICB9Ci0KLSAgaWYgKGFsbF9lbXB0eSkKLSAgICBHU1RfRVJST1IgKCJnZW5lcmF0ZWQgZW1wdHkgUlRDUCBtZXNzYWdlcyBmb3IgYWxsIHRoZSBzb3VyY2VzIik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9yZXF1ZXN0X2Vhcmx5X3J0Y3A6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBjdXJyZW50X3RpbWU6IHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lCi0gKiBAbWF4X2RlbGF5OiBtYXhpbXVtIGRlbGF5Ci0gKgotICogUmVxdWVzdCB0cmFuc21pc3Npb24gb2YgZWFybHkgUlRDUAotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSByZWxhdGVkIFJUQ1AgY2FuIGJlIHNjaGVkdWxlZC4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zZXNzaW9uX3JlcXVlc3RfZWFybHlfcnRjcCAoUlRQU2Vzc2lvbiAqIHNlc3MsIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIG1heF9kZWxheSkKLXsKLSAgR3N0Q2xvY2tUaW1lIFRfZGl0aGVyX21heCwgVF9yciwgb2Zmc2V0ID0gMDsKLSAgZ2Jvb2xlYW4gcmV0OwotICBnYm9vbGVhbiBhbGxvd19lYXJseTsKLQotICAvKiBJbXBsZW1lbnRzIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIFJGQyA0NTg1IHNlY3Rpb24gMy41LjIgKi8KLQotICBSVFBfU0VTU0lPTl9MT0NLIChzZXNzKTsKLQotICAvKiBXZSBhc3N1bWUgYSBmZWVkYmFjayBwcm9maWxlIGlmIHNvbWV0aGluZyBpcyByZXF1ZXN0aW5nIFJUQ1AKLSAgICogdG8gYmUgc2VudCAqLwotICBzZXNzLT5ydHBfcHJvZmlsZSA9IEdTVF9SVFBfUFJPRklMRV9BVlBGOwotCi0gIC8qIENoZWNrIGlmIGFscmVhZHkgcmVxdWVzdGVkICovCi0gIC8qICBSRkMgNDU4NSBzZWN0aW9uIDMuNS4yIHN0ZXAgMiAqLwotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZXNzLCAiYWxyZWFkeSBoYXZlIG5leHQgZWFybHkgcnRjcCB0aW1lIik7Ci0gICAgcmV0ID0gKGN1cnJlbnRfdGltZSArIG1heF9kZWxheSA+IHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lKTsKLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIGlmICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZXNzLCAibm8gbmV4dCBSVENQIGNoZWNrIHRpbWUiKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIC8qIFJGQyA0NTg1IHNlY3Rpb24gMy41LjMgc3RlcCAxCi0gICAqIElmIG5vIHJlZ3VsYXIgUlRDUCBwYWNrZXQgaGFzIGJlZW4gc2VudCBiZWZvcmUsIHRoZW4gYSByZWd1bGFyCi0gICAqIFJUQ1AgcGFja2V0IGhhcyB0byBiZSBzY2hlZHVsZWQgZmlyc3QgYW5kIEZCIG1lc3NhZ2VzIG1pZ2h0IGJlCi0gICAqIGluY2x1ZGVkIHRoZXJlCi0gICAqLwotICBpZiAoIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzZXNzLT5sYXN0X3J0Y3Bfc2VuZF90aW1lKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZXNzLCAibm8gUlRDUCBzZW50IHlldCIpOwotCi0gICAgaWYgKGN1cnJlbnRfdGltZSArIG1heF9kZWxheSA+IHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VzcywKLSAgICAgICAgICAibmV4dCBzY2hlZHVsZWQgdGltZSBpcyBzb29uICUiIEdTVF9USU1FX0ZPUk1BVCAiICsgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoY3VycmVudF90aW1lKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChtYXhfZGVsYXkpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VzcywKLSAgICAgICAgICAiY2FuJ3QgYWxsb3cgZWFybHkgZmVlZGJhY2ssIG5leHQgc2NoZWR1bGVkIHRpbWUgaXMgdG9vIGxhdGUgJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiArICUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGN1cnJlbnRfdGltZSksIEdTVF9USU1FX0FSR1MgKG1heF9kZWxheSksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUpKTsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgIH0KLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIFRfcnIgPSBzZXNzLT5sYXN0X3J0Y3BfaW50ZXJ2YWw7Ci0KLSAgLyogIFJGQyA0NTg1IHNlY3Rpb24gMy41LjIgc3RlcCAyYiAqLwotICAvKiBJZiB0aGUgdG90YWwgc291cmNlcyBpcyA8PTIsIHRoZW4gdGhlcmUgaXMgb25seSB1cyBhbmQgb25lIHBlZXIgKi8KLSAgLyogV2hlbiB0aGVyZSBpcyBvbmUgYXV4aWxpYXJ5IHN0cmVhbSB0aGUgc2Vzc2lvbiBjYW4gc3RpbGwgZG8gcG9pbnQKLSAgICogdG8gcG9pbnQuCi0gICAqLwotICBpZiAoc2Vzcy0+aXNfZG9pbmdfcHRwKSB7Ci0gICAgVF9kaXRoZXJfbWF4ID0gMDsKLSAgfSBlbHNlIHsKLSAgICAvKiBEaXZpZGUgYnkgMiBiZWNhdXNlIGwgPSAwLjUgKi8KLSAgICBUX2RpdGhlcl9tYXggPSBUX3JyOwotICAgIFRfZGl0aGVyX21heCAvPSAyOwotICB9Ci0KLSAgLyogIFJGQyA0NTg1IHNlY3Rpb24gMy41LjIgc3RlcCAzICovCi0gIGlmIChjdXJyZW50X3RpbWUgKyBUX2RpdGhlcl9tYXggPiBzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZXNzLAotICAgICAgICAiZG9uJ3Qgc2VuZCBiZWNhdXNlIG9mIGRpdGhlciwgbmV4dCBzY2hlZHVsZWQgdGltZSBpcyB0b28gc29vbiAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiArICUiIEdTVF9USU1FX0ZPUk1BVCAiID4gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChjdXJyZW50X3RpbWUpLCBHU1RfVElNRV9BUkdTIChUX2RpdGhlcl9tYXgpLAotICAgICAgICBHU1RfVElNRV9BUkdTIChzZXNzLT5uZXh0X3J0Y3BfY2hlY2tfdGltZSkpOwotICAgIHJldCA9IFRfZGl0aGVyX21heCA8PSBtYXhfZGVsYXk7Ci0gICAgZ290byBlbmQ7Ci0gIH0KLQotICAvKiAgUkZDIDQ1ODUgc2VjdGlvbiAzLjUuMiBzdGVwIDRhIGFuZAotICAgKiAgUkZDIDQ1ODUgc2VjdGlvbiAzLjUuMiBzdGVwIDYgKi8KLSAgYWxsb3dfZWFybHkgPSBGQUxTRTsKLSAgaWYgKHNlc3MtPmxhc3RfcnRjcF9jaGVja190aW1lID09IHNlc3MtPmxhc3RfcnRjcF9zZW5kX3RpbWUpIHsKLSAgICAvKiBMYXN0IHRpbWUgd2Ugc2VudCBhIGZ1bGwgUlRDUCBwYWNrZXQsIHdlIGNhbiBub3cgaW1tZWRpYXRlbHkKLSAgICAgKiBzZW5kIGFuIGVhcmx5IG9uZSBhcyBhbGxvd19lYXJseSB3YXMgcmVzZXQgdG8gVFJVRSAqLwotICAgIGFsbG93X2Vhcmx5ID0gVFJVRTsKLSAgfSBlbHNlIGlmIChzZXNzLT5sYXN0X3J0Y3BfY2hlY2tfdGltZSArIFRfcnIgPD0gY3VycmVudF90aW1lICsgbWF4X2RlbGF5KSB7Ci0gICAgLyogTGFzdCBwYWNrZXQgd2Ugc2VudCB3YXMgYW4gZWFybHkgUlRDUCBwYWNrZXQgYW5kIG1vcmUgdGhhbgotICAgICAqIFRfcnIgaGFzIHBhc3NlZCBzaW5jZSB0aGVuLCBtZWFuaW5nIHdlIHdvdWxkIGhhdmUgc3VwcHJlc3NlZAotICAgICAqIGEgcmVndWxhciBSVENQIHBhY2tldCBhbHJlYWR5IGFuZCByZXNldCBhbGxvd19lYXJseSB0byBUUlVFICovCi0gICAgYWxsb3dfZWFybHkgPSBUUlVFOwotCi0gICAgLyogV2UgaGF2ZSB0byBvZmZzZXQgYSBiaXQgYXMgVF9yciBoYXMgbm90IHBhc3NlZCB5ZXQsIGJ1dCB3aWxsIGJlZm9yZQotICAgICAqIG1heF9kZWxheSAqLwotICAgIGlmIChzZXNzLT5sYXN0X3J0Y3BfY2hlY2tfdGltZSArIFRfcnIgPiBjdXJyZW50X3RpbWUpCi0gICAgICBvZmZzZXQgPSAoc2Vzcy0+bGFzdF9ydGNwX2NoZWNrX3RpbWUgKyBUX3JyKSAtIGN1cnJlbnRfdGltZTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZXNzLAotICAgICAgICAiY2FuJ3QgYWxsb3cgZWFybHkgUlRDUCB5ZXQ6IGxhc3QgcmVndWxhciAlIiBHU1RfVElNRV9GT1JNQVQgIiwgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIgKyAlIiBHU1RfVElNRV9GT1JNQVQgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCAiICsgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzZXNzLT5sYXN0X3J0Y3Bfc2VuZF90aW1lKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bGFzdF9ydGNwX2NoZWNrX3RpbWUpLCBHU1RfVElNRV9BUkdTIChUX3JyKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoY3VycmVudF90aW1lKSwgR1NUX1RJTUVfQVJHUyAobWF4X2RlbGF5KSk7Ci0gIH0KLQotICBpZiAoIWFsbG93X2Vhcmx5KSB7Ci0gICAgLyogSWdub3JlIHRoZSByZXF1ZXN0IGEgc2NoZWR1bGVkIHBhY2tldCB3aWxsIGJlIGluIHRpbWUgYW55d2F5ICovCi0gICAgaWYgKGN1cnJlbnRfdGltZSArIG1heF9kZWxheSA+IHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VzcywKLSAgICAgICAgICAibmV4dCBzY2hlZHVsZWQgdGltZSBpcyBzb29uICUiIEdTVF9USU1FX0ZPUk1BVCAiICsgJSIgR1NUX1RJTUVfRk9STUFUCi0gICAgICAgICAgIiA+ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoY3VycmVudF90aW1lKSwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChtYXhfZGVsYXkpLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNlc3MtPm5leHRfcnRjcF9jaGVja190aW1lKSk7Ci0gICAgICByZXQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VzcywKLSAgICAgICAgICAiY2FuJ3QgYWxsb3cgZWFybHkgZmVlZGJhY2sgYW5kIG5leHQgc2NoZWR1bGVkIHRpbWUgaXMgdG9vIGxhdGUgJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQgIiArICUiIEdTVF9USU1FX0ZPUk1BVCAiIDwgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKGN1cnJlbnRfdGltZSksIEdTVF9USU1FX0FSR1MgKG1heF9kZWxheSksCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUpKTsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgIH0KLSAgICBnb3RvIGVuZDsKLSAgfQotCi0gIC8qICBSRkMgNDU4NSBzZWN0aW9uIDMuNS4yIHN0ZXAgNGIgKi8KLSAgaWYgKFRfZGl0aGVyX21heCkgewotICAgIC8qIFNjaGVkdWxlIGFuIGVhcmx5IHRyYW5zbWlzc2lvbiBsYXRlciAqLwotICAgIHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lID0gZ19yYW5kb21fZG91YmxlICgpICogVF9kaXRoZXJfbWF4ICsKLSAgICAgICAgY3VycmVudF90aW1lICsgb2Zmc2V0OwotICB9IGVsc2UgewotICAgIC8qIElmIG5vIGRpdGhlcmluZywgc2NoZWR1bGUgaXQgZm9yIE5PVyAqLwotICAgIHNlc3MtPm5leHRfZWFybHlfcnRjcF90aW1lID0gY3VycmVudF90aW1lICsgb2Zmc2V0OwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNlc3MsICJuZXh0IGVhcmx5IFJUQ1AgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQKLSAgICAgICIsIG5leHQgcmVndWxhciBSVENQIHRpbWUgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bmV4dF9lYXJseV9ydGNwX3RpbWUpLAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vzcy0+bmV4dF9ydGNwX2NoZWNrX3RpbWUpKTsKLSAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLQotICAvKiBub3RpZnkgYXBwIG9mIG5lZWQgdG8gc2VuZCBwYWNrZXQgZWFybHkKLSAgICogYW5kIHRoZXJlZm9yZSBvZiB0aW1lb3V0IGNoYW5nZSAqLwotICBpZiAoc2Vzcy0+Y2FsbGJhY2tzLnJlY29uc2lkZXIpCi0gICAgc2Vzcy0+Y2FsbGJhY2tzLnJlY29uc2lkZXIgKHNlc3MsIHNlc3MtPnJlY29uc2lkZXJfdXNlcl9kYXRhKTsKLQotICByZXR1cm4gVFJVRTsKLQotZW5kOgotCi0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1ydHBfc2Vzc2lvbl9zZW5kX3J0Y3AgKFJUUFNlc3Npb24gKiBzZXNzLCBHc3RDbG9ja1RpbWUgbWF4X2RlbGF5KQotewotICBHc3RDbG9ja1RpbWUgbm93OwotCi0gIGlmICghc2Vzcy0+Y2FsbGJhY2tzLnNlbmRfcnRjcCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgbm93ID0gc2Vzcy0+Y2FsbGJhY2tzLnJlcXVlc3RfdGltZSAoc2Vzcywgc2Vzcy0+cmVxdWVzdF90aW1lX3VzZXJfZGF0YSk7Ci0KLSAgcmV0dXJuIHJ0cF9zZXNzaW9uX3JlcXVlc3RfZWFybHlfcnRjcCAoc2Vzcywgbm93LCBtYXhfZGVsYXkpOwotfQotCi1nYm9vbGVhbgotcnRwX3Nlc3Npb25fcmVxdWVzdF9rZXlfdW5pdCAoUlRQU2Vzc2lvbiAqIHNlc3MsIGd1aW50MzIgc3NyYywKLSAgICBnYm9vbGVhbiBmaXIsIGdpbnQgY291bnQpCi17Ci0gIFJUUFNvdXJjZSAqc3JjOwotCi0gIGlmICghcnRwX3Nlc3Npb25fc2VuZF9ydGNwIChzZXNzLCA1ICogR1NUX1NFQ09ORCkpIHsKLSAgICBHU1RfREVCVUcgKCJGSVIvUExJIG5vdCBzZW50Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIHNyYyA9IGZpbmRfc291cmNlIChzZXNzLCBzc3JjKTsKLSAgaWYgKHNyYyA9PSBOVUxMKQotICAgIGdvdG8gbm9fc291cmNlOwotCi0gIGlmIChmaXIpIHsKLSAgICBzcmMtPnNlbmRfcGxpID0gRkFMU0U7Ci0gICAgc3JjLT5zZW5kX2ZpciA9IFRSVUU7Ci0KLSAgICBpZiAoY291bnQgPT0gLTEgfHwgY291bnQgIT0gc3JjLT5sYXN0X2Zpcl9jb3VudCkKLSAgICAgIHNyYy0+Y3VycmVudF9zZW5kX2Zpcl9zZXFudW0rKzsKLSAgICBzcmMtPmxhc3RfZmlyX2NvdW50ID0gY291bnQ7Ci0gIH0gZWxzZSBpZiAoIXNyYy0+c2VuZF9maXIpIHsKLSAgICBzcmMtPnNlbmRfcGxpID0gVFJVRTsKLSAgfQotICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fc291cmNlOgotICB7Ci0gICAgUlRQX1NFU1NJT05fVU5MT0NLIChzZXNzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBydHBfc2Vzc2lvbl9yZXF1ZXN0X25hY2s6Ci0gKiBAc2VzczogYSAjUlRQU2Vzc2lvbgotICogQHNzcmM6IHRoZSBTU1JDCi0gKiBAc2VxbnVtOiB0aGUgbWlzc2luZyBzZXFudW0KLSAqIEBtYXhfZGVsYXk6IG1heCBkZWxheSB0byByZXF1ZXN0IE5BQ0sKLSAqCi0gKiBSZXF1ZXN0IHNjaGVkdWxpbmcgb2YgYSBOQUNLIGZlZWRiYWNrIHBhY2tldCBmb3IgQHNlcW51bSBpbiBAc3NyYy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgTkFDSyBmZWVkYmFjayBjb3VsZCBiZSBzY2hlZHVsZWQKLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zZXNzaW9uX3JlcXVlc3RfbmFjayAoUlRQU2Vzc2lvbiAqIHNlc3MsIGd1aW50MzIgc3NyYywgZ3VpbnQxNiBzZXFudW0sCi0gICAgR3N0Q2xvY2tUaW1lIG1heF9kZWxheSkKLXsKLSAgUlRQU291cmNlICpzb3VyY2U7Ci0KLSAgaWYgKCFydHBfc2Vzc2lvbl9zZW5kX3J0Y3AgKHNlc3MsIG1heF9kZWxheSkpIHsKLSAgICBHU1RfREVCVUcgKCJOQUNLIG5vdCBzZW50Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgUlRQX1NFU1NJT05fTE9DSyAoc2Vzcyk7Ci0gIHNvdXJjZSA9IGZpbmRfc291cmNlIChzZXNzLCBzc3JjKTsKLSAgaWYgKHNvdXJjZSA9PSBOVUxMKQotICAgIGdvdG8gbm9fc291cmNlOwotCi0gIEdTVF9ERUJVRyAoInJlcXVlc3QgTkFDSyBmb3IgJTA4eCwgIyV1Iiwgc3NyYywgc2VxbnVtKTsKLSAgcnRwX3NvdXJjZV9yZWdpc3Rlcl9uYWNrIChzb3VyY2UsIHNlcW51bSk7Ci0gIFJUUF9TRVNTSU9OX1VOTE9DSyAoc2Vzcyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19zb3VyY2U6Ci0gIHsKLSAgICBSVFBfU0VTU0lPTl9VTkxPQ0sgKHNlc3MpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oIGIvZ3N0L3J0cG1hbmFnZXIvcnRwc2Vzc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjU5ODFhLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL3J0cHNlc3Npb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1JUUF9TRVNTSU9OX0hfXwotI2RlZmluZSBfX1JUUF9TRVNTSU9OX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAicnRwc291cmNlLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9SVFBTZXNzaW9uIFJUUFNlc3Npb247Ci10eXBlZGVmIHN0cnVjdCBfUlRQU2Vzc2lvbkNsYXNzIFJUUFNlc3Npb25DbGFzczsKLQotI2RlZmluZSBSVFBfVFlQRV9TRVNTSU9OICAgICAgICAgICAgIChydHBfc2Vzc2lvbl9nZXRfdHlwZSgpKQotI2RlZmluZSBSVFBfU0VTU0lPTihzZXNzKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgoc2VzcyksUlRQX1RZUEVfU0VTU0lPTixSVFBTZXNzaW9uKSkKLSNkZWZpbmUgUlRQX1NFU1NJT05fQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxSVFBfVFlQRV9TRVNTSU9OLFJUUFNlc3Npb25DbGFzcykpCi0jZGVmaW5lIFJUUF9JU19TRVNTSU9OKHNlc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChzZXNzKSxSVFBfVFlQRV9TRVNTSU9OKSkKLSNkZWZpbmUgUlRQX0lTX1NFU1NJT05fQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxSVFBfVFlQRV9TRVNTSU9OKSkKLSNkZWZpbmUgUlRQX1NFU1NJT05fQ0FTVChzZXNzKSAgICAgICAoKFJUUFNlc3Npb24gKikoc2VzcykpCi0KLSNkZWZpbmUgUlRQX1NFU1NJT05fTE9DSyhzZXNzKSAgICAgKGdfbXV0ZXhfbG9jayAoJihzZXNzKS0+bG9jaykpCi0jZGVmaW5lIFJUUF9TRVNTSU9OX1VOTE9DSyhzZXNzKSAgIChnX211dGV4X3VubG9jayAoJihzZXNzKS0+bG9jaykpCi0KLS8qKgotICogUlRQU2Vzc2lvblByb2Nlc3NSVFA6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBzcmM6IHRoZSAjUlRQU291cmNlCi0gKiBAYnVmZmVyOiB0aGUgUlRQIGJ1ZmZlciByZWFkeSBmb3IgcHJvY2Vzc2luZwotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHNwZWNpZmllZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKgotICogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIEBzZXNzIGhhcyBAYnVmZmVyIHJlYWR5IGZvciBmdXJ0aGVyCi0gKiBwcm9jZXNzaW5nLiBQcm9jZXNzaW5nIHRoZSBidWZmZXIgdHlwaWNhbGx5IGluY2x1ZGVzIGRlY29kaW5nIGFuZCBkaXNwbGF5aW5nCi0gKiB0aGUgYnVmZmVyLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4uCi0gKi8KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKlJUUFNlc3Npb25Qcm9jZXNzUlRQKSAoUlRQU2Vzc2lvbiAqc2VzcywgUlRQU291cmNlICpzcmMsIEdzdEJ1ZmZlciAqYnVmZmVyLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25TZW5kUlRQOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAc3JjOiB0aGUgI1JUUFNvdXJjZQotICogQGJ1ZmZlcjogdGhlIFJUUCBidWZmZXIgcmVhZHkgZm9yIHNlbmRpbmcKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBzcGVjaWZpZWQgd2hlbiByZWdpc3RlcmluZwotICoKLSAqIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbiBAc2VzcyBoYXMgQGJ1ZmZlciByZWFkeSBmb3Igc2VuZGluZyB0bwotICogYWxsIGxpc3RlbmluZyBwYXJ0aWNpcGFudHMgaW4gdGhpcyBzZXNzaW9uLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4uCi0gKi8KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKlJUUFNlc3Npb25TZW5kUlRQKSAoUlRQU2Vzc2lvbiAqc2VzcywgUlRQU291cmNlICpzcmMsIGdwb2ludGVyIGRhdGEsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogUlRQU2Vzc2lvblNlbmRSVENQOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAc3JjOiB0aGUgI1JUUFNvdXJjZQotICogQGJ1ZmZlcjogdGhlIFJUQ1AgYnVmZmVyIHJlYWR5IGZvciBzZW5kaW5nCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgc3BlY2lmaWVkIHdoZW4gcmVnaXN0ZXJpbmcKLSAqCi0gKiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gQHNlc3MgaGFzIEBidWZmZXIgcmVhZHkgZm9yIHNlbmRpbmcgdG8KLSAqIGFsbCBsaXN0ZW5pbmcgcGFydGljaXBhbnRzIGluIHRoaXMgc2Vzc2lvbi4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuLgotICovCi10eXBlZGVmIEdzdEZsb3dSZXR1cm4gKCpSVFBTZXNzaW9uU2VuZFJUQ1ApIChSVFBTZXNzaW9uICpzZXNzLCBSVFBTb3VyY2UgKnNyYywgR3N0QnVmZmVyICpidWZmZXIsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLQotLyoqCi0gKiBSVFBTZXNzaW9uU3luY1JUQ1A6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBidWZmZXI6IHRoZSBSVENQIGJ1ZmZlciByZWFkeSBmb3Igc3luY2hyb25pc2F0aW9uCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgc3BlY2lmaWVkIHdoZW4gcmVnaXN0ZXJpbmcKLSAqCi0gKiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gQHNlc3MgaGFzIGFuIFNSIEBidWZmZXIgcmVhZHkgZm9yIGRvaW5nCi0gKiBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbiBzdHJlYW1zLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4uCi0gKi8KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKlJUUFNlc3Npb25TeW5jUlRDUCkgKFJUUFNlc3Npb24gKnNlc3MsIEdzdEJ1ZmZlciAqYnVmZmVyLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25DbG9ja1JhdGU6Ci0gKiBAc2VzczogYW4gI1JUUFNlc3Npb24KLSAqIEBwYXlsb2FkOiB0aGUgcGF5bG9hZAotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHNwZWNpZmllZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKgotICogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIEBzZXNzIG5lZWRzIHRoZSBjbG9jay1yYXRlIG9mIEBwYXlsb2FkLgotICoKLSAqIFJldHVybnM6IHRoZSBjbG9jay1yYXRlIG9mIEBwdC4KLSAqLwotdHlwZWRlZiBnaW50ICgqUlRQU2Vzc2lvbkNsb2NrUmF0ZSkgKFJUUFNlc3Npb24gKnNlc3MsIGd1aW50OCBwYXlsb2FkLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25SZWNvbnNpZGVyOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgc3BlY2lmaWVkIHdoZW4gcmVnaXN0ZXJpbmcKLSAqCi0gKiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gQHNlc3MgbmVlZHMgdG8gY2FuY2VsIHRoZSBjdXJyZW50IHRpbWVvdXQuCi0gKiBUaGUgY3VycmVudGx5IHJ1bm5pbmcgdGltZW91dCBzaG91bGQgYmUgY2FuY2VsZWQgYW5kIGEgbmV3IHJlcG9ydGluZyBpbnRlcnZhbAotICogc2hvdWxkIGJlIHJlcXVlc3RlZCBmcm9tIEBzZXNzLgotICovCi10eXBlZGVmIHZvaWQgKCpSVFBTZXNzaW9uUmVjb25zaWRlcikgKFJUUFNlc3Npb24gKnNlc3MsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogUlRQU2Vzc2lvblJlcXVlc3RLZXlVbml0OgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAYWxsX2hlYWRlcnM6ICVUUlVFIGlmICJhbGwtaGVhZGVycyIgcHJvcGVydHkgc2hvdWxkIGJlIHNldCBvbiB0aGUga2V5IHVuaXQKLSAqICByZXF1ZXN0Ci0gKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgc3BlY2lmaWVkIHdoZW4gcmVnaXN0ZXJpbmcKLSAqCi0gKiBBc2tzIHRoZSBlbmNvZGVyIHRvIHByb2R1Y2UgYSBrZXkgdW5pdCBhcyBzb29uIGFzIHBvc3NpYmx5IHdpdGhpbiB0aGUKLSAqIGJhbmR3aWR0aCBjb25zdHJhaW50cwotICovCi10eXBlZGVmIHZvaWQgKCpSVFBTZXNzaW9uUmVxdWVzdEtleVVuaXQpIChSVFBTZXNzaW9uICpzZXNzLAotICAgIGdib29sZWFuIGFsbF9oZWFkZXJzLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25SZXF1ZXN0VGltZToKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHNwZWNpZmllZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKgotICogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIEBzZXNzIG5lZWRzIHRoZSBjdXJyZW50IHRpbWUuIFRoZSB0aW1lCi0gKiBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYSAjR3N0Q2xvY2tUaW1lCi0gKi8KLXR5cGVkZWYgR3N0Q2xvY2tUaW1lICgqUlRQU2Vzc2lvblJlcXVlc3RUaW1lKSAoUlRQU2Vzc2lvbiAqc2VzcywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25Ob3RpZnlOQUNLOgotICogQHNlc3M6IGFuICNSVFBTZXNzaW9uCi0gKiBAc2VxbnVtOiB0aGUgbWlzc2luZyBzZXFudW0KLSAqIEBibHA6IG90aGVyIG1pc3Npbmcgc2VxbnVtcwotICogQHNzcmM6IFNTUkMgb2YgcmVxdWVzdGVkIHN0cmVhbQotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHNwZWNpZmllZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKgotICogTm90aWZpZXMgb2YgTkFDS2VkIGZyYW1lcy4KLSAqLwotdHlwZWRlZiB2b2lkICgqUlRQU2Vzc2lvbk5vdGlmeU5BQ0spIChSVFBTZXNzaW9uICpzZXNzLAotICAgIGd1aW50MTYgc2VxbnVtLCBndWludDE2IGJscCwgZ3VpbnQzMiBzc3JjLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25SZWNvbmZpZ3VyZToKLSAqIEBzZXNzOiBhbiAjUlRQU2Vzc2lvbgotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHNwZWNpZmllZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKgotICogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIEBzZXNzIHdhbnRzIHRvIHJlY29uZmlndXJlIHRoZQotICogbmVnb3RpYXRlZCBwYXJhbWV0ZXJzLgotICovCi10eXBlZGVmIHZvaWQgKCpSVFBTZXNzaW9uUmVjb25maWd1cmUpIChSVFBTZXNzaW9uICpzZXNzLCBncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNlc3Npb25DYWxsYmFja3M6Ci0gKiBAUlRQU2Vzc2lvblByb2Nlc3NSVFA6IGNhbGxiYWNrIHRvIHByb2Nlc3MgUlRQIHBhY2tldHMKLSAqIEBSVFBTZXNzaW9uU2VuZFJUUDogY2FsbGJhY2sgZm9yIHNlbmRpbmcgUlRQIHBhY2tldHMKLSAqIEBSVFBTZXNzaW9uU2VuZFJUQ1A6IGNhbGxiYWNrIGZvciBzZW5kaW5nIFJUQ1AgcGFja2V0cwotICogQFJUUFNlc3Npb25TeW5jUlRDUDogY2FsbGJhY2sgZm9yIGhhbmRsaW5nIFNSIHBhY2tldHMKLSAqIEBSVFBTZXNzaW9uUmVjb25zaWRlcjogY2FsbGJhY2sgZm9yIHJlY29uc2lkZXJpbmcgdGhlIHRpbWVvdXQKLSAqIEBSVFBTZXNzaW9uUmVxdWVzdEtleVVuaXQ6IGNhbGxiYWNrIGZvciByZXF1ZXN0aW5nIGEgbmV3IGtleSB1bml0Ci0gKiBAUlRQU2Vzc2lvblJlcXVlc3RUaW1lOiBjYWxsYmFjayBmb3IgcmVxdWVzdGluZyB0aGUgY3VycmVudCB0aW1lCi0gKiBAUlRQU2Vzc2lvbk5vdGlmeU5BQ0s6IGNhbGxiYWNrIGZvciBub3RpZnlpbmcgTkFDSwotICogQFJUUFNlc3Npb25SZWNvbmZpZ3VyZTogY2FsbGJhY2sgZm9yIHJlcXVlc3RpbmcgcmVjb25maWd1cmF0aW9uCi0gKgotICogVGhlc2UgY2FsbGJhY2tzIGNhbiBiZSBpbnN0YWxsZWQgb24gdGhlIHNlc3Npb24gbWFuYWdlciB0byBnZXQgbm90aWZpY2F0aW9uCi0gKiB3aGVuIFJUUCBhbmQgUlRDUCBwYWNrZXRzIGFyZSByZWFkeSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBUaGVzZSBjYWxsYmFja3MKLSAqIGFyZSBub3QgaW1wbGVtZW50ZWQgd2l0aCBzaWduYWxzIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIFJUUFNlc3Npb25Qcm9jZXNzUlRQICBwcm9jZXNzX3J0cDsKLSAgUlRQU2Vzc2lvblNlbmRSVFAgICAgIHNlbmRfcnRwOwotICBSVFBTZXNzaW9uU3luY1JUQ1AgICAgc3luY19ydGNwOwotICBSVFBTZXNzaW9uU2VuZFJUQ1AgICAgc2VuZF9ydGNwOwotICBSVFBTZXNzaW9uQ2xvY2tSYXRlICAgY2xvY2tfcmF0ZTsKLSAgUlRQU2Vzc2lvblJlY29uc2lkZXIgIHJlY29uc2lkZXI7Ci0gIFJUUFNlc3Npb25SZXF1ZXN0S2V5VW5pdCByZXF1ZXN0X2tleV91bml0OwotICBSVFBTZXNzaW9uUmVxdWVzdFRpbWUgcmVxdWVzdF90aW1lOwotICBSVFBTZXNzaW9uTm90aWZ5TkFDSyAgbm90aWZ5X25hY2s7Ci0gIFJUUFNlc3Npb25SZWNvbmZpZ3VyZSByZWNvbmZpZ3VyZTsKLX0gUlRQU2Vzc2lvbkNhbGxiYWNrczsKLQotLyoqCi0gKiBSVFBTZXNzaW9uOgotICogQGxvY2s6IGxvY2sgdG8gcHJvdGVjdCB0aGUgc2Vzc2lvbgotICogQHNvdXJjZTogdGhlIHNvdXJjZSBvZiB0aGlzIHNlc3Npb24KLSAqIEBzc3JjczogSGFzaHRhYmxlIG9mIHNvdXJjZXMgaW5kZXhlZCBieSBTU1JDCi0gKiBAbnVtX3NvdXJjZXM6IHRoZSBudW1iZXIgb2Ygc291cmNlcwotICogQGFjdGl2ZWNvdW50OiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBzb3VyY2VzCi0gKiBAY2FsbGJhY2tzOiBjYWxsYmFja3MKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBwYXNzZWQgaW4gY2FsbGJhY2tzCi0gKiBAc3RhdHM6IHNlc3Npb24gc3RhdGlzdGljcwotICogQGNvbmZsaWN0aW5nX2FkZHJlc3NlczogR0xpc3Qgb2YgY29uZmxpY3RpbmcgYWRkcmVzc2VzCi0gKgotICogVGhlIFJUUCBzZXNzaW9uIG1hbmFnZXIgb2JqZWN0Ci0gKi8KLXN0cnVjdCBfUlRQU2Vzc2lvbiB7Ci0gIEdPYmplY3QgICAgICAgb2JqZWN0OwotCi0gIEdNdXRleCAgICAgICAgbG9jazsKLQotICBndWludCAgICAgICAgIGhlYWRlcl9sZW47Ci0gIGd1aW50ICAgICAgICAgbXR1OwotCi0gIEdzdFN0cnVjdHVyZSAqc2RlczsKLQotICBndWludCAgICAgICAgIHByb2JhdGlvbjsKLSAgZ3VpbnQzMiAgICAgICBtYXhfZHJvcG91dF90aW1lOwotICBndWludDMyICAgICAgIG1heF9taXNvcmRlcl90aW1lOwotCi0gIEdzdFJUUFByb2ZpbGUgcnRwX3Byb2ZpbGU7Ci0KLSAgZ2Jvb2xlYW4gICAgICByZWR1Y2VkX3NpemVfcnRjcDsKLQotICAvKiBiYW5kd2lkdGhzICovCi0gIGdib29sZWFuICAgICByZWNhbGNfYmFuZHdpZHRoOwotICBndWludCAgICAgICAgYmFuZHdpZHRoOwotICBnZG91YmxlICAgICAgcnRjcF9iYW5kd2lkdGg7Ci0gIGd1aW50ICAgICAgICBydGNwX3JyX2JhbmR3aWR0aDsKLSAgZ3VpbnQgICAgICAgIHJ0Y3BfcnNfYmFuZHdpZHRoOwotCi0gIGd1aW50MzIgICAgICAgc3VnZ2VzdGVkX3NzcmM7Ci0gIGdib29sZWFuICAgICAgaW50ZXJuYWxfc3NyY19zZXQ7Ci0gIGdib29sZWFuICAgICAgaW50ZXJuYWxfc3NyY19mcm9tX2NhcHNfb3JfcHJvcGVydHk7Ci0KLSAgLyogZm9yIHNlbmRlci9yZWNlaXZlciBjb3VudGluZyAqLwotICBndWludDMyICAgICAgIGtleTsKLSAgZ3VpbnQzMiAgICAgICBtYXNrX2lkeDsKLSAgZ3VpbnQzMiAgICAgICBtYXNrOwotICBHSGFzaFRhYmxlICAgKnNzcmNzWzMyXTsKLSAgZ3VpbnQgICAgICAgICB0b3RhbF9zb3VyY2VzOwotCi0gIGd1aW50MTYgICAgICAgZ2VuZXJhdGlvbjsKLSAgR3N0Q2xvY2tUaW1lICBuZXh0X3J0Y3BfY2hlY2tfdGltZTsgLyogdG4gKi8KLSAgR3N0Q2xvY2tUaW1lICBsYXN0X3J0Y3BfY2hlY2tfdGltZTsgLyogdHAgKi8KLSAgR3N0Q2xvY2tUaW1lICBsYXN0X3J0Y3Bfc2VuZF90aW1lOyAgLyogdF9ycl9sYXN0ICovCi0gIEdzdENsb2NrVGltZSAgbGFzdF9ydGNwX2ludGVydmFsOyAgIC8qIFRfcnIgKi8KLSAgR3N0Q2xvY2tUaW1lICBzdGFydF90aW1lOwotICBnYm9vbGVhbiAgICAgIGZpcnN0X3J0Y3A7Ci0gIGdib29sZWFuICAgICAgYWxsb3dfZWFybHk7Ci0KLSAgR3N0Q2xvY2tUaW1lICBuZXh0X2Vhcmx5X3J0Y3BfdGltZTsKLQotICBnYm9vbGVhbiAgICAgIHNjaGVkdWxlZF9ieWU7Ci0KLSAgUlRQU2Vzc2lvbkNhbGxiYWNrcyAgIGNhbGxiYWNrczsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIHByb2Nlc3NfcnRwX3VzZXJfZGF0YTsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIHNlbmRfcnRwX3VzZXJfZGF0YTsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIHNlbmRfcnRjcF91c2VyX2RhdGE7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICBzeW5jX3J0Y3BfdXNlcl9kYXRhOwotICBncG9pbnRlciAgICAgICAgICAgICAgY2xvY2tfcmF0ZV91c2VyX2RhdGE7Ci0gIGdwb2ludGVyICAgICAgICAgICAgICByZWNvbnNpZGVyX3VzZXJfZGF0YTsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIHJlcXVlc3Rfa2V5X3VuaXRfdXNlcl9kYXRhOwotICBncG9pbnRlciAgICAgICAgICAgICAgcmVxdWVzdF90aW1lX3VzZXJfZGF0YTsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIG5vdGlmeV9uYWNrX3VzZXJfZGF0YTsKLSAgZ3BvaW50ZXIgICAgICAgICAgICAgIHJlY29uZmlndXJlX3VzZXJfZGF0YTsKLQotICBSVFBTZXNzaW9uU3RhdHMgc3RhdHM7Ci0gIFJUUFNlc3Npb25TdGF0cyBieWVfc3RhdHM7Ci0KLSAgZ2Jvb2xlYW4gICAgICBmYXZvcl9uZXc7Ci0gIEdzdENsb2NrVGltZSAgcnRjcF9mZWVkYmFja19yZXRlbnRpb25fd2luZG93OwotICBndWludCAgICAgICAgIHJ0Y3BfaW1tZWRpYXRlX2ZlZWRiYWNrX3RocmVzaG9sZDsKLQotICBHc3RDbG9ja1RpbWUgbGFzdF9rZXlmcmFtZV9yZXF1ZXN0OwotICBnYm9vbGVhbiAgICAgbGFzdF9rZXlmcmFtZV9hbGxfaGVhZGVyczsKLQotICBnYm9vbGVhbiAgICAgIGlzX2RvaW5nX3B0cDsKLQotICBHTGlzdCAgICAgICAgICpjb25mbGljdGluZ19hZGRyZXNzZXM7Ci19OwotCi0vKioKLSAqIFJUUFNlc3Npb25DbGFzczoKLSAqIEBvbl9uZXdfc3NyYzogZW1pdGVkIHdoZW4gYSBuZXcgc291cmNlIGlzIGZvdW5kCi0gKiBAb25fYnllX3NzcmM6IGVtaXRlZCB3aGVuIGEgc291cmNlIGlzIGdvbmUKLSAqCi0gKiBUaGUgc2Vzc2lvbiBjbGFzcy4KLSAqLwotc3RydWN0IF9SVFBTZXNzaW9uQ2xhc3MgewotICBHT2JqZWN0Q2xhc3MgICBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogYWN0aW9uIHNpZ25hbHMgKi8KLSAgUlRQU291cmNlKiAoKmdldF9zb3VyY2VfYnlfc3NyYykgKFJUUFNlc3Npb24gKnNlc3MsIGd1aW50MzIgc3NyYyk7Ci0KLSAgLyogc2lnbmFscyAqLwotICB2b2lkICgqb25fbmV3X3NzcmMpICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBSVFBTb3VyY2UgKnNvdXJjZSk7Ci0gIHZvaWQgKCpvbl9zc3JjX2NvbGxpc2lvbikgKFJUUFNlc3Npb24gKnNlc3MsIFJUUFNvdXJjZSAqc291cmNlKTsKLSAgdm9pZCAoKm9uX3NzcmNfdmFsaWRhdGVkKSAoUlRQU2Vzc2lvbiAqc2VzcywgUlRQU291cmNlICpzb3VyY2UpOwotICB2b2lkICgqb25fc3NyY19hY3RpdmUpICAgIChSVFBTZXNzaW9uICpzZXNzLCBSVFBTb3VyY2UgKnNvdXJjZSk7Ci0gIHZvaWQgKCpvbl9zc3JjX3NkZXMpICAgICAgKFJUUFNlc3Npb24gKnNlc3MsIFJUUFNvdXJjZSAqc291cmNlKTsKLSAgdm9pZCAoKm9uX2J5ZV9zc3JjKSAgICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgUlRQU291cmNlICpzb3VyY2UpOwotICB2b2lkICgqb25fYnllX3RpbWVvdXQpICAgIChSVFBTZXNzaW9uICpzZXNzLCBSVFBTb3VyY2UgKnNvdXJjZSk7Ci0gIHZvaWQgKCpvbl90aW1lb3V0KSAgICAgICAgKFJUUFNlc3Npb24gKnNlc3MsIFJUUFNvdXJjZSAqc291cmNlKTsKLSAgdm9pZCAoKm9uX3NlbmRlcl90aW1lb3V0KSAoUlRQU2Vzc2lvbiAqc2VzcywgUlRQU291cmNlICpzb3VyY2UpOwotICBnYm9vbGVhbiAoKm9uX3NlbmRpbmdfcnRjcCkgKFJUUFNlc3Npb24gKnNlc3MsIEdzdEJ1ZmZlciAqYnVmZmVyLAotICAgICAgZ2Jvb2xlYW4gZWFybHkpOwotICB2b2lkICgqb25fYXBwX3J0Y3ApICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBndWludCBzdWJ0eXBlLCBndWludCBzc3JjLAotICAgICAgY29uc3QgZ2NoYXIgKm5hbWUsIEdzdEJ1ZmZlciAqZGF0YSk7Ci0gIHZvaWQgKCpvbl9mZWVkYmFja19ydGNwKSAgKFJUUFNlc3Npb24gKnNlc3MsIGd1aW50IHR5cGUsIGd1aW50IGZidHlwZSwKLSAgICAgIGd1aW50IHNlbmRlcl9zc3JjLCBndWludCBtZWRpYV9zc3JjLCBHc3RCdWZmZXIgKmZjaSk7Ci0gIGdib29sZWFuICgqc2VuZF9ydGNwKSAgICAgKFJUUFNlc3Npb24gKnNlc3MsIEdzdENsb2NrVGltZSBtYXhfZGVsYXkpOwotICB2b2lkICgqb25fcmVjZWl2aW5nX3J0Y3ApIChSVFBTZXNzaW9uICpzZXNzLCBHc3RCdWZmZXIgKmJ1ZmZlcik7Ci0gIHZvaWQgKCpvbl9uZXdfc2VuZGVyX3NzcmMpICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgUlRQU291cmNlICpzb3VyY2UpOwotICB2b2lkICgqb25fc2VuZGVyX3NzcmNfYWN0aXZlKSAgKFJUUFNlc3Npb24gKnNlc3MsIFJUUFNvdXJjZSAqc291cmNlKTsKLX07Ci0KLUdUeXBlIHJ0cF9zZXNzaW9uX2dldF90eXBlICh2b2lkKTsKLQotLyogY3JlYXRlIGFuZCBjb25maWd1cmUgKi8KLVJUUFNlc3Npb24qICAgICBydHBfc2Vzc2lvbl9uZXcgICAgICAgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9zZXRfY2FsbGJhY2tzICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVFBTZXNzaW9uQ2FsbGJhY2tzICpjYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9zZXRfcHJvY2Vzc19ydHBfY2FsbGJhY2sgICAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRQU2Vzc2lvblByb2Nlc3NSVFAgY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9zZXRfc2VuZF9ydHBfY2FsbGJhY2sgIChSVFBTZXNzaW9uICogc2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVFBTZXNzaW9uU2VuZFJUUCBjYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwotdm9pZCAgICAgICAgICAgIHJ0cF9zZXNzaW9uX3NldF9zZW5kX3J0Y3BfY2FsbGJhY2sgICAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRQU2Vzc2lvblNlbmRSVENQIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci12b2lkICAgICAgICAgICAgcnRwX3Nlc3Npb25fc2V0X3N5bmNfcnRjcF9jYWxsYmFjayAgIChSVFBTZXNzaW9uICogc2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVFBTZXNzaW9uU3luY1JUQ1AgY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9zZXRfY2xvY2tfcmF0ZV9jYWxsYmFjayAgIChSVFBTZXNzaW9uICogc2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVFBTZXNzaW9uQ2xvY2tSYXRlIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci12b2lkICAgICAgICAgICAgcnRwX3Nlc3Npb25fc2V0X3JlY29uc2lkZXJfY2FsbGJhY2sgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUUFNlc3Npb25SZWNvbnNpZGVyIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci12b2lkICAgICAgICAgICAgcnRwX3Nlc3Npb25fc2V0X3JlcXVlc3RfdGltZV9jYWxsYmFjayAoUlRQU2Vzc2lvbiAqIHNlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRQU2Vzc2lvblJlcXVlc3RUaW1lIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9zZXRfYmFuZHdpZHRoICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBnZG91YmxlIGJhbmR3aWR0aCk7Ci1nZG91YmxlICAgICAgICAgcnRwX3Nlc3Npb25fZ2V0X2JhbmR3aWR0aCAgICAgICAgICAoUlRQU2Vzc2lvbiAqc2Vzcyk7Ci12b2lkICAgICAgICAgICAgcnRwX3Nlc3Npb25fc2V0X3J0Y3BfZnJhY3Rpb24gICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgZ2RvdWJsZSBmcmFjdGlvbik7Ci1nZG91YmxlICAgICAgICAgcnRwX3Nlc3Npb25fZ2V0X3J0Y3BfZnJhY3Rpb24gICAgICAoUlRQU2Vzc2lvbiAqc2Vzcyk7Ci0KLUdzdFN0cnVjdHVyZSAqICBydHBfc2Vzc2lvbl9nZXRfc2Rlc19zdHJ1Y3QgICAgICAgIChSVFBTZXNzaW9uICpzZXNzKTsKLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9zZXRfc2Rlc19zdHJ1Y3QgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBjb25zdCBHc3RTdHJ1Y3R1cmUgKnNkZXMpOwotCi0vKiBoYW5kbGluZyBzb3VyY2VzICovCi1ndWludDMyICAgICAgICAgcnRwX3Nlc3Npb25fc3VnZ2VzdF9zc3JjICAgICAgICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgZ2Jvb2xlYW4gKmlzX3JhbmRvbSk7Ci0KLWdib29sZWFuICAgICAgICBydHBfc2Vzc2lvbl9hZGRfc291cmNlICAgICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBSVFBTb3VyY2UgKnNyYyk7Ci1ndWludCAgICAgICAgICAgcnRwX3Nlc3Npb25fZ2V0X251bV9zb3VyY2VzICAgICAgICAoUlRQU2Vzc2lvbiAqc2Vzcyk7Ci1ndWludCAgICAgICAgICAgcnRwX3Nlc3Npb25fZ2V0X251bV9hY3RpdmVfc291cmNlcyAoUlRQU2Vzc2lvbiAqc2Vzcyk7Ci1SVFBTb3VyY2UqICAgICAgcnRwX3Nlc3Npb25fZ2V0X3NvdXJjZV9ieV9zc3JjICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgZ3VpbnQzMiBzc3JjKTsKLVJUUFNvdXJjZSogICAgICBydHBfc2Vzc2lvbl9jcmVhdGVfc291cmNlICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzKTsKLQotLyogcHJvY2Vzc2luZyBwYWNrZXRzIGZyb20gcmVjZWl2ZXJzICovCi1Hc3RGbG93UmV0dXJuICAgcnRwX3Nlc3Npb25fcHJvY2Vzc19ydHAgICAgICAgICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgR3N0QnVmZmVyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSwKLQkJCQkJCSAgICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgbnRwbnN0aW1lKTsKLUdzdEZsb3dSZXR1cm4gICBydHBfc2Vzc2lvbl9wcm9jZXNzX3J0Y3AgICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBHc3RCdWZmZXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgbnRwbnN0aW1lKTsKLQotLyogcHJvY2Vzc2luZyBwYWNrZXRzIGZvciBzZW5kaW5nICovCi12b2lkICAgICAgICAgICAgcnRwX3Nlc3Npb25fdXBkYXRlX3NlbmRfY2FwcyAgICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgR3N0Q2FwcyAqY2Fwcyk7Ci1Hc3RGbG93UmV0dXJuICAgcnRwX3Nlc3Npb25fc2VuZF9ydHAgICAgICAgICAgICAgICAoUlRQU2Vzc2lvbiAqc2VzcywgZ3BvaW50ZXIgZGF0YSwgZ2Jvb2xlYW4gaXNfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lLCBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lKTsKLQotLyogc2NoZWR1bGluZyBieWUgKi8KLXZvaWQgICAgICAgICAgICBydHBfc2Vzc2lvbl9tYXJrX2FsbF9ieWUgICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBjb25zdCBnY2hhciAqcmVhc29uKTsKLUdzdEZsb3dSZXR1cm4gICBydHBfc2Vzc2lvbl9zY2hlZHVsZV9ieWUgICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lKTsKLQotLyogZ2V0IGludGVydmFsIGZvciBuZXh0IFJUQ1AgaW50ZXJ2YWwgKi8KLUdzdENsb2NrVGltZSAgICBydHBfc2Vzc2lvbl9uZXh0X3RpbWVvdXQgICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lKTsKLUdzdEZsb3dSZXR1cm4gICBydHBfc2Vzc2lvbl9vbl90aW1lb3V0ICAgICAgICAgICAgIChSVFBTZXNzaW9uICpzZXNzLCBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgbnRwbnN0aW1lLCBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lKTsKLQotLyogcmVxdWVzdCB0aGUgdHJhbnNtaXR0aW9uIG9mIGFuIGVhcmx5IFJUQ1AgcGFja2V0ICovCi1nYm9vbGVhbiAgICAgICAgcnRwX3Nlc3Npb25fcmVxdWVzdF9lYXJseV9ydGNwICAgICAoUlRQU2Vzc2lvbiAqIHNlc3MsIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIG1heF9kZWxheSk7Ci0KLS8qIE5vdGlmeSBzZXNzaW9uIG9mIGEgcmVxdWVzdCBmb3IgYSBuZXcga2V5IHVuaXQgKi8KLWdib29sZWFuICAgICAgICBydHBfc2Vzc2lvbl9yZXF1ZXN0X2tleV91bml0ICAgICAgIChSVFBTZXNzaW9uICogc2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHNzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZmlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgY291bnQpOwotZ2Jvb2xlYW4gICAgICAgIHJ0cF9zZXNzaW9uX3JlcXVlc3RfbmFjayAgICAgICAgICAgKFJUUFNlc3Npb24gKiBzZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgc3NyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDE2IHNlcW51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgbWF4X2RlbGF5KTsKLQotCi0jZW5kaWYgLyogX19SVFBfU0VTU0lPTl9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5jIGIvZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMTc3ZDQuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvcnRwc291cmNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTI2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgIDIwMTUgS3VyZW50byAoaHR0cDovL2t1cmVudG8ub3JnLykKLSAqICAgQGF1dGhvcjogTWlndWVsIFBhcsOtcyA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydGNwYnVmZmVyLmg+Ci0KLSNpbmNsdWRlICJydHBzb3VyY2UuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwX3NvdXJjZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBydHBfc291cmNlX2RlYnVnCi0KLSNkZWZpbmUgUlRQX01BWF9QUk9CQVRJT05fTEVOICAzMgotCi0vKiBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfU1NSQyAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX0lTX0NTUkMgICAgICAgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfSVNfVkFMSURBVEVEICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9JU19TRU5ERVIgICAgICAgICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX1NERVMgICAgICAgICAgICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9QUk9CQVRJT04gICAgICAgICAgICBSVFBfREVGQVVMVF9QUk9CQVRJT04KLSNkZWZpbmUgREVGQVVMVF9NQVhfRFJPUE9VVF9USU1FICAgICA2MDAwMAotI2RlZmluZSBERUZBVUxUX01BWF9NSVNPUkRFUl9USU1FICAgIDIwMDAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfU1NSQywKLSAgUFJPUF9JU19DU1JDLAotICBQUk9QX0lTX1ZBTElEQVRFRCwKLSAgUFJPUF9JU19TRU5ERVIsCi0gIFBST1BfU0RFUywKLSAgUFJPUF9TVEFUUywKLSAgUFJPUF9QUk9CQVRJT04sCi0gIFBST1BfTUFYX0RST1BPVVRfVElNRSwKLSAgUFJPUF9NQVhfTUlTT1JERVJfVElNRQotfTsKLQotLyogR09iamVjdCB2bWV0aG9kcyAqLwotc3RhdGljIHZvaWQgcnRwX3NvdXJjZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBydHBfc291cmNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIHJ0cF9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0vKiBzdGF0aWMgZ3VpbnQgcnRwX3NvdXJjZV9zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLwotCi1HX0RFRklORV9UWVBFIChSVFBTb3VyY2UsIHJ0cF9zb3VyY2UsIEdfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZAotcnRwX3NvdXJjZV9jbGFzc19pbml0IChSVFBTb3VyY2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBydHBfc291cmNlX2ZpbmFsaXplOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHJ0cF9zb3VyY2Vfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBydHBfc291cmNlX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NTUkMsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInNzcmMiLCAiU1NSQyIsCi0gICAgICAgICAgIlRoZSBTU1JDIG9mIHRoaXMgc291cmNlIiwgMCwgR19NQVhVSU5ULCBERUZBVUxUX1NTUkMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSVNfQ1NSQywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaXMtY3NyYyIsICJJcyBDU1JDIiwKLSAgICAgICAgICAiSWYgdGhpcyBTU1JDIGlzIGFjdGluZyBhcyBhIGNvbnRyaWJ1dGluZyBzb3VyY2UiLAotICAgICAgICAgIERFRkFVTFRfSVNfQ1NSQywgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lTX1ZBTElEQVRFRCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaXMtdmFsaWRhdGVkIiwgIklzIFZhbGlkYXRlZCIsCi0gICAgICAgICAgIklmIHRoaXMgU1NSQyBpcyB2YWxpZGF0ZWQiLCBERUZBVUxUX0lTX1ZBTElEQVRFRCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfSVNfU0VOREVSLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJpcy1zZW5kZXIiLCAiSXMgU2VuZGVyIiwKLSAgICAgICAgICAiSWYgdGhpcyBTU1JDIGlzIGEgc2VuZGVyIiwgREVGQVVMVF9JU19TRU5ERVIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogUlRQU291cmNlOjpzZGVzCi0gICAqCi0gICAqIFRoZSBjdXJyZW50IFNERVMgaXRlbXMgb2YgdGhlIHNvdXJjZS4gUmV0dXJucyBhIHN0cnVjdHVyZSB3aXRoIG5hbWUKLSAgICogYXBwbGljYXRpb24veC1ydHAtc291cmNlLXNkZXMgYW5kIG1heSBjb250YWluIHRoZSBmb2xsb3dpbmcgZmllbGRzOgotICAgKgotICAgKiAgJ2NuYW1lJyAgICAgICBHX1RZUEVfU1RSSU5HICA6IFRoZSBjYW5vbmljYWwgbmFtZSBpbiB0aGUgZm9ybSB1c2VyQGhvc3QKLSAgICogICduYW1lJyAgICAgICAgR19UWVBFX1NUUklORyAgOiBUaGUgdXNlciBuYW1lCi0gICAqICAnZW1haWwnICAgICAgIEdfVFlQRV9TVFJJTkcgIDogVGhlIHVzZXIncyBlbGVjdHJvbmljIG1haWwgYWRkcmVzcwotICAgKiAgJ3Bob25lJyAgICAgICBHX1RZUEVfU1RSSU5HICA6IFRoZSB1c2VyJ3MgcGhvbmUgbnVtYmVyCi0gICAqICAnbG9jYXRpb24nICAgIEdfVFlQRV9TVFJJTkcgIDogVGhlIGdlb2dyYXBoaWMgdXNlciBsb2NhdGlvbgotICAgKiAgJ3Rvb2wnICAgICAgICBHX1RZUEVfU1RSSU5HICA6IFRoZSBuYW1lIG9mIGFwcGxpY2F0aW9uIG9yIHRvb2wKLSAgICogICdub3RlJyAgICAgICAgR19UWVBFX1NUUklORyAgOiBBIG5vdGljZSBhYm91dCB0aGUgc291cmNlCi0gICAqCi0gICAqICBPdGhlciBmaWVsZHMgbWF5IGJlIHByZXNlbnQgYW5kIHRoZXNlIHJlcHJlc2VudCBwcml2YXRlIGl0ZW1zIGluCi0gICAqICB0aGUgU0RFUyB3aGVyZSB0aGUgZmllbGQgbmFtZSBpcyB0aGUgcHJlZml4LgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TREVTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgic2RlcyIsICJTREVTIiwKLSAgICAgICAgICAiVGhlIFNERVMgaW5mb3JtYXRpb24gZm9yIHRoaXMgc291cmNlIiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIFJUUFNvdXJjZTo6c3RhdHMKLSAgICoKLSAgICogVGhpcyBwcm9wZXJ0eSByZXR1cm5zIGEgR3N0U3RydWN0dXJlIG5hbWVkIGFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zdGF0cyB3aXRoCi0gICAqIGZpZWxkcyB1c2VmdWwgZm9yIHN0YXRpc3RpY3MgYW5kIGRpYWdub3N0aWNzLgotICAgKgotICAgKiBUYWtlIG5vdGUgb2YgZWFjaCByZXNwZWN0aXZlIGZpZWxkJ3MgdW5pdHM6Ci0gICAqCi0gICAqIC0gTlRQIHRpbWVzIGFyZSBpbiB0aGUgYXBwcm9wcmlhdGUgMzItYml0IG9yIDY0LWJpdCBmaXhlZC1wb2ludCBmb3JtYXQKLSAgICogICBzdGFydGluZyBmcm9tIEphbnVhcnkgMSwgMTk3MCAoZXhjZXB0IGZvciB0aW1lc3BhbnMpLgotICAgKiAtIFJUUCB0aW1lcyBhcmUgaW4gY2xvY2sgcmF0ZSB1bml0cyAoaS5lLiBjbG9jayByYXRlID0gMSBzZWNvbmQpCi0gICAqICAgc3RhcnRpbmcgYXQgYSByYW5kb20gb2Zmc2V0LgotICAgKiAtIEZvciBmaWVsZHMgaW5kaWNhdGluZyBwYWNrZXQgbG9zcywgbm90ZSB0aGF0IGxhdGUgcGFja2V0cyBhcmUgbm90IGNvbnNpZGVyZWQgbG9zdCwKLSAgICogICBhbmQgZHVwbGljYXRlcyBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudC4gSGVuY2UsIHRoZSBsb3NzIG1heSBiZSBuZWdhdGl2ZQotICAgKiAgIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVzLgotICAgKgotICAgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgYWx3YXlzIHByZXNlbnQuCi0gICAqCi0gICAqICAic3NyYyIgICAgICAgICBHX1RZUEVfVUlOVCAgICAgdGhlIFNTUkMgb2YgdGhpcyBzb3VyY2UKLSAgICogICJpbnRlcm5hbCIgICAgIEdfVFlQRV9CT09MRUFOICB0aGlzIHNvdXJjZSBpcyBhIHNvdXJjZSBvZiB0aGUgc2Vzc2lvbgotICAgKiAgInZhbGlkYXRlZCIgICAgR19UWVBFX0JPT0xFQU4gIHRoZSBzb3VyY2UgaXMgdmFsaWRhdGVkCi0gICAqICAicmVjZWl2ZWQtYnllIiBHX1RZUEVfQk9PTEVBTiAgd2UgcmVjZWl2ZWQgYSBCWUUgZnJvbSB0aGlzIHNvdXJjZQotICAgKiAgImlzLWNzcmMiICAgICAgR19UWVBFX0JPT0xFQU4gIHRoaXMgc291cmNlIHdhcyBmb3VuZCBhcyBDU1JDCi0gICAqICAiaXMtc2VuZGVyIiAgICBHX1RZUEVfQk9PTEVBTiAgdGhpcyBzb3VyY2UgaXMgYSBzZW5kZXIKLSAgICogICJzZXFudW0tYmFzZSIgIEdfVFlQRV9JTlQgICAgICBmaXJzdCBzZXFudW0gaWYga25vd24KLSAgICogICJjbG9jay1yYXRlIiAgIEdfVFlQRV9JTlQgICAgICB0aGUgY2xvY2sgcmF0ZSBvZiB0aGUgbWVkaWEKLSAgICoKLSAgICogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgcHJlc2VudCB3aGVuIGtub3duLgotICAgKgotICAgKiAgInJ0cC1mcm9tIiAgICAgR19UWVBFX1NUUklORyAgIHdoZXJlIHdlIHJlY2VpdmVkIHRoZSBsYXN0IFJUUCBwYWNrZXQgZnJvbQotICAgKiAgInJ0Y3AtZnJvbSIgICAgR19UWVBFX1NUUklORyAgIHdoZXJlIHdlIHJlY2VpdmVkIHRoZSBsYXN0IFJUQ1AgcGFja2V0IGZyb20KLSAgICoKLSAgICogVGhlIGZvbGxvd2luZyBmaWVsZHMgbWFrZSBzZW5zZSBmb3IgaW50ZXJuYWwgc291cmNlcyBhbmQgd2lsbCBvbmx5IGluY3JlYXNlCi0gICAqIHdoZW4gImlzLXNlbmRlciIgaXMgVFJVRS4KLSAgICoKLSAgICogICJvY3RldHMtc2VudCIgIEdfVFlQRV9VSU5UNjQgICBudW1iZXIgb2YgYnl0ZXMgd2Ugc2VudAotICAgKiAgInBhY2tldHMtc2VudCIgR19UWVBFX1VJTlQ2NCAgIG51bWJlciBvZiBwYWNrZXRzIHdlIHNlbnQKLSAgICoKLSAgICogVGhlIGZvbGxvd2luZyBmaWVsZHMgbWFrZSBzZW5zZSBmb3Igbm9uLWludGVybmFsIHNvdXJjZXMgYW5kIHdpbGwgb25seQotICAgKiBpbmNyZWFzZSB3aGVuICJpcy1zZW5kZXIiIGlzIFRSVUUuCi0gICAqCi0gICAqICAib2N0ZXRzLXJlY2VpdmVkIiAgR19UWVBFX1VJTlQ2NCAgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkCi0gICAqICAicGFja2V0cy1yZWNlaXZlZCIgR19UWVBFX1VJTlQ2NCAgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQKLSAgICoKLSAgICogRm9sbG93aW5nIGZpZWxkcyBhcmUgdXBkYXRlZCB3aGVuICJpcy1zZW5kZXIiIGlzIFRSVUUuCi0gICAqCi0gICAqICAiYml0cmF0ZSIgICAgICBHX1RZUEVfVUlOVDY0ICAgYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQKLSAgICogICJqaXR0ZXIiICAgICAgIEdfVFlQRV9VSU5UICAgICBlc3RpbWF0ZWQgaml0dGVyIChpbiBjbG9jayByYXRlIHVuaXRzKQotICAgKiAgInBhY2tldHMtbG9zdCIgR19UWVBFX0lOVCAgICAgIGVzdGltYXRlZCBhbW91bnQgb2YgcGFja2V0cyBsb3N0Ci0gICAqCi0gICAqIFRoZSBsYXN0IFNSIHJlcG9ydCB0aGlzIHNvdXJjZSBzZW50LiBUaGlzIG9ubHkgdXBkYXRlcyB3aGVuICJpcy1zZW5kZXIiIGlzCi0gICAqIFRSVUUuCi0gICAqCi0gICAqICAiaGF2ZS1zciIgICAgICAgICBHX1RZUEVfQk9PTEVBTiAgdGhlIHNvdXJjZSBoYXMgc2VudCBTUgotICAgKiAgInNyLW50cHRpbWUiICAgICAgR19UWVBFX1VJTlQ2NCAgIE5UUCB0aW1lIG9mIFNSIChpbiBOVFAgVGltZXN0YW1wIEZvcm1hdCwgMzIuMzIgZml4ZWQgcG9pbnQpCi0gICAqICAic3ItcnRwdGltZSIgICAgICBHX1RZUEVfVUlOVCAgICAgUlRQIHRpbWUgb2YgU1IgKGluIGNsb2NrIHJhdGUgdW5pdHMpCi0gICAqICAic3Itb2N0ZXQtY291bnQiICBHX1RZUEVfVUlOVCAgICAgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgU1IKLSAgICogICJzci1wYWNrZXQtY291bnQiIEdfVFlQRV9VSU5UICAgICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gdGhlIFNSCi0gICAqCi0gICAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBvbmx5IHByZXNlbnQgZm9yIG5vbi1pbnRlcm5hbCBzb3VyY2VzIGFuZAotICAgKiByZXByZXNlbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGxhc3QgUkIgcGFja2V0IHRoYXQgd2FzIHNlbnQgdG8gdGhpcyBzb3VyY2UuCi0gICAqIFRoZXNlIHZhbHVlcyBhcmUgb25seSB1cGRhdGVkIHdoZW4gdGhlIHNvdXJjZSBpcyBzZW5kaW5nLgotICAgKgotICAgKiAgInNlbnQtcmIiICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4gIHdlIGhhdmUgc2VudCBhbiBSQgotICAgKiAgInNlbnQtcmItZnJhY3Rpb25sb3N0IiAgR19UWVBFX1VJTlQgICAgIGNhbGN1bGF0ZWQgbG9zdCA4LWJpdCBmcmFjdGlvbgotICAgKiAgInNlbnQtcmItcGFja2V0c2xvc3QiICAgR19UWVBFX0lOVCAgICAgIGxvc3QgcGFja2V0cwotICAgKiAgInNlbnQtcmItZXh0aGlnaGVzdHNlcSIgR19UWVBFX1VJTlQgICAgIGxhc3Qgc2VlbiBzZXFudW0KLSAgICogICJzZW50LXJiLWppdHRlciIgICAgICAgIEdfVFlQRV9VSU5UICAgICBqaXR0ZXIgKGluIGNsb2NrIHJhdGUgdW5pdHMpCi0gICAqICAic2VudC1yYi1sc3IiICAgICAgICAgICBHX1RZUEVfVUlOVCAgICAgbGFzdCBTUiB0aW1lIChzZWNvbmRzIGluIE5UUCBTaG9ydCBGb3JtYXQsIDE2LjE2IGZpeGVkIHBvaW50KQotICAgKiAgInNlbnQtcmItZGxzciIgICAgICAgICAgR19UWVBFX1VJTlQgICAgIGRlbGF5IHNpbmNlIGxhc3QgU1IgKHNlY29uZHMgaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gICAqCi0gICAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBvbmx5IHByZXNlbnQgZm9yIG5vbi1pbnRlcm5hbCBzb3VyY2VzIGFuZAotICAgKiByZXByZXNlbnRzIHRoZSBsYXN0IFJCIHRoYXQgdGhpcyBzb3VyY2Ugc2VudC4gVGhpcyBpcyBvbmx5IHVwZGF0ZWQKLSAgICogd2hlbiB0aGUgc291cmNlIGlzIHJlY2VpdmluZyBkYXRhIGFuZCBzZW5kaW5nIFJCIGJsb2Nrcy4KLSAgICoKLSAgICogICJoYXZlLXJiIiAgICAgICAgICBHX1RZUEVfQk9PTEVBTiAgdGhlIHNvdXJjZSBoYXMgc2VudCBSQgotICAgKiAgInJiLWZyYWN0aW9ubG9zdCIgIEdfVFlQRV9VSU5UICAgICBsb3N0IDgtYml0IGZyYWN0aW9uCi0gICAqICAicmItcGFja2V0c2xvc3QiICAgR19UWVBFX0lOVCAgICAgIGxvc3QgcGFja2V0cwotICAgKiAgInJiLWV4dGhpZ2hlc3RzZXEiIEdfVFlQRV9VSU5UICAgICBoaWdoZXN0IHJlY2VpdmVkIHNlcW51bQotICAgKiAgInJiLWppdHRlciIgICAgICAgIEdfVFlQRV9VSU5UICAgICByZWNlcHRpb24gaml0dGVyIChpbiBjbG9jayByYXRlIHVuaXRzKQotICAgKiAgInJiLWxzciIgICAgICAgICAgIEdfVFlQRV9VSU5UICAgICBsYXN0IFNSIHRpbWUgKHNlY29uZHMgaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gICAqICAicmItZGxzciIgICAgICAgICAgR19UWVBFX1VJTlQgICAgIGRlbGF5IHNpbmNlIGxhc3QgU1IgKHNlY29uZHMgaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gICAqCi0gICAqIFRoZSByb3VuZCB0cmlwIG9mIHRoaXMgc291cmNlIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbGFzdCBSQgotICAgKiB2YWx1ZXMgYW5kIHRoZSByZWNlcHRpb24gdGltZSBvZiB0aGUgbGFzdCBSQiBwYWNrZXQuIEl0IGlzIG9ubHkgcHJlc2VudCBmb3IKLSAgICogbm9uLWludGVybmFsIHNvdXJjZXMuCi0gICAqCi0gICAqICAicmItcm91bmQtdHJpcCIgICAgR19UWVBFX1VJTlQgICAgIHRoZSByb3VuZC10cmlwIHRpbWUgKHNlY29uZHMgaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gICAqCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NUQVRTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgic3RhdHMiLCAiU3RhdHMiLAotICAgICAgICAgICJUaGUgc3RhdHMgb2YgdGhpcyBzb3VyY2UiLCBHU1RfVFlQRV9TVFJVQ1RVUkUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BST0JBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgicHJvYmF0aW9uIiwgIk51bWJlciBvZiBwcm9iYXRpb25zIiwKLSAgICAgICAgICAiQ29uc2VjdXRpdmUgcGFja2V0IHNlcXVlbmNlIG51bWJlcnMgdG8gYWNjZXB0IHRoZSBzb3VyY2UiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9QUk9CQVRJT04sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfRFJPUE9VVF9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtZHJvcG91dC10aW1lIiwgIk1heCBkcm9wb3V0IHRpbWUiLAotICAgICAgICAgICJUaGUgbWF4aW11bSB0aW1lIChtaWxsaXNlY29uZHMpIG9mIG1pc3NpbmcgcGFja2V0cyB0b2xlcmF0ZWQuIiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIERFRkFVTFRfTUFYX0RST1BPVVRfVElNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01BWF9NSVNPUkRFUl9USU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJtYXgtbWlzb3JkZXItdGltZSIsICJNYXggbWlzb3JkZXIgdGltZSIsCi0gICAgICAgICAgIlRoZSBtYXhpbXVtIHRpbWUgKG1pbGxpc2Vjb25kcykgb2YgbWlzb3JkZXJlZCBwYWNrZXRzIHRvbGVyYXRlZC4iLAotICAgICAgICAgIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9NQVhfTUlTT1JERVJfVElNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwX3NvdXJjZV9kZWJ1ZywgInJ0cHNvdXJjZSIsIDAsICJSVFAgU291cmNlIik7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9yZXNldDoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqCi0gKiBSZXNldCB0aGUgc3RhdHMgb2YgQHNyYy4KLSAqLwotdm9pZAotcnRwX3NvdXJjZV9yZXNldCAoUlRQU291cmNlICogc3JjKQotewotICBzcmMtPm1hcmtlZF9ieWUgPSBGQUxTRTsKLSAgaWYgKHNyYy0+YnllX3JlYXNvbikKLSAgICBnX2ZyZWUgKHNyYy0+YnllX3JlYXNvbik7Ci0gIHNyYy0+YnllX3JlYXNvbiA9IE5VTEw7Ci0gIHNyYy0+c2VudF9ieWUgPSBGQUxTRTsKLSAgZ19oYXNoX3RhYmxlX3JlbW92ZV9hbGwgKHNyYy0+cmVwb3J0ZWRfaW5fc3Jfb2YpOwotCi0gIHNyYy0+c3RhdHMuY3ljbGVzID0gLTE7Ci0gIHNyYy0+c3RhdHMuaml0dGVyID0gMDsKLSAgc3JjLT5zdGF0cy50cmFuc2l0ID0gLTE7Ci0gIHNyYy0+c3RhdHMuY3Vycl9zciA9IDA7Ci0gIHNyYy0+c3RhdHMuc3JbMF0uaXNfdmFsaWQgPSBGQUxTRTsKLSAgc3JjLT5zdGF0cy5jdXJyX3JyID0gMDsKLSAgc3JjLT5zdGF0cy5yclswXS5pc192YWxpZCA9IEZBTFNFOwotICBzcmMtPnN0YXRzLnByZXZfcnRwdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHNyYy0+c3RhdHMucHJldl9ydGNwdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIHNyYy0+c3RhdHMubGFzdF9ydHB0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgc3JjLT5zdGF0cy5sYXN0X3J0Y3B0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZ19hcnJheV9zZXRfc2l6ZSAoc3JjLT5uYWNrcywgMCk7Ci0KLSAgc3JjLT5zdGF0cy5zZW50X3BsaV9jb3VudCA9IDA7Ci0gIHNyYy0+c3RhdHMuc2VudF9maXJfY291bnQgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotcnRwX3NvdXJjZV9pbml0IChSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIC8qIHNvdXJjZXMgYXJlIGluaXRpYWx5IG9uIHByb2JhdGlvbiB1bnRpbCB3ZSByZWNlaXZlIGVub3VnaCB2YWxpZCBSVFAKLSAgICogcGFja2V0cyBvciBhIHZhbGlkIFJUQ1AgcGFja2V0ICovCi0gIHNyYy0+dmFsaWRhdGVkID0gRkFMU0U7Ci0gIHNyYy0+aW50ZXJuYWwgPSBGQUxTRTsKLSAgc3JjLT5wcm9iYXRpb24gPSBERUZBVUxUX1BST0JBVElPTjsKLSAgc3JjLT5jdXJyX3Byb2JhdGlvbiA9IHNyYy0+cHJvYmF0aW9uOwotICBzcmMtPmNsb3NpbmcgPSBGQUxTRTsKLSAgc3JjLT5tYXhfZHJvcG91dF90aW1lID0gREVGQVVMVF9NQVhfRFJPUE9VVF9USU1FOwotICBzcmMtPm1heF9taXNvcmRlcl90aW1lID0gREVGQVVMVF9NQVhfTUlTT1JERVJfVElNRTsKLQotICBzcmMtPnNkZXMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zZGVzIik7Ci0KLSAgc3JjLT5wYXlsb2FkID0gLTE7Ci0gIHNyYy0+Y2xvY2tfcmF0ZSA9IC0xOwotICBzcmMtPnBhY2tldHMgPSBnX3F1ZXVlX25ldyAoKTsKLSAgc3JjLT5zZXFudW1fb2Zmc2V0ID0gLTE7Ci0gIHNyYy0+bGFzdF9ydHB0aW1lID0gLTE7Ci0KLSAgc3JjLT5yZXRhaW5lZF9mZWVkYmFjayA9IGdfcXVldWVfbmV3ICgpOwotICBzcmMtPm5hY2tzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChndWludDMyKSk7Ci0KLSAgc3JjLT5yZXBvcnRlZF9pbl9zcl9vZiA9IGdfaGFzaF90YWJsZV9uZXcgKGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsKTsKLQotICBydHBfc291cmNlX3Jlc2V0IChzcmMpOwotfQotCi12b2lkCi1ydHBfY29uZmxpY3RpbmdfYWRkcmVzc19mcmVlIChSVFBDb25mbGljdGluZ0FkZHJlc3MgKiBhZGRyKQotewotICBnX29iamVjdF91bnJlZiAoYWRkci0+YWRkcmVzcyk7Ci0gIGdfc2xpY2VfZnJlZSAoUlRQQ29uZmxpY3RpbmdBZGRyZXNzLCBhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQKLXJ0cF9zb3VyY2VfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIFJUUFNvdXJjZSAqc3JjOwotCi0gIHNyYyA9IFJUUF9TT1VSQ0VfQ0FTVCAob2JqZWN0KTsKLQotICBnX3F1ZXVlX2ZvcmVhY2ggKHNyYy0+cGFja2V0cywgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKLSAgZ19xdWV1ZV9mcmVlIChzcmMtPnBhY2tldHMpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3JjLT5zZGVzKTsKLQotICBnX2ZyZWUgKHNyYy0+YnllX3JlYXNvbik7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNyYy0+Y2FwcywgTlVMTCk7Ci0KLSAgZ19saXN0X2ZyZWVfZnVsbCAoc3JjLT5jb25mbGljdGluZ19hZGRyZXNzZXMsCi0gICAgICAoR0Rlc3Ryb3lOb3RpZnkpIHJ0cF9jb25mbGljdGluZ19hZGRyZXNzX2ZyZWUpOwotICBnX3F1ZXVlX2ZvcmVhY2ggKHNyYy0+cmV0YWluZWRfZmVlZGJhY2ssIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfcXVldWVfZnJlZSAoc3JjLT5yZXRhaW5lZF9mZWVkYmFjayk7Ci0KLSAgZ19hcnJheV9mcmVlIChzcmMtPm5hY2tzLCBUUlVFKTsKLQotICBpZiAoc3JjLT5ydHBfZnJvbSkKLSAgICBnX29iamVjdF91bnJlZiAoc3JjLT5ydHBfZnJvbSk7Ci0gIGlmIChzcmMtPnJ0Y3BfZnJvbSkKLSAgICBnX29iamVjdF91bnJlZiAoc3JjLT5ydGNwX2Zyb20pOwotCi0gIGdfaGFzaF90YWJsZV91bnJlZiAoc3JjLT5yZXBvcnRlZF9pbl9zcl9vZik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHJ0cF9zb3VyY2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHc3RTdHJ1Y3R1cmUgKgotcnRwX3NvdXJjZV9jcmVhdGVfc3RhdHMgKFJUUFNvdXJjZSAqIHNyYykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBnYm9vbGVhbiBpc19zZW5kZXIgPSBzcmMtPmlzX3NlbmRlcjsKLSAgZ2Jvb2xlYW4gaW50ZXJuYWwgPSBzcmMtPmludGVybmFsOwotICBnY2hhciAqYWRkcmVzc19zdHI7Ci0gIGdib29sZWFuIGhhdmVfcmI7Ci0gIGd1aW50OCBmcmFjdGlvbmxvc3QgPSAwOwotICBnaW50MzIgcGFja2V0c2xvc3QgPSAwOwotICBndWludDMyIGV4dGhpZ2hlc3RzZXEgPSAwOwotICBndWludDMyIGppdHRlciA9IDA7Ci0gIGd1aW50MzIgbHNyID0gMDsKLSAgZ3VpbnQzMiBkbHNyID0gMDsKLSAgZ3VpbnQzMiByb3VuZF90cmlwID0gMDsKLSAgZ2Jvb2xlYW4gaGF2ZV9zcjsKLSAgR3N0Q2xvY2tUaW1lIHRpbWUgPSAwOwotICBndWludDY0IG50cHRpbWUgPSAwOwotICBndWludDMyIHJ0cHRpbWUgPSAwOwotICBndWludDMyIHBhY2tldF9jb3VudCA9IDA7Ci0gIGd1aW50MzIgb2N0ZXRfY291bnQgPSAwOwotCi0KLSAgLyogY29tbW9uIGRhdGEgZm9yIGFsbCB0eXBlcyBvZiBzb3VyY2VzICovCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zdGF0cyIsCi0gICAgICAic3NyYyIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIHNyYy0+c3NyYywKLSAgICAgICJpbnRlcm5hbCIsIEdfVFlQRV9CT09MRUFOLCBpbnRlcm5hbCwKLSAgICAgICJ2YWxpZGF0ZWQiLCBHX1RZUEVfQk9PTEVBTiwgc3JjLT52YWxpZGF0ZWQsCi0gICAgICAicmVjZWl2ZWQtYnllIiwgR19UWVBFX0JPT0xFQU4sIHNyYy0+bWFya2VkX2J5ZSwKLSAgICAgICJpcy1jc3JjIiwgR19UWVBFX0JPT0xFQU4sIHNyYy0+aXNfY3NyYywKLSAgICAgICJpcy1zZW5kZXIiLCBHX1RZUEVfQk9PTEVBTiwgaXNfc2VuZGVyLAotICAgICAgInNlcW51bS1iYXNlIiwgR19UWVBFX0lOVCwgc3JjLT5zZXFudW1fb2Zmc2V0LAotICAgICAgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBzcmMtPmNsb2NrX3JhdGUsIE5VTEwpOwotCi0gIC8qIGFkZCBhZGRyZXNzIGFuZCBwb3J0ICovCi0gIGlmIChzcmMtPnJ0cF9mcm9tKSB7Ci0gICAgYWRkcmVzc19zdHIgPSBfX2dfc29ja2V0X2FkZHJlc3NfdG9fc3RyaW5nIChzcmMtPnJ0cF9mcm9tKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgInJ0cC1mcm9tIiwgR19UWVBFX1NUUklORywgYWRkcmVzc19zdHIsIE5VTEwpOwotICAgIGdfZnJlZSAoYWRkcmVzc19zdHIpOwotICB9Ci0gIGlmIChzcmMtPnJ0Y3BfZnJvbSkgewotICAgIGFkZHJlc3Nfc3RyID0gX19nX3NvY2tldF9hZGRyZXNzX3RvX3N0cmluZyAoc3JjLT5ydGNwX2Zyb20pOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAicnRjcC1mcm9tIiwgR19UWVBFX1NUUklORywgYWRkcmVzc19zdHIsIE5VTEwpOwotICAgIGdfZnJlZSAoYWRkcmVzc19zdHIpOwotICB9Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsCi0gICAgICAib2N0ZXRzLXNlbnQiLCBHX1RZUEVfVUlOVDY0LCBzcmMtPnN0YXRzLm9jdGV0c19zZW50LAotICAgICAgInBhY2tldHMtc2VudCIsIEdfVFlQRV9VSU5UNjQsIHNyYy0+c3RhdHMucGFja2V0c19zZW50LAotICAgICAgIm9jdGV0cy1yZWNlaXZlZCIsIEdfVFlQRV9VSU5UNjQsIHNyYy0+c3RhdHMub2N0ZXRzX3JlY2VpdmVkLAotICAgICAgInBhY2tldHMtcmVjZWl2ZWQiLCBHX1RZUEVfVUlOVDY0LCBzcmMtPnN0YXRzLnBhY2tldHNfcmVjZWl2ZWQsCi0gICAgICAiYml0cmF0ZSIsIEdfVFlQRV9VSU5UNjQsIHNyYy0+Yml0cmF0ZSwKLSAgICAgICJwYWNrZXRzLWxvc3QiLCBHX1RZUEVfSU5ULAotICAgICAgKGdpbnQpIHJ0cF9zdGF0c19nZXRfcGFja2V0c19sb3N0ICgmc3JjLT5zdGF0cyksICJqaXR0ZXIiLCBHX1RZUEVfVUlOVCwKLSAgICAgIChndWludCkgKHNyYy0+c3RhdHMuaml0dGVyID4+IDQpLAotICAgICAgInNlbnQtcGxpLWNvdW50IiwgR19UWVBFX1VJTlQsIHNyYy0+c3RhdHMuc2VudF9wbGlfY291bnQsCi0gICAgICAicmVjdi1wbGktY291bnQiLCBHX1RZUEVfVUlOVCwgc3JjLT5zdGF0cy5yZWN2X3BsaV9jb3VudCwKLSAgICAgICJzZW50LWZpci1jb3VudCIsIEdfVFlQRV9VSU5ULCBzcmMtPnN0YXRzLnNlbnRfZmlyX2NvdW50LAotICAgICAgInJlY3YtZmlyLWNvdW50IiwgR19UWVBFX1VJTlQsIHNyYy0+c3RhdHMucmVjdl9maXJfY291bnQsIE5VTEwpOwotCi0gIC8qIGdldCB0aGUgbGFzdCBTUi4gKi8KLSAgaGF2ZV9zciA9IHJ0cF9zb3VyY2VfZ2V0X2xhc3Rfc3IgKHNyYywgJnRpbWUsICZudHB0aW1lLCAmcnRwdGltZSwKLSAgICAgICZwYWNrZXRfY291bnQsICZvY3RldF9jb3VudCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLAotICAgICAgImhhdmUtc3IiLCBHX1RZUEVfQk9PTEVBTiwgaGF2ZV9zciwKLSAgICAgICJzci1udHB0aW1lIiwgR19UWVBFX1VJTlQ2NCwgbnRwdGltZSwKLSAgICAgICJzci1ydHB0aW1lIiwgR19UWVBFX1VJTlQsIChndWludCkgcnRwdGltZSwKLSAgICAgICJzci1vY3RldC1jb3VudCIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIG9jdGV0X2NvdW50LAotICAgICAgInNyLXBhY2tldC1jb3VudCIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIHBhY2tldF9jb3VudCwgTlVMTCk7Ci0KLSAgaWYgKCFpbnRlcm5hbCkgewotICAgIC8qIGdldCB0aGUgbGFzdCBSQiB3ZSBzZW50ICovCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsCi0gICAgICAgICJzZW50LXJiIiwgR19UWVBFX0JPT0xFQU4sIHNyYy0+bGFzdF9yci5pc192YWxpZCwKLSAgICAgICAgInNlbnQtcmItZnJhY3Rpb25sb3N0IiwgR19UWVBFX1VJTlQsIChndWludCkgc3JjLT5sYXN0X3JyLmZyYWN0aW9ubG9zdCwKLSAgICAgICAgInNlbnQtcmItcGFja2V0c2xvc3QiLCBHX1RZUEVfSU5ULCAoZ2ludCkgc3JjLT5sYXN0X3JyLnBhY2tldHNsb3N0LAotICAgICAgICAic2VudC1yYi1leHRoaWdoZXN0c2VxIiwgR19UWVBFX1VJTlQsCi0gICAgICAgIChndWludCkgc3JjLT5sYXN0X3JyLmV4dGhpZ2hlc3RzZXEsICJzZW50LXJiLWppdHRlciIsIEdfVFlQRV9VSU5ULAotICAgICAgICAoZ3VpbnQpIHNyYy0+bGFzdF9yci5qaXR0ZXIsICJzZW50LXJiLWxzciIsIEdfVFlQRV9VSU5ULAotICAgICAgICAoZ3VpbnQpIHNyYy0+bGFzdF9yci5sc3IsICJzZW50LXJiLWRsc3IiLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgKGd1aW50KSBzcmMtPmxhc3RfcnIuZGxzciwgTlVMTCk7Ci0KLSAgICAvKiBnZXQgdGhlIGxhc3QgUkIgKi8KLSAgICBoYXZlX3JiID0gcnRwX3NvdXJjZV9nZXRfbGFzdF9yYiAoc3JjLCAmZnJhY3Rpb25sb3N0LCAmcGFja2V0c2xvc3QsCi0gICAgICAgICZleHRoaWdoZXN0c2VxLCAmaml0dGVyLCAmbHNyLCAmZGxzciwgJnJvdW5kX3RyaXApOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsCi0gICAgICAgICJoYXZlLXJiIiwgR19UWVBFX0JPT0xFQU4sIGhhdmVfcmIsCi0gICAgICAgICJyYi1mcmFjdGlvbmxvc3QiLCBHX1RZUEVfVUlOVCwgKGd1aW50KSBmcmFjdGlvbmxvc3QsCi0gICAgICAgICJyYi1wYWNrZXRzbG9zdCIsIEdfVFlQRV9JTlQsIChnaW50KSBwYWNrZXRzbG9zdCwKLSAgICAgICAgInJiLWV4dGhpZ2hlc3RzZXEiLCBHX1RZUEVfVUlOVCwgKGd1aW50KSBleHRoaWdoZXN0c2VxLAotICAgICAgICAicmItaml0dGVyIiwgR19UWVBFX1VJTlQsIChndWludCkgaml0dGVyLAotICAgICAgICAicmItbHNyIiwgR19UWVBFX1VJTlQsIChndWludCkgbHNyLAotICAgICAgICAicmItZGxzciIsIEdfVFlQRV9VSU5ULCAoZ3VpbnQpIGRsc3IsCi0gICAgICAgICJyYi1yb3VuZC10cmlwIiwgR19UWVBFX1VJTlQsIChndWludCkgcm91bmRfdHJpcCwgTlVMTCk7Ci0gIH0KLQotICByZXR1cm4gczsKLX0KLQotLyoqCi0gKiBydHBfc291cmNlX2dldF9zZGVzX3N0cnVjdDoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqCi0gKiBHZXQgdGhlIFNERVMgZnJvbSBAc3JjLiBTZWUgdGhlIFNERVMgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBSZXR1cm5zOiAlR3N0U3RydWN0dXJlIG9mIHR5cGUgImFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zZGVzIi4gVGhlIHJlc3VsdCBpcwotICogdmFsaWQgdW50aWwgdGhlIFNERVMgaXRlbXMgb2YgQHNyYyBhcmUgbW9kaWZpZWQuCi0gKi8KLWNvbnN0IEdzdFN0cnVjdHVyZSAqCi1ydHBfc291cmNlX2dldF9zZGVzX3N0cnVjdCAoUlRQU291cmNlICogc3JjKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSwgTlVMTCk7Ci0KLSAgcmV0dXJuIHNyYy0+c2RlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1zZGVzX3N0cnVjdF9jb21wYXJlX2Z1bmMgKEdRdWFyayBmaWVsZF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RTdHJ1Y3R1cmUgKm9sZDsKLSAgY29uc3QgZ2NoYXIgKmZpZWxkOwotCi0gIG9sZCA9IEdTVF9TVFJVQ1RVUkUgKHVzZXJfZGF0YSk7Ci0gIGZpZWxkID0gZ19xdWFya190b19zdHJpbmcgKGZpZWxkX2lkKTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChvbGQsIGZpZWxkKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ19hc3NlcnQgKEdfVkFMVUVfSE9MRFNfU1RSSU5HICh2YWx1ZSkpOwotCi0gIHJldHVybiBzdHJjbXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpLCBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKG9sZCwKLSAgICAgICAgICBmaWVsZCkpID09IDA7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9zZXRfc2Rlc19zdHJ1Y3Q6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKiBAc2RlczogdGhlIFNERVMgc3RydWN0dXJlCi0gKgotICogU3RvcmUgdGhlIEBzZGVzIGluIEBzcmMuIEBzZGVzIG11c3QgYmUgYSBzdHJ1Y3R1cmUgb2YgdHlwZQotICogImFwcGxpY2F0aW9uL3gtcnRwLXNvdXJjZS1zZGVzIiwgc2VlIHRoZSBTREVTIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQHNkZXMuCi0gKgotICogUmV0dXJuczogJUZBTFNFIGlmIHRoZSBTREVTIHdhcyB1bmNoYW5nZWQuCi0gKi8KLWdib29sZWFuCi1ydHBfc291cmNlX3NldF9zZGVzX3N0cnVjdCAoUlRQU291cmNlICogc3JjLCBHc3RTdHJ1Y3R1cmUgKiBzZGVzKQotewotICBnYm9vbGVhbiBjaGFuZ2VkOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU09VUkNFIChzcmMpLCBGQUxTRSk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzdHJjbXAgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHNkZXMpLAotICAgICAgICAgICJhcHBsaWNhdGlvbi94LXJ0cC1zb3VyY2Utc2RlcyIpID09IDAsIEZBTFNFKTsKLQotICBjaGFuZ2VkID0gIWdzdF9zdHJ1Y3R1cmVfZm9yZWFjaCAoc2Rlcywgc2Rlc19zdHJ1Y3RfY29tcGFyZV9mdW5jLCBzcmMtPnNkZXMpOwotCi0gIGlmIChjaGFuZ2VkKSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzcmMtPnNkZXMpOwotICAgIHNyYy0+c2RlcyA9IHNkZXM7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzZGVzKTsKLSAgfQotICByZXR1cm4gY2hhbmdlZDsKLX0KLQotc3RhdGljIHZvaWQKLXJ0cF9zb3VyY2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIFJUUFNvdXJjZSAqc3JjOwotCi0gIHNyYyA9IFJUUF9TT1VSQ0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1NTUkM6Ci0gICAgICBzcmMtPnNzcmMgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUFJPQkFUSU9OOgotICAgICAgc3JjLT5wcm9iYXRpb24gPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0RST1BPVVRfVElNRToKLSAgICAgIHNyYy0+bWF4X2Ryb3BvdXRfdGltZSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NQVhfTUlTT1JERVJfVElNRToKLSAgICAgIHNyYy0+bWF4X21pc29yZGVyX3RpbWUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydHBfc291cmNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBSVFBTb3VyY2UgKnNyYzsKLQotICBzcmMgPSBSVFBfU09VUkNFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TU1JDOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0cF9zb3VyY2VfZ2V0X3NzcmMgKHNyYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lTX0NTUkM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRwX3NvdXJjZV9pc19hc19jc3JjIChzcmMpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JU19WQUxJREFURUQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRwX3NvdXJjZV9pc192YWxpZGF0ZWQgKHNyYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0lTX1NFTkRFUjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHBfc291cmNlX2lzX3NlbmRlciAoc3JjKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0RFUzoKLSAgICAgIGdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgcnRwX3NvdXJjZV9nZXRfc2Rlc19zdHJ1Y3QgKHNyYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUQVRTOgotICAgICAgZ192YWx1ZV90YWtlX2JveGVkICh2YWx1ZSwgcnRwX3NvdXJjZV9jcmVhdGVfc3RhdHMgKHNyYykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST0JBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzcmMtPnByb2JhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUFYX0RST1BPVVRfVElNRToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzcmMtPm1heF9kcm9wb3V0X3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9NSVNPUkRFUl9USU1FOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNyYy0+bWF4X21pc29yZGVyX3RpbWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKioKLSAqIHJ0cF9zb3VyY2VfbmV3OgotICogQHNzcmM6IGFuIFNTUkMKLSAqCi0gKiBDcmVhdGUgYSAjUlRQU291cmNlIHdpdGggQHNzcmMuCi0gKgotICogUmV0dXJuczogYSBuZXcgI1JUUFNvdXJjZS4gVXNlIGdfb2JqZWN0X3VucmVmKCkgYWZ0ZXIgdXNhZ2UuCi0gKi8KLVJUUFNvdXJjZSAqCi1ydHBfc291cmNlX25ldyAoZ3VpbnQzMiBzc3JjKQotewotICBSVFBTb3VyY2UgKnNyYzsKLQotICBzcmMgPSBnX29iamVjdF9uZXcgKFJUUF9UWVBFX1NPVVJDRSwgTlVMTCk7Ci0gIHNyYy0+c3NyYyA9IHNzcmM7Ci0KLSAgcmV0dXJuIHNyYzsKLX0KLQotLyoqCi0gKiBydHBfc291cmNlX3NldF9jYWxsYmFja3M6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKiBAY2I6IGNhbGxiYWNrIGZ1bmN0aW9ucwotICogQHVzZXJfZGF0YTogdXNlciBkYXRhCi0gKgotICogU2V0IHRoZSBjYWxsYmFja3MgZm9yIHRoZSBzb3VyY2UuCi0gKi8KLXZvaWQKLXJ0cF9zb3VyY2Vfc2V0X2NhbGxiYWNrcyAoUlRQU291cmNlICogc3JjLCBSVFBTb3VyY2VDYWxsYmFja3MgKiBjYiwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYykpOwotCi0gIHNyYy0+Y2FsbGJhY2tzLnB1c2hfcnRwID0gY2ItPnB1c2hfcnRwOwotICBzcmMtPmNhbGxiYWNrcy5jbG9ja19yYXRlID0gY2ItPmNsb2NrX3JhdGU7Ci0gIHNyYy0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotfQotCi0vKioKLSAqIHJ0cF9zb3VyY2VfZ2V0X3NzcmM6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKgotICogR2V0IHRoZSBTU1JDIG9mIEBzb3VyY2UuCi0gKgotICogUmV0dXJuczogdGhlIFNTUkMgb2Ygc3JjLgotICovCi1ndWludDMyCi1ydHBfc291cmNlX2dldF9zc3JjIChSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIGd1aW50MzIgcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU09VUkNFIChzcmMpLCAwKTsKLQotICByZXN1bHQgPSBzcmMtPnNzcmM7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc291cmNlX3NldF9hc19jc3JjOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICoKLSAqIENvbmZpZ3VyZSBAc3JjIGFzIGEgQ1NSQywgdGhpcyB3aWxsIGFsc28gdmFsaWRhdGUgQHNyYy4KLSAqLwotdm9pZAotcnRwX3NvdXJjZV9zZXRfYXNfY3NyYyAoUlRQU291cmNlICogc3JjKQotewotICBnX3JldHVybl9pZl9mYWlsIChSVFBfSVNfU09VUkNFIChzcmMpKTsKLQotICBzcmMtPnZhbGlkYXRlZCA9IFRSVUU7Ci0gIHNyYy0+aXNfY3NyYyA9IFRSVUU7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9pc19hc19jc3JjOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICoKLSAqIENoZWNrIGlmIEBzcmMgaXMgYSBjb250cmlidXRpbmcgc291cmNlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBzcmMgaXMgYWN0aW5nIGFzIGEgY29udHJpYnV0aW5nIHNvdXJjZS4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zb3VyY2VfaXNfYXNfY3NyYyAoUlRQU291cmNlICogc3JjKQotewotICBnYm9vbGVhbiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYyksIEZBTFNFKTsKLQotICByZXN1bHQgPSBzcmMtPmlzX2NzcmM7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc291cmNlX2lzX2FjdGl2ZToKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqCi0gKiBDaGVjayBpZiBAc3JjIGlzIGFuIGFjdGl2ZSBzb3VyY2UuIEEgc291cmNlIGlzIGFjdGl2ZSBpZiBpdCBoYXMgYmVlbgotICogdmFsaWRhdGVkIGFuZCBoYXMgbm90IHlldCByZWNlaXZlZCBhIEJZRSBwYWNrZXQKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAc3JjIGlzIGFuIHFhY3RpdmUgc291cmNlLgotICovCi1nYm9vbGVhbgotcnRwX3NvdXJjZV9pc19hY3RpdmUgKFJUUFNvdXJjZSAqIHNyYykKLXsKLSAgZ2Jvb2xlYW4gcmVzdWx0OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU09VUkNFIChzcmMpLCBGQUxTRSk7Ci0KLSAgcmVzdWx0ID0gUlRQX1NPVVJDRV9JU19BQ1RJVkUgKHNyYyk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqCi0gKiBydHBfc291cmNlX2lzX3ZhbGlkYXRlZDoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqCi0gKiBDaGVjayBpZiBAc3JjIGlzIGEgdmFsaWRhdGVkIHNvdXJjZS4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBAc3JjIGlzIGEgdmFsaWRhdGVkIHNvdXJjZS4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zb3VyY2VfaXNfdmFsaWRhdGVkIChSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSwgRkFMU0UpOwotCi0gIHJlc3VsdCA9IHNyYy0+dmFsaWRhdGVkOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9pc19zZW5kZXI6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKgotICogQ2hlY2sgaWYgQHNyYyBpcyBhIHNlbmRpbmcgc291cmNlLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIEBzcmMgaXMgYSBzZW5kaW5nIHNvdXJjZS4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zb3VyY2VfaXNfc2VuZGVyIChSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSwgRkFMU0UpOwotCi0gIHJlc3VsdCA9IFJUUF9TT1VSQ0VfSVNfU0VOREVSIChzcmMpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9pc19tYXJrZWRfYnllOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICoKLSAqIENoZWNrIGlmIEBzcmMgaXMgbWFya2VkIGFzIGxlYXZpbmcgdGhlIHNlc3Npb24gd2l0aCBhIEJZRSBwYWNrZXQuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgQHNyYyBoYXMgYmVlbiBtYXJrZWQgQllFLgotICovCi1nYm9vbGVhbgotcnRwX3NvdXJjZV9pc19tYXJrZWRfYnllIChSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSwgRkFMU0UpOwotCi0gIHJlc3VsdCA9IFJUUF9TT1VSQ0VfSVNfTUFSS0VEX0JZRSAoc3JjKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0KLS8qKgotICogcnRwX3NvdXJjZV9nZXRfYnllX3JlYXNvbjoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqCi0gKiBHZXQgdGhlIEJZRSByZWFzb24gZm9yIEBzcmMuIENoZWNrIGlmIHRoZSBzb3VyY2UgaXMgbWFya2VkIGFzIGxlYXZpbmcgdGhlCi0gKiBzZXNzaW9uIHdpdGggYSBCWUUgbWVzc2FnZSBmaXJzdCB3aXRoIHJ0cF9zb3VyY2VfaXNfbWFya2VkX2J5ZSgpLgotICoKLSAqIFJldHVybnM6IFRoZSBCWUUgcmVhc29uIG9yIE5VTEwgd2hlbiBubyByZWFzb24gd2FzIGdpdmVuIG9yIHRoZSBzb3VyY2Ugd2FzCi0gKiBub3QgbWFya2VkIEJZRSB5ZXQuIGdfZnJlZSgpIGFmdGVyIHVzYWdlLgotICovCi1nY2hhciAqCi1ydHBfc291cmNlX2dldF9ieWVfcmVhc29uIChSVFBTb3VyY2UgKiBzcmMpCi17Ci0gIGdjaGFyICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYyksIE5VTEwpOwotCi0gIHJlc3VsdCA9IGdfc3RyZHVwIChzcmMtPmJ5ZV9yZWFzb24pOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV91cGRhdGVfY2FwczoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqIEBjYXBzOiBhICNHc3RDYXBzCi0gKgotICogUGFyc2UgQGNhcHMgYW5kIHN0b3JlIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbiBpbiBAc291cmNlLgotICovCi12b2lkCi1ydHBfc291cmNlX3VwZGF0ZV9jYXBzIChSVFBTb3VyY2UgKiBzcmMsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGd1aW50IHZhbDsKLSAgZ2ludCBpdmFsOwotICBnYm9vbGVhbiBydHg7Ci0KLSAgLyogbm90aGluZyBjaGFuZ2VkLCByZXR1cm4gKi8KLSAgaWYgKGNhcHMgPT0gTlVMTCB8fCBzcmMtPmNhcHMgPT0gY2FwcykKLSAgICByZXR1cm47Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIHJ0eCA9IChnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAicnR4LXNzcmMiLCAmdmFsKSAmJiB2YWwgPT0gc3JjLT5zc3JjKTsKLQotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCBydHggPyAicnR4LXBheWxvYWQiIDogInBheWxvYWQiLCAmaXZhbCkpCi0gICAgc3JjLT5wYXlsb2FkID0gaXZhbDsKLSAgZWxzZQotICAgIHNyYy0+cGF5bG9hZCA9IC0xOwotCi0gIEdTVF9ERUJVRyAoImdvdCAlc3BheWxvYWQgJWQiLCBydHggPyAicnR4ICIgOiAiIiwgc3JjLT5wYXlsb2FkKTsKLQotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAiY2xvY2stcmF0ZSIsICZpdmFsKSkKLSAgICBzcmMtPmNsb2NrX3JhdGUgPSBpdmFsOwotICBlbHNlCi0gICAgc3JjLT5jbG9ja19yYXRlID0gLTE7Ci0KLSAgR1NUX0RFQlVHICgiZ290IGNsb2NrLXJhdGUgJWQiLCBzcmMtPmNsb2NrX3JhdGUpOwotCi0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCBydHggPyAicnR4LXNlcW51bS1vZmZzZXQiIDogInNlcW51bS1vZmZzZXQiLAotICAgICAgICAgICZ2YWwpKQotICAgIHNyYy0+c2VxbnVtX29mZnNldCA9IHZhbDsKLSAgZWxzZQotICAgIHNyYy0+c2VxbnVtX29mZnNldCA9IC0xOwotCi0gIEdTVF9ERUJVRyAoImdvdCAlc3NlcW51bS1vZmZzZXQgJSIgR19HSU5UMzJfRk9STUFULCBydHggPyAicnR4ICIgOiAiIiwKLSAgICAgIHNyYy0+c2VxbnVtX29mZnNldCk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNyYy0+Y2FwcywgY2Fwcyk7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9zZXRfcnRwX2Zyb206Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKiBAYWRkcmVzczogdGhlIFJUUCBhZGRyZXNzIHRvIHNldAotICoKLSAqIFNldCB0aGF0IEBzcmMgaXMgcmVjZWl2aW5nIFJUUCBwYWNrZXRzIGZyb20gQGFkZHJlc3MuIFRoaXMgaXMgdXNlZCBmb3IKLSAqIGNvbGxpc3Rpb24gY2hlY2tpbmcuCi0gKi8KLXZvaWQKLXJ0cF9zb3VyY2Vfc2V0X3J0cF9mcm9tIChSVFBTb3VyY2UgKiBzcmMsIEdTb2NrZXRBZGRyZXNzICogYWRkcmVzcykKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSk7Ci0KLSAgaWYgKHNyYy0+cnRwX2Zyb20pCi0gICAgZ19vYmplY3RfdW5yZWYgKHNyYy0+cnRwX2Zyb20pOwotICBzcmMtPnJ0cF9mcm9tID0gR19TT0NLRVRfQUREUkVTUyAoZ19vYmplY3RfcmVmIChhZGRyZXNzKSk7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9zZXRfcnRjcF9mcm9tOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICogQGFkZHJlc3M6IHRoZSBSVENQIGFkZHJlc3MgdG8gc2V0Ci0gKgotICogU2V0IHRoYXQgQHNyYyBpcyByZWNlaXZpbmcgUlRDUCBwYWNrZXRzIGZyb20gQGFkZHJlc3MuIFRoaXMgaXMgdXNlZCBmb3IKLSAqIGNvbGxpc3Rpb24gY2hlY2tpbmcuCi0gKi8KLXZvaWQKLXJ0cF9zb3VyY2Vfc2V0X3J0Y3BfZnJvbSAoUlRQU291cmNlICogc3JjLCBHU29ja2V0QWRkcmVzcyAqIGFkZHJlc3MpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYykpOwotCi0gIGlmIChzcmMtPnJ0Y3BfZnJvbSkKLSAgICBnX29iamVjdF91bnJlZiAoc3JjLT5ydGNwX2Zyb20pOwotICBzcmMtPnJ0Y3BfZnJvbSA9IEdfU09DS0VUX0FERFJFU1MgKGdfb2JqZWN0X3JlZiAoYWRkcmVzcykpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotcHVzaF9wYWNrZXQgKFJUUFNvdXJjZSAqIHNyYywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIHB1c2ggcXVldWVkIHBhY2tldHMgZmlyc3QgaWYgYW55ICovCi0gIHdoaWxlICghZ19xdWV1ZV9pc19lbXB0eSAoc3JjLT5wYWNrZXRzKSkgewotICAgIEdzdEJ1ZmZlciAqYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUIChnX3F1ZXVlX3BvcF9oZWFkIChzcmMtPnBhY2tldHMpKTsKLQotICAgIEdTVF9MT0cgKCJwdXNoaW5nIHF1ZXVlZCBwYWNrZXQiKTsKLSAgICBpZiAoc3JjLT5jYWxsYmFja3MucHVzaF9ydHApCi0gICAgICBzcmMtPmNhbGxiYWNrcy5wdXNoX3J0cCAoc3JjLCBidWZmZXIsIHNyYy0+dXNlcl9kYXRhKTsKLSAgICBlbHNlCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICB9Ci0gIEdTVF9MT0cgKCJwdXNoaW5nIG5ldyBwYWNrZXQiKTsKLSAgLyogcHVzaCBwYWNrZXQgKi8KLSAgaWYgKHNyYy0+Y2FsbGJhY2tzLnB1c2hfcnRwKQotICAgIHJldCA9IHNyYy0+Y2FsbGJhY2tzLnB1c2hfcnRwIChzcmMsIGJ1ZmZlciwgc3JjLT51c2VyX2RhdGEpOwotICBlbHNlCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2ludAotZ2V0X2Nsb2NrX3JhdGUgKFJUUFNvdXJjZSAqIHNyYywgZ3VpbnQ4IHBheWxvYWQpCi17Ci0gIGlmIChzcmMtPnBheWxvYWQgPT0gLTEpIHsKLSAgICAvKiBmaXJzdCBwYXlsb2FkIHJlY2VpdmVkLCBub3RoaW5nIHdhcyBpbiB0aGUgY2FwcywgbG9jayBvbiB0byB0aGlzIHBheWxvYWQgKi8KLSAgICBzcmMtPnBheWxvYWQgPSBwYXlsb2FkOwotICAgIEdTVF9ERUJVRyAoImZpcnN0IHBheWxvYWQgJWQiLCBwYXlsb2FkKTsKLSAgfSBlbHNlIGlmIChwYXlsb2FkICE9IHNyYy0+cGF5bG9hZCkgewotICAgIC8qIHdlIGhhdmUgYSBkaWZmZXJlbnQgcGF5bG9hZCB0aGFuIGJlZm9yZSwgcmVzZXQgdGhlIGNsb2NrLXJhdGUgKi8KLSAgICBHU1RfREVCVUcgKCJuZXcgcGF5bG9hZCAlZCIsIHBheWxvYWQpOwotICAgIHNyYy0+cGF5bG9hZCA9IHBheWxvYWQ7Ci0gICAgc3JjLT5jbG9ja19yYXRlID0gLTE7Ci0gICAgc3JjLT5zdGF0cy50cmFuc2l0ID0gLTE7Ci0gIH0KLQotICBpZiAoc3JjLT5jbG9ja19yYXRlID09IC0xKSB7Ci0gICAgZ2ludCBjbG9ja19yYXRlID0gLTE7Ci0KLSAgICBpZiAoc3JjLT5jYWxsYmFja3MuY2xvY2tfcmF0ZSkKLSAgICAgIGNsb2NrX3JhdGUgPSBzcmMtPmNhbGxiYWNrcy5jbG9ja19yYXRlIChzcmMsIHBheWxvYWQsIHNyYy0+dXNlcl9kYXRhKTsKLQotICAgIEdTVF9ERUJVRyAoImdvdCBjbG9jay1yYXRlICVkIiwgY2xvY2tfcmF0ZSk7Ci0KLSAgICBzcmMtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotICAgIGdzdF9ydHBfcGFja2V0X3JhdGVfY3R4X3Jlc2V0ICgmc3JjLT5wYWNrZXRfcmF0ZV9jdHgsIGNsb2NrX3JhdGUpOwotICB9Ci0gIHJldHVybiBzcmMtPmNsb2NrX3JhdGU7Ci19Ci0KLS8qIEppdHRlciBpcyB0aGUgdmFyaWF0aW9uIGluIHRoZSBkZWxheSBvZiByZWNlaXZlZCBwYWNrZXRzIGluIGEgZmxvdy4gSXQgaXMKLSAqIG1lYXN1cmVkIGJ5IGNvbXBhcmluZyB0aGUgaW50ZXJ2YWwgd2hlbiBSVFAgcGFja2V0cyB3ZXJlIHNlbnQgdG8gdGhlIGludGVydmFsCi0gKiBhdCB3aGljaCB0aGV5IHdlcmUgcmVjZWl2ZWQuIEZvciBpbnN0YW5jZSwgaWYgcGFja2V0ICMxIGFuZCBwYWNrZXQgIzIgbGVhdmUKLSAqIDUwIG1pbGxpc2Vjb25kcyBhcGFydCBhbmQgYXJyaXZlIDYwIG1pbGxpc2Vjb25kcyBhcGFydCwgdGhlbiB0aGUgaml0dGVyIGlzIDEwCi0gKiBtaWxsaXNlY29uZHMuICovCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX2ppdHRlciAoUlRQU291cmNlICogc3JjLCBSVFBQYWNrZXRJbmZvICogcGluZm8pCi17Ci0gIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWU7Ci0gIGd1aW50MzIgcnRwYXJyaXZhbCwgdHJhbnNpdCwgcnRwdGltZTsKLSAgZ2ludDMyIGRpZmY7Ci0gIGdpbnQgY2xvY2tfcmF0ZTsKLSAgZ3VpbnQ4IHB0OwotCi0gIC8qIGdldCBhcnJpdmFsIHRpbWUgKi8KLSAgaWYgKChydW5uaW5nX3RpbWUgPSBwaW5mby0+cnVubmluZ190aW1lKSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKQotICAgIGdvdG8gbm9fdGltZTsKLQotICBwdCA9IHBpbmZvLT5wdDsKLQotICBHU1RfTE9HICgiU1NSQyAlMDh4IGdvdCBwYXlsb2FkICVkIiwgc3JjLT5zc3JjLCBwdCk7Ci0KLSAgLyogZ2V0IGNsb2NrcmF0ZSAqLwotICBpZiAoKGNsb2NrX3JhdGUgPSBnZXRfY2xvY2tfcmF0ZSAoc3JjLCBwdCkpID09IC0xKQotICAgIGdvdG8gbm9fY2xvY2tfcmF0ZTsKLQotICBydHB0aW1lID0gcGluZm8tPnJ0cHRpbWU7Ci0KLSAgLyogY29udmVydCBhcnJpdmFsIHRpbWUgdG8gUlRQIHRpbWVzdGFtcCB1bml0cywgdHJ1bmNhdGUgdG8gMzIgYml0cywgd2UgZG9uJ3QKLSAgICogY2FyZSBhYm91dCB0aGUgYWJzb2x1dGUgdmFsdWUsIGp1c3QgdGhlIGRpZmZlcmVuY2UuICovCi0gIHJ0cGFycml2YWwgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChydW5uaW5nX3RpbWUsIGNsb2NrX3JhdGUsIEdTVF9TRUNPTkQpOwotCi0gIC8qIHRyYW5zaXQgdGltZSBpcyBkaWZmZXJlbmNlIHdpdGggUlRQIHRpbWVzdGFtcCAqLwotICB0cmFuc2l0ID0gcnRwYXJyaXZhbCAtIHJ0cHRpbWU7Ci0KLSAgLyogZ2V0IEFCUyBkaWZmIHdpdGggcHJldmlvdXMgdHJhbnNpdCB0aW1lICovCi0gIGlmIChzcmMtPnN0YXRzLnRyYW5zaXQgIT0gLTEpIHsKLSAgICBpZiAodHJhbnNpdCA+IHNyYy0+c3RhdHMudHJhbnNpdCkKLSAgICAgIGRpZmYgPSB0cmFuc2l0IC0gc3JjLT5zdGF0cy50cmFuc2l0OwotICAgIGVsc2UKLSAgICAgIGRpZmYgPSBzcmMtPnN0YXRzLnRyYW5zaXQgLSB0cmFuc2l0OwotICB9IGVsc2UKLSAgICBkaWZmID0gMDsKLQotICBzcmMtPnN0YXRzLnRyYW5zaXQgPSB0cmFuc2l0OwotCi0gIC8qIHVwZGF0ZSBqaXR0ZXIsIHRoZSB2YWx1ZSB3ZSBzdG9yZSBpcyBzY2FsZWQgdXAgc28gd2UgY2FuIGtlZXAgcHJlY2lzaW9uLiAqLwotICBzcmMtPnN0YXRzLmppdHRlciArPSBkaWZmIC0gKChzcmMtPnN0YXRzLmppdHRlciArIDgpID4+IDQpOwotCi0gIHNyYy0+c3RhdHMucHJldl9ydHB0aW1lID0gc3JjLT5zdGF0cy5sYXN0X3J0cHRpbWU7Ci0gIHNyYy0+c3RhdHMubGFzdF9ydHB0aW1lID0gcnRwYXJyaXZhbDsKLQotICBHU1RfTE9HICgicnRwYXJyaXZhbCAldSwgcnRwdGltZSAldSwgY2xvY2stcmF0ZSAlZCwgZGlmZiAlZCwgaml0dGVyOiAlZiIsCi0gICAgICBydHBhcnJpdmFsLCBydHB0aW1lLCBjbG9ja19yYXRlLCBkaWZmLCAoc3JjLT5zdGF0cy5qaXR0ZXIpIC8gMTYuMCk7Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fdGltZToKLSAgewotICAgIEdTVF9XQVJOSU5HICgiY2Fubm90IGdldCBjdXJyZW50IHJ1bm5pbmdfdGltZSIpOwotICAgIHJldHVybjsKLSAgfQotbm9fY2xvY2tfcmF0ZToKLSAgewotICAgIEdTVF9XQVJOSU5HICgiY2Fubm90IGdldCBjbG9jay1yYXRlIGZvciBwdCAlZCIsIHB0KTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWluaXRfc2VxIChSVFBTb3VyY2UgKiBzcmMsIGd1aW50MTYgc2VxKQotewotICBzcmMtPnN0YXRzLmJhc2Vfc2VxID0gc2VxOwotICBzcmMtPnN0YXRzLm1heF9zZXEgPSBzZXE7Ci0gIHNyYy0+c3RhdHMuYmFkX3NlcSA9IFJUUF9TRVFfTU9EICsgMTsgLyogc28gc2VxID09IGJhZF9zZXEgaXMgZmFsc2UgKi8KLSAgc3JjLT5zdGF0cy5jeWNsZXMgPSAwOwotICBzcmMtPnN0YXRzLnBhY2tldHNfcmVjZWl2ZWQgPSAwOwotICBzcmMtPnN0YXRzLm9jdGV0c19yZWNlaXZlZCA9IDA7Ci0gIHNyYy0+c3RhdHMuYnl0ZXNfcmVjZWl2ZWQgPSAwOwotICBzcmMtPnN0YXRzLnByZXZfcmVjZWl2ZWQgPSAwOwotICBzcmMtPnN0YXRzLnByZXZfZXhwZWN0ZWQgPSAwOwotICBzcmMtPnN0YXRzLnJlY3ZfcGxpX2NvdW50ID0gMDsKLSAgc3JjLT5zdGF0cy5yZWN2X2Zpcl9jb3VudCA9IDA7Ci0KLSAgR1NUX0RFQlVHICgiYmFzZV9zZXEgJWQiLCBzZXEpOwotfQotCi0jZGVmaW5lIEJJVFJBVEVfSU5URVJWQUwgKDIgKiBHU1RfU0VDT05EKQotCi1zdGF0aWMgdm9pZAotZG9fYml0cmF0ZV9lc3RpbWF0aW9uIChSVFBTb3VyY2UgKiBzcmMsIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsCi0gICAgZ3VpbnQ2NCAqIGJ5dGVzX2hhbmRsZWQpCi17Ci0gIGd1aW50NjQgZWxhcHNlZDsKLQotICBpZiAoc3JjLT5wcmV2X3J0aW1lKSB7Ci0gICAgZWxhcHNlZCA9IHJ1bm5pbmdfdGltZSAtIHNyYy0+cHJldl9ydGltZTsKLQotICAgIGlmIChlbGFwc2VkID4gQklUUkFURV9JTlRFUlZBTCkgewotICAgICAgZ3VpbnQ2NCByYXRlOwotCi0gICAgICByYXRlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlICgqYnl0ZXNfaGFuZGxlZCwgOCAqIEdTVF9TRUNPTkQsIGVsYXBzZWQpOwotCi0gICAgICBHU1RfTE9HICgiRWxhcHNlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGJ5dGVzICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAiLCByYXRlICUiIEdfR1VJTlQ2NF9GT1JNQVQsIGVsYXBzZWQsICpieXRlc19oYW5kbGVkLCByYXRlKTsKLQotICAgICAgaWYgKHNyYy0+Yml0cmF0ZSA9PSAwKQotICAgICAgICBzcmMtPmJpdHJhdGUgPSByYXRlOwotICAgICAgZWxzZQotICAgICAgICBzcmMtPmJpdHJhdGUgPSAoKHNyYy0+Yml0cmF0ZSAqIDMpICsgcmF0ZSkgLyA0OwotCi0gICAgICBzcmMtPnByZXZfcnRpbWUgPSBydW5uaW5nX3RpbWU7Ci0gICAgICAqYnl0ZXNfaGFuZGxlZCA9IDA7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9MT0cgKCJSZXNldCBiaXRyYXRlIG1lYXN1cmVtZW50Iik7Ci0gICAgc3JjLT5wcmV2X3J0aW1lID0gcnVubmluZ190aW1lOwotICAgIHNyYy0+Yml0cmF0ZSA9IDA7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi11cGRhdGVfcmVjZWl2ZXJfc3RhdHMgKFJUUFNvdXJjZSAqIHNyYywgUlRQUGFja2V0SW5mbyAqIHBpbmZvLAotICAgIGdib29sZWFuIGlzX3JlY2VpdmUpCi17Ci0gIGd1aW50MTYgc2VxbnIsIGV4cGVjdGVkOwotICBSVFBTb3VyY2VTdGF0cyAqc3RhdHM7Ci0gIGdpbnQxNiBkZWx0YTsKLSAgZ2ludDMyIHBhY2tldF9yYXRlLCBtYXhfZHJvcG91dCwgbWF4X21pc29yZGVyOwotCi0gIHN0YXRzID0gJnNyYy0+c3RhdHM7Ci0KLSAgc2VxbnIgPSBwaW5mby0+c2VxbnVtOwotCi0gIHBhY2tldF9yYXRlID0KLSAgICAgIGdzdF9ydHBfcGFja2V0X3JhdGVfY3R4X3VwZGF0ZSAoJnNyYy0+cGFja2V0X3JhdGVfY3R4LCBwaW5mby0+c2VxbnVtLAotICAgICAgcGluZm8tPnJ0cHRpbWUpOwotICBtYXhfZHJvcG91dCA9Ci0gICAgICBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9nZXRfbWF4X2Ryb3BvdXQgKCZzcmMtPnBhY2tldF9yYXRlX2N0eCwKLSAgICAgIHNyYy0+bWF4X2Ryb3BvdXRfdGltZSk7Ci0gIG1heF9taXNvcmRlciA9Ci0gICAgICBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9nZXRfbWF4X21pc29yZGVyICgmc3JjLT5wYWNrZXRfcmF0ZV9jdHgsCi0gICAgICBzcmMtPm1heF9taXNvcmRlcl90aW1lKTsKLSAgR1NUX1RSQUNFICgiU1NSQyAlMDh4LCBwYWNrZXRfcmF0ZTogJWQsIG1heF9kcm9wb3V0OiAlZCwgbWF4X21pc29yZGVyOiAlZCIsCi0gICAgICBzcmMtPnNzcmMsIHBhY2tldF9yYXRlLCBtYXhfZHJvcG91dCwgbWF4X21pc29yZGVyKTsKLQotICBpZiAoc3RhdHMtPmN5Y2xlcyA9PSAtMSkgewotICAgIEdTVF9ERUJVRyAoInJlY2VpdmVkIGZpcnN0IHBhY2tldCIpOwotICAgIC8qIGZpcnN0IHRpbWUgd2UgaGVhcmQgb2YgdGhpcyBzb3VyY2UgKi8KLSAgICBpbml0X3NlcSAoc3JjLCBzZXFucik7Ci0gICAgc3JjLT5zdGF0cy5tYXhfc2VxID0gc2VxbnIgLSAxOwotICAgIHNyYy0+Y3Vycl9wcm9iYXRpb24gPSBzcmMtPnByb2JhdGlvbjsKLSAgfQotCi0gIGlmIChpc19yZWNlaXZlKSB7Ci0gICAgZXhwZWN0ZWQgPSBzcmMtPnN0YXRzLm1heF9zZXEgKyAxOwotICAgIGRlbHRhID0gZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKGV4cGVjdGVkLCBzZXFucik7Ci0KLSAgICAvKiBpZiB3ZSBhcmUgc3RpbGwgb24gcHJvYmF0aW9uLCBjaGVjayBzZXFudW0gKi8KLSAgICBpZiAoc3JjLT5jdXJyX3Byb2JhdGlvbikgewotICAgICAgLyogd2hlbiBpbiBwcm9iYXRpb24sIHdlIHJlcXVpcmUgY29uc2VjdXRpdmUgc2VxbnVtcyAqLwotICAgICAgaWYgKGRlbHRhID09IDApIHsKLSAgICAgICAgLyogZXhwZWN0ZWQgcGFja2V0ICovCi0gICAgICAgIEdTVF9ERUJVRyAoInByb2JhdGlvbjogc2VxbnIgJWQgPT0gZXhwZWN0ZWQgJWQiLCBzZXFuciwgZXhwZWN0ZWQpOwotICAgICAgICBzcmMtPmN1cnJfcHJvYmF0aW9uLS07Ci0gICAgICAgIGlmIChzZXFuciA8IHN0YXRzLT5tYXhfc2VxKSB7Ci0gICAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyIHdyYXBwZWQgLSBjb3VudCBhbm90aGVyIDY0SyBjeWNsZS4gKi8KLSAgICAgICAgICBzdGF0cy0+Y3ljbGVzICs9IFJUUF9TRVFfTU9EOwotICAgICAgICB9Ci0gICAgICAgIHNyYy0+c3RhdHMubWF4X3NlcSA9IHNlcW5yOwotCi0gICAgICAgIGlmIChzcmMtPmN1cnJfcHJvYmF0aW9uID09IDApIHsKLSAgICAgICAgICBHU1RfREVCVUcgKCJwcm9iYXRpb24gZG9uZSEiKTsKLSAgICAgICAgICBpbml0X3NlcSAoc3JjLCBzZXFucik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR3N0QnVmZmVyICpxOwotCi0gICAgICAgICAgR1NUX0RFQlVHICgicHJvYmF0aW9uICVkOiBxdWV1ZSBwYWNrZXQiLCBzcmMtPmN1cnJfcHJvYmF0aW9uKTsKLSAgICAgICAgICAvKiB3aGVuIHN0aWxsIGluIHByb2JhdGlvbiwga2VlcCBwYWNrZXRzIGluIGEgbGlzdC4gKi8KLSAgICAgICAgICBnX3F1ZXVlX3B1c2hfdGFpbCAoc3JjLT5wYWNrZXRzLCBwaW5mby0+ZGF0YSk7Ci0gICAgICAgICAgcGluZm8tPmRhdGEgPSBOVUxMOwotICAgICAgICAgIC8qIHJlbW92ZSBwYWNrZXRzIGZyb20gcXVldWUgaWYgdGhlcmUgYXJlIHRvbyBtYW55ICovCi0gICAgICAgICAgd2hpbGUgKGdfcXVldWVfZ2V0X2xlbmd0aCAoc3JjLT5wYWNrZXRzKSA+IFJUUF9NQVhfUFJPQkFUSU9OX0xFTikgewotICAgICAgICAgICAgcSA9IGdfcXVldWVfcG9wX2hlYWQgKHNyYy0+cGFja2V0cyk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChxKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiB1bmV4cGVjdGVkIHNlcW51bSBpbiBwcm9iYXRpb24gKi8KLSAgICAgICAgZ290byBwcm9iYXRpb25fc2VxbnVtOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZGVsdGEgPj0gMCAmJiBkZWx0YSA8IG1heF9kcm9wb3V0KSB7Ci0gICAgICAvKiBDbGVhciBiYWQgcGFja2V0cyAqLwotICAgICAgc3RhdHMtPmJhZF9zZXEgPSBSVFBfU0VRX01PRCArIDE7IC8qIHNvIHNlcSA9PSBiYWRfc2VxIGlzIGZhbHNlICovCi0gICAgICBnX3F1ZXVlX2ZvcmVhY2ggKHNyYy0+cGFja2V0cywgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKLSAgICAgIGdfcXVldWVfY2xlYXIgKHNyYy0+cGFja2V0cyk7Ci0KLSAgICAgIC8qIGluIG9yZGVyLCB3aXRoIHBlcm1pc3NpYmxlIGdhcCAqLwotICAgICAgaWYgKHNlcW5yIDwgc3RhdHMtPm1heF9zZXEpIHsKLSAgICAgICAgLyogc2VxdWVuY2UgbnVtYmVyIHdyYXBwZWQgLSBjb3VudCBhbm90aGVyIDY0SyBjeWNsZS4gKi8KLSAgICAgICAgc3RhdHMtPmN5Y2xlcyArPSBSVFBfU0VRX01PRDsKLSAgICAgIH0KLSAgICAgIHN0YXRzLT5tYXhfc2VxID0gc2VxbnI7Ci0gICAgfSBlbHNlIGlmIChkZWx0YSA8IC1tYXhfbWlzb3JkZXIgfHwgZGVsdGEgPj0gbWF4X2Ryb3BvdXQpIHsKLSAgICAgIC8qIHRoZSBzZXF1ZW5jZSBudW1iZXIgbWFkZSBhIHZlcnkgbGFyZ2UganVtcCAqLwotICAgICAgaWYgKHNlcW5yID09IHN0YXRzLT5iYWRfc2VxICYmIHNyYy0+cGFja2V0cy0+aGVhZCkgewotICAgICAgICAvKiB0d28gc2VxdWVudGlhbCBwYWNrZXRzIC0tIGFzc3VtZSB0aGF0IHRoZSBvdGhlciBzaWRlCi0gICAgICAgICAqIHJlc3RhcnRlZCB3aXRob3V0IHRlbGxpbmcgdXMgc28ganVzdCByZS1zeW5jCi0gICAgICAgICAqIChpLmUuLCBwcmV0ZW5kIHRoaXMgd2FzIHRoZSBmaXJzdCBwYWNrZXQpLiAgKi8KLSAgICAgICAgaW5pdF9zZXEgKHNyYywgc2VxbnIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogdW5hY2NlcHRhYmxlIGp1bXAgKi8KLSAgICAgICAgc3RhdHMtPmJhZF9zZXEgPSAoc2VxbnIgKyAxKSAmIChSVFBfU0VRX01PRCAtIDEpOwotICAgICAgICBnX3F1ZXVlX2ZvcmVhY2ggKHNyYy0+cGFja2V0cywgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKLSAgICAgICAgZ19xdWV1ZV9jbGVhciAoc3JjLT5wYWNrZXRzKTsKLSAgICAgICAgZ19xdWV1ZV9wdXNoX3RhaWwgKHNyYy0+cGFja2V0cywgcGluZm8tPmRhdGEpOwotICAgICAgICBwaW5mby0+ZGF0YSA9IE5VTEw7Ci0gICAgICAgIGdvdG8gYmFkX3NlcXVlbmNlOwotICAgICAgfQotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBkZWx0YSA8IDAgJiYgZGVsdGEgPj0gLW1heF9taXNvcmRlciAqLwotICAgICAgLyogQ2xlYXIgYmFkIHBhY2tldHMgKi8KLSAgICAgIHN0YXRzLT5iYWRfc2VxID0gUlRQX1NFUV9NT0QgKyAxOyAvKiBzbyBzZXEgPT0gYmFkX3NlcSBpcyBmYWxzZSAqLwotICAgICAgZ19xdWV1ZV9mb3JlYWNoIChzcmMtPnBhY2tldHMsIChHRnVuYykgZ3N0X2J1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gICAgICBnX3F1ZXVlX2NsZWFyIChzcmMtPnBhY2tldHMpOwotCi0gICAgICAvKiBkdXBsaWNhdGUgb3IgcmVvcmRlcmVkIHBhY2tldCwgd2lsbCBiZSBmaWx0ZXJlZCBieSBqaXR0ZXJidWZmZXIuICovCi0gICAgICBHU1RfSU5GTyAoImR1cGxpY2F0ZSBvciByZW9yZGVyZWQgcGFja2V0IChzZXFuciAldSwgZXhwZWN0ZWQgJXUpIiwKLSAgICAgICAgICBzZXFuciwgZXhwZWN0ZWQpOwotICAgIH0KLSAgfQotCi0gIHNyYy0+c3RhdHMub2N0ZXRzX3JlY2VpdmVkICs9IHBpbmZvLT5wYXlsb2FkX2xlbjsKLSAgc3JjLT5zdGF0cy5ieXRlc19yZWNlaXZlZCArPSBwaW5mby0+Ynl0ZXM7Ci0gIHNyYy0+c3RhdHMucGFja2V0c19yZWNlaXZlZCsrOwotICAvKiBmb3IgdGhlIGJpdHJhdGUgZXN0aW1hdGlvbiAqLwotICBzcmMtPmJ5dGVzX3JlY2VpdmVkICs9IHBpbmZvLT5wYXlsb2FkX2xlbjsKLQotICBHU1RfTE9HICgic2VxICV1LCBQQzogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBPQzogJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIHNlcW5yLCBzcmMtPnN0YXRzLnBhY2tldHNfcmVjZWl2ZWQsIHNyYy0+c3RhdHMub2N0ZXRzX3JlY2VpdmVkKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWRvbmU6Ci0gIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWJhZF9zZXF1ZW5jZToKLSAgewotICAgIEdTVF9XQVJOSU5HCi0gICAgICAgICgidW5hY2NlcHRhYmxlIHNlcW51bSByZWNlaXZlZCAoc2VxbnIgJXUsIGRlbHRhICVkLCBwYWNrZXRfcmF0ZTogJWQsIG1heF9kcm9wb3V0OiAlZCwgbWF4X21pc29yZGVyOiAlZCkiLAotICAgICAgICBzZXFuciwgZGVsdGEsIHBhY2tldF9yYXRlLCBtYXhfZHJvcG91dCwgbWF4X21pc29yZGVyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXByb2JhdGlvbl9zZXFudW06Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoInByb2JhdGlvbjogc2VxbnIgJWQgIT0gZXhwZWN0ZWQgJWQiLCBzZXFuciwgZXhwZWN0ZWQpOwotICAgIHNyYy0+Y3Vycl9wcm9iYXRpb24gPSBzcmMtPnByb2JhdGlvbjsKLSAgICBzcmMtPnN0YXRzLm1heF9zZXEgPSBzZXFucjsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqCi0gKiBydHBfc291cmNlX3Byb2Nlc3NfcnRwOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICogQHBpbmZvOiBhbiAjUlRQUGFja2V0SW5mbwotICoKLSAqIExldCBAc3JjIGhhbmRsZSB0aGUgaW5jb21taW5nIFJUUCBwYWNrZXQgZGVzY3JpYmVkIGluIEBwaW5mby4KLSAqCi0gKiBSZXR1cm5zOiBhICNHc3RGbG93UmV0dXJuLgotICovCi1Hc3RGbG93UmV0dXJuCi1ydHBfc291cmNlX3Byb2Nlc3NfcnRwIChSVFBTb3VyY2UgKiBzcmMsIFJUUFBhY2tldEluZm8gKiBwaW5mbykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYyksIEdTVF9GTE9XX0VSUk9SKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHBpbmZvICE9IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBpZiAoIXVwZGF0ZV9yZWNlaXZlcl9zdGF0cyAoc3JjLCBwaW5mbywgVFJVRSkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIHRoZSBzb3VyY2UgdGhhdCBzZW50IHRoZSBwYWNrZXQgbXVzdCBiZSBhIHNlbmRlciAqLwotICBzcmMtPmlzX3NlbmRlciA9IFRSVUU7Ci0gIHNyYy0+dmFsaWRhdGVkID0gVFJVRTsKLQotICBkb19iaXRyYXRlX2VzdGltYXRpb24gKHNyYywgcGluZm8tPnJ1bm5pbmdfdGltZSwgJnNyYy0+Ynl0ZXNfcmVjZWl2ZWQpOwotCi0gIC8qIGNhbGN1bGF0ZSBqaXR0ZXIgZm9yIHRoZSBzdGF0cyAqLwotICBjYWxjdWxhdGVfaml0dGVyIChzcmMsIHBpbmZvKTsKLQotICAvKiB3ZSdyZSByZWFkeSB0byBwdXNoIHRoZSBSVFAgcGFja2V0IG5vdyAqLwotICByZXN1bHQgPSBwdXNoX3BhY2tldCAoc3JjLCBwaW5mby0+ZGF0YSk7Ci0gIHBpbmZvLT5kYXRhID0gTlVMTDsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIHJ0cF9zb3VyY2VfbWFya19ieWU6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKiBAcmVhc29uOiB0aGUgcmVhc29uIGZvciBsZWF2aW5nCi0gKgotICogTWFyayBAc3JjIGluIHRoZSBCWUUgc3RhdGUuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBzb3VyY2Ugd2FudHMgdG8KLSAqIGxlYXZlIHRoZSBzZXNzc2lvbiBvciB3aGVuIGEgQllFIHBhY2tldHMgaGFzIGJlZW4gcmVjZWl2ZWQuCi0gKgotICogVGhpcyB3aWxsIG1ha2UgdGhlIHNvdXJjZSBpbmFjdGl2ZS4KLSAqLwotdm9pZAotcnRwX3NvdXJjZV9tYXJrX2J5ZSAoUlRQU291cmNlICogc3JjLCBjb25zdCBnY2hhciAqIHJlYXNvbikKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSk7Ci0KLSAgR1NUX0RFQlVHICgibWFya2luZyBTU1JDICUwOHggYXMgQllFLCByZWFzb246ICVzIiwgc3JjLT5zc3JjLAotICAgICAgR1NUX1NUUl9OVUxMIChyZWFzb24pKTsKLQotICAvKiBjb3B5IHRoZSByZWFzb24gYW5kIG1hcmsgYXMgYnllICovCi0gIGdfZnJlZSAoc3JjLT5ieWVfcmVhc29uKTsKLSAgc3JjLT5ieWVfcmVhc29uID0gZ19zdHJkdXAgKHJlYXNvbik7Ci0gIHNyYy0+bWFya2VkX2J5ZSA9IFRSVUU7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9zZW5kX3J0cDoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqIEBkYXRhOiBhbiBSVFAgYnVmZmVyIG9yIGEgbGlzdCBvZiBSVFAgYnVmZmVycwotICogQGlzX2xpc3Q6IGlmIEBkYXRhIGlzIGEgYnVmZmVyIG9yIGxpc3QKLSAqIEBydW5uaW5nX3RpbWU6IHRoZSBydW5uaW5nIHRpbWUgb2YgQGRhdGEKLSAqCi0gKiBTZW5kIEBkYXRhIChhbiBSVFAgYnVmZmVyIG9yIGxpc3Qgb2YgYnVmZmVycykgb3JpZ2luYXRpbmcgZnJvbSBAc3JjLgotICogVGhpcyB3aWxsIG1ha2UgQHNyYyBhIHNlbmRlci4gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgQGRhdGEgYW5kCi0gKiBtb2RpZmllcyB0aGUgU1NSQyBpbiB0aGUgUlRQIHBhY2tldCB0byB0aGF0IG9mIEBzcmMgd2hlbiBuZWVkZWQuCi0gKgotICogUmV0dXJuczogYSAjR3N0Rmxvd1JldHVybi4KLSAqLwotR3N0Rmxvd1JldHVybgotcnRwX3NvdXJjZV9zZW5kX3J0cCAoUlRQU291cmNlICogc3JjLCBSVFBQYWNrZXRJbmZvICogcGluZm8pCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzdWx0OwotICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lOwotICBndWludDMyIHJ0cHRpbWU7Ci0gIGd1aW50NjQgZXh0X3J0cHRpbWU7Ci0gIGd1aW50NjQgcnRfZGlmZiwgcnRwX2RpZmY7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYyksIEdTVF9GTE9XX0VSUk9SKTsKLQotICAvKiB3ZSBhcmUgYSBzZW5kZXIgbm93ICovCi0gIHNyYy0+aXNfc2VuZGVyID0gVFJVRTsKLQotICAvKiB3ZSBhcmUgYWxzbyBhIHJlY2VpdmVyIG9mIG91ciBwYWNrZXRzICovCi0gIGlmICghdXBkYXRlX3JlY2VpdmVyX3N0YXRzIChzcmMsIHBpbmZvLCBGQUxTRSkpCi0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIHVwZGF0ZSBzdGF0cyBmb3IgdGhlIFNSICovCi0gIHNyYy0+c3RhdHMucGFja2V0c19zZW50ICs9IHBpbmZvLT5wYWNrZXRzOwotICBzcmMtPnN0YXRzLm9jdGV0c19zZW50ICs9IHBpbmZvLT5wYXlsb2FkX2xlbjsKLSAgc3JjLT5ieXRlc19zZW50ICs9IHBpbmZvLT5wYXlsb2FkX2xlbjsKLQotICBydW5uaW5nX3RpbWUgPSBwaW5mby0+cnVubmluZ190aW1lOwotCi0gIGRvX2JpdHJhdGVfZXN0aW1hdGlvbiAoc3JjLCBydW5uaW5nX3RpbWUsICZzcmMtPmJ5dGVzX3NlbnQpOwotCi0gIHJ0cHRpbWUgPSBwaW5mby0+cnRwdGltZTsKLQotICBleHRfcnRwdGltZSA9IHNyYy0+bGFzdF9ydHB0aW1lOwotICBleHRfcnRwdGltZSA9IGdzdF9ydHBfYnVmZmVyX2V4dF90aW1lc3RhbXAgKCZleHRfcnRwdGltZSwgcnRwdGltZSk7Ci0KLSAgR1NUX0xPRyAoIlNTUkMgJTA4eCwgUlRQICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgcnVubmluZ190aW1lICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIHNyYy0+c3NyYywgZXh0X3J0cHRpbWUsIEdTVF9USU1FX0FSR1MgKHJ1bm5pbmdfdGltZSkpOwotCi0gIGlmIChleHRfcnRwdGltZSA+IHNyYy0+bGFzdF9ydHB0aW1lKSB7Ci0gICAgcnRwX2RpZmYgPSBleHRfcnRwdGltZSAtIHNyYy0+bGFzdF9ydHB0aW1lOwotICAgIHJ0X2RpZmYgPSBydW5uaW5nX3RpbWUgLSBzcmMtPmxhc3RfcnRpbWU7Ci0KLSAgICAvKiBjYWxjIHRoZSBkaWZmIHNvIHdlIGNhbiBkZXRlY3QgZHJpZnQgYXQgdGhlIHNlbmRlci4gVGhpcyBjYW4gYWxzbyBiZSB1c2VkCi0gICAgICogdG8gZ3Vlc3RpbWF0ZSB0aGUgY2xvY2sgcmF0ZSBpZiB0aGUgTlRQIHRpbWUgaXMgbG9ja2VkIHRvIHRoZSBSVFAKLSAgICAgKiB0aW1lc3RhbXBzIChhcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBjYXB0dXJlIGRldmljZSBpcyBwcm92aWRpbmcgdGhlIGNsb2NrKS4gKi8KLSAgICBHU1RfTE9HICgiU1NSQyAlMDh4LCBkaWZmIFJUUCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGRpZmYgcnVubmluZ190aW1lICUiCi0gICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgc3JjLT5zc3JjLCBydHBfZGlmZiwgR1NUX1RJTUVfQVJHUyAocnRfZGlmZikpOwotICB9Ci0KLSAgLyogd2Uga2VlcCB0cmFjayBvZiB0aGUgbGFzdCByZWNlaXZlZCBSVFAgdGltZXN0YW1wIGFuZCB0aGUgY29ycmVzcG9uZGluZwotICAgKiBidWZmZXIgcnVubmluZ190aW1lIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGlzIGluZm8gd2hlbiBjb25zdHJ1Y3RpbmcgU1IgcmVwb3J0cyAqLwotICBzcmMtPmxhc3RfcnRpbWUgPSBydW5uaW5nX3RpbWU7Ci0gIHNyYy0+bGFzdF9ydHB0aW1lID0gZXh0X3J0cHRpbWU7Ci0KLSAgLyogcHVzaCBwYWNrZXQgKi8KLSAgaWYgKCFzcmMtPmNhbGxiYWNrcy5wdXNoX3J0cCkKLSAgICBnb3RvIG5vX2NhbGxiYWNrOwotCi0gIEdTVF9MT0cgKCJwdXNoaW5nIFJUUCAlcyAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgcGluZm8tPmlzX2xpc3QgPyAibGlzdCIgOiAicGFja2V0Iiwgc3JjLT5zdGF0cy5wYWNrZXRzX3NlbnQpOwotCi0gIHJlc3VsdCA9IHNyYy0+Y2FsbGJhY2tzLnB1c2hfcnRwIChzcmMsIHBpbmZvLT5kYXRhLCBzcmMtPnVzZXJfZGF0YSk7Ci0gIHBpbmZvLT5kYXRhID0gTlVMTDsKLQotICByZXR1cm4gcmVzdWx0OwotCi0gIC8qIEVSUk9SUyAqLwotbm9fY2FsbGJhY2s6Ci0gIHsKLSAgICBHU1RfV0FSTklORyAoIm5vIGNhbGxiYWNrIGluc3RhbGxlZCwgZHJvcHBpbmcgcGFja2V0Iik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9wcm9jZXNzX3NyOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICogQHRpbWU6IHRpbWUgb2YgcGFja2V0IGFycml2YWwKLSAqIEBudHB0aW1lOiB0aGUgTlRQIHRpbWUgKGluIE5UUCBUaW1lc3RhbXAgRm9ybWF0LCAzMi4zMiBmaXhlZCBwb2ludCkKLSAqIEBydHB0aW1lOiB0aGUgUlRQIHRpbWUgKGluIGNsb2NrIHJhdGUgdW5pdHMpCi0gKiBAcGFja2V0X2NvdW50OiB0aGUgcGFja2V0IGNvdW50Ci0gKiBAb2N0ZXRfY291bnQ6IHRoZSBvY3RldCBjb3VudAotICoKLSAqIFVwZGF0ZSB0aGUgc2VuZGVyIHJlcG9ydCBpbiBAc3JjLgotICovCi12b2lkCi1ydHBfc291cmNlX3Byb2Nlc3Nfc3IgKFJUUFNvdXJjZSAqIHNyYywgR3N0Q2xvY2tUaW1lIHRpbWUsIGd1aW50NjQgbnRwdGltZSwKLSAgICBndWludDMyIHJ0cHRpbWUsIGd1aW50MzIgcGFja2V0X2NvdW50LCBndWludDMyIG9jdGV0X2NvdW50KQotewotICBSVFBTZW5kZXJSZXBvcnQgKmN1cnI7Ci0gIGdpbnQgY3VycmlkeDsKLQotICBnX3JldHVybl9pZl9mYWlsIChSVFBfSVNfU09VUkNFIChzcmMpKTsKLQotICBHU1RfREVCVUcgKCJnb3QgU1IgcGFja2V0OiBTU1JDICUwOHgsIE5UUCAlMDh4OiUwOHgsIFJUUCAlIiBHX0dVSU5UMzJfRk9STUFUCi0gICAgICAiLCBQQyAlIiBHX0dVSU5UMzJfRk9STUFUICIsIE9DICUiIEdfR1VJTlQzMl9GT1JNQVQsIHNyYy0+c3NyYywKLSAgICAgIChndWludDMyKSAobnRwdGltZSA+PiAzMiksIChndWludDMyKSAobnRwdGltZSAmIDB4ZmZmZmZmZmYpLCBydHB0aW1lLAotICAgICAgcGFja2V0X2NvdW50LCBvY3RldF9jb3VudCk7Ci0KLSAgY3VycmlkeCA9IHNyYy0+c3RhdHMuY3Vycl9zciBeIDE7Ci0gIGN1cnIgPSAmc3JjLT5zdGF0cy5zcltjdXJyaWR4XTsKLQotICAvKiB0aGlzIGlzIGEgc2VuZGVyIG5vdyAqLwotICBzcmMtPmlzX3NlbmRlciA9IFRSVUU7Ci0KLSAgLyogdXBkYXRlIGN1cnJlbnQgKi8KLSAgY3Vyci0+aXNfdmFsaWQgPSBUUlVFOwotICBjdXJyLT5udHB0aW1lID0gbnRwdGltZTsKLSAgY3Vyci0+cnRwdGltZSA9IHJ0cHRpbWU7Ci0gIGN1cnItPnBhY2tldF9jb3VudCA9IHBhY2tldF9jb3VudDsKLSAgY3Vyci0+b2N0ZXRfY291bnQgPSBvY3RldF9jb3VudDsKLSAgY3Vyci0+dGltZSA9IHRpbWU7Ci0KLSAgLyogbWFrZSBjdXJyZW50ICovCi0gIHNyYy0+c3RhdHMuY3Vycl9zciA9IGN1cnJpZHg7Ci0KLSAgc3JjLT5zdGF0cy5wcmV2X3J0Y3B0aW1lID0gc3JjLT5zdGF0cy5sYXN0X3J0Y3B0aW1lOwotICBzcmMtPnN0YXRzLmxhc3RfcnRjcHRpbWUgPSB0aW1lOwotfQotCi0vKioKLSAqIHJ0cF9zb3VyY2VfcHJvY2Vzc19yYjoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqIEBudHBuc3RpbWU6IHRoZSBjdXJyZW50IHRpbWUgaW4gbmFub3NlY29uZHMgc2luY2UgMTk3MAotICogQGZyYWN0aW9ubG9zdDogZnJhY3Rpb24gbG9zdCBzaW5jZSBsYXN0IFNSL1JSCi0gKiBAcGFja2V0c2xvc3Q6IHRoZSBjdW11bGF0aXZlIG51bWJlciBvZiBwYWNrZXRzIGxvc3QKLSAqIEBleHRoaWdoZXN0c2VxOiB0aGUgZXh0ZW5kZWQgbGFzdCBzZXF1ZW5jZSBudW1iZXIgcmVjZWl2ZWQKLSAqIEBqaXR0ZXI6IHRoZSBpbnRlcmFycml2YWwgaml0dGVyIChpbiBjbG9jayByYXRlIHVuaXRzKQotICogQGxzcjogdGhlIHRpbWUgb2YgdGhlIGxhc3QgU1IgcGFja2V0IG9uIHRoaXMgc291cmNlCi0gKiAgIChpbiBOVFAgU2hvcnQgRm9ybWF0LCAxNi4xNiBmaXhlZCBwb2ludCkKLSAqIEBkbHNyOiB0aGUgZGVsYXkgc2luY2UgdGhlIGxhc3QgU1IgcGFja2V0Ci0gKiAgIChpbiBOVFAgU2hvcnQgRm9ybWF0LCAxNi4xNiBmaXhlZCBwb2ludCkKLSAqCi0gKiBVcGRhdGUgdGhlIHJlcG9ydCBibG9jayBpbiBAc3JjLgotICovCi12b2lkCi1ydHBfc291cmNlX3Byb2Nlc3NfcmIgKFJUUFNvdXJjZSAqIHNyYywgZ3VpbnQ2NCBudHBuc3RpbWUsCi0gICAgZ3VpbnQ4IGZyYWN0aW9ubG9zdCwgZ2ludDMyIHBhY2tldHNsb3N0LCBndWludDMyIGV4dGhpZ2hlc3RzZXEsCi0gICAgZ3VpbnQzMiBqaXR0ZXIsIGd1aW50MzIgbHNyLCBndWludDMyIGRsc3IpCi17Ci0gIFJUUFJlY2VpdmVyUmVwb3J0ICpjdXJyOwotICBnaW50IGN1cnJpZHg7Ci0gIGd1aW50MzIgbnRwLCBBOwotICBndWludDY0IGZfbnRwOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYykpOwotCi0gIEdTVF9ERUJVRyAoImdvdCBSQiBwYWNrZXQ6IFNTUkMgJTA4eCwgRkwgJTJ4LCBQTCAlZCwgSFMgJSIgR19HVUlOVDMyX0ZPUk1BVAotICAgICAgIiwgaml0dGVyICUiIEdfR1VJTlQzMl9GT1JNQVQgIiwgTFNSICUwNHg6JTA0eCwgRExTUiAlMDR4OiUwNHgiLAotICAgICAgc3JjLT5zc3JjLCBmcmFjdGlvbmxvc3QsIHBhY2tldHNsb3N0LCBleHRoaWdoZXN0c2VxLCBqaXR0ZXIsIGxzciA+PiAxNiwKLSAgICAgIGxzciAmIDB4ZmZmZiwgZGxzciA+PiAxNiwgZGxzciAmIDB4ZmZmZik7Ci0KLSAgY3VycmlkeCA9IHNyYy0+c3RhdHMuY3Vycl9yciBeIDE7Ci0gIGN1cnIgPSAmc3JjLT5zdGF0cy5ycltjdXJyaWR4XTsKLQotICAvKiB1cGRhdGUgY3VycmVudCAqLwotICBjdXJyLT5pc192YWxpZCA9IFRSVUU7Ci0gIGN1cnItPmZyYWN0aW9ubG9zdCA9IGZyYWN0aW9ubG9zdDsKLSAgY3Vyci0+cGFja2V0c2xvc3QgPSBwYWNrZXRzbG9zdDsKLSAgY3Vyci0+ZXh0aGlnaGVzdHNlcSA9IGV4dGhpZ2hlc3RzZXE7Ci0gIGN1cnItPmppdHRlciA9IGppdHRlcjsKLSAgY3Vyci0+bHNyID0gbHNyOwotICBjdXJyLT5kbHNyID0gZGxzcjsKLQotICAvKiBjb252ZXJ0IHRoZSBOVFAgdGltZSBpbiBuYW5vc2Vjb25kcyB0byAzMi4zMiBmaXhlZCBwb2ludCAqLwotICBmX250cCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAobnRwbnN0aW1lLCAoMUxMIDw8IDMyKSwgR1NUX1NFQ09ORCk7Ci0gIC8qIGNhbGN1bGF0ZSByb3VuZCB0cmlwLCByb3VuZCB0aGUgdGltZSB1cCAqLwotICBudHAgPSAoKGZfbnRwICsgMHhmZmZmKSA+PiAxNikgJiAweGZmZmZmZmZmOwotCi0gIEEgPSBkbHNyICsgbHNyOwotICBpZiAoQSA+IDAgJiYgbnRwID4gQSkKLSAgICBBID0gbnRwIC0gQTsKLSAgZWxzZQotICAgIEEgPSAwOwotICBjdXJyLT5yb3VuZF90cmlwID0gQTsKLQotICBHU1RfREVCVUcgKCJOVFAgJTA0eDolMDR4LCByb3VuZCB0cmlwICUwNHg6JTA0eCIsIG50cCA+PiAxNiwgbnRwICYgMHhmZmZmLAotICAgICAgQSA+PiAxNiwgQSAmIDB4ZmZmZik7Ci0KLSAgLyogbWFrZSBjdXJyZW50ICovCi0gIHNyYy0+c3RhdHMuY3Vycl9yciA9IGN1cnJpZHg7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9nZXRfbmV3X3NyOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICogQG50cG5zdGltZTogdGhlIGN1cnJlbnQgdGltZSBpbiBuYW5vc2Vjb25kcyBzaW5jZSAxOTcwCi0gKiBAcnVubmluZ190aW1lOiB0aGUgY3VycmVudCBydW5uaW5nX3RpbWUgb2YgdGhlIHBpcGVsaW5lCi0gKiBAbnRwdGltZTogdGhlIE5UUCB0aW1lIChpbiBOVFAgVGltZXN0YW1wIEZvcm1hdCwgMzIuMzIgZml4ZWQgcG9pbnQpCi0gKiBAcnRwdGltZTogdGhlIFJUUCB0aW1lIGNvcnJlc3BvbmRpbmcgdG8gQG50cHRpbWUgKGluIGNsb2NrIHJhdGUgdW5pdHMpCi0gKiBAcGFja2V0X2NvdW50OiB0aGUgcGFja2V0IGNvdW50Ci0gKiBAb2N0ZXRfY291bnQ6IHRoZSBvY3RldCBjb3VudAotICoKLSAqIEdldCBuZXcgdmFsdWVzIHRvIHB1dCBpbnRvIGEgbmV3IFNSIHJlcG9ydCBmcm9tIHRoaXMgc291cmNlLgotICoKLSAqIEBydW5uaW5nX3RpbWUgYW5kIEBudHBuc3RpbWUgYXJlIGNhcHR1cmVkIGF0IHRoZSBzYW1lIHRpbWUgYW5kIHJlcHJlc2VudCB0aGUKLSAqIHJ1bm5pbmcgdGltZSBvZiB0aGUgcGlwZWxpbmUgY2xvY2sgYW5kIHRoZSBhYnNvbHV0ZSBjdXJyZW50IHN5c3RlbSB0aW1lIGluCi0gKiBuYW5vc2Vjb25kcyByZXNwZWN0aXZlbHkuIFRvZ2V0aGVyIHdpdGggdGhlIGxhc3QgcnVubmluZ190aW1lIGFuZCBSVFAgdGltZXN0YW1wCi0gKiB3ZSBoYXZlIG9ic2VydmVkIGluIHRoZSBzb3VyY2UsIHdlIGNhbiBnZW5lcmF0ZSBAbnRwdGltZSBhbmQgQHJ0cHRpbWUgZm9yIGFuIFNSCi0gKiBwYWNrZXQuIEBudHB0aW1lIGlzIGJhc2ljYWxseSB0aGUgZml4ZWQgcG9pbnQgcmVwcmVzZW50YXRpb24gb2YgQG50cG5zdGltZQotICogYW5kIEBydHB0aW1lIHRoZSBhc3NvY2lhdGVkIFJUUCB0aW1lc3RhbXAuCi0gKgotICogUmV0dXJuczogJVRSVUUgb24gc3VjY2Vzcy4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zb3VyY2VfZ2V0X25ld19zciAoUlRQU291cmNlICogc3JjLCBndWludDY0IG50cG5zdGltZSwKLSAgICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lLCBndWludDY0ICogbnRwdGltZSwgZ3VpbnQzMiAqIHJ0cHRpbWUsCi0gICAgZ3VpbnQzMiAqIHBhY2tldF9jb3VudCwgZ3VpbnQzMiAqIG9jdGV0X2NvdW50KQotewotICBndWludDY0IHRfcnRwOwotICBndWludDY0IHRfY3VycmVudF9udHA7Ci0gIEdzdENsb2NrVGltZURpZmYgZGlmZjsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoUlRQX0lTX1NPVVJDRSAoc3JjKSwgRkFMU0UpOwotCi0gIC8qIFdlIGxhc3Qgc2F3IGEgYnVmZmVyIHdpdGggbGFzdF9ydHB0aW1lIGF0IGxhc3RfcnRpbWUuIEdpdmVuIGEgcnVubmluZ190aW1lCi0gICAqIGFuZCBhbiBOVFAgdGltZSwgd2UgY2FuIHNjYWxlIHRoZSBSVFAgdGltZXN0YW1wcyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlCi0gICAqIGdpdmVuIE5UUCB0aW1lLiAgZm9yIHNjYWxpbmcsIHdlIGFzc3VtZSB0aGF0IHRoZSBzbG9wZSBvZiB0aGUgcnRwdGltZSB2cwotICAgKiBydW5uaW5nX3RpbWUgdnMgbnRwdGltZSBjdXJ2ZSBpcyBjbG9zZSB0byAxLCB3aGljaCBpcyBjZXJ0YWlubHkKLSAgICogc3VmZmljaWVudCBmb3IgdGhlIGZyZXF1ZW5jeSBhdCB3aGljaCB3ZSByZXBvcnQgU1IgYW5kIHRoZSByYXRlIHdlIHNlbmQKLSAgICogb3V0IFJUUCBwYWNrZXRzLiAqLwotICB0X3J0cCA9IHNyYy0+bGFzdF9ydHB0aW1lOwotCi0gIEdTVF9ERUJVRyAoImxhc3RfcnRpbWUgJSIgR1NUX1RJTUVfRk9STUFUICIsIGxhc3RfcnRwdGltZSAlIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAoc3JjLT5sYXN0X3J0aW1lKSwgdF9ydHApOwotCi0gIGlmIChzcmMtPmNsb2NrX3JhdGUgIT0gLTEpIHsKLSAgICAvKiBnZXQgdGhlIGRpZmYgYmV0d2VlbiB0aGUgY2xvY2sgcnVubmluZ190aW1lIGFuZCB0aGUgYnVmZmVyIHJ1bm5pbmdfdGltZS4KLSAgICAgKiBUaGlzIGlzIHRoZSBlbGFwc2VkIHRpbWUsIGFzIG1lYXN1cmVkIGFnYWluc3QgdGhlIHBpcGVsaW5lIGNsb2NrLCBiZXR3ZWVuCi0gICAgICogd2hlbiB0aGUgcnRwIHRpbWVzdGFtcCB3YXMgb2JzZXJ2ZWQgYW5kIHRoZSBjdXJyZW50IHJ1bm5pbmdfdGltZS4KLSAgICAgKgotICAgICAqIFdlIG5lZWQgdG8gYXBwbHkgdGhpcyBkaWZmIHRvIHRoZSBSVFAgdGltZXN0YW1wIHRvIGdldCB0aGUgUlRQIHRpbWVzdGFtcAotICAgICAqIGZvciB0aGUgZ2l2ZW4gbnRwbnN0aW1lLiAqLwotICAgIGRpZmYgPSBHU1RfQ0xPQ0tfRElGRiAoc3JjLT5sYXN0X3J0aW1lLCBydW5uaW5nX3RpbWUpOwotICAgIEdTVF9ERUJVRyAoInJ1bm5pbmdfdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZGlmZiAlIiBHU1RfU1RJTUVfRk9STUFULAotICAgICAgICBHU1RfVElNRV9BUkdTIChydW5uaW5nX3RpbWUpLCBHU1RfU1RJTUVfQVJHUyAoZGlmZikpOwotCi0gICAgLyogbm93IHRyYW5zbGF0ZSB0aGUgZGlmZiB0byBSVFAgdGltZSwgaGFuZGxlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBjYXNlcy4KLSAgICAgKiBJZiB0aGVyZSBpcyBubyBkaWZmLCB3ZSBhbHJlYWR5IHNldCBydHB0aW1lIGNvcnJlY3RseSBhYm92ZS4gKi8KLSAgICBpZiAoZGlmZiA+IDApIHsKLSAgICAgIHRfcnRwICs9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGRpZmYsIHNyYy0+Y2xvY2tfcmF0ZSwgR1NUX1NFQ09ORCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRpZmYgPSAtZGlmZjsKLSAgICAgIHRfcnRwIC09IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGRpZmYsIHNyYy0+Y2xvY2tfcmF0ZSwgR1NUX1NFQ09ORCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgibm8gY2xvY2stcmF0ZSwgY2Fubm90IGludGVycG9sYXRlIHJ0cCB0aW1lIGZvciBTU1JDICV1IiwKLSAgICAgICAgc3JjLT5zc3JjKTsKLSAgfQotCi0gIC8qIGNvbnZlcnQgdGhlIE5UUCB0aW1lIGluIG5hbm9zZWNvbmRzIHRvIDMyLjMyIGZpeGVkIHBvaW50ICovCi0gIHRfY3VycmVudF9udHAgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG50cG5zdGltZSwgKDFMTCA8PCAzMiksIEdTVF9TRUNPTkQpOwotCi0gIEdTVF9ERUJVRyAoIk5UUCAlMDh4OiUwOHgsIFJUUCAlIiBHX0dVSU5UMzJfRk9STUFULAotICAgICAgKGd1aW50MzIpICh0X2N1cnJlbnRfbnRwID4+IDMyKSwgKGd1aW50MzIpICh0X2N1cnJlbnRfbnRwICYgMHhmZmZmZmZmZiksCi0gICAgICAoZ3VpbnQzMikgdF9ydHApOwotCi0gIGlmIChudHB0aW1lKQotICAgICpudHB0aW1lID0gdF9jdXJyZW50X250cDsKLSAgaWYgKHJ0cHRpbWUpCi0gICAgKnJ0cHRpbWUgPSB0X3J0cDsKLSAgaWYgKHBhY2tldF9jb3VudCkKLSAgICAqcGFja2V0X2NvdW50ID0gc3JjLT5zdGF0cy5wYWNrZXRzX3NlbnQ7Ci0gIGlmIChvY3RldF9jb3VudCkKLSAgICAqb2N0ZXRfY291bnQgPSBzcmMtPnN0YXRzLm9jdGV0c19zZW50OwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKioKLSAqIHJ0cF9zb3VyY2VfZ2V0X25ld19yYjoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqIEB0aW1lOiB0aGUgY3VycmVudCB0aW1lIG9mIHRoZSBzeXN0ZW0gY2xvY2sKLSAqIEBmcmFjdGlvbmxvc3Q6IGZyYWN0aW9uIGxvc3Qgc2luY2UgbGFzdCBTUi9SUgotICogQHBhY2tldHNsb3N0OiB0aGUgY3VtdWxhdGl2ZSBudW1iZXIgb2YgcGFja2V0cyBsb3N0Ci0gKiBAZXh0aGlnaGVzdHNlcTogdGhlIGV4dGVuZGVkIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHJlY2VpdmVkCi0gKiBAaml0dGVyOiB0aGUgaW50ZXJhcnJpdmFsIGppdHRlciAoaW4gY2xvY2sgcmF0ZSB1bml0cykKLSAqIEBsc3I6IHRoZSB0aW1lIG9mIHRoZSBsYXN0IFNSIHBhY2tldCBvbiB0aGlzIHNvdXJjZQotICogICAoaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gKiBAZGxzcjogdGhlIGRlbGF5IHNpbmNlIHRoZSBsYXN0IFNSIHBhY2tldAotICogICAoaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gKgotICogR2V0IG5ldyB2YWx1ZXMgdG8gcHV0IGludG8gYSBuZXcgcmVwb3J0IGJsb2NrIGZyb20gdGhpcyBzb3VyY2UuCi0gKgotICogUmV0dXJuczogJVRSVUUgb24gc3VjY2Vzcy4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zb3VyY2VfZ2V0X25ld19yYiAoUlRQU291cmNlICogc3JjLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBndWludDggKiBmcmFjdGlvbmxvc3QsIGdpbnQzMiAqIHBhY2tldHNsb3N0LCBndWludDMyICogZXh0aGlnaGVzdHNlcSwKLSAgICBndWludDMyICogaml0dGVyLCBndWludDMyICogbHNyLCBndWludDMyICogZGxzcikKLXsKLSAgUlRQU291cmNlU3RhdHMgKnN0YXRzOwotICBndWludDY0IGV4dGVuZGVkX21heCwgZXhwZWN0ZWQ7Ci0gIGd1aW50NjQgZXhwZWN0ZWRfaW50ZXJ2YWwsIHJlY2VpdmVkX2ludGVydmFsLCBudHB0aW1lOwotICBnaW50NjQgbG9zdCwgbG9zdF9pbnRlcnZhbDsKLSAgZ3VpbnQzMiBmcmFjdGlvbiwgTFNSLCBETFNSOwotICBHc3RDbG9ja1RpbWUgc3JfdGltZTsKLQotICBzdGF0cyA9ICZzcmMtPnN0YXRzOwotCi0gIGV4dGVuZGVkX21heCA9IHN0YXRzLT5jeWNsZXMgKyBzdGF0cy0+bWF4X3NlcTsKLSAgZXhwZWN0ZWQgPSBleHRlbmRlZF9tYXggLSBzdGF0cy0+YmFzZV9zZXEgKyAxOwotCi0gIEdTVF9ERUJVRyAoImV4dF9tYXggJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBleHBlY3RlZCAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCByZWNlaXZlZCAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGJhc2Vfc2VxICUiIEdfR1VJTlQzMl9GT1JNQVQsCi0gICAgICBleHRlbmRlZF9tYXgsIGV4cGVjdGVkLCBzdGF0cy0+cGFja2V0c19yZWNlaXZlZCwgc3RhdHMtPmJhc2Vfc2VxKTsKLQotICBsb3N0ID0gZXhwZWN0ZWQgLSBzdGF0cy0+cGFja2V0c19yZWNlaXZlZDsKLSAgbG9zdCA9IENMQU1QIChsb3N0LCAtMHg4MDAwMDAsIDB4N2ZmZmZmKTsKLQotICBleHBlY3RlZF9pbnRlcnZhbCA9IGV4cGVjdGVkIC0gc3RhdHMtPnByZXZfZXhwZWN0ZWQ7Ci0gIHN0YXRzLT5wcmV2X2V4cGVjdGVkID0gZXhwZWN0ZWQ7Ci0gIHJlY2VpdmVkX2ludGVydmFsID0gc3RhdHMtPnBhY2tldHNfcmVjZWl2ZWQgLSBzdGF0cy0+cHJldl9yZWNlaXZlZDsKLSAgc3RhdHMtPnByZXZfcmVjZWl2ZWQgPSBzdGF0cy0+cGFja2V0c19yZWNlaXZlZDsKLQotICBsb3N0X2ludGVydmFsID0gZXhwZWN0ZWRfaW50ZXJ2YWwgLSByZWNlaXZlZF9pbnRlcnZhbDsKLQotICBpZiAoZXhwZWN0ZWRfaW50ZXJ2YWwgPT0gMCB8fCBsb3N0X2ludGVydmFsIDw9IDApCi0gICAgZnJhY3Rpb24gPSAwOwotICBlbHNlCi0gICAgZnJhY3Rpb24gPSAobG9zdF9pbnRlcnZhbCA8PCA4KSAvIGV4cGVjdGVkX2ludGVydmFsOwotCi0gIEdTVF9ERUJVRyAoImFkZCBSUiBmb3IgU1NSQyAlMDh4Iiwgc3JjLT5zc3JjKTsKLSAgLyogd2Ugc2NhbGVkIHRoZSBqaXR0ZXIgdXAgZm9yIGFkZGl0aW9uYWwgcHJlY2lzaW9uICovCi0gIEdTVF9ERUJVRyAoImZyYWN0aW9uICUiIEdfR1VJTlQzMl9GT1JNQVQgIiwgbG9zdCAlIiBHX0dJTlQ2NF9GT1JNQVQKLSAgICAgICIsIGV4dHNlcSAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGppdHRlciAlZCIsIGZyYWN0aW9uLCBsb3N0LAotICAgICAgZXh0ZW5kZWRfbWF4LCBzdGF0cy0+aml0dGVyID4+IDQpOwotCi0gIGlmIChydHBfc291cmNlX2dldF9sYXN0X3NyIChzcmMsICZzcl90aW1lLCAmbnRwdGltZSwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKLSAgICBHc3RDbG9ja1RpbWUgZGlmZjsKLQotICAgIC8qIExTUiBpcyBtaWRkbGUgMzIgYml0cyBvZiB0aGUgbGFzdCBudHB0aW1lICovCi0gICAgTFNSID0gKG50cHRpbWUgPj4gMTYpICYgMHhmZmZmZmZmZjsKLSAgICBkaWZmID0gdGltZSAtIHNyX3RpbWU7Ci0gICAgR1NUX0RFQlVHICgibGFzdCBTUiB0aW1lIGRpZmYgJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChkaWZmKSk7Ci0gICAgLyogRExTUiwgZGVsYXkgc2luY2UgbGFzdCBTUiBpcyBleHByZXNzZWQgaW4gMS82NTUzNiBzZWNvbmQgdW5pdHMgKi8KLSAgICBETFNSID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoZGlmZiwgNjU1MzYsIEdTVF9TRUNPTkQpOwotICB9IGVsc2UgewotICAgIC8qIE5vIHZhbGlkIFNSIHJlY2VpdmVkLCBMU1IvRExTUiBhcmUgc2V0IHRvIDAgdGhlbiAqLwotICAgIEdTVF9ERUJVRyAoIm5vIHZhbGlkIFNSIHJlY2VpdmVkIik7Ci0gICAgTFNSID0gMDsKLSAgICBETFNSID0gMDsKLSAgfQotICBHU1RfREVCVUcgKCJMU1IgJTA0eDolMDR4LCBETFNSICUwNHg6JTA0eCIsIExTUiA+PiAxNiwgTFNSICYgMHhmZmZmLAotICAgICAgRExTUiA+PiAxNiwgRExTUiAmIDB4ZmZmZik7Ci0KLSAgaWYgKGZyYWN0aW9ubG9zdCkKLSAgICAqZnJhY3Rpb25sb3N0ID0gZnJhY3Rpb247Ci0gIGlmIChwYWNrZXRzbG9zdCkKLSAgICAqcGFja2V0c2xvc3QgPSBsb3N0OwotICBpZiAoZXh0aGlnaGVzdHNlcSkKLSAgICAqZXh0aGlnaGVzdHNlcSA9IGV4dGVuZGVkX21heDsKLSAgaWYgKGppdHRlcikKLSAgICAqaml0dGVyID0gc3RhdHMtPmppdHRlciA+PiA0OwotICBpZiAobHNyKQotICAgICpsc3IgPSBMU1I7Ci0gIGlmIChkbHNyKQotICAgICpkbHNyID0gRExTUjsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoqCi0gKiBydHBfc291cmNlX2dldF9sYXN0X3NyOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICogQHRpbWU6IHRpbWUgb2YgcGFja2V0IGFycml2YWwKLSAqIEBudHB0aW1lOiB0aGUgTlRQIHRpbWUgKGluIE5UUCBUaW1lc3RhbXAgRm9ybWF0LCAzMi4zMiBmaXhlZCBwb2ludCkKLSAqIEBydHB0aW1lOiB0aGUgUlRQIHRpbWUgKGluIGNsb2NrIHJhdGUgdW5pdHMpCi0gKiBAcGFja2V0X2NvdW50OiB0aGUgcGFja2V0IGNvdW50Ci0gKiBAb2N0ZXRfY291bnQ6IHRoZSBvY3RldCBjb3VudAotICoKLSAqIEdldCB0aGUgdmFsdWVzIG9mIHRoZSBsYXN0IHNlbmRlciByZXBvcnQgYXMgc2V0IHdpdGggcnRwX3NvdXJjZV9wcm9jZXNzX3NyKCkuCi0gKgotICogUmV0dXJuczogJVRSVUUgaWYgdGhlcmUgd2FzIGEgdmFsaWQgU1IgcmVwb3J0LgotICovCi1nYm9vbGVhbgotcnRwX3NvdXJjZV9nZXRfbGFzdF9zciAoUlRQU291cmNlICogc3JjLCBHc3RDbG9ja1RpbWUgKiB0aW1lLCBndWludDY0ICogbnRwdGltZSwKLSAgICBndWludDMyICogcnRwdGltZSwgZ3VpbnQzMiAqIHBhY2tldF9jb3VudCwgZ3VpbnQzMiAqIG9jdGV0X2NvdW50KQotewotICBSVFBTZW5kZXJSZXBvcnQgKmN1cnI7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFJUUF9JU19TT1VSQ0UgKHNyYyksIEZBTFNFKTsKLQotICBjdXJyID0gJnNyYy0+c3RhdHMuc3Jbc3JjLT5zdGF0cy5jdXJyX3NyXTsKLSAgaWYgKCFjdXJyLT5pc192YWxpZCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKG50cHRpbWUpCi0gICAgKm50cHRpbWUgPSBjdXJyLT5udHB0aW1lOwotICBpZiAocnRwdGltZSkKLSAgICAqcnRwdGltZSA9IGN1cnItPnJ0cHRpbWU7Ci0gIGlmIChwYWNrZXRfY291bnQpCi0gICAgKnBhY2tldF9jb3VudCA9IGN1cnItPnBhY2tldF9jb3VudDsKLSAgaWYgKG9jdGV0X2NvdW50KQotICAgICpvY3RldF9jb3VudCA9IGN1cnItPm9jdGV0X2NvdW50OwotICBpZiAodGltZSkKLSAgICAqdGltZSA9IGN1cnItPnRpbWU7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9nZXRfbGFzdF9yYjoKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqIEBmcmFjdGlvbmxvc3Q6IGZyYWN0aW9uIGxvc3Qgc2luY2UgbGFzdCBTUi9SUgotICogQHBhY2tldHNsb3N0OiB0aGUgY3VtdWxhdGl2ZSBudW1iZXIgb2YgcGFja2V0cyBsb3N0Ci0gKiBAZXh0aGlnaGVzdHNlcTogdGhlIGV4dGVuZGVkIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHJlY2VpdmVkCi0gKiBAaml0dGVyOiB0aGUgaW50ZXJhcnJpdmFsIGppdHRlciAoaW4gY2xvY2sgcmF0ZSB1bml0cykKLSAqIEBsc3I6IHRoZSB0aW1lIG9mIHRoZSBsYXN0IFNSIHBhY2tldCBvbiB0aGlzIHNvdXJjZQotICogICAoaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gKiBAZGxzcjogdGhlIGRlbGF5IHNpbmNlIHRoZSBsYXN0IFNSIHBhY2tldAotICogICAoaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gKiBAcm91bmRfdHJpcDogdGhlIHJvdW5kLXRyaXAgdGltZQotICogICAoaW4gTlRQIFNob3J0IEZvcm1hdCwgMTYuMTYgZml4ZWQgcG9pbnQpCi0gKgotICogR2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGxhc3QgUkIgcmVwb3J0IHNldCB3aXRoIHJ0cF9zb3VyY2VfcHJvY2Vzc19yYigpLgotICoKLSAqIFJldHVybnM6ICVUUlVFIGlmIHRoZXJlIHdhcyBhIHZhbGlkIFNCIHJlcG9ydC4KLSAqLwotZ2Jvb2xlYW4KLXJ0cF9zb3VyY2VfZ2V0X2xhc3RfcmIgKFJUUFNvdXJjZSAqIHNyYywgZ3VpbnQ4ICogZnJhY3Rpb25sb3N0LAotICAgIGdpbnQzMiAqIHBhY2tldHNsb3N0LCBndWludDMyICogZXh0aGlnaGVzdHNlcSwgZ3VpbnQzMiAqIGppdHRlciwKLSAgICBndWludDMyICogbHNyLCBndWludDMyICogZGxzciwgZ3VpbnQzMiAqIHJvdW5kX3RyaXApCi17Ci0gIFJUUFJlY2VpdmVyUmVwb3J0ICpjdXJyOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChSVFBfSVNfU09VUkNFIChzcmMpLCBGQUxTRSk7Ci0KLSAgY3VyciA9ICZzcmMtPnN0YXRzLnJyW3NyYy0+c3RhdHMuY3Vycl9ycl07Ci0gIGlmICghY3Vyci0+aXNfdmFsaWQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChmcmFjdGlvbmxvc3QpCi0gICAgKmZyYWN0aW9ubG9zdCA9IGN1cnItPmZyYWN0aW9ubG9zdDsKLSAgaWYgKHBhY2tldHNsb3N0KQotICAgICpwYWNrZXRzbG9zdCA9IGN1cnItPnBhY2tldHNsb3N0OwotICBpZiAoZXh0aGlnaGVzdHNlcSkKLSAgICAqZXh0aGlnaGVzdHNlcSA9IGN1cnItPmV4dGhpZ2hlc3RzZXE7Ci0gIGlmIChqaXR0ZXIpCi0gICAgKmppdHRlciA9IGN1cnItPmppdHRlcjsKLSAgaWYgKGxzcikKLSAgICAqbHNyID0gY3Vyci0+bHNyOwotICBpZiAoZGxzcikKLSAgICAqZGxzciA9IGN1cnItPmRsc3I7Ci0gIGlmIChyb3VuZF90cmlwKQotICAgICpyb3VuZF90cmlwID0gY3Vyci0+cm91bmRfdHJpcDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWZpbmRfY29uZmxpY3RpbmdfYWRkcmVzcyAoR0xpc3QgKiBjb25mbGljdGluZ19hZGRyZXNzZXMsCi0gICAgR1NvY2tldEFkZHJlc3MgKiBhZGRyZXNzLCBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgR0xpc3QgKml0ZW07Ci0KLSAgZm9yIChpdGVtID0gY29uZmxpY3RpbmdfYWRkcmVzc2VzOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQgKGl0ZW0pKSB7Ci0gICAgUlRQQ29uZmxpY3RpbmdBZGRyZXNzICprbm93bl9jb25mbGljdCA9IGl0ZW0tPmRhdGE7Ci0KLSAgICBpZiAoX19nX3NvY2tldF9hZGRyZXNzX2VxdWFsIChhZGRyZXNzLCBrbm93bl9jb25mbGljdC0+YWRkcmVzcykpIHsKLSAgICAgIGtub3duX2NvbmZsaWN0LT50aW1lID0gdGltZTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotR0xpc3QgKgotYWRkX2NvbmZsaWN0aW5nX2FkZHJlc3MgKEdMaXN0ICogY29uZmxpY3RpbmdfYWRkcmVzc2VzLAotICAgIEdTb2NrZXRBZGRyZXNzICogYWRkcmVzcywgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIFJUUENvbmZsaWN0aW5nQWRkcmVzcyAqbmV3X2NvbmZsaWN0OwotCi0gIG5ld19jb25mbGljdCA9IGdfc2xpY2VfbmV3IChSVFBDb25mbGljdGluZ0FkZHJlc3MpOwotCi0gIG5ld19jb25mbGljdC0+YWRkcmVzcyA9IEdfU09DS0VUX0FERFJFU1MgKGdfb2JqZWN0X3JlZiAoYWRkcmVzcykpOwotICBuZXdfY29uZmxpY3QtPnRpbWUgPSB0aW1lOwotCi0gIHJldHVybiBnX2xpc3RfcHJlcGVuZCAoY29uZmxpY3RpbmdfYWRkcmVzc2VzLCBuZXdfY29uZmxpY3QpOwotfQotCi1HTGlzdCAqCi10aW1lb3V0X2NvbmZsaWN0aW5nX2FkZHJlc3NlcyAoR0xpc3QgKiBjb25mbGljdGluZ19hZGRyZXNzZXMsCi0gICAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSkKLXsKLSAgR0xpc3QgKml0ZW07Ci0gIC8qICJhIHJlbGF0aXZlbHkgbG9uZyB0aW1lIiAtLSBSRkMgMzU1MCBzZWN0aW9uIDguMiAqLwotICBjb25zdCBHc3RDbG9ja1RpbWUgY29sbGlzaW9uX3RpbWVvdXQgPQotICAgICAgUlRQX1NUQVRTX01JTl9JTlRFUlZBTCAqIEdTVF9TRUNPTkQgKiAxMDsKLQotICBpdGVtID0gZ19saXN0X2ZpcnN0IChjb25mbGljdGluZ19hZGRyZXNzZXMpOwotICB3aGlsZSAoaXRlbSkgewotICAgIFJUUENvbmZsaWN0aW5nQWRkcmVzcyAqa25vd25fY29uZmxpY3QgPSBpdGVtLT5kYXRhOwotICAgIEdMaXN0ICpuZXh0X2l0ZW0gPSBnX2xpc3RfbmV4dCAoaXRlbSk7Ci0KLSAgICBpZiAoa25vd25fY29uZmxpY3QtPnRpbWUgPCBjdXJyZW50X3RpbWUgLSBjb2xsaXNpb25fdGltZW91dCkgewotICAgICAgZ2NoYXIgKmJ1ZjsKLQotICAgICAgY29uZmxpY3RpbmdfYWRkcmVzc2VzID0gZ19saXN0X2RlbGV0ZV9saW5rIChjb25mbGljdGluZ19hZGRyZXNzZXMsIGl0ZW0pOwotICAgICAgYnVmID0gX19nX3NvY2tldF9hZGRyZXNzX3RvX3N0cmluZyAoa25vd25fY29uZmxpY3QtPmFkZHJlc3MpOwotICAgICAgR1NUX0RFQlVHICgiY29sbGlzaW9uICVwIHRpbWVkIG91dDogJXMiLCBrbm93bl9jb25mbGljdCwgYnVmKTsKLSAgICAgIGdfZnJlZSAoYnVmKTsKLSAgICAgIHJ0cF9jb25mbGljdGluZ19hZGRyZXNzX2ZyZWUgKGtub3duX2NvbmZsaWN0KTsKLSAgICB9Ci0gICAgaXRlbSA9IG5leHRfaXRlbTsKLSAgfQotCi0gIHJldHVybiBjb25mbGljdGluZ19hZGRyZXNzZXM7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9maW5kX2NvbmZsaWN0aW5nX2FkZHJlc3M6Ci0gKiBAc3JjOiBUaGUgc291cmNlIHRoZSBwYWNrZXQgY2FtZSBpbgotICogQGFkZHJlc3M6IGFkZHJlc3MgdG8gY2hlY2sgZm9yCi0gKiBAdGltZTogVGhlIHRpbWUgd2hlbiB0aGUgcGFja2V0IHRoYXQgaXMgcG9zc2libHkgaW4gY29uZmxpY3QgYXJyaXZlZAotICoKLSAqIENoZWNrcyBpZiBhbiBhZGRyZXNzIHdoaWNoIGhhcyBhIGNvbmZsaWN0IGlzIGFscmVhZHkga25vd24uIElmIGl0IGlzCi0gKiBhIGtub3duIGNvbmZsaWN0LCByZW1lbWJlciB0aGUgdGltZQotICoKLSAqIFJldHVybnM6IFRSVUUgaWYgaXQgd2FzIGEga25vd24gY29uZmxpY3QsIEZBTFNFIG90aGVyd2lzZQotICovCi1nYm9vbGVhbgotcnRwX3NvdXJjZV9maW5kX2NvbmZsaWN0aW5nX2FkZHJlc3MgKFJUUFNvdXJjZSAqIHNyYywgR1NvY2tldEFkZHJlc3MgKiBhZGRyZXNzLAotICAgIEdzdENsb2NrVGltZSB0aW1lKQotewotICByZXR1cm4gZmluZF9jb25mbGljdGluZ19hZGRyZXNzIChzcmMtPmNvbmZsaWN0aW5nX2FkZHJlc3NlcywgYWRkcmVzcywgdGltZSk7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9hZGRfY29uZmxpY3RpbmdfYWRkcmVzczoKLSAqIEBzcmM6IFRoZSBzb3VyY2UgdGhlIHBhY2tldCBjYW1lIGluCi0gKiBAYWRkcmVzczogYWRkcmVzcyB0byByZW1lbWJlcgotICogQHRpbWU6IFRoZSB0aW1lIHdoZW4gdGhlIHBhY2tldCB0aGF0IGlzIGluIGNvbmZsaWN0IGFycml2ZWQKLSAqCi0gKiBBZGRzIGEgbmV3IGNvbmZsaWN0IGFkZHJlc3MKLSAqLwotdm9pZAotcnRwX3NvdXJjZV9hZGRfY29uZmxpY3RpbmdfYWRkcmVzcyAoUlRQU291cmNlICogc3JjLAotICAgIEdTb2NrZXRBZGRyZXNzICogYWRkcmVzcywgR3N0Q2xvY2tUaW1lIHRpbWUpCi17Ci0gIHNyYy0+Y29uZmxpY3RpbmdfYWRkcmVzc2VzID0KLSAgICAgIGFkZF9jb25mbGljdGluZ19hZGRyZXNzIChzcmMtPmNvbmZsaWN0aW5nX2FkZHJlc3NlcywgYWRkcmVzcywgdGltZSk7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV90aW1lb3V0OgotICogQHNyYzogVGhlICNSVFBTb3VyY2UKLSAqIEBjdXJyZW50X3RpbWU6IFRoZSBjdXJyZW50IHRpbWUKLSAqIEBmZWVkYmFja19yZXRlbnRpb25fd2luZG93OiBUaGUgcnVubmluZyB0aW1lIGJlZm9yZSB3aGljaCByZXRhaW5lZCBmZWVkYmFjawotICogcGFja2V0cyBoYXZlIHRvIGJlIGRpc2NhcmRlZAotICoKLSAqIFRoaXMgaXMgcHJvY2Vzc2VkIG9uIGVhY2ggUlRDUCBpbnRlcnZhbC4gSXQgdGltZXMgb3V0IG9sZCBjb2xsaXNpb25zLgotICogSXQgYWxzbyB0aW1lcyBvdXQgb2xkIHJldGFpbmVkIGZlZWRiYWNrIHBhY2tldHMKLSAqLwotdm9pZAotcnRwX3NvdXJjZV90aW1lb3V0IChSVFBTb3VyY2UgKiBzcmMsIEdzdENsb2NrVGltZSBjdXJyZW50X3RpbWUsCi0gICAgR3N0Q2xvY2tUaW1lIGZlZWRiYWNrX3JldGVudGlvbl93aW5kb3cpCi17Ci0gIEdzdFJUQ1BQYWNrZXQgKnBrdDsKLQotICBzcmMtPmNvbmZsaWN0aW5nX2FkZHJlc3NlcyA9Ci0gICAgICB0aW1lb3V0X2NvbmZsaWN0aW5nX2FkZHJlc3NlcyAoc3JjLT5jb25mbGljdGluZ19hZGRyZXNzZXMsIGN1cnJlbnRfdGltZSk7Ci0KLSAgLyogVGltZSBvdXQgQVZQRiBwYWNrZXRzIHRoYXQgYXJlIG9sZGVyIHRoYW4gdGhlIGRlc2lyZWQgbGVuZ3RoICovCi0gIHdoaWxlICgocGt0ID0gZ19xdWV1ZV9wZWVrX3RhaWwgKHNyYy0+cmV0YWluZWRfZmVlZGJhY2spKSAmJgotICAgICAgR1NUX0JVRkZFUl9QVFMgKHBrdCkgPCBmZWVkYmFja19yZXRlbnRpb25fd2luZG93KQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGdfcXVldWVfcG9wX3RhaWwgKHNyYy0+cmV0YWluZWRfZmVlZGJhY2spKTsKLX0KLQotc3RhdGljIGdpbnQKLWNvbXBhcmVfYnVmZmVycyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgY29uc3QgR3N0QnVmZmVyICpidWZhID0gYTsKLSAgY29uc3QgR3N0QnVmZmVyICpidWZiID0gYjsKLQotICByZXR1cm4gR1NUX0JVRkZFUl9QVFMgKGJ1ZmEpIC0gR1NUX0JVRkZFUl9QVFMgKGJ1ZmIpOwotfQotCi12b2lkCi1ydHBfc291cmNlX3JldGFpbl9ydGNwX3BhY2tldCAoUlRQU291cmNlICogc3JjLCBHc3RSVENQUGFja2V0ICogcGFja2V0LAotICAgIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfY29weV9yZWdpb24gKHBhY2tldC0+cnRjcC0+YnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfTUVNT1JZLAotICAgICAgcGFja2V0LT5vZmZzZXQsIChnc3RfcnRjcF9wYWNrZXRfZ2V0X2xlbmd0aCAocGFja2V0KSArIDEpICogNCk7Ci0KLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSBydW5uaW5nX3RpbWU7Ci0KLSAgZ19xdWV1ZV9pbnNlcnRfc29ydGVkIChzcmMtPnJldGFpbmVkX2ZlZWRiYWNrLCBidWZmZXIsIGNvbXBhcmVfYnVmZmVycywgTlVMTCk7Ci19Ci0KLWdib29sZWFuCi1ydHBfc291cmNlX2hhc19yZXRhaW5lZCAoUlRQU291cmNlICogc3JjLCBHQ29tcGFyZUZ1bmMgZnVuYywgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICBpZiAoZ19xdWV1ZV9maW5kX2N1c3RvbSAoc3JjLT5yZXRhaW5lZF9mZWVkYmFjaywgZGF0YSwgZnVuYykpCi0gICAgcmV0dXJuIFRSVUU7Ci0gIGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qKgotICogcnRwX3NvdXJjZV9yZWdpc3Rlcl9uYWNrOgotICogQHNyYzogVGhlICNSVFBTb3VyY2UKLSAqIEBzZXFudW06IGEgc2VxbnVtCi0gKgotICogUmVnaXN0ZXIgdGhhdCBAc2VxbnVtIGhhcyBub3QgYmVlbiByZWNlaXZlZCBmcm9tIEBzcmMuCi0gKi8KLXZvaWQKLXJ0cF9zb3VyY2VfcmVnaXN0ZXJfbmFjayAoUlRQU291cmNlICogc3JjLCBndWludDE2IHNlcW51bSkKLXsKLSAgZ3VpbnQgaSwgbGVuOwotICBndWludDMyIGR3b3JkID0gc2VxbnVtIDw8IDE2OwotICBnaW50IGRpZmYgPSAxNjsKLQotICBsZW4gPSBzcmMtPm5hY2tzLT5sZW47Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIGd1aW50MzIgdGR3b3JkOwotICAgIGd1aW50MTYgdHNlcTsKLQotICAgIHRkd29yZCA9IGdfYXJyYXlfaW5kZXggKHNyYy0+bmFja3MsIGd1aW50MzIsIGkpOwotICAgIHRzZXEgPSB0ZHdvcmQgPj4gMTY7Ci0KLSAgICBkaWZmID0gZ3N0X3J0cF9idWZmZXJfY29tcGFyZV9zZXFudW0gKHRzZXEsIHNlcW51bSk7Ci0gICAgaWYgKGRpZmYgPCAxNikKLSAgICAgIGJyZWFrOwotICB9Ci0gIC8qIHdlIGFscmVhZHkgaGF2ZSB0aGlzIHNlcW51bSAqLwotICBpZiAoZGlmZiA9PSAwKQotICAgIHJldHVybjsKLSAgLyogaXQgY29tZXMgYmVmb3JlIHRoZSByZWNvcmRlZCBzZXFudW0sIEZJWE1FLCB3ZSBjb3VsZCBtZXJnZSBpdAotICAgKiBpZiBub3QgdG8gZmFyIGF3YXkgKi8KLSAgaWYgKGRpZmYgPCAwKSB7Ci0gICAgR1NUX0RFQlVHICgiaW5zZXJ0IE5BQ0sgIyV1IGF0ICV1Iiwgc2VxbnVtLCBpKTsKLSAgICBnX2FycmF5X2luc2VydF92YWwgKHNyYy0+bmFja3MsIGksIGR3b3JkKTsKLSAgfSBlbHNlIGlmIChkaWZmIDwgMTYpIHsKLSAgICAvKiB3ZSBjYW4gbWVyZ2UgaXQgKi8KLSAgICBkd29yZCA9IGdfYXJyYXlfaW5kZXggKHNyYy0+bmFja3MsIGd1aW50MzIsIGkpOwotICAgIGR3b3JkIHw9IDEgPDwgKGRpZmYgLSAxKTsKLSAgICBHU1RfREVCVUcgKCJtZXJnZSBOQUNLICMldSBhdCAldSB3aXRoIE5BQ0sgIyV1IC0+IDB4JTA4eCIsIHNlcW51bSwgaSwKLSAgICAgICAgZHdvcmQgPj4gMTYsIGR3b3JkKTsKLSAgICBnX2FycmF5X2luZGV4IChzcmMtPm5hY2tzLCBndWludDMyLCBpKSA9IGR3b3JkOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVRyAoImFwcGVuZCBOQUNLICMldSIsIHNlcW51bSk7Ci0gICAgZ19hcnJheV9hcHBlbmRfdmFsIChzcmMtPm5hY2tzLCBkd29yZCk7Ci0gIH0KLSAgc3JjLT5zZW5kX25hY2sgPSBUUlVFOwotfQotCi0vKioKLSAqIHJ0cF9zb3VyY2VfZ2V0X25hY2tzOgotICogQHNyYzogVGhlICNSVFBTb3VyY2UKLSAqIEBuX25hY2tzOiByZXN1bHQgbnVtYmVyIG9mIG5hY2tzCi0gKgotICogR2V0IHRoZSByZWdpc3RlcmVkIE5BQ0tTIHNpbmNlIHRoZSBsYXN0IHJ0cF9zb3VyY2VfY2xlYXJfbmFja3MoKS4KLSAqCi0gKiBSZXR1cm5zOiBhbiBhcnJheSBvZiBAbl9uYWNrcyBzZXFudW0gdmFsdWVzLgotICovCi1ndWludDMyICoKLXJ0cF9zb3VyY2VfZ2V0X25hY2tzIChSVFBTb3VyY2UgKiBzcmMsIGd1aW50ICogbl9uYWNrcykKLXsKLSAgaWYgKG5fbmFja3MpCi0gICAgKm5fbmFja3MgPSBzcmMtPm5hY2tzLT5sZW47Ci0KLSAgcmV0dXJuIChndWludDMyICopIHNyYy0+bmFja3MtPmRhdGE7Ci19Ci0KLXZvaWQKLXJ0cF9zb3VyY2VfY2xlYXJfbmFja3MgKFJUUFNvdXJjZSAqIHNyYykKLXsKLSAgZ19hcnJheV9zZXRfc2l6ZSAoc3JjLT5uYWNrcywgMCk7Ci0gIHNyYy0+c2VuZF9uYWNrID0gRkFMU0U7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRwbWFuYWdlci9ydHBzb3VyY2UuaCBiL2dzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDFjN2Q2Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHBtYW5hZ2VyL3J0cHNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgIDIwMTUgS3VyZW50byAoaHR0cDovL2t1cmVudG8ub3JnLykKLSAqICAgQGF1dGhvcjogTWlndWVsIFBhcsOtcyA8bXBhcmlzZGlhekBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1JUUF9TT1VSQ0VfSF9fCi0jZGVmaW5lIF9fUlRQX1NPVVJDRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLSNpbmNsdWRlICJydHBzdGF0cy5oIgotCi0vKiB0aGUgZGVmYXVsdCBudW1iZXIgb2YgY29uc2VjdXRpdmUgUlRQIHBhY2tldHMgd2UgbmVlZCB0byByZWNlaXZlIGJlZm9yZSB0aGUKLSAqIHNvdXJjZSBpcyBjb25zaWRlcmVkIHZhbGlkICovCi0jZGVmaW5lIFJUUF9OT19QUk9CQVRJT04gICAgICAgIDAKLSNkZWZpbmUgUlRQX0RFRkFVTFRfUFJPQkFUSU9OICAgMgotCi0jZGVmaW5lIFJUUF9TRVFfTU9EICAgICAgICAgICgxIDw8IDE2KQotCi10eXBlZGVmIHN0cnVjdCBfUlRQU291cmNlIFJUUFNvdXJjZTsKLXR5cGVkZWYgc3RydWN0IF9SVFBTb3VyY2VDbGFzcyBSVFBTb3VyY2VDbGFzczsKLQotI2RlZmluZSBSVFBfVFlQRV9TT1VSQ0UgICAgICAgICAgICAgKHJ0cF9zb3VyY2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgUlRQX1NPVVJDRShzcmMpICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgoc3JjKSxSVFBfVFlQRV9TT1VSQ0UsUlRQU291cmNlKSkKLSNkZWZpbmUgUlRQX1NPVVJDRV9DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLFJUUF9UWVBFX1NPVVJDRSxSVFBTb3VyY2VDbGFzcykpCi0jZGVmaW5lIFJUUF9JU19TT1VSQ0Uoc3JjKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKHNyYyksUlRQX1RZUEVfU09VUkNFKSkKLSNkZWZpbmUgUlRQX0lTX1NPVVJDRV9DTEFTUyhrbGFzcykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLFJUUF9UWVBFX1NPVVJDRSkpCi0jZGVmaW5lIFJUUF9TT1VSQ0VfQ0FTVChzcmMpICAgICAgICAoKFJUUFNvdXJjZSAqKShzcmMpKQotCi0vKioKLSAqIFJUUF9TT1VSQ0VfSVNfQUNUSVZFOgotICogQHNyYzogYW4gI1JUUFNvdXJjZQotICoKLSAqIENoZWNrIGlmIEBzcmMgaXMgYWN0aXZlLiBBIHNvdXJjZSBpcyBhY3RpdmUgd2hlbiBpdCBoYXMgYmVlbiB2YWxpZGF0ZWQKLSAqIGFuZCBoYXMgbm90IHlldCByZWNlaXZlZCBhIEJZRSBwYWNrZXQuCi0gKi8KLSNkZWZpbmUgUlRQX1NPVVJDRV9JU19BQ1RJVkUoc3JjKSAgKHNyYy0+dmFsaWRhdGVkICYmICFzcmMtPm1hcmtlZF9ieWUpCi0KLS8qKgotICogUlRQX1NPVVJDRV9JU19TRU5ERVI6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKgotICogQ2hlY2sgaWYgQHNyYyBpcyBhIHNlbmRlci4KLSAqLwotI2RlZmluZSBSVFBfU09VUkNFX0lTX1NFTkRFUihzcmMpICAoc3JjLT5pc19zZW5kZXIpCi0vKioKLSAqIFJUUF9TT1VSQ0VfSVNfTUFSS0VEX0JZRToKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqCi0gKiBDaGVjayBpZiBAc3JjIGlzIGEgbWFya2VkIGFzIEJZRS4KLSAqLwotI2RlZmluZSBSVFBfU09VUkNFX0lTX01BUktFRF9CWUUoc3JjKSAgKHNyYy0+bWFya2VkX2J5ZSkKLQotCi0vKioKLSAqIFJUUFNvdXJjZVB1c2hSVFA6Ci0gKiBAc3JjOiBhbiAjUlRQU291cmNlCi0gKiBAZGF0YTogdGhlIFJUUCBidWZmZXIgb3IgYnVmZmVyIGxpc3QgcmVhZHkgZm9yIHByb2Nlc3NpbmcKLSAqIEB1c2VyX2RhdGE6IHVzZXIgZGF0YSBzcGVjaWZpZWQgd2hlbiByZWdpc3RlcmluZwotICoKLSAqIFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2hlbiBAc3JjIGhhcyBAYnVmZmVyIHJlYWR5IGZvciBmdXJ0aGVyCi0gKiBwcm9jZXNzaW5nLgotICoKLSAqIFJldHVybnM6IGEgI0dzdEZsb3dSZXR1cm4uCi0gKi8KLXR5cGVkZWYgR3N0Rmxvd1JldHVybiAoKlJUUFNvdXJjZVB1c2hSVFApIChSVFBTb3VyY2UgKnNyYywgZ3BvaW50ZXIgZGF0YSwKLQlncG9pbnRlciB1c2VyX2RhdGEpOwotCi0vKioKLSAqIFJUUFNvdXJjZUNsb2NrUmF0ZToKLSAqIEBzcmM6IGFuICNSVFBTb3VyY2UKLSAqIEBwYXlsb2FkOiBhIHBheWxvYWQgdHlwZQotICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHNwZWNpZmllZCB3aGVuIHJlZ2lzdGVyaW5nCi0gKgotICogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIEBzcmMgbmVlZHMgdGhlIGNsb2NrLXJhdGUgb2YgdGhlCi0gKiBAcGF5bG9hZC4KLSAqCi0gKiBSZXR1cm5zOiBhIGNsb2NrLXJhdGUgZm9yIEBwYXlsb2FkLgotICovCi10eXBlZGVmIGdpbnQgKCpSVFBTb3VyY2VDbG9ja1JhdGUpIChSVFBTb3VyY2UgKnNyYywgZ3VpbnQ4IHBheWxvYWQsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLS8qKgotICogUlRQU291cmNlQ2FsbGJhY2tzOgotICogQHB1c2hfcnRwOiBhIHBhY2tldCBiZWNvbWVzIGF2YWlsYWJsZSBmb3IgaGFuZGxpbmcKLSAqIEBjbG9ja19yYXRlOiBhIGNsb2NrLXJhdGUgaXMgcmVxdWVzdGVkCi0gKiBAZ2V0X3RpbWU6IHRoZSBjdXJyZW50IGNsb2NrIHRpbWUgaXMgcmVxdWVzdGVkCi0gKgotICogQ2FsbGJhY2tzIHBlcmZvcm1lZCBieSAjUlRQU291cmNlIHdoZW4gYWN0aW9ucyBuZWVkIHRvIGJlIHBlcmZvcm1lZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBSVFBTb3VyY2VQdXNoUlRQICAgICBwdXNoX3J0cDsKLSAgUlRQU291cmNlQ2xvY2tSYXRlICAgY2xvY2tfcmF0ZTsKLX0gUlRQU291cmNlQ2FsbGJhY2tzOwotCi0vKioKLSAqIFJUUENvbmZsaWN0aW5nQWRkcmVzczoKLSAqIEBhZGRyZXNzOiAjR1NvY2tldEFkZHJlc3Mgd2hpY2ggY29uZmxpY3RlZAotICogQGxhc3RfY29uZmxpY3RfdGltZTogdGltZSB3aGVuIHRoZSBsYXN0IGNvbmZsaWN0IHdhcyBzZWVuCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBhY2NvdW50IGZvciBhZGRyZXNzZXMgdGhhdCBoYXZlIGNvbmZsaWN0ZWQgdG8gZmluZAotICogbG9vcHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgR1NvY2tldEFkZHJlc3MgKmFkZHJlc3M7Ci0gIEdzdENsb2NrVGltZSB0aW1lOwotfSBSVFBDb25mbGljdGluZ0FkZHJlc3M7Ci0KLS8qKgotICogUlRQU291cmNlOgotICoKLSAqIEEgc291cmNlIGluIHRoZSAjUlRQU2Vzc2lvbgotICoKLSAqIEBjb25mbGljdGluZ19hZGRyZXNzZXM6IEdMaXN0IG9mIGNvbmZsaWN0aW5nIGFkZHJlc3NlcwotICovCi1zdHJ1Y3QgX1JUUFNvdXJjZSB7Ci0gIEdPYmplY3QgICAgICAgb2JqZWN0OwotCi0gIC8qPCBwcml2YXRlID4qLwotICBndWludDMyICAgICAgIHNzcmM7Ci0KLSAgZ3VpbnQxNiAgICAgICBnZW5lcmF0aW9uOwotICBHSGFzaFRhYmxlICAgICpyZXBvcnRlZF9pbl9zcl9vZjsgICAgIC8qIHNldCBvZiBTU1JDcyAqLwotCi0gIGd1aW50ICAgICAgICAgcHJvYmF0aW9uOwotICBndWludCAgICAgICAgIGN1cnJfcHJvYmF0aW9uOwotICBnYm9vbGVhbiAgICAgIHZhbGlkYXRlZDsKLSAgZ2Jvb2xlYW4gICAgICBpbnRlcm5hbDsKLSAgZ2Jvb2xlYW4gICAgICBpc19jc3JjOwotICBnYm9vbGVhbiAgICAgIGlzX3NlbmRlcjsKLSAgZ2Jvb2xlYW4gICAgICBjbG9zaW5nOwotCi0gIEdzdFN0cnVjdHVyZSAgKnNkZXM7Ci0KLSAgZ2Jvb2xlYW4gICAgICBtYXJrZWRfYnllOwotICBnY2hhciAgICAgICAgKmJ5ZV9yZWFzb247Ci0gIGdib29sZWFuICAgICAgc2VudF9ieWU7Ci0KLSAgR1NvY2tldEFkZHJlc3MgKnJ0cF9mcm9tOwotICBHU29ja2V0QWRkcmVzcyAqcnRjcF9mcm9tOwotCi0gIGdpbnQgICAgICAgICAgcGF5bG9hZDsKLSAgR3N0Q2FwcyAgICAgICpjYXBzOwotICBnaW50ICAgICAgICAgIGNsb2NrX3JhdGU7Ci0gIGdpbnQzMiAgICAgICAgc2VxbnVtX29mZnNldDsKLQotICBHc3RDbG9ja1RpbWUgIGJ5ZV90aW1lOwotICBHc3RDbG9ja1RpbWUgIGxhc3RfYWN0aXZpdHk7Ci0gIEdzdENsb2NrVGltZSAgbGFzdF9ydHBfYWN0aXZpdHk7Ci0KLSAgR3N0Q2xvY2tUaW1lICBsYXN0X3J0aW1lOwotICBHc3RDbG9ja1RpbWUgIGxhc3RfcnRwdGltZTsKLQotICAvKiBmb3IgYml0cmF0ZSBlc3RpbWF0aW9uICovCi0gIGd1aW50NjQgICAgICAgYml0cmF0ZTsKLSAgR3N0Q2xvY2tUaW1lICBwcmV2X3J0aW1lOwotICBndWludDY0ICAgICAgIGJ5dGVzX3NlbnQ7Ci0gIGd1aW50NjQgICAgICAgYnl0ZXNfcmVjZWl2ZWQ7Ci0KLSAgR1F1ZXVlICAgICAgICpwYWNrZXRzOwotICBSVFBQYWNrZXRSYXRlQ3R4IHBhY2tldF9yYXRlX2N0eDsKLSAgZ3VpbnQzMiAgICAgICBtYXhfZHJvcG91dF90aW1lOwotICBndWludDMyICAgICAgIG1heF9taXNvcmRlcl90aW1lOwotCi0gIFJUUFNvdXJjZUNhbGxiYWNrcyBjYWxsYmFja3M7Ci0gIGdwb2ludGVyICAgICAgICAgICB1c2VyX2RhdGE7Ci0KLSAgUlRQU291cmNlU3RhdHMgc3RhdHM7Ci0gIFJUUFJlY2VpdmVyUmVwb3J0IGxhc3RfcnI7Ci0KLSAgR0xpc3QgICAgICAgICAqY29uZmxpY3RpbmdfYWRkcmVzc2VzOwotCi0gIEdRdWV1ZSAgICAgICAgKnJldGFpbmVkX2ZlZWRiYWNrOwotCi0gIGdib29sZWFuICAgICBzZW5kX3BsaTsKLSAgZ2Jvb2xlYW4gICAgIHNlbmRfZmlyOwotICBndWludDggICAgICAgY3VycmVudF9zZW5kX2Zpcl9zZXFudW07Ci0gIGdpbnQgICAgICAgICBsYXN0X2Zpcl9jb3VudDsKLQotICBnYm9vbGVhbiAgICAgc2VuZF9uYWNrOwotICBHQXJyYXkgICAgICAqbmFja3M7Ci0KLX07Ci0KLXN0cnVjdCBfUlRQU291cmNlQ2xhc3MgewotICBHT2JqZWN0Q2xhc3MgICBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBydHBfc291cmNlX2dldF90eXBlICh2b2lkKTsKLQotLyogbWFuYWdpbmcgbGlmZXRpbWUgb2Ygc291cmNlcyAqLwotUlRQU291cmNlKiAgICAgIHJ0cF9zb3VyY2VfbmV3ICAgICAgICAgICAgICAgICAoZ3VpbnQzMiBzc3JjKTsKLXZvaWQgICAgICAgICAgICBydHBfc291cmNlX3NldF9jYWxsYmFja3MgICAgICAgKFJUUFNvdXJjZSAqc3JjLCBSVFBTb3VyY2VDYWxsYmFja3MgKmNiLCBncG9pbnRlciBkYXRhKTsKLQotLyogcHJvcGVydGllcyAqLwotZ3VpbnQzMiAgICAgICAgIHJ0cF9zb3VyY2VfZ2V0X3NzcmMgICAgICAgICAgICAoUlRQU291cmNlICpzcmMpOwotCi12b2lkICAgICAgICAgICAgcnRwX3NvdXJjZV9zZXRfYXNfY3NyYyAgICAgICAgIChSVFBTb3VyY2UgKnNyYyk7Ci1nYm9vbGVhbiAgICAgICAgcnRwX3NvdXJjZV9pc19hc19jc3JjICAgICAgICAgIChSVFBTb3VyY2UgKnNyYyk7Ci0KLWdib29sZWFuICAgICAgICBydHBfc291cmNlX2lzX2FjdGl2ZSAgICAgICAgICAgKFJUUFNvdXJjZSAqc3JjKTsKLWdib29sZWFuICAgICAgICBydHBfc291cmNlX2lzX3ZhbGlkYXRlZCAgICAgICAgKFJUUFNvdXJjZSAqc3JjKTsKLWdib29sZWFuICAgICAgICBydHBfc291cmNlX2lzX3NlbmRlciAgICAgICAgICAgKFJUUFNvdXJjZSAqc3JjKTsKLQotdm9pZCAgICAgICAgICAgIHJ0cF9zb3VyY2VfbWFya19ieWUgICAgICAgICAgICAoUlRQU291cmNlICpzcmMsIGNvbnN0IGdjaGFyICpyZWFzb24pOwotZ2Jvb2xlYW4gICAgICAgIHJ0cF9zb3VyY2VfaXNfbWFya2VkX2J5ZSAgICAgICAoUlRQU291cmNlICpzcmMpOwotZ2NoYXIgKiAgICAgICAgIHJ0cF9zb3VyY2VfZ2V0X2J5ZV9yZWFzb24gICAgICAoUlRQU291cmNlICpzcmMpOwotCi12b2lkICAgICAgICAgICAgcnRwX3NvdXJjZV91cGRhdGVfY2FwcyAgICAgICAgIChSVFBTb3VyY2UgKnNyYywgR3N0Q2FwcyAqY2Fwcyk7Ci0KLS8qIFNERVMgaW5mbyAqLwotY29uc3QgR3N0U3RydWN0dXJlICoKLSAgICAgICAgICAgICAgICBydHBfc291cmNlX2dldF9zZGVzX3N0cnVjdCAgICAgKFJUUFNvdXJjZSAqIHNyYyk7Ci1nYm9vbGVhbiAgICAgICAgcnRwX3NvdXJjZV9zZXRfc2Rlc19zdHJ1Y3QgICAgIChSVFBTb3VyY2UgKiBzcmMsIEdzdFN0cnVjdHVyZSAqc2Rlcyk7Ci0KLS8qIGhhbmRsaW5nIG5ldHdvcmsgYWRkcmVzcyAqLwotdm9pZCAgICAgICAgICAgIHJ0cF9zb3VyY2Vfc2V0X3J0cF9mcm9tICAgICAgICAoUlRQU291cmNlICpzcmMsIEdTb2NrZXRBZGRyZXNzICphZGRyZXNzKTsKLXZvaWQgICAgICAgICAgICBydHBfc291cmNlX3NldF9ydGNwX2Zyb20gICAgICAgKFJUUFNvdXJjZSAqc3JjLCBHU29ja2V0QWRkcmVzcyAqYWRkcmVzcyk7Ci0KLS8qIGhhbmRsaW5nIFJUUCAqLwotR3N0Rmxvd1JldHVybiAgIHJ0cF9zb3VyY2VfcHJvY2Vzc19ydHAgICAgICAgICAoUlRQU291cmNlICpzcmMsIFJUUFBhY2tldEluZm8gKnBpbmZvKTsKLQotR3N0Rmxvd1JldHVybiAgIHJ0cF9zb3VyY2Vfc2VuZF9ydHAgICAgICAgICAgICAoUlRQU291cmNlICpzcmMsIFJUUFBhY2tldEluZm8gKnBpbmZvKTsKLQotLyogUlRDUCBtZXNzYWdlcyAqLwotdm9pZCAgICAgICAgICAgIHJ0cF9zb3VyY2VfcHJvY2Vzc19zciAgICAgICAgICAoUlRQU291cmNlICpzcmMsIEdzdENsb2NrVGltZSB0aW1lLCBndWludDY0IG50cHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIHJ0cHRpbWUsIGd1aW50MzIgcGFja2V0X2NvdW50LCBndWludDMyIG9jdGV0X2NvdW50KTsKLXZvaWQgICAgICAgICAgICBydHBfc291cmNlX3Byb2Nlc3NfcmIgICAgICAgICAgKFJUUFNvdXJjZSAqc3JjLCBndWludDY0IG50cG5zdGltZSwgZ3VpbnQ4IGZyYWN0aW9ubG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQzMiBwYWNrZXRzbG9zdCwgZ3VpbnQzMiBleHRoaWdoZXN0c2VxLCBndWludDMyIGppdHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgbHNyLCBndWludDMyIGRsc3IpOwotCi1nYm9vbGVhbiAgICAgICAgcnRwX3NvdXJjZV9nZXRfbmV3X3NyICAgICAgICAgIChSVFBTb3VyY2UgKnNyYywgZ3VpbnQ2NCBudHBuc3RpbWUsIEdzdENsb2NrVGltZSBydW5uaW5nX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICpudHB0aW1lLCBndWludDMyICpydHB0aW1lLCBndWludDMyICpwYWNrZXRfY291bnQsCi0JCQkJCQlndWludDMyICpvY3RldF9jb3VudCk7Ci1nYm9vbGVhbiAgICAgICAgcnRwX3NvdXJjZV9nZXRfbmV3X3JiICAgICAgICAgIChSVFBTb3VyY2UgKnNyYywgR3N0Q2xvY2tUaW1lIHRpbWUsIGd1aW50OCAqZnJhY3Rpb25sb3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludDMyICpwYWNrZXRzbG9zdCwgZ3VpbnQzMiAqZXh0aGlnaGVzdHNlcSwgZ3VpbnQzMiAqaml0dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAqbHNyLCBndWludDMyICpkbHNyKTsKLQotZ2Jvb2xlYW4gICAgICAgIHJ0cF9zb3VyY2VfZ2V0X2xhc3Rfc3IgICAgICAgICAoUlRQU291cmNlICpzcmMsIEdzdENsb2NrVGltZSAqdGltZSwgZ3VpbnQ2NCAqbnRwdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgKnJ0cHRpbWUsIGd1aW50MzIgKnBhY2tldF9jb3VudCwKLQkJCQkJCWd1aW50MzIgKm9jdGV0X2NvdW50KTsKLWdib29sZWFuICAgICAgICBydHBfc291cmNlX2dldF9sYXN0X3JiICAgICAgICAgKFJUUFNvdXJjZSAqc3JjLCBndWludDggKmZyYWN0aW9ubG9zdCwgZ2ludDMyICpwYWNrZXRzbG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgKmV4dGhpZ2hlc3RzZXEsIGd1aW50MzIgKmppdHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIgKmxzciwgZ3VpbnQzMiAqZGxzciwgZ3VpbnQzMiAqcm91bmRfdHJpcCk7Ci0KLXZvaWQgICAgICAgICAgICBydHBfc291cmNlX3Jlc2V0ICAgICAgICAgICAgICAgKFJUUFNvdXJjZSAqIHNyYyk7Ci0KLWdib29sZWFuICAgICAgICBydHBfc291cmNlX2ZpbmRfY29uZmxpY3RpbmdfYWRkcmVzcyAoUlRQU291cmNlICogc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvY2tldEFkZHJlc3MgKmFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgdGltZSk7Ci0KLXZvaWQgICAgICAgICAgICBydHBfc291cmNlX2FkZF9jb25mbGljdGluZ19hZGRyZXNzIChSVFBTb3VyY2UgKiBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU29ja2V0QWRkcmVzcyAqYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lKTsKLQotZ2Jvb2xlYW4gICAgICAgIGZpbmRfY29uZmxpY3RpbmdfYWRkcmVzcyAgICAgICAoR0xpc3QgKiBjb25mbGljdGluZ19hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvY2tldEFkZHJlc3MgKiBhZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIHRpbWUpOwotCi1HTGlzdCAqICAgICAgICAgYWRkX2NvbmZsaWN0aW5nX2FkZHJlc3MgICAgICAgIChHTGlzdCAqIGNvbmZsaWN0aW5nX2FkZHJlc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTb2NrZXRBZGRyZXNzICogYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENsb2NrVGltZSB0aW1lKTsKLUdMaXN0ICogICAgICAgICB0aW1lb3V0X2NvbmZsaWN0aW5nX2FkZHJlc3NlcyAgKEdMaXN0ICogY29uZmxpY3RpbmdfYWRkcmVzc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGN1cnJlbnRfdGltZSk7Ci0KLXZvaWQgICAgICAgICAgICBydHBfY29uZmxpY3RpbmdfYWRkcmVzc19mcmVlICAgKFJUUENvbmZsaWN0aW5nQWRkcmVzcyAqIGFkZHIpOwotCi12b2lkICAgICAgICAgICAgcnRwX3NvdXJjZV90aW1lb3V0ICAgICAgICAgICAgIChSVFBTb3VyY2UgKiBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgY3VycmVudF90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2xvY2tUaW1lIGZlZWRiYWNrX3JldGVudGlvbl93aW5kb3cpOwotCi12b2lkICAgICAgICAgICAgcnRwX3NvdXJjZV9yZXRhaW5fcnRjcF9wYWNrZXQgIChSVFBTb3VyY2UgKiBzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RSVENQUGFja2V0ICpwa3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDbG9ja1RpbWUgcnVubmluZ190aW1lKTsKLWdib29sZWFuICAgICAgICBydHBfc291cmNlX2hhc19yZXRhaW5lZCAgICAgICAgKFJUUFNvdXJjZSAqIHNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyBmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKTsKLQotdm9pZCAgICAgICAgICAgIHJ0cF9zb3VyY2VfcmVnaXN0ZXJfbmFjayAgICAgICAoUlRQU291cmNlICogc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQxNiBzZXFudW0pOwotZ3VpbnQzMiAqICAgICAgIHJ0cF9zb3VyY2VfZ2V0X25hY2tzICAgICAgICAgICAoUlRQU291cmNlICogc3JjLCBndWludCAqbl9uYWNrcyk7Ci12b2lkICAgICAgICAgICAgcnRwX3NvdXJjZV9jbGVhcl9uYWNrcyAgICAgICAgIChSVFBTb3VyY2UgKiBzcmMpOwotCi0jZW5kaWYgLyogX19SVFBfU09VUkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYyBiL2dzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMjVkYmYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuYworKysgL2Rldi9udWxsCkBAIC0xLDQzMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpICAyMDE1IEt1cmVudG8gKGh0dHA6Ly9rdXJlbnRvLm9yZy8pCi0gKiAgIEBhdXRob3I6IE1pZ3VlbCBQYXLDrXMgPG1wYXJpc2RpYXpAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJydHBzdGF0cy5oIgotCi12b2lkCi1nc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9yZXNldCAoUlRQUGFja2V0UmF0ZUN0eCAqIGN0eCwgZ3VpbnQzMiBjbG9ja19yYXRlKQotewotICBjdHgtPmNsb2NrX3JhdGUgPSBjbG9ja19yYXRlOwotICBjdHgtPnByb2JlZCA9IEZBTFNFOwotICBjdHgtPmF2Z19wYWNrZXRfcmF0ZSA9IC0xOwotICBjdHgtPmxhc3RfdHMgPSAtMTsKLX0KLQotZ3VpbnQzMgotZ3N0X3J0cF9wYWNrZXRfcmF0ZV9jdHhfdXBkYXRlIChSVFBQYWNrZXRSYXRlQ3R4ICogY3R4LCBndWludDE2IHNlcW51bSwKLSAgICBndWludDMyIHRzKQotewotICBndWludDY0IG5ld190cywgZGlmZl90czsKLSAgZ2ludCBkaWZmX3NlcW51bTsKLSAgZ3VpbnQzMiBuZXdfcGFja2V0X3JhdGU7Ci0KLSAgaWYgKGN0eC0+Y2xvY2tfcmF0ZSA8PSAwKSB7Ci0gICAgcmV0dXJuIGN0eC0+YXZnX3BhY2tldF9yYXRlOwotICB9Ci0KLSAgbmV3X3RzID0gY3R4LT5sYXN0X3RzOwotICBnc3RfcnRwX2J1ZmZlcl9leHRfdGltZXN0YW1wICgmbmV3X3RzLCB0cyk7Ci0KLSAgaWYgKCFjdHgtPnByb2JlZCkgewotICAgIGN0eC0+bGFzdF9zZXFudW0gPSBzZXFudW07Ci0gICAgY3R4LT5sYXN0X3RzID0gbmV3X3RzOwotICAgIGN0eC0+cHJvYmVkID0gVFJVRTsKLSAgICByZXR1cm4gY3R4LT5hdmdfcGFja2V0X3JhdGU7Ci0gIH0KLQotICBkaWZmX3NlcW51bSA9IGdzdF9ydHBfYnVmZmVyX2NvbXBhcmVfc2VxbnVtIChjdHgtPmxhc3Rfc2VxbnVtLCBzZXFudW0pOwotICBpZiAoZGlmZl9zZXFudW0gPD0gMCB8fCBuZXdfdHMgPD0gY3R4LT5sYXN0X3RzKSB7Ci0gICAgcmV0dXJuIGN0eC0+YXZnX3BhY2tldF9yYXRlOwotICB9Ci0KLSAgZGlmZl90cyA9IG5ld190cyAtIGN0eC0+bGFzdF90czsKLSAgZGlmZl90cyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKGRpZmZfdHMsIEdTVF9TRUNPTkQsIGN0eC0+Y2xvY2tfcmF0ZSk7Ci0gIG5ld19wYWNrZXRfcmF0ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoZGlmZl9zZXFudW0sIEdTVF9TRUNPTkQsIGRpZmZfdHMpOwotCi0gIC8qIFRoZSBnb2FsIGlzIHRoYXQgaGlnaGVyIHBhY2tldCByYXRlcyAid2luIi4KLSAgICogSWYgdGhlcmUncyBhIHN1ZGRlbiBidXJzdCwgdGhlIGF2ZXJhZ2Ugd2lsbCBnbyB1cCBmYXN0LAotICAgKiBidXQgaXQgd2lsbCBnbyBkb3duIGFnYWluIHNsb3dseS4KLSAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGJ1cnN0eSBjYXNlcywgd2hlcmUgYSBsb3Qgb2YgcGFja2V0cyBhcmUgY2xvc2UKLSAgICogdG8gZWFjaCBvdGhlciBhbmQgc2hvdWxkIGFsbG93IGEgaGlnaGVyIHJlb3JkZXIvZHJvcG91dCB0aGVyZS4KLSAgICogUm91bmQgdXAgdGhlIG5ldyBhdmVyYWdlLgotICAgKi8KLSAgaWYgKGN0eC0+YXZnX3BhY2tldF9yYXRlID4gbmV3X3BhY2tldF9yYXRlKSB7Ci0gICAgY3R4LT5hdmdfcGFja2V0X3JhdGUgPSAoNyAqIGN0eC0+YXZnX3BhY2tldF9yYXRlICsgbmV3X3BhY2tldF9yYXRlICsgNykgLyA4OwotICB9IGVsc2UgewotICAgIGN0eC0+YXZnX3BhY2tldF9yYXRlID0gKGN0eC0+YXZnX3BhY2tldF9yYXRlICsgbmV3X3BhY2tldF9yYXRlICsgMSkgLyAyOwotICB9Ci0KLSAgY3R4LT5sYXN0X3NlcW51bSA9IHNlcW51bTsKLSAgY3R4LT5sYXN0X3RzID0gbmV3X3RzOwotCi0gIHJldHVybiBjdHgtPmF2Z19wYWNrZXRfcmF0ZTsKLX0KLQotZ3VpbnQzMgotZ3N0X3J0cF9wYWNrZXRfcmF0ZV9jdHhfZ2V0IChSVFBQYWNrZXRSYXRlQ3R4ICogY3R4KQotewotICByZXR1cm4gY3R4LT5hdmdfcGFja2V0X3JhdGU7Ci19Ci0KLWd1aW50MzIKLWdzdF9ydHBfcGFja2V0X3JhdGVfY3R4X2dldF9tYXhfZHJvcG91dCAoUlRQUGFja2V0UmF0ZUN0eCAqIGN0eCwgZ2ludDMyIHRpbWVfbXMpCi17Ci0gIGlmICh0aW1lX21zIDw9IDAgfHwgIWN0eC0+cHJvYmVkKSB7Ci0gICAgcmV0dXJuIFJUUF9ERUZfRFJPUE9VVDsKLSAgfQotCi0gIHJldHVybiBNQVggKFJUUF9NSU5fRFJPUE9VVCwgY3R4LT5hdmdfcGFja2V0X3JhdGUgKiB0aW1lX21zIC8gMTAwMCk7Ci19Ci0KLWd1aW50MzIKLWdzdF9ydHBfcGFja2V0X3JhdGVfY3R4X2dldF9tYXhfbWlzb3JkZXIgKFJUUFBhY2tldFJhdGVDdHggKiBjdHgsCi0gICAgZ2ludDMyIHRpbWVfbXMpCi17Ci0gIGlmICh0aW1lX21zIDw9IDAgfHwgIWN0eC0+cHJvYmVkKSB7Ci0gICAgcmV0dXJuIFJUUF9ERUZfTUlTT1JERVI7Ci0gIH0KLQotICByZXR1cm4gTUFYIChSVFBfTUlOX01JU09SREVSLCBjdHgtPmF2Z19wYWNrZXRfcmF0ZSAqIHRpbWVfbXMgLyAxMDAwKTsKLX0KLQotLyoqCi0gKiBydHBfc3RhdHNfaW5pdF9kZWZhdWx0czoKLSAqIEBzdGF0czogYW4gI1JUUFNlc3Npb25TdGF0cyBzdHJ1Y3QKLSAqCi0gKiBJbml0aWFsaXplIEBzdGF0cyB3aXRoIGl0cyBkZWZhdWx0IHZhbHVlcy4KLSAqLwotdm9pZAotcnRwX3N0YXRzX2luaXRfZGVmYXVsdHMgKFJUUFNlc3Npb25TdGF0cyAqIHN0YXRzKQotewotICBydHBfc3RhdHNfc2V0X2JhbmR3aWR0aHMgKHN0YXRzLCAtMSwgLTEsIC0xLCAtMSk7Ci0gIHN0YXRzLT5taW5faW50ZXJ2YWwgPSBSVFBfU1RBVFNfTUlOX0lOVEVSVkFMOwotICBzdGF0cy0+YnllX3RpbWVvdXQgPSBSVFBfU1RBVFNfQllFX1RJTUVPVVQ7Ci0gIHN0YXRzLT5uYWNrc19kcm9wcGVkID0gMDsKLSAgc3RhdHMtPm5hY2tzX3NlbnQgPSAwOwotICBzdGF0cy0+bmFja3NfcmVjZWl2ZWQgPSAwOwotfQotCi0vKioKLSAqIHJ0cF9zdGF0c19zZXRfYmFuZHdpZHRoczoKLSAqIEBzdGF0czogYW4gI1JUUFNlc3Npb25TdGF0cyBzdHJ1Y3QKLSAqIEBydHBfYnc6IFJUUCBiYW5kd2lkdGgKLSAqIEBydGNwX2J3OiBSVENQIGJhbmR3aWR0aAotICogQHJzOiBzZW5kZXIgUlRDUCBiYW5kd2lkdGgKLSAqIEBycjogcmVjZWl2ZXIgUlRDUCBiYW5kd2lkdGgKLSAqCi0gKiBDb25maWd1cmUgdGhlIGJhbmR3aWR0aCBwYXJhbWV0ZXJzIGluIHRoZSBzdGF0cy4gV2hlbiBhbiBpbnB1dCB2YXJpYWJsZSBpcwotICogc2V0IHRvIC0xLCBpdCB3aWxsIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgb3RoZXIgaW5wdXQgdmFyaWFibGVzIGFuZCBmcm9tIHRoZQotICogZGVmYXVsdHMuCi0gKi8KLXZvaWQKLXJ0cF9zdGF0c19zZXRfYmFuZHdpZHRocyAoUlRQU2Vzc2lvblN0YXRzICogc3RhdHMsIGd1aW50IHJ0cF9idywKLSAgICBnZG91YmxlIHJ0Y3BfYncsIGd1aW50IHJzLCBndWludCBycikKLXsKLSAgR1NUX0RFQlVHICgicmVjYWxjIGJhbmR3aWR0aHM6IFJUUCAldSwgUlRDUCAlZiwgUlMgJXUsIFJSICV1IiwgcnRwX2J3LAotICAgICAgcnRjcF9idywgcnMsIHJyKTsKLQotICAvKiB3aGVuIGdpdmVuLCBzZW5kZXIgYW5kIHJlY2VpdmUgYmFuZHdpZHRoIGFkZCB1cCB0byB0aGUgdG90YWwKLSAgICogcnRjcCBiYW5kd2lkdGggKi8KLSAgaWYgKHJzICE9IC0xICYmIHJyICE9IC0xKQotICAgIHJ0Y3BfYncgPSBycyArIHJyOwotCi0gIC8qIElmIHJ0Y3BfYncgaXMgYmV0d2VlbiAwIGFuZCAxLCBpdCBpcyBhIGZyYWN0aW9uIG9mIHJ0cF9idyAqLwotICBpZiAocnRjcF9idyA+IDAuMCAmJiBydGNwX2J3IDwgMS4wKSB7Ci0gICAgaWYgKHJ0cF9idyA+IDAuMCkKLSAgICAgIHJ0Y3BfYncgPSBydHBfYncgKiBydGNwX2J3OwotICAgIGVsc2UKLSAgICAgIHJ0Y3BfYncgPSAtMS4wOwotICB9Ci0KLSAgLyogUlRDUCBpcyA1JSBvZiB0aGUgUlRQIGJhbmR3aWR0aCAqLwotICBpZiAocnRwX2J3ID09IC0xICYmIHJ0Y3BfYncgPiAxLjApCi0gICAgcnRwX2J3ID0gcnRjcF9idyAqIDIwOwotICBlbHNlIGlmIChydHBfYncgIT0gLTEgJiYgcnRjcF9idyA8IDAuMCkKLSAgICBydGNwX2J3ID0gcnRwX2J3IC8gMjA7Ci0gIGVsc2UgaWYgKHJ0cF9idyA9PSAtMSAmJiBydGNwX2J3IDwgMC4wKSB7Ci0gICAgLyogbm90aGluZyBnaXZlbiwgdGFrZSBkZWZhdWx0cyAqLwotICAgIHJ0cF9idyA9IFJUUF9TVEFUU19CQU5EV0lEVEg7Ci0gICAgcnRjcF9idyA9IHJ0cF9idyAqIFJUUF9TVEFUU19SVENQX0ZSQUNUSU9OOwotICB9Ci0KLSAgc3RhdHMtPmJhbmR3aWR0aCA9IHJ0cF9idzsKLSAgc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoID0gcnRjcF9idzsKLQotICAvKiBub3cgZmlndXJlIG91dCB0aGUgZnJhY3Rpb25zICovCi0gIGlmIChycyA9PSAtMSkgewotICAgIC8qIHJzIHVua25vd24gKi8KLSAgICBpZiAocnIgPT0gLTEpIHsKLSAgICAgIC8qIGJvdGggbm90IGdpdmVuLCB1c2UgZGVmYXVsdHMgKi8KLSAgICAgIHJzID0gc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoICogUlRQX1NUQVRTX1NFTkRFUl9GUkFDVElPTjsKLSAgICAgIHJyID0gc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoICogUlRQX1NUQVRTX1JFQ0VJVkVSX0ZSQUNUSU9OOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiByciBrbm93biwgY2FsY3VsYXRlIHJzICovCi0gICAgICBpZiAoc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoID4gcnIpCi0gICAgICAgIHJzID0gc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoIC0gcnI7Ci0gICAgICBlbHNlCi0gICAgICAgIHJzID0gMDsKLSAgICB9Ci0gIH0gZWxzZSBpZiAocnIgPT0gLTEpIHsKLSAgICAvKiBycyBrbm93biwgY2FsY3VsYXRlIHJyICovCi0gICAgaWYgKHN0YXRzLT5ydGNwX2JhbmR3aWR0aCA+IHJzKQotICAgICAgcnIgPSBzdGF0cy0+cnRjcF9iYW5kd2lkdGggLSByczsKLSAgICBlbHNlCi0gICAgICByciA9IDA7Ci0gIH0KLQotICBpZiAoc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoID4gMCkgewotICAgIHN0YXRzLT5zZW5kZXJfZnJhY3Rpb24gPSAoKGdkb3VibGUpIHJzKSAvICgoZ2RvdWJsZSkgc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoKTsKLSAgICBzdGF0cy0+cmVjZWl2ZXJfZnJhY3Rpb24gPSAxLjAgLSBzdGF0cy0+c2VuZGVyX2ZyYWN0aW9uOwotICB9IGVsc2UgewotICAgIC8qIG5vIFJUQ1AgYmFuZHdpZHRoLCBzZXQgZHVtbXkgdmFsdWVzICovCi0gICAgc3RhdHMtPnNlbmRlcl9mcmFjdGlvbiA9IDAuMDsKLSAgICBzdGF0cy0+cmVjZWl2ZXJfZnJhY3Rpb24gPSAwLjA7Ci0gIH0KLSAgR1NUX0RFQlVHICgiYmFuZHdpZHRoczogUlRQICV1LCBSVENQICV1LCBSUyAlZiwgUlIgJWYiLCBzdGF0cy0+YmFuZHdpZHRoLAotICAgICAgc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoLCBzdGF0cy0+c2VuZGVyX2ZyYWN0aW9uLCBzdGF0cy0+cmVjZWl2ZXJfZnJhY3Rpb24pOwotfQotCi0vKioKLSAqIHJ0cF9zdGF0c19jYWxjdWxhdGVfcnRjcF9pbnRlcnZhbDoKLSAqIEBzdGF0czogYW4gI1JUUFNlc3Npb25TdGF0cyBzdHJ1Y3QKLSAqIEBzZW5kZXI6IGlmIHdlIGFyZSBhIHNlbmRlcgotICogQHByb2ZpbGU6IFJUUCBwcm9maWxlIG9mIHRoaXMgc2Vzc2lvbgotICogQHB0cDogaWYgdGhpcyBzZXNzaW9uIGlzIGEgcG9pbnQtdG8tcG9pbnQgc2Vzc2lvbgotICogQGZpcnN0OiBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lCi0gKgotICogQ2FsY3VsYXRlIHRoZSBSVENQIGludGVydmFsLiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGFtb3VudCBvZgotICogdGltZSB0byB3YWl0IChpbiBuYW5vc2Vjb25kcykgYmVmb3JlIHNlbmRpbmcgYSBuZXcgUlRDUCBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6IHRoZSBSVENQIGludGVydmFsLgotICovCi1Hc3RDbG9ja1RpbWUKLXJ0cF9zdGF0c19jYWxjdWxhdGVfcnRjcF9pbnRlcnZhbCAoUlRQU2Vzc2lvblN0YXRzICogc3RhdHMsIGdib29sZWFuIHdlX3NlbmQsCi0gICAgR3N0UlRQUHJvZmlsZSBwcm9maWxlLCBnYm9vbGVhbiBwdHAsIGdib29sZWFuIGZpcnN0KQotewotICBnZG91YmxlIG1lbWJlcnMsIHNlbmRlcnMsIG47Ci0gIGdkb3VibGUgYXZnX3J0Y3Bfc2l6ZSwgcnRjcF9idzsKLSAgZ2RvdWJsZSBpbnRlcnZhbDsKLSAgZ2RvdWJsZSBydGNwX21pbl90aW1lOwotCi0gIGlmIChwcm9maWxlID09IEdTVF9SVFBfUFJPRklMRV9BVlBGIHx8IHByb2ZpbGUgPT0gR1NUX1JUUF9QUk9GSUxFX1NBVlBGKSB7Ci0gICAgLyogUkZDIDQ1ODUgMy40ZCksIDMuNS4xICovCi0KLSAgICBpZiAoZmlyc3QgJiYgIXB0cCkKLSAgICAgIHJ0Y3BfbWluX3RpbWUgPSAxLjA7Ci0gICAgZWxzZQotICAgICAgcnRjcF9taW5fdGltZSA9IDAuMDsKLSAgfSBlbHNlIHsKLSAgICAvKiBWZXJ5IGZpcnN0IGNhbGwgYXQgYXBwbGljYXRpb24gc3RhcnQtdXAgdXNlcyBoYWxmIHRoZSBtaW4KLSAgICAgKiBkZWxheSBmb3IgcXVpY2tlciBub3RpZmljYXRpb24gd2hpbGUgc3RpbGwgYWxsb3dpbmcgc29tZSB0aW1lCi0gICAgICogYmVmb3JlIHJlcG9ydGluZyBmb3IgcmFuZG9taXphdGlvbiBhbmQgdG8gbGVhcm4gYWJvdXQgb3RoZXIKLSAgICAgKiBzb3VyY2VzIHNvIHRoZSByZXBvcnQgaW50ZXJ2YWwgd2lsbCBjb252ZXJnZSB0byB0aGUgY29ycmVjdAotICAgICAqIGludGVydmFsIG1vcmUgcXVpY2tseS4KLSAgICAgKi8KLSAgICBydGNwX21pbl90aW1lID0gc3RhdHMtPm1pbl9pbnRlcnZhbDsKLSAgICBpZiAoZmlyc3QpCi0gICAgICBydGNwX21pbl90aW1lIC89IDIuMDsKLSAgfQotCi0gIC8qIERlZGljYXRlIGEgZnJhY3Rpb24gb2YgdGhlIFJUQ1AgYmFuZHdpZHRoIHRvIHNlbmRlcnMgdW5sZXNzCi0gICAqIHRoZSBudW1iZXIgb2Ygc2VuZGVycyBpcyBsYXJnZSBlbm91Z2ggdGhhdCB0aGVpciBzaGFyZSBpcwotICAgKiBtb3JlIHRoYW4gdGhhdCBmcmFjdGlvbi4KLSAgICovCi0gIG4gPSBtZW1iZXJzID0gc3RhdHMtPmFjdGl2ZV9zb3VyY2VzOwotICBzZW5kZXJzID0gKGdkb3VibGUpIHN0YXRzLT5zZW5kZXJfc291cmNlczsKLSAgcnRjcF9idyA9IHN0YXRzLT5ydGNwX2JhbmR3aWR0aDsKLQotICBpZiAoc2VuZGVycyA8PSBtZW1iZXJzICogc3RhdHMtPnNlbmRlcl9mcmFjdGlvbikgewotICAgIGlmICh3ZV9zZW5kKSB7Ci0gICAgICBydGNwX2J3ICo9IHN0YXRzLT5zZW5kZXJfZnJhY3Rpb247Ci0gICAgICBuID0gc2VuZGVyczsKLSAgICB9IGVsc2UgewotICAgICAgcnRjcF9idyAqPSBzdGF0cy0+cmVjZWl2ZXJfZnJhY3Rpb247Ci0gICAgICBuIC09IHNlbmRlcnM7Ci0gICAgfQotICB9Ci0KLSAgLyogbm8gYmFuZHdpZHRoIGZvciBSVENQLCByZXR1cm4gTk9ORSB0byBzaWduYWwgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHNlbmQKLSAgICogUlRDUCBwYWNrZXRzICovCi0gIGlmIChydGNwX2J3IDw9IDAuMDAwMSkKLSAgICByZXR1cm4gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICBhdmdfcnRjcF9zaXplID0gOC4wICogc3RhdHMtPmF2Z19ydGNwX3BhY2tldF9zaXplOwotICAvKgotICAgKiBUaGUgZWZmZWN0aXZlIG51bWJlciBvZiBzaXRlcyB0aW1lcyB0aGUgYXZlcmFnZSBwYWNrZXQgc2l6ZSBpcwotICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyBzZW50IHdoZW4gZWFjaCBzaXRlIHNlbmRzIGEgcmVwb3J0LgotICAgKiBEaXZpZGluZyB0aGlzIGJ5IHRoZSBlZmZlY3RpdmUgYmFuZHdpZHRoIGdpdmVzIHRoZSB0aW1lCi0gICAqIGludGVydmFsIG92ZXIgd2hpY2ggdGhvc2UgcGFja2V0cyBtdXN0IGJlIHNlbnQgaW4gb3JkZXIgdG8KLSAgICogbWVldCB0aGUgYmFuZHdpZHRoIHRhcmdldCwgd2l0aCBhIG1pbmltdW0gZW5mb3JjZWQuICBJbiB0aGF0Ci0gICAqIHRpbWUgaW50ZXJ2YWwgd2Ugc2VuZCBvbmUgcmVwb3J0IHNvIHRoaXMgdGltZSBpcyBhbHNvIG91cgotICAgKiBhdmVyYWdlIHRpbWUgYmV0d2VlbiByZXBvcnRzLgotICAgKi8KLSAgR1NUX0RFQlVHICgiYXZnIHNpemUgJWYsIG4gJWYsIHJ0Y3BfYncgJWYiLCBhdmdfcnRjcF9zaXplLCBuLCBydGNwX2J3KTsKLSAgaW50ZXJ2YWwgPSBhdmdfcnRjcF9zaXplICogbiAvIHJ0Y3BfYnc7Ci0gIGlmIChpbnRlcnZhbCA8IHJ0Y3BfbWluX3RpbWUpCi0gICAgaW50ZXJ2YWwgPSBydGNwX21pbl90aW1lOwotCi0gIHJldHVybiBpbnRlcnZhbCAqIEdTVF9TRUNPTkQ7Ci19Ci0KLS8qKgotICogcnRwX3N0YXRzX2FkZF9ydGNwX2ppdHRlcjoKLSAqIEBzdGF0czogYW4gI1JUUFNlc3Npb25TdGF0cyBzdHJ1Y3QKLSAqIEBpbnRlcnZhbDogYW4gUlRDUCBpbnRlcnZhbAotICoKLSAqIEFwcGx5IGEgcmFuZG9tIGppdHRlciB0byB0aGUgQGludGVydmFsLiBAaW50ZXJ2YWwgaXMgdHlwaWNhbGx5IG9idGFpbmVkIHdpdGgKLSAqIHJ0cF9zdGF0c19jYWxjdWxhdGVfcnRjcF9pbnRlcnZhbCgpLgotICoKLSAqIFJldHVybnM6IHRoZSBuZXcgUlRDUCBpbnRlcnZhbC4KLSAqLwotR3N0Q2xvY2tUaW1lCi1ydHBfc3RhdHNfYWRkX3J0Y3Bfaml0dGVyIChSVFBTZXNzaW9uU3RhdHMgKiBzdGF0cywgR3N0Q2xvY2tUaW1lIGludGVydmFsKQotewotICBnZG91YmxlIHRlbXA7Ci0KLSAgLyogc2VlIFJGQyAzNTUwIHAgMzAKLSAgICogVG8gY29tcGVuc2F0ZSBmb3IgInVuY29uZGl0aW9uYWwgcmVjb25zaWRlcmF0aW9uIiBjb252ZXJnaW5nIHRvIGEKLSAgICogdmFsdWUgYmVsb3cgdGhlIGludGVuZGVkIGF2ZXJhZ2UuCi0gICAqLwotI2RlZmluZSBDT01QRU5TQVRJT04gICgyLjcxODI4IC0gMS41KTsKLQotICB0ZW1wID0gKGludGVydmFsICogZ19yYW5kb21fZG91YmxlX3JhbmdlICgwLjUsIDEuNSkpIC8gQ09NUEVOU0FUSU9OOwotCi0gIHJldHVybiAoR3N0Q2xvY2tUaW1lKSB0ZW1wOwotfQotCi0KLS8qKgotICogcnRwX3N0YXRzX2NhbGN1bGF0ZV9ieWVfaW50ZXJ2YWw6Ci0gKiBAc3RhdHM6IGFuICNSVFBTZXNzaW9uU3RhdHMgc3RydWN0Ci0gKgotICogQ2FsY3VsYXRlIHRoZSBCWUUgaW50ZXJ2YWwuIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGUgYW1vdW50IG9mCi0gKiB0aW1lIHRvIHdhaXQgKGluIG5hbm9zZWNvbmRzKSBiZWZvcmUgc2VuZGluZyBhIEJZRSBtZXNzYWdlLgotICoKLSAqIFJldHVybnM6IHRoZSBCWUUgaW50ZXJ2YWwuCi0gKi8KLUdzdENsb2NrVGltZQotcnRwX3N0YXRzX2NhbGN1bGF0ZV9ieWVfaW50ZXJ2YWwgKFJUUFNlc3Npb25TdGF0cyAqIHN0YXRzKQotewotICBnZG91YmxlIG1lbWJlcnM7Ci0gIGdkb3VibGUgYXZnX3J0Y3Bfc2l6ZSwgcnRjcF9idzsKLSAgZ2RvdWJsZSBpbnRlcnZhbDsKLSAgZ2RvdWJsZSBydGNwX21pbl90aW1lOwotCi0gIC8qIG5vIGludGVydmFsIHdoZW4gd2UgaGF2ZSBsZXNzIHRoYW4gNTAgbWVtYmVycyAqLwotICBpZiAoc3RhdHMtPmFjdGl2ZV9zb3VyY2VzIDwgNTApCi0gICAgcmV0dXJuIDA7Ci0KLSAgcnRjcF9taW5fdGltZSA9IChzdGF0cy0+bWluX2ludGVydmFsKSAvIDIuMDsKLQotICAvKiBEZWRpY2F0ZSBhIGZyYWN0aW9uIG9mIHRoZSBSVENQIGJhbmR3aWR0aCB0byBzZW5kZXJzIHVubGVzcwotICAgKiB0aGUgbnVtYmVyIG9mIHNlbmRlcnMgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlaXIgc2hhcmUgaXMKLSAgICogbW9yZSB0aGFuIHRoYXQgZnJhY3Rpb24uCi0gICAqLwotICBtZW1iZXJzID0gc3RhdHMtPmJ5ZV9tZW1iZXJzOwotICBydGNwX2J3ID0gc3RhdHMtPnJ0Y3BfYmFuZHdpZHRoICogc3RhdHMtPnJlY2VpdmVyX2ZyYWN0aW9uOwotCi0gIC8qIG5vIGJhbmR3aWR0aCBmb3IgUlRDUCwgcmV0dXJuIE5PTkUgdG8gc2lnbmFsIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBzZW5kCi0gICAqIFJUQ1AgcGFja2V0cyAqLwotICBpZiAocnRjcF9idyA8PSAwLjAwMDEpCi0gICAgcmV0dXJuIEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgYXZnX3J0Y3Bfc2l6ZSA9IDguMCAqIHN0YXRzLT5hdmdfcnRjcF9wYWNrZXRfc2l6ZTsKLSAgLyoKLSAgICogVGhlIGVmZmVjdGl2ZSBudW1iZXIgb2Ygc2l0ZXMgdGltZXMgdGhlIGF2ZXJhZ2UgcGFja2V0IHNpemUgaXMKLSAgICogdGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgc2VudCB3aGVuIGVhY2ggc2l0ZSBzZW5kcyBhIHJlcG9ydC4KLSAgICogRGl2aWRpbmcgdGhpcyBieSB0aGUgZWZmZWN0aXZlIGJhbmR3aWR0aCBnaXZlcyB0aGUgdGltZQotICAgKiBpbnRlcnZhbCBvdmVyIHdoaWNoIHRob3NlIHBhY2tldHMgbXVzdCBiZSBzZW50IGluIG9yZGVyIHRvCi0gICAqIG1lZXQgdGhlIGJhbmR3aWR0aCB0YXJnZXQsIHdpdGggYSBtaW5pbXVtIGVuZm9yY2VkLiAgSW4gdGhhdAotICAgKiB0aW1lIGludGVydmFsIHdlIHNlbmQgb25lIHJlcG9ydCBzbyB0aGlzIHRpbWUgaXMgYWxzbyBvdXIKLSAgICogYXZlcmFnZSB0aW1lIGJldHdlZW4gcmVwb3J0cy4KLSAgICovCi0gIGludGVydmFsID0gYXZnX3J0Y3Bfc2l6ZSAqIG1lbWJlcnMgLyBydGNwX2J3OwotICBpZiAoaW50ZXJ2YWwgPCBydGNwX21pbl90aW1lKQotICAgIGludGVydmFsID0gcnRjcF9taW5fdGltZTsKLQotICByZXR1cm4gaW50ZXJ2YWwgKiBHU1RfU0VDT05EOwotfQotCi0vKioKLSAqIHJ0cF9zdGF0c19nZXRfcGFja2V0c19sb3N0OgotICogQHN0YXRzOiBhbiAjUlRQU291cmNlU3RhdHMgc3RydWN0Ci0gKgotICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgUlRQIHBhY2tldHMgbG9zdCBzaW5jZSBiZWdpbm5pbmcgb2YKLSAqIHJlY2VwdGlvbi4gUGFja2V0cyB0aGF0IGFycml2ZSBsYXRlIGFyZSBub3QgY29uc2lkZXJlZCBsb3N0LCBhbmQKLSAqIGR1cGxpY2F0ZXMgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuIEhlbmNlLCB0aGUgbG9zcyBtYXkgYmUgbmVnYXRpdmUKLSAqIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVzLgotICoKLSAqIFJldHVybnM6IHRvdGFsIFJUUCBwYWNrZXRzIGxvc3QuCi0gKi8KLWdpbnQ2NAotcnRwX3N0YXRzX2dldF9wYWNrZXRzX2xvc3QgKGNvbnN0IFJUUFNvdXJjZVN0YXRzICogc3RhdHMpCi17Ci0gIGdpbnQ2NCBsb3N0OwotICBndWludDY0IGV4dGVuZGVkX21heCwgZXhwZWN0ZWQ7Ci0KLSAgZXh0ZW5kZWRfbWF4ID0gc3RhdHMtPmN5Y2xlcyArIHN0YXRzLT5tYXhfc2VxOwotICBleHBlY3RlZCA9IGV4dGVuZGVkX21heCAtIHN0YXRzLT5iYXNlX3NlcSArIDE7Ci0gIGxvc3QgPSBleHBlY3RlZCAtIHN0YXRzLT5wYWNrZXRzX3JlY2VpdmVkOwotCi0gIHJldHVybiBsb3N0OwotfQotCi12b2lkCi1ydHBfc3RhdHNfc2V0X21pbl9pbnRlcnZhbCAoUlRQU2Vzc2lvblN0YXRzICogc3RhdHMsIGdkb3VibGUgbWluX2ludGVydmFsKQotewotICBzdGF0cy0+bWluX2ludGVydmFsID0gbWluX2ludGVydmFsOwotfQotCi1nYm9vbGVhbgotX19nX3NvY2tldF9hZGRyZXNzX2VxdWFsIChHU29ja2V0QWRkcmVzcyAqIGEsIEdTb2NrZXRBZGRyZXNzICogYikKLXsKLSAgR0luZXRTb2NrZXRBZGRyZXNzICppYSwgKmliOwotICBHSW5ldEFkZHJlc3MgKmlhYSwgKmlhYjsKLQotICBpYSA9IEdfSU5FVF9TT0NLRVRfQUREUkVTUyAoYSk7Ci0gIGliID0gR19JTkVUX1NPQ0tFVF9BRERSRVNTIChiKTsKLQotICBpZiAoZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9wb3J0IChpYSkgIT0KLSAgICAgIGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfcG9ydCAoaWIpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpYWEgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MgKGlhKTsKLSAgaWFiID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzIChpYik7Ci0KLSAgcmV0dXJuIGdfaW5ldF9hZGRyZXNzX2VxdWFsIChpYWEsIGlhYik7Ci19Ci0KLWdjaGFyICoKLV9fZ19zb2NrZXRfYWRkcmVzc190b19zdHJpbmcgKEdTb2NrZXRBZGRyZXNzICogYWRkcikKLXsKLSAgR0luZXRTb2NrZXRBZGRyZXNzICppYTsKLSAgZ2NoYXIgKnJldCwgKnRtcDsKLQotICBpYSA9IEdfSU5FVF9TT0NLRVRfQUREUkVTUyAoYWRkcik7Ci0KLSAgdG1wID0gZ19pbmV0X2FkZHJlc3NfdG9fc3RyaW5nIChnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MgKGlhKSk7Ci0gIHJldCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiV1IiwgdG1wLCBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X3BvcnQgKGlhKSk7Ci0gIGdfZnJlZSAodG1wKTsKLQotICByZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaCBiL2dzdC9ydHBtYW5hZ2VyL3J0cHN0YXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YmE5ZGEuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0cG1hbmFnZXIvcnRwc3RhdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpICAyMDE1IEt1cmVudG8gKGh0dHA6Ly9rdXJlbnRvLm9yZy8pCi0gKiAgIEBhdXRob3I6IE1pZ3VlbCBQYXLDrXMgPG1wYXJpc2RpYXpAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19SVFBfU1RBVFNfSF9fCi0jZGVmaW5lIF9fUlRQX1NUQVRTX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotLyoqCi0gKiBSVFBTZW5kZXJSZXBvcnQ6Ci0gKgotICogQSBzZW5kZXIgcmVwb3J0IHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBnYm9vbGVhbiBpc192YWxpZDsKLSAgZ3VpbnQ2NCBudHB0aW1lOwotICBndWludDMyIHJ0cHRpbWU7Ci0gIGd1aW50MzIgcGFja2V0X2NvdW50OwotICBndWludDMyIG9jdGV0X2NvdW50OwotICBHc3RDbG9ja1RpbWUgdGltZTsKLX0gUlRQU2VuZGVyUmVwb3J0OwotCi0vKioKLSAqIFJUUFJlY2VpdmVyUmVwb3J0OgotICoKLSAqIEEgcmVjZWl2ZXIgcmVwb3J0IHN0cnVjdHVyZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBnYm9vbGVhbiBpc192YWxpZDsKLSAgZ3VpbnQzMiBzc3JjOyAvKiB3aG8gdGhlIHJlcG9ydCBpcyBmcm9tICovCi0gIGd1aW50OCAgZnJhY3Rpb25sb3N0OwotICBndWludDMyIHBhY2tldHNsb3N0OwotICBndWludDMyIGV4dGhpZ2hlc3RzZXE7Ci0gIGd1aW50MzIgaml0dGVyOwotICBndWludDMyIGxzcjsKLSAgZ3VpbnQzMiBkbHNyOwotICBndWludDMyIHJvdW5kX3RyaXA7Ci19IFJUUFJlY2VpdmVyUmVwb3J0OwotCi0vKioKLSAqIFJUUFBhY2tldEluZm86Ci0gKiBAc2VuZDogaWYgdGhpcyBpcyBhIHBhY2tldCBmb3Igc2VuZGluZwotICogQHJ0cDogaWYgdGhpcyBpbmZvIGlzIGFib3V0IGFuIFJUUCBwYWNrZXQKLSAqIEBpc19saXN0OiBpZiB0aGlzIGlzIGEgYnVmZmVybGlzdAotICogQGRhdGE6IGEgI0dzdEJ1ZmZlciBvciAjR3N0QnVmZmVyTGlzdAotICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgdGhlIHNlbmRlciBvZiB0aGUgcGFja2V0Ci0gKiBAY3VycmVudF90aW1lOiBjdXJyZW50IHRpbWUgYWNjb3JkaW5nIHRvIHRoZSBzeXN0ZW0gY2xvY2sKLSAqIEBydW5uaW5nX3RpbWU6IHRpbWUgb2YgYSBwYWNrZXQgYXMgYnVmZmVyIHJ1bm5pbmdfdGltZQotICogQG50cG5zdGltZTogdGltZSBvZiBhIHBhY2tldCBOVFAgdGltZSBpbiBuYW5vc2Vjb25kcwotICogQGhlYWRlcl9sZW46IG51bWJlciBvZiBvdmVyaGVhZCBieXRlcyBwZXIgcGFja2V0Ci0gKiBAYnl0ZXM6IGJ5dGVzIG9mIHRoZSBwYWNrZXQgaW5jbHVkaW5nIGxvd2xldmVsIG92ZXJoZWFkCi0gKiBAcGF5bG9hZF9sZW46IGJ5dGVzIG9mIHRoZSBSVFAgcGF5bG9hZAotICogQHNlcW51bTogdGhlIHNlcW51bSBvZiB0aGUgcGFja2V0Ci0gKiBAcHQ6IHRoZSBwYXlsb2FkIHR5cGUgb2YgdGhlIHBhY2tldAotICogQHJ0cHRpbWU6IHRoZSBSVFAgdGltZSBvZiB0aGUgcGFja2V0Ci0gKgotICogU3RydWN0dXJlIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBnYm9vbGVhbiAgICAgIHNlbmQ7Ci0gIGdib29sZWFuICAgICAgcnRwOwotICBnYm9vbGVhbiAgICAgIGlzX2xpc3Q7Ci0gIGdwb2ludGVyICAgICAgZGF0YTsKLSAgR1NvY2tldEFkZHJlc3MgKmFkZHJlc3M7Ci0gIEdzdENsb2NrVGltZSAgY3VycmVudF90aW1lOwotICBHc3RDbG9ja1RpbWUgIHJ1bm5pbmdfdGltZTsKLSAgZ3VpbnQ2NCAgICAgICBudHBuc3RpbWU7Ci0gIGd1aW50ICAgICAgICAgaGVhZGVyX2xlbjsKLSAgZ3VpbnQgICAgICAgICBieXRlczsKLSAgZ3VpbnQgICAgICAgICBwYWNrZXRzOwotICBndWludCAgICAgICAgIHBheWxvYWRfbGVuOwotICBndWludDMyICAgICAgIHNzcmM7Ci0gIGd1aW50MTYgICAgICAgc2VxbnVtOwotICBndWludDggICAgICAgIHB0OwotICBndWludDMyICAgICAgIHJ0cHRpbWU7Ci0gIGd1aW50MzIgICAgICAgY3NyY19jb3VudDsKLSAgZ3VpbnQzMiAgICAgICBjc3Jjc1sxNl07Ci19IFJUUFBhY2tldEluZm87Ci0KLS8qKgotICogUlRQU291cmNlU3RhdHM6Ci0gKiBAcGFja2V0c3JlY2VpdmVkOiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBpbiB0b3RhbAotICogQHByZXZwYWNrZXRzcmVjZWl2ZWQ6IG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIGluIHByZXZpb3VzIHJlcG9ydGluZwotICogICAgICAgICAgICAgICAgICAgICAgIGludGVydmFsCi0gKiBAb2N0ZXRzcmVjZWl2ZWQ6IG51bWJlciBvZiBwYXlsb2FkIGJ5dGVzIHJlY2VpdmVkCi0gKiBAYnl0ZXNyZWNlaXZlZDogbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIHJlY2VpdmVkIGluY2x1ZGluZyBoZWFkZXJzIGFuZCBsb3dlcgotICogICAgICAgICAgICAgICAgIHByb3RvY29sIGxldmVsIG92ZXJoZWFkCi0gKiBAbWF4X3NlcW5yOiBoaWdoZXN0IHNlcXVlbmNlIG51bWJlciByZWNlaXZlZAotICogQHRyYW5zaXQ6IHByZXZpb3VzIHRyYW5zaXQgdGltZSB1c2VkIGZvciBjYWxjdWxhdGluZyBAaml0dGVyCi0gKiBAaml0dGVyOiBjdXJyZW50IGppdHRlciAoaW4gY2xvY2sgcmF0ZSB1bml0cyBzY2FsZWQgYnkgMTYgZm9yIHByZWNpc2lvbikKLSAqIEBwcmV2X3J0cHRpbWU6IHByZXZpb3VzIHRpbWUgd2hlbiBhbiBSVFAgcGFja2V0IHdhcyByZWNlaXZlZAotICogQHByZXZfcnRjcHRpbWU6IHByZXZpb3VzIHRpbWUgd2hlbiBhbiBSVENQIHBhY2tldCB3YXMgcmVjZWl2ZWQKLSAqIEBsYXN0X3J0cHRpbWU6IHRpbWUgd2hlbiBsYXN0IFJUUCBwYWNrZXQgcmVjZWl2ZWQKLSAqIEBsYXN0X3J0Y3B0aW1lOiB0aW1lIHdoZW4gbGFzdCBSVENQIHBhY2tldCByZWNlaXZlZAotICogQGN1cnJfcnI6IGluZGV4IG9mIGN1cnJlbnQgQHJyIGJsb2NrCi0gKiBAcnI6IHByZXZpb3VzIGFuZCBjdXJyZW50IHJlY2VpdmVyIHJlcG9ydCBibG9jawotICogQGN1cnJfc3I6IGluZGV4IG9mIGN1cnJlbnQgQHNyIGJsb2NrCi0gKiBAc3I6IHByZXZpb3VzIGFuZCBjdXJyZW50IHNlbmRlciByZXBvcnQgYmxvY2sKLSAqCi0gKiBTdGF0cyBhYm91dCBhIHNvdXJjZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBndWludDY0ICAgICAgcGFja2V0c19yZWNlaXZlZDsKLSAgZ3VpbnQ2NCAgICAgIG9jdGV0c19yZWNlaXZlZDsKLSAgZ3VpbnQ2NCAgICAgIGJ5dGVzX3JlY2VpdmVkOwotCi0gIGd1aW50MzIgICAgICBwcmV2X2V4cGVjdGVkOwotICBndWludDMyICAgICAgcHJldl9yZWNlaXZlZDsKLQotICBndWludDE2ICAgICAgbWF4X3NlcTsKLSAgZ3VpbnQ2NCAgICAgIGN5Y2xlczsKLSAgZ3VpbnQzMiAgICAgIGJhc2Vfc2VxOwotICBndWludDMyICAgICAgYmFkX3NlcTsKLSAgZ3VpbnQzMiAgICAgIHRyYW5zaXQ7Ci0gIGd1aW50MzIgICAgICBqaXR0ZXI7Ci0KLSAgZ3VpbnQ2NCAgICAgIHBhY2tldHNfc2VudDsKLSAgZ3VpbnQ2NCAgICAgIG9jdGV0c19zZW50OwotCi0gIGd1aW50ICAgICAgICBzZW50X3BsaV9jb3VudDsKLSAgZ3VpbnQgICAgICAgIHJlY3ZfcGxpX2NvdW50OwotICBndWludCAgICAgICAgc2VudF9maXJfY291bnQ7Ci0gIGd1aW50ICAgICAgICByZWN2X2Zpcl9jb3VudDsKLQotICAvKiB3aGVuIHdlIHJlY2VpdmVkIHN0dWZmICovCi0gIEdzdENsb2NrVGltZSBwcmV2X3J0cHRpbWU7Ci0gIEdzdENsb2NrVGltZSBwcmV2X3J0Y3B0aW1lOwotICBHc3RDbG9ja1RpbWUgbGFzdF9ydHB0aW1lOwotICBHc3RDbG9ja1RpbWUgbGFzdF9ydGNwdGltZTsKLQotICAvKiBzZW5kZXIgYW5kIHJlY2VpdmVyIHJlcG9ydHMgKi8KLSAgZ2ludCAgICAgICAgICAgICAgY3Vycl9ycjsKLSAgUlRQUmVjZWl2ZXJSZXBvcnQgcnJbMl07Ci0gIGdpbnQgICAgICAgICAgICAgIGN1cnJfc3I7Ci0gIFJUUFNlbmRlclJlcG9ydCAgIHNyWzJdOwotfSBSVFBTb3VyY2VTdGF0czsKLQotI2RlZmluZSBSVFBfU1RBVFNfQkFORFdJRFRIICAgICAgICAgICA2NDAwMAotI2RlZmluZSBSVFBfU1RBVFNfUlRDUF9GUkFDVElPTiAgICAgICAwLjA1Ci0vKgotICogTWluaW11bSBhdmVyYWdlIHRpbWUgYmV0d2VlbiBSVENQIHBhY2tldHMgZnJvbSB0aGlzIHNpdGUgKGluCi0gKiBzZWNvbmRzKS4gIFRoaXMgdGltZSBwcmV2ZW50cyB0aGUgcmVwb3J0cyBmcm9tIGBjbHVtcGluZycgd2hlbgotICogc2Vzc2lvbnMgYXJlIHNtYWxsIGFuZCB0aGUgbGF3IG9mIGxhcmdlIG51bWJlcnMgaXNuJ3QgaGVscGluZwotICogdG8gc21vb3RoIG91dCB0aGUgdHJhZmZpYy4gIEl0IGFsc28ga2VlcHMgdGhlIHJlcG9ydCBpbnRlcnZhbAotICogZnJvbSBiZWNvbWluZyByaWRpY3Vsb3VzbHkgc21hbGwgZHVyaW5nIHRyYW5zaWVudCBvdXRhZ2VzIGxpa2UKLSAqIGEgbmV0d29yayBwYXJ0aXRpb24uCi0gKi8KLSNkZWZpbmUgUlRQX1NUQVRTX01JTl9JTlRFUlZBTCAgICAgIDUuMAotLyoKLSAqIEZyYWN0aW9uIG9mIHRoZSBSVENQIGJhbmR3aWR0aCB0byBiZSBzaGFyZWQgYW1vbmcgYWN0aXZlCi0gKiBzZW5kZXJzLiAgKFRoaXMgZnJhY3Rpb24gd2FzIGNob3NlbiBzbyB0aGF0IGluIGEgdHlwaWNhbAotICogc2Vzc2lvbiB3aXRoIG9uZSBvciB0d28gYWN0aXZlIHNlbmRlcnMsIHRoZSBjb21wdXRlZCByZXBvcnQKLSAqIHRpbWUgd291bGQgYmUgcm91Z2hseSBlcXVhbCB0byB0aGUgbWluaW11bSByZXBvcnQgdGltZSBzbyB0aGF0Ci0gKiB3ZSBkb24ndCB1bm5lY2Vzc2FyaWx5IHNsb3cgZG93biByZWNlaXZlciByZXBvcnRzLikgVGhlCi0gKiByZWNlaXZlciBmcmFjdGlvbiBtdXN0IGJlIDEgLSB0aGUgc2VuZGVyIGZyYWN0aW9uLgotICovCi0jZGVmaW5lIFJUUF9TVEFUU19TRU5ERVJfRlJBQ1RJT04gICAgICAgKDAuMjUpCi0jZGVmaW5lIFJUUF9TVEFUU19SRUNFSVZFUl9GUkFDVElPTiAgICAgKDEuMCAtIFJUUF9TVEFUU19TRU5ERVJfRlJBQ1RJT04pCi0KLS8qCi0gKiBXaGVuIHJlY2VpdmluZyBhIEJZRSBmcm9tIGEgc291cmNlLCByZW1vdmUgdGhlIHNvdXJjZSBmcm9tIHRoZSBkYXRhYmFzZQotICogYWZ0ZXIgdGhpcyB0aW1lb3V0LgotICovCi0jZGVmaW5lIFJUUF9TVEFUU19CWUVfVElNRU9VVCAgICAgICAgICAgKDIgKiBHU1RfU0VDT05EKQotCi0vKgotICogVGhlIGRlZmF1bHQgYW5kIG1pbmltdW0gdmFsdWVzIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtaXNzaW5nIHBhY2tldHMgd2UgdG9sZXJhdGUuCi0gKiBUaGVzZSBhcmUgcGFja2V0cyB3aXRoIGFzZXF1ZW5jZSBudW1iZXIgYmlnZ2VyIHRoYW4gdGhlIGxhc3Qgc2VlbiBwYWNrZXQuCi0gKi8KLSNkZWZpbmUgUlRQX0RFRl9EUk9QT1VUICAgICAgMzAwMAotI2RlZmluZSBSVFBfTUlOX0RST1BPVVQgICAgICAzMAotCi0vKgotICogVGhlIGRlZmF1bHQgYW5kIG1pbmltdW0gdmFsdWVzIG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtaXNvcmRlcmVkIHBhY2tldHMgd2UgdG9sZXJhdGUuCi0gKiBUaGVzZSBhcmUgcGFja2V0cyB3aXRoIGEgc2VxdWVuY2UgbnVtYmVyIHNtYWxsZXIgdGhhbiB0aGUgbGFzdCBzZWVuIHBhY2tldC4KLSAqLwotI2RlZmluZSBSVFBfREVGX01JU09SREVSICAgICAxMDAKLSNkZWZpbmUgUlRQX01JTl9NSVNPUkRFUiAgICAgMTAKLQotLyoqCi0gKiBSVFBQYWNrZXRSYXRlQ3R4OgotICoKLSAqIENvbnRleHQgdG8gY2FsY3VsYXRlIHRoZSBwc2V1ZG8tYXZlcmFnZSBwYWNrZXQgcmF0ZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICBnYm9vbGVhbiBwcm9iZWQ7Ci0gIGd1aW50MzIgY2xvY2tfcmF0ZTsKLSAgZ3VpbnQxNiBsYXN0X3NlcW51bTsKLSAgZ3VpbnQ2NCBsYXN0X3RzOwotICBndWludDMyIGF2Z19wYWNrZXRfcmF0ZTsKLX0gUlRQUGFja2V0UmF0ZUN0eDsKLQotdm9pZCBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9yZXNldCAoUlRQUGFja2V0UmF0ZUN0eCAqIGN0eCwgZ3VpbnQzMiBjbG9ja19yYXRlKTsKLWd1aW50MzIgZ3N0X3J0cF9wYWNrZXRfcmF0ZV9jdHhfdXBkYXRlIChSVFBQYWNrZXRSYXRlQ3R4ICpjdHgsIGd1aW50MTYgc2VxbnVtLCBndWludDMyIHRzKTsKLWd1aW50MzIgZ3N0X3J0cF9wYWNrZXRfcmF0ZV9jdHhfZ2V0IChSVFBQYWNrZXRSYXRlQ3R4ICpjdHgpOwotZ3VpbnQzMiBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9nZXRfbWF4X2Ryb3BvdXQgKFJUUFBhY2tldFJhdGVDdHggKmN0eCwgZ2ludDMyIHRpbWVfbXMpOwotZ3VpbnQzMiBnc3RfcnRwX3BhY2tldF9yYXRlX2N0eF9nZXRfbWF4X21pc29yZGVyIChSVFBQYWNrZXRSYXRlQ3R4ICpjdHgsIGdpbnQzMiB0aW1lX21zKTsKLQotLyoqCi0gKiBSVFBTZXNzaW9uU3RhdHM6Ci0gKgotICogU3RhdHMga2VwdCBmb3IgYSBzZXNzaW9uIGFuZCB1c2VkIHRvIHByb2R1Y2UgUlRDUCBwYWNrZXQgdGltZW91dHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgZ3VpbnQgICAgICAgICBiYW5kd2lkdGg7Ci0gIGd1aW50ICAgICAgICAgcnRjcF9iYW5kd2lkdGg7Ci0gIGdkb3VibGUgICAgICAgc2VuZGVyX2ZyYWN0aW9uOwotICBnZG91YmxlICAgICAgIHJlY2VpdmVyX2ZyYWN0aW9uOwotICBnZG91YmxlICAgICAgIG1pbl9pbnRlcnZhbDsKLSAgR3N0Q2xvY2tUaW1lICBieWVfdGltZW91dDsKLSAgZ3VpbnQgICAgICAgICBpbnRlcm5hbF9zb3VyY2VzOwotICBndWludCAgICAgICAgIHNlbmRlcl9zb3VyY2VzOwotICBndWludCAgICAgICAgIGludGVybmFsX3NlbmRlcl9zb3VyY2VzOwotICBndWludCAgICAgICAgIGFjdGl2ZV9zb3VyY2VzOwotICBndWludCAgICAgICAgIGF2Z19ydGNwX3BhY2tldF9zaXplOwotICBndWludCAgICAgICAgIGJ5ZV9tZW1iZXJzOwotICBndWludCAgICAgICAgIG5hY2tzX2Ryb3BwZWQ7Ci0gIGd1aW50ICAgICAgICAgbmFja3Nfc2VudDsKLSAgZ3VpbnQgICAgICAgICBuYWNrc19yZWNlaXZlZDsKLX0gUlRQU2Vzc2lvblN0YXRzOwotCi12b2lkICAgICAgICAgICBydHBfc3RhdHNfaW5pdF9kZWZhdWx0cyAgICAgICAgICAgICAgKFJUUFNlc3Npb25TdGF0cyAqc3RhdHMpOwotCi12b2lkICAgICAgICAgICBydHBfc3RhdHNfc2V0X2JhbmR3aWR0aHMgICAgICAgICAgICAgKFJUUFNlc3Npb25TdGF0cyAqc3RhdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHJ0cF9idywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBydGNwX2J3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBycywgZ3VpbnQgcnIpOwotCi1Hc3RDbG9ja1RpbWUgICBydHBfc3RhdHNfY2FsY3VsYXRlX3J0Y3BfaW50ZXJ2YWwgICAgKFJUUFNlc3Npb25TdGF0cyAqc3RhdHMsIGdib29sZWFuIHNlbmRlciwgR3N0UlRQUHJvZmlsZSBwcm9maWxlLCBnYm9vbGVhbiBwdHAsIGdib29sZWFuIGZpcnN0KTsKLUdzdENsb2NrVGltZSAgIHJ0cF9zdGF0c19hZGRfcnRjcF9qaXR0ZXIgICAgICAgICAgICAoUlRQU2Vzc2lvblN0YXRzICpzdGF0cywgR3N0Q2xvY2tUaW1lIGludGVydmFsKTsKLUdzdENsb2NrVGltZSAgIHJ0cF9zdGF0c19jYWxjdWxhdGVfYnllX2ludGVydmFsICAgICAoUlRQU2Vzc2lvblN0YXRzICpzdGF0cyk7Ci1naW50NjQgICAgICAgICBydHBfc3RhdHNfZ2V0X3BhY2tldHNfbG9zdCAgICAgICAgICAgKGNvbnN0IFJUUFNvdXJjZVN0YXRzICpzdGF0cyk7Ci0KLXZvaWQgICAgICAgICAgIHJ0cF9zdGF0c19zZXRfbWluX2ludGVydmFsICAgICAgICAgICAoUlRQU2Vzc2lvblN0YXRzICpzdGF0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtaW5faW50ZXJ2YWwpOwotCi0KLWdib29sZWFuIF9fZ19zb2NrZXRfYWRkcmVzc19lcXVhbCAoR1NvY2tldEFkZHJlc3MgKmEsIEdTb2NrZXRBZGRyZXNzICpiKTsKLWdjaGFyICogX19nX3NvY2tldF9hZGRyZXNzX3RvX3N0cmluZyAoR1NvY2tldEFkZHJlc3MgKiBhZGRyKTsKLQotI2VuZGlmIC8qIF9fUlRQX1NUQVRTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0c3AvTWFrZWZpbGUuYW0gYi9nc3QvcnRzcC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3ZTQ5YS4uMDAwMDAwMAotLS0gYS9nc3QvcnRzcC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHJ0c3AubGEKLQotbGliZ3N0cnRzcF9sYV9TT1VSQ0VTID0gZ3N0cnRzcC5jIGdzdHJ0c3BzcmMuYyBcCi0JCQlnc3RydHBkZWMuYyBnc3RydHNwZXh0LmMKLQotbGliZ3N0cnRzcF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoR0lPX0NGTEFHUykKLWxpYmdzdHJ0c3BfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoR1NUX0JBU0VfTElCUykgJChHSU9fTElCUykgXAotCQkgICAgICAgLWxnc3RydHAtQEdTVF9BUElfVkVSU0lPTkAgLWxnc3RydHNwLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJICAgICAgIC1sZ3N0c2RwLUBHU1RfQVBJX1ZFUlNJT05AICQoR1NUX05FVF9MSUJTKSAkKEdTVF9MSUJTKQotbGliZ3N0cnRzcF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RydHNwX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0cnRzcHNyYy5oICAgICBcCi0JCSBnc3RydHNwLmggICAgICAgIFwKLQkJIGdzdHJ0cGRlYy5oICAgICAgXAotCQkgZ3N0cnRzcGV4dC5oCmRpZmYgLS1naXQgYS9nc3QvcnRzcC9NYWtlZmlsZS5pbiBiL2dzdC9ydHNwL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTUwNjg4Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHNwL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTQ2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9ydHNwCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0cnRzcF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0cnRzcF9sYV9PQkpFQ1RTID0gbGliZ3N0cnRzcF9sYS1nc3RydHNwLmxvIFwKLQlsaWJnc3RydHNwX2xhLWdzdHJ0c3BzcmMubG8gbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMubG8gXAotCWxpYmdzdHJ0c3BfbGEtZ3N0cnRzcGV4dC5sbwotbGliZ3N0cnRzcF9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RydHNwX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RydHNwX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0cnRzcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHJ0c3BfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0cnRzcF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RydHNwX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHJ0c3BfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHJ0c3AubGEKLWxpYmdzdHJ0c3BfbGFfU09VUkNFUyA9IGdzdHJ0c3AuYyBnc3RydHNwc3JjLmMgXAotCQkJZ3N0cnRwZGVjLmMgZ3N0cnRzcGV4dC5jCi0KLWxpYmdzdHJ0c3BfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1saWJnc3RydHNwX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpICQoR0lPX0xJQlMpIFwKLQkJICAgICAgIC1sZ3N0cnRwLUBHU1RfQVBJX1ZFUlNJT05AIC1sZ3N0cnRzcC1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JCSAgICAgICAtbGdzdHNkcC1AR1NUX0FQSV9WRVJTSU9OQCAkKEdTVF9ORVRfTElCUykgJChHU1RfTElCUykKLQotbGliZ3N0cnRzcF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RydHNwX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdHJ0c3BzcmMuaCAgICAgXAotCQkgZ3N0cnRzcC5oICAgICAgICBcCi0JCSBnc3RydHBkZWMuaCAgICAgIFwKLQkJIGdzdHJ0c3BleHQuaAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvcnRzcC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvcnRzcC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHJ0c3AubGE6ICQobGliZ3N0cnRzcF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHJ0c3BfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHJ0c3BfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHJ0c3BfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHJ0c3BfbGFfT0JKRUNUUykgJChsaWJnc3RydHNwX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHNwX2xhLWdzdHJ0c3AuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHNwX2xhLWdzdHJ0c3BleHQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RydHNwX2xhLWdzdHJ0c3BzcmMuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHJ0c3BfbGEtZ3N0cnRzcC5sbzogZ3N0cnRzcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRzcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHNwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHNwX2xhLWdzdHJ0c3AubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHJ0c3BfbGEtZ3N0cnRzcC5UcG8gLWMgLW8gbGliZ3N0cnRzcF9sYS1nc3RydHNwLmxvIGB0ZXN0IC1mICdnc3RydHNwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0c3AuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0cnRzcF9sYS1nc3RydHNwLlRwbyAkKERFUERJUikvbGliZ3N0cnRzcF9sYS1nc3RydHNwLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHJ0c3AuYycgb2JqZWN0PSdsaWJnc3RydHNwX2xhLWdzdHJ0c3AubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHNwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0c3BfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRzcF9sYS1nc3RydHNwLmxvIGB0ZXN0IC1mICdnc3RydHNwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHJ0c3AuYwotCi1saWJnc3RydHNwX2xhLWdzdHJ0c3BzcmMubG86IGdzdHJ0c3BzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0c3BfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRzcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRzcF9sYS1nc3RydHNwc3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHNwX2xhLWdzdHJ0c3BzcmMuVHBvIC1jIC1vIGxpYmdzdHJ0c3BfbGEtZ3N0cnRzcHNyYy5sbyBgdGVzdCAtZiAnZ3N0cnRzcHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHNwc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0c3BfbGEtZ3N0cnRzcHNyYy5UcG8gJChERVBESVIpL2xpYmdzdHJ0c3BfbGEtZ3N0cnRzcHNyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHNwc3JjLmMnIG9iamVjdD0nbGliZ3N0cnRzcF9sYS1nc3RydHNwc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRzcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHNwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0c3BfbGEtZ3N0cnRzcHNyYy5sbyBgdGVzdCAtZiAnZ3N0cnRzcHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHNwc3JjLmMKLQotbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMubG86IGdzdHJ0cGRlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRzcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHNwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RydHNwX2xhLWdzdHJ0cGRlYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMuVHBvIC1jIC1vIGxpYmdzdHJ0c3BfbGEtZ3N0cnRwZGVjLmxvIGB0ZXN0IC1mICdnc3RydHBkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0cnRwZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0c3BfbGEtZ3N0cnRwZGVjLlRwbyAkKERFUERJUikvbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0cnRwZGVjLmMnIG9iamVjdD0nbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RydHNwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHJ0c3BfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0cnRzcF9sYS1nc3RydHBkZWMubG8gYHRlc3QgLWYgJ2dzdHJ0cGRlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHBkZWMuYwotCi1saWJnc3RydHNwX2xhLWdzdHJ0c3BleHQubG86IGdzdHJ0c3BleHQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHJ0c3BfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0cnRzcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0cnRzcF9sYS1nc3RydHNwZXh0LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RydHNwX2xhLWdzdHJ0c3BleHQuVHBvIC1jIC1vIGxpYmdzdHJ0c3BfbGEtZ3N0cnRzcGV4dC5sbyBgdGVzdCAtZiAnZ3N0cnRzcGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHNwZXh0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHJ0c3BfbGEtZ3N0cnRzcGV4dC5UcG8gJChERVBESVIpL2xpYmdzdHJ0c3BfbGEtZ3N0cnRzcGV4dC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RydHNwZXh0LmMnIG9iamVjdD0nbGliZ3N0cnRzcF9sYS1nc3RydHNwZXh0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0cnRzcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RydHNwX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHJ0c3BfbGEtZ3N0cnRzcGV4dC5sbyBgdGVzdCAtZiAnZ3N0cnRzcGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RydHNwZXh0LmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3J0c3AvUkVBRE1FIGIvZ3N0L3J0c3AvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzZmM2EwLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHNwL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi1SVFNQIHNvdXJjZSAKLS0tLS0tLS0tLS0tCi0KLVRoZSBSVFNQIHNvdXJjZSBlc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYW4gUlRTUCBzZXJ2ZXIgYW5kIHNldHMgdXAKLXRoZSBVRFAgc291cmNlcyBhbmQgUlRQIHNlc3Npb24gaGFuZGxlcnMuCi0KLUFuIFJUU1Agc2Vzc2lvbiBpcyBjcmVhdGVkIGFzIGZvbGxvd3M6Ci0KLS0gUGFyc2UgUlRTUCBVUkw6Ci0KLSAgIGV4OgotICAgICBydHNwOi8vdGhyZWFkOjU0NTQvc291dGgtcnRzcC5tcDMKLQotLSBPcGVuIGEgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIHdpdGggdGhlIHVybC4gQWxsIGZ1cnRoZXIgY29udmVyc2F0aW9uIHdpdGgKLSAgdGhlIHNlcnZlciBzaG91bGQgYmUgZG9uZSB3aXRoIHRoaXMgY29ubmVjdGlvbi4gRWFjaCByZXF1ZXN0L3JlcGx5IGhhcwotICBhIENTZXEgbnVtYmVyIGFkZGVkIHRvIHRoZSBoZWFkZXIuCi0KLS0gU2VuZCBhIERFU0NSSUJFIHJlcXVlc3QgZm9yIHRoZSB1cmwuIFdlIGN1cnJlbnRseSBzdXBwb3J0IGEgcmVzcG9uc2UgaW4KLSAgU0RQLgotCi0gIGV4OgotCi0gICAgPj4gREVTQ1JJQkUgcnRzcDovL3RocmVhZDo1NDU0L3NvdXRoLXJ0c3AubXAzIFJUU1AvMS4wCi0gICAgPj4gQWNjZXB0OiBhcHBsaWNhdGlvbi9zZHAKLSAgICA+PiBDU2VxOiAwCi0gICAgPj4KLSAgICA8PCBSVFNQLzEuMCAyMDAgT0sKLSAgICA8PCBDb250ZW50LUxlbmd0aDogODQKLSAgICA8PCBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NkcAotICAgIDw8IENTZXE6IDAKLSAgICA8PCBEYXRlOiBXZWQgTWF5IDExIDEzOjA5OjM3IDIwMDUgR01UCi0gICAgPDwKLSAgICA8PCB2PTAKLSAgICA8PCBvPS0gMCAwIElOIElQNCAxOTIuMTY4LjEuMQotICAgIDw8IHM9Tm8gVGl0bGUKLSAgICA8PCBtPWF1ZGlvIDAgUlRQL0FWUCAxNAotICAgIDw8IGE9Y29udHJvbDpzdHJlYW1pZD0wCi0KLS0gUGFyc2UgdGhlIFNEUCBtZXNzYWdlLCBmb3IgZWFjaCBzdHJlYW0gKG09KSB3ZSBjcmVhdGUgYW4gR3N0UlRQU3RyZWFtLiBXZSBuZWVkCi0gIHRvIGFsbG9jYXRlIHR3byBsb2NhbCBVRFAgcG9ydHMgZm9yIHJlY2VpdmluZyB0aGUgUlRQIGFuZCBSVENQIGRhdGEgYmVjYXVzZSB3ZQotICBuZWVkIHRvIHNlbmQgdGhlIHBvcnQgbnVtYmVycyB0byB0aGUgc2VydmVyIGluIHRoZSBuZXh0IHJlcXVlc3QuCi0KLSAgSW4gUlRTUFNyYyB3ZSBmaXJzdCBjcmVhdGUgYW4gZWxlbWVudCB0aGF0IGNhbiBoYW5kbGUgdGhlIHVkcDovLzAuMC4wLjA6MCB1cmkuIFRoaXMKLSAgd2lsbCBjcmVhdGUgYW4gdWRwIHNvdXJjZSBlbGVtZW50IHdpdGggYSByYW5kb20gcG9ydCBudW1iZXIuIFdlIGdldCB0aGUgcG9ydAotICBudW1iZXIgYnkgZ2V0dGluZyB0aGUgInBvcnQiIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGFmdGVyIHNldHRpbmcgdGhlIGVsZW1lbnQgdG8gCi0gIFBBVVNFRC4gVGhpcyBlbGVtZW50IGlzIHVzZWQgZm9yIHRoZSBSVFAgcGFja2V0cyBhbmQgaGFzIHRvIGJlIGFuIGV2ZW4gbnVtYmVyLiBJZgotICB0aGUgcmFuZG9tIHBvcnQgbnVtYmVyIGlzIG5vdCBhbiBldmVuIG51bWJlciB3ZSByZXRyeSB0byBhbGxvY2F0ZSBhIG5ldyB1ZHAgc291cmNlLgotCi0gIFdlIHRoZW4gY3JlYXRlIGFub3RoZXIgVURQIHNvdXJjZSBlbGVtZW50IHdpdGggdGhlIG5leHQgKHVuZXZlbikgcG9ydCBudW1iZXIgdG8gCi0gIHJlY2VpdmUgdGhlIFJUQ1AgcGFja2V0IG9uLiBBZnRlciB0aGlzIHN0ZXAgd2UgaGF2ZSB0d28gdWRwIHBvcnRzIHdlIGNhbiB1c2UgdG8KLSAgYWNjZXB0IFJUUCBwYWNrZXRzLgotCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgKy0tLS0tLS0tLS0tLSsgIHwKLSAgICB8IHwgdWRwc3JjMCAgICB8ICB8Ci0gICAgfCB8ICBwb3J0PTUwMDAgfCAgfAotICAgIHwgKy0tLS0tLS0tLS0tLSsgIHwKLSAgICB8ICstLS0tLS0tLS0tLS0rICB8Ci0gICAgfCB8IHVkcHNyYzEgICAgfCAgfAotICAgIHwgfCAgcG9ydD01MDAxIHwgIHwKLSAgICB8ICstLS0tLS0tLS0tLS0rICB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0tKwotCi0tIFNlbmQgYSBTRVRVUCBtZXNzYWdlIHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgUlRQIHBvcnRzLiBXZSBnZXQgdGhlIHNldHVwIFVSSSBmcm9tCi0gIHRoZSBhPSBhdHRyaWJ1dGUgaW4gdGhlIFNEUCBtZXNzYWdlLiBUaGlzIGNhbiBiZSBhbiBhYnNvbHV0ZSBVUkwgb3IgYSByZWxhdGl2ZQotICB1cmwuCi0KLSAgZXg6Ci0KLSAgICA+PiBTRVRVUCBydHNwOi8vdGhyZWFkOjU0NTQvc291dGgtcnRzcC5tcDMvc3RyZWFtaWQ9MCBSVFNQLzEuMAotICAgID4+IENTZXE6IDEKLSAgICA+PiBUcmFuc3BvcnQ6IFJUUC9BVlAvVURQO3VuaWNhc3Q7Y2xpZW50X3BvcnQ9NTAwMC01MDAxLFJUUC9BVlAvVURQO211bHRpY2FzdCxSVFAvQVZQL1RDUAotICAgID4+Ci0gICAgPDwgUlRTUC8xLjAgMjAwIE9LCi0gICAgPDwgVHJhbnNwb3J0OiBSVFAvQVZQL1VEUDt1bmljYXN0O2NsaWVudF9wb3J0PTUwMDAtNTAwMTtzZXJ2ZXJfcG9ydD02MDAwLTYwMDEKLSAgICA8PCBDU2VxOiAxCi0gICAgPDwgRGF0ZTogV2VkIE1heSAxMSAxMzoyMTo0MyAyMDA1IEdNVAotICAgIDw8IFNlc3Npb246IDVkNWNiOTQ0MTMyODhjY2QKLSAgICA8PAotCi0gIFRoZSBjbGllbnQgbmVlZHMgdG8gc2VuZCB0aGUgbG9jYWwgcG9ydHMgdG8gdGhlIHNlcnZlciBhbG9uZyB3aXRoIHRoZSBzdXBwb3J0ZWQgCi0gIHRyYW5zcG9ydCB0eXBlcy4gVGhlIHNlcnZlciBzZWxlY3RzIHRoZSBmaW5hbCB0cmFuc3BvcnQgd2hpY2ggaXQgcmV0dXJucyBpbiB0aGUKLSAgVHJhbnNwb3J0IGhlYWRlciBmaWVsZC4gVGhlIHNlcnZlciBhbHNvIGluY2x1ZGVzIGl0cyBwb3J0cyB3aGVyZSBSVFAgYW5kIFJUQ1AKLSAgbWVzc2FnZXMgY2FuIGJlIHNlbnQgdG8uCi0KLSAgSW4gdGhlIGFib3ZlIGV4YW1wbGUgVURQIHdhcyBjaG9vc2VuIGFzIGEgdHJhbnNwb3J0LiBBdCB0aGlzIHBvaW50IHRoZSBSVFNQU3JjIGVsZW1lbnQKLSAgd2lsbCBmdXJ0ZXIgY29uZmlndXJlIGl0cyBlbGVtZW50cyB0byBwcm9jZXNzIHRoaXMgc3RyZWFtLgotCi0gIFRoZSBSVFNQU3JjIHdpbGwgY3JlYXRlIGFuZCBjb25uZWN0IGFuIFJUUCBzZXNzaW9uIG1hbmFnZXIgZWxlbWVudCBhbmQgd2lsbAotICBjb25uZWN0IGl0IHRvIHRoZSBzcmMgcGFkcyBvZiB0aGUgdWRwIGVsZW1lbnQuIFRoZSBkYXRhIHBhZCBmcm9tIHRoZSBSVFAgc2Vzc2lvbiAKLSAgbWFuYWdlciBpcyBnaG9zdHBhZGRlZCB0byBSVFBTcmMuCi0gIFRoZSBSVENQIHBhZCBvZiB0aGUgcnRwZGVjIGlzIHJvdXRlZCB0byBhIG5ldyB1ZHBzaW5rIHRoYXQgc2VuZHMgZGF0YSB0byB0aGUgUlRDUAotICBwb3J0IG9mIHRoZSBzZXJ2ZXIgYXMgcmV0dXJuZWQgaW4gdGhlIFRyYW5zcG9ydDogaGVhZGVyIGZpZWxkLgotCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8ICstLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgIHwgfCB1ZHBzcmMwICAgIHwgICArLS0tLS0tLS0rICAgICAgICAgICAgICAgICB8Ci0gICAgfCB8ICBwb3J0PTUwMDAgLS0tLS0gcnRwZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgfCArLS0tLS0tLS0tLS0tKyAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgIHwKLSAgICB8ICstLS0tLS0tLS0tLS0rICAgfCAgICAgICAgfCAgKy0tLS0tLS0tLS0tLSsgfAotICAgIHwgfCB1ZHBzcmMxICAgIC0tLS0tIFJUQ1AgICAtLS0tIHVkcHNpbmsgICAgfCB8Ci0gICAgfCB8ICBwb3J0PTUwMDEgfCAgICstLS0tLS0tLSsgIHwgIHBvcnQ9NjAwMSB8IHwKLSAgICB8ICstLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLSsgfAotICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgVGhlIG91dHB1dCB0eXBlIG9mIHJ0cGRlYyBpcyBjb25maWd1cmVkIGFzIHRoZSBtZWRpYSB0eXBlIHNwZWNpZmllZCBpbiB0aGUgU0RQCi0gIG1lc3NhZ2UuIAotCi0tIEFsbCB0aGUgZWxlbWVudHMgYXJlIHNldCB0byBQQVVTRUQvUExBWUlORyBhbmQgdGhlIFBMQVkgUlRTUCBtZXNzYWdlIGlzCi0gIHNlbnQuCi0KLSAgICA+PiBQTEFZIHJ0c3A6Ly90aHJlYWQ6NTQ1NC9zb3V0aC1ydHNwLm1wMyBSVFNQLzEuMAotICAgID4+IENTZXE6IDIKLSAgICA+PiBTZXNzaW9uOiA1ZDVjYjk0NDEzMjg4Y2NkCi0gICAgPj4KLSAgICA8PCBSVFNQLzEuMCAyMDAgT0sKLSAgICA8PCBDU2VxOiAyCi0gICAgPDwgRGF0ZTogV2VkIE1heSAxMSAxMzoyMTo0MyAyMDA1IEdNVAotICAgIDw8IFNlc3Npb246IDVkNWNiOTQ0MTMyODhjY2QKLSAgICA8PAotCi0tIFRoZSB1ZHAgc291cmNlIGVsZW1lbnRzIHJlY2VpdmUgZGF0YSBmcm9tIHRoYXQgcG9pbnQgYW5kIHRoZSBSVFAvUlRDUCBtZXNzYWdlcwotICBhcmUgcHJvY2Vzc2VkIGJ5IHRoZSBlbGVtZW50cy4KLQotLSBJbiB0aGUgY2FzZSBvZiBpbnRlcmxlYXZlZCBtb2RlLCB0aGUgU0VUVVAgbWV0aG9kIHlpZWxkczoKLQotICAgID4+IFNFVFVQIHJ0c3A6Ly90aHJlYWQ6NTQ1NC9zb3V0aC1ydHNwLm1wMy9zdHJlYW1pZD0wIFJUU1AvMS4wCi0gICAgPj4gQ1NlcTogMQotICAgID4+IFRyYW5zcG9ydDogUlRQL0FWUC9VRFA7dW5pY2FzdDtjbGllbnRfcG9ydD01MDAwLTUwMDEsUlRQL0FWUC9VRFA7bXVsdGljYXN0LFJUUC9BVlAvVENQCi0gICAgPj4KLSAgICA8PCBSVFNQLzEuMCAyMDAgT0sKLSAgICA8PCBUcmFuc3BvcnQ6IFJUUC9BVlAvVENQO2ludGVybGVhdmVkPTAtMQotICAgIDw8IENTZXE6IDEKLSAgICA8PCBEYXRlOiBXZWQgTWF5IDExIDEzOjIxOjQzIDIwMDUgR01UCi0gICAgPDwgU2Vzc2lvbjogNWQ1Y2I5NDQxMzI4OGNjZAotICAgIDw8Ci0KLSAgVGhpcyBtZWFucyB0aGF0IFJUUC9SVENQIG1lc3NhZ2VzIHdpbGwgYmUgc2VudCBvbiBjaGFubmVsIDAvMSByZXNwZWN0aXZlbHkgYW5kIHRoYXQKLSAgdGhlIGRhdGEgd2lsbCBiZSByZWNlaXZlZCBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIGFzIHRoZSBSVFNQIGNvbm5lY3Rpb24uCi0KLSAgQXQgdGhpcyBwb2ludCwgd2UgcmVtb3ZlIHRoZSBVRFAgc291cmNlIGVsZW1lbnRzIGFzIHdlIGRvbid0IG5lZWQgdGhlbSBhbnltb3JlLiBXZQotICBzZXQgdXAgdGhlIHJ0cHNlc3Mgc2Vzc2lvbiBtYW5hZ2VyIGVsZW1lbnQgdGhvdWdoIGFzIGZvbGxvd3M6Ci0KLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgIHwgKy0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgfCB8IF9sb29wKCkgICAgfCAgICstLS0tLS0tLSsgICAgICAgICAgICAgICAgIHwKLSAgICB8IHwgICAgICAgICAgICAtLS0tLSBydHBzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICB8IHwgICAgICAgICAgICB8ICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgfAotICAgIHwgfCAgICAgICAgICAgIHwgICB8ICAgICAgICB8ICArLS0tLS0tLS0tLS0tKyB8Ci0gICAgfCB8ICAgICAgICAgICAgLS0tLS0gUlRDUCAgIC0tLS0gdWRwc2luayAgICB8IHwKLSAgICB8IHwgICAgICAgICAgICB8ICAgKy0tLS0tLS0tKyAgfCAgcG9ydD02MDAxIHwgfAotICAgIHwgKy0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tKyB8Ci0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICBXZSBzdGFydCBhbiBpbnRlcmFsIHRhc2sgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBSVFNQIGNvbm5lY3Rpb24gd2FpdGluZwotICBmb3IgZGF0YS4gVGhlIHJlY2VpdmVkIGRhdGEgaXMgdGhlbiBwdXNoZWQgdG8gdGhlIHJ0cGRlYyBlbGVtZW50LgotCi0gIFdoZW4gcmVhZGluZyBmcm9tIHRoZSBSVFNQIGNvbm5lY3Rpb24gd2UgcmVjZWl2ZSBkYXRhIHBhY2tldHMgaW4gdGhlCi0gIGZvbGxvd2luZyBsYXlvdXQgKHNlZSBhbHNvIFJGQzIzMjYpCi0KLSAgICAkPDEgYnl0ZSBjaGFubmVsPjwyIGJ5dGVzIGxlbmd0aCwgYmlnIGVuZGlhbj48bGVuZ3RoIGJ5dGVzIG9mIGRhdGE+Ci0KLQotUlRTUCBzZXJ2ZXIKLS0tLS0tLS0tLS0tCi0KLUFuIFJUU1Agc2VydmVyIGxpc3RlbiBvbiBhIHBvcnQgKGRlZmF1bHQgNTU0KSBmb3IgY2xpZW50IGNvbm5lY3Rpb25zLiBUaGUgY2xpZW50Ci10eXBpY2FsbHkga2VlcHMgdGhpcyBjaGFubmVsIG9wZW4gZHVyaW5nIHRoZSBSVFNQIHNlc3Npb24gdG8gaW5zdHJ1Y3QgdGhlIHNlcnZlcgotdG8gcGF1c2UvcGxheS9zdG9wIHRoZSBzdHJlYW0uCi0KLVRoZSBzZXJ2ZXIgZXhwb3NlcyBhIHN0cmVhbSBjb25zaXN0aW5nIG9mIG9uZSBvciBtb3JlIG1lZGlhIHN0cmVhbXMgdXNpbmcgYW4KLVVSTC4gVGhlIG1lZGlhIHN0cmVhbXMgYXJlIHR5cGljYWxseSBhdWRpbyBhbmQgdmlkZW8uCi0KLSAgZXg6Ci0gICAgIHJ0c3A6Ly90aHJlYWQ6NTQ1NC9hbGllbi1ydHNwLm1wZWcKLQotICAgICBleHBvc2VzIGFuIGF1ZGlvL3ZpZGVvIHN0cmVhbS4gVGhlIHZpZGVvIGlzIG1wZWcgcGFja2V0aXplZCBpbiBSVFAgYW5kCi0gICAgIHRoZSBhdWRpbyBpcyBtcDMgaW4gUlRQLgotCi1UaGUgc3RyZWFtaW5nIHNlcnZlciB0eXBpY2FsbHkgdXNlcyBhIGRpZmZlcmVudCBjaGFubmVsIHRvIHNlbmQgdGhlIG1lZGlhCi1kYXRhIHRvIGNsaWVudHMsIHR5cGljYWxseSB1c2luZyBSVFAgb3ZlciBVRFAuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3RyZWFtCi10aGUgZGF0YSB0byB0aGUgY2xpZW50IHVzaW5nIHRoZSBpbml0aWFsIFJUU1AgVENQIHNlc3Npb24gKHRoZSBpbnRlcmxlYXZlZAotbW9kZSkuIFRoaXMgbGFzdCBtb2RlIGlzIHVzZWZ1bCB3aGVuIHRoZSBjbGllbnQgaXMgYmVoaW5kIGEgZmlyZXdhbGwgYnV0Ci1kb2VzIG5vdCB0YWtlIGFkdmFudGFnZSBvZiB0aGUgUlRQL1VEUCBmZWF0dXJlcy4KLQotSW4gYm90aCBjYXNlcywgbWVkaWEgZGF0YSBpcyBzZW5kIHRvIHRoZSBjbGllbnRzIGluIGFuIHVubXVsdGlwbGV4ZWQgZm9ybWF0Ci1wYWNrZXRpemVkIGFzIFJUUCBwYWNrZXRzLgotCi1UaGUgc3RyZWFtaW5nIHNlcnZlciBoYXMgdG8gbmVnb3RpYXRlIGEgY29ubmVjdGlvbiBwcm90b2NvbCBmb3IgZWFjaCBvZiB0aGUKLW1lZGlhIHN0cmVhbXMgd2l0aCB0aGUgY2xpZW50LgotCi1NaW5pbWFsIHNlcnZlciByZXF1aXJlbWVudHM6Ci0KLS0gVGhlIHNlcnZlciBzaG91bGQgY29weSB0aGUgQ1NlcSBoZWFkZXIgZmllbGQgaW4gYSBjbGllbnQgcmVxdWVzdCB0byB0aGUKLSAgcmVzcG9uc2Ugc28gdGhhdCB0aGUgY2xpZW50IGNhbiBtYXRjaCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlcXVlc3QuCi0KLS0gVGhlIHNlcnZlciBzaG91bGQga2VlcCBhIHNlc3Npb24gZm9yIGVhY2ggY2xpZW50IGFmdGVyIHRoZSBjbGllbnQgaXNzdWVkCi0gIGEgU0VUVVAgY29tbWFuZC4gVGhlIGNsaWVudCBzaG91bGQgdXNlIHRoZSBzYW1lIHNlc3Npb24gaWQgZm9yIGFsbCBmdXR1cmUKLSAgcmVxdWVzdCB0byB0aGlzIHNlcnZlci4KLQotLSB0aGUgc2VydmVyIG11c3Qgc3VwcG9ydCBhbiBPUFRJT05TIHJlcXVlc3Qgc2VuZCBvdmVyIHRoZSBSVFNQIGNvbm5lY3Rpb24uCi0KLSAgICA+PiBPUFRJT05TICogUlRTUC8xLjAKLSAgICA+PiBDU2VxOiAxCi0gICAgPj4KLSAgICA8PCBSVFNQLzEuMCAyMDAgT0sKLSAgICA8PCBDU2VxOiAxCi0gICAgPDwgRGF0ZTogV2VkIE1heSAxMSAxMzoyMTo0MyAyMDA1IEdNVAotICAgIDw8IFNlc3Npb246IDVkNWNiOTQ0MTMyODhjY2QKLSAgICA8PCBQdWJsaWM6IERFU0NSSUJFLCBTRVRVUCwgVEVBUkRPV04sIFBMQVkKLSAgICA8PAotCi0gICBUaGUgT1BUSU9OUyByZXF1ZXN0IHNob3VsZCBsaXN0IGFsbCBzdXBwb3J0ZWQgbWV0aG9kcyBvbiB0aGUgc2VydmVyLgotIAotIC0gVGhlIHNlcnZlciBzaG91bGQgc3VwcG9ydCB0aGUgREVTQ1JJQkUgbWV0aG9kLgotCi0gICAgPj4gREVTQ1JJQkUgcnRzcDovL3RocmVhZDo1NDU0L3NvdXRoLXJ0c3AubXAzIFJUU1AvMS4wCi0gICAgPj4gQWNjZXB0OiBhcHBsaWNhdGlvbi9zZHAKLSAgICA+PiBDU2VxOiAyCi0gICAgPj4KLSAgICA8PCBSVFNQLzEuMCAyMDAgT0sKLSAgICA8PCBDb250ZW50LUxlbmd0aDogODQKLSAgICA8PCBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3NkcAotICAgIDw8IENTZXE6IDIKLSAgICA8PCBEYXRlOiBXZWQgTWF5IDExIDEzOjA5OjM3IDIwMDUgR01UCi0gICAgPDwKLSAgICA8PCB2PTAKLSAgICA8PCBvPS0gMCAwIElOIElQNCAxOTIuMTY4LjEuMQotICAgIDw8IHM9Tm8gVGl0bGUKLSAgICA8PCBtPWF1ZGlvIDAgUlRQL0FWUCAxNAotICAgIDw8IGE9Y29udHJvbDpzdHJlYW1pZD0wCi0KLSAgICBUaGUgY2xpZW50IGlzc3VlcyBhIERFU0NSSUJFIGNvbW1hbmQgZm9yIGEgc3BlY2lmaWMgVVJMIHRoYXQgY29ycmVzcG9uZHMKLSAgICB0byBhbiBhdmFpbGFibGUgc3RyZWFtLiBUaGUgY2xpZW50IHdpbGwgYWxzbyBzZW5kIGFuIEFjY2VwdCBoZWFkZXIgdG8KLSAgICBsaXN0IGl0cyBzdXBwb3J0ZWQgZm9ybWF0cy4gCi0KLSAgICBUaGUgc2VydmVyIGFuc3dlcnMgdGhpcyByZXF1ZXN0IHdpdGggYSByZXBseSBpbiBvbmUgb2YgdGhlIGNsaWVudCBzdXBwb3J0ZWQKLSAgICBmb3JtYXRzIChhcHBsaWNhdGlvbi9zZHAgaXMgdGhlIG1vc3QgY29tbW9uKS4gVGhlIHNlcnZlciB0eXBpY2FsbHkgc2VuZHMgYQotICAgIGZpeGVkIHJlcGx5IHRvIGFsbCBjbGllbnRzIGZvciBlYWNoIGNvbmZpZ3VyZWQgc3RyZWFtLgotCi0gLSBUaGUgc2VydmVyIG11c3Qgc3VwcG9ydCB0aGUgU0VUVVAgY29tbWFuZCB0byBjb25maWd1cmUgdGhlIG1lZGlhIHN0cmVhbXMgCi0gICB0aGF0IHdlcmUgbGlzdGVkIGluIHRoZSBERVNDUklCRSBjb21tYW5kLgotCi0gICAgPj4gU0VUVVAgcnRzcDovL3RocmVhZDo1NDU0L3NvdXRoLXJ0c3AubXAzL3N0cmVhbWlkPTAgUlRTUC8xLjAKLSAgICA+PiBDU2VxOiAzCi0gICAgPj4gVHJhbnNwb3J0OiBSVFAvQVZQL1VEUDt1bmljYXN0O2NsaWVudF9wb3J0PTUwMDAtNTAwMSxSVFAvQVZQL1VEUDttdWx0aWNhc3QsUlRQL0FWUC9UQ1AKLSAgICA+PgotICAgIDw8IFJUU1AvMS4wIDIwMCBPSwotICAgIDw8IFRyYW5zcG9ydDogUlRQL0FWUC9VRFA7dW5pY2FzdDtjbGllbnRfcG9ydD01MDAwLTUwMDE7c2VydmVyX3BvcnQ9NjAwMC02MDAxCi0gICAgPDwgQ1NlcTogMwotICAgIDw8IERhdGU6IFdlZCBNYXkgMTEgMTM6MjE6NDMgMjAwNSBHTVQKLSAgICA8PCBTZXNzaW9uOiA1ZDVjYjk0NDEzMjg4Y2NkCi0KLSAgICBUaGUgY2xpZW50IHdpbGwgc2VuZCBhIFNFVFVQIGNvbW1hbmQgZm9yIGVhY2ggb2YgdGhlIHN0cmVhbXMgbGlzdGVkIGluIHRoZSAKLSAgICBERVNDUklCRSByZXBseS4gRm9yIHNkcCB3aWxsIHVzZSBhIFVSTCBhcyBsaXN0ZWQgaW4gdGhlIGE9Y29udHJvbDogcHJvcGVydHkuCi0KLSAgICBUaGUgY2xpZW50IHdpbGwgbGlzdCB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydHMgaW4gdGhlIFRyYW5zcG9ydDogaGVhZGVyIGZpZWxkLgotICAgIEVhY2ggdHJhbnNwb3J0IGlzIHNlcGFyYXRlZCB3aXRoIGEgY29tbWEgKCwpIGFuZCBsaXN0ZWQgaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KLSAgICBUaGUgc2VydmVyIGhhcyB0byBzZWxlY3QgdGhlIGZpcnN0IHN1cHBvcnRlZCB0cmFuc3BvcnQuCi0gCi0gICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUgMyB0cmFuc3BvcnQgYXJlIGxpc3RlZDoKLQotICAgICAgIFJUUC9BVlAvVURQO3VuaWNhc3Q7Y2xpZW50X3BvcnQ9NTAwMC01MDAxCi0KLSAgICAgICAgIFRoZSBjbGllbnQgd2lsbCBhY2NlcHQgUlRQIG92ZXIgVURQIG9uIHRoZSBwb3J0IHBhaXIgNTAwMC01MDAxLiBQb3J0Ci0JIDUwMDAgd2lsbCBhY2NlcHQgdGhlIFJUUCBwYWNrZXRzLCA1MDAxIHRoZSBSVFNQIHBhY2tldHMgc2VuZCBieSB0aGUKLQkgc2VydmVyLgotICAgICAgIAotICAgICAgIFJUUC9BVlAvVURQO211bHRpY2FzdAotCi0gICAgICAgICBUaGUgY2xpZW50IGNhbiBqb2luIGEgbXVsdGljYXN0IGdyb3VwIGZvciB0aGUgc3BlY2lmaWMgbWVkaWEgc3RyZWFtLgotCSBUaGUgcG9ydCBudW1iZXJzIG9mIHRoZSBtdWx0aWNhc3QgZ3JvdXAgaXQgd2lsbCBjb25uZWN0IHRvIGhhdmUgdG8KLQkgYmUgc3BlY2lmaWVkIGJ5IHRoZSBzZXJ2ZXIgaW4gdGhlIHJlcGx5LgotICAgICAgIAotICAgICAgIFJUUC9BVlAvVENQCi0KLSAgICAgICAgIHRoZSBjbGllbnQgY2FuIGFjY2VwdCBSVFAgcGFja2V0cyBpbnRlcmxlYXZlZCBvbiB0aGUgUlRTUCBjb25uZWN0aW9uLgotCi0gICAgVGhlIHNlcnZlciBzZWxlY3RzIGEgc3VwcG9ydGVkIHRyYW5zcG9ydCBhbiBhbGxvY2F0ZXMgYW4gUlRQIHBvcnQgcGFpciB0bwotICAgIHJlY2VpdmUgUlRQIGFuZCBSVFNQIGRhdGEgZnJvbSB0aGUgY2xpZW50LiBUaGlzIGxhc3Qgc3RlcCBpcyBvcHRpb25hbCB3aGVuCi0gICAgdGhlIHNlcnZlciBkb2VzIG5vdCBhY2NlcHQgUlRQIGRhdGEuCi0KLSAgICBUaGUgc2VydmVyIHNob3VsZCBhbGxvY2F0ZSBhIHNlc3Npb24gZm9yIHRoZSBjbGllbnQgYW5kIHNob3VsZCBzZW5kIHRoZQotICAgIHNlc3Npb25JZCB0byB0aGUgY2xpZW50LiBUaGUgY2xpZW50IHNob3VsZCB1c2UgdGhpcyBzZXNzaW9uIGlkIGZvciBhbGwKLSAgICBmdXR1cmUgcmVxdWVzdHMuCi0KLSAgICBUaGUgc2VydmVyIG1heSByZWZ1c2UgYSBjbGllbnQgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIHNhbWUgdHJhbnNwb3J0IG1ldGhvZAotICAgIGZvciBhbGwgbWVkaWEgc3RyZWFtcy4KLQotICAgIFRoZSBzZXJ2ZXIgc3RvcmVzIGFsbCBjbGllbnQgcG9ydCBwYWlycyBpbiB0aGUgc2VydmVyIGNsaWVudCBzZXNzaW9uIGFsb25nCi0gICAgd2l0aCB0aGUgdHJhbnNwb3J0IG1ldGhvZC4KLQotICAgIGV4OgotCi0gICAgICBGb3IgYW4gb24tZGVtYW5kIHN0cmVhbSB0aGUgc2VydmVyIGNvdWxkIGNvbnN0cnVjdCBhIChtaW5pbWFsKSBSVFAgR1N0cmVhbWVyIAotICAgICAgcGlwZWxpbmUgZm9yIHRoZSBjbGllbnQgYXMgZm9sbG93cyAoZm9yIGFuIG1wMyBzdHJlYW0pOgotICAgIAotICAgICAgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgZmlsZXNyYyB8ICAgIHwgcnRwbXAzZW5jIHwgICAgfCBydHBzZXNzaW9uIHwgICAgfCB1ZHBzaW5rICAgICB8Ci0gICAgICB8ICAgICAgICAgfCAgICB8ICAgICAgICAgICB8ICAgIHwgICAgICAgICAgICB8ICAgIHwgICBob3N0PVhYWCAgfAotICAgICAgfCAgICAgICAgIHwgICAgfCAgICAgICAgICAgfCAgICB8ICAgICAgICAgICAgfCAgICB8ICAgcG9ydD01MDAwIHwKLSAgICAgIHwgICAgICAgIHNyYy0tc2luayAgICAgICAgc3JjLS1ydHBzaW5rICAgcnRwc3JjLS1zaW5rICAgICAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0rICAgIHwgICAgICAgICAgICB8ICAgICstLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICArLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCB1ZHBzaW5rICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgICBob3N0PVhYWCAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgcG9ydD01MDAxIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICBydHNwc3JjLS1zaW5rICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0tKwotCi0gICAgICBUaGUgc2VydmVyIHdvdWxkIHNldCB0aGUgYWJvdmUgcGlwZWxpbmUgdG8gUEFVU0UgdG8gbWFrZSBzdXJlIG5vIGRhdGEKLSAgICAgIGlzIHNlbnQgdG8gdGhlIGNsaWVudCB5ZXQuCi0KLSAgICAgIG9wdGlvbmFsbHkgdWRwc3JjIGVsZW1lbnRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHJlY2VpdmUgY2xpZW50IFJUUCBhbmQKLSAgICAgIFJUU1AgbWVzc2FnZXMuCi0KLSAgICBleDoKLQotICAgICAgRm9yIGEgbGl2ZSBzdHJlYW0gdGhlIHNlcnZlciBjb3VsZCBjb25zdHJ1Y3QgYSAobWluaW1hbCkgUlRQIEdTdHJlYW1lciAKLSAgICAgIHBpcGVsaW5lIGZvciB0aGUgY2xpZW50cyBhcyBmb2xsb3dzIChmb3IgYW4gbXAzIHN0cmVhbSk6Ci0gICAgCi0gICAgICArLS0tLS0tLS0tKyAgICArLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBzb3VyY2UgIHwgICAgfCBtcDNlbmMgfCAgICB8IHJ0cG1wM2VuYyB8ICAgIHwgcnRwc2Vzc2lvbiB8ICAgIHwgbXVsdGl1ZHBzaW5rIHwKLSAgICAgIHwgICAgICAgICB8ICAgIHwgICAgICAgIHwgICAgfCAgICAgICAgICAgfCAgICB8ICAgICAgICAgICAgfCAgICB8ICAgaG9zdD0uLi4gICB8Ci0gICAgICB8ICAgICAgICAgfCAgICB8ICAgICAgICB8ICAgIHwgICAgICAgICAgIHwgICAgfCAgICAgICAgICAgIHwgICAgfCAgIHBvcnQ9Li4uICAgfAotICAgICAgfCAgICAgICAgc3JjLS1zaW5rICAgICBzcmMtLXNpbmsgICAgICAgIHNyYy0tcnRwc2luayAgIHJ0cHNyYy0tc2luayAgICAgICAgICAgIHwKLSAgICAgICstLS0tLS0tLS0rICAgICstLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tKyAgICB8ICAgICAgICAgICAgfCAgICArLS0tLS0tLS0tLS0tLS0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgKy0tLS0tLS0tLS0tLS0tKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgIHwgbXVsdGl1ZHBzaW5rIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICB8ICAgaG9zdD0uLi4gICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgfCAgIHBvcnQ9Li4uICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgcnRzcHNyYy0tc2luayAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLS0rCi0KLSAgICAgIE1lZGlhIGRhdGEgaXMgc3RyZWFtZWQgdG8gY2xpZW50cyBieSBhZGRpbmcgdGhlIGNsaWVudCBob3N0IGFuZCBwb3J0IG51bWJlcnMKLSAgICAgIHRvIHRoZSBtdWx0aXVkcHNpbmtzLgotCi0gICAgICBvcHRpb25hbGx5IHVkcHNyYyBlbGVtZW50cyBjYW4gYmUgY29uZmlndXJlZCB0byByZWNlaXZlIGNsaWVudCBSVFAgYW5kCi0gICAgICBSVFNQIG1lc3NhZ2VzLgotICAgICAKLSAtIFRoZSBzZXJ2ZXIgbXVzdCBzdXBwb3J0IHRoZSBQTEFZIGNvbW1hbmQgdG8gc3RhcnQgcGxheWJhY2sgb2YgdGhlIGNvbmZpZ3VyZWQKLSAgIG1lZGlhIHN0cmVhbXMuCi0KLSAgICA+PiBQTEFZIHJ0c3A6Ly90aHJlYWQ6NTQ1NC9zb3V0aC1ydHNwLm1wMyBSVFNQLzEuMAotICAgID4+IENTZXE6IDIKLSAgICA+PiBTZXNzaW9uOiA1ZDVjYjk0NDEzMjg4Y2NkCi0gICAgPj4KLSAgICA8PCBSVFNQLzEuMCAyMDAgT0sKLSAgICA8PCBDU2VxOiAyCi0gICAgPDwgRGF0ZTogV2VkIE1heSAxMSAxMzoyMTo0MyAyMDA1IEdNVAotICAgIDw8IFNlc3Npb246IDVkNWNiOTQ0MTMyODhjY2QKLSAgICA8PAotCi0gICAgVXNpbmcgdGhlIFNlc3Npb246IGhlYWRlciBmaWVsZCwgdGhlIHNlcnZlciBmaW5kcyB0aGUgcGlwZWxpbmUgb2YgdGhlIHNlc3Npb24KLSAgICB0byBQTEFZIGFuZCBzZXRzIHRoZSBwaXBlbGluZSB0byBQTEFZSU5HIGF0IHdoaWNoIHBvaW50IHRoZSBjbGllbnQgcmVjZWl2ZXMKLSAgICB0aGUgbWVkaWEgc3RyZWFtIGRhdGEuCi0KLSAgICBJbiBjYXNlIG9mIGEgbGl2ZSBzdHJlYW0sIHRoZSBzZXJ2ZXIgYWRkcyB0aGUgcG9ydCBudW1iZXJzIHRvIGEgbXVsdGl1ZHBzaW5rCi0gICAgZWxlbWVudC4KLQotIC0gVGhlIHNlcnZlciBtdXN0IHN1cHBvcnQgdGhlIFRFQVJET1dOIGNvbW1hbmQgdG8gc3RvcCBwbGF5YmFjayBhbmQgZnJlZSB0aGUKLSAgIHNlc3Npb24gb2YgYSBjbGllbnQuCi0KLSAgICA+PiBURUFSRE9XTiBydHNwOi8vdGhyZWFkOjU0NTQvc291dGgtcnRzcC5tcDMgUlRTUC8xLjAKLSAgICA+PiBDU2VxOiA0Ci0gICAgPj4gU2Vzc2lvbjogNWQ1Y2I5NDQxMzI4OGNjZAotICAgID4+Ci0gICAgPDwgUlRTUC8xLjAgMjAwIE9LCi0gICAgPDwgQ1NlcTogNAotICAgIDw8IERhdGU6IFdlZCBNYXkgMTEgMTM6MjE6NDMgMjAwNSBHTVQKLSAgICA8PAotCi0gICAgVGhlIHNlcnZlciBkZXN0cm95cyB0aGUgY2xpZW50IHBpcGVsaW5lIGluIGNhc2Ugb2YgYW4gb24tZGVtYW5kIHN0cmVhbSBvcgotICAgIHJlbW92ZXMgdGhlIGNsaWVudCBwb3J0cyBmcm9tIHRoZSBtdWx0aXVkcHNpbmtzLiBUaGlzIGVmZmVjdGl2ZWx5IHN0b3BzCi0gICAgc3RyZWFtaW5nIHRvIHRoZSBjbGllbnQuCi0KLQpkaWZmIC0tZ2l0IGEvZ3N0L3J0c3AvZ3N0cnRwZGVjLmMgYi9nc3QvcnRzcC9nc3RydHBkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NmN2M3OS4uMDAwMDAwMAotLS0gYS9nc3QvcnRzcC9nc3RydHBkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDg5OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDUsMjAwNj4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0vKiBFbGVtZW50LUNoZWNrbGlzdC1WZXJzaW9uOiA1ICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXJ0cGRlYwotICoKLSAqIEEgc2ltcGxlIFJUUCBzZXNzaW9uIG1hbmFnZXIgdXNlZCBpbnRlcm5hbGx5IGJ5IHJ0c3BzcmMuCi0gKi8KLQotLyogI2RlZmluZSBIQVZFX1JUQ1AgKi8KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLSNpZmRlZiBIQVZFX1JUQ1AKLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0Y3BidWZmZXIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0cnRwZGVjLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRwZGVjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIChydHBkZWNfZGVidWcpCi0KLS8qIEdzdFJUUERlYyBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIFNJR05BTF9SRVFVRVNUX1BUX01BUCwKLSAgU0lHTkFMX0NMRUFSX1BUX01BUCwKLQotICBTSUdOQUxfT05fTkVXX1NTUkMsCi0gIFNJR05BTF9PTl9TU1JDX0NPTExJU0lPTiwKLSAgU0lHTkFMX09OX1NTUkNfVkFMSURBVEVELAotICBTSUdOQUxfT05fQllFX1NTUkMsCi0gIFNJR05BTF9PTl9CWUVfVElNRU9VVCwKLSAgU0lHTkFMX09OX1RJTUVPVVQsCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfTEFURU5DWV9NUyAgICAgIDIwMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MQVRFTkNZCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3J0cF9kZWNfcmVjdl9ydHBfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInJlY3ZfcnRwX3NpbmtfJXUiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2RlY19yZWN2X3J0Y3Bfc2lua190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInJlY3ZfcnRjcF9zaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9SRVFVRVNULAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRjcCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9ydHBfZGVjX3JlY3ZfcnRwX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInJlY3ZfcnRwX3NyY18ldV8ldV8ldSIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfcnRwX2RlY19ydGNwX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInJ0Y3Bfc3JjXyV1IiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX1JFUVVFU1QsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydGNwIikKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3RfcnRwX2RlY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2RlY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfcnRwX2RlY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDbG9jayAqZ3N0X3J0cF9kZWNfcHJvdmlkZV9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHBfZGVjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgR3N0UGFkICpnc3RfcnRwX2RlY19yZXF1ZXN0X25ld19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsIGNvbnN0IGdjaGFyICogbmFtZSwgY29uc3QgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIHZvaWQgZ3N0X3J0cF9kZWNfcmVsZWFzZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBwYWQpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2RlY19jaGFpbl9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfcnRwX2RlY19jaGFpbl9ydGNwIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotCi0KLS8qIE1hbmFnZXMgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIHBhY2tldHMuCi0gKgotICogVGhlcmUgaXMgb25lIHN1Y2ggc3RydWN0dXJlIGZvciBlYWNoIFJUUCBzZXNzaW9uIChhdWRpby92aWRlby8uLi4pLgotICogV2UgZ2V0IHRoZSBSVFAvUlRDUCBwYWNrZXRzIGFuZCBzdHVmZiB0aGVtIGludG8gdGhlIHNlc3Npb24gbWFuYWdlci4gCi0gKi8KLXN0cnVjdCBfR3N0UlRQRGVjU2Vzc2lvbgotewotICAvKiBzZXNzaW9uIGlkICovCi0gIGdpbnQgaWQ7Ci0gIC8qIHRoZSBwYXJlbnQgYmluICovCi0gIEdzdFJUUERlYyAqZGVjOwotCi0gIGdib29sZWFuIGFjdGl2ZTsKLSAgLyogd2Ugb25seSBzdXBwb3J0IG9uZSBzc3JjIGFuZCBvbmUgcHQgKi8KLSAgZ3VpbnQzMiBzc3JjOwotICBndWludDggcHQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgLyogdGhlIHBhZHMgb2YgdGhlIHNlc3Npb24gKi8KLSAgR3N0UGFkICpyZWN2X3J0cF9zaW5rOwotICBHc3RQYWQgKnJlY3ZfcnRwX3NyYzsKLSAgR3N0UGFkICpyZWN2X3J0Y3Bfc2luazsKLSAgR3N0UGFkICpydGNwX3NyYzsKLX07Ci0KLS8qIGZpbmQgYSBzZXNzaW9uIHdpdGggdGhlIGdpdmVuIGlkICovCi1zdGF0aWMgR3N0UlRQRGVjU2Vzc2lvbiAqCi1maW5kX3Nlc3Npb25fYnlfaWQgKEdzdFJUUERlYyAqIHJ0cGRlYywgZ2ludCBpZCkKLXsKLSAgR1NMaXN0ICp3YWxrOwotCi0gIGZvciAod2FsayA9IHJ0cGRlYy0+c2Vzc2lvbnM7IHdhbGs7IHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UlRQRGVjU2Vzc2lvbiAqc2VzcyA9IChHc3RSVFBEZWNTZXNzaW9uICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoc2Vzcy0+aWQgPT0gaWQpCi0gICAgICByZXR1cm4gc2VzczsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotLyogY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIHRoZSBnaXZlbiBpZCAqLwotc3RhdGljIEdzdFJUUERlY1Nlc3Npb24gKgotY3JlYXRlX3Nlc3Npb24gKEdzdFJUUERlYyAqIHJ0cGRlYywgZ2ludCBpZCkKLXsKLSAgR3N0UlRQRGVjU2Vzc2lvbiAqc2VzczsKLQotICBzZXNzID0gZ19uZXcwIChHc3RSVFBEZWNTZXNzaW9uLCAxKTsKLSAgc2Vzcy0+aWQgPSBpZDsKLSAgc2Vzcy0+ZGVjID0gcnRwZGVjOwotICBydHBkZWMtPnNlc3Npb25zID0gZ19zbGlzdF9wcmVwZW5kIChydHBkZWMtPnNlc3Npb25zLCBzZXNzKTsKLQotICByZXR1cm4gc2VzczsKLX0KLQotc3RhdGljIHZvaWQKLWZyZWVfc2Vzc2lvbiAoR3N0UlRQRGVjU2Vzc2lvbiAqIHNlc3Npb24pCi17Ci0gIGdfZnJlZSAoc2Vzc2lvbik7Ci19Ci0KLXN0YXRpYyBndWludCBnc3RfcnRwX2RlY19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi0jZGVmaW5lIGdzdF9ydHBfZGVjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFJUUERlYywgZ3N0X3J0cF9kZWMsIEdTVF9UWVBFX0VMRU1FTlQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kZWNfY2xhc3NfaW5pdCAoR3N0UlRQRGVjQ2xhc3MgKiBnX2NsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0UlRQRGVjQ2xhc3MgKmtsYXNzOwotCi0gIGtsYXNzID0gKEdzdFJUUERlY0NsYXNzICopIGdfY2xhc3M7Ci0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAocnRwZGVjX2RlYnVnLCAicnRwZGVjIiwgMCwgIlJUUCBkZWNvZGVyIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRwX2RlY19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0cF9kZWNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRwX2RlY19nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MQVRFTkNZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJsYXRlbmN5IiwgIkJ1ZmZlciBsYXRlbmN5IGluIG1zIiwKLSAgICAgICAgICAiQW1vdW50IG9mIG1zIHRvIGJ1ZmZlciIsIDAsIEdfTUFYVUlOVCwgREVGQVVMVF9MQVRFTkNZX01TLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFBEZWM6OnJlcXVlc3QtcHQtbWFwOgotICAgKiBAcnRwZGVjOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBwdDogdGhlIHB0Ci0gICAqCi0gICAqIFJlcXVlc3QgdGhlIHBheWxvYWQgdHlwZSBhcyAjR3N0Q2FwcyBmb3IgQHB0IGluIEBzZXNzaW9uLgotICAgKi8KLSAgZ3N0X3J0cF9kZWNfc2lnbmFsc1tTSUdOQUxfUkVRVUVTVF9QVF9NQVBdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJlcXVlc3QtcHQtbWFwIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJUUERlY0NsYXNzLCByZXF1ZXN0X3B0X21hcCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR1NUX1RZUEVfQ0FQUywgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0KLSAgZ3N0X3J0cF9kZWNfc2lnbmFsc1tTSUdOQUxfQ0xFQVJfUFRfTUFQXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJjbGVhci1wdC1tYXAiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UlRQRGVjQ2xhc3MsIGNsZWFyX3B0X21hcCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDAsIEdfVFlQRV9OT05FKTsKLQotICAvKioKLSAgICogR3N0UlRQRGVjOjpvbi1uZXctc3NyYzoKLSAgICogQHJ0cGJpbjogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCi0gICAqIEBzZXNzaW9uOiB0aGUgc2Vzc2lvbgotICAgKiBAc3NyYzogdGhlIFNTUkMgCi0gICAqCi0gICAqIE5vdGlmeSBvZiBhIG5ldyBTU1JDIHRoYXQgZW50ZXJlZCBAc2Vzc2lvbi4KLSAgICovCi0gIGdzdF9ydHBfZGVjX3NpZ25hbHNbU0lHTkFMX09OX05FV19TU1JDXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJvbi1uZXctc3NyYyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RSVFBEZWNDbGFzcywgb25fbmV3X3NzcmMpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfVUlOVCwKLSAgICAgIEdfVFlQRV9VSU5UKTsKLSAgLyoqCi0gICAqIEdzdFJUUERlYzo6b24tc3NyY19jb2xsaXNpb246Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHNzcmM6IHRoZSBTU1JDIAotICAgKgotICAgKiBOb3RpZnkgd2hlbiB3ZSBoYXZlIGFuIFNTUkMgY29sbGlzaW9uCi0gICAqLwotICBnc3RfcnRwX2RlY19zaWduYWxzW1NJR05BTF9PTl9TU1JDX0NPTExJU0lPTl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tc3NyYy1jb2xsaXNpb24iLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UlRQRGVjQ2xhc3MsIG9uX3NzcmNfY29sbGlzaW9uKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSVFBEZWM6Om9uLXNzcmNfdmFsaWRhdGVkOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQyAKLSAgICoKLSAgICogTm90aWZ5IG9mIGEgbmV3IFNTUkMgdGhhdCBiZWNhbWUgdmFsaWRhdGVkLgotICAgKi8KLSAgZ3N0X3J0cF9kZWNfc2lnbmFsc1tTSUdOQUxfT05fU1NSQ19WQUxJREFURURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNzcmMtdmFsaWRhdGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdFJUUERlY0NsYXNzLCBvbl9zc3JjX3ZhbGlkYXRlZCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9VSU5ULAotICAgICAgR19UWVBFX1VJTlQpOwotCi0gIC8qKgotICAgKiBHc3RSVFBEZWM6Om9uLWJ5ZS1zc3JjOgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQyAKLSAgICoKLSAgICogTm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBiZWNhbWUgaW5hY3RpdmUgYmVjYXVzZSBvZiBhIEJZRSBwYWNrZXQuCi0gICAqLwotICBnc3RfcnRwX2RlY19zaWduYWxzW1NJR05BTF9PTl9CWUVfU1NSQ10gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tYnllLXNzcmMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UlRQRGVjQ2xhc3MsIG9uX2J5ZV9zc3JjKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSVFBEZWM6Om9uLWJ5ZS10aW1lb3V0OgotICAgKiBAcnRwYmluOiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKLSAgICogQHNlc3Npb246IHRoZSBzZXNzaW9uCi0gICAqIEBzc3JjOiB0aGUgU1NSQyAKLSAgICoKLSAgICogTm90aWZ5IG9mIGFuIFNTUkMgdGhhdCBoYXMgdGltZWQgb3V0IGJlY2F1c2Ugb2YgQllFCi0gICAqLwotICBnc3RfcnRwX2RlY19zaWduYWxzW1NJR05BTF9PTl9CWUVfVElNRU9VVF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgib24tYnllLXRpbWVvdXQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UlRQRGVjQ2xhc3MsIG9uX2J5ZV90aW1lb3V0KSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX1VJTlQsCi0gICAgICBHX1RZUEVfVUlOVCk7Ci0gIC8qKgotICAgKiBHc3RSVFBEZWM6Om9uLXRpbWVvdXQ6Ci0gICAqIEBydHBiaW46IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAotICAgKiBAc2Vzc2lvbjogdGhlIHNlc3Npb24KLSAgICogQHNzcmM6IHRoZSBTU1JDIAotICAgKgotICAgKiBOb3RpZnkgb2YgYW4gU1NSQyB0aGF0IGhhcyB0aW1lZCBvdXQKLSAgICovCi0gIGdzdF9ydHBfZGVjX3NpZ25hbHNbU0lHTkFMX09OX1RJTUVPVVRdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXRpbWVvdXQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsIEdfU1RSVUNUX09GRlNFVCAoR3N0UlRQRGVjQ2xhc3MsIG9uX3RpbWVvdXQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLCBHX1RZUEVfVUlOVCwKLSAgICAgIEdfVFlQRV9VSU5UKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5wcm92aWRlX2Nsb2NrID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfcnRwX2RlY19wcm92aWRlX2Nsb2NrKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9ydHBfZGVjX2NoYW5nZV9zdGF0ZSk7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnJlcXVlc3RfbmV3X3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kZWNfcmVxdWVzdF9uZXdfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+cmVsZWFzZV9wYWQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3J0cF9kZWNfcmVsZWFzZV9wYWQpOwotCi0gIC8qIHNpbmsgcGFkcyAqLwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2RlY19yZWN2X3J0cF9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3J0cF9kZWNfcmVjdl9ydGNwX3NpbmtfdGVtcGxhdGUpOwotICAvKiBzcmMgcGFkcyAqLwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2RlY19yZWN2X3J0cF9zcmNfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfcnRwX2RlY19ydGNwX3NyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlJUUCBEZWNvZGVyIiwKLSAgICAgICJDb2RlYy9QYXJzZXIvTmV0d29yayIsCi0gICAgICAiQWNjZXB0cyByYXcgUlRQIGFuZCBSVENQIHBhY2tldHMgYW5kIHNlbmRzIHRoZW0gZm9yd2FyZCIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZGVjX2luaXQgKEdzdFJUUERlYyAqIHJ0cGRlYykKLXsKLSAgcnRwZGVjLT5wcm92aWRlZF9jbG9jayA9IGdzdF9zeXN0ZW1fY2xvY2tfb2J0YWluICgpOwotICBydHBkZWMtPmxhdGVuY3kgPSBERUZBVUxUX0xBVEVOQ1lfTVM7Ci0KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAocnRwZGVjLCBHU1RfRUxFTUVOVF9GTEFHX1BST1ZJREVfQ0xPQ0spOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0cF9kZWNfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFJUUERlYyAqcnRwZGVjOwotCi0gIHJ0cGRlYyA9IEdTVF9SVFBfREVDIChvYmplY3QpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cGRlYy0+cHJvdmlkZWRfY2xvY2spOwotICBnX3NsaXN0X2ZvcmVhY2ggKHJ0cGRlYy0+c2Vzc2lvbnMsIChHRnVuYykgZnJlZV9zZXNzaW9uLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlIChydHBkZWMtPnNlc3Npb25zKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0cF9kZWNfcXVlcnlfc3JjIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6Ci0gICAgewotICAgICAgLyogd2UgcHJldGVuZCB0byBiZSBsaXZlIHdpdGggYSAzIHNlY29uZCBsYXRlbmN5ICovCi0gICAgICAvKiBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgaW5maW5pdGUgbWF4aW11bSBsYXRlbmN5PyAqLwotICAgICAgZ3N0X3F1ZXJ5X3NldF9sYXRlbmN5IChxdWVyeSwgVFJVRSwgMyAqIEdTVF9TRUNPTkQsIC0xKTsKLSAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnlfZGVmYXVsdCAocGFkLCBwYXJlbnQsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRwX2RlY19jaGFpbl9ydHAgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RSVFBEZWMgKnJ0cGRlYzsKLSAgR3N0UlRQRGVjU2Vzc2lvbiAqc2Vzc2lvbjsKLSAgZ3VpbnQzMiBzc3JjOwotICBndWludDggcHQ7Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSB7IE5VTEwsIH07Ci0KLSAgcnRwZGVjID0gR1NUX1JUUF9ERUMgKHBhcmVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwZGVjLCAiZ290IHJ0cCBwYWNrZXQiKTsKLQotICBpZiAoIWdzdF9ydHBfYnVmZmVyX21hcCAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHApKQotICAgIGdvdG8gYmFkX3BhY2tldDsKLQotICBzc3JjID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZydHApOwotICBwdCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3R5cGUgKCZydHApOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwZGVjLCAiU1NSQyAlMDh4LCBQVCAlZCIsIHNzcmMsIHB0KTsKLQotICAvKiBmaW5kIHNlc3Npb24gKi8KLSAgc2Vzc2lvbiA9IGdzdF9wYWRfZ2V0X2VsZW1lbnRfcHJpdmF0ZSAocGFkKTsKLQotICAvKiBzZWUgaWYgd2UgaGF2ZSB0aGUgcGFkICovCi0gIGlmICghc2Vzc2lvbi0+YWN0aXZlKSB7Ci0gICAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotICAgIEdzdEVsZW1lbnRDbGFzcyAqa2xhc3M7Ci0gICAgZ2NoYXIgKm5hbWU7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLSAgICBHVmFsdWUgcmV0ID0geyAwIH07Ci0gICAgR1ZhbHVlIGFyZ3NbM10gPSB7IHswfQotICAgICwgezB9Ci0gICAgLCB7MH0KLSAgICB9OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZGVjLCAiY3JlYXRpbmcgc3RyZWFtIik7Ci0KLSAgICBzZXNzaW9uLT5zc3JjID0gc3NyYzsKLSAgICBzZXNzaW9uLT5wdCA9IHB0OwotCi0gICAgLyogZ2V0IHB0IG1hcCAqLwotICAgIGdfdmFsdWVfaW5pdCAoJmFyZ3NbMF0sIEdTVF9UWVBFX0VMRU1FTlQpOwotICAgIGdfdmFsdWVfc2V0X29iamVjdCAoJmFyZ3NbMF0sIHJ0cGRlYyk7Ci0gICAgZ192YWx1ZV9pbml0ICgmYXJnc1sxXSwgR19UWVBFX1VJTlQpOwotICAgIGdfdmFsdWVfc2V0X3VpbnQgKCZhcmdzWzFdLCBzZXNzaW9uLT5pZCk7Ci0gICAgZ192YWx1ZV9pbml0ICgmYXJnc1syXSwgR19UWVBFX1VJTlQpOwotICAgIGdfdmFsdWVfc2V0X3VpbnQgKCZhcmdzWzJdLCBwdCk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZyZXQsIEdTVF9UWVBFX0NBUFMpOwotICAgIGdfdmFsdWVfc2V0X2JveGVkICgmcmV0LCBOVUxMKTsKLQotICAgIGdfc2lnbmFsX2VtaXR2IChhcmdzLCBnc3RfcnRwX2RlY19zaWduYWxzW1NJR05BTF9SRVFVRVNUX1BUX01BUF0sIDAsICZyZXQpOwotCi0gICAgY2FwcyA9IChHc3RDYXBzICopIGdfdmFsdWVfZ2V0X2JveGVkICgmcmV0KTsKLQotICAgIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJyZWN2X3J0cF9zcmNfJXVfJXVfJXUiLCBzZXNzaW9uLT5pZCwgc3NyYywgcHQpOwotICAgIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChydHBkZWMpOwotICAgIHRlbXBsID0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJyZWN2X3J0cF9zcmNfJXVfJXVfJXUiKTsKLSAgICBzZXNzaW9uLT5yZWN2X3J0cF9zcmMgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbCwgbmFtZSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLQotICAgIGdzdF9wYWRfc2V0X2NhcHMgKHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgY2Fwcyk7Ci0KLSAgICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgc2Vzc2lvbik7Ci0gICAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgZ3N0X3J0cF9kZWNfcXVlcnlfc3JjKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgVFJVRSk7Ci0gICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAocnRwZGVjKSwgc2Vzc2lvbi0+cmVjdl9ydHBfc3JjKTsKLQotICAgIHNlc3Npb24tPmFjdGl2ZSA9IFRSVUU7Ci0gIH0KLQotICByZXMgPSBnc3RfcGFkX3B1c2ggKHNlc3Npb24tPnJlY3ZfcnRwX3NyYywgYnVmZmVyKTsKLQotICByZXR1cm4gcmVzOwotCi1iYWRfcGFja2V0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAocnRwZGVjLCBTVFJFQU0sIERFQ09ERSwgKE5VTEwpLAotICAgICAgICAoIlJUUCBwYWNrZXQgZGlkIG5vdCB2YWxpZGF0ZSwgZHJvcHBpbmciKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHBfZGVjX2NoYWluX3J0Y3AgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFJUUERlYyAqc3JjOwotCi0jaWZkZWYgSEFWRV9SVENQCi0gIGdib29sZWFuIHZhbGlkOwotICBHc3RSVENQUGFja2V0IHBhY2tldDsKLSAgZ2Jvb2xlYW4gbW9yZTsKLSNlbmRpZgotCi0gIHNyYyA9IEdTVF9SVFBfREVDIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImdvdCBydGNwIHBhY2tldCIpOwotCi0jaWZkZWYgSEFWRV9SVENQCi0gIHZhbGlkID0gZ3N0X3J0Y3BfYnVmZmVyX3ZhbGlkYXRlIChidWZmZXIpOwotICBpZiAoIXZhbGlkKQotICAgIGdvdG8gYmFkX3BhY2tldDsKLQotICAvKiBwb3NpdGlvbiBvbiBmaXJzdCBwYWNrZXQgKi8KLSAgbW9yZSA9IGdzdF9ydGNwX2J1ZmZlcl9nZXRfZmlyc3RfcGFja2V0IChidWZmZXIsICZwYWNrZXQpOwotICB3aGlsZSAobW9yZSkgewotICAgIHN3aXRjaCAoZ3N0X3J0Y3BfcGFja2V0X2dldF90eXBlICgmcGFja2V0KSkgewotICAgICAgY2FzZSBHU1RfUlRDUF9UWVBFX1NSOgotICAgICAgewotICAgICAgICBndWludDMyIHNzcmMsIHJ0cHRpbWUsIHBhY2tldF9jb3VudCwgb2N0ZXRfY291bnQ7Ci0gICAgICAgIGd1aW50NjQgbnRwdGltZTsKLSAgICAgICAgZ3VpbnQgY291bnQsIGk7Ci0KLSAgICAgICAgZ3N0X3J0Y3BfcGFja2V0X3NyX2dldF9zZW5kZXJfaW5mbyAoJnBhY2tldCwgJnNzcmMsICZudHB0aW1lLCAmcnRwdGltZSwKLSAgICAgICAgICAgICZwYWNrZXRfY291bnQsICZvY3RldF9jb3VudCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAotICAgICAgICAgICAgImdvdCBTUiBwYWNrZXQ6IFNTUkMgJTA4eCwgTlRQICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAgICIsIFJUUCAldSwgUEMgJXUsIE9DICV1Iiwgc3NyYywgbnRwdGltZSwgcnRwdGltZSwgcGFja2V0X2NvdW50LAotICAgICAgICAgICAgb2N0ZXRfY291bnQpOwotCi0gICAgICAgIGNvdW50ID0gZ3N0X3J0Y3BfcGFja2V0X2dldF9yYl9jb3VudCAoJnBhY2tldCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgZ3VpbnQzMiBzc3JjLCBleHRoaWdoZXN0c2VxLCBqaXR0ZXIsIGxzciwgZGxzcjsKLSAgICAgICAgICBndWludDggZnJhY3Rpb25sb3N0OwotICAgICAgICAgIGdpbnQzMiBwYWNrZXRzbG9zdDsKLQotICAgICAgICAgIGdzdF9ydGNwX3BhY2tldF9nZXRfcmIgKCZwYWNrZXQsIGksICZzc3JjLCAmZnJhY3Rpb25sb3N0LAotICAgICAgICAgICAgICAmcGFja2V0c2xvc3QsICZleHRoaWdoZXN0c2VxLCAmaml0dGVyLCAmbHNyLCAmZGxzcik7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3QgUkIgcGFja2V0ICVkOiBTU1JDICUwOHgsIEZMICV1IgotICAgICAgICAgICAgICAiLCBQTCAldSwgSFMgJXUsIEpJVFRFUiAldSwgTFNSICV1LCBETFNSICV1Iiwgc3NyYywgZnJhY3Rpb25sb3N0LAotICAgICAgICAgICAgICBwYWNrZXRzbG9zdCwgZXh0aGlnaGVzdHNlcSwgaml0dGVyLCBsc3IsIGRsc3IpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUlRDUF9UWVBFX1JSOgotICAgICAgewotICAgICAgICBndWludDMyIHNzcmM7Ci0gICAgICAgIGd1aW50IGNvdW50LCBpOwotCi0gICAgICAgIHNzcmMgPSBnc3RfcnRjcF9wYWNrZXRfcnJfZ2V0X3NzcmMgKCZwYWNrZXQpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImdvdCBSUiBwYWNrZXQ6IFNTUkMgJTA4eCIsIHNzcmMpOwotCi0gICAgICAgIGNvdW50ID0gZ3N0X3J0Y3BfcGFja2V0X2dldF9yYl9jb3VudCAoJnBhY2tldCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgZ3VpbnQzMiBzc3JjLCBleHRoaWdoZXN0c2VxLCBqaXR0ZXIsIGxzciwgZGxzcjsKLSAgICAgICAgICBndWludDggZnJhY3Rpb25sb3N0OwotICAgICAgICAgIGdpbnQzMiBwYWNrZXRzbG9zdDsKLQotICAgICAgICAgIGdzdF9ydGNwX3BhY2tldF9nZXRfcmIgKCZwYWNrZXQsIGksICZzc3JjLCAmZnJhY3Rpb25sb3N0LAotICAgICAgICAgICAgICAmcGFja2V0c2xvc3QsICZleHRoaWdoZXN0c2VxLCAmaml0dGVyLCAmbHNyLCAmZGxzcik7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3QgUkIgcGFja2V0ICVkOiBTU1JDICUwOHgsIEZMICV1IgotICAgICAgICAgICAgICAiLCBQTCAldSwgSFMgJXUsIEpJVFRFUiAldSwgTFNSICV1LCBETFNSICV1Iiwgc3NyYywgZnJhY3Rpb25sb3N0LAotICAgICAgICAgICAgICBwYWNrZXRzbG9zdCwgZXh0aGlnaGVzdHNlcSwgaml0dGVyLCBsc3IsIGRsc3IpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUlRDUF9UWVBFX1NERVM6Ci0gICAgICB7Ci0gICAgICAgIGd1aW50IGNodW5rcywgaSwgajsKLSAgICAgICAgZ2Jvb2xlYW4gbW9yZV9jaHVua3MsIG1vcmVfaXRlbXM7Ci0KLSAgICAgICAgY2h1bmtzID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZ2V0X2NodW5rX2NvdW50ICgmcGFja2V0KTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IFNERVMgcGFja2V0IHdpdGggJWQgY2h1bmtzIiwgY2h1bmtzKTsKLQotICAgICAgICBtb3JlX2NodW5rcyA9IGdzdF9ydGNwX3BhY2tldF9zZGVzX2ZpcnN0X2NodW5rICgmcGFja2V0KTsKLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChtb3JlX2NodW5rcykgewotICAgICAgICAgIGd1aW50MzIgc3NyYzsKLQotICAgICAgICAgIHNzcmMgPSBnc3RfcnRjcF9wYWNrZXRfc2Rlc19nZXRfc3NyYyAoJnBhY2tldCk7Ci0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjaHVuayAlZCwgU1NSQyAlMDh4IiwgaSwgc3NyYyk7Ci0KLSAgICAgICAgICBtb3JlX2l0ZW1zID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfZmlyc3RfaXRlbSAoJnBhY2tldCk7Ci0gICAgICAgICAgaiA9IDA7Ci0gICAgICAgICAgd2hpbGUgKG1vcmVfaXRlbXMpIHsKLSAgICAgICAgICAgIEdzdFJUQ1BTREVTVHlwZSB0eXBlOwotICAgICAgICAgICAgZ3VpbnQ4IGxlbjsKLSAgICAgICAgICAgIGdjaGFyICpkYXRhOwotCi0gICAgICAgICAgICBnc3RfcnRjcF9wYWNrZXRfc2Rlc19nZXRfaXRlbSAoJnBhY2tldCwgJnR5cGUsICZsZW4sICZkYXRhKTsKLQotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaXRlbSAlZCwgdHlwZSAlZCwgbGVuICVkLCBkYXRhICVzIiwgaiwKLSAgICAgICAgICAgICAgICB0eXBlLCBsZW4sIGRhdGEpOwotCi0gICAgICAgICAgICBtb3JlX2l0ZW1zID0gZ3N0X3J0Y3BfcGFja2V0X3NkZXNfbmV4dF9pdGVtICgmcGFja2V0KTsKLSAgICAgICAgICAgIGorKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbW9yZV9jaHVua3MgPSBnc3RfcnRjcF9wYWNrZXRfc2Rlc19uZXh0X2NodW5rICgmcGFja2V0KTsKLSAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9SVENQX1RZUEVfQllFOgotICAgICAgewotICAgICAgICBndWludCBjb3VudCwgaTsKLSAgICAgICAgZ2NoYXIgKnJlYXNvbjsKLQotICAgICAgICByZWFzb24gPSBnc3RfcnRjcF9wYWNrZXRfYnllX2dldF9yZWFzb24gKCZwYWNrZXQpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3QgQllFIHBhY2tldCAocmVhc29uOiAlcykiLAotICAgICAgICAgICAgR1NUX1NUUl9OVUxMIChyZWFzb24pKTsKLSAgICAgICAgZ19mcmVlIChyZWFzb24pOwotCi0gICAgICAgIGNvdW50ID0gZ3N0X3J0Y3BfcGFja2V0X2J5ZV9nZXRfc3NyY19jb3VudCAoJnBhY2tldCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgZ3VpbnQzMiBzc3JjOwotCi0KLSAgICAgICAgICBzc3JjID0gZ3N0X3J0Y3BfcGFja2V0X2J5ZV9nZXRfbnRoX3NzcmMgKCZwYWNrZXQsIGkpOwotCi0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiU1NSQzogJTA4eCIsIHNzcmMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUlRDUF9UWVBFX0FQUDoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IEFQUCBwYWNrZXQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgImdvdCB1bmtub3duIFJUQ1AgcGFja2V0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtb3JlID0gZ3N0X3J0Y3BfcGFja2V0X21vdmVfdG9fbmV4dCAoJnBhY2tldCk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1iYWRfcGFja2V0OgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJnb3QgaW52YWxpZCBSVENQIHBhY2tldCIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0jZWxzZQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZGVjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBEZWMgKnNyYzsKLQotICBzcmMgPSBHU1RfUlRQX0RFQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEFURU5DWToKLSAgICAgIHNyYy0+bGF0ZW5jeSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZGVjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RSVFBEZWMgKnNyYzsKLQotICBzcmMgPSBHU1RfUlRQX0RFQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEFURU5DWToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzcmMtPmxhdGVuY3kpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2xvY2sgKgotZ3N0X3J0cF9kZWNfcHJvdmlkZV9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdFJUUERlYyAqcnRwZGVjOwotCi0gIHJ0cGRlYyA9IEdTVF9SVFBfREVDIChlbGVtZW50KTsKLQotICByZXR1cm4gR1NUX0NMT0NLX0NBU1QgKGdzdF9vYmplY3RfcmVmIChydHBkZWMtPnByb3ZpZGVkX2Nsb2NrKSk7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0cF9kZWNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgLyogd2UncmUgTk9fUFJFUk9MTCB3aGVuIGdvaW5nIHRvIFBBVVNFRCAqLwotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogQ3JlYXRlIGEgcGFkIGZvciByZWNlaXZpbmcgUlRQIGZvciB0aGUgc2Vzc2lvbiBpbiBAbmFtZQotICovCi1zdGF0aWMgR3N0UGFkICoKLWNyZWF0ZV9yZWN2X3J0cCAoR3N0UlRQRGVjICogcnRwZGVjLCBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIGd1aW50IHNlc3NpZDsKLSAgR3N0UlRQRGVjU2Vzc2lvbiAqc2Vzc2lvbjsKLQotICAvKiBmaXJzdCBnZXQgdGhlIHNlc3Npb24gbnVtYmVyICovCi0gIGlmIChuYW1lID09IE5VTEwgfHwgc3NjYW5mIChuYW1lLCAicmVjdl9ydHBfc2lua18ldSIsICZzZXNzaWQpICE9IDEpCi0gICAgZ290byBub19uYW1lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGRlYywgImZpbmRpbmcgc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0KLSAgLyogZ2V0IG9yIGNyZWF0ZSBzZXNzaW9uICovCi0gIHNlc3Npb24gPSBmaW5kX3Nlc3Npb25fYnlfaWQgKHJ0cGRlYywgc2Vzc2lkKTsKLSAgaWYgKCFzZXNzaW9uKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRwZGVjLCAiY3JlYXRpbmcgc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgLyogY3JlYXRlIHNlc3Npb24gbm93ICovCi0gICAgc2Vzc2lvbiA9IGNyZWF0ZV9zZXNzaW9uIChydHBkZWMsIHNlc3NpZCk7Ci0gICAgaWYgKHNlc3Npb24gPT0gTlVMTCkKLSAgICAgIGdvdG8gY3JlYXRlX2Vycm9yOwotICB9Ci0gIC8qIGNoZWNrIGlmIHBhZCB3YXMgcmVxdWVzdGVkICovCi0gIGlmIChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rICE9IE5VTEwpCi0gICAgZ290byBleGlzdGVkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJ0cGRlYywgImdldHRpbmcgUlRQIHNpbmsgcGFkIik7Ci0KLSAgc2Vzc2lvbi0+cmVjdl9ydHBfc2luayA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLCBzZXNzaW9uKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlc3Npb24tPnJlY3ZfcnRwX3NpbmssIGdzdF9ydHBfZGVjX2NoYWluX3J0cCk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+cmVjdl9ydHBfc2luaywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGRlYyksIHNlc3Npb24tPnJlY3ZfcnRwX3NpbmspOwotCi0gIHJldHVybiBzZXNzaW9uLT5yZWN2X3J0cF9zaW5rOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbmFtZToKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGRlYzogaW52YWxpZCBuYW1lIGdpdmVuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWNyZWF0ZV9lcnJvcjoKLSAgewotICAgIC8qIGNyZWF0ZV9zZXNzaW9uIGFscmVhZHkgd2FybmVkICovCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWV4aXN0ZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBkZWM6IHJlY3ZfcnRwIHBhZCBhbHJlYWR5IHJlcXVlc3RlZCBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyogQ3JlYXRlIGEgcGFkIGZvciByZWNlaXZpbmcgUlRDUCBmb3IgdGhlIHNlc3Npb24gaW4gQG5hbWUKLSAqLwotc3RhdGljIEdzdFBhZCAqCi1jcmVhdGVfcmVjdl9ydGNwIChHc3RSVFBEZWMgKiBydHBkZWMsIEdzdFBhZFRlbXBsYXRlICogdGVtcGwsCi0gICAgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBndWludCBzZXNzaWQ7Ci0gIEdzdFJUUERlY1Nlc3Npb24gKnNlc3Npb247Ci0KLSAgLyogZmlyc3QgZ2V0IHRoZSBzZXNzaW9uIG51bWJlciAqLwotICBpZiAobmFtZSA9PSBOVUxMIHx8IHNzY2FuZiAobmFtZSwgInJlY3ZfcnRjcF9zaW5rXyV1IiwgJnNlc3NpZCkgIT0gMSkKLSAgICBnb3RvIG5vX25hbWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocnRwZGVjLCAiZmluZGluZyBzZXNzaW9uICVkIiwgc2Vzc2lkKTsKLQotICAvKiBnZXQgdGhlIHNlc3Npb24sIGl0IG11c3QgZXhpc3Qgb3Igd2UgZXJyb3IgKi8KLSAgc2Vzc2lvbiA9IGZpbmRfc2Vzc2lvbl9ieV9pZCAocnRwZGVjLCBzZXNzaWQpOwotICBpZiAoIXNlc3Npb24pCi0gICAgZ290byBub19zZXNzaW9uOwotCi0gIC8qIGNoZWNrIGlmIHBhZCB3YXMgcmVxdWVzdGVkICovCi0gIGlmIChzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayAhPSBOVUxMKQotICAgIGdvdG8gZXhpc3RlZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChydHBkZWMsICJnZXR0aW5nIFJUQ1Agc2luayBwYWQiKTsKLQotICBzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luayA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsLCBuYW1lKTsKLSAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzZXNzaW9uLT5yZWN2X3J0cF9zaW5rLCBzZXNzaW9uKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rLCBnc3RfcnRwX2RlY19jaGFpbl9ydGNwKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzZXNzaW9uLT5yZWN2X3J0Y3Bfc2luaywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHJ0cGRlYyksIHNlc3Npb24tPnJlY3ZfcnRjcF9zaW5rKTsKLQotICByZXR1cm4gc2Vzc2lvbi0+cmVjdl9ydGNwX3Npbms7Ci0KLSAgLyogRVJST1JTICovCi1ub19uYW1lOgotICB7Ci0gICAgZ193YXJuaW5nICgicnRwZGVjOiBpbnZhbGlkIG5hbWUgZ2l2ZW4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbm9fc2Vzc2lvbjoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGRlYzogbm8gc2Vzc2lvbiB3aXRoIGlkICVkIiwgc2Vzc2lkKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotZXhpc3RlZDoKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGRlYzogcmVjdl9ydGNwIHBhZCBhbHJlYWR5IHJlcXVlc3RlZCBmb3Igc2Vzc2lvbiAlZCIsCi0gICAgICAgIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyogQ3JlYXRlIGEgcGFkIGZvciBzZW5kaW5nIFJUQ1AgZm9yIHRoZSBzZXNzaW9uIGluIEBuYW1lCi0gKi8KLXN0YXRpYyBHc3RQYWQgKgotY3JlYXRlX3J0Y3AgKEdzdFJUUERlYyAqIHJ0cGRlYywgR3N0UGFkVGVtcGxhdGUgKiB0ZW1wbCwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBndWludCBzZXNzaWQ7Ci0gIEdzdFJUUERlY1Nlc3Npb24gKnNlc3Npb247Ci0KLSAgLyogZmlyc3QgZ2V0IHRoZSBzZXNzaW9uIG51bWJlciAqLwotICBpZiAobmFtZSA9PSBOVUxMIHx8IHNzY2FuZiAobmFtZSwgInJ0Y3Bfc3JjXyV1IiwgJnNlc3NpZCkgIT0gMSkKLSAgICBnb3RvIG5vX25hbWU7Ci0KLSAgLyogZ2V0IG9yIGNyZWF0ZSBzZXNzaW9uICovCi0gIHNlc3Npb24gPSBmaW5kX3Nlc3Npb25fYnlfaWQgKHJ0cGRlYywgc2Vzc2lkKTsKLSAgaWYgKCFzZXNzaW9uKQotICAgIGdvdG8gbm9fc2Vzc2lvbjsKLQotICAvKiBjaGVjayBpZiBwYWQgd2FzIHJlcXVlc3RlZCAqLwotICBpZiAoc2Vzc2lvbi0+cnRjcF9zcmMgIT0gTlVMTCkKLSAgICBnb3RvIGV4aXN0ZWQ7Ci0KLSAgc2Vzc2lvbi0+cnRjcF9zcmMgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbCwgbmFtZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2Vzc2lvbi0+cnRjcF9zcmMsIFRSVUUpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUIChydHBkZWMpLCBzZXNzaW9uLT5ydGNwX3NyYyk7Ci0KLSAgcmV0dXJuIHNlc3Npb24tPnJ0Y3Bfc3JjOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fbmFtZToKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGRlYzogaW52YWxpZCBuYW1lIGdpdmVuIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLW5vX3Nlc3Npb246Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBkZWM6IHNlc3Npb24gd2l0aCBpZCAlZCBkb2VzIG5vdCBleGlzdCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWV4aXN0ZWQ6Ci0gIHsKLSAgICBnX3dhcm5pbmcgKCJydHBkZWM6IHJ0Y3Bfc3JjIHBhZCBhbHJlYWR5IHJlcXVlc3RlZCBmb3Igc2Vzc2lvbiAlZCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotLyogCi0gKi8KLXN0YXRpYyBHc3RQYWQgKgotZ3N0X3J0cF9kZWNfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IEdzdENhcHMgKiBjYXBzKQotewotICBHc3RSVFBEZWMgKnJ0cGRlYzsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzczsKLSAgR3N0UGFkICpyZXN1bHQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRlbXBsICE9IE5VTEwsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1JUUF9ERUMgKGVsZW1lbnQpLCBOVUxMKTsKLQotICBydHBkZWMgPSBHU1RfUlRQX0RFQyAoZWxlbWVudCk7Ci0gIGtsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChlbGVtZW50KTsKLQotICAvKiBmaWd1cmUgb3V0IHRoZSB0ZW1wbGF0ZSAqLwotICBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJyZWN2X3J0cF9zaW5rXyV1IikpIHsKLSAgICByZXN1bHQgPSBjcmVhdGVfcmVjdl9ydHAgKHJ0cGRlYywgdGVtcGwsIG5hbWUpOwotICB9IGVsc2UgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLAotICAgICAgICAgICJyZWN2X3J0Y3Bfc2lua18ldSIpKSB7Ci0gICAgcmVzdWx0ID0gY3JlYXRlX3JlY3ZfcnRjcCAocnRwZGVjLCB0ZW1wbCwgbmFtZSk7Ci0gIH0gZWxzZSBpZiAodGVtcGwgPT0gZ3N0X2VsZW1lbnRfY2xhc3NfZ2V0X3BhZF90ZW1wbGF0ZSAoa2xhc3MsICJydGNwX3NyY18ldSIpKSB7Ci0gICAgcmVzdWx0ID0gY3JlYXRlX3J0Y3AgKHJ0cGRlYywgdGVtcGwsIG5hbWUpOwotICB9IGVsc2UKLSAgICBnb3RvIHdyb25nX3RlbXBsYXRlOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi13cm9uZ190ZW1wbGF0ZToKLSAgewotICAgIGdfd2FybmluZyAoInJ0cGRlYzogdGhpcyBpcyBub3Qgb3VyIHRlbXBsYXRlIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHBfZGVjX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKQotewotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0c3AvZ3N0cnRwZGVjLmggYi9nc3QvcnRzcC9nc3RydHBkZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4M2UyMy4uMDAwMDAwMAotLS0gYS9nc3QvcnRzcC9nc3RydHBkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNSwyMDA2PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFBfREVDX0hfXwotI2RlZmluZSBfX0dTVF9SVFBfREVDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfUlRQX0RFQyAgCQkoZ3N0X3J0cF9kZWNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lTX1JUUF9ERUMob2JqKSAgCQkoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRQX0RFQykpCi0jZGVmaW5lIEdTVF9JU19SVFBfREVDX0NMQVNTKGtsYXNzKSAJKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfUlRQX0RFQykpCi0jZGVmaW5lIEdTVF9SVFBfREVDKG9iaikgIAkJKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1JUUF9ERUMsIEdzdFJUUERlYykpCi0jZGVmaW5lIEdTVF9SVFBfREVDX0NMQVNTKGtsYXNzKSAgCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1JUUF9ERUMsIEdzdFJUUERlY0NsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUUERlYyBHc3RSVFBEZWM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQRGVjQ2xhc3MgR3N0UlRQRGVjQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UlRQRGVjU2Vzc2lvbiBHc3RSVFBEZWNTZXNzaW9uOwotCi1zdHJ1Y3QgX0dzdFJUUERlYyB7Ci0gIEdzdEVsZW1lbnQgIGVsZW1lbnQ7Ci0KLSAgZ3VpbnQgICAgICAgbGF0ZW5jeTsKLSAgR1NMaXN0ICAgICAqc2Vzc2lvbnM7Ci0gIEdzdENsb2NrICAgKnByb3ZpZGVkX2Nsb2NrOwotfTsKLQotc3RydWN0IF9Hc3RSVFBEZWNDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgLyogZ2V0IHRoZSBjYXBzIGZvciBwdCAqLwotICBHc3RDYXBzKiAoKnJlcXVlc3RfcHRfbWFwKSAgKEdzdFJUUERlYyAqcnRwZGVjLCBndWludCBzZXNzaW9uLCBndWludCBwdCk7Ci0KLSAgdm9pZCAgICAgKCpjbGVhcl9wdF9tYXApICAgIChHc3RSVFBEZWMgKnJ0cGRlYyk7Ci0KLSAgdm9pZCAgICAgKCpvbl9uZXdfc3NyYykgICAgICAgKEdzdFJUUERlYyAqcnRwZGVjLCBndWludCBzZXNzaW9uLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX3NzcmNfY29sbGlzaW9uKSAoR3N0UlRQRGVjICpydHBkZWMsIGd1aW50IHNlc3Npb24sIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fc3NyY192YWxpZGF0ZWQpIChHc3RSVFBEZWMgKnJ0cGRlYywgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLSAgdm9pZCAgICAgKCpvbl9ieWVfc3NyYykgICAgICAgKEdzdFJUUERlYyAqcnRwZGVjLCBndWludCBzZXNzaW9uLCBndWludDMyIHNzcmMpOwotICB2b2lkICAgICAoKm9uX2J5ZV90aW1lb3V0KSAgICAoR3N0UlRQRGVjICpydHBkZWMsIGd1aW50IHNlc3Npb24sIGd1aW50MzIgc3NyYyk7Ci0gIHZvaWQgICAgICgqb25fdGltZW91dCkgICAgICAgIChHc3RSVFBEZWMgKnJ0cGRlYywgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQzMiBzc3JjKTsKLX07Ci0KLUdUeXBlIGdzdF9ydHBfZGVjX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfUlRQX0RFQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9ydHNwL2dzdHJ0c3AuYyBiL2dzdC9ydHNwL2dzdHJ0c3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZlMmMzZi4uMDAwMDAwMAotLS0gYS9nc3QvcnRzcC9nc3RydHNwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi0jaW5jbHVkZSAiZ3N0cnRwZGVjLmgiCi0jaW5jbHVkZSAiZ3N0cnRzcHNyYy5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0jaWZkZWYgRU5BQkxFX05MUwotICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOwotICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKLSNlbmRpZiAvKiBFTkFCTEVfTkxTICovCi0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAicnRzcHNyYyIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfUlRTUFNSQykpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJydHBkZWMiLCBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9SVFBfREVDKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBydHNwLAotICAgICJ0cmFuc2ZlciBkYXRhIHZpYSBSVFNQIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9ydHNwL2dzdHJ0c3AuaCBiL2dzdC9ydHNwL2dzdHJ0c3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmNWVmOC4uMDAwMDAwMAotLS0gYS9nc3QvcnRzcC9nc3RydHNwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFNQX0hfXwotI2RlZmluZSBfX0dTVF9SVFNQX0hfXwotCi1HX0JFR0lOX0RFQ0xTCi0KLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUU1BfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC9ydHNwL2dzdHJ0c3BleHQuYyBiL2dzdC9ydHNwL2dzdHJ0c3BleHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdiNWE5Ny4uMDAwMDAwMAotLS0gYS9nc3QvcnRzcC9nc3RydHNwZXh0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgImdzdHJ0c3BleHQuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRzcGV4dF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRzcGV4dF9kZWJ1ZykKLQotc3RhdGljIEdMaXN0ICpleHRlbnNpb25zOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwX2V4dF9saXN0X2ZpbHRlciAoR3N0UGx1Z2luRmVhdHVyZSAqIGZlYXR1cmUsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3Rvcnk7Ci0gIGd1aW50IHJhbms7Ci0KLSAgLyogd2Ugb25seSBjYXJlIGFib3V0IGVsZW1lbnQgZmFjdG9yaWVzICovCi0gIGlmICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZIChmZWF0dXJlKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2ZhY3RvcnlfaGFzX2ludGVyZmFjZSAoZmFjdG9yeSwgIkdzdFJUU1BFeHRlbnNpb24iKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogb25seSBzZWxlY3QgZWxlbWVudHMgd2l0aCBhdXRvcGx1Z2dpbmcgcmFuayAqLwotICByYW5rID0gZ3N0X3BsdWdpbl9mZWF0dXJlX2dldF9yYW5rIChmZWF0dXJlKTsKLSAgaWYgKHJhbmsgPCBHU1RfUkFOS19NQVJHSU5BTCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQKLWdzdF9ydHNwX2V4dF9saXN0X2luaXQgKHZvaWQpCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChydHNwZXh0X2RlYnVnLCAicnRzcGV4dCIsIDAsICJSVFNQIGV4dGVuc2lvbiIpOwotCi0gIC8qIGdldCBhIGxpc3Qgb2YgYWxsIGV4dGVuc2lvbnMgKi8KLSAgZXh0ZW5zaW9ucyA9IGdzdF9yZWdpc3RyeV9mZWF0dXJlX2ZpbHRlciAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgIChHc3RQbHVnaW5GZWF0dXJlRmlsdGVyKSBnc3RfcnRzcF9leHRfbGlzdF9maWx0ZXIsIEZBTFNFLCBOVUxMKTsKLX0KLQotR3N0UlRTUEV4dGVuc2lvbkxpc3QgKgotZ3N0X3J0c3BfZXh0X2xpc3RfZ2V0ICh2b2lkKQotewotICBHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqcmVzdWx0OwotICBHTGlzdCAqd2FsazsKLQotICByZXN1bHQgPSBnX25ldzAgKEdzdFJUU1BFeHRlbnNpb25MaXN0LCAxKTsKLQotICBmb3IgKHdhbGsgPSBleHRlbnNpb25zOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmZhY3RvcnkgPSBHU1RfRUxFTUVOVF9GQUNUT1JZICh3YWxrLT5kYXRhKTsKLSAgICBHc3RFbGVtZW50ICplbGVtZW50OwotCi0gICAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfY3JlYXRlIChmYWN0b3J5LCBOVUxMKTsKLSAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgIEdTVF9FUlJPUiAoImNvdWxkIG5vdCBjcmVhdGUgZXh0ZW5zaW9uIGluc3RhbmNlIik7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUcgKCJhZGRlZCBleHRlbnNpb24gaW50ZXJmYWNlIGZvciAnJXMnIiwKLSAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAgIHJlc3VsdC0+ZXh0ZW5zaW9ucyA9IGdfbGlzdF9wcmVwZW5kIChyZXN1bHQtPmV4dGVuc2lvbnMsIGVsZW1lbnQpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLWdzdF9ydHNwX2V4dF9saXN0X2ZyZWUgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0KQotewotICBHTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1RfQ0FTVCAoZWxlbSkpOwotICB9Ci0gIGdfbGlzdF9mcmVlIChleHQtPmV4dGVuc2lvbnMpOwotICBnX2ZyZWUgKGV4dCk7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRzcF9leHRfbGlzdF9kZXRlY3Rfc2VydmVyIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqIGV4dCwKLSAgICBHc3RSVFNQTWVzc2FnZSAqIHJlc3ApCi17Ci0gIEdMaXN0ICp3YWxrOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGZvciAod2FsayA9IGV4dC0+ZXh0ZW5zaW9uczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BFeHRlbnNpb24gKmVsZW0gPSAoR3N0UlRTUEV4dGVuc2lvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgcmVzID0gZ3N0X3J0c3BfZXh0ZW5zaW9uX2RldGVjdF9zZXJ2ZXIgKGVsZW0sIHJlc3ApOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLUdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwX2V4dF9saXN0X2JlZm9yZV9zZW5kIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqIGV4dCwgR3N0UlRTUE1lc3NhZ2UgKiByZXEpCi17Ci0gIEdMaXN0ICp3YWxrOwotICBHc3RSVFNQUmVzdWx0IHJlcyA9IEdTVF9SVFNQX09LOwotCi0gIGZvciAod2FsayA9IGV4dC0+ZXh0ZW5zaW9uczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BFeHRlbnNpb24gKmVsZW0gPSAoR3N0UlRTUEV4dGVuc2lvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgcmVzID0gZ3N0X3J0c3BfZXh0ZW5zaW9uX2JlZm9yZV9zZW5kIChlbGVtLCByZXEpOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLUdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwX2V4dF9saXN0X2FmdGVyX3NlbmQgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0LCBHc3RSVFNQTWVzc2FnZSAqIHJlcSwKLSAgICBHc3RSVFNQTWVzc2FnZSAqIHJlc3ApCi17Ci0gIEdMaXN0ICp3YWxrOwotICBHc3RSVFNQUmVzdWx0IHJlcyA9IEdTVF9SVFNQX09LOwotCi0gIGZvciAod2FsayA9IGV4dC0+ZXh0ZW5zaW9uczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BFeHRlbnNpb24gKmVsZW0gPSAoR3N0UlRTUEV4dGVuc2lvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgcmVzID0gZ3N0X3J0c3BfZXh0ZW5zaW9uX2FmdGVyX3NlbmQgKGVsZW0sIHJlcSwgcmVzcCk7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotR3N0UlRTUFJlc3VsdAotZ3N0X3J0c3BfZXh0X2xpc3RfcGFyc2Vfc2RwIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqIGV4dCwgR3N0U0RQTWVzc2FnZSAqIHNkcCwKLSAgICBHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIHJlcyA9IGdzdF9ydHNwX2V4dGVuc2lvbl9wYXJzZV9zZHAgKGVsZW0sIHNkcCwgcyk7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotR3N0UlRTUFJlc3VsdAotZ3N0X3J0c3BfZXh0X2xpc3Rfc2V0dXBfbWVkaWEgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0LCBHc3RTRFBNZWRpYSAqIG1lZGlhKQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIHJlcyA9IGdzdF9ydHNwX2V4dGVuc2lvbl9zZXR1cF9tZWRpYSAoZWxlbSwgbWVkaWEpOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLWdib29sZWFuCi1nc3RfcnRzcF9leHRfbGlzdF9jb25maWd1cmVfc3RyZWFtIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqIGV4dCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdMaXN0ICp3YWxrOwotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIGZvciAod2FsayA9IGV4dC0+ZXh0ZW5zaW9uczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BFeHRlbnNpb24gKmVsZW0gPSAoR3N0UlRTUEV4dGVuc2lvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgcmVzID0gZ3N0X3J0c3BfZXh0ZW5zaW9uX2NvbmZpZ3VyZV9zdHJlYW0gKGVsZW0sIGNhcHMpOwotICAgIGlmICghcmVzKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotR3N0UlRTUFJlc3VsdAotZ3N0X3J0c3BfZXh0X2xpc3RfZ2V0X3RyYW5zcG9ydHMgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0LAotICAgIEdzdFJUU1BMb3dlclRyYW5zIHByb3RvY29scywgZ2NoYXIgKiogdHJhbnNwb3J0KQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIHJlcyA9IGdzdF9ydHNwX2V4dGVuc2lvbl9nZXRfdHJhbnNwb3J0cyAoZWxlbSwgcHJvdG9jb2xzLCB0cmFuc3BvcnQpOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLUdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwX2V4dF9saXN0X3N0cmVhbV9zZWxlY3QgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0LCBHc3RSVFNQVXJsICogdXJsKQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIHJlcyA9IGdzdF9ydHNwX2V4dGVuc2lvbl9zdHJlYW1fc2VsZWN0IChlbGVtLCB1cmwpOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLWdzdF9ydHNwX2V4dF9saXN0X2Nvbm5lY3QgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0LAotICAgIGNvbnN0IGdjaGFyICogZGV0YWlsZWRfc2lnbmFsLCBHQ2FsbGJhY2sgY19oYW5kbGVyLCBncG9pbnRlciBkYXRhKQotewotICBHTGlzdCAqd2FsazsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKGVsZW0sIGRldGFpbGVkX3NpZ25hbCwgY19oYW5kbGVyLCBkYXRhKTsKLSAgfQotfQotCi1Hc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcF9leHRfbGlzdF9yZWNlaXZlX3JlcXVlc3QgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICogZXh0LAotICAgIEdzdFJUU1BNZXNzYWdlICogcmVxKQotewotICBHTGlzdCAqd2FsazsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9FTk9USU1QTDsKLQotICBmb3IgKHdhbGsgPSBleHQtPmV4dGVuc2lvbnM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQRXh0ZW5zaW9uICplbGVtID0gKEdzdFJUU1BFeHRlbnNpb24gKikgd2Fsay0+ZGF0YTsKLQotICAgIHJlcyA9IGdzdF9ydHNwX2V4dGVuc2lvbl9yZWNlaXZlX3JlcXVlc3QgKGVsZW0sIHJlcSk7Ci0gICAgaWYgKHJlcyAhPSBHU1RfUlRTUF9FTk9USU1QTCkKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19CmRpZmYgLS1naXQgYS9nc3QvcnRzcC9nc3RydHNwZXh0LmggYi9nc3QvcnRzcC9nc3RydHNwZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODc3OTYuLjAwMDAwMDAKLS0tIGEvZ3N0L3J0c3AvZ3N0cnRzcGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFNQX0VYVF9IX18KLSNkZWZpbmUgX19HU1RfUlRTUF9FWFRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0c3AvZ3N0cnRzcGV4dGVuc2lvbi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFNQRXh0ZW5zaW9uTGlzdCBHc3RSVFNQRXh0ZW5zaW9uTGlzdDsKLQotc3RydWN0IF9Hc3RSVFNQRXh0ZW5zaW9uTGlzdAotewotICBHTGlzdCAqZXh0ZW5zaW9uczsKLX07Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9ydHNwX2V4dF9saXN0X2luaXQgICAgKHZvaWQpOwotCi1Hc3RSVFNQRXh0ZW5zaW9uTGlzdCAqICBnc3RfcnRzcF9leHRfbGlzdF9nZXQgICAgICh2b2lkKTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9ydHNwX2V4dF9saXN0X2ZyZWUgICAgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICpleHQpOwotCi1nYm9vbGVhbiAgICAgIGdzdF9ydHNwX2V4dF9saXN0X2RldGVjdF9zZXJ2ZXIgICAgIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqZXh0LCBHc3RSVFNQTWVzc2FnZSAqcmVzcCk7Ci0gIAotR3N0UlRTUFJlc3VsdCBnc3RfcnRzcF9leHRfbGlzdF9iZWZvcmVfc2VuZCAgICAgICAoR3N0UlRTUEV4dGVuc2lvbkxpc3QgKmV4dCwgR3N0UlRTUE1lc3NhZ2UgKnJlcSk7Ci1Hc3RSVFNQUmVzdWx0IGdzdF9ydHNwX2V4dF9saXN0X2FmdGVyX3NlbmQgICAgICAgIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqZXh0LCBHc3RSVFNQTWVzc2FnZSAqcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0UlRTUE1lc3NhZ2UgKnJlc3ApOwotR3N0UlRTUFJlc3VsdCBnc3RfcnRzcF9leHRfbGlzdF9wYXJzZV9zZHAgICAgICAgICAoR3N0UlRTUEV4dGVuc2lvbkxpc3QgKmV4dCwgR3N0U0RQTWVzc2FnZSAqc2RwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlICpzKTsKLUdzdFJUU1BSZXN1bHQgZ3N0X3J0c3BfZXh0X2xpc3Rfc2V0dXBfbWVkaWEgICAgICAgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICpleHQsIEdzdFNEUE1lZGlhICptZWRpYSk7Ci1nYm9vbGVhbiAgICAgIGdzdF9ydHNwX2V4dF9saXN0X2NvbmZpZ3VyZV9zdHJlYW0gIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqZXh0LCBHc3RDYXBzICpjYXBzKTsKLUdzdFJUU1BSZXN1bHQgZ3N0X3J0c3BfZXh0X2xpc3RfZ2V0X3RyYW5zcG9ydHMgICAgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICpleHQsIEdzdFJUU1BMb3dlclRyYW5zIHByb3RvY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqdHJhbnNwb3J0KTsKLUdzdFJUU1BSZXN1bHQgZ3N0X3J0c3BfZXh0X2xpc3Rfc3RyZWFtX3NlbGVjdCAgICAgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICpleHQsIEdzdFJUU1BVcmwgKnVybCk7Ci0KLXZvaWQgICAgICAgICAgZ3N0X3J0c3BfZXh0X2xpc3RfY29ubmVjdCAgICAgICAgICAgKEdzdFJUU1BFeHRlbnNpb25MaXN0ICpleHQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZGV0YWlsZWRfc2lnbmFsLCBHQ2FsbGJhY2sgY19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7Ci1Hc3RSVFNQUmVzdWx0IGdzdF9ydHNwX2V4dF9saXN0X3JlY2VpdmVfcmVxdWVzdCAgIChHc3RSVFNQRXh0ZW5zaW9uTGlzdCAqZXh0LCBHc3RSVFNQTWVzc2FnZSAqcmVxKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1JUU1BfRVhUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jIGIvZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzkzZmVkLi4wMDAwMDAwCi0tLSBhL2dzdC9ydHNwL2dzdHJ0c3BzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDgwMjkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1LDIwMDY+IFdpbSBUYXltYW5zIDx3aW0gYXQgZmx1ZW5kbyBkb3QgY29tPgotICogICAgICAgICAgICAgICA8MjAwNj4gTHV0eiBNdWVsbGVyIDxsdXR6IGF0IHRvcGZyb3NlIGRvdCBkZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoKLSAqIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBTb3VyY2UgQ29kZSBpcyBsaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZS4KLSAqIFNlZSBmdXJ0aGVyIGV4cGxhbmF0aW9uIGF0dGFjaGVkIGluIExpY2Vuc2UgU3RhdGVtZW50IChkaXN0cmlidXRlZCBpbiB0aGUgZmlsZQotICogTElDRU5TRSkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KLSAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KLSAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCi0gKiBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KLSAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLSAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLSAqIFNPRlRXQVJFLgotICovCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1ydHNwc3JjCi0gKgotICogTWFrZXMgYSBjb25uZWN0aW9uIHRvIGFuIFJUU1Agc2VydmVyIGFuZCByZWFkIHRoZSBkYXRhLgotICogcnRzcHNyYyBzdHJpY3RseSBmb2xsb3dzIFJGQyAyMzI2IGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgKHlldCkgc3VwcG9ydAotICogUmVhbE1lZGlhL1F1aWNrdGltZS9NaWNyb3NvZnQgZXh0ZW5zaW9ucy4KLSAqCi0gKiBSVFNQIHN1cHBvcnRzIHRyYW5zcG9ydCBvdmVyIFRDUCBvciBVRFAgaW4gdW5pY2FzdCBvciBtdWx0aWNhc3QgbW9kZS4gQnkKLSAqIGRlZmF1bHQgcnRzcHNyYyB3aWxsIG5lZ290aWF0ZSBhIGNvbm5lY3Rpb24gaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLSAqIFVEUCB1bmljYXN0L1VEUCBtdWx0aWNhc3QvVENQLiBUaGUgb3JkZXIgY2Fubm90IGJlIGNoYW5nZWQgYnV0IHRoZSBhbGxvd2VkCi0gKiBwcm90b2NvbHMgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgI0dzdFJUU1BTcmM6cHJvdG9jb2xzIHByb3BlcnR5LgotICoKLSAqIHJ0c3BzcmMgY3VycmVudGx5IHVuZGVyc3RhbmRzIFNEUCBhcyB0aGUgZm9ybWF0IG9mIHRoZSBzZXNzaW9uIGRlc2NyaXB0aW9uLgotICogRm9yIGVhY2ggc3RyZWFtIGxpc3RlZCBpbiB0aGUgU0RQIGEgbmV3IHJ0cF9zdHJlYW1cJWQgcGFkIHdpbGwgYmUgY3JlYXRlZAotICogd2l0aCBjYXBzIGRlcml2ZWQgZnJvbSB0aGUgU0RQIG1lZGlhIGRlc2NyaXB0aW9uLiBUaGlzIGlzIGEgY2FwcyBvZiBtaW1lIHR5cGUKLSAqICJhcHBsaWNhdGlvbi94LXJ0cCIgdGhhdCBjYW4gYmUgY29ubmVjdGVkIHRvIGFueSBhdmFpbGFibGUgUlRQIGRlcGF5bG9hZGVyCi0gKiBlbGVtZW50LgotICoKLSAqIHJ0c3BzcmMgd2lsbCBpbnRlcm5hbGx5IGluc3RhbnRpYXRlIGFuIFJUUCBzZXNzaW9uIG1hbmFnZXIgZWxlbWVudAotICogdGhhdCB3aWxsIGhhbmRsZSB0aGUgUlRDUCBtZXNzYWdlcyB0byBhbmQgZnJvbSB0aGUgc2VydmVyLCBqaXR0ZXIgcmVtb3ZhbCwKLSAqIHBhY2tldCByZW9yZGVyaW5nIGFsb25nIHdpdGggcHJvdmlkaW5nIGEgY2xvY2sgZm9yIHRoZSBwaXBlbGluZS4KLSAqIFRoaXMgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgZ3N0cnRwYmluIGVsZW1lbnQuCi0gKgotICogcnRzcHNyYyBhY3RzIGxpa2UgYSBsaXZlIHNvdXJjZSBhbmQgd2lsbCB0aGVyZWZvcmUgb25seSBnZW5lcmF0ZSBkYXRhIGluIHRoZQotICogUExBWUlORyBzdGF0ZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgcnRzcHNyYyBsb2NhdGlvbj1ydHNwOi8vc29tZS5zZXJ2ZXIvdXJsICEgZmFrZXNpbmsKLSAqIF18IEVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYW4gUlRTUCBzZXJ2ZXIgYW5kIHNlbmQgdGhlIHJhdyBSVFAgcGFja2V0cyB0byBhCi0gKiBmYWtlc2luay4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi0jaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXQuaD4KLSNpbmNsdWRlIDxnc3Qvc2RwL2dzdHNkcG1lc3NhZ2UuaD4KLSNpbmNsdWRlIDxnc3Qvc2RwL2dzdG1pa2V5Lmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9ydHAuaD4KLQotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLQotI2luY2x1ZGUgImdzdHJ0c3BzcmMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAocnRzcHNyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAocnRzcHNyY19kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cHRlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzdHJlYW1fJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwOyBhcHBsaWNhdGlvbi94LXJkdCIpKTsKLQotLyogdGVtcGxhdGVzIHVzZWQgaW50ZXJuYWxseSAqLwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGFueXNyY3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgiaW50ZXJuYWxzcmNfJXUiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYW55c2lua3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgiaW50ZXJuYWxzaW5rXyV1IiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLWVudW0KLXsKLSAgU0lHTkFMX0hBTkRMRV9SRVFVRVNULAotICBTSUdOQUxfT05fU0RQLAotICBTSUdOQUxfU0VMRUNUX1NUUkVBTSwKLSAgU0lHTkFMX05FV19NQU5BR0VSLAotICBTSUdOQUxfUkVRVUVTVF9SVENQX0tFWSwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0gX0dzdFJ0c3BTcmNSdGNwU3luY01vZGUKLXsKLSAgUlRDUF9TWU5DX0FMV0FZUywKLSAgUlRDUF9TWU5DX0lOSVRJQUwsCi0gIFJUQ1BfU1lOQ19SVFAKLX07Ci0KLWVudW0gX0dzdFJ0c3BTcmNCdWZmZXJNb2RlCi17Ci0gIEJVRkZFUl9NT0RFX05PTkUsCi0gIEJVRkZFUl9NT0RFX1NMQVZFLAotICBCVUZGRVJfTU9ERV9CVUZGRVIsCi0gIEJVRkZFUl9NT0RFX0FVVE8sCi0gIEJVRkZFUl9NT0RFX1NZTkNFRAotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFNQX1NSQ19CVUZGRVJfTU9ERSAoZ3N0X3J0c3Bfc3JjX2J1ZmZlcl9tb2RlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9ydHNwX3NyY19idWZmZXJfbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIGJ1ZmZlcl9tb2RlX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBidWZmZXJfbW9kZXNbXSA9IHsKLSAgICB7QlVGRkVSX01PREVfTk9ORSwgIk9ubHkgdXNlIFJUUCB0aW1lc3RhbXBzIiwgIm5vbmUifSwKLSAgICB7QlVGRkVSX01PREVfU0xBVkUsICJTbGF2ZSByZWNlaXZlciB0byBzZW5kZXIgY2xvY2siLCAic2xhdmUifSwKLSAgICB7QlVGRkVSX01PREVfQlVGRkVSLCAiRG8gbG93L2hpZ2ggd2F0ZXJtYXJrIGJ1ZmZlcmluZyIsICJidWZmZXIifSwKLSAgICB7QlVGRkVSX01PREVfQVVUTywgIkNob29zZSBtb2RlIGRlcGVuZGluZyBvbiBzdHJlYW0gbGl2ZSIsICJhdXRvIn0sCi0gICAge0JVRkZFUl9NT0RFX1NZTkNFRCwgIlN5bmNocm9uaXplZCBzZW5kZXIgYW5kIHJlY2VpdmVyIGNsb2NrcyIsICJzeW5jZWQifSwKLSAgICB7MCwgTlVMTCwgTlVMTH0sCi0gIH07Ci0KLSAgaWYgKCFidWZmZXJfbW9kZV90eXBlKSB7Ci0gICAgYnVmZmVyX21vZGVfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RSVFNQU3JjQnVmZmVyTW9kZSIsIGJ1ZmZlcl9tb2Rlcyk7Ci0gIH0KLSAgcmV0dXJuIGJ1ZmZlcl9tb2RlX3R5cGU7Ci19Ci0KLWVudW0gX0dzdFJ0c3BTcmNOdHBUaW1lU291cmNlCi17Ci0gIE5UUF9USU1FX1NPVVJDRV9OVFAsCi0gIE5UUF9USU1FX1NPVVJDRV9VTklYLAotICBOVFBfVElNRV9TT1VSQ0VfUlVOTklOR19USU1FLAotICBOVFBfVElNRV9TT1VSQ0VfQ0xPQ0tfVElNRQotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9SVFNQX1NSQ19OVFBfVElNRV9TT1VSQ0UgKGdzdF9ydHNwX3NyY19udHBfdGltZV9zb3VyY2VfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3J0c3Bfc3JjX250cF90aW1lX3NvdXJjZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIG50cF90aW1lX3NvdXJjZV90eXBlID0gMDsKLSAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgbnRwX3RpbWVfc291cmNlX3ZhbHVlc1tdID0gewotICAgIHtOVFBfVElNRV9TT1VSQ0VfTlRQLCAiTlRQIHRpbWUgYmFzZWQgb24gcmVhbHRpbWUgY2xvY2siLCAibnRwIn0sCi0gICAge05UUF9USU1FX1NPVVJDRV9VTklYLCAiVU5JWCB0aW1lIGJhc2VkIG9uIHJlYWx0aW1lIGNsb2NrIiwgInVuaXgifSwKLSAgICB7TlRQX1RJTUVfU09VUkNFX1JVTk5JTkdfVElNRSwKLSAgICAgICAgICAiUnVubmluZyB0aW1lIGJhc2VkIG9uIHBpcGVsaW5lIGNsb2NrIiwKLSAgICAgICAgInJ1bm5pbmctdGltZSJ9LAotICAgIHtOVFBfVElNRV9TT1VSQ0VfQ0xPQ0tfVElNRSwgIlBpcGVsaW5lIGNsb2NrIHRpbWUiLCAiY2xvY2stdGltZSJ9LAotICAgIHswLCBOVUxMLCBOVUxMfSwKLSAgfTsKLQotICBpZiAoIW50cF90aW1lX3NvdXJjZV90eXBlKSB7Ci0gICAgbnRwX3RpbWVfc291cmNlX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0UlRTUFNyY050cFRpbWVTb3VyY2UiLAotICAgICAgICBudHBfdGltZV9zb3VyY2VfdmFsdWVzKTsKLSAgfQotICByZXR1cm4gbnRwX3RpbWVfc291cmNlX3R5cGU7Ci19Ci0KLSNkZWZpbmUgREVGQVVMVF9MT0NBVElPTiAgICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9QUk9UT0NPTFMgICAgICAgIEdTVF9SVFNQX0xPV0VSX1RSQU5TX1VEUCB8IEdTVF9SVFNQX0xPV0VSX1RSQU5TX1VEUF9NQ0FTVCB8IEdTVF9SVFNQX0xPV0VSX1RSQU5TX1RDUAotI2RlZmluZSBERUZBVUxUX0RFQlVHICAgICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9SRVRSWSAgICAgICAgICAgIDIwCi0jZGVmaW5lIERFRkFVTFRfVElNRU9VVCAgICAgICAgICA1MDAwMDAwCi0jZGVmaW5lIERFRkFVTFRfVURQX0JVRkZFUl9TSVpFICAweDgwMDAwCi0jZGVmaW5lIERFRkFVTFRfVENQX1RJTUVPVVQgICAgICAyMDAwMDAwMAotI2RlZmluZSBERUZBVUxUX0xBVEVOQ1lfTVMgICAgICAgMjAwMAotI2RlZmluZSBERUZBVUxUX0RST1BfT05fTEFURU5DWSAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9DT05ORUNUSU9OX1NQRUVEIDAKLSNkZWZpbmUgREVGQVVMVF9OQVRfTUVUSE9EICAgICAgIEdTVF9SVFNQX05BVF9EVU1NWQotI2RlZmluZSBERUZBVUxUX0RPX1JUQ1AgICAgICAgICAgVFJVRQotI2RlZmluZSBERUZBVUxUX0RPX1JUU1BfS0VFUF9BTElWRSAgICAgICBUUlVFCi0jZGVmaW5lIERFRkFVTFRfUFJPWFkgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfUlRQX0JMT0NLU0laRSAgICAwCi0jZGVmaW5lIERFRkFVTFRfVVNFUl9JRCAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfVVNFUl9QVyAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfQlVGRkVSX01PREUgICAgICBCVUZGRVJfTU9ERV9BVVRPCi0jZGVmaW5lIERFRkFVTFRfUE9SVF9SQU5HRSAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfU0hPUlRfSEVBREVSICAgICBGQUxTRQotI2RlZmluZSBERUZBVUxUX1BST0JBVElPTiAgICAgICAgMgotI2RlZmluZSBERUZBVUxUX1VEUF9SRUNPTk5FQ1QgICAgVFJVRQotI2RlZmluZSBERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSAgTlVMTAotI2RlZmluZSBERUZBVUxUX05UUF9TWU5DICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9VU0VfUElQRUxJTkVfQ0xPQ0sgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9UTFNfVkFMSURBVElPTl9GTEFHUyAgICAgR19UTFNfQ0VSVElGSUNBVEVfVkFMSURBVEVfQUxMCi0jZGVmaW5lIERFRkFVTFRfVExTX0RBVEFCQVNFICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfVExTX0lOVEVSQUNUSU9OICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfRE9fUkVUUkFOU01JU1NJT04gICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9OVFBfVElNRV9TT1VSQ0UgIE5UUF9USU1FX1NPVVJDRV9OVFAKLSNkZWZpbmUgREVGQVVMVF9VU0VSX0FHRU5UICAgICAgICJHU3RyZWFtZXIvIiBQQUNLQUdFX1ZFUlNJT04KLSNkZWZpbmUgREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGIDEwMDAKLSNkZWZpbmUgREVGQVVMVF9SRkM3MjczX1NZTkMgICAgICAgICBGQUxTRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9MT0NBVElPTiwKLSAgUFJPUF9QUk9UT0NPTFMsCi0gIFBST1BfREVCVUcsCi0gIFBST1BfUkVUUlksCi0gIFBST1BfVElNRU9VVCwKLSAgUFJPUF9UQ1BfVElNRU9VVCwKLSAgUFJPUF9MQVRFTkNZLAotICBQUk9QX0RST1BfT05fTEFURU5DWSwKLSAgUFJPUF9DT05ORUNUSU9OX1NQRUVELAotICBQUk9QX05BVF9NRVRIT0QsCi0gIFBST1BfRE9fUlRDUCwKLSAgUFJPUF9ET19SVFNQX0tFRVBfQUxJVkUsCi0gIFBST1BfUFJPWFksCi0gIFBST1BfUFJPWFlfSUQsCi0gIFBST1BfUFJPWFlfUFcsCi0gIFBST1BfUlRQX0JMT0NLU0laRSwKLSAgUFJPUF9VU0VSX0lELAotICBQUk9QX1VTRVJfUFcsCi0gIFBST1BfQlVGRkVSX01PREUsCi0gIFBST1BfUE9SVF9SQU5HRSwKLSAgUFJPUF9VRFBfQlVGRkVSX1NJWkUsCi0gIFBST1BfU0hPUlRfSEVBREVSLAotICBQUk9QX1BST0JBVElPTiwKLSAgUFJPUF9VRFBfUkVDT05ORUNULAotICBQUk9QX01VTFRJQ0FTVF9JRkFDRSwKLSAgUFJPUF9OVFBfU1lOQywKLSAgUFJPUF9VU0VfUElQRUxJTkVfQ0xPQ0ssCi0gIFBST1BfU0RFUywKLSAgUFJPUF9UTFNfVkFMSURBVElPTl9GTEFHUywKLSAgUFJPUF9UTFNfREFUQUJBU0UsCi0gIFBST1BfVExTX0lOVEVSQUNUSU9OLAotICBQUk9QX0RPX1JFVFJBTlNNSVNTSU9OLAotICBQUk9QX05UUF9USU1FX1NPVVJDRSwKLSAgUFJPUF9VU0VSX0FHRU5ULAotICBQUk9QX01BWF9SVENQX1JUUF9USU1FX0RJRkYsCi0gIFBST1BfUkZDNzI3M19TWU5DCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX1JUU1BfTkFUX01FVEhPRCAoZ3N0X3J0c3BfbmF0X21ldGhvZF9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3RfcnRzcF9uYXRfbWV0aG9kX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgcnRzcF9uYXRfbWV0aG9kX3R5cGUgPSAwOwotICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBydHNwX25hdF9tZXRob2RbXSA9IHsKLSAgICB7R1NUX1JUU1BfTkFUX05PTkUsICJOb25lIiwgIm5vbmUifSwKLSAgICB7R1NUX1JUU1BfTkFUX0RVTU1ZLCAiU2VuZCBEdW1teSBwYWNrZXRzIiwgImR1bW15In0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghcnRzcF9uYXRfbWV0aG9kX3R5cGUpIHsKLSAgICBydHNwX25hdF9tZXRob2RfdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RSVFNQTmF0TWV0aG9kIiwgcnRzcF9uYXRfbWV0aG9kKTsKLSAgfQotICByZXR1cm4gcnRzcF9uYXRfbWV0aG9kX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGdzdF9ydHNwc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0c3BzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3J0c3BzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgR3N0Q2xvY2sgKmdzdF9ydHNwc3JjX3Byb3ZpZGVfY2xvY2sgKEdzdEVsZW1lbnQgKiBlbGVtZW50KTsKLQotc3RhdGljIHZvaWQgZ3N0X3J0c3BzcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHNwc3JjX3NldF9wcm94eSAoR3N0UlRTUFNyYyAqIHJ0c3AsIGNvbnN0IGdjaGFyICogcHJveHkpOwotc3RhdGljIHZvaWQgZ3N0X3J0c3BzcmNfc2V0X3RjcF90aW1lb3V0IChHc3RSVFNQU3JjICogcnRzcHNyYywgZ3VpbnQ2NCB0aW1lb3V0KTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9ydHNwc3JjX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0c3BzcmNfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIHZvaWQgZ3N0X3J0c3BzcmNfaGFuZGxlX21lc3NhZ2UgKEdzdEJpbiAqIGJpbiwgR3N0TWVzc2FnZSAqIG1lc3NhZ2UpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3J0c3BzcmNfc2V0dXBfYXV0aCAoR3N0UlRTUFNyYyAqIHNyYywKLSAgICBHc3RSVFNQTWVzc2FnZSAqIHJlc3BvbnNlKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQgKEdzdFJUU1BTcmMgKiBzcmMsIGdpbnQgY21kLAotICAgIGdpbnQgbWFzayk7Ci1zdGF0aWMgR3N0UlRTUFJlc3VsdCBnc3RfcnRzcHNyY19zZW5kX2NiIChHc3RSVFNQRXh0ZW5zaW9uICogZXh0LAotICAgIEdzdFJUU1BNZXNzYWdlICogcmVxdWVzdCwgR3N0UlRTUE1lc3NhZ2UgKiByZXNwb25zZSwgR3N0UlRTUFNyYyAqIHNyYyk7Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0IGdzdF9ydHNwc3JjX29wZW4gKEdzdFJUU1BTcmMgKiBzcmMsIGdib29sZWFuIGFzeW5jKTsKLXN0YXRpYyBHc3RSVFNQUmVzdWx0IGdzdF9ydHNwc3JjX3BsYXkgKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50LAotICAgIGdib29sZWFuIGFzeW5jKTsKLXN0YXRpYyBHc3RSVFNQUmVzdWx0IGdzdF9ydHNwc3JjX3BhdXNlIChHc3RSVFNQU3JjICogc3JjLCBnYm9vbGVhbiBhc3luYyk7Ci1zdGF0aWMgR3N0UlRTUFJlc3VsdCBnc3RfcnRzcHNyY19jbG9zZSAoR3N0UlRTUFNyYyAqIHNyYywgZ2Jvb2xlYW4gYXN5bmMsCi0gICAgZ2Jvb2xlYW4gb25seV9jbG9zZSk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRzcHNyY191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsCi0gICAgY29uc3QgZ2NoYXIgKiB1cmksIEdFcnJvciAqKiBlcnJvcik7Ci1zdGF0aWMgZ2NoYXIgKmdzdF9ydHNwc3JjX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRzcHNyY19hY3RpdmF0ZV9zdHJlYW1zIChHc3RSVFNQU3JjICogc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRzcHNyY19sb29wIChHc3RSVFNQU3JjICogc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRzcHNyY19zdHJlYW1fcHVzaF9ldmVudCAoR3N0UlRTUFNyYyAqIHNyYywKLSAgICBHc3RSVFNQU3RyZWFtICogc3RyZWFtLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfcnRzcHNyY19wdXNoX2V2ZW50IChHc3RSVFNQU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyB2b2lkIGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fZmx1c2ggKEdzdFJUU1BTcmMgKiBzcmMsIGdib29sZWFuIGZsdXNoKTsKLXN0YXRpYyBHc3RSVFNQUmVzdWx0IGdzdF9ydHNwX2Nvbm5pbmZvX2Nsb3NlIChHc3RSVFNQU3JjICogc3JjLAotICAgIEdzdFJUU1BDb25uSW5mbyAqIGluZm8sIGdib29sZWFuIGZyZWUpOwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDggcHQ7Ci0gIEdzdENhcHMgKmNhcHM7Ci19IFB0TWFwSXRlbTsKLQotLyogY29tbWFuZHMgd2Ugc2VuZCB0byBvdXQgbG9vcCB0byBub3RpZnkgaXQgb2YgZXZlbnRzICovCi0jZGVmaW5lIENNRF9PUEVOICAgICAgICgxIDw8IDApCi0jZGVmaW5lIENNRF9QTEFZICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIENNRF9QQVVTRSAgICAgICgxIDw8IDIpCi0jZGVmaW5lIENNRF9DTE9TRSAgICAgICgxIDw8IDMpCi0jZGVmaW5lIENNRF9XQUlUICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIENNRF9SRUNPTk5FQ1QgICgxIDw8IDUpCi0jZGVmaW5lIENNRF9MT09QICAgICAgICgxIDw8IDYpCi0KLS8qIG1hc2sgZm9yIGFsbCBjb21tYW5kcyAqLwotI2RlZmluZSBDTURfQUxMICAgICAgICAgKChDTURfTE9PUCA8PCAxKSAtIDEpCi0KLSNkZWZpbmUgR1NUX0VMRU1FTlRfUFJPR1JFU1MoZWwsIHR5cGUsIGNvZGUsIHRleHQpICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdjaGFyICpfX3R4dCA9IF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgdGV4dDsgICAgICAgIFwKLSAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChlbCksICAgICAgXAotICAgICAgZ3N0X21lc3NhZ2VfbmV3X3Byb2dyZXNzIChHU1RfT0JKRUNUX0NBU1QgKGVsKSwgICBcCi0gICAgICAgICAgR1NUX1BST0dSRVNTX1RZUEVfICMjdHlwZSwgY29kZSwgX190eHQpKTsgICAgIFwKLSAgZ19mcmVlIChfX3R4dCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLXN0YXRpYyBndWludCBnc3RfcnRzcHNyY19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi0jZGVmaW5lIGdzdF9ydHNwc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RSVFNQU3JjLCBnc3RfcnRzcHNyYywgR1NUX1RZUEVfQklOLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIGdzdF9ydHNwc3JjX3VyaV9oYW5kbGVyX2luaXQpKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCi1jbWRfdG9fc3RyaW5nIChndWludCBjbWQpCi17Ci0gIHN3aXRjaCAoY21kKSB7Ci0gICAgY2FzZSBDTURfT1BFTjoKLSAgICAgIHJldHVybiAiT1BFTiI7Ci0gICAgY2FzZSBDTURfUExBWToKLSAgICAgIHJldHVybiAiUExBWSI7Ci0gICAgY2FzZSBDTURfUEFVU0U6Ci0gICAgICByZXR1cm4gIlBBVVNFIjsKLSAgICBjYXNlIENNRF9DTE9TRToKLSAgICAgIHJldHVybiAiQ0xPU0UiOwotICAgIGNhc2UgQ01EX1dBSVQ6Ci0gICAgICByZXR1cm4gIldBSVQiOwotICAgIGNhc2UgQ01EX1JFQ09OTkVDVDoKLSAgICAgIHJldHVybiAiUkVDT05ORUNUIjsKLSAgICBjYXNlIENNRF9MT09QOgotICAgICAgcmV0dXJuICJMT09QIjsKLSAgfQotCi0gIHJldHVybiAidW5rbm93biI7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGdib29sZWFuCi1kZWZhdWx0X3NlbGVjdF9zdHJlYW0gKEdzdFJUU1BTcmMgKiBzcmMsIGd1aW50IGlkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZGVmYXVsdCBoYW5kbGVyIik7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXNlbGVjdF9zdHJlYW1fYWNjdW0gKEdTaWduYWxJbnZvY2F0aW9uSGludCAqIGloaW50LAotICAgIEdWYWx1ZSAqIHJldHVybl9hY2N1LCBjb25zdCBHVmFsdWUgKiBoYW5kbGVyX3JldHVybiwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ2Jvb2xlYW4gbXlib29sZWFuOwotCi0gIG15Ym9vbGVhbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKGhhbmRsZXJfcmV0dXJuKTsKLSAgR1NUX0RFQlVHICgiYWNjdW0gJWQiLCBteWJvb2xlYW4pOwotICBnX3ZhbHVlX3NldF9ib29sZWFuIChyZXR1cm5fYWNjdSwgbXlib29sZWFuKTsKLQotICAvKiBzdG9wIGVtaXNzaW9uIGlmIEZBTFNFICovCi0gIHJldHVybiBteWJvb2xlYW47Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19jbGFzc19pbml0IChHc3RSVFNQU3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJpbkNsYXNzICpnc3RiaW5fY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiaW5fY2xhc3MgPSAoR3N0QmluQ2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHJ0c3BzcmNfZGVidWcsICJydHNwc3JjIiwgMCwgIlJUU1Agc3JjIik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3J0c3BzcmNfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfcnRzcHNyY19nZXRfcHJvcGVydHk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfcnRzcHNyY19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xPQ0FUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImxvY2F0aW9uIiwgIlJUU1AgTG9jYXRpb24iLAotICAgICAgICAgICJMb2NhdGlvbiBvZiB0aGUgUlRTUCB1cmwgdG8gcmVhZCIsCi0gICAgICAgICAgREVGQVVMVF9MT0NBVElPTiwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QUk9UT0NPTFMsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxhZ3MgKCJwcm90b2NvbHMiLCAiUHJvdG9jb2xzIiwKLSAgICAgICAgICAiQWxsb3dlZCBsb3dlciB0cmFuc3BvcnQgcHJvdG9jb2xzIiwgR1NUX1RZUEVfUlRTUF9MT1dFUl9UUkFOUywKLSAgICAgICAgICBERUZBVUxUX1BST1RPQ09MUywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERUJVRywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZGVidWciLCAiRGVidWciLAotICAgICAgICAgICJEdW1wIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2VzIHRvIHN0ZG91dCIsCi0gICAgICAgICAgREVGQVVMVF9ERUJVRywgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRVRSWSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgicmV0cnkiLCAiUmV0cnkiLAotICAgICAgICAgICJNYXggbnVtYmVyIG9mIHJldHJpZXMgd2hlbiBhbGxvY2F0aW5nIFJUUCBwb3J0cy4iLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDE2LCBERUZBVUxUX1JFVFJZLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVElNRU9VVCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJ0aW1lb3V0IiwgIlRpbWVvdXQiLAotICAgICAgICAgICJSZXRyeSBUQ1AgdHJhbnNwb3J0IGFmdGVyIFVEUCB0aW1lb3V0IG1pY3Jvc2Vjb25kcyAoMCA9IGRpc2FibGVkKSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5UNjQsIERFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1RDUF9USU1FT1VULAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoInRjcC10aW1lb3V0IiwgIlRDUCBUaW1lb3V0IiwKLSAgICAgICAgICAiRmFpbCBhZnRlciB0aW1lb3V0IG1pY3Jvc2Vjb25kcyBvbiBUQ1AgY29ubmVjdGlvbnMgKDAgPSBkaXNhYmxlZCkiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0LCBERUZBVUxUX1RDUF9USU1FT1VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTEFURU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgibGF0ZW5jeSIsICJCdWZmZXIgbGF0ZW5jeSBpbiBtcyIsCi0gICAgICAgICAgIkFtb3VudCBvZiBtcyB0byBidWZmZXIiLCAwLCBHX01BWFVJTlQsIERFRkFVTFRfTEFURU5DWV9NUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RST1BfT05fTEFURU5DWSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZHJvcC1vbi1sYXRlbmN5IiwKLSAgICAgICAgICAiRHJvcCBidWZmZXJzIHdoZW4gbWF4aW11bSBsYXRlbmN5IGlzIHJlYWNoZWQiLAotICAgICAgICAgICJUZWxscyB0aGUgaml0dGVyYnVmZmVyIHRvIG5ldmVyIGV4Y2VlZCB0aGUgZ2l2ZW4gbGF0ZW5jeSBpbiBzaXplIiwKLSAgICAgICAgICBERUZBVUxUX0RST1BfT05fTEFURU5DWSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DT05ORUNUSU9OX1NQRUVELAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImNvbm5lY3Rpb24tc3BlZWQiLCAiQ29ubmVjdGlvbiBTcGVlZCIsCi0gICAgICAgICAgIk5ldHdvcmsgY29ubmVjdGlvbiBzcGVlZCBpbiBrYnBzICgwID0gdW5rbm93bikiLAotICAgICAgICAgIDAsIEdfTUFYVUlOVDY0IC8gMTAwMCwgREVGQVVMVF9DT05ORUNUSU9OX1NQRUVELAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTkFUX01FVEhPRCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibmF0LW1ldGhvZCIsICJOQVQgTWV0aG9kIiwKLSAgICAgICAgICAiTWV0aG9kIHRvIHVzZSBmb3IgdHJhdmVyc2luZyBmaXJld2FsbHMgYW5kIE5BVCIsCi0gICAgICAgICAgR1NUX1RZUEVfUlRTUF9OQVRfTUVUSE9ELCBERUZBVUxUX05BVF9NRVRIT0QsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJUU1BTcmM6ZG8tcnRjcDoKLSAgICoKLSAgICogRW5hYmxlIFJUQ1Agc3VwcG9ydC4gU29tZSBvbGQgc2VydmVyIGRvbid0IGxpa2UgUlRDUCBhbmQgdGhlbiB0aGlzIHByb3BlcnR5Ci0gICAqIG5lZWRzIHRvIGJlIHNldCB0byBGQUxTRS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRE9fUlRDUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZG8tcnRjcCIsICJEbyBSVENQIiwKLSAgICAgICAgICAiU2VuZCBSVENQIHBhY2tldHMsIGRpc2FibGUgZm9yIG9sZCBpbmNvbXBhdGlibGUgc2VydmVyLiIsCi0gICAgICAgICAgREVGQVVMVF9ET19SVENQLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzpkby1ydHNwLWtlZXAtYWxpdmU6Ci0gICAqCi0gICAqIEVuYWJsZSBSVFNQIGtlZXAgYWxpdmUgc3VwcG9ydC4gU29tZSBvbGQgc2VydmVyIGRvbid0IGxpa2UgUlRTUAotICAgKiBrZWVwIGFsaXZlIGFuZCB0aGVuIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgc2V0IHRvIEZBTFNFLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ET19SVFNQX0tFRVBfQUxJVkUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImRvLXJ0c3Ata2VlcC1hbGl2ZSIsICJEbyBSVFNQIEtlZXAgQWxpdmUiLAotICAgICAgICAgICJTZW5kIFJUU1Aga2VlcCBhbGl2ZSBwYWNrZXRzLCBkaXNhYmxlIGZvciBvbGQgaW5jb21wYXRpYmxlIHNlcnZlci4iLAotICAgICAgICAgIERFRkFVTFRfRE9fUlRTUF9LRUVQX0FMSVZFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFNQU3JjOnByb3h5OgotICAgKgotICAgKiBTZXQgdGhlIHByb3h5IHBhcmFtZXRlcnMuIFRoaXMgaGFzIHRvIGJlIGEgc3RyaW5nIG9mIHRoZSBmb3JtYXQKLSAgICogW2h0dHA6Ly9dW3VzZXI6cGFzc3dkQF1ob3N0Wzpwb3J0XS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUFJPWFksCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgicHJveHkiLCAiUHJveHkiLAotICAgICAgICAgICJQcm94eSBzZXR0aW5ncyBmb3IgSFRUUCB0dW5uZWxpbmcuIEZvcm1hdDogW2h0dHA6Ly9dW3VzZXI6cGFzc3dkQF1ob3N0Wzpwb3J0XSIsCi0gICAgICAgICAgREVGQVVMVF9QUk9YWSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSVFNQU3JjOnByb3h5LWlkOgotICAgKgotICAgKiBTZXRzIHRoZSBwcm94eSBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24uIElmIHRoZSBVUkkgc2V0IHZpYSB0aGUKLSAgICogInByb3h5IiBwcm9wZXJ0eSBjb250YWlucyBhIHVzZXItaWQgYWxyZWFkeSwgdGhhdCB3aWxsIHRha2UgcHJlY2VkZW5jZS4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QUk9YWV9JRCwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwcm94eS1pZCIsICJwcm94eS1pZCIsCi0gICAgICAgICAgIkhUVFAgcHJveHkgVVJJIHVzZXIgaWQgZm9yIGF1dGhlbnRpY2F0aW9uIiwgIiIsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RSVFNQU3JjOnByb3h5LXB3OgotICAgKgotICAgKiBTZXRzIHRoZSBwcm94eSBVUkkgcGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uLiBJZiB0aGUgVVJJIHNldCB2aWEgdGhlCi0gICAqICJwcm94eSIgcHJvcGVydHkgY29udGFpbnMgYSBwYXNzd29yZCBhbHJlYWR5LCB0aGF0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BST1hZX1BXLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInByb3h5LXB3IiwgInByb3h5LXB3IiwKLSAgICAgICAgICAiSFRUUCBwcm94eSBVUkkgdXNlciBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24iLCAiIiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzpydHAtYmxvY2tzaXplOgotICAgKgotICAgKiBSVFAgcGFja2FnZSBzaXplIHRvIHN1Z2dlc3QgdG8gc2VydmVyLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SVFBfQkxPQ0tTSVpFLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJydHAtYmxvY2tzaXplIiwgIlJUUCBCbG9ja3NpemUiLAotICAgICAgICAgICJSVFAgcGFja2FnZSBzaXplIHRvIHN1Z2dlc3QgdG8gc2VydmVyICgwID0gZGlzYWJsZWQpIiwKLSAgICAgICAgICAwLCA2NTUzNiwgREVGQVVMVF9SVFBfQkxPQ0tTSVpFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX1VTRVJfSUQsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgidXNlci1pZCIsICJ1c2VyLWlkIiwKLSAgICAgICAgICAiUlRTUCBsb2NhdGlvbiBVUkkgdXNlciBpZCBmb3IgYXV0aGVudGljYXRpb24iLCBERUZBVUxUX1VTRVJfSUQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVNFUl9QVywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJ1c2VyLXB3IiwgInVzZXItcHciLAotICAgICAgICAgICJSVFNQIGxvY2F0aW9uIFVSSSB1c2VyIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbiIsIERFRkFVTFRfVVNFUl9QVywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzpidWZmZXItbW9kZToKLSAgICoKLSAgICogQ29udHJvbCB0aGUgYnVmZmVyaW5nIGFuZCB0aW1lc3RhbXBpbmcgbW9kZSB1c2VkIGJ5IHRoZSBqaXR0ZXJidWZmZXIuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JVRkZFUl9NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJidWZmZXItbW9kZSIsICJCdWZmZXIgTW9kZSIsCi0gICAgICAgICAgIkNvbnRyb2wgdGhlIGJ1ZmZlcmluZyBhbGdvcml0aG0gaW4gdXNlIiwKLSAgICAgICAgICBHU1RfVFlQRV9SVFNQX1NSQ19CVUZGRVJfTU9ERSwgREVGQVVMVF9CVUZGRVJfTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzpwb3J0LXJhbmdlOgotICAgKgotICAgKiBDb25maWd1cmUgdGhlIGNsaWVudCBwb3J0IG51bWJlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byByZWNpZXZlIFJUUCBhbmQKLSAgICogUlRDUC4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUE9SVF9SQU5HRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwb3J0LXJhbmdlIiwgIlBvcnQgcmFuZ2UiLAotICAgICAgICAgICJDbGllbnQgcG9ydCByYW5nZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlY2VpdmUgUlRQIGFuZCBSVENQIGRhdGEsICIKLSAgICAgICAgICAiZWcuIDMwMDAtMzAwNSAoTlVMTCA9IG5vIHJlc3RyaWN0aW9ucykiLCBERUZBVUxUX1BPUlRfUkFOR0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJUU1BTcmM6dWRwLWJ1ZmZlci1zaXplOgotICAgKgotICAgKiBTaXplIG9mIHRoZSBrZXJuZWwgVURQIHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9VRFBfQlVGRkVSX1NJWkUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgidWRwLWJ1ZmZlci1zaXplIiwgIlVEUCBCdWZmZXIgU2l6ZSIsCi0gICAgICAgICAgIlNpemUgb2YgdGhlIGtlcm5lbCBVRFAgcmVjZWl2ZSBidWZmZXIgaW4gYnl0ZXMsIDA9ZGVmYXVsdCIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIERFRkFVTFRfVURQX0JVRkZFUl9TSVpFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFNQU3JjOnNob3J0LWhlYWRlcjoKLSAgICoKLSAgICogT25seSBzZW5kIHRoZSBiYXNpYyBSVFNQIGhlYWRlcnMgZm9yIGJyb2tlbiBlbmNvZGVycy4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0hPUlRfSEVBREVSLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJzaG9ydC1oZWFkZXIiLCAiU2hvcnQgSGVhZGVyIiwKLSAgICAgICAgICAiT25seSBzZW5kIHRoZSBiYXNpYyBSVFNQIGhlYWRlcnMgZm9yIGJyb2tlbiBlbmNvZGVycyIsCi0gICAgICAgICAgREVGQVVMVF9TSE9SVF9IRUFERVIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUFJPQkFUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJwcm9iYXRpb24iLCAiTnVtYmVyIG9mIHByb2JhdGlvbnMiLAotICAgICAgICAgICJDb25zZWN1dGl2ZSBwYWNrZXQgc2VxdWVuY2UgbnVtYmVycyB0byBhY2NlcHQgdGhlIHNvdXJjZSIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCBERUZBVUxUX1BST0JBVElPTiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VEUF9SRUNPTk5FQ1QsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInVkcC1yZWNvbm5lY3QiLCAiUmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIiLAotICAgICAgICAgICJSZWNvbm5lY3QgdG8gdGhlIHNlcnZlciBpZiBSVFNQIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHdoZW4gZG9pbmcgVURQIiwKLSAgICAgICAgICBERUZBVUxUX1VEUF9SRUNPTk5FQ1QsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTVVMVElDQVNUX0lGQUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoIm11bHRpY2FzdC1pZmFjZSIsICJNdWx0aWNhc3QgSW50ZXJmYWNlIiwKLSAgICAgICAgICAiVGhlIG5ldHdvcmsgaW50ZXJmYWNlIG9uIHdoaWNoIHRvIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cCIsCi0gICAgICAgICAgREVGQVVMVF9NVUxUSUNBU1RfSUZBQ0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTlRQX1NZTkMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm50cC1zeW5jIiwgIlN5bmMgb24gTlRQIGNsb2NrIiwKLSAgICAgICAgICAiU3luY2hyb25pemUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgTlRQIGNsb2NrIiwgREVGQVVMVF9OVFBfU1lOQywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRV9QSVBFTElORV9DTE9DSywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgidXNlLXBpcGVsaW5lLWNsb2NrIiwgIlVzZSBwaXBlbGluZSBjbG9jayIsCi0gICAgICAgICAgIlVzZSB0aGUgcGlwZWxpbmUgcnVubmluZy10aW1lIHRvIHNldCB0aGUgTlRQIHRpbWUgaW4gdGhlIFJUQ1AgU1IgbWVzc2FnZXMiCi0gICAgICAgICAgIihERVBSRUNBVEVEOiBVc2UgbnRwLXRpbWUtc291cmNlIHByb3BlcnR5KSIsCi0gICAgICAgICAgREVGQVVMVF9VU0VfUElQRUxJTkVfQ0xPQ0ssCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9ERVBSRUNBVEVEKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TREVTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgic2RlcyIsICJTREVTIiwKLSAgICAgICAgICAiVGhlIFNERVMgaXRlbXMgb2YgdGhpcyBzZXNzaW9uIiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFNQU3JjOjp0bHMtdmFsaWRhdGlvbi1mbGFnczoKLSAgICoKLSAgICogVExTIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZmxhZ3MgdXNlZCB0byB2YWxpZGF0ZSBzZXJ2ZXIKLSAgICogY2VydGlmaWNhdGUuCi0gICAqCi0gICAqIFNpbmNlOiAxLjIuMQotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UTFNfVkFMSURBVElPTl9GTEFHUywKLSAgICAgIGdfcGFyYW1fc3BlY19mbGFncyAoInRscy12YWxpZGF0aW9uLWZsYWdzIiwgIlRMUyB2YWxpZGF0aW9uIGZsYWdzIiwKLSAgICAgICAgICAiVExTIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZmxhZ3MgdXNlZCB0byB2YWxpZGF0ZSB0aGUgc2VydmVyIGNlcnRpZmljYXRlIiwKLSAgICAgICAgICBHX1RZUEVfVExTX0NFUlRJRklDQVRFX0ZMQUdTLCBERUZBVUxUX1RMU19WQUxJREFUSU9OX0ZMQUdTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFNQU3JjOjp0bHMtZGF0YWJhc2U6Ci0gICAqCi0gICAqIFRMUyBkYXRhYmFzZSB3aXRoIGFuY2hvciBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB1c2VkIHRvIHZhbGlkYXRlCi0gICAqIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuCi0gICAqCi0gICAqIFNpbmNlOiAxLjQKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVExTX0RBVEFCQVNFLAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInRscy1kYXRhYmFzZSIsICJUTFMgZGF0YWJhc2UiLAotICAgICAgICAgICJUTFMgZGF0YWJhc2Ugd2l0aCBhbmNob3IgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgdXNlZCB0byB2YWxpZGF0ZSB0aGUgc2VydmVyIGNlcnRpZmljYXRlIiwKLSAgICAgICAgICBHX1RZUEVfVExTX0RBVEFCQVNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzo6dGxzLWludGVyYWN0aW9uOgotICAgKgotICAgKiBBICNHVGxzSW50ZXJhY3Rpb24gb2JqZWN0IHRvIGJlIHVzZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBvciBjZXJ0aWZpY2F0ZQotICAgKiBkYXRhYmFzZSBuZWVkIHRvIGludGVyYWN0IHdpdGggdGhlIHVzZXIuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByb21wdCB0aGUKLSAgICogdXNlciBmb3IgcGFzc3dvcmRzIHdoZXJlIG5lY2Vzc2FyeS4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UTFNfSU5URVJBQ1RJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgidGxzLWludGVyYWN0aW9uIiwgIlRMUyBpbnRlcmFjdGlvbiIsCi0gICAgICAgICAgIkEgR1Rsc0ludGVyYWN0aW9uIG9iamVjdCB0byBwcm9tdCB0aGUgdXNlciBmb3IgcGFzc3dvcmQgb3IgY2VydGlmaWNhdGUiLAotICAgICAgICAgIEdfVFlQRV9UTFNfSU5URVJBQ1RJT04sIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFNQU3JjOjpkby1yZXRyYW5zbWlzc2lvbjoKLSAgICoKLSAgICogQXR0ZW1wdCB0byBhc2sgdGhlIHNlcnZlciB0byByZXRyYW5zbWl0IGxvc3QgcGFja2V0cyBhY2NvcmRpbmcgdG8gUkZDNDU4OC4KLSAgICoKLSAgICogTm90ZTogY3VycmVudGx5IG9ubHkgd29ya3Mgd2l0aCBTU1JDLW11bHRpcGxleGVkIHJldHJhbnNtaXNzaW9uIHN0cmVhbXMKLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ET19SRVRSQU5TTUlTU0lPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiZG8tcmV0cmFuc21pc3Npb24iLCAiUmV0cmFuc21pc3Npb24iLAotICAgICAgICAgICJBc2sgdGhlIHNlcnZlciB0byByZXRyYW5zbWl0IGxvc3QgcGFja2V0cyIsCi0gICAgICAgICAgREVGQVVMVF9ET19SRVRSQU5TTUlTU0lPTiwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzo6bnRwLXRpbWUtc291cmNlOgotICAgKgotICAgKiBhbGxvd3MgdG8gc2VsZWN0IHRoZSB0aW1lIHNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkCi0gICAqIGZvciB0aGUgTlRQIHRpbWUgaW4gUlRDUCBwYWNrZXRzCi0gICAqCi0gICAqIFNpbmNlOiAxLjYKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTlRQX1RJTUVfU09VUkNFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJudHAtdGltZS1zb3VyY2UiLCAiTlRQIFRpbWUgU291cmNlIiwKLSAgICAgICAgICAiTlRQIHRpbWUgc291cmNlIGZvciBSVENQIHBhY2tldHMiLAotICAgICAgICAgIEdTVF9UWVBFX1JUU1BfU1JDX05UUF9USU1FX1NPVVJDRSwgREVGQVVMVF9OVFBfVElNRV9TT1VSQ0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFJUU1BTcmM6OnVzZXItYWdlbnQ6Ci0gICAqCi0gICAqIFRoZSBzdHJpbmcgdG8gc2V0IGluIHRoZSBVc2VyLUFnZW50IGhlYWRlci4KLSAgICoKLSAgICogU2luY2U6IDEuNgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9VU0VSX0FHRU5ULAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoInVzZXItYWdlbnQiLCAiVXNlciBBZ2VudCIsCi0gICAgICAgICAgIlRoZSBVc2VyLUFnZW50IHN0cmluZyB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIiLAotICAgICAgICAgIERFRkFVTFRfVVNFUl9BR0VOVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm1heC1ydGNwLXJ0cC10aW1lLWRpZmYiLCAiTWF4IFJUQ1AgUlRQIFRpbWUgRGlmZiIsCi0gICAgICAgICAgIk1heGltdW0gYW1vdW50IG9mIHRpbWUgaW4gbXMgdGhhdCB0aGUgUlRQIHRpbWUgaW4gUlRDUCBTUnMgIgotICAgICAgICAgICJpcyBhbGxvd2VkIHRvIGJlIGFoZWFkICgtMSBkaXNhYmxlZCkiLCAtMSwgR19NQVhJTlQsCi0gICAgICAgICAgREVGQVVMVF9NQVhfUlRDUF9SVFBfVElNRV9ESUZGLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkZDNzI3M19TWU5DLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJyZmM3MjczLXN5bmMiLCAiU3luYyBvbiBSRkM3MjczIGNsb2NrIiwKLSAgICAgICAgICAiU3luY2hyb25pemUgcmVjZWl2ZWQgc3RyZWFtcyB0byB0aGUgUkZDNzI3MyBjbG9jayAiCi0gICAgICAgICAgIihyZXF1aXJlcyBjbG9jayBhbmQgb2Zmc2V0IHRvIGJlIHByb3ZpZGVkKSIsIERFRkFVTFRfUkZDNzI3M19TWU5DLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RSVFNQU3JjOjpoYW5kbGUtcmVxdWVzdDoKLSAgICogQHJ0c3BzcmM6IGEgI0dzdFJUU1BTcmMKLSAgICogQHJlcXVlc3Q6IGEgI0dzdFJUU1BNZXNzYWdlCi0gICAqIEByZXNwb25zZTogYSAjR3N0UlRTUE1lc3NhZ2UKLSAgICoKLSAgICogSGFuZGxlIGEgc2VydmVyIHJlcXVlc3QgaW4gQHJlcXVlc3QgYW5kIHByZXBhcmUgQHJlc3BvbnNlLgotICAgKgotICAgKiBUaGlzIHNpZ25hbCBpcyBjYWxsZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCwgeW91IHNob3VsZCB0aGVyZWZvcmUgbm90Ci0gICAqIGRvIGFueSBzdGF0ZSBjaGFuZ2VzIG9uIEBydHNwc3JjIGJlY2F1c2UgdGhpcyBtaWdodCBkZWFkbG9jay4gSWYgeW91IHdhbnQKLSAgICogdG8gbW9kaWZ5IHRoZSBzdGF0ZSBhcyBhIHJlc3VsdCBvZiB0aGlzIHNpZ25hbCwgcG9zdCBhCi0gICAqICNHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFIG1lc3NhZ2Ugb24gdGhlIGJ1cyBvciBzaWduYWwgdGhlIG1haW4gdGhyZWFkCi0gICAqIGluIHNvbWUgb3RoZXIgd2F5LgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnc3RfcnRzcHNyY19zaWduYWxzW1NJR05BTF9IQU5ETEVfUkVRVUVTVF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiaGFuZGxlLXJlcXVlc3QiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLCAwLAotICAgICAgMCwgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLAotICAgICAgR19UWVBFX1BPSU5URVIsIEdfVFlQRV9QT0lOVEVSKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzo6b24tc2RwOgotICAgKiBAcnRzcHNyYzogYSAjR3N0UlRTUFNyYwotICAgKiBAc2RwOiBhICNHc3RTRFBNZXNzYWdlCi0gICAqCi0gICAqIEVtaXRlZCB3aGVuIHRoZSBjbGllbnQgaGFzIHJldHJpZXZlZCB0aGUgU0RQIGFuZCBiZWZvcmUgaXQgY29uZmlndXJlcyB0aGUKLSAgICogc3RyZWFtcyBpbiB0aGUgU0RQLiBAc2RwIGNhbiBiZSBpbnNwZWN0ZWQgYW5kIG1vZGlmaWVkLgotICAgKgotICAgKiBUaGlzIHNpZ25hbCBpcyBjYWxsZWQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZCwgeW91IHNob3VsZCB0aGVyZWZvcmUgbm90Ci0gICAqIGRvIGFueSBzdGF0ZSBjaGFuZ2VzIG9uIEBydHNwc3JjIGJlY2F1c2UgdGhpcyBtaWdodCBkZWFkbG9jay4gSWYgeW91IHdhbnQKLSAgICogdG8gbW9kaWZ5IHRoZSBzdGF0ZSBhcyBhIHJlc3VsdCBvZiB0aGlzIHNpZ25hbCwgcG9zdCBhCi0gICAqICNHU1RfTUVTU0FHRV9SRVFVRVNUX1NUQVRFIG1lc3NhZ2Ugb24gdGhlIGJ1cyBvciBzaWduYWwgdGhlIG1haW4gdGhyZWFkCi0gICAqIGluIHNvbWUgb3RoZXIgd2F5LgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnc3RfcnRzcHNyY19zaWduYWxzW1NJR05BTF9PTl9TRFBdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoIm9uLXNkcCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksIDAsCi0gICAgICAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDEsCi0gICAgICBHU1RfVFlQRV9TRFBfTUVTU0FHRSB8IEdfU0lHTkFMX1RZUEVfU1RBVElDX1NDT1BFKTsKLQotICAvKioKLSAgICogR3N0UlRTUFNyYzo6c2VsZWN0LXN0cmVhbToKLSAgICogQHJ0c3BzcmM6IGEgI0dzdFJUU1BTcmMKLSAgICogQG51bTogdGhlIHN0cmVhbSBudW1iZXIKLSAgICogQGNhcHM6IHRoZSBzdHJlYW0gY2FwcwotICAgKgotICAgKiBFbWl0ZWQgYmVmb3JlIHRoZSBjbGllbnQgZGVjaWRlcyB0byBjb25maWd1cmUgdGhlIHN0cmVhbSBAbnVtIHdpdGgKLSAgICogQGNhcHMuCi0gICAqCi0gICAqIFJldHVybnM6ICVUUlVFIHdoZW4gdGhlIHN0cmVhbSBzaG91bGQgYmUgc2VsZWN0ZWQsICVGQUxTRSB3aGVuIHRoZSBzdHJlYW0KLSAgICogaXMgdG8gYmUgaWdub3JlZC4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ3N0X3J0c3BzcmNfc2lnbmFsc1tTSUdOQUxfU0VMRUNUX1NUUkVBTV0gPQotICAgICAgZ19zaWduYWxfbmV3X2NsYXNzX2hhbmRsZXIgKCJzZWxlY3Qtc3RyZWFtIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9GSVJTVCB8IEdfU0lHTkFMX1JVTl9DTEVBTlVQLAotICAgICAgKEdDYWxsYmFjaykgZGVmYXVsdF9zZWxlY3Rfc3RyZWFtLCBzZWxlY3Rfc3RyZWFtX2FjY3VtLCBOVUxMLAotICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9CT09MRUFOLCAyLCBHX1RZUEVfVUlOVCwKLSAgICAgIEdTVF9UWVBFX0NBUFMpOwotICAvKioKLSAgICogR3N0UlRTUFNyYzo6bmV3LW1hbmFnZXI6Ci0gICAqIEBydHNwc3JjOiBhICNHc3RSVFNQU3JjCi0gICAqIEBtYW5hZ2VyOiBhICNHc3RFbGVtZW50Ci0gICAqCi0gICAqIEVtaXRlZCBhZnRlciBhIG5ldyBtYW5hZ2VyIChsaWtlIHJ0cGJpbikgd2FzIGNyZWF0ZWQgYW5kIHRoZSBkZWZhdWx0Ci0gICAqIHByb3BlcnRpZXMgd2VyZSBjb25maWd1cmVkLgotICAgKgotICAgKiBTaW5jZTogMS40Ci0gICAqLwotICBnc3RfcnRzcHNyY19zaWduYWxzW1NJR05BTF9ORVdfTUFOQUdFUl0gPQotICAgICAgZ19zaWduYWxfbmV3X2NsYXNzX2hhbmRsZXIgKCJuZXctbWFuYWdlciIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fRklSU1QgfCBHX1NJR05BTF9SVU5fQ0xFQU5VUCwgMCwgTlVMTCwgTlVMTCwKLSAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHX1RZUEVfTk9ORSwgMSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLSAgLyoqCi0gICAqIEdzdFJUU1BTcmM6OnJlcXVlc3QtcnRjcC1rZXk6Ci0gICAqIEBydHNwc3JjOiBhICNHc3RSVFNQU3JjCi0gICAqIEBudW06IHRoZSBzdHJlYW0gbnVtYmVyCi0gICAqCi0gICAqIFNpZ25hbCBlbWl0ZWQgdG8gZ2V0IHRoZSBjcnlwdG8gcGFyYW1ldGVycyByZWxldmFudCB0byB0aGUgUlRDUAotICAgKiBzdHJlYW0uIFVzZXIgc2hvdWxkIHByb3ZpZGUgdGhlIGtleSBhbmQgdGhlIFJUQ1AgZW5jcnlwdGlvbiBjaXBoZXJzCi0gICAqIGFuZCBhdXRoZW50aWNhdGlvbiwgYW5kIHJldHVybiB0aGVtIHdyYXBwZWQgaW4gYSBHc3RDYXBzLgotICAgKgotICAgKiBTaW5jZTogMS40Ci0gICAqLwotICBnc3RfcnRzcHNyY19zaWduYWxzW1NJR05BTF9SRVFVRVNUX1JUQ1BfS0VZXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJyZXF1ZXN0LXJ0Y3Ata2V5IiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBHU1RfVFlQRV9DQVBTLCAxLCBHX1RZUEVfVUlOVCk7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcy0+c2VuZF9ldmVudCA9IGdzdF9ydHNwc3JjX3NlbmRfZXZlbnQ7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnByb3ZpZGVfY2xvY2sgPSBnc3RfcnRzcHNyY19wcm92aWRlX2Nsb2NrOwotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfcnRzcHNyY19jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZydHB0ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJSVFNQIHBhY2tldCByZWNlaXZlciIsICJTb3VyY2UvTmV0d29yayIsCi0gICAgICAiUmVjZWl2ZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFJUU1AgKFJGQyAyMzI2KSIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4sICIKLSAgICAgICJUaGlqcyBWZXJtZWlyIDx0aGlqcy52ZXJtZWlyQGJhcmNvLmNvbT4sICIKLSAgICAgICJMdXR6IE11ZWxsZXIgPGx1dHpAdG9wZnJvc2UuZGU+Iik7Ci0KLSAgZ3N0YmluX2NsYXNzLT5oYW5kbGVfbWVzc2FnZSA9IGdzdF9ydHNwc3JjX2hhbmRsZV9tZXNzYWdlOwotCi0gIGdzdF9ydHNwX2V4dF9saXN0X2luaXQgKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19pbml0IChHc3RSVFNQU3JjICogc3JjKQotewotICBzcmMtPmNvbm5pbmZvLmxvY2F0aW9uID0gZ19zdHJkdXAgKERFRkFVTFRfTE9DQVRJT04pOwotICBzcmMtPnByb3RvY29scyA9IERFRkFVTFRfUFJPVE9DT0xTOwotICBzcmMtPmRlYnVnID0gREVGQVVMVF9ERUJVRzsKLSAgc3JjLT5yZXRyeSA9IERFRkFVTFRfUkVUUlk7Ci0gIHNyYy0+dWRwX3RpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7Ci0gIGdzdF9ydHNwc3JjX3NldF90Y3BfdGltZW91dCAoc3JjLCBERUZBVUxUX1RDUF9USU1FT1VUKTsKLSAgc3JjLT5sYXRlbmN5ID0gREVGQVVMVF9MQVRFTkNZX01TOwotICBzcmMtPmRyb3Bfb25fbGF0ZW5jeSA9IERFRkFVTFRfRFJPUF9PTl9MQVRFTkNZOwotICBzcmMtPmNvbm5lY3Rpb25fc3BlZWQgPSBERUZBVUxUX0NPTk5FQ1RJT05fU1BFRUQ7Ci0gIHNyYy0+bmF0X21ldGhvZCA9IERFRkFVTFRfTkFUX01FVEhPRDsKLSAgc3JjLT5kb19ydGNwID0gREVGQVVMVF9ET19SVENQOwotICBzcmMtPmRvX3J0c3Bfa2VlcF9hbGl2ZSA9IERFRkFVTFRfRE9fUlRTUF9LRUVQX0FMSVZFOwotICBnc3RfcnRzcHNyY19zZXRfcHJveHkgKHNyYywgREVGQVVMVF9QUk9YWSk7Ci0gIHNyYy0+cnRwX2Jsb2Nrc2l6ZSA9IERFRkFVTFRfUlRQX0JMT0NLU0laRTsKLSAgc3JjLT51c2VyX2lkID0gZ19zdHJkdXAgKERFRkFVTFRfVVNFUl9JRCk7Ci0gIHNyYy0+dXNlcl9wdyA9IGdfc3RyZHVwIChERUZBVUxUX1VTRVJfUFcpOwotICBzcmMtPmJ1ZmZlcl9tb2RlID0gREVGQVVMVF9CVUZGRVJfTU9ERTsKLSAgc3JjLT5jbGllbnRfcG9ydF9yYW5nZS5taW4gPSAwOwotICBzcmMtPmNsaWVudF9wb3J0X3JhbmdlLm1heCA9IDA7Ci0gIHNyYy0+dWRwX2J1ZmZlcl9zaXplID0gREVGQVVMVF9VRFBfQlVGRkVSX1NJWkU7Ci0gIHNyYy0+c2hvcnRfaGVhZGVyID0gREVGQVVMVF9TSE9SVF9IRUFERVI7Ci0gIHNyYy0+cHJvYmF0aW9uID0gREVGQVVMVF9QUk9CQVRJT047Ci0gIHNyYy0+dWRwX3JlY29ubmVjdCA9IERFRkFVTFRfVURQX1JFQ09OTkVDVDsKLSAgc3JjLT5tdWx0aV9pZmFjZSA9IGdfc3RyZHVwIChERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSk7Ci0gIHNyYy0+bnRwX3N5bmMgPSBERUZBVUxUX05UUF9TWU5DOwotICBzcmMtPnVzZV9waXBlbGluZV9jbG9jayA9IERFRkFVTFRfVVNFX1BJUEVMSU5FX0NMT0NLOwotICBzcmMtPnNkZXMgPSBOVUxMOwotICBzcmMtPnRsc192YWxpZGF0aW9uX2ZsYWdzID0gREVGQVVMVF9UTFNfVkFMSURBVElPTl9GTEFHUzsKLSAgc3JjLT50bHNfZGF0YWJhc2UgPSBERUZBVUxUX1RMU19EQVRBQkFTRTsKLSAgc3JjLT50bHNfaW50ZXJhY3Rpb24gPSBERUZBVUxUX1RMU19JTlRFUkFDVElPTjsKLSAgc3JjLT5kb19yZXRyYW5zbWlzc2lvbiA9IERFRkFVTFRfRE9fUkVUUkFOU01JU1NJT047Ci0gIHNyYy0+bnRwX3RpbWVfc291cmNlID0gREVGQVVMVF9OVFBfVElNRV9TT1VSQ0U7Ci0gIHNyYy0+dXNlcl9hZ2VudCA9IGdfc3RyZHVwIChERUZBVUxUX1VTRVJfQUdFTlQpOwotICBzcmMtPm1heF9ydGNwX3J0cF90aW1lX2RpZmYgPSBERUZBVUxUX01BWF9SVENQX1JUUF9USU1FX0RJRkY7Ci0gIHNyYy0+cmZjNzI3M19zeW5jID0gREVGQVVMVF9SRkM3MjczX1NZTkM7Ci0KLSAgLyogZ2V0IGEgbGlzdCBvZiBhbGwgZXh0ZW5zaW9ucyAqLwotICBzcmMtPmV4dGVuc2lvbnMgPSBnc3RfcnRzcF9leHRfbGlzdF9nZXQgKCk7Ci0KLSAgLyogY29ubmVjdCB0byBzZW5kIHNpZ25hbCAqLwotICBnc3RfcnRzcF9leHRfbGlzdF9jb25uZWN0IChzcmMtPmV4dGVuc2lvbnMsICJzZW5kIiwKLSAgICAgIChHQ2FsbGJhY2spIGdzdF9ydHNwc3JjX3NlbmRfY2IsIHNyYyk7Ci0KLSAgLyogcHJvdGVjdHMgdGhlIHN0cmVhbWluZyB0aHJlYWQgaW4gaW50ZXJsZWF2ZWQgbW9kZSBvciB0aGUgcG9sbGluZwotICAgKiB0aHJlYWQgaW4gVURQIG1vZGUuICovCi0gIGdfcmVjX211dGV4X2luaXQgKCZzcmMtPnN0cmVhbV9yZWNfbG9jayk7Ci0KLSAgLyogcHJvdGVjdHMgb3VyIHN0YXRlIGNoYW5nZXMgZnJvbSBtdWx0aXBsZSBpbnZvY2F0aW9ucyAqLwotICBnX3JlY19tdXRleF9pbml0ICgmc3JjLT5zdGF0ZV9yZWNfbG9jayk7Ci0KLSAgc3JjLT5zdGF0ZSA9IEdTVF9SVFNQX1NUQVRFX0lOVkFMSUQ7Ci0KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoc3JjLCBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSk7Ci0gIGdzdF9iaW5fc2V0X3N1cHByZXNzZWRfZmxhZ3MgKEdTVF9CSU4gKHNyYyksCi0gICAgICBHU1RfRUxFTUVOVF9GTEFHX1NPVVJDRSB8IEdTVF9FTEVNRU5UX0ZMQUdfU0lOSyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0UlRTUFNyYyAqcnRzcHNyYzsKLQotICBydHNwc3JjID0gR1NUX1JUU1BTUkMgKG9iamVjdCk7Ci0KLSAgZ3N0X3J0c3BfZXh0X2xpc3RfZnJlZSAocnRzcHNyYy0+ZXh0ZW5zaW9ucyk7Ci0gIGdfZnJlZSAocnRzcHNyYy0+Y29ubmluZm8ubG9jYXRpb24pOwotICBnc3RfcnRzcF91cmxfZnJlZSAocnRzcHNyYy0+Y29ubmluZm8udXJsKTsKLSAgZ19mcmVlIChydHNwc3JjLT5jb25uaW5mby51cmxfc3RyKTsKLSAgZ19mcmVlIChydHNwc3JjLT51c2VyX2lkKTsKLSAgZ19mcmVlIChydHNwc3JjLT51c2VyX3B3KTsKLSAgZ19mcmVlIChydHNwc3JjLT5tdWx0aV9pZmFjZSk7Ci0gIGdfZnJlZSAocnRzcHNyYy0+dXNlcl9hZ2VudCk7Ci0KLSAgaWYgKHJ0c3BzcmMtPnNkcCkgewotICAgIGdzdF9zZHBfbWVzc2FnZV9mcmVlIChydHNwc3JjLT5zZHApOwotICAgIHJ0c3BzcmMtPnNkcCA9IE5VTEw7Ci0gIH0KLSAgaWYgKHJ0c3BzcmMtPnByb3ZpZGVkX2Nsb2NrKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJ0c3BzcmMtPnByb3ZpZGVkX2Nsb2NrKTsKLQotICBpZiAocnRzcHNyYy0+c2RlcykKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHJ0c3BzcmMtPnNkZXMpOwotCi0gIGlmIChydHNwc3JjLT50bHNfZGF0YWJhc2UpCi0gICAgZ19vYmplY3RfdW5yZWYgKHJ0c3BzcmMtPnRsc19kYXRhYmFzZSk7Ci0KLSAgaWYgKHJ0c3BzcmMtPnRsc19pbnRlcmFjdGlvbikKLSAgICBnX29iamVjdF91bnJlZiAocnRzcHNyYy0+dGxzX2ludGVyYWN0aW9uKTsKLQotICAvKiBmcmVlIGxvY2tzICovCi0gIGdfcmVjX211dGV4X2NsZWFyICgmcnRzcHNyYy0+c3RyZWFtX3JlY19sb2NrKTsKLSAgZ19yZWNfbXV0ZXhfY2xlYXIgKCZydHNwc3JjLT5zdGF0ZV9yZWNfbG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgR3N0Q2xvY2sgKgotZ3N0X3J0c3BzcmNfcHJvdmlkZV9jbG9jayAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdFJUU1BTcmMgKnNyYyA9IEdTVF9SVFNQU1JDIChlbGVtZW50KTsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotCi0gIGlmICgoY2xvY2sgPSBzcmMtPnByb3ZpZGVkX2Nsb2NrKSAhPSBOVUxMKQotICAgIGdzdF9vYmplY3RfcmVmIChjbG9jayk7Ci0KLSAgcmV0dXJuIGNsb2NrOwotfQotCi0vKiBhIHByb3h5IHN0cmluZyBvZiB0aGUgZm9ybWF0IFt1c2VyOnBhc3N3ZEBdaG9zdFs6cG9ydF0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfc2V0X3Byb3h5IChHc3RSVFNQU3JjICogcnRzcCwgY29uc3QgZ2NoYXIgKiBwcm94eSkKLXsKLSAgZ2NoYXIgKnAsICphdCwgKmNvbDsKLQotICBnX2ZyZWUgKHJ0c3AtPnByb3h5X3VzZXIpOwotICBydHNwLT5wcm94eV91c2VyID0gTlVMTDsKLSAgZ19mcmVlIChydHNwLT5wcm94eV9wYXNzd2QpOwotICBydHNwLT5wcm94eV9wYXNzd2QgPSBOVUxMOwotICBnX2ZyZWUgKHJ0c3AtPnByb3h5X2hvc3QpOwotICBydHNwLT5wcm94eV9ob3N0ID0gTlVMTDsKLSAgcnRzcC0+cHJveHlfcG9ydCA9IDA7Ci0KLSAgcCA9IChnY2hhciAqKSBwcm94eTsKLQotICBpZiAocCA9PSBOVUxMKQotICAgIHJldHVybiBUUlVFOwotCi0gIC8qIHdlIGFsbG93IGh0dHA6Ly8gaW4gZnJvbnQgYnV0IGlnbm9yZSBpdCAqLwotICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAocCwgImh0dHA6Ly8iKSkKLSAgICBwICs9IDc7Ci0KLSAgYXQgPSBzdHJjaHIgKHAsICdAJyk7Ci0gIGlmIChhdCkgewotICAgIC8qIGxvb2sgZm9yIHVzZXI6cGFzc3dkICovCi0gICAgY29sID0gc3RyY2hyIChwcm94eSwgJzonKTsKLSAgICBpZiAoY29sID09IE5VTEwgfHwgY29sID4gYXQpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBydHNwLT5wcm94eV91c2VyID0gZ19zdHJuZHVwIChwLCBjb2wgLSBwKTsKLSAgICBjb2wrKzsKLSAgICBydHNwLT5wcm94eV9wYXNzd2QgPSBnX3N0cm5kdXAgKGNvbCwgYXQgLSBjb2wpOwotCi0gICAgLyogbW92ZSB0byBob3N0ICovCi0gICAgcCA9IGF0ICsgMTsKLSAgfSBlbHNlIHsKLSAgICBpZiAocnRzcC0+cHJvcF9wcm94eV9pZCAhPSBOVUxMICYmICpydHNwLT5wcm9wX3Byb3h5X2lkICE9ICdcMCcpCi0gICAgICBydHNwLT5wcm94eV91c2VyID0gZ19zdHJkdXAgKHJ0c3AtPnByb3BfcHJveHlfaWQpOwotICAgIGlmIChydHNwLT5wcm9wX3Byb3h5X3B3ICE9IE5VTEwgJiYgKnJ0c3AtPnByb3BfcHJveHlfcHcgIT0gJ1wwJykKLSAgICAgIHJ0c3AtPnByb3h5X3Bhc3N3ZCA9IGdfc3RyZHVwIChydHNwLT5wcm9wX3Byb3h5X3B3KTsKLSAgICBpZiAocnRzcC0+cHJveHlfdXNlciAhPSBOVUxMIHx8IHJ0c3AtPnByb3h5X3Bhc3N3ZCAhPSBOVUxMKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAocnRzcCwgInNldCBwcm94eSB1c2VyL3B3IGZyb20gcHJvcGVydGllczogJXM6JXMiLAotICAgICAgICAgIEdTVF9TVFJfTlVMTCAocnRzcC0+cHJveHlfdXNlciksIEdTVF9TVFJfTlVMTCAocnRzcC0+cHJveHlfcGFzc3dkKSk7Ci0gICAgfQotICB9Ci0gIGNvbCA9IHN0cmNociAocCwgJzonKTsKLQotICBpZiAoY29sKSB7Ci0gICAgLyogZXZlcnl0aGluZyBiZWZvcmUgdGhlIGNvbG9uIGlzIHRoZSBob3N0bmFtZSAqLwotICAgIHJ0c3AtPnByb3h5X2hvc3QgPSBnX3N0cm5kdXAgKHAsIGNvbCAtIHApOwotICAgIHAgPSBjb2wgKyAxOwotICAgIHJ0c3AtPnByb3h5X3BvcnQgPSBzdHJ0b3VsIChwLCAoY2hhciAqKikgJnAsIDEwKTsKLSAgfSBlbHNlIHsKLSAgICBydHNwLT5wcm94eV9ob3N0ID0gZ19zdHJkdXAgKHApOwotICAgIHJ0c3AtPnByb3h5X3BvcnQgPSA4MDgwOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfc2V0X3RjcF90aW1lb3V0IChHc3RSVFNQU3JjICogcnRzcHNyYywgZ3VpbnQ2NCB0aW1lb3V0KQotewotICBydHNwc3JjLT50Y3BfdGltZW91dC50dl9zZWMgPSB0aW1lb3V0IC8gR19VU0VDX1BFUl9TRUM7Ci0gIHJ0c3BzcmMtPnRjcF90aW1lb3V0LnR2X3VzZWMgPSB0aW1lb3V0ICUgR19VU0VDX1BFUl9TRUM7Ci0KLSAgaWYgKHRpbWVvdXQgIT0gMCkKLSAgICBydHNwc3JjLT5wdGNwX3RpbWVvdXQgPSAmcnRzcHNyYy0+dGNwX3RpbWVvdXQ7Ci0gIGVsc2UKLSAgICBydHNwc3JjLT5wdGNwX3RpbWVvdXQgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJUU1BTcmMgKnJ0c3BzcmM7Ci0KLSAgcnRzcHNyYyA9IEdTVF9SVFNQU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIGdzdF9ydHNwc3JjX3VyaV9zZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHJ0c3BzcmMpLAotICAgICAgICAgIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9UT0NPTFM6Ci0gICAgICBydHNwc3JjLT5wcm90b2NvbHMgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFQlVHOgotICAgICAgcnRzcHNyYy0+ZGVidWcgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVUUlk6Ci0gICAgICBydHNwc3JjLT5yZXRyeSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FT1VUOgotICAgICAgcnRzcHNyYy0+dWRwX3RpbWVvdXQgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UQ1BfVElNRU9VVDoKLSAgICAgIGdzdF9ydHNwc3JjX3NldF90Y3BfdGltZW91dCAocnRzcHNyYywgZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xBVEVOQ1k6Ci0gICAgICBydHNwc3JjLT5sYXRlbmN5ID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RST1BfT05fTEFURU5DWToKLSAgICAgIHJ0c3BzcmMtPmRyb3Bfb25fbGF0ZW5jeSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DT05ORUNUSU9OX1NQRUVEOgotICAgICAgcnRzcHNyYy0+Y29ubmVjdGlvbl9zcGVlZCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05BVF9NRVRIT0Q6Ci0gICAgICBydHNwc3JjLT5uYXRfbWV0aG9kID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPX1JUQ1A6Ci0gICAgICBydHNwc3JjLT5kb19ydGNwID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPX1JUU1BfS0VFUF9BTElWRToKLSAgICAgIHJ0c3BzcmMtPmRvX3J0c3Bfa2VlcF9hbGl2ZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWToKLSAgICAgIGdzdF9ydHNwc3JjX3NldF9wcm94eSAocnRzcHNyYywgZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST1hZX0lEOgotICAgICAgZ19mcmVlIChydHNwc3JjLT5wcm9wX3Byb3h5X2lkKTsKLSAgICAgIHJ0c3BzcmMtPnByb3BfcHJveHlfaWQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWV9QVzoKLSAgICAgIGdfZnJlZSAocnRzcHNyYy0+cHJvcF9wcm94eV9wdyk7Ci0gICAgICBydHNwc3JjLT5wcm9wX3Byb3h5X3B3ID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUlRQX0JMT0NLU0laRToKLSAgICAgIHJ0c3BzcmMtPnJ0cF9ibG9ja3NpemUgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9JRDoKLSAgICAgIGdfZnJlZSAocnRzcHNyYy0+dXNlcl9pZCk7Ci0gICAgICBydHNwc3JjLT51c2VyX2lkID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9QVzoKLSAgICAgIGdfZnJlZSAocnRzcHNyYy0+dXNlcl9wdyk7Ci0gICAgICBydHNwc3JjLT51c2VyX3B3ID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQlVGRkVSX01PREU6Ci0gICAgICBydHNwc3JjLT5idWZmZXJfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1JUX1JBTkdFOgotICAgIHsKLSAgICAgIGNvbnN0IGdjaGFyICpzdHI7Ci0KLSAgICAgIHN0ciA9IGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpOwotICAgICAgaWYgKHNzY2FuZiAoc3RyLCAiJXUtJXUiLCAmcnRzcHNyYy0+Y2xpZW50X3BvcnRfcmFuZ2UubWluLAotICAgICAgICAgICAgICAmcnRzcHNyYy0+Y2xpZW50X3BvcnRfcmFuZ2UubWF4KSAhPSAyKSB7Ci0gICAgICAgIHJ0c3BzcmMtPmNsaWVudF9wb3J0X3JhbmdlLm1pbiA9IDA7Ci0gICAgICAgIHJ0c3BzcmMtPmNsaWVudF9wb3J0X3JhbmdlLm1heCA9IDA7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1VEUF9CVUZGRVJfU0laRToKLSAgICAgIHJ0c3BzcmMtPnVkcF9idWZmZXJfc2l6ZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NIT1JUX0hFQURFUjoKLSAgICAgIHJ0c3BzcmMtPnNob3J0X2hlYWRlciA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9CQVRJT046Ci0gICAgICBydHNwc3JjLT5wcm9iYXRpb24gPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVURQX1JFQ09OTkVDVDoKLSAgICAgIHJ0c3BzcmMtPnVkcF9yZWNvbm5lY3QgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVMVElDQVNUX0lGQUNFOgotICAgICAgZ19mcmVlIChydHNwc3JjLT5tdWx0aV9pZmFjZSk7Ci0KLSAgICAgIGlmIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSA9PSBOVUxMKQotICAgICAgICBydHNwc3JjLT5tdWx0aV9pZmFjZSA9IGdfc3RyZHVwIChERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJ0c3BzcmMtPm11bHRpX2lmYWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlRQX1NZTkM6Ci0gICAgICBydHNwc3JjLT5udHBfc3luYyA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfUElQRUxJTkVfQ0xPQ0s6Ci0gICAgICBydHNwc3JjLT51c2VfcGlwZWxpbmVfY2xvY2sgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0RFUzoKLSAgICAgIHJ0c3BzcmMtPnNkZXMgPSBnX3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RMU19WQUxJREFUSU9OX0ZMQUdTOgotICAgICAgcnRzcHNyYy0+dGxzX3ZhbGlkYXRpb25fZmxhZ3MgPSBnX3ZhbHVlX2dldF9mbGFncyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RMU19EQVRBQkFTRToKLSAgICAgIGdfY2xlYXJfb2JqZWN0ICgmcnRzcHNyYy0+dGxzX2RhdGFiYXNlKTsKLSAgICAgIHJ0c3BzcmMtPnRsc19kYXRhYmFzZSA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RMU19JTlRFUkFDVElPTjoKLSAgICAgIGdfY2xlYXJfb2JqZWN0ICgmcnRzcHNyYy0+dGxzX2ludGVyYWN0aW9uKTsKLSAgICAgIHJ0c3BzcmMtPnRsc19pbnRlcmFjdGlvbiA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RPX1JFVFJBTlNNSVNTSU9OOgotICAgICAgcnRzcHNyYy0+ZG9fcmV0cmFuc21pc3Npb24gPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlRQX1RJTUVfU09VUkNFOgotICAgICAgcnRzcHNyYy0+bnRwX3RpbWVfc291cmNlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRVJfQUdFTlQ6Ci0gICAgICBnX2ZyZWUgKHJ0c3BzcmMtPnVzZXJfYWdlbnQpOwotICAgICAgcnRzcHNyYy0+dXNlcl9hZ2VudCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9SVENQX1JUUF9USU1FX0RJRkY6Ci0gICAgICBydHNwc3JjLT5tYXhfcnRjcF9ydHBfdGltZV9kaWZmID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkZDNzI3M19TWU5DOgotICAgICAgcnRzcHNyYy0+cmZjNzI3M19zeW5jID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFJUU1BTcmMgKnJ0c3BzcmM7Ci0KLSAgcnRzcHNyYyA9IEdTVF9SVFNQU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHJ0c3BzcmMtPmNvbm5pbmZvLmxvY2F0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9UT0NPTFM6Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIHJ0c3BzcmMtPnByb3RvY29scyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVCVUc6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRzcHNyYy0+ZGVidWcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFVFJZOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHJ0c3BzcmMtPnJldHJ5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FT1VUOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgcnRzcHNyYy0+dWRwX3RpbWVvdXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RDUF9USU1FT1VUOgotICAgIHsKLSAgICAgIGd1aW50NjQgdGltZW91dDsKLQotICAgICAgdGltZW91dCA9ICgoZ3VpbnQ2NCkgcnRzcHNyYy0+dGNwX3RpbWVvdXQudHZfc2VjKSAqIEdfVVNFQ19QRVJfU0VDICsKLSAgICAgICAgICBydHNwc3JjLT50Y3BfdGltZW91dC50dl91c2VjOwotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgdGltZW91dCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0xBVEVOQ1k6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRzcHNyYy0+bGF0ZW5jeSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFJPUF9PTl9MQVRFTkNZOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0c3BzcmMtPmRyb3Bfb25fbGF0ZW5jeSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ09OTkVDVElPTl9TUEVFRDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHJ0c3BzcmMtPmNvbm5lY3Rpb25fc3BlZWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05BVF9NRVRIT0Q6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgcnRzcHNyYy0+bmF0X21ldGhvZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRE9fUlRDUDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHNwc3JjLT5kb19ydGNwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET19SVFNQX0tFRVBfQUxJVkU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRzcHNyYy0+ZG9fcnRzcF9rZWVwX2FsaXZlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWToKLSAgICB7Ci0gICAgICBnY2hhciAqc3RyOwotCi0gICAgICBpZiAocnRzcHNyYy0+cHJveHlfaG9zdCkgewotICAgICAgICBzdHIgPQotICAgICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiJXM6JWQiLCBydHNwc3JjLT5wcm94eV9ob3N0LCBydHNwc3JjLT5wcm94eV9wb3J0KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ciA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgc3RyKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUFJPWFlfSUQ6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBydHNwc3JjLT5wcm9wX3Byb3h5X2lkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QUk9YWV9QVzoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHJ0c3BzcmMtPnByb3BfcHJveHlfcHcpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JUUF9CTE9DS1NJWkU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgcnRzcHNyYy0+cnRwX2Jsb2Nrc2l6ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9JRDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHJ0c3BzcmMtPnVzZXJfaWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRVJfUFc6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBydHNwc3JjLT51c2VyX3B3KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CVUZGRVJfTU9ERToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBydHNwc3JjLT5idWZmZXJfbW9kZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9SVF9SQU5HRToKLSAgICB7Ci0gICAgICBnY2hhciAqc3RyOwotCi0gICAgICBpZiAocnRzcHNyYy0+Y2xpZW50X3BvcnRfcmFuZ2UubWluICE9IDApIHsKLSAgICAgICAgc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiJXUtJXUiLCBydHNwc3JjLT5jbGllbnRfcG9ydF9yYW5nZS5taW4sCi0gICAgICAgICAgICBydHNwc3JjLT5jbGllbnRfcG9ydF9yYW5nZS5tYXgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RyID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKHZhbHVlLCBzdHIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9VRFBfQlVGRkVSX1NJWkU6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBydHNwc3JjLT51ZHBfYnVmZmVyX3NpemUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NIT1JUX0hFQURFUjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHNwc3JjLT5zaG9ydF9oZWFkZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BST0JBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBydHNwc3JjLT5wcm9iYXRpb24pOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VEUF9SRUNPTk5FQ1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRzcHNyYy0+dWRwX3JlY29ubmVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVMVElDQVNUX0lGQUNFOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgcnRzcHNyYy0+bXVsdGlfaWZhY2UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX05UUF9TWU5DOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHJ0c3BzcmMtPm50cF9zeW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9VU0VfUElQRUxJTkVfQ0xPQ0s6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRzcHNyYy0+dXNlX3BpcGVsaW5lX2Nsb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TREVTOgotICAgICAgZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCBydHNwc3JjLT5zZGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UTFNfVkFMSURBVElPTl9GTEFHUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ZsYWdzICh2YWx1ZSwgcnRzcHNyYy0+dGxzX3ZhbGlkYXRpb25fZmxhZ3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RMU19EQVRBQkFTRToKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHJ0c3BzcmMtPnRsc19kYXRhYmFzZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVExTX0lOVEVSQUNUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgcnRzcHNyYy0+dGxzX2ludGVyYWN0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ET19SRVRSQU5TTUlTU0lPTjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBydHNwc3JjLT5kb19yZXRyYW5zbWlzc2lvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTlRQX1RJTUVfU09VUkNFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHJ0c3BzcmMtPm50cF90aW1lX3NvdXJjZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFUl9BR0VOVDoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHJ0c3BzcmMtPnVzZXJfYWdlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01BWF9SVENQX1JUUF9USU1FX0RJRkY6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBydHNwc3JjLT5tYXhfcnRjcF9ydHBfdGltZV9kaWZmKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRkM3MjczX1NZTkM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgcnRzcHNyYy0+cmZjNzI3M19zeW5jKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdpbnQKLWZpbmRfc3RyZWFtX2J5X2lkIChHc3RSVFNQU3RyZWFtICogc3RyZWFtLCBnaW50ICogaWQpCi17Ci0gIGlmIChzdHJlYW0tPmlkID09ICppZCkKLSAgICByZXR1cm4gMDsKLQotICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBnaW50Ci1maW5kX3N0cmVhbV9ieV9jaGFubmVsIChHc3RSVFNQU3RyZWFtICogc3RyZWFtLCBnaW50ICogY2hhbm5lbCkKLXsKLSAgLyogaWdub3JlIHVuY29uZmlndXJlZCBjaGFubmVscyBoZXJlIChlLmcuLCB0aG9zZSB0aGF0Ci0gICAqIHdlcmUgZXhwbGljaXRseSBza2lwcGVkIGR1cmluZyBTRVRVUCkgKi8KLSAgaWYgKChzdHJlYW0tPmNoYW5uZWxwYWRbMF0gIT0gTlVMTCkgJiYKLSAgICAgIChzdHJlYW0tPmNoYW5uZWxbMF0gPT0gKmNoYW5uZWwgfHwgc3RyZWFtLT5jaGFubmVsWzFdID09ICpjaGFubmVsKSkKLSAgICByZXR1cm4gMDsKLQotICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBnaW50Ci1maW5kX3N0cmVhbV9ieV91ZHBzcmMgKEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0sIGdjb25zdHBvaW50ZXIgYSkKLXsKLSAgR3N0RWxlbWVudCAqc3JjID0gKEdzdEVsZW1lbnQgKikgYTsKLQotICBpZiAoc3RyZWFtLT51ZHBzcmNbMF0gPT0gc3JjKQotICAgIHJldHVybiAwOwotICBpZiAoc3RyZWFtLT51ZHBzcmNbMV0gPT0gc3JjKQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGdpbnQKLWZpbmRfc3RyZWFtX2J5X3NldHVwIChHc3RSVFNQU3RyZWFtICogc3RyZWFtLCBnY29uc3Rwb2ludGVyIGEpCi17Ci0gIGlmIChzdHJlYW0tPmNvbm5pbmZvLmxvY2F0aW9uKSB7Ci0gICAgLyogY2hlY2sgcXVhbGlmaWVkIHNldHVwX3VybCAqLwotICAgIGlmICghc3RyY21wIChzdHJlYW0tPmNvbm5pbmZvLmxvY2F0aW9uLCAoZ2NoYXIgKikgYSkpCi0gICAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoc3RyZWFtLT5jb250cm9sX3VybCkgewotICAgIC8qIGNoZWNrIG9yaWdpbmFsIGNvbnRyb2xfdXJsICovCi0gICAgaWYgKCFzdHJjbXAgKHN0cmVhbS0+Y29udHJvbF91cmwsIChnY2hhciAqKSBhKSkKLSAgICAgIHJldHVybiAwOwotCi0gICAgLyogY2hlY2sgaWYgcXVhbGlmaWVkIHNldHVwX3VybCBlbmRzIHdpdGggc3RyaW5nICovCi0gICAgaWYgKGdfc3RyX2hhc19zdWZmaXggKHN0cmVhbS0+Y29udHJvbF91cmwsIChnY2hhciAqKSBhKSkKLSAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgR3N0UlRTUFN0cmVhbSAqCi1maW5kX3N0cmVhbSAoR3N0UlRTUFNyYyAqIHNyYywgZ2NvbnN0cG9pbnRlciBkYXRhLCBnY29uc3Rwb2ludGVyIGZ1bmMpCi17Ci0gIEdMaXN0ICpsc3RyZWFtOwotCi0gIC8qIGZpbmQgYW5kIGdldCBzdHJlYW0gKi8KLSAgaWYgKChsc3RyZWFtID0gZ19saXN0X2ZpbmRfY3VzdG9tIChzcmMtPnN0cmVhbXMsIGRhdGEsIChHQ29tcGFyZUZ1bmMpIGZ1bmMpKSkKLSAgICByZXR1cm4gKEdzdFJUU1BTdHJlYW0gKikgbHN0cmVhbS0+ZGF0YTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNvbnN0IEdzdFNEUEJhbmR3aWR0aCAqCi1nc3RfcnRzcHNyY19nZXRfYmFuZHdpZHRoIChHc3RSVFNQU3JjICogc3JjLCBjb25zdCBHc3RTRFBNZXNzYWdlICogc2RwLAotICAgIGNvbnN0IEdzdFNEUE1lZGlhICogbWVkaWEsIGNvbnN0IGdjaGFyICogdHlwZSkKLXsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIC8qIGZpcnN0IGxvb2sgaW4gdGhlIG1lZGlhIHNwZWNpZmljIHNlY3Rpb24gKi8KLSAgbGVuID0gZ3N0X3NkcF9tZWRpYV9iYW5kd2lkdGhzX2xlbiAobWVkaWEpOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBjb25zdCBHc3RTRFBCYW5kd2lkdGggKmJ3ID0gZ3N0X3NkcF9tZWRpYV9nZXRfYmFuZHdpZHRoIChtZWRpYSwgaSk7Ci0KLSAgICBpZiAoc3RyY21wIChidy0+Ynd0eXBlLCB0eXBlKSA9PSAwKQotICAgICAgcmV0dXJuIGJ3OwotICB9Ci0gIC8qIHRoZW4gbG9vayBpbiB0aGUgbWVzc2FnZSBzcGVjaWZpYyBzZWN0aW9uICovCi0gIGxlbiA9IGdzdF9zZHBfbWVzc2FnZV9iYW5kd2lkdGhzX2xlbiAoc2RwKTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgY29uc3QgR3N0U0RQQmFuZHdpZHRoICpidyA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfYmFuZHdpZHRoIChzZHAsIGkpOwotCi0gICAgaWYgKHN0cmNtcCAoYnctPmJ3dHlwZSwgdHlwZSkgPT0gMCkKLSAgICAgIHJldHVybiBidzsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX2NvbGxlY3RfYmFuZHdpZHRoIChHc3RSVFNQU3JjICogc3JjLCBjb25zdCBHc3RTRFBNZXNzYWdlICogc2RwLAotICAgIGNvbnN0IEdzdFNEUE1lZGlhICogbWVkaWEsIEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIGNvbnN0IEdzdFNEUEJhbmR3aWR0aCAqYnc7Ci0KLSAgaWYgKChidyA9IGdzdF9ydHNwc3JjX2dldF9iYW5kd2lkdGggKHNyYywgc2RwLCBtZWRpYSwgR1NUX1NEUF9CV1RZUEVfQVMpKSkKLSAgICBzdHJlYW0tPmFzX2JhbmR3aWR0aCA9IGJ3LT5iYW5kd2lkdGg7Ci0gIGVsc2UKLSAgICBzdHJlYW0tPmFzX2JhbmR3aWR0aCA9IC0xOwotCi0gIGlmICgoYncgPSBnc3RfcnRzcHNyY19nZXRfYmFuZHdpZHRoIChzcmMsIHNkcCwgbWVkaWEsIEdTVF9TRFBfQldUWVBFX1JSKSkpCi0gICAgc3RyZWFtLT5ycl9iYW5kd2lkdGggPSBidy0+YmFuZHdpZHRoOwotICBlbHNlCi0gICAgc3RyZWFtLT5ycl9iYW5kd2lkdGggPSAtMTsKLQotICBpZiAoKGJ3ID0gZ3N0X3J0c3BzcmNfZ2V0X2JhbmR3aWR0aCAoc3JjLCBzZHAsIG1lZGlhLCBHU1RfU0RQX0JXVFlQRV9SUykpKQotICAgIHN0cmVhbS0+cnNfYmFuZHdpZHRoID0gYnctPmJhbmR3aWR0aDsKLSAgZWxzZQotICAgIHN0cmVhbS0+cnNfYmFuZHdpZHRoID0gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19kb19zdHJlYW1fY29ubmVjdGlvbiAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSwKLSAgICBjb25zdCBHc3RTRFBDb25uZWN0aW9uICogY29ubikKLXsKLSAgaWYgKGNvbm4tPm5ldHR5cGUgPT0gTlVMTCB8fCBzdHJjbXAgKGNvbm4tPm5ldHR5cGUsICJJTiIpICE9IDApCi0gICAgcmV0dXJuOwotCi0gIGlmIChjb25uLT5hZGRydHlwZSA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICAvKiBjaGVjayBmb3IgSVBWNiAqLwotICBpZiAoc3RyY21wIChjb25uLT5hZGRydHlwZSwgIklQNCIpID09IDApCi0gICAgc3RyZWFtLT5pc19pcHY2ID0gRkFMU0U7Ci0gIGVsc2UgaWYgKHN0cmNtcCAoY29ubi0+YWRkcnR5cGUsICJJUDYiKSA9PSAwKQotICAgIHN0cmVhbS0+aXNfaXB2NiA9IFRSVUU7Ci0gIGVsc2UKLSAgICByZXR1cm47Ci0KLSAgLyogc2F2ZSBhZGRyZXNzICovCi0gIGdfZnJlZSAoc3RyZWFtLT5kZXN0aW5hdGlvbik7Ci0gIHN0cmVhbS0+ZGVzdGluYXRpb24gPSBnX3N0cmR1cCAoY29ubi0+YWRkcmVzcyk7Ci0KLSAgLyogY2hlY2sgZm9yIG11bHRpY2FzdCAqLwotICBzdHJlYW0tPmlzX211bHRpY2FzdCA9Ci0gICAgICBnc3Rfc2RwX2FkZHJlc3NfaXNfbXVsdGljYXN0IChjb25uLT5uZXR0eXBlLCBjb25uLT5hZGRydHlwZSwKLSAgICAgIGNvbm4tPmFkZHJlc3MpOwotICBzdHJlYW0tPnR0bCA9IGNvbm4tPnR0bDsKLX0KLQotLyogR28gb3ZlciB0aGUgY29ubmVjdGlvbnMgZm9yIGEgc3RyZWFtLgotICogLSBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIElQVjYsIHdlIHdpbGwgc2V0dXAgSVBWNiBzb2NrZXRzIGZvciBzZW5kaW5nIGFuZAotICogICByZWNlaXZpbmcuCi0gKiAtIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBsb2NhbGhvc3QgYWRkcmVzcywgd2UgZGlzYWJsZSBtdWx0aWNhc3QKLSAqLwotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX2NvbGxlY3RfY29ubmVjdGlvbnMgKEdzdFJUU1BTcmMgKiBzcmMsIGNvbnN0IEdzdFNEUE1lc3NhZ2UgKiBzZHAsCi0gICAgY29uc3QgR3N0U0RQTWVkaWEgKiBtZWRpYSwgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgY29uc3QgR3N0U0RQQ29ubmVjdGlvbiAqY29ubjsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIC8qIGZpcnN0IGxvb2sgaW4gdGhlIG1lZGlhIHNwZWNpZmljIHNlY3Rpb24gKi8KLSAgbGVuID0gZ3N0X3NkcF9tZWRpYV9jb25uZWN0aW9uc19sZW4gKG1lZGlhKTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgY29ubiA9IGdzdF9zZHBfbWVkaWFfZ2V0X2Nvbm5lY3Rpb24gKG1lZGlhLCBpKTsKLQotICAgIGdzdF9ydHNwc3JjX2RvX3N0cmVhbV9jb25uZWN0aW9uIChzcmMsIHN0cmVhbSwgY29ubik7Ci0gIH0KLSAgLyogdGhlbiBsb29rIGluIHRoZSBtZXNzYWdlIHNwZWNpZmljIHNlY3Rpb24gKi8KLSAgaWYgKChjb25uID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9jb25uZWN0aW9uIChzZHApKSkgewotICAgIGdzdF9ydHNwc3JjX2RvX3N0cmVhbV9jb25uZWN0aW9uIChzcmMsIHN0cmVhbSwgY29ubik7Ci0gIH0KLX0KLQotLyogICBtPTxtZWRpYT4gPFVEUCBwb3J0PiBSVFAvQVZQIDxwYXlsb2FkPgotICovCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfY29sbGVjdF9wYXlsb2FkcyAoR3N0UlRTUFNyYyAqIHNyYywgY29uc3QgR3N0U0RQTWVzc2FnZSAqIHNkcCwKLSAgICBjb25zdCBHc3RTRFBNZWRpYSAqIG1lZGlhLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtKQotewotICBndWludCBpLCBsZW47Ci0gIGNvbnN0IGdjaGFyICpwcm90bzsKLSAgR3N0Q2FwcyAqZ2xvYmFsX2NhcHM7Ci0KLSAgLyogZ2V0IHByb3RvICovCi0gIHByb3RvID0gZ3N0X3NkcF9tZWRpYV9nZXRfcHJvdG8gKG1lZGlhKTsKLSAgaWYgKHByb3RvID09IE5VTEwpCi0gICAgZ290byBub19wcm90bzsKLQotICBpZiAoZ19zdHJfZXF1YWwgKHByb3RvLCAiUlRQL0FWUCIpKQotICAgIHN0cmVhbS0+cHJvZmlsZSA9IEdTVF9SVFNQX1BST0ZJTEVfQVZQOwotICBlbHNlIGlmIChnX3N0cl9lcXVhbCAocHJvdG8sICJSVFAvU0FWUCIpKQotICAgIHN0cmVhbS0+cHJvZmlsZSA9IEdTVF9SVFNQX1BST0ZJTEVfU0FWUDsKLSAgZWxzZSBpZiAoZ19zdHJfZXF1YWwgKHByb3RvLCAiUlRQL0FWUEYiKSkKLSAgICBzdHJlYW0tPnByb2ZpbGUgPSBHU1RfUlRTUF9QUk9GSUxFX0FWUEY7Ci0gIGVsc2UgaWYgKGdfc3RyX2VxdWFsIChwcm90bywgIlJUUC9TQVZQRiIpKQotICAgIHN0cmVhbS0+cHJvZmlsZSA9IEdTVF9SVFNQX1BST0ZJTEVfU0FWUEY7Ci0gIGVsc2UKLSAgICBnb3RvIHVua25vd25fcHJvdG87Ci0KLSAgLyogUGFyc2UgZ2xvYmFsIFNEUCBhdHRyaWJ1dGVzIG9uY2UgKi8KLSAgZ2xvYmFsX2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXBwbGljYXRpb24veC11bmtub3duIik7Ci0gIEdTVF9ERUJVRyAoIm1hcHBpbmcgc2RwIHNlc3Npb24gbGV2ZWwgYXR0cmlidXRlcyB0byBjYXBzIik7Ci0gIGdzdF9zZHBfbWVzc2FnZV9hdHRyaWJ1dGVzX3RvX2NhcHMgKHNkcCwgZ2xvYmFsX2NhcHMpOwotICBHU1RfREVCVUcgKCJtYXBwaW5nIHNkcCBtZWRpYSBsZXZlbCBhdHRyaWJ1dGVzIHRvIGNhcHMiKTsKLSAgZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX3RvX2NhcHMgKG1lZGlhLCBnbG9iYWxfY2Fwcyk7Ci0KLSAgLyogS2VlcCBhIGNvcHkgb2YgdGhlIFNEUCBrZXkgbWFuYWdlbWVudCAqLwotICBnc3Rfc2RwX21lZGlhX3BhcnNlX2tleW1nbXQgKG1lZGlhLCAmc3RyZWFtLT5taWtleSk7Ci0gIGlmIChzdHJlYW0tPm1pa2V5ID09IE5VTEwpCi0gICAgZ3N0X3NkcF9tZXNzYWdlX3BhcnNlX2tleW1nbXQgKHNkcCwgJnN0cmVhbS0+bWlrZXkpOwotCi0gIGxlbiA9IGdzdF9zZHBfbWVkaWFfZm9ybWF0c19sZW4gKG1lZGlhKTsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgZ2ludCBwdDsKLSAgICBHc3RDYXBzICpjYXBzLCAqb3V0Y2FwczsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgY29uc3QgZ2NoYXIgKmVuYzsKLSAgICBQdE1hcEl0ZW0gaXRlbTsKLQotICAgIHB0ID0gYXRvaSAoZ3N0X3NkcF9tZWRpYV9nZXRfZm9ybWF0IChtZWRpYSwgaSkpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiIGxvb2tpbmcgYXQgJWQgcHQ6ICVkIiwgaSwgcHQpOwotCi0gICAgLyogY29udmVydCBjYXBzICovCi0gICAgY2FwcyA9IGdzdF9zZHBfbWVkaWFfZ2V0X2NhcHNfZnJvbV9tZWRpYSAobWVkaWEsIHB0KTsKLSAgICBpZiAoY2FwcyA9PSBOVUxMKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIiBza2lwcGluZyBwdCAlZCB3aXRob3V0IGNhcHMiLCBwdCk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBkbyBzb21lIHR3ZWFrcyAqLwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICBpZiAoKGVuYyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgImVuY29kaW5nLW5hbWUiKSkpIHsKLSAgICAgIHN0cmVhbS0+aXNfcmVhbCA9IChzdHJzdHIgKGVuYywgIi1SRUFMIikgIT0gTlVMTCk7Ci0gICAgICBpZiAoc3RyY21wIChlbmMsICJYLUFTRi1QRiIpID09IDApCi0gICAgICAgIHN0cmVhbS0+Y29udGFpbmVyID0gVFJVRTsKLSAgICB9Ci0KLSAgICAvKiBNZXJnZSBpbiBnbG9iYWwgY2FwcyAqLwotICAgIC8qIEludGVyc2VjdCB3aWxsIG1lcmdlIGluIG1pc3NpbmcgZmllbGRzIHRvIHRoZSBjdXJyZW50IGNhcHMgKi8KLSAgICBvdXRjYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChjYXBzLCBnbG9iYWxfY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgLyogdGhlIGZpcnN0IHB0IHdpbGwgYmUgdGhlIGRlZmF1bHQgKi8KLSAgICBpZiAoc3RyZWFtLT5wdG1hcC0+bGVuID09IDApCi0gICAgICBzdHJlYW0tPmRlZmF1bHRfcHQgPSBwdDsKLQotICAgIGl0ZW0ucHQgPSBwdDsKLSAgICBpdGVtLmNhcHMgPSBvdXRjYXBzOwotCi0gICAgZ19hcnJheV9hcHBlbmRfdmFsIChzdHJlYW0tPnB0bWFwLCBpdGVtKTsKLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChnbG9iYWxfY2Fwcyk7Ci0gIHJldHVybjsKLQotbm9fcHJvdG86Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJjYW4ndCBmaW5kIHByb3RvIGluIG1lZGlhIik7Ci0gICAgcmV0dXJuOwotICB9Ci11bmtub3duX3Byb3RvOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc3JjLCAidW5rbm93biBwcm90byBpbiBtZWRpYSAlcyIsIHByb3RvKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdldF9hZ2dyZWdhdGVfY29udHJvbCAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgY29uc3QgZ2NoYXIgKmJhc2U7Ci0KLSAgaWYgKHNyYy0+Y29udHJvbCkKLSAgICBiYXNlID0gc3JjLT5jb250cm9sOwotICBlbHNlIGlmIChzcmMtPmNvbnRlbnRfYmFzZSkKLSAgICBiYXNlID0gc3JjLT5jb250ZW50X2Jhc2U7Ci0gIGVsc2UgaWYgKHNyYy0+Y29ubmluZm8udXJsX3N0cikKLSAgICBiYXNlID0gc3JjLT5jb25uaW5mby51cmxfc3RyOwotICBlbHNlCi0gICAgYmFzZSA9ICIvIjsKLQotICByZXR1cm4gYmFzZTsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFyX3B0bWFwX2l0ZW0gKFB0TWFwSXRlbSAqIGl0ZW0pCi17Ci0gIGlmIChpdGVtLT5jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChpdGVtLT5jYXBzKTsKLX0KLQotc3RhdGljIEdzdFJUU1BTdHJlYW0gKgotZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSAoR3N0UlRTUFNyYyAqIHNyYywgR3N0U0RQTWVzc2FnZSAqIHNkcCwgZ2ludCBpZHgsCi0gICAgZ2ludCBuX3N0cmVhbXMpCi17Ci0gIEdzdFJUU1BTdHJlYW0gKnN0cmVhbTsKLSAgY29uc3QgZ2NoYXIgKmNvbnRyb2xfdXJsOwotICBjb25zdCBHc3RTRFBNZWRpYSAqbWVkaWE7Ci0KLSAgLyogZ2V0IG1lZGlhLCBzaG91bGQgbm90IHJldHVybiBOVUxMICovCi0gIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYSAoc2RwLCBpZHgpOwotICBpZiAobWVkaWEgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBzdHJlYW0gPSBnX25ldzAgKEdzdFJUU1BTdHJlYW0sIDEpOwotICBzdHJlYW0tPnBhcmVudCA9IHNyYzsKLSAgLyogd2UgbWFyayB0aGUgcGFkIGFzIG5vdCBsaW5rZWQsIHdlIHdpbGwgbWFyayBpdCBhcyBPSyB3aGVuIHdlIGFkZCB0aGUgcGFkIHRvCi0gICAqIHRoZSBlbGVtZW50LiAqLwotICBzdHJlYW0tPmxhc3RfcmV0ID0gR1NUX0ZMT1dfTk9UX0xJTktFRDsKLSAgc3RyZWFtLT5hZGRlZCA9IEZBTFNFOwotICBzdHJlYW0tPnNldHVwID0gRkFMU0U7Ci0gIHN0cmVhbS0+c2tpcHBlZCA9IEZBTFNFOwotICBzdHJlYW0tPmlkID0gaWR4OwotICBzdHJlYW0tPmVvcyA9IEZBTFNFOwotICBzdHJlYW0tPmRpc2NvbnQgPSBUUlVFOwotICBzdHJlYW0tPnNlcWJhc2UgPSAtMTsKLSAgc3RyZWFtLT50aW1lYmFzZSA9IC0xOwotICBzdHJlYW0tPnNlbmRfc3NyYyA9IGdfcmFuZG9tX2ludCAoKTsKLSAgc3RyZWFtLT5wcm9maWxlID0gR1NUX1JUU1BfUFJPRklMRV9BVlA7Ci0gIHN0cmVhbS0+cHRtYXAgPSBnX2FycmF5X25ldyAoRkFMU0UsIEZBTFNFLCBzaXplb2YgKFB0TWFwSXRlbSkpOwotICBzdHJlYW0tPm1pa2V5ID0gTlVMTDsKLSAgZ19hcnJheV9zZXRfY2xlYXJfZnVuYyAoc3RyZWFtLT5wdG1hcCwgKEdEZXN0cm95Tm90aWZ5KSBjbGVhcl9wdG1hcF9pdGVtKTsKLQotICAvKiBjb2xsZWN0IGJhbmR3aWR0aCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBzdGVhbS4gRklYTUUsIGNvbmZpZ3VyZSBpbiB0aGUgUlRQCi0gICAqIHNlc3Npb24gbWFuYWdlciB0byBzY2FsZSBSVENQLiAqLwotICBnc3RfcnRzcHNyY19jb2xsZWN0X2JhbmR3aWR0aCAoc3JjLCBzZHAsIG1lZGlhLCBzdHJlYW0pOwotCi0gIC8qIGNvbGxlY3QgY29ubmVjdGlvbiBpbmZvICovCi0gIGdzdF9ydHNwc3JjX2NvbGxlY3RfY29ubmVjdGlvbnMgKHNyYywgc2RwLCBtZWRpYSwgc3RyZWFtKTsKLQotICAvKiBtYWtlIHRoZSBwYXlsb2FkIHR5cGUgbWFwICovCi0gIGdzdF9ydHNwc3JjX2NvbGxlY3RfcGF5bG9hZHMgKHNyYywgc2RwLCBtZWRpYSwgc3RyZWFtKTsKLQotICAvKiBjb2xsZWN0IHBvcnQgbnVtYmVyICovCi0gIHN0cmVhbS0+cG9ydCA9IGdzdF9zZHBfbWVkaWFfZ2V0X3BvcnQgKG1lZGlhKTsKLQotICAvKiBnZXQgY29udHJvbCB1cmwgdG8gY29uc3RydWN0IHRoZSBzZXR1cCB1cmwuIFRoZSBzZXR1cCB1cmwgaXMgdXNlZCB0bwotICAgKiBjb25maWd1cmUgdGhlIHRyYW5zcG9ydCBvZiB0aGUgc3RyZWFtIGFuZCBpcyB1c2VkIHRvIGlkZW50aXR5IHRoZSBzdHJlYW0gaW4KLSAgICogdGhlIFJUUC1JbmZvIGhlYWRlciBmaWVsZCByZXR1cm5lZCBmcm9tIFBMQVkuICovCi0gIGNvbnRyb2xfdXJsID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbCAobWVkaWEsICJjb250cm9sIik7Ci0gIGlmIChjb250cm9sX3VybCA9PSBOVUxMKQotICAgIGNvbnRyb2xfdXJsID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9hdHRyaWJ1dGVfdmFsX24gKHNkcCwgImNvbnRyb2wiLCAwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdHJlYW0gJWQsICglcCkiLCBzdHJlYW0tPmlkLCBzdHJlYW0pOwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICIgcG9ydDogJWQiLCBzdHJlYW0tPnBvcnQpOwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICIgY29udGFpbmVyOiAlZCIsIHN0cmVhbS0+Y29udGFpbmVyKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiIGNvbnRyb2w6ICVzIiwgR1NUX1NUUl9OVUxMIChjb250cm9sX3VybCkpOwotCi0gIC8qIFJGQyAyMzI2LCBDLjM6IG1pc3NpbmcgY29udHJvbF91cmwgcGVybWl0dGVkIGluIGNhc2Ugb2YgYSBzaW5nbGUgc3RyZWFtICovCi0gIGlmIChjb250cm9sX3VybCA9PSBOVUxMICYmIG5fc3RyZWFtcyA9PSAxKSB7Ci0gICAgY29udHJvbF91cmwgPSAiIjsKLSAgfQotCi0gIGlmIChjb250cm9sX3VybCAhPSBOVUxMKSB7Ci0gICAgc3RyZWFtLT5jb250cm9sX3VybCA9IGdfc3RyZHVwIChjb250cm9sX3VybCk7Ci0gICAgLyogQnVpbGQgYSBmdWxseSBxdWFsaWZpZWQgdXJsIHVzaW5nIHRoZSBjb250ZW50X2Jhc2UgaWYgYW55IG9yIGJ5IHByZWZpeGluZwotICAgICAqIHRoZSBvcmlnaW5hbCByZXF1ZXN0LgotICAgICAqIElmIHRoZSBjb250cm9sX3VybCBzdGFydHMgd2l0aCBhICcvJyBvciBhIG5vbiBydHNwOiBwcm90b2NvbCB3ZSB3aWxsIG1vc3QKLSAgICAgKiBsaWtlbHkgYnVpbGQgYSBVUkwgdGhhdCB0aGUgc2VydmVyIHdpbGwgZmFpbCB0byB1bmRlcnN0YW5kLCB0aGlzIGlzIG9rLAotICAgICAqIHdlIHdpbGwgZmFpbCB0aGVuLiAqLwotICAgIGlmIChnX3N0cl9oYXNfcHJlZml4IChjb250cm9sX3VybCwgInJ0c3A6Ly8iKSkKLSAgICAgIHN0cmVhbS0+Y29ubmluZm8ubG9jYXRpb24gPSBnX3N0cmR1cCAoY29udHJvbF91cmwpOwotICAgIGVsc2UgewotICAgICAgY29uc3QgZ2NoYXIgKmJhc2U7Ci0gICAgICBnYm9vbGVhbiBoYXNfc2xhc2g7Ci0KLSAgICAgIGlmIChnX3N0cmNtcDAgKGNvbnRyb2xfdXJsLCAiKiIpID09IDApCi0gICAgICAgIGNvbnRyb2xfdXJsID0gIiI7Ci0KLSAgICAgIGJhc2UgPSBnZXRfYWdncmVnYXRlX2NvbnRyb2wgKHNyYyk7Ci0KLSAgICAgIC8qIGNoZWNrIGlmIHRoZSBiYXNlIGVuZHMgb3IgY29udHJvbCBzdGFydHMgd2l0aCAvICovCi0gICAgICBoYXNfc2xhc2ggPSBnX3N0cl9oYXNfcHJlZml4IChjb250cm9sX3VybCwgIi8iKTsKLSAgICAgIGhhc19zbGFzaCA9IGhhc19zbGFzaCB8fCBnX3N0cl9oYXNfc3VmZml4IChiYXNlLCAiLyIpOwotCi0gICAgICAvKiBjb25jYXRlbmF0ZSB0aGUgdHdvIHN0cmluZ3MsIGluc2VydCAvIHdoZW4gbm90IHByZXNlbnQgKi8KLSAgICAgIHN0cmVhbS0+Y29ubmluZm8ubG9jYXRpb24gPQotICAgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoIiVzJXMlcyIsIGJhc2UsIGhhc19zbGFzaCA/ICIiIDogIi8iLCBjb250cm9sX3VybCk7Ci0gICAgfQotICB9Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIiBzZXR1cDogJXMiLAotICAgICAgR1NUX1NUUl9OVUxMIChzdHJlYW0tPmNvbm5pbmZvLmxvY2F0aW9uKSk7Ci0KLSAgLyogd2Uga2VlcCB0cmFjayBvZiBhbGwgc3RyZWFtcyAqLwotICBzcmMtPnN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kIChzcmMtPnN0cmVhbXMsIHN0cmVhbSk7Ci0KLSAgcmV0dXJuIHN0cmVhbTsKLQotICAvKiBFUlJPUlMgKi8KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX3N0cmVhbV9mcmVlIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtKQotewotICBnaW50IGk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZnJlZSBzdHJlYW0gJXAiLCBzdHJlYW0pOwotCi0gIGdfYXJyYXlfZnJlZSAoc3RyZWFtLT5wdG1hcCwgVFJVRSk7Ci0KLSAgZ19mcmVlIChzdHJlYW0tPmRlc3RpbmF0aW9uKTsKLSAgZ19mcmVlIChzdHJlYW0tPmNvbnRyb2xfdXJsKTsKLSAgZ19mcmVlIChzdHJlYW0tPmNvbm5pbmZvLmxvY2F0aW9uKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgaWYgKHN0cmVhbS0+dWRwc3JjW2ldKSB7Ci0gICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHN0cmVhbS0+dWRwc3JjW2ldLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTl9DQVNUIChzcmMpLCBzdHJlYW0tPnVkcHNyY1tpXSk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPnVkcHNyY1tpXSk7Ci0gICAgfQotICAgIGlmIChzdHJlYW0tPmNoYW5uZWxwYWRbaV0pCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPmNoYW5uZWxwYWRbaV0pOwotCi0gICAgaWYgKHN0cmVhbS0+dWRwc2lua1tpXSkgewotICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzdHJlYW0tPnVkcHNpbmtbaV0sIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOX0NBU1QgKHNyYyksIHN0cmVhbS0+dWRwc2lua1tpXSk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPnVkcHNpbmtbaV0pOwotICAgIH0KLSAgfQotICBpZiAoc3RyZWFtLT5mYWtlc3JjKSB7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzdHJlYW0tPmZha2VzcmMsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3RfYmluX3JlbW92ZSAoR1NUX0JJTl9DQVNUIChzcmMpLCBzdHJlYW0tPmZha2VzcmMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbS0+ZmFrZXNyYyk7Ci0gIH0KLSAgaWYgKHN0cmVhbS0+c3JjcGFkKSB7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzdHJlYW0tPnNyY3BhZCwgRkFMU0UpOwotICAgIGlmIChzdHJlYW0tPmFkZGVkKQotICAgICAgZ3N0X2VsZW1lbnRfcmVtb3ZlX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoc3JjKSwgc3RyZWFtLT5zcmNwYWQpOwotICB9Ci0gIGlmIChzdHJlYW0tPnNydHBlbmMpCi0gICAgZ3N0X29iamVjdF91bnJlZiAoc3RyZWFtLT5zcnRwZW5jKTsKLSAgaWYgKHN0cmVhbS0+c3J0cGRlYykKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPnNydHBkZWMpOwotICBpZiAoc3RyZWFtLT5zcnRjcHBhcmFtcykKLSAgICBnc3RfY2Fwc191bnJlZiAoc3RyZWFtLT5zcnRjcHBhcmFtcyk7Ci0gIGlmIChzdHJlYW0tPm1pa2V5KQotICAgIGdzdF9taWtleV9tZXNzYWdlX3VucmVmIChzdHJlYW0tPm1pa2V5KTsKLSAgaWYgKHN0cmVhbS0+cnRjcHBhZCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPnJ0Y3BwYWQpOwotICBpZiAoc3RyZWFtLT5zZXNzaW9uKQotICAgIGdfb2JqZWN0X3VucmVmIChzdHJlYW0tPnNlc3Npb24pOwotICBpZiAoc3RyZWFtLT5ydHhfcHRfbWFwKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RyZWFtLT5ydHhfcHRfbWFwKTsKLSAgZ19mcmVlIChzdHJlYW0pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfY2xlYW51cCAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgR0xpc3QgKndhbGs7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2xlYW51cCIpOwotCi0gIGZvciAod2FsayA9IHNyYy0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIHdhbGstPmRhdGE7Ci0KLSAgICBnc3RfcnRzcHNyY19zdHJlYW1fZnJlZSAoc3JjLCBzdHJlYW0pOwotICB9Ci0gIGdfbGlzdF9mcmVlIChzcmMtPnN0cmVhbXMpOwotICBzcmMtPnN0cmVhbXMgPSBOVUxMOwotICBpZiAoc3JjLT5tYW5hZ2VyKSB7Ci0gICAgaWYgKHNyYy0+bWFuYWdlcl9zaWdfaWQpIHsKLSAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoc3JjLT5tYW5hZ2VyLCBzcmMtPm1hbmFnZXJfc2lnX2lkKTsKLSAgICAgIHNyYy0+bWFuYWdlcl9zaWdfaWQgPSAwOwotICAgIH0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYy0+bWFuYWdlciwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9iaW5fcmVtb3ZlIChHU1RfQklOX0NBU1QgKHNyYyksIHNyYy0+bWFuYWdlcik7Ci0gICAgc3JjLT5tYW5hZ2VyID0gTlVMTDsKLSAgfQotICBpZiAoc3JjLT5wcm9wcykKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHNyYy0+cHJvcHMpOwotICBzcmMtPnByb3BzID0gTlVMTDsKLQotICBnX2ZyZWUgKHNyYy0+Y29udGVudF9iYXNlKTsKLSAgc3JjLT5jb250ZW50X2Jhc2UgPSBOVUxMOwotCi0gIGdfZnJlZSAoc3JjLT5jb250cm9sKTsKLSAgc3JjLT5jb250cm9sID0gTlVMTDsKLQotICBpZiAoc3JjLT5yYW5nZSkKLSAgICBnc3RfcnRzcF9yYW5nZV9mcmVlIChzcmMtPnJhbmdlKTsKLSAgc3JjLT5yYW5nZSA9IE5VTEw7Ci0KLSAgLyogZG9uJ3QgY2xlYXIgdGhlIFNEUCB3aGVuIGl0IHdhcyB1c2VkIGluIHRoZSB1cmwgKi8KLSAgaWYgKHNyYy0+c2RwICYmICFzcmMtPmZyb21fc2RwKSB7Ci0gICAgZ3N0X3NkcF9tZXNzYWdlX2ZyZWUgKHNyYy0+c2RwKTsKLSAgICBzcmMtPnNkcCA9IE5VTEw7Ci0gIH0KLQotICBzcmMtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotCi0gIGlmIChzcmMtPnByb3ZpZGVkX2Nsb2NrKSB7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc3JjLT5wcm92aWRlZF9jbG9jayk7Ci0gICAgc3JjLT5wcm92aWRlZF9jbG9jayA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19hbGxvY191ZHBfcG9ydHMgKEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0sCi0gICAgZ2ludCAqIHJ0cHBvcnQsIGdpbnQgKiBydGNwcG9ydCkKLXsKLSAgR3N0UlRTUFNyYyAqc3JjOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdEVsZW1lbnQgKnVkcHNyYzAsICp1ZHBzcmMxOwotICBnaW50IHRtcF9ydHAsIHRtcF9ydGNwOwotICBndWludCBjb3VudDsKLSAgY29uc3QgZ2NoYXIgKmhvc3Q7Ci0KLSAgc3JjID0gc3RyZWFtLT5wYXJlbnQ7Ci0KLSAgdWRwc3JjMCA9IE5VTEw7Ci0gIHVkcHNyYzEgPSBOVUxMOwotICBjb3VudCA9IDA7Ci0KLSAgLyogU3RhcnQgYXQgbmV4dCBwb3J0ICovCi0gIHRtcF9ydHAgPSBzcmMtPm5leHRfcG9ydF9udW07Ci0KLSAgaWYgKHN0cmVhbS0+aXNfaXB2NikKLSAgICBob3N0ID0gInVkcDovL1s6OjBdIjsKLSAgZWxzZQotICAgIGhvc3QgPSAidWRwOi8vMC4wLjAuMCI7Ci0KLSAgLyogdHJ5IHRvIGFsbG9jYXRlIDIgVURQIHBvcnRzLCB0aGUgUlRQIHBvcnQgc2hvdWxkIGJlIGFuIGV2ZW4KLSAgICogbnVtYmVyIGFuZCB0aGUgUlRDUCBwb3J0IHNob3VsZCBiZSB0aGUgbmV4dCAodW5ldmVuKSBwb3J0ICovCi1hZ2FpbjoKLQotICBpZiAodG1wX3J0cCAhPSAwICYmIHNyYy0+Y2xpZW50X3BvcnRfcmFuZ2UubWF4ID4gMCAmJgotICAgICAgdG1wX3J0cCA+PSBzcmMtPmNsaWVudF9wb3J0X3JhbmdlLm1heCkKLSAgICBnb3RvIG5vX3BvcnRzOwotCi0gIHVkcHNyYzAgPSBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIChHU1RfVVJJX1NSQywgaG9zdCwgTlVMTCwgTlVMTCk7Ci0gIGlmICh1ZHBzcmMwID09IE5VTEwpCi0gICAgZ290byBub191ZHBfcHJvdG9jb2w7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHVkcHNyYzApLCAicG9ydCIsIHRtcF9ydHAsICJyZXVzZSIsIEZBTFNFLCBOVUxMKTsKLQotICBpZiAoc3JjLT51ZHBfYnVmZmVyX3NpemUgIT0gMCkKLSAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUICh1ZHBzcmMwKSwgImJ1ZmZlci1zaXplIiwgc3JjLT51ZHBfYnVmZmVyX3NpemUsCi0gICAgICAgIE5VTEwpOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodWRwc3JjMCwgR1NUX1NUQVRFX1JFQURZKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBpZiAodG1wX3J0cCAhPSAwKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJVbmFibGUgdG8gbWFrZSB1ZHBzcmMgZnJvbSBSVFAgcG9ydCAlZCIsIHRtcF9ydHApOwotCi0gICAgICB0bXBfcnRwICs9IDI7Ci0gICAgICBpZiAoKytjb3VudCA+IHNyYy0+cmV0cnkpCi0gICAgICAgIGdvdG8gbm9fcG9ydHM7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZyZWUgUlRQIHVkcHNyYyIpOwotICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh1ZHBzcmMwLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmICh1ZHBzcmMwKTsKLSAgICAgIHVkcHNyYzAgPSBOVUxMOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJyZXRyeSAlZCIsIGNvdW50KTsKLSAgICAgIGdvdG8gYWdhaW47Ci0gICAgfQotICAgIGdvdG8gbm9fdWRwX3Byb3RvY29sOwotICB9Ci0KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAodWRwc3JjMCksICJwb3J0IiwgJnRtcF9ydHAsIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3QgUlRQIHBvcnQgJWQiLCB0bXBfcnRwKTsKLQotICAvKiBjaGVjayBpZiBwb3J0IGlzIGV2ZW4gKi8KLSAgaWYgKCh0bXBfcnRwICYgMHgwMSkgIT0gMCkgewotICAgIC8qIHBvcnQgbm90IGV2ZW4sIGNsb3NlIGFuZCBhbGxvY2F0ZSBhbm90aGVyICovCi0gICAgaWYgKCsrY291bnQgPiBzcmMtPnJldHJ5KQotICAgICAgZ290byBub19wb3J0czsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlJUUCBwb3J0IG5vdCBldmVuIik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmcmVlIFJUUCB1ZHBzcmMiKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHVkcHNyYzAsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmICh1ZHBzcmMwKTsKLSAgICB1ZHBzcmMwID0gTlVMTDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInJldHJ5ICVkIiwgY291bnQpOwotICAgIHRtcF9ydHArKzsKLSAgICBnb3RvIGFnYWluOwotICB9Ci0KLSAgLyogYWxsb2NhdGUgcG9ydCsxIGZvciBSVENQIG5vdyAqLwotICB1ZHBzcmMxID0gZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TUkMsIGhvc3QsIE5VTEwsIE5VTEwpOwotICBpZiAodWRwc3JjMSA9PSBOVUxMKQotICAgIGdvdG8gbm9fdWRwX3J0Y3BfcHJvdG9jb2w7Ci0KLSAgLyogc2V0IHBvcnQgKi8KLSAgdG1wX3J0Y3AgPSB0bXBfcnRwICsgMTsKLSAgaWYgKHNyYy0+Y2xpZW50X3BvcnRfcmFuZ2UubWF4ID4gMCAmJiB0bXBfcnRjcCA+IHNyYy0+Y2xpZW50X3BvcnRfcmFuZ2UubWF4KQotICAgIGdvdG8gbm9fcG9ydHM7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAodWRwc3JjMSksICJwb3J0IiwgdG1wX3J0Y3AsICJyZXVzZSIsIEZBTFNFLCBOVUxMKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdGFydGluZyBSVENQIG9uIHBvcnQgJWQiLCB0bXBfcnRjcCk7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodWRwc3JjMSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgLyogdG1wX3J0Y3AgcG9ydCBpcyBidXN5IGFscmVhZHkgOiByZXRyeSB0byBtYWtlIHJ0cC9ydGNwIHBhaXIgKi8KLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJVbmFibGUgdG8gbWFrZSB1ZHBzcmMgZnJvbSBSVENQIHBvcnQgJWQiLCB0bXBfcnRjcCk7Ci0KLSAgICBpZiAoKytjb3VudCA+IHNyYy0+cmV0cnkpCi0gICAgICBnb3RvIG5vX3BvcnRzOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZnJlZSBSVFAgdWRwc3JjIik7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh1ZHBzcmMwLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAodWRwc3JjMCk7Ci0gICAgdWRwc3JjMCA9IE5VTEw7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmcmVlIFJUQ1AgdWRwc3JjIik7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh1ZHBzcmMxLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAodWRwc3JjMSk7Ci0gICAgdWRwc3JjMSA9IE5VTEw7Ci0KLSAgICB0bXBfcnRwICs9IDI7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmV0cnkgJWQiLCBjb3VudCk7Ci0gICAgZ290byBhZ2FpbjsKLSAgfQotCi0gIC8qIGFsbCBmaW5lLCBkbyBwb3J0IGNoZWNrICovCi0gIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHVkcHNyYzApLCAicG9ydCIsIHJ0cHBvcnQsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKEdfT0JKRUNUICh1ZHBzcmMxKSwgInBvcnQiLCBydGNwcG9ydCwgTlVMTCk7Ci0KLSAgLyogdGhpcyBzaG91bGQgbm90IGhhcHBlbi4uLiAqLwotICBpZiAoKnJ0cHBvcnQgIT0gdG1wX3J0cCB8fCAqcnRjcHBvcnQgIT0gdG1wX3J0Y3ApCi0gICAgZ290byBwb3J0X2Vycm9yOwotCi0gIC8qIHdlIGtlZXAgdGhlc2UgZWxlbWVudHMsIHdlIGNvbmZpZ3VyZSBhbGwgaW4gY29uZmlndXJlX3RyYW5zcG9ydCB3aGVuIHRoZQotICAgKiBzZXJ2ZXIgdG9sZCB1cyB0byByZWFsbHkgdXNlIHRoZSBVRFAgcG9ydHMuICovCi0gIHN0cmVhbS0+dWRwc3JjWzBdID0gZ3N0X29iamVjdF9yZWZfc2luayAodWRwc3JjMCk7Ci0gIHN0cmVhbS0+dWRwc3JjWzFdID0gZ3N0X29iamVjdF9yZWZfc2luayAodWRwc3JjMSk7Ci0gIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHN0cmVhbS0+dWRwc3JjWzBdLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc3RyZWFtLT51ZHBzcmNbMV0sIFRSVUUpOwotCi0gIC8qIGtlZXAgdHJhY2sgb2YgbmV4dCBhdmFpbGFibGUgcG9ydCBudW1iZXIgd2hlbiB3ZSBoYXZlIGEgcmFuZ2UKLSAgICogY29uZmlndXJlZCAqLwotICBpZiAoc3JjLT5uZXh0X3BvcnRfbnVtICE9IDApCi0gICAgc3JjLT5uZXh0X3BvcnRfbnVtID0gdG1wX3J0Y3AgKyAxOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fdWRwX3Byb3RvY29sOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY291bGQgbm90IGdldCBVRFAgc291cmNlIik7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci1ub19wb3J0czoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvdWxkIG5vdCBhbGxvY2F0ZSBVRFAgcG9ydCBwYWlyIGFmdGVyICVkIHJldHJpZXMiLAotICAgICAgICBjb3VudCk7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci1ub191ZHBfcnRjcF9wcm90b2NvbDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvdWxkIG5vdCBnZXQgVURQIHNvdXJjZSBmb3IgUlRDUCIpOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotcG9ydF9lcnJvcjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBvcnRzIGRvbid0IG1hdGNoIHJ0cDogJWQ8LT4lZCwgcnRjcDogJWQ8LT4lZCIsCi0gICAgICAgIHRtcF9ydHAsICpydHBwb3J0LCB0bXBfcnRjcCwgKnJ0Y3Bwb3J0KTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLWNsZWFudXA6Ci0gIHsKLSAgICBpZiAodWRwc3JjMCkgewotICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh1ZHBzcmMwLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmICh1ZHBzcmMwKTsKLSAgICB9Ci0gICAgaWYgKHVkcHNyYzEpIHsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodWRwc3JjMSwgR1NUX1NUQVRFX05VTEwpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAodWRwc3JjMSk7Ci0gICAgfQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfc2V0X3N0YXRlIChHc3RSVFNQU3JjICogc3JjLCBHc3RTdGF0ZSBzdGF0ZSkKLXsKLSAgR0xpc3QgKndhbGs7Ci0KLSAgaWYgKHNyYy0+bWFuYWdlcikKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UX0NBU1QgKHNyYy0+bWFuYWdlciksIHN0YXRlKTsKLQotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSB3YWxrLT5kYXRhOwotICAgIGdpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIGlmIChzdHJlYW0tPnVkcHNyY1tpXSkKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzdHJlYW0tPnVkcHNyY1tpXSwgc3RhdGUpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfZmx1c2ggKEdzdFJUU1BTcmMgKiBzcmMsIGdib29sZWFuIGZsdXNoLCBnYm9vbGVhbiBwbGF5aW5nKQotewotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdpbnQgY21kOwotICBHc3RTdGF0ZSBzdGF0ZTsKLQotICBpZiAoZmx1c2gpIHsKLSAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RhcnQgZmx1c2giKTsKLSAgICBjbWQgPSBDTURfV0FJVDsKLSAgICBzdGF0ZSA9IEdTVF9TVEFURV9QQVVTRUQ7Ci0gIH0gZWxzZSB7Ci0gICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0b3AgKEZBTFNFKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdG9wIGZsdXNoOyBwbGF5aW5nICVkIiwgcGxheWluZyk7Ci0gICAgY21kID0gQ01EX0xPT1A7Ci0gICAgaWYgKHBsYXlpbmcpCi0gICAgICBzdGF0ZSA9IEdTVF9TVEFURV9QTEFZSU5HOwotICAgIGVsc2UKLSAgICAgIHN0YXRlID0gR1NUX1NUQVRFX1BBVVNFRDsKLSAgfQotICBnc3RfcnRzcHNyY19wdXNoX2V2ZW50IChzcmMsIGV2ZW50KTsKLSAgZ3N0X3J0c3BzcmNfbG9vcF9zZW5kX2NtZCAoc3JjLCBjbWQsIENNRF9MT09QKTsKLSAgZ3N0X3J0c3BzcmNfc2V0X3N0YXRlIChzcmMsIHN0YXRlKTsKLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fc2VuZCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUENvbm5lY3Rpb24gKiBjb25uLAotICAgIEdzdFJUU1BNZXNzYWdlICogbWVzc2FnZSwgR1RpbWVWYWwgKiB0aW1lb3V0KQotewotICBHc3RSVFNQUmVzdWx0IHJldDsKLQotICBpZiAoY29ubikKLSAgICByZXQgPSBnc3RfcnRzcF9jb25uZWN0aW9uX3NlbmQgKGNvbm4sIG1lc3NhZ2UsIHRpbWVvdXQpOwotICBlbHNlCi0gICAgcmV0ID0gR1NUX1JUU1BfRVJST1I7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fcmVjZWl2ZSAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUENvbm5lY3Rpb24gKiBjb25uLAotICAgIEdzdFJUU1BNZXNzYWdlICogbWVzc2FnZSwgR1RpbWVWYWwgKiB0aW1lb3V0KQotewotICBHc3RSVFNQUmVzdWx0IHJldDsKLQotICBpZiAoY29ubikKLSAgICByZXQgPSBnc3RfcnRzcF9jb25uZWN0aW9uX3JlY2VpdmUgKGNvbm4sIG1lc3NhZ2UsIHRpbWVvdXQpOwotICBlbHNlCi0gICAgcmV0ID0gR1NUX1JUU1BfRVJST1I7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX2dldF9wb3NpdGlvbiAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgR3N0UXVlcnkgKnF1ZXJ5OwotICBHTGlzdCAqd2FsazsKLQotICBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24gKEdTVF9GT1JNQVRfVElNRSk7Ci0gIC8qICBzaG91bGQgYmUga25vd24gc29tZXdoZXJlIGRvd24gdGhlIHN0cmVhbSAoZS5nLiBqaXR0ZXJidWZmZXIpICovCi0gIGZvciAod2FsayA9IHNyYy0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIHdhbGstPmRhdGE7Ci0gICAgR3N0Rm9ybWF0IGZtdDsKLSAgICBnaW50NjQgcG9zOwotCi0gICAgaWYgKHN0cmVhbS0+c3JjcGFkKSB7Ci0gICAgICBpZiAoZ3N0X3BhZF9xdWVyeSAoc3RyZWFtLT5zcmNwYWQsIHF1ZXJ5KSkgewotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24gKHF1ZXJ5LCAmZm10LCAmcG9zKTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmV0YWluaW5nIHBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHBvcykpOwotICAgICAgICBzcmMtPmxhc3RfcG9zID0gcG9zOwotICAgICAgICBnb3RvIG91dDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzcmMtPmxhc3RfcG9zID0gMDsKLQotb3V0OgotCi0gIGdzdF9xdWVyeV91bnJlZiAocXVlcnkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3BlcmZvcm1fc2VlayAoR3N0UlRTUFNyYyAqIHNyYywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2RvdWJsZSByYXRlOwotICBHc3RGb3JtYXQgZm9ybWF0OwotICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gIEdzdFNlZWtUeXBlIGN1cl90eXBlID0gR1NUX1NFRUtfVFlQRV9OT05FLCBzdG9wX3R5cGU7Ci0gIGdpbnQ2NCBjdXIsIHN0b3A7Ci0gIGdib29sZWFuIGZsdXNoLCBza2lwOwotICBnYm9vbGVhbiB1cGRhdGU7Ci0gIGdib29sZWFuIHBsYXlpbmc7Ci0gIEdzdFNlZ21lbnQgc2Vla3NlZ21lbnQgPSB7IDAsIH07Ci0gIEdMaXN0ICp3YWxrOwotCi0gIGlmIChldmVudCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImRvaW5nIHNlZWsgd2l0aCBldmVudCIpOwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX3NlZWsgKGV2ZW50LCAmcmF0ZSwgJmZvcm1hdCwgJmZsYWdzLAotICAgICAgICAmY3VyX3R5cGUsICZjdXIsICZzdG9wX3R5cGUsICZzdG9wKTsKLQotICAgIC8qIG5vIG5lZ2F0aXZlIHJhdGVzIHlldCAqLwotICAgIGlmIChyYXRlIDwgMC4wKQotICAgICAgZ290byBuZWdhdGl2ZV9yYXRlOwotCi0gICAgLyogd2UgbmVlZCBUSU1FIGZvcm1hdCAqLwotICAgIGlmIChmb3JtYXQgIT0gc3JjLT5zZWdtZW50LmZvcm1hdCkKLSAgICAgIGdvdG8gbm9fZm9ybWF0OwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImRvaW5nIHNlZWsgd2l0aG91dCBldmVudCIpOwotICAgIGZsYWdzID0gMDsKLSAgICBjdXJfdHlwZSA9IEdTVF9TRUVLX1RZUEVfU0VUOwotICAgIHN0b3BfdHlwZSA9IEdTVF9TRUVLX1RZUEVfU0VUOwotICB9Ci0KLSAgLyogZ2V0IGZsdXNoIGZsYWcgKi8KLSAgZmx1c2ggPSBmbGFncyAmIEdTVF9TRUVLX0ZMQUdfRkxVU0g7Ci0gIHNraXAgPSBmbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0tJUDsKLQotICAvKiBub3cgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHN0cmVhbWluZyB0aHJlYWQgaXMgc3RvcHBlZC4gV2UgZG8gdGhpcyBieQotICAgKiBlaXRoZXIgc2VuZGluZyBhIEZMVVNIX1NUQVJUIGV2ZW50IGRvd25zdHJlYW0gd2hpY2ggd2lsbCBjYXVzZSB0aGUKLSAgICogc3RyZWFtaW5nIHRocmVhZCB0byBzdG9wIHdpdGggYSBXUk9OR19TVEFURS4KLSAgICogRm9yIGEgbm9uLWZsdXNoaW5nIHNlZWsgd2Ugc2ltcGx5IHBhdXNlIHRoZSB0YXNrLCB3aGljaCB3aWxsIGhhcHBlbiBhcyBzb29uCi0gICAqIGFzIGl0IGNvbXBsZXRlcyBvbmUgaXRlcmF0aW9uIChhbmQgdGh1cyBtaWdodCBibG9jayB3aGVuIHRoZSBzaW5rIGlzCi0gICAqIGJsb2NraW5nIGluIHByZXJvbGwpLiAqLwotICBpZiAoZmx1c2gpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdGFydGluZyBmbHVzaCIpOwotICAgIGdzdF9ydHNwc3JjX2ZsdXNoIChzcmMsIFRSVUUsIEZBTFNFKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoc3JjLT50YXNrKSB7Ci0gICAgICBnc3RfdGFza19wYXVzZSAoc3JjLT50YXNrKTsKLSAgICB9Ci0gIH0KLQotICAvKiB3ZSBzaG91bGQgbm93IGJlIGFibGUgdG8gZ3JhYiB0aGUgc3RyZWFtaW5nIHRocmVhZCBiZWNhdXNlIHdlIHN0b3BwZWQgaXQKLSAgICogd2l0aCB0aGUgYWJvdmUgZmx1c2gvcGF1c2UgY29kZSAqLwotICBHU1RfUlRTUF9TVFJFQU1fTE9DSyAoc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdG9wcGVkIHN0cmVhbWluZyIpOwotCi0gIC8qIHN0b3AgZmx1c2hpbmcgdGhlIHJ0c3AgY29ubmVjdGlvbiBzbyB3ZSBjYW4gc2VuZCBQQVVTRS9QTEFZIGJlbG93ICovCi0gIGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fZmx1c2ggKHNyYywgRkFMU0UpOwotCi0gIC8qIGNvcHkgc2VnbWVudCwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0aGUgb2xkCi0gICAqIHNlZ21lbnQgd2hlbiB3ZSBjbG9zZSB0aGUgY3VycmVudCBzZWdtZW50LiAqLwotICBtZW1jcHkgKCZzZWVrc2VnbWVudCwgJnNyYy0+c2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgLyogY29uZmlndXJlIHRoZSBzZWVrIHBhcmFtZXRlcnMgaW4gdGhlIHNlZWtzZWdtZW50LiBXZSB3aWxsIHRoZW4gaGF2ZSB0aGUKLSAgICogcmlnaHQgdmFsdWVzIGluIHRoZSBzZWdtZW50IHRvIHBlcmZvcm0gdGhlIHNlZWsgKi8KLSAgaWYgKGV2ZW50KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY29uZmlndXJpbmcgc2VlayIpOwotICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWVrc2VnbWVudCwgcmF0ZSwgZm9ybWF0LCBmbGFncywKLSAgICAgICAgY3VyX3R5cGUsIGN1ciwgc3RvcF90eXBlLCBzdG9wLCAmdXBkYXRlKTsKLSAgfQotCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIGxhc3QgcG9zaXRpb24gd2UgbmVlZCB0byBwbGF5LiBJZiBpdCdzIGNvbmZpZ3VyZWQgKHN0b3AgIT0KLSAgICogLTEpLCB1c2UgdGhhdCwgZWxzZSB3ZSBwbGF5IHVudGlsIHRoZSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgZmlsZSAqLwotICBpZiAoKHN0b3AgPSBzZWVrc2VnbWVudC5zdG9wKSA9PSAtMSkKLSAgICBzdG9wID0gc2Vla3NlZ21lbnQuZHVyYXRpb247Ci0KLSAgLyogaWYgd2Ugd2VyZSBwbGF5aW5nLCBwYXVzZSBmaXJzdCAqLwotICBwbGF5aW5nID0gKHNyYy0+c3RhdGUgPT0gR1NUX1JUU1BfU1RBVEVfUExBWUlORyk7Ci0gIGlmIChwbGF5aW5nKSB7Ci0gICAgLyogb2J0YWluIGN1cnJlbnQgcG9zaXRpb24gaW4gY2FzZSBzZWVrIGZhaWxzICovCi0gICAgZ3N0X3J0c3BzcmNfZ2V0X3Bvc2l0aW9uIChzcmMpOwotICAgIGdzdF9ydHNwc3JjX3BhdXNlIChzcmMsIEZBTFNFKTsKLSAgfQotICBzcmMtPnNraXAgPSBza2lwOwotCi0gIHNyYy0+c3RhdGUgPSBHU1RfUlRTUF9TVEFURV9TRUVLSU5HOwotCi0gIC8qIFBMQVkgd2lsbCBhZGQgdGhlIHJhbmdlIGhlYWRlciBub3cuICovCi0gIHNyYy0+bmVlZF9yYW5nZSA9IFRSVUU7Ci0KLSAgLyogcHJlcGFyZSBmb3Igc3RyZWFtaW5nIGFnYWluICovCi0gIGlmIChmbHVzaCkgewotICAgIC8qIGlmIHdlIHN0YXJ0ZWQgZmx1c2gsIHdlIHN0b3Agbm93ICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RvcHBpbmcgZmx1c2giKTsKLSAgICBnc3RfcnRzcHNyY19mbHVzaCAoc3JjLCBGQUxTRSwgcGxheWluZyk7Ci0gIH0KLQotICAvKiBub3cgd2UgZGlkIHRoZSBzZWVrIGFuZCBjYW4gYWN0aXZhdGUgdGhlIG5ldyBzZWdtZW50IHZhbHVlcyAqLwotICBtZW1jcHkgKCZzcmMtPnNlZ21lbnQsICZzZWVrc2VnbWVudCwgc2l6ZW9mIChHc3RTZWdtZW50KSk7Ci0KLSAgLyogaWYgd2UncmUgZG9pbmcgYSBzZWdtZW50IHNlZWssIHBvc3QgYSBTRUdNRU5UX1NUQVJUIG1lc3NhZ2UgKi8KLSAgaWYgKHNyYy0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc3JjKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfc3RhcnQgKEdTVF9PQkpFQ1RfQ0FTVCAoc3JjKSwKLSAgICAgICAgICAgIHNyYy0+c2VnbWVudC5mb3JtYXQsIHNyYy0+c2VnbWVudC5wb3NpdGlvbikpOwotICB9Ci0KLSAgLyogbm93IGNyZWF0ZSB0aGUgbmV3c2VnbWVudCAqLwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJDcmVhdGluZyBuZXdzZWdtZW50IGZyb20gJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAiIHRvICUiIEdfR0lOVDY0X0ZPUk1BVCwgc3JjLT5zZWdtZW50LnBvc2l0aW9uLCBzdG9wKTsKLQotICAvKiBtYXJrIGRpc2NvbnQgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibWFyayBESVNDT05ULCB3ZSBkaWQgYSBzZWVrIHRvIGFub3RoZXIgcG9zaXRpb24iKTsKLSAgZm9yICh3YWxrID0gc3JjLT5zdHJlYW1zOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgd2Fsay0+ZGF0YTsKLSAgICBzdHJlYW0tPmRpc2NvbnQgPSBUUlVFOwotICB9Ci0KLSAgLyogYW5kIGNvbnRpbnVlIHBsYXlpbmcgaWYgbmVlZGVkICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgcGxheWluZyA9IChHU1RfU1RBVEVfUEVORElORyAoc3JjKSA9PSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HCi0gICAgICAmJiBHU1RfU1RBVEUgKHNyYykgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0gICAgICB8fCAoR1NUX1NUQVRFX1BFTkRJTkcgKHNyYykgPT0gR1NUX1NUQVRFX1BMQVlJTkcpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgaWYgKHBsYXlpbmcpCi0gICAgZ3N0X3J0c3BzcmNfcGxheSAoc3JjLCAmc2Vla3NlZ21lbnQsIEZBTFNFKTsKLQotICBHU1RfUlRTUF9TVFJFQU1fVU5MT0NLIChzcmMpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbmVnYXRpdmVfcmF0ZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5lZ2F0aXZlIHBsYXliYWNrIHJhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2Zvcm1hdDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVuc3VwcG9ydGVkIGZvcm1hdCBnaXZlbiwgc2VlayBhYm9ydGVkLiIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX2hhbmRsZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFJUU1BTcmMgKnNyYzsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgZ2Jvb2xlYW4gZm9yd2FyZDsKLQotICBzcmMgPSBHU1RfUlRTUFNSQ19DQVNUIChwYXJlbnQpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhZCAlczolcyByZWNlaXZlZCBldmVudCAlcyIsCi0gICAgICBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCksIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICAgIHJlcyA9IGdzdF9ydHNwc3JjX3BlcmZvcm1fc2VlayAoc3JjLCBldmVudCk7Ci0gICAgICBmb3J3YXJkID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9RT1M6Ci0gICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKLSAgICBjYXNlIEdTVF9FVkVOVF9MQVRFTkNZOgotICAgIGRlZmF1bHQ6Ci0gICAgICBmb3J3YXJkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIGlmIChmb3J3YXJkKSB7Ci0gICAgR3N0UGFkICp0YXJnZXQ7Ci0KLSAgICBpZiAoKHRhcmdldCA9IGdzdF9naG9zdF9wYWRfZ2V0X3RhcmdldCAoR1NUX0dIT1NUX1BBRF9DQVNUIChwYWQpKSkpIHsKLSAgICAgIHJlcyA9IGdzdF9wYWRfc2VuZF9ldmVudCAodGFyZ2V0LCBldmVudCk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi0vKiB0aGlzIGlzIHRoZSBmaW5hbCBldmVudCBmdW5jdGlvbiB3ZSByZWNlaXZlIG9uIHRoZSBpbnRlcm5hbCBzb3VyY2UgcGFkIHdoZW4KLSAqIHdlIGRlYWwgd2l0aCBUQ1AgY29ubmVjdGlvbnMgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfaGFuZGxlX2ludGVybmFsX3NyY19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIGV2ZW50ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgIGNhc2UgR1NUX0VWRU5UX1FPUzoKLSAgICBjYXNlIEdTVF9FVkVOVF9OQVZJR0FUSU9OOgotICAgIGNhc2UgR1NUX0VWRU5UX0xBVEVOQ1k6Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8qIHRoaXMgaXMgdGhlIGZpbmFsIHF1ZXJ5IGZ1bmN0aW9uIHdlIHJlY2VpdmUgb24gdGhlIGludGVybmFsIHNvdXJjZSBwYWQgd2hlbgotICogd2UgZGVhbCB3aXRoIFRDUCBjb25uZWN0aW9ucyAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19oYW5kbGVfaW50ZXJuYWxfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RSVFNQU3JjICpzcmM7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgc3JjID0gR1NUX1JUU1BTUkNfQ0FTVCAoZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwYWQgJXM6JXMgcmVjZWl2ZWQgcXVlcnkgJXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIC8qIG5vIGlkZWEgKi8KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfZHVyYXRpb24gKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsKLQotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbiAocXVlcnksIGZvcm1hdCwgc3JjLT5zZWdtZW50LmR1cmF0aW9uKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9MQVRFTkNZOgotICAgIHsKLSAgICAgIC8qIHdlIGFyZSBsaXZlIHdpdGggYSBtaW4gbGF0ZW5jeSBvZiAwIGFuZCB1bmxpbWl0ZWQgbWF4IGxhdGVuY3ksIHRoaXMKLSAgICAgICAqIHJlc3VsdCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIHNlc3Npb24gbWFuYWdlciBpZiB0aGVyZSBpcyBhbnkuICovCi0gICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBUUlVFLCAwLCAtMSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogdGhpcyBxdWVyeSBpcyBleGVjdXRlZCBvbiB0aGUgZ2hvc3Qgc291cmNlIHBhZCBleHBvc2VkIG9uIHJ0c3BzcmMuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX2hhbmRsZV9zcmNfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFJUU1BTcmMgKnNyYzsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgc3JjID0gR1NUX1JUU1BTUkNfQ0FTVCAocGFyZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwYWQgJXM6JXMgcmVjZWl2ZWQgcXVlcnkgJXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpLCBHU1RfUVVFUllfVFlQRV9OQU1FIChxdWVyeSkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm9ybWF0LCBzcmMtPnNlZ21lbnQuZHVyYXRpb24pOwotICAgICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VFS0lORzoKLSAgICB7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2Vfc2Vla2luZyAocXVlcnksICZmb3JtYXQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgZ2Jvb2xlYW4gc2Vla2FibGUgPQotICAgICAgICAgICAgc3JjLT5jdXJfcHJvdG9jb2xzICE9IEdTVF9SVFNQX0xPV0VSX1RSQU5TX1VEUF9NQ0FTVDsKLQotICAgICAgICAvKiBzZWVraW5nIHdpdGhvdXQgZHVyYXRpb24gaXMgdW5saWtlbHkgKi8KLSAgICAgICAgc2Vla2FibGUgPSBzZWVrYWJsZSAmJiBzcmMtPnNlZWthYmxlICYmIHNyYy0+c2VnbWVudC5kdXJhdGlvbiAmJgotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNyYy0+c2VnbWVudC5kdXJhdGlvbik7Ci0KLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrYWJsZSwgMCwKLSAgICAgICAgICAgIHNyYy0+c2VnbWVudC5kdXJhdGlvbik7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfVVJJOgotICAgIHsKLSAgICAgIGdjaGFyICp1cmk7Ci0KLSAgICAgIHVyaSA9IGdzdF9ydHNwc3JjX3VyaV9nZXRfdXJpIChHU1RfVVJJX0hBTkRMRVIgKHNyYykpOwotICAgICAgaWYgKHVyaSAhPSBOVUxMKSB7Ci0gICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpIChxdWVyeSwgdXJpKTsKLSAgICAgICAgZ19mcmVlICh1cmkpOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgewotICAgICAgR3N0UGFkICp0YXJnZXQgPSBnc3RfZ2hvc3RfcGFkX2dldF90YXJnZXQgKEdTVF9HSE9TVF9QQURfQ0FTVCAocGFkKSk7Ci0KLSAgICAgIC8qIGZvcndhcmQgdGhlIHF1ZXJ5IHRvIHRoZSBwcm94eSB0YXJnZXQgcGFkICovCi0gICAgICBpZiAodGFyZ2V0KSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfcXVlcnkgKHRhcmdldCwgcXVlcnkpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogY2FsbGJhY2sgZm9yIFJUQ1AgbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyIHdoZW4gb3BlcmF0aW5nIGluIFRDUAotICogbW9kZS4gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRzcHNyY19zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RSVFNQU3JjICpzcmM7Ci0gIEdzdFJUU1BTdHJlYW0gKnN0cmVhbTsKLSAgR3N0Rmxvd1JldHVybiByZXMgPSBHU1RfRkxPV19PSzsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLSAgR3N0UlRTUFJlc3VsdCByZXQ7Ci0gIEdzdFJUU1BNZXNzYWdlIG1lc3NhZ2UgPSB7IDAgfTsKLSAgR3N0UlRTUENvbm5lY3Rpb24gKmNvbm47Ci0KLSAgc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgZ3N0X3BhZF9nZXRfZWxlbWVudF9wcml2YXRlIChwYWQpOwotICBzcmMgPSBzdHJlYW0tPnBhcmVudDsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBzaXplID0gbWFwLnNpemU7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLQotICBnc3RfcnRzcF9tZXNzYWdlX2luaXRfZGF0YSAoJm1lc3NhZ2UsIHN0cmVhbS0+Y2hhbm5lbFsxXSk7Ci0KLSAgLyogbGVuZCB0aGUgYm9keSBkYXRhIHRvIHRoZSBtZXNzYWdlICovCi0gIGdzdF9ydHNwX21lc3NhZ2VfdGFrZV9ib2R5ICgmbWVzc2FnZSwgZGF0YSwgc2l6ZSk7Ci0KLSAgaWYgKHN0cmVhbS0+Y29ubmluZm8uY29ubmVjdGlvbikKLSAgICBjb25uID0gc3RyZWFtLT5jb25uaW5mby5jb25uZWN0aW9uOwotICBlbHNlCi0gICAgY29ubiA9IHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZW5kaW5nICV1IGJ5dGVzIFJUQ1AiLCBzaXplKTsKLSAgcmV0ID0gZ3N0X3J0c3BzcmNfY29ubmVjdGlvbl9zZW5kIChzcmMsIGNvbm4sICZtZXNzYWdlLCBOVUxMKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VudCBSVENQLCAlZCIsIHJldCk7Ci0KLSAgLyogYW5kIHN0ZWFsIGl0IGF3YXkgYWdhaW4gYmVjYXVzZSB3ZSB3aWxsIGZyZWUgaXQgd2hlbiB1bnJlZmZpbmcgdGhlCi0gICAqIGJ1ZmZlciAqLwotICBnc3RfcnRzcF9tZXNzYWdlX3N0ZWFsX2JvZHkgKCZtZXNzYWdlLCAmZGF0YSwgJnNpemUpOwotICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmbWVzc2FnZSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXBhZF9ibG9ja2VkIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UlRTUFNyYyAqc3JjID0gdXNlcl9kYXRhOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhZCAlczolcyBibG9ja2VkLCBhY3RpdmF0aW5nIHN0cmVhbXMiLAotICAgICAgR1NUX0RFQlVHX1BBRF9OQU1FIChwYWQpKTsKLQotICAvKiBhY3RpdmF0ZSB0aGUgc3RyZWFtcyAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gIGlmICghc3JjLT5uZWVkX2FjdGl2YXRlKQotICAgIGdvdG8gd2FzX29rOwotCi0gIHNyYy0+bmVlZF9hY3RpdmF0ZSA9IEZBTFNFOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICBnc3RfcnRzcHNyY19hY3RpdmF0ZV9zdHJlYW1zIChzcmMpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotCi13YXNfb2s6Ci0gIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNvcHlfc3RpY2t5X2V2ZW50cyAoR3N0UGFkICogcGFkLCBHc3RFdmVudCAqKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWQgKmdwYWQgPSBHU1RfUEFEX0NBU1QgKHVzZXJfZGF0YSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZ3BhZCwgInN0b3JlIHN0aWNreSBldmVudCAlIiBHU1RfUFRSX0ZPUk1BVCwgKmV2ZW50KTsKLSAgZ3N0X3BhZF9zdG9yZV9zdGlja3lfZXZlbnQgKGdwYWQsICpldmVudCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gbWFuYWdlciBnZW5lcmF0ZWQgYSBuZXcgc3JjIHBhZCB3aXRoCi0gKiBwYXlsb2FkZWQgUlRQIHBhY2tldHMuIFdlIHNpbXBseSBnaG9zdCB0aGUgcGFkIGhlcmUuICovCi1zdGF0aWMgdm9pZAotbmV3X21hbmFnZXJfcGFkIChHc3RFbGVtZW50ICogbWFuYWdlciwgR3N0UGFkICogcGFkLCBHc3RSVFNQU3JjICogc3JjKQotewotICBnY2hhciAqbmFtZTsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsYXRlOwotICBnaW50IGlkLCBzc3JjLCBwdDsKLSAgR0xpc3QgKm9zdHJlYW1zOwotICBHc3RSVFNQU3RyZWFtICpzdHJlYW07Ci0gIGdib29sZWFuIGFsbF9hZGRlZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3QgbmV3IG1hbmFnZXIgcGFkICUiIEdTVF9QVFJfRk9STUFULCBwYWQpOwotCi0gIEdTVF9SVFNQX1NUQVRFX0xPQ0sgKHNyYyk7Ci0gIC8qIGZpbmQgc3RyZWFtICovCi0gIG5hbWUgPSBnc3Rfb2JqZWN0X2dldF9uYW1lIChHU1RfT0JKRUNUX0NBU1QgKHBhZCkpOwotICBpZiAoc3NjYW5mIChuYW1lLCAicmVjdl9ydHBfc3JjXyV1XyV1XyV1IiwgJmlkLCAmc3NyYywgJnB0KSAhPSAzKQotICAgIGdvdG8gdW5rbm93bl9zdHJlYW07Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RyZWFtOiAldSwgU1NSQyAlMDh4LCBQVCAlZCIsIGlkLCBzc3JjLCBwdCk7Ci0KLSAgc3RyZWFtID0gZmluZF9zdHJlYW0gKHNyYywgJmlkLCAoZ3BvaW50ZXIpIGZpbmRfc3RyZWFtX2J5X2lkKTsKLSAgaWYgKHN0cmVhbSA9PSBOVUxMKQotICAgIGdvdG8gdW5rbm93bl9zdHJlYW07Ci0KLSAgLyogc2F2ZSBTU1JDICovCi0gIHN0cmVhbS0+c3NyYyA9IHNzcmM7Ci0KLSAgLyogd2UnbGwgYWRkIGl0IGxhdGVyIHNlZSBiZWxvdyAqLwotICBzdHJlYW0tPmFkZGVkID0gVFJVRTsKLQotICAvKiBjaGVjayBpZiB3ZSBhZGRlZCBhbGwgc3RyZWFtcyAqLwotICBhbGxfYWRkZWQgPSBUUlVFOwotICBmb3IgKG9zdHJlYW1zID0gc3JjLT5zdHJlYW1zOyBvc3RyZWFtczsgb3N0cmVhbXMgPSBnX2xpc3RfbmV4dCAob3N0cmVhbXMpKSB7Ci0gICAgR3N0UlRTUFN0cmVhbSAqb3N0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIG9zdHJlYW1zLT5kYXRhOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RyZWFtICVwLCBjb250YWluZXIgJWQsIGFkZGVkICVkLCBzZXR1cCAlZCIsCi0gICAgICAgIG9zdHJlYW0sIG9zdHJlYW0tPmNvbnRhaW5lciwgb3N0cmVhbS0+YWRkZWQsIG9zdHJlYW0tPnNldHVwKTsKLQotICAgIC8qIGlmIHdlIGZpbmQgYSBzdHJlYW0gZm9yIHdoaWNoIHdlIGRpZCBhIHNldHVwIHRoYXQgaXMgbm90IGFkZGVkLCB3ZQotICAgICAqIG5lZWQgdG8gd2FpdCBzb21lIG1vcmUgKi8KLSAgICBpZiAob3N0cmVhbS0+c2V0dXAgJiYgIW9zdHJlYW0tPmFkZGVkKSB7Ci0gICAgICBhbGxfYWRkZWQgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBHU1RfUlRTUF9TVEFURV9VTkxPQ0sgKHNyYyk7Ci0KLSAgLyogY3JlYXRlIGEgbmV3IHBhZCB3ZSB3aWxsIHVzZSB0byBzdHJlYW0gdG8gKi8KLSAgdGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZydHB0ZW1wbGF0ZSk7Ci0gIHN0cmVhbS0+c3JjcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAobmFtZSwgcGFkLCB0ZW1wbGF0ZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsYXRlKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc3RyZWFtLT5zcmNwYWQsIGdzdF9ydHNwc3JjX2hhbmRsZV9zcmNfZXZlbnQpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc3RyZWFtLT5zcmNwYWQsIGdzdF9ydHNwc3JjX2hhbmRsZV9zcmNfcXVlcnkpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHN0cmVhbS0+c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zdGlja3lfZXZlbnRzX2ZvcmVhY2ggKHBhZCwgY29weV9zdGlja3lfZXZlbnRzLCBzdHJlYW0tPnNyY3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHNyYyksIHN0cmVhbS0+c3JjcGFkKTsKLQotICBpZiAoYWxsX2FkZGVkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiV2UgYWRkZWQgYWxsIHN0cmVhbXMiKTsKLSAgICAvKiB3aGVuIHdlIGdldCBoZXJlLCBhbGwgc3RyZWFtIGFyZSBhZGRlZCBhbmQgd2UgY2FuIGZpcmUgdGhlIG5vLW1vcmUtcGFkcwotICAgICAqIHNpZ25hbC4gKi8KLSAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKHNyYykpOwotICB9Ci0KLSAgcmV0dXJuOwotCi0gIC8qIEVSUk9SUyAqLwotdW5rbm93bl9zdHJlYW06Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJpZ25vcmluZyB1bmtub3duIHN0cmVhbSIpOwotICAgIEdTVF9SVFNQX1NUQVRFX1VOTE9DSyAoc3JjKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1zdHJlYW1fZ2V0X2NhcHNfZm9yX3B0IChHc3RSVFNQU3RyZWFtICogc3RyZWFtLCBndWludCBwdCkKLXsKLSAgZ3VpbnQgaSwgbGVuOwotCi0gIGxlbiA9IHN0cmVhbS0+cHRtYXAtPmxlbjsKLSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgUHRNYXBJdGVtICppdGVtID0gJmdfYXJyYXlfaW5kZXggKHN0cmVhbS0+cHRtYXAsIFB0TWFwSXRlbSwgaSk7Ci0gICAgaWYgKGl0ZW0tPnB0ID09IHB0KQotICAgICAgcmV0dXJuIGl0ZW0tPmNhcHM7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXJlcXVlc3RfcHRfbWFwIChHc3RFbGVtZW50ICogbWFuYWdlciwgZ3VpbnQgc2Vzc2lvbiwgZ3VpbnQgcHQsIEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIEdzdFJUU1BTdHJlYW0gKnN0cmVhbTsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnZXR0aW5nIHB0IG1hcCBmb3IgcHQgJWQgaW4gc2Vzc2lvbiAlZCIsIHB0LCBzZXNzaW9uKTsKLQotICBHU1RfUlRTUF9TVEFURV9MT0NLIChzcmMpOwotICBzdHJlYW0gPSBmaW5kX3N0cmVhbSAoc3JjLCAmc2Vzc2lvbiwgKGdwb2ludGVyKSBmaW5kX3N0cmVhbV9ieV9pZCk7Ci0gIGlmICghc3RyZWFtKQotICAgIGdvdG8gdW5rbm93bl9zdHJlYW07Ci0KLSAgaWYgKChjYXBzID0gc3RyZWFtX2dldF9jYXBzX2Zvcl9wdCAoc3RyZWFtLCBwdCkpKQotICAgIGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gIEdTVF9SVFNQX1NUQVRFX1VOTE9DSyAoc3JjKTsKLQotICByZXR1cm4gY2FwczsKLQotdW5rbm93bl9zdHJlYW06Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ1bmtub3duIHN0cmVhbSAlZCIsIHNlc3Npb24pOwotICAgIEdTVF9SVFNQX1NUQVRFX1VOTE9DSyAoc3JjKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfZG9fc3RyZWFtX2VvcyAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2V0dGluZyBzdHJlYW0gZm9yIHNlc3Npb24gJXUgdG8gRU9TIiwgc3RyZWFtLT5pZCk7Ci0KLSAgaWYgKHN0cmVhbS0+ZW9zKQotICAgIGdvdG8gd2FzX2VvczsKLQotICBzdHJlYW0tPmVvcyA9IFRSVUU7Ci0gIGdzdF9ydHNwc3JjX3N0cmVhbV9wdXNoX2V2ZW50IChzcmMsIHN0cmVhbSwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi13YXNfZW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RyZWFtIGZvciBzZXNzaW9uICV1IHdhcyBhbHJlYWR5IEVPUyIsIHN0cmVhbS0+aWQpOwotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotb25fYnllX3NzcmMgKEdPYmplY3QgKiBzZXNzaW9uLCBHT2JqZWN0ICogc291cmNlLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtKQotewotICBHc3RSVFNQU3JjICpzcmMgPSBzdHJlYW0tPnBhcmVudDsKLSAgZ3VpbnQgc3NyYzsKLQotICBnX29iamVjdF9nZXQgKHNvdXJjZSwgInNzcmMiLCAmc3NyYywgTlVMTCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic291cmNlICUwOHgsIHN0cmVhbSAlMDh4LCBzZXNzaW9uICV1IHJlY2VpdmVkIEJZRSIsCi0gICAgICBzc3JjLCBzdHJlYW0tPnNzcmMsIHN0cmVhbS0+aWQpOwotCi0gIGlmIChzc3JjID09IHN0cmVhbS0+c3NyYykKLSAgICBnc3RfcnRzcHNyY19kb19zdHJlYW1fZW9zIChzcmMsIHN0cmVhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl90aW1lb3V0IChHT2JqZWN0ICogc2Vzc2lvbiwgR09iamVjdCAqIHNvdXJjZSwgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgR3N0UlRTUFNyYyAqc3JjID0gc3RyZWFtLT5wYXJlbnQ7Ci0gIGd1aW50IHNzcmM7Ci0KLSAgZ19vYmplY3RfZ2V0IChzb3VyY2UsICJzc3JjIiwgJnNzcmMsIE5VTEwpOwotCi0gIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAic291cmNlICUwOHgsIHN0cmVhbSAlMDh4IGluIHNlc3Npb24gJXUgdGltZWQgb3V0IiwKLSAgICAgIHNzcmMsIHN0cmVhbS0+c3NyYywgc3RyZWFtLT5pZCk7Ci0KLSAgaWYgKHNzcmMgPT0gc3RyZWFtLT5zc3JjKQotICAgIGdzdF9ydHNwc3JjX2RvX3N0cmVhbV9lb3MgKHNyYywgc3RyZWFtKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX25wdF9zdG9wIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaW9uLCBndWludCBzc3JjLCBHc3RSVFNQU3JjICogc3JjKQotewotICBHc3RSVFNQU3RyZWFtICpzdHJlYW07Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic291cmNlIGluIHNlc3Npb24gJXUgcmVhY2hlZCBOUFQgc3RvcCIsIHNlc3Npb24pOwotCi0gIC8qIGdldCBzdHJlYW0gZm9yIHNlc3Npb24gKi8KLSAgc3RyZWFtID0gZmluZF9zdHJlYW0gKHNyYywgJnNlc3Npb24sIChncG9pbnRlcikgZmluZF9zdHJlYW1fYnlfaWQpOwotICBpZiAoc3RyZWFtKSB7Ci0gICAgZ3N0X3J0c3BzcmNfZG9fc3RyZWFtX2VvcyAoc3JjLCBzdHJlYW0pOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX2FjdGl2ZSAoR09iamVjdCAqIHNlc3Npb24sIEdPYmplY3QgKiBzb3VyY2UsIEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHN0cmVhbS0+cGFyZW50LCAic291cmNlIGluIHNlc3Npb24gJXUgaXMgYWN0aXZlIiwKLSAgICAgIHN0cmVhbS0+aWQpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X21hbmFnZXJfYnVmZmVyX21vZGUgKEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIEdPYmplY3RDbGFzcyAqa2xhc3M7Ci0KLSAgaWYgKHNyYy0+bWFuYWdlciA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBrbGFzcyA9IEdfT0JKRUNUX0dFVF9DTEFTUyAoR19PQkpFQ1QgKHNyYy0+bWFuYWdlcikpOwotCi0gIGlmICghZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoa2xhc3MsICJidWZmZXItbW9kZSIpKQotICAgIHJldHVybjsKLQotICBpZiAoc3JjLT5idWZmZXJfbW9kZSAhPSBCVUZGRVJfTU9ERV9BVVRPKSB7Ci0gICAgZ19vYmplY3Rfc2V0IChzcmMtPm1hbmFnZXIsICJidWZmZXItbW9kZSIsIHNyYy0+YnVmZmVyX21vZGUsIE5VTEwpOwotCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAotICAgICAgImF1dG8gYnVmZmVyaW5nIG1vZGUsIGhhdmUgY2xvY2sgJSIgR1NUX1BUUl9GT1JNQVQsIHNyYy0+cHJvdmlkZWRfY2xvY2spOwotCi0gIGlmIChzcmMtPnByb3ZpZGVkX2Nsb2NrKSB7Ci0gICAgR3N0Q2xvY2sgKmNsb2NrID0gZ3N0X2VsZW1lbnRfZ2V0X2Nsb2NrIChHU1RfRUxFTUVOVF9DQVNUIChzcmMpKTsKLQotICAgIGlmIChjbG9jayA9PSBzcmMtPnByb3ZpZGVkX2Nsb2NrKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZWxlY3RlZCBzeW5jZWQiKTsKLSAgICAgIGdfb2JqZWN0X3NldCAoc3JjLT5tYW5hZ2VyLCAiYnVmZmVyLW1vZGUiLCBCVUZGRVJfTU9ERV9TWU5DRUQsIE5VTEwpOwotCi0gICAgICBpZiAoY2xvY2spCi0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIE90aGVyd2lzZSBmYWxsLXRocm91Z2ggYW5kIHVzZSBhbm90aGVyIGJ1ZmZlciBtb2RlICovCi0gICAgaWYgKGNsb2NrKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYXV0byBidWZmZXJpbmcgbW9kZSIpOwotICBpZiAoc3JjLT51c2VfYnVmZmVyaW5nKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VsZWN0ZWQgYnVmZmVyIik7Ci0gICAgZ19vYmplY3Rfc2V0IChzcmMtPm1hbmFnZXIsICJidWZmZXItbW9kZSIsIEJVRkZFUl9NT0RFX0JVRkZFUiwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VsZWN0ZWQgc2xhdmUiKTsKLSAgICBnX29iamVjdF9zZXQgKHNyYy0+bWFuYWdlciwgImJ1ZmZlci1tb2RlIiwgQlVGRkVSX01PREVfU0xBVkUsIE5VTEwpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXJlcXVlc3Rfa2V5IChHc3RFbGVtZW50ICogc3J0cGRlYywgZ3VpbnQgc3NyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ3VpbnQgaTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0TUlLRVlNZXNzYWdlICptc2cgPSBzdHJlYW0tPm1pa2V5OwotCi0gIEdTVF9ERUJVRyAoInJlcXVlc3Qga2V5IFNTUkMgJXUiLCBzc3JjKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfcmVmIChzdHJlYW1fZ2V0X2NhcHNfZm9yX3B0IChzdHJlYW0sIHN0cmVhbS0+ZGVmYXVsdF9wdCkpOwotICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0KLSAgLyogcGFyc2UgY3J5cHRvIHNlc3Npb25zIGFuZCBsb29rIGZvciB0aGUgU1NSQyByb2xsb3ZlciBjb3VudGVyICovCi0gIG1zZyA9IHN0cmVhbS0+bWlrZXk7Ci0gIGZvciAoaSA9IDA7IG1zZyAmJiBpIDwgZ3N0X21pa2V5X21lc3NhZ2VfZ2V0X25fY3MgKG1zZyk7IGkrKykgewotICAgIGNvbnN0IEdzdE1JS0VZTWFwU1JUUCAqbWFwID0gZ3N0X21pa2V5X21lc3NhZ2VfZ2V0X2NzX3NydHAgKG1zZywgaSk7Ci0KLSAgICBpZiAoc3NyYyA9PSBtYXAtPnNzcmMpIHsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJyb2MiLCBHX1RZUEVfVUlOVCwgbWFwLT5yb2MsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXJlcXVlc3RfcnRwX2RlY29kZXIgKEdzdEVsZW1lbnQgKiBydHBiaW4sIGd1aW50IHNlc3Npb24sIEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0pCi17Ci0gIEdTVF9ERUJVRyAoImRlY29kZXIgc2Vzc2lvbiAldSwgc3RyZWFtICVwLCAlZCIsIHNlc3Npb24sIHN0cmVhbSwgc3RyZWFtLT5pZCk7Ci0gIGlmIChzdHJlYW0tPmlkICE9IHNlc3Npb24pCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKHN0cmVhbS0+cHJvZmlsZSAhPSBHU1RfUlRTUF9QUk9GSUxFX1NBVlAgJiYKLSAgICAgIHN0cmVhbS0+cHJvZmlsZSAhPSBHU1RfUlRTUF9QUk9GSUxFX1NBVlBGKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmIChzdHJlYW0tPnNydHBkZWMgPT0gTlVMTCkgewotICAgIGdjaGFyICpuYW1lOwotCi0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNydHBkZWNfJXUiLCBzZXNzaW9uKTsKLSAgICBzdHJlYW0tPnNydHBkZWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzcnRwZGVjIiwgbmFtZSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHN0cmVhbS0+c3J0cGRlYywgInJlcXVlc3Qta2V5IiwKLSAgICAgICAgKEdDYWxsYmFjaykgcmVxdWVzdF9rZXksIHN0cmVhbSk7Ci0gIH0KLSAgcmV0dXJuIGdzdF9vYmplY3RfcmVmIChzdHJlYW0tPnNydHBkZWMpOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1yZXF1ZXN0X3J0Y3BfZW5jb2RlciAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgZ3VpbnQgc2Vzc2lvbiwKLSAgICBHc3RSVFNQU3RyZWFtICogc3RyZWFtKQotewotICBnY2hhciAqbmFtZTsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgR1NUX0RFQlVHICgiZGVjb2RlciBzZXNzaW9uICV1LCBzdHJlYW0gJXAsICVkIiwgc2Vzc2lvbiwgc3RyZWFtLCBzdHJlYW0tPmlkKTsKLSAgaWYgKHN0cmVhbS0+aWQgIT0gc2Vzc2lvbikKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoc3RyZWFtLT5wcm9maWxlICE9IEdTVF9SVFNQX1BST0ZJTEVfU0FWUCAmJgotICAgICAgc3RyZWFtLT5wcm9maWxlICE9IEdTVF9SVFNQX1BST0ZJTEVfU0FWUEYpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKHN0cmVhbS0+c3J0cGVuYyA9PSBOVUxMKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNydHBlbmNfJXUiLCBzZXNzaW9uKTsKLSAgICBzdHJlYW0tPnNydHBlbmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzcnRwZW5jIiwgbmFtZSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLQotICAgIC8qIGdldCBSVENQIGNyeXB0byBwYXJhbWV0ZXJzIGZyb20gY2FwcyAqLwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChzdHJlYW0tPnNydGNwcGFyYW1zLCAwKTsKLSAgICBpZiAocykgewotICAgICAgR3N0QnVmZmVyICpidWY7Ci0gICAgICBjb25zdCBnY2hhciAqc3RyOwotICAgICAgR1R5cGUgY2lwaGVydHlwZSwgYXV0aHR5cGU7Ci0gICAgICBHVmFsdWUgcnRjcF9jaXBoZXIgPSBHX1ZBTFVFX0lOSVQsIHJ0Y3BfYXV0aCA9IEdfVkFMVUVfSU5JVDsKLQotICAgICAgY2lwaGVydHlwZSA9IGdfdHlwZV9mcm9tX25hbWUgKCJHc3RTcnRwQ2lwaGVyVHlwZSIpOwotICAgICAgYXV0aHR5cGUgPSBnX3R5cGVfZnJvbV9uYW1lICgiR3N0U3J0cEF1dGhUeXBlIik7Ci0gICAgICBnX3ZhbHVlX2luaXQgKCZydGNwX2NpcGhlciwgY2lwaGVydHlwZSk7Ci0gICAgICBnX3ZhbHVlX2luaXQgKCZydGNwX2F1dGgsIGF1dGh0eXBlKTsKLQotICAgICAgc3RyID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAic3J0Y3AtY2lwaGVyIik7Ci0gICAgICBnc3RfdmFsdWVfZGVzZXJpYWxpemUgKCZydGNwX2NpcGhlciwgc3RyKTsKLSAgICAgIHN0ciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInNydGNwLWF1dGgiKTsKLSAgICAgIGdzdF92YWx1ZV9kZXNlcmlhbGl6ZSAoJnJ0Y3BfYXV0aCwgc3RyKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzLCAic3J0cC1rZXkiLCBHU1RfVFlQRV9CVUZGRVIsICZidWYsIE5VTEwpOwotCi0gICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChzdHJlYW0tPnNydHBlbmMpLCAicnRwLWNpcGhlciIsCi0gICAgICAgICAgJnJ0Y3BfY2lwaGVyKTsKLSAgICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKHN0cmVhbS0+c3J0cGVuYyksICJydHAtYXV0aCIsCi0gICAgICAgICAgJnJ0Y3BfYXV0aCk7Ci0gICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChzdHJlYW0tPnNydHBlbmMpLCAicnRjcC1jaXBoZXIiLAotICAgICAgICAgICZydGNwX2NpcGhlcik7Ci0gICAgICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChzdHJlYW0tPnNydHBlbmMpLCAicnRjcC1hdXRoIiwKLSAgICAgICAgICAmcnRjcF9hdXRoKTsKLSAgICAgIGdfb2JqZWN0X3NldCAoc3RyZWFtLT5zcnRwZW5jLCAia2V5IiwgYnVmLCBOVUxMKTsKLQotICAgICAgZ192YWx1ZV91bnNldCAoJnJ0Y3BfY2lwaGVyKTsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKCZydGNwX2F1dGgpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICB9Ci0gIH0KLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInJ0Y3Bfc2lua18lZCIsIHNlc3Npb24pOwotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHN0cmVhbS0+c3J0cGVuYywgbmFtZSk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgcmV0dXJuIGdzdF9vYmplY3RfcmVmIChzdHJlYW0tPnNydHBlbmMpOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1yZXF1ZXN0X2F1eF9yZWNlaXZlciAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgZ3VpbnQgc2Vzc2lkLCBHc3RSVFNQU3JjICogc3JjKQotewotICBHc3RFbGVtZW50ICpydHgsICpiaW47Ci0gIEdzdFBhZCAqcGFkOwotICBnY2hhciAqbmFtZTsKLSAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtOwotCi0gIHN0cmVhbSA9IGZpbmRfc3RyZWFtIChzcmMsICZzZXNzaWQsIChncG9pbnRlcikgZmluZF9zdHJlYW1fYnlfaWQpOwotICBpZiAoIXN0cmVhbSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiU3RyZWFtICV1IG5vdCBmb3VuZCIsIHNlc3NpZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgImNyZWF0aW5nIHJldHJhbnNtaXNpb24gcmVjZWl2ZXIgZm9yIHNlc3Npb24gJXUgIgotICAgICAgIndpdGggbWFwICUiIEdTVF9QVFJfRk9STUFULCBzZXNzaWQsIHN0cmVhbS0+cnR4X3B0X21hcCk7Ci0gIGJpbiA9IGdzdF9iaW5fbmV3IChOVUxMKTsKLSAgcnR4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwcnR4cmVjZWl2ZSIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJ0eCwgInBheWxvYWQtdHlwZS1tYXAiLCBzdHJlYW0tPnJ0eF9wdF9tYXAsIE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAoYmluKSwgcnR4KTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocnR4LCAic3JjIik7Ci0gIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzcmNfJXUiLCBzZXNzaWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3IChuYW1lLCBwYWQpKTsKLSAgZ19mcmVlIChuYW1lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocnR4LCAic2luayIpOwotICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic2lua18ldSIsIHNlc3NpZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgZ3N0X2dob3N0X3BhZF9uZXcgKG5hbWUsIHBhZCkpOwotICBnX2ZyZWUgKG5hbWUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotCi0gIHJldHVybiBiaW47Ci19Ci0KLXN0YXRpYyB2b2lkCi1hZGRfcmV0cmFuc21pc3Npb24gKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFJUU1BUcmFuc3BvcnQgKiB0cmFuc3BvcnQpCi17Ci0gIEdMaXN0ICp3YWxrOwotICBndWludCBzaWduYWxfaWQ7Ci0gIGdib29sZWFuIGRvX3JldHJhbnNtaXNzaW9uID0gRkFMU0U7Ci0KLSAgaWYgKHRyYW5zcG9ydC0+dHJhbnMgIT0gR1NUX1JUU1BfVFJBTlNfUlRQKQotICAgIHJldHVybjsKLSAgaWYgKHRyYW5zcG9ydC0+cHJvZmlsZSAhPSBHU1RfUlRTUF9QUk9GSUxFX0FWUEYgJiYKLSAgICAgIHRyYW5zcG9ydC0+cHJvZmlsZSAhPSBHU1RfUlRTUF9QUk9GSUxFX1NBVlBGKQotICAgIHJldHVybjsKLQotICBzaWduYWxfaWQgPSBnX3NpZ25hbF9sb29rdXAgKCJyZXF1ZXN0LWF1eC1yZWNlaXZlciIsCi0gICAgICBHX09CSkVDVF9UWVBFIChzcmMtPm1hbmFnZXIpKTsKLSAgLyogdGhlcmUncyBhbHJlYWR5IHNvbWV0aGluZyBjb25uZWN0ZWQgKi8KLSAgaWYgKGdfc2lnbmFsX2hhbmRsZXJfZmluZCAoc3JjLT5tYW5hZ2VyLCBHX1NJR05BTF9NQVRDSF9JRCwgc2lnbmFsX2lkLCAwLAotICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJOb3QgYWRkaW5nIFJUWCBBVVggZWxlbWVudCBhcyAiCi0gICAgICAgICJcInJlcXVlc3QtYXV4LXJlY2VpdmVyXCIgc2lnbmFsIGlzICIKLSAgICAgICAgImFscmVhZHkgdXNlZCBieSB0aGUgYXBwbGljYXRpb24iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBidWlsZCB0aGUgcmV0cmFuc21pc3Npb24gcGF5bG9hZCB0eXBlIG1hcCAqLwotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSB3YWxrLT5kYXRhOwotICAgIGdib29sZWFuIGRvX3JldHJhbnNtaXNzaW9uX3N0cmVhbSA9IEZBTFNFOwotICAgIGludCBpOwotCi0gICAgaWYgKHN0cmVhbS0+cnR4X3B0X21hcCkKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RyZWFtLT5ydHhfcHRfbWFwKTsKLSAgICBzdHJlYW0tPnJ0eF9wdF9tYXAgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoImFwcGxpY2F0aW9uL3gtcnRwLXB0LW1hcCIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbS0+cHRtYXAtPmxlbjsgaSsrKSB7Ci0gICAgICBQdE1hcEl0ZW0gKml0ZW0gPSAmZ19hcnJheV9pbmRleCAoc3RyZWFtLT5wdG1hcCwgUHRNYXBJdGVtLCBpKTsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGl0ZW0tPmNhcHMsIDApOwotICAgICAgY29uc3QgZ2NoYXIgKmVuY29kaW5nOwotCi0gICAgICAvKiB3ZSBvbmx5IGNhcmUgYWJvdXQgUlRYIHN0cmVhbXMgKi8KLSAgICAgIGlmICgoZW5jb2RpbmcgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJlbmNvZGluZy1uYW1lIikpCi0gICAgICAgICAgJiYgZ19zdHJjbXAwIChlbmNvZGluZywgIlJUWCIpID09IDApIHsKLSAgICAgICAgY29uc3QgZ2NoYXIgKnN0cmVhbV9wdF9zOwotICAgICAgICBnaW50IHJ0eF9wdDsKLQotICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAicGF5bG9hZCIsICZydHhfcHQpCi0gICAgICAgICAgICAmJiAoc3RyZWFtX3B0X3MgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJhcHQiKSkpIHsKLQotICAgICAgICAgIGlmIChydHhfcHQgIT0gMCkgewotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cmVhbS0+cnR4X3B0X21hcCwgc3RyZWFtX3B0X3MsIEdfVFlQRV9VSU5ULAotICAgICAgICAgICAgICAgIHJ0eF9wdCwgTlVMTCk7Ci0gICAgICAgICAgICBkb19yZXRyYW5zbWlzc2lvbl9zdHJlYW0gPSBUUlVFOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmIChkb19yZXRyYW5zbWlzc2lvbl9zdHJlYW0pIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImJ1aWx0IHJldHJhbnNtaXNzaW9uIHBheWxvYWQgbWFwIGZvciBzdHJlYW0gIgotICAgICAgICAgICJpZCAlaTogJSIgR1NUX1BUUl9GT1JNQVQsIHN0cmVhbS0+aWQsIHN0cmVhbS0+cnR4X3B0X21hcCk7Ci0gICAgICBkb19yZXRyYW5zbWlzc2lvbiA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vIHJldHJhbnNtaXNzaW9uIHBheWxvYWQgbWFwIGZvciBzdHJlYW0gIgotICAgICAgICAgICJpZCAlaSIsIHN0cmVhbS0+aWQpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdHJlYW0tPnJ0eF9wdF9tYXApOwotICAgICAgc3RyZWFtLT5ydHhfcHRfbWFwID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBpZiAoZG9fcmV0cmFuc21pc3Npb24pIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJFbmFibGluZyByZXRyYW5zbWlzc2lvbnMiKTsKLQotICAgIGdfb2JqZWN0X3NldCAoc3JjLT5tYW5hZ2VyLCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCBOVUxMKTsKLQotICAgIC8qIGVuYWJsZSBSRkM0NTg4IHJldHJhbnNtaXNzaW9uIGhhbmRsaW5nIGJ5IHNldHRpbmcgcnRwcnR4cmVjZWl2ZQotICAgICAqIGFzIHRoZSAiYXV4IiBlbGVtZW50IG9mIHJ0cGJpbiAqLwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHNyYy0+bWFuYWdlciwgInJlcXVlc3QtYXV4LXJlY2VpdmVyIiwKLSAgICAgICAgKEdDYWxsYmFjaykgcmVxdWVzdF9hdXhfcmVjZWl2ZXIsIHNyYyk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAotICAgICAgICAiTm90IGVuYWJsaW5nIHJldHJhbnNtaXNzaW9ucyBhcyBubyBzdHJlYW0gaGFkIGEgcmV0cmFuc21pc3Npb24gcGF5bG9hZCBtYXAiKTsKLSAgfQotfQotCi0vKiB0cnkgdG8gZ2V0IGFuZCBjb25maWd1cmUgYSBtYW5hZ2VyICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfbWFuYWdlciAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RSVFNQVHJhbnNwb3J0ICogdHJhbnNwb3J0KQotewotICBjb25zdCBnY2hhciAqbWFuYWdlcjsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICAvKiBmaW5kIGEgbWFuYWdlciAqLwotICBpZiAoZ3N0X3J0c3BfdHJhbnNwb3J0X2dldF9tYW5hZ2VyICh0cmFuc3BvcnQtPnRyYW5zLCAmbWFuYWdlciwgMCkgPCAwKQotICAgIGdvdG8gbm9fbWFuYWdlcjsKLQotICBpZiAobWFuYWdlcikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVzaW5nIG1hbmFnZXIgJXMiLCBtYW5hZ2VyKTsKLQotICAgIC8qIGNvbmZpZ3VyZSB0aGUgbWFuYWdlciAqLwotICAgIGlmIChzcmMtPm1hbmFnZXIgPT0gTlVMTCkgewotICAgICAgR09iamVjdENsYXNzICprbGFzczsKLQotICAgICAgaWYgKCEoc3JjLT5tYW5hZ2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChtYW5hZ2VyLCAibWFuYWdlciIpKSkgewotICAgICAgICAvKiBmYWxsYmFjayAqLwotICAgICAgICBpZiAoZ3N0X3J0c3BfdHJhbnNwb3J0X2dldF9tYW5hZ2VyICh0cmFuc3BvcnQtPnRyYW5zLCAmbWFuYWdlciwgMSkgPCAwKQotICAgICAgICAgIGdvdG8gbm9fbWFuYWdlcjsKLQotICAgICAgICBpZiAoIW1hbmFnZXIpCi0gICAgICAgICAgZ290byB1c2Vfbm9fbWFuYWdlcjsKLQotICAgICAgICBpZiAoIShzcmMtPm1hbmFnZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKG1hbmFnZXIsICJtYW5hZ2VyIikpKQotICAgICAgICAgIGdvdG8gbWFuYWdlcl9mYWlsZWQ7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdlIG1hbmFnZSB0aGlzIGVsZW1lbnQgKi8KLSAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHNyYy0+bWFuYWdlciwgVFJVRSk7Ci0gICAgICBnc3RfYmluX2FkZCAoR1NUX0JJTl9DQVNUIChzcmMpLCBzcmMtPm1hbmFnZXIpOwotCi0gICAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYy0+bWFuYWdlciwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKLSAgICAgICAgZ290byBzdGFydF9tYW5hZ2VyX2ZhaWx1cmU7Ci0KLSAgICAgIGdfb2JqZWN0X3NldCAoc3JjLT5tYW5hZ2VyLCAibGF0ZW5jeSIsIHNyYy0+bGF0ZW5jeSwgTlVMTCk7Ci0KLSAgICAgIGtsYXNzID0gR19PQkpFQ1RfR0VUX0NMQVNTIChHX09CSkVDVCAoc3JjLT5tYW5hZ2VyKSk7Ci0KLSAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChrbGFzcywgIm50cC1zeW5jIikpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0IChzcmMtPm1hbmFnZXIsICJudHAtc3luYyIsIHNyYy0+bnRwX3N5bmMsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoa2xhc3MsICJyZmM3MjczLXN5bmMiKSkgewotICAgICAgICBnX29iamVjdF9zZXQgKHNyYy0+bWFuYWdlciwgInJmYzcyNzMtc3luYyIsIHNyYy0+cmZjNzI3M19zeW5jLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHNyYy0+dXNlX3BpcGVsaW5lX2Nsb2NrKSB7Ci0gICAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChrbGFzcywgInVzZS1waXBlbGluZS1jbG9jayIpKSB7Ci0gICAgICAgICAgZ19vYmplY3Rfc2V0IChzcmMtPm1hbmFnZXIsICJ1c2UtcGlwZWxpbmUtY2xvY2siLCBUUlVFLCBOVUxMKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGtsYXNzLCAibnRwLXRpbWUtc291cmNlIikpIHsKLSAgICAgICAgICBnX29iamVjdF9zZXQgKHNyYy0+bWFuYWdlciwgIm50cC10aW1lLXNvdXJjZSIsIHNyYy0+bnRwX3RpbWVfc291cmNlLAotICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoc3JjLT5zZGVzICYmIGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGtsYXNzLCAic2RlcyIpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldCAoc3JjLT5tYW5hZ2VyLCAic2RlcyIsIHNyYy0+c2RlcywgTlVMTCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChrbGFzcywgImRyb3Atb24tbGF0ZW5jeSIpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldCAoc3JjLT5tYW5hZ2VyLCAiZHJvcC1vbi1sYXRlbmN5Iiwgc3JjLT5kcm9wX29uX2xhdGVuY3ksCi0gICAgICAgICAgICBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGtsYXNzLCAibWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiIpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldCAoc3JjLT5tYW5hZ2VyLCAibWF4LXJ0Y3AtcnRwLXRpbWUtZGlmZiIsCi0gICAgICAgICAgICBzcmMtPm1heF9ydGNwX3J0cF90aW1lX2RpZmYsIE5VTEwpOwotICAgICAgfQotCi0gICAgICAvKiBidWZmZXIgbW9kZSBwYXVzZXMgYXJlIGhhbmRsZWQgYnkgYWRkaW5nIG9mZnNldHMgdG8gYnVmZmVyIHRpbWVzLAotICAgICAgICogYnV0IHNvbWUgZGVwYXlsb2FkZXJzIG1heSBoYXZlIGEgaGFyZCB0aW1lIHN5bmNpbmcgb3V0cHV0IHRpbWVzCi0gICAgICAgKiB3aXRoIHN1Y2ggaW5wdXQgdGltZXMsIGUuZy4gY29udGFpbmVyIG9uZXMsIG1vc3Qgbm90YWJseSBBU0YgKi8KLSAgICAgIC8qIFRPRE8gYWx0ZXJuYXRpdmVzIGFyZSBoYXZpbmcgYW4gZXZlbnQgdGhhdCBpbmRpY2F0ZXMgdGhlc2Ugc2hpZnRzLAotICAgICAgICogb3IgaGF2aW5nIHJ0c3AgZXh0ZW5zaW9ucyBwcm92aWRlIHN1Z2dlc3Rpb24gb24gYnVmZmVyIG1vZGUgKi8KLSAgICAgIC8qIHZhbGlkIGR1cmF0aW9uIGltcGxpZXMgbm90IGxpa2VseSBsaXZlIHBpcGVsaW5lLAotICAgICAgICogc28gc2xhdmluZyBpbiBqaXR0ZXJidWZmZXIgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlCi0gICAgICAgKiAoYW5kIG1pZ2h0IG1lc3MgdGhpbmdzIHVwIGR1ZSB0byBidXJzdHMpICovCi0gICAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHNyYy0+c2VnbWVudC5kdXJhdGlvbikgJiYKLSAgICAgICAgICBzcmMtPnNlZ21lbnQuZHVyYXRpb24gJiYgc3RyZWFtLT5jb250YWluZXIpIHsKLSAgICAgICAgc3JjLT51c2VfYnVmZmVyaW5nID0gVFJVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNyYy0+dXNlX2J1ZmZlcmluZyA9IEZBTFNFOwotICAgICAgfQotCi0gICAgICBzZXRfbWFuYWdlcl9idWZmZXJfbW9kZSAoc3JjKTsKLQotICAgICAgLyogY29ubmVjdCB0byBzaWduYWxzICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb25uZWN0IHRvIHNpZ25hbHMgb24gc2Vzc2lvbiBtYW5hZ2VyLCBzdHJlYW0gJXAiLAotICAgICAgICAgIHN0cmVhbSk7Ci0gICAgICBzcmMtPm1hbmFnZXJfc2lnX2lkID0KLSAgICAgICAgICBnX3NpZ25hbF9jb25uZWN0IChzcmMtPm1hbmFnZXIsICJwYWQtYWRkZWQiLAotICAgICAgICAgIChHQ2FsbGJhY2spIG5ld19tYW5hZ2VyX3BhZCwgc3JjKTsKLSAgICAgIHNyYy0+bWFuYWdlcl9wdG1hcF9pZCA9Ci0gICAgICAgICAgZ19zaWduYWxfY29ubmVjdCAoc3JjLT5tYW5hZ2VyLCAicmVxdWVzdC1wdC1tYXAiLAotICAgICAgICAgIChHQ2FsbGJhY2spIHJlcXVlc3RfcHRfbWFwLCBzcmMpOwotCi0gICAgICBnX3NpZ25hbF9jb25uZWN0IChzcmMtPm1hbmFnZXIsICJvbi1ucHQtc3RvcCIsIChHQ2FsbGJhY2spIG9uX25wdF9zdG9wLAotICAgICAgICAgIHNyYyk7Ci0KLSAgICAgIGdfc2lnbmFsX2VtaXQgKHNyYywgZ3N0X3J0c3BzcmNfc2lnbmFsc1tTSUdOQUxfTkVXX01BTkFHRVJdLCAwLAotICAgICAgICAgIHNyYy0+bWFuYWdlcik7Ci0KLSAgICAgIGlmIChzcmMtPmRvX3JldHJhbnNtaXNzaW9uKQotICAgICAgICBhZGRfcmV0cmFuc21pc3Npb24gKHNyYywgdHJhbnNwb3J0KTsKLSAgICB9Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoc3JjLT5tYW5hZ2VyLCAicmVxdWVzdC1ydHAtZGVjb2RlciIsCi0gICAgICAgIChHQ2FsbGJhY2spIHJlcXVlc3RfcnRwX2RlY29kZXIsIHN0cmVhbSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoc3JjLT5tYW5hZ2VyLCAicmVxdWVzdC1ydGNwLWRlY29kZXIiLAotICAgICAgICAoR0NhbGxiYWNrKSByZXF1ZXN0X3J0cF9kZWNvZGVyLCBzdHJlYW0pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHNyYy0+bWFuYWdlciwgInJlcXVlc3QtcnRjcC1lbmNvZGVyIiwKLSAgICAgICAgKEdDYWxsYmFjaykgcmVxdWVzdF9ydGNwX2VuY29kZXIsIHN0cmVhbSk7Ci0KLSAgICAvKiB3ZSBzdHJlYW0gZGlyZWN0bHkgdG8gdGhlIG1hbmFnZXIsIGdldCBzb21lIHBhZHMuIEVhY2ggUlRTUCBzdHJlYW0gZ29lcwotICAgICAqIGludG8gYSBzZXBhcmF0ZSBSVFAgc2Vzc2lvbi4gKi8KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgicmVjdl9ydHBfc2lua18ldSIsIHN0cmVhbS0+aWQpOwotICAgIHN0cmVhbS0+Y2hhbm5lbHBhZFswXSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc3JjLT5tYW5hZ2VyLCBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotICAgIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJyZWN2X3J0Y3Bfc2lua18ldSIsIHN0cmVhbS0+aWQpOwotICAgIHN0cmVhbS0+Y2hhbm5lbHBhZFsxXSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc3JjLT5tYW5hZ2VyLCBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotCi0gICAgLyogbm93IGNvbmZpZ3VyZSB0aGUgYmFuZHdpZHRoIGluIHRoZSBtYW5hZ2VyICovCi0gICAgaWYgKGdfc2lnbmFsX2xvb2t1cCAoImdldC1pbnRlcm5hbC1zZXNzaW9uIiwKLSAgICAgICAgICAgIEdfT0JKRUNUX1RZUEUgKHNyYy0+bWFuYWdlcikpICE9IDApIHsKLSAgICAgIEdPYmplY3QgKnJ0cHNlc3Npb247Ci0KLSAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoc3JjLT5tYW5hZ2VyLCAiZ2V0LWludGVybmFsLXNlc3Npb24iLCBzdHJlYW0tPmlkLAotICAgICAgICAgICZydHBzZXNzaW9uKTsKLSAgICAgIGlmIChydHBzZXNzaW9uKSB7Ci0gICAgICAgIEdzdFJUUFByb2ZpbGUgcnRwX3Byb2ZpbGU7Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJjb25maWd1cmUgYmFuZHdpZHRoIGluIHNlc3Npb24gJXAiLCBydHBzZXNzaW9uKTsKLQotICAgICAgICBzdHJlYW0tPnNlc3Npb24gPSBydHBzZXNzaW9uOwotCi0gICAgICAgIGlmIChzdHJlYW0tPmFzX2JhbmR3aWR0aCAhPSAtMSkgewotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAoc3JjLCAic2V0dGluZyBBUzogJWYiLAotICAgICAgICAgICAgICAoZ2RvdWJsZSkgKHN0cmVhbS0+YXNfYmFuZHdpZHRoICogMTAwMCkpOwotICAgICAgICAgIGdfb2JqZWN0X3NldCAocnRwc2Vzc2lvbiwgImJhbmR3aWR0aCIsCi0gICAgICAgICAgICAgIChnZG91YmxlKSAoc3RyZWFtLT5hc19iYW5kd2lkdGggKiAxMDAwKSwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmVhbS0+cnJfYmFuZHdpZHRoICE9IC0xKSB7Ci0gICAgICAgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJzZXR0aW5nIFJSOiAldSIsIHN0cmVhbS0+cnJfYmFuZHdpZHRoKTsKLSAgICAgICAgICBnX29iamVjdF9zZXQgKHJ0cHNlc3Npb24sICJydGNwLXJyLWJhbmR3aWR0aCIsIHN0cmVhbS0+cnJfYmFuZHdpZHRoLAotICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RyZWFtLT5yc19iYW5kd2lkdGggIT0gLTEpIHsKLSAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgInNldHRpbmcgUlM6ICV1Iiwgc3RyZWFtLT5yc19iYW5kd2lkdGgpOwotICAgICAgICAgIGdfb2JqZWN0X3NldCAocnRwc2Vzc2lvbiwgInJ0Y3AtcnMtYmFuZHdpZHRoIiwgc3RyZWFtLT5yc19iYW5kd2lkdGgsCi0gICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChzdHJlYW0tPnByb2ZpbGUpIHsKLSAgICAgICAgICBjYXNlIEdTVF9SVFNQX1BST0ZJTEVfQVZQRjoKLSAgICAgICAgICAgIHJ0cF9wcm9maWxlID0gR1NUX1JUUF9QUk9GSUxFX0FWUEY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9SVFNQX1BST0ZJTEVfU0FWUDoKLSAgICAgICAgICAgIHJ0cF9wcm9maWxlID0gR1NUX1JUUF9QUk9GSUxFX1NBVlA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9SVFNQX1BST0ZJTEVfU0FWUEY6Ci0gICAgICAgICAgICBydHBfcHJvZmlsZSA9IEdTVF9SVFBfUFJPRklMRV9TQVZQRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1JUU1BfUFJPRklMRV9BVlA6Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJ0cF9wcm9maWxlID0gR1NUX1JUUF9QUk9GSUxFX0FWUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZ19vYmplY3Rfc2V0IChydHBzZXNzaW9uLCAicnRwLXByb2ZpbGUiLCBydHBfcHJvZmlsZSwgTlVMTCk7Ci0KLSAgICAgICAgZ19vYmplY3Rfc2V0IChydHBzZXNzaW9uLCAicHJvYmF0aW9uIiwgc3JjLT5wcm9iYXRpb24sIE5VTEwpOwotCi0gICAgICAgIGdfb2JqZWN0X3NldCAocnRwc2Vzc2lvbiwgImludGVybmFsLXNzcmMiLCBzdHJlYW0tPnNlbmRfc3NyYywgTlVMTCk7Ci0KLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbiwgIm9uLWJ5ZS1zc3JjIiwgKEdDYWxsYmFjaykgb25fYnllX3NzcmMsCi0gICAgICAgICAgICBzdHJlYW0pOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0IChydHBzZXNzaW9uLCAib24tYnllLXRpbWVvdXQiLCAoR0NhbGxiYWNrKSBvbl90aW1lb3V0LAotICAgICAgICAgICAgc3RyZWFtKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbiwgIm9uLXRpbWVvdXQiLCAoR0NhbGxiYWNrKSBvbl90aW1lb3V0LAotICAgICAgICAgICAgc3RyZWFtKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCAocnRwc2Vzc2lvbiwgIm9uLXNzcmMtYWN0aXZlIiwKLSAgICAgICAgICAgIChHQ2FsbGJhY2spIG9uX3NzcmNfYWN0aXZlLCBzdHJlYW0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi11c2Vfbm9fbWFuYWdlcjoKLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19tYW5hZ2VyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2Fubm90IGdldCBhIHNlc3Npb24gbWFuYWdlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbWFuYWdlcl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJubyBzZXNzaW9uIG1hbmFnZXIgZWxlbWVudCAlcyBmb3VuZCIsIG1hbmFnZXIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc3RhcnRfbWFuYWdlcl9mYWlsdXJlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY291bGQgbm90IHN0YXJ0IHNlc3Npb24gbWFuYWdlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBmcmVlIHRoZSBVRFAgc291cmNlcyBhbGxvY2F0ZWQgd2hlbiBuZWdvdGlhdGluZyBhIHRyYW5zcG9ydC4KLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHNlcnZlciBuZWdvdGlhdGVkIHRvIGEgdHJhbnNwb3J0IHdoZXJlIHRoZQotICogVURQIHNvdXJjZXMgYXJlIG5vdCBuZWVkZWQgYW55bW9yZSwgc3VjaCBhcyBUQ1Agb3IgbXVsdGljYXN0LiAqLwotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX3N0cmVhbV9mcmVlX3VkcCAoR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICBpZiAoc3RyZWFtLT51ZHBzcmNbaV0pIHsKLSAgICAgIEdTVF9ERUJVRyAoImZyZWUgVURQIHNvdXJjZSAlZCBmb3Igc3RyZWFtICVwIiwgaSwgc3RyZWFtKTsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3RyZWFtLT51ZHBzcmNbaV0sIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHN0cmVhbS0+dWRwc3JjW2ldKTsKLSAgICAgIHN0cmVhbS0+dWRwc3JjW2ldID0gTlVMTDsKLSAgICB9Ci0gIH0KLX0KLQotLyogZm9yIFRDUCwgY3JlYXRlIHBhZHMgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIHRvIGFuZCBmcm9tIHRoZSBtYW5hZ2VyIGFuZCB0bwotICogaW50ZXJjZXB0IHZhcmlvdXMgZXZlbnRzIGFuZCBxdWVyaWVzCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV90Y3AgKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0sCi0gICAgR3N0UlRTUFRyYW5zcG9ydCAqIHRyYW5zcG9ydCwgR3N0UGFkICoqIG91dHBhZCkKLXsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdzdFBhZFRlbXBsYXRlICp0ZW1wbGF0ZTsKLSAgR3N0UGFkICpwYWQwLCAqcGFkMTsKLQotICAvKiBjb25maWd1cmUgZm9yIGludGVybGVhdmVkIGRlbGl2ZXJ5LCBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUKLSAgICogaGVyZSwgdGhlIGxvb3AgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBjaGFpbiBmdW5jdGlvbnMgb2YgdGhlCi0gICAqIHNlc3Npb24gbWFuYWdlci4gKi8KLSAgc3RyZWFtLT5jaGFubmVsWzBdID0gdHJhbnNwb3J0LT5pbnRlcmxlYXZlZC5taW47Ci0gIHN0cmVhbS0+Y2hhbm5lbFsxXSA9IHRyYW5zcG9ydC0+aW50ZXJsZWF2ZWQubWF4OwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdHJlYW0gJXAgb24gY2hhbm5lbHMgJWQtJWQiLCBzdHJlYW0sCi0gICAgICBzdHJlYW0tPmNoYW5uZWxbMF0sIHN0cmVhbS0+Y2hhbm5lbFsxXSk7Ci0KLSAgLyogd2UgY2FuIHJlbW92ZSB0aGUgYWxsb2NhdGVkIFVEUCBwb3J0cyBub3cgKi8KLSAgZ3N0X3J0c3BzcmNfc3RyZWFtX2ZyZWVfdWRwIChzdHJlYW0pOwotCi0gIC8qIG5vIHNlc3Npb24gbWFuYWdlciwgc2VuZCBkYXRhIHRvIHNyY3BhZCBkaXJlY3RseSAqLwotICBpZiAoIXN0cmVhbS0+Y2hhbm5lbHBhZFswXSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vIG1hbmFnZXIsIGNyZWF0aW5nIHBhZCIpOwotCi0gICAgLyogY3JlYXRlIGEgbmV3IHBhZCB3ZSB3aWxsIHVzZSB0byBzdHJlYW0gdG8gKi8KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3RyZWFtXyV1Iiwgc3RyZWFtLT5pZCk7Ci0gICAgdGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQgKCZydHB0ZW1wbGF0ZSk7Ci0gICAgc3RyZWFtLT5jaGFubmVscGFkWzBdID0gZ3N0X3BhZF9uZXdfZnJvbV90ZW1wbGF0ZSAodGVtcGxhdGUsIG5hbWUpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHRlbXBsYXRlKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotCi0gICAgLyogc2V0IGNhcHMgYW5kIGFjdGl2YXRlICovCi0gICAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAoc3RyZWFtLT5jaGFubmVscGFkWzBdKTsKLSAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHN0cmVhbS0+Y2hhbm5lbHBhZFswXSwgVFJVRSk7Ci0KLSAgICAqb3V0cGFkID0gZ3N0X29iamVjdF9yZWYgKHN0cmVhbS0+Y2hhbm5lbHBhZFswXSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAidXNpbmcgbWFuYWdlciBzb3VyY2UgcGFkIik7Ci0KLSAgICB0ZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmFueXNyY3RlbXBsYXRlKTsKLQotICAgIC8qIGFsbG9jYXRlIHBhZHMgZm9yIHNlbmRpbmcgdGhlIGNoYW5uZWwgZGF0YSBpbnRvIHRoZSBtYW5hZ2VyICovCi0gICAgcGFkMCA9IGdzdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKHRlbXBsYXRlLCAiaW50ZXJuYWxzcmNfMCIpOwotICAgIGdzdF9wYWRfbGlua19mdWxsIChwYWQwLCBzdHJlYW0tPmNoYW5uZWxwYWRbMF0sIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChzdHJlYW0tPmNoYW5uZWxwYWRbMF0pOwotICAgIHN0cmVhbS0+Y2hhbm5lbHBhZFswXSA9IHBhZDA7Ci0gICAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHBhZDAsIGdzdF9ydHNwc3JjX2hhbmRsZV9pbnRlcm5hbF9zcmNfZXZlbnQpOwotICAgIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChwYWQwLCBnc3RfcnRzcHNyY19oYW5kbGVfaW50ZXJuYWxfc3JjX3F1ZXJ5KTsKLSAgICBnc3RfcGFkX3NldF9lbGVtZW50X3ByaXZhdGUgKHBhZDAsIHNyYyk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChwYWQwLCBUUlVFKTsKLQotICAgIGlmIChzdHJlYW0tPmNoYW5uZWxwYWRbMV0pIHsKLSAgICAgIC8qIGlmIHdlIGhhdmUgYSBzaW5rcGFkIGZvciB0aGUgb3RoZXIgY2hhbm5lbCwgY3JlYXRlIGEgcGFkIGFuZCBsaW5rIHRvIHRoZQotICAgICAgICogbWFuYWdlci4gKi8KLSAgICAgIHBhZDEgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbGF0ZSwgImludGVybmFsc3JjXzEiKTsKLSAgICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChwYWQxLCBnc3RfcnRzcHNyY19oYW5kbGVfaW50ZXJuYWxfc3JjX2V2ZW50KTsKLSAgICAgIGdzdF9wYWRfbGlua19mdWxsIChwYWQxLCBzdHJlYW0tPmNoYW5uZWxwYWRbMV0sCi0gICAgICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICAgICAgZ3N0X29iamVjdF91bnJlZiAoc3RyZWFtLT5jaGFubmVscGFkWzFdKTsKLSAgICAgIHN0cmVhbS0+Y2hhbm5lbHBhZFsxXSA9IHBhZDE7Ci0gICAgICBnc3RfcGFkX3NldF9hY3RpdmUgKHBhZDEsIFRSVUUpOwotICAgIH0KLSAgICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wbGF0ZSk7Ci0gIH0KLSAgLyogc2V0dXAgUlRDUCB0cmFuc3BvcnQgYmFjayB0byB0aGUgc2VydmVyIGlmIHdlIGhhdmUgdG8uICovCi0gIGlmIChzcmMtPm1hbmFnZXIgJiYgc3JjLT5kb19ydGNwKSB7Ci0gICAgR3N0UGFkICpwYWQ7Ci0KLSAgICB0ZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmFueXNpbmt0ZW1wbGF0ZSk7Ci0KLSAgICBzdHJlYW0tPnJ0Y3BwYWQgPSBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlICh0ZW1wbGF0ZSwgImludGVybmFsc2lua18wIik7Ci0gICAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHN0cmVhbS0+cnRjcHBhZCwgZ3N0X3J0c3BzcmNfc2lua19jaGFpbik7Ci0gICAgZ3N0X3BhZF9zZXRfZWxlbWVudF9wcml2YXRlIChzdHJlYW0tPnJ0Y3BwYWQsIHN0cmVhbSk7Ci0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzdHJlYW0tPnJ0Y3BwYWQsIFRSVUUpOwotCi0gICAgLyogZ2V0IHNlc3Npb24gUlRDUCBwYWQgKi8KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic2VuZF9ydGNwX3NyY18ldSIsIHN0cmVhbS0+aWQpOwotICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc3JjLT5tYW5hZ2VyLCBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotCi0gICAgLyogYW5kIGxpbmsgKi8KLSAgICBpZiAocGFkKSB7Ci0gICAgICBnc3RfcGFkX2xpbmtfZnVsbCAocGFkLCBzdHJlYW0tPnJ0Y3BwYWQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gICAgfQotCi0gICAgZ3N0X29iamVjdF91bnJlZiAodGVtcGxhdGUpOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfZ2V0X3RyYW5zcG9ydF9pbmZvIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtLAotICAgIEdzdFJUU1BUcmFuc3BvcnQgKiB0cmFuc3BvcnQsIGNvbnN0IGdjaGFyICoqIGRlc3RpbmF0aW9uLCBnaW50ICogbWluLAotICAgIGdpbnQgKiBtYXgsIGd1aW50ICogdHRsKQotewotICBpZiAodHJhbnNwb3J0LT5sb3dlcl90cmFuc3BvcnQgPT0gR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQX01DQVNUKSB7Ci0gICAgaWYgKGRlc3RpbmF0aW9uKSB7Ci0gICAgICBpZiAoISgqZGVzdGluYXRpb24gPSB0cmFuc3BvcnQtPmRlc3RpbmF0aW9uKSkKLSAgICAgICAgKmRlc3RpbmF0aW9uID0gc3RyZWFtLT5kZXN0aW5hdGlvbjsKLSAgICB9Ci0gICAgaWYgKG1pbiAmJiBtYXgpIHsKLSAgICAgIC8qIHRyYW5zcG9ydCBmaXJzdCAqLwotICAgICAgKm1pbiA9IHRyYW5zcG9ydC0+cG9ydC5taW47Ci0gICAgICAqbWF4ID0gdHJhbnNwb3J0LT5wb3J0Lm1heDsKLSAgICAgIGlmICgqbWluID09IC0xICYmICptYXggPT0gLTEpIHsKLSAgICAgICAgLyogdGhlbiB0cnkgZnJvbSBTRFAgKi8KLSAgICAgICAgaWYgKHN0cmVhbS0+cG9ydCAhPSAwKSB7Ci0gICAgICAgICAgKm1pbiA9IHN0cmVhbS0+cG9ydDsKLSAgICAgICAgICAqbWF4ID0gc3RyZWFtLT5wb3J0ICsgMTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmICh0dGwpIHsKLSAgICAgIGlmICghKCp0dGwgPSB0cmFuc3BvcnQtPnR0bCkpCi0gICAgICAgICp0dGwgPSBzdHJlYW0tPnR0bDsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGRlc3RpbmF0aW9uKSB7Ci0gICAgICAvKiBmaXJzdCB0YWtlIHRoZSBzb3VyY2UsIHRoZW4gdGhlIGVuZHBvaW50IHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gc2VuZAotICAgICAgICogdGhlIFJUQ1AuICovCi0gICAgICBpZiAoISgqZGVzdGluYXRpb24gPSB0cmFuc3BvcnQtPnNvdXJjZSkpIHsKLSAgICAgICAgaWYgKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbikKLSAgICAgICAgICAqZGVzdGluYXRpb24gPSBnc3RfcnRzcF9jb25uZWN0aW9uX2dldF9pcCAoc3JjLT5jb25uaW5mby5jb25uZWN0aW9uKTsKLSAgICAgICAgZWxzZSBpZiAoc3RyZWFtLT5jb25uaW5mby5jb25uZWN0aW9uKQotICAgICAgICAgICpkZXN0aW5hdGlvbiA9Ci0gICAgICAgICAgICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fZ2V0X2lwIChzdHJlYW0tPmNvbm5pbmZvLmNvbm5lY3Rpb24pOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobWluICYmIG1heCkgewotICAgICAgLyogZm9yIHVuaWNhc3Qgd2Ugb25seSBleHBlY3QgdGhlIHBvcnRzIGhlcmUgKi8KLSAgICAgICptaW4gPSB0cmFuc3BvcnQtPnNlcnZlcl9wb3J0Lm1pbjsKLSAgICAgICptYXggPSB0cmFuc3BvcnQtPnNlcnZlcl9wb3J0Lm1heDsKLSAgICB9Ci0gIH0KLX0KLQotLyogRm9yIG11bHRpY2FzdCBjcmVhdGUgVURQIHNvdXJjZXMgYW5kIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cC4gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tY2FzdCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RSVFNQVHJhbnNwb3J0ICogdHJhbnNwb3J0LCBHc3RQYWQgKiogb3V0cGFkKQotewotICBnY2hhciAqdXJpOwotICBjb25zdCBnY2hhciAqZGVzdGluYXRpb247Ci0gIGdpbnQgbWluLCBtYXg7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY3JlYXRpbmcgVURQIHNvdXJjZXMgZm9yIG11bHRpY2FzdCIpOwotCi0gIC8qIHdlIGNhbiByZW1vdmUgdGhlIGFsbG9jYXRlZCBVRFAgcG9ydHMgbm93ICovCi0gIGdzdF9ydHNwc3JjX3N0cmVhbV9mcmVlX3VkcCAoc3RyZWFtKTsKLQotICBnc3RfcnRzcHNyY19nZXRfdHJhbnNwb3J0X2luZm8gKHNyYywgc3RyZWFtLCB0cmFuc3BvcnQsICZkZXN0aW5hdGlvbiwgJm1pbiwKLSAgICAgICZtYXgsIE5VTEwpOwotCi0gIC8qIHdlIG5lZWQgYSBkZXN0aW5hdGlvbiBub3cgKi8KLSAgaWYgKGRlc3RpbmF0aW9uID09IE5VTEwpCi0gICAgZ290byBub19kZXN0aW5hdGlvbjsKLQotICAvKiB3ZSByZWFsbHkgbmVlZCBwb3J0cyBub3cgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byByZWNlaXZlIGFueXRoaW5nIGF0IGFsbCAqLwotICBpZiAobWluID09IC0xICYmIG1heCA9PSAtMSkKLSAgICBnb3RvIG5vX3BvcnRzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImhhdmUgZGVzdGluYXRpb24gJyVzJyBhbmQgcG9ydHMgKCVkKS0oJWQpIiwKLSAgICAgIGRlc3RpbmF0aW9uLCBtaW4sIG1heCk7Ci0KLSAgLyogY3JlYXRpbmcgVURQIHNvdXJjZSBmb3IgUlRQICovCi0gIGlmIChtaW4gIT0gLTEpIHsKLSAgICB1cmkgPSBnX3N0cmR1cF9wcmludGYgKCJ1ZHA6Ly8lczolZCIsIGRlc3RpbmF0aW9uLCBtaW4pOwotICAgIHN0cmVhbS0+dWRwc3JjWzBdID0KLSAgICAgICAgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TUkMsIHVyaSwgTlVMTCwgTlVMTCk7Ci0gICAgZ19mcmVlICh1cmkpOwotICAgIGlmIChzdHJlYW0tPnVkcHNyY1swXSA9PSBOVUxMKQotICAgICAgZ290byBub19lbGVtZW50OwotCi0gICAgLyogdGFrZSBvd25lcnNoaXAgKi8KLSAgICBnc3Rfb2JqZWN0X3JlZl9zaW5rIChzdHJlYW0tPnVkcHNyY1swXSk7Ci0KLSAgICBpZiAoc3JjLT51ZHBfYnVmZmVyX3NpemUgIT0gMCkKLSAgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHN0cmVhbS0+dWRwc3JjWzBdKSwgImJ1ZmZlci1zaXplIiwKLSAgICAgICAgICBzcmMtPnVkcF9idWZmZXJfc2l6ZSwgTlVMTCk7Ci0KLSAgICBpZiAoc3JjLT5tdWx0aV9pZmFjZSAhPSBOVUxMKQotICAgICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3RyZWFtLT51ZHBzcmNbMF0pLCAibXVsdGljYXN0LWlmYWNlIiwKLSAgICAgICAgICBzcmMtPm11bHRpX2lmYWNlLCBOVUxMKTsKLQotICAgIC8qIGNoYW5nZSBzdGF0ZSAqLwotICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHN0cmVhbS0+dWRwc3JjWzBdLCBUUlVFKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHN0cmVhbS0+dWRwc3JjWzBdLCBHU1RfU1RBVEVfUkVBRFkpOwotICB9Ci0KLSAgLyogY3JlYXRpbmcgYW5vdGhlciBVRFAgc291cmNlIGZvciBSVENQICovCi0gIGlmIChtYXggIT0gLTEpIHsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgdXJpID0gZ19zdHJkdXBfcHJpbnRmICgidWRwOi8vJXM6JWQiLCBkZXN0aW5hdGlvbiwgbWF4KTsKLSAgICBzdHJlYW0tPnVkcHNyY1sxXSA9Ci0gICAgICAgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgKEdTVF9VUklfU1JDLCB1cmksIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZSAodXJpKTsKLSAgICBpZiAoc3RyZWFtLT51ZHBzcmNbMV0gPT0gTlVMTCkKLSAgICAgIGdvdG8gbm9fZWxlbWVudDsKLQotICAgIGlmIChzdHJlYW0tPnByb2ZpbGUgPT0gR1NUX1JUU1BfUFJPRklMRV9TQVZQIHx8Ci0gICAgICAgIHN0cmVhbS0+cHJvZmlsZSA9PSBHU1RfUlRTUF9QUk9GSUxFX1NBVlBGKQotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXNydGNwIik7Ci0gICAgZWxzZQotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0Y3AiKTsKLSAgICBnX29iamVjdF9zZXQgKHN0cmVhbS0+dWRwc3JjWzFdLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIC8qIHRha2Ugb3duZXJzaGlwICovCi0gICAgZ3N0X29iamVjdF9yZWZfc2luayAoc3RyZWFtLT51ZHBzcmNbMV0pOwotCi0gICAgaWYgKHNyYy0+bXVsdGlfaWZhY2UgIT0gTlVMTCkKLSAgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHN0cmVhbS0+dWRwc3JjWzBdKSwgIm11bHRpY2FzdC1pZmFjZSIsCi0gICAgICAgICAgc3JjLT5tdWx0aV9pZmFjZSwgTlVMTCk7Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHN0cmVhbS0+dWRwc3JjWzFdLCBHU1RfU1RBVEVfUkVBRFkpOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fZWxlbWVudDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vIFVEUCBzb3VyY2UgZWxlbWVudCBmb3VuZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fZGVzdGluYXRpb246Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJubyBkZXN0aW5hdGlvbiBmb3VuZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fcG9ydHM6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJubyBwb3J0cyBmb3VuZCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBjb25maWd1cmUgdGhlIHJlbWFpbmRlciBvZiB0aGUgVURQIHBvcnRzICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtLAotICAgIEdzdFJUU1BUcmFuc3BvcnQgKiB0cmFuc3BvcnQsIEdzdFBhZCAqKiBvdXRwYWQpCi17Ci0gIC8qIHdlIG1hbmFnZSB0aGUgVURQIGVsZW1lbnRzIG5vdy4gRm9yIHVuaWNhc3QsIHRoZSBVRFAgc291cmNlcyB3aGVyZQotICAgKiBhbGxvY2F0ZWQgaW4gdGhlIHN0cmVhbSB3aGVuIHdlIHN1Z2dlc3RlZCBhIHRyYW5zcG9ydC4gKi8KLSAgaWYgKHN0cmVhbS0+dWRwc3JjWzBdKSB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHN0cmVhbS0+dWRwc3JjWzBdLCBUUlVFKTsKLSAgICBnc3RfYmluX2FkZCAoR1NUX0JJTl9DQVNUIChzcmMpLCBzdHJlYW0tPnVkcHNyY1swXSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZXR0aW5nIHVwIFVEUCBzb3VyY2UiKTsKLQotICAgIC8qIGNvbmZpZ3VyZSBhIHRpbWVvdXQgb24gdGhlIFVEUCBwb3J0LiBXaGVuIHRoZSB0aW1lb3V0IG1lc3NhZ2UgaXMKLSAgICAgKiBwb3N0ZWQsIHdlIGFzc3VtZSBVRFAgdHJhbnNwb3J0IGlzIG5vdCBwb3NzaWJsZS4gV2UgcmVjb25uZWN0IHVzaW5nIFRDUAotICAgICAqIGlmIHdlIGNhbi4gKi8KLSAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzdHJlYW0tPnVkcHNyY1swXSksICJ0aW1lb3V0IiwKLSAgICAgICAgc3JjLT51ZHBfdGltZW91dCAqIDEwMDAsIE5VTEwpOwotCi0gICAgaWYgKChjYXBzID0gc3RyZWFtX2dldF9jYXBzX2Zvcl9wdCAoc3RyZWFtLCBzdHJlYW0tPmRlZmF1bHRfcHQpKSkKLSAgICAgIGdfb2JqZWN0X3NldCAoc3RyZWFtLT51ZHBzcmNbMF0sICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0KLSAgICAvKiBnZXQgb3V0cHV0IHBhZCBvZiB0aGUgVURQIHNvdXJjZS4gKi8KLSAgICAqb3V0cGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHN0cmVhbS0+dWRwc3JjWzBdLCAic3JjIik7Ci0KLSAgICAvKiBzYXZlIGl0IHNvIHdlIGNhbiB1bmJsb2NrICovCi0gICAgc3RyZWFtLT5ibG9ja2VkcGFkID0gKm91dHBhZDsKLQotICAgIC8qIGNvbmZpZ3VyZSBwYWQgYmxvY2sgb24gdGhlIHBhZC4gQXMgc29vbiBhcyB0aGVyZSBpcyBkYXRhZmxvdyBvbiB0aGUKLSAgICAgKiBVRFAgc291cmNlLCB3ZSBrbm93IHRoYXQgVURQIGlzIG5vdCBibG9ja2VkIGJ5IGEgZmlyZXdhbGwgYW5kIHdlIGNhbgotICAgICAqIGNvbmZpZ3VyZSBhbGwgdGhlIHN0cmVhbXMgdG8gbGV0IHRoZSBhcHBsaWNhdGlvbiBhdXRvcGx1ZyBkZWNvZGVycy4gKi8KLSAgICBzdHJlYW0tPmJsb2NraWQgPQotICAgICAgICBnc3RfcGFkX2FkZF9wcm9iZSAoc3RyZWFtLT5ibG9ja2VkcGFkLAotICAgICAgICBHU1RfUEFEX1BST0JFX1RZUEVfQkxPQ0sgfCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSIHwKLSAgICAgICAgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUl9MSVNULCBwYWRfYmxvY2tlZCwgc3JjLCBOVUxMKTsKLQotICAgIGlmIChzdHJlYW0tPmNoYW5uZWxwYWRbMF0pIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvbm5lY3RpbmcgVURQIHNvdXJjZSAwIHRvIG1hbmFnZXIiKTsKLSAgICAgIC8qIGNvbmZpZ3VyZSBmb3IgVURQIGRlbGl2ZXJ5LCB3ZSBuZWVkIHRvIGNvbm5lY3QgdGhlIFVEUCBwYWRzIHRvCi0gICAgICAgKiB0aGUgc2Vzc2lvbiBwbHVnaW4uICovCi0gICAgICBnc3RfcGFkX2xpbmtfZnVsbCAoKm91dHBhZCwgc3RyZWFtLT5jaGFubmVscGFkWzBdLAotICAgICAgICAgIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKCpvdXRwYWQpOwotICAgICAgKm91dHBhZCA9IE5VTEw7Ci0gICAgICAvKiB3ZSBjb25uZWN0ZWQgdG8gcGFkLWFkZGVkIHNpZ25hbCB0byBnZXQgcGFkcyBmcm9tIHRoZSBtYW5hZ2VyICovCi0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVzaW5nIFVEUCBzcmMgcGFkIGFzIG91dHB1dCIpOwotICAgIH0KLSAgfQotCi0gIC8qIFJUQ1AgcG9ydCAqLwotICBpZiAoc3RyZWFtLT51ZHBzcmNbMV0pIHsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc3RyZWFtLT51ZHBzcmNbMV0sIFRSVUUpOwotICAgIGdzdF9iaW5fYWRkIChHU1RfQklOX0NBU1QgKHNyYyksIHN0cmVhbS0+dWRwc3JjWzFdKTsKLQotICAgIGlmIChzdHJlYW0tPnByb2ZpbGUgPT0gR1NUX1JUU1BfUFJPRklMRV9TQVZQIHx8Ci0gICAgICAgIHN0cmVhbS0+cHJvZmlsZSA9PSBHU1RfUlRTUF9QUk9GSUxFX1NBVlBGKQotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXNydGNwIik7Ci0gICAgZWxzZQotICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0Y3AiKTsKLSAgICBnX29iamVjdF9zZXQgKHN0cmVhbS0+dWRwc3JjWzFdLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgIGlmIChzdHJlYW0tPmNoYW5uZWxwYWRbMV0pIHsKLSAgICAgIEdzdFBhZCAqcGFkOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb25uZWN0aW5nIFVEUCBzb3VyY2UgMSB0byBtYW5hZ2VyIik7Ci0KLSAgICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzdHJlYW0tPnVkcHNyY1sxXSwgInNyYyIpOwotICAgICAgZ3N0X3BhZF9saW5rX2Z1bGwgKHBhZCwgc3RyZWFtLT5jaGFubmVscGFkWzFdLAotICAgICAgICAgIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGxlYXZlIHVubGlua2VkICovCi0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBjb25maWd1cmUgdGhlIFVEUCBzaW5rIGJhY2sgdG8gdGhlIHNlcnZlciBmb3Igc3RhdHVzIHJlcG9ydHMgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV91ZHBfc2lua3MgKEdzdFJUU1BTcmMgKiBzcmMsCi0gICAgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSwgR3N0UlRTUFRyYW5zcG9ydCAqIHRyYW5zcG9ydCkKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGdpbnQgcnRwX3BvcnQsIHJ0Y3BfcG9ydDsKLSAgZ2Jvb2xlYW4gZG9fcnRwLCBkb19ydGNwOwotICBjb25zdCBnY2hhciAqZGVzdGluYXRpb247Ci0gIGdjaGFyICp1cmksICpuYW1lOwotICBndWludCB0dGwgPSAwOwotICBHU29ja2V0ICpzb2NrZXQ7Ci0KLSAgLyogZ2V0IHRyYW5zcG9ydCBpbmZvICovCi0gIGdzdF9ydHNwc3JjX2dldF90cmFuc3BvcnRfaW5mbyAoc3JjLCBzdHJlYW0sIHRyYW5zcG9ydCwgJmRlc3RpbmF0aW9uLAotICAgICAgJnJ0cF9wb3J0LCAmcnRjcF9wb3J0LCAmdHRsKTsKLQotICAvKiBzZWUgd2hhdCB3ZSBuZWVkIHRvIGRvICovCi0gIGRvX3J0cCA9IChydHBfcG9ydCAhPSAtMSk7Ci0gIC8qIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2VydmVyIGRvZXMgbm90IHdhbnQgdXMgdG8gc2VuZCBSVENQIGluIHdoaWNoIGNhc2UKLSAgICogdGhlIHBvcnQgaXMgLTEgKi8KLSAgZG9fcnRjcCA9IChydGNwX3BvcnQgIT0gLTEgJiYgc3JjLT5tYW5hZ2VyICE9IE5VTEwgJiYgc3JjLT5kb19ydGNwKTsKLQotICAvKiB3ZSBuZWVkIGEgZGVzdGluYXRpb24gd2hlbiB3ZSBoYXZlIFJUUCBvciBSVENQIHBvcnRzICovCi0gIGlmIChkZXN0aW5hdGlvbiA9PSBOVUxMICYmIChkb19ydHAgfHwgZG9fcnRjcCkpCi0gICAgZ290byBub19kZXN0aW5hdGlvbjsKLQotICAvKiB0cnkgdG8gY29uc3RydWN0IHRoZSBmYWtlc3JjIHRvIHRoZSBSVFAgcG9ydCBvZiB0aGUgc2VydmVyIHRvIG9wZW4gdXAgYW55Ci0gICAqIE5BVCBmaXJld2FsbHMgKi8KLSAgaWYgKGRvX3J0cCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvbmZpZ3VyZSBSVFAgVURQIHNpbmsgZm9yICVzOiVkIiwgZGVzdGluYXRpb24sCi0gICAgICAgIHJ0cF9wb3J0KTsKLQotICAgIHVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoInVkcDovLyVzOiVkIiwgZGVzdGluYXRpb24sIHJ0cF9wb3J0KTsKLSAgICBzdHJlYW0tPnVkcHNpbmtbMF0gPQotICAgICAgICBnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIChHU1RfVVJJX1NJTkssIHVyaSwgTlVMTCwgTlVMTCk7Ci0gICAgZ19mcmVlICh1cmkpOwotICAgIGlmIChzdHJlYW0tPnVkcHNpbmtbMF0gPT0gTlVMTCkKLSAgICAgIGdvdG8gbm9fc2lua19lbGVtZW50OwotCi0gICAgLyogZG9uJ3Qgam9pbiBtdWx0aWNhc3QgZ3JvdXAsIHdlIHdpbGwgaGF2ZSB0aGUgc291cmNlIHNvY2tldCBkbyB0aGF0ICovCi0gICAgLyogbm8gc3luYyBvciBhc3luYyBzdGF0ZSBjaGFuZ2VzIG5lZWRlZCAqLwotICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHN0cmVhbS0+dWRwc2lua1swXSksICJhdXRvLW11bHRpY2FzdCIsIEZBTFNFLAotICAgICAgICAibG9vcCIsIEZBTFNFLCAic3luYyIsIEZBTFNFLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gICAgaWYgKHR0bCA+IDApCi0gICAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzdHJlYW0tPnVkcHNpbmtbMF0pLCAidHRsIiwgdHRsLCBOVUxMKTsKLQotICAgIGlmIChzdHJlYW0tPnVkcHNyY1swXSkgewotICAgICAgLyogY29uZmlndXJlIHNvY2tldCwgd2UgZ2l2ZSBpdCB0aGUgc2FtZSBVRFAgc29ja2V0IGFzIHRoZSB1ZHBzcmMgZm9yIFJUUAotICAgICAgICogc28gdGhhdCBOQVQgZmlyZXdhbGxzIHdpbGwgb3BlbiBhIGhvbGUgZm9yIHVzICovCi0gICAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzdHJlYW0tPnVkcHNyY1swXSksICJ1c2VkLXNvY2tldCIsICZzb2NrZXQsIE5VTEwpOwotICAgICAgaWYgKCFzb2NrZXQpCi0gICAgICAgIGdvdG8gbm9fc29ja2V0OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJSVFAgVURQIHNyYyBoYXMgc29jayAlcCIsIHNvY2tldCk7Ci0gICAgICAvKiBjb25maWd1cmUgc29ja2V0IGFuZCBtYWtlIHN1cmUgdWRwc2luayBkb2VzIG5vdCBjbG9zZSBpdCB3aGVuIHNodXR0aW5nCi0gICAgICAgKiBkb3duLCBpdCBiZWxvbmdzIHRvIHVkcHNyYyBhZnRlciBhbGwuICovCi0gICAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzdHJlYW0tPnVkcHNpbmtbMF0pLCAic29ja2V0Iiwgc29ja2V0LAotICAgICAgICAgICJjbG9zZS1zb2NrZXQiLCBGQUxTRSwgTlVMTCk7Ci0gICAgICBnX29iamVjdF91bnJlZiAoc29ja2V0KTsKLSAgICB9Ci0KLSAgICAvKiB0aGUgc291cmNlIGZvciB0aGUgZHVtbXkgcGFja2V0cyB0byBvcGVuIHVwIE5BVCAqLwotICAgIHN0cmVhbS0+ZmFrZXNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzcmMiLCBOVUxMKTsKLSAgICBpZiAoc3RyZWFtLT5mYWtlc3JjID09IE5VTEwpCi0gICAgICBnb3RvIG5vX2Zha2VzcmNfZWxlbWVudDsKLQotICAgIC8qIHJhbmRvbSBkYXRhIGluIDUgYnVmZmVycywgYSBzaXplIG9mIDIwMCBieXRlcyBzaG91bGQgYmUgZmluZSAqLwotICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHN0cmVhbS0+ZmFrZXNyYyksICJmaWxsdHlwZSIsIDMsICJudW0tYnVmZmVycyIsIDUsCi0gICAgICAgICJzaXpldHlwZSIsIDIsICJzaXplbWF4IiwgMjAwLCAic2lsZW50IiwgVFJVRSwgTlVMTCk7Ci0KLSAgICAvKiBrZWVwIGV2ZXJ5dGhpbmcgbG9ja2VkICovCi0gICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSAoc3RyZWFtLT51ZHBzaW5rWzBdLCBUUlVFKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlIChzdHJlYW0tPmZha2VzcmMsIFRSVUUpOwotCi0gICAgZ3N0X29iamVjdF9yZWYgKHN0cmVhbS0+dWRwc2lua1swXSk7Ci0gICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU5fQ0FTVCAoc3JjKSwgc3RyZWFtLT51ZHBzaW5rWzBdKTsKLSAgICBnc3Rfb2JqZWN0X3JlZiAoc3RyZWFtLT5mYWtlc3JjKTsKLSAgICBnc3RfYmluX2FkZCAoR1NUX0JJTl9DQVNUIChzcmMpLCBzdHJlYW0tPmZha2VzcmMpOwotCi0gICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHN0cmVhbS0+ZmFrZXNyYywgInNyYyIsIHN0cmVhbS0+dWRwc2lua1swXSwKLSAgICAgICAgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gIH0KLSAgaWYgKGRvX3J0Y3ApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb25maWd1cmUgUlRDUCBVRFAgc2luayBmb3IgJXM6JWQiLCBkZXN0aW5hdGlvbiwKLSAgICAgICAgcnRjcF9wb3J0KTsKLQotICAgIHVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoInVkcDovLyVzOiVkIiwgZGVzdGluYXRpb24sIHJ0Y3BfcG9ydCk7Ci0gICAgc3RyZWFtLT51ZHBzaW5rWzFdID0KLSAgICAgICAgZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSAoR1NUX1VSSV9TSU5LLCB1cmksIE5VTEwsIE5VTEwpOwotICAgIGdfZnJlZSAodXJpKTsKLSAgICBpZiAoc3RyZWFtLT51ZHBzaW5rWzFdID09IE5VTEwpCi0gICAgICBnb3RvIG5vX3NpbmtfZWxlbWVudDsKLQotICAgIC8qIGRvbid0IGpvaW4gbXVsdGljYXN0IGdyb3VwLCB3ZSB3aWxsIGhhdmUgdGhlIHNvdXJjZSBzb2NrZXQgZG8gdGhhdCAqLwotICAgIC8qIG5vIHN5bmMgb3IgYXN5bmMgc3RhdGUgY2hhbmdlcyBuZWVkZWQgKi8KLSAgICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzdHJlYW0tPnVkcHNpbmtbMV0pLCAiYXV0by1tdWx0aWNhc3QiLCBGQUxTRSwKLSAgICAgICAgImxvb3AiLCBGQUxTRSwgInN5bmMiLCBGQUxTRSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOwotICAgIGlmICh0dGwgPiAwKQotICAgICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3RyZWFtLT51ZHBzaW5rWzBdKSwgInR0bCIsIHR0bCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RyZWFtLT51ZHBzcmNbMV0pIHsKLSAgICAgIC8qIGNvbmZpZ3VyZSBzb2NrZXQsIHdlIGdpdmUgaXQgdGhlIHNhbWUgVURQIHNvY2tldCBhcyB0aGUgdWRwc3JjIGZvciBSVENQCi0gICAgICAgKiBiZWNhdXNlIHNvbWUgc2VydmVycyBjaGVjayB0aGUgcG9ydCBudW1iZXIgb2Ygd2hlcmUgaXQgc2VuZHMgUlRDUCB0byBpZGVudGlmeQotICAgICAgICogdGhlIFJUQ1AgcGFja2V0cyBpdCByZWNlaXZlcyAqLwotICAgICAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoc3RyZWFtLT51ZHBzcmNbMV0pLCAidXNlZC1zb2NrZXQiLCAmc29ja2V0LCBOVUxMKTsKLSAgICAgIGlmICghc29ja2V0KQotICAgICAgICBnb3RvIG5vX3NvY2tldDsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUlRDUCBVRFAgc3JjIGhhcyBzb2NrICVwIiwgc29ja2V0KTsKLSAgICAgIC8qIGNvbmZpZ3VyZSBzb2NrZXQgYW5kIG1ha2Ugc3VyZSB1ZHBzaW5rIGRvZXMgbm90IGNsb3NlIGl0IHdoZW4gc2h1dHRpbmcKLSAgICAgICAqIGRvd24sIGl0IGJlbG9uZ3MgdG8gdWRwc3JjIGFmdGVyIGFsbC4gKi8KLSAgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHN0cmVhbS0+dWRwc2lua1sxXSksICJzb2NrZXQiLCBzb2NrZXQsCi0gICAgICAgICAgImNsb3NlLXNvY2tldCIsIEZBTFNFLCBOVUxMKTsKLSAgICAgIGdfb2JqZWN0X3VucmVmIChzb2NrZXQpOwotICAgIH0KLQotICAgIC8qIHdlIGtlZXAgdGhpcyBwbGF5aW5nIGFsd2F5cyAqLwotICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUgKHN0cmVhbS0+dWRwc2lua1sxXSwgVFJVRSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzdHJlYW0tPnVkcHNpbmtbMV0sIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAgIGdzdF9vYmplY3RfcmVmIChzdHJlYW0tPnVkcHNpbmtbMV0pOwotICAgIGdzdF9iaW5fYWRkIChHU1RfQklOX0NBU1QgKHNyYyksIHN0cmVhbS0+dWRwc2lua1sxXSk7Ci0KLSAgICBzdHJlYW0tPnJ0Y3BwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3RyZWFtLT51ZHBzaW5rWzFdLCAic2luayIpOwotCi0gICAgLyogZ2V0IHNlc3Npb24gUlRDUCBwYWQgKi8KLSAgICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic2VuZF9ydGNwX3NyY18ldSIsIHN0cmVhbS0+aWQpOwotICAgIHBhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoc3JjLT5tYW5hZ2VyLCBuYW1lKTsKLSAgICBnX2ZyZWUgKG5hbWUpOwotCi0gICAgLyogYW5kIGxpbmsgKi8KLSAgICBpZiAocGFkKSB7Ci0gICAgICBnc3RfcGFkX2xpbmtfZnVsbCAocGFkLCBzdHJlYW0tPnJ0Y3BwYWQsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19kZXN0aW5hdGlvbjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgIm5vIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc3BlY2lmaWVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19zaW5rX2VsZW1lbnQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJubyBVRFAgc2luayBlbGVtZW50IGZvdW5kIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19mYWtlc3JjX2VsZW1lbnQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJubyBmYWtlc3JjIGVsZW1lbnQgZm91bmQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3NvY2tldDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBjcmVhdGUgc29ja2V0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIHNldHMgdXAgYWxsIGVsZW1lbnRzIG5lZWRlZCBmb3Igc3RyZWFtaW5nIG92ZXIgdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQuCi0gKiBEb2VzIG5vdCB5ZXQgZXhwb3NlIHRoZSBlbGVtZW50IHBhZHMsIHRoaXMgd2lsbCBiZSBkb25lIHdoZW4gdGhlcmUgaXMgYWN0dWFsbAotICogZGF0YWZsb3cgZGV0ZWN0ZWQsIHdoaWNoIG1pZ2h0IG5ldmVyIGhhcHBlbiB3aGVuIFVEUCBpcyBibG9ja2VkIGluIGEKLSAqIGZpcmV3YWxsLCBmb3IgZXhhbXBsZS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RyYW5zcG9ydCAoR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RSVFNQVHJhbnNwb3J0ICogdHJhbnNwb3J0KQotewotICBHc3RSVFNQU3JjICpzcmM7Ci0gIEdzdFBhZCAqb3V0cGFkID0gTlVMTDsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsYXRlOwotICBnY2hhciAqbmFtZTsKLSAgY29uc3QgZ2NoYXIgKm1lZGlhX3R5cGU7Ci0gIGd1aW50IGksIGxlbjsKLQotICBzcmMgPSBzdHJlYW0tPnBhcmVudDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb25maWd1cmluZyB0cmFuc3BvcnQgZm9yIHN0cmVhbSAlcCIsIHN0cmVhbSk7Ci0KLSAgLyogZ2V0IHRoZSBwcm9wZXIgbWVkaWEgdHlwZSBmb3IgdGhpcyBzdHJlYW0gbm93ICovCi0gIGlmIChnc3RfcnRzcF90cmFuc3BvcnRfZ2V0X21lZGlhX3R5cGUgKHRyYW5zcG9ydCwgJm1lZGlhX3R5cGUpIDwgMCkKLSAgICBnb3RvIHVua25vd25fdHJhbnNwb3J0OwotICBpZiAoIW1lZGlhX3R5cGUpCi0gICAgZ290byB1bmtub3duX3RyYW5zcG9ydDsKLQotICAvKiBjb25maWd1cmUgdGhlIGZpbmFsIG1lZGlhIHR5cGUgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2V0dGluZyBtZWRpYSB0eXBlIHRvICVzIiwgbWVkaWFfdHlwZSk7Ci0KLSAgbGVuID0gc3RyZWFtLT5wdG1hcC0+bGVuOwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgUHRNYXBJdGVtICppdGVtID0gJmdfYXJyYXlfaW5kZXggKHN0cmVhbS0+cHRtYXAsIFB0TWFwSXRlbSwgaSk7Ci0KLSAgICBpZiAoaXRlbS0+Y2FwcyA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0KLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoaXRlbS0+Y2FwcywgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAocywgbWVkaWFfdHlwZSk7Ci0gICAgLyogc2V0IHNzcmMgaWYga25vd24gKi8KLSAgICBpZiAodHJhbnNwb3J0LT5zc3JjKQotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJzc3JjIiwgR19UWVBFX1VJTlQsIHRyYW5zcG9ydC0+c3NyYywgTlVMTCk7Ci0gIH0KLQotICAvKiB0cnkgdG8gZ2V0IGFuZCBjb25maWd1cmUgYSBtYW5hZ2VyLCBjaGFubmVscGFkWzAtMV0gd2lsbCBiZSBjb25maWd1cmVkIHdpdGgKLSAgICogdGhlIHBhZHMgZm9yIHRoZSBtYW5hZ2VyLCBvciBOVUxMIHdoZW4gbm8gbWFuYWdlciBpcyBuZWVkZWQuICovCi0gIGlmICghZ3N0X3J0c3BzcmNfc3RyZWFtX2NvbmZpZ3VyZV9tYW5hZ2VyIChzcmMsIHN0cmVhbSwgdHJhbnNwb3J0KSkKLSAgICBnb3RvIG5vX21hbmFnZXI7Ci0KLSAgc3dpdGNoICh0cmFuc3BvcnQtPmxvd2VyX3RyYW5zcG9ydCkgewotICAgIGNhc2UgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVENQOgotICAgICAgaWYgKCFnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3RjcCAoc3JjLCBzdHJlYW0sIHRyYW5zcG9ydCwgJm91dHBhZCkpCi0gICAgICAgIGdvdG8gdHJhbnNwb3J0X2ZhaWxlZDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQX01DQVNUOgotICAgICAgaWYgKCFnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX21jYXN0IChzcmMsIHN0cmVhbSwgdHJhbnNwb3J0LCAmb3V0cGFkKSkKLSAgICAgICAgZ290byB0cmFuc3BvcnRfZmFpbGVkOwotICAgICAgLyogZmFsbHRocm91Z2gsIHRoZSByZXN0IGlzIHRoZSBzYW1lIGZvciBVRFAgYW5kIE1DQVNUICovCi0gICAgY2FzZSBHU1RfUlRTUF9MT1dFUl9UUkFOU19VRFA6Ci0gICAgICBpZiAoIWdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdWRwIChzcmMsIHN0cmVhbSwgdHJhbnNwb3J0LCAmb3V0cGFkKSkKLSAgICAgICAgZ290byB0cmFuc3BvcnRfZmFpbGVkOwotICAgICAgLyogY29uZmlndXJlIHVkcHNpbmtzIGJhY2sgdG8gdGhlIHNlcnZlciBmb3IgUlRDUCBtZXNzYWdlcyBhbmQgZm9yIHRoZQotICAgICAgICogZHVtbXkgUlRQIG1lc3NhZ2VzIHRvIG9wZW4gTkFULiAqLwotICAgICAgaWYgKCFnc3RfcnRzcHNyY19zdHJlYW1fY29uZmlndXJlX3VkcF9zaW5rcyAoc3JjLCBzdHJlYW0sIHRyYW5zcG9ydCkpCi0gICAgICAgIGdvdG8gdHJhbnNwb3J0X2ZhaWxlZDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnb3RvIHVua25vd25fdHJhbnNwb3J0OwotICB9Ci0KLSAgaWYgKG91dHBhZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNyZWF0aW5nIGdob3N0cGFkIik7Ci0KLSAgICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChvdXRwYWQpOwotCi0gICAgLyogY3JlYXRlIGdob3N0cGFkLCBkb24ndCBhZGQganVzdCB5ZXQsIHRoaXMgd2lsbCBiZSBkb25lIHdoZW4gd2UgYWN0aXZhdGUKLSAgICAgKiB0aGUgc3RyZWFtLiAqLwotICAgIG5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzdHJlYW1fJXUiLCBzdHJlYW0tPmlkKTsKLSAgICB0ZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJnJ0cHRlbXBsYXRlKTsKLSAgICBzdHJlYW0tPnNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X2Zyb21fdGVtcGxhdGUgKG5hbWUsIG91dHBhZCwgdGVtcGxhdGUpOwotICAgIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzdHJlYW0tPnNyY3BhZCwgZ3N0X3J0c3BzcmNfaGFuZGxlX3NyY19ldmVudCk7Ci0gICAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHN0cmVhbS0+c3JjcGFkLCBnc3RfcnRzcHNyY19oYW5kbGVfc3JjX3F1ZXJ5KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmICh0ZW1wbGF0ZSk7Ci0gICAgZ19mcmVlIChuYW1lKTsKLQotICAgIGdzdF9vYmplY3RfdW5yZWYgKG91dHBhZCk7Ci0gIH0KLSAgLyogbWFyayBwYWQgYXMgb2sgKi8KLSAgc3RyZWFtLT5sYXN0X3JldCA9IEdTVF9GTE9XX09LOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdHJhbnNwb3J0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBjb25maWd1cmUgdHJhbnNwb3J0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci11bmtub3duX3RyYW5zcG9ydDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVua25vd24gdHJhbnNwb3J0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19tYW5hZ2VyOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2Fubm90IGdldCBhIHNlc3Npb24gbWFuYWdlciIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKiBzZW5kIGEgY291cGxlIG9mIGR1bW15IHJhbmRvbSBwYWNrZXRzIG9uIHRoZSByZWNlaXZlciBSVFAgcG9ydCB0byB0aGUgc2VydmVyLAotICogdGhpcyBzaG91bGQgbWFrZSBhIGZpcmV3YWxsIHRoaW5rIHdlIGluaXRpYXRlZCB0aGUgZGF0YSB0cmFuc2ZlciBhbmQKLSAqIGhvcGVmdWxseSBhbGxvdyBwYWNrZXRzIHRvIGdvIGZyb20gdGhlIHNlbmRlciBwb3J0IHRvIG91ciBSVFAgcmVjZWl2ZXIgcG9ydCAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19zZW5kX2R1bW15X3BhY2tldHMgKEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIEdMaXN0ICp3YWxrOwotCi0gIGlmIChzcmMtPm5hdF9tZXRob2QgIT0gR1NUX1JUU1BfTkFUX0RVTU1ZKQotICAgIHJldHVybiBUUlVFOwotCi0gIGZvciAod2FsayA9IHNyYy0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoc3RyZWFtLT5mYWtlc3JjICYmIHN0cmVhbS0+dWRwc2lua1swXSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2VuZGluZyBkdW1teSBwYWNrZXQgdG8gc3RyZWFtICVwIiwgc3RyZWFtKTsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3RyZWFtLT51ZHBzaW5rWzBdLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHN0cmVhbS0+ZmFrZXNyYywgR1NUX1NUQVRFX05VTEwpOwotICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzdHJlYW0tPnVkcHNpbmtbMF0sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3RyZWFtLT5mYWtlc3JjLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiBBZGRzIHRoZSBzb3VyY2UgcGFkcyBvZiBhbGwgY29uZmlndXJlZCBzdHJlYW1zIHRvIHRoZSBlbGVtZW50LgotICogVGhpcyBjb2RlIGlzIHBlcmZvcm1lZCB3aGVuIHdlIGRldGVjdGVkIGRhdGFmbG93LgotICoKLSAqIFdlIGRldGVjdCBkYXRhZmxvdyBmcm9tIGVpdGhlciB0aGUgX2xvb3AgZnVuY3Rpb24gb3Igd2l0aCBwYWQgcHJvYmVzIG9uIHRoZQotICogdWRwIHNvdXJjZXMuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfYWN0aXZhdGVfc3RyZWFtcyAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgR0xpc3QgKndhbGs7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYWN0aXZhdGluZyBzdHJlYW1zIik7Ci0KLSAgZm9yICh3YWxrID0gc3JjLT5zdHJlYW1zOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgd2Fsay0+ZGF0YTsKLQotICAgIGlmIChzdHJlYW0tPnVkcHNyY1swXSkgewotICAgICAgLyogcmVtb3ZlIHRpbWVvdXQsIHdlIGFyZSBzdHJlYW1pbmcgbm93IGFuZCB0aW1lb3V0cyB3aWxsIGJlIGhhbmRsZWQgYnkKLSAgICAgICAqIHRoZSBzZXNzaW9uIG1hbmFnZXIgYW5kIGppdHRlciBidWZmZXIgKi8KLSAgICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHN0cmVhbS0+dWRwc3JjWzBdKSwgInRpbWVvdXQiLCAoZ3VpbnQ2NCkgMCwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChzdHJlYW0tPnNyY3BhZCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYWN0aXZhdGluZyBzdHJlYW0gcGFkICVwIiwgc3RyZWFtKTsKLSAgICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3RyZWFtLT5zcmNwYWQsIFRSVUUpOwotCi0gICAgICAvKiBpZiB3ZSBkb24ndCBoYXZlIGEgc2Vzc2lvbiBtYW5hZ2VyLCBzZXQgdGhlIGNhcHMgbm93LiBJZiB3ZSBoYXZlIGEKLSAgICAgICAqIHNlc3Npb24sIHdlIHdpbGwgZ2V0IGEgbm90aWZpY2F0aW9uIG9mIHRoZSBwYWQgYW5kIHRoZSBjYXBzLiAqLwotICAgICAgaWYgKCFzcmMtPm1hbmFnZXIpIHsKLSAgICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgICBjYXBzID0gc3RyZWFtX2dldF9jYXBzX2Zvcl9wdCAoc3RyZWFtLCBzdHJlYW0tPmRlZmF1bHRfcHQpOwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZXR0aW5nIHBhZCBjYXBzIGZvciBzdHJlYW0gJXAiLCBzdHJlYW0pOwotICAgICAgICBnc3RfcGFkX3NldF9jYXBzIChzdHJlYW0tPnNyY3BhZCwgY2Fwcyk7Ci0gICAgICB9Ci0gICAgICAvKiBhZGQgdGhlIHBhZCAqLwotICAgICAgaWYgKCFzdHJlYW0tPmFkZGVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImFkZGluZyBzdHJlYW0gcGFkICVwIiwgc3RyZWFtKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlRfQ0FTVCAoc3JjKSwgc3RyZWFtLT5zcmNwYWQpOwotICAgICAgICBzdHJlYW0tPmFkZGVkID0gVFJVRTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiB1bmJsb2NrIGFsbCBwYWRzICovCi0gIGZvciAod2FsayA9IHNyYy0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIHdhbGstPmRhdGE7Ci0KLSAgICBpZiAoc3RyZWFtLT5ibG9ja2lkKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ1bmJsb2NraW5nIHN0cmVhbSBwYWQgJXAiLCBzdHJlYW0pOwotICAgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUgKHN0cmVhbS0+YmxvY2tlZHBhZCwgc3RyZWFtLT5ibG9ja2lkKTsKLSAgICAgIHN0cmVhbS0+YmxvY2tpZCA9IDA7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19jb25maWd1cmVfY2FwcyAoR3N0UlRTUFNyYyAqIHNyYywgR3N0U2VnbWVudCAqIHNlZ21lbnQsCi0gICAgZ2Jvb2xlYW4gcmVzZXRfbWFuYWdlcikKLXsKLSAgR0xpc3QgKndhbGs7Ci0gIGd1aW50NjQgc3RhcnQsIHN0b3A7Ci0gIGdkb3VibGUgcGxheV9zcGVlZCwgcGxheV9zY2FsZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb25maWd1cmluZyBzdHJlYW0gY2FwcyIpOwotCi0gIHN0YXJ0ID0gc2VnbWVudC0+cG9zaXRpb247Ci0gIHN0b3AgPSBzZWdtZW50LT5kdXJhdGlvbjsKLSAgcGxheV9zcGVlZCA9IHNlZ21lbnQtPnJhdGU7Ci0gIHBsYXlfc2NhbGUgPSBzZWdtZW50LT5hcHBsaWVkX3JhdGU7Ci0KLSAgZm9yICh3YWxrID0gc3JjLT5zdHJlYW1zOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgd2Fsay0+ZGF0YTsKLSAgICBndWludCBqLCBsZW47Ci0KLSAgICBpZiAoIXN0cmVhbS0+c2V0dXApCi0gICAgICBjb250aW51ZTsKLQotICAgIGxlbiA9IHN0cmVhbS0+cHRtYXAtPmxlbjsKLSAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgICBQdE1hcEl0ZW0gKml0ZW0gPSAmZ19hcnJheV9pbmRleCAoc3RyZWFtLT5wdG1hcCwgUHRNYXBJdGVtLCBqKTsKLQotICAgICAgaWYgKGl0ZW0tPmNhcHMgPT0gTlVMTCkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChpdGVtLT5jYXBzKTsKLSAgICAgIC8qIHVwZGF0ZSBjYXBzICovCi0gICAgICBpZiAoc3RyZWFtLT50aW1lYmFzZSAhPSAtMSkKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImNsb2NrLWJhc2UiLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAgIChndWludCkgc3RyZWFtLT50aW1lYmFzZSwgTlVMTCk7Ci0gICAgICBpZiAoc3RyZWFtLT5zZXFiYXNlICE9IC0xKQotICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAic2VxbnVtLWJhc2UiLCBHX1RZUEVfVUlOVCwKLSAgICAgICAgICAgIChndWludCkgc3RyZWFtLT5zZXFiYXNlLCBOVUxMKTsKLSAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMsICJucHQtc3RhcnQiLCBHX1RZUEVfVUlOVDY0LCBzdGFydCwgTlVMTCk7Ci0gICAgICBpZiAoc3RvcCAhPSAtMSkKLSAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgIm5wdC1zdG9wIiwgR19UWVBFX1VJTlQ2NCwgc3RvcCwgTlVMTCk7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAicGxheS1zcGVlZCIsIEdfVFlQRV9ET1VCTEUsIHBsYXlfc3BlZWQsIE5VTEwpOwotICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgInBsYXktc2NhbGUiLCBHX1RZUEVfRE9VQkxFLCBwbGF5X3NjYWxlLCBOVUxMKTsKLQotICAgICAgaXRlbS0+Y2FwcyA9IGNhcHM7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdHJlYW0gJXAsIHB0ICVkLCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBzdHJlYW0sCi0gICAgICAgICAgaXRlbS0+cHQsIGNhcHMpOwotCi0gICAgICBpZiAoaXRlbS0+cHQgPT0gc3RyZWFtLT5kZWZhdWx0X3B0KSB7Ci0gICAgICAgIGlmIChzdHJlYW0tPnVkcHNyY1swXSkKLSAgICAgICAgICBnX29iamVjdF9zZXQgKHN0cmVhbS0+dWRwc3JjWzBdLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotICAgICAgICBzdHJlYW0tPm5lZWRfY2FwcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChyZXNldF9tYW5hZ2VyICYmIHNyYy0+bWFuYWdlcikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNsZWFyIHNlc3Npb24iKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHNyYy0+bWFuYWdlciwgImNsZWFyLXB0LW1hcCIsIE5VTEwpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRzcHNyY19jb21iaW5lX2Zsb3dzIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtLAotICAgIEdzdEZsb3dSZXR1cm4gcmV0KQotewotICBHTGlzdCAqc3RyZWFtczsKLQotICAvKiBzdG9yZSB0aGUgdmFsdWUgKi8KLSAgc3RyZWFtLT5sYXN0X3JldCA9IHJldDsKLQotICAvKiBpZiBpdCdzIHN1Y2Nlc3Mgd2UgY2FuIHJldHVybiB0aGUgdmFsdWUgcmlnaHQgYXdheSAqLwotICBpZiAocmV0ID09IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBhbnkgb3RoZXIgZXJyb3IgdGhhdCBpcyBub3QtbGlua2VkIGNhbiBiZSByZXR1cm5lZCByaWdodAotICAgKiBhd2F5ICovCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogb25seSByZXR1cm4gTk9UX0xJTktFRCBpZiBhbGwgb3RoZXIgcGFkcyByZXR1cm5lZCBOT1RfTElOS0VEICovCi0gIGZvciAoc3RyZWFtcyA9IHNyYy0+c3RyZWFtczsgc3RyZWFtczsgc3RyZWFtcyA9IGdfbGlzdF9uZXh0IChzdHJlYW1zKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKm9zdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSBzdHJlYW1zLT5kYXRhOwotCi0gICAgcmV0ID0gb3N0cmVhbS0+bGFzdF9yZXQ7Ci0gICAgLyogc29tZSBvdGhlciByZXR1cm4gdmFsdWUgKG11c3QgYmUgU1VDQ0VTUyBidXQgd2UgY2FuIHJldHVybgotICAgICAqIG90aGVyIHZhbHVlcyBhcyB3ZWxsKSAqLwotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfTk9UX0xJTktFRCkKLSAgICAgIGdvdG8gZG9uZTsKLSAgfQotICAvKiBpZiB3ZSBnZXQgaGVyZSwgYWxsIG90aGVyIHBhZHMgd2VyZSB1bmxpbmtlZCBhbmQgd2UgcmV0dXJuCi0gICAqIE5PVF9MSU5LRUQgdGhlbiAqLwotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19zdHJlYW1fcHVzaF9ldmVudCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIC8qIG9ubHkgc3RyZWFtcyB0aGF0IGhhdmUgYSBjb25uZWN0aW9uIHRvIHRoZSBvdXRzaWRlIHdvcmxkICovCi0gIGlmICghc3RyZWFtLT5zZXR1cCkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgaWYgKHN0cmVhbS0+dWRwc3JjWzBdKSB7Ci0gICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgIHJlcyA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKHN0cmVhbS0+dWRwc3JjWzBdLCBldmVudCk7Ci0gIH0gZWxzZSBpZiAoc3RyZWFtLT5jaGFubmVscGFkWzBdKSB7Ci0gICAgZ3N0X2V2ZW50X3JlZiAoZXZlbnQpOwotICAgIGlmIChHU1RfUEFEX0lTX1NSQyAoc3RyZWFtLT5jaGFubmVscGFkWzBdKSkKLSAgICAgIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5jaGFubmVscGFkWzBdLCBldmVudCk7Ci0gICAgZWxzZQotICAgICAgcmVzID0gZ3N0X3BhZF9zZW5kX2V2ZW50IChzdHJlYW0tPmNoYW5uZWxwYWRbMF0sIGV2ZW50KTsKLSAgfQotCi0gIGlmIChzdHJlYW0tPnVkcHNyY1sxXSkgewotICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICByZXMgJj0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoc3RyZWFtLT51ZHBzcmNbMV0sIGV2ZW50KTsKLSAgfSBlbHNlIGlmIChzdHJlYW0tPmNoYW5uZWxwYWRbMV0pIHsKLSAgICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gICAgaWYgKEdTVF9QQURfSVNfU1JDIChzdHJlYW0tPmNoYW5uZWxwYWRbMV0pKQotICAgICAgcmVzICY9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3RyZWFtLT5jaGFubmVscGFkWzFdLCBldmVudCk7Ci0gICAgZWxzZQotICAgICAgcmVzICY9IGdzdF9wYWRfc2VuZF9ldmVudCAoc3RyZWFtLT5jaGFubmVscGFkWzFdLCBldmVudCk7Ci0gIH0KLQotZG9uZToKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19wdXNoX2V2ZW50IChHc3RSVFNQU3JjICogc3JjLCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHTGlzdCAqc3RyZWFtczsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLQotICBmb3IgKHN0cmVhbXMgPSBzcmMtPnN0cmVhbXM7IHN0cmVhbXM7IHN0cmVhbXMgPSBnX2xpc3RfbmV4dCAoc3RyZWFtcykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpvc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgc3RyZWFtcy0+ZGF0YTsKLQotICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLSAgICByZXMgJj0gZ3N0X3J0c3BzcmNfc3RyZWFtX3B1c2hfZXZlbnQgKHNyYywgb3N0cmVhbSwgZXZlbnQpOwotICB9Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcF9jb25uaW5mb19jb25uZWN0IChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQQ29ubkluZm8gKiBpbmZvLAotICAgIGdib29sZWFuIGFzeW5jKQotewotICBHc3RSVFNQUmVzdWx0IHJlczsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVzcG9uc2U7Ci0gIGdib29sZWFuIHJldHJ5ID0gRkFMU0U7Ci0gIG1lbXNldCAoJnJlc3BvbnNlLCAwLCBzaXplb2YgKHJlc3BvbnNlKSk7Ci0gIGdzdF9ydHNwX21lc3NhZ2VfaW5pdCAoJnJlc3BvbnNlKTsKLSAgZG8gewotICAgIGlmIChpbmZvLT5jb25uZWN0aW9uID09IE5VTEwpIHsKLSAgICAgIGlmIChpbmZvLT51cmwgPT0gTlVMTCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwYXJzaW5nIHVyaSAoJXMpLi4uIiwgaW5mby0+bG9jYXRpb24pOwotICAgICAgICBpZiAoKHJlcyA9IGdzdF9ydHNwX3VybF9wYXJzZSAoaW5mby0+bG9jYXRpb24sICZpbmZvLT51cmwpKSA8IDApCi0gICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICAgIH0KLSAgICAgIC8qIGNyZWF0ZSBjb25uZWN0aW9uICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjcmVhdGluZyBjb25uZWN0aW9uICglcykuLi4iLCBpbmZvLT5sb2NhdGlvbik7Ci0gICAgICBpZiAoKHJlcyA9IGdzdF9ydHNwX2Nvbm5lY3Rpb25fY3JlYXRlIChpbmZvLT51cmwsICZpbmZvLT5jb25uZWN0aW9uKSkgPCAwKQotICAgICAgICBnb3RvIGNvdWxkX25vdF9jcmVhdGU7Ci0KLSAgICAgIGlmIChyZXRyeSkgewotICAgICAgICBnc3RfcnRzcHNyY19zZXR1cF9hdXRoIChzcmMsICZyZXNwb25zZSk7Ci0gICAgICB9Ci0KLSAgICAgIGdfZnJlZSAoaW5mby0+dXJsX3N0cik7Ci0gICAgICBpbmZvLT51cmxfc3RyID0gZ3N0X3J0c3BfdXJsX2dldF9yZXF1ZXN0X3VyaSAoaW5mby0+dXJsKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2FuaXRpemVkIHVyaSAlcyIsIGluZm8tPnVybF9zdHIpOwotCi0gICAgICBpZiAoaW5mby0+dXJsLT50cmFuc3BvcnRzICYgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVExTKSB7Ci0gICAgICAgIGlmICghZ3N0X3J0c3BfY29ubmVjdGlvbl9zZXRfdGxzX3ZhbGlkYXRpb25fZmxhZ3MgKGluZm8tPmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgICAgc3JjLT50bHNfdmFsaWRhdGlvbl9mbGFncykpCi0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJVbmFibGUgdG8gc2V0IFRMUyB2YWxpZGF0aW9uIGZsYWdzIik7Ci0KLSAgICAgICAgaWYgKHNyYy0+dGxzX2RhdGFiYXNlKQotICAgICAgICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fc2V0X3Rsc19kYXRhYmFzZSAoaW5mby0+Y29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgc3JjLT50bHNfZGF0YWJhc2UpOwotCi0gICAgICAgIGlmIChzcmMtPnRsc19pbnRlcmFjdGlvbikKLSAgICAgICAgICBnc3RfcnRzcF9jb25uZWN0aW9uX3NldF90bHNfaW50ZXJhY3Rpb24gKGluZm8tPmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAgIHNyYy0+dGxzX2ludGVyYWN0aW9uKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGluZm8tPnVybC0+dHJhbnNwb3J0cyAmIEdTVF9SVFNQX0xPV0VSX1RSQU5TX0hUVFApCi0gICAgICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fc2V0X3R1bm5lbGVkIChpbmZvLT5jb25uZWN0aW9uLCBUUlVFKTsKLQotICAgICAgaWYgKHNyYy0+cHJveHlfaG9zdCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZXR0aW5nIHByb3h5ICVzOiVkIiwgc3JjLT5wcm94eV9ob3N0LAotICAgICAgICAgICAgc3JjLT5wcm94eV9wb3J0KTsKLSAgICAgICAgZ3N0X3J0c3BfY29ubmVjdGlvbl9zZXRfcHJveHkgKGluZm8tPmNvbm5lY3Rpb24sIHNyYy0+cHJveHlfaG9zdCwKLSAgICAgICAgICAgIHNyYy0+cHJveHlfcG9ydCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpbmZvLT5jb25uZWN0ZWQpIHsKLSAgICAgIC8qIGNvbm5lY3QgKi8KLSAgICAgIGlmIChhc3luYykKLSAgICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ09OVElOVUUsICJjb25uZWN0IiwKLSAgICAgICAgICAgICgiQ29ubmVjdGluZyB0byAlcyIsIGluZm8tPmxvY2F0aW9uKSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjb25uZWN0aW5nICglcykuLi4iLCBpbmZvLT5sb2NhdGlvbik7Ci0gICAgICByZXMgPSBnc3RfcnRzcF9jb25uZWN0aW9uX2Nvbm5lY3Rfd2l0aF9yZXNwb25zZSAoaW5mby0+Y29ubmVjdGlvbiwKLSAgICAgICAgICBzcmMtPnB0Y3BfdGltZW91dCwgJnJlc3BvbnNlKTsKLQotICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT0gR1NUX1JUU1BfTUVTU0FHRV9IVFRQX1JFU1BPTlNFICYmCi0gICAgICAgICAgcmVzcG9uc2UudHlwZV9kYXRhLnJlc3BvbnNlLmNvZGUgPT0gR1NUX1JUU1BfU1RTX1VOQVVUSE9SSVpFRCkgewotICAgICAgICBnc3RfcnRzcF9jb25uaW5mb19jbG9zZSAoc3JjLCBpbmZvLCBUUlVFKTsKLSAgICAgICAgaWYgKCFyZXRyeSkKLSAgICAgICAgICByZXRyeSA9IFRSVUU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICByZXRyeSA9IEZBTFNFOyAgICAgICAgLy8gd2Ugc2hvdWxkIG5vdCByZXRyeSBtb3JlIHRoYW4gb25jZQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0cnkgPSBGQUxTRTsKLSAgICAgIH0KLQotICAgICAgaWYgKHJlcyA9PSBHU1RfUlRTUF9PSykKLSAgICAgICAgaW5mby0+Y29ubmVjdGVkID0gVFJVRTsKLSAgICAgIGVsc2UgaWYgKCFyZXRyeSkKLSAgICAgICAgZ290byBjb3VsZF9ub3RfY29ubmVjdDsKLSAgICB9Ci0gIH0gd2hpbGUgKCFpbmZvLT5jb25uZWN0ZWQgJiYgcmV0cnkpOwotICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVzcG9uc2UpOwotICByZXR1cm4gR1NUX1JUU1BfT0s7Ci0KLSAgLyogRVJST1JTICovCi1wYXJzZV9lcnJvcjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgIk5vIHZhbGlkIFJUU1AgVVJMIHdhcyBwcm92aWRlZCIpOwotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXNwb25zZSk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotY291bGRfbm90X2NyZWF0ZToKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc3JjLCAiQ291bGQgbm90IGNyZWF0ZSBjb25uZWN0aW9uLiAoJXMpIiwgc3RyKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci1jb3VsZF9ub3RfY29ubmVjdDoKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc3JjLCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyLiAoJXMpIiwgc3RyKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcF9jb25uaW5mb19jbG9zZSAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUENvbm5JbmZvICogaW5mbywKLSAgICBnYm9vbGVhbiBmcmVlKQotewotICBHU1RfUlRTUF9TVEFURV9MT0NLIChzcmMpOwotICBpZiAoaW5mby0+Y29ubmVjdGVkKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY2xvc2luZyBjb25uZWN0aW9uLi4uIik7Ci0gICAgZ3N0X3J0c3BfY29ubmVjdGlvbl9jbG9zZSAoaW5mby0+Y29ubmVjdGlvbik7Ci0gICAgaW5mby0+Y29ubmVjdGVkID0gRkFMU0U7Ci0gIH0KLSAgaWYgKGZyZWUgJiYgaW5mby0+Y29ubmVjdGlvbikgewotICAgIC8qIGZyZWUgY29ubmVjdGlvbiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZyZWVpbmcgY29ubmVjdGlvbi4uLiIpOwotICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fZnJlZSAoaW5mby0+Y29ubmVjdGlvbik7Ci0gICAgaW5mby0+Y29ubmVjdGlvbiA9IE5VTEw7Ci0gICAgaW5mby0+Zmx1c2hpbmcgPSBGQUxTRTsKLSAgfQotICBHU1RfUlRTUF9TVEFURV9VTkxPQ0sgKHNyYyk7Ci0gIHJldHVybiBHU1RfUlRTUF9PSzsKLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwX2Nvbm5pbmZvX3JlY29ubmVjdCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUENvbm5JbmZvICogaW5mbywKLSAgICBnYm9vbGVhbiBhc3luYykKLXsKLSAgR3N0UlRTUFJlc3VsdCByZXM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmVjb25uZWN0aW5nIGNvbm5lY3Rpb24uLi4iKTsKLSAgZ3N0X3J0c3BfY29ubmluZm9fY2xvc2UgKHNyYywgaW5mbywgRkFMU0UpOwotICByZXMgPSBnc3RfcnRzcF9jb25uaW5mb19jb25uZWN0IChzcmMsIGluZm8sIGFzeW5jKTsKLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfY29ubmVjdGlvbl9mbHVzaCAoR3N0UlRTUFNyYyAqIHNyYywgZ2Jvb2xlYW4gZmx1c2gpCi17Ci0gIEdMaXN0ICp3YWxrOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNldCBmbHVzaGluZyAlZCIsIGZsdXNoKTsKLSAgR1NUX1JUU1BfU1RBVEVfTE9DSyAoc3JjKTsKLSAgaWYgKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbiAmJiBzcmMtPmNvbm5pbmZvLmZsdXNoaW5nICE9IGZsdXNoKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY29ubmVjdGlvbiBmbHVzaCIpOwotICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fZmx1c2ggKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbiwgZmx1c2gpOwotICAgIHNyYy0+Y29ubmluZm8uZmx1c2hpbmcgPSBmbHVzaDsKLSAgfQotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSB3YWxrLT5kYXRhOwotICAgIGlmIChzdHJlYW0tPmNvbm5pbmZvLmNvbm5lY3Rpb24gJiYgc3RyZWFtLT5jb25uaW5mby5mbHVzaGluZyAhPSBmbHVzaCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RyZWFtICVwIGZsdXNoIiwgc3RyZWFtKTsKLSAgICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fZmx1c2ggKHN0cmVhbS0+Y29ubmluZm8uY29ubmVjdGlvbiwgZmx1c2gpOwotICAgICAgc3RyZWFtLT5jb25uaW5mby5mbHVzaGluZyA9IGZsdXNoOwotICAgIH0KLSAgfQotICBHU1RfUlRTUF9TVEFURV9VTkxPQ0sgKHNyYyk7Ci19Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY19pbml0X3JlcXVlc3QgKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFJUU1BNZXNzYWdlICogbXNnLAotICAgIEdzdFJUU1BNZXRob2QgbWV0aG9kLCBjb25zdCBnY2hhciAqIHVyaSkKLXsKLSAgR3N0UlRTUFJlc3VsdCByZXM7Ci0KLSAgcmVzID0gZ3N0X3J0c3BfbWVzc2FnZV9pbml0X3JlcXVlc3QgKG1zZywgbWV0aG9kLCB1cmkpOwotICBpZiAocmVzIDwgMCkKLSAgICByZXR1cm4gcmVzOwotCi0gIC8qIHNldCB1c2VyLWFnZW50ICovCi0gIGlmIChzcmMtPnVzZXJfYWdlbnQpCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV9hZGRfaGVhZGVyIChtc2csIEdTVF9SVFNQX0hEUl9VU0VSX0FHRU5ULCBzcmMtPnVzZXJfYWdlbnQpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qIEZJWE1FLCBoYW5kbGUgc2VydmVyIHJlcXVlc3QsIHJlcGx5IHdpdGggT0ssIGZvciBub3cgKi8KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY19oYW5kbGVfcmVxdWVzdCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUENvbm5lY3Rpb24gKiBjb25uLAotICAgIEdzdFJUU1BNZXNzYWdlICogcmVxdWVzdCkKLXsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVzcG9uc2UgPSB7IDAgfTsKLSAgR3N0UlRTUFJlc3VsdCByZXM7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IHNlcnZlciByZXF1ZXN0IG1lc3NhZ2UiKTsKLQotICBpZiAoc3JjLT5kZWJ1ZykKLSAgICBnc3RfcnRzcF9tZXNzYWdlX2R1bXAgKHJlcXVlc3QpOwotCi0gIHJlcyA9IGdzdF9ydHNwX2V4dF9saXN0X3JlY2VpdmVfcmVxdWVzdCAoc3JjLT5leHRlbnNpb25zLCByZXF1ZXN0KTsKLQotICBpZiAocmVzID09IEdTVF9SVFNQX0VOT1RJTVBMKSB7Ci0gICAgLyogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgc2VuZCBPSyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInByZXBhcmUgT0sgcmVwbHkiKTsKLSAgICByZXMgPQotICAgICAgICBnc3RfcnRzcF9tZXNzYWdlX2luaXRfcmVzcG9uc2UgKCZyZXNwb25zZSwgR1NUX1JUU1BfU1RTX09LLCAiT0siLAotICAgICAgICByZXF1ZXN0KTsKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICAgIC8qIGxldCBhcHAgcGFyc2UgYW5kIHJlcGx5ICovCi0gICAgZ19zaWduYWxfZW1pdCAoc3JjLCBnc3RfcnRzcHNyY19zaWduYWxzW1NJR05BTF9IQU5ETEVfUkVRVUVTVF0sCi0gICAgICAgIDAsIHJlcXVlc3QsICZyZXNwb25zZSk7Ci0KLSAgICBpZiAoc3JjLT5kZWJ1ZykKLSAgICAgIGdzdF9ydHNwX21lc3NhZ2VfZHVtcCAoJnJlc3BvbnNlKTsKLQotICAgIHJlcyA9IGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fc2VuZCAoc3JjLCBjb25uLCAmcmVzcG9uc2UsIE5VTEwpOwotICAgIGlmIChyZXMgPCAwKQotICAgICAgZ290byBzZW5kX2Vycm9yOwotCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLSAgfSBlbHNlIGlmIChyZXMgPT0gR1NUX1JUU1BfRUVPRikKLSAgICByZXR1cm4gcmVzOwotCi0gIHJldHVybiBHU1RfUlRTUF9PSzsKLQotICAvKiBFUlJPUlMgKi8KLXNlbmRfZXJyb3I6Ci0gIHsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVzcG9uc2UpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLX0KLQotLyogc2VuZCBzZXJ2ZXIga2VlcC1hbGl2ZSAqLwotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX3NlbmRfa2VlcF9hbGl2ZSAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVxdWVzdCA9IHsgMCB9OwotICBHc3RSVFNQUmVzdWx0IHJlczsKLSAgR3N0UlRTUE1ldGhvZCBtZXRob2Q7Ci0gIGNvbnN0IGdjaGFyICpjb250cm9sOwotCi0gIGlmIChzcmMtPmRvX3J0c3Bfa2VlcF9hbGl2ZSA9PSBGQUxTRSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImRvLXJ0c3Ata2VlcC1hbGl2ZSBpcyBGQUxTRSwgbm90IHNlbmRpbmcuIik7Ci0gICAgZ3N0X3J0c3BfY29ubmVjdGlvbl9yZXNldF90aW1lb3V0IChzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24pOwotICAgIHJldHVybiBHU1RfUlRTUF9PSzsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNyZWF0aW5nIHNlcnZlciBrZWVwLWFsaXZlIik7Ci0KLSAgLyogZmluZCBhIG1ldGhvZCB0byB1c2UgZm9yIGtlZXAtYWxpdmUgKi8KLSAgaWYgKHNyYy0+bWV0aG9kcyAmIEdTVF9SVFNQX0dFVF9QQVJBTUVURVIpCi0gICAgbWV0aG9kID0gR1NUX1JUU1BfR0VUX1BBUkFNRVRFUjsKLSAgZWxzZQotICAgIG1ldGhvZCA9IEdTVF9SVFNQX09QVElPTlM7Ci0KLSAgY29udHJvbCA9IGdldF9hZ2dyZWdhdGVfY29udHJvbCAoc3JjKTsKLSAgaWYgKGNvbnRyb2wgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2NvbnRyb2w7Ci0KLSAgcmVzID0gZ3N0X3J0c3BzcmNfaW5pdF9yZXF1ZXN0IChzcmMsICZyZXF1ZXN0LCBtZXRob2QsIGNvbnRyb2wpOwotICBpZiAocmVzIDwgMCkKLSAgICBnb3RvIHNlbmRfZXJyb3I7Ci0KLSAgaWYgKHNyYy0+ZGVidWcpCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV9kdW1wICgmcmVxdWVzdCk7Ci0KLSAgcmVzID0KLSAgICAgIGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fc2VuZCAoc3JjLCBzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24sICZyZXF1ZXN0LAotICAgICAgTlVMTCk7Ci0gIGlmIChyZXMgPCAwKQotICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICBnc3RfcnRzcF9jb25uZWN0aW9uX3Jlc2V0X3RpbWVvdXQgKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbik7Ci0gIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXF1ZXN0KTsKLQotICByZXR1cm4gR1NUX1JUU1BfT0s7Ci0KLSAgLyogRVJST1JTICovCi1ub19jb250cm9sOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJubyBjb250cm9sIHVybCB0byBzZW5kIGtlZXBhbGl2ZSIpOwotICAgIHJldHVybiBHU1RfUlRTUF9PSzsKLSAgfQotc2VuZF9lcnJvcjoKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0KLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVxdWVzdCk7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoc3JjLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3Qgc2VuZCBrZWVwLWFsaXZlLiAoJXMpIiwgc3RyKSk7Ci0gICAgZ19mcmVlIChzdHIpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHNwc3JjX2hhbmRsZV9kYXRhIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIGdpbnQgY2hhbm5lbDsKLSAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtOwotICBHc3RQYWQgKm91dHBhZCA9IE5VTEw7Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGdib29sZWFuIGlzX3J0Y3A7Ci0KLSAgY2hhbm5lbCA9IG1lc3NhZ2UtPnR5cGVfZGF0YS5kYXRhLmNoYW5uZWw7Ci0KLSAgc3RyZWFtID0gZmluZF9zdHJlYW0gKHNyYywgJmNoYW5uZWwsIChncG9pbnRlcikgZmluZF9zdHJlYW1fYnlfY2hhbm5lbCk7Ci0gIGlmICghc3RyZWFtKQotICAgIGdvdG8gdW5rbm93bl9zdHJlYW07Ci0KLSAgaWYgKGNoYW5uZWwgPT0gc3RyZWFtLT5jaGFubmVsWzBdKSB7Ci0gICAgb3V0cGFkID0gc3RyZWFtLT5jaGFubmVscGFkWzBdOwotICAgIGlzX3J0Y3AgPSBGQUxTRTsKLSAgfSBlbHNlIGlmIChjaGFubmVsID09IHN0cmVhbS0+Y2hhbm5lbFsxXSkgewotICAgIG91dHBhZCA9IHN0cmVhbS0+Y2hhbm5lbHBhZFsxXTsKLSAgICBpc19ydGNwID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBpc19ydGNwID0gRkFMU0U7Ci0gIH0KLQotICAvKiB0YWtlIGEgbG9vayBhdCB0aGUgYm9keSB0byBmaWd1cmUgb3V0IHdoYXQgd2UgaGF2ZSAqLwotICBnc3RfcnRzcF9tZXNzYWdlX2dldF9ib2R5IChtZXNzYWdlLCAmZGF0YSwgJnNpemUpOwotICBpZiAoc2l6ZSA8IDIpCi0gICAgZ290byBpbnZhbGlkX2xlbmd0aDsKLQotICAvKiBjaGFubmVscyBhcmUgbm90IGNvcnJlY3Qgb24gc29tZSBzZXJ2ZXJzLCBkbyBleHRyYSBjaGVjayAqLwotICBpZiAoZGF0YVsxXSA+PSAyMDAgJiYgZGF0YVsxXSA8PSAyMDQpIHsKLSAgICAvKiBobW0gUlRDUCBtZXNzYWdlIHN3aXRjaCB0byB0aGUgUlRDUCBwYWQgb2YgdGhlIHNhbWUgc3RyZWFtLiAqLwotICAgIG91dHBhZCA9IHN0cmVhbS0+Y2hhbm5lbHBhZFsxXTsKLSAgICBpc19ydGNwID0gVFJVRTsKLSAgfQotCi0gIC8qIHdlIGhhdmUgbm8gY2x1ZSB3aGF0IHRoaXMgaXMsIGp1c3QgaWdub3JlIHRoZW4uICovCi0gIGlmIChvdXRwYWQgPT0gTlVMTCkKLSAgICBnb3RvIHVua25vd25fc3RyZWFtOwotCi0gIC8qIHRha2UgdGhlIG1lc3NhZ2UgYm9keSBmb3IgZnVydGhlciBwcm9jZXNzaW5nICovCi0gIGdzdF9ydHNwX21lc3NhZ2Vfc3RlYWxfYm9keSAobWVzc2FnZSwgJmRhdGEsICZzaXplKTsKLQotICAvKiBzdHJpcCB0aGUgdHJhaWxpbmcgXDAgKi8KLSAgc2l6ZSAtPSAxOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZiwKLSAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIHNpemUsIDAsIHNpemUsIGRhdGEsIGdfZnJlZSkpOwotCi0gIC8qIGRvbid0IG5lZWQgbWVzc2FnZSBhbnltb3JlICovCi0gIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKG1lc3NhZ2UpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInB1c2hpbmcgZGF0YSBvZiBzaXplICVkIG9uIGNoYW5uZWwgJWQiLCBzaXplLAotICAgICAgY2hhbm5lbCk7Ci0KLSAgaWYgKHNyYy0+bmVlZF9hY3RpdmF0ZSkgewotICAgIGdjaGFyICpzdHJlYW1faWQ7Ci0gICAgR3N0RXZlbnQgKmV2ZW50OwotICAgIEdDaGVja3N1bSAqY3M7Ci0gICAgZ2NoYXIgKnVyaTsKLSAgICBHTGlzdCAqc3RyZWFtczsKLSAgICBndWludCBncm91cF9pZCA9IGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCk7Ci0KLSAgICAvKiBnZW5lcmF0ZSBhbiBTSEEyNTYgc3VtIG9mIHRoZSBVUkkgKi8KLSAgICBjcyA9IGdfY2hlY2tzdW1fbmV3IChHX0NIRUNLU1VNX1NIQTI1Nik7Ci0gICAgdXJpID0gc3JjLT5jb25uaW5mby5sb2NhdGlvbjsKLSAgICBnX2NoZWNrc3VtX3VwZGF0ZSAoY3MsIChjb25zdCBndWNoYXIgKikgdXJpLCBzdHJsZW4gKHVyaSkpOwotCi0gICAgZm9yIChzdHJlYW1zID0gc3JjLT5zdHJlYW1zOyBzdHJlYW1zOyBzdHJlYW1zID0gZ19saXN0X25leHQgKHN0cmVhbXMpKSB7Ci0gICAgICBHc3RSVFNQU3RyZWFtICpvc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgc3RyZWFtcy0+ZGF0YTsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIHN0cmVhbV9pZCA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgiJXMvJWQiLCBnX2NoZWNrc3VtX2dldF9zdHJpbmcgKGNzKSwgb3N0cmVhbS0+aWQpOwotICAgICAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKTsKLSAgICAgIGdzdF9ldmVudF9zZXRfZ3JvdXBfaWQgKGV2ZW50LCBncm91cF9pZCk7Ci0KLSAgICAgIGdfZnJlZSAoc3RyZWFtX2lkKTsKLSAgICAgIGdzdF9ydHNwc3JjX3N0cmVhbV9wdXNoX2V2ZW50IChzcmMsIG9zdHJlYW0sIGV2ZW50KTsKLQotICAgICAgaWYgKChjYXBzID0gc3RyZWFtX2dldF9jYXBzX2Zvcl9wdCAob3N0cmVhbSwgb3N0cmVhbS0+ZGVmYXVsdF9wdCkpKSB7Ci0gICAgICAgIC8qIG9ubHkgc3RyZWFtcyB0aGF0IGhhdmUgYSBjb25uZWN0aW9uIHRvIHRoZSBvdXRzaWRlIHdvcmxkICovCi0gICAgICAgIGlmIChvc3RyZWFtLT5zZXR1cCkgewotICAgICAgICAgIGlmIChvc3RyZWFtLT51ZHBzcmNbMF0pIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKG9zdHJlYW0tPnVkcHNyY1swXSwKLSAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG9zdHJlYW0tPmNoYW5uZWxwYWRbMF0pIHsKLSAgICAgICAgICAgIGlmIChHU1RfUEFEX0lTX1NSQyAob3N0cmVhbS0+Y2hhbm5lbHBhZFswXSkpCi0gICAgICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAob3N0cmVhbS0+Y2hhbm5lbHBhZFswXSwKLSAgICAgICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBnc3RfcGFkX3NlbmRfZXZlbnQgKG9zdHJlYW0tPmNoYW5uZWxwYWRbMF0sCi0gICAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgb3N0cmVhbS0+bmVlZF9jYXBzID0gRkFMU0U7Ci0KLSAgICAgICAgICBpZiAob3N0cmVhbS0+cHJvZmlsZSA9PSBHU1RfUlRTUF9QUk9GSUxFX1NBVlAgfHwKLSAgICAgICAgICAgICAgb3N0cmVhbS0+cHJvZmlsZSA9PSBHU1RfUlRTUF9QUk9GSUxFX1NBVlBGKQotICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXNydGNwIik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0Y3AiKTsKLQotICAgICAgICAgIGlmIChvc3RyZWFtLT51ZHBzcmNbMV0pIHsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKG9zdHJlYW0tPnVkcHNyY1sxXSwKLSAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG9zdHJlYW0tPmNoYW5uZWxwYWRbMV0pIHsKLSAgICAgICAgICAgIGlmIChHU1RfUEFEX0lTX1NSQyAob3N0cmVhbS0+Y2hhbm5lbHBhZFsxXSkpCi0gICAgICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAob3N0cmVhbS0+Y2hhbm5lbHBhZFsxXSwKLSAgICAgICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBnc3RfcGFkX3NlbmRfZXZlbnQgKG9zdHJlYW0tPmNoYW5uZWxwYWRbMV0sCi0gICAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZ19jaGVja3N1bV9mcmVlIChjcyk7Ci0KLSAgICBnc3RfcnRzcHNyY19hY3RpdmF0ZV9zdHJlYW1zIChzcmMpOwotICAgIHNyYy0+bmVlZF9hY3RpdmF0ZSA9IEZBTFNFOwotICAgIHNyYy0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgfQotCi0gIGlmIChzcmMtPmJhc2VfdGltZSA9PSAtMSkgewotICAgIC8qIFRha2UgY3VycmVudCBydW5uaW5nX3RpbWUuIFRoaXMgdGltZXN0YW1wIHdpbGwgYmUgcHV0IG9uCi0gICAgICogdGhlIGZpcnN0IGJ1ZmZlciBvZiBlYWNoIHN0cmVhbSBiZWNhdXNlIHdlIGFyZSBhIGxpdmUgc291cmNlIGFuZCBzbyB3ZQotICAgICAqIHRpbWVzdGFtcCB3aXRoIHRoZSBydW5uaW5nX3RpbWUuIFdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aCBUQ1AsIHdlIGFsc28KLSAgICAgKiBvbmx5IHRpbWVzdGFtcCB0aGUgZmlyc3QgYnVmZmVyICh1c2luZyB0aGUgRElTQ09OVCBmbGFnKSBiZWNhdXNlIGEgc2VydmVyCi0gICAgICogdHlwaWNhbGx5IGJ1cnN0cyBkYXRhLCBmb3Igd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBjb21wZW5zYXRlIGJ5IHNwZWVkaW5nCi0gICAgICogdXAgdGhlIG1lZGlhLiBUaGUgb3RoZXIgdGltZXN0YW1wcyB3aWxsIGJlIGludGVycG9sbGF0ZWQgZnJvbSB0aGlzIG9uZQotICAgICAqIHVzaW5nIHRoZSBSVFAgdGltZXN0YW1wcy4gKi8KLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHNyYyk7Ci0gICAgaWYgKEdTVF9FTEVNRU5UX0NMT0NLIChzcmMpKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgbm93OwotICAgICAgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZTsKLQotICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChHU1RfRUxFTUVOVF9DTE9DSyAoc3JjKSk7Ci0gICAgICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChzcmMpLT5iYXNlX3RpbWU7Ci0KLSAgICAgIHNyYy0+YmFzZV90aW1lID0gbm93IC0gYmFzZV90aW1lOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmaXJzdCBidWZmZXIgYXQgdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgYmFzZSAlIgotICAgICAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAobm93KSwgR1NUX1RJTUVfQVJHUyAoYmFzZV90aW1lKSk7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotICB9Ci0KLSAgLyogSWYgbmVlZGVkIHNlbmQgYSBuZXcgc2VnbWVudCwgZG9uJ3QgZm9yZ2V0IHdlIGFyZSBsaXZlIGFuZCBidWZmZXIgYXJlCi0gICAqIHRpbWVzdGFtcGVkIHdpdGggcnVubmluZyB0aW1lICovCi0gIGlmIChzcmMtPm5lZWRfc2VnbWVudCkgewotICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICBzcmMtPm5lZWRfc2VnbWVudCA9IEZBTFNFOwotICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIGdzdF9ydHNwc3JjX3B1c2hfZXZlbnQgKHNyYywgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICB9Ci0KLSAgaWYgKHN0cmVhbS0+bmVlZF9jYXBzKSB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIGlmICgoY2FwcyA9IHN0cmVhbV9nZXRfY2Fwc19mb3JfcHQgKHN0cmVhbSwgc3RyZWFtLT5kZWZhdWx0X3B0KSkpIHsKLSAgICAgIC8qIG9ubHkgc3RyZWFtcyB0aGF0IGhhdmUgYSBjb25uZWN0aW9uIHRvIHRoZSBvdXRzaWRlIHdvcmxkICovCi0gICAgICBpZiAoc3RyZWFtLT5zZXR1cCkgewotICAgICAgICAvKiBPbmx5IG5lZWQgdG8gdXBkYXRlIHRoZSBUQ1AgY2FwcyBoZXJlLCBVRFAgaXMgYWxyZWFkeSBoYW5kbGVkICovCi0gICAgICAgIGlmIChzdHJlYW0tPmNoYW5uZWxwYWRbMF0pIHsKLSAgICAgICAgICBpZiAoR1NUX1BBRF9JU19TUkMgKHN0cmVhbS0+Y2hhbm5lbHBhZFswXSkpCi0gICAgICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHN0cmVhbS0+Y2hhbm5lbHBhZFswXSwKLSAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBnc3RfcGFkX3NlbmRfZXZlbnQgKHN0cmVhbS0+Y2hhbm5lbHBhZFswXSwKLSAgICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgICAgICAgfQotICAgICAgICBzdHJlYW0tPm5lZWRfY2FwcyA9IEZBTFNFOwotICAgICAgfQotICAgIH0KLQotICAgIHN0cmVhbS0+bmVlZF9jYXBzID0gRkFMU0U7Ci0gIH0KLQotICBpZiAoc3RyZWFtLT5kaXNjb250ICYmICFpc19ydGNwKSB7Ci0gICAgLyogbWFyayBmaXJzdCBSVFAgYnVmZmVyIGFzIGRpc2NvbnQgKi8KLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgICBzdHJlYW0tPmRpc2NvbnQgPSBGQUxTRTsKLSAgICAvKiBmaXJzdCBidWZmZXIgZ2V0cyB0aGUgdGltZXN0YW1wLCBvdGhlciBidWZmZXJzIGFyZSBub3QgdGltZXN0YW1wZWQgYW5kCi0gICAgICogdGhlaXIgcHJlc2VudGF0aW9uIHRpbWUgd2lsbCBiZSBpbnRlcnBvbGxhdGVkIGZyb20gdGhlIHJ0cCB0aW1lc3RhbXBzLiAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNldHRpbmcgdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3JjLT5iYXNlX3RpbWUpKTsKLQotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gc3JjLT5iYXNlX3RpbWU7Ci0gIH0KLQotICAvKiBjaGFpbiB0byB0aGUgcGVlciBwYWQgKi8KLSAgaWYgKEdTVF9QQURfSVNfU0lOSyAob3V0cGFkKSkKLSAgICByZXQgPSBnc3RfcGFkX2NoYWluIChvdXRwYWQsIGJ1Zik7Ci0gIGVsc2UKLSAgICByZXQgPSBnc3RfcGFkX3B1c2ggKG91dHBhZCwgYnVmKTsKLQotICBpZiAoIWlzX3J0Y3ApIHsKLSAgICAvKiBjb21iaW5lIGFsbCBzdHJlYW0gZmxvd3MgZm9yIHRoZSBkYXRhIHRyYW5zcG9ydCAqLwotICAgIHJldCA9IGdzdF9ydHNwc3JjX2NvbWJpbmVfZmxvd3MgKHNyYywgc3RyZWFtLCByZXQpOwotICB9Ci0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi11bmtub3duX3N0cmVhbToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVua25vd24gc3RyZWFtIG9uIGNoYW5uZWwgJWQsIGlnbm9yZWQiLCBjaGFubmVsKTsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0IChtZXNzYWdlKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLWludmFsaWRfbGVuZ3RoOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoIlNob3J0IG1lc3NhZ2UgcmVjZWl2ZWQsIGlnbm9yaW5nLiIpKTsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0IChtZXNzYWdlKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9ydHNwc3JjX2xvb3BfaW50ZXJsZWF2ZWQgKEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIEdzdFJUU1BNZXNzYWdlIG1lc3NhZ2UgPSB7IDAgfTsKLSAgR3N0UlRTUFJlc3VsdCByZXM7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdUaW1lVmFsIHR2X3RpbWVvdXQ7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICAvKiBnZXQgdGhlIG5leHQgdGltZW91dCBpbnRlcnZhbCAqLwotICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fbmV4dF90aW1lb3V0IChzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24sICZ0dl90aW1lb3V0KTsKLQotICAgIC8qIHNlZSBpZiB0aGUgdGltZW91dCBwZXJpb2QgZXhwaXJlZCAqLwotICAgIGlmICgodHZfdGltZW91dC50dl9zZWMgfCB0dl90aW1lb3V0LnR2X3VzZWMpID09IDApIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInRpbW91dCwgc2VuZGluZyBrZWVwLWFsaXZlIik7Ci0gICAgICAvKiBzZW5kIGtlZXAtYWxpdmUsIG9ubHkgYWN0IG9uIGludGVycnVwdCwgYSB3YXJuaW5nIHdpbGwgYmUgcG9zdGVkIGZvcgotICAgICAgICogb3RoZXIgZXJyb3JzLiAqLwotICAgICAgaWYgKChyZXMgPSBnc3RfcnRzcHNyY19zZW5kX2tlZXBfYWxpdmUgKHNyYykpID09IEdTVF9SVFNQX0VJTlRSKQotICAgICAgICBnb3RvIGludGVycnVwdDsKLSAgICAgIC8qIGdldCBuZXcgdGltZW91dCAqLwotICAgICAgZ3N0X3J0c3BfY29ubmVjdGlvbl9uZXh0X3RpbWVvdXQgKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbiwgJnR2X3RpbWVvdXQpOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImRvaW5nIHJlY2VpdmUgd2l0aCB0aW1lb3V0ICVsZCBzZWNvbmRzLCAlbGQgdXNlYyIsCi0gICAgICAgIHR2X3RpbWVvdXQudHZfc2VjLCB0dl90aW1lb3V0LnR2X3VzZWMpOwotCi0gICAgLyogcHJvdGVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBjb25uZWN0aW9uIGxvY2sgc28gdGhhdCB3ZSBjYW4gc2VlIHdoZW4KLSAgICAgKiB3ZSBhcmUgZmluaXNoZWQgZG9pbmcgc2VydmVyIGNvbW11bmljYXRpb24gKi8KLSAgICByZXMgPQotICAgICAgICBnc3RfcnRzcHNyY19jb25uZWN0aW9uX3JlY2VpdmUgKHNyYywgc3JjLT5jb25uaW5mby5jb25uZWN0aW9uLAotICAgICAgICAmbWVzc2FnZSwgc3JjLT5wdGNwX3RpbWVvdXQpOwotCi0gICAgc3dpdGNoIChyZXMpIHsKLSAgICAgIGNhc2UgR1NUX1JUU1BfT0s6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIndlIHJlY2VpdmVkIGEgc2VydmVyIG1lc3NhZ2UiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9SVFNQX0VJTlRSOgotICAgICAgICAvKiB3ZSBnb3QgaW50ZXJydXB0ZWQgdGhpcyBtZWFucyB3ZSBuZWVkIHRvIHN0b3AgKi8KLSAgICAgICAgZ290byBpbnRlcnJ1cHQ7Ci0gICAgICBjYXNlIEdTVF9SVFNQX0VUSU1FT1VUOgotICAgICAgICAvKiBubyByZXBseSwgc2VuZCBrZWVwIGFsaXZlICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInRpbWVvdXQsIHNlbmRpbmcga2VlcC1hbGl2ZSIpOwotICAgICAgICBpZiAoKHJlcyA9IGdzdF9ydHNwc3JjX3NlbmRfa2VlcF9hbGl2ZSAoc3JjKSkgPT0gR1NUX1JUU1BfRUlOVFIpCi0gICAgICAgICAgZ290byBpbnRlcnJ1cHQ7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgY2FzZSBHU1RfUlRTUF9FRU9GOgotICAgICAgICAvKiBnbyBFT1Mgd2hlbiB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiAqLwotICAgICAgICBnb3RvIHNlcnZlcl9lb2Y7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnb3RvIHJlY2VpdmVfZXJyb3I7Ci0gICAgfQotCi0gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHsKLSAgICAgIGNhc2UgR1NUX1JUU1BfTUVTU0FHRV9SRVFVRVNUOgotICAgICAgICAvKiBzZXJ2ZXIgc2VuZHMgdXMgYSByZXF1ZXN0IG1lc3NhZ2UsIGhhbmRsZSBpdCAqLwotICAgICAgICByZXMgPQotICAgICAgICAgICAgZ3N0X3J0c3BzcmNfaGFuZGxlX3JlcXVlc3QgKHNyYywgc3JjLT5jb25uaW5mby5jb25uZWN0aW9uLAotICAgICAgICAgICAgJm1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzID09IEdTVF9SVFNQX0VFT0YpCi0gICAgICAgICAgZ290byBzZXJ2ZXJfZW9mOwotICAgICAgICBlbHNlIGlmIChyZXMgPCAwKQotICAgICAgICAgIGdvdG8gaGFuZGxlX3JlcXVlc3RfZmFpbGVkOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUU1BfTUVTU0FHRV9SRVNQT05TRToKLSAgICAgICAgLyogd2UgaWdub3JlIHJlc3BvbnNlIG1lc3NhZ2VzICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImlnbm9yaW5nIHJlc3BvbnNlIG1lc3NhZ2UiKTsKLSAgICAgICAgaWYgKHNyYy0+ZGVidWcpCi0gICAgICAgICAgZ3N0X3J0c3BfbWVzc2FnZV9kdW1wICgmbWVzc2FnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUlRTUF9NRVNTQUdFX0RBVEE6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImdvdCBkYXRhIG1lc3NhZ2UiKTsKLSAgICAgICAgcmV0ID0gZ3N0X3J0c3BzcmNfaGFuZGxlX2RhdGEgKHNyYywgJm1lc3NhZ2UpOwotICAgICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgIGdvdG8gaGFuZGxlX2RhdGFfZmFpbGVkOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiaWdub3JpbmcgdW5rbm93biBtZXNzYWdlIHR5cGUgJWQiLAotICAgICAgICAgICAgbWVzc2FnZS50eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotCi0gIC8qIEVSUk9SUyAqLwotc2VydmVyX2VvZjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIndlIGdvdCBhbiBlb2YgZnJvbSB0aGUgc2VydmVyIik7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoIlRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uLiIpKTsKLSAgICBzcmMtPmNvbm5pbmZvLmNvbm5lY3RlZCA9IEZBTFNFOwotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZtZXNzYWdlKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRU9TOwotICB9Ci1pbnRlcnJ1cHQ6Ci0gIHsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmbWVzc2FnZSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IGludGVycnVwdGVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1yZWNlaXZlX2Vycm9yOgotICB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0cnJlc3VsdCAocmVzKTsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICgiQ291bGQgbm90IHJlY2VpdmUgbWVzc2FnZS4gKCVzKSIsIHN0cikpOwotICAgIGdfZnJlZSAoc3RyKTsKLQotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZtZXNzYWdlKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWhhbmRsZV9yZXF1ZXN0X2ZhaWxlZDoKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgaGFuZGxlIHNlcnZlciBtZXNzYWdlLiAoJXMpIiwgc3RyKSk7Ci0gICAgZ19mcmVlIChzdHIpOwotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZtZXNzYWdlKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWhhbmRsZV9kYXRhX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvdWxkIG5vIGhhbmRsZSBkYXRhIG1lc3NhZ2UiKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfcnRzcHNyY19sb29wX3VkcCAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgR3N0UlRTUFJlc3VsdCByZXM7Ci0gIEdzdFJUU1BNZXNzYWdlIG1lc3NhZ2UgPSB7IDAgfTsKLSAgZ2ludCByZXRyeSA9IDA7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBHVGltZVZhbCB0dl90aW1lb3V0OwotCi0gICAgLyogZ2V0IHRoZSBuZXh0IHRpbWVvdXQgaW50ZXJ2YWwgKi8KLSAgICBnc3RfcnRzcF9jb25uZWN0aW9uX25leHRfdGltZW91dCAoc3JjLT5jb25uaW5mby5jb25uZWN0aW9uLCAmdHZfdGltZW91dCk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJkb2luZyByZWNlaXZlIHdpdGggdGltZW91dCAlZCBzZWNvbmRzIiwKLSAgICAgICAgKGdpbnQpIHR2X3RpbWVvdXQudHZfc2VjKTsKLQotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZtZXNzYWdlKTsKLQotICAgIC8qIHdlIHNob3VsZCBjb250aW51ZSByZWFkaW5nIHRoZSBUQ1Agc29ja2V0IGJlY2F1c2UgdGhlIHNlcnZlciBtaWdodAotICAgICAqIHNlbmQgdXMgcmVxdWVzdHMuIFdoZW4gdGhlIHNlc3Npb24gdGltZW91dCBleHBpcmVzLCB3ZSBuZWVkIHRvIHNlbmQgYQotICAgICAqIGtlZXAtYWxpdmUgcmVxdWVzdCB0byBrZWVwIHRoZSBzZXNzaW9uIG9wZW4uICovCi0gICAgcmVzID0gZ3N0X3J0c3BzcmNfY29ubmVjdGlvbl9yZWNlaXZlIChzcmMsIHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbiwKLSAgICAgICAgJm1lc3NhZ2UsICZ0dl90aW1lb3V0KTsKLQotICAgIHN3aXRjaCAocmVzKSB7Ci0gICAgICBjYXNlIEdTVF9SVFNQX09LOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSByZWNlaXZlZCBhIHNlcnZlciBtZXNzYWdlIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUlRTUF9FSU5UUjoKLSAgICAgICAgLyogd2UgZ290IGludGVycnVwdGVkLCBzZWUgd2hhdCB3ZSBoYXZlIHRvIGRvICovCi0gICAgICAgIGdvdG8gaW50ZXJydXB0OwotICAgICAgY2FzZSBHU1RfUlRTUF9FVElNRU9VVDoKLSAgICAgICAgLyogc2VuZCBrZWVwLWFsaXZlLCBpZ25vcmUgdGhlIHJlc3VsdCwgYSB3YXJuaW5nIHdpbGwgYmUgcG9zdGVkLiAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ0aW1lb3V0LCBzZW5kaW5nIGtlZXAtYWxpdmUiKTsKLSAgICAgICAgaWYgKChyZXMgPSBnc3RfcnRzcHNyY19zZW5kX2tlZXBfYWxpdmUgKHNyYykpID09IEdTVF9SVFNQX0VJTlRSKQotICAgICAgICAgIGdvdG8gaW50ZXJydXB0OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIGNhc2UgR1NUX1JUU1BfRUVPRjoKLSAgICAgICAgLyogc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbi4gbm90IHZlcnkgZmF0YWwgZm9yIFVEUCwgcmVjb25uZWN0IGFuZAotICAgICAgICAgKiBzZWUgd2hhdCBoYXBwZW5zLiAqLwotICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICAgICAoIlRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uLiIpKTsKLSAgICAgICAgaWYgKHNyYy0+dWRwX3JlY29ubmVjdCkgewotICAgICAgICAgIGlmICgocmVzID0KLSAgICAgICAgICAgICAgICAgIGdzdF9ydHNwX2Nvbm5pbmZvX3JlY29ubmVjdCAoc3JjLCAmc3JjLT5jb25uaW5mbywgRkFMU0UpKSA8IDApCi0gICAgICAgICAgICBnb3RvIGNvbm5lY3RfZXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ290byBzZXJ2ZXJfZW9mOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgY2FzZSBHU1RfUlRTUF9FTkVUOgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJBbiBldGhlcm5ldCBwcm9ibGVtIG9jY3VyZWQuIik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICAgICAoIlVuaGFuZGxlZCByZXR1cm4gdmFsdWUgJWQuIiwgcmVzKSk7Ci0gICAgICAgIGdvdG8gcmVjZWl2ZV9lcnJvcjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkgewotICAgICAgY2FzZSBHU1RfUlRTUF9NRVNTQUdFX1JFUVVFU1Q6Ci0gICAgICAgIC8qIHNlcnZlciBzZW5kcyB1cyBhIHJlcXVlc3QgbWVzc2FnZSwgaGFuZGxlIGl0ICovCi0gICAgICAgIHJlcyA9Ci0gICAgICAgICAgICBnc3RfcnRzcHNyY19oYW5kbGVfcmVxdWVzdCAoc3JjLCBzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24sCi0gICAgICAgICAgICAmbWVzc2FnZSk7Ci0gICAgICAgIGlmIChyZXMgPT0gR1NUX1JUU1BfRUVPRikKLSAgICAgICAgICBnb3RvIHNlcnZlcl9lb2Y7Ci0gICAgICAgIGVsc2UgaWYgKHJlcyA8IDApCi0gICAgICAgICAgZ290byBoYW5kbGVfcmVxdWVzdF9mYWlsZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUlRTUF9NRVNTQUdFX1JFU1BPTlNFOgotICAgICAgICAvKiB3ZSBpZ25vcmUgcmVzcG9uc2UgYW5kIGRhdGEgbWVzc2FnZXMgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaWdub3JpbmcgcmVzcG9uc2UgbWVzc2FnZSIpOwotICAgICAgICBpZiAoc3JjLT5kZWJ1ZykKLSAgICAgICAgICBnc3RfcnRzcF9tZXNzYWdlX2R1bXAgKCZtZXNzYWdlKTsKLSAgICAgICAgaWYgKG1lc3NhZ2UudHlwZV9kYXRhLnJlc3BvbnNlLmNvZGUgPT0gR1NUX1JUU1BfU1RTX1VOQVVUSE9SSVpFRCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImJ1dCBpcyBVbmF1dGhvcml6ZWQgcmVzcG9uc2UgLi4uIik7Ci0gICAgICAgICAgaWYgKGdzdF9ydHNwc3JjX3NldHVwX2F1dGggKHNyYywgJm1lc3NhZ2UpICYmICEocmV0cnkrKykpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNvIHJldHJ5aW5nIGtlZXAtYWxpdmUiKTsKLSAgICAgICAgICAgIGlmICgocmVzID0gZ3N0X3J0c3BzcmNfc2VuZF9rZWVwX2FsaXZlIChzcmMpKSA9PSBHU1RfUlRTUF9FSU5UUikKLSAgICAgICAgICAgICAgZ290byBpbnRlcnJ1cHQ7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJldHJ5ID0gMDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUU1BfTUVTU0FHRV9EQVRBOgotICAgICAgICAvKiB3ZSBpZ25vcmUgcmVzcG9uc2UgYW5kIGRhdGEgbWVzc2FnZXMgKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaWdub3JpbmcgZGF0YSBtZXNzYWdlIik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJpZ25vcmluZyB1bmtub3duIG1lc3NhZ2UgdHlwZSAlZCIsCi0gICAgICAgICAgICBtZXNzYWdlLnR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0KLSAgLyogd2UgZ2V0IGhlcmUgd2hlbiB0aGUgY29ubmVjdGlvbiBnb3QgaW50ZXJydXB0ZWQgKi8KLWludGVycnVwdDoKLSAgewotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZtZXNzYWdlKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3QgaW50ZXJydXB0ZWQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLWNvbm5lY3RfZXJyb3I6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gICAgc3JjLT5jb25uaW5mby5jb25uZWN0ZWQgPSBGQUxTRTsKLSAgICBpZiAocmVzICE9IEdTVF9SVFNQX0VJTlRSKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFEX1dSSVRFLCAoTlVMTCksCi0gICAgICAgICAgKCJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIuICglcykiLCBzdHIpKTsKLSAgICAgIGdfZnJlZSAoc3RyKTsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotcmVjZWl2ZV9lcnJvcjoKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCByZWNlaXZlIG1lc3NhZ2UuICglcykiLCBzdHIpKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1oYW5kbGVfcmVxdWVzdF9mYWlsZWQ6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotICAgIEdzdEZsb3dSZXR1cm4gcmV0OwotCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJm1lc3NhZ2UpOwotICAgIGlmIChyZXMgIT0gR1NUX1JUU1BfRUlOVFIpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAgICgiQ291bGQgbm90IGhhbmRsZSBzZXJ2ZXIgbWVzc2FnZS4gKCVzKSIsIHN0cikpOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldCA9IEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci1zZXJ2ZXJfZW9mOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAid2UgZ290IGFuIGVvZiBmcm9tIHRoZSBzZXJ2ZXIiKTsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICgiVGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24uIikpOwotICAgIHNyYy0+Y29ubmluZm8uY29ubmVjdGVkID0gRkFMU0U7Ci0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJm1lc3NhZ2UpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX3JlY29ubmVjdCAoR3N0UlRTUFNyYyAqIHNyYywgZ2Jvb2xlYW4gYXN5bmMpCi17Ci0gIEdzdFJUU1BSZXN1bHQgcmVzID0gR1NUX1JUU1BfT0s7Ci0gIGdib29sZWFuIHJlc3RhcnQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZG9pbmcgcmVjb25uZWN0Iik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAvKiBvbmx5IHJlc3RhcnQgd2hlbiB0aGUgcGFkcyB3ZXJlIG5vdCB5ZXQgYWN0aXZhdGVkLCBlbHNlIHdlIHdlcmUKLSAgICogc3RyZWFtaW5nIG92ZXIgVURQICovCi0gIHJlc3RhcnQgPSBzcmMtPm5lZWRfYWN0aXZhdGU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gIC8qIG5vIG5lZWQgdG8gcmVzdGFydCwgd2UncmUgZG9uZSAqLwotICBpZiAoIXJlc3RhcnQpCi0gICAgZ290byBkb25lOwotCi0gIC8qIHdlIGNhbiB0cnkgb25seSBUQ1Agbm93ICovCi0gIHNyYy0+Y3VyX3Byb3RvY29scyA9IEdTVF9SVFNQX0xPV0VSX1RSQU5TX1RDUDsKLQotICAvKiBjbG9zZSBhbmQgY2xlYW51cCBvdXIgc3RhdGUgKi8KLSAgaWYgKChyZXMgPSBnc3RfcnRzcHNyY19jbG9zZSAoc3JjLCBhc3luYywgRkFMU0UpKSA8IDApCi0gICAgZ290byBkb25lOwotCi0gIC8qIHNlZSBpZiB3ZSBoYXZlIFRDUCBsZWZ0IHRvIHRyeS4gQWxzbyBkb24ndCB0cnkgVENQIHdoZW4gd2Ugd2VyZSBjb25maWd1cmVkCi0gICAqIHdpdGggYW4gU0RQLiAqLwotICBpZiAoIShzcmMtPnByb3RvY29scyAmIEdTVF9SVFNQX0xPV0VSX1RSQU5TX1RDUCkgfHwgc3JjLT5mcm9tX3NkcCkKLSAgICBnb3RvIG5vX3Byb3RvY29sczsKLQotICAvKiBXZSBwb3N0IGEgd2FybmluZyBtZXNzYWdlIG5vdyB0byBpbmZvcm0gdGhlIHVzZXIKLSAgICogdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBJdCdzIG1vc3QgbGlrZWx5IGEgZmlyZXdhbGwgdGhpbmcuICovCi0gIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICgiQ291bGQgbm90IHJlY2VpdmUgYW55IFVEUCBwYWNrZXRzIGZvciAlLjRmIHNlY29uZHMsIG1heWJlIHlvdXIgIgotICAgICAgICAgICJmaXJld2FsbCBpcyBibG9ja2luZyBpdC4gUmV0cnlpbmcgdXNpbmcgYSB0Y3AgY29ubmVjdGlvbi4iLAotICAgICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHNyYy0+dWRwX3RpbWVvdXQpIC8gMTAwMDAwMC4wKSk7Ci0KLSAgLyogb3BlbiBuZXcgY29ubmVjdGlvbiB1c2luZyB0Y3AgKi8KLSAgaWYgKGdzdF9ydHNwc3JjX29wZW4gKHNyYywgYXN5bmMpIDwgMCkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi0gIC8qIHN0YXJ0IHBsYXliYWNrICovCi0gIGlmIChnc3RfcnRzcHNyY19wbGF5IChzcmMsICZzcmMtPnNlZ21lbnQsIGFzeW5jKSA8IDApCi0gICAgZ290byBwbGF5X2ZhaWxlZDsKLQotZG9uZToKLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3Byb3RvY29sczoKLSAgewotICAgIHNyYy0+Y3VyX3Byb3RvY29scyA9IDA7Ci0gICAgLyogbm8gdHJhbnNwb3J0IHBvc3NpYmxlLCBwb3N0IGFuIGVycm9yIGFuZCBzdG9wICovCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgcmVjZWl2ZSBhbnkgVURQIHBhY2tldHMgZm9yICUuNGYgc2Vjb25kcywgbWF5YmUgeW91ciAiCi0gICAgICAgICAgICAiZmlyZXdhbGwgaXMgYmxvY2tpbmcgaXQuIE5vIG90aGVyIHByb3RvY29scyB0byB0cnkuIiwKLSAgICAgICAgICAgIGdzdF9ndWludDY0X3RvX2dkb3VibGUgKHNyYy0+dWRwX3RpbWVvdXQpIC8gMTAwMDAwMC4wKSk7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX0VSUk9SOwotICB9Ci1vcGVuX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm9wZW4gZmFpbGVkIik7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX09LOwotICB9Ci1wbGF5X2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBsYXkgZmFpbGVkIik7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX09LOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19sb29wX3N0YXJ0X2NtZCAoR3N0UlRTUFNyYyAqIHNyYywgZ2ludCBjbWQpCi17Ci0gIHN3aXRjaCAoY21kKSB7Ci0gICAgY2FzZSBDTURfT1BFTjoKLSAgICAgIEdTVF9FTEVNRU5UX1BST0dSRVNTIChzcmMsIFNUQVJULCAib3BlbiIsICgiT3BlbmluZyBTdHJlYW0iKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENNRF9QTEFZOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgU1RBUlQsICJyZXF1ZXN0IiwgKCJTZW5kaW5nIFBMQVkgcmVxdWVzdCIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX1BBVVNFOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgU1RBUlQsICJyZXF1ZXN0IiwgKCJTZW5kaW5nIFBBVVNFIHJlcXVlc3QiKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENNRF9DTE9TRToKLSAgICAgIEdTVF9FTEVNRU5UX1BST0dSRVNTIChzcmMsIFNUQVJULCAiY2xvc2UiLCAoIkNsb3NpbmcgU3RyZWFtIikpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19sb29wX2NvbXBsZXRlX2NtZCAoR3N0UlRTUFNyYyAqIHNyYywgZ2ludCBjbWQpCi17Ci0gIHN3aXRjaCAoY21kKSB7Ci0gICAgY2FzZSBDTURfT1BFTjoKLSAgICAgIEdTVF9FTEVNRU5UX1BST0dSRVNTIChzcmMsIENPTVBMRVRFLCAib3BlbiIsICgiT3BlbmVkIFN0cmVhbSIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX1BMQVk6Ci0gICAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBDT01QTEVURSwgInJlcXVlc3QiLCAoIlNlbnQgUExBWSByZXF1ZXN0IikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTURfUEFVU0U6Ci0gICAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBDT01QTEVURSwgInJlcXVlc3QiLCAoIlNlbnQgUEFVU0UgcmVxdWVzdCIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX0NMT1NFOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ09NUExFVEUsICJjbG9zZSIsICgiQ2xvc2VkIFN0cmVhbSIpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3J0c3BzcmNfbG9vcF9jYW5jZWxfY21kIChHc3RSVFNQU3JjICogc3JjLCBnaW50IGNtZCkKLXsKLSAgc3dpdGNoIChjbWQpIHsKLSAgICBjYXNlIENNRF9PUEVOOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ0FOQ0VMRUQsICJvcGVuIiwgKCJPcGVuIGNhbmNlbGVkIikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTURfUExBWToKLSAgICAgIEdTVF9FTEVNRU5UX1BST0dSRVNTIChzcmMsIENBTkNFTEVELCAicmVxdWVzdCIsICgiUExBWSBjYW5jZWxlZCIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX1BBVVNFOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ0FOQ0VMRUQsICJyZXF1ZXN0IiwgKCJQQVVTRSBjYW5jZWxlZCIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX0NMT1NFOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ0FOQ0VMRUQsICJjbG9zZSIsICgiQ2xvc2UgY2FuY2VsZWQiKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX2xvb3BfZXJyb3JfY21kIChHc3RSVFNQU3JjICogc3JjLCBnaW50IGNtZCkKLXsKLSAgc3dpdGNoIChjbWQpIHsKLSAgICBjYXNlIENNRF9PUEVOOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgRVJST1IsICJvcGVuIiwgKCJPcGVuIGZhaWxlZCIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX1BMQVk6Ci0gICAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBFUlJPUiwgInJlcXVlc3QiLCAoIlBMQVkgZmFpbGVkIikpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTURfUEFVU0U6Ci0gICAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBFUlJPUiwgInJlcXVlc3QiLCAoIlBBVVNFIGZhaWxlZCIpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX0NMT1NFOgotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgRVJST1IsICJjbG9zZSIsICgiQ2xvc2UgZmFpbGVkIikpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19sb29wX2VuZF9jbWQgKEdzdFJUU1BTcmMgKiBzcmMsIGdpbnQgY21kLCBHc3RSVFNQUmVzdWx0IHJldCkKLXsKLSAgaWYgKHJldCA9PSBHU1RfUlRTUF9PSykKLSAgICBnc3RfcnRzcHNyY19sb29wX2NvbXBsZXRlX2NtZCAoc3JjLCBjbWQpOwotICBlbHNlIGlmIChyZXQgPT0gR1NUX1JUU1BfRUlOVFIpCi0gICAgZ3N0X3J0c3BzcmNfbG9vcF9jYW5jZWxfY21kIChzcmMsIGNtZCk7Ci0gIGVsc2UKLSAgICBnc3RfcnRzcHNyY19sb29wX2Vycm9yX2NtZCAoc3JjLCBjbWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQgKEdzdFJUU1BTcmMgKiBzcmMsIGdpbnQgY21kLCBnaW50IG1hc2spCi17Ci0gIGdpbnQgb2xkOwotICBnYm9vbGVhbiBmbHVzaGVkID0gRkFMU0U7Ci0KLSAgLyogc3RhcnQgbmV3IHJlcXVlc3QgKi8KLSAgZ3N0X3J0c3BzcmNfbG9vcF9zdGFydF9jbWQgKHNyYywgY21kKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZW5kaW5nIGNtZCAlcyIsIGNtZF90b19zdHJpbmcgKGNtZCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgb2xkID0gc3JjLT5wZW5kaW5nX2NtZDsKLSAgaWYgKG9sZCA9PSBDTURfUkVDT05ORUNUKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaWdub3JlLCB3ZSB3ZXJlIHJlY29ubmVjdGluZyIpOwotICAgIGNtZCA9IENNRF9SRUNPTk5FQ1Q7Ci0gIH0KLSAgaWYgKG9sZCAhPSBDTURfV0FJVCkgewotICAgIHNyYy0+cGVuZGluZ19jbWQgPSBDTURfV0FJVDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLSAgICAvKiBjYW5jZWwgcHJldmlvdXMgcmVxdWVzdCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNhbmNlbCBwcmV2aW91cyByZXF1ZXN0ICVzIiwgY21kX3RvX3N0cmluZyAob2xkKSk7Ci0gICAgZ3N0X3J0c3BzcmNfbG9vcF9jYW5jZWxfY21kIChzcmMsIG9sZCk7Ci0gICAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICB9Ci0gIHNyYy0+cGVuZGluZ19jbWQgPSBjbWQ7Ci0gIC8qIGludGVycnVwdCBpZiBhbGxvd2VkICovCi0gIGlmIChzcmMtPmJ1c3lfY21kICYgbWFzaykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvbm5lY3Rpb24gZmx1c2ggYnVzeSAlcyIsCi0gICAgICAgIGNtZF90b19zdHJpbmcgKHNyYy0+YnVzeV9jbWQpKTsKLSAgICBnc3RfcnRzcHNyY19jb25uZWN0aW9uX2ZsdXNoIChzcmMsIFRSVUUpOwotICAgIGZsdXNoZWQgPSBUUlVFOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vdCBpbnRlcnJ1cHRpbmcgYnVzeSBjbWQgJXMiLAotICAgICAgICBjbWRfdG9fc3RyaW5nIChzcmMtPmJ1c3lfY21kKSk7Ci0gIH0KLSAgaWYgKHNyYy0+dGFzaykKLSAgICBnc3RfdGFza19zdGFydCAoc3JjLT50YXNrKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgcmV0dXJuIGZsdXNoZWQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfbG9vcCAoR3N0UlRTUFNyYyAqIHNyYykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgaWYgKCFzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24gfHwgIXNyYy0+Y29ubmluZm8uY29ubmVjdGVkKQotICAgIGdvdG8gbm9fY29ubmVjdGlvbjsKLQotICBpZiAoc3JjLT5pbnRlcmxlYXZlZCkKLSAgICByZXQgPSBnc3RfcnRzcHNyY19sb29wX2ludGVybGVhdmVkIChzcmMpOwotICBlbHNlCi0gICAgcmV0ID0gZ3N0X3J0c3BzcmNfbG9vcF91ZHAgKHNyYyk7Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIHBhdXNlOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fY29ubmVjdGlvbjoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAid2UgYXJlIG5vdCBjb25uZWN0ZWQiKTsKLSAgICByZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICBnb3RvIHBhdXNlOwotICB9Ci1wYXVzZToKLSAgewotICAgIGNvbnN0IGdjaGFyICpyZWFzb24gPSBnc3RfZmxvd19nZXRfbmFtZSAocmV0KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwgcmVhc29uKTsKLSAgICBzcmMtPnJ1bm5pbmcgPSBGQUxTRTsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogcGVyZm9ybSBFT1MgbG9naWMgKi8KLSAgICAgIGlmIChzcmMtPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHsKLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUIChzcmMpLAotICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUIChzcmMpLAotICAgICAgICAgICAgICAgIHNyYy0+c2VnbWVudC5mb3JtYXQsIHNyYy0+c2VnbWVudC5wb3NpdGlvbikpOwotICAgICAgICBnc3RfcnRzcHNyY19wdXNoX2V2ZW50IChzcmMsCi0gICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3NlZ21lbnRfZG9uZSAoc3JjLT5zZWdtZW50LmZvcm1hdCwKLSAgICAgICAgICAgICAgICBzcmMtPnNlZ21lbnQucG9zaXRpb24pKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9ydHNwc3JjX3B1c2hfZXZlbnQgKHNyYywgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAocmV0ID09IEdTVF9GTE9XX05PVF9MSU5LRUQgfHwgcmV0IDwgR1NUX0ZMT1dfRU9TKSB7Ci0gICAgICAvKiBmb3IgZmF0YWwgZXJyb3JzIHdlIHBvc3QgYW4gZXJyb3IgbWVzc2FnZSwgcG9zdCB0aGUgZXJyb3IgYmVmb3JlIHRoZQotICAgICAgICogRU9TIHNvIHRoZSBhcHAga25vd3MgYWJvdXQgdGhlIGVycm9yIGZpcnN0LiAqLwotICAgICAgR1NUX0VMRU1FTlRfRkxPV19FUlJPUiAoc3JjLCByZXQpOwotICAgICAgZ3N0X3J0c3BzcmNfcHVzaF9ldmVudCAoc3JjLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgfQotICAgIGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQgKHNyYywgQ01EX1dBSVQsIENNRF9MT09QKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nc3RfcnRzcF9hdXRoX21ldGhvZF90b19zdHJpbmcgKEdzdFJUU1BBdXRoTWV0aG9kIG1ldGhvZCkKLXsKLSAgZ2ludCBpbmRleCA9IDA7Ci0KLSAgd2hpbGUgKG1ldGhvZCAhPSAwKSB7Ci0gICAgaW5kZXgrKzsKLSAgICBtZXRob2QgPj49IDE7Ci0gIH0KLSAgc3dpdGNoIChpbmRleCkgewotICAgIGNhc2UgMDoKLSAgICAgIHJldHVybiAiTm9uZSI7Ci0gICAgY2FzZSAxOgotICAgICAgcmV0dXJuICJCYXNpYyI7Ci0gICAgY2FzZSAyOgotICAgICAgcmV0dXJuICJEaWdlc3QiOwotICB9Ci0KLSAgcmV0dXJuICJVbmtub3duIjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotZ3N0X3J0c3BzcmNfc2tpcF9sd3MgKGNvbnN0IGdjaGFyICogcykKLXsKLSAgd2hpbGUgKGdfYXNjaWlfaXNzcGFjZSAoKnMpKQotICAgIHMrKzsKLSAgcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqCi1nc3RfcnRzcHNyY191bnNraXBfbHdzIChjb25zdCBnY2hhciAqIHMsIGNvbnN0IGdjaGFyICogc3RhcnQpCi17Ci0gIHdoaWxlIChzID4gc3RhcnQgJiYgZ19hc2NpaV9pc3NwYWNlICgqKHMgLSAxKSkpCi0gICAgcy0tOwotICByZXR1cm4gczsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdzdF9ydHNwc3JjX3NraXBfY29tbWFzIChjb25zdCBnY2hhciAqIHMpCi17Ci0gIC8qIFRoZSBncmFtbWFyIGFsbG93cyBmb3IgbXVsdGlwbGUgY29tbWFzICovCi0gIHdoaWxlIChnX2FzY2lpX2lzc3BhY2UgKCpzKSB8fCAqcyA9PSAnLCcpCi0gICAgcysrOwotICByZXR1cm4gczsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICoKLWdzdF9ydHNwc3JjX3NraXBfaXRlbSAoY29uc3QgZ2NoYXIgKiBzKQotewotICBnYm9vbGVhbiBxdW90ZWQgPSBGQUxTRTsKLSAgY29uc3QgZ2NoYXIgKnN0YXJ0ID0gczsKLQotICAvKiBBIGxpc3QgaXRlbSBlbmRzIGF0IHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcgotICAgKiBiZWZvcmUgYSBjb21tYSB3aGljaCBpcyBub3QgaW5zaWRlIGEgcXVvdGVkLXN0cmluZy4gT3IgYXQKLSAgICogdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgotICAgKi8KLSAgd2hpbGUgKCpzKSB7Ci0gICAgaWYgKCpzID09ICciJykKLSAgICAgIHF1b3RlZCA9ICFxdW90ZWQ7Ci0gICAgZWxzZSBpZiAocXVvdGVkKSB7Ci0gICAgICBpZiAoKnMgPT0gJ1xcJyAmJiAqKHMgKyAxKSkKLSAgICAgICAgcysrOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoKnMgPT0gJywnKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcysrOwotICB9Ci0KLSAgcmV0dXJuIGdzdF9ydHNwc3JjX3Vuc2tpcF9sd3MgKHMsIHN0YXJ0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwX2RlY29kZV9xdW90ZWRfc3RyaW5nIChnY2hhciAqIHF1b3RlZF9zdHJpbmcpCi17Ci0gIGdjaGFyICpzcmMsICpkc3Q7Ci0KLSAgc3JjID0gcXVvdGVkX3N0cmluZyArIDE7Ci0gIGRzdCA9IHF1b3RlZF9zdHJpbmc7Ci0gIHdoaWxlICgqc3JjICYmICpzcmMgIT0gJyInKSB7Ci0gICAgaWYgKCpzcmMgPT0gJ1xcJyAmJiAqKHNyYyArIDEpKQotICAgICAgc3JjKys7Ci0gICAgKmRzdCsrID0gKnNyYysrOwotICB9Ci0gICpkc3QgPSAnXDAnOwotfQotCi0vKiBFeHRyYWN0IHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbnMgdGhhdCB0aGUgc2VydmVyIHByb3ZpZGVkIGZvciBlYWNoIG1ldGhvZAotICogaW50byBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzIGFuZCBnaXZlIHRob3NlIHRvIHRoZSBjb25uZWN0aW9uIG9iamVjdC4KLSAqLwotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX3BhcnNlX2RpZ2VzdF9jaGFsbGVuZ2UgKEdzdFJUU1BDb25uZWN0aW9uICogY29ubiwKLSAgICBjb25zdCBnY2hhciAqIGhlYWRlciwgZ2Jvb2xlYW4gKiBzdGFsZSkKLXsKLSAgR1NMaXN0ICpsaXN0ID0gTlVMTCwgKml0ZXI7Ci0gIGNvbnN0IGdjaGFyICplbmQ7Ci0gIGdjaGFyICppdGVtLCAqZXEsICpuYW1lX2VuZCwgKnZhbHVlOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0YWxlICE9IE5VTEwpOwotCi0gIGdzdF9ydHNwX2Nvbm5lY3Rpb25fY2xlYXJfYXV0aF9wYXJhbXMgKGNvbm4pOwotICAqc3RhbGUgPSBGQUxTRTsKLQotICAvKiBQYXJzZSBhIGhlYWRlciB3aG9zZSBjb250ZW50IGlzIGRlc2NyaWJlZCBieSBSRkMyNjE2IGFzCi0gICAqICIjc29tZXRoaW5nIiwgd2hlcmUgInNvbWV0aGluZyIgZG9lcyBub3QgaXRzZWxmIGNvbnRhaW4gY29tbWFzLAotICAgKiBleGNlcHQgYXMgcGFydCBvZiBxdW90ZWQtc3RyaW5ncywgaW50byBhIGxpc3Qgb2YgYWxsb2NhdGVkIHN0cmluZ3MuCi0gICAqLwotICBoZWFkZXIgPSBnc3RfcnRzcHNyY19za2lwX2NvbW1hcyAoaGVhZGVyKTsKLSAgd2hpbGUgKCpoZWFkZXIpIHsKLSAgICBlbmQgPSBnc3RfcnRzcHNyY19za2lwX2l0ZW0gKGhlYWRlcik7Ci0gICAgbGlzdCA9IGdfc2xpc3RfcHJlcGVuZCAobGlzdCwgZ19zdHJuZHVwIChoZWFkZXIsIGVuZCAtIGhlYWRlcikpOwotICAgIGhlYWRlciA9IGdzdF9ydHNwc3JjX3NraXBfY29tbWFzIChlbmQpOwotICB9Ci0gIGlmICghbGlzdCkKLSAgICByZXR1cm47Ci0KLSAgbGlzdCA9IGdfc2xpc3RfcmV2ZXJzZSAobGlzdCk7Ci0gIGZvciAoaXRlciA9IGxpc3Q7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7Ci0gICAgaXRlbSA9IGl0ZXItPmRhdGE7Ci0KLSAgICBlcSA9IHN0cmNociAoaXRlbSwgJz0nKTsKLSAgICBpZiAoZXEpIHsKLSAgICAgIG5hbWVfZW5kID0gKGdjaGFyICopIGdzdF9ydHNwc3JjX3Vuc2tpcF9sd3MgKGVxLCBpdGVtKTsKLSAgICAgIGlmIChuYW1lX2VuZCA9PSBpdGVtKSB7Ci0gICAgICAgIC8qIFRoYXQncyBubyBnb29kLi4uICovCi0gICAgICAgIGdfZnJlZSAoaXRlbSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAqbmFtZV9lbmQgPSAnXDAnOwotCi0gICAgICB2YWx1ZSA9IChnY2hhciAqKSBnc3RfcnRzcHNyY19za2lwX2x3cyAoZXEgKyAxKTsKLSAgICAgIGlmICgqdmFsdWUgPT0gJyInKQotICAgICAgICBnc3RfcnRzcF9kZWNvZGVfcXVvdGVkX3N0cmluZyAodmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgdmFsdWUgPSBOVUxMOwotCi0gICAgaWYgKHZhbHVlICYmIHN0cmNtcCAoaXRlbSwgInN0YWxlIikgPT0gMCAmJiBzdHJjbXAgKHZhbHVlLCAiVFJVRSIpID09IDApCi0gICAgICAqc3RhbGUgPSBUUlVFOwotICAgIGdzdF9ydHNwX2Nvbm5lY3Rpb25fc2V0X2F1dGhfcGFyYW0gKGNvbm4sIGl0ZW0sIHZhbHVlKTsKLSAgICBnX2ZyZWUgKGl0ZW0pOwotICB9Ci0KLSAgZ19zbGlzdF9mcmVlIChsaXN0KTsKLX0KLQotLyogUGFyc2UgYSBXV1ctQXV0aGVudGljYXRlIFJlc3BvbnNlIGhlYWRlciBhbmQgZGV0ZXJtaW5lIHRoZQotICogYXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMKLSAqCi0gKiBUaGlzIGNvZGUgc2hvdWxkIGFsc28gY29wZSB3aXRoIHRoZSBmYWN0IHRoYXQgZWFjaCBXV1ctQXV0aGVudGljYXRlCi0gKiBoZWFkZXIgY2FuIGNvbnRhaW4gbXVsdGlwbGUgY2hhbGxlbmdlIG1ldGhvZHMgKyB0b2tlbnMKLSAqCi0gKiBBdCB0aGUgbW9tZW50LCBmb3IgQmFzaWMgYXV0aCwgd2UganVzdCBkbyBhIG1pbmltYWwgY2hlY2sgYW5kIGRvbid0Ci0gKiBldmVuIHBhcnNlIG91dCB0aGUgcmVhbG0gKi8KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY19wYXJzZV9hdXRoX2hkciAoZ2NoYXIgKiBoZHIsIEdzdFJUU1BBdXRoTWV0aG9kICogbWV0aG9kcywKLSAgICBHc3RSVFNQQ29ubmVjdGlvbiAqIGNvbm4sIGdib29sZWFuICogc3RhbGUpCi17Ci0gIGdjaGFyICpzdGFydDsKLQotICBnX3JldHVybl9pZl9mYWlsIChoZHIgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1ldGhvZHMgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKHN0YWxlICE9IE5VTEwpOwotCi0gIC8qIFNraXAgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyAqLwotICBmb3IgKHN0YXJ0ID0gaGRyOyBzdGFydFswXSAhPSAnXDAnICYmIGdfYXNjaWlfaXNzcGFjZSAoc3RhcnRbMF0pOyBzdGFydCsrKTsKLQotICBpZiAoZ19hc2NpaV9zdHJuY2FzZWNtcCAoc3RhcnQsICJiYXNpYyIsIDUpID09IDApCi0gICAgKm1ldGhvZHMgfD0gR1NUX1JUU1BfQVVUSF9CQVNJQzsKLSAgZWxzZSBpZiAoZ19hc2NpaV9zdHJuY2FzZWNtcCAoc3RhcnQsICJkaWdlc3QgIiwgNykgPT0gMCkgewotICAgICptZXRob2RzIHw9IEdTVF9SVFNQX0FVVEhfRElHRVNUOwotICAgIGdzdF9ydHNwc3JjX3BhcnNlX2RpZ2VzdF9jaGFsbGVuZ2UgKGNvbm4sICZzdGFydFs3XSwgc3RhbGUpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3J0c3BzcmNfc2V0dXBfYXV0aDoKLSAqIEBzcmM6IHRoZSBydHNwIHNvdXJjZQotICoKLSAqIENvbmZpZ3VyZSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhbmQgYXV0aCBtZXRob2Qgb24gdGhlCi0gKiBjb25uZWN0aW9uIG9iamVjdCBiYXNlZCBvbiBhIHJlc3BvbnNlIHdlIHJlY2VpdmVkIGZyb20gdGhlCi0gKiBwZWVyLgotICoKLSAqIEN1cnJlbnRseSwgdGhpcyByZXF1aXJlcyB0aGF0IGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHdlcmUgc3VwcGxpZWQKLSAqIGluIHRoZSB1cmkuIEluIHRoZSBmdXR1cmUsIHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBvbiBkZW1hbmQgYnkgc2VuZGluZwotICogYSBtZXNzYWdlIHVwIHRoZSBidXMuCi0gKgotICogUmV0dXJuczogVFJVRSBpZiBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBjb3VsZCBiZSBzZXQgdXAgY29ycmVjdGx5LgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3NldHVwX2F1dGggKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFJUU1BNZXNzYWdlICogcmVzcG9uc2UpCi17Ci0gIGdjaGFyICp1c2VyID0gTlVMTDsKLSAgZ2NoYXIgKnBhc3MgPSBOVUxMOwotICBHc3RSVFNQQXV0aE1ldGhvZCBhdmFpbF9tZXRob2RzID0gR1NUX1JUU1BfQVVUSF9OT05FOwotICBHc3RSVFNQQXV0aE1ldGhvZCBtZXRob2Q7Ci0gIEdzdFJUU1BSZXN1bHQgYXV0aF9yZXN1bHQ7Ci0gIEdzdFJUU1BVcmwgKnVybDsKLSAgR3N0UlRTUENvbm5lY3Rpb24gKmNvbm47Ci0gIGdjaGFyICpoZHI7Ci0gIGdib29sZWFuIHN0YWxlID0gRkFMU0U7Ci0KLSAgY29ubiA9IHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbjsKLQotICAvKiBJZGVudGlmeSB0aGUgYXZhaWxhYmxlIGF1dGggbWV0aG9kcyBhbmQgc2VlIGlmIGFueSBhcmUgc3VwcG9ydGVkICovCi0gIGlmIChnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKHJlc3BvbnNlLCBHU1RfUlRTUF9IRFJfV1dXX0FVVEhFTlRJQ0FURSwKLSAgICAgICAgICAmaGRyLCAwKSA9PSBHU1RfUlRTUF9PSykgewotICAgIGdzdF9ydHNwc3JjX3BhcnNlX2F1dGhfaGRyIChoZHIsICZhdmFpbF9tZXRob2RzLCBjb25uLCAmc3RhbGUpOwotICB9Ci0KLSAgaWYgKGF2YWlsX21ldGhvZHMgPT0gR1NUX1JUU1BfQVVUSF9OT05FKQotICAgIGdvdG8gbm9fYXV0aF9hdmFpbGFibGU7Ci0KLSAgLyogRm9yIGRpZ2VzdCBhdXRoLCBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgdGhlIHNlc3Npb24KLSAgICogZGF0YSBhcmUgc3RhbGUsIHdlIGp1c3QgdXBkYXRlIHRoZW0gaW4gdGhlIGNvbm5lY3Rpb24gb2JqZWN0IGFuZAotICAgKiByZXR1cm4gVFJVRSB0byByZXRyeSB0aGUgcmVxdWVzdCAqLwotICBpZiAoc3RhbGUpCi0gICAgc3JjLT50cmllZF91cmxfYXV0aCA9IEZBTFNFOwotCi0gIHVybCA9IGdzdF9ydHNwX2Nvbm5lY3Rpb25fZ2V0X3VybCAoY29ubik7Ci0KLSAgLyogRG8gd2UgaGF2ZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXZhaWxhYmxlPyAqLwotICBpZiAodXJsICE9IE5VTEwgJiYgIXNyYy0+dHJpZWRfdXJsX2F1dGggJiYgdXJsLT51c2VyICE9IE5VTEwKLSAgICAgICYmIHVybC0+cGFzc3dkICE9IE5VTEwpIHsKLSAgICB1c2VyID0gdXJsLT51c2VyOwotICAgIHBhc3MgPSB1cmwtPnBhc3N3ZDsKLSAgICBzcmMtPnRyaWVkX3VybF9hdXRoID0gVFJVRTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAgICJBdHRlbXB0aW5nIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGNyZWRlbnRpYWxzIGZyb20gdGhlIFVSTCIpOwotICB9IGVsc2UgewotICAgIHVzZXIgPSBzcmMtPnVzZXJfaWQ7Ci0gICAgcGFzcyA9IHNyYy0+dXNlcl9wdzsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAgICJBdHRlbXB0aW5nIGF1dGhlbnRpY2F0aW9uIHVzaW5nIGNyZWRlbnRpYWxzIGZyb20gdGhlIHByb3BlcnRpZXMiKTsKLSAgfQotCi0gIC8qIEZJWE1FOiBJZiB0aGUgdXJsIGRpZG4ndCBjb250YWluIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBvciB3ZSB0cmllZCB0aGVtCi0gICAqIGFscmVhZHksIHJlcXVlc3QgYSB1c2VybmFtZSBhbmQgcGFzc3dkIGZyb20gdGhlIGFwcGxpY2F0aW9uIHZpYSBzb21lIGtpbmQKLSAgICogb2YgY3JlZGVudGlhbHMgcmVxdWVzdCBtZXNzYWdlICovCi0KLSAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIHVzZXJuYW1lIGFuZCBwYXNzd2QgYXQgdGhpcyBwb2ludCwgYmFpbCBvdXQuICovCi0gIGlmICh1c2VyID09IE5VTEwgfHwgcGFzcyA9PSBOVUxMKQotICAgIGdvdG8gbm9fdXNlcl9wYXNzOwotCi0gIC8qIFRyeSB0byBjb25maWd1cmUgZm9yIGVhY2ggYXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgc3Ryb25nZXN0IHRvCi0gICAqIHdlYWtlc3QgKi8KLSAgZm9yIChtZXRob2QgPSBHU1RfUlRTUF9BVVRIX01BWDsgbWV0aG9kICE9IEdTVF9SVFNQX0FVVEhfTk9ORTsgbWV0aG9kID4+PSAxKSB7Ci0gICAgLyogQ2hlY2sgaWYgdGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIgKi8KLSAgICBpZiAoKG1ldGhvZCAmIGF2YWlsX21ldGhvZHMpID09IDApCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIFBhc3MgdGhlIGNyZWRlbnRpYWxzIHRvIHRoZSBjb25uZWN0aW9uIHRvIHRyeSBvbiB0aGUgbmV4dCByZXF1ZXN0ICovCi0gICAgYXV0aF9yZXN1bHQgPSBnc3RfcnRzcF9jb25uZWN0aW9uX3NldF9hdXRoIChjb25uLCBtZXRob2QsIHVzZXIsIHBhc3MpOwotICAgIC8qIElOVkFMIGluZGljYXRlcyBhbiBpbnZhbGlkIHVzZXJuYW1lL3Bhc3N3ZCB3ZXJlIHN1cHBsaWVkLCBzbyB3ZSdsbCBqdXN0Ci0gICAgICogaWdub3JlIGl0IGFuZCBlbmQgdXAgcmV0cnlpbmcgbGF0ZXIgKi8KLSAgICBpZiAoYXV0aF9yZXN1bHQgPT0gR1NUX1JUU1BfT0sgfHwgYXV0aF9yZXN1bHQgPT0gR1NUX1JUU1BfRUlOVkFMKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJBdHRlbXB0aW5nICVzIGF1dGhlbnRpY2F0aW9uIiwKLSAgICAgICAgICBnc3RfcnRzcF9hdXRoX21ldGhvZF90b19zdHJpbmcgKG1ldGhvZCkpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG1ldGhvZCA9PSBHU1RfUlRTUF9BVVRIX05PTkUpCi0gICAgZ290byBub19hdXRoX2F2YWlsYWJsZTsKLQotICByZXR1cm4gVFJVRTsKLQotbm9fYXV0aF9hdmFpbGFibGU6Ci0gIHsKLSAgICAvKiBPdXRwdXQgYW4gZXJyb3IgaW5kaWNhdGluZyB0aGF0IHdlIGNvdWxkbid0IGNvbm5lY3QgYmVjYXVzZSB0aGVyZSB3ZXJlCi0gICAgICogbm8gc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIHByb3RvY29scyAqLwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChOVUxMKSwKLSAgICAgICAgKCJObyBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgd2FzIGZvdW5kIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fdXNlcl9wYXNzOgotICB7Ci0gICAgLyogV2UgZG9uJ3QgZmlyZSBhbiBlcnJvciBtZXNzYWdlLCB3ZSBqdXN0IHJldHVybiBGQUxTRSBhbmQgbGV0IHRoZQotICAgICAqIG5vcm1hbCBOT1RfQVVUSE9SSVpFRCBlcnJvciBiZSBwcm9wYWdhdGVkICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY190cnlfc2VuZCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUENvbm5lY3Rpb24gKiBjb25uLAotICAgIEdzdFJUU1BNZXNzYWdlICogcmVxdWVzdCwgR3N0UlRTUE1lc3NhZ2UgKiByZXNwb25zZSwKLSAgICBHc3RSVFNQU3RhdHVzQ29kZSAqIGNvZGUpCi17Ci0gIEdzdFJUU1BSZXN1bHQgcmVzOwotICBHc3RSVFNQU3RhdHVzQ29kZSB0aGVjb2RlOwotICBnY2hhciAqY29udGVudF9iYXNlID0gTlVMTDsKLSAgZ2ludCB0cnkgPSAwOwotCi1hZ2FpbjoKLSAgaWYgKCFzcmMtPnNob3J0X2hlYWRlcikKLSAgICBnc3RfcnRzcF9leHRfbGlzdF9iZWZvcmVfc2VuZCAoc3JjLT5leHRlbnNpb25zLCByZXF1ZXN0KTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzZW5kaW5nIG1lc3NhZ2UiKTsKLQotICBpZiAoc3JjLT5kZWJ1ZykKLSAgICBnc3RfcnRzcF9tZXNzYWdlX2R1bXAgKHJlcXVlc3QpOwotCi0gIHJlcyA9IGdzdF9ydHNwc3JjX2Nvbm5lY3Rpb25fc2VuZCAoc3JjLCBjb25uLCByZXF1ZXN0LCBzcmMtPnB0Y3BfdGltZW91dCk7Ci0gIGlmIChyZXMgPCAwKQotICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICBnc3RfcnRzcF9jb25uZWN0aW9uX3Jlc2V0X3RpbWVvdXQgKGNvbm4pOwotCi1uZXh0OgotICByZXMgPSBnc3RfcnRzcHNyY19jb25uZWN0aW9uX3JlY2VpdmUgKHNyYywgY29ubiwgcmVzcG9uc2UsIHNyYy0+cHRjcF90aW1lb3V0KTsKLSAgaWYgKHJlcyA8IDApCi0gICAgZ290byByZWNlaXZlX2Vycm9yOwotCi0gIGlmIChzcmMtPmRlYnVnKQotICAgIGdzdF9ydHNwX21lc3NhZ2VfZHVtcCAocmVzcG9uc2UpOwotCi0gIHN3aXRjaCAocmVzcG9uc2UtPnR5cGUpIHsKLSAgICBjYXNlIEdTVF9SVFNQX01FU1NBR0VfUkVRVUVTVDoKLSAgICAgIHJlcyA9IGdzdF9ydHNwc3JjX2hhbmRsZV9yZXF1ZXN0IChzcmMsIGNvbm4sIHJlc3BvbnNlKTsKLSAgICAgIGlmIChyZXMgPT0gR1NUX1JUU1BfRUVPRikKLSAgICAgICAgZ290byBzZXJ2ZXJfZW9mOwotICAgICAgZWxzZSBpZiAocmVzIDwgMCkKLSAgICAgICAgZ290byBoYW5kbGVfcmVxdWVzdF9mYWlsZWQ7Ci0gICAgICBnb3RvIG5leHQ7Ci0gICAgY2FzZSBHU1RfUlRTUF9NRVNTQUdFX1JFU1BPTlNFOgotICAgICAgLyogb2ssIGEgcmVzcG9uc2UgaXMgZ29vZCAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmVjZWl2ZWQgcmVzcG9uc2UgbWVzc2FnZSIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUlRTUF9NRVNTQUdFX0RBVEE6Ci0gICAgICAvKiBnZXQgbmV4dCByZXNwb25zZSAqLwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiaGFuZGxlIGRhdGEgcmVzcG9uc2UgbWVzc2FnZSIpOwotICAgICAgZ3N0X3J0c3BzcmNfaGFuZGxlX2RhdGEgKHNyYywgcmVzcG9uc2UpOwotICAgICAgZ290byBuZXh0OwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgImlnbm9yaW5nIHVua25vd24gbWVzc2FnZSB0eXBlICVkIiwKLSAgICAgICAgICByZXNwb25zZS0+dHlwZSk7Ci0gICAgICBnb3RvIG5leHQ7Ci0gIH0KLQotICB0aGVjb2RlID0gcmVzcG9uc2UtPnR5cGVfZGF0YS5yZXNwb25zZS5jb2RlOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImdvdCByZXNwb25zZSBtZXNzYWdlICVkIiwgdGhlY29kZSk7Ci0KLSAgLyogaWYgdGhlIGNhbGxlciB3YW50ZWQgdGhlIHJlc3VsdCBjb2RlLCB3ZSBzdG9yZSBpdC4gKi8KLSAgaWYgKGNvZGUpCi0gICAgKmNvZGUgPSB0aGVjb2RlOwotCi0gIC8qIElmIHRoZSByZXF1ZXN0IGRpZG4ndCBzdWNjZWVkLCBiYWlsIG91dCBiZWZvcmUgZG9pbmcgYW55IG1vcmUgKi8KLSAgaWYgKHRoZWNvZGUgIT0gR1NUX1JUU1BfU1RTX09LKQotICAgIHJldHVybiBHU1RfUlRTUF9PSzsKLQotICAvKiBzdG9yZSBuZXcgY29udGVudCBiYXNlIGlmIGFueSAqLwotICBnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKHJlc3BvbnNlLCBHU1RfUlRTUF9IRFJfQ09OVEVOVF9CQVNFLAotICAgICAgJmNvbnRlbnRfYmFzZSwgMCk7Ci0gIGlmIChjb250ZW50X2Jhc2UpIHsKLSAgICBnX2ZyZWUgKHNyYy0+Y29udGVudF9iYXNlKTsKLSAgICBzcmMtPmNvbnRlbnRfYmFzZSA9IGdfc3RyZHVwIChjb250ZW50X2Jhc2UpOwotICB9Ci0gIGdzdF9ydHNwX2V4dF9saXN0X2FmdGVyX3NlbmQgKHNyYy0+ZXh0ZW5zaW9ucywgcmVxdWVzdCwgcmVzcG9uc2UpOwotCi0gIHJldHVybiBHU1RfUlRTUF9PSzsKLQotICAvKiBFUlJPUlMgKi8KLXNlbmRfZXJyb3I6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotCi0gICAgaWYgKHJlcyAhPSBHU1RfUlRTUF9FSU5UUikgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFdSSVRFLCAoTlVMTCksCi0gICAgICAgICAgKCJDb3VsZCBub3Qgc2VuZCBtZXNzYWdlLiAoJXMpIiwgc3RyKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAic2VuZCBpbnRlcnJ1cHRlZCIpOwotICAgIH0KLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotcmVjZWl2ZV9lcnJvcjoKLSAgewotICAgIHN3aXRjaCAocmVzKSB7Ci0gICAgICBjYXNlIEdTVF9SVFNQX0VFT0Y6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAic2VydmVyIGNsb3NlZCBjb25uZWN0aW9uIik7Ci0gICAgICAgIGlmICgodHJ5ID09IDApICYmICFzcmMtPmludGVybGVhdmVkICYmIHNyYy0+dWRwX3JlY29ubmVjdCkgewotICAgICAgICAgIHRyeSsrOwotICAgICAgICAgIC8qIGlmIHJlY29ubmVjdCBzdWNjZWVkcywgdHJ5IGFnYWluICovCi0gICAgICAgICAgaWYgKChyZXMgPQotICAgICAgICAgICAgICAgICAgZ3N0X3J0c3BfY29ubmluZm9fcmVjb25uZWN0IChzcmMsICZzcmMtPmNvbm5pbmZvLAotICAgICAgICAgICAgICAgICAgICAgIEZBTFNFKSkgPT0gMCkKLSAgICAgICAgICAgIGdvdG8gYWdhaW47Ci0gICAgICAgIH0KLSAgICAgICAgLyogb25seSB0cnkgb25jZSBhZnRlciByZWNvbm5lY3QsIHRoZW4gZmFsbHRocm91Z2ggYW5kIGVycm9yIG91dCAqLwotICAgICAgZGVmYXVsdDoKLSAgICAgIHsKLSAgICAgICAgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0cnJlc3VsdCAocmVzKTsKLQotICAgICAgICBpZiAocmVzICE9IEdTVF9SVFNQX0VJTlRSKSB7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgICAgICAgKCJDb3VsZCBub3QgcmVjZWl2ZSBtZXNzYWdlLiAoJXMpIiwgc3RyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJyZWNlaXZlIGludGVycnVwdGVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotaGFuZGxlX3JlcXVlc3RfZmFpbGVkOgotICB7Ci0gICAgLyogRVJST1Igd2FzIHBvc3RlZCAqLwotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKHJlc3BvbnNlKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci1zZXJ2ZXJfZW9mOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAid2UgZ290IGFuIGVvZiBmcm9tIHRoZSBzZXJ2ZXIiKTsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICgiVGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24uIikpOwotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKHJlc3BvbnNlKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3J0c3BzcmNfc2VuZDoKLSAqIEBzcmM6IHRoZSBydHNwIHNvdXJjZQotICogQGNvbm46IHRoZSBjb25uZWN0aW9uIHRvIHNlbmQgb24KLSAqIEByZXF1ZXN0OiBtdXN0IHBvaW50IHRvIGEgdmFsaWQgcmVxdWVzdAotICogQHJlc3BvbnNlOiBtdXN0IHBvaW50IHRvIGFuIGVtcHR5ICNHc3RSVFNQTWVzc2FnZQotICogQGNvZGU6IGFuIG9wdGlvbmFsIGNvZGUgcmVzdWx0Ci0gKgotICogc2VuZCBAcmVxdWVzdCBhbmQgcmV0cmlldmUgdGhlIHJlc3BvbnNlIGluIEByZXNwb25zZS4gb3B0aW9uYWxseSBAY29kZSBjYW4gYmUKLSAqIG5vbi1OVUxMIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBjb250YWluIHRoZSBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UuCi0gKgotICogSWYgVGhpcyBmdW5jdGlvbiByZXR1cm5zICNHU1RfUlRTUF9PSywgQHJlc3BvbnNlIHdpbGwgY29udGFpbiBhIHZhbGlkIHJlc3BvbnNlCi0gKiBtZXNzYWdlIHRoYXQgc2hvdWxkIGJlIGNsZWFuZWQgd2l0aCBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0KCkgYWZ0ZXIgdXNhZ2UuCi0gKgotICogSWYgQGNvZGUgaXMgTlVMTCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiAjR1NUX1JUU1BfRVJST1IgKHdpdGggYW4gaW52YWxpZAotICogQHJlc3BvbnNlIG1lc3NhZ2UpIGlmIHRoZSByZXNwb25zZSBjb2RlIHdhcyBub3QgMjAwIChPSykuCi0gKgotICogSWYgdGhlIGF0dGVtcHQgcmVzdWx0cyBpbiBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCB0aGVuIHRoaXMgd2lsbCBhdHRlbXB0Ci0gKiB0byByZXRyaWV2ZSBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyB2aWEgZ3N0X3J0c3BzcmNfc2V0dXBfYXV0aCBhbmQgcmV0cnkKLSAqIHRoZSByZXF1ZXN0LgotICoKLSAqIFJldHVybnM6ICNHU1RfUlRTUF9PSyBpZiB0aGUgcHJvY2Vzc2luZyB3YXMgc3VjY2Vzc2Z1bC4KLSAqLwotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX3NlbmQgKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFJUU1BDb25uZWN0aW9uICogY29ubiwKLSAgICBHc3RSVFNQTWVzc2FnZSAqIHJlcXVlc3QsIEdzdFJUU1BNZXNzYWdlICogcmVzcG9uc2UsCi0gICAgR3N0UlRTUFN0YXR1c0NvZGUgKiBjb2RlKQotewotICBHc3RSVFNQU3RhdHVzQ29kZSBpbnRfY29kZSA9IEdTVF9SVFNQX1NUU19PSzsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9FUlJPUjsKLSAgZ2ludCBjb3VudDsKLSAgZ2Jvb2xlYW4gcmV0cnk7Ci0gIEdzdFJUU1BNZXRob2QgbWV0aG9kID0gR1NUX1JUU1BfSU5WQUxJRDsKLQotICBjb3VudCA9IDA7Ci0gIGRvIHsKLSAgICByZXRyeSA9IEZBTFNFOwotCi0gICAgLyogbWFrZSBzdXJlIHdlIGRvbid0IGxvb3AgZm9yZXZlciAqLwotICAgIGlmIChjb3VudCsrID4gOCkKLSAgICAgIGJyZWFrOwotCi0gICAgLyogc2F2ZSBtZXRob2Qgc28gd2UgY2FuIGRpc2FibGUgaXQgd2hlbiB0aGUgc2VydmVyIGNvbXBsYWlucyAqLwotICAgIG1ldGhvZCA9IHJlcXVlc3QtPnR5cGVfZGF0YS5yZXF1ZXN0Lm1ldGhvZDsKLQotICAgIGlmICgocmVzID0KLSAgICAgICAgICAgIGdzdF9ydHNwc3JjX3RyeV9zZW5kIChzcmMsIGNvbm4sIHJlcXVlc3QsIHJlc3BvbnNlLCAmaW50X2NvZGUpKSA8IDApCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgc3dpdGNoIChpbnRfY29kZSkgewotICAgICAgY2FzZSBHU1RfUlRTUF9TVFNfVU5BVVRIT1JJWkVEOgotICAgICAgY2FzZSBHU1RfUlRTUF9TVFNfTk9UX0ZPVU5EOgotICAgICAgICBpZiAoZ3N0X3J0c3BzcmNfc2V0dXBfYXV0aCAoc3JjLCByZXNwb25zZSkpIHsKLSAgICAgICAgICAvKiBUcnkgdGhlIHJlcXVlc3QvcmVzcG9uc2UgYWdhaW4gYWZ0ZXIgY29uZmlndXJpbmcgdGhlIGF1dGggaW5mbwotICAgICAgICAgICAqIGFuZCBsb29wIGFnYWluICovCi0gICAgICAgICAgcmV0cnkgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IHdoaWxlIChyZXRyeSA9PSBUUlVFKTsKLQotICAvKiBJZiB0aGUgdXNlciByZXF1ZXN0ZWQgdGhlIGNvZGUsIGxldCB0aGVtIGhhbmRsZSBlcnJvcnMsIG90aGVyd2lzZQotICAgKiBwb3N0IGFuIGVycm9yIGJlbG93ICovCi0gIGlmIChjb2RlICE9IE5VTEwpCi0gICAgKmNvZGUgPSBpbnRfY29kZTsKLSAgZWxzZSBpZiAoaW50X2NvZGUgIT0gR1NUX1JUU1BfU1RTX09LKQotICAgIGdvdG8gZXJyb3JfcmVzcG9uc2U7Ci0KLSAgcmV0dXJuIHJlczsKLQotICAvKiBFUlJPUlMgKi8KLWVycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IGVycm9yICVkIiwgcmVzKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci1lcnJvcl9yZXNwb25zZToKLSAgewotICAgIHJlcyA9IEdTVF9SVFNQX0VSUk9SOwotCi0gICAgc3dpdGNoIChyZXNwb25zZS0+dHlwZV9kYXRhLnJlc3BvbnNlLmNvZGUpIHsKLSAgICAgIGNhc2UgR1NUX1JUU1BfU1RTX05PVF9GT1VORDoKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9GT1VORCwgKE5VTEwpLCAoIiVzIiwKLSAgICAgICAgICAgICAgICByZXNwb25zZS0+dHlwZV9kYXRhLnJlc3BvbnNlLnJlYXNvbikpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1JUU1BfU1RTX1VOQVVUSE9SSVpFRDoKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE5PVF9BVVRIT1JJWkVELCAoTlVMTCksICgiJXMiLAotICAgICAgICAgICAgICAgIHJlc3BvbnNlLT50eXBlX2RhdGEucmVzcG9uc2UucmVhc29uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUlRTUF9TVFNfTU9WRURfUEVSTUFORU5UTFk6Ci0gICAgICBjYXNlIEdTVF9SVFNQX1NUU19NT1ZFX1RFTVBPUkFSSUxZOgotICAgICAgewotICAgICAgICBnY2hhciAqbmV3X2xvY2F0aW9uOwotICAgICAgICBHc3RSVFNQTG93ZXJUcmFucyB0cmFuc3BvcnRzOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImdvdCByZWRpcmVjdGlvbiIpOwotICAgICAgICAvKiBpZiB3ZSBkb24ndCBoYXZlIGEgTG9jYXRpb24gSGVhZGVyLCB3ZSBtdXN0IGVycm9yICovCi0gICAgICAgIGlmIChnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKHJlc3BvbnNlLCBHU1RfUlRTUF9IRFJfTE9DQVRJT04sCi0gICAgICAgICAgICAgICAgJm5ld19sb2NhdGlvbiwgMCkgPCAwKQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qIFdoZW4gd2UgcmVjZWl2ZSBhIHJlZGlyZWN0IHJlc3VsdCwgd2UgZ28gYmFjayB0byB0aGUgSU5JVCBzdGF0ZSBhZnRlcgotICAgICAgICAgKiBwYXJzaW5nIHRoZSBuZXcgVVJJLiBUaGUgY2FsbGVyIHNob3VsZCBkbyB0aGUgbmVlZGVkIHN0ZXBzIHRvIGlzc3VlCi0gICAgICAgICAqIGEgbmV3IHNldHVwIHdoZW4gaXQgZGV0ZWN0cyB0aGlzIHN0YXRlIGNoYW5nZS4gKi8KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmVkaXJlY3Rpb24gdG8gJXMiLCBuZXdfbG9jYXRpb24pOwotCi0gICAgICAgIC8qIHNhdmUgY3VycmVudCB0cmFuc3BvcnRzICovCi0gICAgICAgIGlmIChzcmMtPmNvbm5pbmZvLnVybCkKLSAgICAgICAgICB0cmFuc3BvcnRzID0gc3JjLT5jb25uaW5mby51cmwtPnRyYW5zcG9ydHM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0cmFuc3BvcnRzID0gR1NUX1JUU1BfTE9XRVJfVFJBTlNfVU5LTk9XTjsKLQotICAgICAgICBnc3RfcnRzcHNyY191cmlfc2V0X3VyaSAoR1NUX1VSSV9IQU5ETEVSIChzcmMpLCBuZXdfbG9jYXRpb24sIE5VTEwpOwotCi0gICAgICAgIC8qIHNldCBvbGQgdHJhbnNwb3J0cyAqLwotICAgICAgICBpZiAoc3JjLT5jb25uaW5mby51cmwgJiYgdHJhbnNwb3J0cyAhPSBHU1RfUlRTUF9MT1dFUl9UUkFOU19VTktOT1dOKQotICAgICAgICAgIHNyYy0+Y29ubmluZm8udXJsLT50cmFuc3BvcnRzID0gdHJhbnNwb3J0czsKLQotICAgICAgICBzcmMtPm5lZWRfcmVkaXJlY3QgPSBUUlVFOwotICAgICAgICByZXMgPSBHU1RfUlRTUF9PSzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9SVFNQX1NUU19OT1RfQUNDRVBUQUJMRToKLSAgICAgIGNhc2UgR1NUX1JUU1BfU1RTX05PVF9JTVBMRU1FTlRFRDoKLSAgICAgIGNhc2UgR1NUX1JUU1BfU1RTX01FVEhPRF9OT1RfQUxMT1dFRDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJnb3QgTk9UIElNUExFTUVOVEVELCBkaXNhYmxlIG1ldGhvZCAlcyIsCi0gICAgICAgICAgICBnc3RfcnRzcF9tZXRob2RfYXNfdGV4dCAobWV0aG9kKSk7Ci0gICAgICAgIHNyYy0+bWV0aG9kcyAmPSB+bWV0aG9kOwotICAgICAgICByZXMgPSBHU1RfUlRTUF9PSzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAgICAgKCJHb3QgZXJyb3IgcmVzcG9uc2U6ICVkICglcykuIiwgcmVzcG9uc2UtPnR5cGVfZGF0YS5yZXNwb25zZS5jb2RlLAotICAgICAgICAgICAgICAgIHJlc3BvbnNlLT50eXBlX2RhdGEucmVzcG9uc2UucmVhc29uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvKiBpZiB3ZSByZXR1cm4gRVJST1Igd2Ugc2hvdWxkIHVuc2V0IHRoZSByZXNwb25zZSBvdXJzZWx2ZXMgKi8KLSAgICBpZiAocmVzID09IEdTVF9SVFNQX0VSUk9SKQotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAocmVzcG9uc2UpOwotCi0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi1zdGF0aWMgR3N0UlRTUFJlc3VsdAotZ3N0X3J0c3BzcmNfc2VuZF9jYiAoR3N0UlRTUEV4dGVuc2lvbiAqIGV4dCwgR3N0UlRTUE1lc3NhZ2UgKiByZXF1ZXN0LAotICAgIEdzdFJUU1BNZXNzYWdlICogcmVzcG9uc2UsIEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIHJldHVybiBnc3RfcnRzcHNyY19zZW5kIChzcmMsIHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbiwgcmVxdWVzdCwgcmVzcG9uc2UsCi0gICAgICBOVUxMKTsKLX0KLQotCi0vKiBwYXJzZSB0aGUgcmVzcG9uc2UgYW5kIGNvbGxlY3QgYWxsIHRoZSBzdXBwb3J0ZWQgbWV0aG9kcy4gV2UgbmVlZCB0aGlzCi0gKiBpbmZvcm1hdGlvbiBzbyB0aGF0IHdlIGRvbid0IHRyeSB0byBzZW5kIGFuIHVuc3VwcG9ydGVkIHJlcXVlc3QgdG8gdGhlCi0gKiBzZXJ2ZXIuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfcGFyc2VfbWV0aG9kcyAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUE1lc3NhZ2UgKiByZXNwb25zZSkKLXsKLSAgR3N0UlRTUEhlYWRlckZpZWxkIGZpZWxkOwotICBnY2hhciAqcmVzcG9wdGlvbnM7Ci0gIGdpbnQgaW5keCA9IDA7Ci0KLSAgLyogcmVzZXQgc3VwcG9ydGVkIG1ldGhvZHMgKi8KLSAgc3JjLT5tZXRob2RzID0gMDsKLQotICAvKiBUcnkgQWxsb3cgSGVhZGVyIGZpcnN0ICovCi0gIGZpZWxkID0gR1NUX1JUU1BfSERSX0FMTE9XOwotICB3aGlsZSAoVFJVRSkgewotICAgIHJlc3BvcHRpb25zID0gTlVMTDsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKHJlc3BvbnNlLCBmaWVsZCwgJnJlc3BvcHRpb25zLCBpbmR4KTsKLSAgICBpZiAoaW5keCA9PSAwICYmICFyZXNwb3B0aW9ucykgewotICAgICAgLyogaWYgbm8gQWxsb3cgaGVhZGVyIHdhcyBmb3VuZCB0aGVuIHRyeSB0aGUgUHVibGljIGhlYWRlci4uLiAqLwotICAgICAgZmllbGQgPSBHU1RfUlRTUF9IRFJfUFVCTElDOwotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV9nZXRfaGVhZGVyIChyZXNwb25zZSwgZmllbGQsICZyZXNwb3B0aW9ucywgaW5keCk7Ci0gICAgfQotICAgIGlmICghcmVzcG9wdGlvbnMpCi0gICAgICBicmVhazsKLQotICAgIHNyYy0+bWV0aG9kcyB8PSBnc3RfcnRzcF9vcHRpb25zX2Zyb21fdGV4dCAocmVzcG9wdGlvbnMpOwotCi0gICAgaW5keCsrOwotICB9Ci0KLSAgaWYgKHNyYy0+bWV0aG9kcyA9PSAwKSB7Ci0gICAgLyogbmVpdGhlciBBbGxvdyBub3IgUHVibGljIGFyZSByZXF1aXJlZCwgYXNzdW1lIHRoZSBzZXJ2ZXIgc3VwcG9ydHMKLSAgICAgKiBhdCBsZWFzdCBERVNDUklCRSwgU0VUVVAsIHdlIGFsd2F5cyBhc3N1bWUgaXQgc3VwcG9ydHMgUExBWSBhcwotICAgICAqIHdlbGwuICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY291bGQgbm90IGdldCBPUFRJT05TIik7Ci0gICAgc3JjLT5tZXRob2RzID0gR1NUX1JUU1BfREVTQ1JJQkUgfCBHU1RfUlRTUF9TRVRVUDsKLSAgfQotICAvKiBhbHdheXMgYXNzdW1lIFBMQVksIEZJWE1FLCBleHRlbnNpb25zIHNob3VsZCBiZSBhYmxlIHRvIG92ZXJyaWRlCi0gICAqIHRoaXMgKi8KLSAgc3JjLT5tZXRob2RzIHw9IEdTVF9SVFNQX1BMQVk7Ci0gIC8qIGFsc28gYXNzdW1lIGl0IHdpbGwgc3VwcG9ydCBSYW5nZSAqLwotICBzcmMtPnNlZWthYmxlID0gVFJVRTsKLQotICAvKiB3ZSBuZWVkIGRlc2NyaWJlIGFuZCBzZXR1cCAqLwotICBpZiAoIShzcmMtPm1ldGhvZHMgJiBHU1RfUlRTUF9ERVNDUklCRSkpCi0gICAgZ290byBub19kZXNjcmliZTsKLSAgaWYgKCEoc3JjLT5tZXRob2RzICYgR1NUX1JUU1BfU0VUVVApKQotICAgIGdvdG8gbm9fc2V0dXA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19kZXNjcmliZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChOVUxMKSwKLSAgICAgICAgKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBERVNDUklCRS4iKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19zZXR1cDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChOVUxMKSwKLSAgICAgICAgKCJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBTRVRVUC4iKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qIG1hc2tzIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBoYXJkY29kZWQgcHJvdG9jb2wgb3JkZXIgb2YgcHJlZmVyZW5jZQotICogaW4gY29kZSBiZWxvdyAqLwotc3RhdGljIGNvbnN0IGd1aW50IHByb3RvY29sX21hc2tzW10gPSB7Ci0gIEdTVF9SVFNQX0xPV0VSX1RSQU5TX1VEUCwKLSAgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQX01DQVNULAotICBHU1RfUlRTUF9MT1dFUl9UUkFOU19UQ1AsCi0gIDAKLX07Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY19jcmVhdGVfdHJhbnNwb3J0c19zdHJpbmcgKEdzdFJUU1BTcmMgKiBzcmMsCi0gICAgR3N0UlRTUExvd2VyVHJhbnMgcHJvdG9jb2xzLCBHc3RSVFNQUHJvZmlsZSBwcm9maWxlLCBnY2hhciAqKiB0cmFuc3BvcnRzKQotewotICBHc3RSVFNQUmVzdWx0IHJlczsKLSAgR1N0cmluZyAqcmVzdWx0OwotICBnYm9vbGVhbiBhZGRfdWRwX3N0cjsKLQotICAqdHJhbnNwb3J0cyA9IE5VTEw7Ci0KLSAgcmVzID0KLSAgICAgIGdzdF9ydHNwX2V4dF9saXN0X2dldF90cmFuc3BvcnRzIChzcmMtPmV4dGVuc2lvbnMsIHByb3RvY29scywgdHJhbnNwb3J0cyk7Ci0KLSAgaWYgKHJlcyA8IDApCi0gICAgZ290byBmYWlsZWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IHRyYW5zcG9ydHMgJXMiLCBHU1RfU1RSX05VTEwgKCp0cmFuc3BvcnRzKSk7Ci0KLSAgLyogZXh0ZW5zaW9uIGxpc3RlZCB0cmFuc3BvcnRzLCB1c2UgdGhvc2UgKi8KLSAgaWYgKCp0cmFuc3BvcnRzICE9IE5VTEwpCi0gICAgcmV0dXJuIEdTVF9SVFNQX09LOwotCi0gIC8qIGl0J3MgdGhlIGRlZmF1bHQgKi8KLSAgYWRkX3VkcF9zdHIgPSBGQUxTRTsKLQotICAvKiB0aGUgZGVmYXVsdCBSVFNQIHRyYW5zcG9ydHMgKi8KLSAgcmVzdWx0ID0gZ19zdHJpbmdfbmV3ICgiUlRQIik7Ci0KLSAgc3dpdGNoIChwcm9maWxlKSB7Ci0gICAgY2FzZSBHU1RfUlRTUF9QUk9GSUxFX0FWUDoKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocmVzdWx0LCAiL0FWUCIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfUlRTUF9QUk9GSUxFX1NBVlA6Ci0gICAgICBnX3N0cmluZ19hcHBlbmQgKHJlc3VsdCwgIi9TQVZQIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9SVFNQX1BST0ZJTEVfQVZQRjoKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocmVzdWx0LCAiL0FWUEYiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1JUU1BfUFJPRklMRV9TQVZQRjoKLSAgICAgIGdfc3RyaW5nX2FwcGVuZCAocmVzdWx0LCAiL1NBVlBGIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAocHJvdG9jb2xzICYgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYWRkaW5nIFVEUCB1bmljYXN0Iik7Ci0gICAgaWYgKGFkZF91ZHBfc3RyKQotICAgICAgZ19zdHJpbmdfYXBwZW5kIChyZXN1bHQsICIvVURQIik7Ci0gICAgZ19zdHJpbmdfYXBwZW5kIChyZXN1bHQsICI7dW5pY2FzdDtjbGllbnRfcG9ydD0lJXUxLSUldTIiKTsKLSAgfSBlbHNlIGlmIChwcm90b2NvbHMgJiBHU1RfUlRTUF9MT1dFUl9UUkFOU19VRFBfTUNBU1QpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJhZGRpbmcgVURQIG11bHRpY2FzdCIpOwotICAgIC8qIHdlIGRvbid0IGhhdmUgdG8gYWxsb2NhdGUgYW55IFVEUCBwb3J0cyB5ZXQsIGlmIHRoZSBzZWxlY3RlZCB0cmFuc3BvcnQKLSAgICAgKiB0dXJucyBvdXQgdG8gYmUgbXVsdGljYXN0IHdlIGNhbiBjcmVhdGUgdGhlbSBhbmQgam9pbiB0aGUgbXVsdGljYXN0Ci0gICAgICogZ3JvdXAgaW5kaWNhdGVkIGluIHRoZSB0cmFuc3BvcnQgcmVwbHkgKi8KLSAgICBpZiAoYWRkX3VkcF9zdHIpCi0gICAgICBnX3N0cmluZ19hcHBlbmQgKHJlc3VsdCwgIi9VRFAiKTsKLSAgICBnX3N0cmluZ19hcHBlbmQgKHJlc3VsdCwgIjttdWx0aWNhc3QiKTsKLSAgICBpZiAoc3JjLT5uZXh0X3BvcnRfbnVtICE9IDApIHsKLSAgICAgIGlmIChzcmMtPmNsaWVudF9wb3J0X3JhbmdlLm1heCA+IDAgJiYKLSAgICAgICAgICBzcmMtPm5leHRfcG9ydF9udW0gPj0gc3JjLT5jbGllbnRfcG9ydF9yYW5nZS5tYXgpCi0gICAgICAgIGdvdG8gbm9fcG9ydHM7Ci0KLSAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHJlc3VsdCwgIjtjbGllbnRfcG9ydD0lZC0lZCIsCi0gICAgICAgICAgc3JjLT5uZXh0X3BvcnRfbnVtLCBzcmMtPm5leHRfcG9ydF9udW0gKyAxKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAocHJvdG9jb2xzICYgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVENQKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiYWRkaW5nIFRDUCIpOwotCi0gICAgZ19zdHJpbmdfYXBwZW5kIChyZXN1bHQsICIvVENQO3VuaWNhc3Q7aW50ZXJsZWF2ZWQ9JSVpMS0lJWkyIik7Ci0gIH0KLSAgKnRyYW5zcG9ydHMgPSBnX3N0cmluZ19mcmVlIChyZXN1bHQsIEZBTFNFKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwcmVwYXJlZCB0cmFuc3BvcnRzICVzIiwgR1NUX1NUUl9OVUxMICgqdHJhbnNwb3J0cykpOwotCi0gIHJldHVybiBHU1RfUlRTUF9PSzsKLQotICAvKiBFUlJPUlMgKi8KLWZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUiAoImV4dGVuc2lvbiBnYXZlIGVycm9yICVkIiwgcmVzKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci1ub19wb3J0czoKLSAgewotICAgIEdTVF9FUlJPUiAoIm5vIG1vcmUgcG9ydHMgYXZhaWxhYmxlIik7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY19wcmVwYXJlX3RyYW5zcG9ydHMgKEdzdFJUU1BTdHJlYW0gKiBzdHJlYW0sIGdjaGFyICoqIHRyYW5zcG9ydHMsCi0gICAgZ2ludCBvcmlnX3J0cHBvcnQsIGdpbnQgb3JpZ19ydGNwcG9ydCkKLXsKLSAgR3N0UlRTUFNyYyAqc3JjOwotICBnaW50IG5yX3VkcCwgbnJfaW50OwotICBnY2hhciAqbmV4dCwgKnA7Ci0gIGdpbnQgcnRwcG9ydCA9IDAsIHJ0Y3Bwb3J0ID0gMDsKLSAgR1N0cmluZyAqc3RyOwotCi0gIHNyYyA9IHN0cmVhbS0+cGFyZW50OwotCi0gIC8qIGZpbmQgbnVtYmVyIG9mIHBsYWNlaG9sZGVycyBmaXJzdCAqLwotICBpZiAoc3Ryc3RyICgqdHJhbnNwb3J0cywgIiUlaTIiKSkKLSAgICBucl9pbnQgPSAyOwotICBlbHNlIGlmIChzdHJzdHIgKCp0cmFuc3BvcnRzLCAiJSVpMSIpKQotICAgIG5yX2ludCA9IDE7Ci0gIGVsc2UKLSAgICBucl9pbnQgPSAwOwotCi0gIGlmIChzdHJzdHIgKCp0cmFuc3BvcnRzLCAiJSV1MiIpKQotICAgIG5yX3VkcCA9IDI7Ci0gIGVsc2UgaWYgKHN0cnN0ciAoKnRyYW5zcG9ydHMsICIlJXUxIikpCi0gICAgbnJfdWRwID0gMTsKLSAgZWxzZQotICAgIG5yX3VkcCA9IDA7Ci0KLSAgaWYgKG5yX3VkcCA9PSAwICYmIG5yX2ludCA9PSAwKQotICAgIGdvdG8gZG9uZTsKLQotICBpZiAobnJfdWRwID4gMCkgewotICAgIGlmICghb3JpZ19ydHBwb3J0IHx8ICFvcmlnX3J0Y3Bwb3J0KSB7Ci0gICAgICBpZiAoIWdzdF9ydHNwc3JjX2FsbG9jX3VkcF9wb3J0cyAoc3RyZWFtLCAmcnRwcG9ydCwgJnJ0Y3Bwb3J0KSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJ0cHBvcnQgPSBvcmlnX3J0cHBvcnQ7Ci0gICAgICBydGNwcG9ydCA9IG9yaWdfcnRjcHBvcnQ7Ci0gICAgfQotICB9Ci0KLSAgc3RyID0gZ19zdHJpbmdfbmV3ICgiIik7Ci0gIHAgPSAqdHJhbnNwb3J0czsKLSAgd2hpbGUgKChuZXh0ID0gc3Ryc3RyIChwLCAiJSUiKSkpIHsKLSAgICBnX3N0cmluZ19hcHBlbmRfbGVuIChzdHIsIHAsIG5leHQgLSBwKTsKLSAgICBpZiAobmV4dFsyXSA9PSAndScpIHsKLSAgICAgIGlmIChuZXh0WzNdID09ICcxJykKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiJWQiLCBydHBwb3J0KTsKLSAgICAgIGVsc2UgaWYgKG5leHRbM10gPT0gJzInKQotICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHIsICIlZCIsIHJ0Y3Bwb3J0KTsKLSAgICB9Ci0gICAgaWYgKG5leHRbMl0gPT0gJ2knKSB7Ci0gICAgICBpZiAobmV4dFszXSA9PSAnMScpCi0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVkIiwgc3JjLT5mcmVlX2NoYW5uZWwpOwotICAgICAgZWxzZSBpZiAobmV4dFszXSA9PSAnMicpCi0gICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0ciwgIiVkIiwgc3JjLT5mcmVlX2NoYW5uZWwgKyAxKTsKLSAgICB9Ci0KLSAgICBwID0gbmV4dCArIDQ7Ci0gIH0KLSAgLyogYXBwZW5kIGZpbmFsIHBhcnQgKi8KLSAgZ19zdHJpbmdfYXBwZW5kIChzdHIsIHApOwotCi0gIGdfZnJlZSAoKnRyYW5zcG9ydHMpOwotICAqdHJhbnNwb3J0cyA9IGdfc3RyaW5nX2ZyZWUgKHN0ciwgRkFMU0UpOwotCi1kb25lOgotICByZXR1cm4gR1NUX1JUU1BfT0s7Ci0KLSAgLyogRVJST1JTICovCi1mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gYWxsb2NhdGUgdWRwIHBvcnRzIik7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXNpZ25hbF9nZXRfc3J0Y3BfcGFyYW1zIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtKQotewotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLQotICBnX3NpZ25hbF9lbWl0IChzcmMsIGdzdF9ydHNwc3JjX3NpZ25hbHNbU0lHTkFMX1JFUVVFU1RfUlRDUF9LRVldLCAwLAotICAgICAgc3RyZWFtLT5pZCwgJmNhcHMpOwotCi0gIGlmIChjYXBzICE9IE5VTEwpCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiU1JUUCBwYXJhbWV0ZXJzIHJlY2VpdmVkIik7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWRlZmF1bHRfc3J0Y3BfcGFyYW1zICh2b2lkKQotewotICBndWludCBpOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQ4ICprZXlfZGF0YTsKLSNkZWZpbmUgS0VZX1NJWkUgMzAKLSAgZ3VpbnQgZGF0YV9zaXplID0gR1NUX1JPVU5EX1VQXzQgKEtFWV9TSVpFKTsKLQotICAvKiBjcmVhdGUgYSByYW5kb20ga2V5ICovCi0gIGtleV9kYXRhID0gZ19tYWxsb2MgKGRhdGFfc2l6ZSk7Ci0gIGZvciAoaSA9IDA7IGkgPCBkYXRhX3NpemU7IGkgKz0gNCkKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0JFIChrZXlfZGF0YSArIGksIGdfcmFuZG9tX2ludCAoKSk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoa2V5X2RhdGEsIEtFWV9TSVpFKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtc3J0Y3AiLAotICAgICAgInNydHAta2V5IiwgR1NUX1RZUEVfQlVGRkVSLCBidWYsCi0gICAgICAic3J0cC1jaXBoZXIiLCBHX1RZUEVfU1RSSU5HLCAiYWVzLTEyOC1pY20iLAotICAgICAgInNydHAtYXV0aCIsIEdfVFlQRV9TVFJJTkcsICJobWFjLXNoYTEtODAiLAotICAgICAgInNydGNwLWNpcGhlciIsIEdfVFlQRV9TVFJJTkcsICJhZXMtMTI4LWljbSIsCi0gICAgICAic3J0Y3AtYXV0aCIsIEdfVFlQRV9TVFJJTkcsICJobWFjLXNoYTEtODAiLCBOVUxMKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3J0c3BzcmNfc3RyZWFtX21ha2Vfa2V5bWdtdCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0UlRTUFN0cmVhbSAqIHN0cmVhbSkKLXsKLSAgZ2NoYXIgKmJhc2U2NCwgKnJlc3VsdCA9IE5VTEw7Ci0gIEdzdE1JS0VZTWVzc2FnZSAqbWlrZXlfbXNnOwotCi0gIHN0cmVhbS0+c3J0Y3BwYXJhbXMgPSBzaWduYWxfZ2V0X3NydGNwX3BhcmFtcyAoc3JjLCBzdHJlYW0pOwotICBpZiAoc3RyZWFtLT5zcnRjcHBhcmFtcyA9PSBOVUxMKQotICAgIHN0cmVhbS0+c3J0Y3BwYXJhbXMgPSBkZWZhdWx0X3NydGNwX3BhcmFtcyAoKTsKLQotICBtaWtleV9tc2cgPSBnc3RfbWlrZXlfbWVzc2FnZV9uZXdfZnJvbV9jYXBzIChzdHJlYW0tPnNydGNwcGFyYW1zKTsKLSAgaWYgKG1pa2V5X21zZykgewotICAgIC8qIGFkZCBwb2xpY3kgJzAnIGZvciBvdXIgU1NSQyAqLwotICAgIGdzdF9taWtleV9tZXNzYWdlX2FkZF9jc19zcnRwIChtaWtleV9tc2csIDAsIHN0cmVhbS0+c2VuZF9zc3JjLCAwKTsKLQotICAgIGJhc2U2NCA9IGdzdF9taWtleV9tZXNzYWdlX2Jhc2U2NF9lbmNvZGUgKG1pa2V5X21zZyk7Ci0gICAgZ3N0X21pa2V5X21lc3NhZ2VfdW5yZWYgKG1pa2V5X21zZyk7Ci0KLSAgICBpZiAoYmFzZTY0KSB7Ci0gICAgICByZXN1bHQgPSBnc3Rfc2RwX21ha2Vfa2V5bWdtdCAoc3RyZWFtLT5jb25uaW5mby5sb2NhdGlvbiwgYmFzZTY0KTsKLSAgICAgIGdfZnJlZSAoYmFzZTY0KTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiBQZXJmb3JtIHRoZSBTRVRVUCByZXF1ZXN0IGZvciBhbGwgdGhlIHN0cmVhbXMuCi0gKgotICogV2UgYXNrIHRoZSBzZXJ2ZXIgZm9yIGEgc3BlY2lmaWMgdHJhbnNwb3J0LCB3aGljaCBpbml0aWFsbHkgaW5jbHVkZXMgYWxsIHRoZQotICogb25lcyB3ZSBjYW4gc3VwcG9ydCAoVURQL1RDUC9NVUxUSUNBU1QpLiBGb3IgdGhlIFVEUCB0cmFuc3BvcnQgd2UgYWxsb2NhdGUKLSAqIHR3byBsb2NhbCBVRFAgcG9ydHMgdGhhdCB3ZSBzZW5kIHRvIHRoZSBzZXJ2ZXIuCi0gKgotICogT25jZSB0aGUgc2VydmVyIHJlcGxpZWQgd2l0aCBhIHRyYW5zcG9ydCwgd2UgY29uZmlndXJlIHRoZSBvdGhlciBzdHJlYW1zCi0gKiB3aXRoIHRoZSBzYW1lIHRyYW5zcG9ydC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBjb25maWd1cmUgdGhlIHN0cmVhbSBmb3IgdGhlIHNlbGVjdGVkIHRyYW5zcG9ydCwKLSAqIHdoaWNoIGJhc2ljYWxseSBtZWFucyBjcmVhdGluZyB0aGUgcGlwZWxpbmUuCi0gKi8KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY19zZXR1cF9zdHJlYW1zIChHc3RSVFNQU3JjICogc3JjLCBnYm9vbGVhbiBhc3luYykKLXsKLSAgR0xpc3QgKndhbGs7Ci0gIEdzdFJUU1BSZXN1bHQgcmVzID0gR1NUX1JUU1BfRVJST1I7Ci0gIEdzdFJUU1BNZXNzYWdlIHJlcXVlc3QgPSB7IDAgfTsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVzcG9uc2UgPSB7IDAgfTsKLSAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKLSAgR3N0UlRTUExvd2VyVHJhbnMgcHJvdG9jb2xzOwotICBHc3RSVFNQU3RhdHVzQ29kZSBjb2RlOwotICBnYm9vbGVhbiB1bnN1cHBvcnRlZF9yZWFsID0gRkFMU0U7Ci0gIGdpbnQgcnRwcG9ydCwgcnRjcHBvcnQ7Ci0gIEdzdFJUU1BVcmwgKnVybDsKLSAgZ2NoYXIgKmh2YWw7Ci0KLSAgaWYgKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbikgewotICAgIHVybCA9IGdzdF9ydHNwX2Nvbm5lY3Rpb25fZ2V0X3VybCAoc3JjLT5jb25uaW5mby5jb25uZWN0aW9uKTsKLSAgICAvKiB3ZSBpbml0aWFsbHkgYWxsb3cgYWxsIGNvbmZpZ3VyZWQgbG93ZXIgdHJhbnNwb3J0cy4gYmFzZWQgb24gdGhlIFVSTAotICAgICAqIHRyYW5zcG9ydHMgYW5kIHRoZSByZXBsaWVzIGZyb20gdGhlIHNlcnZlciB3ZSBuYXJyb3cgdGhlbSBkb3duLiAqLwotICAgIHByb3RvY29scyA9IHVybC0+dHJhbnNwb3J0cyAmIHNyYy0+Y3VyX3Byb3RvY29sczsKLSAgfSBlbHNlIHsKLSAgICB1cmwgPSBOVUxMOwotICAgIHByb3RvY29scyA9IHNyYy0+Y3VyX3Byb3RvY29sczsKLSAgfQotCi0gIGlmIChwcm90b2NvbHMgPT0gMCkKLSAgICBnb3RvIG5vX3Byb3RvY29sczsKLQotICAvKiByZXNldCBzb21lIHN0YXRlICovCi0gIHNyYy0+ZnJlZV9jaGFubmVsID0gMDsKLSAgc3JjLT5pbnRlcmxlYXZlZCA9IEZBTFNFOwotICBzcmMtPm5lZWRfYWN0aXZhdGUgPSBGQUxTRTsKLSAgLyoga2VlcCB0cmFjayBvZiBuZXh0IHBvcnQgbnVtYmVyLCAwIGlzIHJhbmRvbSAqLwotICBzcmMtPm5leHRfcG9ydF9udW0gPSBzcmMtPmNsaWVudF9wb3J0X3JhbmdlLm1pbjsKLSAgcnRwcG9ydCA9IHJ0Y3Bwb3J0ID0gMDsKLQotICBpZiAoR19VTkxJS0VMWSAoc3JjLT5zdHJlYW1zID09IE5VTEwpKQotICAgIGdvdG8gbm9fc3RyZWFtczsKLQotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQQ29ubmVjdGlvbiAqY29ubjsKLSAgICBnY2hhciAqdHJhbnNwb3J0czsKLSAgICBnaW50IHJldHJ5ID0gMDsKLSAgICBndWludCBtYXNrID0gMDsKLSAgICBnYm9vbGVhbiBzZWxlY3RlZDsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgd2Fsay0+ZGF0YTsKLQotICAgIGNhcHMgPSBzdHJlYW1fZ2V0X2NhcHNfZm9yX3B0IChzdHJlYW0sIHN0cmVhbS0+ZGVmYXVsdF9wdCk7Ci0gICAgaWYgKGNhcHMgPT0gTlVMTCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2tpcHBpbmcgc3RyZWFtICVwLCBubyBjYXBzIiwgc3RyZWFtKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChzdHJlYW0tPnNraXBwZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNraXBwaW5nIHN0cmVhbSAlcCIsIHN0cmVhbSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBzZWUgaWYgd2UgbmVlZCB0byBjb25maWd1cmUgdGhpcyBzdHJlYW0gKi8KLSAgICBpZiAoIWdzdF9ydHNwX2V4dF9saXN0X2NvbmZpZ3VyZV9zdHJlYW0gKHNyYy0+ZXh0ZW5zaW9ucywgY2FwcykpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNraXBwaW5nIHN0cmVhbSAlcCwgZGlzYWJsZWQgYnkgZXh0ZW5zaW9uIiwKLSAgICAgICAgICBzdHJlYW0pOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZ19zaWduYWxfZW1pdCAoc3JjLCBnc3RfcnRzcHNyY19zaWduYWxzW1NJR05BTF9TRUxFQ1RfU1RSRUFNXSwgMCwKLSAgICAgICAgc3RyZWFtLT5pZCwgY2FwcywgJnNlbGVjdGVkKTsKLSAgICBpZiAoIXNlbGVjdGVkKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJza2lwcGluZyBzdHJlYW0gJXAsIGRpc2FibGVkIGJ5IHNpZ25hbCIsIHN0cmVhbSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBtZXJnZS9vdmVyd3JpdGUgZ2xvYmFsIGNhcHMgKi8KLSAgICBpZiAoY2FwcykgewotICAgICAgZ3VpbnQgaiwgbnVtOwotICAgICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgICAgIG51bSA9IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHNyYy0+cHJvcHMpOwotICAgICAgZm9yIChqID0gMDsgaiA8IG51bTsgaisrKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyICpuYW1lOwotICAgICAgICBjb25zdCBHVmFsdWUgKnZhbDsKLQotICAgICAgICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9udGhfZmllbGRfbmFtZSAoc3JjLT5wcm9wcywgaik7Ci0gICAgICAgIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzcmMtPnByb3BzLCBuYW1lKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHMsIG5hbWUsIHZhbCk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY29waWVkICVzIiwgbmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogc2tpcCBzZXR1cCBpZiB3ZSBoYXZlIG5vIFVSTCBmb3IgaXQgKi8KLSAgICBpZiAoc3RyZWFtLT5jb25uaW5mby5sb2NhdGlvbiA9PSBOVUxMKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJza2lwcGluZyBzdHJlYW0gJXAsIG5vIHNldHVwIiwgc3RyZWFtKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24gPT0gTlVMTCkgewotICAgICAgaWYgKCFnc3RfcnRzcF9jb25uaW5mb19jb25uZWN0IChzcmMsICZzdHJlYW0tPmNvbm5pbmZvLCBhc3luYykpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic2tpcHBpbmcgc3RyZWFtICVwLCBmYWlsZWQgdG8gY29ubmVjdCIsIHN0cmVhbSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgY29ubiA9IHN0cmVhbS0+Y29ubmluZm8uY29ubmVjdGlvbjsKLSAgICB9IGVsc2UgewotICAgICAgY29ubiA9IHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbjsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZG9pbmcgc2V0dXAgb2Ygc3RyZWFtICVwIHdpdGggJXMiLCBzdHJlYW0sCi0gICAgICAgIHN0cmVhbS0+Y29ubmluZm8ubG9jYXRpb24pOwotCi0gICAgLyogaWYgd2UgaGF2ZSBhIG11bHRpY2FzdCBjb25uZWN0aW9uLCBvbmx5IHN1Z2dlc3QgbXVsdGljYXN0IGZyb20gbm93IG9uICovCi0gICAgaWYgKHN0cmVhbS0+aXNfbXVsdGljYXN0KQotICAgICAgcHJvdG9jb2xzICY9IEdTVF9SVFNQX0xPV0VSX1RSQU5TX1VEUF9NQ0FTVDsKLQotICBuZXh0X3Byb3RvY29sOgotICAgIC8qIGZpcnN0IHNlbGVjdGFibGUgcHJvdG9jb2wgKi8KLSAgICB3aGlsZSAocHJvdG9jb2xfbWFza3NbbWFza10gJiYgIShwcm90b2NvbHMgJiBwcm90b2NvbF9tYXNrc1ttYXNrXSkpCi0gICAgICBtYXNrKys7Ci0gICAgaWYgKCFwcm90b2NvbF9tYXNrc1ttYXNrXSkKLSAgICAgIGdvdG8gbm9fcHJvdG9jb2xzOwotCi0gIHJldHJ5OgotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInByb3RvY29scyA9IDB4JXgsIHByb3RvY29sIG1hc2sgPSAweCV4IiwgcHJvdG9jb2xzLAotICAgICAgICBwcm90b2NvbF9tYXNrc1ttYXNrXSk7Ci0gICAgLyogY3JlYXRlIGEgc3RyaW5nIHdpdGggZmlyc3QgdHJhbnNwb3J0IGluIGxpbmUgKi8KLSAgICB0cmFuc3BvcnRzID0gTlVMTDsKLSAgICByZXMgPSBnc3RfcnRzcHNyY19jcmVhdGVfdHJhbnNwb3J0c19zdHJpbmcgKHNyYywKLSAgICAgICAgcHJvdG9jb2xzICYgcHJvdG9jb2xfbWFza3NbbWFza10sIHN0cmVhbS0+cHJvZmlsZSwgJnRyYW5zcG9ydHMpOwotICAgIGlmIChyZXMgPCAwIHx8IHRyYW5zcG9ydHMgPT0gTlVMTCkKLSAgICAgIGdvdG8gc2V0dXBfdHJhbnNwb3J0X2ZhaWxlZDsKLQotICAgIGlmIChzdHJsZW4gKHRyYW5zcG9ydHMpID09IDApIHsKLSAgICAgIGdfZnJlZSAodHJhbnNwb3J0cyk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJubyB0cmFuc3BvcnRzIGZvdW5kIik7Ci0gICAgICBtYXNrKys7Ci0gICAgICBnb3RvIG5leHRfcHJvdG9jb2w7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmVwbGFjZSBwb3J0cyBpbiAlcyIsIEdTVF9TVFJfTlVMTCAodHJhbnNwb3J0cykpOwotCi0gICAgLyogcmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCByZWFsIHZhbHVlcywgdGhpcyBmdW5jdGlvbiB3aWxsIG9wdGlvbmFsbHkKLSAgICAgKiBhbGxvY2F0ZSBVRFAgcG9ydHMgYW5kIG90aGVyIGluZm8gbmVlZGVkIHRvIGV4ZWN1dGUgdGhlIHNldHVwIHJlcXVlc3QgKi8KLSAgICByZXMgPSBnc3RfcnRzcHNyY19wcmVwYXJlX3RyYW5zcG9ydHMgKHN0cmVhbSwgJnRyYW5zcG9ydHMsCi0gICAgICAgIHJldHJ5ID4gMCA/IHJ0cHBvcnQgOiAwLCByZXRyeSA+IDAgPyBydGNwcG9ydCA6IDApOwotICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICBnX2ZyZWUgKHRyYW5zcG9ydHMpOwotICAgICAgZ290byBzZXR1cF90cmFuc3BvcnRfZmFpbGVkOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInRyYW5zcG9ydCBpcyBub3cgJXMiLCBHU1RfU1RSX05VTEwgKHRyYW5zcG9ydHMpKTsKLQotICAgIC8qIGNyZWF0ZSBTRVRVUCByZXF1ZXN0ICovCi0gICAgcmVzID0KLSAgICAgICAgZ3N0X3J0c3BzcmNfaW5pdF9yZXF1ZXN0IChzcmMsICZyZXF1ZXN0LCBHU1RfUlRTUF9TRVRVUCwKLSAgICAgICAgc3RyZWFtLT5jb25uaW5mby5sb2NhdGlvbik7Ci0gICAgaWYgKHJlcyA8IDApIHsKLSAgICAgIGdfZnJlZSAodHJhbnNwb3J0cyk7Ci0gICAgICBnb3RvIGNyZWF0ZV9yZXF1ZXN0X2ZhaWxlZDsKLSAgICB9Ci0KLSAgICAvKiBzZWxlY3QgdHJhbnNwb3J0ICovCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV90YWtlX2hlYWRlciAoJnJlcXVlc3QsIEdTVF9SVFNQX0hEUl9UUkFOU1BPUlQsIHRyYW5zcG9ydHMpOwotCi0gICAgLyogc2V0IHVwIGtleXMgKi8KLSAgICBpZiAoc3RyZWFtLT5wcm9maWxlID09IEdTVF9SVFNQX1BST0ZJTEVfU0FWUCB8fAotICAgICAgICBzdHJlYW0tPnByb2ZpbGUgPT0gR1NUX1JUU1BfUFJPRklMRV9TQVZQRikgewotICAgICAgaHZhbCA9IGdzdF9ydHNwc3JjX3N0cmVhbV9tYWtlX2tleW1nbXQgKHNyYywgc3RyZWFtKTsKLSAgICAgIGdzdF9ydHNwX21lc3NhZ2VfdGFrZV9oZWFkZXIgKCZyZXF1ZXN0LCBHU1RfUlRTUF9IRFJfS0VZTUdNVCwgaHZhbCk7Ci0gICAgfQotCi0gICAgLyogaWYgdGhlIHVzZXIgd2FudHMgYSBub24gZGVmYXVsdCBSVFAgcGFja2V0IHNpemUgd2UgYWRkIHRoZSBibG9ja3NpemUKLSAgICAgKiBwYXJhbWV0ZXIgKi8KLSAgICBpZiAoc3JjLT5ydHBfYmxvY2tzaXplID4gMCkgewotICAgICAgaHZhbCA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgc3JjLT5ydHBfYmxvY2tzaXplKTsKLSAgICAgIGdzdF9ydHNwX21lc3NhZ2VfdGFrZV9oZWFkZXIgKCZyZXF1ZXN0LCBHU1RfUlRTUF9IRFJfQkxPQ0tTSVpFLCBodmFsKTsKLSAgICB9Ci0KLSAgICBpZiAoYXN5bmMpCi0gICAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBDT05USU5VRSwgInJlcXVlc3QiLCAoIlNFVFVQIHN0cmVhbSAlZCIsCi0gICAgICAgICAgICAgIHN0cmVhbS0+aWQpKTsKLQotICAgIC8qIGhhbmRsZSB0aGUgY29kZSBvdXJzZWx2ZXMgKi8KLSAgICByZXMgPSBnc3RfcnRzcHNyY19zZW5kIChzcmMsIGNvbm4sICZyZXF1ZXN0LCAmcmVzcG9uc2UsICZjb2RlKTsKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICAgIHN3aXRjaCAoY29kZSkgewotICAgICAgY2FzZSBHU1RfUlRTUF9TVFNfT0s6Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUlRTUF9TVFNfVU5TVVBQT1JURURfVFJBTlNQT1JUOgotICAgICAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVxdWVzdCk7Ci0gICAgICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXNwb25zZSk7Ci0gICAgICAgIC8qIGNsZWFudXAgb2YgbGVmdG92ZXIgdHJhbnNwb3J0ICovCi0gICAgICAgIGdzdF9ydHNwc3JjX3N0cmVhbV9mcmVlX3VkcCAoc3RyZWFtKTsKLSAgICAgICAgLyogTVMgV01TZXJ2ZXIgUlRTUCBNVVNUIHVzZSBzYW1lIFVEUCBwYWlyIGluIGFsbCBTRVRVUCByZXF1ZXN0czsKLSAgICAgICAgICogd2UgbWlnaHQgYmUgaW4gdGhpcyBjYXNlICovCi0gICAgICAgIGlmIChzdHJlYW0tPmNvbnRhaW5lciAmJiBydHBwb3J0ICYmIHJ0Y3Bwb3J0ICYmICFyZXRyeSkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInJldHJ5aW5nIHdpdGggb3JpZ2luYWwgcG9ydCBwYWlyICV1LSV1IiwKLSAgICAgICAgICAgICAgcnRwcG9ydCwgcnRjcHBvcnQpOwotICAgICAgICAgIHJldHJ5Kys7Ci0gICAgICAgICAgZ290byByZXRyeTsKLSAgICAgICAgfQotICAgICAgICAvKiB0aGlzIHRyYW5zcG9ydCBkaWQgbm90IGdvIGRvd24gd2VsbCwgYnV0IHdlIG1heSBoYXZlIG90aGVycyB0byB0cnkKLSAgICAgICAgICogdGhhdCB3ZSBkaWQgbm90IHNlbmQgeWV0LCB0cnkgdGhvc2UgYW5kIG9ubHkgZ2l2ZSB1cCB0aGVuCi0gICAgICAgICAqIGJ1dCBub3Qgd2l0aG91dCBjaGVja2luZyBmb3IgbG9zdCBjYXVzZS9leHRlbnNpb24gc28gd2UgY2FuCi0gICAgICAgICAqIHBvc3QgYSBuaWNlci9tb3JlIHVzZWZ1bCBlcnJvciBtZXNzYWdlIGxhdGVyICovCi0gICAgICAgIGlmICghdW5zdXBwb3J0ZWRfcmVhbCkKLSAgICAgICAgICB1bnN1cHBvcnRlZF9yZWFsID0gc3RyZWFtLT5pc19yZWFsOwotICAgICAgICAvKiBzZWxlY3QgbmV4dCBhdmFpbGFibGUgcHJvdG9jb2wsIGdpdmUgdXAgb24gdGhpcyBzdHJlYW0gaWYgbm9uZSAqLwotICAgICAgICBtYXNrKys7Ci0gICAgICAgIHdoaWxlIChwcm90b2NvbF9tYXNrc1ttYXNrXSAmJiAhKHByb3RvY29scyAmIHByb3RvY29sX21hc2tzW21hc2tdKSkKLSAgICAgICAgICBtYXNrKys7Ci0gICAgICAgIGlmICghcHJvdG9jb2xfbWFza3NbbWFza10gfHwgdW5zdXBwb3J0ZWRfcmVhbCkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGdvdG8gcmV0cnk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBjbGVhbnVwIG9mIGxlZnRvdmVyIHRyYW5zcG9ydCBhbmQgbW92ZSB0byB0aGUgbmV4dCBzdHJlYW0gKi8KLSAgICAgICAgZ3N0X3J0c3BzcmNfc3RyZWFtX2ZyZWVfdWRwIChzdHJlYW0pOwotICAgICAgICBnb3RvIHJlc3BvbnNlX2Vycm9yOwotICAgIH0KLQotICAgIC8qIHBhcnNlIHJlc3BvbnNlIHRyYW5zcG9ydCAqLwotICAgIHsKLSAgICAgIGdjaGFyICpyZXNwdHJhbnMgPSBOVUxMOwotICAgICAgR3N0UlRTUFRyYW5zcG9ydCB0cmFuc3BvcnQgPSB7IDAgfTsKLQotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV9nZXRfaGVhZGVyICgmcmVzcG9uc2UsIEdTVF9SVFNQX0hEUl9UUkFOU1BPUlQsCi0gICAgICAgICAgJnJlc3B0cmFucywgMCk7Ci0gICAgICBpZiAoIXJlc3B0cmFucykgewotICAgICAgICBnc3RfcnRzcHNyY19zdHJlYW1fZnJlZV91ZHAgKHN0cmVhbSk7Ci0gICAgICAgIGdvdG8gbm9fdHJhbnNwb3J0OwotICAgICAgfQotCi0gICAgICAvKiBwYXJzZSB0cmFuc3BvcnQsIGdvIHRvIG5leHQgc3RyZWFtIG9uIHBhcnNlIGVycm9yICovCi0gICAgICBpZiAoZ3N0X3J0c3BfdHJhbnNwb3J0X3BhcnNlIChyZXNwdHJhbnMsICZ0cmFuc3BvcnQpICE9IEdTVF9SVFNQX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiZmFpbGVkIHRvIHBhcnNlIHRyYW5zcG9ydCAlcyIsIHJlc3B0cmFucyk7Ci0gICAgICAgIGdvdG8gbmV4dDsKLSAgICAgIH0KLQotICAgICAgLyogdXBkYXRlIGFsbG93ZWQgdHJhbnNwb3J0cyBmb3Igb3RoZXIgc3RyZWFtcy4gb25jZSB0aGUgdHJhbnNwb3J0IG9mCi0gICAgICAgKiBvbmUgc3RyZWFtIGhhcyBiZWVuIGRldGVybWluZWQsIHdlIG1ha2Ugc3VyZSB0aGF0IGFsbCBvdGhlciBzdHJlYW1zCi0gICAgICAgKiBhcmUgY29uZmlndXJlZCBpbiB0aGUgc2FtZSB3YXkgKi8KLSAgICAgIHN3aXRjaCAodHJhbnNwb3J0Lmxvd2VyX3RyYW5zcG9ydCkgewotICAgICAgICBjYXNlIEdTVF9SVFNQX0xPV0VSX1RSQU5TX1RDUDoKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdHJlYW0gJXAgYXMgVENQIGludGVybGVhdmVkIiwgc3RyZWFtKTsKLSAgICAgICAgICBwcm90b2NvbHMgPSBHU1RfUlRTUF9MT1dFUl9UUkFOU19UQ1A7Ci0gICAgICAgICAgc3JjLT5pbnRlcmxlYXZlZCA9IFRSVUU7Ci0gICAgICAgICAgLyogdXBkYXRlIGZyZWUgY2hhbm5lbHMgKi8KLSAgICAgICAgICBzcmMtPmZyZWVfY2hhbm5lbCA9Ci0gICAgICAgICAgICAgIE1BWCAodHJhbnNwb3J0LmludGVybGVhdmVkLm1pbiwgc3JjLT5mcmVlX2NoYW5uZWwpOwotICAgICAgICAgIHNyYy0+ZnJlZV9jaGFubmVsID0KLSAgICAgICAgICAgICAgTUFYICh0cmFuc3BvcnQuaW50ZXJsZWF2ZWQubWF4LCBzcmMtPmZyZWVfY2hhbm5lbCk7Ci0gICAgICAgICAgc3JjLT5mcmVlX2NoYW5uZWwrKzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfUlRTUF9MT1dFUl9UUkFOU19VRFBfTUNBU1Q6Ci0gICAgICAgICAgLyogb25seSBhbGxvdyBtdWx0aWNhc3QgZm9yIG90aGVyIHN0cmVhbXMgKi8KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJzdHJlYW0gJXAgYXMgVURQIG11bHRpY2FzdCIsIHN0cmVhbSk7Ci0gICAgICAgICAgcHJvdG9jb2xzID0gR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQX01DQVNUOwotICAgICAgICAgIC8qIGlmIHRoZSBzZXJ2ZXIgc2VsZWN0ZWQgb3VyIHBvcnRzLCBpbmNyZW1lbnQgb3VyIGNvdW50ZXJzIHNvIHRoYXQKLSAgICAgICAgICAgKiB3ZSBzZWxlY3QgYSBuZXcgcG9ydCBsYXRlciAqLwotICAgICAgICAgIGlmIChzcmMtPm5leHRfcG9ydF9udW0gPT0gdHJhbnNwb3J0LnBvcnQubWluICYmCi0gICAgICAgICAgICAgIHNyYy0+bmV4dF9wb3J0X251bSArIDEgPT0gdHJhbnNwb3J0LnBvcnQubWF4KSB7Ci0gICAgICAgICAgICBzcmMtPm5leHRfcG9ydF9udW0gKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQOgotICAgICAgICAgIC8qIG9ubHkgYWxsb3cgdW5pY2FzdCBmb3Igb3RoZXIgc3RyZWFtcyAqLwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN0cmVhbSAlcCBhcyBVRFAgdW5pY2FzdCIsIHN0cmVhbSk7Ci0gICAgICAgICAgcHJvdG9jb2xzID0gR1NUX1JUU1BfTE9XRVJfVFJBTlNfVURQOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN0cmVhbSAlcCB1bmtub3duIHRyYW5zcG9ydCAlZCIsIHN0cmVhbSwKLSAgICAgICAgICAgICAgdHJhbnNwb3J0Lmxvd2VyX3RyYW5zcG9ydCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc3JjLT5pbnRlcmxlYXZlZCB8fCAhcmV0cnkpIHsKLSAgICAgICAgLyogbm93IGNvbmZpZ3VyZSB0aGUgc3RyZWFtIHdpdGggdGhlIHNlbGVjdGVkIHRyYW5zcG9ydCAqLwotICAgICAgICBpZiAoIWdzdF9ydHNwc3JjX3N0cmVhbV9jb25maWd1cmVfdHJhbnNwb3J0IChzdHJlYW0sICZ0cmFuc3BvcnQpKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLAotICAgICAgICAgICAgICAiY291bGQgbm90IGNvbmZpZ3VyZSBzdHJlYW0gJXAgdHJhbnNwb3J0LCBza2lwcGluZyBzdHJlYW0iLAotICAgICAgICAgICAgICBzdHJlYW0pOwotICAgICAgICAgIGdvdG8gbmV4dDsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0tPnVkcHNyY1swXSAmJiBzdHJlYW0tPnVkcHNyY1sxXSkgewotICAgICAgICAgIC8qIHJldGFpbiB0aGUgZmlyc3QgYWxsb2NhdGVkIFVEUCBwb3J0IHBhaXIgKi8KLSAgICAgICAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChzdHJlYW0tPnVkcHNyY1swXSksICJwb3J0IiwgJnJ0cHBvcnQsIE5VTEwpOwotICAgICAgICAgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHN0cmVhbS0+dWRwc3JjWzFdKSwgInBvcnQiLCAmcnRjcHBvcnQsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiB3ZSBuZWVkIHRvIGFjdGl2YXRlIGF0IGxlYXN0IG9uZSBzdHJlYW1zIHdoZW4gd2UgZGV0ZWN0IGFjdGl2aXR5ICovCi0gICAgICBzcmMtPm5lZWRfYWN0aXZhdGUgPSBUUlVFOwotCi0gICAgICAvKiBzdHJlYW0gaXMgc2V0dXAgbm93ICovCi0gICAgICBzdHJlYW0tPnNldHVwID0gVFJVRTsKLSAgICAgIHsKLSAgICAgICAgR0xpc3QgKnNraXAgPSB3YWxrOwotCi0gICAgICAgIHdoaWxlIChUUlVFKSB7Ci0gICAgICAgICAgR3N0UlRTUFN0cmVhbSAqc3NraXA7Ci0KLSAgICAgICAgICBza2lwID0gZ19saXN0X25leHQgKHNraXApOwotICAgICAgICAgIGlmIChza2lwID09IE5VTEwpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIHNza2lwID0gKEdzdFJUU1BTdHJlYW0gKikgc2tpcC0+ZGF0YTsKLQotICAgICAgICAgIC8qIHNraXAgYWxsIHN0cmVhbXMgd2l0aCB0aGUgc2FtZSBjb250cm9sIHVybCAqLwotICAgICAgICAgIGlmIChnX3N0cl9lcXVhbCAoc3RyZWFtLT5jb25uaW5mby5sb2NhdGlvbiwgc3NraXAtPmNvbm5pbmZvLmxvY2F0aW9uKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZm91bmQgc3RyZWFtICVwIHdpdGggc2FtZSBjb250cm9sICVzIiwKLSAgICAgICAgICAgICAgICBzc2tpcCwgc3NraXAtPmNvbm5pbmZvLmxvY2F0aW9uKTsKLSAgICAgICAgICAgIHNza2lwLT5za2lwcGVkID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICBuZXh0OgotICAgICAgLyogY2xlYW4gdXAgb3VyIHRyYW5zcG9ydCBzdHJ1Y3QgKi8KLSAgICAgIGdzdF9ydHNwX3RyYW5zcG9ydF9pbml0ICgmdHJhbnNwb3J0KTsKLSAgICAgIC8qIGNsZWFuIHVwIHVzZWQgUlRTUCBtZXNzYWdlcyAqLwotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlcXVlc3QpOwotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLSAgICB9Ci0gIH0KLQotICAvKiBzdG9yZSB0aGUgdHJhbnNwb3J0IHByb3RvY29sIHRoYXQgd2FzIGNvbmZpZ3VyZWQgKi8KLSAgc3JjLT5jdXJfcHJvdG9jb2xzID0gcHJvdG9jb2xzOwotCi0gIGdzdF9ydHNwX2V4dF9saXN0X3N0cmVhbV9zZWxlY3QgKHNyYy0+ZXh0ZW5zaW9ucywgdXJsKTsKLQotICAvKiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGFjdGl2YXRlLCBlcnJvciBvdXQgKi8KLSAgaWYgKCFzcmMtPm5lZWRfYWN0aXZhdGUpCi0gICAgZ290byBub3RoaW5nX3RvX2FjdGl2YXRlOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub19wcm90b2NvbHM6Ci0gIHsKLSAgICAvKiBubyB0cmFuc3BvcnQgcG9zc2libGUsIHBvc3QgYW4gZXJyb3IgYW5kIHN0b3AgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciwgbm8gcHJvdG9jb2xzIGxlZnQiKSk7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX0VSUk9SOwotICB9Ci1ub19zdHJlYW1zOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiU0RQIGNvbnRhaW5zIG5vIHN0cmVhbXMiKSk7Ci0gICAgcmV0dXJuIEdTVF9SVFNQX0VSUk9SOwotICB9Ci1jcmVhdGVfcmVxdWVzdF9mYWlsZWQ6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgTElCUkFSWSwgSU5JVCwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBjcmVhdGUgcmVxdWVzdC4gKCVzKSIsIHN0cikpOwotICAgIGdfZnJlZSAoc3RyKTsKLSAgICBnb3RvIGNsZWFudXBfZXJyb3I7Ci0gIH0KLXNldHVwX3RyYW5zcG9ydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3Qgc2V0dXAgdHJhbnNwb3J0LiIpKTsKLSAgICByZXMgPSBHU1RfUlRTUF9FUlJPUjsKLSAgICBnb3RvIGNsZWFudXBfZXJyb3I7Ci0gIH0KLXJlc3BvbnNlX2Vycm9yOgotICB7Ci0gICAgY29uc3QgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0YXR1c19hc190ZXh0IChjb2RlKTsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAoIkVycm9yICglZCk6ICVzIiwgY29kZSwgR1NUX1NUUl9OVUxMIChzdHIpKSk7Ci0gICAgcmVzID0gR1NUX1JUU1BfRVJST1I7Ci0gICAgZ290byBjbGVhbnVwX2Vycm9yOwotICB9Ci1zZW5kX2Vycm9yOgotICB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0cnJlc3VsdCAocmVzKTsKLQotICAgIGlmIChyZXMgIT0gR1NUX1JUU1BfRUlOVFIpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAgICgiQ291bGQgbm90IHNlbmQgbWVzc2FnZS4gKCVzKSIsIHN0cikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgInNlbmQgaW50ZXJydXB0ZWQiKTsKLSAgICB9Ci0gICAgZ19mcmVlIChzdHIpOwotICAgIGdvdG8gY2xlYW51cF9lcnJvcjsKLSAgfQotbm9fdHJhbnNwb3J0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiU2VydmVyIGRpZCBub3Qgc2VsZWN0IHRyYW5zcG9ydC4iKSk7Ci0gICAgcmVzID0gR1NUX1JUU1BfRVJST1I7Ci0gICAgZ290byBjbGVhbnVwX2Vycm9yOwotICB9Ci1ub3RoaW5nX3RvX2FjdGl2YXRlOgotICB7Ci0gICAgLyogbm9uZSBvZiB0aGUgYXZhaWxhYmxlIGVycm9yIGNvZGVzIGlzIHJlYWxseSByaWdodCAuLiAqLwotICAgIGlmICh1bnN1cHBvcnRlZF9yZWFsKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBTVFJFQU0sIENPREVDX05PVF9GT1VORCwKLSAgICAgICAgICAoXygiTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSAiCi0gICAgICAgICAgICAgICAgICAiR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIpKSwKLSAgICAgICAgICAoTlVMTCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBTVFJFQU0sIENPREVDX05PVF9GT1VORCwKLSAgICAgICAgICAoXygiTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93ICIKLSAgICAgICAgICAgICAgICAgICJtb3JlIHRyYW5zcG9ydCBwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nICIKLSAgICAgICAgICAgICAgICAgICJ0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uIHBsdWdpbi4iKSksIChOVUxMKSk7Ci0gICAgfQotICAgIHJldHVybiBHU1RfUlRTUF9FUlJPUjsKLSAgfQotY2xlYW51cF9lcnJvcjoKLSAgewotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXF1ZXN0KTsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVzcG9uc2UpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19wYXJzZV9yYW5nZSAoR3N0UlRTUFNyYyAqIHNyYywgY29uc3QgZ2NoYXIgKiByYW5nZSwKLSAgICBHc3RTZWdtZW50ICogc2VnbWVudCkKLXsKLSAgZ2ludDY0IHNlY29uZHM7Ci0gIEdzdFJUU1BUaW1lUmFuZ2UgKnRoZXJhbmdlOwotCi0gIGlmIChzcmMtPnJhbmdlKQotICAgIGdzdF9ydHNwX3JhbmdlX2ZyZWUgKHNyYy0+cmFuZ2UpOwotCi0gIGlmIChnc3RfcnRzcF9yYW5nZV9wYXJzZSAocmFuZ2UsICZ0aGVyYW5nZSkgPT0gR1NUX1JUU1BfT0spIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwYXJzZWQgcmFuZ2UgJXMiLCByYW5nZSk7Ci0gICAgc3JjLT5yYW5nZSA9IHRoZXJhbmdlOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBwYXJzZSByYW5nZSAlcyIsIHJhbmdlKTsKLSAgICBzcmMtPnJhbmdlID0gTlVMTDsKLSAgICBnc3Rfc2VnbWVudF9pbml0IChzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInJhbmdlOiB0eXBlICVkLCBtaW4gJWYgLSB0eXBlICVkLCAgbWF4ICVmICIsCi0gICAgICB0aGVyYW5nZS0+bWluLnR5cGUsIHRoZXJhbmdlLT5taW4uc2Vjb25kcywgdGhlcmFuZ2UtPm1heC50eXBlLAotICAgICAgdGhlcmFuZ2UtPm1heC5zZWNvbmRzKTsKLQotICBpZiAodGhlcmFuZ2UtPm1pbi50eXBlID09IEdTVF9SVFNQX1RJTUVfTk9XKQotICAgIHNlY29uZHMgPSAwOwotICBlbHNlIGlmICh0aGVyYW5nZS0+bWluLnR5cGUgPT0gR1NUX1JUU1BfVElNRV9FTkQpCi0gICAgc2Vjb25kcyA9IDA7Ci0gIGVsc2UKLSAgICBzZWNvbmRzID0gdGhlcmFuZ2UtPm1pbi5zZWNvbmRzICogR1NUX1NFQ09ORDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJyYW5nZTogbWluICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHNlY29uZHMpKTsKLQotICAvKiB3ZSBuZWVkIHRvIHN0YXJ0IHBsYXliYWNrIHdpdGhvdXQgY2xpcHBpbmcgZnJvbSB0aGUgcG9zaXRpb24gcmVwb3J0ZWQgYnkKLSAgICogdGhlIHNlcnZlciAqLwotICBzZWdtZW50LT5zdGFydCA9IHNlY29uZHM7Ci0gIHNlZ21lbnQtPnBvc2l0aW9uID0gc2Vjb25kczsKLQotICBpZiAodGhlcmFuZ2UtPm1heC50eXBlID09IEdTVF9SVFNQX1RJTUVfTk9XKQotICAgIHNlY29uZHMgPSAtMTsKLSAgZWxzZSBpZiAodGhlcmFuZ2UtPm1heC50eXBlID09IEdTVF9SVFNQX1RJTUVfRU5EKQotICAgIHNlY29uZHMgPSAtMTsKLSAgZWxzZQotICAgIHNlY29uZHMgPSB0aGVyYW5nZS0+bWF4LnNlY29uZHMgKiBHU1RfU0VDT05EOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInJhbmdlOiBtYXggJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vjb25kcykpOwotCi0gIC8qIGxpdmUgKFdNUykgc2VydmVyIG1pZ2h0IHNlbmQgb3ZlcmZsb3dlZCBsYXJnZSBtYXggYXMgaXRzIGlkZWEgb2YgaW5maW5pdHksCi0gICAqIGNvbXBlbnNhdGUgdG8gcHJldmVudCBwcm9ibGVtcyBsYXRlciBvbiAqLwotICBpZiAoc2Vjb25kcyAhPSAtMSAmJiBzZWNvbmRzIDwgMCkgewotICAgIHNlY29uZHMgPSAtMTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJpbnNhbmUgcmFuZ2UsIHNldCB0byBOT05FIik7Ci0gIH0KLQotICAvKiBsaXZlIChXTVMpIG1pZ2h0IHNlbmQgbWluID09IG1heCwgd2hpY2ggaXMgbm90IHdvcnRoIHJlY29yZGluZyAqLwotICBpZiAoc2VnbWVudC0+ZHVyYXRpb24gPT0gLTEgJiYgc2Vjb25kcyA9PSBzZWdtZW50LT5zdGFydCkKLSAgICBzZWNvbmRzID0gLTE7Ci0KLSAgLyogZG9uJ3QgY2hhbmdlIGR1cmF0aW9uIHdpdGggdW5rbm93biB2YWx1ZSwgd2UgbWlnaHQgaGF2ZSBhIHZhbGlkIHZhbHVlCi0gICAqIHRoZXJlIHRoYXQgd2Ugd2FudCB0byBrZWVwLiAqLwotICBpZiAoc2Vjb25kcyAhPSAtMSkKLSAgICBzZWdtZW50LT5kdXJhdGlvbiA9IHNlY29uZHM7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIFBhcnNlIGNsb2NrIHByb2ZpdmVkIGJ5IHRoZSBzZXJ2ZXIgd2l0aCBmb2xsb3dpbmcgc3ludGF4OgotICoKLSAqICJHc3ROZXRUaW1lUHJvdmlkZXIgPHdyYXBwZWQtY2xvY2s+IDxzZXJ2ZXItSVA6cG9ydD4gPGNsb2NrLXRpbWU+IgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3BhcnNlX2dzdF9jbG9jayAoR3N0UlRTUFNyYyAqIHNyYywgY29uc3QgZ2NoYXIgKiBnc3RjbG9jaykKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKGdzdGNsb2NrLCAiR3N0TmV0VGltZVByb3ZpZGVyICIpKSB7Ci0gICAgZ2NoYXIgKipmaWVsZHMgPSBOVUxMLCAqKnBhcnRzID0gTlVMTDsKLSAgICBnY2hhciAqcmVtb3RlX2lwLCAqc3RyOwotICAgIGdpbnQgcG9ydDsKLSAgICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lOwotICAgIEdzdENsb2NrICpuZXRjbG9jazsKLQotICAgIGZpZWxkcyA9IGdfc3Ryc3BsaXQgKGdzdGNsb2NrLCAiICIsIDApOwotCi0gICAgLyogd3JhcHBlZCBjbG9jaywgbm90IHZlcnkgaW50ZXJlc3RpbmcgZm9yIG5vdyAqLwotICAgIGlmIChmaWVsZHNbMV0gPT0gTlVMTCkKLSAgICAgIGdvdG8gY2xlYW51cDsKLQotICAgIC8qIHJlbW90ZSBJUCBhZGRyZXNzIGFuZCBwb3J0ICovCi0gICAgaWYgKChzdHIgPSBmaWVsZHNbMl0pID09IE5VTEwpCi0gICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgICBwYXJ0cyA9IGdfc3Ryc3BsaXQgKHN0ciwgIjoiLCAwKTsKLQotICAgIGlmICgocmVtb3RlX2lwID0gcGFydHNbMF0pID09IE5VTEwpCi0gICAgICBnb3RvIGNsZWFudXA7Ci0KLSAgICBpZiAoKHN0ciA9IHBhcnRzWzFdKSA9PSBOVUxMKQotICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgcG9ydCA9IGF0b2kgKHN0cik7Ci0gICAgaWYgKHBvcnQgPT0gMCkKLSAgICAgIGdvdG8gY2xlYW51cDsKLQotICAgIC8qIGJhc2UtdGltZSAqLwotICAgIGlmICgoc3RyID0gZmllbGRzWzNdKSA9PSBOVUxMKQotICAgICAgZ290byBjbGVhbnVwOwotCi0gICAgYmFzZV90aW1lID0gZ19hc2NpaV9zdHJ0b3VsbCAoc3RyLCBOVUxMLCAxMCk7Ci0KLSAgICBuZXRjbG9jayA9Ci0gICAgICAgIGdzdF9uZXRfY2xpZW50X2Nsb2NrX25ldyAoKGdjaGFyICopICJHc3RSVFNQQ2xvY2siLCByZW1vdGVfaXAsIHBvcnQsCi0gICAgICAgIGJhc2VfdGltZSk7Ci0KLSAgICBpZiAoc3JjLT5wcm92aWRlZF9jbG9jaykKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyYy0+cHJvdmlkZWRfY2xvY2spOwotICAgIHNyYy0+cHJvdmlkZWRfY2xvY2sgPSBuZXRjbG9jazsKLQotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAoc3JjKSwKLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2Nsb2NrX3Byb3ZpZGUgKEdTVF9PQkpFQ1RfQ0FTVCAoc3JjKSwKLSAgICAgICAgICAgIHNyYy0+cHJvdmlkZWRfY2xvY2ssIFRSVUUpKTsKLQotICAgIHJlcyA9IFRSVUU7Ci0gIGNsZWFudXA6Ci0gICAgZ19zdHJmcmVldiAoZmllbGRzKTsKLSAgICBnX3N0cmZyZWV2IChwYXJ0cyk7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgUlRTUCBzdGF0ZSBsb2NrICovCi1zdGF0aWMgR3N0UlRTUFJlc3VsdAotZ3N0X3J0c3BzcmNfb3Blbl9mcm9tX3NkcCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0U0RQTWVzc2FnZSAqIHNkcCwKLSAgICBnYm9vbGVhbiBhc3luYykKLXsKLSAgR3N0UlRTUFJlc3VsdCByZXM7Ci0gIGdpbnQgaSwgbl9zdHJlYW1zOwotCi0gIC8qIHByZXBhcmUgZ2xvYmFsIHN0cmVhbSBjYXBzIHByb3BlcnRpZXMgKi8KLSAgaWYgKHNyYy0+cHJvcHMpCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfYWxsX2ZpZWxkcyAoc3JjLT5wcm9wcyk7Ci0gIGVsc2UKLSAgICBzcmMtPnByb3BzID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJSVFNQUHJvcGVydGllcyIpOwotCi0gIGlmIChzcmMtPmRlYnVnKQotICAgIGdzdF9zZHBfbWVzc2FnZV9kdW1wIChzZHApOwotCi0gIGdzdF9ydHNwX2V4dF9saXN0X3BhcnNlX3NkcCAoc3JjLT5leHRlbnNpb25zLCBzZHAsIHNyYy0+cHJvcHMpOwotCi0gIC8qIGxldCB0aGUgYXBwIGluc3BlY3QgYW5kIGNoYW5nZSB0aGUgU0RQICovCi0gIGdfc2lnbmFsX2VtaXQgKHNyYywgZ3N0X3J0c3BzcmNfc2lnbmFsc1tTSUdOQUxfT05fU0RQXSwgMCwgc2RwKTsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc3JjLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIC8qIHBhcnNlIHJhbmdlIGZvciBkdXJhdGlvbiByZXBvcnRpbmcuICovCi0gIHsKLSAgICBjb25zdCBnY2hhciAqcmFuZ2U7Ci0KLSAgICBmb3IgKGkgPSAwOzsgaSsrKSB7Ci0gICAgICByYW5nZSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfYXR0cmlidXRlX3ZhbF9uIChzZHAsICJyYW5nZSIsIGkpOwotICAgICAgaWYgKHJhbmdlID09IE5VTEwpCi0gICAgICAgIGJyZWFrOwotCi0gICAgICAvKiBrZWVwIHRyYWNrIG9mIHRoZSByYW5nZSBhbmQgY29uZmlndXJlIGl0IGluIHRoZSBzZWdtZW50ICovCi0gICAgICBpZiAoZ3N0X3J0c3BzcmNfcGFyc2VfcmFuZ2UgKHNyYywgcmFuZ2UsICZzcmMtPnNlZ21lbnQpKQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgLyogcGFyc2UgY2xvY2sgaW5mb3JtYXRpb24uIFRoaXMgaXMgR1N0cmVhbWVyIHNwZWNpZmljLCBhIHNlcnZlciBjYW4gdGVsbCB0aGUKLSAgICogY2xpZW50IHdoYXQgY2xvY2sgaXQgaXMgdXNpbmcgYW5kIHdyYXAgdGhhdCBpbiBhIG5ldHdvcmsgY2xvY2suIFRoZQotICAgKiBhZHZhbnRhZ2Ugb2YgdGhhdCBpcyB0aGF0IHdlIGNhbiBzbGF2ZSB0byBpdC4gKi8KLSAgewotICAgIGNvbnN0IGdjaGFyICpnc3RjbG9jazsKLQotICAgIGZvciAoaSA9IDA7OyBpKyspIHsKLSAgICAgIGdzdGNsb2NrID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9hdHRyaWJ1dGVfdmFsX24gKHNkcCwgIngtZ3N0LWNsb2NrIiwgaSk7Ci0gICAgICBpZiAoZ3N0Y2xvY2sgPT0gTlVMTCkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIHBhcnNlIHRoZSBjbG9jayBhbmQgZXhwb3NlIGl0IGluIHRoZSBwcm92aWRlX2Nsb2NrIG1ldGhvZCAqLwotICAgICAgaWYgKGdzdF9ydHNwc3JjX3BhcnNlX2dzdF9jbG9jayAoc3JjLCBnc3RjbG9jaykpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAvKiB0cnkgdG8gZmluZCBhIGdsb2JhbCBjb250cm9sIGF0dHJpYnV0ZS4gTm90ZSB0aGF0IGEgJyonIG1lYW5zIHRoYXQgd2Ugc2hvdWxkCi0gICAqIGRvIGFnZ3JlZ2F0ZSBjb250cm9sIHdpdGggdGhlIGN1cnJlbnQgdXJsIChzbyB3ZSBkb24ndCBkbyBhbnl0aGluZyBhbmQKLSAgICogbGVhdmUgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBhcyBpcykgKi8KLSAgewotICAgIGNvbnN0IGdjaGFyICpjb250cm9sOwotCi0gICAgZm9yIChpID0gMDs7IGkrKykgewotICAgICAgY29udHJvbCA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfYXR0cmlidXRlX3ZhbF9uIChzZHAsICJjb250cm9sIiwgaSk7Ci0gICAgICBpZiAoY29udHJvbCA9PSBOVUxMKQotICAgICAgICBicmVhazsKLQotICAgICAgLyogb25seSB0YWtlIGZ1bGx5IHF1YWxpZmllZCB1cmxzICovCi0gICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoY29udHJvbCwgInJ0c3A6Ly8iKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChjb250cm9sKSB7Ci0gICAgICBnX2ZyZWUgKHNyYy0+Y29ubmluZm8ubG9jYXRpb24pOwotICAgICAgc3JjLT5jb25uaW5mby5sb2NhdGlvbiA9IGdfc3RyZHVwIChjb250cm9sKTsKLSAgICAgIC8qIG1ha2UgYSBjb25uZWN0aW9uIGZvciB0aGlzLCBpZiB0aGVyZSB3YXMgYSBjb25uZWN0aW9uIGFscmVhZHksIG5vdGhpbmcKLSAgICAgICAqIGhhcHBlbnMuICovCi0gICAgICBpZiAoZ3N0X3J0c3BfY29ubmluZm9fY29ubmVjdCAoc3JjLCAmc3JjLT5jb25uaW5mbywgYXN5bmMpIDwgMCkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJjb3VsZCBub3QgY29ubmVjdCIpOwotICAgICAgfQotICAgIH0KLSAgICAvKiB3ZSBuZWVkIHRvIGtlZXAgdGhlIGNvbnRyb2wgdXJsIHNlcGFyYXRlIGZyb20gdGhlIGNvbm5lY3Rpb24gdXJsIGJlY2F1c2UKLSAgICAgKiB0aGUgcnVsZXMgZm9yIGNvbnN0cnVjdGluZyB0aGUgbWVkaWEgY29udHJvbCB1cmwgbmVlZCBpdCAqLwotICAgIGdfZnJlZSAoc3JjLT5jb250cm9sKTsKLSAgICBzcmMtPmNvbnRyb2wgPSBnX3N0cmR1cCAoY29udHJvbCk7Ci0gIH0KLQotICAvKiBjcmVhdGUgc3RyZWFtcyAqLwotICBuX3N0cmVhbXMgPSBnc3Rfc2RwX21lc3NhZ2VfbWVkaWFzX2xlbiAoc2RwKTsKLSAgZm9yIChpID0gMDsgaSA8IG5fc3RyZWFtczsgaSsrKSB7Ci0gICAgZ3N0X3J0c3BzcmNfY3JlYXRlX3N0cmVhbSAoc3JjLCBzZHAsIGksIG5fc3RyZWFtcyk7Ci0gIH0KLQotICBzcmMtPnN0YXRlID0gR1NUX1JUU1BfU1RBVEVfSU5JVDsKLQotICAvKiBzZXR1cCBzdHJlYW1zICovCi0gIGlmICgocmVzID0gZ3N0X3J0c3BzcmNfc2V0dXBfc3RyZWFtcyAoc3JjLCBhc3luYykpIDwgMCkKLSAgICBnb3RvIHNldHVwX2ZhaWxlZDsKLQotICAvKiByZXNldCBvdXIgc3RhdGUgKi8KLSAgc3JjLT5uZWVkX3JhbmdlID0gVFJVRTsKLSAgc3JjLT5za2lwID0gRkFMU0U7Ci0KLSAgc3JjLT5zdGF0ZSA9IEdTVF9SVFNQX1NUQVRFX1JFQURZOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1zZXR1cF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJzZXR1cCBmYWlsZWQiKTsKLSAgICBnc3RfcnRzcHNyY19jbGVhbnVwIChzcmMpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX3JldHJpZXZlX3NkcCAoR3N0UlRTUFNyYyAqIHNyYywgR3N0U0RQTWVzc2FnZSAqKiBzZHAsCi0gICAgZ2Jvb2xlYW4gYXN5bmMpCi17Ci0gIEdzdFJUU1BSZXN1bHQgcmVzOwotICBHc3RSVFNQTWVzc2FnZSByZXF1ZXN0ID0geyAwIH07Ci0gIEdzdFJUU1BNZXNzYWdlIHJlc3BvbnNlID0geyAwIH07Ci0gIGd1aW50OCAqZGF0YTsKLSAgZ3VpbnQgc2l6ZTsKLSAgZ2NoYXIgKnJlc3Bjb250ID0gTlVMTDsKLQotcmVzdGFydDoKLSAgc3JjLT5uZWVkX3JlZGlyZWN0ID0gRkFMU0U7Ci0KLSAgLyogY2FuJ3QgY29udGludWUgd2l0aG91dCBhIHZhbGlkIHVybCAqLwotICBpZiAoR19VTkxJS0VMWSAoc3JjLT5jb25uaW5mby51cmwgPT0gTlVMTCkpIHsKLSAgICByZXMgPSBHU1RfUlRTUF9FSU5WQUw7Ci0gICAgZ290byBub191cmw7Ci0gIH0KLSAgc3JjLT50cmllZF91cmxfYXV0aCA9IEZBTFNFOwotCi0gIGlmICgocmVzID0gZ3N0X3J0c3BfY29ubmluZm9fY29ubmVjdCAoc3JjLCAmc3JjLT5jb25uaW5mbywgYXN5bmMpKSA8IDApCi0gICAgZ290byBjb25uZWN0X2ZhaWxlZDsKLQotICAvKiBjcmVhdGUgT1BUSU9OUyAqLwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjcmVhdGUgb3B0aW9ucy4uLiIpOwotICByZXMgPQotICAgICAgZ3N0X3J0c3BzcmNfaW5pdF9yZXF1ZXN0IChzcmMsICZyZXF1ZXN0LCBHU1RfUlRTUF9PUFRJT05TLAotICAgICAgc3JjLT5jb25uaW5mby51cmxfc3RyKTsKLSAgaWYgKHJlcyA8IDApCi0gICAgZ290byBjcmVhdGVfcmVxdWVzdF9mYWlsZWQ7Ci0KLSAgLyogc2VuZCBPUFRJT05TICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNlbmQgb3B0aW9ucy4uLiIpOwotCi0gIGlmIChhc3luYykKLSAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBDT05USU5VRSwgIm9wZW4iLCAoIlJldHJpZXZpbmcgc2VydmVyIG9wdGlvbnMiKSk7Ci0KLSAgaWYgKChyZXMgPQotICAgICAgICAgIGdzdF9ydHNwc3JjX3NlbmQgKHNyYywgc3JjLT5jb25uaW5mby5jb25uZWN0aW9uLCAmcmVxdWVzdCwgJnJlc3BvbnNlLAotICAgICAgICAgICAgICBOVUxMKSkgPCAwKQotICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICAvKiBwYXJzZSBPUFRJT05TICovCi0gIGlmICghZ3N0X3J0c3BzcmNfcGFyc2VfbWV0aG9kcyAoc3JjLCAmcmVzcG9uc2UpKQotICAgIGdvdG8gbWV0aG9kc19lcnJvcjsKLQotICAvKiBjcmVhdGUgREVTQ1JJQkUgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY3JlYXRlIGRlc2NyaWJlLi4uIik7Ci0gIHJlcyA9Ci0gICAgICBnc3RfcnRzcHNyY19pbml0X3JlcXVlc3QgKHNyYywgJnJlcXVlc3QsIEdTVF9SVFNQX0RFU0NSSUJFLAotICAgICAgc3JjLT5jb25uaW5mby51cmxfc3RyKTsKLSAgaWYgKHJlcyA8IDApCi0gICAgZ290byBjcmVhdGVfcmVxdWVzdF9mYWlsZWQ7Ci0KLSAgLyogd2Ugb25seSBhY2NlcHQgU0RQIGZvciBub3cgKi8KLSAgZ3N0X3J0c3BfbWVzc2FnZV9hZGRfaGVhZGVyICgmcmVxdWVzdCwgR1NUX1JUU1BfSERSX0FDQ0VQVCwKLSAgICAgICJhcHBsaWNhdGlvbi9zZHAiKTsKLQotICAvKiBzZW5kIERFU0NSSUJFICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNlbmQgZGVzY3JpYmUuLi4iKTsKLQotICBpZiAoYXN5bmMpCi0gICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ09OVElOVUUsICJvcGVuIiwgKCJSZXRyaWV2aW5nIG1lZGlhIGluZm8iKSk7Ci0KLSAgaWYgKChyZXMgPQotICAgICAgICAgIGdzdF9ydHNwc3JjX3NlbmQgKHNyYywgc3JjLT5jb25uaW5mby5jb25uZWN0aW9uLCAmcmVxdWVzdCwgJnJlc3BvbnNlLAotICAgICAgICAgICAgICBOVUxMKSkgPCAwKQotICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICAvKiB3ZSBvbmx5IHBlcmZvcm0gcmVkaXJlY3QgZm9yIGRlc2NyaWJlIGFuZCBwbGF5LCBjdXJyZW50bHkgKi8KLSAgaWYgKHNyYy0+bmVlZF9yZWRpcmVjdCkgewotICAgIC8qIGNsb3NlIGNvbm5lY3Rpb24sIHdlIGRvbid0IGhhdmUgdG8gc2VuZCBhIFRFQVJET1dOIHlldCwgaWdub3JlIHRoZQotICAgICAqIHJlc3VsdC4gKi8KLSAgICBnc3RfcnRzcF9jb25uaW5mb19jbG9zZSAoc3JjLCAmc3JjLT5jb25uaW5mbywgVFJVRSk7Ci0KLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVxdWVzdCk7Ci0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLQotICAgIC8qIGFuZCBub3cgcmV0cnkgKi8KLSAgICBnb3RvIHJlc3RhcnQ7Ci0gIH0KLQotICAvKiBpdCBjb3VsZCBiZSB0aGF0IHRoZSBERVNDUklCRSBtZXRob2Qgd2FzIG5vdCBpbXBsZW1lbnRlZCAqLwotICBpZiAoIShzcmMtPm1ldGhvZHMgJiBHU1RfUlRTUF9ERVNDUklCRSkpCi0gICAgZ290byBub19kZXNjcmliZTsKLQotICAvKiBjaGVjayBpZiByZXBseSBpcyBTRFAgKi8KLSAgZ3N0X3J0c3BfbWVzc2FnZV9nZXRfaGVhZGVyICgmcmVzcG9uc2UsIEdTVF9SVFNQX0hEUl9DT05URU5UX1RZUEUsICZyZXNwY29udCwKLSAgICAgIDApOwotICAvKiBjb3VsZCBub3QgYmUgc2V0IGJ1dCBzaW5jZSB0aGUgcmVxdWVzdCByZXR1cm5lZCBPSywgd2UgYXNzdW1lIGl0Ci0gICAqIHdhcyBTRFAsIGVsc2UgY2hlY2sgaXQuICovCi0gIGlmIChyZXNwY29udCkgewotICAgIGNvbnN0IGdjaGFyICpwcm9wcyA9IHN0cmNociAocmVzcGNvbnQsICc7Jyk7Ci0KLSAgICBpZiAocHJvcHMpIHsKLSAgICAgIGdjaGFyICptaW1ldHlwZSA9IGdfc3RybmR1cCAocmVzcGNvbnQsIHByb3BzIC0gcmVzcGNvbnQpOwotCi0gICAgICBtaW1ldHlwZSA9IGdfc3Ryc3RyaXAgKG1pbWV0eXBlKTsKLSAgICAgIGlmIChnX2FzY2lpX3N0cmNhc2VjbXAgKG1pbWV0eXBlLCAiYXBwbGljYXRpb24vc2RwIikgIT0gMCkgewotICAgICAgICBnX2ZyZWUgKG1pbWV0eXBlKTsKLSAgICAgICAgZ290byB3cm9uZ19jb250ZW50X3R5cGU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFRPRE86IENoZWNrIGZvciBjaGFyc2V0IHByb3BlcnR5IGFuZCBkbyBjb252ZXJzaW9ucyBvZiBhbGwgbWVzc2FnZXMgaWYKLSAgICAgICAqIG5lZWRlZC4gU29tZSBzZXJ2ZXJzIGFjdHVhbGx5IHNlbmQgdGhhdCBwcm9wZXJ0eSAqLwotCi0gICAgICBnX2ZyZWUgKG1pbWV0eXBlKTsKLSAgICB9IGVsc2UgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAocmVzcGNvbnQsICJhcHBsaWNhdGlvbi9zZHAiKSAhPSAwKSB7Ci0gICAgICBnb3RvIHdyb25nX2NvbnRlbnRfdHlwZTsKLSAgICB9Ci0gIH0KLQotICAvKiBnZXQgbWVzc2FnZSBib2R5IGFuZCBwYXJzZSBhcyBTRFAgKi8KLSAgZ3N0X3J0c3BfbWVzc2FnZV9nZXRfYm9keSAoJnJlc3BvbnNlLCAmZGF0YSwgJnNpemUpOwotICBpZiAoZGF0YSA9PSBOVUxMIHx8IHNpemUgPT0gMCkKLSAgICBnb3RvIG5vX2Rlc2NyaWJlOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhcnNlIFNEUC4uLiIpOwotICBnc3Rfc2RwX21lc3NhZ2VfbmV3IChzZHApOwotICBnc3Rfc2RwX21lc3NhZ2VfcGFyc2VfYnVmZmVyIChkYXRhLCBzaXplLCAqc2RwKTsKLQotICAvKiBjbGVhbiB1cCBhbnkgbWVzc2FnZXMgKi8KLSAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlcXVlc3QpOwotICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVzcG9uc2UpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1ub191cmw6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgTk9UX0ZPVU5ELCAoTlVMTCksCi0gICAgICAgICgiTm8gdmFsaWQgUlRTUCBVUkwgd2FzIHByb3ZpZGVkIikpOwotICAgIGdvdG8gY2xlYW51cF9lcnJvcjsKLSAgfQotY29ubmVjdF9mYWlsZWQ6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotCi0gICAgaWYgKHJlcyAhPSBHU1RfUlRTUF9FSU5UUikgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRF9XUklURSwgKE5VTEwpLAotICAgICAgICAgICgiRmFpbGVkIHRvIGNvbm5lY3QuICglcykiLCBzdHIpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJjb25uZWN0IGludGVycnVwdGVkIik7Ci0gICAgfQotICAgIGdfZnJlZSAoc3RyKTsKLSAgICBnb3RvIGNsZWFudXBfZXJyb3I7Ci0gIH0KLWNyZWF0ZV9yZXF1ZXN0X2ZhaWxlZDoKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBMSUJSQVJZLCBJTklULCAoTlVMTCksCi0gICAgICAgICgiQ291bGQgbm90IGNyZWF0ZSByZXF1ZXN0LiAoJXMpIiwgc3RyKSk7Ci0gICAgZ19mcmVlIChzdHIpOwotICAgIGdvdG8gY2xlYW51cF9lcnJvcjsKLSAgfQotc2VuZF9lcnJvcjoKLSAgewotICAgIC8qIERvbid0IHBvc3QgYSBtZXNzYWdlIC0gdGhlIHJ0c3Bfc2VuZCBtZXRob2Qgd2lsbCBoYXZlCi0gICAgICogdGFrZW4gY2FyZSBvZiBpdCBiZWNhdXNlIHdlIHBhc3NlZCBOVUxMIGZvciB0aGUgcmVzcG9uc2UgY29kZSAqLwotICAgIGdvdG8gY2xlYW51cF9lcnJvcjsKLSAgfQotbWV0aG9kc19lcnJvcjoKLSAgewotICAgIC8qIGVycm9yIHdhcyBwb3N0ZWQgKi8KLSAgICByZXMgPSBHU1RfUlRTUF9FUlJPUjsKLSAgICBnb3RvIGNsZWFudXBfZXJyb3I7Ci0gIH0KLXdyb25nX2NvbnRlbnRfdHlwZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNEUCwgZ290ICVzLiIsIHJlc3Bjb250KSk7Ci0gICAgcmVzID0gR1NUX1JUU1BfRVJST1I7Ci0gICAgZ290byBjbGVhbnVwX2Vycm9yOwotICB9Ci1ub19kZXNjcmliZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIlNlcnZlciBjYW4gbm90IHByb3ZpZGUgYW4gU0RQLiIpKTsKLSAgICByZXMgPSBHU1RfUlRTUF9FUlJPUjsKLSAgICBnb3RvIGNsZWFudXBfZXJyb3I7Ci0gIH0KLWNsZWFudXBfZXJyb3I6Ci0gIHsKLSAgICBpZiAoc3JjLT5jb25uaW5mby5jb25uZWN0aW9uKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmcmVlIGNvbm5lY3Rpb24iKTsKLSAgICAgIGdzdF9ydHNwX2Nvbm5pbmZvX2Nsb3NlIChzcmMsICZzcmMtPmNvbm5pbmZvLCBUUlVFKTsKLSAgICB9Ci0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlcXVlc3QpOwotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXNwb25zZSk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi1zdGF0aWMgR3N0UlRTUFJlc3VsdAotZ3N0X3J0c3BzcmNfb3BlbiAoR3N0UlRTUFNyYyAqIHNyYywgZ2Jvb2xlYW4gYXN5bmMpCi17Ci0gIEdzdFJUU1BSZXN1bHQgcmV0OwotCi0gIHNyYy0+bWV0aG9kcyA9Ci0gICAgICBHU1RfUlRTUF9TRVRVUCB8IEdTVF9SVFNQX1BMQVkgfCBHU1RfUlRTUF9QQVVTRSB8IEdTVF9SVFNQX1RFQVJET1dOOwotCi0gIGlmIChzcmMtPnNkcCA9PSBOVUxMKSB7Ci0gICAgaWYgKChyZXQgPSBnc3RfcnRzcHNyY19yZXRyaWV2ZV9zZHAgKHNyYywgJnNyYy0+c2RwLCBhc3luYykpIDwgMCkKLSAgICAgIGdvdG8gbm9fc2RwOwotICB9Ci0KLSAgaWYgKChyZXQgPSBnc3RfcnRzcHNyY19vcGVuX2Zyb21fc2RwIChzcmMsIHNyYy0+c2RwLCBhc3luYykpIDwgMCkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi1kb25lOgotICBpZiAoYXN5bmMpCi0gICAgZ3N0X3J0c3BzcmNfbG9vcF9lbmRfY21kIChzcmMsIENNRF9PUEVOLCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub19zZHA6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgImNhbid0IGdldCBzZHAiKTsKLSAgICBzcmMtPm9wZW5fZXJyb3IgPSBUUlVFOwotICAgIGdvdG8gZG9uZTsKLSAgfQotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgImNhbid0IHNldHVwIHN0cmVhbWluZyBmcm9tIHNkcCIpOwotICAgIHNyYy0+b3Blbl9lcnJvciA9IFRSVUU7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RSVFNQUmVzdWx0Ci1nc3RfcnRzcHNyY19jbG9zZSAoR3N0UlRTUFNyYyAqIHNyYywgZ2Jvb2xlYW4gYXN5bmMsIGdib29sZWFuIG9ubHlfY2xvc2UpCi17Ci0gIEdzdFJUU1BNZXNzYWdlIHJlcXVlc3QgPSB7IDAgfTsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVzcG9uc2UgPSB7IDAgfTsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLSAgR0xpc3QgKndhbGs7Ci0gIGNvbnN0IGdjaGFyICpjb250cm9sOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlRFQVJET1dOLi4uIik7Ci0KLSAgZ3N0X3J0c3BzcmNfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9SRUFEWSk7Ci0KLSAgaWYgKHNyYy0+c3RhdGUgPCBHU1RfUlRTUF9TVEFURV9SRUFEWSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm5vdCByZWFkeSwgZG9pbmcgY2xlYW51cCIpOwotICAgIGdvdG8gY2xvc2U7Ci0gIH0KLQotICBpZiAob25seV9jbG9zZSkKLSAgICBnb3RvIGNsb3NlOwotCi0gIC8qIGNvbnN0cnVjdCBhIGNvbnRyb2wgdXJsICovCi0gIGNvbnRyb2wgPSBnZXRfYWdncmVnYXRlX2NvbnRyb2wgKHNyYyk7Ci0KLSAgaWYgKCEoc3JjLT5tZXRob2RzICYgKEdTVF9SVFNQX1BMQVkgfCBHU1RfUlRTUF9URUFSRE9XTikpKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLQotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSB3YWxrLT5kYXRhOwotICAgIGNvbnN0IGdjaGFyICpzZXR1cF91cmw7Ci0gICAgR3N0UlRTUENvbm5JbmZvICppbmZvOwotCi0gICAgLyogdHJ5IGFnZ3JlZ2F0ZSBjb250cm9sIGZpcnN0IGJ1dCBkbyBub24tYWdncmVnYXRlIGNvbnRyb2wgb3RoZXJ3aXNlICovCi0gICAgaWYgKGNvbnRyb2wpCi0gICAgICBzZXR1cF91cmwgPSBjb250cm9sOwotICAgIGVsc2UgaWYgKChzZXR1cF91cmwgPSBzdHJlYW0tPmNvbm5pbmZvLmxvY2F0aW9uKSA9PSBOVUxMKQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoc3JjLT5jb25uaW5mby5jb25uZWN0aW9uKSB7Ci0gICAgICBpbmZvID0gJnNyYy0+Y29ubmluZm87Ci0gICAgfSBlbHNlIGlmIChzdHJlYW0tPmNvbm5pbmZvLmNvbm5lY3Rpb24pIHsKLSAgICAgIGluZm8gPSAmc3RyZWFtLT5jb25uaW5mbzsKLSAgICB9IGVsc2UgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmICghaW5mby0+Y29ubmVjdGVkKQotICAgICAgZ290byBuZXh0OwotCi0gICAgLyogZG8gVEVBUkRPV04gKi8KLSAgICByZXMgPQotICAgICAgICBnc3RfcnRzcHNyY19pbml0X3JlcXVlc3QgKHNyYywgJnJlcXVlc3QsIEdTVF9SVFNQX1RFQVJET1dOLCBzZXR1cF91cmwpOwotICAgIGlmIChyZXMgPCAwKQotICAgICAgZ290byBjcmVhdGVfcmVxdWVzdF9mYWlsZWQ7Ci0KLSAgICBpZiAoYXN5bmMpCi0gICAgICBHU1RfRUxFTUVOVF9QUk9HUkVTUyAoc3JjLCBDT05USU5VRSwgImNsb3NlIiwgKCJDbG9zaW5nIHN0cmVhbSIpKTsKLQotICAgIGlmICgocmVzID0KLSAgICAgICAgICAgIGdzdF9ydHNwc3JjX3NlbmQgKHNyYywgaW5mby0+Y29ubmVjdGlvbiwgJnJlcXVlc3QsICZyZXNwb25zZSwKLSAgICAgICAgICAgICAgICBOVUxMKSkgPCAwKQotICAgICAgZ290byBzZW5kX2Vycm9yOwotCi0gICAgLyogRklYTUUsIHBhcnNlIHJlc3VsdD8gKi8KLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVxdWVzdCk7Ci0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLQotICBuZXh0OgotICAgIC8qIGVhcmx5IGV4aXQgd2hlbiB3ZSBkaWQgYWdncmVnYXRlIGNvbnRyb2wgKi8KLSAgICBpZiAoY29udHJvbCkKLSAgICAgIGJyZWFrOwotICB9Ci0KLWNsb3NlOgotICAvKiBjbG9zZSBjb25uZWN0aW9ucyAqLwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJjbG9zaW5nIGNvbm5lY3Rpb24uLi4iKTsKLSAgZ3N0X3J0c3BfY29ubmluZm9fY2xvc2UgKHNyYywgJnNyYy0+Y29ubmluZm8sIFRSVUUpOwotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSB3YWxrLT5kYXRhOwotICAgIGdzdF9ydHNwX2Nvbm5pbmZvX2Nsb3NlIChzcmMsICZzdHJlYW0tPmNvbm5pbmZvLCBUUlVFKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X3J0c3BzcmNfY2xlYW51cCAoc3JjKTsKLQotICBzcmMtPnN0YXRlID0gR1NUX1JUU1BfU1RBVEVfSU5WQUxJRDsKLQotICBpZiAoYXN5bmMpCi0gICAgZ3N0X3J0c3BzcmNfbG9vcF9lbmRfY21kIChzcmMsIENNRF9DTE9TRSwgcmVzKTsKLQotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotY3JlYXRlX3JlcXVlc3RfZmFpbGVkOgotICB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0cnJlc3VsdCAocmVzKTsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIExJQlJBUlksIElOSVQsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgY3JlYXRlIHJlcXVlc3QuICglcykiLCBzdHIpKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgZ290byBjbG9zZTsKLSAgfQotc2VuZF9lcnJvcjoKLSAgewotICAgIGdjaGFyICpzdHIgPSBnc3RfcnRzcF9zdHJyZXN1bHQgKHJlcyk7Ci0KLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVxdWVzdCk7Ci0gICAgaWYgKHJlcyAhPSBHU1RfUlRTUF9FSU5UUikgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgUkVTT1VSQ0UsIFdSSVRFLCAoTlVMTCksCi0gICAgICAgICAgKCJDb3VsZCBub3Qgc2VuZCBtZXNzYWdlLiAoJXMpIiwgc3RyKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiVEVBUkRPV04gaW50ZXJydXB0ZWQiKTsKLSAgICB9Ci0gICAgZ19mcmVlIChzdHIpOwotICAgIGdvdG8gY2xvc2U7Ci0gIH0KLW5vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsCi0gICAgICAgICJURUFSRE9XTiBhbmQgUExBWSBub3Qgc3VwcG9ydGVkLCBjYW4ndCBkbyBURUFSRE9XTiIpOwotICAgIGdvdG8gY2xvc2U7Ci0gIH0KLX0KLQotLyogUlRQLUluZm8gaXMgb2YgdGhlIGZvcm1hdDoKLSAqCi0gKiB1cmw9PFVSTD47W3NlcT08c2VxYmFzZT47cnRwdGltZT08dGltZWJhc2U+XSBbLCB1cmw9Li4uXQotICoKLSAqIHJ0cHRpbWUgY29ycmVzcG9uZHMgdG8gdGhlIHRpbWVzdGFtcCBmb3IgdGhlIE5QVCB0aW1lIGdpdmVuIGluIHRoZSBoZWFkZXIKLSAqIHNlcWJhc2UgY29ycmVzcG9uZHMgdG8gdGhlIG5leHQgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkLiBUaGlzIG51bWJlcgotICogaW5kaWNhdGVzIHRoZSBmaXJzdCBzZXFudW0gYWZ0ZXIgdGhlIHNlZWsgYW5kIHNob3VsZCBiZSB1c2VkIHRvIGRpc2NhcmQKLSAqIHBhY2tldHMgdGhhdCBhcmUgZnJvbSBiZWZvcmUgdGhlIHNlZWsuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfcGFyc2VfcnRwaW5mbyAoR3N0UlRTUFNyYyAqIHNyYywgZ2NoYXIgKiBydHBpbmZvKQotewotICBnY2hhciAqKmluZm9zOwotICBnaW50IGksIGo7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicGFyc2luZyBSVFAtSW5mbyAlcyIsIHJ0cGluZm8pOwotCi0gIGluZm9zID0gZ19zdHJzcGxpdCAocnRwaW5mbywgIiwiLCAwKTsKLSAgZm9yIChpID0gMDsgaW5mb3NbaV07IGkrKykgewotICAgIGdjaGFyICoqZmllbGRzOwotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbTsKLSAgICBnaW50MzIgc2VxYmFzZTsKLSAgICBnaW50NjQgdGltZWJhc2U7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwYXJzaW5nIGluZm8gJXMiLCBpbmZvc1tpXSk7Ci0KLSAgICAvKiBpbml0IHZhbHVlcywgdHlwZXMgb2Ygc2VxYmFzZSBhbmQgdGltZWJhc2UgYXJlIGJpZ2dlciB0aGFuIG5lZWRlZCBzbyB3ZQotICAgICAqIGNhbiBzdG9yZSAtMSBhcyB1bmluaXRpYWxpemVkIHZhbHVlcyAqLwotICAgIHN0cmVhbSA9IE5VTEw7Ci0gICAgc2VxYmFzZSA9IC0xOwotICAgIHRpbWViYXNlID0gLTE7Ci0KLSAgICAvKiBwYXJzZSB1cmwsIGZpbmQgc3RyZWFtIGZvciB1cmwuCi0gICAgICogcGFyc2Ugc2VxIGFuZCBydHB0aW1lLiBUaGUgc2VxIG51bWJlciBzaG91bGQgYmUgY29uZmlndXJlZCBpbiB0aGUgcnRwCi0gICAgICogZGVwYXlsb2FkZXIgb3Igc2Vzc2lvbiBtYW5hZ2VyIHRvIGRldGVjdCBnYXBzLiBTYW1lIGZvciB0aGUgcnRwdGltZSwgaXQKLSAgICAgKiBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYW4gaW5pdGlhbCB0aW1lIG5ld3NlZ21lbnQuICovCi0gICAgZmllbGRzID0gZ19zdHJzcGxpdCAoaW5mb3NbaV0sICI7IiwgMCk7Ci0gICAgZm9yIChqID0gMDsgZmllbGRzW2pdOyBqKyspIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhcnNpbmcgZmllbGQgJXMiLCBmaWVsZHNbal0pOwotICAgICAgLyogcmVtb3ZlIGxlYWRpbmcgd2hpdGVzcGFjZSAqLwotICAgICAgZmllbGRzW2pdID0gZ19zdHJjaHVnIChmaWVsZHNbal0pOwotICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKGZpZWxkc1tqXSwgInVybD0iKSkgewotICAgICAgICAvKiBnZXQgdGhlIHVybCBhbmQgdGhlIHN0cmVhbSAqLwotICAgICAgICBzdHJlYW0gPQotICAgICAgICAgICAgZmluZF9zdHJlYW0gKHNyYywgKGZpZWxkc1tqXSArIDQpLCAoZ3BvaW50ZXIpIGZpbmRfc3RyZWFtX2J5X3NldHVwKTsKLSAgICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoZmllbGRzW2pdLCAic2VxPSIpKSB7Ci0gICAgICAgIHNlcWJhc2UgPSBhdG9pIChmaWVsZHNbal0gKyA0KTsKLSAgICAgIH0gZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeCAoZmllbGRzW2pdLCAicnRwdGltZT0iKSkgewotICAgICAgICB0aW1lYmFzZSA9IGdfYXNjaWlfc3RydG9sbCAoZmllbGRzW2pdICsgOCwgTlVMTCwgMTApOwotICAgICAgfQotICAgIH0KLSAgICBnX3N0cmZyZWV2IChmaWVsZHMpOwotICAgIC8qIG5vdyB3ZSBuZWVkIHRvIHN0b3JlIHRoZSB2YWx1ZXMgZm9yIHRoZSBjYXBzIG9mIHRoZSBzdHJlYW0gKi8KLSAgICBpZiAoc3RyZWFtICE9IE5VTEwpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywKLSAgICAgICAgICAiZm91bmQgc3RyZWFtICVwLCBzZXR0aW5nOiBzZXFiYXNlICVkLCB0aW1lYmFzZSAlIiBHX0dJTlQ2NF9GT1JNQVQsCi0gICAgICAgICAgc3RyZWFtLCBzZXFiYXNlLCB0aW1lYmFzZSk7Ci0KLSAgICAgIC8qIHdlIGhhdmUgYSBzdHJlYW0sIGNvbmZpZ3VyZSBkZXRlY3RlZCBwYXJhbXMgKi8KLSAgICAgIHN0cmVhbS0+c2VxYmFzZSA9IHNlcWJhc2U7Ci0gICAgICBzdHJlYW0tPnRpbWViYXNlID0gdGltZWJhc2U7Ci0gICAgfQotICB9Ci0gIGdfc3RyZnJlZXYgKGluZm9zKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX2hhbmRsZV9ydGNwX2ludGVydmFsIChHc3RSVFNQU3JjICogc3JjLCBnY2hhciAqIHJ0Y3ApCi17Ci0gIGd1aW50NjQgaW50ZXJ2YWw7Ci0gIEdMaXN0ICp3YWxrOwotCi0gIGludGVydmFsID0gc3RydG91bCAocnRjcCwgTlVMTCwgMTApOwotICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJydGNwIGludGVydmFsOiAlIiBHX0dVSU5UNjRfRk9STUFUICIgbXMiLCBpbnRlcnZhbCk7Ci0KLSAgaWYgKCFpbnRlcnZhbCkKLSAgICByZXR1cm47Ci0KLSAgaW50ZXJ2YWwgKj0gR1NUX01TRUNPTkQ7Ci0KLSAgZm9yICh3YWxrID0gc3JjLT5zdHJlYW1zOyB3YWxrOyB3YWxrID0gZ19saXN0X25leHQgKHdhbGspKSB7Ci0gICAgR3N0UlRTUFN0cmVhbSAqc3RyZWFtID0gKEdzdFJUU1BTdHJlYW0gKikgd2Fsay0+ZGF0YTsKLQotICAgIC8qIGFscmVhZHkgKG9wdGlvbmFsbHkpIHJldHJpZXZlZCB0aGlzIHdoZW4gY29uZmlndXJpbmcgbWFuYWdlciAqLwotICAgIGlmIChzdHJlYW0tPnNlc3Npb24pIHsKLSAgICAgIEdPYmplY3QgKnJ0cHNlc3Npb24gPSBzdHJlYW0tPnNlc3Npb247Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvbmZpZ3VyZSBydGNwIGludGVydmFsIGluIHNlc3Npb24gJXAiLAotICAgICAgICAgIHJ0cHNlc3Npb24pOwotICAgICAgZ19vYmplY3Rfc2V0IChydHBzZXNzaW9uLCAicnRjcC1taW4taW50ZXJ2YWwiLCBpbnRlcnZhbCwgTlVMTCk7Ci0gICAgfQotICB9Ci0KLSAgLyogbm93IGl0IGhhcHBlbnMgdGhhdCAoWGVub24pIHNlcnZlciBzZW5kaW5nIHRoaXMgbWF5IGFsc28gcHJvdmlkZSBib2d1cwotICAgKiBSVENQIFNSIHN5bmMgZGF0YSAoaS5lLiB3aXRoIHF1aXRlIHNvbWUgaml0dGVyKSwgc28gbmV2ZXIgbWluZCB0aG9zZQotICAgKiBhbmQganVzdCB1c2UgUlRQLUluZm8gdG8gc3luYyAqLwotICBpZiAoc3JjLT5tYW5hZ2VyKSB7Ci0gICAgR09iamVjdENsYXNzICprbGFzczsKLQotICAgIGtsYXNzID0gR19PQkpFQ1RfR0VUX0NMQVNTIChHX09CSkVDVCAoc3JjLT5tYW5hZ2VyKSk7Ci0gICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKGtsYXNzLCAicnRjcC1zeW5jIikpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvbmZpZ3VyaW5nIHJ0cCBzeW5jIG1ldGhvZCIpOwotICAgICAgZ19vYmplY3Rfc2V0IChzcmMtPm1hbmFnZXIsICJydGNwLXN5bmMiLCBSVENQX1NZTkNfUlRQLCBOVUxMKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGdkb3VibGUKLWdzdF9ydHNwc3JjX2dldF9mbG9hdCAoY29uc3QgZ2NoYXIgKiBkc3RyKQotewotICBnY2hhciBzW0dfQVNDSUlfRFRPU1RSX0JVRl9TSVpFXSA9IHsgMCwgfTsKLQotICAvKiBjYW5vbmljYWxpc2UgZmxvYXRpbmcgcG9pbnQgc3RyaW5nIHNvIHdlIGNhbiBoYW5kbGUgZmxvYXQgc3RyaW5ncwotICAgKiBpbiB0aGUgZm9ybSAiMjQuOTMwIiBvciAiMjQsOTMwIiBpcnJlc3BlY3RpdmUgb2YgdGhlIGN1cnJlbnQgbG9jYWxlICovCi0gIGdfc3RybGNweSAocywgZHN0ciwgc2l6ZW9mIChzKSk7Ci0gIGdfc3RyZGVsaW1pdCAocywgIiwiLCAnLicpOwotICByZXR1cm4gZ19hc2NpaV9zdHJ0b2QgKHMsIE5VTEwpOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ2VuX3JhbmdlX2hlYWRlciAoR3N0UlRTUFNyYyAqIHNyYywgR3N0U2VnbWVudCAqIHNlZ21lbnQpCi17Ci0gIGdjaGFyIHZhbF9zdHJbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdID0geyAwLCB9OwotCi0gIGlmIChzcmMtPnJhbmdlICYmIHNyYy0+cmFuZ2UtPm1pbi50eXBlID09IEdTVF9SVFNQX1RJTUVfTk9XKSB7Ci0gICAgZ19zdHJsY3B5ICh2YWxfc3RyLCAibm93Iiwgc2l6ZW9mICh2YWxfc3RyKSk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKHNlZ21lbnQtPnBvc2l0aW9uID09IDApIHsKLSAgICAgIGdfc3RybGNweSAodmFsX3N0ciwgIjAiLCBzaXplb2YgKHZhbF9zdHIpKTsKLSAgICB9IGVsc2UgewotICAgICAgZ19hc2NpaV9kdG9zdHIgKHZhbF9zdHIsIHNpemVvZiAodmFsX3N0ciksCi0gICAgICAgICAgKChnZG91YmxlKSBzZWdtZW50LT5wb3NpdGlvbikgLyBHU1RfU0VDT05EKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoIm5wdD0lcy0iLCB2YWxfc3RyKTsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFyX3J0cF9iYXNlIChHc3RSVFNQU3JjICogc3JjLCBHc3RSVFNQU3RyZWFtICogc3RyZWFtKQotewotICBndWludCBpLCBsZW47Ci0KLSAgc3RyZWFtLT50aW1lYmFzZSA9IC0xOwotICBzdHJlYW0tPnNlcWJhc2UgPSAtMTsKLQotICBsZW4gPSBzdHJlYW0tPnB0bWFwLT5sZW47Ci0gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgIFB0TWFwSXRlbSAqaXRlbSA9ICZnX2FycmF5X2luZGV4IChzdHJlYW0tPnB0bWFwLCBQdE1hcEl0ZW0sIGkpOwotICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgIGlmIChpdGVtLT5jYXBzID09IE5VTEwpCi0gICAgICBjb250aW51ZTsKLQotICAgIGl0ZW0tPmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChpdGVtLT5jYXBzKTsKLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoaXRlbS0+Y2FwcywgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzIChzLCAiY2xvY2stYmFzZSIsICJzZXFudW0tYmFzZSIsIE5VTEwpOwotICAgIGlmIChpdGVtLT5wdCA9PSBzdHJlYW0tPmRlZmF1bHRfcHQgJiYgc3RyZWFtLT51ZHBzcmNbMF0pCi0gICAgICBnX29iamVjdF9zZXQgKHN0cmVhbS0+dWRwc3JjWzBdLCAiY2FwcyIsIGl0ZW0tPmNhcHMsIE5VTEwpOwotICB9Ci0gIHN0cmVhbS0+bmVlZF9jYXBzID0gVFJVRTsKLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX2Vuc3VyZV9vcGVuIChHc3RSVFNQU3JjICogc3JjLCBnYm9vbGVhbiBhc3luYykKLXsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLQotICBpZiAoc3JjLT5zdGF0ZSA8IEdTVF9SVFNQX1NUQVRFX1JFQURZKSB7Ci0gICAgcmVzID0gR1NUX1JUU1BfRVJST1I7Ci0gICAgaWYgKHNyYy0+b3Blbl9lcnJvcikgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAidGhlIHN0cmVhbSB3YXMgaW4gZXJyb3IiKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgaWYgKGFzeW5jKQotICAgICAgZ3N0X3J0c3BzcmNfbG9vcF9zdGFydF9jbWQgKHNyYywgQ01EX09QRU4pOwotCi0gICAgaWYgKChyZXMgPSBnc3RfcnRzcHNyY19vcGVuIChzcmMsIGFzeW5jKSkgPCAwKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJmYWlsZWQgdG8gb3BlbiBzdHJlYW0iKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX3BsYXkgKEdzdFJUU1BTcmMgKiBzcmMsIEdzdFNlZ21lbnQgKiBzZWdtZW50LCBnYm9vbGVhbiBhc3luYykKLXsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVxdWVzdCA9IHsgMCB9OwotICBHc3RSVFNQTWVzc2FnZSByZXNwb25zZSA9IHsgMCB9OwotICBHc3RSVFNQUmVzdWx0IHJlcyA9IEdTVF9SVFNQX09LOwotICBHTGlzdCAqd2FsazsKLSAgZ2NoYXIgKmh2YWw7Ci0gIGdpbnQgaHZhbF9pZHg7Ci0gIGNvbnN0IGdjaGFyICpjb250cm9sOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlBMQVkuLi4iKTsKLQotcmVzdGFydDoKLSAgaWYgKChyZXMgPSBnc3RfcnRzcHNyY19lbnN1cmVfb3BlbiAoc3JjLCBhc3luYykpIDwgMCkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi0gIGlmICghKHNyYy0+bWV0aG9kcyAmIEdTVF9SVFNQX1BMQVkpKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLQotICBpZiAoc3JjLT5zdGF0ZSA9PSBHU1RfUlRTUF9TVEFURV9QTEFZSU5HKQotICAgIGdvdG8gd2FzX3BsYXlpbmc7Ci0KLSAgaWYgKCFzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24gfHwgIXNyYy0+Y29ubmluZm8uY29ubmVjdGVkKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBzZW5kIHNvbWUgZHVtbXkgcGFja2V0cyBiZWZvcmUgd2UgYWN0aXZhdGUgdGhlIHJlY2VpdmUgaW4gdGhlCi0gICAqIHVkcCBzb3VyY2VzICovCi0gIGdzdF9ydHNwc3JjX3NlbmRfZHVtbXlfcGFja2V0cyAoc3JjKTsKLQotICAvKiByZXF1aXJlIG5ldyBTUiBwYWNrZXRzICovCi0gIGlmIChzcmMtPm1hbmFnZXIpCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChzcmMtPm1hbmFnZXIsICJyZXNldC1zeW5jIiwgTlVMTCk7Ci0KLSAgLyogY29uc3RydWN0IGEgY29udHJvbCB1cmwgKi8KLSAgY29udHJvbCA9IGdldF9hZ2dyZWdhdGVfY29udHJvbCAoc3JjKTsKLQotICBmb3IgKHdhbGsgPSBzcmMtPnN0cmVhbXM7IHdhbGs7IHdhbGsgPSBnX2xpc3RfbmV4dCAod2FsaykpIHsKLSAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW0gPSAoR3N0UlRTUFN0cmVhbSAqKSB3YWxrLT5kYXRhOwotICAgIGNvbnN0IGdjaGFyICpzZXR1cF91cmw7Ci0gICAgR3N0UlRTUENvbm5lY3Rpb24gKmNvbm47Ci0KLSAgICAvKiB0cnkgYWdncmVnYXRlIGNvbnRyb2wgZmlyc3QgYnV0IGRvIG5vbi1hZ2dyZWdhdGUgY29udHJvbCBvdGhlcndpc2UgKi8KLSAgICBpZiAoY29udHJvbCkKLSAgICAgIHNldHVwX3VybCA9IGNvbnRyb2w7Ci0gICAgZWxzZSBpZiAoKHNldHVwX3VybCA9IHN0cmVhbS0+Y29ubmluZm8ubG9jYXRpb24pID09IE5VTEwpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24pIHsKLSAgICAgIGNvbm4gPSBzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb247Ci0gICAgfSBlbHNlIGlmIChzdHJlYW0tPmNvbm5pbmZvLmNvbm5lY3Rpb24pIHsKLSAgICAgIGNvbm4gPSBzdHJlYW0tPmNvbm5pbmZvLmNvbm5lY3Rpb247Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGRvIHBsYXkgKi8KLSAgICByZXMgPSBnc3RfcnRzcHNyY19pbml0X3JlcXVlc3QgKHNyYywgJnJlcXVlc3QsIEdTVF9SVFNQX1BMQVksIHNldHVwX3VybCk7Ci0gICAgaWYgKHJlcyA8IDApCi0gICAgICBnb3RvIGNyZWF0ZV9yZXF1ZXN0X2ZhaWxlZDsKLQotICAgIGlmIChzcmMtPm5lZWRfcmFuZ2UpIHsKLSAgICAgIGh2YWwgPSBnZW5fcmFuZ2VfaGVhZGVyIChzcmMsIHNlZ21lbnQpOwotCi0gICAgICBnc3RfcnRzcF9tZXNzYWdlX3Rha2VfaGVhZGVyICgmcmVxdWVzdCwgR1NUX1JUU1BfSERSX1JBTkdFLCBodmFsKTsKLQotICAgICAgLyogc3RvcmUgdGhlIG5ld3NlZ21lbnQgZXZlbnQgc28gaXQgY2FuIGJlIHNlbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4gKi8KLSAgICAgIHNyYy0+bmVlZF9zZWdtZW50ID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoc2VnbWVudC0+cmF0ZSAhPSAxLjApIHsKLSAgICAgIGdjaGFyIGh2YWxbR19BU0NJSV9EVE9TVFJfQlVGX1NJWkVdOwotCi0gICAgICBnX2FzY2lpX2R0b3N0ciAoaHZhbCwgc2l6ZW9mIChodmFsKSwgc2VnbWVudC0+cmF0ZSk7Ci0gICAgICBpZiAoc3JjLT5za2lwKQotICAgICAgICBnc3RfcnRzcF9tZXNzYWdlX2FkZF9oZWFkZXIgKCZyZXF1ZXN0LCBHU1RfUlRTUF9IRFJfU0NBTEUsIGh2YWwpOwotICAgICAgZWxzZQotICAgICAgICBnc3RfcnRzcF9tZXNzYWdlX2FkZF9oZWFkZXIgKCZyZXF1ZXN0LCBHU1RfUlRTUF9IRFJfU1BFRUQsIGh2YWwpOwotICAgIH0KLQotICAgIGlmIChhc3luYykKLSAgICAgIEdTVF9FTEVNRU5UX1BST0dSRVNTIChzcmMsIENPTlRJTlVFLCAicmVxdWVzdCIsICgiU2VuZGluZyBQTEFZIHJlcXVlc3QiKSk7Ci0KLSAgICBpZiAoKHJlcyA9IGdzdF9ydHNwc3JjX3NlbmQgKHNyYywgY29ubiwgJnJlcXVlc3QsICZyZXNwb25zZSwgTlVMTCkpIDwgMCkKLSAgICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICAgIGlmIChzcmMtPm5lZWRfcmVkaXJlY3QpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywKLSAgICAgICAgICAicmVkaXJlY3Q6IHRlYXJpbmcgZG93biBhbmQgcmVzdGFydGluZyB3aXRoIG5ldyB1cmwiKTsKLSAgICAgIC8qIHRlYXJkb3duIGFuZCByZXN0YXJ0IHdpdGggbmV3IHVybCAqLwotICAgICAgZ3N0X3J0c3BzcmNfY2xvc2UgKHNyYywgVFJVRSwgRkFMU0UpOwotICAgICAgLyogcmVzZXQgcHJvdG9jb2xzIHRvIGZvcmNlIHJlLW5lZ290aWF0aW9uIHdpdGggcmVkaXJlY3RlZCB1cmwgKi8KLSAgICAgIHNyYy0+Y3VyX3Byb3RvY29scyA9IHNyYy0+cHJvdG9jb2xzOwotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlcXVlc3QpOwotICAgICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlc3BvbnNlKTsKLSAgICAgIGdvdG8gcmVzdGFydDsKLSAgICB9Ci0KLSAgICAvKiBzZWVrIG1heSBoYXZlIHNpbGVudGx5IGZhaWxlZCBhcyBpdCBpcyBub3Qgc3VwcG9ydGVkICovCi0gICAgaWYgKCEoc3JjLT5tZXRob2RzICYgR1NUX1JUU1BfUExBWSkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlBMQVkgUmFuZ2Ugbm90IHN1cHBvcnRlZDsgcmUtZW5hYmxlIFBMQVkiKTsKLSAgICAgIC8qIG9idmlvdXNseSBpdCBpcyBzdXBwb3J0ZWQgYXMgd2UgbWFkZSBpdCBoZXJlICovCi0gICAgICBzcmMtPm1ldGhvZHMgfD0gR1NUX1JUU1BfUExBWTsKLSAgICAgIHNyYy0+c2Vla2FibGUgPSBGQUxTRTsKLSAgICAgIC8qIGJ1dCB0aGVyZSBpcyBub3RoaW5nIHRvIHBhcnNlIGluIHRoZSByZXNwb25zZSwKLSAgICAgICAqIHNvIGNvbnZleSB3ZSBoYXZlIG5vIGlkZWEgYW5kIG5vdCB0byBleHBlY3QgYW55dGhpbmcgcGFydGljdWxhciAqLwotICAgICAgY2xlYXJfcnRwX2Jhc2UgKHNyYywgc3RyZWFtKTsKLSAgICAgIGlmIChjb250cm9sKSB7Ci0gICAgICAgIEdMaXN0ICpydW47Ci0KLSAgICAgICAgLyogbmVlZCB0byBkbyBmb3IgYWxsIHN0cmVhbXMgKi8KLSAgICAgICAgZm9yIChydW4gPSBzcmMtPnN0cmVhbXM7IHJ1bjsgcnVuID0gZ19saXN0X25leHQgKHJ1bikpCi0gICAgICAgICAgY2xlYXJfcnRwX2Jhc2UgKHNyYywgKEdzdFJUU1BTdHJlYW0gKikgcnVuLT5kYXRhKTsKLSAgICAgIH0KLSAgICAgIC8qIE5PVEUgdGhlIGFib3ZlIGFsc28gZGlzYWJsZXMgbnB0IGJhc2VkIGVvcyBkZXRlY3Rpb24gKi8KLSAgICAgIC8qIGFuZCBiZWxvdyBmb3JjZXMgcG9zaXRpb24gdG8gMCwKLSAgICAgICAqIHdoaWNoIGlzIHZpc2libGUgZmVlZGJhY2sgd2UgbG9zdCB0aGUgcGxvdCAqLwotICAgICAgc2VnbWVudC0+c3RhcnQgPSBzZWdtZW50LT5wb3NpdGlvbiA9IHNyYy0+bGFzdF9wb3M7Ci0gICAgfQotCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlcXVlc3QpOwotCi0gICAgLyogcGFyc2UgUlRQIG5wdCBmaWVsZC4gVGhpcyBpcyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyZWFtIChOb3JtYWwKLSAgICAgKiBQbGF5IFRpbWUpIGFuZCBzaG91bGQgYmUgcHV0IGluIHRoZSBORVdTRUdNRU5UIHBvc2l0aW9uIGZpZWxkLiAqLwotICAgIGlmIChnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKCZyZXNwb25zZSwgR1NUX1JUU1BfSERSX1JBTkdFLCAmaHZhbCwKLSAgICAgICAgICAgIDApID09IEdTVF9SVFNQX09LKQotICAgICAgZ3N0X3J0c3BzcmNfcGFyc2VfcmFuZ2UgKHNyYywgaHZhbCwgc2VnbWVudCk7Ci0KLSAgICAvKiBhc3N1bWUgMS4wIHJhdGUgbm93LCBvdmVyd3JpdGUgd2hlbiB0aGUgU0NBTEUgb3IgU1BFRUQgaGVhZGVycyBhcmUgcHJlc2VudC4gKi8KLSAgICBzZWdtZW50LT5yYXRlID0gMS4wOwotCi0gICAgLyogcGFyc2UgU3BlZWQgaGVhZGVyLiBUaGlzIGlzIHRoZSBpbnRlbmRlZCBwbGF5YmFjayByYXRlIG9mIHRoZSBzdHJlYW0KLSAgICAgKiBhbmQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgTkVXU0VHTUVOVCByYXRlIGZpZWxkLiAqLwotICAgIGlmIChnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKCZyZXNwb25zZSwgR1NUX1JUU1BfSERSX1NQRUVELCAmaHZhbCwKLSAgICAgICAgICAgIDApID09IEdTVF9SVFNQX09LKSB7Ci0gICAgICBzZWdtZW50LT5yYXRlID0gZ3N0X3J0c3BzcmNfZ2V0X2Zsb2F0IChodmFsKTsKLSAgICB9IGVsc2UgaWYgKGdzdF9ydHNwX21lc3NhZ2VfZ2V0X2hlYWRlciAoJnJlc3BvbnNlLCBHU1RfUlRTUF9IRFJfU0NBTEUsCi0gICAgICAgICAgICAmaHZhbCwgMCkgPT0gR1NUX1JUU1BfT0spIHsKLSAgICAgIHNlZ21lbnQtPnJhdGUgPSBnc3RfcnRzcHNyY19nZXRfZmxvYXQgKGh2YWwpOwotICAgIH0KLQotICAgIC8qIHBhcnNlIHRoZSBSVFAtSW5mbyBoZWFkZXIgZmllbGQgKGlmIEFOWSkgdG8gZ2V0IHRoZSBiYXNlIHNlcW51bSBhbmQgdGltZXN0YW1wCi0gICAgICogZm9yIHRoZSBSVFAgcGFja2V0cy4gSWYgdGhpcyBpcyBub3QgcHJlc2VudCwgd2UgYXNzdW1lIGFsbCBzdGFydHMgZnJvbSAwLi4uCi0gICAgICogVGhpcyBpcyBpbmZvIGZvciB0aGUgUlRQIHNlc3Npb24gbWFuYWdlciB0aGF0IHdlIHBhc3MgdG8gaXQgaW4gY2Fwcy4gKi8KLSAgICBodmFsX2lkeCA9IDA7Ci0gICAgd2hpbGUgKGdzdF9ydHNwX21lc3NhZ2VfZ2V0X2hlYWRlciAoJnJlc3BvbnNlLCBHU1RfUlRTUF9IRFJfUlRQX0lORk8sCi0gICAgICAgICAgICAmaHZhbCwgaHZhbF9pZHgrKykgPT0gR1NUX1JUU1BfT0spCi0gICAgICBnc3RfcnRzcHNyY19wYXJzZV9ydHBpbmZvIChzcmMsIGh2YWwpOwotCi0gICAgLyogc29tZSBzZXJ2ZXJzIGluZGljYXRlIFJUQ1AgcGFyYW1ldGVycyBpbiBQTEFZIHJlc3BvbnNlLAotICAgICAqIHJhdGhlciB0aGFuIHByb3Blcmx5IGluIFNEUCAqLwotICAgIGlmIChnc3RfcnRzcF9tZXNzYWdlX2dldF9oZWFkZXIgKCZyZXNwb25zZSwgR1NUX1JUU1BfSERSX1JUQ1BfSU5URVJWQUwsCi0gICAgICAgICAgICAmaHZhbCwgMCkgPT0gR1NUX1JUU1BfT0spCi0gICAgICBnc3RfcnRzcHNyY19oYW5kbGVfcnRjcF9pbnRlcnZhbCAoc3JjLCBodmFsKTsKLQotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXNwb25zZSk7Ci0KLSAgICAvKiBlYXJseSBleGl0IHdoZW4gd2UgZGlkIGFnZ3JlZ2F0ZSBjb250cm9sICovCi0gICAgaWYgKGNvbnRyb2wpCi0gICAgICBicmVhazsKLSAgfQotICAvKiBjb25maWd1cmUgdGhlIGNhcHMgb2YgdGhlIHN0cmVhbXMgYWZ0ZXIgd2UgcGFyc2VkIGFsbCBoZWFkZXJzLiBPbmx5IHJlc2V0Ci0gICAqIHRoZSBtYW5hZ2VyIG9iamVjdCB3aGVuIHdlIHNldCBhIG5ldyBSYW5nZSBoZWFkZXIgKHdlIGRpZCBhIHNlZWspICovCi0gIGdzdF9ydHNwc3JjX2NvbmZpZ3VyZV9jYXBzIChzcmMsIHNlZ21lbnQsIHNyYy0+bmVlZF9yYW5nZSk7Ci0KLSAgLyogc2V0IHRvIFBMQVlJTkcgYWZ0ZXIgd2UgaGF2ZSBjb25maWd1cmVkIHRoZSBjYXBzLCBvdGhlcndpc2Ugd2UKLSAgICogbWlnaHQgZW5kIHVwIGNhbGxpbmcgcmVxdWVzdF9rZXkgKHdpdGggU1JUUCkgd2hpbGUgY2FwcyBhcmUgc3RpbGwKLSAgICogYmVpbmcgY29uZmlndXJlZC4gKi8KLSAgZ3N0X3J0c3BzcmNfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAvKiBzZXQgYWdhaW4gd2hlbiBuZWVkZWQgKi8KLSAgc3JjLT5uZWVkX3JhbmdlID0gRkFMU0U7Ci0KLSAgc3JjLT5ydW5uaW5nID0gVFJVRTsKLSAgc3JjLT5iYXNlX3RpbWUgPSAtMTsKLSAgc3JjLT5zdGF0ZSA9IEdTVF9SVFNQX1NUQVRFX1BMQVlJTkc7Ci0KLSAgLyogbWFyayBkaXNjb250ICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIm1hcmsgRElTQ09OVCwgd2UgZGlkIGEgc2VlayB0byBhbm90aGVyIHBvc2l0aW9uIik7Ci0gIGZvciAod2FsayA9IHNyYy0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIHdhbGstPmRhdGE7Ci0gICAgc3RyZWFtLT5kaXNjb250ID0gVFJVRTsKLSAgfQotCi1kb25lOgotICBpZiAoYXN5bmMpCi0gICAgZ3N0X3J0c3BzcmNfbG9vcF9lbmRfY21kIChzcmMsIENNRF9QTEFZLCByZXMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1vcGVuX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBvcGVuIHN0cmVhbSIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotbm90X3N1cHBvcnRlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlBMQVkgaXMgbm90IHN1cHBvcnRlZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotd2FzX3BsYXlpbmc6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSB3ZXJlIGFscmVhZHkgUExBWUlORyIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotY3JlYXRlX3JlcXVlc3RfZmFpbGVkOgotICB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0cnJlc3VsdCAocmVzKTsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIExJQlJBUlksIElOSVQsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgY3JlYXRlIHJlcXVlc3QuICglcykiLCBzdHIpKTsKLSAgICBnX2ZyZWUgKHN0cik7Ci0gICAgZ290byBkb25lOwotICB9Ci1zZW5kX2Vycm9yOgotICB7Ci0gICAgZ2NoYXIgKnN0ciA9IGdzdF9ydHNwX3N0cnJlc3VsdCAocmVzKTsKLQotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXF1ZXN0KTsKLSAgICBpZiAocmVzICE9IEdTVF9SVFNQX0VJTlRSKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgICAoIkNvdWxkIG5vdCBzZW5kIG1lc3NhZ2UuICglcykiLCBzdHIpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJQTEFZIGludGVycnVwdGVkIik7Ci0gICAgfQotICAgIGdfZnJlZSAoc3RyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFJUU1BSZXN1bHQKLWdzdF9ydHNwc3JjX3BhdXNlIChHc3RSVFNQU3JjICogc3JjLCBnYm9vbGVhbiBhc3luYykKLXsKLSAgR3N0UlRTUFJlc3VsdCByZXMgPSBHU1RfUlRTUF9PSzsKLSAgR3N0UlRTUE1lc3NhZ2UgcmVxdWVzdCA9IHsgMCB9OwotICBHc3RSVFNQTWVzc2FnZSByZXNwb25zZSA9IHsgMCB9OwotICBHTGlzdCAqd2FsazsKLSAgY29uc3QgZ2NoYXIgKmNvbnRyb2w7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiUEFVU0UuLi4iKTsKLQotICBpZiAoKHJlcyA9IGdzdF9ydHNwc3JjX2Vuc3VyZV9vcGVuIChzcmMsIGFzeW5jKSkgPCAwKQotICAgIGdvdG8gb3Blbl9mYWlsZWQ7Ci0KLSAgaWYgKCEoc3JjLT5tZXRob2RzICYgR1NUX1JUU1BfUEFVU0UpKQotICAgIGdvdG8gbm90X3N1cHBvcnRlZDsKLQotICBpZiAoc3JjLT5zdGF0ZSA9PSBHU1RfUlRTUF9TVEFURV9SRUFEWSkKLSAgICBnb3RvIHdhc19wYXVzZWQ7Ci0KLSAgaWYgKCFzcmMtPmNvbm5pbmZvLmNvbm5lY3Rpb24gfHwgIXNyYy0+Y29ubmluZm8uY29ubmVjdGVkKQotICAgIGdvdG8gbm9fY29ubmVjdGlvbjsKLQotICAvKiBjb25zdHJ1Y3QgYSBjb250cm9sIHVybCAqLwotICBjb250cm9sID0gZ2V0X2FnZ3JlZ2F0ZV9jb250cm9sIChzcmMpOwotCi0gIC8qIGxvb3Agb3ZlciB0aGUgc3RyZWFtcy4gV2UgbWlnaHQgZXhpdCB0aGUgbG9vcCBlYXJseSB3aGVuIHdlIGNvdWxkIGRvIGFuCi0gICAqIGFnZ3JlZ2F0ZSBjb250cm9sICovCi0gIGZvciAod2FsayA9IHNyYy0+c3RyZWFtczsgd2Fsazsgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKSkgewotICAgIEdzdFJUU1BTdHJlYW0gKnN0cmVhbSA9IChHc3RSVFNQU3RyZWFtICopIHdhbGstPmRhdGE7Ci0gICAgR3N0UlRTUENvbm5lY3Rpb24gKmNvbm47Ci0gICAgY29uc3QgZ2NoYXIgKnNldHVwX3VybDsKLQotICAgIC8qIHRyeSBhZ2dyZWdhdGUgY29udHJvbCBmaXJzdCBidXQgZG8gbm9uLWFnZ3JlZ2F0ZSBjb250cm9sIG90aGVyd2lzZSAqLwotICAgIGlmIChjb250cm9sKQotICAgICAgc2V0dXBfdXJsID0gY29udHJvbDsKLSAgICBlbHNlIGlmICgoc2V0dXBfdXJsID0gc3RyZWFtLT5jb25uaW5mby5sb2NhdGlvbikgPT0gTlVMTCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbikgewotICAgICAgY29ubiA9IHNyYy0+Y29ubmluZm8uY29ubmVjdGlvbjsKLSAgICB9IGVsc2UgaWYgKHN0cmVhbS0+Y29ubmluZm8uY29ubmVjdGlvbikgewotICAgICAgY29ubiA9IHN0cmVhbS0+Y29ubmluZm8uY29ubmVjdGlvbjsKLSAgICB9IGVsc2UgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKGFzeW5jKQotICAgICAgR1NUX0VMRU1FTlRfUFJPR1JFU1MgKHNyYywgQ09OVElOVUUsICJyZXF1ZXN0IiwKLSAgICAgICAgICAoIlNlbmRpbmcgUEFVU0UgcmVxdWVzdCIpKTsKLQotICAgIGlmICgocmVzID0KLSAgICAgICAgICAgIGdzdF9ydHNwc3JjX2luaXRfcmVxdWVzdCAoc3JjLCAmcmVxdWVzdCwgR1NUX1JUU1BfUEFVU0UsCi0gICAgICAgICAgICAgICAgc2V0dXBfdXJsKSkgPCAwKQotICAgICAgZ290byBjcmVhdGVfcmVxdWVzdF9mYWlsZWQ7Ci0KLSAgICBpZiAoKHJlcyA9IGdzdF9ydHNwc3JjX3NlbmQgKHNyYywgY29ubiwgJnJlcXVlc3QsICZyZXNwb25zZSwgTlVMTCkpIDwgMCkKLSAgICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICAgIGdzdF9ydHNwX21lc3NhZ2VfdW5zZXQgKCZyZXF1ZXN0KTsKLSAgICBnc3RfcnRzcF9tZXNzYWdlX3Vuc2V0ICgmcmVzcG9uc2UpOwotCi0gICAgLyogZXhpdCBlYXJseSB3aGVuIHdlIGRpZCBhZ3JlZ2F0ZSBjb250cm9sICovCi0gICAgaWYgKGNvbnRyb2wpCi0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIGNoYW5nZSBlbGVtZW50IHN0YXRlcyBub3cgKi8KLSAgZ3N0X3J0c3BzcmNfc2V0X3N0YXRlIChzcmMsIEdTVF9TVEFURV9QQVVTRUQpOwotCi1ub19jb25uZWN0aW9uOgotICBzcmMtPnN0YXRlID0gR1NUX1JUU1BfU1RBVEVfUkVBRFk7Ci0KLWRvbmU6Ci0gIGlmIChhc3luYykKLSAgICBnc3RfcnRzcHNyY19sb29wX2VuZF9jbWQgKHNyYywgQ01EX1BBVVNFLCByZXMpOwotCi0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1JTICovCi1vcGVuX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBvcGVuIHN0cmVhbSIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotbm90X3N1cHBvcnRlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIlBBVVNFIGlzIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXdhc19wYXVzZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJ3ZSB3ZXJlIGFscmVhZHkgUEFVU0VEIik7Ci0gICAgZ290byBkb25lOwotICB9Ci1jcmVhdGVfcmVxdWVzdF9mYWlsZWQ6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNyYywgTElCUkFSWSwgSU5JVCwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkIG5vdCBjcmVhdGUgcmVxdWVzdC4gKCVzKSIsIHN0cikpOwotICAgIGdfZnJlZSAoc3RyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLXNlbmRfZXJyb3I6Ci0gIHsKLSAgICBnY2hhciAqc3RyID0gZ3N0X3J0c3Bfc3RycmVzdWx0IChyZXMpOwotCi0gICAgZ3N0X3J0c3BfbWVzc2FnZV91bnNldCAoJnJlcXVlc3QpOwotICAgIGlmIChyZXMgIT0gR1NUX1JUU1BfRUlOVFIpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAgICgiQ291bGQgbm90IHNlbmQgbWVzc2FnZS4gKCVzKSIsIHN0cikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIlBBVVNFIGludGVycnVwdGVkIik7Ci0gICAgfQotICAgIGdfZnJlZSAoc3RyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9ydHNwc3JjX2hhbmRsZV9tZXNzYWdlIChHc3RCaW4gKiBiaW4sIEdzdE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICBHc3RSVFNQU3JjICpydHNwc3JjOwotCi0gIHJ0c3BzcmMgPSBHU1RfUlRTUFNSQyAoYmluKTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6Ci0gICAgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0KLSAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiR3N0VURQU3JjVGltZW91dCIpKSB7Ci0gICAgICAgIGdib29sZWFuIGlnbm9yZV90aW1lb3V0OwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJpbiwgInRpbWVvdXQgb24gVURQIHBvcnQiKTsKLQotICAgICAgICBHU1RfT0JKRUNUX0xPQ0sgKHJ0c3BzcmMpOwotICAgICAgICBpZ25vcmVfdGltZW91dCA9IHJ0c3BzcmMtPmlnbm9yZV90aW1lb3V0OwotICAgICAgICBydHNwc3JjLT5pZ25vcmVfdGltZW91dCA9IFRSVUU7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChydHNwc3JjKTsKLQotICAgICAgICAvKiB3ZSBvbmx5IGFjdCBvbiB0aGUgZmlyc3QgdWRwIHRpbWVvdXQgbWVzc2FnZSwgb3RoZXJzIGFyZSBpcnJlbGV2YW50Ci0gICAgICAgICAqIGFuZCBjYW4gYmUgaWdub3JlZC4gKi8KLSAgICAgICAgaWYgKCFpZ25vcmVfdGltZW91dCkKLSAgICAgICAgICBnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kIChydHNwc3JjLCBDTURfUkVDT05ORUNULCBDTURfTE9PUCk7Ci0gICAgICAgIC8qIGVhdCBhbmQgZnJlZSAqLwotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIEdTVF9CSU5fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgewotICAgICAgR3N0T2JqZWN0ICp1ZHBzcmM7Ci0gICAgICBHc3RSVFNQU3RyZWFtICpzdHJlYW07Ci0gICAgICBHc3RGbG93UmV0dXJuIHJldDsKLQotICAgICAgdWRwc3JjID0gR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocnRzcHNyYywgImdvdCBlcnJvciBmcm9tICVzIiwKLSAgICAgICAgICBHU1RfRUxFTUVOVF9OQU1FICh1ZHBzcmMpKTsKLQotICAgICAgc3RyZWFtID0gZmluZF9zdHJlYW0gKHJ0c3BzcmMsIHVkcHNyYywgKGdwb2ludGVyKSBmaW5kX3N0cmVhbV9ieV91ZHBzcmMpOwotICAgICAgaWYgKCFzdHJlYW0pCi0gICAgICAgIGdvdG8gZm9yd2FyZDsKLQotICAgICAgLyogd2UgaWdub3JlIHRoZSBSVENQIHVkcHNyYyAqLwotICAgICAgaWYgKHN0cmVhbS0+dWRwc3JjWzFdID09IEdTVF9FTEVNRU5UX0NBU1QgKHVkcHNyYykpCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgICAgLyogaWYgd2UgZ2V0IGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIHVkcCBzb3VyY2VzLCB0aGF0J3Mgbm90IGEgcHJvYmxlbSBhcwotICAgICAgICogbG9uZyBhcyBub3QgYWxsIG9mIHRoZW0gZXJyb3Igb3V0LiBXZSBhbHNvIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGhlCi0gICAgICAgKiBwcm9ibGVtIGlzLCB0aGUgbWVzc2FnZSBkb2VzIG5vdCBnaXZlIGVub3VnaCBkZXRhaWwuLi4gKi8KLSAgICAgIHJldCA9IGdzdF9ydHNwc3JjX2NvbWJpbmVfZmxvd3MgKHJ0c3BzcmMsIHN0cmVhbSwgR1NUX0ZMT1dfTk9UX0xJTktFRCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChydHNwc3JjLCAiY29tYmluZWQgZmxvd3M6ICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBmb3J3YXJkOwotCi0gICAgZG9uZToKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotCi0gICAgZm9yd2FyZDoKLSAgICAgIC8qIGZhdGFsIGJ1dCBub3Qgb3VyIG1lc3NhZ2UsIGZvcndhcmQgKi8KLSAgICAgIEdTVF9CSU5fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlIChiaW4sIG1lc3NhZ2UpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgewotICAgICAgR1NUX0JJTl9DTEFTUyAocGFyZW50X2NsYXNzKS0+aGFuZGxlX21lc3NhZ2UgKGJpbiwgbWVzc2FnZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotLyogdGhlIHRocmVhZCB3aGVyZSBldmVyeXRoaW5nIGhhcHBlbnMgKi8KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY190aHJlYWQgKEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIGdpbnQgY21kOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgY21kID0gc3JjLT5wZW5kaW5nX2NtZDsKLSAgaWYgKGNtZCA9PSBDTURfUkVDT05ORUNUIHx8IGNtZCA9PSBDTURfUExBWSB8fCBjbWQgPT0gQ01EX1BBVVNFCi0gICAgICB8fCBjbWQgPT0gQ01EX0xPT1AgfHwgY21kID09IENNRF9PUEVOKQotICAgIHNyYy0+cGVuZGluZ19jbWQgPSBDTURfTE9PUDsKLSAgZWxzZQotICAgIHNyYy0+cGVuZGluZ19jbWQgPSBDTURfV0FJVDsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZ290IGNvbW1hbmQgJXMiLCBjbWRfdG9fc3RyaW5nIChjbWQpKTsKLQotICAvKiB3ZSBnb3QgdGhlIG1lc3NhZ2UgY29tbWFuZCwgc28gZW5zdXJlIGNvbW11bmljYXRpb24gaXMgcG9zc2libGUgYWdhaW4gKi8KLSAgZ3N0X3J0c3BzcmNfY29ubmVjdGlvbl9mbHVzaCAoc3JjLCBGQUxTRSk7Ci0KLSAgc3JjLT5idXN5X2NtZCA9IGNtZDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgc3dpdGNoIChjbWQpIHsKLSAgICBjYXNlIENNRF9PUEVOOgotICAgICAgZ3N0X3J0c3BzcmNfb3BlbiAoc3JjLCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX1BMQVk6Ci0gICAgICBnc3RfcnRzcHNyY19wbGF5IChzcmMsICZzcmMtPnNlZ21lbnQsIFRSVUUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTURfUEFVU0U6Ci0gICAgICBnc3RfcnRzcHNyY19wYXVzZSAoc3JjLCBUUlVFKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ01EX0NMT1NFOgotICAgICAgZ3N0X3J0c3BzcmNfY2xvc2UgKHNyYywgVFJVRSwgRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDTURfTE9PUDoKLSAgICAgIGdzdF9ydHNwc3JjX2xvb3AgKHNyYyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENNRF9SRUNPTk5FQ1Q6Ci0gICAgICBnc3RfcnRzcHNyY19yZWNvbm5lY3QgKHNyYywgRkFMU0UpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICAvKiBhbmQgZ28gYmFjayB0byBzbGVlcCAqLwotICBpZiAoc3JjLT5wZW5kaW5nX2NtZCA9PSBDTURfV0FJVCkgewotICAgIGlmIChzcmMtPnRhc2spCi0gICAgICBnc3RfdGFza19wYXVzZSAoc3JjLT50YXNrKTsKLSAgfQotICAvKiByZXNldCB3YWl0aW5nICovCi0gIHNyYy0+YnVzeV9jbWQgPSBDTURfV0FJVDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3J0c3BzcmNfc3RhcnQgKEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInN0YXJ0aW5nIik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotCi0gIHNyYy0+cGVuZGluZ19jbWQgPSBDTURfV0FJVDsKLQotICBpZiAoc3JjLT50YXNrID09IE5VTEwpIHsKLSAgICBzcmMtPnRhc2sgPSBnc3RfdGFza19uZXcgKChHc3RUYXNrRnVuY3Rpb24pIGdzdF9ydHNwc3JjX3RocmVhZCwgc3JjLCBOVUxMKTsKLSAgICBpZiAoc3JjLT50YXNrID09IE5VTEwpCi0gICAgICBnb3RvIHRhc2tfZXJyb3I7Ci0KLSAgICBnc3RfdGFza19zZXRfbG9jayAoc3JjLT50YXNrLCBHU1RfUlRTUF9TVFJFQU1fR0VUX0xPQ0sgKHNyYykpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdGFza19lcnJvcjoKLSAgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgImZhaWxlZCB0byBjcmVhdGUgdGFzayIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3N0b3AgKEdzdFJUU1BTcmMgKiBzcmMpCi17Ci0gIEdzdFRhc2sgKnRhc2s7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAic3RvcHBpbmciKTsKLQotICAvKiBhbHNvIGNhbmNlbHMgcGVuZGluZyB0YXNrICovCi0gIGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQgKHNyYywgQ01EX1dBSVQsIENNRF9BTEwpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgaWYgKCh0YXNrID0gc3JjLT50YXNrKSkgewotICAgIHNyYy0+dGFzayA9IE5VTEw7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNyYyk7Ci0KLSAgICBnc3RfdGFza19zdG9wICh0YXNrKTsKLQotICAgIC8qIG1ha2Ugc3VyZSBpdCBpcyBub3QgcnVubmluZyAqLwotICAgIEdTVF9SVFNQX1NUUkVBTV9MT0NLIChzcmMpOwotICAgIEdTVF9SVFNQX1NUUkVBTV9VTkxPQ0sgKHNyYyk7Ci0KLSAgICAvKiBub3cgd2FpdCBmb3IgdGhlIHRhc2sgdG8gZmluaXNoICovCi0gICAgZ3N0X3Rhc2tfam9pbiAodGFzayk7Ci0KLSAgICAvKiBhbmQgZnJlZSB0aGUgdGFzayAqLwotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKHRhc2spKTsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICAvKiBlbnN1cmUgc3luY2hyb25vdXNseSBhbGwgaXMgY2xvc2VkIGFuZCBjbGVhbiAqLwotICBnc3RfcnRzcHNyY19jbG9zZSAoc3JjLCBGQUxTRSwgVFJVRSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3J0c3BzcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0UlRTUFNyYyAqcnRzcHNyYzsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJ0c3BzcmMgPSBHU1RfUlRTUFNSQyAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBpZiAoIWdzdF9ydHNwc3JjX3N0YXJ0IChydHNwc3JjKSkKLSAgICAgICAgZ290byBzdGFydF9mYWlsZWQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgLyogaW5pdCBzb21lIHN0YXRlICovCi0gICAgICBydHNwc3JjLT5jdXJfcHJvdG9jb2xzID0gcnRzcHNyYy0+cHJvdG9jb2xzOwotICAgICAgLyogZmlyc3QgYXR0ZW1wdCwgZG9uJ3QgaWdub3JlIHRpbWVvdXRzICovCi0gICAgICBydHNwc3JjLT5pZ25vcmVfdGltZW91dCA9IEZBTFNFOwotICAgICAgcnRzcHNyYy0+b3Blbl9lcnJvciA9IEZBTFNFOwotICAgICAgZ3N0X3J0c3BzcmNfbG9vcF9zZW5kX2NtZCAocnRzcHNyYywgQ01EX09QRU4sIDApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgc2V0X21hbmFnZXJfYnVmZmVyX21vZGUgKHJ0c3BzcmMpOwotICAgICAgLyogZmFsbC10aHJvdWdoICovCi0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgLyogdW5ibG9jayB0aGUgdGNwIHRhc2tzIGFuZCBtYWtlIHRoZSBsb29wIHdhaXRpbmcgKi8KLSAgICAgIGlmIChnc3RfcnRzcHNyY19sb29wX3NlbmRfY21kIChydHNwc3JjLCBDTURfV0FJVCwgQ01EX0xPT1ApKSB7Ci0gICAgICAgIC8qIG1ha2Ugc3VyZSBpdCBpcyB3YWl0aW5nIGJlZm9yZSB3ZSBzZW5kIFBBVVNFIG9yIFBMQVkgYmVsb3cgKi8KLSAgICAgICAgR1NUX1JUU1BfU1RSRUFNX0xPQ0sgKHJ0c3BzcmMpOwotICAgICAgICBHU1RfUlRTUF9TVFJFQU1fVU5MT0NLIChydHNwc3JjKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBkb25lOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUExBWUlORzoKLSAgICAgIGdzdF9ydHNwc3JjX2xvb3Bfc2VuZF9jbWQgKHJ0c3BzcmMsIENNRF9QTEFZLCAwKTsKLSAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIC8qIHNlbmQgcGF1c2UgcmVxdWVzdCBhbmQga2VlcCB0aGUgaWRsZSB0YXNrIGFyb3VuZCAqLwotICAgICAgZ3N0X3J0c3BzcmNfbG9vcF9zZW5kX2NtZCAocnRzcHNyYywgQ01EX1BBVVNFLCBDTURfTE9PUCk7Ci0gICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3J0c3BzcmNfbG9vcF9zZW5kX2NtZCAocnRzcHNyYywgQ01EX0NMT1NFLCBDTURfUEFVU0UpOwotICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBnc3RfcnRzcHNyY19zdG9wIChydHNwc3JjKTsKLSAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBPdGhlcndpc2UgaXQncyBzdWNjZXNzLCB3ZSBkb24ndCB3YW50IHRvIHJldHVybiBzcHVyaW91cwotICAgICAgICogTk9fUFJFUk9MTCBvciBBU1lOQyBmcm9tIGludGVybmFsIGVsZW1lbnRzIGFzIHdlIGNhcmUgZm9yCi0gICAgICAgKiBzdGF0ZSBjaGFuZ2VzIG91cnNlbHZlcyBoZXJlCi0gICAgICAgKgotICAgICAgICogVGhpcyBpcyB0byBjYXRjaCBQQVVTRUQtPlBBVVNFRCBhbmQgUExBWUlORy0+UExBWUlORyB0cmFuc2l0aW9ucy4KLSAgICAgICAqLwotICAgICAgaWYgKEdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQgKHRyYW5zaXRpb24pID09IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICAgICAgYnJlYWs7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLQotc3RhcnRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocnRzcHNyYywgInN0YXJ0IGZhaWxlZCIpOwotICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfcnRzcHNyY19zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RSVFNQU3JjICpydHNwc3JjOwotCi0gIHJ0c3BzcmMgPSBHU1RfUlRTUFNSQyAoZWxlbWVudCk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9JU19ET1dOU1RSRUFNIChldmVudCkpIHsKLSAgICByZXMgPSBnc3RfcnRzcHNyY19wdXNoX2V2ZW50IChydHNwc3JjLCBldmVudCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNlbmRfZXZlbnQgKGVsZW1lbnQsIGV2ZW50KTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19Ci0KLQotLyoqKiBHU1RVUklIQU5ETEVSIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgR3N0VVJJVHlwZQotZ3N0X3J0c3BzcmNfdXJpX2dldF90eXBlIChHVHlwZSB0eXBlKQotewotICByZXR1cm4gR1NUX1VSSV9TUkM7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqY29uc3QgKgotZ3N0X3J0c3BzcmNfdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqcHJvdG9jb2xzW10gPQotICAgICAgeyAicnRzcCIsICJydHNwdSIsICJydHNwdCIsICJydHNwaCIsICJydHNwLXNkcCIsCi0gICAgInJ0c3BzIiwgInJ0c3BzdSIsICJydHNwc3QiLCAicnRzcHNoIiwgTlVMTAotICB9OwotCi0gIHJldHVybiBwcm90b2NvbHM7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfcnRzcHNyY191cmlfZ2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpCi17Ci0gIEdzdFJUU1BTcmMgKnNyYyA9IEdTVF9SVFNQU1JDIChoYW5kbGVyKTsKLQotICAvKiBGSVhNRTogbWFrZSB0aHJlYWQtc2FmZSAqLwotICByZXR1cm4gZ19zdHJkdXAgKHNyYy0+Y29ubmluZm8ubG9jYXRpb24pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9ydHNwc3JjX3VyaV9zZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlciwgY29uc3QgZ2NoYXIgKiB1cmksCi0gICAgR0Vycm9yICoqIGVycm9yKQotewotICBHc3RSVFNQU3JjICpzcmM7Ci0gIEdzdFJUU1BSZXN1bHQgcmVzOwotICBHc3RTRFBSZXN1bHQgc3JlczsKLSAgR3N0UlRTUFVybCAqbmV3dXJsID0gTlVMTDsKLSAgR3N0U0RQTWVzc2FnZSAqc2RwID0gTlVMTDsKLQotICBzcmMgPSBHU1RfUlRTUFNSQyAoaGFuZGxlcik7Ci0KLSAgLyogc2FtZSBVUkksIHdlJ3JlIGZpbmUgKi8KLSAgaWYgKHNyYy0+Y29ubmluZm8ubG9jYXRpb24gJiYgdXJpICYmICFzdHJjbXAgKHVyaSwgc3JjLT5jb25uaW5mby5sb2NhdGlvbikpCi0gICAgZ290byB3YXNfb2s7Ci0KLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHVyaSwgInJ0c3Atc2RwOi8vIikpIHsKLSAgICBzcmVzID0gZ3N0X3NkcF9tZXNzYWdlX25ldyAoJnNkcCk7Ci0gICAgaWYgKHNyZXMgPCAwKQotICAgICAgZ290byBzZHBfZmFpbGVkOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicGFyc2luZyBTRFAgbWVzc2FnZSIpOwotICAgIHNyZXMgPSBnc3Rfc2RwX21lc3NhZ2VfcGFyc2VfdXJpICh1cmksIHNkcCk7Ci0gICAgaWYgKHNyZXMgPCAwKQotICAgICAgZ290byBpbnZhbGlkX3NkcDsKLSAgfSBlbHNlIHsKLSAgICAvKiB0cnkgdG8gcGFyc2UgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJwYXJzaW5nIFVSSSIpOwotICAgIGlmICgocmVzID0gZ3N0X3J0c3BfdXJsX3BhcnNlICh1cmksICZuZXd1cmwpKSA8IDApCi0gICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICB9Ci0KLSAgLyogaWYgd29ya2VkLCBmcmVlIHByZXZpb3VzIGFuZCBzdG9yZSBuZXcgdXJsIG9iamVjdCBhbG9uZyB3aXRoIHRoZSBvcmlnaW5hbAotICAgKiBsb2NhdGlvbi4gKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiY29uZmlndXJpbmcgVVJJIik7Ci0gIGdfZnJlZSAoc3JjLT5jb25uaW5mby5sb2NhdGlvbik7Ci0gIHNyYy0+Y29ubmluZm8ubG9jYXRpb24gPSBnX3N0cmR1cCAodXJpKTsKLSAgZ3N0X3J0c3BfdXJsX2ZyZWUgKHNyYy0+Y29ubmluZm8udXJsKTsKLSAgc3JjLT5jb25uaW5mby51cmwgPSBuZXd1cmw7Ci0gIGdfZnJlZSAoc3JjLT5jb25uaW5mby51cmxfc3RyKTsKLSAgaWYgKG5ld3VybCkKLSAgICBzcmMtPmNvbm5pbmZvLnVybF9zdHIgPSBnc3RfcnRzcF91cmxfZ2V0X3JlcXVlc3RfdXJpIChzcmMtPmNvbm5pbmZvLnVybCk7Ci0gIGVsc2UKLSAgICBzcmMtPmNvbm5pbmZvLnVybF9zdHIgPSBOVUxMOwotCi0gIGlmIChzcmMtPnNkcCkKLSAgICBnc3Rfc2RwX21lc3NhZ2VfZnJlZSAoc3JjLT5zZHApOwotICBzcmMtPnNkcCA9IHNkcDsKLSAgc3JjLT5mcm9tX3NkcCA9IHNkcCAhPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInNldCB1cmk6ICVzIiwgR1NUX1NUUl9OVUxMICh1cmkpKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAicmVxdWVzdCB1cmkgaXM6ICVzIiwKLSAgICAgIEdTVF9TVFJfTlVMTCAoc3JjLT5jb25uaW5mby51cmxfc3RyKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogU3BlY2lhbCBjYXNlcyAqLwotd2FzX29rOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiVVJJIHdhcyBvazogJyVzJyIsIEdTVF9TVFJfTlVMTCAodXJpKSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLXNkcF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJDb3VsZCBub3QgY3JlYXRlIG5ldyBTRFAgKCVkKSIsIHNyZXMpOwotICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX0JBRF9VUkksCi0gICAgICAgICJDb3VsZCBub3QgY3JlYXRlIFNEUCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9zZHA6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzcmMsICJOb3QgYSB2YWxpZCBTRFAgKCVkKSAnJXMnIiwgc3JlcywKLSAgICAgICAgR1NUX1NUUl9OVUxMICh1cmkpKTsKLSAgICBnc3Rfc2RwX21lc3NhZ2VfZnJlZSAoc2RwKTsKLSAgICBnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLAotICAgICAgICAiSW52YWxpZCBTRFAiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXBhcnNlX2Vycm9yOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc3JjLCAiTm90IGEgdmFsaWQgUlRTUCB1cmwgJyVzJyAoJWQpIiwKLSAgICAgICAgR1NUX1NUUl9OVUxMICh1cmkpLCByZXMpOwotICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX0JBRF9VUkksCi0gICAgICAgICJJbnZhbGlkIFJUU1AgVVJJIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfcnRzcHNyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X3J0c3BzcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF9ydHNwc3JjX3VyaV9nZXRfcHJvdG9jb2xzOwotICBpZmFjZS0+Z2V0X3VyaSA9IGdzdF9ydHNwc3JjX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF9ydHNwc3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oIGIvZ3N0L3J0c3AvZ3N0cnRzcHNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJmMzA1Li4wMDAwMDAwCi0tLSBhL2dzdC9ydHNwL2dzdHJ0c3BzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDwyMDA2PiBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKgotICogVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIFNvdXJjZSBDb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLgotICogU2VlIGZ1cnRoZXIgZXhwbGFuYXRpb24gYXR0YWNoZWQgaW4gTGljZW5zZSBTdGF0ZW1lbnQgKGRpc3RyaWJ1dGVkIGluIHRoZSBmaWxlCi0gKiBMSUNFTlNFKS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9SVFNQU1JDX0hfXwotI2RlZmluZSBfX0dTVF9SVFNQU1JDX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNpbmNsdWRlIDxnc3QvcnRzcC9ydHNwLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi0jaW5jbHVkZSAiZ3N0cnRzcGV4dC5oIgotCi0jZGVmaW5lIEdTVF9UWVBFX1JUU1BTUkMgXAotICAoZ3N0X3J0c3BzcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1JUU1BTUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9SVFNQU1JDLEdzdFJUU1BTcmMpKQotI2RlZmluZSBHU1RfUlRTUFNSQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9SVFNQU1JDLEdzdFJUU1BTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19SVFNQU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfUlRTUFNSQykpCi0jZGVmaW5lIEdTVF9JU19SVFNQU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1JUU1BTUkMpKQotI2RlZmluZSBHU1RfUlRTUFNSQ19DQVNUKG9iaikgXAotICAoKEdzdFJUU1BTcmMgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFJUU1BTcmMgR3N0UlRTUFNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFNQU3JjQ2xhc3MgR3N0UlRTUFNyY0NsYXNzOwotCi0jZGVmaW5lIEdTVF9SVFNQX1NUQVRFX0dFVF9MT0NLKHJ0c3ApICAgICgmR1NUX1JUU1BTUkNfQ0FTVChydHNwKS0+c3RhdGVfcmVjX2xvY2spCi0jZGVmaW5lIEdTVF9SVFNQX1NUQVRFX0xPQ0socnRzcCkgICAgICAgIChnX3JlY19tdXRleF9sb2NrIChHU1RfUlRTUF9TVEFURV9HRVRfTE9DSyhydHNwKSkpCi0jZGVmaW5lIEdTVF9SVFNQX1NUQVRFX1VOTE9DSyhydHNwKSAgICAgIChnX3JlY19tdXRleF91bmxvY2sgKEdTVF9SVFNQX1NUQVRFX0dFVF9MT0NLKHJ0c3ApKSkKLQotI2RlZmluZSBHU1RfUlRTUF9TVFJFQU1fR0VUX0xPQ0socnRzcCkgICAoJkdTVF9SVFNQU1JDX0NBU1QocnRzcCktPnN0cmVhbV9yZWNfbG9jaykKLSNkZWZpbmUgR1NUX1JUU1BfU1RSRUFNX0xPQ0socnRzcCkgICAgICAgKGdfcmVjX211dGV4X2xvY2sgKEdTVF9SVFNQX1NUUkVBTV9HRVRfTE9DSyhydHNwKSkpCi0jZGVmaW5lIEdTVF9SVFNQX1NUUkVBTV9VTkxPQ0socnRzcCkgICAgIChnX3JlY19tdXRleF91bmxvY2sgKEdTVF9SVFNQX1NUUkVBTV9HRVRfTE9DSyhydHNwKSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSVFNQQ29ubkluZm8gR3N0UlRTUENvbm5JbmZvOwotCi1zdHJ1Y3QgX0dzdFJUU1BDb25uSW5mbyB7Ci0gIGdjaGFyICAgICAgICAgICAgICAqbG9jYXRpb247Ci0gIEdzdFJUU1BVcmwgICAgICAgICAqdXJsOwotICBnY2hhciAgICAgICAgICAgICAgKnVybF9zdHI7Ci0gIEdzdFJUU1BDb25uZWN0aW9uICAqY29ubmVjdGlvbjsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICBjb25uZWN0ZWQ7Ci0gIGdib29sZWFuICAgICAgICAgICAgZmx1c2hpbmc7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0UlRTUFN0cmVhbSBHc3RSVFNQU3RyZWFtOwotCi1zdHJ1Y3QgX0dzdFJUU1BTdHJlYW0gewotICBnaW50ICAgICAgICAgIGlkOwotCi0gIEdzdFJUU1BTcmMgICAqcGFyZW50OyAvKiBwYXJlbnQsIG5vIGV4dHJhIHJlZiB0byBwYXJlbnQgaXMgdGFrZW4gKi8KLQotICAvKiBwYWQgd2UgZXhwb3NlIG9yIE5VTEwgd2hlbiBpdCBkb2VzIG5vdCBoYXZlIGFuIGFjdHVhbCBwYWQgKi8KLSAgR3N0UGFkICAgICAgICpzcmNwYWQ7Ci0gIEdzdEZsb3dSZXR1cm4gbGFzdF9yZXQ7Ci0gIGdib29sZWFuICAgICAgYWRkZWQ7Ci0gIGdib29sZWFuICAgICAgc2V0dXA7Ci0gIGdib29sZWFuICAgICAgc2tpcHBlZDsKLSAgZ2Jvb2xlYW4gICAgICBlb3M7Ci0gIGdib29sZWFuICAgICAgZGlzY29udDsKLSAgZ2Jvb2xlYW4gICAgICBuZWVkX2NhcHM7Ci0KLSAgLyogZm9yIGludGVybGVhdmVkIG1vZGUgKi8KLSAgZ3VpbnQ4ICAgICAgICBjaGFubmVsWzJdOwotICBHc3RQYWQgICAgICAgKmNoYW5uZWxwYWRbMl07Ci0KLSAgLyogb3VyIHVkcCBzb3VyY2VzICovCi0gIEdzdEVsZW1lbnQgICAqdWRwc3JjWzJdOwotICBHc3RQYWQgICAgICAgKmJsb2NrZWRwYWQ7Ci0gIGd1bG9uZyAgICAgICAgYmxvY2tpZDsKLSAgZ2Jvb2xlYW4gICAgICBpc19pcHY2OwotCi0gIC8qIG91ciB1ZHAgc2lua3MgYmFjayB0byB0aGUgc2VydmVyICovCi0gIEdzdEVsZW1lbnQgICAqdWRwc2lua1syXTsKLSAgR3N0UGFkICAgICAgICpydGNwcGFkOwotCi0gIC8qIGZha2VzcmMgZm9yIHNlbmRpbmcgZHVtbXkgZGF0YSAqLwotICBHc3RFbGVtZW50ICAgKmZha2VzcmM7Ci0KLSAgLyogc3RhdGUgKi8KLSAgZ3VpbnQgICAgICAgICBwb3J0OwotICBnYm9vbGVhbiAgICAgIGNvbnRhaW5lcjsKLSAgZ2Jvb2xlYW4gICAgICBpc19yZWFsOwotICBndWludDggICAgICAgIGRlZmF1bHRfcHQ7Ci0gIEdzdFJUU1BQcm9maWxlIHByb2ZpbGU7Ci0gIEdBcnJheSAgICAgICAqcHRtYXA7Ci0gIC8qIG9yaWdpbmFsIGNvbnRyb2wgdXJsICovCi0gIGdjaGFyICAgICAgICAqY29udHJvbF91cmw7Ci0gIGd1aW50MzIgICAgICAgc3NyYzsKLSAgZ3VpbnQzMiAgICAgICBzZXFiYXNlOwotICBndWludDY0ICAgICAgIHRpbWViYXNlOwotICBHc3RFbGVtZW50ICAgKnNydHBkZWM7Ci0gIEdzdENhcHMgICAgICAqc3J0Y3BwYXJhbXM7Ci0gIEdzdEVsZW1lbnQgICAqc3J0cGVuYzsKLSAgZ3VpbnQzMiAgICAgICBzZW5kX3NzcmM7Ci0KLSAgLyogcGVyIHN0cmVhbSBjb25uZWN0aW9uICovCi0gIEdzdFJUU1BDb25uSW5mbyAgY29ubmluZm87Ci0KLSAgLyogc2Vzc2lvbiAqLwotICBHT2JqZWN0ICAgICAgKnNlc3Npb247Ci0KLSAgLyogc3J0cCBrZXkgbWFuYWdlbWVudCAqLwotICBHc3RNSUtFWU1lc3NhZ2UgKm1pa2V5OwotCi0gIC8qIGJhbmR3aWR0aCAqLwotICBndWludCAgICAgICAgIGFzX2JhbmR3aWR0aDsKLSAgZ3VpbnQgICAgICAgICByc19iYW5kd2lkdGg7Ci0gIGd1aW50ICAgICAgICAgcnJfYmFuZHdpZHRoOwotCi0gIC8qIGRlc3RpbmF0aW9uICovCi0gIGdjaGFyICAgICAgICAqZGVzdGluYXRpb247Ci0gIGdib29sZWFuICAgICAgaXNfbXVsdGljYXN0OwotICBndWludCAgICAgICAgIHR0bDsKLQotICBHc3RTdHJ1Y3R1cmUgICAgICpydHhfcHRfbWFwOwotfTsKLQotLyoqCi0gKiBHc3RSVFNQTmF0TWV0aG9kOgotICogQEdTVF9SVFNQX05BVF9OT05FOiBub25lCi0gKiBAR1NUX1JUU1BfTkFUX0RVTU1ZOiBzZW5kIGR1bW15IHBhY2tldHMKLSAqCi0gKiBEaWZmZXJlbnQgbWV0aG9kcyBmb3IgdHJ5aW5nIHRvIHRyYXZlcnNlIGZpcmV3YWxscy4KLSAqLwotdHlwZWRlZiBlbnVtCi17Ci0gIEdTVF9SVFNQX05BVF9OT05FLAotICBHU1RfUlRTUF9OQVRfRFVNTVkKLX0gR3N0UlRTUE5hdE1ldGhvZDsKLQotc3RydWN0IF9Hc3RSVFNQU3JjIHsKLSAgR3N0QmluICAgICAgICAgICBwYXJlbnQ7Ci0KLSAgLyogdGFzayBhbmQgbXV0ZXggZm9yIGludGVybGVhdmVkIG1vZGUgKi8KLSAgZ2Jvb2xlYW4gICAgICAgICBpbnRlcmxlYXZlZDsKLSAgR3N0VGFzayAgICAgICAgICp0YXNrOwotICBHUmVjTXV0ZXggICAgICAgIHN0cmVhbV9yZWNfbG9jazsKLSAgR3N0U2VnbWVudCAgICAgICBzZWdtZW50OwotICBnYm9vbGVhbiAgICAgICAgIHJ1bm5pbmc7Ci0gIGdib29sZWFuICAgICAgICAgbmVlZF9yYW5nZTsKLSAgZ2Jvb2xlYW4gICAgICAgICBza2lwOwotICBnaW50ICAgICAgICAgICAgIGZyZWVfY2hhbm5lbDsKLSAgZ2Jvb2xlYW4gICAgICAgICBuZWVkX3NlZ21lbnQ7Ci0gIEdzdENsb2NrVGltZSAgICAgYmFzZV90aW1lOwotCi0gIC8qIFVEUCBtb2RlIGxvb3AgKi8KLSAgZ2ludCAgICAgICAgICAgICBwZW5kaW5nX2NtZDsKLSAgZ2ludCAgICAgICAgICAgICBidXN5X2NtZDsKLSAgZ2Jvb2xlYW4gICAgICAgICBpZ25vcmVfdGltZW91dDsKLSAgZ2Jvb2xlYW4gICAgICAgICBvcGVuX2Vycm9yOwotCi0gIC8qIG11dGV4IGZvciBwcm90ZWN0aW5nIHN0YXRlIGNoYW5nZXMgKi8KLSAgR1JlY011dGV4ICAgICAgICBzdGF0ZV9yZWNfbG9jazsKLQotICBHc3RTRFBNZXNzYWdlICAgKnNkcDsKLSAgZ2Jvb2xlYW4gICAgICAgICBmcm9tX3NkcDsKLSAgR0xpc3QgICAgICAgICAgICpzdHJlYW1zOwotICBHc3RTdHJ1Y3R1cmUgICAgKnByb3BzOwotICBnYm9vbGVhbiAgICAgICAgIG5lZWRfYWN0aXZhdGU7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBHc3RSVFNQTG93ZXJUcmFucyBwcm90b2NvbHM7Ci0gIGdib29sZWFuICAgICAgICAgIGRlYnVnOwotICBndWludCAgICAgICAgICAgICByZXRyeTsKLSAgZ3VpbnQ2NCAgICAgICAgICAgdWRwX3RpbWVvdXQ7Ci0gIEdUaW1lVmFsICAgICAgICAgIHRjcF90aW1lb3V0OwotICBHVGltZVZhbCAgICAgICAgICpwdGNwX3RpbWVvdXQ7Ci0gIGd1aW50ICAgICAgICAgICAgIGxhdGVuY3k7Ci0gIGdib29sZWFuICAgICAgICAgIGRyb3Bfb25fbGF0ZW5jeTsKLSAgZ3VpbnQ2NCAgICAgICAgICAgY29ubmVjdGlvbl9zcGVlZDsKLSAgR3N0UlRTUE5hdE1ldGhvZCAgbmF0X21ldGhvZDsKLSAgZ2Jvb2xlYW4gICAgICAgICAgZG9fcnRjcDsKLSAgZ2Jvb2xlYW4gICAgICAgICAgZG9fcnRzcF9rZWVwX2FsaXZlOwotICBnY2hhciAgICAgICAgICAgICpwcm94eV9ob3N0OwotICBndWludCAgICAgICAgICAgICBwcm94eV9wb3J0OwotICBnY2hhciAgICAgICAgICAgICpwcm94eV91c2VyOyAgICAgICAgLyogZnJvbSB1cmwgb3IgcHJvcGVydHkgKi8KLSAgZ2NoYXIgICAgICAgICAgICAqcHJveHlfcGFzc3dkOyAgICAgIC8qIGZyb20gdXJsIG9yIHByb3BlcnR5ICovCi0gIGdjaGFyICAgICAgICAgICAgKnByb3BfcHJveHlfaWQ7ICAgICAvKiBzZXQgdmlhIHByb3BlcnR5ICovCi0gIGdjaGFyICAgICAgICAgICAgKnByb3BfcHJveHlfcHc7ICAgICAvKiBzZXQgdmlhIHByb3BlcnR5ICovCi0gIGd1aW50ICAgICAgICAgICAgIHJ0cF9ibG9ja3NpemU7Ci0gIGdjaGFyICAgICAgICAgICAgKnVzZXJfaWQ7Ci0gIGdjaGFyICAgICAgICAgICAgKnVzZXJfcHc7Ci0gIGdpbnQgICAgICAgICAgICAgIGJ1ZmZlcl9tb2RlOwotICBHc3RSVFNQUmFuZ2UgICAgICBjbGllbnRfcG9ydF9yYW5nZTsKLSAgZ2ludCAgICAgICAgICAgICAgdWRwX2J1ZmZlcl9zaXplOwotICBnYm9vbGVhbiAgICAgICAgICBzaG9ydF9oZWFkZXI7Ci0gIGd1aW50ICAgICAgICAgICAgIHByb2JhdGlvbjsKLSAgZ2Jvb2xlYW4gICAgICAgICAgdWRwX3JlY29ubmVjdDsKLSAgZ2NoYXIgICAgICAgICAgICAqbXVsdGlfaWZhY2U7Ci0gIGdib29sZWFuICAgICAgICAgIG50cF9zeW5jOwotICBnYm9vbGVhbiAgICAgICAgICB1c2VfcGlwZWxpbmVfY2xvY2s7Ci0gIEdzdFN0cnVjdHVyZSAgICAgKnNkZXM7Ci0gIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIHRsc192YWxpZGF0aW9uX2ZsYWdzOwotICBHVGxzRGF0YWJhc2UgICAgICp0bHNfZGF0YWJhc2U7Ci0gIEdUbHNJbnRlcmFjdGlvbiAgKnRsc19pbnRlcmFjdGlvbjsKLSAgZ2Jvb2xlYW4gICAgICAgICAgZG9fcmV0cmFuc21pc3Npb247Ci0gIGdpbnQgICAgICAgICAgICAgIG50cF90aW1lX3NvdXJjZTsKLSAgZ2NoYXIgICAgICAgICAgICAqdXNlcl9hZ2VudDsKLSAgR3N0Q2xvY2tUaW1lICAgICAgbWF4X3J0Y3BfcnRwX3RpbWVfZGlmZjsKLSAgZ2Jvb2xlYW4gICAgICAgICAgcmZjNzI3M19zeW5jOwotCi0gIC8qIHN0YXRlICovCi0gIEdzdFJUU1BTdGF0ZSAgICAgICBzdGF0ZTsKLSAgZ2NoYXIgICAgICAgICAgICAgKmNvbnRlbnRfYmFzZTsKLSAgR3N0UlRTUExvd2VyVHJhbnMgIGN1cl9wcm90b2NvbHM7Ci0gIGdib29sZWFuICAgICAgICAgICB0cmllZF91cmxfYXV0aDsKLSAgZ2NoYXIgICAgICAgICAgICAgKmFkZHI7Ci0gIGdib29sZWFuICAgICAgICAgICBuZWVkX3JlZGlyZWN0OwotICBHc3RSVFNQVGltZVJhbmdlICAqcmFuZ2U7Ci0gIGdjaGFyICAgICAgICAgICAgICpjb250cm9sOwotICBndWludCAgICAgICAgICAgICAgbmV4dF9wb3J0X251bTsKLSAgR3N0Q2xvY2sgICAgICAgICAgKnByb3ZpZGVkX2Nsb2NrOwotCi0gIC8qIHN1cHBvcnRlZCBtZXRob2RzICovCi0gIGdpbnQgICAgICAgICAgICAgICBtZXRob2RzOwotCi0gIGdib29sZWFuICAgICAgICAgICBzZWVrYWJsZTsKLSAgR3N0Q2xvY2tUaW1lICAgICAgIGxhc3RfcG9zOwotCi0gIC8qIHNlc3Npb24gbWFuYWdlbWVudCAqLwotICBHc3RFbGVtZW50ICAgICAgKm1hbmFnZXI7Ci0gIGd1bG9uZyAgICAgICAgICAgbWFuYWdlcl9zaWdfaWQ7Ci0gIGd1bG9uZyAgICAgICAgICAgbWFuYWdlcl9wdG1hcF9pZDsKLSAgZ2Jvb2xlYW4gICAgICAgICB1c2VfYnVmZmVyaW5nOwotCi0gIEdzdFJUU1BDb25uSW5mbyAgY29ubmluZm87Ci0KLSAgLyogYSBsaXN0IG9mIFJUU1AgZXh0ZW5zaW9ucyBhcyBHc3RFbGVtZW50ICovCi0gIEdzdFJUU1BFeHRlbnNpb25MaXN0ICAqZXh0ZW5zaW9uczsKLX07Ci0KLXN0cnVjdCBfR3N0UlRTUFNyY0NsYXNzIHsKLSAgR3N0QmluQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3J0c3BzcmNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9SVFNQU1JDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3NoYXBld2lwZS9NYWtlZmlsZS5hbSBiL2dzdC9zaGFwZXdpcGUvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZjE2NjIuLjAwMDAwMDAKLS0tIGEvZ3N0L3NoYXBld2lwZS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHNoYXBld2lwZS5sYQotCi1saWJnc3RzaGFwZXdpcGVfbGFfU09VUkNFUyA9IGdzdHNoYXBld2lwZS5jCi0KLWxpYmdzdHNoYXBld2lwZV9sYV9DRkxBR1MgPSAkKEdJT19DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLWxpYmdzdHNoYXBld2lwZV9sYV9MSUJBREQgPSAkKEdJT19MSUJTKSAkKEdTVF9MSUJTKSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQAotbGliZ3N0c2hhcGV3aXBlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHNoYXBld2lwZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHNoYXBld2lwZS5oCmRpZmYgLS1naXQgYS9nc3Qvc2hhcGV3aXBlL01ha2VmaWxlLmluIGIvZ3N0L3NoYXBld2lwZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVjYmM4ZS4uMDAwMDAwMAotLS0gYS9nc3Qvc2hhcGV3aXBlL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTA5ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC9zaGFwZXdpcGUKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RzaGFwZXdpcGVfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1hbV9saWJnc3RzaGFwZXdpcGVfbGFfT0JKRUNUUyA9IGxpYmdzdHNoYXBld2lwZV9sYS1nc3RzaGFwZXdpcGUubG8KLWxpYmdzdHNoYXBld2lwZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RzaGFwZXdpcGVfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHNoYXBld2lwZV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdHNoYXBld2lwZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHNoYXBld2lwZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RzaGFwZXdpcGVfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0c2hhcGV3aXBlX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHNoYXBld2lwZV9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RzaGFwZXdpcGUubGEKLWxpYmdzdHNoYXBld2lwZV9sYV9TT1VSQ0VTID0gZ3N0c2hhcGV3aXBlLmMKLWxpYmdzdHNoYXBld2lwZV9sYV9DRkxBR1MgPSAkKEdJT19DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLWxpYmdzdHNoYXBld2lwZV9sYV9MSUJBREQgPSAkKEdJT19MSUJTKSAkKEdTVF9MSUJTKSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQAotbGliZ3N0c2hhcGV3aXBlX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHNoYXBld2lwZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3RzaGFwZXdpcGUuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3NoYXBld2lwZS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3Qvc2hhcGV3aXBlL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0c2hhcGV3aXBlLmxhOiAkKGxpYmdzdHNoYXBld2lwZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHNoYXBld2lwZV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0c2hhcGV3aXBlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RzaGFwZXdpcGVfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHNoYXBld2lwZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHNoYXBld2lwZV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHNoYXBld2lwZV9sYS1nc3RzaGFwZXdpcGUuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHNoYXBld2lwZV9sYS1nc3RzaGFwZXdpcGUubG86IGdzdHNoYXBld2lwZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c2hhcGV3aXBlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNoYXBld2lwZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c2hhcGV3aXBlX2xhLWdzdHNoYXBld2lwZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c2hhcGV3aXBlX2xhLWdzdHNoYXBld2lwZS5UcG8gLWMgLW8gbGliZ3N0c2hhcGV3aXBlX2xhLWdzdHNoYXBld2lwZS5sbyBgdGVzdCAtZiAnZ3N0c2hhcGV3aXBlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNoYXBld2lwZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RzaGFwZXdpcGVfbGEtZ3N0c2hhcGV3aXBlLlRwbyAkKERFUERJUikvbGliZ3N0c2hhcGV3aXBlX2xhLWdzdHNoYXBld2lwZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzaGFwZXdpcGUuYycgb2JqZWN0PSdsaWJnc3RzaGFwZXdpcGVfbGEtZ3N0c2hhcGV3aXBlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c2hhcGV3aXBlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNoYXBld2lwZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzaGFwZXdpcGVfbGEtZ3N0c2hhcGV3aXBlLmxvIGB0ZXN0IC1mICdnc3RzaGFwZXdpcGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c2hhcGV3aXBlLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYyBiL2dzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMGRmZGEuLjAwMDAwMDAKLS0tIGEvZ3N0L3NoYXBld2lwZS9nc3RzaGFwZXdpcGUuYworKysgL2Rldi9udWxsCkBAIC0xLDExNTAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zaGFwZXdpcGUKLSAqCi0gKiBUaGUgc2hhcGV3aXBlIGVsZW1lbnQgcHJvdmlkZXMgY3VzdG9tIHRyYW5zaXRpb25zIG9uIHZpZGVvIHN0cmVhbXMKLSAqIGJhc2VkIG9uIGEgZ3JheXNjYWxlIGJpdG1hcC4gVGhlIHN0YXRlIG9mIHRoZSB0cmFuc2l0aW9uIGNhbiBiZQotICogY29udHJvbGxlZCBieSB0aGUgcG9zaXRpb24gcHJvcGVydHkgYW5kIGFuIG9wdGlvbmFsIGJsZW5kZWQgYm9yZGVyCi0gKiBjYW4gYmUgYWRkZWQgYnkgdGhlIGJvcmRlciBwcm9wZXJ0eS4KLSAqCi0gKiBUcmFuc2l0aW9uIGJpdG1hcHMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB0aGUKLSAqIDx1bGluayB1cmw9Imh0dHA6Ly9jaW5lbGVycmEub3JnL3RyYW5zaXRpb25zLnBocCI+Q2luZWxlcnJhIHRyYW5zaXRpb248L3VsaW5rPgotICogcGFnZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgdmlkZW8veC1yYXcsZm9ybWF0PUFZVVYsd2lkdGg9NjQwLGhlaWdodD00ODAgISBzaGFwZXdpcGUgcG9zaXRpb249MC41IG5hbWU9c2hhcGUgISB2aWRlb21peGVyIG5hbWU9bWl4ZXIgISB2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rICAgICBmaWxlc3JjIGxvY2F0aW9uPW1hc2sucG5nICEgdHlwZWZpbmQgISBkZWNvZGViaW4gISB2aWRlb2NvbnZlcnQgISB2aWRlb3NjYWxlICEgcXVldWUgISBzaGFwZS5tYXNrX3NpbmsgICAgdmlkZW90ZXN0c3JjIHBhdHRlcm49c25vdyAhIHZpZGVvL3gtcmF3LGZvcm1hdD1BWVVWLHdpZHRoPTY0MCxoZWlnaHQ9NDgwICEgcXVldWUgISBtaXhlci4KLSAqIF18IFRoaXMgcGlwZWxpbmUgYWRkcyB0aGUgdHJhbnNpdGlvbiBmcm9tIG1hc2sucG5nIHdpdGggcG9zaXRpb24gMC41IHRvIGFuIFNNUFRFIHRlc3Qgc2NyZWVuIGFuZCBzbm93LgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3RzaGFwZXdpcGUuaCIKLQotc3RhdGljIHZvaWQgZ3N0X3NoYXBlX3dpcGVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3NoYXBlX3dpcGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NoYXBlX3dpcGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc2hhcGVfd2lwZV9yZXNldCAoR3N0U2hhcGVXaXBlICogc2VsZik7Ci1zdGF0aWMgdm9pZCBnc3Rfc2hhcGVfd2lwZV91cGRhdGVfcW9zIChHc3RTaGFwZVdpcGUgKiBzZWxmLCBnZG91YmxlIHByb3BvcnRpb24sCi0gICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmLCBHc3RDbG9ja1RpbWUgdGltZSk7Ci1zdGF0aWMgdm9pZCBnc3Rfc2hhcGVfd2lwZV9yZXNldF9xb3MgKEdzdFNoYXBlV2lwZSAqIHNlbGYpOwotc3RhdGljIHZvaWQgZ3N0X3NoYXBlX3dpcGVfcmVhZF9xb3MgKEdzdFNoYXBlV2lwZSAqIHNlbGYsIGdkb3VibGUgKiBwcm9wb3J0aW9uLAotICAgIEdzdENsb2NrVGltZSAqIHRpbWUpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3NoYXBlX3dpcGVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3NoYXBlX3dpcGVfdmlkZW9fc2lua19jaGFpbiAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2hhcGVfd2lwZV92aWRlb19zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2hhcGVfd2lwZV92aWRlb19zaW5rX3NldGNhcHMgKEdzdFNoYXBlV2lwZSAqIHNlbGYsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9zaGFwZV93aXBlX3ZpZGVvX3NpbmtfZ2V0Y2FwcyAoR3N0U2hhcGVXaXBlICogc2VsZiwKLSAgICBHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9zaGFwZV93aXBlX3ZpZGVvX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwKLSAgICBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9zaGFwZV93aXBlX21hc2tfc2lua19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX3NldGNhcHMgKEdzdFNoYXBlV2lwZSAqIHNlbGYsCi0gICAgR3N0Q2FwcyAqIGNhcHMpOwotc3RhdGljIEdzdENhcHMgKmdzdF9zaGFwZV93aXBlX21hc2tfc2lua19nZXRjYXBzIChHc3RTaGFwZVdpcGUgKiBzZWxmLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX3F1ZXJ5IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc2hhcGVfd2lwZV9zcmNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIEdzdENhcHMgKmdzdF9zaGFwZV93aXBlX3NyY19nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9zaGFwZV93aXBlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1BPU0lUSU9OLAotICBQUk9QX0JPUkRFUgotfTsKLQotI2RlZmluZSBERUZBVUxUX1BPU0lUSU9OIDAuMAotI2RlZmluZSBERUZBVUxUX0JPUkRFUiAwLjAKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvX3NpbmtfcGFkX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgidmlkZW9fc2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSB9IikpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIG1hc2tfc2lua19wYWRfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgibWFza19zaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIEdSQVk4LCAiCi0gICAgICAgICJ3aWR0aCA9ICIgR1NUX1ZJREVPX1NJWkVfUkFOR0UgIiwgIgotICAgICAgICAiaGVpZ2h0ID0gIiBHU1RfVklERU9fU0laRV9SQU5HRSAiLCAiICJmcmFtZXJhdGUgPSAwLzEgOyAiCi0gICAgICAgICJ2aWRlby94LXJhdywgIiAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfVklERU9fTkUgKEdSQVkxNikgIiwgIgotICAgICAgICAid2lkdGggPSAiIEdTVF9WSURFT19TSVpFX1JBTkdFICIsICIKLSAgICAgICAgImhlaWdodCA9ICIgR1NUX1ZJREVPX1NJWkVfUkFOR0UgIiwgIiAiZnJhbWVyYXRlID0gMC8xIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3BhZF90ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEFZVVYsIEFSR0IsIEJHUkEsIEFCR1IsIFJHQkEgfSIpKSk7Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9zaGFwZV93aXBlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9zaGFwZV93aXBlX2RlYnVnCi0KLSNkZWZpbmUgZ3N0X3NoYXBlX3dpcGVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0U2hhcGVXaXBlLCBnc3Rfc2hhcGVfd2lwZSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hhcGVfd2lwZV9jbGFzc19pbml0IChHc3RTaGFwZVdpcGVDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3NoYXBlX3dpcGVfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zaGFwZV93aXBlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NoYXBlX3dpcGVfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUE9TSVRJT04sCi0gICAgICBnX3BhcmFtX3NwZWNfZmxvYXQgKCJwb3NpdGlvbiIsICJQb3NpdGlvbiIsICJQb3NpdGlvbiBvZiB0aGUgbWFzayIsCi0gICAgICAgICAgMC4wLCAxLjAsIERFRkFVTFRfUE9TSVRJT04sCi0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JPUkRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCAoImJvcmRlciIsICJCb3JkZXIiLCAiQm9yZGVyIG9mIHRoZSBtYXNrIiwKLSAgICAgICAgICAwLjAsIDEuMCwgREVGQVVMVF9CT1JERVIsCi0gICAgICAgICAgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NoYXBlX3dpcGVfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgIlNoYXBlIFdpcGUgdHJhbnNpdGlvbiBmaWx0ZXIiLAotICAgICAgIkZpbHRlci9FZGl0b3IvVmlkZW8iLAotICAgICAgIkFkZHMgYSBzaGFwZSB3aXBlIHRyYW5zaXRpb24gdG8gYSB2aWRlbyBzdHJlYW0iLAotICAgICAgIlNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnZpZGVvX3NpbmtfcGFkX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmbWFza19zaW5rX3BhZF90ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnNyY19wYWRfdGVtcGxhdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYXBlX3dpcGVfaW5pdCAoR3N0U2hhcGVXaXBlICogc2VsZikKLXsKLSAgc2VsZi0+dmlkZW9fc2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnZpZGVvX3NpbmtfcGFkX3RlbXBsYXRlLCAidmlkZW9fc2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2VsZi0+dmlkZW9fc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2hhcGVfd2lwZV92aWRlb19zaW5rX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzZWxmLT52aWRlb19zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zaGFwZV93aXBlX3ZpZGVvX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNlbGYtPnZpZGVvX3NpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NoYXBlX3dpcGVfdmlkZW9fc2lua19xdWVyeSkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnZpZGVvX3NpbmtwYWQpOwotCi0gIHNlbGYtPm1hc2tfc2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJm1hc2tfc2lua19wYWRfdGVtcGxhdGUsICJtYXNrX3NpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNlbGYtPm1hc2tfc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2hhcGVfd2lwZV9tYXNrX3NpbmtfY2hhaW4pKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNlbGYtPm1hc2tfc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2hhcGVfd2lwZV9tYXNrX3NpbmtfZXZlbnQpKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNlbGYtPm1hc2tfc2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc2hhcGVfd2lwZV9tYXNrX3NpbmtfcXVlcnkpKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNlbGYpLCBzZWxmLT5tYXNrX3NpbmtwYWQpOwotCi0gIHNlbGYtPnNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjX3BhZF90ZW1wbGF0ZSwgInNyYyIpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoc2VsZi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zaGFwZV93aXBlX3NyY19ldmVudCkpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc2VsZi0+c3JjcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zaGFwZV93aXBlX3NyY19xdWVyeSkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc2VsZiksIHNlbGYtPnNyY3BhZCk7Ci0KLSAgZ19tdXRleF9pbml0ICgmc2VsZi0+bWFza19tdXRleCk7Ci0gIGdfY29uZF9pbml0ICgmc2VsZi0+bWFza19jb25kKTsKLQotICBnc3Rfc2hhcGVfd2lwZV9yZXNldCAoc2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hhcGVfd2lwZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U2hhcGVXaXBlICpzZWxmID0gR1NUX1NIQVBFX1dJUEUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BPU0lUSU9OOgotICAgICAgZ192YWx1ZV9zZXRfZmxvYXQgKHZhbHVlLCBzZWxmLT5tYXNrX3Bvc2l0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CT1JERVI6Ci0gICAgICBnX3ZhbHVlX3NldF9mbG9hdCAodmFsdWUsIHNlbGYtPm1hc2tfYm9yZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zaGFwZV93aXBlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTaGFwZVdpcGUgKnNlbGYgPSBHU1RfU0hBUEVfV0lQRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUE9TSVRJT046ewotICAgICAgZ2Zsb2F0IGYgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgIlNldHRpbmcgbWFzayBwb3NpdGlvbjogJWYiLCBmKTsKLSAgICAgIHNlbGYtPm1hc2tfcG9zaXRpb24gPSBmOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9CT1JERVI6ewotICAgICAgZ2Zsb2F0IGYgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAoc2VsZiwgIlNldHRpbmcgbWFzayBib3JkZXI6ICVmIiwgZik7Ci0gICAgICBzZWxmLT5tYXNrX2JvcmRlciA9IGY7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYXBlX3dpcGVfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNoYXBlV2lwZSAqc2VsZiA9IEdTVF9TSEFQRV9XSVBFIChvYmplY3QpOwotCi0gIGdzdF9zaGFwZV93aXBlX3Jlc2V0IChzZWxmKTsKLQotICBnX2NvbmRfY2xlYXIgKCZzZWxmLT5tYXNrX2NvbmQpOwotICBnX211dGV4X2NsZWFyICgmc2VsZi0+bWFza19tdXRleCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYXBlX3dpcGVfcmVzZXQgKEdzdFNoYXBlV2lwZSAqIHNlbGYpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJSZXNldHRpbmcgaW50ZXJuYWwgc3RhdGUiKTsKLQotICBpZiAoc2VsZi0+bWFzaykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChzZWxmLT5tYXNrKTsKLSAgc2VsZi0+bWFzayA9IE5VTEw7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2VsZi0+bWFza19tdXRleCk7Ci0gIGdfY29uZF9zaWduYWwgKCZzZWxmLT5tYXNrX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZzZWxmLT52aW5mbyk7Ci0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZzZWxmLT5taW5mbyk7Ci0gIHNlbGYtPm1hc2tfYnBwID0gMDsKLQotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VsZi0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBnc3Rfc2hhcGVfd2lwZV9yZXNldF9xb3MgKHNlbGYpOwotICBzZWxmLT5mcmFtZV9kdXJhdGlvbiA9IDA7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NoYXBlX3dpcGVfdmlkZW9fc2lua19zZXRjYXBzIChHc3RTaGFwZVdpcGUgKiBzZWxmLCBHc3RDYXBzICogY2FwcykKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlNldHRpbmcgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpCi0gICAgZ290byBpbnZhbGlkX2NhcHM7Ci0KLSAgaWYgKChzZWxmLT52aW5mby53aWR0aCAhPSBpbmZvLndpZHRoIHx8IHNlbGYtPnZpbmZvLmhlaWdodCAhPSBpbmZvLmhlaWdodCkgJiYKLSAgICAgIHNlbGYtPnZpbmZvLndpZHRoID4gMCAmJiBzZWxmLT52aW5mby5oZWlnaHQgPiAwKSB7Ci0gICAgZ19tdXRleF9sb2NrICgmc2VsZi0+bWFza19tdXRleCk7Ci0gICAgaWYgKHNlbGYtPm1hc2spCi0gICAgICBnc3RfYnVmZmVyX3VucmVmIChzZWxmLT5tYXNrKTsKLSAgICBzZWxmLT5tYXNrID0gTlVMTDsKLSAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotICB9Ci0KLQotICBpZiAoaW5mby5mcHNfbiAhPSAwKQotICAgIHNlbGYtPmZyYW1lX2R1cmF0aW9uID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChHU1RfU0VDT05ELCBpbmZvLmZwc19kLCBpbmZvLmZwc19uKTsKLSAgZWxzZQotICAgIHNlbGYtPmZyYW1lX2R1cmF0aW9uID0gMDsKLQotICBzZWxmLT52aW5mbyA9IGluZm87Ci0KLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAoc2VsZi0+c3JjcGFkLCBjYXBzKTsKLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9jYXBzOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgIkludmFsaWQgY2FwcyIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfc2hhcGVfd2lwZV92aWRlb19zaW5rX2dldGNhcHMgKEdzdFNoYXBlV2lwZSAqIHNlbGYsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RDYXBzICp0ZW1wbCwgKnJldCwgKnRtcDsKLQotICByZXQgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gIGlmIChyZXQgIT0gTlVMTCkKLSAgICByZXR1cm4gcmV0OwotCi0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0gIHRtcCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChzZWxmLT5zcmNwYWQsIE5VTEwpOwotICBpZiAodG1wKSB7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0bXAsIHRlbXBsKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGwpOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotICB9IGVsc2UgewotICAgIHJldCA9IHRlbXBsOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgInNyY3BhZCBhY2NlcHRlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKHJldCkpCi0gICAgZ290byBkb25lOwotCi0gIHRtcCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChwYWQsIE5VTEwpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJwZWVycGFkIGFjY2VwdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCB0bXApOwotICBpZiAodG1wKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0bXAsIHJldCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gaW50ZXJzZWN0aW9uOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImludGVyc2VjdGlvbjogJSIgR1NUX1BUUl9GT1JNQVQsIHRtcCk7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChyZXQpKQotICAgIGdvdG8gZG9uZTsKLQotICBpZiAoc2VsZi0+dmluZm8uaGVpZ2h0ICYmIHNlbGYtPnZpbmZvLndpZHRoKSB7Ci0gICAgZ3VpbnQgaSwgbjsKLQotICAgIHJldCA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHJldCk7Ci0gICAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChyZXQpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHJldCwgaSk7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZWxmLT52aW5mby53aWR0aCwgImhlaWdodCIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgc2VsZi0+dmluZm8uaGVpZ2h0LCBOVUxMKTsKLSAgICB9Ci0gIH0KLQotICB0bXAgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoc2VsZi0+bWFza19zaW5rcGFkLCBOVUxMKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAibWFzayBhY2NlcHRlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgdG1wKTsKLSAgaWYgKHRtcCkgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbiwgKnRtcDI7Ci0gICAgZ3VpbnQgaSwgbjsKLQotICAgIHRtcDIgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoc2VsZi0+bWFza19zaW5rcGFkKTsKLSAgICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRtcCwgdG1wMik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcDIpOwotICAgIHRtcCA9IGludGVyc2VjdGlvbjsKLQotICAgIHRtcCA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHRtcCk7Ci0gICAgbiA9IGdzdF9jYXBzX2dldF9zaXplICh0bXApOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAodG1wLCBpKTsKLQotICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzIChzLCAiZm9ybWF0IiwgImZyYW1lcmF0ZSIsIE5VTEwpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAocywgInZpZGVvL3gtcmF3Iik7Ci0gICAgfQotCi0gICAgaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0bXAsIHJldCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gaW50ZXJzZWN0aW9uOwotICB9Ci1kb25lOgotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiUmV0dXJuaW5nIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX3NldGNhcHMgKEdzdFNoYXBlV2lwZSAqIHNlbGYsIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBnaW50IHdpZHRoLCBoZWlnaHQsIGJwcDsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlNldHRpbmcgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpIHsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIICgmaW5mbyk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmluZm8pOwotICBicHAgPSBHU1RfVklERU9fSU5GT19DT01QX0RFUFRIICgmaW5mbywgMCk7Ci0KLSAgaWYgKChzZWxmLT52aW5mby53aWR0aCAhPSB3aWR0aCB8fCBzZWxmLT52aW5mby5oZWlnaHQgIT0gaGVpZ2h0KSAmJgotICAgICAgc2VsZi0+dmluZm8ud2lkdGggPiAwICYmIHNlbGYtPnZpbmZvLmhlaWdodCA+IDApIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiTWFzayBjYXBzIG11c3QgaGF2ZSB0aGUgc2FtZSB3aWR0aC9oZWlnaHQgIgotICAgICAgICAiYXMgdGhlIHZpZGVvIGNhcHMiKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBzZWxmLT5tYXNrX2JwcCA9IGJwcDsKLSAgc2VsZi0+bWluZm8gPSBpbmZvOwotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfc2hhcGVfd2lwZV9tYXNrX3NpbmtfZ2V0Y2FwcyAoR3N0U2hhcGVXaXBlICogc2VsZiwgR3N0UGFkICogcGFkLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnJldCwgKnRtcCwgKnRjYXBzOwotICBndWludCBpLCBuOwotCi0gIHJldCA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgaWYgKHJldCAhPSBOVUxMKQotICAgIHJldHVybiByZXQ7Ci0KLSAgdGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoc2VsZi0+dmlkZW9fc2lua3BhZCk7Ci0gIHRtcCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChzZWxmLT52aWRlb19zaW5rcGFkLCBOVUxMKTsKLSAgaWYgKHRtcCkgewotICAgIHJldCA9IGdzdF9jYXBzX2ludGVyc2VjdCAodG1wLCB0Y2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSB0Y2FwczsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJ2aWRlbyBzaW5rIGFjY2VwdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotCi0gIGlmIChnc3RfY2Fwc19pc19lbXB0eSAocmV0KSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgdG1wID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKHNlbGYtPnNyY3BhZCwgTlVMTCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJzcmNwYWQgYWNjZXB0ZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgaWYgKHRtcCkgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9IGdzdF9jYXBzX2ludGVyc2VjdCAocmV0LCB0bXApOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXQpOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotICAgIHJldCA9IGludGVyc2VjdGlvbjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJpbnRlcnNlY3Rpb246ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotCi0gIGlmIChnc3RfY2Fwc19pc19lbXB0eSAocmV0KSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgcmV0ID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAocmV0KTsKLSAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChyZXQpOwotICB0bXAgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChyZXQsIGkpOwotICAgIEdzdFN0cnVjdHVyZSAqdDsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHMsICJ2aWRlby94LXJhdyIpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAocywgImZvcm1hdCIsICJmcmFtZXJhdGUiLCBOVUxMKTsKLQotICAgIGlmIChzZWxmLT52aW5mby53aWR0aCAmJiBzZWxmLT52aW5mby5oZWlnaHQpCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgIndpZHRoIiwgR19UWVBFX0lOVCwgc2VsZi0+dmluZm8ud2lkdGgsICJoZWlnaHQiLAotICAgICAgICAgIEdfVFlQRV9JTlQsIHNlbGYtPnZpbmZvLmhlaWdodCwgTlVMTCk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAwLCAxLCBOVUxMKTsKLQotICAgIHQgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHMpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBHU1RfVklERU9fTkUgKEdSQVkxNiksIE5VTEwpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0ICh0LCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkdSQVk4IiwgTlVMTCk7Ci0KLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlICh0bXAsIHQpOwotICB9Ci0gIGdzdF9jYXBzX2FwcGVuZCAocmV0LCB0bXApOwotCi0gIHRtcCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChwYWQsIE5VTEwpOwotICBHU1RfTE9HX09CSkVDVCAocGFkLCAicGVlciBhY2NlcHRlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgdG1wKTsKLQotICBpZiAodG1wKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0bXAsIHJldCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gaW50ZXJzZWN0aW9uOwotICB9Ci0KLWRvbmU6Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJSZXR1cm5pbmcgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3NoYXBlX3dpcGVfc3JjX2dldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0U2hhcGVXaXBlICpzZWxmID0gR1NUX1NIQVBFX1dJUEUgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0gIEdzdENhcHMgKnRlbXBsLCAqcmV0LCAqdG1wOwotCi0gIHJldCA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgaWYgKHJldCAhPSBOVUxMKQotICAgIHJldHVybiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzZWxmLT52aWRlb19zaW5rcGFkKTsKLSAgaWYgKHJldCAhPSBOVUxMKQotICAgIHJldHVybiByZXQ7Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoc2VsZi0+dmlkZW9fc2lua3BhZCk7Ci0gIHRtcCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChzZWxmLT52aWRlb19zaW5rcGFkLCBOVUxMKTsKLSAgaWYgKHRtcCkgewotICAgIHJldCA9IGdzdF9jYXBzX2ludGVyc2VjdCAodG1wLCB0ZW1wbCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgfSBlbHNlIHsKLSAgICByZXQgPSB0ZW1wbDsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJ2aWRlbyBzaW5rIGFjY2VwdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotCi0gIGlmIChnc3RfY2Fwc19pc19lbXB0eSAocmV0KSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgdG1wID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKHBhZCwgTlVMTCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJwZWVyIGFjY2VwdGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotICBpZiAodG1wKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgaW50ZXJzZWN0aW9uID0gZ3N0X2NhcHNfaW50ZXJzZWN0ICh0bXAsIHJldCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gaW50ZXJzZWN0aW9uOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImludGVyc2VjdGlvbjogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChyZXQpKQotICAgIGdvdG8gZG9uZTsKLQotICBpZiAoc2VsZi0+dmluZm8uaGVpZ2h0ICYmIHNlbGYtPnZpbmZvLndpZHRoKSB7Ci0gICAgZ3VpbnQgaSwgbjsKLQotICAgIHJldCA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKHJldCk7Ci0gICAgbiA9IGdzdF9jYXBzX2dldF9zaXplIChyZXQpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHJldCwgaSk7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZWxmLT52aW5mby53aWR0aCwgImhlaWdodCIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgc2VsZi0+dmluZm8uaGVpZ2h0LCBOVUxMKTsKLSAgICB9Ci0gIH0KLQotICB0bXAgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoc2VsZi0+bWFza19zaW5rcGFkLCBOVUxMKTsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIm1hc2sgc2luayBhY2NlcHRlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLSAgaWYgKHRtcCkgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbiwgKnRtcDI7Ci0gICAgZ3VpbnQgaSwgbjsKLQotICAgIHRtcDIgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoc2VsZi0+bWFza19zaW5rcGFkKTsKLSAgICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRtcCwgdG1wMik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcDIpOwotCi0gICAgdG1wID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoaW50ZXJzZWN0aW9uKTsKLSAgICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKHRtcCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlICh0bXAsIGkpOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZHMgKHMsICJmb3JtYXQiLCAiZnJhbWVyYXRlIiwgTlVMTCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzLCAidmlkZW8veC1yYXciKTsKLSAgICB9Ci0KLSAgICBpbnRlcnNlY3Rpb24gPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRtcCwgcmV0KTsKLSAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgICBnc3RfY2Fwc191bnJlZiAocmV0KTsKLSAgICByZXQgPSBpbnRlcnNlY3Rpb247Ci0gIH0KLQotZG9uZToKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzZWxmKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiUmV0dXJuaW5nIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NoYXBlX3dpcGVfdmlkZW9fc2lua19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0U2hhcGVXaXBlICpzZWxmID0gKEdzdFNoYXBlV2lwZSAqKSBwYXJlbnQ7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiSGFuZGxpbmcgcXVlcnkgb2YgdHlwZSAnJXMnIiwKLSAgICAgIGdzdF9xdWVyeV90eXBlX2dldF9uYW1lIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSk7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpmaWx0ZXIsICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotICAgICAgY2FwcyA9IGdzdF9zaGFwZV93aXBlX3ZpZGVvX3NpbmtfZ2V0Y2FwcyAoc2VsZiwgcGFkLCBmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zaGFwZV93aXBlX3NyY19xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFNoYXBlV2lwZSAqc2VsZiA9IEdTVF9TSEFQRV9XSVBFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkhhbmRsaW5nIHF1ZXJ5IG9mIHR5cGUgJyVzJyIsCi0gICAgICBnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZSAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqZmlsdGVyLCAqY2FwczsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGNhcHMgPSBnc3Rfc2hhcGVfd2lwZV9zcmNfZ2V0Y2FwcyAocGFkLCBmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzZWxmLT52aWRlb19zaW5rcGFkLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc2hhcGVfd2lwZV91cGRhdGVfcW9zIChHc3RTaGFwZVdpcGUgKiBzZWxmLCBnZG91YmxlIHByb3BvcnRpb24sCi0gICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmLCBHc3RDbG9ja1RpbWUgdGltZXN0YW1wKQotewotICBHU1RfT0JKRUNUX0xPQ0sgKHNlbGYpOwotICBzZWxmLT5wcm9wb3J0aW9uID0gcHJvcG9ydGlvbjsKLSAgaWYgKEdfTElLRUxZICh0aW1lc3RhbXAgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkpIHsKLSAgICBpZiAoR19VTkxJS0VMWSAoZGlmZiA+IDApKQotICAgICAgc2VsZi0+ZWFybGllc3RfdGltZSA9IHRpbWVzdGFtcCArIDIgKiBkaWZmICsgc2VsZi0+ZnJhbWVfZHVyYXRpb247Ci0gICAgZWxzZQotICAgICAgc2VsZi0+ZWFybGllc3RfdGltZSA9IHRpbWVzdGFtcCArIGRpZmY7Ci0gIH0gZWxzZSB7Ci0gICAgc2VsZi0+ZWFybGllc3RfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNlbGYpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYXBlX3dpcGVfcmVzZXRfcW9zIChHc3RTaGFwZVdpcGUgKiBzZWxmKQotewotICBnc3Rfc2hhcGVfd2lwZV91cGRhdGVfcW9zIChzZWxmLCAwLjUsIDAsIEdTVF9DTE9DS19USU1FX05PTkUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NoYXBlX3dpcGVfcmVhZF9xb3MgKEdzdFNoYXBlV2lwZSAqIHNlbGYsIGdkb3VibGUgKiBwcm9wb3J0aW9uLAotICAgIEdzdENsb2NrVGltZSAqIHRpbWUpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gICpwcm9wb3J0aW9uID0gc2VsZi0+cHJvcG9ydGlvbjsKLSAgKnRpbWUgPSBzZWxmLT5lYXJsaWVzdF90aW1lOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci19Ci0KLS8qIFBlcmZvcm0gcW9zIGNhbGN1bGF0aW9ucyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbmV4dCBmcmFtZS4gUmV0dXJucyBUUlVFIGlmCi0gKiB0aGUgZnJhbWUgc2hvdWxkIGJlIHByb2Nlc3NlZCwgRkFMU0UgaWYgdGhlIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGVudGlyZWx5ICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zaGFwZV93aXBlX2RvX3FvcyAoR3N0U2hhcGVXaXBlICogc2VsZiwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHFvc3RpbWUsIGVhcmxpZXN0X3RpbWU7Ci0gIGdkb3VibGUgcHJvcG9ydGlvbjsKLQotICAvKiBubyB0aW1lc3RhbXAsIGNhbid0IGRvIFFvUyA9PiBwcm9jZXNzIGZyYW1lICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJpbnZhbGlkIHRpbWVzdGFtcCwgY2FuJ3QgZG8gUW9TLCBwcm9jZXNzIGZyYW1lIik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBnZXQgbGF0ZXN0IFFvUyBvYnNlcnZhdGlvbiB2YWx1ZXMgKi8KLSAgZ3N0X3NoYXBlX3dpcGVfcmVhZF9xb3MgKHNlbGYsICZwcm9wb3J0aW9uLCAmZWFybGllc3RfdGltZSk7Ci0KLSAgLyogc2tpcCBxb3MgaWYgd2UgaGF2ZSBubyBvYnNlcnZhdGlvbiAoeWV0KSA9PiBwcm9jZXNzIGZyYW1lICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGVhcmxpZXN0X3RpbWUpKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChzZWxmLCAibm8gb2JzZXJ2YXRpb24geWV0LCBwcm9jZXNzIGZyYW1lIik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICAvKiBxb3MgaXMgZG9uZSBvbiBydW5uaW5nIHRpbWUgKi8KLSAgcW9zdGltZSA9IGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJnNlbGYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgIHRpbWVzdGFtcCk7Ci0KLSAgLyogc2VlIGhvdyBvdXIgbmV4dCB0aW1lc3RhbXAgcmVsYXRlcyB0byB0aGUgbGF0ZXN0IHFvcyB0aW1lc3RhbXAgKi8KLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJxb3N0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBlYXJsaWVzdCAlIgotICAgICAgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChxb3N0aW1lKSwgR1NUX1RJTUVfQVJHUyAoZWFybGllc3RfdGltZSkpOwotCi0gIGlmIChxb3N0aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYgcW9zdGltZSA8PSBlYXJsaWVzdF90aW1lKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIndlIGFyZSBsYXRlLCBkcm9wIGZyYW1lIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsICJwcm9jZXNzIGZyYW1lIik7Ci0gIHJldHVybiBUUlVFOwotfQotCi0jZGVmaW5lIENSRUFURV9BUkdCX0ZVTkNUSU9OUyhkZXB0aCwgbmFtZSwgc2hpZnQsIGEsIHIsIGcsIGIpIFwKLXN0YXRpYyB2b2lkIFwKLWdzdF9zaGFwZV93aXBlX2JsZW5kXyMjbmFtZSMjXyMjZGVwdGggKEdzdFNoYXBlV2lwZSAqIHNlbGYsIEdzdFZpZGVvRnJhbWUgKiBpbmZyYW1lLCBcCi0gICAgR3N0VmlkZW9GcmFtZSAqIG1hc2tmcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dGZyYW1lKSBcCi17IFwKLSAgY29uc3QgZ3VpbnQjI2RlcHRoICptYXNrID0gKGNvbnN0IGd1aW50IyNkZXB0aCAqKSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAobWFza2ZyYW1lLCAwKTsgXAotICBjb25zdCBndWludDggKmlucHV0ID0gKGNvbnN0IGd1aW50OCAqKSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5mcmFtZSwgMCk7IFwKLSAgZ3VpbnQ4ICpvdXRwdXQgPSAoZ3VpbnQ4ICopIEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRmcmFtZSwgMCk7IFwKLSAgZ3VpbnQgaSwgajsgXAotICBnaW50IHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbmZyYW1lKTsgXAotICBnaW50IGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluZnJhbWUpOyBcCi0gIGd1aW50IG1hc2tfaW5jcmVtZW50ID0gKChkZXB0aCA9PSAxNikgPyBHU1RfUk9VTkRfVVBfMiAod2lkdGgpIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1JPVU5EX1VQXzQgKHdpZHRoKSkgLSB3aWR0aDsgXAotICBnZmxvYXQgcG9zaXRpb24gPSBzZWxmLT5tYXNrX3Bvc2l0aW9uOyBcCi0gIGdmbG9hdCBsb3cgPSBwb3NpdGlvbiAtIChzZWxmLT5tYXNrX2JvcmRlciAvIDIuMGYpOyBcCi0gIGdmbG9hdCBoaWdoID0gcG9zaXRpb24gKyAoc2VsZi0+bWFza19ib3JkZXIgLyAyLjBmKTsgXAotICBndWludDMyIGxvd19pLCBoaWdoX2ksIHJvdW5kX2k7IFwKLSAgXAotICBpZiAobG93IDwgMC4wZikgeyBcCi0gICAgaGlnaCA9IDAuMGY7IFwKLSAgICBsb3cgPSAwLjBmOyBcCi0gIH0gXAotICBcCi0gIGlmIChoaWdoID4gMS4wZikgeyBcCi0gICAgbG93ID0gMS4wZjsgXAotICAgIGhpZ2ggPSAxLjBmOyBcCi0gIH0gXAotICBcCi0gIGxvd19pID0gbG93ICogNjU1MzY7IFwKLSAgaGlnaF9pID0gaGlnaCAqIDY1NTM2OyBcCi0gIHJvdW5kX2kgPSAoaGlnaF9pIC0gbG93X2kpID4+IDE7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsgXAotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7IFwKLSAgICAgIGd1aW50MzIgaW4gPSAqbWFzayA8PCBzaGlmdDsgXAotICAgICAgXAotICAgICAgaWYgKGluIDwgbG93X2kpIHsgXAotICAgICAgICBvdXRwdXRbYV0gPSAweDAwOyAgICAgICAvKiBBICovIFwKLSAgICAgICAgb3V0cHV0W3JdID0gaW5wdXRbcl07ICAgLyogUiAqLyBcCi0gICAgICAgIG91dHB1dFtnXSA9IGlucHV0W2ddOyAgIC8qIEcgKi8gXAotICAgICAgICBvdXRwdXRbYl0gPSBpbnB1dFtiXTsgICAvKiBCICovIFwKLSAgICAgIH0gZWxzZSBpZiAoaW4gPj0gaGlnaF9pKSB7IFwKLSAgICAgICAgb3V0cHV0W2FdID0gaW5wdXRbYV07ICAgLyogQSAqLyBcCi0gICAgICAgIG91dHB1dFtyXSA9IGlucHV0W3JdOyAgIC8qIFIgKi8gXAotICAgICAgICBvdXRwdXRbZ10gPSBpbnB1dFtnXTsgICAvKiBHICovIFwKLSAgICAgICAgb3V0cHV0W2JdID0gaW5wdXRbYl07ICAgLyogQiAqLyBcCi0gICAgICB9IGVsc2UgeyBcCi0gICAgICAgIGd1aW50MzIgdmFsOyBcCi0gICAgICAgIC8qIE5vdGU6IFRoaXMgd2lsbCBuZXZlciBvdmVyZmxvdyBvciBiZSBsYXJnZXIgdGhhbiAyNTUhICovIFwKLSAgICAgICAgdmFsID0gKCgoaW4gLSBsb3dfaSkgPDwgMTYpICsgcm91bmRfaSkgLyAoaGlnaF9pIC0gbG93X2kpOyBcCi0gICAgICAgIHZhbCA9ICh2YWwgKiBpbnB1dFthXSArIDMyNzY4KSA+PiAxNjsgXAotICAgICAgICBcCi0gICAgICAgIG91dHB1dFthXSA9IHZhbDsgICAgICAgIC8qIEEgKi8gXAotICAgICAgICBvdXRwdXRbcl0gPSBpbnB1dFtyXTsgICAvKiBSICovIFwKLSAgICAgICAgb3V0cHV0W2ddID0gaW5wdXRbZ107ICAgLyogRyAqLyBcCi0gICAgICAgIG91dHB1dFtiXSA9IGlucHV0W2JdOyAgIC8qIEIgKi8gXAotICAgICAgfSBcCi0gICAgICBcCi0gICAgICBtYXNrKys7IFwKLSAgICAgIGlucHV0ICs9IDQ7IFwKLSAgICAgIG91dHB1dCArPSA0OyBcCi0gICAgfSBcCi0gICAgbWFzayArPSBtYXNrX2luY3JlbWVudDsgXAotICB9IFwKLX0KLQotQ1JFQVRFX0FSR0JfRlVOQ1RJT05TICgxNiwgYXJnYiwgMCwgMCwgMSwgMiwgMyk7Ci1DUkVBVEVfQVJHQl9GVU5DVElPTlMgKDgsIGFyZ2IsIDgsIDAsIDEsIDIsIDMpOwotCi1DUkVBVEVfQVJHQl9GVU5DVElPTlMgKDE2LCBiZ3JhLCAwLCAzLCAyLCAxLCAwKTsKLUNSRUFURV9BUkdCX0ZVTkNUSU9OUyAoOCwgYmdyYSwgOCwgMywgMiwgMSwgMCk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfc2hhcGVfd2lwZV92aWRlb19zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFNoYXBlV2lwZSAqc2VsZiA9IEdTVF9TSEFQRV9XSVBFIChwYXJlbnQpOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RCdWZmZXIgKm1hc2sgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0VmlkZW9GcmFtZSBpbmZyYW1lLCBvdXRmcmFtZSwgbWFza2ZyYW1lOwotCi0gIGlmIChHX1VOTElLRUxZIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZzZWxmLT52aW5mbykgPT0KLSAgICAgICAgICBHU1RfVklERU9fRk9STUFUX1VOS05PV04pKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcik7Ci0gIHRpbWVzdGFtcCA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnNlbGYtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoc2VsZiksIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNlbGYsCi0gICAgICAiQmxlbmRpbmcgYnVmZmVyIHdpdGggdGltZXN0YW1wICUiIEdTVF9USU1FX0ZPUk1BVCAiIGF0IHBvc2l0aW9uICVmIiwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCksIHNlbGYtPm1hc2tfcG9zaXRpb24pOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotICBpZiAoc2VsZi0+c2h1dGRvd24pCi0gICAgZ290byBzaHV0ZG93bjsKLQotICBpZiAoIXNlbGYtPm1hc2spCi0gICAgZ19jb25kX3dhaXQgKCZzZWxmLT5tYXNrX2NvbmQsICZzZWxmLT5tYXNrX211dGV4KTsKLQotICBpZiAoc2VsZi0+bWFzayA9PSBOVUxMIHx8IHNlbGYtPnNodXRkb3duKSB7Ci0gICAgZ290byBzaHV0ZG93bjsKLSAgfSBlbHNlIHsKLSAgICBtYXNrID0gZ3N0X2J1ZmZlcl9yZWYgKHNlbGYtPm1hc2spOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2VsZi0+bWFza19tdXRleCk7Ci0KLSAgaWYgKCFnc3Rfc2hhcGVfd2lwZV9kb19xb3MgKHNlbGYsIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpKSkKLSAgICBnb3RvIHFvczsKLQotICAvKiBXaWxsIGJsZW5kIGlucGxhY2UgaWYgYnVmZmVyIGlzIHdyaXRhYmxlICovCi0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmZmVyKTsKLSAgZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJm91dGZyYW1lLCAmc2VsZi0+dmluZm8sIG91dGJ1ZiwgR1NUX01BUF9SRUFEV1JJVEUpOwotICBnc3RfdmlkZW9fZnJhbWVfbWFwICgmaW5mcmFtZSwgJnNlbGYtPnZpbmZvLCBvdXRidWYsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJm1hc2tmcmFtZSwgJnNlbGYtPm1pbmZvLCBtYXNrLCBHU1RfTUFQX1JFQUQpOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUICgmc2VsZi0+dmluZm8pKSB7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICBpZiAoc2VsZi0+bWFza19icHAgPT0gMTYpCi0gICAgICAgIGdzdF9zaGFwZV93aXBlX2JsZW5kX2FyZ2JfMTYgKHNlbGYsICZpbmZyYW1lLCAmbWFza2ZyYW1lLCAmb3V0ZnJhbWUpOwotICAgICAgZWxzZQotICAgICAgICBnc3Rfc2hhcGVfd2lwZV9ibGVuZF9hcmdiXzggKHNlbGYsICZpbmZyYW1lLCAmbWFza2ZyYW1lLCAmb3V0ZnJhbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgICBpZiAoc2VsZi0+bWFza19icHAgPT0gMTYpCi0gICAgICAgIGdzdF9zaGFwZV93aXBlX2JsZW5kX2JncmFfMTYgKHNlbGYsICZpbmZyYW1lLCAmbWFza2ZyYW1lLCAmb3V0ZnJhbWUpOwotICAgICAgZWxzZQotICAgICAgICBnc3Rfc2hhcGVfd2lwZV9ibGVuZF9iZ3JhXzggKHNlbGYsICZpbmZyYW1lLCAmbWFza2ZyYW1lLCAmb3V0ZnJhbWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZvdXRmcmFtZSk7Ci0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmluZnJhbWUpOwotCi0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJm1hc2tmcmFtZSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAobWFzayk7Ci0KLSAgcmV0ID0gZ3N0X3BhZF9wdXNoIChzZWxmLT5zcmNwYWQsIG91dGJ1Zik7Ci0gIGlmIChHX1VOTElLRUxZIChyZXQgIT0gR1NUX0ZMT1dfT0spKQotICAgIGdvdG8gcHVzaF9mYWlsZWQ7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFcnJvcnMgKi8KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgIk5vIHZhbGlkIGNhcHMgeWV0Iik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLXNodXRkb3duOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlNodXR0aW5nIGRvd24iKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICAgIHJldHVybiBHU1RfRkxPV19GTFVTSElORzsKLSAgfQotcW9zOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkRyb3BwaW5nIGJ1ZmZlciBiZWNhdXNlIG9mIFFvUyIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAobWFzayk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci1wdXNoX2ZhaWxlZDoKLSAgewotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpCi0gICAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAiUHVzaGluZyBidWZmZXIgZG93bnN0cmVhbSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFNoYXBlV2lwZSAqc2VsZiA9IEdTVF9TSEFQRV9XSVBFIChwYXJlbnQpOwotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiU2V0dGluZyBuZXcgbWFzayBidWZmZXI6ICUiIEdTVF9QVFJfRk9STUFULCBidWZmZXIpOwotCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJnNlbGYtPm1hc2ssIGJ1ZmZlcik7Ci0gIGdfY29uZF9zaWduYWwgKCZzZWxmLT5tYXNrX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3Rfc2hhcGVfd2lwZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTaGFwZVdpcGUgKnNlbGYgPSBHU1RfU0hBUEVfV0lQRSAoZWxlbWVudCk7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgc2VsZi0+c2h1dGRvd24gPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICAvKiBVbmJsb2NrIHZpZGVvIHNpbmsgY2hhaW4gZnVuY3Rpb24gKi8KLSAgICAgIGdfbXV0ZXhfbG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotICAgICAgc2VsZi0+c2h1dGRvd24gPSBUUlVFOwotICAgICAgZ19jb25kX3NpZ25hbCAoJnNlbGYtPm1hc2tfY29uZCk7Ci0gICAgICBnX211dGV4X3VubG9jayAoJnNlbGYtPm1hc2tfbXV0ZXgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUpCi0gICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF9zaGFwZV93aXBlX3Jlc2V0IChzZWxmKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NoYXBlX3dpcGVfdmlkZW9fc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U2hhcGVXaXBlICpzZWxmID0gR1NUX1NIQVBFX1dJUEUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiR290ICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgcmV0ID0gZ3N0X3NoYXBlX3dpcGVfdmlkZW9fc2lua19zZXRjYXBzIChzZWxmLCBjYXBzKTsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX1NFR01FTlQ6Ci0gICAgewotICAgICAgR3N0U2VnbWVudCBzZWc7Ci0KLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VnKTsKLSAgICAgIGlmIChzZWcuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCi0gICAgICAgICAgICAiR290IFNFR01FTlQgZXZlbnQgaW4gR1NUX0ZPUk1BVF9USU1FICUiIEdTVF9QVFJfRk9STUFULCAmc2VnKTsKLSAgICAgICAgc2VsZi0+c2VnbWVudCA9IHNlZzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9zZWdtZW50X2luaXQgKCZzZWxmLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgICAgfQotICAgIH0KLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnc3Rfc2hhcGVfd2lwZV9yZXNldF9xb3MgKHNlbGYpOwotICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc2VsZi0+c3JjcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KQotewotICBHc3RTaGFwZVdpcGUgKnNlbGYgPSBHU1RfU0hBUEVfV0lQRSAocGFyZW50KTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiR290ICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgZ3N0X3NoYXBlX3dpcGVfbWFza19zaW5rX3NldGNhcHMgKHNlbGYsIGNhcHMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICBnX211dGV4X2xvY2sgKCZzZWxmLT5tYXNrX211dGV4KTsKLSAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJnNlbGYtPm1hc2ssIE5VTEwpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5tYXNrX211dGV4KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8qIERyb3BwaW5nIGFsbCBldmVudHMgaGVyZSAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc2hhcGVfd2lwZV9tYXNrX3NpbmtfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFNoYXBlV2lwZSAqc2VsZiA9IEdTVF9TSEFQRV9XSVBFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIkhhbmRsaW5nIHF1ZXJ5IG9mIHR5cGUgJyVzJyIsCi0gICAgICBnc3RfcXVlcnlfdHlwZV9nZXRfbmFtZSAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkpOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqZmlsdGVyLCAqY2FwczsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGNhcHMgPSBnc3Rfc2hhcGVfd2lwZV9tYXNrX3NpbmtfZ2V0Y2FwcyAoc2VsZiwgcGFkLCBmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NoYXBlX3dpcGVfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0U2hhcGVXaXBlICpzZWxmID0gR1NUX1NIQVBFX1dJUEUgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiR290ICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9RT1M6ewotICAgICAgR3N0UU9TVHlwZSB0eXBlOwotICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0eXBlLCAmcHJvcG9ydGlvbiwgJmRpZmYsICZ0aW1lc3RhbXApOwotCi0gICAgICBnc3Rfc2hhcGVfd2lwZV91cGRhdGVfcW9zIChzZWxmLCBwcm9wb3J0aW9uLCBkaWZmLCB0aW1lc3RhbXApOwotICAgIH0KLSAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnZpZGVvX3NpbmtwYWQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3NoYXBlX3dpcGVfZGVidWcsICJzaGFwZXdpcGUiLCAwLAotICAgICAgInNoYXBld2lwZSBlbGVtZW50Iik7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic2hhcGV3aXBlIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9TSEFQRV9XSVBFKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBzaGFwZXdpcGUsCi0gICAgIlNoYXBlIFdpcGUgdHJhbnNpdGlvbiBmaWx0ZXIiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmggYi9nc3Qvc2hhcGV3aXBlL2dzdHNoYXBld2lwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjczMWNlLi4wMDAwMDAwCi0tLSBhL2dzdC9zaGFwZXdpcGUvZ3N0c2hhcGV3aXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSwyMDEwIFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfU0hBUEVfV0lQRV9IX18KLSNkZWZpbmUgX19HU1RfU0hBUEVfV0lQRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NIQVBFX1dJUEUgXAotICAoZ3N0X3NoYXBlX3dpcGVfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1NIQVBFX1dJUEUob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TSEFQRV9XSVBFLEdzdFNoYXBlV2lwZSkpCi0jZGVmaW5lIEdTVF9TSEFQRV9XSVBFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NIQVBFX1dJUEUsR3N0U2hhcGVXaXBlQ2xhc3MpKQotI2RlZmluZSBHU1RfU0hBUEVfV0lQRV9HRVRfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksR1NUX1RZUEVfU0hBUEVfV0lQRSxHc3RTaGFwZVdpcGVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TSEFQRV9XSVBFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU0hBUEVfV0lQRSkpCi0jZGVmaW5lIEdTVF9JU19TSEFQRV9XSVBFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NIQVBFX1dJUEUpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U2hhcGVXaXBlIEdzdFNoYXBlV2lwZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTaGFwZVdpcGVDbGFzcyBHc3RTaGFwZVdpcGVDbGFzczsKLQotc3RydWN0IF9Hc3RTaGFwZVdpcGUKLXsKLSAgR3N0RWxlbWVudCBwYXJlbnQ7Ci0KLSAgLyogcHJpdmF0ZSAqLwotICBHc3RQYWQgKnZpZGVvX3NpbmtwYWQ7Ci0gIEdzdFBhZCAqbWFza19zaW5rcGFkOwotCi0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBHc3RCdWZmZXIgKm1hc2s7Ci0gIGdmbG9hdCBtYXNrX3Bvc2l0aW9uOwotICBnZmxvYXQgbWFza19ib3JkZXI7Ci0gIEdNdXRleCBtYXNrX211dGV4OwotICBHQ29uZCBtYXNrX2NvbmQ7Ci0gIGdpbnQgbWFza19icHA7Ci0KLSAgR3N0VmlkZW9JbmZvIHZpbmZvOwotICBHc3RWaWRlb0luZm8gbWluZm87Ci0KLSAgZ2Jvb2xlYW4gc2h1dGRvd247Ci0KLSAgZ2RvdWJsZSBwcm9wb3J0aW9uOwotICBHc3RDbG9ja1RpbWUgZWFybGllc3RfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIGZyYW1lX2R1cmF0aW9uOwotfTsKLQotc3RydWN0IF9Hc3RTaGFwZVdpcGVDbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3NoYXBlX3dpcGVfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU0hBUEVfV0lQRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9NYWtlZmlsZS5hbSBiL2dzdC9zbXB0ZS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNDEzNC4uMDAwMDAwMAotLS0gYS9nc3Qvc21wdGUvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RzbXB0ZS5sYQotCi1saWJnc3RzbXB0ZV9sYV9TT1VSQ0VTID0gZ3N0c21wdGUuYyBnc3RtYXNrLmMgYmFyYm94d2lwZXMuYyBwYWludC5jIGdzdHNtcHRlYWxwaGEuYyBwbHVnaW4uYwotCi1ub2luc3RfSEVBREVSUyA9IGdzdHNtcHRlLmggZ3N0bWFzay5oIHBhaW50LmggZ3N0c21wdGVhbHBoYS5oCi0KLWxpYmdzdHNtcHRlX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdHNtcHRlX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpICQoTElCTSkgXAotCQkJLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgCi1saWJnc3RzbXB0ZV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RzbXB0ZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQpkaWZmIC0tZ2l0IGEvZ3N0L3NtcHRlL01ha2VmaWxlLmluIGIvZ3N0L3NtcHRlL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2E4NzdhLi4wMDAwMDAwCi0tLSBhL2dzdC9zbXB0ZS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk1NCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3Qvc21wdGUKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RzbXB0ZV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHNtcHRlX2xhX09CSkVDVFMgPSBsaWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZS5sbyBcCi0JbGliZ3N0c21wdGVfbGEtZ3N0bWFzay5sbyBsaWJnc3RzbXB0ZV9sYS1iYXJib3h3aXBlcy5sbyBcCi0JbGliZ3N0c21wdGVfbGEtcGFpbnQubG8gbGliZ3N0c21wdGVfbGEtZ3N0c21wdGVhbHBoYS5sbyBcCi0JbGliZ3N0c21wdGVfbGEtcGx1Z2luLmxvCi1saWJnc3RzbXB0ZV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RzbXB0ZV9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0c21wdGVfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RzbXB0ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHNtcHRlX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHNtcHRlX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHNtcHRlX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHNtcHRlX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHNtcHRlLmxhCi1saWJnc3RzbXB0ZV9sYV9TT1VSQ0VTID0gZ3N0c21wdGUuYyBnc3RtYXNrLmMgYmFyYm94d2lwZXMuYyBwYWludC5jIGdzdHNtcHRlYWxwaGEuYyBwbHVnaW4uYwotbm9pbnN0X0hFQURFUlMgPSBnc3RzbXB0ZS5oIGdzdG1hc2suaCBwYWludC5oIGdzdHNtcHRlYWxwaGEuaAotbGliZ3N0c21wdGVfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0c21wdGVfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0JBU0VfTElCUykgJChMSUJNKSBcCi0JCQktbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAKLQotbGliZ3N0c21wdGVfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0c21wdGVfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC9zbXB0ZS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3Qvc21wdGUvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3RzbXB0ZS5sYTogJChsaWJnc3RzbXB0ZV9sYV9PQkpFQ1RTKSAkKGxpYmdzdHNtcHRlX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3RzbXB0ZV9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0c21wdGVfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHNtcHRlX2xhX09CSkVDVFMpICQobGliZ3N0c21wdGVfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1iYXJib3h3aXBlcy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLWdzdG1hc2suUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLWdzdHNtcHRlYWxwaGEuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1wYWludC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLXBsdWdpbi5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0c21wdGVfbGEtZ3N0c21wdGUubG86IGdzdHNtcHRlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzbXB0ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzbXB0ZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c21wdGVfbGEtZ3N0c21wdGUubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLWdzdHNtcHRlLlRwbyAtYyAtbyBsaWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZS5sbyBgdGVzdCAtZiAnZ3N0c21wdGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c21wdGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtZ3N0c21wdGUuVHBvICQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzbXB0ZS5jJyBvYmplY3Q9J2xpYmdzdHNtcHRlX2xhLWdzdHNtcHRlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c21wdGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c21wdGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c21wdGVfbGEtZ3N0c21wdGUubG8gYHRlc3QgLWYgJ2dzdHNtcHRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNtcHRlLmMKLQotbGliZ3N0c21wdGVfbGEtZ3N0bWFzay5sbzogZ3N0bWFzay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c21wdGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c21wdGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHNtcHRlX2xhLWdzdG1hc2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLWdzdG1hc2suVHBvIC1jIC1vIGxpYmdzdHNtcHRlX2xhLWdzdG1hc2subG8gYHRlc3QgLWYgJ2dzdG1hc2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWFzay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1nc3RtYXNrLlRwbyAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtZ3N0bWFzay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RtYXNrLmMnIG9iamVjdD0nbGliZ3N0c21wdGVfbGEtZ3N0bWFzay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNtcHRlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNtcHRlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHNtcHRlX2xhLWdzdG1hc2subG8gYHRlc3QgLWYgJ2dzdG1hc2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bWFzay5jCi0KLWxpYmdzdHNtcHRlX2xhLWJhcmJveHdpcGVzLmxvOiBiYXJib3h3aXBlcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c21wdGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c21wdGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHNtcHRlX2xhLWJhcmJveHdpcGVzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1iYXJib3h3aXBlcy5UcG8gLWMgLW8gbGliZ3N0c21wdGVfbGEtYmFyYm94d2lwZXMubG8gYHRlc3QgLWYgJ2JhcmJveHdpcGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGJhcmJveHdpcGVzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLWJhcmJveHdpcGVzLlRwbyAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtYmFyYm94d2lwZXMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nYmFyYm94d2lwZXMuYycgb2JqZWN0PSdsaWJnc3RzbXB0ZV9sYS1iYXJib3h3aXBlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNtcHRlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNtcHRlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHNtcHRlX2xhLWJhcmJveHdpcGVzLmxvIGB0ZXN0IC1mICdiYXJib3h3aXBlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BiYXJib3h3aXBlcy5jCi0KLWxpYmdzdHNtcHRlX2xhLXBhaW50LmxvOiBwYWludC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c21wdGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c21wdGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHNtcHRlX2xhLXBhaW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1wYWludC5UcG8gLWMgLW8gbGliZ3N0c21wdGVfbGEtcGFpbnQubG8gYHRlc3QgLWYgJ3BhaW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBhaW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLXBhaW50LlRwbyAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtcGFpbnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncGFpbnQuYycgb2JqZWN0PSdsaWJnc3RzbXB0ZV9sYS1wYWludC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNtcHRlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNtcHRlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHNtcHRlX2xhLXBhaW50LmxvIGB0ZXN0IC1mICdwYWludC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwYWludC5jCi0KLWxpYmdzdHNtcHRlX2xhLWdzdHNtcHRlYWxwaGEubG86IGdzdHNtcHRlYWxwaGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNtcHRlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNtcHRlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZWFscGhhLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZWFscGhhLlRwbyAtYyAtbyBsaWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZWFscGhhLmxvIGB0ZXN0IC1mICdnc3RzbXB0ZWFscGhhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNtcHRlYWxwaGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtZ3N0c21wdGVhbHBoYS5UcG8gJChERVBESVIpL2xpYmdzdHNtcHRlX2xhLWdzdHNtcHRlYWxwaGEuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0c21wdGVhbHBoYS5jJyBvYmplY3Q9J2xpYmdzdHNtcHRlX2xhLWdzdHNtcHRlYWxwaGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzbXB0ZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzbXB0ZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzbXB0ZV9sYS1nc3RzbXB0ZWFscGhhLmxvIGB0ZXN0IC1mICdnc3RzbXB0ZWFscGhhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHNtcHRlYWxwaGEuYwotCi1saWJnc3RzbXB0ZV9sYS1wbHVnaW4ubG86IHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c21wdGVfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c21wdGVfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHNtcHRlX2xhLXBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtcGx1Z2luLlRwbyAtYyAtbyBsaWJnc3RzbXB0ZV9sYS1wbHVnaW4ubG8gYHRlc3QgLWYgJ3BsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbHVnaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0c21wdGVfbGEtcGx1Z2luLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3BsdWdpbi5jJyBvYmplY3Q9J2xpYmdzdHNtcHRlX2xhLXBsdWdpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNtcHRlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNtcHRlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHNtcHRlX2xhLXBsdWdpbi5sbyBgdGVzdCAtZiAncGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBsdWdpbi5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9iYXJib3h3aXBlcy5jIGIvZ3N0L3NtcHRlL2JhcmJveHdpcGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NTVlYWEuLjAwMDAwMDAKLS0tIGEvZ3N0L3NtcHRlL2JhcmJveHdpcGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NTcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgInBhaW50LmgiCi0jaW5jbHVkZSAiZ3N0bWFzay5oIgotCi1lbnVtCi17Ci0gIEJPWF9WRVJUSUNBTCA9IDEsCi0gIEJPWF9IT1JJWk9OVEFMID0gMiwKLSAgQk9YX0NMT0NLID0gMywKLSAgVFJJR0FOTEVfTElORUFSID0gNAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgYm94ZXNfMWJbXVs3XSA9IHsKLSNkZWZpbmUgV0lQRV9CMV8xICAgICAgIDAKLSAge0JPWF9WRVJUSUNBTCwgMCwgMCwgMCwgMSwgMSwgMX0sCi0jZGVmaW5lIFdJUEVfQjFfMiAgICAgICAxCi0gIHtCT1hfSE9SSVpPTlRBTCwgMCwgMCwgMCwgMSwgMSwgMX0KLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGJveGVzXzJiW11bNyAqIDJdID0gewotI2RlZmluZSBXSVBFX0IyXzIxICAgICAgMAotICB7Qk9YX1ZFUlRJQ0FMLCAwLCAwLCAxLCAxLCAyLCAwLAotICAgICAgQk9YX1ZFUlRJQ0FMLCAxLCAwLCAwLCAyLCAyLCAxfSwKLSNkZWZpbmUgV0lQRV9CMl8yMiAgICAgIDEKLSAge0JPWF9IT1JJWk9OVEFMLCAwLCAwLCAxLCAyLCAxLCAwLAotICAgICAgQk9YX0hPUklaT05UQUwsIDAsIDEsIDAsIDIsIDIsIDF9LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgYm94X2Nsb2NrXzFiW11bMSAqIDEwXSA9IHsKLSNkZWZpbmUgV0lQRV9CMV8yNDEgICAgIDAKLSAge0JPWF9DTE9DSywgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMX0sCi0jZGVmaW5lIFdJUEVfQjFfMjQyICAgICAxCi0gIHtCT1hfQ0xPQ0ssIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDF9LAotI2RlZmluZSBXSVBFX0IxXzI0MyAgICAgMgotICB7Qk9YX0NMT0NLLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxfSwKLSNkZWZpbmUgV0lQRV9CMV8yNDQgICAgIDMKLSAge0JPWF9DTE9DSywgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMX0sCi19OwotCi0jZGVmaW5lIFdJUEVfQjJfMjIxICAgICAwCi1zdGF0aWMgY29uc3QgZ2ludCBib3hfY2xvY2tfMmJbXVsyICogMTBdID0gewotI2RlZmluZSBXSVBFX0IyXzIyMSAgICAgMAotICB7Qk9YX0NMT0NLLCAxLCAwLCAwLCAyLCAwLCAwLCAxLCAyLCAxLAotICAgICAgQk9YX0NMT0NLLCAxLCAwLCAwLCAxLCAyLCAxLCAwLCAwLCAyfSwKLSNkZWZpbmUgV0lQRV9CMl8yMjIgICAgIDEKLSAge0JPWF9DTE9DSywgMiwgMSwgMCwgMiwgMiwgMCwgMCwgMSwgMSwKLSAgICAgIEJPWF9DTE9DSywgMiwgMSwgMCwgMCwgMSwgMSwgMiwgMCwgMn0sCi0jZGVmaW5lIFdJUEVfQjJfMjIzICAgICAyCi0gIHtCT1hfQ0xPQ0ssIDEsIDIsIDAsIDAsIDIsIDAsIDEsIDAsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDAsIDEsIDIsIDIsIDJ9LAotI2RlZmluZSBXSVBFX0IyXzIyNCAgICAgMwotICB7Qk9YX0NMT0NLLCAwLCAxLCAwLCAwLCAwLCAwLCAyLCAxLCAxLAotICAgICAgQk9YX0NMT0NLLCAwLCAxLCAwLCAyLCAxLCAxLCAwLCAyLCAyfSwKLSNkZWZpbmUgV0lQRV9CMl8yMjUgICAgIDQKLSAge0JPWF9DTE9DSywgMSwgMCwgMCwgMiwgMCwgMCwgMSwgMiwgMSwKLSAgICAgIEJPWF9DTE9DSywgMSwgMiwgMCwgMCwgMiwgMCwgMSwgMCwgMX0sCi0jZGVmaW5lIFdJUEVfQjJfMjI2ICAgICA1Ci0gIHtCT1hfQ0xPQ0ssIDAsIDEsIDAsIDAsIDAsIDAsIDIsIDEsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDIsIDIsIDAsIDAsIDEsIDF9LAotI2RlZmluZSBXSVBFX0IyXzIzMSAgICAgNgotICB7Qk9YX0NMT0NLLCAxLCAwLCAwLCAxLCAyLCAwLCAyLCAwLCAxLAotICAgICAgQk9YX0NMT0NLLCAxLCAwLCAwLCAxLCAyLCAwLCAwLCAwLCAxfSwKLSNkZWZpbmUgV0lQRV9CMl8yMzIgICAgIDcKLSAge0JPWF9DTE9DSywgMiwgMSwgMCwgMCwgMSwgMCwgMiwgMCwgMSwKLSAgICAgIEJPWF9DTE9DSywgMiwgMSwgMCwgMCwgMSwgMCwgMiwgMiwgMX0sCi0jZGVmaW5lIFdJUEVfQjJfMjMzICAgICA4Ci0gIHtCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDAsIDAsIDIsIDIsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDAsIDAsIDAsIDIsIDF9LAotI2RlZmluZSBXSVBFX0IyXzIzNCAgICAgOQotICB7Qk9YX0NMT0NLLCAwLCAxLCAwLCAyLCAxLCAwLCAwLCAwLCAxLAotICAgICAgQk9YX0NMT0NLLCAwLCAxLCAwLCAyLCAxLCAwLCAwLCAyLCAxfSwKLSNkZWZpbmUgV0lQRV9CMl8yNTEgICAgIDEwCi0gIHtCT1hfQ0xPQ0ssIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDIsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDIsIDAsIDAsIDEsIDAsIDAsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX0IyXzI1MiAgICAgMTEKLSAge0JPWF9DTE9DSywgMCwgMCwgMCwgMCwgMSwgMCwgMiwgMCwgMSwKLSAgICAgIEJPWF9DTE9DSywgMCwgMiwgMCwgMCwgMSwgMCwgMiwgMiwgMX0sCi0jZGVmaW5lIFdJUEVfQjJfMjUzICAgICAxMgotICB7Qk9YX0NMT0NLLCAwLCAyLCAwLCAxLCAyLCAwLCAwLCAwLCAxLAotICAgICAgQk9YX0NMT0NLLCAyLCAyLCAwLCAxLCAyLCAwLCAyLCAwLCAxfSwKLSNkZWZpbmUgV0lQRV9CMl8yNTQgICAgIDEzCi0gIHtCT1hfQ0xPQ0ssIDIsIDAsIDAsIDIsIDEsIDAsIDAsIDAsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDIsIDIsIDAsIDIsIDEsIDAsIDAsIDIsIDF9LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgYm94X2Nsb2NrXzRiW11bNCAqIDEwXSA9IHsKLSNkZWZpbmUgV0lQRV9CNF8yMDEgICAgIDAKLSAge0JPWF9DTE9DSywgMSwgMSwgMCwgMSwgMCwgMCwgMiwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAyLCAxLCAxLCAxLCAyLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDIsIDIsIDAsIDEsIDMsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDAsIDEsIDMsIDEsIDAsIDR9LAotI2RlZmluZSBXSVBFX0I0XzIwMiAgICAgMQotICB7Qk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAwLCAzLCAyLCAxLCA0LAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDIsIDEsIDAsIDEsIDIsIDEsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMSwgMiwgMSwgMCwgMSwgMiwKLSAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMCwgMSwgMiwgMSwgMCwgM30sCi0jZGVmaW5lIFdJUEVfQjRfMjAzICAgICAyCi0gIHtCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDAsIDIsIDIsIDEsIDMsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMiwgMSwgMywgMSwgMiwgNCwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAyLCAwLCAwLCAxLCAxLAotICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAwLCAyfSwKLSNkZWZpbmUgV0lQRV9CNF8yMDQgICAgIDMKLSAge0JPWF9DTE9DSywgMSwgMSwgMCwgMSwgMCwgMSwgMiwgMSwgMiwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAyLCAxLCAyLCAxLCAyLCAzLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDIsIDMsIDAsIDEsIDQsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDF9LAotI2RlZmluZSBXSVBFX0I0XzIwNSAgICAgNAotICB7Qk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAwLCAwLCAyLCAxLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDIsIDEsIDEsIDEsIDIsIDIsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMSwgMiwgMCwgMCwgMSwgMSwKLSAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMCwgMn0sCi0jZGVmaW5lIFdJUEVfQjRfMjA2ICAgICA1Ci0gIHtCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDAsIDEsIDIsIDEsIDIsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMiwgMSwgMCwgMSwgMiwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAyLCAxLCAwLCAxLCAyLAotICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAwLCAxLCAwLCAxLCAwLCAxfSwKLSNkZWZpbmUgV0lQRV9CNF8yMDcgICAgIDYKLSAge0JPWF9DTE9DSywgMSwgMSwgMCwgMSwgMCwgMCwgMiwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAyLCAxLCAwLCAxLCAyLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDIsIDAsIDAsIDEsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDF9LAotI2RlZmluZSBXSVBFX0I0XzIxMSAgICAgNwotICB7Qk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAwLCAwLCAyLCAxLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDIsIDEsIDEsIDEsIDIsIDIsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgMSwKLSAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMiwgMn0sCi0jZGVmaW5lIFdJUEVfQjRfMjEyICAgICA4Ci0gIHtCT1hfQ0xPQ0ssIDEsIDEsIDAsIDIsIDEsIDAsIDEsIDAsIDEsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMiwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAyLCAxLCAwLCAxLCAyLCAxLAotICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAyLCAxLCAwLCAxLCAyfSwKLSNkZWZpbmUgV0lQRV9CNF8yMTMgICAgIDkKLSAge0JPWF9DTE9DSywgMSwgMSwgMCwgMSwgMCwgMCwgMiwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAxLCAwLCAwLCAwLCAxLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDIsIDAsIDIsIDEsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDEsIDIsIDAsIDAsIDEsIDF9LAotI2RlZmluZSBXSVBFX0I0XzIxNCAgICAgMTAKLSAge0JPWF9DTE9DSywgMSwgMSwgMCwgMiwgMSwgMCwgMSwgMCwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAxLCAwLCAyLCAxLCAwLCAxLCAyLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDAsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDEsIDAsIDAsIDEsIDAsIDEsIDIsIDF9LAotI2RlZmluZSBXSVBFX0I0XzIyNyAgICAgMTEKLSAge0JPWF9DTE9DSywgMSwgMCwgMCwgMiwgMCwgMCwgMSwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDIsIDIsIDAsIDEsIDEsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDEsIDEsIDAsIDIsIDJ9LAotI2RlZmluZSBXSVBFX0I0XzIyOCAgICAgMTIKLSAge0JPWF9DTE9DSywgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAwLCAxLCAwLCAxLCAxLCAxLCAwLCAyLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDIsIDAsIDAsIDEsIDEsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDEsIDEsIDEsIDIsIDIsIDJ9LAotI2RlZmluZSBXSVBFX0I0XzIzNSAgICAgMTMKLSAge0JPWF9DTE9DSywgMSwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAwLCAwLCAxLCAxLCAwLCAyLCAwLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDEsIDAsIDIsIDIsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDEsIDAsIDAsIDIsIDF9LAotI2RlZmluZSBXSVBFX0I0XzIzNiAgICAgMTQKLSAge0JPWF9DTE9DSywgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAyLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDEsIDEsIDAsIDIsIDAsIDEsCi0gICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDEsIDEsIDAsIDIsIDIsIDF9LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgYm94X2Nsb2NrXzhiW11bOCAqIDEwXSA9IHsKLSNkZWZpbmUgV0lQRV9COF8yNjEgICAgIDAKLSAge0JPWF9DTE9DSywgMiwgMSwgMCwgMiwgMiwgMCwgNCwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAyLCAxLCAwLCA0LCAxLCAxLCAyLCAwLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDIsIDAsIDIsIDAsIDEsIDMsCi0gICAgICAgIEJPWF9DTE9DSywgMiwgMSwgMCwgMCwgMSwgMywgMiwgMiwgNCwKLSAgICAgICAgQk9YX0NMT0NLLCAyLCAzLCAwLCAyLCAyLCAwLCA0LCAzLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDIsIDMsIDAsIDQsIDMsIDEsIDIsIDQsIDIsCi0gICAgICAgIEJPWF9DTE9DSywgMiwgMywgMCwgMiwgNCwgMiwgMCwgMywgMywKLSAgICAgIEJPWF9DTE9DSywgMiwgMywgMCwgMCwgMywgMywgMiwgMiwgNH0sCi0jZGVmaW5lIFdJUEVfQjhfMjYyICAgICAxCi0gIHtCT1hfQ0xPQ0ssIDEsIDIsIDAsIDIsIDIsIDAsIDEsIDAsIDEsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMiwgMCwgMSwgMCwgMSwgMCwgMiwgMiwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAyLCAwLCAwLCAyLCAyLCAxLCA0LCAzLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDEsIDQsIDMsIDIsIDIsIDQsCi0gICAgICAgIEJPWF9DTE9DSywgMywgMiwgMCwgMiwgMiwgMCwgMywgMCwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAzLCAyLCAwLCAzLCAwLCAxLCA0LCAyLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDMsIDIsIDAsIDQsIDIsIDIsIDMsIDQsIDMsCi0gICAgICBCT1hfQ0xPQ0ssIDMsIDIsIDAsIDMsIDQsIDMsIDIsIDIsIDR9LAotI2RlZmluZSBXSVBFX0I4XzI2MyAgICAgMgotICB7Qk9YX0NMT0NLLCAyLCAxLCAwLCAyLCAwLCAwLCA0LCAxLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDIsIDEsIDAsIDQsIDEsIDEsIDIsIDIsIDIsCi0gICAgICAgIEJPWF9DTE9DSywgMiwgMSwgMCwgMiwgMCwgMCwgMCwgMSwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAyLCAxLCAwLCAwLCAxLCAxLCAyLCAyLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDIsIDMsIDAsIDIsIDQsIDAsIDQsIDMsIDEsCi0gICAgICAgIEJPWF9DTE9DSywgMiwgMywgMCwgNCwgMywgMSwgMiwgMiwgMiwKLSAgICAgICAgQk9YX0NMT0NLLCAyLCAzLCAwLCAyLCA0LCAwLCAwLCAzLCAxLAotICAgICAgQk9YX0NMT0NLLCAyLCAzLCAwLCAwLCAzLCAxLCAyLCAyLCAyfSwKLSNkZWZpbmUgV0lQRV9COF8yNjQgICAgIDMKLSAge0JPWF9DTE9DSywgMSwgMiwgMCwgMCwgMiwgMCwgMSwgMCwgMSwKLSAgICAgICAgQk9YX0NMT0NLLCAxLCAyLCAwLCAxLCAwLCAxLCAyLCAyLCAyLAotICAgICAgICBCT1hfQ0xPQ0ssIDEsIDIsIDAsIDAsIDIsIDAsIDEsIDQsIDEsCi0gICAgICAgIEJPWF9DTE9DSywgMSwgMiwgMCwgMSwgNCwgMSwgMiwgMiwgMiwKLSAgICAgICAgQk9YX0NMT0NLLCAzLCAyLCAwLCA0LCAyLCAwLCAzLCAwLCAxLAotICAgICAgICBCT1hfQ0xPQ0ssIDMsIDIsIDAsIDMsIDAsIDEsIDIsIDIsIDIsCi0gICAgICAgIEJPWF9DTE9DSywgMywgMiwgMCwgNCwgMiwgMCwgMywgNCwgMSwKLSAgICAgIEJPWF9DTE9DSywgMywgMiwgMCwgMywgNCwgMSwgMiwgMiwgMn0sCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCB0cmlhbmdsZXNfMnRbXVsyICogOV0gPSB7Ci0gIC8qIDMgLT4gNiAqLwotI2RlZmluZSBXSVBFX1QyXzMgICAgICAgMAotICB7MCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwKLSAgICAgIDEsIDAsIDEsIDAsIDAsIDAsIDEsIDEsIDF9LAotI2RlZmluZSBXSVBFX1QyXzQgICAgICAgV0lQRV9UMl8zKzEKLSAgezAsIDAsIDEsIDEsIDAsIDAsIDAsIDEsIDEsCi0gICAgICAxLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxfSwKLSNkZWZpbmUgV0lQRV9UMl81ICAgICAgIFdJUEVfVDJfNCsxCi0gIHswLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAwLAotICAgICAgMSwgMCwgMSwgMCwgMCwgMSwgMSwgMSwgMH0sCi0jZGVmaW5lIFdJUEVfVDJfNiAgICAgICBXSVBFX1QyXzUrMQotICB7MCwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMCwKLSAgICAgIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDF9LAotI2RlZmluZSBXSVBFX1QyXzQxICAgICAgV0lQRV9UMl82KzEKLSAgezAsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDEsCi0gICAgICAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAyfSwKLSNkZWZpbmUgV0lQRV9UMl80MiAgICAgIFdJUEVfVDJfNDErMQotICB7MCwgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwKLSAgICAgIDAsIDAsIDEsIDAsIDEsIDIsIDEsIDEsIDF9LAotI2RlZmluZSBXSVBFX1QyXzQ1ICAgICAgV0lQRV9UMl80MisxCi0gIHswLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLAotICAgICAgMSwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMX0sCi0jZGVmaW5lIFdJUEVfVDJfNDYgICAgICBXSVBFX1QyXzQ1KzEKLSAgezAsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDAsCi0gICAgICAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAwfSwKLSNkZWZpbmUgV0lQRV9UMl8yNDUgICAgIFdJUEVfVDJfNDYrMQotICB7MCwgMCwgMCwgMiwgMCwgMCwgMiwgMiwgMSwKLSAgICAgIDIsIDIsIDAsIDAsIDIsIDAsIDAsIDAsIDF9LAotI2RlZmluZSBXSVBFX1QyXzI0NiAgICAgV0lQRV9UMl8yNDUrMQotICB7MCwgMiwgMCwgMCwgMCwgMCwgMiwgMCwgMSwKLSAgICAgIDIsIDAsIDAsIDIsIDIsIDAsIDAsIDIsIDF9LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgdHJpYW5nbGVzXzN0W11bMyAqIDldID0gewotICAvKiAyMyAtPiAyNiAqLwotI2RlZmluZSBXSVBFX1QzXzIzICAgICAgMAotICB7MCwgMCwgMSwgMSwgMCwgMCwgMCwgMiwgMSwKLSAgICAgICAgMSwgMCwgMCwgMCwgMiwgMSwgMiwgMiwgMSwKLSAgICAgIDEsIDAsIDAsIDIsIDAsIDEsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1QzXzI0ICAgICAgMQotICB7MCwgMCwgMSwgMiwgMCwgMSwgMiwgMSwgMCwKLSAgICAgICAgMCwgMCwgMSwgMiwgMSwgMCwgMCwgMiwgMSwKLSAgICAgIDIsIDEsIDAsIDAsIDIsIDEsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1QzXzI1ICAgICAgMgotICB7MCwgMCwgMSwgMCwgMiwgMSwgMSwgMiwgMCwKLSAgICAgICAgMCwgMCwgMSwgMiwgMCwgMSwgMSwgMiwgMCwKLSAgICAgIDIsIDAsIDEsIDEsIDIsIDAsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1QzXzI2ICAgICAgMwotICB7MCwgMCwgMSwgMiwgMCwgMSwgMCwgMSwgMCwKLSAgICAgICAgMiwgMCwgMSwgMCwgMSwgMCwgMiwgMiwgMSwKLSAgICAgIDAsIDEsIDAsIDAsIDIsIDEsIDIsIDIsIDF9LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgdHJpYW5nbGVzXzR0W11bNCAqIDldID0gewotI2RlZmluZSBXSVBFX1Q0XzYxICAgICAgMAotICB7MCwgMCwgMSwgMSwgMCwgMCwgMSwgMiwgMSwKLSAgICAgICAgMCwgMCwgMSwgMCwgMiwgMiwgMSwgMiwgMSwKLSAgICAgICAgMSwgMCwgMCwgMiwgMCwgMSwgMSwgMiwgMSwKLSAgICAgIDIsIDAsIDEsIDEsIDIsIDEsIDIsIDIsIDJ9LAotI2RlZmluZSBXSVBFX1Q0XzYyICAgICAgMQotICB7MCwgMCwgMiwgMiwgMCwgMSwgMCwgMSwgMSwKLSAgICAgICAgMiwgMCwgMSwgMCwgMSwgMSwgMiwgMSwgMCwKLSAgICAgICAgMCwgMSwgMSwgMiwgMSwgMCwgMiwgMiwgMSwKLSAgICAgIDAsIDEsIDEsIDAsIDIsIDIsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1Q0XzYzICAgICAgMgotICB7MCwgMCwgMiwgMSwgMCwgMSwgMCwgMiwgMSwKLSAgICAgICAgMSwgMCwgMSwgMCwgMiwgMSwgMSwgMiwgMCwKLSAgICAgICAgMSwgMCwgMSwgMSwgMiwgMCwgMiwgMiwgMSwKLSAgICAgIDEsIDAsIDEsIDIsIDAsIDIsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1Q0XzY0ICAgICAgMwotICB7MCwgMCwgMSwgMiwgMCwgMiwgMiwgMSwgMSwKLSAgICAgICAgMCwgMCwgMSwgMCwgMSwgMCwgMiwgMSwgMSwKLSAgICAgICAgMCwgMSwgMCwgMiwgMSwgMSwgMCwgMiwgMSwKLSAgICAgIDIsIDEsIDEsIDAsIDIsIDEsIDIsIDIsIDJ9LAotI2RlZmluZSBXSVBFX1Q0XzY1ICAgICAgNAotICB7MCwgMCwgMCwgMSwgMCwgMSwgMSwgMiwgMCwKLSAgICAgICAgMCwgMCwgMCwgMCwgMiwgMSwgMSwgMiwgMCwKLSAgICAgICAgMSwgMCwgMSwgMiwgMCwgMCwgMSwgMiwgMCwKLSAgICAgIDIsIDAsIDAsIDEsIDIsIDAsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1Q0XzY2ICAgICAgNQotICB7MCwgMCwgMSwgMiwgMCwgMCwgMCwgMSwgMCwKLSAgICAgICAgMiwgMCwgMCwgMCwgMSwgMCwgMiwgMSwgMSwKLSAgICAgICAgMCwgMSwgMCwgMiwgMSwgMSwgMiwgMiwgMCwKLSAgICAgIDAsIDEsIDAsIDAsIDIsIDEsIDIsIDIsIDB9LAotI2RlZmluZSBXSVBFX1Q0XzY3ICAgICAgNgotICB7MCwgMCwgMSwgMSwgMCwgMCwgMCwgMiwgMCwKLSAgICAgICAgMSwgMCwgMCwgMCwgMiwgMCwgMSwgMiwgMSwKLSAgICAgICAgMSwgMCwgMCwgMSwgMiwgMSwgMiwgMiwgMCwKLSAgICAgIDEsIDAsIDAsIDIsIDAsIDEsIDIsIDIsIDB9LAotI2RlZmluZSBXSVBFX1Q0XzY4ICAgICAgNwotICB7MCwgMCwgMCwgMiwgMCwgMSwgMiwgMSwgMCwKLSAgICAgICAgMCwgMCwgMCwgMCwgMSwgMSwgMiwgMSwgMCwKLSAgICAgICAgMCwgMSwgMSwgMiwgMSwgMCwgMCwgMiwgMCwKLSAgICAgIDIsIDEsIDAsIDAsIDIsIDAsIDIsIDIsIDF9LAotI2RlZmluZSBXSVBFX1Q0XzEwMSAgICAgOAotICB7MCwgMCwgMSwgMiwgMCwgMSwgMSwgMSwgMCwKLSAgICAgICAgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMiwgMSwKLSAgICAgICAgMSwgMSwgMCwgMCwgMiwgMSwgMiwgMiwgMSwKLSAgICAgIDIsIDAsIDEsIDEsIDEsIDAsIDIsIDIsIDF9LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgdHJpYW5nbGVzXzh0W11bOCAqIDldID0gewotICAvKiA3ICovCi0jZGVmaW5lIFdJUEVfVDhfNyAgICAgICAwCi0gIHswLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLAotICAgICAgICAxLCAwLCAxLCAyLCAwLCAwLCAxLCAxLCAxLAotICAgICAgICAyLCAwLCAwLCAxLCAxLCAxLCAyLCAxLCAxLAotICAgICAgICAxLCAxLCAxLCAyLCAxLCAxLCAyLCAyLCAwLAotICAgICAgICAxLCAxLCAxLCAxLCAyLCAxLCAyLCAyLCAwLAotICAgICAgICAxLCAxLCAxLCAwLCAyLCAwLCAxLCAyLCAxLAotICAgICAgICAwLCAxLCAxLCAxLCAxLCAxLCAwLCAyLCAwLAotICAgICAgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMX0sCi0jZGVmaW5lIFdJUEVfVDhfNDMgICAgICAxCi0gIHswLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAxLAotICAgICAgICAxLCAwLCAwLCAyLCAwLCAxLCAxLCAxLCAxLAotICAgICAgICAyLCAwLCAxLCAxLCAxLCAxLCAyLCAxLCAyLAotICAgICAgICAxLCAxLCAxLCAyLCAxLCAyLCAyLCAyLCAxLAotICAgICAgICAxLCAxLCAxLCAxLCAyLCAwLCAyLCAyLCAxLAotICAgICAgICAxLCAxLCAxLCAwLCAyLCAxLCAxLCAyLCAwLAotICAgICAgICAwLCAxLCAyLCAxLCAxLCAxLCAwLCAyLCAxLAotICAgICAgMCwgMCwgMSwgMCwgMSwgMiwgMSwgMSwgMX0sCi0jZGVmaW5lIFdJUEVfVDhfNDQgICAgICAyCi0gIHswLCAwLCAxLCAxLCAwLCAyLCAxLCAxLCAxLAotICAgICAgICAxLCAwLCAyLCAyLCAwLCAxLCAxLCAxLCAxLAotICAgICAgICAyLCAwLCAxLCAxLCAxLCAxLCAyLCAxLCAwLAotICAgICAgICAxLCAxLCAxLCAyLCAxLCAwLCAyLCAyLCAxLAotICAgICAgICAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAxLAotICAgICAgICAxLCAxLCAxLCAwLCAyLCAxLCAxLCAyLCAyLAotICAgICAgICAwLCAxLCAwLCAxLCAxLCAxLCAwLCAyLCAxLAotICAgICAgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMX0sCi0jZGVmaW5lIFdJUEVfVDhfNDcgICAgICAzCi0gIHswLCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAwLAotICAgICAgICAxLCAwLCAxLCAyLCAwLCAwLCAxLCAxLCAwLAotICAgICAgICAyLCAwLCAwLCAxLCAxLCAwLCAyLCAxLCAxLAotICAgICAgICAxLCAxLCAwLCAyLCAxLCAxLCAyLCAyLCAwLAotICAgICAgICAxLCAxLCAwLCAxLCAyLCAxLCAyLCAyLCAwLAotICAgICAgICAxLCAxLCAwLCAwLCAyLCAwLCAxLCAyLCAxLAotICAgICAgICAwLCAxLCAxLCAxLCAxLCAwLCAwLCAyLCAwLAotICAgICAgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMH0sCi0jZGVmaW5lIFdJUEVfVDhfNDggICAgICA0Ci0gIHswLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLAotICAgICAgICAxLCAwLCAwLCAwLCAxLCAwLCAxLCAxLCAxLAotICAgICAgICAxLCAwLCAwLCAyLCAwLCAxLCAyLCAxLCAwLAotICAgICAgICAxLCAwLCAwLCAxLCAxLCAxLCAyLCAxLCAwLAotICAgICAgICAwLCAxLCAwLCAxLCAxLCAxLCAxLCAyLCAwLAotICAgICAgICAwLCAxLCAwLCAwLCAyLCAxLCAxLCAyLCAwLAotICAgICAgICAxLCAxLCAxLCAyLCAxLCAwLCAxLCAyLCAwLAotICAgICAgMiwgMSwgMCwgMSwgMiwgMCwgMiwgMiwgMX0sCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCB0cmlhbmdsZXNfMTZ0W11bMTYgKiA5XSA9IHsKLSAgLyogOCAqLwotI2RlZmluZSBXSVBFX1QxNl84ICAgICAgMAotICB7MCwgMCwgMSwgMiwgMCwgMSwgMSwgMSwgMCwKLSAgICAgICAgMiwgMCwgMSwgMSwgMSwgMCwgMiwgMiwgMSwKLSAgICAgICAgMSwgMSwgMCwgMCwgMiwgMSwgMiwgMiwgMSwKLSAgICAgICAgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMiwgMSwKLSAgICAgICAgMiwgMCwgMSwgNCwgMCwgMSwgMywgMSwgMCwKLSAgICAgICAgNCwgMCwgMSwgMywgMSwgMCwgNCwgMiwgMSwKLSAgICAgICAgMywgMSwgMCwgMiwgMiwgMSwgNCwgMiwgMSwKLSAgICAgICAgMiwgMCwgMSwgMywgMSwgMCwgMiwgMiwgMSwKLSAgICAgICAgMCwgMiwgMSwgMiwgMiwgMSwgMSwgMywgMCwKLSAgICAgICAgMiwgMiwgMSwgMSwgMywgMCwgMiwgNCwgMSwKLSAgICAgICAgMSwgMywgMCwgMCwgNCwgMSwgMiwgNCwgMSwKLSAgICAgICAgMCwgMiwgMSwgMSwgMywgMCwgMCwgNCwgMSwKLSAgICAgICAgMiwgMiwgMSwgNCwgMiwgMSwgMywgMywgMCwKLSAgICAgICAgNCwgMiwgMSwgMywgMywgMCwgNCwgNCwgMSwKLSAgICAgICAgMywgMywgMCwgMiwgNCwgMSwgNCwgNCwgMSwKLSAgICAgIDIsIDIsIDEsIDMsIDMsIDAsIDIsIDQsIDF9Ci19OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0V2lwZUNvbmZpZyBHc3RXaXBlQ29uZmlnOwotCi1zdHJ1Y3QgX0dzdFdpcGVDb25maWcKLXsKLSAgY29uc3QgZ2ludCAqb2JqZWN0czsKLSAgZ2ludCBub2JqZWN0czsKLSAgZ2ludCB4c2NhbGU7Ci0gIGdpbnQgeXNjYWxlOwotICBnaW50IGNzY2FsZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBHc3RXaXBlQ29uZmlnIHdpcGVfY29uZmlnW10gPSB7Ci0jZGVmaW5lIFdJUEVfQ09ORklHXzEgICAwCi0gIHtib3hlc18xYltXSVBFX0IxXzFdLCAxLCAwLCAwLCAwfSwgICAgLyogMSAqLwotI2RlZmluZSBXSVBFX0NPTkZJR18yICAgV0lQRV9DT05GSUdfMSsxCi0gIHtib3hlc18xYltXSVBFX0IxXzJdLCAxLCAwLCAwLCAwfSwgICAgLyogMiAqLwotI2RlZmluZSBXSVBFX0NPTkZJR18zICAgV0lQRV9DT05GSUdfMisxCi0gIHt0cmlhbmdsZXNfMnRbV0lQRV9UMl8zXSwgMiwgMCwgMCwgMH0sICAgICAgICAvKiAzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzQgICBXSVBFX0NPTkZJR18zKzEKLSAge3RyaWFuZ2xlc18ydFtXSVBFX1QyXzRdLCAyLCAwLCAwLCAwfSwgICAgICAgIC8qIDQgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfNSAgIFdJUEVfQ09ORklHXzQrMQotICB7dHJpYW5nbGVzXzJ0W1dJUEVfVDJfNV0sIDIsIDAsIDAsIDB9LCAgICAgICAgLyogNSAqLwotI2RlZmluZSBXSVBFX0NPTkZJR182ICAgV0lQRV9DT05GSUdfNSsxCi0gIHt0cmlhbmdsZXNfMnRbV0lQRV9UMl82XSwgMiwgMCwgMCwgMH0sICAgICAgICAvKiA2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzcgICBXSVBFX0NPTkZJR182KzEKLSAge3RyaWFuZ2xlc184dFtXSVBFX1Q4XzddLCA4LCAxLCAxLCAwfSwgICAgICAgIC8qIDcgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfOCAgIFdJUEVfQ09ORklHXzcrMQotICB7dHJpYW5nbGVzXzE2dFtXSVBFX1QxNl84XSwgMTYsIDIsIDIsIDB9LCAgICAgLyogOCAqLwotCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIxICBXSVBFX0NPTkZJR184KzEKLSAge2JveGVzXzJiW1dJUEVfQjJfMjFdLCAyLCAxLCAxLCAwfSwgICAvKiAyMSAqLwotI2RlZmluZSBXSVBFX0NPTkZJR18yMiAgV0lQRV9DT05GSUdfMjErMQotICB7Ym94ZXNfMmJbV0lQRV9CMl8yMl0sIDIsIDEsIDEsIDB9LCAgIC8qIDIyICovCi0KLSNkZWZpbmUgV0lQRV9DT05GSUdfMjMgIFdJUEVfQ09ORklHXzIyKzEKLSAge3RyaWFuZ2xlc18zdFtXSVBFX1QzXzIzXSwgMywgMSwgMSwgMH0sICAgICAgIC8qIDIzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0ICBXSVBFX0NPTkZJR18yMysxCi0gIHt0cmlhbmdsZXNfM3RbV0lQRV9UM18yNF0sIDMsIDEsIDEsIDB9LCAgICAgICAvKiAyNCAqLwotI2RlZmluZSBXSVBFX0NPTkZJR18yNSAgV0lQRV9DT05GSUdfMjQrMQotICB7dHJpYW5nbGVzXzN0W1dJUEVfVDNfMjVdLCAzLCAxLCAxLCAwfSwgICAgICAgLyogMjUgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfMjYgIFdJUEVfQ09ORklHXzI1KzEKLSAge3RyaWFuZ2xlc18zdFtXSVBFX1QzXzI2XSwgMywgMSwgMSwgMH0sICAgICAgIC8qIDI2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzQxICBXSVBFX0NPTkZJR18yNisxCi0gIHt0cmlhbmdsZXNfMnRbV0lQRV9UMl80MV0sIDIsIDAsIDAsIDF9LCAgICAgICAvKiA0MSAqLwotI2RlZmluZSBXSVBFX0NPTkZJR180MiAgV0lQRV9DT05GSUdfNDErMQotICB7dHJpYW5nbGVzXzJ0W1dJUEVfVDJfNDJdLCAyLCAwLCAwLCAxfSwgICAgICAgLyogNDIgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfNDMgIFdJUEVfQ09ORklHXzQyKzEKLSAge3RyaWFuZ2xlc184dFtXSVBFX1Q4XzQzXSwgOCwgMSwgMSwgMX0sICAgICAgIC8qIDQzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzQ0ICBXSVBFX0NPTkZJR180MysxCi0gIHt0cmlhbmdsZXNfOHRbV0lQRV9UOF80NF0sIDgsIDEsIDEsIDF9LCAgICAgICAvKiA0NCAqLwotI2RlZmluZSBXSVBFX0NPTkZJR180NSAgV0lQRV9DT05GSUdfNDQrMQotICB7dHJpYW5nbGVzXzJ0W1dJUEVfVDJfNDVdLCAyLCAwLCAwLCAwfSwgICAgICAgLyogNDUgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfNDYgIFdJUEVfQ09ORklHXzQ1KzEKLSAge3RyaWFuZ2xlc18ydFtXSVBFX1QyXzQ2XSwgMiwgMCwgMCwgMH0sICAgICAgIC8qIDQ2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzQ3ICBXSVBFX0NPTkZJR180NisxCi0gIHt0cmlhbmdsZXNfOHRbV0lQRV9UOF80N10sIDgsIDEsIDEsIDB9LCAgICAgICAvKiA0NyAqLwotI2RlZmluZSBXSVBFX0NPTkZJR180OCAgV0lQRV9DT05GSUdfNDcrMQotICB7dHJpYW5nbGVzXzh0W1dJUEVfVDhfNDhdLCA4LCAxLCAxLCAwfSwgICAgICAgLyogNDggKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfNjEgIFdJUEVfQ09ORklHXzQ4KzEKLSAge3RyaWFuZ2xlc180dFtXSVBFX1Q0XzYxXSwgNCwgMSwgMSwgMX0sICAgICAgIC8qIDYxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzYyICBXSVBFX0NPTkZJR182MSsxCi0gIHt0cmlhbmdsZXNfNHRbV0lQRV9UNF82Ml0sIDQsIDEsIDEsIDF9LCAgICAgICAvKiA2MiAqLwotI2RlZmluZSBXSVBFX0NPTkZJR182MyAgV0lQRV9DT05GSUdfNjIrMQotICB7dHJpYW5nbGVzXzR0W1dJUEVfVDRfNjNdLCA0LCAxLCAxLCAxfSwgICAgICAgLyogNjMgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfNjQgIFdJUEVfQ09ORklHXzYzKzEKLSAge3RyaWFuZ2xlc180dFtXSVBFX1Q0XzY0XSwgNCwgMSwgMSwgMX0sICAgICAgIC8qIDY0ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzY1ICBXSVBFX0NPTkZJR182NCsxCi0gIHt0cmlhbmdsZXNfNHRbV0lQRV9UNF82NV0sIDQsIDEsIDEsIDB9LCAgICAgICAvKiA2NSAqLwotI2RlZmluZSBXSVBFX0NPTkZJR182NiAgV0lQRV9DT05GSUdfNjUrMQotICB7dHJpYW5nbGVzXzR0W1dJUEVfVDRfNjZdLCA0LCAxLCAxLCAwfSwgICAgICAgLyogNjYgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfNjcgIFdJUEVfQ09ORklHXzY2KzEKLSAge3RyaWFuZ2xlc180dFtXSVBFX1Q0XzY3XSwgNCwgMSwgMSwgMH0sICAgICAgIC8qIDY3ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzY4ICBXSVBFX0NPTkZJR182NysxCi0gIHt0cmlhbmdsZXNfNHRbV0lQRV9UNF82OF0sIDQsIDEsIDEsIDB9LCAgICAgICAvKiA2OCAqLwotI2RlZmluZSBXSVBFX0NPTkZJR18xMDEgV0lQRV9DT05GSUdfNjgrMQotICB7dHJpYW5nbGVzXzR0W1dJUEVfVDRfMTAxXSwgNCwgMSwgMSwgMH0sICAgICAgLyogMTAxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwMSBXSVBFX0NPTkZJR18xMDErMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjAxXSwgNCwgMSwgMSwgMn0sICAgICAgLyogMjAxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwMiBXSVBFX0NPTkZJR18yMDErMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjAyXSwgNCwgMSwgMSwgMn0sICAgICAgLyogMjAyICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwMyBXSVBFX0NPTkZJR18yMDIrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjAzXSwgNCwgMSwgMSwgMn0sICAgICAgLyogMjAzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwNCBXSVBFX0NPTkZJR18yMDMrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjA0XSwgNCwgMSwgMSwgMn0sICAgICAgLyogMjA0ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwNSBXSVBFX0NPTkZJR18yMDQrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjA1XSwgNCwgMSwgMSwgMX0sICAgICAgLyogMjA1ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwNiBXSVBFX0NPTkZJR18yMDUrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjA2XSwgNCwgMSwgMSwgMX0sICAgICAgLyogMjA2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIwNyBXSVBFX0NPTkZJR18yMDYrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjA3XSwgNCwgMSwgMSwgMH0sICAgICAgLyogMjA3ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIxMSBXSVBFX0NPTkZJR18yMDcrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjExXSwgNCwgMSwgMSwgMX0sICAgICAgLyogMjExICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIxMiBXSVBFX0NPTkZJR18yMTErMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjEyXSwgNCwgMSwgMSwgMX0sICAgICAgLyogMjEyICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIxMyBXSVBFX0NPTkZJR18yMTIrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjEzXSwgNCwgMSwgMSwgMH0sICAgICAgLyogMjEzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIxNCBXSVBFX0NPTkZJR18yMTMrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjE0XSwgNCwgMSwgMSwgMH0sICAgICAgLyogMjE0ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyMSBXSVBFX0NPTkZJR18yMTQrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjIxXSwgMiwgMSwgMSwgMX0sICAgICAgLyogMjIxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyMiBXSVBFX0NPTkZJR18yMjErMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjIyXSwgMiwgMSwgMSwgMX0sICAgICAgLyogMjIyICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyMyBXSVBFX0NPTkZJR18yMjIrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjIzXSwgMiwgMSwgMSwgMX0sICAgICAgLyogMjIzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyNCBXSVBFX0NPTkZJR18yMjMrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjI0XSwgMiwgMSwgMSwgMX0sICAgICAgLyogMjI0ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyNSBXSVBFX0NPTkZJR18yMjQrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjI1XSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjI1ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyNiBXSVBFX0NPTkZJR18yMjUrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjI2XSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjI2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyNyBXSVBFX0NPTkZJR18yMjYrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjI3XSwgNCwgMSwgMSwgMX0sICAgICAgLyogMjI3ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIyOCBXSVBFX0NPTkZJR18yMjcrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjI4XSwgNCwgMSwgMSwgMX0sICAgICAgLyogMjI4ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIzMSBXSVBFX0NPTkZJR18yMjgrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjMxXSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjMxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIzMiBXSVBFX0NPTkZJR18yMzErMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjMyXSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjMyICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIzMyBXSVBFX0NPTkZJR18yMzIrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjMzXSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjMzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIzNCBXSVBFX0NPTkZJR18yMzMrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjM0XSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjM0ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIzNSBXSVBFX0NPTkZJR18yMzQrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjM1XSwgNCwgMSwgMSwgMH0sICAgICAgLyogMjM1ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzIzNiBXSVBFX0NPTkZJR18yMzUrMQotICB7Ym94X2Nsb2NrXzRiW1dJUEVfQjRfMjM2XSwgNCwgMSwgMSwgMH0sICAgICAgLyogMjM2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0MSBXSVBFX0NPTkZJR18yMzYrMQotICB7Ym94X2Nsb2NrXzFiW1dJUEVfQjFfMjQxXSwgMSwgMCwgMCwgMH0sICAgICAgLyogMjQxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0MiBXSVBFX0NPTkZJR18yNDErMQotICB7Ym94X2Nsb2NrXzFiW1dJUEVfQjFfMjQyXSwgMSwgMCwgMCwgMH0sICAgICAgLyogMjQyICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0MyBXSVBFX0NPTkZJR18yNDIrMQotICB7Ym94X2Nsb2NrXzFiW1dJUEVfQjFfMjQzXSwgMSwgMCwgMCwgMH0sICAgICAgLyogMjQzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0NCBXSVBFX0NPTkZJR18yNDMrMQotICB7Ym94X2Nsb2NrXzFiW1dJUEVfQjFfMjQ0XSwgMSwgMCwgMCwgMH0sICAgICAgLyogMjQ0ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0NSBXSVBFX0NPTkZJR18yNDQrMQotICB7dHJpYW5nbGVzXzJ0W1dJUEVfVDJfMjQ1XSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjQ1ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI0NiBXSVBFX0NPTkZJR18yNDUrMQotICB7dHJpYW5nbGVzXzJ0W1dJUEVfVDJfMjQ2XSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjQ2ICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI1MSBXSVBFX0NPTkZJR18yNDYrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjUxXSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjUxICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI1MiBXSVBFX0NPTkZJR18yNTErMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjUyXSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjUyICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI1MyBXSVBFX0NPTkZJR18yNTIrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjUzXSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjUzICovCi0jZGVmaW5lIFdJUEVfQ09ORklHXzI1NCBXSVBFX0NPTkZJR18yNTMrMQotICB7Ym94X2Nsb2NrXzJiW1dJUEVfQjJfMjU0XSwgMiwgMSwgMSwgMH0sICAgICAgLyogMjU0ICovCi0KLSNkZWZpbmUgV0lQRV9DT05GSUdfMjYxIFdJUEVfQ09ORklHXzI1NCsxCi0gIHtib3hfY2xvY2tfOGJbV0lQRV9COF8yNjFdLCA4LCAyLCAyLCAyfSwgICAgICAvKiAyNjEgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfMjYyIFdJUEVfQ09ORklHXzI2MSsxCi0gIHtib3hfY2xvY2tfOGJbV0lQRV9COF8yNjJdLCA4LCAyLCAyLCAyfSwgICAgICAvKiAyNjIgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfMjYzIFdJUEVfQ09ORklHXzI2MisxCi0gIHtib3hfY2xvY2tfOGJbV0lQRV9COF8yNjNdLCA4LCAyLCAyLCAxfSwgICAgICAvKiAyNjMgKi8KLSNkZWZpbmUgV0lQRV9DT05GSUdfMjY0IFdJUEVfQ09ORklHXzI2MysxCi0gIHtib3hfY2xvY2tfOGJbV0lQRV9COF8yNjRdLCA4LCAyLCAyLCAxfSwgICAgICAvKiAyNjQgKi8KLX07Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2lwZV9ib3hlc19kcmF3IChHc3RNYXNrICogbWFzaykKLXsKLSAgY29uc3QgR3N0V2lwZUNvbmZpZyAqY29uZmlnID0gbWFzay0+dXNlcl9kYXRhOwotICBjb25zdCBnaW50ICppbXBhY3RzID0gY29uZmlnLT5vYmplY3RzOwotICBnaW50IHdpZHRoID0gKG1hc2stPndpZHRoID4+IGNvbmZpZy0+eHNjYWxlKTsKLSAgZ2ludCBoZWlnaHQgPSAobWFzay0+aGVpZ2h0ID4+IGNvbmZpZy0+eXNjYWxlKTsKLSAgZ2ludCBkZXB0aCA9ICgxIDw8IG1hc2stPmJwcCkgPj4gY29uZmlnLT5jc2NhbGU7Ci0KLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBjb25maWctPm5vYmplY3RzOyBpKyspIHsKLSAgICBzd2l0Y2ggKGltcGFjdHNbMF0pIHsKLSAgICAgIGNhc2UgQk9YX1ZFUlRJQ0FMOgotICAgICAgICAvKiB2Ym94IGRvZXMgbm90IGRyYXcgbGFzdCBwaXhlbHMgKi8KLSAgICAgICAgZ3N0X3NtcHRlX3BhaW50X3Zib3ggKG1hc2stPmRhdGEsIG1hc2stPndpZHRoLAotICAgICAgICAgICAgaW1wYWN0c1sxXSAqIHdpZHRoLCBpbXBhY3RzWzJdICogaGVpZ2h0LCBpbXBhY3RzWzNdICogZGVwdGgsCi0gICAgICAgICAgICBpbXBhY3RzWzRdICogd2lkdGgsIGltcGFjdHNbNV0gKiBoZWlnaHQsIGltcGFjdHNbNl0gKiBkZXB0aCk7Ci0gICAgICAgIGltcGFjdHMgKz0gNzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEJPWF9IT1JJWk9OVEFMOgotICAgICAgICAvKiBoYm94IGRvZXMgbm90IGRyYXcgbGFzdCBwaXhlbHMgKi8KLSAgICAgICAgZ3N0X3NtcHRlX3BhaW50X2hib3ggKG1hc2stPmRhdGEsIG1hc2stPndpZHRoLAotICAgICAgICAgICAgaW1wYWN0c1sxXSAqIHdpZHRoLCBpbXBhY3RzWzJdICogaGVpZ2h0LCBpbXBhY3RzWzNdICogZGVwdGgsCi0gICAgICAgICAgICBpbXBhY3RzWzRdICogd2lkdGgsIGltcGFjdHNbNV0gKiBoZWlnaHQsIGltcGFjdHNbNl0gKiBkZXB0aCk7Ci0gICAgICAgIGltcGFjdHMgKz0gNzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEJPWF9DTE9DSzoKLSAgICAgIHsKLSAgICAgICAgZ2ludCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyOwotCi0gICAgICAgIC8qIG1ha2Ugc3VyZSBub3QgdG8gZHJhdyBvdXRzaWRlIHRoZSBhcmVhICovCi0gICAgICAgIHgwID0gTUlOIChpbXBhY3RzWzFdICogd2lkdGgsIG1hc2stPndpZHRoIC0gMSk7Ci0gICAgICAgIHkwID0gTUlOIChpbXBhY3RzWzJdICogaGVpZ2h0LCBtYXNrLT5oZWlnaHQgLSAxKTsKLSAgICAgICAgeDEgPSBNSU4gKGltcGFjdHNbNF0gKiB3aWR0aCwgbWFzay0+d2lkdGggLSAxKTsKLSAgICAgICAgeTEgPSBNSU4gKGltcGFjdHNbNV0gKiBoZWlnaHQsIG1hc2stPmhlaWdodCAtIDEpOwotICAgICAgICB4MiA9IE1JTiAoaW1wYWN0c1s3XSAqIHdpZHRoLCBtYXNrLT53aWR0aCAtIDEpOwotICAgICAgICB5MiA9IE1JTiAoaW1wYWN0c1s4XSAqIGhlaWdodCwgbWFzay0+aGVpZ2h0IC0gMSk7Ci0KLSAgICAgICAgZ3N0X3NtcHRlX3BhaW50X2JveF9jbG9jayAobWFzay0+ZGF0YSwgbWFzay0+d2lkdGgsCi0gICAgICAgICAgICB4MCwgeTAsIGltcGFjdHNbM10gKiBkZXB0aCwgeDEsIHkxLCBpbXBhY3RzWzZdICogZGVwdGgsCi0gICAgICAgICAgICB4MiwgeTIsIGltcGFjdHNbOV0gKiBkZXB0aCk7Ci0gICAgICAgIGltcGFjdHMgKz0gMTA7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF93aXBlX3RyaWFuZ2xlc19jbG9ja19kcmF3IChHc3RNYXNrICogbWFzaykKLXsKLSAgY29uc3QgR3N0V2lwZUNvbmZpZyAqY29uZmlnID0gbWFzay0+dXNlcl9kYXRhOwotICBjb25zdCBnaW50ICppbXBhY3RzID0gY29uZmlnLT5vYmplY3RzOwotICBnaW50IHdpZHRoID0gKG1hc2stPndpZHRoID4+IGNvbmZpZy0+eHNjYWxlKTsKLSAgZ2ludCBoZWlnaHQgPSAobWFzay0+aGVpZ2h0ID4+IGNvbmZpZy0+eXNjYWxlKTsKLSAgZ2ludCBkZXB0aCA9ICgxIDw8IG1hc2stPmJwcCkgPj4gY29uZmlnLT5jc2NhbGU7Ci0gIGdpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ub2JqZWN0czsgaSsrKSB7Ci0gICAgZ2ludCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyOwotCi0gICAgLyogbWFrZSBzdXJlIG5vdCB0byBkcmF3IG91dHNpZGUgdGhlIGFyZWEgKi8KLSAgICB4MCA9IE1JTiAoaW1wYWN0c1swXSAqIHdpZHRoLCBtYXNrLT53aWR0aCAtIDEpOwotICAgIHkwID0gTUlOIChpbXBhY3RzWzFdICogaGVpZ2h0LCBtYXNrLT5oZWlnaHQgLSAxKTsKLSAgICB4MSA9IE1JTiAoaW1wYWN0c1szXSAqIHdpZHRoLCBtYXNrLT53aWR0aCAtIDEpOwotICAgIHkxID0gTUlOIChpbXBhY3RzWzRdICogaGVpZ2h0LCBtYXNrLT5oZWlnaHQgLSAxKTsKLSAgICB4MiA9IE1JTiAoaW1wYWN0c1s2XSAqIHdpZHRoLCBtYXNrLT53aWR0aCAtIDEpOwotICAgIHkyID0gTUlOIChpbXBhY3RzWzddICogaGVpZ2h0LCBtYXNrLT5oZWlnaHQgLSAxKTsKLQotICAgIGdzdF9zbXB0ZV9wYWludF90cmlhbmdsZV9jbG9jayAobWFzay0+ZGF0YSwgbWFzay0+d2lkdGgsCi0gICAgICAgIHgwLCB5MCwgaW1wYWN0c1syXSAqIGRlcHRoLCB4MSwgeTEsIGltcGFjdHNbNV0gKiBkZXB0aCwKLSAgICAgICAgeDIsIHkyLCBpbXBhY3RzWzhdICogZGVwdGgpOwotICAgIGltcGFjdHMgKz0gOTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcgKEdzdE1hc2sgKiBtYXNrKQotewotICBjb25zdCBHc3RXaXBlQ29uZmlnICpjb25maWcgPSBtYXNrLT51c2VyX2RhdGE7Ci0gIGNvbnN0IGdpbnQgKmltcGFjdHMgPSBjb25maWctPm9iamVjdHM7Ci0gIGdpbnQgd2lkdGggPSAobWFzay0+d2lkdGggPj4gY29uZmlnLT54c2NhbGUpOwotICBnaW50IGhlaWdodCA9IChtYXNrLT5oZWlnaHQgPj4gY29uZmlnLT55c2NhbGUpOwotICBnaW50IGRlcHRoID0gKDEgPDwgbWFzay0+YnBwKSA+PiBjb25maWctPmNzY2FsZTsKLQotICBnaW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bm9iamVjdHM7IGkrKykgewotICAgIGdpbnQgeDAsIHkwLCB4MSwgeTEsIHgyLCB5MjsKLQotICAgIC8qIG1ha2Ugc3VyZSBub3QgdG8gZHJhdyBvdXRzaWRlIHRoZSBhcmVhICovCi0gICAgeDAgPSBNSU4gKGltcGFjdHNbMF0gKiB3aWR0aCwgbWFzay0+d2lkdGggLSAxKTsKLSAgICB5MCA9IE1JTiAoaW1wYWN0c1sxXSAqIGhlaWdodCwgbWFzay0+aGVpZ2h0IC0gMSk7Ci0gICAgeDEgPSBNSU4gKGltcGFjdHNbM10gKiB3aWR0aCwgbWFzay0+d2lkdGggLSAxKTsKLSAgICB5MSA9IE1JTiAoaW1wYWN0c1s0XSAqIGhlaWdodCwgbWFzay0+aGVpZ2h0IC0gMSk7Ci0gICAgeDIgPSBNSU4gKGltcGFjdHNbNl0gKiB3aWR0aCwgbWFzay0+d2lkdGggLSAxKTsKLSAgICB5MiA9IE1JTiAoaW1wYWN0c1s3XSAqIGhlaWdodCwgbWFzay0+aGVpZ2h0IC0gMSk7Ci0KLSAgICBnc3Rfc21wdGVfcGFpbnRfdHJpYW5nbGVfbGluZWFyIChtYXNrLT5kYXRhLCBtYXNrLT53aWR0aCwKLSAgICAgICAgeDAsIHkwLCBpbXBhY3RzWzJdICogZGVwdGgsIHgxLCB5MSwgaW1wYWN0c1s1XSAqIGRlcHRoLAotICAgICAgICB4MiwgeTIsIGltcGFjdHNbOF0gKiBkZXB0aCk7Ci0gICAgaW1wYWN0cyArPSA5OwotICB9Ci19Ci0KLS8qIHNlZSBhbHNvOgotICogaHR0cDovL3d3dy53M2MucmwuYWMudWsvcGFzdHRhbGtzL3NsaWRlbWFrZXIvWE1MX011bHRpbWVkaWEvaHRtbHMvdHJhbnNpdGlvbnMuaHRtbAotICovCi1zdGF0aWMgY29uc3QgR3N0TWFza0RlZmluaXRpb24gZGVmaW5pdGlvbnNbXSA9IHsKLSAgezEsICJiYXItd2lwZS1sciIsCi0gICAgICAgICJBIGJhciBtb3ZlcyBmcm9tIGxlZnQgdG8gcmlnaHQiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzFdfSwKLSAgezIsICJiYXItd2lwZS10YiIsCi0gICAgICAgICJBIGJhciBtb3ZlcyBmcm9tIHRvcCB0byBib3R0b20iLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzJdfSwKLSAgezMsICJib3gtd2lwZS10bCIsCi0gICAgICAgICJBIGJveCBleHBhbmRzIGZyb20gdGhlIHVwcGVyLWxlZnQgY29ybmVyIHRvIHRoZSBsb3dlci1yaWdodCBjb3JuZXIiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18zXX0sCi0gIHs0LCAiYm94LXdpcGUtdHIiLAotICAgICAgICAiQSBib3ggZXhwYW5kcyBmcm9tIHRoZSB1cHBlci1yaWdodCBjb3JuZXIgdG8gdGhlIGxvd2VyLWxlZnQgY29ybmVyIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfNF19LAotICB7NSwgImJveC13aXBlLWJyIiwKLSAgICAgICAgIkEgYm94IGV4cGFuZHMgZnJvbSB0aGUgbG93ZXItcmlnaHQgY29ybmVyIHRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzVdfSwKLSAgezYsICJib3gtd2lwZS1ibCIsCi0gICAgICAgICJBIGJveCBleHBhbmRzIGZyb20gdGhlIGxvd2VyLWxlZnQgY29ybmVyIHRvIHRoZSB1cHBlci1yaWdodCBjb3JuZXIiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR182XX0sCi0gIHs3LCAiZm91ci1ib3gtd2lwZS1jaSIsCi0gICAgICAgICJBIGJveCBzaGFwZSBleHBhbmRzIGZyb20gZWFjaCBvZiB0aGUgZm91ciBjb3JuZXJzIHRvd2FyZCB0aGUgY2VudGVyIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfN119LAotICB7OCwgImZvdXItYm94LXdpcGUtY28iLAotICAgICAgICAiQSBib3ggc2hhcGUgZXhwYW5kcyBmcm9tIHRoZSBjZW50ZXIgb2YgZWFjaCBxdWFkcmFudCB0b3dhcmQgdGhlIGNvcm5lcnMgb2YgZWFjaCBxdWFkcmFudCIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzhdfSwKLSAgezIxLCAiYmFybmRvb3ItdiIsCi0gICAgICAgICJBIGNlbnRyYWwsIHZlcnRpY2FsIGxpbmUgc3BsaXRzIGFuZCBleHBhbmRzIHRvd2FyZCB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXMiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIxXX0sCi0gIHsyMiwgImJhcm5kb29yLWgiLAotICAgICAgICAiQSBjZW50cmFsLCBob3Jpem9udGFsIGxpbmUgc3BsaXRzIGFuZCBleHBhbmRzIHRvd2FyZCB0aGUgdG9wIGFuZCBib3R0b20gZWRnZXMiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIyXX0sCi0gIHsyMywgImJveC13aXBlLXRjIiwKLSAgICAgICAgIkEgYm94IGV4cGFuZHMgZnJvbSB0aGUgdG9wIGVkZ2UncyBtaWRwb2ludCB0byB0aGUgYm90dG9tIGNvcm5lcnMiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yM119LAotICB7MjQsICJib3gtd2lwZS1yYyIsCi0gICAgICAgICJBIGJveCBleHBhbmRzIGZyb20gdGhlIHJpZ2h0IGVkZ2UncyBtaWRwb2ludCB0byB0aGUgbGVmdCBjb3JuZXJzIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjRdfSwKLSAgezI1LCAiYm94LXdpcGUtYmMiLAotICAgICAgICAiQSBib3ggZXhwYW5kcyBmcm9tIHRoZSBib3R0b20gZWRnZSdzIG1pZHBvaW50IHRvIHRoZSB0b3AgY29ybmVycyIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzI1XX0sCi0gIHsyNiwgImJveC13aXBlLWxjIiwKLSAgICAgICAgIkEgYm94IGV4cGFuZHMgZnJvbSB0aGUgbGVmdCBlZGdlJ3MgbWlkcG9pbnQgdG8gdGhlIHJpZ2h0IGNvcm5lcnMiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNl19LAotICB7NDEsICJkaWFnb25hbC10bCIsCi0gICAgICAgICJBIGRpYWdvbmFsIGxpbmUgbW92ZXMgZnJvbSB0aGUgdXBwZXItbGVmdCBjb3JuZXIgdG8gdGhlIGxvd2VyLXJpZ2h0IGNvcm5lciIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzQxXX0sCi0gIHs0MiwgImRpYWdvbmFsLXRyIiwKLSAgICAgICAgIkEgZGlhZ29uYWwgbGluZSBtb3ZlcyBmcm9tIHRoZSB1cHBlciByaWdodCBjb3JuZXIgdG8gdGhlIGxvd2VyLWxlZnQgY29ybmVyIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfNDJdfSwKLSAgezQzLCAiYm93dGllLXYiLAotICAgICAgICAiVHdvIHdlZGdlIHNoYXBlcyBzbGlkZSBpbiBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBlZGdlcyB0b3dhcmQgdGhlIGNlbnRlciIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzQzXX0sCi0gIHs0NCwgImJvd3RpZS1oIiwKLSAgICAgICAgIlR3byB3ZWRnZSBzaGFwZXMgc2xpZGUgaW4gZnJvbSB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXMgdG93YXJkIHRoZSBjZW50ZXIiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR180NF19LAotICB7NDUsICJiYXJuZG9vci1kYmwiLAotICAgICAgICAiQSBkaWFnb25hbCBsaW5lIGZyb20gdGhlIGxvd2VyLWxlZnQgdG8gdXBwZXItcmlnaHQgY29ybmVycyBzcGxpdHMgYW5kIGV4cGFuZHMgdG93YXJkIHRoZSBvcHBvc2l0ZSBjb3JuZXJzIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfNDVdfSwKLSAgezQ2LCAiYmFybmRvb3ItZHRsIiwKLSAgICAgICAgIkEgZGlhZ29uYWwgbGluZSBmcm9tIHVwcGVyLWxlZnQgdG8gbG93ZXItcmlnaHQgY29ybmVycyBzcGxpdHMgYW5kIGV4cGFuZHMgdG93YXJkIHRoZSBvcHBvc2l0ZSBjb3JuZXJzIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfNDZdfSwKLSAgezQ3LCAibWlzYy1kaWFnb25hbC1kYmQiLAotICAgICAgICAiRm91ciB3ZWRnZSBzaGFwZXMgc3BsaXQgZnJvbSB0aGUgY2VudGVyIGFuZCByZXRyYWN0IHRvd2FyZCB0aGUgZm91ciBlZGdlcyIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzQ3XX0sCi0gIHs0OCwgIm1pc2MtZGlhZ29uYWwtZGQiLAotICAgICAgICAiQSBkaWFtb25kIGNvbm5lY3RpbmcgdGhlIGZvdXIgZWRnZSBtaWRwb2ludHMgc2ltdWx0YW5lb3VzbHkgY29udHJhY3RzIHRvd2FyZCB0aGUgY2VudGVyIGFuZCBleHBhbmRzIHRvd2FyZCB0aGUgZWRnZXMiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR180OF19LAotICB7NjEsICJ2ZWUtZCIsCi0gICAgICAgICJBIHdlZGdlIHNoYXBlIG1vdmVzIGZyb20gdG9wIHRvIGJvdHRvbSIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzYxXX0sCi0gIHs2MiwgInZlZS1sIiwKLSAgICAgICAgIkEgd2VkZ2Ugc2hhcGUgbW92ZXMgZnJvbSByaWdodCB0byBsZWZ0IiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfNjJdfSwKLSAgezYzLCAidmVlLXUiLAotICAgICAgICAiQSB3ZWRnZSBzaGFwZSBtb3ZlcyBmcm9tIGJvdHRvbSB0byB0b3AiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR182M119LAotICB7NjQsICJ2ZWUtciIsCi0gICAgICAgICJBIHdlZGdlIHNoYXBlIG1vdmVzIGZyb20gbGVmdCB0byByaWdodCIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzY0XX0sCi0gIHs2NSwgImJhcm52ZWUtZCIsCi0gICAgICAgICJBICdWJyBzaGFwZSBleHRlbmRpbmcgZnJvbSB0aGUgYm90dG9tIGVkZ2UncyBtaWRwb2ludCB0byB0aGUgb3Bwb3NpdGUgY29ybmVycyBjb250cmFjdHMgdG93YXJkIHRoZSBjZW50ZXIgYW5kIGV4cGFuZHMgdG93YXJkIHRoZSBlZGdlcyIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzY1XX0sCi0gIHs2NiwgImJhcm52ZWUtbCIsCi0gICAgICAgICJBICdWJyBzaGFwZSBleHRlbmRpbmcgZnJvbSB0aGUgbGVmdCBlZGdlJ3MgbWlkcG9pbnQgdG8gdGhlIG9wcG9zaXRlIGNvcm5lcnMgY29udHJhY3RzIHRvd2FyZCB0aGUgY2VudGVyIGFuZCBleHBhbmRzIHRvd2FyZCB0aGUgZWRnZXMiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR182Nl19LAotICB7NjcsICJiYXJudmVlLXUiLAotICAgICAgICAiQSAnVicgc2hhcGUgZXh0ZW5kaW5nIGZyb20gdGhlIHRvcCBlZGdlJ3MgbWlkcG9pbnQgdG8gdGhlIG9wcG9zaXRlIGNvcm5lcnMgY29udHJhY3RzIHRvd2FyZCB0aGUgY2VudGVyIGFuZCBleHBhbmRzIHRvd2FyZCB0aGUgZWRnZXMiLAotICAgICAgICBnc3Rfd2lwZV90cmlhbmdsZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR182N119LAotICB7NjgsICJiYXJudmVlLXIiLAotICAgICAgICAiQSAnVicgc2hhcGUgZXh0ZW5kaW5nIGZyb20gdGhlIHJpZ2h0IGVkZ2UncyBtaWRwb2ludCB0byB0aGUgb3Bwb3NpdGUgY29ybmVycyBjb250cmFjdHMgdG93YXJkIHRoZSBjZW50ZXIgYW5kIGV4cGFuZHMgdG93YXJkIHRoZSBlZGdlcyIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzY4XX0sCi0gIHsxMDEsICJpcmlzLXJlY3QiLAotICAgICAgICAiQSByZWN0YW5nbGUgZXhwYW5kcyBmcm9tIHRoZSBjZW50ZXIuIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMTAxXX0sCi0gIHsyMDEsICJjbG9jay1jdzEyIiwKLSAgICAgICAgIkEgcmFkaWFsIGhhbmQgc3dlZXBzIGNsb2Nrd2lzZSBmcm9tIHRoZSB0d2VsdmUgbydjbG9jayBwb3NpdGlvbiIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjAxXX0sCi0gIHsyMDIsICJjbG9jay1jdzMiLAotICAgICAgICAiQSByYWRpYWwgaGFuZCBzd2VlcHMgY2xvY2t3aXNlIGZyb20gdGhlIHRocmVlIG8nY2xvY2sgcG9zaXRpb24iLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIwMl19LAotICB7MjAzLCAiY2xvY2stY3c2IiwKLSAgICAgICAgIkEgcmFkaWFsIGhhbmQgc3dlZXBzIGNsb2Nrd2lzZSBmcm9tIHRoZSBzaXggbydjbG9jayBwb3NpdGlvbiIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjAzXX0sCi0gIHsyMDQsICJjbG9jay1jdzkiLAotICAgICAgICAiQSByYWRpYWwgaGFuZCBzd2VlcHMgY2xvY2t3aXNlIGZyb20gdGhlIG5pbmUgbydjbG9jayBwb3NpdGlvbiIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjA0XX0sCi0gIHsyMDUsICJwaW53aGVlbC10YnYiLAotICAgICAgICAiVHdvIHJhZGlhbCBoYW5kcyBzd2VlcCBjbG9ja3dpc2UgZnJvbSB0aGUgdHdlbHZlIGFuZCBzaXggbydjbG9jayBwb3NpdGlvbnMiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIwNV19LAotICB7MjA2LCAicGlud2hlZWwtdGJoIiwKLSAgICAgICAgIlR3byByYWRpYWwgaGFuZHMgc3dlZXAgY2xvY2t3aXNlIGZyb20gdGhlIG5pbmUgYW5kIHRocmVlIG8nY2xvY2sgcG9zaXRpb25zIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMDZdfSwKLSAgezIwNywgInBpbndoZWVsLWZiIiwKLSAgICAgICAgIkZvdXIgcmFkaWFsIGhhbmRzIHN3ZWVwIGNsb2Nrd2lzZSIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjA3XX0sCi0gIHsyMTEsICJmYW4tY3QiLAotICAgICAgICAiQSBmYW4gdW5mb2xkcyBmcm9tIHRoZSB0b3AgZWRnZSwgdGhlIGZhbiBheGlzIGF0IHRoZSBjZW50ZXIiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIxMV19LAotICB7MjEyLCAiZmFuLWNyIiwKLSAgICAgICAgIkEgZmFuIHVuZm9sZHMgZnJvbSB0aGUgcmlnaHQgZWRnZSwgdGhlIGZhbiBheGlzIGF0IHRoZSBjZW50ZXIiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIxMl19LAotICB7MjEzLCAiZG91YmxlZmFuLWZvdiIsCi0gICAgICAgICJUd28gZmFucywgdGhlaXIgYXhlcyBhdCB0aGUgY2VudGVyLCB1bmZvbGQgZnJvbSB0aGUgdG9wIGFuZCBib3R0b20iLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIxM119LAotICB7MjE0LCAiZG91YmxlZmFuLWZvaCIsCi0gICAgICAgICJUd28gZmFucywgdGhlaXIgYXhlcyBhdCB0aGUgY2VudGVyLCB1bmZvbGQgZnJvbSB0aGUgbGVmdCBhbmQgcmlnaHQiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIxNF19LAotICB7MjIxLCAic2luZ2xlc3dlZXAtY3d0IiwKLSAgICAgICAgIkEgcmFkaWFsIGhhbmQgc3dlZXBzIGNsb2Nrd2lzZSBmcm9tIHRoZSB0b3AgZWRnZSdzIG1pZHBvaW50IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjFdfSwKLSAgezIyMiwgInNpbmdsZXN3ZWVwLWN3ciIsCi0gICAgICAgICJBIHJhZGlhbCBoYW5kIHN3ZWVwcyBjbG9ja3dpc2UgZnJvbSB0aGUgcmlnaHQgZWRnZSdzIG1pZHBvaW50IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjJdfSwKLSAgezIyMywgInNpbmdsZXN3ZWVwLWN3YiIsCi0gICAgICAgICJBIHJhZGlhbCBoYW5kIHN3ZWVwcyBjbG9ja3dpc2UgZnJvbSB0aGUgYm90dG9tIGVkZ2UncyBtaWRwb2ludCIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjIzXX0sCi0gIHsyMjQsICJzaW5nbGVzd2VlcC1jd2wiLAotICAgICAgICAiQSByYWRpYWwgaGFuZCBzd2VlcHMgY2xvY2t3aXNlIGZyb20gdGhlIGxlZnQgZWRnZSdzIG1pZHBvaW50IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjRdfSwKLSAgezIyNSwgImRvdWJsZXN3ZWVwLXB2IiwKLSAgICAgICAgIlR3byByYWRpYWwgaGFuZHMgc3dlZXAgY2xvY2t3aXNlIGFuZCBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBlZGdlcycgbWlkcG9pbnRzIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjVdfSwKLSAgezIyNiwgImRvdWJsZXN3ZWVwLXBkIiwKLSAgICAgICAgIlR3byByYWRpYWwgaGFuZHMgc3dlZXAgY2xvY2t3aXNlIGFuZCBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdlcycgbWlkcG9pbnRzIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjZdfSwKLSAgezIyNywgImRvdWJsZXN3ZWVwLW92IiwKLSAgICAgICAgIlR3byByYWRpYWwgaGFuZHMgYXR0YWNoZWQgYXQgdGhlIHRvcCBhbmQgYm90dG9tIGVkZ2VzJyBtaWRwb2ludHMgc3dlZXAgZnJvbSByaWdodCB0byBsZWZ0IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjddfSwKLSAgezIyOCwgImRvdWJsZXN3ZWVwLW9oIiwKLSAgICAgICAgIlR3byByYWRpYWwgaGFuZHMgYXR0YWNoZWQgYXQgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzJyBtaWRwb2ludHMgc3dlZXAgZnJvbSB0b3AgdG8gYm90dG9tIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMjhdfSwKLSAgezIzMSwgImZhbi10IiwKLSAgICAgICAgIkEgZmFuIHVuZm9sZHMgZnJvbSB0aGUgYm90dG9tLCB0aGUgZmFuIGF4aXMgYXQgdGhlIHRvcCBlZGdlJ3MgbWlkcG9pbnQiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIzMV19LAotICB7MjMyLCAiZmFuLXIiLAotICAgICAgICAiQSBmYW4gdW5mb2xkcyBmcm9tIHRoZSBsZWZ0LCB0aGUgZmFuIGF4aXMgYXQgdGhlIHJpZ2h0IGVkZ2UncyBtaWRwb2ludCIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjMyXX0sCi0gIHsyMzMsICJmYW4tYiIsCi0gICAgICAgICJBIGZhbiB1bmZvbGRzIGZyb20gdGhlIHRvcCwgdGhlIGZhbiBheGlzIGF0IHRoZSBib3R0b20gZWRnZSdzIG1pZHBvaW50IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yMzNdfSwKLSAgezIzNCwgImZhbi1sIiwKLSAgICAgICAgIkEgZmFuIHVuZm9sZHMgZnJvbSB0aGUgcmlnaHQsIHRoZSBmYW4gYXhpcyBhdCB0aGUgbGVmdCBlZGdlJ3MgbWlkcG9pbnQiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIzNF19LAotICB7MjM1LCAiZG91YmxlZmFuLWZpdiIsCi0gICAgICAgICJUd28gZmFucywgdGhlaXIgYXhlcyBhdCB0aGUgdG9wIGFuZCBib3R0b20sIHVuZm9sZCBmcm9tIHRoZSBjZW50ZXIiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIzNV19LAotICB7MjM2LCAiZG91YmxlZmFuLWZpaCIsCi0gICAgICAgICJUd28gZmFucywgdGhlaXIgYXhlcyBhdCB0aGUgbGVmdCBhbmQgcmlnaHQsIHVuZm9sZCBmcm9tIHRoZSBjZW50ZXIiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzIzNl19LAotICB7MjQxLCAic2luZ2xlc3dlZXAtY3d0bCIsCi0gICAgICAgICJBIHJhZGlhbCBoYW5kIHN3ZWVwcyBjbG9ja3dpc2UgZnJvbSB0aGUgdXBwZXItbGVmdCBjb3JuZXIiLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzI0MV19LAotICB7MjQyLCAic2luZ2xlc3dlZXAtY3dibCIsCi0gICAgICAgICJBIHJhZGlhbCBoYW5kIHN3ZWVwcyBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIHRoZSBsb3dlci1sZWZ0IGNvcm5lci4iLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzI0Ml19LAotICB7MjQzLCAic2luZ2xlc3dlZXAtY3diciIsCi0gICAgICAgICJBIHJhZGlhbCBoYW5kIHN3ZWVwcyBjbG9ja3dpc2UgZnJvbSB0aGUgbG93ZXItcmlnaHQgY29ybmVyIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNDNdfSwKLSAgezI0NCwgInNpbmdsZXN3ZWVwLWN3dHIiLAotICAgICAgICAiQSByYWRpYWwgaGFuZCBzd2VlcHMgY291bnRlci1jbG9ja3dpc2UgZnJvbSB0aGUgdXBwZXItcmlnaHQgY29ybmVyIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNDRdfSwKLSAgezI0NSwgImRvdWJsZXN3ZWVwLXBkdGwiLAotICAgICAgICAiVHdvIHJhZGlhbCBoYW5kcyBhdHRhY2hlZCBhdCB0aGUgdXBwZXItbGVmdCBhbmQgbG93ZXItcmlnaHQgY29ybmVycyBzd2VlcCBkb3duIGFuZCB1cCIsCi0gICAgICAgIGdzdF93aXBlX3RyaWFuZ2xlc19jbG9ja19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzI0NV19LAotICB7MjQ2LCAiZG91Ymxlc3dlZXAtcGRibCIsCi0gICAgICAgICJUd28gcmFkaWFsIGhhbmRzIGF0dGFjaGVkIGF0IHRoZSBsb3dlci1sZWZ0IGFuZCB1cHBlci1yaWdodCBjb3JuZXJzIHN3ZWVwIGRvd24gYW5kIHVwIiwKLSAgICAgICAgZ3N0X3dpcGVfdHJpYW5nbGVzX2Nsb2NrX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjQ2XX0sCi0gIHsyNTEsICJzYWxvb25kb29yLXQiLAotICAgICAgICAiVHdvIHJhZGlhbCBoYW5kcyBhdHRhY2hlZCBhdCB0aGUgdXBwZXItbGVmdCBhbmQgdXBwZXItcmlnaHQgY29ybmVycyBzd2VlcCBkb3duIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNTFdfSwKLSAgezI1MiwgInNhbG9vbmRvb3ItbCIsCi0gICAgICAgICJUd28gcmFkaWFsIGhhbmRzIGF0dGFjaGVkIGF0IHRoZSB1cHBlci1sZWZ0IGFuZCBsb3dlci1sZWZ0IGNvcm5lcnMgc3dlZXAgdG8gdGhlIHJpZ2h0IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNTJdfSwKLSAgezI1MywgInNhbG9vbmRvb3ItYiIsCi0gICAgICAgICJUd28gcmFkaWFsIGhhbmRzIGF0dGFjaGVkIGF0IHRoZSBsb3dlci1sZWZ0IGFuZCBsb3dlci1yaWdodCBjb3JuZXJzIHN3ZWVwIHVwIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNTNdfSwKLSAgezI1NCwgInNhbG9vbmRvb3ItciIsCi0gICAgICAgICJUd28gcmFkaWFsIGhhbmRzIGF0dGFjaGVkIGF0IHRoZSB1cHBlci1yaWdodCBhbmQgbG93ZXItcmlnaHQgY29ybmVycyBzd2VlcCB0byB0aGUgbGVmdCIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjU0XX0sCi0gIHsyNjEsICJ3aW5kc2hpZWxkLXIiLAotICAgICAgICAiVHdvIHJhZGlhbCBoYW5kcyBhdHRhY2hlZCBhdCB0aGUgbWlkcG9pbnRzIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBoYWx2ZXMgc3dlZXAgZnJvbSByaWdodCB0byBsZWZ0IiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNjFdfSwKLSAgezI2MiwgIndpbmRzaGllbGQtdSIsCi0gICAgICAgICJUd28gcmFkaWFsIGhhbmRzIGF0dGFjaGVkIGF0IHRoZSBtaWRwb2ludHMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGhhbHZlcyBzd2VlcCBmcm9tIHRvcCB0byBib3R0b20iLAotICAgICAgICBnc3Rfd2lwZV9ib3hlc19kcmF3LCBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95LAotICAgICAgJndpcGVfY29uZmlnW1dJUEVfQ09ORklHXzI2Ml19LAotICB7MjYzLCAid2luZHNoaWVsZC12IiwKLSAgICAgICAgIlR3byBzZXRzIG9mIHJhZGlhbCBoYW5kcyBhdHRhY2hlZCBhdCB0aGUgbWlkcG9pbnRzIG9mIHRoZSB0b3AgYW5kIGJvdHRvbSBoYWx2ZXMgc3dlZXAgZnJvbSB0b3AgdG8gYm90dG9tIGFuZCBib3R0b20gdG8gdG9wIiwKLSAgICAgICAgZ3N0X3dpcGVfYm94ZXNfZHJhdywgX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSwKLSAgICAgICZ3aXBlX2NvbmZpZ1tXSVBFX0NPTkZJR18yNjNdfSwKLSAgezI2NCwgIndpbmRzaGllbGQtaCIsCi0gICAgICAgICJUd28gc2V0cyBvZiByYWRpYWwgaGFuZHMgYXR0YWNoZWQgYXQgdGhlIG1pZHBvaW50cyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgaGFsdmVzIHN3ZWVwIGZyb20gbGVmdCB0byByaWdodCBhbmQgcmlnaHQgdG8gbGVmdCIsCi0gICAgICAgIGdzdF93aXBlX2JveGVzX2RyYXcsIF9nc3RfbWFza19kZWZhdWx0X2Rlc3Ryb3ksCi0gICAgICAmd2lwZV9jb25maWdbV0lQRV9DT05GSUdfMjY0XX0sCi0gIHswLCBOVUxMLCBOVUxMLCBOVUxMfQotfTsKLQotdm9pZAotX2dzdF9iYXJib3h3aXBlc19yZWdpc3RlciAodm9pZCkKLXsKLSAgZ2ludCBpID0gMDsKLQotICB3aGlsZSAoZGVmaW5pdGlvbnNbaV0uc2hvcnRfbmFtZSkgewotICAgIF9nc3RfbWFza19yZWdpc3RlciAoJmRlZmluaXRpb25zW2ldKTsKLSAgICBpKys7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9nc3RtYXNrLmMgYi9nc3Qvc21wdGUvZ3N0bWFzay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmI1OTE5Li4wMDAwMDAwCi0tLSBhL2dzdC9zbXB0ZS9nc3RtYXNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdG1hc2suaCIKLSNpbmNsdWRlICJwYWludC5oIgotCi1zdGF0aWMgR0xpc3QgKm1hc2tzID0gTlVMTDsKLQotdm9pZAotX2dzdF9tYXNrX2luaXQgKHZvaWQpCi17Ci0gIF9nc3RfYmFyYm94d2lwZXNfcmVnaXN0ZXIgKCk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfbWFza19jb21wYXJlIChHc3RNYXNrRGVmaW5pdGlvbiAqIGRlZjEsIEdzdE1hc2tEZWZpbml0aW9uICogZGVmMikKLXsKLSAgcmV0dXJuIChkZWYxLT50eXBlIC0gZGVmMi0+dHlwZSk7Ci19Ci0KLXZvaWQKLV9nc3RfbWFza19yZWdpc3RlciAoY29uc3QgR3N0TWFza0RlZmluaXRpb24gKiBkZWZpbml0aW9uKQotewotICBtYXNrcyA9Ci0gICAgICBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAobWFza3MsIChncG9pbnRlcikgZGVmaW5pdGlvbiwKLSAgICAgIChHQ29tcGFyZUZ1bmMpIGdzdF9tYXNrX2NvbXBhcmUpOwotfQotCi1jb25zdCBHTGlzdCAqCi1nc3RfbWFza19nZXRfZGVmaW5pdGlvbnMgKHZvaWQpCi17Ci0gIHJldHVybiBtYXNrczsKLX0KLQotc3RhdGljIEdzdE1hc2tEZWZpbml0aW9uICoKLWdzdF9tYXNrX2ZpbmRfZGVmaW5pdGlvbiAoZ2ludCB0eXBlKQotewotICBHTGlzdCAqd2FsayA9IG1hc2tzOwotCi0gIHdoaWxlICh3YWxrKSB7Ci0gICAgR3N0TWFza0RlZmluaXRpb24gKmRlZiA9IChHc3RNYXNrRGVmaW5pdGlvbiAqKSB3YWxrLT5kYXRhOwotCi0gICAgaWYgKGRlZi0+dHlwZSA9PSB0eXBlKQotICAgICAgcmV0dXJuIGRlZjsKLQotICAgIHdhbGsgPSBnX2xpc3RfbmV4dCAod2Fsayk7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdzdE1hc2sgKgotZ3N0X21hc2tfZmFjdG9yeV9uZXcgKGdpbnQgdHlwZSwgZ2Jvb2xlYW4gaW52ZXJ0LCBnaW50IGJwcCwgZ2ludCB3aWR0aCwKLSAgICBnaW50IGhlaWdodCkKLXsKLSAgR3N0TWFza0RlZmluaXRpb24gKmRlZmluaXRpb247Ci0gIEdzdE1hc2sgKm1hc2sgPSBOVUxMOwotCi0gIGRlZmluaXRpb24gPSBnc3RfbWFza19maW5kX2RlZmluaXRpb24gKHR5cGUpOwotICBpZiAoZGVmaW5pdGlvbikgewotICAgIG1hc2sgPSBnX25ldzAgKEdzdE1hc2ssIDEpOwotCi0gICAgbWFzay0+dHlwZSA9IGRlZmluaXRpb24tPnR5cGU7Ci0gICAgbWFzay0+YnBwID0gYnBwOwotICAgIG1hc2stPndpZHRoID0gd2lkdGg7Ci0gICAgbWFzay0+aGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1hc2stPmRlc3Ryb3lfZnVuYyA9IGRlZmluaXRpb24tPmRlc3Ryb3lfZnVuYzsKLSAgICBtYXNrLT51c2VyX2RhdGEgPSBkZWZpbml0aW9uLT51c2VyX2RhdGE7Ci0gICAgbWFzay0+ZGF0YSA9IGdfbWFsbG9jICh3aWR0aCAqIGhlaWdodCAqIHNpemVvZiAoZ3VpbnQzMikpOwotCi0gICAgZGVmaW5pdGlvbi0+ZHJhd19mdW5jIChtYXNrKTsKLQotICAgIGlmIChpbnZlcnQpIHsKLSAgICAgIGdpbnQgaSwgajsKLSAgICAgIGd1aW50MzIgKmRhdGFwID0gbWFzay0+ZGF0YTsKLSAgICAgIGd1aW50MzIgbWF4ID0gKDEgPDwgYnBwKTsKLQotICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICAgICAgKmRhdGFwID0gbWF4IC0gKmRhdGFwOwotICAgICAgICAgIGRhdGFwKys7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gbWFzazsKLX0KLQotdm9pZAotX2dzdF9tYXNrX2RlZmF1bHRfZGVzdHJveSAoR3N0TWFzayAqIG1hc2spCi17Ci0gIGdfZnJlZSAobWFzay0+ZGF0YSk7Ci0gIGdfZnJlZSAobWFzayk7Ci19Ci0KLXZvaWQKLWdzdF9tYXNrX2Rlc3Ryb3kgKEdzdE1hc2sgKiBtYXNrKQotewotICBpZiAobWFzay0+ZGVzdHJveV9mdW5jKQotICAgIG1hc2stPmRlc3Ryb3lfZnVuYyAobWFzayk7Ci19CmRpZmYgLS1naXQgYS9nc3Qvc21wdGUvZ3N0bWFzay5oIGIvZ3N0L3NtcHRlL2dzdG1hc2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNhNTA4Mi4uMDAwMDAwMAotLS0gYS9nc3Qvc21wdGUvZ3N0bWFzay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9NQVNLX0hfXwotI2RlZmluZSBfX0dTVF9NQVNLX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi10eXBlZGVmIHN0cnVjdCBfR3N0TWFzayBHc3RNYXNrOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE1hc2tEZWZpbml0aW9uIEdzdE1hc2tEZWZpbml0aW9uOwotCi10eXBlZGVmIHZvaWQgICAgICAgICAgICAoKkdzdE1hc2tEcmF3RnVuYykgICAgICAgICAgICAgIChHc3RNYXNrICptYXNrKTsKLXR5cGVkZWYgdm9pZCAgICAgICAgICAgICgqR3N0TWFza0Rlc3Ryb3lGdW5jKSAgICAgICAgICAgKEdzdE1hc2sgKm1hc2spOwotCi1zdHJ1Y3QgX0dzdE1hc2tEZWZpbml0aW9uIHsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICB0eXBlOwotICBjb25zdCBnY2hhciAgICAgICAgICAgKnNob3J0X25hbWU7Ci0gIGNvbnN0IGdjaGFyICAgICAgICAgICAqbG9uZ19uYW1lOwotICBHc3RNYXNrRHJhd0Z1bmMgICAgICAgIGRyYXdfZnVuYzsKLSAgR3N0TWFza0Rlc3Ryb3lGdW5jICAgICBkZXN0cm95X2Z1bmM7Ci0gIGdjb25zdHBvaW50ZXIgICAgICAgICAgdXNlcl9kYXRhOwotfTsKLQotc3RydWN0IF9Hc3RNYXNrIHsKLSAgZ2ludCAgICAgICAgICAgICAgICAgICB0eXBlOwotICBndWludDMyICAgICAgICAgICAgICAgKmRhdGE7Ci0gIGdjb25zdHBvaW50ZXIgICAgICAgICAgdXNlcl9kYXRhOwotCi0gIGdpbnQgICAgICAgICAgICAgICAgICAgd2lkdGg7Ci0gIGdpbnQgICAgICAgICAgICAgICAgICAgaGVpZ2h0OwotICBnaW50ICAgICAgICAgICAgICAgICAgIGJwcDsKLQotICBHc3RNYXNrRGVzdHJveUZ1bmMgICAgIGRlc3Ryb3lfZnVuYzsKLX07Ci0KLXZvaWQgICAgICAgICAgICAgICAgICAgIF9nc3RfbWFza19pbml0ICAgICAgICAgICAgICAgICAgKHZvaWQpOwotdm9pZCAgICAgICAgICAgICAgICAgICAgX2dzdF9tYXNrX3JlZ2lzdGVyICAgICAgICAgICAgICAoY29uc3QgR3N0TWFza0RlZmluaXRpb24gKmRlZmluaXRpb24pOwotCi12b2lkICAgICAgICAgICAgICAgICAgICBfZ3N0X21hc2tfZGVmYXVsdF9kZXN0cm95ICAgICAgIChHc3RNYXNrICptYXNrKTsKLQotY29uc3QgR0xpc3QqICAgICAgICAgICAgZ3N0X21hc2tfZ2V0X2RlZmluaXRpb25zICAgICAgICAodm9pZCk7Ci1Hc3RNYXNrKiAgICAgICAgICAgICAgICBnc3RfbWFza19mYWN0b3J5X25ldyAgICAgICAgICAgIChnaW50IHR5cGUsIGdib29sZWFuIGludmVydCwgZ2ludCBicHAsIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0KTsKLXZvaWQgICAgICAgICAgICAgICAgICAgIGdzdF9tYXNrX2Rlc3Ryb3kgICAgICAgICAgICAgICAgKEdzdE1hc2sgKm1hc2spOwotCi12b2lkIF9nc3RfYmFyYm94d2lwZXNfcmVnaXN0ZXIgKHZvaWQpOwotCi0jZW5kaWYgLyogX19HU1RfTUFTS19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9nc3RzbXB0ZS5jIGIvZ3N0L3NtcHRlL2dzdHNtcHRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YzUyMmMuLjAwMDAwMDAKLS0tIGEvZ3N0L3NtcHRlL2dzdHNtcHRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXNtcHRlCi0gKgotICogc21wdGUgY2FuIGFjY2VwdCBJNDIwIHZpZGVvIHN0cmVhbXMgd2l0aCB0aGUgc2FtZSB3aWR0aCwgaGVpZ2h0IGFuZAotICogZnJhbWVyYXRlLiBUaGUgdHdvIGluY29tbWluZyBidWZmZXJzIGFyZSBibGVuZGVkIHRvZ2V0aGVyIHVzaW5nIGFuIGVmZmVjdAotICogc3BlY2lmaWMgYWxwaGEgbWFzay4gCi0gKgotICogVGhlICNHc3RTbXB0ZTpkZXB0aCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBwcmVzaXNpb24gaW4gYml0cyBvZiB0aGUgbWFzay4gQQotICogaGlnaGVyIHByZXNpc2lvbiB3aWxsIGNyZWF0ZSBhIG1hc2sgd2l0aCBzbW9vdGhlciBncmFkaWVudHMgaW4gb3JkZXIgdG8gYXZvaWQKLSAqIGJhbmRpbmcuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPlNhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyBwYXR0ZXJuPTEgISBzbXB0ZSBuYW1lPXMgYm9yZGVyPTIwMDAwIHR5cGU9MjM0IGR1cmF0aW9uPTIwMDAwMDAwMDAgISB2aWRlb2NvbnZlcnQgISB4aW1hZ2VzaW5rIHZpZGVvdGVzdHNyYyAhIHMuCi0gKiBdfCBBIHBpcGVsaW5lIHRvIGRlbW9uc3RyYXRlIHRoZSBzbXB0ZSB0cmFuc2l0aW9uLgotICogSXQgc2hvd3MgYSBwaW53aGVlbCB0cmFuc2l0aW9uIGEgZnJvbSBhIHNub3cgdmlkZW90ZXN0c3JjIHRvIGFuIHNtcHRlCi0gKiBwYXR0ZXJuIHZpZGVvdGVzdHNyYy4gVGhlIHRyYW5zaXRpb24gd2lsbCB0YWtlIDIgc2Vjb25kcyB0byBjb21wbGV0ZS4gVGhlCi0gKiBlZGdlcyBvZiB0aGUgdHJhbnNpdGlvbiBhcmUgc21vb3RoZWQgd2l0aCBhIDIwMDAwIGJpZyBib3JkZXIuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3RzbXB0ZS5oIgotI2luY2x1ZGUgInBhaW50LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9zbXB0ZV9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3Rfc21wdGVfZGVidWcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9zbXB0ZV9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkk0MjAiKQotICAgICkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3NtcHRlX3NpbmsxX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luazEiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJJNDIwIikKLSAgICApCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9zbXB0ZV9zaW5rMl90ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsyIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgiSTQyMCIpCi0gICAgKQotICAgICk7Ci0KLQotLyogU01QVEUgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9UWVBFCTEKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0JPUkRFUgkwCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9ERVBUSAkxNgotI2RlZmluZSBERUZBVUxUX1BST1BfRFVSQVRJT04JR1NUX1NFQ09ORAotI2RlZmluZSBERUZBVUxUX1BST1BfSU5WRVJUICAgRkFMU0UKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfVFlQRSwKLSAgUFJPUF9CT1JERVIsCi0gIFBST1BfREVQVEgsCi0gIFBST1BfRFVSQVRJT04sCi0gIFBST1BfSU5WRVJUCi19OwotCi0jZGVmaW5lIEdTVF9UWVBFX1NNUFRFX1RSQU5TSVRJT05fVFlQRSAoZ3N0X3NtcHRlX3RyYW5zaXRpb25fdHlwZV9nZXRfdHlwZSgpKQotc3RhdGljIEdUeXBlCi1nc3Rfc21wdGVfdHJhbnNpdGlvbl90eXBlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgc21wdGVfdHJhbnNpdGlvbl90eXBlID0gMDsKLSAgR0VudW1WYWx1ZSAqc21wdGVfdHJhbnNpdGlvbnM7Ci0KLSAgaWYgKCFzbXB0ZV90cmFuc2l0aW9uX3R5cGUpIHsKLSAgICBjb25zdCBHTGlzdCAqZGVmaW5pdGlvbnM7Ci0gICAgZ2ludCBpID0gMDsKLQotICAgIGRlZmluaXRpb25zID0gZ3N0X21hc2tfZ2V0X2RlZmluaXRpb25zICgpOwotICAgIHNtcHRlX3RyYW5zaXRpb25zID0KLSAgICAgICAgZ19uZXcwIChHRW51bVZhbHVlLCBnX2xpc3RfbGVuZ3RoICgoR0xpc3QgKikgZGVmaW5pdGlvbnMpICsgMSk7Ci0KLSAgICB3aGlsZSAoZGVmaW5pdGlvbnMpIHsKLSAgICAgIEdzdE1hc2tEZWZpbml0aW9uICpkZWZpbml0aW9uID0gKEdzdE1hc2tEZWZpbml0aW9uICopIGRlZmluaXRpb25zLT5kYXRhOwotCi0gICAgICBkZWZpbml0aW9ucyA9IGdfbGlzdF9uZXh0IChkZWZpbml0aW9ucyk7Ci0KLSAgICAgIHNtcHRlX3RyYW5zaXRpb25zW2ldLnZhbHVlID0gZGVmaW5pdGlvbi0+dHlwZTsKLSAgICAgIC8qIG9sZGVyIEdMaWIgdmVyc2lvbnMgaGF2ZSB0aGUgdHdvIGZpZWxkcyBhcyBub24tY29uc3QsIGhlbmNlIHRoZSBjYXN0ICovCi0gICAgICBzbXB0ZV90cmFuc2l0aW9uc1tpXS52YWx1ZV9uaWNrID0gKGdjaGFyICopIGRlZmluaXRpb24tPnNob3J0X25hbWU7Ci0gICAgICBzbXB0ZV90cmFuc2l0aW9uc1tpXS52YWx1ZV9uYW1lID0gKGdjaGFyICopIGRlZmluaXRpb24tPmxvbmdfbmFtZTsKLQotICAgICAgaSsrOwotICAgIH0KLQotICAgIHNtcHRlX3RyYW5zaXRpb25fdHlwZSA9Ci0gICAgICAgIGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RTTVBURVRyYW5zaXRpb25UeXBlIiwgc21wdGVfdHJhbnNpdGlvbnMpOwotICB9Ci0gIHJldHVybiBzbXB0ZV90cmFuc2l0aW9uX3R5cGU7Ci19Ci0KLQotc3RhdGljIHZvaWQgZ3N0X3NtcHRlX2ZpbmFsaXplIChHc3RTTVBURSAqIHNtcHRlKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3NtcHRlX2NvbGxlY3RlZCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdFNNUFRFICogc21wdGUpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc21wdGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NtcHRlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9zbXB0ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0vKnN0YXRpYyBndWludCBnc3Rfc21wdGVfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsgKi8KLQotI2RlZmluZSBnc3Rfc21wdGVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0U01QVEUsIGdzdF9zbXB0ZSwgR1NUX1RZUEVfRUxFTUVOVCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfY2xhc3NfaW5pdCAoR3N0U01QVEVDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3NtcHRlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NtcHRlX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSAoR09iamVjdEZpbmFsaXplRnVuYykgZ3N0X3NtcHRlX2ZpbmFsaXplOwotCi0gIF9nc3RfbWFza19pbml0ICgpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfVFlQRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgidHlwZSIsICJUeXBlIiwgIlRoZSB0eXBlIG9mIHRyYW5zaXRpb24gdG8gdXNlIiwKLSAgICAgICAgICBHU1RfVFlQRV9TTVBURV9UUkFOU0lUSU9OX1RZUEUsIERFRkFVTFRfUFJPUF9UWVBFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0JPUkRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJib3JkZXIiLCAiQm9yZGVyIiwKLSAgICAgICAgICAiVGhlIGJvcmRlciB3aWR0aCBvZiB0aGUgdHJhbnNpdGlvbiIsIDAsIEdfTUFYSU5ULAotICAgICAgICAgIERFRkFVTFRfUFJPUF9CT1JERVIsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RFUFRILAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImRlcHRoIiwgIkRlcHRoIiwgIkRlcHRoIG9mIHRoZSBtYXNrIGluIGJpdHMiLCAxLCAyNCwKLSAgICAgICAgICBERUZBVUxUX1BST1BfREVQVEgsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RVUkFUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImR1cmF0aW9uIiwgIkR1cmF0aW9uIiwKLSAgICAgICAgICAiRHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24gZWZmZWN0IGluIG5hbm9zZWNvbmRzIiwgMCwgR19NQVhVSU5UNjQsCi0gICAgICAgICAgREVGQVVMVF9QUk9QX0RVUkFUSU9OLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9JTlZFUlQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImludmVydCIsICJJbnZlcnQiLAotICAgICAgICAgICJJbnZlcnQgdHJhbnNpdGlvbiBtYXNrIiwgREVGQVVMVF9QUk9QX0lOVkVSVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NtcHRlX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3NtcHRlX3NpbmsxX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3NtcHRlX3NpbmsyX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3NtcHRlX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJTTVBURSB0cmFuc2l0aW9ucyIsCi0gICAgICAiRmlsdGVyL0VkaXRvci9WaWRlbyIsCi0gICAgICAiQXBwbHkgdGhlIHN0YW5kYXJkIFNNUFRFIHRyYW5zaXRpb25zIG9uIHZpZGVvIGltYWdlcyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4iKTsKLX0KLQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aHQgIHllbCAgY3lhICBncm4gIG1hZyAgcmVkICBibHUgIGJsayAgIC1JICAgIFEgKi8KLXN0YXRpYyBjb25zdCBpbnQgeV9jb2xvcnNbXSA9IHsgMjU1LCAyMjYsIDE3OSwgMTUwLCAxMDUsIDc2LCAyOSwgMTYsIDE2LCAwIH07Ci1zdGF0aWMgY29uc3QgaW50IHVfY29sb3JzW10gPSB7IDEyOCwgMCwgMTcwLCA0NiwgMjEyLCA4NSwgMjU1LCAxMjgsIDAsIDEyOCB9Owotc3RhdGljIGNvbnN0IGludCB2X2NvbG9yc1tdID0geyAxMjgsIDE1NSwgMCwgMjEsIDIzNSwgMjU1LCAxMDcsIDEyOCwgMTI4LCAyNTUgfTsKLQotc3RhdGljIHZvaWQKLWZpbGxfaTQyMCAoR3N0VmlkZW9JbmZvICogdmluZm8sIGd1aW50OCAqIGRhdGEsIGdpbnQgaGVpZ2h0LCBnaW50IGNvbG9yKQotewotICBnaW50IHNpemUgPSBHU1RfVklERU9fSU5GT19DT01QX1NUUklERSAodmluZm8sIDApICogR1NUX1JPVU5EX1VQXzIgKGhlaWdodCk7Ci0gIGdpbnQgc2l6ZTQgPSBzaXplID4+IDI7Ci0gIGd1aW50OCAqeXAgPSBkYXRhOwotICBndWludDggKnVwID0gZGF0YSArIEdTVF9WSURFT19JTkZPX0NPTVBfT0ZGU0VUICh2aW5mbywgMSk7Ci0gIGd1aW50OCAqdnAgPSBkYXRhICsgR1NUX1ZJREVPX0lORk9fQ09NUF9PRkZTRVQgKHZpbmZvLCAyKTsKLQotICBtZW1zZXQgKHlwLCB5X2NvbG9yc1tjb2xvcl0sIHNpemUpOwotICBtZW1zZXQgKHVwLCB1X2NvbG9yc1tjb2xvcl0sIHNpemU0KTsKLSAgbWVtc2V0ICh2cCwgdl9jb2xvcnNbY29sb3JdLCBzaXplNCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NtcHRlX3VwZGF0ZV9tYXNrIChHc3RTTVBURSAqIHNtcHRlLCBnaW50IHR5cGUsIGdib29sZWFuIGludmVydCwKLSAgICBnaW50IGRlcHRoLCBnaW50IHdpZHRoLCBnaW50IGhlaWdodCkKLXsKLSAgR3N0TWFzayAqbmV3bWFzazsKLQotICBpZiAoc21wdGUtPm1hc2spIHsKLSAgICBpZiAoc21wdGUtPnR5cGUgPT0gdHlwZSAmJgotICAgICAgICBzbXB0ZS0+aW52ZXJ0ID09IGludmVydCAmJgotICAgICAgICBzbXB0ZS0+ZGVwdGggPT0gZGVwdGggJiYKLSAgICAgICAgc21wdGUtPndpZHRoID09IHdpZHRoICYmIHNtcHRlLT5oZWlnaHQgPT0gaGVpZ2h0KQotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBuZXdtYXNrID0gZ3N0X21hc2tfZmFjdG9yeV9uZXcgKHR5cGUsIGludmVydCwgZGVwdGgsIHdpZHRoLCBoZWlnaHQpOwotICBpZiAobmV3bWFzaykgewotICAgIGlmIChzbXB0ZS0+bWFzaykgewotICAgICAgZ3N0X21hc2tfZGVzdHJveSAoc21wdGUtPm1hc2spOwotICAgIH0KLSAgICBzbXB0ZS0+bWFzayA9IG5ld21hc2s7Ci0gICAgc21wdGUtPnR5cGUgPSB0eXBlOwotICAgIHNtcHRlLT5pbnZlcnQgPSBpbnZlcnQ7Ci0gICAgc21wdGUtPmRlcHRoID0gZGVwdGg7Ci0gICAgc21wdGUtPndpZHRoID0gd2lkdGg7Ci0gICAgc21wdGUtPmhlaWdodCA9IGhlaWdodDsKLQotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc21wdGVfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U01QVEUgKnNtcHRlOwotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdFZpZGVvSW5mbyB2aW5mbzsKLQotICBzbXB0ZSA9IEdTVF9TTVBURSAoR1NUX1BBRF9QQVJFTlQgKHBhZCkpOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZ2aW5mbyk7Ci0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmdmluZm8sIGNhcHMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBzbXB0ZS0+d2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCAoJnZpbmZvKTsKLSAgc21wdGUtPmhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJnZpbmZvKTsKLSAgc21wdGUtPmZwc19udW0gPSBHU1RfVklERU9fSU5GT19GUFNfTiAoJnZpbmZvKTsKLSAgc21wdGUtPmZwc19kZW5vbSA9IEdTVF9WSURFT19JTkZPX0ZQU19EICgmdmluZm8pOwotCi0gIC8qIGZpZ3VyZSBvdXQgdGhlIGR1cmF0aW9uIGluIGZyYW1lcyAqLwotICBzbXB0ZS0+ZW5kX3Bvc2l0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzbXB0ZS0+ZHVyYXRpb24sCi0gICAgICBzbXB0ZS0+ZnBzX251bSwgR1NUX1NFQ09ORCAqIHNtcHRlLT5mcHNfZGVub20pOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNtcHRlLCAiZHVyYXRpb246ICVkIGZyYW1lcyIsIHNtcHRlLT5lbmRfcG9zaXRpb24pOwotCi0gIHJldCA9Ci0gICAgICBnc3Rfc21wdGVfdXBkYXRlX21hc2sgKHNtcHRlLCBzbXB0ZS0+dHlwZSwgc21wdGUtPmludmVydCwgc21wdGUtPmRlcHRoLAotICAgICAgc21wdGUtPndpZHRoLCBzbXB0ZS0+aGVpZ2h0KTsKLQotICBpZiAocGFkID09IHNtcHRlLT5zaW5rcGFkMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNtcHRlLCAic2V0dGluZyBwYWQxIGluZm8iKTsKLSAgICBzbXB0ZS0+dmluZm8xID0gdmluZm87Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc21wdGUsICJzZXR0aW5nIHBhZDIgaW5mbyIpOwotICAgIHNtcHRlLT52aW5mbzIgPSB2aW5mbzsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3NtcHRlX3NpbmtfZXZlbnQgKEdzdENvbGxlY3RQYWRzICogcGFkcywKLSAgICBHc3RDb2xsZWN0RGF0YSAqIGRhdGEsIEdzdEV2ZW50ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICpwYWQ7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIHBhZCA9IGRhdGEtPnBhZDsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgcmV0ID0gZ3N0X3NtcHRlX3NldGNhcHMgKHBhZCwgY2Fwcyk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGV2ZW50ID0gTlVMTDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoZXZlbnQgIT0gTlVMTCkKLSAgICByZXR1cm4gZ3N0X2NvbGxlY3RfcGFkc19ldmVudF9kZWZhdWx0IChwYWRzLCBkYXRhLCBldmVudCwgRkFMU0UpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfaW5pdCAoR3N0U01QVEUgKiBzbXB0ZSkKLXsKLSAgc21wdGUtPnNpbmtwYWQxID0KLSAgICAgIGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmZ3N0X3NtcHRlX3NpbmsxX3RlbXBsYXRlLCAic2luazEiKTsKLSAgR1NUX1BBRF9TRVRfUFJPWFlfQ0FQUyAoc21wdGUtPnNpbmtwYWQxKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHNtcHRlKSwgc21wdGUtPnNpbmtwYWQxKTsKLQotICBzbXB0ZS0+c2lua3BhZDIgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZnc3Rfc21wdGVfc2luazJfdGVtcGxhdGUsICJzaW5rMiIpOwotICBHU1RfUEFEX1NFVF9QUk9YWV9DQVBTIChzbXB0ZS0+c2lua3BhZDIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoc21wdGUpLCBzbXB0ZS0+c2lua3BhZDIpOwotCi0gIHNtcHRlLT5zcmNwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZnc3Rfc21wdGVfc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChzbXB0ZSksIHNtcHRlLT5zcmNwYWQpOwotCi0gIHNtcHRlLT5jb2xsZWN0ID0gZ3N0X2NvbGxlY3RfcGFkc19uZXcgKCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uIChzbXB0ZS0+Y29sbGVjdCwKLSAgICAgIChHc3RDb2xsZWN0UGFkc0Z1bmN0aW9uKSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NtcHRlX2NvbGxlY3RlZCksIHNtcHRlKTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gKHNtcHRlLT5jb2xsZWN0LAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zbXB0ZV9zaW5rX2V2ZW50KSwgc21wdGUpOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfYWRkX3BhZCAoc21wdGUtPmNvbGxlY3QsIHNtcHRlLT5zaW5rcGFkMSwKLSAgICAgIHNpemVvZiAoR3N0Q29sbGVjdERhdGEpLCBOVUxMLCBUUlVFKTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19hZGRfcGFkIChzbXB0ZS0+Y29sbGVjdCwgc21wdGUtPnNpbmtwYWQyLAotICAgICAgc2l6ZW9mIChHc3RDb2xsZWN0RGF0YSksIE5VTEwsIFRSVUUpOwotCi0gIHNtcHRlLT50eXBlID0gREVGQVVMVF9QUk9QX1RZUEU7Ci0gIHNtcHRlLT5ib3JkZXIgPSBERUZBVUxUX1BST1BfQk9SREVSOwotICBzbXB0ZS0+ZGVwdGggPSBERUZBVUxUX1BST1BfREVQVEg7Ci0gIHNtcHRlLT5kdXJhdGlvbiA9IERFRkFVTFRfUFJPUF9EVVJBVElPTjsKLSAgc21wdGUtPmludmVydCA9IERFRkFVTFRfUFJPUF9JTlZFUlQ7Ci0gIHNtcHRlLT5mcHNfbnVtID0gMDsKLSAgc21wdGUtPmZwc19kZW5vbSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfZmluYWxpemUgKEdzdFNNUFRFICogc21wdGUpCi17Ci0gIGlmIChzbXB0ZS0+Y29sbGVjdCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNtcHRlLT5jb2xsZWN0KTsKLSAgfQotICBpZiAoc21wdGUtPm1hc2spIHsKLSAgICBnc3RfbWFza19kZXN0cm95IChzbXB0ZS0+bWFzayk7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKChHT2JqZWN0ICopIHNtcHRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zbXB0ZV9yZXNldCAoR3N0U01QVEUgKiBzbXB0ZSkKLXsKLSAgc21wdGUtPndpZHRoID0gLTE7Ci0gIHNtcHRlLT5oZWlnaHQgPSAtMTsKLSAgc21wdGUtPnBvc2l0aW9uID0gMDsKLSAgc21wdGUtPmVuZF9wb3NpdGlvbiA9IDA7Ci0gIHNtcHRlLT5zZW5kX3N0cmVhbV9zdGFydCA9IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfYmxlbmRfaTQyMCAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lMSwgR3N0VmlkZW9GcmFtZSAqIGZyYW1lMiwKLSAgICBHc3RWaWRlb0ZyYW1lICogb2ZyYW1lLCBHc3RNYXNrICogbWFzaywgZ2ludCBib3JkZXIsIGdpbnQgcG9zKQotewotICBndWludDMyICptYXNrcDsKLSAgZ2ludCB2YWx1ZTsKLSAgZ2ludCBpLCBqOwotICBnaW50IG1pbiwgbWF4OwotICBndWludDggKmluMSwgKmluMiwgKm91dCwgKmluMXUsICppbjF2LCAqaW4ydSwgKmluMnYsICpvdXR1LCAqb3V0djsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotCi0gIGlmIChib3JkZXIgPT0gMCkKLSAgICBib3JkZXIrKzsKLQotICBtaW4gPSBwb3MgLSBib3JkZXI7Ci0gIG1heCA9IHBvczsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUxKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZnJhbWUxKTsKLQotICBpbjEgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZTEsIDApOwotICBpbjIgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZTIsIDApOwotICBvdXQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChvZnJhbWUsIDApOwotCi0gIGluMXUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZTEsIDEpOwotICBpbjF2ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUxLCAyKTsKLSAgaW4ydSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lMiwgMSk7Ci0gIGluMnYgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZTIsIDIpOwotICBvdXR1ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAob2ZyYW1lLCAxKTsKLSAgb3V0diA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKG9mcmFtZSwgMik7Ci0KLSAgbWFza3AgPSBtYXNrLT5kYXRhOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICB2YWx1ZSA9ICptYXNrcCsrOwotICAgICAgdmFsdWUgPSAoKENMQU1QICh2YWx1ZSwgbWluLCBtYXgpIC0gbWluKSA8PCA4KSAvIGJvcmRlcjsKLQotICAgICAgb3V0W2pdID0gKChpbjFbal0gKiB2YWx1ZSkgKyAoaW4yW2pdICogKDI1NiAtIHZhbHVlKSkpID4+IDg7Ci0gICAgICBpZiAoIShpICYgMSkgJiYgIShqICYgMSkpIHsKLSAgICAgICAgb3V0dVtqIC8gMl0gPQotICAgICAgICAgICAgKChpbjF1W2ogLyAyXSAqIHZhbHVlKSArIChpbjJ1W2ogLyAyXSAqICgyNTYgLSB2YWx1ZSkpKSA+PiA4OwotICAgICAgICBvdXR2W2ogLyAyXSA9Ci0gICAgICAgICAgICAoKGluMXZbaiAvIDJdICogdmFsdWUpICsgKGluMnZbaiAvIDJdICogKDI1NiAtIHZhbHVlKSkpID4+IDg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaW4xICs9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUxLCAwKTsKLSAgICBpbjIgKz0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZTIsIDApOwotICAgIG91dCArPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKG9mcmFtZSwgMCk7Ci0KLSAgICBpZiAoIShpICYgMSkpIHsKLSAgICAgIGluMXUgKz0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZTEsIDEpOwotICAgICAgaW4ydSArPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lMiwgMSk7Ci0gICAgICBpbjF2ICs9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUxLCAyKTsKLSAgICAgIGluMnYgKz0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZTEsIDIpOwotICAgICAgb3V0dSArPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKG9mcmFtZSwgMSk7Ci0gICAgICBvdXR2ICs9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAob2ZyYW1lLCAyKTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zbXB0ZV9jb2xsZWN0ZWQgKEdzdENvbGxlY3RQYWRzICogcGFkcywgR3N0U01QVEUgKiBzbXB0ZSkKLXsKLSAgR3N0QnVmZmVyICpvdXRidWY7Ci0gIEdzdENsb2NrVGltZSB0czsKLSAgR3N0QnVmZmVyICppbjEgPSBOVUxMLCAqaW4yID0gTlVMTDsKLSAgR1NMaXN0ICpjb2xsZWN0ZWQ7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHc3RWaWRlb0ZyYW1lIGZyYW1lMSwgZnJhbWUyLCBvZnJhbWU7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKHNtcHRlLT5mcHNfbnVtID09IDApKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKHNtcHRlLT5zaW5rcGFkMSkgfHwKLSAgICAgICFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKHNtcHRlLT5zaW5rcGFkMikpCi0gICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICBpZiAoIWdzdF92aWRlb19pbmZvX2lzX2VxdWFsICgmc21wdGUtPnZpbmZvMSwgJnNtcHRlLT52aW5mbzIpKQotICAgIGdvdG8gaW5wdXRfZm9ybWF0c19kb19ub3RfbWF0Y2g7Ci0KLSAgaWYgKHNtcHRlLT5zZW5kX3N0cmVhbV9zdGFydCkgewotICAgIGdjaGFyIHNfaWRbMzJdOwotCi0gICAgLyogc3RyZWFtLXN0YXJ0IChGSVhNRTogY3JlYXRlIGlkIGJhc2VkIG9uIGlucHV0IGlkcykgKi8KLSAgICBnX3NucHJpbnRmIChzX2lkLCBzaXplb2YgKHNfaWQpLCAic21wdGUtJTA4eCIsIGdfcmFuZG9tX2ludCAoKSk7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzbXB0ZS0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc19pZCkpOwotICAgIHNtcHRlLT5zZW5kX3N0cmVhbV9zdGFydCA9IEZBTFNFOwotICB9Ci0KLSAgdHMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzbXB0ZS0+cG9zaXRpb24gKiBHU1RfU0VDT05ELAotICAgICAgc21wdGUtPmZwc19kZW5vbSwgc21wdGUtPmZwc19udW0pOwotCi0gIGZvciAoY29sbGVjdGVkID0gcGFkcy0+ZGF0YTsgY29sbGVjdGVkOyBjb2xsZWN0ZWQgPSBnX3NsaXN0X25leHQgKGNvbGxlY3RlZCkpIHsKLSAgICBHc3RDb2xsZWN0RGF0YSAqZGF0YTsKLQotICAgIGRhdGEgPSAoR3N0Q29sbGVjdERhdGEgKikgY29sbGVjdGVkLT5kYXRhOwotCi0gICAgaWYgKGRhdGEtPnBhZCA9PSBzbXB0ZS0+c2lua3BhZDEpCi0gICAgICBpbjEgPSBnc3RfY29sbGVjdF9wYWRzX3BvcCAocGFkcywgZGF0YSk7Ci0gICAgZWxzZSBpZiAoZGF0YS0+cGFkID09IHNtcHRlLT5zaW5rcGFkMikKLSAgICAgIGluMiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChwYWRzLCBkYXRhKTsKLSAgfQotCi0gIGlmIChpbjEgPT0gTlVMTCkgewotICAgIC8qIGlmIG5vIGlucHV0LCBtYWtlIHBpY3R1cmUgYmxhY2sgKi8KLSAgICBpbjEgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKEdTVF9WSURFT19JTkZPX1NJWkUgKCZzbXB0ZS0+dmluZm8xKSk7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGluMSwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gICAgZmlsbF9pNDIwICgmc21wdGUtPnZpbmZvMSwgbWFwLmRhdGEsIHNtcHRlLT5oZWlnaHQsIDcpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKGluMSwgJm1hcCk7Ci0gIH0KLSAgaWYgKGluMiA9PSBOVUxMKSB7Ci0gICAgLyogaWYgbm8gaW5wdXQsIG1ha2UgcGljdHVyZSB3aGl0ZSAqLwotICAgIGluMiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoR1NUX1ZJREVPX0lORk9fU0laRSAoJnNtcHRlLT52aW5mbzIpKTsKLSAgICBnc3RfYnVmZmVyX21hcCAoaW4yLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBmaWxsX2k0MjAgKCZzbXB0ZS0+dmluZm8yLCBtYXAuZGF0YSwgc21wdGUtPmhlaWdodCwgMCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoaW4yLCAmbWFwKTsKLSAgfQotCi0gIGlmIChzbXB0ZS0+cG9zaXRpb24gPCBzbXB0ZS0+ZW5kX3Bvc2l0aW9uKSB7Ci0gICAgb3V0YnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChHU1RfVklERU9fSU5GT19TSVpFICgmc21wdGUtPnZpbmZvMSkpOwotCi0gICAgLyogc2V0IGNhcHMgaWYgbm90IGRvbmUgeWV0ICovCi0gICAgaWYgKCFnc3RfcGFkX2hhc19jdXJyZW50X2NhcHMgKHNtcHRlLT5zcmNwYWQpKSB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotICAgICAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gICAgICBjYXBzID0gZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcyAoJnNtcHRlLT52aW5mbzEpOwotCi0gICAgICBnc3RfcGFkX3NldF9jYXBzIChzbXB0ZS0+c3JjcGFkLCBjYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNtcHRlLT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgICB9Ci0KLSAgICBnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUxLCAmc21wdGUtPnZpbmZvMSwgaW4xLCBHU1RfTUFQX1JFQUQpOwotICAgIGdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZTIsICZzbXB0ZS0+dmluZm8yLCBpbjIsIEdTVF9NQVBfUkVBRCk7Ci0gICAgLyogcmUtdXNlIGVpdGhlciBpbmZvLCBub3cga25vdyB0aGV5IGFyZSBlc3NlbnRpYWxseSBpZGVudGljYWwgKi8KLSAgICBnc3RfdmlkZW9fZnJhbWVfbWFwICgmb2ZyYW1lLCAmc21wdGUtPnZpbmZvMSwgb3V0YnVmLCBHU1RfTUFQX1dSSVRFKTsKLSAgICBnc3Rfc21wdGVfYmxlbmRfaTQyMCAoJmZyYW1lMSwgJmZyYW1lMiwgJm9mcmFtZSwgc21wdGUtPm1hc2ssIHNtcHRlLT5ib3JkZXIsCi0gICAgICAgICgoMSA8PCBzbXB0ZS0+ZGVwdGgpICsgc21wdGUtPmJvcmRlcikgKgotICAgICAgICBzbXB0ZS0+cG9zaXRpb24gLyBzbXB0ZS0+ZW5kX3Bvc2l0aW9uKTsKLSAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZTEpOwotICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lMik7Ci0gICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmb2ZyYW1lKTsKLSAgfSBlbHNlIHsKLSAgICBvdXRidWYgPSBpbjI7Ci0gICAgZ3N0X2J1ZmZlcl9yZWYgKGluMik7Ci0gIH0KLQotICBzbXB0ZS0+cG9zaXRpb24rKzsKLQotICBpZiAoaW4xKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGluMSk7Ci0gIGlmIChpbjIpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW4yKTsKLQotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmKSA9IHRzOwotCi0gIHJldHVybiBnc3RfcGFkX3B1c2ggKHNtcHRlLT5zcmNwYWQsIG91dGJ1Zik7Ci0KLSAgLyogRVJST1JTICovCi1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzbXB0ZSwgQ09SRSwgTkVHT1RJQVRJT04sIChOVUxMKSwKLSAgICAgICAgKCJObyBpbnB1dCBmb3JtYXQgbmVnb3RpYXRlZCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLWlucHV0X2Zvcm1hdHNfZG9fbm90X21hdGNoOgotICB7Ci0gICAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLQotICAgIGNhcHMxID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzbXB0ZS0+c2lua3BhZDEpOwotICAgIGNhcHMyID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzbXB0ZS0+c2lua3BhZDIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzbXB0ZSwgQ09SRSwgTkVHT1RJQVRJT04sIChOVUxMKSwKLSAgICAgICAgKCJpbnB1dCBmb3JtYXRzIGRvbid0IG1hdGNoOiAlIiBHU1RfUFRSX0ZPUk1BVCAiIHZzLiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgICAgIGNhcHMxLCBjYXBzMikpOwotICAgIGlmIChjYXBzMSkKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gICAgaWYgKGNhcHMyKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zbXB0ZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U01QVEUgKnNtcHRlOwotCi0gIHNtcHRlID0gR1NUX1NNUFRFIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9UWVBFOgotICAgICAgc21wdGUtPnR5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQk9SREVSOgotICAgICAgc21wdGUtPmJvcmRlciA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFUFRIOgotICAgICAgc21wdGUtPmRlcHRoID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRFVSQVRJT046Ci0gICAgICBzbXB0ZS0+ZHVyYXRpb24gPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTlZFUlQ6Ci0gICAgICBzbXB0ZS0+aW52ZXJ0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NtcHRlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTTVBURSAqc21wdGU7Ci0KLSAgc21wdGUgPSBHU1RfU01QVEUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1RZUEU6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc21wdGUtPnR5cGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPUkRFUjoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNtcHRlLT5ib3JkZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFUFRIOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc21wdGUtPmRlcHRoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9EVVJBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCAodmFsdWUsIHNtcHRlLT5kdXJhdGlvbik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5WRVJUOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHNtcHRlLT5pbnZlcnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4KLWdzdF9zbXB0ZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdFNNUFRFICpzbXB0ZTsKLQotICBzbXB0ZSA9IEdTVF9TTVBURSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIGdzdF9zbXB0ZV9yZXNldCAoc21wdGUpOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHNtcHRlLCAic3RhcnRpbmcgY29sbGVjdHBhZHMiKTsKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKHNtcHRlLT5jb2xsZWN0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoc21wdGUsICJzdG9wcGluZyBjb2xsZWN0cGFkcyIpOwotICAgICAgZ3N0X2NvbGxlY3RfcGFkc19zdG9wIChzbXB0ZS0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3NtcHRlX3Jlc2V0IChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9zbXB0ZV9wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3NtcHRlX2RlYnVnLCAic21wdGUiLCAwLAotICAgICAgIlNNUFRFIHRyYW5zaXRpb24gZWZmZWN0Iik7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJzbXB0ZSIsIEdTVF9SQU5LX05PTkUsIEdTVF9UWVBFX1NNUFRFKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9nc3RzbXB0ZS5oIGIvZ3N0L3NtcHRlL2dzdHNtcHRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMzk5NDIuLjAwMDAwMDAKLS0tIGEvZ3N0L3NtcHRlL2dzdHNtcHRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1NNUFRFX0hfXwotI2RlZmluZSBfX0dTVF9TTVBURV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3Rjb2xsZWN0cGFkcy5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNpbmNsdWRlICJnc3RtYXNrLmgiCi0KLSNkZWZpbmUgR1NUX1RZUEVfU01QVEUgXAotICAoZ3N0X3NtcHRlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TTVBURShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NNUFRFLEdzdFNNUFRFKSkKLSNkZWZpbmUgR1NUX1NNUFRFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NNUFRFLEdzdFNNUFRFQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfU01QVEUob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TTVBURSkpCi0jZGVmaW5lIEdTVF9JU19TTVBURV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9TTVBURSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTTVBURSBHc3RTTVBURTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTTVBURUNsYXNzIEdzdFNNUFRFQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0U01QVEUgewotICBHc3RFbGVtZW50ICAgICBlbGVtZW50OwotCi0gIC8qIHBhZHMgKi8KLSAgR3N0UGFkICAgICAgICAqc3JjcGFkLAotICAgICAgICAgICAgICAgICpzaW5rcGFkMSwKLSAgICAgICAgICAgICAgICAqc2lua3BhZDI7Ci0gIEdzdENvbGxlY3RQYWRzICpjb2xsZWN0OwotICBnYm9vbGVhbiAgICAgICAgc2VuZF9zdHJlYW1fc3RhcnQ7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBnaW50ICAgICAgICAgICB0eXBlOwotICBnaW50ICAgICAgICAgICBib3JkZXI7Ci0gIGdpbnQgICAgICAgICAgIGRlcHRoOwotICBndWludDY0ICAgICAgICBkdXJhdGlvbjsKLSAgZ2Jvb2xlYW4gICAgICAgaW52ZXJ0OwotCi0gIC8qIG5lZ290aWF0ZWQgZm9ybWF0ICovCi0gIGdpbnQgICAgICAgICAgIHdpZHRoOwotICBnaW50ICAgICAgICAgICBoZWlnaHQ7Ci0gIGdpbnQgICAgICAgICAgIGZwc19udW07Ci0gIGdpbnQgICAgICAgICAgIGZwc19kZW5vbTsKLSAgR3N0VmlkZW9JbmZvICAgdmluZm8xOwotICBHc3RWaWRlb0luZm8gICB2aW5mbzI7Ci0KLSAgLyogc3RhdGUgb2YgdGhlIGVmZmVjdCAqLwotICBnaW50ICAgICAgICAgICBwb3NpdGlvbjsKLSAgZ2ludCAgICAgICAgICAgZW5kX3Bvc2l0aW9uOwotICBHc3RNYXNrICAgICAgICptYXNrOwotfTsKLQotc3RydWN0IF9Hc3RTTVBURUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9zbXB0ZV9nZXRfdHlwZSAodm9pZCk7Ci1nYm9vbGVhbiBnc3Rfc21wdGVfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbik7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfU01QVEVfSF9fICovCmRpZmYgLS1naXQgYS9nc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jIGIvZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwNzQ4Zi4uMDAwMDAwMAotLS0gYS9nc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5jCisrKyAvZGV2L251bGwKQEAgLTEsODExICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwOD4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zbXB0ZWFscGhhCi0gKgotICogc21wdGVhbHBoYSBjYW4gYWNjZXB0IGFuIEk0MjAgb3IgQVlVViB2aWRlbyBzdHJlYW0uIEFuIGFscGhhIGNoYW5uZWwgaXMgYWRkZWQKLSAqIHVzaW5nIGFuIGVmZmVjdCBzcGVjaWZpYyBTTVBURSBtYXNrIGluIHRoZSBJNDIwIGlucHV0IGNhc2UuIEluIHRoZSBBWVVWIGNhc2UsCi0gKiB0aGUgYWxwaGEgY2hhbm5lbCBpcyBtb2RpZmllZCB1c2luZyB0aGUgZWZmZWN0IHNwZWNpZmljIFNNUFRFIG1hc2suCi0gKgotICogVGhlICNHc3RTbXB0ZUFscGhhOnBvc2l0aW9uIHByb3BlcnR5IGlzIGEgY29udHJvbGxhYmUgZG91YmxlIGJldHdlZW4gMC4wIGFuZAotICogMS4wIHRoYXQgc3BlY2lmaWVzIHRoZSBwb3NpdGlvbiBpbiB0aGUgdHJhbnNpdGlvbi4gMC4wIGlzIHRoZSBzdGFydCBvZiB0aGUKLSAqIHRyYW5zaXRpb24gd2l0aCB0aGUgYWxwaGEgY2hhbm5lbCB0byBjb21wbGV0ZSBvcGFxdWUgd2hlcmUgMS4wIGhhcyB0aGUgYWxwaGEKLSAqIGNoYW5uZWwgc2V0IHRvIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQuCi0gKgotICogVGhlICNHc3RTbXB0ZUFscGhhOmRlcHRoIHByb3BlcnR5IGRlZmluZXMgdGhlIHByZWNpc2lvbiBpbiBiaXRzIG9mIHRoZSBtYXNrLgotICogQSBoaWdoZXIgcHJlc2lzaW9uIHdpbGwgY3JlYXRlIGEgbWFzayB3aXRoIHNtb290aGVyIGdyYWRpZW50cyBpbiBvcmRlciB0bwotICogYXZvaWQgYmFuZGluZy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+U2FtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiA8cGFyYT4KLSAqIEhlcmUgaXMgYSBwaXBlbGluZSB0byBkZW1vbnN0cmF0ZSB0aGUgc21wdGUgdHJhbnNpdGlvbiA6Ci0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgISBzbXB0ZWFscGhhIGJvcmRlcj0yMDAwMCB0eXBlPTQ0Ci0gKiBwb3NpdGlvbj0wLjUgISB2aWRlb21peGVyICEgdmlkZW9jb252ZXJ0ICEgeGltYWdlc2luawotICogPC9wcm9ncmFtbGlzdGluZz4KLSAqIFRoaXMgc2hvd3MgYSBtaWR3YXkgYm93dGllLWggdHJhbnNpdGlvbiBhIGZyb20gYSB2aWRlb3Rlc3RzcmMgdG8gYQotICogdHJhbnNwYXJlbnQgaW1hZ2UuIFRoZSBlZGdlcyBvZiB0aGUgdHJhbnNpdGlvbiBhcmUgc21vb3RoZWQgd2l0aCBhCi0gKiAyMDAwMCBiaWcgYm9yZGVyLgotICogPC9wYXJhPgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3RzbXB0ZWFscGhhLmgiCi0jaW5jbHVkZSAicGFpbnQuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3NtcHRlX2FscGhhX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9zbXB0ZV9hbHBoYV9kZWJ1ZwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3NtcHRlX2FscGhhX3NyY190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkFZVVYiKSAiOyIKLSAgICAgICAgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkFSR0IiKSAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkJHUkEiKSAiOyIKLSAgICAgICAgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIlJHQkEiKSAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkFSR0IiKSkKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3NtcHRlX2FscGhhX3NpbmtfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkk0MjAiKSAiOyIKLSAgICAgICAgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIllWMTIiKQotICAgICAgICAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkFZVVYiKQotICAgICAgICAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkFSR0IiKSAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkJHUkEiKQotICAgICAgICAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIlJHQkEiKSAiOyIgR1NUX1ZJREVPX0NBUFNfTUFLRSAoIkFSR0IiKSkKLSAgICApOwotCi0vKiBTTVBURSBzaWduYWxzIGFuZCBwcm9wZXJ0aWVzICovCi0KLSNkZWZpbmUgREVGQVVMVF9QUk9QX1RZUEUJMQotI2RlZmluZSBERUZBVUxUX1BST1BfQk9SREVSCTAKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0RFUFRICTE2Ci0jZGVmaW5lIERFRkFVTFRfUFJPUF9QT1NJVElPTgkwLjAKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0lOVkVSVCAgIEZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX1RZUEUsCi0gIFBST1BfQk9SREVSLAotICBQUk9QX0RFUFRILAotICBQUk9QX1BPU0lUSU9OLAotICBQUk9QX0lOVkVSVAotfTsKLQotI2RlZmluZSBBWVVWX1NJWkUodyxoKSAgICAgKCh3KSAqIChoKSAqIDQpCi0KLSNkZWZpbmUgR1NUX1RZUEVfU01QVEVfVFJBTlNJVElPTl9UWVBFIChnc3Rfc21wdGVfYWxwaGFfdHJhbnNpdGlvbl90eXBlX2dldF90eXBlKCkpCi1zdGF0aWMgR1R5cGUKLWdzdF9zbXB0ZV9hbHBoYV90cmFuc2l0aW9uX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBzbXB0ZV90cmFuc2l0aW9uX3R5cGUgPSAwOwotICBHRW51bVZhbHVlICpzbXB0ZV90cmFuc2l0aW9uczsKLQotICBpZiAoIXNtcHRlX3RyYW5zaXRpb25fdHlwZSkgewotICAgIGNvbnN0IEdMaXN0ICpkZWZpbml0aW9uczsKLSAgICBnaW50IGkgPSAwOwotCi0gICAgZGVmaW5pdGlvbnMgPSBnc3RfbWFza19nZXRfZGVmaW5pdGlvbnMgKCk7Ci0gICAgc21wdGVfdHJhbnNpdGlvbnMgPQotICAgICAgICBnX25ldzAgKEdFbnVtVmFsdWUsIGdfbGlzdF9sZW5ndGggKChHTGlzdCAqKSBkZWZpbml0aW9ucykgKyAxKTsKLQotICAgIHdoaWxlIChkZWZpbml0aW9ucykgewotICAgICAgR3N0TWFza0RlZmluaXRpb24gKmRlZmluaXRpb24gPSAoR3N0TWFza0RlZmluaXRpb24gKikgZGVmaW5pdGlvbnMtPmRhdGE7Ci0KLSAgICAgIGRlZmluaXRpb25zID0gZ19saXN0X25leHQgKGRlZmluaXRpb25zKTsKLQotICAgICAgc21wdGVfdHJhbnNpdGlvbnNbaV0udmFsdWUgPSBkZWZpbml0aW9uLT50eXBlOwotICAgICAgLyogb2xkZXIgR0xpYiB2ZXJzaW9ucyBoYXZlIHRoZSB0d28gZmllbGRzIGFzIG5vbi1jb25zdCwgaGVuY2UgdGhlIGNhc3QgKi8KLSAgICAgIHNtcHRlX3RyYW5zaXRpb25zW2ldLnZhbHVlX25pY2sgPSAoZ2NoYXIgKikgZGVmaW5pdGlvbi0+c2hvcnRfbmFtZTsKLSAgICAgIHNtcHRlX3RyYW5zaXRpb25zW2ldLnZhbHVlX25hbWUgPSAoZ2NoYXIgKikgZGVmaW5pdGlvbi0+bG9uZ19uYW1lOwotCi0gICAgICBpKys7Ci0gICAgfQotCi0gICAgc21wdGVfdHJhbnNpdGlvbl90eXBlID0KLSAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFNNUFRFQWxwaGFUcmFuc2l0aW9uVHlwZSIsCi0gICAgICAgIHNtcHRlX3RyYW5zaXRpb25zKTsKLSAgfQotICByZXR1cm4gc21wdGVfdHJhbnNpdGlvbl90eXBlOwotfQotCi0KLXN0YXRpYyB2b2lkIGdzdF9zbXB0ZV9hbHBoYV9maW5hbGl6ZSAoR3N0U01QVEVBbHBoYSAqIHNtcHRlKTsKLQotc3RhdGljIHZvaWQgZ3N0X3NtcHRlX2FscGhhX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9zbXB0ZV9hbHBoYV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc21wdGVfYWxwaGFfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwKLSAgICBHc3RDYXBzICogaW5jYXBzLCBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLAotICAgIEdzdENhcHMgKiBvdXRjYXBzLCBHc3RWaWRlb0luZm8gKiBvdXRfaW5mbyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc21wdGVfYWxwaGFfdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKTsKLXN0YXRpYyB2b2lkIGdzdF9zbXB0ZV9hbHBoYV9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBHc3RDYXBzICpnc3Rfc21wdGVfYWxwaGFfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogZnJvbSwgR3N0Q2FwcyAqIGZpbHRlcik7Ci0KLSNkZWZpbmUgZ3N0X3NtcHRlX2FscGhhX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFNNUFRFQWxwaGEsIGdzdF9zbXB0ZV9hbHBoYSwgR1NUX1RZUEVfVklERU9fRklMVEVSKTsKLQotc3RhdGljIHZvaWQKLWdzdF9zbXB0ZV9hbHBoYV9jbGFzc19pbml0IChHc3RTTVBURUFscGhhQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSAoa2xhc3MpOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9zbXB0ZV9hbHBoYV9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9zbXB0ZV9hbHBoYV9nZXRfcHJvcGVydHk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSAoR09iamVjdEZpbmFsaXplRnVuYykgZ3N0X3NtcHRlX2FscGhhX2ZpbmFsaXplOwotCi0gIF9nc3RfbWFza19pbml0ICgpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfVFlQRSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgidHlwZSIsICJUeXBlIiwgIlRoZSB0eXBlIG9mIHRyYW5zaXRpb24gdG8gdXNlIiwKLSAgICAgICAgICBHU1RfVFlQRV9TTVBURV9UUkFOU0lUSU9OX1RZUEUsIERFRkFVTFRfUFJPUF9UWVBFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0JPUkRFUiwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJib3JkZXIiLCAiQm9yZGVyIiwKLSAgICAgICAgICAiVGhlIGJvcmRlciB3aWR0aCBvZiB0aGUgdHJhbnNpdGlvbiIsIDAsIEdfTUFYSU5ULAotICAgICAgICAgIERFRkFVTFRfUFJPUF9CT1JERVIsCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0RFUFRILAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImRlcHRoIiwgIkRlcHRoIiwgIkRlcHRoIG9mIHRoZSBtYXNrIGluIGJpdHMiLCAxLCAyNCwKLSAgICAgICAgICBERUZBVUxUX1BST1BfREVQVEgsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1BPU0lUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoInBvc2l0aW9uIiwgIlBvc2l0aW9uIiwKLSAgICAgICAgICAiUG9zaXRpb24gb2YgdGhlIHRyYW5zaXRpb24gZWZmZWN0IiwgMC4wLCAxLjAsIERFRkFVTFRfUFJPUF9QT1NJVElPTiwKLSAgICAgICAgICBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RTTVBURUFscGhhOmludmVydDoKLSAgICoKLSAgICogU2V0IHRvIFRSVUUgdG8gaW52ZXJ0IHRoZSB0cmFuc2l0aW9uIG1hc2sgKGllLiBmbGlwIGl0IGhvcml6b250YWxseSkuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0lOVkVSVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiaW52ZXJ0IiwgIkludmVydCIsCi0gICAgICAgICAgIkludmVydCB0cmFuc2l0aW9uIG1hc2siLCBERUZBVUxUX1BST1BfUE9TSVRJT04sCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIHRyYW5zX2NsYXNzLT5iZWZvcmVfdHJhbnNmb3JtID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc21wdGVfYWxwaGFfYmVmb3JlX3RyYW5zZm9ybSk7Ci0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3NtcHRlX2FscGhhX3RyYW5zZm9ybV9jYXBzKTsKLQotICB2ZmlsdGVyX2NsYXNzLT5zZXRfaW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc21wdGVfYWxwaGFfc2V0X2luZm8pOwotICB2ZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zbXB0ZV9hbHBoYV90cmFuc2Zvcm1fZnJhbWUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmdzdF9zbXB0ZV9hbHBoYV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3NtcHRlX2FscGhhX3NyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJTTVBURSB0cmFuc2l0aW9ucyIsCi0gICAgICAiRmlsdGVyL0VkaXRvci9WaWRlbyIsCi0gICAgICAiQXBwbHkgdGhlIHN0YW5kYXJkIFNNUFRFIHRyYW5zaXRpb25zIGFzIGFscGhhIG9uIHZpZGVvIGltYWdlcyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4iKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc21wdGVfYWxwaGFfdXBkYXRlX21hc2sgKEdzdFNNUFRFQWxwaGEgKiBzbXB0ZSwgZ2ludCB0eXBlLAotICAgIGdib29sZWFuIGludmVydCwgZ2ludCBkZXB0aCwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQpCi17Ci0gIEdzdE1hc2sgKm5ld21hc2s7Ci0KLSAgLyogdHJ5IHRvIGF2b2lkIHJlZ2VuZXJhdGluZyB0aGUgbWFzayBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lIHRoYXQgaXMKLSAgICogY29ycmVjdCAqLwotICBpZiAoc21wdGUtPm1hc2spIHsKLSAgICBpZiAoc21wdGUtPnR5cGUgPT0gdHlwZSAmJgotICAgICAgICBzbXB0ZS0+aW52ZXJ0ID09IGludmVydCAmJgotICAgICAgICBzbXB0ZS0+ZGVwdGggPT0gZGVwdGggJiYKLSAgICAgICAgc21wdGUtPndpZHRoID09IHdpZHRoICYmIHNtcHRlLT5oZWlnaHQgPT0gaGVpZ2h0KQotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBzbXB0ZS0+dHlwZSA9IHR5cGU7Ci0gIHNtcHRlLT5pbnZlcnQgPSBpbnZlcnQ7Ci0gIHNtcHRlLT5kZXB0aCA9IGRlcHRoOwotICBzbXB0ZS0+d2lkdGggPSB3aWR0aDsKLSAgc21wdGUtPmhlaWdodCA9IGhlaWdodDsKLQotICAvKiBOb3QgbmVnb3RpYXRlZCB5ZXQgKi8KLSAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApIHsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIG5ld21hc2sgPSBnc3RfbWFza19mYWN0b3J5X25ldyAodHlwZSwgaW52ZXJ0LCBkZXB0aCwgd2lkdGgsIGhlaWdodCk7Ci0gIGlmICghbmV3bWFzaykKLSAgICBnb3RvIG1hc2tfZmFpbGVkOwotCi0gIGlmIChzbXB0ZS0+bWFzaykKLSAgICBnc3RfbWFza19kZXN0cm95IChzbXB0ZS0+bWFzayk7Ci0KLSAgc21wdGUtPm1hc2sgPSBuZXdtYXNrOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbWFza19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzbXB0ZSwgImZhaWxlZCB0byBjcmVhdGUgYSBtYXNrIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfYWxwaGFfaW5pdCAoR3N0U01QVEVBbHBoYSAqIHNtcHRlKQotewotICBzbXB0ZS0+dHlwZSA9IERFRkFVTFRfUFJPUF9UWVBFOwotICBzbXB0ZS0+Ym9yZGVyID0gREVGQVVMVF9QUk9QX0JPUkRFUjsKLSAgc21wdGUtPmRlcHRoID0gREVGQVVMVF9QUk9QX0RFUFRIOwotICBzbXB0ZS0+cG9zaXRpb24gPSBERUZBVUxUX1BST1BfUE9TSVRJT047Ci0gIHNtcHRlLT5pbnZlcnQgPSBERUZBVUxUX1BST1BfSU5WRVJUOwotfQotCi0jZGVmaW5lIENSRUFURV9BUkdCX0ZVTkMobmFtZSwgQSwgUiwgRywgQikgXAotc3RhdGljIHZvaWQgXAotZ3N0X3NtcHRlX2FscGhhX3Byb2Nlc3NfIyNuYW1lIyNfIyNuYW1lIChHc3RTTVBURUFscGhhICogc21wdGUsIFwKLSAgICBjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdE1hc2sgKiBtYXNrLCBcCi0gICAgZ2ludCBib3JkZXIsIGdpbnQgcG9zKSBcCi17IFwKLSAgZ2ludCBpLCBqOyBcCi0gIGNvbnN0IGd1aW50MzIgKm1hc2twOyBcCi0gIGdpbnQgdmFsdWU7IFwKLSAgZ2ludCBtaW4sIG1heDsgXAotICBnaW50IHdpZHRoLCBoZWlnaHQ7IFwKLSAgZ3VpbnQ4ICppbiwgKm91dDsgXAotICBnaW50IHNyY193cmFwLCBkZXN0X3dyYXA7IFwKLSAgXAotICBpZiAoYm9yZGVyID09IDApIFwKLSAgICBib3JkZXIrKzsgXAotICBcCi0gIG1pbiA9IHBvcyAtIGJvcmRlcjsgXAotICBtYXggPSBwb3M7IFwKLSAgR1NUX0RFQlVHX09CSkVDVCAoc21wdGUsICJwb3MgJWQsIG1pbiAlZCwgbWF4ICVkLCBib3JkZXIgJWQiLCBwb3MsIG1pbiwgbWF4LCBcCi0gICAgICBib3JkZXIpOyBcCi0gIFwKLSAgbWFza3AgPSBtYXNrLT5kYXRhOyBcCi0gIFwKLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKG91dF9mcmFtZSk7IFwKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAob3V0X2ZyYW1lKTsgXAotICBcCi0gIGluID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAwKTsgXAotICBvdXQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAob3V0X2ZyYW1lLCAwKTsgXAotICBzcmNfd3JhcCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAwKSAtICh3aWR0aCA8PCAyKTsgXAotICBkZXN0X3dyYXAgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChvdXRfZnJhbWUsIDApIC0gKHdpZHRoIDw8IDIpOyBcCi0gIFwKLSAgLyogd2UgYmFzaWNhbGx5IGNvcHkgdGhlIHNvdXJjZSB0byBkZXN0IGJ1dCB3ZSBzY2FsZSB0aGUgYWxwaGEgY2hhbm5lbCB3aXRoIFwKLSAgICogdGhlIG1hc2sgKi8gXAotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsgXAotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7IFwKLSAgICAgIHZhbHVlID0gKm1hc2twKys7IFwKLSAgICAgIG91dFtBXSA9IChpbltBXSAqICgoQ0xBTVAgKHZhbHVlLCBtaW4sIG1heCkgLSBtaW4pIDw8IDgpIC8gYm9yZGVyKSA+PiA4OyBcCi0gICAgICBvdXRbUl0gPSBpbltSXTsgXAotICAgICAgb3V0W0ddID0gaW5bR107IFwKLSAgICAgIG91dFtCXSA9IGluW0JdOyBcCi0gICAgICBvdXQgKz0gNDsgXAotICAgICAgaW4gKz0gNDsgXAotICAgIH0gXAotICAgIGluICs9IHNyY193cmFwOyBcCi0gICAgb3V0ICs9IGRlc3Rfd3JhcDsgXAotICB9IFwKLX0KLQotQ1JFQVRFX0FSR0JfRlVOQyAoYXJnYiwgMCwgMSwgMiwgMyk7Ci1DUkVBVEVfQVJHQl9GVU5DIChiZ3JhLCAzLCAyLCAxLCAwKTsKLUNSRUFURV9BUkdCX0ZVTkMgKGFiZ3IsIDAsIDMsIDIsIDEpOwotQ1JFQVRFX0FSR0JfRlVOQyAocmdiYSwgMywgMCwgMSwgMik7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfYWxwaGFfcHJvY2Vzc19heXV2X2F5dXYgKEdzdFNNUFRFQWxwaGEgKiBzbXB0ZSwKLSAgICBjb25zdCBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUsIEdzdE1hc2sgKiBtYXNrLAotICAgIGdpbnQgYm9yZGVyLCBnaW50IHBvcykKLXsKLSAgZ2ludCBpLCBqOwotICBjb25zdCBndWludDMyICptYXNrcDsKLSAgZ2ludCB2YWx1ZTsKLSAgZ2ludCBtaW4sIG1heDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBndWludDggKmluLCAqb3V0OwotICBnaW50IHNyY193cmFwLCBkZXN0X3dyYXA7Ci0KLSAgaWYgKGJvcmRlciA9PSAwKQotICAgIGJvcmRlcisrOwotCi0gIG1pbiA9IHBvcyAtIGJvcmRlcjsKLSAgbWF4ID0gcG9zOwotICBHU1RfREVCVUdfT0JKRUNUIChzbXB0ZSwgInBvcyAlZCwgbWluICVkLCBtYXggJWQsIGJvcmRlciAlZCIsIHBvcywgbWluLCBtYXgsCi0gICAgICBib3JkZXIpOwotCi0gIG1hc2twID0gbWFzay0+ZGF0YTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAob3V0X2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAob3V0X2ZyYW1lKTsKLQotICBpbiA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIG91dCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotICBzcmNfd3JhcCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAwKSAtICh3aWR0aCA8PCAyKTsKLSAgZGVzdF93cmFwID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAob3V0X2ZyYW1lLCAwKSAtICh3aWR0aCA8PCAyKTsKLQotICAvKiB3ZSBiYXNpY2FsbHkgY29weSB0aGUgc291cmNlIHRvIGRlc3QgYnV0IHdlIHNjYWxlIHRoZSBhbHBoYSBjaGFubmVsIHdpdGgKLSAgICogdGhlIG1hc2sgKi8KLSAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLSAgICAgIHZhbHVlID0gKm1hc2twKys7Ci0gICAgICAqb3V0KysgPSAoKmluKysgKiAoKENMQU1QICh2YWx1ZSwgbWluLCBtYXgpIC0gbWluKSA8PCA4KSAvIGJvcmRlcikgPj4gODsKLSAgICAgICpvdXQrKyA9ICppbisrOwotICAgICAgKm91dCsrID0gKmluKys7Ci0gICAgICAqb3V0KysgPSAqaW4rKzsKLSAgICB9Ci0gICAgaW4gKz0gc3JjX3dyYXA7Ci0gICAgb3V0ICs9IGRlc3Rfd3JhcDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NtcHRlX2FscGhhX3Byb2Nlc3NfaTQyMF9heXV2IChHc3RTTVBURUFscGhhICogc21wdGUsCi0gICAgY29uc3QgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lLCBHc3RNYXNrICogbWFzaywKLSAgICBnaW50IGJvcmRlciwgZ2ludCBwb3MpCi17Ci0gIGNvbnN0IGd1aW50OCAqc3JjWTsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNVOwotICBjb25zdCBndWludDggKnNyY1Y7Ci0gIGd1aW50OCAqb3V0OwotICBnaW50IGksIGo7Ci0gIGdpbnQgc3JjX3dyYXAsIHNyY191X3dyYXAsIHNyY192X3dyYXAsIGRlc3Rfd3JhcDsKLSAgZ2ludCB5X3N0cmlkZSwgdV9zdHJpZGUsIHZfc3RyaWRlOwotICBnYm9vbGVhbiBvZGRfd2lkdGg7Ci0gIGNvbnN0IGd1aW50MzIgKm1hc2twOwotICBnaW50IHZhbHVlOwotICBnaW50IG1pbiwgbWF4OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgaWYgKGJvcmRlciA9PSAwKQotICAgIGJvcmRlcisrOwotCi0gIG1pbiA9IHBvcyAtIGJvcmRlcjsKLSAgbWF4ID0gcG9zOwotICBHU1RfREVCVUdfT0JKRUNUIChzbXB0ZSwgInBvcyAlZCwgbWluICVkLCBtYXggJWQsIGJvcmRlciAlZCIsIHBvcywgbWluLCBtYXgsCi0gICAgICBib3JkZXIpOwotCi0gIG1hc2twID0gbWFzay0+ZGF0YTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAob3V0X2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAob3V0X2ZyYW1lKTsKLQotICB5X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoaW5fZnJhbWUsIDApOwotICB1X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoaW5fZnJhbWUsIDEpOwotICB2X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoaW5fZnJhbWUsIDIpOwotCi0gIHNyY193cmFwID0geV9zdHJpZGUgLSB3aWR0aDsKLSAgc3JjX3Vfd3JhcCA9IHVfc3RyaWRlIC0gKHdpZHRoIC8gMik7Ci0gIHNyY192X3dyYXAgPSB2X3N0cmlkZSAtICh3aWR0aCAvIDIpOwotCi0gIHNyY1kgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIHNyY1UgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMSk7Ci0gIHNyY1YgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChpbl9mcmFtZSwgMik7Ci0KLSAgb3V0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0gIGRlc3Rfd3JhcCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMCkgLSAod2lkdGggPDwgMik7Ci0KLSAgb2RkX3dpZHRoID0gKHdpZHRoICUgMiAhPSAwKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGggLyAyOyBqKyspIHsKLSAgICAgIHZhbHVlID0gKm1hc2twKys7Ci0gICAgICAqb3V0KysgPSAoMHhmZiAqICgoQ0xBTVAgKHZhbHVlLCBtaW4sIG1heCkgLSBtaW4pIDw8IDgpIC8gYm9yZGVyKSA+PiA4OwotICAgICAgKm91dCsrID0gKnNyY1krKzsKLSAgICAgICpvdXQrKyA9ICpzcmNVOwotICAgICAgKm91dCsrID0gKnNyY1Y7Ci0gICAgICB2YWx1ZSA9ICptYXNrcCsrOwotICAgICAgKm91dCsrID0gKDB4ZmYgKiAoKENMQU1QICh2YWx1ZSwgbWluLCBtYXgpIC0gbWluKSA8PCA4KSAvIGJvcmRlcikgPj4gODsKLSAgICAgICpvdXQrKyA9ICpzcmNZKys7Ci0gICAgICAqb3V0KysgPSAqc3JjVSsrOwotICAgICAgKm91dCsrID0gKnNyY1YrKzsKLSAgICB9Ci0gICAgLyogTWlnaHQgaGF2ZSBvbmUgb2RkIGNvbHVtbiBsZWZ0IHRvIGRvICovCi0gICAgaWYgKG9kZF93aWR0aCkgewotICAgICAgdmFsdWUgPSAqbWFza3ArKzsKLSAgICAgICpvdXQrKyA9ICgweGZmICogKChDTEFNUCAodmFsdWUsIG1pbiwgbWF4KSAtIG1pbikgPDwgOCkgLyBib3JkZXIpID4+IDg7Ci0gICAgICAqb3V0KysgPSAqc3JjWSsrOwotICAgICAgKm91dCsrID0gKnNyY1U7Ci0gICAgICAqb3V0KysgPSAqc3JjVjsKLSAgICB9Ci0gICAgaWYgKGkgJSAyID09IDApIHsKLSAgICAgIHNyY1UgLT0gd2lkdGggLyAyOwotICAgICAgc3JjViAtPSB3aWR0aCAvIDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNyY1UgKz0gc3JjX3Vfd3JhcDsKLSAgICAgIHNyY1YgKz0gc3JjX3Zfd3JhcDsKLSAgICB9Ci0gICAgc3JjWSArPSBzcmNfd3JhcDsKLSAgICBvdXQgKz0gZGVzdF93cmFwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfYWxwaGFfYmVmb3JlX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFNNUFRFQWxwaGEgKnNtcHRlID0gR1NUX1NNUFRFX0FMUEhBICh0cmFucyk7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotCi0gIC8qIGZpcnN0IHN5bmMgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIGN1cnJlbnQgc3RyZWFtX3RpbWUgb2YgdGhlIGJ1ZmZlciAqLwotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKLSAgc3RyZWFtX3RpbWUgPQotICAgICAgZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNtcHRlLCAic3luYyB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbV90aW1lKSkKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChzbXB0ZSksIHN0cmVhbV90aW1lKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF9zbXB0ZV9hbHBoYV90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIEdzdFNNUFRFQWxwaGEgKnNtcHRlID0gR1NUX1NNUFRFX0FMUEhBICh2ZmlsdGVyKTsKLSAgZ2RvdWJsZSBwb3NpdGlvbjsKLSAgZ2ludCBib3JkZXI7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFzbXB0ZS0+cHJvY2VzcykpCi0gICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHNtcHRlKTsKLSAgcG9zaXRpb24gPSBzbXB0ZS0+cG9zaXRpb247Ci0gIGJvcmRlciA9IHNtcHRlLT5ib3JkZXI7Ci0KLSAgLyogcnVuIHRoZSB0eXBlIHNwZWNpZmljIGZpbHRlciBjb2RlICovCi0gIHNtcHRlLT5wcm9jZXNzIChzbXB0ZSwgaW5fZnJhbWUsIG91dF9mcmFtZSwKLSAgICAgIHNtcHRlLT5tYXNrLCBib3JkZXIsICgoMSA8PCBzbXB0ZS0+ZGVwdGgpICsgYm9yZGVyKSAqIHBvc2l0aW9uKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNtcHRlKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzbXB0ZSwgQ09SRSwgTkVHT1RJQVRJT04sIChOVUxMKSwKLSAgICAgICAgKCJObyBpbnB1dCBmb3JtYXQgbmVnb3RpYXRlZCIpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3NtcHRlX2FscGhhX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGZyb20sIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnJlc3VsdCwgKnRtcF9jYXBzLCAqdG1wbF9jYXBzID0gTlVMTDsKLSAgZ2ludCBpLCBqOwotCi0gIHRtcF9jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoZnJvbSk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICAgIGNvbnN0IEdWYWx1ZSAqdmFsLCAqbHZhbDsKLSAgICBHVmFsdWUgbGlzdCA9IHsgMCwgfTsKLSAgICBHVmFsdWUgYXZhbCA9IHsgMCwgfTsKLSAgICBjb25zdCBnY2hhciAqc3RyOwotCi0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChmcm9tLCBpKSk7Ci0gICAgLyogd2UgY2FuIHRyYW5zZm9ybSBJNDIwIHRvIEFZVVYsCi0gICAgICogc28gbmVlZCB0byBsb2NhdGUgYW5kIHN1YnN0aXR1dGUgQVlVViBmb3IgdGhlIGJvdGggb2YgdGhlbSAqLwotICAgIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJmb3JtYXQiKTsKLSAgICBpZiAodmFsICYmIEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWwpKSB7Ci0gICAgICBnYm9vbGVhbiBzZWVuX2F5dXYgPSBGQUxTRSwgc2Vlbl9pNDIwID0gRkFMU0U7Ci0KLSAgICAgIGdfdmFsdWVfaW5pdCAoJmxpc3QsIEdTVF9UWVBFX0xJU1QpOwotICAgICAgZm9yIChqID0gMDsgaiA8IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWwpOyBqKyspIHsKLSAgICAgICAgbHZhbCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAodmFsLCBqKTsKLSAgICAgICAgaWYgKChzdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKGx2YWwpKSkgewotICAgICAgICAgIGlmIChzdHJjbXAgKHN0ciwgIkFZVVYiKSA9PSAwKSB7Ci0gICAgICAgICAgICBzZWVuX2F5dXYgPSBUUlVFOwotICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wIChzdHIsICJJNDIwIikgPT0gMCkgewotICAgICAgICAgICAgc2Vlbl9pNDIwID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChzZWVuX2F5dXYgJiYgIXNlZW5faTQyMCkgewotICAgICAgICBzdHIgPSAiSTQyMCI7Ci0gICAgICB9IGVsc2UgaWYgKHNlZW5faTQyMCAmJiAhc2Vlbl9heXV2KSB7Ci0gICAgICAgIHN0ciA9ICJBWVVWIjsKLSAgICAgIH0gZWxzZQotICAgICAgICBzdHIgPSBOVUxMOwotICAgICAgaWYgKHN0cikgewotICAgICAgICBnX3ZhbHVlX2NvcHkgKHZhbCwgJmxpc3QpOwotICAgICAgICBnX3ZhbHVlX2luaXQgKCZhdmFsLCBHX1RZUEVfU1RSSU5HKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmYXZhbCwgc3RyKTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJmF2YWwpOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmYXZhbCk7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJmb3JtYXQiLCAmbGlzdCk7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZsaXN0KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHZhbCAmJiBHX1ZBTFVFX0hPTERTX1NUUklORyAodmFsKSkgewotICAgICAgaWYgKChzdHIgPSBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbCkpICYmCi0gICAgICAgICAgKChzdHJjbXAgKHN0ciwgIkFZVVYiKSA9PSAwKSB8fCAoc3RyY21wIChzdHIsICJJNDIwIikgPT0gMCkpKSB7Ci0gICAgICAgIGdfdmFsdWVfaW5pdCAoJmxpc3QsIEdTVF9UWVBFX0xJU1QpOwotICAgICAgICBnX3ZhbHVlX2luaXQgKCZhdmFsLCBHX1RZUEVfU1RSSU5HKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmYXZhbCwgIkFZVVYiKTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJmF2YWwpOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmYXZhbCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJmF2YWwsICJJNDIwIik7Ci0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZhdmFsKTsKLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJmF2YWwpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCAiZm9ybWF0IiwgJmxpc3QpOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmbGlzdCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJmb3JtYXQiKTsKLSAgICB9Ci0KLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoc3RydWN0dXJlLCAiY29sb3JpbWV0cnkiKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAoc3RydWN0dXJlLCAiY2hyb21hLXNpdGUiKTsKLQotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKHRtcF9jYXBzLCBzdHJ1Y3R1cmUpOwotICB9Ci0KLSAgLyogR2V0IHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSAqLwotICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykgewotICAgIHRtcGxfY2FwcyA9Ci0gICAgICAgIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgmZ3N0X3NtcHRlX2FscGhhX3NyY190ZW1wbGF0ZSk7Ci0gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU1JDKSB7Ci0gICAgdG1wbF9jYXBzID0KLSAgICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZnc3Rfc21wdGVfYWxwaGFfc2lua190ZW1wbGF0ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gIH0KLQotICAvKiBJbnRlcnNlY3Qgd2l0aCBvdXIgdGVtcGxhdGUgY2FwcyAqLwotICByZXN1bHQgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRtcF9jYXBzLCB0bXBsX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAodG1wbF9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRtcF9jYXBzKTsKLQotICByZXN1bHQgPSBnc3RfY2Fwc19zaW1wbGlmeSAocmVzdWx0KTsKLQotICBHU1RfTE9HX09CSkVDVCAodHJhbnMsICJ0cmFuc2Zvcm1lZCAlIiBHU1RfUFRSX0ZPUk1BVCAiIHRvICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgZnJvbSwgcmVzdWx0KTsKLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJVc2luZyBmaWx0ZXIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXN1bHQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdCk7Ci0gICAgcmVzdWx0ID0gaW50ZXJzZWN0aW9uOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiSW50ZXJzZWN0aW9uICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc21wdGVfYWxwaGFfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFNNUFRFQWxwaGEgKnNtcHRlID0gR1NUX1NNUFRFX0FMUEhBICh2ZmlsdGVyKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHNtcHRlLT5wcm9jZXNzID0gTlVMTDsKLSAgc21wdGUtPmluX2Zvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbyk7Ci0gIHNtcHRlLT5vdXRfZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUIChvdXRfaW5mbyk7Ci0KLSAgLyogdHJ5IHRvIHVwZGF0ZSB0aGUgbWFzayBub3csIHRoaXMgd2lsbCBhbHNvIGFkanVzdCB0aGUgd2lkdGgvaGVpZ2h0IG9uCi0gICAqIHN1Y2Nlc3MgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChzbXB0ZSk7Ci0gIHJldCA9Ci0gICAgICBnc3Rfc21wdGVfYWxwaGFfdXBkYXRlX21hc2sgKHNtcHRlLCBzbXB0ZS0+dHlwZSwgc21wdGUtPmludmVydCwKLSAgICAgIHNtcHRlLT5kZXB0aCwgR1NUX1ZJREVPX0lORk9fV0lEVEggKG91dF9pbmZvKSwKLSAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAob3V0X2luZm8pKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHNtcHRlKTsKLQotICBpZiAoIXJldCkKLSAgICBnb3RvIG1hc2tfZmFpbGVkOwotCi0gIHN3aXRjaCAoc21wdGUtPm91dF9mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgIHN3aXRjaCAoc21wdGUtPmluX2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgICAgICBzbXB0ZS0+cHJvY2VzcyA9IGdzdF9zbXB0ZV9hbHBoYV9wcm9jZXNzX2F5dXZfYXl1djsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgICAgICAgc21wdGUtPnByb2Nlc3MgPSBnc3Rfc21wdGVfYWxwaGFfcHJvY2Vzc19pNDIwX2F5dXY7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICAgIHN3aXRjaCAoc21wdGUtPmluX2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICAgICAgICBzbXB0ZS0+cHJvY2VzcyA9IGdzdF9zbXB0ZV9hbHBoYV9wcm9jZXNzX2FyZ2JfYXJnYjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgc3dpdGNoIChzbXB0ZS0+aW5fZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgICAgIHNtcHRlLT5wcm9jZXNzID0gZ3N0X3NtcHRlX2FscGhhX3Byb2Nlc3NfcmdiYV9yZ2JhOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICBzd2l0Y2ggKHNtcHRlLT5pbl9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgICAgc21wdGUtPnByb2Nlc3MgPSBnc3Rfc21wdGVfYWxwaGFfcHJvY2Vzc19hYmdyX2FiZ3I7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgIHN3aXRjaCAoc21wdGUtPmluX2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgICAgICBzbXB0ZS0+cHJvY2VzcyA9IGdzdF9zbXB0ZV9hbHBoYV9wcm9jZXNzX2JncmFfYmdyYTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1tYXNrX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNtcHRlLCAiZmFpbGVkIGNyZWF0aW5nIHRoZSBtYXNrIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc21wdGVfYWxwaGFfZmluYWxpemUgKEdzdFNNUFRFQWxwaGEgKiBzbXB0ZSkKLXsKLSAgaWYgKHNtcHRlLT5tYXNrKQotICAgIGdzdF9tYXNrX2Rlc3Ryb3kgKHNtcHRlLT5tYXNrKTsKLSAgc21wdGUtPm1hc2sgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAoKEdPYmplY3QgKikgc21wdGUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NtcHRlX2FscGhhX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTTVBURUFscGhhICpzbXB0ZSA9IEdTVF9TTVBURV9BTFBIQSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVFlQRTp7Ci0gICAgICBnaW50IHR5cGU7Ci0KLSAgICAgIHR5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0KLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc21wdGUpOwotICAgICAgZ3N0X3NtcHRlX2FscGhhX3VwZGF0ZV9tYXNrIChzbXB0ZSwgdHlwZSwgc21wdGUtPmludmVydCwKLSAgICAgICAgICBzbXB0ZS0+ZGVwdGgsIHNtcHRlLT53aWR0aCwgc21wdGUtPmhlaWdodCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc21wdGUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9CT1JERVI6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNtcHRlKTsKLSAgICAgIHNtcHRlLT5ib3JkZXIgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVQVEg6ewotICAgICAgZ2ludCBkZXB0aDsKLQotICAgICAgZGVwdGggPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLQotICAgICAgR1NUX09CSkVDVF9MT0NLIChzbXB0ZSk7Ci0gICAgICBnc3Rfc21wdGVfYWxwaGFfdXBkYXRlX21hc2sgKHNtcHRlLCBzbXB0ZS0+dHlwZSwgc21wdGUtPmludmVydCwKLSAgICAgICAgICBkZXB0aCwgc21wdGUtPndpZHRoLCBzbXB0ZS0+aGVpZ2h0KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1BPU0lUSU9OOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzbXB0ZSk7Ci0gICAgICBzbXB0ZS0+cG9zaXRpb24gPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5WRVJUOnsKLSAgICAgIGdib29sZWFuIGludmVydDsKLQotICAgICAgaW52ZXJ0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChzbXB0ZSk7Ci0gICAgICBnc3Rfc21wdGVfYWxwaGFfdXBkYXRlX21hc2sgKHNtcHRlLCBzbXB0ZS0+dHlwZSwgaW52ZXJ0LAotICAgICAgICAgIHNtcHRlLT5kZXB0aCwgc21wdGUtPndpZHRoLCBzbXB0ZS0+aGVpZ2h0KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NtcHRlX2FscGhhX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTTVBURUFscGhhICpzbXB0ZTsKLQotICBzbXB0ZSA9IEdTVF9TTVBURV9BTFBIQSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVFlQRToKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc21wdGUpOwotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHNtcHRlLT50eXBlKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQk9SREVSOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzbXB0ZSk7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzbXB0ZS0+Ym9yZGVyKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVQVEg6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNtcHRlKTsKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHNtcHRlLT5kZXB0aCk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoc21wdGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BPU0lUSU9OOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzbXB0ZSk7Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBzbXB0ZS0+cG9zaXRpb24pOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHNtcHRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JTlZFUlQ6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKHNtcHRlKTsKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzbXB0ZS0+aW52ZXJ0KTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzbXB0ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3Rfc21wdGVfYWxwaGFfcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF9zbXB0ZV9hbHBoYV9kZWJ1ZywgInNtcHRlYWxwaGEiLCAwLAotICAgICAgIlNNUFRFIGFscGhhIGVmZmVjdCIpOwotCi0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic21wdGVhbHBoYSIsIEdTVF9SQU5LX05PTkUsCi0gICAgICBHU1RfVFlQRV9TTVBURV9BTFBIQSk7Ci19CmRpZmYgLS1naXQgYS9nc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5oIGIvZ3N0L3NtcHRlL2dzdHNtcHRlYWxwaGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkMmIzNS4uMDAwMDAwMAotLS0gYS9nc3Qvc21wdGUvZ3N0c21wdGVhbHBoYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9TTVBURV9BTFBIQV9IX18KLSNkZWZpbmUgX19HU1RfU01QVEVfQUxQSEFfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0jaW5jbHVkZSAiZ3N0bWFzay5oIgotCi0jZGVmaW5lIEdTVF9UWVBFX1NNUFRFX0FMUEhBIFwKLSAgKGdzdF9zbXB0ZV9hbHBoYV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU01QVEVfQUxQSEEob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TTVBURV9BTFBIQSxHc3RTTVBURUFscGhhKSkKLSNkZWZpbmUgR1NUX1NNUFRFX0FMUEhBX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NNUFRFX0FMUEhBLEdzdFNNUFRFQWxwaGFDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TTVBURV9BTFBIQShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1NNUFRFX0FMUEhBKSkKLSNkZWZpbmUgR1NUX0lTX1NNUFRFX0FMUEhBX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1NNUFRFX0FMUEhBKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFNNUFRFQWxwaGEgR3N0U01QVEVBbHBoYTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTTVBURUFscGhhQ2xhc3MgR3N0U01QVEVBbHBoYUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFNNUFRFQWxwaGEgewotICBHc3RWaWRlb0ZpbHRlciBlbGVtZW50OwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2ludCAgICAgICAgICAgdHlwZTsKLSAgZ2ludCAgICAgICAgICAgYm9yZGVyOwotICBnaW50ICAgICAgICAgICBkZXB0aDsKLSAgZ2RvdWJsZSAgICAgICAgcG9zaXRpb247Ci0gIGdib29sZWFuICAgICAgIGludmVydDsKLQotICAvKiBuZWdvdGlhdGVkIGZvcm1hdCAqLwotICBHc3RWaWRlb0Zvcm1hdCBpbl9mb3JtYXQsIG91dF9mb3JtYXQ7Ci0gIGdpbnQgICAgICAgICAgIHdpZHRoOwotICBnaW50ICAgICAgICAgICBoZWlnaHQ7Ci0KLSAgLyogc3RhdGUgb2YgdGhlIGVmZmVjdCAqLwotICBHc3RNYXNrICAgICAgICptYXNrOwotCi0gIC8qIHByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KLSAgdm9pZCAoKnByb2Nlc3MpIChHc3RTTVBURUFscGhhICogc21wdGUsIGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBpbiwgR3N0VmlkZW9GcmFtZSAqIG91dCwKLSAgICBHc3RNYXNrICogbWFzaywgZ2ludCBib3JkZXIsIGdpbnQgcG9zKTsKLX07Ci0KLXN0cnVjdCBfR3N0U01QVEVBbHBoYUNsYXNzIHsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfc21wdGVfYWxwaGFfZ2V0X3R5cGUgKHZvaWQpOwotZ2Jvb2xlYW4gZ3N0X3NtcHRlX2FscGhhX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU01QVEVfQUxQSEFfSF9fICovCmRpZmYgLS1naXQgYS9nc3Qvc21wdGUvcGFpbnQuYyBiL2dzdC9zbXB0ZS9wYWludC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDk3MzIzLi4wMDAwMDAwCi0tLSBhL2dzdC9zbXB0ZS9wYWludC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAicGFpbnQuaCIKLQotI2lmbmRlZiBNX1BJCi0jZGVmaW5lIE1fUEkgIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKLSNlbmRpZgotCi12b2lkCi1nc3Rfc21wdGVfcGFpbnRfdmJveCAoZ3VpbnQzMiAqIGRlc3QsIGdpbnQgc3RyaWRlLAotICAgIGdpbnQgeDAsIGdpbnQgeTAsIGdpbnQgYzAsIGdpbnQgeDEsIGdpbnQgeTEsIGdpbnQgYzEpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotCi0gIHdpZHRoID0geDEgLSB4MDsKLSAgaGVpZ2h0ID0geTEgLSB5MDsKLQotICBnX2Fzc2VydCAod2lkdGggPiAwKTsKLSAgZ19hc3NlcnQgKGhlaWdodCA+IDApOwotCi0gIGRlc3QgPSBkZXN0ICsgeTAgKiBzdHJpZGUgKyB4MDsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgewotICAgICAgZGVzdFtqXSA9IChjMSAqIGogKyBjMCAqICh3aWR0aCAtIGopKSAvIHdpZHRoOwotICAgIH0KLSAgICBkZXN0ICs9IHN0cmlkZTsKLSAgfQotfQotCi12b2lkCi1nc3Rfc21wdGVfcGFpbnRfaGJveCAoZ3VpbnQzMiAqIGRlc3QsIGdpbnQgc3RyaWRlLAotICAgIGdpbnQgeDAsIGdpbnQgeTAsIGdpbnQgYzAsIGdpbnQgeDEsIGdpbnQgeTEsIGdpbnQgYzEpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotCi0gIHdpZHRoID0geDEgLSB4MDsKLSAgaGVpZ2h0ID0geTEgLSB5MDsKLQotICBnX2Fzc2VydCAod2lkdGggPiAwKTsKLSAgZ19hc3NlcnQgKGhlaWdodCA+IDApOwotCi0gIGRlc3QgPSBkZXN0ICsgeTAgKiBzdHJpZGUgKyB4MDsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICBndWludDMyIHZhbHVlID0gKGMxICogaSArIGMwICogKGhlaWdodCAtIGkpKSAvIGhlaWdodDsKLQotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICBkZXN0W2pdID0gdmFsdWU7Ci0gICAgfQotICAgIGRlc3QgKz0gc3RyaWRlOwotICB9Ci19Ci0KLSNkZWZpbmUgU1RFUF8zRF9MSU5FKGR4YWJzLGR5YWJzLGR6YWJzLHNkeCxzZHksc2R6LHhyLHlyLHpyLHB4LHB5LHB6KSAgICAgICAgICAgXAotR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmIChkeGFicyA+PSBkeWFicyAmJiBkeGFicyA+PSBkemFicykgeyAgICAgICAgICAgICAgIFwKLSAgICB5ciArPSBkeWFiczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHpyICs9IGR6YWJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHlyID49IGR4YWJzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHB5ICs9IHNkeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXIgLT0gZHhhYnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoenIgPj0gZHphYnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcHogKz0gc2R6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB6ciAtPSBkeGFiczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHB4ICs9IHNkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gZWxzZSBpZiAoZHlhYnMgPj0gZHhhYnMgJiYgZHlhYnMgPj0gZHphYnMpIHsgICAgICAgIFwKLSAgICB4ciArPSBkeGFiczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHpyICs9IGR6YWJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHhyID49IGR5YWJzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHB4ICs9IHNkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeHIgLT0gZHlhYnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoenIgPj0gZHphYnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcHogKz0gc2R6OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB6ciAtPSBkeWFiczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHB5ICs9IHNkeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5ciArPSBkeWFiczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHhyICs9IGR4YWJzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHlyID49IGR5YWJzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHB5ICs9IHNkeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXIgLT0gZHphYnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoeHIgPj0gZHlhYnMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcHggKz0gc2R4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB4ciAtPSBkemFiczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHB6ICs9IHNkejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gR19TVE1UX0VORAotCi0jZGVmaW5lIFNXQVBfSU5UKGEsYikgICAgICAgICAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgXAotICBnaW50IHRtcDsgICAgICAgICAgICAgICAgICAgICBcCi0gIHRtcCA9IChhKTsgICAgICAgICAgICAgICAgICAgIFwKLSAgKGEpID0gKGIpOyAgICAgICAgICAgICAgICAgICAgXAotICAoYikgPSAodG1wKTsgICAgICAgICAgICAgICAgICBcCi19IEdfU1RNVF9FTkQKLQotI2RlZmluZSBTSUdOKGEpICgoYSkgPCAwID8gLTEgOiAxKQotCi0jZGVmaW5lIFBSRVBBUkVfM0RfTElORSh4MCx5MCx6MCx4MSx5MSx6MSxkeGFicyxkeWFicyxkemFicyxzZHgsc2R5LHNkeix4cix5cix6cixweCxweSxweilcCi1HX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgIFwKLSAgZ2ludCBkeCwgZHksIGR6OyAgICAgICAgICAgICAgXAotICBkeCA9IHgxIC0geDA7ICAgICAgICAgICAgICAgICBcCi0gIGR5ID0geTEgLSB5MDsgICAgICAgICAgICAgICAgIFwKLSAgZHogPSB6MSAtIHowOyAgICAgICAgICAgICAgICAgXAotICBkeGFicyA9IGFicyAoZHgpOyAgICAgICAgICAgICBcCi0gIGR5YWJzID0gYWJzIChkeSk7ICAgICAgICAgICAgIFwKLSAgZHphYnMgPSBhYnMgKGR6KTsgICAgICAgICAgICAgXAotICBzZHggPSBTSUdOIChkeCk7ICAgICAgICAgICAgICBcCi0gIHNkeSA9IFNJR04gKGR5KTsgICAgICAgICAgICAgIFwKLSAgc2R6ID0gU0lHTiAoZHopOyAgICAgICAgICAgICAgXAotICB4ciA9IGR4YWJzID4+IDE7ICAgICAgICAgICAgICBcCi0gIHlyID0gZHlhYnMgPj4gMTsgICAgICAgICAgICAgIFwKLSAgenIgPSBkemFicyA+PiAxOyAgICAgICAgICAgICAgXAotICBweCA9IHgwOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIHB5ID0geTA7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcHogPSB6MDsgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECi0KLXZvaWQKLWdzdF9zbXB0ZV9wYWludF90cmlhbmdsZV9saW5lYXIgKGd1aW50MzIgKiBkZXN0LCBnaW50IHN0cmlkZSwKLSAgICBnaW50IHgwLCBnaW50IHkwLCBnaW50IGMwLAotICAgIGdpbnQgeDEsIGdpbnQgeTEsIGdpbnQgYzEsIGdpbnQgeDIsIGdpbnQgeTIsIGdpbnQgYzIpCi17Ci0gIGdpbnQgc2R4bCwgc2R5bCwgc2RjbCwgZHhsYWJzLCBkeWxhYnMsIGRjbGFicywgeHJsLCB5cmwsIGNybCwgcHhsLCBweWwsIHBjbDsKLSAgZ2ludCBzZHhyLCBzZHlyLCBzZGNyLCBkeHJhYnMsIGR5cmFicywgZGNyYWJzLCB4cnIsIHlyciwgY3JyLCBweHIsIHB5ciwgcGNyOwotICBnaW50IGksIGosIGssIHNlZ19zdGFydCwgc2VnX2VuZDsKLQotICBpZiAoeTAgPiB5MSkgewotICAgIFNXQVBfSU5UICh4MCwgeDEpOwotICAgIFNXQVBfSU5UICh5MCwgeTEpOwotICAgIFNXQVBfSU5UIChjMCwgYzEpOwotICB9Ci0gIGlmICh5MCA+IHkyKSB7Ci0gICAgU1dBUF9JTlQgKHgwLCB4Mik7Ci0gICAgU1dBUF9JTlQgKHkwLCB5Mik7Ci0gICAgU1dBUF9JTlQgKGMwLCBjMik7Ci0gIH0KLSAgaWYgKHkxID4geTIpIHsKLSAgICBTV0FQX0lOVCAoeDEsIHgyKTsKLSAgICBTV0FQX0lOVCAoeTEsIHkyKTsKLSAgICBTV0FQX0lOVCAoYzEsIGMyKTsKLSAgfQotCi0gIFBSRVBBUkVfM0RfTElORSAoeDAsIHkwLCBjMCwgeDIsIHkyLCBjMiwKLSAgICAgIGR4bGFicywgZHlsYWJzLCBkY2xhYnMsIHNkeGwsIHNkeWwsIHNkY2wsIHhybCwgeXJsLCBjcmwsIHB4bCwgcHlsLCBwY2wpOwotCi0gIFBSRVBBUkVfM0RfTElORSAoeDAsIHkwLCBjMCwgeDEsIHkxLCBjMSwKLSAgICAgIGR4cmFicywgZHlyYWJzLCBkY3JhYnMsIHNkeHIsIHNkeXIsIHNkY3IsIHhyciwgeXJyLCBjcnIsIHB4ciwgcHlyLCBwY3IpOwotCi0gIGRlc3QgPSBkZXN0ICsgc3RyaWRlICogeTA7Ci0gIHNlZ19zdGFydCA9IHkwOwotICBzZWdfZW5kID0geTE7Ci0KLSAgLyogZG8gdHdvIHBhc3NlcyAqLwotICBmb3IgKGsgPSAwOyBrIDwgMjsgaysrKSB7Ci0gICAgZm9yIChpID0gc2VnX3N0YXJ0OyBpIDwgc2VnX2VuZDsgaSsrKSB7Ci0gICAgICBnaW50IHMgPSBweGwsIGUgPSBweHIsIHNjID0gcGNsLCBlYyA9IHBjcjsKLSAgICAgIGdpbnQgc2lnbiA9IFNJR04gKGUgLSBzKTsKLQotICAgICAgZSArPSBzaWduOwotICAgICAgZm9yIChqID0gczsgaiAhPSBlOyBqICs9IHNpZ24pIHsKLSAgICAgICAgZGVzdFtqXSA9IChlYyAqIChqIC0gcykgKyBzYyAqIChlIC0gaikpIC8gKGUgLSBzKTsKLSAgICAgIH0KLQotICAgICAgd2hpbGUgKHB5ciA9PSBpKSB7Ci0gICAgICAgIFNURVBfM0RfTElORSAoZHhyYWJzLCBkeXJhYnMsIGRjcmFicywgc2R4ciwgc2R5ciwgc2RjciwKLSAgICAgICAgICAgIHhyciwgeXJyLCBjcnIsIHB4ciwgcHlyLCBwY3IpOwotICAgICAgfQotICAgICAgd2hpbGUgKHB5bCA9PSBpKSB7Ci0gICAgICAgIFNURVBfM0RfTElORSAoZHhsYWJzLCBkeWxhYnMsIGRjbGFicywgc2R4bCwgc2R5bCwgc2RjbCwKLSAgICAgICAgICAgIHhybCwgeXJsLCBjcmwsIHB4bCwgcHlsLCBwY2wpOwotICAgICAgfQotICAgICAgZGVzdCArPSBzdHJpZGU7Ci0gICAgfQotCi0gICAgUFJFUEFSRV8zRF9MSU5FICh4MSwgeTEsIGMxLCB4MiwgeTIsIGMyLAotICAgICAgICBkeHJhYnMsIGR5cmFicywgZGNyYWJzLCBzZHhyLCBzZHlyLCBzZGNyLCB4cnIsIHlyciwgY3JyLCBweHIsIHB5ciwgcGNyKTsKLQotICAgIHNlZ19zdGFydCA9IHkxOwotICAgIHNlZ19lbmQgPSB5MjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZHJhd19icmVzZW5oYW1fbGluZSAoZ3VpbnQzMiAqIGRlc3QsIGdpbnQgc3RyaWRlLAotICAgIGdpbnQgeDAsIGdpbnQgeTAsIGdpbnQgeDEsIGdpbnQgeTEsIGd1aW50MzIgY29sKQotewotICBnaW50IGR4LCBkeTsKLSAgZ2ludCB4X2luY3IsIHlfaW5jcjsKLSAgZ2ludCBpLCBkcHIsIGRwcnUsIFAsIGluZGVwOwotCi0gIGR4ID0gYWJzICh4MSAtIHgwKTsKLSAgZHkgPSBhYnMgKHkxIC0geTApOwotCi0gIGRlc3QgPSBkZXN0ICsgeTAgKiBzdHJpZGUgKyB4MDsKLQotICB4X2luY3IgPSBTSUdOICh4MSAtIHgwKTsKLSAgeV9pbmNyID0gU0lHTiAoeTEgLSB5MCkgKiBzdHJpZGU7Ci0KLSAgaWYgKGR4ID49IGR5KSB7Ci0gICAgZHByID0gZHkgPDwgMTsKLSAgICBpID0gZHg7Ci0gICAgaW5kZXAgPSB4X2luY3I7Ci0gIH0gZWxzZSB7Ci0gICAgZHByID0gZHggPDwgMTsKLSAgICBpID0gZHk7Ci0gICAgaW5kZXAgPSB5X2luY3I7Ci0gIH0KLQotICBkcHJ1ID0gZHByIC0gKGkgPDwgMSk7Ci0gIFAgPSBkcHIgLSBpOwotCi0gIGZvciAoOyBpID49IDA7IGktLSkgewotICAgICpkZXN0ID0gY29sOwotCi0gICAgaWYgKFAgPiAwKSB7Ci0gICAgICBkZXN0ICs9IHhfaW5jcjsKLSAgICAgIGRlc3QgKz0geV9pbmNyOwotICAgICAgUCArPSBkcHJ1OwotICAgIH0gZWxzZSB7Ci0gICAgICBkZXN0ICs9IGluZGVwOwotICAgICAgUCArPSBkcHI7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQKLWdzdF9zbXB0ZV9wYWludF90cmlhbmdsZV9jbG9jayAoZ3VpbnQzMiAqIGRlc3QsIGdpbnQgc3RyaWRlLAotICAgIGdpbnQgeDAsIGdpbnQgeTAsIGdpbnQgYzAsCi0gICAgZ2ludCB4MSwgZ2ludCB5MSwgZ2ludCBjMSwgZ2ludCB4MiwgZ2ludCB5MiwgZ2ludCBjMikKLXsKLSAgZ2ludCBpOwotICBnaW50IHNpZ247Ci0gIGdmbG9hdCBhbmdsZSwgYW5nbGVfZTsKLSAgZ2Zsb2F0IGxlbjE7Ci0KLSAgYW5nbGVfZSA9IGFjb3MgKCgoeDEgLSB4MCkgKiAoeDIgLSB4MCkgKyAoeTEgLSB5MCkgKiAoeTIgLSB5MCkpIC8KLSAgICAgIChzcXJ0ICgoeDEgLSB4MCkgKiAoeDEgLSB4MCkgKyAoeTEgLSB5MCkgKiAoeTEgLSB5MCkpICoKLSAgICAgICAgICBzcXJ0ICgoeDIgLSB4MCkgKiAoeDIgLSB4MCkgKyAoeTIgLSB5MCkgKiAoeTIgLSB5MCkpKSk7Ci0KLSAgbGVuMSA9IHNxcnQgKCh4MSAtIHgwKSAqICh4MSAtIHgwKSArICh5MSAtIHkwKSAqICh5MSAtIHkwKSk7Ci0KLSAgaWYgKHgxID09IHgyKSB7Ci0gICAgc2lnbiA9IFNJR04gKHkyIC0geTEpOwotCi0gICAgZm9yIChpID0geTE7IGkgIT0gKHkyICsgc2lnbik7IGkgKz0gc2lnbikgewotICAgICAgaWYgKHkxID09IGkpCi0gICAgICAgIGFuZ2xlID0gMDsKLSAgICAgIGVsc2UKLSAgICAgICAgYW5nbGUgPSBhY29zICgoKHgxIC0geDApICogKHgyIC0geDApICsgKHkxIC0geTApICogKGkgLSB5MCkpIC8KLSAgICAgICAgICAgIChsZW4xICogc3FydCAoKHgxIC0geDApICogKHgxIC0geDApICsgKGkgLSB5MCkgKiAoaSAtCi0gICAgICAgICAgICAgICAgICAgICAgICB5MCkpKSkgLyBhbmdsZV9lOwotCi0gICAgICBkcmF3X2JyZXNlbmhhbV9saW5lIChkZXN0LCBzdHJpZGUsCi0gICAgICAgICAgeDAsIHkwLCB4MSwgaSwgKGMyICogYW5nbGUgKyBjMSAqICgxLjAgLSBhbmdsZSkpKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoeTEgPT0geTIpIHsKLSAgICBzaWduID0gU0lHTiAoeDIgLSB4MSk7Ci0KLSAgICBmb3IgKGkgPSB4MTsgaSAhPSAoeDIgKyBzaWduKTsgaSArPSBzaWduKSB7Ci0gICAgICBpZiAoeDEgPT0gaSkKLSAgICAgICAgYW5nbGUgPSAwOwotICAgICAgZWxzZQotICAgICAgICBhbmdsZSA9IGFjb3MgKCgoeDEgLSB4MCkgKiAoaSAtIHgwKSArICh5MSAtIHkwKSAqICh5MiAtIHkwKSkgLwotICAgICAgICAgICAgKGxlbjEgKiBzcXJ0ICgoaSAtIHgwKSAqIChpIC0geDApICsgKHkyIC0geTApICogKHkyIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIHkwKSkpKSAvIGFuZ2xlX2U7Ci0KLSAgICAgIGRyYXdfYnJlc2VuaGFtX2xpbmUgKGRlc3QsIHN0cmlkZSwKLSAgICAgICAgICB4MCwgeTAsIGksIHkxLCAoYzIgKiBhbmdsZSArIGMxICogKDEuMCAtIGFuZ2xlKSkpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBnX3dhcm5pbmcgKCJwYWludCB0cmlhbmdsZSBjbG9jazogbm90IHN1cHBvcnRlZCIpOwotICAgIHJldHVybjsKLSAgfQotfQotCi12b2lkCi1nc3Rfc21wdGVfcGFpbnRfYm94X2Nsb2NrIChndWludDMyICogZGVzdCwgZ2ludCBzdHJpZGUsCi0gICAgZ2ludCB4MCwgZ2ludCB5MCwgZ2ludCBjMCwKLSAgICBnaW50IHgxLCBnaW50IHkxLCBnaW50IGMxLCBnaW50IHgyLCBnaW50IHkyLCBnaW50IGMyKQotewotICBnZmxvYXQgYW5nbGVfbSwgY29sX207Ci0gIGdpbnQgeHYsIHl2OwotCi0gIGlmICh4MSA9PSB4MCkgewotICAgIHh2ID0geDI7Ci0gICAgeXYgPSB5MTsKLSAgfSBlbHNlIGlmICh5MSA9PSB5MCkgewotICAgIHh2ID0geDE7Ci0gICAgeXYgPSB5MjsKLSAgfSBlbHNlIHsKLSAgICBnX3dhcm5pbmcgKCJwYWludCBib3ggY2xvY2s6IG5vdCBzdXBwb3J0ZWQiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBhbmdsZV9tID0gMiAqIGFjb3MgKCgoeDEgLSB4MCkgKiAoeHYgLSB4MCkgKyAoeTEgLSB5MCkgKiAoeXYgLSB5MCkpIC8KLSAgICAgIChzcXJ0ICgoeDEgLSB4MCkgKiAoeDEgLSB4MCkgKyAoeTEgLSB5MCkgKiAoeTEgLSB5MCkpICoKLSAgICAgICAgICBzcXJ0ICgoeHYgLSB4MCkgKiAoeHYgLSB4MCkgKyAoeXYgLSB5MCkgKiAoeXYgLSB5MCkpKSkgLyBNX1BJOwotCi0gIGNvbF9tID0gYzIgKiBhbmdsZV9tICsgYzEgKiAoMS4wIC0gYW5nbGVfbSk7Ci0KLSAgZ3N0X3NtcHRlX3BhaW50X3RyaWFuZ2xlX2Nsb2NrIChkZXN0LCBzdHJpZGUsCi0gICAgICB4MCwgeTAsIGMwLCB4MSwgeTEsIGMxLCB4diwgeXYsIGNvbF9tKTsKLSAgZ3N0X3NtcHRlX3BhaW50X3RyaWFuZ2xlX2Nsb2NrIChkZXN0LCBzdHJpZGUsCi0gICAgICB4MCwgeTAsIGMwLCB4diwgeXYsIGNvbF9tLCB4MiwgeTIsIGMyKTsKLX0KZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9wYWludC5oIGIvZ3N0L3NtcHRlL3BhaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MTVlMGIuLjAwMDAwMDAKLS0tIGEvZ3N0L3NtcHRlL3BhaW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TTVBURV9QQUlOVF9IX18KLSNkZWZpbmUgX19HU1RfU01QVEVfUEFJTlRfSF9fCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLXZvaWQgICAgZ3N0X3NtcHRlX3BhaW50X3Zib3ggICAgICAgICAgICAoZ3VpbnQzMiAqZGVzdCwgZ2ludCBzdHJpZGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHgwLCBnaW50IHkwLCBnaW50IGMwLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB4MSwgZ2ludCB5MSwgZ2ludCBjMSk7Ci12b2lkICAgIGdzdF9zbXB0ZV9wYWludF9oYm94ICAgICAgICAgICAgKGd1aW50MzIgKmRlc3QsIGdpbnQgc3RyaWRlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB4MCwgZ2ludCB5MCwgZ2ludCBjMCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgeDEsIGdpbnQgeTEsIGdpbnQgYzEpOwotCi12b2lkICAgIGdzdF9zbXB0ZV9wYWludF90cmlhbmdsZV9saW5lYXIgKGd1aW50MzIgKmRlc3QsIGdpbnQgc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHgwLCBnaW50IHkwLCBnaW50IGMwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHgxLCBnaW50IHkxLCBnaW50IGMxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB4MiwgZ2ludCB5MiwgZ2ludCBjMik7Ci0KLXZvaWQgICAgZ3N0X3NtcHRlX3BhaW50X3RyaWFuZ2xlX2Nsb2NrICAoZ3VpbnQzMiAqZGVzdCwgZ2ludCBzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgeDAsIGdpbnQgeTAsIGdpbnQgYzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgeDEsIGdpbnQgeTEsIGdpbnQgYzEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHgyLCBnaW50IHkyLCBnaW50IGMyKTsKLQotdm9pZCAgICBnc3Rfc21wdGVfcGFpbnRfYm94X2Nsb2NrICAgICAgIChndWludDMyICpkZXN0LCBnaW50IHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB4MCwgZ2ludCB5MCwgZ2ludCBjMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB4MSwgZ2ludCB5MSwgZ2ludCBjMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCB4MiwgZ2ludCB5MiwgZ2ludCBjMik7Ci0KLSNlbmRpZiAvKiBfX0dTVF9TTVBURV9QQUlOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC9zbXB0ZS9wbHVnaW4uYyBiL2dzdC9zbXB0ZS9wbHVnaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNlYmE4YS4uMDAwMDAwMAotLS0gYS9nc3Qvc21wdGUvcGx1Z2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0Bnb29nbGUuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHNtcHRlLmgiCi0jaW5jbHVkZSAiZ3N0c21wdGVhbHBoYS5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGlmICghZ3N0X3NtcHRlX3BsdWdpbl9pbml0IChwbHVnaW4pKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9zbXB0ZV9hbHBoYV9wbHVnaW5faW5pdCAocGx1Z2luKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBzbXB0ZSwKLSAgICAiQXBwbHkgdGhlIHN0YW5kYXJkIFNNUFRFIHRyYW5zaXRpb25zIG9uIHZpZGVvIGltYWdlcyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmFtIGIvZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjYzM2Y4Li4wMDAwMDAwCi0tLSBhL2dzdC9zcGVjdHJ1bS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHNwZWN0cnVtLmxhCi0KLWxpYmdzdHNwZWN0cnVtX2xhX1NPVVJDRVMgPSBnc3RzcGVjdHJ1bS5jCi1saWJnc3RzcGVjdHJ1bV9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykKLWxpYmdzdHNwZWN0cnVtX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3RmZnQtJChHU1RfQVBJX1ZFUlNJT04pIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoTElCTSkKLWxpYmdzdHNwZWN0cnVtX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHNwZWN0cnVtX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0c3BlY3RydW0uaApkaWZmIC0tZ2l0IGEvZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmluIGIvZ3N0L3NwZWN0cnVtL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDVhNzVlLi4wMDAwMDAwCi0tLSBhL2dzdC9zcGVjdHJ1bS9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDkxNSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3Qvc3BlY3RydW0KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RzcGVjdHJ1bV9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0c3BlY3RydW1fbGFfT0JKRUNUUyA9IGxpYmdzdHNwZWN0cnVtX2xhLWdzdHNwZWN0cnVtLmxvCi1saWJnc3RzcGVjdHJ1bV9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3RzcGVjdHJ1bV9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0c3BlY3RydW1fbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RzcGVjdHJ1bV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdHNwZWN0cnVtX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHNwZWN0cnVtX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHNwZWN0cnVtX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHNwZWN0cnVtX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHNwZWN0cnVtLmxhCi1saWJnc3RzcGVjdHJ1bV9sYV9TT1VSQ0VTID0gZ3N0c3BlY3RydW0uYwotbGliZ3N0c3BlY3RydW1fbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi0KLWxpYmdzdHNwZWN0cnVtX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3RmZnQtJChHU1RfQVBJX1ZFUlNJT04pIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoTElCTSkKLQotbGliZ3N0c3BlY3RydW1fbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0c3BlY3RydW1fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0c3BlY3RydW0uaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3NwZWN0cnVtL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC9zcGVjdHJ1bS9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHNwZWN0cnVtLmxhOiAkKGxpYmdzdHNwZWN0cnVtX2xhX09CSkVDVFMpICQobGliZ3N0c3BlY3RydW1fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHNwZWN0cnVtX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RzcGVjdHJ1bV9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0c3BlY3RydW1fbGFfT0JKRUNUUykgJChsaWJnc3RzcGVjdHJ1bV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHNwZWN0cnVtX2xhLWdzdHNwZWN0cnVtLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3RzcGVjdHJ1bV9sYS1nc3RzcGVjdHJ1bS5sbzogZ3N0c3BlY3RydW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHNwZWN0cnVtX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHNwZWN0cnVtX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzcGVjdHJ1bV9sYS1nc3RzcGVjdHJ1bS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c3BlY3RydW1fbGEtZ3N0c3BlY3RydW0uVHBvIC1jIC1vIGxpYmdzdHNwZWN0cnVtX2xhLWdzdHNwZWN0cnVtLmxvIGB0ZXN0IC1mICdnc3RzcGVjdHJ1bS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzcGVjdHJ1bS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RzcGVjdHJ1bV9sYS1nc3RzcGVjdHJ1bS5UcG8gJChERVBESVIpL2xpYmdzdHNwZWN0cnVtX2xhLWdzdHNwZWN0cnVtLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHNwZWN0cnVtLmMnIG9iamVjdD0nbGliZ3N0c3BlY3RydW1fbGEtZ3N0c3BlY3RydW0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzcGVjdHJ1bV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzcGVjdHJ1bV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzcGVjdHJ1bV9sYS1nc3RzcGVjdHJ1bS5sbyBgdGVzdCAtZiAnZ3N0c3BlY3RydW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3BlY3RydW0uYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uYyBiL2dzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjMzMWI2Li4wMDAwMDAwCi0tLSBhL2dzdC9zcGVjdHJ1bS9nc3RzcGVjdHJ1bS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgIDwyMDA2LDIwMTE+IFN0ZWZhbiBLb3N0IDxlbnNvbmljQHVzZXJzLnNmLm5ldD4KLSAqICAgICAgICAgICAgICAgPDIwMDctMjAwOT4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXNwZWN0cnVtCi0gKgotICogVGhlIFNwZWN0cnVtIGVsZW1lbnQgYW5hbHl6ZXMgdGhlIGZyZXF1ZW5jeSBzcGVjdHJ1bSBvZiBhbiBhdWRpbyBzaWduYWwuCi0gKiBJZiB0aGUgI0dzdFNwZWN0cnVtOnBvc3QtbWVzc2FnZXMgcHJvcGVydHkgaXMgI1RSVUUsIGl0IHNlbmRzIGFuYWx5c2lzIHJlc3VsdHMKLSAqIGFzIGVsZW1lbnQgbWVzc2FnZXMgbmFtZWQKLSAqIDxjbGFzc25hbWU+JnF1b3Q7c3BlY3RydW0mcXVvdDs8L2NsYXNzbmFtZT4gYWZ0ZXIgZWFjaCBpbnRlcnZhbCBvZiB0aW1lIGdpdmVuCi0gKiBieSB0aGUgI0dzdFNwZWN0cnVtOmludGVydmFsIHByb3BlcnR5LgotICoKLSAqIFRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIHNvbWUgY29tYmluYXRpb24gb2YgdGhlc2UgZmllbGRzOgotICogPGl0ZW1pemVkbGlzdD4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RDbG9ja1RpbWUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDt0aW1lc3RhbXAmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCB0aGUgbWVzc2FnZS4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RDbG9ja1RpbWUKLSAqICAgPGNsYXNzbmFtZT4mcXVvdDtzdHJlYW0tdGltZSZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIHN0cmVhbSB0aW1lIG9mIHRoZSBidWZmZXIuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR3N0Q2xvY2tUaW1lCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7cnVubmluZy10aW1lJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICB0aGUgcnVubmluZ190aW1lIG9mIHRoZSBidWZmZXIuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjR3N0Q2xvY2tUaW1lCi0gKiAgIDxjbGFzc25hbWU+JnF1b3Q7ZHVyYXRpb24mcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPGxpc3RpdGVtPgotICogICA8cGFyYT4KLSAqICAgI0dzdENsb2NrVGltZQotICogICA8Y2xhc3NuYW1lPiZxdW90O2VuZHRpbWUmcXVvdDs8L2NsYXNzbmFtZT46Ci0gKiAgIHRoZSBlbmQgdGltZSBvZiB0aGUgYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIHRoZSBtZXNzYWdlIGFzIHN0cmVhbSB0aW1lICh0aGlzCi0gKiAgIGlzIGRlcHJlY2F0ZWQsIGFzIGl0IGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gc3RyZWFtLXRpbWUgKyBkdXJhdGlvbikKLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RWYWx1ZUxpc3Qgb2YgI2dmbG9hdAotICogICA8Y2xhc3NuYW1lPiZxdW90O21hZ25pdHVkZSZxdW90OzwvY2xhc3NuYW1lPjoKLSAqICAgdGhlIGxldmVsIGZvciBlYWNoIGZyZXF1ZW5jeSBiYW5kIGluIGRCLiBBbGwgdmFsdWVzIGJlbG93IHRoZSB2YWx1ZSBvZiB0aGUKLSAqICAgI0dzdFNwZWN0cnVtOnRocmVzaG9sZCBwcm9wZXJ0eSB3aWxsIGJlIHNldCB0byB0aGUgdGhyZXNob2xkLiBPbmx5IHByZXNlbnQKLSAqICAgaWYgdGhlICNHc3RTcGVjdHJ1bTptZXNzYWdlLW1hZ25pdHVkZSBwcm9wZXJ0eSBpcyAlVFJVRS4KLSAqICAgPC9wYXJhPgotICogPC9saXN0aXRlbT4KLSAqIDxsaXN0aXRlbT4KLSAqICAgPHBhcmE+Ci0gKiAgICNHc3RWYWx1ZUxpc3Qgb2YgI2dmbG9hdAotICogICA8Y2xhc3NuYW1lPiZxdW90O3BoYXNlJnF1b3Q7PC9jbGFzc25hbWU+OgotICogICBUaGUgcGhhc2UgZm9yIGVhY2ggZnJlcXVlbmN5IGJhbmQuIFRoZSB2YWx1ZSBpcyBiZXR3ZWVuIC1waSBhbmQgcGkuIE9ubHkKLSAqICAgcHJlc2VudCBpZiB0aGUgI0dzdFNwZWN0cnVtOm1lc3NhZ2UtcGhhc2UgcHJvcGVydHkgaXMgJVRSVUUuCi0gKiAgIDwvcGFyYT4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqCi0gKiBJZiAjR3N0U3BlY3RydW06bXVsdGktY2hhbm5lbCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS4gbWFnbml0dWRlIGFuZCBwaGFzZQotICogZmllbGRzIHdpbGwgYmUgZWFjaCBhIG5lc3RlZCAjR3N0VmFsdWVBcnJheS4gVGhlIGZpcnN0IGRpbWVuc2lvbiBhcmUgdGhlCi0gKiBjaGFubmVscyBhbmQgdGhlIHNlY29uZCBkaW1lbnNpb24gYXJlIHRoZSB2YWx1ZXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgYXBwbGljYXRpb248L3RpdGxlPgotICogPGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3RpbmcgbGFuZ3VhZ2U9IkMiPgotICogPHhpOmluY2x1ZGUgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvWEluY2x1ZGUiIHBhcnNlPSJ0ZXh0IiBocmVmPSIuLi8uLi8uLi8uLi90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9zcGVjdHJ1bS1leGFtcGxlLmMiIC8+Ci0gKiA8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSAiZ3N0c3BlY3RydW0uaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3NwZWN0cnVtX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9zcGVjdHJ1bV9kZWJ1ZwotCi0vKiBlbGVtZW50ZmFjdG9yeSBpbmZvcm1hdGlvbiAqLwotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSMgZGVmaW5lIEZPUk1BVFMgInsgUzE2TEUsIFMyNExFLCBTMzJMRSwgRjMyTEUsIEY2NExFIH0iCi0jZWxzZQotIyBkZWZpbmUgRk9STUFUUyAieyBTMTZCRSwgUzI0QkUsIFMzMkJFLCBGMzJCRSwgRjY0QkUgfSIKLSNlbmRpZgotCi0jZGVmaW5lIEFMTE9XRURfQ0FQUyBcCi0gIEdTVF9BVURJT19DQVBTX01BS0UgKEZPUk1BVFMpICIsICIgXAotICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQiCi0KLS8qIFNwZWN0cnVtIHByb3BlcnRpZXMgKi8KLSNkZWZpbmUgREVGQVVMVF9QT1NUX01FU1NBR0VTCSAgICAgICAgVFJVRQotI2RlZmluZSBERUZBVUxUX01FU1NBR0VfTUFHTklUVURFCVRSVUUKLSNkZWZpbmUgREVGQVVMVF9NRVNTQUdFX1BIQVNFCQlGQUxTRQotI2RlZmluZSBERUZBVUxUX0lOVEVSVkFMCQkoR1NUX1NFQ09ORCAvIDEwKQotI2RlZmluZSBERUZBVUxUX0JBTkRTCQkJMTI4Ci0jZGVmaW5lIERFRkFVTFRfVEhSRVNIT0xECQktNjAKLSNkZWZpbmUgREVGQVVMVF9NVUxUSV9DSEFOTkVMCQlGQUxTRQotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9QT1NUX01FU1NBR0VTLAotICBQUk9QX01FU1NBR0VfTUFHTklUVURFLAotICBQUk9QX01FU1NBR0VfUEhBU0UsCi0gIFBST1BfSU5URVJWQUwsCi0gIFBST1BfQkFORFMsCi0gIFBST1BfVEhSRVNIT0xELAotICBQUk9QX01VTFRJX0NIQU5ORUwKLX07Ci0KLSNkZWZpbmUgZ3N0X3NwZWN0cnVtX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFNwZWN0cnVtLCBnc3Rfc3BlY3RydW0sIEdTVF9UWVBFX0FVRElPX0ZJTFRFUik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9zcGVjdHJ1bV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3BlY3RydW1fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3NwZWN0cnVtX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3BlY3RydW1fc3RhcnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3NwZWN0cnVtX3N0b3AgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucyk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3Rfc3BlY3RydW1fdHJhbnNmb3JtX2lwIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW4pOwotc3RhdGljIGdib29sZWFuIGdzdF9zcGVjdHJ1bV9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBiYXNlLAotICAgIGNvbnN0IEdzdEF1ZGlvSW5mbyAqIGluZm8pOwotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWN0cnVtX2NsYXNzX2luaXQgKEdzdFNwZWN0cnVtQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzcyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAoa2xhc3MpOwotICBHc3RBdWRpb0ZpbHRlckNsYXNzICpmaWx0ZXJfY2xhc3MgPSBHU1RfQVVESU9fRklMVEVSX0NMQVNTIChrbGFzcyk7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3NwZWN0cnVtX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3NwZWN0cnVtX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfc3BlY3RydW1fZmluYWxpemU7Ci0KLSAgdHJhbnNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGVjdHJ1bV9zdGFydCk7Ci0gIHRyYW5zX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zcGVjdHJ1bV9zdG9wKTsKLSAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9pcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BlY3RydW1fdHJhbnNmb3JtX2lwKTsKLSAgdHJhbnNfY2xhc3MtPnBhc3N0aHJvdWdoX29uX3NhbWVfY2FwcyA9IFRSVUU7Ci0KLSAgZmlsdGVyX2NsYXNzLT5zZXR1cCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3BlY3RydW1fc2V0dXApOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUE9TVF9NRVNTQUdFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicG9zdC1tZXNzYWdlcyIsICJQb3N0IE1lc3NhZ2VzIiwKLSAgICAgICAgICAiV2hldGhlciB0byBwb3N0IGEgJ3NwZWN0cnVtJyBlbGVtZW50IG1lc3NhZ2Ugb24gdGhlIGJ1cyBmb3IgZWFjaCAiCi0gICAgICAgICAgInBhc3NlZCBpbnRlcnZhbCIsIERFRkFVTFRfUE9TVF9NRVNTQUdFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01FU1NBR0VfTUFHTklUVURFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJtZXNzYWdlLW1hZ25pdHVkZSIsICJNYWduaXR1ZGUiLAotICAgICAgICAgICJXaGV0aGVyIHRvIGFkZCBhICdtYWduaXR1ZGUnIGZpZWxkIHRvIHRoZSBzdHJ1Y3R1cmUgb2YgYW55ICIKLSAgICAgICAgICAiJ3NwZWN0cnVtJyBlbGVtZW50IG1lc3NhZ2VzIHBvc3RlZCBvbiB0aGUgYnVzIiwKLSAgICAgICAgICBERUZBVUxUX01FU1NBR0VfTUFHTklUVURFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTUVTU0FHRV9QSEFTRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibWVzc2FnZS1waGFzZSIsICJQaGFzZSIsCi0gICAgICAgICAgIldoZXRoZXIgdG8gYWRkIGEgJ3BoYXNlJyBmaWVsZCB0byB0aGUgc3RydWN0dXJlIG9mIGFueSAiCi0gICAgICAgICAgIidzcGVjdHJ1bScgZWxlbWVudCBtZXNzYWdlcyBwb3N0ZWQgb24gdGhlIGJ1cyIsCi0gICAgICAgICAgREVGQVVMVF9NRVNTQUdFX1BIQVNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0lOVEVSVkFMLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImludGVydmFsIiwgIkludGVydmFsIiwKLSAgICAgICAgICAiSW50ZXJ2YWwgb2YgdGltZSBiZXR3ZWVuIG1lc3NhZ2UgcG9zdHMgKGluIG5hbm9zZWNvbmRzKSIsCi0gICAgICAgICAgMSwgR19NQVhVSU5UNjQsIERFRkFVTFRfSU5URVJWQUwsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CQU5EUywKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiYmFuZHMiLCAiQmFuZHMiLCAiTnVtYmVyIG9mIGZyZXF1ZW5jeSBiYW5kcyIsCi0gICAgICAgICAgMiwgKChndWludCkgR19NQVhJTlQgKyAyKSAvIDIsIERFRkFVTFRfQkFORFMsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9USFJFU0hPTEQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgidGhyZXNob2xkIiwgIlRocmVzaG9sZCIsCi0gICAgICAgICAgImRCIHRocmVzaG9sZCBmb3IgcmVzdWx0LiBBbGwgbG93ZXIgdmFsdWVzIHdpbGwgYmUgc2V0IHRvIHRoaXMiLAotICAgICAgICAgIEdfTUlOSU5ULCAwLCBERUZBVUxUX1RIUkVTSE9MRCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01VTFRJX0NIQU5ORUwsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm11bHRpLWNoYW5uZWwiLCAiTXVsdGljaGFubmVsIHJlc3VsdHMiLAotICAgICAgICAgICJTZW5kIHNlcGFyYXRlIHJlc3VsdHMgZm9yIGVhY2ggY2hhbm5lbCIsCi0gICAgICAgICAgREVGQVVMVF9NVUxUSV9DSEFOTkVMLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X3NwZWN0cnVtX2RlYnVnLCAic3BlY3RydW0iLCAwLAotICAgICAgImF1ZGlvIHNwZWN0cnVtIGFuYWx5c2VyIGVsZW1lbnQiKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiU3BlY3RydW0gYW5hbHl6ZXIiLAotICAgICAgIkZpbHRlci9BbmFseXplci9BdWRpbyIsCi0gICAgICAiUnVuIGFuIEZGVCBvbiB0aGUgYXVkaW8gc2lnbmFsLCBvdXRwdXQgc3BlY3RydW0gZGF0YSIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4sICIKLSAgICAgICJTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBTExPV0VEX0NBUFMpOwotICBnc3RfYXVkaW9fZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzIChmaWx0ZXJfY2xhc3MsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlY3RydW1faW5pdCAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSkKLXsKLSAgc3BlY3RydW0tPnBvc3RfbWVzc2FnZXMgPSBERUZBVUxUX1BPU1RfTUVTU0FHRVM7Ci0gIHNwZWN0cnVtLT5tZXNzYWdlX21hZ25pdHVkZSA9IERFRkFVTFRfTUVTU0FHRV9NQUdOSVRVREU7Ci0gIHNwZWN0cnVtLT5tZXNzYWdlX3BoYXNlID0gREVGQVVMVF9NRVNTQUdFX1BIQVNFOwotICBzcGVjdHJ1bS0+aW50ZXJ2YWwgPSBERUZBVUxUX0lOVEVSVkFMOwotICBzcGVjdHJ1bS0+YmFuZHMgPSBERUZBVUxUX0JBTkRTOwotICBzcGVjdHJ1bS0+dGhyZXNob2xkID0gREVGQVVMVF9USFJFU0hPTEQ7Ci0KLSAgZ19tdXRleF9pbml0ICgmc3BlY3RydW0tPmxvY2spOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWN0cnVtX2FsbG9jX2NoYW5uZWxfZGF0YSAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSkKLXsKLSAgZ2ludCBpOwotICBHc3RTcGVjdHJ1bUNoYW5uZWwgKmNkOwotICBndWludCBiYW5kcyA9IHNwZWN0cnVtLT5iYW5kczsKLSAgZ3VpbnQgbmZmdCA9IDIgKiBiYW5kcyAtIDI7Ci0KLSAgZ19hc3NlcnQgKHNwZWN0cnVtLT5jaGFubmVsX2RhdGEgPT0gTlVMTCk7Ci0KLSAgc3BlY3RydW0tPm51bV9jaGFubmVscyA9IChzcGVjdHJ1bS0+bXVsdGlfY2hhbm5lbCkgPwotICAgICAgR1NUX0FVRElPX0ZJTFRFUl9DSEFOTkVMUyAoc3BlY3RydW0pIDogMTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzcGVjdHJ1bSwgImFsbG9jYXRpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMiLAotICAgICAgc3BlY3RydW0tPm51bV9jaGFubmVscyk7Ci0KLSAgc3BlY3RydW0tPmNoYW5uZWxfZGF0YSA9IGdfbmV3IChHc3RTcGVjdHJ1bUNoYW5uZWwsIHNwZWN0cnVtLT5udW1fY2hhbm5lbHMpOwotICBmb3IgKGkgPSAwOyBpIDwgc3BlY3RydW0tPm51bV9jaGFubmVsczsgaSsrKSB7Ci0gICAgY2QgPSAmc3BlY3RydW0tPmNoYW5uZWxfZGF0YVtpXTsKLSAgICBjZC0+ZmZ0X2N0eCA9IGdzdF9mZnRfZjMyX25ldyAobmZmdCwgRkFMU0UpOwotICAgIGNkLT5pbnB1dCA9IGdfbmV3MCAoZ2Zsb2F0LCBuZmZ0KTsKLSAgICBjZC0+aW5wdXRfdG1wID0gZ19uZXcwIChnZmxvYXQsIG5mZnQpOwotICAgIGNkLT5mcmVxZGF0YSA9IGdfbmV3MCAoR3N0RkZURjMyQ29tcGxleCwgYmFuZHMpOwotICAgIGNkLT5zcGVjdF9tYWduaXR1ZGUgPSBnX25ldzAgKGdmbG9hdCwgYmFuZHMpOwotICAgIGNkLT5zcGVjdF9waGFzZSA9IGdfbmV3MCAoZ2Zsb2F0LCBiYW5kcyk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVjdHJ1bV9mcmVlX2NoYW5uZWxfZGF0YSAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSkKLXsKLSAgaWYgKHNwZWN0cnVtLT5jaGFubmVsX2RhdGEpIHsKLSAgICBnaW50IGk7Ci0gICAgR3N0U3BlY3RydW1DaGFubmVsICpjZDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNwZWN0cnVtLCAiZnJlZWluZyBkYXRhIGZvciAlZCBjaGFubmVscyIsCi0gICAgICAgIHNwZWN0cnVtLT5udW1fY2hhbm5lbHMpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNwZWN0cnVtLT5udW1fY2hhbm5lbHM7IGkrKykgewotICAgICAgY2QgPSAmc3BlY3RydW0tPmNoYW5uZWxfZGF0YVtpXTsKLSAgICAgIGlmIChjZC0+ZmZ0X2N0eCkKLSAgICAgICAgZ3N0X2ZmdF9mMzJfZnJlZSAoY2QtPmZmdF9jdHgpOwotICAgICAgZ19mcmVlIChjZC0+aW5wdXQpOwotICAgICAgZ19mcmVlIChjZC0+aW5wdXRfdG1wKTsKLSAgICAgIGdfZnJlZSAoY2QtPmZyZXFkYXRhKTsKLSAgICAgIGdfZnJlZSAoY2QtPnNwZWN0X21hZ25pdHVkZSk7Ci0gICAgICBnX2ZyZWUgKGNkLT5zcGVjdF9waGFzZSk7Ci0gICAgfQotICAgIGdfZnJlZSAoc3BlY3RydW0tPmNoYW5uZWxfZGF0YSk7Ci0gICAgc3BlY3RydW0tPmNoYW5uZWxfZGF0YSA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVjdHJ1bV9mbHVzaCAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSkKLXsKLSAgc3BlY3RydW0tPm51bV9mcmFtZXMgPSAwOwotICBzcGVjdHJ1bS0+bnVtX2ZmdCA9IDA7Ci0KLSAgc3BlY3RydW0tPmFjY3VtdWxhdGVkX2Vycm9yID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVjdHJ1bV9yZXNldF9zdGF0ZSAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3BlY3RydW0sICJyZXNldHRpbmcgc3RhdGUiKTsKLQotICBnc3Rfc3BlY3RydW1fZnJlZV9jaGFubmVsX2RhdGEgKHNwZWN0cnVtKTsKLSAgZ3N0X3NwZWN0cnVtX2ZsdXNoIChzcGVjdHJ1bSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlY3RydW1fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFNwZWN0cnVtICpzcGVjdHJ1bSA9IEdTVF9TUEVDVFJVTSAob2JqZWN0KTsKLQotICBnc3Rfc3BlY3RydW1fcmVzZXRfc3RhdGUgKHNwZWN0cnVtKTsKLSAgZ19tdXRleF9jbGVhciAoJnNwZWN0cnVtLT5sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlY3RydW1fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwZWN0cnVtICpmaWx0ZXIgPSBHU1RfU1BFQ1RSVU0gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BPU1RfTUVTU0FHRVM6Ci0gICAgICBmaWx0ZXItPnBvc3RfbWVzc2FnZXMgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTUVTU0FHRV9NQUdOSVRVREU6Ci0gICAgICBmaWx0ZXItPm1lc3NhZ2VfbWFnbml0dWRlID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01FU1NBR0VfUEhBU0U6Ci0gICAgICBmaWx0ZXItPm1lc3NhZ2VfcGhhc2UgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJWQUw6ewotICAgICAgZ3VpbnQ2NCBpbnRlcnZhbCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgZ19tdXRleF9sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGlmIChmaWx0ZXItPmludGVydmFsICE9IGludGVydmFsKSB7Ci0gICAgICAgIGZpbHRlci0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICAgICAgZ3N0X3NwZWN0cnVtX3Jlc2V0X3N0YXRlIChmaWx0ZXIpOwotICAgICAgfQotICAgICAgZ19tdXRleF91bmxvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9CQU5EUzp7Ci0gICAgICBndWludCBiYW5kcyA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGdfbXV0ZXhfbG9jayAoJmZpbHRlci0+bG9jayk7Ci0gICAgICBpZiAoZmlsdGVyLT5iYW5kcyAhPSBiYW5kcykgewotICAgICAgICBmaWx0ZXItPmJhbmRzID0gYmFuZHM7Ci0gICAgICAgIGdzdF9zcGVjdHJ1bV9yZXNldF9zdGF0ZSAoZmlsdGVyKTsKLSAgICAgIH0KLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfVEhSRVNIT0xEOgotICAgICAgZmlsdGVyLT50aHJlc2hvbGQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NVUxUSV9DSEFOTkVMOnsKLSAgICAgIGdib29sZWFuIG11bHRpX2NoYW5uZWwgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBnX211dGV4X2xvY2sgKCZmaWx0ZXItPmxvY2spOwotICAgICAgaWYgKGZpbHRlci0+bXVsdGlfY2hhbm5lbCAhPSBtdWx0aV9jaGFubmVsKSB7Ci0gICAgICAgIGZpbHRlci0+bXVsdGlfY2hhbm5lbCA9IG11bHRpX2NoYW5uZWw7Ci0gICAgICAgIGdzdF9zcGVjdHJ1bV9yZXNldF9zdGF0ZSAoZmlsdGVyKTsKLSAgICAgIH0KLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmZmlsdGVyLT5sb2NrKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlY3RydW1fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFNwZWN0cnVtICpmaWx0ZXIgPSBHU1RfU1BFQ1RSVU0gKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1BPU1RfTUVTU0FHRVM6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZmlsdGVyLT5wb3N0X21lc3NhZ2VzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NRVNTQUdFX01BR05JVFVERToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPm1lc3NhZ2VfbWFnbml0dWRlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NRVNTQUdFX1BIQVNFOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIGZpbHRlci0+bWVzc2FnZV9waGFzZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSU5URVJWQUw6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCBmaWx0ZXItPmludGVydmFsKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CQU5EUzoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBmaWx0ZXItPmJhbmRzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USFJFU0hPTEQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBmaWx0ZXItPnRocmVzaG9sZCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVMVElfQ0hBTk5FTDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBmaWx0ZXItPm11bHRpX2NoYW5uZWwpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGVjdHJ1bV9zdGFydCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RTcGVjdHJ1bSAqc3BlY3RydW0gPSBHU1RfU1BFQ1RSVU0gKHRyYW5zKTsKLQotICBnc3Rfc3BlY3RydW1fcmVzZXRfc3RhdGUgKHNwZWN0cnVtKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3BlY3RydW1fc3RvcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zKQotewotICBHc3RTcGVjdHJ1bSAqc3BlY3RydW0gPSBHU1RfU1BFQ1RSVU0gKHRyYW5zKTsKLQotICBnc3Rfc3BlY3RydW1fcmVzZXRfc3RhdGUgKHNwZWN0cnVtKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyogbWl4aW5nIGRhdGEgcmVhZGVycyAqLwotCi1zdGF0aWMgdm9pZAotaW5wdXRfZGF0YV9taXhlZF9mbG9hdCAoY29uc3QgZ3VpbnQ4ICogX2luLCBnZmxvYXQgKiBvdXQsIGd1aW50IGxlbiwKLSAgICBndWludCBjaGFubmVscywgZ2Zsb2F0IG1heF92YWx1ZSwgZ3VpbnQgb3AsIGd1aW50IG5mZnQpCi17Ci0gIGd1aW50IGksIGosIGlwID0gMDsKLSAgZ2Zsb2F0IHY7Ci0gIGdmbG9hdCAqaW4gPSAoZ2Zsb2F0ICopIF9pbjsKLQotICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICB2ID0gaW5baXArK107Ci0gICAgZm9yIChpID0gMTsgaSA8IGNoYW5uZWxzOyBpKyspCi0gICAgICB2ICs9IGluW2lwKytdOwotICAgIG91dFtvcF0gPSB2IC8gY2hhbm5lbHM7Ci0gICAgb3AgPSAob3AgKyAxKSAlIG5mZnQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWlucHV0X2RhdGFfbWl4ZWRfZG91YmxlIChjb25zdCBndWludDggKiBfaW4sIGdmbG9hdCAqIG91dCwgZ3VpbnQgbGVuLAotICAgIGd1aW50IGNoYW5uZWxzLCBnZmxvYXQgbWF4X3ZhbHVlLCBndWludCBvcCwgZ3VpbnQgbmZmdCkKLXsKLSAgZ3VpbnQgaSwgaiwgaXAgPSAwOwotICBnZmxvYXQgdjsKLSAgZ2RvdWJsZSAqaW4gPSAoZ2RvdWJsZSAqKSBfaW47Ci0KLSAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0gICAgdiA9IGluW2lwKytdOwotICAgIGZvciAoaSA9IDE7IGkgPCBjaGFubmVsczsgaSsrKQotICAgICAgdiArPSBpbltpcCsrXTsKLSAgICBvdXRbb3BdID0gdiAvIGNoYW5uZWxzOwotICAgIG9wID0gKG9wICsgMSkgJSBuZmZ0OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnB1dF9kYXRhX21peGVkX2ludDMyX21heCAoY29uc3QgZ3VpbnQ4ICogX2luLCBnZmxvYXQgKiBvdXQsIGd1aW50IGxlbiwKLSAgICBndWludCBjaGFubmVscywgZ2Zsb2F0IG1heF92YWx1ZSwgZ3VpbnQgb3AsIGd1aW50IG5mZnQpCi17Ci0gIGd1aW50IGksIGosIGlwID0gMDsKLSAgZ2ludDMyICppbiA9IChnaW50MzIgKikgX2luOwotICBnZmxvYXQgdjsKLQotICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICB2ID0gaW5baXArK10gLyBtYXhfdmFsdWU7Ci0gICAgZm9yIChpID0gMTsgaSA8IGNoYW5uZWxzOyBpKyspCi0gICAgICB2ICs9IGluW2lwKytdIC8gbWF4X3ZhbHVlOwotICAgIG91dFtvcF0gPSB2IC8gY2hhbm5lbHM7Ci0gICAgb3AgPSAob3AgKyAxKSAlIG5mZnQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWlucHV0X2RhdGFfbWl4ZWRfaW50MjRfbWF4IChjb25zdCBndWludDggKiBfaW4sIGdmbG9hdCAqIG91dCwgZ3VpbnQgbGVuLAotICAgIGd1aW50IGNoYW5uZWxzLCBnZmxvYXQgbWF4X3ZhbHVlLCBndWludCBvcCwgZ3VpbnQgbmZmdCkKLXsKLSAgZ3VpbnQgaSwgajsKLSAgZ2Zsb2F0IHYgPSAwLjA7Ci0KLSAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspIHsKLSNpZiBHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOCi0gICAgICBnaW50MzIgdmFsdWUgPSBHU1RfUkVBRF9VSU5UMjRfQkUgKF9pbik7Ci0jZWxzZQotICAgICAgZ2ludDMyIHZhbHVlID0gR1NUX1JFQURfVUlOVDI0X0xFIChfaW4pOwotI2VuZGlmCi0gICAgICBpZiAodmFsdWUgJiAweDAwODAwMDAwKQotICAgICAgICB2YWx1ZSB8PSAweGZmMDAwMDAwOwotICAgICAgdiArPSB2YWx1ZSAvIG1heF92YWx1ZTsKLSAgICAgIF9pbiArPSAzOwotICAgIH0KLSAgICBvdXRbb3BdID0gdiAvIGNoYW5uZWxzOwotICAgIG9wID0gKG9wICsgMSkgJSBuZmZ0OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnB1dF9kYXRhX21peGVkX2ludDE2X21heCAoY29uc3QgZ3VpbnQ4ICogX2luLCBnZmxvYXQgKiBvdXQsIGd1aW50IGxlbiwKLSAgICBndWludCBjaGFubmVscywgZ2Zsb2F0IG1heF92YWx1ZSwgZ3VpbnQgb3AsIGd1aW50IG5mZnQpCi17Ci0gIGd1aW50IGksIGosIGlwID0gMDsKLSAgZ2ludDE2ICppbiA9IChnaW50MTYgKikgX2luOwotICBnZmxvYXQgdjsKLQotICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICB2ID0gaW5baXArK10gLyBtYXhfdmFsdWU7Ci0gICAgZm9yIChpID0gMTsgaSA8IGNoYW5uZWxzOyBpKyspCi0gICAgICB2ICs9IGluW2lwKytdIC8gbWF4X3ZhbHVlOwotICAgIG91dFtvcF0gPSB2IC8gY2hhbm5lbHM7Ci0gICAgb3AgPSAob3AgKyAxKSAlIG5mZnQ7Ci0gIH0KLX0KLQotLyogbm9uIG1peGluZyBkYXRhIHJlYWRlcnMgKi8KLQotc3RhdGljIHZvaWQKLWlucHV0X2RhdGFfZmxvYXQgKGNvbnN0IGd1aW50OCAqIF9pbiwgZ2Zsb2F0ICogb3V0LCBndWludCBsZW4sIGd1aW50IGNoYW5uZWxzLAotICAgIGdmbG9hdCBtYXhfdmFsdWUsIGd1aW50IG9wLCBndWludCBuZmZ0KQotewotICBndWludCBqLCBpcDsKLSAgZ2Zsb2F0ICppbiA9IChnZmxvYXQgKikgX2luOwotCi0gIGZvciAoaiA9IDAsIGlwID0gMDsgaiA8IGxlbjsgaisrLCBpcCArPSBjaGFubmVscykgewotICAgIG91dFtvcF0gPSBpbltpcF07Ci0gICAgb3AgPSAob3AgKyAxKSAlIG5mZnQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWlucHV0X2RhdGFfZG91YmxlIChjb25zdCBndWludDggKiBfaW4sIGdmbG9hdCAqIG91dCwgZ3VpbnQgbGVuLCBndWludCBjaGFubmVscywKLSAgICBnZmxvYXQgbWF4X3ZhbHVlLCBndWludCBvcCwgZ3VpbnQgbmZmdCkKLXsKLSAgZ3VpbnQgaiwgaXA7Ci0gIGdkb3VibGUgKmluID0gKGdkb3VibGUgKikgX2luOwotCi0gIGZvciAoaiA9IDAsIGlwID0gMDsgaiA8IGxlbjsgaisrLCBpcCArPSBjaGFubmVscykgewotICAgIG91dFtvcF0gPSBpbltpcF07Ci0gICAgb3AgPSAob3AgKyAxKSAlIG5mZnQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWlucHV0X2RhdGFfaW50MzJfbWF4IChjb25zdCBndWludDggKiBfaW4sIGdmbG9hdCAqIG91dCwgZ3VpbnQgbGVuLAotICAgIGd1aW50IGNoYW5uZWxzLCBnZmxvYXQgbWF4X3ZhbHVlLCBndWludCBvcCwgZ3VpbnQgbmZmdCkKLXsKLSAgZ3VpbnQgaiwgaXA7Ci0gIGdpbnQzMiAqaW4gPSAoZ2ludDMyICopIF9pbjsKLQotICBmb3IgKGogPSAwLCBpcCA9IDA7IGogPCBsZW47IGorKywgaXAgKz0gY2hhbm5lbHMpIHsKLSAgICBvdXRbb3BdID0gaW5baXBdIC8gbWF4X3ZhbHVlOwotICAgIG9wID0gKG9wICsgMSkgJSBuZmZ0OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnB1dF9kYXRhX2ludDI0X21heCAoY29uc3QgZ3VpbnQ4ICogX2luLCBnZmxvYXQgKiBvdXQsIGd1aW50IGxlbiwKLSAgICBndWludCBjaGFubmVscywgZ2Zsb2F0IG1heF92YWx1ZSwgZ3VpbnQgb3AsIGd1aW50IG5mZnQpCi17Ci0gIGd1aW50IGo7Ci0KLSAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0jaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICAgIGdpbnQzMiB2ID0gR1NUX1JFQURfVUlOVDI0X0JFIChfaW4pOwotI2Vsc2UKLSAgICBnaW50MzIgdiA9IEdTVF9SRUFEX1VJTlQyNF9MRSAoX2luKTsKLSNlbmRpZgotICAgIGlmICh2ICYgMHgwMDgwMDAwMCkKLSAgICAgIHYgfD0gMHhmZjAwMDAwMDsKLSAgICBfaW4gKz0gMyAqIGNoYW5uZWxzOwotICAgIG91dFtvcF0gPSB2IC8gbWF4X3ZhbHVlOwotICAgIG9wID0gKG9wICsgMSkgJSBuZmZ0OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pbnB1dF9kYXRhX2ludDE2X21heCAoY29uc3QgZ3VpbnQ4ICogX2luLCBnZmxvYXQgKiBvdXQsIGd1aW50IGxlbiwKLSAgICBndWludCBjaGFubmVscywgZ2Zsb2F0IG1heF92YWx1ZSwgZ3VpbnQgb3AsIGd1aW50IG5mZnQpCi17Ci0gIGd1aW50IGosIGlwOwotICBnaW50MTYgKmluID0gKGdpbnQxNiAqKSBfaW47Ci0KLSAgZm9yIChqID0gMCwgaXAgPSAwOyBqIDwgbGVuOyBqKyssIGlwICs9IGNoYW5uZWxzKSB7Ci0gICAgb3V0W29wXSA9IGluW2lwXSAvIG1heF92YWx1ZTsKLSAgICBvcCA9IChvcCArIDEpICUgbmZmdDsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zcGVjdHJ1bV9zZXR1cCAoR3N0QXVkaW9GaWx0ZXIgKiBiYXNlLCBjb25zdCBHc3RBdWRpb0luZm8gKiBpbmZvKQotewotICBHc3RTcGVjdHJ1bSAqc3BlY3RydW0gPSBHU1RfU1BFQ1RSVU0gKGJhc2UpOwotICBnYm9vbGVhbiBtdWx0aV9jaGFubmVsID0gc3BlY3RydW0tPm11bHRpX2NoYW5uZWw7Ci0gIEdzdFNwZWN0cnVtSW5wdXREYXRhIGlucHV0X2RhdGEgPSBOVUxMOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNwZWN0cnVtLT5sb2NrKTsKLSAgc3dpdGNoIChHU1RfQVVESU9fSU5GT19GT1JNQVQgKGluZm8pKSB7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNjoKLSAgICAgIGlucHV0X2RhdGEgPQotICAgICAgICAgIG11bHRpX2NoYW5uZWwgPyBpbnB1dF9kYXRhX2ludDE2X21heCA6IGlucHV0X2RhdGFfbWl4ZWRfaW50MTZfbWF4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MyNDoKLSAgICAgIGlucHV0X2RhdGEgPQotICAgICAgICAgIG11bHRpX2NoYW5uZWwgPyBpbnB1dF9kYXRhX2ludDI0X21heCA6IGlucHV0X2RhdGFfbWl4ZWRfaW50MjRfbWF4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MzMjoKLSAgICAgIGlucHV0X2RhdGEgPQotICAgICAgICAgIG11bHRpX2NoYW5uZWwgPyBpbnB1dF9kYXRhX2ludDMyX21heCA6IGlucHV0X2RhdGFfbWl4ZWRfaW50MzJfbWF4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX0YzMjoKLSAgICAgIGlucHV0X2RhdGEgPSBtdWx0aV9jaGFubmVsID8gaW5wdXRfZGF0YV9mbG9hdCA6IGlucHV0X2RhdGFfbWl4ZWRfZmxvYXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfRjY0OgotICAgICAgaW5wdXRfZGF0YSA9IG11bHRpX2NoYW5uZWwgPyBpbnB1dF9kYXRhX2RvdWJsZSA6IGlucHV0X2RhdGFfbWl4ZWRfZG91YmxlOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgc3BlY3RydW0tPmlucHV0X2RhdGEgPSBpbnB1dF9kYXRhOwotCi0gIGdzdF9zcGVjdHJ1bV9yZXNldF9zdGF0ZSAoc3BlY3RydW0pOwotICBnX211dGV4X3VubG9jayAoJnNwZWN0cnVtLT5sb2NrKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdWYWx1ZSAqCi1nc3Rfc3BlY3RydW1fbWVzc2FnZV9hZGRfY29udGFpbmVyIChHc3RTdHJ1Y3R1cmUgKiBzLCBHVHlwZSB0eXBlLAotICAgIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgdHlwZSk7Ci0gIC8qIHdpbGwgY29weS1ieS12YWx1ZSAqLwotICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAocywgbmFtZSwgJnYpOwotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci0gIHJldHVybiAoR1ZhbHVlICopIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCBuYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zcGVjdHJ1bV9tZXNzYWdlX2FkZF9saXN0IChHVmFsdWUgKiBjdiwgZ2Zsb2F0ICogZGF0YSwgZ3VpbnQgbnVtX3ZhbHVlcykKLXsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIGd1aW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0ZMT0FUKTsKLSAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgewotICAgIGdfdmFsdWVfc2V0X2Zsb2F0ICgmdiwgZGF0YVtpXSk7Ci0gICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlIChjdiwgJnYpOyAgICAgICAvKiBjb3BpZXMgYnkgdmFsdWUgKi8KLSAgfQotICBnX3ZhbHVlX3Vuc2V0ICgmdik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlY3RydW1fbWVzc2FnZV9hZGRfYXJyYXkgKEdWYWx1ZSAqIGN2LCBnZmxvYXQgKiBkYXRhLCBndWludCBudW1fdmFsdWVzKQotewotICBHVmFsdWUgdiA9IHsgMCwgfTsKLSAgR1ZhbHVlIGEgPSB7IDAsIH07Ci0gIGd1aW50IGk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmYSwgR1NUX1RZUEVfQVJSQVkpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9GTE9BVCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKLSAgICBnX3ZhbHVlX3NldF9mbG9hdCAoJnYsIGRhdGFbaV0pOwotICAgIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKCZhLCAmdik7ICAgICAgLyogY29waWVzIGJ5IHZhbHVlICovCi0gIH0KLSAgZ192YWx1ZV91bnNldCAoJnYpOwotCi0gIGdzdF92YWx1ZV9hcnJheV9hcHBlbmRfdmFsdWUgKGN2LCAmYSk7ICAgICAgICAvKiBjb3BpZXMgYnkgdmFsdWUgKi8KLSAgZ192YWx1ZV91bnNldCAoJmEpOwotfQotCi1zdGF0aWMgR3N0TWVzc2FnZSAqCi1nc3Rfc3BlY3RydW1fbWVzc2FnZV9uZXcgKEdzdFNwZWN0cnVtICogc3BlY3RydW0sIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsCi0gICAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uKQotewotICBHc3RCYXNlVHJhbnNmb3JtICp0cmFucyA9IEdTVF9CQVNFX1RSQU5TRk9STV9DQVNUIChzcGVjdHJ1bSk7Ci0gIEdzdFNwZWN0cnVtQ2hhbm5lbCAqY2Q7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR1ZhbHVlICptY3YgPSBOVUxMLCAqcGN2ID0gTlVMTDsKLSAgR3N0Q2xvY2tUaW1lIGVuZHRpbWUsIHJ1bm5pbmdfdGltZSwgc3RyZWFtX3RpbWU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3BlY3RydW0sICJwcmVwYXJpbmcgbWVzc2FnZSwgYmFuZHMgPSVkICIsIHNwZWN0cnVtLT5iYW5kcyk7Ci0KLSAgcnVubmluZ190aW1lID0gZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgIHRpbWVzdGFtcCk7Ci0gIHN0cmVhbV90aW1lID0gZ3N0X3NlZ21lbnRfdG9fc3RyZWFtX3RpbWUgKCZ0cmFucy0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgdGltZXN0YW1wKTsKLSAgLyogZW5kdGltZSBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgZW5kdGltZSA9IHN0cmVhbV90aW1lICsgZHVyYXRpb247Ci0KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgic3BlY3RydW0iLAotICAgICAgImVuZHRpbWUiLCBHU1RfVFlQRV9DTE9DS19USU1FLCBlbmR0aW1lLAotICAgICAgInRpbWVzdGFtcCIsIEdfVFlQRV9VSU5UNjQsIHRpbWVzdGFtcCwKLSAgICAgICJzdHJlYW0tdGltZSIsIEdfVFlQRV9VSU5UNjQsIHN0cmVhbV90aW1lLAotICAgICAgInJ1bm5pbmctdGltZSIsIEdfVFlQRV9VSU5UNjQsIHJ1bm5pbmdfdGltZSwKLSAgICAgICJkdXJhdGlvbiIsIEdfVFlQRV9VSU5UNjQsIGR1cmF0aW9uLCBOVUxMKTsKLQotICBpZiAoIXNwZWN0cnVtLT5tdWx0aV9jaGFubmVsKSB7Ci0gICAgY2QgPSAmc3BlY3RydW0tPmNoYW5uZWxfZGF0YVswXTsKLQotICAgIGlmIChzcGVjdHJ1bS0+bWVzc2FnZV9tYWduaXR1ZGUpIHsKLSAgICAgIC8qIEZJWE1FIDAuMTE6IHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5LCBub3QgYSBsaXN0ICovCi0gICAgICBtY3YgPSBnc3Rfc3BlY3RydW1fbWVzc2FnZV9hZGRfY29udGFpbmVyIChzLCBHU1RfVFlQRV9MSVNULCAibWFnbml0dWRlIik7Ci0gICAgICBnc3Rfc3BlY3RydW1fbWVzc2FnZV9hZGRfbGlzdCAobWN2LCBjZC0+c3BlY3RfbWFnbml0dWRlLCBzcGVjdHJ1bS0+YmFuZHMpOwotICAgIH0KLSAgICBpZiAoc3BlY3RydW0tPm1lc3NhZ2VfcGhhc2UpIHsKLSAgICAgIC8qIEZJWE1FIDAuMTE6IHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5LCBub3QgYSBsaXN0ICovCi0gICAgICBwY3YgPSBnc3Rfc3BlY3RydW1fbWVzc2FnZV9hZGRfY29udGFpbmVyIChzLCBHU1RfVFlQRV9MSVNULCAicGhhc2UiKTsKLSAgICAgIGdzdF9zcGVjdHJ1bV9tZXNzYWdlX2FkZF9saXN0IChwY3YsIGNkLT5zcGVjdF9waGFzZSwgc3BlY3RydW0tPmJhbmRzKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3VpbnQgYzsKLSAgICBndWludCBjaGFubmVscyA9IEdTVF9BVURJT19GSUxURVJfQ0hBTk5FTFMgKHNwZWN0cnVtKTsKLQotICAgIGlmIChzcGVjdHJ1bS0+bWVzc2FnZV9tYWduaXR1ZGUpIHsKLSAgICAgIG1jdiA9IGdzdF9zcGVjdHJ1bV9tZXNzYWdlX2FkZF9jb250YWluZXIgKHMsIEdTVF9UWVBFX0FSUkFZLCAibWFnbml0dWRlIik7Ci0gICAgfQotICAgIGlmIChzcGVjdHJ1bS0+bWVzc2FnZV9waGFzZSkgewotICAgICAgcGN2ID0gZ3N0X3NwZWN0cnVtX21lc3NhZ2VfYWRkX2NvbnRhaW5lciAocywgR1NUX1RZUEVfQVJSQVksICJwaGFzZSIpOwotICAgIH0KLQotICAgIGZvciAoYyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0gICAgICBjZCA9ICZzcGVjdHJ1bS0+Y2hhbm5lbF9kYXRhW2NdOwotCi0gICAgICBpZiAoc3BlY3RydW0tPm1lc3NhZ2VfbWFnbml0dWRlKSB7Ci0gICAgICAgIGdzdF9zcGVjdHJ1bV9tZXNzYWdlX2FkZF9hcnJheSAobWN2LCBjZC0+c3BlY3RfbWFnbml0dWRlLAotICAgICAgICAgICAgc3BlY3RydW0tPmJhbmRzKTsKLSAgICAgIH0KLSAgICAgIGlmIChzcGVjdHJ1bS0+bWVzc2FnZV9waGFzZSkgewotICAgICAgICBnc3Rfc3BlY3RydW1fbWVzc2FnZV9hZGRfYXJyYXkgKHBjdiwgY2QtPnNwZWN0X3BoYXNlLCBzcGVjdHJ1bS0+YmFuZHMpOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1QgKHNwZWN0cnVtKSwgcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3BlY3RydW1fcnVuX2ZmdCAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSwgR3N0U3BlY3RydW1DaGFubmVsICogY2QsCi0gICAgZ3VpbnQgaW5wdXRfcG9zKQotewotICBndWludCBpOwotICBndWludCBiYW5kcyA9IHNwZWN0cnVtLT5iYW5kczsKLSAgZ3VpbnQgbmZmdCA9IDIgKiBiYW5kcyAtIDI7Ci0gIGdpbnQgdGhyZXNob2xkID0gc3BlY3RydW0tPnRocmVzaG9sZDsKLSAgZ2Zsb2F0ICppbnB1dCA9IGNkLT5pbnB1dDsKLSAgZ2Zsb2F0ICppbnB1dF90bXAgPSBjZC0+aW5wdXRfdG1wOwotICBnZmxvYXQgKnNwZWN0X21hZ25pdHVkZSA9IGNkLT5zcGVjdF9tYWduaXR1ZGU7Ci0gIGdmbG9hdCAqc3BlY3RfcGhhc2UgPSBjZC0+c3BlY3RfcGhhc2U7Ci0gIEdzdEZGVEYzMkNvbXBsZXggKmZyZXFkYXRhID0gY2QtPmZyZXFkYXRhOwotICBHc3RGRlRGMzIgKmZmdF9jdHggPSBjZC0+ZmZ0X2N0eDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbmZmdDsgaSsrKQotICAgIGlucHV0X3RtcFtpXSA9IGlucHV0WyhpbnB1dF9wb3MgKyBpKSAlIG5mZnRdOwotCi0gIGdzdF9mZnRfZjMyX3dpbmRvdyAoZmZ0X2N0eCwgaW5wdXRfdG1wLCBHU1RfRkZUX1dJTkRPV19IQU1NSU5HKTsKLQotICBnc3RfZmZ0X2YzMl9mZnQgKGZmdF9jdHgsIGlucHV0X3RtcCwgZnJlcWRhdGEpOwotCi0gIGlmIChzcGVjdHJ1bS0+bWVzc2FnZV9tYWduaXR1ZGUpIHsKLSAgICBnZG91YmxlIHZhbDsKLSAgICAvKiBDYWxjdWxhdGUgbWFnbml0dWRlIGluIGRiICovCi0gICAgZm9yIChpID0gMDsgaSA8IGJhbmRzOyBpKyspIHsKLSAgICAgIHZhbCA9IGZyZXFkYXRhW2ldLnIgKiBmcmVxZGF0YVtpXS5yOwotICAgICAgdmFsICs9IGZyZXFkYXRhW2ldLmkgKiBmcmVxZGF0YVtpXS5pOwotICAgICAgdmFsIC89IG5mZnQgKiBuZmZ0OwotICAgICAgdmFsID0gMTAuMCAqIGxvZzEwICh2YWwpOwotICAgICAgaWYgKHZhbCA8IHRocmVzaG9sZCkKLSAgICAgICAgdmFsID0gdGhyZXNob2xkOwotICAgICAgc3BlY3RfbWFnbml0dWRlW2ldICs9IHZhbDsKLSAgICB9Ci0gIH0KLQotICBpZiAoc3BlY3RydW0tPm1lc3NhZ2VfcGhhc2UpIHsKLSAgICAvKiBDYWxjdWxhdGUgcGhhc2UgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgYmFuZHM7IGkrKykKLSAgICAgIHNwZWN0X3BoYXNlW2ldICs9IGF0YW4yIChmcmVxZGF0YVtpXS5pLCBmcmVxZGF0YVtpXS5yKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWN0cnVtX3ByZXBhcmVfbWVzc2FnZV9kYXRhIChHc3RTcGVjdHJ1bSAqIHNwZWN0cnVtLAotICAgIEdzdFNwZWN0cnVtQ2hhbm5lbCAqIGNkKQotewotICBndWludCBpOwotICBndWludCBiYW5kcyA9IHNwZWN0cnVtLT5iYW5kczsKLSAgZ3VpbnQgbnVtX2ZmdCA9IHNwZWN0cnVtLT5udW1fZmZ0OwotCi0gIC8qIENhbGN1bGF0ZSBhdmVyYWdlICovCi0gIGlmIChzcGVjdHJ1bS0+bWVzc2FnZV9tYWduaXR1ZGUpIHsKLSAgICBnZmxvYXQgKnNwZWN0X21hZ25pdHVkZSA9IGNkLT5zcGVjdF9tYWduaXR1ZGU7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJhbmRzOyBpKyspCi0gICAgICBzcGVjdF9tYWduaXR1ZGVbaV0gLz0gbnVtX2ZmdDsKLSAgfQotICBpZiAoc3BlY3RydW0tPm1lc3NhZ2VfcGhhc2UpIHsKLSAgICBnZmxvYXQgKnNwZWN0X3BoYXNlID0gY2QtPnNwZWN0X3BoYXNlOwotICAgIGZvciAoaSA9IDA7IGkgPCBiYW5kczsgaSsrKQotICAgICAgc3BlY3RfcGhhc2VbaV0gLz0gbnVtX2ZmdDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3NwZWN0cnVtX3Jlc2V0X21lc3NhZ2VfZGF0YSAoR3N0U3BlY3RydW0gKiBzcGVjdHJ1bSwKLSAgICBHc3RTcGVjdHJ1bUNoYW5uZWwgKiBjZCkKLXsKLSAgZ3VpbnQgYmFuZHMgPSBzcGVjdHJ1bS0+YmFuZHM7Ci0gIGdmbG9hdCAqc3BlY3RfbWFnbml0dWRlID0gY2QtPnNwZWN0X21hZ25pdHVkZTsKLSAgZ2Zsb2F0ICpzcGVjdF9waGFzZSA9IGNkLT5zcGVjdF9waGFzZTsKLQotICAvKiByZXNldCBzcGVjdHJ1bSBhY2N1bXVsYXRvcnMgKi8KLSAgbWVtc2V0IChzcGVjdF9tYWduaXR1ZGUsIDAsIGJhbmRzICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgbWVtc2V0IChzcGVjdF9waGFzZSwgMCwgYmFuZHMgKiBzaXplb2YgKGdmbG9hdCkpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3NwZWN0cnVtX3RyYW5zZm9ybV9pcCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdFNwZWN0cnVtICpzcGVjdHJ1bSA9IEdTVF9TUEVDVFJVTSAodHJhbnMpOwotICBndWludCByYXRlID0gR1NUX0FVRElPX0ZJTFRFUl9SQVRFIChzcGVjdHJ1bSk7Ci0gIGd1aW50IGNoYW5uZWxzID0gR1NUX0FVRElPX0ZJTFRFUl9DSEFOTkVMUyAoc3BlY3RydW0pOwotICBndWludCBicHMgPSBHU1RfQVVESU9fRklMVEVSX0JQUyAoc3BlY3RydW0pOwotICBndWludCBicGYgPSBHU1RfQVVESU9fRklMVEVSX0JQRiAoc3BlY3RydW0pOwotICBndWludCBvdXRwdXRfY2hhbm5lbHMgPSBzcGVjdHJ1bS0+bXVsdGlfY2hhbm5lbCA/IGNoYW5uZWxzIDogMTsKLSAgZ3VpbnQgYzsKLSAgZ2Zsb2F0IG1heF92YWx1ZSA9ICgxVUwgPDwgKChicHMgPDwgMykgLSAxKSkgLSAxOwotICBndWludCBiYW5kcyA9IHNwZWN0cnVtLT5iYW5kczsKLSAgZ3VpbnQgbmZmdCA9IDIgKiBiYW5kcyAtIDI7Ci0gIGd1aW50IGlucHV0X3BvczsKLSAgZ2Zsb2F0ICppbnB1dDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGNvbnN0IGd1aW50OCAqZGF0YTsKLSAgZ3NpemUgc2l6ZTsKLSAgZ3VpbnQgZmZ0X3RvZG8sIG1zZ190b2RvLCBibG9ja19zaXplOwotICBnYm9vbGVhbiBoYXZlX2Z1bGxfaW50ZXJ2YWw7Ci0gIEdzdFNwZWN0cnVtQ2hhbm5lbCAqY2Q7Ci0gIEdzdFNwZWN0cnVtSW5wdXREYXRhIGlucHV0X2RhdGE7Ci0KLSAgZ19tdXRleF9sb2NrICgmc3BlY3RydW0tPmxvY2spOwotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIHNpemUgPSBtYXAuc2l6ZTsKLQotICBHU1RfTE9HX09CSkVDVCAoc3BlY3RydW0sICJpbnB1dCBzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgc2l6ZSk7Ci0KLSAgaWYgKEdTVF9CVUZGRVJfSVNfRElTQ09OVCAoYnVmZmVyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNwZWN0cnVtLCAiRGlzY29udGludWl0eSBkZXRlY3RlZCAtLSBmbHVzaGluZyIpOwotICAgIGdzdF9zcGVjdHJ1bV9mbHVzaCAoc3BlY3RydW0pOwotICB9Ci0KLSAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIEZGVCBjb250ZXh0IHlldCAob3IgaXQgd2FzIHJlc2V0IGR1ZSB0byBwYXJhbWV0ZXIKLSAgICogY2hhbmdlcykgZ2V0IG9uZSBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciBldmVyeXRoaW5nCi0gICAqLwotICBpZiAoc3BlY3RydW0tPmNoYW5uZWxfZGF0YSA9PSBOVUxMKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3BlY3RydW0sICJhbGxvY2F0aW5nIGZvciBiYW5kcyAldSIsIGJhbmRzKTsKLQotICAgIGdzdF9zcGVjdHJ1bV9hbGxvY19jaGFubmVsX2RhdGEgKHNwZWN0cnVtKTsKLQotICAgIC8qIG51bWJlciBvZiBzYW1wbGUgZnJhbWVzIHdlIHByb2Nlc3MgYmVmb3JlIHBvc3RpbmcgYSBtZXNzYWdlCi0gICAgICogaW50ZXJ2YWwgaXMgaW4gbnMgKi8KLSAgICBzcGVjdHJ1bS0+ZnJhbWVzX3Blcl9pbnRlcnZhbCA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3BlY3RydW0tPmludGVydmFsLCByYXRlLCBHU1RfU0VDT05EKTsKLSAgICBzcGVjdHJ1bS0+ZnJhbWVzX3RvZG8gPSBzcGVjdHJ1bS0+ZnJhbWVzX3Blcl9pbnRlcnZhbDsKLSAgICAvKiByb3VuZGluZyBlcnJvciBmb3IgZnJhbWVzX3Blcl9pbnRlcnZhbCBpbiBucywKLSAgICAgKiBhZ2dyZWdhdGVkIGl0IGluIGFjY3VtdWxhdGVkX2Vycm9yICovCi0gICAgc3BlY3RydW0tPmVycm9yX3Blcl9pbnRlcnZhbCA9IChzcGVjdHJ1bS0+aW50ZXJ2YWwgKiByYXRlKSAlIEdTVF9TRUNPTkQ7Ci0gICAgaWYgKHNwZWN0cnVtLT5mcmFtZXNfcGVyX2ludGVydmFsID09IDApCi0gICAgICBzcGVjdHJ1bS0+ZnJhbWVzX3Blcl9pbnRlcnZhbCA9IDE7Ci0KLSAgICBHU1RfSU5GT19PQkpFQ1QgKHNwZWN0cnVtLCAiaW50ZXJ2YWwgJSIgR1NUX1RJTUVfRk9STUFUICIsIGZwaSAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIsIGVycm9yICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3BlY3RydW0tPmludGVydmFsKSwgc3BlY3RydW0tPmZyYW1lc19wZXJfaW50ZXJ2YWwsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHNwZWN0cnVtLT5lcnJvcl9wZXJfaW50ZXJ2YWwpKTsKLQotICAgIHNwZWN0cnVtLT5pbnB1dF9wb3MgPSAwOwotCi0gICAgZ3N0X3NwZWN0cnVtX2ZsdXNoIChzcGVjdHJ1bSk7Ci0gIH0KLQotICBpZiAoc3BlY3RydW0tPm51bV9mcmFtZXMgPT0gMCkKLSAgICBzcGVjdHJ1bS0+bWVzc2FnZV90cyA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpOwotCi0gIGlucHV0X3BvcyA9IHNwZWN0cnVtLT5pbnB1dF9wb3M7Ci0gIGlucHV0X2RhdGEgPSBzcGVjdHJ1bS0+aW5wdXRfZGF0YTsKLQotICB3aGlsZSAoc2l6ZSA+PSBicGYpIHsKLSAgICAvKiBydW4gaW5wdXRfZGF0YSBmb3IgYSBjaHVuayBvZiBkYXRhICovCi0gICAgZmZ0X3RvZG8gPSBuZmZ0IC0gKHNwZWN0cnVtLT5udW1fZnJhbWVzICUgbmZmdCk7Ci0gICAgbXNnX3RvZG8gPSBzcGVjdHJ1bS0+ZnJhbWVzX3RvZG8gLSBzcGVjdHJ1bS0+bnVtX2ZyYW1lczsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3BlY3RydW0sCi0gICAgICAgICJtZXNzYWdlIGZyYW1lcyB0b2RvOiAldSwgZmZ0IGZyYW1lcyB0b2RvOiAldSwgaW5wdXQgZnJhbWVzICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFULCBtc2dfdG9kbywgZmZ0X3RvZG8sIChzaXplIC8gYnBmKSk7Ci0gICAgYmxvY2tfc2l6ZSA9IG1zZ190b2RvOwotICAgIGlmIChibG9ja19zaXplID4gKHNpemUgLyBicGYpKQotICAgICAgYmxvY2tfc2l6ZSA9IChzaXplIC8gYnBmKTsKLSAgICBpZiAoYmxvY2tfc2l6ZSA+IGZmdF90b2RvKQotICAgICAgYmxvY2tfc2l6ZSA9IGZmdF90b2RvOwotCi0gICAgZm9yIChjID0gMDsgYyA8IG91dHB1dF9jaGFubmVsczsgYysrKSB7Ci0gICAgICBjZCA9ICZzcGVjdHJ1bS0+Y2hhbm5lbF9kYXRhW2NdOwotICAgICAgaW5wdXQgPSBjZC0+aW5wdXQ7Ci0gICAgICAvKiBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lcyBpbnRvIG91ciByaW5nYnVmZmVycyAqLwotICAgICAgaW5wdXRfZGF0YSAoZGF0YSArIGMgKiBicHMsIGlucHV0LCBibG9ja19zaXplLCBjaGFubmVscywgbWF4X3ZhbHVlLAotICAgICAgICAgIGlucHV0X3BvcywgbmZmdCk7Ci0gICAgfQotICAgIGRhdGEgKz0gYmxvY2tfc2l6ZSAqIGJwZjsKLSAgICBzaXplIC09IGJsb2NrX3NpemUgKiBicGY7Ci0gICAgaW5wdXRfcG9zID0gKGlucHV0X3BvcyArIGJsb2NrX3NpemUpICUgbmZmdDsKLSAgICBzcGVjdHJ1bS0+bnVtX2ZyYW1lcyArPSBibG9ja19zaXplOwotCi0gICAgaGF2ZV9mdWxsX2ludGVydmFsID0gKHNwZWN0cnVtLT5udW1fZnJhbWVzID09IHNwZWN0cnVtLT5mcmFtZXNfdG9kbyk7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoc3BlY3RydW0sCi0gICAgICAgICJzaXplOiAlIiBHX0dTSVpFX0ZPUk1BVCAiLCBkby1mZnQgPSAlZCwgZG8tbWVzc2FnZSA9ICVkIiwgc2l6ZSwKLSAgICAgICAgKHNwZWN0cnVtLT5udW1fZnJhbWVzICUgbmZmdCA9PSAwKSwgaGF2ZV9mdWxsX2ludGVydmFsKTsKLQotICAgIC8qIElmIHdlIGhhdmUgZW5vdWdoIGZyYW1lcyBmb3IgYW4gRkZUIG9yIHdlIGhhdmUgYWxsIGZyYW1lcyByZXF1aXJlZCBmb3IKLSAgICAgKiB0aGUgaW50ZXJ2YWwgYW5kIHdlIGhhdmVuJ3QgcnVuIGEgRkZULCB0aGVuIHJ1biBhbiBGRlQgKi8KLSAgICBpZiAoKHNwZWN0cnVtLT5udW1fZnJhbWVzICUgbmZmdCA9PSAwKSB8fAotICAgICAgICAoaGF2ZV9mdWxsX2ludGVydmFsICYmICFzcGVjdHJ1bS0+bnVtX2ZmdCkpIHsKLSAgICAgIGZvciAoYyA9IDA7IGMgPCBvdXRwdXRfY2hhbm5lbHM7IGMrKykgewotICAgICAgICBjZCA9ICZzcGVjdHJ1bS0+Y2hhbm5lbF9kYXRhW2NdOwotICAgICAgICBnc3Rfc3BlY3RydW1fcnVuX2ZmdCAoc3BlY3RydW0sIGNkLCBpbnB1dF9wb3MpOwotICAgICAgfQotICAgICAgc3BlY3RydW0tPm51bV9mZnQrKzsKLSAgICB9Ci0KLSAgICAvKiBEbyB3ZSBoYXZlIHRoZSBGRlRzIGZvciBvbmUgaW50ZXJ2YWw/ICovCi0gICAgaWYgKGhhdmVfZnVsbF9pbnRlcnZhbCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3BlY3RydW0sICJuZmZ0OiAldSBmcmFtZXM6ICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICAgICAiIGZwaTogJSIgR19HVUlOVDY0X0ZPUk1BVCAiIGVycm9yOiAlIiBHU1RfVElNRV9GT1JNQVQsIG5mZnQsCi0gICAgICAgICAgc3BlY3RydW0tPm51bV9mcmFtZXMsIHNwZWN0cnVtLT5mcmFtZXNfcGVyX2ludGVydmFsLAotICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHNwZWN0cnVtLT5hY2N1bXVsYXRlZF9lcnJvcikpOwotCi0gICAgICBzcGVjdHJ1bS0+ZnJhbWVzX3RvZG8gPSBzcGVjdHJ1bS0+ZnJhbWVzX3Blcl9pbnRlcnZhbDsKLSAgICAgIGlmIChzcGVjdHJ1bS0+YWNjdW11bGF0ZWRfZXJyb3IgPj0gR1NUX1NFQ09ORCkgewotICAgICAgICBzcGVjdHJ1bS0+YWNjdW11bGF0ZWRfZXJyb3IgLT0gR1NUX1NFQ09ORDsKLSAgICAgICAgc3BlY3RydW0tPmZyYW1lc190b2RvKys7Ci0gICAgICB9Ci0gICAgICBzcGVjdHJ1bS0+YWNjdW11bGF0ZWRfZXJyb3IgKz0gc3BlY3RydW0tPmVycm9yX3Blcl9pbnRlcnZhbDsKLQotICAgICAgaWYgKHNwZWN0cnVtLT5wb3N0X21lc3NhZ2VzKSB7Ci0gICAgICAgIEdzdE1lc3NhZ2UgKm07Ci0KLSAgICAgICAgZm9yIChjID0gMDsgYyA8IG91dHB1dF9jaGFubmVsczsgYysrKSB7Ci0gICAgICAgICAgY2QgPSAmc3BlY3RydW0tPmNoYW5uZWxfZGF0YVtjXTsKLSAgICAgICAgICBnc3Rfc3BlY3RydW1fcHJlcGFyZV9tZXNzYWdlX2RhdGEgKHNwZWN0cnVtLCBjZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtID0gZ3N0X3NwZWN0cnVtX21lc3NhZ2VfbmV3IChzcGVjdHJ1bSwgc3BlY3RydW0tPm1lc3NhZ2VfdHMsCi0gICAgICAgICAgICBzcGVjdHJ1bS0+aW50ZXJ2YWwpOwotCi0gICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlQgKHNwZWN0cnVtKSwgbSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3BlY3RydW0tPm1lc3NhZ2VfdHMpKQotICAgICAgICBzcGVjdHJ1bS0+bWVzc2FnZV90cyArPQotICAgICAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcGVjdHJ1bS0+bnVtX2ZyYW1lcywgR1NUX1NFQ09ORCwgcmF0ZSk7Ci0KLSAgICAgIGZvciAoYyA9IDA7IGMgPCBvdXRwdXRfY2hhbm5lbHM7IGMrKykgewotICAgICAgICBjZCA9ICZzcGVjdHJ1bS0+Y2hhbm5lbF9kYXRhW2NdOwotICAgICAgICBnc3Rfc3BlY3RydW1fcmVzZXRfbWVzc2FnZV9kYXRhIChzcGVjdHJ1bSwgY2QpOwotICAgICAgfQotICAgICAgc3BlY3RydW0tPm51bV9mcmFtZXMgPSAwOwotICAgICAgc3BlY3RydW0tPm51bV9mZnQgPSAwOwotICAgIH0KLSAgfQotCi0gIHNwZWN0cnVtLT5pbnB1dF9wb3MgPSBpbnB1dF9wb3M7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ19tdXRleF91bmxvY2sgKCZzcGVjdHJ1bS0+bG9jayk7Ci0KLSAgZ19hc3NlcnQgKHNpemUgPT0gMCk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic3BlY3RydW0iLCBHU1RfUkFOS19OT05FLAotICAgICAgR1NUX1RZUEVfU1BFQ1RSVU0pOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgc3BlY3RydW0sCi0gICAgIlJ1biBhbiBGRlQgb24gdGhlIGF1ZGlvIHNpZ25hbCwgb3V0cHV0IHNwZWN0cnVtIGRhdGEiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L3NwZWN0cnVtL2dzdHNwZWN0cnVtLmggYi9nc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlN2U4YS4uMDAwMDAwMAotLS0gYS9nc3Qvc3BlY3RydW0vZ3N0c3BlY3RydW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9TUEVDVFJVTV9IX18KLSNkZWZpbmUgX19HU1RfU1BFQ1RSVU1fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvZmlsdGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2ZmdC9nc3RmZnRmMzIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1NQRUNUUlVNICAgICAgICAgICAgKGdzdF9zcGVjdHJ1bV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfU1BFQ1RSVU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TUEVDVFJVTSxHc3RTcGVjdHJ1bSkpCi0jZGVmaW5lIEdTVF9JU19TUEVDVFJVTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1NQRUNUUlVNKSkKLSNkZWZpbmUgR1NUX1NQRUNUUlVNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgR1NUX1RZUEVfU1BFQ1RSVU0sR3N0U3BlY3RydW1DbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TUEVDVFJVTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIEdTVF9UWVBFX1NQRUNUUlVNKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGVjdHJ1bSBHc3RTcGVjdHJ1bTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RTcGVjdHJ1bUNsYXNzIEdzdFNwZWN0cnVtQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3BlY3RydW1DaGFubmVsIEdzdFNwZWN0cnVtQ2hhbm5lbDsKLQotdHlwZWRlZiB2b2lkICgqR3N0U3BlY3RydW1JbnB1dERhdGEpKGNvbnN0IGd1aW50OCAqIGluLCBnZmxvYXQgKiBvdXQsCi0gICAgZ3VpbnQgbGVuLCBndWludCBjaGFubmVscywgZ2Zsb2F0IG1heF92YWx1ZSwgZ3VpbnQgb3AsIGd1aW50IG5mZnQpOwotCi1zdHJ1Y3QgX0dzdFNwZWN0cnVtQ2hhbm5lbAotewotICBnZmxvYXQgKmlucHV0OwotICBnZmxvYXQgKmlucHV0X3RtcDsKLSAgR3N0RkZURjMyQ29tcGxleCAqZnJlcWRhdGE7Ci0gIGdmbG9hdCAqc3BlY3RfbWFnbml0dWRlOyAgICAgIC8qIGFjY3VtdWxhdGVkIG1hbmdpdHVkZSBhbmQgcGhhc2UgKi8KLSAgZ2Zsb2F0ICpzcGVjdF9waGFzZTsgICAgICAgICAgLyogd2lsbCBiZSBzY2FsZWQgYnkgbnVtX2ZmdCBiZWZvcmUgc2VuZGluZyAqLwotICBHc3RGRlRGMzIgKmZmdF9jdHg7Ci19OwotCi1zdHJ1Y3QgX0dzdFNwZWN0cnVtCi17Ci0gIEdzdEF1ZGlvRmlsdGVyIHBhcmVudDsKLQotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdib29sZWFuIHBvc3RfbWVzc2FnZXM7ICAgICAgIC8qIHdoZXRoZXIgb3Igbm90IHRvIHBvc3QgbWVzc2FnZXMgKi8KLSAgZ2Jvb2xlYW4gbWVzc2FnZV9tYWduaXR1ZGU7Ci0gIGdib29sZWFuIG1lc3NhZ2VfcGhhc2U7Ci0gIGd1aW50NjQgaW50ZXJ2YWw7ICAgICAgICAgICAgIC8qIGhvdyBtYW55IG5hbm9zZWNvbmRzIGJldHdlZW4gZW1pdHMgKi8KLSAgZ3VpbnQ2NCBmcmFtZXNfcGVyX2ludGVydmFsOyAgLyogaG93IG1hbnkgZnJhbWVzIHBlciBpbnRlcnZhbCAqLwotICBndWludDY0IGZyYW1lc190b2RvOwotICBndWludCBiYW5kczsgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygc3BlY3RydW0gYmFuZHMgKi8KLSAgZ2ludCB0aHJlc2hvbGQ7ICAgICAgICAgICAgICAgLyogZW5lcmd5IGxldmVsIHRyZXNob2xkICovCi0gIGdib29sZWFuIG11bHRpX2NoYW5uZWw7ICAgICAgIC8qIHNlbmQgc2VwYXJhdGUgY2hhbm5lbCByZXN1bHRzICovCi0KLSAgZ3VpbnQ2NCBudW1fZnJhbWVzOyAgICAgICAgICAgLyogZnJhbWUgY291bnQgKDEgc2FtcGxlIHBlciBjaGFubmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaW5jZSBsYXN0IGVtaXQgKi8KLSAgZ3VpbnQ2NCBudW1fZmZ0OyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIEZGVHMgc2luY2UgbGFzdCBlbWl0ICovCi0gIEdzdENsb2NrVGltZSBtZXNzYWdlX3RzOyAgICAgIC8qIHN0YXJ0dGltZSBmb3IgbmV4dCBtZXNzYWdlICovCi0KLSAgLyogPHByaXZhdGU+ICovCi0gIEdzdFNwZWN0cnVtQ2hhbm5lbCAqY2hhbm5lbF9kYXRhOwotICBndWludCBudW1fY2hhbm5lbHM7Ci0KLSAgZ3VpbnQgaW5wdXRfcG9zOwotICBndWludDY0IGVycm9yX3Blcl9pbnRlcnZhbDsKLSAgZ3VpbnQ2NCBhY2N1bXVsYXRlZF9lcnJvcjsKLQotICBHTXV0ZXggbG9jazsKLQotICBHc3RTcGVjdHJ1bUlucHV0RGF0YSBpbnB1dF9kYXRhOwotfTsKLQotc3RydWN0IF9Hc3RTcGVjdHJ1bUNsYXNzCi17Ci0gIEdzdEF1ZGlvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3NwZWN0cnVtX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NQRUNUUlVNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3VkcC9NYWtlZmlsZS5hbSBiL2dzdC91ZHAvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NTc5Y2QuLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHVkcC5sYQotCi1saWJnc3R1ZHBfbGFfU09VUkNFUyA9IGdzdHVkcC5jIGdzdHVkcHNyYy5jIGdzdHVkcHNpbmsuYyBnc3RtdWx0aXVkcHNpbmsuYyBnc3RkeW51ZHBzaW5rLmMgZ3N0dWRwbmV0dXRpbHMuYwotCi1saWJnc3R1ZHBfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX05FVF9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHSU9fQ0ZMQUdTKQotbGliZ3N0dWRwX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX05FVF9MSUJTKSAkKEdJT19MSUJTKQotbGliZ3N0dWRwX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHVkcHNpbmsuaCBnc3R1ZHBzcmMuaCBnc3RtdWx0aXVkcHNpbmsuaCBnc3RkeW51ZHBzaW5rLmggZ3N0dWRwbmV0dXRpbHMuaAotCi1FWFRSQV9ESVNUID0gUkVBRE1FCi0KLUNMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpCmRpZmYgLS1naXQgYS9nc3QvdWRwL01ha2VmaWxlLmluIGIvZ3N0L3VkcC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY5YzkzMC4uMDAwMDAwMAotLS0gYS9nc3QvdWRwL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTU2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC91ZHAKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3R1ZHBfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHVkcF9sYV9PQkpFQ1RTID0gbGliZ3N0dWRwX2xhLWdzdHVkcC5sbyBcCi0JbGliZ3N0dWRwX2xhLWdzdHVkcHNyYy5sbyBsaWJnc3R1ZHBfbGEtZ3N0dWRwc2luay5sbyBcCi0JbGliZ3N0dWRwX2xhLWdzdG11bHRpdWRwc2luay5sbyBsaWJnc3R1ZHBfbGEtZ3N0ZHludWRwc2luay5sbyBcCi0JbGliZ3N0dWRwX2xhLWdzdHVkcG5ldHV0aWxzLmxvCi1saWJnc3R1ZHBfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0dWRwX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3R1ZHBfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3R1ZHBfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0dWRwX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHVkcF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R1ZHBfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHVkcC5sYQotbGliZ3N0dWRwX2xhX1NPVVJDRVMgPSBnc3R1ZHAuYyBnc3R1ZHBzcmMuYyBnc3R1ZHBzaW5rLmMgZ3N0bXVsdGl1ZHBzaW5rLmMgZ3N0ZHludWRwc2luay5jIGdzdHVkcG5ldHV0aWxzLmMKLWxpYmdzdHVkcF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfTkVUX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1saWJnc3R1ZHBfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0JBU0VfTElCUykgJChHU1RfTkVUX0xJQlMpICQoR0lPX0xJQlMpCi1saWJnc3R1ZHBfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0dWRwX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdHVkcHNpbmsuaCBnc3R1ZHBzcmMuaCBnc3RtdWx0aXVkcHNpbmsuaCBnc3RkeW51ZHBzaW5rLmggZ3N0dWRwbmV0dXRpbHMuaAotRVhUUkFfRElTVCA9IFJFQURNRQotQ0xFQU5GSUxFUyA9ICQoQlVJTFRfU09VUkNFUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC91ZHAvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3VkcC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHVkcC5sYTogJChsaWJnc3R1ZHBfbGFfT0JKRUNUUykgJChsaWJnc3R1ZHBfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHVkcF9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0dWRwX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3R1ZHBfbGFfT0JKRUNUUykgJChsaWJnc3R1ZHBfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0ZHludWRwc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3RtdWx0aXVkcHNpbmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0dWRwLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdHVkcG5ldHV0aWxzLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdHVkcHNpbmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0dWRwc3JjLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R1ZHBfbGEtZ3N0dWRwLmxvOiBnc3R1ZHAuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHVkcF9sYS1nc3R1ZHAubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3R1ZHAuVHBvIC1jIC1vIGxpYmdzdHVkcF9sYS1nc3R1ZHAubG8gYHRlc3QgLWYgJ2dzdHVkcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R1ZHAuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdHVkcC5UcG8gJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3R1ZHAuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dWRwLmMnIG9iamVjdD0nbGliZ3N0dWRwX2xhLWdzdHVkcC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dWRwX2xhLWdzdHVkcC5sbyBgdGVzdCAtZiAnZ3N0dWRwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHVkcC5jCi0KLWxpYmdzdHVkcF9sYS1nc3R1ZHBzcmMubG86IGdzdHVkcHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dWRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHVkcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dWRwX2xhLWdzdHVkcHNyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdHVkcHNyYy5UcG8gLWMgLW8gbGliZ3N0dWRwX2xhLWdzdHVkcHNyYy5sbyBgdGVzdCAtZiAnZ3N0dWRwc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHVkcHNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0dWRwc3JjLlRwbyAkKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdHVkcHNyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R1ZHBzcmMuYycgb2JqZWN0PSdsaWJnc3R1ZHBfbGEtZ3N0dWRwc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dWRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHVkcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R1ZHBfbGEtZ3N0dWRwc3JjLmxvIGB0ZXN0IC1mICdnc3R1ZHBzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dWRwc3JjLmMKLQotbGliZ3N0dWRwX2xhLWdzdHVkcHNpbmsubG86IGdzdHVkcHNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHVkcF9sYS1nc3R1ZHBzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0dWRwc2luay5UcG8gLWMgLW8gbGliZ3N0dWRwX2xhLWdzdHVkcHNpbmsubG8gYHRlc3QgLWYgJ2dzdHVkcHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dWRwc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0dWRwc2luay5UcG8gJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3R1ZHBzaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHVkcHNpbmsuYycgb2JqZWN0PSdsaWJnc3R1ZHBfbGEtZ3N0dWRwc2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dWRwX2xhLWdzdHVkcHNpbmsubG8gYHRlc3QgLWYgJ2dzdHVkcHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dWRwc2luay5jCi0KLWxpYmdzdHVkcF9sYS1nc3RtdWx0aXVkcHNpbmsubG86IGdzdG11bHRpdWRwc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dWRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHVkcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dWRwX2xhLWdzdG11bHRpdWRwc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdG11bHRpdWRwc2luay5UcG8gLWMgLW8gbGliZ3N0dWRwX2xhLWdzdG11bHRpdWRwc2luay5sbyBgdGVzdCAtZiAnZ3N0bXVsdGl1ZHBzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG11bHRpdWRwc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0bXVsdGl1ZHBzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdG11bHRpdWRwc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RtdWx0aXVkcHNpbmsuYycgb2JqZWN0PSdsaWJnc3R1ZHBfbGEtZ3N0bXVsdGl1ZHBzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dWRwX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHVkcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R1ZHBfbGEtZ3N0bXVsdGl1ZHBzaW5rLmxvIGB0ZXN0IC1mICdnc3RtdWx0aXVkcHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0bXVsdGl1ZHBzaW5rLmMKLQotbGliZ3N0dWRwX2xhLWdzdGR5bnVkcHNpbmsubG86IGdzdGR5bnVkcHNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHVkcF9sYS1nc3RkeW51ZHBzaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0ZHludWRwc2luay5UcG8gLWMgLW8gbGliZ3N0dWRwX2xhLWdzdGR5bnVkcHNpbmsubG8gYHRlc3QgLWYgJ2dzdGR5bnVkcHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZHludWRwc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R1ZHBfbGEtZ3N0ZHludWRwc2luay5UcG8gJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3RkeW51ZHBzaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGR5bnVkcHNpbmsuYycgb2JqZWN0PSdsaWJnc3R1ZHBfbGEtZ3N0ZHludWRwc2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dWRwX2xhLWdzdGR5bnVkcHNpbmsubG8gYHRlc3QgLWYgJ2dzdGR5bnVkcHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZHludWRwc2luay5jCi0KLWxpYmdzdHVkcF9sYS1nc3R1ZHBuZXR1dGlscy5sbzogZ3N0dWRwbmV0dXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHVkcF9sYS1nc3R1ZHBuZXR1dGlscy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dWRwX2xhLWdzdHVkcG5ldHV0aWxzLlRwbyAtYyAtbyBsaWJnc3R1ZHBfbGEtZ3N0dWRwbmV0dXRpbHMubG8gYHRlc3QgLWYgJ2dzdHVkcG5ldHV0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHVkcG5ldHV0aWxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3R1ZHBuZXR1dGlscy5UcG8gJChERVBESVIpL2xpYmdzdHVkcF9sYS1nc3R1ZHBuZXR1dGlscy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R1ZHBuZXR1dGlscy5jJyBvYmplY3Q9J2xpYmdzdHVkcF9sYS1nc3R1ZHBuZXR1dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHVkcF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R1ZHBfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dWRwX2xhLWdzdHVkcG5ldHV0aWxzLmxvIGB0ZXN0IC1mICdnc3R1ZHBuZXR1dGlscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R1ZHBuZXR1dGlscy5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3VkcC9SRUFETUUgYi9nc3QvdWRwL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3Y2ViYi4uMDAwMDAwMAotLS0gYS9nc3QvdWRwL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotKiBXaGF0IGlzIFVEUCBzcmMvc2luaz8KLQotSXQgaXMgYSBzZXQgb2YgZWxlbWVudCB0byB0cmFuc2ZlciBkYXRhIHVzaW5nIFVEUCwgbm90aGluZyBtb3JlLCBub3RoaW5nIGxlc3MuCi1JdHMgbWFpbiBwdXJwb3NlIGlzIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBSVFAgYnV0IHRoZXkgYXJlIGtlcHQgYXMKLXNlcGFyYXRlIGVsZW1lbnRzIGJlY2F1c2Ugd2UgY2FuLgotCi0KZGlmZiAtLWdpdCBhL2dzdC91ZHAvZ3N0ZHludWRwc2luay5jIGIvZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZTZkNzUuLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBQaGlsaXBwZSBLaGFsYWYgPGJ1cmdlckBzcGVlZHkub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gTm9raWEgQ29ycG9yYXRpb24gPGthaS52ZWhtYW5lbkBub2tpYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBKb25pIFZhbHRhbmVuIDxqb25pLnZhbHRhbmVuQG1vdmlhbC5maT4KLSAqIENvcHlyaWdodCAoQykgPDIwMTI+IENvbGxhYm9yYSBMdGQuCi0gKiAgIEF1dGhvcjogU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgImdzdGR5bnVkcHNpbmsuaCIKLQotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZHludWRwc2lua19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCAoZHludWRwc2lua19kZWJ1ZykKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotLyogRHluVURQU2luayBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIG1ldGhvZHMgKi8KLSAgU0lHTkFMX0dFVF9TVEFUUywKLQotICAvKiBzaWduYWxzICovCi0KLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBVRFBfREVGQVVMVF9TT0NLRVQJCU5VTEwKLSNkZWZpbmUgVURQX0RFRkFVTFRfQ0xPU0VfU09DS0VUCVRSVUUKLSNkZWZpbmUgVURQX0RFRkFVTFRfQklORF9BRERSRVNTCU5VTEwKLSNkZWZpbmUgVURQX0RFRkFVTFRfQklORF9QT1JUICAgCTAKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfU09DS0VULAotICBQUk9QX1NPQ0tFVF9WNiwKLSAgUFJPUF9DTE9TRV9TT0NLRVQsCi0gIFBST1BfQklORF9BRERSRVNTLAotICBQUk9QX0JJTkRfUE9SVAotfTsKLQotc3RhdGljIHZvaWQgZ3N0X2R5bnVkcHNpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfZHludWRwc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogc2luaywKLSAgICBHc3RCdWZmZXIgKiBidWZmZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9keW51ZHBzaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogYnNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9keW51ZHBzaW5rX3N0YXJ0IChHc3RCYXNlU2luayAqIGJzaW5rKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZHludWRwc2lua191bmxvY2sgKEdzdEJhc2VTaW5rICogYnNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9keW51ZHBzaW5rX3VubG9ja19zdG9wIChHc3RCYXNlU2luayAqIGJzaW5rKTsKLQotc3RhdGljIHZvaWQgZ3N0X2R5bnVkcHNpbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2R5bnVkcHNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIEdzdFN0cnVjdHVyZSAqZ3N0X2R5bnVkcHNpbmtfZ2V0X3N0YXRzIChHc3REeW5VRFBTaW5rICogc2luaywKLSAgICBjb25zdCBnY2hhciAqIGhvc3QsIGdpbnQgcG9ydCk7Ci0KLXN0YXRpYyBndWludCBnc3RfZHludWRwc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OwotCi0jZGVmaW5lIGdzdF9keW51ZHBzaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdER5blVEUFNpbmssIGdzdF9keW51ZHBzaW5rLCBHU1RfVFlQRV9CQVNFX1NJTkspOwotCi1zdGF0aWMgdm9pZAotZ3N0X2R5bnVkcHNpbmtfY2xhc3NfaW5pdCAoR3N0RHluVURQU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU2lua0NsYXNzICpnc3RiYXNlc2lua19jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzID0gKEdzdEJhc2VTaW5rQ2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X2R5bnVkcHNpbmtfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZHludWRwc2lua19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X2R5bnVkcHNpbmtfZmluYWxpemU7Ci0KLSAgZ3N0X2R5bnVkcHNpbmtfc2lnbmFsc1tTSUdOQUxfR0VUX1NUQVRTXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJnZXQtc3RhdHMiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04sCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdER5blVEUFNpbmtDbGFzcywgZ2V0X3N0YXRzKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCBHU1RfVFlQRV9TVFJVQ1RVUkUsIDIsCi0gICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfSU5UKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NPQ0tFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJzb2NrZXQiLCAiU29ja2V0IiwKLSAgICAgICAgICAiU29ja2V0IHRvIHVzZSBmb3IgVURQIHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKSIsCi0gICAgICAgICAgR19UWVBFX1NPQ0tFVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU09DS0VUX1Y2LAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInNvY2tldC12NiIsICJTb2NrZXQgSVB2NiIsCi0gICAgICAgICAgIlNvY2tldCB0byB1c2UgZm9yIFVEUHY2IHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKSIsCi0gICAgICAgICAgR19UWVBFX1NPQ0tFVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0xPU0VfU09DS0VULAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJjbG9zZS1zb2NrZXQiLCAiQ2xvc2Ugc29ja2V0IiwKLSAgICAgICAgICAiQ2xvc2Ugc29ja2V0IGlmIHBhc3NlZCBhcyBwcm9wZXJ0eSBvbiBzdGF0ZSBjaGFuZ2UiLAotICAgICAgICAgIFVEUF9ERUZBVUxUX0NMT1NFX1NPQ0tFVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CSU5EX0FERFJFU1MsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiYmluZC1hZGRyZXNzIiwgIkJpbmQgQWRkcmVzcyIsCi0gICAgICAgICAgIkFkZHJlc3MgdG8gYmluZCB0aGUgc29ja2V0IHRvIiwgVURQX0RFRkFVTFRfQklORF9BRERSRVNTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JJTkRfUE9SVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJiaW5kLXBvcnQiLCAiQmluZCBQb3J0IiwKLSAgICAgICAgICAiUG9ydCB0byBiaW5kIHRoZSBzb2NrZXQgdG8iLCAwLCBHX01BWFVJTlQxNiwKLSAgICAgICAgICBVRFBfREVGQVVMVF9CSU5EX1BPUlQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlVEUCBwYWNrZXQgc2VuZGVyIiwKLSAgICAgICJTaW5rL05ldHdvcmsiLAotICAgICAgIlNlbmQgZGF0YSBvdmVyIHRoZSBuZXR3b3JrIHZpYSBVRFAgd2l0aCBwYWNrZXQgZGVzdGluYXRpb25zIHBpY2tlZCB1cCAiCi0gICAgICAiZHluYW1pY2FsbHkgZnJvbSBtZXRhIG9uIHRoZSBidWZmZXJzIHBhc3NlZCIsCi0gICAgICAiUGhpbGlwcGUgS2hhbGFmIDxidXJnZXJAc3BlZWR5Lm9yZz4iKTsKLQotICBnc3RiYXNlc2lua19jbGFzcy0+cmVuZGVyID0gZ3N0X2R5bnVkcHNpbmtfcmVuZGVyOwotICBnc3RiYXNlc2lua19jbGFzcy0+c3RhcnQgPSBnc3RfZHludWRwc2lua19zdGFydDsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnN0b3AgPSBnc3RfZHludWRwc2lua19zdG9wOwotICBnc3RiYXNlc2lua19jbGFzcy0+dW5sb2NrID0gZ3N0X2R5bnVkcHNpbmtfdW5sb2NrOwotICBnc3RiYXNlc2lua19jbGFzcy0+dW5sb2NrX3N0b3AgPSBnc3RfZHludWRwc2lua191bmxvY2tfc3RvcDsKLQotICBrbGFzcy0+Z2V0X3N0YXRzID0gZ3N0X2R5bnVkcHNpbmtfZ2V0X3N0YXRzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkeW51ZHBzaW5rX2RlYnVnLCAiZHludWRwc2luayIsIDAsICJVRFAgc2luayIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R5bnVkcHNpbmtfaW5pdCAoR3N0RHluVURQU2luayAqIHNpbmspCi17Ci0gIHNpbmstPnNvY2tldCA9IFVEUF9ERUZBVUxUX1NPQ0tFVDsKLSAgc2luay0+c29ja2V0X3Y2ID0gVURQX0RFRkFVTFRfU09DS0VUOwotICBzaW5rLT5jbG9zZV9zb2NrZXQgPSBVRFBfREVGQVVMVF9DTE9TRV9TT0NLRVQ7Ci0gIHNpbmstPmV4dGVybmFsX3NvY2tldCA9IEZBTFNFOwotICBzaW5rLT5iaW5kX2FkZHJlc3MgPSBVRFBfREVGQVVMVF9CSU5EX0FERFJFU1M7Ci0gIHNpbmstPmJpbmRfcG9ydCA9IFVEUF9ERUZBVUxUX0JJTkRfUE9SVDsKLQotICBzaW5rLT51c2VkX3NvY2tldCA9IE5VTEw7Ci0gIHNpbmstPnVzZWRfc29ja2V0X3Y2ID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9keW51ZHBzaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3REeW5VRFBTaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfRFlOVURQU0lOSyAob2JqZWN0KTsKLQotICBpZiAoc2luay0+c29ja2V0KQotICAgIGdfb2JqZWN0X3VucmVmIChzaW5rLT5zb2NrZXQpOwotICBzaW5rLT5zb2NrZXQgPSBOVUxMOwotCi0gIGlmIChzaW5rLT5zb2NrZXRfdjYpCi0gICAgZ19vYmplY3RfdW5yZWYgKHNpbmstPnNvY2tldF92Nik7Ci0gIHNpbmstPnNvY2tldF92NiA9IE5VTEw7Ci0KLSAgaWYgKHNpbmstPnVzZWRfc29ja2V0KQotICAgIGdfb2JqZWN0X3VucmVmIChzaW5rLT51c2VkX3NvY2tldCk7Ci0gIHNpbmstPnVzZWRfc29ja2V0ID0gTlVMTDsKLQotICBpZiAoc2luay0+dXNlZF9zb2NrZXRfdjYpCi0gICAgZ19vYmplY3RfdW5yZWYgKHNpbmstPnVzZWRfc29ja2V0X3Y2KTsKLSAgc2luay0+dXNlZF9zb2NrZXRfdjYgPSBOVUxMOwotCi0gIGdfZnJlZSAoc2luay0+YmluZF9hZGRyZXNzKTsKLSAgc2luay0+YmluZF9hZGRyZXNzID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZHludWRwc2lua19yZW5kZXIgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0RHluVURQU2luayAqc2luazsKLSAgZ3NzaXplIHJldDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdE5ldEFkZHJlc3NNZXRhICptZXRhOwotICBHU29ja2V0QWRkcmVzcyAqYWRkcjsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBHU29ja2V0RmFtaWx5IGZhbWlseTsKLSAgR1NvY2tldCAqc29ja2V0OwotCi0gIG1ldGEgPSBnc3RfYnVmZmVyX2dldF9uZXRfYWRkcmVzc19tZXRhIChidWZmZXIpOwotCi0gIGlmIChtZXRhID09IE5VTEwpIHsKLSAgICBHU1RfREVCVUcgKCJSZWNlaXZlZCBidWZmZXIgd2l0aG91dCBHc3ROZXRBZGRyZXNzTWV0YSwgc2tpcHBpbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICBzaW5rID0gR1NUX0RZTlVEUFNJTksgKGJzaW5rKTsKLQotICAvKiBsZXQncyBnZXQgdGhlIGFkZHJlc3MgZnJvbSB0aGUgbWV0YWRhdGEgKi8KLSAgYWRkciA9IG1ldGEtPmFkZHI7Ci0KLSAgZmFtaWx5ID0gZ19zb2NrZXRfYWRkcmVzc19nZXRfZmFtaWx5IChhZGRyKTsKLSAgaWYgKGZhbWlseSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNiAmJiAhc2luay0+dXNlZF9zb2NrZXRfdjYpCi0gICAgZ290byBpbnZhbGlkX2ZhbWlseTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIEdTVF9ERUJVRyAoImFib3V0IHRvIHNlbmQgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIG1hcC5zaXplKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgewotICAgIGdjaGFyICpob3N0OwotCi0gICAgaG9zdCA9Ci0gICAgICAgIGdfaW5ldF9hZGRyZXNzX3RvX3N0cmluZyAoZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzCi0gICAgICAgIChHX0lORVRfU09DS0VUX0FERFJFU1MgKGFkZHIpKSk7Ci0gICAgR1NUX0RFQlVHICgic2VuZGluZyAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIHRvIGNsaWVudCAlcyBwb3J0ICVkIiwKLSAgICAgICAgbWFwLnNpemUsIGhvc3QsCi0gICAgICAgIGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfcG9ydCAoR19JTkVUX1NPQ0tFVF9BRERSRVNTIChhZGRyKSkpOwotICAgIGdfZnJlZSAoaG9zdCk7Ci0gIH0KLSNlbmRpZgotCi0gIC8qIFNlbGVjdCBzb2NrZXQgdG8gc2VuZCBmcm9tIGZvciB0aGlzIGFkZHJlc3MgKi8KLSAgaWYgKGZhbWlseSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNiB8fCAhc2luay0+dXNlZF9zb2NrZXQpCi0gICAgc29ja2V0ID0gc2luay0+dXNlZF9zb2NrZXRfdjY7Ci0gIGVsc2UKLSAgICBzb2NrZXQgPSBzaW5rLT51c2VkX3NvY2tldDsKLQotICByZXQgPQotICAgICAgZ19zb2NrZXRfc2VuZF90byAoc29ja2V0LCBhZGRyLCAoZ2NoYXIgKikgbWFwLmRhdGEsIG1hcC5zaXplLAotICAgICAgc2luay0+Y2FuY2VsbGFibGUsICZlcnIpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotCi0gIGlmIChyZXQgPCAwKQotICAgIGdvdG8gc2VuZF9lcnJvcjsKLQotICBHU1RfREVCVUcgKCJzZW50ICUiIEdfR1NTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwgcmV0KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLXNlbmRfZXJyb3I6Ci0gIHsKLSAgICBHc3RGbG93UmV0dXJuIGZsb3dfcmV0OwotCi0gICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyAoZXJyLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJzZW5kIGNhbmNlbGxlZCIpOwotICAgICAgZmxvd19yZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBXUklURSwgKE5VTEwpLAotICAgICAgICAgICgic2VuZCBlcnJvcjogJXMiLCBlcnItPm1lc3NhZ2UpKTsKLSAgICAgIGZsb3dfcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIHJldHVybiBmbG93X3JldDsKLSAgfQotaW52YWxpZF9mYW1pbHk6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJpbnZhbGlkIGFkZHJlc3MgZmFtaWx5IChnb3QgJWQpIiwgZmFtaWx5KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9keW51ZHBzaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REeW5VRFBTaW5rICp1ZHBzaW5rOwotCi0gIHVkcHNpbmsgPSBHU1RfRFlOVURQU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU09DS0VUOgotICAgICAgaWYgKHVkcHNpbmstPnNvY2tldCAhPSBOVUxMICYmIHVkcHNpbmstPnNvY2tldCAhPSB1ZHBzaW5rLT51c2VkX3NvY2tldCAmJgotICAgICAgICAgIHVkcHNpbmstPmNsb3NlX3NvY2tldCkgewotICAgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKCFnX3NvY2tldF9jbG9zZSAodWRwc2luay0+c29ja2V0LCAmZXJyKSkgewotICAgICAgICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjbG9zZSBzb2NrZXQgJXA6ICVzIiwgdWRwc2luay0+c29ja2V0LAotICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAodWRwc2luay0+c29ja2V0KQotICAgICAgICBnX29iamVjdF91bnJlZiAodWRwc2luay0+c29ja2V0KTsKLSAgICAgIHVkcHNpbmstPnNvY2tldCA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHICgic2V0dGluZyBzb2NrZXQgdG8gJXAiLCB1ZHBzaW5rLT5zb2NrZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPQ0tFVF9WNjoKLSAgICAgIGlmICh1ZHBzaW5rLT5zb2NrZXRfdjYgIT0gTlVMTAotICAgICAgICAgICYmIHVkcHNpbmstPnNvY2tldF92NiAhPSB1ZHBzaW5rLT51c2VkX3NvY2tldF92NgotICAgICAgICAgICYmIHVkcHNpbmstPmNsb3NlX3NvY2tldCkgewotICAgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKCFnX3NvY2tldF9jbG9zZSAodWRwc2luay0+c29ja2V0X3Y2LCAmZXJyKSkgewotICAgICAgICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjbG9zZSBzb2NrZXQgJXA6ICVzIiwgdWRwc2luay0+c29ja2V0X3Y2LAotICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAodWRwc2luay0+c29ja2V0X3Y2KQotICAgICAgICBnX29iamVjdF91bnJlZiAodWRwc2luay0+c29ja2V0X3Y2KTsKLSAgICAgIHVkcHNpbmstPnNvY2tldF92NiA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHICgic2V0dGluZyBzb2NrZXQgdjYgdG8gJXAiLCB1ZHBzaW5rLT5zb2NrZXRfdjYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMT1NFX1NPQ0tFVDoKLSAgICAgIHVkcHNpbmstPmNsb3NlX3NvY2tldCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSU5EX0FERFJFU1M6Ci0gICAgICBnX2ZyZWUgKHVkcHNpbmstPmJpbmRfYWRkcmVzcyk7Ci0gICAgICB1ZHBzaW5rLT5iaW5kX2FkZHJlc3MgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSU5EX1BPUlQ6Ci0gICAgICB1ZHBzaW5rLT5iaW5kX3BvcnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9keW51ZHBzaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REeW5VRFBTaW5rICp1ZHBzaW5rOwotCi0gIHVkcHNpbmsgPSBHU1RfRFlOVURQU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfU09DS0VUOgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgdWRwc2luay0+c29ja2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TT0NLRVRfVjY6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCB1ZHBzaW5rLT5zb2NrZXRfdjYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMT1NFX1NPQ0tFVDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB1ZHBzaW5rLT5jbG9zZV9zb2NrZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JJTkRfQUREUkVTUzoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHVkcHNpbmstPmJpbmRfYWRkcmVzcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQklORF9QT1JUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdWRwc2luay0+YmluZF9wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9keW51ZHBzaW5rX2NyZWF0ZV9jYW5jZWxsYWJsZSAoR3N0RHluVURQU2luayAqIHNpbmspCi17Ci0gIEdQb2xsRkQgcG9sbGZkOwotCi0gIHNpbmstPmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcgKCk7Ci0gIHNpbmstPm1hZGVfY2FuY2VsX2ZkID0gZ19jYW5jZWxsYWJsZV9tYWtlX3BvbGxmZCAoc2luay0+Y2FuY2VsbGFibGUsICZwb2xsZmQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2R5bnVkcHNpbmtfZnJlZV9jYW5jZWxsYWJsZSAoR3N0RHluVURQU2luayAqIHNpbmspCi17Ci0gIGlmIChzaW5rLT5tYWRlX2NhbmNlbF9mZCkgewotICAgIGdfY2FuY2VsbGFibGVfcmVsZWFzZV9mZCAoc2luay0+Y2FuY2VsbGFibGUpOwotICAgIHNpbmstPm1hZGVfY2FuY2VsX2ZkID0gRkFMU0U7Ci0gIH0KLSAgZ19vYmplY3RfdW5yZWYgKHNpbmstPmNhbmNlbGxhYmxlKTsKLSAgc2luay0+Y2FuY2VsbGFibGUgPSBOVUxMOwotfQotCi0vKiBjcmVhdGUgYSBzb2NrZXQgZm9yIHNlbmRpbmcgdG8gcmVtb3RlIG1hY2hpbmUgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2R5bnVkcHNpbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogYnNpbmspCi17Ci0gIEdzdER5blVEUFNpbmsgKnVkcHNpbms7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICB1ZHBzaW5rID0gR1NUX0RZTlVEUFNJTksgKGJzaW5rKTsKLQotICBnc3RfZHludWRwc2lua19jcmVhdGVfY2FuY2VsbGFibGUgKHVkcHNpbmspOwotCi0gIHVkcHNpbmstPmV4dGVybmFsX3NvY2tldCA9IEZBTFNFOwotCi0gIGlmICh1ZHBzaW5rLT5zb2NrZXQpIHsKLSAgICBpZiAoZ19zb2NrZXRfZ2V0X2ZhbWlseSAodWRwc2luay0+c29ja2V0KSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNikgewotICAgICAgdWRwc2luay0+dXNlZF9zb2NrZXRfdjYgPSBHX1NPQ0tFVCAoZ19vYmplY3RfcmVmICh1ZHBzaW5rLT5zb2NrZXQpKTsKLSAgICAgIHVkcHNpbmstPmV4dGVybmFsX3NvY2tldCA9IFRSVUU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHVkcHNpbmstPnVzZWRfc29ja2V0ID0gR19TT0NLRVQgKGdfb2JqZWN0X3JlZiAodWRwc2luay0+c29ja2V0KSk7Ci0gICAgICB1ZHBzaW5rLT5leHRlcm5hbF9zb2NrZXQgPSBUUlVFOwotICAgIH0KLSAgfQotCi0gIGlmICh1ZHBzaW5rLT5zb2NrZXRfdjYpIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zb2NrZXRfZ2V0X2ZhbWlseSAodWRwc2luay0+c29ja2V0KSAhPQotICAgICAgICBHX1NPQ0tFVF9GQU1JTFlfSVBWNiwgRkFMU0UpOwotCi0gICAgaWYgKHVkcHNpbmstPnVzZWRfc29ja2V0X3Y2Ci0gICAgICAgICYmIHVkcHNpbmstPnVzZWRfc29ja2V0X3Y2ICE9IHVkcHNpbmstPnNvY2tldF92NikgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAodWRwc2luaywKLSAgICAgICAgICAiUHJvdmlkZWQgZGlmZmVyZW50IElQdjYgc29ja2V0cyBpbiBzb2NrZXQgYW5kIHNvY2tldC12NiBwcm9wZXJ0aWVzIik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgdWRwc2luay0+dXNlZF9zb2NrZXRfdjYgPSBHX1NPQ0tFVCAoZ19vYmplY3RfcmVmICh1ZHBzaW5rLT5zb2NrZXRfdjYpKTsKLSAgICB1ZHBzaW5rLT5leHRlcm5hbF9zb2NrZXQgPSBUUlVFOwotICB9Ci0KLSAgaWYgKCF1ZHBzaW5rLT51c2VkX3NvY2tldCAmJiAhdWRwc2luay0+dXNlZF9zb2NrZXRfdjYpIHsKLSAgICBHU29ja2V0QWRkcmVzcyAqYmluZF9hZGRyOwotICAgIEdJbmV0QWRkcmVzcyAqYmluZF9pYWRkcjsKLQotICAgIGlmICh1ZHBzaW5rLT5iaW5kX2FkZHJlc3MpIHsKLSAgICAgIEdTb2NrZXRGYW1pbHkgZmFtaWx5OwotCi0gICAgICBiaW5kX2lhZGRyID0gZ19pbmV0X2FkZHJlc3NfbmV3X2Zyb21fc3RyaW5nICh1ZHBzaW5rLT5iaW5kX2FkZHJlc3MpOwotICAgICAgaWYgKCFiaW5kX2lhZGRyKSB7Ci0gICAgICAgIEdMaXN0ICpyZXN1bHRzOwotICAgICAgICBHUmVzb2x2ZXIgKnJlc29sdmVyOwotCi0gICAgICAgIHJlc29sdmVyID0gZ19yZXNvbHZlcl9nZXRfZGVmYXVsdCAoKTsKLSAgICAgICAgcmVzdWx0cyA9Ci0gICAgICAgICAgICBnX3Jlc29sdmVyX2xvb2t1cF9ieV9uYW1lIChyZXNvbHZlciwgdWRwc2luay0+YmluZF9hZGRyZXNzLAotICAgICAgICAgICAgdWRwc2luay0+Y2FuY2VsbGFibGUsICZlcnIpOwotICAgICAgICBpZiAoIXJlc3VsdHMpIHsKLSAgICAgICAgICBnX29iamVjdF91bnJlZiAocmVzb2x2ZXIpOwotICAgICAgICAgIGdvdG8gbmFtZV9yZXNvbHZlOwotICAgICAgICB9Ci0gICAgICAgIGJpbmRfaWFkZHIgPSBHX0lORVRfQUREUkVTUyAoZ19vYmplY3RfcmVmIChyZXN1bHRzLT5kYXRhKSk7Ci0gICAgICAgIGdfcmVzb2x2ZXJfZnJlZV9hZGRyZXNzZXMgKHJlc3VsdHMpOwotICAgICAgICBnX29iamVjdF91bnJlZiAocmVzb2x2ZXIpOwotICAgICAgfQotCi0gICAgICBiaW5kX2FkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChiaW5kX2lhZGRyLCB1ZHBzaW5rLT5iaW5kX3BvcnQpOwotICAgICAgZ19vYmplY3RfdW5yZWYgKGJpbmRfaWFkZHIpOwotICAgICAgZmFtaWx5ID0gZ19zb2NrZXRfYWRkcmVzc19nZXRfZmFtaWx5IChHX1NPQ0tFVF9BRERSRVNTIChiaW5kX2FkZHIpKTsKLQotICAgICAgaWYgKCh1ZHBzaW5rLT51c2VkX3NvY2tldCA9Ci0gICAgICAgICAgICAgIGdfc29ja2V0X25ldyAoZmFtaWx5LCBHX1NPQ0tFVF9UWVBFX0RBVEFHUkFNLAotICAgICAgICAgICAgICAgICAgR19TT0NLRVRfUFJPVE9DT0xfVURQLCAmZXJyKSkgPT0gTlVMTCkgewotICAgICAgICBnX29iamVjdF91bnJlZiAoYmluZF9hZGRyKTsKLSAgICAgICAgZ290byBub19zb2NrZXQ7Ci0gICAgICB9Ci0KLSAgICAgIGdfc29ja2V0X2JpbmQgKHVkcHNpbmstPnVzZWRfc29ja2V0LCBiaW5kX2FkZHIsIFRSVUUsICZlcnIpOwotICAgICAgaWYgKGVyciAhPSBOVUxMKQotICAgICAgICBnb3RvIGJpbmRfZXJyb3I7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGNyZWF0ZSBzZW5kZXIgc29ja2V0cyBpZiBub25lIGF2YWlsYWJsZSAqLwotICAgICAgaWYgKCh1ZHBzaW5rLT51c2VkX3NvY2tldCA9IGdfc29ja2V0X25ldyAoR19TT0NLRVRfRkFNSUxZX0lQVjQsCi0gICAgICAgICAgICAgICAgICBHX1NPQ0tFVF9UWVBFX0RBVEFHUkFNLCBHX1NPQ0tFVF9QUk9UT0NPTF9VRFAsICZlcnIpKSA9PSBOVUxMKQotICAgICAgICBnb3RvIG5vX3NvY2tldDsKLQotICAgICAgYmluZF9pYWRkciA9IGdfaW5ldF9hZGRyZXNzX25ld19hbnkgKEdfU09DS0VUX0ZBTUlMWV9JUFY0KTsKLSAgICAgIGJpbmRfYWRkciA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19uZXcgKGJpbmRfaWFkZHIsIDApOwotICAgICAgZ19zb2NrZXRfYmluZCAodWRwc2luay0+dXNlZF9zb2NrZXQsIGJpbmRfYWRkciwgVFJVRSwgJmVycik7Ci0gICAgICBnX29iamVjdF91bnJlZiAoYmluZF9hZGRyKTsKLSAgICAgIGdfb2JqZWN0X3VucmVmIChiaW5kX2lhZGRyKTsKLSAgICAgIGlmIChlcnIgIT0gTlVMTCkKLSAgICAgICAgZ290byBiaW5kX2Vycm9yOwotCi0gICAgICBpZiAoKHVkcHNpbmstPnVzZWRfc29ja2V0X3Y2ID0gZ19zb2NrZXRfbmV3IChHX1NPQ0tFVF9GQU1JTFlfSVBWNiwKLSAgICAgICAgICAgICAgICAgIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sIEdfU09DS0VUX1BST1RPQ09MX1VEUCwKLSAgICAgICAgICAgICAgICAgICZlcnIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAodWRwc2luaywgIkZhaWxlZCB0byBjcmVhdGUgSVB2NiBzb2NrZXQ6ICVzIiwKLSAgICAgICAgICAgIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYmluZF9pYWRkciA9IGdfaW5ldF9hZGRyZXNzX25ld19hbnkgKEdfU09DS0VUX0ZBTUlMWV9JUFY2KTsKLSAgICAgICAgYmluZF9hZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX25ldyAoYmluZF9pYWRkciwgMCk7Ci0gICAgICAgIGdfc29ja2V0X2JpbmQgKHVkcHNpbmstPnVzZWRfc29ja2V0X3Y2LCBiaW5kX2FkZHIsIFRSVUUsICZlcnIpOwotICAgICAgICBnX29iamVjdF91bnJlZiAoYmluZF9hZGRyKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKGJpbmRfaWFkZHIpOwotICAgICAgICBpZiAoZXJyICE9IE5VTEwpCi0gICAgICAgICAgZ290byBiaW5kX2Vycm9yOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICh1ZHBzaW5rLT51c2VkX3NvY2tldCkKLSAgICBnX3NvY2tldF9zZXRfYnJvYWRjYXN0ICh1ZHBzaW5rLT51c2VkX3NvY2tldCwgVFJVRSk7Ci0gIGlmICh1ZHBzaW5rLT51c2VkX3NvY2tldF92NikKLSAgICBnX3NvY2tldF9zZXRfYnJvYWRjYXN0ICh1ZHBzaW5rLT51c2VkX3NvY2tldF92NiwgVFJVRSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub19zb2NrZXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUICh1ZHBzaW5rLCAiRmFpbGVkIHRvIGNyZWF0ZSBJUHY0IHNvY2tldDogJXMiLAotICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotYmluZF9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh1ZHBzaW5rLCBSRVNPVVJDRSwgRkFJTEVELCAoTlVMTCksCi0gICAgICAgICgiRmFpbGVkIHRvIGJpbmQgc29ja2V0OiAlcyIsIGVyci0+bWVzc2FnZSkpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbmFtZV9yZXNvbHZlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHVkcHNpbmssIFJFU09VUkNFLCBGQUlMRUQsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gcmVzb2x2ZSBiaW5kIGFkZHJlc3MgJXM6ICVzIiwgdWRwc2luay0+YmluZF9hZGRyZXNzLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdHJ1Y3R1cmUgKgotZ3N0X2R5bnVkcHNpbmtfZ2V0X3N0YXRzIChHc3REeW5VRFBTaW5rICogc2luaywgY29uc3QgZ2NoYXIgKiBob3N0LCBnaW50IHBvcnQpCi17Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9keW51ZHBzaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogYnNpbmspCi17Ci0gIEdzdER5blVEUFNpbmsgKnVkcHNpbms7Ci0KLSAgdWRwc2luayA9IEdTVF9EWU5VRFBTSU5LIChic2luayk7Ci0KLSAgaWYgKHVkcHNpbmstPnVzZWRfc29ja2V0KSB7Ci0gICAgaWYgKHVkcHNpbmstPmNsb3NlX3NvY2tldCB8fCAhdWRwc2luay0+ZXh0ZXJuYWxfc29ja2V0KSB7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgIGlmICghZ19zb2NrZXRfY2xvc2UgKHVkcHNpbmstPnVzZWRfc29ja2V0LCAmZXJyKSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUICh1ZHBzaW5rLCAiRmFpbGVkIHRvIGNsb3NlIHNvY2tldDogJXMiLCBlcnItPm1lc3NhZ2UpOwotICAgICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZiAodWRwc2luay0+dXNlZF9zb2NrZXQpOwotICAgIHVkcHNpbmstPnVzZWRfc29ja2V0ID0gTlVMTDsKLSAgfQotCi0gIGlmICh1ZHBzaW5rLT51c2VkX3NvY2tldF92NikgewotICAgIGlmICh1ZHBzaW5rLT5jbG9zZV9zb2NrZXQgfHwgIXVkcHNpbmstPmV4dGVybmFsX3NvY2tldCkgewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gICAgICBpZiAoIWdfc29ja2V0X2Nsb3NlICh1ZHBzaW5rLT51c2VkX3NvY2tldF92NiwgJmVycikpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAodWRwc2luaywgIkZhaWxlZCB0byBjbG9zZSBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYgKHVkcHNpbmstPnVzZWRfc29ja2V0X3Y2KTsKLSAgICB1ZHBzaW5rLT51c2VkX3NvY2tldF92NiA9IE5VTEw7Ci0gIH0KLQotICBnc3RfZHludWRwc2lua19mcmVlX2NhbmNlbGxhYmxlICh1ZHBzaW5rKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHludWRwc2lua191bmxvY2sgKEdzdEJhc2VTaW5rICogYnNpbmspCi17Ci0gIEdzdER5blVEUFNpbmsgKnVkcHNpbms7Ci0KLSAgdWRwc2luayA9IEdTVF9EWU5VRFBTSU5LIChic2luayk7Ci0KLSAgZ19jYW5jZWxsYWJsZV9jYW5jZWwgKHVkcHNpbmstPmNhbmNlbGxhYmxlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZHludWRwc2lua191bmxvY2tfc3RvcCAoR3N0QmFzZVNpbmsgKiBic2luaykKLXsKLSAgR3N0RHluVURQU2luayAqdWRwc2luazsKLQotICB1ZHBzaW5rID0gR1NUX0RZTlVEUFNJTksgKGJzaW5rKTsKLQotICBnc3RfZHludWRwc2lua19mcmVlX2NhbmNlbGxhYmxlICh1ZHBzaW5rKTsKLSAgZ3N0X2R5bnVkcHNpbmtfY3JlYXRlX2NhbmNlbGxhYmxlICh1ZHBzaW5rKTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL2dzdC91ZHAvZ3N0ZHludWRwc2luay5oIGIvZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkODViYjYuLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9nc3RkeW51ZHBzaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFBoaWxpcHBlIEtoYWxhZiA8YnVyZ2VyQHNwZWVkeS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9EWU5VRFBTSU5LX0hfXwotI2RlZmluZSBfX0dTVF9EWU5VRFBTSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNpbmNsdWRlICJnc3R1ZHBuZXR1dGlscy5oIgotCi0jZGVmaW5lIEdTVF9UWVBFX0RZTlVEUFNJTksgICAgICAgICAgICAgKGdzdF9keW51ZHBzaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9EWU5VRFBTSU5LKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0RZTlVEUFNJTkssR3N0RHluVURQU2luaykpCi0jZGVmaW5lIEdTVF9EWU5VRFBTSU5LX0NMQVNTKGtsYXNzKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRFlOVURQU0lOSyxHc3REeW5VRFBTaW5rQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfRFlOVURQU0lOSyhvYmopICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9EWU5VRFBTSU5LKSkKLSNkZWZpbmUgR1NUX0lTX0RZTlVEUFNJTktfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9EWU5VRFBTSU5LKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdER5blVEUFNpbmsgR3N0RHluVURQU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3REeW5VRFBTaW5rQ2xhc3MgR3N0RHluVURQU2lua0NsYXNzOwotCi0KLS8qIHNlbmRzIHVkcCBwYWNrZXRzIHRvIGhvc3QvcG9ydCBwYWlycyBjb250YWluZWQgaW4gdGhlIEdzdE5ldEJ1ZmZlciByZWNlaXZlZC4KLSAqLwotc3RydWN0IF9Hc3REeW5VRFBTaW5rIHsKLSAgR3N0QmFzZVNpbmsgcGFyZW50OwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgR1NvY2tldCAqc29ja2V0LCAqc29ja2V0X3Y2OwotICBnYm9vbGVhbiBjbG9zZV9zb2NrZXQ7Ci0gIGdjaGFyICpiaW5kX2FkZHJlc3M7Ci0gIGdpbnQgYmluZF9wb3J0OwotCi0gIC8qIHRoZSBzb2NrZXQgaW4gdXNlICovCi0gIEdTb2NrZXQgKnVzZWRfc29ja2V0LCAqdXNlZF9zb2NrZXRfdjY7Ci0gIGdib29sZWFuIGV4dGVybmFsX3NvY2tldDsKLSAgZ2Jvb2xlYW4gbWFkZV9jYW5jZWxfZmQ7Ci0gIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7Ci19OwotCi1zdHJ1Y3QgX0dzdER5blVEUFNpbmtDbGFzcyB7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIGVsZW1lbnQgbWV0aG9kcyAqLwotICBHc3RTdHJ1Y3R1cmUqICAoKmdldF9zdGF0cykgICAgKEdzdER5blVEUFNpbmsgKnNpbmssIGNvbnN0IGdjaGFyICpob3N0LCBnaW50IHBvcnQpOwotCi0gIC8qIHNpZ25hbHMgKi8KLX07Ci0KLUdUeXBlIGdzdF9keW51ZHBzaW5rX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfRFlOVURQU0lOS19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmMgYi9nc3QvdWRwL2dzdG11bHRpdWRwc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzk5ODZjLi4wMDAwMDAwCi0tLSBhL2dzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODcxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IEphcmtrbyBQYWx2aWFpbmVuIDxqYXJra28ucGFsdmlhaW5lbkBzZXNjYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEyPiBDb2xsYWJvcmEgTHRkLgotICogICBBdXRob3I6IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW11bHRpdWRwc2luawotICogQHNlZV9hbHNvOiB1ZHBzaW5rLCBtdWx0aWZkc2luawotICoKLSAqIG11bHRpdWRwc2luayBpcyBhIG5ldHdvcmsgc2luayB0aGF0IHNlbmRzIFVEUCBwYWNrZXRzIHRvIG11bHRpcGxlCi0gKiBjbGllbnRzLgotICogSXQgY2FuIGJlIGNvbWJpbmVkIHdpdGggcnRwIHBheWxvYWQgZW5jb2RlcnMgdG8gaW1wbGVtZW50IFJUUCBzdHJlYW1pbmcuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgImdzdG11bHRpdWRwc2luay5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBHX09TX1dJTjMyCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChtdWx0aXVkcHNpbmtfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgKG11bHRpdWRwc2lua19kZWJ1ZykKLQotI2RlZmluZSBVRFBfTUFYX1NJWkUgNjU1MDcKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotLyogTXVsdGlVRFBTaW5rIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogbWV0aG9kcyAqLwotICBTSUdOQUxfQURELAotICBTSUdOQUxfUkVNT1ZFLAotICBTSUdOQUxfQ0xFQVIsCi0gIFNJR05BTF9HRVRfU1RBVFMsCi0KLSAgLyogc2lnbmFscyAqLwotICBTSUdOQUxfQ0xJRU5UX0FEREVELAotICBTSUdOQUxfQ0xJRU5UX1JFTU9WRUQsCi0KLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX1NPQ0tFVCAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfQ0xPU0VfU09DS0VUICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9VU0VEX1NPQ0tFVCAgICAgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX0NMSUVOVFMgICAgICAgICAgICBOVUxMCi0vKiBGSVhNRSwgdGhpcyBzaG91bGQgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgd2UgZG9uJ3QgbmVlZCB0byBqb2luIGEgbXVsdGljYXN0Ci0gKiBncm91cCBmb3Igc2VuZGluZywgaWYgdGhpcyBzb2NrZXQgaXMgYWxzbyB1c2VkIGZvciByZWNlaXZpbmcsIGl0IHNob3VsZAotICogYmUgY29uZmlndXJlZCBpbiB0aGUgZWxlbWVudCB0aGF0IGRvZXMgdGhlIHJlY2VpdmUuICovCi0jZGVmaW5lIERFRkFVTFRfQVVUT19NVUxUSUNBU1QgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9NVUxUSUNBU1RfSUZBQ0UgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX1RUTCAgICAgICAgICAgICAgICA2NAotI2RlZmluZSBERUZBVUxUX1RUTF9NQyAgICAgICAgICAgICAxCi0jZGVmaW5lIERFRkFVTFRfTE9PUCAgICAgICAgICAgICAgIFRSVUUKLSNkZWZpbmUgREVGQVVMVF9GT1JDRV9JUFY0ICAgICAgICAgRkFMU0UKLSNkZWZpbmUgREVGQVVMVF9RT1NfRFNDUCAgICAgICAgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9TRU5EX0RVUExJQ0FURVMgICAgVFJVRQotI2RlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfQklORF9BRERSRVNTICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9CSU5EX1BPUlQgICAgICAgICAgMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9CWVRFU19UT19TRVJWRSwKLSAgUFJPUF9CWVRFU19TRVJWRUQsCi0gIFBST1BfU09DS0VULAotICBQUk9QX1NPQ0tFVF9WNiwKLSAgUFJPUF9DTE9TRV9TT0NLRVQsCi0gIFBST1BfVVNFRF9TT0NLRVQsCi0gIFBST1BfVVNFRF9TT0NLRVRfVjYsCi0gIFBST1BfQ0xJRU5UUywKLSAgUFJPUF9BVVRPX01VTFRJQ0FTVCwKLSAgUFJPUF9NVUxUSUNBU1RfSUZBQ0UsCi0gIFBST1BfVFRMLAotICBQUk9QX1RUTF9NQywKLSAgUFJPUF9MT09QLAotICBQUk9QX0ZPUkNFX0lQVjQsCi0gIFBST1BfUU9TX0RTQ1AsCi0gIFBST1BfU0VORF9EVVBMSUNBVEVTLAotICBQUk9QX0JVRkZFUl9TSVpFLAotICBQUk9QX0JJTkRfQUREUkVTUywKLSAgUFJPUF9CSU5EX1BPUlQKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9tdWx0aXVkcHNpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBzaW5rLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlcl9saXN0IChHc3RCYXNlU2luayAqIGJzaW5rLAotICAgIEdzdEJ1ZmZlckxpc3QgKiBidWZmZXJfbGlzdCk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXVsdGl1ZHBzaW5rX3N0YXJ0IChHc3RCYXNlU2luayAqIGJzaW5rKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXVsdGl1ZHBzaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogYnNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9tdWx0aXVkcHNpbmtfdW5sb2NrIChHc3RCYXNlU2luayAqIGJzaW5rKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfbXVsdGl1ZHBzaW5rX3VubG9ja19zdG9wIChHc3RCYXNlU2luayAqIGJzaW5rKTsKLQotc3RhdGljIHZvaWQgZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfbXVsdGl1ZHBzaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIHZvaWQgZ3N0X211bHRpdWRwc2lua19hZGRfaW50ZXJuYWwgKEdzdE11bHRpVURQU2luayAqIHNpbmssCi0gICAgY29uc3QgZ2NoYXIgKiBob3N0LCBnaW50IHBvcnQsIGdib29sZWFuIGxvY2spOwotc3RhdGljIHZvaWQgZ3N0X211bHRpdWRwc2lua19jbGVhcl9pbnRlcm5hbCAoR3N0TXVsdGlVRFBTaW5rICogc2luaywKLSAgICBnYm9vbGVhbiBsb2NrKTsKLQotc3RhdGljIGd1aW50IGdzdF9tdWx0aXVkcHNpbmtfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotI2RlZmluZSBnc3RfbXVsdGl1ZHBzaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdE11bHRpVURQU2luaywgZ3N0X211bHRpdWRwc2luaywgR1NUX1RZUEVfQkFTRV9TSU5LKTsKLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfY2xhc3NfaW5pdCAoR3N0TXVsdGlVRFBTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmdzdGJhc2VzaW5rX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MgPSAoR3N0QmFzZVNpbmtDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfbXVsdGl1ZHBzaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X211bHRpdWRwc2lua19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X211bHRpdWRwc2lua19maW5hbGl6ZTsKLQotICAvKioKLSAgICogR3N0TXVsdGlVRFBTaW5rOjphZGQ6Ci0gICAqIEBnc3RtdWx0aXVkcHNpbms6IHRoZSBzaW5rIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgKiBAaG9zdDogdGhlIGhvc3RuYW1lL0lQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0byBhZGQKLSAgICogQHBvcnQ6IHRoZSBwb3J0IG9mIHRoZSBjbGllbnQgdG8gYWRkCi0gICAqCi0gICAqIEFkZCBhIGNsaWVudCB3aXRoIGRlc3RpbmF0aW9uIEBob3N0IGFuZCBAcG9ydCB0byB0aGUgbGlzdCBvZgotICAgKiBjbGllbnRzLiBXaGVuIHRoZSBzYW1lIGhvc3QvcG9ydCBwYWlyIGlzIGFkZGVkIG11bHRpcGxlIHRpbWVzLCB0aGUKLSAgICogc2VuZC1kdXBsaWNhdGVzIHByb3BlcnR5IGRlZmluZXMgaWYgdGhlIHBhY2tldHMgYXJlIHNlbnQgbXVsdGlwbGUgdGltZXMgdG8KLSAgICogdGhlIHNhbWUgaG9zdC9wb3J0IHBhaXIgb3Igbm90LgotICAgKgotICAgKiBXaGVuIGEgaG9zdC9wb3J0IHBhaXIgaXMgYWRkZWQgbXVsdGlwbGUgdGltZXMsIGFuIGVxdWFsIGFtb3VudCBvZiByZW1vdmUKLSAgICogY2FsbHMgbXVzdCBiZSBwZXJmb3JtZWQgdG8gYWN0dWFsbHkgcmVtb3ZlIHRoZSBob3N0L3BvcnQgcGFpciBmcm9tIHRoZSBsaXN0Ci0gICAqIG9mIGRlc3RpbmF0aW9ucy4KLSAgICovCi0gIGdzdF9tdWx0aXVkcHNpbmtfc2lnbmFsc1tTSUdOQUxfQUREXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJhZGQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04sCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdE11bHRpVURQU2lua0NsYXNzLCBhZGQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLAotICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCk7Ci0gIC8qKgotICAgKiBHc3RNdWx0aVVEUFNpbms6OnJlbW92ZToKLSAgICogQGdzdG11bHRpdWRwc2luazogdGhlIHNpbmsgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAqIEBob3N0OiB0aGUgaG9zdG5hbWUvSVAgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHRvIHJlbW92ZQotICAgKiBAcG9ydDogdGhlIHBvcnQgb2YgdGhlIGNsaWVudCB0byByZW1vdmUKLSAgICoKLSAgICogUmVtb3ZlIHRoZSBjbGllbnQgd2l0aCBkZXN0aW5hdGlvbiBAaG9zdCBhbmQgQHBvcnQgZnJvbSB0aGUgbGlzdCBvZgotICAgKiBjbGllbnRzLgotICAgKi8KLSAgZ3N0X211bHRpdWRwc2lua19zaWduYWxzW1NJR05BTF9SRU1PVkVdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoInJlbW92ZSIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0TXVsdGlVRFBTaW5rQ2xhc3MsIHJlbW92ZSksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsCi0gICAgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfSU5UKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpVURQU2luazo6Y2xlYXI6Ci0gICAqIEBnc3RtdWx0aXVkcHNpbms6IHRoZSBzaW5rIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgKgotICAgKiBDbGVhciB0aGUgbGlzdCBvZiBjbGllbnRzLgotICAgKi8KLSAgZ3N0X211bHRpdWRwc2lua19zaWduYWxzW1NJR05BTF9DTEVBUl0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiY2xlYXIiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04sCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdE11bHRpVURQU2lua0NsYXNzLCBjbGVhciksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDApOwotICAvKioKLSAgICogR3N0TXVsdGlVRFBTaW5rOjpnZXQtc3RhdHM6Ci0gICAqIEBnc3RtdWx0aXVkcHNpbms6IHRoZSBzaW5rIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgKiBAaG9zdDogdGhlIGhvc3RuYW1lL0lQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0byBnZXQgc3RhdHMgb24KLSAgICogQHBvcnQ6IHRoZSBwb3J0IG9mIHRoZSBjbGllbnQgdG8gZ2V0IHN0YXRzIG9uCi0gICAqCi0gICAqIEdldCB0aGUgc3RhdGlzdGljcyBvZiB0aGUgY2xpZW50IHdpdGggZGVzdGluYXRpb24gQGhvc3QgYW5kIEBwb3J0LgotICAgKgotICAgKiBSZXR1cm5zOiBhIEdzdFN0cnVjdHVyZTogYnl0ZXNfc2VudCwgcGFja2V0c19zZW50LAotICAgKiAgICAgICAgICAgY29ubmVjdF90aW1lIChpbiBlcG9jaCBzZWNvbmRzKSwgZGlzY29ubmVjdF90aW1lIChpbiBlcG9jaCBzZWNvbmRzKQotICAgKi8KLSAgZ3N0X211bHRpdWRwc2lua19zaWduYWxzW1NJR05BTF9HRVRfU1RBVFNdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImdldC1zdGF0cyIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiwKLSAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0TXVsdGlVRFBTaW5rQ2xhc3MsIGdldF9zdGF0cyksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR1NUX1RZUEVfU1RSVUNUVVJFLCAyLAotICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCk7Ci0gIC8qKgotICAgKiBHc3RNdWx0aVVEUFNpbms6OmNsaWVudC1hZGRlZDoKLSAgICogQGdzdG11bHRpdWRwc2luazogdGhlIHNpbmsgZW1pdHRpbmcgdGhlIHNpZ25hbAotICAgKiBAaG9zdDogdGhlIGhvc3RuYW1lL0lQIGFkZHJlc3Mgb2YgdGhlIGFkZGVkIGNsaWVudAotICAgKiBAcG9ydDogdGhlIHBvcnQgb2YgdGhlIGFkZGVkIGNsaWVudAotICAgKgotICAgKiBTaWduYWwgZW1pdGVkIHdoZW4gYSBuZXcgY2xpZW50IGlzIGFkZGVkIHRvIHRoZSBsaXN0IG9mCi0gICAqIGNsaWVudHMuCi0gICAqLwotICBnc3RfbXVsdGl1ZHBzaW5rX3NpZ25hbHNbU0lHTkFMX0NMSUVOVF9BRERFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgiY2xpZW50LWFkZGVkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULCBHX1NUUlVDVF9PRkZTRVQgKEdzdE11bHRpVURQU2lua0NsYXNzLCBjbGllbnRfYWRkZWQpLAotICAgICAgTlVMTCwgTlVMTCwgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLAotICAgICAgR19UWVBFX1NUUklORywgR19UWVBFX0lOVCk7Ci0gIC8qKgotICAgKiBHc3RNdWx0aVVEUFNpbms6OmNsaWVudC1yZW1vdmVkOgotICAgKiBAZ3N0bXVsdGl1ZHBzaW5rOiB0aGUgc2luayBlbWl0dGluZyB0aGUgc2lnbmFsCi0gICAqIEBob3N0OiB0aGUgaG9zdG5hbWUvSVAgYWRkcmVzcyBvZiB0aGUgcmVtb3ZlZCBjbGllbnQKLSAgICogQHBvcnQ6IHRoZSBwb3J0IG9mIHRoZSByZW1vdmVkIGNsaWVudAotICAgKgotICAgKiBTaWduYWwgZW1pdGVkIHdoZW4gYSBjbGllbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mCi0gICAqIGNsaWVudHMuCi0gICAqLwotICBnc3RfbXVsdGl1ZHBzaW5rX3NpZ25hbHNbU0lHTkFMX0NMSUVOVF9SRU1PVkVEXSA9Ci0gICAgICBnX3NpZ25hbF9uZXcgKCJjbGllbnQtcmVtb3ZlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCi0gICAgICBHX1NJR05BTF9SVU5fTEFTVCwgR19TVFJVQ1RfT0ZGU0VUIChHc3RNdWx0aVVEUFNpbmtDbGFzcywKLSAgICAgICAgICBjbGllbnRfcmVtb3ZlZCksIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLAotICAgICAgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9JTlQpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQllURVNfVE9fU0VSVkUsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgiYnl0ZXMtdG8tc2VydmUiLCAiQnl0ZXMgdG8gc2VydmUiLAotICAgICAgICAgICJOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgdG8gc2VydmUgdG8gY2xpZW50cyIsIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQllURVNfU0VSVkVELAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQ2NCAoImJ5dGVzLXNlcnZlZCIsICJCeXRlcyBzZXJ2ZWQiLAotICAgICAgICAgICJUb3RhbCBudW1iZXIgb2YgYnl0ZXMgc2VudCB0byBhbGwgY2xpZW50cyIsIDAsIEdfTUFYVUlOVDY0LCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU09DS0VULAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInNvY2tldCIsICJTb2NrZXQgSGFuZGxlIiwKLSAgICAgICAgICAiU29ja2V0IHRvIHVzZSBmb3IgVURQIHNlbmRpbmcuIChOVUxMID09IGFsbG9jYXRlKSIsCi0gICAgICAgICAgR19UWVBFX1NPQ0tFVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU09DS0VUX1Y2LAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInNvY2tldC12NiIsICJTb2NrZXQgSGFuZGxlIElQdjYiLAotICAgICAgICAgICJTb2NrZXQgdG8gdXNlIGZvciBVRFB2NiBzZW5kaW5nLiAoTlVMTCA9PSBhbGxvY2F0ZSkiLAotICAgICAgICAgIEdfVFlQRV9TT0NLRVQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NMT1NFX1NPQ0tFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiY2xvc2Utc29ja2V0IiwgIkNsb3NlIHNvY2tldCIsCi0gICAgICAgICAgIkNsb3NlIHNvY2tldCBpZiBwYXNzZWQgYXMgcHJvcGVydHkgb24gc3RhdGUgY2hhbmdlIiwKLSAgICAgICAgICBERUZBVUxUX0NMT1NFX1NPQ0tFVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVVNFRF9TT0NLRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0ICgidXNlZC1zb2NrZXQiLCAiVXNlZCBTb2NrZXQgSGFuZGxlIiwKLSAgICAgICAgICAiU29ja2V0IGN1cnJlbnRseSBpbiB1c2UgZm9yIFVEUCBzZW5kaW5nLiAoTlVMTCA9PSBubyBzb2NrZXQpIiwKLSAgICAgICAgICBHX1RZUEVfU09DS0VULCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRURfU09DS0VUX1Y2LAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInVzZWQtc29ja2V0LXY2IiwgIlVzZWQgU29ja2V0IEhhbmRsZSBJUHY2IiwKLSAgICAgICAgICAiU29ja2V0IGN1cnJlbnRseSBpbiB1c2UgZm9yIFVEUHY2IHNlbmRpbmcuIChOVUxMID09IG5vIHNvY2tldCkiLAotICAgICAgICAgIEdfVFlQRV9TT0NLRVQsIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0xJRU5UUywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjbGllbnRzIiwgIkNsaWVudHMiLAotICAgICAgICAgICJBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGhvc3Q6cG9ydCBwYWlycyB3aXRoIGRlc3RpbmF0aW9ucyIsCi0gICAgICAgICAgREVGQVVMVF9DTElFTlRTLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9BVVRPX01VTFRJQ0FTVCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXV0by1tdWx0aWNhc3QiLAotICAgICAgICAgICJBdXRvbWF0aWNhbGx5IGpvaW4vbGVhdmUgbXVsdGljYXN0IGdyb3VwcyIsCi0gICAgICAgICAgIkF1dG9tYXRpY2FsbHkgam9pbi9sZWF2ZSB0aGUgbXVsdGljYXN0IGdyb3VwcywgRkFMU0UgbWVhbnMgdXNlciIKLSAgICAgICAgICAiIGhhcyB0byBkbyBpdCBoaW1zZWxmIiwgREVGQVVMVF9BVVRPX01VTFRJQ0FTVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NVUxUSUNBU1RfSUZBQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibXVsdGljYXN0LWlmYWNlIiwgIk11bHRpY2FzdCBJbnRlcmZhY2UiLAotICAgICAgICAgICJUaGUgbmV0d29yayBpbnRlcmZhY2Ugb24gd2hpY2ggdG8gam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwIiwKLSAgICAgICAgICBERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVFRMLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInR0bCIsICJVbmljYXN0IFRUTCIsCi0gICAgICAgICAgIlVzZWQgZm9yIHNldHRpbmcgdGhlIHVuaWNhc3QgVFRMIHBhcmFtZXRlciIsCi0gICAgICAgICAgMCwgMjU1LCBERUZBVUxUX1RUTCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVFRMX01DLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInR0bC1tYyIsICJNdWx0aWNhc3QgVFRMIiwKLSAgICAgICAgICAiVXNlZCBmb3Igc2V0dGluZyB0aGUgbXVsdGljYXN0IFRUTCBwYXJhbWV0ZXIiLAotICAgICAgICAgIDAsIDI1NSwgREVGQVVMVF9UVExfTUMsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0xPT1AsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImxvb3AiLCAiTXVsdGljYXN0IExvb3BiYWNrIiwKLSAgICAgICAgICAiVXNlZCBmb3Igc2V0dGluZyB0aGUgbXVsdGljYXN0IGxvb3AgcGFyYW1ldGVyLiBUUlVFID0gZW5hYmxlLCIKLSAgICAgICAgICAiIEZBTFNFID0gZGlzYWJsZSIsIERFRkFVTFRfTE9PUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdE11bHRpVURQU2luazo6Zm9yY2UtaXB2NDoKLSAgICoKLSAgICogRm9yY2UgdGhlIHVzZSBvZiBhbiBJUHY0IHNvY2tldC4KLSAgICoKLSAgICogU2luY2U6IDEuMC4yCi0gICAqLwotI2lmbmRlZiBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GT1JDRV9JUFY0LAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJmb3JjZS1pcHY0IiwgIkZvcmNlIElQdjQiLAotICAgICAgICAgICJGb3JjaW5nIHRoZSB1c2Ugb2YgYW4gSVB2NCBzb2NrZXQgKERFUFJFQ0FURUQsIGhhcyBubyBlZmZlY3QgYW55bW9yZSkiLAotICAgICAgICAgIERFRkFVTFRfRk9SQ0VfSVBWNCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX0RFUFJFQ0FURUQpKTsKLSNlbmRpZgotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1FPU19EU0NQLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInFvcy1kc2NwIiwgIlFvUyBkaWZmIHNydiBjb2RlIHBvaW50IiwKLSAgICAgICAgICAiUXVhbGl0eSBvZiBTZXJ2aWNlLCBkaWZmZXJlbnRpYXRlZCBzZXJ2aWNlcyBjb2RlIHBvaW50ICgtMSBkZWZhdWx0KSIsCi0gICAgICAgICAgLTEsIDYzLCBERUZBVUxUX1FPU19EU0NQLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0TXVsdGlVRFBTaW5rOjpzZW5kLWR1cGxpY2F0ZXM6Ci0gICAqCi0gICAqIFdoZW4gYSBob3N0L3BvcnQgcGFpciBpcyBhZGRlZCBtdXRsaXBsZSB0aW1lcywgc2VuZCB0aGUgcGFja2V0IHRvIHRoZSBob3N0Ci0gICAqIG11bHRpcGxlIHRpbWVzIGFzIHdlbGwuCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1NFTkRfRFVQTElDQVRFUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgic2VuZC1kdXBsaWNhdGVzIiwgIlNlbmQgRHVwbGljYXRlcyIsCi0gICAgICAgICAgIldoZW4gYSBkaXN0aW5hdGlvbi9wb3J0IHBhaXIgaXMgYWRkZWQgbXVsdGlwbGUgdGltZXMsIHNlbmQgcGFja2V0cyAiCi0gICAgICAgICAgIm11bHRpcGxlIHRpbWVzIGFzIHdlbGwiLCBERUZBVUxUX1NFTkRfRFVQTElDQVRFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0JVRkZFUl9TSVpFLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImJ1ZmZlci1zaXplIiwgIkJ1ZmZlciBTaXplIiwKLSAgICAgICAgICAiU2l6ZSBvZiB0aGUga2VybmVsIHNlbmQgYnVmZmVyIGluIGJ5dGVzLCAwPWRlZmF1bHQiLCAwLCBHX01BWElOVCwKLSAgICAgICAgICBERUZBVUxUX0JVRkZFUl9TSVpFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JJTkRfQUREUkVTUywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJiaW5kLWFkZHJlc3MiLCAiQmluZCBBZGRyZXNzIiwKLSAgICAgICAgICAiQWRkcmVzcyB0byBiaW5kIHRoZSBzb2NrZXQgdG8iLCBERUZBVUxUX0JJTkRfQUREUkVTUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CSU5EX1BPUlQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiYmluZC1wb3J0IiwgIkJpbmQgUG9ydCIsCi0gICAgICAgICAgIlBvcnQgdG8gYmluZCB0aGUgc29ja2V0IHRvIiwgMCwgR19NQVhVSU5UMTYsCi0gICAgICAgICAgREVGQVVMVF9CSU5EX1BPUlQsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlVEUCBwYWNrZXQgc2VuZGVyIiwKLSAgICAgICJTaW5rL05ldHdvcmsiLAotICAgICAgIlNlbmQgZGF0YSBvdmVyIHRoZSBuZXR3b3JrIHZpYSBVRFAgdG8gb25lIG9yIG11bHRpcGxlIHJlY2lwaWVudHMgIgotICAgICAgIndoaWNoIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGF0IHJ1bnRpbWUgdXNpbmcgYWN0aW9uIHNpZ25hbHMiLAotICAgICAgIldpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Iik7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnJlbmRlciA9IGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyOwotICBnc3RiYXNlc2lua19jbGFzcy0+cmVuZGVyX2xpc3QgPSBnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlcl9saXN0OwotICBnc3RiYXNlc2lua19jbGFzcy0+c3RhcnQgPSBnc3RfbXVsdGl1ZHBzaW5rX3N0YXJ0OwotICBnc3RiYXNlc2lua19jbGFzcy0+c3RvcCA9IGdzdF9tdWx0aXVkcHNpbmtfc3RvcDsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnVubG9jayA9IGdzdF9tdWx0aXVkcHNpbmtfdW5sb2NrOwotICBnc3RiYXNlc2lua19jbGFzcy0+dW5sb2NrX3N0b3AgPSBnc3RfbXVsdGl1ZHBzaW5rX3VubG9ja19zdG9wOwotICBrbGFzcy0+YWRkID0gZ3N0X211bHRpdWRwc2lua19hZGQ7Ci0gIGtsYXNzLT5yZW1vdmUgPSBnc3RfbXVsdGl1ZHBzaW5rX3JlbW92ZTsKLSAga2xhc3MtPmNsZWFyID0gZ3N0X211bHRpdWRwc2lua19jbGVhcjsKLSAga2xhc3MtPmdldF9zdGF0cyA9IGdzdF9tdWx0aXVkcHNpbmtfZ2V0X3N0YXRzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChtdWx0aXVkcHNpbmtfZGVidWcsICJtdWx0aXVkcHNpbmsiLCAwLCAiVURQIHNpbmsiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfY3JlYXRlX2NhbmNlbGxhYmxlIChHc3RNdWx0aVVEUFNpbmsgKiBzaW5rKQotewotICBHUG9sbEZEIHBvbGxmZDsKLQotICBzaW5rLT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOwotICBzaW5rLT5tYWRlX2NhbmNlbF9mZCA9IGdfY2FuY2VsbGFibGVfbWFrZV9wb2xsZmQgKHNpbmstPmNhbmNlbGxhYmxlLCAmcG9sbGZkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfZnJlZV9jYW5jZWxsYWJsZSAoR3N0TXVsdGlVRFBTaW5rICogc2luaykKLXsKLSAgaWYgKHNpbmstPm1hZGVfY2FuY2VsX2ZkKSB7Ci0gICAgZ19jYW5jZWxsYWJsZV9yZWxlYXNlX2ZkIChzaW5rLT5jYW5jZWxsYWJsZSk7Ci0gICAgc2luay0+bWFkZV9jYW5jZWxfZmQgPSBGQUxTRTsKLSAgfQotICBnX29iamVjdF91bnJlZiAoc2luay0+Y2FuY2VsbGFibGUpOwotICBzaW5rLT5jYW5jZWxsYWJsZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGl1ZHBzaW5rX2luaXQgKEdzdE11bHRpVURQU2luayAqIHNpbmspCi17Ci0gIGd1aW50IG1heF9tZW07Ci0KLSAgZ19tdXRleF9pbml0ICgmc2luay0+Y2xpZW50X2xvY2spOwotICBzaW5rLT5jbGllbnRzID0gTlVMTDsKLSAgc2luay0+bnVtX3Y0X3VuaXF1ZSA9IDA7Ci0gIHNpbmstPm51bV92NF9hbGwgPSAwOwotICBzaW5rLT5udW1fdjZfdW5pcXVlID0gMDsKLSAgc2luay0+bnVtX3Y2X2FsbCA9IDA7Ci0KLSAgc2luay0+c29ja2V0ID0gREVGQVVMVF9TT0NLRVQ7Ci0gIHNpbmstPnNvY2tldF92NiA9IERFRkFVTFRfU09DS0VUOwotICBzaW5rLT51c2VkX3NvY2tldCA9IERFRkFVTFRfVVNFRF9TT0NLRVQ7Ci0gIHNpbmstPnVzZWRfc29ja2V0X3Y2ID0gREVGQVVMVF9VU0VEX1NPQ0tFVDsKLSAgc2luay0+Y2xvc2Vfc29ja2V0ID0gREVGQVVMVF9DTE9TRV9TT0NLRVQ7Ci0gIHNpbmstPmV4dGVybmFsX3NvY2tldCA9IChzaW5rLT5zb2NrZXQgIT0gTlVMTCk7Ci0gIHNpbmstPmF1dG9fbXVsdGljYXN0ID0gREVGQVVMVF9BVVRPX01VTFRJQ0FTVDsKLSAgc2luay0+dHRsID0gREVGQVVMVF9UVEw7Ci0gIHNpbmstPnR0bF9tYyA9IERFRkFVTFRfVFRMX01DOwotICBzaW5rLT5sb29wID0gREVGQVVMVF9MT09QOwotICBzaW5rLT5mb3JjZV9pcHY0ID0gREVGQVVMVF9GT1JDRV9JUFY0OwotICBzaW5rLT5xb3NfZHNjcCA9IERFRkFVTFRfUU9TX0RTQ1A7Ci0gIHNpbmstPnNlbmRfZHVwbGljYXRlcyA9IERFRkFVTFRfU0VORF9EVVBMSUNBVEVTOwotICBzaW5rLT5tdWx0aV9pZmFjZSA9IGdfc3RyZHVwIChERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSk7Ci0KLSAgZ3N0X211bHRpdWRwc2lua19jcmVhdGVfY2FuY2VsbGFibGUgKHNpbmspOwotCi0gIC8qIHByZS1hbGxvY2F0ZSBPdXRwdXRWZWN0b3IsIE1hcEluZm8gYW5kIE91dHB1dE1lc3NhZ2UgYXJyYXlzCi0gICAqIGZvciB1c2UgaW4gdGhlIHJlbmRlciBhbmQgcmVuZGVyX2xpc3QgZnVuY3Rpb25zICovCi0gIG1heF9tZW0gPSBnc3RfYnVmZmVyX2dldF9tYXhfbWVtb3J5ICgpOwotCi0gIHNpbmstPm5fdmVjcyA9IG1heF9tZW07Ci0gIHNpbmstPnZlY3MgPSBnX25ldyAoR091dHB1dFZlY3Rvciwgc2luay0+bl92ZWNzKTsKLQotICBzaW5rLT5uX21hcHMgPSBtYXhfbWVtOwotICBzaW5rLT5tYXBzID0gZ19uZXcgKEdzdE1hcEluZm8sIHNpbmstPm5fbWFwcyk7Ci0KLSAgc2luay0+bl9tZXNzYWdlcyA9IDE7Ci0gIHNpbmstPm1lc3NhZ2VzID0gZ19uZXcgKEdzdE91dHB1dE1lc3NhZ2UsIHNpbmstPm5fbWVzc2FnZXMpOwotCi0gIC8qIHdlIGFzc3VtZSB0aGF0IHRoZSBudW1iZXIgb2YgbWVtb3JpZXMgcGVyIGJ1ZmZlciBjYW4gZml0IGludG8gYSBndWludDggKi8KLSAgZ193YXJuX2lmX2ZhaWwgKG1heF9tZW0gPD0gR19NQVhVSU5UOCk7Ci19Ci0KLXN0YXRpYyBHc3RVRFBDbGllbnQgKgotZ3N0X3VkcF9jbGllbnRfbmV3IChHc3RNdWx0aVVEUFNpbmsgKiBzaW5rLCBjb25zdCBnY2hhciAqIGhvc3QsIGdpbnQgcG9ydCkKLXsKLSAgR3N0VURQQ2xpZW50ICpjbGllbnQ7Ci0gIEdJbmV0QWRkcmVzcyAqYWRkcjsKLSAgR1Jlc29sdmVyICpyZXNvbHZlcjsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIGFkZHIgPSBnX2luZXRfYWRkcmVzc19uZXdfZnJvbV9zdHJpbmcgKGhvc3QpOwotICBpZiAoIWFkZHIpIHsKLSAgICBHTGlzdCAqcmVzdWx0czsKLQotICAgIHJlc29sdmVyID0gZ19yZXNvbHZlcl9nZXRfZGVmYXVsdCAoKTsKLSAgICByZXN1bHRzID0KLSAgICAgICAgZ19yZXNvbHZlcl9sb29rdXBfYnlfbmFtZSAocmVzb2x2ZXIsIGhvc3QsIHNpbmstPmNhbmNlbGxhYmxlLCAmZXJyKTsKLSAgICBpZiAoIXJlc3VsdHMpCi0gICAgICBnb3RvIG5hbWVfcmVzb2x2ZTsKLSAgICBhZGRyID0gR19JTkVUX0FERFJFU1MgKGdfb2JqZWN0X3JlZiAocmVzdWx0cy0+ZGF0YSkpOwotCi0gICAgZ19yZXNvbHZlcl9mcmVlX2FkZHJlc3NlcyAocmVzdWx0cyk7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHJlc29sdmVyKTsKLSAgfQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgewotICAgIGdjaGFyICppcCA9IGdfaW5ldF9hZGRyZXNzX3RvX3N0cmluZyAoYWRkcik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiSVAgYWRkcmVzcyBmb3IgaG9zdCAlcyBpcyAlcyIsIGhvc3QsIGlwKTsKLSAgICBnX2ZyZWUgKGlwKTsKLSAgfQotI2VuZGlmCi0KLSAgY2xpZW50ID0gZ19zbGljZV9uZXcwIChHc3RVRFBDbGllbnQpOwotICBjbGllbnQtPnJlZl9jb3VudCA9IDE7Ci0gIGNsaWVudC0+YWRkX2NvdW50ID0gMDsKLSAgY2xpZW50LT5ob3N0ID0gZ19zdHJkdXAgKGhvc3QpOwotICBjbGllbnQtPnBvcnQgPSBwb3J0OwotICBjbGllbnQtPmFkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChhZGRyLCBwb3J0KTsKLSAgZ19vYmplY3RfdW5yZWYgKGFkZHIpOwotCi0gIHJldHVybiBjbGllbnQ7Ci0KLW5hbWVfcmVzb2x2ZToKLSAgewotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdfb2JqZWN0X3VucmVmIChyZXNvbHZlcik7Ci0KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi0vKiBjYWxsIHdpdGggY2xpZW50IGxvY2sgaGVsZCAqLwotc3RhdGljIHZvaWQKLWdzdF91ZHBfY2xpZW50X3VucmVmIChHc3RVRFBDbGllbnQgKiBjbGllbnQpCi17Ci0gIGlmICgtLWNsaWVudC0+cmVmX2NvdW50ID09IDApIHsKLSAgICBnX29iamVjdF91bnJlZiAoY2xpZW50LT5hZGRyKTsKLSAgICBnX2ZyZWUgKGNsaWVudC0+aG9zdCk7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RVRFBDbGllbnQsIGNsaWVudCk7Ci0gIH0KLX0KLQotLyogY2FsbCB3aXRoIGNsaWVudCBsb2NrIGhlbGQgKi8KLXN0YXRpYyBpbmxpbmUgR3N0VURQQ2xpZW50ICoKLWdzdF91ZHBfY2xpZW50X3JlZiAoR3N0VURQQ2xpZW50ICogY2xpZW50KQotewotICArK2NsaWVudC0+cmVmX2NvdW50OwotICByZXR1cm4gY2xpZW50OwotfQotCi1zdGF0aWMgZ2ludAotY2xpZW50X2NvbXBhcmUgKEdzdFVEUENsaWVudCAqIGEsIEdzdFVEUENsaWVudCAqIGIpCi17Ci0gIGlmICgoYS0+cG9ydCA9PSBiLT5wb3J0KSAmJiAoc3RyY21wIChhLT5ob3N0LCBiLT5ob3N0KSA9PSAwKSkKLSAgICByZXR1cm4gMDsKLQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE11bHRpVURQU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX01VTFRJVURQU0lOSyAob2JqZWN0KTsKLQotICBnX2xpc3RfZm9yZWFjaCAoc2luay0+Y2xpZW50cywgKEdGdW5jKSBnc3RfdWRwX2NsaWVudF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChzaW5rLT5jbGllbnRzKTsKLQotICBpZiAoc2luay0+c29ja2V0KQotICAgIGdfb2JqZWN0X3VucmVmIChzaW5rLT5zb2NrZXQpOwotICBzaW5rLT5zb2NrZXQgPSBOVUxMOwotCi0gIGlmIChzaW5rLT5zb2NrZXRfdjYpCi0gICAgZ19vYmplY3RfdW5yZWYgKHNpbmstPnNvY2tldF92Nik7Ci0gIHNpbmstPnNvY2tldF92NiA9IE5VTEw7Ci0KLSAgaWYgKHNpbmstPnVzZWRfc29ja2V0KQotICAgIGdfb2JqZWN0X3VucmVmIChzaW5rLT51c2VkX3NvY2tldCk7Ci0gIHNpbmstPnVzZWRfc29ja2V0ID0gTlVMTDsKLQotICBpZiAoc2luay0+dXNlZF9zb2NrZXRfdjYpCi0gICAgZ19vYmplY3RfdW5yZWYgKHNpbmstPnVzZWRfc29ja2V0X3Y2KTsKLSAgc2luay0+dXNlZF9zb2NrZXRfdjYgPSBOVUxMOwotCi0gIGdzdF9tdWx0aXVkcHNpbmtfZnJlZV9jYW5jZWxsYWJsZSAoc2luayk7Ci0KLSAgZ19mcmVlIChzaW5rLT5tdWx0aV9pZmFjZSk7Ci0gIHNpbmstPm11bHRpX2lmYWNlID0gTlVMTDsKLQotICBnX2ZyZWUgKHNpbmstPnZlY3MpOwotICBzaW5rLT52ZWNzID0gTlVMTDsKLSAgZ19mcmVlIChzaW5rLT5tYXBzKTsKLSAgc2luay0+bWFwcyA9IE5VTEw7Ci0gIGdfZnJlZSAoc2luay0+bWVzc2FnZXMpOwotICBzaW5rLT5tZXNzYWdlcyA9IE5VTEw7Ci0KLSAgZ19mcmVlIChzaW5rLT5iaW5kX2FkZHJlc3MpOwotICBzaW5rLT5iaW5kX2FkZHJlc3MgPSBOVUxMOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi0vKiByZXBsYWNlbWVudCB1bnRpbCB3ZSBjYW4gZGVwZW5kIHVuY29uZGl0aW9uYWxseSBvbiB0aGUgcmVhbCBvbmUgaW4gR0xpYiAqLwotI2lmbmRlZiBIQVZFX0dfU09DS0VUX1NFTkRfTUVTU0FHRVMKLSNkZWZpbmUgZ19zb2NrZXRfc2VuZF9tZXNzYWdlcyBnc3Rfc29ja2V0X3NlbmRfbWVzc2FnZXMKLQotc3RhdGljIGdpbnQKLWdzdF9zb2NrZXRfc2VuZF9tZXNzYWdlcyAoR1NvY2tldCAqIHNvY2tldCwgR3N0T3V0cHV0TWVzc2FnZSAqIG1lc3NhZ2VzLAotICAgIGd1aW50IG51bV9tZXNzYWdlcywgZ2ludCBmbGFncywgR0NhbmNlbGxhYmxlICogY2FuY2VsbGFibGUsIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgZ3NzaXplIHJlc3VsdDsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fbWVzc2FnZXM7ICsraSkgewotICAgIEdzdE91dHB1dE1lc3NhZ2UgKm1zZyA9ICZtZXNzYWdlc1tpXTsKLSAgICBHRXJyb3IgKm1zZ19lcnJvciA9IE5VTEw7Ci0KLSAgICByZXN1bHQgPSBnX3NvY2tldF9zZW5kX21lc3NhZ2UgKHNvY2tldCwgbXNnLT5hZGRyZXNzLAotICAgICAgICBtc2ctPnZlY3RvcnMsIG1zZy0+bnVtX3ZlY3RvcnMsCi0gICAgICAgIG1zZy0+Y29udHJvbF9tZXNzYWdlcywgbXNnLT5udW1fY29udHJvbF9tZXNzYWdlcywKLSAgICAgICAgZmxhZ3MsIGNhbmNlbGxhYmxlLCAmbXNnX2Vycm9yKTsKLQotICAgIGlmIChyZXN1bHQgPCAwKSB7Ci0gICAgICAvKiBpZiB3ZSBjb3VsZG4ndCBzZW5kIGFsbCBtZXNzYWdlcywganVzdCByZXR1cm4gaG93IG1hbnkgd2UgZGlkCi0gICAgICAgKiBtYW5hZ2UgdG8gc2VuZCwgcHJvdmlkZWQgd2UgbWFuYWdlZCB0byBzZW5kIGF0IGxlYXN0IG9uZSAqLwotICAgICAgaWYgKG1zZ19lcnJvci0+Y29kZSA9PSBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLICYmIGkgPiAwKSB7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAobXNnX2Vycm9yKTsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG1zZ19lcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBtc2ctPmJ5dGVzX3NlbnQgPSByZXN1bHQ7Ci0gIH0KLQotICByZXR1cm4gaTsKLX0KLSNlbmRpZiAvKiBIQVZFX0dfU09DS0VUX1NFTkRfTUVTU0FHRVMgKi8KLQotc3RhdGljIGdzaXplCi1maWxsX3ZlY3RvcnMgKEdPdXRwdXRWZWN0b3IgKiB2ZWNzLCBHc3RNYXBJbmZvICogbWFwcywgZ3VpbnQgbiwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RNZW1vcnkgKm1lbTsKLSAgZ3NpemUgc2l6ZSA9IDA7Ci0gIGd1aW50IGk7Ci0KLSAgZ19hc3NlcnQgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZikgPT0gbik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewotICAgIG1lbSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkgKGJ1ZiwgaSk7Ci0gICAgaWYgKGdzdF9tZW1vcnlfbWFwIChtZW0sICZtYXBzW2ldLCBHU1RfTUFQX1JFQUQpKSB7Ci0gICAgICB2ZWNzW2ldLmJ1ZmZlciA9IG1hcHNbaV0uZGF0YTsKLSAgICAgIHZlY3NbaV0uc2l6ZSA9IG1hcHNbaV0uc2l6ZTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gbWFwIG1lbW9yeSAlcCBmb3IgcmVhZGluZyIsIG1lbSk7Ci0gICAgICB2ZWNzW2ldLmJ1ZmZlciA9ICIiOwotICAgICAgdmVjc1tpXS5zaXplID0gMDsKLSAgICB9Ci0gICAgc2l6ZSArPSB2ZWNzW2ldLnNpemU7Ci0gIH0KLQotICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGdzaXplCi1nc3RfdWRwX2NhbGNfbWVzc2FnZV9zaXplIChHc3RPdXRwdXRNZXNzYWdlICogbXNnKQotewotICBnc2l6ZSBzaXplID0gMDsKLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbXNnLT5udW1fdmVjdG9yczsgKytpKQotICAgIHNpemUgKz0gbXNnLT52ZWN0b3JzW2ldLnNpemU7Ci0KLSAgcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdWRwX21lc3NzYWdlc19maW5kX2ZpcnN0X25vdF9zZW50IChHc3RPdXRwdXRNZXNzYWdlICogbWVzc2FnZXMsCi0gICAgZ3VpbnQgbnVtX21lc3NhZ2VzKQotewotICBndWludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fbWVzc2FnZXM7ICsraSkgewotICAgIEdzdE91dHB1dE1lc3NhZ2UgKm1zZyA9ICZtZXNzYWdlc1tpXTsKLQotICAgIGlmIChtc2ctPmJ5dGVzX3NlbnQgPT0gMCAmJiBnc3RfdWRwX2NhbGNfbWVzc2FnZV9zaXplIChtc2cpID4gMCkKLSAgICAgIHJldHVybiBpOwotICB9Ci0KLSAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW5saW5lIGdjaGFyICoKLWdzdF91ZHBfYWRkcmVzc19nZXRfc3RyaW5nIChHU29ja2V0QWRkcmVzcyAqIGFkZHIsIGdjaGFyICogcywgZ3NpemUgc2l6ZSkKLXsKLSAgR0luZXRTb2NrZXRBZGRyZXNzICppc2EgPSBHX0lORVRfU09DS0VUX0FERFJFU1MgKGFkZHIpOwotICBHSW5ldEFkZHJlc3MgKmlhOwotICBnY2hhciAqYWRkcl9zdHI7Ci0KLSAgaWEgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MgKGlzYSk7Ci0gIGFkZHJfc3RyID0gZ19pbmV0X2FkZHJlc3NfdG9fc3RyaW5nIChpYSk7Ci0gIGdfc25wcmludGYgKHMsIHNpemUsICIlczoldSIsIGFkZHJfc3RyLCBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X3BvcnQgKGlzYSkpOwotICBnX2ZyZWUgKGFkZHJfc3RyKTsKLQotICByZXR1cm4gczsKLX0KLQotLyogV3JhcHBlciBhcm91bmQgZ19zb2NrZXRfc2VuZF9tZXNzYWdlcygpIHBsdXMgZXJyb3IgaGFuZGxpbmcgKGlnbm9yaW5nKS4KLSAqIFJldHVybnMgRkFMU0UgaWYgd2UgZ290IGNhbmNlbGxlZCwgb3RoZXJ3aXNlIFRSVUUuICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aXVkcHNpbmtfc2VuZF9tZXNzYWdlcyAoR3N0TXVsdGlVRFBTaW5rICogc2luaywgR1NvY2tldCAqIHNvY2tldCwKLSAgICBHc3RPdXRwdXRNZXNzYWdlICogbWVzc2FnZXMsIGd1aW50IG51bV9tZXNzYWdlcykKLXsKLSAgZ2Jvb2xlYW4gc2VudF9tYXhfc2l6ZV93YXJuaW5nID0gRkFMU0U7Ci0KLSAgd2hpbGUgKG51bV9tZXNzYWdlcyA+IDApIHsKLSAgICBnY2hhciBhc3RyWzY0XSBHX0dOVUNfVU5VU0VEOwotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICBndWludCBtc2dfc2l6ZSwgc2tpcCwgaTsKLSAgICBnaW50IHJldCwgZXJyX2lkeDsKLQotICAgIHJldCA9IGdfc29ja2V0X3NlbmRfbWVzc2FnZXMgKHNvY2tldCwgbWVzc2FnZXMsIG51bV9tZXNzYWdlcywgMCwKLSAgICAgICAgc2luay0+Y2FuY2VsbGFibGUsICZlcnIpOwotCi0gICAgaWYgKEdfVU5MSUtFTFkgKHJldCA8IDApKSB7Ci0gICAgICBHc3RPdXRwdXRNZXNzYWdlICptc2c7Ci0KLSAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMgKGVyciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKSB7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0KLSAgICAgIGVycl9pZHggPSBnc3RfdWRwX21lc3NzYWdlc19maW5kX2ZpcnN0X25vdF9zZW50IChtZXNzYWdlcywgbnVtX21lc3NhZ2VzKTsKLSAgICAgIGlmIChlcnJfaWR4IDwgMCkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIG1zZyA9ICZtZXNzYWdlc1tlcnJfaWR4XTsKLSAgICAgIG1zZ19zaXplID0gZ3N0X3VkcF9jYWxjX21lc3NhZ2Vfc2l6ZSAobXNnKTsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJlcnJvciBzZW5kaW5nICV1IGJ5dGVzIHRvIGNsaWVudCAlczogJXMiLCBtc2dfc2l6ZSwKLSAgICAgICAgICBnc3RfdWRwX2FkZHJlc3NfZ2V0X3N0cmluZyAobXNnLT5hZGRyZXNzLCBhc3RyLCBzaXplb2YgKGFzdHIpKSwKLSAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotCi0gICAgICBza2lwID0gMTsKLSAgICAgIGlmIChtc2dfc2l6ZSA+IFVEUF9NQVhfU0laRSkgewotICAgICAgICBpZiAoIXNlbnRfbWF4X3NpemVfd2FybmluZykgewotICAgICAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNpbmssIFJFU09VUkNFLCBXUklURSwKLSAgICAgICAgICAgICAgKCJBdHRlbXB0aW5nIHRvIHNlbmQgYSBVRFAgcGFja2V0cyBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemUgIgotICAgICAgICAgICAgICAgICAgIigldSA+ICVkKSIsIG1zZ19zaXplLCBVRFBfTUFYX1NJWkUpLAotICAgICAgICAgICAgICAoIlJlYXNvbjogJXMiLCBlcnIgPyBlcnItPm1lc3NhZ2UgOiAidW5rbm93biByZWFzb24iKSk7Ci0gICAgICAgICAgc2VudF9tYXhfc2l6ZV93YXJuaW5nID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNpbmssIFJFU09VUkNFLCBXUklURSwKLSAgICAgICAgICAgICgiRXJyb3Igc2VuZGluZyBVRFAgcGFja2V0cyIpLCAoImNsaWVudCAlcywgcmVhc29uOiAlcyIsCi0gICAgICAgICAgICAgICAgZ3N0X3VkcF9hZGRyZXNzX2dldF9zdHJpbmcgKG1zZy0+YWRkcmVzcywgYXN0ciwgc2l6ZW9mIChhc3RyKSksCi0gICAgICAgICAgICAgICAgKGVyciAhPSBOVUxMKSA/IGVyci0+bWVzc2FnZSA6ICJ1bmtub3duIHJlYXNvbiIpKTsKLQotICAgICAgICBmb3IgKGkgPSBlcnJfaWR4ICsgMTsgaSA8IG51bV9tZXNzYWdlczsgKytpLCArK3NraXApIHsKLSAgICAgICAgICBpZiAobWVzc2FnZXNbaV0uYWRkcmVzcyAhPSBtc2ctPmFkZHJlc3MpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic2tpcHBpbmcgJWQgbWVzc2FnZShzKSB0byBzYW1lIGNsaWVudCIsIHNraXApOwotICAgICAgfQotCi0gICAgICAvKiBpZ25vcmUgYW55IGVycm9ycyBhbmQgdHJ5IHNlbmRpbmcgdGhlIHJlc3QgKi8KLSAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgcmV0ID0gc2tpcDsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydCAocmV0IDw9IG51bV9tZXNzYWdlcyk7Ci0KLSAgICBtZXNzYWdlcyArPSByZXQ7Ci0gICAgbnVtX21lc3NhZ2VzIC09IHJldDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X211bHRpdWRwc2lua19yZW5kZXJfYnVmZmVycyAoR3N0TXVsdGlVRFBTaW5rICogc2luaywgR3N0QnVmZmVyICoqIGJ1ZmZlcnMsCi0gICAgZ3VpbnQgbnVtX2J1ZmZlcnMsIGd1aW50OCAqIG1lbV9udW1zLCBndWludCB0b3RhbF9tZW1fbnVtKQotewotICBHc3RPdXRwdXRNZXNzYWdlICptc2dzOwotICBnYm9vbGVhbiBzZW5kX2R1cGxpY2F0ZXM7Ci0gIEdzdFVEUENsaWVudCAqKmNsaWVudHM7Ci0gIEdPdXRwdXRWZWN0b3IgKnZlY3M7Ci0gIEdzdE1hcEluZm8gKm1hcF9pbmZvczsKLSAgR3N0Rmxvd1JldHVybiBmbG93X3JldDsKLSAgZ3VpbnQgbnVtX2FkZHJfdjQsIG51bV9hZGRyX3Y2OwotICBndWludCBudW1fYWRkciwgbnVtX21zZ3M7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgZ3VpbnQgaSwgaiwgbWVtOwotICBnc2l6ZSBzaXplID0gMDsKLSAgR0xpc3QgKmw7Ci0KLSAgc2VuZF9kdXBsaWNhdGVzID0gc2luay0+c2VuZF9kdXBsaWNhdGVzOwotCi0gIGdfbXV0ZXhfbG9jayAoJnNpbmstPmNsaWVudF9sb2NrKTsKLQotICBpZiAoc2VuZF9kdXBsaWNhdGVzKSB7Ci0gICAgbnVtX2FkZHJfdjQgPSBzaW5rLT5udW1fdjRfYWxsOwotICAgIG51bV9hZGRyX3Y2ID0gc2luay0+bnVtX3Y2X2FsbDsKLSAgfSBlbHNlIHsKLSAgICBudW1fYWRkcl92NCA9IHNpbmstPm51bV92NF91bmlxdWU7Ci0gICAgbnVtX2FkZHJfdjYgPSBzaW5rLT5udW1fdjZfdW5pcXVlOwotICB9Ci0gIG51bV9hZGRyID0gbnVtX2FkZHJfdjQgKyBudW1fYWRkcl92NjsKLQotICBpZiAobnVtX2FkZHIgPT0gMCkKLSAgICBnb3RvIG5vX2NsaWVudHM7Ci0KLSAgY2xpZW50cyA9IGdfbmV3YSAoR3N0VURQQ2xpZW50ICosIG51bV9hZGRyKTsKLSAgZm9yIChsID0gc2luay0+Y2xpZW50cywgaSA9IDA7IGwgIT0gTlVMTDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RVRFBDbGllbnQgKmNsaWVudCA9IGwtPmRhdGE7Ci0KLSAgICBjbGllbnRzW2krK10gPSBnc3RfdWRwX2NsaWVudF9yZWYgKGNsaWVudCk7Ci0gICAgZm9yIChqID0gMTsgc2VuZF9kdXBsaWNhdGVzICYmIGogPCBjbGllbnQtPmFkZF9jb3VudDsgKytqKQotICAgICAgY2xpZW50c1tpKytdID0gZ3N0X3VkcF9jbGllbnRfcmVmIChjbGllbnQpOwotICB9Ci0gIGdfYXNzZXJ0X2NtcHVpbnQgKGksID09LCBudW1fYWRkcik7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICIldSBidWZmZXJzLCAldSBtZW1vcmllcyAtPiB0byBiZSBzZW50IHRvICV1IGNsaWVudHMiLAotICAgICAgbnVtX2J1ZmZlcnMsIHRvdGFsX21lbV9udW0sIG51bV9hZGRyKTsKLQotICAvKiBlbnN1cmUgb3VyIHByZS1hbGxvY2F0ZWQgc2NyYXRjaCBzcGFjZSBhcnJheXMgYXJlIGxhcmdlIGVub3VnaCAqLwotICBpZiAoc2luay0+bl92ZWNzIDwgdG90YWxfbWVtX251bSkgewotICAgIHNpbmstPm5fdmVjcyA9IEdTVF9ST1VORF9VUF8xNiAodG90YWxfbWVtX251bSk7Ci0gICAgZ19mcmVlIChzaW5rLT52ZWNzKTsKLSAgICBzaW5rLT52ZWNzID0gZ19uZXcgKEdPdXRwdXRWZWN0b3IsIHNpbmstPm5fdmVjcyk7Ci0gIH0KLSAgdmVjcyA9IHNpbmstPnZlY3M7Ci0KLSAgaWYgKHNpbmstPm5fbWFwcyA8IHRvdGFsX21lbV9udW0pIHsKLSAgICBzaW5rLT5uX21hcHMgPSBHU1RfUk9VTkRfVVBfMTYgKHRvdGFsX21lbV9udW0pOwotICAgIGdfZnJlZSAoc2luay0+bWFwcyk7Ci0gICAgc2luay0+bWFwcyA9IGdfbmV3IChHc3RNYXBJbmZvLCBzaW5rLT5uX21hcHMpOwotICB9Ci0gIG1hcF9pbmZvcyA9IHNpbmstPm1hcHM7Ci0KLSAgbnVtX21zZ3MgPSBudW1fYWRkciAqIG51bV9idWZmZXJzOwotICBpZiAoc2luay0+bl9tZXNzYWdlcyA8IG51bV9tc2dzKSB7Ci0gICAgc2luay0+bl9tZXNzYWdlcyA9IEdTVF9ST1VORF9VUF8xNiAobnVtX21zZ3MpOwotICAgIGdfZnJlZSAoc2luay0+bWVzc2FnZXMpOwotICAgIHNpbmstPm1lc3NhZ2VzID0gZ19uZXcgKEdzdE91dHB1dE1lc3NhZ2UsIHNpbmstPm5fbWVzc2FnZXMpOwotICB9Ci0gIG1zZ3MgPSBzaW5rLT5tZXNzYWdlczsKLQotICAvKiBwb3B1bGF0ZSBmaXJzdCBudW1fYnVmZmVycyBtZXNzYWdlcyB3aXRoIG91dHB1dCB2ZWN0b3JzIGZvciB0aGUgYnVmZmVycyAqLwotICBmb3IgKGkgPSAwLCBtZW0gPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSkgewotICAgIHNpemUgKz0gZmlsbF92ZWN0b3JzICgmdmVjc1ttZW1dLCAmbWFwX2luZm9zW21lbV0sIG1lbV9udW1zW2ldLCBidWZmZXJzW2ldKTsKLSAgICBtc2dzW2ldLnZlY3RvcnMgPSAmdmVjc1ttZW1dOwotICAgIG1zZ3NbaV0ubnVtX3ZlY3RvcnMgPSBtZW1fbnVtc1tpXTsKLSAgICBtc2dzW2ldLm51bV9jb250cm9sX21lc3NhZ2VzID0gMDsKLSAgICBtc2dzW2ldLmJ5dGVzX3NlbnQgPSAwOwotICAgIG1zZ3NbaV0uY29udHJvbF9tZXNzYWdlcyA9IE5VTEw7Ci0gICAgbXNnc1tpXS5hZGRyZXNzID0gY2xpZW50c1swXS0+YWRkcjsKLSAgICBtZW0gKz0gbWVtX251bXNbaV07Ci0gIH0KLQotICAvKiBGSVhNRTogaG93IGFib3V0IHNvbWUgbG9ja2luZz8gKHRoZXJlIHdhc24ndCBhbnkgYmVmb3JlIGVpdGhlciwgYnV0Li4pICovCi0gIHNpbmstPmJ5dGVzX3RvX3NlcnZlICs9IHNpemU7Ci0KLSAgLyogbm93IGNvcHkgdGhlIHByZS1maWxsZWQgbnVtX2J1ZmZlciBtZXNzYWdlcyBvdmVyIHRvIHRoZSBuZXh0IG51bV9idWZmZXIKLSAgICogbWVzc2FnZXMgZm9yIHRoZSBuZXh0IGNsaWVudCwgd2hlcmUgd2UgYWxzbyBjaGFuZ2UgdGhlIHRhcmdldCBhZGRkcmVzcyAqLwotICBmb3IgKGkgPSAxOyBpIDwgbnVtX2FkZHI7ICsraSkgewotICAgIGZvciAoaiA9IDA7IGogPCBudW1fYnVmZmVyczsgKytqKSB7Ci0gICAgICBtc2dzW2kgKiBudW1fYnVmZmVycyArIGpdID0gbXNnc1tqXTsKLSAgICAgIG1zZ3NbaSAqIG51bV9idWZmZXJzICsgal0uYWRkcmVzcyA9IGNsaWVudHNbaV0tPmFkZHI7Ci0gICAgfQotICB9Ci0KLSAgLyogbm93IHNlbmQgaXQhICovCi0gIHsKLSAgICBnYm9vbGVhbiByZXQ7Ci0KLSAgICAvKiBubyBJUHY0IHNvY2tldD8gU2VuZCBpdCBhbGwgZnJvbSB0aGUgSVB2NiBzb2NrZXQgdGhlbi4uICovCi0gICAgaWYgKHNpbmstPnVzZWRfc29ja2V0ID09IE5VTEwpIHsKLSAgICAgIHJldCA9IGdzdF9tdWx0aXVkcHNpbmtfc2VuZF9tZXNzYWdlcyAoc2luaywgc2luay0+dXNlZF9zb2NrZXRfdjYsCi0gICAgICAgICAgbXNncywgbnVtX21zZ3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICBndWludCBudW1fbXNnc192NCA9IG51bV9idWZmZXJzICogbnVtX2FkZHJfdjQ7Ci0gICAgICBndWludCBudW1fbXNnc192NiA9IG51bV9idWZmZXJzICogbnVtX2FkZHJfdjY7Ci0KLSAgICAgIC8qIG91ciBjbGllbnQgbGlzdCBpcyBzb3J0ZWQgd2l0aCBJUHY0IGNsaWVudHMgZmlyc3QgYW5kIElQdjYgb25lcyBsYXN0ICovCi0gICAgICByZXQgPSBnc3RfbXVsdGl1ZHBzaW5rX3NlbmRfbWVzc2FnZXMgKHNpbmssIHNpbmstPnVzZWRfc29ja2V0LAotICAgICAgICAgIG1zZ3MsIG51bV9tc2dzX3Y0KTsKLQotICAgICAgaWYgKCFyZXQpCi0gICAgICAgIGdvdG8gY2FuY2VsbGVkOwotCi0gICAgICByZXQgPSBnc3RfbXVsdGl1ZHBzaW5rX3NlbmRfbWVzc2FnZXMgKHNpbmssIHNpbmstPnVzZWRfc29ja2V0X3Y2LAotICAgICAgICAgIG1zZ3MgKyBudW1fbXNnc192NCwgbnVtX21zZ3NfdjYpOwotICAgIH0KLQotICAgIGlmICghcmV0KQotICAgICAgZ290byBjYW5jZWxsZWQ7Ci0gIH0KLQotICBmbG93X3JldCA9IEdTVF9GTE9XX09LOwotCi0gIC8qIG5vdyB1cGRhdGUgc3RhdHMgKi8KLSAgZ19tdXRleF9sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fYWRkcjsgKytpKSB7Ci0gICAgR3N0VURQQ2xpZW50ICpjbGllbnQgPSBjbGllbnRzW2ldOwotCi0gICAgZm9yIChqID0gMDsgaiA8IG51bV9idWZmZXJzOyArK2opIHsKLSAgICAgIGdzaXplIGJ5dGVzX3NlbnQ7Ci0KLSAgICAgIGJ5dGVzX3NlbnQgPSBtc2dzW2kgKiBudW1fYnVmZmVycyArIGpdLmJ5dGVzX3NlbnQ7Ci0KLSAgICAgIGNsaWVudC0+Ynl0ZXNfc2VudCArPSBieXRlc19zZW50OwotICAgICAgY2xpZW50LT5wYWNrZXRzX3NlbnQrKzsKLSAgICAgIHNpbmstPmJ5dGVzX3NlcnZlZCArPSBieXRlc19zZW50OwotICAgIH0KLSAgICBnc3RfdWRwX2NsaWVudF91bnJlZiAoY2xpZW50KTsKLSAgfQotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi1vdXQ6Ci0KLSAgZm9yIChpID0gMDsgaSA8IG1lbTsgKytpKQotICAgIGdzdF9tZW1vcnlfdW5tYXAgKG1hcF9pbmZvc1tpXS5tZW1vcnksICZtYXBfaW5mb3NbaV0pOwotCi0gIHJldHVybiBmbG93X3JldDsKLQotbm9fY2xpZW50czoKLSAgewotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotICAgIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAibm8gY2xpZW50cyIpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotY2FuY2VsbGVkOgotICB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChzaW5rLCAiY2FuY2VsbGVkIik7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZmxvd19yZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLQotICAgIGdfbXV0ZXhfbG9jayAoJnNpbmstPmNsaWVudF9sb2NrKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2FkZHI7ICsraSkKLSAgICAgIGdzdF91ZHBfY2xpZW50X3VucmVmIChjbGllbnRzW2ldKTsKLSAgICBnX211dGV4X3VubG9jayAoJnNpbmstPmNsaWVudF9sb2NrKTsKLSAgICBnb3RvIG91dDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X211bHRpdWRwc2lua19yZW5kZXJfbGlzdCAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0QnVmZmVyTGlzdCAqIGJ1ZmZlcl9saXN0KQotewotICBHc3RNdWx0aVVEUFNpbmsgKnNpbms7Ci0gIEdzdEJ1ZmZlciAqKmJ1ZmZlcnM7Ci0gIEdzdEZsb3dSZXR1cm4gZmxvdzsKLSAgZ3VpbnQ4ICptZW1fbnVtczsKLSAgZ3VpbnQgdG90YWxfbWVtczsKLSAgZ3VpbnQgaSwgbnVtX2J1ZmZlcnM7Ci0KLSAgc2luayA9IEdTVF9NVUxUSVVEUFNJTktfQ0FTVCAoYnNpbmspOwotCi0gIG51bV9idWZmZXJzID0gZ3N0X2J1ZmZlcl9saXN0X2xlbmd0aCAoYnVmZmVyX2xpc3QpOwotICBpZiAobnVtX2J1ZmZlcnMgPT0gMCkKLSAgICBnb3RvIG5vX2RhdGE7Ci0KLSAgYnVmZmVycyA9IGdfbmV3YSAoR3N0QnVmZmVyICosIG51bV9idWZmZXJzKTsKLSAgbWVtX251bXMgPSBnX25ld2EgKGd1aW50OCwgbnVtX2J1ZmZlcnMpOwotICBmb3IgKGkgPSAwLCB0b3RhbF9tZW1zID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBidWZmZXJzW2ldID0gZ3N0X2J1ZmZlcl9saXN0X2dldCAoYnVmZmVyX2xpc3QsIGkpOwotICAgIG1lbV9udW1zW2ldID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmZmVyc1tpXSk7Ci0gICAgdG90YWxfbWVtcyArPSBtZW1fbnVtc1tpXTsKLSAgfQotCi0gIGZsb3cgPSBnc3RfbXVsdGl1ZHBzaW5rX3JlbmRlcl9idWZmZXJzIChzaW5rLCBidWZmZXJzLCBudW1fYnVmZmVycywKLSAgICAgIG1lbV9udW1zLCB0b3RhbF9tZW1zKTsKLQotICByZXR1cm4gZmxvdzsKLQotbm9fZGF0YToKLSAgewotICAgIEdTVF9MT0dfT0JKRUNUIChzaW5rLCAiZW1wdHkgYnVmZmVyIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfbXVsdGl1ZHBzaW5rX3JlbmRlciAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RNdWx0aVVEUFNpbmsgKnNpbms7Ci0gIEdzdEZsb3dSZXR1cm4gZmxvdzsKLSAgZ3VpbnQ4IG5fbWVtOwotCi0gIHNpbmsgPSBHU1RfTVVMVElVRFBTSU5LX0NBU1QgKGJzaW5rKTsKLQotICBuX21lbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZmZlcik7Ci0KLSAgaWYgKG5fbWVtID4gMCkKLSAgICBmbG93ID0gZ3N0X211bHRpdWRwc2lua19yZW5kZXJfYnVmZmVycyAoc2luaywgJmJ1ZmZlciwgMSwgJm5fbWVtLCBuX21lbSk7Ci0gIGVsc2UKLSAgICBmbG93ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgcmV0dXJuIGZsb3c7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfbXVsdGl1ZHBzaW5rX3NldF9jbGllbnRzX3N0cmluZyAoR3N0TXVsdGlVRFBTaW5rICogc2luaywKLSAgICBjb25zdCBnY2hhciAqIHN0cmluZykKLXsKLSAgZ2NoYXIgKipjbGllbnRzOwotICBnaW50IGk7Ci0KLSAgY2xpZW50cyA9IGdfc3Ryc3BsaXQgKHN0cmluZywgIiwiLCAwKTsKLQotICBnX211dGV4X2xvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0gIC8qIGNsZWFyIGFsbCBleGlzdGluZyBjbGllbnRzICovCi0gIGdzdF9tdWx0aXVkcHNpbmtfY2xlYXJfaW50ZXJuYWwgKHNpbmssIEZBTFNFKTsKLSAgZm9yIChpID0gMDsgY2xpZW50c1tpXTsgaSsrKSB7Ci0gICAgZ2NoYXIgKmhvc3QsICpwOwotICAgIGdpbnQ2NCBwb3J0ID0gMDsKLQotICAgIGhvc3QgPSBjbGllbnRzW2ldOwotICAgIHAgPSBzdHJzdHIgKGNsaWVudHNbaV0sICI6Iik7Ci0gICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgKnAgPSAnXDAnOwotICAgICAgcG9ydCA9IGdfYXNjaWlfc3RydG9sbCAocCArIDEsIE5VTEwsIDEwKTsKLSAgICB9Ci0gICAgaWYgKHBvcnQgIT0gMCkKLSAgICAgIGdzdF9tdWx0aXVkcHNpbmtfYWRkX2ludGVybmFsIChzaW5rLCBob3N0LCBwb3J0LCBGQUxTRSk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0KLSAgZ19zdHJmcmVldiAoY2xpZW50cyk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1nc3RfbXVsdGl1ZHBzaW5rX2dldF9jbGllbnRzX3N0cmluZyAoR3N0TXVsdGlVRFBTaW5rICogc2luaykKLXsKLSAgR1N0cmluZyAqc3RyOwotICBHTGlzdCAqY2xpZW50czsKLQotICBzdHIgPSBnX3N0cmluZ19uZXcgKCIiKTsKLQotICBnX211dGV4X2xvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0gIGNsaWVudHMgPSBzaW5rLT5jbGllbnRzOwotICB3aGlsZSAoY2xpZW50cykgewotICAgIEdzdFVEUENsaWVudCAqY2xpZW50OwotICAgIGdpbnQgY291bnQ7Ci0KLSAgICBjbGllbnQgPSAoR3N0VURQQ2xpZW50ICopIGNsaWVudHMtPmRhdGE7Ci0KLSAgICBjbGllbnRzID0gZ19saXN0X25leHQgKGNsaWVudHMpOwotCi0gICAgY291bnQgPSBjbGllbnQtPmFkZF9jb3VudDsKLSAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyLCAiJXM6JWQlcyIsIGNsaWVudC0+aG9zdCwgY2xpZW50LT5wb3J0LAotICAgICAgICAgIChjbGllbnRzIHx8IGNvdW50ID4gMSA/ICIsIiA6ICIiKSk7Ci0gICAgfQotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi0gIHJldHVybiBnX3N0cmluZ19mcmVlIChzdHIsIEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfc2V0dXBfcW9zX2RzY3AgKEdzdE11bHRpVURQU2luayAqIHNpbmssIEdTb2NrZXQgKiBzb2NrZXQpCi17Ci0gIC8qIGRvbid0IHRvdWNoIG9uIC0xICovCi0gIGlmIChzaW5rLT5xb3NfZHNjcCA8IDApCi0gICAgcmV0dXJuOwotCi0gIGlmIChzb2NrZXQgPT0gTlVMTCkKLSAgICByZXR1cm47Ci0KLSNpZmRlZiBJUF9UT1MKLSAgewotICAgIGdpbnQgdG9zOwotICAgIGdpbnQgZmQ7Ci0KLSAgICBmZCA9IGdfc29ja2V0X2dldF9mZCAoc29ja2V0KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJzZXR0aW5nIFRPUyB0byAlZCIsIHNpbmstPnFvc19kc2NwKTsKLQotICAgIC8qIEV4dHJhY3QgYW5kIHNoaWZ0IDYgYml0cyBvZiBEU0ZJRUxEICovCi0gICAgdG9zID0gKHNpbmstPnFvc19kc2NwICYgMHgzZikgPDwgMjsKLQotICAgIGlmIChzZXRzb2Nrb3B0IChmZCwgSVBQUk9UT19JUCwgSVBfVE9TLCAmdG9zLCBzaXplb2YgKHRvcykpIDwgMCkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoc2luaywgImNvdWxkIG5vdCBzZXQgVE9TOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgfQotI2lmZGVmIElQVjZfVENMQVNTCi0gICAgaWYgKHNldHNvY2tvcHQgKGZkLCBJUFBST1RPX0lQVjYsIElQVjZfVENMQVNTLCAmdG9zLCBzaXplb2YgKHRvcykpIDwgMCkgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoc2luaywgImNvdWxkIG5vdCBzZXQgVENMQVNTOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpdWRwc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0TXVsdGlVRFBTaW5rICp1ZHBzaW5rOwotCi0gIHVkcHNpbmsgPSBHU1RfTVVMVElVRFBTSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9TT0NLRVQ6Ci0gICAgICBpZiAodWRwc2luay0+c29ja2V0ICE9IE5VTEwgJiYgdWRwc2luay0+c29ja2V0ICE9IHVkcHNpbmstPnVzZWRfc29ja2V0ICYmCi0gICAgICAgICAgdWRwc2luay0+Y2xvc2Vfc29ja2V0KSB7Ci0gICAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgICAgICBpZiAoIWdfc29ja2V0X2Nsb3NlICh1ZHBzaW5rLT5zb2NrZXQsICZlcnIpKSB7Ci0gICAgICAgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIGNsb3NlIHNvY2tldCAlcDogJXMiLCB1ZHBzaW5rLT5zb2NrZXQsCi0gICAgICAgICAgICAgIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICh1ZHBzaW5rLT5zb2NrZXQpCi0gICAgICAgIGdfb2JqZWN0X3VucmVmICh1ZHBzaW5rLT5zb2NrZXQpOwotICAgICAgdWRwc2luay0+c29ja2V0ID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh1ZHBzaW5rLCAic2V0dGluZyBzb2NrZXQgdG8gJXAiLCB1ZHBzaW5rLT5zb2NrZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPQ0tFVF9WNjoKLSAgICAgIGlmICh1ZHBzaW5rLT5zb2NrZXRfdjYgIT0gTlVMTAotICAgICAgICAgICYmIHVkcHNpbmstPnNvY2tldF92NiAhPSB1ZHBzaW5rLT51c2VkX3NvY2tldF92NgotICAgICAgICAgICYmIHVkcHNpbmstPmNsb3NlX3NvY2tldCkgewotICAgICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKCFnX3NvY2tldF9jbG9zZSAodWRwc2luay0+c29ja2V0X3Y2LCAmZXJyKSkgewotICAgICAgICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjbG9zZSBzb2NrZXQgJXA6ICVzIiwgdWRwc2luay0+c29ja2V0X3Y2LAotICAgICAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAodWRwc2luay0+c29ja2V0X3Y2KQotICAgICAgICBnX29iamVjdF91bnJlZiAodWRwc2luay0+c29ja2V0X3Y2KTsKLSAgICAgIHVkcHNpbmstPnNvY2tldF92NiA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodWRwc2luaywgInNldHRpbmcgc29ja2V0IHRvICVwIiwgdWRwc2luay0+c29ja2V0X3Y2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTE9TRV9TT0NLRVQ6Ci0gICAgICB1ZHBzaW5rLT5jbG9zZV9zb2NrZXQgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xJRU5UUzoKLSAgICAgIGdzdF9tdWx0aXVkcHNpbmtfc2V0X2NsaWVudHNfc3RyaW5nICh1ZHBzaW5rLCBnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT19NVUxUSUNBU1Q6Ci0gICAgICB1ZHBzaW5rLT5hdXRvX211bHRpY2FzdCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NVUxUSUNBU1RfSUZBQ0U6Ci0gICAgICBnX2ZyZWUgKHVkcHNpbmstPm11bHRpX2lmYWNlKTsKLQotICAgICAgaWYgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpID09IE5VTEwpCi0gICAgICAgIHVkcHNpbmstPm11bHRpX2lmYWNlID0gZ19zdHJkdXAgKERFRkFVTFRfTVVMVElDQVNUX0lGQUNFKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdWRwc2luay0+bXVsdGlfaWZhY2UgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UVEw6Ci0gICAgICB1ZHBzaW5rLT50dGwgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UVExfTUM6Ci0gICAgICB1ZHBzaW5rLT50dGxfbWMgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9MT09QOgotICAgICAgdWRwc2luay0+bG9vcCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GT1JDRV9JUFY0OgotICAgICAgdWRwc2luay0+Zm9yY2VfaXB2NCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9RT1NfRFNDUDoKLSAgICAgIHVkcHNpbmstPnFvc19kc2NwID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBnc3RfbXVsdGl1ZHBzaW5rX3NldHVwX3Fvc19kc2NwICh1ZHBzaW5rLCB1ZHBzaW5rLT51c2VkX3NvY2tldCk7Ci0gICAgICBnc3RfbXVsdGl1ZHBzaW5rX3NldHVwX3Fvc19kc2NwICh1ZHBzaW5rLCB1ZHBzaW5rLT51c2VkX3NvY2tldF92Nik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0VORF9EVVBMSUNBVEVTOgotICAgICAgdWRwc2luay0+c2VuZF9kdXBsaWNhdGVzID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JVRkZFUl9TSVpFOgotICAgICAgdWRwc2luay0+YnVmZmVyX3NpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSU5EX0FERFJFU1M6Ci0gICAgICBnX2ZyZWUgKHVkcHNpbmstPmJpbmRfYWRkcmVzcyk7Ci0gICAgICB1ZHBzaW5rLT5iaW5kX2FkZHJlc3MgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9CSU5EX1BPUlQ6Ci0gICAgICB1ZHBzaW5rLT5iaW5kX3BvcnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE11bHRpVURQU2luayAqdWRwc2luazsKLQotICB1ZHBzaW5rID0gR1NUX01VTFRJVURQU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQllURVNfVE9fU0VSVkU6Ci0gICAgICBnX3ZhbHVlX3NldF91aW50NjQgKHZhbHVlLCB1ZHBzaW5rLT5ieXRlc190b19zZXJ2ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQllURVNfU0VSVkVEOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgdWRwc2luay0+Ynl0ZXNfc2VydmVkKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TT0NLRVQ6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCB1ZHBzaW5rLT5zb2NrZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPQ0tFVF9WNjoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHVkcHNpbmstPnNvY2tldF92Nik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xPU0VfU09DS0VUOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHVkcHNpbmstPmNsb3NlX3NvY2tldCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFRF9TT0NLRVQ6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCB1ZHBzaW5rLT51c2VkX3NvY2tldCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFRF9TT0NLRVRfVjY6Ci0gICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCB1ZHBzaW5rLT51c2VkX3NvY2tldF92Nik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0xJRU5UUzoKLSAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKHZhbHVlLAotICAgICAgICAgIGdzdF9tdWx0aXVkcHNpbmtfZ2V0X2NsaWVudHNfc3RyaW5nICh1ZHBzaW5rKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT19NVUxUSUNBU1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgdWRwc2luay0+YXV0b19tdWx0aWNhc3QpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VTFRJQ0FTVF9JRkFDRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHVkcHNpbmstPm11bHRpX2lmYWNlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UVEw6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB1ZHBzaW5rLT50dGwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RUTF9NQzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHVkcHNpbmstPnR0bF9tYyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9PUDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB1ZHBzaW5rLT5sb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9GT1JDRV9JUFY0OgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHVkcHNpbmstPmZvcmNlX2lwdjQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1FPU19EU0NQOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdWRwc2luay0+cW9zX2RzY3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NFTkRfRFVQTElDQVRFUzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB1ZHBzaW5rLT5zZW5kX2R1cGxpY2F0ZXMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JVRkZFUl9TSVpFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdWRwc2luay0+YnVmZmVyX3NpemUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JJTkRfQUREUkVTUzoKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHVkcHNpbmstPmJpbmRfYWRkcmVzcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQklORF9QT1JUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdWRwc2luay0+YmluZF9wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXVsdGl1ZHBzaW5rX2NvbmZpZ3VyZV9jbGllbnQgKEdzdE11bHRpVURQU2luayAqIHNpbmssCi0gICAgR3N0VURQQ2xpZW50ICogY2xpZW50KQotewotICBHSW5ldFNvY2tldEFkZHJlc3MgKnNhZGRyID0gR19JTkVUX1NPQ0tFVF9BRERSRVNTIChjbGllbnQtPmFkZHIpOwotICBHSW5ldEFkZHJlc3MgKmFkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MgKHNhZGRyKTsKLSAgR1NvY2tldEZhbWlseSBmYW1pbHkgPSBnX3NvY2tldF9hZGRyZXNzX2dldF9mYW1pbHkgKEdfU09DS0VUX0FERFJFU1MgKHNhZGRyKSk7Ci0gIEdTb2NrZXQgKnNvY2tldDsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJjb25maWd1cmluZyBjbGllbnQgJXAiLCBjbGllbnQpOwotCi0gIGlmIChmYW1pbHkgPT0gR19TT0NLRVRfRkFNSUxZX0lQVjYgJiYgIXNpbmstPnVzZWRfc29ja2V0X3Y2KQotICAgIGdvdG8gaW52YWxpZF9mYW1pbHk7Ci0KLSAgLyogU2VsZWN0IHNvY2tldCB0byBzZW5kIGZyb20gZm9yIHRoaXMgYWRkcmVzcyAqLwotICBpZiAoZmFtaWx5ID09IEdfU09DS0VUX0ZBTUlMWV9JUFY2IHx8ICFzaW5rLT51c2VkX3NvY2tldCkKLSAgICBzb2NrZXQgPSBzaW5rLT51c2VkX3NvY2tldF92NjsKLSAgZWxzZQotICAgIHNvY2tldCA9IHNpbmstPnVzZWRfc29ja2V0OwotCi0gIGlmIChnX2luZXRfYWRkcmVzc19nZXRfaXNfbXVsdGljYXN0IChhZGRyKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJ3ZSBoYXZlIGEgbXVsdGljYXN0IGNsaWVudCAlcCIsIGNsaWVudCk7Ci0gICAgaWYgKHNpbmstPmF1dG9fbXVsdGljYXN0KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiYXV0b2pvaW5pbmcgZ3JvdXAiKTsKLSAgICAgIGlmICghZ19zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAgKHNvY2tldCwgYWRkciwgRkFMU0UsCi0gICAgICAgICAgICAgIHNpbmstPm11bHRpX2lmYWNlLCAmZXJyKSkKLSAgICAgICAgZ290byBqb2luX2dyb3VwX2ZhaWxlZDsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgbG9vcCB0byAlZCIsIHNpbmstPmxvb3ApOwotICAgIGdfc29ja2V0X3NldF9tdWx0aWNhc3RfbG9vcGJhY2sgKHNvY2tldCwgc2luay0+bG9vcCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgdHRsIHRvICVkIiwgc2luay0+dHRsX21jKTsKLSAgICBnX3NvY2tldF9zZXRfbXVsdGljYXN0X3R0bCAoc29ja2V0LCBzaW5rLT50dGxfbWMpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJzZXR0aW5nIHVuaWNhc3QgdHRsIHRvICVkIiwgc2luay0+dHRsKTsKLSAgICBnX3NvY2tldF9zZXRfdHRsIChzb2NrZXQsIHNpbmstPnR0bCk7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1qb2luX2dyb3VwX2ZhaWxlZDoKLSAgewotICAgIGdzdF9tdWx0aXVkcHNpbmtfc3RvcCAoR1NUX0JBU0VfU0lOSyAoc2luaykpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3Qgam9pbiBtdWx0aWNhc3QgZ3JvdXA6ICVzIiwKLSAgICAgICAgICAgIGVyciA/IGVyci0+bWVzc2FnZSA6ICJ1bmtub3duIHJlYXNvbiIpKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfZmFtaWx5OgotICB7Ci0gICAgZ3N0X211bHRpdWRwc2lua19zdG9wIChHU1RfQkFTRV9TSU5LIChzaW5rKSk7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkludmFsaWQgYWRkcmVzcyBmYW1pbHkgKGdvdCAlZCkiLCBmYW1pbHkpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogY3JlYXRlIGEgc29ja2V0IGZvciBzZW5kaW5nIHRvIHJlbW90ZSBtYWNoaW5lICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tdWx0aXVkcHNpbmtfc3RhcnQgKEdzdEJhc2VTaW5rICogYnNpbmspCi17Ci0gIEdzdE11bHRpVURQU2luayAqc2luazsKLSAgR0xpc3QgKmNsaWVudHM7Ci0gIEdzdFVEUENsaWVudCAqY2xpZW50OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgc2luayA9IEdTVF9NVUxUSVVEUFNJTksgKGJzaW5rKTsKLQotICBzaW5rLT5leHRlcm5hbF9zb2NrZXQgPSBGQUxTRTsKLQotICBpZiAoc2luay0+c29ja2V0KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInVzaW5nIGNvbmZpZ3VyZWQgc29ja2V0Iik7Ci0gICAgaWYgKGdfc29ja2V0X2dldF9mYW1pbHkgKHNpbmstPnNvY2tldCkgPT0gR19TT0NLRVRfRkFNSUxZX0lQVjYpIHsKLSAgICAgIHNpbmstPnVzZWRfc29ja2V0X3Y2ID0gR19TT0NLRVQgKGdfb2JqZWN0X3JlZiAoc2luay0+c29ja2V0KSk7Ci0gICAgICBzaW5rLT5leHRlcm5hbF9zb2NrZXQgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBzaW5rLT51c2VkX3NvY2tldCA9IEdfU09DS0VUIChnX29iamVjdF9yZWYgKHNpbmstPnNvY2tldCkpOwotICAgICAgc2luay0+ZXh0ZXJuYWxfc29ja2V0ID0gVFJVRTsKLSAgICB9Ci0gIH0KLQotICBpZiAoc2luay0+c29ja2V0X3Y2KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInVzaW5nIGNvbmZpZ3VyZWQgSVB2NiBzb2NrZXQiKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoIXNpbmstPnNvY2tldCB8fCBnX3NvY2tldF9nZXRfZmFtaWx5IChzaW5rLT5zb2NrZXQpICE9Ci0gICAgICAgIEdfU09DS0VUX0ZBTUlMWV9JUFY2LCBGQUxTRSk7Ci0KLSAgICBpZiAoc2luay0+dXNlZF9zb2NrZXRfdjYgJiYgc2luay0+dXNlZF9zb2NrZXRfdjYgIT0gc2luay0+c29ja2V0X3Y2KSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChzaW5rLAotICAgICAgICAgICJQcm92aWRlZCBkaWZmZXJlbnQgSVB2NiBzb2NrZXRzIGluIHNvY2tldCBhbmQgc29ja2V0LXY2IHByb3BlcnRpZXMiKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzaW5rLT51c2VkX3NvY2tldF92NiA9IEdfU09DS0VUIChnX29iamVjdF9yZWYgKHNpbmstPnNvY2tldF92NikpOwotICAgIHNpbmstPmV4dGVybmFsX3NvY2tldCA9IFRSVUU7Ci0gIH0KLQotICBpZiAoIXNpbmstPnVzZWRfc29ja2V0ICYmICFzaW5rLT51c2VkX3NvY2tldF92NikgewotICAgIEdTb2NrZXRBZGRyZXNzICpiaW5kX2FkZHI7Ci0gICAgR0luZXRBZGRyZXNzICpiaW5kX2lhZGRyOwotCi0gICAgaWYgKHNpbmstPmJpbmRfYWRkcmVzcykgewotICAgICAgR1NvY2tldEZhbWlseSBmYW1pbHk7Ci0KLSAgICAgIGJpbmRfaWFkZHIgPSBnX2luZXRfYWRkcmVzc19uZXdfZnJvbV9zdHJpbmcgKHNpbmstPmJpbmRfYWRkcmVzcyk7Ci0gICAgICBpZiAoIWJpbmRfaWFkZHIpIHsKLSAgICAgICAgR0xpc3QgKnJlc3VsdHM7Ci0gICAgICAgIEdSZXNvbHZlciAqcmVzb2x2ZXI7Ci0KLSAgICAgICAgcmVzb2x2ZXIgPSBnX3Jlc29sdmVyX2dldF9kZWZhdWx0ICgpOwotICAgICAgICByZXN1bHRzID0KLSAgICAgICAgICAgIGdfcmVzb2x2ZXJfbG9va3VwX2J5X25hbWUgKHJlc29sdmVyLCBzaW5rLT5iaW5kX2FkZHJlc3MsCi0gICAgICAgICAgICBzaW5rLT5jYW5jZWxsYWJsZSwgJmVycik7Ci0gICAgICAgIGlmICghcmVzdWx0cykgewotICAgICAgICAgIGdfb2JqZWN0X3VucmVmIChyZXNvbHZlcik7Ci0gICAgICAgICAgZ290byBuYW1lX3Jlc29sdmU7Ci0gICAgICAgIH0KLSAgICAgICAgYmluZF9pYWRkciA9IEdfSU5FVF9BRERSRVNTIChnX29iamVjdF9yZWYgKHJlc3VsdHMtPmRhdGEpKTsKLSAgICAgICAgZ19yZXNvbHZlcl9mcmVlX2FkZHJlc3NlcyAocmVzdWx0cyk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmIChyZXNvbHZlcik7Ci0gICAgICB9Ci0KLSAgICAgIGJpbmRfYWRkciA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19uZXcgKGJpbmRfaWFkZHIsIHNpbmstPmJpbmRfcG9ydCk7Ci0gICAgICBnX29iamVjdF91bnJlZiAoYmluZF9pYWRkcik7Ci0gICAgICBmYW1pbHkgPSBnX3NvY2tldF9hZGRyZXNzX2dldF9mYW1pbHkgKEdfU09DS0VUX0FERFJFU1MgKGJpbmRfYWRkcikpOwotCi0gICAgICBpZiAoKHNpbmstPnVzZWRfc29ja2V0ID0KLSAgICAgICAgICAgICAgZ19zb2NrZXRfbmV3IChmYW1pbHksIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sCi0gICAgICAgICAgICAgICAgICBHX1NPQ0tFVF9QUk9UT0NPTF9VRFAsICZlcnIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmIChiaW5kX2FkZHIpOwotICAgICAgICBnb3RvIG5vX3NvY2tldDsKLSAgICAgIH0KLQotICAgICAgZ19zb2NrZXRfYmluZCAoc2luay0+dXNlZF9zb2NrZXQsIGJpbmRfYWRkciwgVFJVRSwgJmVycik7Ci0gICAgICBpZiAoZXJyICE9IE5VTEwpCi0gICAgICAgIGdvdG8gYmluZF9lcnJvcjsKLSAgICB9IGVsc2UgewotICAgICAgLyogY3JlYXRlIHNlbmRlciBzb2NrZXRzIGlmIG5vbmUgYXZhaWxhYmxlICovCi0gICAgICBpZiAoKHNpbmstPnVzZWRfc29ja2V0ID0gZ19zb2NrZXRfbmV3IChHX1NPQ0tFVF9GQU1JTFlfSVBWNCwKLSAgICAgICAgICAgICAgICAgIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sIEdfU09DS0VUX1BST1RPQ09MX1VEUCwgJmVycikpID09IE5VTEwpCi0gICAgICAgIGdvdG8gbm9fc29ja2V0OwotCi0gICAgICBiaW5kX2lhZGRyID0gZ19pbmV0X2FkZHJlc3NfbmV3X2FueSAoR19TT0NLRVRfRkFNSUxZX0lQVjQpOwotICAgICAgYmluZF9hZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX25ldyAoYmluZF9pYWRkciwgc2luay0+YmluZF9wb3J0KTsKLSAgICAgIGdfc29ja2V0X2JpbmQgKHNpbmstPnVzZWRfc29ja2V0LCBiaW5kX2FkZHIsIFRSVUUsICZlcnIpOwotICAgICAgZ19vYmplY3RfdW5yZWYgKGJpbmRfYWRkcik7Ci0gICAgICBnX29iamVjdF91bnJlZiAoYmluZF9pYWRkcik7Ci0gICAgICBpZiAoZXJyICE9IE5VTEwpCi0gICAgICAgIGdvdG8gYmluZF9lcnJvcjsKLQotICAgICAgaWYgKChzaW5rLT51c2VkX3NvY2tldF92NiA9IGdfc29ja2V0X25ldyAoR19TT0NLRVRfRkFNSUxZX0lQVjYsCi0gICAgICAgICAgICAgICAgICBHX1NPQ0tFVF9UWVBFX0RBVEFHUkFNLCBHX1NPQ0tFVF9QUk9UT0NPTF9VRFAsCi0gICAgICAgICAgICAgICAgICAmZXJyKSkgPT0gTlVMTCkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHNpbmssICJGYWlsZWQgdG8gY3JlYXRlIElQdjYgc29ja2V0OiAlcyIsCi0gICAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJpbmRfaWFkZHIgPSBnX2luZXRfYWRkcmVzc19uZXdfYW55IChHX1NPQ0tFVF9GQU1JTFlfSVBWNik7Ci0gICAgICAgIGJpbmRfYWRkciA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19uZXcgKGJpbmRfaWFkZHIsIHNpbmstPmJpbmRfcG9ydCk7Ci0gICAgICAgIGdfc29ja2V0X2JpbmQgKHNpbmstPnVzZWRfc29ja2V0X3Y2LCBiaW5kX2FkZHIsIFRSVUUsICZlcnIpOwotICAgICAgICBnX29iamVjdF91bnJlZiAoYmluZF9hZGRyKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKGJpbmRfaWFkZHIpOwotICAgICAgICBpZiAoZXJyICE9IE5VTEwpCi0gICAgICAgICAgZ290byBiaW5kX2Vycm9yOwotICAgICAgfQotICAgIH0KLSAgfQotI2lmZGVmIFNPX1NOREJVRgotICB7Ci0gICAgc29ja2xlbl90IGxlbjsKLSAgICBnaW50IHNuZHNpemUsIHJldDsKLQotICAgIGxlbiA9IHNpemVvZiAoc25kc2l6ZSk7Ci0gICAgaWYgKHNpbmstPmJ1ZmZlcl9zaXplICE9IDApIHsKLSAgICAgIHNuZHNpemUgPSBzaW5rLT5idWZmZXJfc2l6ZTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInNldHRpbmcgdWRwIGJ1ZmZlciBvZiAlZCBieXRlcyIsIHNuZHNpemUpOwotICAgICAgLyogc2V0IGJ1ZmZlciBzaXplLCBOb3RlIHRoYXQgb24gTGludXggdGhpcyBpcyB0eXBpY2FsbHkgbGltaXRlZCB0byBhCi0gICAgICAgKiBtYXhpbXVtIG9mIGFyb3VuZCAxMDBLLiBBbHNvIGEgbWluaW11bSBvZiAxMjggYnl0ZXMgaXMgcmVxdWlyZWQgb24KLSAgICAgICAqIExpbnV4LiAqLwotCi0gICAgICBpZiAoc2luay0+dXNlZF9zb2NrZXQpIHsKLSAgICAgICAgcmV0ID0KLSAgICAgICAgICAgIHNldHNvY2tvcHQgKGdfc29ja2V0X2dldF9mZCAoc2luay0+dXNlZF9zb2NrZXQpLCBTT0xfU09DS0VULAotICAgICAgICAgICAgU09fU05EQlVGLCAodm9pZCAqKSAmc25kc2l6ZSwgbGVuKTsKLSAgICAgICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICAgICAgICgiQ291bGQgbm90IGNyZWF0ZSBhIGJ1ZmZlciBvZiByZXF1ZXN0ZWQgJWQgYnl0ZXMsICVkOiAlcyIsCi0gICAgICAgICAgICAgICAgICBzbmRzaXplLCByZXQsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzaW5rLT51c2VkX3NvY2tldF92NikgewotICAgICAgICByZXQgPQotICAgICAgICAgICAgc2V0c29ja29wdCAoZ19zb2NrZXRfZ2V0X2ZkIChzaW5rLT51c2VkX3NvY2tldF92NiksIFNPTF9TT0NLRVQsCi0gICAgICAgICAgICBTT19TTkRCVUYsICh2b2lkICopICZzbmRzaXplLCBsZW4pOwotICAgICAgICBpZiAocmV0ICE9IDApIHsKLSAgICAgICAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChzaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgICAgICAgKCJDb3VsZCBub3QgY3JlYXRlIGEgYnVmZmVyIG9mIHJlcXVlc3RlZCAlZCBieXRlcywgJWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgIHNuZHNpemUsIHJldCwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiByZWFkIHRoZSB2YWx1ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIuIE5vdGUgdGhhdCBvbiBsaW51eCB0aGlzIHJldHVybnMgMnggdGhlCi0gICAgICogdmFsdWUgd2Ugc2V0IGJlY2F1c2UgdGhlIGtlcm5lbCBhbGxvY2F0ZXMgZXh0cmEgbWVtb3J5IGZvciBtZXRhZGF0YS4KLSAgICAgKiBUaGUgZGVmYXVsdCBvbiBMaW51eCBpcyBhYm91dCAxMDBLICh3aGljaCBpcyBhYm91dCA1MEsgd2l0aG91dCBtZXRhZGF0YSkgKi8KLSAgICBpZiAoc2luay0+dXNlZF9zb2NrZXQpIHsKLSAgICAgIHJldCA9Ci0gICAgICAgICAgZ2V0c29ja29wdCAoZ19zb2NrZXRfZ2V0X2ZkIChzaW5rLT51c2VkX3NvY2tldCksIFNPTF9TT0NLRVQsCi0gICAgICAgICAgU09fU05EQlVGLCAodm9pZCAqKSAmc25kc2l6ZSwgJmxlbik7Ci0gICAgICBpZiAocmV0ID09IDApCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJoYXZlIFVEUCBidWZmZXIgb2YgJWQgYnl0ZXMiLCBzbmRzaXplKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNvdWxkIG5vdCBnZXQgVURQIGJ1ZmZlciBzaXplIik7Ci0gICAgfQotCi0gICAgaWYgKHNpbmstPnVzZWRfc29ja2V0X3Y2KSB7Ci0gICAgICByZXQgPQotICAgICAgICAgIGdldHNvY2tvcHQgKGdfc29ja2V0X2dldF9mZCAoc2luay0+dXNlZF9zb2NrZXRfdjYpLCBTT0xfU09DS0VULAotICAgICAgICAgIFNPX1NOREJVRiwgKHZvaWQgKikgJnNuZHNpemUsICZsZW4pOwotICAgICAgaWYgKHJldCA9PSAwKQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiaGF2ZSBVRFB2NiBidWZmZXIgb2YgJWQgYnl0ZXMiLCBzbmRzaXplKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNvdWxkIG5vdCBnZXQgVURQdjYgYnVmZmVyIHNpemUiKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0jaWZkZWYgU09fQklORFRPREVWSUNFCi0gIGlmIChzaW5rLT5tdWx0aV9pZmFjZSkgewotICAgIGlmIChzaW5rLT51c2VkX3NvY2tldCkgewotICAgICAgaWYgKHNldHNvY2tvcHQgKGdfc29ja2V0X2dldF9mZCAoc2luay0+dXNlZF9zb2NrZXQpLCBTT0xfU09DS0VULAotICAgICAgICAgICAgICBTT19CSU5EVE9ERVZJQ0UsIHNpbmstPm11bHRpX2lmYWNlLAotICAgICAgICAgICAgICBzdHJsZW4gKHNpbmstPm11bHRpX2lmYWNlKSkgPCAwKQotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNpbmssICJzZXRzb2Nrb3B0IFNPX0JJTkRUT0RFVklDRSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgIHN0cmVycm9yIChlcnJubykpOwotICAgIH0KLSAgICBpZiAoc2luay0+dXNlZF9zb2NrZXRfdjYpIHsKLSAgICAgIGlmIChzZXRzb2Nrb3B0IChnX3NvY2tldF9nZXRfZmQgKHNpbmstPnVzZWRfc29ja2V0X3Y2KSwgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgU09fQklORFRPREVWSUNFLCBzaW5rLT5tdWx0aV9pZmFjZSwKLSAgICAgICAgICAgICAgc3RybGVuIChzaW5rLT5tdWx0aV9pZmFjZSkpIDwgMCkKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzaW5rLCAic2V0c29ja29wdCBTT19CSU5EVE9ERVZJQ0UgZmFpbGVkICh2Nik6ICVzIiwKLSAgICAgICAgICAgIHN0cmVycm9yIChlcnJubykpOwotICAgIH0KLSAgfQotI2VuZGlmCi0KLSAgaWYgKHNpbmstPnVzZWRfc29ja2V0KQotICAgIGdfc29ja2V0X3NldF9icm9hZGNhc3QgKHNpbmstPnVzZWRfc29ja2V0LCBUUlVFKTsKLSAgaWYgKHNpbmstPnVzZWRfc29ja2V0X3Y2KQotICAgIGdfc29ja2V0X3NldF9icm9hZGNhc3QgKHNpbmstPnVzZWRfc29ja2V0X3Y2LCBUUlVFKTsKLQotICBzaW5rLT5ieXRlc190b19zZXJ2ZSA9IDA7Ci0gIHNpbmstPmJ5dGVzX3NlcnZlZCA9IDA7Ci0KLSAgZ3N0X211bHRpdWRwc2lua19zZXR1cF9xb3NfZHNjcCAoc2luaywgc2luay0+dXNlZF9zb2NrZXQpOwotICBnc3RfbXVsdGl1ZHBzaW5rX3NldHVwX3Fvc19kc2NwIChzaW5rLCBzaW5rLT51c2VkX3NvY2tldF92Nik7Ci0KLSAgLyogbG9vayBmb3IgbXVsdGljYXN0IGNsaWVudHMgYW5kIGpvaW4gbXVsdGljYXN0IGdyb3VwcyBhcHByb3ByaWF0ZWx5Ci0gICAgIHNldCBhbHNvIHR0bCBhbmQgbXVsdGljYXN0IGxvb3BiYWNrIGRlbGl2ZXJ5IGFwcHJvcHJpYXRlbHkgICovCi0gIGZvciAoY2xpZW50cyA9IHNpbmstPmNsaWVudHM7IGNsaWVudHM7IGNsaWVudHMgPSBnX2xpc3RfbmV4dCAoY2xpZW50cykpIHsKLSAgICBjbGllbnQgPSAoR3N0VURQQ2xpZW50ICopIGNsaWVudHMtPmRhdGE7Ci0KLSAgICBpZiAoIWdzdF9tdWx0aXVkcHNpbmtfY29uZmlndXJlX2NsaWVudCAoc2luaywgY2xpZW50KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5vX3NvY2tldDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgRkFJTEVELCAoTlVMTCksCi0gICAgICAgICgiQ291bGQgbm90IGNyZWF0ZSBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1iaW5kX2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBGQUlMRUQsIChOVUxMKSwKLSAgICAgICAgKCJGYWlsZWQgdG8gYmluZCBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1uYW1lX3Jlc29sdmU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2luaywgUkVTT1VSQ0UsIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byByZXNvbHZlIGJpbmQgYWRkcmVzcyAlczogJXMiLCBzaW5rLT5iaW5kX2FkZHJlc3MsCi0gICAgICAgICAgICBlcnItPm1lc3NhZ2UpKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfbXVsdGl1ZHBzaW5rX3N0b3AgKEdzdEJhc2VTaW5rICogYnNpbmspCi17Ci0gIEdzdE11bHRpVURQU2luayAqdWRwc2luazsKLQotICB1ZHBzaW5rID0gR1NUX01VTFRJVURQU0lOSyAoYnNpbmspOwotCi0gIGlmICh1ZHBzaW5rLT51c2VkX3NvY2tldCkgewotICAgIGlmICh1ZHBzaW5rLT5jbG9zZV9zb2NrZXQgfHwgIXVkcHNpbmstPmV4dGVybmFsX3NvY2tldCkgewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gICAgICBpZiAoIWdfc29ja2V0X2Nsb3NlICh1ZHBzaW5rLT51c2VkX3NvY2tldCwgJmVycikpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAodWRwc2luaywgIkZhaWxlZCB0byBjbG9zZSBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYgKHVkcHNpbmstPnVzZWRfc29ja2V0KTsKLSAgICB1ZHBzaW5rLT51c2VkX3NvY2tldCA9IE5VTEw7Ci0gIH0KLQotICBpZiAodWRwc2luay0+dXNlZF9zb2NrZXRfdjYpIHsKLSAgICBpZiAodWRwc2luay0+Y2xvc2Vfc29ja2V0IHx8ICF1ZHBzaW5rLT5leHRlcm5hbF9zb2NrZXQpIHsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgICAgaWYgKCFnX3NvY2tldF9jbG9zZSAodWRwc2luay0+dXNlZF9zb2NrZXRfdjYsICZlcnIpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHVkcHNpbmssICJGYWlsZWQgdG8gY2xvc2Ugc29ja2V0OiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgfQotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmICh1ZHBzaW5rLT51c2VkX3NvY2tldF92Nik7Ci0gICAgdWRwc2luay0+dXNlZF9zb2NrZXRfdjYgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdWRwX2NsaWVudF9jb21wYXJlX3NvY2tldF9mYW1pbHkgKEdzdFVEUENsaWVudCAqIGEsIEdzdFVEUENsaWVudCAqIGIpCi17Ci0gIEdTb2NrZXRGYW1pbHkgZmEgPSBnX3NvY2tldF9hZGRyZXNzX2dldF9mYW1pbHkgKGEtPmFkZHIpOwotICBHU29ja2V0RmFtaWx5IGZiID0gZ19zb2NrZXRfYWRkcmVzc19nZXRfZmFtaWx5IChiLT5hZGRyKTsKLQotICBpZiAoZmEgPT0gZmIpCi0gICAgcmV0dXJuIDA7Ci0KLSAgLyogYSBzaG91bGQgZ28gYmVmb3JlIGIgKi8KLSAgaWYgKGZhID09IEdfU09DS0VUX0ZBTUlMWV9JUFY0ICYmIGZiID09IEdfU09DS0VUX0ZBTUlMWV9JUFY2KQotICAgIHJldHVybiAtMTsKLQotICAvKiBiIHNob3VsZCBnbyBiZWZvcmUgYSAqLwotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfYWRkX2ludGVybmFsIChHc3RNdWx0aVVEUFNpbmsgKiBzaW5rLCBjb25zdCBnY2hhciAqIGhvc3QsCi0gICAgZ2ludCBwb3J0LCBnYm9vbGVhbiBsb2NrKQotewotICBHU29ja2V0RmFtaWx5IGZhbWlseTsKLSAgR3N0VURQQ2xpZW50ICpjbGllbnQ7Ci0gIEdzdFVEUENsaWVudCB1ZHBjbGllbnQ7Ci0gIEdUaW1lVmFsIG5vdzsKLSAgR0xpc3QgKmZpbmQ7Ci0KLSAgdWRwY2xpZW50Lmhvc3QgPSAoZ2NoYXIgKikgaG9zdDsKLSAgdWRwY2xpZW50LnBvcnQgPSBwb3J0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJhZGRpbmcgY2xpZW50IG9uIGhvc3QgJXMsIHBvcnQgJWQiLCBob3N0LCBwb3J0KTsKLQotICBpZiAobG9jaykKLSAgICBnX211dGV4X2xvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0KLSAgZmluZCA9IGdfbGlzdF9maW5kX2N1c3RvbSAoc2luay0+Y2xpZW50cywgJnVkcGNsaWVudCwKLSAgICAgIChHQ29tcGFyZUZ1bmMpIGNsaWVudF9jb21wYXJlKTsKLQotICBpZiAoIWZpbmQpIHsKLSAgICBmaW5kID0gZ19saXN0X2ZpbmRfY3VzdG9tIChzaW5rLT5jbGllbnRzX3RvX2JlX3JlbW92ZWQsICZ1ZHBjbGllbnQsCi0gICAgICAgIChHQ29tcGFyZUZ1bmMpIGNsaWVudF9jb21wYXJlKTsKLSAgICBpZiAoZmluZCkKLSAgICAgIGdzdF91ZHBfY2xpZW50X3JlZiAoZmluZC0+ZGF0YSk7Ci0gIH0KLQotICBpZiAoZmluZCkgewotICAgIGNsaWVudCA9IChHc3RVRFBDbGllbnQgKikgZmluZC0+ZGF0YTsKLQotICAgIGZhbWlseSA9IGdfc29ja2V0X2FkZHJlc3NfZ2V0X2ZhbWlseSAoY2xpZW50LT5hZGRyKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJmb3VuZCAlZCBleGlzdGluZyBjbGllbnRzIHdpdGggaG9zdCAlcywgcG9ydCAlZCIsCi0gICAgICAgIGNsaWVudC0+YWRkX2NvdW50LCBob3N0LCBwb3J0KTsKLSAgfSBlbHNlIHsKLSAgICBjbGllbnQgPSBnc3RfdWRwX2NsaWVudF9uZXcgKHNpbmssIGhvc3QsIHBvcnQpOwotICAgIGlmICghY2xpZW50KQotICAgICAgZ290byBlcnJvcjsKLQotICAgIGZhbWlseSA9IGdfc29ja2V0X2FkZHJlc3NfZ2V0X2ZhbWlseSAoY2xpZW50LT5hZGRyKTsKLQotICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJm5vdyk7Ci0gICAgY2xpZW50LT5jb25uZWN0X3RpbWUgPSBHU1RfVElNRVZBTF9UT19USU1FIChub3cpOwotCi0gICAgaWYgKHNpbmstPnVzZWRfc29ja2V0KQotICAgICAgZ3N0X211bHRpdWRwc2lua19jb25maWd1cmVfY2xpZW50IChzaW5rLCBjbGllbnQpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImFkZCBjbGllbnQgd2l0aCBob3N0ICVzLCBwb3J0ICVkIiwgaG9zdCwgcG9ydCk7Ci0KLSAgICAvKiBrZWVwIElQdjQgY2xpZW50cyBhdCB0aGUgYmVnaW5uaW5nLCBhbmQgSVB2NiBhdCB0aGUgZW5kLCB3ZSBjYW4gbWFrZQotICAgICAqIHVzZSBvZiB0aGlzIGluIGdzdF9tdWx0aXVkcHNpbmtfcmVuZGVyX2J1ZmZlcnMoKSAqLwotICAgIHNpbmstPmNsaWVudHMgPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAoc2luay0+Y2xpZW50cywgY2xpZW50LAotICAgICAgICAoR0NvbXBhcmVGdW5jKSBnc3RfdWRwX2NsaWVudF9jb21wYXJlX3NvY2tldF9mYW1pbHkpOwotCi0gICAgaWYgKGZhbWlseSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNCkKLSAgICAgICsrc2luay0+bnVtX3Y0X3VuaXF1ZTsKLSAgICBlbHNlCi0gICAgICArK3NpbmstPm51bV92Nl91bmlxdWU7Ci0gIH0KLQotICArK2NsaWVudC0+YWRkX2NvdW50OwotCi0gIGlmIChmYW1pbHkgPT0gR19TT0NLRVRfRkFNSUxZX0lQVjQpCi0gICAgKytzaW5rLT5udW1fdjRfYWxsOwotICBlbHNlCi0gICAgKytzaW5rLT5udW1fdjZfYWxsOwotCi0gIGlmIChsb2NrKQotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi0gIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChzaW5rKSwKLSAgICAgIGdzdF9tdWx0aXVkcHNpbmtfc2lnbmFsc1tTSUdOQUxfQ0xJRU5UX0FEREVEXSwgMCwgaG9zdCwgcG9ydCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImFkZGVkIGNsaWVudCBvbiBob3N0ICVzLCBwb3J0ICVkIiwgaG9zdCwgcG9ydCk7Ci0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLWVycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImRpZCBub3QgYWRkIGNsaWVudCBvbiBob3N0ICVzLCBwb3J0ICVkIiwgaG9zdCwKLSAgICAgICAgcG9ydCk7Ci0gICAgaWYgKGxvY2spCi0gICAgICBnX211dGV4X3VubG9jayAoJnNpbmstPmNsaWVudF9sb2NrKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotdm9pZAotZ3N0X211bHRpdWRwc2lua19hZGQgKEdzdE11bHRpVURQU2luayAqIHNpbmssIGNvbnN0IGdjaGFyICogaG9zdCwgZ2ludCBwb3J0KQotewotICBnc3RfbXVsdGl1ZHBzaW5rX2FkZF9pbnRlcm5hbCAoc2luaywgaG9zdCwgcG9ydCwgVFJVRSk7Ci19Ci0KLXZvaWQKLWdzdF9tdWx0aXVkcHNpbmtfcmVtb3ZlIChHc3RNdWx0aVVEUFNpbmsgKiBzaW5rLCBjb25zdCBnY2hhciAqIGhvc3QsIGdpbnQgcG9ydCkKLXsKLSAgR1NvY2tldEZhbWlseSBmYW1pbHk7Ci0gIEdMaXN0ICpmaW5kOwotICBHc3RVRFBDbGllbnQgdWRwY2xpZW50OwotICBHc3RVRFBDbGllbnQgKmNsaWVudDsKLSAgR1RpbWVWYWwgbm93OwotCi0gIHVkcGNsaWVudC5ob3N0ID0gKGdjaGFyICopIGhvc3Q7Ci0gIHVkcGNsaWVudC5wb3J0ID0gcG9ydDsKLQotICBnX211dGV4X2xvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0gIGZpbmQgPSBnX2xpc3RfZmluZF9jdXN0b20gKHNpbmstPmNsaWVudHMsICZ1ZHBjbGllbnQsCi0gICAgICAoR0NvbXBhcmVGdW5jKSBjbGllbnRfY29tcGFyZSk7Ci0gIGlmICghZmluZCkKLSAgICBnb3RvIG5vdF9mb3VuZDsKLQotICBjbGllbnQgPSAoR3N0VURQQ2xpZW50ICopIGZpbmQtPmRhdGE7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImZvdW5kICVkIGNsaWVudHMgd2l0aCBob3N0ICVzLCBwb3J0ICVkIiwKLSAgICAgIGNsaWVudC0+YWRkX2NvdW50LCBob3N0LCBwb3J0KTsKLQotICAtLWNsaWVudC0+YWRkX2NvdW50OwotCi0gIGZhbWlseSA9IGdfc29ja2V0X2FkZHJlc3NfZ2V0X2ZhbWlseSAoY2xpZW50LT5hZGRyKTsKLSAgaWYgKGZhbWlseSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNCkKLSAgICAtLXNpbmstPm51bV92NF9hbGw7Ci0gIGVsc2UKLSAgICAtLXNpbmstPm51bV92Nl9hbGw7Ci0KLSAgaWYgKGNsaWVudC0+YWRkX2NvdW50ID09IDApIHsKLSAgICBHSW5ldFNvY2tldEFkZHJlc3MgKnNhZGRyID0gR19JTkVUX1NPQ0tFVF9BRERSRVNTIChjbGllbnQtPmFkZHIpOwotICAgIEdJbmV0QWRkcmVzcyAqYWRkciA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfYWRkcmVzcyAoc2FkZHIpOwotICAgIEdTb2NrZXQgKnNvY2tldDsKLQotICAgIC8qIFNlbGVjdCBzb2NrZXQgdG8gc2VuZCBmcm9tIGZvciB0aGlzIGFkZHJlc3MgKi8KLSAgICBpZiAoZmFtaWx5ID09IEdfU09DS0VUX0ZBTUlMWV9JUFY2IHx8ICFzaW5rLT51c2VkX3NvY2tldCkKLSAgICAgIHNvY2tldCA9IHNpbmstPnVzZWRfc29ja2V0X3Y2OwotICAgIGVsc2UKLSAgICAgIHNvY2tldCA9IHNpbmstPnVzZWRfc29ja2V0OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInJlbW92ZSBjbGllbnQgd2l0aCBob3N0ICVzLCBwb3J0ICVkIiwgaG9zdCwgcG9ydCk7Ci0KLSAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZub3cpOwotICAgIGNsaWVudC0+ZGlzY29ubmVjdF90aW1lID0gR1NUX1RJTUVWQUxfVE9fVElNRSAobm93KTsKLQotICAgIGlmIChzb2NrZXQgJiYgc2luay0+YXV0b19tdWx0aWNhc3QKLSAgICAgICAgJiYgZ19pbmV0X2FkZHJlc3NfZ2V0X2lzX211bHRpY2FzdCAoYWRkcikpIHsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgICAgaWYgKCFnX3NvY2tldF9sZWF2ZV9tdWx0aWNhc3RfZ3JvdXAgKHNvY2tldCwgYWRkciwgRkFMU0UsCi0gICAgICAgICAgICAgIHNpbmstPm11bHRpX2lmYWNlLCAmZXJyKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAiRmFpbGVkIHRvIGxlYXZlIG11bHRpY2FzdCBncm91cDogJXMiLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZhbWlseSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNCkKLSAgICAgIC0tc2luay0+bnVtX3Y0X3VuaXF1ZTsKLSAgICBlbHNlCi0gICAgICAtLXNpbmstPm51bV92Nl91bmlxdWU7Ci0KLSAgICAvKiBLZWVwIHN0YXRlIGNvbnNpc3RlbnQgZm9yIHN0cmVhbWluZyB0aHJlYWQsIHNvIHJlbW92ZSBmcm9tIGNsaWVudCBsaXN0LAotICAgICAqIGJ1dCBrZWVwIGl0IGFyb3VuZCB1bnRpbCBhZnRlciB0aGUgc2lnbmFsIGhhcyBiZWVuIGVtaXR0ZWQsIGluIGNhc2UgYQotICAgICAqIGNhbGxiYWNrIHdhbnRzIHRvIGdldCBzdGF0cyBmb3IgdGhhdCBjbGllbnQgb3Igc28gKi8KLSAgICBzaW5rLT5jbGllbnRzID0gZ19saXN0X2RlbGV0ZV9saW5rIChzaW5rLT5jbGllbnRzLCBmaW5kKTsKLQotICAgIHNpbmstPmNsaWVudHNfdG9fYmVfcmVtb3ZlZCA9Ci0gICAgICAgIGdfbGlzdF9wcmVwZW5kIChzaW5rLT5jbGllbnRzX3RvX2JlX3JlbW92ZWQsIGNsaWVudCk7Ci0KLSAgICAvKiBVbmxvY2sgdG8gZW1pdCBzaWduYWwgYmVmb3JlIHdlIGRlbGV0ZSB0aGUgYWN0dWFsIGNsaWVudCAqLwotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotICAgIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUIChzaW5rKSwKLSAgICAgICAgZ3N0X211bHRpdWRwc2lua19zaWduYWxzW1NJR05BTF9DTElFTlRfUkVNT1ZFRF0sIDAsIGhvc3QsIHBvcnQpOwotICAgIGdfbXV0ZXhfbG9jayAoJnNpbmstPmNsaWVudF9sb2NrKTsKLQotICAgIHNpbmstPmNsaWVudHNfdG9fYmVfcmVtb3ZlZCA9Ci0gICAgICAgIGdfbGlzdF9yZW1vdmUgKHNpbmstPmNsaWVudHNfdG9fYmVfcmVtb3ZlZCwgY2xpZW50KTsKLQotICAgIGdzdF91ZHBfY2xpZW50X3VucmVmIChjbGllbnQpOwotICB9Ci0gIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi0gIHJldHVybjsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9mb3VuZDoKLSAgewotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc2luaywgImNsaWVudCBhdCBob3N0ICVzLCBwb3J0ICVkIG5vdCBmb3VuZCIsCi0gICAgICAgIGhvc3QsIHBvcnQpOwotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X211bHRpdWRwc2lua19jbGVhcl9pbnRlcm5hbCAoR3N0TXVsdGlVRFBTaW5rICogc2luaywgZ2Jvb2xlYW4gbG9jaykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImNsZWFyaW5nIik7Ci0gIC8qIHdlIG9ubHkgbmVlZCB0byByZW1vdmUgdGhlIGNsaWVudCBzdHJ1Y3R1cmUsIHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwKLSAgICogc29ja2V0IG9yIGFueXRoaW5nIHRvIGZyZWUgZm9yIFVEUCAqLwotICBpZiAobG9jaykKLSAgICBnX211dGV4X2xvY2sgKCZzaW5rLT5jbGllbnRfbG9jayk7Ci0gIGdfbGlzdF9mb3JlYWNoIChzaW5rLT5jbGllbnRzLCAoR0Z1bmMpIGdzdF91ZHBfY2xpZW50X3VucmVmLCBzaW5rKTsKLSAgZ19saXN0X2ZyZWUgKHNpbmstPmNsaWVudHMpOwotICBzaW5rLT5jbGllbnRzID0gTlVMTDsKLSAgc2luay0+bnVtX3Y0X3VuaXF1ZSA9IDA7Ci0gIHNpbmstPm51bV92NF9hbGwgPSAwOwotICBzaW5rLT5udW1fdjZfdW5pcXVlID0gMDsKLSAgc2luay0+bnVtX3Y2X2FsbCA9IDA7Ci0gIGlmIChsb2NrKQotICAgIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotfQotCi12b2lkCi1nc3RfbXVsdGl1ZHBzaW5rX2NsZWFyIChHc3RNdWx0aVVEUFNpbmsgKiBzaW5rKQotewotICBnc3RfbXVsdGl1ZHBzaW5rX2NsZWFyX2ludGVybmFsIChzaW5rLCBUUlVFKTsKLX0KLQotR3N0U3RydWN0dXJlICoKLWdzdF9tdWx0aXVkcHNpbmtfZ2V0X3N0YXRzIChHc3RNdWx0aVVEUFNpbmsgKiBzaW5rLCBjb25zdCBnY2hhciAqIGhvc3QsCi0gICAgZ2ludCBwb3J0KQotewotICBHc3RVRFBDbGllbnQgKmNsaWVudDsKLSAgR3N0U3RydWN0dXJlICpyZXN1bHQgPSBOVUxMOwotICBHc3RVRFBDbGllbnQgdWRwY2xpZW50OwotICBHTGlzdCAqZmluZDsKLQotICB1ZHBjbGllbnQuaG9zdCA9IChnY2hhciAqKSBob3N0OwotICB1ZHBjbGllbnQucG9ydCA9IHBvcnQ7Ci0KLSAgZ19tdXRleF9sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi0gIGZpbmQgPSBnX2xpc3RfZmluZF9jdXN0b20gKHNpbmstPmNsaWVudHMsICZ1ZHBjbGllbnQsCi0gICAgICAoR0NvbXBhcmVGdW5jKSBjbGllbnRfY29tcGFyZSk7Ci0KLSAgaWYgKCFmaW5kKQotICAgIGZpbmQgPSBnX2xpc3RfZmluZF9jdXN0b20gKHNpbmstPmNsaWVudHNfdG9fYmVfcmVtb3ZlZCwgJnVkcGNsaWVudCwKLSAgICAgICAgKEdDb21wYXJlRnVuYykgY2xpZW50X2NvbXBhcmUpOwotCi0gIGlmICghZmluZCkKLSAgICBnb3RvIG5vdF9mb3VuZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzaW5rLCAic3RhdHMgZm9yIGNsaWVudCB3aXRoIGhvc3QgJXMsIHBvcnQgJWQiLCBob3N0LCBwb3J0KTsKLQotICBjbGllbnQgPSAoR3N0VURQQ2xpZW50ICopIGZpbmQtPmRhdGE7Ci0KLSAgcmVzdWx0ID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJtdWx0aXVkcHNpbmstc3RhdHMiKTsKLQotICBnc3Rfc3RydWN0dXJlX3NldCAocmVzdWx0LAotICAgICAgImJ5dGVzLXNlbnQiLCBHX1RZUEVfVUlOVDY0LCBjbGllbnQtPmJ5dGVzX3NlbnQsCi0gICAgICAicGFja2V0cy1zZW50IiwgR19UWVBFX1VJTlQ2NCwgY2xpZW50LT5wYWNrZXRzX3NlbnQsCi0gICAgICAiY29ubmVjdC10aW1lIiwgR19UWVBFX1VJTlQ2NCwgY2xpZW50LT5jb25uZWN0X3RpbWUsCi0gICAgICAiZGlzY29ubmVjdC10aW1lIiwgR19UWVBFX1VJTlQ2NCwgY2xpZW50LT5kaXNjb25uZWN0X3RpbWUsIE5VTEwpOwotCi0gIGdfbXV0ZXhfdW5sb2NrICgmc2luay0+Y2xpZW50X2xvY2spOwotCi0gIHJldHVybiByZXN1bHQ7Ci0KLSAgLyogRVJST1JTICovCi1ub3RfZm91bmQ6Ci0gIHsKLSAgICBnX211dGV4X3VubG9jayAoJnNpbmstPmNsaWVudF9sb2NrKTsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNpbmssICJjbGllbnQgd2l0aCBob3N0ICVzLCBwb3J0ICVkIG5vdCBmb3VuZCIsCi0gICAgICAgIGhvc3QsIHBvcnQpOwotICAgIC8qIEFwcGFyZW50bHkgKHNlZSBjb21tZW50IGluIGdzdG11bHRpZmRzaW5rLmMpIHJldHVybmluZyBOVUxMIGZyb20gaGVyZSBtYXkKLSAgICAgKiBjb25mdXNlL2JyZWFrIHB5dGhvbiBiaW5kaW5ncyAqLwotICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoIm11bHRpdWRwc2luay1zdGF0cyIpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpdWRwc2lua191bmxvY2sgKEdzdEJhc2VTaW5rICogYnNpbmspCi17Ci0gIEdzdE11bHRpVURQU2luayAqc2luazsKLQotICBzaW5rID0gR1NUX01VTFRJVURQU0lOSyAoYnNpbmspOwotCi0gIGdfY2FuY2VsbGFibGVfY2FuY2VsIChzaW5rLT5jYW5jZWxsYWJsZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X211bHRpdWRwc2lua191bmxvY2tfc3RvcCAoR3N0QmFzZVNpbmsgKiBic2luaykKLXsKLSAgR3N0TXVsdGlVRFBTaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfTVVMVElVRFBTSU5LIChic2luayk7Ci0KLSAgZ3N0X211bHRpdWRwc2lua19mcmVlX2NhbmNlbGxhYmxlIChzaW5rKTsKLSAgZ3N0X211bHRpdWRwc2lua19jcmVhdGVfY2FuY2VsbGFibGUgKHNpbmspOwotCi0gIHJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaCBiL2dzdC91ZHAvZ3N0bXVsdGl1ZHBzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4NDlmMzguLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9nc3RtdWx0aXVkcHNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9NVUxUSVVEUFNJTktfSF9fCi0jZGVmaW5lIF9fR1NUX01VTFRJVURQU0lOS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9ERUNMUwotCi0jaW5jbHVkZSAiZ3N0dWRwbmV0dXRpbHMuaCIKLQotI2RlZmluZSBHU1RfVFlQRV9NVUxUSVVEUFNJTksgICAgICAgICAgICAoZ3N0X211bHRpdWRwc2lua19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfTVVMVElVRFBTSU5LKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfTVVMVElVRFBTSU5LLEdzdE11bHRpVURQU2luaykpCi0jZGVmaW5lIEdTVF9NVUxUSVVEUFNJTktfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX01VTFRJVURQU0lOSyxHc3RNdWx0aVVEUFNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19NVUxUSVVEUFNJTksob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9NVUxUSVVEUFNJTkspKQotI2RlZmluZSBHU1RfSVNfTVVMVElVRFBTSU5LX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9NVUxUSVVEUFNJTkspKQotI2RlZmluZSBHU1RfTVVMVElVRFBTSU5LX0NBU1Qob2JqKSAgICAgICAoKEdzdE11bHRpVURQU2luayopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RNdWx0aVVEUFNpbmsgR3N0TXVsdGlVRFBTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE11bHRpVURQU2lua0NsYXNzIEdzdE11bHRpVURQU2lua0NsYXNzOwotCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9OICgyLCA0MywgMikKLSNkZWZpbmUgSEFWRV9HX1NPQ0tFVF9TRU5EX01FU1NBR0VTCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0dfU09DS0VUX1NFTkRfTUVTU0FHRVMKLS8qIHNhbWUgYXMgR091dHB1dE1lc3NhZ2UgdXNlZCBmb3IgZ19zb2NrZXRfc2VuZF9tZXNzYWdlcygpICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIC8qPCBwcml2YXRlID4qLwotICBHU29ja2V0QWRkcmVzcyAgICAgICAgICphZGRyZXNzOwotCi0gIEdPdXRwdXRWZWN0b3IgICAgICAgICAgKnZlY3RvcnM7Ci0gIGd1aW50ICAgICAgICAgICAgICAgICAgIG51bV92ZWN0b3JzOwotCi0gIGd1aW50ICAgICAgICAgICAgICAgICAgIGJ5dGVzX3NlbnQ7Ci0KLSAgR1NvY2tldENvbnRyb2xNZXNzYWdlICoqY29udHJvbF9tZXNzYWdlczsKLSAgZ3VpbnQgICAgICAgICAgICAgICAgICAgbnVtX2NvbnRyb2xfbWVzc2FnZXM7Ci19IEdzdE91dHB1dE1lc3NhZ2U7Ci0jZWxzZQotdHlwZWRlZiBHT3V0cHV0TWVzc2FnZSBHc3RPdXRwdXRNZXNzYWdlOwotI2VuZGlmIC8qIEhBVkVfR19TT0NLRVRfU0VORF9NRVNTQUdFUyovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgZ2ludCByZWZfY291bnQ7ICAgICAgICAgLyogZm9yIG1lbW9yeSBtYW5hZ2VtZW50ICovCi0gIGdpbnQgYWRkX2NvdW50OyAgICAgICAgIC8qIGhvdyBvZnRlbiB0aGlzIGFkZHJlc3MgaGFzIGJlZW4gYWRkZWQgKi8KLQotICBHU29ja2V0QWRkcmVzcyAqYWRkcjsKLSAgZ2NoYXIgKmhvc3Q7Ci0gIGdpbnQgcG9ydDsKLQotICAvKiBQZXItY2xpZW50IHN0YXRzICovCi0gIGd1aW50NjQgYnl0ZXNfc2VudDsKLSAgZ3VpbnQ2NCBwYWNrZXRzX3NlbnQ7Ci0gIGd1aW50NjQgY29ubmVjdF90aW1lOwotICBndWludDY0IGRpc2Nvbm5lY3RfdGltZTsKLX0gR3N0VURQQ2xpZW50OwotCi0vKiBzZW5kcyB1ZHAgcGFja2V0cyB0byBtdWx0aXBsZSBob3N0L3BvcnQgcGFpcnMuCi0gKi8KLXN0cnVjdCBfR3N0TXVsdGlVRFBTaW5rIHsKLSAgR3N0QmFzZVNpbmsgcGFyZW50OwotCi0gIEdTb2NrZXQgICAgICAgKnVzZWRfc29ja2V0LCAqdXNlZF9zb2NrZXRfdjY7Ci0KLSAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGU7Ci0gIGdib29sZWFuICAgICAgIG1hZGVfY2FuY2VsX2ZkOwotCi0gIC8qIGNsaWVudCBtYW5hZ2VtZW50ICovCi0gIEdNdXRleCAgICAgICAgIGNsaWVudF9sb2NrOwotICBHTGlzdCAgICAgICAgICpjbGllbnRzOwotICBndWludCAgICAgICAgICBudW1fdjRfdW5pcXVlOyAgLyogbnVtYmVyIElQdjQgY2xpZW50cyAoZXhjbHVkaW5nIGR1cGxpY2F0ZXMpICovCi0gIGd1aW50ICAgICAgICAgIG51bV92NF9hbGw7ICAgICAvKiBudW1iZXIgSVB2NCBjbGllbnRzIChpbmNsdWRpbmcgZHVwbGljYXRlcykgKi8KLSAgZ3VpbnQgICAgICAgICAgbnVtX3Y2X3VuaXF1ZTsgIC8qIG51bWJlciBJUHY2IGNsaWVudHMgKGV4Y2x1ZGluZyBkdXBsaWNhdGVzKSAqLwotICBndWludCAgICAgICAgICBudW1fdjZfYWxsOyAgICAgLyogbnVtYmVyIElQdjYgY2xpZW50cyAoaW5jbHVkaW5nIGR1cGxpY2F0ZXMpICovCi0gIEdMaXN0ICAgICAgICAgKmNsaWVudHNfdG9fYmVfcmVtb3ZlZDsKLQotICAvKiBwcmUtYWxsb2NhdGVkIHNjcmFwIHNwYWNlIGZvciByZW5kZXIgZnVuY3Rpb24gKi8KLSAgR091dHB1dFZlY3RvciAgICAqdmVjczsKLSAgZ3VpbnQgICAgICAgICAgICAgbl92ZWNzOwotICBHc3RNYXBJbmZvICAgICAgICptYXBzOwotICBndWludCAgICAgICAgICAgICBuX21hcHM7Ci0gIEdzdE91dHB1dE1lc3NhZ2UgKm1lc3NhZ2VzOwotICBndWludCAgICAgICAgICAgICBuX21lc3NhZ2VzOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ3VpbnQ2NCAgICAgICAgYnl0ZXNfdG9fc2VydmU7Ci0gIGd1aW50NjQgICAgICAgIGJ5dGVzX3NlcnZlZDsKLSAgR1NvY2tldCAgICAgICAqc29ja2V0LCAqc29ja2V0X3Y2OwotICBnYm9vbGVhbiAgICAgICBjbG9zZV9zb2NrZXQ7Ci0KLSAgZ2Jvb2xlYW4gICAgICAgZXh0ZXJuYWxfc29ja2V0OwotCi0gIGdib29sZWFuICAgICAgIGF1dG9fbXVsdGljYXN0OwotICBnY2hhciAgICAgICAgICptdWx0aV9pZmFjZTsKLSAgZ2ludCAgICAgICAgICAgdHRsOwotICBnaW50ICAgICAgICAgICB0dGxfbWM7Ci0gIGdib29sZWFuICAgICAgIGxvb3A7Ci0gIGdib29sZWFuICAgICAgIGZvcmNlX2lwdjQ7Ci0gIGdpbnQgICAgICAgICAgIHFvc19kc2NwOwotCi0gIGdib29sZWFuICAgICAgIHNlbmRfZHVwbGljYXRlczsKLSAgZ2ludCAgICAgICAgICAgYnVmZmVyX3NpemU7Ci0gIGdjaGFyICAgICAgICAgKmJpbmRfYWRkcmVzczsKLSAgZ2ludCAgICAgICAgICAgYmluZF9wb3J0OwotfTsKLQotc3RydWN0IF9Hc3RNdWx0aVVEUFNpbmtDbGFzcyB7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIC8qIGVsZW1lbnQgbWV0aG9kcyAqLwotICB2b2lkICAgICAgICAgICgqYWRkKSAgICAgICAgICAoR3N0TXVsdGlVRFBTaW5rICpzaW5rLCBjb25zdCBnY2hhciAqaG9zdCwgZ2ludCBwb3J0KTsKLSAgdm9pZCAgICAgICAgICAoKnJlbW92ZSkgICAgICAgKEdzdE11bHRpVURQU2luayAqc2luaywgY29uc3QgZ2NoYXIgKmhvc3QsIGdpbnQgcG9ydCk7Ci0gIHZvaWQgICAgICAgICAgKCpjbGVhcikgICAgICAgIChHc3RNdWx0aVVEUFNpbmsgKnNpbmspOwotICBHc3RTdHJ1Y3R1cmUqICgqZ2V0X3N0YXRzKSAgICAoR3N0TXVsdGlVRFBTaW5rICpzaW5rLCBjb25zdCBnY2hhciAqaG9zdCwgZ2ludCBwb3J0KTsKLQotICAvKiBzaWduYWxzICovCi0gIHZvaWQgICAgICAgICAgKCpjbGllbnRfYWRkZWQpIChHc3RFbGVtZW50ICplbGVtZW50LCBjb25zdCBnY2hhciAqaG9zdCwgZ2ludCBwb3J0KTsKLSAgdm9pZCAgICAgICAgICAoKmNsaWVudF9yZW1vdmVkKSAoR3N0RWxlbWVudCAqZWxlbWVudCwgY29uc3QgZ2NoYXIgKmhvc3QsIGdpbnQgcG9ydCk7Ci19OwotCi1HVHlwZSBnc3RfbXVsdGl1ZHBzaW5rX2dldF90eXBlKHZvaWQpOwotCi12b2lkICAgICAgICAgICAgZ3N0X211bHRpdWRwc2lua19hZGQgICAgICAgICAgICAoR3N0TXVsdGlVRFBTaW5rICpzaW5rLCBjb25zdCBnY2hhciAqaG9zdCwgZ2ludCBwb3J0KTsKLXZvaWQgICAgICAgICAgICBnc3RfbXVsdGl1ZHBzaW5rX3JlbW92ZSAgICAgICAgIChHc3RNdWx0aVVEUFNpbmsgKnNpbmssIGNvbnN0IGdjaGFyICpob3N0LCBnaW50IHBvcnQpOwotdm9pZCAgICAgICAgICAgIGdzdF9tdWx0aXVkcHNpbmtfY2xlYXIgICAgICAgICAgKEdzdE11bHRpVURQU2luayAqc2luayk7Ci1Hc3RTdHJ1Y3R1cmUqICAgZ3N0X211bHRpdWRwc2lua19nZXRfc3RhdHMgICAgICAoR3N0TXVsdGlVRFBTaW5rICpzaW5rLCBjb25zdCBnY2hhciAqaG9zdCwgZ2ludCBwb3J0KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX01VTFRJVURQU0lOS19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC91ZHAvZ3N0dWRwLmMgYi9nc3QvdWRwL2dzdHVkcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjAyMTEyLi4wMDAwMDAwCi0tLSBhL2dzdC91ZHAvZ3N0dWRwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5oPgotCi0jaW5jbHVkZSAiZ3N0dWRwc3JjLmgiCi0jaW5jbHVkZSAiZ3N0bXVsdGl1ZHBzaW5rLmgiCi0jaW5jbHVkZSAiZ3N0dWRwc2luay5oIgotI2luY2x1ZGUgImdzdGR5bnVkcHNpbmsuaCIKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICAvKiBub3QgdXNpbmcgR0xJQl9DSEVDS19WRVJTSU9OIG9uIHB1cnBvc2UsIHJ1bi10aW1lIHZlcnNpb24gbWF0dGVycyAqLwotICBpZiAoZ2xpYl9jaGVja192ZXJzaW9uICgyLCAzNiwgMCkgIT0gTlVMTCkgewotICAgIEdTVF9XQVJOSU5HICgiWW91ciBHTGliIHZlcnNpb24gaXMgPCAyLjM2LCBVRFAgbXVsdGljYXN0aW5nIHN1cHBvcnQgbWF5ICIKLSAgICAgICAgImJlIGJyb2tlbiwgc2VlIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02ODgzNzgiKTsKLSAgfQotCi0gIC8qIHJlZ2lzdGVyIGluZm8gb2YgdGhlIG5ldGFkZHJlc3MgbWV0YWRhdGEgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IGZyb20KLSAgICogbXVsdGlwbGUgdGhyZWFkcyByaWdodCBhd2F5LiBOb3RlIHRoYXQgdGhlIHBsdWdpbiBsb2FkaW5nIGlzIGFsd2F5cwotICAgKiBzZXJpYWxpemVkICovCi0gIGdzdF9uZXRfYWRkcmVzc19tZXRhX2dldF9pbmZvICgpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInVkcHNpbmsiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX1VEUFNJTkspKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJtdWx0aXVkcHNpbmsiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX01VTFRJVURQU0lOSykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImR5bnVkcHNpbmsiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX0RZTlVEUFNJTkspKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ1ZHBzcmMiLCBHU1RfUkFOS19OT05FLCBHU1RfVFlQRV9VRFBTUkMpKQotICAgIHJldHVybiBGQUxTRTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIHVkcCwKLSAgICAidHJhbnNmZXIgZGF0YSB2aWEgVURQIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYyBiL2dzdC91ZHAvZ3N0dWRwbmV0dXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRkYzVlZi4uMDAwMDAwMAotLS0gYS9nc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyogR1N0cmVhbWVyIFVEUCBuZXR3b3JrIHV0aWxpdHkgZnVuY3Rpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBKb25pIFZhbHRhbmVuIDxqb25pLnZhbHRhbmVuQG1vdmlhbC5maT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYXJra28gUGFsdmlhaW5lbiA8amFya2tvLnBhbHZpYWluZW5Ac2VzY2EuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdHVkcG5ldHV0aWxzLmgiCi0KLWdib29sZWFuCi1nc3RfdWRwX3BhcnNlX3VyaSAoY29uc3QgZ2NoYXIgKiB1cmlzdHIsIGdjaGFyICoqIGhvc3QsIGd1aW50MTYgKiBwb3J0KQotewotICBnY2hhciAqcHJvdG9jb2wsICpsb2NhdGlvbl9zdGFydDsKLSAgZ2NoYXIgKmxvY2F0aW9uLCAqbG9jYXRpb25fZW5kOwotICBnY2hhciAqY29scHRyOwotCi0gIC8qIGNvbnNpZGVyIG5vIHByb3RvY29sIHRvIGJlIHVkcDovLyAqLwotICBwcm90b2NvbCA9IGdzdF91cmlfZ2V0X3Byb3RvY29sICh1cmlzdHIpOwotICBpZiAoIXByb3RvY29sKQotICAgIGdvdG8gbm9fcHJvdG9jb2w7Ci0gIGlmIChzdHJjbXAgKHByb3RvY29sLCAidWRwIikgIT0gMCkKLSAgICBnb3RvIHdyb25nX3Byb3RvY29sOwotICBnX2ZyZWUgKHByb3RvY29sKTsKLQotICBsb2NhdGlvbl9zdGFydCA9IGdzdF91cmlfZ2V0X2xvY2F0aW9uICh1cmlzdHIpOwotICBpZiAoIWxvY2F0aW9uX3N0YXJ0KQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfREVCVUcgKCJnb3QgbG9jYXRpb24gJyVzJyIsIGxvY2F0aW9uX3N0YXJ0KTsKLQotICAvKiBWTEMgY29tcGF0aWJpbGl0eSwgc3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgdGhlIEAgc2lnbi4gVkxDIHVzZXMgdGhhdCBhcyB0aGUKLSAgICogcmVtb3RlIGFkZHJlc3MuICovCi0gIGxvY2F0aW9uID0gZ19zdHJzdHJfbGVuIChsb2NhdGlvbl9zdGFydCwgLTEsICJAIik7Ci0gIGlmIChsb2NhdGlvbiA9PSBOVUxMKQotICAgIGxvY2F0aW9uID0gbG9jYXRpb25fc3RhcnQ7Ci0gIGVsc2UKLSAgICBsb2NhdGlvbiArPSAxOwotCi0gIGlmIChsb2NhdGlvblswXSA9PSAnWycpIHsKLSAgICBHU1RfREVCVUcgKCJwYXJzZSBJUFY2IGFkZHJlc3MgJyVzJyIsIGxvY2F0aW9uKTsKLSAgICBsb2NhdGlvbl9lbmQgPSBzdHJjaHIgKGxvY2F0aW9uLCAnXScpOwotICAgIGlmIChsb2NhdGlvbl9lbmQgPT0gTlVMTCkKLSAgICAgIGdvdG8gd3JvbmdfYWRkcmVzczsKLQotICAgICpob3N0ID0gZ19zdHJuZHVwIChsb2NhdGlvbiArIDEsIGxvY2F0aW9uX2VuZCAtIGxvY2F0aW9uIC0gMSk7Ci0gICAgY29scHRyID0gc3RycmNociAobG9jYXRpb25fZW5kLCAnOicpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVRyAoInBhcnNlIElQVjQgYWRkcmVzcyAnJXMnIiwgbG9jYXRpb24pOwotICAgIGNvbHB0ciA9IHN0cnJjaHIgKGxvY2F0aW9uLCAnOicpOwotCi0gICAgaWYgKGNvbHB0ciAhPSBOVUxMKSB7Ci0gICAgICAqaG9zdCA9IGdfc3RybmR1cCAobG9jYXRpb24sIGNvbHB0ciAtIGxvY2F0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgKmhvc3QgPSBnX3N0cmR1cCAobG9jYXRpb24pOwotICAgIH0KLSAgfQotICBHU1RfREVCVUcgKCJob3N0IHNldCB0byAnJXMnIiwgKmhvc3QpOwotCi0gIGlmIChjb2xwdHIgIT0gTlVMTCkgewotICAgICpwb3J0ID0gZ19hc2NpaV9zdHJ0b2xsIChjb2xwdHIgKyAxLCBOVUxMLCAxMCk7Ci0gIH0gZWxzZSB7Ci0gICAgKnBvcnQgPSAwOwotICB9Ci0gIGdfZnJlZSAobG9jYXRpb25fc3RhcnQpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fcHJvdG9jb2w6Ci0gIHsKLSAgICBHU1RfRVJST1IgKCJlcnJvciBwYXJzaW5nIHVyaSAlczogbm8gcHJvdG9jb2wiLCB1cmlzdHIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotd3JvbmdfcHJvdG9jb2w6Ci0gIHsKLSAgICBHU1RfRVJST1IgKCJlcnJvciBwYXJzaW5nIHVyaSAlczogd3JvbmcgcHJvdG9jb2wgKCVzICE9IHVkcCkiLCB1cmlzdHIsCi0gICAgICAgIHByb3RvY29sKTsKLSAgICBnX2ZyZWUgKHByb3RvY29sKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2FkZHJlc3M6Ci0gIHsKLSAgICBHU1RfRVJST1IgKCJlcnJvciBwYXJzaW5nIHVyaSAlcyIsIHVyaXN0cik7Ci0gICAgZ19mcmVlIChsb2NhdGlvbik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmggYi9nc3QvdWRwL2dzdHVkcG5ldHV0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MmJlNTYuLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9nc3R1ZHBuZXR1dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyogR1N0cmVhbWVyIFVEUCBuZXR3b3JrIHV0aWxpdHkgZnVuY3Rpb25zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBKb25pIFZhbHRhbmVuIDxqb25pLnZhbHRhbmVuQG1vdmlhbC5maT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaWZuZGVmIF9fR1NUX1VEUF9ORVRfVVRJTFNfSF9fCi0jZGVmaW5lIF9fR1NUX1VEUF9ORVRfVVRJTFNfSF9fCi0KLWdib29sZWFuICAgICBnc3RfdWRwX3BhcnNlX3VyaSAgICAgICAgICAgIChjb25zdCBnY2hhciAqdXJpc3RyLCBnY2hhciAqKmhvc3QsIGd1aW50MTYgKnBvcnQpOwotCi0jZW5kaWYgLyogX19HU1RfVURQX05FVF9VVElMU19IX18qLwotCmRpZmYgLS1naXQgYS9nc3QvdWRwL2dzdHVkcHNpbmsuYyBiL2dzdC91ZHAvZ3N0dWRwc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjRkNTc4Li4wMDAwMDAwCi0tLSBhL2dzdC91ZHAvZ3N0dWRwc2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMTI+IENvbGxhYm9yYSBMdGQuCi0gKiAgIEF1dGhvcjogU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXVkcHNpbmsKLSAqIEBzZWVfYWxzbzogdWRwc3JjLCBtdWx0aWZkc2luawotICoKLSAqIHVkcHNpbmsgaXMgYSBuZXR3b3JrIHNpbmsgdGhhdCBzZW5kcyBVRFAgcGFja2V0cyB0byB0aGUgbmV0d29yay4KLSAqIEl0IGNhbiBiZSBjb21iaW5lZCB3aXRoIFJUUCBwYXlsb2FkZXJzIHRvIGltcGxlbWVudCBSVFAgc3RyZWFtaW5nLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgdWRwc2luawotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJnc3R1ZHBzaW5rLmgiCi0KLSNkZWZpbmUgVURQX0RFRkFVTFRfSE9TVCAgICAgICAgImxvY2FsaG9zdCIKLSNkZWZpbmUgVURQX0RFRkFVTFRfUE9SVCAgICAgICAgNTAwNAotCi0vKiBVRFBTaW5rIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfSE9TVCwKLSAgUFJPUF9QT1JULAotICBQUk9QX1VSSSwKLSAgLyogRklMTCBNRSAqLwotfTsKLQotc3RhdGljIHZvaWQgZ3N0X3VkcHNpbmtfZmluYWxpemUgKEdzdFVEUFNpbmsgKiB1ZHBzaW5rKTsKLQotc3RhdGljIHZvaWQgZ3N0X3VkcHNpbmtfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLQotc3RhdGljIHZvaWQgZ3N0X3VkcHNpbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3VkcHNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi0vKnN0YXRpYyBndWludCBnc3RfdWRwc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLwotI2RlZmluZSBnc3RfdWRwc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VURQU2luaywgZ3N0X3VkcHNpbmssIEdTVF9UWVBFX01VTFRJVURQU0lOSywKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCBnc3RfdWRwc2lua191cmlfaGFuZGxlcl9pbml0KSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdWRwc2lua19jbGFzc19pbml0IChHc3RVRFBTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF91ZHBzaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3VkcHNpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gKEdPYmplY3RGaW5hbGl6ZUZ1bmMpIGdzdF91ZHBzaW5rX2ZpbmFsaXplOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfSE9TVCwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJob3N0IiwgImhvc3QiLAotICAgICAgICAgICJUaGUgaG9zdC9JUC9NdWx0aWNhc3QgZ3JvdXAgdG8gc2VuZCB0aGUgcGFja2V0cyB0byIsCi0gICAgICAgICAgVURQX0RFRkFVTFRfSE9TVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfUE9SVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJwb3J0IiwgInBvcnQiLCAiVGhlIHBvcnQgdG8gc2VuZCB0aGUgcGFja2V0cyB0byIsCi0gICAgICAgICAgMCwgNjU1MzUsIFVEUF9ERUZBVUxUX1BPUlQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIlVEUCBwYWNrZXQgc2VuZGVyIiwKLSAgICAgICJTaW5rL05ldHdvcmsiLAotICAgICAgIlNlbmQgZGF0YSBvdmVyIHRoZSBuZXR3b3JrIHZpYSBVRFAiLCAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzaW5rX2luaXQgKEdzdFVEUFNpbmsgKiB1ZHBzaW5rKQotewotICB1ZHBzaW5rLT5ob3N0ID0gZ19zdHJkdXAgKFVEUF9ERUZBVUxUX0hPU1QpOwotICB1ZHBzaW5rLT5wb3J0ID0gVURQX0RFRkFVTFRfUE9SVDsKLSAgdWRwc2luay0+dXJpID0gZ19zdHJkdXBfcHJpbnRmICgidWRwOi8vJXM6JWQiLCB1ZHBzaW5rLT5ob3N0LCB1ZHBzaW5rLT5wb3J0KTsKLQotICBnc3RfbXVsdGl1ZHBzaW5rX2FkZCAoR1NUX01VTFRJVURQU0lOSyAodWRwc2luayksIHVkcHNpbmstPmhvc3QsCi0gICAgICB1ZHBzaW5rLT5wb3J0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzaW5rX2ZpbmFsaXplIChHc3RVRFBTaW5rICogdWRwc2luaykKLXsKLSAgZ19mcmVlICh1ZHBzaW5rLT5ob3N0KTsKLSAgdWRwc2luay0+aG9zdCA9IE5VTEw7Ci0KLSAgZ19mcmVlICh1ZHBzaW5rLT51cmkpOwotICB1ZHBzaW5rLT51cmkgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAoKEdPYmplY3QgKikgdWRwc2luayk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3VkcHNpbmtfc2V0X3VyaSAoR3N0VURQU2luayAqIHNpbmssIGNvbnN0IGdjaGFyICogdXJpLCBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIGdjaGFyICpob3N0OwotICBndWludDE2IHBvcnQ7Ci0KLSAgZ3N0X211bHRpdWRwc2lua19yZW1vdmUgKEdTVF9NVUxUSVVEUFNJTksgKHNpbmspLCBzaW5rLT5ob3N0LCBzaW5rLT5wb3J0KTsKLQotICBpZiAoIWdzdF91ZHBfcGFyc2VfdXJpICh1cmksICZob3N0LCAmcG9ydCkpCi0gICAgZ290byB3cm9uZ191cmk7Ci0KLSAgZ19mcmVlIChzaW5rLT5ob3N0KTsKLSAgc2luay0+aG9zdCA9IGhvc3Q7Ci0gIHNpbmstPnBvcnQgPSBwb3J0OwotCi0gIGdfZnJlZSAoc2luay0+dXJpKTsKLSAgc2luay0+dXJpID0gZ19zdHJkdXAgKHVyaSk7Ci0KLSAgZ3N0X211bHRpdWRwc2lua19hZGQgKEdTVF9NVUxUSVVEUFNJTksgKHNpbmspLCBzaW5rLT5ob3N0LCBzaW5rLT5wb3J0KTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3VyaToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoImVycm9yIHBhcnNpbmcgdXJpICVzIiwgdXJpKSk7Ci0gICAgZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwKLSAgICAgICAgIkNvdWxkIG5vdCBwYXJzZSBVRFAgVVJJIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdWRwc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VURQU2luayAqdWRwc2luazsKLQotICB1ZHBzaW5rID0gR1NUX1VEUFNJTksgKG9iamVjdCk7Ci0KLSAgLyogcmVtb3ZlIG9sZCBob3N0ICovCi0gIGdzdF9tdWx0aXVkcHNpbmtfcmVtb3ZlIChHU1RfTVVMVElVRFBTSU5LICh1ZHBzaW5rKSwKLSAgICAgIHVkcHNpbmstPmhvc3QsIHVkcHNpbmstPnBvcnQpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9IT1NUOgotICAgIHsKLSAgICAgIGNvbnN0IGdjaGFyICpob3N0OwotCi0gICAgICBob3N0ID0gZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBnX2ZyZWUgKHVkcHNpbmstPmhvc3QpOwotICAgICAgdWRwc2luay0+aG9zdCA9IGdfc3RyZHVwIChob3N0KTsKLSAgICAgIGdfZnJlZSAodWRwc2luay0+dXJpKTsKLSAgICAgIHVkcHNpbmstPnVyaSA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgidWRwOi8vJXM6JWQiLCB1ZHBzaW5rLT5ob3N0LCB1ZHBzaW5rLT5wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIHVkcHNpbmstPnBvcnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGdfZnJlZSAodWRwc2luay0+dXJpKTsKLSAgICAgIHVkcHNpbmstPnVyaSA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgidWRwOi8vJXM6JWQiLCB1ZHBzaW5rLT5ob3N0LCB1ZHBzaW5rLT5wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgLyogYWRkIG5ldyBob3N0ICovCi0gIGdzdF9tdWx0aXVkcHNpbmtfYWRkIChHU1RfTVVMVElVRFBTSU5LICh1ZHBzaW5rKSwKLSAgICAgIHVkcHNpbmstPmhvc3QsIHVkcHNpbmstPnBvcnQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3VkcHNpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFVEUFNpbmsgKnVkcHNpbms7Ci0KLSAgdWRwc2luayA9IEdTVF9VRFBTSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9IT1NUOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgdWRwc2luay0+aG9zdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHVkcHNpbmstPnBvcnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKioqIEdTVFVSSUhBTkRMRVIgSU5URVJGQUNFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBHc3RVUklUeXBlCi1nc3RfdWRwc2lua191cmlfZ2V0X3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIHJldHVybiBHU1RfVVJJX1NJTks7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciAqY29uc3QgKgotZ3N0X3VkcHNpbmtfdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqcHJvdG9jb2xzW10gPSB7ICJ1ZHAiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF91ZHBzaW5rX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKLXsKLSAgR3N0VURQU2luayAqc2luayA9IEdTVF9VRFBTSU5LIChoYW5kbGVyKTsKLQotICByZXR1cm4gZ19zdHJkdXAgKHNpbmstPnVyaSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3VkcHNpbmtfdXJpX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIHJldHVybiBnc3RfdWRwc2lua19zZXRfdXJpIChHU1RfVURQU0lOSyAoaGFuZGxlciksIHVyaSwgZXJyb3IpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3VkcHNpbmtfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKLXsKLSAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2UgPSAoR3N0VVJJSGFuZGxlckludGVyZmFjZSAqKSBnX2lmYWNlOwotCi0gIGlmYWNlLT5nZXRfdHlwZSA9IGdzdF91ZHBzaW5rX3VyaV9nZXRfdHlwZTsKLSAgaWZhY2UtPmdldF9wcm90b2NvbHMgPSBnc3RfdWRwc2lua191cmlfZ2V0X3Byb3RvY29sczsKLSAgaWZhY2UtPmdldF91cmkgPSBnc3RfdWRwc2lua191cmlfZ2V0X3VyaTsKLSAgaWZhY2UtPnNldF91cmkgPSBnc3RfdWRwc2lua191cmlfc2V0X3VyaTsKLX0KZGlmZiAtLWdpdCBhL2dzdC91ZHAvZ3N0dWRwc2luay5oIGIvZ3N0L3VkcC9nc3R1ZHBzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YjViMzQuLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9nc3R1ZHBzaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1VEUFNJTktfSF9fCi0jZGVmaW5lIF9fR1NUX1VEUFNJTktfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSAiZ3N0bXVsdGl1ZHBzaW5rLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2luY2x1ZGUgImdzdHVkcG5ldHV0aWxzLmgiCi0KLSNkZWZpbmUgR1NUX1RZUEVfVURQU0lOSyAgICAgICAgICAgICAgICAoZ3N0X3VkcHNpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1VEUFNJTksob2JqKSAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVURQU0lOSyxHc3RVRFBTaW5rKSkKLSNkZWZpbmUgR1NUX1VEUFNJTktfQ0xBU1Moa2xhc3MpICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9VRFBTSU5LLEdzdFVEUFNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19VRFBTSU5LKG9iaikgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1VEUFNJTkspKQotI2RlZmluZSBHU1RfSVNfVURQU0lOS19DTEFTUyhrbGFzcykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1VEUFNJTkspKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VURQU2luayBHc3RVRFBTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFVEUFNpbmtDbGFzcyBHc3RVRFBTaW5rQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VURQU2luayB7Ci0gIEdzdE11bHRpVURQU2luayBwYXJlbnQ7Ci0KLSAgZ2NoYXIgKmhvc3Q7Ci0gIGd1aW50MTYgcG9ydDsKLQotICBnY2hhciAqdXJpOwotfTsKLQotc3RydWN0IF9Hc3RVRFBTaW5rQ2xhc3MgewotICBHc3RNdWx0aVVEUFNpbmtDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfdWRwc2lua19nZXRfdHlwZSh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1VEUFNJTktfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvdWRwL2dzdHVkcHNyYy5jIGIvZ3N0L3VkcC9nc3R1ZHBzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFkMTFhZC4uMDAwMDAwMAotLS0gYS9nc3QvdWRwL2dzdHVkcHNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDIwMDU+IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBOb2tpYSBDb3Jwb3JhdGlvbiA8a2FpLnZlaG1hbmVuQG5va2lhLmNvbT4KLSAqIENvcHlyaWdodCAoQykgPDIwMTI+IENvbGxhYm9yYSBMdGQuCi0gKiAgIEF1dGhvcjogU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBDZW50cmljdWxhciBMdGQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC11ZHBzcmMKLSAqIEBzZWVfYWxzbzogdWRwc2luaywgbXVsdGlmZHNpbmsKLSAqCi0gKiB1ZHBzcmMgaXMgYSBuZXR3b3JrIHNvdXJjZSB0aGF0IHJlYWRzIFVEUCBwYWNrZXRzIGZyb20gdGhlIG5ldHdvcmsuCi0gKiBJdCBjYW4gYmUgY29tYmluZWQgd2l0aCBSVFAgZGVwYXlsb2FkZXJzIHRvIGltcGxlbWVudCBSVFAgc3RyZWFtaW5nLgotICoKLSAqIFRoZSB1ZHBzcmMgZWxlbWVudCBzdXBwb3J0cyBhdXRvbWF0aWMgcG9ydCBhbGxvY2F0aW9uIGJ5IHNldHRpbmcgdGhlCi0gKiAjR3N0VURQU3JjOnBvcnQgcHJvcGVydHkgdG8gMC4gQWZ0ZXIgc2V0dGluZyB0aGUgdWRwc3JjIHRvIFBBVVNFRCwgdGhlCi0gKiBhbGxvY2F0ZWQgcG9ydCBjYW4gYmUgb2J0YWluZWQgYnkgcmVhZGluZyB0aGUgcG9ydCBwcm9wZXJ0eS4KLSAqCi0gKiB1ZHBzcmMgY2FuIHJlYWQgZnJvbSBtdWx0aWNhc3QgZ3JvdXBzIGJ5IHNldHRpbmcgdGhlICNHc3RVRFBTcmM6bXVsdGljYXN0LWdyb3VwCi0gKiBwcm9wZXJ0eSB0byB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgbXVsdGljYXN0IGdyb3VwLgotICoKLSAqIEFsdGVybmF0aXZlbHkgb25lIGNhbiBwcm92aWRlIGEgY3VzdG9tIHNvY2tldCB0byB1ZHBzcmMgd2l0aCB0aGUgI0dzdFVEUFNyYzpzb2NrZXQKLSAqIHByb3BlcnR5LCB1ZHBzcmMgd2lsbCB0aGVuIG5vdCBhbGxvY2F0ZSBhIHNvY2tldCBpdHNlbGYgYnV0IHVzZSB0aGUgcHJvdmlkZWQKLSAqIG9uZS4KLSAqCi0gKiBUaGUgI0dzdFVEUFNyYzpjYXBzIHByb3BlcnR5IGlzIG1haW5seSB1c2VkIHRvIGdpdmUgYSB0eXBlIHRvIHRoZSBVRFAgcGFja2V0Ci0gKiBzbyB0aGF0IHRoZXkgY2FuIGJlIGF1dG9wbHVnZ2VkIGluIEdTdHJlYW1lciBwaXBlbGluZXMuIFRoaXMgaXMgdmVyeSB1c2VmdWwKLSAqIGZvciBSVFAgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZSBjb250ZW50cyBvZiB0aGUgVURQIHBhY2tldHMgaXMgdHJhbnNmZXJlZAotICogb3V0LW9mLWJvdW5kcyB1c2luZyBTRFAgb3Igb3RoZXIgbWVhbnMuCi0gKgotICogVGhlICNHc3RVRFBTcmM6YnVmZmVyLXNpemUgcHJvcGVydHkgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQga2VybmVsCi0gKiBidWZmZXJzaXplcyB1c2VkIGZvciByZWNlaXZpbmcgcGFja2V0cy4gVGhlIGJ1ZmZlciBzaXplIG1heSBiZSBpbmNyZWFzZWQgZm9yCi0gKiBoaWdoLXZvbHVtZSBjb25uZWN0aW9ucywgb3IgbWF5IGJlIGRlY3JlYXNlZCB0byBsaW1pdCB0aGUgcG9zc2libGUgYmFja2xvZyBvZgotICogaW5jb21pbmcgZGF0YS4gVGhlIHN5c3RlbSBwbGFjZXMgYW4gYWJzb2x1dGUgbGltaXQgb24gdGhlc2UgdmFsdWVzLCBvbiBMaW51eCwKLSAqIGZvciBleGFtcGxlLCB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyB0eXBpY2FsbHkgNTBLIGFuZCBjYW4gYmUgaW5jcmVhc2VkIHRvCi0gKiBtYXhpbWFsbHkgMTAwSy4KLSAqCi0gKiBUaGUgI0dzdFVEUFNyYzpza2lwLWZpcnN0LWJ5dGVzIHByb3BlcnR5IGlzIHVzZWQgdG8gc3RyaXAgb2ZmIGFuIGFyYml0cmFyeQotICogbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSByYXcgdWRwIHBhY2tldCBhbmQgY2FuIGJlIHVzZWQgdG8gc3RyaXAKLSAqIG9mZiBwcm9wcmlldGFyeSBoZWFkZXIsIGZvciBleGFtcGxlLgotICoKLSAqIFRoZSB1ZHBzcmMgaXMgYWx3YXlzIGEgbGl2ZSBzb3VyY2UuIEl0IGRvZXMgaG93ZXZlciBub3QgcHJvdmlkZSBhICNHc3RDbG9jaywKLSAqIHRoaXMgaXMgbGVmdCBmb3IgdXBzdHJlYW0gZWxlbWVudHMgc3VjaCBhcyBhbiBSVFAgc2Vzc2lvbiBtYW5hZ2VyIG9yIGRlbXV4ZXIKLSAqIChzdWNoIGFzIGFuIE1QRUcgZGVtdXhlcikuIEFzIHdpdGggYWxsIGxpdmUgc291cmNlcywgdGhlIGNhcHR1cmVkIGJ1ZmZlcnMKLSAqIHdpbGwgaGF2ZSB0aGVpciB0aW1lc3RhbXAgc2V0IHRvIHRoZSBjdXJyZW50IHJ1bm5pbmcgdGltZSBvZiB0aGUgcGlwZWxpbmUuCi0gKgotICogdWRwc3JjIGltcGxlbWVudHMgYSAjR3N0VVJJSGFuZGxlciBpbnRlcmZhY2UgdGhhdCBoYW5kbGVzIHVkcDovL2hvc3Q6cG9ydAotICogdHlwZSBVUklzLgotICoKLSAqIElmIHRoZSAjR3N0VURQU3JjOnRpbWVvdXQgcHJvcGVydHkgaXMgc2V0IHRvIGEgdmFsdWUgYmlnZ2VyIHRoYW4gMCwgdWRwc3JjCi0gKiB3aWxsIGdlbmVyYXRlIGFuIGVsZW1lbnQgbWVzc2FnZSBuYW1lZAotICogPGNsYXNzbmFtZT4mcXVvdDtHc3RVRFBTcmNUaW1lb3V0JnF1b3Q7PC9jbGFzc25hbWU+Ci0gKiBpZiBubyBkYXRhIHdhcyByZWNpZXZlZCBpbiB0aGUgZ2l2ZW4gdGltZW91dC4KLSAqIFRoZSBtZXNzYWdlJ3Mgc3RydWN0dXJlIGNvbnRhaW5zIG9uZSBmaWVsZDoKLSAqIDxpdGVtaXplZGxpc3Q+Ci0gKiA8bGlzdGl0ZW0+Ci0gKiAgIDxwYXJhPgotICogICAjZ3VpbnQ2NAotICogICA8Y2xhc3NuYW1lPiZxdW90O3RpbWVvdXQmcXVvdDs8L2NsYXNzbmFtZT46IHRoZSB0aW1lb3V0IGluIG1pY3Jvc2Vjb25kcyB0aGF0Ci0gKiAgIGV4cGlyZWQgd2hlbiB3YWl0aW5nIGZvciBkYXRhLgotICogICA8L3BhcmE+Ci0gKiA8L2xpc3RpdGVtPgotICogPC9pdGVtaXplZGxpc3Q+Ci0gKiBUaGUgbWVzc2FnZSBpcyB0eXBpY2FsbHkgdXNlZCB0byBkZXRlY3QgdGhhdCBubyBVRFAgYXJyaXZlcyBpbiB0aGUgcmVjZWl2ZXIKLSAqIGJlY2F1c2UgaXQgaXMgYmxvY2tlZCBieSBhIGZpcmV3YWxsLgotICoKLSAqIEEgY3VzdG9tIGZpbGUgZGVzY3JpcHRvciBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZQotICogI0dzdFVEUFNyYzpzb2NrZXQgcHJvcGVydHkuIFRoZSBzb2NrZXQgd2lsbCBiZSBjbG9zZWQgd2hlbiBzZXR0aW5nCi0gKiB0aGUgZWxlbWVudCB0byBSRUFEWSBieSBkZWZhdWx0LiBUaGlzIGJlaGF2aW91ciBjYW4gYmUgb3ZlcnJpZGVuCi0gKiB3aXRoIHRoZSAjR3N0VURQU3JjOmNsb3NlLXNvY2tldCBwcm9wZXJ0eSwgaW4gd2hpY2ggY2FzZSB0aGUKLSAqIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjbG9zaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB1ZHBzcmMgISBmYWtlc2luayBkdW1wPTEKLSAqIF18IEEgcGlwZWxpbmUgdG8gcmVhZCBmcm9tIHRoZSBkZWZhdWx0IHBvcnQgYW5kIGR1bXAgdGhlIHVkcCBwYWNrZXRzLgotICogVG8gYWN0dWFsbHkgZ2VuZXJhdGUgdWRwIHBhY2tldHMgb24gdGhlIGRlZmF1bHQgcG9ydCBvbmUgY2FuIHVzZSB0aGUKLSAqIHVkcHNpbmsgZWxlbWVudC4gV2hlbiBydW5uaW5nIHRoZSBmb2xsb3dpbmcgcGlwZWxpbmUgaW4gYW5vdGhlciB0ZXJtaW5hbCwgdGhlCi0gKiBhYm92ZSBtZW50aW9uZWQgcGlwZWxpbmUgc2hvdWxkIGR1bXAgZGF0YSBwYWNrZXRzIHRvIHRoZSBjb25zb2xlLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyAhIHVkcHNpbmsKLSAqIF18Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdWRwc3JjIHBvcnQ9MCAhIGZha2VzaW5rCi0gKiBdfCByZWFkIHVkcCBwYWNrZXRzIGZyb20gYSBmcmVlIHBvcnQuCi0gKiA8L3JlZnNlY3QyPgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLS8qIE5lZWRlZCB0byBnZXQgc3RydWN0IGluNl9wa3RpbmZvLgotICogQWxzbyBhbGwgdGhlc2UgaGF2ZSB0byBiZSBiZWZvcmUgZ2xpYi5oIGlzIGluY2x1ZGVkIGFzCi0gKiBvdGhlcndpc2Ugc3RydWN0IGluNl9wa3RpbmZvIGlzIG5vdCBkZWZpbmVkIGNvbXBsZXRlbHkKLSAqIGR1ZSB0byBicm9rZW4gZ2xpYmMgaGVhZGVycyAqLwotI2RlZmluZSBfR05VX1NPVVJDRQotLyogTmVlZGVkIGZvciBPU1gvaU9TIHRvIGRlZmluZSB0aGUgSVB2NiB2YXJpYW50cyAqLwotI2RlZmluZSBfX0FQUExFX1VTRV9SRkNfMzU0MgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3R1ZHBzcmMuaCIKLQotI2luY2x1ZGUgPGdzdC9uZXQvZ3N0bmV0YWRkcmVzc21ldGEuaD4KLQotI2luY2x1ZGUgPGdpby9nbmV0d29ya2luZy5oPgotCi0vKiBSZXF1aXJlZCBmb3Igb3RoZXIgcGFydHMgb2YgaW5fcGt0aW5mbyAvIGluNl9wa3RpbmZvIGJ1dCBvbmx5Ci0gKiBvbiBub24tV2luZG93cyBhbmQgY2FuIGJlIGluY2x1ZGVkIGFmdGVyIGdsaWIuaCAqLwotI2lmbmRlZiBHX1BMQVRGT1JNX1dJTjMyCi0jaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgotI2VuZGlmCi0KLS8qIENvbnRyb2wgbWVzc2FnZXMgZm9yIGdldHRpbmcgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLSNpZmRlZiBJUF9QS1RJTkZPCi1HVHlwZSBnc3RfaXBfcGt0aW5mb19tZXNzYWdlX2dldF90eXBlICh2b2lkKTsKLQotI2RlZmluZSBHU1RfVFlQRV9JUF9QS1RJTkZPX01FU1NBR0UgICAgICAgICAoZ3N0X2lwX3BrdGluZm9fbWVzc2FnZV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX0lQX1BLVElORk9fTUVTU0FHRShvKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgobyksIEdTVF9UWVBFX0lQX1BLVElORk9fTUVTU0FHRSwgR3N0SVBQa3RpbmZvTWVzc2FnZSkpCi0jZGVmaW5lIEdTVF9JUF9QS1RJTkZPX01FU1NBR0VfQ0xBU1MoYykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGMpLCBHU1RfVFlQRV9JUF9QS1RJTkZPX01FU1NBR0UsIEdzdElQUGt0aW5mb01lc3NhZ2VDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19JUF9QS1RJTkZPX01FU1NBR0UobykgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBHU1RfVFlQRV9JUF9QS1RJTkZPX01FU1NBR0UpKQotI2RlZmluZSBHU1RfSVNfSVBfUEtUSU5GT19NRVNTQUdFX0NMQVNTKGMpICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChjKSwgR1NUX1RZUEVfSVBfUEtUSU5GT19NRVNTQUdFKSkKLSNkZWZpbmUgR1NUX0lQX1BLVElORk9fTUVTU0FHRV9HRVRfQ0xBU1MobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvKSwgR1NUX1RZUEVfSVBfUEtUSU5GT19NRVNTQUdFLCBHc3RJUFBrdGluZm9NZXNzYWdlQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0SVBQa3RpbmZvTWVzc2FnZSBHc3RJUFBrdGluZm9NZXNzYWdlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdElQUGt0aW5mb01lc3NhZ2VDbGFzcyBHc3RJUFBrdGluZm9NZXNzYWdlQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0SVBQa3RpbmZvTWVzc2FnZUNsYXNzCi17Ci0gIEdTb2NrZXRDb250cm9sTWVzc2FnZUNsYXNzIHBhcmVudF9jbGFzczsKLQotfTsKLQotc3RydWN0IF9Hc3RJUFBrdGluZm9NZXNzYWdlCi17Ci0gIEdTb2NrZXRDb250cm9sTWVzc2FnZSBwYXJlbnQ7Ci0KLSAgZ3VpbnQgaWZpbmRleDsKLSNpZm5kZWYgR19QTEFURk9STV9XSU4zMgotI2lmbmRlZiBfX05ldEJTRF9fCi0gIHN0cnVjdCBpbl9hZGRyIHNwZWNfZHN0OwotI2VuZGlmCi0jZW5kaWYKLSAgc3RydWN0IGluX2FkZHIgYWRkcjsKLX07Ci0KLUdfREVGSU5FX1RZUEUgKEdzdElQUGt0aW5mb01lc3NhZ2UsIGdzdF9pcF9wa3RpbmZvX21lc3NhZ2UsCi0gICAgR19UWVBFX1NPQ0tFVF9DT05UUk9MX01FU1NBR0UpOwotCi1zdGF0aWMgZ3NpemUKLWdzdF9pcF9wa3RpbmZvX21lc3NhZ2VfZ2V0X3NpemUgKEdTb2NrZXRDb250cm9sTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIHJldHVybiBzaXplb2YgKHN0cnVjdCBpbl9wa3RpbmZvKTsKLX0KLQotc3RhdGljIGludAotZ3N0X2lwX3BrdGluZm9fbWVzc2FnZV9nZXRfbGV2ZWwgKEdTb2NrZXRDb250cm9sTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIHJldHVybiBJUFBST1RPX0lQOwotfQotCi1zdGF0aWMgaW50Ci1nc3RfaXBfcGt0aW5mb19tZXNzYWdlX2dldF9tc2dfdHlwZSAoR1NvY2tldENvbnRyb2xNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgcmV0dXJuIElQX1BLVElORk87Ci19Ci0KLXN0YXRpYyBHU29ja2V0Q29udHJvbE1lc3NhZ2UgKgotZ3N0X2lwX3BrdGluZm9fbWVzc2FnZV9kZXNlcmlhbGl6ZSAoZ2ludCBsZXZlbCwKLSAgICBnaW50IHR5cGUsIGdzaXplIHNpemUsIGdwb2ludGVyIGRhdGEpCi17Ci0gIHN0cnVjdCBpbl9wa3RpbmZvICpwa3RpbmZvOwotICBHc3RJUFBrdGluZm9NZXNzYWdlICptZXNzYWdlOwotCi0gIGlmIChsZXZlbCAhPSBJUFBST1RPX0lQIHx8IHR5cGUgIT0gSVBfUEtUSU5GTykKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoc2l6ZSA8IHNpemVvZiAoc3RydWN0IGluX3BrdGluZm8pKQotICAgIHJldHVybiBOVUxMOwotCi0gIHBrdGluZm8gPSBkYXRhOwotCi0gIG1lc3NhZ2UgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0lQX1BLVElORk9fTUVTU0FHRSwgTlVMTCk7Ci0gIG1lc3NhZ2UtPmlmaW5kZXggPSBwa3RpbmZvLT5pcGlfaWZpbmRleDsKLSNpZm5kZWYgR19QTEFURk9STV9XSU4zMgotI2lmbmRlZiBfX05ldEJTRF9fCi0gIG1lc3NhZ2UtPnNwZWNfZHN0ID0gcGt0aW5mby0+aXBpX3NwZWNfZHN0OwotI2VuZGlmCi0jZW5kaWYKLSAgbWVzc2FnZS0+YWRkciA9IHBrdGluZm8tPmlwaV9hZGRyOwotCi0gIHJldHVybiBHX1NPQ0tFVF9DT05UUk9MX01FU1NBR0UgKG1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lwX3BrdGluZm9fbWVzc2FnZV9pbml0IChHc3RJUFBrdGluZm9NZXNzYWdlICogbWVzc2FnZSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pcF9wa3RpbmZvX21lc3NhZ2VfY2xhc3NfaW5pdCAoR3N0SVBQa3RpbmZvTWVzc2FnZUNsYXNzICogY2xhc3MpCi17Ci0gIEdTb2NrZXRDb250cm9sTWVzc2FnZUNsYXNzICpzY21fY2xhc3M7Ci0KLSAgc2NtX2NsYXNzID0gR19TT0NLRVRfQ09OVFJPTF9NRVNTQUdFX0NMQVNTIChjbGFzcyk7Ci0gIHNjbV9jbGFzcy0+Z2V0X3NpemUgPSBnc3RfaXBfcGt0aW5mb19tZXNzYWdlX2dldF9zaXplOwotICBzY21fY2xhc3MtPmdldF9sZXZlbCA9IGdzdF9pcF9wa3RpbmZvX21lc3NhZ2VfZ2V0X2xldmVsOwotICBzY21fY2xhc3MtPmdldF90eXBlID0gZ3N0X2lwX3BrdGluZm9fbWVzc2FnZV9nZXRfbXNnX3R5cGU7Ci0gIHNjbV9jbGFzcy0+ZGVzZXJpYWxpemUgPSBnc3RfaXBfcGt0aW5mb19tZXNzYWdlX2Rlc2VyaWFsaXplOwotfQotI2VuZGlmCi0KLSNpZmRlZiBJUFY2X1BLVElORk8KLUdUeXBlIGdzdF9pcHY2X3BrdGluZm9fbWVzc2FnZV9nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfSVBWNl9QS1RJTkZPX01FU1NBR0UgICAgICAgICAoZ3N0X2lwdjZfcGt0aW5mb19tZXNzYWdlX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVBWNl9QS1RJTkZPX01FU1NBR0UobykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBHU1RfVFlQRV9JUFY2X1BLVElORk9fTUVTU0FHRSwgR3N0SVBWNlBrdGluZm9NZXNzYWdlKSkKLSNkZWZpbmUgR1NUX0lQVjZfUEtUSU5GT19NRVNTQUdFX0NMQVNTKGMpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChjKSwgR1NUX1RZUEVfSVBWNl9QS1RJTkZPX01FU1NBR0UsIEdzdElQVjZQa3RpbmZvTWVzc2FnZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lQVjZfUEtUSU5GT19NRVNTQUdFKG8pICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvKSwgR1NUX1RZUEVfSVBWNl9QS1RJTkZPX01FU1NBR0UpKQotI2RlZmluZSBHU1RfSVNfSVBWNl9QS1RJTkZPX01FU1NBR0VfQ0xBU1MoYykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGMpLCBHU1RfVFlQRV9JUFY2X1BLVElORk9fTUVTU0FHRSkpCi0jZGVmaW5lIEdTVF9JUFY2X1BLVElORk9fTUVTU0FHRV9HRVRfQ0xBU1MobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvKSwgR1NUX1RZUEVfSVBWNl9QS1RJTkZPX01FU1NBR0UsIEdzdElQVjZQa3RpbmZvTWVzc2FnZUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdElQVjZQa3RpbmZvTWVzc2FnZSBHc3RJUFY2UGt0aW5mb01lc3NhZ2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SVBWNlBrdGluZm9NZXNzYWdlQ2xhc3MgR3N0SVBWNlBrdGluZm9NZXNzYWdlQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0SVBWNlBrdGluZm9NZXNzYWdlQ2xhc3MKLXsKLSAgR1NvY2tldENvbnRyb2xNZXNzYWdlQ2xhc3MgcGFyZW50X2NsYXNzOwotCi19OwotCi1zdHJ1Y3QgX0dzdElQVjZQa3RpbmZvTWVzc2FnZQotewotICBHU29ja2V0Q29udHJvbE1lc3NhZ2UgcGFyZW50OwotCi0gIGd1aW50IGlmaW5kZXg7Ci0gIHN0cnVjdCBpbjZfYWRkciBhZGRyOwotfTsKLQotR19ERUZJTkVfVFlQRSAoR3N0SVBWNlBrdGluZm9NZXNzYWdlLCBnc3RfaXB2Nl9wa3RpbmZvX21lc3NhZ2UsCi0gICAgR19UWVBFX1NPQ0tFVF9DT05UUk9MX01FU1NBR0UpOwotCi1zdGF0aWMgZ3NpemUKLWdzdF9pcHY2X3BrdGluZm9fbWVzc2FnZV9nZXRfc2l6ZSAoR1NvY2tldENvbnRyb2xNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgcmV0dXJuIHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKTsKLX0KLQotc3RhdGljIGludAotZ3N0X2lwdjZfcGt0aW5mb19tZXNzYWdlX2dldF9sZXZlbCAoR1NvY2tldENvbnRyb2xNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgcmV0dXJuIElQUFJPVE9fSVBWNjsKLX0KLQotc3RhdGljIGludAotZ3N0X2lwdjZfcGt0aW5mb19tZXNzYWdlX2dldF9tc2dfdHlwZSAoR1NvY2tldENvbnRyb2xNZXNzYWdlICogbWVzc2FnZSkKLXsKLSAgcmV0dXJuIElQVjZfUEtUSU5GTzsKLX0KLQotc3RhdGljIEdTb2NrZXRDb250cm9sTWVzc2FnZSAqCi1nc3RfaXB2Nl9wa3RpbmZvX21lc3NhZ2VfZGVzZXJpYWxpemUgKGdpbnQgbGV2ZWwsCi0gICAgZ2ludCB0eXBlLCBnc2l6ZSBzaXplLCBncG9pbnRlciBkYXRhKQotewotICBzdHJ1Y3QgaW42X3BrdGluZm8gKnBrdGluZm87Ci0gIEdzdElQVjZQa3RpbmZvTWVzc2FnZSAqbWVzc2FnZTsKLQotICBpZiAobGV2ZWwgIT0gSVBQUk9UT19JUFY2IHx8IHR5cGUgIT0gSVBWNl9QS1RJTkZPKQotICAgIHJldHVybiBOVUxMOwotCi0gIGlmIChzaXplIDwgc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKQotICAgIHJldHVybiBOVUxMOwotCi0gIHBrdGluZm8gPSBkYXRhOwotCi0gIG1lc3NhZ2UgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0lQVjZfUEtUSU5GT19NRVNTQUdFLCBOVUxMKTsKLSAgbWVzc2FnZS0+aWZpbmRleCA9IHBrdGluZm8tPmlwaTZfaWZpbmRleDsKLSAgbWVzc2FnZS0+YWRkciA9IHBrdGluZm8tPmlwaTZfYWRkcjsKLQotICByZXR1cm4gR19TT0NLRVRfQ09OVFJPTF9NRVNTQUdFIChtZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9pcHY2X3BrdGluZm9fbWVzc2FnZV9pbml0IChHc3RJUFY2UGt0aW5mb01lc3NhZ2UgKiBtZXNzYWdlKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2lwdjZfcGt0aW5mb19tZXNzYWdlX2NsYXNzX2luaXQgKEdzdElQVjZQa3RpbmZvTWVzc2FnZUNsYXNzICogY2xhc3MpCi17Ci0gIEdTb2NrZXRDb250cm9sTWVzc2FnZUNsYXNzICpzY21fY2xhc3M7Ci0KLSAgc2NtX2NsYXNzID0gR19TT0NLRVRfQ09OVFJPTF9NRVNTQUdFX0NMQVNTIChjbGFzcyk7Ci0gIHNjbV9jbGFzcy0+Z2V0X3NpemUgPSBnc3RfaXB2Nl9wa3RpbmZvX21lc3NhZ2VfZ2V0X3NpemU7Ci0gIHNjbV9jbGFzcy0+Z2V0X2xldmVsID0gZ3N0X2lwdjZfcGt0aW5mb19tZXNzYWdlX2dldF9sZXZlbDsKLSAgc2NtX2NsYXNzLT5nZXRfdHlwZSA9IGdzdF9pcHY2X3BrdGluZm9fbWVzc2FnZV9nZXRfbXNnX3R5cGU7Ci0gIHNjbV9jbGFzcy0+ZGVzZXJpYWxpemUgPSBnc3RfaXB2Nl9wa3RpbmZvX21lc3NhZ2VfZGVzZXJpYWxpemU7Ci19Ci0KLSNlbmRpZgotCi0jaWZkZWYgSVBfUkVDVkRTVEFERFIKLUdUeXBlIGdzdF9pcF9yZWN2ZHN0YWRkcl9tZXNzYWdlX2dldF90eXBlICh2b2lkKTsKLQotI2RlZmluZSBHU1RfVFlQRV9JUF9SRUNWRFNUQUREUl9NRVNTQUdFICAgICAgICAgKGdzdF9pcF9yZWN2ZHN0YWRkcl9tZXNzYWdlX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfSVBfUkVDVkRTVEFERFJfTUVTU0FHRShvKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgobyksIEdTVF9UWVBFX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0UsIEdzdElQUmVjdmRzdGFkZHJNZXNzYWdlKSkKLSNkZWZpbmUgR1NUX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0VfQ0xBU1MoYykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGMpLCBHU1RfVFlQRV9JUF9SRUNWRFNUQUREUl9NRVNTQUdFLCBHc3RJUFJlY3Zkc3RhZGRyTWVzc2FnZUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0UobykgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBHU1RfVFlQRV9JUF9SRUNWRFNUQUREUl9NRVNTQUdFKSkKLSNkZWZpbmUgR1NUX0lTX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0VfQ0xBU1MoYykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGMpLCBHU1RfVFlQRV9JUF9SRUNWRFNUQUREUl9NRVNTQUdFKSkKLSNkZWZpbmUgR1NUX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0VfR0VUX0NMQVNTKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgobyksIEdTVF9UWVBFX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0UsIEdzdElQUmVjdmRzdGFkZHJNZXNzYWdlQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0SVBSZWN2ZHN0YWRkck1lc3NhZ2UgR3N0SVBSZWN2ZHN0YWRkck1lc3NhZ2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0SVBSZWN2ZHN0YWRkck1lc3NhZ2VDbGFzcyBHc3RJUFJlY3Zkc3RhZGRyTWVzc2FnZUNsYXNzOwotCi1zdHJ1Y3QgX0dzdElQUmVjdmRzdGFkZHJNZXNzYWdlQ2xhc3MKLXsKLSAgR1NvY2tldENvbnRyb2xNZXNzYWdlQ2xhc3MgcGFyZW50X2NsYXNzOwotCi19OwotCi1zdHJ1Y3QgX0dzdElQUmVjdmRzdGFkZHJNZXNzYWdlCi17Ci0gIEdTb2NrZXRDb250cm9sTWVzc2FnZSBwYXJlbnQ7Ci0KLSAgZ3VpbnQgaWZpbmRleDsKLSAgc3RydWN0IGluX2FkZHIgYWRkcjsKLX07Ci0KLUdfREVGSU5FX1RZUEUgKEdzdElQUmVjdmRzdGFkZHJNZXNzYWdlLCBnc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZSwKLSAgICBHX1RZUEVfU09DS0VUX0NPTlRST0xfTUVTU0FHRSk7Ci0KLXN0YXRpYyBnc2l6ZQotZ3N0X2lwX3JlY3Zkc3RhZGRyX21lc3NhZ2VfZ2V0X3NpemUgKEdTb2NrZXRDb250cm9sTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci0gIHJldHVybiBzaXplb2YgKHN0cnVjdCBpbl9hZGRyKTsKLX0KLQotc3RhdGljIGludAotZ3N0X2lwX3JlY3Zkc3RhZGRyX21lc3NhZ2VfZ2V0X2xldmVsIChHU29ja2V0Q29udHJvbE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICByZXR1cm4gSVBQUk9UT19JUDsKLX0KLQotc3RhdGljIGludAotZ3N0X2lwX3JlY3Zkc3RhZGRyX21lc3NhZ2VfZ2V0X21zZ190eXBlIChHU29ja2V0Q29udHJvbE1lc3NhZ2UgKiBtZXNzYWdlKQotewotICByZXR1cm4gSVBfUkVDVkRTVEFERFI7Ci19Ci0KLXN0YXRpYyBHU29ja2V0Q29udHJvbE1lc3NhZ2UgKgotZ3N0X2lwX3JlY3Zkc3RhZGRyX21lc3NhZ2VfZGVzZXJpYWxpemUgKGdpbnQgbGV2ZWwsCi0gICAgZ2ludCB0eXBlLCBnc2l6ZSBzaXplLCBncG9pbnRlciBkYXRhKQotewotICBzdHJ1Y3QgaW5fYWRkciAqYWRkcjsKLSAgR3N0SVBSZWN2ZHN0YWRkck1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgaWYgKGxldmVsICE9IElQUFJPVE9fSVAgfHwgdHlwZSAhPSBJUF9SRUNWRFNUQUREUikKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoc2l6ZSA8IHNpemVvZiAoc3RydWN0IGluX2FkZHIpKQotICAgIHJldHVybiBOVUxMOwotCi0gIGFkZHIgPSBkYXRhOwotCi0gIG1lc3NhZ2UgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0UsIE5VTEwpOwotICBtZXNzYWdlLT5hZGRyID0gKmFkZHI7Ci0KLSAgcmV0dXJuIEdfU09DS0VUX0NPTlRST0xfTUVTU0FHRSAobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZV9pbml0IChHc3RJUFJlY3Zkc3RhZGRyTWVzc2FnZSAqIG1lc3NhZ2UpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZV9jbGFzc19pbml0IChHc3RJUFJlY3Zkc3RhZGRyTWVzc2FnZUNsYXNzICogY2xhc3MpCi17Ci0gIEdTb2NrZXRDb250cm9sTWVzc2FnZUNsYXNzICpzY21fY2xhc3M7Ci0KLSAgc2NtX2NsYXNzID0gR19TT0NLRVRfQ09OVFJPTF9NRVNTQUdFX0NMQVNTIChjbGFzcyk7Ci0gIHNjbV9jbGFzcy0+Z2V0X3NpemUgPSBnc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZV9nZXRfc2l6ZTsKLSAgc2NtX2NsYXNzLT5nZXRfbGV2ZWwgPSBnc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZV9nZXRfbGV2ZWw7Ci0gIHNjbV9jbGFzcy0+Z2V0X3R5cGUgPSBnc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZV9nZXRfbXNnX3R5cGU7Ci0gIHNjbV9jbGFzcy0+ZGVzZXJpYWxpemUgPSBnc3RfaXBfcmVjdmRzdGFkZHJfbWVzc2FnZV9kZXNlcmlhbGl6ZTsKLX0KLSNlbmRpZgotCi0vKiBub3QgMTAwJSBjb3JyZWN0LCBidXQgYSBnb29kIHVwcGVyIGJvdW5kIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwdXJwb3NlcyAqLwotI2RlZmluZSBNQVhfSVBWNF9VRFBfUEFDS0VUX1NJWkUgKDY1NTM2IC0gOCkKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAodWRwc3JjX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUICh1ZHBzcmNfZGVidWcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLSNkZWZpbmUgVURQX0RFRkFVTFRfUE9SVCAgICAgICAgICAgICAgICA1MDA0Ci0jZGVmaW5lIFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9HUk9VUCAgICAgIjAuMC4wLjAiCi0jZGVmaW5lIFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSAgICAgTlVMTAotI2RlZmluZSBVRFBfREVGQVVMVF9VUkkgICAgICAgICAgICAgICAgICJ1ZHA6Ly8iVURQX0RFRkFVTFRfTVVMVElDQVNUX0dST1VQIjoiR19TVFJJTkdJRlkoVURQX0RFRkFVTFRfUE9SVCkKLSNkZWZpbmUgVURQX0RFRkFVTFRfQ0FQUyAgICAgICAgICAgICAgICBOVUxMCi0jZGVmaW5lIFVEUF9ERUZBVUxUX1NPQ0tFVCAgICAgICAgICAgICAgTlVMTAotI2RlZmluZSBVRFBfREVGQVVMVF9CVUZGRVJfU0laRQkJMAotI2RlZmluZSBVRFBfREVGQVVMVF9USU1FT1VUICAgICAgICAgICAgIDAKLSNkZWZpbmUgVURQX0RFRkFVTFRfU0tJUF9GSVJTVF9CWVRFUwkwCi0jZGVmaW5lIFVEUF9ERUZBVUxUX0NMT1NFX1NPQ0tFVCAgICAgICBUUlVFCi0jZGVmaW5lIFVEUF9ERUZBVUxUX1VTRURfU09DS0VUICAgICAgICBOVUxMCi0jZGVmaW5lIFVEUF9ERUZBVUxUX0FVVE9fTVVMVElDQVNUICAgICBUUlVFCi0jZGVmaW5lIFVEUF9ERUZBVUxUX1JFVVNFICAgICAgICAgICAgICBUUlVFCi0jZGVmaW5lIFVEUF9ERUZBVUxUX0xPT1AgICAgICAgICAgICAgICBUUlVFCi0jZGVmaW5lIFVEUF9ERUZBVUxUX1JFVFJJRVZFX1NFTkRFUl9BRERSRVNTIFRSVUUKLQotZW51bQotewotICBQUk9QXzAsCi0KLSAgUFJPUF9QT1JULAotICBQUk9QX01VTFRJQ0FTVF9HUk9VUCwKLSAgUFJPUF9NVUxUSUNBU1RfSUZBQ0UsCi0gIFBST1BfVVJJLAotICBQUk9QX0NBUFMsCi0gIFBST1BfU09DS0VULAotICBQUk9QX0JVRkZFUl9TSVpFLAotICBQUk9QX1RJTUVPVVQsCi0gIFBST1BfU0tJUF9GSVJTVF9CWVRFUywKLSAgUFJPUF9DTE9TRV9TT0NLRVQsCi0gIFBST1BfVVNFRF9TT0NLRVQsCi0gIFBST1BfQVVUT19NVUxUSUNBU1QsCi0gIFBST1BfUkVVU0UsCi0gIFBST1BfQUREUkVTUywKLSAgUFJPUF9MT09QLAotICBQUk9QX1JFVFJJRVZFX1NFTkRFUl9BRERSRVNTCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfdWRwc3JjX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3VkcHNyY19nZXRjYXBzIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF91ZHBzcmNfY3JlYXRlIChHc3RQdXNoU3JjICogcHNyYywgR3N0QnVmZmVyICoqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3VkcHNyY19jbG9zZSAoR3N0VURQU3JjICogc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdWRwc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIGJzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF91ZHBzcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBic3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdWRwc3JjX25lZ290aWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpOwotCi1zdGF0aWMgdm9pZCBnc3RfdWRwc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X3VkcHNyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdWRwc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF91ZHBzcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotI2RlZmluZSBnc3RfdWRwc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RVRFBTcmMsIGdzdF91ZHBzcmMsIEdTVF9UWVBFX1BVU0hfU1JDLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsIGdzdF91ZHBzcmNfdXJpX2hhbmRsZXJfaW5pdCkpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3VkcHNyY19jbGFzc19pbml0IChHc3RVRFBTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzOwotICBHc3RQdXNoU3JjQ2xhc3MgKmdzdHB1c2hzcmNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc3JjX2NsYXNzID0gKEdzdEJhc2VTcmNDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cHVzaHNyY19jbGFzcyA9IChHc3RQdXNoU3JjQ2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHVkcHNyY19kZWJ1ZywgInVkcHNyYyIsIDAsICJVRFAgc3JjIik7Ci0KLSNpZmRlZiBJUF9QS1RJTkZPCi0gIEdTVF9UWVBFX0lQX1BLVElORk9fTUVTU0FHRTsKLSNlbmRpZgotI2lmZGVmIElQVjZfUEtUSU5GTwotICBHU1RfVFlQRV9JUFY2X1BLVElORk9fTUVTU0FHRTsKLSNlbmRpZgotI2lmZGVmIElQX1JFQ1ZEU1RBRERSCi0gIEdTVF9UWVBFX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0U7Ci0jZW5kaWYKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdWRwc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3VkcHNyY19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3VkcHNyY19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1BPUlQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicG9ydCIsICJQb3J0IiwKLSAgICAgICAgICAiVGhlIHBvcnQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cyBmcm9tLCAwPWFsbG9jYXRlIiwgMCwgR19NQVhVSU5UMTYsCi0gICAgICAgICAgVURQX0RFRkFVTFRfUE9SVCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qIEZJWE1FIDIuMDogUmVtb3ZlIG11bHRpY2FzdC1ncm91cCBwcm9wZXJ0eSAqLwotI2lmbmRlZiBHU1RfUkVNT1ZFX0RFUFJFQ0FURUQKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9NVUxUSUNBU1RfR1JPVVAsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgibXVsdGljYXN0LWdyb3VwIiwgIk11bHRpY2FzdCBHcm91cCIsCi0gICAgICAgICAgIlRoZSBBZGRyZXNzIG9mIG11bHRpY2FzdCBncm91cCB0byBqb2luLiAoREVQUkVDQVRFRDogIgotICAgICAgICAgICJVc2UgYWRkcmVzcyBwcm9wZXJ0eSBpbnN0ZWFkKSIsIFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9HUk9VUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX0RFUFJFQ0FURUQpKTsKLSNlbmRpZgotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01VTFRJQ0FTVF9JRkFDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJtdWx0aWNhc3QtaWZhY2UiLCAiTXVsdGljYXN0IEludGVyZmFjZSIsCi0gICAgICAgICAgIlRoZSBuZXR3b3JrIGludGVyZmFjZSBvbiB3aGljaCB0byBqb2luIHRoZSBtdWx0aWNhc3QgZ3JvdXAiLAotICAgICAgICAgIFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9JRkFDRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9VUkksCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgidXJpIiwgIlVSSSIsCi0gICAgICAgICAgIlVSSSBpbiB0aGUgZm9ybSBvZiB1ZHA6Ly9tdWx0aWNhc3RfZ3JvdXA6cG9ydCIsIFVEUF9ERUZBVUxUX1VSSSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQVBTLAotICAgICAgZ19wYXJhbV9zcGVjX2JveGVkICgiY2FwcyIsICJDYXBzIiwKLSAgICAgICAgICAiVGhlIGNhcHMgb2YgdGhlIHNvdXJjZSBwYWQiLCBHU1RfVFlQRV9DQVBTLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1NPQ0tFVCwKLSAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QgKCJzb2NrZXQiLCAiU29ja2V0IiwKLSAgICAgICAgICAiU29ja2V0IHRvIHVzZSBmb3IgVURQIHJlY2VwdGlvbi4gKE5VTEwgPT0gYWxsb2NhdGUpIiwKLSAgICAgICAgICBHX1RZUEVfU09DS0VULCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9CVUZGRVJfU0laRSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJidWZmZXItc2l6ZSIsICJCdWZmZXIgU2l6ZSIsCi0gICAgICAgICAgIlNpemUgb2YgdGhlIGtlcm5lbCByZWNlaXZlIGJ1ZmZlciBpbiBieXRlcywgMD1kZWZhdWx0IiwgMCwgR19NQVhJTlQsCi0gICAgICAgICAgVURQX0RFRkFVTFRfQlVGRkVSX1NJWkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1RJTUVPVVQsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludDY0ICgidGltZW91dCIsICJUaW1lb3V0IiwKLSAgICAgICAgICAiUG9zdCBhIG1lc3NhZ2UgYWZ0ZXIgdGltZW91dCBuYW5vc2Vjb25kcyAoMCA9IGRpc2FibGVkKSIsIDAsCi0gICAgICAgICAgR19NQVhVSU5UNjQsIFVEUF9ERUZBVUxUX1RJTUVPVVQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksCi0gICAgICBQUk9QX1NLSVBfRklSU1RfQllURVMsIGdfcGFyYW1fc3BlY19pbnQgKCJza2lwLWZpcnN0LWJ5dGVzIiwKLSAgICAgICAgICAiU2tpcCBmaXJzdCBieXRlcyIsICJudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCBmb3IgZWFjaCB1ZHAgcGFja2V0IiwgMCwKLSAgICAgICAgICBHX01BWElOVCwgVURQX0RFRkFVTFRfU0tJUF9GSVJTVF9CWVRFUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DTE9TRV9TT0NLRVQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImNsb3NlLXNvY2tldCIsICJDbG9zZSBzb2NrZXQiLAotICAgICAgICAgICJDbG9zZSBzb2NrZXQgaWYgcGFzc2VkIGFzIHByb3BlcnR5IG9uIHN0YXRlIGNoYW5nZSIsCi0gICAgICAgICAgVURQX0RFRkFVTFRfQ0xPU0VfU09DS0VULAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1VTRURfU09DS0VULAotICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCAoInVzZWQtc29ja2V0IiwgIlNvY2tldCBIYW5kbGUiLAotICAgICAgICAgICJTb2NrZXQgY3VycmVudGx5IGluIHVzZSBmb3IgVURQIHJlY2VwdGlvbi4gKE5VTEwgPSBubyBzb2NrZXQpIiwKLSAgICAgICAgICBHX1RZUEVfU09DS0VULCBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FVVE9fTVVMVElDQVNULAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJhdXRvLW11bHRpY2FzdCIsICJBdXRvIE11bHRpY2FzdCIsCi0gICAgICAgICAgIkF1dG9tYXRpY2FsbHkgam9pbi9sZWF2ZSBtdWx0aWNhc3QgZ3JvdXBzIiwKLSAgICAgICAgICBVRFBfREVGQVVMVF9BVVRPX01VTFRJQ0FTVCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9SRVVTRSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgicmV1c2UiLCAiUmV1c2UiLCAiRW5hYmxlIHJldXNlIG9mIHRoZSBwb3J0IiwKLSAgICAgICAgICBVRFBfREVGQVVMVF9SRVVTRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQUREUkVTUywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJhZGRyZXNzIiwgIkFkZHJlc3MiLAotICAgICAgICAgICJBZGRyZXNzIHRvIHJlY2VpdmUgcGFja2V0cyBmb3IuIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgIgotICAgICAgICAgICJtdWx0aWNhc3QtZ3JvdXAgcHJvcGVydHkgZm9yIG5vdyIsIFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9HUk9VUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFVEUFNyYzo6bG9vcDoKLSAgICoKLSAgICogQ2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBtdWx0aWNhc3QgbG9vcGJhY2suCi0gICAqCi0gICAqIFNpbmNlOiAxLjgKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfTE9PUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibG9vcCIsICJNdWx0aWNhc3QgTG9vcGJhY2siLAotICAgICAgICAgICJVc2VkIGZvciBzZXR0aW5nIHRoZSBtdWx0aWNhc3QgbG9vcCBwYXJhbWV0ZXIuIFRSVUUgPSBlbmFibGUsIgotICAgICAgICAgICIgRkFMU0UgPSBkaXNhYmxlIiwgVURQX0RFRkFVTFRfTE9PUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgLyoqCi0gICAqIEdzdFVEUFNyYzo6cmV0cmlldmUtc2VuZGVyLWFkZHJlc3M6Ci0gICAqCi0gICAqIFdoZXRoZXIgdG8gcmV0cmlldmUgdGhlIHNlbmRlciBhZGRyZXNzIGFuZCBhZGQgaXQgdG8gdGhlIGJ1ZmZlcnMgYXMKLSAgICogbWV0YS4gRGlzYWJsaW5nIHRoaXMgbWlnaHQgcmVzdWx0IGluIG1pbm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwotICAgKiBpbiBjZXJ0YWluIHNjZW5hcmlvcy4KLSAgICoKLSAgICogU2luY2U6IDEuMTAKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUkVUUklFVkVfU0VOREVSX0FERFJFU1MsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInJldHJpZXZlLXNlbmRlci1hZGRyZXNzIiwKLSAgICAgICAgICAiUmV0cmlldmUgU2VuZGVyIEFkZHJlc3MiLAotICAgICAgICAgICJXaGV0aGVyIHRvIHJldHJpZXZlIHRoZSBzZW5kZXIgYWRkcmVzcyBhbmQgYWRkIGl0IHRvIGJ1ZmZlcnMgYXMgIgotICAgICAgICAgICJtZXRhLiBEaXNhYmxpbmcgdGhpcyBtaWdodCByZXN1bHQgaW4gbWlub3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzICIKLSAgICAgICAgICAiaW4gY2VydGFpbiBzY2VuYXJpb3MiLCBVRFBfREVGQVVMVF9SRVRSSUVWRV9TRU5ERVJfQUREUkVTUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICJVRFAgcGFja2V0IHJlY2VpdmVyIiwgIlNvdXJjZS9OZXR3b3JrIiwKLSAgICAgICJSZWNlaXZlIGRhdGEgb3ZlciB0aGUgbmV0d29yayB2aWEgVURQIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPiwgIgotICAgICAgIlRoaWpzIFZlcm1laXIgPHRoaWpzLnZlcm1laXJAYmFyY28uY29tPiIpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF91ZHBzcmNfY2hhbmdlX3N0YXRlOwotCi0gIGdzdGJhc2VzcmNfY2xhc3MtPnVubG9jayA9IGdzdF91ZHBzcmNfdW5sb2NrOwotICBnc3RiYXNlc3JjX2NsYXNzLT51bmxvY2tfc3RvcCA9IGdzdF91ZHBzcmNfdW5sb2NrX3N0b3A7Ci0gIGdzdGJhc2VzcmNfY2xhc3MtPmdldF9jYXBzID0gZ3N0X3VkcHNyY19nZXRjYXBzOwotICBnc3RiYXNlc3JjX2NsYXNzLT5uZWdvdGlhdGUgPSBnc3RfdWRwc3JjX25lZ290aWF0ZTsKLQotICBnc3RwdXNoc3JjX2NsYXNzLT5jcmVhdGUgPSBnc3RfdWRwc3JjX2NyZWF0ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzcmNfaW5pdCAoR3N0VURQU3JjICogdWRwc3JjKQotewotICB1ZHBzcmMtPnVyaSA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYgKCJ1ZHA6Ly8lczoldSIsIFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9HUk9VUCwKLSAgICAgIFVEUF9ERUZBVUxUX1BPUlQpOwotCi0gIHVkcHNyYy0+YWRkcmVzcyA9IGdfc3RyZHVwIChVRFBfREVGQVVMVF9NVUxUSUNBU1RfR1JPVVApOwotICB1ZHBzcmMtPnBvcnQgPSBVRFBfREVGQVVMVF9QT1JUOwotICB1ZHBzcmMtPnNvY2tldCA9IFVEUF9ERUZBVUxUX1NPQ0tFVDsKLSAgdWRwc3JjLT5tdWx0aV9pZmFjZSA9IGdfc3RyZHVwIChVRFBfREVGQVVMVF9NVUxUSUNBU1RfSUZBQ0UpOwotICB1ZHBzcmMtPmJ1ZmZlcl9zaXplID0gVURQX0RFRkFVTFRfQlVGRkVSX1NJWkU7Ci0gIHVkcHNyYy0+dGltZW91dCA9IFVEUF9ERUZBVUxUX1RJTUVPVVQ7Ci0gIHVkcHNyYy0+c2tpcF9maXJzdF9ieXRlcyA9IFVEUF9ERUZBVUxUX1NLSVBfRklSU1RfQllURVM7Ci0gIHVkcHNyYy0+Y2xvc2Vfc29ja2V0ID0gVURQX0RFRkFVTFRfQ0xPU0VfU09DS0VUOwotICB1ZHBzcmMtPmV4dGVybmFsX3NvY2tldCA9ICh1ZHBzcmMtPnNvY2tldCAhPSBOVUxMKTsKLSAgdWRwc3JjLT5hdXRvX211bHRpY2FzdCA9IFVEUF9ERUZBVUxUX0FVVE9fTVVMVElDQVNUOwotICB1ZHBzcmMtPnVzZWRfc29ja2V0ID0gVURQX0RFRkFVTFRfVVNFRF9TT0NLRVQ7Ci0gIHVkcHNyYy0+cmV1c2UgPSBVRFBfREVGQVVMVF9SRVVTRTsKLSAgdWRwc3JjLT5sb29wID0gVURQX0RFRkFVTFRfTE9PUDsKLSAgdWRwc3JjLT5yZXRyaWV2ZV9zZW5kZXJfYWRkcmVzcyA9IFVEUF9ERUZBVUxUX1JFVFJJRVZFX1NFTkRFUl9BRERSRVNTOwotCi0gIC8qIGNvbmZpZ3VyZSBiYXNlc3JjIHRvIGJlIGEgbGl2ZSBzb3VyY2UgKi8KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9saXZlIChHU1RfQkFTRV9TUkMgKHVkcHNyYyksIFRSVUUpOwotICAvKiBtYWtlIGJhc2VzcmMgb3V0cHV0IGEgc2VnbWVudCBpbiB0aW1lICovCi0gIGdzdF9iYXNlX3NyY19zZXRfZm9ybWF0IChHU1RfQkFTRV9TUkMgKHVkcHNyYyksIEdTVF9GT1JNQVRfVElNRSk7Ci0gIC8qIG1ha2UgYmFzZXNyYyBzZXQgdGltZXN0YW1wcyBvbiBvdXRnb2luZyBidWZmZXJzIGJhc2VkIG9uIHRoZSBydW5uaW5nX3RpbWUKLSAgICogd2hlbiB0aGV5IHdlcmUgY2FwdHVyZWQgKi8KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9kb190aW1lc3RhbXAgKEdTVF9CQVNFX1NSQyAodWRwc3JjKSwgVFJVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdWRwc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RVRFBTcmMgKnVkcHNyYzsKLQotICB1ZHBzcmMgPSBHU1RfVURQU1JDIChvYmplY3QpOwotCi0gIGlmICh1ZHBzcmMtPmNhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHVkcHNyYy0+Y2Fwcyk7Ci0gIHVkcHNyYy0+Y2FwcyA9IE5VTEw7Ci0KLSAgZ19mcmVlICh1ZHBzcmMtPm11bHRpX2lmYWNlKTsKLSAgdWRwc3JjLT5tdWx0aV9pZmFjZSA9IE5VTEw7Ci0KLSAgZ19mcmVlICh1ZHBzcmMtPnVyaSk7Ci0gIHVkcHNyYy0+dXJpID0gTlVMTDsKLQotICBnX2ZyZWUgKHVkcHNyYy0+YWRkcmVzcyk7Ci0gIHVkcHNyYy0+YWRkcmVzcyA9IE5VTEw7Ci0KLSAgaWYgKHVkcHNyYy0+c29ja2V0KQotICAgIGdfb2JqZWN0X3VucmVmICh1ZHBzcmMtPnNvY2tldCk7Ci0gIHVkcHNyYy0+c29ja2V0ID0gTlVMTDsKLQotICBpZiAodWRwc3JjLT51c2VkX3NvY2tldCkKLSAgICBnX29iamVjdF91bnJlZiAodWRwc3JjLT51c2VkX3NvY2tldCk7Ci0gIHVkcHNyYy0+dXNlZF9zb2NrZXQgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3VkcHNyY19nZXRjYXBzIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RVRFBTcmMgKnVkcHNyYzsKLSAgR3N0Q2FwcyAqY2FwcywgKnJlc3VsdDsKLQotICB1ZHBzcmMgPSBHU1RfVURQU1JDIChzcmMpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3JjKTsKLSAgaWYgKChjYXBzID0gdWRwc3JjLT5jYXBzKSkKLSAgICBnc3RfY2Fwc19yZWYgKGNhcHMpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc3JjKTsKLQotICBpZiAoY2FwcykgewotICAgIGlmIChmaWx0ZXIpIHsKLSAgICAgIHJlc3VsdCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IGNhcHM7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHJlc3VsdCA9IChmaWx0ZXIpID8gZ3N0X2NhcHNfcmVmIChmaWx0ZXIpIDogZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3VkcHNyY19yZXNldF9tZW1vcnlfYWxsb2NhdG9yIChHc3RVRFBTcmMgKiBzcmMpCi17Ci0gIGlmIChzcmMtPm1lbSAhPSBOVUxMKSB7Ci0gICAgZ3N0X21lbW9yeV91bm1hcCAoc3JjLT5tZW0sICZzcmMtPm1hcCk7Ci0gICAgZ3N0X21lbW9yeV91bnJlZiAoc3JjLT5tZW0pOwotICAgIHNyYy0+bWVtID0gTlVMTDsKLSAgfQotICBpZiAoc3JjLT5tZW1fbWF4ICE9IE5VTEwpIHsKLSAgICBnc3RfbWVtb3J5X3VubWFwIChzcmMtPm1lbV9tYXgsICZzcmMtPm1hcF9tYXgpOwotICAgIGdzdF9tZW1vcnlfdW5yZWYgKHNyYy0+bWVtX21heCk7Ci0gICAgc3JjLT5tZW1fbWF4ID0gTlVMTDsKLSAgfQotCi0gIHNyYy0+dmVjWzBdLmJ1ZmZlciA9IE5VTEw7Ci0gIHNyYy0+dmVjWzBdLnNpemUgPSAwOwotICBzcmMtPnZlY1sxXS5idWZmZXIgPSBOVUxMOwotICBzcmMtPnZlY1sxXS5zaXplID0gMDsKLQotICBpZiAoc3JjLT5hbGxvY2F0b3IgIT0gTlVMTCkgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyYy0+YWxsb2NhdG9yKTsKLSAgICBzcmMtPmFsbG9jYXRvciA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdWRwc3JjX25lZ290aWF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdFVEUFNyYyAqc3JjID0gR1NUX1VEUFNSQ19DQVNUIChiYXNlc3JjKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIC8qIGp1c3QgY2hhaW4gdXAgdG8gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHdlIGp1c3Qgd2FudCB0bwotICAgKiByZXRyaWV2ZSB0aGUgYWxsb2NhdG9yIGF0IHRoZSBlbmQgb2YgaXQgKGlmIHRoZXJlIGlzIG9uZSkgKi8KLSAgcmV0ID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5uZWdvdGlhdGUgKGJhc2VzcmMpOwotCi0gIGlmIChyZXQpIHsKLSAgICBHc3RBbGxvY2F0aW9uUGFyYW1zIG5ld19wYXJhbXM7Ci0gICAgR3N0QWxsb2NhdG9yICpuZXdfYWxsb2NhdG9yID0gTlVMTDsKLQotICAgIC8qIHJldHJpZXZlIG5ldyBhbGxvY2F0b3IgKi8KLSAgICBnc3RfYmFzZV9zcmNfZ2V0X2FsbG9jYXRvciAoYmFzZXNyYywgJm5ld19hbGxvY2F0b3IsICZuZXdfcGFyYW1zKTsKLQotICAgIGlmIChzcmMtPmFsbG9jYXRvciAhPSBuZXdfYWxsb2NhdG9yIHx8Ci0gICAgICAgIG1lbWNtcCAoJnNyYy0+cGFyYW1zLCAmbmV3X3BhcmFtcywgc2l6ZW9mIChHc3RBbGxvY2F0aW9uUGFyYW1zKSkgIT0gMCkgewotICAgICAgLyogZHJvcCBvbGQgYWxsb2NhdG9yIGFuZCB0aHJvdyBhd2F5IGFueSBtZW1vcnkgYWxsb2NhdGVkIHdpdGggaXQgKi8KLSAgICAgIGdzdF91ZHBzcmNfcmVzZXRfbWVtb3J5X2FsbG9jYXRvciAoc3JjKTsKLQotICAgICAgLyogYW5kIHNhdmUgdGhlIG5ldyBhbGxvY2F0b3IgYW5kL29yIG5ldyBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgKi8KLSAgICAgIHNyYy0+YWxsb2NhdG9yID0gbmV3X2FsbG9jYXRvcjsKLSAgICAgIHNyYy0+cGFyYW1zID0gbmV3X3BhcmFtczsKLQotICAgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJuZXcgYWxsb2NhdG9yOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3X2FsbG9jYXRvcik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdWRwc3JjX2FsbG9jX21lbSAoR3N0VURQU3JjICogc3JjLCBHc3RNZW1vcnkgKiogcF9tZW0sIEdzdE1hcEluZm8gKiBtYXAsCi0gICAgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0TWVtb3J5ICptZW07Ci0KLSAgbWVtID0gZ3N0X2FsbG9jYXRvcl9hbGxvYyAoc3JjLT5hbGxvY2F0b3IsIHNpemUsICZzcmMtPnBhcmFtcyk7Ci0KLSAgaWYgKCFnc3RfbWVtb3J5X21hcCAobWVtLCBtYXAsIEdTVF9NQVBfV1JJVEUpKSB7Ci0gICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLSAgICBtZW1zZXQgKG1hcCwgMCwgc2l6ZW9mIChHc3RNYXBJbmZvKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gICpwX21lbSA9IG1lbTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3VkcHNyY19lbnN1cmVfbWVtIChHc3RVRFBTcmMgKiBzcmMpCi17Ci0gIGlmIChzcmMtPm1lbSA9PSBOVUxMKSB7Ci0gICAgZ3NpemUgbWVtX3NpemUgPSAxNTAwOyAgICAgIC8qIHR5cGljYWwgbWF4LiBNVFUgKi8KLQotICAgIC8qIGlmIHBhY2tldHMgYXJlIGxpa2VseSB0byBiZSBzbWFsbGVyLCBqdXN0IHVzZSB0aGF0IHNpemUsIG90aGVyd2lzZQotICAgICAqIGRlZmF1bHQgdG8gYXNzdW1pbmcgaW5jb21pbmcgcGFja2V0cyBhcmUgYXJvdW5kIE1UVSBzaXplICovCi0gICAgaWYgKHNyYy0+bWF4X3NpemUgPiAwICYmIHNyYy0+bWF4X3NpemUgPCBtZW1fc2l6ZSkKLSAgICAgIG1lbV9zaXplID0gc3JjLT5tYXhfc2l6ZTsKLQotICAgIGlmICghZ3N0X3VkcHNyY19hbGxvY19tZW0gKHNyYywgJnNyYy0+bWVtLCAmc3JjLT5tYXAsIG1lbV9zaXplKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIHNyYy0+dmVjWzBdLmJ1ZmZlciA9IHNyYy0+bWFwLmRhdGE7Ci0gICAgc3JjLT52ZWNbMF0uc2l6ZSA9IHNyYy0+bWFwLnNpemU7Ci0gIH0KLQotICBpZiAoc3JjLT5tZW1fbWF4ID09IE5VTEwpIHsKLSAgICBnc2l6ZSBtYXhfc2l6ZSA9IE1BWF9JUFY0X1VEUF9QQUNLRVRfU0laRTsKLQotICAgIGlmICghZ3N0X3VkcHNyY19hbGxvY19tZW0gKHNyYywgJnNyYy0+bWVtX21heCwgJnNyYy0+bWFwX21heCwgbWF4X3NpemUpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgc3JjLT52ZWNbMV0uYnVmZmVyID0gc3JjLT5tYXBfbWF4LmRhdGE7Ci0gICAgc3JjLT52ZWNbMV0uc2l6ZSA9IHNyYy0+bWFwX21heC5zaXplOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdWRwc3JjX2NyZWF0ZV9jYW5jZWxsYWJsZSAoR3N0VURQU3JjICogc3JjKQotewotICBHUG9sbEZEIHBvbGxmZDsKLQotICBzcmMtPmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcgKCk7Ci0gIHNyYy0+bWFkZV9jYW5jZWxfZmQgPSBnX2NhbmNlbGxhYmxlX21ha2VfcG9sbGZkIChzcmMtPmNhbmNlbGxhYmxlLCAmcG9sbGZkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzcmNfZnJlZV9jYW5jZWxsYWJsZSAoR3N0VURQU3JjICogc3JjKQotewotICBpZiAoc3JjLT5tYWRlX2NhbmNlbF9mZCkgewotICAgIGdfY2FuY2VsbGFibGVfcmVsZWFzZV9mZCAoc3JjLT5jYW5jZWxsYWJsZSk7Ci0gICAgc3JjLT5tYWRlX2NhbmNlbF9mZCA9IEZBTFNFOwotICB9Ci0gIGdfb2JqZWN0X3VucmVmIChzcmMtPmNhbmNlbGxhYmxlKTsKLSAgc3JjLT5jYW5jZWxsYWJsZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdWRwc3JjX2NyZWF0ZSAoR3N0UHVzaFNyYyAqIHBzcmMsIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIEdzdFVEUFNyYyAqdWRwc3JjOwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIEdTb2NrZXRBZGRyZXNzICpzYWRkciA9IE5VTEw7Ci0gIEdTb2NrZXRBZGRyZXNzICoqcF9zYWRkcjsKLSAgZ2ludCBmbGFncyA9IEdfU09DS0VUX01TR19OT05FOwotICBnYm9vbGVhbiB0cnlfYWdhaW47Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgZ3NzaXplIHJlczsKLSAgZ3NpemUgb2Zmc2V0OwotICBHU29ja2V0Q29udHJvbE1lc3NhZ2UgKiptc2dzID0gTlVMTDsKLSAgR1NvY2tldENvbnRyb2xNZXNzYWdlICoqKnBfbXNnczsKLSAgZ2ludCBuX21zZ3MgPSAwLCBpOwotCi0gIHVkcHNyYyA9IEdTVF9VRFBTUkNfQ0FTVCAocHNyYyk7Ci0KLSAgaWYgKCFnc3RfdWRwc3JjX2Vuc3VyZV9tZW0gKHVkcHNyYykpCi0gICAgZ290byBtZW1vcnlfYWxsb2NfZXJyb3I7Ci0KLSAgLyogb3B0aW1pemF0aW9uOiB1c2UgbWVzc2FnZXMgb25seSBpbiBtdWx0aWNhc3QgbW9kZSBhbmQKLSAgICogaWYgd2UgY2FuJ3QgbGV0IHRoZSBrZXJuZWwgZG8gdGhlIGZpbHRlcmluZyBmb3IgdXMgKi8KLSAgcF9tc2dzID0KLSAgICAgIChnX2luZXRfYWRkcmVzc19nZXRfaXNfbXVsdGljYXN0IChnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MKLSAgICAgICAgICAodWRwc3JjLT5hZGRyKSkpID8gJm1zZ3MgOiBOVUxMOwotI2lmZGVmIElQX01VTFRJQ0FTVF9BTEwKLSAgaWYgKGdfaW5ldF9hZGRyZXNzX2dldF9mYW1pbHkgKGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfYWRkcmVzcwotICAgICAgICAgICh1ZHBzcmMtPmFkZHIpKSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNCkKLSAgICBwX21zZ3MgPSBOVUxMOwotI2VuZGlmCi0KLSAgLyogUmV0cmlldmUgc2VuZGVyIGFkZHJlc3MgdW5sZXNzIHdlJ3ZlIGJlZW4gY29uZmlndXJlZCBub3QgdG8gZG8gc28gKi8KLSAgcF9zYWRkciA9ICh1ZHBzcmMtPnJldHJpZXZlX3NlbmRlcl9hZGRyZXNzKSA/ICZzYWRkciA6IE5VTEw7Ci0KLXJldHJ5OgotCi0gIGRvIHsKLSAgICBnaW50NjQgdGltZW91dDsKLQotICAgIHRyeV9hZ2FpbiA9IEZBTFNFOwotCi0gICAgaWYgKHVkcHNyYy0+dGltZW91dCkKLSAgICAgIHRpbWVvdXQgPSB1ZHBzcmMtPnRpbWVvdXQgLyAxMDAwOwotICAgIGVsc2UKLSAgICAgIHRpbWVvdXQgPSAtMTsKLQotICAgIEdTVF9MT0dfT0JKRUNUICh1ZHBzcmMsICJkb2luZyBzZWxlY3QsIHRpbWVvdXQgJSIgR19HSU5UNjRfRk9STUFULCB0aW1lb3V0KTsKLQotICAgIGlmICghZ19zb2NrZXRfY29uZGl0aW9uX3RpbWVkX3dhaXQgKHVkcHNyYy0+dXNlZF9zb2NrZXQsIEdfSU9fSU4gfCBHX0lPX1BSSSwKLSAgICAgICAgICAgIHRpbWVvdXQsIHVkcHNyYy0+Y2FuY2VsbGFibGUsICZlcnIpKSB7Ci0gICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQlVTWSkKLSAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMgKGVyciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKSB7Ci0gICAgICAgIGdvdG8gc3RvcHBlZDsKLSAgICAgIH0gZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfVElNRURfT1VUKSkgewotICAgICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgICAgLyogdGltZW91dCwgcG9zdCBlbGVtZW50IG1lc3NhZ2UgKi8KLSAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlIChHU1RfRUxFTUVOVF9DQVNUICh1ZHBzcmMpLAotICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X2VsZW1lbnQgKEdTVF9PQkpFQ1RfQ0FTVCAodWRwc3JjKSwKLSAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoIkdzdFVEUFNyY1RpbWVvdXQiLAotICAgICAgICAgICAgICAgICAgICAidGltZW91dCIsIEdfVFlQRV9VSU5UNjQsIHVkcHNyYy0+dGltZW91dCwgTlVMTCkpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdvdG8gc2VsZWN0X2Vycm9yOwotICAgICAgfQotCi0gICAgICB0cnlfYWdhaW4gPSBUUlVFOwotICAgIH0KLSAgfSB3aGlsZSAoR19VTkxJS0VMWSAodHJ5X2FnYWluKSk7Ci0KLSAgaWYgKHNhZGRyICE9IE5VTEwpIHsKLSAgICBnX29iamVjdF91bnJlZiAoc2FkZHIpOwotICAgIHNhZGRyID0gTlVMTDsKLSAgfQotCi0gIHJlcyA9Ci0gICAgICBnX3NvY2tldF9yZWNlaXZlX21lc3NhZ2UgKHVkcHNyYy0+dXNlZF9zb2NrZXQsIHBfc2FkZHIsIHVkcHNyYy0+dmVjLCAyLAotICAgICAgcF9tc2dzLCAmbl9tc2dzLCAmZmxhZ3MsIHVkcHNyYy0+Y2FuY2VsbGFibGUsICZlcnIpOwotCi0gIGlmIChHX1VOTElLRUxZIChyZXMgPCAwKSkgewotICAgIC8qIEdfSU9fRVJST1JfSE9TVF9VTlJFQUNIQUJMRSBmb3IgYSBVRFAgc29ja2V0IG1lYW5zIHRoYXQgYSBwYWNrZXQgc2VudAotICAgICAqIHdpdGggdWRwc2luayBnZW5lcmF0ZWQgYSAicG9ydCB1bnJlYWNoYWJsZSIgSUNNUCByZXNwb25zZS4gV2UgaWdub3JlCi0gICAgICogdGhhdCBhbmQgdHJ5IGFnYWluLgotICAgICAqIE9uIFdpbmRvd3Mgd2UgZ2V0IEdfSU9fRVJST1JfQ09OTkVDVElPTl9DTE9TRUQgaW5zdGVhZCAqLwotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLDQ0LDApCi0gICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyAoZXJyLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0hPU1RfVU5SRUFDSEFCTEUpIHx8Ci0gICAgICAgIGdfZXJyb3JfbWF0Y2hlcyAoZXJyLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NPTk5FQ1RJT05fQ0xPU0VEKSkgewotI2Vsc2UKLSAgICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSE9TVF9VTlJFQUNIQUJMRSkpIHsKLSNlbmRpZgotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgICBnb3RvIHJlY2VpdmVfZXJyb3I7Ci0gIH0KLQotICAvKiByZW1lbWJlciBtYXhpbXVtIHBhY2tldCBzaXplICovCi0gIGlmIChyZXMgPiB1ZHBzcmMtPm1heF9zaXplKQotICAgIHVkcHNyYy0+bWF4X3NpemUgPSByZXM7Ci0KLSAgLyogUmV0cnkgaWYgbXVsdGljYXN0IGFuZCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBub3Qgb3Vycy4gV2UgZG9uJ3Qgd2FudAotICAgKiB0byByZWNlaXZlIGFyYml0cmFyeSBwYWNrZXRzICovCi0gIGlmIChwX21zZ3MpIHsKLSAgICBHSW5ldEFkZHJlc3MgKmlhZGRyID0gZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzICh1ZHBzcmMtPmFkZHIpOwotICAgIGdib29sZWFuIHNraXBfcGFja2V0ID0gRkFMU0U7Ci0gICAgZ3NpemUgaWFkZHJfc2l6ZSA9IGdfaW5ldF9hZGRyZXNzX2dldF9uYXRpdmVfc2l6ZSAoaWFkZHIpOwotICAgIGNvbnN0IGd1aW50OCAqaWFkZHJfYnl0ZXMgPSBnX2luZXRfYWRkcmVzc190b19ieXRlcyAoaWFkZHIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG5fbXNncyAmJiAhc2tpcF9wYWNrZXQ7IGkrKykgewotI2lmZGVmIElQX1BLVElORk8KLSAgICAgIGlmIChHU1RfSVNfSVBfUEtUSU5GT19NRVNTQUdFIChtc2dzW2ldKSkgewotICAgICAgICBHc3RJUFBrdGluZm9NZXNzYWdlICptc2cgPSBHU1RfSVBfUEtUSU5GT19NRVNTQUdFIChtc2dzW2ldKTsKLQotICAgICAgICBpZiAoc2l6ZW9mIChtc2ctPmFkZHIpID09IGlhZGRyX3NpemUKLSAgICAgICAgICAgICYmIG1lbWNtcCAoaWFkZHJfYnl0ZXMsICZtc2ctPmFkZHIsIHNpemVvZiAobXNnLT5hZGRyKSkpCi0gICAgICAgICAgc2tpcF9wYWNrZXQgPSBUUlVFOwotICAgICAgfQotI2VuZGlmCi0jaWZkZWYgSVBWNl9QS1RJTkZPCi0gICAgICBpZiAoR1NUX0lTX0lQVjZfUEtUSU5GT19NRVNTQUdFIChtc2dzW2ldKSkgewotICAgICAgICBHc3RJUFY2UGt0aW5mb01lc3NhZ2UgKm1zZyA9IEdTVF9JUFY2X1BLVElORk9fTUVTU0FHRSAobXNnc1tpXSk7Ci0KLSAgICAgICAgaWYgKHNpemVvZiAobXNnLT5hZGRyKSA9PSBpYWRkcl9zaXplCi0gICAgICAgICAgICAmJiBtZW1jbXAgKGlhZGRyX2J5dGVzLCAmbXNnLT5hZGRyLCBzaXplb2YgKG1zZy0+YWRkcikpKQotICAgICAgICAgIHNraXBfcGFja2V0ID0gVFJVRTsKLSAgICAgIH0KLSNlbmRpZgotI2lmZGVmIElQX1JFQ1ZEU1RBRERSCi0gICAgICBpZiAoR1NUX0lTX0lQX1JFQ1ZEU1RBRERSX01FU1NBR0UgKG1zZ3NbaV0pKSB7Ci0gICAgICAgIEdzdElQUmVjdmRzdGFkZHJNZXNzYWdlICptc2cgPSBHU1RfSVBfUkVDVkRTVEFERFJfTUVTU0FHRSAobXNnc1tpXSk7Ci0KLSAgICAgICAgaWYgKHNpemVvZiAobXNnLT5hZGRyKSA9PSBpYWRkcl9zaXplCi0gICAgICAgICAgICAmJiBtZW1jbXAgKGlhZGRyX2J5dGVzLCAmbXNnLT5hZGRyLCBzaXplb2YgKG1zZy0+YWRkcikpKQotICAgICAgICAgIHNraXBfcGFja2V0ID0gVFJVRTsKLSAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBuX21zZ3M7IGkrKykgewotICAgICAgZ19vYmplY3RfdW5yZWYgKG1zZ3NbaV0pOwotICAgIH0KLSAgICBnX2ZyZWUgKG1zZ3MpOwotCi0gICAgaWYgKHNraXBfcGFja2V0KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh1ZHBzcmMsCi0gICAgICAgICAgIkRyb3BwaW5nIHBhY2tldCBmb3IgYSBkaWZmZXJlbnQgbXVsdGljYXN0IGFkZHJlc3MiKTsKLQotICAgICAgaWYgKHNhZGRyICE9IE5VTEwpIHsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKHNhZGRyKTsKLSAgICAgICAgc2FkZHIgPSBOVUxMOwotICAgICAgfQotCi0gICAgICBnb3RvIHJldHJ5OwotICAgIH0KLSAgfQotCi0gIG91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotCi0gIC8qIGFwcGVuZCBmaXJzdCBtZW1vcnkgY2h1bmsgdG8gYnVmZmVyICovCi0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAob3V0YnVmLCB1ZHBzcmMtPm1lbSk7Ci0KLSAgLyogaWYgdGhlIHBhY2tldCBkaWRuJ3QgZml0IGludG8gdGhlIGZpcnN0IGNodW5rLCBhZGQgc2Vjb25kIG9uZSBhcyB3ZWxsICovCi0gIGlmIChyZXMgPiB1ZHBzcmMtPm1hcC5zaXplKSB7Ci0gICAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChvdXRidWYsIHVkcHNyYy0+bWVtX21heCk7Ci0gICAgZ3N0X21lbW9yeV91bm1hcCAodWRwc3JjLT5tZW1fbWF4LCAmdWRwc3JjLT5tYXBfbWF4KTsKLSAgICB1ZHBzcmMtPnZlY1sxXS5idWZmZXIgPSBOVUxMOwotICAgIHVkcHNyYy0+dmVjWzFdLnNpemUgPSAwOwotICAgIHVkcHNyYy0+bWVtX21heCA9IE5VTEw7Ci0gIH0KLQotICAvKiBtYWtlIHN1cmUgd2UgYWxsb2NhdGUgYSBuZXcgY2h1bmsgbmV4dCB0aW1lICh3ZSBkbyB0aGlzIG9ubHkgaGVyZSBiZWNhdXNlCi0gICAqIHdlIGxvb2sgYXQgbWFwLnNpemUgdG8gc2VlIGlmIHRoZSBzZWNvbmQgbWVtb3J5IGNodW5rIGlzIG5lZWRlZCBhYm92ZSkgKi8KLSAgZ3N0X21lbW9yeV91bm1hcCAodWRwc3JjLT5tZW0sICZ1ZHBzcmMtPm1hcCk7Ci0gIHVkcHNyYy0+dmVjWzBdLmJ1ZmZlciA9IE5VTEw7Ci0gIHVkcHNyYy0+dmVjWzBdLnNpemUgPSAwOwotICB1ZHBzcmMtPm1lbSA9IE5VTEw7Ci0KLSAgb2Zmc2V0ID0gdWRwc3JjLT5za2lwX2ZpcnN0X2J5dGVzOwotCi0gIGlmIChHX1VOTElLRUxZIChvZmZzZXQgPiAwICYmIHJlcyA8IG9mZnNldCkpCi0gICAgZ290byBza2lwX2Vycm9yOwotCi0gIGdzdF9idWZmZXJfcmVzaXplIChvdXRidWYsIG9mZnNldCwgcmVzIC0gb2Zmc2V0KTsKLQotICAvKiB1c2UgYnVmZmVyIG1ldGFkYXRhIHNvIHJlY2VpdmVycyBjYW4gYWxzbyB0cmFjayB0aGUgYWRkcmVzcyAqLwotICBpZiAoc2FkZHIpIHsKLSAgICBnc3RfYnVmZmVyX2FkZF9uZXRfYWRkcmVzc19tZXRhIChvdXRidWYsIHNhZGRyKTsKLSAgICBnX29iamVjdF91bnJlZiAoc2FkZHIpOwotICAgIHNhZGRyID0gTlVMTDsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUICh1ZHBzcmMsICJyZWFkIHBhY2tldCBvZiAlZCBieXRlcyIsIChpbnQpIHJlcyk7Ci0KLSAgKmJ1ZiA9IEdTVF9CVUZGRVJfQ0FTVCAob3V0YnVmKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1tZW1vcnlfYWxsb2NfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodWRwc3JjLCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoIkZhaWxlZCB0byBhbGxvY2F0ZSBvciBtYXAgbWVtb3J5IikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotc2VsZWN0X2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHVkcHNyYywgUkVTT1VSQ0UsIFJFQUQsIChOVUxMKSwKLSAgICAgICAgKCJzZWxlY3QgZXJyb3I6ICVzIiwgZXJyLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1zdG9wcGVkOgotICB7Ci0gICAgR1NUX0RFQlVHICgic3RvcCBjYWxsZWQiKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0KLXJlY2VpdmVfZXJyb3I6Ci0gIHsKLSAgICBpZiAoZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQlVTWSkgfHwKLSAgICAgICAgZ19lcnJvcl9tYXRjaGVzIChlcnIsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVEKSkgewotICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SICh1ZHBzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICAgKCJyZWNlaXZlIGVycm9yICUiIEdfR1NTSVpFX0ZPUk1BVCAiOiAlcyIsIHJlcywgZXJyLT5tZXNzYWdlKSk7Ci0gICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgICB9Ci0gIH0KLXNraXBfZXJyb3I6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOwotCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHVkcHNyYywgU1RSRUFNLCBERUNPREUsIChOVUxMKSwKLSAgICAgICAgKCJVRFAgYnVmZmVyIHRvIHNtYWxsIHRvIHNraXAgaGVhZGVyIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF91ZHBzcmNfc2V0X3VyaSAoR3N0VURQU3JjICogc3JjLCBjb25zdCBnY2hhciAqIHVyaSwgR0Vycm9yICoqIGVycm9yKQotewotICBnY2hhciAqYWRkcmVzczsKLSAgZ3VpbnQxNiBwb3J0OwotCi0gIGlmICghZ3N0X3VkcF9wYXJzZV91cmkgKHVyaSwgJmFkZHJlc3MsICZwb3J0KSkKLSAgICBnb3RvIHdyb25nX3VyaTsKLQotICBpZiAocG9ydCA9PSAoZ3VpbnQxNikgLSAxKQotICAgIHBvcnQgPSBVRFBfREVGQVVMVF9QT1JUOwotCi0gIGdfZnJlZSAoc3JjLT5hZGRyZXNzKTsKLSAgc3JjLT5hZGRyZXNzID0gYWRkcmVzczsKLSAgc3JjLT5wb3J0ID0gcG9ydDsKLQotICBnX2ZyZWUgKHNyYy0+dXJpKTsKLSAgc3JjLT51cmkgPSBnX3N0cmR1cCAodXJpKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXdyb25nX3VyaToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBSRUFELCAoTlVMTCksCi0gICAgICAgICgiZXJyb3IgcGFyc2luZyB1cmkgJXMiLCB1cmkpKTsKLSAgICBnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLAotICAgICAgICAiQ291bGQgbm90IHBhcnNlIFVEUCBVUkkiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFVEUFNyYyAqdWRwc3JjID0gR1NUX1VEUFNSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQlVGRkVSX1NJWkU6Ci0gICAgICB1ZHBzcmMtPmJ1ZmZlcl9zaXplID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUE9SVDoKLSAgICAgIHVkcHNyYy0+cG9ydCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgZ19mcmVlICh1ZHBzcmMtPnVyaSk7Ci0gICAgICB1ZHBzcmMtPnVyaSA9Ci0gICAgICAgICAgZ19zdHJkdXBfcHJpbnRmICgidWRwOi8vJXM6JXUiLCB1ZHBzcmMtPmFkZHJlc3MsIHVkcHNyYy0+cG9ydCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVMVElDQVNUX0dST1VQOgotICAgIGNhc2UgUFJPUF9BRERSRVNTOgotICAgIHsKLSAgICAgIGNvbnN0IGdjaGFyICpncm91cDsKLQotICAgICAgZ19mcmVlICh1ZHBzcmMtPmFkZHJlc3MpOwotICAgICAgaWYgKChncm91cCA9IGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKSkKLSAgICAgICAgdWRwc3JjLT5hZGRyZXNzID0gZ19zdHJkdXAgKGdyb3VwKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdWRwc3JjLT5hZGRyZXNzID0gZ19zdHJkdXAgKFVEUF9ERUZBVUxUX01VTFRJQ0FTVF9HUk9VUCk7Ci0KLSAgICAgIGdfZnJlZSAodWRwc3JjLT51cmkpOwotICAgICAgdWRwc3JjLT51cmkgPQotICAgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoInVkcDovLyVzOiV1IiwgdWRwc3JjLT5hZGRyZXNzLCB1ZHBzcmMtPnBvcnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9NVUxUSUNBU1RfSUZBQ0U6Ci0gICAgICBnX2ZyZWUgKHVkcHNyYy0+bXVsdGlfaWZhY2UpOwotCi0gICAgICBpZiAoZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkgPT0gTlVMTCkKLSAgICAgICAgdWRwc3JjLT5tdWx0aV9pZmFjZSA9IGdfc3RyZHVwIChVRFBfREVGQVVMVF9NVUxUSUNBU1RfSUZBQ0UpOwotICAgICAgZWxzZQotICAgICAgICB1ZHBzcmMtPm11bHRpX2lmYWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVJJOgotICAgICAgZ3N0X3VkcHNyY19zZXRfdXJpICh1ZHBzcmMsIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQVBTOgotICAgIHsKLSAgICAgIGNvbnN0IEdzdENhcHMgKm5ld19jYXBzX3ZhbCA9IGdzdF92YWx1ZV9nZXRfY2FwcyAodmFsdWUpOwotICAgICAgR3N0Q2FwcyAqbmV3X2NhcHM7Ci0gICAgICBHc3RDYXBzICpvbGRfY2FwczsKLQotICAgICAgaWYgKG5ld19jYXBzX3ZhbCA9PSBOVUxMKSB7Ci0gICAgICAgIG5ld19jYXBzID0gZ3N0X2NhcHNfbmV3X2FueSAoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld19jYXBzID0gZ3N0X2NhcHNfY29weSAobmV3X2NhcHNfdmFsKTsKLSAgICAgIH0KLQotICAgICAgR1NUX09CSkVDVF9MT0NLICh1ZHBzcmMpOwotICAgICAgb2xkX2NhcHMgPSB1ZHBzcmMtPmNhcHM7Ci0gICAgICB1ZHBzcmMtPmNhcHMgPSBuZXdfY2FwczsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh1ZHBzcmMpOwotICAgICAgaWYgKG9sZF9jYXBzKQotICAgICAgICBnc3RfY2Fwc191bnJlZiAob2xkX2NhcHMpOwotCi0gICAgICBnc3RfcGFkX21hcmtfcmVjb25maWd1cmUgKEdTVF9CQVNFX1NSQ19QQUQgKHVkcHNyYykpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TT0NLRVQ6Ci0gICAgICBpZiAodWRwc3JjLT5zb2NrZXQgIT0gTlVMTCAmJiB1ZHBzcmMtPnNvY2tldCAhPSB1ZHBzcmMtPnVzZWRfc29ja2V0ICYmCi0gICAgICAgICAgdWRwc3JjLT5jbG9zZV9zb2NrZXQpIHsKLSAgICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gICAgICAgIGlmICghZ19zb2NrZXRfY2xvc2UgKHVkcHNyYy0+c29ja2V0LCAmZXJyKSkgewotICAgICAgICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBjbG9zZSBzb2NrZXQgJXA6ICVzIiwgdWRwc3JjLT5zb2NrZXQsCi0gICAgICAgICAgICAgIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICh1ZHBzcmMtPnNvY2tldCkKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKHVkcHNyYy0+c29ja2V0KTsKLSAgICAgIHVkcHNyYy0+c29ja2V0ID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUcgKCJzZXR0aW5nIHNvY2tldCB0byAlcCIsIHVkcHNyYy0+c29ja2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FT1VUOgotICAgICAgdWRwc3JjLT50aW1lb3V0ID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0tJUF9GSVJTVF9CWVRFUzoKLSAgICAgIHVkcHNyYy0+c2tpcF9maXJzdF9ieXRlcyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NMT1NFX1NPQ0tFVDoKLSAgICAgIHVkcHNyYy0+Y2xvc2Vfc29ja2V0ID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FVVE9fTVVMVElDQVNUOgotICAgICAgdWRwc3JjLT5hdXRvX211bHRpY2FzdCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVVTRToKLSAgICAgIHVkcHNyYy0+cmV1c2UgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9PUDoKLSAgICAgIHVkcHNyYy0+bG9vcCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SRVRSSUVWRV9TRU5ERVJfQUREUkVTUzoKLSAgICAgIHVkcHNyYy0+cmV0cmlldmVfc2VuZGVyX2FkZHJlc3MgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFVEUFNyYyAqdWRwc3JjID0gR1NUX1VEUFNSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQlVGRkVSX1NJWkU6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB1ZHBzcmMtPmJ1ZmZlcl9zaXplKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QT1JUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdWRwc3JjLT5wb3J0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9NVUxUSUNBU1RfR1JPVVA6Ci0gICAgY2FzZSBQUk9QX0FERFJFU1M6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCB1ZHBzcmMtPmFkZHJlc3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VTFRJQ0FTVF9JRkFDRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHVkcHNyYy0+bXVsdGlfaWZhY2UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VSSToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHVkcHNyYy0+dXJpKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQVBTOgotICAgICAgR1NUX09CSkVDVF9MT0NLICh1ZHBzcmMpOwotICAgICAgZ3N0X3ZhbHVlX3NldF9jYXBzICh2YWx1ZSwgdWRwc3JjLT5jYXBzKTsKLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh1ZHBzcmMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NPQ0tFVDoKLSAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHVkcHNyYy0+c29ja2V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9USU1FT1VUOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgdWRwc3JjLT50aW1lb3V0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TS0lQX0ZJUlNUX0JZVEVTOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdWRwc3JjLT5za2lwX2ZpcnN0X2J5dGVzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DTE9TRV9TT0NLRVQ6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgdWRwc3JjLT5jbG9zZV9zb2NrZXQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1VTRURfU09DS0VUOgotICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgdWRwc3JjLT51c2VkX3NvY2tldCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT19NVUxUSUNBU1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgdWRwc3JjLT5hdXRvX211bHRpY2FzdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVVU0U6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgdWRwc3JjLT5yZXVzZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTE9PUDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB1ZHBzcmMtPmxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFVFJJRVZFX1NFTkRFUl9BRERSRVNTOgotICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAodmFsdWUsIHVkcHNyYy0+cmV0cmlldmVfc2VuZGVyX2FkZHJlc3MpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR0luZXRBZGRyZXNzICoKLWdzdF91ZHBzcmNfcmVzb2x2ZSAoR3N0VURQU3JjICogc3JjLCBjb25zdCBnY2hhciAqIGFkZHJlc3MpCi17Ci0gIEdJbmV0QWRkcmVzcyAqYWRkcjsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotICBHUmVzb2x2ZXIgKnJlc29sdmVyOwotCi0gIGFkZHIgPSBnX2luZXRfYWRkcmVzc19uZXdfZnJvbV9zdHJpbmcgKGFkZHJlc3MpOwotICBpZiAoIWFkZHIpIHsKLSAgICBHTGlzdCAqcmVzdWx0czsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInJlc29sdmluZyBJUCBhZGRyZXNzIGZvciBob3N0ICVzIiwgYWRkcmVzcyk7Ci0gICAgcmVzb2x2ZXIgPSBnX3Jlc29sdmVyX2dldF9kZWZhdWx0ICgpOwotICAgIHJlc3VsdHMgPQotICAgICAgICBnX3Jlc29sdmVyX2xvb2t1cF9ieV9uYW1lIChyZXNvbHZlciwgYWRkcmVzcywgc3JjLT5jYW5jZWxsYWJsZSwgJmVycik7Ci0gICAgaWYgKCFyZXN1bHRzKQotICAgICAgZ290byBuYW1lX3Jlc29sdmU7Ci0gICAgYWRkciA9IEdfSU5FVF9BRERSRVNTIChnX29iamVjdF9yZWYgKHJlc3VsdHMtPmRhdGEpKTsKLQotICAgIGdfcmVzb2x2ZXJfZnJlZV9hZGRyZXNzZXMgKHJlc3VsdHMpOwotICAgIGdfb2JqZWN0X3VucmVmIChyZXNvbHZlcik7Ci0gIH0KLSNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCi0gIHsKLSAgICBnY2hhciAqaXAgPSBnX2luZXRfYWRkcmVzc190b19zdHJpbmcgKGFkZHIpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiSVAgYWRkcmVzcyBmb3IgaG9zdCAlcyBpcyAlcyIsIGFkZHJlc3MsIGlwKTsKLSAgICBnX2ZyZWUgKGlwKTsKLSAgfQotI2VuZGlmCi0KLSAgcmV0dXJuIGFkZHI7Ci0KLW5hbWVfcmVzb2x2ZToKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiRmFpbGVkIHRvIHJlc29sdmUgJXM6ICVzIiwgYWRkcmVzcywgZXJyLT5tZXNzYWdlKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICBnX29iamVjdF91bnJlZiAocmVzb2x2ZXIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLS8qIGNyZWF0ZSBhIHNvY2tldCBmb3Igc2VuZGluZyB0byByZW1vdGUgbWFjaGluZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfdWRwc3JjX29wZW4gKEdzdFVEUFNyYyAqIHNyYykKLXsKLSAgR0luZXRBZGRyZXNzICphZGRyLCAqYmluZF9hZGRyOwotICBHU29ja2V0QWRkcmVzcyAqYmluZF9zYWRkcjsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIGdzdF91ZHBzcmNfY3JlYXRlX2NhbmNlbGxhYmxlIChzcmMpOwotCi0gIGlmIChzcmMtPnNvY2tldCA9PSBOVUxMKSB7Ci0gICAgLyogbmVlZCB0byBhbGxvY2F0ZSBhIHNvY2tldCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImFsbG9jYXRpbmcgc29ja2V0IGZvciAlczolZCIsIHNyYy0+YWRkcmVzcywKLSAgICAgICAgc3JjLT5wb3J0KTsKLQotICAgIGFkZHIgPSBnc3RfdWRwc3JjX3Jlc29sdmUgKHNyYywgc3JjLT5hZGRyZXNzKTsKLSAgICBpZiAoIWFkZHIpCi0gICAgICBnb3RvIG5hbWVfcmVzb2x2ZTsKLQotICAgIGlmICgoc3JjLT51c2VkX3NvY2tldCA9Ci0gICAgICAgICAgICBnX3NvY2tldF9uZXcgKGdfaW5ldF9hZGRyZXNzX2dldF9mYW1pbHkgKGFkZHIpLAotICAgICAgICAgICAgICAgIEdfU09DS0VUX1RZUEVfREFUQUdSQU0sIEdfU09DS0VUX1BST1RPQ09MX1VEUCwgJmVycikpID09IE5VTEwpCi0gICAgICBnb3RvIG5vX3NvY2tldDsKLQotICAgIHNyYy0+ZXh0ZXJuYWxfc29ja2V0ID0gRkFMU0U7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJnb3Qgc29ja2V0ICVwIiwgc3JjLT51c2VkX3NvY2tldCk7Ci0KLSAgICBpZiAoc3JjLT5hZGRyKQotICAgICAgZ19vYmplY3RfdW5yZWYgKHNyYy0+YWRkcik7Ci0gICAgc3JjLT5hZGRyID0KLSAgICAgICAgR19JTkVUX1NPQ0tFVF9BRERSRVNTIChnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChhZGRyLCBzcmMtPnBvcnQpKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImJpbmRpbmcgb24gcG9ydCAlZCIsIHNyYy0+cG9ydCk7Ci0KLSAgICAvKiBGb3IgbXVsdGljYXN0LCBiaW5kIHRvIEFOWSBhbmQgam9pbiB0aGUgbXVsdGljYXN0IGdyb3VwIGxhdGVyICovCi0gICAgaWYgKGdfaW5ldF9hZGRyZXNzX2dldF9pc19tdWx0aWNhc3QgKGFkZHIpKQotICAgICAgYmluZF9hZGRyID0gZ19pbmV0X2FkZHJlc3NfbmV3X2FueSAoZ19pbmV0X2FkZHJlc3NfZ2V0X2ZhbWlseSAoYWRkcikpOwotICAgIGVsc2UKLSAgICAgIGJpbmRfYWRkciA9IEdfSU5FVF9BRERSRVNTIChnX29iamVjdF9yZWYgKGFkZHIpKTsKLQotICAgIGdfb2JqZWN0X3VucmVmIChhZGRyKTsKLQotICAgIGJpbmRfc2FkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChiaW5kX2FkZHIsIHNyYy0+cG9ydCk7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGJpbmRfYWRkcik7Ci0gICAgaWYgKCFnX3NvY2tldF9iaW5kIChzcmMtPnVzZWRfc29ja2V0LCBiaW5kX3NhZGRyLCBzcmMtPnJldXNlLCAmZXJyKSkKLSAgICAgIGdvdG8gYmluZF9lcnJvcjsKLQotICAgIGdfb2JqZWN0X3VucmVmIChiaW5kX3NhZGRyKTsKLSAgICBnX3NvY2tldF9zZXRfbXVsdGljYXN0X2xvb3BiYWNrIChzcmMtPnVzZWRfc29ja2V0LCBzcmMtPmxvb3ApOwotICB9IGVsc2UgewotICAgIEdJbmV0U29ja2V0QWRkcmVzcyAqbG9jYWxfYWRkcjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInVzaW5nIHByb3ZpZGVkIHNvY2tldCAlcCIsIHNyYy0+c29ja2V0KTsKLSAgICAvKiB3ZSB1c2UgdGhlIGNvbmZpZ3VyZWQgc29ja2V0LCB0cnkgdG8gZ2V0IHNvbWUgaW5mbyBhYm91dCBpdCAqLwotICAgIHNyYy0+dXNlZF9zb2NrZXQgPSBHX1NPQ0tFVCAoZ19vYmplY3RfcmVmIChzcmMtPnNvY2tldCkpOwotICAgIHNyYy0+ZXh0ZXJuYWxfc29ja2V0ID0gVFJVRTsKLQotICAgIGxvY2FsX2FkZHIgPQotICAgICAgICBHX0lORVRfU09DS0VUX0FERFJFU1MgKGdfc29ja2V0X2dldF9sb2NhbF9hZGRyZXNzIChzcmMtPnVzZWRfc29ja2V0LAotICAgICAgICAgICAgJmVycikpOwotICAgIGlmICghbG9jYWxfYWRkcikKLSAgICAgIGdvdG8gZ2V0c29ja25hbWVfZXJyb3I7Ci0KLSAgICBhZGRyID0gZ3N0X3VkcHNyY19yZXNvbHZlIChzcmMsIHNyYy0+YWRkcmVzcyk7Ci0gICAgaWYgKCFhZGRyKQotICAgICAgZ290byBuYW1lX3Jlc29sdmU7Ci0KLSAgICAvKiBJZiBib3VuZCB0byBBTlkgYW5kIGFkZHJlc3MgcG9pbnRzIHRvIGEgbXVsdGljYXN0IGFkZHJlc3MsIG1ha2UKLSAgICAgKiBzdXJlIHRoYXQgYWRkcmVzcyBpcyBub3Qgb3ZlcnJpZGRlbiB3aXRoIEFOWSBidXQgd2UgaGF2ZSB0aGUKLSAgICAgKiBvcHBvcnR1bml0eSBsYXRlciB0byBqb2luIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4gVGhpcyBlbnN1cmVzIHRoYXQgd2UKLSAgICAgKiBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBhcyBmb3Igc29ja2V0cyBjcmVhdGVkIGJ5IHVkcHNyYyAqLwotICAgIGlmICghc3JjLT5hdXRvX211bHRpY2FzdCB8fAotICAgICAgICAhZ19pbmV0X2FkZHJlc3NfZ2V0X2lzX2FueSAoZ19pbmV0X3NvY2tldF9hZGRyZXNzX2dldF9hZGRyZXNzCi0gICAgICAgICAgICAobG9jYWxfYWRkcikpCi0gICAgICAgIHx8ICFnX2luZXRfYWRkcmVzc19nZXRfaXNfbXVsdGljYXN0IChhZGRyKSkgewotICAgICAgZ19vYmplY3RfdW5yZWYgKGFkZHIpOwotICAgICAgaWYgKHNyYy0+YWRkcikKLSAgICAgICAgZ19vYmplY3RfdW5yZWYgKHNyYy0+YWRkcik7Ci0gICAgICBzcmMtPmFkZHIgPSBsb2NhbF9hZGRyOwotICAgIH0gZWxzZSB7Ci0gICAgICBnX29iamVjdF91bnJlZiAobG9jYWxfYWRkcik7Ci0gICAgICBpZiAoc3JjLT5hZGRyKQotICAgICAgICBnX29iamVjdF91bnJlZiAoc3JjLT5hZGRyKTsKLSAgICAgIHNyYy0+YWRkciA9Ci0gICAgICAgICAgR19JTkVUX1NPQ0tFVF9BRERSRVNTIChnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChhZGRyLCBzcmMtPnBvcnQpKTsKLSAgICAgIGdfb2JqZWN0X3VucmVmIChhZGRyKTsKLSAgICB9Ci0gIH0KLQotICB7Ci0gICAgZ2ludCB2YWwgPSAwOwotCi0gICAgaWYgKHNyYy0+YnVmZmVyX3NpemUgIT0gMCkgewotICAgICAgR0Vycm9yICpvcHRfZXJyID0gTlVMTDsKLQotICAgICAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJzZXR0aW5nIHVkcCBidWZmZXIgb2YgJWQgYnl0ZXMiLCBzcmMtPmJ1ZmZlcl9zaXplKTsKLSAgICAgIC8qIHNldCBidWZmZXIgc2l6ZSwgTm90ZSB0aGF0IG9uIExpbnV4IHRoaXMgaXMgdHlwaWNhbGx5IGxpbWl0ZWQgdG8gYQotICAgICAgICogbWF4aW11bSBvZiBhcm91bmQgMTAwSy4gQWxzbyBhIG1pbmltdW0gb2YgMTI4IGJ5dGVzIGlzIHJlcXVpcmVkIG9uCi0gICAgICAgKiBMaW51eC4gKi8KLSAgICAgIGlmICghZ19zb2NrZXRfc2V0X29wdGlvbiAoc3JjLT51c2VkX3NvY2tldCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAotICAgICAgICAgICAgICBzcmMtPmJ1ZmZlcl9zaXplLCAmb3B0X2VycikpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAoc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgICAgICgiQ291bGQgbm90IGNyZWF0ZSBhIGJ1ZmZlciBvZiByZXF1ZXN0ZWQgJWQgYnl0ZXM6ICVzIiwKLSAgICAgICAgICAgICAgICBzcmMtPmJ1ZmZlcl9zaXplLCBvcHRfZXJyLT5tZXNzYWdlKSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZSAob3B0X2Vycik7Ci0gICAgICAgIG9wdF9lcnIgPSBOVUxMOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIHJlYWQgdGhlIHZhbHVlIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gTm90ZSB0aGF0IG9uIGxpbnV4IHRoaXMgcmV0dXJucwotICAgICAqIDJ4IHRoZSB2YWx1ZSB3ZSBzZXQgYmVjYXVzZSB0aGUga2VybmVsIGFsbG9jYXRlcyBleHRyYSBtZW1vcnkgZm9yCi0gICAgICogbWV0YWRhdGEuIFRoZSBkZWZhdWx0IG9uIExpbnV4IGlzIGFib3V0IDEwMEsgKHdoaWNoIGlzIGFib3V0IDUwSwotICAgICAqIHdpdGhvdXQgbWV0YWRhdGEpICovCi0gICAgaWYgKGdfc29ja2V0X2dldF9vcHRpb24gKHNyYy0+dXNlZF9zb2NrZXQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJnZhbCwKLSAgICAgICAgICAgIE5VTEwpKSB7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHNyYywgImhhdmUgdWRwIGJ1ZmZlciBvZiAlZCBieXRlcyIsIHZhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImNvdWxkIG5vdCBnZXQgdWRwIGJ1ZmZlciBzaXplIik7Ci0gICAgfQotICB9Ci0KLSAgZ19zb2NrZXRfc2V0X2Jyb2FkY2FzdCAoc3JjLT51c2VkX3NvY2tldCwgVFJVRSk7Ci0KLSAgaWYgKHNyYy0+YXV0b19tdWx0aWNhc3QKLSAgICAgICYmCi0gICAgICBnX2luZXRfYWRkcmVzc19nZXRfaXNfbXVsdGljYXN0IChnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MKLSAgICAgICAgICAoc3JjLT5hZGRyKSkpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJqb2luaW5nIG11bHRpY2FzdCBncm91cCAlcyIsIHNyYy0+YWRkcmVzcyk7Ci0gICAgaWYgKCFnX3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cCAoc3JjLT51c2VkX3NvY2tldCwKLSAgICAgICAgICAgIGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfYWRkcmVzcyAoc3JjLT5hZGRyKSwKLSAgICAgICAgICAgIEZBTFNFLCBzcmMtPm11bHRpX2lmYWNlLCAmZXJyKSkKLSAgICAgIGdvdG8gbWVtYmVyc2hpcDsKLQotICAgIGlmIChnX2luZXRfYWRkcmVzc19nZXRfZmFtaWx5IChnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MKLSAgICAgICAgICAgIChzcmMtPmFkZHIpKSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNCkgewotI2lmIGRlZmluZWQoSVBfTVVMVElDQVNUX0FMTCkKLSAgICAgIGlmICghZ19zb2NrZXRfc2V0X29wdGlvbiAoc3JjLT51c2VkX3NvY2tldCwgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX0FMTCwKLSAgICAgICAgICAgICAgMCwgJmVycikpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJGYWlsZWQgdG8gZGlzYWJsZSBJUF9NVUxUSUNBU1RfQUxMOiAlcyIsCi0gICAgICAgICAgICBlcnItPm1lc3NhZ2UpOwotICAgICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIH0KLSNlbGlmIGRlZmluZWQoSVBfUEtUSU5GTykKLSAgICAgIGlmICghZ19zb2NrZXRfc2V0X29wdGlvbiAoc3JjLT51c2VkX3NvY2tldCwgSVBQUk9UT19JUCwgSVBfUEtUSU5GTywgVFJVRSwKLSAgICAgICAgICAgICAgJmVycikpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJGYWlsZWQgdG8gZW5hYmxlIElQX1BLVElORk86ICVzIiwKLSAgICAgICAgICAgIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgfQotI2VsaWYgZGVmaW5lZChJUF9SRUNWRFNUQUREUikKLSAgICAgIGlmICghZ19zb2NrZXRfc2V0X29wdGlvbiAoc3JjLT51c2VkX3NvY2tldCwgSVBQUk9UT19JUCwgSVBfUkVDVkRTVEFERFIsCi0gICAgICAgICAgICAgIFRSVUUsICZlcnIpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLCAiRmFpbGVkIHRvIGVuYWJsZSBJUF9SRUNWRFNUQUREUjogJXMiLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICB9Ci0jZWxzZQotI3ByYWdtYSBtZXNzYWdlKCJObyBBUEkgYXZhaWxhYmxlIGZvciBnZXR0aW5nIElQdjQgZGVzdGluYXRpb24gYWRkcmVzcyIpCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIk5vIEFQSSBhdmFpbGFibGUgZm9yIGdldHRpbmcgSVB2NCBkZXN0aW5hdGlvbiAiCi0gICAgICAgICAgImFkZHJlc3MsIHdpbGwgcmVjZWl2ZSBwYWNrZXRzIGZvciBldmVyeSBkZXN0aW5hdGlvbiB0byBvdXIgcG9ydCIpOwotI2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAgIGlmIChnX2luZXRfYWRkcmVzc19nZXRfZmFtaWx5IChnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MKLSAgICAgICAgICAgIChzcmMtPmFkZHIpKSA9PSBHX1NPQ0tFVF9GQU1JTFlfSVBWNikgewotI2lmZGVmIElQVjZfUEtUSU5GTwotI2lmZGVmIElQVjZfUkVDVlBLVElORk8KLSAgICAgIGlmICghZ19zb2NrZXRfc2V0X29wdGlvbiAoc3JjLT51c2VkX3NvY2tldCwgSVBQUk9UT19JUFY2LAotICAgICAgICAgICAgICBJUFY2X1JFQ1ZQS1RJTkZPLCBUUlVFLCAmZXJyKSkgewotI2Vsc2UKLSAgICAgIGlmICghZ19zb2NrZXRfc2V0X29wdGlvbiAoc3JjLT51c2VkX3NvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X1BLVElORk8sCi0gICAgICAgICAgICAgIFRSVUUsICZlcnIpKSB7Ci0jZW5kaWYKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsICJGYWlsZWQgdG8gZW5hYmxlIElQVjZfUEtUSU5GTzogJXMiLAotICAgICAgICAgICAgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICB9Ci0jZWxzZQotI3ByYWdtYSBtZXNzYWdlKCJObyBBUEkgYXZhaWxhYmxlIGZvciBnZXR0aW5nIElQdjYgZGVzdGluYXRpb24gYWRkcmVzcyIpCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHNyYywgIk5vIEFQSSBhdmFpbGFibGUgZm9yIGdldHRpbmcgSVB2NiBkZXN0aW5hdGlvbiAiCi0gICAgICAgICAgImFkZHJlc3MsIHdpbGwgcmVjZWl2ZSBwYWNrZXRzIGZvciBldmVyeSBkZXN0aW5hdGlvbiB0byBvdXIgcG9ydCIpOwotI2VuZGlmCi0gICAgfQotICB9Ci0KLSAgLyogTk9URTogc29ja2FkZHJfaW4uc2luX3BvcnQgd29ya3MgZm9yIGlwdjQgYW5kIGlwdjYgYmVjYXVzZSBzaW5fcG9ydAotICAgKiBmb2xsb3dzIHNzX2ZhbWlseSBvbiBib3RoICovCi0gIHsKLSAgICBHSW5ldFNvY2tldEFkZHJlc3MgKmFkZHI7Ci0gICAgZ3VpbnQxNiBwb3J0OwotCi0gICAgYWRkciA9Ci0gICAgICAgIEdfSU5FVF9TT0NLRVRfQUREUkVTUyAoZ19zb2NrZXRfZ2V0X2xvY2FsX2FkZHJlc3MgKHNyYy0+dXNlZF9zb2NrZXQsCi0gICAgICAgICAgICAmZXJyKSk7Ci0gICAgaWYgKCFhZGRyKQotICAgICAgZ290byBnZXRzb2NrbmFtZV9lcnJvcjsKLQotICAgIHBvcnQgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X3BvcnQgKGFkZHIpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImJvdW5kLCBvbiBwb3J0ICVkIiwgcG9ydCk7Ci0gICAgaWYgKHBvcnQgIT0gc3JjLT5wb3J0KSB7Ci0gICAgICBzcmMtPnBvcnQgPSBwb3J0OwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibm90aWZ5aW5nIHBvcnQgJWQiLCBwb3J0KTsKLSAgICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHNyYyksICJwb3J0Iik7Ci0gICAgfQotICAgIGdfb2JqZWN0X3VucmVmIChhZGRyKTsKLSAgfQotCi0gIHNyYy0+YWxsb2NhdG9yID0gTlVMTDsKLSAgZ3N0X2FsbG9jYXRpb25fcGFyYW1zX2luaXQgKCZzcmMtPnBhcmFtcyk7Ci0KLSAgc3JjLT5tYXhfc2l6ZSA9IDA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1uYW1lX3Jlc29sdmU6Ci0gIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3NvY2tldDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsIChOVUxMKSwKLSAgICAgICAgKCJubyBzb2NrZXQgZXJyb3I6ICVzIiwgZXJyLT5tZXNzYWdlKSk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGFkZHIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotYmluZF9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoImJpbmQgZmFpbGVkOiAlcyIsIGVyci0+bWVzc2FnZSkpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdfb2JqZWN0X3VucmVmIChiaW5kX3NhZGRyKTsKLSAgICBnc3RfdWRwc3JjX2Nsb3NlIChzcmMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbWVtYmVyc2hpcDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoImNvdWxkIGFkZCBtZW1iZXJzaGlwOiAlcyIsIGVyci0+bWVzc2FnZSkpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdzdF91ZHBzcmNfY2xvc2UgKHNyYyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1nZXRzb2NrbmFtZV9lcnJvcjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoImdldHNvY2tuYW1lIGZhaWxlZDogJXMiLCBlcnItPm1lc3NhZ2UpKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICBnc3RfdWRwc3JjX2Nsb3NlIChzcmMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF91ZHBzcmNfdW5sb2NrIChHc3RCYXNlU3JjICogYnNyYykKLXsKLSAgR3N0VURQU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX1VEUFNSQyAoYnNyYyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIkZsdXNoaW5nIik7Ci0gIGdfY2FuY2VsbGFibGVfY2FuY2VsIChzcmMtPmNhbmNlbGxhYmxlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdWRwc3JjX3VubG9ja19zdG9wIChHc3RCYXNlU3JjICogYnNyYykKLXsKLSAgR3N0VURQU3JjICpzcmM7Ci0KLSAgc3JjID0gR1NUX1VEUFNSQyAoYnNyYyk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHNyYywgIk5vIGxvbmdlciBmbHVzaGluZyIpOwotCi0gIGdzdF91ZHBzcmNfZnJlZV9jYW5jZWxsYWJsZSAoc3JjKTsKLSAgZ3N0X3VkcHNyY19jcmVhdGVfY2FuY2VsbGFibGUgKHNyYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3VkcHNyY19jbG9zZSAoR3N0VURQU3JjICogc3JjKQotewotICBHU1RfREVCVUcgKCJjbG9zaW5nIHNvY2tldHMiKTsKLQotICBpZiAoc3JjLT51c2VkX3NvY2tldCkgewotICAgIGlmIChzcmMtPmF1dG9fbXVsdGljYXN0Ci0gICAgICAgICYmCi0gICAgICAgIGdfaW5ldF9hZGRyZXNzX2dldF9pc19tdWx0aWNhc3QgKGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfYWRkcmVzcwotICAgICAgICAgICAgKHNyYy0+YWRkcikpKSB7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImxlYXZpbmcgbXVsdGljYXN0IGdyb3VwICVzIiwgc3JjLT5hZGRyZXNzKTsKLQotICAgICAgaWYgKCFnX3NvY2tldF9sZWF2ZV9tdWx0aWNhc3RfZ3JvdXAgKHNyYy0+dXNlZF9zb2NrZXQsCi0gICAgICAgICAgICAgIGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfYWRkcmVzcyAoc3JjLT5hZGRyKSwgRkFMU0UsCi0gICAgICAgICAgICAgIHNyYy0+bXVsdGlfaWZhY2UsICZlcnIpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBsZWF2ZSBtdWx0aWNhc3QgZ3JvdXA6ICVzIiwKLSAgICAgICAgICAgIGVyci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChzcmMtPmNsb3NlX3NvY2tldCB8fCAhc3JjLT5leHRlcm5hbF9zb2NrZXQpIHsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgIGlmICghZ19zb2NrZXRfY2xvc2UgKHNyYy0+dXNlZF9zb2NrZXQsICZlcnIpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNyYywgIkZhaWxlZCB0byBjbG9zZSBzb2NrZXQ6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICAgICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19vYmplY3RfdW5yZWYgKHNyYy0+dXNlZF9zb2NrZXQpOwotICAgIHNyYy0+dXNlZF9zb2NrZXQgPSBOVUxMOwotICAgIGdfb2JqZWN0X3VucmVmIChzcmMtPmFkZHIpOwotICAgIHNyYy0+YWRkciA9IE5VTEw7Ci0gIH0KLQotICBnc3RfdWRwc3JjX3Jlc2V0X21lbW9yeV9hbGxvY2F0b3IgKHNyYyk7Ci0KLSAgZ3N0X3VkcHNyY19mcmVlX2NhbmNlbGxhYmxlIChzcmMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3VkcHNyY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RVRFBTcmMgKnNyYzsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmVzdWx0OwotCi0gIHNyYyA9IEdTVF9VRFBTUkMgKGVsZW1lbnQpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgaWYgKCFnc3RfdWRwc3JjX29wZW4gKHNyYykpCi0gICAgICAgIGdvdG8gb3Blbl9mYWlsZWQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKChyZXN1bHQgPQotICAgICAgICAgIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgICAgIHRyYW5zaXRpb24pKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgZ3N0X3VkcHNyY19jbG9zZSAoc3JjKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotICAvKiBFUlJPUlMgKi8KLW9wZW5fZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAiZmFpbGVkIHRvIG9wZW4gc29ja2V0Iik7Ci0gICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgfQotZmFpbHVyZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgInBhcmVudCBmYWlsZWQgc3RhdGUgY2hhbmdlIik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0KLQotCi0vKioqIEdTVFVSSUhBTkRMRVIgSU5URVJGQUNFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBHc3RVUklUeXBlCi1nc3RfdWRwc3JjX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfU1JDOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF91ZHBzcmNfdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqcHJvdG9jb2xzW10gPSB7ICJ1ZHAiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF91ZHBzcmNfdXJpX2dldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyKQotewotICBHc3RVRFBTcmMgKnNyYyA9IEdTVF9VRFBTUkMgKGhhbmRsZXIpOwotCi0gIHJldHVybiBnX3N0cmR1cCAoc3JjLT51cmkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF91ZHBzcmNfdXJpX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIHJldHVybiBnc3RfdWRwc3JjX3NldF91cmkgKEdTVF9VRFBTUkMgKGhhbmRsZXIpLCB1cmksIGVycm9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF91ZHBzcmNfdXJpX2hhbmRsZXJfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKLXsKLSAgR3N0VVJJSGFuZGxlckludGVyZmFjZSAqaWZhY2UgPSAoR3N0VVJJSGFuZGxlckludGVyZmFjZSAqKSBnX2lmYWNlOwotCi0gIGlmYWNlLT5nZXRfdHlwZSA9IGdzdF91ZHBzcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF91ZHBzcmNfdXJpX2dldF9wcm90b2NvbHM7Ci0gIGlmYWNlLT5nZXRfdXJpID0gZ3N0X3VkcHNyY191cmlfZ2V0X3VyaTsKLSAgaWZhY2UtPnNldF91cmkgPSBnc3RfdWRwc3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3VkcC9nc3R1ZHBzcmMuaCBiL2dzdC91ZHAvZ3N0dWRwc3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2Zjg0NGIuLjAwMDAwMDAKLS0tIGEvZ3N0L3VkcC9nc3R1ZHBzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfVURQU1JDX0hfXwotI2RlZmluZSBfX0dTVF9VRFBTUkNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLQotR19CRUdJTl9ERUNMUwotCi0jaW5jbHVkZSAiZ3N0dWRwbmV0dXRpbHMuaCIKLQotI2RlZmluZSBHU1RfVFlQRV9VRFBTUkMgXAotICAoZ3N0X3VkcHNyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVURQU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVURQU1JDLEdzdFVEUFNyYykpCi0jZGVmaW5lIEdTVF9VRFBTUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVURQU1JDLEdzdFVEUFNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1VEUFNSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1VEUFNSQykpCi0jZGVmaW5lIEdTVF9JU19VRFBTUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfVURQU1JDKSkKLSNkZWZpbmUgR1NUX1VEUFNSQ19DQVNUKG9iaikgKChHc3RVRFBTcmMgKikob2JqKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFVEUFNyYyBHc3RVRFBTcmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VURQU3JjQ2xhc3MgR3N0VURQU3JjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VURQU3JjIHsKLSAgR3N0UHVzaFNyYyBwYXJlbnQ7Ci0KLSAgLyogcHJvcGVydGllcyAqLwotICBnY2hhciAgICAgKmFkZHJlc3M7Ci0gIGdpbnQgICAgICAgcG9ydDsKLSAgZ2NoYXIgICAgICptdWx0aV9pZmFjZTsKLSAgZ2ludCAgICAgICB0dGw7Ci0gIEdzdENhcHMgICAqY2FwczsKLSAgZ2ludCAgICAgICBidWZmZXJfc2l6ZTsKLSAgZ3VpbnQ2NCAgICB0aW1lb3V0OwotICBnaW50ICAgICAgIHNraXBfZmlyc3RfYnl0ZXM7Ci0gIEdTb2NrZXQgICAqc29ja2V0OwotICBnYm9vbGVhbiAgIGNsb3NlX3NvY2tldDsKLSAgZ2Jvb2xlYW4gICBhdXRvX211bHRpY2FzdDsKLSAgZ2Jvb2xlYW4gICByZXVzZTsKLSAgZ2Jvb2xlYW4gICBsb29wOwotICBnYm9vbGVhbiAgIHJldHJpZXZlX3NlbmRlcl9hZGRyZXNzOwotCi0gIC8qIHN0YXRzICovCi0gIGd1aW50ICAgICAgbWF4X3NpemU7Ci0KLSAgLyogb3VyIHNvY2tldHMgKi8KLSAgR1NvY2tldCAgICp1c2VkX3NvY2tldDsKLSAgR0luZXRTb2NrZXRBZGRyZXNzICphZGRyOwotICBnYm9vbGVhbiAgIGV4dGVybmFsX3NvY2tldDsKLQotICBnYm9vbGVhbiAgIG1hZGVfY2FuY2VsX2ZkOwotICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOwotCi0gIC8qIG1lbW9yeSBtYW5hZ2VtZW50ICovCi0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBHc3RBbGxvY2F0aW9uUGFyYW1zIHBhcmFtczsKLQotICBHc3RNZW1vcnkgICAqbWVtOwotICBHc3RNYXBJbmZvICAgbWFwOwotICBHc3RNZW1vcnkgICAqbWVtX21heDsKLSAgR3N0TWFwSW5mbyAgIG1hcF9tYXg7Ci0gIEdJbnB1dFZlY3RvciB2ZWNbMl07Ci0KLSAgZ2NoYXIgICAgICp1cmk7Ci19OwotCi1zdHJ1Y3QgX0dzdFVEUFNyY0NsYXNzIHsKLSAgR3N0UHVzaFNyY0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF91ZHBzcmNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUX1VEUFNSQ19IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2JveC9NYWtlZmlsZS5hbSBiL2dzdC92aWRlb2JveC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE5NDU2Mi4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9ib3gvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlb2JveC5sYQotCi1PUkNfU09VUkNFPWdzdHZpZGVvYm94b3JjCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsKLQotbGliZ3N0dmlkZW9ib3hfbGFfU09VUkNFUyA9IGdzdHZpZGVvYm94LmMKLW5vZGlzdF9saWJnc3R2aWRlb2JveF9sYV9TT1VSQ0VTID0gJChPUkNfTk9ESVNUX1NPVVJDRVMpCi1saWJnc3R2aWRlb2JveF9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JCQkgICAkKEdTVF9CQVNFX0NGTEFHUykgXAotCQkJICAgJChHU1RfQ0ZMQUdTKSBcCi0JCQkgICAkKE9SQ19DRkxBR1MpCi1saWJnc3R2aWRlb2JveF9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCQkJICAgJChHU1RfQkFTRV9MSUJTKSBcCi0JCQkgICAkKEdTVF9MSUJTKSBcCi0JCQkgICAkKE9SQ19MSUJTKSBcCi0JCQkgICAtbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05ACi1saWJnc3R2aWRlb2JveF9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R2aWRlb2JveF9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHZpZGVvYm94LmgKLUVYVFJBX0RJU1QgKz0gUkVBRE1FCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9ib3gvTWFrZWZpbGUuaW4gYi9nc3QvdmlkZW9ib3gvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZDk4ODIuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvYm94L01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTAxMCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotIwotIyBUaGlzIGlzIGEgbWFrZWZpbGUuYW0gZnJhZ21lbnQgdG8gYnVpbGQgT3JjIGNvZGUuCi0jCi0jIERlZmluZSBPUkNfU09VUkNFIGFuZCB0aGVuIGluY2x1ZGUgdGhpcyBmaWxlLCBzdWNoIGFzOgotIwotIyAgT1JDX1NPVVJDRT1nc3RhZGRlcm9yYwotIyAgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrCi0jCi0jIFRoaXMgZnJhZ21lbnQgd2lsbCBjcmVhdGUgdG1wLW9yYy5jIGFuZCBnc3RhZGRlcm9yYy5oIGZyb20KLSMgZ3N0YWRkZXJvcmMub3JjLgotIwotIyBXaGVuICdtYWtlIGRpc3QnIGlzIHJ1biBhdCB0aGUgdG9wIGxldmVsLCBvciAnbWFrZSBvcmMtdXBkYXRlJwotIyBpbiBhIGRpcmVjdG9yeSBpbmNsdWRpbmcgdGhpcyBmcmFnbWVudCwgdGhlIGdlbmVyYXRlZCBzb3VyY2UgCi0jIGZpbGVzIHdpbGwgYmUgY29waWVkIHRvICQoT1JDX1NPVVJDRSktZGlzdC5bY2hdLiAgVGhlc2UgZmlsZXMKLSMgc2hvdWxkIGJlIGNoZWNrZWQgaW4gdG8gZ2l0LCBzaW5jZSB0aGV5IGFyZSB1c2VkIGlmIE9yYyBpcwotIyBkaXNhYmxlZC4KLSMgCi0jIE5vdGUgdGhhdCB0aGlzIGZpbGUgZGVmaW5lcyBCVUlMVF9TT1VSQ0VTLCBzbyBhbnkgbGF0ZXIgdXNhZ2UKLSMgb2YgQlVJTFRfU09VUkNFUyBpbiB0aGUgTWFrZWZpbGUuYW0gdGhhdCBpbmNsdWRlcyB0aGlzIGZpbGUKLSMgbXVzdCB1c2UgJys9Jy4KLSMKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBnc3QvdmlkZW9ib3gKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3R2aWRlb2JveF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0dmlkZW9ib3hfbGFfT0JKRUNUUyA9IGxpYmdzdHZpZGVvYm94X2xhLWdzdHZpZGVvYm94LmxvCi1hbV9fb2JqZWN0c18xID0gbGliZ3N0dmlkZW9ib3hfbGEtdG1wLW9yYy5sbwotbm9kaXN0X2xpYmdzdHZpZGVvYm94X2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpCi1saWJnc3R2aWRlb2JveF9sYV9PQkpFQ1RTID0gJChhbV9saWJnc3R2aWRlb2JveF9sYV9PQkpFQ1RTKSBcCi0JJChub2Rpc3RfbGliZ3N0dmlkZW9ib3hfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHZpZGVvYm94X2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0dmlkZW9ib3hfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3R2aWRlb2JveF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3R2aWRlb2JveF9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R2aWRlb2JveF9sYV9TT1VSQ0VTKSBcCi0JJChub2Rpc3RfbGliZ3N0dmlkZW9ib3hfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0dmlkZW9ib3hfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsgXAotCSQodG9wX3NyY2RpcikvZGVwY29tcCBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHZpZGVvYm94LmxhCi1PUkNfU09VUkNFID0gZ3N0dmlkZW9ib3hvcmMKLUVYVFJBX0RJU1QgPSAkKE9SQ19TT1VSQ0UpLm9yYyBSRUFETUUKLU9SQ19OT0RJU1RfU09VUkNFUyA9IHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLUJVSUxUX1NPVVJDRVMgPSB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi1vcmNjX3ZfZ2VuID0gJChvcmNjX3ZfZ2VuXyQoVikpCi1vcmNjX3ZfZ2VuXyA9ICQob3JjY192X2dlbl8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKLW9yY2Nfdl9nZW5fMCA9IEBlY2hvICIgIE9SQ0MgICAkQCI7Ci1jcF92X2dlbiA9ICQoY3Bfdl9nZW5fJChWKSkKLWNwX3ZfZ2VuXyA9ICQoY3Bfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1jcF92X2dlbl8wID0gQGVjaG8gIiAgQ1AgICAgICRAIjsKLWxpYmdzdHZpZGVvYm94X2xhX1NPVVJDRVMgPSBnc3R2aWRlb2JveC5jCi1ub2Rpc3RfbGliZ3N0dmlkZW9ib3hfbGFfU09VUkNFUyA9ICQoT1JDX05PRElTVF9TT1VSQ0VTKQotbGliZ3N0dmlkZW9ib3hfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCQkJICAgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkJCSAgICQoR1NUX0NGTEFHUykgXAotCQkJICAgJChPUkNfQ0ZMQUdTKQotCi1saWJnc3R2aWRlb2JveF9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCQkJICAgJChHU1RfQkFTRV9MSUJTKSBcCi0JCQkgICAkKEdTVF9MSUJTKSBcCi0JCQkgICAkKE9SQ19MSUJTKSBcCi0JCQkgICAtbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05ACi0KLWxpYmdzdHZpZGVvYm94X2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHZpZGVvYm94X2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdHZpZGVvYm94LmgKLWFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3ZpZGVvYm94L01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC92aWRlb2JveC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrICQoYW1fX2VtcHR5KToKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0dmlkZW9ib3gubGE6ICQobGliZ3N0dmlkZW9ib3hfbGFfT0JKRUNUUykgJChsaWJnc3R2aWRlb2JveF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0dmlkZW9ib3hfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHZpZGVvYm94X2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3R2aWRlb2JveF9sYV9PQkpFQ1RTKSAkKGxpYmdzdHZpZGVvYm94X2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW9ib3hfbGEtZ3N0dmlkZW9ib3guUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlb2JveF9sYS10bXAtb3JjLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R2aWRlb2JveF9sYS1nc3R2aWRlb2JveC5sbzogZ3N0dmlkZW9ib3guYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvYm94X2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvYm94X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb2JveF9sYS1nc3R2aWRlb2JveC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW9ib3hfbGEtZ3N0dmlkZW9ib3guVHBvIC1jIC1vIGxpYmdzdHZpZGVvYm94X2xhLWdzdHZpZGVvYm94LmxvIGB0ZXN0IC1mICdnc3R2aWRlb2JveC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2aWRlb2JveC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb2JveF9sYS1nc3R2aWRlb2JveC5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvYm94X2xhLWdzdHZpZGVvYm94LlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHZpZGVvYm94LmMnIG9iamVjdD0nbGliZ3N0dmlkZW9ib3hfbGEtZ3N0dmlkZW9ib3gubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2JveF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb2JveF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlb2JveF9sYS1nc3R2aWRlb2JveC5sbyBgdGVzdCAtZiAnZ3N0dmlkZW9ib3guYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmlkZW9ib3guYwotCi1saWJnc3R2aWRlb2JveF9sYS10bXAtb3JjLmxvOiB0bXAtb3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2JveF9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb2JveF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW9ib3hfbGEtdG1wLW9yYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW9ib3hfbGEtdG1wLW9yYy5UcG8gLWMgLW8gbGliZ3N0dmlkZW9ib3hfbGEtdG1wLW9yYy5sbyBgdGVzdCAtZiAndG1wLW9yYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0bXAtb3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvYm94X2xhLXRtcC1vcmMuVHBvICQoREVQRElSKS9saWJnc3R2aWRlb2JveF9sYS10bXAtb3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3RtcC1vcmMuYycgb2JqZWN0PSdsaWJnc3R2aWRlb2JveF9sYS10bXAtb3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9ib3hfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW9ib3hfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW9ib3hfbGEtdG1wLW9yYy5sbyBgdGVzdCAtZiAndG1wLW9yYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0bXAtb3JjLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAotCSAgZGlzdC1ob29rCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi0JLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKLQljbGVhbi1wbHVnaW5MVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGFsbCBjaGVjayBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzIGN0YWdzLWFtIGRpc3QtaG9vayBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi1vcmMtdXBkYXRlOiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LWluZGVudCB0bXAtb3JjLmMKLQljcCB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi0JY3AgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaAotCi1ASEFWRV9PUkNDX1RSVUVAdG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLUBIQVZFX09SQ0NfVFJVRUAJJChvcmNjX3ZfZ2VuKSQoT1JDQykgJChPUkNDX0ZMQUdTKSAtLWltcGxlbWVudGF0aW9uIC0taW5jbHVkZSBnbGliLmggLW8gdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYwotCi1ASEFWRV9PUkNDX1RSVUVAJChPUkNfU09VUkNFKS5oOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLUBIQVZFX09SQ0NfVFJVRUAJJChvcmNjX3ZfZ2VuKSQoT1JDQykgJChPUkNDX0ZMQUdTKSAtLWhlYWRlciAtLWluY2x1ZGUgZ2xpYi5oIC1vICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLUBIQVZFX09SQ0NfRkFMU0VAdG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi1ASEFWRV9PUkNDX0ZBTFNFQAkkKGNwX3ZfZ2VuKWNwICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB0bXAtb3JjLmMKLQotQEhBVkVfT1JDQ19GQUxTRUAkKE9SQ19TT1VSQ0UpLmg6ICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMKLUBIQVZFX09SQ0NfRkFMU0VACSQoY3Bfdl9nZW4pY3AgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oICQoT1JDX1NPVVJDRSkuaAotCi1jbGVhbi1sb2NhbDogY2xlYW4tb3JjCi0uUEhPTlk6IGNsZWFuLW9yYwotY2xlYW4tb3JjOgotCXJtIC1mIHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLQotZGlzdC1ob29rOiBkaXN0LWhvb2stb3JjCi0uUEhPTlk6IGRpc3QtaG9vay1vcmMKLQotIyB3ZSB0cnkgYW5kIGNvcHkgdXBkYXRlZCBvcmMgLWRpc3QgZmlsZXMgYmVsb3csIGJ1dCBkb24ndCBmYWlsIGlmIGl0Ci0jIGRvZXNuJ3Qgd29yayBhcyB0aGUgc3JjZGlyIG1pZ2h0IG5vdCBiZSB3cml0YWJsZQotZGlzdC1ob29rLW9yYzogdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1pbmRlbnQgdG1wLW9yYy5jCi0Jcm0gLWYgdG1wLW9yYy5jfgotCWNtcCAtcyB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHx8IFwKLQkgIGNwIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgfHwgdHJ1ZQotCWNtcCAtcyAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oIHx8IFwKLQkgIGNwICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmggfHwgdHJ1ZQotCWNwIC1wIHRtcC1vcmMuYyAkKGRpc3RkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi0JY3AgLXAgJChPUkNfU09VUkNFKS5oICQoZGlzdGRpcikvJChPUkNfU09VUkNFKS1kaXN0LmgKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvYm94L1JFQURNRSBiL2dzdC92aWRlb2JveC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MWRhNTkuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvYm94L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVZpZGVvYm94Ci0tLS0tLS0tLQotCi1UaGlzIHBsdWdpbiBjcm9wcyBvciBlbmxhcmdlcyB0aGUgaW1hZ2UuIEl0IHRha2VzIDQgdmFsdWVzIGFzIGlucHV0LCBhCi10b3AsIGJvdHRvbSwgbGVmdCBhbmQgcmlnaHQgb2Zmc2V0LiBQb3NpdGl2ZSB2YWx1ZXMgd2lsbCBjcm9wIHRoYXQgbXVjaAotcGl4ZWxzIGZyb20gdGhlIHJlc3BlY3RpdmUgYm9yZGVyIG9mIHRoZSBpbWFnZSwgbmVnYXRpdmUgdmFsdWVzIHdpbGwgYWRkCi10aGF0IG11Y2ggcGl4ZWxzLiBXaGVuIHBpeGVscyBhcmUgYWRkZWQsIHlvdSBjYW4gc3BlY2lmeSB0aGVpciBjb2xvci4gCi1Tb21lIHByZWRlZmluZWQgY29sb3JzIGFyZSB1c2FibGUgd2l0aCBhbiBlbnVtIHByb3BlcnR5LgotCi1UaGUgcGx1Z2luIGlzIGFscGhhIGNoYW5uZWwgYXdhcmUgYW5kIHdpbGwgdHJ5IHRvIG5lZ290aWF0ZSB3aXRoIGEgZm9ybWF0Ci10aGF0IHN1cHBvcnRzIGFscGhhIGNoYW5uZWxzIGZpcnN0LiBXaGVuIGFscGhhIGNoYW5uZWwgaXMgYWN0aXZlIHR3bwotb3RoZXIgcHJvcGVydGllcywgYWxwaGEgYW5kIGJvcmRlcl9hbHBoYSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGFscGhhCi12YWx1ZXMgb2YgdGhlIGlubmVyIHBpY3R1cmUgYW5kIHRoZSBib3JkZXIgcmVzcGVjdGl2ZWx5LiBhbiBhbHBoYSB2YWx1ZSBvZgotMC4wIG1lYW5zIHRvdGFsIHRyYW5zcGFyZW5jeSwgMS4wIGlzIG9wYXF1ZS4KLQotVGhlIHZpZGVvYm94IHBsdWdpbiBoYXMgbWFueSB1c2VzIHN1Y2ggYXMgZG9pbmcgYSBtb3NhaWMgb2YgcGljdHVyZXMsIAotbGV0dGVyYm94aW5nIHZpZGVvLCBjdXR0aW5nIG91dCBwaWVjZXMgb2YgdmlkZW8sIHBpY3R1cmUgaW4gcGljdHVyZSwgZXRjLi4KLQotVE9ETwotCi0tIGFkZCBlbnVtIHRvIHNwZWNpZnkgY29tbW9uIGFzcGVjdCByYXRpb3Mvc2l6ZXMgYW5kIGFkZCBib3JkZXJzL2Nyb3AKZGlmZiAtLWdpdCBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveC5jIGIvZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4Zjk4NGMuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQ3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdmlkZW9ib3gKLSAqIEBzZWVfYWxzbzogI0dzdFZpZGVvQ3JvcAotICoKLSAqIFRoaXMgcGx1Z2luIGNyb3BzIG9yIGVubGFyZ2VzIHRoZSBpbWFnZS4gSXQgdGFrZXMgNCB2YWx1ZXMgYXMgaW5wdXQsIGEKLSAqIHRvcCwgYm90dG9tLCBsZWZ0IGFuZCByaWdodCBvZmZzZXQuIFBvc2l0aXZlIHZhbHVlcyB3aWxsIGNyb3AgdGhhdCBtdWNoCi0gKiBwaXhlbHMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBib3JkZXIgb2YgdGhlIGltYWdlLCBuZWdhdGl2ZSB2YWx1ZXMgd2lsbCBhZGQKLSAqIHRoYXQgbXVjaCBwaXhlbHMuIFdoZW4gcGl4ZWxzIGFyZSBhZGRlZCwgeW91IGNhbiBzcGVjaWZ5IHRoZWlyIGNvbG9yLiAKLSAqIFNvbWUgcHJlZGVmaW5lZCBjb2xvcnMgYXJlIHVzYWJsZSB3aXRoIGFuIGVudW0gcHJvcGVydHkuCi0gKiAKLSAqIFRoZSBwbHVnaW4gaXMgYWxwaGEgY2hhbm5lbCBhd2FyZSBhbmQgd2lsbCB0cnkgdG8gbmVnb3RpYXRlIHdpdGggYSBmb3JtYXQKLSAqIHRoYXQgc3VwcG9ydHMgYWxwaGEgY2hhbm5lbHMgZmlyc3QuIFdoZW4gYWxwaGEgY2hhbm5lbCBpcyBhY3RpdmUgdHdvCi0gKiBvdGhlciBwcm9wZXJ0aWVzLCBhbHBoYSBhbmQgYm9yZGVyX2FscGhhIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgYWxwaGEKLSAqIHZhbHVlcyBvZiB0aGUgaW5uZXIgcGljdHVyZSBhbmQgdGhlIGJvcmRlciByZXNwZWN0aXZlbHkuIGFuIGFscGhhIHZhbHVlIG9mCi0gKiAwLjAgbWVhbnMgdG90YWwgdHJhbnNwYXJlbmN5LCAxLjAgaXMgb3BhcXVlLgotICogCi0gKiBUaGUgdmlkZW9ib3ggcGx1Z2luIGhhcyBtYW55IHVzZXMgc3VjaCBhcyBkb2luZyBhIG1vc2FpYyBvZiBwaWN0dXJlcywgCi0gKiBsZXR0ZXJib3hpbmcgdmlkZW8sIGN1dHRpbmcgb3V0IHBpZWNlcyBvZiB2aWRlbywgcGljdHVyZSBpbiBwaWN0dXJlLCBldGMuLgotICoKLSAqIFNldHRpbmcgYXV0b2Nyb3AgdG8gdHJ1ZSBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB0aGUgcGx1Z2luIHNvIHRoYXQKLSAqIGNhcHMgZGV0ZXJtaW5lIGNyb3AgcHJvcGVydGllcyByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IGFyb3VuZDogZ2l2ZW4KLSAqIGlucHV0IGFuZCBvdXRwdXQgZGltZW5zaW9ucywgdGhlIGNyb3AgdmFsdWVzIGFyZSBzZWxlY3RlZCBzbyB0aGF0IHRoZQotICogc21hbGxlciBmcmFtZSBpcyBlZmZlY3RpdmVseSBjZW50ZXJlZCBpbiB0aGUgbGFyZ2VyIGZyYW1lLiAgVGhpcwotICogaW52b2x2ZXMgZWl0aGVyIGNyb3BwaW5nIG9yIHBhZGRpbmcuCi0gKiAKLSAqIElmIHlvdSB1c2UgYXV0b2Nyb3AgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHNldHRpbmcgdGhlIG90aGVyCi0gKiBwcm9wZXJ0aWVzIG1hbnVhbGx5IGJlY2F1c2UgdGhleSB3aWxsIGJlIG92ZXJyaWRlbiBpZiB0aGUgY2FwcyBjaGFuZ2UsCi0gKiBidXQgbm90aGluZyBzdG9wcyB5b3UgZnJvbSBkb2luZyBzby4KLSAqIAotICogU2FtcGxlIHBpcGVsaW5lOgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhIHZpZGVvYm94IGF1dG9jcm9wPXRydWUgISBcCi0gKiAgICJ2aWRlby94LXJhdywgd2lkdGg9NjAwLCBoZWlnaHQ9NDAwIiAhIHZpZGVvY29udmVydCAhIHhpbWFnZXNpbmsKLSAqIF18Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0dmlkZW9ib3guaCIKLSNpbmNsdWRlICJnc3R2aWRlb2JveG9yYy5oIgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh2aWRlb2JveF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB2aWRlb2JveF9kZWJ1ZwotCi0vKiBGcm9tIHZpZGVvdGVzdHNyYy5jICovCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IHl1dl9zZHR2X2NvbG9yc19ZW1ZJREVPX0JPWF9GSUxMX0xBU1RdID0KLSAgICB7IDE2LCAxNDUsIDQxLCA4MSwgMjEwLCAyMzUgfTsKLXN0YXRpYyBjb25zdCBndWludDggeXV2X3NkdHZfY29sb3JzX1VbVklERU9fQk9YX0ZJTExfTEFTVF0gPQotICAgIHsgMTI4LCA1NCwgMjQwLCA5MCwgMTYsIDEyOCB9Owotc3RhdGljIGNvbnN0IGd1aW50OCB5dXZfc2R0dl9jb2xvcnNfVltWSURFT19CT1hfRklMTF9MQVNUXSA9Ci0gICAgeyAxMjgsIDM0LCAxMTAsIDI0MCwgMTQ2LCAxMjggfTsKLQotc3RhdGljIGNvbnN0IGd1aW50OCB5dXZfaGR0dl9jb2xvcnNfWVtWSURFT19CT1hfRklMTF9MQVNUXSA9Ci0gICAgeyAxNiwgMTczLCAzMiwgNjMsIDIxOSwgMjM1IH07Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHl1dl9oZHR2X2NvbG9yc19VW1ZJREVPX0JPWF9GSUxMX0xBU1RdID0KLSAgICB7IDEyOCwgNDIsIDI0MCwgMTAyLCAxNiwgMTI4IH07Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHl1dl9oZHR2X2NvbG9yc19WW1ZJREVPX0JPWF9GSUxMX0xBU1RdID0KLSAgICB7IDEyOCwgMjYsIDExOCwgMjQwLCAxMzgsIDEyOCB9OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJnYl9jb2xvcnNfUltWSURFT19CT1hfRklMTF9MQVNUXSA9Ci0gICAgeyAwLCAwLCAwLCAyNTUsIDI1NSwgMjU1IH07Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJnYl9jb2xvcnNfR1tWSURFT19CT1hfRklMTF9MQVNUXSA9Ci0gICAgeyAwLCAyNTUsIDAsIDAsIDI1NSwgMjU1IH07Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJnYl9jb2xvcnNfQltWSURFT19CT1hfRklMTF9MQVNUXSA9Ci0gICAgeyAwLCAwLCAyNTUsIDAsIDAsIDI1NSB9OwotCi0vKiBHZW5lcmF0ZWQgYnkgLWJhZC9leHQvY29nL2dlbmVyYXRlX3RhYmxlcyAqLwotc3RhdGljIGNvbnN0IGludCBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHZbXSA9IHsKLSAgMjk4LCAwLCA0NTksIC02MzUxNCwKLSAgMjk4LCAtNTUsIC0xMzYsIDE5NjgxLAotICAyOTgsIDU0MSwgMCwgLTczOTg4LAotfTsKLQotc3RhdGljIGNvbnN0IGludCBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHZbXSA9IHsKLSAgMjk4LCAwLCA0MDksIC01NzA2OCwKLSAgMjk4LCAtMTAwLCAtMjA4LCAzNDcwNywKLSAgMjk4LCA1MTYsIDAsIC03MDg3MCwKLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfaGR0dltdID0gewotICA0NywgMTU3LCAxNiwgNDA5NiwKLSAgLTI2LCAtODcsIDExMiwgMzI3NjgsCi0gIDExMiwgLTEwMiwgLTEwLCAzMjc2OCwKLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0dltdID0gewotICA2NiwgMTI5LCAyNSwgNDA5NiwKLSAgLTM4LCAtNzQsIDExMiwgMzI3NjgsCi0gIDExMiwgLTk0LCAtMTgsIDMyNzY4LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgY29nX3ljYmNyX3NkdHZfdG9feWNiY3JfaGR0dl9tYXRyaXhfOGJpdFtdID0gewotICAyNTYsIC0zMCwgLTUzLCAxMDYwMCwKLSAgMCwgMjYxLCAyOSwgLTQzNjcsCi0gIDAsIDE5LCAyNjIsIC0zMjg5LAotfTsKLQotc3RhdGljIGNvbnN0IGdpbnQgY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdFtdID0gewotICAyNTYsIDI1LCA0OSwgLTk1MzYsCi0gIDAsIDI1MywgLTI4LCAzOTU4LAotICAwLCAtMTksIDI1MiwgMjkxOCwKLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGNvZ19pZGVudGl0eV9tYXRyaXhfOGJpdFtdID0gewotICAyNTYsIDAsIDAsIDAsCi0gIDAsIDI1NiwgMCwgMCwKLSAgMCwgMCwgMjU2LCAwLAotfTsKLQotI2RlZmluZSBBUFBMWV9NQVRSSVgobSxvLHYxLHYyLHYzKSAoKG1bbyo0XSAqIHYxICsgbVtvKjQrMV0gKiB2MiArIG1bbyo0KzJdICogdjMgKyBtW28qNCszXSkgPj4gOCkKLQotc3RhdGljIHZvaWQKLWZpbGxfYXl1diAoR3N0VmlkZW9Cb3hGaWxsIGZpbGxfdHlwZSwgZ3VpbnQgYl9hbHBoYSwKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUsIGdib29sZWFuIHNkdHYpCi17Ci0gIGd1aW50MzIgZW1wdHlfcGl4ZWw7Ci0gIGd1aW50OCAqZGVzdDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IHN0cmlkZTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChmcmFtZSk7Ci0KLSAgYl9hbHBoYSA9IENMQU1QIChiX2FscGhhLCAwLCAyNTUpOwotCi0gIGlmIChzZHR2KQotICAgIGVtcHR5X3BpeGVsID0gR1VJTlQzMl9GUk9NX0JFICgoYl9hbHBoYSA8PCAyNCkgfAotICAgICAgICAoeXV2X3NkdHZfY29sb3JzX1lbZmlsbF90eXBlXSA8PCAxNikgfAotICAgICAgICAoeXV2X3NkdHZfY29sb3JzX1VbZmlsbF90eXBlXSA8PCA4KSB8IHl1dl9zZHR2X2NvbG9yc19WW2ZpbGxfdHlwZV0pOwotICBlbHNlCi0gICAgZW1wdHlfcGl4ZWwgPSBHVUlOVDMyX0ZST01fQkUgKChiX2FscGhhIDw8IDI0KSB8Ci0gICAgICAgICh5dXZfaGR0dl9jb2xvcnNfWVtmaWxsX3R5cGVdIDw8IDE2KSB8Ci0gICAgICAgICh5dXZfaGR0dl9jb2xvcnNfVVtmaWxsX3R5cGVdIDw8IDgpIHwgeXV2X2hkdHZfY29sb3JzX1ZbZmlsbF90eXBlXSk7Ci0KLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMCk7Ci0gIHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGZyYW1lLCAwKTsKLQotICBpZiAoR19MSUtFTFkgKHN0cmlkZSA9PSA0ICogd2lkdGgpKQotICAgIHZpZGVvX2JveF9vcmNfc3BsYXRfdTMyICgoZ3VpbnQzMiAqKSBkZXN0LCBlbXB0eV9waXhlbCwgd2lkdGggKiBoZWlnaHQpOwotICBlbHNlIGlmIChoZWlnaHQpIHsKLSAgICBmb3IgKDsgaGVpZ2h0OyAtLWhlaWdodCkgewotICAgICAgdmlkZW9fYm94X29yY19zcGxhdF91MzIgKChndWludDMyICopIGRlc3QsIGVtcHR5X3BpeGVsLCB3aWR0aCk7Ci0gICAgICBkZXN0ICs9IHN0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfYXl1dl9heXV2IChndWludCBpX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdF9mcmFtZSwKLSAgICBnYm9vbGVhbiBkZXN0X3NkdHYsIGdpbnQgZGVzdF94LCBnaW50IGRlc3RfeSwgR3N0VmlkZW9GcmFtZSAqIHNyY19mcmFtZSwKLSAgICBnYm9vbGVhbiBzcmNfc2R0diwgZ2ludCBzcmNfeCwgZ2ludCBzcmNfeSwgZ2ludCB3LCBnaW50IGgpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBzcmNfc3RyaWRlOwotICBnaW50IGRlc3Rfc3RyaWRlOwotICBndWludDggKmRlc3QsICpzcmM7Ci0KLSAgc3JjX3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKHNyY19mcmFtZSwgMCk7Ci0gIGRlc3Rfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZGVzdF9mcmFtZSwgMCk7Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyY19mcmFtZSwgMCk7Ci0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdF9mcmFtZSwgMCk7Ci0KLSAgZGVzdCA9IGRlc3QgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZSArIGRlc3RfeCAqIDQ7Ci0gIHNyYyA9IHNyYyArIHNyY195ICogc3JjX3N0cmlkZSArIHNyY194ICogNDsKLQotICB3ICo9IDQ7Ci0KLSAgaWYgKGRlc3Rfc2R0diAhPSBzcmNfc2R0dikgewotICAgIGdpbnQgbWF0cml4WzEyXTsKLSAgICBnaW50IHksIHUsIHY7Ci0KLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgZGVzdF9zZHR2ID8gY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9zZHR2X3RvX3ljYmNyX2hkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSA0KSB7Ci0gICAgICAgIC8qIE9SQyBGSVhNRSAqLwotICAgICAgICBkZXN0W2pdID0gKHNyY1tqXSAqIGlfYWxwaGEpID4+IDg7Ci0gICAgICAgIHkgPSBzcmNbaiArIDFdOwotICAgICAgICB1ID0gc3JjW2ogKyAyXTsKLSAgICAgICAgdiA9IHNyY1tqICsgM107Ci0gICAgICAgIGRlc3RbaiArIDFdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHksIHUsIHYpOwotICAgICAgICBkZXN0W2ogKyAyXSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5LCB1LCB2KTsKLSAgICAgICAgZGVzdFtqICsgM10gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeSwgdSwgdik7Ci0gICAgICB9Ci0gICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOwotICAgICAgc3JjICs9IHNyY19zdHJpZGU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBoOyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCB3OyBqICs9IDQpIHsKLSAgICAgICAgLyogT1JDIEZJWE1FICovCi0gICAgICAgIGRlc3Rbal0gPSAoc3JjW2pdICogaV9hbHBoYSkgPj4gODsKLSAgICAgICAgZGVzdFtqICsgMV0gPSBzcmNbaiArIDFdOwotICAgICAgICBkZXN0W2ogKyAyXSA9IHNyY1tqICsgMl07Ci0gICAgICAgIGRlc3RbaiArIDNdID0gc3JjW2ogKyAzXTsKLSAgICAgIH0KLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfYXl1dl9pNDIwIChndWludCBpX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdF9mcmFtZSwKLSAgICBnYm9vbGVhbiBkZXN0X3NkdHYsIGdpbnQgZGVzdF94LCBnaW50IGRlc3RfeSwgR3N0VmlkZW9GcmFtZSAqIHNyY19mcmFtZSwKLSAgICBnYm9vbGVhbiBzcmNfc2R0diwgZ2ludCBzcmNfeCwgZ2ludCBzcmNfeSwgZ2ludCB3LCBnaW50IGgpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ3VpbnQ4ICpkZXN0WSwgKmRlc3RZMiwgKmRlc3RVLCAqZGVzdFY7Ci0gIGdpbnQgZGVzdF9zdHJpZGVZLCBkZXN0X3N0cmlkZVUsIGRlc3Rfc3RyaWRlVjsKLSAgY29uc3QgZ3VpbnQ4ICpzcmMyOwotICBnaW50IHNyY19zdHJpZGU7Ci0gIGdpbnQgeV9pZHgsIHV2X2lkeDsKLSAgZ2ludCB5MSwgeTIsIHkzLCB5NDsKLSAgZ2ludCB1MSwgdTIsIHUzLCB1NDsKLSAgZ2ludCB2MSwgdjIsIHYzLCB2NDsKLSAgZ2ludCBtYXRyaXhbMTJdOwotICBndWludDggKnNyYzsKLSAgZ2ludCBkZXN0X2hlaWdodCwgc3JjX2hlaWdodCwgZGVzdF93aWR0aDsKLQotICBkZXN0X2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGRlc3RfZnJhbWUpOwotICBkZXN0X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChkZXN0X2ZyYW1lKTsKLSAgc3JjX2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKHNyY19mcmFtZSk7Ci0KLSAgZGVzdF9zdHJpZGVZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0X2ZyYW1lLCAwKTsKLSAgZGVzdF9zdHJpZGVVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0X2ZyYW1lLCAxKTsKLSAgZGVzdF9zdHJpZGVWID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0X2ZyYW1lLCAyKTsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjX2ZyYW1lLCAwKTsKLQotICBkZXN0WSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3RfZnJhbWUsIDApOwotICBkZXN0VSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3RfZnJhbWUsIDEpOwotICBkZXN0ViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3RfZnJhbWUsIDIpOwotCi0gIGRlc3RZID0gZGVzdFkgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZVkgKyBkZXN0X3g7Ci0gIGRlc3RZMiA9IChkZXN0X3kgPCBkZXN0X2hlaWdodCkgPyBkZXN0WSArIGRlc3Rfc3RyaWRlWSA6IGRlc3RZOwotICBkZXN0VSA9IGRlc3RVICsgKGRlc3RfeSAvIDIpICogZGVzdF9zdHJpZGVVICsgZGVzdF94IC8gMjsKLSAgZGVzdFYgPSBkZXN0ViArIChkZXN0X3kgLyAyKSAqIGRlc3Rfc3RyaWRlViArIGRlc3RfeCAvIDI7Ci0KLSAgc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyY19mcmFtZSwgMCk7Ci0gIHNyYyA9IHNyYyArIHNyY195ICogc3JjX3N0cmlkZSArIHNyY194ICogNDsKLSAgc3JjMiA9IChzcmNfeSA8IHNyY19oZWlnaHQpID8gc3JjICsgc3JjX3N0cmlkZSA6IHNyYzsKLQotICBoID0gZGVzdF95ICsgaDsKLSAgdyA9IGRlc3RfeCArIHc7Ci0KLSAgaWYgKHNyY19zZHR2ICE9IGRlc3Rfc2R0dikKLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgZGVzdF9zZHR2ID8gY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9zZHR2X3RvX3ljYmNyX2hkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0gIGVsc2UKLSAgICBtZW1jcHkgKG1hdHJpeCwgY29nX2lkZW50aXR5X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gIC8qIDEuIEhhbmRsZSB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2NhbmxpbmUgc3BlY2lhbGx5IGlmIGl0Ci0gICAqICAgIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIGJsZW5kCi0gICAqICAgIHdpdGggdGhlIGJhY2tncm91bmQhICovCi0gIGlmIChkZXN0X3kgJSAyID09IDEpIHsKLSAgICAvKiAxLjEuIEhhbmRsZSB0aGUgZmlyc3QgZGVzdGluYXRpb24gcGl4ZWwgaWYgaXQgZG9lc24ndAotICAgICAqICAgICAgc3RhcnQgYXQgdGhlIG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIGJsZW5kIHdpdGgKLSAgICAgKiAgICAgIHRoZSBiYWNrZ3JvdW5kISAqLwotICAgIGlmIChkZXN0X3ggJSAyID09IDEpIHsKLSAgICAgIHkxID0gc3JjWzQgKiAwICsgMV07Ci0gICAgICB1MSA9IHNyY1s0ICogMCArIDJdOwotICAgICAgdjEgPSBzcmNbNCAqIDAgKyAzXTsKLQotICAgICAgZGVzdFlbMF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbMF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RVWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDQsIDAsCi0gICAgICAgICAgMjU1KTsKLSAgICAgIGRlc3RWWzBdID0KLSAgICAgICAgICBDTEFNUCAoKDMgKiBkZXN0VlswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyA0LCAwLAotICAgICAgICAgIDI1NSk7Ci0KLSAgICAgIGogPSBkZXN0X3ggKyAxOwotICAgICAgeV9pZHggPSB1dl9pZHggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICBqID0gZGVzdF94OwotICAgICAgeV9pZHggPSB1dl9pZHggPSAwOwotICAgIH0KLQotICAgIC8qIDEuMi4gQ29weSBhbGwgbWFjcm8gcGl4ZWxzIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KLSAgICAgKiAgICAgIGJ1dCBibGVuZCB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2UncmUgb25seSBmaWxsaW5nCi0gICAgICogICAgICB0aGUgbG93ZXIgcGFydCBvZiB0aGUgbWFjcm8gcGl4ZWxzLiAqLwotICAgIGZvciAoOyBqIDwgdyAtIDE7IGogKz0gMikgewotICAgICAgeTEgPSBzcmNbNCAqIHlfaWR4ICsgMV07Ci0gICAgICB5MiA9IHNyY1s0ICogeV9pZHggKyA0ICsgMV07Ci0KLSAgICAgIHUxID0gc3JjWzQgKiB5X2lkeCArIDJdOwotICAgICAgdTIgPSBzcmNbNCAqIHlfaWR4ICsgNCArIDJdOwotCi0gICAgICB2MSA9IHNyY1s0ICogeV9pZHggKyAzXTsKLSAgICAgIHYyID0gc3JjWzQgKiB5X2lkeCArIDQgKyAzXTsKLQotICAgICAgZGVzdFlbeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW3lfaWR4ICsgMV0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RVW3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkyLCB1MiwgdjIpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0Vlt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgICgyICogZGVzdFZbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLQotICAgICAgeV9pZHggKz0gMjsKLSAgICAgIHV2X2lkeCsrOwotICAgIH0KLQotICAgIC8qIDEuMy4gTm93IGNvcHkgdGhlIGxhc3QgcGl4ZWwgaWYgb25lIGV4aXN0cyBhbmQgYmxlbmQgaXQKLSAgICAgKiAgICAgIHdpdGggdGhlIGJhY2tncm91bmQgYmVjYXVzZSB3ZSBvbmx5IGZpbGwgcGFydCBvZgotICAgICAqICAgICAgdGhlIG1hY3JvIHBpeGVsLiBJbiBjYXNlIHRoaXMgaXMgdGhlIGxhc3QgcGl4ZWwgb2YKLSAgICAgKiAgICAgIHRoZSBkZXN0aW5hdGlvbiB3ZSB3aWxsIGEgbGFyZ2VyIHBhcnQuICovCi0gICAgaWYgKGogPT0gdyAtIDEgJiYgaiA9PSBkZXN0X3dpZHRoIC0gMSkgewotICAgICAgeTEgPSBzcmNbNCAqIHlfaWR4ICsgMV07Ci0gICAgICB1MSA9IHNyY1s0ICogeV9pZHggKyAyXTsKLSAgICAgIHYxID0gc3JjWzQgKiB5X2lkeCArIDNdOwotCi0gICAgICBkZXN0WVt5X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoZGVzdFVbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSkgLyAyLCAwLCAyNTUpOwotICAgICAgZGVzdFZbdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoZGVzdFZbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyAyLCAwLCAyNTUpOwotICAgIH0gZWxzZSBpZiAoaiA9PSB3IC0gMSkgewotICAgICAgeTEgPSBzcmNbNCAqIHlfaWR4ICsgMV07Ci0gICAgICB1MSA9IHNyY1s0ICogeV9pZHggKyAyXTsKLSAgICAgIHYxID0gc3JjWzQgKiB5X2lkeCArIDNdOwotCi0gICAgICBkZXN0WVt5X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMyAqIGRlc3RVW3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gNCwgMCwKLSAgICAgICAgICAyNTUpOwotICAgICAgZGVzdFZbdXZfaWR4XSA9Ci0gICAgICAgICAgQ0xBTVAgKCgzICogZGVzdFZbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyA0LAotICAgICAgICAgIDAsIDI1NSk7Ci0gICAgfQotCi0gICAgZGVzdFkgKz0gZGVzdF9zdHJpZGVZOwotICAgIGRlc3RZMiArPSBkZXN0X3N0cmlkZVk7Ci0gICAgZGVzdFUgKz0gZGVzdF9zdHJpZGVVOwotICAgIGRlc3RWICs9IGRlc3Rfc3RyaWRlVjsKLSAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICBzcmMyICs9IHNyY19zdHJpZGU7Ci0gICAgaSA9IGRlc3RfeSArIDE7Ci0gIH0gZWxzZSB7Ci0gICAgaSA9IGRlc3RfeTsKLSAgfQotCi0gIC8qIDIuIENvcHkgYWxsIG1hY3JvIHBpeGVsIHNjYW5saW5lcywgdGhlIGRlc3RpbmF0aW9uIHNjYW5saW5lCi0gICAqICAgIG5vdyBzdGFydHMgYXQgbWFjcm8gcGl4ZWwgYm91bmRhcnkuICovCi0gIGZvciAoOyBpIDwgaCAtIDE7IGkgKz0gMikgewotICAgIC8qIDIuMS4gSGFuZGxlIHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBwaXhlbCBpZiBpdCBkb2Vzbid0Ci0gICAgICogICAgICBzdGFydCBhdCB0aGUgbWFjcm8gcGl4ZWwgYm91bmRhcnksIGkuZS4gYmxlbmQgd2l0aAotICAgICAqICAgICAgdGhlIGJhY2tncm91bmQhICovCi0gICAgaWYgKGRlc3RfeCAlIDIgPT0gMSkgewotICAgICAgeTEgPSBzcmNbNCAqIDAgKyAxXTsKLSAgICAgIHkyID0gc3JjMls0ICogMCArIDFdOwotICAgICAgdTEgPSBzcmNbNCAqIDAgKyAyXTsKLSAgICAgIHUyID0gc3JjMls0ICogMCArIDJdOwotICAgICAgdjEgPSBzcmNbNCAqIDAgKyAzXTsKLSAgICAgIHYyID0gc3JjMls0ICogMCArIDNdOwotCi0gICAgICBkZXN0WVswXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0WTJbMF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbMF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0VVswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGRlc3RWWzBdID0gQ0xBTVAgKAotICAgICAgICAgICgyICogZGVzdFZbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLCB1MiwgdjIpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBqID0gZGVzdF94ICsgMTsKLSAgICAgIHlfaWR4ID0gdXZfaWR4ID0gMTsKLSAgICB9IGVsc2UgewotICAgICAgaiA9IGRlc3RfeDsKLSAgICAgIHlfaWR4ID0gdXZfaWR4ID0gMDsKLSAgICB9Ci0KLSAgICAvKiAyLjIuIENvcHkgYWxsIG1hY3JvIHBpeGVscyBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLgotICAgICAqICAgICAgQWxsIHBpeGVscyBub3cgc3RhcnQgYXQgbWFjcm8gcGl4ZWwgYm91bmRhcnksIGkuZS4gbm8KLSAgICAgKiAgICAgIGJsZW5kaW5nIHdpdGggdGhlIGJhY2tncm91bmQgaXMgbmVjZXNzYXJ5LiAqLwotICAgIGZvciAoOyBqIDwgdyAtIDE7IGogKz0gMikgewotICAgICAgeTEgPSBzcmNbNCAqIHlfaWR4ICsgMV07Ci0gICAgICB5MiA9IHNyY1s0ICogeV9pZHggKyA0ICsgMV07Ci0gICAgICB5MyA9IHNyYzJbNCAqIHlfaWR4ICsgMV07Ci0gICAgICB5NCA9IHNyYzJbNCAqIHlfaWR4ICsgNCArIDFdOwotCi0gICAgICB1MSA9IHNyY1s0ICogeV9pZHggKyAyXTsKLSAgICAgIHUyID0gc3JjWzQgKiB5X2lkeCArIDQgKyAyXTsKLSAgICAgIHUzID0gc3JjMls0ICogeV9pZHggKyAyXTsKLSAgICAgIHU0ID0gc3JjMls0ICogeV9pZHggKyA0ICsgMl07Ci0KLSAgICAgIHYxID0gc3JjWzQgKiB5X2lkeCArIDNdOwotICAgICAgdjIgPSBzcmNbNCAqIHlfaWR4ICsgNCArIDNdOwotICAgICAgdjMgPSBzcmMyWzQgKiB5X2lkeCArIDNdOwotICAgICAgdjQgPSBzcmMyWzQgKiB5X2lkeCArIDQgKyAzXTsKLQotICAgICAgZGVzdFlbeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW3lfaWR4ICsgMV0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotICAgICAgZGVzdFkyW3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTMsIHUzLCB2MyksIDAsIDI1NSk7Ci0gICAgICBkZXN0WTJbeV9pZHggKyAxXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTQsIHU0LCB2NCksIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RVW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MiwKLSAgICAgICAgICAgICAgICAgIHUyLCB2MikgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTMsIHUzLAotICAgICAgICAgICAgICAgICAgdjMpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHk0LCB1NCwgdjQpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0Vlt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLCB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsCi0gICAgICAgICAgICAgICAgICB1MiwgdjIpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkzLCB1MywKLSAgICAgICAgICAgICAgICAgIHYzKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5NCwgdTQsIHY0KSkgLyA0LCAwLCAyNTUpOwotCi0gICAgICB5X2lkeCArPSAyOwotICAgICAgdXZfaWR4Kys7Ci0gICAgfQotCi0gICAgLyogMi4zLiBOb3cgY29weSB0aGUgbGFzdCBwaXhlbCBpZiBvbmUgZXhpc3RzIGFuZCBibGVuZCBpdAotICAgICAqICAgICAgd2l0aCB0aGUgYmFja2dyb3VuZCBiZWNhdXNlIHdlIG9ubHkgZmlsbCBwYXJ0IG9mCi0gICAgICogICAgICB0aGUgbWFjcm8gcGl4ZWwuIEluIGNhc2UgdGhpcyBpcyB0aGUgbGFzdCBwaXhlbCBvZgotICAgICAqICAgICAgdGhlIGRlc3RpbmF0aW9uIHdlIHdpbGwgYSBsYXJnZXIgcGFydC4gKi8KLSAgICBpZiAoaiA9PSB3IC0gMSAmJiBqID09IGRlc3Rfd2lkdGggLSAxKSB7Ci0gICAgICB5MSA9IHNyY1s0ICogeV9pZHggKyAxXTsKLSAgICAgIHkyID0gc3JjMls0ICogeV9pZHggKyAxXTsKLQotICAgICAgdTEgPSBzcmNbNCAqIHlfaWR4ICsgMl07Ci0gICAgICB1MiA9IHNyYzJbNCAqIHlfaWR4ICsgMl07Ci0KLSAgICAgIHYxID0gc3JjWzQgKiB5X2lkeCArIDNdOwotICAgICAgdjIgPSBzcmMyWzQgKiB5X2lkeCArIDNdOwotCi0gICAgICBkZXN0WVt5X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFkyW3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUyLCB2MiksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsCi0gICAgICAgICAgICAgICAgICB1MiwgdjIpKSAvIDIsIDAsIDI1NSk7Ci0gICAgICBkZXN0Vlt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsCi0gICAgICAgICAgICAgICAgICB1MiwgdjIpKSAvIDIsIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAxKSB7Ci0gICAgICB5MSA9IHNyY1s0ICogeV9pZHggKyAxXTsKLSAgICAgIHkyID0gc3JjMls0ICogeV9pZHggKyAxXTsKLQotICAgICAgdTEgPSBzcmNbNCAqIHlfaWR4ICsgMl07Ci0gICAgICB1MiA9IHNyYzJbNCAqIHlfaWR4ICsgMl07Ci0KLSAgICAgIHYxID0gc3JjWzQgKiB5X2lkeCArIDNdOwotICAgICAgdjIgPSBzcmMyWzQgKiB5X2lkeCArIDNdOwotCi0gICAgICBkZXN0WVt5X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFkyW3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUyLCB2MiksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgICgyICogZGVzdFVbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0Vlt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MiwgdTIsIHYyKSkgLyA0LCAwLCAyNTUpOwotICAgIH0KLQotICAgIGRlc3RZICs9IDIgKiBkZXN0X3N0cmlkZVk7Ci0gICAgZGVzdFkyICs9IDIgKiBkZXN0X3N0cmlkZVk7Ci0gICAgZGVzdFUgKz0gZGVzdF9zdHJpZGVVOwotICAgIGRlc3RWICs9IGRlc3Rfc3RyaWRlVjsKLSAgICBzcmMgKz0gMiAqIHNyY19zdHJpZGU7Ci0gICAgc3JjMiArPSAyICogc3JjX3N0cmlkZTsKLSAgfQotCi0gIC8qIDMuIEhhbmRsZSB0aGUgbGFzdCBzY2FubGluZSBpZiBvbmUgZXhpc3RzLiBUaGlzIGFnYWluCi0gICAqICAgIGRvZXNuJ3Qgc3RhcnQgYXQgbWFjcm8gcGl4ZWwgYm91bmRhcnkgYnV0IHNob3VsZAotICAgKiAgICBvbmx5IGZpbGwgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIG1hY3JvIHBpeGVscy4gKi8KLSAgaWYgKGkgPT0gaCAtIDEgJiYgaSA9PSBkZXN0X2hlaWdodCAtIDEpIHsKLSAgICAvKiAzLjEuIEhhbmRsZSB0aGUgZmlyc3QgZGVzdGluYXRpb24gcGl4ZWwgaWYgaXQgZG9lc24ndAotICAgICAqICAgICAgc3RhcnQgYXQgdGhlIG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIGJsZW5kIHdpdGgKLSAgICAgKiAgICAgIHRoZSBiYWNrZ3JvdW5kISAqLwotICAgIGlmIChkZXN0X3ggJSAyID09IDEpIHsKLSAgICAgIHkxID0gc3JjWzQgKiAwICsgMV07Ci0gICAgICB1MSA9IHNyY1s0ICogMCArIDJdOwotICAgICAgdjEgPSBzcmNbNCAqIDAgKyAzXTsKLQotICAgICAgZGVzdFlbMF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbMF0gPQotICAgICAgICAgIENMQU1QICgoZGVzdFVbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICAgIGRlc3RWWzBdID0KLSAgICAgICAgICBDTEFNUCAoKGRlc3RWWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkxLCB1MSwgdjEpKSAvIDIsIDAsIDI1NSk7Ci0KLSAgICAgIGogPSBkZXN0X3ggKyAxOwotICAgICAgeV9pZHggPSB1dl9pZHggPSAxOwotICAgIH0gZWxzZSB7Ci0gICAgICBqID0gZGVzdF94OwotICAgICAgeV9pZHggPSB1dl9pZHggPSAwOwotICAgIH0KLQotICAgIC8qIDMuMi4gQ29weSBhbGwgbWFjcm8gcGl4ZWxzIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KLSAgICAgKiAgICAgIGJ1dCBibGVuZCB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2UncmUgb25seSBmaWxsaW5nCi0gICAgICogICAgICB0aGUgdXBwZXIgcGFydCBvZiB0aGUgbWFjcm8gcGl4ZWxzLiAqLwotICAgIGZvciAoOyBqIDwgdyAtIDE7IGogKz0gMikgewotICAgICAgeTEgPSBzcmNbNCAqIHlfaWR4ICsgMV07Ci0gICAgICB5MiA9IHNyY1s0ICogeV9pZHggKyA0ICsgMV07Ci0KLSAgICAgIHUxID0gc3JjWzQgKiB5X2lkeCArIDJdOwotICAgICAgdTIgPSBzcmNbNCAqIHlfaWR4ICsgNCArIDJdOwotCi0gICAgICB2MSA9IHNyY1s0ICogeV9pZHggKyAzXTsKLSAgICAgIHYyID0gc3JjWzQgKiB5X2lkeCArIDQgKyAzXTsKLQotICAgICAgZGVzdFlbeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW3lfaWR4ICsgMV0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotCi0gICAgICBkZXN0VVt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgICgyICogZGVzdFVbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0Vlt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkxLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MiwgdTIsIHYyKSkgLyA0LCAwLCAyNTUpOwotCi0gICAgICB5X2lkeCArPSAyOwotICAgICAgdXZfaWR4Kys7Ci0gICAgfQotCi0gICAgLyogMy4zLiBOb3cgY29weSB0aGUgbGFzdCBwaXhlbCBpZiBvbmUgZXhpc3RzIGFuZCBibGVuZCBpdAotICAgICAqICAgICAgd2l0aCB0aGUgYmFja2dyb3VuZCBiZWNhdXNlIHdlIG9ubHkgZmlsbCBwYXJ0IG9mCi0gICAgICogICAgICB0aGUgbWFjcm8gcGl4ZWwuIEluIGNhc2UgdGhpcyBpcyB0aGUgbGFzdCBwaXhlbCBvZgotICAgICAqICAgICAgdGhlIGRlc3RpbmF0aW9uIHdlIHdpbGwgYSBsYXJnZXIgcGFydC4gKi8KLSAgICBpZiAoaiA9PSB3IC0gMSAmJiBqID09IGRlc3Rfd2lkdGggLSAxKSB7Ci0gICAgICB5MSA9IHNyY1s0ICogeV9pZHggKyAxXTsKLSAgICAgIHUxID0gc3JjWzQgKiB5X2lkeCArIDJdOwotICAgICAgdjEgPSBzcmNbNCAqIHlfaWR4ICsgM107Ci0KLSAgICAgIGRlc3RZW3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChkZXN0VVt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgICBkZXN0Vlt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChkZXN0Vlt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAxKSB7Ci0gICAgICB5MSA9IHNyY1s0ICogeV9pZHggKyAxXTsKLSAgICAgIHUxID0gc3JjWzQgKiB5X2lkeCArIDJdOwotICAgICAgdjEgPSBzcmNbNCAqIHlfaWR4ICsgM107Ci0KLSAgICAgIGRlc3RZW3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVt1dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgICgzICogZGVzdFVbdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSkgLyA0LCAwLAotICAgICAgICAgIDI1NSk7Ci0gICAgICBkZXN0Vlt1dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKDMgKiBkZXN0Vlt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDQsCi0gICAgICAgICAgMCwgMjU1KTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaSA9PSBoIC0gMSkgewotICAgIC8qIDMuMS4gSGFuZGxlIHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBwaXhlbCBpZiBpdCBkb2Vzbid0Ci0gICAgICogICAgICBzdGFydCBhdCB0aGUgbWFjcm8gcGl4ZWwgYm91bmRhcnksIGkuZS4gYmxlbmQgd2l0aAotICAgICAqICAgICAgdGhlIGJhY2tncm91bmQhICovCi0gICAgaWYgKGRlc3RfeCAlIDIgPT0gMSkgewotICAgICAgeTEgPSBzcmNbNCAqIDAgKyAxXTsKLSAgICAgIHUxID0gc3JjWzQgKiAwICsgMl07Ci0gICAgICB2MSA9IHNyY1s0ICogMCArIDNdOwotCi0gICAgICBkZXN0WVswXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVswXSA9Ci0gICAgICAgICAgQ0xBTVAgKCgzICogZGVzdFVbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gNCwgMCwKLSAgICAgICAgICAyNTUpOwotICAgICAgZGVzdFZbMF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RWWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkxLCB1MSwgdjEpKSAvIDQsIDAsCi0gICAgICAgICAgMjU1KTsKLQotICAgICAgaiA9IGRlc3RfeCArIDE7Ci0gICAgICB5X2lkeCA9IHV2X2lkeCA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGogPSBkZXN0X3g7Ci0gICAgICB5X2lkeCA9IHV2X2lkeCA9IDA7Ci0gICAgfQotCi0gICAgLyogMy4yLiBDb3B5IGFsbCBtYWNybyBwaXhlbHMgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgotICAgICAqICAgICAgYnV0IGJsZW5kIHdpdGggdGhlIGJhY2tncm91bmQgYmVjYXVzZSB3ZSdyZSBvbmx5IGZpbGxpbmcKLSAgICAgKiAgICAgIHRoZSB1cHBlciBwYXJ0IG9mIHRoZSBtYWNybyBwaXhlbHMuICovCi0gICAgZm9yICg7IGogPCB3IC0gMTsgaiArPSAyKSB7Ci0gICAgICB5MSA9IHNyY1s0ICogeV9pZHggKyAxXTsKLSAgICAgIHkyID0gc3JjWzQgKiB5X2lkeCArIDQgKyAxXTsKLQotICAgICAgdTEgPSBzcmNbNCAqIHlfaWR4ICsgMl07Ci0gICAgICB1MiA9IHNyY1s0ICogeV9pZHggKyA0ICsgMl07Ci0KLSAgICAgIHYxID0gc3JjWzQgKiB5X2lkeCArIDNdOwotICAgICAgdjIgPSBzcmNbNCAqIHlfaWR4ICsgNCArIDNdOwotCi0gICAgICBkZXN0WVt5X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbeV9pZHggKyAxXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUyLCB2MiksIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RVW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0VVt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MiwgdTIsIHYyKSkgLyA0LCAwLCAyNTUpOwotICAgICAgZGVzdFZbdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RWW3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLCB1MiwgdjIpKSAvIDQsIDAsIDI1NSk7Ci0KLSAgICAgIHlfaWR4ICs9IDI7Ci0gICAgICB1dl9pZHgrKzsKLSAgICB9Ci0KLSAgICAvKiAzLjMuIE5vdyBjb3B5IHRoZSBsYXN0IHBpeGVsIGlmIG9uZSBleGlzdHMgYW5kIGJsZW5kIGl0Ci0gICAgICogICAgICB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2Ugb25seSBmaWxsIHBhcnQgb2YKLSAgICAgKiAgICAgIHRoZSBtYWNybyBwaXhlbC4gSW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IHBpeGVsIG9mCi0gICAgICogICAgICB0aGUgZGVzdGluYXRpb24gd2Ugd2lsbCBhIGxhcmdlciBwYXJ0LiAqLwotICAgIGlmIChqID09IHcgLSAxICYmIGogPT0gZGVzdF93aWR0aCAtIDEpIHsKLSAgICAgIHkxID0gc3JjWzQgKiB5X2lkeCArIDFdOwotICAgICAgdTEgPSBzcmNbNCAqIHlfaWR4ICsgMl07Ci0gICAgICB2MSA9IHNyY1s0ICogeV9pZHggKyAzXTsKLQotICAgICAgZGVzdFlbeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKGRlc3RVW3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKGRlc3RWW3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICB9IGVsc2UgaWYgKGogPT0gdyAtIDEpIHsKLSAgICAgIHkxID0gc3JjWzQgKiB5X2lkeCArIDFdOwotICAgICAgdTEgPSBzcmNbNCAqIHlfaWR4ICsgMl07Ci0gICAgICB2MSA9IHNyY1s0ICogeV9pZHggKyAzXTsKLQotICAgICAgZGVzdFlbeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDMgKiBkZXN0VVt1dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDQsIDAsCi0gICAgICAgICAgMjU1KTsKLSAgICAgIGRlc3RWW3V2X2lkeF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RWW3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gNCwKLSAgICAgICAgICAwLCAyNTUpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF9wbGFuYXJfeXV2IChHc3RWaWRlb0JveEZpbGwgZmlsbF90eXBlLCBndWludCBiX2FscGhhLAotICAgIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgZ2Jvb2xlYW4gc2R0dikKLXsKLSAgZ3VpbnQ4IGVtcHR5X3BpeGVsWzNdOwotICBndWludDggKmRlc3RZLCAqZGVzdFUsICpkZXN0VjsKLSAgZ2ludCBzdHJpZGVZLCBzdHJpZGVVLCBzdHJpZGVWOwotICBnaW50IGhlaWdodFksIGhlaWdodFUsIGhlaWdodFY7Ci0gIGdpbnQgd2lkdGhZLCB3aWR0aFUsIHdpZHRoVjsKLQotICBpZiAoc2R0dikgewotICAgIGVtcHR5X3BpeGVsWzBdID0geXV2X3NkdHZfY29sb3JzX1lbZmlsbF90eXBlXTsKLSAgICBlbXB0eV9waXhlbFsxXSA9IHl1dl9zZHR2X2NvbG9yc19VW2ZpbGxfdHlwZV07Ci0gICAgZW1wdHlfcGl4ZWxbMl0gPSB5dXZfc2R0dl9jb2xvcnNfVltmaWxsX3R5cGVdOwotICB9IGVsc2UgewotICAgIGVtcHR5X3BpeGVsWzBdID0geXV2X2hkdHZfY29sb3JzX1lbZmlsbF90eXBlXTsKLSAgICBlbXB0eV9waXhlbFsxXSA9IHl1dl9oZHR2X2NvbG9yc19VW2ZpbGxfdHlwZV07Ci0gICAgZW1wdHlfcGl4ZWxbMl0gPSB5dXZfaGR0dl9jb2xvcnNfVltmaWxsX3R5cGVdOwotICB9Ci0KLSAgc3RyaWRlWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApOwotICBzdHJpZGVVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMSk7Ci0gIHN0cmlkZVYgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCAyKTsKLQotICBkZXN0WSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAwKTsKLSAgZGVzdFUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMSk7Ci0gIGRlc3RWID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDIpOwotCi0gIHdpZHRoWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMCk7Ci0gIHdpZHRoVSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMSk7Ci0gIHdpZHRoViA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMik7Ci0KLSAgaGVpZ2h0WSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDApOwotICBoZWlnaHRVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMSk7Ci0gIGhlaWdodFYgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGZyYW1lLCAyKTsKLQotICBpZiAoc3RyaWRlWSA9PSB3aWR0aFkpIHsKLSAgICBtZW1zZXQgKGRlc3RZLCBlbXB0eV9waXhlbFswXSwgc3RyaWRlWSAqIGhlaWdodFkpOwotICB9IGVsc2UgaWYgKGhlaWdodFkpIHsKLSAgICBmb3IgKDsgaGVpZ2h0WTsgLS1oZWlnaHRZKSB7Ci0gICAgICBtZW1zZXQgKGRlc3RZLCBlbXB0eV9waXhlbFswXSwgd2lkdGhZKTsKLSAgICAgIGRlc3RZICs9IHN0cmlkZVk7Ci0gICAgfQotICB9Ci0gIGlmIChzdHJpZGVVID09IHdpZHRoVSkgewotICAgIG1lbXNldCAoZGVzdFUsIGVtcHR5X3BpeGVsWzFdLCBzdHJpZGVVICogaGVpZ2h0VSk7Ci0gIH0gZWxzZSBpZiAoaGVpZ2h0VSkgewotICAgIGZvciAoOyBoZWlnaHRVOyAtLWhlaWdodFUpIHsKLSAgICAgIG1lbXNldCAoZGVzdFUsIGVtcHR5X3BpeGVsWzFdLCB3aWR0aFUpOwotICAgICAgZGVzdFUgKz0gc3RyaWRlVTsKLSAgICB9Ci0gIH0KLSAgaWYgKHN0cmlkZVYgPT0gd2lkdGhWKSB7Ci0gICAgbWVtc2V0IChkZXN0ViwgZW1wdHlfcGl4ZWxbMl0sIHN0cmlkZVYgKiBoZWlnaHRWKTsKLSAgfSBlbHNlIGlmIChoZWlnaHRWKSB7Ci0gICAgZm9yICg7IGhlaWdodFY7IC0taGVpZ2h0VikgewotICAgICAgbWVtc2V0IChkZXN0ViwgZW1wdHlfcGl4ZWxbMl0sIHdpZHRoVik7Ci0gICAgICBkZXN0ViArPSBzdHJpZGVWOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29weV95NDQ0X3k0NDQgKGd1aW50IGlfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0LAotICAgIGdib29sZWFuIGRlc3Rfc2R0diwgZ2ludCBkZXN0X3gsIGdpbnQgZGVzdF95LCBHc3RWaWRlb0ZyYW1lICogc3JjLAotICAgIGdib29sZWFuIHNyY19zZHR2LCBnaW50IHNyY194LCBnaW50IHNyY195LCBnaW50IHcsIGdpbnQgaCkKLXsKLSAgZ2ludCBpLCBqOwotICBndWludDggKmRlc3RZLCAqZGVzdFUsICpkZXN0VjsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNZLCAqc3JjVSwgKnNyY1Y7Ci0gIGdpbnQgZGVzdF9zdHJpZGVZLCBkZXN0X3N0cmlkZVUsIGRlc3Rfc3RyaWRlVjsKLSAgZ2ludCBzcmNfc3RyaWRlWSwgc3JjX3N0cmlkZVUsIHNyY19zdHJpZGVWOwotCi0gIGRlc3Rfc3RyaWRlWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdCwgMCk7Ci0gIGRlc3Rfc3RyaWRlVSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdCwgMSk7Ci0gIGRlc3Rfc3RyaWRlViA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdCwgMik7Ci0KLSAgc3JjX3N0cmlkZVkgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyYywgMCk7Ci0gIHNyY19zdHJpZGVVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmMsIDEpOwotICBzcmNfc3RyaWRlViA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjLCAyKTsKLQotICBkZXN0WSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3QsIDApOwotICBkZXN0VSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3QsIDEpOwotICBkZXN0ViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3QsIDIpOwotCi0gIHNyY1kgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChzcmMsIDApOwotICBzcmNVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoc3JjLCAxKTsKLSAgc3JjViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyYywgMik7Ci0KLSAgZGVzdFkgPSBkZXN0WSArIGRlc3RfeSAqIGRlc3Rfc3RyaWRlWSArIGRlc3RfeDsKLSAgZGVzdFUgPSBkZXN0VSArIGRlc3RfeSAqIGRlc3Rfc3RyaWRlVSArIGRlc3RfeDsKLSAgZGVzdFYgPSBkZXN0ViArIGRlc3RfeSAqIGRlc3Rfc3RyaWRlViArIGRlc3RfeDsKLQotICBzcmNZID0gc3JjWSArIHNyY195ICogc3JjX3N0cmlkZVkgKyBzcmNfeDsKLSAgc3JjVSA9IHNyY1UgKyBzcmNfeSAqIHNyY19zdHJpZGVVICsgc3JjX3g7Ci0gIHNyY1YgPSBzcmNWICsgc3JjX3kgKiBzcmNfc3RyaWRlViArIHNyY194OwotCi0gIGlmIChzcmNfc2R0diAhPSBkZXN0X3NkdHYpIHsKLSAgICBnaW50IG1hdHJpeFsxMl07Ci0gICAgZ2ludCB5LCB1LCB2OwotCi0gICAgbWVtY3B5IChtYXRyaXgsCi0gICAgICAgIGRlc3Rfc2R0diA/IGNvZ195Y2Jjcl9oZHR2X3RvX3ljYmNyX3NkdHZfbWF0cml4XzhiaXQgOgotICAgICAgICBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHc7IGorKykgewotICAgICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHNyY1lbal0sIHNyY1Vbal0sIHNyY1Zbal0pOwotICAgICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHNyY1lbal0sIHNyY1Vbal0sIHNyY1Zbal0pOwotICAgICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHNyY1lbal0sIHNyY1Vbal0sIHNyY1Zbal0pOwotCi0gICAgICAgIGRlc3RZW2pdID0geTsKLSAgICAgICAgZGVzdFVbal0gPSB1OwotICAgICAgICBkZXN0VltqXSA9IHY7Ci0gICAgICB9Ci0gICAgICBkZXN0WSArPSBkZXN0X3N0cmlkZVk7Ci0gICAgICBkZXN0VSArPSBkZXN0X3N0cmlkZVU7Ci0gICAgICBkZXN0ViArPSBkZXN0X3N0cmlkZVY7Ci0KLSAgICAgIHNyY1kgKz0gc3JjX3N0cmlkZVk7Ci0gICAgICBzcmNVICs9IHNyY19zdHJpZGVVOwotICAgICAgc3JjViArPSBzcmNfc3RyaWRlVjsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgICAgbWVtY3B5IChkZXN0WSwgc3JjWSwgdyk7Ci0gICAgICBtZW1jcHkgKGRlc3RVLCBzcmNVLCB3KTsKLSAgICAgIG1lbWNweSAoZGVzdFYsIHNyY1YsIHcpOwotCi0gICAgICBkZXN0WSArPSBkZXN0X3N0cmlkZVk7Ci0gICAgICBkZXN0VSArPSBkZXN0X3N0cmlkZVU7Ci0gICAgICBkZXN0ViArPSBkZXN0X3N0cmlkZVY7Ci0KLSAgICAgIHNyY1kgKz0gc3JjX3N0cmlkZVk7Ci0gICAgICBzcmNVICs9IHNyY19zdHJpZGVVOwotICAgICAgc3JjViArPSBzcmNfc3RyaWRlVjsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfeTQyYl95NDJiIChndWludCBpX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdCwKLSAgICBnYm9vbGVhbiBkZXN0X3NkdHYsIGdpbnQgZGVzdF94LCBnaW50IGRlc3RfeSwgR3N0VmlkZW9GcmFtZSAqIHNyYywKLSAgICBnYm9vbGVhbiBzcmNfc2R0diwgZ2ludCBzcmNfeCwgZ2ludCBzcmNfeSwgZ2ludCB3LCBnaW50IGgpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ3VpbnQ4ICpkZXN0WSwgKmRlc3RVLCAqZGVzdFY7Ci0gIGNvbnN0IGd1aW50OCAqc3JjWSwgKnNyY1UsICpzcmNWOwotICBnaW50IGRlc3Rfc3RyaWRlWSwgZGVzdF9zdHJpZGVVLCBkZXN0X3N0cmlkZVY7Ci0gIGdpbnQgc3JjX3N0cmlkZVksIHNyY19zdHJpZGVVLCBzcmNfc3RyaWRlVjsKLSAgZ2ludCBzcmNfeV9pZHgsIHNyY191dl9pZHg7Ci0gIGdpbnQgZGVzdF95X2lkeCwgZGVzdF91dl9pZHg7Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCB5MSwgeTI7Ci0gIGdpbnQgdTEsIHUyOwotICBnaW50IHYxLCB2MjsKLSAgZ2ludCBkZXN0X3dpZHRoOwotCi0gIGRlc3Rfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGRlc3QpOwotCi0gIGRlc3Rfc3RyaWRlWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdCwgMCk7Ci0gIGRlc3Rfc3RyaWRlVSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdCwgMSk7Ci0gIGRlc3Rfc3RyaWRlViA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdCwgMik7Ci0KLSAgc3JjX3N0cmlkZVkgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyYywgMCk7Ci0gIHNyY19zdHJpZGVVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmMsIDEpOwotICBzcmNfc3RyaWRlViA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjLCAyKTsKLQotICBkZXN0WSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3QsIDApOwotICBkZXN0VSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3QsIDEpOwotICBkZXN0ViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3QsIDIpOwotCi0gIHNyY1kgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChzcmMsIDApOwotICBzcmNVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoc3JjLCAxKTsKLSAgc3JjViA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyYywgMik7Ci0KLSAgZGVzdFkgPSBkZXN0WSArIGRlc3RfeSAqIGRlc3Rfc3RyaWRlWSArIGRlc3RfeDsKLSAgZGVzdFUgPSBkZXN0VSArIGRlc3RfeSAqIGRlc3Rfc3RyaWRlVSArIGRlc3RfeCAvIDI7Ci0gIGRlc3RWID0gZGVzdFYgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZVYgKyBkZXN0X3ggLyAyOwotCi0gIHNyY1kgPSBzcmNZICsgc3JjX3kgKiBzcmNfc3RyaWRlWSArIHNyY194OwotICBzcmNVID0gc3JjVSArIHNyY195ICogc3JjX3N0cmlkZVUgKyBzcmNfeCAvIDI7Ci0gIHNyY1YgPSBzcmNWICsgc3JjX3kgKiBzcmNfc3RyaWRlViArIHNyY194IC8gMjsKLQotICBoID0gZGVzdF95ICsgaDsKLSAgdyA9IGRlc3RfeCArIHc7Ci0KLSAgaWYgKHNyY19zZHR2ICE9IGRlc3Rfc2R0dikKLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgZGVzdF9zZHR2ID8gY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9zZHR2X3RvX3ljYmNyX2hkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0gIGVsc2UKLSAgICBtZW1jcHkgKG1hdHJpeCwgY29nX2lkZW50aXR5X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gIC8qIDEuIENvcHkgYWxsIG1hY3JvIHBpeGVsIHNjYW5saW5lcywgdGhlIGRlc3RpbmF0aW9uIHNjYW5saW5lCi0gICAqICAgIG5vdyBzdGFydHMgYXQgbWFjcm8gcGl4ZWwgYm91bmRhcnkuICovCi0gIGZvciAoaSA9IGRlc3RfeTsgaSA8IGg7IGkrKykgewotICAgIC8qIDEuMS4gSGFuZGxlIHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBwaXhlbCBpZiBpdCBkb2Vzbid0Ci0gICAgICogICAgICBzdGFydCBhdCB0aGUgbWFjcm8gcGl4ZWwgYm91bmRhcnksIGkuZS4gYmxlbmQgd2l0aAotICAgICAqICAgICAgdGhlIGJhY2tncm91bmQhICovCi0gICAgaWYgKGRlc3RfeCAlIDIgPT0gMSkgewotICAgICAgeTEgPSBzcmNZWzBdOwotICAgICAgdTEgPSBzcmNVWzBdOwotICAgICAgdjEgPSBzcmNWWzBdOwotCi0gICAgICBkZXN0WVswXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVswXSA9IENMQU1QICgKLSAgICAgICAgICAoZGVzdFVbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICAgIGRlc3RWWzBdID0gQ0xBTVAgKAotICAgICAgICAgIChkZXN0VlswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyAyLCAwLCAyNTUpOwotICAgICAgaiA9IGRlc3RfeCArIDE7Ci0gICAgICBzcmNfeV9pZHggPSBkZXN0X3lfaWR4ID0gZGVzdF91dl9pZHggPSAxOwotICAgICAgc3JjX3V2X2lkeCA9IChzcmNfeCAlIDIpICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgaiA9IGRlc3RfeDsKLSAgICAgIHNyY195X2lkeCA9IGRlc3RfeV9pZHggPSBkZXN0X3V2X2lkeCA9IDA7Ci0gICAgICBzcmNfdXZfaWR4ID0gKHNyY194ICUgMik7Ci0gICAgfQotCi0gICAgLyogMS4yLiBDb3B5IGFsbCBtYWNybyBwaXhlbHMgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbi4KLSAgICAgKiAgICAgIEFsbCBwaXhlbHMgbm93IHN0YXJ0IGF0IG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIG5vCi0gICAgICogICAgICBibGVuZGluZyB3aXRoIHRoZSBiYWNrZ3JvdW5kIGlzIG5lY2Vzc2FyeS4gKi8KLSAgICBmb3IgKDsgaiA8IHcgLSAxOyBqICs9IDIpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgeTIgPSBzcmNZW3NyY195X2lkeCArIDFdOwotCi0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHNyY191dl9pZHgrKzsKLSAgICAgIHUyID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MiA9IHNyY1Zbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgc3JjX3V2X2lkeCsrOwotCi0gICAgICBkZXN0WVtkZXN0X3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0WVtkZXN0X3lfaWR4ICsgMV0gPQotICAgICAgICAgIENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUyLCB2MiksIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkyLAotICAgICAgICAgICAgICAgICAgdTIsIHYyKSkgLyAyLCAwLCAyNTUpOwotICAgICAgZGVzdFZbZGVzdF91dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLCB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsCi0gICAgICAgICAgICAgICAgICB1MiwgdjIpKSAvIDIsIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RfeV9pZHggKz0gMjsKLSAgICAgIHNyY195X2lkeCArPSAyOwotICAgICAgZGVzdF91dl9pZHgrKzsKLSAgICB9Ci0KLSAgICAvKiAxLjMuIE5vdyBjb3B5IHRoZSBsYXN0IHBpeGVsIGlmIG9uZSBleGlzdHMgYW5kIGJsZW5kIGl0Ci0gICAgICogICAgICB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2Ugb25seSBmaWxsIHBhcnQgb2YKLSAgICAgKiAgICAgIHRoZSBtYWNybyBwaXhlbC4gSW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IHBpeGVsIG9mCi0gICAgICogICAgICB0aGUgZGVzdGluYXRpb24gd2Ugd2lsbCBhIGxhcmdlciBwYXJ0LiAqLwotICAgIGlmIChqID09IHcgLSAxICYmIGogPT0gZGVzdF93aWR0aCAtIDEpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgIH0gZWxzZSBpZiAoaiA9PSB3IC0gMSkgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyAyXTsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbZGVzdF91dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChkZXN0VVtkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKGRlc3RWW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICB9Ci0KLSAgICBkZXN0WSArPSBkZXN0X3N0cmlkZVk7Ci0gICAgZGVzdFUgKz0gZGVzdF9zdHJpZGVVOwotICAgIGRlc3RWICs9IGRlc3Rfc3RyaWRlVjsKLSAgICBzcmNZICs9IHNyY19zdHJpZGVZOwotCi0gICAgc3JjVSArPSBzcmNfc3RyaWRlVTsKLSAgICBzcmNWICs9IHNyY19zdHJpZGVWOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3k0MWJfeTQxYiAoZ3VpbnQgaV9hbHBoYSwgR3N0VmlkZW9GcmFtZSAqIGRlc3QsCi0gICAgZ2Jvb2xlYW4gZGVzdF9zZHR2LCBnaW50IGRlc3RfeCwgZ2ludCBkZXN0X3ksIEdzdFZpZGVvRnJhbWUgKiBzcmMsCi0gICAgZ2Jvb2xlYW4gc3JjX3NkdHYsIGdpbnQgc3JjX3gsIGdpbnQgc3JjX3ksIGdpbnQgdywgZ2ludCBoKQotewotICBnaW50IGksIGo7Ci0gIGd1aW50OCAqZGVzdFksICpkZXN0VSwgKmRlc3RWOwotICBjb25zdCBndWludDggKnNyY1ksICpzcmNVLCAqc3JjVjsKLSAgZ2ludCBkZXN0X3N0cmlkZVksIGRlc3Rfc3RyaWRlVSwgZGVzdF9zdHJpZGVWOwotICBnaW50IHNyY19zdHJpZGVZLCBzcmNfc3RyaWRlVSwgc3JjX3N0cmlkZVY7Ci0gIGdpbnQgc3JjX3lfaWR4LCBzcmNfdXZfaWR4OwotICBnaW50IGRlc3RfeV9pZHgsIGRlc3RfdXZfaWR4OwotICBnaW50IG1hdHJpeFsxMl07Ci0gIGdpbnQgeTEsIHkyLCB5MywgeTQ7Ci0gIGdpbnQgdTEsIHUyLCB1MywgdTQ7Ci0gIGdpbnQgdjEsIHYyLCB2MywgdjQ7Ci0gIGdpbnQgZGVzdF93aWR0aDsKLQotICBkZXN0X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChkZXN0KTsKLQotICBkZXN0X3N0cmlkZVkgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3QsIDApOwotICBkZXN0X3N0cmlkZVUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3QsIDEpOwotICBkZXN0X3N0cmlkZVYgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3QsIDIpOwotCi0gIHNyY19zdHJpZGVZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmMsIDApOwotICBzcmNfc3RyaWRlVSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjLCAxKTsKLSAgc3JjX3N0cmlkZVYgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyYywgMik7Ci0KLSAgZGVzdFkgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChkZXN0LCAwKTsKLSAgZGVzdFUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChkZXN0LCAxKTsKLSAgZGVzdFYgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChkZXN0LCAyKTsKLQotICBzcmNZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoc3JjLCAwKTsKLSAgc3JjVSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyYywgMSk7Ci0gIHNyY1YgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChzcmMsIDIpOwotCi0gIGRlc3RZID0gZGVzdFkgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZVkgKyBkZXN0X3g7Ci0gIGRlc3RVID0gZGVzdFUgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZVUgKyBkZXN0X3ggLyA0OwotICBkZXN0ViA9IGRlc3RWICsgZGVzdF95ICogZGVzdF9zdHJpZGVWICsgZGVzdF94IC8gNDsKLQotICBzcmNZID0gc3JjWSArIHNyY195ICogc3JjX3N0cmlkZVkgKyBzcmNfeDsKLSAgc3JjVSA9IHNyY1UgKyBzcmNfeSAqIHNyY19zdHJpZGVVICsgc3JjX3ggLyA0OwotICBzcmNWID0gc3JjViArIHNyY195ICogc3JjX3N0cmlkZVYgKyBzcmNfeCAvIDQ7Ci0KLSAgaCA9IGRlc3RfeSArIGg7Ci0gIHcgPSBkZXN0X3ggKyB3OwotCi0gIGlmIChzcmNfc2R0diAhPSBkZXN0X3NkdHYpCi0gICAgbWVtY3B5IChtYXRyaXgsCi0gICAgICAgIGRlc3Rfc2R0diA/IGNvZ195Y2Jjcl9oZHR2X3RvX3ljYmNyX3NkdHZfbWF0cml4XzhiaXQgOgotICAgICAgICBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotICBlbHNlCi0gICAgbWVtY3B5IChtYXRyaXgsIGNvZ19pZGVudGl0eV9tYXRyaXhfOGJpdCwgMTIgKiBzaXplb2YgKGdpbnQpKTsKLQotICAvKiAxLiBDb3B5IGFsbCBtYWNybyBwaXhlbCBzY2FubGluZXMsIHRoZSBkZXN0aW5hdGlvbiBzY2FubGluZQotICAgKiAgICBub3cgc3RhcnRzIGF0IG1hY3JvIHBpeGVsIGJvdW5kYXJ5LiAqLwotICBmb3IgKGkgPSBkZXN0X3k7IGkgPCBoOyBpKyspIHsKLSAgICAvKiAxLjEuIEhhbmRsZSB0aGUgZmlyc3QgZGVzdGluYXRpb24gcGl4ZWwgaWYgaXQgZG9lc24ndAotICAgICAqICAgICAgc3RhcnQgYXQgdGhlIG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIGJsZW5kIHdpdGgKLSAgICAgKiAgICAgIHRoZSBiYWNrZ3JvdW5kISAqLwotICAgIGlmIChkZXN0X3ggJSA0ID09IDEpIHsKLSAgICAgIHkxID0gc3JjWVswXTsKLSAgICAgIHkyID0gc3JjWVsxXTsKLSAgICAgIHkzID0gc3JjWVsyXTsKLSAgICAgIHUxID0gc3JjVVswXTsKLSAgICAgIHYxID0gc3JjVlswXTsKLQotICAgICAgZGVzdFlbMF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbMV0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbMl0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkzLCB1MSwgdjEpLCAwLCAyNTUpOwotCi0gICAgICBkZXN0VVswXSA9IENMQU1QICgKLSAgICAgICAgICAoZGVzdFVbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkyLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MywgdTEsIHYxKSkgLyA0LCAwLCAyNTUpOwotICAgICAgZGVzdFZbMF0gPQotICAgICAgICAgIENMQU1QICgoZGVzdFZbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MywgdTEsIHYxKSkgLyA0LCAwLCAyNTUpOwotCi0gICAgICBqID0gZGVzdF94ICsgMzsKLSAgICAgIHNyY195X2lkeCA9IGRlc3RfeV9pZHggPSAzOwotICAgICAgZGVzdF91dl9pZHggPSAxOwotICAgICAgc3JjX3V2X2lkeCA9IChzcmNfeCAlIDQpICsgMzsKLSAgICB9IGVsc2UgaWYgKGRlc3RfeCAlIDQgPT0gMikgewotICAgICAgeTEgPSBzcmNZWzBdOwotICAgICAgeTIgPSBzcmNZWzFdOwotICAgICAgdTEgPSBzcmNVWzBdOwotICAgICAgdjEgPSBzcmNWWzBdOwotCi0gICAgICBkZXN0WVswXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0WVsxXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUxLCB2MSksIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RVWzBdID0gQ0xBTVAgKAotICAgICAgICAgICgyICogZGVzdFVbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkyLCB1MSwgdjEpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0VlswXSA9Ci0gICAgICAgICAgQ0xBTVAgKCgyICogZGVzdFZbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLCB1MSwgdjEpKSAvIDQsIDAsIDI1NSk7Ci0KLSAgICAgIGogPSBkZXN0X3ggKyAyOwotICAgICAgc3JjX3lfaWR4ID0gZGVzdF95X2lkeCA9IDI7Ci0gICAgICBkZXN0X3V2X2lkeCA9IDE7Ci0gICAgICBzcmNfdXZfaWR4ID0gKHNyY194ICUgNCkgKyAyOwotICAgIH0gZWxzZSBpZiAoZGVzdF94ICUgNCA9PSAzKSB7Ci0gICAgICB5MSA9IHNyY1lbMF07Ci0gICAgICB1MSA9IHNyY1VbMF07Ci0gICAgICB2MSA9IHNyY1ZbMF07Ci0KLSAgICAgIGRlc3RZWzBdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLQotICAgICAgZGVzdFVbMF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDMgKiBkZXN0VVswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSkgLyA0LCAwLCAyNTUpOwotICAgICAgZGVzdFZbMF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDMgKiBkZXN0VlswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyA0LCAwLCAyNTUpOwotCi0gICAgICBqID0gZGVzdF94ICsgMTsKLSAgICAgIHNyY195X2lkeCA9IGRlc3RfeV9pZHggPSAxOwotICAgICAgZGVzdF91dl9pZHggPSAxOwotICAgICAgc3JjX3V2X2lkeCA9IChzcmNfeCAlIDQpICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgaiA9IGRlc3RfeDsKLSAgICAgIHNyY195X2lkeCA9IGRlc3RfeV9pZHggPSBkZXN0X3V2X2lkeCA9IDA7Ci0gICAgICBzcmNfdXZfaWR4ID0gKHNyY194ICUgNCk7Ci0gICAgfQotCi0gICAgLyogMS4yLiBDb3B5IGFsbCBtYWNybyBwaXhlbHMgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbi4KLSAgICAgKiAgICAgIEFsbCBwaXhlbHMgbm93IHN0YXJ0IGF0IG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIG5vCi0gICAgICogICAgICBibGVuZGluZyB3aXRoIHRoZSBiYWNrZ3JvdW5kIGlzIG5lY2Vzc2FyeS4gKi8KLSAgICBmb3IgKDsgaiA8IHcgLSAzOyBqICs9IDQpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgeTIgPSBzcmNZW3NyY195X2lkeCArIDFdOwotICAgICAgeTMgPSBzcmNZW3NyY195X2lkeCArIDJdOwotICAgICAgeTQgPSBzcmNZW3NyY195X2lkeCArIDNdOwotCi0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDRdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyA0XTsKLSAgICAgIHNyY191dl9pZHgrKzsKLSAgICAgIHUyID0gc3JjVVtzcmNfdXZfaWR4IC8gNF07Ci0gICAgICB2MiA9IHNyY1Zbc3JjX3V2X2lkeCAvIDRdOwotICAgICAgc3JjX3V2X2lkeCsrOwotICAgICAgdTMgPSBzcmNVW3NyY191dl9pZHggLyA0XTsKLSAgICAgIHYzID0gc3JjVltzcmNfdXZfaWR4IC8gNF07Ci0gICAgICBzcmNfdXZfaWR4Kys7Ci0gICAgICB1NCA9IHNyY1Vbc3JjX3V2X2lkeCAvIDRdOwotICAgICAgdjQgPSBzcmNWW3NyY191dl9pZHggLyA0XTsKLSAgICAgIHNyY191dl9pZHgrKzsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDFdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDJdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkzLCB1MywgdjMpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDNdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHk0LCB1NCwgdjQpLCAwLCAyNTUpOwotCi0gICAgICBkZXN0VVtkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MiwKLSAgICAgICAgICAgICAgICAgIHUyLCB2MikgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTMsIHUzLAotICAgICAgICAgICAgICAgICAgdjMpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHk0LCB1NCwgdjQpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPQotICAgICAgICAgIENMQU1QICgoQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkxLCB1MSwgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsCi0gICAgICAgICAgICAgICAgICAyLCB5MiwgdTIsIHYyKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MywgdTMsCi0gICAgICAgICAgICAgICAgICB2MykgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTQsIHU0LCB2NCkpIC8gNCwgMCwgMjU1KTsKLQotICAgICAgZGVzdF95X2lkeCArPSA0OwotICAgICAgc3JjX3lfaWR4ICs9IDQ7Ci0gICAgICBkZXN0X3V2X2lkeCsrOwotICAgIH0KLQotICAgIC8qIDEuMy4gTm93IGNvcHkgdGhlIGxhc3QgcGl4ZWwgaWYgb25lIGV4aXN0cyBhbmQgYmxlbmQgaXQKLSAgICAgKiAgICAgIHdpdGggdGhlIGJhY2tncm91bmQgYmVjYXVzZSB3ZSBvbmx5IGZpbGwgcGFydCBvZgotICAgICAqICAgICAgdGhlIG1hY3JvIHBpeGVsLiBJbiBjYXNlIHRoaXMgaXMgdGhlIGxhc3QgcGl4ZWwgb2YKLSAgICAgKiAgICAgIHRoZSBkZXN0aW5hdGlvbiB3ZSB3aWxsIGEgbGFyZ2VyIHBhcnQuICovCi0gICAgaWYgKGogPT0gdyAtIDEgJiYgaiA9PSBkZXN0X3dpZHRoIC0gMSkgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDRdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyA0XTsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbZGVzdF91dl9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAxKSB7Ci0gICAgICB5MSA9IHNyY1lbc3JjX3lfaWR4XTsKLSAgICAgIHUxID0gc3JjVVtzcmNfdXZfaWR4IC8gNF07Ci0gICAgICB2MSA9IHNyY1Zbc3JjX3V2X2lkeCAvIDRdOwotCi0gICAgICBkZXN0WVtkZXN0X3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVtkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKGRlc3RVW2Rlc3RfdXZfaWR4XSArIDMgKiBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKGRlc3RWW2Rlc3RfdXZfaWR4XSArIDMgKiBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDQsIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAyICYmIGogPT0gZGVzdF93aWR0aCAtIDIpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgeTIgPSBzcmNZW3NyY195X2lkeCArIDFdOwotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyA0XTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gNF07Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHggKyAxXSA9Ci0gICAgICAgICAgQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MiwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgIH0gZWxzZSBpZiAoaiA9PSB3IC0gMikgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB5MiA9IHNyY1lbc3JjX3lfaWR4ICsgMV07Ci0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDRdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyA0XTsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDFdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbZGVzdF91dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKGRlc3RVW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9Ci0gICAgICAgICAgQ0xBTVAgKChkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAzICYmIGogPT0gZGVzdF93aWR0aCAtIDMpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgeTIgPSBzcmNZW3NyY195X2lkeCArIDFdOwotICAgICAgeTMgPSBzcmNZW3NyY195X2lkeCArIDJdOwotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyA0XTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gNF07Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHggKyAxXSA9Ci0gICAgICAgICAgQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MiwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHggKyAyXSA9Ci0gICAgICAgICAgQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MywgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgIH0gZWxzZSBpZiAoaiA9PSB3IC0gMykgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB5MiA9IHNyY1lbc3JjX3lfaWR4ICsgMV07Ci0gICAgICB5MyA9IHNyY1lbc3JjX3lfaWR4ICsgMl07Ci0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDRdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyA0XTsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDFdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDJdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkzLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbZGVzdF91dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKDMgKiBkZXN0VVtkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RWW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkpIC8gNCwgMCwgMjU1KTsKLSAgICB9Ci0KLSAgICBkZXN0WSArPSBkZXN0X3N0cmlkZVk7Ci0gICAgZGVzdFUgKz0gZGVzdF9zdHJpZGVVOwotICAgIGRlc3RWICs9IGRlc3Rfc3RyaWRlVjsKLSAgICBzcmNZICs9IHNyY19zdHJpZGVZOwotICAgIHNyY1UgKz0gc3JjX3N0cmlkZVU7Ci0gICAgc3JjViArPSBzcmNfc3RyaWRlVjsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY29weV9pNDIwX2k0MjAgKGd1aW50IGlfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0LAotICAgIGdib29sZWFuIGRlc3Rfc2R0diwgZ2ludCBkZXN0X3gsIGdpbnQgZGVzdF95LCBHc3RWaWRlb0ZyYW1lICogc3JjLAotICAgIGdib29sZWFuIHNyY19zZHR2LCBnaW50IHNyY194LCBnaW50IHNyY195LCBnaW50IHcsIGdpbnQgaCkKLXsKLSAgZ2ludCBpLCBqOwotICBndWludDggKmRlc3RZLCAqZGVzdFUsICpkZXN0VjsKLSAgY29uc3QgZ3VpbnQ4ICpzcmNZLCAqc3JjVSwgKnNyY1Y7Ci0gIGd1aW50OCAqZGVzdFkyOwotICBjb25zdCBndWludDggKnNyY1kyLCAqc3JjVTIsICpzcmNWMjsKLSAgZ2ludCBkZXN0X3N0cmlkZVksIGRlc3Rfc3RyaWRlVSwgZGVzdF9zdHJpZGVWOwotICBnaW50IHNyY19zdHJpZGVZLCBzcmNfc3RyaWRlVSwgc3JjX3N0cmlkZVY7Ci0gIGdpbnQgc3JjX3lfaWR4LCBzcmNfdXZfaWR4OwotICBnaW50IGRlc3RfeV9pZHgsIGRlc3RfdXZfaWR4OwotICBnaW50IG1hdHJpeFsxMl07Ci0gIGdpbnQgeTEsIHkyLCB5MywgeTQ7Ci0gIGdpbnQgdTEsIHUyLCB1MywgdTQ7Ci0gIGdpbnQgdjEsIHYyLCB2MywgdjQ7Ci0gIGdpbnQgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQ7Ci0KLSAgZGVzdF93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZGVzdCk7Ci0gIGRlc3RfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZGVzdCk7Ci0KLSAgZGVzdF9zdHJpZGVZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0LCAwKTsKLSAgZGVzdF9zdHJpZGVVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0LCAxKTsKLSAgZGVzdF9zdHJpZGVWID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0LCAyKTsKLQotICBzcmNfc3RyaWRlWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjLCAwKTsKLSAgc3JjX3N0cmlkZVUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyYywgMSk7Ci0gIHNyY19zdHJpZGVWID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmMsIDIpOwotCi0gIGRlc3RZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZGVzdCwgMCk7Ci0gIGRlc3RVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZGVzdCwgMSk7Ci0gIGRlc3RWID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZGVzdCwgMik7Ci0KLSAgc3JjWSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyYywgMCk7Ci0gIHNyY1UgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChzcmMsIDEpOwotICBzcmNWID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoc3JjLCAyKTsKLQotICBkZXN0WSA9IGRlc3RZICsgZGVzdF95ICogZGVzdF9zdHJpZGVZICsgZGVzdF94OwotICBkZXN0VSA9IGRlc3RVICsgKGRlc3RfeSAvIDIpICogZGVzdF9zdHJpZGVVICsgZGVzdF94IC8gMjsKLSAgZGVzdFYgPSBkZXN0ViArIChkZXN0X3kgLyAyKSAqIGRlc3Rfc3RyaWRlViArIGRlc3RfeCAvIDI7Ci0KLSAgc3JjWSA9IHNyY1kgKyBzcmNfeSAqIHNyY19zdHJpZGVZICsgc3JjX3g7Ci0gIHNyY1UgPSBzcmNVICsgKHNyY195IC8gMikgKiBzcmNfc3RyaWRlVSArIHNyY194IC8gMjsKLSAgc3JjViA9IHNyY1YgKyAoc3JjX3kgLyAyKSAqIHNyY19zdHJpZGVWICsgc3JjX3ggLyAyOwotCi0gIGRlc3RZMiA9IGRlc3RZICsgZGVzdF9zdHJpZGVZOwotICBzcmNZMiA9IHNyY1kgKyBzcmNfc3RyaWRlWTsKLQotICBoID0gZGVzdF95ICsgaDsKLSAgdyA9IGRlc3RfeCArIHc7Ci0KLSAgaWYgKHNyY19zZHR2ICE9IGRlc3Rfc2R0dikKLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgZGVzdF9zZHR2ID8gY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9zZHR2X3RvX3ljYmNyX2hkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0gIGVsc2UKLSAgICBtZW1jcHkgKG1hdHJpeCwgY29nX2lkZW50aXR5X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gIC8qIDEuIEhhbmRsZSB0aGUgZmlyc3QgZGVzdGluYXRpb24gc2NhbmxpbmUgc3BlY2lhbGx5IGlmIGl0Ci0gICAqICAgIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIGJsZW5kCi0gICAqICAgIHdpdGggdGhlIGJhY2tncm91bmQhICovCi0gIGlmIChkZXN0X3kgJSAyID09IDEpIHsKLSAgICAvKiAxLjEuIEhhbmRsZSB0aGUgZmlyc3QgZGVzdGluYXRpb24gcGl4ZWwgaWYgaXQgZG9lc24ndAotICAgICAqICAgICAgc3RhcnQgYXQgdGhlIG1hY3JvIHBpeGVsIGJvdW5kYXJ5LCBpLmUuIGJsZW5kIHdpdGgKLSAgICAgKiAgICAgIHRoZSBiYWNrZ3JvdW5kISAqLwotICAgIGlmIChkZXN0X3ggJSAyID09IDEpIHsKLSAgICAgIHkxID0gc3JjWVswXTsKLSAgICAgIHUxID0gc3JjVVswXTsKLSAgICAgIHYxID0gc3JjVlswXTsKLQotICAgICAgZGVzdFlbMF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbMF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RVWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDQsIDAsCi0gICAgICAgICAgMjU1KTsKLSAgICAgIGRlc3RWWzBdID0KLSAgICAgICAgICBDTEFNUCAoKDMgKiBkZXN0VlswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyA0LCAwLAotICAgICAgICAgIDI1NSk7Ci0KLSAgICAgIGogPSBkZXN0X3ggKyAxOwotICAgICAgc3JjX3lfaWR4ID0gZGVzdF95X2lkeCA9IGRlc3RfdXZfaWR4ID0gMTsKLSAgICAgIHNyY191dl9pZHggPSAoc3JjX3ggJSAyKSArIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGogPSBkZXN0X3g7Ci0gICAgICBzcmNfeV9pZHggPSBkZXN0X3lfaWR4ID0gZGVzdF91dl9pZHggPSAwOwotICAgICAgc3JjX3V2X2lkeCA9IChzcmNfeCAlIDIpOwotICAgIH0KLQotICAgIC8qIDEuMi4gQ29weSBhbGwgbWFjcm8gcGl4ZWxzIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KLSAgICAgKiAgICAgIGJ1dCBibGVuZCB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2UncmUgb25seSBmaWxsaW5nCi0gICAgICogICAgICB0aGUgbG93ZXIgcGFydCBvZiB0aGUgbWFjcm8gcGl4ZWxzLiAqLwotICAgIGZvciAoOyBqIDwgdyAtIDE7IGogKz0gMikgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB5MiA9IHNyY1lbc3JjX3lfaWR4ICsgMV07Ci0KLSAgICAgIHUxID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MSA9IHNyY1Zbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgc3JjX3V2X2lkeCsrOwotICAgICAgdTIgPSBzcmNVW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYyID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0gICAgICBzcmNfdXZfaWR4Kys7Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHggKyAxXSA9Ci0gICAgICAgICAgQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MiwgdTIsIHYyKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9Ci0gICAgICAgICAgQ0xBTVAgKCgyICogZGVzdFVbZGVzdF91dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MiwgdTIsIHYyKSkgLyA0LCAwLCAyNTUpOwotICAgICAgZGVzdFZbZGVzdF91dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKDIgKiBkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLCB1MiwgdjIpKSAvIDQsIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RfeV9pZHggKz0gMjsKLSAgICAgIHNyY195X2lkeCArPSAyOwotICAgICAgZGVzdF91dl9pZHgrKzsKLSAgICB9Ci0KLSAgICAvKiAxLjMuIE5vdyBjb3B5IHRoZSBsYXN0IHBpeGVsIGlmIG9uZSBleGlzdHMgYW5kIGJsZW5kIGl0Ci0gICAgICogICAgICB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2Ugb25seSBmaWxsIHBhcnQgb2YKLSAgICAgKiAgICAgIHRoZSBtYWNybyBwaXhlbC4gSW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IHBpeGVsIG9mCi0gICAgICogICAgICB0aGUgZGVzdGluYXRpb24gd2Ugd2lsbCBhIGxhcmdlciBwYXJ0LiAqLwotICAgIGlmIChqID09IHcgLSAxICYmIGogPT0gZGVzdF93aWR0aCAtIDEpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoZGVzdFVbZGVzdF91dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDIsIDAsCi0gICAgICAgICAgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9Ci0gICAgICAgICAgQ0xBTVAgKChkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAxKSB7Ci0gICAgICB5MSA9IHNyY1lbc3JjX3lfaWR4XTsKLSAgICAgIHUxID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MSA9IHNyY1Zbc3JjX3V2X2lkeCAvIDJdOwotCi0gICAgICBkZXN0WVtkZXN0X3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVtkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDMgKiBkZXN0VVtkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gNCwKLSAgICAgICAgICAwLCAyNTUpOwotICAgICAgZGVzdFZbZGVzdF91dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKDMgKiBkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDQsIDAsIDI1NSk7Ci0gICAgfQotCi0gICAgZGVzdFkgKz0gZGVzdF9zdHJpZGVZOwotICAgIGRlc3RZMiArPSBkZXN0X3N0cmlkZVk7Ci0gICAgZGVzdFUgKz0gZGVzdF9zdHJpZGVVOwotICAgIGRlc3RWICs9IGRlc3Rfc3RyaWRlVjsKLSAgICBzcmNZICs9IHNyY19zdHJpZGVZOwotICAgIHNyY1kyICs9IHNyY19zdHJpZGVZOwotICAgIHNyY195Kys7Ci0gICAgaWYgKHNyY195ICUgMiA9PSAwKSB7Ci0gICAgICBzcmNVICs9IHNyY19zdHJpZGVVOwotICAgICAgc3JjViArPSBzcmNfc3RyaWRlVjsKLSAgICB9Ci0gICAgaSA9IGRlc3RfeSArIDE7Ci0gIH0gZWxzZSB7Ci0gICAgaSA9IGRlc3RfeTsKLSAgfQotCi0gIC8qIDIuIENvcHkgYWxsIG1hY3JvIHBpeGVsIHNjYW5saW5lcywgdGhlIGRlc3RpbmF0aW9uIHNjYW5saW5lCi0gICAqICAgIG5vdyBzdGFydHMgYXQgbWFjcm8gcGl4ZWwgYm91bmRhcnkuICovCi0gIGZvciAoOyBpIDwgaCAtIDE7IGkgKz0gMikgewotICAgIC8qIDIuMS4gSGFuZGxlIHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBwaXhlbCBpZiBpdCBkb2Vzbid0Ci0gICAgICogICAgICBzdGFydCBhdCB0aGUgbWFjcm8gcGl4ZWwgYm91bmRhcnksIGkuZS4gYmxlbmQgd2l0aAotICAgICAqICAgICAgdGhlIGJhY2tncm91bmQhICovCi0KLSAgICBzcmNVMiA9IHNyY1U7Ci0gICAgc3JjVjIgPSBzcmNWOwotICAgIGlmIChzcmNfeSAlIDIgPT0gMSkgewotICAgICAgc3JjVTIgKz0gc3JjX3N0cmlkZVU7Ci0gICAgICBzcmNWMiArPSBzcmNfc3RyaWRlVjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdF94ICUgMiA9PSAxKSB7Ci0gICAgICB5MSA9IHNyY1lbMF07Ci0gICAgICB5MiA9IHNyY1kyWzBdOwotICAgICAgdTEgPSBzcmNVWzBdOwotICAgICAgdjEgPSBzcmNWWzBdOwotICAgICAgdTIgPSBzcmNVMlswXTsKLSAgICAgIHYyID0gc3JjVjJbMF07Ci0KLSAgICAgIGRlc3RZWzBdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZMlswXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUyLCB2MiksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVswXSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RVWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwKLSAgICAgICAgICAgICAgICAgIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MiwgdTIsIHYyKSkgLyA0LCAwLCAyNTUpOwotICAgICAgZGVzdFZbMF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0VlswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGogPSBkZXN0X3ggKyAxOwotICAgICAgc3JjX3lfaWR4ID0gZGVzdF95X2lkeCA9IGRlc3RfdXZfaWR4ID0gMTsKLSAgICAgIHNyY191dl9pZHggPSAoc3JjX3ggJSAyKSArIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGogPSBkZXN0X3g7Ci0gICAgICBzcmNfeV9pZHggPSBkZXN0X3lfaWR4ID0gZGVzdF91dl9pZHggPSAwOwotICAgICAgc3JjX3V2X2lkeCA9IChzcmNfeCAlIDIpOwotICAgIH0KLQotICAgIC8qIDIuMi4gQ29weSBhbGwgbWFjcm8gcGl4ZWxzIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24uCi0gICAgICogICAgICBBbGwgcGl4ZWxzIG5vdyBzdGFydCBhdCBtYWNybyBwaXhlbCBib3VuZGFyeSwgaS5lLiBubwotICAgICAqICAgICAgYmxlbmRpbmcgd2l0aCB0aGUgYmFja2dyb3VuZCBpcyBuZWNlc3NhcnkuICovCi0gICAgZm9yICg7IGogPCB3IC0gMTsgaiArPSAyKSB7Ci0gICAgICB5MSA9IHNyY1lbc3JjX3lfaWR4XTsKLSAgICAgIHkyID0gc3JjWVtzcmNfeV9pZHggKyAxXTsKLSAgICAgIHkzID0gc3JjWTJbc3JjX3lfaWR4XTsKLSAgICAgIHk0ID0gc3JjWTJbc3JjX3lfaWR4ICsgMV07Ci0KLSAgICAgIHUxID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB1MyA9IHNyY1UyW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MyA9IHNyY1YyW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHNyY191dl9pZHgrKzsKLSAgICAgIHUyID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB1NCA9IHNyY1UyW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYyID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2NCA9IHNyY1YyW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHNyY191dl9pZHgrKzsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDFdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotICAgICAgZGVzdFkyW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MywgdTMsIHYzKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RZMltkZXN0X3lfaWR4ICsgMV0gPQotICAgICAgICAgIENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTQsIHU0LCB2NCksIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkyLAotICAgICAgICAgICAgICAgICAgdTIsIHYyKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MywgdTMsCi0gICAgICAgICAgICAgICAgICB2MykgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTQsIHU0LCB2NCkpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkxLCB1MSwgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLAotICAgICAgICAgICAgICAgICAgdTIsIHYyKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MywgdTMsCi0gICAgICAgICAgICAgICAgICB2MykgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTQsIHU0LCB2NCkpIC8gNCwgMCwgMjU1KTsKLQotICAgICAgZGVzdF95X2lkeCArPSAyOwotICAgICAgc3JjX3lfaWR4ICs9IDI7Ci0gICAgICBkZXN0X3V2X2lkeCsrOwotICAgIH0KLQotICAgIC8qIDIuMy4gTm93IGNvcHkgdGhlIGxhc3QgcGl4ZWwgaWYgb25lIGV4aXN0cyBhbmQgYmxlbmQgaXQKLSAgICAgKiAgICAgIHdpdGggdGhlIGJhY2tncm91bmQgYmVjYXVzZSB3ZSBvbmx5IGZpbGwgcGFydCBvZgotICAgICAqICAgICAgdGhlIG1hY3JvIHBpeGVsLiBJbiBjYXNlIHRoaXMgaXMgdGhlIGxhc3QgcGl4ZWwgb2YKLSAgICAgKiAgICAgIHRoZSBkZXN0aW5hdGlvbiB3ZSB3aWxsIGEgbGFyZ2VyIHBhcnQuICovCi0gICAgaWYgKGogPT0gdyAtIDEgJiYgaiA9PSBkZXN0X3dpZHRoIC0gMSkgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB5MiA9IHNyY1kyW3NyY195X2lkeF07Ci0KLSAgICAgIHUxID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB1MiA9IHNyY1UyW3NyY191dl9pZHggLyAyXTsKLQotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYyID0gc3JjVjJbc3JjX3V2X2lkeCAvIDJdOwotCi0gICAgICBkZXN0WVtkZXN0X3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0WTJbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbZGVzdF91dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsCi0gICAgICAgICAgICAgICAgICB1MiwgdjIpKSAvIDIsIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MiwKLSAgICAgICAgICAgICAgICAgIHUyLCB2MikpIC8gMiwgMCwgMjU1KTsKLSAgICB9IGVsc2UgaWYgKGogPT0gdyAtIDEpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgeTIgPSBzcmNZMltzcmNfeV9pZHhdOwotCi0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgdTIgPSBzcmNVMltzcmNfdXZfaWR4IC8gMl07Ci0KLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MiA9IHNyY1YyW3NyY191dl9pZHggLyAyXTsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFkyW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MiwgdTIsIHYyKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RVW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RWW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICB9Ci0KLSAgICBkZXN0WSArPSAyICogZGVzdF9zdHJpZGVZOwotICAgIGRlc3RZMiArPSAyICogZGVzdF9zdHJpZGVZOwotICAgIGRlc3RVICs9IGRlc3Rfc3RyaWRlVTsKLSAgICBkZXN0ViArPSBkZXN0X3N0cmlkZVY7Ci0gICAgc3JjWSArPSAyICogc3JjX3N0cmlkZVk7Ci0gICAgc3JjWTIgKz0gMiAqIHNyY19zdHJpZGVZOwotCi0gICAgc3JjX3kgKz0gMjsKLSAgICBzcmNVICs9IHNyY19zdHJpZGVVOwotICAgIHNyY1YgKz0gc3JjX3N0cmlkZVY7Ci0gIH0KLQotICAvKiAzLiBIYW5kbGUgdGhlIGxhc3Qgc2NhbmxpbmUgaWYgb25lIGV4aXN0cy4gVGhpcyBhZ2FpbgotICAgKiAgICBkb2Vzbid0IHN0YXJ0IGF0IG1hY3JvIHBpeGVsIGJvdW5kYXJ5IGJ1dCBzaG91bGQKLSAgICogICAgb25seSBmaWxsIHRoZSB1cHBlciBwYXJ0IG9mIHRoZSBtYWNybyBwaXhlbHMuICovCi0gIGlmIChpID09IGggLSAxICYmIGkgPT0gZGVzdF9oZWlnaHQgLSAxKSB7Ci0gICAgLyogMy4xLiBIYW5kbGUgdGhlIGZpcnN0IGRlc3RpbmF0aW9uIHBpeGVsIGlmIGl0IGRvZXNuJ3QKLSAgICAgKiAgICAgIHN0YXJ0IGF0IHRoZSBtYWNybyBwaXhlbCBib3VuZGFyeSwgaS5lLiBibGVuZCB3aXRoCi0gICAgICogICAgICB0aGUgYmFja2dyb3VuZCEgKi8KLSAgICBpZiAoZGVzdF94ICUgMiA9PSAxKSB7Ci0gICAgICB5MSA9IHNyY1lbMF07Ci0gICAgICB1MSA9IHNyY1VbMF07Ci0gICAgICB2MSA9IHNyY1ZbMF07Ci0KLSAgICAgIGRlc3RZWzBdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVWzBdID0KLSAgICAgICAgICBDTEFNUCAoKGRlc3RVWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgICBkZXN0VlswXSA9Ci0gICAgICAgICAgQ0xBTVAgKChkZXN0VlswXSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsIHYxKSkgLyAyLCAwLCAyNTUpOwotCi0gICAgICBqID0gZGVzdF94ICsgMTsKLSAgICAgIHNyY195X2lkeCA9IGRlc3RfeV9pZHggPSBkZXN0X3V2X2lkeCA9IDE7Ci0gICAgICBzcmNfdXZfaWR4ID0gKHNyY194ICUgMikgKyAxOwotICAgIH0gZWxzZSB7Ci0gICAgICBqID0gZGVzdF94OwotICAgICAgc3JjX3lfaWR4ID0gZGVzdF95X2lkeCA9IGRlc3RfdXZfaWR4ID0gMDsKLSAgICAgIHNyY191dl9pZHggPSAoc3JjX3ggJSAyKTsKLSAgICB9Ci0KLSAgICAvKiAzLjIuIENvcHkgYWxsIG1hY3JvIHBpeGVscyBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uCi0gICAgICogICAgICBidXQgYmxlbmQgd2l0aCB0aGUgYmFja2dyb3VuZCBiZWNhdXNlIHdlJ3JlIG9ubHkgZmlsbGluZwotICAgICAqICAgICAgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIG1hY3JvIHBpeGVscy4gKi8KLSAgICBmb3IgKDsgaiA8IHcgLSAxOyBqICs9IDIpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgeTIgPSBzcmNZW3NyY195X2lkeCArIDFdOwotCi0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHNyY191dl9pZHgrKzsKLSAgICAgIHUyID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MiA9IHNyY1Zbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgc3JjX3V2X2lkeCsrOwotCi0gICAgICBkZXN0WVtkZXN0X3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0WVtkZXN0X3lfaWR4ICsgMV0gPQotICAgICAgICAgIENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTIsIHUyLCB2MiksIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RVW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMiAqIGRlc3RWW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkgKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2MikpIC8gNCwgMCwgMjU1KTsKLQotICAgICAgZGVzdF95X2lkeCArPSAyOwotICAgICAgc3JjX3lfaWR4ICs9IDI7Ci0gICAgICBkZXN0X3V2X2lkeCsrOwotICAgIH0KLQotICAgIC8qIDMuMy4gTm93IGNvcHkgdGhlIGxhc3QgcGl4ZWwgaWYgb25lIGV4aXN0cyBhbmQgYmxlbmQgaXQKLSAgICAgKiAgICAgIHdpdGggdGhlIGJhY2tncm91bmQgYmVjYXVzZSB3ZSBvbmx5IGZpbGwgcGFydCBvZgotICAgICAqICAgICAgdGhlIG1hY3JvIHBpeGVsLiBJbiBjYXNlIHRoaXMgaXMgdGhlIGxhc3QgcGl4ZWwgb2YKLSAgICAgKiAgICAgIHRoZSBkZXN0aW5hdGlvbiB3ZSB3aWxsIGEgbGFyZ2VyIHBhcnQuICovCi0gICAgaWYgKGogPT0gdyAtIDEgJiYgaiA9PSBkZXN0X3dpZHRoIC0gMSkgewotICAgICAgeTEgPSBzcmNZW3NyY195X2lkeF07Ci0gICAgICB1MSA9IHNyY1Vbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgdjEgPSBzcmNWW3NyY191dl9pZHggLyAyXTsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFVbZGVzdF91dl9pZHhdID0gQ0xBTVAgKAotICAgICAgICAgIChkZXN0VVtkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gMiwgMCwKLSAgICAgICAgICAyNTUpOwotICAgICAgZGVzdFZbZGVzdF91dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKGRlc3RWW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkpIC8gMiwgMCwgMjU1KTsKLSAgICB9IGVsc2UgaWYgKGogPT0gdyAtIDEpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoMyAqIGRlc3RVW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsIHYxKSkgLyA0LAotICAgICAgICAgIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RWW2Rlc3RfdXZfaWR4XSArIEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MSwgdTEsCi0gICAgICAgICAgICAgICAgICB2MSkpIC8gNCwgMCwgMjU1KTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoaSA9PSBoIC0gMSkgewotICAgIC8qIDMuMS4gSGFuZGxlIHRoZSBmaXJzdCBkZXN0aW5hdGlvbiBwaXhlbCBpZiBpdCBkb2Vzbid0Ci0gICAgICogICAgICBzdGFydCBhdCB0aGUgbWFjcm8gcGl4ZWwgYm91bmRhcnksIGkuZS4gYmxlbmQgd2l0aAotICAgICAqICAgICAgdGhlIGJhY2tncm91bmQhICovCi0gICAgaWYgKGRlc3RfeCAlIDIgPT0gMSkgewotICAgICAgeTEgPSBzcmNZWzBdOwotICAgICAgdTEgPSBzcmNVWzBdOwotICAgICAgdjEgPSBzcmNWWzBdOwotCi0gICAgICBkZXN0WVswXSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVswXSA9Ci0gICAgICAgICAgQ0xBTVAgKCgzICogZGVzdFVbMF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gNCwgMCwKLSAgICAgICAgICAyNTUpOwotICAgICAgZGVzdFZbMF0gPQotICAgICAgICAgIENMQU1QICgoMyAqIGRlc3RWWzBdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkxLCB1MSwgdjEpKSAvIDQsIDAsCi0gICAgICAgICAgMjU1KTsKLQotICAgICAgaiA9IGRlc3RfeCArIDE7Ci0gICAgICBzcmNfeV9pZHggPSBkZXN0X3lfaWR4ID0gZGVzdF91dl9pZHggPSAxOwotICAgICAgc3JjX3V2X2lkeCA9IChzcmNfeCAlIDIpICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgaiA9IGRlc3RfeDsKLSAgICAgIHNyY195X2lkeCA9IGRlc3RfeV9pZHggPSBkZXN0X3V2X2lkeCA9IDA7Ci0gICAgICBzcmNfdXZfaWR4ID0gKHNyY194ICUgMik7Ci0gICAgfQotCi0gICAgLyogMy4yLiBDb3B5IGFsbCBtYWNybyBwaXhlbHMgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgotICAgICAqICAgICAgYnV0IGJsZW5kIHdpdGggdGhlIGJhY2tncm91bmQgYmVjYXVzZSB3ZSdyZSBvbmx5IGZpbGxpbmcKLSAgICAgKiAgICAgIHRoZSB1cHBlciBwYXJ0IG9mIHRoZSBtYWNybyBwaXhlbHMuICovCi0gICAgZm9yICg7IGogPCB3IC0gMTsgaiArPSAyKSB7Ci0gICAgICB5MSA9IHNyY1lbc3JjX3lfaWR4XTsKLSAgICAgIHkyID0gc3JjWVtzcmNfeV9pZHggKyAxXTsKLQotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0gICAgICBzcmNfdXZfaWR4Kys7Ci0gICAgICB1MiA9IHNyY1Vbc3JjX3V2X2lkeCAvIDJdOwotICAgICAgdjIgPSBzcmNWW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHNyY191dl9pZHgrKzsKLQotICAgICAgZGVzdFlbZGVzdF95X2lkeF0gPSBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MSwgdjEpLCAwLCAyNTUpOwotICAgICAgZGVzdFlbZGVzdF95X2lkeCArIDFdID0KLSAgICAgICAgICBDTEFNUCAoQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkyLCB1MiwgdjIpLCAwLCAyNTUpOwotCi0gICAgICBkZXN0VVtkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0VVtkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkyLCB1MiwgdjIpKSAvIDQsIDAsIDI1NSk7Ci0gICAgICBkZXN0VltkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDIgKiBkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHkyLCB1MiwgdjIpKSAvIDQsIDAsIDI1NSk7Ci0KLSAgICAgIGRlc3RfeV9pZHggKz0gMjsKLSAgICAgIHNyY195X2lkeCArPSAyOwotICAgICAgZGVzdF91dl9pZHgrKzsKLSAgICB9Ci0KLSAgICAvKiAzLjMuIE5vdyBjb3B5IHRoZSBsYXN0IHBpeGVsIGlmIG9uZSBleGlzdHMgYW5kIGJsZW5kIGl0Ci0gICAgICogICAgICB3aXRoIHRoZSBiYWNrZ3JvdW5kIGJlY2F1c2Ugd2Ugb25seSBmaWxsIHBhcnQgb2YKLSAgICAgKiAgICAgIHRoZSBtYWNybyBwaXhlbC4gSW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IHBpeGVsIG9mCi0gICAgICogICAgICB0aGUgZGVzdGluYXRpb24gd2Ugd2lsbCBhIGxhcmdlciBwYXJ0LiAqLwotICAgIGlmIChqID09IHcgLSAxICYmIGogPT0gZGVzdF93aWR0aCAtIDEpIHsKLSAgICAgIHkxID0gc3JjWVtzcmNfeV9pZHhdOwotICAgICAgdTEgPSBzcmNVW3NyY191dl9pZHggLyAyXTsKLSAgICAgIHYxID0gc3JjVltzcmNfdXZfaWR4IC8gMl07Ci0KLSAgICAgIGRlc3RZW2Rlc3RfeV9pZHhdID0gQ0xBTVAgKEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKSwgMCwgMjU1KTsKLSAgICAgIGRlc3RVW2Rlc3RfdXZfaWR4XSA9IENMQU1QICgKLSAgICAgICAgICAoZGVzdFVbZGVzdF91dl9pZHhdICsgQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpKSAvIDIsIDAsCi0gICAgICAgICAgMjU1KTsKLSAgICAgIGRlc3RWW2Rlc3RfdXZfaWR4XSA9Ci0gICAgICAgICAgQ0xBTVAgKChkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDIsIDAsIDI1NSk7Ci0gICAgfSBlbHNlIGlmIChqID09IHcgLSAxKSB7Ci0gICAgICB5MSA9IHNyY1lbc3JjX3lfaWR4XTsKLSAgICAgIHUxID0gc3JjVVtzcmNfdXZfaWR4IC8gMl07Ci0gICAgICB2MSA9IHNyY1Zbc3JjX3V2X2lkeCAvIDJdOwotCi0gICAgICBkZXN0WVtkZXN0X3lfaWR4XSA9IENMQU1QIChBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSksIDAsIDI1NSk7Ci0gICAgICBkZXN0VVtkZXN0X3V2X2lkeF0gPSBDTEFNUCAoCi0gICAgICAgICAgKDMgKiBkZXN0VVtkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSkpIC8gNCwKLSAgICAgICAgICAwLCAyNTUpOwotICAgICAgZGVzdFZbZGVzdF91dl9pZHhdID0KLSAgICAgICAgICBDTEFNUCAoKDMgKiBkZXN0VltkZXN0X3V2X2lkeF0gKyBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLAotICAgICAgICAgICAgICAgICAgdjEpKSAvIDQsIDAsIDI1NSk7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X2k0MjBfYXl1diAoZ3VpbnQgaV9hbHBoYSwgR3N0VmlkZW9GcmFtZSAqIGRlc3RfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gZGVzdF9zZHR2LCBnaW50IGRlc3RfeCwgZ2ludCBkZXN0X3ksIEdzdFZpZGVvRnJhbWUgKiBzcmNfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gc3JjX3NkdHYsIGdpbnQgc3JjX3gsIGdpbnQgc3JjX3ksIGdpbnQgdywgZ2ludCBoKQotewotICBjb25zdCBndWludDggKnNyY1ksICpzcmNVLCAqc3JjVjsKLSAgZ2ludCBzcmNfc3RyaWRlWSwgc3JjX3N0cmlkZVUsIHNyY19zdHJpZGVWOwotICBnaW50IGRlc3Rfc3RyaWRlOwotICBndWludDggKmRlc3Q7Ci0KLSAgc3JjX3N0cmlkZVkgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyY19mcmFtZSwgMCk7Ci0gIHNyY19zdHJpZGVVID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmNfZnJhbWUsIDEpOwotICBzcmNfc3RyaWRlViA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjX2ZyYW1lLCAyKTsKLQotICBzcmNZID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoc3JjX2ZyYW1lLCAwKTsKLSAgc3JjVSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyY19mcmFtZSwgMSk7Ci0gIHNyY1YgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChzcmNfZnJhbWUsIDIpOwotCi0gIGRlc3Rfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZGVzdF9mcmFtZSwgMCk7Ci0KLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0X2ZyYW1lLCAwKTsKLSAgZGVzdCA9IGRlc3QgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZSArIGRlc3RfeCAqIDQ7Ci0KLSAgc3JjWSA9IHNyY1kgKyBzcmNfeSAqIHNyY19zdHJpZGVZICsgc3JjX3g7Ci0gIHNyY1UgPSBzcmNVICsgKHNyY195IC8gMikgKiBzcmNfc3RyaWRlVSArIHNyY194IC8gMjsKLSAgc3JjViA9IHNyY1YgKyAoc3JjX3kgLyAyKSAqIHNyY19zdHJpZGVWICsgc3JjX3ggLyAyOwotCi0gIGlfYWxwaGEgPSBDTEFNUCAoaV9hbHBoYSwgMCwgMjU1KTsKLQotICBpZiAoc3JjX3NkdHYgIT0gZGVzdF9zZHR2KSB7Ci0gICAgZ2ludCBpLCBqLCB1dl9pZHg7Ci0gICAgZ2ludCB5LCB1LCB2OwotICAgIGdpbnQgeTEsIHUxLCB2MTsKLSAgICBnaW50IG1hdHJpeFsxMl07Ci0KLSAgICBtZW1jcHkgKG1hdHJpeCwKLSAgICAgICAgZGVzdF9zZHR2ID8gY29nX3ljYmNyX2hkdHZfdG9feWNiY3Jfc2R0dl9tYXRyaXhfOGJpdCA6Ci0gICAgICAgIGNvZ195Y2Jjcl9zZHR2X3RvX3ljYmNyX2hkdHZfbWF0cml4XzhiaXQsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwLCB1dl9pZHggPSBzcmNfeCAlIDI7IGogPCB3OyBqKyssIHV2X2lkeCsrKSB7Ci0gICAgICAgIHkgPSBzcmNZW2pdOwotICAgICAgICB1ID0gc3JjVVt1dl9pZHggLyAyXTsKLSAgICAgICAgdiA9IHNyY1ZbdXZfaWR4IC8gMl07Ci0KLSAgICAgICAgeTEgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeSwgdSwgdik7Ci0gICAgICAgIHUxID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHksIHUsIHYpOwotICAgICAgICB2MSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5LCB1LCB2KTsKLQotICAgICAgICBkZXN0WzQgKiBqICsgMF0gPSBpX2FscGhhOwotICAgICAgICBkZXN0WzQgKiBqICsgMV0gPSB5MTsKLSAgICAgICAgZGVzdFs0ICogaiArIDJdID0gdTE7Ci0gICAgICAgIGRlc3RbNCAqIGogKyAzXSA9IHYxOwotICAgICAgfQotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLQotICAgICAgc3JjX3krKzsKLSAgICAgIHNyY1kgKz0gc3JjX3N0cmlkZVk7Ci0gICAgICBpZiAoc3JjX3kgJSAyID09IDApIHsKLSAgICAgICAgc3JjVSArPSBzcmNfc3RyaWRlVTsKLSAgICAgICAgc3JjViArPSBzcmNfc3RyaWRlVjsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ2ludCBpLCBqLCB1dl9pZHg7Ci0gICAgZ2ludCB5LCB1LCB2OwotCi0gICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgICAgZm9yIChqID0gMCwgdXZfaWR4ID0gc3JjX3ggJSAyOyBqIDwgdzsgaisrLCB1dl9pZHgrKykgewotICAgICAgICB5ID0gc3JjWVtqXTsKLSAgICAgICAgdSA9IHNyY1VbdXZfaWR4IC8gMl07Ci0gICAgICAgIHYgPSBzcmNWW3V2X2lkeCAvIDJdOwotCi0gICAgICAgIGRlc3RbNCAqIGogKyAwXSA9IGlfYWxwaGE7Ci0gICAgICAgIGRlc3RbNCAqIGogKyAxXSA9IHk7Ci0gICAgICAgIGRlc3RbNCAqIGogKyAyXSA9IHU7Ci0gICAgICAgIGRlc3RbNCAqIGogKyAzXSA9IHY7Ci0gICAgICB9Ci0gICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOwotCi0gICAgICBzcmNfeSsrOwotICAgICAgc3JjWSArPSBzcmNfc3RyaWRlWTsKLSAgICAgIGlmIChzcmNfeSAlIDIgPT0gMCkgewotICAgICAgICBzcmNVICs9IHNyY19zdHJpZGVVOwotICAgICAgICBzcmNWICs9IHNyY19zdHJpZGVWOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF9yZ2IzMiAoR3N0VmlkZW9Cb3hGaWxsIGZpbGxfdHlwZSwgZ3VpbnQgYl9hbHBoYSwKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUsIGdib29sZWFuIHNkdHYpCi17Ci0gIGd1aW50MzIgZW1wdHlfcGl4ZWw7Ci0gIGdpbnQgcFs0XTsKLSAgZ3VpbnQ4ICpkZXN0OwotICBndWludCBzdHJpZGU7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChmcmFtZSk7Ci0KLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMCk7Ci0gIHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGZyYW1lLCAwKTsKLQotICBwWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChmcmFtZSwgMyk7Ci0gIHBbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGZyYW1lLCAwKTsKLSAgcFsyXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZnJhbWUsIDEpOwotICBwWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChmcmFtZSwgMik7Ci0KLSAgYl9hbHBoYSA9IENMQU1QIChiX2FscGhhLCAwLCAyNTUpOwotCi0gIGlmIChHU1RfVklERU9fRlJBTUVfTl9DT01QT05FTlRTIChmcmFtZSkgPT0gNCkgewotICAgIGVtcHR5X3BpeGVsID0gR1VJTlQzMl9GUk9NX0xFICgoYl9hbHBoYSA8PCAocFswXSAqIDgpKSB8Ci0gICAgICAgIChyZ2JfY29sb3JzX1JbZmlsbF90eXBlXSA8PCAocFsxXSAqIDgpKSB8Ci0gICAgICAgIChyZ2JfY29sb3JzX0dbZmlsbF90eXBlXSA8PCAocFsyXSAqIDgpKSB8Ci0gICAgICAgIChyZ2JfY29sb3JzX0JbZmlsbF90eXBlXSA8PCAocFszXSAqIDgpKSk7Ci0gIH0gZWxzZSB7Ci0gICAgZW1wdHlfcGl4ZWwgPSBHVUlOVDMyX0ZST01fTEUgKAotICAgICAgICAocmdiX2NvbG9yc19SW2ZpbGxfdHlwZV0gPDwgKHBbMV0gKiA4KSkgfAotICAgICAgICAocmdiX2NvbG9yc19HW2ZpbGxfdHlwZV0gPDwgKHBbMl0gKiA4KSkgfAotICAgICAgICAocmdiX2NvbG9yc19CW2ZpbGxfdHlwZV0gPDwgKHBbM10gKiA4KSkpOwotICB9Ci0KLSAgaWYgKHN0cmlkZSA9PSB3aWR0aCAqIDQpIHsKLSAgICB2aWRlb19ib3hfb3JjX3NwbGF0X3UzMiAoKGd1aW50MzIgKikgZGVzdCwgZW1wdHlfcGl4ZWwsIHdpZHRoICogaGVpZ2h0KTsKLSAgfSBlbHNlIGlmIChoZWlnaHQpIHsKLSAgICBmb3IgKDsgaGVpZ2h0OyAtLWhlaWdodCkgewotICAgICAgdmlkZW9fYm94X29yY19zcGxhdF91MzIgKChndWludDMyICopIGRlc3QsIGVtcHR5X3BpeGVsLCB3aWR0aCk7Ci0gICAgICBkZXN0ICs9IHN0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWZpbGxfcmdiMjQgKEdzdFZpZGVvQm94RmlsbCBmaWxsX3R5cGUsIGd1aW50IGJfYWxwaGEsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBnYm9vbGVhbiBzZHR2KQotewotICBnaW50IGRlc3Rfc3RyaWRlOwotICBnaW50IHBbNF07Ci0gIGdpbnQgaSwgajsKLSAgZ3VpbnQ4ICpkZXN0OwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZnJhbWUpOwotCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICBkZXN0X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGZyYW1lLCAwKTsKLQotICBwWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChmcmFtZSwgMCk7Ci0gIHBbMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGZyYW1lLCAxKTsKLSAgcFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZnJhbWUsIDIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICBkZXN0WzMgKiBqICsgcFsxXV0gPSByZ2JfY29sb3JzX1JbZmlsbF90eXBlXTsKLSAgICAgIGRlc3RbMyAqIGogKyBwWzJdXSA9IHJnYl9jb2xvcnNfR1tmaWxsX3R5cGVdOwotICAgICAgZGVzdFszICogaiArIHBbM11dID0gcmdiX2NvbG9yc19CW2ZpbGxfdHlwZV07Ci0gICAgfQotICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfcmdiMzIgKGd1aW50IGlfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0X2ZyYW1lLAotICAgIGdib29sZWFuIGRlc3Rfc2R0diwgZ2ludCBkZXN0X3gsIGdpbnQgZGVzdF95LCBHc3RWaWRlb0ZyYW1lICogc3JjX2ZyYW1lLAotICAgIGdib29sZWFuIHNyY19zZHR2LCBnaW50IHNyY194LCBnaW50IHNyY195LCBnaW50IHcsIGdpbnQgaCkKLXsKLSAgZ2ludCBpLCBqOwotICBnaW50IHNyY19zdHJpZGUsIGRlc3Rfc3RyaWRlOwotICBnYm9vbGVhbiBpbl9hbHBoYSwgb3V0X2FscGhhOwotICBnaW50IGluX2JwcCwgb3V0X2JwcDsKLSAgZ2ludCBwX291dFs0XTsKLSAgZ2ludCBwX2luWzRdOwotICBnYm9vbGVhbiBwYWNrZWRfb3V0OwotICBnYm9vbGVhbiBwYWNrZWRfaW47Ci0gIGd1aW50OCAqc3JjLCAqZGVzdDsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjX2ZyYW1lLCAwKTsKLSAgZGVzdF9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0X2ZyYW1lLCAwKTsKLSAgaW5fYnBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoc3JjX2ZyYW1lLCAwKTsKLSAgb3V0X2JwcCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGRlc3RfZnJhbWUsIDApOwotICBwYWNrZWRfaW4gPSAoaW5fYnBwIDwgNCk7Ci0gIHBhY2tlZF9vdXQgPSAob3V0X2JwcCA8IDQpOwotCi0gIG91dF9hbHBoYSA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSAoJmRlc3RfZnJhbWUtPmluZm8pOwotICBwX291dFswXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZGVzdF9mcmFtZSwgMyk7Ci0gIHBfb3V0WzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChkZXN0X2ZyYW1lLCAwKTsKLSAgcF9vdXRbMl0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGRlc3RfZnJhbWUsIDEpOwotICBwX291dFszXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZGVzdF9mcmFtZSwgMik7Ci0KLSAgaW5fYWxwaGEgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEgKCZzcmNfZnJhbWUtPmluZm8pOwotICBwX2luWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDMpOwotICBwX2luWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDApOwotICBwX2luWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDEpOwotICBwX2luWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDIpOwotCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdF9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBkZXN0ICsgZGVzdF95ICogZGVzdF9zdHJpZGUgKyBkZXN0X3ggKiBvdXRfYnBwOwotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjX2ZyYW1lLCAwKTsKLSAgc3JjID0gc3JjICsgc3JjX3kgKiBzcmNfc3RyaWRlICsgc3JjX3ggKiBpbl9icHA7Ci0KLSAgaWYgKGluX2FscGhhICYmIG91dF9hbHBoYSkgewotICAgIHcgKj0gNDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSA0KSB7Ci0gICAgICAgIGRlc3RbaiArIHBfb3V0WzBdXSA9IChzcmNbaiArIHBfaW5bMF1dICogaV9hbHBoYSkgPj4gODsKLSAgICAgICAgZGVzdFtqICsgcF9vdXRbMV1dID0gc3JjW2ogKyBwX2luWzFdXTsKLSAgICAgICAgZGVzdFtqICsgcF9vdXRbMl1dID0gc3JjW2ogKyBwX2luWzJdXTsKLSAgICAgICAgZGVzdFtqICsgcF9vdXRbM11dID0gc3JjW2ogKyBwX2luWzNdXTsKLSAgICAgIH0KLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAob3V0X2FscGhhICYmICFwYWNrZWRfaW4pIHsKLSAgICB3ICo9IDQ7Ci0gICAgaV9hbHBoYSA9IENMQU1QIChpX2FscGhhLCAwLCAyNTUpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHc7IGogKz0gNCkgewotICAgICAgICBkZXN0W2ogKyBwX291dFswXV0gPSBpX2FscGhhOwotICAgICAgICBkZXN0W2ogKyBwX291dFsxXV0gPSBzcmNbaiArIHBfaW5bMV1dOwotICAgICAgICBkZXN0W2ogKyBwX291dFsyXV0gPSBzcmNbaiArIHBfaW5bMl1dOwotICAgICAgICBkZXN0W2ogKyBwX291dFszXV0gPSBzcmNbaiArIHBfaW5bM11dOwotICAgICAgfQotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwotICAgIH0KLSAgfSBlbHNlIGlmIChvdXRfYWxwaGEgJiYgcGFja2VkX2luKSB7Ci0gICAgaV9hbHBoYSA9IENMQU1QIChpX2FscGhhLCAwLCAyNTUpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHc7IGorKykgewotICAgICAgICBkZXN0WzQgKiBqICsgcF9vdXRbMF1dID0gaV9hbHBoYTsKLSAgICAgICAgZGVzdFs0ICogaiArIHBfb3V0WzFdXSA9IHNyY1tpbl9icHAgKiBqICsgcF9pblsxXV07Ci0gICAgICAgIGRlc3RbNCAqIGogKyBwX291dFsyXV0gPSBzcmNbaW5fYnBwICogaiArIHBfaW5bMl1dOwotICAgICAgICBkZXN0WzQgKiBqICsgcF9vdXRbM11dID0gc3JjW2luX2JwcCAqIGogKyBwX2luWzNdXTsKLSAgICAgIH0KLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoIXBhY2tlZF9vdXQgJiYgIXBhY2tlZF9pbikgewotICAgIHcgKj0gNDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSA0KSB7Ci0gICAgICAgIGRlc3RbaiArIHBfb3V0WzFdXSA9IHNyY1tqICsgcF9pblsxXV07Ci0gICAgICAgIGRlc3RbaiArIHBfb3V0WzJdXSA9IHNyY1tqICsgcF9pblsyXV07Ci0gICAgICAgIGRlc3RbaiArIHBfb3V0WzNdXSA9IHNyY1tqICsgcF9pblszXV07Ci0gICAgICB9Ci0gICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOwotICAgICAgc3JjICs9IHNyY19zdHJpZGU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBoOyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCB3OyBqKyspIHsKLSAgICAgICAgZGVzdFtvdXRfYnBwICogaiArIHBfb3V0WzFdXSA9IHNyY1tpbl9icHAgKiBqICsgcF9pblsxXV07Ci0gICAgICAgIGRlc3Rbb3V0X2JwcCAqIGogKyBwX291dFsyXV0gPSBzcmNbaW5fYnBwICogaiArIHBfaW5bMl1dOwotICAgICAgICBkZXN0W291dF9icHAgKiBqICsgcF9vdXRbM11dID0gc3JjW2luX2JwcCAqIGogKyBwX2luWzNdXTsKLSAgICAgIH0KLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfcmdiMzJfYXl1diAoZ3VpbnQgaV9hbHBoYSwgR3N0VmlkZW9GcmFtZSAqIGRlc3RfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gZGVzdF9zZHR2LCBnaW50IGRlc3RfeCwgZ2ludCBkZXN0X3ksIEdzdFZpZGVvRnJhbWUgKiBzcmNfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gc3JjX3NkdHYsIGdpbnQgc3JjX3gsIGdpbnQgc3JjX3ksIGdpbnQgdywgZ2ludCBoKQotewotICBnaW50IGksIGo7Ci0gIGdpbnQgc3JjX3N0cmlkZSwgZGVzdF9zdHJpZGU7Ci0gIGdib29sZWFuIGluX2FscGhhOwotICBnaW50IGluX2JwcDsKLSAgZ2ludCBwX2luWzRdOwotICBnYm9vbGVhbiBwYWNrZWRfaW47Ci0gIGdpbnQgbWF0cml4WzEyXTsKLSAgZ2ludCBhOwotICBnaW50IHksIHUsIHY7Ci0gIGdpbnQgciwgZywgYjsKLSAgZ3VpbnQ4ICpkZXN0LCAqc3JjOwotCi0gIGRlc3Rfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZGVzdF9mcmFtZSwgMCk7Ci0gIHNyY19zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChzcmNfZnJhbWUsIDApOwotICBpbl9icHAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFIChzcmNfZnJhbWUsIDApOwotICBwYWNrZWRfaW4gPSAoaW5fYnBwIDwgNCk7Ci0KLSAgaW5fYWxwaGEgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEgKCZzcmNfZnJhbWUtPmluZm8pOwotICBwX2luWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDMpOwotICBwX2luWzFdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDApOwotICBwX2luWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDEpOwotICBwX2luWzNdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmNfZnJhbWUsIDIpOwotCi0gIG1lbWNweSAobWF0cml4LAotICAgICAgKGRlc3Rfc2R0dikgPyBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYgOgotICAgICAgY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9oZHR2LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdF9mcmFtZSwgMCk7Ci0gIGRlc3QgPSBkZXN0ICsgZGVzdF95ICogZGVzdF9zdHJpZGUgKyBkZXN0X3ggKiA0OwotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjX2ZyYW1lLCAwKTsKLSAgc3JjID0gc3JjICsgc3JjX3kgKiBzcmNfc3RyaWRlICsgc3JjX3ggKiBpbl9icHA7Ci0KLSAgaWYgKGluX2FscGhhKSB7Ci0gICAgdyAqPSA0OwotICAgIGZvciAoaSA9IDA7IGkgPCBoOyBpKyspIHsKLSAgICAgIGZvciAoaiA9IDA7IGogPCB3OyBqICs9IDQpIHsKLSAgICAgICAgYSA9IChzcmNbaiArIHBfaW5bMF1dICogaV9hbHBoYSkgPj4gODsKLSAgICAgICAgciA9IHNyY1tqICsgcF9pblsxXV07Ci0gICAgICAgIGcgPSBzcmNbaiArIHBfaW5bMl1dOwotICAgICAgICBiID0gc3JjW2ogKyBwX2luWzNdXTsKLQotICAgICAgICB5ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHIsIGcsIGIpOwotICAgICAgICB1ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHIsIGcsIGIpOwotICAgICAgICB2ID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDIsIHIsIGcsIGIpOwotCi0gICAgICAgIGRlc3RbaiArIDBdID0gYTsKLSAgICAgICAgZGVzdFtqICsgMV0gPSBDTEFNUCAoeSwgMCwgMjU1KTsKLSAgICAgICAgZGVzdFtqICsgMl0gPSBDTEFNUCAodSwgMCwgMjU1KTsKLSAgICAgICAgZGVzdFtqICsgM10gPSBDTEFNUCAodiwgMCwgMjU1KTsKLSAgICAgIH0KLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoIXBhY2tlZF9pbikgewotICAgIHcgKj0gNDsKLSAgICBpX2FscGhhID0gQ0xBTVAgKGlfYWxwaGEsIDAsIDI1NSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSA0KSB7Ci0gICAgICAgIGEgPSBpX2FscGhhOwotICAgICAgICByID0gc3JjW2ogKyBwX2luWzFdXTsKLSAgICAgICAgZyA9IHNyY1tqICsgcF9pblsyXV07Ci0gICAgICAgIGIgPSBzcmNbaiArIHBfaW5bM11dOwotCi0gICAgICAgIHkgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgciwgZywgYik7Ci0gICAgICAgIHUgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgciwgZywgYik7Ci0gICAgICAgIHYgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgciwgZywgYik7Ci0KLSAgICAgICAgZGVzdFtqICsgMF0gPSBhOwotICAgICAgICBkZXN0W2ogKyAxXSA9IENMQU1QICh5LCAwLCAyNTUpOwotICAgICAgICBkZXN0W2ogKyAyXSA9IENMQU1QICh1LCAwLCAyNTUpOwotICAgICAgICBkZXN0W2ogKyAzXSA9IENMQU1QICh2LCAwLCAyNTUpOwotICAgICAgfQotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpX2FscGhhID0gQ0xBTVAgKGlfYWxwaGEsIDAsIDI1NSk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaisrKSB7Ci0gICAgICAgIGEgPSBpX2FscGhhOwotICAgICAgICByID0gc3JjW2luX2JwcCAqIGogKyBwX2luWzFdXTsKLSAgICAgICAgZyA9IHNyY1tpbl9icHAgKiBqICsgcF9pblsyXV07Ci0gICAgICAgIGIgPSBzcmNbaW5fYnBwICogaiArIHBfaW5bM11dOwotCi0gICAgICAgIHkgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgciwgZywgYik7Ci0gICAgICAgIHUgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgciwgZywgYik7Ci0gICAgICAgIHYgPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgciwgZywgYik7Ci0KLSAgICAgICAgZGVzdFs0ICogaiArIDBdID0gYTsKLSAgICAgICAgZGVzdFs0ICogaiArIDFdID0gQ0xBTVAgKHksIDAsIDI1NSk7Ci0gICAgICAgIGRlc3RbNCAqIGogKyAyXSA9IENMQU1QICh1LCAwLCAyNTUpOwotICAgICAgICBkZXN0WzQgKiBqICsgM10gPSBDTEFNUCAodiwgMCwgMjU1KTsKLSAgICAgIH0KLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWNvcHlfYXl1dl9yZ2IzMiAoZ3VpbnQgaV9hbHBoYSwgR3N0VmlkZW9GcmFtZSAqIGRlc3RfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gZGVzdF9zZHR2LCBnaW50IGRlc3RfeCwgZ2ludCBkZXN0X3ksIEdzdFZpZGVvRnJhbWUgKiBzcmNfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gc3JjX3NkdHYsIGdpbnQgc3JjX3gsIGdpbnQgc3JjX3ksIGdpbnQgdywgZ2ludCBoKQotewotICBnaW50IGksIGo7Ci0gIGdpbnQgc3JjX3N0cmlkZSwgZGVzdF9zdHJpZGU7Ci0gIGdib29sZWFuIG91dF9hbHBoYTsKLSAgZ2ludCBvdXRfYnBwOwotICBnaW50IHBfb3V0WzRdOwotICBnYm9vbGVhbiBwYWNrZWRfb3V0OwotICBnaW50IG1hdHJpeFsxMl07Ci0gIGdpbnQgYTsKLSAgZ2ludCB5LCB1LCB2OwotICBnaW50IHIsIGcsIGI7Ci0gIGd1aW50OCAqc3JjLCAqZGVzdDsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjX2ZyYW1lLCAwKTsKLSAgZGVzdF9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0X2ZyYW1lLCAwKTsKLSAgb3V0X2JwcCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGRlc3RfZnJhbWUsIDApOwotICBwYWNrZWRfb3V0ID0gKG91dF9icHAgPCA0KTsKLQotICBvdXRfYWxwaGEgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEgKCZkZXN0X2ZyYW1lLT5pbmZvKTsKLSAgcF9vdXRbMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGRlc3RfZnJhbWUsIDMpOwotICBwX291dFsxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZGVzdF9mcmFtZSwgMCk7Ci0gIHBfb3V0WzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChkZXN0X2ZyYW1lLCAxKTsKLSAgcF9vdXRbM10gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGRlc3RfZnJhbWUsIDIpOwotCi0gIG1lbWNweSAobWF0cml4LAotICAgICAgKHNyY19zZHR2KSA/IGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diA6Ci0gICAgICBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X2hkdHYsIDEyICogc2l6ZW9mIChnaW50KSk7Ci0KLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0X2ZyYW1lLCAwKTsKLSAgZGVzdCA9IGRlc3QgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZSArIGRlc3RfeCAqIG91dF9icHA7Ci0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmNfZnJhbWUsIDApOwotICBzcmMgPSBzcmMgKyBzcmNfeSAqIHNyY19zdHJpZGUgKyBzcmNfeCAqIDQ7Ci0KLSAgaWYgKG91dF9hbHBoYSkgewotICAgIHcgKj0gNDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSA0KSB7Ci0gICAgICAgIGEgPSAoc3JjW2ogKyAwXSAqIGlfYWxwaGEpID4+IDg7Ci0gICAgICAgIHkgPSBzcmNbaiArIDFdOwotICAgICAgICB1ID0gc3JjW2ogKyAyXTsKLSAgICAgICAgdiA9IHNyY1tqICsgM107Ci0KLSAgICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5LCB1LCB2KTsKLSAgICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5LCB1LCB2KTsKLSAgICAgICAgYiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5LCB1LCB2KTsKLQotICAgICAgICBkZXN0W2ogKyBwX291dFswXV0gPSBhOwotICAgICAgICBkZXN0W2ogKyBwX291dFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgICAgZGVzdFtqICsgcF9vdXRbMl1dID0gQ0xBTVAgKGcsIDAsIDI1NSk7Ci0gICAgICAgIGRlc3RbaiArIHBfb3V0WzNdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotICAgICAgfQotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwotICAgIH0KLSAgfSBlbHNlIGlmICghcGFja2VkX291dCkgewotICAgIHcgKj0gNDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSA0KSB7Ci0gICAgICAgIHkgPSBzcmNbaiArIDFdOwotICAgICAgICB1ID0gc3JjW2ogKyAyXTsKLSAgICAgICAgdiA9IHNyY1tqICsgM107Ci0KLSAgICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5LCB1LCB2KTsKLSAgICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5LCB1LCB2KTsKLSAgICAgICAgYiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5LCB1LCB2KTsKLQotICAgICAgICBkZXN0W2ogKyBwX291dFsxXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgICAgZGVzdFtqICsgcF9vdXRbMl1dID0gQ0xBTVAgKGcsIDAsIDI1NSk7Ci0gICAgICAgIGRlc3RbaiArIHBfb3V0WzNdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotICAgICAgfQotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaisrKSB7Ci0gICAgICAgIHkgPSBzcmNbNCAqIGogKyAxXTsKLSAgICAgICAgdSA9IHNyY1s0ICogaiArIDJdOwotICAgICAgICB2ID0gc3JjWzQgKiBqICsgM107Ci0KLSAgICAgICAgciA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5LCB1LCB2KTsKLSAgICAgICAgZyA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5LCB1LCB2KTsKLSAgICAgICAgYiA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5LCB1LCB2KTsKLQotICAgICAgICBkZXN0W291dF9icHAgKiBqICsgcF9vdXRbMV1dID0gQ0xBTVAgKHIsIDAsIDI1NSk7Ci0gICAgICAgIGRlc3Rbb3V0X2JwcCAqIGogKyBwX291dFsyXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgICAgZGVzdFtvdXRfYnBwICogaiArIHBfb3V0WzNdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotICAgICAgfQotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF9ncmF5IChHc3RWaWRlb0JveEZpbGwgZmlsbF90eXBlLCBndWludCBiX2FscGhhLAotICAgIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgZ2Jvb2xlYW4gc2R0dikKLXsKLSAgZ2ludCBpLCBqOwotICBnaW50IGRlc3Rfc3RyaWRlOwotICBndWludDggKmRlc3Q7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotCi0gIGZvcm1hdCA9IEdTVF9WSURFT19GUkFNRV9GT1JNQVQgKGZyYW1lKTsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChmcmFtZSk7Ci0KLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMCk7Ci0gIGRlc3Rfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotCi0gIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9HUkFZOCkgewotICAgIGd1aW50OCB2YWwgPSB5dXZfc2R0dl9jb2xvcnNfWVtmaWxsX3R5cGVdOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBtZW1zZXQgKGRlc3QsIHZhbCwgd2lkdGgpOwotICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZ3VpbnQxNiB2YWwgPSB5dXZfc2R0dl9jb2xvcnNfWVtmaWxsX3R5cGVdIDw8IDg7Ci0KLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFKSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLSAgICAgICAgICBHU1RfV1JJVEVfVUlOVDE2X0JFIChkZXN0ICsgMiAqIGosIHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICAgICAgR1NUX1dSSVRFX1VJTlQxNl9MRSAoZGVzdCArIDIgKiBqLCB2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3BhY2tlZF9zaW1wbGUgKGd1aW50IGlfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0X2ZyYW1lLAotICAgIGdib29sZWFuIGRlc3Rfc2R0diwgZ2ludCBkZXN0X3gsIGdpbnQgZGVzdF95LCBHc3RWaWRlb0ZyYW1lICogc3JjX2ZyYW1lLAotICAgIGdib29sZWFuIHNyY19zZHR2LCBnaW50IHNyY194LCBnaW50IHNyY195LCBnaW50IHcsIGdpbnQgaCkKLXsKLSAgZ2ludCBpOwotICBnaW50IHNyY19zdHJpZGUsIGRlc3Rfc3RyaWRlOwotICBnaW50IHBpeGVsX3N0cmlkZSwgcm93X3NpemU7Ci0gIGd1aW50OCAqc3JjLCAqZGVzdDsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjX2ZyYW1lLCAwKTsKLSAgZGVzdF9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0X2ZyYW1lLCAwKTsKLSAgcGl4ZWxfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoZGVzdF9mcmFtZSwgMCk7Ci0gIHJvd19zaXplID0gdyAqIHBpeGVsX3N0cmlkZTsKLQotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3RfZnJhbWUsIDApOwotICBkZXN0ID0gZGVzdCArIGRlc3RfeSAqIGRlc3Rfc3RyaWRlICsgZGVzdF94ICogcGl4ZWxfc3RyaWRlOwotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjX2ZyYW1lLCAwKTsKLSAgc3JjID0gc3JjICsgc3JjX3kgKiBzcmNfc3RyaWRlICsgc3JjX3ggKiBwaXhlbF9zdHJpZGU7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgIG1lbWNweSAoZGVzdCwgc3JjLCByb3dfc2l6ZSk7Ci0gICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF95dXkyIChHc3RWaWRlb0JveEZpbGwgZmlsbF90eXBlLCBndWludCBiX2FscGhhLAotICAgIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgZ2Jvb2xlYW4gc2R0dikKLXsKLSAgZ3VpbnQ4IHksIHUsIHY7Ci0gIGdpbnQgaSwgajsKLSAgZ2ludCBzdHJpZGU7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ3VpbnQ4ICpkZXN0OwotICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0KLSAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCAoZnJhbWUpOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsKLQotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsKLSAgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotCi0gIHkgPSAoc2R0dikgPyB5dXZfc2R0dl9jb2xvcnNfWVtmaWxsX3R5cGVdIDogeXV2X2hkdHZfY29sb3JzX1lbZmlsbF90eXBlXTsKLSAgdSA9IChzZHR2KSA/IHl1dl9zZHR2X2NvbG9yc19VW2ZpbGxfdHlwZV0gOiB5dXZfaGR0dl9jb2xvcnNfVVtmaWxsX3R5cGVdOwotICB2ID0gKHNkdHYpID8geXV2X3NkdHZfY29sb3JzX1ZbZmlsbF90eXBlXSA6IHl1dl9oZHR2X2NvbG9yc19WW2ZpbGxfdHlwZV07Ci0KLSAgd2lkdGggPSB3aWR0aCArICh3aWR0aCAlIDIpOwotCi0gIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGogKz0gMikgewotICAgICAgICBkZXN0W2ogKiAyICsgMF0gPSB5OwotICAgICAgICBkZXN0W2ogKiAyICsgMV0gPSB1OwotICAgICAgICBkZXN0W2ogKiAyICsgMl0gPSB5OwotICAgICAgICBkZXN0W2ogKiAyICsgM10gPSB2OwotICAgICAgfQotCi0gICAgICBkZXN0ICs9IHN0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfWVZZVSkgewotICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqICs9IDIpIHsKLSAgICAgICAgZGVzdFtqICogMiArIDBdID0geTsKLSAgICAgICAgZGVzdFtqICogMiArIDFdID0gdjsKLSAgICAgICAgZGVzdFtqICogMiArIDJdID0geTsKLSAgICAgICAgZGVzdFtqICogMiArIDNdID0gdTsKLSAgICAgIH0KLQotICAgICAgZGVzdCArPSBzdHJpZGU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqICs9IDIpIHsKLSAgICAgICAgZGVzdFtqICogMiArIDBdID0gdTsKLSAgICAgICAgZGVzdFtqICogMiArIDFdID0geTsKLSAgICAgICAgZGVzdFtqICogMiArIDJdID0gdjsKLSAgICAgICAgZGVzdFtqICogMiArIDNdID0geTsKLSAgICAgIH0KLQotICAgICAgZGVzdCArPSBzdHJpZGU7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5X3l1eTJfeXV5MiAoZ3VpbnQgaV9hbHBoYSwgR3N0VmlkZW9GcmFtZSAqIGRlc3RfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gZGVzdF9zZHR2LCBnaW50IGRlc3RfeCwgZ2ludCBkZXN0X3ksIEdzdFZpZGVvRnJhbWUgKiBzcmNfZnJhbWUsCi0gICAgZ2Jvb2xlYW4gc3JjX3NkdHYsIGdpbnQgc3JjX3gsIGdpbnQgc3JjX3ksIGdpbnQgdywgZ2ludCBoKQotewotICBnaW50IGksIGo7Ci0gIGdpbnQgc3JjX3N0cmlkZSwgZGVzdF9zdHJpZGU7Ci0gIGd1aW50OCAqc3JjLCAqZGVzdDsKLSAgR3N0VmlkZW9Gb3JtYXQgc3JjX2Zvcm1hdDsKLQotICBzcmNfZm9ybWF0ID0gR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCAoc3JjX2ZyYW1lKTsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjX2ZyYW1lLCAwKTsKLSAgZGVzdF9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0X2ZyYW1lLCAwKTsKLQotICBkZXN0X3ggPSAoZGVzdF94ICYgfjEpOwotICBzcmNfeCA9IChzcmNfeCAmIH4xKTsKLQotICB3ID0gdyArICh3ICUgMik7Ci0KLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0X2ZyYW1lLCAwKTsKLSAgZGVzdCA9IGRlc3QgKyBkZXN0X3kgKiBkZXN0X3N0cmlkZSArIGRlc3RfeCAqIDI7Ci0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmNfZnJhbWUsIDApOwotICBzcmMgPSBzcmMgKyBzcmNfeSAqIHNyY19zdHJpZGUgKyBzcmNfeCAqIDI7Ci0KLSAgaWYgKHNyY19zZHR2ICE9IGRlc3Rfc2R0dikgewotICAgIGdpbnQgeTEsIHUxLCB2MTsKLSAgICBnaW50IHkyLCB1MiwgdjI7Ci0gICAgZ2ludCBtYXRyaXhbMTJdOwotCi0gICAgbWVtY3B5IChtYXRyaXgsCi0gICAgICAgIGRlc3Rfc2R0diA/IGNvZ195Y2Jjcl9oZHR2X3RvX3ljYmNyX3NkdHZfbWF0cml4XzhiaXQgOgotICAgICAgICBjb2dfeWNiY3Jfc2R0dl90b195Y2Jjcl9oZHR2X21hdHJpeF84Yml0LCAxMiAqIHNpemVvZiAoZ2ludCkpOwotCi0gICAgaWYgKHNyY19mb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyKSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB3OyBqICs9IDIpIHsKLSAgICAgICAgICB5MSA9IHNyY1tqICogMiArIDBdOwotICAgICAgICAgIHkyID0gc3JjW2ogKiAyICsgMl07Ci0gICAgICAgICAgdTEgPSB1MiA9IHNyY1tqICogMiArIDFdOwotICAgICAgICAgIHYxID0gdjIgPSBzcmNbaiAqIDIgKyAzXTsKLQotICAgICAgICAgIGRlc3RbaiAqIDIgKyAwXSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKTsKLSAgICAgICAgICBkZXN0W2ogKiAyICsgMV0gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMSwgeTEsIHUxLCB2MSk7Ci0gICAgICAgICAgZGVzdFtqICogMiArIDJdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MiwgdjIpOwotICAgICAgICAgIGRlc3RbaiAqIDIgKyAzXSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAyLCB5MiwgdTIsIHYyKTsKLSAgICAgICAgfQotICAgICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOwotICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHNyY19mb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9ZVllVKSB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKSB7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB3OyBqICs9IDIpIHsKLSAgICAgICAgICB5MSA9IHNyY1tqICogMiArIDBdOwotICAgICAgICAgIHkyID0gc3JjW2ogKiAyICsgMl07Ci0gICAgICAgICAgdjEgPSB2MiA9IHNyY1tqICogMiArIDFdOwotICAgICAgICAgIHUxID0gdTIgPSBzcmNbaiAqIDIgKyAzXTsKLQotICAgICAgICAgIGRlc3RbaiAqIDIgKyAwXSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTEsIHYxKTsKLSAgICAgICAgICBkZXN0W2ogKiAyICsgMV0gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTEsIHUxLCB2MSk7Ci0gICAgICAgICAgZGVzdFtqICogMiArIDJdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDAsIHkxLCB1MiwgdjIpOwotICAgICAgICAgIGRlc3RbaiAqIDIgKyAzXSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAxLCB5MiwgdTIsIHYyKTsKLSAgICAgICAgfQotICAgICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOwotICAgICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgdzsgaiArPSAyKSB7Ci0gICAgICAgICAgdTEgPSB1MiA9IHNyY1tqICogMiArIDBdOwotICAgICAgICAgIHYxID0gdjIgPSBzcmNbaiAqIDIgKyAyXTsKLSAgICAgICAgICB5MSA9IHNyY1tqICogMiArIDFdOwotICAgICAgICAgIHkyID0gc3JjW2ogKiAyICsgM107Ci0KLSAgICAgICAgICBkZXN0W2ogKiAyICsgMV0gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMCwgeTEsIHUxLCB2MSk7Ci0gICAgICAgICAgZGVzdFtqICogMiArIDBdID0gQVBQTFlfTUFUUklYIChtYXRyaXgsIDEsIHkxLCB1MSwgdjEpOwotICAgICAgICAgIGRlc3RbaiAqIDIgKyAzXSA9IEFQUExZX01BVFJJWCAobWF0cml4LCAwLCB5MSwgdTIsIHYyKTsKLSAgICAgICAgICBkZXN0W2ogKiAyICsgMl0gPSBBUFBMWV9NQVRSSVggKG1hdHJpeCwgMiwgeTIsIHUyLCB2Mik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdCArPSBkZXN0X3N0cmlkZTsKLSAgICAgICAgc3JjICs9IHNyY19zdHJpZGU7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvciAoaSA9IDA7IGkgPCBoOyBpKyspIHsKLSAgICAgIG1lbWNweSAoZGVzdCwgc3JjLCB3ICogMik7Ci0gICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOwotICAgICAgc3JjICs9IHNyY19zdHJpZGU7Ci0gICAgfQotICB9Ci19Ci0KLSNkZWZpbmUgREVGQVVMVF9MRUZUICAgICAgMAotI2RlZmluZSBERUZBVUxUX1JJR0hUICAgICAwCi0jZGVmaW5lIERFRkFVTFRfVE9QICAgICAgIDAKLSNkZWZpbmUgREVGQVVMVF9CT1RUT00gICAgMAotI2RlZmluZSBERUZBVUxUX0ZJTExfVFlQRSBWSURFT19CT1hfRklMTF9CTEFDSwotI2RlZmluZSBERUZBVUxUX0FMUEhBICAgICAxLjAKLSNkZWZpbmUgREVGQVVMVF9CT1JERVJfQUxQSEEgMS4wCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0xFRlQsCi0gIFBST1BfUklHSFQsCi0gIFBST1BfVE9QLAotICBQUk9QX0JPVFRPTSwKLSAgUFJPUF9GSUxMX1RZUEUsCi0gIFBST1BfQUxQSEEsCi0gIFBST1BfQk9SREVSX0FMUEhBLAotICBQUk9QX0FVVE9DUk9QCi0gICAgICAvKiBGSUxMIE1FICovCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZpZGVvX2JveF9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQVlVViwgIgotICAgICAgICAgICAgIkFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIHhSR0IsIEJHUngsIHhCR1IsIFJHQngsIFJHQiwgQkdSLCAiCi0gICAgICAgICAgICAiWTQ0NCwgWTQyQiwgWVVZMiwgWVZZVSwgVVlWWSwgSTQyMCwgWVYxMiwgWTQxQiwgIgotICAgICAgICAgICAgIkdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9ICIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdmlkZW9fYm94X3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBBWVVWLCAiCi0gICAgICAgICAgICAiQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgeFJHQiwgQkdSeCwgeEJHUiwgUkdCeCwgUkdCLCBCR1IsICIKLSAgICAgICAgICAgICJZNDQ0LCBZNDJCLCBZVVkyLCBZVllVLCBVWVZZLCBJNDIwLCBZVjEyLCBZNDFCLCAiCi0gICAgICAgICAgICAiR1JBWTgsIEdSQVkxNl9CRSwgR1JBWTE2X0xFIH0gIikpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfdmlkZW9fYm94X3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFZpZGVvQm94LCBnc3RfdmlkZW9fYm94LCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfdmlkZW9fYm94X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF92aWRlb19ib3hfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZpZGVvX2JveF9yZWNhbGNfdHJhbnNmb3JtIChHc3RWaWRlb0JveCAqIHZpZGVvX2JveCk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBmcm9tLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyB2b2lkIGdzdF92aWRlb19ib3hfYmVmb3JlX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEJ1ZmZlciAqIGluKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdmlkZW9fYm94X3NyY19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZpZGVvX2JveF9zZXRfaW5mbyAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLCBHc3RDYXBzICogaW4sCi0gICAgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dCwgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pOwotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpOwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZJREVPX0JPWF9GSUxMIChnc3RfdmlkZW9fYm94X2ZpbGxfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3ZpZGVvX2JveF9maWxsX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdmlkZW9fYm94X2ZpbGxfdHlwZSA9IDA7Ci0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZpZGVvX2JveF9maWxsW10gPSB7Ci0gICAge1ZJREVPX0JPWF9GSUxMX0JMQUNLLCAiQmxhY2siLCAiYmxhY2sifSwKLSAgICB7VklERU9fQk9YX0ZJTExfR1JFRU4sICJHcmVlbiIsICJncmVlbiJ9LAotICAgIHtWSURFT19CT1hfRklMTF9CTFVFLCAiQmx1ZSIsICJibHVlIn0sCi0gICAge1ZJREVPX0JPWF9GSUxMX1JFRCwgIlJlZCIsICJyZWQifSwKLSAgICB7VklERU9fQk9YX0ZJTExfWUVMTE9XLCAiWWVsbG93IiwgInllbGxvdyJ9LAotICAgIHtWSURFT19CT1hfRklMTF9XSElURSwgIldoaXRlIiwgIndoaXRlIn0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghdmlkZW9fYm94X2ZpbGxfdHlwZSkgewotICAgIHZpZGVvX2JveF9maWxsX3R5cGUgPQotICAgICAgICBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiR3N0VmlkZW9Cb3hGaWxsIiwgdmlkZW9fYm94X2ZpbGwpOwotICB9Ci0gIHJldHVybiB2aWRlb19ib3hfZmlsbF90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2JveF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VmlkZW9Cb3ggKnZpZGVvX2JveCA9IEdTVF9WSURFT19CT1ggKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9jbGVhciAoJnZpZGVvX2JveC0+bXV0ZXgpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19ib3hfY2xhc3NfaW5pdCAoR3N0VmlkZW9Cb3hDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIChrbGFzcyk7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqdHJhbnNfY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3ZpZGVvX2JveF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF92aWRlb19ib3hfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF92aWRlb19ib3hfZmluYWxpemU7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9GSUxMX1RZUEUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImZpbGwiLCAiRmlsbCIsICJIb3cgdG8gZmlsbCB0aGUgYm9yZGVycyIsCi0gICAgICAgICAgR1NUX1RZUEVfVklERU9fQk9YX0ZJTEwsIERFRkFVTFRfRklMTF9UWVBFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9MRUZULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImxlZnQiLCAiTGVmdCIsCi0gICAgICAgICAgIlBpeGVscyB0byBib3ggYXQgbGVmdCAoPDAgID0gYWRkIGEgYm9yZGVyKSIsIEdfTUlOSU5ULCBHX01BWElOVCwKLSAgICAgICAgICBERUZBVUxUX0xFRlQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1JJR0hULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInJpZ2h0IiwgIlJpZ2h0IiwKLSAgICAgICAgICAiUGl4ZWxzIHRvIGJveCBhdCByaWdodCAoPDAgPSBhZGQgYSBib3JkZXIpIiwgR19NSU5JTlQsIEdfTUFYSU5ULAotICAgICAgICAgIERFRkFVTFRfUklHSFQsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX1RPUCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ0b3AiLCAiVG9wIiwKLSAgICAgICAgICAiUGl4ZWxzIHRvIGJveCBhdCB0b3AgKDwwID0gYWRkIGEgYm9yZGVyKSIsIEdfTUlOSU5ULCBHX01BWElOVCwKLSAgICAgICAgICBERUZBVUxUX1RPUCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQk9UVE9NLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImJvdHRvbSIsICJCb3R0b20iLAotICAgICAgICAgICJQaXhlbHMgdG8gYm94IGF0IGJvdHRvbSAoPDAgPSBhZGQgYSBib3JkZXIpIiwgR19NSU5JTlQsIEdfTUFYSU5ULAotICAgICAgICAgIERFRkFVTFRfQk9UVE9NLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9BTFBIQSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJhbHBoYSIsICJBbHBoYSIsICJBbHBoYSB2YWx1ZSBwaWN0dXJlIiwgMC4wLCAxLjAsCi0gICAgICAgICAgREVGQVVMVF9BTFBIQSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfQk9SREVSX0FMUEhBLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoImJvcmRlci1hbHBoYSIsICJCb3JkZXIgQWxwaGEiLAotICAgICAgICAgICJBbHBoYSB2YWx1ZSBvZiB0aGUgYm9yZGVyIiwgMC4wLCAxLjAsIERFRkFVTFRfQk9SREVSX0FMUEhBLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgLyoqCi0gICAqIEdzdFZpZGVvQm94OmF1dG9jcm9wOgotICAgKgotICAgKiBJZiBzZXQgdG8gJVRSVUUgdmlkZW9ib3ggd2lsbCBhdXRvbWF0aWNhbGx5IGNyb3AvcGFkIHRoZSBpbnB1dAotICAgKiB2aWRlbyB0byBiZSBjZW50ZXJlZCBpbiB0aGUgb3V0cHV0LgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKSwgUFJPUF9BVVRPQ1JPUCwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgiYXV0b2Nyb3AiLCAiQXV0byBjcm9wIiwKLSAgICAgICAgICAiQXV0byBjcm9wIiwgRkFMU0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIHRyYW5zX2NsYXNzLT5iZWZvcmVfdHJhbnNmb3JtID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9fYm94X2JlZm9yZV90cmFuc2Zvcm0pOwotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19ib3hfdHJhbnNmb3JtX2NhcHMpOwotICB0cmFuc19jbGFzcy0+c3JjX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19ib3hfc3JjX2V2ZW50KTsKLQotICB2ZmlsdGVyX2NsYXNzLT5zZXRfaW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9fYm94X3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9mcmFtZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywgIlZpZGVvIGJveCBmaWx0ZXIiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIlJlc2l6ZXMgYSB2aWRlbyBieSBhZGRpbmcgYm9yZGVycyBvciBjcm9wcGluZyIsCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfdmlkZW9fYm94X3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfdmlkZW9fYm94X3NyY190ZW1wbGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fYm94X2luaXQgKEdzdFZpZGVvQm94ICogdmlkZW9fYm94KQotewotICB2aWRlb19ib3gtPmJveF9yaWdodCA9IERFRkFVTFRfUklHSFQ7Ci0gIHZpZGVvX2JveC0+Ym94X2xlZnQgPSBERUZBVUxUX0xFRlQ7Ci0gIHZpZGVvX2JveC0+Ym94X3RvcCA9IERFRkFVTFRfVE9QOwotICB2aWRlb19ib3gtPmJveF9ib3R0b20gPSBERUZBVUxUX0JPVFRPTTsKLSAgdmlkZW9fYm94LT5jcm9wX3JpZ2h0ID0gMDsKLSAgdmlkZW9fYm94LT5jcm9wX2xlZnQgPSAwOwotICB2aWRlb19ib3gtPmNyb3BfdG9wID0gMDsKLSAgdmlkZW9fYm94LT5jcm9wX2JvdHRvbSA9IDA7Ci0gIHZpZGVvX2JveC0+ZmlsbF90eXBlID0gREVGQVVMVF9GSUxMX1RZUEU7Ci0gIHZpZGVvX2JveC0+YWxwaGEgPSBERUZBVUxUX0FMUEhBOwotICB2aWRlb19ib3gtPmJvcmRlcl9hbHBoYSA9IERFRkFVTFRfQk9SREVSX0FMUEhBOwotICB2aWRlb19ib3gtPmF1dG9jcm9wID0gRkFMU0U7Ci0KLSAgZ19tdXRleF9pbml0ICgmdmlkZW9fYm94LT5tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fYm94X3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWaWRlb0JveCAqdmlkZW9fYm94ID0gR1NUX1ZJREVPX0JPWCAob2JqZWN0KTsKLQotICBnX211dGV4X2xvY2sgKCZ2aWRlb19ib3gtPm11dGV4KTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xFRlQ6Ci0gICAgICB2aWRlb19ib3gtPmJveF9sZWZ0ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBpZiAodmlkZW9fYm94LT5ib3hfbGVmdCA8IDApIHsKLSAgICAgICAgdmlkZW9fYm94LT5ib3JkZXJfbGVmdCA9IC12aWRlb19ib3gtPmJveF9sZWZ0OwotICAgICAgICB2aWRlb19ib3gtPmNyb3BfbGVmdCA9IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2aWRlb19ib3gtPmJvcmRlcl9sZWZ0ID0gMDsKLSAgICAgICAgdmlkZW9fYm94LT5jcm9wX2xlZnQgPSB2aWRlb19ib3gtPmJveF9sZWZ0OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JJR0hUOgotICAgICAgdmlkZW9fYm94LT5ib3hfcmlnaHQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGlmICh2aWRlb19ib3gtPmJveF9yaWdodCA8IDApIHsKLSAgICAgICAgdmlkZW9fYm94LT5ib3JkZXJfcmlnaHQgPSAtdmlkZW9fYm94LT5ib3hfcmlnaHQ7Ci0gICAgICAgIHZpZGVvX2JveC0+Y3JvcF9yaWdodCA9IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2aWRlb19ib3gtPmJvcmRlcl9yaWdodCA9IDA7Ci0gICAgICAgIHZpZGVvX2JveC0+Y3JvcF9yaWdodCA9IHZpZGVvX2JveC0+Ym94X3JpZ2h0OwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1RPUDoKLSAgICAgIHZpZGVvX2JveC0+Ym94X3RvcCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgaWYgKHZpZGVvX2JveC0+Ym94X3RvcCA8IDApIHsKLSAgICAgICAgdmlkZW9fYm94LT5ib3JkZXJfdG9wID0gLXZpZGVvX2JveC0+Ym94X3RvcDsKLSAgICAgICAgdmlkZW9fYm94LT5jcm9wX3RvcCA9IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2aWRlb19ib3gtPmJvcmRlcl90b3AgPSAwOwotICAgICAgICB2aWRlb19ib3gtPmNyb3BfdG9wID0gdmlkZW9fYm94LT5ib3hfdG9wOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPVFRPTToKLSAgICAgIHZpZGVvX2JveC0+Ym94X2JvdHRvbSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgaWYgKHZpZGVvX2JveC0+Ym94X2JvdHRvbSA8IDApIHsKLSAgICAgICAgdmlkZW9fYm94LT5ib3JkZXJfYm90dG9tID0gLXZpZGVvX2JveC0+Ym94X2JvdHRvbTsKLSAgICAgICAgdmlkZW9fYm94LT5jcm9wX2JvdHRvbSA9IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2aWRlb19ib3gtPmJvcmRlcl9ib3R0b20gPSAwOwotICAgICAgICB2aWRlb19ib3gtPmNyb3BfYm90dG9tID0gdmlkZW9fYm94LT5ib3hfYm90dG9tOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZJTExfVFlQRToKLSAgICAgIHZpZGVvX2JveC0+ZmlsbF90eXBlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0FMUEhBOgotICAgICAgdmlkZW9fYm94LT5hbHBoYSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPUkRFUl9BTFBIQToKLSAgICAgIHZpZGVvX2JveC0+Ym9yZGVyX2FscGhhID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQVVUT0NST1A6Ci0gICAgICB2aWRlb19ib3gtPmF1dG9jcm9wID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBnc3RfdmlkZW9fYm94X3JlY2FsY190cmFuc2Zvcm0gKHZpZGVvX2JveCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9fYm94LCAiQ2FsbGluZyByZWNvbmZpZ3VyZSIpOwotICBnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjIChHU1RfQkFTRV9UUkFOU0ZPUk1fQ0FTVCAodmlkZW9fYm94KSk7Ci0KLSAgZ19tdXRleF91bmxvY2sgKCZ2aWRlb19ib3gtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19ib3hfYXV0b2Nyb3AgKEdzdFZpZGVvQm94ICogdmlkZW9fYm94KQotewotICBnaW50IGNyb3BfdyA9IHZpZGVvX2JveC0+aW5fd2lkdGggLSB2aWRlb19ib3gtPm91dF93aWR0aDsKLSAgZ2ludCBjcm9wX2ggPSB2aWRlb19ib3gtPmluX2hlaWdodCAtIHZpZGVvX2JveC0+b3V0X2hlaWdodDsKLQotICB2aWRlb19ib3gtPmJveF9sZWZ0ID0gY3JvcF93IC8gMjsKLSAgaWYgKHZpZGVvX2JveC0+Ym94X2xlZnQgPCAwKSB7Ci0gICAgdmlkZW9fYm94LT5ib3JkZXJfbGVmdCA9IC12aWRlb19ib3gtPmJveF9sZWZ0OwotICAgIHZpZGVvX2JveC0+Y3JvcF9sZWZ0ID0gMDsKLSAgfSBlbHNlIHsKLSAgICB2aWRlb19ib3gtPmJvcmRlcl9sZWZ0ID0gMDsKLSAgICB2aWRlb19ib3gtPmNyb3BfbGVmdCA9IHZpZGVvX2JveC0+Ym94X2xlZnQ7Ci0gIH0KLQotICAvKiBSb3VuZCBkb3duL3VwIGZvciBvZGQgd2lkdGggZGlmZmVyZW5jZXMgKi8KLSAgaWYgKGNyb3BfdyA8IDApCi0gICAgY3JvcF93IC09IDE7Ci0gIGVsc2UKLSAgICBjcm9wX3cgKz0gMTsKLQotICB2aWRlb19ib3gtPmJveF9yaWdodCA9IGNyb3BfdyAvIDI7Ci0gIGlmICh2aWRlb19ib3gtPmJveF9yaWdodCA8IDApIHsKLSAgICB2aWRlb19ib3gtPmJvcmRlcl9yaWdodCA9IC12aWRlb19ib3gtPmJveF9yaWdodDsKLSAgICB2aWRlb19ib3gtPmNyb3BfcmlnaHQgPSAwOwotICB9IGVsc2UgewotICAgIHZpZGVvX2JveC0+Ym9yZGVyX3JpZ2h0ID0gMDsKLSAgICB2aWRlb19ib3gtPmNyb3BfcmlnaHQgPSB2aWRlb19ib3gtPmJveF9yaWdodDsKLSAgfQotCi0gIHZpZGVvX2JveC0+Ym94X3RvcCA9IGNyb3BfaCAvIDI7Ci0gIGlmICh2aWRlb19ib3gtPmJveF90b3AgPCAwKSB7Ci0gICAgdmlkZW9fYm94LT5ib3JkZXJfdG9wID0gLXZpZGVvX2JveC0+Ym94X3RvcDsKLSAgICB2aWRlb19ib3gtPmNyb3BfdG9wID0gMDsKLSAgfSBlbHNlIHsKLSAgICB2aWRlb19ib3gtPmJvcmRlcl90b3AgPSAwOwotICAgIHZpZGVvX2JveC0+Y3JvcF90b3AgPSB2aWRlb19ib3gtPmJveF90b3A7Ci0gIH0KLQotICAvKiBSb3VuZCBkb3duL3VwIGZvciBvZGQgaGVpZ2h0IGRpZmZlcmVuY2VzICovCi0gIGlmIChjcm9wX2ggPCAwKQotICAgIGNyb3BfaCAtPSAxOwotICBlbHNlCi0gICAgY3JvcF9oICs9IDE7Ci0gIHZpZGVvX2JveC0+Ym94X2JvdHRvbSA9IGNyb3BfaCAvIDI7Ci0KLSAgaWYgKHZpZGVvX2JveC0+Ym94X2JvdHRvbSA8IDApIHsKLSAgICB2aWRlb19ib3gtPmJvcmRlcl9ib3R0b20gPSAtdmlkZW9fYm94LT5ib3hfYm90dG9tOwotICAgIHZpZGVvX2JveC0+Y3JvcF9ib3R0b20gPSAwOwotICB9IGVsc2UgewotICAgIHZpZGVvX2JveC0+Ym9yZGVyX2JvdHRvbSA9IDA7Ci0gICAgdmlkZW9fYm94LT5jcm9wX2JvdHRvbSA9IHZpZGVvX2JveC0+Ym94X2JvdHRvbTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2JveF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9Cb3ggKnZpZGVvX2JveCA9IEdTVF9WSURFT19CT1ggKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xFRlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB2aWRlb19ib3gtPmJveF9sZWZ0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SSUdIVDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHZpZGVvX2JveC0+Ym94X3JpZ2h0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UT1A6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB2aWRlb19ib3gtPmJveF90b3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPVFRPTToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHZpZGVvX2JveC0+Ym94X2JvdHRvbSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRklMTF9UWVBFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHZpZGVvX2JveC0+ZmlsbF90eXBlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BTFBIQToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHZpZGVvX2JveC0+YWxwaGEpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPUkRFUl9BTFBIQToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHZpZGVvX2JveC0+Ym9yZGVyX2FscGhhKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9BVVRPQ1JPUDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB2aWRlb19ib3gtPmF1dG9jcm9wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGlubGluZSBnaW50Ci1nc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9kaW1lbnNpb24gKGdpbnQgdmFsLCBnaW50IGRlbHRhKQotewotICBnaW50NjQgbmV3X3ZhbCA9IChnaW50NjQpIHZhbCArIChnaW50NjQpIGRlbHRhOwotCi0gIG5ld192YWwgPSBDTEFNUCAobmV3X3ZhbCwgMSwgR19NQVhJTlQpOwotCi0gIHJldHVybiAoZ2ludCkgbmV3X3ZhbDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9kaW1lbnNpb25fdmFsdWUgKGNvbnN0IEdWYWx1ZSAqIHNyY192YWwsCi0gICAgZ2ludCBkZWx0YSwgR1ZhbHVlICogZGVzdF92YWwpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgZ192YWx1ZV9pbml0IChkZXN0X3ZhbCwgR19WQUxVRV9UWVBFIChzcmNfdmFsKSk7Ci0KLSAgaWYgKEdfVkFMVUVfSE9MRFNfSU5UIChzcmNfdmFsKSkgewotICAgIGdpbnQgaXZhbCA9IGdfdmFsdWVfZ2V0X2ludCAoc3JjX3ZhbCk7Ci0KLSAgICBpdmFsID0gZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fZGltZW5zaW9uIChpdmFsLCBkZWx0YSk7Ci0gICAgZ192YWx1ZV9zZXRfaW50IChkZXN0X3ZhbCwgaXZhbCk7Ci0gIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoc3JjX3ZhbCkpIHsKLSAgICBnaW50IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoc3JjX3ZhbCk7Ci0gICAgZ2ludCBtYXggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHNyY192YWwpOwotCi0gICAgbWluID0gZ3N0X3ZpZGVvX2JveF90cmFuc2Zvcm1fZGltZW5zaW9uIChtaW4sIGRlbHRhKTsKLSAgICBtYXggPSBnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9kaW1lbnNpb24gKG1heCwgZGVsdGEpOwotICAgIGlmIChtaW4gPj0gbWF4KSB7Ci0gICAgICByZXQgPSBGQUxTRTsKLSAgICAgIGdfdmFsdWVfdW5zZXQgKGRlc3RfdmFsKTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKGRlc3RfdmFsLCBtaW4sIG1heCk7Ci0gICAgfQotICB9IGVsc2UgaWYgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChzcmNfdmFsKSkgewotICAgIGdpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoc3JjX3ZhbCk7ICsraSkgewotICAgICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbDsKLSAgICAgIEdWYWx1ZSBuZXd2YWwgPSB7IDAsIH07Ci0KLSAgICAgIGxpc3RfdmFsID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChzcmNfdmFsLCBpKTsKLSAgICAgIGlmIChnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9kaW1lbnNpb25fdmFsdWUgKGxpc3RfdmFsLCBkZWx0YSwgJm5ld3ZhbCkpCi0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoZGVzdF92YWwsICZuZXd2YWwpOwotICAgICAgZ192YWx1ZV91bnNldCAoJm5ld3ZhbCk7Ci0gICAgfQotCi0gICAgaWYgKGdzdF92YWx1ZV9saXN0X2dldF9zaXplIChkZXN0X3ZhbCkgPT0gMCkgewotICAgICAgZ192YWx1ZV91bnNldCAoZGVzdF92YWwpOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdfdmFsdWVfdW5zZXQgKGRlc3RfdmFsKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92aWRlb19ib3hfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogZnJvbSwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0VmlkZW9Cb3ggKnZpZGVvX2JveCA9IEdTVF9WSURFT19CT1ggKHRyYW5zKTsKLSAgR3N0Q2FwcyAqdG8sICpyZXQ7Ci0gIEdzdENhcHMgKnRlbXBsOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0UGFkICpvdGhlcjsKLSAgZ2ludCBpLCBqOwotCi0gIHRvID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGZyb20pOyBpKyspIHsKLSAgICBjb25zdCBHVmFsdWUgKmZ2YWwsICpsdmFsOwotICAgIEdWYWx1ZSBsaXN0ID0geyAwLCB9OwotICAgIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0gICAgZ2Jvb2xlYW4gc2Vlbl95dXYgPSBGQUxTRSwgc2Vlbl9yZ2IgPSBGQUxTRTsKLSAgICBjb25zdCBnY2hhciAqc3RyOwotCi0gICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChmcm9tLCBpKSk7Ci0KLSAgICAvKiBUcmFuc2Zvcm0gd2lkdGgvaGVpZ2h0ICovCi0gICAgaWYgKHZpZGVvX2JveC0+YXV0b2Nyb3ApIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzdHJ1Y3R1cmUsICJ3aWR0aCIpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHN0cnVjdHVyZSwgImhlaWdodCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnaW50IGR3ID0gMCwgZGggPSAwOwotICAgICAgY29uc3QgR1ZhbHVlICp2OwotICAgICAgR1ZhbHVlIHdfdmFsID0geyAwLCB9OwotICAgICAgR1ZhbHVlIGhfdmFsID0geyAwLCB9OwotCi0gICAgICAvKiBjYWxjdWxhdGUgd2lkdGggYW5kIGhlaWdodCAqLwotICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspIHsKLSAgICAgICAgZHcgLT0gdmlkZW9fYm94LT5ib3hfbGVmdDsKLSAgICAgICAgZHcgLT0gdmlkZW9fYm94LT5ib3hfcmlnaHQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkdyArPSB2aWRlb19ib3gtPmJveF9sZWZ0OwotICAgICAgICBkdyArPSB2aWRlb19ib3gtPmJveF9yaWdodDsKLSAgICAgIH0KLQotICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspIHsKLSAgICAgICAgZGggLT0gdmlkZW9fYm94LT5ib3hfdG9wOwotICAgICAgICBkaCAtPSB2aWRlb19ib3gtPmJveF9ib3R0b207Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkaCArPSB2aWRlb19ib3gtPmJveF90b3A7Ci0gICAgICAgIGRoICs9IHZpZGVvX2JveC0+Ym94X2JvdHRvbTsKLSAgICAgIH0KLQotICAgICAgdiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJ3aWR0aCIpOwotICAgICAgaWYgKCFnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9kaW1lbnNpb25fdmFsdWUgKHYsIGR3LCAmd192YWwpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodmlkZW9fYm94LAotICAgICAgICAgICAgImNvdWxkIG5vdCB0cmFuZm9ybSB3aWR0aCB2YWx1ZSB3aXRoIGR3PSVkIiAiLCBjYXBzIHN0cnVjdHVyZT0lIgotICAgICAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGR3LCBzdHJ1Y3R1cmUpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICB9Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCAid2lkdGgiLCAmd192YWwpOwotCi0gICAgICB2ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImhlaWdodCIpOwotICAgICAgaWYgKCFnc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9kaW1lbnNpb25fdmFsdWUgKHYsIGRoLCAmaF92YWwpKSB7Ci0gICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ3X3ZhbCk7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodmlkZW9fYm94LAotICAgICAgICAgICAgImNvdWxkIG5vdCB0cmFuZm9ybSBoZWlnaHQgdmFsdWUgd2l0aCBkaD0lZCIgIiwgY2FwcyBzdHJ1Y3R1cmU9JSIKLSAgICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBkaCwgc3RydWN0dXJlKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgICAgfQotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHN0cnVjdHVyZSwgImhlaWdodCIsICZoX3ZhbCk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmd192YWwpOwotICAgICAgZ192YWx1ZV91bnNldCAoJmhfdmFsKTsKLSAgICB9Ci0KLSAgICAvKiBTdXBwb3J0ZWQgY29udmVyc2lvbnM6Ci0gICAgICogSTQyMC0+QVlVVgotICAgICAqIEk0MjAtPllWMTIKLSAgICAgKiBZVjEyLT5BWVVWCi0gICAgICogWVYxMi0+STQyMAotICAgICAqIEFZVVYtPkk0MjAKLSAgICAgKiBBWVVWLT5ZVjEyCi0gICAgICogQVlVVi0+eFJHQiAoMjRicHAsIDMyYnBwLCBpbmNsLiBhbHBoYSkKLSAgICAgKiB4UkdCLT54UkdCICgyNGJwcCwgMzJicHAsIGZyb20vdG8gYWxsIHZhcmlhbnRzLCBpbmNsLiBhbHBoYSkKLSAgICAgKiB4UkdCLT5BWVVWICgyNGJwcCwgMzJicHAsIGluY2wuIGFscGhhKQotICAgICAqCi0gICAgICogUGFzc3Rocm91Z2ggb25seSBmb3IgZXZlcnl0aGluZyBlbHNlLgotICAgICAqLwotICAgIGZ2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAiZm9ybWF0Iik7Ci0gICAgaWYgKGZ2YWwgJiYgR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGZ2YWwpKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDwgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGZ2YWwpOyBqKyspIHsKLSAgICAgICAgbHZhbCA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAoZnZhbCwgaik7Ci0gICAgICAgIGlmICgoc3RyID0gZ192YWx1ZV9nZXRfc3RyaW5nIChsdmFsKSkpIHsKLSAgICAgICAgICBpZiAoc3RyY21wIChzdHIsICJBWVVWIikgPT0gMCkgewotICAgICAgICAgICAgc2Vlbl95dXYgPSBUUlVFOwotICAgICAgICAgICAgc2Vlbl9yZ2IgPSBUUlVFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIgKHN0ciwgIlJHQiIpIHx8IHN0cnN0ciAoc3RyLCAiQkdSIikpIHsKLSAgICAgICAgICAgIHNlZW5fcmdiID0gVFJVRTsKLSAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcCAoc3RyLCAiSTQyMCIpID09IDAgfHwgc3RyY21wIChzdHIsICJZVjEyIikgPT0gMCkgewotICAgICAgICAgICAgc2Vlbl95dXYgPSBUUlVFOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZnZhbCAmJiBHX1ZBTFVFX0hPTERTX1NUUklORyAoZnZhbCkpIHsKLSAgICAgIGlmICgoc3RyID0gZ192YWx1ZV9nZXRfc3RyaW5nIChmdmFsKSkpIHsKLSAgICAgICAgaWYgKHN0cmNtcCAoc3RyLCAiQVlVViIpID09IDApIHsKLSAgICAgICAgICBzZWVuX3l1diA9IFRSVUU7Ci0gICAgICAgICAgc2Vlbl9yZ2IgPSBUUlVFOwotICAgICAgICB9IGVsc2UgaWYgKHN0cnN0ciAoc3RyLCAiUkdCIikgfHwgc3Ryc3RyIChzdHIsICJCR1IiKSkgewotICAgICAgICAgIHNlZW5fcmdiID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAgKHN0ciwgIkk0MjAiKSA9PSAwIHx8IHN0cmNtcCAoc3RyLCAiWVYxMiIpID09IDApIHsKLSAgICAgICAgICBzZWVuX3l1diA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2Vlbl95dXYgfHwgc2Vlbl9yZ2IpIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAoJmxpc3QsIEdTVF9UWVBFX0xJU1QpOwotCi0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9TVFJJTkcpOwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdmFsLCAiQVlVViIpOwotICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJnZhbCk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLQotICAgICAgaWYgKHNlZW5feXV2KSB7Ci0gICAgICAgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR19UWVBFX1NUUklORyk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbCwgIkk0MjAiKTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2YWwsICJZVjEyIik7Ci0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgICAgIH0KLSAgICAgIGlmIChzZWVuX3JnYikgewotICAgICAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9TVFJJTkcpOwotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2YWwsICJSR0J4Iik7Ci0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdmFsLCAiQkdSeCIpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbCwgInhSR0IiKTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2YWwsICJ4QkdSIik7Ci0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdmFsLCAiUkdCQSIpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbCwgIkJHUkEiKTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZ2YWwsICJBUkdCIik7Ci0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZ2YWwpOwotICAgICAgICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICgmdmFsLCAiQUJHUiIpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbCwgIlJHQiIpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdmFsKTsKLSAgICAgICAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJnZhbCwgIkJHUiIpOwotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmdmFsKTsKLSAgICAgICAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gICAgICB9Ci0gICAgICBnc3RfdmFsdWVfbGlzdF9tZXJnZSAoJnZhbCwgZnZhbCwgJmxpc3QpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfdmFsdWUgKHN0cnVjdHVyZSwgImZvcm1hdCIsICZ2YWwpOwotICAgICAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmbGlzdCk7Ci0gICAgfQotCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHN0cnVjdHVyZSwgImNvbG9yaW1ldHJ5Iik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHN0cnVjdHVyZSwgImNocm9tYS1zaXRlIik7Ci0KLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlICh0bywgc3RydWN0dXJlKTsKLSAgfQotCi0gIC8qIGZpbHRlciBhZ2FpbnN0IHNldCBhbGxvd2VkIGNhcHMgb24gdGhlIHBhZCAqLwotICBvdGhlciA9IChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TSU5LKSA/IHRyYW5zLT5zcmNwYWQgOiB0cmFucy0+c2lua3BhZDsKLSAgdGVtcGwgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAob3RoZXIpOwotICByZXQgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKHRvLCB0ZW1wbCk7Ci0gIGdzdF9jYXBzX3VucmVmICh0byk7Ci0gIGdzdF9jYXBzX3VucmVmICh0ZW1wbCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9fYm94LCAiZGlyZWN0aW9uICVkLCB0cmFuc2Zvcm1lZCAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgZGlyZWN0aW9uLCBmcm9tLCByZXQpOwotCi0gIGlmIChyZXQgJiYgZmlsdGVyKSB7Ci0gICAgR3N0Q2FwcyAqaW50ZXJzZWN0aW9uOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9fYm94LCAiVXNpbmcgZmlsdGVyIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGZpbHRlcik7Ci0gICAgaW50ZXJzZWN0aW9uID0KLSAgICAgICAgZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgcmV0LCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChyZXQpOwotICAgIHJldCA9IGludGVyc2VjdGlvbjsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb19ib3gsICJJbnRlcnNlY3Rpb24gJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotYmFpbDoKLSAgewotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3RydWN0dXJlKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodG8pOwotICAgIHRvID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICAgIHJldHVybiB0bzsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92aWRlb19ib3hfcmVjYWxjX3RyYW5zZm9ybSAoR3N0VmlkZW9Cb3ggKiB2aWRlb19ib3gpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgLyogaWYgd2UgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgaW4gYW5kIG91dCBhbmQgd2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIGFueQotICAgKiBjcm9wcGluZyBhdCBhbGwsIHdlIGNhbiBqdXN0IG9wZXJhdGUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqLwotICBpZiAodmlkZW9fYm94LT5pbl9mb3JtYXQgPT0gdmlkZW9fYm94LT5vdXRfZm9ybWF0ICYmCi0gICAgICB2aWRlb19ib3gtPmJveF9sZWZ0ID09IDAgJiYgdmlkZW9fYm94LT5ib3hfcmlnaHQgPT0gMCAmJgotICAgICAgdmlkZW9fYm94LT5ib3hfdG9wID09IDAgJiYgdmlkZW9fYm94LT5ib3hfYm90dG9tID09IDAgJiYKLSAgICAgIHZpZGVvX2JveC0+aW5fc2R0diA9PSB2aWRlb19ib3gtPm91dF9zZHR2KSB7Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAodmlkZW9fYm94LCAid2UgYXJlIHVzaW5nIHBhc3N0aHJvdWdoIik7Ci0gICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKHZpZGVvX2JveCksCi0gICAgICAgIFRSVUUpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUICh2aWRlb19ib3gsICJ3ZSBhcmUgbm90IHVzaW5nIHBhc3N0aHJvdWdoIik7Ci0gICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNX0NBU1QgKHZpZGVvX2JveCksCi0gICAgICAgIEZBTFNFKTsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92aWRlb19ib3hfc2VsZWN0X3Byb2Nlc3NpbmdfZnVuY3Rpb25zIChHc3RWaWRlb0JveCAqIHZpZGVvX2JveCkKLXsKLSAgc3dpdGNoICh2aWRlb19ib3gtPm91dF9mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgIHZpZGVvX2JveC0+ZmlsbCA9IGZpbGxfYXl1djsKLSAgICAgIHN3aXRjaCAodmlkZW9fYm94LT5pbl9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICAgICAgdmlkZW9fYm94LT5jb3B5ID0gY29weV9heXV2X2F5dXY7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICAgICAgICB2aWRlb19ib3gtPmNvcHkgPSBjb3B5X2k0MjBfYXl1djsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94UkdCOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1J4OgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgICAgIHZpZGVvX2JveC0+Y29weSA9IGNvcHlfcmdiMzJfYXl1djsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgdmlkZW9fYm94LT5maWxsID0gZmlsbF9wbGFuYXJfeXV2OwotICAgICAgc3dpdGNoICh2aWRlb19ib3gtPmluX2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVlVVjoKLSAgICAgICAgICB2aWRlb19ib3gtPmNvcHkgPSBjb3B5X2F5dXZfaTQyMDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgICAgICAgIHZpZGVvX2JveC0+Y29weSA9IGNvcHlfaTQyMF9pNDIwOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgdmlkZW9fYm94LT5maWxsID0gKHZpZGVvX2JveC0+b3V0X2Zvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUgotICAgICAgICAgIHx8IHZpZGVvX2JveC0+b3V0X2Zvcm1hdCA9PQotICAgICAgICAgIEdTVF9WSURFT19GT1JNQVRfUkdCKSA/IGZpbGxfcmdiMjQgOiBmaWxsX3JnYjMyOwotICAgICAgc3dpdGNoICh2aWRlb19ib3gtPmluX2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0JBOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94QkdSOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCeDoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0I6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1I6Ci0gICAgICAgICAgdmlkZW9fYm94LT5jb3B5ID0gY29weV9yZ2IzMjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgICAgICAgdmlkZW9fYm94LT5jb3B5ID0gY29weV9heXV2X3JnYjMyOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0dSQVk4OgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9HUkFZMTZfQkU6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0dSQVkxNl9MRToKLSAgICAgIHZpZGVvX2JveC0+ZmlsbCA9IGZpbGxfZ3JheTsKLSAgICAgIHN3aXRjaCAodmlkZW9fYm94LT5pbl9mb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0dSQVk4OgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFOgotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0xFOgotICAgICAgICAgIHZpZGVvX2JveC0+Y29weSA9IGNvcHlfcGFja2VkX3NpbXBsZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgdmlkZW9fYm94LT5maWxsID0gZmlsbF95dXkyOwotICAgICAgc3dpdGNoICh2aWRlb19ib3gtPmluX2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVVZMjoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWWVU6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgICAgIHZpZGVvX2JveC0+Y29weSA9IGNvcHlfeXV5Ml95dXkyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICB2aWRlb19ib3gtPmZpbGwgPSBmaWxsX3BsYW5hcl95dXY7Ci0gICAgICBzd2l0Y2ggKHZpZGVvX2JveC0+aW5fZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgICAgIHZpZGVvX2JveC0+Y29weSA9IGNvcHlfeTQ0NF95NDQ0OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICAgICAgICB2aWRlb19ib3gtPmNvcHkgPSBjb3B5X3k0MmJfeTQyYjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICAgICAgdmlkZW9fYm94LT5jb3B5ID0gY29weV95NDFiX3k0MWI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gdmlkZW9fYm94LT5maWxsICE9IE5VTEwgJiYgdmlkZW9fYm94LT5jb3B5ICE9IE5VTEw7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZpZGVvX2JveF9zZXRfaW5mbyAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLCBHc3RDYXBzICogaW4sCi0gICAgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dCwgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFZpZGVvQm94ICp2aWRlb19ib3ggPSBHU1RfVklERU9fQk9YICh2ZmlsdGVyKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGdfbXV0ZXhfbG9jayAoJnZpZGVvX2JveC0+bXV0ZXgpOwotCi0gIHZpZGVvX2JveC0+aW5fZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbl9pbmZvKTsKLSAgdmlkZW9fYm94LT5pbl93aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKTsKLSAgdmlkZW9fYm94LT5pbl9oZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKGluX2luZm8pOwotCi0gIHZpZGVvX2JveC0+b3V0X2Zvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCAob3V0X2luZm8pOwotICB2aWRlb19ib3gtPm91dF93aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChvdXRfaW5mbyk7Ci0gIHZpZGVvX2JveC0+b3V0X2hlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAob3V0X2luZm8pOwotCi0gIHZpZGVvX2JveC0+aW5fc2R0diA9Ci0gICAgICBpbl9pbmZvLT5jb2xvcmltZXRyeS5tYXRyaXggPT0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDYwMTsKLSAgdmlkZW9fYm94LT5vdXRfc2R0diA9Ci0gICAgICBvdXRfaW5mby0+Y29sb3JpbWV0cnkubWF0cml4ID09IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQ2MDE7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9fYm94LCAiSW5wdXQgdzogJWQgaDogJWQiLCB2aWRlb19ib3gtPmluX3dpZHRoLAotICAgICAgdmlkZW9fYm94LT5pbl9oZWlnaHQpOwotICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb19ib3gsICJPdXRwdXQgdzogJWQgaDogJWQiLCB2aWRlb19ib3gtPm91dF93aWR0aCwKLSAgICAgIHZpZGVvX2JveC0+b3V0X2hlaWdodCk7Ci0KLSAgaWYgKHZpZGVvX2JveC0+YXV0b2Nyb3ApCi0gICAgZ3N0X3ZpZGVvX2JveF9hdXRvY3JvcCAodmlkZW9fYm94KTsKLQotICAvKiByZWNhbGMgdGhlIHRyYW5zZm9ybWF0aW9uIHN0cmF0ZWd5ICovCi0gIHJldCA9IGdzdF92aWRlb19ib3hfcmVjYWxjX3RyYW5zZm9ybSAodmlkZW9fYm94KTsKLQotICBpZiAocmV0KQotICAgIHJldCA9IGdzdF92aWRlb19ib3hfc2VsZWN0X3Byb2Nlc3NpbmdfZnVuY3Rpb25zICh2aWRlb19ib3gpOwotICBnX211dGV4X3VubG9jayAoJnZpZGVvX2JveC0+bXV0ZXgpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZpZGVvX2JveF9zcmNfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0VmlkZW9Cb3ggKnZpZGVvX2JveCA9IEdTVF9WSURFT19CT1ggKHRyYW5zKTsKLSAgR3N0U3RydWN0dXJlICpuZXdfc3RydWN0dXJlOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgZ2NoYXIgKmV2ZW50X25hbWU7Ci0gIGdkb3VibGUgcG9pbnRlcl94OwotICBnZG91YmxlIHBvaW50ZXJfeTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHZpZGVvX2JveCk7Ci0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9OQVZJR0FUSU9OICYmCi0gICAgICAodmlkZW9fYm94LT5ib3hfbGVmdCAhPSAwIHx8IHZpZGVvX2JveC0+Ym94X3RvcCAhPSAwKSkgewotICAgIHN0cnVjdHVyZSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgZXZlbnRfbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZXZlbnQiKTsKLQotICAgIGlmIChldmVudF9uYW1lICYmCi0gICAgICAgIChzdHJjbXAgKGV2ZW50X25hbWUsICJtb3VzZS1tb3ZlIikgPT0gMCB8fAotICAgICAgICAgICAgc3RyY21wIChldmVudF9uYW1lLCAibW91c2UtYnV0dG9uLXByZXNzIikgPT0gMCB8fAotICAgICAgICAgICAgc3RyY21wIChldmVudF9uYW1lLCAibW91c2UtYnV0dG9uLXJlbGVhc2UiKSA9PSAwKSkgewotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoc3RydWN0dXJlLCAicG9pbnRlcl94IiwgJnBvaW50ZXJfeCkgJiYKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHN0cnVjdHVyZSwgInBvaW50ZXJfeSIsICZwb2ludGVyX3kpKSB7Ci0gICAgICAgIGdkb3VibGUgbmV3X3BvaW50ZXJfeCwgbmV3X3BvaW50ZXJfeTsKLSAgICAgICAgR3N0RXZlbnQgKm5ld19ldmVudDsKLQotICAgICAgICBuZXdfcG9pbnRlcl94ID0gcG9pbnRlcl94ICsgdmlkZW9fYm94LT5ib3hfbGVmdDsKLSAgICAgICAgbmV3X3BvaW50ZXJfeSA9IHBvaW50ZXJfeSArIHZpZGVvX2JveC0+Ym94X3RvcDsKLQotICAgICAgICBuZXdfc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAobmV3X3N0cnVjdHVyZSwKLSAgICAgICAgICAgICJwb2ludGVyX3giLCBHX1RZUEVfRE9VQkxFLCAoZ2RvdWJsZSkgKG5ld19wb2ludGVyX3gpLAotICAgICAgICAgICAgInBvaW50ZXJfeSIsIEdfVFlQRV9ET1VCTEUsIChnZG91YmxlKSAobmV3X3BvaW50ZXJfeSksIE5VTEwpOwotCi0gICAgICAgIG5ld19ldmVudCA9IGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAobmV3X3N0cnVjdHVyZSk7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBldmVudCA9IG5ld19ldmVudDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodmlkZW9fYm94LCAiRmFpbGVkIHRvIHJlYWQgbmF2aWdhdGlvbiBldmVudCIpOwotICAgICAgfQotICAgIH0KLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAodmlkZW9fYm94KTsKLQotICByZXR1cm4gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zcmNfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fYm94X3Byb2Nlc3MgKEdzdFZpZGVvQm94ICogdmlkZW9fYm94LCBHc3RWaWRlb0ZyYW1lICogaW4sCi0gICAgR3N0VmlkZW9GcmFtZSAqIG91dCkKLXsKLSAgZ3VpbnQgYl9hbHBoYSA9IENMQU1QICh2aWRlb19ib3gtPmJvcmRlcl9hbHBoYSAqIDI1NiwgMCwgMjU1KTsKLSAgZ3VpbnQgaV9hbHBoYSA9IENMQU1QICh2aWRlb19ib3gtPmFscGhhICogMjU2LCAwLCAyNTUpOwotICBHc3RWaWRlb0JveEZpbGwgZmlsbF90eXBlID0gdmlkZW9fYm94LT5maWxsX3R5cGU7Ci0gIGdpbnQgYnIsIGJsLCBidCwgYmIsIGNyb3BfdywgY3JvcF9oOwotCi0gIGNyb3BfaCA9IDA7Ci0gIGNyb3BfdyA9IDA7Ci0KLSAgYnIgPSB2aWRlb19ib3gtPmJveF9yaWdodDsKLSAgYmwgPSB2aWRlb19ib3gtPmJveF9sZWZ0OwotICBidCA9IHZpZGVvX2JveC0+Ym94X3RvcDsKLSAgYmIgPSB2aWRlb19ib3gtPmJveF9ib3R0b207Ci0KLSAgaWYgKGJyID49IDAgJiYgYmwgPj0gMCkgewotICAgIGNyb3BfdyA9IHZpZGVvX2JveC0+aW5fd2lkdGggLSAoYnIgKyBibCk7Ci0gIH0gZWxzZSBpZiAoYnIgPj0gMCAmJiBibCA8IDApIHsKLSAgICBjcm9wX3cgPSB2aWRlb19ib3gtPmluX3dpZHRoIC0gKGJyKTsKLSAgfSBlbHNlIGlmIChiciA8IDAgJiYgYmwgPj0gMCkgewotICAgIGNyb3BfdyA9IHZpZGVvX2JveC0+aW5fd2lkdGggLSAoYmwpOwotICB9IGVsc2UgaWYgKGJyIDwgMCAmJiBibCA8IDApIHsKLSAgICBjcm9wX3cgPSB2aWRlb19ib3gtPmluX3dpZHRoOwotICB9Ci0KLSAgaWYgKGJiID49IDAgJiYgYnQgPj0gMCkgewotICAgIGNyb3BfaCA9IHZpZGVvX2JveC0+aW5faGVpZ2h0IC0gKGJiICsgYnQpOwotICB9IGVsc2UgaWYgKGJiID49IDAgJiYgYnQgPCAwKSB7Ci0gICAgY3JvcF9oID0gdmlkZW9fYm94LT5pbl9oZWlnaHQgLSAoYmIpOwotICB9IGVsc2UgaWYgKGJiIDwgMCAmJiBidCA+PSAwKSB7Ci0gICAgY3JvcF9oID0gdmlkZW9fYm94LT5pbl9oZWlnaHQgLSAoYnQpOwotICB9IGVsc2UgaWYgKGJiIDwgMCAmJiBidCA8IDApIHsKLSAgICBjcm9wX2ggPSB2aWRlb19ib3gtPmluX2hlaWdodDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvX2JveCwgIkJvcmRlcnMgYXJlOiBMOiVkLCBSOiVkLCBUOiVkLCBCOiVkIiwgYmwsIGJyLAotICAgICAgYnQsIGJiKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9fYm94LCAiQWxwaGEgdmFsdWUgaXM6ICV1IChmcmFtZSkgJXUgKGJvcmRlcikiLAotICAgICAgaV9hbHBoYSwgYl9hbHBoYSk7Ci0KLSAgaWYgKGNyb3BfaCA8IDAgfHwgY3JvcF93IDwgMCkgewotICAgIHZpZGVvX2JveC0+ZmlsbCAoZmlsbF90eXBlLCBiX2FscGhhLCBvdXQsIHZpZGVvX2JveC0+b3V0X3NkdHYpOwotICB9IGVsc2UgaWYgKGJiID09IDAgJiYgYnQgPT0gMCAmJiBiciA9PSAwICYmIGJsID09IDApIHsKLSAgICB2aWRlb19ib3gtPmNvcHkgKGlfYWxwaGEsIG91dCwgdmlkZW9fYm94LT5vdXRfc2R0diwgMCwgMCwgaW4sCi0gICAgICAgIHZpZGVvX2JveC0+aW5fc2R0diwgMCwgMCwgY3JvcF93LCBjcm9wX2gpOwotICB9IGVsc2UgewotICAgIGdpbnQgc3JjX3ggPSAwLCBzcmNfeSA9IDA7Ci0gICAgZ2ludCBkZXN0X3ggPSAwLCBkZXN0X3kgPSAwOwotCi0gICAgLyogRmlsbCBldmVyeXRoaW5nIGlmIGEgYm9yZGVyIHNob3VsZCBiZSBhZGRlZCBzb21ld2hlcmUgKi8KLSAgICBpZiAoYnQgPCAwIHx8IGJiIDwgMCB8fCBiciA8IDAgfHwgYmwgPCAwKQotICAgICAgdmlkZW9fYm94LT5maWxsIChmaWxsX3R5cGUsIGJfYWxwaGEsIG91dCwgdmlkZW9fYm94LT5vdXRfc2R0dik7Ci0KLSAgICAvKiBUb3AgYm9yZGVyICovCi0gICAgaWYgKGJ0IDwgMCkgewotICAgICAgZGVzdF95ICs9IC1idDsKLSAgICB9IGVsc2UgewotICAgICAgc3JjX3kgKz0gYnQ7Ci0gICAgfQotCi0gICAgLyogTGVmdCBib3JkZXIgKi8KLSAgICBpZiAoYmwgPCAwKSB7Ci0gICAgICBkZXN0X3ggKz0gLWJsOwotICAgIH0gZWxzZSB7Ci0gICAgICBzcmNfeCArPSBibDsKLSAgICB9Ci0KLSAgICAvKiBGcmFtZSAqLwotICAgIHZpZGVvX2JveC0+Y29weSAoaV9hbHBoYSwgb3V0LCB2aWRlb19ib3gtPm91dF9zZHR2LCBkZXN0X3gsIGRlc3RfeSwKLSAgICAgICAgaW4sIHZpZGVvX2JveC0+aW5fc2R0diwgc3JjX3gsIHNyY195LCBjcm9wX3csIGNyb3BfaCk7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAodmlkZW9fYm94LCAiaW1hZ2UgY3JlYXRlZCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2JveF9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGluKQotewotICBHc3RWaWRlb0JveCAqdmlkZW9fYm94ID0gR1NUX1ZJREVPX0JPWCAodHJhbnMpOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBzdHJlYW1fdGltZTsKLQotICB0aW1lc3RhbXAgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW4pOwotICBzdHJlYW1fdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJnRyYW5zLT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9fYm94LCAic3luYyB0byAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHN0cmVhbV90aW1lKSkKLSAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUICh2aWRlb19ib3gpLCBzdHJlYW1fdGltZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdmlkZW9fYm94X3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0VmlkZW9Cb3ggKnZpZGVvX2JveCA9IEdTVF9WSURFT19CT1ggKHZmaWx0ZXIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJnZpZGVvX2JveC0+bXV0ZXgpOwotICBnc3RfdmlkZW9fYm94X3Byb2Nlc3MgKHZpZGVvX2JveCwgaW5fZnJhbWUsIG91dF9mcmFtZSk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmdmlkZW9fYm94LT5tdXRleCk7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogRklYTUU6IDAuMTEgbWVyZ2Ugd2l0aCB2aWRlb2Nyb3AgcGx1Z2luICovCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2aWRlb2JveF9kZWJ1ZywgInZpZGVvYm94IiwgMCwKLSAgICAgICJSZXNpemVzIGEgdmlkZW8gYnkgYWRkaW5nIGJvcmRlcnMgb3IgY3JvcHBpbmciKTsKLQotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInZpZGVvYm94IiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1ZJREVPX0JPWCk7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICB2aWRlb2JveCwKLSAgICAicmVzaXplcyBhIHZpZGVvIGJ5IGFkZGluZyBib3JkZXJzIG9yIGNyb3BwaW5nIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveC5oIGIvZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjk4YWMuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvYm94L2dzdHZpZGVvYm94LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2lmbmRlZiBfX0dTVF9WSURFT19CT1hfSF9fCi0jZGVmaW5lIF9fR1NUX1ZJREVPX0JPWF9IX18KLQotI2RlZmluZSBHU1RfVFlQRV9WSURFT19CT1ggXAotICAoZ3N0X3ZpZGVvX2JveF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVklERU9fQk9YKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVklERU9fQk9YLEdzdFZpZGVvQm94KSkKLSNkZWZpbmUgR1NUX1ZJREVPX0JPWF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WSURFT19CT1gsR3N0VmlkZW9Cb3hDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WSURFT19CT1gob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WSURFT19CT1gpKQotI2RlZmluZSBHU1RfSVNfVklERU9fQk9YX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1ZJREVPX0JPWCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0JveCBHc3RWaWRlb0JveDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0JveENsYXNzIEdzdFZpZGVvQm94Q2xhc3M7Ci0KLXR5cGVkZWYgZW51bQotewotICBWSURFT19CT1hfRklMTF9CTEFDSywKLSAgVklERU9fQk9YX0ZJTExfR1JFRU4sCi0gIFZJREVPX0JPWF9GSUxMX0JMVUUsCi0gIFZJREVPX0JPWF9GSUxMX1JFRCwKLSAgVklERU9fQk9YX0ZJTExfWUVMTE9XLAotICBWSURFT19CT1hfRklMTF9XSElURSwKLSAgVklERU9fQk9YX0ZJTExfTEFTVAotfQotR3N0VmlkZW9Cb3hGaWxsOwotCi1zdHJ1Y3QgX0dzdFZpZGVvQm94Ci17Ci0gIEdzdFZpZGVvRmlsdGVyIGVsZW1lbnQ7Ci0KLSAgLyogPHByaXZhdGU+ICovCi0KLSAgLyogR3VhcmRpbmcgZXZlcnl0aGluZyBiZWxvdyAqLwotICBHTXV0ZXggbXV0ZXg7Ci0gIC8qIGNhcHMgKi8KLSAgR3N0VmlkZW9Gb3JtYXQgaW5fZm9ybWF0OwotICBnaW50IGluX3dpZHRoLCBpbl9oZWlnaHQ7Ci0gIGdib29sZWFuIGluX3NkdHY7Ci0gIEdzdFZpZGVvRm9ybWF0IG91dF9mb3JtYXQ7Ci0gIGdpbnQgb3V0X3dpZHRoLCBvdXRfaGVpZ2h0OwotICBnYm9vbGVhbiBvdXRfc2R0djsKLQotICBnaW50IGJveF9sZWZ0LCBib3hfcmlnaHQsIGJveF90b3AsIGJveF9ib3R0b207Ci0KLSAgZ2ludCBib3JkZXJfbGVmdCwgYm9yZGVyX3JpZ2h0LCBib3JkZXJfdG9wLCBib3JkZXJfYm90dG9tOwotICBnaW50IGNyb3BfbGVmdCwgY3JvcF9yaWdodCwgY3JvcF90b3AsIGNyb3BfYm90dG9tOwotCi0gIGdkb3VibGUgYWxwaGE7Ci0gIGdkb3VibGUgYm9yZGVyX2FscGhhOwotCi0gIEdzdFZpZGVvQm94RmlsbCBmaWxsX3R5cGU7Ci0KLSAgZ2Jvb2xlYW4gYXV0b2Nyb3A7Ci0KLSAgdm9pZCAoKmZpbGwpIChHc3RWaWRlb0JveEZpbGwgZmlsbF90eXBlLCBndWludCBiX2FscGhhLCBHc3RWaWRlb0ZyYW1lICpkZXN0LCBnYm9vbGVhbiBzZHR2KTsKLSAgdm9pZCAoKmNvcHkpIChndWludCBpX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdCwgZ2Jvb2xlYW4gZGVzdF9zZHR2LCBnaW50IGRlc3RfeCwgZ2ludCBkZXN0X3ksIEdzdFZpZGVvRnJhbWUgKiBzcmMsIGdib29sZWFuIHNyY19zZHR2LCBnaW50IHNyY194LCBnaW50IHNyY195LCBnaW50IHcsIGdpbnQgaCk7Ci19OwotCi1zdHJ1Y3QgX0dzdFZpZGVvQm94Q2xhc3MKLXsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfdmlkZW9fYm94X2dldF90eXBlICh2b2lkKTsKLQotI2VuZGlmIC8qIF9fR1NUX1ZJREVPX0JPWF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmMgYi9nc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmVmN2EwLi4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDIgKzAsMCBAQAotCi0vKiBhdXRvZ2VuZXJhdGVkIGZyb20gZ3N0dmlkZW9ib3hvcmMub3JjICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZm5kZWYgX09SQ19JTlRFR0VSX1RZUEVERUZTXwotI2RlZmluZSBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLXR5cGVkZWYgaW50OF90IG9yY19pbnQ4OwotdHlwZWRlZiBpbnQxNl90IG9yY19pbnQxNjsKLXR5cGVkZWYgaW50MzJfdCBvcmNfaW50MzI7Ci10eXBlZGVmIGludDY0X3Qgb3JjX2ludDY0OwotdHlwZWRlZiB1aW50OF90IG9yY191aW50ODsKLXR5cGVkZWYgdWludDE2X3Qgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdWludDMyX3Qgb3JjX3VpbnQzMjsKLXR5cGVkZWYgdWludDY0X3Qgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpIFVJTlQ2NF9DKHgpCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBzaWduZWQgX19pbnQ4IG9yY19pbnQ4OwotdHlwZWRlZiBzaWduZWQgX19pbnQxNiBvcmNfaW50MTY7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDMyIG9yY19pbnQzMjsKLXR5cGVkZWYgc2lnbmVkIF9faW50NjQgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDggb3JjX3VpbnQ4OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2IG9yY191aW50MTY7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgb3JjX3VpbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VpNjQpCi0jZGVmaW5lIGlubGluZSBfX2lubGluZQotI2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLXR5cGVkZWYgc2lnbmVkIGNoYXIgb3JjX2ludDg7Ci10eXBlZGVmIHNob3J0IG9yY19pbnQxNjsKLXR5cGVkZWYgaW50IG9yY19pbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG9yY191aW50MTY7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBvcmNfdWludDMyOwotI2lmIElOVF9NQVggPT0gTE9OR19NQVgKLXR5cGVkZWYgbG9uZyBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVUxMKQotI2Vsc2UKLXR5cGVkZWYgbG9uZyBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTCkKLSNlbmRpZgotI2VuZGlmCi10eXBlZGVmIHVuaW9uCi17Ci0gIG9yY19pbnQxNiBpOwotICBvcmNfaW50OCB4MlsyXTsKLX0gb3JjX3VuaW9uMTY7Ci10eXBlZGVmIHVuaW9uCi17Ci0gIG9yY19pbnQzMiBpOwotICBmbG9hdCBmOwotICBvcmNfaW50MTYgeDJbMl07Ci0gIG9yY19pbnQ4IHg0WzRdOwotfSBvcmNfdW5pb24zMjsKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDY0IGk7Ci0gIGRvdWJsZSBmOwotICBvcmNfaW50MzIgeDJbMl07Ci0gIGZsb2F0IHgyZlsyXTsKLSAgb3JjX2ludDE2IHg0WzRdOwotfSBvcmNfdW5pb242NDsKLSNlbmRpZgotI2lmbmRlZiBPUkNfUkVTVFJJQ1QKLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgcmVzdHJpY3QKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKLSNkZWZpbmUgT1JDX1JFU1RSSUNUIF9fcmVzdHJpY3RfXwotI2Vsc2UKLSNkZWZpbmUgT1JDX1JFU1RSSUNUCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIE9SQ19JTlRFUk5BTAotI2lmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1OTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0MpICYmIChfX1NVTlBST19DID49IDB4NTUwKQotI2RlZmluZSBPUkNfSU5URVJOQUwgX19oaWRkZW4KLSNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQotI2RlZmluZSBPUkNfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQotI2Vsc2UKLSNkZWZpbmUgT1JDX0lOVEVSTkFMCi0jZW5kaWYKLSNlbmRpZgotCi0KLSNpZm5kZWYgRElTQUJMRV9PUkMKLSNpbmNsdWRlIDxvcmMvb3JjLmg+Ci0jZW5kaWYKLXZvaWQgdmlkZW9fYm94X29yY19zcGxhdF91MzIgKGd1aW50MzIgKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBwMSwgaW50IG4pOwotCi0KLS8qIGJlZ2luIE9yYyBDIHRhcmdldCBwcmVhbWJsZSAqLwotI2RlZmluZSBPUkNfQ0xBTVAoeCxhLGIpICgoeCk8KGEpID8gKGEpIDogKCh4KT4oYikgPyAoYikgOiAoeCkpKQotI2RlZmluZSBPUkNfQUJTKGEpICgoYSk8MCA/IC0oYSkgOiAoYSkpCi0jZGVmaW5lIE9SQ19NSU4oYSxiKSAoKGEpPChiKSA/IChhKSA6IChiKSkKLSNkZWZpbmUgT1JDX01BWChhLGIpICgoYSk+KGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBPUkNfU0JfTUFYIDEyNwotI2RlZmluZSBPUkNfU0JfTUlOICgtMS1PUkNfU0JfTUFYKQotI2RlZmluZSBPUkNfVUJfTUFYIDI1NQotI2RlZmluZSBPUkNfVUJfTUlOIDAKLSNkZWZpbmUgT1JDX1NXX01BWCAzMjc2NwotI2RlZmluZSBPUkNfU1dfTUlOICgtMS1PUkNfU1dfTUFYKQotI2RlZmluZSBPUkNfVVdfTUFYIDY1NTM1Ci0jZGVmaW5lIE9SQ19VV19NSU4gMAotI2RlZmluZSBPUkNfU0xfTUFYIDIxNDc0ODM2NDcKLSNkZWZpbmUgT1JDX1NMX01JTiAoLTEtT1JDX1NMX01BWCkKLSNkZWZpbmUgT1JDX1VMX01BWCA0Mjk0OTY3Mjk1VQotI2RlZmluZSBPUkNfVUxfTUlOIDAKLSNkZWZpbmUgT1JDX0NMQU1QX1NCKHgpIE9SQ19DTEFNUCh4LE9SQ19TQl9NSU4sT1JDX1NCX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VCKHgpIE9SQ19DTEFNUCh4LE9SQ19VQl9NSU4sT1JDX1VCX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1NXKHgpIE9SQ19DTEFNUCh4LE9SQ19TV19NSU4sT1JDX1NXX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VXKHgpIE9SQ19DTEFNUCh4LE9SQ19VV19NSU4sT1JDX1VXX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1NMKHgpIE9SQ19DTEFNUCh4LE9SQ19TTF9NSU4sT1JDX1NMX01BWCkKLSNkZWZpbmUgT1JDX0NMQU1QX1VMKHgpIE9SQ19DTEFNUCh4LE9SQ19VTF9NSU4sT1JDX1VMX01BWCkKLSNkZWZpbmUgT1JDX1NXQVBfVyh4KSAoKCgoeCkmMHhmZlUpPDw4KSB8ICgoKHgpJjB4ZmYwMFUpPj44KSkKLSNkZWZpbmUgT1JDX1NXQVBfTCh4KSAoKCgoeCkmMHhmZlUpPDwyNCkgfCAoKCh4KSYweGZmMDBVKTw8OCkgfCAoKCh4KSYweGZmMDAwMFUpPj44KSB8ICgoKHgpJjB4ZmYwMDAwMDBVKT4+MjQpKQotI2RlZmluZSBPUkNfU1dBUF9RKHgpICgoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZikpPDw1NikgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwKSk8PDQwKSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMCkpPDwyNCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMCkpPDw4KSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMDAwMDApKT4+OCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMDAwMDApKT4+MjQpIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMDAwMDApKT4+NDApIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMDAwMDAwMCkpPj41NikpCi0jZGVmaW5lIE9SQ19QVFJfT0ZGU0VUKHB0cixvZmZzZXQpICgodm9pZCAqKSgoKHVuc2lnbmVkIGNoYXIgKikocHRyKSkgKyAob2Zmc2V0KSkpCi0jZGVmaW5lIE9SQ19ERU5PUk1BTCh4KSAoKHgpICYgKCgoKHgpJjB4N2Y4MDAwMDApID09IDApID8gMHhmZjgwMDAwMCA6IDB4ZmZmZmZmZmYpKQotI2RlZmluZSBPUkNfSVNOQU4oeCkgKCgoKHgpJjB4N2Y4MDAwMDApID09IDB4N2Y4MDAwMDApICYmICgoKHgpJjB4MDA3ZmZmZmYpICE9IDApKQotI2RlZmluZSBPUkNfREVOT1JNQUxfRE9VQkxFKHgpICgoeCkgJiAoKCgoeCkmT1JDX1VJTlQ2NF9DKDB4N2ZmMDAwMDAwMDAwMDAwMCkpID09IDApID8gT1JDX1VJTlQ2NF9DKDB4ZmZmMDAwMDAwMDAwMDAwMCkgOiBPUkNfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSkpCi0jZGVmaW5lIE9SQ19JU05BTl9ET1VCTEUoeCkgKCgoKHgpJk9SQ19VSU5UNjRfQygweDdmZjAwMDAwMDAwMDAwMDApKSA9PSBPUkNfVUlOVDY0X0MoMHg3ZmYwMDAwMDAwMDAwMDAwKSkgJiYgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4MDAwZmZmZmZmZmZmZmZmZikpICE9IDApKQotI2lmbmRlZiBPUkNfUkVTVFJJQ1QKLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgcmVzdHJpY3QKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKLSNkZWZpbmUgT1JDX1JFU1RSSUNUIF9fcmVzdHJpY3RfXwotI2Vsc2UKLSNkZWZpbmUgT1JDX1JFU1RSSUNUCi0jZW5kaWYKLSNlbmRpZgotLyogZW5kIE9yYyBDIHRhcmdldCBwcmVhbWJsZSAqLwotCi0KLQotLyogdmlkZW9fYm94X29yY19zcGxhdF91MzIgKi8KLSNpZmRlZiBESVNBQkxFX09SQwotdm9pZAotdmlkZW9fYm94X29yY19zcGxhdF91MzIgKGd1aW50MzIgKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIG9yY191bmlvbjMyIHZhcjMyOwotICBvcmNfdW5pb24zMiB2YXIzMzsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotCi0gIC8qIDA6IGxvYWRwbCAqLwotICB2YXIzMi5pID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDE6IGNvcHlsICovCi0gICAgdmFyMzMuaSA9IHZhcjMyLmk7Ci0gICAgLyogMjogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjMzOwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX3ZpZGVvX2JveF9vcmNfc3BsYXRfdTMyIChPcmNFeGVjdXRvciAqIE9SQ19SRVNUUklDVCBleCkKLXsKLSAgaW50IGk7Ci0gIGludCBuID0gZXgtPm47Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgb3JjX3VuaW9uMzIgdmFyMzI7Ci0gIG9yY191bmlvbjMyIHZhcjMzOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1swXTsKLQotICAvKiAwOiBsb2FkcGwgKi8KLSAgdmFyMzIuaSA9IGV4LT5wYXJhbXNbMjRdOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAxOiBjb3B5bCAqLwotICAgIHZhcjMzLmkgPSB2YXIzMi5pOwotICAgIC8qIDI6IHN0b3JlbCAqLwotICAgIHB0cjBbaV0gPSB2YXIzMzsKLSAgfQotCi19Ci0KLXZvaWQKLXZpZGVvX2JveF9vcmNfc3BsYXRfdTMyIChndWludDMyICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgcDEsIGludCBuKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgOSwgMjMsIDExOCwgMTA1LCAxMDAsIDEwMSwgMTExLCA5NSwgOTgsIDExMSwgMTIwLCA5NSwgMTExLCAxMTQsIDk5LAotICAgICAgICA5NSwgMTE1LCAxMTIsIDEwOCwgOTcsIDExNiwgOTUsIDExNywgNTEsIDUwLCAxMSwgNCwgNCwgMTYsIDQsIDExMiwKLSAgICAgICAgMCwgMjQsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19ib3hfb3JjX3NwbGF0X3UzMik7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAidmlkZW9fYm94X29yY19zcGxhdF91MzIiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfdmlkZW9fYm94X29yY19zcGxhdF91MzIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXIgKHAsIDQsICJwMSIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvcHlsIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9QMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHAxOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmggYi9nc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMtZGlzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2MyZDBiLi4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy1kaXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0KLS8qIGF1dG9nZW5lcmF0ZWQgZnJvbSBnc3R2aWRlb2JveG9yYy5vcmMgKi8KLQotI2lmbmRlZiBfR1NUVklERU9CT1hPUkNfSF8KLSNkZWZpbmUgX0dTVFZJREVPQk9YT1JDX0hfCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotCi0KLSNpZm5kZWYgX09SQ19JTlRFR0VSX1RZUEVERUZTXwotI2RlZmluZSBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLXR5cGVkZWYgaW50OF90IG9yY19pbnQ4OwotdHlwZWRlZiBpbnQxNl90IG9yY19pbnQxNjsKLXR5cGVkZWYgaW50MzJfdCBvcmNfaW50MzI7Ci10eXBlZGVmIGludDY0X3Qgb3JjX2ludDY0OwotdHlwZWRlZiB1aW50OF90IG9yY191aW50ODsKLXR5cGVkZWYgdWludDE2X3Qgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdWludDMyX3Qgb3JjX3VpbnQzMjsKLXR5cGVkZWYgdWludDY0X3Qgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpIFVJTlQ2NF9DKHgpCi0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotdHlwZWRlZiBzaWduZWQgX19pbnQ4IG9yY19pbnQ4OwotdHlwZWRlZiBzaWduZWQgX19pbnQxNiBvcmNfaW50MTY7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDMyIG9yY19pbnQzMjsKLXR5cGVkZWYgc2lnbmVkIF9faW50NjQgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDggb3JjX3VpbnQ4OwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2IG9yY191aW50MTY7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgb3JjX3VpbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VpNjQpCi0jZGVmaW5lIGlubGluZSBfX2lubGluZQotI2Vsc2UKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLXR5cGVkZWYgc2lnbmVkIGNoYXIgb3JjX2ludDg7Ci10eXBlZGVmIHNob3J0IG9yY19pbnQxNjsKLXR5cGVkZWYgaW50IG9yY19pbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG9yY191aW50MTY7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBvcmNfdWludDMyOwotI2lmIElOVF9NQVggPT0gTE9OR19NQVgKLXR5cGVkZWYgbG9uZyBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVUxMKQotI2Vsc2UKLXR5cGVkZWYgbG9uZyBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTCkKLSNlbmRpZgotI2VuZGlmCi10eXBlZGVmIHVuaW9uIHsgb3JjX2ludDE2IGk7IG9yY19pbnQ4IHgyWzJdOyB9IG9yY191bmlvbjE2OwotdHlwZWRlZiB1bmlvbiB7IG9yY19pbnQzMiBpOyBmbG9hdCBmOyBvcmNfaW50MTYgeDJbMl07IG9yY19pbnQ4IHg0WzRdOyB9IG9yY191bmlvbjMyOwotdHlwZWRlZiB1bmlvbiB7IG9yY19pbnQ2NCBpOyBkb3VibGUgZjsgb3JjX2ludDMyIHgyWzJdOyBmbG9hdCB4MmZbMl07IG9yY19pbnQxNiB4NFs0XTsgfSBvcmNfdW5pb242NDsKLSNlbmRpZgotI2lmbmRlZiBPUkNfUkVTVFJJQ1QKLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgcmVzdHJpY3QKLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKLSNkZWZpbmUgT1JDX1JFU1RSSUNUIF9fcmVzdHJpY3RfXwotI2Vsc2UKLSNkZWZpbmUgT1JDX1JFU1RSSUNUCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIE9SQ19JTlRFUk5BTAotI2lmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1OTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0MpICYmIChfX1NVTlBST19DID49IDB4NTUwKQotI2RlZmluZSBPUkNfSU5URVJOQUwgX19oaWRkZW4KLSNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQotI2RlZmluZSBPUkNfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQotI2Vsc2UKLSNkZWZpbmUgT1JDX0lOVEVSTkFMCi0jZW5kaWYKLSNlbmRpZgotCi12b2lkIHZpZGVvX2JveF9vcmNfc3BsYXRfdTMyIChndWludDMyICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgcDEsIGludCBuKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy5vcmMgYi9nc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMub3JjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGJmOWU3Li4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy5vcmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotLmZ1bmN0aW9uIHZpZGVvX2JveF9vcmNfc3BsYXRfdTMyCi0uZGVzdCA0IGQxIGd1aW50MzIKLS5wYXJhbSA0IHAxCi0KLWNvcHlsIGQxLCBwMQotCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9jcm9wL01ha2VmaWxlLmFtIGIvZ3N0L3ZpZGVvY3JvcC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTliNjljYi4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9jcm9wL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0dmlkZW9jcm9wLmxhCi0KLSMgTm90ZTogd2Ugb25seSB1c2UgZGVmaW5lcyBmcm9tIGdzdC92aWRlby92aWRlby5oLCBidXQgbm9uZQotIyBvZiB0aGUgZnVuY3Rpb25zLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGxpbmsgdG8gbGliZ3N0dmlkZW8KLQotbGliZ3N0dmlkZW9jcm9wX2xhX1NPVVJDRVMgPSBnc3R2aWRlb2Nyb3AuYyBnc3Rhc3BlY3RyYXRpb2Nyb3AuYwotbGliZ3N0dmlkZW9jcm9wX2xhX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKQotbGliZ3N0dmlkZW9jcm9wX2xhX0xJQkFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pCi1saWJnc3R2aWRlb2Nyb3BfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0dmlkZW9jcm9wX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0dmlkZW9jcm9wLmggZ3N0YXNwZWN0cmF0aW9jcm9wLmgKZGlmZiAtLWdpdCBhL2dzdC92aWRlb2Nyb3AvTWFrZWZpbGUuaW4gYi9nc3QvdmlkZW9jcm9wL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzk4OTljLi4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2Nyb3AvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MjMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3ZpZGVvY3JvcAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHZpZGVvY3JvcF9sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0dmlkZW9jcm9wX2xhX09CSkVDVFMgPSBsaWJnc3R2aWRlb2Nyb3BfbGEtZ3N0dmlkZW9jcm9wLmxvIFwKLQlsaWJnc3R2aWRlb2Nyb3BfbGEtZ3N0YXNwZWN0cmF0aW9jcm9wLmxvCi1saWJnc3R2aWRlb2Nyb3BfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0dmlkZW9jcm9wX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3R2aWRlb2Nyb3BfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3R2aWRlb2Nyb3BfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3R2aWRlb2Nyb3BfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0dmlkZW9jcm9wX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHZpZGVvY3JvcF9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R2aWRlb2Nyb3BfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0dmlkZW9jcm9wLmxhCi0KLSMgTm90ZTogd2Ugb25seSB1c2UgZGVmaW5lcyBmcm9tIGdzdC92aWRlby92aWRlby5oLCBidXQgbm9uZQotIyBvZiB0aGUgZnVuY3Rpb25zLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGxpbmsgdG8gbGliZ3N0dmlkZW8KLWxpYmdzdHZpZGVvY3JvcF9sYV9TT1VSQ0VTID0gZ3N0dmlkZW9jcm9wLmMgZ3N0YXNwZWN0cmF0aW9jcm9wLmMKLWxpYmdzdHZpZGVvY3JvcF9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLQotbGliZ3N0dmlkZW9jcm9wX2xhX0xJQkFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pCi1saWJnc3R2aWRlb2Nyb3BfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0dmlkZW9jcm9wX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdHZpZGVvY3JvcC5oIGdzdGFzcGVjdHJhdGlvY3JvcC5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBnc3QvdmlkZW9jcm9wL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC92aWRlb2Nyb3AvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R2aWRlb2Nyb3AubGE6ICQobGliZ3N0dmlkZW9jcm9wX2xhX09CSkVDVFMpICQobGliZ3N0dmlkZW9jcm9wX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R2aWRlb2Nyb3BfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHZpZGVvY3JvcF9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0dmlkZW9jcm9wX2xhX09CSkVDVFMpICQobGliZ3N0dmlkZW9jcm9wX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW9jcm9wX2xhLWdzdGFzcGVjdHJhdGlvY3JvcC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvY3JvcF9sYS1nc3R2aWRlb2Nyb3AuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHZpZGVvY3JvcF9sYS1nc3R2aWRlb2Nyb3AubG86IGdzdHZpZGVvY3JvcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9jcm9wX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvY3JvcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW9jcm9wX2xhLWdzdHZpZGVvY3JvcC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW9jcm9wX2xhLWdzdHZpZGVvY3JvcC5UcG8gLWMgLW8gbGliZ3N0dmlkZW9jcm9wX2xhLWdzdHZpZGVvY3JvcC5sbyBgdGVzdCAtZiAnZ3N0dmlkZW9jcm9wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZpZGVvY3JvcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb2Nyb3BfbGEtZ3N0dmlkZW9jcm9wLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW9jcm9wX2xhLWdzdHZpZGVvY3JvcC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2aWRlb2Nyb3AuYycgb2JqZWN0PSdsaWJnc3R2aWRlb2Nyb3BfbGEtZ3N0dmlkZW9jcm9wLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9jcm9wX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvY3JvcF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlb2Nyb3BfbGEtZ3N0dmlkZW9jcm9wLmxvIGB0ZXN0IC1mICdnc3R2aWRlb2Nyb3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmlkZW9jcm9wLmMKLQotbGliZ3N0dmlkZW9jcm9wX2xhLWdzdGFzcGVjdHJhdGlvY3JvcC5sbzogZ3N0YXNwZWN0cmF0aW9jcm9wLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2Nyb3BfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW9jcm9wX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb2Nyb3BfbGEtZ3N0YXNwZWN0cmF0aW9jcm9wLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlb2Nyb3BfbGEtZ3N0YXNwZWN0cmF0aW9jcm9wLlRwbyAtYyAtbyBsaWJnc3R2aWRlb2Nyb3BfbGEtZ3N0YXNwZWN0cmF0aW9jcm9wLmxvIGB0ZXN0IC1mICdnc3Rhc3BlY3RyYXRpb2Nyb3AuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0YXNwZWN0cmF0aW9jcm9wLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvY3JvcF9sYS1nc3Rhc3BlY3RyYXRpb2Nyb3AuVHBvICQoREVQRElSKS9saWJnc3R2aWRlb2Nyb3BfbGEtZ3N0YXNwZWN0cmF0aW9jcm9wLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGFzcGVjdHJhdGlvY3JvcC5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvY3JvcF9sYS1nc3Rhc3BlY3RyYXRpb2Nyb3AubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2Nyb3BfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW9jcm9wX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvY3JvcF9sYS1nc3Rhc3BlY3RyYXRpb2Nyb3AubG8gYHRlc3QgLWYgJ2dzdGFzcGVjdHJhdGlvY3JvcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rhc3BlY3RyYXRpb2Nyb3AuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jIGIvZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMxZDlkNy4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9jcm9wL2dzdGFzcGVjdHJhdGlvY3JvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkxICswLDAgQEAKLS8qIEdTdHJlYW1lciB2aWRlbyBmcmFtZSBjcm9wcGluZyB0byBhc3BlY3QtcmF0aW8KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LWFzcGVjdHJhdGlvY3JvcAotICogQHNlZV9hbHNvOiAjR3N0VmlkZW9Dcm9wCi0gKgotICogVGhpcyBlbGVtZW50IGNyb3BzIHZpZGVvIGZyYW1lcyB0byBhIHNwZWNpZmllZCAjR3N0QXNwZWN0UmF0aW9Dcm9wOmFzcGVjdC1yYXRpby4KLSAqCi0gKiBJZiB0aGUgYXNwZWN0LXJhdGlvIGlzIGFscmVhZHkgY29ycmVjdCwgdGhlIGVsZW1lbnQgd2lsbCBvcGVyYXRlCi0gKiBpbiBwYXNzLXRocm91Z2ggbW9kZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgdmlkZW90ZXN0c3JjICEgdmlkZW8veC1yYXcsaGVpZ2h0PTY0MCx3aWR0aD00ODAgISBhc3BlY3RyYXRpb2Nyb3AgYXNwZWN0LXJhdGlvPTE2LzkgISB4aW1hZ2VzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIGdlbmVyYXRlcyBhIHZpZGVvc3RyZWFtIGluIDQvMyBhbmQgY3JvcHMgaXQgdG8gMTYvOS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSAiZ3N0YXNwZWN0cmF0aW9jcm9wLmgiCi0KLSNpbmNsdWRlICJnc3QvZ2xpYi1jb21wYXQtcHJpdmF0ZS5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChhc3BlY3RfcmF0aW9fY3JvcF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBhc3BlY3RfcmF0aW9fY3JvcF9kZWJ1ZwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9BU1BFQ1RfUkFUSU9fQ1JPUCwKLX07Ci0KLS8qIHdlIHN1cHBvcnQgdGhlIHNhbWUgY2FwcyBhcyB2aWRlb2Nyb3AgKHN5bmMgY2hhbmdlcykgKi8KLSNkZWZpbmUgQVNQRUNUX1JBVElPX0NST1BfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgIiAgICBcCi0gICAgICAiUkdCQSwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCLCBCR1IsIEFZVVYsIFlVWTIsICIgXAotICAgICAgIllWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFJHQjE2LCBSR0IxNSwgR1JBWTgsICIgIFwKLSAgICAgICJOVjEyLCBOVjIxLCBHUkFZMTZfTEUsIEdSQVkxNl9CRSB9IikKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEFTUEVDVF9SQVRJT19DUk9QX0NBUFMpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEFTUEVDVF9SQVRJT19DUk9QX0NBUFMpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfYXNwZWN0X3JhdGlvX2Nyb3BfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0QXNwZWN0UmF0aW9Dcm9wLCBnc3RfYXNwZWN0X3JhdGlvX2Nyb3AsIEdTVF9UWVBFX0JJTik7Ci0KLXN0YXRpYyB2b2lkIGdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfYXNwZWN0X3JhdGlvX2Nyb3BfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X2FzcGVjdF9yYXRpb19jcm9wX3NldF9jcm9wcGluZyAoR3N0QXNwZWN0UmF0aW9Dcm9wICoKLSAgICBhc3BlY3RfcmF0aW9fY3JvcCwgZ2ludCB0b3AsIGdpbnQgcmlnaHQsIGdpbnQgYm90dG9tLCBnaW50IGxlZnQpOwotc3RhdGljIEdzdENhcHMgKmdzdF9hc3BlY3RfcmF0aW9fY3JvcF9nZXRfY2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RRdWVyeSAqIHF1ZXJ5KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc2V0X2NhcHMgKEdzdEFzcGVjdFJhdGlvQ3JvcCAqCi0gICAgYXNwZWN0X3JhdGlvX2Nyb3AsIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc2lua19ldmVudCAoR3N0UGFkICogcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldnQpOwotc3RhdGljIHZvaWQgZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9hc3BlY3RfcmF0aW9fdHJhbnNmb3JtX3N0cnVjdHVyZSAoR3N0QXNwZWN0UmF0aW9Dcm9wICoKLSAgICBhc3BlY3RfcmF0aW9fY3JvcCwgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHc3RTdHJ1Y3R1cmUgKiogbmV3X3N0cnVjdHVyZSwKLSAgICBnYm9vbGVhbiBzZXRfdmlkZW9jcm9wKTsKLQotc3RhdGljIHZvaWQKLWdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfY3JvcHBpbmcgKEdzdEFzcGVjdFJhdGlvQ3JvcCAqIGFzcGVjdF9yYXRpb19jcm9wLAotICAgIGdpbnQgdG9wLCBnaW50IHJpZ2h0LCBnaW50IGJvdHRvbSwgZ2ludCBsZWZ0KQotewotICBHVmFsdWUgdmFsdWUgPSB7IDAgfTsKLSAgaWYgKEdfVU5MSUtFTFkgKCFhc3BlY3RfcmF0aW9fY3JvcC0+dmlkZW9jcm9wKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgICAgICJDYW4ndCBzZXQgdGhlIHNldHRpbmdzIGlmIHRoZXJlIGlzIG5vIGNyb3BwaW5nIGVsZW1lbnQiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBnX3ZhbHVlX2luaXQgKCZ2YWx1ZSwgR19UWVBFX0lOVCk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnZhbHVlLCB0b3ApOwotICBHU1RfREVCVUdfT0JKRUNUIChhc3BlY3RfcmF0aW9fY3JvcCwgInNldCB0b3AgY3JvcHBpbmcgdG86ICVkIiwgdG9wKTsKLSAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AtPnZpZGVvY3JvcCksICJ0b3AiLAotICAgICAgJnZhbHVlKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmdmFsdWUsIHJpZ2h0KTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AsICJzZXQgcmlnaHQgY3JvcHBpbmcgdG86ICVkIiwgcmlnaHQpOwotICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChhc3BlY3RfcmF0aW9fY3JvcC0+dmlkZW9jcm9wKSwgInJpZ2h0IiwKLSAgICAgICZ2YWx1ZSk7Ci0gIGdfdmFsdWVfc2V0X2ludCAoJnZhbHVlLCBib3R0b20pOwotICBHU1RfREVCVUdfT0JKRUNUIChhc3BlY3RfcmF0aW9fY3JvcCwgInNldCBib3R0b20gY3JvcHBpbmcgdG86ICVkIiwgYm90dG9tKTsKLSAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AtPnZpZGVvY3JvcCksICJib3R0b20iLAotICAgICAgJnZhbHVlKTsKLSAgZ192YWx1ZV9zZXRfaW50ICgmdmFsdWUsIGxlZnQpOwotICBHU1RfREVCVUdfT0JKRUNUIChhc3BlY3RfcmF0aW9fY3JvcCwgInNldCBsZWZ0IGNyb3BwaW5nIHRvOiAlZCIsIGxlZnQpOwotICBnX29iamVjdF9zZXRfcHJvcGVydHkgKEdfT0JKRUNUIChhc3BlY3RfcmF0aW9fY3JvcC0+dmlkZW9jcm9wKSwgImxlZnQiLAotICAgICAgJnZhbHVlKTsKLQotICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfY2FwcyAoR3N0QXNwZWN0UmF0aW9Dcm9wICogYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFBhZCAqcGVlcl9wYWQ7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19tdXRleF9sb2NrICgmYXNwZWN0X3JhdGlvX2Nyb3AtPmNyb3BfbG9jayk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGdzdF9hc3BlY3RfcmF0aW9fdHJhbnNmb3JtX3N0cnVjdHVyZSAoYXNwZWN0X3JhdGlvX2Nyb3AsIHN0cnVjdHVyZSwgTlVMTCwKLSAgICAgIFRSVUUpOwotICBwZWVyX3BhZCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoR1NUX0VMRU1FTlQgKGFzcGVjdF9yYXRpb19jcm9wLT52aWRlb2Nyb3ApLAotICAgICAgInNpbmsiKTsKLSAgcmV0ID0gZ3N0X3BhZF9zZXRfY2FwcyAocGVlcl9wYWQsIGNhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwZWVyX3BhZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmYXNwZWN0X3JhdGlvX2Nyb3AtPmNyb3BfbG9jayk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdEV2ZW50ICogZXZ0KQotewotICBHc3RBc3BlY3RSYXRpb0Nyb3AgKmFzcGVjdF9yYXRpb19jcm9wID0gR1NUX0FTUEVDVF9SQVRJT19DUk9QIChwYXJlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2dCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldnQsICZjYXBzKTsKLSAgICAgIGdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfY2FwcyAoYXNwZWN0X3JhdGlvX2Nyb3AsIGNhcHMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldnQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2NsYXNzX2luaXQgKEdzdEFzcGVjdFJhdGlvQ3JvcENsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfYXNwZWN0X3JhdGlvX2Nyb3BfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9hc3BlY3RfcmF0aW9fY3JvcF9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0FTUEVDVF9SQVRJT19DUk9QLAotICAgICAgZ3N0X3BhcmFtX3NwZWNfZnJhY3Rpb24gKCJhc3BlY3QtcmF0aW8iLCAiYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICAiVGFyZ2V0IGFzcGVjdC1yYXRpbyBvZiB2aWRlbyIsIDAsIDEsIEdfTUFYSU5ULCAxLCAwLCAxLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJhc3BlY3RyYXRpb2Nyb3AiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLAotICAgICAgIkNyb3BzIHZpZGVvIGludG8gYSB1c2VyLWRlZmluZWQgYXNwZWN0LXJhdGlvIiwKLSAgICAgICJUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX3RlbXBsYXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hc3BlY3RfcmF0aW9fY3JvcF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0QXNwZWN0UmF0aW9Dcm9wICphc3BlY3RfcmF0aW9fY3JvcDsKLQotICBhc3BlY3RfcmF0aW9fY3JvcCA9IEdTVF9BU1BFQ1RfUkFUSU9fQ1JPUCAob2JqZWN0KTsKLQotICBnX211dGV4X2NsZWFyICgmYXNwZWN0X3JhdGlvX2Nyb3AtPmNyb3BfbG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2luaXQgKEdzdEFzcGVjdFJhdGlvQ3JvcCAqIGFzcGVjdF9yYXRpb19jcm9wKQotewotICBHc3RQYWQgKmxpbmtfcGFkOwotICBHc3RQYWQgKnNyY19wYWQ7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGFzcGVjdF9yYXRpb19jcm9wX2RlYnVnLCAiYXNwZWN0cmF0aW9jcm9wIiwgMCwKLSAgICAgICJhc3BlY3RyYXRpb2Nyb3AiKTsKLQotICBhc3BlY3RfcmF0aW9fY3JvcC0+YXJfbnVtID0gMDsKLSAgYXNwZWN0X3JhdGlvX2Nyb3AtPmFyX2Rlbm9tID0gMTsKLQotICBnX211dGV4X2luaXQgKCZhc3BlY3RfcmF0aW9fY3JvcC0+Y3JvcF9sb2NrKTsKLQotICAvKiBhZGQgdGhlIHRyYW5zZm9ybSBlbGVtZW50ICovCi0gIGFzcGVjdF9yYXRpb19jcm9wLT52aWRlb2Nyb3AgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb2Nyb3AiLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGFzcGVjdF9yYXRpb19jcm9wKSwgYXNwZWN0X3JhdGlvX2Nyb3AtPnZpZGVvY3JvcCk7Ci0KLSAgLyogY3JlYXRlIGdob3N0IHBhZCBzcmMgKi8KLSAgbGlua19wYWQgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKEdTVF9FTEVNRU5UIChhc3BlY3RfcmF0aW9fY3JvcC0+dmlkZW9jcm9wKSwKLSAgICAgICJzcmMiKTsKLSAgc3JjX3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgbGlua19wYWQpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc3JjX3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc3JjX3F1ZXJ5KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhc3BlY3RfcmF0aW9fY3JvcCksIHNyY19wYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChsaW5rX3BhZCk7Ci0gIC8qIGNyZWF0ZSBnaG9zdCBwYWQgc2luayAqLwotICBsaW5rX3BhZCA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoR1NUX0VMRU1FTlQgKGFzcGVjdF9yYXRpb19jcm9wLT52aWRlb2Nyb3ApLAotICAgICAgInNpbmsiKTsKLSAgYXNwZWN0X3JhdGlvX2Nyb3AtPnNpbmsgPSBnc3RfZ2hvc3RfcGFkX25ldyAoInNpbmsiLCBsaW5rX3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChhc3BlY3RfcmF0aW9fY3JvcCksCi0gICAgICBhc3BlY3RfcmF0aW9fY3JvcC0+c2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGxpbmtfcGFkKTsKLQotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAoYXNwZWN0X3JhdGlvX2Nyb3AtPnNpbmssCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2FzcGVjdF9yYXRpb19jcm9wX3NpbmtfZXZlbnQpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9hc3BlY3RfcmF0aW9fdHJhbnNmb3JtX3N0cnVjdHVyZSAoR3N0QXNwZWN0UmF0aW9Dcm9wICogYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgR3N0U3RydWN0dXJlICogc3RydWN0dXJlLCBHc3RTdHJ1Y3R1cmUgKiogbmV3X3N0cnVjdHVyZSwKLSAgICBnYm9vbGVhbiBzZXRfdmlkZW9jcm9wKQotewotICBnZG91YmxlIGluY29taW5nX2FyOwotICBnZG91YmxlIHJlcXVlc3RlZF9hcjsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGNyb3B2YWx1ZTsKLSAgZ2ludCBwYXJfZCwgcGFyX247Ci0KLSAgLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGFzcGVjdCByYXRpbyAqLwotICBpZiAoYXNwZWN0X3JhdGlvX2Nyb3AtPmFyX251bSA8IDEpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhc3BlY3RfcmF0aW9fY3JvcCwgIk5vIGNyb3BwaW5nIHJlcXVlc3RlZCIpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICAvKiBnZXQgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIGNhcHMgKi8KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKSB8fAotICAgICAgIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCkpCi0gICAgZ290byBiZWFjaDsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJwaXhlbC1hc3BlY3QtcmF0aW8iLAotICAgICAgICAgICZwYXJfbiwgJnBhcl9kKSkgewotICAgIHBhcl9kID0gcGFyX24gPSAxOwotICB9Ci0KLSAgaW5jb21pbmdfYXIgPSAoKGdkb3VibGUpICh3aWR0aCAqIHBhcl9uKSkgLyAoaGVpZ2h0ICogcGFyX2QpOwotICBHU1RfTE9HX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgICAiaW5jb21pbmcgY2FwcyB3aWR0aCglZCksIGhlaWdodCglZCksIHBhciAoJWQvJWQpIDogYXIgPSAlZiIsIHdpZHRoLAotICAgICAgaGVpZ2h0LCBwYXJfbiwgcGFyX2QsIGluY29taW5nX2FyKTsKLQotICByZXF1ZXN0ZWRfYXIgPQotICAgICAgKGdkb3VibGUpIGFzcGVjdF9yYXRpb19jcm9wLT5hcl9udW0gLyBhc3BlY3RfcmF0aW9fY3JvcC0+YXJfZGVub207Ci0KLSAgLyogY2hlY2sgaWYgdGhlIG9yaWdpbmFsIGFzcGVjdC1yYXRpbyBpcyB0aGUgYXNwZWN0LXJhdGlvIHRoYXQgd2Ugd2FudCAqLwotICBpZiAocmVxdWVzdGVkX2FyID09IGluY29taW5nX2FyKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgICAgICJJbnB1dCB2aWRlbyBhbHJlYWR5IGhhcyB0aGUgY29ycmVjdCBhc3BlY3QgcmF0aW8gKCUuM2YgPT0gJS4zZikiLAotICAgICAgICBpbmNvbWluZ19hciwgcmVxdWVzdGVkX2FyKTsKLSAgICBnb3RvIGJlYWNoOwotICB9IGVsc2UgaWYgKHJlcXVlc3RlZF9hciA+IGluY29taW5nX2FyKSB7Ci0gICAgLyogZml4IGFzcGVjdCByYXRpbyB3aXRoIGNyb3BwaW5nIG9uIHRvcCBhbmQgYm90dG9tICovCi0gICAgY3JvcHZhbHVlID0KLSAgICAgICAgKCgoKGRvdWJsZSkgYXNwZWN0X3JhdGlvX2Nyb3AtPmFyX2Rlbm9tIC8KLSAgICAgICAgICAgICAgICAoZG91YmxlKSAoYXNwZWN0X3JhdGlvX2Nyb3AtPmFyX251bSkpICogKChkb3VibGUpIHBhcl9uIC8KLSAgICAgICAgICAgICAgICAoZG91YmxlKSBwYXJfZCkgKiB3aWR0aCkgLSBoZWlnaHQpIC8gMjsKLSAgICBpZiAoY3JvcHZhbHVlIDwgMCkgewotICAgICAgY3JvcHZhbHVlICo9IC0xOwotICAgIH0KLSAgICBpZiAoY3JvcHZhbHVlID49IChoZWlnaHQgLyAyKSkKLSAgICAgIGdvdG8gY3JvcF9mYWlsZWQ7Ci0gICAgaWYgKHNldF92aWRlb2Nyb3ApIHsKLSAgICAgIGdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfY3JvcHBpbmcgKGFzcGVjdF9yYXRpb19jcm9wLCBjcm9wdmFsdWUsIDAsCi0gICAgICAgICAgY3JvcHZhbHVlLCAwKTsKLSAgICB9Ci0gICAgaWYgKG5ld19zdHJ1Y3R1cmUpIHsKLSAgICAgICpuZXdfc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKCpuZXdfc3RydWN0dXJlLAotICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAoaW50KSAoaGVpZ2h0IC0gKGNyb3B2YWx1ZSAqIDIpKSwgTlVMTCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIGZpeCBhc3BlY3QgcmF0aW8gd2l0aCBjcm9wcGluZyBvbiBsZWZ0IGFuZCByaWdodCAqLwotICAgIGNyb3B2YWx1ZSA9Ci0gICAgICAgICgoKChkb3VibGUpIGFzcGVjdF9yYXRpb19jcm9wLT5hcl9udW0gLwotICAgICAgICAgICAgICAgIChkb3VibGUpIChhc3BlY3RfcmF0aW9fY3JvcC0+YXJfZGVub20pKSAqICgoZG91YmxlKSBwYXJfZCAvCi0gICAgICAgICAgICAgICAgKGRvdWJsZSkgcGFyX24pICogaGVpZ2h0KSAtIHdpZHRoKSAvIDI7Ci0gICAgaWYgKGNyb3B2YWx1ZSA8IDApIHsKLSAgICAgIGNyb3B2YWx1ZSAqPSAtMTsKLSAgICB9Ci0gICAgaWYgKGNyb3B2YWx1ZSA+PSAod2lkdGggLyAyKSkKLSAgICAgIGdvdG8gY3JvcF9mYWlsZWQ7Ci0gICAgaWYgKHNldF92aWRlb2Nyb3ApIHsKLSAgICAgIGdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfY3JvcHBpbmcgKGFzcGVjdF9yYXRpb19jcm9wLCAwLCBjcm9wdmFsdWUsCi0gICAgICAgICAgMCwgY3JvcHZhbHVlKTsKLSAgICB9Ci0gICAgaWYgKG5ld19zdHJ1Y3R1cmUpIHsKLSAgICAgICpuZXdfc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKCpuZXdfc3RydWN0dXJlLAotICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIChpbnQpICh3aWR0aCAtIChjcm9wdmFsdWUgKiAyKSksIE5VTEwpOwotICAgIH0KLSAgfQotCi0gIHJldHVybjsKLQotY3JvcF9mYWlsZWQ6Ci0gIEdTVF9XQVJOSU5HX09CSkVDVCAoYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgICAiY2FuJ3QgY3JvcCB0byBhc3BlY3QgcmF0aW8gcmVxdWVzdGVkIik7Ci0gIGdvdG8gYmVhY2g7Ci1iZWFjaDoKLSAgaWYgKHNldF92aWRlb2Nyb3ApIHsKLSAgICBnc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc2V0X2Nyb3BwaW5nIChhc3BlY3RfcmF0aW9fY3JvcCwgMCwgMCwgMCwgMCk7Ci0gIH0KLQotICBpZiAobmV3X3N0cnVjdHVyZSkgewotICAgICpuZXdfc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9hc3BlY3RfcmF0aW9fY3JvcF90cmFuc2Zvcm1fY2FwcyAoR3N0QXNwZWN0UmF0aW9Dcm9wICogYXNwZWN0X3JhdGlvX2Nyb3AsCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHMgKnRyYW5zZm9ybTsKLSAgZ2ludCBzaXplLCBpOwotCi0gIHRyYW5zZm9ybSA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICBzaXplID0gZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgR3N0U3RydWN0dXJlICp0cmFuc19zOwotCi0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZ3N0X2FzcGVjdF9yYXRpb190cmFuc2Zvcm1fc3RydWN0dXJlIChhc3BlY3RfcmF0aW9fY3JvcCwgcywgJnRyYW5zX3MsCi0gICAgICAgIEZBTFNFKTsKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlICh0cmFuc2Zvcm0sIHRyYW5zX3MpOwotICB9Ci0KLSAgcmV0dXJuIHRyYW5zZm9ybTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2dldF9jYXBzIChHc3RQYWQgKiBwYWQsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdFBhZCAqcGVlcjsKLSAgR3N0QXNwZWN0UmF0aW9Dcm9wICphc3BlY3RfcmF0aW9fY3JvcDsKLSAgR3N0Q2FwcyAqcmV0dXJuX2NhcHM7Ci0KLSAgYXNwZWN0X3JhdGlvX2Nyb3AgPSBHU1RfQVNQRUNUX1JBVElPX0NST1AgKGdzdF9wYWRfZ2V0X3BhcmVudCAocGFkKSk7Ci0KLSAgZ19tdXRleF9sb2NrICgmYXNwZWN0X3JhdGlvX2Nyb3AtPmNyb3BfbG9jayk7Ci0KLSAgcGVlciA9IGdzdF9wYWRfZ2V0X3BlZXIgKGFzcGVjdF9yYXRpb19jcm9wLT5zaW5rKTsKLSAgaWYgKHBlZXIgPT0gTlVMTCkgewotICAgIHJldHVybl9jYXBzID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZzcmNfdGVtcGxhdGUpOwotICB9IGVsc2UgewotICAgIEdzdENhcHMgKnBlZXJfY2FwczsKLQotICAgIHBlZXJfY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAocGVlciwgZmlsdGVyKTsKLSAgICByZXR1cm5fY2FwcyA9Ci0gICAgICAgIGdzdF9hc3BlY3RfcmF0aW9fY3JvcF90cmFuc2Zvcm1fY2FwcyAoYXNwZWN0X3JhdGlvX2Nyb3AsIHBlZXJfY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJfY2Fwcyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJmFzcGVjdF9yYXRpb19jcm9wLT5jcm9wX2xvY2spOwotICBnc3Rfb2JqZWN0X3VucmVmIChhc3BlY3RfcmF0aW9fY3JvcCk7Ci0KLSAgaWYgKHJldHVybl9jYXBzICYmIGZpbHRlcikgewotICAgIEdzdENhcHMgKnRtcCA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHJldHVybl9jYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZyZXR1cm5fY2FwcywgdG1wKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgfQotCi0gIHJldHVybiByZXR1cm5fY2FwczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfYXNwZWN0X3JhdGlvX2Nyb3Bfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKmNhcHM7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0gICAgICBjYXBzID0gZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2dldF9jYXBzIChwYWQsIGZpbHRlcik7Ci0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBc3BlY3RSYXRpb0Nyb3AgKmFzcGVjdF9yYXRpb19jcm9wOwotICBnYm9vbGVhbiByZWNoZWNrID0gRkFMU0U7Ci0KLSAgYXNwZWN0X3JhdGlvX2Nyb3AgPSBHU1RfQVNQRUNUX1JBVElPX0NST1AgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChhc3BlY3RfcmF0aW9fY3JvcCk7Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9BU1BFQ1RfUkFUSU9fQ1JPUDoKLSAgICAgIGlmIChHU1RfVkFMVUVfSE9MRFNfRlJBQ1RJT04gKHZhbHVlKSkgewotICAgICAgICBhc3BlY3RfcmF0aW9fY3JvcC0+YXJfbnVtID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKHZhbHVlKTsKLSAgICAgICAgYXNwZWN0X3JhdGlvX2Nyb3AtPmFyX2Rlbm9tID0KLSAgICAgICAgICAgIGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKHZhbHVlKTsKLSAgICAgICAgcmVjaGVjayA9IGdzdF9wYWRfaGFzX2N1cnJlbnRfY2FwcyAoYXNwZWN0X3JhdGlvX2Nyb3AtPnNpbmspOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYXNwZWN0X3JhdGlvX2Nyb3ApOwotCi0gIGlmIChyZWNoZWNrKSB7Ci0gICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoYXNwZWN0X3JhdGlvX2Nyb3AtPnNpbmspOwotICAgIGlmIChjYXBzICE9IE5VTEwpIHsKLSAgICAgIGdzdF9hc3BlY3RfcmF0aW9fY3JvcF9zZXRfY2FwcyAoYXNwZWN0X3JhdGlvX2Nyb3AsIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RBc3BlY3RSYXRpb0Nyb3AgKmFzcGVjdF9yYXRpb19jcm9wOwotCi0gIGFzcGVjdF9yYXRpb19jcm9wID0gR1NUX0FTUEVDVF9SQVRJT19DUk9QIChvYmplY3QpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoYXNwZWN0X3JhdGlvX2Nyb3ApOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQVNQRUNUX1JBVElPX0NST1A6Ci0gICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICh2YWx1ZSwgYXNwZWN0X3JhdGlvX2Nyb3AtPmFyX251bSwKLSAgICAgICAgICBhc3BlY3RfcmF0aW9fY3JvcC0+YXJfZGVub20pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYXNwZWN0X3JhdGlvX2Nyb3ApOwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuaCBiL2dzdC92aWRlb2Nyb3AvZ3N0YXNwZWN0cmF0aW9jcm9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjYWViNWMuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvY3JvcC9nc3Rhc3BlY3RyYXRpb2Nyb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIEdTdHJlYW1lciB2aWRlbyBmcmFtZSBjcm9wcGluZyB0byBhc3BlY3QtcmF0aW8KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGlqcyBWZXJtZWlyIDx0aGlqc3Zlcm1laXJAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfQVNQRUNUX1JBVElPX0NST1BfSF9fCi0jZGVmaW5lIF9fR1NUX0FTUEVDVF9SQVRJT19DUk9QX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdGJpbi5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQVNQRUNUX1JBVElPX0NST1AgXAotICAoZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9BU1BFQ1RfUkFUSU9fQ1JPUChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0FTUEVDVF9SQVRJT19DUk9QLEdzdEFzcGVjdFJhdGlvQ3JvcCkpCi0jZGVmaW5lIEdTVF9BU1BFQ1RfUkFUSU9fQ1JPUF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9BU1BFQ1RfUkFUSU9fQ1JPUCxHc3RBc3BlY3RSYXRpb0Nyb3BDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19BU1BFQ1RfUkFUSU9fQ1JPUChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0FTUEVDVF9SQVRJT19DUk9QKSkKLSNkZWZpbmUgR1NUX0lTX0FTUEVDVF9SQVRJT19DUk9QX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0FTUEVDVF9SQVRJT19DUk9QKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEFzcGVjdFJhdGlvQ3JvcCBHc3RBc3BlY3RSYXRpb0Nyb3A7Ci10eXBlZGVmIHN0cnVjdCBfR3N0QXNwZWN0UmF0aW9Dcm9wQ2xhc3MgR3N0QXNwZWN0UmF0aW9Dcm9wQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0QXNwZWN0UmF0aW9Dcm9wCi17Ci0gIEdzdEJpbiBwYXJlbnQ7Ci0KLSAgLyogb3VyIHZpZGVvY3JvcCBlbGVtZW50ICovCi0gIEdzdEVsZW1lbnQgKnZpZGVvY3JvcDsKLQotICBHc3RQYWQgKnNpbms7Ci0KLSAgLyogdGFyZ2V0IGFzcGVjdCByYXRpbyAqLwotICBnaW50IGFyX251bTsgLyogaWYgPCAxIHRoZW4gZG9uJ3QgY2hhbmdlIGFyICovCi0gIGdpbnQgYXJfZGVub207Ci0KLSAgR011dGV4IGNyb3BfbG9jazsKLX07Ci0KLXN0cnVjdCBfR3N0QXNwZWN0UmF0aW9Dcm9wQ2xhc3MKLXsKLSAgR3N0QmluQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2FzcGVjdF9yYXRpb19jcm9wX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0FTUEVDVF9SQVRJT19DUk9QX0hfXyAqLwotCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jIGIvZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlhOGYxYS4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsODIwICswLDAgQEAKLS8qIEdTdHJlYW1lciB2aWRlbyBmcmFtZSBjcm9wcGluZwotICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdmlkZW9jcm9wCi0gKiBAc2VlX2Fsc286ICNHc3RWaWRlb0JveAotICoKLSAqIFRoaXMgZWxlbWVudCBjcm9wcyB2aWRlbyBmcmFtZXMsIG1lYW5pbmcgaXQgY2FuIHJlbW92ZSBwYXJ0cyBvZiB0aGUKLSAqIHBpY3R1cmUgb24gdGhlIGxlZnQsIHJpZ2h0LCB0b3Agb3IgYm90dG9tIG9mIHRoZSBwaWN0dXJlIGFuZCBvdXRwdXQKLSAqIGEgc21hbGxlciBwaWN0dXJlIHRoYW4gdGhlIGlucHV0IHBpY3R1cmUsIHdpdGggdGhlIHVud2FudGVkIHBhcnRzIGF0IHRoZQotICogYm9yZGVyIHJlbW92ZWQuCi0gKgotICogVGhlIHZpZGVvY3JvcCBlbGVtZW50IGlzIHNpbWlsYXIgdG8gdGhlIHZpZGVvYm94IGVsZW1lbnQsIGJ1dCBpdHMgbWFpbgotICogZ29hbCBpcyB0byBzdXBwb3J0IGEgbXVsdGl0dWRlIG9mIGZvcm1hdHMgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCi0gKiBVbmxpa2UgdmlkZWJveCwgaXQgY2Fubm90IGFkZCBib3JkZXJzIHRvIHRoZSBwaWN0dXJlIGFuZCB1bmxpa2UgdmlkZWJveAotICogaXQgd2lsbCBhbHdheXMgb3V0cHV0IGltYWdlcyBpbiBleGFjdGx5IHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgaW5wdXQgaW1hZ2UuCi0gKgotICogSWYgdGhlcmUgaXMgbm90aGluZyB0byBjcm9wLCB0aGUgZWxlbWVudCB3aWxsIG9wZXJhdGUgaW4gcGFzcy10aHJvdWdoIG1vZGUuCi0gKgotICogTm90ZSB0aGF0IG5vIHNwZWNpYWwgZWZmb3J0cyBhcmUgbWFkZSB0byBoYW5kbGUgY2hyb21hLXN1YnNhbXBsZWQgZm9ybWF0cwotICogaW4gdGhlIGNhc2Ugb2Ygb2RkLXZhbHVlZCBjcm9wcGluZyBhbmQgY29tcGVuc2F0ZSBmb3Igc3ViLXVuaXQgY2hyb21hIHBsYW5lCi0gKiBzaGlmdHMgZm9yIHN1Y2ggZm9ybWF0cyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgI0dzdFZpZGVvQ3JvcDpsZWZ0IG9yCi0gKiAjR3N0VmlkZW9Dcm9wOnRvcCBwcm9wZXJ0eSBpcyBzZXQgdG8gYW4gb2RkIG51bWJlci4gVGhpcyBkb2Vzbid0IG1hdHRlciBmb3IgCi0gKiBtb3N0IHVzZSBjYXNlcywgYnV0IGl0IG1pZ2h0IG1hdHRlciBmb3IgeW91cnMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IHZpZGVvdGVzdHNyYyAhIHZpZGVvY3JvcCB0b3A9NDIgbGVmdD0xIHJpZ2h0PTQgYm90dG9tPTAgISB4aW1hZ2VzaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKiBUT0RPOgotICogIC0gZm9yIHBhY2tlZCBmb3JtYXRzLCB3ZSBjb3VsZCBhdm9pZCBtZW1jcHkoKSBpbiBjYXNlIGNyb3BfbGVmdAotICogICAgYW5kIGNyb3BfcmlnaHQgYXJlIDAgYW5kIGp1c3QgY3JlYXRlIGEgc3ViLWJ1ZmZlciBvZiB0aGUgaW5wdXQKLSAqICAgIGJ1ZmZlcgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgImdzdHZpZGVvY3JvcC5oIgotI2luY2x1ZGUgImdzdGFzcGVjdHJhdGlvY3JvcC5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHZpZGVvY3JvcF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB2aWRlb2Nyb3BfZGVidWcKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfTEVGVCwKLSAgUFJPUF9SSUdIVCwKLSAgUFJPUF9UT1AsCi0gIFBST1BfQk9UVE9NCi19OwotCi0vKiB3ZSBzdXBwb3J0IHRoZSBzYW1lIGNhcHMgYXMgYXNwZWN0cmF0aW9jcm9wIChzeW5jIGNoYW5nZXMpICovCi0jZGVmaW5lIFZJREVPX0NST1BfQ0FQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfVklERU9fQ0FQU19NQUtFICgieyBSR0J4LCB4UkdCLCBCR1J4LCB4QkdSLCAiICAgIFwKLSAgICAgICJSR0JBLCBBUkdCLCBCR1JBLCBBQkdSLCBSR0IsIEJHUiwgQVlVViwgWVVZMiwgIiBcCi0gICAgICAiWVZZVSwgVVlWWSwgSTQyMCwgWVYxMiwgUkdCMTYsIFJHQjE1LCBHUkFZOCwgIiAgXAotICAgICAgIk5WMTIsIE5WMjEsIEdSQVkxNl9MRSwgR1JBWTE2X0JFIH0iKQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoVklERU9fQ1JPUF9DQVBTKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChWSURFT19DUk9QX0NBUFMpCi0gICAgKTsKLQotI2RlZmluZSBnc3RfdmlkZW9fY3JvcF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RWaWRlb0Nyb3AsIGdzdF92aWRlb19jcm9wLCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfdmlkZW9fY3JvcF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdmlkZW9fY3JvcF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogZmlsdGVyX2NhcHMpOwotc3RhdGljIGdib29sZWFuIGdzdF92aWRlb19jcm9wX3NyY19ldmVudCAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZpZGVvX2Nyb3Bfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluLAotICAgIEdzdFZpZGVvSW5mbyAqIGluX2luZm8sIEdzdENhcHMgKiBvdXQsIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZpZGVvX2Nyb3Bfc3JjX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdEV2ZW50ICpuZXdfZXZlbnQ7Ci0gIEdzdFN0cnVjdHVyZSAqbmV3X3N0cnVjdHVyZTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IGdjaGFyICpldmVudF9uYW1lOwotICBkb3VibGUgcG9pbnRlcl94OwotICBkb3VibGUgcG9pbnRlcl95OwotCi0gIEdzdFZpZGVvQ3JvcCAqdmNyb3AgPSBHU1RfVklERU9fQ1JPUCAodHJhbnMpOwotICBuZXdfZXZlbnQgPSBOVUxMOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodmNyb3ApOwotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfTkFWSUdBVElPTiAmJgotICAgICAgKHZjcm9wLT5jcm9wX2xlZnQgIT0gMCB8fCB2Y3JvcC0+Y3JvcF90b3AgIT0gMCkpIHsKLSAgICBzdHJ1Y3R1cmUgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgIGV2ZW50X25hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgImV2ZW50Iik7Ci0KLSAgICBpZiAoZXZlbnRfbmFtZSAmJgotICAgICAgICAoc3RyY21wIChldmVudF9uYW1lLCAibW91c2UtbW92ZSIpID09IDAgfHwKLSAgICAgICAgICAgIHN0cmNtcCAoZXZlbnRfbmFtZSwgIm1vdXNlLWJ1dHRvbi1wcmVzcyIpID09IDAgfHwKLSAgICAgICAgICAgIHN0cmNtcCAoZXZlbnRfbmFtZSwgIm1vdXNlLWJ1dHRvbi1yZWxlYXNlIikgPT0gMCkpIHsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAoc3RydWN0dXJlLCAicG9pbnRlcl94IiwgJnBvaW50ZXJfeCkgJiYKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHN0cnVjdHVyZSwgInBvaW50ZXJfeSIsICZwb2ludGVyX3kpKSB7Ci0KLSAgICAgICAgbmV3X3N0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoc3RydWN0dXJlKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zdHJ1Y3R1cmUsCi0gICAgICAgICAgICAicG9pbnRlcl94IiwgR19UWVBFX0RPVUJMRSwgKGRvdWJsZSkgKHBvaW50ZXJfeCArIHZjcm9wLT5jcm9wX2xlZnQpLAotICAgICAgICAgICAgInBvaW50ZXJfeSIsIEdfVFlQRV9ET1VCTEUsIChkb3VibGUpIChwb2ludGVyX3kgKyB2Y3JvcC0+Y3JvcF90b3ApLAotICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICAgICAgbmV3X2V2ZW50ID0gZ3N0X2V2ZW50X25ld19uYXZpZ2F0aW9uIChuZXdfc3RydWN0dXJlKTsKLSAgICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHZjcm9wLCAiRmFpbGVkIHRvIHJlYWQgbmF2aWdhdGlvbiBldmVudCIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLICh2Y3JvcCk7Ci0KLSAgcmV0dXJuIEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+c3JjX2V2ZW50ICh0cmFucywKLSAgICAgIChuZXdfZXZlbnQgPyBuZXdfZXZlbnQgOiBldmVudCkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2Nyb3BfY2xhc3NfaW5pdCAoR3N0VmlkZW9Dcm9wQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmFzZXRyYW5zZm9ybV9jbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGJhc2V0cmFuc2Zvcm1fY2xhc3MgPSAoR3N0QmFzZVRyYW5zZm9ybUNsYXNzICopIGtsYXNzOwotICB2ZmlsdGVyX2NsYXNzID0gKEdzdFZpZGVvRmlsdGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3ZpZGVvX2Nyb3Bfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdmlkZW9fY3JvcF9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9MRUZULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImxlZnQiLCAiTGVmdCIsCi0gICAgICAgICAgIlBpeGVscyB0byBjcm9wIGF0IGxlZnQgKC0xIHRvIGF1dG8tY3JvcCkiLCAtMSwgR19NQVhJTlQsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwKLSAgICAgICAgICBHU1RfUEFSQU1fTVVUQUJMRV9QTEFZSU5HKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfUklHSFQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgicmlnaHQiLCAiUmlnaHQiLAotICAgICAgICAgICJQaXhlbHMgdG8gY3JvcCBhdCByaWdodCAoLTEgdG8gYXV0by1jcm9wKSIsIC0xLCBHX01BWElOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9UT1AsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgidG9wIiwgIlRvcCIsICJQaXhlbHMgdG8gY3JvcCBhdCB0b3AgKC0xIHRvIGF1dG8tY3JvcCkiLAotICAgICAgICAgIC0xLCBHX01BWElOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CT1RUT00sCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiYm90dG9tIiwgIkJvdHRvbSIsCi0gICAgICAgICAgIlBpeGVscyB0byBjcm9wIGF0IGJvdHRvbSAoLTEgdG8gYXV0by1jcm9wKSIsIC0xLCBHX01BWElOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfAotICAgICAgICAgIEdTVF9QQVJBTV9NVVRBQkxFX1BMQVlJTkcpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJDcm9wIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L1ZpZGVvIiwKLSAgICAgICJDcm9wcyB2aWRlbyBpbnRvIGEgdXNlci1kZWZpbmVkIHJlZ2lvbiIsCi0gICAgICAiVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4iKTsKLQotICBiYXNldHJhbnNmb3JtX2NsYXNzLT50cmFuc2Zvcm1fY2FwcyA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX2NhcHMpOwotICBiYXNldHJhbnNmb3JtX2NsYXNzLT5zcmNfZXZlbnQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvX2Nyb3Bfc3JjX2V2ZW50KTsKLQotICB2ZmlsdGVyX2NsYXNzLT5zZXRfaW5mbyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9fY3JvcF9zZXRfaW5mbyk7Ci0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX2ZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19jcm9wX2luaXQgKEdzdFZpZGVvQ3JvcCAqIHZjcm9wKQotewotICB2Y3JvcC0+Y3JvcF9yaWdodCA9IDA7Ci0gIHZjcm9wLT5jcm9wX2xlZnQgPSAwOwotICB2Y3JvcC0+Y3JvcF90b3AgPSAwOwotICB2Y3JvcC0+Y3JvcF9ib3R0b20gPSAwOwotfQotCi0jZGVmaW5lIFJPVU5EX0RPV05fMihuKSAgKChuKSYofjEpKQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX3BhY2tlZF9jb21wbGV4IChHc3RWaWRlb0Nyb3AgKiB2Y3JvcCwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIGd1aW50OCAqaW5fZGF0YSwgKm91dF9kYXRhOwotICBndWludCBpLCBkeDsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnaW50IGluX3N0cmlkZTsKLSAgZ2ludCBvdXRfc3RyaWRlOwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChvdXRfZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChvdXRfZnJhbWUpOwotCi0gIGluX2RhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICBvdXRfZGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIGluX3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLSAgb3V0X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMCk7Ci0KLSAgaW5fZGF0YSArPSB2Y3JvcC0+Y3JvcF90b3AgKiBpbl9zdHJpZGU7Ci0KLSAgLyogcm91bmRpbmcgZG93biBoZXJlIHNvIHdlIGVuZCB1cCBhdCB0aGUgc3RhcnQgb2YgYSBtYWNyby1waXhlbCBhbmQgbm90Ci0gICAqIGluIHRoZSBtaWRkbGUgb2Ygb25lICovCi0gIGluX2RhdGEgKz0gUk9VTkRfRE9XTl8yICh2Y3JvcC0+Y3JvcF9sZWZ0KSAqCi0gICAgICBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0KLSAgZHggPSB3aWR0aCAqIEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKG91dF9mcmFtZSwgMCk7Ci0KLSAgLyogVVlWWSA9IDQ6MjoyIC0gW1UwIFkwIFYwIFkxXSBbVTIgWTIgVjIgWTNdIFtVNCBZNCBWNCBZNV0KLSAgICogWVVZViA9IDQ6MjoyIC0gW1kwIFUwIFkxIFYwXSBbWTIgVTIgWTMgVjJdIFtZNCBVNCBZNSBWNF0gPSBZVVkyICovCi0gIGlmICgodmNyb3AtPmNyb3BfbGVmdCAlIDIpICE9IDApIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpIHsKLSAgICAgIGdpbnQgajsKLQotICAgICAgbWVtY3B5IChvdXRfZGF0YSwgaW5fZGF0YSwgZHgpOwotCi0gICAgICAvKiBtb3ZlIGp1c3QgdGhlIFkgc2FtcGxlcyBvbmUgcGl4ZWwgdG8gdGhlIGxlZnQsIGRvbid0IHdvcnJ5IGFib3V0Ci0gICAgICAgKiBjaHJvbWEgc2hpZnQgKi8KLSAgICAgIGZvciAoaiA9IHZjcm9wLT5tYWNyb195X29mZjsgaiA8IG91dF9zdHJpZGUgLSAyOyBqICs9IDIpCi0gICAgICAgIG91dF9kYXRhW2pdID0gaW5fZGF0YVtqICsgMl07Ci0KLSAgICAgIGluX2RhdGEgKz0gaW5fc3RyaWRlOwotICAgICAgb3V0X2RhdGEgKz0gb3V0X3N0cmlkZTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgKytpKSB7Ci0gICAgICBtZW1jcHkgKG91dF9kYXRhLCBpbl9kYXRhLCBkeCk7Ci0gICAgICBpbl9kYXRhICs9IGluX3N0cmlkZTsKLSAgICAgIG91dF9kYXRhICs9IG91dF9zdHJpZGU7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fcGFja2VkX3NpbXBsZSAoR3N0VmlkZW9Dcm9wICogdmNyb3AsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBndWludDggKmluX2RhdGEsICpvdXRfZGF0YTsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBndWludCBpLCBkeDsKLSAgZ2ludCBpbl9zdHJpZGUsIG91dF9zdHJpZGU7Ci0KLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKG91dF9mcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKG91dF9mcmFtZSk7Ci0KLSAgaW5fZGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCk7Ci0gIG91dF9kYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCk7Ci0KLSAgaW5fc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaW5fZnJhbWUsIDApOwotICBvdXRfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAob3V0X2ZyYW1lLCAwKTsKLQotICBpbl9kYXRhICs9IHZjcm9wLT5jcm9wX3RvcCAqIGluX3N0cmlkZTsKLSAgaW5fZGF0YSArPSB2Y3JvcC0+Y3JvcF9sZWZ0ICogR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoaW5fZnJhbWUsIDApOwotCi0gIGR4ID0gd2lkdGggKiBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFIChvdXRfZnJhbWUsIDApOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgewotICAgIG1lbWNweSAob3V0X2RhdGEsIGluX2RhdGEsIGR4KTsKLSAgICBpbl9kYXRhICs9IGluX3N0cmlkZTsKLSAgICBvdXRfZGF0YSArPSBvdXRfc3RyaWRlOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fcGxhbmFyIChHc3RWaWRlb0Nyb3AgKiB2Y3JvcCwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpCi17Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ3VpbnQ4ICp5X291dCwgKnVfb3V0LCAqdl9vdXQ7Ci0gIGd1aW50OCAqeV9pbiwgKnVfaW4sICp2X2luOwotICBndWludCBpLCBkeDsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAob3V0X2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAob3V0X2ZyYW1lKTsKLQotICAvKiBZIHBsYW5lICovCi0gIHlfaW4gPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICB5X291dCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIHlfaW4gKz0KLSAgICAgICh2Y3JvcC0+Y3JvcF90b3AgKiBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwKLSAgICAgICAgICAwKSkgKyB2Y3JvcC0+Y3JvcF9sZWZ0OwotICBkeCA9IHdpZHRoOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgewotICAgIG1lbWNweSAoeV9vdXQsIHlfaW4sIGR4KTsKLSAgICB5X2luICs9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAwKTsKLSAgICB5X291dCArPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChvdXRfZnJhbWUsIDApOwotICB9Ci0KLSAgLyogVSArIFYgcGxhbmVzICovCi0gIHVfaW4gPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDEpOwotICB1X291dCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDEpOwotCi0gIHVfaW4gKz0gKHZjcm9wLT5jcm9wX3RvcCAvIDIpICogR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaW5fZnJhbWUsIDEpOwotICB1X2luICs9IHZjcm9wLT5jcm9wX2xlZnQgLyAyOwotCi0gIHZfaW4gPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDIpOwotICB2X291dCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDIpOwotCi0gIHZfaW4gKz0gKHZjcm9wLT5jcm9wX3RvcCAvIDIpICogR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaW5fZnJhbWUsIDIpOwotICB2X2luICs9IHZjcm9wLT5jcm9wX2xlZnQgLyAyOwotCi0gIGR4ID0gR1NUX1JPVU5EX1VQXzIgKHdpZHRoKSAvIDI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdTVF9ST1VORF9VUF8yIChoZWlnaHQpIC8gMjsgKytpKSB7Ci0gICAgbWVtY3B5ICh1X291dCwgdV9pbiwgZHgpOwotICAgIG1lbWNweSAodl9vdXQsIHZfaW4sIGR4KTsKLSAgICB1X2luICs9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAxKTsKLSAgICB1X291dCArPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChvdXRfZnJhbWUsIDEpOwotICAgIHZfaW4gKz0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoaW5fZnJhbWUsIDIpOwotICAgIHZfb3V0ICs9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9zZW1pX3BsYW5hciAoR3N0VmlkZW9Dcm9wICogdmNyb3AsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGluX2ZyYW1lLCBHc3RWaWRlb0ZyYW1lICogb3V0X2ZyYW1lKQotewotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGd1aW50OCAqeV9vdXQsICp1dl9vdXQ7Ci0gIGd1aW50OCAqeV9pbiwgKnV2X2luOwotICBndWludCBpLCBkeDsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAob3V0X2ZyYW1lKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAob3V0X2ZyYW1lKTsKLQotICAvKiBZIHBsYW5lICovCi0gIHlfaW4gPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApOwotICB5X291dCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApOwotCi0gIC8qIFVWIHBsYW5lICovCi0gIHV2X2luID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAxKTsKLSAgdXZfb3V0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMSk7Ci0KLSAgeV9pbiArPSB2Y3JvcC0+Y3JvcF90b3AgKiBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMCkgKwotICAgICAgdmNyb3AtPmNyb3BfbGVmdDsKLSAgZHggPSB3aWR0aDsKLQotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpIHsKLSAgICBtZW1jcHkgKHlfb3V0LCB5X2luLCBkeCk7Ci0gICAgeV9pbiArPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMCk7Ci0gICAgeV9vdXQgKz0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAob3V0X2ZyYW1lLCAwKTsKLSAgfQotCi0gIHV2X2luICs9ICh2Y3JvcC0+Y3JvcF90b3AgLyAyKSAqIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAxKTsKLSAgdXZfaW4gKz0gR1NUX1JPVU5EX0RPV05fMiAodmNyb3AtPmNyb3BfbGVmdCk7Ci0gIGR4ID0gR1NUX1JPVU5EX1VQXzIgKHdpZHRoKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR1NUX1JPVU5EX1VQXzIgKGhlaWdodCkgLyAyOyBpKyspIHsKLSAgICBtZW1jcHkgKHV2X291dCwgdXZfaW4sIGR4KTsKLSAgICB1dl9pbiArPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMSk7Ci0gICAgdXZfb3V0ICs9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMSk7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0VmlkZW9Dcm9wICp2Y3JvcCA9IEdTVF9WSURFT19DUk9QICh2ZmlsdGVyKTsKLQotICBpZiAoR19VTkxJS0VMWSAodmNyb3AtPm5lZWRfdXBkYXRlKSkgewotICAgIGlmICghZ3N0X3ZpZGVvX2Nyb3Bfc2V0X2luZm8gKHZmaWx0ZXIsIE5VTEwsICZ2Y3JvcC0+aW5faW5mbywgTlVMTCwKLSAgICAgICAgICAgICZ2Y3JvcC0+b3V0X2luZm8pKSB7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgc3dpdGNoICh2Y3JvcC0+cGFja2luZykgewotICAgIGNhc2UgVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfUEFDS0VEX1NJTVBMRToKLSAgICAgIGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wYWNrZWRfc2ltcGxlICh2Y3JvcCwgaW5fZnJhbWUsIG91dF9mcmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFZJREVPX0NST1BfUElYRUxfRk9STUFUX1BBQ0tFRF9DT01QTEVYOgotICAgICAgZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX3BhY2tlZF9jb21wbGV4ICh2Y3JvcCwgaW5fZnJhbWUsIG91dF9mcmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFZJREVPX0NST1BfUElYRUxfRk9STUFUX1BMQU5BUjoKLSAgICAgIGdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9wbGFuYXIgKHZjcm9wLCBpbl9mcmFtZSwgb3V0X2ZyYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfU0VNSV9QTEFOQVI6Ci0gICAgICBnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fc2VtaV9wbGFuYXIgKHZjcm9wLCBpbl9mcmFtZSwgb3V0X2ZyYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIGdpbnQKLWdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9kaW1lbnNpb24gKGdpbnQgdmFsLCBnaW50IGRlbHRhKQotewotICBnaW50NjQgbmV3X3ZhbCA9IChnaW50NjQpIHZhbCArIChnaW50NjQpIGRlbHRhOwotCi0gIG5ld192YWwgPSBDTEFNUCAobmV3X3ZhbCwgMSwgR19NQVhJTlQpOwotCi0gIHJldHVybiAoZ2ludCkgbmV3X3ZhbDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fZGltZW5zaW9uX3ZhbHVlIChjb25zdCBHVmFsdWUgKiBzcmNfdmFsLAotICAgIGdpbnQgZGVsdGEsIEdWYWx1ZSAqIGRlc3RfdmFsLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBnYm9vbGVhbiBkeW5hbWljKQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIGlmIChHX1ZBTFVFX0hPTERTX0lOVCAoc3JjX3ZhbCkpIHsKLSAgICBnaW50IGl2YWwgPSBnX3ZhbHVlX2dldF9pbnQgKHNyY192YWwpOwotICAgIGl2YWwgPSBnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fZGltZW5zaW9uIChpdmFsLCBkZWx0YSk7Ci0KLSAgICBpZiAoZHluYW1pYykgewotICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykgewotICAgICAgICBpZiAoaXZhbCA9PSBHX01BWElOVCkgewotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdF92YWwsIEdfVFlQRV9JTlQpOwotICAgICAgICAgIGdfdmFsdWVfc2V0X2ludCAoZGVzdF92YWwsIGl2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdF92YWwsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gICAgICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKGRlc3RfdmFsLCBpdmFsLCBHX01BWElOVCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChpdmFsID09IDEpIHsKLSAgICAgICAgICBnX3ZhbHVlX2luaXQgKGRlc3RfdmFsLCBHX1RZUEVfSU5UKTsKLSAgICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKGRlc3RfdmFsLCBpdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnX3ZhbHVlX2luaXQgKGRlc3RfdmFsLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICAgICAgICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlIChkZXN0X3ZhbCwgMSwgaXZhbCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZ192YWx1ZV9pbml0IChkZXN0X3ZhbCwgR19UWVBFX0lOVCk7Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKGRlc3RfdmFsLCBpdmFsKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoc3JjX3ZhbCkpIHsKLSAgICBnaW50IG1pbiA9IGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoc3JjX3ZhbCk7Ci0gICAgZ2ludCBtYXggPSBnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHNyY192YWwpOwotCi0gICAgbWluID0gZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX2RpbWVuc2lvbiAobWluLCBkZWx0YSk7Ci0gICAgbWF4ID0gZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX2RpbWVuc2lvbiAobWF4LCBkZWx0YSk7Ci0KLSAgICBpZiAoZHluYW1pYykgewotICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NSQykKLSAgICAgICAgbWF4ID0gR19NQVhJTlQ7Ci0gICAgICBlbHNlCi0gICAgICAgIG1pbiA9IDE7Ci0gICAgfQotCi0gICAgaWYgKG1pbiA9PSBtYXgpIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAoZGVzdF92YWwsIEdfVFlQRV9JTlQpOwotICAgICAgZ192YWx1ZV9zZXRfaW50IChkZXN0X3ZhbCwgbWluKTsKLSAgICB9IGVsc2UgewotICAgICAgZ192YWx1ZV9pbml0IChkZXN0X3ZhbCwgR1NUX1RZUEVfSU5UX1JBTkdFKTsKLSAgICAgIGdzdF92YWx1ZV9zZXRfaW50X3JhbmdlIChkZXN0X3ZhbCwgbWluLCBtYXgpOwotICAgIH0KLSAgfSBlbHNlIGlmIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoc3JjX3ZhbCkpIHsKLSAgICBnaW50IGk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKGRlc3RfdmFsLCBHU1RfVFlQRV9MSVNUKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoc3JjX3ZhbCk7ICsraSkgewotICAgICAgY29uc3QgR1ZhbHVlICpsaXN0X3ZhbDsKLSAgICAgIEdWYWx1ZSBuZXd2YWwgPSB7IDAsIH07Ci0KLSAgICAgIGxpc3RfdmFsID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChzcmNfdmFsLCBpKTsKLSAgICAgIGlmIChnc3RfdmlkZW9fY3JvcF90cmFuc2Zvcm1fZGltZW5zaW9uX3ZhbHVlIChsaXN0X3ZhbCwgZGVsdGEsICZuZXd2YWwsCi0gICAgICAgICAgICAgIGRpcmVjdGlvbiwgZHluYW1pYykpCi0gICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoZGVzdF92YWwsICZuZXd2YWwpOwotICAgICAgZ192YWx1ZV91bnNldCAoJm5ld3ZhbCk7Ci0gICAgfQotCi0gICAgaWYgKGdzdF92YWx1ZV9saXN0X2dldF9zaXplIChkZXN0X3ZhbCkgPT0gMCkgewotICAgICAgZ192YWx1ZV91bnNldCAoZGVzdF92YWwpOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHJldCA9IEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcl9jYXBzKQotewotICBHc3RWaWRlb0Nyb3AgKnZjcm9wOwotICBHc3RDYXBzICpvdGhlcl9jYXBzOwotICBnaW50IGR5LCBkeCwgaSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wOwotICBnYm9vbGVhbiB3X2R5bmFtaWMsIGhfZHluYW1pYzsKLQotICB2Y3JvcCA9IEdTVF9WSURFT19DUk9QICh0cmFucyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh2Y3JvcCk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHZjcm9wLCAibD0lZCxyPSVkLGI9JWQsdD0lZCIsCi0gICAgICB2Y3JvcC0+cHJvcF9sZWZ0LCB2Y3JvcC0+cHJvcF9yaWdodCwgdmNyb3AtPnByb3BfYm90dG9tLCB2Y3JvcC0+cHJvcF90b3ApOwotCi0gIHdfZHluYW1pYyA9ICh2Y3JvcC0+cHJvcF9sZWZ0ID09IC0xIHx8IHZjcm9wLT5wcm9wX3JpZ2h0ID09IC0xKTsKLSAgaF9keW5hbWljID0gKHZjcm9wLT5wcm9wX3RvcCA9PSAtMSB8fCB2Y3JvcC0+cHJvcF9ib3R0b20gPT0gLTEpOwotCi0gIGxlZnQgPSAodmNyb3AtPnByb3BfbGVmdCA9PSAtMSkgPyAwIDogdmNyb3AtPnByb3BfbGVmdDsKLSAgcmlnaHQgPSAodmNyb3AtPnByb3BfcmlnaHQgPT0gLTEpID8gMCA6IHZjcm9wLT5wcm9wX3JpZ2h0OwotICBib3R0b20gPSAodmNyb3AtPnByb3BfYm90dG9tID09IC0xKSA/IDAgOiB2Y3JvcC0+cHJvcF9ib3R0b207Ci0gIHRvcCA9ICh2Y3JvcC0+cHJvcF90b3AgPT0gLTEpID8gMCA6IHZjcm9wLT5wcm9wX3RvcDsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAodmNyb3ApOwotCi0gIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpIHsKLSAgICBkeCA9IGxlZnQgKyByaWdodDsKLSAgICBkeSA9IHRvcCArIGJvdHRvbTsKLSAgfSBlbHNlIHsKLSAgICBkeCA9IDAgLSAobGVmdCArIHJpZ2h0KTsKLSAgICBkeSA9IDAgLSAodG9wICsgYm90dG9tKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUICh2Y3JvcCwgInRyYW5zZm9ybWluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBvdGhlcl9jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7ICsraSkgewotICAgIGNvbnN0IEdWYWx1ZSAqdjsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSwgKm5ld19zdHJ1Y3R1cmU7Ci0gICAgR1ZhbHVlIHdfdmFsID0geyAwLCB9LCBoX3ZhbCA9IHsKLSAgICAwLH07Ci0KLSAgICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLQotICAgIHYgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAid2lkdGgiKTsKLSAgICBpZiAoIWdzdF92aWRlb19jcm9wX3RyYW5zZm9ybV9kaW1lbnNpb25fdmFsdWUgKHYsIGR4LCAmd192YWwsIGRpcmVjdGlvbiwKLSAgICAgICAgICAgIHdfZHluYW1pYykpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodmNyb3AsICJjb3VsZCBub3QgdHJhbmZvcm0gd2lkdGggdmFsdWUgd2l0aCBkeD0lZCIKLSAgICAgICAgICAiLCBjYXBzIHN0cnVjdHVyZT0lIiBHU1RfUFRSX0ZPUk1BVCwgZHgsIHN0cnVjdHVyZSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICB2ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImhlaWdodCIpOwotICAgIGlmICghZ3N0X3ZpZGVvX2Nyb3BfdHJhbnNmb3JtX2RpbWVuc2lvbl92YWx1ZSAodiwgZHksICZoX3ZhbCwgZGlyZWN0aW9uLAotICAgICAgICAgICAgaF9keW5hbWljKSkgewotICAgICAgZ192YWx1ZV91bnNldCAoJndfdmFsKTsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodmNyb3AsICJjb3VsZCBub3QgdHJhbmZvcm0gaGVpZ2h0IHZhbHVlIHdpdGggZHk9JWQiCi0gICAgICAgICAgIiwgY2FwcyBzdHJ1Y3R1cmU9JSIgR1NUX1BUUl9GT1JNQVQsIGR5LCBzdHJ1Y3R1cmUpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgbmV3X3N0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoc3RydWN0dXJlKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAobmV3X3N0cnVjdHVyZSwgIndpZHRoIiwgJndfdmFsKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAobmV3X3N0cnVjdHVyZSwgImhlaWdodCIsICZoX3ZhbCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJndfdmFsKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmaF92YWwpOwotICAgIEdTVF9MT0dfT0JKRUNUICh2Y3JvcCwgInRyYW5zZm9ybWVkIHN0cnVjdHVyZSAlMmQ6ICUiIEdTVF9QVFJfRk9STUFUCi0gICAgICAgICIgPT4gJSIgR1NUX1BUUl9GT1JNQVQsIGksIHN0cnVjdHVyZSwgbmV3X3N0cnVjdHVyZSk7Ci0gICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAob3RoZXJfY2FwcywgbmV3X3N0cnVjdHVyZSk7Ci0gIH0KLQotICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5IChvdGhlcl9jYXBzKSAmJiBmaWx0ZXJfY2FwcykgewotICAgIEdzdENhcHMgKnRtcCA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXJfY2Fwcywgb3RoZXJfY2FwcywKLSAgICAgICAgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmb3RoZXJfY2FwcywgdG1wKTsKLSAgICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgfQotCi0gIHJldHVybiBvdGhlcl9jYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92aWRlb19jcm9wX3NldF9pbmZvIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsIEdzdENhcHMgKiBpbiwKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0LCBHc3RWaWRlb0luZm8gKiBvdXRfaW5mbykKLXsKLSAgR3N0VmlkZW9Dcm9wICpjcm9wID0gR1NUX1ZJREVPX0NST1AgKHZmaWx0ZXIpOwotICBpbnQgZHgsIGR5OwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoY3JvcCk7Ci0gIGNyb3AtPm5lZWRfdXBkYXRlID0gRkFMU0U7Ci0gIGNyb3AtPmNyb3BfbGVmdCA9IGNyb3AtPnByb3BfbGVmdDsKLSAgY3JvcC0+Y3JvcF9yaWdodCA9IGNyb3AtPnByb3BfcmlnaHQ7Ci0gIGNyb3AtPmNyb3BfdG9wID0gY3JvcC0+cHJvcF90b3A7Ci0gIGNyb3AtPmNyb3BfYm90dG9tID0gY3JvcC0+cHJvcF9ib3R0b207Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChjcm9wKTsKLQotICBkeCA9IEdTVF9WSURFT19JTkZPX1dJRFRIIChpbl9pbmZvKSAtIEdTVF9WSURFT19JTkZPX1dJRFRIIChvdXRfaW5mbyk7Ci0gIGR5ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKSAtIEdTVF9WSURFT19JTkZPX0hFSUdIVCAob3V0X2luZm8pOwotCi0gIGlmIChjcm9wLT5jcm9wX2xlZnQgPT0gLTEgJiYgY3JvcC0+Y3JvcF9yaWdodCA9PSAtMSkgewotICAgIGNyb3AtPmNyb3BfbGVmdCA9IGR4IC8gMjsKLSAgICBjcm9wLT5jcm9wX3JpZ2h0ID0gZHggLyAyICsgKGR4ICYgMSk7Ci0gIH0gZWxzZSBpZiAoY3JvcC0+Y3JvcF9sZWZ0ID09IC0xKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGNyb3AtPmNyb3BfcmlnaHQgPiBkeCkpCi0gICAgICBnb3RvIGNyb3BwaW5nX3Rvb19tdWNoOwotICAgIGNyb3AtPmNyb3BfbGVmdCA9IGR4IC0gY3JvcC0+Y3JvcF9yaWdodDsKLSAgfSBlbHNlIGlmIChjcm9wLT5jcm9wX3JpZ2h0ID09IC0xKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGNyb3AtPmNyb3BfbGVmdCA+IGR4KSkKLSAgICAgIGdvdG8gY3JvcHBpbmdfdG9vX211Y2g7Ci0gICAgY3JvcC0+Y3JvcF9yaWdodCA9IGR4IC0gY3JvcC0+Y3JvcF9sZWZ0OwotICB9Ci0KLSAgaWYgKGNyb3AtPmNyb3BfdG9wID09IC0xICYmIGNyb3AtPmNyb3BfYm90dG9tID09IC0xKSB7Ci0gICAgY3JvcC0+Y3JvcF90b3AgPSBkeSAvIDI7Ci0gICAgY3JvcC0+Y3JvcF9ib3R0b20gPSBkeSAvIDIgKyAoZHkgJiAxKTsKLSAgfSBlbHNlIGlmIChjcm9wLT5jcm9wX3RvcCA9PSAtMSkgewotICAgIGlmIChHX1VOTElLRUxZIChjcm9wLT5jcm9wX2JvdHRvbSA+IGR5KSkKLSAgICAgIGdvdG8gY3JvcHBpbmdfdG9vX211Y2g7Ci0gICAgY3JvcC0+Y3JvcF90b3AgPSBkeSAtIGNyb3AtPmNyb3BfYm90dG9tOwotICB9IGVsc2UgaWYgKGNyb3AtPmNyb3BfYm90dG9tID09IC0xKSB7Ci0gICAgaWYgKEdfVU5MSUtFTFkgKGNyb3AtPmNyb3BfdG9wID4gZHkpKQotICAgICAgZ290byBjcm9wcGluZ190b29fbXVjaDsKLSAgICBjcm9wLT5jcm9wX2JvdHRvbSA9IGR5IC0gY3JvcC0+Y3JvcF90b3A7Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAoKGNyb3AtPmNyb3BfbGVmdCArIGNyb3AtPmNyb3BfcmlnaHQpID49Ci0gICAgICAgICAgR1NUX1ZJREVPX0lORk9fV0lEVEggKGluX2luZm8pCi0gICAgICAgICAgfHwgKGNyb3AtPmNyb3BfdG9wICsgY3JvcC0+Y3JvcF9ib3R0b20pID49Ci0gICAgICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUIChpbl9pbmZvKSkpCi0gICAgZ290byBjcm9wcGluZ190b29fbXVjaDsKLQotICBpZiAoaW4gJiYgb3V0KQotICAgIEdTVF9MT0dfT0JKRUNUIChjcm9wLCAiaW5jYXBzID0gJSIgR1NUX1BUUl9GT1JNQVQgIiwgb3V0Y2FwcyA9ICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBpbiwgb3V0KTsKLQotICBpZiAoKGNyb3AtPmNyb3BfbGVmdCB8IGNyb3AtPmNyb3BfcmlnaHQgfCBjcm9wLT5jcm9wX3RvcCB8IGNyb3AtPgotICAgICAgICAgIGNyb3BfYm90dG9tKSA9PSAwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGNyb3AsICJ3ZSBhcmUgdXNpbmcgcGFzc3Rocm91Z2giKTsKLSAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGNyb3ApLCBUUlVFKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoY3JvcCwgIndlIGFyZSBub3QgdXNpbmcgcGFzc3Rocm91Z2giKTsKLSAgICBnc3RfYmFzZV90cmFuc2Zvcm1fc2V0X3Bhc3N0aHJvdWdoIChHU1RfQkFTRV9UUkFOU0ZPUk0gKGNyb3ApLCBGQUxTRSk7Ci0gIH0KLQotICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfUkdCIChpbl9pbmZvKQotICAgICAgfHwgR1NUX1ZJREVPX0lORk9fSVNfR1JBWSAoaW5faW5mbykpIHsKLSAgICBjcm9wLT5wYWNraW5nID0gVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfUEFDS0VEX1NJTVBMRTsKLSAgfSBlbHNlIHsKLSAgICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbykpIHsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgICBjcm9wLT5wYWNraW5nID0gVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfUEFDS0VEX1NJTVBMRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVZZVToKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgICAgIGNyb3AtPnBhY2tpbmcgPSBWSURFT19DUk9QX1BJWEVMX0ZPUk1BVF9QQUNLRURfQ09NUExFWDsKLSAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbykgPT0gR1NUX1ZJREVPX0ZPUk1BVF9VWVZZKSB7Ci0gICAgICAgICAgLyogVVlWWSA9IDQ6MjoyIC0gW1UwIFkwIFYwIFkxXSBbVTIgWTIgVjIgWTNdIFtVNCBZNCBWNCBZNV0gKi8KLSAgICAgICAgICBjcm9wLT5tYWNyb195X29mZiA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogWVVZViA9IDQ6MjoyIC0gW1kwIFUwIFkxIFYwXSBbWTIgVTIgWTMgVjJdIFtZNCBVNCBZNSBWNF0gPSBZVVkyICovCi0gICAgICAgICAgY3JvcC0+bWFjcm9feV9vZmYgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICAgICAgY3JvcC0+cGFja2luZyA9IFZJREVPX0NST1BfUElYRUxfRk9STUFUX1BMQU5BUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfTlYxMjoKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjIxOgotICAgICAgICBjcm9wLT5wYWNraW5nID0gVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfU0VNSV9QTEFOQVI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ290byB1bmtub3duX2Zvcm1hdDsKLSAgICB9Ci0gIH0KLQotICBjcm9wLT5pbl9pbmZvID0gKmluX2luZm87Ci0gIGNyb3AtPm91dF9pbmZvID0gKm91dF9pbmZvOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SICovCi1jcm9wcGluZ190b29fbXVjaDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY3JvcCwgIndlIGFyZSBjcm9wcGluZyB0b28gbXVjaCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5rbm93bl9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNyb3AsICJVbnN1cHBvcnRlZCBmb3JtYXQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyogY2FsbGVkIHdpdGggb2JqZWN0IGxvY2sgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZ3N0X3ZpZGVvX2Nyb3Bfc2V0X2Nyb3AgKEdzdFZpZGVvQ3JvcCAqIHZjcm9wLCBnaW50IG5ld192YWx1ZSwgZ2ludCAqIHByb3ApCi17Ci0gIGlmICgqcHJvcCAhPSBuZXdfdmFsdWUpIHsKLSAgICAqcHJvcCA9IG5ld192YWx1ZTsKLSAgICB2Y3JvcC0+bmVlZF91cGRhdGUgPSBUUlVFOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fY3JvcF9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9Dcm9wICp2aWRlb19jcm9wOwotCi0gIHZpZGVvX2Nyb3AgPSBHU1RfVklERU9fQ1JPUCAob2JqZWN0KTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHZpZGVvX2Nyb3ApOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTEVGVDoKLSAgICAgIGdzdF92aWRlb19jcm9wX3NldF9jcm9wICh2aWRlb19jcm9wLCBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKSwKLSAgICAgICAgICAmdmlkZW9fY3JvcC0+cHJvcF9sZWZ0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9SSUdIVDoKLSAgICAgIGdzdF92aWRlb19jcm9wX3NldF9jcm9wICh2aWRlb19jcm9wLCBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKSwKLSAgICAgICAgICAmdmlkZW9fY3JvcC0+cHJvcF9yaWdodCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVE9QOgotICAgICAgZ3N0X3ZpZGVvX2Nyb3Bfc2V0X2Nyb3AgKHZpZGVvX2Nyb3AsIGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpLAotICAgICAgICAgICZ2aWRlb19jcm9wLT5wcm9wX3RvcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQk9UVE9NOgotICAgICAgZ3N0X3ZpZGVvX2Nyb3Bfc2V0X2Nyb3AgKHZpZGVvX2Nyb3AsIGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpLAotICAgICAgICAgICZ2aWRlb19jcm9wLT5wcm9wX2JvdHRvbSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIEdTVF9MT0dfT0JKRUNUICh2aWRlb19jcm9wLCAibD0lZCxyPSVkLGI9JWQsdD0lZCwgbmVlZF91cGRhdGU6JWQiLAotICAgICAgdmlkZW9fY3JvcC0+cHJvcF9sZWZ0LCB2aWRlb19jcm9wLT5wcm9wX3JpZ2h0LCB2aWRlb19jcm9wLT5wcm9wX2JvdHRvbSwKLSAgICAgIHZpZGVvX2Nyb3AtPnByb3BfdG9wLCB2aWRlb19jcm9wLT5uZWVkX3VwZGF0ZSk7Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHZpZGVvX2Nyb3ApOwotCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9yZWNvbmZpZ3VyZV9zcmMgKEdTVF9CQVNFX1RSQU5TRk9STSAodmlkZW9fY3JvcCkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2Nyb3BfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFZpZGVvQ3JvcCAqdmlkZW9fY3JvcDsKLQotICB2aWRlb19jcm9wID0gR1NUX1ZJREVPX0NST1AgKG9iamVjdCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh2aWRlb19jcm9wKTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0xFRlQ6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB2aWRlb19jcm9wLT5wcm9wX2xlZnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JJR0hUOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdmlkZW9fY3JvcC0+cHJvcF9yaWdodCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVE9QOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdmlkZW9fY3JvcC0+cHJvcF90b3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JPVFRPTToKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHZpZGVvX2Nyb3AtPnByb3BfYm90dG9tKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHZpZGVvX2Nyb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2aWRlb2Nyb3BfZGVidWcsICJ2aWRlb2Nyb3AiLCAwLCAidmlkZW9jcm9wIik7Ci0KLSAgaWYgKGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2aWRlb2Nyb3AiLCBHU1RfUkFOS19OT05FLAotICAgICAgICAgIEdTVF9UWVBFX1ZJREVPX0NST1ApCi0gICAgICAmJiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiYXNwZWN0cmF0aW9jcm9wIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9BU1BFQ1RfUkFUSU9fQ1JPUCkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgdmlkZW9jcm9wLAotICAgICJDcm9wcyB2aWRlbyBpbnRvIGEgdXNlci1kZWZpbmVkIHJlZ2lvbiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5oIGIvZ3N0L3ZpZGVvY3JvcC9nc3R2aWRlb2Nyb3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY1NGU4NC4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9jcm9wL2dzdHZpZGVvY3JvcC5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyogR1N0cmVhbWVyIHZpZGVvIGZyYW1lIGNyb3BwaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1ZJREVPX0NST1BfSF9fCi0jZGVmaW5lIF9fR1NUX1ZJREVPX0NST1BfSF9fCi0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZJREVPX0NST1AgXAotICAoZ3N0X3ZpZGVvX2Nyb3BfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1ZJREVPX0NST1Aob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9WSURFT19DUk9QLEdzdFZpZGVvQ3JvcCkpCi0jZGVmaW5lIEdTVF9WSURFT19DUk9QX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1ZJREVPX0NST1AsR3N0VmlkZW9Dcm9wQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVklERU9fQ1JPUChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1ZJREVPX0NST1ApKQotI2RlZmluZSBHU1RfSVNfVklERU9fQ1JPUF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WSURFT19DUk9QKSkKLQotdHlwZWRlZiBlbnVtIHsKLSAgVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfUEFDS0VEX1NJTVBMRSA9IDAsICAvKiBSR0J4LCBBWVVWICovCi0gIFZJREVPX0NST1BfUElYRUxfRk9STUFUX1BBQ0tFRF9DT01QTEVYLCAgICAgLyogVVlWWSwgWVZZVSAqLwotICBWSURFT19DUk9QX1BJWEVMX0ZPUk1BVF9QTEFOQVIsICAgICAgICAgICAgIC8qIEk0MjAsIFlWMTIgKi8KLSAgVklERU9fQ1JPUF9QSVhFTF9GT1JNQVRfU0VNSV9QTEFOQVIgICAgICAgICAvKiBOVjEyLCBOVjIxICovCi19IFZpZGVvQ3JvcFBpeGVsRm9ybWF0OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9Dcm9wSW1hZ2VEZXRhaWxzIEdzdFZpZGVvQ3JvcEltYWdlRGV0YWlsczsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvQ3JvcCBHc3RWaWRlb0Nyb3A7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9Dcm9wQ2xhc3MgR3N0VmlkZW9Dcm9wQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0VmlkZW9Dcm9wCi17Ci0gIEdzdFZpZGVvRmlsdGVyIHBhcmVudDsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ2ludCBwcm9wX2xlZnQ7Ci0gIGdpbnQgcHJvcF9yaWdodDsKLSAgZ2ludCBwcm9wX3RvcDsKLSAgZ2ludCBwcm9wX2JvdHRvbTsKLSAgZ2Jvb2xlYW4gbmVlZF91cGRhdGU7Ci0KLSAgR3N0VmlkZW9JbmZvIGluX2luZm87Ci0gIEdzdFZpZGVvSW5mbyBvdXRfaW5mbzsKLQotICBnaW50IGNyb3BfbGVmdDsKLSAgZ2ludCBjcm9wX3JpZ2h0OwotICBnaW50IGNyb3BfdG9wOwotICBnaW50IGNyb3BfYm90dG9tOwotCi0gIFZpZGVvQ3JvcFBpeGVsRm9ybWF0ICBwYWNraW5nOwotICBnaW50IG1hY3JvX3lfb2ZmOwotfTsKLQotc3RydWN0IF9Hc3RWaWRlb0Nyb3BDbGFzcwotewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF92aWRlb19jcm9wX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1ZJREVPX0NST1BfSF9fICovCi0KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbSBiL2dzdC92aWRlb2ZpbHRlci9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjYWU0Ni4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlb2ZpbHRlci5sYQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHZpZGVvZmxpcC5oIGdzdHZpZGVvYmFsYW5jZS5oIGdzdGdhbW1hLmggZ3N0dmlkZW9tZWRpYW4uaAotCi1FWFRSQV9ESVNUID0gZ3N0dmlkZW90ZW1wbGF0ZS5jIG1ha2VfZmlsdGVyCi1DTEVBTkZJTEVTID0gZ3N0dmlkZW9leGFtcGxlLmMKLQotbGliZ3N0dmlkZW9maWx0ZXJfbGFfU09VUkNFUyA9IHBsdWdpbi5jIFwKLQkJCWdzdHZpZGVvZmxpcC5jIFwKLQkJCWdzdHZpZGVvYmFsYW5jZS5jIFwKLQkJCWdzdGdhbW1hLmMgXAotCQkJZ3N0dmlkZW9tZWRpYW4uYwotbGliZ3N0dmlkZW9maWx0ZXJfbGFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKSBcCi0JCQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCQkJJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLWxpYmdzdHZpZGVvZmlsdGVyX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JCQktbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkJCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLWxpYmdzdHZpZGVvZmlsdGVyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgJChMSUJNKQotbGliZ3N0dmlkZW9maWx0ZXJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotZ3N0dmlkZW9leGFtcGxlLmM6ICQoc3JjZGlyKS9tYWtlX2ZpbHRlciAkKHNyY2RpcikvZ3N0dmlkZW90ZW1wbGF0ZS5jCi0JJChzcmNkaXIpL21ha2VfZmlsdGVyIFZpZGVvZXhhbXBsZSAkKHNyY2RpcikvZ3N0dmlkZW90ZW1wbGF0ZS5jCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuaW4gYi9nc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNmU3ZWQuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvZmlsdGVyL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTYyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IGdzdC92aWRlb2ZpbHRlcgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHZpZGVvZmlsdGVyX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0dmlkZW9maWx0ZXJfbGFfT0JKRUNUUyA9IGxpYmdzdHZpZGVvZmlsdGVyX2xhLXBsdWdpbi5sbyBcCi0JbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9mbGlwLmxvIFwKLQlsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2JhbGFuY2UubG8gXAotCWxpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdGdhbW1hLmxvIFwKLQlsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb21lZGlhbi5sbwotbGliZ3N0dmlkZW9maWx0ZXJfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0dmlkZW9maWx0ZXJfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHZpZGVvZmlsdGVyX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0dmlkZW9maWx0ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlb2ZpbHRlci5sYQotbm9pbnN0X0hFQURFUlMgPSBnc3R2aWRlb2ZsaXAuaCBnc3R2aWRlb2JhbGFuY2UuaCBnc3RnYW1tYS5oIGdzdHZpZGVvbWVkaWFuLmgKLUVYVFJBX0RJU1QgPSBnc3R2aWRlb3RlbXBsYXRlLmMgbWFrZV9maWx0ZXIKLUNMRUFORklMRVMgPSBnc3R2aWRlb2V4YW1wbGUuYwotbGliZ3N0dmlkZW9maWx0ZXJfbGFfU09VUkNFUyA9IHBsdWdpbi5jIFwKLQkJCWdzdHZpZGVvZmxpcC5jIFwKLQkJCWdzdHZpZGVvYmFsYW5jZS5jIFwKLQkJCWdzdGdhbW1hLmMgXAotCQkJZ3N0dmlkZW9tZWRpYW4uYwotCi1saWJnc3R2aWRlb2ZpbHRlcl9sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpIFwKLQkJCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JCQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKQotCi1saWJnc3R2aWRlb2ZpbHRlcl9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCQkJLWxnc3R2aWRlby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JCQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi0KLWxpYmdzdHZpZGVvZmlsdGVyX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgJChMSUJNKQotbGliZ3N0dmlkZW9maWx0ZXJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC92aWRlb2ZpbHRlci9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QvdmlkZW9maWx0ZXIvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R2aWRlb2ZpbHRlci5sYTogJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9PQkpFQ1RTKSAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R2aWRlb2ZpbHRlcl9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0dmlkZW9maWx0ZXJfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX09CSkVDVFMpICQobGliZ3N0dmlkZW9maWx0ZXJfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3RnYW1tYS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvYmFsYW5jZS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvZmxpcC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvbWVkaWFuLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW9maWx0ZXJfbGEtcGx1Z2luLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R2aWRlb2ZpbHRlcl9sYS1wbHVnaW4ubG86IHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9maWx0ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW9maWx0ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvZmlsdGVyX2xhLXBsdWdpbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW9maWx0ZXJfbGEtcGx1Z2luLlRwbyAtYyAtbyBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1wbHVnaW4ubG8gYHRlc3QgLWYgJ3BsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwbHVnaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW9maWx0ZXJfbGEtcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW9maWx0ZXJfbGEtcGx1Z2luLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3BsdWdpbi5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvZmlsdGVyX2xhLXBsdWdpbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvZmlsdGVyX2xhLXBsdWdpbi5sbyBgdGVzdCAtZiAncGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHBsdWdpbi5jCi0KLWxpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvZmxpcC5sbzogZ3N0dmlkZW9mbGlwLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9mbGlwLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2ZsaXAuVHBvIC1jIC1vIGxpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvZmxpcC5sbyBgdGVzdCAtZiAnZ3N0dmlkZW9mbGlwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHZpZGVvZmxpcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2ZsaXAuVHBvICQoREVQRElSKS9saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2ZsaXAuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0dmlkZW9mbGlwLmMnIG9iamVjdD0nbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9mbGlwLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9maWx0ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW9maWx0ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9mbGlwLmxvIGB0ZXN0IC1mICdnc3R2aWRlb2ZsaXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmlkZW9mbGlwLmMKLQotbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9iYWxhbmNlLmxvOiBnc3R2aWRlb2JhbGFuY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2JhbGFuY2UubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvYmFsYW5jZS5UcG8gLWMgLW8gbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9iYWxhbmNlLmxvIGB0ZXN0IC1mICdnc3R2aWRlb2JhbGFuY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmlkZW9iYWxhbmNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvYmFsYW5jZS5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvYmFsYW5jZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2aWRlb2JhbGFuY2UuYycgb2JqZWN0PSdsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2JhbGFuY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb2JhbGFuY2UubG8gYHRlc3QgLWYgJ2dzdHZpZGVvYmFsYW5jZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2aWRlb2JhbGFuY2UuYwotCi1saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3RnYW1tYS5sbzogZ3N0Z2FtbWEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3RnYW1tYS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0Z2FtbWEuVHBvIC1jIC1vIGxpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdGdhbW1hLmxvIGB0ZXN0IC1mICdnc3RnYW1tYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RnYW1tYS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3RnYW1tYS5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdGdhbW1hLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGdhbW1hLmMnIG9iamVjdD0nbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0Z2FtbWEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3RnYW1tYS5sbyBgdGVzdCAtZiAnZ3N0Z2FtbWEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0Z2FtbWEuYwotCi1saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb21lZGlhbi5sbzogZ3N0dmlkZW9tZWRpYW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvZmlsdGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb21lZGlhbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9tZWRpYW4uVHBvIC1jIC1vIGxpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvbWVkaWFuLmxvIGB0ZXN0IC1mICdnc3R2aWRlb21lZGlhbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2aWRlb21lZGlhbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb21lZGlhbi5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvZmlsdGVyX2xhLWdzdHZpZGVvbWVkaWFuLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHZpZGVvbWVkaWFuLmMnIG9iamVjdD0nbGliZ3N0dmlkZW9maWx0ZXJfbGEtZ3N0dmlkZW9tZWRpYW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb2ZpbHRlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlb2ZpbHRlcl9sYS1nc3R2aWRlb21lZGlhbi5sbyBgdGVzdCAtZiAnZ3N0dmlkZW9tZWRpYW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0dmlkZW9tZWRpYW4uYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLWdzdHZpZGVvZXhhbXBsZS5jOiAkKHNyY2RpcikvbWFrZV9maWx0ZXIgJChzcmNkaXIpL2dzdHZpZGVvdGVtcGxhdGUuYwotCSQoc3JjZGlyKS9tYWtlX2ZpbHRlciBWaWRlb2V4YW1wbGUgJChzcmNkaXIpL2dzdHZpZGVvdGVtcGxhdGUuYwotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvZ3N0Z2FtbWEuYyBiL2dzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDQ0MDlmLi4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFyd2VkIHYuIE1lcmthdHogPHYubWVya2F0ekBnbXgubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFRoaXMgZmlsZSB3YXMgKHByb2JhYmx5KSBnZW5lcmF0ZWQgZnJvbQotICogZ3N0dmlkZW90ZW1wbGF0ZS5jLHYgMS4xMiAyMDA0LzAxLzA3IDIxOjA3OjEyIGRzIEV4cCAKLSAqIGFuZAotICogbWFrZV9maWx0ZXIsdiAxLjYgMjAwNC8wMS8wNyAyMTozMzowMSBkcyBFeHAgCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtZ2FtbWEKLSAqCi0gKiBQZXJmb3JtcyBnYW1tYSBjb3JyZWN0aW9uIG9uIGEgdmlkZW8gc3RyZWFtLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBnYW1tYSBnYW1tYT0yLjAgISB2aWRlb2NvbnZlcnQgISB4aW1hZ2VzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHdpbGwgbWFrZSB0aGUgaW1hZ2UgImJyaWdodGVyIi4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBnYW1tYSBnYW1tYT0wLjUgISB2aWRlb2NvbnZlcnQgISB4aW1hZ2VzaW5rCi0gKiBdfCBUaGlzIHBpcGVsaW5lIHdpbGwgbWFrZSB0aGUgaW1hZ2UgImRhcmtlciIuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGdhbW1hLmgiCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdhbW1hX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdhbW1hX2RlYnVnCi0KLS8qIEdzdEdhbW1hIHByb3BlcnRpZXMgKi8KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0dBTU1BCi0gICAgICAvKiBGSUxMIE1FICovCi19OwotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9HQU1NQSAgMQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X2dhbW1hX3NyY190ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBBWVVWLCAiCi0gICAgICAgICAgICAiQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgIgotICAgICAgICAgICAgInhSR0IsIFJHQngsIHhCR1IsIEJHUngsIFJHQiwgQkdSLCBZNDJCLCBOVjEyLCAiCi0gICAgICAgICAgICAiTlYyMSwgWVVZMiwgVVlWWSwgWVZZVSwgSTQyMCwgWVYxMiwgSVlVViwgWTQxQiB9IikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9nYW1tYV9zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQVlVViwgIgotICAgICAgICAgICAgIkFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsICIKLSAgICAgICAgICAgICJ4UkdCLCBSR0J4LCB4QkdSLCBCR1J4LCBSR0IsIEJHUiwgWTQyQiwgTlYxMiwgIgotICAgICAgICAgICAgIk5WMjEsIFlVWTIsIFVZVlksIFlWWVUsIEk0MjAsIFlWMTIsIElZVVYsIFk0MUIgfSIpKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9nYW1tYV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZ2FtbWFfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2dhbW1hX3NldF9pbmZvIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsIEdzdENhcHMgKiBpbmNhcHMsCi0gICAgR3N0VmlkZW9JbmZvICogaW5faW5mbywgR3N0Q2FwcyAqIG91dGNhcHMsIEdzdFZpZGVvSW5mbyAqIG91dF9pbmZvKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF9nYW1tYV90cmFuc2Zvcm1fZnJhbWVfaXAgKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUpOwotc3RhdGljIHZvaWQgZ3N0X2dhbW1hX2JlZm9yZV90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFuc2Zvcm0sCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLQotc3RhdGljIHZvaWQgZ3N0X2dhbW1hX2NhbGN1bGF0ZV90YWJsZXMgKEdzdEdhbW1hICogZ2FtbWEpOwotCi1HX0RFRklORV9UWVBFIChHc3RHYW1tYSwgZ3N0X2dhbW1hLCBHU1RfVFlQRV9WSURFT19GSUxURVIpOwotCi1zdGF0aWMgdm9pZAotZ3N0X2dhbW1hX2NsYXNzX2luaXQgKEdzdEdhbW1hQ2xhc3MgKiBnX2NsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGdfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikgZ19jbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikgZ19jbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGdfY2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdhbW1hX2RlYnVnLCAiZ2FtbWEiLCAwLCAiZ2FtbWEiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZ2FtbWFfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfZ2FtbWFfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfR0FNTUEsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiZ2FtbWEiLCAiR2FtbWEiLCAiZ2FtbWEiLAotICAgICAgICAgIDAuMDEsIDEwLCBERUZBVUxUX1BST1BfR0FNTUEsCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiVmlkZW8gZ2FtbWEgY29ycmVjdGlvbiIsICJGaWx0ZXIvRWZmZWN0L1ZpZGVvIiwKLSAgICAgICJBZGp1c3RzIGdhbW1hIG9uIGEgdmlkZW8gc3RyZWFtIiwgIkFyd2VkIHYuIE1lcmthdHogPHYubWVya2F0ekBnbXgubmV0Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X2dhbW1hX3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfZ2FtbWFfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dhbW1hX2JlZm9yZV90cmFuc2Zvcm0pOwotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2lwX29uX3Bhc3N0aHJvdWdoID0gRkFMU0U7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2dhbW1hX3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lX2lwID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZ2FtbWFfdHJhbnNmb3JtX2ZyYW1lX2lwKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nYW1tYV9pbml0IChHc3RHYW1tYSAqIGdhbW1hKQotewotICAvKiBwcm9wZXJ0aWVzICovCi0gIGdhbW1hLT5nYW1tYSA9IERFRkFVTFRfUFJPUF9HQU1NQTsKLSAgZ3N0X2dhbW1hX2NhbGN1bGF0ZV90YWJsZXMgKGdhbW1hKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nYW1tYV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0R2FtbWEgKmdhbW1hID0gR1NUX0dBTU1BIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9HQU1NQTp7Ci0gICAgICBnZG91YmxlIHZhbCA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChnYW1tYSwgIkNoYW5naW5nIGdhbW1hIGZyb20gJWxmIHRvICVsZiIsIGdhbW1hLT5nYW1tYSwKLSAgICAgICAgICB2YWwpOwotICAgICAgR1NUX09CSkVDVF9MT0NLIChnYW1tYSk7Ci0gICAgICBnYW1tYS0+Z2FtbWEgPSB2YWw7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoZ2FtbWEpOwotICAgICAgZ3N0X2dhbW1hX2NhbGN1bGF0ZV90YWJsZXMgKGdhbW1hKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZ2FtbWFfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwKLSAgICBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdEdhbW1hICpnYW1tYSA9IEdTVF9HQU1NQSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfR0FNTUE6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBnYW1tYS0+Z2FtbWEpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dhbW1hX2NhbGN1bGF0ZV90YWJsZXMgKEdzdEdhbW1hICogZ2FtbWEpCi17Ci0gIGdpbnQgbjsKLSAgZ2RvdWJsZSB2YWw7Ci0gIGdkb3VibGUgZXhwOwotICBnYm9vbGVhbiBwYXNzdGhyb3VnaCA9IEZBTFNFOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoZ2FtbWEpOwotICBpZiAoZ2FtbWEtPmdhbW1hID09IDEuMCkgewotICAgIHBhc3N0aHJvdWdoID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBleHAgPSAxLjAgLyBnYW1tYS0+Z2FtbWE7Ci0gICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAgICB2YWwgPSBuIC8gMjU1LjA7Ci0gICAgICB2YWwgPSBwb3cgKHZhbCwgZXhwKTsKLSAgICAgIHZhbCA9IDI1NS4wICogdmFsOwotICAgICAgZ2FtbWEtPmdhbW1hX3RhYmxlW25dID0gKGd1aW50OCkgZmxvb3IgKHZhbCArIDAuNSk7Ci0gICAgfQotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChnYW1tYSk7Ci0KLSAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoR1NUX0JBU0VfVFJBTlNGT1JNIChnYW1tYSksIHBhc3N0aHJvdWdoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9nYW1tYV9wbGFuYXJfeXV2X2lwIChHc3RHYW1tYSAqIGdhbW1hLCBHc3RWaWRlb0ZyYW1lICogZnJhbWUpCi17Ci0gIGdpbnQgaSwgaiwgaGVpZ2h0OwotICBnaW50IHdpZHRoLCBzdHJpZGUsIHJvd193cmFwOwotICBjb25zdCBndWludDggKnRhYmxlID0gZ2FtbWEtPmdhbW1hX3RhYmxlOwotICBndWludDggKmRhdGE7Ci0KLSAgZGF0YSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAwKTsKLSAgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCk7Ci0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGZyYW1lLCAwKTsKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMCk7Ci0gIHJvd193cmFwID0gc3RyaWRlIC0gd2lkdGg7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKLSAgICAgICpkYXRhID0gdGFibGVbKmRhdGFdOwotICAgICAgZGF0YSsrOwotICAgIH0KLSAgICBkYXRhICs9IHJvd193cmFwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZ2FtbWFfcGFja2VkX3l1dl9pcCAoR3N0R2FtbWEgKiBnYW1tYSwgR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQotewotICBnaW50IGksIGosIGhlaWdodDsKLSAgZ2ludCB3aWR0aCwgc3RyaWRlLCByb3dfd3JhcDsKLSAgZ2ludCBwaXhlbF9zdHJpZGU7Ci0gIGNvbnN0IGd1aW50OCAqdGFibGUgPSBnYW1tYS0+Z2FtbWFfdGFibGU7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDApOwotICBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCAwKTsKLSAgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZnJhbWUsIDApOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGZyYW1lLCAwKTsKLSAgcGl4ZWxfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoZnJhbWUsIDApOwotICByb3dfd3JhcCA9IHN0cmlkZSAtIHBpeGVsX3N0cmlkZSAqIHdpZHRoOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICAqZGF0YSA9IHRhYmxlWypkYXRhXTsKLSAgICAgIGRhdGEgKz0gcGl4ZWxfc3RyaWRlOwotICAgIH0KLSAgICBkYXRhICs9IHJvd193cmFwOwotICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQgY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2W10gPSB7Ci0gIDI5OCwgMCwgNDA5LCAtNTcwNjgsCi0gIDI5OCwgLTEwMCwgLTIwOCwgMzQ3MDcsCi0gIDI5OCwgNTE2LCAwLCAtNzA4NzAsCi19OwotCi1zdGF0aWMgY29uc3QgZ2ludCBjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHZbXSA9IHsKLSAgNjYsIDEyOSwgMjUsIDQwOTYsCi0gIC0zOCwgLTc0LCAxMTIsIDMyNzY4LAotICAxMTIsIC05NCwgLTE4LCAzMjc2OCwKLX07Ci0KLSNkZWZpbmUgQVBQTFlfTUFUUklYKG0sbyx2MSx2Mix2MykgKChtW28qNF0gKiB2MSArIG1bbyo0KzFdICogdjIgKyBtW28qNCsyXSAqIHYzICsgbVtvKjQrM10pID4+IDgpCi0KLXN0YXRpYyB2b2lkCi1nc3RfZ2FtbWFfcGFja2VkX3JnYl9pcCAoR3N0R2FtbWEgKiBnYW1tYSwgR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQotewotICBnaW50IGksIGosIGhlaWdodDsKLSAgZ2ludCB3aWR0aCwgc3RyaWRlLCByb3dfd3JhcDsKLSAgZ2ludCBwaXhlbF9zdHJpZGU7Ci0gIGNvbnN0IGd1aW50OCAqdGFibGUgPSBnYW1tYS0+Z2FtbWFfdGFibGU7Ci0gIGdpbnQgb2Zmc2V0c1szXTsKLSAgZ2ludCByLCBnLCBiOwotICBnaW50IHksIHUsIHY7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsKLSAgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMCk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDApOwotCi0gIG9mZnNldHNbMF0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGZyYW1lLCAwKTsKLSAgb2Zmc2V0c1sxXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZnJhbWUsIDEpOwotICBvZmZzZXRzWzJdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChmcmFtZSwgMik7Ci0KLSAgcGl4ZWxfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoZnJhbWUsIDApOwotICByb3dfd3JhcCA9IHN0cmlkZSAtIHBpeGVsX3N0cmlkZSAqIHdpZHRoOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICByID0gZGF0YVtvZmZzZXRzWzBdXTsKLSAgICAgIGcgPSBkYXRhW29mZnNldHNbMV1dOwotICAgICAgYiA9IGRhdGFbb2Zmc2V0c1syXV07Ci0KLSAgICAgIHkgPSBBUFBMWV9NQVRSSVggKGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0diwgMCwgciwgZywgYik7Ci0gICAgICB1ID0gQVBQTFlfTUFUUklYIChjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYsIDEsIHIsIGcsIGIpOwotICAgICAgdiA9IEFQUExZX01BVFJJWCAoY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2LCAyLCByLCBnLCBiKTsKLQotICAgICAgeSA9IHRhYmxlW0NMQU1QICh5LCAwLCAyNTUpXTsKLSAgICAgIHIgPSBBUFBMWV9NQVRSSVggKGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diwgMCwgeSwgdSwgdik7Ci0gICAgICBnID0gQVBQTFlfTUFUUklYIChjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHYsIDEsIHksIHUsIHYpOwotICAgICAgYiA9IEFQUExZX01BVFJJWCAoY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2LCAyLCB5LCB1LCB2KTsKLQotICAgICAgZGF0YVtvZmZzZXRzWzBdXSA9IENMQU1QIChyLCAwLCAyNTUpOwotICAgICAgZGF0YVtvZmZzZXRzWzFdXSA9IENMQU1QIChnLCAwLCAyNTUpOwotICAgICAgZGF0YVtvZmZzZXRzWzJdXSA9IENMQU1QIChiLCAwLCAyNTUpOwotICAgICAgZGF0YSArPSBwaXhlbF9zdHJpZGU7Ci0gICAgfQotICAgIGRhdGEgKz0gcm93X3dyYXA7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZ2FtbWFfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdEdhbW1hICpnYW1tYSA9IEdTVF9HQU1NQSAodmZpbHRlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZ2FtbWEsCi0gICAgICAic2V0dGluZyBjYXBzOiBpbiAlIiBHU1RfUFRSX0ZPUk1BVCAiIG91dCAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzLAotICAgICAgb3V0Y2Fwcyk7Ci0KLSAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKGluX2luZm8pKSB7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0k0MjA6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWMTI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMTI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMjE6Ci0gICAgICBnYW1tYS0+cHJvY2VzcyA9IGdzdF9nYW1tYV9wbGFuYXJfeXV2X2lwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lVWTI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWWVU6Ci0gICAgICBnYW1tYS0+cHJvY2VzcyA9IGdzdF9nYW1tYV9wYWNrZWRfeXV2X2lwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgICAgZ2FtbWEtPnByb2Nlc3MgPSBnc3RfZ2FtbWFfcGFja2VkX3JnYl9pcDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnb3RvIGludmFsaWRfY2FwczsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9jYXBzOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZ2FtbWEsICJJbnZhbGlkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBpbmNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2dhbW1hX2JlZm9yZV90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLCBHc3RCdWZmZXIgKiBvdXRidWYpCi17Ci0gIEdzdEdhbW1hICpnYW1tYSA9IEdTVF9HQU1NQSAoYmFzZSk7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpOwotICBzdHJlYW1fdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJmJhc2UtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChnYW1tYSwgInN5bmMgdG8gJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSk7Ci0KLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEIChzdHJlYW1fdGltZSkpCi0gICAgZ3N0X29iamVjdF9zeW5jX3ZhbHVlcyAoR1NUX09CSkVDVCAoZ2FtbWEpLCBzdHJlYW1fdGltZSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfZ2FtbWFfdHJhbnNmb3JtX2ZyYW1lX2lwIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0R2FtbWEgKmdhbW1hID0gR1NUX0dBTU1BICh2ZmlsdGVyKTsKLQotICBpZiAoIWdhbW1hLT5wcm9jZXNzKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChnYW1tYSk7Ci0gIGdhbW1hLT5wcm9jZXNzIChnYW1tYSwgZnJhbWUpOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoZ2FtbWEpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoZ2FtbWEsICJOb3QgbmVnb3RpYXRlZCB5ZXQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2ZpbHRlci9nc3RnYW1tYS5oIGIvZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZjk2N2IuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvZmlsdGVyL2dzdGdhbW1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDAzPiBEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcndlZCB2LiBNZXJrYXR6IDx2Lm1lcmthdHpAZ214Lm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNYXJrIE5hdXdlbGFlcnRzIDxtYW5hdXdAc2t5bmV0LmJlPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9WSURFT19HQU1NQV9IX18KLSNkZWZpbmUgX19HU1RfVklERU9fR0FNTUFfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9HQU1NQSBcCi0gIChnc3RfZ2FtbWFfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0dBTU1BKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfR0FNTUEsR3N0R2FtbWEpKQotI2RlZmluZSBHU1RfR0FNTUFfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfR0FNTUEsR3N0R2FtbWFDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19HQU1NQShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX0dBTU1BKSkKLSNkZWZpbmUgR1NUX0lTX0dBTU1BX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0dBTU1BKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdhbW1hIEdzdEdhbW1hOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdhbW1hQ2xhc3MgR3N0R2FtbWFDbGFzczsKLQotLyoqCi0gKiBHc3RHYW1tYToKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0R2FtbWEKLXsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgLyogcHJvcGVydGllcyAqLwotICBnZG91YmxlIGdhbW1hOwotCi0gIC8qIHRhYmxlcyAqLwotICBndWludDggZ2FtbWFfdGFibGVbMjU2XTsKLQotICB2b2lkICgqcHJvY2VzcykgKEdzdEdhbW1hICpnYW1tYSwgR3N0VmlkZW9GcmFtZSAqZnJhbWUpOwotfTsKLQotc3RydWN0IF9Hc3RHYW1tYUNsYXNzCi17Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X2dhbW1hX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVklERU9fR0FNTUFfSF9fICovCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmMgYi9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9iYWxhbmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OGJjZDcuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODQyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoKLSAqIFRoaXMgZmlsZSB3YXMgKHByb2JhYmx5KSBnZW5lcmF0ZWQgZnJvbSBnc3R2aWRlb2JhbGFuY2UuYywKLSAqIGdzdHZpZGVvYmFsYW5jZS5jLHYgMS43IDIwMDMvMTEvMDggMDI6NDg6NTkgZHNjaGxlZWYgRXhwIAotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXZpZGVvYmFsYW5jZQotICoKLSAqIEFkanVzdHMgYnJpZ2h0bmVzcywgY29udHJhc3QsIGh1ZSwgc2F0dXJhdGlvbiBvbiBhIHZpZGVvIHN0cmVhbS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjICEgdmlkZW9iYWxhbmNlIHNhdHVyYXRpb249MC4wICEgdmlkZW9jb252ZXJ0ICEgeGltYWdlc2luawotICogXXwgVGhpcyBwaXBlbGluZSBjb252ZXJ0cyB0aGUgaW1hZ2UgdG8gYmxhY2sgYW5kIHdoaXRlIGJ5IHNldHRpbmcgdGhlCi0gKiBzYXR1cmF0aW9uIHRvIDAuMC4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L21hdGgtY29tcGF0Lmg+Ci0KLSNpbmNsdWRlICJnc3R2aWRlb2JhbGFuY2UuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdzdC92aWRlby9jb2xvcmJhbGFuY2UuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAodmlkZW9iYWxhbmNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHZpZGVvYmFsYW5jZV9kZWJ1ZwotCi0vKiBHc3RWaWRlb0JhbGFuY2UgcHJvcGVydGllcyAqLwotI2RlZmluZSBERUZBVUxUX1BST1BfQ09OVFJBU1QJCTEuMAotI2RlZmluZSBERUZBVUxUX1BST1BfQlJJR0hUTkVTUwkJMC4wCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9IVUUJCTAuMAotI2RlZmluZSBERUZBVUxUX1BST1BfU0FUVVJBVElPTgkJMS4wCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0NPTlRSQVNULAotICBQUk9QX0JSSUdIVE5FU1MsCi0gIFBST1BfSFVFLAotICBQUk9QX1NBVFVSQVRJT04KLX07Ci0KLSNkZWZpbmUgUFJPQ0VTU0lOR19DQVBTIFwKLSAgInsgQVlVViwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgUkdCeCwgIiBcCi0gICJ4QkdSLCBCR1J4LCBSR0IsIEJHUiwgWTQyQiwgWVVZMiwgVVlWWSwgWVZZVSwgIiBcCi0gICJJNDIwLCBZVjEyLCBJWVVWLCBZNDFCLCBOVjEyLCBOVjIxIH0iCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdmlkZW9fYmFsYW5jZV9zcmNfdGVtcGxhdGUgPQotICAgIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKFBST0NFU1NJTkdfQ0FQUykgIjsiCi0gICAgICAgICJ2aWRlby94LXJhdyhBTlkpIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZ3N0X3ZpZGVvX2JhbGFuY2Vfc2lua190ZW1wbGF0ZSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFIChQUk9DRVNTSU5HX0NBUFMpICI7IgotICAgICAgICAidmlkZW8veC1yYXcoQU5ZKSIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X3ZpZGVvX2JhbGFuY2VfY29sb3JiYWxhbmNlX2luaXQgKEdzdENvbG9yQmFsYW5jZUludGVyZmFjZSAqCi0gICAgaWZhY2UpOwotCi1zdGF0aWMgdm9pZCBnc3RfdmlkZW9fYmFsYW5jZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdmlkZW9fYmFsYW5jZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLSNkZWZpbmUgZ3N0X3ZpZGVvX2JhbGFuY2VfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFZpZGVvQmFsYW5jZSwgZ3N0X3ZpZGVvX2JhbGFuY2UsCi0gICAgR1NUX1RZUEVfVklERU9fRklMVEVSLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfQ09MT1JfQkFMQU5DRSwKLSAgICAgICAgZ3N0X3ZpZGVvX2JhbGFuY2VfY29sb3JiYWxhbmNlX2luaXQpKTsKLQotLyoKLSAqIGxvb2stdXAgdGFibGVzIChMVVQpLgotICovCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2JhbGFuY2VfdXBkYXRlX3RhYmxlcyAoR3N0VmlkZW9CYWxhbmNlICogdmIpCi17Ci0gIGdpbnQgaSwgajsKLSAgZ2RvdWJsZSB5LCB1LCB2LCBodWVfY29zLCBodWVfc2luOwotCi0gIC8qIFkgKi8KLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgeSA9IDE2ICsgKChpIC0gMTYpICogdmItPmNvbnRyYXN0ICsgdmItPmJyaWdodG5lc3MgKiAyNTUpOwotICAgIGlmICh5IDwgMCkKLSAgICAgIHkgPSAwOwotICAgIGVsc2UgaWYgKHkgPiAyNTUpCi0gICAgICB5ID0gMjU1OwotICAgIHZiLT50YWJsZXlbaV0gPSByaW50ICh5KTsKLSAgfQotCi0gIGh1ZV9jb3MgPSBjb3MgKEdfUEkgKiB2Yi0+aHVlKTsKLSAgaHVlX3NpbiA9IHNpbiAoR19QSSAqIHZiLT5odWUpOwotCi0gIC8qIFUvViBsb29rdXAgdGFibGVzIGFyZSAyRCwgc2luY2Ugd2UgbmVlZCBib3RoIFUvViBmb3IgZWFjaCB0YWJsZQotICAgKiBzZXBhcmF0ZWx5LiAqLwotICBmb3IgKGkgPSAtMTI4OyBpIDwgMTI4OyBpKyspIHsKLSAgICBmb3IgKGogPSAtMTI4OyBqIDwgMTI4OyBqKyspIHsKLSAgICAgIHUgPSAxMjggKyAoKGkgKiBodWVfY29zICsgaiAqIGh1ZV9zaW4pICogdmItPnNhdHVyYXRpb24pOwotICAgICAgdiA9IDEyOCArICgoLWkgKiBodWVfc2luICsgaiAqIGh1ZV9jb3MpICogdmItPnNhdHVyYXRpb24pOwotICAgICAgaWYgKHUgPCAwKQotICAgICAgICB1ID0gMDsKLSAgICAgIGVsc2UgaWYgKHUgPiAyNTUpCi0gICAgICAgIHUgPSAyNTU7Ci0gICAgICBpZiAodiA8IDApCi0gICAgICAgIHYgPSAwOwotICAgICAgZWxzZSBpZiAodiA+IDI1NSkKLSAgICAgICAgdiA9IDI1NTsKLSAgICAgIHZiLT50YWJsZXVbaSArIDEyOF1baiArIDEyOF0gPSByaW50ICh1KTsKLSAgICAgIHZiLT50YWJsZXZbaSArIDEyOF1baiArIDEyOF0gPSByaW50ICh2KTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9fYmFsYW5jZV9pc19wYXNzdGhyb3VnaCAoR3N0VmlkZW9CYWxhbmNlICogdmlkZW9iYWxhbmNlKQotewotICByZXR1cm4gdmlkZW9iYWxhbmNlLT5jb250cmFzdCA9PSAxLjAgJiYKLSAgICAgIHZpZGVvYmFsYW5jZS0+YnJpZ2h0bmVzcyA9PSAwLjAgJiYKLSAgICAgIHZpZGVvYmFsYW5jZS0+aHVlID09IDAuMCAmJiB2aWRlb2JhbGFuY2UtPnNhdHVyYXRpb24gPT0gMS4wOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2JhbGFuY2VfdXBkYXRlX3Byb3BlcnRpZXMgKEdzdFZpZGVvQmFsYW5jZSAqIHZpZGVvYmFsYW5jZSkKLXsKLSAgZ2Jvb2xlYW4gcGFzc3Rocm91Z2g7Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gKmJhc2UgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKHZpZGVvYmFsYW5jZSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh2aWRlb2JhbGFuY2UpOwotICBwYXNzdGhyb3VnaCA9IGdzdF92aWRlb19iYWxhbmNlX2lzX3Bhc3N0aHJvdWdoICh2aWRlb2JhbGFuY2UpOwotICBpZiAoIXBhc3N0aHJvdWdoKQotICAgIGdzdF92aWRlb19iYWxhbmNlX3VwZGF0ZV90YWJsZXMgKHZpZGVvYmFsYW5jZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh2aWRlb2JhbGFuY2UpOwotCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcGFzc3Rocm91Z2ggKGJhc2UsIHBhc3N0aHJvdWdoKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX3BsYW5hcl95dXYgKEdzdFZpZGVvQmFsYW5jZSAqIHZpZGVvYmFsYW5jZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUpCi17Ci0gIGdpbnQgeCwgeTsKLSAgZ3VpbnQ4ICp5ZGF0YTsKLSAgZ3VpbnQ4ICp1ZGF0YSwgKnZkYXRhOwotICBnaW50IHlzdHJpZGUsIHVzdHJpZGUsIHZzdHJpZGU7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCB3aWR0aDIsIGhlaWdodDI7Ci0gIGd1aW50OCAqdGFibGV5ID0gdmlkZW9iYWxhbmNlLT50YWJsZXk7Ci0gIGd1aW50OCAqKnRhYmxldSA9IHZpZGVvYmFsYW5jZS0+dGFibGV1OwotICBndWludDggKip0YWJsZXYgPSB2aWRlb2JhbGFuY2UtPnRhYmxldjsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChmcmFtZSk7Ci0KLSAgeWRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICB5c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotCi0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgIGd1aW50OCAqeXB0cjsKLQotICAgIHlwdHIgPSB5ZGF0YSArIHkgKiB5c3RyaWRlOwotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAqeXB0ciA9IHRhYmxleVsqeXB0cl07Ci0gICAgICB5cHRyKys7Ci0gICAgfQotICB9Ci0KLSAgd2lkdGgyID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGZyYW1lLCAxKTsKLSAgaGVpZ2h0MiA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDEpOwotCi0gIHVkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAxKTsKLSAgdmRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDIpOwotICB1c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDEpOwotICB2c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDIpOwotCi0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQyOyB5KyspIHsKLSAgICBndWludDggKnVwdHIsICp2cHRyOwotICAgIGd1aW50OCB1MSwgdjE7Ci0KLSAgICB1cHRyID0gdWRhdGEgKyB5ICogdXN0cmlkZTsKLSAgICB2cHRyID0gdmRhdGEgKyB5ICogdnN0cmlkZTsKLQotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDI7IHgrKykgewotICAgICAgdTEgPSAqdXB0cjsKLSAgICAgIHYxID0gKnZwdHI7Ci0KLSAgICAgICp1cHRyKysgPSB0YWJsZXVbdTFdW3YxXTsKLSAgICAgICp2cHRyKysgPSB0YWJsZXZbdTFdW3YxXTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX3NlbWlwbGFuYXJfeXV2IChHc3RWaWRlb0JhbGFuY2UgKiB2aWRlb2JhbGFuY2UsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQotewotICBnaW50IHgsIHk7Ci0gIGd1aW50OCAqeWRhdGE7Ci0gIGd1aW50OCAqdXZkYXRhOwotICBnaW50IHlzdHJpZGUsIHV2c3RyaWRlOwotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdpbnQgd2lkdGgyLCBoZWlnaHQyOwotICBndWludDggKnRhYmxleSA9IHZpZGVvYmFsYW5jZS0+dGFibGV5OwotICBndWludDggKip0YWJsZXUgPSB2aWRlb2JhbGFuY2UtPnRhYmxldTsKLSAgZ3VpbnQ4ICoqdGFibGV2ID0gdmlkZW9iYWxhbmNlLT50YWJsZXY7Ci0gIGdpbnQgdXBvcywgdnBvczsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChmcmFtZSk7Ci0KLSAgeWRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICB5c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotCi0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgIGd1aW50OCAqeXB0cjsKLQotICAgIHlwdHIgPSB5ZGF0YSArIHkgKiB5c3RyaWRlOwotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAqeXB0ciA9IHRhYmxleVsqeXB0cl07Ci0gICAgICB5cHRyKys7Ci0gICAgfQotICB9Ci0KLSAgd2lkdGgyID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGZyYW1lLCAxKTsKLSAgaGVpZ2h0MiA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDEpOwotCi0gIHV2ZGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChmcmFtZSwgMSk7Ci0gIHV2c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDEpOwotCi0gIHVwb3MgPSBHU1RfVklERU9fSU5GT19GT1JNQVQgKCZmcmFtZS0+aW5mbykgPT0gR1NUX1ZJREVPX0ZPUk1BVF9OVjEyID8gMCA6IDE7Ci0gIHZwb3MgPSBHU1RfVklERU9fSU5GT19GT1JNQVQgKCZmcmFtZS0+aW5mbykgPT0gR1NUX1ZJREVPX0ZPUk1BVF9OVjEyID8gMSA6IDA7Ci0KLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDI7IHkrKykgewotICAgIGd1aW50OCAqdXZwdHI7Ci0gICAgZ3VpbnQ4IHUxLCB2MTsKLQotICAgIHV2cHRyID0gdXZkYXRhICsgeSAqIHV2c3RyaWRlOwotCi0gICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoMjsgeCsrKSB7Ci0gICAgICB1MSA9IHV2cHRyW3Vwb3NdOwotICAgICAgdjEgPSB1dnB0clt2cG9zXTsKLQotICAgICAgdXZwdHJbdXBvc10gPSB0YWJsZXVbdTFdW3YxXTsKLSAgICAgIHV2cHRyW3Zwb3NdID0gdGFibGV2W3UxXVt2MV07Ci0gICAgICB1dnB0ciArPSAyOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2JhbGFuY2VfcGFja2VkX3l1diAoR3N0VmlkZW9CYWxhbmNlICogdmlkZW9iYWxhbmNlLAotICAgIEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKLXsKLSAgZ2ludCB4LCB5LCBzdHJpZGU7Ci0gIGd1aW50OCAqeWRhdGEsICp1ZGF0YSwgKnZkYXRhOwotICBnaW50IHlvZmYsIHVvZmYsIHZvZmY7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCB3aWR0aDIsIGhlaWdodDI7Ci0gIGd1aW50OCAqdGFibGV5ID0gdmlkZW9iYWxhbmNlLT50YWJsZXk7Ci0gIGd1aW50OCAqKnRhYmxldSA9IHZpZGVvYmFsYW5jZS0+dGFibGV1OwotICBndWludDggKip0YWJsZXYgPSB2aWRlb2JhbGFuY2UtPnRhYmxldjsKLQotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOwotICBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChmcmFtZSk7Ci0KLSAgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZnJhbWUsIDApOwotICB5ZGF0YSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAwKTsKLSAgeW9mZiA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGZyYW1lLCAwKTsKLQotICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICBndWludDggKnlwdHI7Ci0KLSAgICB5cHRyID0geWRhdGEgKyB5ICogc3RyaWRlOwotICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAqeXB0ciA9IHRhYmxleVsqeXB0cl07Ci0gICAgICB5cHRyICs9IHlvZmY7Ci0gICAgfQotICB9Ci0KLSAgd2lkdGgyID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGZyYW1lLCAxKTsKLSAgaGVpZ2h0MiA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDEpOwotCi0gIHVkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDEpOwotICB2ZGF0YSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAyKTsKLSAgdW9mZiA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGZyYW1lLCAxKTsKLSAgdm9mZiA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKGZyYW1lLCAyKTsKLQotICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0MjsgeSsrKSB7Ci0gICAgZ3VpbnQ4ICp1cHRyLCAqdnB0cjsKLSAgICBndWludDggdTEsIHYxOwotCi0gICAgdXB0ciA9IHVkYXRhICsgeSAqIHN0cmlkZTsKLSAgICB2cHRyID0gdmRhdGEgKyB5ICogc3RyaWRlOwotCi0gICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoMjsgeCsrKSB7Ci0gICAgICB1MSA9ICp1cHRyOwotICAgICAgdjEgPSAqdnB0cjsKLQotICAgICAgKnVwdHIgPSB0YWJsZXVbdTFdW3YxXTsKLSAgICAgICp2cHRyID0gdGFibGV2W3UxXVt2MV07Ci0KLSAgICAgIHVwdHIgKz0gdW9mZjsKLSAgICAgIHZwdHIgKz0gdm9mZjsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIGNvbnN0IGludCBjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHZbXSA9IHsKLSAgMjk4LCAwLCA0MDksIC01NzA2OCwKLSAgMjk4LCAtMTAwLCAtMjA4LCAzNDcwNywKLSAgMjk4LCA1MTYsIDAsIC03MDg3MCwKLX07Ci0KLXN0YXRpYyBjb25zdCBnaW50IGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0dltdID0gewotICA2NiwgMTI5LCAyNSwgNDA5NiwKLSAgLTM4LCAtNzQsIDExMiwgMzI3NjgsCi0gIDExMiwgLTk0LCAtMTgsIDMyNzY4LAotfTsKLQotI2RlZmluZSBBUFBMWV9NQVRSSVgobSxvLHYxLHYyLHYzKSAoKG1bbyo0XSAqIHYxICsgbVtvKjQrMV0gKiB2MiArIG1bbyo0KzJdICogdjMgKyBtW28qNCszXSkgPj4gOCkKLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX3BhY2tlZF9yZ2IgKEdzdFZpZGVvQmFsYW5jZSAqIHZpZGVvYmFsYW5jZSwKLSAgICBHc3RWaWRlb0ZyYW1lICogZnJhbWUpCi17Ci0gIGdpbnQgaSwgaiwgaGVpZ2h0OwotICBnaW50IHdpZHRoLCBzdHJpZGUsIHJvd193cmFwOwotICBnaW50IHBpeGVsX3N0cmlkZTsKLSAgZ3VpbnQ4ICpkYXRhOwotICBnaW50IG9mZnNldHNbM107Ci0gIGdpbnQgciwgZywgYjsKLSAgZ2ludCB5LCB1LCB2OwotICBnaW50IHVfdG1wLCB2X3RtcDsKLSAgZ3VpbnQ4ICp0YWJsZXkgPSB2aWRlb2JhbGFuY2UtPnRhYmxleTsKLSAgZ3VpbnQ4ICoqdGFibGV1ID0gdmlkZW9iYWxhbmNlLT50YWJsZXU7Ci0gIGd1aW50OCAqKnRhYmxldiA9IHZpZGVvYmFsYW5jZS0+dGFibGV2OwotCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsKLQotICBvZmZzZXRzWzBdID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChmcmFtZSwgMCk7Ci0gIG9mZnNldHNbMV0gPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKGZyYW1lLCAxKTsKLSAgb2Zmc2V0c1syXSA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoZnJhbWUsIDIpOwotCi0gIGRhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOwotICBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChmcmFtZSwgMCk7Ci0KLSAgcGl4ZWxfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfUFNUUklERSAoZnJhbWUsIDApOwotICByb3dfd3JhcCA9IHN0cmlkZSAtIHBpeGVsX3N0cmlkZSAqIHdpZHRoOwotCi0gIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7Ci0gICAgICByID0gZGF0YVtvZmZzZXRzWzBdXTsKLSAgICAgIGcgPSBkYXRhW29mZnNldHNbMV1dOwotICAgICAgYiA9IGRhdGFbb2Zmc2V0c1syXV07Ci0KLSAgICAgIHkgPSBBUFBMWV9NQVRSSVggKGNvZ19yZ2JfdG9feWNiY3JfbWF0cml4XzhiaXRfc2R0diwgMCwgciwgZywgYik7Ci0gICAgICB1X3RtcCA9IEFQUExZX01BVFJJWCAoY29nX3JnYl90b195Y2Jjcl9tYXRyaXhfOGJpdF9zZHR2LCAxLCByLCBnLCBiKTsKLSAgICAgIHZfdG1wID0gQVBQTFlfTUFUUklYIChjb2dfcmdiX3RvX3ljYmNyX21hdHJpeF84Yml0X3NkdHYsIDIsIHIsIGcsIGIpOwotCi0gICAgICB5ID0gQ0xBTVAgKHksIDAsIDI1NSk7Ci0gICAgICB1X3RtcCA9IENMQU1QICh1X3RtcCwgMCwgMjU1KTsKLSAgICAgIHZfdG1wID0gQ0xBTVAgKHZfdG1wLCAwLCAyNTUpOwotCi0gICAgICB5ID0gdGFibGV5W3ldOwotICAgICAgdSA9IHRhYmxldVt1X3RtcF1bdl90bXBdOwotICAgICAgdiA9IHRhYmxldlt1X3RtcF1bdl90bXBdOwotCi0gICAgICByID0gQVBQTFlfTUFUUklYIChjb2dfeWNiY3JfdG9fcmdiX21hdHJpeF84Yml0X3NkdHYsIDAsIHksIHUsIHYpOwotICAgICAgZyA9IEFQUExZX01BVFJJWCAoY29nX3ljYmNyX3RvX3JnYl9tYXRyaXhfOGJpdF9zZHR2LCAxLCB5LCB1LCB2KTsKLSAgICAgIGIgPSBBUFBMWV9NQVRSSVggKGNvZ195Y2Jjcl90b19yZ2JfbWF0cml4XzhiaXRfc2R0diwgMiwgeSwgdSwgdik7Ci0KLSAgICAgIGRhdGFbb2Zmc2V0c1swXV0gPSBDTEFNUCAociwgMCwgMjU1KTsKLSAgICAgIGRhdGFbb2Zmc2V0c1sxXV0gPSBDTEFNUCAoZywgMCwgMjU1KTsKLSAgICAgIGRhdGFbb2Zmc2V0c1syXV0gPSBDTEFNUCAoYiwgMCwgMjU1KTsKLSAgICAgIGRhdGEgKz0gcGl4ZWxfc3RyaWRlOwotICAgIH0KLSAgICBkYXRhICs9IHJvd193cmFwOwotICB9Ci19Ci0KLS8qIGdldCBub3RpZmllZCBvZiBjYXBzIGFuZCBwbHVnIGluIHRoZSBjb3JyZWN0IHByb2Nlc3MgZnVuY3Rpb24gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZpZGVvX2JhbGFuY2Vfc2V0X2luZm8gKEdzdFZpZGVvRmlsdGVyICogdmZpbHRlciwgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RWaWRlb0luZm8gKiBpbl9pbmZvLCBHc3RDYXBzICogb3V0Y2FwcywgR3N0VmlkZW9JbmZvICogb3V0X2luZm8pCi17Ci0gIEdzdFZpZGVvQmFsYW5jZSAqdmlkZW9iYWxhbmNlID0gR1NUX1ZJREVPX0JBTEFOQ0UgKHZmaWx0ZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvYmFsYW5jZSwKLSAgICAgICJpbiAlIiBHU1RfUFRSX0ZPUk1BVCAiIG91dCAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzLCBvdXRjYXBzKTsKLQotICB2aWRlb2JhbGFuY2UtPnByb2Nlc3MgPSBOVUxMOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbl9pbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgdmlkZW9iYWxhbmNlLT5wcm9jZXNzID0gZ3N0X3ZpZGVvX2JhbGFuY2VfcGxhbmFyX3l1djsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgdmlkZW9iYWxhbmNlLT5wcm9jZXNzID0gZ3N0X3ZpZGVvX2JhbGFuY2VfcGFja2VkX3l1djsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjEyOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjIxOgotICAgICAgdmlkZW9iYWxhbmNlLT5wcm9jZXNzID0gZ3N0X3ZpZGVvX2JhbGFuY2Vfc2VtaXBsYW5hcl95dXY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQUJHUjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCeDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSeDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1I6Ci0gICAgICB2aWRlb2JhbGFuY2UtPnByb2Nlc3MgPSBnc3RfdmlkZW9fYmFsYW5jZV9wYWNrZWRfcmdiOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmICghZ3N0X3ZpZGVvX2JhbGFuY2VfaXNfcGFzc3Rocm91Z2ggKHZpZGVvYmFsYW5jZSkpCi0gICAgICAgIGdvdG8gdW5rbm93bl9mb3JtYXQ7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdW5rbm93bl9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUICh2aWRlb2JhbGFuY2UsICJ1bmtub3duIGZvcm1hdCAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5jYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX2JlZm9yZV90cmFuc2Zvcm0gKEdzdEJhc2VUcmFuc2Zvcm0gKiBiYXNlLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFZpZGVvQmFsYW5jZSAqYmFsYW5jZSA9IEdTVF9WSURFT19CQUxBTkNFIChiYXNlKTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgc3RyZWFtX3RpbWU7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmYmFzZS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCB0aW1lc3RhbXApOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhbGFuY2UsICJzeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtX3RpbWUpKQotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKGJhbGFuY2UpLCBzdHJlYW1fdGltZSk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92aWRlb19iYWxhbmNlX3RyYW5zZm9ybV9jYXBzIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdFZpZGVvQmFsYW5jZSAqYmFsYW5jZSA9IEdTVF9WSURFT19CQUxBTkNFICh0cmFucyk7Ci0gIEdzdENhcHMgKnJldDsKLQotICBpZiAoIWdzdF92aWRlb19iYWxhbmNlX2lzX3Bhc3N0aHJvdWdoIChiYWxhbmNlKSkgewotICAgIHN0YXRpYyBHc3RTdGF0aWNDYXBzIHJhd19jYXBzID0KLSAgICAgICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFIChQUk9DRVNTSU5HX0NBUFMpKTsKLQotICAgIGNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3QgKGNhcHMsIGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZyYXdfY2FwcykpOwotCi0gICAgaWYgKGZpbHRlcikgewotICAgICAgcmV0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0ID0gY2FwczsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGZpbHRlcikgewotICAgICAgcmV0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgY2FwcywgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0ID0gZ3N0X2NhcHNfcmVmIChjYXBzKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZpZGVvX2JhbGFuY2VfdHJhbnNmb3JtX2ZyYW1lX2lwIChHc3RWaWRlb0ZpbHRlciAqIHZmaWx0ZXIsCi0gICAgR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQotewotICBHc3RWaWRlb0JhbGFuY2UgKnZpZGVvYmFsYW5jZSA9IEdTVF9WSURFT19CQUxBTkNFICh2ZmlsdGVyKTsKLQotICBpZiAoIXZpZGVvYmFsYW5jZS0+cHJvY2VzcykKLSAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAodmlkZW9iYWxhbmNlKTsKLSAgdmlkZW9iYWxhbmNlLT5wcm9jZXNzICh2aWRlb2JhbGFuY2UsIGZyYW1lKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHZpZGVvYmFsYW5jZSk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotbm90X25lZ290aWF0ZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUICh2aWRlb2JhbGFuY2UsICJOb3QgbmVnb3RpYXRlZCB5ZXQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHTGlzdCAqY2hhbm5lbHMgPSBOVUxMOwotICBHc3RWaWRlb0JhbGFuY2UgKmJhbGFuY2UgPSBHU1RfVklERU9fQkFMQU5DRSAob2JqZWN0KTsKLQotICBnX2ZyZWUgKGJhbGFuY2UtPnRhYmxldVswXSk7Ci0KLSAgY2hhbm5lbHMgPSBiYWxhbmNlLT5jaGFubmVsczsKLSAgd2hpbGUgKGNoYW5uZWxzKSB7Ci0gICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqY2hhbm5lbCA9IGNoYW5uZWxzLT5kYXRhOwotCi0gICAgZ19vYmplY3RfdW5yZWYgKGNoYW5uZWwpOwotICAgIGNoYW5uZWxzLT5kYXRhID0gTlVMTDsKLSAgICBjaGFubmVscyA9IGdfbGlzdF9uZXh0IChjaGFubmVscyk7Ci0gIH0KLQotICBpZiAoYmFsYW5jZS0+Y2hhbm5lbHMpCi0gICAgZ19saXN0X2ZyZWUgKGJhbGFuY2UtPmNoYW5uZWxzKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fYmFsYW5jZV9jbGFzc19pbml0IChHc3RWaWRlb0JhbGFuY2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKnRyYW5zX2NsYXNzID0gKEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqKSBrbGFzczsKLSAgR3N0VmlkZW9GaWx0ZXJDbGFzcyAqdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2aWRlb2JhbGFuY2VfZGVidWcsICJ2aWRlb2JhbGFuY2UiLCAwLAotICAgICAgInZpZGVvYmFsYW5jZSIpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3ZpZGVvX2JhbGFuY2VfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF92aWRlb19iYWxhbmNlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3ZpZGVvX2JhbGFuY2VfZ2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ09OVFJBU1QsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiY29udHJhc3QiLCAiQ29udHJhc3QiLCAiY29udHJhc3QiLAotICAgICAgICAgIDAuMCwgMi4wLCBERUZBVUxUX1BST1BfQ09OVFJBU1QsCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0JSSUdIVE5FU1MsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYnJpZ2h0bmVzcyIsICJCcmlnaHRuZXNzIiwgImJyaWdodG5lc3MiLCAtMS4wLCAxLjAsCi0gICAgICAgICAgREVGQVVMVF9QUk9QX0JSSUdIVE5FU1MsCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0hVRSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJodWUiLCAiSHVlIiwgImh1ZSIsIC0xLjAsIDEuMCwgREVGQVVMVF9QUk9QX0hVRSwKLSAgICAgICAgICBHU1RfUEFSQU1fQ09OVFJPTExBQkxFIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfU0FUVVJBVElPTiwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJzYXR1cmF0aW9uIiwgIlNhdHVyYXRpb24iLCAic2F0dXJhdGlvbiIsIDAuMCwgMi4wLAotICAgICAgICAgIERFRkFVTFRfUFJPUF9TQVRVUkFUSU9OLAotICAgICAgICAgIEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiVmlkZW8gYmFsYW5jZSIsCi0gICAgICAiRmlsdGVyL0VmZmVjdC9WaWRlbyIsCi0gICAgICAiQWRqdXN0cyBicmlnaHRuZXNzLCBjb250cmFzdCwgaHVlLCBzYXR1cmF0aW9uIG9uIGEgdmlkZW8gc3RyZWFtIiwKLSAgICAgICJEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfdmlkZW9fYmFsYW5jZV9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZpZGVvX2JhbGFuY2Vfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+YmVmb3JlX3RyYW5zZm9ybSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvX2JhbGFuY2VfYmVmb3JlX3RyYW5zZm9ybSk7Ci0gIHRyYW5zX2NsYXNzLT50cmFuc2Zvcm1faXBfb25fcGFzc3Rocm91Z2ggPSBGQUxTRTsKLSAgdHJhbnNfY2xhc3MtPnRyYW5zZm9ybV9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9fYmFsYW5jZV90cmFuc2Zvcm1fY2Fwcyk7Ci0KLSAgdmZpbHRlcl9jbGFzcy0+c2V0X2luZm8gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvX2JhbGFuY2Vfc2V0X2luZm8pOwotICB2ZmlsdGVyX2NsYXNzLT50cmFuc2Zvcm1fZnJhbWVfaXAgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19iYWxhbmNlX3RyYW5zZm9ybV9mcmFtZV9pcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fYmFsYW5jZV9pbml0IChHc3RWaWRlb0JhbGFuY2UgKiB2aWRlb2JhbGFuY2UpCi17Ci0gIGNvbnN0IGdjaGFyICpjaGFubmVsc1s0XSA9IHsgIkhVRSIsICJTQVRVUkFUSU9OIiwKLSAgICAiQlJJR0hUTkVTUyIsICJDT05UUkFTVCIKLSAgfTsKLSAgZ2ludCBpOwotCi0gIC8qIEluaXRpYWxpemUgcHJvcGVydGlld3MgKi8KLSAgdmlkZW9iYWxhbmNlLT5jb250cmFzdCA9IERFRkFVTFRfUFJPUF9DT05UUkFTVDsKLSAgdmlkZW9iYWxhbmNlLT5icmlnaHRuZXNzID0gREVGQVVMVF9QUk9QX0JSSUdIVE5FU1M7Ci0gIHZpZGVvYmFsYW5jZS0+aHVlID0gREVGQVVMVF9QUk9QX0hVRTsKLSAgdmlkZW9iYWxhbmNlLT5zYXR1cmF0aW9uID0gREVGQVVMVF9QUk9QX1NBVFVSQVRJT047Ci0KLSAgdmlkZW9iYWxhbmNlLT50YWJsZXVbMF0gPSBnX25ldyAoZ3VpbnQ4LCAyNTYgKiAyNTYgKiAyKTsKLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgdmlkZW9iYWxhbmNlLT50YWJsZXVbaV0gPQotICAgICAgICB2aWRlb2JhbGFuY2UtPnRhYmxldVswXSArIGkgKiAyNTYgKiBzaXplb2YgKGd1aW50OCk7Ci0gICAgdmlkZW9iYWxhbmNlLT50YWJsZXZbaV0gPQotICAgICAgICB2aWRlb2JhbGFuY2UtPnRhYmxldVswXSArIDI1NiAqIDI1NiAqIHNpemVvZiAoZ3VpbnQ4KSArCi0gICAgICAgIGkgKiAyNTYgKiBzaXplb2YgKGd1aW50OCk7Ci0gIH0KLQotICBnc3RfdmlkZW9fYmFsYW5jZV91cGRhdGVfcHJvcGVydGllcyAodmlkZW9iYWxhbmNlKTsKLQotICAvKiBHZW5lcmF0ZSB0aGUgY2hhbm5lbHMgbGlzdCAqLwotICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTIChjaGFubmVscyk7IGkrKykgewotICAgIEdzdENvbG9yQmFsYW5jZUNoYW5uZWwgKmNoYW5uZWw7Ci0KLSAgICBjaGFubmVsID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9DT0xPUl9CQUxBTkNFX0NIQU5ORUwsIE5VTEwpOwotICAgIGNoYW5uZWwtPmxhYmVsID0gZ19zdHJkdXAgKGNoYW5uZWxzW2ldKTsKLSAgICBjaGFubmVsLT5taW5fdmFsdWUgPSAtMTAwMDsKLSAgICBjaGFubmVsLT5tYXhfdmFsdWUgPSAxMDAwOwotCi0gICAgdmlkZW9iYWxhbmNlLT5jaGFubmVscyA9IGdfbGlzdF9hcHBlbmQgKHZpZGVvYmFsYW5jZS0+Y2hhbm5lbHMsIGNoYW5uZWwpOwotICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBHTGlzdCAqCi1nc3RfdmlkZW9fYmFsYW5jZV9jb2xvcmJhbGFuY2VfbGlzdF9jaGFubmVscyAoR3N0Q29sb3JCYWxhbmNlICogYmFsYW5jZSkKLXsKLSAgR3N0VmlkZW9CYWxhbmNlICp2aWRlb2JhbGFuY2UgPSBHU1RfVklERU9fQkFMQU5DRSAoYmFsYW5jZSk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZpZGVvYmFsYW5jZSAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19WSURFT19CQUxBTkNFICh2aWRlb2JhbGFuY2UpLCBOVUxMKTsKLQotICByZXR1cm4gdmlkZW9iYWxhbmNlLT5jaGFubmVsczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWUgKEdzdENvbG9yQmFsYW5jZSAqIGJhbGFuY2UsCi0gICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqIGNoYW5uZWwsIGdpbnQgdmFsdWUpCi17Ci0gIEdzdFZpZGVvQmFsYW5jZSAqdmIgPSBHU1RfVklERU9fQkFMQU5DRSAoYmFsYW5jZSk7Ci0gIGdkb3VibGUgbmV3X3ZhbDsKLSAgZ2Jvb2xlYW4gY2hhbmdlZCA9IEZBTFNFOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHZiICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVklERU9fQkFMQU5DRSAodmIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1ZJREVPX0ZJTFRFUiAodmIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoY2hhbm5lbC0+bGFiZWwgIT0gTlVMTCk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh2Yik7Ci0gIGlmICghZ19hc2NpaV9zdHJjYXNlY21wIChjaGFubmVsLT5sYWJlbCwgIkhVRSIpKSB7Ci0gICAgbmV3X3ZhbCA9ICh2YWx1ZSArIDEwMDAuMCkgKiAyLjAgLyAyMDAwLjAgLSAxLjA7Ci0gICAgY2hhbmdlZCA9IG5ld192YWwgIT0gdmItPmh1ZTsKLSAgICB2Yi0+aHVlID0gbmV3X3ZhbDsKLSAgfSBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wIChjaGFubmVsLT5sYWJlbCwgIlNBVFVSQVRJT04iKSkgewotICAgIG5ld192YWwgPSAodmFsdWUgKyAxMDAwLjApICogMi4wIC8gMjAwMC4wOwotICAgIGNoYW5nZWQgPSBuZXdfdmFsICE9IHZiLT5zYXR1cmF0aW9uOwotICAgIHZiLT5zYXR1cmF0aW9uID0gbmV3X3ZhbDsKLSAgfSBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wIChjaGFubmVsLT5sYWJlbCwgIkJSSUdIVE5FU1MiKSkgewotICAgIG5ld192YWwgPSAodmFsdWUgKyAxMDAwLjApICogMi4wIC8gMjAwMC4wIC0gMS4wOwotICAgIGNoYW5nZWQgPSBuZXdfdmFsICE9IHZiLT5icmlnaHRuZXNzOwotICAgIHZiLT5icmlnaHRuZXNzID0gbmV3X3ZhbDsKLSAgfSBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wIChjaGFubmVsLT5sYWJlbCwgIkNPTlRSQVNUIikpIHsKLSAgICBuZXdfdmFsID0gKHZhbHVlICsgMTAwMC4wKSAqIDIuMCAvIDIwMDAuMDsKLSAgICBjaGFuZ2VkID0gbmV3X3ZhbCAhPSB2Yi0+Y29udHJhc3Q7Ci0gICAgdmItPmNvbnRyYXN0ID0gbmV3X3ZhbDsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAodmIpOwotCi0gIGlmIChjaGFuZ2VkKQotICAgIGdzdF92aWRlb19iYWxhbmNlX3VwZGF0ZV9wcm9wZXJ0aWVzICh2Yik7Ci0KLSAgaWYgKGNoYW5nZWQpIHsKLSAgICBnc3RfY29sb3JfYmFsYW5jZV92YWx1ZV9jaGFuZ2VkIChiYWxhbmNlLCBjaGFubmVsLAotICAgICAgICBnc3RfY29sb3JfYmFsYW5jZV9nZXRfdmFsdWUgKGJhbGFuY2UsIGNoYW5uZWwpKTsKLSAgfQotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3ZpZGVvX2JhbGFuY2VfY29sb3JiYWxhbmNlX2dldF92YWx1ZSAoR3N0Q29sb3JCYWxhbmNlICogYmFsYW5jZSwKLSAgICBHc3RDb2xvckJhbGFuY2VDaGFubmVsICogY2hhbm5lbCkKLXsKLSAgR3N0VmlkZW9CYWxhbmNlICp2YiA9IEdTVF9WSURFT19CQUxBTkNFIChiYWxhbmNlKTsKLSAgZ2ludCB2YWx1ZSA9IDA7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZiICE9IE5VTEwsIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1ZJREVPX0JBTEFOQ0UgKHZiKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjaGFubmVsLT5sYWJlbCAhPSBOVUxMLCAwKTsKLQotICBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcCAoY2hhbm5lbC0+bGFiZWwsICJIVUUiKSkgewotICAgIHZhbHVlID0gKHZiLT5odWUgKyAxKSAqIDIwMDAuMCAvIDIuMCAtIDEwMDAuMDsKLSAgfSBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wIChjaGFubmVsLT5sYWJlbCwgIlNBVFVSQVRJT04iKSkgewotICAgIHZhbHVlID0gdmItPnNhdHVyYXRpb24gKiAyMDAwLjAgLyAyLjAgLSAxMDAwLjA7Ci0gIH0gZWxzZSBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcCAoY2hhbm5lbC0+bGFiZWwsICJCUklHSFRORVNTIikpIHsKLSAgICB2YWx1ZSA9ICh2Yi0+YnJpZ2h0bmVzcyArIDEpICogMjAwMC4wIC8gMi4wIC0gMTAwMC4wOwotICB9IGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGNoYW5uZWwtPmxhYmVsLCAiQ09OVFJBU1QiKSkgewotICAgIHZhbHVlID0gdmItPmNvbnRyYXN0ICogMjAwMC4wIC8gMi4wIC0gMTAwMC4wOwotICB9Ci0KLSAgcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgR3N0Q29sb3JCYWxhbmNlVHlwZQotZ3N0X3ZpZGVvX2JhbGFuY2VfY29sb3JiYWxhbmNlX2dldF9iYWxhbmNlX3R5cGUgKEdzdENvbG9yQmFsYW5jZSAqIGJhbGFuY2UpCi17Ci0gIHJldHVybiBHU1RfQ09MT1JfQkFMQU5DRV9TT0ZUV0FSRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9pbml0IChHc3RDb2xvckJhbGFuY2VJbnRlcmZhY2UgKiBpZmFjZSkKLXsKLSAgaWZhY2UtPmxpc3RfY2hhbm5lbHMgPSBnc3RfdmlkZW9fYmFsYW5jZV9jb2xvcmJhbGFuY2VfbGlzdF9jaGFubmVsczsKLSAgaWZhY2UtPnNldF92YWx1ZSA9IGdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9zZXRfdmFsdWU7Ci0gIGlmYWNlLT5nZXRfdmFsdWUgPSBnc3RfdmlkZW9fYmFsYW5jZV9jb2xvcmJhbGFuY2VfZ2V0X3ZhbHVlOwotICBpZmFjZS0+Z2V0X2JhbGFuY2VfdHlwZSA9IGdzdF92aWRlb19iYWxhbmNlX2NvbG9yYmFsYW5jZV9nZXRfYmFsYW5jZV90eXBlOwotfQotCi1zdGF0aWMgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqCi1nc3RfdmlkZW9fYmFsYW5jZV9maW5kX2NoYW5uZWwgKEdzdFZpZGVvQmFsYW5jZSAqIGJhbGFuY2UsIGNvbnN0IGdjaGFyICogbGFiZWwpCi17Ci0gIEdMaXN0ICpsOwotCi0gIGZvciAobCA9IGJhbGFuY2UtPmNoYW5uZWxzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIEdzdENvbG9yQmFsYW5jZUNoYW5uZWwgKmNoYW5uZWwgPSBsLT5kYXRhOwotCi0gICAgaWYgKGdfYXNjaWlfc3RyY2FzZWNtcCAoY2hhbm5lbC0+bGFiZWwsIGxhYmVsKSA9PSAwKQotICAgICAgcmV0dXJuIGNoYW5uZWw7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fYmFsYW5jZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9CYWxhbmNlICpiYWxhbmNlID0gR1NUX1ZJREVPX0JBTEFOQ0UgKG9iamVjdCk7Ci0gIGdkb3VibGUgZDsKLSAgY29uc3QgZ2NoYXIgKmxhYmVsID0gTlVMTDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGJhbGFuY2UpOwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ09OVFJBU1Q6Ci0gICAgICBkID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYWxhbmNlLCAiQ2hhbmdpbmcgY29udHJhc3QgZnJvbSAlbGYgdG8gJWxmIiwKLSAgICAgICAgICBiYWxhbmNlLT5jb250cmFzdCwgZCk7Ci0gICAgICBpZiAoZCAhPSBiYWxhbmNlLT5jb250cmFzdCkKLSAgICAgICAgbGFiZWwgPSAiQ09OVFJBU1QiOwotICAgICAgYmFsYW5jZS0+Y29udHJhc3QgPSBkOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0JSSUdIVE5FU1M6Ci0gICAgICBkID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYWxhbmNlLCAiQ2hhbmdpbmcgYnJpZ2h0bmVzcyBmcm9tICVsZiB0byAlbGYiLAotICAgICAgICAgIGJhbGFuY2UtPmJyaWdodG5lc3MsIGQpOwotICAgICAgaWYgKGQgIT0gYmFsYW5jZS0+YnJpZ2h0bmVzcykKLSAgICAgICAgbGFiZWwgPSAiQlJJR0hUTkVTUyI7Ci0gICAgICBiYWxhbmNlLT5icmlnaHRuZXNzID0gZDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9IVUU6Ci0gICAgICBkID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChiYWxhbmNlLCAiQ2hhbmdpbmcgaHVlIGZyb20gJWxmIHRvICVsZiIsIGJhbGFuY2UtPmh1ZSwKLSAgICAgICAgICBkKTsKLSAgICAgIGlmIChkICE9IGJhbGFuY2UtPmh1ZSkKLSAgICAgICAgbGFiZWwgPSAiSFVFIjsKLSAgICAgIGJhbGFuY2UtPmh1ZSA9IGQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0FUVVJBVElPTjoKLSAgICAgIGQgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGJhbGFuY2UsICJDaGFuZ2luZyBzYXR1cmF0aW9uIGZyb20gJWxmIHRvICVsZiIsCi0gICAgICAgICAgYmFsYW5jZS0+c2F0dXJhdGlvbiwgZCk7Ci0gICAgICBpZiAoZCAhPSBiYWxhbmNlLT5zYXR1cmF0aW9uKQotICAgICAgICBsYWJlbCA9ICJTQVRVUkFUSU9OIjsKLSAgICAgIGJhbGFuY2UtPnNhdHVyYXRpb24gPSBkOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIEdTVF9PQkpFQ1RfVU5MT0NLIChiYWxhbmNlKTsKLSAgZ3N0X3ZpZGVvX2JhbGFuY2VfdXBkYXRlX3Byb3BlcnRpZXMgKGJhbGFuY2UpOwotCi0gIGlmIChsYWJlbCkgewotICAgIEdzdENvbG9yQmFsYW5jZUNoYW5uZWwgKmNoYW5uZWwgPQotICAgICAgICBnc3RfdmlkZW9fYmFsYW5jZV9maW5kX2NoYW5uZWwgKGJhbGFuY2UsIGxhYmVsKTsKLSAgICBnc3RfY29sb3JfYmFsYW5jZV92YWx1ZV9jaGFuZ2VkIChHU1RfQ09MT1JfQkFMQU5DRSAoYmFsYW5jZSksIGNoYW5uZWwsCi0gICAgICAgIGdzdF9jb2xvcl9iYWxhbmNlX2dldF92YWx1ZSAoR1NUX0NPTE9SX0JBTEFOQ0UgKGJhbGFuY2UpLCBjaGFubmVsKSk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19iYWxhbmNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWaWRlb0JhbGFuY2UgKmJhbGFuY2UgPSBHU1RfVklERU9fQkFMQU5DRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfQ09OVFJBU1Q6Ci0gICAgICBnX3ZhbHVlX3NldF9kb3VibGUgKHZhbHVlLCBiYWxhbmNlLT5jb250cmFzdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQlJJR0hUTkVTUzoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGJhbGFuY2UtPmJyaWdodG5lc3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0hVRToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGJhbGFuY2UtPmh1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0FUVVJBVElPTjoKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGJhbGFuY2UtPnNhdHVyYXRpb24pOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5oIGIvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvYmFsYW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjlmOTIxLi4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2JhbGFuY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfVklERU9fQkFMQU5DRV9IX18KLSNkZWZpbmUgX19HU1RfVklERU9fQkFMQU5DRV9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZJREVPX0JBTEFOQ0UgXAotICAoZ3N0X3ZpZGVvX2JhbGFuY2VfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1ZJREVPX0JBTEFOQ0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9WSURFT19CQUxBTkNFLEdzdFZpZGVvQmFsYW5jZSkpCi0jZGVmaW5lIEdTVF9WSURFT19CQUxBTkNFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1ZJREVPX0JBTEFOQ0UsR3N0VmlkZW9CYWxhbmNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVklERU9fQkFMQU5DRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1ZJREVPX0JBTEFOQ0UpKQotI2RlZmluZSBHU1RfSVNfVklERU9fQkFMQU5DRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WSURFT19CQUxBTkNFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvQmFsYW5jZSBHc3RWaWRlb0JhbGFuY2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9CYWxhbmNlQ2xhc3MgR3N0VmlkZW9CYWxhbmNlQ2xhc3M7Ci0KLS8qKgotICogR3N0VmlkZW9CYWxhbmNlOgotICoKLSAqIE9wYXF1ZSBkYXRhIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IF9Hc3RWaWRlb0JhbGFuY2UgewotICBHc3RWaWRlb0ZpbHRlciB2aWRlb2ZpbHRlcjsKLQotICAvKiA8IHByaXZhdGUgPiAqLwotCi0gIC8qIGNoYW5uZWxzIGZvciBpbnRlcmZhY2UgKi8KLSAgR0xpc3QgKmNoYW5uZWxzOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2RvdWJsZSBjb250cmFzdDsKLSAgZ2RvdWJsZSBicmlnaHRuZXNzOwotICBnZG91YmxlIGh1ZTsKLSAgZ2RvdWJsZSBzYXR1cmF0aW9uOwotCi0gIC8qIHRhYmxlcyAqLwotICBndWludDggdGFibGV5WzI1Nl07Ci0gIGd1aW50OCAqdGFibGV1WzI1Nl07Ci0gIGd1aW50OCAqdGFibGV2WzI1Nl07Ci0KLSAgdm9pZCAoKnByb2Nlc3MpIChHc3RWaWRlb0JhbGFuY2UgKmJhbGFuY2UsIEdzdFZpZGVvRnJhbWUgKmZyYW1lKTsKLX07Ci0KLXN0cnVjdCBfR3N0VmlkZW9CYWxhbmNlQ2xhc3MgewotICBHc3RWaWRlb0ZpbHRlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF92aWRlb19iYWxhbmNlX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVklERU9fQkFMQU5DRV9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYyBiL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxMzJmNS4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQ2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDExPiBZb3VuZXNzIEFsYW91aSA8eW91bmVzcy5hbGFvdWlAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgd2FzIChwcm9iYWJseSkgZ2VuZXJhdGVkIGZyb20gZ3N0dmlkZW9mbGlwLmMsCi0gKiBnc3R2aWRlb2ZsaXAuYyx2IDEuNyAyMDAzLzExLzA4IDAyOjQ4OjU5IGRzY2hsZWVmIEV4cCAKLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtdmlkZW9mbGlwCi0gKgotICogRmxpcHMgYW5kIHJvdGF0ZXMgdmlkZW8uCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyAhIHZpZGVvZmxpcCBtZXRob2Q9Y2xvY2t3aXNlICEgdmlkZW9jb252ZXJ0ICEgeGltYWdlc2luawotICogXXwgVGhpcyBwaXBlbGluZSBmbGlwcyB0aGUgdGVzdCBpbWFnZSA5MCBkZWdyZWVzIGNsb2Nrd2lzZS4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3R2aWRlb2ZsaXAuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotLyogR3N0VmlkZW9GbGlwIHByb3BlcnRpZXMgKi8KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX01FVEhPRCwKLSAgUFJPUF9WSURFT19ESVJFQ1RJT04KLSAgICAgIC8qIEZJTEwgTUUgKi8KLX07Ci0KLSNkZWZpbmUgUFJPUF9NRVRIT0RfREVGQVVMVCBHU1RfVklERU9fRkxJUF9NRVRIT0RfSURFTlRJVFkKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAodmlkZW9fZmxpcF9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB2aWRlb19mbGlwX2RlYnVnCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3RfdmlkZW9fZmxpcF9zcmNfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgQVlVViwgIgotICAgICAgICAgICAgIkFSR0IsIEJHUkEsIEFCR1IsIFJHQkEsIFk0NDQsIHhSR0IsIFJHQngsIHhCR1IsIEJHUngsICIKLSAgICAgICAgICAgICJSR0IsIEJHUiwgSTQyMCwgWVYxMiwgSVlVViwgWVVZMiwgVVlWWSwgWVZZVSwgTlYxMiwgTlYyMSwgIgotICAgICAgICAgICAgIkdSQVk4LCBHUkFZMTZfQkUsIEdSQVkxNl9MRSB9IikpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF92aWRlb19mbGlwX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBBWVVWLCAiCi0gICAgICAgICAgICAiQVJHQiwgQkdSQSwgQUJHUiwgUkdCQSwgWTQ0NCwgeFJHQiwgUkdCeCwgeEJHUiwgQkdSeCwgIgotICAgICAgICAgICAgIlJHQiwgQkdSLCBJNDIwLCBZVjEyLCBJWVVWLCBZVVkyLCBVWVZZLCBZVllVLCBOVjEyLCBOVjIxLCAiCi0gICAgICAgICAgICAiR1JBWTgsIEdSQVkxNl9CRSwgR1JBWTE2X0xFIH0iKSkKLSAgICApOwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZJREVPX0ZMSVBfTUVUSE9EIChnc3RfdmlkZW9fZmxpcF9tZXRob2RfZ2V0X3R5cGUoKSkKLQotc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgdmlkZW9fZmxpcF9tZXRob2RzW10gPSB7Ci0gIHtHU1RfVklERU9fRkxJUF9NRVRIT0RfSURFTlRJVFksICJJZGVudGl0eSAobm8gcm90YXRpb24pIiwgIm5vbmUifSwKLSAge0dTVF9WSURFT19GTElQX01FVEhPRF85MFIsICJSb3RhdGUgY2xvY2t3aXNlIDkwIGRlZ3JlZXMiLCAiY2xvY2t3aXNlIn0sCi0gIHtHU1RfVklERU9fRkxJUF9NRVRIT0RfMTgwLCAiUm90YXRlIDE4MCBkZWdyZWVzIiwgInJvdGF0ZS0xODAifSwKLSAge0dTVF9WSURFT19GTElQX01FVEhPRF85MEwsICJSb3RhdGUgY291bnRlci1jbG9ja3dpc2UgOTAgZGVncmVlcyIsCi0gICAgICAiY291bnRlcmNsb2Nrd2lzZSJ9LAotICB7R1NUX1ZJREVPX0ZMSVBfTUVUSE9EX0hPUklaLCAiRmxpcCBob3Jpem9udGFsbHkiLCAiaG9yaXpvbnRhbC1mbGlwIn0sCi0gIHtHU1RfVklERU9fRkxJUF9NRVRIT0RfVkVSVCwgIkZsaXAgdmVydGljYWxseSIsICJ2ZXJ0aWNhbC1mbGlwIn0sCi0gIHtHU1RfVklERU9fRkxJUF9NRVRIT0RfVFJBTlMsCi0gICAgICAiRmxpcCBhY3Jvc3MgdXBwZXIgbGVmdC9sb3dlciByaWdodCBkaWFnb25hbCIsICJ1cHBlci1sZWZ0LWRpYWdvbmFsIn0sCi0gIHtHU1RfVklERU9fRkxJUF9NRVRIT0RfT1RIRVIsCi0gICAgICAiRmxpcCBhY3Jvc3MgdXBwZXIgcmlnaHQvbG93ZXIgbGVmdCBkaWFnb25hbCIsICJ1cHBlci1yaWdodC1kaWFnb25hbCJ9LAotICB7R1NUX1ZJREVPX0ZMSVBfTUVUSE9EX0FVVE8sCi0gICAgICAiU2VsZWN0IGZsaXAgbWV0aG9kIGJhc2VkIG9uIGltYWdlLW9yaWVudGF0aW9uIHRhZyIsICJhdXRvbWF0aWMifSwKLSAgezAsIE5VTEwsIE5VTEx9LAotfTsKLQotc3RhdGljIEdUeXBlCi1nc3RfdmlkZW9fZmxpcF9tZXRob2RfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB2aWRlb19mbGlwX21ldGhvZF90eXBlID0gMDsKLQotICBpZiAoIXZpZGVvX2ZsaXBfbWV0aG9kX3R5cGUpIHsKLSAgICB2aWRlb19mbGlwX21ldGhvZF90eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFZpZGVvRmxpcE1ldGhvZCIsCi0gICAgICAgIHZpZGVvX2ZsaXBfbWV0aG9kcyk7Ci0gIH0KLSAgcmV0dXJuIHZpZGVvX2ZsaXBfbWV0aG9kX3R5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fZmxpcF92aWRlb19kaXJlY3Rpb25faW50ZXJmYWNlX2luaXQgKEdzdFZpZGVvRGlyZWN0aW9uSW50ZXJmYWNlICoKLSAgICBpZmFjZSkKLXsKLSAgLyogV2UgaW1wbGVtZW50IHRoZSB2aWRlby1kaXJlY3Rpb24gcHJvcGVydHkgKi8KLX0KLQotI2RlZmluZSBnc3RfdmlkZW9fZmxpcF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VmlkZW9GbGlwLCBnc3RfdmlkZW9fZmxpcCwgR1NUX1RZUEVfVklERU9fRklMVEVSLAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVklERU9fRElSRUNUSU9OLAotICAgICAgICBnc3RfdmlkZW9fZmxpcF92aWRlb19kaXJlY3Rpb25faW50ZXJmYWNlX2luaXQpKTsKLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3ZpZGVvX2ZsaXBfdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywKLSAgICBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLCBHc3RDYXBzICogY2FwcywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0VmlkZW9GbGlwICp2aWRlb2ZsaXAgPSBHU1RfVklERU9fRkxJUCAodHJhbnMpOwotICBHc3RDYXBzICpyZXQ7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodCwgaTsKLQotICByZXQgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKHJldCk7IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAocmV0LCBpKTsKLSAgICBnaW50IHBhcl9uLCBwYXJfZDsKLQotICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKSAmJgotICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQpKSB7Ci0KLSAgICAgIHN3aXRjaCAodmlkZW9mbGlwLT5hY3RpdmVfbWV0aG9kKSB7Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzkwUjoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fOTBMOgotICAgICAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VTF9MUjoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fVVJfTEw6Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgIndpZHRoIiwgR19UWVBFX0lOVCwgaGVpZ2h0LAotICAgICAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgd2lkdGgsIE5VTEwpOwotICAgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAoc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICAgICAgICAgICZwYXJfbiwgJnBhcl9kKSkgewotICAgICAgICAgICAgaWYgKHBhcl9uICE9IDEgfHwgcGFyX2QgIT0gMSkgewotICAgICAgICAgICAgICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gICAgICAgICAgICAgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICAgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmdmFsLCBwYXJfZCwgcGFyX24pOwotICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgJnZhbCk7Ci0gICAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSURFTlRJVFk6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzE4MDoKLSAgICAgICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSE9SSVo6Ci0gICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1ZFUlQ6Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgIndpZHRoIiwgR19UWVBFX0lOVCwgd2lkdGgsCi0gICAgICAgICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQsIE5VTEwpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9DVVNUT006Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2aWRlb2ZsaXAsICJ1bnN1cG9ydGVkIGN1c3RvbSBvcmllbnRhdGlvbiIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvZmxpcCwgInRyYW5zZm9ybWVkICUiIEdTVF9QVFJfRk9STUFUICIgdG8gJSIKLSAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzLCByZXQpOwotCi0gIGlmIChmaWx0ZXIpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb2ZsaXAsICJVc2luZyBmaWx0ZXIgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgZmlsdGVyKTsKLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHJldCk7Ci0gICAgcmV0ID0gaW50ZXJzZWN0aW9uOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHZpZGVvZmxpcCwgIkludGVyc2VjdGlvbiAlIiBHU1RfUFRSX0ZPUk1BVCwgcmV0KTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fZmxpcF9wbGFuYXJfeXV2IChHc3RWaWRlb0ZsaXAgKiB2aWRlb2ZsaXAsIEdzdFZpZGVvRnJhbWUgKiBkZXN0LAotICAgIGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBzcmMpCi17Ci0gIGdpbnQgeCwgeTsKLSAgZ3VpbnQ4IGNvbnN0ICpzOwotICBndWludDggKmQ7Ci0gIGdpbnQgc3JjX3lfc3RyaWRlLCBzcmNfdV9zdHJpZGUsIHNyY192X3N0cmlkZTsKLSAgZ2ludCBzcmNfeV9oZWlnaHQsIHNyY191X2hlaWdodCwgc3JjX3ZfaGVpZ2h0OwotICBnaW50IHNyY195X3dpZHRoLCBzcmNfdV93aWR0aCwgc3JjX3Zfd2lkdGg7Ci0gIGdpbnQgZGVzdF95X3N0cmlkZSwgZGVzdF91X3N0cmlkZSwgZGVzdF92X3N0cmlkZTsKLSAgZ2ludCBkZXN0X3lfaGVpZ2h0LCBkZXN0X3VfaGVpZ2h0LCBkZXN0X3ZfaGVpZ2h0OwotICBnaW50IGRlc3RfeV93aWR0aCwgZGVzdF91X3dpZHRoLCBkZXN0X3Zfd2lkdGg7Ci0KLSAgc3JjX3lfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjLCAwKTsKLSAgc3JjX3Vfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjLCAxKTsKLSAgc3JjX3Zfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjLCAyKTsKLQotICBkZXN0X3lfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZGVzdCwgMCk7Ci0gIGRlc3RfdV9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0LCAxKTsKLSAgZGVzdF92X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGRlc3QsIDIpOwotCi0gIHNyY195X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKHNyYywgMCk7Ci0gIHNyY191X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKHNyYywgMSk7Ci0gIHNyY192X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKHNyYywgMik7Ci0KLSAgZGVzdF95X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGRlc3QsIDApOwotICBkZXN0X3Vfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZGVzdCwgMSk7Ci0gIGRlc3Rfdl93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChkZXN0LCAyKTsKLQotICBzcmNfeV9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKHNyYywgMCk7Ci0gIHNyY191X2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoc3JjLCAxKTsKLSAgc3JjX3ZfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChzcmMsIDIpOwotCi0gIGRlc3RfeV9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGRlc3QsIDApOwotICBkZXN0X3VfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChkZXN0LCAxKTsKLSAgZGVzdF92X2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZGVzdCwgMik7Ci0KLSAgc3dpdGNoICh2aWRlb2ZsaXAtPmFjdGl2ZV9tZXRob2QpIHsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl85MFI6Ci0gICAgICAvKiBGbGlwIFkgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF95X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3lfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfeV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY195X2hlaWdodCAtIDEgLSB4KSAqIHNyY195X3N0cmlkZSArIHldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFUgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAxKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMSk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF91X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3Vfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfdV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY191X2hlaWdodCAtIDEgLSB4KSAqIHNyY191X3N0cmlkZSArIHldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFYgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAyKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMik7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF92X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3Zfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3Rfdl9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY192X2hlaWdodCAtIDEgLSB4KSAqIHNyY192X3N0cmlkZSArIHldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl85MEw6Ci0gICAgICAvKiBGbGlwIFkgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF95X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3lfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfeV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbeCAqIHNyY195X3N0cmlkZSArIChzcmNfeV93aWR0aCAtIDEgLSB5KV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgVSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDEpOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAxKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3VfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF91X3N0cmlkZSArIHhdID0KLSAgICAgICAgICAgICAgc1t4ICogc3JjX3Vfc3RyaWRlICsgKHNyY191X3dpZHRoIC0gMSAtIHkpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogRmxpcCBWICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMik7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDIpOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3Rfdl9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF92X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkW3kgKiBkZXN0X3Zfc3RyaWRlICsgeF0gPQotICAgICAgICAgICAgICBzW3ggKiBzcmNfdl9zdHJpZGUgKyAoc3JjX3Zfd2lkdGggLSAxIC0geSldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl8xODA6Ci0gICAgICAvKiBGbGlwIFkgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF95X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3lfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfeV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY195X2hlaWdodCAtIDEgLSB5KSAqIHNyY195X3N0cmlkZSArIChzcmNfeV93aWR0aCAtIDEgLSB4KV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgVSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDEpOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAxKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3VfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF91X3N0cmlkZSArIHhdID0KLSAgICAgICAgICAgICAgc1soc3JjX3VfaGVpZ2h0IC0gMSAtIHkpICogc3JjX3Vfc3RyaWRlICsgKHNyY191X3dpZHRoIC0gMSAtIHgpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogRmxpcCBWICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMik7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDIpOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3Rfdl9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF92X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkW3kgKiBkZXN0X3Zfc3RyaWRlICsgeF0gPQotICAgICAgICAgICAgICBzWyhzcmNfdl9oZWlnaHQgLSAxIC0geSkgKiBzcmNfdl9zdHJpZGUgKyAoc3JjX3Zfd2lkdGggLSAxIC0geCldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9IT1JJWjoKLSAgICAgIC8qIEZsaXAgWSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDApOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAwKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3lfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfeV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF95X3N0cmlkZSArIHhdID0KLSAgICAgICAgICAgICAgc1t5ICogc3JjX3lfc3RyaWRlICsgKHNyY195X3dpZHRoIC0gMSAtIHgpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogRmxpcCBVICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMSk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDEpOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfdV9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF91X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkW3kgKiBkZXN0X3Vfc3RyaWRlICsgeF0gPQotICAgICAgICAgICAgICBzW3kgKiBzcmNfdV9zdHJpZGUgKyAoc3JjX3Vfd2lkdGggLSAxIC0geCldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFYgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAyKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMik7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF92X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3Zfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3Rfdl9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbeSAqIHNyY192X3N0cmlkZSArIChzcmNfdl93aWR0aCAtIDEgLSB4KV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1ZFUlQ6Ci0gICAgICAvKiBGbGlwIFkgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF95X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3lfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfeV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY195X2hlaWdodCAtIDEgLSB5KSAqIHNyY195X3N0cmlkZSArIHhdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFUgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAxKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMSk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF91X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3Vfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfdV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY191X2hlaWdodCAtIDEgLSB5KSAqIHNyY191X3N0cmlkZSArIHhdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFYgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAyKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMik7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF92X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3Zfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3Rfdl9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY192X2hlaWdodCAtIDEgLSB5KSAqIHNyY192X3N0cmlkZSArIHhdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VTF9MUjoKLSAgICAgIC8qIEZsaXAgWSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDApOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAwKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3lfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfeV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF95X3N0cmlkZSArIHhdID0gc1t4ICogc3JjX3lfc3RyaWRlICsgeV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgVSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDEpOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAxKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3VfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF91X3N0cmlkZSArIHhdID0gc1t4ICogc3JjX3Vfc3RyaWRlICsgeV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgViAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDIpOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAyKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3VfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF92X3N0cmlkZSArIHhdID0gc1t4ICogc3JjX3Zfc3RyaWRlICsgeV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1VSX0xMOgotICAgICAgLyogRmxpcCBZICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMCk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDApOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfeV9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF95X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkW3kgKiBkZXN0X3lfc3RyaWRlICsgeF0gPQotICAgICAgICAgICAgICBzWyhzcmNfeV9oZWlnaHQgLSAxIC0geCkgKiBzcmNfeV9zdHJpZGUgKyAoc3JjX3lfd2lkdGggLSAxIC0geSldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFUgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAxKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMSk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF91X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3Vfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfdV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY191X2hlaWdodCAtIDEgLSB4KSAqIHNyY191X3N0cmlkZSArIChzcmNfdV93aWR0aCAtIDEgLSB5KV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgViAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDIpOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAyKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3ZfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3Rfdl93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF92X3N0cmlkZSArIHhdID0KLSAgICAgICAgICAgICAgc1soc3JjX3ZfaGVpZ2h0IC0gMSAtIHgpICogc3JjX3Zfc3RyaWRlICsgKHNyY192X3dpZHRoIC0gMSAtIHkpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSURFTlRJVFk6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fZmxpcF9zZW1pX3BsYW5hcl95dXYgKEdzdFZpZGVvRmxpcCAqIHZpZGVvZmxpcCwgR3N0VmlkZW9GcmFtZSAqIGRlc3QsCi0gICAgY29uc3QgR3N0VmlkZW9GcmFtZSAqIHNyYykKLXsKLSAgZ2ludCB4LCB5OwotICBndWludDggY29uc3QgKnM7Ci0gIGd1aW50OCAqZDsKLSAgZ2ludCBzX29mZiwgZF9vZmY7Ci0gIGdpbnQgc3JjX3lfc3RyaWRlLCBzcmNfdXZfc3RyaWRlOwotICBnaW50IHNyY195X2hlaWdodCwgc3JjX3V2X2hlaWdodDsKLSAgZ2ludCBzcmNfeV93aWR0aCwgc3JjX3V2X3dpZHRoOwotICBnaW50IGRlc3RfeV9zdHJpZGUsIGRlc3RfdXZfc3RyaWRlOwotICBnaW50IGRlc3RfeV9oZWlnaHQsIGRlc3RfdXZfaGVpZ2h0OwotICBnaW50IGRlc3RfeV93aWR0aCwgZGVzdF91dl93aWR0aDsKLQotCi0gIHNyY195X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKHNyYywgMCk7Ci0gIHNyY191dl9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChzcmMsIDEpOwotCi0gIGRlc3RfeV9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0LCAwKTsKLSAgZGVzdF91dl9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0LCAxKTsKLQotICBzcmNfeV93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChzcmMsIDApOwotICBzcmNfdXZfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoc3JjLCAxKTsKLQotICBkZXN0X3lfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZGVzdCwgMCk7Ci0gIGRlc3RfdXZfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZGVzdCwgMSk7Ci0KLSAgc3JjX3lfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChzcmMsIDApOwotICBzcmNfdXZfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChzcmMsIDEpOwotCi0gIGRlc3RfeV9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGRlc3QsIDApOwotICBkZXN0X3V2X2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZGVzdCwgMSk7Ci0KLSAgc3dpdGNoICh2aWRlb2ZsaXAtPmFjdGl2ZV9tZXRob2QpIHsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl85MFI6Ci0gICAgICAvKiBGbGlwIFkgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF95X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3lfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfeV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY195X2hlaWdodCAtIDEgLSB4KSAqIHNyY195X3N0cmlkZSArIHldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFVWICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMSk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDEpOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfdXZfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdXZfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRfb2ZmID0geSAqIGRlc3RfdXZfc3RyaWRlICsgeCAqIDI7Ci0gICAgICAgICAgc19vZmYgPSAoc3JjX3V2X2hlaWdodCAtIDEgLSB4KSAqIHNyY191dl9zdHJpZGUgKyB5ICogMjsKLSAgICAgICAgICBkW2Rfb2ZmXSA9IHNbc19vZmZdOwotICAgICAgICAgIGRbZF9vZmYgKyAxXSA9IHNbc19vZmYgKyAxXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fOTBMOgotICAgICAgLyogRmxpcCBZICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMCk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDApOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfeV9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF95X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkW3kgKiBkZXN0X3lfc3RyaWRlICsgeF0gPQotICAgICAgICAgICAgICBzW3ggKiBzcmNfeV9zdHJpZGUgKyAoc3JjX3lfd2lkdGggLSAxIC0geSldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFVWICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMSk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDEpOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfdXZfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdXZfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRfb2ZmID0geSAqIGRlc3RfdXZfc3RyaWRlICsgeCAqIDI7Ci0gICAgICAgICAgc19vZmYgPSB4ICogc3JjX3V2X3N0cmlkZSArIChzcmNfdXZfd2lkdGggLSAxIC0geSkgKiAyOwotICAgICAgICAgIGRbZF9vZmZdID0gc1tzX29mZl07Ci0gICAgICAgICAgZFtkX29mZiArIDFdID0gc1tzX29mZiArIDFdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl8xODA6Ci0gICAgICAvKiBGbGlwIFkgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF95X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3lfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRbeSAqIGRlc3RfeV9zdHJpZGUgKyB4XSA9Ci0gICAgICAgICAgICAgIHNbKHNyY195X2hlaWdodCAtIDEgLSB5KSAqIHNyY195X3N0cmlkZSArIChzcmNfeV93aWR0aCAtIDEgLSB4KV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgVVYgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAxKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMSk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF91dl9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF91dl93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZF9vZmYgPSB5ICogZGVzdF91dl9zdHJpZGUgKyB4ICogMjsKLSAgICAgICAgICBzX29mZiA9IChzcmNfdXZfaGVpZ2h0IC0gMSAtIHkpICogc3JjX3V2X3N0cmlkZSArIChzcmNfdXZfd2lkdGggLSAxIC0KLSAgICAgICAgICAgICAgeCkgKiAyOwotICAgICAgICAgIGRbZF9vZmZdID0gc1tzX29mZl07Ci0gICAgICAgICAgZFtkX29mZiArIDFdID0gc1tzX29mZiArIDFdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9IT1JJWjoKLSAgICAgIC8qIEZsaXAgWSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDApOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAwKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3lfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfeV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF95X3N0cmlkZSArIHhdID0KLSAgICAgICAgICAgICAgc1t5ICogc3JjX3lfc3RyaWRlICsgKHNyY195X3dpZHRoIC0gMSAtIHgpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLyogRmxpcCBVViAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDEpOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAxKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3V2X2hlaWdodDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkZXN0X3V2X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkX29mZiA9IHkgKiBkZXN0X3V2X3N0cmlkZSArIHggKiAyOwotICAgICAgICAgIHNfb2ZmID0geSAqIHNyY191dl9zdHJpZGUgKyAoc3JjX3V2X3dpZHRoIC0gMSAtIHgpICogMjsKLSAgICAgICAgICBkW2Rfb2ZmXSA9IHNbc19vZmZdOwotICAgICAgICAgIGRbZF9vZmYgKyAxXSA9IHNbc19vZmYgKyAxXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fVkVSVDoKLSAgICAgIC8qIEZsaXAgWSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDApOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAwKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3lfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfeV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF95X3N0cmlkZSArIHhdID0KLSAgICAgICAgICAgICAgc1soc3JjX3lfaGVpZ2h0IC0gMSAtIHkpICogc3JjX3lfc3RyaWRlICsgeF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgVVYgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAxKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMSk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF91dl9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF91dl93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZF9vZmYgPSB5ICogZGVzdF91dl9zdHJpZGUgKyB4ICogMjsKLSAgICAgICAgICBzX29mZiA9IChzcmNfdXZfaGVpZ2h0IC0gMSAtIHkpICogc3JjX3V2X3N0cmlkZSArIHggKiAyOwotICAgICAgICAgIGRbZF9vZmZdID0gc1tzX29mZl07Ci0gICAgICAgICAgZFtkX29mZiArIDFdID0gc1tzX29mZiArIDFdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VTF9MUjoKLSAgICAgIC8qIEZsaXAgWSAqLwotICAgICAgcyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmMsIDApOwotICAgICAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAwKTsKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkZXN0X3lfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfeV93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZFt5ICogZGVzdF95X3N0cmlkZSArIHhdID0gc1t4ICogc3JjX3lfc3RyaWRlICsgeV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8qIEZsaXAgVVYgKi8KLSAgICAgIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAxKTsKLSAgICAgIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMSk7Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGVzdF91dl9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF91dl93aWR0aDsgeCsrKSB7Ci0gICAgICAgICAgZF9vZmYgPSB5ICogZGVzdF91dl9zdHJpZGUgKyB4ICogMjsKLSAgICAgICAgICBzX29mZiA9IHggKiBzcmNfdXZfc3RyaWRlICsgeSAqIDI7Ci0gICAgICAgICAgZFtkX29mZl0gPSBzW3Nfb2ZmXTsKLSAgICAgICAgICBkW2Rfb2ZmICsgMV0gPSBzW3Nfb2ZmICsgMV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1VSX0xMOgotICAgICAgLyogRmxpcCBZICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMCk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDApOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfeV9oZWlnaHQ7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZGVzdF95X3dpZHRoOyB4KyspIHsKLSAgICAgICAgICBkW3kgKiBkZXN0X3lfc3RyaWRlICsgeF0gPQotICAgICAgICAgICAgICBzWyhzcmNfeV9oZWlnaHQgLSAxIC0geCkgKiBzcmNfeV9zdHJpZGUgKyAoc3JjX3lfd2lkdGggLSAxIC0geSldOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvKiBGbGlwIFVWICovCi0gICAgICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMSk7Ci0gICAgICBkID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGRlc3QsIDEpOwotICAgICAgZm9yICh5ID0gMDsgeSA8IGRlc3RfdXZfaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGRlc3RfdXZfd2lkdGg7IHgrKykgewotICAgICAgICAgIGRfb2ZmID0geSAqIGRlc3RfdXZfc3RyaWRlICsgeCAqIDI7Ci0gICAgICAgICAgc19vZmYgPSAoc3JjX3V2X2hlaWdodCAtIDEgLSB4KSAqIHNyY191dl9zdHJpZGUgKyAoc3JjX3V2X3dpZHRoIC0gMSAtCi0gICAgICAgICAgICAgIHkpICogMjsKLSAgICAgICAgICBkW2Rfb2ZmXSA9IHNbc19vZmZdOwotICAgICAgICAgIGRbZF9vZmYgKyAxXSA9IHNbc19vZmYgKyAxXTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSURFTlRJVFk6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fZmxpcF9wYWNrZWRfc2ltcGxlIChHc3RWaWRlb0ZsaXAgKiB2aWRlb2ZsaXAsIEdzdFZpZGVvRnJhbWUgKiBkZXN0LAotICAgIGNvbnN0IEdzdFZpZGVvRnJhbWUgKiBzcmMpCi17Ci0gIGdpbnQgeCwgeSwgejsKLSAgZ3VpbnQ4IGNvbnN0ICpzOwotICBndWludDggKmQ7Ci0gIGdpbnQgc3cgPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKHNyYyk7Ci0gIGdpbnQgc2ggPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChzcmMpOwotICBnaW50IGR3ID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChkZXN0KTsKLSAgZ2ludCBkaCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGRlc3QpOwotICBnaW50IHNyY19zdHJpZGUsIGRlc3Rfc3RyaWRlOwotICBnaW50IGJwcDsKLQotICBzID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyYywgMCk7Ci0gIGQgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdCwgMCk7Ci0KLSAgc3JjX3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKHNyYywgMCk7Ci0gIGRlc3Rfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoZGVzdCwgMCk7Ci0gIC8qIFRoaXMgaXMgb25seSB0cnVlIGZvciBub24tc3Vic2FtcGxlZCBmb3JtYXRzISAqLwotICBicHAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFIChzcmMsIDApOwotCi0gIHN3aXRjaCAodmlkZW9mbGlwLT5hY3RpdmVfbWV0aG9kKSB7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fOTBSOgotICAgICAgZm9yICh5ID0gMDsgeSA8IGRoOyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGR3OyB4KyspIHsKLSAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgYnBwOyB6KyspIHsKLSAgICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHpdID0KLSAgICAgICAgICAgICAgICBzWyhzaCAtIDEgLSB4KSAqIHNyY19zdHJpZGUgKyB5ICogYnBwICsgel07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl85MEw6Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGg7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZHc7IHgrKykgewotICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBicHA7IHorKykgewotICAgICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgel0gPQotICAgICAgICAgICAgICAgIHNbeCAqIHNyY19zdHJpZGUgKyAoc3cgLSAxIC0geSkgKiBicHAgKyB6XTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzE4MDoKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkaDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkdzsgeCsrKSB7Ci0gICAgICAgICAgZm9yICh6ID0gMDsgeiA8IGJwcDsgeisrKSB7Ci0gICAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB6XSA9Ci0gICAgICAgICAgICAgICAgc1soc2ggLSAxIC0geSkgKiBzcmNfc3RyaWRlICsgKHN3IC0gMSAtIHgpICogYnBwICsgel07Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9IT1JJWjoKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkaDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkdzsgeCsrKSB7Ci0gICAgICAgICAgZm9yICh6ID0gMDsgeiA8IGJwcDsgeisrKSB7Ci0gICAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB6XSA9Ci0gICAgICAgICAgICAgICAgc1t5ICogc3JjX3N0cmlkZSArIChzdyAtIDEgLSB4KSAqIGJwcCArIHpdOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fVkVSVDoKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkaDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkdzsgeCsrKSB7Ci0gICAgICAgICAgZm9yICh6ID0gMDsgeiA8IGJwcDsgeisrKSB7Ci0gICAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB6XSA9Ci0gICAgICAgICAgICAgICAgc1soc2ggLSAxIC0geSkgKiBzcmNfc3RyaWRlICsgeCAqIGJwcCArIHpdOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fVUxfTFI6Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGg7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZHc7IHgrKykgewotICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBicHA7IHorKykgewotICAgICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgel0gPSBzW3ggKiBzcmNfc3RyaWRlICsgeSAqIGJwcCArIHpdOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fVVJfTEw6Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGg7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZHc7IHgrKykgewotICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBicHA7IHorKykgewotICAgICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgel0gPQotICAgICAgICAgICAgICAgIHNbKHNoIC0gMSAtIHgpICogc3JjX3N0cmlkZSArIChzdyAtIDEgLSB5KSAqIGJwcCArIHpdOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSURFTlRJVFk6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19mbGlwX3k0MjIgKEdzdFZpZGVvRmxpcCAqIHZpZGVvZmxpcCwgR3N0VmlkZW9GcmFtZSAqIGRlc3QsCi0gICAgY29uc3QgR3N0VmlkZW9GcmFtZSAqIHNyYykKLXsKLSAgZ2ludCB4LCB5OwotICBndWludDggY29uc3QgKnM7Ci0gIGd1aW50OCAqZDsKLSAgZ2ludCBzdyA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoc3JjKTsKLSAgZ2ludCBzaCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKHNyYyk7Ci0gIGdpbnQgZHcgPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGRlc3QpOwotICBnaW50IGRoID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZGVzdCk7Ci0gIGdpbnQgc3JjX3N0cmlkZSwgZGVzdF9zdHJpZGU7Ci0gIGdpbnQgYnBwOwotICBnaW50IHlfb2Zmc2V0OwotICBnaW50IHVfb2Zmc2V0OwotICBnaW50IHZfb2Zmc2V0OwotICBnaW50IHlfc3RyaWRlOwotCi0gIHMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjLCAwKTsKLSAgZCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0LCAwKTsKLQotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoc3JjLCAwKTsKLSAgZGVzdF9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChkZXN0LCAwKTsKLQotICB5X29mZnNldCA9IEdTVF9WSURFT19GUkFNRV9DT01QX09GRlNFVCAoc3JjLCAwKTsKLSAgdV9vZmZzZXQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9PRkZTRVQgKHNyYywgMSk7Ci0gIHZfb2Zmc2V0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfT0ZGU0VUIChzcmMsIDIpOwotICB5X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1BTVFJJREUgKHNyYywgMCk7Ci0gIGJwcCA9IHlfc3RyaWRlOwotCi0gIHN3aXRjaCAodmlkZW9mbGlwLT5hY3RpdmVfbWV0aG9kKSB7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fOTBSOgotICAgICAgZm9yICh5ID0gMDsgeSA8IGRoOyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGR3OyB4ICs9IDIpIHsKLSAgICAgICAgICBndWludDggdTsKLSAgICAgICAgICBndWludDggdjsKLSAgICAgICAgICAvKiB1L3YgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGV2ZW4gY29sdW1uICovCi0gICAgICAgICAgZ2ludCBldmVuX3kgPSAoeSAmIH4xKTsKLQotICAgICAgICAgIHUgPSBzWyhzaCAtIDEgLSB4KSAqIHNyY19zdHJpZGUgKyBldmVuX3kgKiBicHAgKyB1X29mZnNldF07Ci0gICAgICAgICAgaWYgKHggKyAxIDwgZHcpCi0gICAgICAgICAgICB1ID0gKHNbKHNoIC0gMSAtICh4ICsgMSkpICogc3JjX3N0cmlkZSArIGV2ZW5feSAqIGJwcCArIHVfb2Zmc2V0XQotICAgICAgICAgICAgICAgICsgdSkgPj4gMTsKLSAgICAgICAgICB2ID0gc1soc2ggLSAxIC0geCkgKiBzcmNfc3RyaWRlICsgZXZlbl95ICogYnBwICsgdl9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgdiA9IChzWyhzaCAtIDEgLSAoeCArIDEpKSAqIHNyY19zdHJpZGUgKyBldmVuX3kgKiBicHAgKyB2X29mZnNldF0KLSAgICAgICAgICAgICAgICArIHYpID4+IDE7Ci0KLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB1X29mZnNldF0gPSB1OwotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHZfb2Zmc2V0XSA9IHY7Ci0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgc1soc2ggLSAxIC0geCkgKiBzcmNfc3RyaWRlICsgeSAqIGJwcCArIHlfb2Zmc2V0XTsKLSAgICAgICAgICBpZiAoeCArIDEgPCBkdykKLSAgICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgKHggKyAxKSAqIGJwcCArIHlfb2Zmc2V0XSA9Ci0gICAgICAgICAgICAgICAgc1soc2ggLSAxIC0gKHggKyAxKSkgKiBzcmNfc3RyaWRlICsgeSAqIGJwcCArIHlfb2Zmc2V0XTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fOTBMOgotICAgICAgZm9yICh5ID0gMDsgeSA8IGRoOyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGR3OyB4ICs9IDIpIHsKLSAgICAgICAgICBndWludDggdTsKLSAgICAgICAgICBndWludDggdjsKLSAgICAgICAgICAvKiB1L3YgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGV2ZW4gY29sdW1uICovCi0gICAgICAgICAgZ2ludCBldmVuX3kgPSAoKHN3IC0gMSAtIHkpICYgfjEpOwotCi0gICAgICAgICAgdSA9IHNbeCAqIHNyY19zdHJpZGUgKyBldmVuX3kgKiBicHAgKyB1X29mZnNldF07Ci0gICAgICAgICAgaWYgKHggKyAxIDwgZHcpCi0gICAgICAgICAgICB1ID0gKHNbKHggKyAxKSAqIHNyY19zdHJpZGUgKyBldmVuX3kgKiBicHAgKyB1X29mZnNldF0gKyB1KSA+PiAxOwotICAgICAgICAgIHYgPSBzW3ggKiBzcmNfc3RyaWRlICsgZXZlbl95ICogYnBwICsgdl9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgdiA9IChzWyh4ICsgMSkgKiBzcmNfc3RyaWRlICsgZXZlbl95ICogYnBwICsgdl9vZmZzZXRdICsgdikgPj4gMTsKLQotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHVfb2Zmc2V0XSA9IHU7Ci0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgdl9vZmZzZXRdID0gdjsKLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB5X29mZnNldF0gPQotICAgICAgICAgICAgICBzW3ggKiBzcmNfc3RyaWRlICsgKHN3IC0gMSAtIHkpICogYnBwICsgeV9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyAoeCArIDEpICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgICBzWyh4ICsgMSkgKiBzcmNfc3RyaWRlICsgKHN3IC0gMSAtIHkpICogYnBwICsgeV9vZmZzZXRdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl8xODA6Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGg7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZHc7IHggKz0gMikgewotICAgICAgICAgIGd1aW50OCB1OwotICAgICAgICAgIGd1aW50OCB2OwotICAgICAgICAgIC8qIHUvdiBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIG9mZnNldCBvZiB0aGUgZXZlbiBjb2x1bW4gKi8KLSAgICAgICAgICBnaW50IGV2ZW5feCA9ICgoc3cgLSAxIC0geCkgJiB+MSk7Ci0KLSAgICAgICAgICB1ID0gKHNbKHNoIC0gMSAtIHkpICogc3JjX3N0cmlkZSArIGV2ZW5feCAqIGJwcCArIHVfb2Zmc2V0XSArCi0gICAgICAgICAgICAgIHNbKHNoIC0gMSAtIHkpICogc3JjX3N0cmlkZSArIGV2ZW5feCAqIGJwcCArIHVfb2Zmc2V0XSkgLyAyOwotICAgICAgICAgIHYgPSAoc1soc2ggLSAxIC0geSkgKiBzcmNfc3RyaWRlICsgZXZlbl94ICogYnBwICsgdl9vZmZzZXRdICsKLSAgICAgICAgICAgICAgc1soc2ggLSAxIC0geSkgKiBzcmNfc3RyaWRlICsgZXZlbl94ICogYnBwICsgdl9vZmZzZXRdKSAvIDI7Ci0KLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB1X29mZnNldF0gPSB1OwotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHZfb2Zmc2V0XSA9IHY7Ci0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgc1soc2ggLSAxIC0geSkgKiBzcmNfc3RyaWRlICsgKHN3IC0gMSAtIHgpICogYnBwICsgeV9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyAoeCArIDEpICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgICBzWyhzaCAtIDEgLSB5KSAqIHNyY19zdHJpZGUgKyAoc3cgLSAxIC0gKHggKyAxKSkgKiBicHAgKwotICAgICAgICAgICAgICAgIHlfb2Zmc2V0XTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSE9SSVo6Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGg7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZHc7IHggKz0gMikgewotICAgICAgICAgIGd1aW50OCB1OwotICAgICAgICAgIGd1aW50OCB2OwotICAgICAgICAgIC8qIHUvdiBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIG9mZnNldCBvZiB0aGUgZXZlbiBjb2x1bW4gKi8KLSAgICAgICAgICBnaW50IGV2ZW5feCA9ICgoc3cgLSAxIC0geCkgJiB+MSk7Ci0KLSAgICAgICAgICB1ID0gKHNbeSAqIHNyY19zdHJpZGUgKyBldmVuX3ggKiBicHAgKyB1X29mZnNldF0gKwotICAgICAgICAgICAgICBzW3kgKiBzcmNfc3RyaWRlICsgZXZlbl94ICogYnBwICsgdV9vZmZzZXRdKSAvIDI7Ci0gICAgICAgICAgdiA9IChzW3kgKiBzcmNfc3RyaWRlICsgZXZlbl94ICogYnBwICsgdl9vZmZzZXRdICsKLSAgICAgICAgICAgICAgc1t5ICogc3JjX3N0cmlkZSArIGV2ZW5feCAqIGJwcCArIHZfb2Zmc2V0XSkgLyAyOwotCi0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgdV9vZmZzZXRdID0gdTsKLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB2X29mZnNldF0gPSB2OwotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHlfb2Zmc2V0XSA9Ci0gICAgICAgICAgICAgIHNbeSAqIHNyY19zdHJpZGUgKyAoc3cgLSAxIC0geCkgKiBicHAgKyB5X29mZnNldF07Ci0gICAgICAgICAgaWYgKHggKyAxIDwgZHcpCi0gICAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArICh4ICsgMSkgKiBicHAgKyB5X29mZnNldF0gPQotICAgICAgICAgICAgICAgIHNbeSAqIHNyY19zdHJpZGUgKyAoc3cgLSAxIC0gKHggKyAxKSkgKiBicHAgKyB5X29mZnNldF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1ZFUlQ6Ci0gICAgICBmb3IgKHkgPSAwOyB5IDwgZGg7IHkrKykgewotICAgICAgICBmb3IgKHggPSAwOyB4IDwgZHc7IHggKz0gMikgewotICAgICAgICAgIGd1aW50OCB1OwotICAgICAgICAgIGd1aW50OCB2OwotICAgICAgICAgIC8qIHUvdiBtdXN0IGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIG9mZnNldCBvZiB0aGUgZXZlbiBjb2x1bW4gKi8KLSAgICAgICAgICBnaW50IGV2ZW5feCA9ICh4ICYgfjEpOwotCi0gICAgICAgICAgdSA9IChzWyhzaCAtIDEgLSB5KSAqIHNyY19zdHJpZGUgKyBldmVuX3ggKiBicHAgKyB1X29mZnNldF0gKwotICAgICAgICAgICAgICBzWyhzaCAtIDEgLSB5KSAqIHNyY19zdHJpZGUgKyBldmVuX3ggKiBicHAgKyB1X29mZnNldF0pIC8gMjsKLSAgICAgICAgICB2ID0gKHNbKHNoIC0gMSAtIHkpICogc3JjX3N0cmlkZSArIGV2ZW5feCAqIGJwcCArIHZfb2Zmc2V0XSArCi0gICAgICAgICAgICAgIHNbKHNoIC0gMSAtIHkpICogc3JjX3N0cmlkZSArIGV2ZW5feCAqIGJwcCArIHZfb2Zmc2V0XSkgLyAyOwotCi0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgdV9vZmZzZXRdID0gdTsKLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB2X29mZnNldF0gPSB2OwotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHlfb2Zmc2V0XSA9Ci0gICAgICAgICAgICAgIHNbKHNoIC0gMSAtIHkpICogc3JjX3N0cmlkZSArIHggKiBicHAgKyB5X29mZnNldF07Ci0gICAgICAgICAgaWYgKHggKyAxIDwgZHcpCi0gICAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArICh4ICsgMSkgKiBicHAgKyB5X29mZnNldF0gPQotICAgICAgICAgICAgICAgIHNbKHNoIC0gMSAtIHkpICogc3JjX3N0cmlkZSArICh4ICsgMSkgKiBicHAgKyB5X29mZnNldF07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1VMX0xSOgotICAgICAgZm9yICh5ID0gMDsgeSA8IGRoOyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0gMDsgeCA8IGR3OyB4ICs9IDIpIHsKLSAgICAgICAgICBndWludDggdTsKLSAgICAgICAgICBndWludDggdjsKLSAgICAgICAgICAvKiB1L3YgbXVzdCBiZSBjYWxjdWxhdGVkIHVzaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGV2ZW4gY29sdW1uICovCi0gICAgICAgICAgZ2ludCBldmVuX3kgPSAoeSAmIH4xKTsKLQotICAgICAgICAgIHUgPSBzW3ggKiBzcmNfc3RyaWRlICsgZXZlbl95ICogYnBwICsgdV9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgdSA9IChzWyh4ICsgMSkgKiBzcmNfc3RyaWRlICsgZXZlbl95ICogYnBwICsgdV9vZmZzZXRdICsgdSkgPj4gMTsKLSAgICAgICAgICB2ID0gc1t4ICogc3JjX3N0cmlkZSArIGV2ZW5feSAqIGJwcCArIHZfb2Zmc2V0XTsKLSAgICAgICAgICBpZiAoeCArIDEgPCBkdykKLSAgICAgICAgICAgIHYgPSAoc1soeCArIDEpICogc3JjX3N0cmlkZSArIGV2ZW5feSAqIGJwcCArIHZfb2Zmc2V0XSArIHYpID4+IDE7Ci0KLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB1X29mZnNldF0gPSB1OwotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHZfb2Zmc2V0XSA9IHY7Ci0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgc1t4ICogc3JjX3N0cmlkZSArIHkgKiBicHAgKyB5X29mZnNldF07Ci0gICAgICAgICAgaWYgKHggKyAxIDwgZHcpCi0gICAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArICh4ICsgMSkgKiBicHAgKyB5X29mZnNldF0gPQotICAgICAgICAgICAgICAgIHNbKHggKyAxKSAqIHNyY19zdHJpZGUgKyB5ICogYnBwICsgeV9vZmZzZXRdOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VUl9MTDoKLSAgICAgIGZvciAoeSA9IDA7IHkgPCBkaDsgeSsrKSB7Ci0gICAgICAgIGZvciAoeCA9IDA7IHggPCBkdzsgeCArPSAyKSB7Ci0gICAgICAgICAgZ3VpbnQ4IHU7Ci0gICAgICAgICAgZ3VpbnQ4IHY7Ci0gICAgICAgICAgLyogdS92IG11c3QgYmUgY2FsY3VsYXRlZCB1c2luZyB0aGUgb2Zmc2V0IG9mIHRoZSBldmVuIGNvbHVtbiAqLwotICAgICAgICAgIGdpbnQgZXZlbl95ID0gKChzdyAtIDEgLSB5KSAmIH4xKTsKLQotICAgICAgICAgIHUgPSBzWyhzaCAtIDEgLSB4KSAqIHNyY19zdHJpZGUgKyBldmVuX3kgKiBicHAgKyB1X29mZnNldF07Ci0gICAgICAgICAgaWYgKHggKyAxIDwgZHcpCi0gICAgICAgICAgICB1ID0gKHNbKHNoIC0gMSAtICh4ICsgMSkpICogc3JjX3N0cmlkZSArIGV2ZW5feSAqIGJwcCArIHVfb2Zmc2V0XQotICAgICAgICAgICAgICAgICsgdSkgPj4gMTsKLSAgICAgICAgICB2ID0gc1soc2ggLSAxIC0geCkgKiBzcmNfc3RyaWRlICsgZXZlbl95ICogYnBwICsgdl9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgdiA9IChzWyhzaCAtIDEgLSAoeCArIDEpKSAqIHNyY19zdHJpZGUgKyBldmVuX3kgKiBicHAgKyB2X29mZnNldF0KLSAgICAgICAgICAgICAgICArIHYpID4+IDE7Ci0KLSAgICAgICAgICBkW3kgKiBkZXN0X3N0cmlkZSArIHggKiBicHAgKyB1X29mZnNldF0gPSB1OwotICAgICAgICAgIGRbeSAqIGRlc3Rfc3RyaWRlICsgeCAqIGJwcCArIHZfb2Zmc2V0XSA9IHY7Ci0gICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyB4ICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgc1soc2ggLSAxIC0geCkgKiBzcmNfc3RyaWRlICsgKHN3IC0gMSAtIHkpICogYnBwICsgeV9vZmZzZXRdOwotICAgICAgICAgIGlmICh4ICsgMSA8IGR3KQotICAgICAgICAgICAgZFt5ICogZGVzdF9zdHJpZGUgKyAoeCArIDEpICogYnBwICsgeV9vZmZzZXRdID0KLSAgICAgICAgICAgICAgICBzWyhzaCAtIDEgLSAoeCArIDEpKSAqIHNyY19zdHJpZGUgKyAoc3cgLSAxIC0geSkgKiBicHAgKwotICAgICAgICAgICAgICAgIHlfb2Zmc2V0XTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fSURFTlRJVFk6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9fZmxpcF9zZXRfaW5mbyAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLCBHc3RDYXBzICogaW5jYXBzLAotICAgIEdzdFZpZGVvSW5mbyAqIGluX2luZm8sIEdzdENhcHMgKiBvdXRjYXBzLCBHc3RWaWRlb0luZm8gKiBvdXRfaW5mbykKLXsKLSAgR3N0VmlkZW9GbGlwICp2ZiA9IEdTVF9WSURFT19GTElQICh2ZmlsdGVyKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgdmYtPnByb2Nlc3MgPSBOVUxMOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19GT1JNQVQgKGluX2luZm8pICE9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCAob3V0X2luZm8pKQotICAgIGdvdG8gaW52YWxpZF9jYXBzOwotCi0gIC8qIENoZWNrIHRoYXQgdGhleSBhcmUgY29ycmVjdCAqLwotICBzd2l0Y2ggKHZmLT5hY3RpdmVfbWV0aG9kKSB7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fOTBSOgotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzkwTDoKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VTF9MUjoKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VUl9MTDoKLSAgICAgIGlmICgoaW5faW5mby0+d2lkdGggIT0gb3V0X2luZm8tPmhlaWdodCkgfHwKLSAgICAgICAgICAoaW5faW5mby0+aGVpZ2h0ICE9IG91dF9pbmZvLT53aWR0aCkpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAodmYsICJ3ZSBhcmUgaW52ZXJ0aW5nIHdpZHRoIGFuZCBoZWlnaHQgYnV0IGNhcHMgIgotICAgICAgICAgICAgImFyZSBub3QgY29ycmVjdCA6ICVkeCVkIHRvICVkeCVkIiwgaW5faW5mby0+d2lkdGgsCi0gICAgICAgICAgICBpbl9pbmZvLT5oZWlnaHQsIG91dF9pbmZvLT53aWR0aCwgb3V0X2luZm8tPmhlaWdodCk7Ci0gICAgICAgIGdvdG8gYmVhY2g7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9JREVOVElUWToKLQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fT1JJRU5UQVRJT05fMTgwOgotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX0hPUklaOgotICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1ZFUlQ6Ci0gICAgICBpZiAoKGluX2luZm8tPndpZHRoICE9IG91dF9pbmZvLT53aWR0aCkgfHwKLSAgICAgICAgICAoaW5faW5mby0+aGVpZ2h0ICE9IG91dF9pbmZvLT5oZWlnaHQpKSB7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHZmLCAid2UgYXJlIGtlZXBpbmcgd2lkdGggYW5kIGhlaWdodCBidXQgY2FwcyAiCi0gICAgICAgICAgICAiYXJlIG5vdCBjb3JyZWN0IDogJWR4JWQgdG8gJWR4JWQiLCBpbl9pbmZvLT53aWR0aCwKLSAgICAgICAgICAgIGluX2luZm8tPmhlaWdodCwgb3V0X2luZm8tPndpZHRoLCBvdXRfaW5mby0+aGVpZ2h0KTsKLSAgICAgICAgZ290byBiZWFjaDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gVFJVRTsKLQotICBzd2l0Y2ggKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoaW5faW5mbykpIHsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQ0NDoKLSAgICAgIHZmLT5wcm9jZXNzID0gZ3N0X3ZpZGVvX2ZsaXBfcGxhbmFyX3l1djsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVVkyOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgdmYtPnByb2Nlc3MgPSBnc3RfdmlkZW9fZmxpcF95NDIyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FZVVY6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0FCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hSR0I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX3hCR1I6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9HUkFZODoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFOgotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9HUkFZMTZfTEU6Ci0gICAgICB2Zi0+cHJvY2VzcyA9IGdzdF92aWRlb19mbGlwX3BhY2tlZF9zaW1wbGU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfTlYxMjoKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfTlYyMToKLSAgICAgIHZmLT5wcm9jZXNzID0gZ3N0X3ZpZGVvX2ZsaXBfc2VtaV9wbGFuYXJfeXV2OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLWJlYWNoOgotICByZXR1cm4gcmV0ICYmICh2Zi0+cHJvY2VzcyAhPSBOVUxMKTsKLQotaW52YWxpZF9jYXBzOgotICBHU1RfRVJST1JfT0JKRUNUICh2ZiwgIkludmFsaWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQgIiAtPiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIGluY2Fwcywgb3V0Y2Fwcyk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19mbGlwX3NldF9tZXRob2QgKEdzdFZpZGVvRmxpcCAqIHZpZGVvZmxpcCwKLSAgICBHc3RWaWRlb09yaWVudGF0aW9uTWV0aG9kIG1ldGhvZCwgZ2Jvb2xlYW4gZnJvbV90YWcpCi17Ci0gIEdTVF9PQkpFQ1RfTE9DSyAodmlkZW9mbGlwKTsKLQotICBpZiAobWV0aG9kID09IEdTVF9WSURFT19PUklFTlRBVElPTl9DVVNUT00pIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHZpZGVvZmxpcCwgInVuc3VwcG9ydGVkIGN1c3RvbSBvcmllbnRhdGlvbiIpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh2aWRlb2ZsaXApOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIFN0b3JlIHVwZGF0ZWQgbWV0aG9kICovCi0gIGlmIChmcm9tX3RhZykKLSAgICB2aWRlb2ZsaXAtPnRhZ19tZXRob2QgPSBtZXRob2Q7Ci0gIGVsc2UKLSAgICB2aWRlb2ZsaXAtPm1ldGhvZCA9IG1ldGhvZDsKLQotICAvKiBHZXQgdGhlIG5ldyBtZXRob2QgKi8KLSAgaWYgKHZpZGVvZmxpcC0+bWV0aG9kID09IEdTVF9WSURFT19PUklFTlRBVElPTl9BVVRPKQotICAgIG1ldGhvZCA9IHZpZGVvZmxpcC0+dGFnX21ldGhvZDsKLSAgZWxzZQotICAgIG1ldGhvZCA9IHZpZGVvZmxpcC0+bWV0aG9kOwotCi0gIGlmIChtZXRob2QgIT0gdmlkZW9mbGlwLT5hY3RpdmVfbWV0aG9kKSB7Ci0gICAgR0VudW1WYWx1ZSAqYWN0aXZlX21ldGhvZF9lbnVtLCAqbWV0aG9kX2VudW07Ci0gICAgR3N0QmFzZVRyYW5zZm9ybSAqYnRyYW5zID0gR1NUX0JBU0VfVFJBTlNGT1JNICh2aWRlb2ZsaXApOwotICAgIEdFbnVtQ2xhc3MgKmVudW1fY2xhc3MgPQotICAgICAgICBnX3R5cGVfY2xhc3NfcmVmIChHU1RfVFlQRV9WSURFT19PUklFTlRBVElPTl9NRVRIT0QpOwotCi0gICAgYWN0aXZlX21ldGhvZF9lbnVtID0KLSAgICAgICAgZ19lbnVtX2dldF92YWx1ZSAoZW51bV9jbGFzcywgdmlkZW9mbGlwLT5hY3RpdmVfbWV0aG9kKTsKLSAgICBtZXRob2RfZW51bSA9IGdfZW51bV9nZXRfdmFsdWUgKGVudW1fY2xhc3MsIG1ldGhvZCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodmlkZW9mbGlwLCAiQ2hhbmdpbmcgbWV0aG9kIGZyb20gJXMgdG8gJXMiLAotICAgICAgICBhY3RpdmVfbWV0aG9kX2VudW0gPyBhY3RpdmVfbWV0aG9kX2VudW0tPnZhbHVlX25pY2sgOiAiKG5pbCkiLAotICAgICAgICBtZXRob2RfZW51bSA/IG1ldGhvZF9lbnVtLT52YWx1ZV9uaWNrIDogIihuaWwpIik7Ci0gICAgZ190eXBlX2NsYXNzX3VucmVmIChlbnVtX2NsYXNzKTsKLQotICAgIHZpZGVvZmxpcC0+YWN0aXZlX21ldGhvZCA9IG1ldGhvZDsKLQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh2aWRlb2ZsaXApOwotCi0gICAgZ3N0X2Jhc2VfdHJhbnNmb3JtX3NldF9wYXNzdGhyb3VnaCAoYnRyYW5zLAotICAgICAgICBtZXRob2QgPT0gR1NUX1ZJREVPX09SSUVOVEFUSU9OX0lERU5USVRZKTsKLSAgICBnc3RfYmFzZV90cmFuc2Zvcm1fcmVjb25maWd1cmVfc3JjIChidHJhbnMpOwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh2aWRlb2ZsaXApOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fZmxpcF9iZWZvcmVfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGluKQotewotICBHc3RWaWRlb0ZsaXAgKnZpZGVvZmxpcCA9IEdTVF9WSURFT19GTElQICh0cmFucyk7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHN0cmVhbV90aW1lOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbik7Ci0gIHN0cmVhbV90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmdHJhbnMtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2aWRlb2ZsaXAsICJzeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtX3RpbWUpKQotICAgIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHZpZGVvZmxpcCksIHN0cmVhbV90aW1lKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92aWRlb19mbGlwX3RyYW5zZm9ybV9mcmFtZSAoR3N0VmlkZW9GaWx0ZXIgKiB2ZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR0VudW1DbGFzcyAqZW51bV9jbGFzczsKLSAgR0VudW1WYWx1ZSAqYWN0aXZlX21ldGhvZF9lbnVtOwotICBHc3RWaWRlb0ZsaXAgKnZpZGVvZmxpcCA9IEdTVF9WSURFT19GTElQICh2ZmlsdGVyKTsKLQotICBpZiAoR19VTkxJS0VMWSAodmlkZW9mbGlwLT5wcm9jZXNzID09IE5VTEwpKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgZW51bV9jbGFzcyA9IGdfdHlwZV9jbGFzc19yZWYgKEdTVF9UWVBFX1ZJREVPX09SSUVOVEFUSU9OX01FVEhPRCk7Ci0gIGFjdGl2ZV9tZXRob2RfZW51bSA9IGdfZW51bV9nZXRfdmFsdWUgKGVudW1fY2xhc3MsIHZpZGVvZmxpcC0+YWN0aXZlX21ldGhvZCk7Ci0gIEdTVF9MT0dfT0JKRUNUICh2aWRlb2ZsaXAsICJ2aWRlb2ZsaXA6IGZsaXBwaW5nICglcykiLAotICAgICAgYWN0aXZlX21ldGhvZF9lbnVtID8gYWN0aXZlX21ldGhvZF9lbnVtLT52YWx1ZV9uaWNrIDogIihuaWwpIik7Ci0gIGdfdHlwZV9jbGFzc191bnJlZiAoZW51bV9jbGFzcyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLICh2aWRlb2ZsaXApOwotICB2aWRlb2ZsaXAtPnByb2Nlc3MgKHZpZGVvZmxpcCwgb3V0X2ZyYW1lLCBpbl9mcmFtZSk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLICh2aWRlb2ZsaXApOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotbm90X25lZ290aWF0ZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUICh2aWRlb2ZsaXAsICJOb3QgbmVnb3RpYXRlZCB5ZXQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9fZmxpcF9zcmNfZXZlbnQgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0VmlkZW9GbGlwICp2ZiA9IEdTVF9WSURFT19GTElQICh0cmFucyk7Ci0gIGdkb3VibGUgbmV3X3gsIG5ld195LCB4LCB5OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RWaWRlb0luZm8gKm91dF9pbmZvID0gJkdTVF9WSURFT19GSUxURVIgKHRyYW5zKS0+b3V0X2luZm87Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodmYsICJoYW5kbGluZyAlcyBldmVudCIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKLSAgICAgIGV2ZW50ID0KLSAgICAgICAgICBHU1RfRVZFTlQgKGdzdF9taW5pX29iamVjdF9tYWtlX3dyaXRhYmxlIChHU1RfTUlOSV9PQkpFQ1QgKGV2ZW50KSkpOwotCi0gICAgICBzdHJ1Y3R1cmUgPSAoR3N0U3RydWN0dXJlICopIGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlIChzdHJ1Y3R1cmUsICJwb2ludGVyX3giLCAmeCkgJiYKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHN0cnVjdHVyZSwgInBvaW50ZXJfeSIsICZ5KSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh2ZiwgImNvbnZlcnRpbmcgJWZ4JWYiLCB4LCB5KTsKLSAgICAgICAgc3dpdGNoICh2Zi0+YWN0aXZlX21ldGhvZCkgewotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzkwUjoKLSAgICAgICAgICAgIG5ld194ID0geTsKLSAgICAgICAgICAgIG5ld195ID0gb3V0X2luZm8tPndpZHRoIC0geDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzkwTDoKLSAgICAgICAgICAgIG5ld194ID0gb3V0X2luZm8tPmhlaWdodCAtIHk7Ci0gICAgICAgICAgICBuZXdfeSA9IHg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VUl9MTDoKLSAgICAgICAgICAgIG5ld194ID0gb3V0X2luZm8tPmhlaWdodCAtIHk7Ci0gICAgICAgICAgICBuZXdfeSA9IG91dF9pbmZvLT53aWR0aCAtIHg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9VTF9MUjoKLSAgICAgICAgICAgIG5ld194ID0geTsKLSAgICAgICAgICAgIG5ld195ID0geDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzE4MDoKLSAgICAgICAgICAgIG5ld194ID0gb3V0X2luZm8tPndpZHRoIC0geDsKLSAgICAgICAgICAgIG5ld195ID0gb3V0X2luZm8tPmhlaWdodCAtIHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdTVF9WSURFT19PUklFTlRBVElPTl9IT1JJWjoKLSAgICAgICAgICAgIG5ld194ID0gb3V0X2luZm8tPndpZHRoIC0geDsKLSAgICAgICAgICAgIG5ld195ID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR1NUX1ZJREVPX09SSUVOVEFUSU9OX1ZFUlQ6Ci0gICAgICAgICAgICBuZXdfeCA9IHg7Ci0gICAgICAgICAgICBuZXdfeSA9IG91dF9pbmZvLT5oZWlnaHQgLSB5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG5ld194ID0geDsKLSAgICAgICAgICAgIG5ld195ID0geTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHZmLCAidG8gJWZ4JWYiLCBuZXdfeCwgbmV3X3kpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLCAicG9pbnRlcl94IiwgR19UWVBFX0RPVUJMRSwgbmV3X3gsCi0gICAgICAgICAgICAicG9pbnRlcl95IiwgR19UWVBFX0RPVUJMRSwgbmV3X3ksIE5VTEwpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zcmNfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9fZmxpcF9zaW5rX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFZpZGVvRmxpcCAqdmYgPSBHU1RfVklERU9fRkxJUCAodHJhbnMpOwotICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotICBnY2hhciAqb3JpZW50YXRpb247Ci0gIGdib29sZWFuIHJldDsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2ZiwgImhhbmRsaW5nICVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9UQUc6Ci0gICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ2xpc3QpOwotCi0gICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ2xpc3QsICJpbWFnZS1vcmllbnRhdGlvbiIsICZvcmllbnRhdGlvbikpIHsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAgKCJyb3RhdGUtMCIsIG9yaWVudGF0aW9uKSkKLSAgICAgICAgICBnc3RfdmlkZW9fZmxpcF9zZXRfbWV0aG9kICh2ZiwgR1NUX1ZJREVPX09SSUVOVEFUSU9OX0lERU5USVRZLCBUUlVFKTsKLSAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMCAoInJvdGF0ZS05MCIsIG9yaWVudGF0aW9uKSkKLSAgICAgICAgICBnc3RfdmlkZW9fZmxpcF9zZXRfbWV0aG9kICh2ZiwgR1NUX1ZJREVPX09SSUVOVEFUSU9OXzkwUiwgVFJVRSk7Ci0gICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKCJyb3RhdGUtMTgwIiwgb3JpZW50YXRpb24pKQotICAgICAgICAgIGdzdF92aWRlb19mbGlwX3NldF9tZXRob2QgKHZmLCBHU1RfVklERU9fT1JJRU5UQVRJT05fMTgwLCBUUlVFKTsKLSAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMCAoInJvdGF0ZS0yNzAiLCBvcmllbnRhdGlvbikpCi0gICAgICAgICAgZ3N0X3ZpZGVvX2ZsaXBfc2V0X21ldGhvZCAodmYsIEdTVF9WSURFT19PUklFTlRBVElPTl85MEwsIFRSVUUpOwotICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwICgiZmxpcC1yb3RhdGUtMCIsIG9yaWVudGF0aW9uKSkKLSAgICAgICAgICBnc3RfdmlkZW9fZmxpcF9zZXRfbWV0aG9kICh2ZiwgR1NUX1ZJREVPX09SSUVOVEFUSU9OX0hPUklaLCBUUlVFKTsKLSAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMCAoImZsaXAtcm90YXRlLTkwIiwgb3JpZW50YXRpb24pKQotICAgICAgICAgIGdzdF92aWRlb19mbGlwX3NldF9tZXRob2QgKHZmLCBHU1RfVklERU9fT1JJRU5UQVRJT05fVUxfTFIsIFRSVUUpOwotICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwICgiZmxpcC1yb3RhdGUtMTgwIiwgb3JpZW50YXRpb24pKQotICAgICAgICAgIGdzdF92aWRlb19mbGlwX3NldF9tZXRob2QgKHZmLCBHU1RfVklERU9fT1JJRU5UQVRJT05fVkVSVCwgVFJVRSk7Ci0gICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAgKCJmbGlwLXJvdGF0ZS0yNzAiLCBvcmllbnRhdGlvbikpCi0gICAgICAgICAgZ3N0X3ZpZGVvX2ZsaXBfc2V0X21ldGhvZCAodmYsIEdTVF9WSURFT19PUklFTlRBVElPTl9VUl9MTCwgVFJVRSk7Ci0KLSAgICAgICAgZ19mcmVlIChvcmllbnRhdGlvbik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb19mbGlwX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWaWRlb0ZsaXAgKnZpZGVvZmxpcCA9IEdTVF9WSURFT19GTElQIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9NRVRIT0Q6Ci0gICAgY2FzZSBQUk9QX1ZJREVPX0RJUkVDVElPTjoKLSAgICAgIGdzdF92aWRlb19mbGlwX3NldF9tZXRob2QgKHZpZGVvZmxpcCwgZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpLCBGQUxTRSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9fZmxpcF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9GbGlwICp2aWRlb2ZsaXAgPSBHU1RfVklERU9fRkxJUCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfTUVUSE9EOgotICAgIGNhc2UgUFJPUF9WSURFT19ESVJFQ1RJT046Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgdmlkZW9mbGlwLT5tZXRob2QpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2ZsaXBfY2xhc3NfaW5pdCAoR3N0VmlkZW9GbGlwQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR3N0QmFzZVRyYW5zZm9ybUNsYXNzICp0cmFuc19jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgKnZmaWx0ZXJfY2xhc3MgPSAoR3N0VmlkZW9GaWx0ZXJDbGFzcyAqKSBrbGFzczsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAodmlkZW9fZmxpcF9kZWJ1ZywgInZpZGVvZmxpcCIsIDAsICJ2aWRlb2ZsaXAiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdmlkZW9fZmxpcF9zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF92aWRlb19mbGlwX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01FVEhPRCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibWV0aG9kIiwgIm1ldGhvZCIsCi0gICAgICAgICAgIm1ldGhvZCAoZGVwcmVjYXRlZCwgdXNlIHZpZGVvLWRpcmVjdGlvbiBpbnN0ZWFkKSIsCi0gICAgICAgICAgR1NUX1RZUEVfVklERU9fRkxJUF9NRVRIT0QsIFBST1BfTUVUSE9EX0RFRkFVTFQsCi0gICAgICAgICAgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1QgfAotICAgICAgICAgIEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3Nfb3ZlcnJpZGVfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVklERU9fRElSRUNUSU9OLAotICAgICAgInZpZGVvLWRpcmVjdGlvbiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJWaWRlbyBmbGlwcGVyIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L1ZpZGVvIiwKLSAgICAgICJGbGlwcyBhbmQgcm90YXRlcyB2aWRlbyIsICJEYXZpZCBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3RfdmlkZW9fZmxpcF9zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmZ3N0X3ZpZGVvX2ZsaXBfc3JjX3RlbXBsYXRlKTsKLQotICB0cmFuc19jbGFzcy0+dHJhbnNmb3JtX2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19mbGlwX3RyYW5zZm9ybV9jYXBzKTsKLSAgdHJhbnNfY2xhc3MtPmJlZm9yZV90cmFuc2Zvcm0gPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19mbGlwX2JlZm9yZV90cmFuc2Zvcm0pOwotICB0cmFuc19jbGFzcy0+c3JjX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19mbGlwX3NyY19ldmVudCk7Ci0gIHRyYW5zX2NsYXNzLT5zaW5rX2V2ZW50ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19mbGlwX3NpbmtfZXZlbnQpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnNldF9pbmZvID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb19mbGlwX3NldF9pbmZvKTsKLSAgdmZpbHRlcl9jbGFzcy0+dHJhbnNmb3JtX2ZyYW1lID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9fZmxpcF90cmFuc2Zvcm1fZnJhbWUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX2ZsaXBfaW5pdCAoR3N0VmlkZW9GbGlwICogdmlkZW9mbGlwKQotewotICAvKiBBVVRPIGlzIG5vdCB2YWxpZCBmb3IgYWN0aXZlIG1ldGhvZCwgdGhpcyBpcyBqdXN0IHRvIGVuc3VyZSB3ZSBzZXR1cCB0aGUKLSAgICogbWV0aG9kIGluIGdzdF92aWRlb19mbGlwX3NldF9tZXRob2QoKSAqLwotICB2aWRlb2ZsaXAtPmFjdGl2ZV9tZXRob2QgPSBHU1RfVklERU9fT1JJRU5UQVRJT05fQVVUTzsKLX0KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuaCBiL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb2ZsaXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZjYThlOS4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9mbGlwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WSURFT19GTElQX0hfXwotI2RlZmluZSBfX0dTVF9WSURFT19GTElQX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLS8qKgotICogR3N0VmlkZW9GbGlwTWV0aG9kOgotICogQEdTVF9WSURFT19GTElQX01FVEhPRF9JREVOVElUWTogSWRlbnRpdHkgKG5vIHJvdGF0aW9uKQotICogQEdTVF9WSURFT19GTElQX01FVEhPRF85MFI6IFJvdGF0ZSBjbG9ja3dpc2UgOTAgZGVncmVlcwotICogQEdTVF9WSURFT19GTElQX01FVEhPRF8xODA6IFJvdGF0ZSAxODAgZGVncmVlcwotICogQEdTVF9WSURFT19GTElQX01FVEhPRF85MEw6IFJvdGF0ZSBjb3VudGVyLWNsb2Nrd2lzZSA5MCBkZWdyZWVzCi0gKiBAR1NUX1ZJREVPX0ZMSVBfTUVUSE9EX0hPUklaOiBGbGlwIGhvcml6b250YWxseQotICogQEdTVF9WSURFT19GTElQX01FVEhPRF9WRVJUOiBGbGlwIHZlcnRpY2FsbHkKLSAqIEBHU1RfVklERU9fRkxJUF9NRVRIT0RfVFJBTlM6IEZsaXAgYWNyb3NzIHVwcGVyIGxlZnQvbG93ZXIgcmlnaHQgZGlhZ29uYWwKLSAqIEBHU1RfVklERU9fRkxJUF9NRVRIT0RfT1RIRVI6IEZsaXAgYWNyb3NzIHVwcGVyIHJpZ2h0L2xvd2VyIGxlZnQgZGlhZ29uYWwKLSAqIEBHU1RfVklERU9fRkxJUF9NRVRIT0RfQVVUTzogU2VsZWN0IGZsaXAgbWV0aG9kIGJhc2VkIG9uIGltYWdlLW9yaWVudGF0aW9uIHRhZwotICoKLSAqIFRoZSBkaWZmZXJlbnQgZmxpcCBtZXRob2RzLgotICovCi10eXBlZGVmIGVudW0gewotICBHU1RfVklERU9fRkxJUF9NRVRIT0RfSURFTlRJVFksCi0gIEdTVF9WSURFT19GTElQX01FVEhPRF85MFIsCi0gIEdTVF9WSURFT19GTElQX01FVEhPRF8xODAsCi0gIEdTVF9WSURFT19GTElQX01FVEhPRF85MEwsCi0gIEdTVF9WSURFT19GTElQX01FVEhPRF9IT1JJWiwKLSAgR1NUX1ZJREVPX0ZMSVBfTUVUSE9EX1ZFUlQsCi0gIEdTVF9WSURFT19GTElQX01FVEhPRF9UUkFOUywKLSAgR1NUX1ZJREVPX0ZMSVBfTUVUSE9EX09USEVSLAotICBHU1RfVklERU9fRkxJUF9NRVRIT0RfQVVUTwotfSBHc3RWaWRlb0ZsaXBNZXRob2Q7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfVklERU9fRkxJUCBcCi0gIChnc3RfdmlkZW9fZmxpcF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVklERU9fRkxJUChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1ZJREVPX0ZMSVAsR3N0VmlkZW9GbGlwKSkKLSNkZWZpbmUgR1NUX1ZJREVPX0ZMSVBfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVklERU9fRkxJUCxHc3RWaWRlb0ZsaXBDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WSURFT19GTElQKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVklERU9fRkxJUCkpCi0jZGVmaW5lIEdTVF9JU19WSURFT19GTElQX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1ZJREVPX0ZMSVApKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9GbGlwIEdzdFZpZGVvRmxpcDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0ZsaXBDbGFzcyBHc3RWaWRlb0ZsaXBDbGFzczsKLQotLyoqCi0gKiBHc3RWaWRlb0ZsaXA6Ci0gKgotICogT3BhcXVlIGRhdGFzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0VmlkZW9GbGlwIHsKLSAgR3N0VmlkZW9GaWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgR3N0VmlkZW9PcmllbnRhdGlvbk1ldGhvZCBtZXRob2Q7Ci0gIEdzdFZpZGVvT3JpZW50YXRpb25NZXRob2QgdGFnX21ldGhvZDsKLSAgR3N0VmlkZW9PcmllbnRhdGlvbk1ldGhvZCBhY3RpdmVfbWV0aG9kOwotICB2b2lkICgqcHJvY2VzcykgKEdzdFZpZGVvRmxpcCAqdmlkZW9mbGlwLCBHc3RWaWRlb0ZyYW1lICpkZXN0LCBjb25zdCBHc3RWaWRlb0ZyYW1lICpzcmMpOwotfTsKLQotc3RydWN0IF9Hc3RWaWRlb0ZsaXBDbGFzcyB7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3ZpZGVvX2ZsaXBfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVklERU9fRkxJUF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb21lZGlhbi5jIGIvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvbWVkaWFuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MmNkMjMuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvbWVkaWFuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJnc3R2aWRlb21lZGlhbi5oIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9fbWVkaWFuX3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEk0MjAsIFlWMTIgfSIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb19tZWRpYW5fc2lua19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgSTQyMCwgWVYxMiB9IikpCi0gICAgKTsKLQotCi0vKiBNZWRpYW4gc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICAvKiBGSUxMIE1FICovCi0gIExBU1RfU0lHTkFMCi19OwotCi0jZGVmaW5lIERFRkFVTFRfRklMVEVSU0laRSAgIDUKLSNkZWZpbmUgREVGQVVMVF9MVU1fT05MWSAgICAgVFJVRQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfRklMVEVSU0laRSwKLSAgUFJPUF9MVU1fT05MWQotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9WSURFT19NRURJQU5fU0laRSAoZ3N0X3ZpZGVvX21lZGlhbl9zaXplX2dldF90eXBlKCkpCi0KLXN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZpZGVvX21lZGlhbl9zaXplc1tdID0gewotICB7R1NUX1ZJREVPX01FRElBTl9TSVpFXzUsICJNZWRpYW4gb2YgNSBuZWlnaGJvdXIgcGl4ZWxzIiwgIjUifSwKLSAge0dTVF9WSURFT19NRURJQU5fU0laRV85LCAiTWVkaWFuIG9mIDkgbmVpZ2hib3VyIHBpeGVscyIsICI5In0sCi0gIHswLCBOVUxMLCBOVUxMfSwKLX07Ci0KLXN0YXRpYyBHVHlwZQotZ3N0X3ZpZGVvX21lZGlhbl9zaXplX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdmlkZW9fbWVkaWFuX3NpemVfdHlwZSA9IDA7Ci0KLSAgaWYgKCF2aWRlb19tZWRpYW5fc2l6ZV90eXBlKSB7Ci0gICAgdmlkZW9fbWVkaWFuX3NpemVfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMgKCJHc3RWaWRlb01lZGlhblNpemUiLAotICAgICAgICB2aWRlb19tZWRpYW5fc2l6ZXMpOwotICB9Ci0gIHJldHVybiB2aWRlb19tZWRpYW5fc2l6ZV90eXBlOwotfQotCi0jZGVmaW5lIGdzdF92aWRlb19tZWRpYW5fcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0VmlkZW9NZWRpYW4sIGdzdF92aWRlb19tZWRpYW4sIEdTVF9UWVBFX1ZJREVPX0ZJTFRFUik7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92aWRlb19tZWRpYW5fdHJhbnNmb3JtX2ZyYW1lIChHc3RWaWRlb0ZpbHRlciAqIGZpbHRlciwKLSAgICBHc3RWaWRlb0ZyYW1lICogaW5fZnJhbWUsIEdzdFZpZGVvRnJhbWUgKiBvdXRfZnJhbWUpOwotCi1zdGF0aWMgdm9pZCBnc3RfdmlkZW9fbWVkaWFuX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF92aWRlb19tZWRpYW5fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX21lZGlhbl9jbGFzc19pbml0IChHc3RWaWRlb01lZGlhbkNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RWaWRlb0ZpbHRlckNsYXNzICp2ZmlsdGVyX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgdmZpbHRlcl9jbGFzcyA9IChHc3RWaWRlb0ZpbHRlckNsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF92aWRlb19tZWRpYW5fc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdmlkZW9fbWVkaWFuX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChHX09CSkVDVF9DTEFTUyAoa2xhc3MpLCBQUk9QX0ZJTFRFUlNJWkUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImZpbHRlcnNpemUiLCAiRmlsdGVyc2l6ZSIsICJUaGUgc2l6ZSBvZiB0aGUgZmlsdGVyIiwKLSAgICAgICAgICBHU1RfVFlQRV9WSURFT19NRURJQU5fU0laRSwgREVGQVVMVF9GSUxURVJTSVpFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKEdfT0JKRUNUX0NMQVNTIChrbGFzcyksIFBST1BfTFVNX09OTFksCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImx1bS1vbmx5IiwgIkx1bSBPbmx5IiwgIk9ubHkgYXBwbHkgZmlsdGVyIG9uICIKLSAgICAgICAgICAibHVtaW5hbmNlIiwgREVGQVVMVF9MVU1fT05MWSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZ2aWRlb19tZWRpYW5fc2lua19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmdmlkZW9fbWVkaWFuX3NyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIk1lZGlhbiBlZmZlY3QiLAotICAgICAgIkZpbHRlci9FZmZlY3QvVmlkZW8iLCAiQXBwbHkgYSBtZWRpYW4gZmlsdGVyIHRvIGFuIGltYWdlIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotCi0gIHZmaWx0ZXJfY2xhc3MtPnRyYW5zZm9ybV9mcmFtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvX21lZGlhbl90cmFuc2Zvcm1fZnJhbWUpOwotfQotCi12b2lkCi1nc3RfdmlkZW9fbWVkaWFuX2luaXQgKEdzdFZpZGVvTWVkaWFuICogbWVkaWFuKQotewotICBtZWRpYW4tPmZpbHRlcnNpemUgPSBERUZBVUxUX0ZJTFRFUlNJWkU7Ci0gIG1lZGlhbi0+bHVtX29ubHkgPSBERUZBVUxUX0xVTV9PTkxZOwotfQotCi0jZGVmaW5lIFBJWF9TT1JUKGEsYikgeyBpZiAoKGEpPihiKSkgUElYX1NXQVAoKGEpLChiKSk7IH0KLSNkZWZpbmUgUElYX1NXQVAoYSxiKSB7IHVuc2lnbmVkIGNoYXIgdGVtcD0oYSk7KGEpPShiKTsoYik9dGVtcDsgfQotCi1zdGF0aWMgdm9pZAotbWVkaWFuXzUgKGd1aW50OCAqIGRlc3QsIGdpbnQgZHN0cmlkZSwgY29uc3QgZ3VpbnQ4ICogc3JjLCBnaW50IHNzdHJpZGUsCi0gICAgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQpCi17Ci0gIHVuc2lnbmVkIGNoYXIgcFs1XTsKLSAgaW50IGksIGosIGs7Ci0KLSAgLyogY29weSB0aGUgdG9wIGFuZCBib3R0b20gcm93cyBpbnRvIHRoZSByZXN1bHQgYXJyYXkgKi8KLSAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKLSAgICBkZXN0W2ldID0gc3JjW2ldOwotICAgIGRlc3RbKGhlaWdodCAtIDEpICogZHN0cmlkZSArIGldID0gc3JjWyhoZWlnaHQgLSAxKSAqIHNzdHJpZGUgKyBpXTsKLSAgfQotCi0gIC8qIHByb2Nlc3MgdGhlIGludGVyaW9yIHBpeGVscyAqLwotICBmb3IgKGsgPSAyOyBrIDwgaGVpZ2h0OyBrKyspIHsKLSAgICBkZXN0ICs9IGRzdHJpZGU7Ci0gICAgc3JjICs9IHNzdHJpZGU7Ci0KLSAgICBkZXN0WzBdID0gc3JjWzBdOwotICAgIGZvciAoaiA9IDIsIGkgPSAxOyBqIDwgd2lkdGg7IGorKywgaSsrKSB7Ci0gICAgICBwWzBdID0gc3JjW2kgLSBzc3RyaWRlXTsKLSAgICAgIHBbMV0gPSBzcmNbaSAtIDFdOwotICAgICAgcFsyXSA9IHNyY1tpXTsKLSAgICAgIHBbM10gPSBzcmNbaSArIDFdOwotICAgICAgcFs0XSA9IHNyY1tpICsgc3N0cmlkZV07Ci0gICAgICBQSVhfU09SVCAocFswXSwgcFsxXSk7Ci0gICAgICBQSVhfU09SVCAocFszXSwgcFs0XSk7Ci0gICAgICBQSVhfU09SVCAocFswXSwgcFszXSk7Ci0gICAgICBQSVhfU09SVCAocFsxXSwgcFs0XSk7Ci0gICAgICBQSVhfU09SVCAocFsxXSwgcFsyXSk7Ci0gICAgICBQSVhfU09SVCAocFsyXSwgcFszXSk7Ci0gICAgICBQSVhfU09SVCAocFsxXSwgcFsyXSk7Ci0gICAgICBkZXN0W2ldID0gcFsyXTsKLSAgICB9Ci0gICAgZGVzdFtpXSA9IHNyY1tpXTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotbWVkaWFuXzkgKGd1aW50OCAqIGRlc3QsIGdpbnQgZHN0cmlkZSwgY29uc3QgZ3VpbnQ4ICogc3JjLCBnaW50IHNzdHJpZGUsCi0gICAgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQpCi17Ci0gIHVuc2lnbmVkIGNoYXIgcFs5XTsKLSAgaW50IGksIGosIGs7Ci0KLSAgLypjb3B5IHRoZSB0b3AgYW5kIGJvdHRvbSByb3dzIGludG8gdGhlIHJlc3VsdCBhcnJheSAqLwotICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgewotICAgIGRlc3RbaV0gPSBzcmNbaV07Ci0gICAgZGVzdFsoaGVpZ2h0IC0gMSkgKiBkc3RyaWRlICsgaV0gPSBzcmNbKGhlaWdodCAtIDEpICogc3N0cmlkZSArIGldOwotICB9Ci0gIC8qIHByb2Nlc3MgdGhlIGludGVyaW9yIHBpeGVscyAqLwotICBmb3IgKGsgPSAyOyBrIDwgaGVpZ2h0OyBrKyspIHsKLSAgICBkZXN0ICs9IGRzdHJpZGU7Ci0gICAgc3JjICs9IHNzdHJpZGU7Ci0KLSAgICBkZXN0WzBdID0gc3JjWzBdOwotICAgIGZvciAoaiA9IDIsIGkgPSAxOyBqIDwgd2lkdGg7IGorKywgaSsrKSB7Ci0gICAgICBwWzBdID0gc3JjW2kgLSBzc3RyaWRlIC0gMV07Ci0gICAgICBwWzFdID0gc3JjW2kgLSBzc3RyaWRlXTsKLSAgICAgIHBbMl0gPSBzcmNbaSAtIHNzdHJpZGUgKyAxXTsKLSAgICAgIHBbM10gPSBzcmNbaSAtIDFdOwotICAgICAgcFs0XSA9IHNyY1tpXTsKLSAgICAgIHBbNV0gPSBzcmNbaSArIDFdOwotICAgICAgcFs2XSA9IHNyY1tpICsgc3N0cmlkZSAtIDFdOwotICAgICAgcFs3XSA9IHNyY1tpICsgc3N0cmlkZV07Ci0gICAgICBwWzhdID0gc3JjW2kgKyBzc3RyaWRlICsgMV07Ci0gICAgICBQSVhfU09SVCAocFsxXSwgcFsyXSk7Ci0gICAgICBQSVhfU09SVCAocFs0XSwgcFs1XSk7Ci0gICAgICBQSVhfU09SVCAocFs3XSwgcFs4XSk7Ci0gICAgICBQSVhfU09SVCAocFswXSwgcFsxXSk7Ci0gICAgICBQSVhfU09SVCAocFszXSwgcFs0XSk7Ci0gICAgICBQSVhfU09SVCAocFs2XSwgcFs3XSk7Ci0gICAgICBQSVhfU09SVCAocFsxXSwgcFsyXSk7Ci0gICAgICBQSVhfU09SVCAocFs0XSwgcFs1XSk7Ci0gICAgICBQSVhfU09SVCAocFs3XSwgcFs4XSk7Ci0gICAgICBQSVhfU09SVCAocFswXSwgcFszXSk7Ci0gICAgICBQSVhfU09SVCAocFs1XSwgcFs4XSk7Ci0gICAgICBQSVhfU09SVCAocFs0XSwgcFs3XSk7Ci0gICAgICBQSVhfU09SVCAocFszXSwgcFs2XSk7Ci0gICAgICBQSVhfU09SVCAocFsxXSwgcFs0XSk7Ci0gICAgICBQSVhfU09SVCAocFsyXSwgcFs1XSk7Ci0gICAgICBQSVhfU09SVCAocFs0XSwgcFs3XSk7Ci0gICAgICBQSVhfU09SVCAocFs0XSwgcFsyXSk7Ci0gICAgICBQSVhfU09SVCAocFs2XSwgcFs0XSk7Ci0gICAgICBQSVhfU09SVCAocFs0XSwgcFsyXSk7Ci0gICAgICBkZXN0W2ldID0gcFs0XTsKLSAgICB9Ci0gICAgZGVzdFtpXSA9IHNyY1tpXTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZpZGVvX21lZGlhbl90cmFuc2Zvcm1fZnJhbWUgKEdzdFZpZGVvRmlsdGVyICogZmlsdGVyLAotICAgIEdzdFZpZGVvRnJhbWUgKiBpbl9mcmFtZSwgR3N0VmlkZW9GcmFtZSAqIG91dF9mcmFtZSkKLXsKLSAgR3N0VmlkZW9NZWRpYW4gKm1lZGlhbiA9IEdTVF9WSURFT19NRURJQU4gKGZpbHRlcik7Ci0KLSAgaWYgKG1lZGlhbi0+ZmlsdGVyc2l6ZSA9PSA1KSB7Ci0gICAgbWVkaWFuXzUgKEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDApLAotICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChvdXRfZnJhbWUsIDApLAotICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDApLAotICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMCksCi0gICAgICAgIEdTVF9WSURFT19GUkFNRV9XSURUSCAoaW5fZnJhbWUpLCBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChpbl9mcmFtZSkpOwotCi0gICAgaWYgKG1lZGlhbi0+bHVtX29ubHkpIHsKLSAgICAgIGdzdF92aWRlb19mcmFtZV9jb3B5X3BsYW5lIChvdXRfZnJhbWUsIGluX2ZyYW1lLCAxKTsKLSAgICAgIGdzdF92aWRlb19mcmFtZV9jb3B5X3BsYW5lIChvdXRfZnJhbWUsIGluX2ZyYW1lLCAyKTsKLSAgICB9IGVsc2UgewotICAgICAgbWVkaWFuXzUgKEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDEpLAotICAgICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMSksCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAxKSwKLSAgICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMSksCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSkgLyAyLAotICAgICAgICAgIEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKSAvIDIpOwotICAgICAgbWVkaWFuXzUgKEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChvdXRfZnJhbWUsIDIpLAotICAgICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMiksCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGluX2ZyYW1lLCAyKSwKLSAgICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFIChpbl9mcmFtZSwgMiksCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSkgLyAyLAotICAgICAgICAgIEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKSAvIDIpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBtZWRpYW5fOSAoR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMCksCi0gICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKG91dF9mcmFtZSwgMCksCi0gICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChpbl9mcmFtZSwgMCksCi0gICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAwKSwKLSAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChpbl9mcmFtZSksIEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGluX2ZyYW1lKSk7Ci0KLSAgICBpZiAobWVkaWFuLT5sdW1fb25seSkgewotICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX2NvcHlfcGxhbmUgKG91dF9mcmFtZSwgaW5fZnJhbWUsIDEpOwotICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX2NvcHlfcGxhbmUgKG91dF9mcmFtZSwgaW5fZnJhbWUsIDIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtZWRpYW5fOSAoR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMSksCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAob3V0X2ZyYW1lLCAxKSwKLSAgICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDEpLAotICAgICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAxKSwKLSAgICAgICAgICBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKSAvIDIsCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpIC8gMik7Ci0gICAgICBtZWRpYW5fOSAoR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKG91dF9mcmFtZSwgMiksCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAob3V0X2ZyYW1lLCAyKSwKLSAgICAgICAgICBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoaW5fZnJhbWUsIDIpLAotICAgICAgICAgIEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUgKGluX2ZyYW1lLCAyKSwKLSAgICAgICAgICBHU1RfVklERU9fRlJBTUVfV0lEVEggKGluX2ZyYW1lKSAvIDIsCi0gICAgICAgICAgR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoaW5fZnJhbWUpIC8gMik7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX21lZGlhbl9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9NZWRpYW4gKm1lZGlhbjsKLQotICBtZWRpYW4gPSBHU1RfVklERU9fTUVESUFOIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GSUxURVJTSVpFOgotICAgICAgbWVkaWFuLT5maWx0ZXJzaXplID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0xVTV9PTkxZOgotICAgICAgbWVkaWFuLT5sdW1fb25seSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvX21lZGlhbl9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9NZWRpYW4gKm1lZGlhbjsKLQotICBtZWRpYW4gPSBHU1RfVklERU9fTUVESUFOIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9GSUxURVJTSVpFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIG1lZGlhbi0+ZmlsdGVyc2l6ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTFVNX09OTFk6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgbWVkaWFuLT5sdW1fb25seSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19CmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW9tZWRpYW4uaCBiL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb21lZGlhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODc3NjcyLi4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb2ZpbHRlci9nc3R2aWRlb21lZGlhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9WSURFT19NRURJQU5fSF9fCi0jZGVmaW5lIF9fR1NUX1ZJREVPX01FRElBTl9IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVklERU9fTUVESUFOIFwKLSAgKGdzdF92aWRlb19tZWRpYW5fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1ZJREVPX01FRElBTihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1ZJREVPX01FRElBTixHc3RWaWRlb01lZGlhbikpCi0jZGVmaW5lIEdTVF9WSURFT19NRURJQU5fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVklERU9fTUVESUFOLEdzdFZpZGVvTWVkaWFuQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVklERU9fTUVESUFOKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVklERU9fTUVESUFOKSkKLSNkZWZpbmUgR1NUX0lTX1ZJREVPX01FRElBTl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WSURFT19NRURJQU4pKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9NZWRpYW4gR3N0VmlkZW9NZWRpYW47Ci10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9NZWRpYW5DbGFzcyBHc3RWaWRlb01lZGlhbkNsYXNzOwotCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX1ZJREVPX01FRElBTl9TSVpFXzUgPSA1LAotICBHU1RfVklERU9fTUVESUFOX1NJWkVfOSA9IDkKLX0gR3N0VmlkZW9NZWRpYW5TaXplOwotCi1zdHJ1Y3QgX0dzdFZpZGVvTWVkaWFuIHsKLSAgR3N0VmlkZW9GaWx0ZXIgcGFyZW50OwotCi0gIEdzdFZpZGVvTWVkaWFuU2l6ZSBmaWx0ZXJzaXplOwotICBnYm9vbGVhbiBsdW1fb25seTsKLX07Ci0KLXN0cnVjdCBfR3N0VmlkZW9NZWRpYW5DbGFzcyB7Ci0gIEdzdFZpZGVvRmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3ZpZGVvX21lZGlhbl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9WSURFT19NRURJQU5fSF9fICovCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW90ZW1wbGF0ZS5jIGIvZ3N0L3ZpZGVvZmlsdGVyL2dzdHZpZGVvdGVtcGxhdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYwNTI2YS4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9maWx0ZXIvZ3N0dmlkZW90ZW1wbGF0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDM+IERhdmlkIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgd2FzIChwcm9iYWJseSkgZ2VuZXJhdGVkIGZyb20KLSAqICRJZCQKLSAqIGFuZAotICogTUFLRUZJTFRFUlZFUlNJT04KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0dmlkZW9maWx0ZXIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBHU1RfVFlQRV9WSURFT1RFTVBMQVRFIFwKLSAgKGdzdF92aWRlb3RlbXBsYXRlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WSURFT1RFTVBMQVRFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfVklERU9URU1QTEFURSxHc3RWaWRlb3RlbXBsYXRlKSkKLSNkZWZpbmUgR1NUX1ZJREVPVEVNUExBVEVfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVklERU9URU1QTEFURSxHc3RWaWRlb3RlbXBsYXRlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVklERU9URU1QTEFURShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1ZJREVPVEVNUExBVEUpKQotI2RlZmluZSBHU1RfSVNfVklERU9URU1QTEFURV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WSURFT1RFTVBMQVRFKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvdGVtcGxhdGUgR3N0VmlkZW90ZW1wbGF0ZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb3RlbXBsYXRlQ2xhc3MgR3N0VmlkZW90ZW1wbGF0ZUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFZpZGVvdGVtcGxhdGUKLXsKLSAgR3N0VmlkZW9maWx0ZXIgdmlkZW9maWx0ZXI7Ci0KLX07Ci0KLXN0cnVjdCBfR3N0VmlkZW90ZW1wbGF0ZUNsYXNzCi17Ci0gIEdzdFZpZGVvZmlsdGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotCi0vKiBHc3RWaWRlb3RlbXBsYXRlIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBQUk9QXzAKLSAgICAgIC8qIEZJTEwgTUUgKi8KLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF92aWRlb3RlbXBsYXRlX2Jhc2VfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcyk7Ci1zdGF0aWMgdm9pZCBnc3RfdmlkZW90ZW1wbGF0ZV9jbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzLAotICAgIGdwb2ludGVyIGNsYXNzX2RhdGEpOwotc3RhdGljIHZvaWQgZ3N0X3ZpZGVvdGVtcGxhdGVfaW5pdCAoR1R5cGVJbnN0YW5jZSAqIGluc3RhbmNlLCBncG9pbnRlciBnX2NsYXNzKTsKLQotc3RhdGljIHZvaWQgZ3N0X3ZpZGVvdGVtcGxhdGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3ZpZGVvdGVtcGxhdGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZCBnc3RfdmlkZW90ZW1wbGF0ZV9wbGFuYXI0MTEgKEdzdFZpZGVvZmlsdGVyICogdmlkZW9maWx0ZXIsCi0gICAgdm9pZCAqZGVzdCwgdm9pZCAqc3JjKTsKLXN0YXRpYyB2b2lkIGdzdF92aWRlb3RlbXBsYXRlX3NldHVwIChHc3RWaWRlb2ZpbHRlciAqIHZpZGVvZmlsdGVyKTsKLQotR1R5cGUKLWdzdF92aWRlb3RlbXBsYXRlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdmlkZW90ZW1wbGF0ZV90eXBlID0gMDsKLQotICBpZiAoIXZpZGVvdGVtcGxhdGVfdHlwZSkgewotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gdmlkZW90ZW1wbGF0ZV9pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RWaWRlb3RlbXBsYXRlQ2xhc3MpLAotICAgICAgZ3N0X3ZpZGVvdGVtcGxhdGVfYmFzZV9pbml0LAotICAgICAgTlVMTCwKLSAgICAgIGdzdF92aWRlb3RlbXBsYXRlX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0VmlkZW90ZW1wbGF0ZSksCi0gICAgICAwLAotICAgICAgZ3N0X3ZpZGVvdGVtcGxhdGVfaW5pdCwKLSAgICB9OwotCi0gICAgdmlkZW90ZW1wbGF0ZV90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfVklERU9GSUxURVIsCi0gICAgICAgICJHc3RWaWRlb3RlbXBsYXRlIiwgJnZpZGVvdGVtcGxhdGVfaW5mbywgMCk7Ci0gIH0KLSAgcmV0dXJuIHZpZGVvdGVtcGxhdGVfdHlwZTsKLX0KLQotc3RhdGljIGNvbnN0IEdzdFZpZGVvZmlsdGVyRm9ybWF0IGdzdF92aWRlb3RlbXBsYXRlX2Zvcm1hdHNbXSA9IHsKLSAgeyJJNDIwIiwgMTIsIGdzdF92aWRlb3RlbXBsYXRlX3BsYW5hcjQxMSx9LAotfTsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvdGVtcGxhdGVfYmFzZV9pbml0IChncG9pbnRlciBnX2NsYXNzKQotewotCi0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKTsKLSAgR3N0VmlkZW9maWx0ZXJDbGFzcyAqdmlkZW9maWx0ZXJfY2xhc3MgPSBHU1RfVklERU9GSUxURVJfQ0xBU1MgKGdfY2xhc3MpOwotICBpbnQgaTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiVmlkZW8gZmlsdGVyIHRlbXBsYXRlIiwKLSAgICAgICJGaWx0ZXIvRWZmZWN0L1ZpZGVvIiwKLSAgICAgICJUZW1wbGF0ZSBmb3IgYSB2aWRlbyBmaWx0ZXIiLCAiRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Iik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZ3N0X3ZpZGVvdGVtcGxhdGVfZm9ybWF0cyk7IGkrKykgewotICAgIGdzdF92aWRlb2ZpbHRlcl9jbGFzc19hZGRfZm9ybWF0ICh2aWRlb2ZpbHRlcl9jbGFzcywKLSAgICAgICAgZ3N0X3ZpZGVvdGVtcGxhdGVfZm9ybWF0cyArIGkpOwotICB9Ci0KLSAgZ3N0X3ZpZGVvZmlsdGVyX2NsYXNzX2FkZF9wYWRfdGVtcGxhdGVzIChHU1RfVklERU9GSUxURVJfQ0xBU1MgKGdfY2xhc3MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb3RlbXBsYXRlX2NsYXNzX2luaXQgKGdwb2ludGVyIGdfY2xhc3MsIGdwb2ludGVyIGNsYXNzX2RhdGEpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0VmlkZW9maWx0ZXJDbGFzcyAqdmlkZW9maWx0ZXJfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChnX2NsYXNzKTsKLSAgdmlkZW9maWx0ZXJfY2xhc3MgPSBHU1RfVklERU9GSUxURVJfQ0xBU1MgKGdfY2xhc3MpOwotCi0jaWYgMAotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX01FVEhPRCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibWV0aG9kIiwgIm1ldGhvZCIsICJtZXRob2QiLAotICAgICAgICAgIEdTVF9UWVBFX1ZJREVPVEVNUExBVEVfTUVUSE9ELCBHU1RfVklERU9URU1QTEFURV9NRVRIT0RfMSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSNlbmRpZgotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF92aWRlb3RlbXBsYXRlX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3ZpZGVvdGVtcGxhdGVfZ2V0X3Byb3BlcnR5OwotCi0gIHZpZGVvZmlsdGVyX2NsYXNzLT5zZXR1cCA9IGdzdF92aWRlb3RlbXBsYXRlX3NldHVwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvdGVtcGxhdGVfaW5pdCAoR1R5cGVJbnN0YW5jZSAqIGluc3RhbmNlLCBncG9pbnRlciBnX2NsYXNzKQotewotICBHc3RWaWRlb3RlbXBsYXRlICp2aWRlb3RlbXBsYXRlID0gR1NUX1ZJREVPVEVNUExBVEUgKGluc3RhbmNlKTsKLSAgR3N0VmlkZW9maWx0ZXIgKnZpZGVvZmlsdGVyOwotCi0gIEdTVF9ERUJVRyAoImdzdF92aWRlb3RlbXBsYXRlX2luaXQiKTsKLQotICB2aWRlb2ZpbHRlciA9IEdTVF9WSURFT0ZJTFRFUiAodmlkZW90ZW1wbGF0ZSk7Ci0KLSAgLyogZG8gc3R1ZmYgKi8KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb3RlbXBsYXRlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWaWRlb3RlbXBsYXRlICpzcmM7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1ZJREVPVEVNUExBVEUgKG9iamVjdCkpOwotICBzcmMgPSBHU1RfVklERU9URU1QTEFURSAob2JqZWN0KTsKLQotICBHU1RfREVCVUcgKCJnc3RfdmlkZW90ZW1wbGF0ZV9zZXRfcHJvcGVydHkiKTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0jaWYgMAotICAgIGNhc2UgUFJPUF9NRVRIT0Q6Ci0gICAgICBzcmMtPm1ldGhvZCA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW90ZW1wbGF0ZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLAotICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW90ZW1wbGF0ZSAqc3JjOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19WSURFT1RFTVBMQVRFIChvYmplY3QpKTsKLSAgc3JjID0gR1NUX1ZJREVPVEVNUExBVEUgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0jaWYgMAotICAgIGNhc2UgUFJPUF9NRVRIT0Q6Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgc3JjLT5tZXRob2QpOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2aWRlb3RlbXBsYXRlIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1ZJREVPVEVNUExBVEUpOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgdmlkZW90ZW1wbGF0ZSwKLSAgICAiVGVtcGxhdGUgZm9yIGEgdmlkZW8gZmlsdGVyIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKLQotICAgICBzdGF0aWMgdm9pZCBnc3RfdmlkZW90ZW1wbGF0ZV9zZXR1cCAoR3N0VmlkZW9maWx0ZXIgKiB2aWRlb2ZpbHRlcikKLXsKLSAgR3N0VmlkZW90ZW1wbGF0ZSAqdmlkZW90ZW1wbGF0ZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVklERU9URU1QTEFURSAodmlkZW9maWx0ZXIpKTsKLSAgdmlkZW90ZW1wbGF0ZSA9IEdTVF9WSURFT1RFTVBMQVRFICh2aWRlb2ZpbHRlcik7Ci0KLSAgLyogaWYgYW55IHNldHVwIG5lZWRzIHRvIGJlIGRvbmUsIGRvIGl0IGhlcmUgKi8KLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvdGVtcGxhdGVfcGxhbmFyNDExIChHc3RWaWRlb2ZpbHRlciAqIHZpZGVvZmlsdGVyLAotICAgIHZvaWQgKmRlc3QsIHZvaWQgKnNyYykKLXsKLSAgR3N0VmlkZW90ZW1wbGF0ZSAqdmlkZW90ZW1wbGF0ZTsKLSAgaW50IHdpZHRoID0gZ3N0X3ZpZGVvZmlsdGVyX2dldF9pbnB1dF93aWR0aCAodmlkZW9maWx0ZXIpOwotICBpbnQgaGVpZ2h0ID0gZ3N0X3ZpZGVvZmlsdGVyX2dldF9pbnB1dF9oZWlnaHQgKHZpZGVvZmlsdGVyKTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVklERU9URU1QTEFURSAodmlkZW9maWx0ZXIpKTsKLSAgdmlkZW90ZW1wbGF0ZSA9IEdTVF9WSURFT1RFTVBMQVRFICh2aWRlb2ZpbHRlcik7Ci0KLSAgLyogZG8gc29tZXRoaW5nIGludGVyZXN0aW5nIGhlcmUuICBUaGlzIHNpbXBseSBjb3BpZXMgdGhlIHNvdXJjZQotICAgKiB0byB0aGUgZGVzdGluYXRpb24uICovCi0gIG1lbWNweSAoZGVzdCwgc3JjLCB3aWR0aCAqIGhlaWdodCArICh3aWR0aCAvIDIpICogKGhlaWdodCAvIDIpICogMik7Ci19CmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvbWFrZV9maWx0ZXIgYi9nc3QvdmlkZW9maWx0ZXIvbWFrZV9maWx0ZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY5MmQwZDUuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvZmlsdGVyL21ha2VfZmlsdGVyCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyEvYmluL3NoCi0KLUxBTkc9QwotZXhwb3J0IExBTkcKLUxDX0NPTExBVEU9QwotZXhwb3J0IExDX0NPTExBVEUKLQotVGVtcGxhdGU9JDE7Ci1zcmNmaWxlPSQyOwotCi1pZiB0ZXN0IHgiJDEiID0geCA7IHRoZW4KLQllY2hvICIkMCBPYmplY3RuYW1lIFtzcmNmaWxlXVxuIjsKLQllY2hvICIgIGNyZWF0ZXMgZ3N0b2JqZWN0bmFtZS57YyxofSBpbXBsZW1lbnRpbmcgR3N0T2JqZWN0bmFtZSxcbiI7Ci0JZWNobyAiICBzdWJjbGFzc2luZyBHc3RWaWRlb2ZpbHRlci5cbiI7Ci0JZXhpdCAxOwotZmkKLQotaWYgdGVzdCB4IiQyIiA9IHggOyB0aGVuCi0Jc3JjZmlsZT0iZ3N0dmlkZW90ZW1wbGF0ZS5jIgotZmkKLQotaWQ9YGVjaG8gJyRJZCQnIHwgc2VkIFwKLQktZSAncy9cJElbZF06IFwoW14kXSpcKVwkL1wxL2cnYAotZWNobyAkaWQKLQotVEVNUExBVEU9YGVjaG8gJFRlbXBsYXRlIHwgdHIgWzpsb3dlcjpdIFs6dXBwZXI6XWAKLXRlbXBsYXRlPWBlY2hvICRUZW1wbGF0ZSB8IHRyIFs6dXBwZXI6XSBbOmxvd2VyOl1gCi0KLSMgcmVtZW1iZXIgdG8gYnJlYWsgdXAgdGhlIElkOiBpbiB0aGUgbGluZSBiZWxvdwotc2VkIFwKLQktZSAncy9nc3R2aWRlb3RlbXBsYXRlXC5jL1NPVVJDRUZJTEUvZycgXAotCS1lICJzL1ZpZGVvdGVtcGxhdGUvJFRlbXBsYXRlL2ciIFwKLQktZSAicy92aWRlb3RlbXBsYXRlLyR0ZW1wbGF0ZS9nIiBcCi0JLWUgInMvVklERU9URU1QTEFURS8kVEVNUExBVEUvZyIgXAotCS1lICdzL1wkSVtkXTogXChbXiRdKlwpXCQvXDEvZycgXAotCS1lICdzL1NPVVJDRUZJTEUvZ3N0dmlkZW90ZW1wbGF0ZVwuYy9nJyBcCi0JLWUgInMlTUFLRUZJTFRFUlZFUlNJT04lJGlkJWciIFwKLQkkc3JjZmlsZSA+Z3N0JHRlbXBsYXRlLmMudG1wICYmIG12IGdzdCR0ZW1wbGF0ZS5jLnRtcCBnc3QkdGVtcGxhdGUuYwotCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9maWx0ZXIvcGx1Z2luLmMgYi9nc3QvdmlkZW9maWx0ZXIvcGx1Z2luLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNzM2ZGMuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvZmlsdGVyL3BsdWdpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAiZ3N0Z2FtbWEuaCIKLSNpbmNsdWRlICJnc3R2aWRlb2ZsaXAuaCIKLSNpbmNsdWRlICJnc3R2aWRlb2JhbGFuY2UuaCIKLSNpbmNsdWRlICJnc3R2aWRlb21lZGlhbi5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIHJldHVybiAoZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgImdhbW1hIiwgR1NUX1JBTktfTk9ORSwgR1NUX1RZUEVfR0FNTUEpCi0gICAgICAmJiBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAidmlkZW9iYWxhbmNlIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9WSURFT19CQUxBTkNFKQotICAgICAgJiYgZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInZpZGVvZmxpcCIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfVklERU9fRkxJUCkKLSAgICAgICYmIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2aWRlb21lZGlhbiIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfVklERU9fTUVESUFOKSk7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICB2aWRlb2ZpbHRlciwKLSAgICAiVmlkZW8gZmlsdGVycyBwbHVnaW4iLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKZGlmZiAtLWdpdCBhL2dzdC92aWRlb21peGVyL01ha2VmaWxlLmFtIGIvZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNTAzNDIuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlb21peGVyLmxhCi0KLU9SQ19TT1VSQ0U9dmlkZW9taXhlcm9yYwotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsKLQotbGliZ3N0dmlkZW9taXhlcl9sYV9TT1VSQ0VTID0gXAotCWJsZW5kLmMgXAotCXZpZGVvbWl4ZXIyLmMKLQotbm9kaXN0X2xpYmdzdHZpZGVvbWl4ZXJfbGFfU09VUkNFUyA9ICQoT1JDX05PRElTVF9TT1VSQ0VTKQotbGliZ3N0dmlkZW9taXhlcl9sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChPUkNfQ0ZMQUdTKQotbGliZ3N0dmlkZW9taXhlcl9sYV9MSUJBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0dmlkZW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChPUkNfTElCUykgJChMSUJNKQotbGliZ3N0dmlkZW9taXhlcl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R2aWRlb21peGVyX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLSMgaGVhZGVycyB3ZSBuZWVkIGJ1dCBkb24ndCB3YW50IGluc3RhbGxlZAotbm9pbnN0X0hFQURFUlMgPSBcCi0JYmxlbmQuaCBcCi0JdmlkZW9taXhlcjIuaCBcCi0JdmlkZW9taXhlcjJwYWQuaApkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvTWFrZWZpbGUuaW4gYi9nc3QvdmlkZW9taXhlci9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVjMWRmZi4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9taXhlci9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMjQgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLSMKLSMgVGhpcyBpcyBhIG1ha2VmaWxlLmFtIGZyYWdtZW50IHRvIGJ1aWxkIE9yYyBjb2RlLgotIwotIyBEZWZpbmUgT1JDX1NPVVJDRSBhbmQgdGhlbiBpbmNsdWRlIHRoaXMgZmlsZSwgc3VjaCBhczoKLSMKLSMgIE9SQ19TT1VSQ0U9Z3N0YWRkZXJvcmMKLSMgIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb21tb24vb3JjLm1hawotIwotIyBUaGlzIGZyYWdtZW50IHdpbGwgY3JlYXRlIHRtcC1vcmMuYyBhbmQgZ3N0YWRkZXJvcmMuaCBmcm9tCi0jIGdzdGFkZGVyb3JjLm9yYy4KLSMKLSMgV2hlbiAnbWFrZSBkaXN0JyBpcyBydW4gYXQgdGhlIHRvcCBsZXZlbCwgb3IgJ21ha2Ugb3JjLXVwZGF0ZScKLSMgaW4gYSBkaXJlY3RvcnkgaW5jbHVkaW5nIHRoaXMgZnJhZ21lbnQsIHRoZSBnZW5lcmF0ZWQgc291cmNlIAotIyBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byAkKE9SQ19TT1VSQ0UpLWRpc3QuW2NoXS4gIFRoZXNlIGZpbGVzCi0jIHNob3VsZCBiZSBjaGVja2VkIGluIHRvIGdpdCwgc2luY2UgdGhleSBhcmUgdXNlZCBpZiBPcmMgaXMKLSMgZGlzYWJsZWQuCi0jIAotIyBOb3RlIHRoYXQgdGhpcyBmaWxlIGRlZmluZXMgQlVJTFRfU09VUkNFUywgc28gYW55IGxhdGVyIHVzYWdlCi0jIG9mIEJVSUxUX1NPVVJDRVMgaW4gdGhlIE1ha2VmaWxlLmFtIHRoYXQgaW5jbHVkZXMgdGhpcyBmaWxlCi0jIG11c3QgdXNlICcrPScuCi0jCi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3ZpZGVvbWl4ZXIKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3R2aWRlb21peGVyX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0dmlkZW9taXhlcl9sYV9PQkpFQ1RTID0gbGliZ3N0dmlkZW9taXhlcl9sYS1ibGVuZC5sbyBcCi0JbGliZ3N0dmlkZW9taXhlcl9sYS12aWRlb21peGVyMi5sbwotYW1fX29iamVjdHNfMSA9IGxpYmdzdHZpZGVvbWl4ZXJfbGEtdG1wLW9yYy5sbwotbm9kaXN0X2xpYmdzdHZpZGVvbWl4ZXJfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkKLWxpYmdzdHZpZGVvbWl4ZXJfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0dmlkZW9taXhlcl9sYV9PQkpFQ1RTKSBcCi0JJChub2Rpc3RfbGliZ3N0dmlkZW9taXhlcl9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0dmlkZW9taXhlcl9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdHZpZGVvbWl4ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3R2aWRlb21peGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHZpZGVvbWl4ZXJfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0dmlkZW9taXhlcl9sYV9TT1VSQ0VTKSBcCi0JJChub2Rpc3RfbGliZ3N0dmlkZW9taXhlcl9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R2aWRlb21peGVyX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrIFwKLQkkKHRvcF9zcmNkaXIpL2RlcGNvbXAgUkVBRE1FCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlb21peGVyLmxhCi1PUkNfU09VUkNFID0gdmlkZW9taXhlcm9yYwotRVhUUkFfRElTVCA9ICQoT1JDX1NPVVJDRSkub3JjCi1PUkNfTk9ESVNUX1NPVVJDRVMgPSB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi1CVUlMVF9TT1VSQ0VTID0gdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotb3JjY192X2dlbiA9ICQob3JjY192X2dlbl8kKFYpKQotb3JjY192X2dlbl8gPSAkKG9yY2Nfdl9nZW5fJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1vcmNjX3ZfZ2VuXzAgPSBAZWNobyAiICBPUkNDICAgJEAiOwotY3Bfdl9nZW4gPSAkKGNwX3ZfZ2VuXyQoVikpCi1jcF92X2dlbl8gPSAkKGNwX3ZfZ2VuXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotY3Bfdl9nZW5fMCA9IEBlY2hvICIgIENQICAgICAkQCI7Ci1saWJnc3R2aWRlb21peGVyX2xhX1NPVVJDRVMgPSBcCi0JYmxlbmQuYyBcCi0JdmlkZW9taXhlcjIuYwotCi1ub2Rpc3RfbGliZ3N0dmlkZW9taXhlcl9sYV9TT1VSQ0VTID0gJChPUkNfTk9ESVNUX1NPVVJDRVMpCi1saWJnc3R2aWRlb21peGVyX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKE9SQ19DRkxBR1MpCi0KLWxpYmdzdHZpZGVvbWl4ZXJfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdHZpZGVvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQkkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoT1JDX0xJQlMpICQoTElCTSkKLQotbGliZ3N0dmlkZW9taXhlcl9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R2aWRlb21peGVyX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLSMgaGVhZGVycyB3ZSBuZWVkIGJ1dCBkb24ndCB3YW50IGluc3RhbGxlZAotbm9pbnN0X0hFQURFUlMgPSBcCi0JYmxlbmQuaCBcCi0JdmlkZW9taXhlcjIuaCBcCi0JdmlkZW9taXhlcjJwYWQuaAotCi1hbGw6ICQoQlVJTFRfU09VUkNFUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9vcmMubWFrICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC92aWRlb21peGVyL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC92aWRlb21peGVyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL29yYy5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R2aWRlb21peGVyLmxhOiAkKGxpYmdzdHZpZGVvbWl4ZXJfbGFfT0JKRUNUUykgJChsaWJnc3R2aWRlb21peGVyX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R2aWRlb21peGVyX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3R2aWRlb21peGVyX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3R2aWRlb21peGVyX2xhX09CSkVDVFMpICQobGliZ3N0dmlkZW9taXhlcl9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvbWl4ZXJfbGEtYmxlbmQuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLXRtcC1vcmMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLXZpZGVvbWl4ZXIyLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R2aWRlb21peGVyX2xhLWJsZW5kLmxvOiBibGVuZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9taXhlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb21peGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb21peGVyX2xhLWJsZW5kLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLWJsZW5kLlRwbyAtYyAtbyBsaWJnc3R2aWRlb21peGVyX2xhLWJsZW5kLmxvIGB0ZXN0IC1mICdibGVuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BibGVuZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLWJsZW5kLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW9taXhlcl9sYS1ibGVuZC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdibGVuZC5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvbWl4ZXJfbGEtYmxlbmQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb21peGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvbWl4ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW9taXhlcl9sYS1ibGVuZC5sbyBgdGVzdCAtZiAnYmxlbmQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgYmxlbmQuYwotCi1saWJnc3R2aWRlb21peGVyX2xhLXZpZGVvbWl4ZXIyLmxvOiB2aWRlb21peGVyMi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9taXhlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb21peGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlb21peGVyX2xhLXZpZGVvbWl4ZXIyLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLXZpZGVvbWl4ZXIyLlRwbyAtYyAtbyBsaWJnc3R2aWRlb21peGVyX2xhLXZpZGVvbWl4ZXIyLmxvIGB0ZXN0IC1mICd2aWRlb21peGVyMi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2aWRlb21peGVyMi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLXZpZGVvbWl4ZXIyLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW9taXhlcl9sYS12aWRlb21peGVyMi5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2aWRlb21peGVyMi5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvbWl4ZXJfbGEtdmlkZW9taXhlcjIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlb21peGVyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvbWl4ZXJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW9taXhlcl9sYS12aWRlb21peGVyMi5sbyBgdGVzdCAtZiAndmlkZW9taXhlcjIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmlkZW9taXhlcjIuYwotCi1saWJnc3R2aWRlb21peGVyX2xhLXRtcC1vcmMubG86IHRtcC1vcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvbWl4ZXJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW9taXhlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW9taXhlcl9sYS10bXAtb3JjLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlb21peGVyX2xhLXRtcC1vcmMuVHBvIC1jIC1vIGxpYmdzdHZpZGVvbWl4ZXJfbGEtdG1wLW9yYy5sbyBgdGVzdCAtZiAndG1wLW9yYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0bXAtb3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvbWl4ZXJfbGEtdG1wLW9yYy5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvbWl4ZXJfbGEtdG1wLW9yYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0bXAtb3JjLmMnIG9iamVjdD0nbGliZ3N0dmlkZW9taXhlcl9sYS10bXAtb3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW9taXhlcl9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlb21peGVyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvbWl4ZXJfbGEtdG1wLW9yYy5sbyBgdGVzdCAtZiAndG1wLW9yYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0bXAtb3JjLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAotCSAgZGlzdC1ob29rCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi0JLXRlc3QgLXogIiQoQlVJTFRfU09VUkNFUykiIHx8IHJtIC1mICQoQlVJTFRfU09VUkNFUykKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIFwKLQljbGVhbi1wbHVnaW5MVExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGFsbCBjaGVjayBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLWxvY2FsIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQljc2NvcGVsaXN0LWFtIGN0YWdzIGN0YWdzLWFtIGRpc3QtaG9vayBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi1vcmMtdXBkYXRlOiB0bXAtb3JjLmMgJChPUkNfU09VUkNFKS5oCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LWluZGVudCB0bXAtb3JjLmMKLQljcCB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi0JY3AgJChPUkNfU09VUkNFKS5oICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuaAotCi1ASEFWRV9PUkNDX1RSVUVAdG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLUBIQVZFX09SQ0NfVFJVRUAJJChvcmNjX3ZfZ2VuKSQoT1JDQykgJChPUkNDX0ZMQUdTKSAtLWltcGxlbWVudGF0aW9uIC0taW5jbHVkZSBnbGliLmggLW8gdG1wLW9yYy5jICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYwotCi1ASEFWRV9PUkNDX1RSVUVAJChPUkNfU09VUkNFKS5oOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLUBIQVZFX09SQ0NfVFJVRUAJJChvcmNjX3ZfZ2VuKSQoT1JDQykgJChPUkNDX0ZMQUdTKSAtLWhlYWRlciAtLWluY2x1ZGUgZ2xpYi5oIC1vICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMKLUBIQVZFX09SQ0NfRkFMU0VAdG1wLW9yYy5jOiAkKHNyY2RpcikvJChPUkNfU09VUkNFKS5vcmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi1ASEFWRV9PUkNDX0ZBTFNFQAkkKGNwX3ZfZ2VuKWNwICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLWRpc3QuYyB0bXAtb3JjLmMKLQotQEhBVkVfT1JDQ19GQUxTRUAkKE9SQ19TT1VSQ0UpLmg6ICQoc3JjZGlyKS8kKE9SQ19TT1VSQ0UpLm9yYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMKLUBIQVZFX09SQ0NfRkFMU0VACSQoY3Bfdl9nZW4pY3AgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oICQoT1JDX1NPVVJDRSkuaAotCi1jbGVhbi1sb2NhbDogY2xlYW4tb3JjCi0uUEhPTlk6IGNsZWFuLW9yYwotY2xlYW4tb3JjOgotCXJtIC1mIHRtcC1vcmMuYyAkKE9SQ19TT1VSQ0UpLmgKLQotZGlzdC1ob29rOiBkaXN0LWhvb2stb3JjCi0uUEhPTlk6IGRpc3QtaG9vay1vcmMKLQotIyB3ZSB0cnkgYW5kIGNvcHkgdXBkYXRlZCBvcmMgLWRpc3QgZmlsZXMgYmVsb3csIGJ1dCBkb24ndCBmYWlsIGlmIGl0Ci0jIGRvZXNuJ3Qgd29yayBhcyB0aGUgc3JjZGlyIG1pZ2h0IG5vdCBiZSB3cml0YWJsZQotZGlzdC1ob29rLW9yYzogdG1wLW9yYy5jICQoT1JDX1NPVVJDRSkuaAotCSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1pbmRlbnQgdG1wLW9yYy5jCi0Jcm0gLWYgdG1wLW9yYy5jfgotCWNtcCAtcyB0bXAtb3JjLmMgJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jIHx8IFwKLQkgIGNwIHRtcC1vcmMuYyAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmMgfHwgdHJ1ZQotCWNtcCAtcyAkKE9SQ19TT1VSQ0UpLmggJChzcmNkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5oIHx8IFwKLQkgIGNwICQoT1JDX1NPVVJDRSkuaCAkKHNyY2RpcikvJChPUkNfU09VUkNFKS1kaXN0LmggfHwgdHJ1ZQotCWNwIC1wIHRtcC1vcmMuYyAkKGRpc3RkaXIpLyQoT1JDX1NPVVJDRSktZGlzdC5jCi0JY3AgLXAgJChPUkNfU09VUkNFKS5oICQoZGlzdGRpcikvJChPUkNfU09VUkNFKS1kaXN0LmgKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvUkVBRE1FIGIvZ3N0L3ZpZGVvbWl4ZXIvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzk0YTQ4Li4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb21peGVyL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLVZpZGVvIE1peGVyCi0tLS0tLS0tLS0tLQotCi1BIGdlbmVyaWNlIHZpZGVvIG1peGVyLCBpdCBibGVuZHMgdGhlIGF5dXYgYnVmZmVycyBmcm9tIGFsbCBwYWRzIG9udG8gCi1hIG5ldyBidWZmZXIuIFRoZSBuZXcgYnVmZmVyIGhhcyBieSBkZWZhdWx0IGEgY2hlY2tlcmJvYXJkIHBhdHRlcm4gYnV0Ci1pdHMgY29sb3IgY2FuIGJlIGNoYW5nZWQgd2l0aCBhIHByb3BlcnR5LgotVGhlIG1peGVyIGNhbiBtaXggc3RyZWFtcyB3aXRoIGRpZmZlcmVudCBmcmFtZXJhdGVzIGFuZCB2aWRlbyBzaXplcy4gSXQKLXVzZXMgdGhlIGR1cmF0aW9uIHZhbHVlIG9mIHRoZSBidWZmZXIgdG8gc2NoZWR1bGUgdGhlIHJlbmRlcmluZyBvZiB0aGUKLWJ1ZmZlcnMuIEZvciBzdHJlYW1zIHdpdGggYSBkaWZmZXJlbnQgcmVzb2x0aW9uIHRoYW4gdGhlIGZpbmFsIG91dHB1dAotcmVzb2x1dGlvbiBvbmUgY2FuIHNwZWNpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgd2hlcmUgdGhpcwotaW1hZ2Ugc2hvdWxkIGJlIHBsYWNlZCB3aXRoIHRoZSBwYWQgcHJvcGVydGllcyB4cG9zIGFuZCB5cG9zLgotVGhlIG92ZXJhbGwgYWxwaGEgdmFsdWUgb2YgYSBzdHJlYW0gY2FuIGFsc28gYmUgc3BlY2lmaWVkIHdpdGggYSBwYWQKLXByb3BlcnR5LgotQnkgZGVmYXVsdCwgdGhlIHN0cmVhbXMgYXJlIGJsZW5kZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhlIHBhZHMgd2VyZSAKLXJlcXVlc3RlZCBmcm9tIHRoZSBlbGVtZW50LiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGNoYW5naW5nIHRoZSAKLXpvcmRlciBwYWQgcHJvcGVydHkgb2YgdGhlIHN0cmVhbSwgYSBzdHJlYW0gd2l0aCBsb3dlciB6b3JkZXIgZ2V0cwotZHJhd24gZmlyc3QuCi0KLQotVE9ETwotLS0tLQotCi0tIHJlYWxseSBpbXBsZW1lbnQgem9yZGVyCi0tIHRha2UgSTQyMCB5dXYgYXMgd2VsbAotLSBvdXRwdXQgQVlVViBpZiBwb3NzaWJsZS4KLS0gaW1wbGVtZW50IGRpZmZlcmVudCBibGVuZCBtb2Rlcywgc29tZSBjb2RlIGlzIGFscmVhZHkgZG9uZQotLSB1c2UgZmlsdGVyIGNhcHMgb24gc3JjcGFkIHRvIGRlY2lkZSBvbiB0aGUgZmluYWwgb3V0cHV0IHNpemUKZGlmZiAtLWdpdCBhL2dzdC92aWRlb21peGVyL2JsZW5kLmMgYi9nc3QvdmlkZW9taXhlci9ibGVuZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTNmOTI1Li4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb21peGVyL2JsZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYxICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDA0IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZGZydWl0IEJ2LgotICogICBBdXRob3I6IFNqb2VyZCBTaW1vbnMgPHNqb2VyZEBsdW9uLm5ldD4KLSAqICAgQXV0aG9yOiBBbGV4IFVnYXJ0ZSA8YWxleHVnYXJ0ZUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxleCBVZ2FydGUgPGF1Z2FydGVAdmljb210ZWNoLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJibGVuZC5oIgotI2luY2x1ZGUgInZpZGVvbWl4ZXJvcmMuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNkZWZpbmUgQkxFTkQoRCxTLGFscGhhKSAoKChEKSAqICgyNTYgLSAoYWxwaGEpKSArIChTKSAqIChhbHBoYSkpID4+IDgpCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF92aWRlb21peGVyX2JsZW5kX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF92aWRlb21peGVyX2JsZW5kX2RlYnVnCi0KLS8qIEJlbG93IGFyZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGV2ZXJ5dGhpbmcgKi8KLQotLyogQTMyIGlzIGZvciBBWVVWLCBBUkdCIGFuZCBCR1JBICovCi0jZGVmaW5lIEJMRU5EX0EzMihuYW1lLCBtZXRob2QsIExPT1ApCQlcCi1zdGF0aWMgdm9pZCBcCi1tZXRob2QjI18gIyNuYW1lIChHc3RWaWRlb0ZyYW1lICogc3JjZnJhbWUsIGdpbnQgeHBvcywgZ2ludCB5cG9zLCBcCi0gICAgZ2RvdWJsZSBzcmNfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0ZnJhbWUpIFwKLXsgXAotICBndWludCBzX2FscGhhOyBcCi0gIGdpbnQgc3JjX3N0cmlkZSwgZGVzdF9zdHJpZGU7IFwKLSAgZ2ludCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodDsgXAotICBndWludDggKnNyYywgKmRlc3Q7IFwKLSAgZ2ludCBzcmNfd2lkdGgsIHNyY19oZWlnaHQ7IFwKLSAgXAotICBzcmNfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKHNyY2ZyYW1lKTsgXAotICBzcmNfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoc3JjZnJhbWUpOyBcCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmNmcmFtZSwgMCk7IFwKLSAgc3JjX3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjZnJhbWUsIDApOyBcCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdGZyYW1lLCAwKTsgXAotICBkZXN0X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdGZyYW1lLCAwKTsgXAotICBkZXN0X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGRlc3RmcmFtZSwgMCk7IFwKLSAgZGVzdF9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGRlc3RmcmFtZSwgMCk7IFwKLSAgXAotICBzX2FscGhhID0gQ0xBTVAgKChnaW50KSAoc3JjX2FscGhhICogMjU2KSwgMCwgMjU2KTsgXAotICBcCi0gIC8qIElmIGl0J3MgY29tcGxldGVseSB0cmFuc3BhcmVudC4uLiB3ZSBqdXN0IHJldHVybiAqLyBcCi0gIGlmIChHX1VOTElLRUxZIChzX2FscGhhID09IDApKSBcCi0gICAgcmV0dXJuOyBcCi0gIFwKLSAgLyogYWRqdXN0IHNyYyBwb2ludGVycyBmb3IgbmVnYXRpdmUgc2l6ZXMgKi8gXAotICBpZiAoeHBvcyA8IDApIHsgXAotICAgIHNyYyArPSAteHBvcyAqIDQ7IFwKLSAgICBzcmNfd2lkdGggLT0gLXhwb3M7IFwKLSAgICB4cG9zID0gMDsgXAotICB9IFwKLSAgaWYgKHlwb3MgPCAwKSB7IFwKLSAgICBzcmMgKz0gLXlwb3MgKiBzcmNfc3RyaWRlOyBcCi0gICAgc3JjX2hlaWdodCAtPSAteXBvczsgXAotICAgIHlwb3MgPSAwOyBcCi0gIH0gXAotICAvKiBhZGp1c3Qgd2lkdGgvaGVpZ2h0IGlmIHRoZSBzcmMgaXMgYmlnZ2VyIHRoYW4gZGVzdCAqLyBcCi0gIGlmICh4cG9zICsgc3JjX3dpZHRoID4gZGVzdF93aWR0aCkgeyBcCi0gICAgc3JjX3dpZHRoID0gZGVzdF93aWR0aCAtIHhwb3M7IFwKLSAgfSBcCi0gIGlmICh5cG9zICsgc3JjX2hlaWdodCA+IGRlc3RfaGVpZ2h0KSB7IFwKLSAgICBzcmNfaGVpZ2h0ID0gZGVzdF9oZWlnaHQgLSB5cG9zOyBcCi0gIH0gXAotICBcCi0gIGlmIChzcmNfaGVpZ2h0ID4gMCAmJiBzcmNfd2lkdGggPiAwKSB7IFwKLSAgICBkZXN0ID0gZGVzdCArIDQgKiB4cG9zICsgKHlwb3MgKiBkZXN0X3N0cmlkZSk7IFwKLSAgXAotICAgIExPT1AgKGRlc3QsIHNyYywgc3JjX2hlaWdodCwgc3JjX3dpZHRoLCBzcmNfc3RyaWRlLCBkZXN0X3N0cmlkZSwgc19hbHBoYSk7IFwKLSAgfSBcCi19Ci0KLSNkZWZpbmUgQkxFTkRfQTMyX0xPT1AobmFtZSwgbWV0aG9kKQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBcCi1fIyNtZXRob2QjI19sb29wXyMjbmFtZSAoZ3VpbnQ4ICogZGVzdCwgY29uc3QgZ3VpbnQ4ICogc3JjLCBnaW50IHNyY19oZWlnaHQsIFwKLSAgICBnaW50IHNyY193aWR0aCwgZ2ludCBzcmNfc3RyaWRlLCBnaW50IGRlc3Rfc3RyaWRlLCBndWludCBzX2FscGhhKSBcCi17IFwKLSAgc19hbHBoYSA9IE1JTiAoMjU1LCBzX2FscGhhKTsgXAotICB2aWRlb19taXhlcl9vcmNfIyNtZXRob2QjI18jI25hbWUgKGRlc3QsIGRlc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIFwKLSAgICAgIHNfYWxwaGEsIHNyY193aWR0aCwgc3JjX2hlaWdodCk7IFwKLX0KLQotQkxFTkRfQTMyX0xPT1AgKGFyZ2IsIGJsZW5kKTsKLUJMRU5EX0EzMl9MT09QIChiZ3JhLCBibGVuZCk7Ci1CTEVORF9BMzJfTE9PUCAoYXJnYiwgb3ZlcmxheSk7Ci1CTEVORF9BMzJfTE9PUCAoYmdyYSwgb3ZlcmxheSk7Ci0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi1CTEVORF9BMzIgKGFyZ2IsIGJsZW5kLCBfYmxlbmRfbG9vcF9hcmdiKTsKLUJMRU5EX0EzMiAoYmdyYSwgYmxlbmQsIF9ibGVuZF9sb29wX2JncmEpOwotQkxFTkRfQTMyIChhcmdiLCBvdmVybGF5LCBfb3ZlcmxheV9sb29wX2FyZ2IpOwotQkxFTkRfQTMyIChiZ3JhLCBvdmVybGF5LCBfb3ZlcmxheV9sb29wX2JncmEpOwotI2Vsc2UKLUJMRU5EX0EzMiAoYXJnYiwgYmxlbmQsIF9ibGVuZF9sb29wX2JncmEpOwotQkxFTkRfQTMyIChiZ3JhLCBibGVuZCwgX2JsZW5kX2xvb3BfYXJnYik7Ci1CTEVORF9BMzIgKGFyZ2IsIG92ZXJsYXksIF9vdmVybGF5X2xvb3BfYmdyYSk7Ci1CTEVORF9BMzIgKGJncmEsIG92ZXJsYXksIF9vdmVybGF5X2xvb3BfYXJnYik7Ci0jZW5kaWYKLQotI2RlZmluZSBBMzJfQ0hFQ0tFUl9DKG5hbWUsIFJHQiwgQSwgQzEsIEMyLCBDMykgXAotc3RhdGljIHZvaWQgXAotZmlsbF9jaGVja2VyXyMjbmFtZSMjX2MgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkgXAoteyBcCi0gIGdpbnQgaSwgajsgXAotICBnaW50IHZhbDsgXAotICBzdGF0aWMgY29uc3QgZ2ludCB0YWJbXSA9IHsgODAsIDE2MCwgODAsIDE2MCB9OyBcCi0gIGdpbnQgd2lkdGgsIGhlaWdodDsgXAotICBndWludDggKmRlc3Q7IFwKLSAgXAotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsgXAotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMCk7IFwKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMCk7IFwKLSAgXAotICBpZiAoIVJHQikgeyBcCi0gICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7IFwKLSAgICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7IFwKLSAgICAgICAgZGVzdFtBXSA9IDB4ZmY7IFwKLSAgICAgICAgZGVzdFtDMV0gPSB0YWJbKChpICYgMHg4KSA+PiAzKSArICgoaiAmIDB4OCkgPj4gMyldOyBcCi0gICAgICAgIGRlc3RbQzJdID0gMTI4OyBcCi0gICAgICAgIGRlc3RbQzNdID0gMTI4OyBcCi0gICAgICAgIGRlc3QgKz0gNDsgXAotICAgICAgfSBcCi0gICAgfSBcCi0gIH0gZWxzZSB7IFwKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsgXAotICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsgXAotICAgICAgICB2YWwgPSB0YWJbKChpICYgMHg4KSA+PiAzKSArICgoaiAmIDB4OCkgPj4gMyldOyBcCi0gICAgICAgIGRlc3RbQV0gPSAweEZGOyBcCi0gICAgICAgIGRlc3RbQzFdID0gdmFsOyBcCi0gICAgICAgIGRlc3RbQzJdID0gdmFsOyBcCi0gICAgICAgIGRlc3RbQzNdID0gdmFsOyBcCi0gICAgICAgIGRlc3QgKz0gNDsgXAotICAgICAgfSBcCi0gICAgfSBcCi0gIH0gXAotfQotCi1BMzJfQ0hFQ0tFUl9DIChhcmdiLCBUUlVFLCAwLCAxLCAyLCAzKTsKLUEzMl9DSEVDS0VSX0MgKGJncmEsIFRSVUUsIDMsIDIsIDEsIDApOwotQTMyX0NIRUNLRVJfQyAoYXl1diwgRkFMU0UsIDAsIDEsIDIsIDMpOwotCi0jZGVmaW5lIFlVVl9UT19SKFksVSxWKSAoQ0xBTVAgKDEuMTY0ICogKFkgLSAxNikgKyAxLjU5NiAqIChWIC0gMTI4KSwgMCwgMjU1KSkKLSNkZWZpbmUgWVVWX1RPX0coWSxVLFYpIChDTEFNUCAoMS4xNjQgKiAoWSAtIDE2KSAtIDAuODEzICogKFYgLSAxMjgpIC0gMC4zOTEgKiAoVSAtIDEyOCksIDAsIDI1NSkpCi0jZGVmaW5lIFlVVl9UT19CKFksVSxWKSAoQ0xBTVAgKDEuMTY0ICogKFkgLSAxNikgKyAyLjAxOCAqIChVIC0gMTI4KSwgMCwgMjU1KSkKLQotI2RlZmluZSBBMzJfQ09MT1IobmFtZSwgUkdCLCBBLCBDMSwgQzIsIEMzKSBcCi1zdGF0aWMgdm9pZCBcCi1maWxsX2NvbG9yXyMjbmFtZSAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lLCBnaW50IFksIGdpbnQgVSwgZ2ludCBWKSBcCi17IFwKLSAgZ2ludCBjMSwgYzIsIGMzOyBcCi0gIGd1aW50MzIgdmFsOyBcCi0gIGdpbnQgd2lkdGgsIGhlaWdodDsgXAotICBndWludDggKmRlc3Q7IFwKLSAgXAotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsgXAotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMCk7IFwKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMCk7IFwKLSAgXAotICBpZiAoUkdCKSB7IFwKLSAgICBjMSA9IFlVVl9UT19SIChZLCBVLCBWKTsgXAotICAgIGMyID0gWVVWX1RPX0cgKFksIFUsIFYpOyBcCi0gICAgYzMgPSBZVVZfVE9fQiAoWSwgVSwgVik7IFwKLSAgfSBlbHNlIHsgXAotICAgIGMxID0gWTsgXAotICAgIGMyID0gVTsgXAotICAgIGMzID0gVjsgXAotICB9IFwKLSAgdmFsID0gR1VJTlQzMl9GUk9NX0JFICgoMHhmZiA8PCBBKSB8IChjMSA8PCBDMSkgfCAoYzIgPDwgQzIpIHwgKGMzIDw8IEMzKSk7IFwKLSAgXAotICB2aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyICgoZ3VpbnQzMiAqKSBkZXN0LCB2YWwsIGhlaWdodCAqIHdpZHRoKTsgXAotfQotCi1BMzJfQ09MT1IgKGFyZ2IsIFRSVUUsIDI0LCAxNiwgOCwgMCk7Ci1BMzJfQ09MT1IgKGJncmEsIFRSVUUsIDAsIDgsIDE2LCAyNCk7Ci1BMzJfQ09MT1IgKGFiZ3IsIFRSVUUsIDI0LCAwLCA4LCAxNik7Ci1BMzJfQ09MT1IgKHJnYmEsIFRSVUUsIDAsIDI0LCAxNiwgOCk7Ci1BMzJfQ09MT1IgKGF5dXYsIEZBTFNFLCAyNCwgMTYsIDgsIDApOwotCi0vKiBZNDQ0LCBZNDJCLCBJNDIwLCBZVjEyLCBZNDFCICovCi0jZGVmaW5lIFBMQU5BUl9ZVVZfQkxFTkQoZm9ybWF0X25hbWUsZm9ybWF0X2VudW0seF9yb3VuZCx5X3JvdW5kLE1FTUNQWSxCTEVORExPT1ApIFwKLWlubGluZSBzdGF0aWMgdm9pZCBcCi1fYmxlbmRfIyNmb3JtYXRfbmFtZSAoY29uc3QgZ3VpbnQ4ICogc3JjLCBndWludDggKiBkZXN0LCBcCi0gICAgZ2ludCBzcmNfc3RyaWRlLCBnaW50IGRlc3Rfc3RyaWRlLCBnaW50IHNyY193aWR0aCwgZ2ludCBzcmNfaGVpZ2h0LCBcCi0gICAgZ2RvdWJsZSBzcmNfYWxwaGEpIFwKLXsgXAotICBnaW50IGk7IFwKLSAgZ2ludCBiX2FscGhhOyBcCi0gIFwKLSAgLyogSWYgaXQncyBjb21wbGV0ZWx5IHRyYW5zcGFyZW50Li4uIHdlIGp1c3QgcmV0dXJuICovIFwKLSAgaWYgKEdfVU5MSUtFTFkgKHNyY19hbHBoYSA9PSAwLjApKSB7IFwKLSAgICBHU1RfSU5GTyAoIkZhc3QgY29weSAoYWxwaGEgPT0gMC4wKSIpOyBcCi0gICAgcmV0dXJuOyBcCi0gIH0gXAotICBcCi0gIC8qIElmIGl0J3MgY29tcGxldGVseSBvcGFxdWUsIHdlIGRvIGEgZmFzdCBjb3B5ICovIFwKLSAgaWYgKEdfVU5MSUtFTFkgKHNyY19hbHBoYSA9PSAxLjApKSB7IFwKLSAgICBHU1RfSU5GTyAoIkZhc3QgY29weSAoYWxwaGEgPT0gMS4wKSIpOyBcCi0gICAgZm9yIChpID0gMDsgaSA8IHNyY19oZWlnaHQ7IGkrKykgeyBcCi0gICAgICBNRU1DUFkgKGRlc3QsIHNyYywgc3JjX3dpZHRoKTsgXAotICAgICAgc3JjICs9IHNyY19zdHJpZGU7IFwKLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7IFwKLSAgICB9IFwKLSAgICByZXR1cm47IFwKLSAgfSBcCi0gIFwKLSAgYl9hbHBoYSA9IENMQU1QICgoZ2ludCkgKHNyY19hbHBoYSAqIDI1NiksIDAsIDI1Nik7IFwKLSAgXAotICBCTEVORExPT1AoZGVzdCwgZGVzdF9zdHJpZGUsIHNyYywgc3JjX3N0cmlkZSwgYl9hbHBoYSwgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0KTsgXAotfSBcCi1cCi1zdGF0aWMgdm9pZCBcCi1ibGVuZF8jI2Zvcm1hdF9uYW1lIChHc3RWaWRlb0ZyYW1lICogc3JjZnJhbWUsIGdpbnQgeHBvcywgZ2ludCB5cG9zLCBcCi0gICAgZ2RvdWJsZSBzcmNfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0ZnJhbWUpIFwKLXsgXAotICBjb25zdCBndWludDggKmJfc3JjOyBcCi0gIGd1aW50OCAqYl9kZXN0OyBcCi0gIGdpbnQgYl9zcmNfd2lkdGg7IFwKLSAgZ2ludCBiX3NyY19oZWlnaHQ7IFwKLSAgZ2ludCB4b2Zmc2V0ID0gMDsgXAotICBnaW50IHlvZmZzZXQgPSAwOyBcCi0gIGdpbnQgc3JjX2NvbXBfcm93c3RyaWRlLCBkZXN0X2NvbXBfcm93c3RyaWRlOyBcCi0gIGdpbnQgc3JjX2NvbXBfaGVpZ2h0OyBcCi0gIGdpbnQgc3JjX2NvbXBfd2lkdGg7IFwKLSAgZ2ludCBjb21wX3lwb3MsIGNvbXBfeHBvczsgXAotICBnaW50IGNvbXBfeW9mZnNldCwgY29tcF94b2Zmc2V0OyBcCi0gIGdpbnQgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQ7IFwKLSAgY29uc3QgR3N0VmlkZW9Gb3JtYXRJbmZvICppbmZvOyBcCi0gIGdpbnQgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0OyBcCi0gIFwKLSAgc3JjX3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChzcmNmcmFtZSk7IFwKLSAgc3JjX2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKHNyY2ZyYW1lKTsgXAotICBcCi0gIGluZm8gPSBzcmNmcmFtZS0+aW5mby5maW5mbzsgXAotICBkZXN0X3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChkZXN0ZnJhbWUpOyBcCi0gIGRlc3RfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZGVzdGZyYW1lKTsgXAotICBcCi0gIHhwb3MgPSB4X3JvdW5kICh4cG9zKTsgXAotICB5cG9zID0geV9yb3VuZCAoeXBvcyk7IFwKLSAgXAotICBiX3NyY193aWR0aCA9IHNyY193aWR0aDsgXAotICBiX3NyY19oZWlnaHQgPSBzcmNfaGVpZ2h0OyBcCi0gIFwKLSAgLyogYWRqdXN0IHNyYyBwb2ludGVycyBmb3IgbmVnYXRpdmUgc2l6ZXMgKi8gXAotICBpZiAoeHBvcyA8IDApIHsgXAotICAgIHhvZmZzZXQgPSAteHBvczsgXAotICAgIGJfc3JjX3dpZHRoIC09IC14cG9zOyBcCi0gICAgeHBvcyA9IDA7IFwKLSAgfSBcCi0gIGlmICh5cG9zIDwgMCkgeyBcCi0gICAgeW9mZnNldCA9IC15cG9zOyBcCi0gICAgYl9zcmNfaGVpZ2h0IC09IC15cG9zOyBcCi0gICAgeXBvcyA9IDA7IFwKLSAgfSBcCi0gIC8qIElmIHggb3IgeSBvZmZzZXQgYXJlIGxhcmdlciB0aGVuIHRoZSBzb3VyY2UgaXQncyBvdXRzaWRlIG9mIHRoZSBwaWN0dXJlICovIFwKLSAgaWYgKHhvZmZzZXQgPj0gc3JjX3dpZHRoIHx8IHlvZmZzZXQgPj0gc3JjX2hlaWdodCkgeyBcCi0gICAgcmV0dXJuOyBcCi0gIH0gXAotICBcCi0gIC8qIGFkanVzdCB3aWR0aC9oZWlnaHQgaWYgdGhlIHNyYyBpcyBiaWdnZXIgdGhhbiBkZXN0ICovIFwKLSAgaWYgKHhwb3MgKyBiX3NyY193aWR0aCA+IGRlc3Rfd2lkdGgpIHsgXAotICAgIGJfc3JjX3dpZHRoID0gZGVzdF93aWR0aCAtIHhwb3M7IFwKLSAgfSBcCi0gIGlmICh5cG9zICsgYl9zcmNfaGVpZ2h0ID4gZGVzdF9oZWlnaHQpIHsgXAotICAgIGJfc3JjX2hlaWdodCA9IGRlc3RfaGVpZ2h0IC0geXBvczsgXAotICB9IFwKLSAgaWYgKGJfc3JjX3dpZHRoIDw9IDAgfHwgYl9zcmNfaGVpZ2h0IDw9IDApIHsgXAotICAgIHJldHVybjsgXAotICB9IFwKLSAgXAotICAvKiBGaXJzdCBtaXggWSwgdGhlbiBVLCB0aGVuIFYgKi8gXAotICBiX3NyYyA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyY2ZyYW1lLCAwKTsgXAotICBiX2Rlc3QgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChkZXN0ZnJhbWUsIDApOyBcCi0gIHNyY19jb21wX3Jvd3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjZnJhbWUsIDApOyBcCi0gIGRlc3RfY29tcF9yb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3RmcmFtZSwgMCk7IFwKLSAgc3JjX2NvbXBfd2lkdGggPSBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEgoaW5mbywgMCwgYl9zcmNfd2lkdGgpOyBcCi0gIHNyY19jb21wX2hlaWdodCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQoaW5mbywgMCwgYl9zcmNfaGVpZ2h0KTsgXAotICBjb21wX3hwb3MgPSAoeHBvcyA9PSAwKSA/IDAgOiBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEggKGluZm8sIDAsIHhwb3MpOyBcCi0gIGNvbXBfeXBvcyA9ICh5cG9zID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGluZm8sIDAsIHlwb3MpOyBcCi0gIGNvbXBfeG9mZnNldCA9ICh4b2Zmc2V0ID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9XSURUSCAoaW5mbywgMCwgeG9mZnNldCk7IFwKLSAgY29tcF95b2Zmc2V0ID0gKHlvZmZzZXQgPT0gMCkgPyAwIDogR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX0hFSUdIVCAoaW5mbywgMCwgeW9mZnNldCk7IFwKLSAgX2JsZW5kXyMjZm9ybWF0X25hbWUgKGJfc3JjICsgY29tcF94b2Zmc2V0ICsgY29tcF95b2Zmc2V0ICogc3JjX2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBiX2Rlc3QgKyBjb21wX3hwb3MgKyBjb21wX3lwb3MgKiBkZXN0X2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBzcmNfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIGRlc3RfY29tcF9yb3dzdHJpZGUsIHNyY19jb21wX3dpZHRoLCBzcmNfY29tcF9oZWlnaHQsIFwKLSAgICAgIHNyY19hbHBoYSk7IFwKLSAgXAotICBiX3NyYyA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyY2ZyYW1lLCAxKTsgXAotICBiX2Rlc3QgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChkZXN0ZnJhbWUsIDEpOyBcCi0gIHNyY19jb21wX3Jvd3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjZnJhbWUsIDEpOyBcCi0gIGRlc3RfY29tcF9yb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3RmcmFtZSwgMSk7IFwKLSAgc3JjX2NvbXBfd2lkdGggPSBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEgoaW5mbywgMSwgYl9zcmNfd2lkdGgpOyBcCi0gIHNyY19jb21wX2hlaWdodCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQoaW5mbywgMSwgYl9zcmNfaGVpZ2h0KTsgXAotICBjb21wX3hwb3MgPSAoeHBvcyA9PSAwKSA/IDAgOiBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEggKGluZm8sIDEsIHhwb3MpOyBcCi0gIGNvbXBfeXBvcyA9ICh5cG9zID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGluZm8sIDEsIHlwb3MpOyBcCi0gIGNvbXBfeG9mZnNldCA9ICh4b2Zmc2V0ID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9XSURUSCAoaW5mbywgMSwgeG9mZnNldCk7IFwKLSAgY29tcF95b2Zmc2V0ID0gKHlvZmZzZXQgPT0gMCkgPyAwIDogR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX0hFSUdIVCAoaW5mbywgMSwgeW9mZnNldCk7IFwKLSAgX2JsZW5kXyMjZm9ybWF0X25hbWUgKGJfc3JjICsgY29tcF94b2Zmc2V0ICsgY29tcF95b2Zmc2V0ICogc3JjX2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBiX2Rlc3QgKyBjb21wX3hwb3MgKyBjb21wX3lwb3MgKiBkZXN0X2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBzcmNfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIGRlc3RfY29tcF9yb3dzdHJpZGUsIHNyY19jb21wX3dpZHRoLCBzcmNfY29tcF9oZWlnaHQsIFwKLSAgICAgIHNyY19hbHBoYSk7IFwKLSAgXAotICBiX3NyYyA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKHNyY2ZyYW1lLCAyKTsgXAotICBiX2Rlc3QgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChkZXN0ZnJhbWUsIDIpOyBcCi0gIHNyY19jb21wX3Jvd3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoc3JjZnJhbWUsIDIpOyBcCi0gIGRlc3RfY29tcF9yb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3RmcmFtZSwgMik7IFwKLSAgc3JjX2NvbXBfd2lkdGggPSBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEgoaW5mbywgMiwgYl9zcmNfd2lkdGgpOyBcCi0gIHNyY19jb21wX2hlaWdodCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQoaW5mbywgMiwgYl9zcmNfaGVpZ2h0KTsgXAotICBjb21wX3hwb3MgPSAoeHBvcyA9PSAwKSA/IDAgOiBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEggKGluZm8sIDIsIHhwb3MpOyBcCi0gIGNvbXBfeXBvcyA9ICh5cG9zID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGluZm8sIDIsIHlwb3MpOyBcCi0gIGNvbXBfeG9mZnNldCA9ICh4b2Zmc2V0ID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9XSURUSCAoaW5mbywgMiwgeG9mZnNldCk7IFwKLSAgY29tcF95b2Zmc2V0ID0gKHlvZmZzZXQgPT0gMCkgPyAwIDogR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX0hFSUdIVCAoaW5mbywgMiwgeW9mZnNldCk7IFwKLSAgX2JsZW5kXyMjZm9ybWF0X25hbWUgKGJfc3JjICsgY29tcF94b2Zmc2V0ICsgY29tcF95b2Zmc2V0ICogc3JjX2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBiX2Rlc3QgKyBjb21wX3hwb3MgKyBjb21wX3lwb3MgKiBkZXN0X2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBzcmNfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIGRlc3RfY29tcF9yb3dzdHJpZGUsIHNyY19jb21wX3dpZHRoLCBzcmNfY29tcF9oZWlnaHQsIFwKLSAgICAgIHNyY19hbHBoYSk7IFwKLX0KLQotI2RlZmluZSBQTEFOQVJfWVVWX0ZJTExfQ0hFQ0tFUihmb3JtYXRfbmFtZSwgZm9ybWF0X2VudW0sIE1FTVNFVCkgXAotc3RhdGljIHZvaWQgXAotZmlsbF9jaGVja2VyXyMjZm9ybWF0X25hbWUgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkgXAoteyBcCi0gIGdpbnQgaSwgajsgXAotICBzdGF0aWMgY29uc3QgaW50IHRhYltdID0geyA4MCwgMTYwLCA4MCwgMTYwIH07IFwKLSAgZ3VpbnQ4ICpwOyBcCi0gIGdpbnQgY29tcF93aWR0aCwgY29tcF9oZWlnaHQ7IFwKLSAgZ2ludCByb3dzdHJpZGU7IFwKLSAgXAotICBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDApOyBcCi0gIGNvbXBfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZnJhbWUsIDApOyBcCi0gIGNvbXBfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMCk7IFwKLSAgcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCk7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgY29tcF9oZWlnaHQ7IGkrKykgeyBcCi0gICAgZm9yIChqID0gMDsgaiA8IGNvbXBfd2lkdGg7IGorKykgeyBcCi0gICAgICAqcCsrID0gdGFiWygoaSAmIDB4OCkgPj4gMykgKyAoKGogJiAweDgpID4+IDMpXTsgXAotICAgIH0gXAotICAgIHAgKz0gcm93c3RyaWRlIC0gY29tcF93aWR0aDsgXAotICB9IFwKLSAgXAotICBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDEpOyBcCi0gIGNvbXBfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZnJhbWUsIDEpOyBcCi0gIGNvbXBfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMSk7IFwKLSAgcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMSk7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgY29tcF9oZWlnaHQ7IGkrKykgeyBcCi0gICAgTUVNU0VUIChwLCAweDgwLCBjb21wX3dpZHRoKTsgXAotICAgIHAgKz0gcm93c3RyaWRlOyBcCi0gIH0gXAotICBcCi0gIHAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMik7IFwKLSAgY29tcF93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMik7IFwKLSAgY29tcF9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGZyYW1lLCAyKTsgXAotICByb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCAyKTsgXAotICBcCi0gIGZvciAoaSA9IDA7IGkgPCBjb21wX2hlaWdodDsgaSsrKSB7IFwKLSAgICBNRU1TRVQgKHAsIDB4ODAsIGNvbXBfd2lkdGgpOyBcCi0gICAgcCArPSByb3dzdHJpZGU7IFwKLSAgfSBcCi19Ci0KLSNkZWZpbmUgUExBTkFSX1lVVl9GSUxMX0NPTE9SKGZvcm1hdF9uYW1lLGZvcm1hdF9lbnVtLE1FTVNFVCkgXAotc3RhdGljIHZvaWQgXAotZmlsbF9jb2xvcl8jI2Zvcm1hdF9uYW1lIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIFwKLSAgICBnaW50IGNvbFksIGdpbnQgY29sVSwgZ2ludCBjb2xWKSBcCi17IFwKLSAgZ3VpbnQ4ICpwOyBcCi0gIGdpbnQgY29tcF93aWR0aCwgY29tcF9oZWlnaHQ7IFwKLSAgZ2ludCByb3dzdHJpZGU7IFwKLSAgZ2ludCBpOyBcCi0gIFwKLSAgcCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAwKTsgXAotICBjb21wX3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGZyYW1lLCAwKTsgXAotICBjb21wX2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDApOyBcCi0gIHJvd3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApOyBcCi0gIFwKLSAgZm9yIChpID0gMDsgaSA8IGNvbXBfaGVpZ2h0OyBpKyspIHsgXAotICAgIE1FTVNFVCAocCwgY29sWSwgY29tcF93aWR0aCk7IFwKLSAgICBwICs9IHJvd3N0cmlkZTsgXAotICB9IFwKLSAgXAotICBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDEpOyBcCi0gIGNvbXBfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZnJhbWUsIDEpOyBcCi0gIGNvbXBfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMSk7IFwKLSAgcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMSk7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgY29tcF9oZWlnaHQ7IGkrKykgeyBcCi0gICAgTUVNU0VUIChwLCBjb2xVLCBjb21wX3dpZHRoKTsgXAotICAgIHAgKz0gcm93c3RyaWRlOyBcCi0gIH0gXAotICBcCi0gIHAgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMik7IFwKLSAgY29tcF93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMik7IFwKLSAgY29tcF9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGZyYW1lLCAyKTsgXAotICByb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCAyKTsgXAotICBcCi0gIGZvciAoaSA9IDA7IGkgPCBjb21wX2hlaWdodDsgaSsrKSB7IFwKLSAgICBNRU1TRVQgKHAsIGNvbFYsIGNvbXBfd2lkdGgpOyBcCi0gICAgcCArPSByb3dzdHJpZGU7IFwKLSAgfSBcCi19Ci0KLSNkZWZpbmUgR1NUX1JPVU5EX1VQXzEoeCkgKHgpCi0KLVBMQU5BUl9ZVVZfQkxFTkQgKGk0MjAsIEdTVF9WSURFT19GT1JNQVRfSTQyMCwgR1NUX1JPVU5EX1VQXzIsCi0gICAgR1NUX1JPVU5EX1VQXzIsIG1lbWNweSwgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX3U4KTsKLVBMQU5BUl9ZVVZfRklMTF9DSEVDS0VSIChpNDIwLCBHU1RfVklERU9fRk9STUFUX0k0MjAsIG1lbXNldCk7Ci1QTEFOQVJfWVVWX0ZJTExfQ09MT1IgKGk0MjAsIEdTVF9WSURFT19GT1JNQVRfSTQyMCwgbWVtc2V0KTsKLVBMQU5BUl9ZVVZfRklMTF9DT0xPUiAoeXYxMiwgR1NUX1ZJREVPX0ZPUk1BVF9ZVjEyLCBtZW1zZXQpOwotUExBTkFSX1lVVl9CTEVORCAoeTQ0NCwgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0LCBHU1RfUk9VTkRfVVBfMSwKLSAgICBHU1RfUk9VTkRfVVBfMSwgbWVtY3B5LCB2aWRlb19taXhlcl9vcmNfYmxlbmRfdTgpOwotUExBTkFSX1lVVl9GSUxMX0NIRUNLRVIgKHk0NDQsIEdTVF9WSURFT19GT1JNQVRfWTQ0NCwgbWVtc2V0KTsKLVBMQU5BUl9ZVVZfRklMTF9DT0xPUiAoeTQ0NCwgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0LCBtZW1zZXQpOwotUExBTkFSX1lVVl9CTEVORCAoeTQyYiwgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCLCBHU1RfUk9VTkRfVVBfMiwKLSAgICBHU1RfUk9VTkRfVVBfMSwgbWVtY3B5LCB2aWRlb19taXhlcl9vcmNfYmxlbmRfdTgpOwotUExBTkFSX1lVVl9GSUxMX0NIRUNLRVIgKHk0MmIsIEdTVF9WSURFT19GT1JNQVRfWTQyQiwgbWVtc2V0KTsKLVBMQU5BUl9ZVVZfRklMTF9DT0xPUiAoeTQyYiwgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCLCBtZW1zZXQpOwotUExBTkFSX1lVVl9CTEVORCAoeTQxYiwgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCLCBHU1RfUk9VTkRfVVBfNCwKLSAgICBHU1RfUk9VTkRfVVBfMSwgbWVtY3B5LCB2aWRlb19taXhlcl9vcmNfYmxlbmRfdTgpOwotUExBTkFSX1lVVl9GSUxMX0NIRUNLRVIgKHk0MWIsIEdTVF9WSURFT19GT1JNQVRfWTQxQiwgbWVtc2V0KTsKLVBMQU5BUl9ZVVZfRklMTF9DT0xPUiAoeTQxYiwgR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCLCBtZW1zZXQpOwotCi0vKiBOVjEyLCBOVjIxICovCi0jZGVmaW5lIE5WX1lVVl9CTEVORChmb3JtYXRfbmFtZSxNRU1DUFksQkxFTkRMT09QKSBcCi1pbmxpbmUgc3RhdGljIHZvaWQgXAotX2JsZW5kXyMjZm9ybWF0X25hbWUgKGNvbnN0IGd1aW50OCAqIHNyYywgZ3VpbnQ4ICogZGVzdCwgXAotICAgIGdpbnQgc3JjX3N0cmlkZSwgZ2ludCBkZXN0X3N0cmlkZSwgZ2ludCBzcmNfd2lkdGgsIGdpbnQgc3JjX2hlaWdodCwgXAotICAgIGdkb3VibGUgc3JjX2FscGhhKSBcCi17IFwKLSAgZ2ludCBpOyBcCi0gIGdpbnQgYl9hbHBoYTsgXAotICBcCi0gIC8qIElmIGl0J3MgY29tcGxldGVseSB0cmFuc3BhcmVudC4uLiB3ZSBqdXN0IHJldHVybiAqLyBcCi0gIGlmIChHX1VOTElLRUxZIChzcmNfYWxwaGEgPT0gMC4wKSkgeyBcCi0gICAgR1NUX0lORk8gKCJGYXN0IGNvcHkgKGFscGhhID09IDAuMCkiKTsgXAotICAgIHJldHVybjsgXAotICB9IFwKLSAgXAotICAvKiBJZiBpdCdzIGNvbXBsZXRlbHkgb3BhcXVlLCB3ZSBkbyBhIGZhc3QgY29weSAqLyBcCi0gIGlmIChHX1VOTElLRUxZIChzcmNfYWxwaGEgPT0gMS4wKSkgeyBcCi0gICAgR1NUX0lORk8gKCJGYXN0IGNvcHkgKGFscGhhID09IDEuMCkiKTsgXAotICAgIGZvciAoaSA9IDA7IGkgPCBzcmNfaGVpZ2h0OyBpKyspIHsgXAotICAgICAgTUVNQ1BZIChkZXN0LCBzcmMsIHNyY193aWR0aCk7IFwKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOyBcCi0gICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOyBcCi0gICAgfSBcCi0gICAgcmV0dXJuOyBcCi0gIH0gXAotICBcCi0gIGJfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChzcmNfYWxwaGEgKiAyNTYpLCAwLCAyNTYpOyBcCi0gIFwKLSAgQkxFTkRMT09QKGRlc3QsIGRlc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIGJfYWxwaGEsIHNyY193aWR0aCwgc3JjX2hlaWdodCk7IFwKLX0gXAotXAotc3RhdGljIHZvaWQgXAotYmxlbmRfIyNmb3JtYXRfbmFtZSAoR3N0VmlkZW9GcmFtZSAqIHNyY2ZyYW1lLCBnaW50IHhwb3MsIGdpbnQgeXBvcywgXAotICAgIGdkb3VibGUgc3JjX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdGZyYW1lKSAgICAgICAgICAgICAgICAgICAgXAoteyBcCi0gIGNvbnN0IGd1aW50OCAqYl9zcmM7IFwKLSAgZ3VpbnQ4ICpiX2Rlc3Q7IFwKLSAgZ2ludCBiX3NyY193aWR0aDsgXAotICBnaW50IGJfc3JjX2hlaWdodDsgXAotICBnaW50IHhvZmZzZXQgPSAwOyBcCi0gIGdpbnQgeW9mZnNldCA9IDA7IFwKLSAgZ2ludCBzcmNfY29tcF9yb3dzdHJpZGUsIGRlc3RfY29tcF9yb3dzdHJpZGU7IFwKLSAgZ2ludCBzcmNfY29tcF9oZWlnaHQ7IFwKLSAgZ2ludCBzcmNfY29tcF93aWR0aDsgXAotICBnaW50IGNvbXBfeXBvcywgY29tcF94cG9zOyBcCi0gIGdpbnQgY29tcF95b2Zmc2V0LCBjb21wX3hvZmZzZXQ7IFwKLSAgZ2ludCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodDsgXAotICBjb25zdCBHc3RWaWRlb0Zvcm1hdEluZm8gKmluZm87IFwKLSAgZ2ludCBzcmNfd2lkdGgsIHNyY19oZWlnaHQ7IFwKLSAgXAotICBzcmNfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKHNyY2ZyYW1lKTsgXAotICBzcmNfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoc3JjZnJhbWUpOyBcCi0gIFwKLSAgaW5mbyA9IHNyY2ZyYW1lLT5pbmZvLmZpbmZvOyBcCi0gIGRlc3Rfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKGRlc3RmcmFtZSk7IFwKLSAgZGVzdF9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUIChkZXN0ZnJhbWUpOyBcCi0gIFwKLSAgeHBvcyA9IEdTVF9ST1VORF9VUF8yICh4cG9zKTsgXAotICB5cG9zID0gR1NUX1JPVU5EX1VQXzIgKHlwb3MpOyBcCi0gIFwKLSAgYl9zcmNfd2lkdGggPSBzcmNfd2lkdGg7IFwKLSAgYl9zcmNfaGVpZ2h0ID0gc3JjX2hlaWdodDsgXAotICBcCi0gIC8qIGFkanVzdCBzcmMgcG9pbnRlcnMgZm9yIG5lZ2F0aXZlIHNpemVzICovIFwKLSAgaWYgKHhwb3MgPCAwKSB7IFwKLSAgICB4b2Zmc2V0ID0gLXhwb3M7IFwKLSAgICBiX3NyY193aWR0aCAtPSAteHBvczsgXAotICAgIHhwb3MgPSAwOyBcCi0gIH0gXAotICBpZiAoeXBvcyA8IDApIHsgXAotICAgIHlvZmZzZXQgKz0gLXlwb3M7IFwKLSAgICBiX3NyY19oZWlnaHQgLT0gLXlwb3M7IFwKLSAgICB5cG9zID0gMDsgXAotICB9IFwKLSAgLyogSWYgeCBvciB5IG9mZnNldCBhcmUgbGFyZ2VyIHRoZW4gdGhlIHNvdXJjZSBpdCdzIG91dHNpZGUgb2YgdGhlIHBpY3R1cmUgKi8gXAotICBpZiAoeG9mZnNldCA+IHNyY193aWR0aCB8fCB5b2Zmc2V0ID4gc3JjX2hlaWdodCkgeyBcCi0gICAgcmV0dXJuOyBcCi0gIH0gXAotICBcCi0gIC8qIGFkanVzdCB3aWR0aC9oZWlnaHQgaWYgdGhlIHNyYyBpcyBiaWdnZXIgdGhhbiBkZXN0ICovIFwKLSAgaWYgKHhwb3MgKyBzcmNfd2lkdGggPiBkZXN0X3dpZHRoKSB7IFwKLSAgICBiX3NyY193aWR0aCA9IGRlc3Rfd2lkdGggLSB4cG9zOyBcCi0gIH0gXAotICBpZiAoeXBvcyArIHNyY19oZWlnaHQgPiBkZXN0X2hlaWdodCkgeyBcCi0gICAgYl9zcmNfaGVpZ2h0ID0gZGVzdF9oZWlnaHQgLSB5cG9zOyBcCi0gIH0gXAotICBpZiAoYl9zcmNfd2lkdGggPCAwIHx8IGJfc3JjX2hlaWdodCA8IDApIHsgXAotICAgIHJldHVybjsgXAotICB9IFwKLSAgXAotICAvKiBGaXJzdCBtaXggWSwgdGhlbiBVViAqLyBcCi0gIGJfc3JjID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoc3JjZnJhbWUsIDApOyBcCi0gIGJfZGVzdCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGRlc3RmcmFtZSwgMCk7IFwKLSAgc3JjX2NvbXBfcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmNmcmFtZSwgMCk7IFwKLSAgZGVzdF9jb21wX3Jvd3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdGZyYW1lLCAwKTsgXAotICBzcmNfY29tcF93aWR0aCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9XSURUSChpbmZvLCAwLCBiX3NyY193aWR0aCk7IFwKLSAgc3JjX2NvbXBfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX0hFSUdIVChpbmZvLCAwLCBiX3NyY19oZWlnaHQpOyBcCi0gIGNvbXBfeHBvcyA9ICh4cG9zID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9XSURUSCAoaW5mbywgMCwgeHBvcyk7IFwKLSAgY29tcF95cG9zID0gKHlwb3MgPT0gMCkgPyAwIDogR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX0hFSUdIVCAoaW5mbywgMCwgeXBvcyk7IFwKLSAgY29tcF94b2Zmc2V0ID0gKHhvZmZzZXQgPT0gMCkgPyAwIDogR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX1dJRFRIIChpbmZvLCAwLCB4b2Zmc2V0KTsgXAotICBjb21wX3lvZmZzZXQgPSAoeW9mZnNldCA9PSAwKSA/IDAgOiBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfSEVJR0hUIChpbmZvLCAwLCB5b2Zmc2V0KTsgXAotICBfYmxlbmRfIyNmb3JtYXRfbmFtZSAoYl9zcmMgKyBjb21wX3hvZmZzZXQgKyBjb21wX3lvZmZzZXQgKiBzcmNfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIGJfZGVzdCArIGNvbXBfeHBvcyArIGNvbXBfeXBvcyAqIGRlc3RfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIHNyY19jb21wX3Jvd3N0cmlkZSwgXAotICAgICAgZGVzdF9jb21wX3Jvd3N0cmlkZSwgc3JjX2NvbXBfd2lkdGgsIHNyY19jb21wX2hlaWdodCwgXAotICAgICAgc3JjX2FscGhhKTsgXAotICBcCi0gIGJfc3JjID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKHNyY2ZyYW1lLCAxKTsgXAotICBiX2Rlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdGZyYW1lLCAxKTsgXAotICBzcmNfY29tcF9yb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyY2ZyYW1lLCAxKTsgXAotICBkZXN0X2NvbXBfcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChkZXN0ZnJhbWUsIDEpOyBcCi0gIHNyY19jb21wX3dpZHRoID0gR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX1dJRFRIKGluZm8sIDEsIGJfc3JjX3dpZHRoKTsgXAotICBzcmNfY29tcF9oZWlnaHQgPSBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfSEVJR0hUKGluZm8sIDEsIGJfc3JjX2hlaWdodCk7IFwKLSAgY29tcF94cG9zID0gKHhwb3MgPT0gMCkgPyAwIDogR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX1dJRFRIIChpbmZvLCAxLCB4cG9zKTsgXAotICBjb21wX3lwb3MgPSAoeXBvcyA9PSAwKSA/IDAgOiBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfSEVJR0hUIChpbmZvLCAxLCB5cG9zKTsgXAotICBjb21wX3hvZmZzZXQgPSAoeG9mZnNldCA9PSAwKSA/IDAgOiBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEggKGluZm8sIDEsIHhvZmZzZXQpOyBcCi0gIGNvbXBfeW9mZnNldCA9ICh5b2Zmc2V0ID09IDApID8gMCA6IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGluZm8sIDEsIHlvZmZzZXQpOyBcCi0gIF9ibGVuZF8jI2Zvcm1hdF9uYW1lIChiX3NyYyArIGNvbXBfeG9mZnNldCAqIDIgKyBjb21wX3lvZmZzZXQgKiBzcmNfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIGJfZGVzdCArIGNvbXBfeHBvcyAqIDIgKyBjb21wX3lwb3MgKiBkZXN0X2NvbXBfcm93c3RyaWRlLCBcCi0gICAgICBzcmNfY29tcF9yb3dzdHJpZGUsIFwKLSAgICAgIGRlc3RfY29tcF9yb3dzdHJpZGUsIDIgKiBzcmNfY29tcF93aWR0aCwgc3JjX2NvbXBfaGVpZ2h0LCBcCi0gICAgICBzcmNfYWxwaGEpOyBcCi19Ci0KLSNkZWZpbmUgTlZfWVVWX0ZJTExfQ0hFQ0tFUihmb3JtYXRfbmFtZSwgTUVNU0VUKSAgICAgICAgXAotc3RhdGljIHZvaWQgXAotZmlsbF9jaGVja2VyXyMjZm9ybWF0X25hbWUgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkgXAoteyBcCi0gIGdpbnQgaSwgajsgXAotICBzdGF0aWMgY29uc3QgaW50IHRhYltdID0geyA4MCwgMTYwLCA4MCwgMTYwIH07IFwKLSAgZ3VpbnQ4ICpwOyBcCi0gIGdpbnQgY29tcF93aWR0aCwgY29tcF9oZWlnaHQ7IFwKLSAgZ2ludCByb3dzdHJpZGU7IFwKLSAgXAotICBwID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDApOyBcCi0gIGNvbXBfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZnJhbWUsIDApOyBcCi0gIGNvbXBfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMCk7IFwKLSAgcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMCk7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgY29tcF9oZWlnaHQ7IGkrKykgeyBcCi0gICAgZm9yIChqID0gMDsgaiA8IGNvbXBfd2lkdGg7IGorKykgeyBcCi0gICAgICAqcCsrID0gdGFiWygoaSAmIDB4OCkgPj4gMykgKyAoKGogJiAweDgpID4+IDMpXTsgXAotICAgIH0gXAotICAgIHAgKz0gcm93c3RyaWRlIC0gY29tcF93aWR0aDsgXAotICB9IFwKLSAgXAotICBwID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAxKTsgXAotICBjb21wX3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfV0lEVEggKGZyYW1lLCAxKTsgXAotICBjb21wX2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9DT01QX0hFSUdIVCAoZnJhbWUsIDEpOyBcCi0gIHJvd3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDEpOyBcCi0gIFwKLSAgZm9yIChpID0gMDsgaSA8IGNvbXBfaGVpZ2h0OyBpKyspIHsgXAotICAgIE1FTVNFVCAocCwgMHg4MCwgY29tcF93aWR0aCAqIDIpOyBcCi0gICAgcCArPSByb3dzdHJpZGU7IFwKLSAgfSBcCi19Ci0KLSNkZWZpbmUgTlZfWVVWX0ZJTExfQ09MT1IoZm9ybWF0X25hbWUsTUVNU0VUKSBcCi1zdGF0aWMgdm9pZCBcCi1maWxsX2NvbG9yXyMjZm9ybWF0X25hbWUgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgXAotICAgIGdpbnQgY29sWSwgZ2ludCBjb2xVLCBnaW50IGNvbFYpIFwKLXsgXAotICBndWludDggKnksICp1LCAqdjsgXAotICBnaW50IGNvbXBfd2lkdGgsIGNvbXBfaGVpZ2h0OyBcCi0gIGdpbnQgcm93c3RyaWRlOyBcCi0gIGdpbnQgaSwgajsgXAotICBcCi0gIHkgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9EQVRBIChmcmFtZSwgMCk7IFwKLSAgY29tcF93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIIChmcmFtZSwgMCk7IFwKLSAgY29tcF9oZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKGZyYW1lLCAwKTsgXAotICByb3dzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGZyYW1lLCAwKTsgXAotICBcCi0gIGZvciAoaSA9IDA7IGkgPCBjb21wX2hlaWdodDsgaSsrKSB7IFwKLSAgICBNRU1TRVQgKHksIGNvbFksIGNvbXBfd2lkdGgpOyBcCi0gICAgeSArPSByb3dzdHJpZGU7IFwKLSAgfSBcCi0gIFwKLSAgdSA9IEdTVF9WSURFT19GUkFNRV9DT01QX0RBVEEgKGZyYW1lLCAxKTsgXAotICB2ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoZnJhbWUsIDIpOyBcCi0gIGNvbXBfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfQ09NUF9XSURUSCAoZnJhbWUsIDEpOyBcCi0gIGNvbXBfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUIChmcmFtZSwgMSk7IFwKLSAgcm93c3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChmcmFtZSwgMSk7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgY29tcF9oZWlnaHQ7IGkrKykgeyBcCi0gICAgZm9yIChqID0gMDsgaiA8IGNvbXBfd2lkdGg7IGorKykgeyBcCi0gICAgICB1W2oqMl0gPSBjb2xVOyBcCi0gICAgICB2W2oqMl0gPSBjb2xWOyBcCi0gICAgfSBcCi0gICAgdSArPSByb3dzdHJpZGU7IFwKLSAgICB2ICs9IHJvd3N0cmlkZTsgXAotICB9IFwKLX0KLQotTlZfWVVWX0JMRU5EIChudjEyLCBtZW1jcHksIHZpZGVvX21peGVyX29yY19ibGVuZF91OCk7Ci1OVl9ZVVZfRklMTF9DSEVDS0VSIChudjEyLCBtZW1zZXQpOwotTlZfWVVWX0ZJTExfQ09MT1IgKG52MTIsIG1lbXNldCk7Ci1OVl9ZVVZfQkxFTkQgKG52MjEsIG1lbWNweSwgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX3U4KTsKLU5WX1lVVl9GSUxMX0NIRUNLRVIgKG52MjEsIG1lbXNldCk7Ci0KLS8qIFJHQiwgQkdSLCB4UkdCLCB4QkdSLCBSR0J4LCBCR1J4ICovCi0KLSNkZWZpbmUgUkdCX0JMRU5EKG5hbWUsIGJwcCwgTUVNQ1BZLCBCTEVORExPT1ApIFwKLXN0YXRpYyB2b2lkIFwKLWJsZW5kXyMjbmFtZSAoR3N0VmlkZW9GcmFtZSAqIHNyY2ZyYW1lLCBnaW50IHhwb3MsIGdpbnQgeXBvcywgXAotICAgIGdkb3VibGUgc3JjX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdGZyYW1lKSBcCi17IFwKLSAgZ2ludCBiX2FscGhhOyBcCi0gIGdpbnQgaTsgXAotICBnaW50IHNyY19zdHJpZGUsIGRlc3Rfc3RyaWRlOyBcCi0gIGdpbnQgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQ7IFwKLSAgZ3VpbnQ4ICpkZXN0LCAqc3JjOyBcCi0gIGdpbnQgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0OyBcCi0gIFwKLSAgc3JjX3dpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChzcmNmcmFtZSk7IFwKLSAgc3JjX2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKHNyY2ZyYW1lKTsgXAotICBcCi0gIHNyYyA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChzcmNmcmFtZSwgMCk7IFwKLSAgZGVzdCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBIChkZXN0ZnJhbWUsIDApOyBcCi0gIFwKLSAgZGVzdF93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZGVzdGZyYW1lKTsgXAotICBkZXN0X2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGRlc3RmcmFtZSk7IFwKLSAgXAotICBzcmNfc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfU1RSSURFIChzcmNmcmFtZSwgMCk7IFwKLSAgZGVzdF9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKGRlc3RmcmFtZSwgMCk7IFwKLSAgXAotICBiX2FscGhhID0gQ0xBTVAgKChnaW50KSAoc3JjX2FscGhhICogMjU2KSwgMCwgMjU2KTsgXAotICBcCi0gIC8qIGFkanVzdCBzcmMgcG9pbnRlcnMgZm9yIG5lZ2F0aXZlIHNpemVzICovIFwKLSAgaWYgKHhwb3MgPCAwKSB7IFwKLSAgICBzcmMgKz0gLXhwb3MgKiBicHA7IFwKLSAgICBzcmNfd2lkdGggLT0gLXhwb3M7IFwKLSAgICB4cG9zID0gMDsgXAotICB9IFwKLSAgaWYgKHlwb3MgPCAwKSB7IFwKLSAgICBzcmMgKz0gLXlwb3MgKiBzcmNfc3RyaWRlOyBcCi0gICAgc3JjX2hlaWdodCAtPSAteXBvczsgXAotICAgIHlwb3MgPSAwOyBcCi0gIH0gXAotICAvKiBhZGp1c3Qgd2lkdGgvaGVpZ2h0IGlmIHRoZSBzcmMgaXMgYmlnZ2VyIHRoYW4gZGVzdCAqLyBcCi0gIGlmICh4cG9zICsgc3JjX3dpZHRoID4gZGVzdF93aWR0aCkgeyBcCi0gICAgc3JjX3dpZHRoID0gZGVzdF93aWR0aCAtIHhwb3M7IFwKLSAgfSBcCi0gIGlmICh5cG9zICsgc3JjX2hlaWdodCA+IGRlc3RfaGVpZ2h0KSB7IFwKLSAgICBzcmNfaGVpZ2h0ID0gZGVzdF9oZWlnaHQgLSB5cG9zOyBcCi0gIH0gXAotICBcCi0gIGRlc3QgPSBkZXN0ICsgYnBwICogeHBvcyArICh5cG9zICogZGVzdF9zdHJpZGUpOyBcCi0gIC8qIElmIGl0J3MgY29tcGxldGVseSB0cmFuc3BhcmVudC4uLiB3ZSBqdXN0IHJldHVybiAqLyBcCi0gIGlmIChHX1VOTElLRUxZIChzcmNfYWxwaGEgPT0gMC4wKSkgeyBcCi0gICAgR1NUX0lORk8gKCJGYXN0IGNvcHkgKGFscGhhID09IDAuMCkiKTsgXAotICAgIHJldHVybjsgXAotICB9IFwKLSAgXAotICAvKiBJZiBpdCdzIGNvbXBsZXRlbHkgb3BhcXVlLCB3ZSBkbyBhIGZhc3QgY29weSAqLyBcCi0gIGlmIChHX1VOTElLRUxZIChzcmNfYWxwaGEgPT0gMS4wKSkgeyBcCi0gICAgR1NUX0lORk8gKCJGYXN0IGNvcHkgKGFscGhhID09IDEuMCkiKTsgXAotICAgIGZvciAoaSA9IDA7IGkgPCBzcmNfaGVpZ2h0OyBpKyspIHsgXAotICAgICAgTUVNQ1BZIChkZXN0LCBzcmMsIGJwcCAqIHNyY193aWR0aCk7IFwKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOyBcCi0gICAgICBkZXN0ICs9IGRlc3Rfc3RyaWRlOyBcCi0gICAgfSBcCi0gICAgcmV0dXJuOyBcCi0gIH0gXAotICBcCi0gIEJMRU5ETE9PUChkZXN0LCBkZXN0X3N0cmlkZSwgc3JjLCBzcmNfc3RyaWRlLCBiX2FscGhhLCBzcmNfd2lkdGggKiBicHAsIHNyY19oZWlnaHQpOyBcCi19Ci0KLSNkZWZpbmUgUkdCX0ZJTExfQ0hFQ0tFUl9DKG5hbWUsIGJwcCwgciwgZywgYikgXAotc3RhdGljIHZvaWQgXAotZmlsbF9jaGVja2VyXyMjbmFtZSMjX2MgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkgXAoteyBcCi0gIGdpbnQgaSwgajsgXAotICBzdGF0aWMgY29uc3QgaW50IHRhYltdID0geyA4MCwgMTYwLCA4MCwgMTYwIH07IFwKLSAgZ2ludCBzdHJpZGUsIGRlc3RfYWRkLCB3aWR0aCwgaGVpZ2h0OyBcCi0gIGd1aW50OCAqZGVzdDsgXAotICBcCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7IFwKLSAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoZnJhbWUpOyBcCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZnJhbWUsIDApOyBcCi0gIHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApOyBcCi0gIGRlc3RfYWRkID0gc3RyaWRlIC0gd2lkdGggKiBicHA7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsgXAotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7IFwKLSAgICAgIGRlc3Rbcl0gPSB0YWJbKChpICYgMHg4KSA+PiAzKSArICgoaiAmIDB4OCkgPj4gMyldOyAgICAgICAvKiByZWQgKi8gXAotICAgICAgZGVzdFtnXSA9IHRhYlsoKGkgJiAweDgpID4+IDMpICsgKChqICYgMHg4KSA+PiAzKV07ICAgICAgIC8qIGdyZWVuICovIFwKLSAgICAgIGRlc3RbYl0gPSB0YWJbKChpICYgMHg4KSA+PiAzKSArICgoaiAmIDB4OCkgPj4gMyldOyAgICAgICAvKiBibHVlICovIFwKLSAgICAgIGRlc3QgKz0gYnBwOyBcCi0gICAgfSBcCi0gICAgZGVzdCArPSBkZXN0X2FkZDsgXAotICB9IFwKLX0KLQotI2RlZmluZSBSR0JfRklMTF9DT0xPUihuYW1lLCBicHAsIE1FTVNFVF9SR0IpIFwKLXN0YXRpYyB2b2lkIFwKLWZpbGxfY29sb3JfIyNuYW1lIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIFwKLSAgICBnaW50IGNvbFksIGdpbnQgY29sVSwgZ2ludCBjb2xWKSBcCi17IFwKLSAgZ2ludCByZWQsIGdyZWVuLCBibHVlOyBcCi0gIGdpbnQgaTsgXAotICBnaW50IGRlc3Rfc3RyaWRlOyBcCi0gIGdpbnQgd2lkdGgsIGhlaWdodDsgXAotICBndWludDggKmRlc3Q7IFwKLSAgXAotICB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZnJhbWUpOyBcCi0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsgXAotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsgXAotICBkZXN0X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApOyBcCi0gIFwKLSAgcmVkID0gWVVWX1RPX1IgKGNvbFksIGNvbFUsIGNvbFYpOyBcCi0gIGdyZWVuID0gWVVWX1RPX0cgKGNvbFksIGNvbFUsIGNvbFYpOyBcCi0gIGJsdWUgPSBZVVZfVE9fQiAoY29sWSwgY29sVSwgY29sVik7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsgXAotICAgIE1FTVNFVF9SR0IgKGRlc3QsIHJlZCwgZ3JlZW4sIGJsdWUsIHdpZHRoKTsgXAotICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7IFwKLSAgfSBcCi19Ci0KLSNkZWZpbmUgTUVNU0VUX1JHQl9DKG5hbWUsIHIsIGcsIGIpIFwKLXN0YXRpYyBpbmxpbmUgdm9pZCBcCi1fbWVtc2V0XyMjbmFtZSMjX2MgKGd1aW50OCogZGVzdCwgZ2ludCByZWQsIGdpbnQgZ3JlZW4sIGdpbnQgYmx1ZSwgZ2ludCB3aWR0aCkgeyBcCi0gIGdpbnQgajsgXAotICBcCi0gIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7IFwKLSAgICBkZXN0W3JdID0gcmVkOyBcCi0gICAgZGVzdFtnXSA9IGdyZWVuOyBcCi0gICAgZGVzdFtiXSA9IGJsdWU7IFwKLSAgICBkZXN0ICs9IDM7IFwKLSAgfSBcCi19Ci0KLSNkZWZpbmUgTUVNU0VUX1hSR0IobmFtZSwgciwgZywgYikgXAotc3RhdGljIGlubGluZSB2b2lkIFwKLV9tZW1zZXRfIyNuYW1lIChndWludDgqIGRlc3QsIGdpbnQgcmVkLCBnaW50IGdyZWVuLCBnaW50IGJsdWUsIGdpbnQgd2lkdGgpIHsgXAotICBndWludDMyIHZhbDsgXAotICBcCi0gIHZhbCA9IEdVSU5UMzJfRlJPTV9CRSAoKHJlZCA8PCByKSB8IChncmVlbiA8PCBnKSB8IChibHVlIDw8IGIpKTsgXAotICB2aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyICgoZ3VpbnQzMiAqKSBkZXN0LCB2YWwsIHdpZHRoKTsgXAotfQotCi0jZGVmaW5lIF9vcmNfbWVtY3B5X3UzMihkZXN0LHNyYyxsZW4pIHZpZGVvX21peGVyX29yY19tZW1jcHlfdTMyKChndWludDMyICopIGRlc3QsIChjb25zdCBndWludDMyICopIHNyYywgbGVuLzQpCi0KLVJHQl9CTEVORCAocmdiLCAzLCBtZW1jcHksIHZpZGVvX21peGVyX29yY19ibGVuZF91OCk7Ci1SR0JfRklMTF9DSEVDS0VSX0MgKHJnYiwgMywgMCwgMSwgMik7Ci1NRU1TRVRfUkdCX0MgKHJnYiwgMCwgMSwgMik7Ci1SR0JfRklMTF9DT0xPUiAocmdiX2MsIDMsIF9tZW1zZXRfcmdiX2MpOwotCi1NRU1TRVRfUkdCX0MgKGJnciwgMiwgMSwgMCk7Ci1SR0JfRklMTF9DT0xPUiAoYmdyX2MsIDMsIF9tZW1zZXRfYmdyX2MpOwotCi1SR0JfQkxFTkQgKHhyZ2IsIDQsIF9vcmNfbWVtY3B5X3UzMiwgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX3U4KTsKLVJHQl9GSUxMX0NIRUNLRVJfQyAoeHJnYiwgNCwgMSwgMiwgMyk7Ci1NRU1TRVRfWFJHQiAoeHJnYiwgMjQsIDE2LCAwKTsKLVJHQl9GSUxMX0NPTE9SICh4cmdiLCA0LCBfbWVtc2V0X3hyZ2IpOwotCi1NRU1TRVRfWFJHQiAoeGJnciwgMCwgMTYsIDI0KTsKLVJHQl9GSUxMX0NPTE9SICh4YmdyLCA0LCBfbWVtc2V0X3hiZ3IpOwotCi1NRU1TRVRfWFJHQiAocmdieCwgMjQsIDE2LCA4KTsKLVJHQl9GSUxMX0NPTE9SIChyZ2J4LCA0LCBfbWVtc2V0X3JnYngpOwotCi1NRU1TRVRfWFJHQiAoYmdyeCwgOCwgMTYsIDI0KTsKLVJHQl9GSUxMX0NPTE9SIChiZ3J4LCA0LCBfbWVtc2V0X2JncngpOwotCi0vKiBZVVkyLCBZVllVLCBVWVZZICovCi0KLSNkZWZpbmUgUEFDS0VEXzQyMl9CTEVORChuYW1lLCBNRU1DUFksIEJMRU5ETE9PUCkgXAotc3RhdGljIHZvaWQgXAotYmxlbmRfIyNuYW1lIChHc3RWaWRlb0ZyYW1lICogc3JjZnJhbWUsIGdpbnQgeHBvcywgZ2ludCB5cG9zLCBcCi0gICAgZ2RvdWJsZSBzcmNfYWxwaGEsIEdzdFZpZGVvRnJhbWUgKiBkZXN0ZnJhbWUpIFwKLXsgXAotICBnaW50IGJfYWxwaGE7IFwKLSAgZ2ludCBpOyBcCi0gIGdpbnQgc3JjX3N0cmlkZSwgZGVzdF9zdHJpZGU7IFwKLSAgZ2ludCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodDsgXAotICBndWludDggKnNyYywgKmRlc3Q7IFwKLSAgZ2ludCBzcmNfd2lkdGgsIHNyY19oZWlnaHQ7IFwKLSAgXAotICBzcmNfd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEggKHNyY2ZyYW1lKTsgXAotICBzcmNfaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCAoc3JjZnJhbWUpOyBcCi0gIFwKLSAgZGVzdF93aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCAoZGVzdGZyYW1lKTsgXAotICBkZXN0X2hlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGRlc3RmcmFtZSk7IFwKLSAgXAotICBzcmMgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoc3JjZnJhbWUsIDApOyBcCi0gIGRlc3QgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSAoZGVzdGZyYW1lLCAwKTsgXAotICBcCi0gIHNyY19zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfQ09NUF9TVFJJREUgKHNyY2ZyYW1lLCAwKTsgXAotICBkZXN0X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZGVzdGZyYW1lLCAwKTsgXAotICBcCi0gIGJfYWxwaGEgPSBDTEFNUCAoKGdpbnQpIChzcmNfYWxwaGEgKiAyNTYpLCAwLCAyNTYpOyBcCi0gIFwKLSAgeHBvcyA9IEdTVF9ST1VORF9VUF8yICh4cG9zKTsgXAotICBcCi0gIC8qIGFkanVzdCBzcmMgcG9pbnRlcnMgZm9yIG5lZ2F0aXZlIHNpemVzICovIFwKLSAgaWYgKHhwb3MgPCAwKSB7IFwKLSAgICBzcmMgKz0gLXhwb3MgKiAyOyBcCi0gICAgc3JjX3dpZHRoIC09IC14cG9zOyBcCi0gICAgeHBvcyA9IDA7IFwKLSAgfSBcCi0gIGlmICh5cG9zIDwgMCkgeyBcCi0gICAgc3JjICs9IC15cG9zICogc3JjX3N0cmlkZTsgXAotICAgIHNyY19oZWlnaHQgLT0gLXlwb3M7IFwKLSAgICB5cG9zID0gMDsgXAotICB9IFwKLSAgXAotICAvKiBhZGp1c3Qgd2lkdGgvaGVpZ2h0IGlmIHRoZSBzcmMgaXMgYmlnZ2VyIHRoYW4gZGVzdCAqLyBcCi0gIGlmICh4cG9zICsgc3JjX3dpZHRoID4gZGVzdF93aWR0aCkgeyBcCi0gICAgc3JjX3dpZHRoID0gZGVzdF93aWR0aCAtIHhwb3M7IFwKLSAgfSBcCi0gIGlmICh5cG9zICsgc3JjX2hlaWdodCA+IGRlc3RfaGVpZ2h0KSB7IFwKLSAgICBzcmNfaGVpZ2h0ID0gZGVzdF9oZWlnaHQgLSB5cG9zOyBcCi0gIH0gXAotICBcCi0gIGRlc3QgPSBkZXN0ICsgMiAqIHhwb3MgKyAoeXBvcyAqIGRlc3Rfc3RyaWRlKTsgXAotICAvKiBJZiBpdCdzIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQuLi4gd2UganVzdCByZXR1cm4gKi8gXAotICBpZiAoR19VTkxJS0VMWSAoc3JjX2FscGhhID09IDAuMCkpIHsgXAotICAgIEdTVF9JTkZPICgiRmFzdCBjb3B5IChhbHBoYSA9PSAwLjApIik7IFwKLSAgICByZXR1cm47IFwKLSAgfSBcCi0gIFwKLSAgLyogSWYgaXQncyBjb21wbGV0ZWx5IG9wYXF1ZSwgd2UgZG8gYSBmYXN0IGNvcHkgKi8gXAotICBpZiAoR19VTkxJS0VMWSAoc3JjX2FscGhhID09IDEuMCkpIHsgXAotICAgIEdTVF9JTkZPICgiRmFzdCBjb3B5IChhbHBoYSA9PSAxLjApIik7IFwKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3JjX2hlaWdodDsgaSsrKSB7IFwKLSAgICAgIE1FTUNQWSAoZGVzdCwgc3JjLCAyICogc3JjX3dpZHRoKTsgXAotICAgICAgc3JjICs9IHNyY19zdHJpZGU7IFwKLSAgICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7IFwKLSAgICB9IFwKLSAgICByZXR1cm47IFwKLSAgfSBcCi0gIFwKLSAgQkxFTkRMT09QKGRlc3QsIGRlc3Rfc3RyaWRlLCBzcmMsIHNyY19zdHJpZGUsIGJfYWxwaGEsIDIgKiBzcmNfd2lkdGgsIHNyY19oZWlnaHQpOyBcCi19Ci0KLSNkZWZpbmUgUEFDS0VEXzQyMl9GSUxMX0NIRUNLRVJfQyhuYW1lLCBZMSwgVSwgWTIsIFYpIFwKLXN0YXRpYyB2b2lkIFwKLWZpbGxfY2hlY2tlcl8jI25hbWUjI19jIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpIFwKLXsgXAotICBnaW50IGksIGo7IFwKLSAgc3RhdGljIGNvbnN0IGludCB0YWJbXSA9IHsgODAsIDE2MCwgODAsIDE2MCB9OyBcCi0gIGdpbnQgZGVzdF9hZGQ7IFwKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OyBcCi0gIGd1aW50OCAqZGVzdDsgXAotICBcCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7IFwKLSAgd2lkdGggPSBHU1RfUk9VTkRfVVBfMiAod2lkdGgpOyBcCi0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsgXAotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsgXAotICBkZXN0X2FkZCA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApIC0gd2lkdGggKiAyOyBcCi0gIHdpZHRoIC89IDI7IFwKLSAgXAotICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsgXAotICAgIGZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7IFwKLSAgICAgIGRlc3RbWTFdID0gdGFiWygoaSAmIDB4OCkgPj4gMykgKyAoKGogJiAweDgpID4+IDMpXTsgXAotICAgICAgZGVzdFtZMl0gPSB0YWJbKChpICYgMHg4KSA+PiAzKSArICgoaiAmIDB4OCkgPj4gMyldOyBcCi0gICAgICBkZXN0W1VdID0gMTI4OyBcCi0gICAgICBkZXN0W1ZdID0gMTI4OyBcCi0gICAgICBkZXN0ICs9IDQ7IFwKLSAgICB9IFwKLSAgICBkZXN0ICs9IGRlc3RfYWRkOyBcCi0gIH0gXAotfQotCi0jZGVmaW5lIFBBQ0tFRF80MjJfRklMTF9DT0xPUihuYW1lLCBZMSwgVSwgWTIsIFYpIFwKLXN0YXRpYyB2b2lkIFwKLWZpbGxfY29sb3JfIyNuYW1lIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIFwKLSAgICBnaW50IGNvbFksIGdpbnQgY29sVSwgZ2ludCBjb2xWKSBcCi17IFwKLSAgZ2ludCBpOyBcCi0gIGdpbnQgZGVzdF9zdHJpZGU7IFwKLSAgZ3VpbnQzMiB2YWw7IFwKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OyBcCi0gIGd1aW50OCAqZGVzdDsgXAotICBcCi0gIHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIIChmcmFtZSk7IFwKLSAgd2lkdGggPSBHU1RfUk9VTkRfVVBfMiAod2lkdGgpOyBcCi0gIGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKGZyYW1lKTsgXAotICBkZXN0ID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKGZyYW1lLCAwKTsgXAotICBkZXN0X3N0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1NUUklERSAoZnJhbWUsIDApOyBcCi0gIHdpZHRoIC89IDI7IFwKLSAgXAotICB2YWwgPSBHVUlOVDMyX0ZST01fQkUgKChjb2xZIDw8IFkxKSB8IChjb2xZIDw8IFkyKSB8IChjb2xVIDw8IFUpIHwgKGNvbFYgPDwgVikpOyBcCi0gIFwKLSAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7IFwKLSAgICB2aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyICgoZ3VpbnQzMiAqKSBkZXN0LCB2YWwsIHdpZHRoKTsgXAotICAgIGRlc3QgKz0gZGVzdF9zdHJpZGU7IFwKLSAgfSBcCi19Ci0KLVBBQ0tFRF80MjJfQkxFTkQgKHl1eTIsIG1lbWNweSwgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX3U4KTsKLVBBQ0tFRF80MjJfRklMTF9DSEVDS0VSX0MgKHl1eTIsIDAsIDEsIDIsIDMpOwotUEFDS0VEXzQyMl9GSUxMX0NIRUNLRVJfQyAodXl2eSwgMSwgMCwgMywgMik7Ci1QQUNLRURfNDIyX0ZJTExfQ09MT1IgKHl1eTIsIDI0LCAxNiwgOCwgMCk7Ci1QQUNLRURfNDIyX0ZJTExfQ09MT1IgKHl2eXUsIDI0LCAwLCA4LCAxNik7Ci1QQUNLRURfNDIyX0ZJTExfQ09MT1IgKHV5dnksIDE2LCAyNCwgMCwgOCk7Ci0KLS8qIEluaXQgZnVuY3Rpb24gKi8KLUJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX2FyZ2I7Ci1CbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9iZ3JhOwotQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9hcmdiOwotQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9iZ3JhOwotLyogQVlVVi9BQkdSIGlzIGVxdWFsIHRvIEFSR0IsIFJHQkEgaXMgZXF1YWwgdG8gQkdSQSAqLwotQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeTQ0NDsKLUJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3k0MmI7Ci1CbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9pNDIwOwotLyogSTQyMCBpcyBlcXVhbCB0byBZVjEyICovCi1CbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9udjEyOwotQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfbnYyMTsKLUJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3k0MWI7Ci1CbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9yZ2I7Ci0vKiBCR1IgaXMgZXF1YWwgdG8gUkdCICovCi1CbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9yZ2J4OwotLyogQkdSeCwgeFJHQiwgeEJHUiBhcmUgZXF1YWwgdG8gUkdCeCAqLwotQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeXV5MjsKLS8qIFlWWVUgYW5kIFVZVlkgYXJlIGVxdWFsIHRvIFlVWTIgKi8KLQotRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2FyZ2I7Ci1GaWxsQ2hlY2tlckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYmdyYTsKLS8qIEFCR1IgaXMgZXF1YWwgdG8gQVJHQiwgUkdCQSBpcyBlcXVhbCB0byBCR1JBICovCi1GaWxsQ2hlY2tlckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYXl1djsKLUZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDQ0OwotRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3k0MmI7Ci1GaWxsQ2hlY2tlckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfaTQyMDsKLS8qIEk0MjAgaXMgZXF1YWwgdG8gWVYxMiAqLwotRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX252MTI7Ci1GaWxsQ2hlY2tlckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfbnYyMTsKLUZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDFiOwotRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3JnYjsKLS8qIEJHUiBpcyBlcXVhbCB0byBSR0IgKi8KLUZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl94cmdiOwotLyogQkdSeCwgeFJHQiwgeEJHUiBhcmUgZXF1YWwgdG8gUkdCeCAqLwotRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3l1eTI7Ci0vKiBZVllVIGlzIGVxdWFsIHRvIFlVWTIgKi8KLUZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl91eXZ5OwotCi1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9hcmdiOwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyYTsKLUZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX2FiZ3I7Ci1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2JhOwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYXl1djsKLUZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3k0NDQ7Ci1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDJiOwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfaTQyMDsKLUZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3l2MTI7Ci1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9udjEyOwotLyogTlYyMSBpcyBlcXVhbCB0byBOVjEyICovCi1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDFiOwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfcmdiOwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyOwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeHJnYjsKLUZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3hiZ3I7Ci1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2J4OwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyeDsKLUZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3l1eTI7Ci1GaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95dnl1OwotRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfdXl2eTsKLQotdm9pZAotZ3N0X3ZpZGVvX21peGVyX2luaXRfYmxlbmQgKHZvaWQpCi17Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfdmlkZW9taXhlcl9ibGVuZF9kZWJ1ZywgInZpZGVvbWl4ZXJfYmxlbmQiLCAwLAotICAgICAgInZpZGVvIG1peGVyIGJsZW5kaW5nIGZ1bmN0aW9ucyIpOwotCi0gIGdzdF92aWRlb19taXhlcl9ibGVuZF9hcmdiID0gYmxlbmRfYXJnYjsKLSAgZ3N0X3ZpZGVvX21peGVyX2JsZW5kX2JncmEgPSBibGVuZF9iZ3JhOwotICBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9hcmdiID0gb3ZlcmxheV9hcmdiOwotICBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9iZ3JhID0gb3ZlcmxheV9iZ3JhOwotICBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfaTQyMCA9IGJsZW5kX2k0MjA7Ci0gIGdzdF92aWRlb19taXhlcl9ibGVuZF9udjEyID0gYmxlbmRfbnYxMjsKLSAgZ3N0X3ZpZGVvX21peGVyX2JsZW5kX252MjEgPSBibGVuZF9udjIxOwotICBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeTQ0NCA9IGJsZW5kX3k0NDQ7Ci0gIGdzdF92aWRlb19taXhlcl9ibGVuZF95NDJiID0gYmxlbmRfeTQyYjsKLSAgZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3k0MWIgPSBibGVuZF95NDFiOwotICBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdiID0gYmxlbmRfcmdiOwotICBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeHJnYiA9IGJsZW5kX3hyZ2I7Ci0gIGdzdF92aWRlb19taXhlcl9ibGVuZF95dXkyID0gYmxlbmRfeXV5MjsKLQotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2FyZ2IgPSBmaWxsX2NoZWNrZXJfYXJnYl9jOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2JncmEgPSBmaWxsX2NoZWNrZXJfYmdyYV9jOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2F5dXYgPSBmaWxsX2NoZWNrZXJfYXl1dl9jOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2k0MjAgPSBmaWxsX2NoZWNrZXJfaTQyMDsKLSAgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9udjEyID0gZmlsbF9jaGVja2VyX252MTI7Ci0gIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfbnYyMSA9IGZpbGxfY2hlY2tlcl9udjIxOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3k0NDQgPSBmaWxsX2NoZWNrZXJfeTQ0NDsKLSAgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDJiID0gZmlsbF9jaGVja2VyX3k0MmI7Ci0gIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfeTQxYiA9IGZpbGxfY2hlY2tlcl95NDFiOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3JnYiA9IGZpbGxfY2hlY2tlcl9yZ2JfYzsKLSAgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl94cmdiID0gZmlsbF9jaGVja2VyX3hyZ2JfYzsKLSAgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95dXkyID0gZmlsbF9jaGVja2VyX3l1eTJfYzsKLSAgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl91eXZ5ID0gZmlsbF9jaGVja2VyX3V5dnlfYzsKLQotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9hcmdiID0gZmlsbF9jb2xvcl9hcmdiOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9iZ3JhID0gZmlsbF9jb2xvcl9iZ3JhOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9hYmdyID0gZmlsbF9jb2xvcl9hYmdyOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2JhID0gZmlsbF9jb2xvcl9yZ2JhOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9heXV2ID0gZmlsbF9jb2xvcl9heXV2OwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9pNDIwID0gZmlsbF9jb2xvcl9pNDIwOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95djEyID0gZmlsbF9jb2xvcl95djEyOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9udjEyID0gZmlsbF9jb2xvcl9udjEyOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDQ0ID0gZmlsbF9jb2xvcl95NDQ0OwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDJiID0gZmlsbF9jb2xvcl95NDJiOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDFiID0gZmlsbF9jb2xvcl95NDFiOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2IgPSBmaWxsX2NvbG9yX3JnYl9jOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9iZ3IgPSBmaWxsX2NvbG9yX2Jncl9jOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl94cmdiID0gZmlsbF9jb2xvcl94cmdiOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl94YmdyID0gZmlsbF9jb2xvcl94YmdyOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2J4ID0gZmlsbF9jb2xvcl9yZ2J4OwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9iZ3J4ID0gZmlsbF9jb2xvcl9iZ3J4OwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95dXkyID0gZmlsbF9jb2xvcl95dXkyOwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95dnl1ID0gZmlsbF9jb2xvcl95dnl1OwotICBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl91eXZ5ID0gZmlsbF9jb2xvcl91eXZ5OwotfQpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaCBiL2dzdC92aWRlb21peGVyL2JsZW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMTZjNTYuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvbWl4ZXIvYmxlbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQkxFTkRfSF9fCi0jZGVmaW5lIF9fQkxFTkRfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLXR5cGVkZWYgdm9pZCAoKkJsZW5kRnVuY3Rpb24pIChHc3RWaWRlb0ZyYW1lICpzcmNmcmFtZSwgZ2ludCB4cG9zLCBnaW50IHlwb3MsIGdkb3VibGUgc3JjX2FscGhhLCBHc3RWaWRlb0ZyYW1lICogZGVzdGZyYW1lKTsKLXR5cGVkZWYgdm9pZCAoKkZpbGxDaGVja2VyRnVuY3Rpb24pIChHc3RWaWRlb0ZyYW1lICogZnJhbWUpOwotdHlwZWRlZiB2b2lkICgqRmlsbENvbG9yRnVuY3Rpb24pIChHc3RWaWRlb0ZyYW1lICogZnJhbWUsIGdpbnQgYzEsIGdpbnQgYzIsIGdpbnQgYzMpOwotCi1leHRlcm4gQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYXJnYjsKLWV4dGVybiBCbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9iZ3JhOwotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYXl1diBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYXJnYgotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYWJnciBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYXJnYgotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdiYSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYmdyYQotZXh0ZXJuIEJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX292ZXJsYXlfYXJnYjsKLWV4dGVybiBCbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9vdmVybGF5X2JncmE7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9vdmVybGF5X2F5dXYgZ3N0X3ZpZGVvX21peGVyX292ZXJsYXlfYXJnYgotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9hYmdyIGdzdF92aWRlb19taXhlcl9vdmVybGF5X2FyZ2IKLSNkZWZpbmUgZ3N0X3ZpZGVvX21peGVyX292ZXJsYXlfcmdiYSBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9iZ3JhCi1leHRlcm4gQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfaTQyMDsKLSNkZWZpbmUgZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3l2MTIgZ3N0X3ZpZGVvX21peGVyX2JsZW5kX2k0MjAKLWV4dGVybiBCbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9udjEyOwotZXh0ZXJuIEJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX252MjE7Ci1leHRlcm4gQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeTQxYjsKLWV4dGVybiBCbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF95NDJiOwotZXh0ZXJuIEJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3k0NDQ7Ci1leHRlcm4gQmxlbmRGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdiOwotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYmdyIGdzdF92aWRlb19taXhlcl9ibGVuZF9yZ2IKLWV4dGVybiBCbGVuZEZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9ibGVuZF9yZ2J4OwotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYmdyeCBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdieAotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeHJnYiBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdieAotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeGJnciBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdieAotZXh0ZXJuIEJsZW5kRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3l1eTI7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9ibGVuZF91eXZ5IGdzdF92aWRlb19taXhlcl9ibGVuZF95dXkyOwotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeXZ5dSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeXV5MjsKLQotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9hcmdiOwotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2FiZ3IgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9hcmdiCi1leHRlcm4gRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2JncmE7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfcmdiYSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2JncmEKLWV4dGVybiBGaWxsQ2hlY2tlckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYXl1djsKLWV4dGVybiBGaWxsQ2hlY2tlckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfaTQyMDsKLSNkZWZpbmUgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95djEyIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfaTQyMAotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9udjEyOwotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9udjIxOwotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDFiOwotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDJiOwotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDQ0OwotZXh0ZXJuIEZpbGxDaGVja2VyRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9yZ2I7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYmdyIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfcmdiCi1leHRlcm4gRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3JnYng7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYmdyeCBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3JnYngKLSNkZWZpbmUgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl94cmdiIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfcmdieAotI2RlZmluZSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3hiZ3IgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9yZ2J4Ci1leHRlcm4gRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3l1eTI7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfeXZ5dSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3l1eTI7Ci1leHRlcm4gRmlsbENoZWNrZXJGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3V5dnk7Ci0KLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9hcmdiOwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX2FiZ3I7Ci1leHRlcm4gRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyYTsKLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2JhOwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX2F5dXY7Ci1leHRlcm4gRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfaTQyMDsKLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95djEyOwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX252MTI7Ci0jZGVmaW5lIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX252MjEgZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfbnYxMjsKLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDFiOwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3k0MmI7Ci1leHRlcm4gRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeTQ0NDsKLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2I7Ci1leHRlcm4gRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyOwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3hyZ2I7Ci1leHRlcm4gRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeGJncjsKLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2J4OwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX2Jncng7Ci1leHRlcm4gRmlsbENvbG9yRnVuY3Rpb24gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeXV5MjsKLWV4dGVybiBGaWxsQ29sb3JGdW5jdGlvbiBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95dnl1OwotZXh0ZXJuIEZpbGxDb2xvckZ1bmN0aW9uIGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3V5dnk7Ci0KLXZvaWQgZ3N0X3ZpZGVvX21peGVyX2luaXRfYmxlbmQgKHZvaWQpOwotCi0jZW5kaWYgLyogX19CTEVORF9IX18gKi8KZGlmZiAtLWdpdCBhL2dzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmMgYi9nc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmYyZGE4Li4wMDAwMDAwCi0tLSBhL2dzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkxICswLDAgQEAKLS8qIEdlbmVyaWMgdmlkZW8gbWl4ZXIgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC12aWRlb21peGVyCi0gKgotICogVmlkZW9taXhlciBjYW4gYWNjZXB0IEFZVVYsIEFSR0IgYW5kIEJHUkEgdmlkZW8gc3RyZWFtcy4gRm9yIGVhY2ggb2YgdGhlIHJlcXVlc3RlZAotICogc2luayBwYWRzIGl0IHdpbGwgY29tcGFyZSB0aGUgaW5jb21pbmcgZ2VvbWV0cnkgYW5kIGZyYW1lcmF0ZSB0byBkZWZpbmUgdGhlCi0gKiBvdXRwdXQgcGFyYW1ldGVycy4gSW5kZWVkIG91dHB1dCB2aWRlbyBmcmFtZXMgd2lsbCBoYXZlIHRoZSBnZW9tZXRyeSBvZiB0aGUKLSAqIGJpZ2dlc3QgaW5jb21pbmcgdmlkZW8gc3RyZWFtIGFuZCB0aGUgZnJhbWVyYXRlIG9mIHRoZSBmYXN0ZXN0IGluY29taW5nIG9uZS4KLSAqCi0gKiBWaWRlb21peGVyIHdpbGwgZG8gY29sb3JzcGFjZSBjb252ZXJzaW9uLgotICogCi0gKiBJbmRpdmlkdWFsIHBhcmFtZXRlcnMgZm9yIGVhY2ggaW5wdXQgc3RyZWFtIGNhbiBiZSBjb25maWd1cmVkIG9uIHRoZQotICogI0dzdFZpZGVvTWl4ZXIyUGFkLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5TYW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBcCi0gKiAgIHZpZGVvdGVzdHNyYyBwYXR0ZXJuPTEgISBcCi0gKiAgIHZpZGVvL3gtcmF3LGZvcm1hdD1BWVVWLGZyYW1lcmF0ZT1cKGZyYWN0aW9uXCkxMC8xLHdpZHRoPTEwMCxoZWlnaHQ9MTAwICEgXAotICogICB2aWRlb2JveCBib3JkZXItYWxwaGE9MCB0b3A9LTcwIGJvdHRvbT0tNzAgcmlnaHQ9LTIyMCAhIFwKLSAqICAgdmlkZW9taXhlciBuYW1lPW1peCBzaW5rXzA6OmFscGhhPTAuNyBzaW5rXzE6OmFscGhhPTAuNSAhIFwKLSAqICAgdmlkZW9jb252ZXJ0ICEgeHZpbWFnZXNpbmsgXAotICogICB2aWRlb3Rlc3RzcmMgISBcCi0gKiAgIHZpZGVvL3gtcmF3LGZvcm1hdD1BWVVWLGZyYW1lcmF0ZT1cKGZyYWN0aW9uXCk1LzEsd2lkdGg9MzIwLGhlaWdodD0yNDAgISBtaXguCi0gKiBdfCBBIHBpcGVsaW5lIHRvIGRlbW9uc3RyYXRlIHZpZGVvbWl4ZXIgdXNlZCB0b2dldGhlciB3aXRoIHZpZGVvYm94LgotICogVGhpcyBzaG91bGQgc2hvdyBhIDMyMHgyNDAgcGl4ZWxzIHZpZGVvIHRlc3Qgc291cmNlIHdpdGggc29tZSB0cmFuc3BhcmVuY3kKLSAqIHNob3dpbmcgdGhlIGJhY2tncm91bmQgY2hlY2tlciBwYXR0ZXJuLiBBbm90aGVyIHZpZGVvIHRlc3Qgc291cmNlIHdpdGgganVzdAotICogdGhlIHNub3cgcGF0dGVybiBvZiAxMDB4MTAwIHBpeGVscyBpcyBvdmVybGFpZCBvbiB0b3Agb2YgdGhlIGZpcnN0IG9uZSBvbgotICogdGhlIGxlZnQgdmVydGljYWxseSBjZW50ZXJlZCB3aXRoIGEgc21hbGwgdHJhbnNwYXJlbmN5IHNob3dpbmcgdGhlIGZpcnN0Ci0gKiB2aWRlbyB0ZXN0IHNvdXJjZSBiZWhpbmQgYW5kIHRoZSBjaGVja2VyIHBhdHRlcm4gdW5kZXIgaXQuIE5vdGUgdGhhdCB0aGUKLSAqIGZyYW1lcmF0ZSBvZiB0aGUgb3V0cHV0IHZpZGVvIGlzIDEwIGZyYW1lcyBwZXIgc2Vjb25kLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHZpZGVvdGVzdHNyYyBwYXR0ZXJuPTEgISBcCi0gKiAgIHZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9XChmcmFjdGlvblwpMTAvMSwgd2lkdGg9MTAwLCBoZWlnaHQ9MTAwICEgXAotICogICB2aWRlb21peGVyIG5hbWU9bWl4ICEgdmlkZW9jb252ZXJ0ICEgeGltYWdlc2luayBcCi0gKiAgIHZpZGVvdGVzdHNyYyAhICBcCi0gKiAgIHZpZGVvL3gtcmF3LCBmcmFtZXJhdGU9XChmcmFjdGlvblwpNS8xLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAgISBtaXguCi0gKiBdfCBBIHBpcGVsaW5lIHRvIGRlbW9zdHJhdGUgYmdyYSBtaXhpbmcuIChUaGlzIGRvZXMgbm90IGRlbW9uc3RyYXRlIGFscGhhIGJsZW5kaW5nKS4gCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdmlkZW90ZXN0c3JjIHBhdHRlcm49MSAhIFwKLSAqICAgdmlkZW8veC1yYXcsZm9ybWF0ID1JNDIwLCBmcmFtZXJhdGU9XChmcmFjdGlvblwpMTAvMSwgd2lkdGg9MTAwLCBoZWlnaHQ9MTAwICEgXAotICogICB2aWRlb21peGVyIG5hbWU9bWl4ICEgdmlkZW9jb252ZXJ0ICEgeGltYWdlc2luayBcCi0gKiAgIHZpZGVvdGVzdHNyYyAhIFwKLSAqICAgdmlkZW8veC1yYXcsZm9ybWF0PUk0MjAsIGZyYW1lcmF0ZT1cKGZyYWN0aW9uXCk1LzEsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCAhIG1peC4KLSAqIF18IEEgcGlwZWxpbmUgdG8gdGVzdCBJNDIwCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdmlkZW9taXhlciBuYW1lPW1peGVyIHNpbmtfMTo6YWxwaGE9MC41IHNpbmtfMTo6eHBvcz01MCBzaW5rXzE6Onlwb3M9NTAgISBcCi0gKiAgIHZpZGVvY29udmVydCAhIHhpbWFnZXNpbmsgXAotICogICB2aWRlb3Rlc3RzcmMgcGF0dGVybj1zbm93IHRpbWVzdGFtcC1vZmZzZXQ9MzAwMDAwMDAwMCAhIFwKLSAqICAgInZpZGVvL3gtcmF3LGZvcm1hdD1BWVVWLHdpZHRoPTY0MCxoZWlnaHQ9NDgwLGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSIgISBcCi0gKiAgIHRpbWVvdmVybGF5ICEgcXVldWUyICEgbWl4ZXIuIFwKLSAqICAgdmlkZW90ZXN0c3JjIHBhdHRlcm49c21wdGUgISBcCi0gKiAgICJ2aWRlby94LXJhdyxmb3JtYXQ9QVlVVix3aWR0aD04MDAsaGVpZ2h0PTYwMCxmcmFtZXJhdGU9KGZyYWN0aW9uKTEwLzEiICEgXAotICogICB0aW1lb3ZlcmxheSAhIHF1ZXVlMiAhIG1peGVyLgotICogXXwgQSBwaXBlbGluZSB0byBkZW1vbnN0cmF0ZSBzeW5jaHJvbml6ZWQgbWl4aW5nICh0aGUgc2Vjb25kIHN0cmVhbSBzdGFydHMgYWZ0ZXIgMyBzZWNvbmRzKQotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgInZpZGVvbWl4ZXIyLmgiCi0jaW5jbHVkZSAidmlkZW9taXhlcjJwYWQuaCIKLQotI2lmZGVmIERJU0FCTEVfT1JDCi0jZGVmaW5lIG9yY19tZW1zZXQgbWVtc2V0Ci0jZWxzZQotI2luY2x1ZGUgPG9yYy9vcmNmdW5jdGlvbnMuaD4KLSNlbmRpZgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChnc3RfdmlkZW9taXhlcjJfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X3ZpZGVvbWl4ZXIyX2RlYnVnCi0KLSNkZWZpbmUgR1NUX1ZJREVPX01JWEVSMl9HRVRfTE9DSyhtaXgpIFwKLSAgKCZHU1RfVklERU9fTUlYRVIyKG1peCktPmxvY2spCi0jZGVmaW5lIEdTVF9WSURFT19NSVhFUjJfTE9DSyhtaXgpIFwKLSAgKGdfbXV0ZXhfbG9jayhHU1RfVklERU9fTUlYRVIyX0dFVF9MT0NLIChtaXgpKSkKLSNkZWZpbmUgR1NUX1ZJREVPX01JWEVSMl9VTkxPQ0sobWl4KSBcCi0gIChnX211dGV4X3VubG9jayhHU1RfVklERU9fTUlYRVIyX0dFVF9MT0NLIChtaXgpKSkKLSNkZWZpbmUgR1NUX1ZJREVPX01JWEVSMl9HRVRfU0VUQ0FQU19MT0NLKG1peCkgXAotICAoJkdTVF9WSURFT19NSVhFUjIobWl4KS0+c2V0Y2Fwc19sb2NrKQotI2RlZmluZSBHU1RfVklERU9fTUlYRVIyX1NFVENBUFNfTE9DSyhtaXgpIFwKLSAgKGdfbXV0ZXhfbG9jayhHU1RfVklERU9fTUlYRVIyX0dFVF9TRVRDQVBTX0xPQ0sgKG1peCkpKQotI2RlZmluZSBHU1RfVklERU9fTUlYRVIyX1NFVENBUFNfVU5MT0NLKG1peCkgXAotICAoZ19tdXRleF91bmxvY2soR1NUX1ZJREVPX01JWEVSMl9HRVRfU0VUQ0FQU19MT0NLIChtaXgpKSkKLQotI2RlZmluZSBGT1JNQVRTICIgeyBBWVVWLCBCR1JBLCBBUkdCLCBSR0JBLCBBQkdSLCBZNDQ0LCBZNDJCLCBZVVkyLCBVWVZZLCAiXAotICAgICAgICAgICAgICAgICIgICBZVllVLCBJNDIwLCBZVjEyLCBOVjEyLCBOVjIxLCBZNDFCLCBSR0IsIEJHUiwgeFJHQiwgeEJHUiwgIlwKLSAgICAgICAgICAgICAgICAiICAgUkdCeCwgQkdSeCB9ICIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoRk9STUFUUykpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2lua18ldSIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfUkVRVUVTVCwKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKEZPUk1BVFMpKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkIGdzdF92aWRlb21peGVyMl9jaGlsZF9wcm94eV9pbml0IChncG9pbnRlciBnX2lmYWNlLAotICAgIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotc3RhdGljIGdib29sZWFuIGdzdF92aWRlb21peGVyMl9wdXNoX3NpbmtfZXZlbnQgKEdzdFZpZGVvTWl4ZXIyICogbWl4LAotICAgIEdzdEV2ZW50ICogZXZlbnQpOwotc3RhdGljIHZvaWQgZ3N0X3ZpZGVvbWl4ZXIyX3JlbGVhc2VfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0UGFkICogcGFkKTsKLXN0YXRpYyB2b2lkIGdzdF92aWRlb21peGVyMl9yZXNldF9xb3MgKEdzdFZpZGVvTWl4ZXIyICogbWl4KTsKLQotc3RydWN0IF9Hc3RWaWRlb01peGVyMkNvbGxlY3QKLXsKLSAgR3N0Q29sbGVjdERhdGEgY29sbGVjdDsgICAgICAgLyogd2UgZXh0ZW5kIHRoZSBDb2xsZWN0RGF0YSAqLwotCi0gIEdzdFZpZGVvTWl4ZXIyUGFkICptaXhwYWQ7Ci0KLSAgR3N0QnVmZmVyICpxdWV1ZWQ7ICAgICAgICAgICAgLyogYnVmZmVyIGZvciB3aGljaCB3ZSBkb24ndCBrbm93IHRoZSBlbmQgdGltZSB5ZXQgKi8KLSAgR3N0VmlkZW9JbmZvIHF1ZXVlZF92aW5mbzsKLQotICBHc3RCdWZmZXIgKmJ1ZmZlcjsgICAgICAgICAgICAvKiBidWZmZXIgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBub3cgKi8KLSAgR3N0VmlkZW9JbmZvIGJ1ZmZlcl92aW5mbzsKLQotICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIGVuZF90aW1lOwotfTsKLQotI2RlZmluZSBERUZBVUxUX1BBRF9aT1JERVIgMAotI2RlZmluZSBERUZBVUxUX1BBRF9YUE9TICAgMAotI2RlZmluZSBERUZBVUxUX1BBRF9ZUE9TICAgMAotI2RlZmluZSBERUZBVUxUX1BBRF9BTFBIQSAgMS4wCi1lbnVtCi17Ci0gIFBST1BfUEFEXzAsCi0gIFBST1BfUEFEX1pPUkRFUiwKLSAgUFJPUF9QQURfWFBPUywKLSAgUFJPUF9QQURfWVBPUywKLSAgUFJPUF9QQURfQUxQSEEKLX07Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFZpZGVvTWl4ZXIyUGFkLCBnc3RfdmlkZW9taXhlcjJfcGFkLCBHU1RfVFlQRV9QQUQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX2NvbGxlY3RfZnJlZSAoR3N0Q29sbGVjdERhdGEgKiBkYXRhKQotewotICBHc3RWaWRlb01peGVyMkNvbGxlY3QgKmNkYXRhID0gKEdzdFZpZGVvTWl4ZXIyQ29sbGVjdCAqKSBkYXRhOwotCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJmNkYXRhLT5idWZmZXIsIE5VTEwpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3ZpZGVvbWl4ZXIyX3NyY19zZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdFZpZGVvTWl4ZXIyICogbWl4LAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfdXBkYXRlX3NyY19jYXBzIChHc3RWaWRlb01peGVyMiAqIG1peCkKLXsKLSAgR1NMaXN0ICpsOwotICBnaW50IGJlc3Rfd2lkdGggPSAtMSwgYmVzdF9oZWlnaHQgPSAtMTsKLSAgZ2RvdWJsZSBiZXN0X2ZwcyA9IC0xLCBjdXJfZnBzOwotICBnaW50IGJlc3RfZnBzX24gPSAtMSwgYmVzdF9mcHNfZCA9IC0xOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIEdTVF9WSURFT19NSVhFUjJfU0VUQ0FQU19MT0NLIChtaXgpOwotICBHU1RfVklERU9fTUlYRVIyX0xPQ0sgKG1peCk7Ci0KLSAgZm9yIChsID0gbWl4LT5zaW5rcGFkczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RWaWRlb01peGVyMlBhZCAqbXBhZCA9IGwtPmRhdGE7Ci0gICAgZ2ludCB0aGlzX3dpZHRoLCB0aGlzX2hlaWdodDsKLSAgICBnaW50IGZwc19uLCBmcHNfZDsKLSAgICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgICBmcHNfbiA9IEdTVF9WSURFT19JTkZPX0ZQU19OICgmbXBhZC0+aW5mbyk7Ci0gICAgZnBzX2QgPSBHU1RfVklERU9fSU5GT19GUFNfRCAoJm1wYWQtPmluZm8pOwotICAgIHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEggKCZtcGFkLT5pbmZvKTsKLSAgICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZtcGFkLT5pbmZvKTsKLQotICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAgICAgY29udGludWU7Ci0KLSAgICB0aGlzX3dpZHRoID0gd2lkdGggKyBNQVggKG1wYWQtPnhwb3MsIDApOwotICAgIHRoaXNfaGVpZ2h0ID0gaGVpZ2h0ICsgTUFYIChtcGFkLT55cG9zLCAwKTsKLQotICAgIGlmIChiZXN0X3dpZHRoIDwgdGhpc193aWR0aCkKLSAgICAgIGJlc3Rfd2lkdGggPSB0aGlzX3dpZHRoOwotICAgIGlmIChiZXN0X2hlaWdodCA8IHRoaXNfaGVpZ2h0KQotICAgICAgYmVzdF9oZWlnaHQgPSB0aGlzX2hlaWdodDsKLQotICAgIGlmIChmcHNfZCA9PSAwKQotICAgICAgY3VyX2ZwcyA9IDAuMDsKLSAgICBlbHNlCi0gICAgICBnc3RfdXRpbF9mcmFjdGlvbl90b19kb3VibGUgKGZwc19uLCBmcHNfZCwgJmN1cl9mcHMpOwotCi0gICAgaWYgKGJlc3RfZnBzIDwgY3VyX2ZwcykgewotICAgICAgYmVzdF9mcHMgPSBjdXJfZnBzOwotICAgICAgYmVzdF9mcHNfbiA9IGZwc19uOwotICAgICAgYmVzdF9mcHNfZCA9IGZwc19kOwotICAgIH0KLSAgfQotCi0gIGlmIChiZXN0X2Zwc19uIDw9IDAgfHwgYmVzdF9mcHNfZCA8PSAwIHx8IGJlc3RfZnBzID09IDAuMCkgewotICAgIGJlc3RfZnBzX24gPSAyNTsKLSAgICBiZXN0X2Zwc19kID0gMTsKLSAgICBiZXN0X2ZwcyA9IDI1LjA7Ci0gIH0KLQotICBpZiAoYmVzdF93aWR0aCA+IDAgJiYgYmVzdF9oZWlnaHQgPiAwICYmIGJlc3RfZnBzID4gMCkgewotICAgIEdzdENhcHMgKmNhcHMsICpwZWVyY2FwczsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgICBpZiAoR1NUX1ZJREVPX0lORk9fRlBTX04gKCZtaXgtPmluZm8pICE9IGJlc3RfZnBzX24gfHwKLSAgICAgICAgR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZtaXgtPmluZm8pICE9IGJlc3RfZnBzX2QpIHsKLSAgICAgIGlmIChtaXgtPnNlZ21lbnQucG9zaXRpb24gIT0gLTEpIHsKLSAgICAgICAgbWl4LT50c19vZmZzZXQgPSBtaXgtPnNlZ21lbnQucG9zaXRpb24gLSBtaXgtPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICAgIG1peC0+bmZyYW1lcyA9IDA7Ci0gICAgICB9Ci0gICAgfQotICAgIGdzdF92aWRlb19pbmZvX2luaXQgKCZpbmZvKTsKLSAgICBnc3RfdmlkZW9faW5mb19zZXRfZm9ybWF0ICgmaW5mbywgR1NUX1ZJREVPX0lORk9fRk9STUFUICgmbWl4LT5pbmZvKSwKLSAgICAgICAgYmVzdF93aWR0aCwgYmVzdF9oZWlnaHQpOwotICAgIGluZm8uZnBzX24gPSBiZXN0X2Zwc19uOwotICAgIGluZm8uZnBzX2QgPSBiZXN0X2Zwc19kOwotICAgIGluZm8ucGFyX24gPSBHU1RfVklERU9fSU5GT19QQVJfTiAoJm1peC0+aW5mbyk7Ci0gICAgaW5mby5wYXJfZCA9IEdTVF9WSURFT19JTkZPX1BBUl9EICgmbWl4LT5pbmZvKTsKLQotICAgIGNhcHMgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaW5mbyk7Ci0KLSAgICBwZWVyY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChtaXgtPnNyY3BhZCwgTlVMTCk7Ci0gICAgaWYgKHBlZXJjYXBzICYmICFnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChwZWVyY2FwcywgY2FwcykpIHsKLSAgICAgIEdzdENhcHMgKnRtcDsKLQotICAgICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgR19NQVhJTlQsICJoZWlnaHQiLAotICAgICAgICAgIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgR19NQVhJTlQsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwKLSAgICAgICAgICAwLCAxLCBHX01BWElOVCwgMSwgTlVMTCk7Ci0KLSAgICAgIHRtcCA9IGdzdF9jYXBzX2ludGVyc2VjdCAoY2FwcywgcGVlcmNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHBlZXJjYXBzKTsKLSAgICAgIGNhcHMgPSB0bXA7Ci0gICAgICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1peCwgImVtcHR5IGNhcHMiKTsKLSAgICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICAgIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIGNhcHMgPSBnc3RfY2Fwc190cnVuY2F0ZSAoY2Fwcyk7Ci0gICAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAocywgIndpZHRoIiwgYmVzdF93aWR0aCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAocywgImhlaWdodCIsIGJlc3RfaGVpZ2h0KTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb24gKHMsICJmcmFtZXJhdGUiLCBiZXN0X2Zwc19uLAotICAgICAgICAgIGJlc3RfZnBzX2QpOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJ3aWR0aCIsICZpbmZvLndpZHRoKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgImhlaWdodCIsICZpbmZvLmhlaWdodCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbiAocywgImZyYWN0aW9uIiwgJmluZm8uZnBzX24sICZpbmZvLmZwc19kKTsKLSAgICB9Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgY2FwcyA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMgKCZpbmZvKTsKLQotICAgIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICAgIHJldCA9IGdzdF92aWRlb21peGVyMl9zcmNfc2V0Y2FwcyAobWl4LT5zcmNwYWQsIG1peCwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9IGVsc2UgewotICAgIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICB9Ci0KLWRvbmU6Ci0gIEdTVF9WSURFT19NSVhFUjJfU0VUQ0FQU19VTkxPQ0sgKG1peCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfdXBkYXRlX2NvbnZlcnRlcnMgKEdzdFZpZGVvTWl4ZXIyICogbWl4KQotewotICBHU0xpc3QgKnRtcDsKLSAgR3N0VmlkZW9Gb3JtYXQgYmVzdF9mb3JtYXQ7Ci0gIEdzdFZpZGVvSW5mbyBiZXN0X2luZm87Ci0gIEdzdFZpZGVvTWl4ZXIyUGFkICpwYWQ7Ci0gIGdib29sZWFuIG5lZWRfYWxwaGEgPSBGQUxTRTsKLSAgZ2Jvb2xlYW4gYXRfbGVhc3Rfb25lX2FscGhhID0gRkFMU0U7Ci0gIEdzdENhcHMgKmRvd25zdHJlYW1fY2FwczsKLSAgR3N0Q2FwcyAqcG9zc2libGVfY2FwczsKLSAgZ2NoYXIgKmJlc3RfY29sb3JpbWV0cnk7Ci0gIGNvbnN0IGdjaGFyICpiZXN0X2Nocm9tYTsKLSAgR0hhc2hUYWJsZSAqZm9ybWF0c190YWJsZTsKLSAgZ2ludCBiZXN0X2Zvcm1hdF9udW1iZXIgPSAwOwotCi0gIGJlc3RfZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOOwotICBnc3RfdmlkZW9faW5mb19pbml0ICgmYmVzdF9pbmZvKTsKLQotICBkb3duc3RyZWFtX2NhcHMgPSBnc3RfcGFkX2dldF9hbGxvd2VkX2NhcHMgKG1peC0+c3JjcGFkKTsKLQotICBpZiAoIWRvd25zdHJlYW1fY2FwcyB8fCBnc3RfY2Fwc19pc19lbXB0eSAoZG93bnN0cmVhbV9jYXBzKSkgewotICAgIGlmIChkb3duc3RyZWFtX2NhcHMpCi0gICAgICBnc3RfY2Fwc191bnJlZiAoZG93bnN0cmVhbV9jYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBmb3JtYXRzX3RhYmxlID0gZ19oYXNoX3RhYmxlX25ldyAoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOwotCi0gIC8qIGZpcnN0IGZpbmQgbmV3IHByZWZlcnJlZCBmb3JtYXQgKi8KLSAgZm9yICh0bXAgPSBtaXgtPnNpbmtwYWRzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgewotICAgIEdzdFN0cnVjdHVyZSAqczsKLSAgICBnaW50IGZvcm1hdF9udW1iZXI7Ci0KLSAgICBwYWQgPSB0bXAtPmRhdGE7Ci0KLSAgICBpZiAoIXBhZC0+aW5mby5maW5mbykKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKHBhZC0+aW5mby5maW5mby0+ZmxhZ3MgJiBHU1RfVklERU9fRk9STUFUX0ZMQUdfQUxQSEEpCi0gICAgICBhdF9sZWFzdF9vbmVfYWxwaGEgPSBUUlVFOwotCi0gICAgLyogSWYgd2Ugd2FudCBhbHBoYSwgZGlzcmVnYXJkIGFsbCB0aGUgb3RoZXIgZm9ybWF0cyAqLwotICAgIGlmIChuZWVkX2FscGhhICYmICEocGFkLT5pbmZvLmZpbmZvLT5mbGFncyAmIEdTVF9WSURFT19GT1JNQVRfRkxBR19BTFBIQSkpCi0gICAgICBjb250aW51ZTsKLQotICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSByZWxlYXNlIGEgcGFkIGFuZCBhbm90aGVyIHBhZCBoYXNuJ3QgYmVlbiBuZWdvdGlhdGVkIHlldCAqLwotICAgIGlmIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZwYWQtPmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgcG9zc2libGVfY2FwcyA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMgKCZwYWQtPmluZm8pOwotCi0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHBvc3NpYmxlX2NhcHMsIDApOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAocywgIndpZHRoIiwgImhlaWdodCIsICJmcmFtZXJhdGUiLAotICAgICAgICAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgImludGVybGFjZS1tb2RlIiwgTlVMTCk7Ci0KLSAgICAvKiBDYW4gZG93bnN0cmVhbSBhY2NlcHQgdGhpcyBmb3JtYXQgPyAqLwotICAgIGlmICghZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoZG93bnN0cmVhbV9jYXBzLCBwb3NzaWJsZV9jYXBzKSkgewotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHBvc3NpYmxlX2NhcHMpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHBvc3NpYmxlX2NhcHMpOwotCi0gICAgZm9ybWF0X251bWJlciA9Ci0gICAgICAgIEdQT0lOVEVSX1RPX0lOVCAoZ19oYXNoX3RhYmxlX2xvb2t1cCAoZm9ybWF0c190YWJsZSwKLSAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUiAoR1NUX1ZJREVPX0lORk9fRk9STUFUICgmcGFkLT5pbmZvKSkpKTsKLSAgICBmb3JtYXRfbnVtYmVyICs9IDE7Ci0KLSAgICBnX2hhc2hfdGFibGVfcmVwbGFjZSAoZm9ybWF0c190YWJsZSwKLSAgICAgICAgR0lOVF9UT19QT0lOVEVSIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZwYWQtPmluZm8pKSwKLSAgICAgICAgR0lOVF9UT19QT0lOVEVSIChmb3JtYXRfbnVtYmVyKSk7Ci0KLSAgICAvKiBJZiB0aGF0IHBhZCBpcyB0aGUgZmlyc3Qgd2l0aCBhbHBoYSwgc2V0IGl0IGFzIHRoZSBuZXcgYmVzdCBmb3JtYXQgKi8KLSAgICBpZiAoIW5lZWRfYWxwaGEgJiYgKHBhZC0+aW5mby5maW5mby0+ZmxhZ3MgJiBHU1RfVklERU9fRk9STUFUX0ZMQUdfQUxQSEEpKSB7Ci0gICAgICBuZWVkX2FscGhhID0gVFJVRTsKLSAgICAgIGJlc3RfZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUICgmcGFkLT5pbmZvKTsKLSAgICAgIGJlc3RfaW5mbyA9IHBhZC0+aW5mbzsKLSAgICAgIGJlc3RfZm9ybWF0X251bWJlciA9IGZvcm1hdF9udW1iZXI7Ci0gICAgfSBlbHNlIGlmIChmb3JtYXRfbnVtYmVyID4gYmVzdF9mb3JtYXRfbnVtYmVyKSB7Ci0gICAgICBiZXN0X2Zvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJnBhZC0+aW5mbyk7Ci0gICAgICBiZXN0X2luZm8gPSBwYWQtPmluZm87Ci0gICAgICBiZXN0X2Zvcm1hdF9udW1iZXIgPSBmb3JtYXRfbnVtYmVyOwotICAgIH0KLSAgfQotCi0gIGdfaGFzaF90YWJsZV91bnJlZiAoZm9ybWF0c190YWJsZSk7Ci0KLSAgaWYgKGJlc3RfZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikgewotICAgIGRvd25zdHJlYW1fY2FwcyA9IGdzdF9jYXBzX2ZpeGF0ZSAoZG93bnN0cmVhbV9jYXBzKTsKLSAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZiZXN0X2luZm8sIGRvd25zdHJlYW1fY2Fwcyk7Ci0gICAgYmVzdF9mb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQgKCZiZXN0X2luZm8pOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGRvd25zdHJlYW1fY2Fwcyk7Ci0KLSAgaWYgKGF0X2xlYXN0X29uZV9hbHBoYQotICAgICAgJiYgIShiZXN0X2luZm8uZmluZm8tPmZsYWdzICYgR1NUX1ZJREVPX0ZPUk1BVF9GTEFHX0FMUEhBKSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChtaXgsIENPUkUsIE5FR09USUFUSU9OLAotICAgICAgICAoIkF0IGxlYXN0IG9uZSBvZiB0aGUgaW5wdXQgcGFkcyBjb250YWlucyBhbHBoYSwgYnV0IGRvd25zdHJlYW0gY2FuJ3Qgc3VwcG9ydCBhbHBoYS4iKSwKLSAgICAgICAgKCJFaXRoZXIgY29udmVydCB5b3VyIGlucHV0cyB0byBub3QgY29udGFpbiBhbHBoYSBvciBhZGQgYSB2aWRlb2NvbnZlcnQgYWZ0ZXIgdGhlIG1peGVyIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGJlc3RfY29sb3JpbWV0cnkgPSBnc3RfdmlkZW9fY29sb3JpbWV0cnlfdG9fc3RyaW5nICgmKGJlc3RfaW5mby5jb2xvcmltZXRyeSkpOwotICBiZXN0X2Nocm9tYSA9IGdzdF92aWRlb19jaHJvbWFfdG9fc3RyaW5nIChiZXN0X2luZm8uY2hyb21hX3NpdGUpOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19GUFNfTiAoJm1peC0+aW5mbykgIT0gR1NUX1ZJREVPX0lORk9fRlBTX04gKCZiZXN0X2luZm8pIHx8Ci0gICAgICBHU1RfVklERU9fSU5GT19GUFNfRCAoJm1peC0+aW5mbykgIT0gR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZiZXN0X2luZm8pKSB7Ci0gICAgaWYgKG1peC0+c2VnbWVudC5wb3NpdGlvbiAhPSAtMSkgewotICAgICAgbWl4LT50c19vZmZzZXQgPSBtaXgtPnNlZ21lbnQucG9zaXRpb24gLSBtaXgtPnNlZ21lbnQuc3RhcnQ7Ci0gICAgICBtaXgtPm5mcmFtZXMgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBtaXgtPnRzX29mZnNldCArPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKG1peC0+bmZyYW1lcywKLSAgICAgICAgICBHU1RfU0VDT05EICogR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZtaXgtPmluZm8pLAotICAgICAgICAgIEdTVF9WSURFT19JTkZPX0ZQU19OICgmbWl4LT5pbmZvKSk7Ci0gICAgICBtaXgtPm5mcmFtZXMgPSAwOwotICAgIH0KLSAgfQotCi0gIG1peC0+aW5mbyA9IGJlc3RfaW5mbzsKLQotICBHU1RfREVCVUdfT0JKRUNUIChtaXgsCi0gICAgICAiVGhlIG91dHB1dCBmb3JtYXQgd2lsbCBub3cgYmUgOiAlZCB3aXRoIGNvbG9yaW1ldHJ5IDogJXMgYW5kIGNocm9tYSA6ICVzIiwKLSAgICAgIGJlc3RfZm9ybWF0LCBiZXN0X2NvbG9yaW1ldHJ5LCBiZXN0X2Nocm9tYSk7Ci0KLSAgLyogVGhlbiBicm93c2UgdGhlIHNpbmtzIG9uY2UgbW9yZSwgc2V0dGluZyBvciB1bnNldHRpbmcgY29udmVyc2lvbiBpZiBuZWVkZWQgKi8KLSAgZm9yICh0bXAgPSBtaXgtPnNpbmtwYWRzOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkgewotICAgIGdjaGFyICpjb2xvcmltZXRyeTsKLSAgICBjb25zdCBnY2hhciAqY2hyb21hOwotCi0gICAgcGFkID0gdG1wLT5kYXRhOwotCi0gICAgaWYgKCFwYWQtPmluZm8uZmluZm8pCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZwYWQtPmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgaWYgKHBhZC0+Y29udmVydCkKLSAgICAgIGdzdF92aWRlb19jb252ZXJ0ZXJfZnJlZSAocGFkLT5jb252ZXJ0KTsKLQotICAgIHBhZC0+Y29udmVydCA9IE5VTEw7Ci0KLSAgICBjb2xvcmltZXRyeSA9IGdzdF92aWRlb19jb2xvcmltZXRyeV90b19zdHJpbmcgKCYocGFkLT5pbmZvLmNvbG9yaW1ldHJ5KSk7Ci0gICAgY2hyb21hID0gZ3N0X3ZpZGVvX2Nocm9tYV90b19zdHJpbmcgKHBhZC0+aW5mby5jaHJvbWFfc2l0ZSk7Ci0KLSAgICBpZiAoYmVzdF9mb3JtYXQgIT0gR1NUX1ZJREVPX0lORk9fRk9STUFUICgmcGFkLT5pbmZvKSB8fAotICAgICAgICBnX3N0cmNtcDAgKGNvbG9yaW1ldHJ5LCBiZXN0X2NvbG9yaW1ldHJ5KSB8fAotICAgICAgICBnX3N0cmNtcDAgKGNocm9tYSwgYmVzdF9jaHJvbWEpKSB7Ci0gICAgICBHc3RWaWRlb0luZm8gdG1wX2luZm8gPSBwYWQtPmluZm87Ci0gICAgICB0bXBfaW5mby5maW5mbyA9IGJlc3RfaW5mby5maW5mbzsKLSAgICAgIHRtcF9pbmZvLmNocm9tYV9zaXRlID0gYmVzdF9pbmZvLmNocm9tYV9zaXRlOwotICAgICAgdG1wX2luZm8uY29sb3JpbWV0cnkgPSBiZXN0X2luZm8uY29sb3JpbWV0cnk7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlRoaXMgcGFkIHdpbGwgYmUgY29udmVydGVkIGZyb20gJWQgdG8gJWQiLAotICAgICAgICAgIEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJnBhZC0+aW5mbyksCi0gICAgICAgICAgR1NUX1ZJREVPX0lORk9fRk9STUFUICgmYmVzdF9pbmZvKSk7Ci0gICAgICBwYWQtPmNvbnZlcnQgPSBnc3RfdmlkZW9fY29udmVydGVyX25ldyAoJnBhZC0+aW5mbywgJnRtcF9pbmZvLCBOVUxMKTsKLSAgICAgIHBhZC0+bmVlZF9jb252ZXJzaW9uX3VwZGF0ZSA9IFRSVUU7Ci0gICAgICBpZiAoIXBhZC0+Y29udmVydCkgewotICAgICAgICBnX2ZyZWUgKGNvbG9yaW1ldHJ5KTsKLSAgICAgICAgZ19mcmVlIChiZXN0X2NvbG9yaW1ldHJ5KTsKLSAgICAgICAgR1NUX1dBUk5JTkcgKCJObyBwYXRoIGZvdW5kIGZvciBjb252ZXJzaW9uIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiVGhpcyBwYWQgd2lsbCBub3QgbmVlZCBjb252ZXJzaW9uIik7Ci0gICAgfQotICAgIGdfZnJlZSAoY29sb3JpbWV0cnkpOwotICB9Ci0KLSAgZ19mcmVlIChiZXN0X2NvbG9yaW1ldHJ5KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3ZpZGVvbWl4ZXIyX3BhZF9zaW5rX3NldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RWaWRlb01peGVyMiAqbWl4OwotICBHc3RWaWRlb01peGVyMlBhZCAqbWl4cGFkOwotICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChwYWQsICJTZXR0aW5nIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIG1peCA9IEdTVF9WSURFT19NSVhFUjIgKHBhcmVudCk7Ci0gIG1peHBhZCA9IEdTVF9WSURFT19NSVhFUjJfUEFEIChwYWQpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwYWQsICJGYWlsZWQgdG8gcGFyc2UgY2FwcyIpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICBHU1RfVklERU9fTUlYRVIyX0xPQ0sgKG1peCk7Ci0gIGlmIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZtaXgtPmluZm8pICE9IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikgewotICAgIGlmIChHU1RfVklERU9fSU5GT19QQVJfTiAoJm1peC0+aW5mbykgIT0gR1NUX1ZJREVPX0lORk9fUEFSX04gKCZpbmZvKQotICAgICAgICB8fCBHU1RfVklERU9fSU5GT19QQVJfRCAoJm1peC0+aW5mbykgIT0gR1NUX1ZJREVPX0lORk9fUEFSX0QgKCZpbmZvKSB8fAotICAgICAgICBHU1RfVklERU9fSU5GT19JTlRFUkxBQ0VfTU9ERSAoJm1peC0+aW5mbykgIT0KLSAgICAgICAgR1NUX1ZJREVPX0lORk9fSU5URVJMQUNFX01PREUgKCZpbmZvKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLAotICAgICAgICAgICJnb3QgaW5wdXQgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCAiLCBidXQgIiAiY3VycmVudCBjYXBzIGFyZSAlIgotICAgICAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzLCBtaXgtPmN1cnJlbnRfY2Fwcyk7Ci0gICAgICBHU1RfVklERU9fTUlYRVIyX1VOTE9DSyAobWl4KTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBtaXhwYWQtPmluZm8gPSBpbmZvOwotCi0gIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX0xPQ0sgKG1peC0+Y29sbGVjdCk7Ci0KLSAgcmV0ID0gZ3N0X3ZpZGVvbWl4ZXIyX3VwZGF0ZV9jb252ZXJ0ZXJzIChtaXgpOwotCi0gIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICBpZiAocmV0KQotICAgIHJldCA9IGdzdF92aWRlb21peGVyMl91cGRhdGVfc3JjX2NhcHMgKG1peCk7Ci0gIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX1VOTE9DSyAobWl4LT5jb2xsZWN0KTsKLQotYmVhY2g6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92aWRlb21peGVyMl9wYWRfc2lua19nZXRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdFZpZGVvTWl4ZXIyICogbWl4LAotICAgIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0gIEdzdENhcHMgKnRlbXBsYXRlX2NhcHM7Ci0gIEdzdENhcHMgKmZpbHRlcmVkX2NhcHM7Ci0gIEdzdENhcHMgKnJldHVybmVkX2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgZ2Jvb2xlYW4gaGFkX2N1cnJlbnRfY2FwcyA9IFRSVUU7Ci0gIGdpbnQgaSwgbjsKLQotICB0ZW1wbGF0ZV9jYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9QQUQgKG1peC0+c3JjcGFkKSk7Ci0KLSAgc3JjY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX1BBRCAobWl4LT5zcmNwYWQpKTsKLSAgaWYgKHNyY2NhcHMgPT0gTlVMTCkgewotICAgIGhhZF9jdXJyZW50X2NhcHMgPSBGQUxTRTsKLSAgICBzcmNjYXBzID0gdGVtcGxhdGVfY2FwczsKLSAgfQotCi0gIHNyY2NhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChzcmNjYXBzKTsKLQotICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKHNyY2NhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKHNyY2NhcHMsIGkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIEdfTUFYSU5ULAotICAgICAgICAiaGVpZ2h0IiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCBHX01BWElOVCwKLSAgICAgICAgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCAwLCAxLCBHX01BWElOVCwgMSwgTlVMTCk7Ci0gICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIpKQotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwgMSwgMSwKLSAgICAgICAgICBOVUxMKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkcyAocywgImNvbG9yaW1ldHJ5IiwgImNocm9tYS1zaXRlIiwgImZvcm1hdCIsCi0gICAgICAgIE5VTEwpOwotICB9Ci0KLSAgZmlsdGVyZWRfY2FwcyA9IHNyY2NhcHM7Ci0gIGlmIChmaWx0ZXIpCi0gICAgZmlsdGVyZWRfY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoc3JjY2FwcywgZmlsdGVyKTsKLSAgcmV0dXJuZWRfY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoZmlsdGVyZWRfY2FwcywgdGVtcGxhdGVfY2Fwcyk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICBpZiAoZmlsdGVyKQotICAgIGdzdF9jYXBzX3VucmVmIChmaWx0ZXJlZF9jYXBzKTsKLSAgaWYgKGhhZF9jdXJyZW50X2NhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsYXRlX2NhcHMpOwotCi0gIHJldHVybiByZXR1cm5lZF9jYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92aWRlb21peGVyMl9wYWRfc2lua19hY2NlcHRjYXBzIChHc3RQYWQgKiBwYWQsIEdzdFZpZGVvTWl4ZXIyICogbWl4LAotICAgIEdzdENhcHMgKiBjYXBzKQotewotICBnYm9vbGVhbiByZXQ7Ci0gIEdzdENhcHMgKm1vZGlmaWVkX2NhcHM7Ci0gIEdzdENhcHMgKmFjY2VwdGVkX2NhcHM7Ci0gIEdzdENhcHMgKnRlbXBsYXRlX2NhcHM7Ci0gIGdib29sZWFuIGhhZF9jdXJyZW50X2NhcHMgPSBUUlVFOwotICBnaW50IGksIG47Ci0gIEdzdFN0cnVjdHVyZSAqczsKLQotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICIlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgYWNjZXB0ZWRfY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoR1NUX1BBRCAobWl4LT5zcmNwYWQpKTsKLQotICB0ZW1wbGF0ZV9jYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9QQUQgKG1peC0+c3JjcGFkKSk7Ci0KLSAgaWYgKGFjY2VwdGVkX2NhcHMgPT0gTlVMTCkgewotICAgIGFjY2VwdGVkX2NhcHMgPSB0ZW1wbGF0ZV9jYXBzOwotICAgIGhhZF9jdXJyZW50X2NhcHMgPSBGQUxTRTsKLSAgfQotCi0gIGFjY2VwdGVkX2NhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChhY2NlcHRlZF9jYXBzKTsKLQotICBHU1RfTE9HX09CSkVDVCAocGFkLCAic3JjIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIGFjY2VwdGVkX2NhcHMpOwotCi0gIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoYWNjZXB0ZWRfY2Fwcyk7Ci0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWNjZXB0ZWRfY2FwcywgaSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgR19NQVhJTlQsCi0gICAgICAgICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIEdfTUFYSU5ULAotICAgICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsIEdfTUFYSU5ULCAxLCBOVUxMKTsKLSAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikpCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLCAxLCAxLAotICAgICAgICAgIE5VTEwpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzIChzLCAiY29sb3JpbWV0cnkiLCAiY2hyb21hLXNpdGUiLCAiZm9ybWF0IiwKLSAgICAgICAgTlVMTCk7Ci0gIH0KLQotICBtb2RpZmllZF9jYXBzID0gZ3N0X2NhcHNfaW50ZXJzZWN0IChhY2NlcHRlZF9jYXBzLCB0ZW1wbGF0ZV9jYXBzKTsKLQotICByZXQgPSBnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChjYXBzLCBhY2NlcHRlZF9jYXBzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiJXNhY2NlcHRlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgKHJldCA/ICIiIDogIm5vdCAiKSwgY2Fwcyk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImFjY2VwdGFibGUgY2FwcyBhcmUgJSIgR1NUX1BUUl9GT1JNQVQsIGFjY2VwdGVkX2NhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoYWNjZXB0ZWRfY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChtb2RpZmllZF9jYXBzKTsKLSAgaWYgKGhhZF9jdXJyZW50X2NhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHRlbXBsYXRlX2NhcHMpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92aWRlb21peGVyMl9zaW5rX3F1ZXJ5IChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdENvbGxlY3REYXRhICogY2RhdGEsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSwgR3N0VmlkZW9NaXhlcjIgKiBtaXgpCi17Ci0gIEdzdFZpZGVvTWl4ZXIyUGFkICpwYWQgPSBHU1RfVklERU9fTUlYRVIyX1BBRCAoY2RhdGEtPnBhZCk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqZmlsdGVyLCAqY2FwczsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2NhcHMgKHF1ZXJ5LCAmZmlsdGVyKTsKLSAgICAgIGNhcHMgPSBnc3RfdmlkZW9taXhlcjJfcGFkX3NpbmtfZ2V0Y2FwcyAoR1NUX1BBRCAocGFkKSwgbWl4LCBmaWx0ZXIpOwotICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGNhcHMpOwotICAgICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9BQ0NFUFRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfYWNjZXB0X2NhcHMgKHF1ZXJ5LCAmY2Fwcyk7Ci0gICAgICByZXQgPSBnc3RfdmlkZW9taXhlcjJfcGFkX3NpbmtfYWNjZXB0Y2FwcyAoR1NUX1BBRCAocGFkKSwgbWl4LCBjYXBzKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0IChxdWVyeSwgcmV0KTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9jb2xsZWN0X3BhZHNfcXVlcnlfZGVmYXVsdCAocGFkcywgY2RhdGEsIHF1ZXJ5LCBGQUxTRSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX3BhZF9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VmlkZW9NaXhlcjJQYWQgKnBhZCA9IEdTVF9WSURFT19NSVhFUjJfUEFEIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9QQURfWk9SREVSOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHBhZC0+em9yZGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QQURfWFBPUzoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHBhZC0+eHBvcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEFEX1lQT1M6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBwYWQtPnlwb3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBRF9BTFBIQToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIHBhZC0+YWxwaGEpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgaW50Ci1wYWRfem9yZGVyX2NvbXBhcmUgKGNvbnN0IEdzdFZpZGVvTWl4ZXIyUGFkICogcGFkMSwKLSAgICBjb25zdCBHc3RWaWRlb01peGVyMlBhZCAqIHBhZDIpCi17Ci0gIHJldHVybiBwYWQxLT56b3JkZXIgLSBwYWQyLT56b3JkZXI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfcGFkX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWaWRlb01peGVyMlBhZCAqcGFkID0gR1NUX1ZJREVPX01JWEVSMl9QQUQgKG9iamVjdCk7Ci0gIEdzdFZpZGVvTWl4ZXIyICptaXggPSBHU1RfVklERU9fTUlYRVIyIChnc3RfcGFkX2dldF9wYXJlbnQgKEdTVF9QQUQgKHBhZCkpKTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUEFEX1pPUkRFUjoKLSAgICAgIEdTVF9WSURFT19NSVhFUjJfTE9DSyAobWl4KTsKLSAgICAgIHBhZC0+em9yZGVyID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotCi0gICAgICBtaXgtPnNpbmtwYWRzID0gZ19zbGlzdF9zb3J0IChtaXgtPnNpbmtwYWRzLAotICAgICAgICAgIChHQ29tcGFyZUZ1bmMpIHBhZF96b3JkZXJfY29tcGFyZSk7Ci0gICAgICBHU1RfVklERU9fTUlYRVIyX1VOTE9DSyAobWl4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9QQURfWFBPUzoKLSAgICAgIHBhZC0+eHBvcyA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1BBRF9ZUE9TOgotICAgICAgcGFkLT55cG9zID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUEFEX0FMUEhBOgotICAgICAgcGFkLT5hbHBoYSA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKG1peCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfcGFkX2NsYXNzX2luaXQgKEdzdFZpZGVvTWl4ZXIyUGFkQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdmlkZW9taXhlcjJfcGFkX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3ZpZGVvbWl4ZXIyX3BhZF9nZXRfcHJvcGVydHk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfWk9SREVSLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJ6b3JkZXIiLCAiWi1PcmRlciIsICJaIE9yZGVyIG9mIHRoZSBwaWN0dXJlIiwKLSAgICAgICAgICAwLCAxMDAwMCwgREVGQVVMVF9QQURfWk9SREVSLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfWFBPUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ4cG9zIiwgIlggUG9zaXRpb24iLCAiWCBQb3NpdGlvbiBvZiB0aGUgcGljdHVyZSIsCi0gICAgICAgICAgR19NSU5JTlQsIEdfTUFYSU5ULCBERUZBVUxUX1BBRF9YUE9TLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfWVBPUywKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJ5cG9zIiwgIlkgUG9zaXRpb24iLCAiWSBQb3NpdGlvbiBvZiB0aGUgcGljdHVyZSIsCi0gICAgICAgICAgR19NSU5JTlQsIEdfTUFYSU5ULCBERUZBVUxUX1BBRF9ZUE9TLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9QQURfQUxQSEEsCi0gICAgICBnX3BhcmFtX3NwZWNfZG91YmxlICgiYWxwaGEiLCAiQWxwaGEiLCAiQWxwaGEgb2YgdGhlIHBpY3R1cmUiLCAwLjAsIDEuMCwKLSAgICAgICAgICBERUZBVUxUX1BBRF9BTFBIQSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfcGFkX2luaXQgKEdzdFZpZGVvTWl4ZXIyUGFkICogbWl4ZXJwYWQpCi17Ci0gIG1peGVycGFkLT56b3JkZXIgPSBERUZBVUxUX1BBRF9aT1JERVI7Ci0gIG1peGVycGFkLT54cG9zID0gREVGQVVMVF9QQURfWFBPUzsKLSAgbWl4ZXJwYWQtPnlwb3MgPSBERUZBVUxUX1BBRF9ZUE9TOwotICBtaXhlcnBhZC0+YWxwaGEgPSBERUZBVUxUX1BBRF9BTFBIQTsKLSAgbWl4ZXJwYWQtPmNvbnZlcnQgPSBOVUxMOwotICBtaXhlcnBhZC0+bmVlZF9jb252ZXJzaW9uX3VwZGF0ZSA9IEZBTFNFOwotfQotCi0vKiBHc3RWaWRlb01peGVyMiAqLwotI2RlZmluZSBERUZBVUxUX0JBQ0tHUk9VTkQgVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQ0hFQ0tFUgotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfQkFDS0dST1VORAotfTsKLQotI2RlZmluZSBHU1RfVFlQRV9WSURFT19NSVhFUjJfQkFDS0dST1VORCAoZ3N0X3ZpZGVvbWl4ZXIyX2JhY2tncm91bmRfZ2V0X3R5cGUoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3ZpZGVvbWl4ZXIyX2JhY2tncm91bmRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSB2aWRlb19taXhlcl9iYWNrZ3JvdW5kX3R5cGUgPSAwOwotCi0gIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHZpZGVvX21peGVyX2JhY2tncm91bmRbXSA9IHsKLSAgICB7VklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQ0hFQ0tFUiwgIkNoZWNrZXIgcGF0dGVybiIsICJjaGVja2VyIn0sCi0gICAge1ZJREVPX01JWEVSMl9CQUNLR1JPVU5EX0JMQUNLLCAiQmxhY2siLCAiYmxhY2sifSwKLSAgICB7VklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfV0hJVEUsICJXaGl0ZSIsICJ3aGl0ZSJ9LAotICAgIHtWSURFT19NSVhFUjJfQkFDS0dST1VORF9UUkFOU1BBUkVOVCwKLSAgICAgICAgIlRyYW5zcGFyZW50IEJhY2tncm91bmQgdG8gZW5hYmxlIGZ1cnRoZXIgbWl4aW5nIiwgInRyYW5zcGFyZW50In0sCi0gICAgezAsIE5VTEwsIE5VTEx9LAotICB9OwotCi0gIGlmICghdmlkZW9fbWl4ZXJfYmFja2dyb3VuZF90eXBlKSB7Ci0gICAgdmlkZW9fbWl4ZXJfYmFja2dyb3VuZF90eXBlID0KLSAgICAgICAgZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZCIsCi0gICAgICAgIHZpZGVvX21peGVyX2JhY2tncm91bmQpOwotICB9Ci0gIHJldHVybiB2aWRlb19taXhlcl9iYWNrZ3JvdW5kX3R5cGU7Ci19Ci0KLSNkZWZpbmUgZ3N0X3ZpZGVvbWl4ZXIyX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RWaWRlb01peGVyMiwgZ3N0X3ZpZGVvbWl4ZXIyLCBHU1RfVFlQRV9FTEVNRU5ULAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfQ0hJTERfUFJPWFksCi0gICAgICAgIGdzdF92aWRlb21peGVyMl9jaGlsZF9wcm94eV9pbml0KSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfdXBkYXRlX3FvcyAoR3N0VmlkZW9NaXhlcjIgKiBtaXgsIGdkb3VibGUgcHJvcG9ydGlvbiwKLSAgICBHc3RDbG9ja1RpbWVEaWZmIGRpZmYsIEdzdENsb2NrVGltZSB0aW1lc3RhbXApCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKG1peCwKLSAgICAgICJVcGRhdGluZyBRb1M6IHByb3BvcnRpb24gJWxmLCBkaWZmICUiIEdTVF9TVElNRV9GT1JNQVQgIiwgdGltZXN0YW1wICUiCi0gICAgICBHU1RfVElNRV9GT1JNQVQsIHByb3BvcnRpb24sIEdTVF9TVElNRV9BUkdTIChkaWZmKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAobWl4KTsKLSAgbWl4LT5wcm9wb3J0aW9uID0gcHJvcG9ydGlvbjsKLSAgaWYgKEdfTElLRUxZICh0aW1lc3RhbXAgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkpIHsKLSAgICBpZiAoIW1peC0+bGl2ZSAmJiBHX1VOTElLRUxZIChkaWZmID4gMCkpCi0gICAgICBtaXgtPmVhcmxpZXN0X3RpbWUgPQotICAgICAgICAgIHRpbWVzdGFtcCArIDIgKiBkaWZmICsgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoR1NUX1NFQ09ORCwKLSAgICAgICAgICBHU1RfVklERU9fSU5GT19GUFNfRCAoJm1peC0+aW5mbyksIEdTVF9WSURFT19JTkZPX0ZQU19OICgmbWl4LT5pbmZvKSk7Ci0gICAgZWxzZQotICAgICAgbWl4LT5lYXJsaWVzdF90aW1lID0gdGltZXN0YW1wICsgZGlmZjsKLSAgfSBlbHNlIHsKLSAgICBtaXgtPmVhcmxpZXN0X3RpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtaXgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX3Jlc2V0X3FvcyAoR3N0VmlkZW9NaXhlcjIgKiBtaXgpCi17Ci0gIGdzdF92aWRlb21peGVyMl91cGRhdGVfcW9zIChtaXgsIDAuNSwgMCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIG1peC0+cW9zX3Byb2Nlc3NlZCA9IG1peC0+cW9zX2Ryb3BwZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX3JlYWRfcW9zIChHc3RWaWRlb01peGVyMiAqIG1peCwgZ2RvdWJsZSAqIHByb3BvcnRpb24sCi0gICAgR3N0Q2xvY2tUaW1lICogdGltZSkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChtaXgpOwotICAqcHJvcG9ydGlvbiA9IG1peC0+cHJvcG9ydGlvbjsKLSAgKnRpbWUgPSBtaXgtPmVhcmxpZXN0X3RpbWU7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChtaXgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX3Jlc2V0IChHc3RWaWRlb01peGVyMiAqIG1peCkKLXsKLSAgR1NMaXN0ICpsOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZtaXgtPmluZm8pOwotICBtaXgtPnRzX29mZnNldCA9IDA7Ci0gIG1peC0+bmZyYW1lcyA9IDA7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJm1peC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgbWl4LT5zZWdtZW50LnBvc2l0aW9uID0gLTE7Ci0KLSAgZ3N0X3ZpZGVvbWl4ZXIyX3Jlc2V0X3FvcyAobWl4KTsKLQotICBmb3IgKGwgPSBtaXgtPnNpbmtwYWRzOyBsOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFZpZGVvTWl4ZXIyUGFkICpwID0gbC0+ZGF0YTsKLSAgICBHc3RWaWRlb01peGVyMkNvbGxlY3QgKm1peGNvbCA9IHAtPm1peGNvbDsKLQotICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJm1peGNvbC0+YnVmZmVyLCBOVUxMKTsKLSAgICBtaXhjb2wtPnN0YXJ0X3RpbWUgPSAtMTsKLSAgICBtaXhjb2wtPmVuZF90aW1lID0gLTE7Ci0KLSAgICBnc3RfdmlkZW9faW5mb19pbml0ICgmcC0+aW5mbyk7Ci0gIH0KLQotICBtaXgtPm5ld3NlZ19wZW5kaW5nID0gVFJVRTsKLX0KLQotLyogIDEgPT0gT0sKLSAqICAwID09IG5lZWQgbW9yZSBkYXRhCi0gKiAtMSA9PSBFT1MKLSAqIC0yID09IGVycm9yCi0gKi8KLXN0YXRpYyBnaW50Ci1nc3RfdmlkZW9taXhlcjJfZmlsbF9xdWV1ZXMgKEdzdFZpZGVvTWl4ZXIyICogbWl4LAotICAgIEdzdENsb2NrVGltZSBvdXRwdXRfc3RhcnRfdGltZSwgR3N0Q2xvY2tUaW1lIG91dHB1dF9lbmRfdGltZSkKLXsKLSAgR1NMaXN0ICpsOwotICBnYm9vbGVhbiBlb3MgPSBUUlVFOwotICBnYm9vbGVhbiBuZWVkX21vcmVfZGF0YSA9IEZBTFNFOwotCi0gIGZvciAobCA9IG1peC0+c2lua3BhZHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0VmlkZW9NaXhlcjJQYWQgKnBhZCA9IGwtPmRhdGE7Ci0gICAgR3N0VmlkZW9NaXhlcjJDb2xsZWN0ICptaXhjb2wgPSBwYWQtPm1peGNvbDsKLSAgICBHc3RTZWdtZW50ICpzZWdtZW50ID0gJnBhZC0+bWl4Y29sLT5jb2xsZWN0LnNlZ21lbnQ7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgR3N0VmlkZW9JbmZvICp2aW5mbzsKLQotICAgIGJ1ZiA9IGdzdF9jb2xsZWN0X3BhZHNfcGVlayAobWl4LT5jb2xsZWN0LCAmbWl4Y29sLT5jb2xsZWN0KTsKLSAgICBpZiAoYnVmKSB7Ci0gICAgICBHc3RDbG9ja1RpbWUgc3RhcnRfdGltZSwgZW5kX3RpbWU7Ci0KLSAgICAgIHN0YXJ0X3RpbWUgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKLSAgICAgIGlmIChzdGFydF90aW1lID09IC0xKSB7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwgIk5lZWQgdGltZXN0YW1wZWQgYnVmZmVycyEiKTsKLSAgICAgICAgcmV0dXJuIC0yOwotICAgICAgfQotCi0gICAgICB2aW5mbyA9ICZwYWQtPmluZm87Ci0KLSAgICAgIC8qIEZJWE1FOiBNYWtlIGFsbCB0aGlzIHdvcmsgd2l0aCBuZWdhdGl2ZSByYXRlcyAqLwotCi0gICAgICBpZiAoKG1peGNvbC0+YnVmZmVyICYmIHN0YXJ0X3RpbWUgPCBHU1RfQlVGRkVSX1RJTUVTVEFNUCAobWl4Y29sLT5idWZmZXIpKQotICAgICAgICAgIHx8IChtaXhjb2wtPnF1ZXVlZAotICAgICAgICAgICAgICAmJiBzdGFydF90aW1lIDwgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG1peGNvbC0+cXVldWVkKSkpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJCdWZmZXIgZnJvbSB0aGUgcGFzdCwgZHJvcHBpbmciKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgYnVmID0gZ3N0X2NvbGxlY3RfcGFkc19wb3AgKG1peC0+Y29sbGVjdCwgJm1peGNvbC0+Y29sbGVjdCk7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgIG5lZWRfbW9yZV9kYXRhID0gVFJVRTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtaXhjb2wtPnF1ZXVlZCkgewotICAgICAgICBlbmRfdGltZSA9IHN0YXJ0X3RpbWUgLSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAobWl4Y29sLT5xdWV1ZWQpOwotICAgICAgICBzdGFydF90aW1lID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKG1peGNvbC0+cXVldWVkKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgYnVmID0gZ3N0X2J1ZmZlcl9yZWYgKG1peGNvbC0+cXVldWVkKTsKLSAgICAgICAgdmluZm8gPSAmbWl4Y29sLT5xdWV1ZWRfdmluZm87Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbmRfdGltZSA9IEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1Zik7Ci0KLSAgICAgICAgaWYgKGVuZF90aW1lID09IC0xKSB7Ci0gICAgICAgICAgbWl4Y29sLT5xdWV1ZWQgPSBidWY7Ci0gICAgICAgICAgYnVmID0gZ3N0X2NvbGxlY3RfcGFkc19wb3AgKG1peC0+Y29sbGVjdCwgJm1peGNvbC0+Y29sbGVjdCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICBtaXhjb2wtPnF1ZXVlZF92aW5mbyA9IHBhZC0+aW5mbzsKLSAgICAgICAgICBuZWVkX21vcmVfZGF0YSA9IFRSVUU7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZ19hc3NlcnQgKHN0YXJ0X3RpbWUgIT0gLTEgJiYgZW5kX3RpbWUgIT0gLTEpOwotICAgICAgZW5kX3RpbWUgKz0gc3RhcnRfdGltZTsgICAvKiBjb252ZXJ0IGZyb20gZHVyYXRpb24gdG8gcG9zaXRpb24gKi8KLQotICAgICAgLyogQ2hlY2sgaWYgaXQncyBpbnNpZGUgdGhlIHNlZ21lbnQgKi8KLSAgICAgIGlmIChzdGFydF90aW1lID49IHNlZ21lbnQtPnN0b3AgfHwgZW5kX3RpbWUgPCBzZWdtZW50LT5zdGFydCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJCdWZmZXIgb3V0c2lkZSB0aGUgc2VnbWVudCIpOwotCi0gICAgICAgIGlmIChidWYgPT0gbWl4Y29sLT5xdWV1ZWQpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJm1peGNvbC0+cXVldWVkLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGJ1ZiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChtaXgtPmNvbGxlY3QsICZtaXhjb2wtPmNvbGxlY3QpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgIH0KLQotICAgICAgICBuZWVkX21vcmVfZGF0YSA9IFRSVUU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvKiBDbGlwIHRvIHNlZ21lbnQgYW5kIGNvbnZlcnQgdG8gcnVubmluZyB0aW1lICovCi0gICAgICBzdGFydF90aW1lID0gTUFYIChzdGFydF90aW1lLCBzZWdtZW50LT5zdGFydCk7Ci0gICAgICBpZiAoc2VnbWVudC0+c3RvcCAhPSAtMSkKLSAgICAgICAgZW5kX3RpbWUgPSBNSU4gKGVuZF90aW1lLCBzZWdtZW50LT5zdG9wKTsKLSAgICAgIHN0YXJ0X3RpbWUgPQotICAgICAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLCBzdGFydF90aW1lKTsKLSAgICAgIGVuZF90aW1lID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKHNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgZW5kX3RpbWUpOwotICAgICAgZ19hc3NlcnQgKHN0YXJ0X3RpbWUgIT0gLTEgJiYgZW5kX3RpbWUgIT0gLTEpOwotCi0gICAgICAvKiBDb252ZXJ0IHRvIHRoZSBvdXRwdXQgc2VnbWVudCByYXRlICovCi0gICAgICBpZiAoQUJTIChtaXgtPnNlZ21lbnQucmF0ZSkgIT0gMS4wKSB7Ci0gICAgICAgIHN0YXJ0X3RpbWUgKj0gQUJTIChtaXgtPnNlZ21lbnQucmF0ZSk7Ci0gICAgICAgIGVuZF90aW1lICo9IEFCUyAobWl4LT5zZWdtZW50LnJhdGUpOwotICAgICAgfQotCi0gICAgICBpZiAobWl4Y29sLT5lbmRfdGltZSAhPSAtMSAmJiBtaXhjb2wtPmVuZF90aW1lID4gZW5kX3RpbWUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiQnVmZmVyIGZyb20gdGhlIHBhc3QsIGRyb3BwaW5nIik7Ci0gICAgICAgIGlmIChidWYgPT0gbWl4Y29sLT5xdWV1ZWQpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJm1peGNvbC0+cXVldWVkLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGJ1ZiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChtaXgtPmNvbGxlY3QsICZtaXhjb2wtPmNvbGxlY3QpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgIH0KLQotICAgICAgICBuZWVkX21vcmVfZGF0YSA9IFRSVUU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBpZiAoZW5kX3RpbWUgPj0gb3V0cHV0X3N0YXJ0X3RpbWUgJiYgc3RhcnRfdGltZSA8IG91dHB1dF9lbmRfdGltZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYWQsCi0gICAgICAgICAgICAiVGFraW5nIG5ldyBidWZmZXIgd2l0aCBzdGFydCB0aW1lICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICAgIEdTVF9USU1FX0FSR1MgKHN0YXJ0X3RpbWUpKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmbWl4Y29sLT5idWZmZXIsIGJ1Zik7Ci0gICAgICAgIG1peGNvbC0+YnVmZmVyX3ZpbmZvID0gKnZpbmZvOwotICAgICAgICBtaXhjb2wtPnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwotICAgICAgICBtaXhjb2wtPmVuZF90aW1lID0gZW5kX3RpbWU7Ci0KLSAgICAgICAgaWYgKGJ1ZiA9PSBtaXhjb2wtPnF1ZXVlZCkgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmbWl4Y29sLT5xdWV1ZWQsIE5VTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgYnVmID0gZ3N0X2NvbGxlY3RfcGFkc19wb3AgKG1peC0+Y29sbGVjdCwgJm1peGNvbC0+Y29sbGVjdCk7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgfQotICAgICAgICBlb3MgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSBpZiAoc3RhcnRfdGltZSA+PSBvdXRwdXRfZW5kX3RpbWUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiS2VlcGluZyBidWZmZXIgdW50aWwgJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICAgICAgR1NUX1RJTUVfQVJHUyAoc3RhcnRfdGltZSkpOwotICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICBlb3MgPSBGQUxTRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIlRvbyBvbGQgYnVmZmVyIC0tIGRyb3BwaW5nIik7Ci0gICAgICAgIGlmIChidWYgPT0gbWl4Y29sLT5xdWV1ZWQpIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJm1peGNvbC0+cXVldWVkLCBOVUxMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGJ1ZiA9IGdzdF9jb2xsZWN0X3BhZHNfcG9wIChtaXgtPmNvbGxlY3QsICZtaXhjb2wtPmNvbGxlY3QpOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgIH0KLQotICAgICAgICBuZWVkX21vcmVfZGF0YSA9IFRSVUU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAobWl4Y29sLT5lbmRfdGltZSAhPSAtMSkgewotICAgICAgICBpZiAobWl4Y29sLT5lbmRfdGltZSA8PSBvdXRwdXRfc3RhcnRfdGltZSkgewotICAgICAgICAgIGdzdF9idWZmZXJfcmVwbGFjZSAoJm1peGNvbC0+YnVmZmVyLCBOVUxMKTsKLSAgICAgICAgICBtaXhjb2wtPnN0YXJ0X3RpbWUgPSBtaXhjb2wtPmVuZF90aW1lID0gLTE7Ci0gICAgICAgICAgaWYgKCFHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVCAobWl4Y29sLAotICAgICAgICAgICAgICAgICAgR1NUX0NPTExFQ1RfUEFEU19TVEFURV9FT1MpKQotICAgICAgICAgICAgbmVlZF9tb3JlX2RhdGEgPSBUUlVFOwotICAgICAgICB9IGVsc2UgaWYgKCFHU1RfQ09MTEVDVF9QQURTX1NUQVRFX0lTX1NFVCAobWl4Y29sLAotICAgICAgICAgICAgICAgIEdTVF9DT0xMRUNUX1BBRFNfU1RBVEVfRU9TKSkgewotICAgICAgICAgIGVvcyA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKG5lZWRfbW9yZV9kYXRhKQotICAgIHJldHVybiAwOwotICBpZiAoZW9zKQotICAgIHJldHVybiAtMTsKLQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92aWRlb21peGVyMl9ibGVuZF9idWZmZXJzIChHc3RWaWRlb01peGVyMiAqIG1peCwKLSAgICBHc3RDbG9ja1RpbWUgb3V0cHV0X3N0YXJ0X3RpbWUsIEdzdENsb2NrVGltZSBvdXRwdXRfZW5kX3RpbWUsCi0gICAgR3N0QnVmZmVyICoqIG91dGJ1ZikKLXsKLSAgR1NMaXN0ICpsOwotICBndWludCBvdXRzaXplOwotICBCbGVuZEZ1bmN0aW9uIGNvbXBvc2l0ZTsKLSAgR3N0VmlkZW9GcmFtZSBvdXRmcmFtZTsKLSAgc3RhdGljIEdzdEFsbG9jYXRpb25QYXJhbXMgcGFyYW1zID0geyAwLCAxNSwgMCwgMCwgfTsKLQotICBvdXRzaXplID0gR1NUX1ZJREVPX0lORk9fU0laRSAoJm1peC0+aW5mbyk7Ci0KLSAgKm91dGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBvdXRzaXplLCAmcGFyYW1zKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKCpvdXRidWYpID0gb3V0cHV0X3N0YXJ0X3RpbWU7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKCpvdXRidWYpID0gb3V0cHV0X2VuZF90aW1lIC0gb3V0cHV0X3N0YXJ0X3RpbWU7Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX21hcCAoJm91dGZyYW1lLCAmbWl4LT5pbmZvLCAqb3V0YnVmLCBHU1RfTUFQX1JFQURXUklURSk7Ci0KLSAgLyogZGVmYXVsdCB0byBibGVuZGluZyAqLwotICBjb21wb3NpdGUgPSBtaXgtPmJsZW5kOwotICBzd2l0Y2ggKG1peC0+YmFja2dyb3VuZCkgewotICAgIGNhc2UgVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQ0hFQ0tFUjoKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyICgmb3V0ZnJhbWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWSURFT19NSVhFUjJfQkFDS0dST1VORF9CTEFDSzoKLSAgICAgIG1peC0+ZmlsbF9jb2xvciAoJm91dGZyYW1lLCAxNiwgMTI4LCAxMjgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWSURFT19NSVhFUjJfQkFDS0dST1VORF9XSElURToKLSAgICAgIG1peC0+ZmlsbF9jb2xvciAoJm91dGZyYW1lLCAyNDAsIDEyOCwgMTI4KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfVFJBTlNQQVJFTlQ6Ci0gICAgewotICAgICAgZ3VpbnQgaSwgcGxhbmUsIG51bV9wbGFuZXMsIGhlaWdodDsKLQotICAgICAgbnVtX3BsYW5lcyA9IEdTVF9WSURFT19GUkFNRV9OX1BMQU5FUyAoJm91dGZyYW1lKTsKLSAgICAgIGZvciAocGxhbmUgPSAwOyBwbGFuZSA8IG51bV9wbGFuZXM7ICsrcGxhbmUpIHsKLSAgICAgICAgZ3VpbnQ4ICpwZGF0YTsKLSAgICAgICAgZ3NpemUgcm93c2l6ZSwgcGxhbmVfc3RyaWRlOwotCi0gICAgICAgIHBkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEgKCZvdXRmcmFtZSwgcGxhbmUpOwotICAgICAgICBwbGFuZV9zdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFICgmb3V0ZnJhbWUsIHBsYW5lKTsKLSAgICAgICAgcm93c2l6ZSA9IEdTVF9WSURFT19GUkFNRV9DT01QX1dJRFRIICgmb3V0ZnJhbWUsIHBsYW5lKQotICAgICAgICAgICAgKiBHU1RfVklERU9fRlJBTUVfQ09NUF9QU1RSSURFICgmb3V0ZnJhbWUsIHBsYW5lKTsKLSAgICAgICAgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfSEVJR0hUICgmb3V0ZnJhbWUsIHBsYW5lKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgKytpKSB7Ci0gICAgICAgICAgbWVtc2V0IChwZGF0YSwgMCwgcm93c2l6ZSk7Ci0gICAgICAgICAgcGRhdGEgKz0gcGxhbmVfc3RyaWRlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIHVzZSBvdmVybGF5IHRvIGtlZXAgYmFja2dyb3VuZCB0cmFuc3BhcmVudCAqLwotICAgICAgY29tcG9zaXRlID0gbWl4LT5vdmVybGF5OwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChsID0gbWl4LT5zaW5rcGFkczsgbDsgbCA9IGwtPm5leHQpIHsKLSAgICBHc3RWaWRlb01peGVyMlBhZCAqcGFkID0gbC0+ZGF0YTsKLSAgICBHc3RWaWRlb01peGVyMkNvbGxlY3QgKm1peGNvbCA9IHBhZC0+bWl4Y29sOwotCi0gICAgaWYgKG1peGNvbC0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gICAgICBnaW50NjQgc3RyZWFtX3RpbWU7Ci0gICAgICBHc3RTZWdtZW50ICpzZWc7Ci0gICAgICBHc3RWaWRlb0ZyYW1lIGNvbnZlcnRlZF9mcmFtZTsKLSAgICAgIEdzdEJ1ZmZlciAqY29udmVydGVkX2J1ZiA9IE5VTEw7Ci0gICAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOwotCi0gICAgICBzZWcgPSAmbWl4Y29sLT5jb2xsZWN0LnNlZ21lbnQ7Ci0KLSAgICAgIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QIChtaXhjb2wtPmJ1ZmZlcik7Ci0KLSAgICAgIHN0cmVhbV90aW1lID0KLSAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoc2VnLCBHU1RfRk9STUFUX1RJTUUsIHRpbWVzdGFtcCk7Ci0KLSAgICAgIC8qIHN5bmMgb2JqZWN0IHByb3BlcnRpZXMgb24gc3RyZWFtIHRpbWUgKi8KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoc3RyZWFtX3RpbWUpKQotICAgICAgICBnc3Rfb2JqZWN0X3N5bmNfdmFsdWVzIChHU1RfT0JKRUNUIChwYWQpLCBzdHJlYW1fdGltZSk7Ci0KLSAgICAgIGdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJm1peGNvbC0+YnVmZmVyX3ZpbmZvLCBtaXhjb2wtPmJ1ZmZlciwKLSAgICAgICAgICBHU1RfTUFQX1JFQUQpOwotCi0gICAgICBpZiAocGFkLT5jb252ZXJ0KSB7Ci0gICAgICAgIGdpbnQgY29udmVydGVkX3NpemU7Ci0KLSAgICAgICAgLyogV2Ugd2FpdCB1bnRpbCBoZXJlIHRvIHNldCB0aGUgY29udmVyc2lvbiBpbmZvcywgaW4gY2FzZSBtaXgtPmluZm8gY2hhbmdlZCAqLwotICAgICAgICBpZiAocGFkLT5uZWVkX2NvbnZlcnNpb25fdXBkYXRlKSB7Ci0gICAgICAgICAgcGFkLT5jb252ZXJzaW9uX2luZm8gPSBtaXgtPmluZm87Ci0gICAgICAgICAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCAoJihwYWQtPmNvbnZlcnNpb25faW5mbyksCi0gICAgICAgICAgICAgIEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJm1peC0+aW5mbyksIHBhZC0+aW5mby53aWR0aCwKLSAgICAgICAgICAgICAgcGFkLT5pbmZvLmhlaWdodCk7Ci0gICAgICAgICAgcGFkLT5uZWVkX2NvbnZlcnNpb25fdXBkYXRlID0gRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb252ZXJ0ZWRfc2l6ZSA9IHBhZC0+Y29udmVyc2lvbl9pbmZvLnNpemU7Ci0gICAgICAgIGNvbnZlcnRlZF9zaXplID0gY29udmVydGVkX3NpemUgPiBvdXRzaXplID8gY29udmVydGVkX3NpemUgOiBvdXRzaXplOwotICAgICAgICBjb252ZXJ0ZWRfYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIGNvbnZlcnRlZF9zaXplLCAmcGFyYW1zKTsKLQotICAgICAgICBnc3RfdmlkZW9fZnJhbWVfbWFwICgmY29udmVydGVkX2ZyYW1lLCAmKHBhZC0+Y29udmVyc2lvbl9pbmZvKSwKLSAgICAgICAgICAgIGNvbnZlcnRlZF9idWYsIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgICAgICAgZ3N0X3ZpZGVvX2NvbnZlcnRlcl9mcmFtZSAocGFkLT5jb252ZXJ0LCAmZnJhbWUsICZjb252ZXJ0ZWRfZnJhbWUpOwotICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb252ZXJ0ZWRfZnJhbWUgPSBmcmFtZTsKLSAgICAgIH0KLQotICAgICAgY29tcG9zaXRlICgmY29udmVydGVkX2ZyYW1lLCBwYWQtPnhwb3MsIHBhZC0+eXBvcywgcGFkLT5hbHBoYSwgJm91dGZyYW1lKTsKLQotICAgICAgaWYgKHBhZC0+Y29udmVydCkKLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoY29udmVydGVkX2J1Zik7Ci0KLSAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmNvbnZlcnRlZF9mcmFtZSk7Ci0gICAgfQotICB9Ci0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJm91dGZyYW1lKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qIFBlcmZvcm0gcW9zIGNhbGN1bGF0aW9ucyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbmV4dCBmcmFtZS4gUmV0dXJucyBUUlVFIGlmCi0gKiB0aGUgZnJhbWUgc2hvdWxkIGJlIHByb2Nlc3NlZCwgRkFMU0UgaWYgdGhlIGZyYW1lIGNhbiBiZSBkcm9wcGVkIGVudGlyZWx5ICovCi1zdGF0aWMgZ2ludDY0Ci1nc3RfdmlkZW9taXhlcjJfZG9fcW9zIChHc3RWaWRlb01peGVyMiAqIG1peCwgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCkKLXsKLSAgR3N0Q2xvY2tUaW1lIHFvc3RpbWUsIGVhcmxpZXN0X3RpbWU7Ci0gIGdkb3VibGUgcHJvcG9ydGlvbjsKLSAgZ2ludDY0IGppdHRlcjsKLQotICAvKiBubyB0aW1lc3RhbXAsIGNhbid0IGRvIFFvUyA9PiBwcm9jZXNzIGZyYW1lICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHRpbWVzdGFtcCkpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG1peCwgImludmFsaWQgdGltZXN0YW1wLCBjYW4ndCBkbyBRb1MsIHByb2Nlc3MgZnJhbWUiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBnZXQgbGF0ZXN0IFFvUyBvYnNlcnZhdGlvbiB2YWx1ZXMgKi8KLSAgZ3N0X3ZpZGVvbWl4ZXIyX3JlYWRfcW9zIChtaXgsICZwcm9wb3J0aW9uLCAmZWFybGllc3RfdGltZSk7Ci0KLSAgLyogc2tpcCBxb3MgaWYgd2UgaGF2ZSBubyBvYnNlcnZhdGlvbiAoeWV0KSA9PiBwcm9jZXNzIGZyYW1lICovCi0gIGlmIChHX1VOTElLRUxZICghR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGVhcmxpZXN0X3RpbWUpKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChtaXgsICJubyBvYnNlcnZhdGlvbiB5ZXQsIHByb2Nlc3MgZnJhbWUiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvKiBxb3MgaXMgZG9uZSBvbiBydW5uaW5nIHRpbWUgKi8KLSAgcW9zdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZtaXgtPnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSwgdGltZXN0YW1wKTsKLQotICAvKiBzZWUgaG93IG91ciBuZXh0IHRpbWVzdGFtcCByZWxhdGVzIHRvIHRoZSBsYXRlc3QgcW9zIHRpbWVzdGFtcCAqLwotICBHU1RfTE9HX09CSkVDVCAobWl4LCAicW9zdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIiwgZWFybGllc3QgJSIKLSAgICAgIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAocW9zdGltZSksIEdTVF9USU1FX0FSR1MgKGVhcmxpZXN0X3RpbWUpKTsKLQotICBqaXR0ZXIgPSBHU1RfQ0xPQ0tfRElGRiAocW9zdGltZSwgZWFybGllc3RfdGltZSk7Ci0gIGlmIChxb3N0aW1lICE9IEdTVF9DTE9DS19USU1FX05PTkUgJiYgaml0dGVyID4gMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1peCwgIndlIGFyZSBsYXRlLCBkcm9wIGZyYW1lIik7Ci0gICAgcmV0dXJuIGppdHRlcjsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChtaXgsICJwcm9jZXNzIGZyYW1lIik7Ci0gIHJldHVybiBqaXR0ZXI7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdmlkZW9taXhlcjJfY29sbGVjdGVkIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdFZpZGVvTWl4ZXIyICogbWl4KQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0Q2xvY2tUaW1lIG91dHB1dF9zdGFydF90aW1lLCBvdXRwdXRfZW5kX3RpbWU7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmID0gTlVMTDsKLSAgZ2ludCByZXM7Ci0gIGdpbnQ2NCBqaXR0ZXI7Ci0KLSAgLyogSWYgd2UncmUgbm90IG5lZ290aWF0ZWQgeWV0Li4uICovCi0gIGlmIChHU1RfVklERU9fSU5GT19GT1JNQVQgKCZtaXgtPmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfVU5LTk9XTikKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0KLSAgaWYgKG1peC0+c2VuZF9zdHJlYW1fc3RhcnQpIHsKLSAgICBnY2hhciBzX2lkWzMyXTsKLQotICAgIC8qIHN0cmVhbS1zdGFydCAoRklYTUU6IGNyZWF0ZSBpZCBiYXNlZCBvbiBpbnB1dCBpZHMpICovCi0gICAgZ19zbnByaW50ZiAoc19pZCwgc2l6ZW9mIChzX2lkKSwgIm1peC0lMDh4IiwgZ19yYW5kb21faW50ICgpKTsKLSAgICBpZiAoIWdzdF9wYWRfcHVzaF9ldmVudCAobWl4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzX2lkKSkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAobWl4LT5zcmNwYWQsICJTZW5kaW5nIHN0cmVhbSBzdGFydCBldmVudCBmYWlsZWQiKTsKLSAgICB9Ci0gICAgbWl4LT5zZW5kX3N0cmVhbV9zdGFydCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKGdzdF9wYWRfY2hlY2tfcmVjb25maWd1cmUgKG1peC0+c3JjcGFkKSkKLSAgICBnc3RfdmlkZW9taXhlcjJfdXBkYXRlX3NyY19jYXBzIChtaXgpOwotCi0gIGlmIChtaXgtPnNlbmRfY2FwcykgewotICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChtaXgtPnNyY3BhZCwKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfY2FwcyAobWl4LT5jdXJyZW50X2NhcHMpKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChtaXgtPnNyY3BhZCwgIlNlbmRpbmcgY2FwcyBldmVudCBmYWlsZWQiKTsKLSAgICB9Ci0gICAgbWl4LT5zZW5kX2NhcHMgPSBGQUxTRTsKLSAgfQotCi0gIEdTVF9WSURFT19NSVhFUjJfTE9DSyAobWl4KTsKLQotICBpZiAobWl4LT5uZXdzZWdfcGVuZGluZykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1peCwgIlNlbmRpbmcgTkVXU0VHTUVOVCBldmVudCIpOwotICAgIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICAgIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50IChtaXgtPnNyY3BhZCwKLSAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJm1peC0+c2VnbWVudCkpKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICAgIGdvdG8gZG9uZV91bmxvY2tlZDsKLSAgICB9Ci0gICAgR1NUX1ZJREVPX01JWEVSMl9MT0NLIChtaXgpOwotICAgIG1peC0+bmV3c2VnX3BlbmRpbmcgPSBGQUxTRTsKLSAgfQotCi0gIGlmIChtaXgtPnNlZ21lbnQucG9zaXRpb24gPT0gLTEpCi0gICAgb3V0cHV0X3N0YXJ0X3RpbWUgPSBtaXgtPnNlZ21lbnQuc3RhcnQ7Ci0gIGVsc2UKLSAgICBvdXRwdXRfc3RhcnRfdGltZSA9IG1peC0+c2VnbWVudC5wb3NpdGlvbjsKLQotICBvdXRwdXRfZW5kX3RpbWUgPQotICAgICAgbWl4LT50c19vZmZzZXQgKyBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKG1peC0+bmZyYW1lcyArIDEsCi0gICAgICBHU1RfU0VDT05EICogR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZtaXgtPmluZm8pLAotICAgICAgR1NUX1ZJREVPX0lORk9fRlBTX04gKCZtaXgtPmluZm8pKSArIG1peC0+c2VnbWVudC5zdGFydDsKLQotICBpZiAob3V0cHV0X2VuZF90aW1lID49IG1peC0+c2VnbWVudC5zdG9wKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobWl4LCAiU2VnbWVudCBkb25lIik7Ci0gICAgaWYgKCEobWl4LT5zZWdtZW50LmZsYWdzICYgR1NUX1NFR01FTlRfRkxBR19TRUdNRU5UKSkgewotICAgICAgR1NUX1ZJREVPX01JWEVSMl9VTkxPQ0sgKG1peCk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKG1peC0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0KLSAgICAgIHJldCA9IEdTVF9GTE9XX0VPUzsKLSAgICAgIGdvdG8gZG9uZV91bmxvY2tlZDsKLSAgICB9Ci0gIH0KLQotICBpZiAoR19VTkxJS0VMWSAobWl4LT5wZW5kaW5nX3RhZ3MpKSB7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChtaXgtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld190YWcgKG1peC0+cGVuZGluZ190YWdzKSk7Ci0gICAgbWl4LT5wZW5kaW5nX3RhZ3MgPSBOVUxMOwotICB9Ci0KLSAgaWYgKG1peC0+c2VnbWVudC5zdG9wICE9IC0xKQotICAgIG91dHB1dF9lbmRfdGltZSA9IE1JTiAob3V0cHV0X2VuZF90aW1lLCBtaXgtPnNlZ21lbnQuc3RvcCk7Ci0KLSAgcmVzID0gZ3N0X3ZpZGVvbWl4ZXIyX2ZpbGxfcXVldWVzIChtaXgsIG91dHB1dF9zdGFydF90aW1lLCBvdXRwdXRfZW5kX3RpbWUpOwotCi0gIGlmIChyZXMgPT0gMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1peCwgIk5lZWQgbW9yZSBkYXRhIGZvciBkZWNpc2lvbnMiKTsKLSAgICByZXQgPSBHU1RfRkxPV19PSzsKLSAgICBnb3RvIGRvbmU7Ci0gIH0gZWxzZSBpZiAocmVzID09IC0xKSB7Ci0gICAgR1NUX1ZJREVPX01JWEVSMl9VTkxPQ0sgKG1peCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAobWl4LCAiQWxsIHNpbmtwYWRzIGFyZSBFT1MgLS0gZm9yd2FyZGluZyIpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAobWl4LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FT1M7Ci0gICAgZ290byBkb25lX3VubG9ja2VkOwotICB9IGVsc2UgaWYgKHJlcyA9PSAtMikgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKG1peCwgIkVycm9yIGNvbGxlY3RpbmcgYnVmZmVycyIpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGppdHRlciA9IGdzdF92aWRlb21peGVyMl9kb19xb3MgKG1peCwgb3V0cHV0X3N0YXJ0X3RpbWUpOwotICBpZiAoaml0dGVyIDw9IDApIHsKLSAgICByZXQgPQotICAgICAgICBnc3RfdmlkZW9taXhlcjJfYmxlbmRfYnVmZmVycyAobWl4LCBvdXRwdXRfc3RhcnRfdGltZSwKLSAgICAgICAgb3V0cHV0X2VuZF90aW1lLCAmb3V0YnVmKTsKLSAgICBtaXgtPnFvc19wcm9jZXNzZWQrKzsKLSAgfSBlbHNlIHsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgICBtaXgtPnFvc19kcm9wcGVkKys7Ci0KLSAgICAvKiBUT0RPOiBsaXZlICovCi0gICAgbXNnID0KLSAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3FvcyAoR1NUX09CSkVDVF9DQVNUIChtaXgpLCBGQUxTRSwKLSAgICAgICAgZ3N0X3NlZ21lbnRfdG9fcnVubmluZ190aW1lICgmbWl4LT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgICBvdXRwdXRfc3RhcnRfdGltZSksIGdzdF9zZWdtZW50X3RvX3N0cmVhbV90aW1lICgmbWl4LT5zZWdtZW50LAotICAgICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCBvdXRwdXRfc3RhcnRfdGltZSksIG91dHB1dF9zdGFydF90aW1lLAotICAgICAgICBvdXRwdXRfZW5kX3RpbWUgLSBvdXRwdXRfc3RhcnRfdGltZSk7Ci0gICAgZ3N0X21lc3NhZ2Vfc2V0X3Fvc192YWx1ZXMgKG1zZywgaml0dGVyLCBtaXgtPnByb3BvcnRpb24sIDEwMDAwMDApOwotICAgIGdzdF9tZXNzYWdlX3NldF9xb3Nfc3RhdHMgKG1zZywgR1NUX0ZPUk1BVF9CVUZGRVJTLCBtaXgtPnFvc19wcm9jZXNzZWQsCi0gICAgICAgIG1peC0+cW9zX2Ryb3BwZWQpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAobWl4KSwgbXNnKTsKLQotICAgIHJldCA9IEdTVF9GTE9XX09LOwotICB9Ci0KLSAgbWl4LT5zZWdtZW50LnBvc2l0aW9uID0gb3V0cHV0X2VuZF90aW1lOwotICBtaXgtPm5mcmFtZXMrKzsKLQotICBHU1RfVklERU9fTUlYRVIyX1VOTE9DSyAobWl4KTsKLSAgaWYgKG91dGJ1ZikgewotICAgIEdTVF9MT0dfT0JKRUNUIChtaXgsCi0gICAgICAgICJQdXNoaW5nIGJ1ZmZlciB3aXRoIHRzICUiIEdTVF9USU1FX0ZPUk1BVCAiIGFuZCBkdXJhdGlvbiAlIgotICAgICAgICBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9EVVJBVElPTiAob3V0YnVmKSkpOwotICAgIHJldCA9IGdzdF9wYWRfcHVzaCAobWl4LT5zcmNwYWQsIG91dGJ1Zik7Ci0gIH0KLSAgZ290byBkb25lX3VubG9ja2VkOwotCi1kb25lOgotICBHU1RfVklERU9fTUlYRVIyX1VOTE9DSyAobWl4KTsKLQotZG9uZV91bmxvY2tlZDoKLSAgcmV0dXJuIHJldDsKLX0KLQotLyogRklYTUUsIHRoZSBkdXJhdGlvbiBxdWVyeSBzaG91bGQgcmVmbGVjdCBob3cgbG9uZyB5b3Ugd2lsbCBwcm9kdWNlCi0gKiBkYXRhLCB0aGF0IGlzIHRoZSBhbW91bnQgb2Ygc3RyZWFtIHRpbWUgdW50aWwgeW91IHdpbGwgZW1pdCBFT1MuCi0gKgotICogRm9yIHN5bmNocm9uaXplZCBtaXhpbmcgdGhpcyBpcyBhbHdheXMgdGhlIG1heCBvZiBhbGwgdGhlIGR1cmF0aW9ucwotICogb2YgdXBzdHJlYW0gc2luY2Ugd2UgZW1pdCBFT1Mgd2hlbiBhbGwgb2YgdGhlbSBmaW5pc2hlZC4KLSAqCi0gKiBXZSBkb24ndCBkbyBzeW5jaHJvbml6ZWQgbWl4aW5nIHNvIHRoaXMgcmVhbGx5IGRlcGVuZHMgb24gd2hlcmUgdGhlCi0gKiBzdHJlYW1zIHdoZXJlIHB1bmNoZWQgaW4gYW5kIHdoYXQgdGhlaXIgcmVsYXRpdmUgb2Zmc2V0cyBhcmUgYWdhaW5zdAotICogZWFjaG90aGVyIHdoaWNoIHdlIGNhbiBnZXQgZnJvbSB0aGUgZmlyc3QgdGltZXN0YW1wcyB3ZSBzZWUuCi0gKgotICogV2hlbiB3ZSBhZGQgYSBuZXcgc3RyZWFtIChvciByZW1vdmUgYSBzdHJlYW0pIHRoZSBkdXJhdGlvbiBtaWdodAotICogYWxzbyBiZWNvbWUgaW52YWxpZCBhZ2FpbiBhbmQgd2UgbmVlZCB0byBwb3N0IGEgbmV3IERVUkFUSU9OCi0gKiBtZXNzYWdlIHRvIG5vdGlmeSB0aGlzIGZhY3QgdG8gdGhlIHBhcmVudC4KLSAqIEZvciBub3cgd2UgdGFrZSB0aGUgbWF4IG9mIGFsbCB0aGUgdXBzdHJlYW0gZWxlbWVudHMgc28gdGhlIHNpbXBsZQotICogY2FzZXMgd29yayBhdCBsZWFzdCBzb21ld2hhdC4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfcXVlcnlfZHVyYXRpb24gKEdzdFZpZGVvTWl4ZXIyICogbWl4LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHVmFsdWUgaXRlbSA9IHsgMCB9OwotICBnaW50NjQgbWF4OwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdEZvcm1hdCBmb3JtYXQ7Ci0gIEdzdEl0ZXJhdG9yICppdDsKLSAgZ2Jvb2xlYW4gZG9uZTsKLQotICAvKiBwYXJzZSBmb3JtYXQgKi8KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgbWF4ID0gLTE7Ci0gIHJlcyA9IFRSVUU7Ci0gIGRvbmUgPSBGQUxTRTsKLQotICAvKiBUYWtlIG1heGltdW0gb2YgYWxsIGR1cmF0aW9ucyAqLwotICBpdCA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc2lua19wYWRzIChHU1RfRUxFTUVOVF9DQVNUIChtaXgpKTsKLSAgd2hpbGUgKCFkb25lKSB7Ci0gICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dCAoaXQsICZpdGVtKSkgewotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKLSAgICAgICAgZG9uZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6Ci0gICAgICB7Ci0gICAgICAgIEdzdFBhZCAqcGFkOwotICAgICAgICBnaW50NjQgZHVyYXRpb247Ci0KLSAgICAgICAgcGFkID0gZ192YWx1ZV9nZXRfb2JqZWN0ICgmaXRlbSk7Ci0KLSAgICAgICAgLyogYXNrIHNpbmsgcGVlciBmb3IgZHVyYXRpb24gKi8KLSAgICAgICAgcmVzICY9IGdzdF9wYWRfcGVlcl9xdWVyeV9kdXJhdGlvbiAocGFkLCBmb3JtYXQsICZkdXJhdGlvbik7Ci0gICAgICAgIC8qIHRha2UgbWF4IGZyb20gYWxsIHZhbGlkIHJldHVybiB2YWx1ZXMgKi8KLSAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgIC8qIHZhbGlkIHVua25vd24gbGVuZ3RoLCBzdG9wIHNlYXJjaGluZyAqLwotICAgICAgICAgIGlmIChkdXJhdGlvbiA9PSAtMSkgewotICAgICAgICAgICAgbWF4ID0gZHVyYXRpb247Ci0gICAgICAgICAgICBkb25lID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogZWxzZSBzZWUgaWYgYmlnZ2VyIHRoYW4gY3VycmVudCBtYXggKi8KLSAgICAgICAgICBlbHNlIGlmIChkdXJhdGlvbiA+IG1heCkKLSAgICAgICAgICAgIG1heCA9IGR1cmF0aW9uOwotICAgICAgICB9Ci0gICAgICAgIGdfdmFsdWVfcmVzZXQgKCZpdGVtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAgIG1heCA9IC0xOwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jIChpdCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgIGRvbmUgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZ192YWx1ZV91bnNldCAoJml0ZW0pOwotICBnc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIGlmIChyZXMpIHsKLSAgICAvKiBhbmQgc3RvcmUgdGhlIG1heCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1peCwgIlRvdGFsIGR1cmF0aW9uIGluIGZvcm1hdCAlczogJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFULCBnc3RfZm9ybWF0X2dldF9uYW1lIChmb3JtYXQpLCBHU1RfVElNRV9BUkdTIChtYXgpKTsKLSAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uIChxdWVyeSwgZm9ybWF0LCBtYXgpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfc3JjX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0VmlkZW9NaXhlcjIgKm1peCA9IEdTVF9WSURFT19NSVhFUjIgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX1BPU0lUSU9OOgotICAgIHsKLSAgICAgIEdzdEZvcm1hdCBmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotCi0gICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LAotICAgICAgICAgICAgICBnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZSAoJm1peC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgICAgICAgICAgbWl4LT5zZWdtZW50LnBvc2l0aW9uKSk7Ci0gICAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9EVVJBVElPTjoKLSAgICAgIHJlcyA9IGdzdF92aWRlb21peGVyMl9xdWVyeV9kdXJhdGlvbiAobWl4LCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIEZJWE1FLCBuZWVkcyBhIGN1c3RvbSBxdWVyeSBoYW5kbGVyIGJlY2F1c2Ugd2UgaGF2ZSBtdWx0aXBsZQotICAgICAgICogc2lua3BhZHMgKi8KLSAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0VmlkZW9NaXhlcjIgKm1peCA9IEdTVF9WSURFT19NSVhFUjIgKHBhcmVudCk7Ci0gIGdib29sZWFuIHJlc3VsdDsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9RT1M6Ci0gICAgewotICAgICAgR3N0UU9TVHlwZSB0eXBlOwotICAgICAgR3N0Q2xvY2tUaW1lRGlmZiBkaWZmOwotICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgICAgIGdkb3VibGUgcHJvcG9ydGlvbjsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3FvcyAoZXZlbnQsICZ0eXBlLCAmcHJvcG9ydGlvbiwgJmRpZmYsICZ0aW1lc3RhbXApOwotCi0gICAgICBnc3RfdmlkZW9taXhlcjJfdXBkYXRlX3FvcyAobWl4LCBwcm9wb3J0aW9uLCBkaWZmLCB0aW1lc3RhbXApOwotCi0gICAgICByZXN1bHQgPSBnc3RfdmlkZW9taXhlcjJfcHVzaF9zaW5rX2V2ZW50IChtaXgsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgIHsKLSAgICAgIGdkb3VibGUgcmF0ZTsKLSAgICAgIEdzdEZvcm1hdCBmbXQ7Ci0gICAgICBHc3RTZWVrRmxhZ3MgZmxhZ3M7Ci0gICAgICBHc3RTZWVrVHlwZSBzdGFydF90eXBlLCBzdG9wX3R5cGU7Ci0gICAgICBnaW50NjQgc3RhcnQsIHN0b3A7Ci0gICAgICBHU0xpc3QgKmw7Ci0gICAgICBnZG91YmxlIGFic19yYXRlOwotCi0gICAgICAvKiBwYXJzZSB0aGUgc2VlayBwYXJhbWV0ZXJzICovCi0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm10LCAmZmxhZ3MsICZzdGFydF90eXBlLAotICAgICAgICAgICZzdGFydCwgJnN0b3BfdHlwZSwgJnN0b3ApOwotCi0gICAgICBpZiAocmF0ZSA8PSAwLjApIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVCAobWl4LCAiTmVnYXRpdmUgcmF0ZXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKLSAgICAgICAgcmVzdWx0ID0gRkFMU0U7Ci0gICAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobWl4LCAiSGFuZGxpbmcgU0VFSyBldmVudCIpOwotCi0gICAgICBhYnNfcmF0ZSA9IEFCUyAocmF0ZSk7Ci0KLSAgICAgIEdTVF9WSURFT19NSVhFUjJfTE9DSyAobWl4KTsKLSAgICAgIGZvciAobCA9IG1peC0+c2lua3BhZHM7IGw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICAgIEdzdFZpZGVvTWl4ZXIyUGFkICpwID0gbC0+ZGF0YTsKLQotICAgICAgICBpZiAoZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIKSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmcC0+bWl4Y29sLT5idWZmZXIsIE5VTEwpOwotICAgICAgICAgIHAtPm1peGNvbC0+c3RhcnRfdGltZSA9IHAtPm1peGNvbC0+ZW5kX3RpbWUgPSAtMTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIENvbnZlcnQgdG8gdGhlIG91dHB1dCBzZWdtZW50IHJhdGUgKi8KLSAgICAgICAgaWYgKEFCUyAobWl4LT5zZWdtZW50LnJhdGUpICE9IGFic19yYXRlKSB7Ci0gICAgICAgICAgaWYgKEFCUyAobWl4LT5zZWdtZW50LnJhdGUpICE9IDEuMCAmJiBwLT5taXhjb2wtPmJ1ZmZlcikgewotICAgICAgICAgICAgcC0+bWl4Y29sLT5zdGFydF90aW1lIC89IEFCUyAobWl4LT5zZWdtZW50LnJhdGUpOwotICAgICAgICAgICAgcC0+bWl4Y29sLT5lbmRfdGltZSAvPSBBQlMgKG1peC0+c2VnbWVudC5yYXRlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGFic19yYXRlICE9IDEuMCAmJiBwLT5taXhjb2wtPmJ1ZmZlcikgewotICAgICAgICAgICAgcC0+bWl4Y29sLT5zdGFydF90aW1lICo9IGFic19yYXRlOwotICAgICAgICAgICAgcC0+bWl4Y29sLT5lbmRfdGltZSAqPSBhYnNfcmF0ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotCi0gICAgICBnc3Rfc2VnbWVudF9kb19zZWVrICgmbWl4LT5zZWdtZW50LCByYXRlLCBmbXQsIGZsYWdzLCBzdGFydF90eXBlLCBzdGFydCwKLSAgICAgICAgICBzdG9wX3R5cGUsIHN0b3AsIE5VTEwpOwotICAgICAgbWl4LT5zZWdtZW50LnBvc2l0aW9uID0gLTE7Ci0gICAgICBtaXgtPnRzX29mZnNldCA9IDA7Ci0gICAgICBtaXgtPm5mcmFtZXMgPSAwOwotICAgICAgbWl4LT5uZXdzZWdfcGVuZGluZyA9IFRSVUU7Ci0KLSAgICAgIGdzdF92aWRlb21peGVyMl9yZXNldF9xb3MgKG1peCk7Ci0KLSAgICAgIHJlc3VsdCA9IGdzdF9jb2xsZWN0X3BhZHNfc3JjX2V2ZW50X2RlZmF1bHQgKG1peC0+Y29sbGVjdCwgcGFkLCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfTkFWSUdBVElPTjoKLSAgICAgIC8qIG5hdmlnYXRpb24gaXMgcmF0aGVyIHBvaW50bGVzcy4gKi8KLSAgICAgIHJlc3VsdCA9IEZBTFNFOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgLyoganVzdCBmb3J3YXJkIHRoZSByZXN0IGZvciBub3cgKi8KLSAgICAgIHJlc3VsdCA9IGdzdF92aWRlb21peGVyMl9wdXNoX3NpbmtfZXZlbnQgKG1peCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92aWRlb21peGVyMl9zcmNfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RWaWRlb01peGVyMiAqIG1peCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBHc3RWaWRlb0luZm8gaW5mbzsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHBhZCwgInNldCBzcmMgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpCi0gICAgZ290byBkb25lOwotCi0gIEdTVF9WSURFT19NSVhFUjJfTE9DSyAobWl4KTsKLQotICBtaXgtPmJsZW5kID0gTlVMTDsKLSAgbWl4LT5vdmVybGF5ID0gTlVMTDsKLSAgbWl4LT5maWxsX2NoZWNrZXIgPSBOVUxMOwotICBtaXgtPmZpbGxfY29sb3IgPSBOVUxMOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19GUFNfTiAoJm1peC0+aW5mbykgIT0gR1NUX1ZJREVPX0lORk9fRlBTX04gKCZpbmZvKSB8fAotICAgICAgR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZtaXgtPmluZm8pICE9IEdTVF9WSURFT19JTkZPX0ZQU19EICgmaW5mbykpIHsKLSAgICBpZiAobWl4LT5zZWdtZW50LnBvc2l0aW9uICE9IC0xKSB7Ci0gICAgICBtaXgtPnRzX29mZnNldCA9IG1peC0+c2VnbWVudC5wb3NpdGlvbiAtIG1peC0+c2VnbWVudC5zdGFydDsKLSAgICAgIG1peC0+bmZyYW1lcyA9IDA7Ci0gICAgfQotICAgIGdzdF92aWRlb21peGVyMl9yZXNldF9xb3MgKG1peCk7Ci0gIH0KLQotICBtaXgtPmluZm8gPSBpbmZvOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUICgmbWl4LT5pbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BWVVWOgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF9heXV2OwotICAgICAgbWl4LT5vdmVybGF5ID0gZ3N0X3ZpZGVvX21peGVyX292ZXJsYXlfYXl1djsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9heXV2OwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYXl1djsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQVJHQjoKLSAgICAgIG1peC0+YmxlbmQgPSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfYXJnYjsKLSAgICAgIG1peC0+b3ZlcmxheSA9IGdzdF92aWRlb19taXhlcl9vdmVybGF5X2FyZ2I7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYXJnYjsKLSAgICAgIG1peC0+ZmlsbF9jb2xvciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX2FyZ2I7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUkE6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX2JncmE7Ci0gICAgICBtaXgtPm92ZXJsYXkgPSBnc3RfdmlkZW9fbWl4ZXJfb3ZlcmxheV9iZ3JhOwotICAgICAgbWl4LT5maWxsX2NoZWNrZXIgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX2JncmE7Ci0gICAgICBtaXgtPmZpbGxfY29sb3IgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9iZ3JhOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BQkdSOgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF9hYmdyOwotICAgICAgbWl4LT5vdmVybGF5ID0gZ3N0X3ZpZGVvX21peGVyX292ZXJsYXlfYWJncjsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9hYmdyOwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYWJncjsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCQToKLSAgICAgIG1peC0+YmxlbmQgPSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfcmdiYTsKLSAgICAgIG1peC0+b3ZlcmxheSA9IGdzdF92aWRlb19taXhlcl9vdmVybGF5X3JnYmE7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfcmdiYTsKLSAgICAgIG1peC0+ZmlsbF9jb2xvciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3JnYmE7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0NDQ6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3k0NDQ7Ci0gICAgICBtaXgtPm92ZXJsYXkgPSBtaXgtPmJsZW5kOwotICAgICAgbWl4LT5maWxsX2NoZWNrZXIgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3k0NDQ7Ci0gICAgICBtaXgtPmZpbGxfY29sb3IgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDQ0OwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDJCOgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF95NDJiOwotICAgICAgbWl4LT5vdmVybGF5ID0gbWl4LT5ibGVuZDsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95NDJiOwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeTQyYjsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVVZMjoKLSAgICAgIG1peC0+YmxlbmQgPSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeXV5MjsKLSAgICAgIG1peC0+b3ZlcmxheSA9IG1peC0+YmxlbmQ7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfeXV5MjsKLSAgICAgIG1peC0+ZmlsbF9jb2xvciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3l1eTI7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1VZVlk6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3V5dnk7Ci0gICAgICBtaXgtPm92ZXJsYXkgPSBtaXgtPmJsZW5kOwotICAgICAgbWl4LT5maWxsX2NoZWNrZXIgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3V5dnk7Ci0gICAgICBtaXgtPmZpbGxfY29sb3IgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl91eXZ5OwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZVllVOgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF95dnl1OwotICAgICAgbWl4LT5vdmVybGF5ID0gbWl4LT5ibGVuZDsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl95dnl1OwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeXZ5dTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICAgIG1peC0+YmxlbmQgPSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfaTQyMDsKLSAgICAgIG1peC0+b3ZlcmxheSA9IG1peC0+YmxlbmQ7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfaTQyMDsKLSAgICAgIG1peC0+ZmlsbF9jb2xvciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX2k0MjA7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lWMTI6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3l2MTI7Ci0gICAgICBtaXgtPm92ZXJsYXkgPSBtaXgtPmJsZW5kOwotICAgICAgbWl4LT5maWxsX2NoZWNrZXIgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3l2MTI7Ci0gICAgICBtaXgtPmZpbGxfY29sb3IgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95djEyOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjEyOgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF9udjEyOwotICAgICAgbWl4LT5vdmVybGF5ID0gbWl4LT5ibGVuZDsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9udjEyOwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfbnYxMjsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfTlYyMToKLSAgICAgIG1peC0+YmxlbmQgPSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfbnYyMTsKLSAgICAgIG1peC0+b3ZlcmxheSA9IG1peC0+YmxlbmQ7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfbnYyMTsKLSAgICAgIG1peC0+ZmlsbF9jb2xvciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX252MjE7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3k0MWI7Ci0gICAgICBtaXgtPm92ZXJsYXkgPSBtaXgtPmJsZW5kOwotICAgICAgbWl4LT5maWxsX2NoZWNrZXIgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3k0MWI7Ci0gICAgICBtaXgtPmZpbGxfY29sb3IgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl95NDFiOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9SR0I6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3JnYjsKLSAgICAgIG1peC0+b3ZlcmxheSA9IG1peC0+YmxlbmQ7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfcmdiOwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfcmdiOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1I6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX2JncjsKLSAgICAgIG1peC0+b3ZlcmxheSA9IG1peC0+YmxlbmQ7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfYmdyOwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyOwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF94UkdCOgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF94cmdiOwotICAgICAgbWl4LT5vdmVybGF5ID0gbWl4LT5ibGVuZDsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl94cmdiOwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfeHJnYjsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeEJHUjoKLSAgICAgIG1peC0+YmxlbmQgPSBnc3RfdmlkZW9fbWl4ZXJfYmxlbmRfeGJncjsKLSAgICAgIG1peC0+b3ZlcmxheSA9IG1peC0+YmxlbmQ7Ci0gICAgICBtaXgtPmZpbGxfY2hlY2tlciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NoZWNrZXJfeGJncjsKLSAgICAgIG1peC0+ZmlsbF9jb2xvciA9IGdzdF92aWRlb19taXhlcl9maWxsX2NvbG9yX3hiZ3I7Ci0gICAgICByZXQgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQng6Ci0gICAgICBtaXgtPmJsZW5kID0gZ3N0X3ZpZGVvX21peGVyX2JsZW5kX3JnYng7Ci0gICAgICBtaXgtPm92ZXJsYXkgPSBtaXgtPmJsZW5kOwotICAgICAgbWl4LT5maWxsX2NoZWNrZXIgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jaGVja2VyX3JnYng7Ci0gICAgICBtaXgtPmZpbGxfY29sb3IgPSBnc3RfdmlkZW9fbWl4ZXJfZmlsbF9jb2xvcl9yZ2J4OwotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1J4OgotICAgICAgbWl4LT5ibGVuZCA9IGdzdF92aWRlb19taXhlcl9ibGVuZF9iZ3J4OwotICAgICAgbWl4LT5vdmVybGF5ID0gbWl4LT5ibGVuZDsKLSAgICAgIG1peC0+ZmlsbF9jaGVja2VyID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY2hlY2tlcl9iZ3J4OwotICAgICAgbWl4LT5maWxsX2NvbG9yID0gZ3N0X3ZpZGVvX21peGVyX2ZpbGxfY29sb3JfYmdyeDsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgR1NUX1ZJREVPX01JWEVSMl9VTkxPQ0sgKG1peCk7Ci0KLSAgaWYgKG1peC0+Y3VycmVudF9jYXBzID09IE5VTEwgfHwKLSAgICAgIGdzdF9jYXBzX2lzX2VxdWFsIChjYXBzLCBtaXgtPmN1cnJlbnRfY2FwcykgPT0gRkFMU0UpIHsKLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmbWl4LT5jdXJyZW50X2NhcHMsIGNhcHMpOwotICAgIG1peC0+c2VuZF9jYXBzID0gVFJVRTsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3ZpZGVvbWl4ZXIyX3NpbmtfY2xpcCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLAotICAgIEdzdENvbGxlY3REYXRhICogZGF0YSwgR3N0QnVmZmVyICogYnVmLCBHc3RCdWZmZXIgKiogb3V0YnVmLAotICAgIEdzdFZpZGVvTWl4ZXIyICogbWl4KQotewotICBHc3RWaWRlb01peGVyMlBhZCAqcGFkID0gR1NUX1ZJREVPX01JWEVSMl9QQUQgKGRhdGEtPnBhZCk7Ci0gIEdzdFZpZGVvTWl4ZXIyQ29sbGVjdCAqbWl4Y29sID0gcGFkLT5taXhjb2w7Ci0gIEdzdENsb2NrVGltZSBzdGFydF90aW1lLCBlbmRfdGltZTsKLQotICBzdGFydF90aW1lID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIGlmIChzdGFydF90aW1lID09IC0xKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocGFkLCAiVGltZXN0YW1wZWQgYnVmZmVycyByZXF1aXJlZCEiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGVuZF90aW1lID0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLSAgaWYgKGVuZF90aW1lID09IC0xICYmIEdTVF9WSURFT19JTkZPX0ZQU19OICgmcGFkLT5pbmZvKSAhPSAwKQotICAgIGVuZF90aW1lID0KLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCAoR1NUX1NFQ09ORCwKLSAgICAgICAgR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZwYWQtPmluZm8pLCBHU1RfVklERU9fSU5GT19GUFNfTiAoJnBhZC0+aW5mbykpOwotICBpZiAoZW5kX3RpbWUgPT0gLTEpIHsKLSAgICAqb3V0YnVmID0gYnVmOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgfQotCi0gIHN0YXJ0X3RpbWUgPSBNQVggKHN0YXJ0X3RpbWUsIG1peGNvbC0+Y29sbGVjdC5zZWdtZW50LnN0YXJ0KTsKLSAgc3RhcnRfdGltZSA9Ci0gICAgICBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZtaXhjb2wtPmNvbGxlY3Quc2VnbWVudCwKLSAgICAgIEdTVF9GT1JNQVRfVElNRSwgc3RhcnRfdGltZSk7Ci0KLSAgZW5kX3RpbWUgKz0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gIGlmIChtaXhjb2wtPmNvbGxlY3Quc2VnbWVudC5zdG9wICE9IC0xKQotICAgIGVuZF90aW1lID0gTUlOIChlbmRfdGltZSwgbWl4Y29sLT5jb2xsZWN0LnNlZ21lbnQuc3RvcCk7Ci0gIGVuZF90aW1lID0KLSAgICAgIGdzdF9zZWdtZW50X3RvX3J1bm5pbmdfdGltZSAoJm1peGNvbC0+Y29sbGVjdC5zZWdtZW50LAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCBlbmRfdGltZSk7Ci0KLSAgLyogQ29udmVydCB0byB0aGUgb3V0cHV0IHNlZ21lbnQgcmF0ZSAqLwotICBpZiAoQUJTIChtaXgtPnNlZ21lbnQucmF0ZSkgIT0gMS4wKSB7Ci0gICAgc3RhcnRfdGltZSAqPSBBQlMgKG1peC0+c2VnbWVudC5yYXRlKTsKLSAgICBlbmRfdGltZSAqPSBBQlMgKG1peC0+c2VnbWVudC5yYXRlKTsKLSAgfQotCi0gIGlmIChtaXhjb2wtPmJ1ZmZlciAhPSBOVUxMICYmIGVuZF90aW1lIDwgbWl4Y29sLT5lbmRfdGltZSkgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgKm91dGJ1ZiA9IE5VTEw7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotICB9Ci0KLSAgKm91dGJ1ZiA9IGJ1ZjsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX2ZsdXNoIChHc3RDb2xsZWN0UGFkcyAqIHBhZHMsIEdzdFZpZGVvTWl4ZXIyICogbWl4KQotewotICBpZiAobWl4LT5wZW5kaW5nX3RhZ3MpIHsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKG1peC0+cGVuZGluZ190YWdzKTsKLSAgICBtaXgtPnBlbmRpbmdfdGFncyA9IE5VTEw7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfc2lua19ldmVudCAoR3N0Q29sbGVjdFBhZHMgKiBwYWRzLCBHc3RDb2xsZWN0RGF0YSAqIGNkYXRhLAotICAgIEdzdEV2ZW50ICogZXZlbnQsIEdzdFZpZGVvTWl4ZXIyICogbWl4KQotewotICBHc3RWaWRlb01peGVyMlBhZCAqcGFkID0gR1NUX1ZJREVPX01JWEVSMl9QQUQgKGNkYXRhLT5wYWQpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFLCBkaXNjYXJkID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiR290ICVzIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgZXZlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV2ZW50LCAmY2Fwcyk7Ci0gICAgICByZXQgPQotICAgICAgICAgIGdzdF92aWRlb21peGVyMl9wYWRfc2lua19zZXRjYXBzIChHU1RfUEFEIChwYWQpLCBHU1RfT0JKRUNUIChtaXgpLAotICAgICAgICAgIGNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBldmVudCA9IE5VTEw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDp7Ci0gICAgICBHc3RTZWdtZW50IHNlZzsKLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VnKTsKLQotICAgICAgZ19hc3NlcnQgKHNlZy5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKTsKLSAgICAgIGdzdF92aWRlb21peGVyMl9yZXNldF9xb3MgKG1peCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKLSAgICAgIG1peC0+bmV3c2VnX3BlbmRpbmcgPSBUUlVFOwotCi0gICAgICBnc3RfdmlkZW9taXhlcjJfcmVzZXRfcW9zIChtaXgpOwotICAgICAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmcGFkLT5taXhjb2wtPmJ1ZmZlciwgTlVMTCk7Ci0gICAgICBwYWQtPm1peGNvbC0+c3RhcnRfdGltZSA9IC0xOwotICAgICAgcGFkLT5taXhjb2wtPmVuZF90aW1lID0gLTE7Ci0KLSAgICAgIG1peC0+c2VnbWVudC5wb3NpdGlvbiA9IC0xOwotICAgICAgbWl4LT50c19vZmZzZXQgPSAwOwotICAgICAgbWl4LT5uZnJhbWVzID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1RBRzoKLSAgICB7Ci0gICAgICAvKiBjb2xsZWN0IHRhZ3MgaGVyZSBzbyB3ZSBjYW4gcHVzaCB0aGVtIG91dCB3aGVuIHdlIGNvbGxlY3QgZGF0YSAqLwotICAgICAgR3N0VGFnTGlzdCAqdGFnczsKLQotICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZ0YWdzKTsKLSAgICAgIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbWVyZ2UgKG1peC0+cGVuZGluZ190YWdzLCB0YWdzLCBHU1RfVEFHX01FUkdFX0FQUEVORCk7Ci0gICAgICBpZiAobWl4LT5wZW5kaW5nX3RhZ3MpCi0gICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAobWl4LT5wZW5kaW5nX3RhZ3MpOwotICAgICAgbWl4LT5wZW5kaW5nX3RhZ3MgPSB0YWdzOwotICAgICAgZXZlbnQgPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChldmVudCAhPSBOVUxMKQotICAgIHJldHVybiBnc3RfY29sbGVjdF9wYWRzX2V2ZW50X2RlZmF1bHQgKHBhZHMsIGNkYXRhLCBldmVudCwgZGlzY2FyZCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1mb3J3YXJkX2V2ZW50X2Z1bmMgKEdWYWx1ZSAqIGl0ZW0sIEdWYWx1ZSAqIHJldCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0UGFkICpwYWQgPSBnX3ZhbHVlX2dldF9vYmplY3QgKGl0ZW0pOwotICBnc3RfZXZlbnRfcmVmIChldmVudCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChwYWQsICJBYm91dCB0byBzZW5kIGV2ZW50ICVzIiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgaWYgKCFnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpKSB7Ci0gICAgZ192YWx1ZV9zZXRfYm9vbGVhbiAocmV0LCBGQUxTRSk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYWQsICJTZW5kaW5nIGV2ZW50ICAlcCAoJXMpIGZhaWxlZC4iLAotICAgICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocGFkLCAiU2VudCBldmVudCAgJXAgKCVzKS4iLAotICAgICAgICBldmVudCwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdmlkZW9taXhlcjJfcHVzaF9zaW5rX2V2ZW50IChHc3RWaWRlb01peGVyMiAqIG1peCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0SXRlcmF0b3IgKml0OwotICBHVmFsdWUgdnJldCA9IHsgMCB9OwotCi0gIEdTVF9MT0dfT0JKRUNUIChtaXgsICJGb3J3YXJkaW5nIGV2ZW50ICVwICglcykiLCBldmVudCwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdnJldCwgR19UWVBFX0JPT0xFQU4pOwotICBnX3ZhbHVlX3NldF9ib29sZWFuICgmdnJldCwgVFJVRSk7Ci0gIGl0ID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zaW5rX3BhZHMgKEdTVF9FTEVNRU5UX0NBU1QgKG1peCkpOwotICBnc3RfaXRlcmF0b3JfZm9sZCAoaXQsIChHc3RJdGVyYXRvckZvbGRGdW5jdGlvbikgZm9yd2FyZF9ldmVudF9mdW5jLCAmdnJldCwKLSAgICAgIGV2ZW50KTsKLSAgZ3N0X2l0ZXJhdG9yX2ZyZWUgKGl0KTsKLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0KLSAgcmV0dXJuIGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKCZ2cmV0KTsKLX0KLQotLyogR3N0RWxlbWVudCB2bWV0aG9kcyAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfdmlkZW9taXhlcjJfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0VmlkZW9NaXhlcjIgKm1peCA9IEdTVF9WSURFT19NSVhFUjIgKGVsZW1lbnQpOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKLSAgICAgIG1peC0+c2VuZF9zdHJlYW1fc3RhcnQgPSBUUlVFOwotICAgICAgbWl4LT5zZW5kX2NhcHMgPSBUUlVFOwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJm1peC0+c2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZtaXgtPmN1cnJlbnRfY2FwcywgTlVMTCk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAobWl4LCAic3RhcnRpbmcgY29sbGVjdHBhZHMiKTsKLSAgICAgIGdzdF9jb2xsZWN0X3BhZHNfc3RhcnQgKG1peC0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgR1NUX0xPR19PQkpFQ1QgKG1peCwgInN0b3BwaW5nIGNvbGxlY3RwYWRzIik7Ci0gICAgICBnc3RfY29sbGVjdF9wYWRzX3N0b3AgKG1peC0+Y29sbGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3ZpZGVvbWl4ZXIyX3Jlc2V0IChtaXgpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFBhZCAqCi1nc3RfdmlkZW9taXhlcjJfcmVxdWVzdF9uZXdfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBjb25zdCBnY2hhciAqIHJlcV9uYW1lLCBjb25zdCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0VmlkZW9NaXhlcjIgKm1peDsKLSAgR3N0VmlkZW9NaXhlcjJQYWQgKm1peHBhZDsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAoZWxlbWVudCk7Ci0KLSAgbWl4ID0gR1NUX1ZJREVPX01JWEVSMiAoZWxlbWVudCk7Ci0KLSAgaWYgKHRlbXBsID09IGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKGtsYXNzLCAic2lua18ldSIpKSB7Ci0gICAgZ3VpbnQgc2VyaWFsID0gMDsKLSAgICBnY2hhciAqbmFtZSA9IE5VTEw7Ci0gICAgR3N0VmlkZW9NaXhlcjJDb2xsZWN0ICptaXhjb2wgPSBOVUxMOwotCi0gICAgR1NUX1ZJREVPX01JWEVSMl9MT0NLIChtaXgpOwotICAgIGlmIChyZXFfbmFtZSA9PSBOVUxMIHx8IHN0cmxlbiAocmVxX25hbWUpIDwgNgotICAgICAgICB8fCAhZ19zdHJfaGFzX3ByZWZpeCAocmVxX25hbWUsICJzaW5rXyIpKSB7Ci0gICAgICAvKiBubyBuYW1lIGdpdmVuIHdoZW4gcmVxdWVzdGluZyB0aGUgcGFkLCB1c2UgbmV4dCBhdmFpbGFibGUgaW50ICovCi0gICAgICBzZXJpYWwgPSBtaXgtPm5leHRfc2lua3BhZCsrOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBwYXJzZSBzZXJpYWwgbnVtYmVyIGZyb20gcmVxdWVzdGVkIHBhZG5hbWUgKi8KLSAgICAgIHNlcmlhbCA9IGdfYXNjaWlfc3RydG91bGwgKCZyZXFfbmFtZVs1XSwgTlVMTCwgMTApOwotICAgICAgaWYgKHNlcmlhbCA+PSBtaXgtPm5leHRfc2lua3BhZCkKLSAgICAgICAgbWl4LT5uZXh0X3NpbmtwYWQgPSBzZXJpYWwgKyAxOwotICAgIH0KLSAgICAvKiBjcmVhdGUgbmV3IHBhZCB3aXRoIHRoZSBuYW1lICovCi0gICAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmtfJXUiLCBzZXJpYWwpOwotICAgIG1peHBhZCA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfVklERU9fTUlYRVIyX1BBRCwgIm5hbWUiLCBuYW1lLCAiZGlyZWN0aW9uIiwKLSAgICAgICAgdGVtcGwtPmRpcmVjdGlvbiwgInRlbXBsYXRlIiwgdGVtcGwsIE5VTEwpOwotICAgIGdfZnJlZSAobmFtZSk7Ci0KLSAgICBtaXhwYWQtPnpvcmRlciA9IG1peC0+bnVtcGFkczsKLSAgICBtaXhwYWQtPnhwb3MgPSBERUZBVUxUX1BBRF9YUE9TOwotICAgIG1peHBhZC0+eXBvcyA9IERFRkFVTFRfUEFEX1lQT1M7Ci0gICAgbWl4cGFkLT5hbHBoYSA9IERFRkFVTFRfUEFEX0FMUEhBOwotCi0gICAgbWl4Y29sID0gKEdzdFZpZGVvTWl4ZXIyQ29sbGVjdCAqKQotICAgICAgICBnc3RfY29sbGVjdF9wYWRzX2FkZF9wYWQgKG1peC0+Y29sbGVjdCwgR1NUX1BBRCAobWl4cGFkKSwKLSAgICAgICAgc2l6ZW9mIChHc3RWaWRlb01peGVyMkNvbGxlY3QpLAotICAgICAgICAoR3N0Q29sbGVjdERhdGFEZXN0cm95Tm90aWZ5KSBnc3RfdmlkZW9taXhlcjJfY29sbGVjdF9mcmVlLCBUUlVFKTsKLQotICAgIC8qIEtlZXAgdHJhY2sgb2YgZWFjaCBvdGhlciAqLwotICAgIG1peGNvbC0+bWl4cGFkID0gbWl4cGFkOwotICAgIG1peHBhZC0+bWl4Y29sID0gbWl4Y29sOwotCi0gICAgbWl4Y29sLT5zdGFydF90aW1lID0gLTE7Ci0gICAgbWl4Y29sLT5lbmRfdGltZSA9IC0xOwotCi0gICAgLyogS2VlcCBhbiBpbnRlcm5hbCBsaXN0IG9mIG1peHBhZHMgZm9yIHpvcmRlcmluZyAqLwotICAgIG1peC0+c2lua3BhZHMgPSBnX3NsaXN0X2luc2VydF9zb3J0ZWQgKG1peC0+c2lua3BhZHMsIG1peHBhZCwKLSAgICAgICAgKEdDb21wYXJlRnVuYykgcGFkX3pvcmRlcl9jb21wYXJlKTsKLSAgICBtaXgtPm51bXBhZHMrKzsKLSAgICBHU1RfVklERU9fTUlYRVIyX1VOTE9DSyAobWl4KTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJBZGRpbmcgcGFkICVzIiwgR1NUX1BBRF9OQU1FIChtaXhwYWQpKTsKLQotICAvKiBhZGQgdGhlIHBhZCB0byB0aGUgZWxlbWVudCAqLwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChlbGVtZW50LCBHU1RfUEFEIChtaXhwYWQpKTsKLSAgZ3N0X2NoaWxkX3Byb3h5X2NoaWxkX2FkZGVkIChHU1RfQ0hJTERfUFJPWFkgKG1peCksIEdfT0JKRUNUIChtaXhwYWQpLAotICAgICAgR1NUX09CSkVDVF9OQU1FIChtaXhwYWQpKTsKLQotICByZXR1cm4gR1NUX1BBRCAobWl4cGFkKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb21peGVyMl9yZWxlYXNlX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0VmlkZW9NaXhlcjIgKm1peCA9IE5VTEw7Ci0gIEdzdFZpZGVvTWl4ZXIyUGFkICptaXhwYWQ7Ci0gIGdib29sZWFuIHVwZGF0ZV9jYXBzOwotCi0gIG1peCA9IEdTVF9WSURFT19NSVhFUjIgKGVsZW1lbnQpOwotCi0gIEdTVF9WSURFT19NSVhFUjJfTE9DSyAobWl4KTsKLSAgaWYgKEdfVU5MSUtFTFkgKGdfc2xpc3RfZmluZCAobWl4LT5zaW5rcGFkcywgcGFkKSA9PSBOVUxMKSkgewotICAgIGdfd2FybmluZyAoIlVua25vd24gcGFkICVzIiwgR1NUX1BBRF9OQU1FIChwYWQpKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci0KLSAgbWl4cGFkID0gR1NUX1ZJREVPX01JWEVSMl9QQUQgKHBhZCk7Ci0KLSAgaWYgKG1peHBhZC0+Y29udmVydCkKLSAgICBnc3RfdmlkZW9fY29udmVydGVyX2ZyZWUgKG1peHBhZC0+Y29udmVydCk7Ci0gIG1peHBhZC0+Y29udmVydCA9IE5VTEw7Ci0KLSAgbWl4LT5zaW5rcGFkcyA9IGdfc2xpc3RfcmVtb3ZlIChtaXgtPnNpbmtwYWRzLCBwYWQpOwotICBnc3RfY2hpbGRfcHJveHlfY2hpbGRfcmVtb3ZlZCAoR1NUX0NISUxEX1BST1hZIChtaXgpLCBHX09CSkVDVCAobWl4cGFkKSwKLSAgICAgIEdTVF9PQkpFQ1RfTkFNRSAobWl4cGFkKSk7Ci0gIG1peC0+bnVtcGFkcy0tOwotCi0gIEdTVF9DT0xMRUNUX1BBRFNfU1RSRUFNX0xPQ0sgKG1peC0+Y29sbGVjdCk7Ci0gIGdzdF92aWRlb21peGVyMl91cGRhdGVfY29udmVydGVycyAobWl4KTsKLSAgR1NUX0NPTExFQ1RfUEFEU19TVFJFQU1fVU5MT0NLIChtaXgtPmNvbGxlY3QpOwotCi0gIHVwZGF0ZV9jYXBzID0gR1NUX1ZJREVPX0lORk9fRk9STUFUICgmbWl4LT5pbmZvKSAhPSBHU1RfVklERU9fRk9STUFUX1VOS05PV047Ci0gIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfcmVtb3ZlX3BhZCAobWl4LT5jb2xsZWN0LCBwYWQpOwotCi0gIGlmICh1cGRhdGVfY2FwcykKLSAgICBnc3RfdmlkZW9taXhlcjJfdXBkYXRlX3NyY19jYXBzIChtaXgpOwotCi0gIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQgKGVsZW1lbnQsIHBhZCk7Ci0gIHJldHVybjsKLWVycm9yOgotICBHU1RfVklERU9fTUlYRVIyX1VOTE9DSyAobWl4KTsKLX0KLQotLyogR09iamVjdCB2bWV0aG9kcyAqLwotc3RhdGljIHZvaWQKLWdzdF92aWRlb21peGVyMl9maW5hbGl6ZSAoR09iamVjdCAqIG8pCi17Ci0gIEdzdFZpZGVvTWl4ZXIyICptaXggPSBHU1RfVklERU9fTUlYRVIyIChvKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChtaXgtPmNvbGxlY3QpOwotICBnX211dGV4X2NsZWFyICgmbWl4LT5sb2NrKTsKLSAgZ19tdXRleF9jbGVhciAoJm1peC0+c2V0Y2Fwc19sb2NrKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG8pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvKQotewotICBHc3RWaWRlb01peGVyMiAqbWl4ID0gR1NUX1ZJREVPX01JWEVSMiAobyk7Ci0gIEdTTGlzdCAqdG1wOwotCi0gIGZvciAodG1wID0gbWl4LT5zaW5rcGFkczsgdG1wOyB0bXAgPSB0bXAtPm5leHQpIHsKLSAgICBHc3RWaWRlb01peGVyMlBhZCAqbWl4cGFkID0gdG1wLT5kYXRhOwotCi0gICAgaWYgKG1peHBhZC0+Y29udmVydCkKLSAgICAgIGdzdF92aWRlb19jb252ZXJ0ZXJfZnJlZSAobWl4cGFkLT5jb252ZXJ0KTsKLSAgICBtaXhwYWQtPmNvbnZlcnQgPSBOVUxMOwotICB9Ci0KLSAgaWYgKG1peC0+cGVuZGluZ190YWdzKSB7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChtaXgtPnBlbmRpbmdfdGFncyk7Ci0gICAgbWl4LT5wZW5kaW5nX3RhZ3MgPSBOVUxMOwotICB9Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJm1peC0+Y3VycmVudF9jYXBzLCBOVUxMKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAobyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFZpZGVvTWl4ZXIyICptaXggPSBHU1RfVklERU9fTUlYRVIyIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9CQUNLR1JPVU5EOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIG1peC0+YmFja2dyb3VuZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFZpZGVvTWl4ZXIyICptaXggPSBHU1RfVklERU9fTUlYRVIyIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9CQUNLR1JPVU5EOgotICAgICAgbWl4LT5iYWNrZ3JvdW5kID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0vKiBHc3RDaGlsZFByb3h5IGltcGxlbWVudGF0aW9uICovCi1zdGF0aWMgR09iamVjdCAqCi1nc3RfdmlkZW9taXhlcjJfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHc3RDaGlsZFByb3h5ICogY2hpbGRfcHJveHksCi0gICAgZ3VpbnQgaW5kZXgpCi17Ci0gIEdzdFZpZGVvTWl4ZXIyICptaXggPSBHU1RfVklERU9fTUlYRVIyIChjaGlsZF9wcm94eSk7Ci0gIEdPYmplY3QgKm9iajsKLQotICBHU1RfVklERU9fTUlYRVIyX0xPQ0sgKG1peCk7Ci0gIGlmICgob2JqID0gZ19zbGlzdF9udGhfZGF0YSAobWl4LT5zaW5rcGFkcywgaW5kZXgpKSkKLSAgICBnX29iamVjdF9yZWYgKG9iaik7Ci0gIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICByZXR1cm4gb2JqOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF92aWRlb21peGVyMl9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKEdzdENoaWxkUHJveHkgKiBjaGlsZF9wcm94eSkKLXsKLSAgZ3VpbnQgY291bnQgPSAwOwotICBHc3RWaWRlb01peGVyMiAqbWl4ID0gR1NUX1ZJREVPX01JWEVSMiAoY2hpbGRfcHJveHkpOwotCi0gIEdTVF9WSURFT19NSVhFUjJfTE9DSyAobWl4KTsKLSAgY291bnQgPSBtaXgtPm51bXBhZHM7Ci0gIEdTVF9WSURFT19NSVhFUjJfVU5MT0NLIChtaXgpOwotICBHU1RfSU5GT19PQkpFQ1QgKG1peCwgIkNoaWxkcmVuIENvdW50OiAlZCIsIGNvdW50KTsKLSAgcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX2NoaWxkX3Byb3h5X2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCi17Ci0gIEdzdENoaWxkUHJveHlJbnRlcmZhY2UgKmlmYWNlID0gZ19pZmFjZTsKLQotICBHU1RfSU5GTyAoImludGlhbGl6aW5nIGNoaWxkIHByb3h5IGludGVyZmFjZSIpOwotICBpZmFjZS0+Z2V0X2NoaWxkX2J5X2luZGV4ID0gZ3N0X3ZpZGVvbWl4ZXIyX2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleDsKLSAgaWZhY2UtPmdldF9jaGlsZHJlbl9jb3VudCA9IGdzdF92aWRlb21peGVyMl9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdmlkZW9taXhlcjJfY29uc3RydWN0ZWQgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFZpZGVvTWl4ZXIyICptaXggPSBHU1RfVklERU9fTUlYRVIyIChvYmopOwotICBnY2hhciAqY3BfbmFtZTsKLQotICBjcF9uYW1lID0gZ19zdHJjb25jYXQgKEdTVF9PQkpFQ1RfTkFNRSAob2JqKSwgIi1jb2xsZWN0cGFkcyIsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3NldF9uYW1lIChHU1RfT0JKRUNUIChtaXgtPmNvbGxlY3QpLCBjcF9uYW1lKTsKLSAgZ19mcmVlIChjcF9uYW1lKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3ZpZGVvbWl4ZXIyX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkIChvYmopOwotfQotCi0vKiBHT2JqZWN0IGJvaWxlcnBsYXRlICovCi1zdGF0aWMgdm9pZAotZ3N0X3ZpZGVvbWl4ZXIyX2NsYXNzX2luaXQgKEdzdFZpZGVvTWl4ZXIyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLQotICBnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IGdzdF92aWRlb21peGVyMl9jb25zdHJ1Y3RlZDsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfdmlkZW9taXhlcjJfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfdmlkZW9taXhlcjJfZGlzcG9zZTsKLQotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdmlkZW9taXhlcjJfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdmlkZW9taXhlcjJfc2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQkFDS0dST1VORCwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgiYmFja2dyb3VuZCIsICJCYWNrZ3JvdW5kIiwgIkJhY2tncm91bmQgdHlwZSIsCi0gICAgICAgICAgR1NUX1RZUEVfVklERU9fTUlYRVIyX0JBQ0tHUk9VTkQsCi0gICAgICAgICAgREVGQVVMVF9CQUNLR1JPVU5ELCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5yZXF1ZXN0X25ld19wYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb21peGVyMl9yZXF1ZXN0X25ld19wYWQpOwotICBnc3RlbGVtZW50X2NsYXNzLT5yZWxlYXNlX3BhZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvbWl4ZXIyX3JlbGVhc2VfcGFkKTsKLSAgZ3N0ZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9taXhlcjJfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgJnNyY19mYWN0b3J5KTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzaW5rX2ZhY3RvcnkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJWaWRlbyBtaXhlciAyIiwKLSAgICAgICJGaWx0ZXIvRWRpdG9yL1ZpZGVvL0NvbXBvc2l0b3IiLAotICAgICAgIk1peCBtdWx0aXBsZSB2aWRlbyBzdHJlYW1zIiwgIldpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+LCAiCi0gICAgICAiU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgLyogUmVnaXN0ZXIgdGhlIHBhZCBjbGFzcyAqLwotICBnX3R5cGVfY2xhc3NfcmVmIChHU1RfVFlQRV9WSURFT19NSVhFUjJfUEFEKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92aWRlb21peGVyMl9pbml0IChHc3RWaWRlb01peGVyMiAqIG1peCkKLXsKLSAgR3N0RWxlbWVudENsYXNzICprbGFzcyA9IEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAobWl4KTsKLQotICBtaXgtPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChrbGFzcywKLSAgICAgICAgICAic3JjIiksICJzcmMiKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKEdTVF9QQUQgKG1peC0+c3JjcGFkKSwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdmlkZW9taXhlcjJfc3JjX3F1ZXJ5KSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChHU1RfUEFEIChtaXgtPnNyY3BhZCksCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3ZpZGVvbWl4ZXIyX3NyY19ldmVudCkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAobWl4KSwgbWl4LT5zcmNwYWQpOwotCi0gIG1peC0+Y29sbGVjdCA9IGdzdF9jb2xsZWN0X3BhZHNfbmV3ICgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9mbHVzaF9mdW5jdGlvbiAobWl4LT5jb2xsZWN0LAotICAgICAgKEdzdENvbGxlY3RQYWRzRmx1c2hGdW5jdGlvbikgZ3N0X3ZpZGVvbWl4ZXIyX2ZsdXNoLCBtaXgpOwotICBtaXgtPmJhY2tncm91bmQgPSBERUZBVUxUX0JBQ0tHUk9VTkQ7Ci0gIG1peC0+Y3VycmVudF9jYXBzID0gTlVMTDsKLSAgbWl4LT5wZW5kaW5nX3RhZ3MgPSBOVUxMOwotCi0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2Z1bmN0aW9uIChtaXgtPmNvbGxlY3QsCi0gICAgICAoR3N0Q29sbGVjdFBhZHNGdW5jdGlvbikgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92aWRlb21peGVyMl9jb2xsZWN0ZWQpLAotICAgICAgbWl4KTsKLSAgZ3N0X2NvbGxlY3RfcGFkc19zZXRfZXZlbnRfZnVuY3Rpb24gKG1peC0+Y29sbGVjdCwKLSAgICAgIChHc3RDb2xsZWN0UGFkc0V2ZW50RnVuY3Rpb24pIGdzdF92aWRlb21peGVyMl9zaW5rX2V2ZW50LCBtaXgpOwotICBnc3RfY29sbGVjdF9wYWRzX3NldF9xdWVyeV9mdW5jdGlvbiAobWl4LT5jb2xsZWN0LAotICAgICAgKEdzdENvbGxlY3RQYWRzUXVlcnlGdW5jdGlvbikgZ3N0X3ZpZGVvbWl4ZXIyX3NpbmtfcXVlcnksIG1peCk7Ci0gIGdzdF9jb2xsZWN0X3BhZHNfc2V0X2NsaXBfZnVuY3Rpb24gKG1peC0+Y29sbGVjdCwKLSAgICAgIChHc3RDb2xsZWN0UGFkc0NsaXBGdW5jdGlvbikgZ3N0X3ZpZGVvbWl4ZXIyX3NpbmtfY2xpcCwgbWl4KTsKLQotICBnX211dGV4X2luaXQgKCZtaXgtPmxvY2spOwotICBnX211dGV4X2luaXQgKCZtaXgtPnNldGNhcHNfbG9jayk7Ci0gIC8qIGluaXRpYWxpemUgdmFyaWFibGVzICovCi0gIGdzdF92aWRlb21peGVyMl9yZXNldCAobWl4KTsKLX0KLQotLyogRWxlbWVudCByZWdpc3RyYXRpb24gKi8KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF92aWRlb21peGVyMl9kZWJ1ZywgInZpZGVvbWl4ZXIiLCAwLAotICAgICAgInZpZGVvIG1peGVyIik7Ci0KLSAgZ3N0X3ZpZGVvX21peGVyX2luaXRfYmxlbmQgKCk7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2aWRlb21peGVyIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgIEdTVF9UWVBFX1ZJREVPX01JWEVSMik7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICB2aWRlb21peGVyLAotICAgICJWaWRlbyBtaXhlciIsIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwKLSAgICBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oIGIvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2YTY1Zi4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9taXhlci92aWRlb21peGVyMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qIEdlbmVyaWMgdmlkZW8gbWl4ZXIgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotIAotI2lmbmRlZiBfX0dTVF9WSURFT19NSVhFUjJfSF9fCi0jZGVmaW5lIF9fR1NUX1ZJREVPX01JWEVSMl9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgImJsZW5kLmgiCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZJREVPX01JWEVSMiAoZ3N0X3ZpZGVvbWl4ZXIyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WSURFT19NSVhFUjIob2JqKSBcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9WSURFT19NSVhFUjIsIEdzdFZpZGVvTWl4ZXIyKSkKLSNkZWZpbmUgR1NUX1ZJREVPX01JWEVSMl9DTEFTUyhrbGFzcykgXAotICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WSURFT19NSVhFUjIsIEdzdFZpZGVvTWl4ZXIyQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVklERU9fTUlYRVIyKG9iaikgXAotICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVklERU9fTUlYRVIyKSkKLSNkZWZpbmUgR1NUX0lTX1ZJREVPX01JWEVSMl9DTEFTUyhrbGFzcykgXAotICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WSURFT19NSVhFUjIpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9NaXhlcjIgR3N0VmlkZW9NaXhlcjI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9NaXhlcjJDbGFzcyBHc3RWaWRlb01peGVyMkNsYXNzOwotCi0vKioKLSAqIEdzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZDoKLSAqIEBWSURFT19NSVhFUjJfQkFDS0dST1VORF9DSEVDS0VSOiBjaGVja2VyIHBhdHRlcm4gYmFja2dyb3VuZAotICogQFZJREVPX01JWEVSMl9CQUNLR1JPVU5EX0JMQUNLOiBzb2xpZCBjb2xvciBibGFjayBiYWNrZ3JvdW5kCi0gKiBAVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfV0hJVEU6IHNvbGlkIGNvbG9yIHdoaXRlIGJhY2tncm91bmQKLSAqIEBWSURFT19NSVhFUjJfQkFDS0dST1VORF9UUkFOU1BBUkVOVDogYmFja2dyb3VuZCBpcyBsZWZ0IHRyYW5zcGFyZW50IGFuZCBsYXllcnMgYXJlIGNvbXBvc2l0ZWQgdXNpbmcgIkEgT1ZFUiBCIiBjb21wb3NpdGlvbiBydWxlcy4gVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgdG8gQVlVViBhbmQgQVJHQiAoYW5kIHZhcmlhbnRzKSBhcyBpdCBwcmVzZXJ2ZXMgdGhlIGFscGhhIGNoYW5uZWwgYW5kIGFsbG93cyBmb3IgZnVydGhlciBtaXhpbmcuCi0gKgotICogVGhlIGRpZmZlcmVudCBiYWNrZ3JvdW5kcyB2aWRlb21peGVyIGNhbiBibGVuZCBvdmVyLgotICovCi10eXBlZGVmIGVudW0KLXsKLSAgVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQ0hFQ0tFUiwKLSAgVklERU9fTUlYRVIyX0JBQ0tHUk9VTkRfQkxBQ0ssCi0gIFZJREVPX01JWEVSMl9CQUNLR1JPVU5EX1dISVRFLAotICBWSURFT19NSVhFUjJfQkFDS0dST1VORF9UUkFOU1BBUkVOVCwKLX0KLUdzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZDsKLQotLyoqCi0gKiBHc3RWaWRlb01peGVyMjoKLSAqCi0gKiBUaGUgb3BhcXVlICNHc3RWaWRlb01peGVyMiBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0VmlkZW9NaXhlcjIKLXsKLSAgR3N0RWxlbWVudCBlbGVtZW50OwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0KLSAgLyogcGFkICovCi0gIEdzdFBhZCAqc3JjcGFkOwotCi0gIC8qIExvY2sgdG8gcHJldmVudCB0aGUgc3RhdGUgdG8gY2hhbmdlIHdoaWxlIGJsZW5kaW5nICovCi0gIEdNdXRleCBsb2NrOwotCi0gIC8qIExvY2sgdG8gcHJldmVudCB0d28gc3JjIHNldGNhcHMgZnJvbSBoYXBwZW5pbmcgYXQgdGhlIHNhbWUgdGltZSAgKi8KLSAgR011dGV4IHNldGNhcHNfbG9jazsKLQotICAvKiBTaW5rIHBhZHMgdXNpbmcgQ29sbGVjdCBQYWRzIDIqLwotICBHc3RDb2xsZWN0UGFkcyAqY29sbGVjdDsKLQotICAvKiBzaW5rcGFkcywgYSBHU0xpc3Qgb2YgR3N0VmlkZW9NaXhlcjJQYWRzICovCi0gIEdTTGlzdCAqc2lua3BhZHM7Ci0gIGdpbnQgbnVtcGFkczsKLSAgLyogTmV4dCBhdmFpbGFibGUgc2lua3BhZCBpbmRleCAqLwotICBndWludCBuZXh0X3NpbmtwYWQ7Ci0KLSAgLyogT3V0cHV0IGNhcHMgKi8KLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgLyogY3VycmVudCBjYXBzICovCi0gIEdzdENhcHMgKmN1cnJlbnRfY2FwczsKLSAgZ2Jvb2xlYW4gc2VuZF9jYXBzOwotCi0gIGdib29sZWFuIG5ld3NlZ19wZW5kaW5nOwotCi0gIEdzdFZpZGVvTWl4ZXIyQmFja2dyb3VuZCBiYWNrZ3JvdW5kOwotCi0gIC8qIEN1cnJlbnQgZG93bnN0cmVhbSBzZWdtZW50ICovCi0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0Q2xvY2tUaW1lIHRzX29mZnNldDsKLSAgZ3VpbnQ2NCBuZnJhbWVzOwotCi0gIC8qIFFvUyBzdHVmZiAqLwotICBnZG91YmxlIHByb3BvcnRpb247Ci0gIEdzdENsb2NrVGltZSBlYXJsaWVzdF90aW1lOwotICBndWludDY0IHFvc19wcm9jZXNzZWQsIHFvc19kcm9wcGVkOwotCi0gIEJsZW5kRnVuY3Rpb24gYmxlbmQsIG92ZXJsYXk7Ci0gIEZpbGxDaGVja2VyRnVuY3Rpb24gZmlsbF9jaGVja2VyOwotICBGaWxsQ29sb3JGdW5jdGlvbiBmaWxsX2NvbG9yOwotCi0gIGdib29sZWFuIHNlbmRfc3RyZWFtX3N0YXJ0OwotCi0gIC8qIGxhdGVuY3kgKi8KLSAgZ2Jvb2xlYW4gbGl2ZTsKLQotICBHc3RUYWdMaXN0ICpwZW5kaW5nX3RhZ3M7Ci19OwotCi1zdHJ1Y3QgX0dzdFZpZGVvTWl4ZXIyQ2xhc3MKLXsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF92aWRlb21peGVyMl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfVklERU9fTUlYRVIyX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjJwYWQuaCBiL2dzdC92aWRlb21peGVyL3ZpZGVvbWl4ZXIycGFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NzExZTIuLjAwMDAwMDAKLS0tIGEvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcjJwYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIEdlbmVyaWMgdmlkZW8gbWl4ZXIgcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotIAotI2lmbmRlZiBfX0dTVF9WSURFT19NSVhFUjJfUEFEX0hfXwotI2RlZmluZSBfX0dTVF9WSURFT19NSVhFUjJfUEFEX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Y29sbGVjdHBhZHMuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1ZJREVPX01JWEVSMl9QQUQgKGdzdF92aWRlb21peGVyMl9wYWRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1ZJREVPX01JWEVSMl9QQUQob2JqKSBcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9WSURFT19NSVhFUjJfUEFELCBHc3RWaWRlb01peGVyMlBhZCkpCi0jZGVmaW5lIEdTVF9WSURFT19NSVhFUjJfUEFEX0NMQVNTKGtsYXNzKSBcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1ZJREVPX01JWEVSX1BBRCwgR3N0VmlkZW9NaXhlcjJQYWRDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WSURFT19NSVhFUjJfUEFEKG9iaikgXAotICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVklERU9fTUlYRVIyX1BBRCkpCi0jZGVmaW5lIEdTVF9JU19WSURFT19NSVhFUjJfUEFEX0NMQVNTKGtsYXNzKSBcCi0gICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1ZJREVPX01JWEVSMl9QQUQpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9NaXhlcjJQYWQgR3N0VmlkZW9NaXhlcjJQYWQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9NaXhlcjJQYWRDbGFzcyBHc3RWaWRlb01peGVyMlBhZENsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvTWl4ZXIyQ29sbGVjdCBHc3RWaWRlb01peGVyMkNvbGxlY3Q7Ci0KLS8qKgotICogR3N0VmlkZW9NaXhlcjJQYWQ6Ci0gKgotICogVGhlIG9wYXF1ZSAjR3N0VmlkZW9NaXhlcjJQYWQgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgX0dzdFZpZGVvTWl4ZXIyUGFkCi17Ci0gIEdzdFBhZCBwYXJlbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLQotICAvKiBjYXBzICovCi0gIEdzdFZpZGVvSW5mbyBpbmZvOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgZ2ludCB4cG9zLCB5cG9zOwotICBndWludCB6b3JkZXI7Ci0gIGdkb3VibGUgYWxwaGE7Ci0KLSAgR3N0VmlkZW9NaXhlcjJDb2xsZWN0ICptaXhjb2w7Ci0KLSAgLyogY2FwcyB1c2VkIGZvciBjb252ZXJzaW9uIGlmIG5lZWRlZCAqLwotICBHc3RWaWRlb0luZm8gY29udmVyc2lvbl9pbmZvOwotCi0gIC8qIENvbnZlcnRlciwgaWYgTlVMTCBubyBjb252ZXJzaW9uIGlzIGRvbmUgKi8KLSAgR3N0VmlkZW9Db252ZXJ0ZXIgKmNvbnZlcnQ7Ci0KLSAgZ2Jvb2xlYW4gbmVlZF9jb252ZXJzaW9uX3VwZGF0ZTsKLX07Ci0KLXN0cnVjdCBfR3N0VmlkZW9NaXhlcjJQYWRDbGFzcwotewotICBHc3RQYWRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfdmlkZW9taXhlcjJfcGFkX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9WSURFT19NSVhFUjJfUEFEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy1kaXN0LmMgYi9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkYzFiMC4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MTQgKzAsMCBAQAotCi0vKiBhdXRvZ2VuZXJhdGVkIGZyb20gdmlkZW9taXhlcm9yYy5vcmMgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmbmRlZiBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jZGVmaW5lIF9PUkNfSU5URUdFUl9UWVBFREVGU18KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2luY2x1ZGUgPHN0ZGludC5oPgotdHlwZWRlZiBpbnQ4X3Qgb3JjX2ludDg7Ci10eXBlZGVmIGludDE2X3Qgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQzMl90IG9yY19pbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVpbnQ4X3Qgb3JjX3VpbnQ4OwotdHlwZWRlZiB1aW50MTZfdCBvcmNfdWludDE2OwotdHlwZWRlZiB1aW50MzJfdCBvcmNfdWludDMyOwotdHlwZWRlZiB1aW50NjRfdCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgVUlOVDY0X0MoeCkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBfX2ludDggb3JjX2ludDg7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDE2IG9yY19pbnQxNjsKLXR5cGVkZWYgc2lnbmVkIF9faW50MzIgb3JjX2ludDMyOwotdHlwZWRlZiBzaWduZWQgX19pbnQ2NCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50OCBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiBvcmNfdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVWk2NCkKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotdHlwZWRlZiBzaWduZWQgY2hhciBvcmNfaW50ODsKLXR5cGVkZWYgc2hvcnQgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQgb3JjX2ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG9yY191aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IG9yY191aW50MzI7Ci0jaWYgSU5UX01BWCA9PSBMT05HX01BWAotdHlwZWRlZiBsb25nIGxvbmcgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTEwpCi0jZWxzZQotdHlwZWRlZiBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VMKQotI2VuZGlmCi0jZW5kaWYKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDE2IGk7Ci0gIG9yY19pbnQ4IHgyWzJdOwotfSBvcmNfdW5pb24xNjsKLXR5cGVkZWYgdW5pb24KLXsKLSAgb3JjX2ludDMyIGk7Ci0gIGZsb2F0IGY7Ci0gIG9yY19pbnQxNiB4MlsyXTsKLSAgb3JjX2ludDggeDRbNF07Ci19IG9yY191bmlvbjMyOwotdHlwZWRlZiB1bmlvbgotewotICBvcmNfaW50NjQgaTsKLSAgZG91YmxlIGY7Ci0gIG9yY19pbnQzMiB4MlsyXTsKLSAgZmxvYXQgeDJmWzJdOwotICBvcmNfaW50MTYgeDRbNF07Ci19IG9yY191bmlvbjY0OwotI2VuZGlmCi0jaWZuZGVmIE9SQ19SRVNUUklDVAotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIE9SQ19SRVNUUklDVCByZXN0cmljdAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgX19yZXN0cmljdF9fCi0jZWxzZQotI2RlZmluZSBPUkNfUkVTVFJJQ1QKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgT1JDX0lOVEVSTkFMCi0jaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU5MCkKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1NTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2hpZGRlbgotI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxzZQotI2RlZmluZSBPUkNfSU5URVJOQUwKLSNlbmRpZgotI2VuZGlmCi0KLQotI2lmbmRlZiBESVNBQkxFX09SQwotI2luY2x1ZGUgPG9yYy9vcmMuaD4KLSNlbmRpZgotdm9pZCB2aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyIChndWludDMyICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgcDEsIGludCBuKTsKLXZvaWQgdmlkZW9fbWl4ZXJfb3JjX21lbWNweV91MzIgKGd1aW50MzIgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ3VpbnQzMiAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pOwotdm9pZCB2aWRlb19taXhlcl9vcmNfYmxlbmRfdTggKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKTsKLXZvaWQgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2FyZ2IgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKTsKLXZvaWQgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2JncmEgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKTsKLXZvaWQgdmlkZW9fbWl4ZXJfb3JjX292ZXJsYXlfYXJnYiAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgZDFfc3RyaWRlLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IHMxX3N0cmlkZSwgaW50IHAxLCBpbnQgbiwgaW50IG0pOwotdm9pZCB2aWRlb19taXhlcl9vcmNfb3ZlcmxheV9iZ3JhIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgczFfc3RyaWRlLCBpbnQgcDEsIGludCBuLCBpbnQgbSk7Ci0KLQotLyogYmVnaW4gT3JjIEMgdGFyZ2V0IHByZWFtYmxlICovCi0jZGVmaW5lIE9SQ19DTEFNUCh4LGEsYikgKCh4KTwoYSkgPyAoYSkgOiAoKHgpPihiKSA/IChiKSA6ICh4KSkpCi0jZGVmaW5lIE9SQ19BQlMoYSkgKChhKTwwID8gLShhKSA6IChhKSkKLSNkZWZpbmUgT1JDX01JTihhLGIpICgoYSk8KGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBPUkNfTUFYKGEsYikgKChhKT4oYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE9SQ19TQl9NQVggMTI3Ci0jZGVmaW5lIE9SQ19TQl9NSU4gKC0xLU9SQ19TQl9NQVgpCi0jZGVmaW5lIE9SQ19VQl9NQVggMjU1Ci0jZGVmaW5lIE9SQ19VQl9NSU4gMAotI2RlZmluZSBPUkNfU1dfTUFYIDMyNzY3Ci0jZGVmaW5lIE9SQ19TV19NSU4gKC0xLU9SQ19TV19NQVgpCi0jZGVmaW5lIE9SQ19VV19NQVggNjU1MzUKLSNkZWZpbmUgT1JDX1VXX01JTiAwCi0jZGVmaW5lIE9SQ19TTF9NQVggMjE0NzQ4MzY0NwotI2RlZmluZSBPUkNfU0xfTUlOICgtMS1PUkNfU0xfTUFYKQotI2RlZmluZSBPUkNfVUxfTUFYIDQyOTQ5NjcyOTVVCi0jZGVmaW5lIE9SQ19VTF9NSU4gMAotI2RlZmluZSBPUkNfQ0xBTVBfU0IoeCkgT1JDX0NMQU1QKHgsT1JDX1NCX01JTixPUkNfU0JfTUFYKQotI2RlZmluZSBPUkNfQ0xBTVBfVUIoeCkgT1JDX0NMQU1QKHgsT1JDX1VCX01JTixPUkNfVUJfTUFYKQotI2RlZmluZSBPUkNfQ0xBTVBfU1coeCkgT1JDX0NMQU1QKHgsT1JDX1NXX01JTixPUkNfU1dfTUFYKQotI2RlZmluZSBPUkNfQ0xBTVBfVVcoeCkgT1JDX0NMQU1QKHgsT1JDX1VXX01JTixPUkNfVVdfTUFYKQotI2RlZmluZSBPUkNfQ0xBTVBfU0woeCkgT1JDX0NMQU1QKHgsT1JDX1NMX01JTixPUkNfU0xfTUFYKQotI2RlZmluZSBPUkNfQ0xBTVBfVUwoeCkgT1JDX0NMQU1QKHgsT1JDX1VMX01JTixPUkNfVUxfTUFYKQotI2RlZmluZSBPUkNfU1dBUF9XKHgpICgoKCh4KSYweGZmVSk8PDgpIHwgKCgoeCkmMHhmZjAwVSk+PjgpKQotI2RlZmluZSBPUkNfU1dBUF9MKHgpICgoKCh4KSYweGZmVSk8PDI0KSB8ICgoKHgpJjB4ZmYwMFUpPDw4KSB8ICgoKHgpJjB4ZmYwMDAwVSk+PjgpIHwgKCgoeCkmMHhmZjAwMDAwMFUpPj4yNCkpCi0jZGVmaW5lIE9SQ19TV0FQX1EoeCkgKCgoKHgpJk9SQ19VSU5UNjRfQygweGZmKSk8PDU2KSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDApKTw8NDApIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwKSk8PDI0KSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMDAwKSk8PDgpIHwgKCgoeCkmT1JDX1VJTlQ2NF9DKDB4ZmYwMDAwMDAwMCkpPj44KSB8ICgoKHgpJk9SQ19VSU5UNjRfQygweGZmMDAwMDAwMDAwMCkpPj4yNCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMDAwMDAwMCkpPj40MCkgfCAoKCh4KSZPUkNfVUlOVDY0X0MoMHhmZjAwMDAwMDAwMDAwMDAwKSk+PjU2KSkKLSNkZWZpbmUgT1JDX1BUUl9PRkZTRVQocHRyLG9mZnNldCkgKCh2b2lkICopKCgodW5zaWduZWQgY2hhciAqKShwdHIpKSArIChvZmZzZXQpKSkKLSNkZWZpbmUgT1JDX0RFTk9STUFMKHgpICgoeCkgJiAoKCgoeCkmMHg3ZjgwMDAwMCkgPT0gMCkgPyAweGZmODAwMDAwIDogMHhmZmZmZmZmZikpCi0jZGVmaW5lIE9SQ19JU05BTih4KSAoKCgoeCkmMHg3ZjgwMDAwMCkgPT0gMHg3ZjgwMDAwMCkgJiYgKCgoeCkmMHgwMDdmZmZmZikgIT0gMCkpCi0jZGVmaW5lIE9SQ19ERU5PUk1BTF9ET1VCTEUoeCkgKCh4KSAmICgoKCh4KSZPUkNfVUlOVDY0X0MoMHg3ZmYwMDAwMDAwMDAwMDAwKSkgPT0gMCkgPyBPUkNfVUlOVDY0X0MoMHhmZmYwMDAwMDAwMDAwMDAwKSA6IE9SQ19VSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpKSkKLSNkZWZpbmUgT1JDX0lTTkFOX0RPVUJMRSh4KSAoKCgoeCkmT1JDX1VJTlQ2NF9DKDB4N2ZmMDAwMDAwMDAwMDAwMCkpID09IE9SQ19VSU5UNjRfQygweDdmZjAwMDAwMDAwMDAwMDApKSAmJiAoKCh4KSZPUkNfVUlOVDY0X0MoMHgwMDBmZmZmZmZmZmZmZmZmKSkgIT0gMCkpCi0jaWZuZGVmIE9SQ19SRVNUUklDVAotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIE9SQ19SRVNUUklDVCByZXN0cmljdAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgX19yZXN0cmljdF9fCi0jZWxzZQotI2RlZmluZSBPUkNfUkVTVFJJQ1QKLSNlbmRpZgotI2VuZGlmCi0vKiBlbmQgT3JjIEMgdGFyZ2V0IHByZWFtYmxlICovCi0KLQotCi0vKiB2aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLXZpZGVvX21peGVyX29yY19zcGxhdF91MzIgKGd1aW50MzIgKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBwMSwgaW50IG4pCi17Ci0gIGludCBpOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIG9yY191bmlvbjMyIHZhcjMyOwotICBvcmNfdW5pb24zMiB2YXIzMzsKLQotICBwdHIwID0gKG9yY191bmlvbjMyICopIGQxOwotCi0gIC8qIDA6IGxvYWRwbCAqLwotICB2YXIzMi5pID0gcDE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDE6IGNvcHlsICovCi0gICAgdmFyMzMuaSA9IHZhcjMyLmk7Ci0gICAgLyogMjogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjMzOwotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX3ZpZGVvX21peGVyX29yY19zcGxhdF91MzIgKE9yY0V4ZWN1dG9yICogT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IG4gPSBleC0+bjsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBvcmNfdW5pb24zMiB2YXIzMjsKLSAgb3JjX3VuaW9uMzIgdmFyMzM7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzBdOwotCi0gIC8qIDA6IGxvYWRwbCAqLwotICB2YXIzMi5pID0gZXgtPnBhcmFtc1syNF07Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDE6IGNvcHlsICovCi0gICAgdmFyMzMuaSA9IHZhcjMyLmk7Ci0gICAgLyogMjogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjMzOwotICB9Ci0KLX0KLQotdm9pZAotdmlkZW9fbWl4ZXJfb3JjX3NwbGF0X3UzMiAoZ3VpbnQzMiAqIE9SQ19SRVNUUklDVCBkMSwgaW50IHAxLCBpbnQgbikKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDksIDI1LCAxMTgsIDEwNSwgMTAwLCAxMDEsIDExMSwgOTUsIDEwOSwgMTA1LCAxMjAsIDEwMSwgMTE0LCA5NSwgMTExLAotICAgICAgICAxMTQsIDk5LCA5NSwgMTE1LCAxMTIsIDEwOCwgOTcsIDExNiwgOTUsIDExNywgNTEsIDUwLCAxMSwgNCwgNCwgMTYsCi0gICAgICAgIDQsIDExMiwgMCwgMjQsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyKTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJ2aWRlb19taXhlcl9vcmNfc3BsYXRfdTMyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLCBfYmFja3VwX3ZpZGVvX21peGVyX29yY19zcGxhdF91MzIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXIgKHAsIDQsICJwMSIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvcHlsIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9QMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHAxOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiB2aWRlb19taXhlcl9vcmNfbWVtY3B5X3UzMiAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi12aWRlb19taXhlcl9vcmNfbWVtY3B5X3UzMiAoZ3VpbnQzMiAqIE9SQ19SRVNUUklDVCBkMSwKLSAgICBjb25zdCBndWludDMyICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbikKLXsKLSAgaW50IGk7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb24zMiB2YXIzMjsKLSAgb3JjX3VuaW9uMzIgdmFyMzM7Ci0KLSAgcHRyMCA9IChvcmNfdW5pb24zMiAqKSBkMTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBzMTsKLQotCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAvKiAwOiBsb2FkbCAqLwotICAgIHZhcjMyID0gcHRyNFtpXTsKLSAgICAvKiAxOiBjb3B5bCAqLwotICAgIHZhcjMzLmkgPSB2YXIzMi5pOwotICAgIC8qIDI6IHN0b3JlbCAqLwotICAgIHB0cjBbaV0gPSB2YXIzMzsKLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF92aWRlb19taXhlcl9vcmNfbWVtY3B5X3UzMiAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgbiA9IGV4LT5uOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uMzIgdmFyMzI7Ci0gIG9yY191bmlvbjMyIHZhcjMzOwotCi0gIHB0cjAgPSAob3JjX3VuaW9uMzIgKikgZXgtPmFycmF5c1swXTsKLSAgcHRyNCA9IChvcmNfdW5pb24zMiAqKSBleC0+YXJyYXlzWzRdOwotCi0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIC8qIDA6IGxvYWRsICovCi0gICAgdmFyMzIgPSBwdHI0W2ldOwotICAgIC8qIDE6IGNvcHlsICovCi0gICAgdmFyMzMuaSA9IHZhcjMyLmk7Ci0gICAgLyogMjogc3RvcmVsICovCi0gICAgcHRyMFtpXSA9IHZhcjMzOwotICB9Ci0KLX0KLQotdm9pZAotdmlkZW9fbWl4ZXJfb3JjX21lbWNweV91MzIgKGd1aW50MzIgKiBPUkNfUkVTVFJJQ1QgZDEsCi0gICAgY29uc3QgZ3VpbnQzMiAqIE9SQ19SRVNUUklDVCBzMSwgaW50IG4pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA5LCAyNiwgMTE4LCAxMDUsIDEwMCwgMTAxLCAxMTEsIDk1LCAxMDksIDEwNSwgMTIwLCAxMDEsIDExNCwgOTUsIDExMSwKLSAgICAgICAgMTE0LCA5OSwgOTUsIDEwOSwgMTAxLCAxMDksIDk5LCAxMTIsIDEyMSwgOTUsIDExNywgNTEsIDUwLCAxMSwgNCwgNCwKLSAgICAgICAgMTIsIDQsIDQsIDExMiwgMCwgNCwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLCBfYmFja3VwX3ZpZGVvX21peGVyX29yY19tZW1jcHlfdTMyKTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJ2aWRlb19taXhlcl9vcmNfbWVtY3B5X3UzMiIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfbWVtY3B5X3UzMik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDQsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgNCwgInMxIik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29weWwiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIHZpZGVvX21peGVyX29yY19ibGVuZF91OCAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi12aWRlb19taXhlcl9vcmNfYmxlbmRfdTggKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKQotewotICBpbnQgaTsKLSAgaW50IGo7Ci0gIG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX2ludDggKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfaW50OCB2YXIzNDsKLSAgb3JjX2ludDggdmFyMzU7Ci0gIG9yY191bmlvbjE2IHZhcjM2OwotICBvcmNfaW50OCB2YXIzNzsKLSAgb3JjX3VuaW9uMTYgdmFyMzg7Ci0gIG9yY191bmlvbjE2IHZhcjM5OwotICBvcmNfdW5pb24xNiB2YXI0MDsKLSAgb3JjX3VuaW9uMTYgdmFyNDE7Ci0gIG9yY191bmlvbjE2IHZhcjQyOwotICBvcmNfdW5pb24xNiB2YXI0MzsKLSAgb3JjX3VuaW9uMTYgdmFyNDQ7Ci0KLSAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgIHB0cjAgPSBPUkNfUFRSX09GRlNFVCAoZDEsIGQxX3N0cmlkZSAqIGopOwotICAgIHB0cjQgPSBPUkNfUFRSX09GRlNFVCAoczEsIHMxX3N0cmlkZSAqIGopOwotCi0gICAgLyogNTogbG9hZHB3ICovCi0gICAgdmFyMzYuaSA9IHAxOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgLyogMDogbG9hZGIgKi8KLSAgICAgIHZhcjM0ID0gcHRyMFtpXTsKLSAgICAgIC8qIDE6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjM4LmkgPSAob3JjX3VpbnQ4KSB2YXIzNDsKLSAgICAgIC8qIDI6IGxvYWRiICovCi0gICAgICB2YXIzNSA9IHB0cjRbaV07Ci0gICAgICAvKiAzOiBjb252dWJ3ICovCi0gICAgICB2YXIzOS5pID0gKG9yY191aW50OCkgdmFyMzU7Ci0gICAgICAvKiA0OiBzdWJ3ICovCi0gICAgICB2YXI0MC5pID0gdmFyMzkuaSAtIHZhcjM4Lmk7Ci0gICAgICAvKiA2OiBtdWxsdyAqLwotICAgICAgdmFyNDEuaSA9ICh2YXI0MC5pICogdmFyMzYuaSkgJiAweGZmZmY7Ci0gICAgICAvKiA3OiBzaGx3ICovCi0gICAgICB2YXI0Mi5pID0gKChvcmNfdWludDE2KSB2YXIzOC5pKSA8PCA4OwotICAgICAgLyogODogYWRkdyAqLwotICAgICAgdmFyNDMuaSA9IHZhcjQyLmkgKyB2YXI0MS5pOwotICAgICAgLyogOTogc2hydXcgKi8KLSAgICAgIHZhcjQ0LmkgPSAoKG9yY191aW50MTYpIHZhcjQzLmkpID4+IDg7Ci0gICAgICAvKiAxMDogY29udnN1c3diICovCi0gICAgICB2YXIzNyA9IE9SQ19DTEFNUF9VQiAodmFyNDQuaSk7Ci0gICAgICAvKiAxMTogc3RvcmViICovCi0gICAgICBwdHIwW2ldID0gdmFyMzc7Ci0gICAgfQotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX3ZpZGVvX21peGVyX29yY19ibGVuZF91OCAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgajsKLSAgaW50IG4gPSBleC0+bjsKLSAgaW50IG0gPSBleC0+cGFyYW1zW09SQ19WQVJfQTFdOwotICBvcmNfaW50OCAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY19pbnQ4ICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX2ludDggdmFyMzQ7Ci0gIG9yY19pbnQ4IHZhcjM1OwotICBvcmNfdW5pb24xNiB2YXIzNjsKLSAgb3JjX2ludDggdmFyMzc7Ci0gIG9yY191bmlvbjE2IHZhcjM4OwotICBvcmNfdW5pb24xNiB2YXIzOTsKLSAgb3JjX3VuaW9uMTYgdmFyNDA7Ci0gIG9yY191bmlvbjE2IHZhcjQxOwotICBvcmNfdW5pb24xNiB2YXI0MjsKLSAgb3JjX3VuaW9uMTYgdmFyNDM7Ci0gIG9yY191bmlvbjE2IHZhcjQ0OwotCi0gIGZvciAoaiA9IDA7IGogPCBtOyBqKyspIHsKLSAgICBwdHIwID0gT1JDX1BUUl9PRkZTRVQgKGV4LT5hcnJheXNbMF0sIGV4LT5wYXJhbXNbMF0gKiBqKTsKLSAgICBwdHI0ID0gT1JDX1BUUl9PRkZTRVQgKGV4LT5hcnJheXNbNF0sIGV4LT5wYXJhbXNbNF0gKiBqKTsKLQotICAgIC8qIDU6IGxvYWRwdyAqLwotICAgIHZhcjM2LmkgPSBleC0+cGFyYW1zWzI0XTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIC8qIDA6IGxvYWRiICovCi0gICAgICB2YXIzNCA9IHB0cjBbaV07Ci0gICAgICAvKiAxOiBjb252dWJ3ICovCi0gICAgICB2YXIzOC5pID0gKG9yY191aW50OCkgdmFyMzQ7Ci0gICAgICAvKiAyOiBsb2FkYiAqLwotICAgICAgdmFyMzUgPSBwdHI0W2ldOwotICAgICAgLyogMzogY29udnVidyAqLwotICAgICAgdmFyMzkuaSA9IChvcmNfdWludDgpIHZhcjM1OwotICAgICAgLyogNDogc3VidyAqLwotICAgICAgdmFyNDAuaSA9IHZhcjM5LmkgLSB2YXIzOC5pOwotICAgICAgLyogNjogbXVsbHcgKi8KLSAgICAgIHZhcjQxLmkgPSAodmFyNDAuaSAqIHZhcjM2LmkpICYgMHhmZmZmOwotICAgICAgLyogNzogc2hsdyAqLwotICAgICAgdmFyNDIuaSA9ICgob3JjX3VpbnQxNikgdmFyMzguaSkgPDwgODsKLSAgICAgIC8qIDg6IGFkZHcgKi8KLSAgICAgIHZhcjQzLmkgPSB2YXI0Mi5pICsgdmFyNDEuaTsKLSAgICAgIC8qIDk6IHNocnV3ICovCi0gICAgICB2YXI0NC5pID0gKChvcmNfdWludDE2KSB2YXI0My5pKSA+PiA4OwotICAgICAgLyogMTA6IGNvbnZzdXN3YiAqLwotICAgICAgdmFyMzcgPSBPUkNfQ0xBTVBfVUIgKHZhcjQ0LmkpOwotICAgICAgLyogMTE6IHN0b3JlYiAqLwotICAgICAgcHRyMFtpXSA9IHZhcjM3OwotICAgIH0KLSAgfQotCi19Ci0KLXZvaWQKLXZpZGVvX21peGVyX29yY19ibGVuZF91OCAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgZDFfc3RyaWRlLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IHMxX3N0cmlkZSwgaW50IHAxLCBpbnQgbiwgaW50IG0pCi17Ci0gIE9yY0V4ZWN1dG9yIF9leCwgKmV4ID0gJl9leDsKLSAgc3RhdGljIHZvbGF0aWxlIGludCBwX2luaXRlZCA9IDA7Ci0gIHN0YXRpYyBPcmNDb2RlICpjID0gMDsKLSAgdm9pZCAoKmZ1bmMpIChPcmNFeGVjdXRvciAqKTsKLQotICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgb3JjX29uY2VfbXV0ZXhfbG9jayAoKTsKLSAgICBpZiAoIXBfaW5pdGVkKSB7Ci0gICAgICBPcmNQcm9ncmFtICpwOwotCi0jaWYgMQotICAgICAgc3RhdGljIGNvbnN0IG9yY191aW50OCBiY1tdID0gewotICAgICAgICAxLCA3LCA5LCAyNCwgMTE4LCAxMDUsIDEwMCwgMTAxLCAxMTEsIDk1LCAxMDksIDEwNSwgMTIwLCAxMDEsIDExNCwgOTUsCi0gICAgICAgIDExMSwgMTE0LCA5OSwgOTUsIDk4LCAxMDgsIDEwMSwgMTEwLCAxMDAsIDk1LCAxMTcsIDU2LCAxMSwgMSwgMSwgMTIsCi0gICAgICAgIDEsIDEsIDE0LCAxLCA4LCAwLCAwLCAwLCAxNiwgMiwgMjAsIDIsIDIwLCAyLCAxNTAsIDMyLAotICAgICAgICAwLCAxNTAsIDMzLCA0LCA5OCwgMzMsIDMzLCAzMiwgODksIDMzLCAzMywgMjQsIDkzLCAzMiwgMzIsIDE2LAotICAgICAgICA3MCwgMzMsIDMyLCAzMywgOTUsIDMzLCAzMywgMTYsIDE2MCwgMCwgMzMsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfYmxlbmRfdTgpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfMmQgKHApOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJ2aWRlb19taXhlcl9vcmNfYmxlbmRfdTgiKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX3U4KTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgMSwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCAxLCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9jb25zdGFudCAocCwgMSwgMHgwMDAwMDAwOCwgImMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfcGFyYW1ldGVyIChwLCAyLCAicDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDIsICJ0MSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMiwgInQyIik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ1YnciLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzdWJ3IiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsbHciLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzaGx3IiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9DMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYWRkdyIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNocnV3IiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9DMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnN1c3diIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMiwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIE9SQ19FWEVDVVRPUl9NIChleCkgPSBtOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5wYXJhbXNbT1JDX1ZBUl9EMV0gPSBkMV9zdHJpZGU7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX1MxXSA9IHMxX3N0cmlkZTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHAxOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiB2aWRlb19taXhlcl9vcmNfYmxlbmRfYXJnYiAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi12aWRlb19taXhlcl9vcmNfYmxlbmRfYXJnYiAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgZDFfc3RyaWRlLAotICAgIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IHMxX3N0cmlkZSwgaW50IHAxLCBpbnQgbiwgaW50IG0pCi17Ci0gIGludCBpOwotICBpbnQgajsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjY0IHZhcjM5OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZCAoX19pMzg2X18pCi0gIHZvbGF0aWxlIG9yY191bmlvbjMyIHZhcjQwOwotI2Vsc2UKLSAgb3JjX3VuaW9uMzIgdmFyNDA7Ci0jZW5kaWYKLSAgb3JjX3VuaW9uMzIgdmFyNDE7Ci0gIG9yY191bmlvbjE2IHZhcjQyOwotICBvcmNfaW50OCB2YXI0MzsKLSAgb3JjX3VuaW9uMzIgdmFyNDQ7Ci0gIG9yY191bmlvbjY0IHZhcjQ1OwotICBvcmNfdW5pb242NCB2YXI0NjsKLSAgb3JjX3VuaW9uNjQgdmFyNDc7Ci0gIG9yY191bmlvbjY0IHZhcjQ4OwotICBvcmNfdW5pb24zMiB2YXI0OTsKLSAgb3JjX3VuaW9uNjQgdmFyNTA7Ci0gIG9yY191bmlvbjY0IHZhcjUxOwotICBvcmNfdW5pb242NCB2YXI1MjsKLSAgb3JjX3VuaW9uNjQgdmFyNTM7Ci0gIG9yY191bmlvbjY0IHZhcjU0OwotICBvcmNfdW5pb24zMiB2YXI1NTsKLSAgb3JjX3VuaW9uMzIgdmFyNTY7Ci0KLSAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgIHB0cjAgPSBPUkNfUFRSX09GRlNFVCAoZDEsIGQxX3N0cmlkZSAqIGopOwotICAgIHB0cjQgPSBPUkNfUFRSX09GRlNFVCAoczEsIHMxX3N0cmlkZSAqIGopOwotCi0gICAgLyogNTogbG9hZHB3ICovCi0gICAgdmFyMzkueDRbMF0gPSBwMTsKLSAgICB2YXIzOS54NFsxXSA9IHAxOwotICAgIHZhcjM5Lng0WzJdID0gcDE7Ci0gICAgdmFyMzkueDRbM10gPSBwMTsKLSAgICAvKiAxNjogbG9hZHBsICovCi0gICAgdmFyNDAuaSA9IChpbnQpIDB4MDAwMDAwZmY7IC8qIDI1NSBvciAxLjI1OTg3ZS0zMjFmICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAvKiAwOiBsb2FkbCAqLwotICAgICAgdmFyNDEgPSBwdHI0W2ldOwotICAgICAgLyogMTogY29udmx3ICovCi0gICAgICB2YXI0Mi5pID0gdmFyNDEuaTsKLSAgICAgIC8qIDI6IGNvbnZ3YiAqLwotICAgICAgdmFyNDMgPSB2YXI0Mi5pOwotICAgICAgLyogMzogc3BsYXRibCAqLwotICAgICAgdmFyNDQuaSA9Ci0gICAgICAgICAgKCgoKG9yY191aW50MzIpIHZhcjQzKSAmIDB4ZmYpIDw8IDI0KSB8ICgoKChvcmNfdWludDMyKSB2YXI0MykgJiAweGZmKQotICAgICAgICAgIDw8IDE2KSB8ICgoKChvcmNfdWludDMyKSB2YXI0MykgJiAweGZmKSA8PCA4KSB8ICgoKG9yY191aW50MzIpIHZhcjQzKQotICAgICAgICAgICYgMHhmZik7Ci0gICAgICAvKiA0OiBjb252dWJ3ICovCi0gICAgICB2YXI0NS54NFswXSA9IChvcmNfdWludDgpIHZhcjQ0Lng0WzBdOwotICAgICAgdmFyNDUueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0NC54NFsxXTsKLSAgICAgIHZhcjQ1Lng0WzJdID0gKG9yY191aW50OCkgdmFyNDQueDRbMl07Ci0gICAgICB2YXI0NS54NFszXSA9IChvcmNfdWludDgpIHZhcjQ0Lng0WzNdOwotICAgICAgLyogNjogbXVsbHcgKi8KLSAgICAgIHZhcjQ2Lng0WzBdID0gKHZhcjQ1Lng0WzBdICogdmFyMzkueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNDYueDRbMV0gPSAodmFyNDUueDRbMV0gKiB2YXIzOS54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI0Ni54NFsyXSA9ICh2YXI0NS54NFsyXSAqIHZhcjM5Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjQ2Lng0WzNdID0gKHZhcjQ1Lng0WzNdICogdmFyMzkueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogNzogc2hydXcgKi8KLSAgICAgIHZhcjQ3Lng0WzBdID0gKChvcmNfdWludDE2KSB2YXI0Ni54NFswXSkgPj4gODsKLSAgICAgIHZhcjQ3Lng0WzFdID0gKChvcmNfdWludDE2KSB2YXI0Ni54NFsxXSkgPj4gODsKLSAgICAgIHZhcjQ3Lng0WzJdID0gKChvcmNfdWludDE2KSB2YXI0Ni54NFsyXSkgPj4gODsKLSAgICAgIHZhcjQ3Lng0WzNdID0gKChvcmNfdWludDE2KSB2YXI0Ni54NFszXSkgPj4gODsKLSAgICAgIC8qIDg6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjQ4Lng0WzBdID0gKG9yY191aW50OCkgdmFyNDEueDRbMF07Ci0gICAgICB2YXI0OC54NFsxXSA9IChvcmNfdWludDgpIHZhcjQxLng0WzFdOwotICAgICAgdmFyNDgueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI0MS54NFsyXTsKLSAgICAgIHZhcjQ4Lng0WzNdID0gKG9yY191aW50OCkgdmFyNDEueDRbM107Ci0gICAgICAvKiA5OiBsb2FkbCAqLwotICAgICAgdmFyNDkgPSBwdHIwW2ldOwotICAgICAgLyogMTA6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjUwLng0WzBdID0gKG9yY191aW50OCkgdmFyNDkueDRbMF07Ci0gICAgICB2YXI1MC54NFsxXSA9IChvcmNfdWludDgpIHZhcjQ5Lng0WzFdOwotICAgICAgdmFyNTAueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFsyXTsKLSAgICAgIHZhcjUwLng0WzNdID0gKG9yY191aW50OCkgdmFyNDkueDRbM107Ci0gICAgICAvKiAxMTogc3VidyAqLwotICAgICAgdmFyNTEueDRbMF0gPSB2YXI0OC54NFswXSAtIHZhcjUwLng0WzBdOwotICAgICAgdmFyNTEueDRbMV0gPSB2YXI0OC54NFsxXSAtIHZhcjUwLng0WzFdOwotICAgICAgdmFyNTEueDRbMl0gPSB2YXI0OC54NFsyXSAtIHZhcjUwLng0WzJdOwotICAgICAgdmFyNTEueDRbM10gPSB2YXI0OC54NFszXSAtIHZhcjUwLng0WzNdOwotICAgICAgLyogMTI6IG11bGx3ICovCi0gICAgICB2YXI1Mi54NFswXSA9ICh2YXI1MS54NFswXSAqIHZhcjQ3Lng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjUyLng0WzFdID0gKHZhcjUxLng0WzFdICogdmFyNDcueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNTIueDRbMl0gPSAodmFyNTEueDRbMl0gKiB2YXI0Ny54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1Mi54NFszXSA9ICh2YXI1MS54NFszXSAqIHZhcjQ3Lng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDEzOiBkaXYyNTV3ICovCi0gICAgICB2YXI1My54NFswXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNTIueDRbMF0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI1Mi54NFswXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjUzLng0WzFdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI1Mi54NFsxXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjUyLng0WzFdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNTMueDRbMl0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjUyLng0WzJdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNTIueDRbMl0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI1My54NFszXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNTIueDRbM10gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI1Mi54NFszXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIC8qIDE0OiBhZGR3ICovCi0gICAgICB2YXI1NC54NFswXSA9IHZhcjUwLng0WzBdICsgdmFyNTMueDRbMF07Ci0gICAgICB2YXI1NC54NFsxXSA9IHZhcjUwLng0WzFdICsgdmFyNTMueDRbMV07Ci0gICAgICB2YXI1NC54NFsyXSA9IHZhcjUwLng0WzJdICsgdmFyNTMueDRbMl07Ci0gICAgICB2YXI1NC54NFszXSA9IHZhcjUwLng0WzNdICsgdmFyNTMueDRbM107Ci0gICAgICAvKiAxNTogY29udndiICovCi0gICAgICB2YXI1NS54NFswXSA9IHZhcjU0Lng0WzBdOwotICAgICAgdmFyNTUueDRbMV0gPSB2YXI1NC54NFsxXTsKLSAgICAgIHZhcjU1Lng0WzJdID0gdmFyNTQueDRbMl07Ci0gICAgICB2YXI1NS54NFszXSA9IHZhcjU0Lng0WzNdOwotICAgICAgLyogMTc6IG9ybCAqLwotICAgICAgdmFyNTYuaSA9IHZhcjU1LmkgfCB2YXI0MC5pOwotICAgICAgLyogMTg6IHN0b3JlbCAqLwotICAgICAgcHRyMFtpXSA9IHZhcjU2OwotICAgIH0KLSAgfQotCi19Ci0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX2JhY2t1cF92aWRlb19taXhlcl9vcmNfYmxlbmRfYXJnYiAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgajsKLSAgaW50IG4gPSBleC0+bjsKLSAgaW50IG0gPSBleC0+cGFyYW1zW09SQ19WQVJfQTFdOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyMzk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkIChfX2kzODZfXykKLSAgdm9sYXRpbGUgb3JjX3VuaW9uMzIgdmFyNDA7Ci0jZWxzZQotICBvcmNfdW5pb24zMiB2YXI0MDsKLSNlbmRpZgotICBvcmNfdW5pb24zMiB2YXI0MTsKLSAgb3JjX3VuaW9uMTYgdmFyNDI7Ci0gIG9yY19pbnQ4IHZhcjQzOwotICBvcmNfdW5pb24zMiB2YXI0NDsKLSAgb3JjX3VuaW9uNjQgdmFyNDU7Ci0gIG9yY191bmlvbjY0IHZhcjQ2OwotICBvcmNfdW5pb242NCB2YXI0NzsKLSAgb3JjX3VuaW9uNjQgdmFyNDg7Ci0gIG9yY191bmlvbjMyIHZhcjQ5OwotICBvcmNfdW5pb242NCB2YXI1MDsKLSAgb3JjX3VuaW9uNjQgdmFyNTE7Ci0gIG9yY191bmlvbjY0IHZhcjUyOwotICBvcmNfdW5pb242NCB2YXI1MzsKLSAgb3JjX3VuaW9uNjQgdmFyNTQ7Ci0gIG9yY191bmlvbjMyIHZhcjU1OwotICBvcmNfdW5pb24zMiB2YXI1NjsKLQotICBmb3IgKGogPSAwOyBqIDwgbTsgaisrKSB7Ci0gICAgcHRyMCA9IE9SQ19QVFJfT0ZGU0VUIChleC0+YXJyYXlzWzBdLCBleC0+cGFyYW1zWzBdICogaik7Ci0gICAgcHRyNCA9IE9SQ19QVFJfT0ZGU0VUIChleC0+YXJyYXlzWzRdLCBleC0+cGFyYW1zWzRdICogaik7Ci0KLSAgICAvKiA1OiBsb2FkcHcgKi8KLSAgICB2YXIzOS54NFswXSA9IGV4LT5wYXJhbXNbMjRdOwotICAgIHZhcjM5Lng0WzFdID0gZXgtPnBhcmFtc1syNF07Ci0gICAgdmFyMzkueDRbMl0gPSBleC0+cGFyYW1zWzI0XTsKLSAgICB2YXIzOS54NFszXSA9IGV4LT5wYXJhbXNbMjRdOwotICAgIC8qIDE2OiBsb2FkcGwgKi8KLSAgICB2YXI0MC5pID0gKGludCkgMHgwMDAwMDBmZjsgLyogMjU1IG9yIDEuMjU5ODdlLTMyMWYgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIC8qIDA6IGxvYWRsICovCi0gICAgICB2YXI0MSA9IHB0cjRbaV07Ci0gICAgICAvKiAxOiBjb252bHcgKi8KLSAgICAgIHZhcjQyLmkgPSB2YXI0MS5pOwotICAgICAgLyogMjogY29udndiICovCi0gICAgICB2YXI0MyA9IHZhcjQyLmk7Ci0gICAgICAvKiAzOiBzcGxhdGJsICovCi0gICAgICB2YXI0NC5pID0KLSAgICAgICAgICAoKCgob3JjX3VpbnQzMikgdmFyNDMpICYgMHhmZikgPDwgMjQpIHwgKCgoKG9yY191aW50MzIpIHZhcjQzKSAmIDB4ZmYpCi0gICAgICAgICAgPDwgMTYpIHwgKCgoKG9yY191aW50MzIpIHZhcjQzKSAmIDB4ZmYpIDw8IDgpIHwgKCgob3JjX3VpbnQzMikgdmFyNDMpCi0gICAgICAgICAgJiAweGZmKTsKLSAgICAgIC8qIDQ6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjQ1Lng0WzBdID0gKG9yY191aW50OCkgdmFyNDQueDRbMF07Ci0gICAgICB2YXI0NS54NFsxXSA9IChvcmNfdWludDgpIHZhcjQ0Lng0WzFdOwotICAgICAgdmFyNDUueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI0NC54NFsyXTsKLSAgICAgIHZhcjQ1Lng0WzNdID0gKG9yY191aW50OCkgdmFyNDQueDRbM107Ci0gICAgICAvKiA2OiBtdWxsdyAqLwotICAgICAgdmFyNDYueDRbMF0gPSAodmFyNDUueDRbMF0gKiB2YXIzOS54NFswXSkgJiAweGZmZmY7Ci0gICAgICB2YXI0Ni54NFsxXSA9ICh2YXI0NS54NFsxXSAqIHZhcjM5Lng0WzFdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjQ2Lng0WzJdID0gKHZhcjQ1Lng0WzJdICogdmFyMzkueDRbMl0pICYgMHhmZmZmOwotICAgICAgdmFyNDYueDRbM10gPSAodmFyNDUueDRbM10gKiB2YXIzOS54NFszXSkgJiAweGZmZmY7Ci0gICAgICAvKiA3OiBzaHJ1dyAqLwotICAgICAgdmFyNDcueDRbMF0gPSAoKG9yY191aW50MTYpIHZhcjQ2Lng0WzBdKSA+PiA4OwotICAgICAgdmFyNDcueDRbMV0gPSAoKG9yY191aW50MTYpIHZhcjQ2Lng0WzFdKSA+PiA4OwotICAgICAgdmFyNDcueDRbMl0gPSAoKG9yY191aW50MTYpIHZhcjQ2Lng0WzJdKSA+PiA4OwotICAgICAgdmFyNDcueDRbM10gPSAoKG9yY191aW50MTYpIHZhcjQ2Lng0WzNdKSA+PiA4OwotICAgICAgLyogODogY29udnVidyAqLwotICAgICAgdmFyNDgueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI0MS54NFswXTsKLSAgICAgIHZhcjQ4Lng0WzFdID0gKG9yY191aW50OCkgdmFyNDEueDRbMV07Ci0gICAgICB2YXI0OC54NFsyXSA9IChvcmNfdWludDgpIHZhcjQxLng0WzJdOwotICAgICAgdmFyNDgueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI0MS54NFszXTsKLSAgICAgIC8qIDk6IGxvYWRsICovCi0gICAgICB2YXI0OSA9IHB0cjBbaV07Ci0gICAgICAvKiAxMDogY29udnVidyAqLwotICAgICAgdmFyNTAueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFswXTsKLSAgICAgIHZhcjUwLng0WzFdID0gKG9yY191aW50OCkgdmFyNDkueDRbMV07Ci0gICAgICB2YXI1MC54NFsyXSA9IChvcmNfdWludDgpIHZhcjQ5Lng0WzJdOwotICAgICAgdmFyNTAueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFszXTsKLSAgICAgIC8qIDExOiBzdWJ3ICovCi0gICAgICB2YXI1MS54NFswXSA9IHZhcjQ4Lng0WzBdIC0gdmFyNTAueDRbMF07Ci0gICAgICB2YXI1MS54NFsxXSA9IHZhcjQ4Lng0WzFdIC0gdmFyNTAueDRbMV07Ci0gICAgICB2YXI1MS54NFsyXSA9IHZhcjQ4Lng0WzJdIC0gdmFyNTAueDRbMl07Ci0gICAgICB2YXI1MS54NFszXSA9IHZhcjQ4Lng0WzNdIC0gdmFyNTAueDRbM107Ci0gICAgICAvKiAxMjogbXVsbHcgKi8KLSAgICAgIHZhcjUyLng0WzBdID0gKHZhcjUxLng0WzBdICogdmFyNDcueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNTIueDRbMV0gPSAodmFyNTEueDRbMV0gKiB2YXI0Ny54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1Mi54NFsyXSA9ICh2YXI1MS54NFsyXSAqIHZhcjQ3Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjUyLng0WzNdID0gKHZhcjUxLng0WzNdICogdmFyNDcueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMTM6IGRpdjI1NXcgKi8KLSAgICAgIHZhcjUzLng0WzBdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI1Mi54NFswXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjUyLng0WzBdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNTMueDRbMV0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjUyLng0WzFdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNTIueDRbMV0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI1My54NFsyXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNTIueDRbMl0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI1Mi54NFsyXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjUzLng0WzNdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI1Mi54NFszXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjUyLng0WzNdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgLyogMTQ6IGFkZHcgKi8KLSAgICAgIHZhcjU0Lng0WzBdID0gdmFyNTAueDRbMF0gKyB2YXI1My54NFswXTsKLSAgICAgIHZhcjU0Lng0WzFdID0gdmFyNTAueDRbMV0gKyB2YXI1My54NFsxXTsKLSAgICAgIHZhcjU0Lng0WzJdID0gdmFyNTAueDRbMl0gKyB2YXI1My54NFsyXTsKLSAgICAgIHZhcjU0Lng0WzNdID0gdmFyNTAueDRbM10gKyB2YXI1My54NFszXTsKLSAgICAgIC8qIDE1OiBjb252d2IgKi8KLSAgICAgIHZhcjU1Lng0WzBdID0gdmFyNTQueDRbMF07Ci0gICAgICB2YXI1NS54NFsxXSA9IHZhcjU0Lng0WzFdOwotICAgICAgdmFyNTUueDRbMl0gPSB2YXI1NC54NFsyXTsKLSAgICAgIHZhcjU1Lng0WzNdID0gdmFyNTQueDRbM107Ci0gICAgICAvKiAxNzogb3JsICovCi0gICAgICB2YXI1Ni5pID0gdmFyNTUuaSB8IHZhcjQwLmk7Ci0gICAgICAvKiAxODogc3RvcmVsICovCi0gICAgICBwdHIwW2ldID0gdmFyNTY7Ci0gICAgfQotICB9Ci0KLX0KLQotdm9pZAotdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2FyZ2IgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgNywgOSwgMjYsIDExOCwgMTA1LCAxMDAsIDEwMSwgMTExLCA5NSwgMTA5LCAxMDUsIDEyMCwgMTAxLCAxMTQsIDk1LAotICAgICAgICAxMTEsIDExNCwgOTksIDk1LCA5OCwgMTA4LCAxMDEsIDExMCwgMTAwLCA5NSwgOTcsIDExNCwgMTAzLCA5OCwgMTEsIDQsCi0gICAgICAgIDQsIDEyLCA0LCA0LCAxNCwgNCwgMjU1LCAwLCAwLCAwLCAxNCwgMiwgOCwgMCwgMCwgMCwKLSAgICAgICAgMTYsIDIsIDIwLCA0LCAyMCwgMiwgMjAsIDEsIDIwLCA0LCAyMCwgOCwgMjAsIDgsIDIwLCA4LAotICAgICAgICAxMTMsIDMyLCA0LCAxNjMsIDMzLCAzMiwgMTU3LCAzNCwgMzMsIDE1MiwgMzUsIDM0LCAyMSwgMiwgMTUwLCAzOCwKLSAgICAgICAgMzUsIDIxLCAyLCA4OSwgMzgsIDM4LCAyNCwgMjEsIDIsIDk1LCAzOCwgMzgsIDE3LCAyMSwgMiwgMTUwLAotICAgICAgICAzNywgMzIsIDExMywgMzIsIDAsIDIxLCAyLCAxNTAsIDM2LCAzMiwgMjEsIDIsIDk4LCAzNywgMzcsIDM2LAotICAgICAgICAyMSwgMiwgODksIDM3LCAzNywgMzgsIDIxLCAyLCA4MCwgMzcsIDM3LCAyMSwgMiwgNzAsIDM2LCAzNiwKLSAgICAgICAgMzcsIDIxLCAyLCAxNTcsIDMyLCAzNiwgMTIzLCAzMiwgMzIsIDE2LCAxMjgsIDAsIDMyLCAyLCAwLAotICAgICAgfTsKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXdfZnJvbV9zdGF0aWNfYnl0ZWNvZGUgKGJjKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9iYWNrdXBfZnVuY3Rpb24gKHAsIF9iYWNrdXBfdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2FyZ2IpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfMmQgKHApOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJ2aWRlb19taXhlcl9vcmNfYmxlbmRfYXJnYiIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfYmxlbmRfYXJnYik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfZGVzdGluYXRpb24gKHAsIDQsICJkMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3NvdXJjZSAocCwgNCwgInMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfY29uc3RhbnQgKHAsIDQsIDB4MDAwMDAwZmYsICJjMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAyLCAweDAwMDAwMDA4LCAiYzIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXIgKHAsIDIsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAyLCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDEsICJ0MyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQ0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDUiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0NiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQ3Iik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibG9hZGwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252bHciLCAwLCBPUkNfVkFSX1QyLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252d2IiLCAwLCBPUkNfVkFSX1QzLCBPUkNfVkFSX1QyLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzcGxhdGJsIiwgMCwgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDcsIE9SQ19WQVJfVDQsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGx3IiwgMiwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UNywgT1JDX1ZBUl9QMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic2hydXciLCAyLCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q3LCBPUkNfVkFSX0MyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibG9hZGwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMiwgT1JDX1ZBUl9UNSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic3VidyIsIDIsIE9SQ19WQVJfVDYsIE9SQ19WQVJfVDYsIE9SQ19WQVJfVDUsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGx3IiwgMiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiZGl2MjU1dyIsIDIsIE9SQ19WQVJfVDYsIE9SQ19WQVJfVDYsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHciLCAyLCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1Q2LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252d2IiLCAyLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1Q1LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJvcmwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0MxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzdG9yZWwiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgT1JDX0VYRUNVVE9SX00gKGV4KSA9IG07Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX0QxXSA9IGQxX3N0cmlkZTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICBleC0+cGFyYW1zW09SQ19WQVJfUzFdID0gczFfc3RyaWRlOwotICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gcDE7Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgotCi0KLS8qIHZpZGVvX21peGVyX29yY19ibGVuZF9iZ3JhICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLXZpZGVvX21peGVyX29yY19ibGVuZF9iZ3JhIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgczFfc3RyaWRlLCBpbnQgcDEsIGludCBuLCBpbnQgbSkKLXsKLSAgaW50IGk7Ci0gIGludCBqOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyNDA7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkIChfX2kzODZfXykKLSAgdm9sYXRpbGUgb3JjX3VuaW9uMzIgdmFyNDE7Ci0jZWxzZQotICBvcmNfdW5pb24zMiB2YXI0MTsKLSNlbmRpZgotICBvcmNfdW5pb24zMiB2YXI0MjsKLSAgb3JjX3VuaW9uMzIgdmFyNDM7Ci0gIG9yY191bmlvbjE2IHZhcjQ0OwotICBvcmNfaW50OCB2YXI0NTsKLSAgb3JjX3VuaW9uMzIgdmFyNDY7Ci0gIG9yY191bmlvbjY0IHZhcjQ3OwotICBvcmNfdW5pb242NCB2YXI0ODsKLSAgb3JjX3VuaW9uNjQgdmFyNDk7Ci0gIG9yY191bmlvbjY0IHZhcjUwOwotICBvcmNfdW5pb24zMiB2YXI1MTsKLSAgb3JjX3VuaW9uNjQgdmFyNTI7Ci0gIG9yY191bmlvbjY0IHZhcjUzOwotICBvcmNfdW5pb242NCB2YXI1NDsKLSAgb3JjX3VuaW9uNjQgdmFyNTU7Ci0gIG9yY191bmlvbjY0IHZhcjU2OwotICBvcmNfdW5pb24zMiB2YXI1NzsKLSAgb3JjX3VuaW9uMzIgdmFyNTg7Ci0KLSAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgIHB0cjAgPSBPUkNfUFRSX09GRlNFVCAoZDEsIGQxX3N0cmlkZSAqIGopOwotICAgIHB0cjQgPSBPUkNfUFRSX09GRlNFVCAoczEsIHMxX3N0cmlkZSAqIGopOwotCi0gICAgLyogNjogbG9hZHB3ICovCi0gICAgdmFyNDAueDRbMF0gPSBwMTsKLSAgICB2YXI0MC54NFsxXSA9IHAxOwotICAgIHZhcjQwLng0WzJdID0gcDE7Ci0gICAgdmFyNDAueDRbM10gPSBwMTsKLSAgICAvKiAxNzogbG9hZHBsICovCi0gICAgdmFyNDEuaSA9IChpbnQpIDB4ZmYwMDAwMDA7IC8qIC0xNjc3NzIxNiBvciAyLjExMzcxZS0zMTRmICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAvKiAwOiBsb2FkbCAqLwotICAgICAgdmFyNDIgPSBwdHI0W2ldOwotICAgICAgLyogMTogc2hydWwgKi8KLSAgICAgIHZhcjQzLmkgPSAoKG9yY191aW50MzIpIHZhcjQyLmkpID4+IDI0OwotICAgICAgLyogMjogY29udmx3ICovCi0gICAgICB2YXI0NC5pID0gdmFyNDMuaTsKLSAgICAgIC8qIDM6IGNvbnZ3YiAqLwotICAgICAgdmFyNDUgPSB2YXI0NC5pOwotICAgICAgLyogNDogc3BsYXRibCAqLwotICAgICAgdmFyNDYuaSA9Ci0gICAgICAgICAgKCgoKG9yY191aW50MzIpIHZhcjQ1KSAmIDB4ZmYpIDw8IDI0KSB8ICgoKChvcmNfdWludDMyKSB2YXI0NSkgJiAweGZmKQotICAgICAgICAgIDw8IDE2KSB8ICgoKChvcmNfdWludDMyKSB2YXI0NSkgJiAweGZmKSA8PCA4KSB8ICgoKG9yY191aW50MzIpIHZhcjQ1KQotICAgICAgICAgICYgMHhmZik7Ci0gICAgICAvKiA1OiBjb252dWJ3ICovCi0gICAgICB2YXI0Ny54NFswXSA9IChvcmNfdWludDgpIHZhcjQ2Lng0WzBdOwotICAgICAgdmFyNDcueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0Ni54NFsxXTsKLSAgICAgIHZhcjQ3Lng0WzJdID0gKG9yY191aW50OCkgdmFyNDYueDRbMl07Ci0gICAgICB2YXI0Ny54NFszXSA9IChvcmNfdWludDgpIHZhcjQ2Lng0WzNdOwotICAgICAgLyogNzogbXVsbHcgKi8KLSAgICAgIHZhcjQ4Lng0WzBdID0gKHZhcjQ3Lng0WzBdICogdmFyNDAueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNDgueDRbMV0gPSAodmFyNDcueDRbMV0gKiB2YXI0MC54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI0OC54NFsyXSA9ICh2YXI0Ny54NFsyXSAqIHZhcjQwLng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjQ4Lng0WzNdID0gKHZhcjQ3Lng0WzNdICogdmFyNDAueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogODogc2hydXcgKi8KLSAgICAgIHZhcjQ5Lng0WzBdID0gKChvcmNfdWludDE2KSB2YXI0OC54NFswXSkgPj4gODsKLSAgICAgIHZhcjQ5Lng0WzFdID0gKChvcmNfdWludDE2KSB2YXI0OC54NFsxXSkgPj4gODsKLSAgICAgIHZhcjQ5Lng0WzJdID0gKChvcmNfdWludDE2KSB2YXI0OC54NFsyXSkgPj4gODsKLSAgICAgIHZhcjQ5Lng0WzNdID0gKChvcmNfdWludDE2KSB2YXI0OC54NFszXSkgPj4gODsKLSAgICAgIC8qIDk6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjUwLng0WzBdID0gKG9yY191aW50OCkgdmFyNDIueDRbMF07Ci0gICAgICB2YXI1MC54NFsxXSA9IChvcmNfdWludDgpIHZhcjQyLng0WzFdOwotICAgICAgdmFyNTAueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI0Mi54NFsyXTsKLSAgICAgIHZhcjUwLng0WzNdID0gKG9yY191aW50OCkgdmFyNDIueDRbM107Ci0gICAgICAvKiAxMDogbG9hZGwgKi8KLSAgICAgIHZhcjUxID0gcHRyMFtpXTsKLSAgICAgIC8qIDExOiBjb252dWJ3ICovCi0gICAgICB2YXI1Mi54NFswXSA9IChvcmNfdWludDgpIHZhcjUxLng0WzBdOwotICAgICAgdmFyNTIueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI1MS54NFsxXTsKLSAgICAgIHZhcjUyLng0WzJdID0gKG9yY191aW50OCkgdmFyNTEueDRbMl07Ci0gICAgICB2YXI1Mi54NFszXSA9IChvcmNfdWludDgpIHZhcjUxLng0WzNdOwotICAgICAgLyogMTI6IHN1YncgKi8KLSAgICAgIHZhcjUzLng0WzBdID0gdmFyNTAueDRbMF0gLSB2YXI1Mi54NFswXTsKLSAgICAgIHZhcjUzLng0WzFdID0gdmFyNTAueDRbMV0gLSB2YXI1Mi54NFsxXTsKLSAgICAgIHZhcjUzLng0WzJdID0gdmFyNTAueDRbMl0gLSB2YXI1Mi54NFsyXTsKLSAgICAgIHZhcjUzLng0WzNdID0gdmFyNTAueDRbM10gLSB2YXI1Mi54NFszXTsKLSAgICAgIC8qIDEzOiBtdWxsdyAqLwotICAgICAgdmFyNTQueDRbMF0gPSAodmFyNTMueDRbMF0gKiB2YXI0OS54NFswXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1NC54NFsxXSA9ICh2YXI1My54NFsxXSAqIHZhcjQ5Lng0WzFdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjU0Lng0WzJdID0gKHZhcjUzLng0WzJdICogdmFyNDkueDRbMl0pICYgMHhmZmZmOwotICAgICAgdmFyNTQueDRbM10gPSAodmFyNTMueDRbM10gKiB2YXI0OS54NFszXSkgJiAweGZmZmY7Ci0gICAgICAvKiAxNDogZGl2MjU1dyAqLwotICAgICAgdmFyNTUueDRbMF0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjU0Lng0WzBdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNTQueDRbMF0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI1NS54NFsxXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNTQueDRbMV0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI1NC54NFsxXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjU1Lng0WzJdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI1NC54NFsyXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjU0Lng0WzJdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNTUueDRbM10gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjU0Lng0WzNdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNTQueDRbM10gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICAvKiAxNTogYWRkdyAqLwotICAgICAgdmFyNTYueDRbMF0gPSB2YXI1Mi54NFswXSArIHZhcjU1Lng0WzBdOwotICAgICAgdmFyNTYueDRbMV0gPSB2YXI1Mi54NFsxXSArIHZhcjU1Lng0WzFdOwotICAgICAgdmFyNTYueDRbMl0gPSB2YXI1Mi54NFsyXSArIHZhcjU1Lng0WzJdOwotICAgICAgdmFyNTYueDRbM10gPSB2YXI1Mi54NFszXSArIHZhcjU1Lng0WzNdOwotICAgICAgLyogMTY6IGNvbnZ3YiAqLwotICAgICAgdmFyNTcueDRbMF0gPSB2YXI1Ni54NFswXTsKLSAgICAgIHZhcjU3Lng0WzFdID0gdmFyNTYueDRbMV07Ci0gICAgICB2YXI1Ny54NFsyXSA9IHZhcjU2Lng0WzJdOwotICAgICAgdmFyNTcueDRbM10gPSB2YXI1Ni54NFszXTsKLSAgICAgIC8qIDE4OiBvcmwgKi8KLSAgICAgIHZhcjU4LmkgPSB2YXI1Ny5pIHwgdmFyNDEuaTsKLSAgICAgIC8qIDE5OiBzdG9yZWwgKi8KLSAgICAgIHB0cjBbaV0gPSB2YXI1ODsKLSAgICB9Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2JncmEgKE9yY0V4ZWN1dG9yICogT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IGo7Ci0gIGludCBuID0gZXgtPm47Ci0gIGludCBtID0gZXgtPnBhcmFtc1tPUkNfVkFSX0ExXTsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjY0IHZhcjQwOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZCAoX19pMzg2X18pCi0gIHZvbGF0aWxlIG9yY191bmlvbjMyIHZhcjQxOwotI2Vsc2UKLSAgb3JjX3VuaW9uMzIgdmFyNDE7Ci0jZW5kaWYKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0gIG9yY191bmlvbjMyIHZhcjQzOwotICBvcmNfdW5pb24xNiB2YXI0NDsKLSAgb3JjX2ludDggdmFyNDU7Ci0gIG9yY191bmlvbjMyIHZhcjQ2OwotICBvcmNfdW5pb242NCB2YXI0NzsKLSAgb3JjX3VuaW9uNjQgdmFyNDg7Ci0gIG9yY191bmlvbjY0IHZhcjQ5OwotICBvcmNfdW5pb242NCB2YXI1MDsKLSAgb3JjX3VuaW9uMzIgdmFyNTE7Ci0gIG9yY191bmlvbjY0IHZhcjUyOwotICBvcmNfdW5pb242NCB2YXI1MzsKLSAgb3JjX3VuaW9uNjQgdmFyNTQ7Ci0gIG9yY191bmlvbjY0IHZhcjU1OwotICBvcmNfdW5pb242NCB2YXI1NjsKLSAgb3JjX3VuaW9uMzIgdmFyNTc7Ci0gIG9yY191bmlvbjMyIHZhcjU4OwotCi0gIGZvciAoaiA9IDA7IGogPCBtOyBqKyspIHsKLSAgICBwdHIwID0gT1JDX1BUUl9PRkZTRVQgKGV4LT5hcnJheXNbMF0sIGV4LT5wYXJhbXNbMF0gKiBqKTsKLSAgICBwdHI0ID0gT1JDX1BUUl9PRkZTRVQgKGV4LT5hcnJheXNbNF0sIGV4LT5wYXJhbXNbNF0gKiBqKTsKLQotICAgIC8qIDY6IGxvYWRwdyAqLwotICAgIHZhcjQwLng0WzBdID0gZXgtPnBhcmFtc1syNF07Ci0gICAgdmFyNDAueDRbMV0gPSBleC0+cGFyYW1zWzI0XTsKLSAgICB2YXI0MC54NFsyXSA9IGV4LT5wYXJhbXNbMjRdOwotICAgIHZhcjQwLng0WzNdID0gZXgtPnBhcmFtc1syNF07Ci0gICAgLyogMTc6IGxvYWRwbCAqLwotICAgIHZhcjQxLmkgPSAoaW50KSAweGZmMDAwMDAwOyAvKiAtMTY3NzcyMTYgb3IgMi4xMTM3MWUtMzE0ZiAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgLyogMDogbG9hZGwgKi8KLSAgICAgIHZhcjQyID0gcHRyNFtpXTsKLSAgICAgIC8qIDE6IHNocnVsICovCi0gICAgICB2YXI0My5pID0gKChvcmNfdWludDMyKSB2YXI0Mi5pKSA+PiAyNDsKLSAgICAgIC8qIDI6IGNvbnZsdyAqLwotICAgICAgdmFyNDQuaSA9IHZhcjQzLmk7Ci0gICAgICAvKiAzOiBjb252d2IgKi8KLSAgICAgIHZhcjQ1ID0gdmFyNDQuaTsKLSAgICAgIC8qIDQ6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjQ2LmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI0NSkgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNDUpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNDUpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI0NSkKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogNTogY29udnVidyAqLwotICAgICAgdmFyNDcueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI0Ni54NFswXTsKLSAgICAgIHZhcjQ3Lng0WzFdID0gKG9yY191aW50OCkgdmFyNDYueDRbMV07Ci0gICAgICB2YXI0Ny54NFsyXSA9IChvcmNfdWludDgpIHZhcjQ2Lng0WzJdOwotICAgICAgdmFyNDcueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI0Ni54NFszXTsKLSAgICAgIC8qIDc6IG11bGx3ICovCi0gICAgICB2YXI0OC54NFswXSA9ICh2YXI0Ny54NFswXSAqIHZhcjQwLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjQ4Lng0WzFdID0gKHZhcjQ3Lng0WzFdICogdmFyNDAueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNDgueDRbMl0gPSAodmFyNDcueDRbMl0gKiB2YXI0MC54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI0OC54NFszXSA9ICh2YXI0Ny54NFszXSAqIHZhcjQwLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDg6IHNocnV3ICovCi0gICAgICB2YXI0OS54NFswXSA9ICgob3JjX3VpbnQxNikgdmFyNDgueDRbMF0pID4+IDg7Ci0gICAgICB2YXI0OS54NFsxXSA9ICgob3JjX3VpbnQxNikgdmFyNDgueDRbMV0pID4+IDg7Ci0gICAgICB2YXI0OS54NFsyXSA9ICgob3JjX3VpbnQxNikgdmFyNDgueDRbMl0pID4+IDg7Ci0gICAgICB2YXI0OS54NFszXSA9ICgob3JjX3VpbnQxNikgdmFyNDgueDRbM10pID4+IDg7Ci0gICAgICAvKiA5OiBjb252dWJ3ICovCi0gICAgICB2YXI1MC54NFswXSA9IChvcmNfdWludDgpIHZhcjQyLng0WzBdOwotICAgICAgdmFyNTAueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0Mi54NFsxXTsKLSAgICAgIHZhcjUwLng0WzJdID0gKG9yY191aW50OCkgdmFyNDIueDRbMl07Ci0gICAgICB2YXI1MC54NFszXSA9IChvcmNfdWludDgpIHZhcjQyLng0WzNdOwotICAgICAgLyogMTA6IGxvYWRsICovCi0gICAgICB2YXI1MSA9IHB0cjBbaV07Ci0gICAgICAvKiAxMTogY29udnVidyAqLwotICAgICAgdmFyNTIueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI1MS54NFswXTsKLSAgICAgIHZhcjUyLng0WzFdID0gKG9yY191aW50OCkgdmFyNTEueDRbMV07Ci0gICAgICB2YXI1Mi54NFsyXSA9IChvcmNfdWludDgpIHZhcjUxLng0WzJdOwotICAgICAgdmFyNTIueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI1MS54NFszXTsKLSAgICAgIC8qIDEyOiBzdWJ3ICovCi0gICAgICB2YXI1My54NFswXSA9IHZhcjUwLng0WzBdIC0gdmFyNTIueDRbMF07Ci0gICAgICB2YXI1My54NFsxXSA9IHZhcjUwLng0WzFdIC0gdmFyNTIueDRbMV07Ci0gICAgICB2YXI1My54NFsyXSA9IHZhcjUwLng0WzJdIC0gdmFyNTIueDRbMl07Ci0gICAgICB2YXI1My54NFszXSA9IHZhcjUwLng0WzNdIC0gdmFyNTIueDRbM107Ci0gICAgICAvKiAxMzogbXVsbHcgKi8KLSAgICAgIHZhcjU0Lng0WzBdID0gKHZhcjUzLng0WzBdICogdmFyNDkueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNTQueDRbMV0gPSAodmFyNTMueDRbMV0gKiB2YXI0OS54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1NC54NFsyXSA9ICh2YXI1My54NFsyXSAqIHZhcjQ5Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjU0Lng0WzNdID0gKHZhcjUzLng0WzNdICogdmFyNDkueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMTQ6IGRpdjI1NXcgKi8KLSAgICAgIHZhcjU1Lng0WzBdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI1NC54NFswXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjU0Lng0WzBdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNTUueDRbMV0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjU0Lng0WzFdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNTQueDRbMV0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI1NS54NFsyXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNTQueDRbMl0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI1NC54NFsyXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjU1Lng0WzNdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI1NC54NFszXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjU0Lng0WzNdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgLyogMTU6IGFkZHcgKi8KLSAgICAgIHZhcjU2Lng0WzBdID0gdmFyNTIueDRbMF0gKyB2YXI1NS54NFswXTsKLSAgICAgIHZhcjU2Lng0WzFdID0gdmFyNTIueDRbMV0gKyB2YXI1NS54NFsxXTsKLSAgICAgIHZhcjU2Lng0WzJdID0gdmFyNTIueDRbMl0gKyB2YXI1NS54NFsyXTsKLSAgICAgIHZhcjU2Lng0WzNdID0gdmFyNTIueDRbM10gKyB2YXI1NS54NFszXTsKLSAgICAgIC8qIDE2OiBjb252d2IgKi8KLSAgICAgIHZhcjU3Lng0WzBdID0gdmFyNTYueDRbMF07Ci0gICAgICB2YXI1Ny54NFsxXSA9IHZhcjU2Lng0WzFdOwotICAgICAgdmFyNTcueDRbMl0gPSB2YXI1Ni54NFsyXTsKLSAgICAgIHZhcjU3Lng0WzNdID0gdmFyNTYueDRbM107Ci0gICAgICAvKiAxODogb3JsICovCi0gICAgICB2YXI1OC5pID0gdmFyNTcuaSB8IHZhcjQxLmk7Ci0gICAgICAvKiAxOTogc3RvcmVsICovCi0gICAgICBwdHIwW2ldID0gdmFyNTg7Ci0gICAgfQotICB9Ci0KLX0KLQotdm9pZAotdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2JncmEgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKQotewotICBPcmNFeGVjdXRvciBfZXgsICpleCA9ICZfZXg7Ci0gIHN0YXRpYyB2b2xhdGlsZSBpbnQgcF9pbml0ZWQgPSAwOwotICBzdGF0aWMgT3JjQ29kZSAqYyA9IDA7Ci0gIHZvaWQgKCpmdW5jKSAoT3JjRXhlY3V0b3IgKik7Ci0KLSAgaWYgKCFwX2luaXRlZCkgewotICAgIG9yY19vbmNlX211dGV4X2xvY2sgKCk7Ci0gICAgaWYgKCFwX2luaXRlZCkgewotICAgICAgT3JjUHJvZ3JhbSAqcDsKLQotI2lmIDEKLSAgICAgIHN0YXRpYyBjb25zdCBvcmNfdWludDggYmNbXSA9IHsKLSAgICAgICAgMSwgNywgOSwgMjYsIDExOCwgMTA1LCAxMDAsIDEwMSwgMTExLCA5NSwgMTA5LCAxMDUsIDEyMCwgMTAxLCAxMTQsIDk1LAotICAgICAgICAxMTEsIDExNCwgOTksIDk1LCA5OCwgMTA4LCAxMDEsIDExMCwgMTAwLCA5NSwgOTgsIDEwMywgMTE0LCA5NywgMTEsIDQsCi0gICAgICAgIDQsIDEyLCA0LCA0LCAxNCwgNCwgMCwgMCwgMCwgMjU1LCAxNCwgNCwgMjQsIDAsIDAsIDAsCi0gICAgICAgIDE0LCAyLCA4LCAwLCAwLCAwLCAxNiwgMiwgMjAsIDQsIDIwLCA0LCAyMCwgMiwgMjAsIDEsCi0gICAgICAgIDIwLCA0LCAyMCwgOCwgMjAsIDgsIDIwLCA4LCAxMTMsIDMyLCA0LCAxMjYsIDMzLCAzMiwgMTcsIDE2MywKLSAgICAgICAgMzQsIDMzLCAxNTcsIDM1LCAzNCwgMTUyLCAzNiwgMzUsIDIxLCAyLCAxNTAsIDM5LCAzNiwgMjEsIDIsIDg5LAotICAgICAgICAzOSwgMzksIDI0LCAyMSwgMiwgOTUsIDM5LCAzOSwgMTgsIDIxLCAyLCAxNTAsIDM4LCAzMiwgMTEzLCAzMiwKLSAgICAgICAgMCwgMjEsIDIsIDE1MCwgMzcsIDMyLCAyMSwgMiwgOTgsIDM4LCAzOCwgMzcsIDIxLCAyLCA4OSwgMzgsCi0gICAgICAgIDM4LCAzOSwgMjEsIDIsIDgwLCAzOCwgMzgsIDIxLCAyLCA3MCwgMzcsIDM3LCAzOCwgMjEsIDIsIDE1NywKLSAgICAgICAgMzIsIDM3LCAxMjMsIDMyLCAzMiwgMTYsIDEyOCwgMCwgMzIsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfYmxlbmRfYmdyYSk7Ci0jZWxzZQotICAgICAgcCA9IG9yY19wcm9ncmFtX25ldyAoKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF8yZCAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfbmFtZSAocCwgInZpZGVvX21peGVyX29yY19ibGVuZF9iZ3JhIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLCBfYmFja3VwX3ZpZGVvX21peGVyX29yY19ibGVuZF9iZ3JhKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgNCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9jb25zdGFudCAocCwgNCwgMHhmZjAwMDAwMCwgImMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfY29uc3RhbnQgKHAsIDQsIDB4MDAwMDAwMTgsICJjMiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAyLCAweDAwMDAwMDA4LCAiYzMiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXIgKHAsIDIsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDIsICJ0MyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMSwgInQ0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDUiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0NiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQ3Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDgiKTsKLQotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJsb2FkbCIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfUzEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNocnVsIiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9DMiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmx3IiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udndiIiwgMCwgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic3BsYXRibCIsIDAsIE9SQ19WQVJfVDUsIE9SQ19WQVJfVDQsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ1YnciLCAyLCBPUkNfVkFSX1Q4LCBPUkNfVkFSX1Q1LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxsdyIsIDIsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDgsIE9SQ19WQVJfUDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNocnV3IiwgMiwgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9DMywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDcsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImxvYWRsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDYsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInN1YnciLCAyLCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q2LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxsdyIsIDIsIE9SQ19WQVJfVDcsIE9SQ19WQVJfVDcsIE9SQ19WQVJfVDgsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImRpdjI1NXciLCAyLCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q3LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhZGR3IiwgMiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udndiIiwgMiwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAib3JsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9DMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic3RvcmVsIiwgMCwgT1JDX1ZBUl9EMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSNlbmRpZgotCi0gICAgICBvcmNfcHJvZ3JhbV9jb21waWxlIChwKTsKLSAgICAgIGMgPSBvcmNfcHJvZ3JhbV90YWtlX2NvZGUgKHApOwotICAgICAgb3JjX3Byb2dyYW1fZnJlZSAocCk7Ci0gICAgfQotICAgIHBfaW5pdGVkID0gVFJVRTsKLSAgICBvcmNfb25jZV9tdXRleF91bmxvY2sgKCk7Ci0gIH0KLSAgZXgtPmFycmF5c1tPUkNfVkFSX0EyXSA9IGM7Ci0gIGV4LT5wcm9ncmFtID0gMDsKLQotICBleC0+biA9IG47Ci0gIE9SQ19FWEVDVVRPUl9NIChleCkgPSBtOwotICBleC0+YXJyYXlzW09SQ19WQVJfRDFdID0gZDE7Ci0gIGV4LT5wYXJhbXNbT1JDX1ZBUl9EMV0gPSBkMV9zdHJpZGU7Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9TMV0gPSAodm9pZCAqKSBzMTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX1MxXSA9IHMxX3N0cmlkZTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX1AxXSA9IHAxOwotCi0gIGZ1bmMgPSBjLT5leGVjOwotICBmdW5jIChleCk7Ci19Ci0jZW5kaWYKLQotCi0vKiB2aWRlb19taXhlcl9vcmNfb3ZlcmxheV9hcmdiICovCi0jaWZkZWYgRElTQUJMRV9PUkMKLXZvaWQKLXZpZGVvX21peGVyX29yY19vdmVybGF5X2FyZ2IgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwKLSAgICBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKQotewotICBpbnQgaTsKLSAgaW50IGo7Ci0gIG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyMDsKLSAgY29uc3Qgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHI0OwotICBvcmNfdW5pb242NCB2YXI0MTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQgKF9faTM4Nl9fKQotICB2b2xhdGlsZSBvcmNfdW5pb24zMiB2YXI0MjsKLSNlbHNlCi0gIG9yY191bmlvbjMyIHZhcjQyOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkIChfX2kzODZfXykKLSAgdm9sYXRpbGUgb3JjX3VuaW9uMzIgdmFyNDM7Ci0jZWxzZQotICBvcmNfdW5pb24zMiB2YXI0MzsKLSNlbmRpZgotICBvcmNfdW5pb24zMiB2YXI0NDsKLSAgb3JjX3VuaW9uMTYgdmFyNDU7Ci0gIG9yY19pbnQ4IHZhcjQ2OwotICBvcmNfdW5pb24zMiB2YXI0NzsKLSAgb3JjX3VuaW9uNjQgdmFyNDg7Ci0gIG9yY191bmlvbjY0IHZhcjQ5OwotICBvcmNfdW5pb242NCB2YXI1MDsKLSAgb3JjX3VuaW9uNjQgdmFyNTE7Ci0gIG9yY191bmlvbjY0IHZhcjUyOwotICBvcmNfdW5pb24zMiB2YXI1MzsKLSAgb3JjX3VuaW9uNjQgdmFyNTQ7Ci0gIG9yY191bmlvbjY0IHZhcjU1OwotICBvcmNfdW5pb24zMiB2YXI1NjsKLSAgb3JjX3VuaW9uMTYgdmFyNTc7Ci0gIG9yY19pbnQ4IHZhcjU4OwotICBvcmNfdW5pb24zMiB2YXI1OTsKLSAgb3JjX3VuaW9uNjQgdmFyNjA7Ci0gIG9yY191bmlvbjY0IHZhcjYxOwotICBvcmNfdW5pb242NCB2YXI2MjsKLSAgb3JjX3VuaW9uNjQgdmFyNjM7Ci0gIG9yY191bmlvbjY0IHZhcjY0OwotICBvcmNfdW5pb242NCB2YXI2NTsKLSAgb3JjX3VuaW9uNjQgdmFyNjY7Ci0gIG9yY191bmlvbjY0IHZhcjY3OwotICBvcmNfdW5pb24zMiB2YXI2ODsKLSAgb3JjX3VuaW9uMzIgdmFyNjk7Ci0gIG9yY191bmlvbjMyIHZhcjcwOwotICBvcmNfdW5pb24zMiB2YXI3MTsKLSAgb3JjX3VuaW9uMzIgdmFyNzI7Ci0KLSAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgIHB0cjAgPSBPUkNfUFRSX09GRlNFVCAoZDEsIGQxX3N0cmlkZSAqIGopOwotICAgIHB0cjQgPSBPUkNfUFRSX09GRlNFVCAoczEsIHMxX3N0cmlkZSAqIGopOwotCi0gICAgLyogNTogbG9hZHB3ICovCi0gICAgdmFyNDEueDRbMF0gPSBwMTsKLSAgICB2YXI0MS54NFsxXSA9IHAxOwotICAgIHZhcjQxLng0WzJdID0gcDE7Ci0gICAgdmFyNDEueDRbM10gPSBwMTsKLSAgICAvKiAxMDogbG9hZHBsICovCi0gICAgdmFyNTMuaSA9IChpbnQpIDB4ZmZmZmZmZmY7IC8qIC0xIG9yIDIuMTIyZS0zMTRmICovCi0gICAgLyogMjY6IGxvYWRwbCAqLwotICAgIHZhcjQyLmkgPSAoaW50KSAweGZmZmZmZjAwOyAvKiAtMjU2IG9yIDIuMTIyZS0zMTRmICovCi0gICAgLyogMjk6IGxvYWRwbCAqLwotICAgIHZhcjQzLmkgPSAoaW50KSAweDAwMDAwMGZmOyAvKiAyNTUgb3IgMS4yNTk4N2UtMzIxZiAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgLyogMDogbG9hZGwgKi8KLSAgICAgIHZhcjQ0ID0gcHRyNFtpXTsKLSAgICAgIC8qIDE6IGNvbnZsdyAqLwotICAgICAgdmFyNDUuaSA9IHZhcjQ0Lmk7Ci0gICAgICAvKiAyOiBjb252d2IgKi8KLSAgICAgIHZhcjQ2ID0gdmFyNDUuaTsKLSAgICAgIC8qIDM6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjQ3LmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI0NikgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNDYpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNDYpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI0NikKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogNDogY29udnVidyAqLwotICAgICAgdmFyNDgueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI0Ny54NFswXTsKLSAgICAgIHZhcjQ4Lng0WzFdID0gKG9yY191aW50OCkgdmFyNDcueDRbMV07Ci0gICAgICB2YXI0OC54NFsyXSA9IChvcmNfdWludDgpIHZhcjQ3Lng0WzJdOwotICAgICAgdmFyNDgueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI0Ny54NFszXTsKLSAgICAgIC8qIDY6IG11bGx3ICovCi0gICAgICB2YXI0OS54NFswXSA9ICh2YXI0OC54NFswXSAqIHZhcjQxLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjQ5Lng0WzFdID0gKHZhcjQ4Lng0WzFdICogdmFyNDEueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNDkueDRbMl0gPSAodmFyNDgueDRbMl0gKiB2YXI0MS54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI0OS54NFszXSA9ICh2YXI0OC54NFszXSAqIHZhcjQxLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDc6IHNocnV3ICovCi0gICAgICB2YXI1MC54NFswXSA9ICgob3JjX3VpbnQxNikgdmFyNDkueDRbMF0pID4+IDg7Ci0gICAgICB2YXI1MC54NFsxXSA9ICgob3JjX3VpbnQxNikgdmFyNDkueDRbMV0pID4+IDg7Ci0gICAgICB2YXI1MC54NFsyXSA9ICgob3JjX3VpbnQxNikgdmFyNDkueDRbMl0pID4+IDg7Ci0gICAgICB2YXI1MC54NFszXSA9ICgob3JjX3VpbnQxNikgdmFyNDkueDRbM10pID4+IDg7Ci0gICAgICAvKiA4OiBjb252dWJ3ICovCi0gICAgICB2YXI1MS54NFswXSA9IChvcmNfdWludDgpIHZhcjQ0Lng0WzBdOwotICAgICAgdmFyNTEueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0NC54NFsxXTsKLSAgICAgIHZhcjUxLng0WzJdID0gKG9yY191aW50OCkgdmFyNDQueDRbMl07Ci0gICAgICB2YXI1MS54NFszXSA9IChvcmNfdWludDgpIHZhcjQ0Lng0WzNdOwotICAgICAgLyogOTogbXVsbHcgKi8KLSAgICAgIHZhcjUyLng0WzBdID0gKHZhcjUxLng0WzBdICogdmFyNTAueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNTIueDRbMV0gPSAodmFyNTEueDRbMV0gKiB2YXI1MC54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1Mi54NFsyXSA9ICh2YXI1MS54NFsyXSAqIHZhcjUwLng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjUyLng0WzNdID0gKHZhcjUxLng0WzNdICogdmFyNTAueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMTE6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjU0Lng0WzBdID0gKG9yY191aW50OCkgdmFyNTMueDRbMF07Ci0gICAgICB2YXI1NC54NFsxXSA9IChvcmNfdWludDgpIHZhcjUzLng0WzFdOwotICAgICAgdmFyNTQueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI1My54NFsyXTsKLSAgICAgIHZhcjU0Lng0WzNdID0gKG9yY191aW50OCkgdmFyNTMueDRbM107Ci0gICAgICAvKiAxMjogc3VidyAqLwotICAgICAgdmFyNTUueDRbMF0gPSB2YXI1NC54NFswXSAtIHZhcjUwLng0WzBdOwotICAgICAgdmFyNTUueDRbMV0gPSB2YXI1NC54NFsxXSAtIHZhcjUwLng0WzFdOwotICAgICAgdmFyNTUueDRbMl0gPSB2YXI1NC54NFsyXSAtIHZhcjUwLng0WzJdOwotICAgICAgdmFyNTUueDRbM10gPSB2YXI1NC54NFszXSAtIHZhcjUwLng0WzNdOwotICAgICAgLyogMTM6IGxvYWRsICovCi0gICAgICB2YXI1NiA9IHB0cjBbaV07Ci0gICAgICAvKiAxNDogY29udmx3ICovCi0gICAgICB2YXI1Ny5pID0gdmFyNTYuaTsKLSAgICAgIC8qIDE1OiBjb252d2IgKi8KLSAgICAgIHZhcjU4ID0gdmFyNTcuaTsKLSAgICAgIC8qIDE2OiBzcGxhdGJsICovCi0gICAgICB2YXI1OS5pID0KLSAgICAgICAgICAoKCgob3JjX3VpbnQzMikgdmFyNTgpICYgMHhmZikgPDwgMjQpIHwgKCgoKG9yY191aW50MzIpIHZhcjU4KSAmIDB4ZmYpCi0gICAgICAgICAgPDwgMTYpIHwgKCgoKG9yY191aW50MzIpIHZhcjU4KSAmIDB4ZmYpIDw8IDgpIHwgKCgob3JjX3VpbnQzMikgdmFyNTgpCi0gICAgICAgICAgJiAweGZmKTsKLSAgICAgIC8qIDE3OiBjb252dWJ3ICovCi0gICAgICB2YXI2MC54NFswXSA9IChvcmNfdWludDgpIHZhcjU5Lng0WzBdOwotICAgICAgdmFyNjAueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI1OS54NFsxXTsKLSAgICAgIHZhcjYwLng0WzJdID0gKG9yY191aW50OCkgdmFyNTkueDRbMl07Ci0gICAgICB2YXI2MC54NFszXSA9IChvcmNfdWludDgpIHZhcjU5Lng0WzNdOwotICAgICAgLyogMTg6IG11bGx3ICovCi0gICAgICB2YXI2MS54NFswXSA9ICh2YXI2MC54NFswXSAqIHZhcjU1Lng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjYxLng0WzFdID0gKHZhcjYwLng0WzFdICogdmFyNTUueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNjEueDRbMl0gPSAodmFyNjAueDRbMl0gKiB2YXI1NS54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2MS54NFszXSA9ICh2YXI2MC54NFszXSAqIHZhcjU1Lng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDE5OiBkaXYyNTV3ICovCi0gICAgICB2YXI2Mi54NFswXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNjEueDRbMF0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI2MS54NFswXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjYyLng0WzFdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2MS54NFsxXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjYxLng0WzFdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNjIueDRbMl0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjYxLng0WzJdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNjEueDRbMl0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI2Mi54NFszXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNjEueDRbM10gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI2MS54NFszXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIC8qIDIwOiBjb252dWJ3ICovCi0gICAgICB2YXI2My54NFswXSA9IChvcmNfdWludDgpIHZhcjU2Lng0WzBdOwotICAgICAgdmFyNjMueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI1Ni54NFsxXTsKLSAgICAgIHZhcjYzLng0WzJdID0gKG9yY191aW50OCkgdmFyNTYueDRbMl07Ci0gICAgICB2YXI2My54NFszXSA9IChvcmNfdWludDgpIHZhcjU2Lng0WzNdOwotICAgICAgLyogMjE6IG11bGx3ICovCi0gICAgICB2YXI2NC54NFswXSA9ICh2YXI2My54NFswXSAqIHZhcjYyLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjY0Lng0WzFdID0gKHZhcjYzLng0WzFdICogdmFyNjIueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNjQueDRbMl0gPSAodmFyNjMueDRbMl0gKiB2YXI2Mi54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2NC54NFszXSA9ICh2YXI2My54NFszXSAqIHZhcjYyLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDIyOiBhZGR3ICovCi0gICAgICB2YXI2NS54NFswXSA9IHZhcjY0Lng0WzBdICsgdmFyNTIueDRbMF07Ci0gICAgICB2YXI2NS54NFsxXSA9IHZhcjY0Lng0WzFdICsgdmFyNTIueDRbMV07Ci0gICAgICB2YXI2NS54NFsyXSA9IHZhcjY0Lng0WzJdICsgdmFyNTIueDRbMl07Ci0gICAgICB2YXI2NS54NFszXSA9IHZhcjY0Lng0WzNdICsgdmFyNTIueDRbM107Ci0gICAgICAvKiAyMzogYWRkdyAqLwotICAgICAgdmFyNjYueDRbMF0gPSB2YXI2Mi54NFswXSArIHZhcjUwLng0WzBdOwotICAgICAgdmFyNjYueDRbMV0gPSB2YXI2Mi54NFsxXSArIHZhcjUwLng0WzFdOwotICAgICAgdmFyNjYueDRbMl0gPSB2YXI2Mi54NFsyXSArIHZhcjUwLng0WzJdOwotICAgICAgdmFyNjYueDRbM10gPSB2YXI2Mi54NFszXSArIHZhcjUwLng0WzNdOwotICAgICAgLyogMjQ6IGRpdmx1dyAqLwotICAgICAgdmFyNjcueDRbMF0gPQotICAgICAgICAgICgodmFyNjYueDRbMF0gJiAweGZmKSA9PQotICAgICAgICAgIDApID8gMjU1IDogT1JDX0NMQU1QX1VCICgoKG9yY191aW50MTYpIHZhcjY1Lng0WzBdKSAvCi0gICAgICAgICAgKChvcmNfdWludDE2KSB2YXI2Ni54NFswXSAmIDB4ZmYpKTsKLSAgICAgIHZhcjY3Lng0WzFdID0KLSAgICAgICAgICAoKHZhcjY2Lng0WzFdICYgMHhmZikgPT0KLSAgICAgICAgICAwKSA/IDI1NSA6IE9SQ19DTEFNUF9VQiAoKChvcmNfdWludDE2KSB2YXI2NS54NFsxXSkgLwotICAgICAgICAgICgob3JjX3VpbnQxNikgdmFyNjYueDRbMV0gJiAweGZmKSk7Ci0gICAgICB2YXI2Ny54NFsyXSA9Ci0gICAgICAgICAgKCh2YXI2Ni54NFsyXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjUueDRbMl0pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY2Lng0WzJdICYgMHhmZikpOwotICAgICAgdmFyNjcueDRbM10gPQotICAgICAgICAgICgodmFyNjYueDRbM10gJiAweGZmKSA9PQotICAgICAgICAgIDApID8gMjU1IDogT1JDX0NMQU1QX1VCICgoKG9yY191aW50MTYpIHZhcjY1Lng0WzNdKSAvCi0gICAgICAgICAgKChvcmNfdWludDE2KSB2YXI2Ni54NFszXSAmIDB4ZmYpKTsKLSAgICAgIC8qIDI1OiBjb252d2IgKi8KLSAgICAgIHZhcjY4Lng0WzBdID0gdmFyNjcueDRbMF07Ci0gICAgICB2YXI2OC54NFsxXSA9IHZhcjY3Lng0WzFdOwotICAgICAgdmFyNjgueDRbMl0gPSB2YXI2Ny54NFsyXTsKLSAgICAgIHZhcjY4Lng0WzNdID0gdmFyNjcueDRbM107Ci0gICAgICAvKiAyNzogYW5kbCAqLwotICAgICAgdmFyNjkuaSA9IHZhcjY4LmkgJiB2YXI0Mi5pOwotICAgICAgLyogMjg6IGNvbnZ3YiAqLwotICAgICAgdmFyNzAueDRbMF0gPSB2YXI2Ni54NFswXTsKLSAgICAgIHZhcjcwLng0WzFdID0gdmFyNjYueDRbMV07Ci0gICAgICB2YXI3MC54NFsyXSA9IHZhcjY2Lng0WzJdOwotICAgICAgdmFyNzAueDRbM10gPSB2YXI2Ni54NFszXTsKLSAgICAgIC8qIDMwOiBhbmRsICovCi0gICAgICB2YXI3MS5pID0gdmFyNzAuaSAmIHZhcjQzLmk7Ci0gICAgICAvKiAzMTogb3JsICovCi0gICAgICB2YXI3Mi5pID0gdmFyNjkuaSB8IHZhcjcxLmk7Ci0gICAgICAvKiAzMjogc3RvcmVsICovCi0gICAgICBwdHIwW2ldID0gdmFyNzI7Ci0gICAgfQotICB9Ci0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1fYmFja3VwX3ZpZGVvX21peGVyX29yY19vdmVybGF5X2FyZ2IgKE9yY0V4ZWN1dG9yICogT1JDX1JFU1RSSUNUIGV4KQotewotICBpbnQgaTsKLSAgaW50IGo7Ci0gIGludCBuID0gZXgtPm47Ci0gIGludCBtID0gZXgtPnBhcmFtc1tPUkNfVkFSX0ExXTsKLSAgb3JjX3VuaW9uMzIgKk9SQ19SRVNUUklDVCBwdHIwOwotICBjb25zdCBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjQ7Ci0gIG9yY191bmlvbjY0IHZhcjQxOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZCAoX19pMzg2X18pCi0gIHZvbGF0aWxlIG9yY191bmlvbjMyIHZhcjQyOwotI2Vsc2UKLSAgb3JjX3VuaW9uMzIgdmFyNDI7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA9PSAyICYmIGRlZmluZWQgKF9faTM4Nl9fKQotICB2b2xhdGlsZSBvcmNfdW5pb24zMiB2YXI0MzsKLSNlbHNlCi0gIG9yY191bmlvbjMyIHZhcjQzOwotI2VuZGlmCi0gIG9yY191bmlvbjMyIHZhcjQ0OwotICBvcmNfdW5pb24xNiB2YXI0NTsKLSAgb3JjX2ludDggdmFyNDY7Ci0gIG9yY191bmlvbjMyIHZhcjQ3OwotICBvcmNfdW5pb242NCB2YXI0ODsKLSAgb3JjX3VuaW9uNjQgdmFyNDk7Ci0gIG9yY191bmlvbjY0IHZhcjUwOwotICBvcmNfdW5pb242NCB2YXI1MTsKLSAgb3JjX3VuaW9uNjQgdmFyNTI7Ci0gIG9yY191bmlvbjMyIHZhcjUzOwotICBvcmNfdW5pb242NCB2YXI1NDsKLSAgb3JjX3VuaW9uNjQgdmFyNTU7Ci0gIG9yY191bmlvbjMyIHZhcjU2OwotICBvcmNfdW5pb24xNiB2YXI1NzsKLSAgb3JjX2ludDggdmFyNTg7Ci0gIG9yY191bmlvbjMyIHZhcjU5OwotICBvcmNfdW5pb242NCB2YXI2MDsKLSAgb3JjX3VuaW9uNjQgdmFyNjE7Ci0gIG9yY191bmlvbjY0IHZhcjYyOwotICBvcmNfdW5pb242NCB2YXI2MzsKLSAgb3JjX3VuaW9uNjQgdmFyNjQ7Ci0gIG9yY191bmlvbjY0IHZhcjY1OwotICBvcmNfdW5pb242NCB2YXI2NjsKLSAgb3JjX3VuaW9uNjQgdmFyNjc7Ci0gIG9yY191bmlvbjMyIHZhcjY4OwotICBvcmNfdW5pb24zMiB2YXI2OTsKLSAgb3JjX3VuaW9uMzIgdmFyNzA7Ci0gIG9yY191bmlvbjMyIHZhcjcxOwotICBvcmNfdW5pb24zMiB2YXI3MjsKLQotICBmb3IgKGogPSAwOyBqIDwgbTsgaisrKSB7Ci0gICAgcHRyMCA9IE9SQ19QVFJfT0ZGU0VUIChleC0+YXJyYXlzWzBdLCBleC0+cGFyYW1zWzBdICogaik7Ci0gICAgcHRyNCA9IE9SQ19QVFJfT0ZGU0VUIChleC0+YXJyYXlzWzRdLCBleC0+cGFyYW1zWzRdICogaik7Ci0KLSAgICAvKiA1OiBsb2FkcHcgKi8KLSAgICB2YXI0MS54NFswXSA9IGV4LT5wYXJhbXNbMjRdOwotICAgIHZhcjQxLng0WzFdID0gZXgtPnBhcmFtc1syNF07Ci0gICAgdmFyNDEueDRbMl0gPSBleC0+cGFyYW1zWzI0XTsKLSAgICB2YXI0MS54NFszXSA9IGV4LT5wYXJhbXNbMjRdOwotICAgIC8qIDEwOiBsb2FkcGwgKi8KLSAgICB2YXI1My5pID0gKGludCkgMHhmZmZmZmZmZjsgLyogLTEgb3IgMi4xMjJlLTMxNGYgKi8KLSAgICAvKiAyNjogbG9hZHBsICovCi0gICAgdmFyNDIuaSA9IChpbnQpIDB4ZmZmZmZmMDA7IC8qIC0yNTYgb3IgMi4xMjJlLTMxNGYgKi8KLSAgICAvKiAyOTogbG9hZHBsICovCi0gICAgdmFyNDMuaSA9IChpbnQpIDB4MDAwMDAwZmY7IC8qIDI1NSBvciAxLjI1OTg3ZS0zMjFmICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAvKiAwOiBsb2FkbCAqLwotICAgICAgdmFyNDQgPSBwdHI0W2ldOwotICAgICAgLyogMTogY29udmx3ICovCi0gICAgICB2YXI0NS5pID0gdmFyNDQuaTsKLSAgICAgIC8qIDI6IGNvbnZ3YiAqLwotICAgICAgdmFyNDYgPSB2YXI0NS5pOwotICAgICAgLyogMzogc3BsYXRibCAqLwotICAgICAgdmFyNDcuaSA9Ci0gICAgICAgICAgKCgoKG9yY191aW50MzIpIHZhcjQ2KSAmIDB4ZmYpIDw8IDI0KSB8ICgoKChvcmNfdWludDMyKSB2YXI0NikgJiAweGZmKQotICAgICAgICAgIDw8IDE2KSB8ICgoKChvcmNfdWludDMyKSB2YXI0NikgJiAweGZmKSA8PCA4KSB8ICgoKG9yY191aW50MzIpIHZhcjQ2KQotICAgICAgICAgICYgMHhmZik7Ci0gICAgICAvKiA0OiBjb252dWJ3ICovCi0gICAgICB2YXI0OC54NFswXSA9IChvcmNfdWludDgpIHZhcjQ3Lng0WzBdOwotICAgICAgdmFyNDgueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0Ny54NFsxXTsKLSAgICAgIHZhcjQ4Lng0WzJdID0gKG9yY191aW50OCkgdmFyNDcueDRbMl07Ci0gICAgICB2YXI0OC54NFszXSA9IChvcmNfdWludDgpIHZhcjQ3Lng0WzNdOwotICAgICAgLyogNjogbXVsbHcgKi8KLSAgICAgIHZhcjQ5Lng0WzBdID0gKHZhcjQ4Lng0WzBdICogdmFyNDEueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNDkueDRbMV0gPSAodmFyNDgueDRbMV0gKiB2YXI0MS54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI0OS54NFsyXSA9ICh2YXI0OC54NFsyXSAqIHZhcjQxLng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjQ5Lng0WzNdID0gKHZhcjQ4Lng0WzNdICogdmFyNDEueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogNzogc2hydXcgKi8KLSAgICAgIHZhcjUwLng0WzBdID0gKChvcmNfdWludDE2KSB2YXI0OS54NFswXSkgPj4gODsKLSAgICAgIHZhcjUwLng0WzFdID0gKChvcmNfdWludDE2KSB2YXI0OS54NFsxXSkgPj4gODsKLSAgICAgIHZhcjUwLng0WzJdID0gKChvcmNfdWludDE2KSB2YXI0OS54NFsyXSkgPj4gODsKLSAgICAgIHZhcjUwLng0WzNdID0gKChvcmNfdWludDE2KSB2YXI0OS54NFszXSkgPj4gODsKLSAgICAgIC8qIDg6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjUxLng0WzBdID0gKG9yY191aW50OCkgdmFyNDQueDRbMF07Ci0gICAgICB2YXI1MS54NFsxXSA9IChvcmNfdWludDgpIHZhcjQ0Lng0WzFdOwotICAgICAgdmFyNTEueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI0NC54NFsyXTsKLSAgICAgIHZhcjUxLng0WzNdID0gKG9yY191aW50OCkgdmFyNDQueDRbM107Ci0gICAgICAvKiA5OiBtdWxsdyAqLwotICAgICAgdmFyNTIueDRbMF0gPSAodmFyNTEueDRbMF0gKiB2YXI1MC54NFswXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1Mi54NFsxXSA9ICh2YXI1MS54NFsxXSAqIHZhcjUwLng0WzFdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjUyLng0WzJdID0gKHZhcjUxLng0WzJdICogdmFyNTAueDRbMl0pICYgMHhmZmZmOwotICAgICAgdmFyNTIueDRbM10gPSAodmFyNTEueDRbM10gKiB2YXI1MC54NFszXSkgJiAweGZmZmY7Ci0gICAgICAvKiAxMTogY29udnVidyAqLwotICAgICAgdmFyNTQueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI1My54NFswXTsKLSAgICAgIHZhcjU0Lng0WzFdID0gKG9yY191aW50OCkgdmFyNTMueDRbMV07Ci0gICAgICB2YXI1NC54NFsyXSA9IChvcmNfdWludDgpIHZhcjUzLng0WzJdOwotICAgICAgdmFyNTQueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI1My54NFszXTsKLSAgICAgIC8qIDEyOiBzdWJ3ICovCi0gICAgICB2YXI1NS54NFswXSA9IHZhcjU0Lng0WzBdIC0gdmFyNTAueDRbMF07Ci0gICAgICB2YXI1NS54NFsxXSA9IHZhcjU0Lng0WzFdIC0gdmFyNTAueDRbMV07Ci0gICAgICB2YXI1NS54NFsyXSA9IHZhcjU0Lng0WzJdIC0gdmFyNTAueDRbMl07Ci0gICAgICB2YXI1NS54NFszXSA9IHZhcjU0Lng0WzNdIC0gdmFyNTAueDRbM107Ci0gICAgICAvKiAxMzogbG9hZGwgKi8KLSAgICAgIHZhcjU2ID0gcHRyMFtpXTsKLSAgICAgIC8qIDE0OiBjb252bHcgKi8KLSAgICAgIHZhcjU3LmkgPSB2YXI1Ni5pOwotICAgICAgLyogMTU6IGNvbnZ3YiAqLwotICAgICAgdmFyNTggPSB2YXI1Ny5pOwotICAgICAgLyogMTY6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjU5LmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI1OCkgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNTgpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNTgpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI1OCkKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogMTc6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjYwLng0WzBdID0gKG9yY191aW50OCkgdmFyNTkueDRbMF07Ci0gICAgICB2YXI2MC54NFsxXSA9IChvcmNfdWludDgpIHZhcjU5Lng0WzFdOwotICAgICAgdmFyNjAueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI1OS54NFsyXTsKLSAgICAgIHZhcjYwLng0WzNdID0gKG9yY191aW50OCkgdmFyNTkueDRbM107Ci0gICAgICAvKiAxODogbXVsbHcgKi8KLSAgICAgIHZhcjYxLng0WzBdID0gKHZhcjYwLng0WzBdICogdmFyNTUueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNjEueDRbMV0gPSAodmFyNjAueDRbMV0gKiB2YXI1NS54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2MS54NFsyXSA9ICh2YXI2MC54NFsyXSAqIHZhcjU1Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjYxLng0WzNdID0gKHZhcjYwLng0WzNdICogdmFyNTUueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMTk6IGRpdjI1NXcgKi8KLSAgICAgIHZhcjYyLng0WzBdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2MS54NFswXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjYxLng0WzBdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNjIueDRbMV0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjYxLng0WzFdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNjEueDRbMV0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI2Mi54NFsyXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNjEueDRbMl0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI2MS54NFsyXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjYyLng0WzNdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2MS54NFszXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjYxLng0WzNdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgLyogMjA6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjYzLng0WzBdID0gKG9yY191aW50OCkgdmFyNTYueDRbMF07Ci0gICAgICB2YXI2My54NFsxXSA9IChvcmNfdWludDgpIHZhcjU2Lng0WzFdOwotICAgICAgdmFyNjMueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI1Ni54NFsyXTsKLSAgICAgIHZhcjYzLng0WzNdID0gKG9yY191aW50OCkgdmFyNTYueDRbM107Ci0gICAgICAvKiAyMTogbXVsbHcgKi8KLSAgICAgIHZhcjY0Lng0WzBdID0gKHZhcjYzLng0WzBdICogdmFyNjIueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNjQueDRbMV0gPSAodmFyNjMueDRbMV0gKiB2YXI2Mi54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2NC54NFsyXSA9ICh2YXI2My54NFsyXSAqIHZhcjYyLng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjY0Lng0WzNdID0gKHZhcjYzLng0WzNdICogdmFyNjIueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMjI6IGFkZHcgKi8KLSAgICAgIHZhcjY1Lng0WzBdID0gdmFyNjQueDRbMF0gKyB2YXI1Mi54NFswXTsKLSAgICAgIHZhcjY1Lng0WzFdID0gdmFyNjQueDRbMV0gKyB2YXI1Mi54NFsxXTsKLSAgICAgIHZhcjY1Lng0WzJdID0gdmFyNjQueDRbMl0gKyB2YXI1Mi54NFsyXTsKLSAgICAgIHZhcjY1Lng0WzNdID0gdmFyNjQueDRbM10gKyB2YXI1Mi54NFszXTsKLSAgICAgIC8qIDIzOiBhZGR3ICovCi0gICAgICB2YXI2Ni54NFswXSA9IHZhcjYyLng0WzBdICsgdmFyNTAueDRbMF07Ci0gICAgICB2YXI2Ni54NFsxXSA9IHZhcjYyLng0WzFdICsgdmFyNTAueDRbMV07Ci0gICAgICB2YXI2Ni54NFsyXSA9IHZhcjYyLng0WzJdICsgdmFyNTAueDRbMl07Ci0gICAgICB2YXI2Ni54NFszXSA9IHZhcjYyLng0WzNdICsgdmFyNTAueDRbM107Ci0gICAgICAvKiAyNDogZGl2bHV3ICovCi0gICAgICB2YXI2Ny54NFswXSA9Ci0gICAgICAgICAgKCh2YXI2Ni54NFswXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjUueDRbMF0pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY2Lng0WzBdICYgMHhmZikpOwotICAgICAgdmFyNjcueDRbMV0gPQotICAgICAgICAgICgodmFyNjYueDRbMV0gJiAweGZmKSA9PQotICAgICAgICAgIDApID8gMjU1IDogT1JDX0NMQU1QX1VCICgoKG9yY191aW50MTYpIHZhcjY1Lng0WzFdKSAvCi0gICAgICAgICAgKChvcmNfdWludDE2KSB2YXI2Ni54NFsxXSAmIDB4ZmYpKTsKLSAgICAgIHZhcjY3Lng0WzJdID0KLSAgICAgICAgICAoKHZhcjY2Lng0WzJdICYgMHhmZikgPT0KLSAgICAgICAgICAwKSA/IDI1NSA6IE9SQ19DTEFNUF9VQiAoKChvcmNfdWludDE2KSB2YXI2NS54NFsyXSkgLwotICAgICAgICAgICgob3JjX3VpbnQxNikgdmFyNjYueDRbMl0gJiAweGZmKSk7Ci0gICAgICB2YXI2Ny54NFszXSA9Ci0gICAgICAgICAgKCh2YXI2Ni54NFszXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjUueDRbM10pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY2Lng0WzNdICYgMHhmZikpOwotICAgICAgLyogMjU6IGNvbnZ3YiAqLwotICAgICAgdmFyNjgueDRbMF0gPSB2YXI2Ny54NFswXTsKLSAgICAgIHZhcjY4Lng0WzFdID0gdmFyNjcueDRbMV07Ci0gICAgICB2YXI2OC54NFsyXSA9IHZhcjY3Lng0WzJdOwotICAgICAgdmFyNjgueDRbM10gPSB2YXI2Ny54NFszXTsKLSAgICAgIC8qIDI3OiBhbmRsICovCi0gICAgICB2YXI2OS5pID0gdmFyNjguaSAmIHZhcjQyLmk7Ci0gICAgICAvKiAyODogY29udndiICovCi0gICAgICB2YXI3MC54NFswXSA9IHZhcjY2Lng0WzBdOwotICAgICAgdmFyNzAueDRbMV0gPSB2YXI2Ni54NFsxXTsKLSAgICAgIHZhcjcwLng0WzJdID0gdmFyNjYueDRbMl07Ci0gICAgICB2YXI3MC54NFszXSA9IHZhcjY2Lng0WzNdOwotICAgICAgLyogMzA6IGFuZGwgKi8KLSAgICAgIHZhcjcxLmkgPSB2YXI3MC5pICYgdmFyNDMuaTsKLSAgICAgIC8qIDMxOiBvcmwgKi8KLSAgICAgIHZhcjcyLmkgPSB2YXI2OS5pIHwgdmFyNzEuaTsKLSAgICAgIC8qIDMyOiBzdG9yZWwgKi8KLSAgICAgIHB0cjBbaV0gPSB2YXI3MjsKLSAgICB9Ci0gIH0KLQotfQotCi12b2lkCi12aWRlb19taXhlcl9vcmNfb3ZlcmxheV9hcmdiIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgczFfc3RyaWRlLCBpbnQgcDEsIGludCBuLCBpbnQgbSkKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDcsIDksIDI4LCAxMTgsIDEwNSwgMTAwLCAxMDEsIDExMSwgOTUsIDEwOSwgMTA1LCAxMjAsIDEwMSwgMTE0LCA5NSwKLSAgICAgICAgMTExLCAxMTQsIDk5LCA5NSwgMTExLCAxMTgsIDEwMSwgMTE0LCAxMDgsIDk3LCAxMjEsIDk1LCA5NywgMTE0LCAxMDMsCi0gICAgICAgICAgICA5OCwKLSAgICAgICAgMTEsIDQsIDQsIDEyLCA0LCA0LCAxNCwgNCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAxNCwgNCwgMjU1LCAwLAotICAgICAgICAwLCAwLCAxNCwgNCwgMCwgMjU1LCAyNTUsIDI1NSwgMTQsIDIsIDgsIDAsIDAsIDAsIDE2LCAyLAotICAgICAgICAyMCwgNCwgMjAsIDIsIDIwLCAxLCAyMCwgOCwgMjAsIDgsIDIwLCA4LCAyMCwgNCwgMjAsIDgsCi0gICAgICAgIDIwLCA4LCAxMTMsIDMyLCA0LCAxNjMsIDMzLCAzMiwgMTU3LCAzNCwgMzMsIDE1MiwgMzgsIDM0LCAyMSwgMiwKLSAgICAgICAgMTUwLCAzNSwgMzgsIDIxLCAyLCA4OSwgMzUsIDM1LCAyNCwgMjEsIDIsIDk1LCAzNSwgMzUsIDE5LCAyMSwKLSAgICAgICAgMiwgMTUwLCA0MCwgMzIsIDIxLCAyLCA4OSwgNDAsIDQwLCAzNSwgMTE1LCAzOCwgMTYsIDIxLCAyLCAxNTAsCi0gICAgICAgIDM2LCAzOCwgMjEsIDIsIDk4LCAzNiwgMzYsIDM1LCAxMTMsIDMyLCAwLCAxNjMsIDMzLCAzMiwgMTU3LCAzNCwKLSAgICAgICAgMzMsIDE1MiwgMzgsIDM0LCAyMSwgMiwgMTUwLCAzNywgMzgsIDIxLCAyLCA4OSwgMzcsIDM3LCAzNiwgMjEsCi0gICAgICAgIDIsIDgwLCAzNywgMzcsIDIxLCAyLCAxNTAsIDM5LCAzMiwgMjEsIDIsIDg5LCAzOSwgMzksIDM3LCAyMSwKLSAgICAgICAgMiwgNzAsIDM5LCAzOSwgNDAsIDIxLCAyLCA3MCwgMzcsIDM3LCAzNSwgMjEsIDIsIDgxLCAzOSwgMzksCi0gICAgICAgIDM3LCAyMSwgMiwgMTU3LCAzMiwgMzksIDEwNiwgMzIsIDMyLCAxOCwgMjEsIDIsIDE1NywgMzgsIDM3LCAxMDYsCi0gICAgICAgIDM4LCAzOCwgMTcsIDEyMywgMzIsIDMyLCAzOCwgMTI4LCAwLCAzMiwgMiwgMCwKLSAgICAgIH07Ci0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3X2Zyb21fc3RhdGljX2J5dGVjb2RlIChiYyk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLCBfYmFja3VwX3ZpZGVvX21peGVyX29yY19vdmVybGF5X2FyZ2IpOwotI2Vsc2UKLSAgICAgIHAgPSBvcmNfcHJvZ3JhbV9uZXcgKCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfMmQgKHApOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X25hbWUgKHAsICJ2aWRlb19taXhlcl9vcmNfb3ZlcmxheV9hcmdiIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9zZXRfYmFja3VwX2Z1bmN0aW9uIChwLCBfYmFja3VwX3ZpZGVvX21peGVyX29yY19vdmVybGF5X2FyZ2IpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2Rlc3RpbmF0aW9uIChwLCA0LCAiZDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9zb3VyY2UgKHAsIDQsICJzMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCA0LCAweGZmZmZmZmZmLCAiYzEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9jb25zdGFudCAocCwgNCwgMHgwMDAwMDBmZiwgImMyIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfY29uc3RhbnQgKHAsIDQsIDB4ZmZmZmZmMDAsICJjMyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCAyLCAweDAwMDAwMDA4LCAiYzQiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9wYXJhbWV0ZXIgKHAsIDIsICJwMSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAyLCAidDIiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDEsICJ0MyIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQ0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDUiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0NiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgNCwgInQ3Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDgiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0OSIpOwotCi0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImxvYWRsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9TMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udmx3IiwgMCwgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udndiIiwgMCwgT1JDX1ZBUl9UMywgT1JDX1ZBUl9UMiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAic3BsYXRibCIsIDAsIE9SQ19WQVJfVDcsIE9SQ19WQVJfVDMsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ1YnciLCAyLCBPUkNfVkFSX1Q0LCBPUkNfVkFSX1Q3LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJtdWxsdyIsIDIsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDQsIE9SQ19WQVJfUDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNocnV3IiwgMiwgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9UNCwgT1JDX1ZBUl9DNCwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDksIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGx3IiwgMiwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UNCwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibG9hZHBsIiwgMCwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9DMSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDUsIE9SQ19WQVJfVDcsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInN1YnciLCAyLCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1Q0LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJsb2FkbCIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZsdyIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ3YiIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDIsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNwbGF0YmwiLCAwLCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1QzLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsbHciLCAyLCBPUkNfVkFSX1Q2LCBPUkNfVkFSX1Q2LCBPUkNfVkFSX1Q1LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJkaXYyNTV3IiwgMiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGx3IiwgMiwgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9UNiwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYWRkdyIsIDIsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDksCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFkZHciLCAyLCBPUkNfVkFSX1Q2LCBPUkNfVkFSX1Q2LCBPUkNfVkFSX1Q0LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJkaXZsdXciLCAyLCBPUkNfVkFSX1Q4LCBPUkNfVkFSX1Q4LCBPUkNfVkFSX1Q2LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252d2IiLCAyLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1Q4LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhbmRsIiwgMCwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9DMywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udndiIiwgMiwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYW5kbCIsIDAsIE9SQ19WQVJfVDcsIE9SQ19WQVJfVDcsIE9SQ19WQVJfQzIsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm9ybCIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDcsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInN0b3JlbCIsIDAsIE9SQ19WQVJfRDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0jZW5kaWYKLQotICAgICAgb3JjX3Byb2dyYW1fY29tcGlsZSAocCk7Ci0gICAgICBjID0gb3JjX3Byb2dyYW1fdGFrZV9jb2RlIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX2ZyZWUgKHApOwotICAgIH0KLSAgICBwX2luaXRlZCA9IFRSVUU7Ci0gICAgb3JjX29uY2VfbXV0ZXhfdW5sb2NrICgpOwotICB9Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9BMl0gPSBjOwotICBleC0+cHJvZ3JhbSA9IDA7Ci0KLSAgZXgtPm4gPSBuOwotICBPUkNfRVhFQ1VUT1JfTSAoZXgpID0gbTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX0QxXSA9IGQxOwotICBleC0+cGFyYW1zW09SQ19WQVJfRDFdID0gZDFfc3RyaWRlOwotICBleC0+YXJyYXlzW09SQ19WQVJfUzFdID0gKHZvaWQgKikgczE7Ci0gIGV4LT5wYXJhbXNbT1JDX1ZBUl9TMV0gPSBzMV9zdHJpZGU7Ci0gIGV4LT5wYXJhbXNbT1JDX1ZBUl9QMV0gPSBwMTsKLQotICBmdW5jID0gYy0+ZXhlYzsKLSAgZnVuYyAoZXgpOwotfQotI2VuZGlmCi0KLQotLyogdmlkZW9fbWl4ZXJfb3JjX292ZXJsYXlfYmdyYSAqLwotI2lmZGVmIERJU0FCTEVfT1JDCi12b2lkCi12aWRlb19taXhlcl9vcmNfb3ZlcmxheV9iZ3JhIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgczFfc3RyaWRlLCBpbnQgcDEsIGludCBuLCBpbnQgbSkKLXsKLSAgaW50IGk7Ci0gIGludCBqOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyNDI7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkIChfX2kzODZfXykKLSAgdm9sYXRpbGUgb3JjX3VuaW9uMzIgdmFyNDM7Ci0jZWxzZQotICBvcmNfdW5pb24zMiB2YXI0MzsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZCAoX19pMzg2X18pCi0gIHZvbGF0aWxlIG9yY191bmlvbjMyIHZhcjQ0OwotI2Vsc2UKLSAgb3JjX3VuaW9uMzIgdmFyNDQ7Ci0jZW5kaWYKLSAgb3JjX3VuaW9uMzIgdmFyNDU7Ci0gIG9yY191bmlvbjMyIHZhcjQ2OwotICBvcmNfdW5pb24xNiB2YXI0NzsKLSAgb3JjX2ludDggdmFyNDg7Ci0gIG9yY191bmlvbjMyIHZhcjQ5OwotICBvcmNfdW5pb242NCB2YXI1MDsKLSAgb3JjX3VuaW9uNjQgdmFyNTE7Ci0gIG9yY191bmlvbjY0IHZhcjUyOwotICBvcmNfdW5pb242NCB2YXI1MzsKLSAgb3JjX3VuaW9uNjQgdmFyNTQ7Ci0gIG9yY191bmlvbjMyIHZhcjU1OwotICBvcmNfdW5pb242NCB2YXI1NjsKLSAgb3JjX3VuaW9uNjQgdmFyNTc7Ci0gIG9yY191bmlvbjMyIHZhcjU4OwotICBvcmNfdW5pb24zMiB2YXI1OTsKLSAgb3JjX3VuaW9uMTYgdmFyNjA7Ci0gIG9yY19pbnQ4IHZhcjYxOwotICBvcmNfdW5pb24zMiB2YXI2MjsKLSAgb3JjX3VuaW9uNjQgdmFyNjM7Ci0gIG9yY191bmlvbjY0IHZhcjY0OwotICBvcmNfdW5pb242NCB2YXI2NTsKLSAgb3JjX3VuaW9uNjQgdmFyNjY7Ci0gIG9yY191bmlvbjY0IHZhcjY3OwotICBvcmNfdW5pb242NCB2YXI2ODsKLSAgb3JjX3VuaW9uNjQgdmFyNjk7Ci0gIG9yY191bmlvbjY0IHZhcjcwOwotICBvcmNfdW5pb24zMiB2YXI3MTsKLSAgb3JjX3VuaW9uMzIgdmFyNzI7Ci0gIG9yY191bmlvbjMyIHZhcjczOwotICBvcmNfdW5pb24zMiB2YXI3NDsKLSAgb3JjX3VuaW9uMzIgdmFyNzU7Ci0KLSAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgIHB0cjAgPSBPUkNfUFRSX09GRlNFVCAoZDEsIGQxX3N0cmlkZSAqIGopOwotICAgIHB0cjQgPSBPUkNfUFRSX09GRlNFVCAoczEsIHMxX3N0cmlkZSAqIGopOwotCi0gICAgLyogNjogbG9hZHB3ICovCi0gICAgdmFyNDIueDRbMF0gPSBwMTsKLSAgICB2YXI0Mi54NFsxXSA9IHAxOwotICAgIHZhcjQyLng0WzJdID0gcDE7Ci0gICAgdmFyNDIueDRbM10gPSBwMTsKLSAgICAvKiAxMTogbG9hZHBsICovCi0gICAgdmFyNTUuaSA9IChpbnQpIDB4ZmZmZmZmZmY7IC8qIC0xIG9yIDIuMTIyZS0zMTRmICovCi0gICAgLyogMjg6IGxvYWRwbCAqLwotICAgIHZhcjQzLmkgPSAoaW50KSAweDAwZmZmZmZmOyAvKiAxNjc3NzIxNSBvciA4LjI4OTA1ZS0zMTdmICovCi0gICAgLyogMzE6IGxvYWRwbCAqLwotICAgIHZhcjQ0LmkgPSAoaW50KSAweGZmMDAwMDAwOyAvKiAtMTY3NzcyMTYgb3IgMi4xMTM3MWUtMzE0ZiAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgLyogMDogbG9hZGwgKi8KLSAgICAgIHZhcjQ1ID0gcHRyNFtpXTsKLSAgICAgIC8qIDE6IHNocnVsICovCi0gICAgICB2YXI0Ni5pID0gKChvcmNfdWludDMyKSB2YXI0NS5pKSA+PiAyNDsKLSAgICAgIC8qIDI6IGNvbnZsdyAqLwotICAgICAgdmFyNDcuaSA9IHZhcjQ2Lmk7Ci0gICAgICAvKiAzOiBjb252d2IgKi8KLSAgICAgIHZhcjQ4ID0gdmFyNDcuaTsKLSAgICAgIC8qIDQ6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjQ5LmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI0OCkgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNDgpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNDgpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI0OCkKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogNTogY29udnVidyAqLwotICAgICAgdmFyNTAueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFswXTsKLSAgICAgIHZhcjUwLng0WzFdID0gKG9yY191aW50OCkgdmFyNDkueDRbMV07Ci0gICAgICB2YXI1MC54NFsyXSA9IChvcmNfdWludDgpIHZhcjQ5Lng0WzJdOwotICAgICAgdmFyNTAueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFszXTsKLSAgICAgIC8qIDc6IG11bGx3ICovCi0gICAgICB2YXI1MS54NFswXSA9ICh2YXI1MC54NFswXSAqIHZhcjQyLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjUxLng0WzFdID0gKHZhcjUwLng0WzFdICogdmFyNDIueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNTEueDRbMl0gPSAodmFyNTAueDRbMl0gKiB2YXI0Mi54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1MS54NFszXSA9ICh2YXI1MC54NFszXSAqIHZhcjQyLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDg6IHNocnV3ICovCi0gICAgICB2YXI1Mi54NFswXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbMF0pID4+IDg7Ci0gICAgICB2YXI1Mi54NFsxXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbMV0pID4+IDg7Ci0gICAgICB2YXI1Mi54NFsyXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbMl0pID4+IDg7Ci0gICAgICB2YXI1Mi54NFszXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbM10pID4+IDg7Ci0gICAgICAvKiA5OiBjb252dWJ3ICovCi0gICAgICB2YXI1My54NFswXSA9IChvcmNfdWludDgpIHZhcjQ1Lng0WzBdOwotICAgICAgdmFyNTMueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0NS54NFsxXTsKLSAgICAgIHZhcjUzLng0WzJdID0gKG9yY191aW50OCkgdmFyNDUueDRbMl07Ci0gICAgICB2YXI1My54NFszXSA9IChvcmNfdWludDgpIHZhcjQ1Lng0WzNdOwotICAgICAgLyogMTA6IG11bGx3ICovCi0gICAgICB2YXI1NC54NFswXSA9ICh2YXI1My54NFswXSAqIHZhcjUyLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjU0Lng0WzFdID0gKHZhcjUzLng0WzFdICogdmFyNTIueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNTQueDRbMl0gPSAodmFyNTMueDRbMl0gKiB2YXI1Mi54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1NC54NFszXSA9ICh2YXI1My54NFszXSAqIHZhcjUyLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDEyOiBjb252dWJ3ICovCi0gICAgICB2YXI1Ni54NFswXSA9IChvcmNfdWludDgpIHZhcjU1Lng0WzBdOwotICAgICAgdmFyNTYueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI1NS54NFsxXTsKLSAgICAgIHZhcjU2Lng0WzJdID0gKG9yY191aW50OCkgdmFyNTUueDRbMl07Ci0gICAgICB2YXI1Ni54NFszXSA9IChvcmNfdWludDgpIHZhcjU1Lng0WzNdOwotICAgICAgLyogMTM6IHN1YncgKi8KLSAgICAgIHZhcjU3Lng0WzBdID0gdmFyNTYueDRbMF0gLSB2YXI1Mi54NFswXTsKLSAgICAgIHZhcjU3Lng0WzFdID0gdmFyNTYueDRbMV0gLSB2YXI1Mi54NFsxXTsKLSAgICAgIHZhcjU3Lng0WzJdID0gdmFyNTYueDRbMl0gLSB2YXI1Mi54NFsyXTsKLSAgICAgIHZhcjU3Lng0WzNdID0gdmFyNTYueDRbM10gLSB2YXI1Mi54NFszXTsKLSAgICAgIC8qIDE0OiBsb2FkbCAqLwotICAgICAgdmFyNTggPSBwdHIwW2ldOwotICAgICAgLyogMTU6IHNocnVsICovCi0gICAgICB2YXI1OS5pID0gKChvcmNfdWludDMyKSB2YXI1OC5pKSA+PiAyNDsKLSAgICAgIC8qIDE2OiBjb252bHcgKi8KLSAgICAgIHZhcjYwLmkgPSB2YXI1OS5pOwotICAgICAgLyogMTc6IGNvbnZ3YiAqLwotICAgICAgdmFyNjEgPSB2YXI2MC5pOwotICAgICAgLyogMTg6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjYyLmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI2MSkgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNjEpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNjEpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI2MSkKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogMTk6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjYzLng0WzBdID0gKG9yY191aW50OCkgdmFyNjIueDRbMF07Ci0gICAgICB2YXI2My54NFsxXSA9IChvcmNfdWludDgpIHZhcjYyLng0WzFdOwotICAgICAgdmFyNjMueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI2Mi54NFsyXTsKLSAgICAgIHZhcjYzLng0WzNdID0gKG9yY191aW50OCkgdmFyNjIueDRbM107Ci0gICAgICAvKiAyMDogbXVsbHcgKi8KLSAgICAgIHZhcjY0Lng0WzBdID0gKHZhcjYzLng0WzBdICogdmFyNTcueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNjQueDRbMV0gPSAodmFyNjMueDRbMV0gKiB2YXI1Ny54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2NC54NFsyXSA9ICh2YXI2My54NFsyXSAqIHZhcjU3Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjY0Lng0WzNdID0gKHZhcjYzLng0WzNdICogdmFyNTcueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMjE6IGRpdjI1NXcgKi8KLSAgICAgIHZhcjY1Lng0WzBdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2NC54NFswXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjY0Lng0WzBdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNjUueDRbMV0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjY0Lng0WzFdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNjQueDRbMV0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI2NS54NFsyXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNjQueDRbMl0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI2NC54NFsyXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjY1Lng0WzNdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2NC54NFszXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjY0Lng0WzNdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgLyogMjI6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjY2Lng0WzBdID0gKG9yY191aW50OCkgdmFyNTgueDRbMF07Ci0gICAgICB2YXI2Ni54NFsxXSA9IChvcmNfdWludDgpIHZhcjU4Lng0WzFdOwotICAgICAgdmFyNjYueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI1OC54NFsyXTsKLSAgICAgIHZhcjY2Lng0WzNdID0gKG9yY191aW50OCkgdmFyNTgueDRbM107Ci0gICAgICAvKiAyMzogbXVsbHcgKi8KLSAgICAgIHZhcjY3Lng0WzBdID0gKHZhcjY2Lng0WzBdICogdmFyNjUueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNjcueDRbMV0gPSAodmFyNjYueDRbMV0gKiB2YXI2NS54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2Ny54NFsyXSA9ICh2YXI2Ni54NFsyXSAqIHZhcjY1Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjY3Lng0WzNdID0gKHZhcjY2Lng0WzNdICogdmFyNjUueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMjQ6IGFkZHcgKi8KLSAgICAgIHZhcjY4Lng0WzBdID0gdmFyNjcueDRbMF0gKyB2YXI1NC54NFswXTsKLSAgICAgIHZhcjY4Lng0WzFdID0gdmFyNjcueDRbMV0gKyB2YXI1NC54NFsxXTsKLSAgICAgIHZhcjY4Lng0WzJdID0gdmFyNjcueDRbMl0gKyB2YXI1NC54NFsyXTsKLSAgICAgIHZhcjY4Lng0WzNdID0gdmFyNjcueDRbM10gKyB2YXI1NC54NFszXTsKLSAgICAgIC8qIDI1OiBhZGR3ICovCi0gICAgICB2YXI2OS54NFswXSA9IHZhcjY1Lng0WzBdICsgdmFyNTIueDRbMF07Ci0gICAgICB2YXI2OS54NFsxXSA9IHZhcjY1Lng0WzFdICsgdmFyNTIueDRbMV07Ci0gICAgICB2YXI2OS54NFsyXSA9IHZhcjY1Lng0WzJdICsgdmFyNTIueDRbMl07Ci0gICAgICB2YXI2OS54NFszXSA9IHZhcjY1Lng0WzNdICsgdmFyNTIueDRbM107Ci0gICAgICAvKiAyNjogZGl2bHV3ICovCi0gICAgICB2YXI3MC54NFswXSA9Ci0gICAgICAgICAgKCh2YXI2OS54NFswXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjgueDRbMF0pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY5Lng0WzBdICYgMHhmZikpOwotICAgICAgdmFyNzAueDRbMV0gPQotICAgICAgICAgICgodmFyNjkueDRbMV0gJiAweGZmKSA9PQotICAgICAgICAgIDApID8gMjU1IDogT1JDX0NMQU1QX1VCICgoKG9yY191aW50MTYpIHZhcjY4Lng0WzFdKSAvCi0gICAgICAgICAgKChvcmNfdWludDE2KSB2YXI2OS54NFsxXSAmIDB4ZmYpKTsKLSAgICAgIHZhcjcwLng0WzJdID0KLSAgICAgICAgICAoKHZhcjY5Lng0WzJdICYgMHhmZikgPT0KLSAgICAgICAgICAwKSA/IDI1NSA6IE9SQ19DTEFNUF9VQiAoKChvcmNfdWludDE2KSB2YXI2OC54NFsyXSkgLwotICAgICAgICAgICgob3JjX3VpbnQxNikgdmFyNjkueDRbMl0gJiAweGZmKSk7Ci0gICAgICB2YXI3MC54NFszXSA9Ci0gICAgICAgICAgKCh2YXI2OS54NFszXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjgueDRbM10pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY5Lng0WzNdICYgMHhmZikpOwotICAgICAgLyogMjc6IGNvbnZ3YiAqLwotICAgICAgdmFyNzEueDRbMF0gPSB2YXI3MC54NFswXTsKLSAgICAgIHZhcjcxLng0WzFdID0gdmFyNzAueDRbMV07Ci0gICAgICB2YXI3MS54NFsyXSA9IHZhcjcwLng0WzJdOwotICAgICAgdmFyNzEueDRbM10gPSB2YXI3MC54NFszXTsKLSAgICAgIC8qIDI5OiBhbmRsICovCi0gICAgICB2YXI3Mi5pID0gdmFyNzEuaSAmIHZhcjQzLmk7Ci0gICAgICAvKiAzMDogY29udndiICovCi0gICAgICB2YXI3My54NFswXSA9IHZhcjY5Lng0WzBdOwotICAgICAgdmFyNzMueDRbMV0gPSB2YXI2OS54NFsxXTsKLSAgICAgIHZhcjczLng0WzJdID0gdmFyNjkueDRbMl07Ci0gICAgICB2YXI3My54NFszXSA9IHZhcjY5Lng0WzNdOwotICAgICAgLyogMzI6IGFuZGwgKi8KLSAgICAgIHZhcjc0LmkgPSB2YXI3My5pICYgdmFyNDQuaTsKLSAgICAgIC8qIDMzOiBvcmwgKi8KLSAgICAgIHZhcjc1LmkgPSB2YXI3Mi5pIHwgdmFyNzQuaTsKLSAgICAgIC8qIDM0OiBzdG9yZWwgKi8KLSAgICAgIHB0cjBbaV0gPSB2YXI3NTsKLSAgICB9Ci0gIH0KLQotfQotCi0jZWxzZQotc3RhdGljIHZvaWQKLV9iYWNrdXBfdmlkZW9fbWl4ZXJfb3JjX292ZXJsYXlfYmdyYSAoT3JjRXhlY3V0b3IgKiBPUkNfUkVTVFJJQ1QgZXgpCi17Ci0gIGludCBpOwotICBpbnQgajsKLSAgaW50IG4gPSBleC0+bjsKLSAgaW50IG0gPSBleC0+cGFyYW1zW09SQ19WQVJfQTFdOwotICBvcmNfdW5pb24zMiAqT1JDX1JFU1RSSUNUIHB0cjA7Ci0gIGNvbnN0IG9yY191bmlvbjMyICpPUkNfUkVTVFJJQ1QgcHRyNDsKLSAgb3JjX3VuaW9uNjQgdmFyNDI7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMiAmJiBkZWZpbmVkIChfX2kzODZfXykKLSAgdm9sYXRpbGUgb3JjX3VuaW9uMzIgdmFyNDM7Ci0jZWxzZQotICBvcmNfdW5pb24zMiB2YXI0MzsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIgJiYgZGVmaW5lZCAoX19pMzg2X18pCi0gIHZvbGF0aWxlIG9yY191bmlvbjMyIHZhcjQ0OwotI2Vsc2UKLSAgb3JjX3VuaW9uMzIgdmFyNDQ7Ci0jZW5kaWYKLSAgb3JjX3VuaW9uMzIgdmFyNDU7Ci0gIG9yY191bmlvbjMyIHZhcjQ2OwotICBvcmNfdW5pb24xNiB2YXI0NzsKLSAgb3JjX2ludDggdmFyNDg7Ci0gIG9yY191bmlvbjMyIHZhcjQ5OwotICBvcmNfdW5pb242NCB2YXI1MDsKLSAgb3JjX3VuaW9uNjQgdmFyNTE7Ci0gIG9yY191bmlvbjY0IHZhcjUyOwotICBvcmNfdW5pb242NCB2YXI1MzsKLSAgb3JjX3VuaW9uNjQgdmFyNTQ7Ci0gIG9yY191bmlvbjMyIHZhcjU1OwotICBvcmNfdW5pb242NCB2YXI1NjsKLSAgb3JjX3VuaW9uNjQgdmFyNTc7Ci0gIG9yY191bmlvbjMyIHZhcjU4OwotICBvcmNfdW5pb24zMiB2YXI1OTsKLSAgb3JjX3VuaW9uMTYgdmFyNjA7Ci0gIG9yY19pbnQ4IHZhcjYxOwotICBvcmNfdW5pb24zMiB2YXI2MjsKLSAgb3JjX3VuaW9uNjQgdmFyNjM7Ci0gIG9yY191bmlvbjY0IHZhcjY0OwotICBvcmNfdW5pb242NCB2YXI2NTsKLSAgb3JjX3VuaW9uNjQgdmFyNjY7Ci0gIG9yY191bmlvbjY0IHZhcjY3OwotICBvcmNfdW5pb242NCB2YXI2ODsKLSAgb3JjX3VuaW9uNjQgdmFyNjk7Ci0gIG9yY191bmlvbjY0IHZhcjcwOwotICBvcmNfdW5pb24zMiB2YXI3MTsKLSAgb3JjX3VuaW9uMzIgdmFyNzI7Ci0gIG9yY191bmlvbjMyIHZhcjczOwotICBvcmNfdW5pb24zMiB2YXI3NDsKLSAgb3JjX3VuaW9uMzIgdmFyNzU7Ci0KLSAgZm9yIChqID0gMDsgaiA8IG07IGorKykgewotICAgIHB0cjAgPSBPUkNfUFRSX09GRlNFVCAoZXgtPmFycmF5c1swXSwgZXgtPnBhcmFtc1swXSAqIGopOwotICAgIHB0cjQgPSBPUkNfUFRSX09GRlNFVCAoZXgtPmFycmF5c1s0XSwgZXgtPnBhcmFtc1s0XSAqIGopOwotCi0gICAgLyogNjogbG9hZHB3ICovCi0gICAgdmFyNDIueDRbMF0gPSBleC0+cGFyYW1zWzI0XTsKLSAgICB2YXI0Mi54NFsxXSA9IGV4LT5wYXJhbXNbMjRdOwotICAgIHZhcjQyLng0WzJdID0gZXgtPnBhcmFtc1syNF07Ci0gICAgdmFyNDIueDRbM10gPSBleC0+cGFyYW1zWzI0XTsKLSAgICAvKiAxMTogbG9hZHBsICovCi0gICAgdmFyNTUuaSA9IChpbnQpIDB4ZmZmZmZmZmY7IC8qIC0xIG9yIDIuMTIyZS0zMTRmICovCi0gICAgLyogMjg6IGxvYWRwbCAqLwotICAgIHZhcjQzLmkgPSAoaW50KSAweDAwZmZmZmZmOyAvKiAxNjc3NzIxNSBvciA4LjI4OTA1ZS0zMTdmICovCi0gICAgLyogMzE6IGxvYWRwbCAqLwotICAgIHZhcjQ0LmkgPSAoaW50KSAweGZmMDAwMDAwOyAvKiAtMTY3NzcyMTYgb3IgMi4xMTM3MWUtMzE0ZiAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgLyogMDogbG9hZGwgKi8KLSAgICAgIHZhcjQ1ID0gcHRyNFtpXTsKLSAgICAgIC8qIDE6IHNocnVsICovCi0gICAgICB2YXI0Ni5pID0gKChvcmNfdWludDMyKSB2YXI0NS5pKSA+PiAyNDsKLSAgICAgIC8qIDI6IGNvbnZsdyAqLwotICAgICAgdmFyNDcuaSA9IHZhcjQ2Lmk7Ci0gICAgICAvKiAzOiBjb252d2IgKi8KLSAgICAgIHZhcjQ4ID0gdmFyNDcuaTsKLSAgICAgIC8qIDQ6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjQ5LmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI0OCkgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNDgpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNDgpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI0OCkKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogNTogY29udnVidyAqLwotICAgICAgdmFyNTAueDRbMF0gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFswXTsKLSAgICAgIHZhcjUwLng0WzFdID0gKG9yY191aW50OCkgdmFyNDkueDRbMV07Ci0gICAgICB2YXI1MC54NFsyXSA9IChvcmNfdWludDgpIHZhcjQ5Lng0WzJdOwotICAgICAgdmFyNTAueDRbM10gPSAob3JjX3VpbnQ4KSB2YXI0OS54NFszXTsKLSAgICAgIC8qIDc6IG11bGx3ICovCi0gICAgICB2YXI1MS54NFswXSA9ICh2YXI1MC54NFswXSAqIHZhcjQyLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjUxLng0WzFdID0gKHZhcjUwLng0WzFdICogdmFyNDIueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNTEueDRbMl0gPSAodmFyNTAueDRbMl0gKiB2YXI0Mi54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1MS54NFszXSA9ICh2YXI1MC54NFszXSAqIHZhcjQyLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDg6IHNocnV3ICovCi0gICAgICB2YXI1Mi54NFswXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbMF0pID4+IDg7Ci0gICAgICB2YXI1Mi54NFsxXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbMV0pID4+IDg7Ci0gICAgICB2YXI1Mi54NFsyXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbMl0pID4+IDg7Ci0gICAgICB2YXI1Mi54NFszXSA9ICgob3JjX3VpbnQxNikgdmFyNTEueDRbM10pID4+IDg7Ci0gICAgICAvKiA5OiBjb252dWJ3ICovCi0gICAgICB2YXI1My54NFswXSA9IChvcmNfdWludDgpIHZhcjQ1Lng0WzBdOwotICAgICAgdmFyNTMueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI0NS54NFsxXTsKLSAgICAgIHZhcjUzLng0WzJdID0gKG9yY191aW50OCkgdmFyNDUueDRbMl07Ci0gICAgICB2YXI1My54NFszXSA9IChvcmNfdWludDgpIHZhcjQ1Lng0WzNdOwotICAgICAgLyogMTA6IG11bGx3ICovCi0gICAgICB2YXI1NC54NFswXSA9ICh2YXI1My54NFswXSAqIHZhcjUyLng0WzBdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjU0Lng0WzFdID0gKHZhcjUzLng0WzFdICogdmFyNTIueDRbMV0pICYgMHhmZmZmOwotICAgICAgdmFyNTQueDRbMl0gPSAodmFyNTMueDRbMl0gKiB2YXI1Mi54NFsyXSkgJiAweGZmZmY7Ci0gICAgICB2YXI1NC54NFszXSA9ICh2YXI1My54NFszXSAqIHZhcjUyLng0WzNdKSAmIDB4ZmZmZjsKLSAgICAgIC8qIDEyOiBjb252dWJ3ICovCi0gICAgICB2YXI1Ni54NFswXSA9IChvcmNfdWludDgpIHZhcjU1Lng0WzBdOwotICAgICAgdmFyNTYueDRbMV0gPSAob3JjX3VpbnQ4KSB2YXI1NS54NFsxXTsKLSAgICAgIHZhcjU2Lng0WzJdID0gKG9yY191aW50OCkgdmFyNTUueDRbMl07Ci0gICAgICB2YXI1Ni54NFszXSA9IChvcmNfdWludDgpIHZhcjU1Lng0WzNdOwotICAgICAgLyogMTM6IHN1YncgKi8KLSAgICAgIHZhcjU3Lng0WzBdID0gdmFyNTYueDRbMF0gLSB2YXI1Mi54NFswXTsKLSAgICAgIHZhcjU3Lng0WzFdID0gdmFyNTYueDRbMV0gLSB2YXI1Mi54NFsxXTsKLSAgICAgIHZhcjU3Lng0WzJdID0gdmFyNTYueDRbMl0gLSB2YXI1Mi54NFsyXTsKLSAgICAgIHZhcjU3Lng0WzNdID0gdmFyNTYueDRbM10gLSB2YXI1Mi54NFszXTsKLSAgICAgIC8qIDE0OiBsb2FkbCAqLwotICAgICAgdmFyNTggPSBwdHIwW2ldOwotICAgICAgLyogMTU6IHNocnVsICovCi0gICAgICB2YXI1OS5pID0gKChvcmNfdWludDMyKSB2YXI1OC5pKSA+PiAyNDsKLSAgICAgIC8qIDE2OiBjb252bHcgKi8KLSAgICAgIHZhcjYwLmkgPSB2YXI1OS5pOwotICAgICAgLyogMTc6IGNvbnZ3YiAqLwotICAgICAgdmFyNjEgPSB2YXI2MC5pOwotICAgICAgLyogMTg6IHNwbGF0YmwgKi8KLSAgICAgIHZhcjYyLmkgPQotICAgICAgICAgICgoKChvcmNfdWludDMyKSB2YXI2MSkgJiAweGZmKSA8PCAyNCkgfCAoKCgob3JjX3VpbnQzMikgdmFyNjEpICYgMHhmZikKLSAgICAgICAgICA8PCAxNikgfCAoKCgob3JjX3VpbnQzMikgdmFyNjEpICYgMHhmZikgPDwgOCkgfCAoKChvcmNfdWludDMyKSB2YXI2MSkKLSAgICAgICAgICAmIDB4ZmYpOwotICAgICAgLyogMTk6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjYzLng0WzBdID0gKG9yY191aW50OCkgdmFyNjIueDRbMF07Ci0gICAgICB2YXI2My54NFsxXSA9IChvcmNfdWludDgpIHZhcjYyLng0WzFdOwotICAgICAgdmFyNjMueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI2Mi54NFsyXTsKLSAgICAgIHZhcjYzLng0WzNdID0gKG9yY191aW50OCkgdmFyNjIueDRbM107Ci0gICAgICAvKiAyMDogbXVsbHcgKi8KLSAgICAgIHZhcjY0Lng0WzBdID0gKHZhcjYzLng0WzBdICogdmFyNTcueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNjQueDRbMV0gPSAodmFyNjMueDRbMV0gKiB2YXI1Ny54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2NC54NFsyXSA9ICh2YXI2My54NFsyXSAqIHZhcjU3Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjY0Lng0WzNdID0gKHZhcjYzLng0WzNdICogdmFyNTcueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMjE6IGRpdjI1NXcgKi8KLSAgICAgIHZhcjY1Lng0WzBdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2NC54NFswXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjY0Lng0WzBdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgdmFyNjUueDRbMV0gPQotICAgICAgICAgICgob3JjX3VpbnQxNikgKCgob3JjX3VpbnQxNikgKHZhcjY0Lng0WzFdICsgMTI4KSkgKwotICAgICAgICAgICAgICAoKChvcmNfdWludDE2KSAodmFyNjQueDRbMV0gKyAxMjgpKSA+PiA4KSkpID4+IDg7Ci0gICAgICB2YXI2NS54NFsyXSA9Ci0gICAgICAgICAgKChvcmNfdWludDE2KSAoKChvcmNfdWludDE2KSAodmFyNjQueDRbMl0gKyAxMjgpKSArCi0gICAgICAgICAgICAgICgoKG9yY191aW50MTYpICh2YXI2NC54NFsyXSArIDEyOCkpID4+IDgpKSkgPj4gODsKLSAgICAgIHZhcjY1Lng0WzNdID0KLSAgICAgICAgICAoKG9yY191aW50MTYpICgoKG9yY191aW50MTYpICh2YXI2NC54NFszXSArIDEyOCkpICsKLSAgICAgICAgICAgICAgKCgob3JjX3VpbnQxNikgKHZhcjY0Lng0WzNdICsgMTI4KSkgPj4gOCkpKSA+PiA4OwotICAgICAgLyogMjI6IGNvbnZ1YncgKi8KLSAgICAgIHZhcjY2Lng0WzBdID0gKG9yY191aW50OCkgdmFyNTgueDRbMF07Ci0gICAgICB2YXI2Ni54NFsxXSA9IChvcmNfdWludDgpIHZhcjU4Lng0WzFdOwotICAgICAgdmFyNjYueDRbMl0gPSAob3JjX3VpbnQ4KSB2YXI1OC54NFsyXTsKLSAgICAgIHZhcjY2Lng0WzNdID0gKG9yY191aW50OCkgdmFyNTgueDRbM107Ci0gICAgICAvKiAyMzogbXVsbHcgKi8KLSAgICAgIHZhcjY3Lng0WzBdID0gKHZhcjY2Lng0WzBdICogdmFyNjUueDRbMF0pICYgMHhmZmZmOwotICAgICAgdmFyNjcueDRbMV0gPSAodmFyNjYueDRbMV0gKiB2YXI2NS54NFsxXSkgJiAweGZmZmY7Ci0gICAgICB2YXI2Ny54NFsyXSA9ICh2YXI2Ni54NFsyXSAqIHZhcjY1Lng0WzJdKSAmIDB4ZmZmZjsKLSAgICAgIHZhcjY3Lng0WzNdID0gKHZhcjY2Lng0WzNdICogdmFyNjUueDRbM10pICYgMHhmZmZmOwotICAgICAgLyogMjQ6IGFkZHcgKi8KLSAgICAgIHZhcjY4Lng0WzBdID0gdmFyNjcueDRbMF0gKyB2YXI1NC54NFswXTsKLSAgICAgIHZhcjY4Lng0WzFdID0gdmFyNjcueDRbMV0gKyB2YXI1NC54NFsxXTsKLSAgICAgIHZhcjY4Lng0WzJdID0gdmFyNjcueDRbMl0gKyB2YXI1NC54NFsyXTsKLSAgICAgIHZhcjY4Lng0WzNdID0gdmFyNjcueDRbM10gKyB2YXI1NC54NFszXTsKLSAgICAgIC8qIDI1OiBhZGR3ICovCi0gICAgICB2YXI2OS54NFswXSA9IHZhcjY1Lng0WzBdICsgdmFyNTIueDRbMF07Ci0gICAgICB2YXI2OS54NFsxXSA9IHZhcjY1Lng0WzFdICsgdmFyNTIueDRbMV07Ci0gICAgICB2YXI2OS54NFsyXSA9IHZhcjY1Lng0WzJdICsgdmFyNTIueDRbMl07Ci0gICAgICB2YXI2OS54NFszXSA9IHZhcjY1Lng0WzNdICsgdmFyNTIueDRbM107Ci0gICAgICAvKiAyNjogZGl2bHV3ICovCi0gICAgICB2YXI3MC54NFswXSA9Ci0gICAgICAgICAgKCh2YXI2OS54NFswXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjgueDRbMF0pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY5Lng0WzBdICYgMHhmZikpOwotICAgICAgdmFyNzAueDRbMV0gPQotICAgICAgICAgICgodmFyNjkueDRbMV0gJiAweGZmKSA9PQotICAgICAgICAgIDApID8gMjU1IDogT1JDX0NMQU1QX1VCICgoKG9yY191aW50MTYpIHZhcjY4Lng0WzFdKSAvCi0gICAgICAgICAgKChvcmNfdWludDE2KSB2YXI2OS54NFsxXSAmIDB4ZmYpKTsKLSAgICAgIHZhcjcwLng0WzJdID0KLSAgICAgICAgICAoKHZhcjY5Lng0WzJdICYgMHhmZikgPT0KLSAgICAgICAgICAwKSA/IDI1NSA6IE9SQ19DTEFNUF9VQiAoKChvcmNfdWludDE2KSB2YXI2OC54NFsyXSkgLwotICAgICAgICAgICgob3JjX3VpbnQxNikgdmFyNjkueDRbMl0gJiAweGZmKSk7Ci0gICAgICB2YXI3MC54NFszXSA9Ci0gICAgICAgICAgKCh2YXI2OS54NFszXSAmIDB4ZmYpID09Ci0gICAgICAgICAgMCkgPyAyNTUgOiBPUkNfQ0xBTVBfVUIgKCgob3JjX3VpbnQxNikgdmFyNjgueDRbM10pIC8KLSAgICAgICAgICAoKG9yY191aW50MTYpIHZhcjY5Lng0WzNdICYgMHhmZikpOwotICAgICAgLyogMjc6IGNvbnZ3YiAqLwotICAgICAgdmFyNzEueDRbMF0gPSB2YXI3MC54NFswXTsKLSAgICAgIHZhcjcxLng0WzFdID0gdmFyNzAueDRbMV07Ci0gICAgICB2YXI3MS54NFsyXSA9IHZhcjcwLng0WzJdOwotICAgICAgdmFyNzEueDRbM10gPSB2YXI3MC54NFszXTsKLSAgICAgIC8qIDI5OiBhbmRsICovCi0gICAgICB2YXI3Mi5pID0gdmFyNzEuaSAmIHZhcjQzLmk7Ci0gICAgICAvKiAzMDogY29udndiICovCi0gICAgICB2YXI3My54NFswXSA9IHZhcjY5Lng0WzBdOwotICAgICAgdmFyNzMueDRbMV0gPSB2YXI2OS54NFsxXTsKLSAgICAgIHZhcjczLng0WzJdID0gdmFyNjkueDRbMl07Ci0gICAgICB2YXI3My54NFszXSA9IHZhcjY5Lng0WzNdOwotICAgICAgLyogMzI6IGFuZGwgKi8KLSAgICAgIHZhcjc0LmkgPSB2YXI3My5pICYgdmFyNDQuaTsKLSAgICAgIC8qIDMzOiBvcmwgKi8KLSAgICAgIHZhcjc1LmkgPSB2YXI3Mi5pIHwgdmFyNzQuaTsKLSAgICAgIC8qIDM0OiBzdG9yZWwgKi8KLSAgICAgIHB0cjBbaV0gPSB2YXI3NTsKLSAgICB9Ci0gIH0KLQotfQotCi12b2lkCi12aWRlb19taXhlcl9vcmNfb3ZlcmxheV9iZ3JhIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsCi0gICAgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgczFfc3RyaWRlLCBpbnQgcDEsIGludCBuLCBpbnQgbSkKLXsKLSAgT3JjRXhlY3V0b3IgX2V4LCAqZXggPSAmX2V4OwotICBzdGF0aWMgdm9sYXRpbGUgaW50IHBfaW5pdGVkID0gMDsKLSAgc3RhdGljIE9yY0NvZGUgKmMgPSAwOwotICB2b2lkICgqZnVuYykgKE9yY0V4ZWN1dG9yICopOwotCi0gIGlmICghcF9pbml0ZWQpIHsKLSAgICBvcmNfb25jZV9tdXRleF9sb2NrICgpOwotICAgIGlmICghcF9pbml0ZWQpIHsKLSAgICAgIE9yY1Byb2dyYW0gKnA7Ci0KLSNpZiAxCi0gICAgICBzdGF0aWMgY29uc3Qgb3JjX3VpbnQ4IGJjW10gPSB7Ci0gICAgICAgIDEsIDcsIDksIDI4LCAxMTgsIDEwNSwgMTAwLCAxMDEsIDExMSwgOTUsIDEwOSwgMTA1LCAxMjAsIDEwMSwgMTE0LCA5NSwKLSAgICAgICAgMTExLCAxMTQsIDk5LCA5NSwgMTExLCAxMTgsIDEwMSwgMTE0LCAxMDgsIDk3LCAxMjEsIDk1LCA5OCwgMTAzLCAxMTQsCi0gICAgICAgICAgICA5NywKLSAgICAgICAgMTEsIDQsIDQsIDEyLCA0LCA0LCAxNCwgNCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAxNCwgNCwgMCwgMCwKLSAgICAgICAgMCwgMjU1LCAxNCwgNCwgMjU1LCAyNTUsIDI1NSwgMCwgMTQsIDQsIDI0LCAwLCAwLCAwLCAxNCwgMiwKLSAgICAgICAgOCwgMCwgMCwgMCwgMTYsIDIsIDIwLCA0LCAyMCwgNCwgMjAsIDIsIDIwLCAxLCAyMCwgOCwKLSAgICAgICAgMjAsIDgsIDIwLCA4LCAyMCwgNCwgMjAsIDgsIDIwLCA4LCAxMTMsIDMyLCA0LCAxMjYsIDMzLCAzMiwKLSAgICAgICAgMTksIDE2MywgMzQsIDMzLCAxNTcsIDM1LCAzNCwgMTUyLCAzOSwgMzUsIDIxLCAyLCAxNTAsIDM2LCAzOSwgMjEsCi0gICAgICAgIDIsIDg5LCAzNiwgMzYsIDI0LCAyMSwgMiwgOTUsIDM2LCAzNiwgMjAsIDIxLCAyLCAxNTAsIDQxLCAzMiwKLSAgICAgICAgMjEsIDIsIDg5LCA0MSwgNDEsIDM2LCAxMTUsIDM5LCAxNiwgMjEsIDIsIDE1MCwgMzcsIDM5LCAyMSwgMiwKLSAgICAgICAgOTgsIDM3LCAzNywgMzYsIDExMywgMzIsIDAsIDEyNiwgMzMsIDMyLCAxOSwgMTYzLCAzNCwgMzMsIDE1NywgMzUsCi0gICAgICAgIDM0LCAxNTIsIDM5LCAzNSwgMjEsIDIsIDE1MCwgMzgsIDM5LCAyMSwgMiwgODksIDM4LCAzOCwgMzcsIDIxLAotICAgICAgICAyLCA4MCwgMzgsIDM4LCAyMSwgMiwgMTUwLCA0MCwgMzIsIDIxLCAyLCA4OSwgNDAsIDQwLCAzOCwgMjEsCi0gICAgICAgIDIsIDcwLCA0MCwgNDAsIDQxLCAyMSwgMiwgNzAsIDM4LCAzOCwgMzYsIDIxLCAyLCA4MSwgNDAsIDQwLAotICAgICAgICAzOCwgMjEsIDIsIDE1NywgMzIsIDQwLCAxMDYsIDMyLCAzMiwgMTgsIDIxLCAyLCAxNTcsIDM5LCAzOCwgMTA2LAotICAgICAgICAzOSwgMzksIDE3LCAxMjMsIDMyLCAzMiwgMzksIDEyOCwgMCwgMzIsIDIsIDAsCi0gICAgICB9OwotICAgICAgcCA9IG9yY19wcm9ncmFtX25ld19mcm9tX3N0YXRpY19ieXRlY29kZSAoYmMpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfb3ZlcmxheV9iZ3JhKTsKLSNlbHNlCi0gICAgICBwID0gb3JjX3Byb2dyYW1fbmV3ICgpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0XzJkIChwKTsKLSAgICAgIG9yY19wcm9ncmFtX3NldF9uYW1lIChwLCAidmlkZW9fbWl4ZXJfb3JjX292ZXJsYXlfYmdyYSIpOwotICAgICAgb3JjX3Byb2dyYW1fc2V0X2JhY2t1cF9mdW5jdGlvbiAocCwgX2JhY2t1cF92aWRlb19taXhlcl9vcmNfb3ZlcmxheV9iZ3JhKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9kZXN0aW5hdGlvbiAocCwgNCwgImQxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfc291cmNlIChwLCA0LCAiczEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9jb25zdGFudCAocCwgNCwgMHhmZmZmZmZmZiwgImMxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfY29uc3RhbnQgKHAsIDQsIDB4ZmYwMDAwMDAsICJjMiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX2NvbnN0YW50IChwLCA0LCAweDAwZmZmZmZmLCAiYzMiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF9jb25zdGFudCAocCwgNCwgMHgwMDAwMDAxOCwgImM0Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfY29uc3RhbnQgKHAsIDIsIDB4MDAwMDAwMDgsICJjNSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3BhcmFtZXRlciAocCwgMiwgInAxIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA0LCAidDEiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0MiIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgMiwgInQzIik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCAxLCAidDQiKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDgsICJ0NSIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQ2Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDciKTsKLSAgICAgIG9yY19wcm9ncmFtX2FkZF90ZW1wb3JhcnkgKHAsIDQsICJ0OCIpOwotICAgICAgb3JjX3Byb2dyYW1fYWRkX3RlbXBvcmFyeSAocCwgOCwgInQ5Iik7Ci0gICAgICBvcmNfcHJvZ3JhbV9hZGRfdGVtcG9yYXJ5IChwLCA4LCAidDEwIik7Ci0KLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibG9hZGwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1MxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzaHJ1bCIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDEsIE9SQ19WQVJfQzQsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZsdyIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDIsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ3YiIsIDAsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDMsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNwbGF0YmwiLCAwLCBPUkNfVkFSX1Q4LCBPUkNfVkFSX1Q0LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMiwgT1JDX1ZBUl9UNSwgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsbHciLCAyLCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1Q1LCBPUkNfVkFSX1AxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzaHJ1dyIsIDIsIE9SQ19WQVJfVDUsIE9SQ19WQVJfVDUsIE9SQ19WQVJfQzUsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ1YnciLCAyLCBPUkNfVkFSX1QxMCwgT1JDX1ZBUl9UMSwKLSAgICAgICAgICBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsbHciLCAyLCBPUkNfVkFSX1QxMCwgT1JDX1ZBUl9UMTAsIE9SQ19WQVJfVDUsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImxvYWRwbCIsIDAsIE9SQ19WQVJfVDgsIE9SQ19WQVJfQzEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ1YnciLCAyLCBPUkNfVkFSX1Q2LCBPUkNfVkFSX1Q4LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzdWJ3IiwgMiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNiwgT1JDX1ZBUl9UNSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibG9hZGwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzaHJ1bCIsIDAsIE9SQ19WQVJfVDIsIE9SQ19WQVJfVDEsIE9SQ19WQVJfQzQsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZsdyIsIDAsIE9SQ19WQVJfVDMsIE9SQ19WQVJfVDIsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ3YiIsIDAsIE9SQ19WQVJfVDQsIE9SQ19WQVJfVDMsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgInNwbGF0YmwiLCAwLCBPUkNfVkFSX1Q4LCBPUkNfVkFSX1Q0LCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJjb252dWJ3IiwgMiwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UOCwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAibXVsbHciLCAyLCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q3LCBPUkNfVkFSX1Q2LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJkaXYyNTV3IiwgMiwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UNywgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udnVidyIsIDIsIE9SQ19WQVJfVDksIE9SQ19WQVJfVDEsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgIm11bGx3IiwgMiwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UNywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYWRkdyIsIDIsIE9SQ19WQVJfVDksIE9SQ19WQVJfVDksIE9SQ19WQVJfVDEwLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJhZGR3IiwgMiwgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UNywgT1JDX1ZBUl9UNSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiZGl2bHV3IiwgMiwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9UNywKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiY29udndiIiwgMiwgT1JDX1ZBUl9UMSwgT1JDX1ZBUl9UOSwgT1JDX1ZBUl9EMSwKLSAgICAgICAgICBPUkNfVkFSX0QxKTsKLSAgICAgIG9yY19wcm9ncmFtX2FwcGVuZF8yIChwLCAiYW5kbCIsIDAsIE9SQ19WQVJfVDEsIE9SQ19WQVJfVDEsIE9SQ19WQVJfQzMsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImNvbnZ3YiIsIDIsIE9SQ19WQVJfVDgsIE9SQ19WQVJfVDcsIE9SQ19WQVJfRDEsCi0gICAgICAgICAgT1JDX1ZBUl9EMSk7Ci0gICAgICBvcmNfcHJvZ3JhbV9hcHBlbmRfMiAocCwgImFuZGwiLCAwLCBPUkNfVkFSX1Q4LCBPUkNfVkFSX1Q4LCBPUkNfVkFSX0MyLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJvcmwiLCAwLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX1Q4LAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotICAgICAgb3JjX3Byb2dyYW1fYXBwZW5kXzIgKHAsICJzdG9yZWwiLCAwLCBPUkNfVkFSX0QxLCBPUkNfVkFSX1QxLCBPUkNfVkFSX0QxLAotICAgICAgICAgIE9SQ19WQVJfRDEpOwotI2VuZGlmCi0KLSAgICAgIG9yY19wcm9ncmFtX2NvbXBpbGUgKHApOwotICAgICAgYyA9IG9yY19wcm9ncmFtX3Rha2VfY29kZSAocCk7Ci0gICAgICBvcmNfcHJvZ3JhbV9mcmVlIChwKTsKLSAgICB9Ci0gICAgcF9pbml0ZWQgPSBUUlVFOwotICAgIG9yY19vbmNlX211dGV4X3VubG9jayAoKTsKLSAgfQotICBleC0+YXJyYXlzW09SQ19WQVJfQTJdID0gYzsKLSAgZXgtPnByb2dyYW0gPSAwOwotCi0gIGV4LT5uID0gbjsKLSAgT1JDX0VYRUNVVE9SX00gKGV4KSA9IG07Ci0gIGV4LT5hcnJheXNbT1JDX1ZBUl9EMV0gPSBkMTsKLSAgZXgtPnBhcmFtc1tPUkNfVkFSX0QxXSA9IGQxX3N0cmlkZTsKLSAgZXgtPmFycmF5c1tPUkNfVkFSX1MxXSA9ICh2b2lkICopIHMxOwotICBleC0+cGFyYW1zW09SQ19WQVJfUzFdID0gczFfc3RyaWRlOwotICBleC0+cGFyYW1zW09SQ19WQVJfUDFdID0gcDE7Ci0KLSAgZnVuYyA9IGMtPmV4ZWM7Ci0gIGZ1bmMgKGV4KTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy1kaXN0LmggYi9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBjMDcwZi4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLWRpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLQotLyogYXV0b2dlbmVyYXRlZCBmcm9tIHZpZGVvbWl4ZXJvcmMub3JjICovCi0KLSNpZm5kZWYgX1ZJREVPTUlYRVJPUkNfSF8KLSNkZWZpbmUgX1ZJREVPTUlYRVJPUkNfSF8KLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0KLQotI2lmbmRlZiBfT1JDX0lOVEVHRVJfVFlQRURFRlNfCi0jZGVmaW5lIF9PUkNfSU5URUdFUl9UWVBFREVGU18KLSNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAotI2luY2x1ZGUgPHN0ZGludC5oPgotdHlwZWRlZiBpbnQ4X3Qgb3JjX2ludDg7Ci10eXBlZGVmIGludDE2X3Qgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQzMl90IG9yY19pbnQzMjsKLXR5cGVkZWYgaW50NjRfdCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVpbnQ4X3Qgb3JjX3VpbnQ4OwotdHlwZWRlZiB1aW50MTZfdCBvcmNfdWludDE2OwotdHlwZWRlZiB1aW50MzJfdCBvcmNfdWludDMyOwotdHlwZWRlZiB1aW50NjRfdCBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgVUlOVDY0X0MoeCkKLSNlbGlmIGRlZmluZWQoX01TQ19WRVIpCi10eXBlZGVmIHNpZ25lZCBfX2ludDggb3JjX2ludDg7Ci10eXBlZGVmIHNpZ25lZCBfX2ludDE2IG9yY19pbnQxNjsKLXR5cGVkZWYgc2lnbmVkIF9faW50MzIgb3JjX2ludDMyOwotdHlwZWRlZiBzaWduZWQgX19pbnQ2NCBvcmNfaW50NjQ7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50OCBvcmNfdWludDg7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiBvcmNfdWludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IG9yY191aW50NjQ7Ci0jZGVmaW5lIE9SQ19VSU5UNjRfQyh4KSAoeCMjVWk2NCkKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZWxzZQotI2luY2x1ZGUgPGxpbWl0cy5oPgotdHlwZWRlZiBzaWduZWQgY2hhciBvcmNfaW50ODsKLXR5cGVkZWYgc2hvcnQgb3JjX2ludDE2OwotdHlwZWRlZiBpbnQgb3JjX2ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG9yY191aW50ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgb3JjX3VpbnQxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IG9yY191aW50MzI7Ci0jaWYgSU5UX01BWCA9PSBMT05HX01BWAotdHlwZWRlZiBsb25nIGxvbmcgb3JjX2ludDY0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgb3JjX3VpbnQ2NDsKLSNkZWZpbmUgT1JDX1VJTlQ2NF9DKHgpICh4IyNVTEwpCi0jZWxzZQotdHlwZWRlZiBsb25nIG9yY19pbnQ2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvcmNfdWludDY0OwotI2RlZmluZSBPUkNfVUlOVDY0X0MoeCkgKHgjI1VMKQotI2VuZGlmCi0jZW5kaWYKLXR5cGVkZWYgdW5pb24geyBvcmNfaW50MTYgaTsgb3JjX2ludDggeDJbMl07IH0gb3JjX3VuaW9uMTY7Ci10eXBlZGVmIHVuaW9uIHsgb3JjX2ludDMyIGk7IGZsb2F0IGY7IG9yY19pbnQxNiB4MlsyXTsgb3JjX2ludDggeDRbNF07IH0gb3JjX3VuaW9uMzI7Ci10eXBlZGVmIHVuaW9uIHsgb3JjX2ludDY0IGk7IGRvdWJsZSBmOyBvcmNfaW50MzIgeDJbMl07IGZsb2F0IHgyZlsyXTsgb3JjX2ludDE2IHg0WzRdOyB9IG9yY191bmlvbjY0OwotI2VuZGlmCi0jaWZuZGVmIE9SQ19SRVNUUklDVAotI2lmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jZGVmaW5lIE9SQ19SRVNUUklDVCByZXN0cmljdAotI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gNAotI2RlZmluZSBPUkNfUkVTVFJJQ1QgX19yZXN0cmljdF9fCi0jZWxzZQotI2RlZmluZSBPUkNfUkVTVFJJQ1QKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgT1JDX0lOVEVSTkFMCi0jaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiAoX19TVU5QUk9fQyA+PSAweDU5MCkKLSNkZWZpbmUgT1JDX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKLSNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgKF9fU1VOUFJPX0MgPj0gMHg1NTApCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2hpZGRlbgotI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCi0jZGVmaW5lIE9SQ19JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCi0jZWxzZQotI2RlZmluZSBPUkNfSU5URVJOQUwKLSNlbmRpZgotI2VuZGlmCi0KLXZvaWQgdmlkZW9fbWl4ZXJfb3JjX3NwbGF0X3UzMiAoZ3VpbnQzMiAqIE9SQ19SRVNUUklDVCBkMSwgaW50IHAxLCBpbnQgbik7Ci12b2lkIHZpZGVvX21peGVyX29yY19tZW1jcHlfdTMyIChndWludDMyICogT1JDX1JFU1RSSUNUIGQxLCBjb25zdCBndWludDMyICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgbik7Ci12b2lkIHZpZGVvX21peGVyX29yY19ibGVuZF91OCAoZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIGQxLCBpbnQgZDFfc3RyaWRlLCBjb25zdCBndWludDggKiBPUkNfUkVTVFJJQ1QgczEsIGludCBzMV9zdHJpZGUsIGludCBwMSwgaW50IG4sIGludCBtKTsKLXZvaWQgdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2FyZ2IgKGd1aW50OCAqIE9SQ19SRVNUUklDVCBkMSwgaW50IGQxX3N0cmlkZSwgY29uc3QgZ3VpbnQ4ICogT1JDX1JFU1RSSUNUIHMxLCBpbnQgczFfc3RyaWRlLCBpbnQgcDEsIGludCBuLCBpbnQgbSk7Ci12b2lkIHZpZGVvX21peGVyX29yY19ibGVuZF9iZ3JhIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IHMxX3N0cmlkZSwgaW50IHAxLCBpbnQgbiwgaW50IG0pOwotdm9pZCB2aWRlb19taXhlcl9vcmNfb3ZlcmxheV9hcmdiIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IHMxX3N0cmlkZSwgaW50IHAxLCBpbnQgbiwgaW50IG0pOwotdm9pZCB2aWRlb19taXhlcl9vcmNfb3ZlcmxheV9iZ3JhIChndWludDggKiBPUkNfUkVTVFJJQ1QgZDEsIGludCBkMV9zdHJpZGUsIGNvbnN0IGd1aW50OCAqIE9SQ19SRVNUUklDVCBzMSwgaW50IHMxX3N0cmlkZSwgaW50IHAxLCBpbnQgbiwgaW50IG0pOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy5vcmMgYi9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLm9yYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhODIzNy4uMDAwMDAwMAotLS0gYS9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLm9yYworKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0uZnVuY3Rpb24gdmlkZW9fbWl4ZXJfb3JjX3NwbGF0X3UzMgotLmRlc3QgNCBkMSBndWludDMyCi0ucGFyYW0gNCBwMSBndWludDMyCi0KLWNvcHlsIGQxLCBwMQotCi0uZnVuY3Rpb24gdmlkZW9fbWl4ZXJfb3JjX21lbWNweV91MzIKLS5kZXN0IDQgZDEgZ3VpbnQzMgotLnNvdXJjZSA0IHMxIGd1aW50MzIKLQotY29weWwgZDEsIHMxCi0KLS5mdW5jdGlvbiB2aWRlb19taXhlcl9vcmNfYmxlbmRfdTgKLS5mbGFncyAyZAotLmRlc3QgMSBkMSBndWludDgKLS5zb3VyY2UgMSBzMSBndWludDgKLS5wYXJhbSAyIHAxCi0udGVtcCAyIHQxCi0udGVtcCAyIHQyCi0uY29uc3QgMSBjMSA4IAotCi1jb252dWJ3IHQxLCBkMQotY29udnVidyB0MiwgczEKLXN1YncgdDIsIHQyLCB0MQotbXVsbHcgdDIsIHQyLCBwMQotc2hsdyB0MSwgdDEsIGMxCi1hZGR3IHQyLCB0MSwgdDIKLXNocnV3IHQyLCB0MiwgYzEKLWNvbnZzdXN3YiBkMSwgdDIKLQotCi0uZnVuY3Rpb24gdmlkZW9fbWl4ZXJfb3JjX2JsZW5kX2FyZ2IKLS5mbGFncyAyZAotLmRlc3QgNCBkIGd1aW50OAotLnNvdXJjZSA0IHMgZ3VpbnQ4Ci0ucGFyYW0gMiBhbHBoYQotLnRlbXAgNCB0Ci0udGVtcCAyIHR3Ci0udGVtcCAxIHRiCi0udGVtcCA0IGEKLS50ZW1wIDggZF93aWRlCi0udGVtcCA4IHNfd2lkZQotLnRlbXAgOCBhX3dpZGUKLS5jb25zdCA0IGFfYWxwaGEgMHgwMDAwMDBmZgotCi1sb2FkbCB0LCBzCi1jb252bHcgdHcsIHQKLWNvbnZ3YiB0YiwgdHcKLXNwbGF0YmwgYSwgdGIKLXg0IGNvbnZ1YncgYV93aWRlLCBhCi14NCBtdWxsdyBhX3dpZGUsIGFfd2lkZSwgYWxwaGEKLXg0IHNocnV3IGFfd2lkZSwgYV93aWRlLCA4Ci14NCBjb252dWJ3IHNfd2lkZSwgdAotbG9hZGwgdCwgZAoteDQgY29udnVidyBkX3dpZGUsIHQKLXg0IHN1Yncgc193aWRlLCBzX3dpZGUsIGRfd2lkZQoteDQgbXVsbHcgc193aWRlLCBzX3dpZGUsIGFfd2lkZQoteDQgZGl2MjU1dyBzX3dpZGUsIHNfd2lkZQoteDQgYWRkdyBkX3dpZGUsIGRfd2lkZSwgc193aWRlCi14NCBjb252d2IgdCwgZF93aWRlCi1vcmwgdCwgdCwgYV9hbHBoYQotc3RvcmVsIGQsIHQKLQotLmZ1bmN0aW9uIHZpZGVvX21peGVyX29yY19ibGVuZF9iZ3JhCi0uZmxhZ3MgMmQKLS5kZXN0IDQgZCBndWludDgKLS5zb3VyY2UgNCBzIGd1aW50OAotLnBhcmFtIDIgYWxwaGEKLS50ZW1wIDQgdAotLnRlbXAgNCB0MgotLnRlbXAgMiB0dwotLnRlbXAgMSB0YgotLnRlbXAgNCBhCi0udGVtcCA4IGRfd2lkZQotLnRlbXAgOCBzX3dpZGUKLS50ZW1wIDggYV93aWRlCi0uY29uc3QgNCBhX2FscGhhIDB4ZmYwMDAwMDAKLQotbG9hZGwgdCwgcwotc2hydWwgdDIsIHQsIDI0Ci1jb252bHcgdHcsIHQyCi1jb252d2IgdGIsIHR3Ci1zcGxhdGJsIGEsIHRiCi14NCBjb252dWJ3IGFfd2lkZSwgYQoteDQgbXVsbHcgYV93aWRlLCBhX3dpZGUsIGFscGhhCi14NCBzaHJ1dyBhX3dpZGUsIGFfd2lkZSwgOAoteDQgY29udnVidyBzX3dpZGUsIHQKLWxvYWRsIHQsIGQKLXg0IGNvbnZ1YncgZF93aWRlLCB0Ci14NCBzdWJ3IHNfd2lkZSwgc193aWRlLCBkX3dpZGUKLXg0IG11bGx3IHNfd2lkZSwgc193aWRlLCBhX3dpZGUKLXg0IGRpdjI1NXcgc193aWRlLCBzX3dpZGUKLXg0IGFkZHcgZF93aWRlLCBkX3dpZGUsIHNfd2lkZQoteDQgY29udndiIHQsIGRfd2lkZQotb3JsIHQsIHQsIGFfYWxwaGEKLXN0b3JlbCBkLCB0Ci0KLQotLmZ1bmN0aW9uIHZpZGVvX21peGVyX29yY19vdmVybGF5X2FyZ2IKLS5mbGFncyAyZAotLmRlc3QgNCBkIGd1aW50OAotLnNvdXJjZSA0IHMgZ3VpbnQ4Ci0ucGFyYW0gMiBhbHBoYQotLnRlbXAgNCB0Ci0udGVtcCAyIHR3Ci0udGVtcCAxIHRiCi0udGVtcCA4IGFscGhhX3MKLS50ZW1wIDggYWxwaGFfc19pbnYKLS50ZW1wIDggYWxwaGFfZAotLnRlbXAgNCBhCi0udGVtcCA4IGRfd2lkZQotLnRlbXAgOCBzX3dpZGUKLS5jb25zdCA0IHhmcyAweGZmZmZmZmZmCi0uY29uc3QgNCBhX2FscGhhIDB4MDAwMDAwZmYKLS5jb25zdCA0IGFfYWxwaGFfaW52IDB4ZmZmZmZmMDAKLQotIyBjYWxjIHNvdXJjZSBhbHBoYSBhcyBhbHBoYV9zID0gYWxwaGFfcyAqIGFscGhhIC8gMjU2Ci1sb2FkbCB0LCBzCi1jb252bHcgdHcsIHQKLWNvbnZ3YiB0YiwgdHcKLXNwbGF0YmwgYSwgdGIKLXg0IGNvbnZ1YncgYWxwaGFfcywgYQoteDQgbXVsbHcgYWxwaGFfcywgYWxwaGFfcywgYWxwaGEKLXg0IHNocnV3IGFscGhhX3MsIGFscGhhX3MsIDgKLXg0IGNvbnZ1Yncgc193aWRlLCB0Ci14NCBtdWxsdyBzX3dpZGUsIHNfd2lkZSwgYWxwaGFfcwotCi0jIGNhbGMgZGVzdGluYXRpb24gYWxwaGEgYXMgYWxwaGFfZCA9ICgyNTUtYWxwaGFfcykgKiBhbHBoYV9kIC8gMjU1Ci1sb2FkcGwgYSwgeGZzCi14NCBjb252dWJ3IGFscGhhX3NfaW52LCBhCi14NCBzdWJ3IGFscGhhX3NfaW52LCBhbHBoYV9zX2ludiwgYWxwaGFfcwotbG9hZGwgdCwgZAotY29udmx3IHR3LCB0Ci1jb252d2IgdGIsIHR3Ci1zcGxhdGJsIGEsIHRiCi14NCBjb252dWJ3IGFscGhhX2QsIGEKLXg0IG11bGx3IGFscGhhX2QsIGFscGhhX2QsIGFscGhhX3NfaW52Ci14NCBkaXYyNTV3IGFscGhhX2QsIGFscGhhX2QKLXg0IGNvbnZ1YncgZF93aWRlLCB0Ci14NCBtdWxsdyBkX3dpZGUsIGRfd2lkZSwgYWxwaGFfZAotCi0jIGNhbGMgZmluYWwgcGl4ZWwgYXMgcGl4X2QgPSBwaXhfcyphbHBoYV9zICsgcGl4X2QqYWxwaGFfZCooMjU1LWFscGhhX3MpLzI1NQoteDQgYWRkdyBkX3dpZGUsIGRfd2lkZSwgc193aWRlCi0KLSMgY2FsYyB0aGUgZmluYWwgZGVzdGluYXRpb24gYWxwaGFfZCA9IGFscGhhX3MgKyBhbHBoYV9kICogKDI1NS1hbHBoYV9zKS8yNTUKLXg0IGFkZHcgYWxwaGFfZCwgYWxwaGFfZCwgYWxwaGFfcwotCi0jIG5vdyBub3JtYWxpemUgdGhlIHBpeF9kIGJ5IHRoZSBmaW5hbCBhbHBoYSB0byBtYWtlIGl0IGFzc29jaWF0aXZlCi14NCBkaXZsdXcsIGRfd2lkZSwgZF93aWRlLCBhbHBoYV9kCi0KLSMgcGFjayB0aGUgbmV3IGFscGhhIGludG8gdGhlIGNvcnJlY3Qgc3BvdAoteDQgY29udndiIHQsIGRfd2lkZQotYW5kbCB0LCB0LCBhX2FscGhhX2ludgoteDQgY29udndiIGEsIGFscGhhX2QKLWFuZGwgYSwgYSwgYV9hbHBoYQotb3JsICB0LCB0LCBhCi1zdG9yZWwgZCwgdAotCi0uZnVuY3Rpb24gdmlkZW9fbWl4ZXJfb3JjX292ZXJsYXlfYmdyYQotLmZsYWdzIDJkCi0uZGVzdCA0IGQgZ3VpbnQ4Ci0uc291cmNlIDQgcyBndWludDgKLS5wYXJhbSAyIGFscGhhCi0udGVtcCA0IHQKLS50ZW1wIDQgdDIKLS50ZW1wIDIgdHcKLS50ZW1wIDEgdGIKLS50ZW1wIDggYWxwaGFfcwotLnRlbXAgOCBhbHBoYV9zX2ludgotLnRlbXAgOCBhbHBoYV9kCi0udGVtcCA0IGEKLS50ZW1wIDggZF93aWRlCi0udGVtcCA4IHNfd2lkZQotLmNvbnN0IDQgeGZzIDB4ZmZmZmZmZmYKLS5jb25zdCA0IGFfYWxwaGEgMHhmZjAwMDAwMAotLmNvbnN0IDQgYV9hbHBoYV9pbnYgMHgwMGZmZmZmZgotCi0jIGNhbGMgc291cmNlIGFscGhhIGFzIGFscGhhX3MgPSBhbHBoYV9zICogYWxwaGEgLyAyNTYKLWxvYWRsIHQsIHMKLXNocnVsIHQyLCB0LCAyNAotY29udmx3IHR3LCB0MgotY29udndiIHRiLCB0dwotc3BsYXRibCBhLCB0YgoteDQgY29udnVidyBhbHBoYV9zLCBhCi14NCBtdWxsdyBhbHBoYV9zLCBhbHBoYV9zLCBhbHBoYQoteDQgc2hydXcgYWxwaGFfcywgYWxwaGFfcywgOAoteDQgY29udnVidyBzX3dpZGUsIHQKLXg0IG11bGx3IHNfd2lkZSwgc193aWRlLCBhbHBoYV9zCi0KLSMgY2FsYyBkZXN0aW5hdGlvbiBhbHBoYSBhcyBhbHBoYV9kID0gKDI1NS1hbHBoYV9zKSAqIGFscGhhX2QgLyAyNTUKLWxvYWRwbCBhLCB4ZnMKLXg0IGNvbnZ1YncgYWxwaGFfc19pbnYsIGEKLXg0IHN1YncgYWxwaGFfc19pbnYsIGFscGhhX3NfaW52LCBhbHBoYV9zCi1sb2FkbCB0LCBkCi1zaHJ1bCB0MiwgdCwgMjQKLWNvbnZsdyB0dywgdDIKLWNvbnZ3YiB0YiwgdHcKLXNwbGF0YmwgYSwgdGIKLXg0IGNvbnZ1YncgYWxwaGFfZCwgYQoteDQgbXVsbHcgYWxwaGFfZCwgYWxwaGFfZCwgYWxwaGFfc19pbnYKLXg0IGRpdjI1NXcgYWxwaGFfZCwgYWxwaGFfZAoteDQgY29udnVidyBkX3dpZGUsIHQKLXg0IG11bGx3IGRfd2lkZSwgZF93aWRlLCBhbHBoYV9kCi0KLSMgY2FsYyBmaW5hbCBwaXhlbCBhcyBwaXhfZCA9IHBpeF9zKmFscGhhX3MgKyBwaXhfZCphbHBoYV9kKigyNTUtYWxwaGFfcykvMjU1Ci14NCBhZGR3IGRfd2lkZSwgZF93aWRlLCBzX3dpZGUKLQotIyBjYWxjIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBhbHBoYV9kID0gYWxwaGFfcyArIGFscGhhX2QgKiAoMjU1LWFscGhhX3MpLzI1NQoteDQgYWRkdyBhbHBoYV9kLCBhbHBoYV9kLCBhbHBoYV9zCi0KLSMgbm93IG5vcm1hbGl6ZSB0aGUgcGl4X2QgYnkgdGhlIGZpbmFsIGFscGhhIHRvIG1ha2UgaXQgYXNzb2NpYXRpdmUKLXg0IGRpdmx1dywgZF93aWRlLCBkX3dpZGUsIGFscGhhX2QKLQotIyBwYWNrIHRoZSBuZXcgYWxwaGEgaW50byB0aGUgY29ycmVjdCBzcG90Ci14NCBjb252d2IgdCwgZF93aWRlCi1hbmRsIHQsIHQsIGFfYWxwaGFfaW52Ci14NCBjb252d2IgYSwgYWxwaGFfZAotYW5kbCBhLCBhLCBhX2FscGhhCi1vcmwgIHQsIHQsIGEKLXN0b3JlbCBkLCB0Ci0KZGlmZiAtLWdpdCBhL2dzdC93YXZlbmMvTWFrZWZpbGUuYW0gYi9nc3Qvd2F2ZW5jL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjVkZDMxLi4wMDAwMDAwCi0tLSBhL2dzdC93YXZlbmMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R3YXZlbmMubGEKLQotbGliZ3N0d2F2ZW5jX2xhX1NPVVJDRVMgPSBnc3R3YXZlbmMuYwotbGliZ3N0d2F2ZW5jX2xhX0NGTEFHUyA9ICBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKQotbGliZ3N0d2F2ZW5jX2xhX0xJQkFERCA9IAlcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHJpZmYtQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpCi1saWJnc3R3YXZlbmNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0d2F2ZW5jX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0d2F2ZW5jLmgKZGlmZiAtLWdpdCBhL2dzdC93YXZlbmMvTWFrZWZpbGUuaW4gYi9nc3Qvd2F2ZW5jL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGRmMmI5Li4wMDAwMDAwCi0tLSBhL2dzdC93YXZlbmMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MTkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3dhdmVuYwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHdhdmVuY19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHdhdmVuY19sYV9PQkpFQ1RTID0gbGliZ3N0d2F2ZW5jX2xhLWdzdHdhdmVuYy5sbwotbGliZ3N0d2F2ZW5jX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHdhdmVuY19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0d2F2ZW5jX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0d2F2ZW5jX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0d2F2ZW5jX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHdhdmVuY19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R3YXZlbmNfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0d2F2ZW5jX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHdhdmVuYy5sYQotbGliZ3N0d2F2ZW5jX2xhX1NPVVJDRVMgPSBnc3R3YXZlbmMuYwotbGliZ3N0d2F2ZW5jX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi0KLWxpYmdzdHdhdmVuY19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHJpZmYtQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpCi0KLWxpYmdzdHdhdmVuY19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R3YXZlbmNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0d2F2ZW5jLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IGdzdC93YXZlbmMvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3dhdmVuYy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHdhdmVuYy5sYTogJChsaWJnc3R3YXZlbmNfbGFfT0JKRUNUUykgJChsaWJnc3R3YXZlbmNfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHdhdmVuY19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0d2F2ZW5jX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3R3YXZlbmNfbGFfT0JKRUNUUykgJChsaWJnc3R3YXZlbmNfbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R3YXZlbmNfbGEtZ3N0d2F2ZW5jLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R3YXZlbmNfbGEtZ3N0d2F2ZW5jLmxvOiBnc3R3YXZlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHdhdmVuY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R3YXZlbmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHdhdmVuY19sYS1nc3R3YXZlbmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHdhdmVuY19sYS1nc3R3YXZlbmMuVHBvIC1jIC1vIGxpYmdzdHdhdmVuY19sYS1nc3R3YXZlbmMubG8gYHRlc3QgLWYgJ2dzdHdhdmVuYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0d2F2ZW5jX2xhLWdzdHdhdmVuYy5UcG8gJChERVBESVIpL2xpYmdzdHdhdmVuY19sYS1nc3R3YXZlbmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0d2F2ZW5jLmMnIG9iamVjdD0nbGliZ3N0d2F2ZW5jX2xhLWdzdHdhdmVuYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHdhdmVuY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R3YXZlbmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0d2F2ZW5jX2xhLWdzdHdhdmVuYy5sbyBgdGVzdCAtZiAnZ3N0d2F2ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHdhdmVuYy5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2dzdC93YXZlbmMvZ3N0d2F2ZW5jLmMgYi9nc3Qvd2F2ZW5jL2dzdHdhdmVuYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGE4YmQwLi4wMDAwMDAwCi0tLSBhL2dzdC93YXZlbmMvZ3N0d2F2ZW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQ1ICswLDAgQEAKLS8qIC0qLSBtT2RlOiBDOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwotLyogR1N0cmVhbWVyIC53YXYgZW5jb2RlcgotICogQ29weXJpZ2h0IChDKSA8MjAwMj4gSWFpbiBIb2xtZXMgPGlhaW5AcHJldHR5cGVvcGxlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKiAKLSAqLwotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQtd2F2ZW5jCi0gKgotICogRm9ybWF0IGFuIGF1ZGlvIHN0cmVhbSBpbnRvIHRoZSB3YXYgZm9ybWF0LgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBjZHBhcmFub2lhc3JjIG1vZGU9Y29udGludW91cyAhIHF1ZXVlICEgYXVkaW9jb252ZXJ0ICEgd2F2ZW5jICEgZmlsZXNpbmsgbG9jYXRpb249Y2Qud2F2Ci0gKiBdfCBSaXAgYSB3aG9sZSBhdWRpbyBDRCBpbnRvIGEgc2luZ2xlIHdhdiBmaWxlLCB3aXRoIHRoZSB0cmFjayB0YWJsZSB3cml0dGVuIGludG8gYSBDVUUgc2hlZXQgaW5zaWRlIHRoZSBmaWxlCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgY2RwYXJhbm9pYXNyYyB0cmFjaz01ICEgcXVldWUgISBhdWRpb2NvbnZlcnQgISB3YXZlbmMgISBmaWxlc2luayBsb2NhdGlvbj10cmFjazUud2F2Ci0gKiBdfCBSaXAgdHJhY2sgNSBvZiBhbiBhdWRpbyBDRCBpbnRvIGEgc2luZ2xlIHdhdiBmaWxlIGNvbnRhaW5pbmcgdW5lbmNvZGVkIHJhdyBhdWRpbyBzYW1wbGVzLgotICogPC9yZWZzZWN0Mj4KLSAqCi0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImdzdHdhdmVuYy5oIgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L3JpZmYvcmlmZi1tZWRpYS5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJ5dGV3cml0ZXIuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAod2F2ZW5jX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdhdmVuY19kZWJ1ZwotCi10eXBlZGVmIHN0cnVjdAotewotICAvKiBPZmZzZXQgU2l6ZSAgICBEZXNjcmlwdGlvbiAgIFZhbHVlCi0gICAqIDB4MDAgICA0ICAgICAgIElEICAgICAgICAgICAgdW5pcXVlIGlkZW50aWZpY2F0aW9uIHZhbHVlCi0gICAqIDB4MDQgICA0ICAgICAgIFBvc2l0aW9uICAgICAgcGxheSBvcmRlciBwb3NpdGlvbgotICAgKiAweDA4ICAgNCAgICAgICBEYXRhIENodW5rIElEIFJJRkYgSUQgb2YgY29ycmVzcG9uZGluZyBkYXRhIGNodW5rCi0gICAqIDB4MGMgICA0ICAgICAgIENodW5rIFN0YXJ0ICAgQnl0ZSBPZmZzZXQgb2YgRGF0YSBDaHVuayAqCi0gICAqIDB4MTAgICA0ICAgICAgIEJsb2NrIFN0YXJ0ICAgQnl0ZSBPZmZzZXQgdG8gc2FtcGxlIG9mIEZpcnN0IENoYW5uZWwKLSAgICogMHgxNCAgIDQgICAgICAgU2FtcGxlIE9mZnNldCBCeXRlIE9mZnNldCB0byBzYW1wbGUgYnl0ZSBvZiBGaXJzdCBDaGFubmVsCi0gICAqLwotICBndWludDMyIGlkOwotICBndWludDMyIHBvc2l0aW9uOwotICBndWludDggZGF0YV9jaHVua19pZFs0XTsKLSAgZ3VpbnQzMiBjaHVua19zdGFydDsKLSAgZ3VpbnQzMiBibG9ja19zdGFydDsKLSAgZ3VpbnQzMiBzYW1wbGVfb2Zmc2V0OwotfSBHc3RXYXZFbmNDdWU7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIC8qIE9mZnNldCBTaXplICAgIERlc2NyaXB0aW9uICAgICBWYWx1ZQotICAgKiAweDAwICAgNCAgICAgICBDaHVuayBJRCAgICAgICAgImxhYmwiICgweDZDNjE2MjZDKSBvciAibm90ZSIgKDB4NkU2Rjc0NjUpCi0gICAqIDB4MDQgICA0ICAgICAgIENodW5rIERhdGEgU2l6ZSBkZXBlbmRzIG9uIGNvbnRhaW5lZCB0ZXh0Ci0gICAqIDB4MDggICA0ICAgICAgIEN1ZSBQb2ludCBJRCAgICAwIC0gMHhGRkZGRkZGRgotICAgKiAweDBjICAgICAgICAgICBUZXh0Ci0gICAqLwotICBndWludDggY2h1bmtfaWRbNF07Ci0gIGd1aW50MzIgY2h1bmtfZGF0YV9zaXplOwotICBndWludDMyIGN1ZV9wb2ludF9pZDsKLSAgZ2NoYXIgKnRleHQ7Ci19IEdzdFdhdkVuY0xhYmwsIEdzdFdhdkVuY05vdGU7Ci0KLS8qIEZJWE1FOiBtb25vIGRvZXNuJ3QgcHJvZHVjZSBjb3JyZWN0IGZpbGVzIGl0IHNlZW1zLCBhdCBsZWFzdCBtcGxheWVyIHhydW5zICovCi0jZGVmaW5lIFNJTktfQ0FQUyBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIFsgMSwgNjU1MzUgXSwgIiAgICAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgeyBTMzJMRSwgUzI0TEUsIFMxNkxFLCBVOCwgRjMyTEUsIEY2NExFIH0sICIgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCIgICAgICBcCi0gICAgIjsgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiYXVkaW8veC1hbGF3LCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgWyA4MDAwLCAxOTIwMDAgXSwgIiAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF07ICIgICAgICAgIFwKLSAgICAiYXVkaW8veC1tdWxhdywgIiAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgWyA4MDAwLCAxOTIwMDAgXSwgIiAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0iCi0KLSNkZWZpbmUgU1JDX0NBUFMgXAotICAgICJhdWRpby94LXdhdjsgIiBcCi0gICAgImF1ZGlvL3gtcmY2NCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoU0lOS19DQVBTKQotICAgICk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNSQ19DQVBTKQotICAgICk7Ci0KLSNkZWZpbmUgZ3N0X3dhdmVuY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0V2F2RW5jLCBnc3Rfd2F2ZW5jLCBHU1RfVFlQRV9FTEVNRU5ULAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVEFHX1NFVFRFUiwgTlVMTCkKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1RPQ19TRVRURVIsIE5VTEwpCi0gICAgKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4gZ3N0X3dhdmVuY19jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2ZW5jX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3Rfd2F2ZW5jX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3dhdmVuY19zaW5rX3NldGNhcHMgKEdzdFBhZCAqIHBhZCwgR3N0Q2FwcyAqIGNhcHMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdmVuY19jbGFzc19pbml0IChHc3RXYXZFbmNDbGFzcyAqIGtsYXNzKQotewotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0KLSAgZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0KLSAgZWxlbWVudF9jbGFzcy0+Y2hhbmdlX3N0YXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZlbmNfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiV0FWIGF1ZGlvIG11eGVyIiwKLSAgICAgICJDb2RlYy9NdXhlci9BdWRpbyIsCi0gICAgICAiRW5jb2RlIHJhdyBhdWRpbyBpbnRvIFdBViIsICJJYWluIEhvbG1lcyA8aWFpbkBwcmV0dHlwZW9wbGUub3JnPiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAmc3JjX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfZmFjdG9yeSk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHdhdmVuY19kZWJ1ZywgIndhdmVuYyIsIDAsICJXQVYgZW5jb2RlciBlbGVtZW50Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2ZW5jX2luaXQgKEdzdFdhdkVuYyAqIHdhdmVuYykKLXsKLSAgd2F2ZW5jLT5zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rX2ZhY3RvcnksICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uICh3YXZlbmMtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdmVuY19jaGFpbikpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAod2F2ZW5jLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZlbmNfZXZlbnQpKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAod2F2ZW5jLT5zaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHdhdmVuYyksIHdhdmVuYy0+c2lua3BhZCk7Ci0KLSAgd2F2ZW5jLT5zcmNwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY19mYWN0b3J5LCAic3JjIik7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKHdhdmVuYy0+c3JjcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoR1NUX0VMRU1FTlQgKHdhdmVuYyksIHdhdmVuYy0+c3JjcGFkKTsKLX0KLQotI2RlZmluZSBSSUZGX0NIVU5LX0xFTiAgICAxMgotI2RlZmluZSBGTVRfV0FWX0NIVU5LX0xFTiAyNAotI2RlZmluZSBGTVRfRVhUX0NIVU5LX0xFTiA0OAotI2RlZmluZSBGQUNUX0NIVU5LX0xFTiAgICAxMgotI2RlZmluZSBEQVRBX0hFQURFUl9MRU4gICA4Ci0jZGVmaW5lIERTNjRfQ0hVTktfTEVOICAgIDM2Ci0KLXN0YXRpYyBnYm9vbGVhbgotdXNlX2Zvcm1hdF9leHQgKEdzdFdhdkVuYyAqIHdhdmVuYykKLXsKLSAgcmV0dXJuIHdhdmVuYy0+Y2hhbm5lbHMgPiAyOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXVzZV9mYWN0X2NodW5rIChHc3RXYXZFbmMgKiB3YXZlbmMpCi17Ci0gIHJldHVybiB1c2VfZm9ybWF0X2V4dCAod2F2ZW5jKSAmJiAhd2F2ZW5jLT51c2VfcmY2NDsKLX0KLQotc3RhdGljIGludAotZ2V0X2hlYWRlcl9sZW4gKEdzdFdhdkVuYyAqIHdhdmVuYykKLXsKLSAgaW50IGxlbiA9IFJJRkZfQ0hVTktfTEVOOwotCi0gIGlmICh1c2VfZm9ybWF0X2V4dCAod2F2ZW5jKSkKLSAgICBsZW4gKz0gRk1UX0VYVF9DSFVOS19MRU47Ci0gIGVsc2UKLSAgICBsZW4gKz0gRk1UX1dBVl9DSFVOS19MRU47Ci0KLSAgaWYgKHVzZV9mYWN0X2NodW5rICh3YXZlbmMpKQotICAgIGxlbiArPSBGQUNUX0NIVU5LX0xFTjsKLQotICBpZiAod2F2ZW5jLT51c2VfcmY2NCkKLSAgICBsZW4gKz0gRFM2NF9DSFVOS19MRU47Ci0KLSAgcmV0dXJuIGxlbiArIERBVEFfSEVBREVSX0xFTjsKLX0KLQotc3RhdGljIGd1aW50NjQKLWdzdG1hc2tfdG9fd2F2bWFzayAoZ3VpbnQ2NCBnc3RtYXNrLCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqIHBvcykKLXsKLSAgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gdmFsaWRfcG9zID0KLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSIHwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZUIHwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVF9PRl9DRU5URVIgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFRfT0ZfQ0VOVEVSIHwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfQ0VOVEVSIHwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCB8Ci0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hUIHwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9DRU5URVIgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0xFRlQgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0NFTlRFUiB8Ci0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfUklHSFQgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfTEVGVCB8Ci0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9DRU5URVIgfAotICAgICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfUklHSFQ7Ci0KLSAgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gd2F2X3Bvc1tdID0gewotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSLAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTEsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZULAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVF9PRl9DRU5URVIsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFRfT0ZfQ0VOVEVSLAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfQ0VOVEVSLAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVCwKLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hULAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9DRU5URVIsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0xFRlQsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0NFTlRFUiwKLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfUklHSFQsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfTEVGVCwKLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9DRU5URVIsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfUklHSFQsCi0gIH07Ci0gIGludCBrOwotICBpbnQgY2hhbiA9IDA7Ci0gIGd1aW50NjQgcmV0ID0gMDsKLSAgZ3VpbnQ2NCBtYXNrID0gMTsKLQotICBpZiAoZ3N0bWFzayA9PSAwIHx8ICgoZ3N0bWFzayAmIH52YWxpZF9wb3MpICE9IDApKQotICAgIHJldHVybiAwOwotCi0gIGZvciAoayA9IDA7IGsgPCBHX05fRUxFTUVOVFMgKHdhdl9wb3MpOyArK2spIHsKLSAgICBpZiAoZ3N0bWFzayAmIHdhdl9wb3Nba10pIHsKLSAgICAgIHJldCB8PSBtYXNrOwotICAgICAgcG9zW2NoYW4rK10gPSB3YXZfcG9zW2tdOwotICAgIH0KLSAgICBtYXNrIDw8PSAxOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGd1aW50OCAqCi13cml0ZV9mbXRfY2h1bmsgKEdzdFdhdkVuYyAqIHdhdmVuYywgZ3VpbnQ4ICogaGVhZGVyKQotewotICBndWludDE2IHdCbG9ja0FsaWduOwotCi0gIHdCbG9ja0FsaWduID0gKHdhdmVuYy0+d2lkdGggLyA4KSAqIHdhdmVuYy0+Y2hhbm5lbHM7Ci0KLSAgbWVtY3B5IChoZWFkZXIsICJmbXQgIiwgNCk7Ci0gIC8qIHdDaGFubmVscyAqLwotICBHU1RfV1JJVEVfVUlOVDE2X0xFIChoZWFkZXIgKyAxMCwgd2F2ZW5jLT5jaGFubmVscyk7Ci0gIC8qIGR3U2FtcGxlc1BlclNlYyAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyAxMiwgd2F2ZW5jLT5yYXRlKTsKLSAgLyogZHdBdmdCeXRlc1BlclNlYyAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyAxNiwgd0Jsb2NrQWxpZ24gKiB3YXZlbmMtPnJhdGUpOwotICAvKiB3QmxvY2tBbGlnbiAqLwotICBHU1RfV1JJVEVfVUlOVDE2X0xFIChoZWFkZXIgKyAyMCwgd0Jsb2NrQWxpZ24pOwotICAvKiB3Qml0c1BlclNhbXBsZSAqLwotICBHU1RfV1JJVEVfVUlOVDE2X0xFIChoZWFkZXIgKyAyMiwgd2F2ZW5jLT53aWR0aCk7Ci0KLSAgaWYgKHVzZV9mb3JtYXRfZXh0ICh3YXZlbmMpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAiVXNpbmcgV0FWRV9GT1JNQVRfRVhURU5TSUJMRSIpOwotCi0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgNCwgRk1UX0VYVF9DSFVOS19MRU4gLSA4KTsKLQotICAgIC8qIHdGb3JtYXRUYWcgKi8KLSAgICBHU1RfV1JJVEVfVUlOVDE2X0xFIChoZWFkZXIgKyA4LCAweEZGRkUpOwotICAgIC8qIGNiU2l6ZSAqLwotICAgIEdTVF9XUklURV9VSU5UMTZfTEUgKGhlYWRlciArIDI0LCAyMik7Ci0gICAgLyogd1ZhbGlkQml0c1BlclNhbXBsZSAqLwotICAgIEdTVF9XUklURV9VSU5UMTZfTEUgKGhlYWRlciArIDI2LCB3YXZlbmMtPndpZHRoKTsKLSAgICAvKiBkd0NoYW5uZWxNYXNrICovCi0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgMjgsIChndWludDMyKSB3YXZlbmMtPmNoYW5uZWxfbWFzayk7Ci0KLSAgICBHU1RfV1JJVEVfVUlOVDE2X0xFIChoZWFkZXIgKyAzMiwgd2F2ZW5jLT5mb3JtYXQpOwotCi0gICAgbWVtY3B5IChoZWFkZXIgKyAzNCwKLSAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDEwXHgwMFx4ODBceDAwXHgwMFx4QUFceDAwXHgzOFx4OUJceDcxIiwgMTQpOwotCi0gICAgaGVhZGVyICs9IEZNVF9FWFRfQ0hVTktfTEVOOwotCi0gIH0gZWxzZSB7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgNCwgRk1UX1dBVl9DSFVOS19MRU4gLSA4KTsKLQotICAgIC8qIHdGb3JtYXRUYWcgKi8KLSAgICBHU1RfV1JJVEVfVUlOVDE2X0xFIChoZWFkZXIgKyA4LCB3YXZlbmMtPmZvcm1hdCk7Ci0gICAgaGVhZGVyICs9IEZNVF9XQVZfQ0hVTktfTEVOOwotICB9Ci0KLSAgcmV0dXJuIGhlYWRlcjsKLX0KLQotc3RhdGljIGd1aW50NjQKLWdldF9udW1fZnJhbWVzIChHc3RXYXZFbmMgKiB3YXZlbmMpCi17Ci0gIGlmICh3YXZlbmMtPmNoYW5uZWxzID09IDAgfHwgd2F2ZW5jLT53aWR0aCA9PSAwKQotICAgIHJldHVybiAwOwotICByZXR1cm4gd2F2ZW5jLT5hdWRpb19sZW5ndGggLyAod2F2ZW5jLT53aWR0aCAvIDgpIC8gd2F2ZW5jLT5jaGFubmVsczsKLX0KLQotc3RhdGljIGd1aW50OCAqCi13cml0ZV9mYWN0X2NodW5rIChHc3RXYXZFbmMgKiB3YXZlbmMsIGd1aW50OCAqIGhlYWRlcikKLXsKLSAgbWVtY3B5IChoZWFkZXIsICJmYWN0IiwgNCk7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGhlYWRlciArIDQsIEZBQ1RfQ0hVTktfTEVOIC0gOCk7Ci0gIC8qIGNvbXByZXNzZWQgZmlsZXMgYXJlIG9ubHkgc3VwcG9ydGVkIHVwIHRvIDIgY2hhbm5lbHMsCi0gICAqIHRoYXQgbWVhbnMgd2UgbmV2ZXIgd3JpdGUgYSBmYWN0IGNodW5rIGZvciB0aGVtICovCi0gIGlmICh3YXZlbmMtPnVzZV9yZjY0KQotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKGhlYWRlciArIDgsIDB4RkZGRkZGRkYpOwotICBlbHNlCi0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgOCwgKGd1aW50MzIpIGdldF9udW1fZnJhbWVzICh3YXZlbmMpKTsKLSAgcmV0dXJuIGhlYWRlciArIEZBQ1RfQ0hVTktfTEVOOwotfQotCi1zdGF0aWMgZ3VpbnQ4ICoKLXdyaXRlX2RzNjRfY2h1bmsgKEdzdFdhdkVuYyAqIHdhdmVuYywgZ3VpbnQ2NCByaWZmTGVuLCBndWludDggKiBoZWFkZXIpCi17Ci0gIGd1aW50NjQgbnVtRnJhbWVzID0gZ2V0X251bV9mcmFtZXMgKHdhdmVuYyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAicmlmZkxlbj0lIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAiLCBhdWRpbyBsZW5ndGg9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBudW1GcmFtZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgIHJpZmZMZW4sIHdhdmVuYy0+YXVkaW9fbGVuZ3RoLCBudW1GcmFtZXMpOwotCi0gIG1lbWNweSAoaGVhZGVyLCAiZHM2NCIsIDQpOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyA0LCBEUzY0X0NIVU5LX0xFTiAtIDgpOwotICAvKiByaWZmU2l6ZSAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyA4LCAoZ3VpbnQzMikgKHJpZmZMZW4gJiAweEZGRkZGRkZGKSk7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGhlYWRlciArIDEyLCAoZ3VpbnQzMikgKHJpZmZMZW4gPj4gMzIpKTsKLSAgLyogZGF0YVNpemUgKi8KLSAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgMTYsCi0gICAgICAoZ3VpbnQzMikgKHdhdmVuYy0+YXVkaW9fbGVuZ3RoICYgMHhGRkZGRkZGRikpOwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyAyMCwgKGd1aW50MzIpICh3YXZlbmMtPmF1ZGlvX2xlbmd0aCA+PiAzMikpOwotICAvKiBzYW1wbGVDb3VudCAqLwotICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyAyNCwgKGd1aW50MzIpIChudW1GcmFtZXMgJiAweEZGRkZGRkZGKSk7Ci0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGhlYWRlciArIDI4LCAoZ3VpbnQzMikgKG51bUZyYW1lcyA+PiAzMikpOwotICAvKiB0YWJsZUxlbmd0aCBhbHdheXMgemVybyBmb3Igbm93ICovCi0gIEdTVF9XUklURV9VSU5UMzJfTEUgKGhlYWRlciArIDMyLCAwKTsKLQotICByZXR1cm4gaGVhZGVyICsgRFM2NF9DSFVOS19MRU47Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X3dhdmVuY19jcmVhdGVfaGVhZGVyX2J1ZiAoR3N0V2F2RW5jICogd2F2ZW5jKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50OCAqaGVhZGVyOwotICBndWludDY0IHJpZmZMZW47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAiSGVhZGVyIHNpemU6ICVkIiwgZ2V0X2hlYWRlcl9sZW4gKHdhdmVuYykpOwotICBidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGdldF9oZWFkZXJfbGVuICh3YXZlbmMpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGhlYWRlciA9IG1hcC5kYXRhOwotICBtZW1zZXQgKGhlYWRlciwgMCwgZ2V0X2hlYWRlcl9sZW4gKHdhdmVuYykpOwotCi0gIHJpZmZMZW4gPSB3YXZlbmMtPm1ldGFfbGVuZ3RoICsgd2F2ZW5jLT5hdWRpb19sZW5ndGgKLSAgICAgICsgZ2V0X2hlYWRlcl9sZW4gKHdhdmVuYykgLSA4OwotCi0gIC8qIFJJRkYgY2h1bmsgKi8KLSAgaWYgKHdhdmVuYy0+dXNlX3JmNjQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZlbmMsICJVc2luZyBSRjY0Iik7Ci0gICAgbWVtY3B5IChoZWFkZXIsICJSRjY0IiwgNCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgNCwgMHhGRkZGRkZGRik7Ci0gIH0gZWxzZSB7Ci0gICAgbWVtY3B5IChoZWFkZXIsICJSSUZGIiwgNCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgNCwgKGd1aW50MzIpIHJpZmZMZW4pOwotICB9Ci0gIG1lbWNweSAoaGVhZGVyICsgOCwgIldBVkUiLCA0KTsKLSAgaGVhZGVyICs9IFJJRkZfQ0hVTktfTEVOOwotCi0gIGlmICh3YXZlbmMtPnVzZV9yZjY0KQotICAgIGhlYWRlciA9IHdyaXRlX2RzNjRfY2h1bmsgKHdhdmVuYywgcmlmZkxlbiwgaGVhZGVyKTsKLQotICBoZWFkZXIgPSB3cml0ZV9mbXRfY2h1bmsgKHdhdmVuYywgaGVhZGVyKTsKLSAgaWYgKHVzZV9mYWN0X2NodW5rICh3YXZlbmMpKQotICAgIGhlYWRlciA9IHdyaXRlX2ZhY3RfY2h1bmsgKHdhdmVuYywgaGVhZGVyKTsKLQotICAvKiBkYXRhIGNodW5rICovCi0gIG1lbWNweSAoaGVhZGVyLCAiZGF0YSAiLCA0KTsKLSAgaWYgKHdhdmVuYy0+dXNlX3JmNjQpCi0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoaGVhZGVyICsgNCwgMHhGRkZGRkZGRik7Ci0gIGVsc2UKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0xFIChoZWFkZXIgKyA0LCAoZ3VpbnQzMikgd2F2ZW5jLT5hdWRpb19sZW5ndGgpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF93YXZlbmNfcHVzaF9oZWFkZXIgKEdzdFdhdkVuYyAqIHdhdmVuYykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgLyogc2VlayB0byBiZWdpbm5pbmcgb2YgZmlsZSAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGlmICghZ3N0X3BhZF9wdXNoX2V2ZW50ICh3YXZlbmMtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZlbmMsICJTZWVrIHRvIHRoZSBiZWdpbm5pbmcgZmFpbGVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAid3JpdGluZyBoZWFkZXIsIG1ldGFfc2l6ZT0ldSwgYXVkaW9fc2l6ZT0lIgotICAgICAgR19HVUlOVDY0X0ZPUk1BVCwgd2F2ZW5jLT5tZXRhX2xlbmd0aCwgd2F2ZW5jLT5hdWRpb19sZW5ndGgpOwotCi0gIG91dGJ1ZiA9IGdzdF93YXZlbmNfY3JlYXRlX2hlYWRlcl9idWYgKHdhdmVuYyk7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChvdXRidWYpID0gMDsKLQotICByZXQgPSBnc3RfcGFkX3B1c2ggKHdhdmVuYy0+c3JjcGFkLCBvdXRidWYpOwotCi0gIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdmVuYywgInB1c2ggaGVhZGVyIGZhaWxlZDogZmxvdyA9ICVzIiwKLSAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2ZW5jX3Npbmtfc2V0Y2FwcyAoR3N0UGFkICogcGFkLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0V2F2RW5jICp3YXZlbmM7Ci0gIEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgZ2ludCBjaGFucywgcmF0ZTsKLSAgR3N0Q2FwcyAqY2NhcHM7Ci0KLSAgd2F2ZW5jID0gR1NUX1dBVkVOQyAoZ3N0X3BhZF9nZXRfcGFyZW50IChwYWQpKTsKLQotICBjY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgaWYgKHdhdmVuYy0+c2VudF9oZWFkZXIgJiYgY2NhcHMgJiYgIWdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIGNjYXBzKSkgewotICAgIGdzdF9jYXBzX3VucmVmIChjY2Fwcyk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZlbmMsICJjYW5ub3QgY2hhbmdlIGZvcm1hdCBpbiBtaWRkbGUgb2Ygc3RyZWFtIik7Ci0gICAgZ290byBmYWlsOwotICB9Ci0gIGlmIChjY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAoY2NhcHMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHdhdmVuYywgImdvdCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOwotCi0gIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJjaGFubmVscyIsICZjaGFucykgfHwKLSAgICAgICFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgInJhdGUiLCAmcmF0ZSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdmVuYywgImNhcHMgaW5jb21wbGV0ZSIpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotCi0gIHdhdmVuYy0+Y2hhbm5lbHMgPSBjaGFuczsKLSAgd2F2ZW5jLT5yYXRlID0gcmF0ZTsKLSAgd2F2ZW5jLT5jaGFubmVsX21hc2sgPSAwOwotCi0gIGlmIChzdHJjbXAgKG5hbWUsICJhdWRpby94LXJhdyIpID09IDApIHsKLSAgICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgICBndWludDY0IGdzdG1hc2s7Ci0KLSAgICBpZiAoIWdzdF9hdWRpb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGNhcHMpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdmVuYywgIkNvdWxkIG5vdCByZXRyaWV2ZSBhdWRpbyBpbmZvIGZyb20gY2FwcyIpOwotICAgICAgZ290byBmYWlsOwotICAgIH0KLSAgICBpZiAoZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX21hc2sgKGluZm8ucG9zaXRpb24sIHdhdmVuYy0+Y2hhbm5lbHMsCi0gICAgICAgICAgICBGQUxTRSwgJmdzdG1hc2spKSB7Ci0gICAgICB3YXZlbmMtPmNoYW5uZWxfbWFzayA9IGdzdG1hc2tfdG9fd2F2bWFzayAoZ3N0bWFzaywgd2F2ZW5jLT5kZXN0UG9zKTsKLSAgICAgIG1lbWNweSAod2F2ZW5jLT5zcmNQb3MsIGluZm8ucG9zaXRpb24sIHNpemVvZiAoaW5mby5wb3NpdGlvbikpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAiQ2hhbm5lbCBtYXNrIGlucHV0OiAweCUiIEdfR0lOVDY0X01PRElGSUVSICJ4IgotICAgICAgICAgICIgb3V0cHV0OiAweCUiIEdfR0lOVDY0X01PRElGSUVSICJ4IiwgZ3N0bWFzaywgd2F2ZW5jLT5jaGFubmVsX21hc2spOwotICAgIH0KLSAgICB3YXZlbmMtPmF1ZGlvX2Zvcm1hdCA9IEdTVF9BVURJT19JTkZPX0ZPUk1BVCAoJmluZm8pOwotCi0gICAgaWYgKEdTVF9BVURJT19JTkZPX0lTX0lOVEVHRVIgKCZpbmZvKSkKLSAgICAgIHdhdmVuYy0+Zm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfUENNOwotICAgIGVsc2UgaWYgKEdTVF9BVURJT19JTkZPX0lTX0ZMT0FUICgmaW5mbykpCi0gICAgICB3YXZlbmMtPmZvcm1hdCA9IEdTVF9SSUZGX1dBVkVfRk9STUFUX0lFRUVfRkxPQVQ7Ci0gICAgZWxzZQotICAgICAgZ290byBmYWlsOwotCi0gICAgd2F2ZW5jLT53aWR0aCA9IEdTVF9BVURJT19JTkZPX1dJRFRIICgmaW5mbyk7Ci0gIH0gZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiYXVkaW8veC1hbGF3IikgPT0gMCkgewotICAgIHdhdmVuYy0+Zm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfQUxBVzsKLSAgICB3YXZlbmMtPndpZHRoID0gODsKLSAgfSBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICJhdWRpby94LW11bGF3IikgPT0gMCkgewotICAgIHdhdmVuYy0+Zm9ybWF0ID0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfTVVMQVc7Ci0gICAgd2F2ZW5jLT53aWR0aCA9IDg7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZlbmMsICJVbnN1cHBvcnRlZCBmb3JtYXQgJXMiLCBuYW1lKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAod2F2ZW5jLAotICAgICAgImFjY2VwdGVkIGNhcHM6IGZvcm1hdD0weCUwNHggY2hhbnM9JXUgd2lkdGg9JXUgcmF0ZT0ldSIsCi0gICAgICB3YXZlbmMtPmZvcm1hdCwgd2F2ZW5jLT5jaGFubmVscywgd2F2ZW5jLT53aWR0aCwgd2F2ZW5jLT5yYXRlKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh3YXZlbmMpOwotICByZXR1cm4gVFJVRTsKLQotZmFpbDoKLSAgZ3N0X29iamVjdF91bnJlZiAod2F2ZW5jKTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhcnNlX3RhZ3NfZm9yZWFjaCAoY29uc3QgR3N0VGFnTGlzdCAqIHRhZ3MsIGNvbnN0IGdjaGFyICogdGFnLAotICAgIGdwb2ludGVyIGRhdGEpCi17Ci0gIGNvbnN0IHN0cnVjdAotICB7Ci0gICAgZ3VpbnQzMiBmY2M7Ci0gICAgY29uc3QgZ2NoYXIgKnRhZzsKLSAgfSByaWZmdGFnc1tdID0gewotICAgIHsKLSAgICBHU1RfUklGRl9JTkZPX0lBUkwsIEdTVF9UQUdfTE9DQVRJT059LCB7Ci0gICAgR1NUX1JJRkZfSU5GT19JQVJULCBHU1RfVEFHX0FSVElTVH0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lDTVQsIEdTVF9UQUdfQ09NTUVOVH0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lDT1AsIEdTVF9UQUdfQ09QWVJJR0hUfSwgewotICAgIEdTVF9SSUZGX0lORk9fSUNSRCwgR1NUX1RBR19EQVRFfSwgewotICAgIEdTVF9SSUZGX0lORk9fSUdOUiwgR1NUX1RBR19HRU5SRX0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lLRVksIEdTVF9UQUdfS0VZV09SRFN9LCB7Ci0gICAgR1NUX1JJRkZfSU5GT19JTkFNLCBHU1RfVEFHX1RJVExFfSwgewotICAgIEdTVF9SSUZGX0lORk9fSVBSRCwgR1NUX1RBR19BTEJVTX0sIHsKLSAgICBHU1RfUklGRl9JTkZPX0lTQkosIEdTVF9UQUdfQUxCVU1fQVJUSVNUfSwgewotICAgIEdTVF9SSUZGX0lORk9fSVNGVCwgR1NUX1RBR19FTkNPREVSfSwgewotICAgIEdTVF9SSUZGX0lORk9fSVNSQywgR1NUX1RBR19JU1JDfSwgewotICAgIDAsIE5VTEx9Ci0gIH07Ci0gIGdpbnQgbjsKLSAgZ2NoYXIgKnN0ciA9IE5VTEw7Ci0gIEdzdEJ5dGVXcml0ZXIgKmJ3ID0gZGF0YTsKLSAgZm9yIChuID0gMDsgcmlmZnRhZ3Nbbl0uZmNjICE9IDA7IG4rKykgewotICAgIGlmICghc3RyY21wIChyaWZmdGFnc1tuXS50YWcsIHRhZykpIHsKLSAgICAgIGlmIChyaWZmdGFnc1tuXS5mY2MgPT0gR1NUX1JJRkZfSU5GT19JQ1JEKSB7Ci0gICAgICAgIEdEYXRlICpkYXRlOwotICAgICAgICAvKiBzcGVjaWFsIGNhc2UgZm9yIHRoZSBkYXRlIHRhZyAqLwotICAgICAgICBpZiAoZ3N0X3RhZ19saXN0X2dldF9kYXRlICh0YWdzLCB0YWcsICZkYXRlKSkgewotICAgICAgICAgIHN0ciA9Ci0gICAgICAgICAgICAgIGdfc3RyZHVwX3ByaW50ZiAoIiUwNGQ6JTAyZDolMDJkIiwgZ19kYXRlX2dldF95ZWFyIChkYXRlKSwKLSAgICAgICAgICAgICAgZ19kYXRlX2dldF9tb250aCAoZGF0ZSksIGdfZGF0ZV9nZXRfZGF5IChkYXRlKSk7Ci0gICAgICAgICAgZ19kYXRlX2ZyZWUgKGRhdGUpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgdGFnLCAmc3RyKTsKLSAgICAgIH0KLSAgICAgIGlmIChzdHIpIHsKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKGJ3LCByaWZmdGFnc1tuXS5mY2MpOwotICAgICAgICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoYncsIEdTVF9ST1VORF9VUF8yIChzdHJsZW4gKHN0cikpKTsKLSAgICAgICAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9zdHJpbmcgKGJ3LCBzdHIpOwotICAgICAgICBnX2ZyZWUgKHN0cik7Ci0gICAgICAgIHN0ciA9IE5VTEw7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotCi19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfd2F2ZW5jX3dyaXRlX3RhZ3MgKEdzdFdhdkVuYyAqIHdhdmVuYykKLXsKLSAgY29uc3QgR3N0VGFnTGlzdCAqdXNlcl90YWdzOwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBndWludCBzaXplOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0Qnl0ZVdyaXRlciBidzsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAod2F2ZW5jICE9IE5VTEwsIEdTVF9GTE9XX09LKTsKLQotICB1c2VyX3RhZ3MgPSBnc3RfdGFnX3NldHRlcl9nZXRfdGFnX2xpc3QgKEdTVF9UQUdfU0VUVEVSICh3YXZlbmMpKTsKLSAgaWYgKCghd2F2ZW5jLT50YWdzKSAmJiAoIXVzZXJfdGFncykpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZlbmMsICJoYXZlIG5vIHRhZ3MiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLSAgdGFncyA9Ci0gICAgICBnc3RfdGFnX2xpc3RfbWVyZ2UgKHVzZXJfdGFncywgd2F2ZW5jLT50YWdzLAotICAgICAgZ3N0X3RhZ19zZXR0ZXJfZ2V0X3RhZ19tZXJnZV9tb2RlIChHU1RfVEFHX1NFVFRFUiAod2F2ZW5jKSkpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHdhdmVuYywgIndyaXRpbmcgdGFncyIpOwotCi0gIGdzdF9ieXRlX3dyaXRlcl9pbml0X3dpdGhfc2l6ZSAoJmJ3LCAxMDI0LCBGQUxTRSk7Ci0KLSAgLyogYWRkIExJU1QgSU5GTyBjaHVuayAqLwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X2RhdGEgKCZidywgKGNvbnN0IGd1aW50OCAqKSAiTElTVCIsIDQpOwotICBnc3RfYnl0ZV93cml0ZXJfcHV0X3VpbnQzMl9sZSAoJmJ3LCAwKTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF9kYXRhICgmYncsIChjb25zdCBndWludDggKikgIklORk8iLCA0KTsKLQotICAvKiBhZGQgdGFncyAqLwotICBnc3RfdGFnX2xpc3RfZm9yZWFjaCAodGFncywgZ3N0X3dhdnBhcnNlX3RhZ3NfZm9yZWFjaCwgJmJ3KTsKLQotICAvKiBzZXRzIHJlYWwgc2l6ZSBvZiBMSVNUIElORk8gY2h1bmsgKi8KLSAgc2l6ZSA9IGdzdF9ieXRlX3dyaXRlcl9nZXRfcG9zICgmYncpOwotICBnc3RfYnl0ZV93cml0ZXJfc2V0X3BvcyAoJmJ3LCA0KTsKLSAgZ3N0X2J5dGVfd3JpdGVyX3B1dF91aW50MzJfbGUgKCZidywgc2l6ZSAtIDgpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0KLSAgYnVmID0gZ3N0X2J5dGVfd3JpdGVyX3Jlc2V0X2FuZF9nZXRfYnVmZmVyICgmYncpOwotICB3YXZlbmMtPm1ldGFfbGVuZ3RoICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1Zik7Ci0gIHJldHVybiBnc3RfcGFkX3B1c2ggKHdhdmVuYy0+c3JjcGFkLCBidWYpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZlbmNfaXNfY3VlX2lkX3VuaXF1ZSAoZ3VpbnQzMiBpZCwgR0xpc3QgKiBsaXN0KQotewotICBHc3RXYXZFbmNDdWUgKmN1ZTsKLQotICB3aGlsZSAobGlzdCkgewotICAgIGN1ZSA9IGxpc3QtPmRhdGE7Ci0gICAgaWYgKGN1ZS0+aWQgPT0gaWQpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZlbmNfcGFyc2VfY3VlIChHc3RXYXZFbmMgKiB3YXZlbmMsIGd1aW50MzIgaWQsIEdzdFRvY0VudHJ5ICogZW50cnkpCi17Ci0gIGdpbnQ2NCBzdGFydDsKLSAgR3N0V2F2RW5jQ3VlICpjdWU7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5ICE9IE5VTEwsIEZBTFNFKTsKLQotICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzIChlbnRyeSwgJnN0YXJ0LCBOVUxMKTsKLQotICBjdWUgPSBnX25ldyAoR3N0V2F2RW5jQ3VlLCAxKTsKLSAgY3VlLT5pZCA9IGlkOwotICBjdWUtPnBvc2l0aW9uID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX3JvdW5kIChzdGFydCwgd2F2ZW5jLT5yYXRlLCBHU1RfU0VDT05EKTsKLSAgbWVtY3B5IChjdWUtPmRhdGFfY2h1bmtfaWQsICJkYXRhIiwgNCk7Ci0gIGN1ZS0+Y2h1bmtfc3RhcnQgPSAwOwotICBjdWUtPmJsb2NrX3N0YXJ0ID0gMDsKLSAgY3VlLT5zYW1wbGVfb2Zmc2V0ID0gY3VlLT5wb3NpdGlvbjsKLSAgd2F2ZW5jLT5jdWVzID0gZ19saXN0X2FwcGVuZCAod2F2ZW5jLT5jdWVzLCBjdWUpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZlbmNfcGFyc2VfbGFibCAoR3N0V2F2RW5jICogd2F2ZW5jLCBndWludDMyIGlkLCBHc3RUb2NFbnRyeSAqIGVudHJ5KQotewotICBnY2hhciAqdGFnOwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RXYXZFbmNMYWJsICpsYWJsOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSAhPSBOVUxMLCBGQUxTRSk7Ci0KLSAgdGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MgKGVudHJ5KTsKLSAgaWYgKCF0YWdzKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh3YXZlbmMsICJubyB0YWdzIGZvciBlbnRyeTogJWQiLCBpZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmICghZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0YWcpKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh3YXZlbmMsICJubyB0aXRsZSB0YWcgZm9yIGVudHJ5OiAlZCIsIGlkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBsYWJsID0gZ19uZXcgKEdzdFdhdkVuY0xhYmwsIDEpOwotICBtZW1jcHkgKGxhYmwtPmNodW5rX2lkLCAibGFibCIsIDQpOwotICBsYWJsLT5jaHVua19kYXRhX3NpemUgPSA0ICsgc3RybGVuICh0YWcpICsgMTsKLSAgbGFibC0+Y3VlX3BvaW50X2lkID0gaWQ7Ci0gIGxhYmwtPnRleHQgPSB0YWc7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAiZ290IGxhYmw6ICclcyciLCB0YWcpOwotCi0gIHdhdmVuYy0+bGFibHMgPSBnX2xpc3RfYXBwZW5kICh3YXZlbmMtPmxhYmxzLCBsYWJsKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2ZW5jX3BhcnNlX25vdGUgKEdzdFdhdkVuYyAqIHdhdmVuYywgZ3VpbnQzMiBpZCwgR3N0VG9jRW50cnkgKiBlbnRyeSkKLXsKLSAgZ2NoYXIgKnRhZzsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgR3N0V2F2RW5jTm90ZSAqbm90ZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnkgIT0gTlVMTCwgRkFMU0UpOwotICB0YWdzID0gZ3N0X3RvY19lbnRyeV9nZXRfdGFncyAoZW50cnkpOwotICBpZiAoIXRhZ3MpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHdhdmVuYywgIm5vIHRhZ3MgZm9yIGVudHJ5OiAlZCIsIGlkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKCFnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19DT01NRU5ULCAmdGFnKSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAod2F2ZW5jLCAibm8gY29tbWVudCB0YWcgZm9yIGVudHJ5OiAlZCIsIGlkKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBub3RlID0gZ19uZXcgKEdzdFdhdkVuY05vdGUsIDEpOwotICBtZW1jcHkgKG5vdGUtPmNodW5rX2lkLCAibm90ZSIsIDQpOwotICBub3RlLT5jaHVua19kYXRhX3NpemUgPSA0ICsgc3RybGVuICh0YWcpICsgMTsKLSAgbm90ZS0+Y3VlX3BvaW50X2lkID0gaWQ7Ci0gIG5vdGUtPnRleHQgPSB0YWc7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAiZ290IG5vdGU6ICclcyciLCB0YWcpOwotCi0gIHdhdmVuYy0+bm90ZXMgPSBnX2xpc3RfYXBwZW5kICh3YXZlbmMtPm5vdGVzLCBub3RlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2ZW5jX3dyaXRlX2N1ZXMgKGd1aW50OCAqKiBkYXRhLCBHTGlzdCAqIGxpc3QpCi17Ci0gIEdzdFdhdkVuY0N1ZSAqY3VlOwotCi0gIHdoaWxlIChsaXN0KSB7Ci0gICAgY3VlID0gbGlzdC0+ZGF0YTsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0xFICgqZGF0YSwgY3VlLT5pZCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoKmRhdGEgKyA0LCBjdWUtPnBvc2l0aW9uKTsKLSAgICBtZW1jcHkgKCpkYXRhICsgOCwgKGdjaGFyICopIGN1ZS0+ZGF0YV9jaHVua19pZCwgNCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoKmRhdGEgKyAxMiwgY3VlLT5jaHVua19zdGFydCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoKmRhdGEgKyAxNiwgY3VlLT5ibG9ja19zdGFydCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoKmRhdGEgKyAyMCwgY3VlLT5zYW1wbGVfb2Zmc2V0KTsKLSAgICAqZGF0YSArPSAyNDsKLSAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdmVuY193cml0ZV9sYWJscyAoZ3VpbnQ4ICoqIGRhdGEsIEdMaXN0ICogbGlzdCkKLXsKLSAgR3N0V2F2RW5jTGFibCAqbGFibDsKLQotICB3aGlsZSAobGlzdCkgewotICAgIGxhYmwgPSBsaXN0LT5kYXRhOwotICAgIG1lbWNweSAoKmRhdGEsIChnY2hhciAqKSBsYWJsLT5jaHVua19pZCwgNCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoKmRhdGEgKyA0LCBsYWJsLT5jaHVua19kYXRhX3NpemUpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKCpkYXRhICsgOCwgbGFibC0+Y3VlX3BvaW50X2lkKTsKLSAgICBtZW1jcHkgKCpkYXRhICsgMTIsIChnY2hhciAqKSBsYWJsLT50ZXh0LCBzdHJsZW4gKGxhYmwtPnRleHQpKTsKLSAgICAqZGF0YSArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKGxhYmwtPmNodW5rX2RhdGFfc2l6ZSk7Ci0gICAgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZlbmNfd3JpdGVfbm90ZXMgKGd1aW50OCAqKiBkYXRhLCBHTGlzdCAqIGxpc3QpCi17Ci0gIEdzdFdhdkVuY05vdGUgKm5vdGU7Ci0KLSAgd2hpbGUgKGxpc3QpIHsKLSAgICBub3RlID0gbGlzdC0+ZGF0YTsKLSAgICBtZW1jcHkgKCpkYXRhLCAoZ2NoYXIgKikgbm90ZS0+Y2h1bmtfaWQsIDQpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKCpkYXRhICsgNCwgbm90ZS0+Y2h1bmtfZGF0YV9zaXplKTsKLSAgICBHU1RfV1JJVEVfVUlOVDMyX0xFICgqZGF0YSArIDgsIG5vdGUtPmN1ZV9wb2ludF9pZCk7Ci0gICAgbWVtY3B5ICgqZGF0YSArIDEyLCAoZ2NoYXIgKikgbm90ZS0+dGV4dCwgc3RybGVuIChub3RlLT50ZXh0KSk7Ci0gICAgKmRhdGEgKz0gOCArIEdTVF9ST1VORF9VUF8yIChub3RlLT5jaHVua19kYXRhX3NpemUpOwotICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF93YXZlbmNfd3JpdGVfdG9jIChHc3RXYXZFbmMgKiB3YXZlbmMpCi17Ci0gIEdMaXN0ICpsaXN0OwotICBHc3RUb2MgKnRvYzsKLSAgR3N0VG9jRW50cnkgKmVudHJ5LCAqc3ViZW50cnk7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ4ICpkYXRhOwotICBndWludDMyIG5jdWVzLCBzaXplLCBjdWVzX3NpemUsIGxhYmxzX3NpemUsIG5vdGVzX3NpemU7Ci0KLSAgaWYgKCF3YXZlbmMtPnRvYykgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdmVuYywgImhhdmUgbm8gdG9jLCBjaGVja2luZyB0b2Nfc2V0dGVyIik7Ci0gICAgd2F2ZW5jLT50b2MgPSBnc3RfdG9jX3NldHRlcl9nZXRfdG9jIChHU1RfVE9DX1NFVFRFUiAod2F2ZW5jKSk7Ci0gIH0KLSAgaWYgKCF3YXZlbmMtPnRvYykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2ZW5jLCAiaGF2ZSBubyB0b2MiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICB0b2MgPSBnc3RfdG9jX3JlZiAod2F2ZW5jLT50b2MpOwotICBzaXplID0gMDsKLSAgY3Vlc19zaXplID0gMDsKLSAgbGFibHNfc2l6ZSA9IDA7Ci0gIG5vdGVzX3NpemUgPSAwOwotCi0gIC8qIGNoZWNrIGlmIHRoZSBUT0MgZW50cmllcyBpcyB2YWxpZCAqLwotICBsaXN0ID0gZ3N0X3RvY19nZXRfZW50cmllcyAodG9jKTsKLSAgZW50cnkgPSBsaXN0LT5kYXRhOwotICBpZiAoZ3N0X3RvY19lbnRyeV9pc19hbHRlcm5hdGl2ZSAoZW50cnkpKSB7Ci0gICAgbGlzdCA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzIChlbnRyeSk7Ci0gICAgd2hpbGUgKGxpc3QpIHsKLSAgICAgIHN1YmVudHJ5ID0gbGlzdC0+ZGF0YTsKLSAgICAgIGlmICghZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAoc3ViZW50cnkpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOwotICAgIH0KLSAgICBsaXN0ID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMgKGVudHJ5KTsKLSAgfQotICBpZiAoZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAoZW50cnkpKSB7Ci0gICAgd2hpbGUgKGxpc3QpIHsKLSAgICAgIGVudHJ5ID0gbGlzdC0+ZGF0YTsKLSAgICAgIGlmICghZ3N0X3RvY19lbnRyeV9pc19zZXF1ZW5jZSAoZW50cnkpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICBsaXN0ID0gZ19saXN0X25leHQgKGxpc3QpOwotICAgIH0KLSAgICBsaXN0ID0gZ3N0X3RvY19nZXRfZW50cmllcyAodG9jKTsKLSAgfQotCi0gIG5jdWVzID0gZ19saXN0X2xlbmd0aCAobGlzdCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHdhdmVuYywgIm51bWJlciBvZiBjdWUgZW50cmllczogJWQiLCBuY3Vlcyk7Ci0KLSAgd2hpbGUgKGxpc3QpIHsKLSAgICBndWludDMyIGlkID0gMDsKLSAgICBnaW50NjQgaWQ2NDsKLSAgICBjb25zdCBnY2hhciAqdWlkOwotCi0gICAgZW50cnkgPSBsaXN0LT5kYXRhOwotICAgIHVpZCA9IGdzdF90b2NfZW50cnlfZ2V0X3VpZCAoZW50cnkpOwotICAgIGlkNjQgPSBnX2FzY2lpX3N0cnRvbGwgKHVpZCwgTlVMTCwgMCk7Ci0gICAgLyogY2hlY2sgaWYgaWQgdW5pcXVlIGNvbXBhdGlibGUgd2l0aCBndWludDMyIGVsc2UgZ2VuZXJhdGUgcmFuZG9tICovCi0gICAgaWYgKGlkNjQgPj0gMCAmJiBnc3Rfd2F2ZW5jX2lzX2N1ZV9pZF91bmlxdWUgKGlkNjQsIHdhdmVuYy0+Y3VlcykpIHsKLSAgICAgIGlkID0gKGd1aW50MzIpIGlkNjQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRvIHsKLSAgICAgICAgaWQgPSBnX3JhbmRvbV9pbnQgKCk7Ci0gICAgICB9IHdoaWxlICghZ3N0X3dhdmVuY19pc19jdWVfaWRfdW5pcXVlIChpZCwgd2F2ZW5jLT5jdWVzKSk7Ci0gICAgfQotICAgIGdzdF93YXZlbmNfcGFyc2VfY3VlICh3YXZlbmMsIGlkLCBlbnRyeSk7Ci0gICAgZ3N0X3dhdmVuY19wYXJzZV9sYWJsICh3YXZlbmMsIGlkLCBlbnRyeSk7Ci0gICAgZ3N0X3dhdmVuY19wYXJzZV9ub3RlICh3YXZlbmMsIGlkLCBlbnRyeSk7Ci0gICAgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KTsKLSAgfQotCi0gIC8qIGNvdW50IGN1ZXMgc2l6ZSAqLwotICBpZiAod2F2ZW5jLT5jdWVzKSB7Ci0gICAgY3Vlc19zaXplID0gMjQgKiBnX2xpc3RfbGVuZ3RoICh3YXZlbmMtPmN1ZXMpOwotICAgIHNpemUgKz0gMTIgKyBjdWVzX3NpemU7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZlbmMsICJjdWUncyBub3QgZm91bmQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgLyogY291bnQgbGFibHMgc2l6ZSAqLwotICBpZiAod2F2ZW5jLT5sYWJscykgewotICAgIGxpc3QgPSB3YXZlbmMtPmxhYmxzOwotICAgIHdoaWxlIChsaXN0KSB7Ci0gICAgICBHc3RXYXZFbmNMYWJsICpsYWJsOwotICAgICAgbGFibCA9IGxpc3QtPmRhdGE7Ci0gICAgICBsYWJsc19zaXplICs9IDggKyBHU1RfUk9VTkRfVVBfMiAobGFibC0+Y2h1bmtfZGF0YV9zaXplKTsKLSAgICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7Ci0gICAgfQotICAgIHNpemUgKz0gbGFibHNfc2l6ZTsKLSAgfQotICAvKiBjb3VudCBub3RlcyBzaXplICovCi0gIGlmICh3YXZlbmMtPm5vdGVzKSB7Ci0gICAgbGlzdCA9IHdhdmVuYy0+bm90ZXM7Ci0gICAgd2hpbGUgKGxpc3QpIHsKLSAgICAgIEdzdFdhdkVuY05vdGUgKm5vdGU7Ci0gICAgICBub3RlID0gbGlzdC0+ZGF0YTsKLSAgICAgIG5vdGVzX3NpemUgKz0gOCArIEdTVF9ST1VORF9VUF8yIChub3RlLT5jaHVua19kYXRhX3NpemUpOwotICAgICAgbGlzdCA9IGdfbGlzdF9uZXh0IChsaXN0KTsKLSAgICB9Ci0gICAgc2l6ZSArPSBub3Rlc19zaXplOwotICB9Ci0gIGlmICh3YXZlbmMtPmxhYmxzIHx8IHdhdmVuYy0+bm90ZXMpIHsKLSAgICBzaXplICs9IDEyOwotICB9Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgbWVtc2V0IChkYXRhLCAwLCBzaXplKTsKLQotICAvKiB3cml0ZSBDdWUgQ2h1bmsgKi8KLSAgaWYgKHdhdmVuYy0+Y3VlcykgewotICAgIG1lbWNweSAoZGF0YSwgKGdjaGFyICopICJjdWUgIiwgNCk7Ci0gICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSArIDQsIDQgKyBjdWVzX3NpemUpOwotICAgIEdTVF9XUklURV9VSU5UMzJfTEUgKGRhdGEgKyA4LCBuY3Vlcyk7Ci0gICAgZGF0YSArPSAxMjsKLSAgICBnc3Rfd2F2ZW5jX3dyaXRlX2N1ZXMgKCZkYXRhLCB3YXZlbmMtPmN1ZXMpOwotCi0gICAgLyogd3JpdGUgQXNzb2NpYXRlZCBEYXRhIExpc3QgQ2h1bmsgKi8KLSAgICBpZiAod2F2ZW5jLT5sYWJscyB8fCB3YXZlbmMtPm5vdGVzKSB7Ci0gICAgICBtZW1jcHkgKGRhdGEsIChnY2hhciAqKSAiTElTVCIsIDQpOwotICAgICAgR1NUX1dSSVRFX1VJTlQzMl9MRSAoZGF0YSArIDQsIDQgKyBsYWJsc19zaXplICsgbm90ZXNfc2l6ZSk7Ci0gICAgICBtZW1jcHkgKGRhdGEgKyA4LCAoZ2NoYXIgKikgImFkdGwiLCA0KTsKLSAgICAgIGRhdGEgKz0gMTI7Ci0gICAgICBpZiAod2F2ZW5jLT5sYWJscykKLSAgICAgICAgZ3N0X3dhdmVuY193cml0ZV9sYWJscyAoJmRhdGEsIHdhdmVuYy0+bGFibHMpOwotICAgICAgaWYgKHdhdmVuYy0+bm90ZXMpCi0gICAgICAgIGdzdF93YXZlbmNfd3JpdGVfbm90ZXMgKCZkYXRhLCB3YXZlbmMtPm5vdGVzKTsKLSAgICB9Ci0gIH0KLQotICAvKiBmcmVlIHJlc291cmNlcyAqLwotICBpZiAodG9jKQotICAgIGdzdF90b2NfdW5yZWYgKHRvYyk7Ci0gIGlmICh3YXZlbmMtPmN1ZXMpCi0gICAgZ19saXN0X2ZyZWVfZnVsbCAod2F2ZW5jLT5jdWVzLCBnX2ZyZWUpOwotICBpZiAod2F2ZW5jLT5sYWJscykKLSAgICBnX2xpc3RfZnJlZV9mdWxsICh3YXZlbmMtPmxhYmxzLCBnX2ZyZWUpOwotICBpZiAod2F2ZW5jLT5ub3RlcykKLSAgICBnX2xpc3RfZnJlZV9mdWxsICh3YXZlbmMtPm5vdGVzLCBnX2ZyZWUpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIHdhdmVuYy0+bWV0YV9sZW5ndGggKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLQotICByZXR1cm4gZ3N0X3BhZF9wdXNoICh3YXZlbmMtPnNyY3BhZCwgYnVmKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2ZW5jX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgR3N0V2F2RW5jICp3YXZlbmM7Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0gIEdzdFRvYyAqdG9jOwotCi0gIHdhdmVuYyA9IEdTVF9XQVZFTkMgKHBhcmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIGdzdF93YXZlbmNfc2lua19zZXRjYXBzIChwYWQsIGNhcHMpOwotCi0gICAgICAvKiBoYXZlIG91ciBvd24gc3JjIGNhcHMgKi8KLSAgICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX0VWRU5UX0VPUzoKLSAgICB7Ci0gICAgICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZlbmMsICJnb3QgRU9TIik7Ci0KLSAgICAgIGZsb3cgPSBnc3Rfd2F2ZW5jX3dyaXRlX3RvYyAod2F2ZW5jKTsKLSAgICAgIGlmIChmbG93ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2ZW5jLCAiZXJyb3IgcHVzaGluZyB0b2M6ICVzIiwKLSAgICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChmbG93KSk7Ci0gICAgICB9Ci0gICAgICBmbG93ID0gZ3N0X3dhdmVuY193cml0ZV90YWdzICh3YXZlbmMpOwotICAgICAgaWYgKGZsb3cgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZlbmMsICJlcnJvciBwdXNoaW5nIHRhZ3M6ICVzIiwKLSAgICAgICAgICAgIGdzdF9mbG93X2dldF9uYW1lIChmbG93KSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHdyaXRlIGhlYWRlciB3aXRoIGNvcnJlY3QgbGVuZ3RoIHZhbHVlcyAqLwotICAgICAgZ3N0X3dhdmVuY19wdXNoX2hlYWRlciAod2F2ZW5jKTsKLQotICAgICAgLyogd2UncmUgZG9uZSB3aXRoIHRoaXMgZmlsZSAqLwotICAgICAgd2F2ZW5jLT5maW5pc2hlZF9wcm9wZXJseSA9IFRSVUU7Ci0KLSAgICAgIC8qIGFuZCBmb3J3YXJkIHRoZSBFT1MgZXZlbnQgKi8KLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9TRUdNRU5UOgotICAgICAgLyogSnVzdCBkcm9wIGl0LCBpdCdzIHByb2JhYmx5IGluIFRJTUUgZm9ybWF0Ci0gICAgICAgKiBhbnl3YXkuIFdlJ2xsIHNlbmQgb3VyIG93biBuZXdzZWdtZW50IGV2ZW50ICovCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0VWRU5UX1RPQzoKLSAgICAgIGdzdF9ldmVudF9wYXJzZV90b2MgKGV2ZW50LCAmdG9jLCBOVUxMKTsKLSAgICAgIGlmICh0b2MpIHsKLSAgICAgICAgaWYgKHdhdmVuYy0+dG9jICE9IHRvYykgewotICAgICAgICAgIGlmICh3YXZlbmMtPnRvYykKLSAgICAgICAgICAgIGdzdF90b2NfdW5yZWYgKHdhdmVuYy0+dG9jKTsKLSAgICAgICAgICB3YXZlbmMtPnRvYyA9IHRvYzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfdG9jX3VucmVmICh0b2MpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXMgPSBnc3RfcGFkX2V2ZW50X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBldmVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9FVkVOVF9UQUc6Ci0gICAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ3MpOwotICAgICAgaWYgKHRhZ3MpIHsKLSAgICAgICAgaWYgKHdhdmVuYy0+dGFncyAhPSB0YWdzKSB7Ci0gICAgICAgICAgaWYgKHdhdmVuYy0+dGFncykKLSAgICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAod2F2ZW5jLT50YWdzKTsKLSAgICAgICAgICB3YXZlbmMtPnRhZ3MgPSBnc3RfdGFnX2xpc3RfcmVmICh0YWdzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmVzID0gZ3N0X3BhZF9ldmVudF9kZWZhdWx0IChwYWQsIHBhcmVudCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAocGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF93YXZlbmNfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFdhdkVuYyAqd2F2ZW5jID0gR1NUX1dBVkVOQyAocGFyZW50KTsKLSAgR3N0Rmxvd1JldHVybiBmbG93ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgaWYgKHdhdmVuYy0+Y2hhbm5lbHMgPD0gMCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHdhdmVuYywgIkdvdCBkYXRhIHdpdGhvdXQgY2FwcyIpOwotICAgIHJldHVybiBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgfQotCi0gIGlmIChHX1VOTElLRUxZICghd2F2ZW5jLT5zZW50X2hlYWRlcikpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9wYWRfZ2V0X2FsbG93ZWRfY2FwcyAod2F2ZW5jLT5zcmNwYWQpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAiYWxsb3dlZCBzcmMgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgIGlmICghZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKSB7Ci0gICAgICBjYXBzID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKGNhcHMpOwotICAgIH0KLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gICAgd2F2ZW5jLT51c2VfcmY2NCA9IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby94LXJmNjQiKTsKLQotICAgIGdzdF9wYWRfc2V0X2NhcHMgKHdhdmVuYy0+c3JjcGFkLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgICAvKiBzdGFydGluZyBhIGZpbGUsIG1lYW5zIHdlIGhhdmUgdG8gZmluaXNoIGl0IHByb3Blcmx5ICovCi0gICAgd2F2ZW5jLT5maW5pc2hlZF9wcm9wZXJseSA9IEZBTFNFOwotCi0gICAgLyogcHVzaCBpbml0aWFsIGJvZ3VzIGhlYWRlciwgaXQgd2lsbCBiZSB1cGRhdGVkIG9uIEVPUyAqLwotICAgIGZsb3cgPSBnc3Rfd2F2ZW5jX3B1c2hfaGVhZGVyICh3YXZlbmMpOwotICAgIGlmIChmbG93ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdmVuYywgImVycm9yIHB1c2hpbmcgaGVhZGVyOiAlcyIsCi0gICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKGZsb3cpKTsKLSAgICAgIHJldHVybiBmbG93OwotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZlbmMsICJ3cm90ZSBkdW1teSBoZWFkZXIiKTsKLSAgICB3YXZlbmMtPmF1ZGlvX2xlbmd0aCA9IDA7Ci0gICAgd2F2ZW5jLT5zZW50X2hlYWRlciA9IFRSVUU7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAod2F2ZW5jLAotICAgICAgInB1c2hpbmcgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyByYXcgYXVkaW8sIHRzPSUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpKSk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChidWYpOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gZ2V0X2hlYWRlcl9sZW4gKHdhdmVuYykgKyB3YXZlbmMtPmF1ZGlvX2xlbmd0aDsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gR1NUX0JVRkZFUl9PRkZTRVRfTk9ORTsKLQotICB3YXZlbmMtPmF1ZGlvX2xlbmd0aCArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gIGlmICh3YXZlbmMtPmNoYW5uZWxfbWFzayAhPSAwICYmCi0gICAgICAhZ3N0X2F1ZGlvX2J1ZmZlcl9yZW9yZGVyX2NoYW5uZWxzIChidWYsIHdhdmVuYy0+YXVkaW9fZm9ybWF0LAotICAgICAgICAgIHdhdmVuYy0+Y2hhbm5lbHMsIHdhdmVuYy0+c3JjUG9zLCB3YXZlbmMtPmRlc3RQb3MpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZlbmMsICJDb3VsZCBub3QgcmVvcmRlciBjaGFubmVscyIpOwotICB9Ci0KLSAgZmxvdyA9IGdzdF9wYWRfcHVzaCAod2F2ZW5jLT5zcmNwYWQsIGJ1Zik7Ci0KLSAgcmV0dXJuIGZsb3c7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3dhdmVuY19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0gIEdzdFdhdkVuYyAqd2F2ZW5jID0gR1NUX1dBVkVOQyAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICB3YXZlbmMtPmZvcm1hdCA9IDA7Ci0gICAgICB3YXZlbmMtPmNoYW5uZWxzID0gMDsKLSAgICAgIHdhdmVuYy0+d2lkdGggPSAwOwotICAgICAgd2F2ZW5jLT5yYXRlID0gMDsKLSAgICAgIC8qIHVzZSBib2d1cyBzaXplIGluaXRpYWxseSwgd2UnbGwgd3JpdGUgdGhlIHJlYWwKLSAgICAgICAqIGhlYWRlciB3aGVuIHdlIGdldCBFT1MgYW5kIGtub3cgdGhlIGV4YWN0IGxlbmd0aCAqLwotICAgICAgd2F2ZW5jLT5hdWRpb19sZW5ndGggPSAweDdGRkYwMDAwOwotICAgICAgd2F2ZW5jLT5tZXRhX2xlbmd0aCA9IDA7Ci0gICAgICB3YXZlbmMtPnNlbnRfaGVhZGVyID0gRkFMU0U7Ci0gICAgICAvKiBpdHMgdHJ1ZSBiZWNhdXNlIHdlIGhhdmVuJ3Qgd3JpdGVuIGFueXRoaW5nICovCi0gICAgICB3YXZlbmMtPmZpbmlzaGVkX3Byb3Blcmx5ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotICBpZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKLSAgICByZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBpZiAoIXdhdmVuYy0+ZmluaXNoZWRfcHJvcGVybHkpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfV0FSTklORyAod2F2ZW5jLCBTVFJFQU0sIE1VWCwKLSAgICAgICAgICAgICgiV2F2IHN0cmVhbSBub3QgZmluaXNoZWQgcHJvcGVybHkiKSwKLSAgICAgICAgICAgICgiV2F2IHN0cmVhbSBub3QgZmluaXNoZWQgcHJvcGVybHksIG5vIEVPUyByZWNlaXZlZCAiCi0gICAgICAgICAgICAgICAgImJlZm9yZSBzaHV0ZG93biIpKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAod2F2ZW5jLCAidGFnczogJXAiLCB3YXZlbmMtPnRhZ3MpOwotICAgICAgaWYgKHdhdmVuYy0+dGFncykgewotICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHdhdmVuYy0+dGFncyk7Ci0gICAgICAgIHdhdmVuYy0+dGFncyA9IE5VTEw7Ci0gICAgICB9Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZlbmMsICJ0b2M6ICVwIiwgd2F2ZW5jLT50b2MpOwotICAgICAgaWYgKHdhdmVuYy0+dG9jKSB7Ci0gICAgICAgIGdzdF90b2NfdW5yZWYgKHdhdmVuYy0+dG9jKTsKLSAgICAgICAgd2F2ZW5jLT50b2MgPSBOVUxMOwotICAgICAgfQotICAgICAgZ3N0X3RhZ19zZXR0ZXJfcmVzZXRfdGFncyAoR1NUX1RBR19TRVRURVIgKHdhdmVuYykpOwotICAgICAgZ3N0X3RvY19zZXR0ZXJfcmVzZXQgKEdTVF9UT0NfU0VUVEVSICh3YXZlbmMpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ3YXZlbmMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgR1NUX1RZUEVfV0FWRU5DKTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIHdhdmVuYywKLSAgICAiRW5jb2RlIHJhdyBhdWRpbyBpbnRvIFdBViIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oIGIvZ3N0L3dhdmVuYy9nc3R3YXZlbmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFiMzhiYi4uMDAwMDAwMAotLS0gYS9nc3Qvd2F2ZW5jL2dzdHdhdmVuYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElhaW4gSG9sbWVzIDxpYWluQHByZXR0eXBlb3BsZS5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1dBVl9FTkNfSF9fCi0jZGVmaW5lIF9fR1NUX1dBVl9FTkNfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1dBVkVOQyBcCi0gIChnc3Rfd2F2ZW5jX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9XQVZFTkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9XQVZFTkMsR3N0V2F2RW5jKSkKLSNkZWZpbmUgR1NUX1dBVkVOQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9XQVZFTkMsR3N0V2F2RW5jQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfV0FWRU5DKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfV0FWRU5DKSkKLSNkZWZpbmUgR1NUX0lTX1dBVkVOQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9XQVZFTkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0V2F2RW5jIEdzdFdhdkVuYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RXYXZFbmNDbGFzcyBHc3RXYXZFbmNDbGFzczsKLQotc3RydWN0IF9Hc3RXYXZFbmMgewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgR3N0UGFkICAgICpzaW5rcGFkOwotICBHc3RQYWQgICAgKnNyY3BhZDsKLQotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RUb2MgICAgKnRvYzsKLSAgR0xpc3QgICAgICpjdWVzOwotICBHTGlzdCAgICAgKmxhYmxzOwotICBHTGlzdCAgICAgKm5vdGVzOwotCi0gIC8qIHVzZWZ1bCBhdWRpbyBkYXRhICovCi0gIEdzdEF1ZGlvRm9ybWF0IGF1ZGlvX2Zvcm1hdDsKLSAgZ3VpbnQxNiAgICBmb3JtYXQ7Ci0gIGd1aW50ICAgICAgd2lkdGg7Ci0gIGd1aW50ICAgICAgcmF0ZTsKLSAgZ3VpbnQgICAgICBjaGFubmVsczsKLSAgZ3VpbnQ2NCAgICBjaGFubmVsX21hc2s7Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHNyY1Bvc1s2NF07Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGRlc3RQb3NbNjRdOwotICAKLSAgLyogZGF0YSBzaXplcyAqLwotICBndWludDY0ICAgIGF1ZGlvX2xlbmd0aDsKLSAgZ3VpbnQzMiAgICBtZXRhX2xlbmd0aDsKLQotICBnYm9vbGVhbiAgIHVzZV9yZjY0OwotICBnYm9vbGVhbiAgIHNlbnRfaGVhZGVyOwotICBnYm9vbGVhbiAgIGZpbmlzaGVkX3Byb3Blcmx5OwotfTsKLQotc3RydWN0IF9Hc3RXYXZFbmNDbGFzcyB7Ci0gIEdzdEVsZW1lbnRDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfd2F2ZW5jX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1dBVl9FTkNfSF9fICovCmRpZmYgLS1naXQgYS9nc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW0gYi9nc3Qvd2F2cGFyc2UvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNDI0N2UuLjAwMDAwMDAKLS0tIGEvZ3N0L3dhdnBhcnNlL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0d2F2cGFyc2UubGEKLQotbGliZ3N0d2F2cGFyc2VfbGFfU09VUkNFUyA9IGdzdHdhdnBhcnNlLmMKLWxpYmdzdHdhdnBhcnNlX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi1saWJnc3R3YXZwYXJzZV9sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdHJpZmYtQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0YXVkaW8tQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0dGFnLUBHU1RfQVBJX1ZFUlNJT05AIFwKLQktbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpIFwKLQkkKExJQk0pCi1saWJnc3R3YXZwYXJzZV9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R3YXZwYXJzZV9sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHdhdnBhcnNlLmgKZGlmZiAtLWdpdCBhL2dzdC93YXZwYXJzZS9NYWtlZmlsZS5pbiBiL2dzdC93YXZwYXJzZS9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkZTc0MS4uMDAwMDAwMAotLS0gYS9nc3Qvd2F2cGFyc2UvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MjMgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3dhdnBhcnNlCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0d2F2cGFyc2VfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHdhdnBhcnNlX2xhX09CSkVDVFMgPSBsaWJnc3R3YXZwYXJzZV9sYS1nc3R3YXZwYXJzZS5sbwotbGliZ3N0d2F2cGFyc2VfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0d2F2cGFyc2VfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHdhdnBhcnNlX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0d2F2cGFyc2VfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3R3YXZwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3R3YXZwYXJzZV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R3YXZwYXJzZV9sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R3YXZwYXJzZV9sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R3YXZwYXJzZS5sYQotbGliZ3N0d2F2cGFyc2VfbGFfU09VUkNFUyA9IGdzdHdhdnBhcnNlLmMKLWxpYmdzdHdhdnBhcnNlX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpCi0KLWxpYmdzdHdhdnBhcnNlX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0cmlmZi1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JLWxnc3R0YWctQEdTVF9BUElfVkVSU0lPTkAgXAotCS1sZ3N0cGJ1dGlscy1AR1NUX0FQSV9WRVJTSU9OQCBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCSQoTElCTSkKLQotbGliZ3N0d2F2cGFyc2VfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0d2F2cGFyc2VfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0d2F2cGFyc2UuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3dhdnBhcnNlL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IGdzdC93YXZwYXJzZS9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHdhdnBhcnNlLmxhOiAkKGxpYmdzdHdhdnBhcnNlX2xhX09CSkVDVFMpICQobGliZ3N0d2F2cGFyc2VfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHdhdnBhcnNlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3R3YXZwYXJzZV9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0d2F2cGFyc2VfbGFfT0JKRUNUUykgJChsaWJnc3R3YXZwYXJzZV9sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHdhdnBhcnNlX2xhLWdzdHdhdnBhcnNlLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R3YXZwYXJzZV9sYS1nc3R3YXZwYXJzZS5sbzogZ3N0d2F2cGFyc2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHdhdnBhcnNlX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHdhdnBhcnNlX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R3YXZwYXJzZV9sYS1nc3R3YXZwYXJzZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0d2F2cGFyc2VfbGEtZ3N0d2F2cGFyc2UuVHBvIC1jIC1vIGxpYmdzdHdhdnBhcnNlX2xhLWdzdHdhdnBhcnNlLmxvIGB0ZXN0IC1mICdnc3R3YXZwYXJzZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZwYXJzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R3YXZwYXJzZV9sYS1nc3R3YXZwYXJzZS5UcG8gJChERVBESVIpL2xpYmdzdHdhdnBhcnNlX2xhLWdzdHdhdnBhcnNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHdhdnBhcnNlLmMnIG9iamVjdD0nbGliZ3N0d2F2cGFyc2VfbGEtZ3N0d2F2cGFyc2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZwYXJzZV9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R3YXZwYXJzZV9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R3YXZwYXJzZV9sYS1nc3R3YXZwYXJzZS5sbyBgdGVzdCAtZiAnZ3N0d2F2cGFyc2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2cGFyc2UuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9nc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuYyBiL2dzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWZkNGE3Li4wMDAwMDAwCi0tLSBhL2dzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkyNCArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogMiAtKi0gKi8KLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MTk5OT4gRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IE5va2lhIENvcnBvcmF0aW9uLCBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC13YXZwYXJzZQotICoKLSAqIFBhcnNlIGEgLndhdiBmaWxlIGludG8gcmF3IG9yIGNvbXByZXNzZWQgYXVkaW8uCi0gKgotICogV2F2cGFyc2Ugc3VwcG9ydHMgYm90aCBwdXNoIGFuZCBwdWxsIG1vZGUgb3BlcmF0aW9ucywgbWFraW5nIGl0IHBvc3NpYmxlIHRvCi0gKiBzdHJlYW0gZnJvbSBhIG5ldHdvcmsgc291cmNlLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBmaWxlc3JjIGxvY2F0aW9uPXNpbmUud2F2ICEgd2F2cGFyc2UgISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogXXwgUmVhZCBhIHdhdiBmaWxlIGFuZCBvdXRwdXQgdG8gdGhlIHNvdW5kY2FyZCB1c2luZyB0aGUgQUxTQSBlbGVtZW50LiBUaGUKLSAqIHdhdiBmaWxlIGlzIGFzc3VtZWQgdG8gY29udGFpbiByYXcgdW5jb21wcmVzc2VkIHNhbXBsZXMuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZ25vbWV2ZnNzcmMgbG9jYXRpb249aHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW5lLndhdiAhIHF1ZXVlICEgd2F2cGFyc2UgISBhdWRpb2NvbnZlcnQgISBhbHNhc2luawotICogXXwgU3RyZWFtIGRhdGEgZnJvbSBhIG5ldHdvcmsgdXJsLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0vKgotICogVE9ETzoKLSAqIGh0dHA6Ly9yZXBsYXlnYWluLmh5ZHJvZ2VuYXVkaW8ub3JnL2ZpbGVfZm9ybWF0X3dhdi5odG1sCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZ3N0d2F2cGFyc2UuaCIKLSNpbmNsdWRlICJnc3QvcmlmZi9yaWZmLW1lZGlhLmgiCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0dHlwZWZpbmRoZWxwZXIuaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9kZXNjcmlwdGlvbnMuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHdhdnBhcnNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUICh3YXZwYXJzZV9kZWJ1ZykKLQotLyogRGF0YSBzaXplIGNodW5rIG9mIFJGNjQsCi0gKiBzZWUgaHR0cDovL3RlY2guZWJ1LmNoL2RvY3MvdGVjaC90ZWNoMzMwNi0yMDA5LnBkZiAqLwotI2RlZmluZSBHU1RfUlM2NF9UQUdfRFM2NCBHU1RfTUFLRV9GT1VSQ0MgKCdkJywncycsJzYnLCc0JykKLQotc3RhdGljIHZvaWQgZ3N0X3dhdnBhcnNlX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3dhdnBhcnNlX3NpbmtfYWN0aXZhdGUgKEdzdFBhZCAqIHNpbmtwYWQsCi0gICAgR3N0T2JqZWN0ICogcGFyZW50KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBzaW5rcGFkLAotICAgIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpOwotc3RhdGljIGdib29sZWFuIGdzdF93YXZwYXJzZV9zZW5kX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiBnc3Rfd2F2cGFyc2VfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF93YXZwYXJzZV9wYWRfcXVlcnkgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpOwotc3RhdGljIGdib29sZWFuIGdzdF93YXZwYXJzZV9wYWRfY29udmVydCAoR3N0UGFkICogcGFkLCBHc3RGb3JtYXQgc3JjX2Zvcm1hdCwKLSAgICBnaW50NjQgc3JjX3ZhbHVlLCBHc3RGb3JtYXQgKiBkZXN0X2Zvcm1hdCwgZ2ludDY0ICogZGVzdF92YWx1ZSk7Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF93YXZwYXJzZV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2cGFyc2Vfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0RXZlbnQgKiBldmVudCk7Ci1zdGF0aWMgdm9pZCBnc3Rfd2F2cGFyc2VfbG9vcCAoR3N0UGFkICogcGFkKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2cGFyc2Vfc3JjcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKLSAgICBHc3RFdmVudCAqIGV2ZW50KTsKLQotc3RhdGljIHZvaWQgZ3N0X3dhdnBhcnNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF93YXZwYXJzZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLSNkZWZpbmUgREVGQVVMVF9JR05PUkVfTEVOR1RIIEZBTFNFCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0lHTk9SRV9MRU5HVEgsCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZV9mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtd2F2IikKLSAgICApOwotCi0jZGVmaW5lIERFQlVHX0lOSVQgXAotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAod2F2cGFyc2VfZGVidWcsICJ3YXZwYXJzZSIsIDAsICJXQVYgcGFyc2VyIik7Ci0KLSNkZWZpbmUgZ3N0X3dhdnBhcnNlX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RXYXZQYXJzZSwgZ3N0X3dhdnBhcnNlLCBHU1RfVFlQRV9FTEVNRU5ULAotICAgIERFQlVHX0lOSVQpOwotCi10eXBlZGVmIHN0cnVjdAotewotICAvKiBPZmZzZXQgU2l6ZSAgICBEZXNjcmlwdGlvbiAgIFZhbHVlCi0gICAqIDB4MDAgICA0ICAgICAgIElEICAgICAgICAgICAgdW5pcXVlIGlkZW50aWZpY2F0aW9uIHZhbHVlCi0gICAqIDB4MDQgICA0ICAgICAgIFBvc2l0aW9uICAgICAgcGxheSBvcmRlciBwb3NpdGlvbgotICAgKiAweDA4ICAgNCAgICAgICBEYXRhIENodW5rIElEIFJJRkYgSUQgb2YgY29ycmVzcG9uZGluZyBkYXRhIGNodW5rCi0gICAqIDB4MGMgICA0ICAgICAgIENodW5rIFN0YXJ0ICAgQnl0ZSBPZmZzZXQgb2YgRGF0YSBDaHVuayAqCi0gICAqIDB4MTAgICA0ICAgICAgIEJsb2NrIFN0YXJ0ICAgQnl0ZSBPZmZzZXQgdG8gc2FtcGxlIG9mIEZpcnN0IENoYW5uZWwKLSAgICogMHgxNCAgIDQgICAgICAgU2FtcGxlIE9mZnNldCBCeXRlIE9mZnNldCB0byBzYW1wbGUgYnl0ZSBvZiBGaXJzdCBDaGFubmVsCi0gICAqLwotICBndWludDMyIGlkOwotICBndWludDMyIHBvc2l0aW9uOwotICBndWludDMyIGRhdGFfY2h1bmtfaWQ7Ci0gIGd1aW50MzIgY2h1bmtfc3RhcnQ7Ci0gIGd1aW50MzIgYmxvY2tfc3RhcnQ7Ci0gIGd1aW50MzIgc2FtcGxlX29mZnNldDsKLX0gR3N0V2F2UGFyc2VDdWU7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIC8qIE9mZnNldCBTaXplICAgIERlc2NyaXB0aW9uICAgICBWYWx1ZQotICAgKiAweDA4ICAgNCAgICAgICBDdWUgUG9pbnQgSUQgICAgMCAtIDB4RkZGRkZGRkYKLSAgICogMHgwYyAgICAgICAgICAgVGV4dAotICAgKi8KLSAgZ3VpbnQzMiBjdWVfcG9pbnRfaWQ7Ci0gIGdjaGFyICp0ZXh0OwotfSBHc3RXYXZQYXJzZUxhYmwsIEdzdFdhdlBhcnNlTm90ZTsKLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYXJzZV9jbGFzc19pbml0IChHc3RXYXZQYXJzZUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7Ci0gIEdzdFBhZFRlbXBsYXRlICpzcmNfdGVtcGxhdGU7Ci0KLSAgZ3N0ZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIG9iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gZ3N0X3dhdnBhcnNlX2Rpc3Bvc2U7Ci0KLSAgb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfd2F2cGFyc2Vfc2V0X3Byb3BlcnR5OwotICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF93YXZwYXJzZV9nZXRfcHJvcGVydHk7Ci0KLSAgLyoqCi0gICAqIEdzdFdhdlBhcnNlOmlnbm9yZS1sZW5ndGg6Ci0gICAqCi0gICAqIFRoaXMgc2VsZWN0cyB3aGV0aGVyIHRoZSBsZW5ndGggZm91bmQgaW4gYSBkYXRhIGNodW5rCi0gICAqIHNob3VsZCBiZSBpZ25vcmVkLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIHN0cmVhbWVkIGF1ZGlvCi0gICAqIHdoZXJlIHRoZSBsZW5ndGggaXMgdW5rbm93biB1bnRpbCB0aGUgZW5kIG9mIHN0cmVhbWluZywKLSAgICogYW5kIHZhcmlvdXMgc29mdHdhcmUvaGFyZHdhcmUganVzdCBwdXRzIHNvbWUgcmFuZG9tIHZhbHVlCi0gICAqIGluIHRoZXJlIGFuZCBob3BlcyBpdCBkb2Vzbid0IGJyZWFrIHRvbyBtdWNoLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAob2JqZWN0X2NsYXNzLCBQUk9QX0lHTk9SRV9MRU5HVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImlnbm9yZS1sZW5ndGgiLAotICAgICAgICAgICJJZ25vcmUgbGVuZ3RoIiwKLSAgICAgICAgICAiSWdub3JlIGxlbmd0aCBmcm9tIHRoZSBXYXZlIGhlYWRlciIsCi0gICAgICAgICAgREVGQVVMVF9JR05PUkVfTEVOR1RILCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpCi0gICAgICApOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF93YXZwYXJzZV9jaGFuZ2Vfc3RhdGU7Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPnNlbmRfZXZlbnQgPSBnc3Rfd2F2cGFyc2Vfc2VuZF9ldmVudDsKLQotICAvKiByZWdpc3RlciBwYWRzICovCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLAotICAgICAgJnNpbmtfdGVtcGxhdGVfZmFjdG9yeSk7Ci0KLSAgc3JjX3RlbXBsYXRlID0gZ3N0X3BhZF90ZW1wbGF0ZV9uZXcgKCJzcmMiLCBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLCBnc3RfcmlmZl9jcmVhdGVfYXVkaW9fdGVtcGxhdGVfY2FwcyAoKSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsIHNyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIldBViBhdWRpbyBkZW11eGVyIiwKLSAgICAgICJDb2RlYy9EZW11eGVyL0F1ZGlvIiwKLSAgICAgICJQYXJzZSBhIC53YXYgZmlsZSBpbnRvIHJhdyBhdWRpbyIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYXJzZV9yZXNldCAoR3N0V2F2UGFyc2UgKiB3YXYpCi17Ci0gIHdhdi0+c3RhdGUgPSBHU1RfV0FWUEFSU0VfU1RBUlQ7Ci0KLSAgLyogVGhlc2Ugd2lsbCBhbGwgYmUgc2V0IGNvcnJlY3RseSBpbiB0aGUgZm10IGNodW5rICovCi0gIHdhdi0+ZGVwdGggPSAwOwotICB3YXYtPnJhdGUgPSAwOwotICB3YXYtPndpZHRoID0gMDsKLSAgd2F2LT5jaGFubmVscyA9IDA7Ci0gIHdhdi0+YmxvY2thbGlnbiA9IDA7Ci0gIHdhdi0+YnBzID0gMDsKLSAgd2F2LT5mYWN0ID0gMDsKLSAgd2F2LT5vZmZzZXQgPSAwOwotICB3YXYtPmVuZF9vZmZzZXQgPSAwOwotICB3YXYtPmRhdGFsZWZ0ID0gMDsKLSAgd2F2LT5kYXRhc2l6ZSA9IDA7Ci0gIHdhdi0+ZGF0YXN0YXJ0ID0gMDsKLSAgd2F2LT5kdXJhdGlvbiA9IDA7Ci0gIHdhdi0+Z290X2ZtdCA9IEZBTFNFOwotICB3YXYtPmZpcnN0ID0gVFJVRTsKLQotICBpZiAod2F2LT5zZWVrX2V2ZW50KQotICAgIGdzdF9ldmVudF91bnJlZiAod2F2LT5zZWVrX2V2ZW50KTsKLSAgd2F2LT5zZWVrX2V2ZW50ID0gTlVMTDsKLSAgaWYgKHdhdi0+YWRhcHRlcikgewotICAgIGdzdF9hZGFwdGVyX2NsZWFyICh3YXYtPmFkYXB0ZXIpOwotICAgIGdfb2JqZWN0X3VucmVmICh3YXYtPmFkYXB0ZXIpOwotICAgIHdhdi0+YWRhcHRlciA9IE5VTEw7Ci0gIH0KLSAgaWYgKHdhdi0+dGFncykKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHdhdi0+dGFncyk7Ci0gIHdhdi0+dGFncyA9IE5VTEw7Ci0gIGlmICh3YXYtPnRvYykKLSAgICBnc3RfdG9jX3VucmVmICh3YXYtPnRvYyk7Ci0gIHdhdi0+dG9jID0gTlVMTDsKLSAgaWYgKHdhdi0+Y3VlcykKLSAgICBnX2xpc3RfZnJlZV9mdWxsICh3YXYtPmN1ZXMsIGdfZnJlZSk7Ci0gIHdhdi0+Y3VlcyA9IE5VTEw7Ci0gIGlmICh3YXYtPmxhYmxzKQotICAgIGdfbGlzdF9mcmVlX2Z1bGwgKHdhdi0+bGFibHMsIGdfZnJlZSk7Ci0gIHdhdi0+bGFibHMgPSBOVUxMOwotICBpZiAod2F2LT5jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmICh3YXYtPmNhcHMpOwotICB3YXYtPmNhcHMgPSBOVUxMOwotICBpZiAod2F2LT5zdGFydF9zZWdtZW50KQotICAgIGdzdF9ldmVudF91bnJlZiAod2F2LT5zdGFydF9zZWdtZW50KTsKLSAgd2F2LT5zdGFydF9zZWdtZW50ID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYXJzZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RXYXZQYXJzZSAqd2F2ID0gR1NUX1dBVlBBUlNFIChvYmplY3QpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIldBVjogRGlzcG9zZSIpOwotICBnc3Rfd2F2cGFyc2VfcmVzZXQgKHdhdik7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFyc2VfaW5pdCAoR3N0V2F2UGFyc2UgKiB3YXZwYXJzZSkKLXsKLSAgZ3N0X3dhdnBhcnNlX3Jlc2V0ICh3YXZwYXJzZSk7Ci0KLSAgLyogc2luayAqLwotICB3YXZwYXJzZS0+c2lua3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmtfdGVtcGxhdGVfZmFjdG9yeSwgInNpbmsiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZhdGVfZnVuY3Rpb24gKHdhdnBhcnNlLT5zaW5rcGFkLAotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZwYXJzZV9zaW5rX2FjdGl2YXRlKSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbiAod2F2cGFyc2UtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdnBhcnNlX3NpbmtfYWN0aXZhdGVfbW9kZSkpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAod2F2cGFyc2UtPnNpbmtwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdnBhcnNlX2NoYWluKSk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uICh3YXZwYXJzZS0+c2lua3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFyc2Vfc2lua19ldmVudCkpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVF9DQVNUICh3YXZwYXJzZSksIHdhdnBhcnNlLT5zaW5rcGFkKTsKLQotICAvKiBzcmMgKi8KLSAgd2F2cGFyc2UtPnNyY3BhZCA9Ci0gICAgICBnc3RfcGFkX25ld19mcm9tX3RlbXBsYXRlIChnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlCi0gICAgICAoR1NUX0VMRU1FTlRfR0VUX0NMQVNTICh3YXZwYXJzZSksICJzcmMiKSwgInNyYyIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzICh3YXZwYXJzZS0+c3JjcGFkKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHdhdnBhcnNlLT5zcmNwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdnBhcnNlX3BhZF9xdWVyeSkpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAod2F2cGFyc2UtPnNyY3BhZCwKLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2cGFyc2Vfc3JjcGFkX2V2ZW50KSk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UX0NBU1QgKHdhdnBhcnNlKSwgd2F2cGFyc2UtPnNyY3BhZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhcnNlX3BhcnNlX2ZpbGVfaGVhZGVyIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBndWludDMyIGRvY3R5cGU7Ci0KLSAgaWYgKCFnc3RfcmlmZl9wYXJzZV9maWxlX2hlYWRlciAoZWxlbWVudCwgYnVmLCAmZG9jdHlwZSkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmIChkb2N0eXBlICE9IEdTVF9SSUZGX1JJRkZfV0FWRSkKLSAgICBnb3RvIG5vdF93YXY7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1ub3Rfd2F2OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGVsZW1lbnQsIFNUUkVBTSwgV1JPTkdfVFlQRSwgKE5VTEwpLAotICAgICAgICAoIkZpbGUgaXMgbm90IGEgV0FWRSBmaWxlOiAweCUiIEdfR0lOVDMyX01PRElGSUVSICJ4IiwgZG9jdHlwZSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3dhdnBhcnNlX3N0cmVhbV9pbml0IChHc3RXYXZQYXJzZSAqIHdhdikKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gTlVMTDsKLQotICBpZiAoKHJlcyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAod2F2LT5zaW5rcGFkLAotICAgICAgICAgICAgICB3YXYtPm9mZnNldCwgMTIsICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICByZXR1cm4gcmVzOwotICBlbHNlIGlmICghZ3N0X3dhdnBhcnNlX3BhcnNlX2ZpbGVfaGVhZGVyIChHU1RfRUxFTUVOVF9DQVNUICh3YXYpLCBidWYpKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLQotICB3YXYtPm9mZnNldCArPSAxMjsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhcnNlX3RpbWVfdG9fYnl0ZXBvcyAoR3N0V2F2UGFyc2UgKiB3YXYsIGdpbnQ2NCB0cywgZ2ludDY0ICogYnl0ZXBvcykKLXsKLSAgLyogLTEgYWx3YXlzIG1hcHMgdG8gLTEgKi8KLSAgaWYgKHRzID09IC0xKSB7Ci0gICAgKmJ5dGVwb3MgPSAtMTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIDAgYWx3YXlzIG1hcHMgdG8gMCAqLwotICBpZiAodHMgPT0gMCkgewotICAgICpieXRlcG9zID0gMDsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmICh3YXYtPmJwcyA+IDApIHsKLSAgICAqYnl0ZXBvcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICh0cywgKGd1aW50NjQpIHdhdi0+YnBzLCBHU1RfU0VDT05EKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfSBlbHNlIGlmICh3YXYtPmZhY3QpIHsKLSAgICBndWludDY0IGJwcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAod2F2LT5kYXRhc2l6ZSwgd2F2LT5yYXRlLCB3YXYtPmZhY3QpOwotICAgICpieXRlcG9zID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKHRzLCBicHMsIEdTVF9TRUNPTkQpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGVyZm9ybSBzZWVrcyBvbiB0aGUgZWxlbWVudC4KLSAqCi0gKiBJdCBhbHNvIHdvcmtzIHdoZW4gZXZlbnQgaXMgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGp1c3QKLSAqIHN0YXJ0IGZyb20gdGhlIGxhc3QgY29uZmlndXJlZCBzZWdtZW50LiBUaGlzIHRlY2huaXF1ZSBpcwotICogdXNlZCB3aGVuIGFjdGl2YXRpbmcgdGhlIGVsZW1lbnQgYW5kIHRvIHBlcmZvcm0gdGhlIHNlZWsgaW4KLSAqIFJFQURZLgotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9wZXJmb3JtX3NlZWsgKEdzdFdhdlBhcnNlICogd2F2LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0gIGdkb3VibGUgcmF0ZTsKLSAgR3N0Rm9ybWF0IGZvcm1hdCwgYmZvcm1hdDsKLSAgR3N0U2Vla0ZsYWdzIGZsYWdzOwotICBHc3RTZWVrVHlwZSBjdXJfdHlwZSA9IEdTVF9TRUVLX1RZUEVfTk9ORSwgc3RvcF90eXBlOwotICBnaW50NjQgY3VyLCBzdG9wLCB1cHN0cmVhbV9zaXplOwotICBnYm9vbGVhbiBmbHVzaDsKLSAgZ2Jvb2xlYW4gdXBkYXRlOwotICBHc3RTZWdtZW50IHNlZWtzZWdtZW50ID0geyAwLCB9OwotICBnaW50NjQgbGFzdF9zdG9wOwotICBndWludDMyIHNlcW51bSA9IDA7Ci0KLSAgaWYgKGV2ZW50KSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiZG9pbmcgc2VlayB3aXRoIGV2ZW50Iik7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2Vfc2VlayAoZXZlbnQsICZyYXRlLCAmZm9ybWF0LCAmZmxhZ3MsCi0gICAgICAgICZjdXJfdHlwZSwgJmN1ciwgJnN0b3BfdHlwZSwgJnN0b3ApOwotICAgIHNlcW51bSA9IGdzdF9ldmVudF9nZXRfc2VxbnVtIChldmVudCk7Ci0KLSAgICAvKiBubyBuZWdhdGl2ZSByYXRlcyB5ZXQgKi8KLSAgICBpZiAocmF0ZSA8IDAuMCkKLSAgICAgIGdvdG8gbmVnYXRpdmVfcmF0ZTsKLQotICAgIGlmIChmb3JtYXQgIT0gd2F2LT5zZWdtZW50LmZvcm1hdCkgewotICAgICAgR1NUX0lORk9fT0JKRUNUICh3YXYsICJjb252ZXJ0aW5nIHNlZWstZXZlbnQgZnJvbSAlcyB0byAlcyIsCi0gICAgICAgICAgZ3N0X2Zvcm1hdF9nZXRfbmFtZSAoZm9ybWF0KSwKLSAgICAgICAgICBnc3RfZm9ybWF0X2dldF9uYW1lICh3YXYtPnNlZ21lbnQuZm9ybWF0KSk7Ci0gICAgICByZXMgPSBUUlVFOwotICAgICAgaWYgKGN1cl90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkKLSAgICAgICAgcmVzID0KLSAgICAgICAgICAgIGdzdF9wYWRfcXVlcnlfY29udmVydCAod2F2LT5zcmNwYWQsIGZvcm1hdCwgY3VyLAotICAgICAgICAgICAgd2F2LT5zZWdtZW50LmZvcm1hdCwgJmN1cik7Ci0gICAgICBpZiAocmVzICYmIHN0b3BfdHlwZSAhPSBHU1RfU0VFS19UWVBFX05PTkUpCi0gICAgICAgIHJlcyA9Ci0gICAgICAgICAgICBnc3RfcGFkX3F1ZXJ5X2NvbnZlcnQgKHdhdi0+c3JjcGFkLCBmb3JtYXQsIHN0b3AsCi0gICAgICAgICAgICB3YXYtPnNlZ21lbnQuZm9ybWF0LCAmc3RvcCk7Ci0gICAgICBpZiAoIXJlcykKLSAgICAgICAgZ290byBub19mb3JtYXQ7Ci0KLSAgICAgIGZvcm1hdCA9IHdhdi0+c2VnbWVudC5mb3JtYXQ7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImRvaW5nIHNlZWsgd2l0aG91dCBldmVudCIpOwotICAgIGZsYWdzID0gMDsKLSAgICByYXRlID0gMS4wOwotICAgIGN1cl90eXBlID0gR1NUX1NFRUtfVFlQRV9TRVQ7Ci0gICAgc3RvcF90eXBlID0gR1NUX1NFRUtfVFlQRV9TRVQ7Ci0gIH0KLQotICAvKiBpbiBwdXNoIG1vZGUsIHdlIG11c3QgZGVsZWdhdGUgdG8gdXBzdHJlYW0gKi8KLSAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgICAvKiBpZiBzdHJlYW1pbmcgbm90IHlldCBzdGFydGVkOyBvbmx5IHByZXBhcmUgaW5pdGlhbCBuZXdzZWdtZW50ICovCi0gICAgaWYgKCFldmVudCB8fCB3YXYtPnN0YXRlICE9IEdTVF9XQVZQQVJTRV9EQVRBKSB7Ci0gICAgICBpZiAod2F2LT5zdGFydF9zZWdtZW50KQotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKHdhdi0+c3RhcnRfc2VnbWVudCk7Ci0gICAgICB3YXYtPnN0YXJ0X3NlZ21lbnQgPSBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZ3YXYtPnNlZ21lbnQpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgLyogY29udmVydCBzZWVrIHBvc2l0aW9ucyB0byBieXRlIHBvc2l0aW9ucyBpbiBkYXRhIHNlY3Rpb25zICovCi0gICAgICBpZiAoZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICAvKiBzaG91bGQgbm90IGZhaWwgKi8KLSAgICAgICAgaWYgKCFnc3Rfd2F2cGFyc2VfdGltZV90b19ieXRlcG9zICh3YXYsIGN1ciwgJmN1cikpCi0gICAgICAgICAgZ290byBub19wb3NpdGlvbjsKLSAgICAgICAgaWYgKCFnc3Rfd2F2cGFyc2VfdGltZV90b19ieXRlcG9zICh3YXYsIHN0b3AsICZzdG9wKSkKLSAgICAgICAgICBnb3RvIG5vX3Bvc2l0aW9uOwotICAgICAgfQotICAgICAgLyogbWluZCBzYW1wbGUgYm91bmRhcnkgYW5kIGhlYWRlciAqLwotICAgICAgaWYgKGN1ciA+PSAwKSB7Ci0gICAgICAgIGN1ciAtPSAoY3VyICUgd2F2LT5ieXRlc19wZXJfc2FtcGxlKTsKLSAgICAgICAgY3VyICs9IHdhdi0+ZGF0YXN0YXJ0OwotICAgICAgfQotICAgICAgaWYgKHN0b3AgPj0gMCkgewotICAgICAgICBzdG9wIC09IChzdG9wICUgd2F2LT5ieXRlc19wZXJfc2FtcGxlKTsKLSAgICAgICAgc3RvcCArPSB3YXYtPmRhdGFzdGFydDsKLSAgICAgIH0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIlB1c2hpbmcgQllURSBzZWVrIHJhdGUgJWcsICIKLSAgICAgICAgICAic3RhcnQgJSIgR19HSU5UNjRfRk9STUFUICIsIHN0b3AgJSIgR19HSU5UNjRfRk9STUFULCByYXRlLCBjdXIsCi0gICAgICAgICAgc3RvcCk7Ci0gICAgICAvKiBCWVRFIHNlZWsgZXZlbnQgKi8KLSAgICAgIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrIChyYXRlLCBHU1RfRk9STUFUX0JZVEVTLCBmbGFncywgY3VyX3R5cGUsIGN1ciwKLSAgICAgICAgICBzdG9wX3R5cGUsIHN0b3ApOwotICAgICAgZ3N0X2V2ZW50X3NldF9zZXFudW0gKGV2ZW50LCBzZXFudW0pOwotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh3YXYtPnNpbmtwYWQsIGV2ZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotCi0gIC8qIGdldCBmbHVzaCBmbGFnICovCi0gIGZsdXNoID0gZmxhZ3MgJiBHU1RfU0VFS19GTEFHX0ZMVVNIOwotCi0gIC8qIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3RyZWFtaW5nIHRocmVhZCBpcyBzdG9wcGVkLiBXZSBkbyB0aGlzIGJ5Ci0gICAqIGVpdGhlciBzZW5kaW5nIGEgRkxVU0hfU1RBUlQgZXZlbnQgZG93bnN0cmVhbSB3aGljaCB3aWxsIGNhdXNlIHRoZQotICAgKiBzdHJlYW1pbmcgdGhyZWFkIHRvIHN0b3Agd2l0aCBhIFdST05HX1NUQVRFLgotICAgKiBGb3IgYSBub24tZmx1c2hpbmcgc2VlayB3ZSBzaW1wbHkgcGF1c2UgdGhlIHRhc2ssIHdoaWNoIHdpbGwgaGFwcGVuIGFzIHNvb24KLSAgICogYXMgaXQgY29tcGxldGVzIG9uZSBpdGVyYXRpb24gKGFuZCB0aHVzIG1pZ2h0IGJsb2NrIHdoZW4gdGhlIHNpbmsgaXMKLSAgICogYmxvY2tpbmcgaW4gcHJlcm9sbCkuICovCi0gIGlmIChmbHVzaCkgewotICAgIEdzdEV2ZW50ICpmZXZlbnQ7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAic2VuZGluZyBmbHVzaCBzdGFydCIpOwotCi0gICAgZmV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKTsKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZmV2ZW50LCBzZXFudW0pOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAod2F2LT5zaW5rcGFkLCBnc3RfZXZlbnRfcmVmIChmZXZlbnQpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHdhdi0+c3JjcGFkLCBmZXZlbnQpOwotICB9IGVsc2UgewotICAgIGdzdF9wYWRfcGF1c2VfdGFzayAod2F2LT5zaW5rcGFkKTsKLSAgfQotCi0gIC8qIHdlIHNob3VsZCBub3cgYmUgYWJsZSB0byBncmFiIHRoZSBzdHJlYW1pbmcgdGhyZWFkIGJlY2F1c2Ugd2Ugc3RvcHBlZCBpdAotICAgKiB3aXRoIHRoZSBhYm92ZSBmbHVzaC9wYXVzZSBjb2RlICovCi0gIEdTVF9QQURfU1RSRUFNX0xPQ0sgKHdhdi0+c2lua3BhZCk7Ci0KLSAgLyogc2F2ZSBjdXJyZW50IHBvc2l0aW9uICovCi0gIGxhc3Rfc3RvcCA9IHdhdi0+c2VnbWVudC5wb3NpdGlvbjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJzdG9wcGVkIHN0cmVhbWluZyBhdCAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxhc3Rfc3RvcCk7Ci0KLSAgLyogY29weSBzZWdtZW50LCB3ZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBzdGlsbCBuZWVkIHRoZSBvbGQKLSAgICogc2VnbWVudCB3aGVuIHdlIGNsb3NlIHRoZSBjdXJyZW50IHNlZ21lbnQuICovCi0gIG1lbWNweSAoJnNlZWtzZWdtZW50LCAmd2F2LT5zZWdtZW50LCBzaXplb2YgKEdzdFNlZ21lbnQpKTsKLQotICAvKiBjb25maWd1cmUgdGhlIHNlZWsgcGFyYW1ldGVycyBpbiB0aGUgc2Vla3NlZ21lbnQuIFdlIHdpbGwgdGhlbiBoYXZlIHRoZQotICAgKiByaWdodCB2YWx1ZXMgaW4gdGhlIHNlZ21lbnQgdG8gcGVyZm9ybSB0aGUgc2VlayAqLwotICBpZiAoZXZlbnQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJjb25maWd1cmluZyBzZWVrIik7Ci0gICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlZWtzZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAotICAgICAgICBjdXJfdHlwZSwgY3VyLCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOwotICB9Ci0KLSAgLyogZmlndXJlIG91dCB0aGUgbGFzdCBwb3NpdGlvbiB3ZSBuZWVkIHRvIHBsYXkuIElmIGl0J3MgY29uZmlndXJlZCAoc3RvcCAhPQotICAgKiAtMSksIHVzZSB0aGF0LCBlbHNlIHdlIHBsYXkgdW50aWwgdGhlIHRvdGFsIGR1cmF0aW9uIG9mIHRoZSBmaWxlICovCi0gIGlmICgoc3RvcCA9IHNlZWtzZWdtZW50LnN0b3ApID09IC0xKQotICAgIHN0b3AgPSBzZWVrc2VnbWVudC5kdXJhdGlvbjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJjdXJfdHlwZSA9JWQiLCBjdXJfdHlwZSk7Ci0gIGlmICgoY3VyX3R5cGUgIT0gR1NUX1NFRUtfVFlQRV9OT05FKSkgewotICAgIC8qIGJyaW5nIG9mZnNldCB0byBieXRlcywgaWYgdGhlIGJwcyBpcyAwLCB3ZSBoYXZlIHRoZSBzZWdtZW50IGluIEJZVEVTIGFuZAotICAgICAqIHdlIGNhbiBqdXN0IGNvcHkgdGhlIGxhc3Rfc3RvcC4gSWYgbm90LCB3ZSB1c2UgdGhlIGJwcyB0byBjb252ZXJ0IFRJTUUgdG8KLSAgICAgKiBieXRlcy4gKi8KLSAgICBpZiAoIWdzdF93YXZwYXJzZV90aW1lX3RvX2J5dGVwb3MgKHdhdiwgc2Vla3NlZ21lbnQucG9zaXRpb24sCi0gICAgICAgICAgICAoZ2ludDY0ICopICYgd2F2LT5vZmZzZXQpKQotICAgICAgd2F2LT5vZmZzZXQgPSBzZWVrc2VnbWVudC5wb3NpdGlvbjsKLSAgICBHU1RfTE9HX09CSkVDVCAod2F2LCAib2Zmc2V0PSUiIEdfR1VJTlQ2NF9GT1JNQVQsIHdhdi0+b2Zmc2V0KTsKLSAgICB3YXYtPm9mZnNldCAtPSAod2F2LT5vZmZzZXQgJSB3YXYtPmJ5dGVzX3Blcl9zYW1wbGUpOwotICAgIEdTVF9MT0dfT0JKRUNUICh3YXYsICJvZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5vZmZzZXQpOwotICAgIHdhdi0+b2Zmc2V0ICs9IHdhdi0+ZGF0YXN0YXJ0OwotICAgIEdTVF9MT0dfT0JKRUNUICh3YXYsICJvZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5vZmZzZXQpOwotICB9IGVsc2UgewotICAgIEdTVF9MT0dfT0JKRUNUICh3YXYsICJjb250aW51ZSBmcm9tIG9mZnNldD0lIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICB3YXYtPm9mZnNldCk7Ci0gIH0KLQotICBpZiAoc3RvcF90eXBlICE9IEdTVF9TRUVLX1RZUEVfTk9ORSkgewotICAgIGlmICghZ3N0X3dhdnBhcnNlX3RpbWVfdG9fYnl0ZXBvcyAod2F2LCBzdG9wLCAoZ2ludDY0ICopICYgd2F2LT5lbmRfb2Zmc2V0KSkKLSAgICAgIHdhdi0+ZW5kX29mZnNldCA9IHN0b3A7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHdhdiwgImVuZF9vZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5lbmRfb2Zmc2V0KTsKLSAgICB3YXYtPmVuZF9vZmZzZXQgLT0gKHdhdi0+ZW5kX29mZnNldCAlIHdhdi0+Ynl0ZXNfcGVyX3NhbXBsZSk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHdhdiwgImVuZF9vZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5lbmRfb2Zmc2V0KTsKLSAgICB3YXYtPmVuZF9vZmZzZXQgKz0gd2F2LT5kYXRhc3RhcnQ7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHdhdiwgImVuZF9vZmZzZXQ9JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5lbmRfb2Zmc2V0KTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAod2F2LCAiY29udGludWUgdG8gZW5kX29mZnNldD0lIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgICB3YXYtPmVuZF9vZmZzZXQpOwotICB9Ci0KLSAgLyogbWFrZSBzdXJlIGZpbGVzaXplIGlzIG5vdCBleGNlZWRlZCBkdWUgdG8gcm91bmRpbmcgZXJyb3JzIG9yIHNvLAotICAgKiBzYW1lIHByZWNhdXRpb24gYXMgaW4gX3N0cmVhbV9oZWFkZXJzICovCi0gIGJmb3JtYXQgPSBHU1RfRk9STUFUX0JZVEVTOwotICBpZiAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2R1cmF0aW9uICh3YXYtPnNpbmtwYWQsIGJmb3JtYXQsICZ1cHN0cmVhbV9zaXplKSkKLSAgICB3YXYtPmVuZF9vZmZzZXQgPSBNSU4gKHdhdi0+ZW5kX29mZnNldCwgdXBzdHJlYW1fc2l6ZSk7Ci0KLSAgaWYgKHdhdi0+ZGF0YXNpemUgPiAwICYmIHdhdi0+ZW5kX29mZnNldCA+IHdhdi0+ZGF0YXN0YXJ0ICsgd2F2LT5kYXRhc2l6ZSkKLSAgICB3YXYtPmVuZF9vZmZzZXQgPSB3YXYtPmRhdGFzdGFydCArIHdhdi0+ZGF0YXNpemU7Ci0KLSAgLyogdGhpcyBpcyB0aGUgcmFuZ2Ugb2YgYnl0ZXMgd2Ugd2lsbCB1c2UgZm9yIHBsYXliYWNrICovCi0gIHdhdi0+b2Zmc2V0ID0gTUlOICh3YXYtPm9mZnNldCwgd2F2LT5lbmRfb2Zmc2V0KTsKLSAgd2F2LT5kYXRhbGVmdCA9IHdhdi0+ZW5kX29mZnNldCAtIHdhdi0+b2Zmc2V0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwKLSAgICAgICJzZWVrOiByYXRlICVsZiwgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgZW5kICUiIEdfR1VJTlQ2NF9GT1JNQVQKLSAgICAgICIsIHNlZ21lbnQgJSIgR1NUX1RJTUVfRk9STUFUICIgLS0gJSIgR1NUX1RJTUVfRk9STUFULCByYXRlLCB3YXYtPm9mZnNldCwKLSAgICAgIHdhdi0+ZW5kX29mZnNldCwgR1NUX1RJTUVfQVJHUyAoc2Vla3NlZ21lbnQuc3RhcnQpLCBHU1RfVElNRV9BUkdTIChzdG9wKSk7Ci0KLSAgLyogcHJlcGFyZSBmb3Igc3RyZWFtaW5nIGFnYWluICovCi0gIGlmIChmbHVzaCkgewotICAgIEdzdEV2ZW50ICpmZXZlbnQ7Ci0KLSAgICAvKiBpZiB3ZSBzZW50IGEgRkxVU0hfU1RBUlQsIHdlIG5vdyBzZW5kIGEgRkxVU0hfU1RPUCAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgInNlbmRpbmcgZmx1c2ggc3RvcCIpOwotCi0gICAgZmV2ZW50ID0gZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKTsKLSAgICBnc3RfZXZlbnRfc2V0X3NlcW51bSAoZmV2ZW50LCBzZXFudW0pOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAod2F2LT5zaW5rcGFkLCBnc3RfZXZlbnRfcmVmIChmZXZlbnQpKTsKLSAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHdhdi0+c3JjcGFkLCBmZXZlbnQpOwotICB9Ci0KLSAgLyogbm93IHdlIGRpZCB0aGUgc2VlayBhbmQgY2FuIGFjdGl2YXRlIHRoZSBuZXcgc2VnbWVudCB2YWx1ZXMgKi8KLSAgbWVtY3B5ICgmd2F2LT5zZWdtZW50LCAmc2Vla3NlZ21lbnQsIHNpemVvZiAoR3N0U2VnbWVudCkpOwotCi0gIC8qIGlmIHdlJ3JlIGRvaW5nIGEgc2VnbWVudCBzZWVrLCBwb3N0IGEgU0VHTUVOVF9TVEFSVCBtZXNzYWdlICovCi0gIGlmICh3YXYtPnNlZ21lbnQuZmxhZ3MgJiBHU1RfU0VFS19GTEFHX1NFR01FTlQpIHsKLSAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHdhdiksCi0gICAgICAgIGdzdF9tZXNzYWdlX25ld19zZWdtZW50X3N0YXJ0IChHU1RfT0JKRUNUX0NBU1QgKHdhdiksCi0gICAgICAgICAgICB3YXYtPnNlZ21lbnQuZm9ybWF0LCB3YXYtPnNlZ21lbnQucG9zaXRpb24pKTsKLSAgfQotCi0gIC8qIG5vdyBjcmVhdGUgdGhlIG5ld3NlZ21lbnQgKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiQ3JlYXRpbmcgbmV3c2VnbWVudCBmcm9tICUiIEdfR0lOVDY0X0ZPUk1BVAotICAgICAgIiB0byAlIiBHX0dJTlQ2NF9GT1JNQVQsIHdhdi0+c2VnbWVudC5wb3NpdGlvbiwgc3RvcCk7Ci0KLSAgLyogc3RvcmUgdGhlIG5ld3NlZ21lbnQgZXZlbnQgc28gaXQgY2FuIGJlIHNlbnQgZnJvbSB0aGUgc3RyZWFtaW5nIHRocmVhZC4gKi8KLSAgaWYgKHdhdi0+c3RhcnRfc2VnbWVudCkKLSAgICBnc3RfZXZlbnRfdW5yZWYgKHdhdi0+c3RhcnRfc2VnbWVudCk7Ci0gIHdhdi0+c3RhcnRfc2VnbWVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJndhdi0+c2VnbWVudCk7Ci0gIGdzdF9ldmVudF9zZXRfc2VxbnVtICh3YXYtPnN0YXJ0X3NlZ21lbnQsIHNlcW51bSk7Ci0KLSAgLyogbWFyayBkaXNjb250IGlmIHdlIGFyZSBnb2luZyB0byBzdHJlYW0gZnJvbSBhbm90aGVyIHBvc2l0aW9uLiAqLwotICBpZiAobGFzdF9zdG9wICE9IHdhdi0+c2VnbWVudC5wb3NpdGlvbikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIm1hcmsgRElTQ09OVCwgd2UgZGlkIGEgc2VlayB0byBhbm90aGVyIHBvc2l0aW9uIik7Ci0gICAgd2F2LT5kaXNjb250ID0gVFJVRTsKLSAgfQotCi0gIC8qIGFuZCBzdGFydCB0aGUgc3RyZWFtaW5nIHRhc2sgYWdhaW4gKi8KLSAgaWYgKCF3YXYtPnN0cmVhbWluZykgewotICAgIGdzdF9wYWRfc3RhcnRfdGFzayAod2F2LT5zaW5rcGFkLCAoR3N0VGFza0Z1bmN0aW9uKSBnc3Rfd2F2cGFyc2VfbG9vcCwKLSAgICAgICAgd2F2LT5zaW5rcGFkLCBOVUxMKTsKLSAgfQotCi0gIEdTVF9QQURfU1RSRUFNX1VOTE9DSyAod2F2LT5zaW5rcGFkKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW5lZ2F0aXZlX3JhdGU6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJuZWdhdGl2ZSBwbGF5YmFjayByYXRlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub19mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJ1bnN1cHBvcnRlZCBmb3JtYXQgZ2l2ZW4sIHNlZWsgYWJvcnRlZC4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3Bvc2l0aW9uOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LAotICAgICAgICAiQ291bGQgbm90IGRldGVybWluZSBieXRlIHBvc2l0aW9uIGZvciBkZXNpcmVkIHRpbWUiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoKLSAqIGdzdF93YXZwYXJzZV9wZWVrX2NodW5rX2luZm86Ci0gKiBAd2F2IFdhdnBhcnNlIG9iamVjdAotICogQHRhZyBob2xkZXIgZm9yIHRhZwotICogQHNpemUgaG9sZGVyIGZvciB0YWcgc2l6ZQotICoKLSAqIFBlZWsgbmV4dCBjaHVuayBpbmZvICh0YWcgYW5kIHNpemUpCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiB0aGUgY2h1bmsgaW5mbyAoaGVhZGVyKSBpcyBhdmFpbGFibGUKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFyc2VfcGVla19jaHVua19pbmZvIChHc3RXYXZQYXJzZSAqIHdhdiwgZ3VpbnQzMiAqIHRhZywgZ3VpbnQzMiAqIHNpemUpCi17Ci0gIGNvbnN0IGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0KLSAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAod2F2LT5hZGFwdGVyKSA8IDgpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKHdhdi0+YWRhcHRlciwgOCk7Ci0gICp0YWcgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICAqc2l6ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDQpOwotICBnc3RfYWRhcHRlcl91bm1hcCAod2F2LT5hZGFwdGVyKTsKLQotICBHU1RfREVCVUcgKCJOZXh0IGNodW5rIHNpemUgaXMgJXUgYnl0ZXMsIHR5cGUgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsICpzaXplLAotICAgICAgR1NUX0ZPVVJDQ19BUkdTICgqdGFnKSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBnc3Rfd2F2cGFyc2VfcGVla19jaHVuazoKLSAqIEB3YXYgV2F2cGFyc2Ugb2JqZWN0Ci0gKiBAdGFnIGhvbGRlciBmb3IgdGFnCi0gKiBAc2l6ZSBob2xkZXIgZm9yIHRhZyBzaXplCi0gKgotICogUGVlayBlbm91Z2ggZGF0YSBmb3Igb25lIGZ1bGwgY2h1bmsKLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSB3aGVuIHRoZSBmdWxsIGNodW5rIGlzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9wZWVrX2NodW5rIChHc3RXYXZQYXJzZSAqIHdhdiwgZ3VpbnQzMiAqIHRhZywgZ3VpbnQzMiAqIHNpemUpCi17Ci0gIGd1aW50MzIgcGVla19zaXplID0gMDsKLSAgZ3VpbnQgYXZhaWxhYmxlOwotCi0gIGlmICghZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmtfaW5mbyAod2F2LCB0YWcsIHNpemUpKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBzaXplIDAgLT4gZW1wdHkgZGF0YSBidWZmZXIgd291bGQgc3VycHJpc2UgbW9zdCBjYWxsZXJzLAotICAgKiBsYXJnZSBzaXplIC0+IGRvIG5vdCBib3RoZXIgdHJ5aW5nIHRvIHNxdWVlemUgdGhhdCBpbnRvIGFkYXB0ZXIsCi0gICAqIHNvIHdlIHRocm93IHBvb3IgbWFuJ3MgZXhjZXB0aW9uLCB3aGljaCBjYW4gYmUgY2F1Z2h0IGlmIGNhbGxlciByZWFsbHkKLSAgICogd2FudHMgdG8gaGFuZGxlIDAgc2l6ZSBjaHVuayAqLwotICBpZiAoISgqc2l6ZSkgfHwgKCpzaXplKSA+PSAoMSA8PCAzMCkpIHsKLSAgICBHU1RfSU5GTyAoIkludmFsaWQvdW5leHBlY3RlZCBjaHVuayBzaXplICV1IGZvciB0YWcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICpzaXplLCBHU1RfRk9VUkNDX0FSR1MgKCp0YWcpKTsKLSAgICAvKiBjaGFpbiBzaG91bGQgZ2l2ZSB1cCAqLwotICAgIHdhdi0+YWJvcnRfYnVmZmVyaW5nID0gVFJVRTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgcGVla19zaXplID0gKCpzaXplICsgMSkgJiB+MTsKLSAgYXZhaWxhYmxlID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh3YXYtPmFkYXB0ZXIpOwotCi0gIGlmIChhdmFpbGFibGUgPj0gKDggKyBwZWVrX3NpemUpKSB7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0xPRyAoImJ1dCBvbmx5ICV1IGJ5dGVzIGF2YWlsYWJsZSBub3ciLCBhdmFpbGFibGUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKgotICogZ3N0X3dhdnBhcnNlX2NhbGN1bGF0ZV9kdXJhdGlvbjoKLSAqIEB3YXY6IHdhdnBhcnNlIG9iamVjdAotICoKLSAqIENhbGN1bGF0ZSBkdXJhdGlvbiBvbiBkZW1hbmQgYW5kIHN0b3JlIGluIEB3YXYuIFByZWZlciBicHMsIGJ1dCB1c2UgZmFjdCBhcyBhCi0gKiBmYWxsYmFjay4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBpZiBkdXJhdGlvbiBpcyBhdmFpbGFibGUuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhcnNlX2NhbGN1bGF0ZV9kdXJhdGlvbiAoR3N0V2F2UGFyc2UgKiB3YXYpCi17Ci0gIGlmICh3YXYtPmR1cmF0aW9uID4gMCkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAod2F2LT5icHMgPiAwKSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUICh3YXYsICJHb3QgZGF0YXNpemUgJSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5kYXRhc2l6ZSk7Ci0gICAgd2F2LT5kdXJhdGlvbiA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsICh3YXYtPmRhdGFzaXplLCBHU1RfU0VDT05ELAotICAgICAgICAoZ3VpbnQ2NCkgd2F2LT5icHMpOwotICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiR290IGR1cmF0aW9uIChicHMpICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAod2F2LT5kdXJhdGlvbikpOwotICAgIHJldHVybiBUUlVFOwotICB9IGVsc2UgaWYgKHdhdi0+ZmFjdCkgewotICAgIHdhdi0+ZHVyYXRpb24gPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAoR1NUX1NFQ09ORCwgd2F2LT5mYWN0LCB3YXYtPnJhdGUpOwotICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiR290IGR1cmF0aW9uIChmYWN0KSAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHdhdi0+ZHVyYXRpb24pKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdmVwYXJzZV9pZ25vcmVfY2h1bmsgKEdzdFdhdlBhcnNlICogd2F2LCBHc3RCdWZmZXIgKiBidWYsIGd1aW50MzIgdGFnLAotICAgIGd1aW50MzIgc2l6ZSkKLXsKLSAgZ3VpbnQgZmx1c2g7Ci0KLSAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgaWYgKCFnc3Rfd2F2cGFyc2VfcGVla19jaHVuayAod2F2LCAmdGFnLCAmc2l6ZSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiSWdub3JpbmcgdGFnICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgZmx1c2ggPSA4ICsgKChzaXplICsgMSkgJiB+MSk7Ci0gIHdhdi0+b2Zmc2V0ICs9IGZsdXNoOwotICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICBnc3RfYWRhcHRlcl9mbHVzaCAod2F2LT5hZGFwdGVyLCBmbHVzaCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKgotICogZ3N0X3dhdnBhcnNlX2N1ZV9jaHVuazoKLSAqIEB3YXYgR3N0V2F2UGFyc2Ugb2JqZWN0Ci0gKiBAZGF0YSBob2xkZXIgZm9yIGRhdGEKLSAqIEBzaXplIGhvbGRlciBmb3IgZGF0YSBzaXplCi0gKgotICogUGFyc2UgY3VlIGNodW5rIGZyb20gQGRhdGEgdG8gd2F2LT5jdWVzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gY3VlIGNodW5rIGlzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9jdWVfY2h1bmsgKEdzdFdhdlBhcnNlICogd2F2LCBjb25zdCBndWludDggKiBkYXRhLCBndWludDMyIHNpemUpCi17Ci0gIGd1aW50MzIgaSwgbmN1ZXM7Ci0gIEdMaXN0ICpjdWVzID0gTlVMTDsKLSAgR3N0V2F2UGFyc2VDdWUgKmN1ZTsKLQotICBpZiAod2F2LT5jdWVzKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXYsICJmb3VuZCBhbm90aGVyIGN1ZSdzIik7Ci0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICBuY3VlcyA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0KLSAgaWYgKHNpemUgPCA0ICsgbmN1ZXMgKiAyNCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2LCAiYnJva2VuIGZpbGUgJWQgJWQiLCBzaXplLCBuY3Vlcyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogcGFyc2UgZGF0YSAqLwotICBkYXRhICs9IDQ7Ci0gIGZvciAoaSA9IDA7IGkgPCBuY3VlczsgaSsrKSB7Ci0gICAgY3VlID0gZ19uZXcwIChHc3RXYXZQYXJzZUN1ZSwgMSk7Ci0gICAgY3VlLT5pZCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gICAgY3VlLT5wb3NpdGlvbiA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDQpOwotICAgIGN1ZS0+ZGF0YV9jaHVua19pZCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDgpOwotICAgIGN1ZS0+Y2h1bmtfc3RhcnQgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEgKyAxMik7Ci0gICAgY3VlLT5ibG9ja19zdGFydCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDE2KTsKLSAgICBjdWUtPnNhbXBsZV9vZmZzZXQgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEgKyAyMCk7Ci0gICAgY3VlcyA9IGdfbGlzdF9hcHBlbmQgKGN1ZXMsIGN1ZSk7Ci0gICAgZGF0YSArPSAyNDsKLSAgfQotCi0gIHdhdi0+Y3VlcyA9IGN1ZXM7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBnc3Rfd2F2cGFyc2VfbGFibF9jaHVuazoKLSAqIEB3YXYgR3N0V2F2UGFyc2Ugb2JqZWN0Ci0gKiBAZGF0YSBob2xkZXIgZm9yIGRhdGEKLSAqIEBzaXplIGhvbGRlciBmb3IgZGF0YSBzaXplCi0gKgotICogUGFyc2UgbGFibCBmcm9tIEBkYXRhIHRvIHdhdi0+bGFibHMuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBsYWJsIGNodW5rIGlzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9sYWJsX2NodW5rIChHc3RXYXZQYXJzZSAqIHdhdiwgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQzMiBzaXplKQotewotICBHc3RXYXZQYXJzZUxhYmwgKmxhYmw7Ci0KLSAgaWYgKHNpemUgPCA1KQotICAgIHJldHVybiBGQUxTRTsKLQotICBsYWJsID0gZ19uZXcwIChHc3RXYXZQYXJzZUxhYmwsIDEpOwotCi0gIC8qIHBhcnNlIGRhdGEgKi8KLSAgZGF0YSArPSA4OwotICBsYWJsLT5jdWVfcG9pbnRfaWQgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEpOwotICBsYWJsLT50ZXh0ID0gZ19tZW1kdXAgKGRhdGEgKyA0LCBzaXplIC0gNCk7Ci0KLSAgd2F2LT5sYWJscyA9IGdfbGlzdF9hcHBlbmQgKHdhdi0+bGFibHMsIGxhYmwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKgotICogZ3N0X3dhdnBhcnNlX25vdGVfY2h1bms6Ci0gKiBAd2F2IEdzdFdhdlBhcnNlIG9iamVjdAotICogQGRhdGEgaG9sZGVyIGZvciBkYXRhCi0gKiBAc2l6ZSBob2xkZXIgZm9yIGRhdGEgc2l6ZQotICoKLSAqIFBhcnNlIG5vdGUgZnJvbSBAZGF0YSB0byB3YXYtPm5vdGVzLgotICoKLSAqIFJldHVybnM6ICVUUlVFIHdoZW4gbm90ZSBjaHVuayBpcyBhdmFpbGFibGUKLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFyc2Vfbm90ZV9jaHVuayAoR3N0V2F2UGFyc2UgKiB3YXYsIGNvbnN0IGd1aW50OCAqIGRhdGEsIGd1aW50MzIgc2l6ZSkKLXsKLSAgR3N0V2F2UGFyc2VOb3RlICpub3RlOwotCi0gIGlmIChzaXplIDwgNSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgbm90ZSA9IGdfbmV3MCAoR3N0V2F2UGFyc2VOb3RlLCAxKTsKLQotICAvKiBwYXJzZSBkYXRhICovCi0gIGRhdGEgKz0gODsKLSAgbm90ZS0+Y3VlX3BvaW50X2lkID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgbm90ZS0+dGV4dCA9IGdfbWVtZHVwIChkYXRhICsgNCwgc2l6ZSAtIDQpOwotCi0gIHdhdi0+bm90ZXMgPSBnX2xpc3RfYXBwZW5kICh3YXYtPm5vdGVzLCBub3RlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAqIGdzdF93YXZwYXJzZV9zbXBsX2NodW5rOgotICogQHdhdiBHc3RXYXZQYXJzZSBvYmplY3QKLSAqIEBkYXRhIGhvbGRlciBmb3IgZGF0YQotICogQHNpemUgaG9sZGVyIGZvciBkYXRhIHNpemUKLSAqCi0gKiBQYXJzZSBzbXBsIGNodW5rIGZyb20gQGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBjdWUgY2h1bmsgaXMgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhcnNlX3NtcGxfY2h1bmsgKEdzdFdhdlBhcnNlICogd2F2LCBjb25zdCBndWludDggKiBkYXRhLCBndWludDMyIHNpemUpCi17Ci0gIGd1aW50MzIgbm90ZV9udW1iZXI7Ci0KLSAgLyoKLSAgICAgbWFudWZhY3R1cmVyX2lkID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhKTsKLSAgICAgcHJvZHVjdF9pZCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDQpOwotICAgICBzYW1wbGVfcGVyaW9kID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgOCk7Ci0gICAqLwotICBub3RlX251bWJlciA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDEyKTsKLSAgLyoKLSAgICAgcGl0Y2hfZnJhY3Rpb24gPSBHU1RfUkVBRF9VSU5UMzJfTEUgKGRhdGEgKyAxNik7Ci0gICAgIFNNUFRFX2Zvcm1hdCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIDIwKTsKLSAgICAgU01QVEVfb2Zmc2V0ID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgMjQpOwotICAgICBudW1fc2FtcGxlX2xvb3BzID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgMjgpOwotICAgICBMaXN0IG9mIFNhbXBsZSBMb29wcywgMjQgYnl0ZXMgZWFjaAotICAgKi8KLQotICBpZiAoIXdhdi0+dGFncykKLSAgICB3YXYtPnRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh3YXYtPnRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgIEdTVF9UQUdfTUlESV9CQVNFX05PVEUsIChndWludCkgbm90ZV9udW1iZXIsIE5VTEwpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLyoKLSAqIGdzdF93YXZwYXJzZV9hZHRsX2NodW5rOgotICogQHdhdiBHc3RXYXZQYXJzZSBvYmplY3QKLSAqIEBkYXRhIGhvbGRlciBmb3IgZGF0YQotICogQHNpemUgaG9sZGVyIGZvciBkYXRhIHNpemUKLSAqCi0gKiBQYXJzZSBhZHRsIGZyb20gQGRhdGEuCi0gKgotICogUmV0dXJuczogJVRSVUUgd2hlbiBhZHRsIGNodW5rIGlzIGF2YWlsYWJsZQotICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9hZHRsX2NodW5rIChHc3RXYXZQYXJzZSAqIHdhdiwgY29uc3QgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQzMiBzaXplKQotewotICBndWludDMyIGx0YWcsIGxzaXplLCBvZmZzZXQgPSAwOwotCi0gIHdoaWxlIChzaXplID49IDgpIHsKLSAgICBsdGFnID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgb2Zmc2V0KTsKLSAgICBsc2l6ZSA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSArIG9mZnNldCArIDQpOwotCi0gICAgaWYgKGxzaXplICsgOCA+IHNpemUpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2LCAiSW52YWxpZCBhZHRsIHNpemU6ICV1ICsgOCA+ICV1IiwgbHNpemUsIHNpemUpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN3aXRjaCAobHRhZykgewotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfbGFibDoKLSAgICAgICAgZ3N0X3dhdnBhcnNlX2xhYmxfY2h1bmsgKHdhdiwgZGF0YSArIG9mZnNldCwgc2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfbm90ZToKLSAgICAgICAgZ3N0X3dhdnBhcnNlX25vdGVfY2h1bmsgKHdhdiwgZGF0YSArIG9mZnNldCwgc2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXYsICJVbmtub3dtIGFkdGwgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGx0YWcpKTsKLSAgICAgICAgR1NUX01FTURVTVBfT0JKRUNUICh3YXYsICJVbmtub3dtIGFkdGwiLCAmZGF0YVtvZmZzZXRdLCBsc2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBvZmZzZXQgKz0gOCArIEdTVF9ST1VORF9VUF8yIChsc2l6ZSk7Ci0gICAgc2l6ZSAtPSA4ICsgR1NUX1JPVU5EX1VQXzIgKGxzaXplKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0VGFnTGlzdCAqCi1nc3Rfd2F2cGFyc2VfZ2V0X3RhZ3NfdG9jX2VudHJ5IChHc3RUb2MgKiB0b2MsIGdjaGFyICogaWQpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3MgPSBOVUxMOwotICBHc3RUb2NFbnRyeSAqZW50cnkgPSBOVUxMOwotCi0gIGVudHJ5ID0gZ3N0X3RvY19maW5kX2VudHJ5ICh0b2MsIGlkKTsKLSAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICB0YWdzID0gZ3N0X3RvY19lbnRyeV9nZXRfdGFncyAoZW50cnkpOwotICAgIGlmICh0YWdzID09IE5VTEwpIHsKLSAgICAgIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICAgICAgZ3N0X3RvY19lbnRyeV9zZXRfdGFncyAoZW50cnksIHRhZ3MpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiB0YWdzOwotfQotCi0vKgotICogZ3N0X3dhdnBhcnNlX2NyZWF0ZV90b2M6Ci0gKiBAd2F2IEdzdFdhdlBhcnNlIG9iamVjdAotICoKLSAqIENyZWF0ZSBUT0MgZnJvbSB3YXYtPmN1ZXMgYW5kIHdhdi0+bGFibHMuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhcnNlX2NyZWF0ZV90b2MgKEdzdFdhdlBhcnNlICogd2F2KQotewotICBnaW50NjQgc3RhcnQsIHN0b3A7Ci0gIGdjaGFyICppZDsKLSAgR0xpc3QgKmxpc3Q7Ci0gIEdzdFdhdlBhcnNlQ3VlICpjdWU7Ci0gIEdzdFdhdlBhcnNlTGFibCAqbGFibDsKLSAgR3N0V2F2UGFyc2VOb3RlICpub3RlOwotICBHc3RUYWdMaXN0ICp0YWdzOwotICBHc3RUb2MgKnRvYzsKLSAgR3N0VG9jRW50cnkgKmVudHJ5ID0gTlVMTCwgKmN1cl9zdWJlbnRyeSA9IE5VTEwsICpwcmV2X3N1YmVudHJ5ID0gTlVMTDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHdhdik7Ci0gIGlmICh3YXYtPnRvYykgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh3YXYpOwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2LCAiZm91bmQgYW5vdGhlciBUT0MiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAoIXdhdi0+Y3VlcykgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh3YXYpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgLyogRklYTUU6IHNlbmQgQ1VSUkVOVCBzY29wZSB0b2MgdG9vICovCi0gIHRvYyA9IGdzdF90b2NfbmV3IChHU1RfVE9DX1NDT1BFX0dMT0JBTCk7Ci0KLSAgLyogYWRkIGN1ZSBlZGl0aW9uICovCi0gIGVudHJ5ID0gZ3N0X3RvY19lbnRyeV9uZXcgKEdTVF9UT0NfRU5UUllfVFlQRV9FRElUSU9OLCAiY3VlIik7Ci0gIGdzdF90b2NfZW50cnlfc2V0X3N0YXJ0X3N0b3BfdGltZXMgKGVudHJ5LCAwLCB3YXYtPmR1cmF0aW9uKTsKLSAgZ3N0X3RvY19hcHBlbmRfZW50cnkgKHRvYywgZW50cnkpOwotCi0gIC8qIGFkZCB0cmFja3MgaW4gY3VlIGVkaXRpb24gKi8KLSAgbGlzdCA9IHdhdi0+Y3VlczsKLSAgd2hpbGUgKGxpc3QpIHsKLSAgICBjdWUgPSBsaXN0LT5kYXRhOwotICAgIHByZXZfc3ViZW50cnkgPSBjdXJfc3ViZW50cnk7Ci0gICAgLyogcHJldmlvdXMgdHJhY2sgc3RvcCB0aW1lID0gY3VycmVudCB0cmFjayBzdGFydCB0aW1lICovCi0gICAgaWYgKHByZXZfc3ViZW50cnkgIT0gTlVMTCkgewotICAgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyAocHJldl9zdWJlbnRyeSwgJnN0YXJ0LCBOVUxMKTsKLSAgICAgIHN0b3AgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKGN1ZS0+cG9zaXRpb24sIEdTVF9TRUNPTkQsIHdhdi0+cmF0ZSk7Ci0gICAgICBnc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzIChwcmV2X3N1YmVudHJ5LCBzdGFydCwgc3RvcCk7Ci0gICAgfQotICAgIGlkID0gZ19zdHJkdXBfcHJpbnRmICgiJTA4eCIsIGN1ZS0+aWQpOwotICAgIGN1cl9zdWJlbnRyeSA9IGdzdF90b2NfZW50cnlfbmV3IChHU1RfVE9DX0VOVFJZX1RZUEVfVFJBQ0ssIGlkKTsKLSAgICBnX2ZyZWUgKGlkKTsKLSAgICBzdGFydCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9yb3VuZCAoY3VlLT5wb3NpdGlvbiwgR1NUX1NFQ09ORCwgd2F2LT5yYXRlKTsKLSAgICBzdG9wID0gd2F2LT5kdXJhdGlvbjsKLSAgICBnc3RfdG9jX2VudHJ5X3NldF9zdGFydF9zdG9wX3RpbWVzIChjdXJfc3ViZW50cnksIHN0YXJ0LCBzdG9wKTsKLSAgICBnc3RfdG9jX2VudHJ5X2FwcGVuZF9zdWJfZW50cnkgKGVudHJ5LCBjdXJfc3ViZW50cnkpOwotICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7Ci0gIH0KLQotICAvKiBhZGQgdGFncyBpbiB0cmFja3MgKi8KLSAgbGlzdCA9IHdhdi0+bGFibHM7Ci0gIHdoaWxlIChsaXN0KSB7Ci0gICAgbGFibCA9IGxpc3QtPmRhdGE7Ci0gICAgaWQgPSBnX3N0cmR1cF9wcmludGYgKCIlMDh4IiwgbGFibC0+Y3VlX3BvaW50X2lkKTsKLSAgICB0YWdzID0gZ3N0X3dhdnBhcnNlX2dldF90YWdzX3RvY19lbnRyeSAodG9jLCBpZCk7Ci0gICAgZ19mcmVlIChpZCk7Ci0gICAgaWYgKHRhZ3MgIT0gTlVMTCkgewotICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfVElUTEUsIGxhYmwtPnRleHQsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgfQotICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7Ci0gIH0KLSAgbGlzdCA9IHdhdi0+bm90ZXM7Ci0gIHdoaWxlIChsaXN0KSB7Ci0gICAgbm90ZSA9IGxpc3QtPmRhdGE7Ci0gICAgaWQgPSBnX3N0cmR1cF9wcmludGYgKCIlMDh4Iiwgbm90ZS0+Y3VlX3BvaW50X2lkKTsKLSAgICB0YWdzID0gZ3N0X3dhdnBhcnNlX2dldF90YWdzX3RvY19lbnRyeSAodG9jLCBpZCk7Ci0gICAgZ19mcmVlIChpZCk7Ci0gICAgaWYgKHRhZ3MgIT0gTlVMTCkgewotICAgICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9QUkVQRU5ELCBHU1RfVEFHX0NPTU1FTlQsCi0gICAgICAgICAgbm90ZS0+dGV4dCwgTlVMTCk7Ci0gICAgfQotICAgIGxpc3QgPSBnX2xpc3RfbmV4dCAobGlzdCk7Ci0gIH0KLQotICAvKiBzZW5kIGRhdGEgYXMgVE9DICovCi0gIHdhdi0+dG9jID0gdG9jOwotCi0gIC8qIHNlbmQgVE9DIGV2ZW50ICovCi0gIGlmICh3YXYtPnRvYykgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh3YXYpOwotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAod2F2LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfdG9jICh3YXYtPnRvYywgRkFMU0UpKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0jZGVmaW5lIE1BWF9CVUZGRVJfU0laRSA0MDk2Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGFyc2VfZHM2NCAoR3N0V2F2UGFyc2UgKiB3YXYsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50MzIgZGF0YVNpemVMb3csIGRhdGFTaXplSGlnaDsKLSAgZ3VpbnQzMiBzYW1wbGVDb3VudExvdywgc2FtcGxlQ291bnRIaWdoOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGFTaXplTG93ID0gR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSArIDIgKiA0KTsKLSAgZGF0YVNpemVIaWdoID0gR1NUX1JFQURfVUlOVDMyX0xFIChtYXAuZGF0YSArIDMgKiA0KTsKLSAgc2FtcGxlQ291bnRMb3cgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCAqIDQpOwotICBzYW1wbGVDb3VudEhpZ2ggPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNSAqIDQpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBpZiAoZGF0YVNpemVIaWdoICE9IDB4RkZGRkZGRkYgJiYgZGF0YVNpemVMb3cgIT0gMHhGRkZGRkZGRikgewotICAgIHdhdi0+ZGF0YXNpemUgPSAoKGd1aW50NjQpIGRhdGFTaXplSGlnaCA8PCAzMikgfCBkYXRhU2l6ZUxvdzsKLSAgfQotICBpZiAoc2FtcGxlQ291bnRIaWdoICE9IDB4RkZGRkZGRkYgJiYgc2FtcGxlQ291bnRMb3cgIT0gMHhGRkZGRkZGRikgewotICAgIHdhdi0+ZmFjdCA9ICgoZ3VpbnQ2NCkgc2FtcGxlQ291bnRIaWdoIDw8IDMyKSB8IHNhbXBsZUNvdW50TG93OwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiR290ICdkczY0JyBUQUcsIGRhdGFzaXplIDogJSIgR19HSU5UNjRfRk9STUFUCi0gICAgICAiIGZhY3Q6ICUiIEdfR0lOVDY0X0ZPUk1BVCwgd2F2LT5kYXRhc2l6ZSwgd2F2LT5mYWN0KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMgKEdzdFdhdlBhcnNlICogd2F2KQotewotICBHc3RGbG93UmV0dXJuIHJlcyA9IEdTVF9GTE9XX09LOwotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIGdzdF9yaWZmX3N0cmZfYXVkcyAqaGVhZGVyID0gTlVMTDsKLSAgZ3VpbnQzMiB0YWcsIHNpemU7Ci0gIGdib29sZWFuIGdvdGRhdGEgPSBGQUxTRTsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIGdjaGFyICpjb2RlY19uYW1lID0gTlVMTDsKLSAgZ2ludDY0IHVwc3RyZWFtX3NpemUgPSAwOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgLyogc2VhcmNoIGZvciAiX2ZtdCIgY2h1bmssIHdoaWNoIG11c3QgYmUgYmVmb3JlICJkYXRhIiAqLwotICB3aGlsZSAoIXdhdi0+Z290X2ZtdCkgewotICAgIEdzdEJ1ZmZlciAqZXh0cmE7Ci0KLSAgICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICAgIGlmICghZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmsgKHdhdiwgJnRhZywgJnNpemUpKQotICAgICAgICByZXR1cm4gcmVzOwotCi0gICAgICBnc3RfYWRhcHRlcl9mbHVzaCAod2F2LT5hZGFwdGVyLCA4KTsKLSAgICAgIHdhdi0+b2Zmc2V0ICs9IDg7Ci0KLSAgICAgIGlmIChzaXplKSB7Ci0gICAgICAgIGJ1ZiA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICh3YXYtPmFkYXB0ZXIsIHNpemUpOwotICAgICAgICBpZiAoc2l6ZSAmIDEpCi0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgMSk7Ci0gICAgICAgIHdhdi0+b2Zmc2V0ICs9IEdTVF9ST1VORF9VUF8yIChzaXplKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoKHJlcyA9IGdzdF9yaWZmX3JlYWRfY2h1bmsgKEdTVF9FTEVNRU5UX0NBU1QgKHdhdiksIHdhdi0+c2lua3BhZCwKLSAgICAgICAgICAgICAgICAgICZ3YXYtPm9mZnNldCwgJnRhZywgJmJ1ZikpICE9IEdTVF9GTE9XX09LKQotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLQotICAgIGlmICh0YWcgPT0gR1NUX1JTNjRfVEFHX0RTNjQpIHsKLSAgICAgIGlmICghcGFyc2VfZHM2NCAod2F2LCBidWYpKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICBlbHNlCi0gICAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmICh0YWcgIT0gR1NUX1JJRkZfVEFHX2ZtdCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAic2tpcHBpbmcgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBjaHVuayIsCi0gICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTICh0YWcpKTsKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICBidWYgPSBOVUxMOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKCEoZ3N0X3JpZmZfcGFyc2Vfc3RyZl9hdWRzIChHU1RfRUxFTUVOVF9DQVNUICh3YXYpLCBidWYsICZoZWFkZXIsCi0gICAgICAgICAgICAgICAgJmV4dHJhKSkpCi0gICAgICBnb3RvIHBhcnNlX2hlYWRlcl9lcnJvcjsKLQotICAgIGJ1ZiA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBwYXJzZV9zdHJmX2F1ZHMoKSB0b29rIG93bmVyc2hpcCBvZiBidWZmZXIgKi8KLQotICAgIC8qIGRvIHNhbml0eSBjaGVja3Mgb2YgaGVhZGVyIGZpZWxkcyAqLwotICAgIGlmIChoZWFkZXItPmNoYW5uZWxzID09IDApCi0gICAgICBnb3RvIG5vX2NoYW5uZWxzOwotICAgIGlmIChoZWFkZXItPnJhdGUgPT0gMCkKLSAgICAgIGdvdG8gbm9fcmF0ZTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImNyZWF0aW5nIHRoZSBjYXBzIik7Ci0KLSAgICAvKiBOb3RlOiBnc3RfcmlmZl9jcmVhdGVfYXVkaW9fY2FwcyBtaWdodCBuZWVkIHRvIGZpeCB2YWx1ZXMgaW4KLSAgICAgKiB0aGUgaGVhZGVyIGhlYWRlciBkZXBlbmRpbmcgb24gdGhlIGZvcm1hdCwgc28gY2FsbCBpdCBmaXJzdCAqLwotICAgIC8qIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2hhbm5lbCByZW9yZGVyIG1hcCAqLwotICAgIGNhcHMgPSBnc3RfcmlmZl9jcmVhdGVfYXVkaW9fY2FwcyAoaGVhZGVyLT5mb3JtYXQsIE5VTEwsIGhlYWRlciwgZXh0cmEsCi0gICAgICAgIE5VTEwsICZjb2RlY19uYW1lLCBOVUxMKTsKLQotICAgIGlmIChleHRyYSkKLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGV4dHJhKTsKLQotICAgIGlmICghY2FwcykKLSAgICAgIGdvdG8gdW5rbm93bl9mb3JtYXQ7Ci0KLSAgICAvKiBJZiB3ZSBnb3QgcmF3IGF1ZGlvIGZyb20gdXBzdHJlYW0sIHdlIHJlbW92ZSB0aGUgY29kZWNfZGF0YSBmaWVsZCwKLSAgICAgKiB3aGljaCBtYXkgaGF2ZSBiZWVuIGFkZGVkIGlmIHRoZSB3YXYgaGVhZGVyIGluY2x1ZGVkIGFuIGV4dGVuZGVkCi0gICAgICogY2h1bmsuIFdlIHdhbnQgdG8ga2VlcCBpdCBmb3Igbm9uIHJhdyBhdWRpby4KLSAgICAgKi8KLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gICAgaWYgKHMgJiYgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgImF1ZGlvL3gtcmF3IikpIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiY29kZWNfZGF0YSIpOwotICAgIH0KLQotICAgIC8qIGRvIG1vcmUgc2FuaXR5IGNoZWNrcyBvZiBoZWFkZXIgZmllbGRzCi0gICAgICogKHRoZXNlIGNhbiBiZSBzYW5pdGl6ZWQgYnkgZ3N0X3JpZmZfY3JlYXRlX2F1ZGlvX2NhcHMoKQotICAgICAqLwotICAgIHdhdi0+Zm9ybWF0ID0gaGVhZGVyLT5mb3JtYXQ7Ci0gICAgd2F2LT5yYXRlID0gaGVhZGVyLT5yYXRlOwotICAgIHdhdi0+Y2hhbm5lbHMgPSBoZWFkZXItPmNoYW5uZWxzOwotICAgIHdhdi0+YmxvY2thbGlnbiA9IGhlYWRlci0+YmxvY2thbGlnbjsKLSAgICB3YXYtPmRlcHRoID0gaGVhZGVyLT5iaXRzX3Blcl9zYW1wbGU7Ci0gICAgd2F2LT5hdl9icHMgPSBoZWFkZXItPmF2X2JwczsKLSAgICB3YXYtPnZiciA9IEZBTFNFOwotCi0gICAgZ19mcmVlIChoZWFkZXIpOwotICAgIGhlYWRlciA9IE5VTEw7Ci0KLSAgICAvKiBkbyBmb3JtYXQgc3BlY2lmaWMgaGFuZGxpbmcgKi8KLSAgICBzd2l0Y2ggKHdhdi0+Zm9ybWF0KSB7Ci0gICAgICBjYXNlIEdTVF9SSUZGX1dBVkVfRk9STUFUX01QRUdMMTI6Ci0gICAgICBjYXNlIEdTVF9SSUZGX1dBVkVfRk9STUFUX01QRUdMMzoKLSAgICAgIHsKLSAgICAgICAgLyogTm90ZTogd29ya2Fyb3VuZCBmb3IgbXAyL21wMyBlbWJlZGRlZCBpbiB3YXYsIHRoYXQgcmVsaWVzIG9uIHRoZQotICAgICAgICAgKiBiaXRyYXRlIGluc2lkZSB0aGUgbXBlZyBzdHJlYW0gKi8KLSAgICAgICAgR1NUX0lORk8gKCJyZXNldHRpbmcgYnBzIGZyb20gJXUgdG8gMCBmb3IgbXAyLzMiLCB3YXYtPmF2X2Jwcyk7Ci0gICAgICAgIHdhdi0+YnBzID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9SSUZGX1dBVkVfRk9STUFUX1BDTToKLSAgICAgICAgaWYgKHdhdi0+YmxvY2thbGlnbiA+IHdhdi0+Y2hhbm5lbHMgKiAoKHdhdi0+ZGVwdGggKyA3KSAvIDgpKQotICAgICAgICAgIGdvdG8gaW52YWxpZF9ibG9ja2FsaWduOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh3YXYtPmF2X2JwcyA+IHdhdi0+YmxvY2thbGlnbiAqIHdhdi0+cmF0ZSkKLSAgICAgICAgICBnb3RvIGludmFsaWRfYnBzOwotICAgICAgICAvKiB1c2UgdGhlIGNvbmZpZ3VyZWQgYnBzICovCi0gICAgICAgIHdhdi0+YnBzID0gd2F2LT5hdl9icHM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHdhdi0+d2lkdGggPSAod2F2LT5ibG9ja2FsaWduICogOCkgLyB3YXYtPmNoYW5uZWxzOwotICAgIHdhdi0+Ynl0ZXNfcGVyX3NhbXBsZSA9IHdhdi0+Y2hhbm5lbHMgKiB3YXYtPndpZHRoIC8gODsKLQotICAgIGlmICh3YXYtPmJ5dGVzX3Blcl9zYW1wbGUgPD0gMCkKLSAgICAgIGdvdG8gbm9fYnl0ZXNfcGVyX3NhbXBsZTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImJsb2NrYWxpZ24gPSAldSIsIChndWludCkgd2F2LT5ibG9ja2FsaWduKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJ3aWR0aCAgICAgID0gJXUiLCAoZ3VpbnQpIHdhdi0+d2lkdGgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImRlcHRoICAgICAgPSAldSIsIChndWludCkgd2F2LT5kZXB0aCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiYXZfYnBzICAgICA9ICV1IiwgKGd1aW50KSB3YXYtPmF2X2Jwcyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiZnJlcXVlbmN5ICA9ICV1IiwgKGd1aW50KSB3YXYtPnJhdGUpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImNoYW5uZWxzICAgPSAldSIsIChndWludCkgd2F2LT5jaGFubmVscyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiYnl0ZXNfcGVyX3NhbXBsZSA9ICV1Iiwgd2F2LT5ieXRlc19wZXJfc2FtcGxlKTsKLQotICAgIC8qIGJwcyBjYW4gYmUgMCB3aGVuIHdlIGRvbid0IGhhdmUgYSB2YWxpZCBiaXRyYXRlIChtb3N0bHkgZm9yIGNvbXByZXNzZWQKLSAgICAgKiBmb3JtYXRzKS4gVGhpcyB3aWxsIG1ha2UgdGhlIGVsZW1lbnQgb3V0cHV0IGEgQllURSBmb3JtYXQgc2VnbWVudCBhbmQKLSAgICAgKiB3aWxsIG5vdCB0aW1lc3RhbXAgdGhlIG91dGdvaW5nIGJ1ZmZlcnMuCi0gICAgICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiYnBzICAgICAgICA9ICV1IiwgKGd1aW50KSB3YXYtPmJwcyk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJjYXBzID0gJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gICAgLyogY3JlYXRlIHBhZCBsYXRlciBzbyB3ZSBjYW4gc25pZmYgdGhlIGZpcnN0IGZldyBieXRlcwotICAgICAqIG9mIHRoZSByZWFsIGRhdGEgYW5kIGNvcnJlY3Qgb3VyIGNhcHMgaWYgbmVjZXNzYXJ5ICovCi0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJndhdi0+Y2FwcywgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfcmVwbGFjZSAoJmNhcHMsIE5VTEwpOwotCi0gICAgd2F2LT5nb3RfZm10ID0gVFJVRTsKLQotICAgIGlmICh3YXYtPnRhZ3MgPT0gTlVMTCkKLSAgICAgIHdhdi0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgICB7Ci0gICAgICBHc3RDYXBzICp0ZW1wbF9jYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHdhdi0+c2lua3BhZCk7Ci0gICAgICBnc3RfcGJfdXRpbHNfYWRkX2NvZGVjX2Rlc2NyaXB0aW9uX3RvX3RhZ19saXN0ICh3YXYtPnRhZ3MsCi0gICAgICAgICAgR1NUX1RBR19DT05UQUlORVJfRk9STUFULCB0ZW1wbF9jYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbF9jYXBzKTsKLSAgICB9Ci0KLSAgICAvKiBJZiBicHMgaXMgbm9uemVybywgdGhlbiB3ZSBkbyBoYXZlIGEgdmFsaWQgYml0cmF0ZSB0aGF0IGNhbiBiZQotICAgICAqIGFubm91bmNlZCBpbiBhIHRhZyBsaXN0LiAqLwotICAgIGlmICh3YXYtPmJwcykgewotICAgICAgZ3VpbnQgYml0cmF0ZSA9IHdhdi0+YnBzICogODsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHdhdi0+dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgIEdTVF9UQUdfQklUUkFURSwgYml0cmF0ZSwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKGNvZGVjX25hbWUpIHsKLSAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHdhdi0+dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsIGNvZGVjX25hbWUsIE5VTEwpOwotCi0gICAgICBnX2ZyZWUgKGNvZGVjX25hbWUpOwotICAgICAgY29kZWNfbmFtZSA9IE5VTEw7Ci0gICAgfQotCi0gIH0KLQotICBnc3RfcGFkX3BlZXJfcXVlcnlfZHVyYXRpb24gKHdhdi0+c2lua3BhZCwgR1NUX0ZPUk1BVF9CWVRFUywgJnVwc3RyZWFtX3NpemUpOwotICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJ1cHN0cmVhbSBzaXplICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHVwc3RyZWFtX3NpemUpOwotCi0gIC8qIGxvb3AgaGVhZGVycyB1bnRpbCB3ZSBnZXQgZGF0YSAqLwotICB3aGlsZSAoIWdvdGRhdGEpIHsKLSAgICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICAgIGlmICghZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmtfaW5mbyAod2F2LCAmdGFnLCAmc2l6ZSkpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9IGVsc2UgewotICAgICAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgICAgIGJ1ZiA9IE5VTEw7Ci0gICAgICBpZiAoKHJlcyA9Ci0gICAgICAgICAgICAgIGdzdF9wYWRfcHVsbF9yYW5nZSAod2F2LT5zaW5rcGFkLCB3YXYtPm9mZnNldCwgOCwKLSAgICAgICAgICAgICAgICAgICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBoZWFkZXJfcmVhZF9lcnJvcjsKLSAgICAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICB0YWcgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhKTsKLSAgICAgIHNpemUgPSBHU1RfUkVBRF9VSU5UMzJfTEUgKG1hcC5kYXRhICsgNCk7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIH0KLQotICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LAotICAgICAgICAiR290IFRBRzogJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiwgb2Zmc2V0ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgc2l6ZSAlIgotICAgICAgICBHX0dVSU5UMzJfRk9STUFULCBHU1RfRk9VUkNDX0FSR1MgKHRhZyksIHdhdi0+b2Zmc2V0LCBzaXplKTsKLQotICAgIC8qIE1heGltdW0gdmFsaWQgc2l6ZSBpcyBJTlRfTUFYICovCi0gICAgaWYgKHNpemUgJiAweDgwMDAwMDAwKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdiwgIkludmFsaWQgc2l6ZSwgY2xpcHBpbmcgdG8gMHg3ZmZmZmZmZiIpOwotICAgICAgc2l6ZSA9IDB4N2ZmZmZmZmY7Ci0gICAgfQotCi0gICAgLyogQ2xpcCB0byB1cHN0cmVhbSBzaXplIGlmIGtub3duICovCi0gICAgaWYgKHdhdi0+ZGF0YXNpemUgPiAwICYmIHNpemUgKyB3YXYtPm9mZnNldCA+IHdhdi0+ZGF0YXNpemUpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2LCAiQ2xpcHBpbmcgY2h1bmsgc2l6ZSB0byBmaWxlIHNpemUiKTsKLSAgICAgIHNpemUgPSB3YXYtPmRhdGFzaXplIC0gd2F2LT5vZmZzZXQ7Ci0gICAgfQotCi0gICAgLyogd2F2IGlzIGEgc3QwMHBpZCBmb3JtYXQsIHdlIGRvbid0IGtub3cgZm9yIHN1cmUgd2hlcmUgZGF0YSBzdGFydHMuCi0gICAgICogU28gd2UgaGF2ZSB0byBnbyBiaXQgYnkgYml0IHVudGlsIHdlIGZpbmQgdGhlICdkYXRhJyBoZWFkZXIKLSAgICAgKi8KLSAgICBzd2l0Y2ggKHRhZykgewotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfZGF0YTp7Ci0gICAgICAgIGd1aW50NjQgc2l6ZTY0OwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIkdvdCAnZGF0YScgVEFHLCBzaXplIDogJXUiLCBzaXplKTsKLSAgICAgICAgc2l6ZTY0ID0gc2l6ZTsKLSAgICAgICAgaWYgKHdhdi0+aWdub3JlX2xlbmd0aCkgewotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIklnbm9yaW5nIGxlbmd0aCIpOwotICAgICAgICAgIHNpemU2NCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgOCk7Ci0gICAgICAgICAgZ290ZGF0YSA9IFRSVUU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgfQotICAgICAgICB3YXYtPm9mZnNldCArPSA4OwotICAgICAgICB3YXYtPmRhdGFzdGFydCA9IHdhdi0+b2Zmc2V0OwotICAgICAgICAvKiB1c2Ugc2l6ZSBmcm9tIGRzNjQgY2h1bmsgaWYgYXZhaWxhYmxlICovCi0gICAgICAgIGlmIChzaXplNjQgPT0gLTEgJiYgd2F2LT5kYXRhc2l6ZSA+IDApIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJVc2luZyBkczY0IGRhdGFzaXplIik7Ci0gICAgICAgICAgc2l6ZTY0ID0gd2F2LT5kYXRhc2l6ZTsKLSAgICAgICAgfQotICAgICAgICAvKiBJZiBzaXplIGlzIHplcm8sIHRoZW4gdGhlIGRhdGEgY2h1bmsgcHJvYmFibHkgYWN0dWFsbHkgZXh0ZW5kcyB0bwotICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBmaWxlICovCi0gICAgICAgIGlmIChzaXplNjQgPT0gMCAmJiB1cHN0cmVhbV9zaXplKSB7Ci0gICAgICAgICAgc2l6ZTY0ID0gdXBzdHJlYW1fc2l6ZSAtIHdhdi0+ZGF0YXN0YXJ0OwotICAgICAgICB9Ci0gICAgICAgIC8qIE9yIHRoZSBmaWxlIG1pZ2h0IGJlIHRydW5jYXRlZCAqLwotICAgICAgICBlbHNlIGlmICh1cHN0cmVhbV9zaXplKSB7Ci0gICAgICAgICAgc2l6ZTY0ID0gTUlOIChzaXplNjQsICh1cHN0cmVhbV9zaXplIC0gd2F2LT5kYXRhc3RhcnQpKTsKLSAgICAgICAgfQotICAgICAgICB3YXYtPmRhdGFzaXplID0gc2l6ZTY0OwotICAgICAgICB3YXYtPmRhdGFsZWZ0ID0gc2l6ZTY0OwotICAgICAgICB3YXYtPmVuZF9vZmZzZXQgPSBzaXplNjQgKyB3YXYtPmRhdGFzdGFydDsKLSAgICAgICAgaWYgKCF3YXYtPnN0cmVhbWluZykgewotICAgICAgICAgIC8qIFdlIHdpbGwgY29udGludWUgcGFyc2luZyB0YWdzICd0aWxsIGVuZCAqLwotICAgICAgICAgIHdhdi0+b2Zmc2V0ICs9IHNpemU2NDsKLSAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJkYXRhc2l6ZSA9ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHNpemU2NCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfZmFjdDp7Ci0gICAgICAgIGlmICh3YXYtPmZhY3QgPT0gMCAmJgotICAgICAgICAgICAgd2F2LT5mb3JtYXQgIT0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfTVBFR0wxMiAmJgotICAgICAgICAgICAgd2F2LT5mb3JtYXQgIT0gR1NUX1JJRkZfV0FWRV9GT1JNQVRfTVBFR0wzKSB7Ci0gICAgICAgICAgY29uc3QgZ3VpbnQgZGF0YV9zaXplID0gNDsKLQotICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiSGF2ZSBmYWN0IGNodW5rIik7Ci0gICAgICAgICAgaWYgKHNpemUgPCBkYXRhX3NpemUpIHsKLSAgICAgICAgICAgIGlmICghZ3N0X3dhdmVwYXJzZV9pZ25vcmVfY2h1bmsgKHdhdiwgYnVmLCB0YWcsIHNpemUpKSB7Ci0gICAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBkYXRhICovCi0gICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIm5lZWQgJXUsIGF2YWlsYWJsZSAldTsgaWdub3JpbmcgY2h1bmsiLAotICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgLyogbnVtYmVyIG9mIHNhbXBsZXMgKGZvciBjb21wcmVzc2VkIGZvcm1hdHMpICovCi0gICAgICAgICAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgICBjb25zdCBndWludDggKmRhdGEgPSBOVUxMOwotCi0gICAgICAgICAgICBpZiAoIWdzdF93YXZwYXJzZV9wZWVrX2NodW5rICh3YXYsICZ0YWcsICZzaXplKSkgewotICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAod2F2LT5hZGFwdGVyLCA4KTsKLSAgICAgICAgICAgIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKHdhdi0+YWRhcHRlciwgZGF0YV9zaXplKTsKLSAgICAgICAgICAgIHdhdi0+ZmFjdCA9IEdTVF9SRUFEX1VJTlQzMl9MRSAoZGF0YSk7Ci0gICAgICAgICAgICBnc3RfYWRhcHRlcl91bm1hcCAod2F2LT5hZGFwdGVyKTsKLSAgICAgICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoICh3YXYtPmFkYXB0ZXIsIEdTVF9ST1VORF9VUF8yIChzaXplKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgICBidWYgPSBOVUxMOwotICAgICAgICAgICAgaWYgKChyZXMgPQotICAgICAgICAgICAgICAgICAgICBnc3RfcGFkX3B1bGxfcmFuZ2UgKHdhdi0+c2lua3BhZCwgd2F2LT5vZmZzZXQgKyA4LAotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zaXplLCAmYnVmKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICAgIGdvdG8gaGVhZGVyX3JlYWRfZXJyb3I7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZiwgMCwgJndhdi0+ZmFjdCwgNCk7Ci0gICAgICAgICAgICB3YXYtPmZhY3QgPSBHVUlOVDMyX0ZST01fTEUgKHdhdi0+ZmFjdCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIH0KLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJoYXZlIGZhY3QgJSIgR19HVUlOVDY0X0ZPUk1BVCwgd2F2LT5mYWN0KTsKLSAgICAgICAgICB3YXYtPm9mZnNldCArPSA4ICsgR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmICghZ3N0X3dhdmVwYXJzZV9pZ25vcmVfY2h1bmsgKHdhdiwgYnVmLCB0YWcsIHNpemUpKSB7Ci0gICAgICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSAqLwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX2FjaWQ6ewotICAgICAgICBjb25zdCBnc3RfcmlmZl9hY2lkICphY2lkID0gTlVMTDsKLSAgICAgICAgY29uc3QgZ3VpbnQgZGF0YV9zaXplID0gc2l6ZW9mIChnc3RfcmlmZl9hY2lkKTsKLSAgICAgICAgZ2Zsb2F0IHRlbXBvOwotCi0gICAgICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiSGF2ZSBhY2lkIGNodW5rIik7Ci0gICAgICAgIGlmIChzaXplIDwgZGF0YV9zaXplKSB7Ci0gICAgICAgICAgaWYgKCFnc3Rfd2F2ZXBhcnNlX2lnbm9yZV9jaHVuayAod2F2LCBidWYsIHRhZywgc2l6ZSkpIHsKLSAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBkYXRhICovCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIm5lZWQgJXUsIGF2YWlsYWJsZSAldTsgaWdub3JpbmcgY2h1bmsiLAotICAgICAgICAgICAgICBkYXRhX3NpemUsIHNpemUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICh3YXYtPnN0cmVhbWluZykgewotICAgICAgICAgIGlmICghZ3N0X3dhdnBhcnNlX3BlZWtfY2h1bmsgKHdhdiwgJnRhZywgJnNpemUpKSB7Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9hZGFwdGVyX2ZsdXNoICh3YXYtPmFkYXB0ZXIsIDgpOwotICAgICAgICAgIGFjaWQgPSAoY29uc3QgZ3N0X3JpZmZfYWNpZCAqKSBnc3RfYWRhcHRlcl9tYXAgKHdhdi0+YWRhcHRlciwKLSAgICAgICAgICAgICAgZGF0YV9zaXplKTsKLSAgICAgICAgICB0ZW1wbyA9IGFjaWQtPnRlbXBvOwotICAgICAgICAgIGdzdF9hZGFwdGVyX3VubWFwICh3YXYtPmFkYXB0ZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdzdE1hcEluZm8gbWFwOwotICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgYnVmID0gTlVMTDsKLSAgICAgICAgICBpZiAoKHJlcyA9Ci0gICAgICAgICAgICAgICAgICBnc3RfcGFkX3B1bGxfcmFuZ2UgKHdhdi0+c2lua3BhZCwgd2F2LT5vZmZzZXQgKyA4LAotICAgICAgICAgICAgICAgICAgICAgIHNpemUsICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgIGdvdG8gaGVhZGVyX3JlYWRfZXJyb3I7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgICBhY2lkID0gKGNvbnN0IGdzdF9yaWZmX2FjaWQgKikgbWFwLmRhdGE7Ci0gICAgICAgICAgdGVtcG8gPSBhY2lkLT50ZW1wbzsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgICAgICB9Ci0gICAgICAgIC8qIHNlbmQgZGF0YSBhcyB0YWdzICovCi0gICAgICAgIGlmICghd2F2LT50YWdzKQotICAgICAgICAgIHdhdi0+dGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9hZGQgKHdhdi0+dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgICAgICAgR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFLCB0ZW1wbywgTlVMTCk7Ci0KLSAgICAgICAgc2l6ZSA9IEdTVF9ST1VORF9VUF8yIChzaXplKTsKLSAgICAgICAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgfQotICAgICAgICB3YXYtPm9mZnNldCArPSA4ICsgc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAgIC8qIEZJWE1FOiBhbGwgbGlzdCB0YWdzIGFmdGVyIGRhdGEgYXJlIGlnbm9yZWQgaW4gc3RyZWFtaW5nIG1vZGUgKi8KLSAgICAgIGNhc2UgR1NUX1JJRkZfVEFHX0xJU1Q6ewotICAgICAgICBndWludDMyIGx0YWc7Ci0KLSAgICAgICAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgY29uc3QgZ3VpbnQ4ICpkYXRhID0gTlVMTDsKLQotICAgICAgICAgIGlmIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHdhdi0+YWRhcHRlcikgPCAxMikgewotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgIH0KLSAgICAgICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwICh3YXYtPmFkYXB0ZXIsIDEyKTsKLSAgICAgICAgICBsdGFnID0gR1NUX1JFQURfVUlOVDMyX0xFIChkYXRhICsgOCk7Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfdW5tYXAgKHdhdi0+YWRhcHRlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgICBidWYgPSBOVUxMOwotICAgICAgICAgIGlmICgocmVzID0KLSAgICAgICAgICAgICAgICAgIGdzdF9wYWRfcHVsbF9yYW5nZSAod2F2LT5zaW5rcGFkLCB3YXYtPm9mZnNldCwgMTIsCi0gICAgICAgICAgICAgICAgICAgICAgJmJ1ZikpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgZ290byBoZWFkZXJfcmVhZF9lcnJvcjsKLSAgICAgICAgICBnc3RfYnVmZmVyX2V4dHJhY3QgKGJ1ZiwgOCwgJmx0YWcsIDQpOwotICAgICAgICAgIGx0YWcgPSBHVUlOVDMyX0ZST01fTEUgKGx0YWcpOwotICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAobHRhZykgewotICAgICAgICAgIGNhc2UgR1NUX1JJRkZfTElTVF9JTkZPOnsKLSAgICAgICAgICAgIGNvbnN0IGdpbnQgZGF0YV9zaXplID0gc2l6ZSAtIDQ7Ci0gICAgICAgICAgICBHc3RUYWdMaXN0ICpuZXc7Ci0KLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiSGF2ZSBMSVNUIGNodW5rIElORk8gc2l6ZSAldSIsIGRhdGFfc2l6ZSk7Ci0gICAgICAgICAgICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICAgICAgICAgICAgaWYgKCFnc3Rfd2F2cGFyc2VfcGVla19jaHVuayAod2F2LCAmdGFnLCAmc2l6ZSkpIHsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgMTIpOwotICAgICAgICAgICAgICB3YXYtPm9mZnNldCArPSAxMjsKLSAgICAgICAgICAgICAgaWYgKGRhdGFfc2l6ZSA+IDApIHsKLSAgICAgICAgICAgICAgICBidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAod2F2LT5hZGFwdGVyLCBkYXRhX3NpemUpOwotICAgICAgICAgICAgICAgIGlmIChkYXRhX3NpemUgJiAxKQotICAgICAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgMSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHdhdi0+b2Zmc2V0ICs9IDEyOwotICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgICAgICBidWYgPSBOVUxMOwotICAgICAgICAgICAgICBpZiAoZGF0YV9zaXplID4gMCkgewotICAgICAgICAgICAgICAgIGlmICgocmVzID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9wYWRfcHVsbF9yYW5nZSAod2F2LT5zaW5rcGFkLCB3YXYtPm9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemUsICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICAgIGdvdG8gaGVhZGVyX3JlYWRfZXJyb3I7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkYXRhX3NpemUgPiAwKSB7Ci0gICAgICAgICAgICAgIC8qIHBhcnNlIHRhZ3MgKi8KLSAgICAgICAgICAgICAgZ3N0X3JpZmZfcGFyc2VfaW5mbyAoR1NUX0VMRU1FTlQgKHdhdiksIGJ1ZiwgJm5ldyk7Ci0gICAgICAgICAgICAgIGlmIChuZXcpIHsKLSAgICAgICAgICAgICAgICBHc3RUYWdMaXN0ICpvbGQgPSB3YXYtPnRhZ3M7Ci0gICAgICAgICAgICAgICAgd2F2LT50YWdzID0KLSAgICAgICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X21lcmdlIChvbGQsIG5ldywgR1NUX1RBR19NRVJHRV9SRVBMQUNFKTsKLSAgICAgICAgICAgICAgICBpZiAob2xkKQotICAgICAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X3VucmVmIChvbGQpOwotICAgICAgICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAobmV3KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgICAgICB3YXYtPm9mZnNldCArPSBHU1RfUk9VTkRfVVBfMiAoZGF0YV9zaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIEdTVF9SSUZGX0xJU1RfYWR0bDp7Ci0gICAgICAgICAgICBjb25zdCBnaW50IGRhdGFfc2l6ZSA9IHNpemUgLSA0OwotCi0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHdhdiwgIkhhdmUgJ2FkdGwnIExJU1QsIHNpemUgJXUiLCBkYXRhX3NpemUpOwotICAgICAgICAgICAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgICAgIGNvbnN0IGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgMTIpOwotICAgICAgICAgICAgICB3YXYtPm9mZnNldCArPSAxMjsKLSAgICAgICAgICAgICAgZGF0YSA9IGdzdF9hZGFwdGVyX21hcCAod2F2LT5hZGFwdGVyLCBkYXRhX3NpemUpOwotICAgICAgICAgICAgICBnc3Rfd2F2cGFyc2VfYWR0bF9jaHVuayAod2F2LCBkYXRhLCBkYXRhX3NpemUpOwotICAgICAgICAgICAgICBnc3RfYWRhcHRlcl91bm1hcCAod2F2LT5hZGFwdGVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgICAgICAgIGJ1ZiA9IE5VTEw7Ci0gICAgICAgICAgICAgIHdhdi0+b2Zmc2V0ICs9IDEyOwotICAgICAgICAgICAgICBpZiAoKHJlcyA9Ci0gICAgICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9wdWxsX3JhbmdlICh3YXYtPnNpbmtwYWQsIHdhdi0+b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemUsICZidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICBnb3RvIGhlYWRlcl9yZWFkX2Vycm9yOwotICAgICAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICAgICAgICBnc3Rfd2F2cGFyc2VfYWR0bF9jaHVuayAod2F2LCAoY29uc3QgZ3VpbnQ4ICopIG1hcC5kYXRhLAotICAgICAgICAgICAgICAgICAgZGF0YV9zaXplKTsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdhdi0+b2Zmc2V0ICs9IEdTVF9ST1VORF9VUF8yIChkYXRhX3NpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdiwgIklnbm9yaW5nIExJU1QgY2h1bmsgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChsdGFnKSk7Ci0gICAgICAgICAgICBpZiAoIWdzdF93YXZlcGFyc2VfaWdub3JlX2NodW5rICh3YXYsIGJ1ZiwgdGFnLCBzaXplKSkKLSAgICAgICAgICAgICAgLyogbmVlZCBtb3JlIGRhdGEgKi8KLSAgICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEdTVF9SSUZGX1RBR19jdWU6ewotICAgICAgICBjb25zdCBndWludCBkYXRhX3NpemUgPSBzaXplOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIkhhdmUgJ2N1ZScgVEFHLCBzaXplIDogJXUiLCBkYXRhX3NpemUpOwotICAgICAgICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICAgICAgICBjb25zdCBndWludDggKmRhdGEgPSBOVUxMOwotCi0gICAgICAgICAgaWYgKCFnc3Rfd2F2cGFyc2VfcGVla19jaHVuayAod2F2LCAmdGFnLCAmc2l6ZSkpIHsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgOCk7Ci0gICAgICAgICAgd2F2LT5vZmZzZXQgKz0gODsKLSAgICAgICAgICBkYXRhID0gZ3N0X2FkYXB0ZXJfbWFwICh3YXYtPmFkYXB0ZXIsIGRhdGFfc2l6ZSk7Ci0gICAgICAgICAgaWYgKCFnc3Rfd2F2cGFyc2VfY3VlX2NodW5rICh3YXYsIGRhdGEsIGRhdGFfc2l6ZSkpIHsKLSAgICAgICAgICAgIGdvdG8gaGVhZGVyX3JlYWRfZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9hZGFwdGVyX3VubWFwICh3YXYtPmFkYXB0ZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgICAgd2F2LT5vZmZzZXQgKz0gODsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGJ1ZiA9IE5VTEw7Ci0gICAgICAgICAgaWYgKChyZXMgPQotICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9wdWxsX3JhbmdlICh3YXYtPnNpbmtwYWQsIHdhdi0+b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSwgJmJ1ZikpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgZ290byBoZWFkZXJfcmVhZF9lcnJvcjsKLSAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICAgIGlmICghZ3N0X3dhdnBhcnNlX2N1ZV9jaHVuayAod2F2LCAoY29uc3QgZ3VpbnQ4ICopIG1hcC5kYXRhLAotICAgICAgICAgICAgICAgICAgZGF0YV9zaXplKSkgewotICAgICAgICAgICAgZ290byBoZWFkZXJfcmVhZF9lcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgICAgfQotICAgICAgICBzaXplID0gR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAod2F2LT5hZGFwdGVyLCBzaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICB9Ci0gICAgICAgIHNpemUgPSBHU1RfUk9VTkRfVVBfMiAoc2l6ZSk7Ci0gICAgICAgIHdhdi0+b2Zmc2V0ICs9IHNpemU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBHU1RfUklGRl9UQUdfc21wbDp7Ci0gICAgICAgIGNvbnN0IGdpbnQgZGF0YV9zaXplID0gc2l6ZTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJIYXZlICdzbXBsJyBUQUcsIHNpemUgOiAldSIsIGRhdGFfc2l6ZSk7Ci0gICAgICAgIGlmICh3YXYtPnN0cmVhbWluZykgewotICAgICAgICAgIGNvbnN0IGd1aW50OCAqZGF0YSA9IE5VTEw7Ci0KLSAgICAgICAgICBpZiAoIWdzdF93YXZwYXJzZV9wZWVrX2NodW5rICh3YXYsICZ0YWcsICZzaXplKSkgewotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfYWRhcHRlcl9mbHVzaCAod2F2LT5hZGFwdGVyLCA4KTsKLSAgICAgICAgICB3YXYtPm9mZnNldCArPSA4OwotICAgICAgICAgIGRhdGEgPSBnc3RfYWRhcHRlcl9tYXAgKHdhdi0+YWRhcHRlciwgZGF0YV9zaXplKTsKLSAgICAgICAgICBpZiAoIWdzdF93YXZwYXJzZV9zbXBsX2NodW5rICh3YXYsIGRhdGEsIGRhdGFfc2l6ZSkpIHsKLSAgICAgICAgICAgIGdvdG8gaGVhZGVyX3JlYWRfZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9hZGFwdGVyX3VubWFwICh3YXYtPmFkYXB0ZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgICAgICAgd2F2LT5vZmZzZXQgKz0gODsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICAgICAgICAgIGJ1ZiA9IE5VTEw7Ci0gICAgICAgICAgaWYgKChyZXMgPQotICAgICAgICAgICAgICAgICAgZ3N0X3BhZF9wdWxsX3JhbmdlICh3YXYtPnNpbmtwYWQsIHdhdi0+b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSwgJmJ1ZikpICE9IEdTVF9GTE9XX09LKQotICAgICAgICAgICAgZ290byBoZWFkZXJfcmVhZF9lcnJvcjsKLSAgICAgICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICAgIGlmICghZ3N0X3dhdnBhcnNlX3NtcGxfY2h1bmsgKHdhdiwgKGNvbnN0IGd1aW50OCAqKSBtYXAuZGF0YSwKLSAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSkpIHsKLSAgICAgICAgICAgIGdvdG8gaGVhZGVyX3JlYWRfZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgICAgIH0KLSAgICAgICAgc2l6ZSA9IEdTVF9ST1VORF9VUF8yIChzaXplKTsKLSAgICAgICAgaWYgKHdhdi0+c3RyZWFtaW5nKSB7Ci0gICAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICAgICAgfQotICAgICAgICBzaXplID0gR1NUX1JPVU5EX1VQXzIgKHNpemUpOwotICAgICAgICB3YXYtPm9mZnNldCArPSBzaXplOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2LCAiSWdub3JpbmcgY2h1bmsgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHRhZykpOwotICAgICAgICBpZiAoIWdzdF93YXZlcGFyc2VfaWdub3JlX2NodW5rICh3YXYsIGJ1ZiwgdGFnLCBzaXplKSkKLSAgICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSAqLwotICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKHVwc3RyZWFtX3NpemUgJiYgKHdhdi0+b2Zmc2V0ID49IHVwc3RyZWFtX3NpemUpKSB7Ci0gICAgICAvKiBOb3cgd2UgYXJlIGdvbmUgdGhyb3VnaCB0aGUgd2hvbGUgZmlsZSAqLwotICAgICAgZ290ZGF0YSA9IFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiRmluaXNoZWQgcGFyc2luZyBoZWFkZXJzIik7Ci0KLSAgaWYgKHdhdi0+YnBzIDw9IDAgJiYgd2F2LT5mYWN0KSB7Ci0jaWYgMAotICAgIC8qIG5vdCBhIGdvb2QgaWRlYSwgYXMgZm9yIGVtYmVkZGVkIG1wMi9tcDMgd2Ugc2V0IGJwcyB0byAwIGVhcmxpZXIgKi8KLSAgICB3YXYtPmJwcyA9Ci0gICAgICAgIChndWludDMyKSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKChndWludDY0KSB3YXYtPnJhdGUsIHdhdi0+ZGF0YXNpemUsCi0gICAgICAgIChndWludDY0KSB3YXYtPmZhY3QpOwotICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiY2FsY3VsYXRlZCBicHMgOiAldSwgZW5hYmxpbmcgVkJSIiwgd2F2LT5icHMpOwotI2VuZGlmCi0gICAgd2F2LT52YnIgPSBUUlVFOwotICB9Ci0KLSAgaWYgKGdzdF93YXZwYXJzZV9jYWxjdWxhdGVfZHVyYXRpb24gKHdhdikpIHsKLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmd2F2LT5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICAgIGlmICghd2F2LT5pZ25vcmVfbGVuZ3RoKQotICAgICAgd2F2LT5zZWdtZW50LmR1cmF0aW9uID0gd2F2LT5kdXJhdGlvbjsKLSAgICBpZiAoIXdhdi0+dG9jKQotICAgICAgZ3N0X3dhdnBhcnNlX2NyZWF0ZV90b2MgKHdhdik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogbm8gYml0cmF0ZSwgbGV0IGRvd25zdHJlYW0gcGVlciBkbyB0aGUgbWF0aCwgd2UnbGwgZmVlZCBpdCBieXRlcy4gKi8KLSAgICBnc3Rfc2VnbWVudF9pbml0ICgmd2F2LT5zZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTKTsKLSAgICBpZiAoIXdhdi0+aWdub3JlX2xlbmd0aCkKLSAgICAgIHdhdi0+c2VnbWVudC5kdXJhdGlvbiA9IHdhdi0+ZGF0YXNpemU7Ci0gIH0KLQotICAvKiBub3cgd2UgaGF2ZSBhbGwgdGhlIGluZm8gdG8gcGVyZm9ybSBhIHBlbmRpbmcgc2VlayBpZiBhbnksIGlmIG5vCi0gICAqIGV2ZW50LCB0aGlzIHdpbGwgc3RpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCBpdCB3aWxsIGFsc28gc2VuZAotICAgKiB0aGUgcmlnaHQgbmV3c2VnbWVudCBldmVudCBkb3duc3RyZWFtLiAqLwotICBnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrICh3YXYsIHdhdi0+c2Vla19ldmVudCk7Ci0gIC8qIHJlbW92ZSBwZW5kaW5nIGV2ZW50ICovCi0gIGdzdF9ldmVudF9yZXBsYWNlICgmd2F2LT5zZWVrX2V2ZW50LCBOVUxMKTsKLQotICAvKiB3ZSBqdXN0IHN0YXJ0ZWQsIHdlIGFyZSBkaXNjb250ICovCi0gIHdhdi0+ZGlzY29udCA9IFRSVUU7Ci0KLSAgd2F2LT5zdGF0ZSA9IEdTVF9XQVZQQVJTRV9EQVRBOwotCi0gIC8qIGRldGVybWluZSByZWFzb25hYmxlIG1heCBidWZmZXIgc2l6ZSwKLSAgICogdGhhdCBpcywgYnVmZmVycyBub3QgdG9vIHNtYWxsIGVpdGhlciBzaXplIG9yIHRpbWUgd2lzZQotICAgKiBzbyB3ZSBkbyBub3QgZW5kIHVwIHdpdGggdG9vIG1hbnkgb2YgdGhlbSAqLwotICAvKiB2YXIgYWJ1c2UgKi8KLSAgaWYgKGdzdF93YXZwYXJzZV90aW1lX3RvX2J5dGVwb3MgKHdhdiwgNDAgKiBHU1RfTVNFQ09ORCwgJnVwc3RyZWFtX3NpemUpKQotICAgIHdhdi0+bWF4X2J1Zl9zaXplID0gdXBzdHJlYW1fc2l6ZTsKLSAgZWxzZQotICAgIHdhdi0+bWF4X2J1Zl9zaXplID0gMDsKLSAgd2F2LT5tYXhfYnVmX3NpemUgPSBNQVggKHdhdi0+bWF4X2J1Zl9zaXplLCBNQVhfQlVGRkVSX1NJWkUpOwotICBpZiAod2F2LT5ibG9ja2FsaWduID4gMCkKLSAgICB3YXYtPm1heF9idWZfc2l6ZSAtPSAod2F2LT5tYXhfYnVmX3NpemUgJSB3YXYtPmJsb2NrYWxpZ24pOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIm1heCBidWZmZXIgc2l6ZSAldSIsIHdhdi0+bWF4X2J1Zl9zaXplKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1IgKi8KLWV4aXQ6Ci0gIHsKLSAgICBnX2ZyZWUgKGNvZGVjX25hbWUpOwotICAgIGdfZnJlZSAoaGVhZGVyKTsKLSAgICBpZiAoY2FwcykKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICByZXR1cm4gcmVzOwotICB9Ci1mYWlsOgotICB7Ci0gICAgcmVzID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBleGl0OwotICB9Ci1wYXJzZV9oZWFkZXJfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAod2F2LCBTVFJFQU0sIERFTVVYLCAoTlVMTCksCi0gICAgICAgICgiQ291bGRuJ3QgcGFyc2UgYXVkaW8gaGVhZGVyIikpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotbm9fY2hhbm5lbHM6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAod2F2LCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoIlN0cmVhbSBjbGFpbXMgdG8gY29udGFpbiBubyBjaGFubmVscyAtIGludmFsaWQgZGF0YSIpKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLW5vX3JhdGU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAod2F2LCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoIlN0cmVhbSB3aXRoIHNhbXBsZV9yYXRlID09IDAgLSBpbnZhbGlkIGRhdGEiKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci1pbnZhbGlkX2Jsb2NrYWxpZ246Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAod2F2LCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoIlN0cmVhbSBjbGFpbXMgYmxvY2thbGlnbiA9ICV1LCB3aGljaCBpcyBtb3JlIHRoYW4gJXUgLSBpbnZhbGlkIGRhdGEiLAotICAgICAgICAgICAgd2F2LT5ibG9ja2FsaWduLCB3YXYtPmNoYW5uZWxzICogKCh3YXYtPmRlcHRoICsgNykgLyA4KSkpOwotICAgIGdvdG8gZmFpbDsKLSAgfQotaW52YWxpZF9icHM6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAod2F2LCBTVFJFQU0sIEZBSUxFRCwgKE5VTEwpLAotICAgICAgICAoIlN0cmVhbSBjbGFpbXMgYXZfYnNwID0gJXUsIHdoaWNoIGlzIG1vcmUgdGhhbiAldSAtIGludmFsaWQgZGF0YSIsCi0gICAgICAgICAgICB3YXYtPmF2X2Jwcywgd2F2LT5ibG9ja2FsaWduICogd2F2LT5yYXRlKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci1ub19ieXRlc19wZXJfc2FtcGxlOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHdhdiwgU1RSRUFNLCBGQUlMRUQsIChOVUxMKSwKLSAgICAgICAgKCJDb3VsZCBub3QgY2FsdWNsYXRlIGJ5dGVzIHBlciBzYW1wbGUgLSBpbnZhbGlkIGRhdGEiKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci11bmtub3duX2Zvcm1hdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh3YXYsIFNUUkVBTSwgVFlQRV9OT1RfRk9VTkQsIChOVUxMKSwKLSAgICAgICAgKCJObyBjYXBzIGZvdW5kIGZvciBmb3JtYXQgMHgleCwgJXUgY2hhbm5lbHMsICV1IEh6IiwKLSAgICAgICAgICAgIHdhdi0+Zm9ybWF0LCB3YXYtPmNoYW5uZWxzLCB3YXYtPnJhdGUpKTsKLSAgICBnb3RvIGZhaWw7Ci0gIH0KLWhlYWRlcl9yZWFkX2Vycm9yOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHdhdiwgU1RSRUFNLCBERU1VWCwgKE5VTEwpLAotICAgICAgICAoIkNvdWxkbid0IHJlYWQgaW4gaGVhZGVyICVkICglcykiLCByZXMsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKSk7Ci0gICAgZ290byBmYWlsOwotICB9Ci19Ci0KLS8qCi0gKiBSZWFkIFdBViBmaWxlIHRhZyB3aGVuIHN0cmVhbWluZwotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3dhdnBhcnNlX3BhcnNlX3N0cmVhbV9pbml0IChHc3RXYXZQYXJzZSAqIHdhdikKLXsKLSAgaWYgKGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAod2F2LT5hZGFwdGVyKSA+PSAxMikgewotICAgIEdzdEJ1ZmZlciAqdG1wOwotCi0gICAgLyogX3Rha2UgZmx1c2hlcyB0aGUgZGF0YSAqLwotICAgIHRtcCA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyICh3YXYtPmFkYXB0ZXIsIDEyKTsKLQotICAgIEdTVF9ERUJVRyAoIlBhcnNpbmcgd2F2IGhlYWRlciIpOwotICAgIGlmICghZ3N0X3dhdnBhcnNlX3BhcnNlX2ZpbGVfaGVhZGVyIChHU1RfRUxFTUVOVF9DQVNUICh3YXYpLCB0bXApKQotICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotCi0gICAgd2F2LT5vZmZzZXQgKz0gMTI7Ci0gICAgLyogR28gdG8gbmV4dCBzdGF0ZSAqLwotICAgIHdhdi0+c3RhdGUgPSBHU1RfV0FWUEFSU0VfSEVBREVSOwotICB9Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogaGFuZGxlIGFuIGV2ZW50IHNlbnQgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQuCi0gKgotICogVGhpcyBldmVudCBjYW4gYmUgc2VudCBlaXRoZXIgaW4gdGhlIFJFQURZIHN0YXRlIG9yIHRoZQotICogPlJFQURZIHN0YXRlLiBUaGUgb25seSBldmVudCBvZiBpbnRlcmVzdCByZWFsbHkgaXMgdGhlIHNlZWsKLSAqIGV2ZW50LgotICoKLSAqIEluIHRoZSBSRUFEWSBzdGF0ZSB3ZSBjYW4gb25seSBzdG9yZSB0aGUgZXZlbnQgYW5kIHRyeSB0bwotICogcmVzcGVjdCBpdCB3aGVuIGdvaW5nIHRvIFBBVVNFRC4gV2UgYXNzdW1lIHdlIGFyZSBpbiB0aGUKLSAqIFJFQURZIHN0YXRlIHdoZW4gb3VyIHBhcnNpbmcgc3RhdGUgIT0gR1NUX1dBVlBBUlNFX0RBVEEuCi0gKgotICogV2hlbiB3ZSBhcmUgc3RlYW1pbmcsIHdlIGNhbiBzaW1wbHkgcGVyZm9ybSB0aGUgc2VlayByaWdodAotICogYXdheS4KLSAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFyc2Vfc2VuZF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFdhdlBhcnNlICp3YXYgPSBHU1RfV0FWUEFSU0UgKGVsZW1lbnQpOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJyZWNlaXZlZCBldmVudCAlcyIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VFSzoKLSAgICAgIGlmICh3YXYtPnN0YXRlID09IEdTVF9XQVZQQVJTRV9EQVRBKSB7Ci0gICAgICAgIC8qIHdlIGNhbiBoYW5kbGUgdGhlIHNlZWsgZGlyZWN0bHkgd2hlbiBzdHJlYW1pbmcgZGF0YSAqLwotICAgICAgICByZXMgPSBnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrICh3YXYsIGV2ZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgInF1ZXVpbmcgc2VlayBmb3IgbGF0ZXIiKTsKLQotICAgICAgICBnc3RfZXZlbnRfcmVwbGFjZSAoJndhdi0+c2Vla19ldmVudCwgZXZlbnQpOwotCi0gICAgICAgIC8qIHdlIGFsd2F5cyByZXR1cm4gdHJ1ZSAqLwotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9oYXZlX2R0c19jYXBzIChjb25zdCBHc3RDYXBzICogY2FwcywgR3N0VHlwZUZpbmRQcm9iYWJpbGl0eSBwcm9iKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0KLSAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby94LWR0cyIpKQotICAgIHJldHVybiBGQUxTRTsKLSAgLyogdHlwZWZpbmQgYmVoYXZpb3IgZm9yIERUUzoKLSAgICogIE1BWElNVU06IG11bHRpcGxlIGZyYW1lIHN5bmNzIGRldGVjdGVkLCBjZXJ0YWlubHkgRFRTCi0gICAqICBMSUtFTFk6IHNpbmdsZSBmcmFtZSBzeW5jIGF0IG9mZnNldCAwLiAgTWF5YmUgRFRTPwotICAgKiAgUE9TU0lCTEU6IHNpbmdsZSBmcmFtZSBzeW5jLCBub3QgYXQgb2Zmc2V0IDAuICBIaWdobHkgdW5saWtlbHkKLSAgICogICAgdG8gYmUgRFRTLiAgKi8KLSAgaWYgKHByb2IgPiBHU1RfVFlQRV9GSU5EX0xJS0VMWSkKLSAgICByZXR1cm4gVFJVRTsKLSAgaWYgKHByb2IgPD0gR1NUX1RZUEVfRklORF9QT1NTSUJMRSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIC8qIGZvciBtYXliZSwgY2hlY2sgZm9yIGF0IGxlYXN0IGEgdmFsaWQtbG9va2luZyByYXRlIGFuZCBjaGFubmVscyAqLwotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAiY2hhbm5lbHMiKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIC8qIGFuZCBmb3IgZXh0cmEgYXNzdXJhbmNlIHdlIGNvdWxkIGFsc28gY2hlY2sgdGhlIHJhdGUgZnJvbSB0aGUgRFRTIGZyYW1lCi0gICAqIGFnYWluc3QgdGhlIG9uZSBpbiB0aGUgd2F2IGhlYWRlciwgYnV0IGZvciBub3cgbGV0J3Mgbm90IGRvIHRoYXQgKi8KLSAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicmF0ZSIpOwotfQotCi1zdGF0aWMgR3N0VGFnTGlzdCAqCi1nc3Rfd2F2cGFyc2VfZ2V0X3Vwc3RyZWFtX3RhZ3MgKEdzdFdhdlBhcnNlICogd2F2LCBHc3RUYWdTY29wZSBzY29wZSkKLXsKLSAgR3N0VGFnTGlzdCAqdGFncyA9IE5VTEw7Ci0gIEdzdEV2ZW50ICpldjsKLSAgZ2ludCBpOwotCi0gIGkgPSAwOwotICB3aGlsZSAoKGV2ID0gZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50ICh3YXYtPnNpbmtwYWQsIEdTVF9FVkVOVF9UQUcsIGkrKykpKSB7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXYsICZ0YWdzKTsKLSAgICBpZiAodGFncyAhPSBOVUxMICYmIGdzdF90YWdfbGlzdF9nZXRfc2NvcGUgKHRhZ3MpID09IHNjb3BlKSB7Ci0gICAgICB0YWdzID0gZ3N0X3RhZ19saXN0X2NvcHkgKHRhZ3MpOwotICAgICAgZ3N0X3RhZ19saXN0X3JlbW92ZV90YWcgKHRhZ3MsIEdTVF9UQUdfQ09OVEFJTkVSX0ZPUk1BVCk7Ci0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGV2KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICB0YWdzID0gTlVMTDsKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGV2KTsKLSAgfQotICByZXR1cm4gdGFnczsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYXJzZV9hZGRfc3JjX3BhZCAoR3N0V2F2UGFyc2UgKiB3YXYsIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RUYWdMaXN0ICp0YWdzLCAqdXRhZ3M7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAod2F2LCAiYWRkaW5nIHNyYyBwYWQiKTsKLQotICBnX2Fzc2VydCAod2F2LT5jYXBzICE9IE5VTEwpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlICh3YXYtPmNhcHMsIDApOwotICBpZiAocyAmJiBnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXVkaW8veC1yYXciKSAmJiBidWYgIT0gTlVMTCkgewotICAgIEdzdFR5cGVGaW5kUHJvYmFiaWxpdHkgcHJvYjsKLSAgICBHc3RDYXBzICp0Zl9jYXBzOwotCi0gICAgdGZfY2FwcyA9IGdzdF90eXBlX2ZpbmRfaGVscGVyX2Zvcl9idWZmZXIgKEdTVF9PQkpFQ1QgKHdhdiksIGJ1ZiwgJnByb2IpOwotICAgIGlmICh0Zl9jYXBzICE9IE5VTEwpIHsKLSAgICAgIEdTVF9MT0cgKCJ0eXBlZmluZCBjYXBzID0gJSIgR1NUX1BUUl9GT1JNQVQgIiwgUD0lZCIsIHRmX2NhcHMsIHByb2IpOwotICAgICAgaWYgKGdzdF93YXZwYXJzZV9oYXZlX2R0c19jYXBzICh0Zl9jYXBzLCBwcm9iKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHdhdiwgIkZvdW5kIERUUyBtYXJrZXIgaW4gZmlsZSBtYXJrZWQgYXMgcmF3IFBDTSIpOwotICAgICAgICBnc3RfY2Fwc191bnJlZiAod2F2LT5jYXBzKTsKLSAgICAgICAgd2F2LT5jYXBzID0gdGZfY2FwczsKLQotICAgICAgICBnc3RfdGFnX2xpc3RfYWRkICh3YXYtPnRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgICAgICAgIEdTVF9UQUdfQVVESU9fQ09ERUMsICJkdHMiLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImZvdW5kIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQgIiBmb3Igc3RyZWFtICIKLSAgICAgICAgICAgICJtYXJrZWQgYXMgcmF3IFBDTSBhdWRpbywgYnV0IGlnbm9yaW5nIGZvciBub3ciLCB0Zl9jYXBzKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRmX2NhcHMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGdzdF9wYWRfc2V0X2NhcHMgKHdhdi0+c3JjcGFkLCB3YXYtPmNhcHMpOwotCi0gIGlmICh3YXYtPnN0YXJ0X3NlZ21lbnQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJTZW5kIHN0YXJ0IHNlZ21lbnQgZXZlbnQgb24gbmV3cGFkIik7Ci0gICAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh3YXYtPnNyY3BhZCwgd2F2LT5zdGFydF9zZWdtZW50KTsKLSAgICB3YXYtPnN0YXJ0X3NlZ21lbnQgPSBOVUxMOwotICB9Ci0KLSAgLyogdXBzdHJlYW0gdGFncywgZS5nLiBmcm9tIGlkMy9hcGUgdGFnIGJlZm9yZSB0aGUgd2F2IGZpbGU7IGFzc3VtZSBmb3Igbm93Ci0gICAqIHRoYXQgdGhlcmUnbGwgYmUgb25seSBvbmUgc2NvcGUvdHlwZSBvZiB0YWcgbGlzdCBmcm9tIHVwc3RyZWFtLCBpZiBhbnkgKi8KLSAgdXRhZ3MgPSBnc3Rfd2F2cGFyc2VfZ2V0X3Vwc3RyZWFtX3RhZ3MgKHdhdiwgR1NUX1RBR19TQ09QRV9HTE9CQUwpOwotICBpZiAodXRhZ3MgPT0gTlVMTCkKLSAgICB1dGFncyA9IGdzdF93YXZwYXJzZV9nZXRfdXBzdHJlYW1fdGFncyAod2F2LCBHU1RfVEFHX1NDT1BFX1NUUkVBTSk7Ci0KLSAgLyogaWYgdGhlcmUncyBhIHRhZyB1cHN0cmVhbSBpdCdzIHByb2JhYmx5IGJlZW4gYWRkZWQgdG8gb3ZlcnJpZGUgdGhlCi0gICAqIHRhZ3MgZnJvbSBpbnNpZGUgdGhlIHdhdiBoZWFkZXIsIHNvIGtlZXAgdXBzdHJlYW0gdGFncyBpZiBpbiBkb3VidCAqLwotICB0YWdzID0gZ3N0X3RhZ19saXN0X21lcmdlICh1dGFncywgd2F2LT50YWdzLCBHU1RfVEFHX01FUkdFX0tFRVApOwotCi0gIGlmICh3YXYtPnRhZ3MgIT0gTlVMTCkgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAod2F2LT50YWdzKTsKLSAgICB3YXYtPnRhZ3MgPSBOVUxMOwotICB9Ci0KLSAgaWYgKHV0YWdzICE9IE5VTEwpCi0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh1dGFncyk7Ci0KLSAgLyogc2VuZCB0YWdzIGRvd25zdHJlYW0sIGlmIGFueSAqLwotICBpZiAodGFncyAhPSBOVUxMKQotICAgIGdzdF9wYWRfcHVzaF9ldmVudCAod2F2LT5zcmNwYWQsIGdzdF9ldmVudF9uZXdfdGFnICh0YWdzKSk7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEgKEdzdFdhdlBhcnNlICogd2F2KQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IE5VTEw7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzID0gR1NUX0ZMT1dfT0s7Ci0gIGd1aW50NjQgZGVzaXJlZCwgb2J0YWluZWQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIG5leHRfdGltZXN0YW1wLCBkdXJhdGlvbjsKLSAgZ3VpbnQ2NCBwb3MsIG5leHRwb3M7Ci0KLWl0ZXJhdGVfYWRhcHRlcjoKLSAgR1NUX0xPR19PQkpFQ1QgKHdhdiwKLSAgICAgICJvZmZzZXQ6ICUiIEdfR0lOVDY0X0ZPUk1BVCAiICwgZW5kOiAlIiBHX0dJTlQ2NF9GT1JNQVQgIiAsIGRhdGFsZWZ0OiAlIgotICAgICAgR19HSU5UNjRfRk9STUFULCB3YXYtPm9mZnNldCwgd2F2LT5lbmRfb2Zmc2V0LCB3YXYtPmRhdGFsZWZ0KTsKLQotICAvKiBHZXQgdGhlIG5leHQgbiBieXRlcyBhbmQgb3V0cHV0IHRoZW0gKi8KLSAgaWYgKHdhdi0+ZGF0YWxlZnQgPT0gMCB8fCB3YXYtPmRhdGFsZWZ0IDwgd2F2LT5ibG9ja2FsaWduKQotICAgIGdvdG8gZm91bmRfZW9zOwotCi0gIC8qIHNjYWxlIHRoZSBhbW91bnQgb2YgZGF0YSBieSB0aGUgc2VnbWVudCByYXRlIHNvIHdlIGdldCBlcXVhbAotICAgKiBhbW91bnRzIG9mIGRhdGEgcmVnYXJkbGVzcyBvZiB0aGUgcGxheWJhY2sgcmF0ZSAqLwotICBkZXNpcmVkID0KLSAgICAgIE1JTiAoZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAod2F2LT5kYXRhbGVmdCksCi0gICAgICB3YXYtPm1heF9idWZfc2l6ZSAqIEFCUyAod2F2LT5zZWdtZW50LnJhdGUpKTsKLQotICBpZiAoZGVzaXJlZCA+PSB3YXYtPmJsb2NrYWxpZ24gJiYgd2F2LT5ibG9ja2FsaWduID4gMCkKLSAgICBkZXNpcmVkIC09IChkZXNpcmVkICUgd2F2LT5ibG9ja2FsaWduKTsKLQotICBHU1RfTE9HX09CSkVDVCAod2F2LCAiRmV0Y2hpbmcgJSIgR19HSU5UNjRfRk9STUFUICIgYnl0ZXMgb2YgZGF0YSAiCi0gICAgICAiZnJvbSB0aGUgc2lua3BhZCIsIGRlc2lyZWQpOwotCi0gIGlmICh3YXYtPnN0cmVhbWluZykgewotICAgIGd1aW50IGF2YWlsID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh3YXYtPmFkYXB0ZXIpOwotICAgIGd1aW50IGV4dHJhOwotCi0gICAgLyogZmx1c2ggc29tZSBieXRlcyBpZiBldmlsIHVwc3RyZWFtIHNlbmRzIHNlZ21lbnQgdGhhdCBzdGFydHMKLSAgICAgKiBiZWZvcmUgZGF0YSBvciBkb2VzIGlzIG5vdCBzZW5kIHNhbXBsZSBhbGlnbmVkIHNlZ21lbnQgKi8KLSAgICBpZiAoR19MSUtFTFkgKHdhdi0+b2Zmc2V0ID49IHdhdi0+ZGF0YXN0YXJ0KSkgewotICAgICAgZXh0cmEgPSAod2F2LT5vZmZzZXQgLSB3YXYtPmRhdGFzdGFydCkgJSB3YXYtPmJ5dGVzX3Blcl9zYW1wbGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGV4dHJhID0gd2F2LT5kYXRhc3RhcnQgLSB3YXYtPm9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAoZXh0cmEpKSB7Ci0gICAgICBleHRyYSA9IHdhdi0+Ynl0ZXNfcGVyX3NhbXBsZSAtIGV4dHJhOwotICAgICAgaWYgKGV4dHJhIDw9IGF2YWlsKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImZsdXNoaW5nICV1IGJ5dGVzIHRvIHNhbXBsZSBib3VuZGFyeSIsIGV4dHJhKTsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfZmx1c2ggKHdhdi0+YWRhcHRlciwgZXh0cmEpOwotICAgICAgICB3YXYtPm9mZnNldCArPSBleHRyYTsKLSAgICAgICAgd2F2LT5kYXRhbGVmdCAtPSBleHRyYTsKLSAgICAgICAgZ290byBpdGVyYXRlX2FkYXB0ZXI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJmbHVzaGluZyAldSBieXRlcyIsIGF2YWlsKTsKLSAgICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHdhdi0+YWRhcHRlcik7Ci0gICAgICAgIHdhdi0+b2Zmc2V0ICs9IGF2YWlsOwotICAgICAgICB3YXYtPmRhdGFsZWZ0IC09IGF2YWlsOwotICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGF2YWlsIDwgZGVzaXJlZCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHdhdiwgIkdvdCBvbmx5ICV1IGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgc2lua3BhZCIsIGF2YWlsKTsKLSAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKLSAgICB9Ci0KLSAgICBidWYgPSBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAod2F2LT5hZGFwdGVyLCBkZXNpcmVkKTsKLSAgfSBlbHNlIHsKLSAgICBpZiAoKHJlcyA9IGdzdF9wYWRfcHVsbF9yYW5nZSAod2F2LT5zaW5rcGFkLCB3YXYtPm9mZnNldCwKLSAgICAgICAgICAgICAgICBkZXNpcmVkLCAmYnVmKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIHB1bGxfZXJyb3I7Ci0KLSAgICAvKiB3ZSBtYXkgZ2V0IGEgc2hvcnQgYnVmZmVyIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KLSAgICBpZiAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSA8IGRlc2lyZWQpIHsKLSAgICAgIGdzaXplIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gICAgICBHU1RfTE9HX09CSkVDVCAod2F2LCAiR290IG9ubHkgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyBvZiBkYXRhIiwgc2l6ZSk7Ci0gICAgICBpZiAoc2l6ZSA+PSB3YXYtPmJsb2NrYWxpZ24pIHsKLSAgICAgICAgaWYgKHdhdi0+YmxvY2thbGlnbiA+IDApIHsKLSAgICAgICAgICBidWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGJ1Zik7Ci0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgc2l6ZSAtIChzaXplICUgd2F2LT5ibG9ja2FsaWduKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgICAgIGdvdG8gZm91bmRfZW9zOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIG9idGFpbmVkID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLQotICAvKiBvdXIgcG9zaXRpb25zIGluIGJ5dGVzICovCi0gIHBvcyA9IHdhdi0+b2Zmc2V0IC0gd2F2LT5kYXRhc3RhcnQ7Ci0gIG5leHRwb3MgPSBwb3MgKyBvYnRhaW5lZDsKLQotICAvKiB1cGRhdGUgb2Zmc2V0cywgZG9lcyBub3Qgb3ZlcmZsb3cuICovCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAoYnVmKTsKLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSBwb3MgLyB3YXYtPmJ5dGVzX3Blcl9zYW1wbGU7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSA9IG5leHRwb3MgLyB3YXYtPmJ5dGVzX3Blcl9zYW1wbGU7Ci0KLSAgLyogZmlyc3QgY2h1bmsgb2YgZGF0YT8gY3JlYXRlIHRoZSBzb3VyY2UgcGFkLiBXZSBkbyB0aGlzIG9ubHkgaGVyZSBzbwotICAgKiB3ZSBjYW4gZGV0ZWN0IGJyb2tlbiAud2F2IGZpbGVzIHdpdGggZHRzIGRpc2d1aXNlZCBhcyByYXcgUENNIChzaWdoKSAqLwotICBpZiAoR19VTkxJS0VMWSAod2F2LT5maXJzdCkpIHsKLSAgICB3YXYtPmZpcnN0ID0gRkFMU0U7Ci0gICAgLyogdGhpcyB3aWxsIGFsc28gcHVzaCB0aGUgc2VnbWVudCBldmVudHMgKi8KLSAgICBnc3Rfd2F2cGFyc2VfYWRkX3NyY19wYWQgKHdhdiwgYnVmKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBJZiB3ZSBoYXZlIGEgcGVuZGluZyBzdGFydCBzZWdtZW50LCBzZW5kIGl0IG5vdy4gKi8KLSAgICBpZiAoR19VTkxJS0VMWSAod2F2LT5zdGFydF9zZWdtZW50ICE9IE5VTEwpKSB7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHdhdi0+c3JjcGFkLCB3YXYtPnN0YXJ0X3NlZ21lbnQpOwotICAgICAgd2F2LT5zdGFydF9zZWdtZW50ID0gTlVMTDsKLSAgICB9Ci0gIH0KLQotICBpZiAod2F2LT5icHMgPiAwKSB7Ci0gICAgLyogYW5kIHRpbWVzdGFtcHMgaWYgd2UgaGF2ZSBhIGJpdHJhdGUsIGJlIGNhcmVmdWwgZm9yIG92ZXJmbG93cyAqLwotICAgIHRpbWVzdGFtcCA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsIChwb3MsIEdTVF9TRUNPTkQsIChndWludDY0KSB3YXYtPmJwcyk7Ci0gICAgbmV4dF90aW1lc3RhbXAgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAobmV4dHBvcywgR1NUX1NFQ09ORCwgKGd1aW50NjQpIHdhdi0+YnBzKTsKLSAgICBkdXJhdGlvbiA9IG5leHRfdGltZXN0YW1wIC0gdGltZXN0YW1wOwotCi0gICAgLyogdXBkYXRlIGN1cnJlbnQgcnVubmluZyBzZWdtZW50IHBvc2l0aW9uICovCi0gICAgaWYgKEdfTElLRUxZIChuZXh0X3RpbWVzdGFtcCA+PSB3YXYtPnNlZ21lbnQuc3RhcnQpKQotICAgICAgd2F2LT5zZWdtZW50LnBvc2l0aW9uID0gbmV4dF90aW1lc3RhbXA7Ci0gIH0gZWxzZSBpZiAod2F2LT5mYWN0KSB7Ci0gICAgZ3VpbnQ2NCBicHMgPQotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh3YXYtPmRhdGFzaXplLCB3YXYtPnJhdGUsIHdhdi0+ZmFjdCk7Ci0gICAgLyogYW5kIHRpbWVzdGFtcHMgaWYgd2UgaGF2ZSBhIGJpdHJhdGUsIGJlIGNhcmVmdWwgZm9yIG92ZXJmbG93cyAqLwotICAgIHRpbWVzdGFtcCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsIChwb3MsIEdTVF9TRUNPTkQsIGJwcyk7Ci0gICAgbmV4dF90aW1lc3RhbXAgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfY2VpbCAobmV4dHBvcywgR1NUX1NFQ09ORCwgYnBzKTsKLSAgICBkdXJhdGlvbiA9IG5leHRfdGltZXN0YW1wIC0gdGltZXN0YW1wOwotICB9IGVsc2UgewotICAgIC8qIG5vIGJpdHJhdGUsIGFsbCB3ZSBrbm93IGlzIHRoYXQgdGhlIGZpcnN0IHNhbXBsZSBoYXMgdGltZXN0YW1wIDAsIGFsbAotICAgICAqIG90aGVyIHBvc2l0aW9ucyBhbmQgZHVyYXRpb25zIGhhdmUgdW5rbm93biB0aW1lc3RhbXAuICovCi0gICAgaWYgKHBvcyA9PSAwKQotICAgICAgdGltZXN0YW1wID0gMDsKLSAgICBlbHNlCi0gICAgICB0aW1lc3RhbXAgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICAgIGR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICAvKiB1cGRhdGUgY3VycmVudCBydW5uaW5nIHNlZ21lbnQgcG9zaXRpb24gd2l0aCBieXRlIG9mZnNldCAqLwotICAgIGlmIChHX0xJS0VMWSAobmV4dHBvcyA+PSB3YXYtPnNlZ21lbnQuc3RhcnQpKQotICAgICAgd2F2LT5zZWdtZW50LnBvc2l0aW9uID0gbmV4dHBvczsKLSAgfQotICBpZiAoKHBvcyA+IDApICYmIHdhdi0+dmJyKSB7Ci0gICAgLyogZG9uJ3Qgc2V0IHRpbWVzdGFtcHMgZm9yIFZCUiBmaWxlcyBpZiBpdCdzIG5vdCB0aGUgZmlyc3QgYnVmZmVyICovCi0gICAgdGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBkdXJhdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLSAgaWYgKHdhdi0+ZGlzY29udCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIm1hcmtpbmcgRElTQ09OVCIpOwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgIHdhdi0+ZGlzY29udCA9IEZBTFNFOwotICB9Ci0KLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSB0aW1lc3RhbXA7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBkdXJhdGlvbjsKLQotICBHU1RfTE9HX09CSkVDVCAod2F2LAotICAgICAgIkdvdCBidWZmZXIuIHRpbWVzdGFtcDolIiBHU1RfVElNRV9GT1JNQVQgIiAsIGR1cmF0aW9uOiUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgIiwgc2l6ZTolIiBHX0dTSVpFX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSwKLSAgICAgIEdTVF9USU1FX0FSR1MgKGR1cmF0aW9uKSwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSk7Ci0KLSAgaWYgKChyZXMgPSBnc3RfcGFkX3B1c2ggKHdhdi0+c3JjcGFkLCBidWYpKSAhPSBHU1RfRkxPV19PSykKLSAgICBnb3RvIHB1c2hfZXJyb3I7Ci0KLSAgaWYgKG9idGFpbmVkIDwgd2F2LT5kYXRhbGVmdCkgewotICAgIHdhdi0+b2Zmc2V0ICs9IG9idGFpbmVkOwotICAgIHdhdi0+ZGF0YWxlZnQgLT0gb2J0YWluZWQ7Ci0gIH0gZWxzZSB7Ci0gICAgd2F2LT5vZmZzZXQgKz0gd2F2LT5kYXRhbGVmdDsKLSAgICB3YXYtPmRhdGFsZWZ0ID0gMDsKLSAgfQotCi0gIC8qIEl0ZXJhdGUgdW50aWwgbmVlZCBtb3JlIGRhdGEsIHNvIGFkYXB0ZXIgc2l6ZSB3b24ndCBncm93ICovCi0gIGlmICh3YXYtPnN0cmVhbWluZykgewotICAgIEdTVF9MT0dfT0JKRUNUICh3YXYsCi0gICAgICAgICJvZmZzZXQ6ICUiIEdfR0lOVDY0X0ZPUk1BVCAiICwgZW5kOiAlIiBHX0dJTlQ2NF9GT1JNQVQsIHdhdi0+b2Zmc2V0LAotICAgICAgICB3YXYtPmVuZF9vZmZzZXQpOwotICAgIGdvdG8gaXRlcmF0ZV9hZGFwdGVyOwotICB9Ci0gIHJldHVybiByZXM7Ci0KLSAgLyogRVJST1IgKi8KLWZvdW5kX2VvczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgImZvdW5kIEVPUyIpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLXB1bGxfZXJyb3I6Ci0gIHsKLSAgICAvKiBjaGVjayBpZiB3ZSBnb3QgRU9TICovCi0gICAgaWYgKHJlcyA9PSBHU1RfRkxPV19FT1MpCi0gICAgICBnb3RvIGZvdW5kX2VvczsKLQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAod2F2LAotICAgICAgICAiRXJyb3IgZ2V0dGluZyAlIiBHX0dJTlQ2NF9GT1JNQVQgIiBieXRlcyBmcm9tIHRoZSAiCi0gICAgICAgICJzaW5rcGFkIChkYXRhbGVmdCA9ICUiIEdfR0lOVDY0X0ZPUk1BVCAiKSIsIGRlc2lyZWQsIHdhdi0+ZGF0YWxlZnQpOwotICAgIHJldHVybiByZXM7Ci0gIH0KLXB1c2hfZXJyb3I6Ci0gIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHdhdiwKLSAgICAgICAgIkVycm9yIHB1c2hpbmcgb24gc3JjcGFkICVzOiVzLCByZWFzb24gJXMsIGlzIGxpbmtlZD8gPSAlZCIsCi0gICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAod2F2LT5zcmNwYWQpLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSwKLSAgICAgICAgZ3N0X3BhZF9pc19saW5rZWQgKHdhdi0+c3JjcGFkKSk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdnBhcnNlX2xvb3AgKEdzdFBhZCAqIHBhZCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0gIEdzdFdhdlBhcnNlICp3YXYgPSBHU1RfV0FWUEFSU0UgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBnY2hhciAqc3RyZWFtX2lkOwotCi0gIEdTVF9MT0dfT0JKRUNUICh3YXYsICJwcm9jZXNzIGRhdGEiKTsKLQotICBzd2l0Y2ggKHdhdi0+c3RhdGUpIHsKLSAgICBjYXNlIEdTVF9XQVZQQVJTRV9TVEFSVDoKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiR1NUX1dBVlBBUlNFX1NUQVJUIik7Ci0gICAgICBpZiAoKHJldCA9IGdzdF93YXZwYXJzZV9zdHJlYW1faW5pdCAod2F2KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gcGF1c2U7Ci0KLSAgICAgIHN0cmVhbV9pZCA9Ci0gICAgICAgICAgZ3N0X3BhZF9jcmVhdGVfc3RyZWFtX2lkICh3YXYtPnNyY3BhZCwgR1NUX0VMRU1FTlRfQ0FTVCAod2F2KSwgTlVMTCk7Ci0gICAgICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0IChzdHJlYW1faWQpOwotICAgICAgZ3N0X2V2ZW50X3NldF9ncm91cF9pZCAoZXZlbnQsIGdzdF91dGlsX2dyb3VwX2lkX25leHQgKCkpOwotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh3YXYtPnNyY3BhZCwgZXZlbnQpOwotICAgICAgZ19mcmVlIChzdHJlYW1faWQpOwotCi0gICAgICB3YXYtPnN0YXRlID0gR1NUX1dBVlBBUlNFX0hFQURFUjsKLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotCi0gICAgY2FzZSBHU1RfV0FWUEFSU0VfSEVBREVSOgotICAgICAgR1NUX0lORk9fT0JKRUNUICh3YXYsICJHU1RfV0FWUEFSU0VfSEVBREVSIik7Ci0gICAgICBpZiAoKHJldCA9IGdzdF93YXZwYXJzZV9zdHJlYW1faGVhZGVycyAod2F2KSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgIGdvdG8gcGF1c2U7Ci0KLSAgICAgIHdhdi0+c3RhdGUgPSBHU1RfV0FWUEFSU0VfREFUQTsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiR1NUX1dBVlBBUlNFX0RBVEEiKTsKLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotCi0gICAgY2FzZSBHU1RfV0FWUEFSU0VfREFUQToKLSAgICAgIGlmICgocmV0ID0gZ3N0X3dhdnBhcnNlX3N0cmVhbV9kYXRhICh3YXYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBwYXVzZTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotICByZXR1cm47Ci0KLSAgLyogRVJST1JTICovCi1wYXVzZToKLSAgewotICAgIGNvbnN0IGdjaGFyICpyZWFzb24gPSBnc3RfZmxvd19nZXRfbmFtZSAocmV0KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgInBhdXNpbmcgdGFzaywgcmVhc29uICVzIiwgcmVhc29uKTsKLSAgICBnc3RfcGFkX3BhdXNlX3Rhc2sgKHBhZCk7Ci0KLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0VPUykgewotICAgICAgLyogaGFuZGxlIGVuZC1vZi1zdHJlYW0vc2VnbWVudCAqLwotICAgICAgLyogc28gYWxpZ24gb3VyIHBvc2l0aW9uIHdpdGggdGhlIGVuZCBvZiBpdCwgaWYgdGhlcmUgaXMgb25lCi0gICAgICAgKiB0aGlzIGVuc3VyZXMgYSBzdWJzZXF1ZW50IHdpbGwgYXJyaXZlIGF0IGNvcnJlY3QgYmFzZS9hY2MgdGltZSAqLwotICAgICAgaWYgKHdhdi0+c2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9USU1FKSB7Ci0gICAgICAgIGlmICh3YXYtPnNlZ21lbnQucmF0ZSA+IDAuMCAmJgotICAgICAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKHdhdi0+c2VnbWVudC5zdG9wKSkKLSAgICAgICAgICB3YXYtPnNlZ21lbnQucG9zaXRpb24gPSB3YXYtPnNlZ21lbnQuc3RvcDsKLSAgICAgICAgZWxzZSBpZiAod2F2LT5zZWdtZW50LnJhdGUgPCAwLjApCi0gICAgICAgICAgd2F2LT5zZWdtZW50LnBvc2l0aW9uID0gd2F2LT5zZWdtZW50LnN0YXJ0OwotICAgICAgfQotICAgICAgaWYgKHdhdi0+c3RhdGUgPT0gR1NUX1dBVlBBUlNFX1NUQVJUIHx8ICF3YXYtPmNhcHMpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHdhdiwgU1RSRUFNLCBXUk9OR19UWVBFLCAoTlVMTCksCi0gICAgICAgICAgICAoIk5vIHZhbGlkIGlucHV0IGZvdW5kIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIikpOwotICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHdhdi0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBhZGQgcGFkIGJlZm9yZSB3ZSBwZXJmb3JtIEVPUyAqLwotICAgICAgICBpZiAoR19VTkxJS0VMWSAod2F2LT5maXJzdCkpIHsKLSAgICAgICAgICB3YXYtPmZpcnN0ID0gRkFMU0U7Ci0gICAgICAgICAgZ3N0X3dhdnBhcnNlX2FkZF9zcmNfcGFkICh3YXYsIE5VTEwpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcGVyZm9ybSBFT1MgbG9naWMgKi8KLSAgICAgICAgaWYgKHdhdi0+c2VnbWVudC5mbGFncyAmIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCkgewotICAgICAgICAgIEdzdENsb2NrVGltZSBzdG9wOwotCi0gICAgICAgICAgaWYgKChzdG9wID0gd2F2LT5zZWdtZW50LnN0b3ApID09IC0xKQotICAgICAgICAgICAgc3RvcCA9IHdhdi0+c2VnbWVudC5kdXJhdGlvbjsKLQotICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZSAoR1NUX0VMRU1FTlRfQ0FTVCAod2F2KSwKLSAgICAgICAgICAgICAgZ3N0X21lc3NhZ2VfbmV3X3NlZ21lbnRfZG9uZSAoR1NUX09CSkVDVF9DQVNUICh3YXYpLAotICAgICAgICAgICAgICAgICAgd2F2LT5zZWdtZW50LmZvcm1hdCwgc3RvcCkpOwotICAgICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAod2F2LT5zcmNwYWQsCi0gICAgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VnbWVudF9kb25lICh3YXYtPnNlZ21lbnQuZm9ybWF0LCBzdG9wKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50ICh3YXYtPnNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gR1NUX0ZMT1dfTk9UX0xJTktFRCB8fCByZXQgPCBHU1RfRkxPV19FT1MpIHsKLSAgICAgIC8qIGZvciBmYXRhbCBlcnJvcnMgd2UgcG9zdCBhbiBlcnJvciBtZXNzYWdlLCBwb3N0IHRoZSBlcnJvcgotICAgICAgICogZmlyc3Qgc28gdGhlIGFwcCBrbm93cyBhYm91dCB0aGUgZXJyb3IgZmlyc3QuICovCi0gICAgICBHU1RfRUxFTUVOVF9GTE9XX0VSUk9SICh3YXYsIHJldCk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHdhdi0+c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3dhdnBhcnNlX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0V2F2UGFyc2UgKndhdiA9IEdTVF9XQVZQQVJTRSAocGFyZW50KTsKLQotICBHU1RfTE9HX09CSkVDVCAod2F2LCAiYWRhcHRlcl9wdXNoICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSk7Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAod2F2LT5hZGFwdGVyLCBidWYpOwotCi0gIHN3aXRjaCAod2F2LT5zdGF0ZSkgewotICAgIGNhc2UgR1NUX1dBVlBBUlNFX1NUQVJUOgotICAgICAgR1NUX0lORk9fT0JKRUNUICh3YXYsICJHU1RfV0FWUEFSU0VfU1RBUlQiKTsKLSAgICAgIGlmICgocmV0ID0gZ3N0X3dhdnBhcnNlX3BhcnNlX3N0cmVhbV9pbml0ICh3YXYpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgZ290byBkb25lOwotCi0gICAgICBpZiAod2F2LT5zdGF0ZSAhPSBHU1RfV0FWUEFSU0VfSEVBREVSKQotICAgICAgICBicmVhazsKLQotICAgICAgLyogb3RoZXJ3aXNlIGZhbGwtdGhyb3VnaCAqLwotICAgIGNhc2UgR1NUX1dBVlBBUlNFX0hFQURFUjoKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAod2F2LCAiR1NUX1dBVlBBUlNFX0hFQURFUiIpOwotICAgICAgaWYgKChyZXQgPSBnc3Rfd2F2cGFyc2Vfc3RyZWFtX2hlYWRlcnMgKHdhdikpICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIGRvbmU7Ci0KLSAgICAgIGlmICghd2F2LT5nb3RfZm10IHx8IHdhdi0+ZGF0YXN0YXJ0ID09IDApCi0gICAgICAgIGJyZWFrOwotCi0gICAgICB3YXYtPnN0YXRlID0gR1NUX1dBVlBBUlNFX0RBVEE7Ci0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHdhdiwgIkdTVF9XQVZQQVJTRV9EQVRBIik7Ci0KLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgIGNhc2UgR1NUX1dBVlBBUlNFX0RBVEE6Ci0gICAgICBpZiAoYnVmICYmIEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKQotICAgICAgICB3YXYtPmRpc2NvbnQgPSBUUlVFOwotICAgICAgaWYgKChyZXQgPSBnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEgKHdhdikpICE9IEdTVF9GTE9XX09LKQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEdTVF9GTE9XX0VSUk9SKTsKLSAgfQotZG9uZToKLSAgaWYgKEdfVU5MSUtFTFkgKHdhdi0+YWJvcnRfYnVmZmVyaW5nKSkgewotICAgIHdhdi0+YWJvcnRfYnVmZmVyaW5nID0gRkFMU0U7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgLyogc29ydCBvZiBkZW11eC9wYXJzZSBlcnJvciAqLwotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh3YXYsIFNUUkVBTSwgREVNVVgsIChOVUxMKSwgKCJ1bmhhbmRsZWQgYnVmZmVyIHNpemUiKSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3dhdnBhcnNlX2ZsdXNoX2RhdGEgKEdzdFdhdlBhcnNlICogd2F2KQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBndWludCBhdjsKLQotICBpZiAoKGF2ID0gZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlICh3YXYtPmFkYXB0ZXIpKSA+IDApIHsKLSAgICByZXQgPSBnc3Rfd2F2cGFyc2Vfc3RyZWFtX2RhdGEgKHdhdik7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0V2F2UGFyc2UgKndhdiA9IEdTVF9XQVZQQVJTRSAocGFyZW50KTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBHU1RfTE9HX09CSkVDVCAod2F2LCAiaGFuZGxpbmcgJXMgZXZlbnQiLCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6Ci0gICAgewotICAgICAgLyogZGlzY2FyZCwgd2UnbGwgY29tZSB1cCB3aXRoIHByb3BlciBzcmMgY2FwcyAqLwotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDoKLSAgICB7Ci0gICAgICBnaW50NjQgc3RhcnQsIHN0b3AsIG9mZnNldCA9IDAsIGVuZF9vZmZzZXQgPSAtMTsKLSAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICAgICAgLyogc29tZSBkZWJ1ZyBvdXRwdXQgKi8KLSAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXYsICJyZWNlaXZlZCBuZXdzZWdtZW50ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKLSAgICAgICAgICAmc2VnbWVudCk7Ci0KLSAgICAgIGlmICh3YXYtPnN0YXRlICE9IEdTVF9XQVZQQVJTRV9EQVRBKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgInN0aWxsIHN0YXJ0aW5nLCBlYXRpbmcgZXZlbnQiKTsKLSAgICAgICAgZ290byBleGl0OwotICAgICAgfQotCi0gICAgICAvKiBub3cgd2UgYXJlIGVpdGhlciBjb21taXR0ZWQgdG8gVElNRSBvciBCWVRFIGZvcm1hdCwKLSAgICAgICAqIGFuZCB3ZSBvbmx5IGV4cGVjdCBhIEJZVEUgc2VnbWVudCwgZS5nLiBmb2xsb3dpbmcgYSBzZWVrICovCi0gICAgICBpZiAoc2VnbWVudC5mb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUykgewotICAgICAgICAvKiBoYW5kbGUgKHVuKXNpZ25lZCBpc3N1ZXMgKi8KLSAgICAgICAgc3RhcnQgPSBzZWdtZW50LnN0YXJ0OwotICAgICAgICBzdG9wID0gc2VnbWVudC5zdG9wOwotICAgICAgICBpZiAoc3RhcnQgPiAwKSB7Ci0gICAgICAgICAgb2Zmc2V0ID0gc3RhcnQ7Ci0gICAgICAgICAgc3RhcnQgLT0gd2F2LT5kYXRhc3RhcnQ7Ci0gICAgICAgICAgc3RhcnQgPSBNQVggKHN0YXJ0LCAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RvcCA+IDApIHsKLSAgICAgICAgICBlbmRfb2Zmc2V0ID0gc3RvcDsKLSAgICAgICAgICBzdG9wIC09IHdhdi0+ZGF0YXN0YXJ0OwotICAgICAgICAgIHN0b3AgPSBNQVggKHN0b3AsIDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh3YXYtPnNlZ21lbnQuZm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkgewotICAgICAgICAgIGd1aW50NjQgYnBzID0gd2F2LT5icHM7Ci0KLSAgICAgICAgICAvKiBvcGVyYXRpbmcgaW4gZm9ybWF0IFRJTUUsIHNvIHdlIGNhbiBjb252ZXJ0ICovCi0gICAgICAgICAgaWYgKCFicHMgJiYgd2F2LT5mYWN0KQotICAgICAgICAgICAgYnBzID0KLSAgICAgICAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50ICh3YXYtPmRhdGFzaXplLCB3YXYtPnJhdGUsIHdhdi0+ZmFjdCk7Ci0gICAgICAgICAgaWYgKGJwcykgewotICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgIHN0YXJ0ID0KLSAgICAgICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsIChzdGFydCwgR1NUX1NFQ09ORCwKLSAgICAgICAgICAgICAgICAgIChndWludDY0KSB3YXYtPmJwcyk7Ci0gICAgICAgICAgICBpZiAoc3RvcCA+PSAwKQotICAgICAgICAgICAgICBzdG9wID0KLSAgICAgICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9jZWlsIChzdG9wLCBHU1RfU0VDT05ELAotICAgICAgICAgICAgICAgICAgKGd1aW50NjQpIHdhdi0+YnBzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgInVuc3VwcG9ydGVkIHNlZ21lbnQgZm9ybWF0LCBpZ25vcmluZyIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICB9Ci0KLSAgICAgIHNlZ21lbnQuc3RhcnQgPSBzdGFydDsKLSAgICAgIHNlZ21lbnQuc3RvcCA9IHN0b3A7Ci0KLSAgICAgIC8qIGFjY2VwdCB1cHN0cmVhbSdzIG5vdGlvbiBvZiBzZWdtZW50IGFuZCBkaXN0cmlidXRlIGFsb25nICovCi0gICAgICBzZWdtZW50LmZvcm1hdCA9IHdhdi0+c2VnbWVudC5mb3JtYXQ7Ci0gICAgICBzZWdtZW50LnRpbWUgPSBzZWdtZW50LnBvc2l0aW9uID0gc2VnbWVudC5zdGFydDsKLSAgICAgIHNlZ21lbnQuZHVyYXRpb24gPSB3YXYtPnNlZ21lbnQuZHVyYXRpb247Ci0gICAgICBzZWdtZW50LmJhc2UgPSBnc3Rfc2VnbWVudF90b19ydW5uaW5nX3RpbWUgKCZ3YXYtPnNlZ21lbnQsCi0gICAgICAgICAgR1NUX0ZPUk1BVF9USU1FLCB3YXYtPnNlZ21lbnQucG9zaXRpb24pOwotCi0gICAgICBnc3Rfc2VnbWVudF9jb3B5X2ludG8gKCZzZWdtZW50LCAmd2F2LT5zZWdtZW50KTsKLQotICAgICAgLyogYWxzbyBzdG9yZSB0aGUgbmV3c2VnbWVudCBldmVudCBmb3IgdGhlIHN0cmVhbWluZyB0aHJlYWQgKi8KLSAgICAgIGlmICh3YXYtPnN0YXJ0X3NlZ21lbnQpCi0gICAgICAgIGdzdF9ldmVudF91bnJlZiAod2F2LT5zdGFydF9zZWdtZW50KTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHdhdiwgIlN0b3JpbmcgbmV3c2VnICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwgJnNlZ21lbnQpOwotICAgICAgd2F2LT5zdGFydF9zZWdtZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0KLSAgICAgIC8qIHN0cmVhbSBsZWZ0b3ZlciBkYXRhIGluIGN1cnJlbnQgc2VnbWVudCAqLwotICAgICAgZ3N0X3dhdnBhcnNlX2ZsdXNoX2RhdGEgKHdhdik7Ci0gICAgICAvKiBhbmQgc2V0IHVwIHN0cmVhbWluZyB0aHJlYWQgZm9yIG5leHQgb25lICovCi0gICAgICB3YXYtPm9mZnNldCA9IG9mZnNldDsKLSAgICAgIHdhdi0+ZW5kX29mZnNldCA9IGVuZF9vZmZzZXQ7Ci0KLSAgICAgIGlmICh3YXYtPmRhdGFzaXplID4gMCAmJiAod2F2LT5lbmRfb2Zmc2V0ID09IC0xCi0gICAgICAgICAgICAgIHx8IHdhdi0+ZW5kX29mZnNldCA+IHdhdi0+ZGF0YXN0YXJ0ICsgd2F2LT5kYXRhc2l6ZSkpCi0gICAgICAgIHdhdi0+ZW5kX29mZnNldCA9IHdhdi0+ZGF0YXN0YXJ0ICsgd2F2LT5kYXRhc2l6ZTsKLQotICAgICAgaWYgKHdhdi0+ZW5kX29mZnNldCAhPSAtMSkgewotICAgICAgICB3YXYtPmRhdGFsZWZ0ID0gd2F2LT5lbmRfb2Zmc2V0IC0gd2F2LT5vZmZzZXQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvKiBpbmZpbml0eTsgdXBzdHJlYW0gd2lsbCBFT1Mgd2hlbiBkb25lICovCi0gICAgICAgIHdhdi0+ZGF0YWxlZnQgPSBHX01BWFVJTlQ2NDsKLSAgICAgIH0KLSAgICBleGl0OgotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfRU9TOgotICAgICAgaWYgKHdhdi0+c3RhdGUgPT0gR1NUX1dBVlBBUlNFX1NUQVJUIHx8ICF3YXYtPmNhcHMpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHdhdiwgU1RSRUFNLCBXUk9OR19UWVBFLCAoTlVMTCksCi0gICAgICAgICAgICAoIk5vIHZhbGlkIGlucHV0IGZvdW5kIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIikpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogYWRkIHBhZCBpZiBuZWVkZWQgc28gRU9TIGlzIHNlZW4gZG93bnN0cmVhbSAqLwotICAgICAgICBpZiAoR19VTkxJS0VMWSAod2F2LT5maXJzdCkpIHsKLSAgICAgICAgICB3YXYtPmZpcnN0ID0gRkFMU0U7Ci0gICAgICAgICAgZ3N0X3dhdnBhcnNlX2FkZF9zcmNfcGFkICh3YXYsIE5VTEwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIHN0cmVhbSBsZWZ0b3ZlciBkYXRhIGluIGN1cnJlbnQgc2VnbWVudCAqLwotICAgICAgICAgIGdzdF93YXZwYXJzZV9mbHVzaF9kYXRhICh3YXYpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLwotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgewotICAgICAgR3N0Q2xvY2tUaW1lIGR1cjsKLQotICAgICAgaWYgKHdhdi0+YWRhcHRlcikKLSAgICAgICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHdhdi0+YWRhcHRlcik7Ci0gICAgICB3YXYtPmRpc2NvbnQgPSBUUlVFOwotICAgICAgZHVyID0gd2F2LT5zZWdtZW50LmR1cmF0aW9uOwotICAgICAgZ3N0X3NlZ21lbnRfaW5pdCAoJndhdi0+c2VnbWVudCwgd2F2LT5zZWdtZW50LmZvcm1hdCk7Ci0gICAgICB3YXYtPnNlZ21lbnQuZHVyYXRpb24gPSBkdXI7Ci0gICAgICAvKiBmYWxsLXRocm91Z2ggKi8KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IGdzdF9wYWRfZXZlbnRfZGVmYXVsdCAod2F2LT5zaW5rcGFkLCBwYXJlbnQsIGV2ZW50KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotI2lmIDAKLS8qIGNvbnZlcnQgYW5kIHF1ZXJ5IHN0dWZmICovCi1zdGF0aWMgY29uc3QgR3N0Rm9ybWF0ICoKLWdzdF93YXZwYXJzZV9nZXRfZm9ybWF0cyAoR3N0UGFkICogcGFkKQotewotICBzdGF0aWMgY29uc3QgR3N0Rm9ybWF0IGZvcm1hdHNbXSA9IHsKLSAgICBHU1RfRk9STUFUX1RJTUUsCi0gICAgR1NUX0ZPUk1BVF9CWVRFUywKLSAgICBHU1RfRk9STUFUX0RFRkFVTFQsICAgICAgICAgLyogYSAiZnJhbWUiLCBpZSBhIHNldCBvZiBzYW1wbGVzIHBlciBIeiAqLwotICAgIDAKLSAgfTsKLQotICByZXR1cm4gZm9ybWF0czsKLX0KLSNlbmRpZgotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZwYXJzZV9wYWRfY29udmVydCAoR3N0UGFkICogcGFkLAotICAgIEdzdEZvcm1hdCBzcmNfZm9ybWF0LCBnaW50NjQgc3JjX3ZhbHVlLAotICAgIEdzdEZvcm1hdCAqIGRlc3RfZm9ybWF0LCBnaW50NjQgKiBkZXN0X3ZhbHVlKQotewotICBHc3RXYXZQYXJzZSAqd2F2cGFyc2U7Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0KLSAgd2F2cGFyc2UgPSBHU1RfV0FWUEFSU0UgKEdTVF9QQURfUEFSRU5UIChwYWQpKTsKLQotICBpZiAoKmRlc3RfZm9ybWF0ID09IHNyY19mb3JtYXQpIHsKLSAgICAqZGVzdF92YWx1ZSA9IHNyY192YWx1ZTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIGlmICgod2F2cGFyc2UtPmJwcyA9PSAwKSAmJiAhd2F2cGFyc2UtPmZhY3QpCi0gICAgZ290byBub19icHNfZmFjdDsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHdhdnBhcnNlLCAiY29udmVydGluZyB2YWx1ZSBmcm9tICVzIHRvICVzIiwKLSAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNyY19mb3JtYXQpLCBnc3RfZm9ybWF0X2dldF9uYW1lICgqZGVzdF9mb3JtYXQpKTsKLQotICBzd2l0Y2ggKHNyY19mb3JtYXQpIHsKLSAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICBzd2l0Y2ggKCpkZXN0X2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgICAgICAqZGVzdF92YWx1ZSA9IHNyY192YWx1ZSAvIHdhdnBhcnNlLT5ieXRlc19wZXJfc2FtcGxlOwotICAgICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBlbmQgdXAgb24gYSBzYW1wbGUgYm91bmRhcnkgKi8KLSAgICAgICAgICAqZGVzdF92YWx1ZSAtPSAqZGVzdF92YWx1ZSAlIHdhdnBhcnNlLT5ieXRlc19wZXJfc2FtcGxlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICAvKiBzcmNfdmFsdWUgKyBkYXRhc3RhcnQgPSBvZmZzZXQgKi8KLSAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QgKHdhdnBhcnNlLAotICAgICAgICAgICAgICAic3JjPSUiIEdfR0lOVDY0X0ZPUk1BVCAiLCBvZmZzZXQ9JSIgR19HSU5UNjRfRk9STUFULCBzcmNfdmFsdWUsCi0gICAgICAgICAgICAgIHdhdnBhcnNlLT5vZmZzZXQpOwotICAgICAgICAgIGlmICh3YXZwYXJzZS0+YnBzID4gMCkKLSAgICAgICAgICAgICpkZXN0X3ZhbHVlID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2NlaWwgKHNyY192YWx1ZSwgR1NUX1NFQ09ORCwKLSAgICAgICAgICAgICAgICAoZ3VpbnQ2NCkgd2F2cGFyc2UtPmJwcyk7Ci0gICAgICAgICAgZWxzZSBpZiAod2F2cGFyc2UtPmZhY3QpIHsKLSAgICAgICAgICAgIGd1aW50NjQgYnBzID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9jZWlsICh3YXZwYXJzZS0+ZGF0YXNpemUsCi0gICAgICAgICAgICAgICAgd2F2cGFyc2UtPnJhdGUsIHdhdnBhcnNlLT5mYWN0KTsKLQotICAgICAgICAgICAgKmRlc3RfdmFsdWUgPQotICAgICAgICAgICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfY2VpbCAoc3JjX3ZhbHVlLCBHU1RfU0VDT05ELCBicHMpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmVzID0gRkFMU0U7Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9GT1JNQVRfREVGQVVMVDoKLSAgICAgIHN3aXRjaCAoKmRlc3RfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzoKLSAgICAgICAgICAqZGVzdF92YWx1ZSA9IHNyY192YWx1ZSAqIHdhdnBhcnNlLT5ieXRlc19wZXJfc2FtcGxlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfVElNRToKLSAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLCBHU1RfU0VDT05ELAotICAgICAgICAgICAgICAoZ3VpbnQ2NCkgd2F2cGFyc2UtPnJhdGUpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICBzd2l0Y2ggKCpkZXN0X2Zvcm1hdCkgewotICAgICAgICBjYXNlIEdTVF9GT1JNQVRfQllURVM6Ci0gICAgICAgICAgaWYgKHdhdnBhcnNlLT5icHMgPiAwKQotICAgICAgICAgICAgKmRlc3RfdmFsdWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwKLSAgICAgICAgICAgICAgICAoZ3VpbnQ2NCkgd2F2cGFyc2UtPmJwcywgR1NUX1NFQ09ORCk7Ci0gICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBndWludDY0IGJwcyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHdhdnBhcnNlLT5kYXRhc2l6ZSwKLSAgICAgICAgICAgICAgICB3YXZwYXJzZS0+cmF0ZSwgd2F2cGFyc2UtPmZhY3QpOwotCi0gICAgICAgICAgICAqZGVzdF92YWx1ZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoc3JjX3ZhbHVlLCBicHMsIEdTVF9TRUNPTkQpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvKiBtYWtlIHN1cmUgd2UgZW5kIHVwIG9uIGEgc2FtcGxlIGJvdW5kYXJ5ICovCi0gICAgICAgICAgKmRlc3RfdmFsdWUgLT0gKmRlc3RfdmFsdWUgJSB3YXZwYXJzZS0+YmxvY2thbGlnbjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0RFRkFVTFQ6Ci0gICAgICAgICAgKmRlc3RfdmFsdWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHNyY192YWx1ZSwKLSAgICAgICAgICAgICAgKGd1aW50NjQpIHdhdnBhcnNlLT5yYXRlLCBHU1RfU0VDT05EKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmVzOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fYnBzX2ZhY3Q6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZwYXJzZSwgImJwcyAwIG9yIG5vIGZhY3QgY2h1bmssIGNhbm5vdCBjb252ZXJ0Iik7Ci0gICAgcmVzID0gRkFMU0U7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLS8qIGhhbmRsZSBxdWVyaWVzIGZvciBsb2NhdGlvbiBhbmQgbGVuZ3RoIGluIHJlcXVlc3RlZCBmb3JtYXQgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdnBhcnNlX3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJlcyA9IFRSVUU7Ci0gIEdzdFdhdlBhcnNlICp3YXYgPSBHU1RfV0FWUEFSU0UgKHBhcmVudCk7Ci0KLSAgLyogb25seSBpZiB3ZSBrbm93ICovCi0gIGlmICh3YXYtPnN0YXRlICE9IEdTVF9XQVZQQVJTRV9EQVRBKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIiVzIHF1ZXJ5IiwgR1NUX1FVRVJZX1RZUEVfTkFNRSAocXVlcnkpKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9QT1NJVElPTjoKLSAgICB7Ci0gICAgICBnaW50NjQgY3VyYjsKLSAgICAgIGdpbnQ2NCBjdXI7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICAvKiB0aGlzIGlzIG5vdCB2ZXJ5IHByZWNpc2UsIGFzIHdlIGhhdmUgcHVzaGVkIHNldmVybGEgYnVmZmVyIHVwc3RyZWFtIGZvciBwcmVyb2xsaW5nICovCi0gICAgICBjdXJiID0gd2F2LT5vZmZzZXQgLSB3YXYtPmRhdGFzdGFydDsKLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbiAocXVlcnksICZmb3JtYXQsIE5VTEwpOwotICAgICAgR1NUX0lORk9fT0JKRUNUICh3YXYsICJwb3MgcXVlcnkgYXQgJSIgR19HSU5UNjRfRk9STUFULCBjdXJiKTsKLQotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX0JZVEVTOgotICAgICAgICAgIGZvcm1hdCA9IEdTVF9GT1JNQVRfQllURVM7Ci0gICAgICAgICAgY3VyID0gY3VyYjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQgKHBhZCwgR1NUX0ZPUk1BVF9CWVRFUywgY3VyYiwKLSAgICAgICAgICAgICAgJmZvcm1hdCwgJmN1cik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAocmVzKQotICAgICAgICBnc3RfcXVlcnlfc2V0X3Bvc2l0aW9uIChxdWVyeSwgZm9ybWF0LCBjdXIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1FVRVJZX0RVUkFUSU9OOgotICAgIHsKLSAgICAgIGdpbnQ2NCBkdXJhdGlvbiA9IDA7Ci0gICAgICBHc3RGb3JtYXQgZm9ybWF0OwotCi0gICAgICBpZiAod2F2LT5pZ25vcmVfbGVuZ3RoKSB7Ci0gICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uIChxdWVyeSwgJmZvcm1hdCwgTlVMTCk7Ci0KLSAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR1NUX0ZPUk1BVF9CWVRFUzp7Ci0gICAgICAgICAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9CWVRFUzsKLSAgICAgICAgICBkdXJhdGlvbiA9IHdhdi0+ZGF0YXNpemU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfRk9STUFUX1RJTUU6Ci0gICAgICAgICAgaWYgKChyZXMgPSBnc3Rfd2F2cGFyc2VfY2FsY3VsYXRlX2R1cmF0aW9uICh3YXYpKSkgewotICAgICAgICAgICAgZHVyYXRpb24gPSB3YXYtPmR1cmF0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChyZXMpCi0gICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24gKHF1ZXJ5LCBmb3JtYXQsIGR1cmF0aW9uKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9RVUVSWV9DT05WRVJUOgotICAgIHsKLSAgICAgIGdpbnQ2NCBzcmN2YWx1ZSwgZHN0dmFsdWU7Ci0gICAgICBHc3RGb3JtYXQgc3JjZm9ybWF0LCBkc3Rmb3JtYXQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jb252ZXJ0IChxdWVyeSwgJnNyY2Zvcm1hdCwgJnNyY3ZhbHVlLAotICAgICAgICAgICZkc3Rmb3JtYXQsICZkc3R2YWx1ZSk7Ci0gICAgICByZXMgPSBnc3Rfd2F2cGFyc2VfcGFkX2NvbnZlcnQgKHBhZCwgc3JjZm9ybWF0LCBzcmN2YWx1ZSwKLSAgICAgICAgICAmZHN0Zm9ybWF0LCAmZHN0dmFsdWUpOwotICAgICAgaWYgKHJlcykKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jb252ZXJ0IChxdWVyeSwgc3JjZm9ybWF0LCBzcmN2YWx1ZSwgZHN0Zm9ybWF0LCBkc3R2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfU0VFS0lORzp7Ci0gICAgICBHc3RGb3JtYXQgZm10OwotICAgICAgZ2Jvb2xlYW4gc2Vla2FibGUgPSBGQUxTRTsKLQotICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHF1ZXJ5LCAmZm10LCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgIGlmIChmbXQgPT0gd2F2LT5zZWdtZW50LmZvcm1hdCkgewotICAgICAgICBpZiAod2F2LT5zdHJlYW1pbmcpIHsKLSAgICAgICAgICBHc3RRdWVyeSAqcTsKLQotICAgICAgICAgIHEgPSBnc3RfcXVlcnlfbmV3X3NlZWtpbmcgKEdTVF9GT1JNQVRfQllURVMpOwotICAgICAgICAgIGlmICgocmVzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5ICh3YXYtPnNpbmtwYWQsIHEpKSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3NlZWtpbmcgKHEsICZmbXQsICZzZWVrYWJsZSwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAod2F2LCAidXBzdHJlYW0gQllURSBzZWVrYWJsZSAlZCIsIHNlZWthYmxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZ3N0X3F1ZXJ5X3VucmVmIChxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfTE9HX09CSkVDVCAod2F2LCAibG9vcGluZyA9PiBzZWVrYWJsZSIpOwotICAgICAgICAgIHNlZWthYmxlID0gVFJVRTsKLSAgICAgICAgICByZXMgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKGZtdCA9PSBHU1RfRk9STUFUX1RJTUUpIHsKLSAgICAgICAgcmVzID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGlmIChyZXMpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgZm10LCBzZWVrYWJsZSwgMCwgd2F2LT5zZWdtZW50LmR1cmF0aW9uKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFyc2Vfc3JjcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0V2F2UGFyc2UgKndhdnBhcnNlID0gR1NUX1dBVlBBUlNFIChwYXJlbnQpOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh3YXZwYXJzZSwgIiVzIGV2ZW50IiwgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TRUVLOgotICAgICAgLyogY2FuIG9ubHkgaGFuZGxlIGV2ZW50cyB3aGVuIHdlIGFyZSBpbiB0aGUgZGF0YSBzdGF0ZSAqLwotICAgICAgaWYgKHdhdnBhcnNlLT5zdGF0ZSA9PSBHU1RfV0FWUEFSU0VfREFUQSkgewotICAgICAgICByZXMgPSBnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrICh3YXZwYXJzZSwgZXZlbnQpOwotICAgICAgfQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX0VWRU5UX1RPQ19TRUxFQ1Q6Ci0gICAgewotICAgICAgY2hhciAqdWlkID0gTlVMTDsKLSAgICAgIEdzdFRvY0VudHJ5ICplbnRyeSA9IE5VTEw7Ci0gICAgICBHc3RFdmVudCAqc2Vla19ldmVudDsKLSAgICAgIGdpbnQ2NCBzdGFydF9wb3M7Ci0KLSAgICAgIGlmICghd2F2cGFyc2UtPnRvYykgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh3YXZwYXJzZSwgIm5vIFRPQyB0byBzZWxlY3QiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3RvY19zZWxlY3QgKGV2ZW50LCAmdWlkKTsKLSAgICAgICAgaWYgKHVpZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgR1NUX09CSkVDVF9MT0NLICh3YXZwYXJzZSk7Ci0gICAgICAgICAgZW50cnkgPSBnc3RfdG9jX2ZpbmRfZW50cnkgKHdhdnBhcnNlLT50b2MsIHVpZCk7Ci0gICAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLICh3YXZwYXJzZSk7Ci0gICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHdhdnBhcnNlLCAibm8gVE9DIGVudHJ5IHdpdGggZ2l2ZW4gVUlEOiAlcyIsCi0gICAgICAgICAgICAgICAgdWlkKTsKLSAgICAgICAgICAgIHJlcyA9IEZBTFNFOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzIChlbnRyeSwgJnN0YXJ0X3BvcywgTlVMTCk7Ci0gICAgICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAod2F2cGFyc2UpOwotICAgICAgICAgICAgc2Vla19ldmVudCA9IGdzdF9ldmVudF9uZXdfc2VlayAoMS4wLAotICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgICAgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBzdGFydF9wb3MsIEdTVF9TRUVLX1RZUEVfU0VULCAtMSk7Ci0gICAgICAgICAgICByZXMgPSBnc3Rfd2F2cGFyc2VfcGVyZm9ybV9zZWVrICh3YXZwYXJzZSwgc2Vla19ldmVudCk7Ci0gICAgICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKHNlZWtfZXZlbnQpOwotICAgICAgICAgIH0KLSAgICAgICAgICBnX2ZyZWUgKHVpZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh3YXZwYXJzZSwgInJlY2VpdmVkIGVtcHR5IFRPQyBzZWxlY3QgZXZlbnQiKTsKLSAgICAgICAgICByZXMgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50ICh3YXZwYXJzZS0+c2lua3BhZCwgZXZlbnQpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZSAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50KQotewotICBHc3RXYXZQYXJzZSAqd2F2ID0gR1NUX1dBVlBBUlNFIChwYXJlbnQpOwotICBHc3RRdWVyeSAqcXVlcnk7Ci0gIGdib29sZWFuIHB1bGxfbW9kZTsKLQotICBpZiAod2F2LT5hZGFwdGVyKSB7Ci0gICAgZ3N0X2FkYXB0ZXJfY2xlYXIgKHdhdi0+YWRhcHRlcik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHdhdi0+YWRhcHRlcik7Ci0gICAgd2F2LT5hZGFwdGVyID0gTlVMTDsKLSAgfQotCi0gIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19zY2hlZHVsaW5nICgpOwotCi0gIGlmICghZ3N0X3BhZF9wZWVyX3F1ZXJ5IChzaW5rcGFkLCBxdWVyeSkpIHsKLSAgICBnc3RfcXVlcnlfdW5yZWYgKHF1ZXJ5KTsKLSAgICBnb3RvIGFjdGl2YXRlX3B1c2g7Ci0gIH0KLQotICBwdWxsX21vZGUgPSBnc3RfcXVlcnlfaGFzX3NjaGVkdWxpbmdfbW9kZV93aXRoX2ZsYWdzIChxdWVyeSwKLSAgICAgIEdTVF9QQURfTU9ERV9QVUxMLCBHU1RfU0NIRURVTElOR19GTEFHX1NFRUtBQkxFKTsKLSAgZ3N0X3F1ZXJ5X3VucmVmIChxdWVyeSk7Ci0KLSAgaWYgKCFwdWxsX21vZGUpCi0gICAgZ290byBhY3RpdmF0ZV9wdXNoOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmtwYWQsICJhY3RpdmF0aW5nIHB1bGwiKTsKLSAgd2F2LT5zdHJlYW1pbmcgPSBGQUxTRTsKLSAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc2lua3BhZCwgR1NUX1BBRF9NT0RFX1BVTEwsIFRSVUUpOwotCi1hY3RpdmF0ZV9wdXNoOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2lua3BhZCwgImFjdGl2YXRpbmcgcHVzaCIpOwotICAgIHdhdi0+c3RyZWFtaW5nID0gVFJVRTsKLSAgICB3YXYtPmFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gICAgcmV0dXJuIGdzdF9wYWRfYWN0aXZhdGVfbW9kZSAoc2lua3BhZCwgR1NUX1BBRF9NT0RFX1BVU0gsIFRSVUUpOwotICB9Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2cGFyc2Vfc2lua19hY3RpdmF0ZV9tb2RlIChHc3RQYWQgKiBzaW5rcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCi0gICAgR3N0UGFkTW9kZSBtb2RlLCBnYm9vbGVhbiBhY3RpdmUpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9QQURfTU9ERV9QVVNIOgotICAgICAgcmVzID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1BBRF9NT0RFX1BVTEw6Ci0gICAgICBpZiAoYWN0aXZlKSB7Ci0gICAgICAgIC8qIGlmIHdlIGhhdmUgYSBzY2hlZHVsZXIgd2UgY2FuIHN0YXJ0IHRoZSB0YXNrICovCi0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RhcnRfdGFzayAoc2lua3BhZCwgKEdzdFRhc2tGdW5jdGlvbikgZ3N0X3dhdnBhcnNlX2xvb3AsCi0gICAgICAgICAgICBzaW5rcGFkLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IGdzdF9wYWRfc3RvcF90YXNrIChzaW5rcGFkKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3dhdnBhcnNlX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLSAgR3N0V2F2UGFyc2UgKndhdiA9IEdTVF9XQVZQQVJTRSAoZWxlbWVudCk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgZ3N0X3dhdnBhcnNlX3Jlc2V0ICh3YXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BMQVlJTkdfVE9fUEFVU0VEOgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKLSAgICAgIGdzdF93YXZwYXJzZV9yZXNldCAod2F2KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2cGFyc2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFdhdlBhcnNlICpzZWxmOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19XQVZQQVJTRSAob2JqZWN0KSk7Ci0gIHNlbGYgPSBHU1RfV0FWUEFSU0UgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0lHTk9SRV9MRU5HVEg6Ci0gICAgICBzZWxmLT5pZ25vcmVfbGVuZ3RoID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAoc2VsZiwgcHJvcF9pZCwgcHNwZWMpOwotICB9Ci0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF93YXZwYXJzZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0V2F2UGFyc2UgKnNlbGY7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1dBVlBBUlNFIChvYmplY3QpKTsKLSAgc2VsZiA9IEdTVF9XQVZQQVJTRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfSUdOT1JFX0xFTkdUSDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzZWxmLT5pZ25vcmVfbGVuZ3RoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKHNlbGYsIHByb3BfaWQsIHBzcGVjKTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdzdF9yaWZmX2luaXQgKCk7Ci0KLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ3YXZwYXJzZSIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICBHU1RfVFlQRV9XQVZQQVJTRSk7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICB3YXZwYXJzZSwKLSAgICAiUGFyc2UgYSAud2F2IGZpbGUgaW50byByYXcgYXVkaW8iLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvZ3N0L3dhdnBhcnNlL2dzdHdhdnBhcnNlLmggYi9nc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVkNDc4ZS4uMDAwMDAwMAotLS0gYS9nc3Qvd2F2cGFyc2UvZ3N0d2F2cGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBOb2tpYSBDb3Jwb3JhdGlvbiwgU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX1dBVlBBUlNFX0hfXwotI2RlZmluZSBfX0dTVF9XQVZQQVJTRV9IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgImdzdC9yaWZmL3JpZmYtaWRzLmgiCi0jaW5jbHVkZSAiZ3N0L3JpZmYvcmlmZi1yZWFkLmgiCi0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfV0FWUEFSU0UgXAotICAoZ3N0X3dhdnBhcnNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9XQVZQQVJTRShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1dBVlBBUlNFLEdzdFdhdlBhcnNlKSkKLSNkZWZpbmUgR1NUX1dBVlBBUlNFX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1dBVlBBUlNFLEdzdFdhdlBhcnNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfV0FWUEFSU0Uob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9XQVZQQVJTRSkpCi0jZGVmaW5lIEdTVF9JU19XQVZQQVJTRV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9XQVZQQVJTRSkpCi0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9XQVZQQVJTRV9TVEFSVCwKLSAgR1NUX1dBVlBBUlNFX0hFQURFUiwKLSAgR1NUX1dBVlBBUlNFX0RBVEEKLX0gR3N0V2F2UGFyc2VTdGF0ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdhdlBhcnNlIEdzdFdhdlBhcnNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdhdlBhcnNlQ2xhc3MgR3N0V2F2UGFyc2VDbGFzczsKLQotLyoqCi0gKiBHc3RXYXZQYXJzZToKLSAqCi0gKiBPcGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBfR3N0V2F2UGFyc2UgewotICBHc3RFbGVtZW50IHBhcmVudDsKLQotICAvKiBwYWRzICovCi0gIEdzdFBhZCAqc2lua3BhZCwqc3JjcGFkOwotCi0gIC8qIGZvciBkZWxheWVkIHNvdXJjZSBwYWQgY3JlYXRpb24gZm9yIHdoZW4KLSAgICogd2UgaGF2ZSB0aGUgZmlyc3QgY2h1bmsgb2YgZGF0YSBhbmQga25vdwotICAgKiB0aGUgZm9ybWF0IGZvciBzdXJlICovCi0gIEdzdENhcHMgICAgICpjYXBzOwotICBHc3RUYWdMaXN0ICAqdGFnczsKLSAgR3N0VG9jICAgICAgKnRvYzsKLSAgR0xpc3QgICAgICAgKmN1ZXM7Ci0gIEdMaXN0ICAgICAgICpsYWJsczsKLSAgR0xpc3QgICAgICAgKm5vdGVzOwotICBHc3RFdmVudCAgICAqc3RhcnRfc2VnbWVudDsKLQotICAvKiBXQVZFIGRlY29kaW5nIHN0YXRlICovCi0gIEdzdFdhdlBhcnNlU3RhdGUgc3RhdGU7Ci0gIGdib29sZWFuIGFib3J0X2J1ZmZlcmluZzsKLQotICAvKiBmb3JtYXQgb2YgYXVkaW8sIHNlZSBkZWZpbmVzIGJlbG93ICovCi0gIGdpbnQgZm9ybWF0OwotCi0gIC8qIHVzZWZ1bCBhdWRpbyBkYXRhICovCi0gIGd1aW50MTYgZGVwdGg7Ci0gIGd1aW50MzIgcmF0ZTsKLSAgZ3VpbnQxNiBjaGFubmVsczsKLSAgZ3VpbnQxNiBibG9ja2FsaWduOwotICBndWludDE2IHdpZHRoOwotICBndWludDMyIGF2X2JwczsKLSAgZ3VpbnQ2NCBmYWN0OwotCi0gIC8qIHJlYWwgYnBzIHVzZWQgb3IgMCB3aGVuIG5vIGJpdHJhdGUgaXMga25vd24gKi8KLSAgZ3VpbnQzMiBicHM7Ci0gIGdib29sZWFuIHZicjsKLQotICBndWludCBieXRlc19wZXJfc2FtcGxlOwotICBndWludCBtYXhfYnVmX3NpemU7Ci0KLSAgLyogcG9zaXRpb24gaW4gZGF0YSBwYXJ0ICovCi0gIGd1aW50NjQJb2Zmc2V0OwotICBndWludDY0CWVuZF9vZmZzZXQ7Ci0gIGd1aW50NjQgCWRhdGFsZWZ0OwotICAvKiBvZmZzZXQvbGVuZ3RoIG9mIGRhdGEgcGFydCAqLwotICBndWludDY0IAlkYXRhc3RhcnQ7Ci0gIGd1aW50NjQgCWRhdGFzaXplOwotICAvKiBkdXJhdGlvbiBpbiB0aW1lICovCi0gIGd1aW50NjQgCWR1cmF0aW9uOwotCi0gIC8qIHBlbmRpbmcgc2VlayAqLwotICBHc3RFdmVudCAqc2Vla19ldmVudDsKLQotICAvKiBGb3Igc3RyZWFtaW5nICovCi0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIGdib29sZWFuIGdvdF9mbXQ7Ci0gIGdib29sZWFuIHN0cmVhbWluZzsKLQotICAvKiBjb25maWd1cmVkIHNlZ21lbnQsIHN0YXJ0L3N0b3AgZXhwcmVzc2VkIGluIHRpbWUgb3IgYnl0ZXMgKi8KLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIC8qIGZvciBsYXRlIHBhZCBjb25maWd1cmF0aW9uICovCi0gIGdib29sZWFuIGZpcnN0OwotICAvKiBkaXNjb250IGFmdGVyIHNlZWsgKi8KLSAgZ2Jvb2xlYW4gZGlzY29udDsKLQotICBnYm9vbGVhbiBpZ25vcmVfbGVuZ3RoOwotfTsKLQotc3RydWN0IF9Hc3RXYXZQYXJzZUNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF93YXZwYXJzZV9nZXRfdHlwZSh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1dBVlBBUlNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZ3N0L3k0bS9NYWtlZmlsZS5hbSBiL2dzdC95NG0vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NGRhZGYuLjAwMDAwMDAKLS0tIGEvZ3N0L3k0bS9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLQotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0eTRtZW5jLmxhCi0KLWxpYmdzdHk0bWVuY19sYV9TT1VSQ0VTID0gZ3N0eTRtZW5jb2RlLmMKLWxpYmdzdHk0bWVuY19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3R5NG1lbmNfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0xJQlMpCi1saWJnc3R5NG1lbmNfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0eTRtZW5jX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gZ3N0eTRtZW5jb2RlLmgKZGlmZiAtLWdpdCBhL2dzdC95NG0vTWFrZWZpbGUuaW4gYi9nc3QveTRtL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzYwMGViLi4wMDAwMDAwCi0tLSBhL2dzdC95NG0vTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MDkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gZ3N0L3k0bQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHk0bWVuY19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0eTRtZW5jX2xhX09CSkVDVFMgPSBsaWJnc3R5NG1lbmNfbGEtZ3N0eTRtZW5jb2RlLmxvCi1saWJnc3R5NG1lbmNfbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0eTRtZW5jX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3R5NG1lbmNfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3R5NG1lbmNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3R5NG1lbmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGliZ3N0eTRtZW5jX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdHk0bWVuY19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3R5NG1lbmNfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0eTRtZW5jLmxhCi1saWJnc3R5NG1lbmNfbGFfU09VUkNFUyA9IGdzdHk0bWVuY29kZS5jCi1saWJnc3R5NG1lbmNfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0eTRtZW5jX2xhX0xJQkFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9MSUJTKQotbGliZ3N0eTRtZW5jX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHk0bWVuY19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotbm9pbnN0X0hFQURFUlMgPSBnc3R5NG1lbmNvZGUuaAotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgZ3N0L3k0bS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBnc3QveTRtL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0eTRtZW5jLmxhOiAkKGxpYmdzdHk0bWVuY19sYV9PQkpFQ1RTKSAkKGxpYmdzdHk0bWVuY19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0eTRtZW5jX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3R5NG1lbmNfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdHk0bWVuY19sYV9PQkpFQ1RTKSAkKGxpYmdzdHk0bWVuY19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHk0bWVuY19sYS1nc3R5NG1lbmNvZGUuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdHk0bWVuY19sYS1nc3R5NG1lbmNvZGUubG86IGdzdHk0bWVuY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0eTRtZW5jX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHk0bWVuY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0eTRtZW5jX2xhLWdzdHk0bWVuY29kZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0eTRtZW5jX2xhLWdzdHk0bWVuY29kZS5UcG8gLWMgLW8gbGliZ3N0eTRtZW5jX2xhLWdzdHk0bWVuY29kZS5sbyBgdGVzdCAtZiAnZ3N0eTRtZW5jb2RlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHk0bWVuY29kZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R5NG1lbmNfbGEtZ3N0eTRtZW5jb2RlLlRwbyAkKERFUERJUikvbGliZ3N0eTRtZW5jX2xhLWdzdHk0bWVuY29kZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R5NG1lbmNvZGUuYycgb2JqZWN0PSdsaWJnc3R5NG1lbmNfbGEtZ3N0eTRtZW5jb2RlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0eTRtZW5jX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHk0bWVuY19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R5NG1lbmNfbGEtZ3N0eTRtZW5jb2RlLmxvIGB0ZXN0IC1mICdnc3R5NG1lbmNvZGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0eTRtZW5jb2RlLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYyBiL2dzdC95NG0vZ3N0eTRtZW5jb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMTEzYmMuLjAwMDAwMDAKLS0tIGEvZ3N0L3k0bS9nc3R5NG1lbmNvZGUuYworKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgPDE5OTk+IEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBNYXJrIE5hdXdlbGFlcnRzIDxtbmF1d0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LXk0bWVuYwotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDxwYXJhPgotICogQ3JlYXRlcyBhIFlVNE1QRUcyIHJhdyB2aWRlbyBzdHJlYW0gYXMgZGVmaW5lZCBieSB0aGUgbWpwZWd0b29scyBwcm9qZWN0LgotICogPC9wYXJhPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogPHBhcmE+Ci0gKiAod3JpdGUgZXZlcnl0aGluZyBpbiBvbmUgbGluZSwgd2l0aG91dCB0aGUgYmFja3NsYXNoIGNoYXJhY3RlcnMpCi0gKiA8cHJvZ3JhbWxpc3Rpbmc+Ci0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MjUwIFwKLSAqICEgJ3ZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9MzIwLGhlaWdodD0yNDAsZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xJyBcCi0gKiAhIHk0bWVuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPXRlc3QueXV2Ci0gKiA8L3Byb2dyYW1saXN0aW5nPgotICogPC9wYXJhPgotICogPC9yZWZzZWN0Mj4KLSAqCi0gKi8KLQotLyogc2VlIG1qcGVndG9vbHMveXV2NG1wZWcuaCBmb3IgeXV2NG1wZWcgZm9ybWF0ICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSAiZ3N0eTRtZW5jb2RlLmgiCi0KLS8qIEZpbHRlciBzaWduYWxzIGFuZCBhcmdzICovCi1lbnVtCi17Ci0gIC8qIEZJTEwgTUUgKi8KLSAgTEFTVF9TSUdOQUwKLX07Ci0KLWVudW0KLXsKLSAgUFJPUF8wCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgeTRtZW5jb2RlX3NyY19mYWN0b3J5ID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXl1djRtcGVnLCAiICJ5NG12ZXJzaW9uID0gKGludCkgMiIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHk0bWVuY29kZV9zaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBJWVVWLCBJNDIwLCBZNDJCLCBZNDFCLCBZNDQ0IH0iKSkKLSAgICApOwotCi0KLXN0YXRpYyB2b2lkIGdzdF95NG1fZW5jb2RlX3Jlc2V0IChHc3RZNG1FbmNvZGUgKiBmaWx0ZXIpOwotCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3k0bV9lbmNvZGVfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF95NG1fZW5jb2RlX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3k0bV9lbmNvZGVfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjU3RhdGUgKiBzdGF0ZSk7Ci0KLSNkZWZpbmUgZ3N0X3k0bV9lbmNvZGVfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0WTRtRW5jb2RlLCBnc3RfeTRtX2VuY29kZSwgR1NUX1RZUEVfVklERU9fRU5DT0RFUik7Ci0KLQotc3RhdGljIHZvaWQKLWdzdF95NG1fZW5jb2RlX2NsYXNzX2luaXQgKEdzdFk0bUVuY29kZUNsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdFZpZGVvRW5jb2RlckNsYXNzICp2ZW5jX2NsYXNzID0gR1NUX1ZJREVPX0VOQ09ERVJfQ0xBU1MgKGtsYXNzKTsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3k0bV9lbmNvZGVfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZ5NG1lbmNvZGVfc3JjX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZ5NG1lbmNvZGVfc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLAotICAgICAgIllVVjRNUEVHIHZpZGVvIGVuY29kZXIiLCAiQ29kZWMvRW5jb2Rlci9WaWRlbyIsCi0gICAgICAiRW5jb2RlcyBhIFlVViBmcmFtZSBpbnRvIHRoZSB5dXY0bXBlZyBmb3JtYXQgKG1qcGVndG9vbHMpIiwKLSAgICAgICJXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPiIpOwotICB2ZW5jX2NsYXNzLT5zZXRfZm9ybWF0ID0gZ3N0X3k0bV9lbmNvZGVfc2V0X2Zvcm1hdDsKLSAgdmVuY19jbGFzcy0+aGFuZGxlX2ZyYW1lID0gZ3N0X3k0bV9lbmNvZGVfaGFuZGxlX2ZyYW1lOwotCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfeTRtX2VuY29kZV9pbml0IChHc3RZNG1FbmNvZGUgKiBmaWx0ZXIpCi17Ci0gIEdTVF9QQURfU0VUX0FDQ0VQVF9URU1QTEFURSAoR1NUX1ZJREVPX0VOQ09ERVJfU0lOS19QQUQgKGZpbHRlcikpOwotCi0gIC8qIGluaXQgcHJvcGVydGllcyAqLwotICBnc3RfeTRtX2VuY29kZV9yZXNldCAoZmlsdGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF95NG1fZW5jb2RlX3Jlc2V0IChHc3RZNG1FbmNvZGUgKiBmaWx0ZXIpCi17Ci0gIGZpbHRlci0+aGVhZGVyID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3k0bV9lbmNvZGVfc2V0X2Zvcm1hdCAoR3N0VmlkZW9FbmNvZGVyICogZW5jb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjU3RhdGUgKiBzdGF0ZSkKLXsKLSAgR3N0WTRtRW5jb2RlICp5NG1lbmM7Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbzsKLSAgR3N0VmlkZW9Db2RlY1N0YXRlICpvdXRwdXRfc3RhdGU7Ci0KLSAgeTRtZW5jID0gR1NUX1k0TV9FTkNPREUgKGVuY29kZXIpOwotICBpbmZvID0gJnN0YXRlLT5pbmZvOwotCi0gIHN3aXRjaCAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbmZvKSkgewotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOgotICAgICAgeTRtZW5jLT5jb2xvcnNwYWNlID0gIjQyMCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQyQjoKLSAgICAgIHk0bWVuYy0+Y29sb3JzcGFjZSA9ICI0MjIiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MUI6Ci0gICAgICB5NG1lbmMtPmNvbG9yc3BhY2UgPSAiNDExIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9ZNDQ0OgotICAgICAgeTRtZW5jLT5jb2xvcnNwYWNlID0gIjQ0NCI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byBpbnZhbGlkX2Zvcm1hdDsKLSAgfQotCi0gIHk0bWVuYy0+aW5mbyA9ICppbmZvOwotCi0gIG91dHB1dF9zdGF0ZSA9Ci0gICAgICBnc3RfdmlkZW9fZW5jb2Rlcl9zZXRfb3V0cHV0X3N0YXRlIChlbmNvZGVyLAotICAgICAgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZ5NG1lbmNvZGVfc3JjX2ZhY3RvcnkpLCBzdGF0ZSk7Ci0gIGdzdF92aWRlb19jb2RlY19zdGF0ZV91bnJlZiAob3V0cHV0X3N0YXRlKTsKLQotICByZXR1cm4gVFJVRTsKLQotaW52YWxpZF9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUICh5NG1lbmMsICJJbnZhbGlkIGZvcm1hdCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF95NG1fZW5jb2RlX2dldF9zdHJlYW1faGVhZGVyIChHc3RZNG1FbmNvZGUgKiBmaWx0ZXIsIGdib29sZWFuIHRmZikKLXsKLSAgZ3BvaW50ZXIgaGVhZGVyOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ2NoYXIgaW50ZXJsYWNlZDsKLSAgZ3NpemUgbGVuOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19JU19JTlRFUkxBQ0VEICgmZmlsdGVyLT5pbmZvKSkgewotICAgIGlmICh0ZmYpCi0gICAgICBpbnRlcmxhY2VkID0gJ3QnOwotICAgIGVsc2UKLSAgICAgIGludGVybGFjZWQgPSAnYic7Ci0gIH0gZWxzZSB7Ci0gICAgaW50ZXJsYWNlZCA9ICdwJzsKLSAgfQotCi0gIGhlYWRlciA9IGdfc3RyZHVwX3ByaW50ZiAoIllVVjRNUEVHMiBDJXMgVyVkIEglZCBJJWMgRiVkOiVkIEElZDolZFxuIiwKLSAgICAgIGZpbHRlci0+Y29sb3JzcGFjZSwgR1NUX1ZJREVPX0lORk9fV0lEVEggKCZmaWx0ZXItPmluZm8pLAotICAgICAgR1NUX1ZJREVPX0lORk9fSEVJR0hUICgmZmlsdGVyLT5pbmZvKSwgaW50ZXJsYWNlZCwKLSAgICAgIEdTVF9WSURFT19JTkZPX0ZQU19OICgmZmlsdGVyLT5pbmZvKSwKLSAgICAgIEdTVF9WSURFT19JTkZPX0ZQU19EICgmZmlsdGVyLT5pbmZvKSwKLSAgICAgIEdTVF9WSURFT19JTkZPX1BBUl9OICgmZmlsdGVyLT5pbmZvKSwKLSAgICAgIEdTVF9WSURFT19JTkZPX1BBUl9EICgmZmlsdGVyLT5pbmZvKSk7Ci0gIGxlbiA9IHN0cmxlbiAoaGVhZGVyKTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWYsCi0gICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBoZWFkZXIsIGxlbiwgMCwgbGVuLCBoZWFkZXIsIGdfZnJlZSkpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgR3N0QnVmZmVyICoKLWdzdF95NG1fZW5jb2RlX2dldF9mcmFtZV9oZWFkZXIgKEdzdFk0bUVuY29kZSAqIGZpbHRlcikKLXsKLSAgZ3BvaW50ZXIgaGVhZGVyOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3NpemUgbGVuOwotCi0gIGhlYWRlciA9IGdfc3RyZHVwX3ByaW50ZiAoIkZSQU1FXG4iKTsKLSAgbGVuID0gc3RybGVuIChoZWFkZXIpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZiwKLSAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGhlYWRlciwgbGVuLCAwLCBsZW4sIGhlYWRlciwgZ19mcmVlKSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3k0bV9lbmNvZGVfaGFuZGxlX2ZyYW1lIChHc3RWaWRlb0VuY29kZXIgKiBlbmNvZGVyLAotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqIGZyYW1lKQotewotICBHc3RZNG1FbmNvZGUgKmZpbHRlciA9IEdTVF9ZNE1fRU5DT0RFIChlbmNvZGVyKTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLQotICAvKiBjaGVjayB3ZSBnb3Qgc29tZSBkZWNlbnQgaW5mbyBmcm9tIGNhcHMgKi8KLSAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJmZpbHRlci0+aW5mbykgPT0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOKQotICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0KLSAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZyYW1lLT5pbnB1dF9idWZmZXIpOwotCi0gIGlmIChHX1VOTElLRUxZICghZmlsdGVyLT5oZWFkZXIpKSB7Ci0gICAgZ2Jvb2xlYW4gdGZmID0gRkFMU0U7Ci0KLSAgICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfSU5URVJMQUNFRCAoJmZpbHRlci0+aW5mbykpIHsKLSAgICAgIHRmZiA9Ci0gICAgICAgICAgR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoZnJhbWUtPmlucHV0X2J1ZmZlciwKLSAgICAgICAgICBHU1RfVklERU9fQlVGRkVSX0ZMQUdfVEZGKTsKLSAgICB9Ci0gICAgZnJhbWUtPm91dHB1dF9idWZmZXIgPSBnc3RfeTRtX2VuY29kZV9nZXRfc3RyZWFtX2hlYWRlciAoZmlsdGVyLCB0ZmYpOwotICAgIGZpbHRlci0+aGVhZGVyID0gVFJVRTsKLSAgICBmcmFtZS0+b3V0cHV0X2J1ZmZlciA9Ci0gICAgICAgIGdzdF9idWZmZXJfYXBwZW5kIChmcmFtZS0+b3V0cHV0X2J1ZmZlciwKLSAgICAgICAgZ3N0X3k0bV9lbmNvZGVfZ2V0X2ZyYW1lX2hlYWRlciAoZmlsdGVyKSk7Ci0gIH0gZWxzZSB7Ci0gICAgZnJhbWUtPm91dHB1dF9idWZmZXIgPSBnc3RfeTRtX2VuY29kZV9nZXRfZnJhbWVfaGVhZGVyIChmaWx0ZXIpOwotICB9Ci0KLSAgZnJhbWUtPm91dHB1dF9idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9hcHBlbmQgKGZyYW1lLT5vdXRwdXRfYnVmZmVyLAotICAgICAgZ3N0X2J1ZmZlcl9jb3B5IChmcmFtZS0+aW5wdXRfYnVmZmVyKSk7Ci0KLSAgLyogZGVjb3JhdGUgKi8KLSAgZnJhbWUtPm91dHB1dF9idWZmZXIgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGZyYW1lLT5vdXRwdXRfYnVmZmVyKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGZyYW1lLT5vdXRwdXRfYnVmZmVyKSA9IHRpbWVzdGFtcDsKLQotICByZXR1cm4gZ3N0X3ZpZGVvX2VuY29kZXJfZmluaXNoX2ZyYW1lIChlbmNvZGVyLCBmcmFtZSk7Ci0KLW5vdF9uZWdvdGlhdGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGZpbHRlciwgQ09SRSwgTkVHT1RJQVRJT04sIChOVUxMKSwKLSAgICAgICAgKCJmb3JtYXQgd2Fzbid0IG5lZ290aWF0ZWQiKSk7Ci0KLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfeTRtX2VuY29kZV9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RZNG1FbmNvZGUgKmZpbHRlciA9IEdTVF9ZNE1fRU5DT0RFIChlbGVtZW50KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUIChHU1RfRUxFTUVOVF9DTEFTUywgY2hhbmdlX3N0YXRlLAotICAgICAgKGVsZW1lbnQsIHRyYW5zaXRpb24pLCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBpZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykKLSAgICByZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6Ci0gICAgICBnc3RfeTRtX2VuY29kZV9yZXNldCAoZmlsdGVyKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ5NG1lbmMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgR1NUX1RZUEVfWTRNX0VOQ09ERSk7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICB5NG1lbmMsCi0gICAgIkVuY29kZXMgYSBZVVYgZnJhbWUgaW50byB0aGUgeXV2NG1wZWcgZm9ybWF0IChtanBlZ3Rvb2xzKSIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9nc3QveTRtL2dzdHk0bWVuY29kZS5oIGIvZ3N0L3k0bS9nc3R5NG1lbmNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhN2ExYi4uMDAwMDAwMAotLS0gYS9nc3QveTRtL2dzdHk0bWVuY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9ZNE1FTkNPREVfSF9fCi0jZGVmaW5lIF9fR1NUX1k0TUVOQ09ERV9IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfWTRNX0VOQ09ERSBcCi0gIChnc3RfeTRtX2VuY29kZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfWTRNX0VOQ09ERShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHU1RfVFlQRV9ZNE1fRU5DT0RFLCBHc3RZNG1FbmNvZGUpKQotI2RlZmluZSBHU1RfWTRNX0VOQ09ERV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgR1NUX1RZUEVfWTRNX0VOQ09ERSwgR3N0WTRtRW5jb2RlQ2xhc3MpKQotI2RlZmluZSBHU1RfWTRNX0VOQ09ERV9HRVRfQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBHU1RfVFlQRV9ZNE1fRU5DT0RFLCBHc3RZNG1FbmNvZGVDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19ZNE1fRU5DT0RFKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdTVF9UWVBFX1k0TV9FTkNPREUpKQotI2RlZmluZSBHU1RfSVNfWTRNX0VOQ09ERV9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfWTRNX0VOQ09ERSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RZNG1FbmNvZGUgR3N0WTRtRW5jb2RlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFk0bUVuY29kZUNsYXNzIEdzdFk0bUVuY29kZUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFk0bUVuY29kZSB7Ci0gIEdzdFZpZGVvRW5jb2RlciBwYXJlbnQ7Ci0KLSAgLyogY2FwcyBpbmZvcm1hdGlvbiAqLwotICBHc3RWaWRlb0luZm8gaW5mbzsKLQotICBjb25zdCBnY2hhciAqY29sb3JzcGFjZTsKLSAgLyogc3RhdGUgaW5mb3JtYXRpb24gKi8KLSAgZ2Jvb2xlYW4gaGVhZGVyOwotfTsKLQotc3RydWN0IF9Hc3RZNG1FbmNvZGVDbGFzcyB7Ci0gIEdzdFZpZGVvRW5jb2RlckNsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF95NG1fZW5jb2RlX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfWTRNRU5DT0RFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5zdGFsbC1zaCBiL2luc3RhbGwtc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU5OTkwYTEuLjAwMDAwMDAKLS0tIGEvaW5zdGFsbC1zaAorKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0jIS9iaW4vc2gKLSMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCi0KLXNjcmlwdHZlcnNpb249MjAxNC0wOS0xMi4xMjsgIyBVVEMKLQotIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCi0jIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQotIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCi0jCi0jIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLSMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCi0jIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCi0jIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgotIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotIwotIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSMKLSMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0jIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCi0jIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0jCi0jIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90Ci0jIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQotIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCi0jIHRpdW0uCi0jCi0jCi0jIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jCi0jIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50Ci0jICdtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0Ci0jIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCi0jCi0jIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KLSMgZnJvbSBzY3JhdGNoLgotCi10YWI9JwknCi1ubD0nCi0nCi1JRlM9IiAkdGFiJG5sIgotCi0jIFNldCBET0lUUFJPRyB0byAiZWNobyIgdG8gdGVzdCB0aGlzIHNjcmlwdC4KLQotZG9pdD0ke0RPSVRQUk9HLX0KLWRvaXRfZXhlYz0ke2RvaXQ6LWV4ZWN9Ci0KLSMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7Ci0jIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgotCi1jaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9Ci1jaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9Ci1jaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259Ci1jbXBwcm9nPSR7Q01QUFJPRy1jbXB9Ci1jcHByb2c9JHtDUFBST0ctY3B9Ci1ta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9Ci1tdnByb2c9JHtNVlBST0ctbXZ9Ci1ybXByb2c9JHtSTVBST0ctcm19Ci1zdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9Ci0KLXBvc2l4X21rZGlyPQotCi0jIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KLW1vZGU9MDc1NQotCi1jaGdycGNtZD0KLWNobW9kY21kPSRjaG1vZHByb2cKLWNob3duY21kPQotbXZjbWQ9JG12cHJvZwotcm1jbWQ9IiRybXByb2cgLWYiCi1zdHJpcGNtZD0KLQotc3JjPQotZHN0PQotZGlyX2FyZz0KLWRzdF9hcmc9Ci0KLWNvcHlfb25fY2hhbmdlPWZhbHNlCi1pc190YXJnZXRfYV9kaXJlY3Rvcnk9cG9zc2libHkKLQotdXNhZ2U9IlwKLVVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQotICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQotICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgotICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCi0KLUluIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCi1JbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KLUluIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KLQotT3B0aW9uczoKLSAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KLSAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KLQotICAtYyAgICAgICAgICAgIChpZ25vcmVkKQotICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCi0gIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KLSAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KLSAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgotICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCi0gIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCi0gIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KLSAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KLQotRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgotICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCi0gIFJNUFJPRyBTVFJJUFBST0cKLSIKLQotd2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KLSAgY2FzZSAkMSBpbgotICAgIC1jKSA7OwotCi0gICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OwotCi0gICAgLWQpIGRpcl9hcmc9dHJ1ZTs7Ci0KLSAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCi0gICAgICAgIHNoaWZ0OzsKLQotICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7Ci0KLSAgICAtbSkgbW9kZT0kMgotICAgICAgICBjYXNlICRtb2RlIGluCi0gICAgICAgICAgKicgJyogfCAqIiR0YWIiKiB8ICoiJG5sIiogfCAqJyonKiB8IConPycqIHwgKidbJyopCi0gICAgICAgICAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCi0gICAgICAgICAgICBleGl0IDE7OwotICAgICAgICBlc2FjCi0gICAgICAgIHNoaWZ0OzsKLQotICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKLSAgICAgICAgc2hpZnQ7OwotCi0gICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OwotCi0gICAgLXQpCi0gICAgICAgIGlzX3RhcmdldF9hX2RpcmVjdG9yeT1hbHdheXMKLSAgICAgICAgZHN0X2FyZz0kMgotICAgICAgICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgotICAgICAgICBjYXNlICRkc3RfYXJnIGluCi0gICAgICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKLSAgICAgICAgZXNhYwotICAgICAgICBzaGlmdDs7Ci0KLSAgICAtVCkgaXNfdGFyZ2V0X2FfZGlyZWN0b3J5PW5ldmVyOzsKLQotICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKLQotICAgIC0tKSBzaGlmdAotICAgICAgICBicmVhazs7Ci0KLSAgICAtKikgZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCi0gICAgICAgIGV4aXQgMTs7Ci0KLSAgICAqKSAgYnJlYWs7OwotICBlc2FjCi0gIHNoaWZ0Ci1kb25lCi0KLSMgV2UgYWxsb3cgdGhlIHVzZSBvZiBvcHRpb25zIC1kIGFuZCAtVCB0b2dldGhlciwgYnkgbWFraW5nIC1kCi0jIHRha2UgdGhlIHByZWNlZGVuY2U7IHRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTlUgaW5zdGFsbC4KLQotaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgotICAgIGVjaG8gIiQwOiB0YXJnZXQgZGlyZWN0b3J5IG5vdCBhbGxvd2VkIHdoZW4gaW5zdGFsbGluZyBhIGRpcmVjdG9yeS4iID4mMgotICAgIGV4aXQgMQotICBmaQotZmkKLQotaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgotICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KLSAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KLSAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgotICBmb3IgYXJnCi0gIGRvCi0gICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCi0gICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KLSAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKLSAgICAgIHNoaWZ0ICMgZm5vcmQKLSAgICBmaQotICAgIHNoaWZ0ICMgYXJnCi0gICAgZHN0X2FyZz0kYXJnCi0gICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KLSAgICBjYXNlICRkc3RfYXJnIGluCi0gICAgICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OwotICAgIGVzYWMKLSAgZG9uZQotZmkKLQotaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgotICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KLSAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKLSAgICBleGl0IDEKLSAgZmkKLSAgIyBJdCdzIE9LIHRvIGNhbGwgJ2luc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCi0gICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCi0gIGV4aXQgMAotZmkKLQotaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCi0gIGlmIHRlc3QgJCMgLWd0IDEgfHwgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBhbHdheXM7IHRoZW4KLSAgICBpZiB0ZXN0ICEgLWQgIiRkc3RfYXJnIjsgdGhlbgotICAgICAgZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBub3QgYSBkaXJlY3RvcnkuIiA+JjIKLSAgICAgIGV4aXQgMQotICAgIGZpCi0gIGZpCi1maQotCi1pZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KLSAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKLSAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKLSAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKLSAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCi0gIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQotCi0gICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCi0gICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KLSAgY2FzZSAkbW9kZSBpbgotICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgotICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7Ci0gICAgKjc1NSkgY3BfdW1hc2s9MjI7OwotCi0gICAgKlswLTddKQotICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgotICAgICAgICB1X3BsdXNfcnc9Ci0gICAgICBlbHNlCi0gICAgICAgIHVfcGx1c19ydz0nJSAyMDAnCi0gICAgICBmaQotICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OwotICAgICopCi0gICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCi0gICAgICAgIHVfcGx1c19ydz0KLSAgICAgIGVsc2UKLSAgICAgICAgdV9wbHVzX3J3PSx1K3J3Ci0gICAgICBmaQotICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKLSAgZXNhYwotZmkKLQotZm9yIHNyYwotZG8KLSAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KLSAgY2FzZSAkc3JjIGluCi0gICAgLSogfCBbPVwoXCkhXSkgc3JjPS4vJHNyYzs7Ci0gIGVzYWMKLQotICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KLSAgICBkc3Q9JHNyYwotICAgIGRzdGRpcj0kZHN0Ci0gICAgdGVzdCAtZCAiJGRzdGRpciIKLSAgICBkc3RkaXJfc3RhdHVzPSQ/Ci0gIGVsc2UKLQotICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCi0gICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAotICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgotICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgotICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKLSAgICAgIGV4aXQgMQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KLSAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKLSAgICAgIGV4aXQgMQotICAgIGZpCi0gICAgZHN0PSRkc3RfYXJnCi0KLSAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCi0gICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KLSAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgotICAgICAgaWYgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBuZXZlcjsgdGhlbgotICAgICAgICBlY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKLSAgICAgICAgZXhpdCAxCi0gICAgICBmaQotICAgICAgZHN0ZGlyPSRkc3QKLSAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCi0gICAgICBkc3RkaXJfc3RhdHVzPTAKLSAgICBlbHNlCi0gICAgICBkc3RkaXI9YGRpcm5hbWUgIiRkc3QiYAotICAgICAgdGVzdCAtZCAiJGRzdGRpciIKLSAgICAgIGRzdGRpcl9zdGF0dXM9JD8KLSAgICBmaQotICBmaQotCi0gIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKLQotICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KLSAgICBjYXNlICRwb3NpeF9ta2RpciBpbgotICAgICAgJycpCi0gICAgICAgICMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KLSAgICAgICAgIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KLSAgICAgICAgdW1hc2s9YHVtYXNrYAotICAgICAgICBjYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KLSAgICAgICAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KLSAgICAgICAgICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OwotICAgICAgICAgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKLQotICAgICAgICAgICpbMC03XSkKLSAgICAgICAgICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKLSAgICAgICAgICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKLSAgICAgICAgICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCi0gICAgICAgICAgICBgOzsKLSAgICAgICAgICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICAjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgotICAgICAgICAjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCi0gICAgICAgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICAgICAgICAgIG1rZGlyX21vZGU9LW0kbW9kZQotICAgICAgICBlbHNlCi0gICAgICAgICAgbWtkaXJfbW9kZT0KLSAgICAgICAgZmkKLQotICAgICAgICBwb3NpeF9ta2Rpcj1mYWxzZQotICAgICAgICBjYXNlICR1bWFzayBpbgotICAgICAgICAgICpbMTIzNTY3XVswLTddWzAtN10pCi0gICAgICAgICAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCi0gICAgICAgICAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgIyAkUkFORE9NIGlzIG5vdCBwb3J0YWJsZSAoZS5nLiBkYXNoKTsgIHVzZSBpdCB3aGVuIHBvc3NpYmxlIHRvCi0gICAgICAgICAgICAjIGxvd2VyIGNvbGxpc2lvbiBjaGFuY2UKLSAgICAgICAgICAgIHRtcGRpcj0ke1RNUERJUi0vdG1wfS9pbnMkUkFORE9NLSQkCi0gICAgICAgICAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2EvYiIgIiR0bXBkaXIvYSIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKLQotICAgICAgICAgICAgIyBBcyAibWtkaXIgLXAiIGZvbGxvd3Mgc3ltbGlua3MgYW5kIHdlIHdvcmsgaW4gL3RtcCBwb3NzaWJseTsgIHNvCi0gICAgICAgICAgICAjIGNyZWF0ZSB0aGUgJHRtcGRpciBmaXJzdCAoYW5kIGZhaWwgaWYgdW5zdWNjZXNzZnVsKSB0byBtYWtlIHN1cmUKLSAgICAgICAgICAgICMgdGhhdCBub2JvZHkgdHJpZXMgdG8gZ3Vlc3MgdGhlICR0bXBkaXIgbmFtZS4KLSAgICAgICAgICAgIGlmICh1bWFzayAkbWtkaXJfdW1hc2sgJiYKLSAgICAgICAgICAgICAgICAkbWtkaXJwcm9nICRta2Rpcl9tb2RlICIkdG1wZGlyIiAmJgotICAgICAgICAgICAgICAgIGV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9hL2IiKSA+L2Rldi9udWxsIDI+JjEKLSAgICAgICAgICAgIHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKLSAgICAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgotICAgICAgICAgICAgICAgICAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCi0gICAgICAgICAgICAgICAgICAgIyBvdGhlci13cml0YWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KLSAgICAgICAgICAgICAgICAgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgdGVzdF90bXBkaXI9IiR0bXBkaXIvYSIKLSAgICAgICAgICAgICAgICAgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRlc3RfdG1wZGlyImAKLSAgICAgICAgICAgICAgICAgICBjYXNlICRsc19sZF90bXBkaXIgaW4KLSAgICAgICAgICAgICAgICAgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7Ci0gICAgICAgICAgICAgICAgICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OwotICAgICAgICAgICAgICAgICAgICAgKikgZmFsc2U7OwotICAgICAgICAgICAgICAgICAgIGVzYWMgJiYKLSAgICAgICAgICAgICAgICAgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdGVzdF90bXBkaXIiICYmIHsKLSAgICAgICAgICAgICAgICAgICAgIGxzX2xkX3RtcGRpcl8xPWBscyAtbGQgIiR0ZXN0X3RtcGRpciJgCi0gICAgICAgICAgICAgICAgICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCi0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHRoZW4gcG9zaXhfbWtkaXI9OgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBybWRpciAiJHRtcGRpci9hL2IiICIkdG1wZGlyL2EiICIkdG1wZGlyIgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KLSAgICAgICAgICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gIiR0bXBkaXIiIDI+L2Rldi9udWxsCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgdHJhcCAnJyAwOzsKLSAgICAgICAgZXNhYzs7Ci0gICAgZXNhYwotCi0gICAgaWYKLSAgICAgICRwb3NpeF9ta2RpciAmJiAoCi0gICAgICAgIHVtYXNrICRta2Rpcl91bWFzayAmJgotICAgICAgICAkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCi0gICAgICApCi0gICAgdGhlbiA6Ci0gICAgZWxzZQotCi0gICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAotICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCi0gICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgotCi0gICAgICBjYXNlICRkc3RkaXIgaW4KLSAgICAgICAgLyopIHByZWZpeD0nLyc7OwotICAgICAgICBbLT1cKFwpIV0qKSBwcmVmaXg9Jy4vJzs7Ci0gICAgICAgICopICBwcmVmaXg9Jyc7OwotICAgICAgZXNhYwotCi0gICAgICBvSUZTPSRJRlMKLSAgICAgIElGUz0vCi0gICAgICBzZXQgLWYKLSAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCi0gICAgICBzaGlmdAotICAgICAgc2V0ICtmCi0gICAgICBJRlM9JG9JRlMKLQotICAgICAgcHJlZml4ZXM9Ci0KLSAgICAgIGZvciBkCi0gICAgICBkbwotICAgICAgICB0ZXN0IFgiJGQiID0gWCAmJiBjb250aW51ZQotCi0gICAgICAgIHByZWZpeD0kcHJlZml4JGQKLSAgICAgICAgaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KLSAgICAgICAgICBwcmVmaXhlcz0KLSAgICAgICAgZWxzZQotICAgICAgICAgIGlmICRwb3NpeF9ta2RpcjsgdGhlbgotICAgICAgICAgICAgKHVtYXNrPSRta2Rpcl91bWFzayAmJgotICAgICAgICAgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIpICYmIGJyZWFrCi0gICAgICAgICAgICAjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCi0gICAgICAgICAgICB0ZXN0IC1kICIkcHJlZml4IiB8fCBleGl0IDEKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXNlICRwcmVmaXggaW4KLSAgICAgICAgICAgICAgKlwnKikgcXByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OwotICAgICAgICAgICAgICAqKSBxcHJlZml4PSRwcmVmaXg7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgcHJlZml4ZXM9IiRwcmVmaXhlcyAnJHFwcmVmaXgnIgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICAgIHByZWZpeD0kcHJlZml4LwotICAgICAgZG9uZQotCi0gICAgICBpZiB0ZXN0IC1uICIkcHJlZml4ZXMiOyB0aGVuCi0gICAgICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KLSAgICAgICAgKHVtYXNrICRta2Rpcl91bWFzayAmJgotICAgICAgICAgZXZhbCAiXCRkb2l0X2V4ZWMgXCRta2RpcnByb2cgJHByZWZpeGVzIikgfHwKLSAgICAgICAgICB0ZXN0IC1kICIkZHN0ZGlyIiB8fCBleGl0IDEKLSAgICAgICAgb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi0KLSAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCi0gICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKLSAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgotICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKLSAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKLSAgZWxzZQotCi0gICAgIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KLSAgICBkc3R0bXA9JGRzdGRpci9faW5zdC4kJF8KLSAgICBybXRtcD0kZHN0ZGlyL19ybS4kJF8KLQotICAgICMgVHJhcCB0byBjbGVhbiB1cCB0aG9zZSB0ZW1wIGZpbGVzIGF0IGV4aXQuCi0gICAgdHJhcCAncmV0PSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkcmV0JyAwCi0KLSAgICAjIENvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lLgotICAgICh1bWFzayAkY3BfdW1hc2sgJiYgJGRvaXRfZXhlYyAkY3Bwcm9nICIkc3JjIiAiJGRzdHRtcCIpICYmCi0KLSAgICAjIGFuZCBzZXQgYW55IG9wdGlvbnM7IGRvIGNobW9kIGxhc3QgdG8gcHJlc2VydmUgc2V0dWlkIGJpdHMuCi0gICAgIwotICAgICMgSWYgYW55IG9mIHRoZXNlIGZhaWwsIHdlIGFib3J0IHRoZSB3aG9sZSB0aGluZy4gIElmIHdlIHdhbnQgdG8KLSAgICAjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKLSAgICAjIGVycm9ycyBmcm9tIHRoZSBhYm92ZSAiJGRvaXQgJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCi0gICAgIwotICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3R0bXAiOyB9ICYmCi0gICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IH0gJiYKLSAgICB7IHRlc3QgLXogIiRzdHJpcGNtZCIgfHwgJGRvaXQgJHN0cmlwY21kICIkZHN0dG1wIjsgfSAmJgotICAgIHsgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3R0bXAiOyB9ICYmCi0KLSAgICAjIElmIC1DLCBkb24ndCBib3RoZXIgdG8gY29weSBpZiBpdCB3b3VsZG4ndCBjaGFuZ2UgdGhlIGZpbGUuCi0gICAgaWYgJGNvcHlfb25fY2hhbmdlICYmCi0gICAgICAgb2xkPWBMQ19BTEw9QyBscyAtZGxMICIkZHN0IiAgICAgMj4vZGV2L251bGxgICYmCi0gICAgICAgbmV3PWBMQ19BTEw9QyBscyAtZGxMICIkZHN0dG1wIiAgMj4vZGV2L251bGxgICYmCi0gICAgICAgc2V0IC1mICYmCi0gICAgICAgc2V0IFggJG9sZCAmJiBvbGQ9OiQyOiQ0OiQ1OiQ2ICYmCi0gICAgICAgc2V0IFggJG5ldyAmJiBuZXc9OiQyOiQ0OiQ1OiQ2ICYmCi0gICAgICAgc2V0ICtmICYmCi0gICAgICAgdGVzdCAiJG9sZCIgPSAiJG5ldyIgJiYKLSAgICAgICAkY21wcHJvZyAiJGRzdCIgIiRkc3R0bXAiID4vZGV2L251bGwgMj4mMQotICAgIHRoZW4KLSAgICAgIHJtIC1mICIkZHN0dG1wIgotICAgIGVsc2UKLSAgICAgICMgUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgotICAgICAgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdCIgMj4vZGV2L251bGwgfHwKLQotICAgICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQotICAgICAgIyB0byBpdHNlbGYsIG9yIHBlcmhhcHMgYmVjYXVzZSBtdiBpcyBzbyBhbmNpZW50IHRoYXQgaXQgZG9lcyBub3QKLSAgICAgICMgc3VwcG9ydCAtZi4KLSAgICAgIHsKLSAgICAgICAgIyBOb3cgcmVtb3ZlIG9yIG1vdmUgYXNpZGUgYW55IG9sZCBmaWxlIGF0IGRlc3RpbmF0aW9uIGxvY2F0aW9uLgotICAgICAgICAjIFdlIHRyeSB0aGlzIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZQotICAgICAgICAjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCi0gICAgICAgICMgcmVhc29ucy4gIEluIHRoaXMgY2FzZSwgdGhlIGZpbmFsIGNsZWFudXAgbWlnaHQgZmFpbCBidXQgdGhlIG5ldwotICAgICAgICAjIGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgotICAgICAgICB7Ci0gICAgICAgICAgdGVzdCAhIC1mICIkZHN0IiB8fAotICAgICAgICAgICRkb2l0ICRybWNtZCAtZiAiJGRzdCIgMj4vZGV2L251bGwgfHwKLSAgICAgICAgICB7ICRkb2l0ICRtdmNtZCAtZiAiJGRzdCIgIiRybXRtcCIgMj4vZGV2L251bGwgJiYKLSAgICAgICAgICAgIHsgJGRvaXQgJHJtY21kIC1mICIkcm10bXAiIDI+L2Rldi9udWxsOyA6OyB9Ci0gICAgICAgICAgfSB8fAotICAgICAgICAgIHsgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3QiID4mMgotICAgICAgICAgICAgKGV4aXQgMSk7IGV4aXQgMQotICAgICAgICAgIH0KLSAgICAgICAgfSAmJgotCi0gICAgICAgICMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KLSAgICAgICAgJGRvaXQgJG12Y21kICIkZHN0dG1wIiAiJGRzdCIKLSAgICAgIH0KLSAgICBmaSB8fCBleGl0IDEKLQotICAgIHRyYXAgJycgMAotICBmaQotZG9uZQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MzZjZjkuLjAwMDAwMDAKLS0tIGEvbHRtYWluLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTExNTYgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyMgRE8gTk9UIEVESVQgLSBUaGlzIGZpbGUgZ2VuZXJhdGVkIGZyb20gLi9idWlsZC1hdXgvbHRtYWluLmluCi0jIyAgICAgICAgICAgICAgIGJ5IGlubGluZS1zb3VyY2UgdjIwMTQtMDEtMDMuMDEKLQotIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40LjYKLSMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0KLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCi0jIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0jIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0jIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKLSMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCi0jIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotIwotIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0KLVBST0dSQU09bGlidG9vbAotUEFDS0FHRT1saWJ0b29sCi1WRVJTSU9OPSIyLjQuNiBEZWJpYW4tMi40LjYtMiIKLXBhY2thZ2VfcmV2aXNpb249Mi40LjYKLQotCi0jIyAtLS0tLS0gIyMKLSMjIFVzYWdlLiAjIwotIyMgLS0tLS0tICMjCi0KLSMgUnVuICcuL2xpYnRvb2wgLS1oZWxwJyBmb3IgaGVscCB3aXRoIHVzaW5nIHRoaXMgc2NyaXB0IGZyb20gdGhlCi0jIGNvbW1hbmQgbGluZS4KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgQWZ0ZXIgY29uZmlndXJlIGNvbXBsZXRlcywgaXQgaGFzIGEgYmV0dGVyIGlkZWEgb2Ygc29tZSBvZiB0aGUKLSMgc2hlbGwgdG9vbHMgd2UgbmVlZCB0aGFuIHRoZSBkZWZhdWx0cyB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgc2hhcmVkCi0jIHdpdGggYm9vdHN0cmFwLCBzbyBzZXQgdGhvc2UgaGVyZSB3aGVyZSB0aGV5IGNhbiBzdGlsbCBiZSBvdmVyLQotIyByaWRkZW4gYnkgdGhlIHVzZXIsIGJ1dCBvdGhlcndpc2UgdGFrZSBwcmVjZWRlbmNlLgotCi06ICR7QVVUT0NPTkY9ImF1dG9jb25mIn0KLTogJHtBVVRPTUFLRT0iYXV0b21ha2UifQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBTb3VyY2UgZXh0ZXJuYWwgbGlicmFyaWVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBNdWNoIG9mIG91ciBsb3ctbGV2ZWwgZnVuY3Rpb25hbGl0eSBuZWVkcyB0byBiZSBzb3VyY2VkIGZyb20gZXh0ZXJuYWwKLSMgbGlicmFyaWVzLCB3aGljaCBhcmUgaW5zdGFsbGVkIHRvICRwa2dhdXhkaXIuCi0KLSMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgotc2NyaXB0dmVyc2lvbj0yMDE1LTAxLTIwLjE3OyAjIFVUQwotCi0jIEdlbmVyYWwgc2hlbGwgc2NyaXB0IGJvaWxlciBwbGF0ZSwgYW5kIGhlbHBlciBmdW5jdGlvbnMuCi0jIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0Ci0KLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCi0jIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdSBkaXN0cmlidXRlCi0jIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsCi0jIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZQotIyBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0KLSMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0byBnYXJ5QGdudS5vcmcuCi0KLQotIyMgLS0tLS0tICMjCi0jIyBVc2FnZS4gIyMKLSMjIC0tLS0tLSAjIwotCi0jIEV2YWx1YXRlIHRoaXMgZmlsZSBuZWFyIHRoZSB0b3Agb2YgeW91ciBzY3JpcHQgdG8gZ2FpbiBhY2Nlc3MgdG8KLSMgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGRlZmluZWQgaGVyZToKLSMKLSMgICAuIGBlY2hvICIkMCIgfCAke1NFRC1zZWR9ICdzfFteL10qJHx8J2AvYnVpbGQtYXV4L2Z1bmNsaWIuc2gKLSMKLSMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgYW55IG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlCi0jIHNldHRpbmdzLCBkbyB0aGF0IGJlZm9yZSBldmFsdWF0aW5nIHRoaXMgZmlsZS4KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgU2hlbGwgbm9ybWFsaXNhdGlvbi4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgU29tZSBzaGVsbHMgbmVlZCBhIGxpdHRsZSBoZWxwIHRvIGJlIGFzIEJvdXJuZSBjb21wYXRpYmxlIGFzIHBvc3NpYmxlLgotIyBCZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIGFsbCB0aGF0IGhlbHAgaGFzIGJlZW4gcHJvdmlkZWQhCi0KLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIGVtdWxhdGUgc2gKLSAgTlVMTENNRD06Ci0gICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OyBlc2FjCi1maQotCi0jIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgaW4gY2FzZSB0aGV5IGFyZSByZXF1aXJlZCBsYXRlci4KLV9HX3VzZXJfbG9jYWxlPQotX0dfc2FmZV9sb2NhbGU9Ci1mb3IgX0dfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKLWRvCi0gIGV2YWwgImlmIHRlc3Qgc2V0ID0gXCJcJHskX0dfdmFyK3NldH1cIjsgdGhlbgotICAgICAgICAgIHNhdmVfJF9HX3Zhcj1cJCRfR192YXIKLSAgICAgICAgICAkX0dfdmFyPUMKLQkgIGV4cG9ydCAkX0dfdmFyCi0JICBfR191c2VyX2xvY2FsZT1cIiRfR192YXI9XFxcJHNhdmVfXCRfR192YXI7IFwkX0dfdXNlcl9sb2NhbGVcIgotCSAgX0dfc2FmZV9sb2NhbGU9XCIkX0dfdmFyPUM7IFwkX0dfc2FmZV9sb2NhbGVcIgotCWZpIgotZG9uZQotCi0jIENEUEFUSC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKLXNwPScgJwotbmw9JwotJwotSUZTPSIkc3AJJG5sIgotCi0jIFRoZXJlIGFyZSBhcHBhcmVudGx5IHNvbWUgcmV0YXJkZWQgc3lzdGVtcyB0aGF0IHVzZSAnOycgYXMgYSBQQVRIIHNlcGFyYXRvciEKLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIFBBVEhfU0VQQVJBVE9SPToKLSAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgewotICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gICAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgfQotZmkKLQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIExvY2F0ZSBjb21tYW5kIHV0aWxpdGllcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotCi0jIGZ1bmNfZXhlY3V0YWJsZV9wIEZJTEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0aGF0IEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCi1mdW5jX2V4ZWN1dGFibGVfcCAoKQotewotICAgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKLX0KLQotCi0jIGZ1bmNfcGF0aF9wcm9ncyBQUk9HU19MSVNUIENIRUNLX0ZVTkMgW1BBVEhdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlYXJjaCBmb3IgZWl0aGVyIGEgcHJvZ3JhbSB0aGF0IHJlc3BvbmRzIHRvIC0tdmVyc2lvbiB3aXRoIG91dHB1dAotIyBjb250YWluaW5nICJHTlUiLCBvciBlbHNlIHJldHVybmVkIGJ5IENIRUNLX0ZVTkMgb3RoZXJ3aXNlLCBieQotIyB0cnlpbmcgYWxsIHRoZSBkaXJlY3RvcmllcyBpbiBQQVRIIHdpdGggZWFjaCBvZiB0aGUgZWxlbWVudHMgb2YKLSMgUFJPR1NfTElTVC4KLSMKLSMgQ0hFQ0tfRlVOQyBzaG91bGQgYWNjZXB0IHRoZSBwYXRoIHRvIGEgY2FuZGlkYXRlIHByb2dyYW0sIGFuZAotIyBzZXQgJGZ1bmNfY2hlY2tfcHJvZ19yZXN1bHQgaWYgaXQgdHJ1bmNhdGVzIGl0cyBvdXRwdXQgbGVzcyB0aGFuCi0jICRfR19wYXRoX3Byb2dfbWF4IGNoYXJhY3RlcnMuCi1mdW5jX3BhdGhfcHJvZ3MgKCkKLXsKLSAgICBfR19wcm9nc19saXN0PSQxCi0gICAgX0dfY2hlY2tfZnVuYz0kMgotICAgIF9HX1BBVEg9JHszLSIkUEFUSCJ9Ci0KLSAgICBfR19wYXRoX3Byb2dfbWF4PTAKLSAgICBfR19wYXRoX3Byb2dfZm91bmQ9ZmFsc2UKLSAgICBfR19zYXZlX0lGUz0kSUZTOyBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQotICAgIGZvciBfR19kaXIgaW4gJF9HX1BBVEg7IGRvCi0gICAgICBJRlM9JF9HX3NhdmVfSUZTCi0gICAgICB0ZXN0IC16ICIkX0dfZGlyIiAmJiBfR19kaXI9LgotICAgICAgZm9yIF9HX3Byb2dfbmFtZSBpbiAkX0dfcHJvZ3NfbGlzdDsgZG8KLSAgICAgICAgZm9yIF9leGVleHQgaW4gJycgLkVYRTsgZG8KLSAgICAgICAgICBfR19wYXRoX3Byb2c9JF9HX2Rpci8kX0dfcHJvZ19uYW1lJF9leGVleHQKLSAgICAgICAgICBmdW5jX2V4ZWN1dGFibGVfcCAiJF9HX3BhdGhfcHJvZyIgfHwgY29udGludWUKLSAgICAgICAgICBjYXNlIGAiJF9HX3BhdGhfcHJvZyIgLS12ZXJzaW9uIDI+JjFgIGluCi0gICAgICAgICAgICAqR05VKikgZnVuY19wYXRoX3Byb2dzX3Jlc3VsdD0kX0dfcGF0aF9wcm9nIF9HX3BhdGhfcHJvZ19mb3VuZD06IDs7Ci0gICAgICAgICAgICAqKSAgICAgJF9HX2NoZWNrX2Z1bmMgJF9HX3BhdGhfcHJvZwotCQkgICBmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0PSRmdW5jX2NoZWNrX3Byb2dfcmVzdWx0Ci0JCSAgIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICAgICRfR19wYXRoX3Byb2dfZm91bmQgJiYgYnJlYWsgMwotICAgICAgICBkb25lCi0gICAgICBkb25lCi0gICAgZG9uZQotICAgIElGUz0kX0dfc2F2ZV9JRlMKLSAgICB0ZXN0IC16ICIkZnVuY19wYXRoX3Byb2dzX3Jlc3VsdCIgJiYgewotICAgICAgZWNobyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiA+JjIKLSAgICAgIGV4aXQgMQotICAgIH0KLX0KLQotCi0jIFdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYmVmb3JlIGNvbmZpZ3VyZQotIyBoYXMgZmlndXJlZCBvdXQgd2hlcmUgdGhlIGJlc3QgYmluYXJpZXMgYXJlIGtlcHQsIHdoaWNoIG1lYW5zIHdlIGhhdmUKLSMgdG8gc2VhcmNoIGZvciB0aGVtIG91cnNlbHZlcyAtIGV4Y2VwdCB3aGVuIHRoZSByZXN1bHRzIGFyZSBhbHJlYWR5IHNldAotIyB3aGVyZSB3ZSBza2lwIHRoZSBzZWFyY2hlcy4KLQotIyBVbmxlc3MgdGhlIHVzZXIgb3ZlcnJpZGVzIGJ5IHNldHRpbmcgU0VELCBzZWFyY2ggdGhlIHBhdGggZm9yIGVpdGhlciBHTlUKLSMgc2VkLCBvciB0aGUgc2VkIHRoYXQgdHJ1bmNhdGVzIGl0cyBvdXRwdXQgdGhlIGxlYXN0LgotdGVzdCAteiAiJFNFRCIgJiYgewotICBfR19zZWRfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLwotICBmb3IgX0dfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbwotICAgIF9HX3NlZF9zY3JpcHQ9JF9HX3NlZF9zY3JpcHQkbmwkX0dfc2VkX3NjcmlwdAotICBkb25lCi0gIGVjaG8gIiRfR19zZWRfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAotICBfR19zZWRfc2NyaXB0PQotCi0gIGZ1bmNfY2hlY2tfcHJvZ19zZWQgKCkKLSAgewotICAgIF9HX3BhdGhfcHJvZz0kMQotCi0gICAgX0dfY291bnQ9MAotICAgIHByaW50ZiAwMTIzNDU2Nzg5ID5jb25mdGVzdC5pbgotICAgIHdoaWxlIDoKLSAgICBkbwotICAgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgotICAgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICAgIGVjaG8gJycgPj4gY29uZnRlc3QubmwKLSAgICAgICIkX0dfcGF0aF9wcm9nIiAtZiBjb25mdGVzdC5zZWQgPGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICAgIGRpZmYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgICAgX0dfY291bnQ9YGV4cHIgJF9HX2NvdW50ICsgMWAKLSAgICAgIGlmIHRlc3QgIiRfR19jb3VudCIgLWd0ICIkX0dfcGF0aF9wcm9nX21heCI7IHRoZW4KLSAgICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICAgIGZ1bmNfY2hlY2tfcHJvZ19yZXN1bHQ9JF9HX3BhdGhfcHJvZwotICAgICAgICBfR19wYXRoX3Byb2dfbWF4PSRfR19jb3VudAotICAgICAgZmkKLSAgICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICAgIHRlc3QgMTAgLWx0ICIkX0dfY291bnQiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQKLSAgfQotCi0gIGZ1bmNfcGF0aF9wcm9ncyAic2VkIGdzZWQiIGZ1bmNfY2hlY2tfcHJvZ19zZWQgJFBBVEg6L3Vzci94cGc0L2JpbgotICBybSAtZiBjb25mdGVzdC5zZWQKLSAgU0VEPSRmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0Ci19Ci0KLQotIyBVbmxlc3MgdGhlIHVzZXIgb3ZlcnJpZGVzIGJ5IHNldHRpbmcgR1JFUCwgc2VhcmNoIHRoZSBwYXRoIGZvciBlaXRoZXIgR05VCi0jIGdyZXAsIG9yIHRoZSBncmVwIHRoYXQgdHJ1bmNhdGVzIGl0cyBvdXRwdXQgdGhlIGxlYXN0LgotdGVzdCAteiAiJEdSRVAiICYmIHsKLSAgZnVuY19jaGVja19wcm9nX2dyZXAgKCkKLSAgewotICAgIF9HX3BhdGhfcHJvZz0kMQotCi0gICAgX0dfY291bnQ9MAotICAgIF9HX3BhdGhfcHJvZ19tYXg9MAotICAgIHByaW50ZiAwMTIzNDU2Nzg5ID5jb25mdGVzdC5pbgotICAgIHdoaWxlIDoKLSAgICBkbwotICAgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgotICAgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICAgIGVjaG8gJ0dSRVAnID4+IGNvbmZ0ZXN0Lm5sCi0gICAgICAiJF9HX3BhdGhfcHJvZyIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICAgIGRpZmYgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgICAgX0dfY291bnQ9YGV4cHIgJF9HX2NvdW50ICsgMWAKLSAgICAgIGlmIHRlc3QgIiRfR19jb3VudCIgLWd0ICIkX0dfcGF0aF9wcm9nX21heCI7IHRoZW4KLSAgICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICAgIGZ1bmNfY2hlY2tfcHJvZ19yZXN1bHQ9JF9HX3BhdGhfcHJvZwotICAgICAgICBfR19wYXRoX3Byb2dfbWF4PSRfR19jb3VudAotICAgICAgZmkKLSAgICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICAgIHRlc3QgMTAgLWx0ICIkX0dfY291bnQiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQKLSAgfQotCi0gIGZ1bmNfcGF0aF9wcm9ncyAiZ3JlcCBnZ3JlcCIgZnVuY19jaGVja19wcm9nX2dyZXAgJFBBVEg6L3Vzci94cGc0L2JpbgotICBHUkVQPSRmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0Ci19Ci0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgVXNlciBvdmVycmlkYWJsZSBjb21tYW5kIHBhdGhzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEFsbCB1cHBlcmNhc2UgdmFyaWFibGUgbmFtZXMgYXJlIHVzZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoZXNlCi0jIHZhcmlhYmxlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciBiZWZvcmUgY2FsbGluZyBhIHNjcmlwdCB0aGF0Ci0jIHVzZXMgdGhlbSBpZiBhIHN1aXRhYmxlIGNvbW1hbmQgb2YgdGhhdCBuYW1lIGlzIG5vdCBhbHJlYWR5IGF2YWlsYWJsZQotIyBpbiB0aGUgY29tbWFuZCBzZWFyY2ggUEFUSC4KLQotOiAke0NQPSJjcCAtZiJ9Ci06ICR7RUNITz0icHJpbnRmICVzXG4ifQotOiAke0VHUkVQPSIkR1JFUCAtRSJ9Ci06ICR7RkdSRVA9IiRHUkVQIC1GIn0KLTogJHtMTl9TPSJsbiAtcyJ9Ci06ICR7TUFLRT0ibWFrZSJ9Ci06ICR7TUtESVI9Im1rZGlyIn0KLTogJHtNVj0ibXYgLWYifQotOiAke1JNPSJybSAtZiJ9Ci06ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgVXNlZnVsIHNlZCBzbmlwcGV0cy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLXNlZF9kaXJuYW1lPSdzfC9bXi9dKiR8fCcKLXNlZF9iYXNlbmFtZT0nc3xeLiovfHwnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1zZWRfcXVvdGVfc3Vic3Q9J3N8XChbYCIkXFxdXCl8XFxcMXxnJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLXNlZF9kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCi0jIHN0cmluZyBsaXRlcmFsbHkuCi1zZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzfFtdLlteJFxcKlwvXXxcXCZ8ZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKLSMgdGhhdCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKLSMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgotc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJwotCi0jIFJlLSdcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2Ygc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCB0aGF0Ci0jIHdlcmUgJ1wnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiAnXCcgcHJlY2VkZWQgYQotIyAnJCcgaW4gaW5wdXQgdG8gc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tCi0jIGV4cGFuc2lvbi4gIFNpbmNlIGVhY2ggaW5wdXQgJ1wnIGlzIG5vdyB0d28gJ1wncywgbG9vayBmb3IgYW55IG51bWJlcgotIyBvZiBydW5zIG9mIGZvdXIgJ1wncyBmb2xsb3dlZCBieSB0d28gJ1wncyBhbmQgdGhlbiBhICckJy4gICdcJyB0aGF0ICckJy4KLV9HX2JzPSdcXCcKLV9HX2JzMj0nXFxcXCcKLV9HX2JzND0nXFxcXFxcXFwnCi1fR19kb2xsYXI9J1wkJwotc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKLSAgcy8kX0dfYnM0LyZcXAotL2cKLSAgcy9eJF9HX2JzMiRfR19kb2xsYXIvJF9HX2JzJi8KLSAgcy9cXChbXiRfR19ic11cXCkkX0dfYnMyJF9HX2RvbGxhci9cXDEkX0dfYnMyJF9HX2JzJF9HX2RvbGxhci9nCi0gIHMvXG4vL2ciCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEdsb2JhbCB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEV4Y2VwdCBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZXhwbGljaXRseSBsaXN0ZWQgYmVsb3csIHRoZSBmb2xsb3dpbmcKLSMgZnVuY3Rpb25zIGluIHRoZSAnXmZ1bmNfJyBuYW1lc3BhY2UsIGFuZCB0aGUgJ15yZXF1aXJlXycgbmFtZXNwYWNlCi0jIHZhcmlhYmxlcyBpbml0aWFsaXNlZCBpbiB0aGUgJ1Jlc291cmNlIG1hbmFnZW1lbnQnIHNlY3Rpb24sIHNvdXJjaW5nCi0jIHRoaXMgZmlsZSB3aWxsIG5vdCBwb2xsdXRlIHlvdXIgZ2xvYmFsIG5hbWVzcGFjZSB3aXRoIGFueXRoaW5nCi0jIGVsc2UuIFRoZXJlJ3Mgbm8gcG9ydGFibGUgd2F5IHRvIHNjb3BlIHZhcmlhYmxlcyBpbiBCb3VybmUgc2hlbGwKLSMgdGhvdWdoLCBzbyBhY3R1YWxseSBydW5uaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHNvbWV0aW1lcyBwbGFjZQotIyByZXN1bHRzIGludG8gYSB2YXJpYWJsZSBuYW1lZCBhZnRlciB0aGUgZnVuY3Rpb24sIGFuZCBvZnRlbiB1c2UKLSMgdGVtcG9yYXJ5IHZhcmlhYmxlcyBpbiB0aGUgJ15fR18nIG5hbWVzcGFjZS4gSWYgeW91IGFyZSBjYXJlZnVsIHRvCi0jIGF2b2lkIHVzaW5nIHRob3NlIG5hbWVzcGFjZXMgY2FzdWFsbHkgaW4geW91ciBzb3VyY2luZyBzY3JpcHQsIHRoaW5ncwotIyBzaG91bGQgY29udGludWUgdG8gd29yayBhcyB5b3UgZXhwZWN0LiBBbmQsIG9mIGNvdXJzZSwgeW91IGNhbiBmcmVlbHkKLSMgb3ZlcndyaXRlIGFueSBvZiB0aGUgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmUgYmVmb3JlCi0jIGNhbGxpbmcgYW55dGhpbmcgdG8gY3VzdG9taXplIHRoZW0uCi0KLUVYSVRfU1VDQ0VTUz0wCi1FWElUX0ZBSUxVUkU9MQotRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgotRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCi0KLSMgQWxsb3cgb3ZlcnJpZGluZywgZWcgYXNzdW1pbmcgdGhhdCB5b3UgZm9sbG93IHRoZSBjb252ZW50aW9uIG9mCi0jIHB1dHRpbmcgJyRkZWJ1Z19jbWQnIGF0IHRoZSBzdGFydCBvZiBhbGwgeW91ciBmdW5jdGlvbnMsIHlvdSBjYW4gZ2V0Ci0jIGJhc2ggdG8gc2hvdyBmdW5jdGlvbiBjYWxsIHRyYWNlIHdpdGg6Ci0jCi0jICAgIGRlYnVnX2NtZD0nZXZhbCBlY2hvICIke0ZVTkNOQU1FWzBdfSAkKiIgPiYyJyBiYXNoIHlvdXItc2NyaXB0LW5hbWUKLWRlYnVnX2NtZD0ke2RlYnVnX2NtZC0iOiJ9Ci1leGl0X2NtZD06Ci0KLSMgQnkgY29udmVudGlvbiwgZmluaXNoIHlvdXIgc2NyaXB0IHdpdGg6Ci0jCi0jICAgIGV4aXQgJGV4aXRfc3RhdHVzCi0jCi0jIHNvIHRoYXQgeW91IGNhbiBzZXQgZXhpdF9zdGF0dXMgdG8gbm9uLXplcm8gaWYgeW91IHdhbnQgdG8gaW5kaWNhdGUKLSMgc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGV4ZWN1dGlvbiB3aXRob3V0IGFjdHVhbGx5IGJhaWxpbmcgb3V0IGF0Ci0jIHRoZSBwb2ludCBvZiBmYWlsdXJlLgotZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUwotCi0jIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKLSMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCi0jIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAotIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCi0jIGZ1bmN0aW9uLgotcHJvZ3BhdGg9JDAKLQotIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW0uCi1wcm9nbmFtZT1gJEVDSE8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfYmFzZW5hbWUiYAotCi0jIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHByb2dwYXRoIGZvciByZWV4ZWN1dGlvbjoKLWNhc2UgJHByb2dwYXRoIGluCi0gIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7Ci0gICpbXFwvXSopCi0gICAgIHByb2dkaXI9YCRFQ0hPICIkcHJvZ3BhdGgiIHwkU0VEICIkc2VkX2Rpcm5hbWUiYAotICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKLSAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCi0gICAgIDs7Ci0gICopCi0gICAgIF9HX0lGUz0kSUZTCi0gICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9Ci0gICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbwotICAgICAgIElGUz0kX0dfSUZTCi0gICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhawotICAgICBkb25lCi0gICAgIElGUz0kX0dfSUZTCi0gICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCi0gICAgIHByb2dwYXRoPSRwcm9nZGlyLyRwcm9nbmFtZQotICAgICA7OwotZXNhYwotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBTdGFuZGFyZCBvcHRpb25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYWZmZWN0IHRoZSBvcGVyYXRpb24gb2YgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkCi0jIGJlbG93LCBhbmQgc2hvdWxkIGJlIHNldCBhcHByb3ByaWF0ZWx5IGRlcGVuZGluZyBvbiBydW4tdGltZSBwYXJhLQotIyBtZXRlcnMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0KLW9wdF9kcnlfcnVuPWZhbHNlCi1vcHRfcXVpZXQ9ZmFsc2UKLW9wdF92ZXJib3NlPWZhbHNlCi0KLSMgQ2F0ZWdvcmllcyAnYWxsJyBhbmQgJ25vbmUnIGFyZSBhbHdheXMgYXZhaWxhYmxlLiAgQXBwZW5kIGFueSBvdGhlcnMKLSMgeW91IHdpbGwgcGFzcyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gZnVuY193YXJuaW5nIGZyb20geW91ciBvd24KLSMgY29kZS4KLXdhcm5pbmdfY2F0ZWdvcmllcz0KLQotIyBCeSBkZWZhdWx0LCBkaXNwbGF5IHdhcm5pbmdzIGFjY29yZGluZyB0byAnb3B0X3dhcm5pbmdfdHlwZXMnLiAgU2V0Ci0jICd3YXJuaW5nX2Z1bmMnICB0byAnOicgdG8gZWxpZGUgYWxsIHdhcm5pbmdzLCBvciBmdW5jX2ZhdGFsX2Vycm9yIHRvCi0jIHRyZWF0IHRoZSBuZXh0IGRpc3BsYXllZCB3YXJuaW5nIGFzIGEgZmF0YWwgZXJyb3IuCi13YXJuaW5nX2Z1bmM9ZnVuY193YXJuX2FuZF9jb250aW51ZQotCi0jIFNldCB0byAnYWxsJyB0byBkaXNwbGF5IGFsbCB3YXJuaW5ncywgJ25vbmUnIHRvIHN1cHByZXNzIGFsbAotIyB3YXJuaW5ncywgb3IgYSBzcGFjZSBkZWxpbWl0ZWQgbGlzdCBvZiBzb21lIHN1YnNldCBvZgotIyAnd2FybmluZ19jYXRlZ29yaWVzJyB0byBkaXNwbGF5IG9ubHkgdGhlIGxpc3RlZCB3YXJuaW5ncy4KLW9wdF93YXJuaW5nX3R5cGVzPWFsbAotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXNvdXJjZSBtYW5hZ2VtZW50LiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGVhY2ggZW5zdXJlIGEKLSMgcGFydGljdWxhciByZXNvdXJjZSAoYSBmaWxlLCBvciBhIG5vbi1lbXB0eSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvcgotIyBleGFtcGxlKSBpcyBhdmFpbGFibGUsIGFuZCBpZiBhcHByb3ByaWF0ZSB0byBleHRyYWN0IGRlZmF1bHQgdmFsdWVzCi0jIGZyb20gcGVydGluZW50IHBhY2thZ2UgZmlsZXMuIENhbGwgdGhlbSB1c2luZyB0aGVpciBhc3NvY2lhdGVkCi0jICdyZXF1aXJlXyonIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGV4ZWN1dGVkLCBhdCBtb3N0LCBvbmNlLgotIwotIyBJdCdzIGVudGlyZWx5IGRlbGliZXJhdGUgdGhhdCBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyBjYW4gc2V0Ci0jIHZhcmlhYmxlcyB0aGF0IGRvbid0IG9iZXkgdGhlIG5hbWVzcGFjZSBsaW1pdGF0aW9ucyBvYmV5ZWQgYnkgdGhlIHJlc3QKLSMgb2YgdGhpcyBmaWxlLCBpbiBvcmRlciB0aGF0IHRoYXQgdGhleSBiZSBhcyB1c2VmdWwgYXMgcG9zc2libGUgdG8KLSMgY2FsbGVycy4KLQotCi0jIHJlcXVpcmVfdGVybV9jb2xvcnMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBbGxvdyBkaXNwbGF5IG9mIGJvbGQgdGV4dCBvbiB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IGl0LgotcmVxdWlyZV90ZXJtX2NvbG9ycz1mdW5jX3JlcXVpcmVfdGVybV9jb2xvcnMKLWZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHRlc3QgLXQgMSAmJiB7Ci0gICAgICAjIENPTE9SVEVSTSBhbmQgVVNFX0FOU0lfQ09MT1JTIGVudmlyb25tZW50IHZhcmlhYmxlcyB0YWtlCi0gICAgICAjIHByZWNlZGVuY2UsIGJlY2F1c2UgbW9zdCB0ZXJtaW5mbyBkYXRhYmFzZXMgbmVnbGVjdCB0byBkZXNjcmliZQotICAgICAgIyB3aGV0aGVyIGNvbG9yIHNlcXVlbmNlcyBhcmUgc3VwcG9ydGVkLgotICAgICAgdGVzdCAtbiAiJHtDT0xPUlRFUk0rc2V0fSIgJiYgOiAke1VTRV9BTlNJX0NPTE9SUz0iMSJ9Ci0KLSAgICAgIGlmIHRlc3QgMSA9ICIkVVNFX0FOU0lfQ09MT1JTIjsgdGhlbgotICAgICAgICAjIFN0YW5kYXJkIEFOU0kgZXNjYXBlIHNlcXVlbmNlcwotICAgICAgICB0Y19yZXNldD0nG1swbScKLSAgICAgICAgdGNfYm9sZD0nG1sxbSc7ICAgdGNfc3RhbmRvdXQ9JxtbN20nCi0gICAgICAgIHRjX3JlZD0nG1szMW0nOyAgIHRjX2dyZWVuPScbWzMybScKLSAgICAgICAgdGNfYmx1ZT0nG1szNG0nOyAgdGNfY3lhbj0nG1szNm0nCi0gICAgICBlbHNlCi0gICAgICAgICMgT3RoZXJ3aXNlIHRydXN0IHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBhZnRlciBhbGwuCi0gICAgICAgIHRlc3QgLW4gImB0cHV0IHNncjAgMj4vZGV2L251bGxgIiAmJiB7Ci0gICAgICAgICAgdGNfcmVzZXQ9YHRwdXQgc2dyMGAKLSAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBib2xkIDI+L2Rldi9udWxsYCIgJiYgdGNfYm9sZD1gdHB1dCBib2xkYAotICAgICAgICAgIHRjX3N0YW5kb3V0PSR0Y19ib2xkCi0gICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc21zbyAyPi9kZXYvbnVsbGAiICYmIHRjX3N0YW5kb3V0PWB0cHV0IHNtc29gCi0gICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgMSAyPi9kZXYvbnVsbGAiICYmIHRjX3JlZD1gdHB1dCBzZXRhZiAxYAotICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDIgMj4vZGV2L251bGxgIiAmJiB0Y19ncmVlbj1gdHB1dCBzZXRhZiAyYAotICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDQgMj4vZGV2L251bGxgIiAmJiB0Y19ibHVlPWB0cHV0IHNldGFmIDRgCi0gICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNSAyPi9kZXYvbnVsbGAiICYmIHRjX2N5YW49YHRwdXQgc2V0YWYgNWAKLSAgICAgICAgfQotICAgICAgZmkKLSAgICB9Ci0KLSAgICByZXF1aXJlX3Rlcm1fY29sb3JzPToKLX0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgRnVuY3Rpb24gbGlicmFyeS4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGEgdmFyaWV0eSBvZiB1c2VmdWwgZnVuY3Rpb25zIHRvIGNhbGwgaW4geW91cgotIyBzY3JpcHRzLiBUYWtlIG5vdGUgb2YgdGhlIHBvcnRhYmxlIHdyYXBwZXJzIGZvciBmZWF0dXJlcyBwcm92aWRlZCBieQotIyBzb21lIG1vZGVybiBzaGVsbHMsIHdoaWNoIHdpbGwgZmFsbCBiYWNrIHRvIHNsb3dlciBlcXVpdmFsZW50cyBvbgotIyBsZXNzIGZlYXR1cmVmdWwgc2hlbGxzLgotCi0KLSMgZnVuY19hcHBlbmQgVkFSIFZBTFVFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBcHBlbmQgVkFMVUUgb250byB0aGUgZXhpc3RpbmcgY29udGVudHMgb2YgVkFSLgotCi0gICMgV2Ugc2hvdWxkIHRyeSB0byBtaW5pbWlzZSBmb3JrcywgZXNwZWNpYWxseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXkgYXJlCi0gICMgdW5yZWFzb25hYmx5IHNsb3csIHNvIHNraXAgdGhlIGZlYXR1cmUgcHJvYmVzIHdoZW4gYmFzaCBvciB6c2ggYXJlCi0gICMgYmVpbmcgdXNlZDoKLSAgaWYgdGVzdCBzZXQgPSAiJHtCQVNIX1ZFUlNJT04rc2V0fSR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KLSAgICA6ICR7X0dfSEFWRV9BUklUSF9PUD0ieWVzIn0KLSAgICA6ICR7X0dfSEFWRV9YU0lfT1BTPSJ5ZXMifQotICAgICMgVGhlICs9IG9wZXJhdG9yIHdhcyBpbnRyb2R1Y2VkIGluIGJhc2ggMy4xCi0gICAgY2FzZSAkQkFTSF9WRVJTSU9OIGluCi0gICAgICBbMTJdLiogfCAzLjAgfCAzLjAqKSA7OwotICAgICAgKikKLSAgICAgICAgOiAke19HX0hBVkVfUExVU0VRX09QPSJ5ZXMifQotICAgICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotICAjIF9HX0hBVkVfUExVU0VRX09QCi0gICMgQ2FuIGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzaGVsbCBpcyBwcm9iZWQsICJ5ZXMiIGlmICs9IGlzCi0gICMgdXNlYWJsZSBvciBhbnl0aGluZyBlbHNlIGlmIGl0IGRvZXMgbm90IHdvcmsuCi0gIHRlc3QgLXogIiRfR19IQVZFX1BMVVNFUV9PUCIgXAotICAgICYmIChldmFsICd4PWE7IHgrPSIgYiI7IHRlc3QgImEgYiIgPSAiJHgiJykgMj4vZGV2L251bGwgXAotICAgICYmIF9HX0hBVkVfUExVU0VRX09QPXllcwotCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiCi10aGVuCi0gICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KLSAgZXZhbCAnZnVuY19hcHBlbmQgKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgIiQxKz1cJDIiCi0gIH0nCi1lbHNlCi0gICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCi0gIGZ1bmNfYXBwZW5kICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBldmFsICIkMT1cJCQxXCQyIgotICB9Ci1maQotCi0KLSMgZnVuY19hcHBlbmRfcXVvdGVkIFZBUiBWQUxVRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAotIyBieSBhIHNwYWNlLgotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfUExVU0VRX09QIjsgdGhlbgotICBldmFsICdmdW5jX2FwcGVuZF9xdW90ZWQgKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiQyIgotICAgIGV2YWwgIiQxKz1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICB9JwotZWxzZQotICBmdW5jX2FwcGVuZF9xdW90ZWQgKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiQyIgotICAgIGV2YWwgIiQxPVwkJDFcXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICB9Ci1maQotCi0KLSMgZnVuY19hcHBlbmRfdW5pcSBWQVIgVkFMVUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQXBwZW5kIHVuaXF1ZSBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIsIGFzc3VtaW5nCi0jIGVudHJpZXMgYXJlIGRlbGltaXRlZCBieSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIFZBTFVFLiAgRm9yIGV4YW1wbGU6Ci0jCi0jICAgZnVuY19hcHBlbmRfdW5pcSBvcHRpb25zICIgLS1hbm90aGVyLW9wdGlvbiBvcHRpb24tYXJndW1lbnQiCi0jCi0jIHdpbGwgb25seSBhcHBlbmQgdG8gJG9wdGlvbnMgaWYgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlvbi1hcmd1bWVudCAiCi0jIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgc29tZXdoZXJlIGluICRvcHRpb25zIGFscmVhZHkgKG5vdGUgc3BhY2VzIGF0Ci0jIGVhY2ggZW5kIGltcGxpZWQgYnkgbGVhZGluZyBzcGFjZSBpbiBzZWNvbmQgYXJndW1lbnQpLgotZnVuY19hcHBlbmRfdW5pcSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgX0dfY3VycmVudF92YWx1ZT0nYCRFQ0hPICQnJDEnYCcKLSAgICBfR19kZWxpbT1gZXhwciAiJDIiIDogJ1woLlwpJ2AKLQotICAgIGNhc2UgJF9HX2RlbGltJF9HX2N1cnJlbnRfdmFsdWUkX0dfZGVsaW0gaW4KLSAgICAgICoiJDIkX0dfZGVsaW0iKikgOzsKLSAgICAgICopIGZ1bmNfYXBwZW5kICIkQCIgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBmdW5jX2FyaXRoIFRFUk0uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBmdW5jX2FyaXRoX3Jlc3VsdCB0byB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgVEVSTXMuCi0gIHRlc3QgLXogIiRfR19IQVZFX0FSSVRIX09QIiBcCi0gICAgJiYgKGV2YWwgJ3Rlc3QgMiA9ICQoKCAxICsgMSApKScpIDI+L2Rldi9udWxsIFwKLSAgICAmJiBfR19IQVZFX0FSSVRIX09QPXllcwotCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9BUklUSF9PUCI7IHRoZW4KLSAgZXZhbCAnZnVuY19hcml0aCAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCi0gIH0nCi1lbHNlCi0gIGZ1bmNfYXJpdGggKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCi0gIH0KLWZpCi0KLQotIyBmdW5jX2Jhc2VuYW1lIEZJTEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBmdW5jX2Jhc2VuYW1lX3Jlc3VsdCB0byBGSUxFIHdpdGggZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nCi0jIHRoZSBsYXN0IC8gc3RyaXBwZWQuCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgotICAjIElmIHRoaXMgc2hlbGwgc3VwcG9ydHMgc3VmZml4IHBhdHRlcm4gcmVtb3ZhbCwgdGhlbiB1c2UgaXQgdG8gYXZvaWQKLSAgIyBmb3JraW5nLiBIaWRlIHRoZSBkZWZpbml0aW9ucyBzaW5nbGUgcXVvdGVzIGluIGNhc2UgdGhlIHNoZWxsIGNob2tlcwotICAjIG9uIHVuc3VwcG9ydGVkIHN5bnRheC4uLgotICBfYj0nZnVuY19iYXNlbmFtZV9yZXN1bHQ9JHsxIyMqL30nCi0gIF9kPSdjYXNlICQxIGluCi0gICAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0kezElLyp9JDIgOzsKLSAgICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSQzICAgICAgICA7OwotICAgICAgZXNhYycKLQotZWxzZQotICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgc2VkLgotICBfYj0nZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMSIgfCRTRUQgIiRzZWRfYmFzZW5hbWUiYCcKLSAgX2Q9J2Z1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkMSIgIHwkU0VEICIkc2VkX2Rpcm5hbWUiYAotICAgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJDEiOyB0aGVuCi0gICAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMKLSAgICAgIGVsc2UKLSAgICAgICAgZnVuY19hcHBlbmQgZnVuY19kaXJuYW1lX3Jlc3VsdCAiJDIiCi0gICAgICBmaScKLWZpCi0KLWV2YWwgJ2Z1bmNfYmFzZW5hbWUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAnIiRfYiInCi19JwotCi0KLSMgZnVuY19kaXJuYW1lIEZJTEUgQVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCi0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLWV2YWwgJ2Z1bmNfZGlybmFtZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICciJF9kIicKLX0nCi0KLQotIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIEZJTEUgQVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgotIyBjYWxsOgotIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAotIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgotIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0jIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8gdGhlIGZ1bmN0aW9ucyBhYm92ZSBidXQgaW5zdGVhZAotIyBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KLWV2YWwgJ2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAnIiRfYiInCi0gICAgJyIkX2QiJwotfScKLQotCi0jIGZ1bmNfZWNobyBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLgotZnVuY19lY2hvICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfbWVzc2FnZT0kKgotCi0gICAgZnVuY19lY2hvX0lGUz0kSUZTCi0gICAgSUZTPSRubAotICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbwotICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCi0gICAgICAkRUNITyAiJHByb2duYW1lOiAkX0dfbGluZSIKLSAgICBkb25lCi0gICAgSUZTPSRmdW5jX2VjaG9fSUZTCi19Ci0KLQotIyBmdW5jX2VjaG9fYWxsIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgotZnVuY19lY2hvX2FsbCAoKQotewotICAgICRFQ0hPICIkKiIKLX0KLQotCi0jIGZ1bmNfZWNob19pbmZpeF8xIElORklYIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUsIGZvbGxvd2VkIGJ5IElORklYIG9uIHRoZSBmaXJzdCBsaW5lLCB3aXRoIGFueQotIyBhZGRpdGlvbmFsIGxpbmVzIG5vdCBzaG93aW5nIElORklYLgotZnVuY19lY2hvX2luZml4XzEgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycwotCi0gICAgX0dfaW5maXg9JDE7IHNoaWZ0Ci0gICAgX0dfaW5kZW50PSRfR19pbmZpeAotICAgIF9HX3ByZWZpeD0iJHByb2duYW1lOiAkX0dfaW5maXg6ICIKLSAgICBfR19tZXNzYWdlPSQqCi0KLSAgICAjIFN0cmlwIGNvbG9yIGVzY2FwZSBzZXF1ZW5jZXMgYmVmb3JlIGNvdW50aW5nIHByaW50YWJsZSBsZW5ndGgKLSAgICBmb3IgX0dfdGMgaW4gIiR0Y19yZXNldCIgIiR0Y19ib2xkIiAiJHRjX3N0YW5kb3V0IiAiJHRjX3JlZCIgIiR0Y19ncmVlbiIgIiR0Y19ibHVlIiAiJHRjX2N5YW4iCi0gICAgZG8KLSAgICAgIHRlc3QgLW4gIiRfR190YyIgJiYgewotICAgICAgICBfR19lc2NfdGM9YCRFQ0hPICIkX0dfdGMiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAotICAgICAgICBfR19pbmRlbnQ9YCRFQ0hPICIkX0dfaW5kZW50IiB8ICRTRUQgInN8JF9HX2VzY190Y3x8ZyJgCi0gICAgICB9Ci0gICAgZG9uZQotICAgIF9HX2luZGVudD0iJHByb2duYW1lOiAiYGVjaG8gIiRfR19pbmRlbnQiIHwgJFNFRCAnc3wufCB8ZydgIiAgIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwotCi0gICAgZnVuY19lY2hvX2luZml4XzFfSUZTPSRJRlMKLSAgICBJRlM9JG5sCi0gICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCi0gICAgICBJRlM9JGZ1bmNfZWNob19pbmZpeF8xX0lGUwotICAgICAgJEVDSE8gIiRfR19wcmVmaXgkdGNfYm9sZCRfR19saW5lJHRjX3Jlc2V0IiA+JjIKLSAgICAgIF9HX3ByZWZpeD0kX0dfaW5kZW50Ci0gICAgZG9uZQotICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCi19Ci0KLQotIyBmdW5jX2Vycm9yIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgotZnVuY19lcnJvciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCi0KLSAgICBmdW5jX2VjaG9faW5maXhfMSAiICAkdGNfc3RhbmRvdXQke3RjX3JlZH1lcnJvciR0Y19yZXNldCIgIiQqIiA+JjIKLX0KLQotCi0jIGZ1bmNfZmF0YWxfZXJyb3IgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgotZnVuY19mYXRhbF9lcnJvciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfZXJyb3IgIiQqIgotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotfQotCi0KLSMgZnVuY19ncmVwIEVYUFJFU1NJT04gRklMRU5BTUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgotZnVuY19ncmVwICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQotfQotCi0KLSMgZnVuY19sZW4gU1RSSU5HCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19sZW5fcmVzdWx0IHRvIHRoZSBsZW5ndGggb2YgU1RSSU5HLiBTVFJJTkcgbWF5IG5vdAotIyBzdGFydCB3aXRoIGEgaHlwaGVuLgotICB0ZXN0IC16ICIkX0dfSEFWRV9YU0lfT1BTIiBcCi0gICAgJiYgKGV2YWwgJ3g9YS9iL2M7Ci0gICAgICB0ZXN0IDVhYS9iYi9jYyA9ICIkeyN4fSR7eCUlLyp9JHt4JS8qfSR7eCMqL30ke3gjIyovfSInKSAyPi9kZXYvbnVsbCBcCi0gICAgJiYgX0dfSEFWRV9YU0lfT1BTPXllcwotCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgotICBldmFsICdmdW5jX2xlbiAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Ci0gIH0nCi1lbHNlCi0gIGZ1bmNfbGVuICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCi0gIH0KLWZpCi0KLQotIyBmdW5jX21rZGlyX3AgRElSRUNUT1JZLVBBVEgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgotZnVuY19ta2Rpcl9wICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfZGlyZWN0b3J5X3BhdGg9JDEKLSAgICBfR19kaXJfbGlzdD0KLQotICAgIGlmIHRlc3QgLW4gIiRfR19kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCA6ICE9ICIkb3B0X2RyeV9ydW4iOyB0aGVuCi0KLSAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCAnLScKLSAgICAgIGNhc2UgJF9HX2RpcmVjdG9yeV9wYXRoIGluCi0gICAgICAgIC0qKSBfR19kaXJlY3RvcnlfcGF0aD0uLyRfR19kaXJlY3RvcnlfcGF0aCA7OwotICAgICAgZXNhYwotCi0gICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCi0gICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCI7IGRvCi0gICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAotCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KLSAgICAgICAgX0dfZGlyX2xpc3Q9JF9HX2RpcmVjdG9yeV9wYXRoOiRfR19kaXJfbGlzdAotCi0gICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKLSAgICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCi0KLSAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCi0gICAgICAgIF9HX2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRzZWRfZGlybmFtZSJgCi0gICAgICBkb25lCi0gICAgICBfR19kaXJfbGlzdD1gJEVDSE8gIiRfR19kaXJfbGlzdCIgfCAkU0VEICdzfDoqJHx8J2AKLQotICAgICAgZnVuY19ta2Rpcl9wX0lGUz0kSUZTOyBJRlM9OgotICAgICAgZm9yIF9HX2RpciBpbiAkX0dfZGlyX2xpc3Q7IGRvCi0JSUZTPSRmdW5jX21rZGlyX3BfSUZTCi0gICAgICAgICMgbWtkaXIgY2FuIGZhaWwgd2l0aCBhICdGaWxlIGV4aXN0JyBlcnJvciBpZiB0d28gcHJvY2Vzc2VzCi0gICAgICAgICMgdHJ5IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbmN1cnJlbnRseS4gIERvbid0Ci0gICAgICAgICMgc3RvcCBpbiB0aGF0IGNhc2UhCi0gICAgICAgICRNS0RJUiAiJF9HX2RpciIgMj4vZGV2L251bGwgfHwgOgotICAgICAgZG9uZQotICAgICAgSUZTPSRmdW5jX21rZGlyX3BfSUZTCi0KLSAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KLSAgICAgIHRlc3QgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCIgfHwgXAotICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlICckMSciCi0gICAgZmkKLX0KLQotCi0jIGZ1bmNfbWt0ZW1wZGlyIFtCQVNFTkFNRV0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZwotIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgotIyBnaXZlbiwgQkFTRU5BTUUgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KLWZ1bmNfbWt0ZW1wZGlyICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfdGVtcGxhdGU9JHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0KLQotICAgIGlmIHRlc3QgOiA9ICIkb3B0X2RyeV9ydW4iOyB0aGVuCi0gICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQotICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0kJAotICAgIGVsc2UKLQotICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAotICAgICAgX0dfdG1wZGlyPWBta3RlbXAgLWQgIiRfR190ZW1wbGF0ZS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCi0KLSAgICAgIGlmIHRlc3QgISAtZCAiJF9HX3RtcGRpciI7IHRoZW4KLSAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCi0gICAgICAgIF9HX3RtcGRpcj0kX0dfdGVtcGxhdGUtJHtSQU5ET00tMH0kJAotCi0gICAgICAgIGZ1bmNfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKLSAgICAgICAgdW1hc2sgMDA3NwotICAgICAgICAkTUtESVIgIiRfR190bXBkaXIiCi0gICAgICAgIHVtYXNrICRmdW5jX21rdGVtcGRpcl91bWFzawotICAgICAgZmkKLQotICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCi0gICAgICB0ZXN0IC1kICIkX0dfdG1wZGlyIiB8fCBcCi0gICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSAnJF9HX3RtcGRpciciCi0gICAgZmkKLQotICAgICRFQ0hPICIkX0dfdG1wZGlyIgotfQotCi0KLSMgZnVuY19ub3JtYWxfYWJzcGF0aCBQQVRICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKLSMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCi0jIGl0IGFuIGFic29sdXRlIHBhdGguCi1mdW5jX25vcm1hbF9hYnNwYXRoICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgotICAgIF9HX3BhdGhjYXI9J3N8Xi9cKFteL10qXCkuKiR8XDF8JwotICAgIF9HX3BhdGhjZHI9J3N8Xi9bXi9dKnx8JwotICAgIF9HX3JlbW92ZWRvdHBhcnRzPSc6ZG90c2wKLQkJc3wvXC4vfC98ZwotCQl0IGRvdHNsCi0JCXN8L1wuJHwvfCcKLSAgICBfR19jb2xsYXBzZXNsYXNoZXM9J3N8L1x7MSxcfXwvfGcnCi0gICAgX0dfZmluYWxzbGFzaD0nc3wvKiR8L3wnCi0KLSAgICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCi0gICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9Ci0gICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQotICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KLSAgICAgICIiKQotICAgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgotICAgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgICAgIHJldHVybgotICAgICAgICA7OwotICAgICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5Ci0gICAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOwotICAgICAgIyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBjYXNlJ3MgZmlyc3QtbWF0Y2ggYmVoYXZpb3VyLgotICAgICAgLy8vKikKLSAgICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KLSAgICAgICAgOzsKLSAgICAgIC8vKikKLSAgICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCi0gICAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKLSAgICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCi0gICAgICAgIDs7Ci0gICAgICAvKikKLSAgICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCi0gICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YHB3ZGAvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgKLSAgICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50Ci0gICAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQotICAgICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCi0gICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAgIC1lICIkX0dfcmVtb3ZlZG90cGFydHMiIC1lICIkX0dfY29sbGFwc2VzbGFzaGVzIiAtZSAiJF9HX2ZpbmFsc2xhc2giYAotICAgIHdoaWxlIDo7IGRvCi0gICAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PwotICAgICAgaWYgdGVzdCAvID0gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIjsgdGhlbgotICAgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgotICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiOyB0aGVuCi0gICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LwotICAgICAgICBmaQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAgIC1lICIkX0dfcGF0aGNhciJgCi0gICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCi0gICAgICAgICAgLWUgIiRfR19wYXRoY2RyImAKLSAgICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKLSAgICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgotICAgICAgICAiIikKLSAgICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCi0gICAgICAgICAgOzsKLSAgICAgICAgLi4pCi0gICAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCi0gICAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCi0gICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLSAgICAgICAgICA7OwotICAgICAgICAqKQotICAgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCi0gICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQgIi8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotICAgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotfQotCi0KLSMgZnVuY19ub3RxdWlldCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBvbmx5IHdoZW4gbm90IGluIHF1aWV0IG1vZGUuCi1mdW5jX25vdHF1aWV0ICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJG9wdF9xdWlldCB8fCBmdW5jX2VjaG8gJHsxKyIkQCJ9Ci0KLSAgICAjIEEgYnVnIGluIGJhc2ggaGFsdHMgdGhlIHNjcmlwdCBpZiB0aGUgbGFzdCBsaW5lIG9mIGEgZnVuY3Rpb24KLSAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bwotICAgICMgd29yayBhcm91bmQgdGhhdDoKLSAgICA6Ci19Ci0KLQotIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCB0byB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIuCi1mdW5jX3JlbGF0aXZlX3BhdGggKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PQotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQyIgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotCi0gICAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKLSAgICB3aGlsZSA6OyBkbwotICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgotICAgICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KLSAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQotICAgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KLSAgICAgICAgICBicmVhawotICAgICAgICAgIDs7Ci0gICAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCi0gICAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAotICAgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgotICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCi0gICAgICAgICAgZmkKLSAgICAgICAgICBicmVhawotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0gICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIjsgdGhlbgotICAgICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCi0gICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0Ci0gICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgZmkKLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0Ci0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCi0gICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKLSAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCi0gICAgaWYgdGVzdCAtbiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KLSAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQgIi8kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotICAgIGZpCi0KLSAgICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiAnLicgZWxzZSByZWxhdGl2ZSBwYXRoLgotICAgIGlmIHRlc3QgLW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgotICAgICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCi0gICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmaQotCi0gICAgdGVzdCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiIHx8IGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgotCi0gICAgOgotfQotCi0KLSMgZnVuY19xdW90ZV9mb3JfZXZhbCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWVzdGhldGljYWxseSBxdW90ZSBBUkdzIHRvIGJlIGV2YWxlZCBsYXRlci4KLSMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6Ci0jICAgaSkgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLSMgICAgICBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwKLSMgIGlpKSBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAotIyAgICAgIGhhcyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZQotIyAgICAgIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KLWZ1bmNfcXVvdGVfZm9yX2V2YWwgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0KLSAgICB3aGlsZSB0ZXN0IDAgLWx0ICQjOyBkbwotICAgICAgY2FzZSAkMSBpbgotICAgICAgICAqW1xcXGBcIlwkXSopCi0JICBfR191bnF1b3RlZF9hcmc9YHByaW50ZiAnJXNcbicgIiQxIiB8JFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgX0dfdW5xdW90ZWRfYXJnPSQxIDs7Ci0gICAgICBlc2FjCi0gICAgICBpZiB0ZXN0IC1uICIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiOyB0aGVuCi0JZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgIiAkX0dfdW5xdW90ZWRfYXJnIgotICAgICAgZWxzZQotICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCAiJF9HX3VucXVvdGVkX2FyZyIKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgJF9HX3VucXVvdGVkX2FyZyBpbgotICAgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKLSAgICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIHZhcmlhYmxlIGV4cGFuc2lvbgotICAgICAgICAjIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KLSAgICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKLSAgICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KLSAgICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0gICAgICAgICAgX0dfcXVvdGVkX2FyZz1cIiRfR191bnF1b3RlZF9hcmdcIgotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgX0dfcXVvdGVkX2FyZz0kX0dfdW5xdW90ZWRfYXJnCi0JICA7OwotICAgICAgZXNhYwotCi0gICAgICBpZiB0ZXN0IC1uICIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiOyB0aGVuCi0JZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIiAkX0dfcXVvdGVkX2FyZyIKLSAgICAgIGVsc2UKLSAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIiRfR19xdW90ZWRfYXJnIgotICAgICAgZmkKLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotfQotCi0KLSMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIEFSRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKLSMgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgotZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSAkMSBpbgotICAgICAgKltcXFxgXCJdKikKLQlfR19hcmc9YCRFQ0hPICIkMSIgfCAkU0VEIFwKLQkgICAgLWUgIiRzZWRfZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKLSAgICAgICopCi0gICAgICAgIF9HX2FyZz0kMSA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJF9HX2FyZyBpbgotICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5Ci0gICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCi0gICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQotICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgICBfR19hcmc9XCIkX0dfYXJnXCIKLSAgICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSRfR19hcmcKLX0KLQotCi0jIGZ1bmNfc3RyaXBuYW1lIFBSRUZJWCBTVUZGSVggTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggZnJvbSBOQU1FLCBhbmQgc3RvcmUgaW4gZnVuY19zdHJpcG5hbWVfcmVzdWx0LgotIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KLSAgZXZhbCAnZnVuY19zdHJpcG5hbWUgKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLSAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSB2YXJpYWJsZSBmaXJzdC4KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JDMKLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiQxIn0KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiQyIn0KLSAgfScKLWVsc2UKLSAgZnVuY19zdHJpcG5hbWUgKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGNhc2UgJDIgaW4KLSAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEIC1lICJzJV4kMSUlIiAtZSAicyVcXFxcJDJcJCUlImA7OwotICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJSQyXCQlJSJgOzsKLSAgICBlc2FjCi0gIH0KLWZpCi0KLQotIyBmdW5jX3Nob3dfZXZhbCBDTUQgW0ZBSUxfRVhQXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBVbmxlc3Mgb3B0X3F1aWV0IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKLSMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCi0jIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgotZnVuY19zaG93X2V2YWwgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR19jbWQ9JDEKLSAgICBfR19mYWlsX2V4cD0kezItJzonfQotCi0gICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkX0dfY21kIgotICAgIGV2YWwgImZ1bmNfbm90cXVpZXQgJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCi0KLSAgICAkb3B0X2RyeV9ydW4gfHwgewotICAgICAgZXZhbCAiJF9HX2NtZCIKLSAgICAgIF9HX3N0YXR1cz0kPwotICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KLQlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgotICAgICAgZmkKLSAgICB9Ci19Ci0KLQotIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgQ01EIFtGQUlMX0VYUF0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcwotIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKLSMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KLWZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX2NtZD0kMQotICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9Ci0KLSAgICAkb3B0X3F1aWV0IHx8IHsKLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJF9HX2NtZCIKLSAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKLSAgICB9Ci0KLSAgICAkb3B0X2RyeV9ydW4gfHwgewotICAgICAgZXZhbCAiJF9HX3VzZXJfbG9jYWxlCi0JICAgICRfR19jbWQiCi0gICAgICBfR19zdGF0dXM9JD8KLSAgICAgIGV2YWwgIiRfR19zYWZlX2xvY2FsZSIKLSAgICAgIGlmIHRlc3QgMCAtbmUgIiRfR19zdGF0dXMiOyB0aGVuCi0JZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKLSAgICAgIGZpCi0gICAgfQotfQotCi0KLSMgZnVuY190cl9zaAotIyAtLS0tLS0tLS0tCi0jIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgotIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCi0jIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAotIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KLWZ1bmNfdHJfc2ggKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlICQxIGluCi0gICAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQotICAgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEIC1lICdzL15cKFswLTldXCkvX1wxLycgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnYAotICAgICAgOzsKLSAgICAqICkKLSAgICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCi0gICAgICA7OwotICAgIGVzYWMKLX0KLQotCi0jIGZ1bmNfdmVyYm9zZSBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgotZnVuY192ZXJib3NlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAiJCoiCi0KLSAgICA6Ci19Ci0KLQotIyBmdW5jX3dhcm5fYW5kX2NvbnRpbnVlIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCi1mdW5jX3dhcm5fYW5kX2NvbnRpbnVlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKLQotICAgIGZ1bmNfZWNob19pbmZpeF8xICIke3RjX3JlZH13YXJuaW5nJHRjX3Jlc2V0IiAiJCoiID4mMgotfQotCi0KLSMgZnVuY193YXJuaW5nIENBVEVHT1JZIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4gV2FybmluZwotIyBtZXNzYWdlcyBjYW4gYmUgZmlsdGVyZWQgYWNjb3JkaW5nIHRvIENBVEVHT1JZLCB3aGVyZSB0aGlzIGZ1bmN0aW9uCi0jIGVsaWRlcyBtZXNzYWdlcyB3aGVyZSBDQVRFR09SWSBpcyBub3QgbGlzdGVkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUKLSMgJ29wdF93YXJuaW5nX3R5cGVzJy4KLWZ1bmNfd2FybmluZyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgQ0FURUdPUlkgbXVzdCBiZSBpbiB0aGUgd2FybmluZ19jYXRlZ29yaWVzIGxpc3QhCi0gICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgIiBpbgotICAgICAgKiIgJDEgIiopIDs7Ci0gICAgICAqKSBmdW5jX2ludGVybmFsX2Vycm9yICJpbnZhbGlkIHdhcm5pbmcgY2F0ZWdvcnkgJyQxJyIgOzsKLSAgICBlc2FjCi0KLSAgICBfR19jYXRlZ29yeT0kMQotICAgIHNoaWZ0Ci0KLSAgICBjYXNlICIgJG9wdF93YXJuaW5nX3R5cGVzICIgaW4KLSAgICAgICoiICRfR19jYXRlZ29yeSAiKikgJHdhcm5pbmdfZnVuYyAkezErIiRAIn0gOzsKLSAgICBlc2FjCi19Ci0KLQotIyBmdW5jX3NvcnRfdmVyIFZFUjEgVkVSMgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAnc29ydCAtVicgaXMgbm90IGdlbmVyYWxseSBhdmFpbGFibGUuCi0jIE5vdGUgdGhpcyBkZXZpYXRlcyBmcm9tIHRoZSB2ZXJzaW9uIGNvbXBhcmlzb24gaW4gYXV0b21ha2UKLSMgaW4gdGhhdCBpdCB0cmVhdHMgMS41IDwgMS41LjAsIGFuZCB0cmVhdHMgMS40LjRhIDwgMS40LXAzYQotIyBidXQgdGhpcyBzaG91bGQgc3VmZmljZSBhcyB3ZSB3b24ndCBiZSBzcGVjaWZ5aW5nIG9sZAotIyB2ZXJzaW9uIGZvcm1hdHMgb3IgcmVkdW5kYW50IHRyYWlsaW5nIC4wIGluIGJvb3RzdHJhcC5jb25mLgotIyBJZiB3ZSBkaWQgd2FudCBmdWxsIGNvbXBhdGliaWxpdHkgdGhlbiB3ZSBzaG91bGQgcHJvYmFibHkKLSMgdXNlIG00X3ZlcnNpb25fY29tcGFyZSBmcm9tIGF1dG9jb25mLgotZnVuY19zb3J0X3ZlciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHByaW50ZiAnJXNcbiVzXG4nICIkMSIgIiQyIiBcCi0gICAgICB8IHNvcnQgLXQuIC1rIDEsMW4gLWsgMiwybiAtayAzLDNuIC1rIDQsNG4gLWsgNSw1biAtayA2LDZuIC1rIDcsN24gLWsgOCw4biAtayA5LDluCi19Ci0KLSMgZnVuY19sdF92ZXIgUFJFViBDVVJSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXR1cm4gdHJ1ZSBpZiBQUkVWIGFuZCBDVVJSIGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlciBhY2NvcmRpbmcgdG8KLSMgZnVuY19zb3J0X3Zlciwgb3RoZXJ3aXNlIGZhbHNlLiAgVXNlIGl0IGxpa2UgdGhpczoKLSMKLSMgIGZ1bmNfbHRfdmVyICIkcHJldl92ZXIiICIkcHJvcG9zZWRfdmVyIiB8fCBmdW5jX2ZhdGFsX2Vycm9yICIuLi4iCi1mdW5jX2x0X3ZlciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHRlc3QgIngkMSIgPSB4YGZ1bmNfc29ydF92ZXIgIiQxIiAiJDIiIHwgJFNFRCAxcWAKLX0KLQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgbW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0jIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgRW5kOgotIyEgL2Jpbi9zaAotCi0jIFNldCBhIHZlcnNpb24gc3RyaW5nIGZvciB0aGlzIHNjcmlwdC4KLXNjcmlwdHZlcnNpb249MjAxNC0wMS0wNy4wMzsgIyBVVEMKLQotIyBBIHBvcnRhYmxlLCBwbHVnZ2FibGUgb3B0aW9uIHBhcnNlciBmb3IgQm91cm5lIHNoZWxsLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAxMAotCi0jIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0KLSMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0byBnYXJ5QGdudS5vcmcuCi0KLQotIyMgLS0tLS0tICMjCi0jIyBVc2FnZS4gIyMKLSMjIC0tLS0tLSAjIwotCi0jIFRoaXMgZmlsZSBpcyBhIGxpYnJhcnkgZm9yIHBhcnNpbmcgb3B0aW9ucyBpbiB5b3VyIHNoZWxsIHNjcmlwdHMgYWxvbmcKLSMgd2l0aCBhc3NvcnRlZCBvdGhlciB1c2VmdWwgc3VwcG9ydGluZyBmZWF0dXJlcyB0aGF0IHlvdSBjYW4gbWFrZSB1c2UKLSMgb2YgdG9vLgotIwotIyBGb3IgdGhlIHNpbXBsZXN0IHNjcmlwdHMgeW91IG1pZ2h0IG5lZWQgb25seToKLSMKLSMgICAjIS9iaW4vc2gKLSMgICAuIHJlbGF0aXZlL3BhdGgvdG8vZnVuY2xpYi5zaAotIyAgIC4gcmVsYXRpdmUvcGF0aC90by9vcHRpb25zLXBhcnNlcgotIyAgIHNjcmlwdHZlcnNpb249MS4wCi0jICAgZnVuY19vcHRpb25zICR7MSsiJEAifQotIyAgIGV2YWwgc2V0IGR1bW15ICIkZnVuY19vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0Ci0jICAgLi4ucmVzdCBvZiB5b3VyIHNjcmlwdC4uLgotIwotIyBJbiBvcmRlciBmb3IgdGhlICctLXZlcnNpb24nIG9wdGlvbiB0byB3b3JrLCB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgYQotIyBzdWl0YWJseSBmb3JtYXR0ZWQgY29tbWVudCBsaWtlIHRoZSBvbmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUKLSMgc3RhcnRpbmcgd2l0aCAnIyBXcml0dGVuIGJ5ICcgYW5kIGVuZGluZyB3aXRoICcjIHdhcnJhbnR5OyAnLgotIwotIyBGb3IgJy1oJyBhbmQgJy0taGVscCcgdG8gd29yaywgeW91IHdpbGwgYWxzbyBuZWVkIGEgb25lIGxpbmUKLSMgZGVzY3JpcHRpb24gb2YgeW91ciBzY3JpcHQncyBwdXJwb3NlIGluIGEgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGUKLSMgJyMgV3JpdHRlbiBieSAnIGxpbmUsIGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KLSMKLSMgVGhlIGRlZmF1bHQgb3B0aW9ucyBhbHNvIHN1cHBvcnQgJy0tZGVidWcnLCB3aGljaCB3aWxsIHR1cm4gb24gc2hlbGwKLSMgZXhlY3V0aW9uIHRyYWNpbmcgKHNlZSB0aGUgY29tbWVudCBhYm92ZSBkZWJ1Z19jbWQgYmVsb3cgZm9yIGFub3RoZXIKLSMgdXNlKSwgYW5kICctLXZlcmJvc2UnIGFuZCB0aGUgZnVuY192ZXJib3NlIGZ1bmN0aW9uIHRvIGFsbG93IHlvdXIgc2NyaXB0Ci0jIHRvIGRpc3BsYXkgdmVyYm9zZSBtZXNzYWdlcyBvbmx5IHdoZW4geW91ciB1c2VyIGhhcyBzcGVjaWZpZWQKLSMgJy0tdmVyYm9zZScuCi0jCi0jIEFmdGVyIHNvdXJjaW5nIHRoaXMgZmlsZSwgeW91IGNhbiBwbHVnIHByb2Nlc3NpbmcgZm9yIGFkZGl0aW9uYWwKLSMgb3B0aW9ucyBieSBhbWVuZGluZyB0aGUgdmFyaWFibGVzIGZyb20gdGhlICdDb25maWd1cmF0aW9uJyBzZWN0aW9uCi0jIGJlbG93LCBhbmQgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlICdPcHRpb24gcGFyc2luZycKLSMgc2VjdGlvbiBmdXJ0aGVyIGRvd24uCi0KLSMjIC0tLS0tLS0tLS0tLS0tICMjCi0jIyBDb25maWd1cmF0aW9uLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBZb3Ugc2hvdWxkIG92ZXJyaWRlIHRoZXNlIHZhcmlhYmxlcyBpbiB5b3VyIHNjcmlwdCBhZnRlciBzb3VyY2luZyB0aGlzCi0jIGZpbGUgc28gdGhhdCB0aGV5IHJlZmxlY3QgdGhlIGN1c3RvbWlzYXRpb25zIHlvdSBoYXZlIGFkZGVkIHRvIHRoZQotIyBvcHRpb24gcGFyc2VyLgotCi0jIFRoZSB1c2FnZSBsaW5lIGZvciBvcHRpb24gcGFyc2luZyBlcnJvcnMgYW5kIHRoZSBzdGFydCBvZiAnLWgnIGFuZAotIyAnLS1oZWxwJyBvdXRwdXQgbWVzc2FnZXMuIFlvdSBjYW4gZW1iZWQgc2hlbGwgdmFyaWFibGVzIGZvciBkZWxheWVkCi0jIGV4cGFuc2lvbiBhdCB0aGUgdGltZSB0aGUgbWVzc2FnZSBpcyBkaXNwbGF5ZWQsIGJ1dCB5b3Ugd2lsbCBuZWVkIHRvCi0jIHF1b3RlIG90aGVyIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBjYXJlZnVsbHkgdG8gcHJldmVudCB0aGVtIGJlaW5nCi0jIGV4cGFuZGVkIHdoZW4gdGhlIGNvbnRlbnRzIGFyZSBldmFsZWQuCi11c2FnZT0nJHByb2dwYXRoIFtPUFRJT05dLi4uJwotCi0jIFNob3J0IGhlbHAgbWVzc2FnZSBpbiByZXNwb25zZSB0byAnLWgnIGFuZCAnLS1oZWxwJy4gIEFkZCB0byB0aGlzIG9yCi0jIG92ZXJyaWRlIGl0IGFmdGVyIHNvdXJjaW5nIHRoaXMgbGlicmFyeSB0byByZWZsZWN0IHRoZSBmdWxsIHNldCBvZgotIyBvcHRpb25zIHlvdXIgc2NyaXB0IGFjY2VwdHMuCi11c2FnZV9tZXNzYWdlPSJcCi0gICAgICAgLS1kZWJ1ZyAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZwotICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkKLSAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW2FsbF0KLSAgIC12LCAtLXZlcmJvc2UgICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKLSAgICAgICAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgc2hvcnQgb3IgbG9uZyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSIKLQotIyBBZGRpdGlvbmFsIHRleHQgYXBwZW5kZWQgdG8gJ3VzYWdlX21lc3NhZ2UnIGluIHJlc3BvbnNlIHRvICctLWhlbHAnLgotbG9uZ19oZWxwX21lc3NhZ2U9IgotV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6Ci0gICAgICAgJ2FsbCcgICAgICAgICAgc2hvdyBhbGwgd2FybmluZ3MKLSAgICAgICAnbm9uZScgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzCi0gICAgICAgJ2Vycm9yJyAgICAgICAgd2FybmluZ3MgYXJlIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3JzIgotCi0jIEhlbHAgbWVzc2FnZSBwcmludGVkIGJlZm9yZSBmYXRhbCBvcHRpb24gcGFyc2luZyBlcnJvcnMuCi1mYXRhbF9oZWxwPSJUcnkgJ1wkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBIb29rIGZ1bmN0aW9uIG1hbmFnZW1lbnQuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgYWRkaW5nLCByZW1vdmluZywgYW5kIHJ1bm5pbmcgaG9va3MKLSMgdG8gdGhlIG1haW4gY29kZS4gIEEgaG9vayBpcyBqdXN0IGEgbmFtZWQgbGlzdCBvZiBvZiBmdW5jdGlvbiwgdGhhdCBjYW4KLSMgYmUgcnVuIGluIG9yZGVyIGxhdGVyIG9uLgotCi0jIGZ1bmNfaG9va2FibGUgRlVOQ19OQU1FCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIERlY2xhcmUgdGhhdCBGVU5DX05BTUUgd2lsbCBydW4gaG9va3MgYWRkZWQgd2l0aAotIyAnZnVuY19hZGRfaG9vayBGVU5DX05BTUUgLi4uJy4KLWZ1bmNfaG9va2FibGUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2FwcGVuZCBob29rYWJsZV9mbnMgIiAkMSIKLX0KLQotCi0jIGZ1bmNfYWRkX2hvb2sgRlVOQ19OQU1FIEhPT0tfRlVOQwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVxdWVzdCB0aGF0IEZVTkNfTkFNRSBjYWxsIEhPT0tfRlVOQyBiZWZvcmUgaXQgcmV0dXJucy4gIEZVTkNfTkFNRSBtdXN0Ci0jIGZpcnN0IGhhdmUgYmVlbiBkZWNsYXJlZCAiaG9va2FibGUiIGJ5IGEgY2FsbCB0byAnZnVuY19ob29rYWJsZScuCi1mdW5jX2FkZF9ob29rICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSAiICRob29rYWJsZV9mbnMgIiBpbgotICAgICAgKiIgJDEgIiopIDs7Ci0gICAgICAqKSBmdW5jX2ZhdGFsX2Vycm9yICInJDEnIGRvZXMgbm90IGFjY2VwdCBob29rIGZ1bmN0aW9ucy4iIDs7Ci0gICAgZXNhYwotCi0gICAgZXZhbCBmdW5jX2FwcGVuZCAkezF9X2hvb2tzICciICQyIicKLX0KLQotCi0jIGZ1bmNfcmVtb3ZlX2hvb2sgRlVOQ19OQU1FIEhPT0tfRlVOQwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVtb3ZlIEhPT0tfRlVOQyBmcm9tIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBjYWxsZWQgYnkgRlVOQ19OQU1FLgotZnVuY19yZW1vdmVfaG9vayAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgJHsxfV9ob29rcz0nYCRFQ0hPICJcJCckMSdfaG9va3MiIHwkU0VEICJzfCAnJDInfHwiYCcKLX0KLQotCi0jIGZ1bmNfcnVuX2hvb2tzIEZVTkNfTkFNRSBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIGFsbCBob29rIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHRvIEZVTkNfTkFNRS4KLSMgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsaXN0IG9mIGhvb2sgZnVuY3Rpb25zIGNvbnRhaW5zIG5vdGhpbmcgbW9yZQotIyB0aGFuIGEgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBsZWdhbCBzaGVsbCBmdW5jdGlvbiBuYW1lcywgYW5kCi0jIG5vIGVmZm9ydCBpcyB3YXN0ZWQgdHJ5aW5nIHRvIGNhdGNoIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBvciBwcmVzZXJ2ZQotIyB3aGl0ZXNwYWNlLgotZnVuY19ydW5faG9va3MgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCi0gICAgICAqIiAkMSAiKikgOzsKLSAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3Qgc3VwcG9ydCBob29rIGZ1bmNpb25zLm4iIDs7Ci0gICAgZXNhYwotCi0gICAgZXZhbCBfR19ob29rX2Zucz1cJCQxX2hvb2tzOyBzaGlmdAotCi0gICAgZm9yIF9HX2hvb2sgaW4gJF9HX2hvb2tfZm5zOyBkbwotICAgICAgZXZhbCAkX0dfaG9vayAnIiRAIicKLQotICAgICAgIyBzdG9yZSByZXR1cm5lZCBvcHRpb25zIGxpc3QgYmFjayBpbnRvIHBvc2l0aW9uYWwKLSAgICAgICMgcGFyYW1ldGVycyBmb3IgbmV4dCAnY21kJyBleGVjdXRpb24uCi0gICAgICBldmFsIF9HX2hvb2tfcmVzdWx0PVwkJHtfR19ob29rfV9yZXN1bHQKLSAgICAgIGV2YWwgc2V0IGR1bW15ICIkX0dfaG9va19yZXN1bHQiOyBzaGlmdAotICAgIGRvbmUKLQotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0gICAgZnVuY19ydW5faG9va3NfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotfQotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBPcHRpb24gcGFyc2luZy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIEluIG9yZGVyIHRvIGFkZCB5b3VyIG93biBvcHRpb24gcGFyc2luZyBob29rcywgeW91IG11c3QgYWNjZXB0IHRoZQotIyBmdWxsIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGxpc3QgaW4geW91ciBob29rIGZ1bmN0aW9uLCByZW1vdmUgYW55Ci0jIG9wdGlvbnMgdGhhdCB5b3UgYWN0aW9uLCBhbmQgdGhlbiBwYXNzIGJhY2sgdGhlIHJlbWFpbmluZyB1bnByb2Nlc3NlZAotIyBvcHRpb25zIGluICc8aG9va2VkX2Z1bmN0aW9uX25hbWU+X3Jlc3VsdCcsIGVzY2FwZWQgc3VpdGFibHkgZm9yCi0jICdldmFsJy4gIExpa2UgdGhpczoKLSMKLSMgICAgbXlfb3B0aW9uc19wcmVwICgpCi0jICAgIHsKLSMgICAgICAgICRkZWJ1Z19jbWQKLSMKLSMgICAgICAgICMgRXh0ZW5kIHRoZSBleGlzdGluZyB1c2FnZSBtZXNzYWdlLgotIyAgICAgICAgdXNhZ2VfbWVzc2FnZT0kdXNhZ2VfbWVzc2FnZScKLSMgICAgICAtcywgLS1zaWxlbnQgICAgICAgZG9uJ1wnJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcwotIyAgICAnCi0jCi0jICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQotIyAgICAgICAgbXlfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLSMgICAgfQotIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIG15X29wdGlvbnNfcHJlcAotIwotIwotIyAgICBteV9zaWxlbnRfb3B0aW9uICgpCi0jICAgIHsKLSMgICAgICAgICRkZWJ1Z19jbWQKLSMKLSMgICAgICAgICMgTm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LCB3ZSBwYXJzZSBhcyBtYW55IG9wdGlvbnMgYXMgd2UgY2FuCi0jICAgICAgICAjIHJlY29nbmlzZSBpbiBhIGxvb3AgYmVmb3JlIHBhc3NpbmcgdGhlIHJlbWFpbmRlciBiYWNrIHRvIHRoZQotIyAgICAgICAgIyBjYWxsZXIgb24gdGhlIGZpcnN0IHVucmVjb2duaXNlZCBhcmd1bWVudCB3ZSBlbmNvdW50ZXIuCi0jICAgICAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbwotIyAgICAgICAgICBvcHQ9JDE7IHNoaWZ0Ci0jICAgICAgICAgIGNhc2UgJG9wdCBpbgotIyAgICAgICAgICAgIC0tc2lsZW50fC1zKSBvcHRfc2lsZW50PTogOzsKLSMgICAgICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgotIyAgICAgICAgICAgIC1zKikgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKLSMgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KLSMgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSMgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSMgICAgICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgIiQqIjsgc2hpZnQ7IGJyZWFrIDs7Ci0jICAgICAgICAgIGVzYWMKLSMgICAgICAgIGRvbmUKLSMKLSMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0jICAgICAgICBteV9zaWxlbnRfb3B0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLSMgICAgfQotIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBteV9zaWxlbnRfb3B0aW9uCi0jCi0jCi0jICAgIG15X29wdGlvbl92YWxpZGF0aW9uICgpCi0jICAgIHsKLSMgICAgICAgICRkZWJ1Z19jbWQKLSMKLSMgICAgICAgICRvcHRfc2lsZW50ICYmICRvcHRfdmVyYm9zZSAmJiBmdW5jX2ZhdGFsX2hlbHAgIlwKLSMgICAgJy0tc2lsZW50JyBhbmQgJy0tdmVyYm9zZScgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKLSMKLSMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0jICAgICAgICBteV9vcHRpb25fdmFsaWRhdGlvbl9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0jICAgIH0KLSMgICAgZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbXlfb3B0aW9uX3ZhbGlkYXRpb24KLSMKLSMgWW91J2xsIGFsc2UgbmVlZCB0byBtYW51YWxseSBhbWVuZCAkdXNhZ2VfbWVzc2FnZSB0byByZWZsZWN0IHRoZSBleHRyYQotIyBvcHRpb25zIHlvdSBwYXJzZS4gIEl0J3MgcHJlZmVyYWJsZSB0byBhcHBlbmQgaWYgeW91IGNhbiwgc28gdGhhdAotIyBtdWx0aXBsZSBvcHRpb24gcGFyc2luZyBob29rcyBjYW4gYmUgYWRkZWQgc2FmZWx5LgotCi0KLSMgZnVuY19vcHRpb25zIFtBUkddLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBbGwgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgaW5zaWRlIGZ1bmNfb3B0aW9ucyBhcmUgaG9va2FibGUuIFNlZSB0aGUKLSMgaW5kaXZpZHVhbCBpbXBsZW1lbnRhdGlvbnMgZm9yIGRldGFpbHMuCi1mdW5jX2hvb2thYmxlIGZ1bmNfb3B0aW9ucwotZnVuY19vcHRpb25zICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9Ci0gICAgZXZhbCBmdW5jX3BhcnNlX29wdGlvbnMgXAotICAgICAgICAke2Z1bmNfb3B0aW9uc19wcmVwX3Jlc3VsdCsiJGZ1bmNfb3B0aW9uc19wcmVwX3Jlc3VsdCJ9Ci0gICAgZXZhbCBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgXAotICAgICAgICAke2Z1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQrIiRmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0In0KLQotICAgIGV2YWwgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zIFwKLSAgICAgICAgJHtmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0KyIkZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdCJ9Ci0KLSAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKLSAgICBmdW5jX29wdGlvbnNfcmVzdWx0PSRmdW5jX3J1bl9ob29rc19yZXN1bHQKLX0KLQotCi0jIGZ1bmNfb3B0aW9uc19wcmVwIFtBUkddLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFsbCBpbml0aWFsaXNhdGlvbnMgcmVxdWlyZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBvcHRpb24gcGFyc2UgbG9vcC4KLSMgTm90ZSB0aGF0IHdoZW4gY2FsbGluZyBob29rIGZ1bmN0aW9ucywgd2UgcGFzcyB0aHJvdWdoIHRoZSBsaXN0IG9mCi0jIHBvc2l0aW9uYWwgcGFyYW1ldGVycy4gIElmIGEgaG9vayBmdW5jdGlvbiBtb2RpZmllcyB0aGF0IGxpc3QsIGFuZAotIyBuZWVkcyB0byBwcm9wb2dhdGUgdGhhdCBiYWNrIHRvIHJlc3Qgb2YgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIGNvbXBsZXRlCi0jIG1vZGlmaWVkIGxpc3QgbXVzdCBiZSBwdXQgaW4gJ2Z1bmNfcnVuX2hvb2tzX3Jlc3VsdCcgYmVmb3JlCi0jIHJldHVybmluZy4KLWZ1bmNfaG9va2FibGUgZnVuY19vcHRpb25zX3ByZXAKLWZ1bmNfb3B0aW9uc19wcmVwICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBPcHRpb24gZGVmYXVsdHM6Ci0gICAgb3B0X3ZlcmJvc2U9ZmFsc2UKLSAgICBvcHRfd2FybmluZ190eXBlcz0KLQotICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfb3B0aW9uc19wcmVwICR7MSsiJEAifQotCi0gICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCi0gICAgZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3J1bl9ob29rc19yZXN1bHQKLX0KLQotCi0jIGZ1bmNfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhlIG1haW4gb3B0aW9uIHBhcnNpbmcgbG9vcC4KLWZ1bmNfaG9va2FibGUgZnVuY19wYXJzZV9vcHRpb25zCi1mdW5jX3BhcnNlX29wdGlvbnMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0PQotCi0gICAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZwotICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgICAjIERlZmVyIHRvIGhvb2sgZnVuY3Rpb25zIGZvciBpbml0aWFsIG9wdGlvbiBwYXJzaW5nLCBzbyB0aGV5Ci0gICAgICAjIGdldCBwcmlvcml0eSBpbiB0aGUgZXZlbnQgb2YgcmV1c2luZyBhbiBvcHRpb24gbmFtZS4KLSAgICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfcGFyc2Vfb3B0aW9ucyAkezErIiRAIn0KLQotICAgICAgIyBBZGp1c3QgZnVuY19wYXJzZV9vcHRpb25zIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBtYXRjaAotICAgICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX3J1bl9ob29rc19yZXN1bHQiOyBzaGlmdAotCi0gICAgICAjIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBhbHJlYWR5IHBhcnNlZCBldmVyeSBvcHRpb24uCi0gICAgICB0ZXN0ICQjIC1ndCAwIHx8IGJyZWFrCi0KLSAgICAgIF9HX29wdD0kMQotICAgICAgc2hpZnQKLSAgICAgIGNhc2UgJF9HX29wdCBpbgotICAgICAgICAtLWRlYnVnfC14KSAgIGRlYnVnX2NtZD0nc2V0IC14JwotICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKLSAgICAgICAgICAgICAgICAgICAgICAkZGVidWdfY21kCi0gICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLW5vLXdhcm5pbmdzfC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCi0gICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15IC0td2FybmluZ3Mgbm9uZSAkezErIiRAIn0KLSAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotCQkgICAgICA7OwotCi0gICAgICAgIC0td2FybmluZ3N8LS13YXJuaW5nfC1XKQotICAgICAgICAgICAgICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhawotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiAkd2FybmluZ19jYXRlZ29yaWVzICQxIiBpbgotICAgICAgICAgICAgICAgICAgICAgICAgKiIgJDEgIiopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgc3BhY2UgcHJldmVudHMgbWF0Y2hpbmcgbGFzdCAkMSBhYm92ZQotICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZF91bmlxIG9wdF93YXJuaW5nX3R5cGVzICIgJDEiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqbm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9bm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9OgotICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAgKmVycm9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz1mdW5jX2ZhdGFsX2Vycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHdhcm5pbmcgY2F0ZWdvcnk6ICckMSciCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLXZlcmJvc2V8LXYpIG9wdF92ZXJib3NlPTogOzsKLSAgICAgICAgLS12ZXJzaW9uKSAgICBmdW5jX3ZlcnNpb24gOzsKLSAgICAgICAgLVw/fC1oKSAgICAgICBmdW5jX3VzYWdlIDs7Ci0gICAgICAgIC0taGVscCkgICAgICAgZnVuY19oZWxwIDs7Ci0KLQkjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zIChwbHVnaW5zIG1heSBuZWVkIHRoaXMpOgotCS0tKj0qKSAgICAgICAgZnVuY19zcGxpdF9lcXVhbHMgIiRfR19vcHQiCi0JICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2VxdWFsc19saHMiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X2VxdWFsc19yaHMiICR7MSsiJEAifQotICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBzaG9ydCBvcHRpb25zOgotICAgICAgICAtVyopCi0gICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0gICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6Ci0gICAgICAgIC1cPyp8LWgqfC12KnwteCopCi0gICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQotICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLSkgICAgICAgICAgIGJyZWFrIDs7Ci0gICAgICAgIC0qKSAgICAgICAgICAgZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJF9HX29wdCciIDs7Ci0gICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07IHNoaWZ0OyBicmVhayA7OwotICAgICAgZXNhYwotICAgIGRvbmUKLQotICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0gICAgZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLX0KLQotCi0jIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKLSMgYXJndW1lbnRzLgotZnVuY19ob29rYWJsZSBmdW5jX3ZhbGlkYXRlX29wdGlvbnMKLWZ1bmNfdmFsaWRhdGVfb3B0aW9ucyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgRGlzcGxheSBhbGwgd2FybmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZlbi4KLSAgICB0ZXN0IC1uICIkb3B0X3dhcm5pbmdfdHlwZXMiIHx8IG9wdF93YXJuaW5nX3R5cGVzPSIgJHdhcm5pbmdfY2F0ZWdvcmllcyIKLQotICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyAkezErIiRAIn0KLQotICAgICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQhCi0gICAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKLQotICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgotICAgIGZ1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAotfQotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEhlbHBlciBmdW5jdGlvbnMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZQotIyBob29rYWJsZSBvcHRpb24gcGFyc2VyIGZyYW1ld29yayBpbiBhc2NpaS1iZXRpY2FsIG9yZGVyLgotCi0KLSMgZnVuY19mYXRhbF9oZWxwIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5Ci0jIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KLWZ1bmNfZmF0YWxfaGVscCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgXCRFQ0hPIFwiIlVzYWdlOiAkdXNhZ2UiXCIKLSAgICBldmFsIFwkRUNITyBcIiIkZmF0YWxfaGVscCJcIgotICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9Ci0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi19Ci0KLQotIyBmdW5jX2hlbHAKLSMgLS0tLS0tLS0tCi0jIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgotZnVuY19oZWxwICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY191c2FnZV9tZXNzYWdlCi0gICAgJEVDSE8gIiRsb25nX2hlbHBfbWVzc2FnZSIKLSAgICBleGl0IDAKLX0KLQotCi0jIGZ1bmNfbWlzc2luZ19hcmcgQVJHTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAotIyBleGl0X2NtZC4KLWZ1bmNfbWlzc2luZ19hcmcgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2Vycm9yICJNaXNzaW5nIGFyZ3VtZW50IGZvciAnJDEnLiIKLSAgICBleGl0X2NtZD1leGl0Ci19Ci0KLQotIyBmdW5jX3NwbGl0X2VxdWFscyBTVFJJTkcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBmdW5jX3NwbGl0X2VxdWFsc19saHMgYW5kIGZ1bmNfc3BsaXRfZXF1YWxzX3JocyBzaGVsbCB2YXJpYWJsZXMgYWZ0ZXIKLSMgc3BsaXR0aW5nIFNUUklORyBhdCB0aGUgJz0nIHNpZ24uCi10ZXN0IC16ICIkX0dfSEFWRV9YU0lfT1BTIiBcCi0gICAgJiYgKGV2YWwgJ3g9YS9iL2M7Ci0gICAgICB0ZXN0IDVhYS9iYi9jYyA9ICIkeyN4fSR7eCUlLyp9JHt4JS8qfSR7eCMqL30ke3gjIyovfSInKSAyPi9kZXYvbnVsbCBcCi0gICAgJiYgX0dfSEFWRV9YU0lfT1BTPXllcwotCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIgotdGhlbgotICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCi0gIGV2YWwgJ2Z1bmNfc3BsaXRfZXF1YWxzICgpCi0gIHsKLSAgICAgICRkZWJ1Z19jbWQKLQotICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhzPSR7MSUlPSp9Ci0gICAgICBmdW5jX3NwbGl0X2VxdWFsc19yaHM9JHsxIyo9fQotICAgICAgdGVzdCAieCRmdW5jX3NwbGl0X2VxdWFsc19saHMiID0gIngkMSIgXAotICAgICAgICAmJiBmdW5jX3NwbGl0X2VxdWFsc19yaHM9Ci0gIH0nCi1lbHNlCi0gICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCi0gIGZ1bmNfc3BsaXRfZXF1YWxzICgpCi0gIHsKLSAgICAgICRkZWJ1Z19jbWQKLQotICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhzPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCknYAotICAgICAgZnVuY19zcGxpdF9lcXVhbHNfcmhzPQotICAgICAgdGVzdCAieCRmdW5jX3NwbGl0X2VxdWFsc19saHMiID0gIngkMSIgXAotICAgICAgICB8fCBmdW5jX3NwbGl0X2VxdWFsc19yaHM9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSQnYAotICB9Ci1maSAjZnVuY19zcGxpdF9lcXVhbHMKLQotCi0jIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IFNIT1JUT1BUCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcgc2hlbGwKLSMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KLWlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCi10aGVuCi0gICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KLSAgZXZhbCAnZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKLSAgewotICAgICAgJGRlYnVnX2NtZAotCi0gICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQotICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifQotICB9JwotZWxzZQotICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgotICBmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQotICB7Ci0gICAgICAkZGVidWdfY21kCi0KLSAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YGV4cHIgIngkMSIgOiAneC1cKC5cKSdgCi0gICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YGV4cHIgIngkMSIgOiAneC0uXCguKlwpJCdgCi0gIH0KLWZpICNmdW5jX3NwbGl0X3Nob3J0X29wdAotCi0KLSMgZnVuY191c2FnZQotIyAtLS0tLS0tLS0tCi0jIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLWZ1bmNfdXNhZ2UgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3VzYWdlX21lc3NhZ2UKLSAgICAkRUNITyAiUnVuICckcHJvZ25hbWUgLS1oZWxwIHwke1BBR0VSLW1vcmV9JyBmb3IgZnVsbCB1c2FnZSIKLSAgICBleGl0IDAKLX0KLQotCi0jIGZ1bmNfdXNhZ2VfbWVzc2FnZQotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0LgotZnVuY191c2FnZV9tZXNzYWdlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZXZhbCBcJEVDSE8gXCIiVXNhZ2U6ICR1c2FnZSJcIgotICAgIGVjaG8KLSAgICAkU0VEIC1uICdzfF4jIHx8Ci0gICAgICAgIC9eV3JpdHRlbiBieS97Ci0gICAgICAgICAgeDtwO3gKLSAgICAgICAgfQotCWgKLQkvXldyaXR0ZW4gYnkvcScgPCAiJHByb2dwYXRoIgotICAgIGVjaG8KLSAgICBldmFsIFwkRUNITyBcIiIkdXNhZ2VfbWVzc2FnZSJcIgotfQotCi0KLSMgZnVuY192ZXJzaW9uCi0jIC0tLS0tLS0tLS0tLQotIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCi1mdW5jX3ZlcnNpb24gKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBwcmludGYgJyVzXG4nICIkcHJvZ25hbWUgJHNjcmlwdHZlcnNpb24iCi0gICAgJFNFRCAtbiAnCi0gICAgICAgIC8oQykvIWIgZ28KLSAgICAgICAgOm1vcmUKLSAgICAgICAgL1wuLyF7Ci0gICAgICAgICAgTgotICAgICAgICAgIHN8XG4jIHwgfAotICAgICAgICAgIGIgbW9yZQotICAgICAgICB9Ci0gICAgICAgIDpnbwotICAgICAgICAvXiMgV3JpdHRlbiBieSAvLC8jIHdhcnJhbnR5OyAvIHsKLSAgICAgICAgICBzfF4jIHx8Ci0gICAgICAgICAgc3xeIyAqJHx8Ci0gICAgICAgICAgc3xcKChDKVwpWyAwLTksLV0qWyAsLV1cKFsxLTldWzAtOV0qIFwpfFwxIFwyfAotICAgICAgICAgIHAKLSAgICAgICAgfQotICAgICAgICAvXiMgV3JpdHRlbiBieSAvIHsKLSAgICAgICAgICBzfF4jIHx8Ci0gICAgICAgICAgcAotICAgICAgICB9Ci0gICAgICAgIC9ed2FycmFudHk7IC9xJyA8ICIkcHJvZ3BhdGgiCi0KLSAgICBleGl0ICQ/Ci19Ci0KLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIG1vZGU6IHNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjogMgotIyBldmFsOiAoYWRkLWhvb2sgJ2JlZm9yZS1zYXZlLWhvb2sgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtcGF0dGVybjogIjEwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIEVuZDoKLQotIyBTZXQgYSB2ZXJzaW9uIHN0cmluZy4KLXNjcmlwdHZlcnNpb249JyhHTlUgbGlidG9vbCkgMi40LjYnCi0KLQotIyBmdW5jX2VjaG8gQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0KLSMgTGlidG9vbCBhbHNvIGRpc3BsYXlzIHRoZSBjdXJyZW50IG1vZGUgaW4gbWVzc2FnZXMsIHNvIG92ZXJyaWRlCi0jIGZ1bmNsaWIuc2ggZnVuY19lY2hvIHdpdGggdGhpcyBjdXN0b20gZGVmaW5pdGlvbi4KLWZ1bmNfZWNobyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX21lc3NhZ2U9JCoKLQotICAgIGZ1bmNfZWNob19JRlM9JElGUwotICAgIElGUz0kbmwKLSAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KLSAgICAgIElGUz0kZnVuY19lY2hvX0lGUwotICAgICAgJEVDSE8gIiRwcm9nbmFtZSR7b3B0X21vZGUrOiAkb3B0X21vZGV9OiAkX0dfbGluZSIKLSAgICBkb25lCi0gICAgSUZTPSRmdW5jX2VjaG9fSUZTCi19Ci0KLQotIyBmdW5jX3dhcm5pbmcgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTGlidG9vbCB3YXJuaW5ncyBhcmUgbm90IGNhdGVnb3JpemVkLCBzbyBvdmVycmlkZSBmdW5jbGliLnNoCi0jIGZ1bmNfd2FybmluZyB3aXRoIHRoaXMgc2ltcGxlciBkZWZpbml0aW9uLgotZnVuY193YXJuaW5nICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHdhcm5pbmdfZnVuYyAkezErIiRAIn0KLX0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBPcHRpb25zIHBhcnNpbmcuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgSG9vayBpbiB0aGUgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSBvdXIgb3duIG9wdGlvbnMgYXJlIHBhcnNlZCBkdXJpbmcKLSMgdGhlIG9wdGlvbiBwYXJzaW5nIGxvb3AuCi0KLXVzYWdlPSckcHJvZ3BhdGggW09QVElPTl0uLi4gW01PREUtQVJHXS4uLicKLQotIyBTaG9ydCBoZWxwIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gJy1oJy4KLXVzYWdlX21lc3NhZ2U9Ik9wdGlvbnM6Ci0gICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKLSAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCi0gICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKLSAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQotICAgICAgIC0tbm8td2FybmluZ3MgICAgICAgIGVxdWl2YWxlbnQgdG8gJy1Xbm9uZScKLSAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCi0gICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcwotICAgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKLSAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0Ci0gICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgotICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQotICAgLWgsIC0taGVscCwgLS1oZWxwLWFsbCAgIHByaW50IHNob3J0LCBsb25nLCBvciBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UKLSIKLQotIyBBZGRpdGlvbmFsIHRleHQgYXBwZW5kZWQgdG8gJ3VzYWdlX21lc3NhZ2UnIGluIHJlc3BvbnNlIHRvICctLWhlbHAnLgotZnVuY19oZWxwICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY191c2FnZV9tZXNzYWdlCi0gICAgJEVDSE8gIiRsb25nX2hlbHBfbWVzc2FnZQotCi1NT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgICBjbGVhbiAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQotICAgICAgIGNvbXBpbGUgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0Ci0gICAgICAgZXhlY3V0ZSAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCi0gICAgICAgZmluaXNoICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKLSAgICAgICBpbnN0YWxsICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKLSAgICAgICBsaW5rICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCi0gICAgICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5Ci0KLU1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKLSctLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzICdNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KLVRyeSAnJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgotCi1XaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKLWluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKLQotICAgICAgIGhvc3QtdHJpcGxldDogICAkaG9zdAotICAgICAgIHNoZWxsOiAgICAgICAgICAkU0hFTEwKLSAgICAgICBjb21waWxlcjogICAgICAgJExUQ0MKLSAgICAgICBjb21waWxlciBmbGFnczogJExUQ0ZMQUdTCi0gICAgICAgbGlua2VyOiAgICAgICAgICRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCi0gICAgICAgdmVyc2lvbjogICAgICAgICRwcm9nbmFtZSAkc2NyaXB0dmVyc2lvbiBEZWJpYW4tMi40LjYtMgotICAgICAgIGF1dG9tYWtlOiAgICAgICBgKCRBVVRPTUFLRSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYAotICAgICAgIGF1dG9jb25mOiAgICAgICBgKCRBVVRPQ09ORiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYAotCi1SZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCi1HTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvcy9saWJ0b29sLz4uCi1HZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4iCi0gICAgZXhpdCAwCi19Ci0KLQotIyBmdW5jX2xvMm8gT0JKRUNULU5BTUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyYW5zZm9ybSBPQkpFQ1QtTkFNRSBmcm9tIGEgJy5sbycgc3VmZml4IHRvIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYwotIyBvYmplY3Qgc3VmZml4LgotCi1sbzJvPXMvXFwubG9cJC8uJG9iamV4dC8KLW8ybG89cy9cXC4kb2JqZXh0XCQvLmxvLwotCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgotICBldmFsICdmdW5jX2xvMm8gKCkKLSAgewotICAgIGNhc2UgJDEgaW4KLSAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJG9iamV4dCA7OwotICAgICAgKiAgICkgZnVuY19sbzJvX3Jlc3VsdD0kMSAgICAgICAgICAgICAgIDs7Ci0gICAgZXNhYwotICB9JwotCi0gICMgZnVuY194Zm9ybSBMSUJPQkotT1ItU09VUkNFCi0gICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICMgVHJhbnNmb3JtIExJQk9CSi1PUi1TT1VSQ0UgZnJvbSBhICcubycgb3IgJy5jJyAob3Igb3RoZXJ3aXNlKQotICAjIHN1ZmZpeCB0byBhICcubG8nIGxpYnRvb2wtb2JqZWN0IHN1ZmZpeC4KLSAgZXZhbCAnZnVuY194Zm9ybSAoKQotICB7Ci0gICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbwotICB9JwotZWxzZQotICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgc2VkLgotICBmdW5jX2xvMm8gKCkKLSAgewotICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkbG8ybyJgCi0gIH0KLQotICBmdW5jX3hmb3JtICgpCi0gIHsKLSAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3N8XC5bXi5dKiR8LmxvfCdgCi0gIH0KLWZpCi0KLQotIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKLSMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKLXsKLSAgICBmdW5jX19mYXRhbF9lcnJvciAkezErIiRAIn0gXAotICAgICAgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIFwKLSAgICAgICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKLX0KLQotCi0jIGZ1bmNfY29uZmlnCi0jIC0tLS0tLS0tLS0tCi0jIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KLWZ1bmNfY29uZmlnICgpCi17Ci0gICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCi0gICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKLQotICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgotICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKLQotICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCi0gICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCi0gICAgICAkU0VEIC1uICIvJHJlX2JlZ2luY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC8sLyRyZV9lbmRjZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkL3AiIDwgIiRwcm9ncGF0aCIKLSAgICBkb25lCi0KLSAgICBleGl0ICQ/Ci19Ci0KLQotIyBmdW5jX2ZlYXR1cmVzCi0jIC0tLS0tLS0tLS0tLS0KLSMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotZnVuY19mZWF0dXJlcyAoKQotewotICAgIGVjaG8gImhvc3Q6ICRob3N0IgotICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0gICAgICBlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKLSAgICBlbHNlCi0gICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCi0gICAgZmkKLSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0gICAgICBlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKLSAgICBlbHNlCi0gICAgICBlY2hvICJkaXNhYmxlIHN0YXRpYyBsaWJyYXJpZXMiCi0gICAgZmkKLQotICAgIGV4aXQgJD8KLX0KLQotCi0jIGZ1bmNfZW5hYmxlX3RhZyBUQUdOQU1FCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFZlcmlmeSB0aGF0IFRBR05BTUUgaXMgdmFsaWQsIGFuZCBlaXRoZXIgZmxhZyBhbiBlcnJvciBhbmQgZXhpdCwgb3IKLSMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAotIyB2YXJpYWJsZSBoZXJlLgotZnVuY19lbmFibGVfdGFnICgpCi17Ci0gICAgIyBHbG9iYWwgdmFyaWFibGU6Ci0gICAgdGFnbmFtZT0kMQotCi0gICAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKLSAgICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCi0gICAgc2VkX2V4dHJhY3RjZj0vJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcAotCi0gICAgIyBWYWxpZGF0ZSB0YWduYW1lLgotICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgICpbIS1fQS1aYS16MC05LC9dKikKLSAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCi0gICAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKLSAgICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KLSAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICAgIENDKSA7OwotICAgICopCi0gICAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICB0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKLQotCSAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKLQkgICMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0Ci0JICAjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCi0JICAjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6Ci0JICBleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCi0JICBldmFsICIkZXh0cmFjdGVkY2YiCi0gICAgICAgIGVsc2UKLQkgIGZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgotICAgICAgICBmaQotICAgICAgICA7OwotICAgIGVzYWMKLX0KLQotCi0jIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKLSMgcmVsZWFzZSBvZiBsaWJ0b29sLgotZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCi17Ci0gICAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCi0gICAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgotICAgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KLSAgICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQotJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCi0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCi0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCi1fTFRfRU9GCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQotJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgotJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgotJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgotX0xUX0VPRgotICAgICAgICBmaQotICAgICAgZWxzZQotICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCi0kcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCi0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCi0kcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCi1fTFRfRU9GCi0gICAgICBmaQotCi0gICAgICBleGl0ICRFWElUX01JU01BVENICi0gICAgZmkKLX0KLQotCi0jIGxpYnRvb2xfb3B0aW9uc19wcmVwIFtBUkddLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByZXBhcmF0aW9uIGZvciBvcHRpb25zIHBhcnNlZCBieSBsaWJ0b29sLgotbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKLXsKLSAgICAkZGVidWdfbW9kZQotCi0gICAgIyBPcHRpb24gZGVmYXVsdHM6Ci0gICAgb3B0X2NvbmZpZz1mYWxzZQotICAgIG9wdF9kbG9wZW49Ci0gICAgb3B0X2RyeV9ydW49ZmFsc2UKLSAgICBvcHRfaGVscD1mYWxzZQotICAgIG9wdF9tb2RlPQotICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQotICAgIG9wdF9xdWlldD1mYWxzZQotCi0gICAgbm9ub3B0PQotICAgIHByZXNlcnZlX2FyZ3M9Ci0KLSAgICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKLSAgICBjYXNlICQxIGluCi0gICAgY2xlYW58Y2xlYXxjbGV8Y2wpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0Ci0gICAgICA7OwotICAgIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKLSAgICAgIDs7Ci0gICAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKLSAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAotICAgICAgOzsKLSAgICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKLSAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0Ci0gICAgICA7OwotICAgIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCi0gICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKLSAgICAgIDs7Ci0gICAgbGlua3xsaW58bGl8bCkKLSAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAotICAgICAgOzsKLSAgICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKLSAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0Ci0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgUGFzcyBiYWNrIHRoZSBsaXN0IG9mIG9wdGlvbnMuCi0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KLSAgICBsaWJ0b29sX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci19Ci1mdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIGxpYnRvb2xfb3B0aW9uc19wcmVwCi0KLQotIyBsaWJ0b29sX3BhcnNlX29wdGlvbnMgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb3ZpZGUgaGFuZGxpbmcgZm9yIGxpYnRvb2wgc3BlY2lmaWMgb3B0aW9ucy4KLWxpYnRvb2xfcGFyc2Vfb3B0aW9ucyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgUGVyZm9ybSBvdXIgb3duIGxvb3AgdG8gY29uc3VtZSBhcyBtYW55IG9wdGlvbnMgYXMgcG9zc2libGUgaW4KLSAgICAjIGVhY2ggaXRlcmF0aW9uLgotICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgICBfR19vcHQ9JDEKLSAgICAgIHNoaWZ0Ci0gICAgICBjYXNlICRfR19vcHQgaW4KLSAgICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2RyeV9ydW49OgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLWNvbmZpZykgICAgICAgZnVuY19jb25maWcgOzsKLQotICAgICAgICAtLWRsb3BlbnwtZGxvcGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCi19JDEiCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ByZXNlcnZlX2R1cF9kZXBzPTogOzsKLQotICAgICAgICAtLWZlYXR1cmVzKSAgICAgZnVuY19mZWF0dXJlcyA7OwotCi0gICAgICAgIC0tZmluaXNoKSAgICAgICBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0IDs7Ci0KLSAgICAgICAgLS1oZWxwKSAgICAgICAgIG9wdF9oZWxwPTogOzsKLQotICAgICAgICAtLWhlbHAtYWxsKSAgICAgb3B0X2hlbHA9JzogaGVscC1hbGwnIDs7Ci0KLSAgICAgICAgLS1tb2RlKSAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X21vZGU9JDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJDEgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJF9HX29wdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9jbWQ9ZXhpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9xdWlldD1mYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nPWZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1uby12ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgotICAgICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLXNpbGVudHwtLXF1aWV0KQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3F1aWV0PToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS10YWcpICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3RhZz0kMQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQgJDEiCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VuYWJsZV90YWcgIiQxIgotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS12ZXJib3NlfC12KSAgIG9wdF9xdWlldD1mYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9OgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotCi0JIyBBbiBvcHRpb24gbm90IGhhbmRsZWQgYnkgdGhpcyBob29rIGZ1bmN0aW9uOgotICAgICAgICAqKQkJc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLQotICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0gICAgbGlidG9vbF9wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLX0KLWZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucwotCi0KLQotIyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCi0jIGFyZ3VtZW50cy4KLWxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQotewotICAgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50Ci0gICAgaWYgdGVzdCAwIC1sdCAkIzsgdGhlbgotICAgICAgbm9ub3B0PSQxCi0gICAgICBzaGlmdAotICAgIGZpCi0KLSAgICAjIHByZXNlcnZlIC0tZGVidWcKLSAgICB0ZXN0IDogPSAiJGRlYnVnX2NtZCIgfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCi0KLSAgICBjYXNlICRob3N0IGluCi0gICAgICAjIFNvbGFyaXMyIGFkZGVkIHRvIGZpeCBodHRwOi8vZGViYnVncy5nbnUub3JnL2NnaS9idWdyZXBvcnQuY2dpP2J1Zz0xNjQ1MgotICAgICAgIyBzZWUgYWxzbzogaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01OTc4OAotICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKiB8ICpzb2xhcmlzMiogfCAqb3MyKikKLSAgICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKLSAgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06Ci0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKLSAgICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAkb3B0X2hlbHAgfHwgewotICAgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgotICAgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCi0KLSAgICAgIHRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCi0gICAgICAgICYmIHRlc3QgeWVzICE9ICIkYnVpbGRfb2xkX2xpYnMiIFwKLSAgICAgICAgJiYgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgotCi0gICAgICAjIERhcndpbiBzdWNrcwotICAgICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKLQotICAgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KLSAgICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0IGV4ZWN1dGUgIT0gIiRvcHRfbW9kZSI7IHRoZW4KLSAgICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiAnLWRsb3BlbiciCi0gICAgICAgICRFQ0hPICIkaGVscCIgMT4mMgotICAgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0KLSAgICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KLSAgICAgIGdlbmVyaWNfaGVscD0kaGVscAotICAgICAgaGVscD0iVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLSAgICB9Ci0KLSAgICAjIFBhc3MgYmFjayB0aGUgdW5wYXJzZWQgYXJndW1lbnQgbGlzdAotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9Ci0gICAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLX0KLWZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucwotCi0KLSMgUHJvY2VzcyBvcHRpb25zIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHRoYXQgLS1oZWxwIGFuZCAtLXZlcnNpb24KLSMgY2FuIHJldHVybiBxdWlja2x5LgotZnVuY19vcHRpb25zICR7MSsiJEAifQotZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKLQotCi0KLSMjIC0tLS0tLS0tLS0tICMjCi0jIyAgICBNYWluLiAgICAjIwotIyMgLS0tLS0tLS0tLS0gIyMKLQotbWFnaWM9JyUlJU1BR0lDIHZhcmlhYmxlJSUlJwotbWFnaWNfZXhlPSclJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUnCi0KLSMgR2xvYmFsIHZhcmlhYmxlcy4KLWV4dHJhY3RlZF9hcmNoaXZlcz0KLWV4dHJhY3RlZF9zZXJpYWw9MAotCi0jIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKLSMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZwotIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgotZXhlY19jbWQ9Ci0KLQotIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgotZnVuY19mYWxsYmFja19lY2hvICgpCi17Ci0gIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCi0kMQotX0xURUNIT19FT0YnCi19Ci0KLSMgZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbAotIyBUcnVlIGlmZiBzdGRpbiBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgTGlidG9vbC4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5Ci0jIGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCi1mdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AgKCkKLXsKLSAgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCi19Ci0KLSMgZnVuY19sYWxpYl9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgJy5sYScgbGlicmFyeSBvciAnLmxvJyBvYmplY3QgZmlsZS4KLSMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKLSMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCi1mdW5jX2xhbGliX3AgKCkKLXsKLSAgICB0ZXN0IC1mICIkMSIgJiYKLSAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCB8IGZ1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2xfcAotfQotCi0jIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcubG8nIG9iamVjdCBmaWxlLgotIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKLSMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKLSMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCi0jIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCi0jIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmICdmaWxlJyBkb2VzIG5vdCBleGlzdC4KLWZ1bmNfbGFsaWJfdW5zYWZlX3AgKCkKLXsKLSAgICBsYWxpYl9wPW5vCi0gICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KLQlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKLQlkbwotCSAgICByZWFkIGxhbGliX3BfbGluZQotCSAgICBjYXNlICRsYWxpYl9wX2xpbmUgaW4KLQkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OwotCSAgICBlc2FjCi0JZG9uZQotCWV4ZWMgMDwmNSA1PCYtCi0gICAgZmkKLSAgICB0ZXN0IHllcyA9ICIkbGFsaWJfcCIKLX0KLQotIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0Ci0jIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0Ci0jIGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKLXsKLSAgICB0ZXN0IC1mICIkMSIgJiYKLSAgICAgICRsdF90cnVuY2F0ZV9iaW4gPCAiJDEiIDI+L2Rldi9udWxsIHwgZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbF9wCi19Ci0KLSMgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCi0jIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0Ci0jIGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCi17Ci0gICAgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9Ci0gICAgY2FzZSAkMSBpbgotICAgICouZXhlKSA7OwotICAgICopIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PS5leGUgOzsKLSAgICBlc2FjCi0gICAgJEdSRVAgIiRtYWdpY19leGUiICIkMSRmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeCIgPi9kZXYvbnVsbCAyPiYxCi19Ci0KLSMgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSBmaWxlCi0jIEFzc3VtZXMgZmlsZSBpcyBhbiBsdHdyYXBwZXJfZXhlY3V0YWJsZQotIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKLSMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCi1mdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCi17Ci0gICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgotICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyCi19Ci0KLSMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQotIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAotIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KLWZ1bmNfbHR3cmFwcGVyX3AgKCkKLXsKLSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCi19Ci0KLQotIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAotIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KLSMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCi0jIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKLWZ1bmNfZXhlY3V0ZV9jbWRzICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwotICAgIGZvciBjbWQgaW4gJDE7IGRvCi0gICAgICBJRlM9JHNwJG5sCi0gICAgICBldmFsIGNtZD1cIiRjbWRcIgotICAgICAgSUZTPSRzYXZlX2lmcwotICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCi0gICAgZG9uZQotICAgIElGUz0kc2F2ZV9pZnMKLX0KLQotCi0jIGZ1bmNfc291cmNlIGZpbGUKLSMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KLSMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bwotIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCi0jIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKLSMgJ0ZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KLWZ1bmNfc291cmNlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgY2FzZSAkMSBpbgotICAgICovKiB8ICpcXCopCS4gIiQxIiA7OwotICAgICopCQkuICIuLyQxIiA7OwotICAgIGVzYWMKLX0KLQotCi0jIGZ1bmNfcmVzb2x2ZV9zeXNyb290IFBBVEgKLSMgUmVwbGFjZSBhIGxlYWRpbmcgPSBpbiBQQVRIIHdpdGggYSBzeXNyb290LiAgU3RvcmUgdGhlIHJlc3VsdCBpbnRvCi0jIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotZnVuY19yZXNvbHZlX3N5c3Jvb3QgKCkKLXsKLSAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSQxCi0gIGNhc2UgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCBpbgotICA9KikKLSAgICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0gICAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIDs7Ci0gIGVzYWMKLX0KLQotIyBmdW5jX3JlcGxhY2Vfc3lzcm9vdCBQQVRICi0jIElmIFBBVEggYmVnaW5zIHdpdGggdGhlIHN5c3Jvb3QsIHJlcGxhY2UgaXQgd2l0aCA9IGFuZAotIyBzdG9yZSB0aGUgcmVzdWx0IGludG8gZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0LgotZnVuY19yZXBsYWNlX3N5c3Jvb3QgKCkKLXsKLSAgY2FzZSAkbHRfc3lzcm9vdDokMSBpbgotICA/KjoiJGx0X3N5c3Jvb3QiKikKLSAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKLSAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Jz0nJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIDs7Ci0gICopCi0gICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KLSAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKLSAgICA7OwotICBlc2FjCi19Ci0KLSMgZnVuY19pbmZlcl90YWcgYXJnCi0jIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKLSMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCi0jIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCi0jIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KLSMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCi1mdW5jX2luZmVyX3RhZyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCi0gICAgICBDQ19xdW90ZWQ9Ci0gICAgICBmb3IgYXJnIGluICRDQzsgZG8KLQlmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgotICAgICAgZG9uZQotICAgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAotICAgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCi0gICAgICBjYXNlICRAIGluCi0gICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAotICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCi0gICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCi0gICAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopIDs7Ci0gICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAotICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgotICAgICAgKikKLQlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCi0JICBpZiAkR1JFUCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHokIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCi0JICAgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCi0JICAgIGV2YWwgImAkU0VEIC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgotCSAgICBDQ19xdW90ZWQ9Ci0JICAgIGZvciBhcmcgaW4gJENDOyBkbwotCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KLQkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgotCSAgICBkb25lCi0JICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKLQkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCi0JICAgIGNhc2UgIiRAICIgaW4KLQkgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAotCSAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopCi0JICAgICAgIyBUaGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZSBjb21tYW5kIG1hdGNoZXMKLQkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgotCSAgICAgICMgQXNzdW1lIHRoaXMgaXMgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uIHdlIHdhbnQuCi0JICAgICAgdGFnbmFtZT0kegotCSAgICAgIGJyZWFrCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQlkb25lCi0JIyBJZiAkdGFnbmFtZSBzdGlsbCBpc24ndCBzZXQsIHRoZW4gbm8gdGFnZ2VkIGNvbmZpZ3VyYXRpb24KLQkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCi0JIyBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQuCi0JaWYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCi0JICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCAnLS10YWcnIgotIwllbHNlCi0jCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLX0KLQotCi0KLSMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQotIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKLSMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCi1mdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCi17Ci0gICAgd3JpdGVfbGlib2JqPSQxCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KLSAgICAgIHdyaXRlX2xvYmo9XCckMlwnCi0gICAgZWxzZQotICAgICAgd3JpdGVfbG9iaj1ub25lCi0gICAgZmkKLQotICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KLSAgICAgIHdyaXRlX29sZG9iaj1cJyQzXCcKLSAgICBlbHNlCi0gICAgICB3cml0ZV9vbGRvYmo9bm9uZQotICAgIGZpCi0KLSAgICAkb3B0X2RyeV9ydW4gfHwgewotICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCi0jICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCi0jCi0jIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKLSMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgotCi0jIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCi1waWNfb2JqZWN0PSR3cml0ZV9sb2JqCi0KLSMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKLW5vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKLQotRU9GCi0gICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIkd3JpdGVfbGlib2JqIgotICAgIH0KLX0KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKLSMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsCi0jIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKLSMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KLSMgaW4gJGJ1aWxkJ3MgJFBBVEguCi0jCi0jIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KLSMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQsIGFuZCB3aWxsCi0jIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKLWZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKLSAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQotICAgICMgY29tbWFuZCBpcyBub3QgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAotICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCi0gICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKLSAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIjsgdGhlbgotICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKLSAgICAgICAgJFNFRCAtZSAiJHNlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAotICAgIGVsc2UKLSAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQotICAgIGZpCi0gIGZpCi19Ci0jIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKLSMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKLSMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQotIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCi0jICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgotIwotIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgotIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdC4KLSMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCi0jIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KLWZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKLSAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9Ci0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgIG9sZElGUz0kSUZTCi0gICAgSUZTPToKLSAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbwotICAgICAgSUZTPSRvbGRJRlMKLSAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCi0gICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgotICAgICAgICBmaQotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSRvbGRJRlMKLSAgZmkKLX0KLSMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCi0KLQotIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgotIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCi0jIHdoZW4gKDEpICRidWlsZCBpcyAqbml4IGFuZCBDeWd3aW4gaXMgaG9zdGVkIHZpYSBhIHdpbmUgZW52aXJvbm1lbnQ7IG9yICgyKQotIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKLSMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKLSMgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbiB3MzIgZm9ybWF0LCBhcyBwcmV2aW91c2x5IGNvbnZlcnRlZAotIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQotIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KLSMgQ3lnd2luIGZvcm1hdCkuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yLgotIwotIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCi0jIGJlIGNvbnZlcnRlZC4KLSMKLSMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKLSMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCi1mdW5jX2N5Z3BhdGggKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KLSAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgotICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5Ci0gICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQotICAgIGZpCi0gIGVsc2UKLSAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQotICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiAnJExUX0NZR1BBVEgnIgotICBmaQotfQotI2VuZDogZnVuY19jeWdwYXRoCi0KLQotIyBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiBBUkcKLSMgQ29udmVydCBmaWxlIG5hbWUgb3IgcGF0aCBBUkcgZnJvbSBNU1lTIGZvcm1hdCB0byB3MzIgZm9ybWF0LiAgUmV0dXJuCi0jIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQotewotICAkZGVidWdfY21kCi0KLSAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0Ci0gIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKLSAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCi19Ci0jZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCi0jIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKLSMgZm9ybWF0IGluIEFSRzIuIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUgKHJlc2V0dGluZwotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCi1mdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQotewotICAkZGVidWdfY21kCi0KLSAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBmaWxlIG5hbWUgY29ycmVzcG9uZGluZyB0byIKLSAgICBmdW5jX2Vycm9yICIgICckMSciCi0gICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCi0gICAgIyBGYWxsYmFjazoKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAotIyBWZXJpZnkgdGhhdCBGUk9NX1BBVEggKGEgcGF0aCBpbiAkYnVpbGQgZm9ybWF0KSB3YXMgY29udmVydGVkIHRvICRob3N0Ci0jIGZvcm1hdCBpbiBUT19QQVRILiBPdGhlcndpc2UsIGVtaXQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGNvbnRpbnVlLCByZXNldHRpbmcKLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KLWZ1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCi0gICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCi0gICAgZnVuY19lcnJvciAiICAnJDMnIgotICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgotICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAotICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KLSAgICBpZiB0ZXN0ICJ4JDEiICE9ICJ4JDIiOyB0aGVuCi0gICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKLSAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKLSAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCi0gICAgZWxzZQotICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQzCi0gICAgZmkKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKLSMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKLSMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgotZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBjYXNlICQ0IGluCi0gICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdAotICAgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkNCBpbgotICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCi0gICAgOzsKLSAgZXNhYwotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBpbnZva2VkIHZpYSAnJHRvX2hvc3RfZmlsZV9jbWQgQVJHJwotIwotIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgotIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLQotCi0jIGZ1bmNfdG9faG9zdF9maWxlIEFSRwotIyBDb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0Ci0jIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfdG9faG9zdF9maWxlICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCi19Ci0jIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQotCi0KLSMgZnVuY190b190b29sX2ZpbGUgQVJHIExBWlkKLSMgY29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHRvb2xjaGFpbiBmb3JtYXQuIFJldHVybgotIyByZXN1bHQgaW4gZnVuY190b190b29sX2ZpbGVfcmVzdWx0LiAgSWYgdGhlIGNvbnZlcnNpb24gaW4gdXNlIGlzIGxpc3RlZAotIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KLWZ1bmNfdG9fdG9vbF9maWxlICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBjYXNlICwkMiwgaW4KLSAgICAqLCIkdG9fdG9vbF9maWxlX2NtZCIsKikKLSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQotICAgICAgOzsKLSAgICAqKQotICAgICAgJHRvX3Rvb2xfZmlsZV9jbWQgIiQxIgotICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKLSAgICAgIDs7Ci0gIGVzYWMKLX0KLSMgZW5kIGZ1bmNfdG9fdG9vbF9maWxlCi0KLQotIyBmdW5jX2NvbnZlcnRfZmlsZV9ub29wIEFSRwotIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCi17Ci0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotCi0KLSMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYwotIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdAotICBmaQotICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCi0gICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9YGN5Z3BhdGggLW0gIiQxImAKLSAgZmkKLSAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAotIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdAotICBmaQotICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgotIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKLSAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0Ci0gIGZpCi0gIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgotCi0KLSMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKLSMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAotIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0Ci0jIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KLSAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKLSAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKLSAgZmkKLSAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGludm9rZWQgdmlhICckdG9faG9zdF9wYXRoX2NtZCBBUkcnCi0jCi0jIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCi0jIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLSMKLSMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKLSMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0Ci0jIGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpIG9uIG91dHB1dC4KLSMKLSMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKLSMgICBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbiAgICA6IGZ1bmNfY29udmVydF9maWxlX1hfdG9fWSAoKQotIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCi0jIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCi0jIHNhbWUuICBJZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIG5ldyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zLAotIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAotIyB3aWxsIGJyZWFrLgotCi0KLSMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKLSMgRW5zdXJlcyB0aGF0IGZ1bmN0aW9uICJwb2ludGVyIiB2YXJpYWJsZSAkdG9faG9zdF9wYXRoX2NtZCBpcyBzZXQgdG8gdGhlCi0jIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCi10b19ob3N0X3BhdGhfY21kPQotZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgotICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKLSAgICB0b19ob3N0X3BhdGhfY21kPWZ1bmNfY29udmVydF9wYXRoXyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgZmkKLX0KLQotCi0jIGZ1bmNfdG9faG9zdF9wYXRoIEFSRwotIyBDb252ZXJ0cyB0aGUgcGF0aCBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gUmV0dXJuIHJlc3VsdAotIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCi1mdW5jX3RvX2hvc3RfcGF0aCAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKLSAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgotfQotIyBlbmQgZnVuY190b19ob3N0X3BhdGgKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCi0jIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX25vb3AgKCkKLXsKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiBBUkcKLSMgQ29udmVydCBwYXRoIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYwotIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgotIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCi0gICAgIyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZTsgY3lncGF0aCB0dXJucyB0aGVtIGludG8gJy47JyBhbmQgJzsuJzsKLSAgICAjIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKLSAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgotICBmaQotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCi0jIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKLSAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgotICBmaQotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKLSMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKLSMgYSB3b3JraW5nIHdpbmVwYXRoLiAgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgotICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKLSAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgotICBmaQotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KLSMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0Ci0gICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKLSAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luIEFSRwotIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZCBpbiBhCi0jIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQgaW4KLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQotICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KLSAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgotICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0gICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0Ci0gICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKLSAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4KLQotCi0jIGZ1bmNfZGxsX2RlZl9wIEZJTEUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIFdpbmRvd3MgRExMICcuZGVmJyBmaWxlLgotIyBLZWVwIGluIHN5bmMgd2l0aCBfTFRfRExMX0RFRl9QIGluIGxpYnRvb2wubTQKLWZ1bmNfZGxsX2RlZl9wICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX2RsbF9kZWZfcF90bXA9YCRTRUQgLW4gXAotICAgIC1lICdzL15bCSBdKi8vJyBcCi0gICAgLWUgJy9eXCg7LipcKSokL2QnIFwKLSAgICAtZSAncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnIFwKLSAgICAtZSBxIFwKLSAgICAiJDEiYAotICB0ZXN0IERFRiA9ICIkZnVuY19kbGxfZGVmX3BfdG1wIgotfQotCi0KLSMgZnVuY19tb2RlX2NvbXBpbGUgYXJnLi4uCi1mdW5jX21vZGVfY29tcGlsZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCi0gICAgYmFzZV9jb21waWxlPQotICAgIHNyY2ZpbGU9JG5vbm9wdCAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCi0gICAgc3VwcHJlc3Nfb3B0PXllcwotICAgIHN1cHByZXNzX291dHB1dD0KLSAgICBhcmdfbW9kZT1ub3JtYWwKLSAgICBsaWJvYmo9Ci0gICAgbGF0ZXI9Ci0gICAgcGllX2ZsYWc9Ci0KLSAgICBmb3IgYXJnCi0gICAgZG8KLSAgICAgIGNhc2UgJGFyZ19tb2RlIGluCi0gICAgICBhcmcgICkKLQkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCi0JbGFzdGFyZz0kYXJnCi0JYXJnX21vZGU9bm9ybWFsCi0JOzsKLQotICAgICAgdGFyZ2V0ICkKLQlsaWJvYmo9JGFyZwotCWFyZ19tb2RlPW5vcm1hbAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgbm9ybWFsICkKLQkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCi0JY2FzZSAkYXJnIGluCi0JLW8pCi0JICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSAnLW8nIG1vcmUgdGhhbiBvbmNlIgotCSAgYXJnX21vZGU9dGFyZ2V0Ci0JICBjb250aW51ZQotCSAgOzsKLQotCS1waWUgfCAtZnBpZSB8IC1mUElFKQotICAgICAgICAgIGZ1bmNfYXBwZW5kIHBpZV9mbGFnICIgJGFyZyIKLQkgIGNvbnRpbnVlCi0JICA7OwotCi0JLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKLQkgIGZ1bmNfYXBwZW5kIGxhdGVyICIgJGFyZyIKLQkgIGNvbnRpbnVlCi0JICA7OwotCi0JLW5vLXN1cHByZXNzKQotCSAgc3VwcHJlc3Nfb3B0PW5vCi0JICBjb250aW51ZQotCSAgOzsKLQotCS1YY29tcGlsZXIpCi0JICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0Ci0JICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgotCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KLQotCS1XYywqKQotCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgotCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICBsYXN0YXJnPQotCSAgc2F2ZV9pZnM9JElGUzsgSUZTPSwKLQkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCi0JICAgIElGUz0kc2F2ZV9pZnMKLQkgICAgZnVuY19hcHBlbmRfcXVvdGVkIGxhc3RhcmcgIiRhcmciCi0JICBkb25lCi0JICBJRlM9JHNhdmVfaWZzCi0JICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgotCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0KLQkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgotCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQotCSopCi0JICAjIEFjY2VwdCB0aGUgY3VycmVudCBhcmd1bWVudCBhcyB0aGUgc291cmNlIGZpbGUuCi0JICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KLQkgICMKLQkgIGxhc3Rhcmc9JHNyY2ZpbGUKLQkgIHNyY2ZpbGU9JGFyZwotCSAgOzsKLQllc2FjICAjICBjYXNlICRhcmcKLQk7OwotICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQotCi0gICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgotICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGJhc2VfY29tcGlsZSAiJGxhc3RhcmciCi0gICAgZG9uZSAjIGZvciBhcmcKLQotICAgIGNhc2UgJGFyZ19tb2RlIGluCi0gICAgYXJnKQotICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgotICAgICAgOzsKLSAgICB0YXJnZXQpCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggJy1vJyIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KLSAgICAgIHRlc3QgLXogIiRsaWJvYmoiICYmIHsKLQlmdW5jX2Jhc2VuYW1lICIkc3JjZmlsZSIKLQlsaWJvYmo9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0gICAgICB9Ci0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCi0gICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KLSAgICBjYXNlICRsaWJvYmogaW4KLSAgICAqLltjQ0ZTaWZtc29dIHwgXAotICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAotICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKLSAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5nbyB8ICoub2JqIHwgKi5zeCB8ICouY3UgfCAqLmN1cCkKLSAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCi0gICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0Ci0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJGxpYm9iaiBpbgotICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OwotICAgICopCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSAnJGxpYm9iaiciCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKLQotICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbwotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtc2hhcmVkKQotCXRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCi0JYnVpbGRfb2xkX2xpYnM9bm8KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1zdGF0aWMpCi0JYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JYnVpbGRfb2xkX2xpYnM9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtcHJlZmVyLXBpYykKLQlwaWNfbW9kZT15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1wcmVmZXItbm9uLXBpYykKLQlwaWNfbW9kZT1ubwotCWNvbnRpbnVlCi0JOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgotICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAotICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCi0gICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lICckbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKLSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKLSAgICBvYmpuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotICAgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLSAgICBsb2JqPSR4ZGlyJG9iamRpci8kb2JqbmFtZQotCi0gICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKLQotICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCi0gICAgZWxzZQotICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgotICAgIGZpCi0KLSAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCi0gICAgICBwaWNfbW9kZT1kZWZhdWx0Ci0gICAgICA7OwotICAgIGVzYWMKLSAgICBpZiB0ZXN0IG5vID0gIiRwaWNfbW9kZSIgJiYgdGVzdCBwYXNzX2FsbCAhPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgotICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCi0gICAgICBwaWNfbW9kZT1kZWZhdWx0Ci0gICAgZmkKLQotICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCi0gICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCi0gICAgaWYgdGVzdCBubyA9ICIkY29tcGlsZXJfY19vIjsgdGhlbgotICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4kb2JqZXh0Ci0gICAgICBsb2NrZmlsZT0kb3V0cHV0X29iai5sb2NrCi0gICAgZWxzZQotICAgICAgb3V0cHV0X29iaj0KLSAgICAgIG5lZWRfbG9ja3M9bm8KLSAgICAgIGxvY2tmaWxlPQotICAgIGZpCi0KLSAgICAjIExvY2sgdGhpcyBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IGlzIG5lZWRlZAotICAgICMgV2UgdXNlIHRoaXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGluaywgaXQgYXZvaWRzIGNyZWF0aW5nIGEgbmV3IGZpbGUKLSAgICBpZiB0ZXN0IHllcyA9ICIkbmVlZF9sb2NrcyI7IHRoZW4KLSAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KLQlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgotCXNsZWVwIDIKLSAgICAgIGRvbmUKLSAgICBlbGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLWYgIiRsb2NrZmlsZSI7IHRoZW4KLQkkRUNITyAiXAotKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKLWBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAotCi1UaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCi10ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQotcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgotYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKLWNvbXBpbGVyLiIKLQotCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0gICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJG91dHB1dF9vYmoiCi0gICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKLSAgICBmaQotCi0gICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAotICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCi0gICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKLQotICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkc3JjZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICBzcmNmaWxlPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKLSAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLQotICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgotICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0gICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgotICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCi0KLSAgICAgIGlmIHRlc3Qgbm8gIT0gIiRwaWNfbW9kZSI7IHRoZW4KLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCi0gICAgICBlbHNlCi0JIyBEb24ndCBidWlsZCBQSUMgY29kZQotCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgotICAgICAgZmkKLQotICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCi0KLSAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgotCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgotCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKLSAgICAgIGZpCi0KLSAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKLSAgICAgICAgICAndGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJwotCi0gICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCi0JIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCi0JJEVDSE8gIlwKLSoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgotYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCi0KLWJ1dCBpdCBzaG91bGQgY29udGFpbjoKLSRzcmNmaWxlCi0KLVRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKLXRlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKLXlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91Ci1yZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCi1hdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgotY29tcGlsZXIuIgotCi0JJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKLQotICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKLSAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCi0JZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKLQkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCi0gICAgICBmaQotCi0gICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcHJlc3Nfb3B0IjsgdGhlbgotCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KLSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0gICAgICBpZiB0ZXN0IHllcyAhPSAiJHBpY19tb2RlIjsgdGhlbgotCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKLSAgICAgIGVsc2UKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCi0gICAgICBmaQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KLQlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKLSAgICAgIGZpCi0KLSAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgotICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKLSAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKLSAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKLQotICAgICAgaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIiAmJgotCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgotCSRFQ0hPICJcCi0qKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKLWBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAotCi1idXQgaXQgc2hvdWxkIGNvbnRhaW46Ci0kc3JjZmlsZQotCi1UaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCi10ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgJy1jJyBhbmQgJy1vJyB0b2dldGhlci4gIElmIHlvdQotcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgotYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKLWNvbXBpbGVyLiIKLQotCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCi0KLSAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCi0gICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCi0JZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAotCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0gICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgotCi0gICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCi0gICAgICBpZiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KLQlyZW1vdmVsaXN0PSRsb2NrZmlsZQotICAgICAgICAkUk0gIiRsb2NrZmlsZSIKLSAgICAgIGZpCi0gICAgfQotCi0gICAgZXhpdCAkRVhJVF9TVUNDRVNTCi19Ci0KLSRvcHRfaGVscCB8fCB7Ci0gIHRlc3QgY29tcGlsZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQotfQotCi1mdW5jX21vZGVfaGVscCAoKQotewotICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgotICAgIGNhc2UgJG9wdF9tb2RlIGluCi0gICAgICAiIikKLSAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCi0gICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KLSAgICAgICAgZnVuY19oZWxwCi0gICAgICAgIDs7Ci0KLSAgICAgIGNsZWFuKQotICAgICAgICAkRUNITyBcCi0iVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgotCi1SZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgotCi1STSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgJy9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgJy1mJykgdG8gYmUgcGFzc2VkCi10byBSTS4KLQotSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAotd2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgotICAgICAgICA7OwotCi0gICAgICBjb21waWxlKQotICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNvbXBpbGUgQ09NUElMRS1DT01NQU5ELi4uIFNPVVJDRUZJTEUKLQotQ29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIGxpYnJhcnkgb2JqZWN0LgotCi1UaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKLQotICAtbyBPVVRQVVQtRklMRSAgICBzZXQgdGhlIG91dHB1dCBmaWxlIG5hbWUgdG8gT1VUUFVULUZJTEUKLSAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCi0gIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5Ci0gIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQotICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSAnLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCi0gIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSAnLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCi0gIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKLQotQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgJ3N0YW5kYXJkJyBvYmplY3QgZmlsZQotZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KLQotVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCi1TT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggJy5jJyB3aXRoIHRoZQotbGlicmFyeSBvYmplY3Qgc3VmZml4LCAnLmxvJy4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGV4ZWN1dGUpCi0gICAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCi0KLUF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgotCi1UaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKLQotICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAotCi1UaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byAnLWRsb3BlbicKLWZsYWdzLgotCi1JZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCi1pbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKLWRpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgotCi1UaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKLSAgICAgICAgOzsKLQotICAgICAgZmluaXNoKQotICAgICAgICAkRUNITyBcCi0iVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCi0KLUNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCi0KLUVhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCi0KLVRoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQotdGhlICctLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKLSAgICAgICAgOzsKLQotICAgICAgaW5zdGFsbCkKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCi0KLUluc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgotCi1JTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKLWVpdGhlciB0aGUgJ2luc3RhbGwnIG9yICdjcCcgcHJvZ3JhbS4KLQotVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6Ci0KLSAgLWluc3QtcHJlZml4LWRpciBQUkVGSVgtRElSICBVc2UgUFJFRklYLURJUiBhcyBhIHN0YWdpbmcgYXJlYSBmb3IgaW5zdGFsbGF0aW9uCi0KLVRoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5Ci1CU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKLSAgICAgICAgOzsKLQotICAgICAgbGluaykKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCi0KLUxpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KLWNyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCi0KLUxJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQotYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCi0KLVRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgotCi0gIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAotICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKLSAgLWJpbmRpciBCSU5ESVIgICAgc3BlY2lmeSBwYXRoIHRvIGJpbmFyaWVzIGRpcmVjdG9yeSAoZm9yIHN5c3RlbXMgd2hlcmUKLSAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIFBBVEggc2V0dGluZyBhdCBydW50aW1lKQotICAtZGxvcGVuIEZJTEUgICAgICAnLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQotICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scwotICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQotICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQotICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKLSAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCi0gICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAotICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCi0gIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCi0gIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAotICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQotICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKLSAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCi0gIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cwotICAtb2JqZWN0bGlzdCBGSUxFICB1c2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cwotICAtb3MyZGxsbmFtZSBOQU1FICBmb3JjZSBhIHNob3J0IERMTCBuYW1lIG9uIE9TLzIgKG5vIGVmZmVjdCBvbiBvdGhlciBPU2VzKQotICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKLSAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAotICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgotICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCi0gIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCi0gIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0gIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgotICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwotICAtc3RhdGljLWxpYnRvb2wtbGlicwotICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcwotICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQotICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCi0gIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQotICAtV2MsRkxBRwotICAtWGNvbXBpbGVyIEZMQUcgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgotICAtV2wsRkxBRwotICAtWGxpbmtlciBGTEFHICAgICBwYXNzIGxpbmtlci1zcGVjaWZpYyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBsaW5rZXIKLSAgLVhDQ2xpbmtlciBGTEFHICAgcGFzcyBsaW5rLXNwZWNpZmljIEZMQUcgdG8gdGhlIGNvbXBpbGVyIGRyaXZlciAoQ0MpCi0KLUFsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggJy0nKSBhcmUgaWdub3JlZC4KLQotRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluICcubGEnIGFyZQotdHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKLW9iamVjdCBmaWxlcy4KLQotSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKLW9ubHkgbGlicmFyeSBvYmplY3RzICgnLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kICctcnBhdGgnIGlzCi1yZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgotCi1JZiBPVVRQVVQtRklMRSBlbmRzIGluICcuYScgb3IgJy5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCi11c2luZyAnYXInIGFuZCAncmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyAnbGliJy4KLQotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmxvJyBvciAnLiRvYmpleHQnLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQotaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKLSAgICAgICAgOzsKLQotICAgICAgdW5pbnN0YWxsKQotICAgICAgICAkRUNITyBcCi0iVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KLQotUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCi0KLVJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQotKHR5cGljYWxseSAnL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAnLWYnKSB0byBiZSBwYXNzZWQKLXRvIFJNLgotCi1JZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KLU90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKLSAgICAgICAgOzsKLQotICAgICAgKikKLSAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlICckb3B0X21vZGUnIgotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgIGVjaG8KLSAgICAkRUNITyAiVHJ5ICckcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCi19Ci0KLSMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQotaWYgJG9wdF9oZWxwOyB0aGVuCi0gIGlmIHRlc3QgOiA9ICIkb3B0X2hlbHAiOyB0aGVuCi0gICAgZnVuY19tb2RlX2hlbHAKLSAgZWxzZQotICAgIHsKLSAgICAgIGZ1bmNfaGVscCBub2V4aXQKLSAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCi0JZnVuY19tb2RlX2hlbHAKLSAgICAgIGRvbmUKLSAgICB9IHwgJFNFRCAtbiAnMXA7IDIsJHMvXlVzYWdlOi8gIG9yOiAvcCcKLSAgICB7Ci0gICAgICBmdW5jX2hlbHAgbm9leGl0Ci0gICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbwotCWVjaG8KLQlmdW5jX21vZGVfaGVscAotICAgICAgZG9uZQotICAgIH0gfAotICAgICRTRUQgJzFkCi0gICAgICAvXldoZW4gcmVwb3J0aW5nLywvXlJlcG9ydC97Ci0JSAotCWQKLSAgICAgIH0KLSAgICAgICR4Ci0gICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAotICAgICAgL21vcmUgZGV0YWlsZWQgLipNT0RFL2QKLSAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCi0gIGZpCi0gIGV4aXQgJD8KLWZpCi0KLQotIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KLWZ1bmNfbW9kZV9leGVjdXRlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KLSAgICBjbWQ9JG5vbm9wdAotICAgIHRlc3QgLXogIiRjbWQiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCi0KLSAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgotICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbwotICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKLQl8fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMgbm90IGEgZmlsZSIKLQotICAgICAgZGlyPQotICAgICAgY2FzZSAkZmlsZSBpbgotICAgICAgKi5sYSkKLQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZpbGUiCi0JZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0KLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2hlbHAgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0KLQkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KLQlkbG5hbWU9Ci0JbGlicmFyeV9uYW1lcz0KLQlmdW5jX3NvdXJjZSAiJGZpbGUiCi0KLQkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KLQlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgotCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKLQkgICAgZnVuY193YXJuaW5nICInJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggJy1leHBvcnQtZHluYW1pYyciCi0JICBjb250aW51ZQotCWZpCi0KLQlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQotCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgotCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKLQllbHNlCi0JICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgJyRkbG5hbWUnIGluICckZGlyJyBvciAnJGRpci8kb2JqZGlyJyIKLQkgIGZpCi0JZmkKLQk7OwotCi0gICAgICAqLmxvKQotCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KLQlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQk7OwotCi0gICAgICAqKQotCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKLQljb250aW51ZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KLSAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKLSAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0kYWJzZGlyCi0KLSAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCi0gICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgotCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKLSAgICAgIGVsc2UKLQlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKLSAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCi0gICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0kbWFnaWMKLQotICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KLSAgICBhcmdzPQotICAgIGZvciBmaWxlCi0gICAgZG8KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgIC0qIHwgKi5sYSB8ICoubG8gKSA7OwotICAgICAgKikKLQkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCi0JaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgotCSAgZnVuY19zb3VyY2UgIiRmaWxlIgotCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KLQkgIGZpbGU9JHByb2dkaXIvJHByb2dyYW0KLQllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCi0JICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKLQkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCi0JICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgotCSAgZmlsZT0kcHJvZ2Rpci8kcHJvZ3JhbQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCi0gICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCi0gICAgZG9uZQotCi0gICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCi0gICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKLQllY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCi0gICAgICBmaQotICAgICAgJEVDSE8gIiRjbWQkYXJncyIKLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgotCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKLSAgICAgIGZpCi0KLSAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwotICAgICAgZG8KLQlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgotICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCi0JICAgICAgZWxzZQotCQkkbHRfdW5zZXQgJGx0X3ZhcgotCSAgICAgIGZpIgotICAgICAgZG9uZQotCi0gICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCi0gICAgICBleGVjX2NtZD1cJGNtZCRhcmdzCi0gICAgZmkKLX0KLQotdGVzdCBleGVjdXRlID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9Ci0KLQotIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgotZnVuY19tb2RlX2ZpbmlzaCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGxpYnM9Ci0gICAgbGliZGlycz0KLSAgICBhZG1pbmNtZHM9Ci0KLSAgICBmb3Igb3B0IGluICIkbm9ub3B0IiAkezErIiRAIn0KLSAgICBkbwotICAgICAgaWYgdGVzdCAtZCAiJG9wdCI7IHRoZW4KLQlmdW5jX2FwcGVuZCBsaWJkaXJzICIgJG9wdCIKLQotICAgICAgZWxpZiB0ZXN0IC1mICIkb3B0IjsgdGhlbgotCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCi0JICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKLQllbHNlCi0JICBmdW5jX3dhcm5pbmcgIickb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0JZmkKLQotICAgICAgZWxzZQotCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgJyRvcHQnIgotICAgICAgZmkKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLW4gIiRsdF9zeXNyb290IjsgdGhlbgotICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAotICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgotICAgICAgZWxzZQotICAgICAgICBzeXNyb290X2NtZD0KLSAgICAgIGZpCi0KLSAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcwotICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCi0gICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCi0gICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgJz0nIHByZWZpeGVzIGZyb20gJGxpYiIKLSAgICAgICAgZG9uZQotICAgICAgZWxzZQotICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAotICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbwotCSAgJFNFRCAtZSAiJHN5c3Jvb3RfY21kIHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCi0JICAgID4gJHRtcGRpci90bXAtbGEKLQkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKLQlkb25lCi0gICAgICAgICR7Uk19ciAiJHRtcGRpciIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCi0gICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbwotCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KLQkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCi0JICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCi0nIiRjbWQiJyInCi0JZmkKLQlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCi0JICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCi0JICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgotCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBmdW5jX2FwcGVuZCBhZG1pbmNtZHMgIgotICAgICAgICRjbWRzIgotCWZpCi0gICAgICBkb25lCi0gICAgZmkKLQotICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgotICAgICRvcHRfcXVpZXQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCi0KLSAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgotICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKLSAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCi0JJEVDSE8gIiAgICRsaWJkaXIiCi0gICAgICBkb25lCi0gICAgICBlY2hvCi0gICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKLSAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgotICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSAnLUxMSUJESVInIgotICAgICAgZWNobyAiZmxhZyBkdXJpbmcgbGlua2luZyBhbmQgZG8gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IgotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSAnJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgotCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSAnJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLQllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotCWxpYmRpcj1MSUJESVIKLQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0KLQkkRUNITyAiICAgLSB1c2UgdGhlICckZmxhZycgbGlua2VyIGZsYWciCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KLQkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLQllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvICcvZXRjL2xkLnNvLmNvbmYnIgotICAgICAgZmkKLSAgICAgIGVjaG8KLQotICAgICAgZWNobyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCi0gICAgICBjYXNlICRob3N0IGluCi0Jc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKLQkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCi0JICBlY2hvICJwYWdlcy4iCi0JICA7OwotCSopCi0JICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKLQkgIDs7Ci0gICAgICBlc2FjCi0gICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotICAgIGZpCi0gICAgZXhpdCAkRVhJVF9TVUNDRVNTCi19Ci0KLXRlc3QgZmluaXNoID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KLQotCi0jIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgotZnVuY19tb2RlX2luc3RhbGwgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCi0gICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCi0gICAgaWYgdGVzdCAiJFNIRUxMIiA9ICIkbm9ub3B0IiB8fCB0ZXN0IC9iaW4vc2ggPSAiJG5vbm9wdCIgfHwKLSAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KLSAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWMKLSAgICB0aGVuCi0gICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCi0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbm9ub3B0IgotICAgICAgaW5zdGFsbF9wcm9nPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIgotICAgICAgYXJnPSQxCi0gICAgICBzaGlmdAotICAgIGVsc2UKLSAgICAgIGluc3RhbGxfcHJvZz0KLSAgICAgIGFyZz0kbm9ub3B0Ci0gICAgZmkKLQotICAgICMgVGhlIHJlYWwgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBpbnN0YWxsYXRpb24gcHJvZ3JhbS4KLSAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCi0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLSAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSRpbnN0YWxsX3Byb2cKLSAgICBjYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCi0gICAgICAqW1xcXCAvXWNwXCAqKSBpbnN0YWxsX2NwPTogOzsKLSAgICAgICopIGluc3RhbGxfY3A9ZmFsc2UgOzsKLSAgICBlc2FjCi0KLSAgICAjIFdlIG5lZWQgdG8gYWNjZXB0IGF0IGxlYXN0IGFsbCB0aGUgQlNEIGluc3RhbGwgZmxhZ3MuCi0gICAgZGVzdD0KLSAgICBmaWxlcz0KLSAgICBvcHRzPQotICAgIHByZXY9Ci0gICAgaW5zdGFsbF90eXBlPQotICAgIGlzZGlyPWZhbHNlCi0gICAgc3RyaXBtZT0KLSAgICBub19tb2RlPToKLSAgICBmb3IgYXJnCi0gICAgZG8KLSAgICAgIGFyZzI9Ci0gICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KLQlmdW5jX2FwcGVuZCBmaWxlcyAiICRkZXN0IgotCWRlc3Q9JGFyZwotCWNvbnRpbnVlCi0gICAgICBmaQotCi0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1kKSBpc2Rpcj06IDs7Ci0gICAgICAtZikKLQlpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCi0JICBwcmV2PSRhcmcKLQlmaQotCTs7Ci0gICAgICAtZyB8IC1tIHwgLW8pCi0JcHJldj0kYXJnCi0JOzsKLSAgICAgIC1zKQotCXN0cmlwbWU9IiAtcyIKLQljb250aW51ZQotCTs7Ci0gICAgICAtKikKLQk7OwotICAgICAgKikKLQkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCi0JaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0JICBpZiB0ZXN0IFgtbSA9ICJYJHByZXYiICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCi0JICAgIGFyZzI9JGluc3RhbGxfb3ZlcnJpZGVfbW9kZQotCSAgICBub19tb2RlPWZhbHNlCi0JICBmaQotCSAgcHJldj0KLQllbHNlCi0JICBkZXN0PSRhcmcKLQkgIGNvbnRpbnVlCi0JZmkKLQk7OwotICAgICAgZXNhYwotCi0gICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgotICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLSAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLSAgICAgIGlmIHRlc3QgLW4gIiRhcmcyIjsgdGhlbgotCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmcyIgotICAgICAgZmkKLSAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0gICAgZG9uZQotCi0gICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKLQotICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSAnJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKLQotICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCi0gICAgICBpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCi0JZnVuY19xdW90ZV9mb3JfZXZhbCAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIKLQlmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgLW0gJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgICAgZmkKLSAgICBmaQotCi0gICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgotICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCi0JZnVuY19mYXRhbF9oZWxwICJubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKLSAgICAgIGVsc2UKLQlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgotICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3QiCi0gICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0KLSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KLSAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9OgotICAgIGlmICRpc2RpcjsgdGhlbgotICAgICAgZGVzdGRpcj0kZGVzdAotICAgICAgZGVzdG5hbWU9Ci0gICAgZWxzZQotICAgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJGRlc3QiICIiICIuIgotICAgICAgZGVzdGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICAgZGVzdG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0KLSAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KLSAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0Ci0gICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAotCWZ1bmNfZmF0YWxfaGVscCAiJyRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCi0gICAgZmkKLSAgICBjYXNlICRkZXN0ZGlyIGluCi0gICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotICAgICopCi0gICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0JY2FzZSAkZmlsZSBpbgotCSoubG8pIDs7Ci0JKikKLQkgIGZ1bmNfZmF0YWxfaGVscCAiJyRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgotCSAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgotICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFnaWMKLQotICAgIHN0YXRpY2xpYnM9Ci0gICAgZnV0dXJlX2xpYmRpcnM9Ci0gICAgY3VycmVudF9saWJkaXJzPQotICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KLQotICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICouJGxpYmV4dCkKLQkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgotCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKLQk7OwotCi0gICAgICAqLmxhKQotCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKLQlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLQotCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0JZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0KLQlsaWJyYXJ5X25hbWVzPQotCW9sZF9saWJyYXJ5PQotCXJlbGlua19jb21tYW5kPQotCWZ1bmNfc291cmNlICIkZmlsZSIKLQotCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KLQlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgotCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgY3VycmVudF9saWJkaXJzICIgJGxpYmRpciIgOzsKLQkgIGVzYWMKLQllbHNlCi0JICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCi0JICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIGZ1dHVyZV9saWJkaXJzICIgJGxpYmRpciIgOzsKLQkgIGVzYWMKLQlmaQotCi0JZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCi0JZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0JZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgotCi0JaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KLQkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAotCi0JICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCi0JICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0Ci0JICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgotCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKLQkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKLQkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgotCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsICckZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgotCi0JICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgotCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCi0JICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCi0JICBlbHNlCi0JICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCi0JICBmaQotCi0JICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyAnJGZpbGUnIgotCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAotCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayAnXCcnJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJwotCWZpCi0KLQkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgotCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKLQlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLQkgIHJlYWxuYW1lPSQxCi0JICBzaGlmdAotCi0JICBzcmNuYW1lPSRyZWFsbmFtZQotCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSR7cmVhbG5hbWV9VAotCi0JICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCi0JICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKLQkgICAgICAnZXhpdCAkPycKLQkgIHRzdHJpcG1lPSRzdHJpcG1lCi0JICBjYXNlICRob3N0X29zIGluCi0JICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0JICAgIGNhc2UgJHJlYWxuYW1lIGluCi0JICAgICouZGxsLmEpCi0JICAgICAgdHN0cmlwbWU9Ci0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgb3MyKikKLQkgICAgY2FzZSAkcmVhbG5hbWUgaW4KLQkgICAgKl9kbGwuYSkKLQkgICAgICB0c3RyaXBtZT0KLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICBlc2FjCi0JICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KLQkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JwotCSAgZmkKLQotCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0JICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCi0JICAgICMgVHJ5ICdsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSAnbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KLQkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCi0JICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KLQkgICAgZm9yIGxpbmtuYW1lCi0JICAgIGRvCi0JICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCi0JCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKLQkgICAgZG9uZQotCSAgZmkKLQotCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgotCSAgbGliPSRkZXN0ZGlyLyRyZWFsbmFtZQotCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKLQlmaQotCi0JIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCi0JZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0JbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQlpbnN0bmFtZT0kZGlyLyR7bmFtZX1pCi0JZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKLQotCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KLQl0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLQk7OwotCi0gICAgICAqLmxvKQotCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgotCi0JIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgotCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLQkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0bmFtZQotCWVsc2UKLQkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCSAgZGVzdGZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdGZpbGUKLQlmaQotCi0JIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KLQljYXNlICRkZXN0ZmlsZSBpbgotCSoubG8pCi0JICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKLQkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKLQkgIDs7Ci0JKi4kb2JqZXh0KQotCSAgc3RhdGljZGVzdD0kZGVzdGZpbGUKLQkgIGRlc3RmaWxlPQotCSAgOzsKLQkqKQotCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvICckZGVzdGZpbGUnIgotCSAgOzsKLQllc2FjCi0KLQkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KLQl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKLQkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCi0KLQkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KLQlpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0JICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgotCSAgZnVuY19sbzJvICIkZmlsZSIKLQkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAotCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKLQlmaQotCWV4aXQgJEVYSVRfU1VDQ0VTUwotCTs7Ci0KLSAgICAgICopCi0JIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgotCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLQkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0bmFtZQotCWVsc2UKLQkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCSAgZGVzdGZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdGZpbGUKLQlmaQotCi0JIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0Ci0JIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bwotCSMgaW5zdGFsbAotCXN0cmlwcGVkX2V4dD0KLQljYXNlICRmaWxlIGluCi0JICAqLmV4ZSkKLQkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KLQkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgotCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIHN0cmlwcGVkX2V4dD0uZXhlCi0JICAgIGZpCi0JICAgIDs7Ci0JZXNhYwotCi0JIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgotCWNhc2UgJGhvc3QgaW4KLQkqY3lnd2luKiB8ICptaW5ndyopCi0JICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCi0JICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCi0JICAgICAgd3JhcHBlcj0kZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgZWxzZQotCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCi0JICAgICAgd3JhcHBlcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgIGZpCi0JICAgIDs7Ci0JKikKLQkgICAgd3JhcHBlcj0kZmlsZQotCSAgICA7OwotCWVzYWMKLQlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJHdyYXBwZXIiOyB0aGVuCi0JICBub3RpbnN0X2RlcGxpYnM9Ci0JICByZWxpbmtfY29tbWFuZD0KLQotCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgotCi0JICAjIENoZWNrIHRoZSB2YXJpYWJsZXMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHNldC4KLQkgIHRlc3QgLXogIiRnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCAnJHdyYXBwZXInIgotCi0JICBmaW5hbGl6ZT06Ci0JICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCi0JICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KLQkgICAgbGliZGlyPQotCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgotCSAgICAgIGZ1bmNfc291cmNlICIkbGliIgotCSAgICBmaQotCSAgICBsaWJmaWxlPSRsaWJkaXIvYCRFQ0hPICIkbGliIiB8ICRTRUQgJ3MlXi4qLyUlZydgCi0JICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCi0JICAgICAgZnVuY193YXJuaW5nICInJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiAnJGxpYmRpciciCi0JICAgICAgZmluYWxpemU9ZmFsc2UKLQkgICAgZmkKLQkgIGRvbmUKLQotCSAgcmVsaW5rX2NvbW1hbmQ9Ci0JICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCi0KLQkgIG91dHB1dG5hbWU9Ci0JICBpZiB0ZXN0IG5vID0gIiRmYXN0X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBpZiAkZmluYWxpemU7IHRoZW4KLQkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCi0JCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKLQkJZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgICAgICAgIG91dHB1dG5hbWU9JHRtcGRpci8kZmlsZQotCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCi0KLQkgICAgICAgICRvcHRfcXVpZXQgfHwgewotCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKLQkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCi0JICAgICAgICB9Ci0JICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKLQkgICAgICAgICAgZWxzZQotCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgJyRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgotCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCi0JCSAgY29udGludWUKLQkgICAgICAgIGZpCi0JICAgICAgICBmaWxlPSRvdXRwdXRuYW1lCi0JICAgICAgZWxzZQotCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rICckZmlsZSciCi0JICAgICAgZmkKLQkgICAgfQotCSAgZWxzZQotCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCi0JICAgIGZpbGU9YCRFQ0hPICIkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFNFRCAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKLQkgIGZpCi0JZmkKLQotCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgotCSMgb25lIGFueXdheQotCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgotCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKLQkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCi0JICAqLmV4ZToqLmV4ZSkKLQkgICAgIyB0aGlzIGlzIG9rCi0JICAgIDs7Ci0JICAqLmV4ZToqKQotCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCi0JICAgIDs7Ci0JICAqOiouZXhlKQotCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRkZXN0ZmlsZSIKLQkgICAgZGVzdGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0JZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2dcJHN0cmlwbWUgXCRmaWxlIFwkZGVzdGZpbGUiICdleGl0ICQ/JwotCSRvcHRfZHJ5X3J1biB8fCBpZiB0ZXN0IC1uICIkb3V0cHV0bmFtZSI7IHRoZW4KLQkgICR7Uk19ciAiJHRtcGRpciIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCi0gICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLSAgICAgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0KLSAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KLSAgICAgIG9sZGxpYj0kZGVzdGRpci8kbmFtZQotICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgICB0b29sX29sZGxpYj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0KLSAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgotCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICR0b29sX29sZGxpYiIgJ2V4aXQgJD8nCi0gICAgICBmaQotCi0gICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCi0gICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKLSAgICBkb25lCi0KLSAgICB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiICYmIFwKLSAgICAgIGZ1bmNfd2FybmluZyAicmVtZW1iZXIgdG8gcnVuICckcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgotCi0gICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KLSAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCi0gICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgotICAgICAgZXhlY19jbWQ9JyRTSEVMTCAiJHByb2dwYXRoIiAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCi0gICAgZWxzZQotICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgZmkKLX0KLQotdGVzdCBpbnN0YWxsID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9Ci0KLQotIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKLSMgRXh0cmFjdCBzeW1ib2xzIGZyb20gZGxwcmVmaWxlcyBhbmQgY3JlYXRlICR7b3V0cHV0bmFtZX1TLm8gd2l0aAotIyBhIGRscHJlb3BlbiBzeW1ib2wgdGFibGUuCi1mdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIG15X291dHB1dG5hbWU9JDEKLSAgICBteV9vcmlnaW5hdG9yPSQyCi0gICAgbXlfcGljX3A9JHszLWZhbHNlfQotICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8ICRTRUQgJ3MlW15hLXpBLVowLTldJV8lZydgCi0gICAgbXlfZGxzeW1zPQotCi0gICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQlteV9kbHN5bXM9JHtteV9vdXRwdXRuYW1lfVMuYwotICAgICAgZWxzZQotCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCi0gICAgICBjYXNlICRteV9kbHN5bXMgaW4KLSAgICAgICIiKSA7OwotICAgICAgKi5jKQotCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCi0Jbmxpc3Q9JG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUubm0KLQotCWZ1bmNfc2hvd19ldmFsICIkUk0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCi0KLQkjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgotCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKLQotCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciAnJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KLS8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTiAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiBcIkNcIiB7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSB8fCAoX19HTlVDX18gPiA0KSkKLSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgotI2VuZGlmCi0KLS8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQotICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSNlbGlmIGRlZmluZWQgX19vc2ZfXwotLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCi0jIGRlZmluZSBMVF9ETFNZTV9DT05TVAotI2Vsc2UKLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0Ci0jZW5kaWYKLQotI2RlZmluZSBTVFJFUShzMSwgczIpIChzdHJjbXAgKChzMSksIChzMikpID09IDApCi0KLS8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCi0iCi0KLQlpZiB0ZXN0IHllcyA9ICIkZGxzZWxmIjsgdGhlbgotCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJG91dHB1dCciCi0KLQkgICRvcHRfZHJ5X3J1biB8fCBlY2hvICc6IEBQUk9HUkFNQCAnID4gIiRubGlzdCIKLQotCSAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgotCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAotCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCi0JICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gJyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgotCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotCSAgZG9uZQotCi0JICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgIH0KLQkgIGZpCi0KLQkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCi0JICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKLQkgICAgfQotCSAgZmkKLQotCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKLQkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwCi0JICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgJFJNICRleHBvcnRfc3ltYm9scwotCSAgICAgIGV2YWwgIiRTRUQgLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKLQkgICAgICBjYXNlICRob3N0IGluCi0JICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCi0gICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLSAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0JICAgICAgICA7OwotCSAgICAgIGVzYWMKLQkgICAgfQotCSAgZWxzZQotCSAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgIGV2YWwgIiRTRUQgLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKLQkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCi0JICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0JICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLQkgICAgICAgICAgOzsKLQkgICAgICBlc2FjCi0JICAgIH0KLQkgIGZpCi0JZmkKLQotCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCi0JICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tICckZGxwcmVmaWxlJyIKLQkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCi0JICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotICAgICAgICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCi0JICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCi0JICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCi0JICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgotCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKLQkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPQotCSAgICAgICAgaWYgdGVzdCAtbiAiJGN1cnJfbGFmaWxlIiAmJiBmdW5jX2xhbGliX3AgIiRjdXJyX2xhZmlsZSI7IHRoZW4KLQkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKLQkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAotCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSI7IHRoZW4KLQkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKLQkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgICAgICAgICAgZWxzZQotCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KLQkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCi0JICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0Ci0JICAgICAgICAgIGZpCi0JICAgICAgICBmaQotCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbGJhc2VuYW1lIjsgdGhlbgotCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCi0JICAgICAgICAgIGVsc2UKLQkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCi0JICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKLQkgICAgICAgICAgZmkKLQkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAotCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCi0JICAgICAgICB9Ci0JICAgICAgZWxzZSAjIG5vdCBhbiBpbXBvcnQgbGliCi0JICAgICAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLQkgICAgICAgIH0KLQkgICAgICBmaQotCSAgICA7OwotCSAgICAqKQotCSAgICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotCSAgICAgIH0KLQkgICAgOzsKLSAgICAgICAgICBlc2FjCi0JZG9uZQotCi0JJG9wdF9kcnlfcnVuIHx8IHsKLQkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KLQkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCi0KLQkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCi0JICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKLQkgIGZpCi0KLQkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0JICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKLQkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJc29ydCAtayAzCi0JICAgICAgZWxzZQotCQlzb3J0ICsyCi0JICAgICAgZmkgfAotCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCi0JICBmaQotCi0JICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKLQkgIGVsc2UKLQkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0JICBmaQotCi0JICBmdW5jX3Nob3dfZXZhbCAnJFJNICIke25saXN0fUkiJwotCSAgaWYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfdG9faW1wb3J0IjsgdGhlbgotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiJyA8ICIkbmxpc3QiUyA+ICIkbmxpc3QiSScKLQkgIGZpCi0KLQkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCi0KLS8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgdm9pZCAqYWRkcmVzczsKLX0gbHRfZGxzeW1saXN0OwotZXh0ZXJuIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAotbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdO1wKLSIKLQotCSAgaWYgdGVzdCAtcyAiJG5saXN0Ikk7IHRoZW4KLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLXN0YXRpYyB2b2lkIGx0X3N5bWluaXQodm9pZCkKLXsKLSAgTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0ICpzeW1ib2wgPSBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOwotICBmb3IgKDsgc3ltYm9sLT5uYW1lOyArK3N5bWJvbCkKLSAgICB7IgotCSAgICAkU0VEICdzLy4qLyAgICAgIGlmIChTVFJFUSAoc3ltYm9sLT5uYW1lLCBcIiZcIikpIHN5bWJvbC0+YWRkcmVzcyA9ICh2b2lkICopIFwmJjsvJyA8ICIkbmxpc3QiSSA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLSAgICB9Ci19IgotCSAgZmkKLQkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCi1MVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKLWx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Ci17IHtcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDB9LCIKLQotCSAgaWYgdGVzdCAtcyAiJG5saXN0Ikk7IHRoZW4KLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLSAge1wiQElOSVRAXCIsICh2b2lkICopICZsdF9zeW1pbml0fSwiCi0JICBmaQotCi0JICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KLQkgIG5vKQotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKLQkgICAgOzsKLQkgICopCi0JICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0JICAgIDs7Ci0JICBlc2FjCi0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotICB7MCwgKHZvaWQgKikgMH0KLX07Ci0KLS8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLwotI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAotc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKLSAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWZcCi0iCi0JfSAjICEkb3B0X2RyeV9ydW4KLQotCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KLQljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KLQkqIiAtc3RhdGljICIqKSA7OwotCSopCi0JICBjYXNlICRob3N0IGluCi0JICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKLQkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcwotCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQotCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCi0JICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgotCSAgKi0qLWZyZWVic2QyLip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKLQkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OwotCSAgKi0qLWhwdXgqKQotCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OwotCSAgKikKLQkgICAgJG15X3BpY19wICYmIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotCXN5bXRhYl9jZmxhZ3M9Ci0JZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCi0JICBjYXNlICRhcmcgaW4KLQkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OwotCSAgKikgZnVuY19hcHBlbmQgc3ltdGFiX2NmbGFncyAiICRhcmciIDs7Ci0JICBlc2FjCi0JZG9uZQotCi0JIyBOb3cgY29tcGlsZSB0aGUgZHluYW1pYyBzeW1ib2wgZmlsZS4KLQlmdW5jX3Nob3dfZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDJHN5bXRhYl9jZmxhZ3MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSAiJG15X2Rsc3ltcyIpJyAnZXhpdCAkPycKLQotCSMgQ2xlYW4gdXAgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLQlmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiJG5saXN0IiAiJHtubGlzdH1TIiAiJHtubGlzdH1UIiAiJHtubGlzdH1JIicKLQotCSMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCi0Jc3ltZmlsZW9iaj0kb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0Ci0JY2FzZSAkaG9zdCBpbgotCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgotCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAotCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCi0JICBlbHNlCi0JICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKLQkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCi0JICBmaQotCSAgOzsKLQkqKQotCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAotCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgKikKLQlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgJyRteV9kbHN5bXMnIgotCTs7Ci0gICAgICBlc2FjCi0gICAgZWxzZQotICAgICAgIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KLSAgICAgICMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKLSAgICAgICMgcmVhbGx5IHdhcyByZXF1aXJlZC4KLQotICAgICAgIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KLSAgICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAotICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKLSAgICBmaQotfQotCi0jIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCi0jIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKLSMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0jIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCi1mdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAotICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgotfQotCi0jIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKLSMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgotIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKLSMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KLWZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQotewotICAkZGVidWdfY21kCi0KLSAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKLSAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgotfQotCi0jIGZ1bmNfd2luMzJfbGliaWQgYXJnCi0jIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKLSMKLSMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicwotIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKLSMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgotIyBEZXNwaXRlIHRoZSBuYW1lLCBhbHNvIGRlYWwgd2l0aCA2NCBiaXQgYmluYXJpZXMuCi1mdW5jX3dpbjMyX2xpYmlkICgpCi17Ci0gICRkZWJ1Z19jbWQKLQotICB3aW4zMl9saWJpZF90eXBlPXVua25vd24KLSAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKLSAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgotICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKLSAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCi0gICAgOzsKLSAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYwotICAgICMgS2VlcCB0aGUgZWdyZXAgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ELgotICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKLSAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgY2FzZSAkbm1faW50ZXJmYWNlIGluCi0gICAgICAiTVMgZHVtcGJpbiIpCi0JaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgfHwKLQkgICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIKLQl0aGVuCi0JICB3aW4zMl9ubXJlcz1pbXBvcnQKLQllbHNlCi0JICB3aW4zMl9ubXJlcz0KLQlmaQotCTs7Ci0gICAgICAqKQotCWZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQl3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAotCSAgJFNFRCAtbiAtZSAnCi0JICAgIDEsMTAwewotCQkvIEkgL3sKLQkJICAgIHN8Lip8aW1wb3J0fAotCQkgICAgcAotCQkgICAgcQotCQl9Ci0JICAgIH0nYAotCTs7Ci0gICAgICBlc2FjCi0gICAgICBjYXNlICR3aW4zMl9ubXJlcyBpbgotICAgICAgaW1wb3J0KikgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCI7OwotICAgICAgKikgICAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIHN0YXRpYyI7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgOzsKLSAgKkRMTCopCi0gICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKLSAgICA7OwotICAqZXhlY3V0YWJsZSopICMgYnV0IHNoZWxsIHNjcmlwdHMgYXJlICJleGVjdXRhYmxlIiB0b28uLi4KLSAgICBjYXNlICR3aW4zMl9maWxlcmVzIGluCi0gICAgKk1TXCBXaW5kb3dzXCBQRVwgSW50ZWwqKQotICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IERMTCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgJEVDSE8gIiR3aW4zMl9saWJpZF90eXBlIgotfQotCi0jIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiBBUkcKLSMKLSMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKLSMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCi0jIGltcG9ydCBsaWJyYXJ5IEFSRy4KLSMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQotIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKLSMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0Ci1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCi19Ci0KLSMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgU0VDVElPTl9OQU1FIExJQk5BTUVzCi0jCi0jIFRoZSBpcyB0aGUgY29yZSBvZiBhIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIG9mIGEKLSMgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUKLSMgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5IExJQk5BTUUuCi0jCi0jIFNFQ1RJT05fTkFNRSBpcyBlaXRoZXIgLmlkYXRhJDYgb3IgLmlkYXRhJDcsIGRlcGVuZGluZwotIyBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyIHRoYXQgY3JlYXRlZCB0aGUgaW1wbGliLgotIwotIyBFY2hvcyB0aGUgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUKLSMgc3BlY2lmaWVkIGltcG9ydCBsaWJyYXJ5LgotZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCi0gICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAotICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKLSAgICAgICMgUGxhY2UgbWFya2VyIGF0IGJlZ2lubmluZyBvZiBhcmNoaXZlIG1lbWJlciBkbGxuYW1lIHNlY3Rpb24KLSAgICAgIHMvLiovPT09PU1BUks9PT09LwotICAgICAgcAotICAgICAgZAotICAgIH0KLSAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0Ci0gICAgIyBhcmUgYWx3YXlzIHVuaW50ZXJlc3RpbmcKLSAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKLSAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKLSAgICAjIEVuc3VyZSBtYXJrZXIgaXMgcHJpbnRlZAotICAgIC9ePT09PU1BUks9PT09L3AKLSAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycwotICAgIC9eLlx7NDNcfS8hZAotICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCi0gICAgcy9eLlx7NDNcfS8vJyB8Ci0gICAgJFNFRCAtbiAnCi0gICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCi0gICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCi0gICAgICBICi0gICAgICAkIGIgcGFyYQotICAgICAgYgotICAgICAgOnBhcmEKLSAgICAgIHgKLSAgICAgIHMvXG4vL2cKLSAgICAgICMgUmVtb3ZlIHRoZSBtYXJrZXIKLSAgICAgIHMvXj09PT1NQVJLPT09PS8vCi0gICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCi0gICAgICBzL1tcLiBcdF0qJC8vCi0gICAgICAjIFByaW50Ci0gICAgICAvLi9wJyB8Ci0gICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCi0gICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKLSAgICAjIGFyY2hpdmUgdGhhdCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKLSAgICAjIGFsbCB0aG9zZSB0aGF0IGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKLSAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKLSAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgotICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5Ci0gICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQotICAgICMgYSAnLicuCi0gICAgIwotICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCi0gICAgJFNFRCAtZSAnL15cLi9kOy9eLlwuL2Q7cScKLX0KLQotIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCi0jIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCi0jIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAotIyBpbXBvcnQgbGlicmFyeSBBUkcuCi0jCi0jIFRoaXMgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgZm9yIHVzZSB3aGVuICRETExUT09MCi0jIGRvZXMgbm90IHN1cHBvcnQgdGhlIC0taWRlbnRpZnktc3RyaWN0IG9wdGlvbi4KLSMgSW52b2tlZCBieSBldmFsJ2luZyB0aGUgbGlidG9vbCB2YXJpYWJsZQotIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLSMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKLSMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0Ci1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKLXsKLSAgJGRlYnVnX2NtZAotCi0gIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIjsgdGhlbgotICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKLSAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAotICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiOyB0aGVuCi0gICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKLSAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAotICBlbHNlCi0gICAgIyB1bmtub3duCi0gICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9Ci0gIGZpCi19Ci0KLQotIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCi1mdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZfZXhfYW5fYXJfZGlyPSQxOyBzaGlmdAotICAgIGZfZXhfYW5fYXJfb2xkbGliPSQxCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiI7IHRoZW4KLSAgICAgIGxvY2tmaWxlPSRmX2V4X2FuX2FyX29sZGxpYi5sb2NrCi0gICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCi0JZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKLQlzbGVlcCAyCi0gICAgICBkb25lCi0gICAgZmkKLSAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiBcCi0JCSAgICdzdGF0PSQ/OyBybSAtZiAiJGxvY2tmaWxlIjsgZXhpdCAkc3RhdCcKLSAgICBpZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIjsgdGhlbgotICAgICAgJG9wdF9kcnlfcnVuIHx8IHJtIC1mICIkbG9ja2ZpbGUiCi0gICAgZmkKLSAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgotICAgICA6Ci0gICAgZWxzZQotICAgICAgZnVuY19mYXRhbF9lcnJvciAib2JqZWN0IG5hbWUgY29uZmxpY3RzIGluIGFyY2hpdmU6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiCi0gICAgZmkKLX0KLQotCi0jIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgotZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgbXlfZ2VudG9wPSQxOyBzaGlmdAotICAgIG15X29sZGxpYnM9JHsxKyIkQCJ9Ci0gICAgbXlfb2xkb2Jqcz0KLSAgICBteV94bGliPQotICAgIG15X3hhYnM9Ci0gICAgbXlfeGRpcj0KLQotICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbwotICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgotICAgICAgY2FzZSAkbXlfeGxpYiBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0kbXlfeGxpYiA7OwotCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OwotICAgICAgZXNhYwotICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCi0gICAgICBteV94bGliPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotICAgICAgbXlfeGxpYl91PSRteV94bGliCi0gICAgICB3aGlsZSA6OyBkbwotICAgICAgICBjYXNlICIgJGV4dHJhY3RlZF9hcmNoaXZlcyAiIGluCi0JKiIgJG15X3hsaWJfdSAiKikKLQkgIGZ1bmNfYXJpdGggJGV4dHJhY3RlZF9zZXJpYWwgKyAxCi0JICBleHRyYWN0ZWRfc2VyaWFsPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgbXlfeGxpYl91PWx0JGV4dHJhY3RlZF9zZXJpYWwtJG15X3hsaWIgOzsKLQkqKSBicmVhayA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGV4dHJhY3RlZF9hcmNoaXZlcz0iJGV4dHJhY3RlZF9hcmNoaXZlcyAkbXlfeGxpYl91IgotICAgICAgbXlfeGRpcj0kbXlfZ2VudG9wLyRteV94bGliX3UKLQotICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKLQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgKi1kYXJ3aW4qKQotCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKLQkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KLQkkb3B0X2RyeV9ydW4gfHwgewotCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCi0JICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/Ci0JICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicwotCSAgZGFyd2luX2N1cmRpcj1gcHdkYAotCSAgZnVuY19iYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlIgotCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgIGRhcndpbl9hcmNoZXM9YCRMSVBPIC1pbmZvICIkZGFyd2luX2FyY2hpdmUiIDI+L2Rldi9udWxsIHwgJEdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbCB8fCB0cnVlYAotCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCi0JICAgIGRhcndpbl9hcmNoZXM9YCRFQ0hPICIkZGFyd2luX2FyY2hlcyIgfCAkU0VEIC1lICdzLy4qYXJlOi8vJ2AKLQkgICAgZGFyd2luX2FyY2g9Ci0JICAgIGZ1bmNfdmVyYm9zZSAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCi0JICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXM7IGRvCi0JICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2giCi0JICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaC8kZGFyd2luX2Jhc2VfYXJjaGl2ZSIgIiRkYXJ3aW5fYXJjaGl2ZSIKLQkgICAgICBjZCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoIgotCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIgotCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKLQkgICAgICAkUk0gInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaC8kZGFyd2luX2Jhc2VfYXJjaGl2ZSIKLQkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCi0gICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKLQkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJHNlZF9iYXNlbmFtZSIgfCBzb3J0IC11YAotCSAgICBkYXJ3aW5fZmlsZT0KLQkgICAgZGFyd2luX2ZpbGVzPQotCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KLQkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCi0JICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKLQkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKLQkgICAgJFJNIC1yZiB1bmZhdC0kJAotCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKLQkgIGVsc2UKLQkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgotCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKLQkgIGZpICMgJGRhcndpbl9hcmNoZXMKLQl9ICMgISRvcHRfZHJ5X3J1bgotCTs7Ci0gICAgICAqKQotICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKLQk7OwotICAgICAgZXNhYwotICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCi0gICAgZG9uZQotCi0gICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0kbXlfb2xkb2JqcwotfQotCi0KLSMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KLSMKLSMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgotIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCi0jIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3Ci0jIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KLSMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcwotIyBzZXQgdGhlcmVpbi4KLSMKLSMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgotIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKLSMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IHdoZXJlIGl0IGlzIHN0b3JlZCBpcwotIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCi0jIGJlaGF2aW9yLgotZnVuY19lbWl0X3dyYXBwZXIgKCkKLXsKLQlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPSR7MS1ub30KLQotCSRFQ0hPICJcCi0jISAkU0hFTEwKLQotIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgotIwotIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKLSMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgotIwotIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JwotCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJwotICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCi1maQotQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgotCi0jIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCi1pZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6Ci0gIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJwotICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCi1lbHNlCi0gICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KLSAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgotICAgIGZpbGU9XCJcJDBcIiIKLQotICAgIHFFQ0hPPWAkRUNITyAiJEVDSE8iIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgJEVDSE8gIlwKLQotIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgotZnVuY19mYWxsYmFja19lY2hvICgpCi17Ci0gIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCi1cJDEKLV9MVEVDSE9fRU9GJwotfQotICAgIEVDSE89XCIkcUVDSE9cIgotICBmaQotCi0jIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bwotIyB0aGUgbGlidG9vbCB3cmFwcGVyLCAoYikgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZSB3cmFwcGVyCi0jIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gdGhhdCBpcyB1c2VkIG9ubHkgb24KLSMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCi0jIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHRoYXQgbWF0Y2gKLSMgdGhpcyBwYXR0ZXJuKS4KLSMKLSMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZAotIyAtLWx0LWR1bXAtc2NyaXB0LiBUaGVyZSBpcywgZGVsaWJlcmF0ZWx5LCBubyAtLWx0LWhlbHAuCi0jCi0jIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHBhcnNpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIHRoZQotIyBzY3JpcHQncyAkMCB2YWx1ZSwgZm9sbG93ZWQgYnkgIiRAIi4KLWx0X29wdGlvbl9kZWJ1Zz0KLWZ1bmNfcGFyc2VfbHRfb3B0aW9ucyAoKQotewotICBsdF9zY3JpcHRfYXJnMD1cJDAKLSAgc2hpZnQKLSAgZm9yIGx0X29wdAotICBkbwotICAgIGNhc2UgXCJcJGx0X29wdFwiIGluCi0gICAgLS1sdC1kZWJ1ZykgbHRfb3B0aW9uX2RlYnVnPTEgOzsKLSAgICAtLWx0LWR1bXAtc2NyaXB0KQotICAgICAgICBsdF9kdW1wX0Q9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyUvW14vXSokJSUnXGAKLSAgICAgICAgdGVzdCBcIlhcJGx0X2R1bXBfRFwiID0gXCJYXCRsdF9zY3JpcHRfYXJnMFwiICYmIGx0X2R1bXBfRD0uCi0gICAgICAgIGx0X2R1bXBfRj1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJV4uKi8lJSdcYAotICAgICAgICBjYXQgXCJcJGx0X2R1bXBfRC9cJGx0X2R1bXBfRlwiCi0gICAgICAgIGV4aXQgMAotICAgICAgOzsKLSAgICAtLWx0LSopCi0gICAgICAgIFwkRUNITyBcIlVucmVjb2duaXplZCAtLWx0LSBvcHRpb246ICdcJGx0X29wdCdcIiAxPiYyCi0gICAgICAgIGV4aXQgMQotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6Ci0gIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0gICAgZWNobyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFKSAkVkVSU0lPTlwiIDE+JjIKLSAgZmkKLX0KLQotIyBVc2VkIHdoZW4gLS1sdC1kZWJ1Zy4gUHJpbnRzIGl0cyBhcmd1bWVudHMgdG8gc3Rkb3V0Ci0jIChyZWRpcmVjdGlvbiBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcikKLWZ1bmNfbHRfZHVtcF9hcmdzICgpCi17Ci0gIGx0X2R1bXBfYXJnc19OPTE7Ci0gIGZvciBsdF9hcmcKLSAgZG8KLSAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCi0gICAgbHRfZHVtcF9hcmdzX049XGBleHByIFwkbHRfZHVtcF9hcmdzX04gKyAxXGAKLSAgZG9uZQotfQotCi0jIENvcmUgZnVuY3Rpb24gZm9yIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCi1mdW5jX2V4ZWNfcHJvZ3JhbV9jb3JlICgpCi17Ci0iCi0gIGNhc2UgJGhvc3QgaW4KLSAgIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCi0gICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0gICAgJEVDSE8gIlwKLSAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0gICAgICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCi0gICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgotICAgICAgZmkKLSAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQotIgotICAgIDs7Ci0KLSAgKikKLSAgICAkRUNITyAiXAotICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSAgICAgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKLSAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCi0gICAgICBmaQotICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9Ci0iCi0gICAgOzsKLSAgZXNhYwotICAkRUNITyAiXAotICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgotICAgICAgZXhpdCAxCi19Ci0KLSMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgotIyBTdHJpcHMgb3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFjZSBmcm9tIFwkQCBhbmQKLSMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCi1mdW5jX2V4ZWNfcHJvZ3JhbSAoKQotewotICBjYXNlIFwiIFwkKiBcIiBpbgotICAqXFwgLS1sdC0qKQotICAgIGZvciBsdF93cl9hcmcKLSAgICBkbwotICAgICAgY2FzZSBcJGx0X3dyX2FyZyBpbgotICAgICAgLS1sdC0qKSA7OwotICAgICAgKikgc2V0IHggXCJcJEBcIiBcIlwkbHRfd3JfYXJnXCI7IHNoaWZ0OzsKLSAgICAgIGVzYWMKLSAgICAgIHNoaWZ0Ci0gICAgZG9uZSA7OwotICBlc2FjCi0gIGZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwkQFwifQotfQotCi0gICMgUGFyc2Ugb3B0aW9ucwotICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9Ci0KLSAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KLSAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKLSAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgotCi0gICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgotICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCi0gIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KLSAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKlwkJSUnXGAKLQotICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KLSAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCi0gICAgICBjYXNlIFwiXCRkZXN0ZGlyXCIgaW4KLSAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OwotICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OwotICAgICAgZXNhYwotICAgIGZpCi0KLSAgICBmaWxlPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJV4uKi8lJSdcYAotICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCi0gIGRvbmUKLQotICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KLSAgIyB0aGUgY3dyYXBwZXIuCi0gIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9hcmcxCi0gIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCi0gICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJwotICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCi0gICAgICB0aGlzZGlyPVxgcHdkXGAKLSAgICBmaQotICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgotICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgotICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJcJHRoaXNkaXJcIiB8ICRTRUQgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OwotICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OwotICAgIGVzYWMKLSAgZmkKLQotICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgotICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCi0gIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCi0iCi0KLQlpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIjsgdGhlbgotCSAgJEVDSE8gIlwKLSAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAotICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgotCi0gIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAotICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJFNFRCAxcVxgOyBcXAotICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCi0KLSAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgotCi0gICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KLSAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCi0gICAgZWxzZQotICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi0gICAgZmkiCi0KLQkgICRFQ0hPICJcCi0KLSAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQotICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KLSAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgotICAgICAgZWxzZQotCVwkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCi0JJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi0JZXhpdCAxCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKLSAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKLSAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQotICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotICBmaSIKLQllbHNlCi0JICAkRUNITyAiXAotICBwcm9ncmFtPSckb3V0cHV0bmFtZScKLSAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKLSIKLQlmaQotCi0JJEVDSE8gIlwKLQotICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgotCi0JIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KLQkjCi0JIyBGaXggdGhlIERMTCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uICBEbyB0aGlzIGJlZm9yZSBwcmVwZW5kaW5nCi0JIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKLQkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCi0JaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCi0JICAkRUNITyAiXAotICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICi0gICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKLSIKLQlmaQotCi0JIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCi0JaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgotCSAgJEVDSE8gIlwKLSAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgotICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKLQotICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgotICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCi0gICAgJHNobGlicGF0aF92YXI9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgfCAkU0VEICdzLzo6KlwkLy8nXGAKLQotICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgotIgotCWZpCi0KLQkkRUNITyAiXAotICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCi0gICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KLSAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiAnXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCi0gICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCi0gICAgXCRFQ0hPIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKLSAgICBleGl0IDEKLSAgZmkKLWZpXAotIgotfQotCi0KLSMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYwotIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0Ci0jIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQotIyBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlIHNldCB0aGVyZWluLgotZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQotewotCWNhdCA8PEVPRgotCi0vKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0gICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KLQotICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCi0gICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCi0KLSAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KLSovCi1FT0YKLQkgICAgY2F0IDw8IkVPRiIKLSNpZmRlZiBfTVNDX1ZFUgotIyBkZWZpbmUgX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaWZkZWYgX01TQ19WRVIKLSMgaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0jIGluY2x1ZGUgPHByb2Nlc3MuaD4KLSMgaW5jbHVkZSA8aW8uaD4KLSNlbHNlCi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotIyBpbmNsdWRlIDxzdGRpbnQuaD4KLSMgaWZkZWYgX19DWUdXSU5fXwotIyAgaW5jbHVkZSA8aW8uaD4KLSMgZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLSNkZWZpbmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEpLCAoczIpKSA9PSAwKQotCi0vKiBkZWNsYXJhdGlvbnMgb2Ygbm9uLUFOU0kgZnVuY3Rpb25zICovCi0jaWYgZGVmaW5lZCBfX01JTkdXMzJfXwotIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KLWludCBfcHV0ZW52IChjb25zdCBjaGFyICopOwotIyBlbmRpZgotI2VsaWYgZGVmaW5lZCBfX0NZR1dJTl9fCi0jIGlmZGVmIF9fU1RSSUNUX0FOU0lfXwotY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLWludCBwdXRlbnYgKGNoYXIgKik7Ci1pbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLSMgZW5kaWYKLS8qICNlbGlmIGRlZmluZWQgb3RoZXJfcGxhdGZvcm0gfHwgZGVmaW5lZCAuLi4gKi8KLSNlbmRpZgotCi0vKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KLSNpZiBkZWZpbmVkIF9NU0NfVkVSCi0jIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCi0jIGRlZmluZSBzdGF0ICAgIF9zdGF0Ci0jIGRlZmluZSBjaG1vZCAgIF9jaG1vZAotIyBkZWZpbmUgZ2V0Y3dkICBfZ2V0Y3dkCi0jIGRlZmluZSBwdXRlbnYgIF9wdXRlbnYKLSMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKLSNlbGlmIGRlZmluZWQgX19NSU5HVzMyX18KLSMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKLSMgZGVmaW5lIHN0YXQgICAgX3N0YXQKLSMgZGVmaW5lIGNobW9kICAgX2NobW9kCi0jIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKLSMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgotI2VsaWYgZGVmaW5lZCBfX0NZR1dJTl9fCi0jIGRlZmluZSBIQVZFX1NFVEVOVgotIyBkZWZpbmUgRk9QRU5fV0IgIndiIgotLyogI2VsaWYgZGVmaW5lZCBvdGhlciBwbGF0Zm9ybXMgLi4uICovCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgUEFUSF9NQVgKLSMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKLSNlbGlmIGRlZmluZWQgTUFYUEFUSExFTgotIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCi0jZWxzZQotIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0Ci0jZW5kaWYKLQotI2lmbmRlZiBTX0lYT1RICi0jIGRlZmluZSBTX0lYT1RIIDAKLSNlbmRpZgotI2lmbmRlZiBTX0lYR1JQCi0jIGRlZmluZSBTX0lYR1JQIDAKLSNlbmRpZgotCi0vKiBwYXRoIGhhbmRsaW5nIHBvcnRhYmlsaXR5IG1hY3JvcyAqLwotI2lmbmRlZiBESVJfU0VQQVJBVE9SCi0jIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJwotIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19NU0RPU19fIHx8IGRlZmluZWQgX19ESkdQUF9fIHx8IFwKLSAgZGVmaW5lZCBfX09TMl9fCi0jIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQotIyBkZWZpbmUgRk9QRU5fV0IgIndiIgotIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCi0jICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKLSMgZW5kaWYKLSMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKLSMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCi0jIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQotI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCi0jIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCi0JKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCi0jZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCi0KLSNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgotIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQotI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLwotIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCi0jZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLwotCi0jaWZuZGVmIEZPUEVOX1dCCi0jIGRlZmluZSBGT1BFTl9XQiAidyIKLSNlbmRpZgotI2lmbmRlZiBfT19CSU5BUlkKLSMgZGVmaW5lIF9PX0JJTkFSWSAwCi0jZW5kaWYKLQotI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQotI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCi0gIGlmIChzdGFsZSkgeyBmcmVlIChzdGFsZSk7IHN0YWxlID0gMDsgfSBcCi19IHdoaWxlICgwKQotCi0jaWYgZGVmaW5lZCBMVF9ERUJVR1dSQVBQRVIKLXN0YXRpYyBpbnQgbHRfZGVidWcgPSAxOwotI2Vsc2UKLXN0YXRpYyBpbnQgbHRfZGVidWcgPSAwOwotI2VuZGlmCi0KLWNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9ICJsaWJ0b29sLXdyYXBwZXIiOyAvKiBpbiBjYXNlIHhzdHJkdXAgZmFpbHMgKi8KLQotdm9pZCAqeG1hbGxvYyAoc2l6ZV90IG51bSk7Ci1jaGFyICp4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpOwotY29uc3QgY2hhciAqYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKTsKLWNoYXIgKmZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcik7Ci1jaGFyICpjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpOwotaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7Ci1pbnQgY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7Ci1jaGFyICpzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KTsKLXZvaWQgbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci12b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKLXN0YXRpYyBjb25zdCBjaGFyICpub25udWxsIChjb25zdCBjaGFyICpzKTsKLXN0YXRpYyBjb25zdCBjaGFyICpub25lbXB0eSAoY29uc3QgY2hhciAqcyk7Ci12b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwotY2hhciAqbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKTsKLXZvaWQgbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7Ci12b2lkIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwotY2hhciAqKnByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KTsKLXZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUgKmYpOwotRU9GCi0KLQkgICAgY2F0IDw8RU9GCi0jaWYgX19HTlVDX18gPCA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgNSkKLSMgZGVmaW5lIGV4dGVybmFsbHlfdmlzaWJsZSB2b2xhdGlsZQotI2Vsc2UKLSMgZGVmaW5lIGV4dGVybmFsbHlfdmlzaWJsZSBfX2F0dHJpYnV0ZV9fKChleHRlcm5hbGx5X3Zpc2libGUpKSB2b2xhdGlsZQotI2VuZGlmCi1leHRlcm5hbGx5X3Zpc2libGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKLWNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKLUVPRgotCi0JICAgIGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgotCSAgICAgIGNhdCA8PEVPRgotY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7Ci1FT0YKLQkgICAgZWxzZQotCSAgICAgIGNhdCA8PCJFT0YiCi1jb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOwotRU9GCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCi0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCi0JICAgICAgY2F0IDw8RU9GCi1jb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOwotRU9GCi0JICAgIGVsc2UKLQkgICAgICBjYXQgPDwiRU9GIgotY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7Ci1FT0YKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIjsgdGhlbgotCSAgICAgIGNhdCA8PEVPRgotY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KLUVPRgotCSAgICBlbHNlCi0JICAgICAgY2F0IDw8RU9GCi1jb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLwotRU9GCi0JICAgIGZpCi0KLQotCSAgICBjYXQgPDwiRU9GIgotCi0jZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgotCi1zdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKLXN0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOwotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIGNoYXIgKipuZXdhcmd6OwotICBpbnQgIG5ld2FyZ2M7Ci0gIGNoYXIgKnRtcF9wYXRoc3BlYzsKLSAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7Ci0gIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOwotICBjaGFyICp0YXJnZXRfbmFtZTsKLSAgY2hhciAqbHRfYXJndl96ZXJvOwotICBpbnQgcnZhbCA9IDEyNzsKLQotICBpbnQgaTsKLQotICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKLSAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgKHNpemVfdCkgYXJnYyArIDEpOwotCi0gIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0Ci0gICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAotICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5Ci0gICAqLwotICBuZXdhcmdjPTA7Ci0gIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0gICAgewotICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkpCi0JewotRU9GCi0JICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQotCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCi0JCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCi0JCTs7Ci0JICAgICAgZXNhYwotCi0JICAgIGNhdCA8PCJFT0YiCi0JICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKLQkgIHJldHVybiAwOwotCX0KLSAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgZGVidWdfb3B0KSkKLQl7Ci0gICAgICAgICAgbHRfZGVidWcgPSAxOwotICAgICAgICAgIGNvbnRpbnVlOwotCX0KLSAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpKQotICAgICAgICB7Ci0gICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAotICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKLSAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgotICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKLSAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAotICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCi0gICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCi0gICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCi0gICAgICAgICAgICovCi0gICAgICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAgICJ1bnJlY29nbml6ZWQgJXMgb3B0aW9uOiAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOwotICAgICAgICB9Ci0gICAgICAvKiBvdGhlcndpc2UgLi4uICovCi0gICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKLSAgICB9Ci0gIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7Ci0KLUVPRgotCSAgICBjYXQgPDxFT0YKLSAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFKSAkVkVSU0lPTlxuIik7Ci1FT0YKLQkgICAgY2F0IDw8IkVPRiIKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKLQotICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOwotICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCi0gICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLSAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAotCQkgIHRtcF9wYXRoc3BlYyk7Ci0KLSAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLSAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCi0JCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOwotICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKLQotICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKLSAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOwotCi0gIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCi0gIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7Ci0gIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIsIDEpOwotICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOwotICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKLSAgdG1wX3BhdGhzcGVjID0gMDsKLQotICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCi0gIHRhcmdldF9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChUQVJHRVRfUFJPR1JBTV9OQU1FKSk7Ci0gIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7Ci0gIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOwotICBYRlJFRSAodGFyZ2V0X25hbWUpOwotICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKLSAgdG1wX3BhdGhzcGVjID0gMDsKLQotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCi0JCSAgdGFyZ2V0X25hbWUpOwotRU9GCi0KLQkgICAgY2F0IDw8RU9GCi0gIG5ld2FyZ3pbMF0gPQotICAgIFhNQUxMT0MgKGNoYXIsIChzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSArCi0JCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfbmFtZSkgKyAxKSk7Ci0gIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOwotICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIkb2JqZGlyIik7Ci0gIHN0cmNhdCAobmV3YXJnelswXSwgIi8iKTsKLUVPRgotCi0JICAgIGNhdCA8PCJFT0YiCi0gIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCi0gIHRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKG5ld2FyZ3pbMF0pOwotCi0gIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLwotICBzdHJjYXQgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKLQotICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KLSAgbHRfYXJndl96ZXJvID0gbHRfZXh0ZW5kX3N0ciAodG1wX3BhdGhzcGVjLCB0YXJnZXRfbmFtZSwgMSk7Ci0gIFhGUkVFICh0bXBfcGF0aHNwZWMpOwotICB0bXBfcGF0aHNwZWMgPSBOVUxMOwotRU9GCi0KLQkgICAgY2FzZSAkaG9zdF9vcyBpbgotCSAgICAgIG1pbmd3KikKLQkgICAgY2F0IDw8IkVPRiIKLSAgewotICAgIGNoYXIqIHA7Ci0gICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKLSAgICAgIHsKLQkqcCA9ICcvJzsKLSAgICAgIH0KLSAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCi0gICAgICB7Ci0JKnAgPSAnLyc7Ci0gICAgICB9Ci0gIH0KLUVPRgotCSAgICA7OwotCSAgICBlc2FjCi0KLQkgICAgY2F0IDw8IkVPRiIKLSAgWEZSRUUgKHRhcmdldF9uYW1lKTsKLSAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKLSAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKLQotICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KLSAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLwotICAvKiBVcGRhdGUgdGhlIERMTCBzZWFyY2hwYXRoLiAgRVhFX1BBVEhfVkFMVUUgKCRkbGxzZWFyY2hwYXRoKSBtdXN0Ci0gICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQotICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKLSAgICAgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4gKi8KLSAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7Ci0gIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOwotCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKLQkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKLSAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKLSAgICB7Ci0gICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKLQkJICAgICAgaSwgbm9ubnVsbCAobmV3YXJneltpXSkpOwotICAgIH0KLQotRU9GCi0KLQkgICAgY2FzZSAkaG9zdF9vcyBpbgotCSAgICAgIG1pbmd3KikKLQkJY2F0IDw8IkVPRiIKLSAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KLSAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5ld2FyZ3opOwotICBydmFsID0gKGludCkgX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOwotICBpZiAocnZhbCA9PSAtMSkKLSAgICB7Ci0gICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLwotICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAotCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLSAgICAgIHJldHVybiAxMjc7Ci0gICAgfQotICByZXR1cm4gcnZhbDsKLUVPRgotCQk7OwotCSAgICAgICopCi0JCWNhdCA8PCJFT0YiCi0gIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOwotICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLwotRU9GCi0JCTs7Ci0JICAgIGVzYWMKLQotCSAgICBjYXQgPDwiRU9GIgotfQotCi12b2lkICoKLXhtYWxsb2MgKHNpemVfdCBudW0pCi17Ci0gIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7Ci0gIGlmICghcCkKLSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOwotCi0gIHJldHVybiBwOwotfQotCi1jaGFyICoKLXhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKLXsKLSAgcmV0dXJuIHN0cmluZyA/IHN0cmNweSAoKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChzdHJpbmcpICsgMSksCi0JCQkgIHN0cmluZykgOiBOVUxMOwotfQotCi1jb25zdCBjaGFyICoKLWJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgY29uc3QgY2hhciAqYmFzZTsKLQotI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KLSAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLwotICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQotICAgIG5hbWUgKz0gMjsKLSNlbmRpZgotCi0gIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCi0gICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKLSAgICAgIGJhc2UgPSBuYW1lICsgMTsKLSAgcmV0dXJuIGJhc2U7Ci19Ci0KLWludAotY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKLXsKLSAgc3RydWN0IHN0YXQgc3Q7Ci0KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOwotICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKLSAgICByZXR1cm4gMDsKLQotICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKLSAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQotICAgIHJldHVybiAxOwotICBlbHNlCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAotbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQotewotICBpbnQgcnZhbCA9IDA7Ci0gIHN0cnVjdCBzdGF0IHN0OwotCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICBub25lbXB0eSAocGF0aCkpOwotICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKLSAgICByZXR1cm4gMDsKLQotICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQotICAgIHsKLSAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7Ci0gICAgfQotICByZXR1cm4gcnZhbDsKLX0KLQotLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCi0gICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCi0gICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCi0qLwotY2hhciAqCi1maW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCi17Ci0gIGludCBoYXNfc2xhc2ggPSAwOwotICBjb25zdCBjaGFyICpwOwotICBjb25zdCBjaGFyICpwX25leHQ7Ci0gIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLwotICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07Ci0gIHNpemVfdCB0bXBfbGVuOwotICBjaGFyICpjb25jYXRfbmFtZTsKLQotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHdyYXBwZXIpKTsKLQotICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIEFic29sdXRlIHBhdGg/ICovCi0jaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQotICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQotICAgIHsKLSAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7Ci0gICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQotCXJldHVybiBjb25jYXRfbmFtZTsKLSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotI2VuZGlmCi0gICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCi0JewotCSAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKLQkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCi0JICAgIHJldHVybiBjb25jYXRfbmFtZTsKLQkgIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0JfQotI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KLSAgICB9Ci0jZW5kaWYKLQotICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQotICAgIGlmICgqcCA9PSAnLycpCi0gICAgICB7Ci0JaGFzX3NsYXNoID0gMTsKLQlicmVhazsKLSAgICAgIH0KLSAgaWYgKCFoYXNfc2xhc2gpCi0gICAgewotICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KLSAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7Ci0gICAgICBpZiAocGF0aCAhPSBOVUxMKQotCXsKLQkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQotCSAgICB7Ci0JICAgICAgY29uc3QgY2hhciAqcTsKLQkgICAgICBzaXplX3QgcF9sZW47Ci0JICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKLQkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCi0JCSAgYnJlYWs7Ci0JICAgICAgcF9sZW4gPSAoc2l6ZV90KSAocSAtIHApOwotCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKLQkgICAgICBpZiAocF9sZW4gPT0gMCkKLQkJewotCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0JCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQotCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLQkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOwotCQkgIGNvbmNhdF9uYW1lID0KLQkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOwotCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7Ci0JCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7Ci0JCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkgIGNvbmNhdF9uYW1lID0KLQkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKLQkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7Ci0JCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOwotCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOwotCQl9Ci0JICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKLQkJcmV0dXJuIGNvbmNhdF9uYW1lOwotCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0JICAgIH0KLQl9Ci0gICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLwotICAgIH0KLSAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLwotICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCi0gICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwotICB0bXBfbGVuID0gc3RybGVuICh0bXApOwotICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOwotICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwotICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKLSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKLQotICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQotICAgIHJldHVybiBjb25jYXRfbmFtZTsKLSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNoYXIgKgotY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQotewotI2lmbmRlZiBTX0lTTE5LCi0gIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7Ci0jZWxzZQotICBjaGFyIGJ1ZltMVF9QQVRITUFYXTsKLSAgc3RydWN0IHN0YXQgczsKLSAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOwotICBjaGFyICpwOwotICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKLSAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQotICAgIHsKLSAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAotCQkgICAgICB0bXBfcGF0aHNwZWMpOwotICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQotCXsKLQkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCi0JICAgIHsKLQkgICAgICBoYXNfc3ltbGlua3MgPSAxOwotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0KLQkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLwotCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7Ci0JICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKLQkgICAgcC0tOwotCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQotCSAgICB7Ci0JICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCi0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQkgICpwID0gJ1wwJzsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKLQkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwotCX0KLSAgICB9Ci0gIFhGUkVFICh0bXBfcGF0aHNwZWMpOwotCi0gIGlmICghaGFzX3N5bWxpbmtzKQotICAgIHsKLSAgICAgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7Ci0gICAgfQotCi0gIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKLSAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQotICAgIHsKLSAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKLSAgICB9Ci0gIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOwotI2VuZGlmCi19Ci0KLWNoYXIgKgotc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKLXsKLSAgc2l6ZV90IGxlbiwgcGF0bGVuOwotCi0gIGFzc2VydCAoc3RyICE9IE5VTEwpOwotICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKLQotICBsZW4gPSBzdHJsZW4gKHN0cik7Ci0gIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKLQotICBpZiAocGF0bGVuIDw9IGxlbikKLSAgICB7Ci0gICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOwotICAgICAgaWYgKFNUUkVRIChzdHIsIHBhdCkpCi0JKnN0ciA9ICdcMCc7Ci0gICAgfQotICByZXR1cm4gc3RyOwotfQotCi12b2lkCi1sdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0gIGlmIChsdF9kZWJ1ZykKLSAgICB7Ci0gICAgICAodm9pZCkgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSk7Ci0gICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKLSAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOwotICAgICAgdmFfZW5kIChhcmdzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKmZpbGUsCi0JICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAotCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7Ci0gIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7Ci0KLSAgaWYgKGV4aXRfc3RhdHVzID49IDApCi0gICAgZXhpdCAoZXhpdF9zdGF0dXMpOwotfQotCi12b2lkCi1sdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKLXsKLSAgdmFfbGlzdCBhcDsKLSAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKLSAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7Ci0gIHZhX2VuZCAoYXApOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1ub25udWxsIChjb25zdCBjaGFyICpzKQotewotICByZXR1cm4gcyA/IHMgOiAiKG51bGwpIjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCi17Ci0gIHJldHVybiAocyAmJiAhKnMpID8gIihlbXB0eSkiIDogbm9ubnVsbCAocyk7Ci19Ci0KLXZvaWQKLWx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi17Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7Ci0gIHsKLSNpZmRlZiBIQVZFX1NFVEVOVgotICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCi0gICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOwotICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKLSNlbHNlCi0gICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOwotICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7Ci0gICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7Ci0gICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCi0gICAgICB7Ci0gICAgICAgIFhGUkVFIChzdHIpOwotICAgICAgfQotI2VuZGlmCi0gIH0KLX0KLQotY2hhciAqCi1sdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCi17Ci0gIGNoYXIgKm5ld192YWx1ZTsKLSAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCi0gICAgewotICAgICAgc2l6ZV90IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKLSAgICAgIHNpemVfdCBhZGRfbGVuID0gc3RybGVuIChhZGQpOwotICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7Ci0gICAgICBpZiAodG9fZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOwotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOwotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOwotICAgIH0KLSAgcmV0dXJuIG5ld192YWx1ZTsKLX0KLQotdm9pZAotbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLXsKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7Ci0KLSAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQotICAgIHsKLSAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKLSAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCi0gICAgICBzaXplX3QgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOwotICAgICAgd2hpbGUgKChsZW4gPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuZXdfdmFsdWVbLS1sZW5dID0gJ1wwJzsKLSAgICAgICAgfQotICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOwotICAgICAgWEZSRUUgKG5ld192YWx1ZSk7Ci0gICAgfQotfQotCi12b2lkCi1sdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotewotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCi0gICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKLQotICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCi0gICAgewotICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOwotICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOwotICAgICAgWEZSRUUgKG5ld192YWx1ZSk7Ci0gICAgfQotfQotCi1FT0YKLQkgICAgY2FzZSAkaG9zdF9vcyBpbgotCSAgICAgIG1pbmd3KikKLQkJY2F0IDw8IkVPRiIKLQotLyogUHJlcGFyZXMgYW4gYXJndW1lbnQgdmVjdG9yIGJlZm9yZSBjYWxsaW5nIHNwYXduKCkuCi0gICBOb3RlIHRoYXQgc3Bhd24oKSBkb2VzIG5vdCBieSBpdHNlbGYgY2FsbCB0aGUgY29tbWFuZCBpbnRlcnByZXRlcgotICAgICAoZ2V0ZW52ICgiQ09NU1BFQyIpICE9IE5VTEwgPyBnZXRlbnYgKCJDT01TUEVDIikgOgotICAgICAgKHsgT1NWRVJTSU9OSU5GTyB2OyB2LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7Ci0gICAgICAgICBHZXRWZXJzaW9uRXgoJnYpOwotICAgICAgICAgdi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UOwotICAgICAgfSkgPyAiY21kLmV4ZSIgOiAiY29tbWFuZC5jb20iKS4KLSAgIEluc3RlYWQgaXQgc2ltcGx5IGNvbmNhdGVuYXRlcyB0aGUgYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkgJyAnLCBhbmQgY2FsbHMKLSAgIENyZWF0ZVByb2Nlc3MoKS4gIFdlIG11c3QgcXVvdGUgdGhlIGFyZ3VtZW50cyBzaW5jZSBXaW4zMiBDcmVhdGVQcm9jZXNzKCkKLSAgIGludGVycHJldHMgY2hhcmFjdGVycyBsaWtlICcgJywgJ1x0JywgJ1xcJywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBpbiBhCi0gICBzcGVjaWFsIHdheToKLSAgIC0gU3BhY2UgYW5kIHRhYiBhcmUgaW50ZXJwcmV0ZWQgYXMgZGVsaW1pdGVycy4gVGhleSBhcmUgbm90IHRyZWF0ZWQgYXMKLSAgICAgZGVsaW1pdGVycyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgotICAgLSBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dC4gVGhlaXIgb25seSBlZmZlY3QgaXMKLSAgICAgdGhhdCB3aXRoaW4gZG91YmxlIHF1b3Rlcywgc3BhY2UgYW5kIHRhYiBhcmUgdHJlYXRlZCBsaWtlIG5vcm1hbAotICAgICBjaGFyYWN0ZXJzLgotICAgLSBCYWNrc2xhc2hlcyBub3QgZm9sbG93ZWQgYnkgZG91YmxlIHF1b3RlcyBhcmUgbm90IHNwZWNpYWwuCi0gICAtIEJ1dCAyKm4rMSBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSBiZWNvbWUKLSAgICAgbiBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSAobiA+PSAwKToKLSAgICAgICBcIiAtPiAiCi0gICAgICAgXFxcIiAtPiBcIgotICAgICAgIFxcXFxcIiAtPiBcXCIKLSAqLwotI2RlZmluZSBTSEVMTF9TUEVDSUFMX0NIQVJTICJcIlxcIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCi0jZGVmaW5lIFNIRUxMX1NQQUNFX0NIQVJTICIgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKLWNoYXIgKioKLXByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KQotewotICBzaXplX3QgYXJnYzsKLSAgY2hhciAqKm5ld19hcmd2OwotICBzaXplX3QgaTsKLQotICAvKiBDb3VudCBudW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KLSAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAhPSBOVUxMOyBhcmdjKyspCi0gICAgOwotCi0gIC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLwotICBuZXdfYXJndiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOwotCi0gIC8qIFB1dCBxdW90ZWQgYXJndW1lbnRzIGludG8gdGhlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLwotICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGFyZ3ZbaV07Ci0KLSAgICAgIGlmIChzdHJpbmdbMF0gPT0gJ1wwJykKLQluZXdfYXJndltpXSA9IHhzdHJkdXAgKCJcIlwiIik7Ci0gICAgICBlbHNlIGlmIChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQRUNJQUxfQ0hBUlMpICE9IE5VTEwpCi0JewotCSAgaW50IHF1b3RlX2Fyb3VuZCA9IChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQQUNFX0NIQVJTKSAhPSBOVUxMKTsKLQkgIHNpemVfdCBsZW5ndGg7Ci0JICB1bnNpZ25lZCBpbnQgYmFja3NsYXNoZXM7Ci0JICBjb25zdCBjaGFyICpzOwotCSAgY2hhciAqcXVvdGVkX3N0cmluZzsKLQkgIGNoYXIgKnA7Ci0KLQkgIGxlbmd0aCA9IDA7Ci0JICBiYWNrc2xhc2hlcyA9IDA7Ci0JICBpZiAocXVvdGVfYXJvdW5kKQotCSAgICBsZW5ndGgrKzsKLQkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQotCSAgICB7Ci0JICAgICAgY2hhciBjID0gKnM7Ci0JICAgICAgaWYgKGMgPT0gJyInKQotCQlsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOwotCSAgICAgIGxlbmd0aCsrOwotCSAgICAgIGlmIChjID09ICdcXCcpCi0JCWJhY2tzbGFzaGVzKys7Ci0JICAgICAgZWxzZQotCQliYWNrc2xhc2hlcyA9IDA7Ci0JICAgIH0KLQkgIGlmIChxdW90ZV9hcm91bmQpCi0JICAgIGxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7Ci0KLQkgIHF1b3RlZF9zdHJpbmcgPSBYTUFMTE9DIChjaGFyLCBsZW5ndGggKyAxKTsKLQotCSAgcCA9IHF1b3RlZF9zdHJpbmc7Ci0JICBiYWNrc2xhc2hlcyA9IDA7Ci0JICBpZiAocXVvdGVfYXJvdW5kKQotCSAgICAqcCsrID0gJyInOwotCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCi0JICAgIHsKLQkgICAgICBjaGFyIGMgPSAqczsKLQkgICAgICBpZiAoYyA9PSAnIicpCi0JCXsKLQkJICB1bnNpZ25lZCBpbnQgajsKLQkJICBmb3IgKGogPSBiYWNrc2xhc2hlcyArIDE7IGogPiAwOyBqLS0pCi0JCSAgICAqcCsrID0gJ1xcJzsKLQkJfQotCSAgICAgICpwKysgPSBjOwotCSAgICAgIGlmIChjID09ICdcXCcpCi0JCWJhY2tzbGFzaGVzKys7Ci0JICAgICAgZWxzZQotCQliYWNrc2xhc2hlcyA9IDA7Ci0JICAgIH0KLQkgIGlmIChxdW90ZV9hcm91bmQpCi0JICAgIHsKLQkgICAgICB1bnNpZ25lZCBpbnQgajsKLQkgICAgICBmb3IgKGogPSBiYWNrc2xhc2hlczsgaiA+IDA7IGotLSkKLQkJKnArKyA9ICdcXCc7Ci0JICAgICAgKnArKyA9ICciJzsKLQkgICAgfQotCSAgKnAgPSAnXDAnOwotCi0JICBuZXdfYXJndltpXSA9IHF1b3RlZF9zdHJpbmc7Ci0JfQotICAgICAgZWxzZQotCW5ld19hcmd2W2ldID0gKGNoYXIgKikgc3RyaW5nOwotICAgIH0KLSAgbmV3X2FyZ3ZbYXJnY10gPSBOVUxMOwotCi0gIHJldHVybiBuZXdfYXJndjsKLX0KLUVPRgotCQk7OwotCSAgICBlc2FjCi0KLSAgICAgICAgICAgIGNhdCA8PCJFT0YiCi12b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFKiBmKQotewotRU9GCi0JICAgIGZ1bmNfZW1pdF93cmFwcGVyIHllcyB8Ci0JICAgICAgJFNFRCAtbiAtZSAnCi1zL15cKC5cezc5XH1cKVwoLi4qXCkvXDFcCi1cMi8KLWgKLXMvXChbXFwiXVwpL1xcXDEvZwotcy8kL1xcbi8KLXMvXChbXlxuXSpcKS4qLyAgZnB1dHMgKCJcMSIsIGYpOy9wCi1nCi1EJwotICAgICAgICAgICAgY2F0IDw8IkVPRiIKLX0KLUVPRgotfQotIyBlbmQ6IGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKLQotIyBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCBBUkcKLSMgVHJ1ZSBpZiBBUkcgaXMgYW4gaW1wb3J0IGxpYiwgYXMgaW5kaWNhdGVkIGJ5ICRmaWxlX21hZ2ljX2NtZAotZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCi0gICAgKmltcG9ydCopIDogOzsKLSAgICAqKSBmYWxzZSA7OwotICAgIGVzYWMKLX0KLQotIyBmdW5jX3N1bmNjX2NzdGRfYWJpCi0jICEhT05MWSBDQUxMIFRISVMgRk9SIFNVTiBDQyBBRlRFUiAkY29tcGlsZV9jb21tYW5kIElTIEZVTExZIEVYUEFOREVEISEKLSMgU2V2ZXJhbCBjb21waWxlciBmbGFncyBzZWxlY3QgYW4gQUJJIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCi0jIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZyBpdCBpZiBhbnkgYXJlIGluIENYWEZMQUdTLgotZnVuY19zdW5jY19jc3RkX2FiaSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGNhc2UgIiAkY29tcGlsZV9jb21tYW5kICIgaW4KLSAgICAqIiAtY29tcGF0PWcgIip8KlwgLXN0ZD1jKytbMC05XVswLTldXCAqfCoiIC1saWJyYXJ5PXN0ZGN4eDQgIip8KiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCi0gICAgICBzdW5jY191c2VfY3N0ZF9hYmk9bm8KLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIHN1bmNjX3VzZV9jc3RkX2FiaT15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotfQotCi0jIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgotZnVuY19tb2RlX2xpbmsgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlICRob3N0IGluCi0gICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKLSAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKLSAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKLSAgICAgICMgd2hhdCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQotICAgICAgIyBmbGFnIGZvciBldmVyeSBsaWJ0b29sIGludm9jYXRpb24uCi0gICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubwotCi0gICAgICAjIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgYWJvdmUgd2hlbiB0cnlpbmcKLSAgICAgICMgdG8gbWFrZSBhIGRsbCB0aGF0IGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKLSAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5Ci0gICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KLSAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICBhbGxvd191bmRlZmluZWQ9eWVzCi0gICAgICA7OwotICAgICopCi0gICAgICBhbGxvd191bmRlZmluZWQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAotICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKLSAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAotICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAotCi0gICAgY29tcGlsZV9ycGF0aD0KLSAgICBmaW5hbGl6ZV9ycGF0aD0KLSAgICBjb21waWxlX3NobGlicGF0aD0KLSAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9Ci0gICAgY29udmVuaWVuY2U9Ci0gICAgb2xkX2NvbnZlbmllbmNlPQotICAgIGRlcGxpYnM9Ci0gICAgb2xkX2RlcGxpYnM9Ci0gICAgY29tcGlsZXJfZmxhZ3M9Ci0gICAgbGlua2VyX2ZsYWdzPQotICAgIGRsbHNlYXJjaHBhdGg9Ci0gICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCi0gICAgaW5zdF9wcmVmaXhfZGlyPQotICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQotCi0gICAgYXZvaWRfdmVyc2lvbj1ubwotICAgIGJpbmRpcj0KLSAgICBkbGZpbGVzPQotICAgIGRscHJlZmlsZXM9Ci0gICAgZGxzZWxmPW5vCi0gICAgZXhwb3J0X2R5bmFtaWM9bm8KLSAgICBleHBvcnRfc3ltYm9scz0KLSAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KLSAgICBnZW5lcmF0ZWQ9Ci0gICAgbGlib2Jqcz0KLSAgICBsdGxpYnM9Ci0gICAgbW9kdWxlPW5vCi0gICAgbm9faW5zdGFsbD1ubwotICAgIG9ianM9Ci0gICAgb3MyZGxsbmFtZT0KLSAgICBub25fcGljX29iamVjdHM9Ci0gICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9Ci0gICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCi0gICAgcHJlbG9hZD1mYWxzZQotICAgIHByZXY9Ci0gICAgcHJldmFyZz0KLSAgICByZWxlYXNlPQotICAgIHJwYXRoPQotICAgIHhycGF0aD0KLSAgICBwZXJtX3JwYXRoPQotICAgIHRlbXBfcnBhdGg9Ci0gICAgdGhyZWFkX3NhZmU9bm8KLSAgICB2aW5mbz0KLSAgICB2aW5mb19udW1iZXI9bm8KLSAgICB3ZWFrX2xpYnM9Ci0gICAgc2luZ2xlX21vZHVsZT0kd2wtc2luZ2xlX21vZHVsZQotICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKLQotICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KLSAgICBmb3IgYXJnCi0gICAgZG8KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLXNoYXJlZCkKLQl0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAotCSAgJiYgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW5ub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKLQlidWlsZF9vbGRfbGlicz1ubwotCWJyZWFrCi0JOzsKLSAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQotCWNhc2UgJGFyZyBpbgotCS1hbGwtc3RhdGljKQotCSAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCi0JICBmaQotCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKLQkgIGZpCi0JICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCi0JICA7OwotCS1zdGF0aWMpCi0JICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCi0JICBmaQotCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0Ci0JICA7OwotCS1zdGF0aWMtbGlidG9vbC1saWJzKQotCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLQkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYwotCSAgZmkKLQkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKLQkgIDs7Ci0JZXNhYwotCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCWJ1aWxkX29sZF9saWJzPXllcwotCWJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCi0gICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcwotCi0gICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCi0gICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbwotICAgICAgYXJnPSQxCi0gICAgICBzaGlmdAotICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLSAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0Ci0gICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0KLSAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgotICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0JY2FzZSAkcHJldiBpbgotCW91dHB1dCkKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgotCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBPVVRQVVRAIgotCSAgOzsKLQllc2FjCi0KLQljYXNlICRwcmV2IGluCi0JYmluZGlyKQotCSAgYmluZGlyPSRhcmcKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlkbGZpbGVzfGRscHJlZmlsZXMpCi0JICAkcHJlbG9hZCB8fCB7Ci0JICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCi0JICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKLQkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKLQkgICAgcHJlbG9hZD06Ci0JICB9Ci0JICBjYXNlICRhcmcgaW4KLQkgICoubGEgfCAqLmxvKSA7OyAgIyBXZSBoYW5kbGUgdGhlc2UgY2FzZXMgYmVsb3cuCi0JICBmb3JjZSkKLQkgICAgaWYgdGVzdCBubyA9ICIkZGxzZWxmIjsgdGhlbgotCSAgICAgIGRsc2VsZj1uZWVkbGVzcwotCSAgICAgIGV4cG9ydF9keW5hbWljPXllcwotCSAgICBmaQotCSAgICBwcmV2PQotCSAgICBjb250aW51ZQotCSAgICA7OwotCSAgc2VsZikKLQkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgotCSAgICAgIGRsc2VsZj15ZXMKLQkgICAgZWxpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiICYmIHRlc3QgeWVzICE9ICIkZGxvcGVuX3NlbGYiOyB0aGVuCi0JICAgICAgZGxzZWxmPXllcwotCSAgICBlbHNlCi0JICAgICAgZGxzZWxmPW5lZWRsZXNzCi0JICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCi0JICAgIGZpCi0JICAgIHByZXY9Ci0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqKQotCSAgICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCi0JICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCi0JICAgIGVsc2UKLQkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGFyZyIKLQkgICAgZmkKLQkgICAgcHJldj0KLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXhwc3ltcykKLQkgIGV4cG9ydF9zeW1ib2xzPSRhcmcKLQkgIHRlc3QgLWYgIiRhcmciIFwKLQkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgJyRhcmcnIGRvZXMgbm90IGV4aXN0IgotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCWV4cHN5bXNfcmVnZXgpCi0JICBleHBvcnRfc3ltYm9sc19yZWdleD0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JZnJhbWV3b3JrKQotCSAgY2FzZSAkaG9zdCBpbgotCSAgICAqLSotZGFyd2luKikKLQkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCi0JCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OwotCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgotCQkgICA7OwotCSAgICAgIGVzYWMKLQkgICAgICA7OwotCSAgZXNhYwotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCWluc3RfcHJlZml4KQotCSAgaW5zdF9wcmVmaXhfZGlyPSRhcmcKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQltbGx2bSkKLQkgICMgQ2xhbmcgZG9lcyBub3QgdXNlIExMVk0gdG8gbGluaywgc28gd2UgY2FuIHNpbXBseSBkaXNjYXJkIGFueQotCSAgIyAnLW1sbHZtICRhcmcnIG9wdGlvbnMgd2hlbiBkb2luZyB0aGUgbGluayBzdGVwLgotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCW9iamVjdGxpc3QpCi0JICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgotCSAgICBzYXZlX2FyZz0kYXJnCi0JICAgIG1vcmVhcmdzPQotCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCi0JICAgIGRvCi0jCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKLQkgICAgICBhcmc9JGZpbAotCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgotCi0JICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgotCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCi0JCXBpY19vYmplY3Q9Ci0JCW5vbl9waWNfb2JqZWN0PQotCi0JCSMgUmVhZCB0aGUgLmxvIGZpbGUKLQkJZnVuY19zb3VyY2UgIiRhcmciCi0KLQkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8Ci0JCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKLQkJICAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiAmJgotCQkgICB0ZXN0IG5vbmUgPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciAnJGFyZyciCi0JCWZpCi0KLQkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkJeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCi0JCWlmIHRlc3Qgbm9uZSAhPSAiJHBpY19vYmplY3QiOyB0aGVuCi0JCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkJICBwaWNfb2JqZWN0PSR4ZGlyJHBpY19vYmplY3QKLQotCQkgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KLQkJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmIHRlc3QgeWVzID0gIiRkbG9wZW5fc3VwcG9ydCI7IHRoZW4KLQkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgotCQkgICAgICBwcmV2PQotCQkgICAgICBjb250aW51ZQotCQkgICAgZWxzZQotCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgotCQkgICAgICBwcmV2PWRscHJlZmlsZXMKLQkJICAgIGZpCi0JCSAgZmkKLQotCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JCSAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgotCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgotCQkgICAgcHJldj0KLQkJICBmaQotCi0JCSAgIyBBIFBJQyBvYmplY3QuCi0JCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgotCQkgIGFyZz0kcGljX29iamVjdAotCQlmaQotCi0JCSMgTm9uLVBJQyBvYmplY3QuCi0JCWlmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgotCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKLQotCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAotCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IjsgdGhlbgotCQkgICAgYXJnPSRub25fcGljX29iamVjdAotCQkgIGZpCi0JCWVsc2UKLQkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCi0JCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgotCQkgIG5vbl9waWNfb2JqZWN0PSRwaWNfb2JqZWN0Ci0JCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgotCQlmaQotCSAgICAgIGVsc2UKLQkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCi0JCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgotCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkJICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0KLQkJICBmdW5jX2xvMm8gIiRhcmciCi0JCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKLQkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0Ci0JCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgotCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkgICAgICAgIGVsc2UKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCi0JCWZpCi0JICAgICAgZmkKLQkgICAgZG9uZQotCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgJyRhcmcnIGRvZXMgbm90IGV4aXN0IgotCSAgZmkKLQkgIGFyZz0kc2F2ZV9hcmcKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlvczJkbGxuYW1lKQotCSAgb3MyZGxsbmFtZT0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JcHJlY2lvdXNfcmVnZXgpCi0JICBwcmVjaW91c19maWxlc19yZWdleD0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JcmVsZWFzZSkKLQkgIHJlbGVhc2U9LSRhcmcKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlycGF0aCB8IHhycGF0aCkKLQkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgotCSAgY2FzZSAkYXJnIGluCi0JICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7Ci0JICAqKQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKLQkgICAgOzsKLQkgIGVzYWMKLQkgIGlmIHRlc3QgcnBhdGggPSAiJHByZXYiOyB0aGVuCi0JICAgIGNhc2UgIiRycGF0aCAiIGluCi0JICAgICoiICRhcmcgIiopIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKLQkgICAgZXNhYwotCSAgZWxzZQotCSAgICBjYXNlICIkeHJwYXRoICIgaW4KLQkgICAgKiIgJGFyZyAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGFyZyIgOzsKLQkgICAgZXNhYwotCSAgZmkKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlzaHJleHQpCi0JICBzaHJleHRfY21kcz0kYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0Jd2VhaykKLQkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JeGNjbGlua2VyKQotCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCi0JICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgotCSAgcHJldj0KLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgotCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgotCSAgY29udGludWUKLQkgIDs7Ci0JeGNvbXBpbGVyKQotCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKLQkgIHByZXY9Ci0JICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKLQkgIGNvbnRpbnVlCi0JICA7OwotCXhsaW5rZXIpCi0JICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJHFhcmciCi0JICBwcmV2PQotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQkqKQotCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCWVzYWMKLSAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCi0KLSAgICAgIHByZXZhcmc9JGFyZwotCi0gICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1hbGwtc3RhdGljKQotCWlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgIyBTZWUgY29tbWVudCBmb3IgLXN0YXRpYyBmbGFnIGJlbG93LCBmb3IgbW9yZSBkZXRhaWxzLgotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGxpbmtfc3RhdGljX2ZsYWciCi0JZmkKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1hbGxvdy11bmRlZmluZWQpCi0JIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgotCWZ1bmNfZmF0YWxfZXJyb3IgIictYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCi0JOzsKLQotICAgICAgLWF2b2lkLXZlcnNpb24pCi0JYXZvaWRfdmVyc2lvbj15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1iaW5kaXIpCi0JcHJldj1iaW5kaXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1kbG9wZW4pCi0JcHJldj1kbGZpbGVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtZGxwcmVvcGVuKQotCXByZXY9ZGxwcmVmaWxlcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWV4cG9ydC1keW5hbWljKQotCWV4cG9ydF9keW5hbWljPXllcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQotCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKLQlmaQotCWlmIHRlc3QgWC1leHBvcnQtc3ltYm9scyA9ICJYJGFyZyI7IHRoZW4KLQkgIHByZXY9ZXhwc3ltcwotCWVsc2UKLQkgIHByZXY9ZXhwc3ltc19yZWdleAotCWZpCi0JY29udGludWUKLQk7OwotCi0gICAgICAtZnJhbWV3b3JrKQotCXByZXY9ZnJhbWV3b3JrCi0JY29udGludWUKLQk7OwotCi0gICAgICAtaW5zdC1wcmVmaXgtZGlyKQotCXByZXY9aW5zdF9wcmVmaXgKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICMgVGhlIG5hdGl2ZSBJUklYIGxpbmtlciB1bmRlcnN0YW5kcyAtTEFORzoqLCAtTElTVDoqIGFuZCAtTE5POioKLSAgICAgICMgc28sIGlmIHdlIHNlZSB0aGVzZSBmbGFncyBiZSBjYXJlZnVsIG5vdCB0byB0cmVhdCB0aGVtIGxpa2UgLUwKLSAgICAgIC1MW0EtWl1bQS1aXSo6KikKLQljYXNlICR3aXRoX2djYy8kaG9zdCBpbgotCW5vLyotKi1pcml4KiB8IC8qLSotaXJpeCopCi0JICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgotCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0JICA7OwotCWVzYWMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1MKikKLQlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgotCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCi0JICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuICctTCcgYW5kICckMSciCi0JICBlbHNlCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgJy1MJyBvcHRpb24iCi0JICBmaQotCWZpCi0JZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0JZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLQljYXNlICRkaXIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7Ci0JKikKLQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKLQkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiAnJGRpciciCi0JICBkaXI9JGFic2RpcgotCSAgOzsKLQllc2FjCi0JY2FzZSAiJGRlcGxpYnMgIiBpbgotCSoiIC1MJGRpciAiKiB8ICoiICRhcmcgIiopCi0JICAjIFdpbGwgb25seSBoYXBwZW4gZm9yIGFic29sdXRlIG9yIHN5c3Jvb3QgYXJndW1lbnRzCi0JICA7OwotCSopCi0JICAjIFByZXNlcnZlIHN5c3Jvb3QsIGJ1dCBuZXZlciBpbmNsdWRlIHJlbGF0aXZlIGRpcmVjdG9yaWVzCi0JICBjYXNlICRkaXIgaW4KLQkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OwotCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLUwkZGlyIiA7OwotCSAgZXNhYwotCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIKLQkgIDs7Ci0JZXNhYwotCWNhc2UgJGhvc3QgaW4KLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQotCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRkaXIiIHwgJFNFRCAncyovbGliJCovYmluKidgCi0JICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KLQkgICoiOiRkaXI6IiopIDs7Ci0JICA6OikgZGxsc2VhcmNocGF0aD0kZGlyOzsKLQkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokZGlyIjs7Ci0JICBlc2FjCi0JICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KLQkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OwotCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OwotCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1sKikKLQlpZiB0ZXN0IFgtbGMgPSAiWCRhcmciIHx8IHRlc3QgWC1sbSA9ICJYJGFyZyI7IHRoZW4KLQkgIGNhc2UgJGhvc3QgaW4KLQkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKLQkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgICotKi1vczIqKQotCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKLQkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQotCSAgICA7OwotCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSogfCAqLSotYml0cmlnKikKLQkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCi0JICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKLQkgICAgOzsKLQkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKLQkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKLQkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCi0JICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKLQkgICAgOzsKLQkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKLQkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yawotCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBlc2FjCi0JZWxpZiB0ZXN0IFgtbGNfciA9ICJYJGFyZyI7IHRoZW4KLQkgY2FzZSAkaG9zdCBpbgotCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1iaXRyaWcqKQotCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KLQkgICBjb250aW51ZQotCSAgIDs7Ci0JIGVzYWMKLQlmaQotCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW1sbHZtKQotCXByZXY9bWxsdm0KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1tb2R1bGUpCi0JbW9kdWxlPXllcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKwotICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgotICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KLSAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3R8LS1zeXNyb290KQotCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKLQlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotCXByZXY9eGNvbXBpbGVyCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKLSAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCi0JZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0JZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0JY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KLQkgICAgKiIgJGFyZyAiKikgOzsKLQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKLQllc2FjCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbXVsdGlfbW9kdWxlKQotCXNpbmdsZV9tb2R1bGU9JHdsLW11bHRpX21vZHVsZQotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKLQlmYXN0X2luc3RhbGw9bm8KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1uby1pbnN0YWxsKQotCWNhc2UgJGhvc3QgaW4KLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCi0JICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKLQkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgotCSAgZnVuY193YXJuaW5nICInLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgotCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyAnLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKLQkgIGZhc3RfaW5zdGFsbD1ubwotCSAgOzsKLQkqKSBub19pbnN0YWxsPXllcyA7OwotCWVzYWMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1uby11bmRlZmluZWQpCi0JYWxsb3dfdW5kZWZpbmVkPW5vCi0JY29udGludWUKLQk7OwotCi0gICAgICAtb2JqZWN0bGlzdCkKLQlwcmV2PW9iamVjdGxpc3QKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1vczJkbGxuYW1lKQotCXByZXY9b3MyZGxsbmFtZQotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW8pIHByZXY9b3V0cHV0IDs7Ci0KLSAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKLQlwcmV2PXByZWNpb3VzX3JlZ2V4Ci0JY29udGludWUKLQk7OwotCi0gICAgICAtcmVsZWFzZSkKLQlwcmV2PXJlbGVhc2UKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1ycGF0aCkKLQlwcmV2PXJwYXRoCi0JY29udGludWUKLQk7OwotCi0gICAgICAtUikKLQlwcmV2PXhycGF0aAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVIqKQotCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCi0JZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLQljYXNlICRkaXIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7Ci0JPSopCi0JICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRkaXIiCi0JICBkaXI9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICA7OwotCSopCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKLQkgIDs7Ci0JZXNhYwotCWNhc2UgIiR4cnBhdGggIiBpbgotCSoiICRkaXIgIiopIDs7Ci0JKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKLQllc2FjCi0JY29udGludWUKLQk7OwotCi0gICAgICAtc2hhcmVkKQotCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCi0JY29udGludWUKLQk7OwotCi0gICAgICAtc2hyZXh0KQotCXByZXY9c2hyZXh0Ci0JY29udGludWUKLQk7OwotCi0gICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCi0JIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KLQkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKLQkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCi0JIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0Ci0JIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC10aHJlYWQtc2FmZSkKLQl0aHJlYWRfc2FmZT15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC12ZXJzaW9uLWluZm8pCi0JcHJldj12aW5mbwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXZlcnNpb24tbnVtYmVyKQotCXByZXY9dmluZm8KLQl2aW5mb19udW1iZXI9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtd2VhaykKLSAgICAgICAgcHJldj13ZWFrCi0JY29udGludWUKLQk7OwotCi0gICAgICAtV2MsKikKLQlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCi0JYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JYXJnPQotCXNhdmVfaWZzPSRJRlM7IElGUz0sCi0JZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0JICBJRlM9JHNhdmVfaWZzCi0gICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCi0JICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0JICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQlkb25lCi0JSUZTPSRzYXZlX2lmcwotCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKLQlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCTs7Ci0KLSAgICAgIC1XbCwqKQotCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKLQlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQlhcmc9Ci0Jc2F2ZV9pZnM9JElGUzsgSUZTPSwKLQlmb3IgZmxhZyBpbiAkYXJnczsgZG8KLQkgIElGUz0kc2F2ZV9pZnMKLSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKLQkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCWRvbmUKLQlJRlM9JHNhdmVfaWZzCi0JZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgotCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JOzsKLQotICAgICAgLVhjb21waWxlcikKLQlwcmV2PXhjb21waWxlcgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVhsaW5rZXIpCi0JcHJldj14bGlua2VyCi0JY29udGludWUKLQk7OwotCi0gICAgICAtWENDbGlua2VyKQotCXByZXY9eGNjbGlua2VyCi0JY29udGludWUKLQk7OwotCi0gICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCi0gICAgICAtbXNnXyopCi0JZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0JOzsKLQotICAgICAgIyBGbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHdpdGggcmF0aW9uYWxlOgotICAgICAgIyAtNjQsIC1taXBzWzAtOV0gICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTR0kgY29tcGlsZXIKLSAgICAgICMgLXJbMC05XVswLTldKiAgICAgICAgc3BlY2lmeSBwcm9jZXNzb3IgZm9yIHRoZSBTR0kgY29tcGlsZXIKLSAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU3VuIGNvbXBpbGVyCi0gICAgICAjICtEQSosICtERCogICAgICAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIEhQIGNvbXBpbGVyCi0gICAgICAjIC1xKiAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKLSAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGZvciBHQ0MKLSAgICAgICMgLUYvcGF0aCAgICAgICAgICAgICAgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCi0gICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qICBwcm9maWxpbmcgZmxhZ3MgZm9yIEdDQwotICAgICAgIyAtZnN0YWNrLXByb3RlY3RvciogICBzdGFjayBwcm90ZWN0b3IgZmxhZ3MgZm9yIEdDQwotICAgICAgIyBAZmlsZSAgICAgICAgICAgICAgICBHQ0MgcmVzcG9uc2UgZmlsZXMKLSAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgotICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0Ci0gICAgICAjIC1PKiwgLWcqLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCi0gICAgICAjIC1zcGVjcz0qICAgICAgICAgICAgIEdDQyBzcGVjcyBmaWxlcwotICAgICAgIyAtc3RkbGliPSogICAgICAgICAgICBzZWxlY3QgYysrIHN0ZCBsaWIgd2l0aCBjbGFuZwotICAgICAgIyAtZnNhbml0aXplPSogICAgICAgICBDbGFuZy9HQ0MgbWVtb3J5IGFuZCBhZGRyZXNzIHNhbml0aXplcgotICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCi0gICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSp8LS1zeXNyb290PSp8IFwKLSAgICAgIC1PKnwtZyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW58LWZzdGFjay1wcm90ZWN0b3IqfC1zdGRsaWI9KnwgXAotICAgICAgLXNwZWNzPSp8LWZzYW5pdGl6ZT0qKQotICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLSAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLSAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0gICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKLSAgICAgICAgY29udGludWUKLSAgICAgICAgOzsKLQotICAgICAgLVoqKQotICAgICAgICBpZiB0ZXN0IG9zMiA9ICJgZXhwciAkaG9zdCA6ICcuKlwob3MyXCknYCI7IHRoZW4KLSAgICAgICAgICAjIE9TLzIgdXNlcyAtWnh4eCB0byBzcGVjaWZ5IE9TLzItc3BlY2lmaWMgb3B0aW9ucwotCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotCSAgY2FzZSAkYXJnIGluCi0JICAtWmxpbmtlciB8IC1ac3RhY2spCi0JICAgIHByZXY9eGNvbXBpbGVyCi0JICAgIDs7Ci0JICBlc2FjCi0JICBjb250aW51ZQotICAgICAgICBlbHNlCi0JICAjIE90aGVyd2lzZSB0cmVhdCBsaWtlICdTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcnIGJlbG93Ci0JICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCSAgYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotICAgICAgICBmaQotCTs7Ci0KLSAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgotICAgICAgLSogfCArKikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0JOzsKLQotICAgICAgKi4kb2JqZXh0KQotCSMgQSBzdGFuZGFyZCBvYmplY3QuCi0JZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCi0JOzsKLQotICAgICAgKi5sbykKLQkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KLQotCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KLQlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgotCSAgcGljX29iamVjdD0KLQkgIG5vbl9waWNfb2JqZWN0PQotCi0JICAjIFJlYWQgdGhlIC5sbyBmaWxlCi0JICBmdW5jX3NvdXJjZSAiJGFyZyIKLQotCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8Ci0JICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JICAgICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYmCi0JICAgICB0ZXN0IG5vbmUgPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRhcmcnIgotCSAgZmkKLQotCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0KLQkgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgfHwgewotCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCSAgICBwaWNfb2JqZWN0PSR4ZGlyJHBpY19vYmplY3QKLQotCSAgICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCi0JICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGRsb3Blbl9zdXBwb3J0IjsgdGhlbgotCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCi0JCXByZXY9Ci0JCWNvbnRpbnVlCi0JICAgICAgZWxzZQotCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgotCQlwcmV2PWRscHJlZmlsZXMKLQkgICAgICBmaQotCSAgICBmaQotCi0JICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JICAgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KLQkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0JICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgotCSAgICAgIHByZXY9Ci0JICAgIGZpCi0KLQkgICAgIyBBIFBJQyBvYmplY3QuCi0JICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKLQkgICAgYXJnPSRwaWNfb2JqZWN0Ci0JICB9Ci0KLQkgICMgTm9uLVBJQyBvYmplY3QuCi0JICBpZiB0ZXN0IG5vbmUgIT0gIiRub25fcGljX29iamVjdCI7IHRoZW4KLQkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKLQotCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKLQkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgotCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IjsgdGhlbgotCSAgICAgIGFyZz0kbm9uX3BpY19vYmplY3QKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgotCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCi0JICAgIG5vbl9waWNfb2JqZWN0PSRwaWNfb2JqZWN0Ci0JICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkgIGZpCi0JZWxzZQotCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCi0JICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KLQkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkgICAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCi0JICAgIGZ1bmNfbG8ybyAiJGFyZyIKLQkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKLQkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAotCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCi0JICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkgIGVsc2UKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgotCSAgZmkKLQlmaQotCTs7Ci0KLSAgICAgICouJGxpYmV4dCkKLQkjIEFuIGFyY2hpdmUuCi0JZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCi0JZnVuY19hcHBlbmQgb2xkX2RlcGxpYnMgIiAkYXJnIgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgKi5sYSkKLQkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCi0KLQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKLQlpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCi0JICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KLQkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCSAgcHJldj0KLQllbGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KLQkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCi0JICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgIHByZXY9Ci0JZWxzZQotCSAgZnVuY19hcHBlbmQgZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0JZmkKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBhcmd1bWVudC4KLSAgICAgICopCi0JIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCi0JIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KLQlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKLQk7OwotICAgICAgZXNhYyAjIGFyZwotCi0gICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KLSAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCi0JZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLQlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLSAgICAgIGZpCi0gICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAotCi0gICAgdGVzdCAtbiAiJHByZXYiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlICckcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgotCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGV4cG9ydF9keW5hbWljIiAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgotICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0gICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLSAgICBmaQotCi0gICAgb2xkbGlicz0KLSAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5Ci0gICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKLSAgICBvdXRwdXRuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotICAgIGxpYm9ianNfc2F2ZT0kbGlib2JqcwotCi0gICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0gICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCi0gICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIFx8IFwkU0VEIFwncy86LyAvZ1wnXGAKLSAgICBlbHNlCi0gICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KLSAgICBmaQotICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgotICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKLQotICAgICMgRGVmaW5pdGlvbiBpcyBpbmplY3RlZCBieSBMVF9DT05GSUcgZHVyaW5nIGxpYnRvb2wgZ2VuZXJhdGlvbi4KLSAgICBmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiRMVF9TWVNfTElCUkFSWV9QQVRIIgotCi0gICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKLSAgICBvdXRwdXRfb2JqZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpcgotICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8iCi0gICAgdG9vbF9vdXRwdXRfb2JqZGlyPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKLSAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KLSAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgotCi0gICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0Ci0gICAgY2FzZSAkb3V0cHV0IGluCi0gICAgIiIpCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCi0gICAgICA7OwotICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7Ci0gICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7Ci0gICAgKi5sYSkgbGlua21vZGU9bGliIDs7Ci0gICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KLSAgICBlc2FjCi0KLSAgICBzcGVjaWFsZGVwbGlicz0KLQotICAgIGxpYnM9Ci0gICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCi0gICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCi0gICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KLSAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KLQljYXNlICIkbGlicyAiIGluCi0JKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCi0gICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKLQotICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKLSAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKLSAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgotICAgICAgcHJlX3Bvc3RfZGVwcz0KLSAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCi0JZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCi0JICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCi0JICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OwotCSAgZXNhYwotCSAgZnVuY19hcHBlbmQgcHJlX3Bvc3RfZGVwcyAiICRwcmVfcG9zdF9kZXAiCi0JZG9uZQotICAgICAgZmkKLSAgICAgIHByZV9wb3N0X2RlcHM9Ci0gICAgZmkKLQotICAgIGRlcGxpYnM9Ci0gICAgbmV3ZGVwZW5kZW5jeV9saWJzPQotICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KLSAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKLSAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwotICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwotCi0gICAgY2FzZSAkbGlua21vZGUgaW4KLSAgICBsaWIpCi0JcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgotCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbwotCSAgY2FzZSAkZmlsZSBpbgotCSAgKi5sYSkgOzsKLQkgICopCi0JICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiAnLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgcHJvZykKLQljb21waWxlX2RlcGxpYnM9Ci0JZmluYWxpemVfZGVwbGlicz0KLQlhbGxkZXBsaWJzPWZhbHNlCi0JbmV3ZGxmaWxlcz0KLQluZXdkbHByZWZpbGVzPQotCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKLQk7OwotICAgICopICBwYXNzZXM9ImNvbnYiCi0JOzsKLSAgICBlc2FjCi0KLSAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbwotICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCi0gICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgotICAgICAgaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCi0JIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCi0JIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5Ci0gICAgICAgIHRtcF9kZXBsaWJzPQotCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCi0JZG9uZQotCWRlcGxpYnM9JHRtcF9kZXBsaWJzCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKLQkgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgotCWxpYnM9JGRlcGxpYnMKLQlkZXBsaWJzPQotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCi0JY2FzZSAkcGFzcyBpbgotCWRsb3BlbikgbGlicz0kZGxmaWxlcyA7OwotCWRscHJlb3BlbikgbGlicz0kZGxwcmVmaWxlcyA7OwotCWxpbmspCi0JICBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUiCi0JICB0ZXN0ICJYJGxpbmtfYWxsX2RlcGxpYnMiICE9IFhubyAmJiBsaWJzPSIkbGlicyAkZGVwZW5kZW5jeV9saWJzIgotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCBsaWIsZGxwcmVvcGVuID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCi0JZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKLQkgIGRlcGVuZGVuY3lfbGlicz0KLQkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgotCSAgY2FzZSAkbGliIGluCi0JICAqLmxhKQlmdW5jX3NvdXJjZSAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKLQkgIGVzYWMKLQotCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5Ci0JICAjIGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKLQkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKLSAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCi0JICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUKLQlkb25lCi0JbGlicz0kZGxwcmVmaWxlcwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgZGxvcGVuID0gIiRwYXNzIjsgdGhlbgotCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKLQlzYXZlX2RlcGxpYnM9JGRlcGxpYnMKLQlkZXBsaWJzPQotICAgICAgZmkKLQotICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KLQlsaWI9Ci0JZm91bmQ9ZmFsc2UKLQljYXNlICRkZXBsaWIgaW4KLQktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlIFwKLSAgICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKLQkgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICBlbHNlCi0JICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGRlcGxpYiIKLQkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgotCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKLQkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7Ci0JCWVzYWMKLQkgICAgZmkKLQkgIGZpCi0JICBjb250aW51ZQotCSAgOzsKLQktbCopCi0JICBpZiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IHByb2cgIT0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgZnVuY193YXJuaW5nICInLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCi0JICAgIGNvbnRpbnVlCi0JICBmaQotCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKLQkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCi0JICBlbHNlCi0JICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCi0JICBmaQotCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KLQkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KLQkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5Ci0JICAgICAgbGliPSRzZWFyY2hkaXIvbGliJG5hbWUkc2VhcmNoX2V4dAotCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCi0JCWlmIHRlc3QgLmxhID0gIiRzZWFyY2hfZXh0IjsgdGhlbgotCQkgIGZvdW5kPToKLQkJZWxzZQotCQkgIGZvdW5kPWZhbHNlCi0JCWZpCi0JCWJyZWFrIDIKLQkgICAgICBmaQotCSAgICBkb25lCi0JICBkb25lCi0JICBpZiAkZm91bmQ7IHRoZW4KLQkgICAgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKLQkgICAgIyBJZiAkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzICYmICRkZXBsaWIgaXMgYSBzdGRsaWIsCi0JICAgICMgV2UgbmVlZCB0byBkbyBzb21lIHNwZWNpYWwgdGhpbmdzIGhlcmUsIGFuZCBub3QgbGF0ZXIuCi0JICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCi0JICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikKLQkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgotCQkgIGxpYnJhcnlfbmFtZXM9Ci0JCSAgb2xkX2xpYnJhcnk9Ci0JCSAgZnVuY19zb3VyY2UgIiRsaWIiCi0JCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwotCQkgICAgbGw9JGwKLQkJICBkb25lCi0JCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSI7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQotCQkgICAgZm91bmQ9ZmFsc2UKLQkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCi0JCSAgICBsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKLQkJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JCSAgICBlbHNlCi0JCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JCSAgICAgIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JCSAgICBmaQotCQkgICAgY29udGludWUKLQkJICBmaQotCQlmaQotCQk7OwotCSAgICAgICopIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgZWxzZQotCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKLQkgICAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgotCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgotCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICAgIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZpCi0JICAgIGNvbnRpbnVlCi0JICBmaQotCSAgOzsgIyAtbAotCSoubHRmcmFtZXdvcmspCi0JICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCi0JICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgotCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgZWxzZQotCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCi0JCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCi0JCSAgICAqIiAkZGVwbGliICIqKSA7OwotCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKLQkJZXNhYwotCSAgICBmaQotCSAgZmkKLQkgIGNvbnRpbnVlCi0JICA7OwotCS1MKikKLQkgIGNhc2UgJGxpbmttb2RlIGluCi0JICBsaWIpCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIHRlc3QgY29udiA9ICIkcGFzcyIgJiYgY29udGludWUKLQkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCi0JICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCSAgICA7OwotCSAgcHJvZykKLQkgICAgaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgICAgY29udGludWUKLQkgICAgZmkKLQkgICAgaWYgdGVzdCBzY2FuID0gIiRwYXNzIjsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBmaQotCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgotCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgICAgOzsKLQkgICopCi0JICAgIGZ1bmNfd2FybmluZyAiJy1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgotCSAgICA7OwotCSAgZXNhYyAjIGxpbmttb2RlCi0JICBjb250aW51ZQotCSAgOzsgIyAtTAotCS1SKikKLQkgIGlmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KLQkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKLQkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0JICAgIGRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0JICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0JICAgIGNhc2UgIiR4cnBhdGggIiBpbgotCSAgICAqIiAkZGlyICIqKSA7OwotCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OwotCSAgICBlc2FjCi0JICBmaQotCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgIGNvbnRpbnVlCi0JICA7OwotCSoubGEpCi0JICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKLQkgIGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0JICA7OwotCSouJGxpYmV4dCkKLQkgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KLQkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgY29udGludWUKLQkgIGZpCi0JICBjYXNlICRsaW5rbW9kZSBpbgotCSAgbGliKQotCSAgICAjIExpbmtpbmcgY29udmVuaWVuY2UgbW9kdWxlcyBpbnRvIHNoYXJlZCBsaWJyYXJpZXMgaXMgYWxsb3dlZCwKLQkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KLQkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCi0JICAgICoiICRkZXBsaWIgIiopIDs7Ci0JICAgICopCi0JICAgICAgdmFsaWRfYV9saWI9ZmFsc2UKLQkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCQltYXRjaF9wYXR0ZXJuKikKLQkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAotCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKLQkJICBpZiBldmFsICJcJEVDSE8gXCIkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgXAotCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgICAgdmFsaWRfYV9saWI9OgotCQkgIGZpCi0JCTs7Ci0JCXBhc3NfYWxsKQotCQkgIHZhbGlkX2FfbGliPToKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgICAgaWYgJHZhbGlkX2FfbGliOyB0aGVuCi0JCWVjaG8KLQkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgotCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKLQkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgICBlbHNlCi0JCWVjaG8KLQkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKLQkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKLQkJZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgIHByb2cpCi0JICAgIGlmIHRlc3QgbGluayAhPSAiJHBhc3MiOyB0aGVuCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgotCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICAgIGZpCi0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBlc2FjICMgbGlua21vZGUKLQkgIDs7ICMgKi4kbGliZXh0Ci0JKi5sbyB8ICouJG9iamV4dCkKLQkgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KLQkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgIGVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiIHx8IHRlc3QgeWVzICE9ICIkZGxvcGVuX3N1cHBvcnQiIHx8IHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KLQkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKLQkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KLQkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCi0JICAgIGZpCi0JICBmaQotCSAgY29udGludWUKLQkgIDs7Ci0JJURFUExJQlMlKQotCSAgYWxsZGVwbGlicz06Ci0JICBjb250aW51ZQotCSAgOzsKLQllc2FjICMgY2FzZSAkZGVwbGliCi0KLQkkZm91bmQgfHwgdGVzdCAtZiAiJGxpYiIgXAotCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgJyRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCAnJGRlcGxpYiciCi0KLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0KLQlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgotCWxhZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0KLQlkbG5hbWU9Ci0JZGxvcGVuPQotCWRscHJlb3Blbj0KLQlsaWJkaXI9Ci0JbGlicmFyeV9uYW1lcz0KLQlvbGRfbGlicmFyeT0KLQlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQotCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCi0JIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCi0JaW5zdGFsbGVkPXllcwotCXNob3VsZG5vdGxpbms9bm8KLQlhdm9pZHRlbXBycGF0aD0KLQotCi0JIyBSZWFkIHRoZSAubGEgZmlsZQotCWZ1bmNfc291cmNlICIkbGliIgotCi0JIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKLQlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KLQkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCi0JICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCi0JICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCWZpCi0JZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQlpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKLQkgICB0ZXN0IHByb2csc2NhbiA9ICIkbGlua21vZGUsJHBhc3MiIHx8Ci0JICAgeyB0ZXN0IHByb2cgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSI7IH07IHRoZW4KLQkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgotCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRkbHByZW9wZW4iCi0JZmkKLQotCWlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KLQkgICMgT25seSBjaGVjayBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzCi0JICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgotCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAnJGxpYiciCi0JICAgIGZpCi0JICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KLQkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCi0JICAgIGZ1bmNfYXBwZW5kIG9sZF9jb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgdG1wX2xpYnM9Ci0JICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KLQkJY2FzZSAiJHRtcF9saWJzICIgaW4KLQkJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwotCQllc2FjCi0JICAgICAgZmkKLQkgICAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCi0JICAgIGRvbmUKLQkgIGVsaWYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgotCSAgZmkKLQkgIGNvbnRpbnVlCi0JZmkgIyAkcGFzcyA9IGNvbnYKLQotCi0JIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgotCWxpbmtsaWI9Ci0JaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJgotCSAgIHsgdGVzdCB5ZXMgPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKLQkgICAgIHRlc3QgYnVpbHQsbm8gPSAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIjsgfTsgdGhlbgotCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKLQllbHNlCi0JICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCi0JICAgIGxpbmtsaWI9JGwKLQkgIGRvbmUKLQlmaQotCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yICckbGliJyIKLQlmaQotCi0JIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCi0JaWYgdGVzdCBkbG9wZW4gPSAiJHBhc3MiOyB0aGVuCi0JICB0ZXN0IC16ICIkbGliZGlyIiBcCi0JICAgICYmIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgotCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKLQkgICAgIHRlc3QgeWVzICE9ICIkZGxvcGVuX3N1cHBvcnQiIHx8Ci0JICAgICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiCi0JICB0aGVuCi0JICAgICMgSWYgdGhlcmUgaXMgbm8gZGxuYW1lLCBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nCi0JICAgICMgc3RhdGljYWxseSwgd2UgbmVlZCB0byBwcmVsb2FkLiAgV2UgYWxzbyBuZWVkIHRvIHByZWxvYWQgYW55Ci0JICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0Ci0JICAgICMgYm9tYiBvdXQgaW4gdGhlIGxvYWQgZGVwbGlicyBwaGFzZS4KLQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKLQkgIGVsc2UKLQkgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiCi0JICBmaQotCSAgY29udGludWUKLQlmaSAjICRwYXNzID0gZGxvcGVuCi0KLQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLQljYXNlICRsYWRpciBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSRsYWRpciA7OwotCSopCi0JICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKLQkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiAnJGxhZGlyJyIKLQkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgotCSAgICBhYnNfbGFkaXI9JGxhZGlyCi0JICBmaQotCSAgOzsKLQllc2FjCi0JZnVuY19iYXNlbmFtZSAiJGxpYiIKLQlsYW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0KLQkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KLQlpZiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgotCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSAnJGxpYicgd2FzIG1vdmVkLiIKLQkgICAgZGlyPSRsYWRpcgotCSAgICBhYnNkaXI9JGFic19sYWRpcgotCSAgICBsaWJkaXI9JGFic19sYWRpcgotCSAgZWxzZQotCSAgICBkaXI9JGx0X3N5c3Jvb3QkbGliZGlyCi0JICAgIGFic2Rpcj0kbHRfc3lzcm9vdCRsaWJkaXIKLQkgIGZpCi0JICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIiAmJiBhdm9pZHRlbXBycGF0aD15ZXMKLQllbHNlCi0JICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgotCSAgICBkaXI9JGxhZGlyCi0JICAgIGFic2Rpcj0kYWJzX2xhZGlyCi0JICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLQkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKLQkgIGVsc2UKLQkgICAgZGlyPSRsYWRpci8kb2JqZGlyCi0JICAgIGFic2Rpcj0kYWJzX2xhZGlyLyRvYmpkaXIKLQkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgotCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgotCSAgZmkKLQlmaSAjICRpbnN0YWxsZWQgPSB5ZXMKLQlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKLQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQotCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgotCWlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIjsgdGhlbgotCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiAnJGxpYiciCi0JICBmaQotCSAgY2FzZSAkaG9zdCBpbgotCSAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHBsYXRmb3JtcyB3aXRoIFBFLURMTHMuCi0JICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotCSAgICAgICMgTGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcnkgaWYgYm90aAotCSAgICAgICMgc3RhdGljIGFuZCBzaGFyZWQgYXJlIHByZXNlbnQuICBUaGVyZWZvcmUsIGVuc3VyZSB3ZSBleHRyYWN0Ci0JICAgICAgIyBzeW1ib2xzIGZyb20gdGhlIGltcG9ydCBsaWJyYXJ5IGlmIGEgc2hhcmVkIGxpYnJhcnkgaXMgcHJlc2VudAotCSAgICAgICMgKG90aGVyd2lzZSwgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSB3aWxsIGJlIGluY29ycmVjdCkuICBXZSBkbwotCSAgICAgICMgdGhpcyBieSBwdXR0aW5nIHRoZSBpbXBvcnQgbGlicmFyeSBuYW1lIGludG8gJG5ld2RscHJlZmlsZXMuCi0JICAgICAgIyBXZSByZWNvdmVyIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgYnkgJ3NhdmluZycgdGhlIGxhIGZpbGUKLQkgICAgICAjIG5hbWUgaW4gYSBzcGVjaWFsIHB1cnBvc2UgdmFyaWFibGUsIGFuZCAobGF0ZXIpIGV4dHJhY3RpbmcgdGhlCi0JICAgICAgIyBkbG5hbWUgZnJvbSB0aGUgbGEgZmlsZS4KLQkgICAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgotCSAgICAgICAgZnVuY190cl9zaCAiJGRpci8kbGlua2xpYiIKLQkgICAgICAgIGV2YWwgImxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0PVwkYWJzX2xhZGlyL1wkbGFuYW1lIgotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCi0JICAgICAgZWxzZQotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgotCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCi0JICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KLQkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgICBmaQotCSAgICA7OwotCSAgICAqICkKLQkgICAgICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKLQkgICAgICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KLQkgICAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0JICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKLQkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgotCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgotCSAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCi0JICAgICAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGRsbmFtZSIKLQkgICAgICBlbHNlCi0JICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKLQkgICAgICBmaQotCSAgICA7OwotCSAgZXNhYwotCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KLQotCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKLQkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCi0JICBlbGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KLQkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgotCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKLQkgIGVsc2UKLQkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcwotCSAgZmkKLQkgIGNvbnRpbnVlCi0JZmkKLQotCi0JaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgJiYgdGVzdCBsaW5rICE9ICIkcGFzcyI7IHRoZW4KLQkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKLQkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCi0KLQkgIGxpbmthbGxkZXBsaWJzPWZhbHNlCi0JICBpZiB0ZXN0IG5vICE9ICIkbGlua19hbGxfZGVwbGlicyIgfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8Ci0JICAgICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0JICAgIGxpbmthbGxkZXBsaWJzPToKLQkgIGZpCi0KLQkgIHRtcF9saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICBjYXNlICRkZXBsaWIgaW4KLQkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgotCSAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0JCSA7OwotCSAgICBlc2FjCi0JICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KLQkgICAgaWYgJGxpbmthbGxkZXBsaWJzOyB0aGVuCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocwotCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCi0JICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZpCi0JICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KLQkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKLQkgIGRvbmUgIyBmb3IgZGVwbGliCi0JICBjb250aW51ZQotCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgotCi0JaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCi0JICAgICB7IHsgdGVzdCBubyA9ICIkcHJlZmVyX3N0YXRpY19saWJzIiB8fAotCSAgICAgICAgIHRlc3QgYnVpbHQseWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCI7IH0gfHwKLQkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgotCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAotCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIjsgdGhlbgotCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KLQkgICAgICBjYXNlICR0ZW1wX3JwYXRoOiBpbgotCSAgICAgICoiJGFic2RpcjoiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRoICIkYWJzZGlyOiIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0KLQkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgotCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCi0JICAgICMgc2VhcmNoIHBhdGguCi0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KLQkgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgKikKLQkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCi0JICAgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCi0JICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICopCi0JICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KLQkgICAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkgIyAkbGlua21vZGUsJHBhc3MgPSBwcm9nLGxpbmsuLi4KLQotCSAgaWYgJGFsbGRlcGxpYnMgJiYKLQkgICAgIHsgdGVzdCBwYXNzX2FsbCA9ICIkZGVwbGlic19jaGVja19tZXRob2QiIHx8Ci0JICAgICAgIHsgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYKLQkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgotCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKLQkgICAgY29udGludWUKLQkgIGZpCi0JZmkKLQotCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKLQl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicwotCWlmIHRlc3QgYnVpbHQgPSAiJHVzZV9zdGF0aWNfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KLQkgIHVzZV9zdGF0aWNfbGlicz1ubwotCWZpCi0JaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCi0JICAgeyB0ZXN0IG5vID0gIiR1c2Vfc3RhdGljX2xpYnMiIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KLQkgIGNhc2UgJGhvc3QgaW4KLQkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogfCAqb3MyKikKLQkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCi0JICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKLQkgICAgICBuZWVkX3JlbGluaz1ubwotCSAgICA7OwotCSAgKikKLQkgICAgaWYgdGVzdCBubyA9ICIkaW5zdGFsbGVkIjsgdGhlbgotCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCi0JICAgICAgbmVlZF9yZWxpbms9eWVzCi0JICAgIGZpCi0JICAgIDs7Ci0JICBlc2FjCi0JICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQotCi0JICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQotCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCi0JICBkbG9wZW5tb2R1bGU9Ci0JICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbwotCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCi0JICAgICAgZGxvcGVubW9kdWxlPSRkbHByZW1vZHVsZXRlc3QKLQkgICAgICBicmVhawotCSAgICBmaQotCSAgZG9uZQotCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCB5ZXMgPSAiJHNob3VsZG5vdGxpbmsiICYmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KLQkgICAgZWNobwotCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKLQkgICAgZWxzZQotCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCi0JICAgIGZpCi0JICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKLQkgIGZpCi0JICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmCi0JICAgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfaW50b19saWJzIjsgdGhlbgotCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCi0JICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKLQkgICAgIyBzZWFyY2ggcGF0aC4KLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgotCSAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAqKQotCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KLQkgICAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OwotCSAgICAgIGVzYWMKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KLQkgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgKikKLQkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgotCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwotCSAgICAgIGVzYWMKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBmaQotCi0JICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCi0JICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCi0JICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcwotCSAgICBzaGlmdAotCSAgICByZWFsbmFtZT0kMQotCSAgICBzaGlmdAotCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLQkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/Ci0JICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCi0JICAgICAgc29uYW1lPSRkbG5hbWUKLQkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCi0JICAgICAgIyBibGVoIHdpbmRvd3MKLQkgICAgICBjYXNlICRob3N0IGluCi0JICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqIHwgKm9zMiopCi0JICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQkJdmVyc3VmZml4PS0kbWFqb3IKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgotCSAgICBlbHNlCi0JICAgICAgc29uYW1lPSRyZWFsbmFtZQotCSAgICBmaQotCi0JICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCi0JICAgIHNvcm9vdD0kc29uYW1lCi0JICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCi0JICAgIHNvbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgotCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQotCi0JICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93Ci0JICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6Ci0JICAgIGVsc2UKLQkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSAnJHNvbmFtZSciCi0JICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCi0JICAgIGZpCi0KLQkgICAgIyBDcmVhdGUgJG5ld2xpYgotCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCi0JICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciAnJHNvbmFtZSciCi0JICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCi0JICAgIGZpCi0JICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5Ci0JICAgIGRpcj0kb3V0cHV0X29iamRpcgotCSAgICBsaW5rbGliPSRuZXdsaWIKLQkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgotCi0JICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IHJlbGluayAhPSAiJG9wdF9tb2RlIjsgdGhlbgotCSAgICBhZGRfc2hsaWJwYXRoPQotCSAgICBhZGRfZGlyPQotCSAgICBhZGQ9Ci0JICAgIGxpYl9saW5rZWQ9eWVzCi0JICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgotCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKLQkgICAgICBpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3QiOyB0aGVuCi0JCWFkZD0kZGlyLyRsaW5rbGliCi0JCWNhc2UgJGhvc3QgaW4KLQkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9LUwkZGlyIDs7Ci0JCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9LUwkZGlyIDs7Ci0JCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCi0JCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0tTCRkaXIgOzsKLQkJICAqLSotZGFyd2luKiApCi0JCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW5ub3QKLQkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCi0JCSAgICBpZiAvdXNyL2Jpbi9maWxlIC1MICRhZGQgMj4gL2Rldi9udWxsIHwKLQkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGw7IHRoZW4KLQkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KLQkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKLQkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkJCSAgZWNobwotCQkJICBlY2hvICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKLQkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCi0JCQllbHNlCi0JCQkgIGFkZD0kZGlyLyRvbGRfbGlicmFyeQotCQkJZmkKLQkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JCQlhZGQ9JGRpci8kb2xkX2xpYnJhcnkKLQkJICAgICAgZmkKLQkJICAgIGZpCi0JCWVzYWMKLQkgICAgICBlbGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCi0JCWNhc2UgJGhvc3QgaW4KLQkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0kZGlyIDs7Ci0JCWVzYWMKLQkJYWRkX2Rpcj0tTCRkaXIKLQkJYWRkPS1sJG5hbWUKLQkgICAgICBlbGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCi0JCWFkZF9zaGxpYnBhdGg9JGRpcgotCQlhZGQ9LWwkbmFtZQotCSAgICAgIGVsc2UKLQkJbGliX2xpbmtlZD1ubwotCSAgICAgIGZpCi0JICAgICAgOzsKLQkgICAgcmVsaW5rKQotCSAgICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9kaXJlY3QiICYmCi0JICAgICAgICAgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIjsgdGhlbgotCQlhZGQ9JGRpci8kbGlua2xpYgotCSAgICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCi0JCWFkZF9kaXI9LUwkYWJzZGlyCi0JCSMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KLQkJaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KLQkJICBjYXNlICRsaWJkaXIgaW4KLQkJICAgIFtcXC9dKikKLQkJICAgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCi0JCSAgICAgIDs7Ci0JCSAgZXNhYwotCQlmaQotCQlhZGQ9LWwkbmFtZQotCSAgICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCi0JCWFkZF9zaGxpYnBhdGg9JGRpcgotCQlhZGQ9LWwkbmFtZQotCSAgICAgIGVsc2UKLQkJbGliX2xpbmtlZD1ubwotCSAgICAgIGZpCi0JICAgICAgOzsKLQkgICAgKikgbGliX2xpbmtlZD1ubyA7OwotCSAgICBlc2FjCi0KLQkgICAgaWYgdGVzdCB5ZXMgIT0gIiRsaWJfbGlua2VkIjsgdGhlbgotCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KLQkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCi0JICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCi0JICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKLQkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgotCSAgICAgIGlmIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgotCQkgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9taW51c19MIiAmJgotCQkgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCi0JCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCi0JCSoiOiRsaWJkaXI6IiopIDs7Ci0JCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7Ci0JCWVzYWMKLQkgICAgICBmaQotCSAgICBmaQotCSAgZmkKLQotCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgotCSAgICBhZGRfc2hsaWJwYXRoPQotCSAgICBhZGRfZGlyPQotCSAgICBhZGQ9Ci0JICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCi0JICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9kaXJlY3QiICYmCi0JICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSI7IHRoZW4KLQkgICAgICBhZGQ9JGxpYmRpci8kbGlua2xpYgotCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgotCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCi0JICAgICAgYWRkPS1sJG5hbWUKLQkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgotCSAgICAgICoiOiRsaWJkaXI6IiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgYWRkPS1sJG5hbWUKLQkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgotCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCi0JCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiI7IHRoZW4KLQkJYWRkPSRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliCi0JICAgICAgZWxzZQotCQlhZGQ9JGxpYmRpci8kbGlua2xpYgotCSAgICAgIGZpCi0JICAgIGVsc2UKLQkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgotCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCi0JICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgotCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCi0JCWNhc2UgJGxpYmRpciBpbgotCQkgIFtcXC9dKikKLQkJICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgotCQkgICAgOzsKLQkJZXNhYwotCSAgICAgIGZpCi0JICAgICAgYWRkPS1sJG5hbWUKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgotCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgotCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCi0JICAgIGZpCi0JICBmaQotCWVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KLQkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAotCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgotCSAgaWYgdGVzdCB1bnN1cHBvcnRlZCAhPSAiJGhhcmRjb2RlX2RpcmVjdCI7IHRoZW4KLQkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSRvbGRfbGlicmFyeQotCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgIGVsc2UKLQkgICAgY29tcGlsZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkY29tcGlsZV9kZXBsaWJzIgotCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkZmluYWxpemVfZGVwbGlicyIKLQkgIGZpCi0JZWxpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotCSAgIyBOb3QgYSBzaGFyZWQgbGlicmFyeQotCSAgaWYgdGVzdCBwYXNzX2FsbCAhPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgotCSAgICAjIFdlJ3JlIHRyeWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdhaW5zdCBhIHN0YXRpYyBvbmUKLQkgICAgIyBidXQgdGhlIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQuCi0KLQkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbwotCSAgICAjIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGxpbmtlZCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeS4KLQkgICAgZWNobwotCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbm5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKLQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSI7IHRoZW4KLQkgICAgICBlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCi0JICAgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCi0JICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgotCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JCWVjaG8KLQkJZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgJ25tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKLQkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgotCQllY2hvICIqKiogJ25tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgotCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0JCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKLQkJYnVpbGRfb2xkX2xpYnM9eWVzCi0JICAgICAgZWxzZQotCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgICAgICBmaQotCSAgICBmaQotCSAgZWxzZQotCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKLQkgICAgbGlua19zdGF0aWM9eWVzCi0JICBmaQotCWZpICMgbGluayBzaGFyZWQvc3RhdGljIGxpYnJhcnk/Ci0KLQlpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCi0JICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgotCSAgICAgeyB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2ludG9fbGlicyIgfHwKLQkgICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiB8fAotCSAgICAgICB0ZXN0IHllcyA9ICIkbGlua19zdGF0aWMiOyB9OyB0aGVuCi0JICAgICMgRXh0cmFjdCAtUiBmcm9tIGRlcGVuZGVuY3lfbGlicwotCSAgICB0ZW1wX2RlcGxpYnM9Ci0JICAgIGZvciBsaWJkaXIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgICBjYXNlICRsaWJkaXIgaW4KLQkgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRsaWJkaXIiCi0JICAgICAgICAgICB0ZW1wX3hycGF0aD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JCSAgIGNhc2UgIiAkeHJwYXRoICIgaW4KLQkJICAgKiIgJHRlbXBfeHJwYXRoICIqKSA7OwotCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKLQkJICAgZXNhYzs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgICBkZXBlbmRlbmN5X2xpYnM9JHRlbXBfZGVwbGlicwotCSAgZmkKLQotCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGFic2RpciIKLQkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQotCSAgdGVzdCBubyA9ICIkbGlua19zdGF0aWMiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicwotCSAgdG1wX2xpYnM9Ci0JICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBjYXNlICRkZXBsaWIgaW4KLSAgICAgICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgotICAgICAgICAgICAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijs7Ci0gICAgICAgICAgICAgICopIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIiA7OwotICAgICAgICAgICAgZXNhYwotCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCi0JICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KLQkgICAgICAqIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0ICIqKQotICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgIGRvbmUKLQotCSAgaWYgdGVzdCBubyAhPSAiJGxpbmtfYWxsX2RlcGxpYnMiOyB0aGVuCi0JICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCi0JICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgICBwYXRoPQotCSAgICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAgIC1MKikgcGF0aD0kZGVwbGliIDs7Ci0JICAgICAgKi5sYSkKLQkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgotCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLQkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCi0JCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLQkJY2FzZSAkZGlyIGluCi0JCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSRkaXIgOzsKLQkJKikKLQkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0JCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KLQkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiAnJGRpciciCi0JCSAgICBhYnNkaXI9JGRpcgotCQkgIGZpCi0JCSAgOzsKLQkJZXNhYwotCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgotCQljYXNlICRob3N0IGluCi0JCSotKi1kYXJ3aW4qKQotCQkgIGRlcGRlcGw9Ci0JCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAkU0VEIC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyI7IHRoZW4KLQkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXM7IGRvCi0JCSAgICAgIGRlcGRlcGw9JHRtcAotCQkgICAgZG9uZQotCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIjsgdGhlbgotCQkgICAgICBkZXBkZXBsPSRhYnNkaXIvJG9iamRpci8kZGVwZGVwbAotCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAkT1RPT0wgLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCRPVE9PTDY0IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKLSAgICAgICAgICAgICAgICAgICAgICBmaQotCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bC1keWxpYl9maWxlICR3bCRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgotCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAkZGFyd2luX2luc3RhbGxfbmFtZTokZGVwZGVwbCIKLQkJICAgICAgcGF0aD0KLQkJICAgIGZpCi0JCSAgZmkKLQkJICA7OwotCQkqKQotCQkgIHBhdGg9LUwkYWJzZGlyLyRvYmpkaXIKLQkJICA7OwotCQllc2FjCi0JCWVsc2UKLQkJICBldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCi0JCSAgICBmdW5jX3dhcm5pbmcgIickZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKLQotCQkgIHBhdGg9LUwkYWJzZGlyCi0JCWZpCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCi0JICAgICAgKiIgJHBhdGggIiopIDs7Ci0JICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KLQlmaSAjIGxpbmttb2RlID0gbGliCi0gICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicwotICAgICAgaWYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgotCWlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCi0JICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgotCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgotCWVsc2UKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCWZpCi0gICAgICBmaQotICAgICAgZGVwZW5kZW5jeV9saWJzPSRuZXdkZXBlbmRlbmN5X2xpYnMKLSAgICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIjsgdGhlbgotCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKLQlmb3IgZGVwbGliIGluICRzYXZlX2RlcGxpYnM7IGRvCi0JICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCWRvbmUKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IGRsb3BlbiAhPSAiJHBhc3MiOyB0aGVuCi0JdGVzdCBjb252ID0gIiRwYXNzIiB8fCB7Ci0JICAjIE1ha2Ugc3VyZSBsaWJfc2VhcmNoX3BhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0JICBsaWJfc2VhcmNoX3BhdGg9Ci0JICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCi0JICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgotCSAgICAqIiAkZGlyICIqKSA7OwotCSAgICAqKSBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIiA7OwotCSAgICBlc2FjCi0JICBkb25lCi0JICBuZXdsaWJfc2VhcmNoX3BhdGg9Ci0JfQotCi0JaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgotCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCi0JZWxzZQotCSAgdmFycz1kZXBsaWJzCi0JZmkKLQlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKLQkgIGV2YWwgdG1wX2xpYnM9XCJcJCR2YXJcIgotCSAgbmV3X2xpYnM9Ci0JICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KLQkgICAgIyBGSVhNRTogUGVkYW50aWNhbGx5LCB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgc28KLQkgICAgIyAgICAgICAgdGhhdCBzb21lIG5hc3R5IGRlcGVuZGVuY3kgbG9vcCBpc24ndCBhY2NpZGVudGFsbHkKLQkgICAgIyAgICAgICAgYnJva2VuOgotCSAgICAjbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIgotCSAgICAjIFByYWdtYXRpY2FsbHksIHRoaXMgc2VlbXMgdG8gY2F1c2UgdmVyeSBmZXcgcHJvYmxlbXMgaW4KLQkgICAgIyBwcmFjdGljZToKLQkgICAgY2FzZSAkZGVwbGliIGluCi0JICAgIC1MKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwotCSAgICAtUiopIDs7Ci0JICAgICopCi0JICAgICAgIyBBbmQgaGVyZSBpcyB0aGUgcmVhc29uOiB3aGVuIGEgbGlicmFyeSBhcHBlYXJzIG1vcmUKLQkgICAgICAjIHRoYW4gb25jZSBhcyBhbiBleHBsaWNpdCBkZXBlbmRlbmNlIG9mIGEgbGlicmFyeSwgb3IKLQkgICAgICAjIGlzIGltcGxpY2l0bHkgbGlua2VkIGluIG1vcmUgdGhhbiBvbmNlIGJ5IHRoZQotCSAgICAgICMgY29tcGlsZXIsIGl0IGlzIGNvbnNpZGVyZWQgc3BlY2lhbCwgYW5kIG11bHRpcGxlCi0JICAgICAgIyBvY2N1cnJlbmNlcyB0aGVyZW9mIGFyZSBub3QgcmVtb3ZlZC4gIENvbXBhcmUgdGhpcwotCSAgICAgICMgd2l0aCBoYXZpbmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0ZWQgYXMgYQotCSAgICAgICMgZGVwZW5kZW5jeSBvZiBtdWx0aXBsZSBvdGhlciBsaWJyYXJpZXM6IGluIHRoaXMgY2FzZSwKLQkgICAgICAjIHdlIGtub3cgKHBlZGFudGljYWxseSwgd2UgYXNzdW1lKSB0aGUgbGlicmFyeSBkb2VzIG5vdAotCSAgICAgICMgbmVlZCB0byBiZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIGtlZXAgb25seSB0aGUKLQkgICAgICAjIGxhc3QgY29weS4gIFRoaXMgaXMgbm90IGFsd2F5cyByaWdodCwgYnV0IGl0IGlzIHJhcmUKLQkgICAgICAjIGVub3VnaCB0aGF0IHdlIHJlcXVpcmUgdXNlcnMgdGhhdCByZWFsbHkgbWVhbiB0byBwbGF5Ci0JICAgICAgIyBzdWNoIHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8gbGluayB0aGUgbGlicmFyeQotCSAgICAgICMgdXNpbmcgLVdsLC1sbmFtZSwgc28gdGhhdCBsaWJ0b29sIGRvZXMgbm90IGNvbnNpZGVyIGl0Ci0JICAgICAgIyBmb3IgZHVwbGljYXRlIHJlbW92YWwuCi0JICAgICAgY2FzZSAiICRzcGVjaWFsZGVwbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwotCSAgICAgICopCi0JCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgotCQkqIiAkZGVwbGliICIqKSA7OwotCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7Ci0JCWVzYWMKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCSAgdG1wX2xpYnM9Ci0JICBmb3IgZGVwbGliIGluICRuZXdfbGliczsgZG8KLQkgICAgY2FzZSAkZGVwbGliIGluCi0JICAgIC1MKikKLQkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KLQkgICAgICAqIiAkZGVwbGliICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OwotCSAgICBlc2FjCi0JICBkb25lCi0JICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgotCWRvbmUgIyBmb3IgdmFyCi0gICAgICBmaQotCi0gICAgICAjIEFkZCBTdW4gQ0MgcG9zdGRlcHMgaWYgcmVxdWlyZWQ6Ci0gICAgICB0ZXN0IENYWCA9ICIkdGFnbmFtZSIgJiYgewotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIGxpbnV4KikKLSAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLSAgICAgICAgICAqU3VuXCBDKikgIyBTdW4gQysrIDUuOQotICAgICAgICAgICAgZnVuY19zdW5jY19jc3RkX2FiaQotCi0gICAgICAgICAgICBpZiB0ZXN0IG5vICE9ICIkc3VuY2NfdXNlX2NzdGRfYWJpIjsgdGhlbgotICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwb3N0ZGVwcyAnIC1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICA7OwotCi0gICAgICAgIHNvbGFyaXMqKQotICAgICAgICAgIGZ1bmNfY2NfYmFzZW5hbWUgIiRDQyIKLSAgICAgICAgICBjYXNlICRmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdCBpbgotICAgICAgICAgIENDKiB8IHN1bkNDKikKLSAgICAgICAgICAgIGZ1bmNfc3VuY2NfY3N0ZF9hYmkKLQotICAgICAgICAgICAgaWYgdGVzdCBubyAhPSAiJHN1bmNjX3VzZV9jc3RkX2FiaSI7IHRoZW4KLSAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcG9zdGRlcHMgJyAtbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgfQotCi0gICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicwotICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCi0gICAgICB0bXBfbGlicz0KLSAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICIgaW4KLQkqIiAkaSAiKikKLQkgIGk9Ci0JICA7OwotCWVzYWMKLQlpZiB0ZXN0IC1uICIkaSI7IHRoZW4KLQkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKLSAgICBkb25lICMgZm9yIHBhc3MKLSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgotICAgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwotICAgIGZpCi0gICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgotICAgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwotICAgIGZpCi0KLSAgICBjYXNlICRsaW5rbW9kZSBpbgotICAgIG9sZGxpYikKLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCi0JZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCi0gICAgICBmaQotCi0gICAgICBjYXNlICIgJGRlcGxpYnMiIGluCi0gICAgICAqXCAtbCogfCAqXCAtTCopCi0JZnVuY193YXJuaW5nICInLWwnIGFuZCAnLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKLSAgICAgIGVzYWMKLQotICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICInLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgotCi0gICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCi0JZnVuY193YXJuaW5nICInLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCi0gICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLSAgICAgIG9sZGxpYnM9JG91dHB1dAotICAgICAgZnVuY19hcHBlbmQgb2JqcyAiJG9sZF9kZXBsaWJzIgotICAgICAgOzsKLQotICAgIGxpYikKLSAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtICdsaWJOQU1FLmxhJy4KLSAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KLSAgICAgIGxpYiopCi0JZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgotCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCi0JZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCi0JOzsKLSAgICAgICopCi0JdGVzdCBubyA9ICIkbW9kdWxlIiBcCi0JICAmJiBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSAnJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoICdsaWInIgotCi0JaWYgdGVzdCBubyAhPSAiJG5lZWRfbGliX3ByZWZpeCI7IHRoZW4KLQkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKLQkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKLQkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKLQkgIGV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgotCWVsc2UKLQkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKLQkgIGxpYm5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCWZpCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgaWYgdGVzdCAtbiAiJG9ianMiOyB0aGVuCi0JaWYgdGVzdCBwYXNzX2FsbCAhPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnRvb2wgbGlicmFyeSAnJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKLQllbHNlCi0JICBlY2hvCi0JICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCi0JICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKLQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkb2JqcyIKLQlmaQotICAgICAgZmkKLQotICAgICAgdGVzdCBubyA9ICIkZGxzZWxmIiBcCi0JfHwgZnVuY193YXJuaW5nICInLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKLQotICAgICAgc2V0IGR1bW15ICRycGF0aAotICAgICAgc2hpZnQKLSAgICAgIHRlc3QgMSAtbHQgIiQjIiBcCi0JJiYgZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSAnLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgotCi0gICAgICBpbnN0YWxsX2xpYmRpcj0kMQotCi0gICAgICBvbGRsaWJzPQotICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgotCWlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0JICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgotCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSAnLmFsJyBleHRlbnNpb24gc28KLQkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgotCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgotCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKLQkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQotCSAgYnVpbGRfb2xkX2xpYnM9eWVzCi0JZmkKLQotCXRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCSAgZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKLQotCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JICBmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgotICAgICAgZWxzZQotCi0JIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KLQlzYXZlX2lmcz0kSUZTOyBJRlM9OgotCXNldCBkdW1teSAkdmluZm8gMCAwIDAKLQlzaGlmdAotCUlGUz0kc2F2ZV9pZnMKLQotCXRlc3QgLW4gIiQ3IiAmJiBcCi0JICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gJy12ZXJzaW9uLWluZm8nIgotCi0JIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKLQkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cwotCSMgdG8gbWFrZSB0aGUgY29kZSBiZWxvdyBhIGJpdCBtb3JlIGNvbXByZWhlbnNpYmxlCi0KLQljYXNlICR2aW5mb19udW1iZXIgaW4KLQl5ZXMpCi0JICBudW1iZXJfbWFqb3I9JDEKLQkgIG51bWJlcl9taW5vcj0kMgotCSAgbnVtYmVyX3JldmlzaW9uPSQzCi0JICAjCi0JICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAotCSAgIyB1c2UgdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMgdGhlIG1ham9yIHZlcnNpb24KLQkgICMgYW5kIHRob3NlIHRoYXQgc3VidHJhY3QgYWdlIGFuZCB1c2UgYWdlIGFzCi0JICAjIGEgbWlub3IgdmVyc2lvbi4gIEJ1dCwgdGhlbiB0aGVyZSBpcyBpcml4Ci0JICAjIHRoYXQgaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCi0JICAjCi0JICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLQkgICMgY29ycmVjdCBsaW51eCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotCSAgZGFyd2lufGZyZWVic2QtZWxmfGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCi0JICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKLQkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgYWdlPSRudW1iZXJfbWlub3IKLQkgICAgcmV2aXNpb249JG51bWJlcl9yZXZpc2lvbgotCSAgICA7OwotCSAgZnJlZWJzZC1hb3V0fHFueHxzdW5vcykKLQkgICAgY3VycmVudD0kbnVtYmVyX21ham9yCi0JICAgIHJldmlzaW9uPSRudW1iZXJfbWlub3IKLQkgICAgYWdlPTAKLQkgICAgOzsKLQkgIGlyaXh8bm9uc3RvcHV4KQotCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCi0JICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGFnZT0kbnVtYmVyX21pbm9yCi0JICAgIHJldmlzaW9uPSRudW1iZXJfbWlub3IKLQkgICAgbHRfaXJpeF9pbmNyZW1lbnQ9bm8KLQkgICAgOzsKLQkgICopCi0JICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiJG1vZGVuYW1lOiB1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlICckdmVyc2lvbl90eXBlJyIKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0Jbm8pCi0JICBjdXJyZW50PSQxCi0JICByZXZpc2lvbj0kMgotCSAgYWdlPSQzCi0JICA7OwotCWVzYWMKLQotCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCi0JY2FzZSAkY3VycmVudCBpbgotCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKLQkqKQotCSAgZnVuY19lcnJvciAiQ1VSUkVOVCAnJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCi0JICA7OwotCWVzYWMKLQotCWNhc2UgJHJldmlzaW9uIGluCi0JMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwotCSopCi0JICBmdW5jX2Vycm9yICJSRVZJU0lPTiAnJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgotCSAgOzsKLQllc2FjCi0KLQljYXNlICRhZ2UgaW4KLQkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7Ci0JKikKLQkgIGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCi0JICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKLQkgIDs7Ci0JZXNhYwotCi0JaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KLQkgIGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgJyRjdXJyZW50JyIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgotCWZpCi0KLQkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCi0JbWFqb3I9Ci0JdmVyc3VmZml4PQotCXZlcnN0cmluZz0KLQljYXNlICR2ZXJzaW9uX3R5cGUgaW4KLQlub25lKSA7OwotCi0JZGFyd2luKQotCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgotCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgotCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0kbWFqb3IuJGFnZS4kcmV2aXNpb24KLQkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCi0JICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQotCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKLQkgIHhsY3ZlcnN0cmluZz0iJHdsLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudCAkd2wtY3VycmVudF92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKLQkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKLSAgICAgICAgICAjIE9uIERhcndpbiBvdGhlciBjb21waWxlcnMKLSAgICAgICAgICBjYXNlICRDQyBpbgotICAgICAgICAgICAgICBuYWdmb3IqKQotICAgICAgICAgICAgICAgICAgdmVyc3RyaW5nPSIkd2wtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50ICR3bC1jdXJyZW50X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgotICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKLSAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhYwotCSAgOzsKLQotCWZyZWVic2QtYW91dCkKLQkgIG1ham9yPS4kY3VycmVudAotCSAgdmVyc3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KLQkgIDs7Ci0KLQlmcmVlYnNkLWVsZikKLQkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCi0JICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCi0JICA7OwotCi0JaXJpeCB8IG5vbnN0b3B1eCkKLQkgIGlmIHRlc3Qgbm8gPSAiJGx0X2lyaXhfaW5jcmVtZW50IjsgdGhlbgotCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgZWxzZQotCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKLQkgIGZpCi0JICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQotCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0JICAgIG5vbnN0b3B1eCkgdmVyc3RyaW5nX3ByZWZpeD1ub25zdG9wdXggOzsKLQkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OwotCSAgZXNhYwotCSAgdmVyc3RyaW5nPSR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbgotCi0JICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgotCSAgbG9vcD0kcmV2aXNpb24KLQkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8KLQkgICAgZnVuY19hcml0aCAkcmV2aXNpb24gLSAkbG9vcAotCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKLQkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgdmVyc3RyaW5nPSR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nCi0JICBkb25lCi0KLQkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluICcuJy4KLQkgIG1ham9yPS4kbWFqb3IKLQkgIHZlcnN1ZmZpeD0kbWFqb3IuJHJldmlzaW9uCi0JICA7OwotCi0JbGludXgpICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0kbWFqb3IuJGFnZS4kcmV2aXNpb24KLQkgIDs7Ci0KLQlvc2YpCi0JICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PS4kY3VycmVudC4kYWdlLiRyZXZpc2lvbgotCSAgdmVyc3RyaW5nPSRjdXJyZW50LiRhZ2UuJHJldmlzaW9uCi0KLQkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCi0JICBsb29wPSRhZ2UKLQkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8KLQkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRsb29wCi0JICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQotCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICB2ZXJzdHJpbmc9JHZlcnN0cmluZzokaWZhY2UuMAotCSAgZG9uZQotCi0JICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCi0JICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjokY3VycmVudC4wIgotCSAgOzsKLQotCXFueCkKLQkgIG1ham9yPS4kY3VycmVudAotCSAgdmVyc3VmZml4PS4kY3VycmVudAotCSAgOzsKLQotCXNjbykKLQkgIG1ham9yPS4kY3VycmVudAotCSAgdmVyc3VmZml4PS4kY3VycmVudAotCSAgOzsKLQotCXN1bm9zKQotCSAgbWFqb3I9LiRjdXJyZW50Ci0JICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRyZXZpc2lvbgotCSAgOzsKLQotCXdpbmRvd3MpCi0JICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCi0JICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGUgc3lzdGVtcy4KLQkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCi0JICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0tJG1ham9yCi0JICA7OwotCi0JKikKLQkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSAnJHZlcnNpb25fdHlwZSciCi0JICA7OwotCWVzYWMKLQotCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCi0JaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLQkgIG1ham9yPQotCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0JICBkYXJ3aW4pCi0JICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZwotCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5Ci0JICAgIHZlcnN0cmluZz0KLQkgICAgOzsKLQkgICopCi0JICAgIHZlcnN0cmluZz0wLjAKLQkgICAgOzsKLQkgIGVzYWMKLQkgIGlmIHRlc3Qgbm8gPSAiJG5lZWRfdmVyc2lvbiI7IHRoZW4KLQkgICAgdmVyc3VmZml4PQotCSAgZWxzZQotCSAgICB2ZXJzdWZmaXg9LjAuMAotCSAgZmkKLQlmaQotCi0JIyBSZW1vdmUgdmVyc2lvbiBpbmZvIGZyb20gbmFtZSBpZiB2ZXJzaW9uaW5nIHNob3VsZCBiZSBhdm9pZGVkCi0JaWYgdGVzdCB5ZXMsbm8gPSAiJGF2b2lkX3ZlcnNpb24sJG5lZWRfdmVyc2lvbiI7IHRoZW4KLQkgIG1ham9yPQotCSAgdmVyc3VmZml4PQotCSAgdmVyc3RyaW5nPQotCWZpCi0KLQkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCi0JaWYgdGVzdCB5ZXMgPSAiJGFsbG93X3VuZGVmaW5lZCI7IHRoZW4KLQkgIGlmIHRlc3QgdW5zdXBwb3J0ZWQgPSAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbgotCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0JICAgICAgZnVuY193YXJuaW5nICJ1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzOyBidWlsZGluZyBzdGF0aWMgb25seSIKLQkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgICAgZWxzZQotCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbid0IGJ1aWxkICRob3N0IHNoYXJlZCBsaWJyYXJ5IHVubGVzcyAtbm8tdW5kZWZpbmVkIGlzIHNwZWNpZmllZCIKLQkgICAgZmkKLQkgIGZpCi0JZWxzZQotCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRub191bmRlZmluZWRfZmxhZwotCWZpCi0KLSAgICAgIGZpCi0KLSAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiA6Ci0gICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCi0gICAgICB0ZXN0ICIgIiA9ICIkbGlib2JqcyIgJiYgbGlib2Jqcz0KLQotICAgICAgaWYgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KLQkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQotCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgotCXJlbW92ZWxpc3Q9Ci0JdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKLQlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCi0JICBjYXNlICRwIGluCi0JICAgICouJG9iamV4dCB8ICouZ2NubykKLQkgICAgICAgOzsKLQkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS4qKQotCSAgICAgICBpZiB0ZXN0IC1uICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiOyB0aGVuCi0JCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQotCQkgdGhlbgotCQkgICBjb250aW51ZQotCQkgZmkKLQkgICAgICAgZmkKLQkgICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRwIgotCSAgICAgICA7OwotCSAgICAqKSA7OwotCSAgZXNhYwotCWRvbmUKLQl0ZXN0IC1uICIkcmVtb3ZlbGlzdCIgJiYgXAotCSAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciBcJHJlbW92ZWxpc3QiCi0gICAgICBmaQotCi0gICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgJiYgdGVzdCBjb252ZW5pZW5jZSAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KLQlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKLQotCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KLQlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4kbGliZXh0JC9kOyAkbG8ybyIgfCAkTkwyU1BgCi0gICAgICBmaQotCi0gICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgotICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCi0gICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIiRsaWJfc2VhcmNoX3BhdGggIiB8ICRTRUQgInMlICRwYXRoICUgJWciYAotICAgICAgIwlkZXBsaWJzPWAkRUNITyAiJGRlcGxpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCi0gICAgICAjCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCi0gICAgICAjZG9uZQotCi0gICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgotCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KLQl0ZW1wX3hycGF0aD0KLQlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCi0JICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKLQkgIGZ1bmNfYXBwZW5kIHRlbXBfeHJwYXRoICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgotCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZG9uZQotCWlmIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fCB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0JICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX3hycGF0aCAkZGVwZW5kZW5jeV9saWJzIgotCWZpCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSBkbGZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzIHRoYXQgd29uJ3QgYmUgZGxwcmVvcGVuZWQKLSAgICAgIG9sZF9kbGZpbGVzPSRkbGZpbGVzCi0gICAgICBkbGZpbGVzPQotICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCi0JY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KLQkqIiAkbGliICIqKSA7OwotCSopIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkbGliIiA7OwotCWVzYWMKLSAgICAgIGRvbmUKLQotICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcwotICAgICAgb2xkX2RscHJlZmlsZXM9JGRscHJlZmlsZXMKLSAgICAgIGRscHJlZmlsZXM9Ci0gICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KLQljYXNlICIkZGxwcmVmaWxlcyAiIGluCi0JKiIgJGxpYiAiKikgOzsKLQkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKLQllc2FjCi0gICAgICBkb25lCi0KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgotCSAgY2FzZSAkaG9zdCBpbgotCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCi0JICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKLQkgICAgOzsKLQkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKLQkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKLQkgICAgOzsKLQkgICotKi1uZXRic2QqKQotCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KLQkgICAgOzsKLQkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQotCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KLQkgICAgOzsKLQkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKLQkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCi0JICAgIDs7Ci0JICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCi0JICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKLQkgICAgOzsKLQkgICopCi0JICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCi0JICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX25lZWRfbGMiOyB0aGVuCi0JICAgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1sYyIKLQkgICAgZmkKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCi0JIyBUcmFuc2Zvcm0gZGVwbGlicyBpbnRvIG9ubHkgZGVwbGlicyB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gc2hhcmVkLgotCW5hbWVfc2F2ZT0kbmFtZQotCWxpYm5hbWVfc2F2ZT0kbGlibmFtZQotCXJlbGVhc2Vfc2F2ZT0kcmVsZWFzZQotCXZlcnN1ZmZpeF9zYXZlPSR2ZXJzdWZmaXgKLQltYWpvcl9zYXZlPSRtYWpvcgotCSMgSSdtIG5vdCBzdXJlIGlmIEknbSB0cmVhdGluZyB0aGUgcmVsZWFzZSBjb3JyZWN0bHkuICBJIHRoaW5rCi0JIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCi0JIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/Ci0JcmVsZWFzZT0KLQl2ZXJzdWZmaXg9Ci0JbWFqb3I9Ci0JbmV3ZGVwbGlicz0KLQlkcm9wcGVkZGVwcz1ubwotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JcGFzc19hbGwpCi0JICAjIERvbid0IGNoZWNrIGZvciBzaGFyZWQvc3RhdGljLiAgRXZlcnl0aGluZyB3b3Jrcy4KLQkgICMgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sKLQkgICMgd2hldGhlciB0aGUgbGlicmFyeSBleGlzdHMgb3Igbm90LiAgQnV0IHRoaXMgaXMgb24KLQkgICMgb3NmMyAmIG9zZjQgYW5kIEknbSBub3QgcmVhbGx5IHN1cmUuLi4gSnVzdAotCSAgIyBpbXBsZW1lbnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVoYXZpb3IuCi0JICBuZXdkZXBsaWJzPSRkZXBsaWJzCi0JICA7OwotCXRlc3RfY29tcGlsZSkKLQkgICMgVGhpcyBjb2RlIHN0cmVzc2VzIHRoZSAibGlicmFyaWVzIGFyZSBwcm9ncmFtcyIgcGFyYWRpZ20gdG8gaXRzCi0JICAjIGxpbWl0cy4gTWF5YmUgZXZlbiBicmVha3MgaXQuICBXZSBjb21waWxlIGEgcHJvZ3JhbSwgbGlua2luZyBpdAotCSAgIyBhZ2FpbnN0IHRoZSBkZXBsaWJzIGFzIGEgcHJveHkgZm9yIHRoZSBsaWJyYXJ5LiAgVGhlbiB3ZSBjYW4gY2hlY2sKLQkgICMgd2hldGhlciB0aGV5IGxpbmtlZCBpbiBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggbGRkLgotCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdC5jCi0JICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCi0JICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KLUVPRgotCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAotCSAgaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGRlcGxpYnM7IHRoZW4KLQkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAotCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KLQkgICAgICBjYXNlICRpIGluCi0JICAgICAgLWwqKQotCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCi0JCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCQlpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgotCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgotCQkgICoiICRpICIqKQotCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgICAgaT0KLQkJICAgIDs7Ci0JCSAgZXNhYwotCQlmaQotCQlpZiB0ZXN0IC1uICIkaSI7IHRoZW4KLQkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLQkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCi0JCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKLQkJICBkZXBsaWJfbWF0Y2g9JDEKLQkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDA7IHRoZW4KLQkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJICBlbHNlCi0JCSAgICBkcm9wcGVkZGVwcz15ZXMKLQkJICAgIGVjaG8KLQkJICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKLQkJICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBJIGJlbGlldmUgeW91IGRvIG5vdCBoYXZlIgotCQkgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgotCQkgICAgZWNobyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgotCQkgIGZpCi0JCWZpCi0JCTs7Ci0JICAgICAgKikKLQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQk7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgZWxzZQotCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKLQkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgotCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KLQkgICAgICBjYXNlICRpIGluCi0JICAgICAgLWwqKQotCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCi0JCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0Ci0JCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCi0JCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAotCQkgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCi0JCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLQkJICAgICoiICRpICIqKQotCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCSAgICAgIGk9Ci0JCSAgICAgIDs7Ci0JCSAgICBlc2FjCi0JCSAgZmkKLQkJICBpZiB0ZXN0IC1uICIkaSI7IHRoZW4KLQkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAotCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKLQkJICAgIGRlcGxpYl9tYXRjaD0kMQotCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwOyB0aGVuCi0JCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJICAgIGVsc2UKLQkJICAgICAgZHJvcHBlZGRlcHM9eWVzCi0JCSAgICAgIGVjaG8KLQkJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgotCQkgICAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQkgICAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQkgICAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JCSAgICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIHRoaXMgb25lIgotCQkgICAgICBlY2hvICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCi0JCSAgICBmaQotCQkgIGZpCi0JCWVsc2UKLQkJICBkcm9wcGVkZGVwcz15ZXMKLQkJICBlY2hvCi0JCSAgJEVDSE8gIioqKiBXYXJuaW5nISAgTGlicmFyeSAkaSBpcyBuZWVkZWQgYnkgdGhpcyBsaWJyYXJ5IGJ1dCBJIHdhcyBub3QgYWJsZSB0byIKLQkJICBlY2hvICIqKiogbWFrZSBpdCBsaW5rIGluISAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGl0IG9yIHNvbWUiCi0JCSAgZWNobyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKLQkJICBlY2hvICIqKiogZnVuY3Rpb25hbC4gIEluc3RhbGxpbmcgaXQgYmVmb3JlIGNvbnRpbnVpbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIuIgotCQlmaQotCQk7OwotCSAgICAgICopCi0JCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgIGZpCi0JICA7OwotCWZpbGVfbWFnaWMqKQotCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKLQkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKLQkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkgICAgY2FzZSAkYV9kZXBsaWIgaW4KLQkgICAgLWwqKQotCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCi0JICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KLQkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCi0JCSoiICRhX2RlcGxpYiAiKikKLQkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkgIGFfZGVwbGliPQotCQkgIDs7Ci0JCWVzYWMKLQkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KLQkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCi0JCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCi0JCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKLQkJZWxzZQotCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCi0JCWZpCi0JCXRlc3QgeWVzID0gIiR3YW50X25vY2FzZWdsb2IiICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCi0JCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwotCQkgIGlmIHRlc3QgeWVzID0gIiR3YW50X25vY2FzZWdsb2IiOyB0aGVuCi0JCSAgICBzaG9wdCAtcyBub2Nhc2VnbG9iCi0JCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCi0JCSAgICAkbm9jYXNlZ2xvYgotCQkgIGVsc2UKLQkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKLQkJICBmaQotCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KLQkJICAgICAgIyBGb2xsb3cgc29mdCBsaW5rcy4KLQkJICAgICAgaWYgbHMgLWxMZCAiJHBvdGVudF9saWIiIDI+L2Rldi9udWxsIHwKLQkJCSAkR1JFUCAiIC0+ICIgPi9kZXYvbnVsbDsgdGhlbgotCQkJY29udGludWUKLQkJICAgICAgZmkKLQkJICAgICAgIyBUaGUgc3RhdGVtZW50IGFib3ZlIHRyaWVzIHRvIGF2b2lkIGVudGVyaW5nIGFuCi0JCSAgICAgICMgZW5kbGVzcyBsb29wIGJlbG93LCBpbiBjYXNlIG9mIGN5Y2xpYyBsaW5rcy4KLQkJICAgICAgIyBXZSBtaWdodCBzdGlsbCBlbnRlciBhbiBlbmRsZXNzIGxvb3AsIHNpbmNlIGEgbGluawotCQkgICAgICAjIGxvb3AgY2FuIGJlIGNsb3NlZCB3aGlsZSB3ZSBmb2xsb3cgbGlua3MsCi0JCSAgICAgICMgYnV0IHNvIHdoYXQ/Ci0JCSAgICAgIHBvdGxpYj0kcG90ZW50X2xpYgotCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KLQkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJFNFRCAncy8uKiAtPiAvLydgCi0JCQljYXNlICRwb3RsaWJsaW5rIGluCi0JCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0kcG90bGlibGluazs7Ci0JCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3N8W14vXSokfHwnYCIkcG90bGlibGluayI7OwotCQkJZXNhYwotCQkgICAgICBkb25lCi0JCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8Ci0JCQkgJFNFRCAtZSAxMHEgfAotCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0JCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkJYV9kZXBsaWI9Ci0JCQlicmVhayAyCi0JCSAgICAgIGZpCi0JCSAgZG9uZQotCQlkb25lCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCi0JCWRyb3BwZWRkZXBzPXllcwotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKLQkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgotCQlpZiB0ZXN0IC16ICIkcG90bGliIjsgdGhlbgotCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCi0JCWVsc2UKLQkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKLQkJICAkRUNITyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCi0JCWZpCi0JICAgICAgZmkKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgotCSAgOzsKLQltYXRjaF9wYXR0ZXJuKikKLQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0Ci0JICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCi0JICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICAgIGNhc2UgJGFfZGVwbGliIGluCi0JICAgIC1sKikKLQkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgotCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCi0JCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgotCQkqIiAkYV9kZXBsaWIgIiopCi0JCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICBhX2RlcGxpYj0KLQkJICA7OwotCQllc2FjCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCi0JCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KLQkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKLQkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCi0JCSAgICBwb3RsaWI9JHBvdGVudF9saWIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKLQkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCi0JCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkgICAgICBhX2RlcGxpYj0KLQkJICAgICAgYnJlYWsgMgotCQkgICAgZmkKLQkJICBkb25lCi0JCWRvbmUKLQkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KLQkJZHJvcHBlZGRlcHM9eWVzCi0JCWVjaG8KLQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgotCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCi0JCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVuCi0JCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKLQkJZWxzZQotCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgotCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKLQkJZmkKLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KLQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCi0JICA7OwotCW5vbmUgfCB1bmtub3duIHwgKikKLQkgIG5ld2RlcGxpYnM9Ci0JICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAotCSAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KLQkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbwotCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKLQkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAic3wkaXx8ImAKLQkgICAgZG9uZQotCSAgZmkKLQkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCi0JICAqWyFcCVwgXSopCi0JICAgIGVjaG8KLQkgICAgaWYgdGVzdCBub25lID0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KLQkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCi0JICAgIGVsc2UKLQkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgotCSAgICBmaQotCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKLQkgICAgZHJvcHBlZGRlcHM9eWVzCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLQl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCi0JbWFqb3I9JG1ham9yX3NhdmUKLQlyZWxlYXNlPSRyZWxlYXNlX3NhdmUKLQlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKLQluYW1lPSRuYW1lX3NhdmUKLQotCWNhc2UgJGhvc3QgaW4KLQkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCi0JICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKLQkgIDs7Ci0JZXNhYwotCi0JaWYgdGVzdCB5ZXMgPSAiJGRyb3BwZWRkZXBzIjsgdGhlbgotCSAgaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSI7IHRoZW4KLQkgICAgZWNobwotCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKLQkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgotCSAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKLQkgICAgZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgotCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotCSAgICAgIGVjaG8KLQkgICAgICBlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKLQkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCi0JICAgICAgZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgotCSAgICAgIGVjaG8gIioqKiAnbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCi0JICAgIGZpCi0JICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCSAgICAgIG9sZGxpYnM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dAotCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKLQkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKLQkgICAgZWxzZQotCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCSAgICBmaQotCSAgZWxzZQotCSAgICBlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgotCSAgICBlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgotCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCi0KLQkgICAgaWYgdGVzdCBubyA9ICIkYWxsb3dfdW5kZWZpbmVkIjsgdGhlbgotCSAgICAgIGVjaG8KLQkgICAgICBlY2hvICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgotCSAgICAgIGVjaG8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgotCSAgICAgIGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKLQkgICAgICBlY2hvICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgotCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgotCQlvbGRsaWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQKLQkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQotCQlidWlsZF9vbGRfbGlicz15ZXMKLQkgICAgICBlbHNlCi0JCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCSAgICAgIGZpCi0JICAgIGZpCi0JICBmaQotCWZpCi0JIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCi0JZGVwbGlicz0kbmV3ZGVwbGlicwotICAgICAgZmkKLSAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKLSAgICAgIGNhc2UgJGhvc3QgaW4KLQkqLSotZGFyd2luKikKLQkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCSAgZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCSAgOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0Ci0gICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAotICAgICAgbmV3X2xpYnM9Ci0gICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbwotCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgotCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKLQkqKQotCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KLQkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKLQkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JY2FzZSAkZGVwbGliIGluCi0JLUwqKQotCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCi0JICAqIiAkZGVwbGliICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwotCSAgZXNhYwotCSAgOzsKLQkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgZGVwbGlicz0kbmV3X2xpYnMKLQotICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgotICAgICAgbGlicmFyeV9uYW1lcz0KLSAgICAgIG9sZF9saWJyYXJ5PQotICAgICAgZGxuYW1lPQotCi0gICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgotCSMgUmVtb3ZlICR3bCBpbnN0YW5jZXMgd2hlbiBsaW5raW5nIHdpdGggbGQuCi0JIyBGSVhNRTogc2hvdWxkIHRlc3QgdGhlIHJpZ2h0IF9jbWRzIHZhcmlhYmxlLgotCWNhc2UgJGFyY2hpdmVfY21kcyBpbgotCSAgKlwkTERcICopIHdsPSA7OwotICAgICAgICBlc2FjCi0JaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KLQkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKLQkgIGhhcmRjb2RlX2xpYmRpcnM9Ci0JICBkZXBfcnBhdGg9Ci0JICBycGF0aD0kZmluYWxpemVfcnBhdGgKLQkgIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgcnBhdGg9JGNvbXBpbGVfcnBhdGgkcnBhdGgKLQkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbwotCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCi0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0Ci0JCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCQkgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgotCQllbHNlCi0JCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgotCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCi0JCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQotCQkgICAgOzsKLQkJICAqKQotCQkgICAgZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgotCQkgICAgOzsKLQkJICBlc2FjCi0JCWZpCi0JICAgICAgZWxzZQotCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0JCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgotCSAgICAgIGZpCi0JICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KLQkgICAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgIGRvbmUKLQkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCi0JICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKLQkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICBsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKLQkgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKLQkgIGZpCi0JICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgotCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgotCSAgICBycGF0aD0KLQkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLQkgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCi0JICAgIGRvbmUKLQkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCi0JICBmaQotCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKLQlmaQotCi0Jc2hsaWJwYXRoPSRmaW5hbGl6ZV9zaGxpYnBhdGgKLQl0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHNobGlicGF0aD0kY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoCi0JaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KLQkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKLQlmaQotCi0JIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCi0JZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKLQlldmFsIGxpYnJhcnlfbmFtZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIKLQlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKLQlzaGlmdAotCXJlYWxuYW1lPSQxCi0Jc2hpZnQKLQotCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KLQkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKLQllbHNlCi0JICBzb25hbWU9JHJlYWxuYW1lCi0JZmkKLQlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgotCSAgZGxuYW1lPSRzb25hbWUKLQlmaQotCi0JbGliPSRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZQotCWxpbmtuYW1lcz0KLQlmb3IgbGluawotCWRvCi0JICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKLQlkb25lCi0KLQkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYwotCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKLQl0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQotCi0JZGVsZmlsZXM9Ci0JaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgotCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cAotCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCi0JZmkKLQotCW9yaWdfZXhwb3J0X3N5bWJvbHM9Ci0JY2FzZSAkaG9zdF9vcyBpbgotCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCi0JICAgIGZ1bmNfZGxsX2RlZl9wICIkZXhwb3J0X3N5bWJvbHMiIHx8IHsKLQkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKLQkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZwotCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KLQkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCi0JICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQotCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgotCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCi0JICAgICAgZXhwb3J0X3N5bWJvbHM9Ci0JICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotCSAgICB9Ci0JICBmaQotCSAgOzsKLQllc2FjCi0KLQkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scwotCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgIGlmIHRlc3QgeWVzID0gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIgotCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAKLQkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcwotCSAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCi0JICAgIGZvciBjbWQxIGluICRjbWRzOyBkbwotCSAgICAgIElGUz0kc2F2ZV9pZnMKLQkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAotCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgotCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCi0JCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKLQkJICB0cnlfbm9ybWFsX2JyYW5jaD15ZXMKLQkJICBldmFsIGNtZD1cIiRjbWQxXCIKLQkJICBmdW5jX2xlbiAiICRjbWQiCi0JCSAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKLQkJICA7OwotCQkqKQotCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCi0JCSAgOzsKLQkgICAgICBlc2FjCi0JICAgICAgaWYgdGVzdCB5ZXMgPSAiJHRyeV9ub3JtYWxfYnJhbmNoIiBcCi0JCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCi0JCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9Ci0JICAgICAgdGhlbgotCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCi0JCXNraXBwZWRfZXhwb3J0PWZhbHNlCi0JICAgICAgZWxpZiB0ZXN0IC1uICIkbm1fZmlsZV9saXN0X3NwZWMiOyB0aGVuCi0JCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0JCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCi0JCXNhdmVfb3V0cHV0PSRvdXRwdXQKLQkJb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubm0KLQkJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JCWxpYm9ianM9JG5tX2ZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAotCQlmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCi0JCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJE5NIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKLQkJZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzOyBkbwotCQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgotCQkgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgotCQlkb25lID4gIiRvdXRwdXQiCi0JCWV2YWwgY21kPVwiJGNtZDFcIgotCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCi0JCW91dHB1dD0kc2F2ZV9vdXRwdXQKLQkJbGlib2Jqcz0kc2F2ZV9saWJvYmpzCi0JCXNraXBwZWRfZXhwb3J0PWZhbHNlCi0JICAgICAgZWxzZQotCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KLQkJZnVuY192ZXJib3NlICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKLQkJc2tpcHBlZF9leHBvcnQ9OgotCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQotCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KLQkJYnJlYWsKLQkgICAgICBmaQotCSAgICBkb25lCi0JICAgIElGUz0kc2F2ZV9pZnMKLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCI7IHRoZW4KLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCi0JICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKLQkgICAgZmkKLQkgIGZpCi0JZmkKLQotCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgIHRtcF9leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKLQkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhwb3J0X3N5bWJvbHMKLQkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJwotCWZpCi0KLQlpZiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KLQkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCi0JICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgotCSAgIyAncycgY29tbWFuZHMsIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCi0JICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKLQkgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5Ci0JICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgotCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWUgJy9bICxdREFUQS8hZDtzLFwoLipcKVwoWyBcLF0uKlwpLHN8XlwxJHxcMVwyfCwnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyCi0JICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCi0JICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKLQkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCi0JZmkKLQotCXRtcF9kZXBsaWJzPQotCWZvciB0ZXN0X2RlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgotCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OwotCSAgKikKLQkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCWRlcGxpYnM9JHRtcF9kZXBsaWJzCi0KLQlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCi0JICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCi0JICAgIHRlc3QgeWVzID0gIiRjb21waWxlcl9uZWVkc19vYmplY3QiICYmCi0JICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgotCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KLQkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0JICBmaQotCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgotCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKLQkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCi0JICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0JICBlbHNlCi0JICAgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAotCSAgICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCi0JICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQotCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0JICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0JICBmaQotCWZpCi0KLQlpZiB0ZXN0IHllcyA9ICIkdGhyZWFkX3NhZmUiICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCi0JICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKLQkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgotCWZpCi0KLQkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKLQlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCi0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/Ci0JZmkKLQotCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLQlpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiOyB0aGVuCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCi0JICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcwotCSAgZWxzZQotCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCi0JICAgIGNtZHM9JG1vZHVsZV9jbWRzCi0JICBmaQotCWVsc2UKLQkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgotCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCi0JICBlbHNlCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCi0JICAgIGNtZHM9JGFyY2hpdmVfY21kcwotCSAgZmkKLQlmaQotCi0JaWYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmCi0JICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgotCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCi0JICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCi0JICA6Ci0JZWxzZQotCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlCi0JICAjIG9yLCBpZiB1c2luZyBHTlUgbGQgYW5kIHNraXBwZWRfZXhwb3J0IGlzIG5vdCA6LCB1c2UgYSBsaW5rZXIKLQkgICMgc2NyaXB0LgotCi0JICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bwotCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCi0JICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCi0JICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAotCSAgIyBhc3N1bWUgdGhlIGxpbmtlciB1bmRlcnN0YW5kcyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYy4KLQkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKLQkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKLQkgICMgdGhlIHNwZWMuCi0JICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCi0JICBmaQotCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAotCSAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKLQkgIG91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQotCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKLQkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KLQkgIHRlc3RfY21kcz0KLQkgIGNvbmNhdF9jbWRzPQotCSAgb2JqbGlzdD0KLQkgIGxhc3Rfcm9iaj0KLQkgIGs9MQotCi0JICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5sbmtzY3JpcHQKLQkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgotCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKLQkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCi0JICAgIGRvCi0JICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0JICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKLQkgICAgZG9uZQotCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0Ci0JICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0JICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkZmlsZV9saXN0X3NwZWMiOyB0aGVuCi0JICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLmxuawotCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGxpbmtlciBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCi0JICAgIDogPiAkb3V0cHV0Ci0JICAgIHNldCB4ICRzYXZlX2xpYm9ianMKLQkgICAgc2hpZnQKLQkgICAgZmlyc3RvYmo9Ci0JICAgIGlmIHRlc3QgeWVzID0gIiRjb21waWxlcl9uZWVkc19vYmplY3QiOyB0aGVuCi0JICAgICAgZmlyc3RvYmo9IiQxICIKLQkgICAgICBzaGlmdAotCSAgICBmaQotCSAgICBmb3Igb2JqCi0JICAgIGRvCi0JICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0JICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKLQkgICAgZG9uZQotCSAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCi0JICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgotCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIKLQkgIGVsc2UKLQkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KLQkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgotCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKLQkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCi0JICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgotCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAotCSAgICAgIGxlbj0kbGVuMAotCi0JICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCi0JICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCi0JICAgICAgZG8KLQkJZnVuY19sZW4gIiAkb2JqIgotCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0Ci0JCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKLQkJaWYgdGVzdCAteiAiJG9iamxpc3QiIHx8Ci0JCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgotCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgotCQllbHNlCi0JCSAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKLQkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgotCQkgIGlmIHRlc3QgMSAtZXEgIiRrIjsgdGhlbgotCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KLQkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0Ci0JCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKLQkJICBlbHNlCi0JCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgotCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KLQkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgotCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCi0JCSAgZmkKLQkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0Ci0JCSAgZnVuY19hcml0aCAkayArIDEKLQkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKLQkJICBvYmpsaXN0PSIgJG9iaiIKLQkJICBmdW5jX2xlbiAiICRsYXN0X3JvYmoiCi0JCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKLQkJICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCWZpCi0JICAgICAgZG9uZQotCSAgICAgICMgSGFuZGxlIHRoZSByZW1haW5pbmcgb2JqZWN0cyBieSBjcmVhdGluZyBvbmUgbGFzdAotCSAgICAgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0Ci0JICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0JICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+Ci0JICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCi0JICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkcmVsb2FkX2NtZHNcIgotCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCi0JICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgotCSAgICAgIGZpCi0JICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgotCi0JICAgIGVsc2UKLQkgICAgICBvdXRwdXQ9Ci0JICAgIGZpCi0KLQkgICAgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX0gJiYgewotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyIKLQkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAKLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scwotCSAgICAgIGxpYm9ianM9JG91dHB1dAotCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCi0JICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+Ci0JICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCi0JICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KLQkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKLQkgICAgICBmaQotCSAgICB9Ci0KLQkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKLQkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCi0KLQkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgotCSAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCi0JICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbwotCSAgICAgIElGUz0kc2F2ZV9pZnMKLQkgICAgICAkb3B0X3F1aWV0IHx8IHsKLQkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCi0JCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotCSAgICAgIH0KLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgewotCQlsdF9leGl0PSQ/Ci0KLQkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KLQkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAotCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKLQkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCi0JCWZpCi0KLQkJZXhpdCAkbHRfZXhpdAotCSAgICAgIH0KLQkgICAgZG9uZQotCSAgICBJRlM9JHNhdmVfaWZzCi0KLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgotCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJwotCSAgICBmaQotCSAgZmkKLQotICAgICAgICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYmIHsKLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKLQkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9ydF9zeW1ib2xzCi0JICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCi0JICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKLQkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgotCSAgICAgICMgJ3MnIGNvbW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQotCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgotCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5Ci0JICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKLQkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCi0JICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCi0JICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKLQkgICAgZmkKLQkgIH0KLQotCSAgbGlib2Jqcz0kb3V0cHV0Ci0JICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KLQkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKLQotCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi0JICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQotCSAgZmkKLQkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCi0JICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KLQotCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotCSAgaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIjsgdGhlbgotCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCi0JICAgIGVsc2UKLQkgICAgICBjbWRzPSRtb2R1bGVfY21kcwotCSAgICBmaQotCSAgZWxzZQotCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKLQkgICAgZWxzZQotCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcwotCSAgICBmaQotCSAgZmkKLQlmaQotCi0JaWYgdGVzdCAtbiAiJGRlbGZpbGVzIjsgdGhlbgotCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcyB0byAkY21kcy4KLQkgIGV2YWwgY21kcz1cIlwkY21kc35cJFJNICRkZWxmaWxlc1wiCi0JZmkKLQotCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwotCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgotCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14Ci0JICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCi0JICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcwotCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgotCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLQlmaQotCi0Jc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwotCWZvciBjbWQgaW4gJGNtZHM7IGRvCi0JICBJRlM9JHNwJG5sCi0JICBldmFsIGNtZD1cIiRjbWRcIgotCSAgSUZTPSRzYXZlX2lmcwotCSAgJG9wdF9xdWlldCB8fCB7Ci0JICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKLQkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotCSAgfQotCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKLQkgICAgbHRfZXhpdD0kPwotCi0JICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCSAgICBpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCi0JICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKLQkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCi0JCSRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCi0JICAgIGZpCi0KLQkgICAgZXhpdCAkbHRfZXhpdAotCSAgfQotCWRvbmUKLQlJRlM9JHNhdmVfaWZzCi0KLQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCi0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/Ci0KLQkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KLQkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgotCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwotCSAgICBmaQotCSAgZmkKLQotCSAgZXhpdCAkRVhJVF9TVUNDRVNTCi0JZmkKLQotCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCi0JZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCi0JICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCi0JICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKLQkgIGZpCi0JZG9uZQotCi0JIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KLQlpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiB8fCB0ZXN0IHllcyA9ICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCi0JICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KLQkgIGRsbmFtZT0kc29uYW1lCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb2JqKQotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KLQlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgotICAgICAgZmkKLQotICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgotICAgICAgKlwgLWwqIHwgKlwgLUwqKQotCWZ1bmNfd2FybmluZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKLSAgICAgIGVzYWMKLQotICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICInLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgotCi0gICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICInLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCi0KLSAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCi0KLSAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCi0KLSAgICAgIGNhc2UgJG91dHB1dCBpbgotICAgICAgKi5sbykKLQl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCi0KLQlsaWJvYmo9JG91dHB1dAotCWZ1bmNfbG8ybyAiJGxpYm9iaiIKLQlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKLQk7OwotICAgICAgKikKLQlsaWJvYmo9Ci0Jb2JqPSRvdXRwdXQKLQk7OwotICAgICAgZXNhYwotCi0gICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCi0gICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagotCi0gICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKLSAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCi0gICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQotICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KLSAgICAgIHJlbG9hZF9jb252X29ianM9Ci0gICAgICBnZW50b3A9Ci0gICAgICAjIGlmIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBnZXQgcmlkIG9mIC1XbCBmcm9tCi0gICAgICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGFuZCBob3BlIHdlIGNhbiBnZXQgYnkgd2l0aCB0dXJuaW5nIGNvbW1hCi0gICAgICAjIGludG8gc3BhY2UuCi0gICAgICBjYXNlICRyZWxvYWRfY21kcyBpbgotICAgICAgICAqXCRMRFtcIFwkXSopIHdsPSA7OwotICAgICAgZXNhYwotICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgotCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotCSAgdGVzdCAtbiAiJHdsIiB8fCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1gJEVDSE8gIiR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkU0VEICdzfCx8IHxnJ2AKLQkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCAkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MKLQllbHNlCi0JICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvYmp9eAotCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKLQotCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCi0JICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCi0gICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCBsaWJvYmpzPSRub25fcGljX29iamVjdHMKLQotICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0gICAgICByZWxvYWRfb2Jqcz0kb2JqcyRvbGRfZGVwbGlicycgJ2AkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgJyAnJHJlbG9hZF9jb252X29ianMKLQotICAgICAgb3V0cHV0PSRvYmoKLSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwotCi0gICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KLSAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwotCWZpCi0KLQlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIGZpCi0KLSAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IHsKLQlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgotCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCi0JZmkKLQotCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0Ci0JIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KLQkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCi0JIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/Ci0JZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgICB9Ci0KLSAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCBkZWZhdWx0ICE9ICIkcGljX21vZGUiOyB0aGVuCi0JIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KLQlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCi0Jb3V0cHV0PSRsaWJvYmoKLQlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCi0JZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCi0gICAgICBmaQotCi0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIDs7Ci0KLSAgICBwcm9nKQotICAgICAgY2FzZSAkaG9zdCBpbgotCSpjeWd3aW4qKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCi0JICAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmV4ZTs7Ci0gICAgICBlc2FjCi0gICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKLQlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKLQotICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCi0KLSAgICAgICRwcmVsb2FkIFwKLQkmJiB0ZXN0IHVua25vd24sdW5rbm93bix1bmtub3duID0gIiRkbG9wZW5fc3VwcG9ydCwkZGxvcGVuX3NlbGYsJGRsb3Blbl9zZWxmX3N0YXRpYyIgXAotCSYmIGZ1bmNfd2FybmluZyAiJ0xUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgotCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCi0JIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgaXMgdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCi0JZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgKi0qLWRhcndpbiopCi0JIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycwotCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCi0JaWYgdGVzdCBDWFggPSAiJHRhZ25hbWUiOyB0aGVuCi0JICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCi0JICAgIDEwLlswMTIzXSkKLQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wtYmluZF9hdF9sb2FkIgotCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wtYmluZF9hdF9sb2FkIgotCSAgICA7OwotCSAgZXNhYwotCWZpCi0JIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgotCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCi0JZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIiAkZmluYWxpemVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCTs7Ci0gICAgICBlc2FjCi0KLQotICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0Ci0gICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAotICAgICAgbmV3X2xpYnM9Ci0gICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbwotCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgotCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKLQkqKQotCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgotCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQotCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbwotCWNhc2UgJGRlcGxpYiBpbgotCS1MKikKLQkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgotCSAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGNvbXBpbGVfZGVwbGlicz0kbmV3X2xpYnMKLQotCi0gICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgotICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgotCi0gICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgotCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KLQlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbwotCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgotCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZG9uZQotICAgICAgZmkKLQotICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKLSAgICAgIHJwYXRoPQotICAgICAgaGFyZGNvZGVfbGliZGlycz0KLSAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbwotCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgotCSAgICBlbHNlCi0JICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgotCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCi0JICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQotCQk7OwotCSAgICAgICopCi0JCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICBlbHNlCi0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKLQkgIGZpCi0JZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JICBjYXNlICIkcGVybV9ycGF0aCAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZmkKLQljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKLQkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkbGliZGlyIiB8ICRTRUQgLWUgJ3MqL2xpYiQqL2JpbionYAotCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCi0JICAqIjokbGliZGlyOiIqKSA7OwotCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7Ci0JICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OwotCSAgZXNhYwotCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCi0JICAqIjokdGVzdGJpbmRpcjoiKikgOzsKLQkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKLQkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgotICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCi0JIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCWxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwotCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgZmkKLSAgICAgIGNvbXBpbGVfcnBhdGg9JHJwYXRoCi0KLSAgICAgIHJwYXRoPQotICAgICAgaGFyZGNvZGVfbGliZGlycz0KLSAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbwotCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgotCSAgICBlbHNlCi0JICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgotCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCi0JICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQotCQk7OwotCSAgICAgICopCi0JCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICBlbHNlCi0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKLQkgIGZpCi0JZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCi0gICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKLQkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCi0JZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICBmaQotICAgICAgZmluYWxpemVfcnBhdGg9JHJwYXRoCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCi0JIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgotCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAotCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCi0gICAgICBmaQotCi0gICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiIGZhbHNlCi0KLSAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCi0gICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgotCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKLSAgICAgIGZpCi0KLSAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPToKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICpjZWdjYyogfCAqbWluZ3czMmNlKikKLSAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3czMmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KLSAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKLSAgICAgICAgOzsKLSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0gICAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBpZiB0ZXN0IG5vID0gIiRuZWVkX3JlbGluayIgfHwgdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0gICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgICR3cmFwcGVyc19yZXF1aXJlZCB8fCB7Ci0JIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKLQlsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCi0KLQkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KLQlleGl0X3N0YXR1cz0wCi0JZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKLQotCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgotCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCi0JICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwotCWZpCi0KLQkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgotCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiRvYmpleHQiOyB0aGVuCi0JICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4kb2JqZXh0IicKLQlmaQotCi0JZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgIH0KLQotICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KLQljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCi0JZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgotICAgICAgZmkKLQotICAgICAgY29tcGlsZV92YXI9Ci0gICAgICBmaW5hbGl6ZV92YXI9Ci0gICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCi0JICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgotCSAgcnBhdGg9Ci0JICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbwotCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCi0JICBkb25lCi0JICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCi0JZmkKLQlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KLQkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCi0JICBycGF0aD0KLQkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCi0JICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKLQkgIGRvbmUKLQkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRub19pbnN0YWxsIjsgdGhlbgotCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KLQlsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCi0JIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKLQkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgotCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAotCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAotCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKLQotCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgotCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCi0JICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwotCWZpCi0KLQlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiwkZmFzdF9pbnN0YWxsIGluCi0gICAgICAgIHJlbGluaywqKQotCSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0JICBsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCi0JICByZWxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKLQotCSAgZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKLQkgIGZ1bmNfd2FybmluZyAiJyRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKLQkgIDs7Ci0gICAgICAgICoseWVzKQotCSAgbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCi0JICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkU0VEICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCi0gICAgICAgICAgOzsKLQkqLG5vKQotCSAgbGlua19jb21tYW5kPSRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAotCSAgcmVsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCi0gICAgICAgICAgOzsKLQkqLG5lZWRsZXNzKQotCSAgbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoCi0JICByZWxpbmtfY29tbWFuZD0KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotCi0gICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCi0gICAgICBsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAotCi0gICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KLSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQotCi0gICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgotCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKLQlwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAotCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCi0gICAgICBmaQotCi0gICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgotICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgotCi0gICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCi0gICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgotCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbwotCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCi0JICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgotCSAgZWxzZQotCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgotCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCi0JICBmaQotCWRvbmUKLQlyZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkcmVsaW5rX2NvbW1hbmQpIgotCXJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgZmkKLQotICAgICAgIyBPbmx5IGFjdHVhbGx5IGRvIHRoaW5ncyBpZiBub3QgaW4gZHJ5IHJ1biBtb2RlLgotICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKLQkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgotCWNhc2UgJG91dHB1dCBpbgotCSAgKi5leGUpIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKLQkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotCWVzYWMKLQkjIHRlc3QgZm9yIGN5Z3dpbiBiZWNhdXNlIG12IGZhaWxzIHcvbyAuZXhlIGV4dGVuc2lvbnMKLQljYXNlICRob3N0IGluCi0JICAqY3lnd2luKikKLQkgICAgZXhlZXh0PS5leGUKLQkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0bmFtZSIKLQkgICAgb3V0cHV0bmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0JICAqKSBleGVleHQ9IDs7Ci0JZXNhYwotCWNhc2UgJGhvc3QgaW4KLQkgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0JICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvdXRwdXQiICIiICIuIgotCSAgICBvdXRwdXRfbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgICAgb3V0cHV0X3BhdGg9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQkgICAgY3dyYXBwZXJzb3VyY2U9JG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMKLQkgICAgY3dyYXBwZXI9JG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUKLQkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKLQkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1Ci0KLQkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQotCi0JICAgICMgVGhlIHdyYXBwZXIgZXhlY3V0YWJsZSBpcyBidWlsdCB1c2luZyB0aGUgJGhvc3QgY29tcGlsZXIsCi0JICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQotCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCi0JICAgICMgZXhlY3V0ZWQgb24gdGhlICRob3N0IG9yIHVuZGVyIGFuIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQotCSAgICAgICRTVFJJUCAkY3dyYXBwZXIKLQkgICAgfQotCi0JICAgICMgTm93LCBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0IGZvciBmdW5jX3NvdXJjZSB1c2U6Ci0JICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCi0JICAgICRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCi0JICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IjsgdGhlbgotCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAotCSAgICAgIGVsc2UKLQkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgICBmaQotCSAgICB9Ci0JICA7OwotCSAgKiApCi0JICAgICRSTSAkb3V0cHV0Ci0JICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQotCi0JICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAotCSAgICBjaG1vZCAreCAkb3V0cHV0Ci0JICA7OwotCWVzYWMKLSAgICAgIH0KLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KLSAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbwotCi0gICAgICBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4KLSAgICAgICAgY29udmVuaWVuY2UpCi0JICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgotCSAgYWRkbGlicz0kY29udmVuaWVuY2UKLQkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCSAgOzsKLQltb2R1bGUpCi0JICBvbGRvYmpzPSRsaWJvYmpzX3NhdmUKLQkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQotCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0gICAgICAgICAgOzsKLQkqKQotCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCi0JICAkcHJlbG9hZCAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiIgXAotCSAgICAmJiBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJHN5bWZpbGVvYmoiCi0JICBhZGRsaWJzPSRvbGRfY29udmVuaWVuY2UKLQkgIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgotCWdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAotCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0KLQlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicwotCWZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLSAgICAgIGZpCi0KLSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCi0JY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwotICAgICAgZWxzZQotCi0JIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCi0JaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCi0JICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKLQkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0KLQkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCi0JICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0JZmkKLQotCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQotCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCi0JIyBtaWdodCBoYXZlIHRvIGV4dHJhY3QgdGhlbSBhZnRlcndhcmRzLCBlLmcuLCB3aGVuIGNyZWF0aW5nIGEKLQkjIHN0YXRpYyBhcmNoaXZlIG91dCBvZiBhIGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4gbGlua2luZwotCSMgdGhlIGVudGlyZXR5IG9mIGEgbGlidG9vbCBhcmNoaXZlIGludG8gYW5vdGhlciAoY3VycmVudGx5Ci0JIyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnRvb2wpLgotCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCi0JICAgIGRvCi0JICAgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKLQkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KLQkgIDoKLQllbHNlCi0JICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCi0JICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKLQkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0JICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCi0JICBzYXZlX29sZG9ianM9JG9sZG9ianMKLQkgIG9sZG9ianM9Ci0JICBjb3VudGVyPTEKLQkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcwotCSAgZG8KLQkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKLQkgICAgb2JqYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKLQkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KLQkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKLQkgICAgKltcIC9dIiRvYmpiYXNlICIqKQotCSAgICAgIHdoaWxlIDo7IGRvCi0JCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCi0JCSMgb3ZlcmxhcHMuCi0JCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCi0JCWZ1bmNfYXJpdGggJGNvdW50ZXIgKyAxCi0JCWNvdW50ZXI9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCWNhc2UgIiAkb2xkb2JqcyAiIGluCi0JCSpbXCAvXSIkbmV3b2JqICIqKSA7OwotCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7Ci0JCWVzYWMKLQkgICAgICBkb25lCi0JICAgICAgZnVuY19zaG93X2V2YWwgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgotCSAgICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZ2VudG9wLyRuZXdvYmoiCi0JICAgICAgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRvYmoiIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUKLQlmaQotCWZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotCXRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKLQlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCi0KLQlmdW5jX2xlbiAiICRjbWRzIgotCWxlbj0kZnVuY19sZW5fcmVzdWx0Ci0JaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCi0JICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCi0JZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgotCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgotCSAgZm9yIG9iaiBpbiAkb2xkb2JqcwotCSAgZG8KLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0JICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgotCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAotCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKLQkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKLQkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKLQllbHNlCi0JICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cwotCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgotCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgotCSAgUkFOTElCPToKLQkgIG9iamxpc3Q9Ci0JICBjb25jYXRfY21kcz0KLQkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcwotCSAgb2xkb2Jqcz0KLQkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PwotCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCi0JICBkbwotCSAgICBsYXN0X29sZG9iaj0kb2JqCi0JICBkb25lCi0JICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKLQkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKLQkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAotCSAgbGVuPSRsZW4wCi0JICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKLQkgIGRvCi0JICAgIGZ1bmNfbGVuICIgJG9iaiIKLQkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAotCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgotCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KLQkgICAgICA6Ci0JICAgIGVsc2UKLQkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCi0JICAgICAgb2xkb2Jqcz0kb2JqbGlzdAotCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiI7IHRoZW4KLQkJUkFOTElCPSRzYXZlX1JBTkxJQgotCSAgICAgIGZpCi0JICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+Ci0JICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkb2xkX2FyY2hpdmVfY21kc1wiCi0JICAgICAgb2JqbGlzdD0KLQkgICAgICBsZW49JGxlbjAKLQkgICAgZmkKLQkgIGRvbmUKLQkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKLQkgIG9sZG9ianM9JG9iamxpc3QKLQkgIGlmIHRlc3QgLXogIiRvbGRvYmpzIjsgdGhlbgotCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKLQkgIGVsc2UKLQkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgotCSAgZmkKLQlmaQotICAgICAgZmkKLSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkY21kcyIgJ2V4aXQgJD8nCi0gICAgZG9uZQotCi0gICAgdGVzdCAtbiAiJGdlbmVyYXRlZCIgJiYgXAotICAgICAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciRnZW5lcmF0ZWQiCi0KLSAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KLSAgICBjYXNlICRvdXRwdXQgaW4KLSAgICAqLmxhKQotICAgICAgb2xkX2xpYnJhcnk9Ci0gICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIG9sZF9saWJyYXJ5PSRsaWJuYW1lLiRsaWJleHQKLSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKLQotICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgotICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCi0JaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KLQkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgotCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgotCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgotCWVsc2UKLQkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCi0JICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCi0gICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgXCIkcHJvZ3BhdGhcIiAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgotICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgotCXJlbGlua19jb21tYW5kPQotICAgICAgZmkKLQotICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCi0gICAgICAkb3B0X2RyeV9ydW4gfHwgewotCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbwotCSAgaWYgdGVzdCB5ZXMgPSAiJGluc3RhbGxlZCI7IHRoZW4KLQkgICAgaWYgdGVzdCAteiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgotCSAgICAgIGJyZWFrCi0JICAgIGZpCi0JICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9aQotCSAgICAjIFJlcGxhY2UgYWxsIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzIHdpdGggdGhlIGluc3RhbGxlZCBvbmVzCi0JICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KLQkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAgICoubGEpCi0JCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCi0JCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgotCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKLQkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0JCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgotCQk7OwotCSAgICAgIC1MKikKLQkJZnVuY19zdHJpcG5hbWUgLUwgJycgIiRkZXBsaWIiCi0JCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtTCRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCi0JCTs7Ci0JICAgICAgLVIqKQotCQlmdW5jX3N0cmlwbmFtZSAtUiAnJyAiJGRlcGxpYiIKLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0JCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1SJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKLQkJOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgICBkZXBlbmRlbmN5X2xpYnM9JG5ld2RlcGVuZGVuY3lfbGlicwotCSAgICBuZXdkbGZpbGVzPQotCi0JICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCi0JICAgICAgY2FzZSAkbGliIGluCi0JICAgICAgKi5sYSkKLQkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0JCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAotCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgotCQk7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCi0JICAgIG5ld2RscHJlZmlsZXM9Ci0JICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCi0JICAgICAgY2FzZSAkbGliIGluCi0JICAgICAgKi5sYSkKLQkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCi0JCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCi0JCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bwotCQkjIHRoZSBsaWJyYXJ5OgotCQlmdW5jX2Jhc2VuYW1lICIkbGliIgotCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKLQkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCi0JCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwotCSAgZWxzZQotCSAgICBuZXdkbGZpbGVzPQotCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwotCSAgICAgIGNhc2UgJGxpYiBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0kbGliIDs7Ci0JCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCi0JICAgIGRvbmUKLQkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwotCSAgICBuZXdkbHByZWZpbGVzPQotCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbwotCSAgICAgIGNhc2UgJGxpYiBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0kbGliIDs7Ci0JCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCi0JICAgIGRvbmUKLQkgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwotCSAgZmkKLQkgICRSTSAkb3V0cHV0Ci0JICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KLQkgICMgSW4gZmFjdCwgaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgdGhpcyBjb2RlIGZvciBhbGwgdGFyZ2V0Ci0JICAjIHN5c3RlbXMgdGhhdCBjYW4ndCBoYXJkLWNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHRoZWlyIGV4ZWN1dGFibGVzCi0JICAjIGFuZCB0aGF0IGhhdmUgbm8gc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZSBpbmRlcGVuZGVudCBvZiBQQVRILAotCSAgIyBidXQgaXQgdHVybnMgb3V0IHdlIGNhbid0IGVhc2lseSBkZXRlcm1pbmUgdGhhdCBmcm9tIGluc3BlY3RpbmcKLQkgICMgbGlidG9vbCB2YXJpYWJsZXMsIHNvIHdlIGhhdmUgdG8gaGFyZC1jb2RlIHRoZSBPU3MgdG8gd2hpY2ggaXQKLQkgICMgYXBwbGllcyBoZXJlOyBhdCB0aGUgbW9tZW50LCB0aGF0IG1lYW5zIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgUEUKLQkgICMgb2JqZWN0IGZvcm1hdCB3aXRoIERMTCBmaWxlcy4gIFNlZSB0aGUgbG9uZyBjb21tZW50IGF0IHRoZSB0b3Agb2YKLQkgICMgdGVzdHMvYmluZGlyLmF0IGZvciBmdWxsIGRldGFpbHMuCi0JICB0ZGxuYW1lPSRkbG5hbWUKLQkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgotCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKQotCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KLQkgICAgICBpZiB0ZXN0IC1uICIkYmluZGlyIjsgdGhlbgotCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCi0JCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvJGRsbmFtZQotCSAgICAgIGVsc2UKLQkJIyBPdGhlcndpc2UgZmFsbCBiYWNrIG9uIGhldXJpc3RpYy4KLQkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQotCSAgICAgIGZpCi0JICAgICAgOzsKLQkgIGVzYWMKLQkgICRFQ0hPID4gJG91dHB1dCAiXAotIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCi0jCi0jIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKLSMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgotCi0jIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KLWRsbmFtZT0nJHRkbG5hbWUnCi0KLSMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgotbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCi0KLSMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgotb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKLQotIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW5ub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgotaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJwotCi0jIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KLWRlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKLQotIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQotd2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJwotCi0jIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgotY3VycmVudD0kY3VycmVudAotYWdlPSRhZ2UKLXJldmlzaW9uPSRyZXZpc2lvbgotCi0jIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KLWluc3RhbGxlZD0kaW5zdGFsbGVkCi0KLSMgU2hvdWxkIHdlIHdhcm4gYWJvdXQgcG9ydGFiaWxpdHkgd2hlbiBsaW5raW5nIGFnYWluc3QgLW1vZHVsZXM/Ci1zaG91bGRub3RsaW5rPSRtb2R1bGUKLQotIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCi1kbG9wZW49JyRkbGZpbGVzJwotZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKLQotIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgotbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgotCSAgaWYgdGVzdCBubyx5ZXMgPSAiJGluc3RhbGxlZCwkbmVlZF9yZWxpbmsiOyB0aGVuCi0JICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKLXJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCi0JICBmaQotCWRvbmUKLSAgICAgIH0KLQotICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgotICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KLSAgICAgIGZ1bmNfc2hvd19ldmFsICcoIGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkb3V0cHV0bmFtZSIgJiYgJExOX1MgIi4uLyRvdXRwdXRuYW1lIiAiJG91dHB1dG5hbWUiICknICdleGl0ICQ/JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgZXhpdCAkRVhJVF9TVUNDRVNTCi19Ci0KLWlmIHRlc3QgbGluayA9ICIkb3B0X21vZGUiIHx8IHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KLSAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9Ci1maQotCi0KLSMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KLWZ1bmNfbW9kZV91bmluc3RhbGwgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBSTT0kbm9ub3B0Ci0gICAgZmlsZXM9Ci0gICAgcm1mb3JjZT1mYWxzZQotICAgIGV4aXRfc3RhdHVzPTAKLQotICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgotICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFnaWMKLQotICAgIGZvciBhcmcKLSAgICBkbwotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT06IDs7Ci0gICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OwotICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OwotICAgICAgZXNhYwotICAgIGRvbmUKLQotICAgIHRlc3QgLXogIiRSTSIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCi0KLSAgICBybWRpcnM9Ci0KLSAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0gICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLSAgICAgIGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICAgaWYgdGVzdCAuID0gIiRkaXIiOyB0aGVuCi0Jb2Rpcj0kb2JqZGlyCi0gICAgICBlbHNlCi0Jb2Rpcj0kZGlyLyRvYmpkaXIKLSAgICAgIGZpCi0gICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLSAgICAgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0gICAgICB0ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21vZGUiICYmIG9kaXI9JGRpcgotCi0gICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcwotICAgICAgaWYgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCi0JY2FzZSAiICRybWRpcnMgIiBpbgotCSAgKiIgJG9kaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKLQllc2FjCi0gICAgICBmaQotCi0gICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgotICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8Ci0JIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAotCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KLQk6Ci0gICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgotCWV4aXRfc3RhdHVzPTEKLQljb250aW51ZQotICAgICAgZWxpZiAkcm1mb3JjZTsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBmaQotCi0gICAgICBybWZpbGVzPSRmaWxlCi0KLSAgICAgIGNhc2UgJG5hbWUgaW4KLSAgICAgICoubGEpCi0JIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgotCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCi0JICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCi0KLQkgICMgRGVsZXRlIHRoZSBsaWJ0b29sIGxpYnJhcmllcyBhbmQgc3ltbGlua3MuCi0JICBmb3IgbiBpbiAkbGlicmFyeV9uYW1lczsgZG8KLQkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuIgotCSAgZG9uZQotCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgotCi0JICBjYXNlICRvcHRfbW9kZSBpbgotCSAgY2xlYW4pCi0JICAgIGNhc2UgIiAkbGlicmFyeV9uYW1lcyAiIGluCi0JICAgICoiICRkbG5hbWUgIiopIDs7Ci0JICAgICopIHRlc3QgLW4gIiRkbG5hbWUiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIiA7OwotCSAgICBlc2FjCi0JICAgIHRlc3QgLW4gIiRsaWJkaXIiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9aSIKLQkgICAgOzsKLQkgIHVuaW5zdGFsbCkKLQkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCi0JICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICckcm1mb3JjZSB8fCBleGl0X3N0YXR1cz0xJwotCSAgICBmaQotCi0JICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScKLQkgICAgZmkKLQkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotCi0gICAgICAqLmxvKQotCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgotCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCi0KLQkgICMgUmVhZCB0aGUgLmxvIGZpbGUKLQkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKLQotCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYgdGVzdCBub25lICE9ICIkcGljX29iamVjdCI7IHRoZW4KLQkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJHBpY19vYmplY3QiCi0JICBmaQotCi0JICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCi0JICBmaQotCWZpCi0JOzsKLQotICAgICAgKikKLQlpZiB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KLQkgIG5vZXhlbmFtZT0kbmFtZQotCSAgY2FzZSAkZmlsZSBpbgotCSAgKi5leGUpCi0JICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCi0JICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgotCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCi0JICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCi0JICAgIDs7Ci0JICBlc2FjCi0JICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KLQkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgotCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgotCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgotCSAgICAgIHJlbGlua19jb21tYW5kPQotCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAotCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCi0JICAgIGVsc2UKLQkgICAgICByZWxpbmtfY29tbWFuZD0KLQkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKLQkgICAgZmkKLQotCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQotCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcwotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJG9iamV4dCIKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCIgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbmFtZSIKLQkgICAgZmkKLQkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiOyB0aGVuCi0JICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRub2V4ZW5hbWUuYyIKLQkgICAgZmkKLQkgIGZpCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCi0gICAgZG9uZQotCi0gICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAkb2JqZGlyJ3MgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKLSAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCi0gICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgotCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKLSAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgZXhpdCAkZXhpdF9zdGF0dXMKLX0KLQotaWYgdGVzdCB1bmluc3RhbGwgPSAiJG9wdF9tb2RlIiB8fCB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KLSAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KLWZpCi0KLXRlc3QgLXogIiRvcHRfbW9kZSIgJiYgewotICBoZWxwPSRnZW5lcmljX2hlbHAKLSAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKLX0KLQotdGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCi0gIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSAnJG9wdF9tb2RlJyIKLQotaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgotICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKLSAgZXhpdCAkRVhJVF9GQUlMVVJFCi1maQotCi1leGl0ICRleGl0X3N0YXR1cwotCi0KLSMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCi0jIHdoZXJlIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZwotIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKLSMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCi0jIHRoZSB1c2VyIGFza2VkIGZvciB0aGF0IG9yIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydAotIyB0aGVtLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIEFJWCwgYmVjYXVzZSB3ZSBkb24ndAotIyBzdXBwb3J0IGhhdmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGF0IHRoZSBzYW1lCi0jIHRpbWUgb24gdGhhdCBwbGF0Zm9ybSwgc28gd2UgZGVmYXVsdCB0byBhIHNoYXJlZC1vbmx5IGNvbmZpZ3VyYXRpb24uCi0jIElmIGEgZGlzYWJsZS1zaGFyZWQgdGFnIGlzIGdpdmVuLCB3ZSdsbCBmYWxsYmFjayB0byBhIHN0YXRpYy1vbmx5Ci0jIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAotYnVpbGRfbGlidG9vbF9saWJzPW5vCi1idWlsZF9vbGRfbGlicz15ZXMKLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCi0KLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKLWJ1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6c2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOjIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvbTQvTWFrZWZpbGUuYW0gYi9tNC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3MzhjYS4uMDAwMDAwMAotLS0gYS9tNC9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUVYVFJBX0RJU1QgPSBcCi0JYTUyLm00IFwKLQlhYWxpYi5tNCBcCi0JYXMtZmZtcGVnLm00IFwKLQlhcy1saWJsYW1lLm00IFwKLQlhcy1zbHVycC1mZm1wZWcubTQgXAotCWNoZWNrLWxpYmhlYWRlci5tNCBcCi0JY29kZXNldC5tNCBcCi0JZnJlZXR5cGUyLm00IFwKLQlnZXR0ZXh0Lm00IFwKLQlnbGliYzIxLm00IFwKLQlnbGliLm00IFwKLQlnc3QtYWxzYS5tNCBcCi0JZ3N0LWFydHNjLm00IFwKLQlnc3QtZmlvbnJlYWQubTQgXAotCWdzdC1pdm9yYmlzLm00IFwKLQlnc3QtbWF0cm9za2EubTQgXAotCWdzdC1zZGwubTQgXAotCWdzdC1zaG91dDIubTQgXAotCWdzdC1zaWQubTQgXAotCWd0ay5tNCBcCi0JaWNvbnYubTQgXAotCWludGRpdjAubTQgXAotCWludHR5cGVzX2gubTQgXAotCWludHR5cGVzLXByaS5tNCBcCi0JbGNtZXNzYWdlLm00IFwKLQlsaWJmYW1lLm00IFwKLQlsaWItbGQubTQgXAotCWxpYi1saW5rLm00IFwKLQlsaWItcHJlZml4Lm00IFwKLQlvZ2cubTQgXAotCXByb2d0ZXN0Lm00IFwKLQlzdGRpbnRfaC5tNCBcCi0JdWludG1heF90Lm00IFwKLQl2b3JiaXMubTQKZGlmZiAtLWdpdCBhL200L01ha2VmaWxlLmluIGIvbTQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNDdjMTkuLjAwMDAwMDAKLS0tIGEvbTQvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw3MTcgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBtNAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBSRUFETUUKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLUVYVFJBX0RJU1QgPSBcCi0JYTUyLm00IFwKLQlhYWxpYi5tNCBcCi0JYXMtZmZtcGVnLm00IFwKLQlhcy1saWJsYW1lLm00IFwKLQlhcy1zbHVycC1mZm1wZWcubTQgXAotCWNoZWNrLWxpYmhlYWRlci5tNCBcCi0JY29kZXNldC5tNCBcCi0JZnJlZXR5cGUyLm00IFwKLQlnZXR0ZXh0Lm00IFwKLQlnbGliYzIxLm00IFwKLQlnbGliLm00IFwKLQlnc3QtYWxzYS5tNCBcCi0JZ3N0LWFydHNjLm00IFwKLQlnc3QtZmlvbnJlYWQubTQgXAotCWdzdC1pdm9yYmlzLm00IFwKLQlnc3QtbWF0cm9za2EubTQgXAotCWdzdC1zZGwubTQgXAotCWdzdC1zaG91dDIubTQgXAotCWdzdC1zaWQubTQgXAotCWd0ay5tNCBcCi0JaWNvbnYubTQgXAotCWludGRpdjAubTQgXAotCWludHR5cGVzX2gubTQgXAotCWludHR5cGVzLXByaS5tNCBcCi0JbGNtZXNzYWdlLm00IFwKLQlsaWJmYW1lLm00IFwKLQlsaWItbGQubTQgXAotCWxpYi1saW5rLm00IFwKLQlsaWItcHJlZml4Lm00IFwKLQlvZ2cubTQgXAotCXByb2d0ZXN0Lm00IFwKLQlzdGRpbnRfaC5tNCBcCi0JdWludG1heF90Lm00IFwKLQl2b3JiaXMubTQKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgbTQvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgbTQvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi10YWdzIFRBR1M6Ci0KLWN0YWdzIENUQUdTOgotCi1jc2NvcGUgY3Njb3BlbGlzdDoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCi0JY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL200L1JFQURNRSBiL200L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA0NDU5OC4uMDAwMDAwMAotLS0gYS9tNC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLUFsbCBhY2xvY2FsIC5tNCBmaWxlcyB3ZSBuZWVkIGFyZSBwdXQgaGVyZSBhbmQgY2F0J2QgdG8gYWNpbmNsdWRlLm00IGluIAotdGhlIHNvdXJjZSByb290LiAgT2ZmaWNpYWwgb25lcyAodGFrZW4gZnJvbSB0aGUgcmVsZXZhbnQgZGV2ZWwgcGFja2FnZXMpIAotYXJlIG5hbWVkIGFzLWlzLCB1bm9mZmljaWFsIG9uZXMgKG9yIGNoYW5nZWQgb25lcykgZ2V0IGEgZ3N0LXByZWZpeC4KZGlmZiAtLWdpdCBhL200L2E1Mi5tNCBiL200L2E1Mi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA2NWRlZS4uMDAwMDAwMAotLS0gYS9tNC9hNTIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotZG5sCi1kbmwgQTUyX0NIRUNLLUxJQkhFQURFUihGRUFUVVJFLU5BTUUsIExJQi1OQU1FLCBMSUItRlVOQ1RJT04sIEhFQURFUi1OQU1FLAotZG5sICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZPVU5ELCBBQ1RJT04tSUYtTk9ULUZPVU5ELAotZG5sICAgICAgICAgICAgICAgICAgICAgRVhUUkEtTERGTEFHUywgRVhUUkEtQ1BQRkxBR1MpCi1kbmwKLWRubCBGRUFUVVJFLU5BTUUgICAgICAgIC0gZmVhdHVyZSBuYW1lOyBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgYXJlIHRyZWF0ZWQKLWRubCAgICAgICAgICAgICAgICAgICAgICAgYXMgZmVhdHVyZSwgd2hpY2ggd2UgbG9vayBmb3IKLWRubCBMSUItTkFNRSAgICAgICAgICAgIC0gbGlicmFyeSBuYW1lIGFzIGluIEFDX0NIRUNLX0xJQiBtYWNybwotZG5sIExJQi1GVU5DVElPTiAgICAgICAgLSBsaWJyYXJ5IHN5bWJvbCBhcyBpbiBBQ19DSEVDS19MSUIgbWFjcm8KLWRubCBIRUFERVItTkFNRSAgICAgICAgIC0gaGVhZGVyIGZpbGUgbmFtZSBhcyBpbiBBQ19DSEVDS19IRUFERVIKLWRubCBBQ1RJT04tSUYtRk9VTkQgICAgIC0gd2hlbiBmZWF0dXJlIGlzIGZvdW5kIHRoZW4gZXhlY3V0ZSBnaXZlbiBhY3Rpb24KLWRubCBBQ1RJT04tSUYtTk9ULUZPVU5EIC0gd2hlbiBmZWF0dXJlIGlzIG5vdCBmb3VuZCB0aGVuIGV4ZWN1dGUgZ2l2ZW4gYWN0aW9uCi1kbmwgRVhUUkEtTERGTEFHUyAgICAgICAtIGV4dHJhIGxpbmtlciBmbGFncyAoLUwgb3IgLWwpCi1kbmwgRVhUUkEtQ1BQRkxBR1MgICAgICAtIGV4dHJhIEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBpLmUuIC1JL3Vzci9YMTFSNi9pbmNsdWRlCi1kbmwKLWRubCBCYXNlZCBvbiBHU1RfQ0hFQ0tfTElCSEVBREVSIGZyb20gZ3N0cmVhbWVyIHBsdWdpbnMgMC4zLjEuCi1kbmwKLUFDX0RFRlVOKFtBNTJfQ0hFQ0tfTElCSEVBREVSXSwKLVsKLSAgQUNfQ0hFQ0tfTElCKFskMl0sIFskM10sIEhBVkVfWyQxXT15ZXMsIEhBVkVfWyQxXT1ubywgWyQ3XSkKLSAgY2hlY2tfbGliaGVhZGVyX2ZlYXR1cmVfbmFtZT10cmFuc2xpdChbJDFdLCBBLVosIGEteikKLQotICBpZiB0ZXN0ICJ4JEhBVkVfWyQxXSIgPSAieHllcyI7IHRoZW4KLSAgICBjaGVja19saWJoZWFkZXJfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKLSAgICBDUFBGTEFHUz0iWyQ4XSAkQ1BQRkxBR1MiCi0gICAgQUNfQ0hFQ0tfSEVBREVSKFskNF0sIDosIEhBVkVfWyQxXT1ubykKLSAgICBDUFBGTEFHUz0kY2hlY2tfbGliaGVhZGVyX3NhdmVfQ1BQRkxBR1MKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JEhBVkVfWyQxXSIgPSAieHllcyI7IHRoZW4KLSAgICBpZmVsc2UoWyQ1XSwgLCA6LCBbJDVdKQotICBlbHNlCi0gICAgaWZlbHNlKFskNl0sICwgOiwgWyQ2XSkKLSAgZmkKLV0KLSkKLQotZG5sCi1kbmwgQUNfQ0hFQ0tfQTUyREVDKEFDVElPTi1JRi1GT1VORCwgQUNUSU9OLUlGLU5PVC1GT1VORCkKLWRubAotZG5sIEFDVElPTi1JRi1GT1VORCAgICAgLSB3aGVuIGZlYXR1cmUgaXMgZm91bmQgdGhlbiBleGVjdXRlIGdpdmVuIGFjdGlvbgotZG5sIEFDVElPTi1JRi1OT1QtRk9VTkQgLSB3aGVuIGZlYXR1cmUgaXMgbm90IGZvdW5kIHRoZW4gZXhlY3V0ZSBnaXZlbiBhY3Rpb24KLWRubAotZG5sIERlZmluZXMgSEFWRV9BNTJERUMgdG8geWVzIGlmIGxpYmE1MiBpcyBmb3VuZAotZG5sCi1kbmwgQ0ZMQUdTIGFuZCBMREZMQUdTIGZvciB0aGUgbGlicmFyeSBhcmUgc3RvcmVkIGluIEE1MkRFQ19DRkxBR1MgYW5kCi1kbmwgQTUyREVDX0xJQlMsIHJlc3BlY3RpdmVseQotZG5sCi1kbmwgQmFzZWQgb24gR1NUX0NIRUNLX0E1MkRFQyBmcm9tIGdzdHJlYW1lciBwbHVnaW5zIDAuMy4zLjEKLWRubCBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXNAYXBlc3RhYXJ0Lm9yZz4sIEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLWRubAotQUNfREVGVU4oW0FDX0NIRUNLX0E1MkRFQ10sIAotW2RubAotQUNfQVJHX1dJVEgoYTUyZGVjLXByZWZpeCwKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWE1MmRlYy1wcmVmaXg9UEZYXSwKLSAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIGE1MmRlYyBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAotICAgIGE1MmRlY19jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIGE1MmRlY19jb25maWdfcHJlZml4PSIiKQotCi1pZiB0ZXN0IHgkYTUyZGVjX2NvbmZpZ19wcmVmaXggPSB4IDsgdGhlbgotICAgIEE1Ml9DSEVDS19MSUJIRUFERVIoQTUyREVDLCBhNTIsIGE1Ml9pbml0LCBhNTJkZWMvYTUyLmgsCi0gICAgICAgIEE1MkRFQ19MSUJTPSItbGE1MiAtbG0iLCAsIC1sbSkKLWVsc2UKLSAgICBBNTJfQ0hFQ0tfTElCSEVBREVSKEE1MkRFQywgYTUyLCBhNTJfaW5pdCwgYTUyZGVjL2E1Mi5oLCBbCi0gICAgICAgICAgICBBNTJERUNfTElCUz0iLWxhNTIgLUwkYTUyZGVjX2NvbmZpZ19wcmVmaXgvbGliIC1sbSIKLSAgICAgICAgICAgIEE1MkRFQ19DRkxBR1M9Ii1JJGE1MmRlY19jb25maWdfcHJlZml4L2luY2x1ZGUiCi0gICAgICAgIF0sICwgLUwkYTUyZGVjX2NvbmZpZ19wcmVmaXgvbGliLCAtSSRhNTJkZWNfY29uZmlnX3ByZWZpeC9pbmNsdWRlKQotZmkKLQotaWYgdGVzdCAkSEFWRV9BNTJERUMgPSAieWVzIjsgdGhlbgotICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTICRBNTJERUNfQ0ZMQUdTIgotICAgIExJQlM9IiRBNTJERUNfTElCUyAkTElCUyIKLSAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPGE1MmRlYy9hNTIuaD4KLQotaW50IAotbWFpbiAoKQotewotICBhNTJfc3RhdGVfdCAqc3RhdGU7Ci0gIHN0YXRlID0gYTUyX2luaXQgKDApOwotICBhNTJfZnJlZSAoc3RhdGUpOwotICByZXR1cm4gMDsKLX0KLSAgICAgICAgXSwsIEhBVkVfQTUyREVDPW5vLCBbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCi0KLSAgICBpZiB0ZXN0IEhBVkVfQTUyREVDID0gIm5vIjsgdGhlbgotICAgICAgICBlY2hvICIqKiogWW91ciBhNTJkZWMgaXMgYm9ya2VkIHNvbWVob3cuIFBsZWFzZSB1cGRhdGUgdG8gMC43LjQuIgotICAgIGVsc2UKLSAgICAgICAgQUNfVFJZX1JVTihbCi0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxhNTJkZWMvYTUyLmg+Ci0KLWludCAKLW1haW4gKCkKLXsKLSAgaW50IGkgPSBzaXplb2YgKGE1Ml9zdGF0ZV90KTsKLSAgaWYgKCBpICkKLSAgICByZXR1cm4gMDsKLX0KLSAgICAgICAgICAgIF0sIEhBVkVfQTUyREVDPW5vLCwgW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQotCi0gICAgICAgIGlmIHRlc3QgSEFWRV9BNTJERUMgPSAibm8iOyB0aGVuCi0gICAgICAgICAgICBlY2hvICIqKiogWW91ciBhNTJkZWMgaXMgdG9vIG9sZC4gUGxlYXNlIHVwZGF0ZSB0byAwLjcuNC4iCi0gICAgICAgIGZpCi0gICAgZmkKLSAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotZmkKLQotaWYgdGVzdCBIQVZFX0E1MkRFQyA9ICJubyI7IHRoZW4KLSAgICBBNTJERUNfQ0ZMQUdTPSIiCi0gICAgQTUyREVDX0xJQlM9IiIKLWZpCi0KLWlmIHRlc3QgIngkSEFWRV9BNTJERUMiID0gInh5ZXMiOyB0aGVuCi0gIGlmZWxzZShbJDFdLCAsIDosIFskMV0pCi1lbHNlCi0gIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi1maQotCi1BQ19TVUJTVChBNTJERUNfQ0ZMQUdTKQotQUNfU1VCU1QoQTUyREVDX0xJQlMpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvYWFsaWIubTQgYi9tNC9hYWxpYi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBlMGE2NC4uMDAwMDAwMAotLS0gYS9tNC9hYWxpYi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0jIENvbmZpZ3VyZSBwYXRocyBmb3IgQUFMSUIKLSMgdG91Y2hlZCB1cCBmb3IgY2xlYW4gb3V0cHV0IGJ5IFRob21hcyBWYW5kZXIgU3RpY2hlbGUKLSMgSmFuIEh1Ymlja2EgNC8yMi8yMDAxCi0jIHN0b2xlbiBmcm9tIFNhbSBMYW50aW5nYSA5LzIxLzk5Ci0jIHN0b2xlbiBmcm9tIE1hbmlzaCBTaW5naAotIyBzdG9sZW4gYmFjayBmcm9tIEZyYW5rIEJlbGV3Ci0jIHN0b2xlbiBmcm9tIE1hbmlzaCBTaW5naAotIyBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBPd2VuIFRheWxvcgotCi1kbmwgQU1fUEFUSF9BQUxJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCi1kbmwgVGVzdCBmb3IgQUFMSUIsIGFuZCBkZWZpbmUgQUFMSUJfQ0ZMQUdTIGFuZCBBQUxJQl9MSUJTCi1kbmwKLUFDX0RFRlVOKFtBTV9QQVRIX0FBTElCXSwKLVtkbmwgCi1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBhYWxpYi1jb25maWcgc2NyaXB0Ci1kbmwKLUFDX0FSR19XSVRIKGFhbGliLXByZWZpeCwKLSAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hYWxpYi1wcmVmaXg9UEZYXSwKLSAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBBQUxJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAotICBhYWxpYl9wcmVmaXg9IiR3aXRodmFsIiwgYWFsaWJfcHJlZml4PSIiKQotCi1BQ19BUkdfV0lUSChhYWxpYi1leGVjLXByZWZpeCwKLSAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1hYWxpYi1leGVjLXByZWZpeD1QRlhdLAotICAgICAgICAgICAgICAgICBbZXhlYyBwcmVmaXggd2hlcmUgQUFMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKLSAgYWFsaWJfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgYWFsaWJfZXhlY19wcmVmaXg9IiIpCi0KLUFDX0FSR19FTkFCTEUoYWFsaWJ0ZXN0LCAKLSAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hYWxpYnRlc3RdLAotICAgICAgICAgICAgICAgICBbZG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEFBTElCIHByb2dyYW1dKSwKLSAgLCBlbmFibGVfYWFsaWJ0ZXN0PXllcykKLQotICBpZiB0ZXN0IHgkYWFsaWJfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KLSAgICAgYWFsaWJfYXJncz0iJGFhbGliX2FyZ3MgLS1leGVjLXByZWZpeD0kYWFsaWJfZXhlY19wcmVmaXgiCi0gICAgIGlmIHRlc3QgeCR7QUFMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLSAgICAgICAgQUFMSUJfQ09ORklHPSRhYWxpYl9leGVjX3ByZWZpeC9iaW4vYWFsaWItY29uZmlnCi0gICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgeCRhYWxpYl9wcmVmaXggIT0geCA7IHRoZW4KLSAgICAgYWFsaWJfYXJncz0iJGFhbGliX2FyZ3MgLS1wcmVmaXg9JGFhbGliX3ByZWZpeCIKLSAgICAgaWYgdGVzdCB4JHtBQUxJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotICAgICAgICBBQUxJQl9DT05GSUc9JGFhbGliX3ByZWZpeC9iaW4vYWFsaWItY29uZmlnCi0gICAgIGZpCi0gIGZpCi0KLSAgQUNfUEFUSF9QUk9HKEFBTElCX0NPTkZJRywgYWFsaWItY29uZmlnLCBubykKLSAgbWluX2FhbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjExLjAsJDEpCi0gIEFDX01TR19DSEVDS0lORyhmb3IgQUFMSUIgLSB2ZXJzaW9uID49ICRtaW5fYWFsaWJfdmVyc2lvbikKLSAgbm9fYWFsaWI9IiIKLSAgaWYgdGVzdCAiJEFBTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgotICAgIG5vX2FhbGliPXllcwotICBlbHNlCi0gICAgQUFMSUJfQ0ZMQUdTPWAkQUFMSUJfQ09ORklHICRhYWxpYmNvbmZfYXJncyAtLWNmbGFnc2AKLSAgICBBQUxJQl9MSUJTPWAkQUFMSUJfQ09ORklHICRhYWxpYmNvbmZfYXJncyAtLWxpYnNgCi0KLSAgICBhYWxpYl9tYWpvcl92ZXJzaW9uPWAkQUFMSUJfQ09ORklHICRhYWxpYl9hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCi0gICAgYWFsaWJfbWlub3JfdmVyc2lvbj1gJEFBTElCX0NPTkZJRyAkYWFsaWJfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAotICAgIGFhbGliX21pY3JvX3ZlcnNpb249YCRBQUxJQl9DT05GSUcgJGFhbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCi0gICAgaWYgdGVzdCAieCRlbmFibGVfYWFsaWJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgIENGTEFHUz0iJENGTEFHUyAkQUFMSUJfQ0ZMQUdTIgotICAgICAgTElCUz0iJExJQlMgJEFBTElCX0xJQlMiCi1kbmwKLWRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBBQUxJQiBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKLWRubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgYWFsaWItY29uZmlnIHRvIHNvbWUgZXh0ZW50Ci1kbmwKLSAgICAgIHJtIC1mIGNvbmYuYWFsaWJ0ZXN0Ci0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImFhbGliLmgiCi0KLWNoYXIqCi1teV9zdHJkdXAgKGNoYXIgKnN0cikKLXsKLSAgY2hhciAqbmV3X3N0cjsKLSAgCi0gIGlmIChzdHIpCi0gICAgewotICAgICAgbmV3X3N0ciA9IChjaGFyICopbWFsbG9jICgoc3RybGVuIChzdHIpICsgMSkgKiBzaXplb2YoY2hhcikpOwotICAgICAgc3RyY3B5IChuZXdfc3RyLCBzdHIpOwotICAgIH0KLSAgZWxzZQotICAgIG5ld19zdHIgPSBOVUxMOwotICAKLSAgcmV0dXJuIG5ld19zdHI7Ci19Ci0KLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKLSAgY2hhciAqdG1wX3ZlcnNpb247Ci0KLSAgLyogVGhpcyBoYW5ncyBvbiBzb21lIHN5c3RlbXMgKD8pCi0gIHN5c3RlbSAoInRvdWNoIGNvbmYuYWFsaWJ0ZXN0Iik7Ci0gICovCi0gIHsgRklMRSAqZnAgPSBmb3BlbigiY29uZi5hYWxpYnRlc3QiLCAiYSIpOyBpZiAoIGZwICkgZmNsb3NlKGZwKTsgfQotCi0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLwotICB0bXBfdmVyc2lvbiA9IG15X3N0cmR1cCgiJG1pbl9hYWxpYl92ZXJzaW9uIik7Ci0gIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9hYWxpYl92ZXJzaW9uIik7Ci0gICAgIGV4aXQoMSk7Ci0gICB9Ci0KLSAgIGlmICgoJGFhbGliX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKLSAgICAgICgoJGFhbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkYWFsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKLSAgICAgICgoJGFhbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkYWFsaWJfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKCRhYWxpYl9taWNyb192ZXJzaW9uID49IG1pY3JvKSkpCi0gICAgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgcHJpbnRmKCJcbioqKiAnYWFsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCB0aGUgbWluaW11bSB2ZXJzaW9uXG4iLCAkYWFsaWJfbWFqb3JfdmVyc2lvbiwgJGFhbGliX21pbm9yX3ZlcnNpb24sICRhYWxpYl9taWNyb192ZXJzaW9uKTsKLSAgICAgIHByaW50ZigiKioqIG9mIEFBTElCIHJlcXVpcmVkIGlzICVkLiVkLiVkLiBJZiBhYWxpYi1jb25maWcgaXMgY29ycmVjdCwgdGhlbiBpdCBpc1xuIiwgbWFqb3IsIG1pbm9yLCBtaWNybyk7Ci0gICAgICBwcmludGYoIioqKiBiZXN0IHRvIHVwZ3JhZGUgdG8gdGhlIHJlcXVpcmVkIHZlcnNpb24uXG4iKTsKLSAgICAgIHByaW50ZigiKioqIElmIGFhbGliLWNvbmZpZyB3YXMgd3JvbmcsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUFMSUJfQ09ORklHXG4iKTsKLSAgICAgIHByaW50ZigiKioqIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGNvcHkgb2YgYWFsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlXG4iKTsKLSAgICAgIHByaW50ZigiKioqIGNvbmZpZy5jYWNoZSBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1dLCwgbm9fYWFsaWI9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKLSAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICAgICBmaQotICBmaQotICBpZiB0ZXN0ICJ4JG5vX2FhbGliIiA9IHggOyB0aGVuCi0gICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCi0gIGVsc2UKLSAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgaWYgdGVzdCAiJEFBTElCX0NPTkZJRyIgPSAibm8iIDsgdGhlbgotICAgICAgIGVjaG8gIioqKiBUaGUgYWFsaWItY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgQUFMSUIgY291bGQgbm90IGJlIGZvdW5kIgotICAgICAgIGVjaG8gIioqKiBJZiBBQUxJQiB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCi0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBBQUxJQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgotICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gYWFsaWItY29uZmlnLiIKLSAgICAgZWxzZQotICAgICAgIGlmIHRlc3QgLWYgY29uZi5hYWxpYnRlc3QgOyB0aGVuCi0gICAgICAgIDoKLSAgICAgICBlbHNlCi0gICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gQUFMSUIgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCi0gICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRBQUxJQl9DRkxBR1MiCi0gICAgICAgICAgTElCUz0iJExJQlMgJEFBTElCX0xJQlMiCi0gICAgICAgICAgQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiQUFMSUIuaCIKLV0sICAgICAgWyByZXR1cm4gMDsgXSwKLSAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCi0gICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBBQUxJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKLSAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBBQUxJQi4gSWYgaXQgaXMgbm90IGZpbmRpbmcgQUFMSUIsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgotICAgICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgotICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCi0gICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgotCSAgZWNobyAiKioqIgotICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKLSAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgotICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBBQUxJQiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgotICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIEFBTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgotICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBhYWxpYi1jb25maWcgc2NyaXB0OiAkQUFMSUJfQ09ORklHIiBdKQotICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgICAgZmkKLSAgICAgZmkKLSAgICAgQUFMSUJfQ0ZMQUdTPSIiCi0gICAgIEFBTElCX0xJQlM9IiIKLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKLSAgZmkKLSAgQUNfU1VCU1QoQUFMSUJfQ0ZMQUdTKQotICBBQ19TVUJTVChBQUxJQl9MSUJTKQotICBybSAtZiBjb25mLmFhbGlidGVzdAotXSkKZGlmZiAtLWdpdCBhL200L2FzLWZmbXBlZy5tNCBiL200L2FzLWZmbXBlZy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwYzM4ZC4uMDAwMDAwMAotLS0gYS9tNC9hcy1mZm1wZWcubTQKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIENGTEFHUyBhbmQgbGlicmFyeSBwYXRocyBmb3IgRkZNUEVHCi0jIHRha2VuIGZyb20gQXV0b3N0YXIgU2FuZGJveCwgaHR0cDovL2F1dG9zdGFycy5zb3VyY2Vmb3JnZS5uZXQvCi0KLWRubCBVc2FnZToKLWRubCBBTV9QQVRIX0ZGTVBFRyhbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCi1kbmwgRklYTUU6IHZlcnNpb24gY2hlY2tpbmcgZG9lcyBub3Qgd29yayBjdXJyZW50bHkKLWRubAotZG5sIEV4YW1wbGU6Ci1kbmwgQU1fUEFUSF9GRk1QRUcoMC40LjYsICwgQUNfTVNHX0VSUk9SKFsqKiogRkZNUEVHID49IDAuNC42IG5vdCBpbnN0YWxsZWQpKSAKLWRubAotZG5sIERlZmluZXMgRkZNUEVHX0xJQlMKLWRubCBGSVhNRTogc2hvdWxkIGRlZmluZSBGRk1QRUdfVkVSU0lPTgotZG5sCi0KLUFDX0RFRlVOKFtBTV9QQVRIX0ZGTVBFR10sCi1bCi0gIGRubCBhbGxvdyBmb3Igc3BlY2lmaWNhdGlvbiBvZiBhIHNvdXJjZSBwYXRoIChmb3IgdW5pbnN0YWxsZWQpCi0gIEFDX0FSR19XSVRIKGZmbXBlZy1zb3VyY2UsCi0gICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1mZm1wZWctc291cmNlPURJUl0sCi0gICAgICAgICAgICAgICAgICAgW0RpcmVjdG9yeSB3aGVyZSBGRm1wZWcgc291cmNlIGlzIChvcHRpb25hbCldKSwKLSAgICBmZm1wZWdfc291cmNlPSIkd2l0aHZhbCIpCi0KLSAgZG5sIHNhdmUgQ0ZMQUdTIGFuZCBMSUJTIGhlcmUKLSAgQ0ZMQUdTX3NhdmU9JENGTEFHUwotICBMSUJTX3NhdmU9JExJQlMKLSAgaWYgdGVzdCAieCRmZm1wZWdfc291cmNlIiAhPSAieCI7IHRoZW4KLSAgICBkbmwgdW5pbnN0YWxsZWQgRkZtcGVnIGNvcHkKLSAgICBBQ19NU0dfTk9USUNFKFtMb29raW5nIGZvciBGRm1wZWcgc291cmNlIGluICRmZm1wZWdfc291cmNlXSkKLSAgICBDRkxBR1M9Ii1JJGZmbXBlZ19zb3VyY2UvbGliYXYgLUkkZmZtcGVnX3NvdXJjZS9saWJhdmNvZGVjIgotICAgIExJQlM9Ii1MJGZmbXBlZ19zb3VyY2UvbGliYXYgLUwkZmZtcGVnX3NvdXJjZS9saWJhdmNvZGVjIgotICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0ZGTVBFR19VTklOU1RBTExFRCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgW2RlZmluZWQgaWYgd2UgY29tcGlsZSBhZ2FpbnN0IHVuaW5zdGFsbGVkIEZGbXBlZ10pCi0gICAgRkZNUEVHX0NPTU1PTl9JTkNMVURFPSIjaW5jbHVkZSA8Y29tbW9uLmg+IgotICBlbHNlCi0gICAgRkZNUEVHX0NPTU1PTl9JTkNMVURFPSIjaW5jbHVkZSA8ZmZtcGVnL2NvbW1vbi5oPiIKLSAgZmkKLSAgCi0gIGRubCBjaGVjayBmb3IgbGliYXZjb2RlYwotICBBQ19DSEVDS19MSUIoYXZjb2RlYywgYXZjb2RlY19pbml0LCBIQVZFX0ZGTVBFRz15ZXMsIEhBVkVfRkZNUEVHPW5vKQotICAKLSAgZG5sIGNoZWNrIGZvciBhdmNvZGVjLmggYW5kIGF2Zm9ybWF0LmgKLSAgaWYgdGVzdCAieCRmZm1wZWdfc291cmNlIiAhPSAieCI7IHRoZW4KLSAgICBkbmwgdW5pbnN0YWxsZWQKLSAgICBBQ19DSEVDS19IRUFERVIoYXZjb2RlYy5oLCAsIEhBVkVfRkZNUEVHPW5vLCBbLyogb25seSBjb21waWxlICovXSkKLSAgICBBQ19DSEVDS19IRUFERVIoYXZmb3JtYXQuaCwgLCBIQVZFX0ZGTVBFRz1ubywgWy8qIG9ubHkgY29tcGlsZSAqL10pCi0gIGVsc2UKLSAgICBBQ19DSEVDS19IRUFERVIoZmZtcGVnL2F2Y29kZWMuaCwgLCBIQVZFX0ZGTVBFRz1ubykKLSAgICBBQ19DSEVDS19IRUFERVIoZmZtcGVnL2F2Zm9ybWF0LmgsICwgSEFWRV9GRk1QRUc9bm8pCi0gIGZpCi0KLWRubCBub3cgY2hlY2sgaWYgaXQncyBzdWZmaWNpZW50bHkgbmV3Ci0KLSAgQUNfTEFOR19TQVZFKCkKLSAgQUNfTEFOR19DKCkKLQotICBkbmwgRklYTUU6IHdlIHVzZSBzdHJjbXAsIHdoaWNoIHdlIGtub3cgaXMgZ29pbmcgdG8gYnJlYWsgaWYgZmZtcGVnIGV2ZXIgdXNlcwotICBkbmwgdHdvIGRpZ2l0cyBmb3IgYW55IG9mIHRoZWlyIHZlcnNpb24gbnVtYmVycy4gIEl0IG1ha2VzIHRoZSB0ZXN0IHNvIG11Y2gKLSAgZG5sIGVhc2llciB0aG91Z2ggc28gbGV0J3MgaWdub3JlIHRoYXQKLSAgQUNfVFJZX1JVTihbCi0kRkZNUEVHX0NPTU1PTl9JTkNMVURFCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotaW50Ci1tYWluICgpCi17Ci0gIGlmIChzdHJjbXAgKEZGTVBFR19WRVJTSU9OLCAiJDEiKSA9PSAtMSkKLSAgewotICAgIGZwcmludGYgKHN0ZGVyciwKLSAgICAgICAgICAgICAiRVJST1I6IHlvdXIgY29weSBvZiBmZm1wZWcgaXMgdG9vIG9sZCAoJXMpXG4iLCBGRk1QRUdfVkVSU0lPTik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgZWxzZQotICAgIHJldHVybiAwOwotfQotXSwgLCBIQVZFX0ZGTVBFRz1ubykKLQotZG5sIG5vdyBkbyB0aGUgYWN0dWFsICJkbyB3ZSBoYXZlIGl0ID8iIHRlc3QKLSAgaWYgdGVzdCAieCRIQVZFX0ZGTVBFRyIgPSAieHllcyI7IHRoZW4KLSAgICBGRk1QRUdfTElCUz0iJExJQlMgLWxhdmNvZGVjIC1sYXZmb3JtYXQiCi0gICAgRkZNUEVHX0NGTEFHUz0iJENGTEFHUyIKLSAgICBBQ19NU0dfTk9USUNFKHdlIGhhdmUgZmZtcGVnKQotICAgIGRubCBleGVjdXRlIHdoYXQgd2UgaGF2ZSB0byBiZWNhdXNlIGl0J3MgZm91bmQKLSAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICBlbHNlCi0gICAgRkZNUEVHX0xJQlM9IiIKLSAgICBGRk1QRUdfQ0ZMQUdTPSIiCi0gICAgZG5sIGV4ZWN1dGUgd2hhdCB3ZSBoYXZlIHRvIGJlY2F1c2UgaXQncyBub3QgZm91bmQKLSAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotICBmaQotCi1kbmwgbWFrZSB2YXJpYWJsZXMgYXZhaWxhYmxlCi0gIEFDX1NVQlNUKEZGTVBFR19MSUJTKQotICBBQ19TVUJTVChGRk1QRUdfQ0ZMQUdTKQotICBBQ19TVUJTVChIQVZFX0ZGTVBFRykKLSAgQUNfTEFOR19SRVNUT1JFKCkKLSAgQ0ZMQUdTPSRDRkxBR1Nfc2F2ZQotICBMSUJTPSRMSUJTX3NhdmUKLV0pCmRpZmYgLS1naXQgYS9tNC9hcy1saWJsYW1lLm00IGIvbTQvYXMtbGlibGFtZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3MDcwYy4uMDAwMDAwMAotLS0gYS9tNC9hcy1saWJsYW1lLm00CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyBDRkxBR1MgYW5kIGxpYnJhcnkgcGF0aHMgZm9yIExJQkxBTUUKLSMgdGFrZW4gZnJvbSBBdXRvc3RhciBTYW5kYm94LCBodHRwOi8vYXV0b3N0YXJzLnNvdXJjZWZvcmdlLm5ldC8KLSMgaW5zcGlyZWQgYnkgeG1tcy5tNAotCi1kbmwgVXNhZ2U6Ci1kbmwgQU1fUEFUSF9MSUJMQU1FKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKLWRubCBGSVhNRTogdmVyc2lvbiBjaGVja2luZyBkb2VzIG5vdCB3b3JrIGN1cnJlbnRseQotZG5sCi1kbmwgRXhhbXBsZToKLWRubCBBTV9QQVRIX0xJQkxBTUUoMy44OSwgLCBBQ19NU0dfRVJST1IoWyoqKiBMSUJMQU1FID49IDMuODkgbm90IGluc3RhbGxlZCkpIAotZG5sCi1kbmwgRGVmaW5lcyBMSUJMQU1FX0xJQlMKLWRubCBGSVhNRTogc2hvdWxkIGRlZmluZSBMSUJMQU1FX1ZFUlNJT04KLWRubAotCi1BQ19ERUZVTihbQU1fUEFUSF9MSUJMQU1FXSwKLVsKLSAgZG5sIGNoZWNrIGZvciB0aGUgbGlicmFyeQotICBBQ19DSEVDS19MSUIobXAzbGFtZSwgbGFtZV9pbml0LCBIQVZFX0xJQkxBTUU9eWVzLCBIQVZFX0xJQkxBTUU9bm8sIC1sbSkKLSAgZG5sIGNoZWNrIGlmIGxhbWUuaCBpcyBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYXJkIGxvY2F0aW9uIG9yIG5vdAotICBIQVZFX0xBTUVfSF9TVEQ9bm8KLSAgQUNfQ0hFQ0tfSEVBREVSKGxhbWUuaCwgSEFWRV9MQU1FX0hfU1REPW5vLCA6KQotICBBQ19DSEVDS19IRUFERVIobGFtZS9sYW1lLmgsIEhBVkVfTEFNRV9IX1NURD15ZXMsIDopCi0gIEFDX01TR19DSEVDS0lORyhmb3IgbGFtZS5oIGluIHJpZ2h0IGxvY2F0aW9uKQotICBpZiB0ZXN0ICJ4JEhBVkVfTEFNRV9IX1NURCIgPSAieHllcyI7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgZWxzZQotICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgSEFWRV9MSUJMQU1FPW5vCi0gICAgaWYgdGVzdCAieCRIQVZFX0xBTUVfSF9TVEQiPSJ4bm8iOyB0aGVuCi0gICAgICBBQ19NU0dfV0FSTihsYW1lLmggZm91bmQgaW4gaW5jbHVkZSBkaXIsKQotICAgICAgQUNfTVNHX1dBUk4oIHdoaWxlIGl0IHNob3VsZCBiZSBpbiBpdCdzIG93biBsYW1lLyBkaXIgISkKLSAgICBmaQotIGZpCi0KLSAgZG5sIG5vdyBkbyB0aGUgYWN0dWFsICJkbyB3ZSBoYXZlIGl0ID8iIHRlc3QKLSAgaWYgdGVzdCAieCRIQVZFX0xJQkxBTUUiID0gInh5ZXMiOyB0aGVuCi0gICAgTElCTEFNRV9MSUJTPSItbG1wM2xhbWUgLWxtIgotICAgIGRubCBleGVjdXRlIHdoYXQgd2UgaGF2ZSB0byBiZWNhdXNlIGl0J3MgZm91bmQKLSAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICBlbHNlCi0gICAgTElCTEFNRV9MSUJTPSIiCi0gICAgZG5sIGV4ZWN1dGUgd2hhdCB3ZSBoYXZlIHRvIGJlY2F1c2UgaXQncyBub3QgZm91bmQKLSAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotICBmaQotCi0gIGRubCBtYWtlIHZhcmlhYmxlcyBhdmFpbGFibGUKLSAgQUNfU1VCU1QoTElCTEFNRV9MSUJTKQotICBBQ19TVUJTVChIQVZFX0xJQkxBTUUpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvYXMtc2x1cnAtZmZtcGVnLm00IGIvbTQvYXMtc2x1cnAtZmZtcGVnLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDU0YjQyLi4wMDAwMDAwCi0tLSBhL200L2FzLXNsdXJwLWZmbXBlZy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLWRubCBzbHVycC1mZm1wZWcubTQgMC4xLjEKLWRubCBhIG1hY3JvIHRvIHNsdXJwIGluIGZmbXBlZydzIGN2cyBzb3VyY2UgaW5zaWRlIGEgcHJvamVjdCB0cmVlCi1kbmwgdGFrZW4gZnJvbSBBdXRvc3RhciBTYW5kYm94LCBodHRwOi8vYXV0b3N0YXJzLnNvdXJjZWZvcmdlLm5ldC8KLQotZG5sIFVzYWdlOgotZG5sIEFTX1NMVVJQX0ZGTVBFRyhESVJFQ1RPUlksIERBVEUsIFtBQ1RJT04tSUYtV09SS0VEIFssIEFDVElPTi1JRi1OT1QtV09SS0VEXV1dKQotZG5sCi1kbmwgRXhhbXBsZToKLWRubCBBTV9QQVRIX0ZGTVBFRyhsaWIvZmZtcGVnLCAyMDAyLTEyLTE0IDEyOjAwIEdNVCkKLWRubAotZG5sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhIFRhZyBmaWxlIGluIHRoZSBkaXIgd2hlcmUgeW91IGNoZWNrIG91dCB0aGF0Ci1kbmwgaXMgdGhlIFRhZyBvZiBDVlMgeW91IHdhbnQgdG8gaGF2ZSBjaGVja2VkIG91dAotZG5sIGl0IHNob3VsZCBjb3JyZXNwb25kIHRvIHRoZSBEQVRFIGFyZ3VtZW50IHlvdSBzdXBwbHksIGllIHJlc29sdmUgdG8KLWRubCB0aGUgc2FtZSBkYXRlCi1kbmwgKGluIGFuIGlkZWFsIHdvcmxkLCBjdnMgd291bGQgdW5kZXJzdGFuZCBpdCdzIG93biBUYWcgZmlsZSBmb3JtYXQgYXMKLWRubCBhIGRhdGUgc3BlYykKLQotQUNfREVGVU4oW0FTX1NMVVJQX0ZGTVBFR10sCi1bCi0gICMgc2F2ZSBvcmlnaW5hbCBkaXIKLSAgRkFJTEVEPSIiCi0gIERJUkVDVE9SWT1gcHdkYAotICAjIGdldC91cGRhdGUgY3ZzCi0gIGlmIHRlc3QgISAtZCAkMTsgdGhlbiBta2RpciAtcCAkMTsgZmkKLSAgZG5sIHdlIG5lZWQgdG8gY2hlY2sgJHNyY2Rpci8kMSBvciBpdCB3aWxsIGFsd2F5cyBjaGVja291dCBmZm1wZWcgZXZlbiBpZiBpdCBpcyB0aGVyZQotICBkbmwgYXQgbGVhc3Qgd2hlbiB0b3Bfc3JjZGlyICE9IHRvcF9idWlsZGRpci4KLSAgZG5sIEZJWE1FOiB1bmZvcnR1bmF0ZWx5IHRoaXMgbWFrZXMgdGhlIGNoZWNrb3V0IGdvIGludG8gdG9wX3NyY2RpcgotICBjZCAkc3JjZGlyLyQxCi0KLSAgaWYgdGVzdCAhIC1lIGZmbXBlZy9SRUFETUU7IHRoZW4KLSAgICAjIGNoZWNrIG91dCBjdnMgY29kZQotICAgIEFDX01TR19OT1RJQ0UoY2hlY2tpbmcgb3V0IGZmbXBlZyBjdnMgY29kZSBmcm9tICQyIGludG8gJDEpCi0gICAgY3ZzIC1RIC16NCAtZDpwc2VydmVyOmFub255bW91c0BtcGxheWVyaHEuaHU6L2N2c3Jvb3QvZmZtcGVnIGNvIC1EICckMicgZmZtcGVnIHx8IEZBSUxFRD15ZXMKLSAgZWxzZQotICAgICMgY29tcGFyZSBhZ2FpbnN0IFRhZyBmaWxlIGFuZCBzZWUgaWYgaXQgbmVlZHMgdXBkYXRpbmcKLSAgICBpZiB0ZXN0ICJgY2F0IFRhZ2AiID09ICIkMiI7IHRoZW4KLSAgICAgIEFDX01TR19OT1RJQ0UoZmZtcGVnIGN2cyBjb2RlIGluIHN5bmMpCi0gICAgZWxzZQotICAgICAgY2QgZmZtcGVnIAotICAgICAgQUNfTVNHX05PVElDRSh1cGRhdGluZyBmZm1wZWcgY3ZzIGNvZGUgdG8gJDIpCi0gICAgICBjdnMgLVEgLXo0IHVwZGF0ZSAtZFAgLUQgJyQyJyB8fCBGQUlMRUQ9eWVzCi0gICAgICBjZCAuLgotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgIngkRkFJTEVEIiAhPSAieHllcyI7IHRoZW4KLSAgICBlY2hvICIkMiIgPiBUYWcgCi0gIGZpCi0gIAotICAjIG5vdyBnbyBiYWNrCi0gIGNkICRESVJFQ1RPUlkKLQotICBpZiB0ZXN0ICJ4JEZBSUxFRCIgPT0gInh5ZXMiOyB0aGVuCi0gICAgWyQ0XQotICAgIGZhbHNlCi0gIGVsc2UKLSAgICBbJDNdCi0gICAgdHJ1ZQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L2NoZWNrLWxpYmhlYWRlci5tNCBiL200L2NoZWNrLWxpYmhlYWRlci5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdmYzVhNi4uMDAwMDAwMAotLS0gYS9tNC9jaGVjay1saWJoZWFkZXIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1kbmwKLWRubCBDSEVDSy1MSUJIRUFERVIoRkVBVFVSRS1OQU1FLCBMSUItTkFNRSwgTElCLUZVTkNUSU9OLCBIRUFERVItTkFNRSwKLWRubCAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZPVU5ELCBBQ1RJT04tSUYtTk9ULUZPVU5ELAotZG5sICAgICAgICAgICAgICAgICBFWFRSQS1MREZMQUdTLCBFWFRSQS1DUFBGTEFHUykKLWRubAotZG5sIEZFQVRVUkUtTkFNRSAgICAgICAgLSBmZWF0dXJlIG5hbWU7IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyBhcmUgdHJlYXRlZAotZG5sICAgICAgICAgICAgICAgICAgICAgICBhcyBmZWF0dXJlLCB3aGljaCB3ZSBsb29rIGZvcgotZG5sIExJQi1OQU1FICAgICAgICAgICAgLSBsaWJyYXJ5IG5hbWUgYXMgaW4gQUNfQ0hFQ0tfTElCIG1hY3JvCi1kbmwgTElCLUZVTkNUSU9OICAgICAgICAtIGxpYnJhcnkgc3ltYm9sIGFzIGluIEFDX0NIRUNLX0xJQiBtYWNybwotZG5sIEhFQURFUi1OQU1FICAgICAgICAgLSBoZWFkZXIgZmlsZSBuYW1lIGFzIGluIEFDX0NIRUNLX0hFQURFUgotZG5sIEFDVElPTi1JRi1GT1VORCAgICAgLSB3aGVuIGZlYXR1cmUgaXMgZm91bmQgdGhlbiBleGVjdXRlIGdpdmVuIGFjdGlvbgotZG5sIEFDVElPTi1JRi1OT1QtRk9VTkQgLSB3aGVuIGZlYXR1cmUgaXMgbm90IGZvdW5kIHRoZW4gZXhlY3V0ZSBnaXZlbiBhY3Rpb24KLWRubCBFWFRSQS1MREZMQUdTICAgICAgIC0gZXh0cmEgbGlua2VyIGZsYWdzICgtTCBvciAtbCkKLWRubCBFWFRSQS1DUFBGTEFHUyAgICAgIC0gZXh0cmEgQyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGkuZS4gLUkvdXNyL1gxMVI2L2luY2x1ZGUKLWRubAotZG5sIEJhc2VkIG9uIEdTVF9DSEVDS19MSUJIRUFERVIgZnJvbSBnc3RyZWFtZXIgcGx1Z2lucyAwLjMuMS4KLWRubAotQUNfREVGVU4oW0NIRUNLX0xJQkhFQURFUl0sCi1bCi0gIEFDX0NIRUNLX0xJQihbJDJdLCBbJDNdLCBIQVZFX1skMV09eWVzLCBIQVZFX1skMV09bm8sIFskN10pCi0gIGNoZWNrX2xpYmhlYWRlcl9mZWF0dXJlX25hbWU9dHJhbnNsaXQoWyQxXSwgQS1aLCBhLXopCi0KLSAgaWYgdGVzdCAieCRIQVZFX1skMV0iID0gInh5ZXMiOyB0aGVuCi0gICAgY2hlY2tfbGliaGVhZGVyX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gICAgQ1BQRkxBR1M9IlskOF0gJENQUEZMQUdTIgotICAgIEFDX0NIRUNLX0hFQURFUihbJDRdLCA6LCBIQVZFX1skMV09bm8pCi0gICAgQ1BQRkxBR1M9JGNoZWNrX2xpYmhlYWRlcl9zYXZlX0NQUEZMQUdTCi0gIGZpCi0KLSAgaWYgdGVzdCAieCRIQVZFX1skMV0iID0gInh5ZXMiOyB0aGVuCi0gICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKLSAgICBBQ19NU0dfTk9USUNFKCRjaGVja19saWJoZWFkZXJfZmVhdHVyZV9uYW1lIHdhcyBmb3VuZCkKLSAgZWxzZQotICAgIGlmZWxzZShbJDZdLCAsIDosIFskNl0pCi0gICAgQUNfTVNHX1dBUk4oJGNoZWNrX2xpYmhlYWRlcl9mZWF0dXJlX25hbWUgbm90IGZvdW5kKQotICBmaQotICBBQ19TVUJTVChIQVZFX1skMV0pCi1dCi0pCmRpZmYgLS1naXQgYS9tNC9jb2Rlc2V0Lm00IGIvbTQvY29kZXNldC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzOTU1Yi4uMDAwMDAwMAotLS0gYS9tNC9jb2Rlc2V0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBjb2Rlc2V0Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTYpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgotCi1BQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCi1bCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVRdLCBhbV9jdl9sYW5naW5mb19jb2Rlc2V0LAotICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKLSAgICAgIFtjaGFyKiBjcyA9IG5sX2xhbmdpbmZvKENPREVTRVQpOyByZXR1cm4gIWNzO10sCi0gICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcywKLSAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCi0gICAgXSkKLSAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIDxsYW5naW5mby5oPiBhbmQgbmxfbGFuZ2luZm8oQ09ERVNFVCkuXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9tNC9mcmVldHlwZTIubTQgYi9tNC9mcmVldHlwZTIubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOTkwNzEuLjAwMDAwMDAKLS0tIGEvbTQvZnJlZXR5cGUyLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLSMgQ29uZmlndXJlIHBhdGhzIGZvciBGcmVlVHlwZTIKLSMgTWFyY2VsbyBNYWdhbGxvbiAyMDAxLTEwLTI2LCBiYXNlZCBvbiBndGsubTQgYnkgT3dlbiBUYXlsb3IKLQotZG5sIEFDX0NIRUNLX0ZUMihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCi1kbmwgVGVzdCBmb3IgRnJlZVR5cGUyLCBhbmQgZGVmaW5lIEZUMl9DRkxBR1MgYW5kIEZUMl9MSUJTCi1kbmwKLUFDX0RFRlVOKFtBQ19DSEVDS19GVDJdLAotW2RubAotZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgZnJlZXR5cGUtY29uZmlnIHNjcmlwdAotZG5sCi1BQ19BUkdfV0lUSChmdC1wcmVmaXgsCi1bICAtLXdpdGgtZnQtcHJlZml4PVBSRUZJWAotICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmaXggd2hlcmUgRnJlZVR5cGUgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAotICAgICAgICAgICAgZnRfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBmdF9jb25maWdfcHJlZml4PSIiKQotQUNfQVJHX1dJVEgoZnQtZXhlYy1wcmVmaXgsCi1bICAtLXdpdGgtZnQtZXhlYy1wcmVmaXg9UFJFRklYCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWMgcHJlZml4IHdoZXJlIEZyZWVUeXBlIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKLSAgICAgICAgICAgIGZ0X2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBmdF9jb25maWdfZXhlY19wcmVmaXg9IiIpCi1BQ19BUkdfRU5BQkxFKGZyZWV0eXBldGVzdCwKLVsgIC0tZGlzYWJsZS1mcmVldHlwZXRlc3QgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGEgdGVzdCBGcmVlVHlwZSBwcm9ncmFtXSwKLSAgICAgICAgICAgICAgW10sIGVuYWJsZV9mdHRlc3Q9eWVzKQotCi1pZiB0ZXN0IHgkZnRfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCi0gIGZ0X2NvbmZpZ19hcmdzPSIkZnRfY29uZmlnX2FyZ3MgLS1leGVjLXByZWZpeD0kZnRfY29uZmlnX2V4ZWNfcHJlZml4IgotICBpZiB0ZXN0IHgke0ZUMl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotICAgIEZUMl9DT05GSUc9JGZ0X2NvbmZpZ19leGVjX3ByZWZpeC9iaW4vZnJlZXR5cGUtY29uZmlnCi0gIGZpCi1maQotaWYgdGVzdCB4JGZ0X2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KLSAgZnRfY29uZmlnX2FyZ3M9IiRmdF9jb25maWdfYXJncyAtLXByZWZpeD0kZnRfY29uZmlnX3ByZWZpeCIKLSAgaWYgdGVzdCB4JHtGVDJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLSAgICBGVDJfQ09ORklHPSRmdF9jb25maWdfcHJlZml4L2Jpbi9mcmVldHlwZS1jb25maWcKLSAgZmkKLWZpCi1BQ19QQVRIX1BST0coRlQyX0NPTkZJRywgZnJlZXR5cGUtY29uZmlnLCBubykKLQotbWluX2Z0X3ZlcnNpb249aWZlbHNlKFskMV0sICw2LjEuMCwkMSkKLUFDX01TR19DSEVDS0lORyhmb3IgRnJlZVR5cGUgLSB2ZXJzaW9uID49ICRtaW5fZnRfdmVyc2lvbikKLW5vX2Z0PSIiCi1pZiB0ZXN0ICIkRlQyX0NPTkZJRyIgPSAibm8iIDsgdGhlbgotICBub19mdD15ZXMKLWVsc2UKLSAgRlQyX0NGTEFHUz1gJEZUMl9DT05GSUcgJGZ0X2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAotICBGVDJfTElCUz1gJEZUMl9DT05GSUcgJGZ0X2NvbmZpZ19hcmdzIC0tbGlic2AKLSAgZnRfY29uZmlnX21ham9yX3ZlcnNpb249YCRGVDJfQ09ORklHICRmdF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKLSAgZnRfY29uZmlnX21pbm9yX3ZlcnNpb249YCRGVDJfQ09ORklHICRmdF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDIvJ2AKLSAgZnRfY29uZmlnX21pY3JvX3ZlcnNpb249YCRGVDJfQ09ORklHICRmdF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKLSAgZnRfbWluX21ham9yX3ZlcnNpb249YGVjaG8gJG1pbl9mdF92ZXJzaW9uIHwgXAotICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCi0gIGZ0X21pbl9taW5vcl92ZXJzaW9uPWBlY2hvICRtaW5fZnRfdmVyc2lvbiB8IFwKLSAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAotICBmdF9taW5fbWljcm9fdmVyc2lvbj1gZWNobyAkbWluX2Z0X3ZlcnNpb24gfCBcCi0gICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKLSAgaWYgdGVzdCB4JGVuYWJsZV9mdHRlc3QgPSB4eWVzIDsgdGhlbgotICAgIGZ0X2NvbmZpZ19pc19sdD0iIgotICAgIGlmIHRlc3QgJGZ0X2NvbmZpZ19tYWpvcl92ZXJzaW9uIC1sdCAkZnRfbWluX21ham9yX3ZlcnNpb24gOyB0aGVuCi0gICAgICBmdF9jb25maWdfaXNfbHQ9eWVzCi0gICAgZWxzZQotICAgICAgaWYgdGVzdCAkZnRfY29uZmlnX21ham9yX3ZlcnNpb24gLWVxICRmdF9taW5fbWFqb3JfdmVyc2lvbiA7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAkZnRfY29uZmlnX21pbm9yX3ZlcnNpb24gLWx0ICRmdF9taW5fbWlub3JfdmVyc2lvbiA7IHRoZW4KLSAgICAgICAgICBmdF9jb25maWdfaXNfbHQ9eWVzCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiB0ZXN0ICRmdF9jb25maWdfbWlub3JfdmVyc2lvbiAtZXEgJGZ0X21pbl9taW5vcl92ZXJzaW9uIDsgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAkZnRfY29uZmlnX21pY3JvX3ZlcnNpb24gLWx0ICRmdF9taW5fbWljcm9fdmVyc2lvbiA7IHRoZW4KLSAgICAgICAgICAgICAgZnRfY29uZmlnX2lzX2x0PXllcwotICAgICAgICAgICAgZmkKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgeCRmdF9jb25maWdfaXNfbHQgPSB4eWVzIDsgdGhlbgotICAgICAgbm9fZnQ9eWVzCi0gICAgZWxzZQotICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRGVDJfQ0ZMQUdTIgotICAgICAgTElCUz0iJEZUMl9MSUJTICRMSUJTIgotZG5sCi1kbmwgU2FuaXR5IGNoZWNrcyBmb3IgdGhlIHJlc3VsdHMgb2YgZnJlZXR5cGUtY29uZmlnIHRvIHNvbWUgZXh0ZW50Ci1kbmwKLSAgICAgIEFDX1RSWV9SVU4oWwotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotaW50Ci1tYWluKCkKLXsKLSAgRlRfTGlicmFyeSBsaWJyYXJ5OwotICBGVF9FcnJvciBlcnJvcjsKLQotICBlcnJvciA9IEZUX0luaXRfRnJlZVR5cGUoJmxpYnJhcnkpOwotCi0gIGlmIChlcnJvcikKLSAgICByZXR1cm4gMTsKLSAgZWxzZQotICB7Ci0gICAgRlRfRG9uZV9GcmVlVHlwZShsaWJyYXJ5KTsKLSAgICByZXR1cm4gMDsKLSAgfQotfQotXSwsIG5vX2Z0PXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCi0gICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgZmkgICAgICAgICAgICAgIyB0ZXN0ICRmdF9jb25maWdfdmVyc2lvbiAtbHQgJGZ0X21pbl92ZXJzaW9uCi0gIGZpICAgICAgICAgICAgICAgIyB0ZXN0IHgkZW5hYmxlX2Z0dGVzdCA9IHh5ZXMKLWZpICAgICAgICAgICAgICAgICAjIHRlc3QgIiRGVDJfQ09ORklHIiA9ICJubyIKLWlmIHRlc3QgeCRub19mdCA9IHggOyB0aGVuCi0gICBBQ19NU0dfUkVTVUxUKHllcykKLSAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi1lbHNlCi0gICBBQ19NU0dfUkVTVUxUKG5vKQotICAgaWYgdGVzdCAiJEZUMl9DT05GSUciID0gIm5vIiA7IHRoZW4KLSAgICAgZWNobyAiKioqIFRoZSBmcmVldHlwZS1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBGcmVlVHlwZSAyIGNvdWxkIG5vdCBiZSBmb3VuZC4iCi0gICAgIGVjaG8gIioqKiBJZiBGcmVlVHlwZSAyIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKLSAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBGVDJfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKLSAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBmcmVldHlwZS1jb25maWcuIgotICAgZWxzZQotICAgICBpZiB0ZXN0IHgkZnRfY29uZmlnX2lzX2x0ID0geHllcyA7IHRoZW4KLSAgICAgICBlY2hvICIqKiogWW91ciBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgRnJlZVR5cGUgMiBsaWJyYXJ5IGlzIHRvbyBvbGQuIgotICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgRnJlZVR5cGUgMiwgbWFrZSBzdXJlIHRoYXQiCi0gICAgICAgZWNobyAiKioqIGNvcnJlY3QgdmFsdWVzIGZvciAtLXdpdGgtZnQtcHJlZml4IG9yIC0td2l0aC1mdC1leGVjLXByZWZpeCIKLSAgICAgICBlY2hvICIqKiogYXJlIHVzZWQsIG9yIHNldCB0aGUgRlQyX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCi0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBmcmVldHlwZS1jb25maWcuIgotICAgICBlbHNlCi0gICAgICAgZWNobyAiKioqIFRoZSBGcmVlVHlwZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIHJ1bi4gIElmIHlvdXIgc3lzdGVtIHVzZXMiCi0gICAgICAgZWNobyAiKioqIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHRoZXkgYXJlIGluc3RhbGxlZCBvdXRzaWRlIHRoZSBub3JtYWwiCi0gICAgICAgZWNobyAiKioqIHN5c3RlbSBsaWJyYXJ5IHBhdGgsIG1ha2Ugc3VyZSB0aGUgdmFyaWFibGUgTERfTElCUkFSWV9QQVRIIgotICAgICAgIGVjaG8gIioqKiAob3Igd2hhdGV2ZXIgaXMgYXBwcm9waWF0ZSBmb3IgeW91ciBzeXN0ZW0pIGlzIGNvcnJlY3RseSBzZXQuIgotICAgICBmaQotICAgZmkKLSAgIEZUMl9DRkxBR1M9IiIKLSAgIEZUMl9MSUJTPSIiCi0gICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotZmkKLUFDX1NVQlNUKEZUMl9DRkxBR1MpCi1BQ19TVUJTVChGVDJfTElCUykKLV0pCmRpZmYgLS1naXQgYS9tNC9nZXR0ZXh0Lm00IGIvbTQvZ2V0dGV4dC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhZTFmNy4uMDAwMDAwMAotLS0gYS9tNC9nZXR0ZXh0Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMzgxICswLDAgQEAKLSMgZ2V0dGV4dC5tNCBzZXJpYWwgNjAgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBBdXRob3JzOgotZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KLWRubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDA2LgotCi1kbmwgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KLQotZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVChbSU5UTFNZTUJPTF0sIFtORUVEU1lNQk9MXSwgW0lOVExESVJdKS4KLWRubCBJTlRMU1lNQk9MIGNhbiBiZSBvbmUgb2YgJ2V4dGVybmFsJywgJ25vLWxpYnRvb2wnLCAndXNlLWxpYnRvb2wnLiBUaGUKLWRubCAgICBkZWZhdWx0IChpZiBpdCBpcyBub3Qgc3BlY2lmaWVkIG9yIGVtcHR5KSBpcyAnbm8tbGlidG9vbCcuCi1kbmwgICAgSU5UTFNZTUJPTCBzaG91bGQgYmUgJ2V4dGVybmFsJyBmb3IgcGFja2FnZXMgd2l0aCBubyBpbnRsIGRpcmVjdG9yeSwKLWRubCAgICBhbmQgJ25vLWxpYnRvb2wnIG9yICd1c2UtbGlidG9vbCcgZm9yIHBhY2thZ2VzIHdpdGggYW4gaW50bCBkaXJlY3RvcnkuCi1kbmwgICAgSWYgSU5UTFNZTUJPTCBpcyAndXNlLWxpYnRvb2wnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5Ci1kbmwgICAgJCh0b3BfYnVpbGRkaXIpL2ludGwvbGliaW50bC5sYSB3aWxsIGJlIGNyZWF0ZWQgKHNoYXJlZCBhbmQvb3Igc3RhdGljLAotZG5sICAgIGRlcGVuZGluZyBvbiAtLXtlbmFibGUsZGlzYWJsZX0te3NoYXJlZCxzdGF0aWN9IGFuZCBvbiB0aGUgcHJlc2VuY2Ugb2YKLWRubCAgICBBTS1ESVNBQkxFLVNIQVJFRCkuIElmIElOVExTWU1CT0wgaXMgJ25vLWxpYnRvb2wnLCBhIHN0YXRpYyBsaWJyYXJ5Ci1kbmwgICAgJCh0b3BfYnVpbGRkaXIpL2ludGwvbGliaW50bC5hIHdpbGwgYmUgY3JlYXRlZC4KLWRubCBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMgJ25lZWQtbmdldHRleHQnLCB0aGVuIEdOVSBnZXR0ZXh0Ci1kbmwgICAgaW1wbGVtZW50YXRpb25zIChpbiBsaWJjIG9yIGxpYmludGwpIHdpdGhvdXQgdGhlIG5nZXR0ZXh0KCkgZnVuY3Rpb24KLWRubCAgICB3aWxsIGJlIGlnbm9yZWQuICBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMKLWRubCAgICAnbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zJywgdGhlbiBHTlUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndAotZG5sICAgIHN1cHBvcnQgdGhlIElTTyBDIDk5IDxpbnR0eXBlcy5oPiBmb3JtYXRzdHJpbmcgbWFjcm9zIHdpbGwgYmUgaWdub3JlZC4KLWRubCBJTlRMRElSIGlzIHVzZWQgdG8gZmluZCB0aGUgaW50bCBsaWJyYXJpZXMuICBJZiBlbXB0eSwKLWRubCAgICB0aGUgdmFsdWUgYCQodG9wX2J1aWxkZGlyKS9pbnRsLycgaXMgdXNlZC4KLWRubAotZG5sIFRoZSByZXN1bHQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgb25lIG9mIHRocmVlIGNhc2VzOgotZG5sIDEpIEdOVSBnZXR0ZXh0LCBhcyBpbmNsdWRlZCBpbiB0aGUgaW50bCBzdWJkaXJlY3RvcnksIHdpbGwgYmUgY29tcGlsZWQKLWRubCAgICBhbmQgdXNlZC4KLWRubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKLWRubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQotZG5sIDIpIEdOVSBnZXR0ZXh0IGhhcyBiZWVuIGZvdW5kIGluIHRoZSBzeXN0ZW0ncyBDIGxpYnJhcnkuCi1kbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IEdOVSAtLT4gaW5zdGFsbCBpbiAkKGRhdGFkaXIpCi1kbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKLWRubCAzKSBObyBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYWx3YXlzIHVzZSBFbmdsaXNoIG1zZ2lkLgotZG5sICAgIENhdGFsb2cgZm9ybWF0OiBub25lCi1kbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IG5vbmUKLWRubCBJZiBJTlRMU1lNQk9MIGlzICdleHRlcm5hbCcsIG9ubHkgY2FzZXMgMiBhbmQgMyBjYW4gb2NjdXIuCi1kbmwgVGhlIHVzZSBvZiAuZ21vIGlzIGhpc3RvcmljYWwgKGl0IHdhcyBuZWVkZWQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlCi1kbmwgR05VIGZvcm1hdCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhbiBYL09wZW4gZ2V0dGV4dCksCi1kbmwgYnV0IHdlIGtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGZvcmNlIGlycmVsZXZhbnQgZmlsZW5hbWUgY2hhbmdlcyBvbiB0aGUKLWRubCBtYWludGFpbmVycy4KLWRubAotQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUXSwKLVsKLSAgZG5sIEFyZ3VtZW50IGNoZWNraW5nLgotICBpZmVsc2UoWyQxXSwgW10sICwgW2lmZWxzZShbJDFdLCBbZXh0ZXJuYWxdLCAsIFtpZmVsc2UoWyQxXSwgW25vLWxpYnRvb2xdLCAsIFtpZmVsc2UoWyQxXSwgW3VzZS1saWJ0b29sXSwgLAotICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgZmlyc3QgYXJndW1lbnQgdG8gQU1fR05VX0dFVFRFWFQKLV0pXSldKV0pXSkKLSAgaWZlbHNlKFskMl0sIFtdLCAsIFtpZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCAsIFtpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sICwKLSAgICBbZXJycHJpbnQoW0VSUk9SOiBpbnZhbGlkIHNlY29uZCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAotXSldKV0pXSkKLSAgZGVmaW5lKFtndF9pbmNsdWRlZF9pbnRsXSwKLSAgICBpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwKLSAgICAgIGlmZGVmKFtBTV9HTlVfR0VUVEVYVF9dW0lOVExfU1VCRElSXSwgW3llc10sIFtub10pLAotICAgICAgW3llc10pKQotICBkZWZpbmUoW2d0X2xpYnRvb2xfc3VmZml4X3ByZWZpeF0sIGlmZWxzZShbJDFdLCBbdXNlLWxpYnRvb2xdLCBbbF0sIFtdKSkKLSAgZ3RfTkVFRFNfSU5JVAotICBBTV9HTlVfR0VUVEVYVF9ORUVEKFskMl0pCi0KLSAgQUNfUkVRVUlSRShbQU1fUE9fU1VCRElSU10pZG5sCi0gIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKLSAgICBBQ19SRVFVSVJFKFtBTV9JTlRMX1NVQkRJUl0pZG5sCi0gIF0pCi0KLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgQUNfTElCX0xJTktGTEFHU19CT0RZLgotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQotICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQotCi0gIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KLSAgZG5sIElkZWFsbHkgd2Ugd291bGQgZG8gdGhpcyBzZWFyY2ggb25seSBhZnRlciB0aGUKLSAgZG5sICAgICAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgZG5sICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiICE9ICJ5ZXMiOyB9OyB0aGVuCi0gIGRubCB0ZXN0cy4gQnV0IGlmIGNvbmZpZ3VyZS5pbiBpbnZva2VzIEFNX0lDT05WIGFmdGVyIEFNX0dOVV9HRVRURVhUCi0gIGRubCB0aGUgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBuZWVkIHRvIGNvbnRhaW4gdGhlIHNhbWUgc2hlbGwgY29kZQotICBkbmwgYWdhaW4sIG91dHNpZGUgYW55ICdpZicuIFRoZXJlIGFyZSB0d28gc29sdXRpb25zOgotICBkbmwgLSBJbnZva2UgQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFkgaGVyZSwgb3V0c2lkZSBhbnkgJ2lmJy4KLSAgZG5sIC0gQ29udHJvbCB0aGUgZXhwYW5zaW9ucyBpbiBtb3JlIGRldGFpbCB1c2luZyBBQ19QUk9WSURFX0lGRUxTRS4KLSAgZG5sIFNpbmNlIEFDX1BST1ZJREVfSUZFTFNFIGlzIG9ubHkgaW4gYXV0b2NvbmYgPj0gMi41MiBhbmQgbm90Ci0gIGRubCBkb2N1bWVudGVkLCB3ZSBhdm9pZCBpdC4KLSAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgLCBbCi0gICAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQotICBdKQotCi0gIGRubCBTb21ldGltZXMsIG9uIE1hY09TIFgsIGxpYmludGwgcmVxdWlyZXMgbGlua2luZyB3aXRoIENvcmVGb3VuZGF0aW9uLgotICBndF9JTlRMX01BQ09TWAotCi0gIGRubCBTZXQgVVNFX05MUy4KLSAgQUNfUkVRVUlSRShbQU1fTkxTXSkKLQotICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCi0gICAgQlVJTERfSU5DTFVERURfTElCSU5UTD1ubwotICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCi0gIF0pCi0gIExJQklOVEw9Ci0gIExUTElCSU5UTD0KLSAgUE9TVUI9Ci0KLSAgZG5sIEFkZCBhIHZlcnNpb24gbnVtYmVyIHRvIHRoZSBjYWNoZSBtYWNyb3MuCi0gIGNhc2UgIiAkZ3RfbmVlZHMgIiBpbgotICAgICoiIG5lZWQtZm9ybWF0c3RyaW5nLW1hY3JvcyAiKikgZ3RfYXBpX3ZlcnNpb249MyA7OwotICAgICoiIG5lZWQtbmdldHRleHQgIiopIGd0X2FwaV92ZXJzaW9uPTIgOzsKLSAgICAqKSBndF9hcGlfdmVyc2lvbj0xIDs7Ci0gIGVzYWMKLSAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmM9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3RfYXBpX3ZlcnNpb259X2xpYmMiCi0gIGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPSJndF9jdl9mdW5jX2dudWdldHRleHQke2d0X2FwaV92ZXJzaW9ufV9saWJpbnRsIgotCi0gIGRubCBJZiB3ZSB1c2UgTkxTIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2QKLSAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KLSAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9bm8KLSAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQotICAgICAgQUNfQVJHX1dJVEgoaW5jbHVkZWQtZ2V0dGV4dCwKLSAgICAgICAgWyAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmVdLAotICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAotICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PW5vKQotICAgICAgQUNfTVNHX1JFU1VMVCgkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCkKLQotICAgICAgbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dD0iJG5sc19jdl9mb3JjZV91c2VfZ251X2dldHRleHQiCi0gICAgICBpZiB0ZXN0ICIkbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dCIgIT0gInllcyI7IHRoZW4KLSAgICBdKQotICAgICAgICBkbmwgVXNlciBkb2VzIG5vdCBpbnNpc3Qgb24gdXNpbmcgR05VIE5MUyBsaWJyYXJ5LiAgRmlndXJlIG91dCB3aGF0Ci0gICAgICAgIGRubCB0byB1c2UuICBJZiBHTlUgZ2V0dGV4dCBpcyBhdmFpbGFibGUgd2UgdXNlIHRoaXMuICBFbHNlIHdlIGhhdmUKLSAgICAgICAgZG5sIHRvIGZhbGwgYmFjayB0byBHTlUgTkxTIGxpYnJhcnkuCi0KLSAgICAgICAgaWYgdGVzdCAkZ3RfYXBpX3ZlcnNpb24gLWdlIDM7IHRoZW4KLSAgICAgICAgICBndF9yZXZpc2lvbl90ZXN0X2NvZGU9JwotI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTgotI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKLSNlbmRpZgotY2hhbmdlcXVvdGUoLClkbmwKLXR5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07Ci1jaGFuZ2VxdW90ZShbLF0pZG5sCi0nCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBndF9yZXZpc2lvbl90ZXN0X2NvZGU9Ci0gICAgICAgIGZpCi0gICAgICAgIGlmIHRlc3QgJGd0X2FwaV92ZXJzaW9uIC1nZSAyOyB0aGVuCi0gICAgICAgICAgZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGU9JyArICogbmdldHRleHQgKCIiLCAiIiwgMCknCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBndF9leHByZXNzaW9uX3Rlc3RfY29kZT0KLSAgICAgICAgZmkKLQotICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmNdLCBbJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjXSwKLSAgICAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KLSRndF9yZXZpc2lvbl90ZXN0X2NvZGUKLWV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsKLWV4dGVybiBpbnQgKl9ubF9kb21haW5fYmluZGluZ3M7XSwKLSAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKLXJldHVybiAqIGdldHRleHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2RvbWFpbl9iaW5kaW5nc10sCi0gICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcyJdLAotICAgICAgICAgICAgW2V2YWwgIiRndF9mdW5jX2dudWdldHRleHRfbGliYz1ubyJdKV0pCi0KLSAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMiOyB0ZXN0ICIkZ3RfdmFsIiAhPSAieWVzIjsgfTsgdGhlbgotICAgICAgICAgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KLSAgICAgICAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKLSAgICAgICAgICAgIEFNX0lDT05WX0xJTksKLSAgICAgICAgICBdKQotICAgICAgICAgIGRubCBTZWFyY2ggZm9yIGxpYmludGwgYW5kIGRlZmluZSBMSUJJTlRMLCBMVExJQklOVEwgYW5kIElOQ0lOVEwKLSAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCi0gICAgICAgICAgZG5sIGJlY2F1c2UgdGhhdCB3b3VsZCBhZGQgIi1saWNvbnYiIHRvIExJQklOVEwgYW5kIExUTElCSU5UTAotICAgICAgICAgIGRubCBldmVuIGlmIGxpYmljb252IGRvZXNuJ3QgZXhpc3QuCi0gICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKLSAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIEdOVSBnZXR0ZXh0IGluIGxpYmludGxdLAotICAgICAgICAgICAgWyRndF9mdW5jX2dudWdldHRleHRfbGliaW50bF0sCi0gICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRJTkNJTlRMIgotICAgICAgICAgICAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgotICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZG9lcyBub3QgZGVwZW5kIG9uIGxpYmljb252LgotICAgICAgICAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsaWJpbnRsLmg+Ci0kZ3RfcmV2aXNpb25fdGVzdF9jb2RlCi1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7Ci1leHRlcm4KLSNpZmRlZiBfX2NwbHVzcGx1cwotIkMiCi0jZW5kaWYKLWNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKik7XSwKLSAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOwotcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIildLAotICAgICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyJdLAotICAgICAgICAgICAgICBbZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPW5vIl0pCi0gICAgICAgICAgICBkbmwgTm93IHNlZSB3aGV0aGVyIGxpYmludGwgZXhpc3RzIGFuZCBkZXBlbmRzIG9uIGxpYmljb252LgotICAgICAgICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiAhPSB5ZXM7IH0gJiYgdGVzdCAtbiAiJExJQklDT05WIjsgdGhlbgotICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICAgICAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bGliaW50bC5oPgotJGd0X3JldmlzaW9uX3Rlc3RfY29kZQotZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOwotZXh0ZXJuCi0jaWZkZWYgX19jcGx1c3BsdXMKLSJDIgotI2VuZGlmCi1jb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopO10sCi0gICAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOwotcmV0dXJuICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgiIildLAotICAgICAgICAgICAgICAgW0xJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKLSAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiCi0gICAgICAgICAgICAgICAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyIKLSAgICAgICAgICAgICAgIF0pCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgotICAgICAgICAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQotICAgICAgICBmaQotCi0gICAgICAgIGRubCBJZiBhbiBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkIEdOVSBnZXR0ZXh0KCkgaXMgZm91bmQsCi0gICAgICAgIGRubCB1c2UgaXQuICBCdXQgaWYgdGhpcyBtYWNybyBpcyB1c2VkIGluIEdOVSBnZXR0ZXh0LCBhbmQgR05VCi0gICAgICAgIGRubCBnZXR0ZXh0IGlzIGFscmVhZHkgcHJlaW5zdGFsbGVkIGluIGxpYmludGwsIHdlIHVwZGF0ZSB0aGlzCi0gICAgICAgIGRubCBsaWJpbnRsLiAgKENmLiB0aGUgaW5zdGFsbCBydWxlIGluIGludGwvTWFrZWZpbGUuaW4uKQotICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0gXAotICAgICAgICAgICB8fCB7IHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcCi0gICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcCi0gICAgICAgICAgICAgICAgJiYgdGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4KLSAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBkbmwgUmVzZXQgdGhlIHZhbHVlcyBzZXQgYnkgc2VhcmNoaW5nIGZvciBsaWJpbnRsLgotICAgICAgICAgIExJQklOVEw9Ci0gICAgICAgICAgTFRMSUJJTlRMPQotICAgICAgICAgIElOQ0lOVEw9Ci0gICAgICAgIGZpCi0KLSAgICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCi0gICAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICAgICAgZG5sIEdOVSBnZXR0ZXh0IGlzIG5vdCBmb3VuZCBpbiB0aGUgQyBsaWJyYXJ5LgotICAgICAgICAgIGRubCBGYWxsIGJhY2sgb24gaW5jbHVkZWQgR05VIGdldHRleHQgbGlicmFyeS4KLSAgICAgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PXllcwotICAgICAgICBmaQotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgICAgZG5sIE1hcmsgYWN0aW9ucyB1c2VkIHRvIGdlbmVyYXRlIEdOVSBOTFMgbGlicmFyeS4KLSAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKLSAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEw9eWVzCi0gICAgICAgIExJQklOVEw9ImlmZWxzZShbJDNdLFtdLFwke3RvcF9idWlsZGRpcn0vaW50bCxbJDNdKS9saWJpbnRsLltdZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4W11hICRMSUJJQ09OViAkTElCVEhSRUFEIgotICAgICAgICBMVExJQklOVEw9ImlmZWxzZShbJDNdLFtdLFwke3RvcF9idWlsZGRpcn0vaW50bCxbJDNdKS9saWJpbnRsLltdZ3RfbGlidG9vbF9zdWZmaXhfcHJlZml4W11hICRMVExJQklDT05WICRMVExJQlRIUkVBRCIKLSAgICAgICAgTElCUz1gZWNobyAiICRMSUJTICIgfCBzZWQgLWUgJ3MvIC1saW50bCAvIC8nIC1lICdzL14gLy8nIC1lICdzLyAkLy8nYAotICAgICAgZmkKLQotICAgICAgQ0FUT0JKRVhUPQotICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCi0gICAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHRvIHVzZSBHTlUgZ2V0dGV4dCB0b29scy4KLSAgICAgICAgQ0FUT0JKRVhUPS5nbW8KLSAgICAgIGZpCi0gICAgXSkKLQotICAgIGlmIHRlc3QgLW4gIiRJTlRMX01BQ09TWF9MSUJTIjsgdGhlbgotICAgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCi0gICAgICAgICB8fCB0ZXN0ICIkbmxzX2N2X3VzZV9nbnVfZ2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgICBkbmwgU29tZSBleHRyYSBmbGFncyBhcmUgbmVlZGVkIGR1cmluZyBsaW5raW5nLgotICAgICAgICBMSUJJTlRMPSIkTElCSU5UTCAkSU5UTF9NQUNPU1hfTElCUyIKLSAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIgotICAgICAgZmkKLSAgICBmaQotCi0gICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCi0gICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInllcyI7IHRoZW4KLSAgICAgIEFDX0RFRklORShFTkFCTEVfTkxTLCAxLAotICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQotICAgaXMgcmVxdWVzdGVkLl0pCi0gICAgZWxzZQotICAgICAgVVNFX05MUz1ubwotICAgIGZpCi0gIGZpCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSBOTFNdKQotICBBQ19NU0dfUkVTVUxUKFskVVNFX05MU10pCi0gIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGVyZSB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBjb21lcyBmcm9tXSkKLSAgICBpZiB0ZXN0ICIkZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH07IHRoZW4KLSAgICAgICAgZ3Rfc291cmNlPSJleHRlcm5hbCBsaWJpbnRsIgotICAgICAgZWxzZQotICAgICAgICBndF9zb3VyY2U9ImxpYmMiCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCi0gICAgZmkKLSAgICBBQ19NU0dfUkVTVUxUKFskZ3Rfc291cmNlXSkKLSAgZmkKLQotICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgotCi0gICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIjsgdGhlbgotICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuCi0gICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKLSAgICAgICAgQUNfTVNHX1JFU1VMVChbJExJQklOVExdKQotICAgICAgICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJTlRMXSkKLSAgICAgIGZpCi0KLSAgICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBwYWNrYWdlcyBtYXkgYmUgdXNpbmcgdGhpcy4KLSAgICAgIEFDX0RFRklORShIQVZFX0dFVFRFWFQsIDEsCi0gICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLl0pCi0gICAgICBBQ19ERUZJTkUoSEFWRV9EQ0dFVFRFWFQsIDEsCi0gICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKLSAgICBmaQotCi0gICAgZG5sIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgcG8vIGRpcmVjdG9yeS4KLSAgICBQT1NVQj1wbwotICBmaQotCi0gIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKLSAgICBkbmwgSWYgdGhpcyBpcyB1c2VkIGluIEdOVSBnZXR0ZXh0IHdlIGhhdmUgdG8gc2V0IEJVSUxEX0lOQ0xVREVEX0xJQklOVEwKLSAgICBkbmwgdG8gJ3llcycgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXN0c3VpdGUgcmVxdWlyZXMgaXQuCi0gICAgaWYgdGVzdCAiJFBBQ0tBR0UiID0gZ2V0dGV4dC1ydW50aW1lIHx8IHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtdG9vbHM7IHRoZW4KLSAgICAgIEJVSUxEX0lOQ0xVREVEX0xJQklOVEw9eWVzCi0gICAgZmkKLQotICAgIGRubCBNYWtlIGFsbCB2YXJpYWJsZXMgd2UgdXNlIGtub3duIHRvIGF1dG9jb25mLgotICAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCi0gICAgQUNfU1VCU1QoVVNFX0lOQ0xVREVEX0xJQklOVEwpCi0gICAgQUNfU1VCU1QoQ0FUT0JKRVhUKQotCi0gICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIGNvbmZpZ3VyZS5pbnMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gICAgbmxzX2N2X2hlYWRlcl9pbnRsPQotICAgIG5sc19jdl9oZWFkZXJfbGliZ3Q9Ci0KLSAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgotICAgIERBVEFESVJOQU1FPXNoYXJlCi0gICAgQUNfU1VCU1QoREFUQURJUk5BTUUpCi0KLSAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgotICAgIElOU1RPQkpFWFQ9Lm1vCi0gICAgQUNfU1VCU1QoSU5TVE9CSkVYVCkKLQotICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gICAgR0VOQ0FUPWdlbmNhdAotICAgIEFDX1NVQlNUKEdFTkNBVCkKLQotICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gICAgSU5UTE9CSlM9Ci0gICAgaWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9IHllczsgdGhlbgotICAgICAgSU5UTE9CSlM9IlwkKEdFVFRPQkpTKSIKLSAgICBmaQotICAgIEFDX1NVQlNUKElOVExPQkpTKQotCi0gICAgZG5sIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgaWYgdGhlIHN1cnJvdW5kaW5nIHBhY2thZ2Ugd2lzaGVzIGl0LgotICAgIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYPWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeAotICAgIEFDX1NVQlNUKElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYKQotICBdKQotCi0gIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCi0gIElOVExMSUJTPSIkTElCSU5UTCIKLSAgQUNfU1VCU1QoSU5UTExJQlMpCi0KLSAgZG5sIE1ha2UgYWxsIGRvY3VtZW50ZWQgdmFyaWFibGVzIGtub3duIHRvIGF1dG9jb25mLgotICBBQ19TVUJTVChMSUJJTlRMKQotICBBQ19TVUJTVChMVExJQklOVEwpCi0gIEFDX1NVQlNUKFBPU1VCKQotXSkKLQotCi1kbmwgZ3RfTkVFRFNfSU5JVCBlbnN1cmVzIHRoYXQgdGhlIGd0X25lZWRzIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLgotbTRfZGVmaW5lKFtndF9ORUVEU19JTklUXSwKLVsKLSAgbTRfZGl2ZXJ0X3RleHQoW0RFRkFVTFRTXSwgW2d0X25lZWRzPV0pCi0gIG00X2RlZmluZShbZ3RfTkVFRFNfSU5JVF0sIFtdKQotXSkKLQotCi1kbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX05FRUQoW05FRURTWU1CT0xdKQotQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX05FRURdLAotWwotICBtNF9kaXZlcnRfdGV4dChbSU5JVF9QUkVQQVJFXSwgW2d0X25lZWRzPSIkZ3RfbmVlZHMgJDEiXSkKLV0pCi0KLQotZG5sIFVzYWdlOiBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFtnZXR0ZXh0LXZlcnNpb25dKQotQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKZGlmZiAtLWdpdCBhL200L2dsaWIubTQgYi9tNC9nbGliLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2M2MzJiLi4wMDAwMDAwCi0tLSBhL200L2dsaWIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotIyBDb25maWd1cmUgcGF0aHMgZm9yIEdMSUIKLSMgT3dlbiBUYXlsb3IgICAgIDk3LTExLTMKLQotZG5sIEFNX1BBVEhfR0xJQihbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkQgWywgTU9EVUxFU11dXV0pCi1kbmwgVGVzdCBmb3IgR0xJQiwgYW5kIGRlZmluZSBHTElCX0NGTEFHUyBhbmQgR0xJQl9MSUJTLCBpZiAiZ21vZHVsZSIgb3IgCi1kbmwgZ3RocmVhZCBpcyBzcGVjaWZpZWQgaW4gTU9EVUxFUywgcGFzcyB0byBnbGliLWNvbmZpZwotZG5sCi1BQ19ERUZVTihbQU1fUEFUSF9HTElCXSwKLVtkbmwgCi1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBnbGliLWNvbmZpZyBzY3JpcHQKLWRubAotQUNfQVJHX1dJVEgoZ2xpYi1wcmVmaXgsWyAgLS13aXRoLWdsaWItcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKLSAgICAgICAgICAgIGdsaWJfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19wcmVmaXg9IiIpCi1BQ19BUkdfV0lUSChnbGliLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1nbGliLWV4ZWMtcHJlZml4PVBGWCBFeGVjIHByZWZpeCB3aGVyZSBHTElCIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKLSAgICAgICAgICAgIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIGdsaWJfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQotQUNfQVJHX0VOQUJMRShnbGlidGVzdCwgWyAgLS1kaXNhYmxlLWdsaWJ0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBHTElCIHByb2dyYW1dLAotCQkgICAgLCBlbmFibGVfZ2xpYnRlc3Q9eWVzKQotCi0gIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCAhPSB4IDsgdGhlbgotICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCIKLSAgICAgaWYgdGVzdCB4JHtHTElCX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCi0gICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeC9iaW4vZ2xpYi1jb25maWcKLSAgICAgZmkKLSAgZmkKLSAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgotICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyAtLXByZWZpeD0kZ2xpYl9jb25maWdfcHJlZml4IgotICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLSAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX3ByZWZpeC9iaW4vZ2xpYi1jb25maWcKLSAgICAgZmkKLSAgZmkKLQotICBmb3IgbW9kdWxlIGluIC4gJDQKLSAgZG8KLSAgICAgIGNhc2UgIiRtb2R1bGUiIGluCi0gICAgICAgICBnbW9kdWxlKSAKLSAgICAgICAgICAgICBnbGliX2NvbmZpZ19hcmdzPSIkZ2xpYl9jb25maWdfYXJncyBnbW9kdWxlIgotICAgICAgICAgOzsKLSAgICAgICAgIGd0aHJlYWQpIAotICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGd0aHJlYWQiCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICBkb25lCi0KLSAgQUNfUEFUSF9QUk9HKEdMSUJfQ09ORklHLCBnbGliLWNvbmZpZywgbm8pCi0gIG1pbl9nbGliX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjk5LjcsJDEpCi0gIEFDX01TR19DSEVDS0lORyhmb3IgR0xJQiAtIHZlcnNpb24gPj0gJG1pbl9nbGliX3ZlcnNpb24pCi0gIG5vX2dsaWI9IiIKLSAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgbm9fZ2xpYj15ZXMKLSAgZWxzZQotICAgIEdMSUJfQ0ZMQUdTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCi0gICAgR0xJQl9MSUJTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1saWJzYAotICAgIGdsaWJfY29uZmlnX21ham9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAotICAgIGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAotICAgIGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAotICAgIGlmIHRlc3QgIngkZW5hYmxlX2dsaWJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCi0gICAgICBMSUJTPSIkR0xJQl9MSUJTICRMSUJTIgotZG5sCi1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgR0xJQiBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKLWRubCBjaGVja3MgdGhlIHJlc3VsdHMgb2YgZ2xpYi1jb25maWcgdG8gc29tZSBleHRlbnQKLWRubAotICAgICAgcm0gLWYgY29uZi5nbGlidGVzdAotICAgICAgQUNfVFJZX1JVTihbCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWludCAKLW1haW4gKCkKLXsKLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87Ci0gIGNoYXIgKnRtcF92ZXJzaW9uOwotCi0gIHN5c3RlbSAoInRvdWNoIGNvbmYuZ2xpYnRlc3QiKTsKLQotICAvKiBIUC9VWCA5ICglQCMhKSB3cml0ZXMgdG8gc3NjYW5mIHN0cmluZ3MgKi8KLSAgdG1wX3ZlcnNpb24gPSBnX3N0cmR1cCgiJG1pbl9nbGliX3ZlcnNpb24iKTsKLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgewotICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2dsaWJfdmVyc2lvbiIpOwotICAgICBleGl0KDEpOwotICAgfQotCi0gIGlmICgoZ2xpYl9tYWpvcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAotICAgICAgKGdsaWJfbWlub3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbikgfHwKLSAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb24pKQotICAgIHsKLSAgICAgIHByaW50ZigiXG4qKiogJ2dsaWItY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCBHTElCICglZC4lZC4lZClcbiIsIAotICAgICAgICAgICAgICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb24sCi0gICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7Ci0gICAgICBwcmludGYgKCIqKiogd2FzIGZvdW5kISBJZiBnbGliLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKLSAgICAgIHByaW50ZiAoIioqKiB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uIG9mIEdMSUIuIFlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGZpeCB0aGUgZXJyb3JcbiIpOwotICAgICAgcHJpbnRmKCIqKiogYnkgbW9kaWZ5aW5nIHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGJ5IGVkaXRpbmdcbiIpOwotICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOwotICAgICAgcHJpbnRmKCIqKiogcmVxdWlyZWQgb24geW91ciBzeXN0ZW0uXG4iKTsKLSAgICAgIHByaW50ZigiKioqIElmIGdsaWItY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHTElCX0NPTkZJR1xuIik7Ci0gICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7Ci0gICAgICBwcmludGYoIioqKiBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOwotICAgIH0gCi0gIGVsc2UgaWYgKChnbGliX21ham9yX3ZlcnNpb24gIT0gR0xJQl9NQUpPUl9WRVJTSU9OKSB8fAotCSAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gR0xJQl9NSU5PUl9WRVJTSU9OKSB8fAotICAgICAgICAgICAoZ2xpYl9taWNyb192ZXJzaW9uICE9IEdMSUJfTUlDUk9fVkVSU0lPTikpCi0gICAgewotICAgICAgcHJpbnRmKCIqKiogR0xJQiBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKLQkgICAgIEdMSUJfTUFKT1JfVkVSU0lPTiwgR0xJQl9NSU5PUl9WRVJTSU9OLCBHTElCX01JQ1JPX1ZFUlNJT04pOwotICAgICAgcHJpbnRmKCIqKiogbGlicmFyeSAodmVyc2lvbiAlZC4lZC4lZClcbiIsCi0JICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAotICAgICAgICAoKGdsaWJfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGdsaWJfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKLSAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmIChnbGliX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgfQotICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgR0xJQiAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCi0gICAgICAgICAgICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKLSAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdMSUIgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAotCSAgICAgICBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgICAgICAgcHJpbnRmKCIqKiogR0xJQiBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLmd0ay5vcmcuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKipcbiIpOwotICAgICAgICBwcmludGYoIioqKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBhIHN1ZmZpY2llbnRseSBuZXcgdmVyc2lvbiwgdGhpcyBlcnJvclxuIik7Ci0gICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGdsaWItY29uZmlnIHNoZWxsIHNjcmlwdCBpc1xuIik7Ci0gICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7Ci0gICAgICAgIHByaW50ZigiKioqIG9mIEdMSUIsIGJ1dCB5b3UgY2FuIGFsc28gc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB0byBwb2ludCB0byB0aGVcbiIpOwotICAgICAgICBwcmludGYoIioqKiBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOwotICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOwotICAgICAgICBwcmludGYoIioqKiBzbyB0aGF0IHRoZSBjb3JyZWN0IGxpYnJhcmllcyBhcmUgZm91bmQgYXQgcnVuLXRpbWUpKVxuIik7Ci0gICAgICB9Ci0gICAgfQotICByZXR1cm4gMTsKLX0KLV0sLCBub19nbGliPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCi0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAieCRub19nbGliIiA9IHggOyB0aGVuCi0gICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCi0gIGVsc2UKLSAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgICAgZWNobyAiKioqIFRoZSBnbGliLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IEdMSUIgY291bGQgbm90IGJlIGZvdW5kIgotICAgICAgIGVjaG8gIioqKiBJZiBHTElCIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKLSAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIGdsaWItY29uZmlnLiIKLSAgICAgZWxzZQotICAgICAgIGlmIHRlc3QgLWYgY29uZi5nbGlidGVzdCA7IHRoZW4KLSAgICAgICAgOgotICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBHTElCIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgotICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkR0xJQl9DRkxBR1MiCi0gICAgICAgICAgTElCUz0iJExJQlMgJEdMSUJfTElCUyIKLSAgICAgICAgICBBQ19UUllfTElOSyhbCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1dLCAgICAgIFsgcmV0dXJuICgoZ2xpYl9tYWpvcl92ZXJzaW9uKSB8fCAoZ2xpYl9taW5vcl92ZXJzaW9uKSB8fCAoZ2xpYl9taWNyb192ZXJzaW9uKSk7IF0sCi0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgotICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR0xJQiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKLSAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBHTElCLiBJZiBpdCBpcyBub3QgZmluZGluZyBHTElCLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKLSAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgotICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKLQkgIGVjaG8gIioqKiIKLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCi0gICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIgotICAgICAgICAgIGVjaG8gIioqKiIKLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCi0gICAgICAgICAgZWNobyAiKioqIGNhbWUgd2l0aCB0aGUgc3lzdGVtIHdpdGggdGhlIGNvbW1hbmQiCi0gICAgICAgICAgZWNobyAiKioqIgotICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAotICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCi0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIEdMSUIgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBHTElCIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgotICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBnbGliLWNvbmZpZyBzY3JpcHQ6ICRHTElCX0NPTkZJRyIgXSkKLSAgICAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICAgICAgIGZpCi0gICAgIGZpCi0gICAgIEdMSUJfQ0ZMQUdTPSIiCi0gICAgIEdMSUJfTElCUz0iIgotICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotICBmaQotICBBQ19TVUJTVChHTElCX0NGTEFHUykKLSAgQUNfU1VCU1QoR0xJQl9MSUJTKQotICBybSAtZiBjb25mLmdsaWJ0ZXN0Ci1dKQpkaWZmIC0tZ2l0IGEvbTQvZ2xpYmMyMS5tNCBiL200L2dsaWJjMjEubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NWZkOTguLjAwMDAwMDAKLS0tIGEvbTQvZ2xpYmMyMS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgZ2xpYmMyMS5tNCBzZXJpYWwgMwotZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGVzdCBmb3IgdGhlIEdOVSBDIExpYnJhcnksIHZlcnNpb24gMi4xIG9yIG5ld2VyLgotIyBGcm9tIEJydW5vIEhhaWJsZS4KLQotQUNfREVGVU4oW2dsX0dMSUJDMjFdLAotICBbCi0gICAgQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgMi4xIG9yIG5ld2VyLAotICAgICAgYWNfY3ZfZ251X2xpYnJhcnlfMl8xLAotICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAotCVsKLSNpbmNsdWRlIDxmZWF0dXJlcy5oPgotI2lmZGVmIF9fR05VX0xJQlJBUllfXwotICNpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQotICBMdWNreSBHTlUgdXNlcgotICNlbmRpZgotI2VuZGlmCi0JXSwKLQlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAotCWFjX2N2X2dudV9saWJyYXJ5XzJfMT1ubykKLSAgICAgIF0KLSAgICApCi0gICAgQUNfU1VCU1QoR0xJQkMyMSkKLSAgICBHTElCQzIxPSIkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIgotICBdCi0pCmRpZmYgLS1naXQgYS9tNC9nc3QtYWxzYS5tNCBiL200L2dzdC1hbHNhLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTQxZDA2Li4wMDAwMDAwCi0tLSBhL200L2dzdC1hbHNhLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLWRubCBDb25maWd1cmUgUGF0aHMgZm9yIEFsc2EKLWRubCBTb21lIG1vZGlmaWNhdGlvbnMgYnkgUmljaGFyZCBCb3VsdG9uIDxyaWNoYXJkLWFsc2FAdGFydGFydXMub3JnPgotZG5sIENocmlzdG9waGVyIExhbnNkb3duIDxsYW5zZG9jdEBjcy5hbGZyZWQuZWR1PgotZG5sIEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KLWRubCBMYXN0IG1vZGlmaWNhdGlvbjogYWxzYS5tNCx2IDEuMjMgMjAwNC8wMS8xNiAxODoxNDoyMiB0aXdhaSBFeHAKLWRubCBBTV9QQVRIX0FMU0EoW01JTklNVU0tVkVSU0lPTiBbLCBBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKLWRubCBUZXN0IGZvciBsaWJhc291bmQsIGFuZCBkZWZpbmUgQUxTQV9DRkxBR1MgYW5kIEFMU0FfTElCUyBhcyBhcHByb3ByaWF0ZS4KLWRubCBlbmFibGVzIGFyZ3VtZW50cyAtLXdpdGgtYWxzYS1wcmVmaXg9Ci1kbmwgICAgICAgICAgICAgICAgICAgLS13aXRoLWFsc2EtZW5jLXByZWZpeD0KLWRubCAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtYWxzYXRlc3QKLWRubAotZG5sIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgQUNUSU9OX0lGX05PVF9GT1VORCBpcyBub3Qgc3BlY2lmaWVkLAotZG5sIGFuZCB0aGUgYWxzYSBsaWJyYXJpZXMgYXJlIG5vdCBmb3VuZCwgYSBmYXRhbCBBQ19NU0dfRVJST1IoKSB3aWxsIHJlc3VsdC4KLWRubAotQUNfREVGVU4oW0FNX1BBVEhfQUxTQV0sCi1bZG5sIFNhdmUgdGhlIG9yaWdpbmFsIENGTEFHUywgTERGTEFHUywgYW5kIExJQlMKLWFsc2Ffc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi1hbHNhX3NhdmVfTERGTEFHUz0iJExERkxBR1MiCi1hbHNhX3NhdmVfTElCUz0iJExJQlMiCi1hbHNhX2ZvdW5kPXllcwotCi1kbmwKLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZvciBhbHNhCi1kbmwKLUFDX0FSR19XSVRIKGFsc2EtcHJlZml4LAotICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWFsc2EtcHJlZml4PVBGWF0sCi0gICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgQWxzYSBsaWJyYXJ5IGlzIGluc3RhbGxlZChvcHRpb25hbCldKSwKLSAgW2Fsc2FfcHJlZml4PSIkd2l0aHZhbCJdLCBbYWxzYV9wcmVmaXg9IiJdKQotCi1BQ19BUkdfV0lUSChhbHNhLWluYy1wcmVmaXgsCi0gIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtYWxzYS1pbmMtcHJlZml4PVBGWF0sCi0gICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgaW5jbHVkZSBsaWJyYXJpZXMgYXJlIChvcHRpb25hbCldKSwKLSAgW2Fsc2FfaW5jX3ByZWZpeD0iJHdpdGh2YWwiXSwgW2Fsc2FfaW5jX3ByZWZpeD0iIl0pCi0KLWRubCBGSVhNRTogdGhpcyBpcyBub3QgeWV0IGltcGxlbWVudGVkCi1kbmwgQUNfQVJHX0VOQUJMRShhbHNhdGVzdCwKLWRubCAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hbHNhdGVzdF0sCi1kbmwgICAgICAgICAgICAgICAgIFtkbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgQWxzYSBwcm9ncmFtXSwKLWRubCAgICAgICAgICAgICAgICAgW2VuYWJsZV9hbHNhdGVzdD1ub10sIFtlbmFibGVfYWxzYXRlc3Q9eWVzXSkKLQotZG5sIEFkZCBhbnkgc3BlY2lhbCBpbmNsdWRlIGRpcmVjdG9yaWVzCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIEFMU0EgQ0ZMQUdTKQotaWYgdGVzdCAiJGFsc2FfaW5jX3ByZWZpeCIgIT0gIiIgOyB0aGVuCi0JQUxTQV9DRkxBR1M9IiRBTFNBX0NGTEFHUyAtSSRhbHNhX2luY19wcmVmaXgiCi0JQ0ZMQUdTPSIkQ0ZMQUdTIC1JJGFsc2FfaW5jX3ByZWZpeCIKLWZpCi1BQ19NU0dfUkVTVUxUKCRBTFNBX0NGTEFHUykKLQotZG5sIGFkZCBhbnkgc3BlY2lhbCBsaWIgZGlycwotQUNfTVNHX0NIRUNLSU5HKGZvciBBTFNBIExERkxBR1MpCi1pZiB0ZXN0ICIkYWxzYV9wcmVmaXgiICE9ICIiIDsgdGhlbgotCUFMU0FfTElCUz0iJEFMU0FfTElCUyAtTCRhbHNhX3ByZWZpeCIKLQlMREZMQUdTPSIkTERGTEFHUyAkQUxTQV9MSUJTIgotZmkKLQotZG5sIGFkZCB0aGUgYWxzYSBsaWJyYXJ5Ci1BTFNBX0xJQlM9IiRBTFNBX0xJQlMgLWxhc291bmQgLWxtIC1sZGwgLWxwdGhyZWFkIgotTElCUz1gZWNobyAkTElCUyB8IHNlZCAncy8tbG0vLydgCi1MSUJTPWBlY2hvICRMSUJTIHwgc2VkICdzLy1sZGwvLydgCi1MSUJTPWBlY2hvICRMSUJTIHwgc2VkICdzLy1scHRocmVhZC8vJ2AKLUxJQlM9YGVjaG8gJExJQlMgfCBzZWQgJ3MvICAvLydgCi1MSUJTPSIkQUxTQV9MSUJTICRMSUJTIgotQUNfTVNHX1JFU1VMVCgkQUxTQV9MSUJTKQotCi1kbmwgQ2hlY2sgZm9yIGEgd29ya2luZyB2ZXJzaW9uIG9mIGxpYmFzb3VuZCB0aGF0IGlzIG9mIHRoZSByaWdodCB2ZXJzaW9uLgotbWluX2Fsc2FfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMS4xLCQxKQotQUNfTVNHX0NIRUNLSU5HKGZvciBsaWJhc291bmQgaGVhZGVycyB2ZXJzaW9uID49ICRtaW5fYWxzYV92ZXJzaW9uKQotbm9fYWxzYT0iIgotICAgIGFsc2FfbWluX21ham9yX3ZlcnNpb249YGVjaG8gJG1pbl9hbHNhX3ZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMS8nYAotICAgIGFsc2FfbWluX21pbm9yX3ZlcnNpb249YGVjaG8gJG1pbl9hbHNhX3ZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAotICAgIGFsc2FfbWluX21pY3JvX3ZlcnNpb249YGVjaG8gJG1pbl9hbHNhX3ZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAotCi1BQ19MQU5HX1NBVkUKLUFDX0xBTkdfQwotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+Ci1dLCBbCi12b2lkIG1haW4odm9pZCkKLXsKLS8qIGVuc3VyZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0jaWYgIWRlZmluZWQoU05EX0xJQl9NQUpPUikgJiYgZGVmaW5lZChTT1VORExJQl9WRVJTSU9OX01BSk9SKQotI2RlZmluZSBTTkRfTElCX01BSk9SIFNPVU5ETElCX1ZFUlNJT05fTUFKT1IKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNORF9MSUJfTUlOT1IpICYmIGRlZmluZWQoU09VTkRMSUJfVkVSU0lPTl9NSU5PUikKLSNkZWZpbmUgU05EX0xJQl9NSU5PUiBTT1VORExJQl9WRVJTSU9OX01JTk9SCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTTkRfTElCX1NVQk1JTk9SKSAmJiBkZWZpbmVkKFNPVU5ETElCX1ZFUlNJT05fU1VCTUlOT1IpCi0jZGVmaW5lIFNORF9MSUJfU1VCTUlOT1IgU09VTkRMSUJfVkVSU0lPTl9TVUJNSU5PUgotI2VuZGlmCi0KLSMgIGlmKFNORF9MSUJfTUFKT1IgPiAkYWxzYV9taW5fbWFqb3JfdmVyc2lvbikKLSAgZXhpdCgwKTsKLSMgIGVsc2UKLSMgICAgaWYoU05EX0xJQl9NQUpPUiA8ICRhbHNhX21pbl9tYWpvcl92ZXJzaW9uKQotIyAgICAgICBlcnJvciBub3QgcHJlc2VudAotIyAgICBlbmRpZgotCi0jICAgaWYoU05EX0xJQl9NSU5PUiA+ICRhbHNhX21pbl9taW5vcl92ZXJzaW9uKQotICBleGl0KDApOwotIyAgIGVsc2UKLSMgICAgIGlmKFNORF9MSUJfTUlOT1IgPCAkYWxzYV9taW5fbWlub3JfdmVyc2lvbikKLSMgICAgICAgICAgZXJyb3Igbm90IHByZXNlbnQKLSMgICAgICBlbmRpZgotCi0jICAgICAgaWYoU05EX0xJQl9TVUJNSU5PUiA8ICRhbHNhX21pbl9taWNyb192ZXJzaW9uKQotIyAgICAgICAgZXJyb3Igbm90IHByZXNlbnQKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLWV4aXQoMCk7Ci19Ci1dLAotICBbQUNfTVNHX1JFU1VMVChmb3VuZC4pXSwKLSAgW0FDX01TR19SRVNVTFQobm90IHByZXNlbnQuKQotICAgaWZlbHNlKFskM10sICwgW0FDX01TR19FUlJPUihTdWZmaWNpZW50bHkgbmV3IHZlcnNpb24gb2YgbGliYXNvdW5kIG5vdCBmb3VuZC4pXSkKLSAgIGFsc2FfZm91bmQ9bm9dCi0pCi1BQ19MQU5HX1JFU1RPUkUKLQotZG5sIE5vdyB0aGF0IHdlIGtub3cgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCB2ZXJzaW9uLCBsZXQncyBzZWUgaWYgd2UgaGF2ZSB0aGUgbGlicmFyeSBhbmQgbm90IGp1c3QgdGhlIGhlYWRlcnMuCi1pZiB0ZXN0ICJ4JGVuYWJsZV9hbHNhdGVzdCIgPSAieHllcyI7IHRoZW4KLUFDX0NIRUNLX0xJQihbYXNvdW5kXSwgW3NuZF9jdGxfb3Blbl0sLAotCVtpZmVsc2UoWyQzXSwgLCBbQUNfTVNHX0VSUk9SKE5vIGxpbmthYmxlIGxpYmFzb3VuZCB3YXMgZm91bmQuKV0pCi0JIGFsc2FfZm91bmQ9bm9dCi0pCi1maQotCi1pZiB0ZXN0ICJ4JGFsc2FfZm91bmQiID0gInh5ZXMiIDsgdGhlbgotICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKLSAgIExJQlM9YGVjaG8gJExJQlMgfCBzZWQgJ3MvLWxhc291bmQvL2cnYAotICAgTElCUz1gZWNobyAkTElCUyB8IHNlZCAncy8gIC8vJ2AKLSAgIExJQlM9Ii1sYXNvdW5kICRMSUJTIgotZmkKLWlmIHRlc3QgIngkYWxzYV9mb3VuZCIgPSAieG5vIiA7IHRoZW4KLSAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCi0gICBDRkxBR1M9IiRhbHNhX3NhdmVfQ0ZMQUdTIgotICAgTERGTEFHUz0iJGFsc2Ffc2F2ZV9MREZMQUdTIgotICAgTElCUz0iJGFsc2Ffc2F2ZV9MSUJTIgotICAgQUxTQV9DRkxBR1M9IiIKLSAgIEFMU0FfTElCUz0iIgotZmkKLQotZG5sIFRoYXQgc2hvdWxkIGJlIGl0LiAgTm93IGp1c3QgZXhwb3J0IG91dCBzeW1ib2xzOgotQUNfU1VCU1QoQUxTQV9DRkxBR1MpCi1BQ19TVUJTVChBTFNBX0xJQlMpCi1dKQotCmRpZmYgLS1naXQgYS9tNC9nc3QtYXJ0c2MubTQgYi9tNC9nc3QtYXJ0c2MubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NTk5NjAuLjAwMDAwMDAKLS0tIGEvbTQvZ3N0LWFydHNjLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotZG5sIFBlcmZvcm0gYSBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIEFSVFNDCi1kbmwgUmljaGFyZCBCb3VsdG9uIDxyaWNoYXJkLWFsc2FAdGFydGFydXMub3JnPgotZG5sIExhc3QgbW9kaWZpY2F0aW9uOiAyNi8wNi8yMDAxCi1kbmwgR1NUX0NIRUNLX0FSVFNDKCkKLWRubAotZG5sIFRoaXMgY2hlY2sgd2FzIHdyaXR0ZW4gZm9yIEdTdHJlYW1lcjogaXQgc2hvdWxkIGJlIHJlbmFtZWQgYW5kIGNoZWNrZWQKLWRubCBmb3IgcG9ydGFiaWxpdHkgaWYgeW91IGRlY2lkZSB0byB1c2UgaXQgZWxzZXdoZXJlLgotZG5sCi1BQ19ERUZVTihbR1NUX0NIRUNLX0FSVFNDXSwKLVsgCi0gIEFDX1BBVEhfUFJPRyhBUlRTQ19DT05GSUcsIGFydHNjLWNvbmZpZywgbm8pCi0gIGlmIHRlc3QgIngkQVJUU0NfQ09ORklHIiA9ICJ4bm8iOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW0NvdWxkbid0IGZpbmQgYXJ0c2MtY29uZmlnXSkKLSAgICBIQVZFX0FSVFNDPW5vCi0gICAgQVJUU0NfTElCUz0KLSAgICBBUlRTQ19DRkxBR1M9Ci0gIGVsc2UKLSAgICBBUlRTQ19MSUJTPWBhcnRzYy1jb25maWcgLS1saWJzYAotICAgIEFSVFNDX0NGTEFHUz1gYXJ0c2MtY29uZmlnIC0tY2ZsYWdzYAotICAgIGRubCBBQ19DSEVDS19IRUFERVIgdXNlcyBDUFBGTEFHUywgYnV0IG5vdCBDRkxBR1MuICAKLSAgICBkbmwgRklYTUU6IEVuc3VyZSBvbmx5IHN1aXRhYmxlIGZsYWdzIHJlc3VsdCBmcm9tIGFydHNjLWNvbmZpZyAtLWNmbGFncwotICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJEFSVFNDX0NGTEFHUyIKLSAgICBBQ19DSEVDS19IRUFERVIoYXJ0c2MuaCwgSEFWRV9BUlRTQz15ZXMsIEhBVkVfQVJUU0M9bm8pCi0gIGZpCi0gIEFDX1NVQlNUKEFSVFNDX0xJQlMpCi0gIEFDX1NVQlNUKEFSVFNDX0NGTEFHUykgCi1dKQotCmRpZmYgLS1naXQgYS9tNC9nc3QtZmlvbnJlYWQubTQgYi9tNC9nc3QtZmlvbnJlYWQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwM2FhNDUuLjAwMDAwMDAKLS0tIGEvbTQvZ3N0LWZpb25yZWFkLm00CisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotQUNfREVGVU4oW0dTVF9DSEVDS19GSU9OUkVBRF0sIFsKLQotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEZJT05SRUFEIGluIHN5cy9pb2N0bC5oKQotICBBQ19DQUNIRV9WQUwoX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfaW9jdGwsIFsKLSAgICBBQ19UUllfQ09NUElMRShbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci1dLCBbCi1pbnQgeCA9IEZJT05SRUFEOwotaWYgKCB4ICkKLSAgcmV0dXJuIDA7Ci0gICAgXSwgX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfaW9jdGw9InllcyIsX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfaW9jdGw9Im5vIikKLSAgXSkKLQotICBBQ19NU0dfUkVTVUxUKCRfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19pb2N0bCkKLQotICBpZiB0ZXN0ICIkX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfaW9jdGwiID0gInllcyI7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0hBVkVfRklPTlJFQURfSU5fU1lTX0lPQ1RMXSwgMSwgW0ZJT05SRUFEIGlvY3RsIGZvdW5kIGluIHN5cy9pb2NsdC5oXSkKLQotICBlbHNlCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEZJT05SRUFEIGluIHN5cy9maWxpby5oKQotICAgIEFDX0NBQ0hFX1ZBTChfY3ZfZ3N0X2Zpb25yZWFkX2luX3N5c19maWxpbywgWwotICAgICAgQUNfVFJZX0NPTVBJTEUoWwotICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gICNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KLSAgXSwgWwotICBpbnQgeCA9IEZJT05SRUFEOwotICBpZiAoIHggKQotICAgIHJldHVybiAwOwotICAgICAgXSwgX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW89InllcyIsX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW89Im5vIikKLSAgICBdKQotCi0gICAgQUNfTVNHX1JFU1VMVCgkX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW8pCi0KLSAgICBpZiB0ZXN0ICIkX2N2X2dzdF9maW9ucmVhZF9pbl9zeXNfZmlsaW8iID0gInllcyI7IHRoZW4KLSAgICAgIEFDX0RFRklORShbSEFWRV9GSU9OUkVBRF9JTl9TWVNfRklMSU9dLCAxLCBbRklPTlJFQUQgaW9jdGwgZm91bmQgaW4gc3lzL2ZpbGlvLmhdKQotICAgIGZpCi0KLSAgZmkKLQotXSkKZGlmZiAtLWdpdCBhL200L2dzdC1pdm9yYmlzLm00IGIvbTQvZ3N0LWl2b3JiaXMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMzViYmIuLjAwMDAwMDAKLS0tIGEvbTQvZ3N0LWl2b3JiaXMubTQKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0jIENvbmZpZ3VyZSBwYXRocyBmb3IgVHJlbW9yCi0KLWRubCBYSVBIX1BBVEhfSVZPUkJJUyhbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBUZXN0IGZvciBsaWJpdm9yYmlzLCBhbmQgZGVmaW5lIElWT1JCSVNfQ0ZMQUdTIGFuZCBJVk9SQklTX0xJQlMKLWRubAotQUNfREVGVU4oW1hJUEhfUEFUSF9JVk9SQklTXSwKLVtkbmwgCi1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcwotZG5sCi1BQ19BUkdfV0lUSChpdm9yYmlzLFsgIC0td2l0aC1pdm9yYmlzPVBGWCAgIFByZWZpeCB3aGVyZSBsaWJpdm9yYmlzIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwgaXZvcmJpc19wcmVmaXg9IiR3aXRodmFsIiwgaXZvcmJpc19wcmVmaXg9IiIpCi1BQ19BUkdfV0lUSChpdm9yYmlzLWxpYnJhcmllcyxbICAtLXdpdGgtaXZvcmJpcy1saWJyYXJpZXM9RElSICAgRGlyZWN0b3J5IHdoZXJlIGxpYml2b3JiaXMgbGlicmFyeSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIGl2b3JiaXNfbGlicmFyaWVzPSIkd2l0aHZhbCIsIGl2b3JiaXNfbGlicmFyaWVzPSIiKQotQUNfQVJHX1dJVEgoaXZvcmJpcy1pbmNsdWRlcyxbICAtLXdpdGgtaXZvcmJpcy1pbmNsdWRlcz1ESVIgICBEaXJlY3Rvcnkgd2hlcmUgbGliaXZvcmJpcyBoZWFkZXIgZmlsZXMgYXJlIGluc3RhbGxlZCAob3B0aW9uYWwpXSwgaXZvcmJpc19pbmNsdWRlcz0iJHdpdGh2YWwiLCBpdm9yYmlzX2luY2x1ZGVzPSIiKQotQUNfQVJHX0VOQUJMRShpdm9yYmlzdGVzdCwgWyAgLS1kaXNhYmxlLWl2b3JiaXN0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBJdm9yYmlzIHByb2dyYW1dLCwgZW5hYmxlX2l2b3JiaXN0ZXN0PXllcykKLQotICBpZiB0ZXN0ICJ4JGl2b3JiaXNfbGlicmFyaWVzIiAhPSAieCIgOyB0aGVuCi0gICAgSVZPUkJJU19MSUJTPSItTCRpdm9yYmlzX2xpYnJhcmllcyIKLSAgZWxpZiB0ZXN0ICJ4JGl2b3JiaXNfcHJlZml4IiAhPSAieCIgOyB0aGVuCi0gICAgSVZPUkJJU19MSUJTPSItTCRpdm9yYmlzX3ByZWZpeC9saWIiCi0gIGVsaWYgdGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSI7IHRoZW4KLSAgICBJVk9SQklTX0xJQlM9Ii1MJHByZWZpeC9saWIiCi0gIGZpCi0KLSAgSVZPUkJJU19MSUJTPSIkSVZPUkJJU19MSUJTIC1sdm9yYmlzaWRlYyAtbG0iCi0KLSAgaWYgdGVzdCAieCRpdm9yYmlzX2luY2x1ZGVzIiAhPSAieCIgOyB0aGVuCi0gICAgSVZPUkJJU19DRkxBR1M9Ii1JJGl2b3JiaXNfaW5jbHVkZXMiCi0gIGVsaWYgdGVzdCAieCRpdm9yYmlzX3ByZWZpeCIgIT0gIngiIDsgdGhlbgotICAgIElWT1JCSVNfQ0ZMQUdTPSItSSRpdm9yYmlzX3ByZWZpeC9pbmNsdWRlIgotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiOyB0aGVuCi0gICAgSVZPUkJJU19DRkxBR1M9Ii1JJHByZWZpeC9pbmNsdWRlIgotICBmaQotCi0gIEFDX01TR19DSEVDS0lORyhmb3IgVHJlbW9yKQotICBub19pdm9yYmlzPSIiCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfaXZvcmJpc3Rlc3QiID0gInh5ZXMiIDsgdGhlbgotICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTICRJVk9SQklTX0NGTEFHUyAkT0dHX0NGTEFHUyIKLSAgICBMSUJTPSIkTElCUyAkSVZPUkJJU19MSUJTICRPR0dfTElCUyIKLWRubAotZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIFRyZW1vciBpcyBzdWZmaWNpZW50bHkgbmV3LgotZG5sCi0gICAgICBybSAtZiBjb25mLml2b3JiaXN0ZXN0Ci0gICAgICBBQ19UUllfQ09NUElMRShbCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0cmVtb3IvY29kZWMuaD4KLV0sLCwgbm9faXZvcmJpcz15ZXMpCi0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JG5vX2l2b3JiaXMiID0gIngiIDsgdGhlbgotICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkgICAgIAotICBlbHNlCi0gICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgIElWT1JCSVNfQ0ZMQUdTPSIiCi0gICAgIElWT1JCSVNfTElCUz0iIgotICAgICBJVk9SQklTRklMRV9MSUJTPSIiCi0gICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi0gIGZpCi0gIEFDX1NVQlNUKElWT1JCSVNfQ0ZMQUdTKQotICBBQ19TVUJTVChJVk9SQklTX0xJQlMpCi0gIEFDX1NVQlNUKElWT1JCSVNGSUxFX0xJQlMpCi1dKQpkaWZmIC0tZ2l0IGEvbTQvZ3N0LW1hdHJvc2thLm00IGIvbTQvZ3N0LW1hdHJvc2thLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTBjYWFhLi4wMDAwMDAwCi0tLSBhL200L2dzdC1tYXRyb3NrYS5tNAorKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0jIENvbmZpZ3VyZSBwYXRocyBmb3IgbGliZWJtbAotCi1kbmwgUEFUSF9FQk1MKFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dKQotZG5sIFRlc3QgZm9yIGxpYmVibWwsIGFuZCBkZWZpbmUgRUJNTF9DRkxBR1MgYW5kIEVCTUxfTElCUwotZG5sCi1BQ19ERUZVTihbUEFUSF9FQk1MXSwKLVtkbmwgCi1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcwotZG5sCi1BQ19BUkdfV0lUSChlYm1sLXByZWZpeCxbICAtLXdpdGgtZWJtbC1wcmVmaXg9UEZYICAgICAgICBQcmVmaXggd2hlcmUgbGliZWJtbCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIGVibWxfcHJlZml4PSIkd2l0aHZhbCIsIGVibWxfcHJlZml4PSIiKQotQUNfQVJHX1dJVEgoZWJtbC1pbmNsdWRlLFsgIC0td2l0aC1lYm1sLWluY2x1ZGU9RElSICAgICAgIFBhdGggdG8gd2hlcmUgdGhlIGxpYmVibWwgaW5jbHVkZSBmaWxlcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIGVibWxfaW5jbHVkZT0iJHdpdGh2YWwiLCBlYm1sX2luY2x1ZGU9IiIpCi1BQ19BUkdfV0lUSChlYm1sLWxpYixbICAtLXdpdGgtZWJtbC1saWI9RElSICAgICAgICAgICBQYXRoIHRvIHdoZXJlIHRoZSBsaWJlYm1sIGxpYnJhcnkgaW5zdGFsbGVkIChvcHRpb25hbCldLCBlYm1sX2xpYj0iJHdpdGh2YWwiLCBlYm1sX2xpYj0iIikKLUFDX0FSR19FTkFCTEUoZWJtbHRlc3QsIFsgIC0tZGlzYWJsZS1lYm1sdGVzdCAgICAgICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBFQk1MIHByb2dyYW1dLCwgZW5hYmxlX2VibWx0ZXN0PXllcykKLQotICBpZiB0ZXN0ICJ4JGVibWxfcHJlZml4IiAhPSAieCI7IHRoZW4KLSAgICBlYm1sX2FyZ3M9IiRlYm1sX2FyZ3MgLS1wcmVmaXg9JGVibWxfcHJlZml4IgotICAgIGlmIHRlc3QgIngkZWJtbF9pbmNsdWRlIiAhPSAieCI7IHRoZW4KLSAgICAgIEVCTUxfQ0ZMQUdTPSItSSRlYm1sX2luY2x1ZGUiCi0gICAgZWxzZQotICAgICAgRUJNTF9DRkxBR1M9Ii1JJGVibWxfcHJlZml4L2luY2x1ZGUvZWJtbCIKLSAgICBmaQotICAgIGlmIHRlc3QgIngkZWJtbF9saWIiICE9ICJ4IjsgdGhlbgotICAgICAgRUJNTF9MSUJTPSItTCRlYm1sX2xpYiIKLSAgICBlbHNlCi0gICAgICBFQk1MX0xJQlM9Ii1MJGVibWxfcHJlZml4L2xpYiIKLSAgICBmaQotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiOyB0aGVuCi0gICAgZWJtbF9hcmdzPSIkZWJtbF9hcmdzIC0tcHJlZml4PSRwcmVmaXgiCi0gICAgaWYgdGVzdCAieCRlYm1sX2luY2x1ZGUiICE9ICJ4IjsgdGhlbgotICAgICAgRUJNTF9DRkxBR1M9Ii1JJGVibWxfaW5jbHVkZSIKLSAgICBlbHNlCi0gICAgICBFQk1MX0NGTEFHUz0iLUkkcHJlZml4L2luY2x1ZGUvZWJtbCIKLSAgICBmaQotICAgIGlmIHRlc3QgIngkZWJtbF9saWIiICE9ICJ4IjsgdGhlbgotICAgICAgRUJNTF9MSUJTPSItTCRlYm1sX2xpYiIKLSAgICBlbHNlCi0gICAgICBFQk1MX0xJQlM9Ii1MJHByZWZpeC9saWIiCi0gICAgZmkKLSAgZWxzZQotICAgIGlmIHRlc3QgIngkZWJtbF9pbmNsdWRlIiAhPSAieCI7IHRoZW4KLSAgICAgIEVCTUxfQ0ZMQUdTPSItSSRlYm1sX2luY2x1ZGUiCi0gICAgZWxzZQotICAgICAgRUJNTF9DRkxBR1M9Ii1JL3Vzci9pbmNsdWRlL2VibWwgLUkvdXNyL2xvY2FsL2luY2x1ZGUvZWJtbCIKLSAgICBmaQotICAgIGlmIHRlc3QgIngkZWJtbF9saWIiICE9ICJ4IjsgdGhlbgotICAgICAgRUJNTF9MSUJTPSItTCRlYm1sX2xpYiIKLSAgICBlbHNlCi0gICAgICBFQk1MX0xJQlM9Ii1ML3Vzci9sb2NhbC9saWIiCi0gICAgZmkKLSAgZmkKLQotICBFQk1MX0xJQlM9IiRFQk1MX0xJQlMgLWxlYm1sIgotCi0gIEFDX01TR19DSEVDS0lORyhmb3IgRUJNTCkKLSAgbm9fZWJtbD0iIgotCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfZWJtbHRlc3QiID0gInh5ZXMiIDsgdGhlbgotICAgIGFjX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTICRFQk1MX0NGTEFHUyIKLSAgICBMSUJTPSIkTElCUyAkRUJNTF9MSUJTIgotZG5sCi1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgRUJNTCBpcyBzdWZmaWNpZW50bHkgbmV3LgotZG5sCi0gICAgICBybSAtZiBjb25mLmVibWx0ZXN0Ci0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPEVibWxDb25maWcuaD4KLQotaW50IG1haW4gKCkKLXsKLSAgc3lzdGVtKCJ0b3VjaCBjb25mLmVibWx0ZXN0Iik7Ci0gIHJldHVybiAwOwotfQotCi1dLCwgbm9fZWJtbD15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQotICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gIGZpCi0KLSAgaWYgdGVzdCAieCRub19lYm1sIiA9ICJ4IiA7IHRoZW4KLSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pICAgICAKLSAgZWxzZQotICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICBpZiB0ZXN0IC1mIGNvbmYuZWJtbHRlc3QgOyB0aGVuCi0gICAgICAgOgotICAgICBlbHNlCi0gICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gRWJtbCB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKLSAgICAgICBDRkxBR1M9IiRDRkxBR1MgJEVCTUxfQ0ZMQUdTIgotICAgICAgIExJQlM9IiRMSUJTICRFQk1MX0xJQlMiCi0gICAgICAgQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8RWJtbENvbmZpZy5oPgotXSwgICAgIFsgcmV0dXJuIDA7IF0sCi0gICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCi0gICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBFQk1MIG9yIGZpbmRpbmcgdGhlIHdyb25nIgotICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIEVCTUwuIElmIGl0IGlzIG5vdCBmaW5kaW5nIEVCTUwsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgotICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgotICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCi0gICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgotICAgICAgIGVjaG8gIioqKiIKLSAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCi0gICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCi0gICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgotICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBFQk1MIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCi0gICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgRUJNTCBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiIgXSkKLSAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICAgICBmaQotICAgICBFQk1MX0NGTEFHUz0iIgotICAgICBFQk1MX0xJQlM9IiIKLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKLSAgZmkKLSAgQUNfU1VCU1QoRUJNTF9DRkxBR1MpCi0gIEFDX1NVQlNUKEVCTUxfTElCUykKLSAgcm0gLWYgY29uZi5lYm1sdGVzdAotXSkKLQotIyBDb25maWd1cmUgcGF0aHMgZm9yIGxpYm1hdHJvc2thCi0KLWRubCBQQVRIX01BVFJPU0tBKE1JTl9WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBUZXN0IGZvciBsaWJtYXRyb3NrYSwgYW5kIGRlZmluZSBNQVRST1NLQV9DRkxBR1MgYW5kIE1BVFJPU0tBX0xJQlMKLWRubAotQUNfREVGVU4oW1BBVEhfTUFUUk9TS0FdLAotW2RubCAKLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzCi1kbmwKLUFDX0FSR19XSVRIKG1hdHJvc2thLXByZWZpeCxbICAtLXdpdGgtbWF0cm9za2EtcHJlZml4PVBGWCAgICBQcmVmaXggd2hlcmUgbGlibWF0cm9za2EgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLCBtYXRyb3NrYV9wcmVmaXg9IiR3aXRodmFsIiwgbWF0cm9za2FfcHJlZml4PSIiKQotQUNfQVJHX1dJVEgobWF0cm9za2EtaW5jbHVkZSxbICAtLXdpdGgtbWF0cm9za2EtaW5jbHVkZT1ESVIgICBQYXRoIHRvIHdoZXJlIHRoZSBsaWJtYXRyb3NrYSBpbmNsdWRlIGZpbGVzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwgbWF0cm9za2FfaW5jbHVkZT0iJHdpdGh2YWwiLCBtYXRyb3NrYV9pbmNsdWRlPSIiKQotQUNfQVJHX1dJVEgobWF0cm9za2EtbGliLFsgIC0td2l0aC1tYXRyb3NrYS1saWI9RElSICAgICAgIFBhdGggdG8gd2hlcmUgdGhlIGxpYm1hdHJvc2thIGxpYnJhcnkgaW5zdGFsbGVkIChvcHRpb25hbCldLCBtYXRyb3NrYV9saWI9IiR3aXRodmFsIiwgbWF0cm9za2FfbGliPSIiKQotQUNfQVJHX0VOQUJMRShtYXRyb3NrYXRlc3QsIFsgIC0tZGlzYWJsZS1tYXRyb3NrYXRlc3QgICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBNYXRyb3NrYSBwcm9ncmFtXSwsIGVuYWJsZV9tYXRyb3NrYXRlc3Q9eWVzKQotCi0gIGlmIHRlc3QgIngkbWF0cm9za2FfcHJlZml4IiAhPSAieCI7IHRoZW4KLSAgICBtYXRyb3NrYV9hcmdzPSIkbWF0cm9za2FfYXJncyAtLXByZWZpeD0kbWF0cm9za2FfcHJlZml4IgotICAgIGlmIHRlc3QgIngkbWF0cm9za2FfaW5jbHVkZSIgIT0gIngiOyB0aGVuCi0gICAgICBNQVRST1NLQV9DRkxBR1M9Ii1JJG1hdHJvc2thX2luY2x1ZGUiCi0gICAgZWxzZQotICAgICAgTUFUUk9TS0FfQ0ZMQUdTPSItSSRtYXRyb3NrYV9wcmVmaXgvaW5jbHVkZS9tYXRyb3NrYSIKLSAgICBmaQotICAgIGlmIHRlc3QgIngkbWF0cm9za2FfbGliIiAhPSAieCI7IHRoZW4KLSAgICAgIE1BVFJPU0tBX0xJQlM9Ii1MJG1hdHJvc2thX2xpYiIKLSAgICBlbHNlCi0gICAgICBNQVRST1NLQV9MSUJTPSItTCRtYXRyb3NrYV9wcmVmaXgvbGliIgotICAgIGZpCi0gIGVsaWYgdGVzdCAieCRwcmVmaXgiICE9ICJ4Tk9ORSI7IHRoZW4KLSAgICBtYXRyb3NrYV9hcmdzPSIkbWF0cm9za2FfYXJncyAtLXByZWZpeD0kcHJlZml4IgotICAgIGlmIHRlc3QgIngkbWF0cm9za2FfaW5jbHVkZSIgIT0gIngiOyB0aGVuCi0gICAgICBNQVRST1NLQV9DRkxBR1M9Ii1JJG1hdHJvc2thX2luY2x1ZGUiCi0gICAgZWxzZQotICAgICAgTUFUUk9TS0FfQ0ZMQUdTPSItSSRwcmVmaXgvaW5jbHVkZS9tYXRyb3NrYSIKLSAgICBmaQotICAgIGlmIHRlc3QgIngkbWF0cm9za2FfbGliIiAhPSAieCI7IHRoZW4KLSAgICAgIE1BVFJPU0tBX0xJQlM9Ii1MJG1hdHJvc2thX2xpYiIKLSAgICBlbHNlCi0gICAgICBNQVRST1NLQV9MSUJTPSItTCRwcmVmaXgvbGliIgotICAgIGZpCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICJ4JG1hdHJvc2thX2luY2x1ZGUiICE9ICJ4IjsgdGhlbgotICAgICAgTUFUUk9TS0FfQ0ZMQUdTPSItSSRtYXRyb3NrYV9pbmNsdWRlIgotICAgIGVsc2UKLSAgICAgIE1BVFJPU0tBX0NGTEFHUz0iLUkvdXNyL2luY2x1ZGUvbWF0cm9za2EgLUkvdXNyL2xvY2FsL2luY2x1ZGUvbWF0cm9za2EiCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JG1hdHJvc2thX2xpYiIgIT0gIngiOyB0aGVuCi0gICAgICBNQVRST1NLQV9MSUJTPSItTCRtYXRyb3NrYV9saWIiCi0gICAgZWxzZQotICAgICAgTUFUUk9TS0FfTElCUz0iLUwvdXNyL2xvY2FsL2xpYiIKLSAgICBmaQotICBmaQotCi0gIE1BVFJPU0tBX0xJQlM9IiRNQVRST1NLQV9MSUJTIC1sbWF0cm9za2EiCi0KLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBNYXRyb3NrYSkKLSAgbm9fbWF0cm9za2E9IiIKLQotCi0gIGlmIHRlc3QgIngkZW5hYmxlX21hdHJvc2thdGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgYWNfc2F2ZV9DWFhGTEFHUz0iJENYWEZMQUdTIgotICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkTUFUUk9TS0FfQ0ZMQUdTICRFQk1MX0NGTEFHUyIKLSAgICBMSUJTPSIkTElCUyAkTUFUUk9TS0FfTElCUyAkRUJNTF9MSUJTIgotZG5sCi1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgTWF0cm9za2EgaXMgc3VmZmljaWVudGx5IG5ldy4KLWRubAotICAgICAgcm0gLWYgY29uZi5tYXRyb3NrYXRlc3QKLSAgICAgIEFDX0xBTkdfQ1BMVVNQTFVTCi0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPEVibWxDb25maWcuaD4KLSNpbmNsdWRlIDxLYXhWZXJzaW9uLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBMSUJNQVRST1NLQV9OQU1FU1BBQ0U7Ci0KLWludCBtYWluICgpCi17Ci0gIEZJTEUgKmY7Ci0gIGYgPSBmb3BlbigiY29uZi5tYXRyb3NrYXRlc3QiLCAid2IiKTsKLSAgaWYgKGYgPT0gTlVMTCkKLSAgICByZXR1cm4gMTsKLSAgZnByaW50ZihmLCAiJXNcbiIsIEtheENvZGVWZXJzaW9uLmNfc3RyKCkpOwotICBmY2xvc2UoZik7Ci0gIHJldHVybiAwOwotfQotCi1dLCwgbm9fbWF0cm9za2E9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKLSAgICAgIEFDX0xBTkdfQwotICAgICAgQ1hYRkxBR1M9IiRhY19zYXZlX0NYWEZMQUdTIgotICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JG5vX21hdHJvc2thIiA9ICJ4IiAtYSAtZiBjb25mLm1hdHJvc2thdGVzdCA7IHRoZW4KLSAgICBBQ19NU0dfUkVTVUxUKHllcykKLQotICAgIEFDX01TR19DSEVDS0lORyhNYXRyb3NrYSB2ZXJzaW9uKQotCi0gICAgbWF0cm9za2FfdmVyc2lvbj1gY2F0IGNvbmYubWF0cm9za2F0ZXN0YAotICAgIG1rX01BSlZFUj1gZWNobyAkMSB8IGN1dCAtZCIuIiAtZjFgCi0gICAgbWtfTUlOVkVSPWBlY2hvICQxIHwgY3V0IC1kIi4iIC1mMmAKLSAgICBta19SRUxWRVI9YGVjaG8gJDEgfCBjdXQgLWQiLiIgLWYzYAotICAgIG12ZXJfb2s9YHNlZCAncztcLjtcIDtnJyA8IGNvbmYubWF0cm9za2F0ZXN0IHwgKHJlYWQgLWEgbXZlcgotICAgIGlmIHRlc3QgJHttdmVyW1swXV19IC1ndCAkbWtfTUFKVkVSIDsgdGhlbgotICAgICAgbXZlcl9vaz0xCi0gICAgZWxpZiB0ZXN0ICR7bXZlcltbMF1dfSAtbHQgJG1rX01BSlZFUiA7IHRoZW4KLSAgICAgIG12ZXJfb2s9MAotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgJHttdmVyW1sxXV19IC1ndCAkbWtfTUlOVkVSIDsgdGhlbgotICAgICAgICBtdmVyX29rPTEKLSAgICAgIGVsaWYgdGVzdCAke212ZXJbWzFdXX0gLWx0ICRta19NSU5WRVIgOyB0aGVuCi0gICAgICAgIG12ZXJfb2s9MAotICAgICAgZWxzZQotICAgICAgICBpZiB0ZXN0ICR7bXZlcltbMl1dfSAtZ2UgJG1rX1JFTFZFUiA7IHRoZW4KLSAgICAgICAgICBtdmVyX29rPTEKLSAgICAgICAgZWxzZQotICAgICAgICAgIG12ZXJfb2s9MAotICAgICAgICBmaQotICAgICAgZmkKLSAgICBmaQotICAgIGVjaG8gJG12ZXJfb2sgKWAKLSAgICBpZiB0ZXN0ICIkbXZlcl9vayIgPSAiMSIgOyB0aGVuCi0gICAgICBBQ19NU0dfUkVTVUxUKCRtYXRyb3NrYV92ZXJzaW9uIG9rKQotICAgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfUkVTVUxUKCRtYXRyb3NrYV92ZXJzaW9uIHRvbyBvbGQpCi0gICAgICBlY2hvICcqKiogWW91ciBNYXRyb3NrYSB2ZXJzaW9uIGlzIHRvbyBvbGQuIFVwZ3JhZGUgdG8gYXQgbGVhc3QgdmVyc2lvbicKLSAgICAgIGVjaG8gJyoqKiAkMSBhbmQgcmUtcnVuIGNvbmZpZ3VyZS4nCi0gICAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkgICAgIAotICAgIGZpCi0KLSAgZWxzZQotICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotICBmaQotCi0gIEFDX1NVQlNUKE1BVFJPU0tBX0NGTEFHUykKLSAgQUNfU1VCU1QoTUFUUk9TS0FfTElCUykKLSAgcm0gLWYgY29uZi5tYXRyb3NrYXRlc3QKLV0pCmRpZmYgLS1naXQgYS9tNC9nc3Qtc2RsLm00IGIvbTQvZ3N0LXNkbC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjMzE5Ni4uMDAwMDAwMAotLS0gYS9tNC9nc3Qtc2RsLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLSMgc3R1ZmYgZm9yIFNETCwgaG9wZSB0aGlzIGhlbHBzIGlmIHdlIHB1dCBpdCBoZXJlCi0KLSMgQ29uZmlndXJlIHBhdGhzIGZvciBTREwKLSMgU2FtIExhbnRpbmdhIDkvMjEvOTkKLSMgc3RvbGVuIGZyb20gTWFuaXNoIFNpbmdoCi0jIHN0b2xlbiBiYWNrIGZyb20gRnJhbmsgQmVsZXcKLSMgc3RvbGVuIGZyb20gTWFuaXNoIFNpbmdoCi0jIFNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIE93ZW4gVGF5bG9yCi0KLWRubCBBTV9QQVRIX1NETChbTUlOSU1VTS1WRVJTSU9OLCBbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXV0pCi1kbmwgVGVzdCBmb3IgU0RMLCBhbmQgZGVmaW5lIFNETF9DRkxBR1MgYW5kIFNETF9MSUJTCi1kbmwKLUFDX0RFRlVOKFtBTV9QQVRIX1NETF0sCi1bZG5sIAotZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgc2RsLWNvbmZpZyBzY3JpcHQKLWRubAotQUNfQVJHX1dJVEgoc2RsLXByZWZpeCwKLSAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1zZGwtcHJlZml4PVBGWF0sCi0gICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgU0RMIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCi0gIHNkbF9wcmVmaXg9IiR3aXRodmFsIiwgc2RsX3ByZWZpeD0iIikKLQotQUNfQVJHX1dJVEgoc2RsLWV4ZWMtcHJlZml4LAotICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXNkbC1leGVjLXByZWZpeD1QRlhdLAotICAgICAgICAgICAgICAgICBbZXhlYyBwcmVmaXggd2hlcmUgU0RMIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCi0gIHNkbF9leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBzZGxfZXhlY19wcmVmaXg9IiIpCi0KLUFDX0FSR19FTkFCTEUoc2RsdGVzdCwKLSAgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1zZGx0ZXN0XSwKLSAgICAgICAgICAgICAgICAgW2RvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBTREwgcHJvZ3JhbV0pLAotICAsIGVuYWJsZV9zZGx0ZXN0PXllcykKLQotICBpZiB0ZXN0IHgkc2RsX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCi0gICAgIHNkbF9hcmdzPSIkc2RsX2FyZ3MgLS1leGVjLXByZWZpeD0kc2RsX2V4ZWNfcHJlZml4IgotICAgICBpZiB0ZXN0IHgke1NETF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotICAgICAgICBTRExfQ09ORklHPSRzZGxfZXhlY19wcmVmaXgvYmluL3NkbC1jb25maWcKLSAgICAgZmkKLSAgZmkKLSAgaWYgdGVzdCB4JHNkbF9wcmVmaXggIT0geCA7IHRoZW4KLSAgICAgc2RsX2FyZ3M9IiRzZGxfYXJncyAtLXByZWZpeD0kc2RsX3ByZWZpeCIKLSAgICAgaWYgdGVzdCB4JHtTRExfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KLSAgICAgICAgU0RMX0NPTkZJRz0kc2RsX3ByZWZpeC9iaW4vc2RsLWNvbmZpZwotICAgICBmaQotICBmaQotCi0gIEFDX1BBVEhfUFJPRyhTRExfQ09ORklHLCBzZGwtY29uZmlnLCBubykKLSAgbWluX3NkbF92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4xMS4wLCQxKQotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFNETCAtIHZlcnNpb24gPj0gJG1pbl9zZGxfdmVyc2lvbikKLSAgbm9fc2RsPSIiCi0gIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgbm9fc2RsPXllcwotICBlbHNlCi0gICAgU0RMX0NGTEFHUz1gJFNETF9DT05GSUcgJHNkbGNvbmZfYXJncyAtLWNmbGFnc2AKLSAgICBTRExfTElCUz1gJFNETF9DT05GSUcgJHNkbGNvbmZfYXJncyAtLWxpYnNgCi0KLSAgICBzZGxfbWFqb3JfdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCi0gICAgc2RsX21pbm9yX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfYXJncyAtLXZlcnNpb24gfCBcCi0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAotICAgIHNkbF9taWNyb192ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCi0gICAgaWYgdGVzdCAieCRlbmFibGVfc2RsdGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgJFNETF9DRkxBR1MiCi0gICAgICBMSUJTPSIkTElCUyAkU0RMX0xJQlMiCi1kbmwKLWRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBTREwgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5Ci1kbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHNkbC1jb25maWcgdG8gc29tZSBleHRlbnQKLWRubAotICAgICAgcm0gLWYgY29uZi5zZGx0ZXN0Ci0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgIlNETC5oIgotCi1jaGFyKgotbXlfc3RyZHVwIChjaGFyICpzdHIpCi17Ci0gIGNoYXIgKm5ld19zdHI7Ci0gIAotICBpZiAoc3RyKQotICAgIHsKLSAgICAgIG5ld19zdHIgPSAoY2hhciAqKW1hbGxvYyAoKHN0cmxlbiAoc3RyKSArIDEpICogc2l6ZW9mKGNoYXIpKTsKLSAgICAgIHN0cmNweSAobmV3X3N0ciwgc3RyKTsKLSAgICB9Ci0gIGVsc2UKLSAgICBuZXdfc3RyID0gTlVMTDsKLSAgCi0gIHJldHVybiBuZXdfc3RyOwotfQotCi1pbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87Ci0gIGNoYXIgKnRtcF92ZXJzaW9uOwotCi0gIC8qIFRoaXMgaGFuZ3Mgb24gc29tZSBzeXN0ZW1zICg/KQotICBzeXN0ZW0gKCJ0b3VjaCBjb25mLnNkbHRlc3QiKTsKLSAgKi8KLSAgeyBGSUxFICpmcCA9IGZvcGVuKCJjb25mLnNkbHRlc3QiLCAiYSIpOyBpZiAoIGZwICkgZmNsb3NlKGZwKTsgfQotCi0gIC8qIEhQL1VYIDkgKCVAIyEpIHdyaXRlcyB0byBzc2NhbmYgc3RyaW5ncyAqLwotICB0bXBfdmVyc2lvbiA9IG15X3N0cmR1cCgiJG1pbl9zZGxfdmVyc2lvbiIpOwotICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7Ci0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fc2RsX3ZlcnNpb24iKTsKLSAgICAgZXhpdCgxKTsKLSAgIH0KLQotICAgaWYgKCgkc2RsX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKLSAgICAgICgoJHNkbF9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoJHNkbF9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAotICAgICAgKCgkc2RsX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmICgkc2RsX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmICgkc2RsX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKLSAgICB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBwcmludGYoIlxuKioqICdzZGwtY29uZmlnIC0tdmVyc2lvbicgcmV0dXJuZWQgJWQuJWQuJWQsIGJ1dCB0aGUgbWluaW11bSB2ZXJzaW9uXG4iLCAkc2RsX21ham9yX3ZlcnNpb24sICRzZGxfbWlub3JfdmVyc2lvbiwgJHNkbF9taWNyb192ZXJzaW9uKTsKLSAgICAgIHByaW50ZigiKioqIG9mIFNETCByZXF1aXJlZCBpcyAlZC4lZC4lZC4gSWYgc2RsLWNvbmZpZyBpcyBjb3JyZWN0LCB0aGVuIGl0IGlzXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgICAgIHByaW50ZigiKioqIGJlc3QgdG8gdXBncmFkZSB0byB0aGUgcmVxdWlyZWQgdmVyc2lvbi5cbiIpOwotICAgICAgcHJpbnRmKCIqKiogSWYgc2RsLWNvbmZpZyB3YXMgd3JvbmcsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU0RMX0NPTkZJR1xuIik7Ci0gICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIHNkbC1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGVcbiIpOwotICAgICAgcHJpbnRmKCIqKiogY29uZmlnLmNhY2hlIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLV0sLCBub19zZGw9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKLSAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICAgICBmaQotICBmaQotICBpZiB0ZXN0ICJ4JG5vX3NkbCIgPSB4IDsgdGhlbgotICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAotICBlbHNlCi0gICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgICAgZWNobyAiKioqIFRoZSBzZGwtY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgU0RMIGNvdWxkIG5vdCBiZSBmb3VuZCIKLSAgICAgICBlY2hvICIqKiogSWYgU0RMIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIFNETF9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgotICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gc2RsLWNvbmZpZy4iCi0gICAgIGVsc2UKLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYuc2RsdGVzdCA7IHRoZW4KLSAgICAgICAgOgotICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBTREwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCi0gICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRTRExfQ0ZMQUdTIgotICAgICAgICAgIExJQlM9IiRMSUJTICRTRExfTElCUyIKLSAgICAgICAgICBBQ19UUllfTElOSyhbCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJTREwuaCIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsgcmV0dXJuIDA7IH0KLSN1bmRlZiAgbWFpbgotI2RlZmluZSBtYWluIEtfYW5kX1JfQ19tYWluCi1dLCAgICAgIFsgcmV0dXJuIDA7IF0sCi0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgotICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgU0RMIG9yIGZpbmRpbmcgdGhlIHdyb25nIgotICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIFNETC4gSWYgaXQgaXMgbm90IGZpbmRpbmcgU0RMLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKLSAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgotICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKLQkgIGVjaG8gIioqKiIKLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCi0gICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCi0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKLSAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgU0RMIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCi0gICAgICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgU0RMIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgeW91IgotICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBzZGwtY29uZmlnIHNjcmlwdDogJFNETF9DT05GSUciIF0pCi0gICAgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgICAgICBmaQotICAgICBmaQotICAgICBTRExfQ0ZMQUdTPSIiCi0gICAgIFNETF9MSUJTPSIiCi0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCi0gIGZpCi0gIEFDX1NVQlNUKFNETF9DRkxBR1MpCi0gIEFDX1NVQlNUKFNETF9MSUJTKQotICBybSAtZiBjb25mLnNkbHRlc3QKLV0pCi0KZGlmZiAtLWdpdCBhL200L2dzdC1zaG91dDIubTQgYi9tNC9nc3Qtc2hvdXQyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODVhNzY3Li4wMDAwMDAwCi0tLSBhL200L2dzdC1zaG91dDIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotIyBDb25maWd1cmUgcGF0aHMgZm9yIGxpYnNob3V0Ci0jIEphY2sgTW9mZml0dCA8amFja0BpY2VjYXN0Lm9yZz4gMDgtMDYtMjAwMQotIyBTaGFtZWxlc3NseSBzdG9sZW4gZnJvbSBPd2VuIFRheWxvciBhbmQgTWFuaXNoIFNpbmdoCi0KLWRubCBBTV9QQVRIX1NIT1VUMihbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBUZXN0IGZvciBsaWJzaG91dCAyLCBhbmQgZGVmaW5lIFNIT1VUMl9DRkxBR1MgYW5kIFNIT1VUMl9MSUJTCi1kbmwKLUFDX0RFRlVOKFtBTV9QQVRIX1NIT1VUMl0sCi1bZG5sIAotZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMKLWRubAotQUNfQVJHX1dJVEgoc2hvdXQyLXByZWZpeCxbICAtLXdpdGgtc2hvdXQyLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgbGlic2hvdXQyIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwgc2hvdXQyX3ByZWZpeD0iJHdpdGh2YWwiLCBzaG91dDJfcHJlZml4PSIiKQotQUNfQVJHX0VOQUJMRShzaG91dDJ0ZXN0LCBbICAtLWRpc2FibGUtc2hvdXQydGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3Qgc2hvdXQyIHByb2dyYW1dLCwgZW5hYmxlX3Nob3V0MnRlc3Q9eWVzKQotCi0gIGlmIHRlc3QgIngkc2hvdXQyX3ByZWZpeCIgIT0gInhOT05FIiA7IHRoZW4KLSAgICBTSE9VVDJfQ0ZMQUdTPSItSSRzaG91dDJfcHJlZml4L2luY2x1ZGUiCi0gICAgU0hPVVQyX0xJQlM9Ii1MJHNob3V0Ml9wcmVmaXgvbGliIgotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieCI7IHRoZW4KLSAgICBTSE9VVDJfQ0ZMQUdTPSItSSRwcmVmaXgvaW5jbHVkZSIKLSAgICBTSE9VVDJfTElCUz0iLUwkcHJlZml4L2xpYiIKLSAgZmkKLQotICBTSE9VVDJfTElCUz0iJFNIT1VUMl9MSUJTIC1sc2hvdXQgLWxwdGhyZWFkIgotCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLXNvbGFyaXMqKQotICAJU0hPVVQyX0xJQlM9IiRTSE9VVDJfTElCUyAtbG5zbCAtbHNvY2tldCAtbHJlc29sdiIKLSAgZXNhYwotCi0gIEFDX01TR19DSEVDS0lORyhmb3Igc2hvdXQyKQotICBub19zaG91dDI9IiIKLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9zaG91dDJ0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgotICAgIENGTEFHUz0iJENGTEFHUyAkU0hPVVQyX0NGTEFHUyAkT0dHX0NGTEFHUyAkVk9SQklTX0NGTEFHUyIKLSAgICBMSUJTPSIkTElCUyAkU0hPVVQyX0xJQlMgJE9HR19MSUJTICRWT1JCSVNfTElCUyIKLWRubAotZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIHNob3V0MiBpcyBzdWZmaWNpZW50bHkgbmV3LgotZG5sCi0gICAgICBybSAtZiBjb25mLnNob3V0MnRlc3QKLSAgICAgIEFDX1RSWV9SVU4oWwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c2hvdXQvc2hvdXQuaD4KLQotaW50IG1haW4gKCkKLXsKLSAgaW50IG1ham9yLCBtaW5vciwgcGF0Y2g7Ci0KLSAgc3lzdGVtKCJ0b3VjaCBjb25mLnNob3V0MnRlc3QiKTsKLSAgc2hvdXRfdmVyc2lvbigmbWFqb3IsICZtaW5vciwgJnBhdGNoKTsKLSAgaWYgKG1ham9yIDwgMikKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLV0sLCBub19zaG91dDI9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKLSAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICBmaQotCi0gIGlmIHRlc3QgIngkbm9fc2hvdXQyIiA9ICJ4IiA7IHRoZW4KLSAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gICAgIGlmZWxzZShbJDFdLCAsIDosIFskMV0pICAgICAKLSAgZWxzZQotICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICBpZiB0ZXN0IC1mIGNvbmYuc2hvdXQydGVzdCA7IHRoZW4KLSAgICAgICA6Ci0gICAgIGVsc2UKLSAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBTaG91dDIgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCi0gICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRTSE9VVDJfQ0ZMQUdTICRPR0dfQ0ZMQUdTICRWT1JCSVNfQ0ZMQUdTIgotICAgICAgIExJQlM9IiRMSUJTICRTSE9VVDJfTElCUyAkT0dHX0xJQlMgJFZPUkJJU19MSUJTIgotICAgICAgIEFDX1RSWV9MSU5LKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHNob3V0L3Nob3V0Lmg+Ci1dLCAgICAgWyByZXR1cm4gMDsgXSwKLSAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKLSAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIFNob3V0MiBvciBmaW5kaW5nIHRoZSB3cm9uZyIKLSAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBTaG91dDIuIElmIGl0IGlzIG5vdCBmaW5kaW5nIFNob3V0MiwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCi0gICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCi0gICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKLSAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCi0gICAgICAgZWNobyAiKioqIgotICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKLSAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKLSAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCi0gICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIFNob3V0MiB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgotICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIFNob3V0MiBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKLSAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgc2hvdXQtY29uZmlnIHNjcmlwdDogJFNIT1VUMl9DT05GSUciIF0pCi0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgICAgZmkKLSAgICAgU0hPVVQyX0NGTEFHUz0iIgotICAgICBTSE9VVDJfTElCUz0iIgotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICBmaQotICBBQ19TVUJTVChTSE9VVDJfQ0ZMQUdTKQotICBBQ19TVUJTVChTSE9VVDJfTElCUykKLSAgcm0gLWYgY29uZi5zaG91dDJ0ZXN0Ci1dKQpkaWZmIC0tZ2l0IGEvbTQvZ3N0LXNpZC5tNCBiL200L2dzdC1zaWQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZTI4NzcuLjAwMDAwMDAKLS0tIGEvbTQvZ3N0LXNpZC5tNAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLWRubCBjaGVjayBmb3Igc2lkcGxheQotCi1BQ19ERUZVTihbR1NUX1BBVEhfU0lEUExBWV0sCi1bCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsaWJzaWRwbGF5IDEuMzYueF0pCi0KLUFDX0xBTkdfUFVTSChDKyspCi0KLUFDX0NIRUNLX0hFQURFUihzaWRwbGF5L3BsYXllci5oLCBIQVZFX1NJRFBMQVk9InllcyIsIEhBVkVfU0lEUExBWT0ibm8iKQotCi1pZiB0ZXN0ICRIQVZFX1NJRFBMQVkgPSAieWVzIjsgdGhlbgotICBTSURQTEFZX0xJQlM9Ii1sc2lkcGxheSIKLQotICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxzaWRwbGF5IHdvcmtzXSkKLSAgYWNfbGlic19zYWZlPSRMSUJTCi0KLSAgTElCUz0iLWxzaWRwbGF5IgotCi0gIEFDX1RSWV9SVU4oWwotICAgICNpbmNsdWRlIDxzaWRwbGF5L3BsYXllci5oPgotICAgIGludCBtYWluKCkKLSAgICB7IHNpZFR1bmUgdHVuZSA9IHNpZFR1bmUoMCk7ICB9Ci0gICAgXSwKLSAgICBIQVZFX1NJRFBMQVk9InllcyIsCi0gICAgSEFWRV9TSURQTEFZPSJubyIsCi0gICAgSEFWRV9TSURQTEFZPSJubyIpCi0KLSAgTElCUz0iJGFjX2xpYnNfc2FmZSIKLQotICBBQ19NU0dfUkVTVUxUKFskSEFWRV9TSURQTEFZXSkKLWZpCi0KLVNJRFBMQVlfQ0ZMQUdTPQotU0lEUExBWV9MSUJTPSItbHNpZHBsYXkiCi1BQ19TVUJTVChTSURQTEFZX0NGTEFHUykKLUFDX1NVQlNUKFNJRFBMQVlfTElCUykKLQotQUNfTEFOR19QT1AoQysrKQotXSkKZGlmZiAtLWdpdCBhL200L2d0ay5tNCBiL200L2d0ay5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJkZDQ3Mi4uMDAwMDAwMAotLS0gYS9tNC9ndGsubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotIyBDb25maWd1cmUgcGF0aHMgZm9yIEdUSysKLSMgT3dlbiBUYXlsb3IgICAgIDk3LTExLTMKLQotZG5sIEFNX1BBVEhfR1RLKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORCBbLCBNT0RVTEVTXV1dXSkKLWRubCBUZXN0IGZvciBHVEssIGFuZCBkZWZpbmUgR1RLX0NGTEFHUyBhbmQgR1RLX0xJQlMKLWRubAotQUNfREVGVU4oW0FNX1BBVEhfR1RLXSwKLVtkbmwgCi1kbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBndGstY29uZmlnIHNjcmlwdAotZG5sCi1BQ19BUkdfV0lUSChndGstcHJlZml4LFsgIC0td2l0aC1ndGstcHJlZml4PVBGWCAgIFByZWZpeCB3aGVyZSBHVEsgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAotICAgICAgICAgICAgZ3RrX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgZ3RrX2NvbmZpZ19wcmVmaXg9IiIpCi1BQ19BUkdfV0lUSChndGstZXhlYy1wcmVmaXgsWyAgLS13aXRoLWd0ay1leGVjLXByZWZpeD1QRlggRXhlYyBwcmVmaXggd2hlcmUgR1RLIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKLSAgICAgICAgICAgIGd0a19jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgZ3RrX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKLUFDX0FSR19FTkFCTEUoZ3RrdGVzdCwgWyAgLS1kaXNhYmxlLWd0a3Rlc3QgICAgICAgRG8gbm90IHRyeSB0byBjb21waWxlIGFuZCBydW4gYSB0ZXN0IEdUSyBwcm9ncmFtXSwKLQkJICAgICwgZW5hYmxlX2d0a3Rlc3Q9eWVzKQotCi0gIGZvciBtb2R1bGUgaW4gLiAkNAotICBkbwotICAgICAgY2FzZSAiJG1vZHVsZSIgaW4KLSAgICAgICAgIGd0aHJlYWQpIAotICAgICAgICAgICAgIGd0a19jb25maWdfYXJncz0iJGd0a19jb25maWdfYXJncyBndGhyZWFkIgotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgZG9uZQotCi0gIGlmIHRlc3QgeCRndGtfY29uZmlnX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCi0gICAgIGd0a19jb25maWdfYXJncz0iJGd0a19jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRndGtfY29uZmlnX2V4ZWNfcHJlZml4IgotICAgICBpZiB0ZXN0IHgke0dUS19DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotICAgICAgICBHVEtfQ09ORklHPSRndGtfY29uZmlnX2V4ZWNfcHJlZml4L2Jpbi9ndGstY29uZmlnCi0gICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgeCRndGtfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgotICAgICBndGtfY29uZmlnX2FyZ3M9IiRndGtfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGd0a19jb25maWdfcHJlZml4IgotICAgICBpZiB0ZXN0IHgke0dUS19DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotICAgICAgICBHVEtfQ09ORklHPSRndGtfY29uZmlnX3ByZWZpeC9iaW4vZ3RrLWNvbmZpZwotICAgICBmaQotICBmaQotCi0gIEFDX1BBVEhfUFJPRyhHVEtfQ09ORklHLCBndGstY29uZmlnLCBubykKLSAgbWluX2d0a192ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC45OS43LCQxKQotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdUSyAtIHZlcnNpb24gPj0gJG1pbl9ndGtfdmVyc2lvbikKLSAgbm9fZ3RrPSIiCi0gIGlmIHRlc3QgIiRHVEtfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgbm9fZ3RrPXllcwotICBlbHNlCi0gICAgR1RLX0NGTEFHUz1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLWNmbGFnc2AKLSAgICBHVEtfTElCUz1gJEdUS19DT05GSUcgJGd0a19jb25maWdfYXJncyAtLWxpYnNgCi0gICAgZ3RrX2NvbmZpZ19tYWpvcl92ZXJzaW9uPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCi0gICAgZ3RrX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCi0gICAgZ3RrX2NvbmZpZ19taWNyb192ZXJzaW9uPWAkR1RLX0NPTkZJRyAkZ3RrX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wzLydgCi0gICAgaWYgdGVzdCAieCRlbmFibGVfZ3RrdGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgJEdUS19DRkxBR1MiCi0gICAgICBMSUJTPSIkR1RLX0xJQlMgJExJQlMiCi1kbmwKLWRubCBOb3cgY2hlY2sgaWYgdGhlIGluc3RhbGxlZCBHVEsgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5Ci1kbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGd0ay1jb25maWcgdG8gc29tZSBleHRlbnQKLWRubAotICAgICAgcm0gLWYgY29uZi5ndGt0ZXN0Ci0gICAgICBBQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotaW50IAotbWFpbiAoKQotewotICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKLSAgY2hhciAqdG1wX3ZlcnNpb247Ci0KLSAgc3lzdGVtICgidG91Y2ggY29uZi5ndGt0ZXN0Iik7Ci0KLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCi0gIHRtcF92ZXJzaW9uID0gZ19zdHJkdXAoIiRtaW5fZ3RrX3ZlcnNpb24iKTsKLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgewotICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2d0a192ZXJzaW9uIik7Ci0gICAgIGV4aXQoMSk7Ci0gICB9Ci0KLSAgaWYgKChndGtfbWFqb3JfdmVyc2lvbiAhPSAkZ3RrX2NvbmZpZ19tYWpvcl92ZXJzaW9uKSB8fAotICAgICAgKGd0a19taW5vcl92ZXJzaW9uICE9ICRndGtfY29uZmlnX21pbm9yX3ZlcnNpb24pIHx8Ci0gICAgICAoZ3RrX21pY3JvX3ZlcnNpb24gIT0gJGd0a19jb25maWdfbWljcm9fdmVyc2lvbikpCi0gICAgewotICAgICAgcHJpbnRmKCJcbioqKiAnZ3RrLWNvbmZpZyAtLXZlcnNpb24nIHJldHVybmVkICVkLiVkLiVkLCBidXQgR1RLKyAoJWQuJWQuJWQpXG4iLCAKLSAgICAgICAgICAgICAkZ3RrX2NvbmZpZ19tYWpvcl92ZXJzaW9uLCAkZ3RrX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkZ3RrX2NvbmZpZ19taWNyb192ZXJzaW9uLAotICAgICAgICAgICAgIGd0a19tYWpvcl92ZXJzaW9uLCBndGtfbWlub3JfdmVyc2lvbiwgZ3RrX21pY3JvX3ZlcnNpb24pOwotICAgICAgcHJpbnRmICgiKioqIHdhcyBmb3VuZCEgSWYgZ3RrLWNvbmZpZyB3YXMgY29ycmVjdCwgdGhlbiBpdCBpcyBiZXN0XG4iKTsKLSAgICAgIHByaW50ZiAoIioqKiB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uIG9mIEdUSysuIFlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGZpeCB0aGUgZXJyb3JcbiIpOwotICAgICAgcHJpbnRmKCIqKiogYnkgbW9kaWZ5aW5nIHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGJ5IGVkaXRpbmdcbiIpOwotICAgICAgcHJpbnRmKCIqKiogL2V0Yy9sZC5zby5jb25mLiBNYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQgaXNcbiIpOwotICAgICAgcHJpbnRmKCIqKiogcmVxdWlyZWQgb24geW91ciBzeXN0ZW0uXG4iKTsKLSAgICAgIHByaW50ZigiKioqIElmIGd0ay1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdUS19DT05GSUdcbiIpOwotICAgICAgcHJpbnRmKCIqKiogdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgY29weSBvZiBndGstY29uZmlnLCBhbmQgcmVtb3ZlIHRoZSBmaWxlIGNvbmZpZy5jYWNoZVxuIik7Ci0gICAgICBwcmludGYoIioqKiBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOwotICAgIH0gCi0jaWYgZGVmaW5lZCAoR1RLX01BSk9SX1ZFUlNJT04pICYmIGRlZmluZWQgKEdUS19NSU5PUl9WRVJTSU9OKSAmJiBkZWZpbmVkIChHVEtfTUlDUk9fVkVSU0lPTikKLSAgZWxzZSBpZiAoKGd0a19tYWpvcl92ZXJzaW9uICE9IEdUS19NQUpPUl9WRVJTSU9OKSB8fAotCSAgIChndGtfbWlub3JfdmVyc2lvbiAhPSBHVEtfTUlOT1JfVkVSU0lPTikgfHwKLSAgICAgICAgICAgKGd0a19taWNyb192ZXJzaW9uICE9IEdUS19NSUNST19WRVJTSU9OKSkKLSAgICB7Ci0gICAgICBwcmludGYoIioqKiBHVEsrIGhlYWRlciBmaWxlcyAodmVyc2lvbiAlZC4lZC4lZCkgZG8gbm90IG1hdGNoXG4iLAotCSAgICAgR1RLX01BSk9SX1ZFUlNJT04sIEdUS19NSU5PUl9WRVJTSU9OLCBHVEtfTUlDUk9fVkVSU0lPTik7Ci0gICAgICBwcmludGYoIioqKiBsaWJyYXJ5ICh2ZXJzaW9uICVkLiVkLiVkKVxuIiwKLQkgICAgIGd0a19tYWpvcl92ZXJzaW9uLCBndGtfbWlub3JfdmVyc2lvbiwgZ3RrX21pY3JvX3ZlcnNpb24pOwotICAgIH0KLSNlbmRpZiAvKiBkZWZpbmVkIChHVEtfTUFKT1JfVkVSU0lPTikgLi4uICovCi0gIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoKGd0a19tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8Ci0gICAgICAgICgoZ3RrX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChndGtfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKLSAgICAgICAgKChndGtfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGd0a19taW5vcl92ZXJzaW9uID09IG1pbm9yKSAmJiAoZ3RrX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgfQotICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgR1RLKyAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCi0gICAgICAgICAgICAgICBndGtfbWFqb3JfdmVyc2lvbiwgZ3RrX21pbm9yX3ZlcnNpb24sIGd0a19taWNyb192ZXJzaW9uKTsKLSAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIEdUSysgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAotCSAgICAgICBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgICAgICAgcHJpbnRmKCIqKiogR1RLKyBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLmd0ay5vcmcuXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKipcbiIpOwotICAgICAgICBwcmludGYoIioqKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBhIHN1ZmZpY2llbnRseSBuZXcgdmVyc2lvbiwgdGhpcyBlcnJvclxuIik7Ci0gICAgICAgIHByaW50ZigiKioqIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHdyb25nIGNvcHkgb2YgdGhlIGd0ay1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogYmVpbmcgZm91bmQuIFRoZSBlYXNpZXN0IHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogb2YgR1RLKywgYnV0IHlvdSBjYW4gYWxzbyBzZXQgdGhlIEdUS19DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogY29ycmVjdCBjb3B5IG9mIGd0ay1jb25maWcuIChJbiB0aGlzIGNhc2UsIHlvdSB3aWxsIGhhdmUgdG9cbiIpOwotICAgICAgICBwcmludGYoIioqKiBtb2RpZnkgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmZcbiIpOwotICAgICAgICBwcmludGYoIioqKiBzbyB0aGF0IHRoZSBjb3JyZWN0IGxpYnJhcmllcyBhcmUgZm91bmQgYXQgcnVuLXRpbWUpKVxuIik7Ci0gICAgICB9Ci0gICAgfQotICByZXR1cm4gMTsKLX0KLV0sLCBub19ndGs9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKLSAgICAgICBDRkxBR1M9IiRhY19zYXZlX0NGTEFHUyIKLSAgICAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgotICAgICBmaQotICBmaQotICBpZiB0ZXN0ICJ4JG5vX2d0ayIgPSB4IDsgdGhlbgotICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAotICBlbHNlCi0gICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgIGlmIHRlc3QgIiRHVEtfQ09ORklHIiA9ICJubyIgOyB0aGVuCi0gICAgICAgZWNobyAiKioqIFRoZSBndGstY29uZmlnIHNjcmlwdCBpbnN0YWxsZWQgYnkgR1RLIGNvdWxkIG5vdCBiZSBmb3VuZCIKLSAgICAgICBlY2hvICIqKiogSWYgR1RLIHdhcyBpbnN0YWxsZWQgaW4gUFJFRklYLCBtYWtlIHN1cmUgUFJFRklYL2JpbiBpcyBpbiIKLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIEdUS19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgotICAgICAgIGVjaG8gIioqKiBmdWxsIHBhdGggdG8gZ3RrLWNvbmZpZy4iCi0gICAgIGVsc2UKLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYuZ3RrdGVzdCA7IHRoZW4KLSAgICAgICAgOgotICAgICAgIGVsc2UKLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBHVEsgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCi0gICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRHVEtfQ0ZMQUdTIgotICAgICAgICAgIExJQlM9IiRMSUJTICRHVEtfTElCUyIKLSAgICAgICAgICBBQ19UUllfTElOSyhbCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1dLCAgICAgIFsgcmV0dXJuICgoZ3RrX21ham9yX3ZlcnNpb24pIHx8IChndGtfbWlub3JfdmVyc2lvbikgfHwgKGd0a19taWNyb192ZXJzaW9uKSk7IF0sCi0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgotICAgICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgR1RLIG9yIGZpbmRpbmcgdGhlIHdyb25nIgotICAgICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIEdUSy4gSWYgaXQgaXMgbm90IGZpbmRpbmcgR1RLLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKLSAgICAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgotICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKLQkgIGVjaG8gIioqKiIKLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCi0gICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIgotICAgICAgICAgIGVjaG8gIioqKiIKLSAgICAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYSBSZWRIYXQgNS4wIHN5c3RlbSwgeW91IHNob3VsZCByZW1vdmUgdGhlIEdUSyBwYWNrYWdlIHRoYXQiCi0gICAgICAgICAgZWNobyAiKioqIGNhbWUgd2l0aCB0aGUgc3lzdGVtIHdpdGggdGhlIGNvbW1hbmQiCi0gICAgICAgICAgZWNobyAiKioqIgotICAgICAgICAgIGVjaG8gIioqKiAgICBycG0gLS1lcmFzZSAtLW5vZGVwcyBndGsgZ3RrLWRldmVsIiBdLAotICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCi0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIEdUSyB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgotICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIEdUSyBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKLSAgICAgICAgICBlY2hvICIqKiogbWF5IHdhbnQgdG8gZWRpdCB0aGUgZ3RrLWNvbmZpZyBzY3JpcHQ6ICRHVEtfQ09ORklHIiBdKQotICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgICAgZmkKLSAgICAgZmkKLSAgICAgR1RLX0NGTEFHUz0iIgotICAgICBHVEtfTElCUz0iIgotICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQotICBmaQotICBBQ19TVUJTVChHVEtfQ0ZMQUdTKQotICBBQ19TVUJTVChHVEtfTElCUykKLSAgcm0gLWYgY29uZi5ndGt0ZXN0Ci1dKQpkaWZmIC0tZ2l0IGEvbTQvaWNvbnYubTQgYi9tNC9pY29udi5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZiYzc2Zi4uMDAwMDAwMAotLS0gYS9tNC9pY29udi5tNAorKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0jIGljb252Lm00IHNlcmlhbCBBTTYgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi0KLUFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LRkxBR1NfQk9EWV0sCi1bCi0gIGRubCBQcmVyZXF1aXNpdGVzIG9mIEFDX0xJQl9MSU5LRkxBR1NfQk9EWS4KLSAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKLSAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKLQotICBkbmwgU2VhcmNoIGZvciBsaWJpY29udiBhbmQgZGVmaW5lIExJQklDT05WLCBMVExJQklDT05WIGFuZCBJTkNJQ09OVgotICBkbmwgYWNjb3JkaW5nbHkuCi0gIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbaWNvbnZdKQotXSkKLQotQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAotWwotICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKLSAgZG5sIHRob3NlIHdpdGggdGhlIHN0YW5kYWxvbmUgcG9ydGFibGUgR05VIGxpYmljb252IGluc3RhbGxlZCkuCi0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcwotCi0gIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCi0gIGRubCBhY2NvcmRpbmdseS4KLSAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQotCi0gIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAotICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYmljb252IGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQotICBkbmwgdmlhIC0td2l0aG91dC1saWJpY29udi1wcmVmaXgsIGhlIHdhbnRzIHRvIHVzZSBpdC4gVGhlIGZpcnN0Ci0gIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCi0gIGFtX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DSUNPTlZdKQotCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaWNvbnZdLCBhbV9jdl9mdW5jX2ljb252LCBbCi0gICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgotICAgIGFtX2N2X2xpYl9pY29udj1ubwotICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aWNvbnYuaD5dLAotICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKLSAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKLSAgICAgICBpY29udl9jbG9zZShjZCk7XSwKLSAgICAgIGFtX2N2X2Z1bmNfaWNvbnY9eWVzKQotICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4KLSAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCi0gICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGljb252Lmg+XSwKLSAgICAgICAgW2ljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsKLSAgICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCi0gICAgICAgIGFtX2N2X2xpYl9pY29udj15ZXMKLSAgICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMpCi0gICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgotICAgIGZpCi0gIF0pCi0gIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd29ya2luZyBpY29udl0sIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MsIFsKLSAgICAgIGRubCBUaGlzIHRlc3RzIGFnYWluc3QgYnVncyBpbiBBSVggNS4xIGFuZCBIUC1VWCAxMS4xMS4KLSAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNvbnYgPSB5ZXM7IHRoZW4KLSAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgotICAgICAgZmkKLSAgICAgIEFDX1RSWV9SVU4oWwotI2luY2x1ZGUgPGljb252Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci1pbnQgbWFpbiAoKQotewotICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bAotICAgICByZXR1cm5zLiAgKi8KLSAgewotICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEiLCAiVVRGLTgiKTsKLSAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQotICAgICAgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1NCI7IC8qIEVVUk8gU0lHTiAqLwotICAgICAgICBjaGFyIGJ1ZlsxMF07Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7Ci0gICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxlbiAoaW5wdXQpOwotICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7Ci0gICAgICAgIHNpemVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7Ci0gICAgICAgIHNpemVfdCByZXMgPSBpY29udiAoY2RfdXRmOF90b184ODU5MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7Ci0gICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgfQotI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0aGUgY2FsbGVyLiAgKi8KLSAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovCi0gIHsKLSAgICBpY29udl90IGNkXzg4NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOwotICAgIGlmIChjZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpCi0gICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4gb2huZSBBdWdlbm1hXDMzNyI7Ci0gICAgICAgIGNoYXIgYnVmWzUwXTsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsKLSAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7Ci0gICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsKLSAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsKLSAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsKLSAgICAgICAgaWYgKChpbnQpcmVzID4gMCkKLSAgICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgfQotI2VuZGlmCi0gIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcwotICAgICBwcm92aWRlZC4gICovCi0gIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KLSAgICAgIGljb252X29wZW4gKCJVVEYtOCIsICJFVUMtSlAiKSA9PSAoaWNvbnZfdCkoLTEpCi0gICAgICAvKiBUcnkgSVJJWCwgT1NGLzEgbmFtZXMuICAqLwotICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKQotICAgICAgLyogVHJ5IEFJWCBuYW1lcy4gICovCi0gICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiSUJNLWV1Y0pQIikgPT0gKGljb252X3QpKC0xKQotICAgICAgLyogVHJ5IEhQLVVYIG5hbWVzLiAgKi8KLSAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19XSwgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9eWVzXSwgW2FtX2N2X2Z1bmNfaWNvbnZfd29ya3M9bm9dLAotICAgICAgICBbY2FzZSAiJGhvc3Rfb3MiIGluCi0gICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7Ci0gICAgICAgICAgICopICAgICAgICAgICAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7OwotICAgICAgICAgZXNhY10pCi0gICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgotICAgIF0pCi0gICAgY2FzZSAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiIGluCi0gICAgICAqbm8pIGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vIDs7Ci0gICAgICAqKSAgIGFtX2Z1bmNfaWNvbnY9eWVzIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNvbnY9bm8KLSAgZmkKLSAgaWYgdGVzdCAiJGFtX2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfSUNPTlYsIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy5dKQotICBmaQotICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2ljb252IiA9IHllczsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCi0gICAgQUNfTVNHX1JFU1VMVChbJExJQklDT05WXSkKLSAgZWxzZQotICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKLSAgICBkbmwgZWl0aGVyLgotICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIKLSAgICBMSUJJQ09OVj0KLSAgICBMVExJQklDT05WPQotICBmaQotICBBQ19TVUJTVChMSUJJQ09OVikKLSAgQUNfU1VCU1QoTFRMSUJJQ09OVikKLV0pCi0KLUFDX0RFRlVOKFtBTV9JQ09OVl0sCi1bCi0gIEFNX0lDT05WX0xJTksKLSAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgaWNvbnYgZGVjbGFyYXRpb25dKQotICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWwotICAgICAgQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGljb252Lmg+Ci1leHRlcm4KLSNpZmRlZiBfX2NwbHVzcGx1cwotIkMiCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQotc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOwotI2Vsc2UKLXNpemVfdCBpY29udigpOwotI2VuZGlmCi1dLCBbXSwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iIiwgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iY29uc3QiKQotICAgICAgYW1fY3ZfcHJvdG9faWNvbnY9ImV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgY2QsICRhbV9jdl9wcm90b19pY29udl9hcmcxIGNoYXIgKiAqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsIGNoYXIgKiAqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7Il0pCi0gICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCi0gICAgQUNfTVNHX1JFU1VMVChbJF17YWNfdDotCi0gICAgICAgICB9WyRdYW1fY3ZfcHJvdG9faWNvbnYpCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKLSAgICAgIFtEZWZpbmUgYXMgY29uc3QgaWYgdGhlIGRlY2xhcmF0aW9uIG9mIGljb252KCkgbmVlZHMgY29uc3QuXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9tNC9pbnRkaXYwLm00IGIvbTQvaW50ZGl2MC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4YTY3MC4uMDAwMDAwMAotLS0gYS9tNC9pbnRkaXYwLm00CisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotIyBpbnRkaXYwLm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTcpCi1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLQotQUNfREVGVU4oW2d0X0lOVERJVjBdLAotWwotICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotCi0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgU0lHRlBFXSwKLSAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKLSAgICBbCi0gICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0KLWNoYW5nZXF1b3RlKCwpZG5sCi0gICAgICBjYXNlICIkaG9zdF9vcyIgaW4KLSAgICAgICAgbWFjb3MqIHwgZGFyd2luWzYtOV0qIHwgZGFyd2luWzEtOV1bMC05XSopCi0gICAgICAgICAgIyBPbiBNYWNPUyBYIDEwLjIgb3IgbmV3ZXIsIGp1c3QgYXNzdW1lIHRoZSBzYW1lIGFzIHdoZW4gY3Jvc3MtCi0gICAgICAgICAgIyBjb21waWxpbmcuIElmIHdlIHdlcmUgdG8gcGVyZm9ybSB0aGUgcmVhbCB0ZXN0LCAxIENyYXNoIFJlcG9ydAotICAgICAgICAgICMgZGlhbG9nIHdpbmRvdyB3b3VsZCBwb3AgdXAuCi0gICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgotICAgICAgICAgICAgaVszNDU2N104NiB8IHg4Nl82NCkKLSAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyIgOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLWNoYW5nZXF1b3RlKFssXSlkbmwKLSAgICAgIGlmIHRlc3QgLXogIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSI7IHRoZW4KLSAgICAgICAgQUNfVFJZX1JVTihbCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLXN0YXRpYyB2b2lkCi1zaWdmcGVfaGFuZGxlciAoaW50IHNpZykKLXsKLSAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLwotICBleGl0IChzaWcgIT0gU0lHRlBFKTsKLX0KLQotaW50IHggPSAxOwotaW50IHkgPSAwOwotaW50IHo7Ci1pbnQgbmFuOwotCi1pbnQgbWFpbiAoKQotewotICBzaWduYWwgKFNJR0ZQRSwgc2lnZnBlX2hhbmRsZXIpOwotLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLwotI2lmIChkZWZpbmVkIChfX3NnaSkgfHwgZGVmaW5lZCAoX0FJWCkpICYmIGRlZmluZWQgKFNJR1RSQVApCi0gIHNpZ25hbCAoU0lHVFJBUCwgc2lnZnBlX2hhbmRsZXIpOwotI2VuZGlmCi0vKiBMaW51eC9TUEFSQyB5aWVsZHMgc2lnbmFsIFNJR0lMTC4gICovCi0jaWYgZGVmaW5lZCAoX19zcGFyY19fKSAmJiBkZWZpbmVkIChfX2xpbnV4X18pCi0gIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7Ci0jZW5kaWYKLQotICB6ID0geCAvIHk7Ci0gIG5hbiA9IHkgLyB5OwotICBleGl0ICgxKTsKLX0KLV0sIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPXllcywgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9bm8sCi0gICAgICAgICAgWwotICAgICAgICAgICAgIyBHdWVzcyBiYXNlZCBvbiB0aGUgQ1BVLgotY2hhbmdlcXVvdGUoLClkbmwKLSAgICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KLSAgICAgICAgICAgICAgYWxwaGEqIHwgaVszNDU2N104NiB8IHg4Nl82NCB8IG02OGsgfCBzMzkwKikKLSAgICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7Ci0gICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIG5vIjs7Ci0gICAgICAgICAgICBlc2FjCi1jaGFuZ2VxdW90ZShbLF0pZG5sCi0gICAgICAgICAgXSkKLSAgICAgIGZpCi0gICAgXSkKLSAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgotICAgICp5ZXMpIHZhbHVlPTE7OwotICAgICopIHZhbHVlPTA7OwotICBlc2FjCi0gIEFDX0RFRklORV9VTlFVT1RFRChJTlRESVYwX1JBSVNFU19TSUdGUEUsICR2YWx1ZSwKLSAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQotXSkKZGlmZiAtLWdpdCBhL200L2ludGxtYWNvc3gubTQgYi9tNC9pbnRsbWFjb3N4Lm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2YwZDkwLi4wMDAwMDAwCi0tLSBhL200L2ludGxtYWNvc3gubTQKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jIGludGxtYWNvc3gubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xNykKLWRubCBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBDaGVja3MgZm9yIHNwZWNpYWwgb3B0aW9ucyBuZWVkZWQgb24gTWFjT1MgWC4KLWRubCBEZWZpbmVzIElOVExfTUFDT1NYX0xJQlMuCi1BQ19ERUZVTihbZ3RfSU5UTF9NQUNPU1hdLAotWwotICBkbmwgQ2hlY2sgZm9yIEFQSSBpbnRyb2R1Y2VkIGluIE1hY09TIFggMTAuMi4KLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlXSwKLSAgICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUsCi0gICAgW2d0X3NhdmVfTElCUz0iJExJQlMiCi0gICAgIExJQlM9IiRMSUJTIC1XbCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiIKLSAgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2VzLmg+XSwKLSAgICAgICBbQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZShOVUxMLCBOVUxMKV0sCi0gICAgICAgW2d0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT15ZXNdLAotICAgICAgIFtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm9dKQotICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIl0pCi0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllczsgdGhlbgotICAgIEFDX0RFRklORShbSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFXSwgMSwKLSAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluIHRoZSBDb3JlRm91bmRhdGlvbiBmcmFtZXdvcmsuXSkKLSAgZmkKLSAgZG5sIENoZWNrIGZvciBBUEkgaW50cm9kdWNlZCBpbiBNYWNPUyBYIDEwLjMuCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudF0sIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCwKLSAgICBbZ3Rfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIgotICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGTG9jYWxlLmg+XSwgW0NGTG9jYWxlQ29weUN1cnJlbnQoKTtdLAotICAgICAgIFtndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9eWVzXSwKLSAgICAgICBbZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vXSkKLSAgICAgTElCUz0iJGd0X3NhdmVfTElCUyJdKQotICBpZiB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0hBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVF0sIDEsCi0gICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIE1hY09TIFggZnVuY3Rpb24gQ0ZMb2NhbGVDb3B5Q3VycmVudCBpbiB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLl0pCi0gIGZpCi0gIElOVExfTUFDT1NYX0xJQlM9Ci0gIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSA9IHllcyB8fCB0ZXN0ICRndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQgPSB5ZXM7IHRoZW4KLSAgICBJTlRMX01BQ09TWF9MSUJTPSItV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iCi0gIGZpCi0gIEFDX1NVQlNUKFtJTlRMX01BQ09TWF9MSUJTXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9pbnR0eXBlcy1wcmkubTQgYi9tNC9pbnR0eXBlcy1wcmkubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjN2Y4OTQuLjAwMDAwMDAKLS0tIGEvbTQvaW50dHlwZXMtcHJpLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyBpbnR0eXBlcy1wcmkubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xNikKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBCcnVubyBIYWlibGUuCi0KLUFDX1BSRVJFUSgyLjUyKQotCi0jIERlZmluZSBQUklfTUFDUk9TX0JST0tFTiBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHRoZSBQUkkqCi0jIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgotCi1BQ19ERUZVTihbZ3RfSU5UVFlQRVNfUFJJXSwKLVsKLSAgQUNfQ0hFQ0tfSEVBREVSUyhbaW50dHlwZXMuaF0pCi0gIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuXSwKLSAgICAgIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4sCi0gICAgICBbCi0gICAgICAgIEFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpZmRlZiBQUklkMzIKLWNoYXIgKnAgPSBQUklkMzI7Ci0jZW5kaWYKLV0sIFtdLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcykKLSAgICAgIF0pCi0gIGZpCi0gIGlmIHRlc3QgIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA9IHllczsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKLSAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZGVmaW5lcyB1bnVzYWJsZSBQUkkqIG1hY3Jvcy5dKQotICAgIFBSSV9NQUNST1NfQlJPS0VOPTEKLSAgZWxzZQotICAgIFBSSV9NQUNST1NfQlJPS0VOPTAKLSAgZmkKLSAgQUNfU1VCU1QoW1BSSV9NQUNST1NfQlJPS0VOXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9pbnR0eXBlc19oLm00IGIvbTQvaW50dHlwZXNfaC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRjOGVjYi4uMDAwMDAwMAotLS0gYS9tNC9pbnR0eXBlc19oLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBpbnR0eXBlc19oLm00IHNlcmlhbCA3Ci1kbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIEZyb20gUGF1bCBFZ2dlcnQuCi0KLSMgRGVmaW5lIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVggaWYgPGludHR5cGVzLmg+IGV4aXN0cywKLSMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCi0KLUFDX0RFRlVOKFtnbF9BQ19IRUFERVJfSU5UVFlQRVNfSF0sCi1bCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oLAotICBbQUNfVFJZX0NPTVBJTEUoCi0gICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCi0gICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7IHJldHVybiAhaTtdLAotICAgIGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywKLSAgICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubyldKQotICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYLCAxLAotICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKLSAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L2xjbWVzc2FnZS5tNCBiL200L2xjbWVzc2FnZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhYTc3ZS4uMDAwMDAwMAotLS0gYS9tNC9sY21lc3NhZ2UubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIGxjbWVzc2FnZS5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjE0LjIpCi1kbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIsIDIwMDQtMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBBdXRob3JzOgotZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCi0KLSMgQ2hlY2sgd2hldGhlciBMQ19NRVNTQUdFUyBpcyBhdmFpbGFibGUgaW4gPGxvY2FsZS5oPi4KLQotQUNfREVGVU4oW2d0X0xDX01FU1NBR0VTXSwKLVsKLSAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGd0X2N2X3ZhbF9MQ19NRVNTQUdFUywKLSAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKLSAgICAgICBndF9jdl92YWxfTENfTUVTU0FHRVM9eWVzLCBndF9jdl92YWxfTENfTUVTU0FHRVM9bm8pXSkKLSAgaWYgdGVzdCAkZ3RfY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCi0gICAgICBbRGVmaW5lIGlmIHlvdXIgPGxvY2FsZS5oPiBmaWxlIGRlZmluZXMgTENfTUVTU0FHRVMuXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9tNC9saWItbGQubTQgYi9tNC9saWItbGQubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YzRlMmMuLjAwMDAwMDAKLS0tIGEvbTQvbGliLWxkLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCi1kbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCi1kbmwgd2l0aCByZXBsYWNlbWVudHMgcy9BQ18vQUNfTElCLyBhbmQgcy9sdF9jdi9hY2xfY3YvIHRvIGF2b2lkIGNvbGxpc2lvbgotZG5sIHdpdGggbGlidG9vbC5tNC4KLQotZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIHdpdGhfZ251X2xkIHRvIHllcyBvciBuby4KLUFDX0RFRlVOKFtBQ19MSUJfUFJPR19MRF9HTlVdLAotW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKLVsjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7Ci0qKQotICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKLWVzYWNdKQotd2l0aF9nbnVfbGQ9JGFjbF9jdl9wcm9nX2dudV9sZAotXSkKLQotZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIExELgotQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKLVtBQ19BUkdfV0lUSChnbnUtbGQsCi1bICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dXSwKLXRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLSMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCi1hY19wcm9nPWxkCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSBHQ0NdKQotICBjYXNlICRob3N0IGluCi0gICotKi1taW5ndyopCi0gICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopXQotICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKLWVsc2UKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCi1maQotQUNfQ0FDSEVfVkFMKGFjbF9jdl9wYXRoX0xELAotW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCi0gICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KLSAgICAgIGNhc2UgYCIkYWNsX2N2X3BhdGhfTEQiIC12IDI+JjEgPCAvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrIDs7Ci0gICAgICAqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRhY19zYXZlX2lmcyIKLWVsc2UKLSAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maV0pCi1MRD0iJGFjbF9jdl9wYXRoX0xEIgotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRMRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi10ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQotQUNfTElCX1BST0dfTERfR05VCi1dKQpkaWZmIC0tZ2l0IGEvbTQvbGliLWxpbmsubTQgYi9tNC9saWItbGluay5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNkMjZmYy4uMDAwMDAwMAotLS0gYS9tNC9saWItbGluay5tNAorKysgL2Rldi9udWxsCkBAIC0xLDcwOSArMCwwIEBACi0jIGxpYi1saW5rLm00IHNlcmlhbCAxMyAoZ2V0dGV4dC0wLjE3KQotZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLQotQUNfUFJFUkVRKDIuNTQpCi0KLWRubCBBQ19MSUJfTElOS0ZMQUdTKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCi1kbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCi1kbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAotZG5sIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZS4KLWRubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKLWRubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgotQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAotWwotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQotICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQotICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQotICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQotICBBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGxpbmsgd2l0aCBsaWJbXSQxXSwgW2FjX2N2X2xpYltdTmFtZVtdX2xpYnNdLCBbCi0gICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCi0gICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKLSAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKLSAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKLSAgICBhY19jdl9saWJbXU5hbWVbXV9wcmVmaXg9IiRMSUJbXU5BTUVbXV9QUkVGSVgiCi0gIF0pCi0gIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCi0gIExUTElCW11OQU1FPSIkYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzIgotICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKLSAgTElCW11OQU1FW11fUFJFRklYPSIkYWNfY3ZfbGliW11OYW1lW11fcHJlZml4IgotICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKLSAgQUNfU1VCU1QoW0xJQl1OQU1FKQotICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKLSAgQUNfU1VCU1QoW0xJQl1OQU1FW19QUkVGSVhdKQotICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQotICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KLSAgSEFWRV9MSUJbXU5BTUU9eWVzCi0gIHVuZGVmaW5lKFtOYW1lXSkKLSAgdW5kZWZpbmUoW05BTUVdKQotXSkKLQotZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKLWRubCBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZAotZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCi1kbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKLWRubCBzZXRzIGFuZCBBQ19TVUJTVHMgSEFWRV9MSUIke05BTUV9PXllcyBhbmQgdGhlIExJQiR7TkFNRX0gYW5kCi1kbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKLWRubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKLWRubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KLWRubCBTZXRzIGFuZCBBQ19TVUJTVHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUKLWRubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgotQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCi0gIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCi0gIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCi0KLSAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCi0gIGRubCBhY2NvcmRpbmdseS4KLSAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCi0KLSAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAotICBkbmwgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGxpYltdTmFtZSBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKLSAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgotICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQotCi0gIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCi0gICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgotICAgIEFDX1RSWV9MSU5LKFskM10sIFskNF0sIFthY19jdl9saWJbXU5hbWU9eWVzXSwgW2FjX2N2X2xpYltdTmFtZT1ub10pCi0gICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgXSkKLSAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KLSAgICBIQVZFX0xJQltdTkFNRT15ZXMKLSAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0pCi0gICAgQUNfTVNHX1JFU1VMVChbJExJQltdTkFNRV0pCi0gIGVsc2UKLSAgICBIQVZFX0xJQltdTkFNRT1ubwotICAgIGRubCBJZiAkTElCW11OQU1FIGRpZG4ndCBsZWFkIHRvIGEgdXNhYmxlIGxpYnJhcnksIHdlIGRvbid0IG5lZWQKLSAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCi0gICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgotICAgIExJQltdTkFNRT0KLSAgICBMVExJQltdTkFNRT0KLSAgICBMSUJbXU5BTUVbXV9QUkVGSVg9Ci0gIGZpCi0gIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQotICBBQ19TVUJTVChbTElCXU5BTUUpCi0gIEFDX1NVQlNUKFtMVExJQl1OQU1FKQotICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCi0gIHVuZGVmaW5lKFtOYW1lXSkKLSAgdW5kZWZpbmUoW05BTUVdKQotXSkKLQotZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKLWRubCAgIGFjbF9saWJleHQsCi1kbmwgICBhY2xfc2hsaWJleHQsCi1kbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKLWRubCAgIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAotZG5sICAgYWNsX2hhcmRjb2RlX2RpcmVjdCwKLWRubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgotQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCi1bCi0gIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCi0gIG00X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2NvbmZpZy5ycGF0aF0pXSkKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUwotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJPR19MRF0pICAgICAgICAgICAgZG5sIHdlIHVzZSAkTEQsICR3aXRoX2dudV9sZAotICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAotICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgotICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbl0sIGFjbF9jdl9ycGF0aCwgWwotICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKLSAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKLSAgICAuIC4vY29uZnRlc3Quc2gKLSAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCi0gICAgYWNsX2N2X3JwYXRoPWRvbmUKLSAgXSkKLSAgd2w9IiRhY2xfY3Zfd2wiCi0gIGFjbF9saWJleHQ9IiRhY2xfY3ZfbGliZXh0IgotICBhY2xfc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCi0gIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgotICBhY2xfbGlicmFyeV9uYW1lc19zcGVjPSIkYWNsX2N2X2xpYnJhcnlfbmFtZXNfc3BlYyIKLSAgYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKLSAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKLSAgYWNsX2hhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCi0gIGFjbF9oYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCi0gIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCi0gIEFDX0FSR19FTkFCTEUocnBhdGgsCi0gICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCi0gICAgOiwgZW5hYmxlX3JwYXRoPXllcykKLV0pCi0KLWRubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKLWRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KLWRubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgotZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCi1kbmwgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgotQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NfQk9EWV0sCi1bCi0gIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKLSAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKLSAgZG5sIEF1dG9jb25mID49IDIuNjEgc3VwcG9ydHMgZG90cyBpbiAtLXdpdGggb3B0aW9ucy4KLSAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQotICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KLSAgdXNlX2FkZGl0aW9uYWw9eWVzCi0gIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCi0gICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotICBdKQotICBBQ19MSUJfQVJHX1dJVEgoW2xpYl1OX0FfTV9FWy1wcmVmaXhdLAotWyAgLS13aXRoLWxpYl1OX0FfTV9FWy1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKLSAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKLVsKLSAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KLSAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCi0gICAgZWxzZQotICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgotICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWwotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLSAgICAgICAgXSkKLSAgICAgIGVsc2UKLSAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgotICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgotICAgICAgZmkKLSAgICBmaQotXSkKLSAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kCi0gIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KLSAgTElCW11OQU1FPQotICBMVExJQltdTkFNRT0KLSAgSU5DW11OQU1FPQotICBMSUJbXU5BTUVbXV9QUkVGSVg9Ci0gIHJwYXRoZGlycz0KLSAgbHRycGF0aGRpcnM9Ci0gIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KLSAgbmFtZXNfbmV4dF9yb3VuZD0nJDEgJDInCi0gIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KLSAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKLSAgICBuYW1lc19uZXh0X3JvdW5kPQotICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbwotICAgICAgYWxyZWFkeV9oYW5kbGVkPQotICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsgZG8KLSAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgotICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4KLSAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgotICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCi0gICAgICAgIGRubCBvciBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FsbC4KLSAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKLSAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKLSAgICAgICAgaWYgdGVzdCAtbiAiJHZhbHVlIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgotICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSR2YWx1ZSIKLSAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCi0gICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JHZhbHVlIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCi0gICAgICAgICAgICBkbmwgdGhhdCB0aGlzIGxpYnJhcnkgZG9lc24ndCBleGlzdC4gU28ganVzdCBkcm9wIGl0LgotICAgICAgICAgICAgOgotICAgICAgICAgIGZpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGxpYiRuYW1lIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQgJExERkxBR1MKLSAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCi0gICAgICAgICAgZm91bmRfZGlyPQotICAgICAgICAgIGZvdW5kX2xhPQotICAgICAgICAgIGZvdW5kX3NvPQotICAgICAgICAgIGZvdW5kX2E9Ci0gICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCi0gICAgICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTogc2hyZXh0PS5zbwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNocmV4dD0KLSAgICAgICAgICBmaQotICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCi0gICAgICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKLSAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgotICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCi0gICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCi0gICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCi0gICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGZpCi0gICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuCi0gICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCi0gICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICAgICAgICAgIGNhc2UgIiR4IiBpbgotICAgICAgICAgICAgICAgIC1MKikKLSAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAotICAgICAgICAgICAgICAgICAgZG5sIEZpcnN0IGxvb2sgZm9yIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGRubCBUaGVuIGxvb2sgZm9yIGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICBmaQotICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgIGRubCBGb3VuZCB0aGUgbGlicmFyeS4KLSAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCi0gICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHNoYXJlZCBsaWJyYXJ5LiBXZSBhdHRlbXB0IHRvIGhhcmRjb2RlIGl0cwotICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKLSAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgotICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9IG5vIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgotICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZwotICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCi0gICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCi0gICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KLSAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCi0gICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgotICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCi0gICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCi0gICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgotICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCi0gICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KLSAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCi0gICAgICAgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSBjb250YWluZWQgaW4gdGhlIExERkxBR1MKLSAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCi0gICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KLSAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgZG9uZQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgIGRubCBXZSBjYW5ub3QgdXNlICRhY2xfaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICi0gICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUsIGJlY2F1c2UgdGhpcyBkb2Vzbid0IGZpdCBpbiBmbGFncyBwYXNzZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQotICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgotICAgICAgICAgICAgICAgICAgICAgIGRubCBGSVhNRTogTm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgdXNlCi0gICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCi0gICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2EiICE9ICJYIjsgdGhlbgotICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KLSAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9hIgotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQotICAgICAgICAgICAgICAgIGRubCBmYWxsYmFjay4KLSAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciAtbCRuYW1lIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIGRubCBBc3N1bWUgdGhlIGluY2x1ZGUgZmlsZXMgYXJlIG5lYXJieS4KLSAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KLSAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCi0gICAgICAgICAgICAgICovJGFjbF9saWJkaXJzdGVtIHwgKi8kYWNsX2xpYmRpcnN0ZW0vKQotICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtLyInKiQsLCdgCi0gICAgICAgICAgICAgICAgTElCW11OQU1FW11fUFJFRklYPSIkYmFzZWRpciIKLSAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KLSAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgotICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAotICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCi0gICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAotICAgICAgICAgICAgICBkbmwgICAzLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1Mgb3IgdGhlIGFscmVhZHkKLSAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCi0gICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KLSAgICAgICAgICAgICAgICBoYXZlaXQ9Ci0gICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OwotICAgICAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DW11OQU1FOyBkbwotICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCi0gICAgICAgICAgICAgICAgICAgICAgSU5DW11OQU1FPSIke0lOQ1tdTkFNRX0ke0lOQ1tdTkFNRTorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgZG5sIExvb2sgZm9yIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KLSAgICAgICAgICAgICAgZG5sIFJlYWQgdGhlIC5sYSBmaWxlLiBJdCBkZWZpbmVzIHRoZSB2YXJpYWJsZXMKLSAgICAgICAgICAgICAgZG5sIGRsbmFtZSwgbGlicmFyeV9uYW1lcywgb2xkX2xpYnJhcnksIGRlcGVuZGVuY3lfbGlicywgY3VycmVudCwKLSAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KLSAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4KLSAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7Ci0gICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7Ci0gICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCi0gICAgICAgICAgICAgIGRubCBXZSB1c2Ugb25seSBkZXBlbmRlbmN5X2xpYnMuCi0gICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLSAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgotICAgICAgICAgICAgICAgICAgLUwqKQotICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgCi0gICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgotICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAotICAgICAgICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2xpYiwKLSAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKLSAgICAgICAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1Mgb3IgdGhlIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJExJQk5BTUUsCi0gICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbwotICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICAgLVIqKQotICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1SLy8nYAotICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KLSAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCi0gICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQotICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRkaXIiCi0gICAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KLSAgICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KLSAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGlyIgotICAgICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIGZpCi0gICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAtbCopCi0gICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4KLSAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2AKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICoubGEpCi0gICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4gVGhyb3cgYXdheSB0aGUgLmxhJ3MKLSAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKLSAgICAgICAgICAgICAgICAgICAgZG5sIG9wdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxhJCwsJ2AKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgICAgIGRubCBNb3N0IGxpa2VseSBhbiBpbW1lZGlhdGUgbGlicmFyeSBuYW1lLgotICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCi0gICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JGRlcCIKLSAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgZG5sIERpZG4ndCBmaW5kIHRoZSBsaWJyYXJ5OyBhc3N1bWUgaXQgaXMgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcmllcwotICAgICAgICAgICAgZG5sIGtub3duIHRvIHRoZSBsaW5rZXIgYW5kIHJ1bnRpbWUgbG9hZGVyLiAoQWxsIHRoZSBzeXN0ZW0KLSAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQotICAgICAgICAgICAgZG5sIHJ1bnRpbWUgbG9hZGVyLCBvdGhlcndpc2UgdGhlIHN5c3RlbSBpcyBzZXZlcmVseSBtaXNjb25maWd1cmVkLikKLSAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKLSAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZmkKLSAgICBkb25lCi0gIGRvbmUKLSAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KLSAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAotICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQotICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCi0gICAgICBhbGxkaXJzPQotICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKLSAgICAgIGRvbmUKLSAgICAgIGRubCBOb3RlOiBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KLSAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCi0gICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgotICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKLSAgICBlbHNlCi0gICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgotICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCi0gICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKLSAgICAgICAgZXZhbCBmbGFnPVwiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgotICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmbGFnIgotICAgICAgZG9uZQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgotICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCi0gICAgZG5sIGV4ZWN1dGFibGVzIGlzIC1SLiBUaGUgLVIgb3B0aW9ucyBhcmUgY3VtdWxhdGl2ZS4KLSAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KLSAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgotICAgIGRvbmUKLSAgZmkKLV0pCi0KLWRubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAotZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgotZG5sIFdvcmtzIG9ubHkgZm9yIENQUEZMQUdTLCBub3QgZm9yIExJQiogdmFyaWFibGVzIGJlY2F1c2UgdGhhdCBzb21ldGltZXMKLWRubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCi1BQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKLVsKLSAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KLSAgICBoYXZlaXQ9Ci0gICAgZm9yIHggaW4gJFskMV07IGRvCi0gICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQotICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCi0gICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgotICAgIGZpCi0gIGRvbmUKLV0pCi0KLWRubCBGb3IgdGhvc2UgY2FzZXMgd2hlcmUgYSB2YXJpYWJsZSBjb250YWlucyBzZXZlcmFsIC1MIGFuZCAtbCBvcHRpb25zCi1kbmwgcmVmZXJyaW5nIHRvIHVua25vd24gbGlicmFyaWVzIGFuZCBkaXJlY3RvcmllcywgdGhpcyBtYWNybyBkZXRlcm1pbmVzIHRoZQotZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgotZG5sIEFDX0xJQl9MSU5LRkxBR1NfRlJPTV9MSUJTKFtMREFERFZBUl0sIFtMSUJTVkFMVUVdLCBbVVNFLUxJQlRPT0xdKQotZG5sIHNldHMgTERBRERWQVIgdG8gbGlua2VyIG9wdGlvbnMgbmVlZGVkIHRvZ2V0aGVyIHdpdGggTElCU1ZBTFVFLgotZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCi1kbmwgb3RoZXJ3aXNlIGxpbmtpbmcgd2l0aG91dCBsaWJ0b29sIGlzIGFzc3VtZWQuCi1BQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19GUk9NX0xJQlNdLAotWwotICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCi0gICQxPQotICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCi0gICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKLSAgICAgIGRubCBiaW5hcnkuCi0gICAgICBycGF0aGRpcnM9Ci0gICAgICBuZXh0PQotICAgICAgZm9yIG9wdCBpbiAkMjsgZG8KLSAgICAgICAgaWYgdGVzdCAtbiAiJG5leHQiOyB0aGVuCi0gICAgICAgICAgZGlyPSIkbmV4dCIKLSAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCi0gICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCi0gICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKLSAgICAgICAgICBmaQotICAgICAgICAgIG5leHQ9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBjYXNlICRvcHQgaW4KLSAgICAgICAgICAgIC1MKSBuZXh0PXllcyA7OwotICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAotICAgICAgICAgICAgICAgICBkbmwgTm8gbmVlZCB0byBoYXJkY29kZSB0aGUgc3RhbmRhcmQgL3Vzci9saWIuCi0gICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgotICAgICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgICAgICBuZXh0PSA7OwotICAgICAgICAgICAgKikgbmV4dD0gOzsKLSAgICAgICAgICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBkb25lCi0gICAgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgLW4gIiIkMyIiOyB0aGVuCi0gICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCi0gICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgJDE9IiR7JDF9JHskMTorIH0tUiRkaXIiCi0gICAgICAgICAgZG9uZQotICAgICAgICBlbHNlCi0gICAgICAgICAgZG5sIFRoZSBsaW5rZXIgaXMgdXNlZCBmb3IgbGlua2luZyBkaXJlY3RseS4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0gICAgICAgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyCi0gICAgICAgICAgICBkbmwgbXVzdCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uCi0gICAgICAgICAgICBhbGxkaXJzPQotICAgICAgICAgICAgZm9yIGRpciBpbiAkcnBhdGhkaXJzOyBkbwotICAgICAgICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGRpciIKLSAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCi0gICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgotICAgICAgICAgICAgJDE9IiRmbGFnIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCi0gICAgICAgICAgICBmb3IgZGlyIGluICRycGF0aGRpcnM7IGRvCi0gICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKLSAgICAgICAgICAgICAgbGliZGlyPSIkZGlyIgotICAgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCi0gICAgICAgICAgICAgICQxPSIkeyQxfSR7JDE6KyB9JGZsYWciCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZmkKLSAgZmkKLSAgQUNfU1VCU1QoWyQxXSkKLV0pCmRpZmYgLS1naXQgYS9tNC9saWItcHJlZml4Lm00IGIvbTQvbGliLXByZWZpeC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg2ODRlMS4uMDAwMDAwMAotLS0gYS9tNC9saWItcHJlZml4Lm00CisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLSMgbGliLXByZWZpeC5tNCBzZXJpYWwgNSAoZ2V0dGV4dC0wLjE1KQotZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIEJydW5vIEhhaWJsZS4KLQotZG5sIEFDX0xJQl9BUkdfV0lUSCBpcyBzeW5vbnltb3VzIHRvIEFDX0FSR19XSVRIIGluIGF1dG9jb25mLTIuMTMsIGFuZAotZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAotZG5sIHJlcXVpcmUgZXhjZXNzaXZlIGJyYWNrZXRpbmcuCi1pZmRlZihbQUNfSEVMUF9TVFJJTkddLAotW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKLVtBQ19ERUZVTihbQUNfXVtMSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbJDJdLFskM10sWyQ0XSldKV0pCi0KLWRubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKLWRubCB0byBhY2Nlc3MgcHJldmlvdXNseSBpbnN0YWxsZWQgbGlicmFyaWVzLiBUaGUgYmFzaWMgYXNzdW1wdGlvbiBpcyB0aGF0Ci1kbmwgYSB1c2VyIHdpbGwgd2FudCBwYWNrYWdlcyB0byB1c2Ugb3RoZXIgcGFja2FnZXMgaGUgcHJldmlvdXNseSBpbnN0YWxsZWQKLWRubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KLWRubCBUaGlzIG1hY3JvIGlzIG5vdCBuZWVkZWQgaWYgb25seSBBQ19MSUJfTElOS0ZMQUdTIGlzIHVzZWQgdG8gbG9jYXRlCi1kbmwgbGlicmFyaWVzLCBidXQgaXMgb3RoZXJ3aXNlIHZlcnkgY29udmVuaWVudC4KLUFDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKLVsKLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJfTElOS0ZMQUdTXSkKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCi0gIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKLSAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdKQotICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQotICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KLSAgdXNlX2FkZGl0aW9uYWw9eWVzCi0gIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCi0gICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCi0gICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgotICBdKQotICBBQ19MSUJfQVJHX1dJVEgoW2xpYi1wcmVmaXhdLAotWyAgLS13aXRoLWxpYi1wcmVmaXhbPURJUl0gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKLSAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKLVsKLSAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KLSAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCi0gICAgZWxzZQotICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgotICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWwotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgotICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKLSAgICAgICAgXSkKLSAgICAgIGVsc2UKLSAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgotICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVtIgotICAgICAgZmkKLSAgICBmaQotXSkKLSAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KLSAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgotICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0Ci0gICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAotICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUywKLSAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKLSAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgotICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWC91c3IvaW5jbHVkZSI7IHRoZW4KLSAgICAgIGhhdmVpdD0KLSAgICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KLSAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKLSAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgotICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCi0gICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KLSAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgbGludXgqIHwgZ251KiB8IGsqYnNkKi1nbnUpIGhhdmVpdD15ZXM7OwotICAgICAgICAgICAgZXNhYwotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCi0gICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KLSAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgotICAgICAgICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0tSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgZmkKLSAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KLSAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAotICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAotICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTLAotICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9saWIgYW5kIHdlIGFyZSB1c2luZyBHQ0Mgb24gTGludXgsCi0gICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KLSAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgaGF2ZWl0PQotICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCi0gICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCi0gICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgotICAgICAgICAgIGhhdmVpdD15ZXMKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCi0gICAgICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCi0gICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCi0gICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICBmaQotICAgIGZpCi0gIGZpCi1dKQotCi1kbmwgQUNfTElCX1BSRVBBUkVfUFJFRklYIGNyZWF0ZXMgdmFyaWFibGVzIGFjbF9maW5hbF9wcmVmaXgsCi1kbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKLWRubCAkZXhlY19wcmVmaXggd2lsbCBleHBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KLUFDX0RFRlVOKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdLAotWwotICBkbmwgVW5mb3J0dW5hdGVseSwgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBnZXQgb25seSBmaW5hbGx5IGRldGVybWluZWQKLSAgZG5sIGF0IHRoZSBlbmQgb2YgY29uZmlndXJlLgotICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCi0gICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgotICBlbHNlCi0gICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKLSAgZmkKLSAgaWYgdGVzdCAiWCRleGVjX3ByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCi0gICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCi0gIGVsc2UKLSAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZmkKLSAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgotICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4IgotICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgotICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCi1dKQotCi1kbmwgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtzdGF0ZW1lbnRdKSBldmFsdWF0ZXMgc3RhdGVtZW50LCB3aXRoIHRoZQotZG5sIHZhcmlhYmxlcyBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGJvdW5kIHRvIHRoZSB2YWx1ZXMgdGhleSB3aWxsIGhhdmUKLWRubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgotQUNfREVGVU4oW0FDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWF0sCi1bCi0gIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKLSAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKLSAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCIKLSAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCi0gICQxCi0gIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiCi0gIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKLV0pCi0KLWRubCBBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQiBjcmVhdGVzIGEgdmFyaWFibGUgYWNsX2xpYmRpcnN0ZW0sIGNvbnRhaW5pbmcKLWRubCB0aGUgYmFzZW5hbWUgb2YgdGhlIGxpYmRpciwgZWl0aGVyICJsaWIiIG9yICJsaWI2NCIuCi1BQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfTVVMVElMSUJdLAotWwotICBkbmwgVGhlcmUgaXMgbm8gZm9ybWFsIHN0YW5kYXJkIHJlZ2FyZGluZyBsaWIgYW5kIGxpYjY0LiBUaGUgY3VycmVudAotICBkbmwgcHJhY3RpY2UgaXMgdGhhdCBvbiBhIHN5c3RlbSBzdXBwb3J0aW5nIDMyLWJpdCBhbmQgNjQtYml0IGluc3RydWN0aW9uCi0gIGRubCBzZXRzIG9yIEFCSXMsIDY0LWJpdCBsaWJyYXJpZXMgZ28gdW5kZXIgJHByZWZpeC9saWI2NCBhbmQgMzItYml0Ci0gIGRubCBsaWJyYXJpZXMgZ28gdW5kZXIgJHByZWZpeC9saWIuIFdlIGRldGVybWluZSB0aGUgY29tcGlsZXIncyBkZWZhdWx0Ci0gIGRubCBtb2RlIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBpbGVyJ3MgbGlicmFyeSBzZWFyY2ggcGF0aC4gSWYgYXQgbGVhc3QKLSAgZG5sIG9mIGl0cyBlbGVtZW50cyBlbmRzIGluIC9saWI2NCBvciBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgd2hvc2UgYWJzb2x1dGUKLSAgZG5sIHBhdGhuYW1lIGVuZHMgaW4gL2xpYjY0LCB3ZSBhc3N1bWUgYSA2NC1iaXQgQUJJLiBPdGhlcndpc2Ugd2UgdXNlIHRoZQotICBkbmwgZGVmYXVsdCwgbmFtZWx5ICJsaWIiLgotICBhY2xfbGliZGlyc3RlbT1saWIKLSAgc2VhcmNocGF0aD1gKExDX0FMTD1DICRDQyAtcHJpbnQtc2VhcmNoLWRpcnMpIDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICdzLF5saWJyYXJpZXM6ICwscCcgfCBzZWQgLWUgJ3MsXj0sLCdgCi0gIGlmIHRlc3QgLW4gIiRzZWFyY2hwYXRoIjsgdGhlbgotICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9IAl9IjsgSUZTPSI6IgotICAgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaHBhdGg7IGRvCi0gICAgICBpZiB0ZXN0IC1kICIkc2VhcmNoZGlyIjsgdGhlbgotICAgICAgICBjYXNlICIkc2VhcmNoZGlyIiBpbgotICAgICAgICAgICovbGliNjQvIHwgKi9saWI2NCApIGFjbF9saWJkaXJzdGVtPWxpYjY0IDs7Ci0gICAgICAgICAgKikgc2VhcmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYAotICAgICAgICAgICAgIGNhc2UgIiRzZWFyY2hkaXIiIGluCi0gICAgICAgICAgICAgICAqL2xpYjY0ICkgYWNsX2xpYmRpcnN0ZW09bGliNjQgOzsKLSAgICAgICAgICAgICBlc2FjIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0iJGFjbF9zYXZlX0lGUyIKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9tNC9saWJmYW1lLm00IGIvbTQvbGliZmFtZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU3MDU4NC4uMDAwMDAwMAotLS0gYS9tNC9saWJmYW1lLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLWRubCBBTV9QQVRIX0xJQkZBTUUoW01JTklNVU0tVkVSU0lPTiwgW0FDVElPTi1JRi1GT1VORCBbLCBBQ1RJT04tSUYtTk9ULUZPVU5EIFssIE1PRFVMRVNdXV1dKQotZG5sIFRlc3QgZm9yIGxpYmZhbWUsIGFuZCBkZWZpbmUgTElCRkFNRV9DRkxBR1MgYW5kIExJQkZBTUVfTElCUwotZG5sIFZpdmllbiBDaGFwcGVsaWVyIDEyLzExLzAwCi1kbmwgc3RvbGVuIGZyb20gT1JCaXQgYXV0b2NvbmYKLWRubAotQUNfREVGVU4oW0FNX1BBVEhfTElCRkFNRV0sCi1bZG5sIAotZG5sIEdldCB0aGUgY2ZsYWdzIGFuZCBsaWJyYXJpZXMgZnJvbSB0aGUgbGliZmFtZS1jb25maWcgc2NyaXB0Ci1kbmwKLUFDX0FSR19XSVRIKGxpYmZhbWUtcHJlZml4LFsgIC0td2l0aC1saWJmYW1lLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgbGliZmFtZSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCi0gICAgICAgICAgICBsaWJmYW1lX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgbGliZmFtZV9jb25maWdfcHJlZml4PSIiKQotQUNfQVJHX1dJVEgobGliZmFtZS1leGVjLXByZWZpeCxbICAtLXdpdGgtbGliZmFtZS1leGVjLXByZWZpeD1QRlggRXhlYyBwcmVmaXggd2hlcmUgbGliZmFtZSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCi0gICAgICAgICAgICBsaWJmYW1lX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJmYW1lX2NvbmZpZ19leGVjX3ByZWZpeD0iIikKLUFDX0FSR19FTkFCTEUobGliZmFtZXRlc3QsIFsgIC0tZGlzYWJsZS1saWJmYW1ldGVzdCAgICAgICBEbyBub3QgdHJ5IHRvIGNvbXBpbGUgYW5kIHJ1biBhIHRlc3QgbGliZmFtZSBwcm9ncmFtXSwKLQkJICAgICwgZW5hYmxlX2xpYmZhbWV0ZXN0PXllcykKLQotICBpZiB0ZXN0IHgkbGliZmFtZV9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KLSAgICAgbGliZmFtZV9jb25maWdfYXJncz0iJGxpYmZhbWVfY29uZmlnX2FyZ3MgLS1leGVjLXByZWZpeD0kbGliZmFtZV9jb25maWdfZXhlY19wcmVmaXgiCi0gICAgIGlmIHRlc3QgeCR7TElCRkFNRV9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgotICAgICAgICBMSUJGQU1FX0NPTkZJRz0kbGliZmFtZV9jb25maWdfZXhlY19wcmVmaXgvYmluL2xpYmZhbWUtY29uZmlnCi0gICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgeCRsaWJmYW1lX2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KLSAgICAgbGliZmFtZV9jb25maWdfYXJncz0iJGxpYmZhbWVfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGxpYmZhbWVfY29uZmlnX3ByZWZpeCIKLSAgICAgaWYgdGVzdCB4JHtMSUJGQU1FX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCi0gICAgICAgIExJQkZBTUVfQ09ORklHPSRsaWJmYW1lX2NvbmZpZ19wcmVmaXgvYmluL2xpYmZhbWUtY29uZmlnCi0gICAgIGZpCi0gIGZpCi0KLSAgQUNfUEFUSF9QUk9HKExJQkZBTUVfQ09ORklHLCBsaWJmYW1lLWNvbmZpZywgbm8pCi0gIG1pbl9saWJmYW1lX3ZlcnNpb249aWZlbHNlKFskMV0sICwgMC45LjAsICQxKQotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpYmZhbWUgLSB2ZXJzaW9uID49ICRtaW5fbGliZmFtZV92ZXJzaW9uKQotICBub19saWJmYW1lPSIiCi0gIGlmIHRlc3QgIiRMSUJGQU1FX0NPTkZJRyIgPSAibm8iIDsgdGhlbgotICAgIG5vX2xpYmZhbWU9eWVzCi0gIGVsc2UKLSAgICBMSUJGQU1FX0NGTEFHUz1gJExJQkZBTUVfQ09ORklHICRsaWJmYW1lX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAotICAgIExJQkZBTUVfTElCUz1gJExJQkZBTUVfQ09ORklHICRsaWJmYW1lX2NvbmZpZ19hcmdzIC0tbGlic2AKLSAgICBsaWJmYW1lX2NvbmZpZ19tYWpvcl92ZXJzaW9uPWAkTElCRkFNRV9DT05GSUcgJGxpYmZhbWVfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAotCSAgIHNlZCAtZSAncyxbW14wLTkuXV0sLGcnIC1lICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCi0gICAgbGliZmFtZV9jb25maWdfbWlub3JfdmVyc2lvbj1gJExJQkZBTUVfQ09ORklHICRsaWJmYW1lX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKLQkgICBzZWQgLWUgJ3MsW1teMC05Ll1dLCxnJyAtZSAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMi8nYAotICAgIGxpYmZhbWVfY29uZmlnX21pY3JvX3ZlcnNpb249YCRMSUJGQU1FX0NPTkZJRyAkbGliZmFtZV9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCi0JICAgc2VkIC1lICdzLFtbXjAtOS5dXSwsZycgLWUgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9saWJmYW1ldGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgJExJQkZBTUVfQ0ZMQUdTIgotICAgICAgTElCUz0iJExJQkZBTUVfTElCUyAkTElCUyIKLWRubAotZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIExJQkZBTUUgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5Ci1kbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIGxpYmZhbWUtY29uZmlnIHRvIHNvbWUgZXh0ZW50Ci1kbmwKLSAgICAgIHJtIC1mIGNvbmYubGliZmFtZXRlc3QKLSAgICAgIEFDX1RSWV9SVU4oWwotI2luY2x1ZGUgPGZhbWUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1pbnQgCi1tYWluICgpCi17Ci0gIGludCBtYWpvciwgbWlub3IsIG1pY3JvOwotICBjaGFyICp0bXBfdmVyc2lvbjsKLQotICBzeXN0ZW0gKCJ0b3VjaCBjb25mLmxpYmZhbWV0ZXN0Iik7Ci0KLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCi0gIHRtcF92ZXJzaW9uID0gc3RyZHVwKCIkbWluX2xpYmZhbWVfdmVyc2lvbiIpOwotICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7Ci0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZ1xuIiwgIiRtaW5fbGliZmFtZV92ZXJzaW9uIik7Ci0gICAgIGV4aXQoMSk7Ci0gICB9Ci0KLSAgaWYgKChsaWJmYW1lX21ham9yX3ZlcnNpb24gIT0gJGxpYmZhbWVfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8Ci0gICAgICAobGliZmFtZV9taW5vcl92ZXJzaW9uICE9ICRsaWJmYW1lX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAotICAgICAgKGxpYmZhbWVfbWljcm9fdmVyc2lvbiAhPSAkbGliZmFtZV9jb25maWdfbWljcm9fdmVyc2lvbikpCi0gICAgewotICAgICAgcHJpbnRmKCJcbioqKiAnbGliZmFtZS1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IExpYmZhbWUgKCVkLiVkLiVkKVxuIiwgCi0gICAgICAgICAgICAgJGxpYmZhbWVfY29uZmlnX21ham9yX3ZlcnNpb24sICRsaWJmYW1lX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkbGliZmFtZV9jb25maWdfbWljcm9fdmVyc2lvbiwKLSAgICAgICAgICAgICBsaWJmYW1lX21ham9yX3ZlcnNpb24sIGxpYmZhbWVfbWlub3JfdmVyc2lvbiwgbGliZmFtZV9taWNyb192ZXJzaW9uKTsKLSAgICAgIHByaW50ZiAoIioqKiB3YXMgZm91bmQhIElmIGxpYmZhbWUtY29uZmlnIHdhcyBjb3JyZWN0LCB0aGVuIGl0IGlzIGJlc3RcbiIpOwotICAgICAgcHJpbnRmICgiKioqIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gb2YgbGliZmFtZS4gWW91IG1heSBhbHNvIGJlIGFibGUgdG8gZml4IHRoZSBlcnJvclxuIik7Ci0gICAgICBwcmludGYoIioqKiBieSBtb2RpZnlpbmcgeW91ciBMRF9MSUJSQVJZX1BBVEggZW52aXJvbWVudCB2YXJpYWJsZSwgb3IgYnkgZWRpdGluZ1xuIik7Ci0gICAgICBwcmludGYoIioqKiAvZXRjL2xkLnNvLmNvbmYuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCBpc1xuIik7Ci0gICAgICBwcmludGYoIioqKiByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbS5cbiIpOwotICAgICAgcHJpbnRmKCIqKiogSWYgbGliZmFtZS1jb25maWcgd2FzIHdyb25nLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExJQkZBTUVfQ09ORklHXG4iKTsKLSAgICAgIHByaW50ZigiKioqIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGNvcHkgb2YgbGliZmFtZS1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGUgY29uZmlnLmNhY2hlXG4iKTsKLSAgICAgIHByaW50ZigiKioqIGJlZm9yZSByZS1ydW5uaW5nIGNvbmZpZ3VyZVxuIik7Ci0gICAgfSAKLSNpZiBkZWZpbmVkIChMSUJGQU1FX01BSk9SX1ZFUlNJT04pICYmIGRlZmluZWQgKExJQkZBTUVfTUlOT1JfVkVSU0lPTikgJiYgZGVmaW5lZCAoTElCRkFNRV9NSUNST19WRVJTSU9OKQotICBlbHNlIGlmICgobGliZmFtZV9tYWpvcl92ZXJzaW9uICE9IExJQkZBTUVfTUFKT1JfVkVSU0lPTikgfHwKLQkgICAobGliZmFtZV9taW5vcl92ZXJzaW9uICE9IExJQkZBTUVfTUlOT1JfVkVSU0lPTikgfHwKLSAgICAgICAgICAgKGxpYmZhbWVfbWljcm9fdmVyc2lvbiAhPSBMSUJGQU1FX01JQ1JPX1ZFUlNJT04pKQotICAgIHsKLSAgICAgIHByaW50ZigiKioqIGxpYmZhbWUgaGVhZGVyIGZpbGVzICh2ZXJzaW9uICVkLiVkLiVkKSBkbyBub3QgbWF0Y2hcbiIsCi0JICAgICBMSUJGQU1FX01BSk9SX1ZFUlNJT04sIExJQkZBTUVfTUlOT1JfVkVSU0lPTiwgTElCRkFNRV9NSUNST19WRVJTSU9OKTsKLSAgICAgIHByaW50ZigiKioqIGxpYnJhcnkgKHZlcnNpb24gJWQuJWQuJWQpXG4iLAotCSAgICAgbGliZmFtZV9tYWpvcl92ZXJzaW9uLCBsaWJmYW1lX21pbm9yX3ZlcnNpb24sIGxpYmZhbWVfbWljcm9fdmVyc2lvbik7Ci0gICAgfQotI2VuZGlmIC8qIGRlZmluZWQgKExJQkZBTUVfTUFKT1JfVkVSU0lPTikgLi4uICovCi0gIGVsc2UKLSAgICB7Ci0gICAgICBpZiAoKGxpYmZhbWVfbWFqb3JfdmVyc2lvbiA+IG1ham9yKSB8fAotICAgICAgICAoKGxpYmZhbWVfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKGxpYmZhbWVfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKLSAgICAgICAgKChsaWJmYW1lX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChsaWJmYW1lX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmIChsaWJmYW1lX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgfQotICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgbGliZmFtZSAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCi0gICAgICAgICAgICAgICBsaWJmYW1lX21ham9yX3ZlcnNpb24sIGxpYmZhbWVfbWlub3JfdmVyc2lvbiwgbGliZmFtZV9taWNyb192ZXJzaW9uKTsKLSAgICAgICAgcHJpbnRmKCIqKiogWW91IG5lZWQgYSB2ZXJzaW9uIG9mIGxpYmZhbWUgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAotCSAgICAgICBtYWpvciwgbWlub3IsIG1pY3JvKTsKLSAgICAgICAgcHJpbnRmKCIqKiogbGliZmFtZSBpcyBhbHdheXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy1lbGV2ZXMuZW5zdC1icmV0YWduZS5mci9+Y2hhcHBlbGkvZmFtZVxuIik7Ci0gICAgICAgIHByaW50ZigiKioqXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOwotICAgICAgICBwcmludGYoIioqKiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB3cm9uZyBjb3B5IG9mIHRoZSBsaWJmYW1lLWNvbmZpZyBzaGVsbCBzY3JpcHQgaXNcbiIpOwotICAgICAgICBwcmludGYoIioqKiBiZWluZyBmb3VuZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb25cbiIpOwotICAgICAgICBwcmludGYoIioqKiBvZiBsaWJmYW1lLCBidXQgeW91IGNhbiBhbHNvIHNldCB0aGUgTElCRkFNRV9DT05GSUcgZW52aXJvbm1lbnQgdG8gcG9pbnQgdG8gdGhlXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogY29ycmVjdCBjb3B5IG9mIGxpYmZhbWUtY29uZmlnLiAoSW4gdGhpcyBjYXNlLCB5b3Ugd2lsbCBoYXZlIHRvXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogbW9kaWZ5IHlvdXIgTERfTElCUkFSWV9QQVRIIGVudmlyb21lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mXG4iKTsKLSAgICAgICAgcHJpbnRmKCIqKiogc28gdGhhdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMgYXJlIGZvdW5kIGF0IHJ1bi10aW1lKSlcbiIpOwotICAgICAgfQotICAgIH0KLSAgcmV0dXJuIDE7Ci19Ci1dLCwgbm9fbGliZmFtZT15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQotICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgIngkbm9fbGliZmFtZSIgPSB4IDsgdGhlbgotICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAotICBlbHNlCi0gICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgIGlmIHRlc3QgIiRMSUJGQU1FX0NPTkZJRyIgPSAibm8iIDsgdGhlbgotICAgICAgIGVjaG8gIioqKiBUaGUgbGliZmFtZS1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBsaWJmYW1lIGNvdWxkIG5vdCBiZSBmb3VuZCIKLSAgICAgICBlY2hvICIqKiogSWYgbGliZmFtZSB3YXMgaW5zdGFsbGVkIGluIFBSRUZJWCwgbWFrZSBzdXJlIFBSRUZJWC9iaW4gaXMgaW4iCi0gICAgICAgZWNobyAiKioqIHlvdXIgcGF0aCwgb3Igc2V0IHRoZSBMSUJGQU1FX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUiCi0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBsaWJmYW1lLWNvbmZpZy4iCi0gICAgIGVsc2UKLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYubGliZmFtZXRlc3QgOyB0aGVuCi0gICAgICAgIDoKLSAgICAgICBlbHNlCi0gICAgICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gbGliZmFtZSB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKLSAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJExJQkZBTUVfQ0ZMQUdTIgotICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJGQU1FX0xJQlMiCi0gICAgICAgICAgQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgPGZhbWUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotXSwgICAgICBbIHJldHVybiAoKGxpYmZhbWVfbWFqb3JfdmVyc2lvbikgfHwgKGxpYmZhbWVfbWlub3JfdmVyc2lvbikgfHwgKGxpYmZhbWVfbWljcm9fdmVyc2lvbikpOyBdLAotICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKLSAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIGxpYmZhbWUgb3IgZmluZGluZyB0aGUgd3JvbmciCi0gICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgTElCRkFNRS4gSWYgaXQgaXMgbm90IGZpbmRpbmcgbGliZmFtZSwgeW91J2xsIG5lZWQgdG8gc2V0IHlvdXIiCi0gICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCi0gICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKLSAgICAgICAgICBlY2hvICIqKiogaXMgcmVxdWlyZWQgb24geW91ciBzeXN0ZW0iCi0JICBlY2hvICIqKioiCi0gICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgotICAgICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCIKLSAgICAgICAgICBlY2hvICIqKioiIF0sCi0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKLSAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgbGliZmFtZSB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgotICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIGxpYmZhbWUgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCi0gICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIGxpYmZhbWUtY29uZmlnIHNjcmlwdDogJExJQkZBTUVfQ09ORklHIiBdKQotICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgICAgZmkKLSAgICAgZmkKLSAgICAgTElCRkFNRV9DRkxBR1M9IiIKLSAgICAgTElCRkFNRV9MSUJTPSIiCi0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCi0gIGZpCi0KLSAgQUNfU1VCU1QoTElCRkFNRV9DRkxBR1MpCi0gIEFDX1NVQlNUKExJQkZBTUVfTElCUykKLSAgcm0gLWYgY29uZi5saWJmYW1ldGVzdAotXSkKZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTgwODQ0Li4wMDAwMDAwCi0tLSBhL200L2xpYnRvb2wubTQKKysrIC9kZXYvbnVsbApAQCAtMSw4Mzg3ICswLDAgQEAKLSMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCi0jCi0jICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIDIwMDMtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCi0jIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Ygb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0IGlzIGJ1aWx0Ci0jIHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZSAgc2FtZQotIyBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0jCi0jIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi1dKQotCi0jIHNlcmlhbCA1OCBMVF9JTklUCi0KLQotIyBMVF9QUkVSRVEoVkVSU0lPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsYWluIGFuZCBleGl0IGlmIHRoaXMgbGlidG9vbCB2ZXJzaW9uIGlzIGxlc3MgdGhhdCBWRVJTSU9OLgotbTRfZGVmdW4oW0xUX1BSRVJFUV0sCi1bbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW0xUX1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgLTEsCi0gICAgICAgW200X2RlZmF1bHQoWyQzXSwKLQkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKLQkJICAgICAgICAgICAgIDYzKV0pXSwKLSAgICAgICBbJDJdKV0pCi0KLQotIyBfTFRfQ0hFQ0tfQlVJTERESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsYWluIGlmIHRoZSBhYnNvbHV0ZSBidWlsZCBkaXJlY3RvcnkgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMKLW00X2RlZnVuKFtfTFRfQ0hFQ0tfQlVJTERESVJdLAotW2Nhc2UgYHB3ZGAgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgQUNfTVNHX1dBUk4oW0xpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBgcHdkYF0pIDs7Ci1lc2FjCi1dKQotCi0KLSMgTFRfSU5JVChbT1BUSU9OU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX0lOSVRdLAotW0FDX1BSRVJFUShbMi42Ml0pZG5sIFdlIHVzZSBBQ19QQVRIX1BST0dTX0ZFQVRVUkVfQ0hFQ0sKLUFDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAotQUNfQkVGT1JFKFskMF0sIFtMVF9MQU5HXSlkbmwKLUFDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKLUFDX0JFRk9SRShbJDBdLCBbTFRETF9JTklUXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19CVUlMRERJUl0pZG5sCi0KLWRubCBBdXRvY29uZiBkb2Vzbid0IGNhdGNoIHVuZXhwYW5kZWQgTFRfIG1hY3JvcyBieSBkZWZhdWx0OgotbTRfcGF0dGVybl9mb3JiaWQoW15fP0xUX1tBLVpfXSskXSlkbmwKLW00X3BhdHRlcm5fYWxsb3coW14oX0xUX0VPRnxMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XfExUX01VTFRJX01PRFVMRSkkXSlkbmwKLWRubCBhY2xvY2FsIGRvZXNuJ3QgcHVsbCBsdG9wdGlvbnMubTQsIGx0c3VnYXIubTQsIG9yIGx0dmVyc2lvbi5tNAotZG5sIHVubGVzcyB3ZSByZXF1aXJlIGFuIEFDX0RFRlVOZWQgbWFjcm86Ci1BQ19SRVFVSVJFKFtMVE9QVElPTlNfVkVSU0lPTl0pZG5sCi1BQ19SRVFVSVJFKFtMVFNVR0FSX1ZFUlNJT05dKWRubAotQUNfUkVRVUlSRShbTFRWRVJTSU9OX1ZFUlNJT05dKWRubAotQUNfUkVRVUlSRShbTFRPQlNPTEVURV9WRVJTSU9OXSlkbmwKLW00X3JlcXVpcmUoW19MVF9QUk9HX0xUTUFJTl0pZG5sCi0KLV9MVF9TSEVMTF9JTklUKFtTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofV0pCi0KLWRubCBQYXJzZSBPUFRJT05TCi1fTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSRsdG1haW4KLQotIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotQUNfU1VCU1QoTElCVE9PTClkbmwKLQotX0xUX1NFVFVQCi0KLSMgT25seSBleHBhbmQgb25jZToKLW00X2RlZmluZShbTFRfSU5JVF0pCi1dKSMgTFRfSU5JVAotCi0jIE9sZCBuYW1lczoKLUFVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCi1BVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKLWRubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCi0KLQotIyBfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QUkVQQVJFX0NDX0JBU0VOQU1FXSwgWwotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1mdW5jX2NjX2Jhc2VuYW1lICgpCi17Ci0gICAgZm9yIGNjX3RlbXAgaW4gQFN8QCoiIjsgZG8KLSAgICAgIGNhc2UgJGNjX3RlbXAgaW4KLSAgICAgICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKLSAgICAgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7Ci0gICAgICAgIFwtKikgOzsKLSAgICAgICAgKikgYnJlYWs7OwotICAgICAgZXNhYwotICAgIGRvbmUKLSAgICBmdW5jX2NjX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKLX0KLV0pIyBfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRQotCi0KLSMgX0xUX0NDX0JBU0VOQU1FKENDKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEl0IHdvdWxkIGJlIGNsZWFyZXIgdG8gY2FsbCBBQ19SRVFVSVJFcyBmcm9tIF9MVF9QUkVQQVJFX0NDX0JBU0VOQU1FLAotIyBidXQgdGhhdCBtYWNybyBpcyBhbHNvIGV4cGFuZGVkIGludG8gZ2VuZXJhdGVkIGxpYnRvb2wgc2NyaXB0LCB3aGljaAotIyBhcnJhbmdlcyBmb3IgJFNFRCBhbmQgJEVDSE8gdG8gYmUgc2V0IGJ5IGRpZmZlcmVudCBtZWFucy4KLW00X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAotW200X3JlcXVpcmUoW19MVF9QUkVQQVJFX0NDX0JBU0VOQU1FXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9ERUNMX1NFRF0pZG5sCi1BQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCi1mdW5jX2NjX2Jhc2VuYW1lICQxCi1jY19iYXNlbmFtZT0kZnVuY19jY19iYXNlbmFtZV9yZXN1bHQKLV0pCi0KLQotIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSXQgaXMgb2theSB0byB1c2UgdGhlc2UgZmlsZSBjb21tYW5kcyBhbmQgYXNzdW1lIHRoZXkgaGF2ZSBiZWVuIHNldAotIyBzZW5zaWJseSBhZnRlciAnbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KLW00X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKLVs6ICR7Q1A9ImNwIC1mIn0KLTogJHtNVj0ibXYgLWYifQotOiAke1JNPSJybSAtZiJ9Ci1dKSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUwotCi0KLSMgX0xUX1NFVFVQCi0jIC0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9TRVRVUF0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSlkbmwKLQotX0xUX0RFQ0woW10sIFtQQVRIX1NFUEFSQVRPUl0sIFsxXSwgW1RoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbV0pZG5sCi1kbmwKLV9MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCi1fTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCi1fTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCi1kbmwKLV9MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKLV9MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCi1fTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAotZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAotQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCi1kbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi1fTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKLWRubAotQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAotX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAotX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAotZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAotbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DTURfVFJVTkNBVEVdKWRubAotCi1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCi0jIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKLSMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCi1pZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi1dKQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi0KLV9MVF9DSEVDS19PQkpESVIKLQotbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0gICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotCi13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotb2xkX0NDPSRDQwotb2xkX0NGTEFHUz0kQ0ZMQUdTCi0KLSMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KLQotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi1jYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotZmlsZV9tYWdpYyopCi0gIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICBfTFRfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi0jIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQotX0xUX0xBTkdfQ19DT05GSUcKLV9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi1fTFRfQ09ORklHX0NPTU1BTkRTCi1dKSMgX0xUX1NFVFVQCi0KLQotIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCi1tNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAotWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KLSMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KLWRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi1dKQotCi0jIF9MVF9QUk9HX0xUTUFJTgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tICdjb25maWd1cmUnLCBhbmQgJ2NvbmZpZy5zdGF0dXMnCi0jIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCi0jICdjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKLSMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KLW00X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAotW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQotbHRtYWluPSRhY19hdXhfZGlyL2x0bWFpbi5zaAotXSkjIF9MVF9QUk9HX0xUTUFJTgotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEFjY3VtdWxhdGUgY29kZSBmb3IgY3JlYXRpbmcgbGlidG9vbC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBTbyB0aGF0IHdlIGNhbiByZWNyZWF0ZSBhIGZ1bGwgbGlidG9vbCBzY3JpcHQgaW5jbHVkaW5nIGFkZGl0aW9uYWwKLSMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKLSMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSAnbGlidG9vbCcKLSMgbGFiZWwuCi0KLQotIyBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbSU5JVC1DT01NQU5EU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVnaXN0ZXIgSU5JVC1DT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgotbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xfSU5JVF0sCi1bbTRfaWZ2YWwoWyQxXSwKLSAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0sCi0gICAgICAgICAgICAgICAgICAgICBbJDEKLV0pXSldKQotCi0jIEluaXRpYWxpemUuCi1tNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKLQotCi0jIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVnaXN0ZXIgQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KLW00X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKLVttNF9pZnZhbChbJDFdLAotICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sCi0gICAgICAgICAgICAgICAgICAgICBbJDEKLV0pXSldKQotCi0jIEluaXRpYWxpemUuCi1tNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10pCi0KLQotIyBfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoW0NPTU1BTkRTXSwgW0lOSVRfQ09NTUFORFNdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCi1bX0xUX0NPTkZJR19MSUJUT09MKFskMV0pCi1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbJDJdKQotXSkKLQotCi0jIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZCBsZWFkaW5nIGNvbW1lbnQgbWFya3MgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggbGluZSwgYW5kIGEgdHJhaWxpbmcKLSMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgotbTRfZGVmaW5lKFtfTFRfRk9STUFUX0NPTU1FTlRdLAotW200X2lmdmFsKFskMV0sIFsKLW00X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCi0gICAgICAgICAgICAgIFtbJ2AkXF1dLCBbXFxcJl0pXW00X2JtYXRjaChbJDFdLCBbWyE/Ll0kXSwgW10sIFsuXSkKLSldKQotCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBGSVhNRTogRWxpbWluYXRlIFZBUk5BTUUgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0KLSMgX0xUX0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSwgW0lTLVRBR0dFRD9dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENPTkZJR05BTUUgaXMgdGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIHZhbHVlIGluIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSMgVkFSTkFNRSBpcyB0aGUgKGJhc2UpIG5hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KLSMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCi0jIFZBUk5BTUUuICBBbnkgb3RoZXIgdmFsdWUgd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgotbTRfZGVmaW5lKFtfTFRfREVDTF0sCi1bbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAotICAgIFtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtsaWJ0b29sX25hbWVdLAotCVttNF9pZnZhbChbJDFdLCBbJDFdLCBbJDJdKV0pCi0gICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQotICAgIG00X2lmdmFsKFskNF0sCi0JW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2Rlc2NyaXB0aW9uXSwgWyQ0XSldKQotICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKLQlbdGFnZ2VkP10sIFttNF9pZnZhbChbJDVdLCBbeWVzXSwgW25vXSldKV0pCi1dKQotCi0KLSMgX0xUX1RBR0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbX0xUX1RBR0RFQ0xdLCBbX0xUX0RFQ0woWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgW3llc10pXSkKLQotCi0jIGx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAotW19sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFt5ZXNdLCAkQCldKQotCi0KLSMgX2x0X2RlY2xfZmlsdGVyKFNVQktFWSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAotW200X2Nhc2UoWyQjXSwKLSAgWzBdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCi0gIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKLSAgWzJdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCi0gIFszXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbJDNdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCi0gIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAotXSkKLQotCi0jIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAotW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMV0sICRAKV0pCi0KLQotIyBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKLVtfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzJdLCAkQCldKQotCi0KLSMgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCi1bbTRfYXNzZXJ0KFskIyA8PSAyXSlkbmwKLV8kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAotICAgIG00X2lmdmFsKFskMl0sIFtbJDJdXSwgW200X2RxdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyldKSwKLSAgICBtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfcXVvdGUoX0xUX1RBR1MpKSwgWyBdKSldKQotbTRfZGVmaW5lKFtfbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAotW200X2lmdmFsKFskM10sIFtsdF9jb21iaW5lKFskMV0sIFskMl0sIFtfXSwgJDMpXSldKQotCi0KLSMgbHRfZGVjbF9hbGxfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kZWNsX2FsbF92YXJuYW1lc10sCi1bXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCi0gICAgIG00X2lmKFskMl0sIFtdLAotCSAgIG00X3F1b3RlKGx0X2RlY2xfdmFybmFtZXMpLAotCW00X3F1b3RlKG00X3NoaWZ0KCRAKSkpKVtdZG5sCi1dKQotbTRfZGVmaW5lKFtfbHRfZGVjbF9hbGxfdmFybmFtZXNdLAotW2x0X2pvaW4oJEAsIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFskMV0sCi0JCQlsdF9kZWNsX3RhZ192YXJuYW1lcyhbWywgXV0sIG00X3NoaWZ0KCRAKSkpKWRubAotXSkKLQotCi0jIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoW1ZBUk5BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gJ2NvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCi0jIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiAnY29uZmlndXJlJy4gIFZBUk5BTUUKLSMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgotbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKLVskMT0nYCRFQ0hPICIkXVskMSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKLQotCi0jIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgV2UgZGVsaW1pdCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgd2l0aCBzaW5nbGUgcXVvdGVzLCBzbyB3aGVuCi0jIHdlIHdyaXRlIHRoZW0gdG8gY29uZmlnLnN0YXR1cywgd2UgaGF2ZSB0byBiZSBzdXJlIHRvIHF1b3RlIGFsbAotIyBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzIHByb3Blcmx5LiAgSW4gY29uZmlndXJlLCB0aGlzIG1hY3JvIGV4cGFuZHMKLSMgZWFjaCB2YXJpYWJsZSBkZWNsYXJlZCB3aXRoIF9MVF9ERUNMIChhbmQgX0xUX1RBR0RFQ0wpIGludG86Ci0jCi0jICAgIDx2YXI+PSdgJEVDSE8gIiQ8dmFyPiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKLVttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAotICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCi0KLQotIyBfTFRfTElCVE9PTF9UQUdTCi0jIC0tLS0tLS0tLS0tLS0tLS0KLSMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAotbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAotW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKLWF2YWlsYWJsZV90YWdzPSdfTFRfVEFHUydkbmwKLV0pCi0KLQotIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCi0jIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgotIwotIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCi0jICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQotbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKLVtfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKLQkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCi1tNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKLSAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCi1tNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKLSAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKLSAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKLSAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKLSAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKLW00X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAotXSkKLQotCi0jIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcwotIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSAnbGlidG9vbCcKLSMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCi0jIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KLW00X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCi1bbTRfZm9yZWFjaChbX2x0X3Zhcl0sCi0gICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKLSAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQotCi0KLSMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKLVttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAotICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCi0KLQotIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQotCi0KLSMgX0xUX0NPTkZJR19DT01NQU5EUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgotIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKLSMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCi0jIGludG8gJ2NvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgotIyBmb3IgbG9vcHMgaW4gJ2NvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAotIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgotbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAotW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAotCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCi0JZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAotCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAotCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6Ci0gICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAotICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKLSAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAotICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgotICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAotICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQotXSkjX0xUX0NPTkZJR19DT01NQU5EUwotCi0KLSMgSW5pdGlhbGl6ZS4KLW00X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAotWwotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1zZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCi1kb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCi1kZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JwotX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCi1MVENDPSckTFRDQycKLUxUQ0ZMQUdTPSckTFRDRkxBR1MnCi1jb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCi0KLSMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KLWZ1bmNfZmFsbGJhY2tfZWNobyAoKQotewotICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotXCRbXTEKLV9MVEVDSE9fRU9GJwotfQotCi0jIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgotZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCi1dXSwgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyk7IGRvCi0gICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCi0gICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi1kb25lCi0KLSMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLWZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAotXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KLSAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLWRvbmUKLQotX0xUX09VVFBVVF9MSUJUT09MX0lOSVQKLV0pCi0KLSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoRklMRSwgW0NPTU1FTlRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KLSMgcmV1c2UgdGhlIGVudmlyb25tZW50IGxlYXJuZWQgYnkgdGhlIHBhcmVudCBzY3JpcHQsIGFuZCBtYWtlIHRoZQotIyBmaWxlIGV4ZWN1dGFibGUuICBJZiBDT01NRU5UIGlzIHN1cHBsaWVkLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUKLSMgJyMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcwotIyBtYWNybywgYWRkaXRpb25hbCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byBGSUxFIHRvIGZvcm0gdGhlIGJvZHkgb2YKLSMgdGhlIGNoaWxkIHNjcmlwdC4gIFRoZSBtYWNybyBlbmRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHRoZQotIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgotbTRfaWZkZWYoW0FTX0lOSVRfR0VORVJBVEVEXSwKLVttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLFtBU19JTklUX0dFTkVSQVRFRCgkQCldKV0sCi1bbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSwKLVttNF9yZXF1aXJlKFtBU19QUkVQQVJFXSldZG5sCi1bbTRfcHVzaGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV1kbmwKLVtsdF93cml0ZV9mYWlsPTAKLWNhdCA+JDEgPDxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCi0jISAkU0hFTEwKLSMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KLSQyCi1TSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQotZXhwb3J0IFNIRUxMCi1fQVNFT0YKLWNhdCA+PiQxIDw8XF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKLUFTX1NIRUxMX1NBTklUSVpFCi1fQVNfUFJFUEFSRQotZXhlYyBBU19NRVNTQUdFX0ZEPiYxCi1fQVNFT0YKLXRlc3QgMCA9ICIkbHRfd3JpdGVfZmFpbCIgJiYgY2htb2QgK3ggJDFbXWRubAotbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKLQotIyBMVF9PVVRQVVQKLSMgLS0tLS0tLS0tCi0jIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKLSMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KLSMgdGVzdHMuCi1BQ19ERUZVTihbTFRfT1VUUFVUXSwKLVs6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQotQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCi1fTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKLVsjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCi0KLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKLWx0X2NsX3NpbGVudD1mYWxzZQotZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKLX0gPiZBU19NRVNTQUdFX0xPR19GRAotCi1sdF9jbF9oZWxwPSJcCi0nJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKLWZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcwotZ2VuZXJhdGVkLgotCi1Vc2FnZTogJFswXSBbW09QVElPTlNdXQotCi0gIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCi0gIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCi0KLVJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCi0KLWx0X2NsX3ZlcnNpb249IlwKLW00X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKLW00X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCi1jb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KLQotQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLQotd2hpbGUgdGVzdCAwICE9ICRbI10KLWRvCi0gIGNhc2UgJFsxXSBpbgotICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCi0gICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OwotICAgIC0taGVscCB8IC0taCogfCAtaCApCi0gICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OwotICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQotICAgICAgZGVidWc9OiA7OwotICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQotICAgICAgbHRfY2xfc2lsZW50PTogOzsKLQotICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KLVRyeSAnJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7Ci0KLSAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQotVHJ5ICckWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKLSAgZXNhYwotICBzaGlmdAotZG9uZQotCi1pZiAkbHRfY2xfc2lsZW50OyB0aGVuCi0gIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKLWZpCi1fTFRFT0YKLQotY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCi1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAotX0xURU9GCi0KLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKLUFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCi1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKLUFTX0VYSVQoMCkKLV9MVEVPRgotY2htb2QgK3ggIiRDT05GSUdfTFQiCi0KLSMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCi0jIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAotIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCi0jIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCi1sdF9jbF9zdWNjZXNzPToKLXRlc3QgeWVzID0gIiRzaWxlbnQiICYmCi0gIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKLWV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCi0kU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCi1leGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCi0kbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCi1dKSMgTFRfT1VUUFVUCi0KLQotIyBfTFRfQ09ORklHKFRBRykKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKLSMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCi0jIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKLSMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgotbTRfZGVmdW4oW19MVF9DT05GSUddLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKLSAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCi0gIG00X2lmKF9MVF9UQUcsIFtDXSwgWwotICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgotICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KLSAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gICAgZmkKLQotICAgIGNmZ2ZpbGU9JHtvZmlsZX1UCi0gICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKLSAgICAkUk0gIiRjZmdmaWxlIgotCi0gICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0jISAkU0hFTEwKLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSkgJFZFUlNJT04KLSMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotCi0jIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0KLV9MVF9DT1BZSU5HCi1fTFRfTElCVE9PTF9UQUdTCi0KLSMgQ29uZmlndXJlZCBkZWZhdWx0cyBmb3Igc3lzX2xpYl9kbHNlYXJjaF9wYXRoIG11bmdpbmcuCi06IFwke0xUX1NZU19MSUJSQVJZX1BBVEg9IiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIn0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKLV9MVF9MSUJUT09MX0NPTkZJR19WQVJTCi1fTFRfTElCVE9PTF9UQUdfVkFSUwotIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCi0KLV9MVF9FT0YKLQotICAgIGNhdCA8PCdfTFRfRU9GJyA+PiAiJGNmZ2ZpbGUiCi0KLSMgIyMjIEJFR0lOIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKLQotX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUCi1fTFRfUFJFUEFSRV9DQ19CQVNFTkFNRQotCi0jICMjIyBFTkQgRlVOQ1RJT05TIFNIQVJFRCBXSVRIIENPTkZJR1VSRQotCi1fTFRfRU9GCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCi0jIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLV9MVF9FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgX0xUX1BST0dfTFRNQUlOCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8Ci0gICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKLSAgY2htb2QgK3ggIiRvZmlsZSIKLV0sCi1bY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgotCi1kbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAotZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKLV9MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQotX0xUX0VPRgotXSlkbmwgL200X2lmCi1dLAotW200X2lmKFskMV0sIFtdLCBbCi0gICAgUEFDS0FHRT0nJFBBQ0tBR0UnCi0gICAgVkVSU0lPTj0nJFZFUlNJT04nCi0gICAgUk09JyRSTScKLSAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQotXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUwotXSkjIF9MVF9DT05GSUcKLQotCi0jIExUX1NVUFBPUlRFRF9UQUcoVEFHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJhY2UgdGhpcyBtYWNybyB0byBkaXNjb3ZlciB3aGF0IHRhZ3MgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlidG9vbAotIyAtLXRhZyBvcHRpb24sIHVzaW5nOgotIyAgICBhdXRvY29uZiAtLXRyYWNlICdMVF9TVVBQT1JURURfVEFHOiQxJwotQUNfREVGVU4oW0xUX1NVUFBPUlRFRF9UQUddLCBbXSkKLQotCi0jIEMgc3VwcG9ydCBpcyBidWlsdC1pbiBmb3Igbm93Ci1tNF9kZWZpbmUoW19MVF9MQU5HX0NfZW5hYmxlZF0sIFtdKQotbTRfZGVmaW5lKFtfTFRfVEFHU10sIFtdKQotCi0KLSMgTFRfTEFORyhMQU5HKQotIyAtLS0tLS0tLS0tLS0tCi0jIEVuYWJsZSBsaWJ0b29sIHN1cHBvcnQgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZiBub3QgYWxyZWFkeSBlbmFibGVkLgotQUNfREVGVU4oW0xUX0xBTkddLAotW0FDX0JFRk9SRShbJDBdLCBbTFRfT1VUUFVUXSlkbmwKLW00X2Nhc2UoWyQxXSwKLSAgW0NdLAkJCVtfTFRfTEFORyhDKV0sCi0gIFtDKytdLAkJW19MVF9MQU5HKENYWCldLAotICBbR29dLAkJCVtfTFRfTEFORyhHTyldLAotICBbSmF2YV0sCQlbX0xUX0xBTkcoR0NKKV0sCi0gIFtGb3J0cmFuIDc3XSwJCVtfTFRfTEFORyhGNzcpXSwKLSAgW0ZvcnRyYW5dLAkJW19MVF9MQU5HKEZDKV0sCi0gIFtXaW5kb3dzIFJlc291cmNlXSwJW19MVF9MQU5HKFJDKV0sCi0gIFttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19DT05GSUddLAotICAgIFtfTFRfTEFORygkMSldLAotICAgIFttNF9mYXRhbChbJDA6IHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAiJDEiXSldKV0pZG5sCi1dKSMgTFRfTEFORwotCi0KLSMgX0xUX0xBTkcoTEFOR05BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9MQU5HXSwKLVttNF9pZmRlZihbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10sCi0gIFtMVF9TVVBQT1JURURfVEFHKFskMV0pZG5sCi0gIG00X2FwcGVuZChbX0xUX1RBR1NdLCBbJDEgXSlkbmwKLSAgbTRfZGVmaW5lKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSlkbmwKLSAgX0xUX0xBTkdfJDFfQ09ORklHKCQxKV0pZG5sCi1dKSMgX0xUX0xBTkcKLQotCi1tNF9pZm5kZWYoW0FDX1BST0dfR09dLCBbCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIwotIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfR08uICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICAjCi0jICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKLSMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1tNF9kZWZ1bihbQUNfUFJPR19HT10sCi1bQUNfTEFOR19QVVNIKEdvKWRubAotQUNfQVJHX1ZBUihbR09DXSwgICAgIFtHbyBjb21waWxlciBjb21tYW5kXSlkbmwKLUFDX0FSR19WQVIoW0dPRkxBR1NdLCBbR28gY29tcGlsZXIgZmxhZ3NdKWRubAotX0FDX0FSR19WQVJfTERGTEFHUygpZG5sCi1BQ19DSEVDS19UT09MKEdPQywgZ2NjZ28pCi1pZiB0ZXN0IC16ICIkR09DIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgQUNfQ0hFQ0tfUFJPRyhHT0MsIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSwgWyR7YWNfdG9vbF9wcmVmaXh9Z2NjZ29dKQotICBmaQotZmkKLWlmIHRlc3QgLXogIiRHT0MiOyB0aGVuCi0gIEFDX0NIRUNLX1BST0coR09DLCBnY2NnbywgZ2NjZ28sIGZhbHNlKQotZmkKLV0pI200X2RlZnVuCi1dKSNtNF9pZm5kZWYKLQotCi0jIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0xBTkdfREVGQVVMVF9DT05GSUddLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gIFtMVF9MQU5HKENYWCldLAotICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbTFRfTEFORyhDWFgpXSldKQotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAotICBbTFRfTEFORyhGNzcpXSwKLSAgW200X2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0xUX0xBTkcoRjc3KV0pXSkKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRkNdLAotICBbTFRfTEFORyhGQyldLAotICBbbTRfZGVmaW5lKFtBQ19QUk9HX0ZDXSwgZGVmbihbQUNfUFJPR19GQ10pW0xUX0xBTkcoRkMpXSldKQotCi1kbmwgVGhlIGNhbGwgdG8gW0FdW01fUFJPR19HQ0pdIGlzIHF1b3RlZCBsaWtlIHRoYXQgdG8gc3RvcCBhY2xvY2FsCi1kbmwgcHVsbGluZyB0aGluZ3MgaW4gbmVlZGxlc3NseS4KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCi0gIFtMVF9MQU5HKEdDSildLAotICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAotICAgIFtMVF9MQU5HKEdDSildLAotICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19HQ0pdLAotICAgICAgW0xUX0xBTkcoR0NKKV0sCi0gICAgICBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwKLQlbbTRfZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQotICAgICAgIG00X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwKLQlbbTRfZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKLSAgICAgICBtNF9pZmRlZihbTFRfUFJPR19HQ0pdLAotCVttNF9kZWZpbmUoW0xUX1BST0dfR0NKXSwgZGVmbihbTFRfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pXSldKV0pCi0KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dPXSwKLSAgW0xUX0xBTkcoR08pXSwKLSAgW200X2RlZmluZShbQUNfUFJPR19HT10sIGRlZm4oW0FDX1BST0dfR09dKVtMVF9MQU5HKEdPKV0pXSkKLQotQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAotICBbTFRfTEFORyhSQyldLAotICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQotXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi0KLSMgT2Jzb2xldGUgbWFjcm9zOgotQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCi1BVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCi1BVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKLUFVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKLUFVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKLQotCi0jIF9MVF9UQUdfQ09NUElMRVIKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotCi1fTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCi1fTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCi1fTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKLV9MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi1dKSMgX0xUX1RBR19DT01QSUxFUgotCi0KLSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gY29uZnRlc3QqCi1dKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0KLQotIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgotbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gLXIgY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4qKQotICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCi0gICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKLSAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAotICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQotICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAotICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKLSAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCi0gICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCi0gICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKLSAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCi0gICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAotICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKLQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKLSAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgotCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQotCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQotCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKLQkjIGxpbmsgZmxhZ3MuCi0Jcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgotCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCi0JZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLS1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0JJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLQkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCi0gICAgICAgIF9sdF9yZXN1bHQ9JD8KLQkjIElmIHRoZXJlIGlzIGEgbm9uLWVtcHR5IGVycm9yIGxvZywgYW5kICJzaW5nbGVfbW9kdWxlIgotCSMgYXBwZWFycyBpbiBpdCwgYXNzdW1lIHRoZSBmbGFnIGNhdXNlZCBhIGxpbmtlciB3YXJuaW5nCi0gICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIHNpbmdsZV9tb2R1bGUgY29uZnRlc3QuZXJyOyB0aGVuCi0JICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLQkjIE90aGVyd2lzZSwgaWYgdGhlIG91dHB1dCB3YXMgY3JlYXRlZCB3aXRoIGEgMCBleGl0IGNvZGUgZnJvbQotCSMgdGhlIGNvbXBpbGVyLCBpdCB3b3JrZWQuCi0JZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCI7IHRoZW4KLQkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0JZWxzZQotCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0JZmkKLQlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0Jcm0gLWYgY29uZnRlc3QuKgotICAgICAgZmldKQotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAotICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KLSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKLSAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKLQlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCi0JW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCi0JTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgXSkKLQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKLSAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBtYWluKCkgeyByZXR1cm4gMDt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCi0gICAgICBfbHRfcmVzdWx0PSQ/Ci0gICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgotCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgZWxpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCIgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKLSAgICAgIGVsc2UKLQljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGZpCi0gICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKLSAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KLSAgICBdKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbjEuKikKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgotICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwotICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwotICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgotCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0JMTAuW1swMTJdXVtbLC5dXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLQkxMC4qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLSAgICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCi0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwotICAgIGZpCi0gICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJwotICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCi0gICAgZmkKLSAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KLSAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCi0gICAgZWxzZQotICAgICAgX2x0X2RzeW11dGlsPQotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotXSkKLQotCi0jIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgotbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKLVsKLSAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQotICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKLSAgICBtNF9jYXNlKFskMV0sIFtGNzddLCBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdLAotICAgICAgICAgICAgICAgICAgW0ZDXSwgIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10pCi0gIGVsc2UKLSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgZmkKLSAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKLSAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKLSAgZXNhYwotICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKLSAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCi0gICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCi0gICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgIG00X2lmKFskMV0sIFtDWFhdLAotWyAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgotICAgIGZpCi1dLFtdKQotICBlbHNlCi0gIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgZmkKLV0pCi0KLSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi0jIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KLSMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KLW00X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLWlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAotICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWwotICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfV0nCi0gIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSAgZmldLFtdKQotICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9L3Vzci9saWI6L2xpYgotICBmaQotICBdKQotICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKLWZpCi1dKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKLQotCi0jIF9MVF9TSEVMTF9JTklUKEFSRykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCi1bbTRfZGl2ZXJ0X3RleHQoW000U0gtSU5JVF0sIFskMQotXSldKSMgX0xUX1NIRUxMX0lOSVQKLQotCi0KLSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KLSMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0Ci0jIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB0aGF0IHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCi0jIHByaW50ZiAodGhhdCB3ZSBjYW4gdXNlIGFzIGFuIGVjaG8gY29tbWFuZCkuCi1tNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAotW0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCi1FQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLUVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0KLUFDX01TR19DSEVDS0lORyhbaG93IHRvIHByaW50IHN0cmluZ3NdKQotIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCi1pZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKLSAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gIEVDSE89J3ByaW50IC1yIC0tJwotZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KLSAgRUNITz0ncHJpbnRmICVzXG4nCi1lbHNlCi0gICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KLSAgZnVuY19mYWxsYmFja19lY2hvICgpCi0gIHsKLSAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgotJFtdMQotX0xURUNIT19FT0YnCi0gIH0KLSAgRUNITz0nZnVuY19mYWxsYmFja19lY2hvJwotZmkKLQotIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgotIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgotZnVuY19lY2hvX2FsbCAoKQotewotICAgICRFQ0hPICIkKiIKLX0KLQotY2FzZSAkRUNITyBpbgotICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OwotICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKLSAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKLWVzYWMKLQotbTRfaWZkZWYoW19BU19ERVRFQ1RfU1VHR0VTVEVEXSwKLVtfQVNfREVURUNUX1NVR0dFU1RFRChbCi0gIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSR7QkFTSF9WRVJTSU9OK3NldH0iIHx8ICgKLSAgICBFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotICAgIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0gICAgUEFUSD0vZW1wdHkgRlBBVEg9L2VtcHR5OyBleHBvcnQgUEFUSCBGUEFUSAotICAgIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPYCIgPSAiWCRFQ0hPIiBcCi0gICAgICB8fCB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPYCIgPSAiWCRFQ0hPIiApXSldKQotCi1fTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCi1fTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlc10pCi1dKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKLQotCi0jIF9MVF9XSVRIX1NZU1JPT1QKLSMgLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9XSVRIX1NZU1JPT1RdLAotW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQotQUNfQVJHX1dJVEgoW3N5c3Jvb3RdLAotW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzcm9vdEA8OkA9RElSQDo+QF0sCi0gIFtTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdAotICAgaWYgbm90IHNwZWNpZmllZCkuXSldLAotW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQotCi1kbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCi1kbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KLWx0X3N5c3Jvb3Q9Ci1jYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKLSB5ZXMpCi0gICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAotICAgZmkKLSAgIDs7ICMoCi0gLyopCi0gICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICA7OyAjKAotIG5vfCcnKQotICAgOzsgIygKLSAqKQotICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfc3lzcm9vdF0pCi0gICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQotICAgOzsKLWVzYWMKLQotIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKLV9MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAotW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQotCi0jIF9MVF9FTkFCTEVfTE9DSwotIyAtLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAotW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCi0gICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCi10ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcwotCi0jIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKLSMgbGlidG9vbCBzdXBwb3J0LgotY2FzZSAkaG9zdCBpbgotaWE2NC0qLWhwdXgqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKkVMRi0zMiopCi0JSFBVWF9JQTY0X01PREU9MzIKLQk7OwotICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9NjQKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCi0gIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLQkgIDs7Ci0JKjY0LWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0JOzsKLSAgICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLTMyIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbjMyIgotCSAgOzsKLQkqNjQtYml0KikKLQkgIExEPSIke0xELWxkfSAtNjQiCi0JICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotbWlwczY0Ki0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGVtdWw9ZWxmCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKjMyLWJpdCopCi0JZW11bD0iJHtlbXVsfTMyIgotCTs7Ci0gICAgICAqNjQtYml0KikKLQllbXVsPSIke2VtdWx9NjQiCi0JOzsKLSAgICBlc2FjCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICAgKk1TQiopCi0JZW11bD0iJHtlbXVsfWJ0c21pcCIKLQk7OwotICAgICAgKkxTQiopCi0JZW11bD0iJHtlbXVsfWx0c21pcCIKLQk7OwotICAgIGVzYWMKLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgICAqTjMyKikKLQllbXVsPSIke2VtdWx9bjMyIgotCTs7Ci0gICAgZXNhYwotICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgotICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQotICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KLSAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCi0gICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbwotICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICAgKjMyLWJpdCopCi0JY2FzZSAkaG9zdCBpbgotCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0JICAgICAgKng4Ni02NCopCi0JCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCi0JCTs7Ci0JICAgICAgKikKLQkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotCQk7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICBwb3dlcnBjNjRsZS0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCi0JICAgIDs7Ci0JICBwb3dlcnBjNjQtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0JICAgIDs7Ci0JICBzMzkweC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0JICAgIDs7Ci0JICBzcGFyYzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgICo2NC1iaXQqKQotCWNhc2UgJGhvc3QgaW4KLQkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLQkgICAgOzsKLQkgIHBvd2VycGNsZS0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgotCSAgICA7OwotCSAgcG93ZXJwYy0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCi0JICAgIDs7Ci0JICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKLQkgICAgOzsKLQkgIHNwYXJjKi0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLSotKi1zY28zLjJ2NSopCi0gICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9JENGTEFHUwotICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKLSAgICBbQUNfTEFOR19QVVNIKEMpCi0gICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCi0gICAgIEFDX0xBTkdfUE9QXSkKLSAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKLSAgZmkKLSAgOzsKLSotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCi0gICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgotICAgICAgeWVzKikKLSAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCi0gICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICAqKQotCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgTEQ9IiR7TEQtbGR9IC02NCIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotZXNhYwotCi1uZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCi1dKSMgX0xUX0VOQUJMRV9MT0NLCi0KLQotIyBfTFRfUFJPR19BUgotIyAtLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QUk9HX0FSXSwKLVtBQ19DSEVDS19UT09MUyhBUiwgW2FyXSwgZmFsc2UpCi06ICR7QVI9YXJ9Ci06ICR7QVJfRkxBR1M9Y3J1fQotX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCi1fTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQotCi1BQ19DQUNIRV9DSEVDSyhbZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnRdLCBbbHRfY3ZfYXJfYXRfZmlsZV0sCi0gIFtsdF9jdl9hcl9hdF9maWxlPW5vCi0gICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSwKLSAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAotICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJwotICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0gICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgotCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0Jcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCi0JQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0JaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KLSAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKLSAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKLSAgICAgXSkKLSAgXSkKLQotaWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KLSAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotZWxzZQotICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKLWZpCi1fTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKLSAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCi1dKSMgX0xUX1BST0dfQVIKLQotCi0jIF9MVF9DTURfT0xEX0FSQ0hJVkUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAotW19MVF9QUk9HX0FSCi0KLUFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Ci1fTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQotCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLV9MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQotCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBiaXRyaWcqIHwgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgotICAgIDs7Ci0gICopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKLWZpCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7Ci0gICopCi0gICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Ci1lc2FjCi1fTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQotX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQotX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKLV9MVF9ERUNMKFtdLCBbbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uXSwgWzBdLAotICAgIFtXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb25dKQotXSkjIF9MVF9DTURfT0xEX0FSQ0hJVkUKLQotCi0jIF9MVF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW19MVF9DT01QSUxFUl9PUFRJT05dLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCi0gIFskMj1ubwotICAgbTRfaWYoWyQ0XSwgLCBbYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0XSwgW2FjX291dGZpbGU9JDRdKQotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkMyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50Ci0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRSTSBjb25mdGVzdCoKLV0pCi0KLWlmIHRlc3QgeWVzID0gIlskXSQyIjsgdGhlbgotICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCi1maQotXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKLQotCi0jIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKLVttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgTERGTEFHUz0iJExERkxBR1MgJDMiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAkMj15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgJDI9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi1dKQotCi1pZiB0ZXN0IHllcyA9ICJbJF0kMiI7IHRoZW4KLSAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCi1lbHNlCi0gICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQotZmkKLV0pIyBfTFRfTElOS0VSX09QVElPTgotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQotCi0KLSMgTFRfQ01EX01BWF9MRU4KLSMtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz1BQkNECi0KLSAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgbXNkb3NkamdwcCopCi0gICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYwotICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcwotICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKLSAgICA7OwotCi0gIGdudSopCi0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCi0gICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7Ci0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCi0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAotICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCi0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5Ci0gICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIG1pbnQqKQotICAgICMgT24gTWlOVCB0aGlzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBydW4gb3V0IG9mIG1lbW9yeS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIGFtaWdhb3MqKQotICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KLSAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCi0gICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCi0gICAgZmkKLSAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICA7OwotCi0gIGludGVyaXgqKQotICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKLSAgICA7OwotCi0gIG9zMiopCi0gICAgIyBUaGUgdGVzdCB0YWtlcyBhIGxvbmcgdGltZSBvbiBPUy8yLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyCi0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iICYmIFwKLSAgICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIGVsc2UKLSAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KLSAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KLSAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KLSAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCi0gICAgICBkb25lCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKLSAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0Ci0gICAgICAjIHdlIGNhbid0IHRlbGwuCi0gICAgICB3aGlsZSB7IHRlc3QgWGBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKLQkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgdGVzdCAxNyAhPSAiJGkiICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KLSAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCi0gICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vbmUpCi1maQotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKLSAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCi1dKSMgTFRfQ01EX01BWF9MRU4KLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCi0KLQotIyBfTFRfSEVBREVSX0RMRkNOCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKLVtBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCi1dKSMgX0xUX0hFQURFUl9ETEZDTgotCi0KLSMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAotIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKLVttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKLWlmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKLSAgWyQ0XQotZWxzZQotICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCi0gIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi1bI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0KLSNpZiBIQVZFX0RMRkNOX0gKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWZkZWYgUlRMRF9HTE9CQUwKLSMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKLSNlbHNlCi0jICBpZmRlZiBETF9HTE9CQUwKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKLSMgIGVsc2UKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKLSAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KLSNpZm5kZWYgTFRfRExMQVpZX09SX05PVwotIyAgaWZkZWYgUlRMRF9MQVpZCi0jICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKLSMgIGVsc2UKLSMgICAgaWZkZWYgRExfTEFaWQotIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCi0jICAgIGVsc2UKLSMgICAgICBpZmRlZiBSVExEX05PVwotIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKLSMgICAgICBlbHNlCi0jICAgICAgICBpZmRlZiBETF9OT1cKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi1pbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0jZW5kaWYKLQotaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci1pbnQgbWFpbiAoKQotewotICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLSAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247Ci0KLSAgaWYgKHNlbGYpCi0gICAgewotICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLQkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKLSAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOwotCX0KLSAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwotICAgIH0KLSAgZWxzZQotICAgIHB1dHMgKGRsZXJyb3IgKCkpOwotCi0gIHJldHVybiBzdGF0dXM7Ci19XQotX0xUX0VPRgotICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAotICAgIGx0X3N0YXR1cz0kPwotICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KLSAgICAgIHgkbHRfZGxub191c2NvcmUpICQxIDs7Ci0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpICQyIDs7Ci0gICAgICB4JGx0X2RsdW5rbm93bnx4KikgJDMgOzsKLSAgICBlc2FjCi0gIGVsc2UgOgotICAgICMgY29tcGlsYXRpb24gZmFpbGVkCi0gICAgJDMKLSAgZmkKLWZpCi1ybSAtZnIgY29uZnRlc3QqCi1dKSMgX0xUX1RSWV9ETE9QRU5fU0VMRgotCi0KLSMgTFRfU1lTX0RMT1BFTl9TRUxGCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCi1bbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCi1pZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgOzsKLQotICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIDs7Ci0KLSAgZGFyd2luKikKLSAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbF0sWwotICAgIGx0X2N2X2Rsb3Blbj1keWxkCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgXSkKLSAgICA7OwotCi0gIHRwZiopCi0gICAgIyBEb24ndCB0cnkgdG8gcnVuIGFueSBsaW5rIHRlc3RzIGZvciBUUEYuICBXZSBrbm93IGl0J3MgaW1wb3NzaWJsZQotICAgICMgYmVjYXVzZSBUUEYgaXMgYSBjcm9zcy1jb21waWxlciwgYW5kIHdlIGtub3cgaG93IHdlIG9wZW4gRFNPcy4KLSAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KLSAgICA7OwotCi0gICopCi0gICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAotCSAgW2x0X2N2X2Rsb3Blbj1zaGxfbG9hZF0sCi0gICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkXSwKLQlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKLQkgICAgICBbbHRfY3ZfZGxvcGVuPWRsb3Blbl0sCi0JICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsXSwKLQkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAotCQkgIFtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZF0sCi0JICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKLQkJICAgIFtsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGRdKQotCSAgICAgIF0pCi0JICAgIF0pCi0JICBdKQotCV0pCi0gICAgICBdKQotICAgIDs7Ci0gIGVzYWMKLQotICBpZiB0ZXN0IG5vID0gIiRsdF9jdl9kbG9wZW4iOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj1ubwotICBlbHNlCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZmkKLQotICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KLSAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCi0gICAgdGVzdCB5ZXMgPSAiJGFjX2N2X2hlYWRlcl9kbGZjbl9oIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgotCi0gICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotCi0gICAgc2F2ZV9MSUJTPSRMSUJTCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCi0JICBfTFRfVFJZX0RMT1BFTl9TRUxGKAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQotICAgIF0pCi0KLSAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCi0gICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCi0JICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKLQkgIF9MVF9UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKLSAgICAgIF0pCi0gICAgZmkKLQotICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCi0gICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgTElCUz0kc2F2ZV9MSUJTCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotX0xUX0RFQ0woW2Rsb3Blbl9zdXBwb3J0XSwgW2VuYWJsZV9kbG9wZW5dLCBbMF0sCi0JIFtXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWRdKQotX0xUX0RFQ0woW2Rsb3Blbl9zZWxmXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl0sIFswXSwKLQkgW1doZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCi1fTFRfREVDTChbZGxvcGVuX3NlbGZfc3RhdGljXSwgW2VuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWNdLCBbMF0sCi0JIFtXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQotXSkjIExUX1NZU19ETE9QRU5fU0VMRgotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbTFRfU1lTX0RMT1BFTl9TRUxGXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtdKQotCi0KLSMgX0xUX0NPTVBJTEVSX0NfTyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlci4KLSMgVGhpcyBtYWNybyBkb2VzIG5vdCBoYXJkIGNvZGUgdGhlIGNvbXBpbGVyIGxpa2UgQUNfUFJPR19DQ19DX08uCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0NfT10sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dF0sCi0gIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSldLAotICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPW5vCi0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAotICAgJFJNIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgJFJNIC1yIGNvbmZ0ZXN0Ci0gICAkUk0gY29uZnRlc3QqCi1dKQotX0xUX1RBR0RFQ0woW2NvbXBpbGVyX2Nfb10sIFtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb10sIFsxXSwKLQlbRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zP10pCi1dKSMgX0xUX0NPTVBJTEVSX0NfTwotCi0KLSMgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1NdLAotW200X3JlcXVpcmUoW19MVF9FTkFCTEVfTE9DS10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLV9MVF9DT01QSUxFUl9DX08oWyQxXSkKLQotaGFyZF9saW5rcz1ub3R0ZXN0ZWQKLWlmIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCi0gIGhhcmRfbGlua3M9eWVzCi0gICRSTSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKLSAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCi0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi1fTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQotXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCi0KLQotIyBfTFRfQ0hFQ0tfT0JKRElSCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAotW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBsdF9jdl9vYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgbHRfY3Zfb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQotb2JqZGlyPSRsdF9jdl9vYmpkaXIKLV9MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAotICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCi1tNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAotQUNfREVGSU5FX1VOUVVPVEVEKFtMVF9PQkpESVJdLCAiJGx0X2N2X29iamRpci8iLAotICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQotXSkjIF9MVF9DSEVDS19PQkpESVIKLQotCi0jIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KLW00X2RlZnVuKFtfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEhdLAotW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQotaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAotICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKLSAgIHRlc3QgeWVzID0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIjsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgJiYKLSAgICAgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIjsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAotZmkKLUFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKLQotaWYgdGVzdCByZWxpbmsgPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiIHx8Ci0gICB0ZXN0IHllcyA9ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8Ci0gICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCi0gICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKLV0pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKLQotCi0jIF9MVF9DTURfU1RSSVBMSUIKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKLXN0cmlwbGliPQotb2xkX3N0cmlwbGliPQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQotaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIEFDX01TR19SRVNVTFQoW3llc10pCi1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCi0gICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKLSAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgIGZpCi0gICAgOzsKLSAgKikKLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgOzsKLSAgZXNhYwotZmkKLV9MVF9ERUNMKFtdLCBbb2xkX3N0cmlwbGliXSwgWzFdLCBbQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzXSkKLV9MVF9ERUNMKFtdLCBbc3RyaXBsaWJdLCBbMV0pCi1dKSMgX0xUX0NNRF9TVFJJUExJQgotCi0KLSMgX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBNYWtlIHN1cmUgZnVuY19tdW5nZV9wYXRoX2xpc3QoKSBpcyBkZWZpbmVkIGNvcnJlY3RseS4KLW00X2RlZnVuKFtfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1RdLAotW1sjIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IFZBUklBQkxFIFBBVEgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVkFSSUFCTEUgaXMgbmFtZSBvZiB2YXJpYWJsZSBjb250YWluaW5nIF9zcGFjZV8gc2VwYXJhdGVkIGxpc3Qgb2YKLSMgZGlyZWN0b3JpZXMgdG8gYmUgbXVuZ2VkIGJ5IHRoZSBjb250ZW50cyBvZiBQQVRILCB3aGljaCBpcyBzdHJpbmcKLSMgaGF2aW5nIGEgZm9ybWF0OgotIyAiRElSWzpESVJdOiIKLSMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFCi0jICI6RElSWzpESVJdIgotIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSUFs6RElSUF06OltESVJBOl1ESVJBIgotIyAgICAgICBzdHJpbmcgIkRJUlBbIERJUlBdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRSBhbmQgc3RyaW5nCi0jICAgICAgICJESVJBWyBESVJBXSIgd2lsbCBiZSBhcHBlbmRlZCB0byBWQVJJQUJMRQotIyAiRElSWzpESVJdIgotIyAgICAgICBWQVJJQUJMRSB3aWxsIGJlIHJlcGxhY2VkIGJ5ICJESVJbIERJUl0iCi1mdW5jX211bmdlX3BhdGhfbGlzdCAoKQotewotICAgIGNhc2UgeEBTfEAyIGluCi0gICAgeCkKLSAgICAgICAgOzsKLSAgICAqOikKLSAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYCBcQFN8QEBTfEAxXCIKLSAgICAgICAgOzsKLSAgICB4OiopCi0gICAgICAgIGV2YWwgQFN8QDE9XCJcQFN8QEBTfEAxIGAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCi0gICAgICAgIDs7Ci0gICAgKjo6KikKLSAgICAgICAgZXZhbCBAU3xAMT1cIlxAU3xAQFN8QDFcIGAkRUNITyBAU3xAMiB8ICRTRUQgLWUgJ3MvLio6Oi8vJyAtZSAncy86LyAvZydgXCIKLSAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgLWUgJ3MvOjouKi8vJyAtZSAncy86LyAvZydgXCBcQFN8QEBTfEAxXCIKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICBldmFsIEBTfEAxPVwiYCRFQ0hPIEBTfEAyIHwgJFNFRCAncy86LyAvZydgXCIKLSAgICAgICAgOzsKLSAgICBlc2FjCi19Ci1dXSkjIF9MVF9QUkVQQVJFX1BBVEhfTElTVAotCi0KLSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUihbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKLW00X2RlZnVuKFtfTFRfU1lTX0RZTkFNSUNfTElOS0VSXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUFJFUEFSRV9NVU5HRV9QQVRIX0xJU1RdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQotbTRfaWYoWyQxXSwKLQlbXSwgWwotaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKLSAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OwotICBlc2FjCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbW0EtWmEtel1dOlwpfFwxfGcnIDs7Ci0gICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKLSAgZXNhYwotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAotICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCi0gICpcOyopCi0gICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgotICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcwotICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAotICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKLSAgICA7OwotICAqKQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgIDs7Ci0gIGVzYWMKLSAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAotICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCi0gICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCi0gIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KLSAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKLSAgICBsdF9tdWx0aV9vc19kaXI9Ci0gICAgOzsKLSAgZXNhYwotICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKLSAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKLQlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKLSAgICBmaQotICBkb25lCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKLUJFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7Ci0gIGx0X2ZvbyA9ICIiOwotICBsdF9jb3VudCA9IDA7Ci0gIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7Ci0gICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewotICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKLSAgICAgICAgbHRfY291bnQrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsdF9jb3VudC0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQotICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KLX0nYAotICAjIEFXSyBwcm9ncmFtIGFib3ZlIGVycm9uZW91c2x5IHByZXBlbmRzICcvJyB0byBDOi9kb3MvcGF0aHMKLSAgIyBmb3IgdGhlc2UgaG9zdHMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKLSAgICAgICRTRUQgJ3N8L1woW1tBLVphLXpdXTpcKXxcMXxnJ2AgOzsKLSAgZXNhYwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCi1lbHNlCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLWZpXSkKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPS5zbwotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLUFDX0FSR19WQVIoW0xUX1NZU19MSUJSQVJZX1BBVEhdLAotW1VzZXItZGVmaW5lZCBydW4tdGltZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLl0pCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIDs7Ci0KLWFpeFtbNC05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBVc2luZyBJbXBvcnQgRmlsZXMgYXMgYXJjaGl2ZSBtZW1iZXJzLCBpdCBpcyBwb3NzaWJsZSB0byBzdXBwb3J0Ci0gICAgIyBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGFyY2hpdmVzIG9uIEFJWC4gV2hpbGUKLSAgICAjIHRoaXMgd291bGQgd29yayBmb3IgYm90aCB3aXRoIGFuZCB3aXRob3V0IHJ1bnRpbWUgbGlua2luZywgaXQgd2lsbAotICAgICMgcHJldmVudCBzdGF0aWMgbGlua2luZyBvZiBzdWNoIGFyY2hpdmVzLiBTbyB3ZSBkbyBmaWxlbmFtZS1iYXNlZAotICAgICMgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB3aXRoIC5zbyBleHRlbnNpb24gb25seSwgd2hpY2ggaXMgdXNlZAotICAgICMgd2hlbiBib3RoIHJ1bnRpbWUgbGlua2luZyBhbmQgc2hhcmVkIGxpbmtpbmcgaXMgZW5hYmxlZC4KLSAgICAjIFVuZm9ydHVuYXRlbHksIHJ1bnRpbWUgbGlua2luZyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB3ZSBkbwotICAgICMgbm90IHdhbnQgdGhpcyB0byBiZSB0aGUgZGVmYXVsdCBldmVudHVhbGx5LiBBbHNvLCB3ZSB1c2UgdGhlCi0gICAgIyB2ZXJzaW9uZWQgLnNvIGxpYnMgZm9yIGV4ZWN1dGFibGVzIG9ubHkgaWYgdGhlcmUgaXMgdGhlIC1icnRsCi0gICAgIyBsaW5rZXIgZmxhZyBpbiBMREZMQUdTIGFzIHdlbGwsIG9yIC0td2l0aC1haXgtc29uYW1lPXN2cjQgb25seS4KLSAgICAjIFRvIGFsbG93IGZvciBmaWxlbmFtZS1iYXNlZCB2ZXJzaW9uaW5nIHN1cHBvcnQsIHdlIG5lZWQgdG8gY3JlYXRlCi0gICAgIyBsaWJOQU1FLnNvLlYgYXMgYW4gYXJjaGl2ZSBmaWxlLCBjb250YWluaW5nOgotICAgICMgKikgYW4gSW1wb3J0IEZpbGUsIHJlZmVycmluZyB0byB0aGUgdmVyc2lvbmVkIGZpbGVuYW1lIG9mIHRoZQotICAgICMgICAgYXJjaGl2ZSBhcyB3ZWxsIGFzIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIsIHRlbGxpbmcgdGhlCi0gICAgIyAgICBiaXR3aWR0aCAoMzIgb3IgNjQpIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgYW5kIHByb3ZpZGluZyB0aGUKLSAgICAjICAgIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scyBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGV2ZW50dWFsbHkKLSAgICAjICAgIGRlY29yYXRlZCB3aXRoIHRoZSAnd2Vhaycga2V5d29yZAotICAgICMgKikgdGhlIHNoYXJlZCBvYmplY3Qgd2l0aCB0aGUgRl9MT0FET05MWSBmbGFnIHNldCwgdG8gcmVhbGx5IGF2b2lkCi0gICAgIyAgICBpdCBiZWluZyBzZWVuIGJ5IHRoZSBsaW5rZXIuCi0gICAgIyBBdCBydW4gdGltZSB3ZSBiZXR0ZXIgdXNlIHRoZSByZWFsIGZpbGUgcmF0aGVyIHRoYW4gYW5vdGhlciBzeW1saW5rLAotICAgICMgYnV0IGZvciBsaW5rIHRpbWUgd2UgY3JlYXRlIHRoZSBzeW1saW5rIGxpYk5BTUUuc28gLT4gbGliTkFNRS5zby5WCi0KLSAgICBjYXNlICR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBhaXgseWVzKSAjIHRyYWRpdGlvbmFsIGxpYnRvb2wKLSAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggdW52ZXJzaW9uYWJsZSBsaWIuc28nCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICA7OwotICAgIGFpeCxubykgIyB0cmFkaXRpb25hbCBBSVggb25seQotICAgICAgZHluYW1pY19saW5rZXI9J0FJWCBsaWIuYVsoXWxpYi5zby5WWyldJwotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICA7OwotICAgIHN2cjQsKikgIyBmdWxsIHN2cjQgb25seQotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICAgIDs7Ci0gICAgKix5ZXMpICMgYm90aCwgcHJlZmVyIHN2cjQKLSAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlZbKF0kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub1spXSwgbGliLmFbKF1saWIuc28uVlspXSIKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLmEgbmVlZHMgZXh0cmEgaGFuZGxpbmcKLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9IiRyZWFsbmFtZSJ+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRsaW5rbmFtZSJ+JGluc3RhbGxfc2hhcmVkX3Byb2cgIiRkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0In50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICIkZGVzdGRpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdmb3IgbiBpbiAkbGlicmFyeV9uYW1lcyAkb2xkX2xpYnJhcnk7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5zbyIgIiRuIn50ZXN0ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiA9ICIkbiIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCInCi0gICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgICA7OwotICAgICosbm8pICMgYm90aCwgcHJlZmVyIGFpeAotICAgICAgZHluYW1pY19saW5rZXI9IkFJWCBsaWIuYVsoXWxpYi5zby5WWyldLCBsaWIuc28uVlsoXSRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vWyldIgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgICAjIHVucHJlZmVycmVkIHNoYXJlZGxpYiBsaWJOQU1FLnNvLlYgYW5kIHN5bWxpbmsgbGliTkFNRS5zbyBuZWVkIGV4dHJhIGhhbmRsaW5nCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCAkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRkbG5hbWUgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC16ICIkdHN0cmlwbWUiIHx8IHRlc3QgLXogIiRzdHJpcGxpYiIgfHwgJHN0cmlwbGliICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAtbiAiJGxpbmtuYW1lIiB8fCBsaW5rbmFtZT0kcmVhbG5hbWV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJGxpbmtuYW1lIn4oY2QgIiRkZXN0ZGlyIiAmJiAkTE5fUyAtZiAkZGxuYW1lICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28pJwotICAgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSd0ZXN0IC16ICIkZGxuYW1lIiB8fCBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSJ+Zm9yIG4gaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRuIn5mdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyInCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIHBvd2VycGMpCi0gICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgotICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgOzsKLSAgbTY4aykKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbWzQ1XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0uZGxsCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCi0gIHllcywqKQotICAgICMgZ2NjCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgotICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKLSAgICAgIGZpJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRSTSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotbTRfaWYoWyQxXSwgW10sWwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQotICAgICAgOzsKLSAgICBtaW5ndyogfCBjZWdjYyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgICA7OwotCi0gICosY2wqKQotICAgICMgTmF0aXZlIE1TVkMKLSAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCi0KLSAgICBjYXNlICRidWlsZF9vcyBpbgotICAgIG1pbmd3KikKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KLSAgICAgIGx0X3NhdmVfaWZzPSRJRlMKLSAgICAgIElGUz0nOycKLSAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKLSAgICAgIGRvCi0gICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KLSAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbW2EtekEtWl1dXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKLSAgICAgIDs7Ci0gICAgY3lnd2luKikKLSAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KLSAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcwotICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgOzsKLSAgICAqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKLSAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKLSAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgOzsKLQotICAqKQotICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgOzsKLSAgZXNhYwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotbTRfaWYoWyQxXSwgW10sWwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFtbMjNdXS4qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMi4qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWhhaWt1KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4MzIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4NjQKLSAgICBmaQotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6Ci0gIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKLSAgOzsKLQotaW50ZXJpeFtbMy05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWxpbnV4KmFuZHJvaWQqKQotICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCi0gIGZpbmlzaF9jbWRzPQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJwotICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQotICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKLSAgQUNfQ0FDSEVfVkFMKFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLAotICAgIFtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgICBzYXZlX2xpYmRpcj0kbGliZGlyCi0gICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpXCI7IFwKLQkgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKLSAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCi0gICAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAotCSBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllc10pXSkKLSAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgICBsaWJkaXI9JHNhdmVfbGliZGlyCi0gICAgXSkKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIElkZWFsbHksIHdlIGNvdWxkIHVzZSBsZGNvbmZpZyB0byByZXBvcnQgKmFsbCogZGlyZWN0b3JlcyB3aGljaCBhcmUKLSAgIyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLCBob3dldmVyIHRoaXMgaXMgc3RpbGwgbm90IHBvc3NpYmxlLiAgQXNpZGUgZnJvbSBub3QKLSAgIyBiZWluZyBjZXJ0YWluIC9zYmluL2xkY29uZmlnIGlzIGF2YWlsYWJsZSwgY29tbWFuZAotICAjICdsZGNvbmZpZyAtTiAtWCAtdiB8IGdyZXAgXi8nIG9uIDY0Yml0IEZlZG9yYSBkb2VzIG5vdCByZXBvcnQgL3Vzci9saWI2NCwKLSAgIyBldmVuIHRob3VnaCBpdCBpcyBzZWFyY2hlZCBhdCBydW4tdGltZS4gIFRyeSB0byBkbyB0aGUgYmVzdCBndWVzcyBieQotICAjIGFwcGVuZGluZyBsZC5zby5jb25mIGNvbnRlbnRzIChhbmQgaW5jbHVkZXMpIHRvIHRoZSBzZWFyY2ggcGF0aC4KLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkZWxmKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotKm50byogfCAqcW54KikKLSAgdmVyc2lvbl90eXBlPXFueAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwotICA7OwotCi1vcGVuYnNkKiB8IGJpdHJpZyopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCi0gICAgbmVlZF92ZXJzaW9uPW5vCi0gIGVsc2UKLSAgICBuZWVkX3ZlcnNpb249eWVzCi0gIGZpCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0uZGxsCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBPUy8yIGNhbiBvbmx5IGxvYWQgYSBETEwgd2l0aCBhIGJhc2UgbmFtZSBvZiA4IGNoYXJhY3RlcnMgb3IgbGVzcy4KLSAgc29uYW1lX3NwZWM9J2B0ZXN0IC1uICIkb3MyZGxsbmFtZSIgJiYgbGlibmFtZT0iJG9zMmRsbG5hbWUiOwotICAgIHY9JCgkRUNITyAkcmVsZWFzZSR2ZXJzdWZmaXggfCB0ciAtZCAuLSk7Ci0gICAgbj0kKCRFQ0hPICRsaWJuYW1lIHwgY3V0IC1iIC0kKCg4IC0gJHsjdn0pKSB8IHRyIC4gXyk7Ci0gICAgJEVDSE8gJG4kdmAkc2hhcmVkX2V4dCcKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9X2RsbC4kbGliZXh0JwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9QkVHSU5MSUJQQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+Ci0gICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyAkRUNITyBcJGRsbmFtZSdcJydgfgotICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KLSAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgotICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87Ci0gICAgZmknCi0gIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyAkRUNITyBcJGRsbmFtZSdcJydgfgotICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgJFJNIFwkZGxwYXRoJwotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1zY28KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXRwZiopCi0gICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKLXRlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQotaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLWZpCi0KLWlmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi1maQotCi0jIHJlbWVtYmVyIHVuYXVnbWVudGVkIHN5c19saWJfZGxzZWFyY2hfcGF0aCBjb250ZW50IGZvciBsaWJ0b29sIHNjcmlwdCBkZWNscy4uLgotY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aD0kc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyAuLi4gYnV0IGl0IG5lZWRzIExUX1NZU19MSUJSQVJZX1BBVEggbXVuZ2luZyBmb3Igb3RoZXIgY29uZmlndXJlLXRpbWUgY29kZQotZnVuY19tdW5nZV9wYXRoX2xpc3Qgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgIiRMVF9TWVNfTElCUkFSWV9QQVRIIgotCi0jIHRvIGJlIHVzZWQgYXMgZGVmYXVsdCBMVF9TWVNfTElCUkFSWV9QQVRIIHZhbHVlIGluIGdlbmVyYXRlZCBsaWJ0b29sCi1jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRMVF9TWVNfTElCUkFSWV9QQVRICi0KLV9MVF9ERUNMKFtdLCBbdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmtdLCBbMV0sCi0gICAgW1ZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotICAgIHJlc3RvcmVkIGF0IGxpbmsgdGltZV0pCi1fTFRfREVDTChbXSwgW25lZWRfbGliX3ByZWZpeF0sIFswXSwKLSAgICBbRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzP10pCi1fTFRfREVDTChbXSwgW25lZWRfdmVyc2lvbl0sIFswXSwgW0RvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/XSkKLV9MVF9ERUNMKFtdLCBbdmVyc2lvbl90eXBlXSwgWzBdLCBbTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGVdKQotX0xUX0RFQ0woW10sIFtydW5wYXRoX3Zhcl0sIFswXSwgIFtTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGVdKQotX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfdmFyXSwgWzBdLFtTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlXSkKLV9MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwgWzBdLAotICAgIFtJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/XSkKLV9MVF9ERUNMKFtdLCBbbGlibmFtZV9zcGVjXSwgWzFdLCBbRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXhdKQotX0xUX0RFQ0woW10sIFtsaWJyYXJ5X25hbWVzX3NwZWNdLCBbMV0sCi0gICAgW1tMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotICAgIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUVdXSkKLV9MVF9ERUNMKFtdLCBbc29uYW1lX3NwZWNdLCBbMV0sCi0gICAgW1tUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZV1dKQotX0xUX0RFQ0woW10sIFtpbnN0YWxsX292ZXJyaWRlX21vZGVdLCBbMV0sCi0gICAgW1Blcm1pc3Npb24gbW9kZSBvdmVycmlkZSBmb3IgaW5zdGFsbGF0aW9uIG9mIHNoYXJlZCBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtwb3N0aW5zdGFsbF9jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCi1fTFRfREVDTChbXSwgW3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZV0pCi1fTFRfREVDTChbXSwgW2ZpbmlzaF9jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnldKQotX0xUX0RFQ0woW10sIFtmaW5pc2hfZXZhbF0sIFsxXSwKLSAgICBbW0FzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAotICAgIG5vdCBzaG93bl1dKQotX0xUX0RFQ0woW10sIFtoYXJkY29kZV9pbnRvX2xpYnNdLCBbMF0sCi0gICAgW1doZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCi0gICAgW0NvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCi1fTFRfREVDTChbc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLCBbY29uZmlndXJlX3RpbWVfZGxzZWFyY2hfcGF0aF0sIFsyXSwKLSAgICBbRGV0ZWN0ZWQgcnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoXSwgWzJdLAotICAgIFtFeHBsaWNpdCBMVF9TWVNfTElCUkFSWV9QQVRIIHNldCBkdXJpbmcgLi9jb25maWd1cmUgdGltZV0pCi1dKSMgX0xUX1NZU19EWU5BTUlDX0xJTktFUgotCi0KLSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgoVE9PTCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB0aGF0IGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAotW2Nhc2UgJE1BR0lDX0NNRCBpbgotW1tcXC8qXSB8ICA/OltcXC9dKl0pCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECi0gIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWRubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgotZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAotZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KLSAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgotICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyQxIjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iJDEiCi0gICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCi0JY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQkiZmlsZV9tYWdpYyAiKikKLQkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAotCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotX0xUX0VPRgotCSAgZmkgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0kbHRfc2F2ZV9pZnMKLSAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAotICA7OwotZXNhY10pCi1NQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECi1pZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRNQUdJQ19DTUQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotX0xUX0RFQ0woW10sIFtNQUdJQ19DTURdLCBbMF0sCi0JIFtVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zIHdpdGggImZpbGUiXSlkbmwKLV0pIyBfTFRfUEFUSF9UT09MX1BSRUZJWAotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbX0xUX1BBVEhfVE9PTF9QUkVGSVhdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW10pCi0KLQotIyBfTFRfUEFUSF9NQUdJQwotIyAtLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHRoYXQgY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5Ci1tNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAotW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi0gIGVsc2UKLSAgICBNQUdJQ19DTUQ9OgotICBmaQotZmkKLV0pIyBfTFRfUEFUSF9NQUdJQwotCi0KLSMgTFRfUEFUSF9MRAotIyAtLS0tLS0tLS0tCi0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKLUFDX0RFRlVOKFtMVF9QQVRIX0xEXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbTRfcmVxdWlyZShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAotCi1BQ19BUkdfV0lUSChbZ251LWxkXSwKLSAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAotCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAotICAgIFt0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXNdLAotICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCi0KLWFjX3Byb2c9bGQKLWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtbXFwvXV0qIHwgPzpbW1xcL11dKikKLSAgICAgIHJlX2RpcmVsdD0nL1tbXi9dXVtbXi9dXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZwotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKLWVsc2UKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCi1maQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCi1baWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSRsdF9zYXZlX2lmcwotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCi0gICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KLSAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawotCTs7Ci0gICAgICAqKQotCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0kbHRfc2F2ZV9pZnMKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maV0pCi1MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRMRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi10ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQotX0xUX1BBVEhfTERfR05VCi1BQ19TVUJTVChbTERdKQotCi1fTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCi1dKSMgTFRfUEFUSF9MRAotCi0jIE9sZCBuYW1lczoKLUFVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQotQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKLWRubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQotCi0KLSMgX0xUX1BBVEhfTERfR05VCi0jLSAtLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotXSkjIF9MVF9QQVRIX0xEX0dOVQotCi0KLSMgX0xUX0NNRF9SRUxPQUQKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCi0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KLW00X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAotICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKLSAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQotcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCi1jYXNlICRyZWxvYWRfZmxhZyBpbgotIiIgfCAiICIqKSA7OwotKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Ci1lc2FjCi1yZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1jYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0gICAgZmkKLSAgICA7OwotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAkd2wtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCi1fTFRfVEFHREVDTChbXSwgW3JlbG9hZF9mbGFnXSwgWzFdLCBbSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlc10pZG5sCi1fTFRfVEFHREVDTChbXSwgW3JlbG9hZF9jbWRzXSwgWzJdKWRubAotXSkjIF9MVF9DTURfUkVMT0FECi0KLQotIyBfTFRfUEFUSF9ERAotIyAtLS0tLS0tLS0tLQotIyBmaW5kIGEgd29ya2luZyBkZAotbTRfZGVmdW4oW19MVF9QQVRIX0REXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIGEgd29ya2luZyBkZF0sIFthY19jdl9wYXRoX2x0X0REXSwKLVtwcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKLWNhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCi06ICR7bHRfREQ6PSRERH0KLUFDX1BBVEhfUFJPR1NfRkVBVFVSRV9DSEVDSyhbbHRfRERdLCBbZGRdLAotW2lmICIkYWNfcGF0aF9sdF9ERCIgYnM9MzIgY291bnQ9MSA8Y29uZnRlc3QyLmkgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgotICBjbXAgLXMgY29uZnRlc3QuaSBjb25mdGVzdC5vdXQgXAotICAmJiBhY19jdl9wYXRoX2x0X0REPSIkYWNfcGF0aF9sdF9ERCIgYWNfcGF0aF9sdF9ERF9mb3VuZD06Ci1maV0pCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0Mi5pIGNvbmZ0ZXN0Lm91dF0pCi1dKSMgX0xUX1BBVEhfREQKLQotCi0jIF9MVF9DTURfVFJVTkNBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIGNvbW1hbmQgdG8gdHJ1bmNhdGUgYSBiaW5hcnkgcGlwZQotbTRfZGVmdW4oW19MVF9DTURfVFJVTkNBVEVdLAotW200X3JlcXVpcmUoW19MVF9QQVRIX0REXSkKLUFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gdHJ1bmNhdGUgYmluYXJ5IHBpcGVzXSwgW2x0X2N2X3RydW5jYXRlX2Jpbl0sCi1bcHJpbnRmIDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmID5jb25mdGVzdC5pCi1jYXQgY29uZnRlc3QuaSBjb25mdGVzdC5pID5jb25mdGVzdDIuaQotbHRfY3ZfdHJ1bmNhdGVfYmluPQotaWYgIiRhY19jdl9wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCi0gIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCi0gICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJGFjX2N2X3BhdGhfbHRfREQgYnM9NDA5NiBjb3VudD0xIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0Ci10ZXN0IC16ICIkbHRfY3ZfdHJ1bmNhdGVfYmluIiAmJiBsdF9jdl90cnVuY2F0ZV9iaW49IiRTRUQgLWUgNHEiXSkKLV9MVF9ERUNMKFtsdF90cnVuY2F0ZV9iaW5dLCBbbHRfY3ZfdHJ1bmNhdGVfYmluXSwgWzFdLAotICBbQ29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlXSkKLV0pIyBfTFRfQ01EX1RSVU5DQVRFCi0KLQotIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcwotIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcwotbTRfZGVmdW4oW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKLW00X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQotQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllc10sCi1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCwKLVtsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE1BR0lDX0NNRCcKLWx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPQotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J3Vua25vd24nCi0jIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKLSMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KLSMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgotIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCi0jICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCi0jICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCi0jICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCi0jIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeFtbNC05XV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCi0gIDs7Ci0KLWN5Z3dpbiopCi0gICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICA7OwotCi1taW5ndyogfCBwdzMyKikKLSAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQotICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKLSAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICBlbHNlCi0gICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWNlZ2NjKikKLSAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaSo4NiApCi0gICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgotICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KLSAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JwotICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICBmaQotICA7OwotCi1oYWlrdSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWhwdXgxMC4yMCogfCBocHV4MTEqKQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbwotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEZbIC1dWzAtOV1bMC05XSkoLWJpdCk/KCBbTE1dU0IpPyBzaGFyZWQgb2JqZWN0KCBmaWxlKT9bLCAtXSogUEEtUklTQyBbMC05XVwuWzAtOV0nXQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAotICAgIDs7Ci0gICopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV1cLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqIHwgbmV0YnNkZWxmKi1nbnUpCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi0qbnRvKiB8ICpxbngqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1vcGVuYnNkKiB8IGJpdHJpZyopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotcmRvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgbW90b3JvbGEpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAotICAgIDs7Ci0gIG5jcikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHNlcXVlbnQpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJwotICAgIDs7Ci0gIHNuaSkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbwotICAgIDs7Ci0gIHNpZW1lbnMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBwYykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotdHBmKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLW9zMiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci1lc2FjCi1dKQotCi1maWxlX21hZ2ljX2dsb2I9Ci13YW50X25vY2FzZWdsb2I9bm8KLWlmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgbWluZ3cqIHwgcHczMiopCi0gICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcwotICAgIGVsc2UKLSAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1tcMV1dXC9bW1wxXV1cL2c7L2ciYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotZmkKLQotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotCi1fTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAotICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCi1fTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAotICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLV9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19nbG9iXSwgWzFdLAotICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCi1fTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKLSAgICBbRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLV0pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECi0KLQotIyBMVF9QQVRIX05NCi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtMVF9QQVRIX05NXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAotW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KLSAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09JE5NCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCi0gIGZpCi0gIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JIyBNU1lTIGNvbnZlcnRzIC9kZXYvbnVsbCB0byBOVUwsIE1pbkdXIG5tIHRyZWF0cyBOVUwgYXMgZW1wdHkKLQljYXNlICRidWlsZF9vcyBpbgotCW1pbmd3KikgbHRfYmFkX2ZpbGU9Y29uZnRlc3Qubm0vbm9maWxlIDs7Ci0JKikgbHRfYmFkX2ZpbGU9L2Rldi9udWxsIDs7Ci0JZXNhYwotCWNhc2UgYCIkdG1wX25tIiAtQiAkbHRfYmFkX2ZpbGUgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSokbHRfYmFkX2ZpbGUqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKLQkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhayAyCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhayAyCi0JICAgIDs7Ci0JICAqKQotCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAotCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9JGx0X3NhdmVfaWZzCi0gIGRvbmUKLSAgOiAke2x0X2N2X3BhdGhfTk09bm99Ci1maV0pCi1pZiB0ZXN0IG5vICE9ICIkbHRfY3ZfcGF0aF9OTSI7IHRoZW4KLSAgTk09JGx0X2N2X3BhdGhfTk0KLWVsc2UKLSAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCi0gIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6Ci0gICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGVsc2UKLSAgICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbZHVtcGJpbiAibGluayAtZHVtcCJdLCA6KQotICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0gICAgKkNPRkYqKQotICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCi0gICAgICA7OwotICAgICopCi0gICAgICBEVU1QQklOPToKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBBQ19TVUJTVChbRFVNUEJJTl0pCi0gIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCi0gICAgTk09JERVTVBCSU4KLSAgZmkKLWZpCi10ZXN0IC16ICIkTk0iICYmIE5NPW5tCi1BQ19TVUJTVChbTk1dKQotX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKLQotQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKLSAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgotICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECi0gIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgotICBmaQotICBybSAtZiBjb25mdGVzdCpdKQotXSkjIExUX1BBVEhfTk0KLQotIyBPbGQgbmFtZXM6Ci1BVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKLUFVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKLQotIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQotIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCi0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCi1tNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKLW00X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQotbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCi1BQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCi1sdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKLVtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKLQotY2FzZSAkaG9zdF9vcyBpbgotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOwotICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSAgKi0taWRlbnRpZnktc3RyaWN0KikKLSAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLSopCi0gICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotICA7OwotZXNhYwotXSkKLXNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAotdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwotCi1fTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAotICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKLV0pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgotCi0KLSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAotbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAotW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCi10ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAotQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAotICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCi0gIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCi0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0Kl0pCi1pZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KLSAgTUFOSUZFU1RfVE9PTD06Ci1maQotX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCi1dKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAotCi0KLSMgX0xUX0RMTF9ERUZfUChbRklMRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCi0jIEtlZXAgaW4gc3luYyB3aXRoIGZ1bmNfZGxsX2RlZl9wIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotQUNfREVGVU4oW19MVF9ETExfREVGX1BdLAotW2RubAotICB0ZXN0IERFRiA9ICJgJFNFRCAtbiBkbmwKLSAgICAtZSAnXCcncy9eW1sJIF1dKi8vJ1wnJyBkbmwgU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCi0gICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnIGRubCAgICAgIERlbGV0ZSBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMKLSAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFtbCSBdXS4qXCkqJC9ERUYvcCdcJycgZG5sCi0gICAgLWUgcSBkbmwgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgY29uc2lkZXIgdGhlIGZpcnN0ICJyZWFsIiBsaW5lCi0gICAgJDFgIiBkbmwKLV0pIyBfTFRfRExMX0RFRl9QCi0KLQotIyBMVF9MSUJfTQotIyAtLS0tLS0tLQotIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5Ci1BQ19ERUZVTihbTFRfTElCX01dLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCi0gICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAotICA7OwotKi1uY3Itc3lzdjQuMyopCi0gIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09LWxtdykKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09LWxtKQotICA7OwotZXNhYwotQUNfU1VCU1QoW0xJQk1dKQotXSkjIExUX0xJQl9NCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKLQotCi0jIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKLVttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKLQotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotCi1pZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBudmNjKikKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKLSAgKikKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7Ci0gIGVzYWMKLQotICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCi0gICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKLSAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKLWZpCi1fTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAotCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKLV0pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQotCi0KLSMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCi1BQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotCi0jIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgotQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCi1bCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tbQkNERUdSU1RdXScKLQotIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCi1zeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKLQotIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeCopCi0gIHN5bWNvZGU9J1tbQkNEVF1dJwotICA7OwotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJwotICA7OwotaHB1eCopCi0gIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKLSAgZmkKLSAgOzsKLWlyaXgqIHwgbm9uc3RvcHV4KikKLSAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJwotICA7Owotb3NmKikKLSAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKLSAgOzsKLXNvbGFyaXMqKQotICBzeW1jb2RlPSdbW0JEUlRdXScKLSAgOzsKLXNjbzMuMnY1KikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjQuMnV3MiopCi0gIHN5bWNvZGU9J1tbRFRdXScKLSAgOzsKLXN5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gIHN5bWNvZGU9J1tbQUJEVF1dJwotICA7Owotc3lzdjQpCi0gIHN5bWNvZGU9J1tbREZOU1RVXV0nCi0gIDs7Ci1lc2FjCi0KLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgotY2FzZSBgJE5NIC1WIDI+JjFgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Ci1lc2FjCi0KLWlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCi0gICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgotICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgotICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCi0gIGx0X2NfbmFtZV9saWJfaG9vaz0iXAotICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAotICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgotZWxzZQotICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQotICBsdF9jZGVjbF9ob29rPQotICBsdF9jX25hbWVfaG9vaz0KLSAgbHRfY19uYW1lX2xpYl9ob29rPQotZmkKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KLSMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAotIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCi0kbHRfY2RlY2xfaG9va1wKLSIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAotJGx0X2NfbmFtZV9ob29rXAotIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKLSMgc3ltYm9sIGFkZHJlc3MuCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAotJGx0X2NfbmFtZV9saWJfaG9va1wKLSIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCi0iIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKLSIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAotICA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKLSAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KLSAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKLSAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAotIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCi0iICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKLSIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAotIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKLSIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAotIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCi0iICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAotIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAotIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCi0iICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKLSIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKLSIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotCi0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICBwaXBlX3dvcmtzPW5vCi0KLSAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Ci12b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLV9MVF9FT0YKLQotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgotICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCi0gICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLS8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQotICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwotIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkIF9fb3NmX18KLS8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwotIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCi0jZWxzZQotIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1fTFRfRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JwotCi0JICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwotTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIHZvaWQgICAgICAgKmFkZHJlc3M7Ci19Ci1sdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Ci17Ci0gIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKLV9MVF9FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAodm9pZCAqKSAwfQotfTsKLQotLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCi0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECi1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotX0xUX0VPRgotCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLQkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLQkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgotCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUwotCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKLQotICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgotICAgIGJyZWFrCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQotICBmaQotZG9uZQotXSkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KLWZpCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQob2spCi1maQotCi0jIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KLWlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0gIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotZmkKLQotX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfcGlwZV0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwgWzFdLAotICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAotICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uXSkKLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnRdLCBbMV0sCi0gICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGludG8gYSBsaXN0IG9mIHN5bWJvbHMgdG8gbWFudWFsbHkgcmVsb2NhdGVdKQotX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAotICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKLSAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAotICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAotICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCi1fTFRfREVDTChbbm1faW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sIFsxXSwKLSAgICBbVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZV0pCi1fTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAotICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCi1dKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKLQotCi0jIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKLVttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKLV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQotCi1tNF9pZihbJDFdLCBbQ1hYXSwgWwotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KLSAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICAgOzsKLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0gICAgICA7OwotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAotICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCi0gICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqKQotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKnFueCogfCAqbnRvKikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXhbWzQtOV1dKikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKLQkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0JIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLQltNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKLQk7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqfGlhNjQqKQotCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGludGVyaXgqKQotCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQotCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLQkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCSAgICA7OwotCSAgZWNwYyogKQotCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgaWNwYyogKQotCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCi0JICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyogfCBwZ2NwcCopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBDb21wYXEgQysrCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQotCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbHlueG9zKikKLQk7OwotICAgICAgbTg4ayopCi0JOzsKLSAgICAgIG12cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGN4eCopCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbmV0YnNkKiB8IG5ldGJzZGVsZiotZ251KQotCTs7Ci0gICAgICAqcW54KiB8ICpudG8qKQotICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyogfCBzdW5DQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLV0sCi1bCi0gIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgotICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3MyKikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1zdGF0aWMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKLSAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZwotICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgKm50byogfCAqcW54KikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1YbGlua2VyICcKLSAgICAgIGlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iLVhjb21waWxlciAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIgotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgbmFnZm9yKikKLSAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJwotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvczIqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotICAgICAgZWNjKikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgotICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCi0gICAgICBpY2MqIHwgaWZvcnQqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KLSAgICAgIGxmOTUqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKLQk7OwotICAgICAgbmFnZm9yKikKLQkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQk7OwotICAgICAgdGNjKikKLQkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCTs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCi0JIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJwotCTs7Ci0gICAgICAqKQotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFtbMS03XV0uKiB8ICpTdW4qRm9ydHJhbipcIDguW1swLTNdXSopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCi0JICA7OwotCSpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgIDs7Ci0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgIDs7Ci0gICAgICAgICpJbnRlbCpcIFtbQ0ZdXSpDb21waWxlciopCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0JICA7OwotCSpQb3J0bGFuZFwgR3JvdXAqKQotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJwotICAgICAgOzsKLQotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICB1bmljb3MqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLV0pCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgIDs7Ci0gICopCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCi0gICAgOzsKLWVzYWMKLQotQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSwKLSAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCi0gIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCi1fTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgotICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCi0gICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCi0gICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAotICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OwotICAgICBlc2FjXSwKLSAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKLWZpCi1fTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCi0JW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCi0KLV9MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAotCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgotX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKLSAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAotICAkbHRfdG1wX3N0YXRpY19mbGFnLAotICBbXSwKLSAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQotX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCi0JW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQotXSkjIF9MVF9DT01QSUxFUl9QSUMKLQotCi0jIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKLVtBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAotbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotbTRfaWYoWyQxXSwgW0NYWF0sIFsKLSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4W1s0LTldXSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCi0gICAgIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKLSAgICAjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcwotICAgICMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgotICAgICMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCi0gICAgIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQotICAgICMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCi0gICAgaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nYGZ1bmNfZWNob19hbGwgJE5NIHwgJFNFRCAtZSAnXCcncy9CXChbW15CXV0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChbc3Vic3RyXShcJCAxLDEsMSkgIT0gIi4iKSkgeyBpZiAoKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpIHsgcHJpbnQgXCQgMSAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDEgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSRsdGRsbF9jbWRzCi0gICAgOzsKLSAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIGNsKikKLSAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBsaW51eCogfCBrKmJzZCotZ251IHwgZ251KikKLSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT1ubwotICAgIDs7Ci0gICopCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgICA7OwotICBlc2FjCi1dLCBbCi0gIHJ1bnBhdGhfdmFyPQotICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0gIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci0gIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi0gIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9Ci0gIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5ICcgKCcgYW5kICcpJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6ICdhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgJ2EnIGFuZCAnYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdkJy4KLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi0gICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAotICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90Ci0gICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgotICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgotICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCi1kbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqIHwgYml0cmlnKikKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBnbnUqKQotICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0KLSAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCi0gICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgotICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwotICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLQkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKLQkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCi0JIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKLQkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgotCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgotCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7Ci0JICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKLQkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKLQkgICopCi0JICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKikKLQlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKLQk7OwotICAgIGVzYWMKLSAgZmkKLQotICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHdsJwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLSAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgfCAkU0VEIC1lICdzLyhbXildXCspXHNcKy8vJyAyPiYxYCBpbgotICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4W1szLTldXSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKLSoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KLSoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgotCi1fTFRfRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCi0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKLQkjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgotICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgIGZpfgotICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBoYWlrdSopCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBzaHJleHRfY21kcz0uZGxsCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCXByZWZpeF9jbWRzPSIkU0VEIn4KLQlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCWZpfgotCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCi0gICAgICB0bXBfZGlldD1ubwotICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCi0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKLQkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCi0gICAgICB0aGVuCi0JdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCi0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0gICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwotCSAgOzsKLQlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQotCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7Ci0JZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKLQlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgotCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKLQlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OwotICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMwotICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKLQl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCi0JICB0bXBfYWRkZmxhZz0gOzsKLQludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCi0JICA7OwotCWVzYWMKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JZXNhYwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0gICAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCi0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0gICAgICAgIGZpCi0KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCXRjYyopCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctcmR5bmFtaWMnCi0JICA7OwotCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKLQkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0JICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotCSAgZmkKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLQl3bGFyYz0KLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1fTFRfRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW5ub3QKLSoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotCTs7Ci0JKikKLQkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLQkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCi0JICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICBmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSI7IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyIgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgotCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQotCSMgYnJva2VuIGNvbGxlY3QyLgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYWl4W1s0LTldXSopCi0gICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPQotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gR05VIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgdG8gQUlYIG5tLgotCSMgV2l0aG91dCB0aGUgIi1sIiBvcHRpb24sIG9yIHdpdGggdGhlICItQiIgb3B0aW9uLCBBSVggbm0gdHJlYXRzCi0JIyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMKLQkjIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KLQkjIFdoaWxlIHRoZSAnd2Vhaycga2V5d29yZCBpcyBpZ25vcmVkIGluIHRoZSBFeHBvcnQgRmlsZSwgd2UgbmVlZAotCSMgaXQgaW4gdGhlIEltcG9ydCBGaWxlIGZvciB0aGUgJ2FpeC1zb25hbWUnIGZlYXR1cmUsIHNvIHdlIGhhdmUKLQkjIHRvIHJlcGxhY2UgdGhlICItQiIgb3B0aW9uIHdpdGggIi1QIiBmb3IgQUlYIG5tLgotCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW1teQl1dKlwpJC9QXDEvJ1wnJ2AgLVBDcGdsICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSAmJiAoW3N1YnN0cl0oXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgotCSMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZwotCSMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KLQkjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKLQkjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCi0JIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKLQkjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcwotCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKLQkjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0JIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubwotCSMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLQkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgYnJlYWsKLQkgIGZpCi0JICBkb25lCi0JICBpZiB0ZXN0IHN2cjQsbm8gPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKLQkgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgotCSAgICAjIFdlIGhhdmUgdG8gZm9yY2UgcnVudGltZSBsaW5raW5nIGluIHRoaXMgY2FzZS4KLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHdsLWYsJwotICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICBhaXgsKikgOzsgIyB0cmFkaXRpb25hbCwgbm8gaW1wb3J0IGZpbGUKLSAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQotCSMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JICBlbHNlCi0JICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0JICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIickd2wtRycKLQlmaQotCSMgTmVlZCB0byBlbnN1cmUgcnVudGltZSBsaW5raW5nIGlzIGRpc2FibGVkIGZvciB0aGUgdHJhZGl0aW9uYWwKLQkjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcwotCSMgL3dpdGgvIEltcG9ydCBGaWxlIC0gd2UgZG8gbm90IHdhbnQgdG8gbWl4IHRoZW0uCi0Jc2hhcmVkX2ZsYWdfYWl4PSctc2hhcmVkJwotCXNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPSckd2wtRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCi0JICBmaQotCSAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJwotCSAgc2hhcmVkX2ZsYWdfc3ZyND0nJHdsLUcnCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJwotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZwotICAgICAgZWxzZQotCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLQkgIyBlbXB0eSBleGVjdXRhYmxlLgotCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm5vdG9rJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJwotCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBlbHNlCi0JICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgIGZpCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQkgICMgLWJydGwgYWZmZWN0cyBtdWx0aXBsZSBsaW5rZXIgc2V0dGluZ3MsIC1iZXJvayBkb2VzIG5vdCBhbmQgaXMgb3ZlcnJpZGRlbiBsYXRlcgotCSAgY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQ9J2BmdW5jX2VjaG9fYWxsICIkY29tcGlsZXJfZmxhZ3MgIiB8ICRTRUQgLWUgInMlLWJydGxcXChbWywgXV1cXCklLWJlcm9rXFwxJWciYCcKLQkgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLQkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCi0JICBmaQotCSAgaWYgdGVzdCBhaXggIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCi0JICBlbHNlCi0JICAgICMgdXNlZCBieSAtZGxwcmVvcGVuIHRvIGdldCB0aGUgc3ltYm9scwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJwotCSAgZmkKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBic2RpW1s0NV1dKikKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGNsKikKLQkjIE5hdGl2ZSBNU1ZDCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQlsaWJleHQ9bGliCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9LmRsbAotCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCi0gICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOwotICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLSAgICAgICAgICBmaX4KLSAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0gICAgICAgICAgbGlua25hbWVzPScKLQkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCi0JIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLQlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCi0JX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCSMgRG9uJ3QgdXNlIHJhbmxpYgotCV9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCi0JX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLSAgICAgICAgICAgICouZXhlfCouRVhFKSA7OwotICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKLSAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgZXNhY34KLSAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLSAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0gICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLSAgICAgICAgICBmaScKLQk7OwotICAgICAgKikKLQkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCWxpYmV4dD1saWIKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0uZGxsCi0JIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0JX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCi0JIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLQlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMi4qKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCW00X2lmKCQxLCBbXSwgWwotCSAgIyBPbGRlciB2ZXJzaW9ucyBvZiB0aGUgMTEuMDAgY29tcGlsZXIgZG8gbm90IHVuZGVyc3RhbmQgLWIgeWV0Ci0JICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKLQkgIF9MVF9MSU5LRVJfT1BUSU9OKFtpZiAkQ0MgdW5kZXJzdGFuZHMgLWJdLAotCSAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfX2IsICQxKSwgWy1iXSwKLQkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAotCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCi0JICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgIDs7Ci0JKikKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKLQkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0JIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KLQkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotCUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sXSwKLQkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCi0JICBbc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0JICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgotCSAgIEFDX0xJTktfSUZFTFNFKAotCSAgICAgW0FDX0xBTkdfU09VUkNFKAotCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWwotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGVuZF1dLAotCQkJICAgICAgW0ZvcnRyYW5dLCBbWwotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGVuZF1dKV0pXSwKLQkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKLQkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQotICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1NdKQotCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlmaQotCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPW5vCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgbGludXgqKQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIHRjYyopCi0JIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG5ldGJzZCogfCBuZXRic2RlbGYqLWdudSkKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCogfCBiaXRyaWcqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCWZpCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBzaHJleHRfY21kcz0uZGxsCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCXByZWZpeF9jbWRzPSIkU0VEIn4KLQlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOwotCWZpfgotCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0gICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKLSAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCi0Jd2xhcmM9JyR3bCcKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotICAgICAgZWxzZQotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiQ29tcGlsZXJzIDUuMCIqKQotCSAgd2xhcmM9JycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCSAgOzsKLQkqKQotCSAgd2xhcmM9JyR3bCcKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0JIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteixub2RlZnMnCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmxhcmdlZHluc3ltJwotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZmkKLV0pCi1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLV9MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKLQotX0xUX0RFQ0woW10sIFtsaWJleHRdLCBbMF0sIFtPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIildKWRubAotX0xUX0RFQ0woW10sIFtzaHJleHRfY21kc10sIFsxXSwgW1NoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpXSlkbmwKLV9MVF9ERUNMKFtdLCBbZXh0cmFjdF9leHBzeW1zX2NtZHNdLCBbMl0sCi0gICAgW1RoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0KLSAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCi0gICAgY2FzZSAkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dLAotCVtsdF9jdl9dX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpLAotCVskUk0gY29uZnRlc3QqCi0JZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLQlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotCSAgc29uYW1lPWNvbmZ0ZXN0Ci0JICBsaWI9Y29uZnRlc3QKLQkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotCSAgZGVwbGlicz0KLQkgIHdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCSAgcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQotCSAgY29tcGlsZXJfZmxhZ3M9LXYKLQkgIGxpbmtlcl9mbGFncz0tdgotCSAgdmVyc3RyaW5nPQotCSAgb3V0cHV0X29iamRpcj0uCi0JICBsaWJuYW1lPWNvbmZ0ZXN0Ci0JICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLQkgIGlmIEFDX1RSWV9FVkFMKF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCi0JICB0aGVuCi0JICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JICBlbHNlCi0JICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgZmkKLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotCWVsc2UKLQkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotCWZpCi0JJFJNIGNvbmZ0ZXN0KgotCV0pCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9JGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQotX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKLSAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCi1fTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKLSAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKLSAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCi1fTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKLSAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCi1fTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAotICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQotX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCi0gICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKLV9MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKLSAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCi1fTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAotICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQotX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZwotICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKLV9MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQotX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKLSAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKLV9MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCi0gICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKLV9MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCi0gICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCi0gICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCi0gICAgW1doZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnRdKQotX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwotICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAotICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKLSAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKLSAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKLSAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX21pbnVzX0xdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCi0gICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX3NobGlicGF0aF92YXJdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCi0gICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2F1dG9tYXRpY10sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCi0gICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKLSAgICBhZ2FpbnN0IGl0XSkKLV9MVF9UQUdERUNMKFtdLCBbaW5oZXJpdF9ycGF0aF0sIFswXSwKLSAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKLSAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCi1fTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCi0gICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCi1fTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKLV9MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKLSAgICBbVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9sc10pCi1fTFRfVEFHREVDTChbXSwgW2V4Y2x1ZGVfZXhwc3ltc10sIFsxXSwKLSAgICBbU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9sc10pCi1fTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKLSAgICBbU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkXSkKLV9MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAotICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCi1fTFRfVEFHREVDTChbXSwgW3Bvc3RsaW5rX2NtZHNdLCBbMl0sCi0gICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQotX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKLSAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKLWRubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAotZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQotXSkjIF9MVF9MSU5LRVJfU0hMSUJTCi0KLQotIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQotIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCi0jIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbHRfc2F2ZV9DQz0kQ0MKLUFDX0xBTkdfUFVTSChDKQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9YwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCi0KLV9MVF9UQUdfQ09NUElMRVIKLSMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgotIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCi1jb21waWxlcl9ERUZBVUxUPSRDQwotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMjIENBVkVBVCBFTVBUT1I6Ci0jIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKLSAgX0xUX0NPTVBJTEVSX1BJQygkMSkKLSAgX0xUX0NPTVBJTEVSX0NfTygkMSkKLSAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQotICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0gIExUX1NZU19ETE9QRU5fU0VMRgotICBfTFRfQ01EX1NUUklQTElCCi0KLSAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0gICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwotICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gICAgZmkKLSAgICA7OwotCi0gIGFpeFtbNC05XV0qKQotICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQotICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKLSAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcwotICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLSAgX0xUX0NPTkZJRygkMSkKLWZpCi1BQ19MQU5HX1BPUAotQ0M9JGx0X3NhdmVfQ0MKLV0pIyBfTFRfTEFOR19DX0NPTkZJRwotCi0KLSMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKLSMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQotIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCi1bbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKLWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKLSAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWVsc2UKLSAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCi1maQotCi1BQ19MQU5HX1BVU0goQysrKQotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi1fTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKLSMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKLSMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKLSMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgotaWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0gICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi0gIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKLQotICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0gIF9MVF9UQUdfQ09NUElMRVIKLQotICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0gICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi0gIGx0X3NhdmVfQ0M9JENDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgbHRfc2F2ZV9MRD0kTEQKLSAgbHRfc2F2ZV9HQ0M9JEdDQwotICBHQ0M9JEdYWAotICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKLSAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotICBlbHNlCi0gICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi0gIGZpCi0gIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgotICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLSAgZWxzZQotICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECi0gIGZpCi0gIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi0gIENDPSR7Q1hYLSJjKysifQotICBDRkxBR1M9JENYWEZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCi0gICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCi0gICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCi0gICAgZWxzZQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotICAgICAgTFRfUEFUSF9MRAotCi0gICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgICAgICB3bGFyYz0nJHdsJwotCi0gICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAotCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICAgIGZpCi0gICAgICBlbHNlCi0gICAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgICAgIHdsYXJjPQotCi0gICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCi0gICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBmaQotCi0gICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0gICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJwotCi0gICAgZWxzZQotICAgICAgR1hYPW5vCi0gICAgICB3aXRoX2dudV9sZD1ubwotICAgICAgd2xhcmM9Ci0gICAgZmkKLQotICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgzKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgOzsKLSAgICAgIGFpeFtbNC05XV0qKQotICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLSAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0gICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLSAgICAgICAgICBub19lbnRyeV9mbGFnPQotICAgICAgICBlbHNlCi0gICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0gICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0gICAgICAgICAgIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KLSAgICAgICAgICAjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKLSAgICAgICAgICAjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCi0gICAgICAgICAgIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6Ci0gICAgICAgICAgIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKLSAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCi0gICAgICAgICAgIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKLSAgICAgICAgICAjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcwotICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KLSAgICAgICAgICAjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCi0gICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQotICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKLQkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICAgICAgY2FzZSAkbGRfZmxhZyBpbgotCSAgICAgICotYnJ0bCopCi0JICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICAgICAgYnJlYWsKLQkgICAgICAgIDs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICAgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgotCSAgICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCi0JICAgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgotCSAgICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgotCSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgotCSAgICBmaQotCSAgICA7OwotICAgICAgICAgIGVzYWMKLQotICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgICBmaQotCi0gICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKLSAgICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCi0gICAgICAgIGFpeCwqKSA7OwkjIG5vIGltcG9ydCBmaWxlCi0gICAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQotICAgICAgICAgICMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KLSAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgotICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQotICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCi0JICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgICAgOgotCSAgZWxzZQotCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLQkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotCSAgZmkKLSAgICAgICAgICBlc2FjCi0gICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKLQkgIGZpCi0JICAjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCi0JICAjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcwotCSAgIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KLQkgIHNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKLQkgIHNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0gICAgICAgICAgZWxzZQotCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KLQkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCi0JICAgIGVsc2UKLQkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKLQkgICAgZmkKLQkgICAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJwotCSAgICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKLSAgICAgICAgICBmaQotICAgICAgICBmaQotCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJwotICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCi0JIyBleHBvcnQuCi0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0JaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCi0gICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotICAgICAgICAgICMgVGhlICItRyIgbGlua2VyIGZsYWcgYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzLgotICAgICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm5vdG9rJwotICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQotICAgICAgICAgICMgZXhlY3V0YWJsZS4KLSAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgICAgIGVsc2UKLQkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0JICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLQkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKLQkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJwotCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgIGVsc2UKLQkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgICAgZmkKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKLQkgICAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCi0JICAgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoW1ssIF1dXFwpJS1iZXJva1xcMSVnImAnCi0JICAgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLQkgICAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKLQkgICAgICAjIGxpYnJhcmllcy4gTmVlZCAtYm5vcnRsIGxhdGUsIHdlIG1heSBoYXZlIC1icnRsIGluIExERkxBR1MuCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCi0JICAgIGZpCi0JICAgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCi0JICAgIGVsc2UKLQkgICAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJwotCSAgICBmaQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJwotICAgICAgICAgIGZpCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgICAgIGJlb3MqKQotCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQllbHNlCi0JICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotCi0gICAgICBjaG9ydXMqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgICopCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KLQksY2wqIHwgbm8sY2wqKQotCSAgIyBOYXRpdmUgTVNWQwotCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJwotCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQkgIGxpYmV4dD1saWIKLQkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCSAgc2hyZXh0X2NtZHM9LmRsbAotCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCi0gICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7Ci0gICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotICAgICAgICAgICAgZml+Ci0gICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0gICAgICAgICAgICBsaW5rbmFtZXM9JwotCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLQkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCSAgIyBEb24ndCB1c2UgcmFubGliCi0JICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJwotCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLSAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0gICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0gICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OwotICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgIGVzYWN+Ci0gICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgotICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0gICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0gICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotICAgICAgICAgICAgZmknCi0JICA7OwotCSopCi0JICAjIGcrKwotCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLQkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLQkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCi0JICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgotICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgICAgICAgZml+Ci0gICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSAgZWxzZQotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICBmaQotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQotCTs7Ci0KLSAgICAgIG9zMiopCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQlzaHJleHRfY21kcz0uZGxsCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgIGVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KLQkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICBwcmVmaXhfY21kcz0iJFNFRCJ+Ci0JICBpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KLQkgICAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7Ci0JICBmaX4KLQkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgotCSAgY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+Ci0JICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgotCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0JX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0JOzsKLQotICAgICAgZGd1eCopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgZWMrKyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBmcmVlYnNkMi4qKQotICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCi0JIyBzd2l0Y2ggdG8gRUxGCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZC1lbGYqKQotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICAgICAjIGNvbnZlbnRpb25zCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGhhaWt1KikKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgICAgOzsKLQotICAgICAgaHB1eDkqKQotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLSAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICAgICAgOzsKLSAgICAgICAgICBhQ0MqKQotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqKQotICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBocHV4MTAqfGhwdXgxMSopCi0gICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLSAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAqKQotCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgYUNDKikKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgICBocHBhKjY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgOzsKLQkgICAgICBpYTY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgICAgKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0gICAgICAgICAgKikKLQkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgICAgICAgIGhwcGEqNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICAgIGlhNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICAgICAgOzsKLQkgICAgICAgICAgKikKLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICBlc2FjCi0JICAgICAgZmkKLQkgICAgZWxzZQotCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgZmkKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICA7OwotCi0gICAgICBpbnRlcml4W1szLTldXSopCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLQkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0JIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLQkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0JIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgQ0MqKQotCSAgICAjIFNHSSBDKysKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAgICMgaW4gdGhlIGFyY2hpdmUuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCi0JICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICBlbHNlCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKLQkgICAgICBmaQotCSAgICBmaQotCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQkgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgS0NDKikKLQkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAjCi0JICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyogKQotCSAgICAjIEludGVsIEMrKwotCSAgICB3aXRoX2dudV9sZD15ZXMKLQkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JICAgICAgKiJWZXJzaW9uIDcuIiopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCQk7OwotCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICAgICAgICB0bXBfaWR5bj0KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCQllc2FjCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JCTs7Ci0JICAgIGVzYWMKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotCSAgICA7OwotICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQotICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQkgICAgY2FzZSBgJENDIC1WYCBpbgotCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCi0JICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKLQkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLSAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KLSAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgotICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgotICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgotICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0gICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+Ci0gICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0gICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgICAgOzsKLQkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgICA7OwotCSAgICBlc2FjCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICAgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKLQotCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgIwotCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJwotCSAgICA7OwotCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCi0JICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQkgICAgZmkKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKLQotCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgICAjIGluIHRoZSBhcmNoaXZlLgotCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLQotICAgICAgbHlueG9zKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG04OGsqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG12cyopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgY3h4KikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLQkgICopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0KLSAgICAgIG5ldGJzZCopCi0gICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLQkgIHdsYXJjPQotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWZpCi0JIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLQk7OwotCi0gICAgICAqbnRvKiB8ICpxbngqKQotICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotCTs7Ci0KLSAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKLQlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwotCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGZpCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLQotICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIEtDQyopCi0JICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCSAgICBjYXNlICRob3N0IGluCi0JICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKLQkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLSAgICAgICAgICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICAgIGN4eCopCi0JICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICBvc2YzKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKLQkJOzsKLQkgICAgICAqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLSAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0gICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCi0JICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JCTs7Ci0JICAgIGVzYWMKLQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0JICAqKQotCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KLQkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICAgb3NmMyopCi0JICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCQkgIDs7Ci0JICAgICAgICAqKQotCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCi0JCSAgOzsKLQkgICAgICBlc2FjCi0KLQkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQotCSAgICBlbHNlCi0JICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICBmaQotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHBzb3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotCi0gICAgICBzdW5vczQqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICAgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHNvbGFyaXMqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKiB8IHN1bkNDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCi0JICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgICAgY2FzZSAkaG9zdF9vcyBpbgotCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JICAgICAgKikKLQkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KLQkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICAgIDs7Ci0gICAgICAgICAgZ2N4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQotCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC16ICR7d2x9ZGVmcycKLQkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0KLQkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0JICAgICAgZWxzZQotCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcwotCSAgICAgICAgIyBwbGF0Zm9ybS4KLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCi0JICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQkgICAgICBmaQotCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICR3bCRsaWJkaXInCi0JICAgICAgY2FzZSAkaG9zdF9vcyBpbgotCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwotCQkqKQotCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JCSAgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIENDKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLQkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0JIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLQkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLQkjIGFzIC16IGRlZnMuCi0JX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JwotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosbm9kZWZzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SLCRsaWJkaXInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0JX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJleHBvcnQnCi0JcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgotICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKLQkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgotICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCi0JICAgIDs7Ci0JICAqKQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIDs7Ci0JZXNhYwotICAgICAgOzsKLQotICAgICAgdGFuZGVtKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBOQ0MqKQotCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHZ4d29ya3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotCi0gICAgICAqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLSAgICB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHWFgKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECi0KLSAgICAjIyBDQVZFQVQgRU1QVE9SOgotICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCi0gICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLSAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQotICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCi0gICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKLSAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKLSAgICBfTFRfTElOS0VSX1NITElCUygkMSkKLSAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKLQotICAgIF9MVF9DT05GSUcoJDEpCi0gIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgotCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLSAgTERDWFg9JExECi0gIExEPSRsdF9zYXZlX0xECi0gIEdDQz0kbHRfc2F2ZV9HQ0MKLSAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLSAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKLSAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1maSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCi0KLUFDX0xBTkdfUE9QCi1dKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRwotCi0KLSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0jCi0jIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKLSMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAotIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCi1tNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAotQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKLUFDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKLWZ1bmNfc3RyaXBuYW1lX2NuZiAoKQotewotICBjYXNlIEBTfEAyIGluCi0gIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJVxcXFxAU3xAMlwkJSUiYDs7Ci0gICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJUBTfEAyXCQlJSJgOzsKLSAgZXNhYwotfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgotXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKLQotCi0jIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKLSMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgotX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQotX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KLV9MVF9UQUdWQVIocHJlZGVwcywgJDEpPQotX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQotX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KLQotZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCi1kbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAotZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAotZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKLWRubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgotbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotaW50IGE7Ci12b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQotX0xUX0VPRgotXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotX0xUX0VPRgotXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGltcGxpY2l0IG5vbmUKLSAgICAgIGludGVnZXIqNCBhCi0gICAgICBhPTAKLSAgICAgIHJldHVybgotICAgICAgZW5kCi1fTFRfRU9GCi1dLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSAgICAgIHN1YnJvdXRpbmUgZm9vCi0gICAgICBpbXBsaWNpdCBub25lCi0gICAgICBpbnRlZ2VyIGEKLSAgICAgIGE9MAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLV9MVF9FT0YKLV0sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLXB1YmxpYyBjbGFzcyBmb28gewotICBwcml2YXRlIGludCBhOwotICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKLSAgICBhID0gMDsKLSAgfQotfTsKLV9MVF9FT0YKLV0sIFskMV0sIFtHT10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotcGFja2FnZSBmb28KLWZ1bmMgZm9vKCkgewotfQotX0xUX0VPRgotXSkKLQotX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUwotY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAotKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7Ci0qXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7Ci0qXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Ci1lc2FjCi0KLWRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLWRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi1pZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLQotICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCi0gICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgotICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0KLSAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbwotICAgIGNhc2UgJHByZXYkcCBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAotICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCi0gICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCi0gICAgICAgICBjYXNlICRwIGluCi0gICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgZmkKLSAgICAgICBjYXNlICRwIGluCi0gICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICBlc2FjCi0gICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KLQkgY2FzZSAkcHJldiBpbgotCSAtTCB8IC1SKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0kcHJldiRwCi0JICAgZWxzZQotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAkcHJldiRwIgotCSAgIGZpCi0JICAgOzsKLQkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKLQkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCi0JIGVzYWMKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSRwcmV2JHAKLQkgZWxzZQotCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICRwcmV2JHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICBwcmV2PQotICAgICAgIDs7Ci0KLSAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKLSAgICAqLiRvYmpleHQpCi0gICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCi0JIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCi0JIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSRwCi0JIGVsc2UKLQkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSRwCi0JIGVsc2UKLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KLQotICAgIGVzYWMKLSAgZG9uZQotCi0gICMgQ2xlYW4gdXAuCi0gIHJtIC1mIGEub3V0IGEuZXhlCi1lbHNlCi0gIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCi1maQotCi0kUk0gLWYgY29uZmVzdC4kb2JqZXh0Ci1DRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCi0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1tNF9pZihbJDFdLCBbQ1hYXSwKLVtjYXNlICRob3N0X29zIGluCi1pbnRlcml4W1szLTldXSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KLSAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Ci0gIDs7Ci1lc2FjCi1dKQotCi1jYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCi0qIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OwotZXNhYwotIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9Ci1pZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgotIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCi1maQotX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCi0gICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAotICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KLSAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKLV9MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKLV9MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCi1fTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKLSAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKLV0pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCi0KLQotIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCi1bQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCi1pZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0IG5vID0gIiRGNzciOyB0aGVuCi0gIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKLWZpCi0KLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi1fTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KLWFjX2V4dD1mCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0Ci0jIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCi0jIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCi0jIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KLWlmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRjc3IjsgdGhlbgotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotICBfTFRfVEFHX0NPTVBJTEVSCi0KLSAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLSAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSRDQwotICBsdF9zYXZlX0dDQz0kR0NDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0M9JHtGNzctImY3NyJ9Ci0gIENGTEFHUz0kRkZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLSAgR0NDPSRHNzcKLSAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLSAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0gICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0gICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDMqKQotICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICBhaXhbWzQtOV1dKikKLQlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KLQkgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgotCSAgeWVzLGFpeCx5ZXMpIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQotCSAgeWVzLHN2cjQsKikgOzsJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gYXJjaGl2ZSBtZW1iZXIgb25seQotCSAgeWVzLCopIGVuYWJsZV9zdGF0aWM9bm8gOzsJIyBzaGFyZWQgb2JqZWN0IGluIGxpYi5hIGFyY2hpdmUgYXMgd2VsbAotCSAgZXNhYwotCWZpCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKLQotICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHNzcKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECi0KLSAgICAjIyBDQVZFQVQgRU1QVE9SOgotICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCi0gICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLWZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciCi0KLUFDX0xBTkdfUE9QCi1dKSMgX0xUX0xBTkdfRjc3X0NPTkZJRwotCi0KLSMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAotW0FDX0xBTkdfUFVTSChGb3J0cmFuKQotCi1pZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3Qgbm8gPSAiJEZDIjsgdGhlbgotICBfbHRfZGlzYWJsZV9GQz15ZXMKLWZpCi0KLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi1fTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9Ci0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKLSMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQotIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAotIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIjsgdGhlbgotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKLSAgICAgIHByb2dyYW0gdAotICAgICAgZW5kCi0iCi0KLSAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotICBfTFRfVEFHX0NPTVBJTEVSCi0KLSAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLSAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0gIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSRDQwotICBsdF9zYXZlX0dDQz0kR0NDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0M9JHtGQy0iZjk1In0KLSAgQ0ZMQUdTPSRGQ0ZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQotCi0gIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0gIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICAgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgzKikKLSAgICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICAgICAgICBmaQotICAgICAgICA7OwotICAgICAgYWl4W1s0LTldXSopCi0JaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCi0JICBjYXNlICRlbmFibGVfc2hhcmVkLCR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KLQkgIHllcyxhaXgseWVzKSA7OwkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBmaWxlIG9ubHkKLQkgIHllcyxzdnI0LCopIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKLQkgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKLQkgIGVzYWMKLQlmaQotICAgICAgICA7OwotICAgIGVzYWMKLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0gICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi0gICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi0gICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kYWNfY3ZfZmNfY29tcGlsZXJfZ251Ci0gICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAotCi0gICAgIyMgQ0FWRUFUIEVNUFRPUjoKLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0gICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCi0gICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLWZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GQyIKLQotQUNfTEFOR19QT1AKLV0pIyBfTFRfTEFOR19GQ19DT05GSUcKLQotCi0jIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCi0jIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCi1BQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9UQUdfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz15ZXMKLUNDPSR7R0NKLSJnY2oifQotQ0ZMQUdTPSRHQ0pGTEFHUwotY29tcGlsZXI9JENDCi1fTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9JExECi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KLV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCi1fTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZwotX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcwotCi0jIyBDQVZFQVQgRU1QVE9SOgotIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKLSMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0jIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLWlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCi0gIF9MVF9DT01QSUxFUl9QSUMoJDEpCi0gIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQotICBfTFRfTElOS0VSX1NITElCUygkMSkKLSAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQotCi0gIF9MVF9DT05GSUcoJDEpCi1maQotCi1BQ19MQU5HX1JFU1RPUkUKLQotR0NDPSRsdF9zYXZlX0dDQwotQ0M9JGx0X3NhdmVfQ0MKLUNGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLV0pIyBfTFRfTEFOR19HQ0pfQ09ORklHCi0KLQotIyBfTFRfTEFOR19HT19DT05GSUcoW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBHbyBjb21waWxlcgotIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfR09fQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9QUk9HX0dPXSlkbmwKLUFDX0xBTkdfU0FWRQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgR28gdGVzdCBzb3VyY2VzLgotYWNfZXh0PWdvCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBHbyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9InBhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX1RBR19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotbHRfc2F2ZV9HQ0M9JEdDQwotR0NDPXllcwotQ0M9JHtHT0MtImdjY2dvIn0KLUNGTEFHUz0kR09GTEFHUwotY29tcGlsZXI9JENDCi1fTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9JExECi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi0KLSMjIENBVkVBVCBFTVBUT1I6Ci0jIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKLSAgX0xUX0NPTVBJTEVSX1BJQygkMSkKLSAgX0xUX0NPTVBJTEVSX0NfTygkMSkKLSAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQotICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgX0xUX0NPTkZJRygkMSkKLWZpCi0KLUFDX0xBTkdfUkVTVE9SRQotCi1HQ0M9JGx0X3NhdmVfR0NDCi1DQz0kbHRfc2F2ZV9DQwotQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUwotXSkjIF9MVF9MQU5HX0dPX0NPTkZJRwotCi0KLSMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKLSMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgotbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCi1bQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCi1BQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1yYwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JwotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX1RBR19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotbHRfc2F2ZV9HQ0M9JEdDQwotR0NDPQotQ0M9JHtSQy0id2luZHJlcyJ9Ci1DRkxBR1M9Ci1jb21waWxlcj0kQ0MKLV9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLV9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLQotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICA6Ci0gIF9MVF9DT05GSUcoJDEpCi1maQotCi1HQ0M9JGx0X3NhdmVfR0NDCi1BQ19MQU5HX1JFU1RPUkUKLUNDPSRsdF9zYXZlX0NDCi1DRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi1dKSMgX0xUX0xBTkdfUkNfQ09ORklHCi0KLQotIyBMVF9QUk9HX0dDSgotIyAtLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKLVttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAotICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCi0gICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQotICAgICAgdGVzdCBzZXQgPSAiJHtHQ0pGTEFHUytzZXR9IiB8fCBHQ0pGTEFHUz0iLWcgLU8yIgotICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCi1dKQotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKLQotCi0jIExUX1BST0dfR08KLSMgLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1BST0dfR09dLAotW0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbywpCi1dKQotCi0KLSMgTFRfUFJPR19SQwotIyAtLS0tLS0tLS0tCi1BQ19ERUZVTihbTFRfUFJPR19SQ10sCi1bQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCi1dKQotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKLQotCi0jIF9MVF9ERUNMX0VHUkVQCi0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCi0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgotbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAotdGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAotX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQotX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKLV9MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQotZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KLUFDX1NVQlNUKFtHUkVQXSkKLV0pCi0KLQotIyBfTFRfREVDTF9PQkpEVU1QCi0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCi0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgotbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAotW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi1fTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCi1BQ19TVUJTVChbT0JKRFVNUF0pCi1dKQotCi0jIF9MVF9ERUNMX0RMTFRPT0wKLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCi1tNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCi1bQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLV9MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKLUFDX1NVQlNUKFtETExUT09MXSkKLV0pCi0KLSMgX0xUX0RFQ0xfU0VECi0jIC0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcwotIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgotbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCi1bQUNfUFJPR19TRUQKLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLV9MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCi1fTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKLSAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQotXSkjIF9MVF9ERUNMX1NFRAotCi1tNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKLSMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIwotIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCi0jICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1tNF9kZWZ1bihbQUNfUFJPR19TRURdLAotW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKLVsjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KLSMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotbHRfYWNfbWF4PTAKLWx0X2FjX2NvdW50PTAKLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCi0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgotZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAiJGx0X2FjX3NlZCIgJiYgY29udGludWUKLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCi0gIGx0X2FjX2NvdW50PTAKLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCi0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBicmVhawotICBmaQotICB3aGlsZSB0cnVlOyBkbwotICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICBlY2hvID4+Y29uZnRlc3QubmwKLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawotICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0IDEwIC1sdCAiJGx0X2FjX2NvdW50IiAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAiJGx0X2FjX2NvdW50IiAtZ3QgIiRsdF9hY19tYXgiOyB0aGVuCi0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50Ci0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgZmkKLSAgZG9uZQotZG9uZQotXSkKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKLUFDX1NVQlNUKFtTRURdKQotQUNfTVNHX1JFU1VMVChbJFNFRF0pCi1dKSNBQ19QUk9HX1NFRAotXSkjbTRfaWZuZGVmCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQotCi0KLSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCi0jIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KLW00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAotW2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBsdF91bnNldD11bnNldAotZWxzZQotICBsdF91bnNldD1mYWxzZQotZmkKLV9MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKLQotIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQotY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgotIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCi0gICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgotICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJwotICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCi0gIDs7Ci0gKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCi0gIGx0X1NQMk5MPSd0ciBcMTAwIFxuJwotICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKLSAgOzsKLWVzYWMKLV9MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAotX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCi1dKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCi0KLQotIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZXRlcm1pbmUgd2hhdCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKLSMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAotIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCi1tNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCi1BQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKLVtjYXNlICRob3N0IGluCi0gICotKi1taW5ndyogKQotICAgIGNhc2UgJGJ1aWxkIGluCi0gICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgICAgOzsKLSAgICAgICotKi1jeWd3aW4qICkKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgotICAgICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICAqLSotY3lnd2luKiApCi0gICAgY2FzZSAkYnVpbGQgaW4KLSAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgotICAgICAgICA7OwotICAgICAgKi0qLWN5Z3dpbiogKQotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSAgICAgICAgOzsKLSAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCi0gICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0gICAgOzsKLWVzYWMKLV0pCi10b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi1BQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCi1fTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKLSAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKLQotQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAotWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KLWx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqICkKLSAgICBjYXNlICRidWlsZCBpbgotICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci1lc2FjCi1dKQotdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQotX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCi0gICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKLV0pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwpkaWZmIC0tZ2l0IGEvbTQvbHRvcHRpb25zLm00IGIvbTQvbHRvcHRpb25zLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGIwODI5Li4wMDAwMDAwCi0tLSBhL200L2x0b3B0aW9ucy5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0jIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLSMKLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwNy0yMDA5LCAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZQotIyAgIEZvdW5kYXRpb24sIEluYy4KLSMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDggbHRvcHRpb25zLm00Ci0KLSMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCi1BQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCi0KLQotIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKLVtbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKLQotCi0jIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKLSMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKLSMgc2F2ZWQgYXMgYSBmbGFnLgotbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCi1bbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAotbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKLSAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKLSAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gJyQyJ10pXSlbXWRubAotXSkKLQotCi0jIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCi1tNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAotW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCi0KLQotIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQotIyBhcmUgc2V0LgotbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAotW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAotCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCi0JCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKLW00X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMwotXSlbXWRubAotXSkKLQotCi0jIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCi0jIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCi0jIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAotIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCi1tNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKLVsjIFNldCBvcHRpb25zCi1tNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKLSAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQotCi1tNF9pZihbJDFdLFtMVF9JTklUXSxbCi0gIGRubAotICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKLSAgZG5sIHNwZWNpZmllZDoKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCi0gIF0pCi0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubwotICBdKQotICBkbmwKLSAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KLSAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKLSAgZG5sICdzaGFyZWQnIG5vciAnZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKLSAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6Ci0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQotICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQotICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKLQkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2FpeC1zb25hbWU9YWl4IGFpeC1zb25hbWU9Ym90aCBhaXgtc29uYW1lPXN2cjRdLAotCQkgICBbX0xUX1dJVEhfQUlYX1NPTkFNRShbYWl4XSldKQotICBdKQotXSkjIF9MVF9TRVRfT1BUSU9OUwotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKLVtbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQotCi0KLSMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCi1bbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKLV0pIyBMVF9PUFRJT05fREVGSU5FCi0KLQotIyBkbG9wZW4KLSMgLS0tLS0tCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcwotXSkKLQotQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgJ2Rsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQotCi0KLSMgd2luMzItZGxsCi0jIC0tLS0tLS0tLQotIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCi1bZW5hYmxlX3dpbjMyX2RsbD15ZXMKLQotY2FzZSAkaG9zdCBpbgotKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWNlZ2NjKikKLSAgQUNfQ0hFQ0tfVE9PTChBUywgYXMsIGZhbHNlKQotICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQotICBBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQotICA7OwotZXNhYwotCi10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi1fTFRfREVDTChbXSwgW0FTXSwgICAgICBbMV0sIFtBc3NlbWJsZXIgcHJvZ3JhbV0pZG5sCi0KLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLV9MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSlkbmwKLQotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbT2JqZWN0IGR1bXBlciBwcm9ncmFtXSlkbmwKLV0pIyB3aW4zMi1kbGwKLQotQVVfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1fTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgJ3dpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sIFtdKQotCi0KLSMgX0xUX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgJ3NoYXJlZCcgYW5kCi0jICdkaXNhYmxlLXNoYXJlZCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCi1tNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCi1BQ19BUkdfRU5BQkxFKFtzaGFyZWRdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkQDw6QD1QS0dTQDo+QF0sCi0JW2J1aWxkIHNoYXJlZCBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSRsdF9zYXZlX2lmcwotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWNdLAotICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQotCi0gICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAotCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLV0pIyBfTFRfRU5BQkxFX1NIQVJFRAotCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCi0KLSMgT2xkIG5hbWVzOgotQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAotW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKLV0pCi0KLUFDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQotXSkKLQotQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQotQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCi0KLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQotZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQotCi0KLQotIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdzdGF0aWMnIGFuZAotIyAnZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KLSMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgotbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCi1bbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAotQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKLSAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAotCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSRsdF9zYXZlX2lmcwotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICA7OwotICAgIGVzYWNdLAotICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQotCi0gICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCi0JW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQotXSkjIF9MVF9FTkFCTEVfU1RBVElDCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKLQotIyBPbGQgbmFtZXM6Ci1BQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQotXSkKLQotQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCi1dKQotCi1BVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCi1BVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCi1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCi0KLQotCi0jIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ2Zhc3QtaW5zdGFsbCcKLSMgYW5kICdkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCi1tNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCi1BQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCi0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAotICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKLSAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9JGx0X3NhdmVfaWZzCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFQpCi0KLV9MVF9ERUNMKFtmYXN0X2luc3RhbGxdLCBbZW5hYmxlX2Zhc3RfaW5zdGFsbF0sIFswXSwKLQkgW1doZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbl0pZG5sCi1dKSMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwKLQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW3llc10pXSkKLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdLCBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW25vXSldKQotCi0jIE9sZCBuYW1lczoKLUFVX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCi1BQ19ESUFHTk9TRShbb2Jzb2xldGVdLAotWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKLXRoZSAnZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCi1dKQotCi1BVV9ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAotW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSkKLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAotdGhlICdkaXNhYmxlLWZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSwgW10pCi1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwgW10pCi0KLQotIyBfTFRfV0lUSF9BSVhfU09OQU1FKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1haXgtc29uYW1lIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgYWl4LXNvbmFtZT1haXgnCi0jIGFuZCBgYWl4LXNvbmFtZT1ib3RoJyBhbmQgYGFpeC1zb25hbWU9c3ZyNCcgTFRfSU5JVCBvcHRpb25zLiBERUZBVUxUCi0jIGlzIGVpdGhlciBgYWl4JywgYGJvdGgnIG9yIGBzdnI0Jy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBhaXgnLgotbTRfZGVmaW5lKFtfTFRfV0lUSF9BSVhfU09OQU1FXSwKLVttNF9kZWZpbmUoW19MVF9XSVRIX0FJWF9TT05BTUVfREVGQVVMVF0sIFttNF9pZigkMSwgc3ZyNCwgc3ZyNCwgbTRfaWYoJDEsIGJvdGgsIGJvdGgsIGFpeCkpXSlkbmwKLXNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjPQotY2FzZSAkaG9zdCwkZW5hYmxlX3NoYXJlZCBpbgotcG93ZXIqLSotYWl4W1s1LTldXSoseWVzKQotICBBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIHZhcmlhbnQgb2Ygc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyB0byBwcm92aWRlXSkKLSAgQUNfQVJHX1dJVEgoW2FpeC1zb25hbWVdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWFpeC1zb25hbWU9YWl4fHN2cjR8Ym90aF0sCi0gICAgICBbc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyAoYWthICJTT05BTUUiKSB2YXJpYW50IHRvIHByb3ZpZGUgb24gQUlYLCBAPDpAZGVmYXVsdD1dX0xUX1dJVEhfQUlYX1NPTkFNRV9ERUZBVUxUW0A6PkAuXSldLAotICAgIFtjYXNlICR3aXRodmFsIGluCi0gICAgYWl4fHN2cjR8Ym90aCkKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIEFDX01TR19FUlJPUihbVW5rbm93biBhcmd1bWVudCB0byAtLXdpdGgtYWl4LXNvbmFtZV0pCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBsdF9jdl93aXRoX2FpeF9zb25hbWU9JHdpdGhfYWl4X3NvbmFtZV0sCi0gICAgW0FDX0NBQ0hFX1ZBTChbbHRfY3Zfd2l0aF9haXhfc29uYW1lXSwKLSAgICAgIFtsdF9jdl93aXRoX2FpeF9zb25hbWU9XV9MVF9XSVRIX0FJWF9TT05BTUVfREVGQVVMVCkKLSAgICB3aXRoX2FpeF9zb25hbWU9JGx0X2N2X3dpdGhfYWl4X3NvbmFtZV0pCi0gIEFDX01TR19SRVNVTFQoWyR3aXRoX2FpeF9zb25hbWVdKQotICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KLSAgICAjIEZvciB0aGUgQUlYIHdheSBvZiBtdWx0aWxpYiwgd2UgbmFtZSB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyCi0gICAgIyBiYXNlZCBvbiB0aGUgYml0d2lkdGggdXNlZCwgdHJhZGl0aW9uYWxseSAnc2hyLm8nIG9yICdzaHJfNjQubycsCi0gICAgIyBhbmQgJ3Noci5pbXAnIG9yICdzaHJfNjQuaW1wJywgcmVzcGVjdGl2ZWx5LCBmb3IgdGhlIEltcG9ydCBGaWxlLgotICAgICMgRXZlbiB3aGVuIEdOVSBjb21waWxlcnMgaWdub3JlIE9CSkVDVF9NT0RFIGJ1dCBuZWVkICctbWFpeDY0JyBmbGFnLAotICAgICMgdGhlIEFJWCB0b29sY2hhaW4gd29ya3MgYmV0dGVyIHdpdGggT0JKRUNUX01PREUgc2V0IChkZWZhdWx0IDMyKS4KLSAgICBpZiB0ZXN0IDY0ID0gIiR7T0JKRUNUX01PREUtMzJ9IjsgdGhlbgotICAgICAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9c2hyXzY0Ci0gICAgZWxzZQotICAgICAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9c2hyCi0gICAgZmkKLSAgZmkKLSAgOzsKLSopCi0gIHdpdGhfYWl4X3NvbmFtZT1haXgKLSAgOzsKLWVzYWMKLQotX0xUX0RFQ0woW10sIFtzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlY10sIFswXSwKLSAgICBbU2hhcmVkIGFyY2hpdmUgbWVtYmVyIGJhc2VuYW1lLCBmb3IgZmlsZW5hbWUgYmFzZWQgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbmluZyBvbiBBSVhdKWRubAotXSkjIF9MVF9XSVRIX0FJWF9TT05BTUUKLQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFthaXgtc29uYW1lPWFpeF0sIFtfTFRfV0lUSF9BSVhfU09OQU1FKFthaXhdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2FpeC1zb25hbWU9Ym90aF0sIFtfTFRfV0lUSF9BSVhfU09OQU1FKFtib3RoXSldKQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFthaXgtc29uYW1lPXN2cjRdLCBbX0xUX1dJVEhfQUlYX1NPTkFNRShbc3ZyNF0pXSkKLQotCi0jIF9MVF9XSVRIX1BJQyhbTU9ERV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ3BpYy1vbmx5JyBhbmQgJ25vLXBpYycKLSMgTFRfSU5JVCBvcHRpb25zLgotIyBNT0RFIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ2JvdGgnLgotbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAotW0FDX0FSR19XSVRIKFtwaWNdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY0A8OkA9UEtHU0A6PkBdLAotCVt0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBAPDpAZGVmYXVsdD11c2UgYm90aEA6PkBdKV0sCi0gICAgW2x0X3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkd2l0aHZhbCBpbgotICAgIHllc3xubykgcGljX21vZGU9JHdpdGh2YWwgOzsKLSAgICAqKQotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCi0gICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbwotCUlGUz0kbHRfc2F2ZV9pZnMKLQlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgotCSAgcGljX21vZGU9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kbHRfc2F2ZV9pZnMKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW3BpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKV0pCi0KLV9MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCi1dKSMgX0xUX1dJVEhfUElDCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQotCi0jIE9sZCBuYW1lOgotQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgJ3BpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCi1dKQotCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLW00X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQotTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCi0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKLUxUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAotCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCi0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCi0KLW00X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQotTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKLQkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAotCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL200L2x0c3VnYXIubTQgYi9tNC9sdHN1Z2FyLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGJjOTM0Li4wMDAwMDAwCi0tLSBhL200L2x0c3VnYXIubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOCwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDYgbHRzdWdhci5tNAotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQotCi0KLSMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKLSMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCi0jIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKLSMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KLW00X2RlZmluZShbbHRfam9pbl0sCi1bbTRfaWYoWyQjXSwgWzFdLCBbXSwKLSAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKLSAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQotbTRfZGVmaW5lKFtfbHRfam9pbl0sCi1bbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAotICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQotCi0KLSMgbHRfY2FyKExJU1QpCi0jIGx0X2NkcihMSVNUKQotIyAtLS0tLS0tLS0tLS0KLSMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KLSMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAotIyBBdXRvY29uZi0yLjU5LCB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCi1tNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKLW00X2RlZmluZShbbHRfY2RyXSwKLVttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLAotICAgICAgIFskI10sIDEsIFtdLAotICAgICAgIFttNF9kcXVvdGUobTRfc2hpZnQoJEApKV0pXSkKLW00X2RlZmluZShbbHRfdW5xdW90ZV0sICQxKQotCi0KLSMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgJ1NFUEFSQVRPUicnU1RSSU5HJy4KLSMgTm90ZSB0aGF0IG5laXRoZXIgU0VQQVJBVE9SIG5vciBTVFJJTkcgYXJlIGV4cGFuZGVkOyB0aGV5IGFyZSBhcHBlbmRlZAotIyB0byBNQUNSTy1OQU1FIGFzIGlzIChsZWF2aW5nIHRoZSBleHBhbnNpb24gZm9yIHdoZW4gTUFDUk8tTkFNRSBpcyBpbnZva2VkKS4KLSMgTm8gU0VQQVJBVE9SIGlzIG91dHB1dCBpZiBNQUNSTy1OQU1FIHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZCAoZGlmZmVyZW50Ci0jIHRoYW4gZGVmaW5lZCBhbmQgZW1wdHkpLgotIwotIyBUaGlzIG1hY3JvIGlzIG5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBBdXRvY29uZiAyLjYyLCBzaW5jZSBlYXJsaWVyCi0jIHZlcnNpb25zIG9mIG00c3VnYXIgbWlzdGFrZW5seSBleHBhbmRlZCBTRVBBUkFUT1IgYnV0IG5vdCBTVFJJTkcuCi1tNF9kZWZpbmUoW2x0X2FwcGVuZF0sCi1bbTRfZGVmaW5lKFskMV0sCi0JICAgbTRfaWZkZWYoWyQxXSwgW200X2RlZm4oWyQxXSlbJDNdXSlbJDJdKV0pCi0KLQotCi0jIGx0X2NvbWJpbmUoU0VQLCBQUkVGSVgtTElTVCwgSU5GSVgsIFNVRkZJWDEsIFtTVUZGSVgyLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQcm9kdWNlIGEgU0VQIGRlbGltaXRlZCBsaXN0IG9mIGFsbCBwYWlyZWQgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIG9mCi0jIFBSRUZJWC1MSVNUIHdpdGggU1VGRklYMSB0aHJvdWdoIFNVRkZJWG4uICBFYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QKLSMgaGFzIHRoZSBmb3JtIFBSRUZJWG1JTkZJWFNVRkZJWG4uCi0jIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9jb21iaW5lIGFkZGVkIGluIEF1dG9jb25mIDIuNjIuCi1tNF9kZWZpbmUoW2x0X2NvbWJpbmVdLAotW200X2lmKG00X2V2YWwoWyQjID4gM10pLCBbMV0sCi0gICAgICAgW200X3B1c2hkZWYoW19MdF9zZXBdLCBbbTRfZGVmaW5lKFtfTHRfc2VwXSwgbTRfZGVmbihbbHRfY2FyXSkpXSldXWRubAotW1ttNF9mb3JlYWNoKFtfTHRfcHJlZml4XSwgWyQyXSwKLQkgICAgIFttNF9mb3JlYWNoKFtfTHRfc3VmZml4XSwKLQkJXW00X2RxdW90ZShtNF9kcXVvdGUobTRfc2hpZnQobTRfc2hpZnQobTRfc2hpZnQoJEApKSkpKVssCi0JW19MdF9zZXAoWyQxXSlbXW00X2RlZm4oW19MdF9wcmVmaXhdKVskM11tNF9kZWZuKFtfTHRfc3VmZml4XSldKV0pXSldKQotCi0KLSMgbHRfaWZfYXBwZW5kX3VuaXEoTUFDUk8tTkFNRSwgVkFSTkFNRSwgW1NFUEFSQVRPUl0sIFtVTklRXSwgW05PVC1VTklRXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSWZmIE1BQ1JPLU5BTUUgZG9lcyBub3QgeWV0IGNvbnRhaW4gVkFSTkFNRSwgdGhlbiBhcHBlbmQgaXQgKGRlbGltaXRlZAotIyBieSBTRVBBUkFUT1IgaWYgc3VwcGxpZWQpIGFuZCBleHBhbmQgVU5JUSwgZWxzZSBOT1QtVU5JUS4KLW00X2RlZmluZShbbHRfaWZfYXBwZW5kX3VuaXFdLAotW200X2lmZGVmKFskMV0sCi0JICBbbTRfaWYobTRfaW5kZXgoWyQzXW00X2RlZm4oWyQxXSlbJDNdLCBbJDMkMiQzXSksIFstMV0sCi0JCSBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdLAotCQkgWyQ1XSldLAotCSAgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSldKQotCi0KLSMgbHRfZGljdF9hZGQoRElDVCwgS0VZLCBWQUxVRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGljdF9hZGRdLAotW200X2RlZmluZShbJDEoJDIpXSwgWyQzXSldKQotCi0KLSMgbHRfZGljdF9hZGRfc3Via2V5KERJQ1QsIEtFWSwgU1VCS0VZLCBWQUxVRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGljdF9hZGRfc3Via2V5XSwKLVttNF9kZWZpbmUoWyQxKCQyOiQzKV0sIFskNF0pXSkKLQotCi0jIGx0X2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kaWN0X2ZldGNoXSwKLVttNF9pZnZhbChbJDNdLAotCW00X2lmZGVmKFskMSgkMjokMyldLCBbbTRfZGVmbihbJDEoJDI6JDMpXSldKSwKLSAgICBtNF9pZmRlZihbJDEoJDIpXSwgW200X2RlZm4oWyQxKCQyKV0pXSkpXSkKLQotCi0jIGx0X2lmX2RpY3RfZmV0Y2goRElDVCwgS0VZLCBbU1VCS0VZXSwgVkFMVUUsIElGLVRSVUUsIFtJRi1GQUxTRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2lmX2RpY3RfZmV0Y2hdLAotW200X2lmKGx0X2RpY3RfZmV0Y2goWyQxXSwgWyQyXSwgWyQzXSksIFskNF0sCi0JWyQ1XSwKLSAgICBbJDZdKV0pCi0KLQotIyBsdF9kaWN0X2ZpbHRlcihESUNULCBbU1VCS0VZXSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBLRVksIFsuLi5dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kaWN0X2ZpbHRlcl0sCi1bbTRfaWYoWyQ1XSwgW10sIFtdLAotICBbbHRfam9pbihtNF9xdW90ZShtNF9kZWZhdWx0KFskNF0sIFtbLCBdXSkpLAotICAgICAgICAgICBsdF91bnF1b3RlKG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9mb3JlYWNoKF9MdF9rZXksIGx0X2NhcihbbTRfc2hpZnRuKDQsICRAKV0pLAotCQkgICAgICBbbHRfaWZfZGljdF9mZXRjaChbJDFdLCBfTHRfa2V5LCBbJDJdLCBbJDNdLCBbX0x0X2tleSBdKV0pKSkpKV0pW11kbmwKLV0pCmRpZmYgLS1naXQgYS9tNC9sdHZlcnNpb24ubTQgYi9tNC9sdHZlcnNpb24ubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMDRiNTIuLjAwMDAwMDAKLS0tIGEvbTQvbHR2ZXJzaW9uLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQotIwotIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBzZXJpYWwgNDE3OSBsdHZlcnNpb24ubTQKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKLQotbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjZdKQotbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzIuNC42XSkKLQotQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKLVttYWNyb192ZXJzaW9uPScyLjQuNicKLW1hY3JvX3JldmlzaW9uPScyLjQuNicKLV9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQotX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKLV0pCmRpZmYgLS1naXQgYS9tNC9sdH5vYnNvbGV0ZS5tNCBiL200L2x0fm9ic29sZXRlLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmIyNmY4Li4wMDAwMDAwCi0tLSBhL200L2x0fm9ic29sZXRlLm00CisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCi0jCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDcsIDIwMDksIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlCi0jICAgRm91bmRhdGlvbiwgSW5jLgotIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00Ci0KLSMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgotIwotIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTiksCi0jIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQotIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgotIwotIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCi0jIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKLSMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKLSMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCi0jIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCi0jCi0jIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cwotIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKLSMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKLSMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KLSMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4KLSMKLSMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCi0jIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCi0jIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50Ci0jIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKLQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKLW00X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKLW00X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKLW00X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKLW00X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQotbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQotbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKLW00X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKLW00X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKLW00X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQotbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKLW00X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKLW00X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQotbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKLW00X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKLW00X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCi1tNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKLW00X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQotbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCi1tNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKLW00X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQotbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQotbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCmRpZmYgLS1naXQgYS9tNC9ubHMubTQgYi9tNC9ubHMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjdjYzIuLjAwMDAwMDAKLS0tIGEvbTQvbmxzLm00CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBubHMubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xNSkKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMywgMjAwNS0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLWRubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCi1kbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKLWRubCBmdW5jdGlvbmFsaXR5LgotZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKLWRubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKLWRubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLWRubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotZG5sIEF1dGhvcnM6Ci1kbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgotZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCi0KLUFDX1BSRVJFUSgyLjUwKQotCi1BQ19ERUZVTihbQU1fTkxTXSwKLVsKLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQotICBkbmwgRGVmYXVsdCBpcyBlbmFibGVkIE5MUwotICBBQ19BUkdfRU5BQkxFKG5scywKLSAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKLSAgICBVU0VfTkxTPSRlbmFibGV2YWwsIFVTRV9OTFM9eWVzKQotICBBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQotICBBQ19TVUJTVChVU0VfTkxTKQotXSkKZGlmZiAtLWdpdCBhL200L29nZy5tNCBiL200L29nZy5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxZjFhYi4uMDAwMDAwMAotLS0gYS9tNC9vZ2cubTQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotIyBDb25maWd1cmUgcGF0aHMgZm9yIGxpYm9nZwotIyBKYWNrIE1vZmZpdHQgPGphY2tAaWNlY2FzdC5vcmc+IDEwLTIxLTIwMDAKLSMgU2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gT3dlbiBUYXlsb3IgYW5kIE1hbmlzaCBTaW5naAotCi1kbmwgWElQSF9QQVRIX09HRyhbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBUZXN0IGZvciBsaWJvZ2csIGFuZCBkZWZpbmUgT0dHX0NGTEFHUyBhbmQgT0dHX0xJQlMKLWRubAotQUNfREVGVU4oW1hJUEhfUEFUSF9PR0ddLAotW2RubCAKLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzCi1kbmwKLUFDX0FSR19XSVRIKG9nZyxbICAtLXdpdGgtb2dnPVBGWCAgIFByZWZpeCB3aGVyZSBsaWJvZ2cgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLCBvZ2dfcHJlZml4PSIkd2l0aHZhbCIsIG9nZ19wcmVmaXg9IiIpCi1BQ19BUkdfV0lUSChvZ2ctbGlicmFyaWVzLFsgIC0td2l0aC1vZ2ctbGlicmFyaWVzPURJUiAgIERpcmVjdG9yeSB3aGVyZSBsaWJvZ2cgbGlicmFyeSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIG9nZ19saWJyYXJpZXM9IiR3aXRodmFsIiwgb2dnX2xpYnJhcmllcz0iIikKLUFDX0FSR19XSVRIKG9nZy1pbmNsdWRlcyxbICAtLXdpdGgtb2dnLWluY2x1ZGVzPURJUiAgIERpcmVjdG9yeSB3aGVyZSBsaWJvZ2cgaGVhZGVyIGZpbGVzIGFyZSBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIG9nZ19pbmNsdWRlcz0iJHdpdGh2YWwiLCBvZ2dfaW5jbHVkZXM9IiIpCi1BQ19BUkdfRU5BQkxFKG9nZ3Rlc3QsIFsgIC0tZGlzYWJsZS1vZ2d0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBPZ2cgcHJvZ3JhbV0sLCBlbmFibGVfb2dndGVzdD15ZXMpCi0KLSAgaWYgdGVzdCAieCRvZ2dfbGlicmFyaWVzIiAhPSAieCIgOyB0aGVuCi0gICAgT0dHX0xJQlM9Ii1MJG9nZ19saWJyYXJpZXMiCi0gIGVsaWYgdGVzdCAieCRvZ2dfcHJlZml4IiAhPSAieCIgOyB0aGVuCi0gICAgT0dHX0xJQlM9Ii1MJG9nZ19wcmVmaXgvbGliIgotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiIDsgdGhlbgotICAgIE9HR19MSUJTPSItTCRwcmVmaXgvbGliIgotICBmaQotCi0gIE9HR19MSUJTPSIkT0dHX0xJQlMgLWxvZ2ciCi0KLSAgaWYgdGVzdCAieCRvZ2dfaW5jbHVkZXMiICE9ICJ4IiA7IHRoZW4KLSAgICBPR0dfQ0ZMQUdTPSItSSRvZ2dfaW5jbHVkZXMiCi0gIGVsaWYgdGVzdCAieCRvZ2dfcHJlZml4IiAhPSAieCIgOyB0aGVuCi0gICAgT0dHX0NGTEFHUz0iLUkkb2dnX3ByZWZpeC9pbmNsdWRlIgotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiOyB0aGVuCi0gICAgT0dHX0NGTEFHUz0iLUkkcHJlZml4L2luY2x1ZGUiCi0gIGZpCi0KLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBPZ2cpCi0gIG5vX29nZz0iIgotCi0KLSAgaWYgdGVzdCAieCRlbmFibGVfb2dndGVzdCIgPSAieHllcyIgOyB0aGVuCi0gICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0gICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKLSAgICBDRkxBR1M9IiRDRkxBR1MgJE9HR19DRkxBR1MiCi0gICAgTElCUz0iJExJQlMgJE9HR19MSUJTIgotZG5sCi1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgT2dnIGlzIHN1ZmZpY2llbnRseSBuZXcuCi1kbmwKLSAgICAgIHJtIC1mIGNvbmYub2dndGVzdAotICAgICAgQUNfVFJZX1JVTihbCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxvZ2cvb2dnLmg+Ci0KLWludCBtYWluICgpCi17Ci0gIHN5c3RlbSgidG91Y2ggY29uZi5vZ2d0ZXN0Iik7Ci0gIHJldHVybiAwOwotfQotCi1dLCwgbm9fb2dnPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCi0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgZmkKLQotICBpZiB0ZXN0ICJ4JG5vX29nZyIgPSAieCIgOyB0aGVuCi0gICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICBpZmVsc2UoWyQxXSwgLCA6LCBbJDFdKSAgICAgCi0gIGVsc2UKLSAgICAgQUNfTVNHX1JFU1VMVChubykKLSAgICAgaWYgdGVzdCAtZiBjb25mLm9nZ3Rlc3QgOyB0aGVuCi0gICAgICAgOgotICAgICBlbHNlCi0gICAgICAgZWNobyAiKioqIENvdWxkIG5vdCBydW4gT2dnIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgotICAgICAgIENGTEFHUz0iJENGTEFHUyAkT0dHX0NGTEFHUyIKLSAgICAgICBMSUJTPSIkTElCUyAkT0dHX0xJQlMiCi0gICAgICAgQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8b2dnL29nZy5oPgotXSwgICAgIFsgcmV0dXJuIDA7IF0sCi0gICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBjb21waWxlZCwgYnV0IGRpZCBub3QgcnVuLiBUaGlzIHVzdWFsbHkgbWVhbnMiCi0gICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBPZ2cgb3IgZmluZGluZyB0aGUgd3JvbmciCi0gICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgT2dnLiBJZiBpdCBpcyBub3QgZmluZGluZyBPZ2csIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgotICAgICAgIGVjaG8gIioqKiBMRF9MSUJSQVJZX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGVkaXQgL2V0Yy9sZC5zby5jb25mIHRvIHBvaW50IgotICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCi0gICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgotICAgICAgIGVjaG8gIioqKiIKLSAgICAgICBlY2hvICIqKiogSWYgeW91IGhhdmUgYW4gb2xkIHZlcnNpb24gaW5zdGFsbGVkLCBpdCBpcyBiZXN0IHRvIHJlbW92ZSBpdCwgYWx0aG91Z2giCi0gICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIl0sCi0gICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgotICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBPZ2cgd2FzIGluY29ycmVjdGx5IGluc3RhbGxlZCIKLSAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBPZ2cgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4iIF0pCi0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCi0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKLSAgICAgZmkKLSAgICAgT0dHX0NGTEFHUz0iIgotICAgICBPR0dfTElCUz0iIgotICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQotICBmaQotICBBQ19TVUJTVChPR0dfQ0ZMQUdTKQotICBBQ19TVUJTVChPR0dfTElCUykKLSAgcm0gLWYgY29uZi5vZ2d0ZXN0Ci1dKQpkaWZmIC0tZ2l0IGEvbTQvcG8ubTQgYi9tNC9wby5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczNDc2Mi4uMDAwMDAwMAotLS0gYS9tNC9wby5tNAorKysgL2Rldi9udWxsCkBAIC0xLDQ0OSArMCwwIEBACi0jIHBvLm00IHNlcmlhbCAxNSAoZ2V0dGV4dC0wLjE3KQotZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi1kbmwKLWRubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCi1kbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKLWRubCBmdW5jdGlvbmFsaXR5LgotZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKLWRubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKLWRubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLWRubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KLQotZG5sIEF1dGhvcnM6Ci1kbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgotZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCi0KLUFDX1BSRVJFUSgyLjUwKQotCi1kbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgcG8gc3ViZGlyZWN0b3J5LgotQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAotWwotICBBQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKLSAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKLSAgQUNfUkVRVUlSRShbQU1fUFJPR19NS0RJUl9QXSlkbmwgZGVmaW5lZCBieSBhdXRvbWFrZQotICBBQ19SRVFVSVJFKFtBTV9OTFNdKWRubAotCi0gIGRubCBSZWxlYXNlIHZlcnNpb24gb2YgdGhlIGdldHRleHQgbWFjcm9zLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQKLSAgZG5sIHRoZSBnZXR0ZXh0IG1hY3JvcyBhbmQgcG8vTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCi0gIEFDX1NVQlNUKFtHRVRURVhUX01BQ1JPX1ZFUlNJT05dLCBbMC4xN10pCi0KLSAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCi0gIGRubCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBmb3IgIm1ha2UgZGlzdCIgdG8gd29yay4KLQotICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnZm10IGluIHRoZSBQQVRILgotICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyBtc2dmbXQgYW5kIGVhcmx5IEdOVSBtc2dmbXQgdmVyc2lvbnMuCi0gIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCi0gIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoTVNHRk1ULCBtc2dmbXQsCi0gICAgWyRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMSAmJgotICAgICAoaWYgJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAotICAgIDopCi0gIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQotCi0gIGRubCBUZXN0IHdoZXRoZXIgaXQgaXMgR05VIG1zZ2ZtdCA+PSAwLjE1LgotY2hhbmdlcXVvdGUoLClkbmwKLSAgY2FzZSBgJE1TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCi0gICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBNU0dGTVRfMDE1PTogOzsKLSAgICAqKSBNU0dGTVRfMDE1PSRNU0dGTVQgOzsKLSAgZXNhYwotY2hhbmdlcXVvdGUoWyxdKWRubAotICBBQ19TVUJTVChbTVNHRk1UXzAxNV0pCi1jaGFuZ2VxdW90ZSgsKWRubAotICBjYXNlIGAkR01TR0ZNVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCi0gICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBHTVNHRk1UXzAxNT06IDs7Ci0gICAgKikgR01TR0ZNVF8wMTU9JEdNU0dGTVQgOzsKLSAgZXNhYwotY2hhbmdlcXVvdGUoWyxdKWRubAotICBBQ19TVUJTVChbR01TR0ZNVF8wMTVdKQotCi0gIGRubCBTZWFyY2ggZm9yIEdOVSB4Z2V0dGV4dCAwLjEyIG9yIG5ld2VyIGluIHRoZSBQQVRILgotICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgotICBkbmwgVGhlIHNlY29uZCB0ZXN0IGV4Y2x1ZGVzIEZyZWVCU0QgeGdldHRleHQuCi0gIEFNX1BBVEhfUFJPR19XSVRIX1RFU1QoWEdFVFRFWFQsIHhnZXR0ZXh0LAotICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4mXUFTX01FU1NBR0VfTE9HX0ZEWyAyPiYxICYmCi0gICAgIChpZiAkYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSldLAotICAgIDopCi0gIGRubCBSZW1vdmUgbGVmdG92ZXIgZnJvbSBGcmVlQlNEIHhnZXR0ZXh0IGNhbGwuCi0gIHJtIC1mIG1lc3NhZ2VzLnBvCi0KLSAgZG5sIFRlc3Qgd2hldGhlciBpdCBpcyBHTlUgeGdldHRleHQgPj0gMC4xNS4KLWNoYW5nZXF1b3RlKCwpZG5sCi0gIGNhc2UgYCRYR0VUVEVYVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluCi0gICAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBYR0VUVEVYVF8wMTU9OiA7OwotICAgICopIFhHRVRURVhUXzAxNT0kWEdFVFRFWFQgOzsKLSAgZXNhYwotY2hhbmdlcXVvdGUoWyxdKWRubAotICBBQ19TVUJTVChbWEdFVFRFWFRfMDE1XSkKLQotICBkbmwgU2VhcmNoIGZvciBHTlUgbXNnbWVyZ2UgMC4xMSBvciBuZXdlciBpbiB0aGUgUEFUSC4KLSAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCi0gICAgWyRhY19kaXIvJGFjX3dvcmQgLS11cGRhdGUgLXEgL2Rldi9udWxsIC9kZXYvbnVsbCA+Jl1BU19NRVNTQUdFX0xPR19GRFsgMj4mMV0sIDopCi0KLSAgZG5sIEluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KLSAgZG5sIEF1dG9jb25mID49IDIuNjAgZGVmaW5lcyBsb2NhbGVkaXIuIEZvciBvbGRlciB2ZXJzaW9ucyBvZiBhdXRvY29uZiwgd2UKLSAgZG5sIGhhdmUgdG8gZGVmaW5lIGl0IGhlcmUsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gcG8vTWFrZWZpbGUuCi0gIHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnCi0gIEFDX1NVQlNUKFtsb2NhbGVkaXJdKQotCi0gIGRubCBTdXBwb3J0IGZvciBBTV9YR0VUVEVYVF9PUFRJT04uCi0gIHRlc3QgLW4gIiR7WEdFVFRFWFRfRVhUUkFfT1BUSU9OUytzZXR9IiB8fCBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPQotICBBQ19TVUJTVChbWEdFVFRFWFRfRVhUUkFfT1BUSU9OU10pCi0KLSAgQUNfQ09ORklHX0NPTU1BTkRTKFtwby1kaXJlY3Rvcmllc10sIFtbCi0gICAgZm9yIGFjX2ZpbGUgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgICAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIKLSAgICAgIGNhc2UgIiRhY19maWxlIiBpbgotICAgICAgICAqOiopIGFjX2ZpbGU9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlOi4qJSUnYCA7OwotICAgICAgZXNhYwotICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCi0gICAgICBjYXNlICIkYWNfZmlsZSIgaW4gKi9NYWtlZmlsZS5pbikKLSAgICAgICAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCi0gICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKLSAgICAgICAgYWNfZGlyX3N1ZmZpeD0iL2BlY2hvICIkYWNfZGlyInxzZWQgJ3MlXlwuLyUlJ2AiCi0gICAgICAgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKLSAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgotICAgICAgICAjIEluIGF1dG9jb25mLTIuNTAgaXQgaXMgY2FsbGVkICRzcmNkaXIuCi0gICAgICAgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKLSAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KLSAgICAgICAgICAuKSAgdG9wX3NyY2Rpcj1gZWNobyAkYWNfZG90c3xzZWQgJ3MlLyQlJSdgIDs7Ci0gICAgICAgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7Ci0gICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKLSAgICAgICAgZXNhYwotICAgICAgICAjIFRyZWF0IGEgZGlyZWN0b3J5IGFzIGEgUE8gZGlyZWN0b3J5IGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBhCi0gICAgICAgICMgUE9URklMRVMuaW4gZmlsZS4gVGhpcyBhbGxvd3MgcGFja2FnZXMgdG8gaGF2ZSBtdWx0aXBsZSBQTwotICAgICAgICAjIGRpcmVjdG9yaWVzIHVuZGVyIGRpZmZlcmVudCBuYW1lcyBvciBpbiBkaWZmZXJlbnQgbG9jYXRpb25zLgotICAgICAgICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iOyB0aGVuCi0gICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvUE9URklMRVMiCi0gICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgotICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKLSAgICAgICAgICAjIEFMTF9MSU5HVUFTLCBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTIGRlcGVuZAotICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCi0gICAgICAgICAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgotICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgotICAgICAgICAgICAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kQUxMX0xJTkdVQVNfJwotICAgICAgICAgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICMgVGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIHdhcyBnaXZlbiBpbiBjb25maWd1cmUuaW4uCi0gICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgICAgICAgICAgZXZhbCAnQUxMX0xJTkdVQVMnJz0kT0JTT0xFVEVfQUxMX0xJTkdVQVMnCi0gICAgICAgICAgZmkKLSAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQotICAgICAgICAgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCi0gICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCi0gICAgICAgICAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQotICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUwotICAgICAgICAgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKLSAgICAgICAgICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgotICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OwotICAgICAgICAgICAgKikgc3JjZGlycHJlPSckKHNyY2RpcikvJyA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgICBQT0ZJTEVTPQotICAgICAgICAgIFVQREFURVBPRklMRVM9Ci0gICAgICAgICAgRFVNTVlQT0ZJTEVTPQotICAgICAgICAgIEdNT0ZJTEVTPQotICAgICAgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgICAgICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKLSAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKLSAgICAgICAgICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCi0gICAgICAgICAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCi0gICAgICAgICAgZG9uZQotICAgICAgICAgICMgQ0FUQUxPR1MgZGVwZW5kcyBvbiBib3RoICRhY19kaXIgYW5kIHRoZSB1c2VyJ3MgTElOR1VBUwotICAgICAgICAgICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gICAgICAgICAgSU5TVF9MSU5HVUFTPQotICAgICAgICAgIGlmIHRlc3QgLW4gIiRBTExfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICAgIHVzZWl0PW5vCi0gICAgICAgICAgICAgIGlmIHRlc3QgIiVVTlNFVCUiICE9ICIkTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRBTExfTElOR1VBUyIKLSAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbwotICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcmVzZW50bGFuZyBjYXRhbG9nIGlmIGRlc2lyZWRsYW5nIGlzCi0gICAgICAgICAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgotICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAotICAgICAgICAgICAgICAgICMgICAgICBwcmVzZW50bGFuZyBjYW4gYmUgdXNlZCBhcyBhIGZhbGxiYWNrIGZvciBtZXNzYWdlcwotICAgICAgICAgICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgotICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KLSAgICAgICAgICAgICAgICAgICIkcHJlc2VudGxhbmciKikgdXNlaXQ9eWVzOzsKLSAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgIGRvbmUKLSAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlaXQgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgotICAgICAgICAgICAgICBmaQotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgQ0FUQUxPR1M9Ci0gICAgICAgICAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KLSAgICAgICAgICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCi0gICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgotICAgICAgICAgICAgZG9uZQotICAgICAgICAgIGZpCi0gICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCi0gICAgICAgICAgc2VkIC1lICIvXlBPVEZJTEVTID0vciAkYWNfZGlyL1BPVEZJTEVTIiAtZSAiL14jIE1ha2V2YXJzL3IgJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL01ha2V2YXJzIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QENBVEFMT0dTQHwkQ0FUQUxPR1N8ZyIgLWUgInN8QFBPTUFLRUZJTEVERVBTQHwkUE9NQUtFRklMRURFUFN8ZyIgIiRhY19kaXIvTWFrZWZpbGUuaW4iID4gIiRhY19kaXIvTWFrZWZpbGUiCi0gICAgICAgICAgZm9yIGYgaW4gIiRhY19naXZlbl9zcmNkaXIvJGFjX2RpciIvUnVsZXMtKjsgZG8KLSAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotICAgICAgICAgICAgICBjYXNlICIkZiIgaW4KLSAgICAgICAgICAgICAgICAqLm9yaWcgfCAqLmJhayB8ICp+KSA7OwotICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OwotICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICBmaQotICAgICAgICAgIGRvbmUKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lXV0sCi0gICBbIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBvYnNvbGV0ZSBBTExfTElOR1VBUyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gY29tcHV0ZQotICAgICMgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUywgQ0FUQUxPR1MuIEJ1dCBoaWRlIGl0Ci0gICAgIyBmcm9tIGF1dG9tYWtlIDwgMS41LgotICAgIGV2YWwgJ09CU09MRVRFX0FMTF9MSU5HVUFTJyc9IiRBTExfTElOR1VBUyInCi0gICAgIyBDYXB0dXJlIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBjb21wdXRlIENBVEFMT0dTLgotICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKLSAgIF0pCi1dKQotCi1kbmwgUG9zdHByb2Nlc3NlcyBhIE1ha2VmaWxlIGluIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgUE8gZmlsZXMuCi1BQ19ERUZVTihbQU1fUE9TVFBST0NFU1NfUE9fTUFLRUZJTEVdLAotWwotICAjIFdoZW4gdGhpcyBjb2RlIGlzIHJ1biwgaW4gY29uZmlnLnN0YXR1cywgdHdvIHZhcmlhYmxlcyBoYXZlIGFscmVhZHkgYmVlbgotICAjIHNldDoKLSAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCi0gICMgLSBMSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTElOR1VBUyBhdCBjb25maWd1cmUKLSAgIyAgIHRpbWUuCi0KLWNoYW5nZXF1b3RlKCwpZG5sCi0gICMgQWRqdXN0IGEgcmVsYXRpdmUgc3JjZGlyLgotICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCi0gIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgotICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8c2VkICdzJS9bXi9dKiUuLi8lZydgCi0gICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KLSAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgotICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBhY19naXZlbl9zcmNkaXI9IiRzcmNkaXIiCi0gIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCi0gICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OwotICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7OwotICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7Ci0gIGVzYWMKLQotICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KLSAgaWYgdGVzdCAiWGAoZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KLSAgICBndF9lY2hvPSdlY2hvJwotICBlbHNlCi0gICAgaWYgdGVzdCAiWGAocHJpbnRmICclc1xuJyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KLSAgICAgIGd0X2VjaG89J3ByaW50ZiAlc1xuJwotICAgIGVsc2UKLSAgICAgIGVjaG9fZnVuYyAoKSB7Ci0gICAgICAgIGNhdCA8PEVPVAotJCoKLUVPVAotICAgICAgfQotICAgICAgZ3RfZWNobz0nZWNob19mdW5jJwotICAgIGZpCi0gIGZpCi0KLSAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgotICBzZWRfeF92YXJpYWJsZT0nCi0jIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCi14Ci1zL1AvUC8KLXgKLXRhCi0jIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KLS9eWwkgXSpWQVJJQUJMRVsJIF0qPS97Ci0gICMgU2VlbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KLSAgcy9eWwkgXSpWQVJJQUJMRVsJIF0qPS8vCi0gIGJhCi19Ci1iZAotOmEKLSMgSGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyBhIGxpbmUgZnJvbSB0aGUgdmFyaWFibGUgZGVmaW5pdGlvbi4KLSMgUmVtb3ZlIGNvbW1lbnQsIG1vcmUgcHJlY2lzZWx5IHJlcGxhY2UgaXQgd2l0aCBhIHNwYWNlLgotcy8jLiokLyAvCi0jIFNlZSBpZiB0aGUgbGluZSBlbmRzIGluIGEgYmFja3NsYXNoLgotdGIKLTpiCi1zL1xcJC8vCi0jIFByaW50IHRoZSBsaW5lLCB3aXRob3V0IHRoZSB0cmFpbGluZyBiYWNrc2xhc2guCi1wCi10YwotIyBUaGVyZSB3YXMgbm8gdHJhaWxpbmcgYmFja3NsYXNoLiBUaGUgZW5kIG9mIHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzCi0jIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgotcy9eLiokLy8KLXgKLWJkCi06YwotIyBBIHRyYWlsaW5nIGJhY2tzbGFzaCBtZWFucyB0aGF0IHRoZSB2YXJpYWJsZSBkZWZpbml0aW9uIGNvbnRpbnVlcyBpbiB0aGUKLSMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgotcy9eLiokL1AvCi14Ci06ZAotJwotY2hhbmdlcXVvdGUoWyxdKWRubAotCi0gICMgU2V0IFBPVEZJTEVTIHRvIHRoZSB2YWx1ZSBvZiB0aGUgTWFrZWZpbGUgdmFyaWFibGUgUE9URklMRVMuCi0gIHNlZF94X1BPVEZJTEVTPWAkZ3RfZWNobyAiJHNlZF94X3ZhcmlhYmxlIiB8IHNlZCAtZSAnL14gKiMvZCcgLWUgJ3MvVkFSSUFCTEUvUE9URklMRVMvZydgCi0gIFBPVEZJTEVTPWBzZWQgLW4gLWUgIiRzZWRfeF9QT1RGSUxFUyIgPCAiJGFjX2ZpbGUiYAotICAjIENvbXB1dGUgUE9URklMRVNfREVQUyBhcwotICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCi0gIFBPVEZJTEVTX0RFUFM9Ci0gIGZvciBmaWxlIGluICRQT1RGSUxFUzsgZG8KLSAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKLSAgZG9uZQotICBQT01BS0VGSUxFREVQUz0iIgotCi0gIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4KLSAgICB0ZXN0IC1uICIkYXNfbWUiICYmIGVjaG8gIiRhc19tZTogc2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiIHx8IGVjaG8gInNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIgotICBmaQotICBpZiB0ZXN0IC1mICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyI7IHRoZW4KLSAgICAjIFRoZSBMSU5HVUFTIGZpbGUgY29udGFpbnMgdGhlIHNldCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzLgotICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgLWUgInMvIy4qLy8iICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvTElOR1VBUyJgCi0gICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgotICBlbHNlCi0gICAgIyBTZXQgQUxMX0xJTkdVQVMgdG8gdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBMSU5HVUFTLgotICAgIHNlZF94X0xJTkdVQVM9YCRndF9lY2hvICIkc2VkX3hfdmFyaWFibGUiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYAotICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1uIC1lICIkc2VkX3hfTElOR1VBUyIgPCAiJGFjX2ZpbGUiYAotICBmaQotICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlIDwgMS41LgotICBldmFsICdBTExfTElOR1VBUycnPSRBTExfTElOR1VBU18nCi0gICMgQ29tcHV0ZSBQT0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnBvKQotICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKLSAgIyBDb21wdXRlIERVTU1ZUE9GSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkKLSAgIyBDb21wdXRlIEdNT0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLmdtbykKLSAgIyBDb21wdXRlIFBST1BFUlRJRVNGSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCi0gICMgQ29tcHV0ZSBDTEFTU0ZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQodG9wX3NyY2RpcikvJChET01BSU4pXyQobGFuZykuY2xhc3MpCi0gICMgQ29tcHV0ZSBRTUZJTEVTCi0gICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGxhbmcpLnFtKQotICAjIENvbXB1dGUgTVNHRklMRVMKLSAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCi0gICMgQ29tcHV0ZSBSRVNPVVJDRVNETExGSUxFUwotICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChmcm9iICQobGFuZykpLyQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsKQotICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgotICAgIC4pIHNyY2RpcnByZT0gOzsKLSAgICAqKSBzcmNkaXJwcmU9JyQoc3JjZGlyKS8nIDs7Ci0gIGVzYWMKLSAgUE9GSUxFUz0KLSAgVVBEQVRFUE9GSUxFUz0KLSAgRFVNTVlQT0ZJTEVTPQotICBHTU9GSUxFUz0KLSAgUFJPUEVSVElFU0ZJTEVTPQotICBDTEFTU0ZJTEVTPQotICBRTUZJTEVTPQotICBNU0dGSUxFUz0KLSAgUkVTT1VSQ0VTRExMRklMRVM9Ci0gIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcucG8iCi0gICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgotICAgIERVTU1ZUE9GSUxFUz0iJERVTU1ZUE9GSUxFUyAkbGFuZy5ub3AiCi0gICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIgotICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCi0gICAgQ0xBU1NGSUxFUz0iJENMQVNTRklMRVMgXCQodG9wX3NyY2RpcikvXCQoRE9NQUlOKV8kbGFuZy5jbGFzcyIKLSAgICBRTUZJTEVTPSIkUU1GSUxFUyAkc3JjZGlycHJlJGxhbmcucW0iCi0gICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKLSAgICBNU0dGSUxFUz0iJE1TR0ZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcubXNnIgotICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL18vLS9nJyAtZSAncy9ec3ItQ1Mvc3ItU1AvJyAtZSAncy9AbGF0aW4kLy1MYXRuLycgLWUgJ3MvQGN5cmlsbGljJC8tQ3lybC8nIC1lICdzL15zci1TUCQvc3ItU1AtTGF0bi8nIC1lICdzL151ei1VWiQvdXotVVotTGF0bi8nYAotICAgIFJFU09VUkNFU0RMTEZJTEVTPSIkUkVTT1VSQ0VTRExMRklMRVMgJHNyY2RpcnByZSRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCi0gIGRvbmUKLSAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCi0gICMgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gIElOU1RfTElOR1VBUz0KLSAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgotICAgIGZvciBwcmVzZW50bGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCi0gICAgICB1c2VpdD1ubwotICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgotICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkTElOR1VBUyIKLSAgICAgIGVsc2UKLSAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgotICAgICAgZmkKLSAgICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8KLSAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKLSAgICAgICAgIyAgIGEuIGVxdWFsIHRvIHByZXNlbnRsYW5nLCBvcgotICAgICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2FzZSwKLSAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCi0gICAgICAgICMgICAgICB3aGljaCBhcmUgbm90IHRyYW5zbGF0ZWQgaW4gdGhlIGRlc2lyZWRsYW5nIGNhdGFsb2cpLgotICAgICAgICBjYXNlICIkZGVzaXJlZGxhbmciIGluCi0gICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OwotICAgICAgICBlc2FjCi0gICAgICBkb25lCi0gICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgotICAgICAgICBJTlNUX0xJTkdVQVM9IiRJTlNUX0xJTkdVQVMgJHByZXNlbnRsYW5nIgotICAgICAgZmkKLSAgICBkb25lCi0gIGZpCi0gIENBVEFMT0dTPQotICBKQVZBQ0FUQUxPR1M9Ci0gIFFUQ0FUQUxPR1M9Ci0gIFRDTENBVEFMT0dTPQotICBDU0hBUlBDQVRBTE9HUz0KLSAgaWYgdGVzdCAtbiAiJElOU1RfTElOR1VBUyI7IHRoZW4KLSAgICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbwotICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCi0gICAgICBKQVZBQ0FUQUxPR1M9IiRKQVZBQ0FUQUxPR1MgXCQoRE9NQUlOKV8kbGFuZy5wcm9wZXJ0aWVzIgotICAgICAgUVRDQVRBTE9HUz0iJFFUQ0FUQUxPR1MgJGxhbmcucW0iCi0gICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAotICAgICAgVENMQ0FUQUxPR1M9IiRUQ0xDQVRBTE9HUyAkZnJvYmJlZGxhbmcubXNnIgotICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCi0gICAgICBDU0hBUlBDQVRBTE9HUz0iJENTSEFSUENBVEFMT0dTICRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGwiCi0gICAgZG9uZQotICBmaQotCi0gIHNlZCAtZSAic3xAUE9URklMRVNfREVQU0B8JFBPVEZJTEVTX0RFUFN8ZyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBQUk9QRVJUSUVTRklMRVNAfCRQUk9QRVJUSUVTRklMRVN8ZyIgLWUgInN8QENMQVNTRklMRVNAfCRDTEFTU0ZJTEVTfGciIC1lICJzfEBRTUZJTEVTQHwkUU1GSUxFU3xnIiAtZSAic3xATVNHRklMRVNAfCRNU0dGSUxFU3xnIiAtZSAic3xAUkVTT1VSQ0VTRExMRklMRVNAfCRSRVNPVVJDRVNETExGSUxFU3xnIiAtZSAic3xAQ0FUQUxPR1NAfCRDQVRBTE9HU3xnIiAtZSAic3xASkFWQUNBVEFMT0dTQHwkSkFWQUNBVEFMT0dTfGciIC1lICJzfEBRVENBVEFMT0dTQHwkUVRDQVRBTE9HU3xnIiAtZSAic3xAVENMQ0FUQUxPR1NAfCRUQ0xDQVRBTE9HU3xnIiAtZSAic3xAQ1NIQVJQQ0FUQUxPR1NAfCRDU0hBUlBDQVRBTE9HU3xnIiAtZSAncyxeI2Rpc3RkaXI6LGRpc3RkaXI6LCcgPCAiJGFjX2ZpbGUiID4gIiRhY19maWxlLnRtcCIKLSAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgICMgQWRkIGRlcGVuZGVuY2llcyB0aGF0IGNhbm5vdCBiZSBmb3JtdWxhdGVkIGFzIGEgc2ltcGxlIHN1ZmZpeCBydWxlLgotICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KLSAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCi0gICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKLSRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCi0JQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCi0JXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQotRU9GCi0gICAgZG9uZQotICBmaQotICBpZiBncmVwIC1sICdAQ1NIQVJQQ0FUQUxPR1NAJyAiJGFjX2ZpbGUiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCi0gICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbwotICAgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnIC1lICdzL15zci1DUy9zci1TUC8nIC1lICdzL0BsYXRpbiQvLUxhdG4vJyAtZSAncy9AY3lyaWxsaWMkLy1DeXJsLycgLWUgJ3MvXnNyLVNQJC9zci1TUC1MYXRuLycgLWUgJ3MvXnV6LVVaJC91ei1VWi1MYXRuLydgCi0gICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKLSRmcm9iYmVkbGFuZy9cJChET01BSU4pLnJlc291cmNlcy5kbGw6ICRsYW5nLnBvCi0JQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKLQlcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kICJcJChzcmNkaXIpIiAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgIlwkKERPTUFJTikiIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQotRU9GCi0gICAgZG9uZQotICBmaQotICBpZiB0ZXN0IC1uICIkUE9NQUtFRklMRURFUFMiOyB0aGVuCi0gICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCi1NYWtlZmlsZTogJFBPTUFLRUZJTEVERVBTCi1FT0YKLSAgZmkKLSAgbXYgIiRhY19maWxlLnRtcCIgIiRhY19maWxlIgotXSkKLQotZG5sIEluaXRpYWxpemVzIHRoZSBhY2N1bXVsYXRvciB1c2VkIGJ5IEFNX1hHRVRURVhUX09QVElPTi4KLUFDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0sCi1bCi0gIFhHRVRURVhUX0VYVFJBX09QVElPTlM9Ci1dKQotCi1kbmwgUmVnaXN0ZXJzIGFuIG9wdGlvbiB0byBiZSBwYXNzZWQgdG8geGdldHRleHQgaW4gdGhlIHBvIHN1YmRpcmVjdG9yeS4KLUFDX0RFRlVOKFtBTV9YR0VUVEVYVF9PUFRJT05dLAotWwotICBBQ19SRVFVSVJFKFtBTV9YR0VUVEVYVF9PUFRJT05fSU5JVF0pCi0gIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TICQxIgotXSkKZGlmZiAtLWdpdCBhL200L3Byb2d0ZXN0Lm00IGIvbTQvcHJvZ3Rlc3QubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NjM2NWMuLjAwMDAwMDAKLS0tIGEvbTQvcHJvZ3Rlc3QubTQKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jIHByb2d0ZXN0Lm00IHNlcmlhbCA0IChnZXR0ZXh0LTAuMTQuMikKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotZG5sCi1kbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgotZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLWRubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0Ci1kbmwgZnVuY3Rpb25hbGl0eS4KLWRubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCi1kbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCi1kbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi1kbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLWRubCBBdXRob3JzOgotZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCi0KLUFDX1BSRVJFUSgyLjUwKQotCi0jIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgotCi1kbmwgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChWQVJJQUJMRSwgUFJPRy1UTy1DSEVDSy1GT1IsCi1kbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCi1BQ19ERUZVTihbQU1fUEFUSF9QUk9HX1dJVEhfVEVTVF0sCi1bCi0jIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0jIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwKLSMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCi1jYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GCi0jISAvYmluL3NoCi1leGl0IDAKLV9BU0VPRgotY2htb2QgK3ggY29uZiQkLmZpbGUKLWlmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCIKLWVsc2UKLSAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgotZmkKLXJtIC1mIGNvbmYkJC5maWxlCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJDIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICQyOyBhY193b3JkPVskXTIKLUFDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKLUFDX0NBQ0hFX1ZBTChhY19jdl9wYXRoXyQxLAotW2Nhc2UgIlskXSQxIiBpbgotICBbW1xcL11dKiB8ID86W1tcXC9dXSopCi0gICAgYWNfY3ZfcGF0aF8kMT0iWyRdJDEiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICAgIDs7Ci0gICopCi0gICAgYWNfc2F2ZV9JRlM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiBpZmVsc2UoWyQ1XSwgLCAkUEFUSCwgWyQ1XSk7IGRvCi0gICAgICBJRlM9IiRhY19zYXZlX0lGUyIKLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgICAgaWYgWyQzXTsgdGhlbgotICAgICAgICAgICAgYWNfY3ZfcGF0aF8kMT0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAgICAgICAgIGJyZWFrIDIKLSAgICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICBJRlM9IiRhY19zYXZlX0lGUyIKLWRubCBJZiBubyA0dGggYXJnIGlzIGdpdmVuLCBsZWF2ZSB0aGUgY2FjaGUgdmFyaWFibGUgdW5zZXQsCi1kbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KLWlmZWxzZShbJDRdLCAsICwgWyAgdGVzdCAteiAiWyRdYWNfY3ZfcGF0aF8kMSIgJiYgYWNfY3ZfcGF0aF8kMT0iJDQiCi1dKWRubAotICAgIDs7Ci1lc2FjXSlkbmwKLSQxPSIkYWNfY3ZfcGF0aF8kMSIKLWlmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChbJF0kMSkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi1BQ19TVUJTVCgkMSlkbmwKLV0pCmRpZmYgLS1naXQgYS9tNC9zdGRpbnRfaC5tNCBiL200L3N0ZGludF9oLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjlhOGFjLi4wMDAwMDAwCi0tLSBhL200L3N0ZGludF9oLm00CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBzdGRpbnRfaC5tNCBzZXJpYWwgNgotZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDA0LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1kbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLWRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLWRubCBGcm9tIFBhdWwgRWdnZXJ0LgotCi0jIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKLSMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCi0KLUFDX0RFRlVOKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdLAotWwotICBBQ19DQUNIRV9DSEVDSyhbZm9yIHN0ZGludC5oXSwgZ2xfY3ZfaGVhZGVyX3N0ZGludF9oLAotICBbQUNfVFJZX0NPTVBJTEUoCi0gICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD5dLAotICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xOyByZXR1cm4gIWk7XSwKLSAgICBnbF9jdl9oZWFkZXJfc3RkaW50X2g9eWVzLAotICAgIGdsX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQotICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgsIDEsCi0gICAgICBbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKLSAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQotICBmaQotXSkKZGlmZiAtLWdpdCBhL200L3VpbnRtYXhfdC5tNCBiL200L3VpbnRtYXhfdC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxYzQ4OS4uMDAwMDAwMAotLS0gYS9tNC91aW50bWF4X3QubTQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIHVpbnRtYXhfdC5tNCBzZXJpYWwgMTAKLWRubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwNCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi1kbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi1kbmwgRnJvbSBQYXVsIEVnZ2VydC4KLQotQUNfUFJFUkVRKDIuMTMpCi0KLSMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKLSMgaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZCBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi4KLQotQUNfREVGVU4oW2dsX0FDX1RZUEVfVUlOVE1BWF9UXSwKLVsKLSAgQUNfUkVRVUlSRShbZ2xfQUNfSEVBREVSX0lOVFRZUEVTX0hdKQotICBBQ19SRVFVSVJFKFtnbF9BQ19IRUFERVJfU1RESU5UX0hdKQotICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IG5vICYmIHRlc3QgJGdsX2N2X2hlYWRlcl9zdGRpbnRfaCA9IG5vOyB0aGVuCi0gICAgQUNfUkVRVUlSRShbQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UXSkKLSAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXMgXAotICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCi0gICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJwotICAgIEFDX0RFRklORV9VTlFVT1RFRCh1aW50bWF4X3QsICRhY190eXBlLAotICAgICAgW0RlZmluZSB0byB1bnNpZ25lZCBsb25nIG9yIHVuc2lnbmVkIGxvbmcgbG9uZwotICAgICAgIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkb24ndCBkZWZpbmUuXSkKLSAgZWxzZQotICAgIEFDX0RFRklORShIQVZFX1VJTlRNQVhfVCwgMSwKLSAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKLSAgZmkKLV0pCmRpZmYgLS1naXQgYS9tNC92b3JiaXMubTQgYi9tNC92b3JiaXMubTQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMjg4OTMuLjAwMDAwMDAKLS0tIGEvbTQvdm9yYmlzLm00CisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLSMgQ29uZmlndXJlIHBhdGhzIGZvciBsaWJ2b3JiaXMKLSMgSmFjayBNb2ZmaXR0IDxqYWNrQGljZWNhc3Qub3JnPiAxMC0yMS0yMDAwCi0jIFNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIE93ZW4gVGF5bG9yIGFuZCBNYW5pc2ggU2luZ2gKLSMgdGhvbWFzdnMgYWRkZWQgY2hlY2sgZm9yIHZvcmJpc19iaXRyYXRlX2FkZGJsb2NrIHdoaWNoIGlzIG5ldyBpbiByYzMKLSMgdGhvbWFzdnMgYWRkZWQgY2hlY2sgZm9yIE9WX0VDVExfUkFURU1BTkFHRV9TRVQgd2hpY2ggaXMgbmV3IGluIDEuMCBmaW5hbAotCi1kbmwgWElQSF9QQVRIX1ZPUkJJUyhbQUNUSU9OLUlGLUZPVU5EIFssIEFDVElPTi1JRi1OT1QtRk9VTkRdXSkKLWRubCBUZXN0IGZvciBsaWJ2b3JiaXMsIGFuZCBkZWZpbmUgVk9SQklTX0NGTEFHUyBhbmQgVk9SQklTX0xJQlMKLWRubAotQUNfREVGVU4oW1hJUEhfUEFUSF9WT1JCSVNdLAotW2RubCAKLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzCi1kbmwKLUFDX0FSR19XSVRIKHZvcmJpcyxbICAtLXdpdGgtdm9yYmlzPVBGWCAgIFByZWZpeCB3aGVyZSBsaWJ2b3JiaXMgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLCB2b3JiaXNfcHJlZml4PSIkd2l0aHZhbCIsIHZvcmJpc19wcmVmaXg9IiIpCi1BQ19BUkdfV0lUSCh2b3JiaXMtbGlicmFyaWVzLFsgIC0td2l0aC12b3JiaXMtbGlicmFyaWVzPURJUiAgIERpcmVjdG9yeSB3aGVyZSBsaWJ2b3JiaXMgbGlicmFyeSBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIHZvcmJpc19saWJyYXJpZXM9IiR3aXRodmFsIiwgdm9yYmlzX2xpYnJhcmllcz0iIikKLUFDX0FSR19XSVRIKHZvcmJpcy1pbmNsdWRlcyxbICAtLXdpdGgtdm9yYmlzLWluY2x1ZGVzPURJUiAgIERpcmVjdG9yeSB3aGVyZSBsaWJ2b3JiaXMgaGVhZGVyIGZpbGVzIGFyZSBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sIHZvcmJpc19pbmNsdWRlcz0iJHdpdGh2YWwiLCB2b3JiaXNfaW5jbHVkZXM9IiIpCi1BQ19BUkdfRU5BQkxFKHZvcmJpc3Rlc3QsIFsgIC0tZGlzYWJsZS12b3JiaXN0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBWb3JiaXMgcHJvZ3JhbV0sLCBlbmFibGVfdm9yYmlzdGVzdD15ZXMpCi0KLSAgaWYgdGVzdCAieCR2b3JiaXNfbGlicmFyaWVzIiAhPSAieCIgOyB0aGVuCi0gICAgVk9SQklTX0xJQlM9Ii1MJHZvcmJpc19saWJyYXJpZXMiCi0gIGVsaWYgdGVzdCAieCR2b3JiaXNfcHJlZml4IiAhPSAieCIgOyB0aGVuCi0gICAgVk9SQklTX0xJQlM9Ii1MJHZvcmJpc19wcmVmaXgvbGliIgotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiOyB0aGVuCi0gICAgVk9SQklTX0xJQlM9Ii1MJHByZWZpeC9saWIiCi0gIGZpCi0KLSAgVk9SQklTX0xJQlM9IiRWT1JCSVNfTElCUyAtbHZvcmJpcyAtbG0iCi0gIFZPUkJJU0ZJTEVfTElCUz0iLWx2b3JiaXNmaWxlIgotICBWT1JCSVNFTkNfTElCUz0iLWx2b3JiaXNlbmMiCi0KLSAgaWYgdGVzdCAieCR2b3JiaXNfaW5jbHVkZXMiICE9ICJ4IiA7IHRoZW4KLSAgICBWT1JCSVNfQ0ZMQUdTPSItSSR2b3JiaXNfaW5jbHVkZXMiCi0gIGVsaWYgdGVzdCAieCR2b3JiaXNfcHJlZml4IiAhPSAieCIgOyB0aGVuCi0gICAgVk9SQklTX0NGTEFHUz0iLUkkdm9yYmlzX3ByZWZpeC9pbmNsdWRlIgotICBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSAieE5PTkUiOyB0aGVuCi0gICAgVk9SQklTX0NGTEFHUz0iLUkkcHJlZml4L2luY2x1ZGUiCi0gIGZpCi0KLQotICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFZvcmJpcykKLSAgbm9fdm9yYmlzPSIiCi0KLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV92b3JiaXN0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKLSAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgotICAgIENGTEFHUz0iJENGTEFHUyAkVk9SQklTX0NGTEFHUyAkT0dHX0NGTEFHUyIKLSAgICBMSUJTPSIkTElCUyAkVk9SQklTX0xJQlMgJFZPUkJJU0VOQ19MSUJTICRPR0dfTElCUyIKLWRubAotZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIFZvcmJpcyBpcyBzdWZmaWNpZW50bHkgbmV3LgotZG5sCi0gICAgICBybSAtZiBjb25mLnZvcmJpc3Rlc3QKLSAgICAgIEFDX1RSWV9SVU4oWwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dm9yYmlzL2NvZGVjLmg+Ci0jaW5jbHVkZSA8dm9yYmlzL3ZvcmJpc2VuYy5oPgotCi1pbnQgbWFpbiAoKQotewotICAgIHZvcmJpc19ibG9jayAJdmI7Ci0gICAgdm9yYmlzX2RzcF9zdGF0ZQl2ZDsKLSAgICB2b3JiaXNfaW5mbwkJdmk7Ci0KLSAgICB2b3JiaXNfaW5mb19pbml0ICgmdmkpOwotICAgIHZvcmJpc19lbmNvZGVfaW5pdCAoJnZpLCAyLCA0NDEwMCwgLTEsIDEyODAwMCwgLTEpOwotICAgIHZvcmJpc19hbmFseXNpc19pbml0ICgmdmQsICZ2aSk7Ci0gICAgdm9yYmlzX2Jsb2NrX2luaXQgKCZ2ZCwgJnZiKTsKLSAgICAvKiB0aGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiAxLjByYzMsIHNvIHRoaXMgaXMgd2hhdCB3ZSdyZSB0ZXN0aW5nIGZvciAqLwotICAgIHZvcmJpc19iaXRyYXRlX2FkZGJsb2NrICgmdmIpOwotCi0gICAgLyogdGhpcyBkZWZpbmUgd2FzIGFkZGVkIGluIDEuMCBmaW5hbCAqLwotI2lmZGVmIE9WX0VDVExfUkFURU1BTkFHRV9TRVQKLSAgICBzeXN0ZW0oInRvdWNoIGNvbmYudm9yYmlzdGVzdCIpOwotICAgIHJldHVybiAwOwotI2Vsc2UKLSAgICByZXR1cm4gLTE7Ci0jZW5kaWYKLX0KLQotXSwsIG5vX3ZvcmJpcz15ZXMsW2VjaG8gJGFjX24gImNyb3NzIGNvbXBpbGluZzsgYXNzdW1lZCBPSy4uLiAkYWNfYyJdKQotICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gIGZpCi0KLSAgaWYgdGVzdCAieCRub192b3JiaXMiID0gIngiIDsgdGhlbgotICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgaWZlbHNlKFskMV0sICwgOiwgWyQxXSkgICAgIAotICBlbHNlCi0gICAgIEFDX01TR19SRVNVTFQobm8pCi0gICAgIGlmIHRlc3QgLWYgY29uZi52b3JiaXN0ZXN0IDsgdGhlbgotICAgICAgIDoKLSAgICAgZWxzZQotICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIFZvcmJpcyB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKLSAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFZPUkJJU19DRkxBR1MiCi0gICAgICAgTElCUz0iJExJQlMgJFZPUkJJU19MSUJTICRPR0dfTElCUyIKLSAgICAgICBBQ19UUllfTElOSyhbCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx2b3JiaXMvY29kZWMuaD4KLV0sICAgICBbIHJldHVybiAwOyBdLAotICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgotICAgICAgIGVjaG8gIioqKiB0aGF0IHRoZSBydW4tdGltZSBsaW5rZXIgaXMgbm90IGZpbmRpbmcgVm9yYmlzIG9yIGZpbmRpbmcgdGhlIHdyb25nIgotICAgICAgIGVjaG8gIioqKiB2ZXJzaW9uIG9mIFZvcmJpcy4gSWYgaXQgaXMgbm90IGZpbmRpbmcgVm9yYmlzLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKLSAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKLSAgICAgICBlY2hvICIqKiogdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbiAgQWxzbywgbWFrZSBzdXJlIHlvdSBoYXZlIHJ1biBsZGNvbmZpZyBpZiB0aGF0IgotICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKLSAgICAgICBlY2hvICIqKioiCi0gICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgotICAgICAgIGVjaG8gIioqKiB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBnZXQgdGhpbmdzIHRvIHdvcmsgYnkgbW9kaWZ5aW5nIExEX0xJQlJBUllfUEFUSCJdLAotICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKLSAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgVm9yYmlzIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCi0gICAgICAgZWNobyAiKioqIG9yIHRoYXQgeW91IGhhdmUgbW92ZWQgVm9yYmlzIHNpbmNlIGl0IHdhcyBpbnN0YWxsZWQuIiBdKQotICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgotICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCi0gICAgIGZpCi0gICAgIFZPUkJJU19DRkxBR1M9IiIKLSAgICAgVk9SQklTX0xJQlM9IiIKLSAgICAgVk9SQklTRklMRV9MSUJTPSIiCi0gICAgIFZPUkJJU0VOQ19MSUJTPSIiCi0gICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCi0gIGZpCi0gIEFDX1NVQlNUKFZPUkJJU19DRkxBR1MpCi0gIEFDX1NVQlNUKFZPUkJJU19MSUJTKQotICBBQ19TVUJTVChWT1JCSVNGSUxFX0xJQlMpCi0gIEFDX1NVQlNUKFZPUkJJU0VOQ19MSUJTKQotICBybSAtZiBjb25mLnZvcmJpc3Rlc3QKLV0pCmRpZmYgLS1naXQgYS9taXNzaW5nIGIvbWlzc2luZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjYyYmJhZS4uMDAwMDAwMAotLS0gYS9taXNzaW5nCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgQ29tbW9uIHdyYXBwZXIgZm9yIGEgZmV3IHBvdGVudGlhbGx5IG1pc3NpbmcgR05VIHByb2dyYW1zLgotCi1zY3JpcHR2ZXJzaW9uPTIwMTMtMTAtMjguMTM7ICMgVVRDCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgotICBlY2hvIDE+JjIgIlRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKLSAgZXhpdCAxCi1maQotCi1jYXNlICQxIGluCi0KLSAgLS1pcy1saWdodHdlaWdodCkKLSAgICAjIFVzZWQgYnkgb3VyIGF1dG9jb25mIG1hY3JvcyB0byBjaGVjayB3aGV0aGVyIHRoZSBhdmFpbGFibGUgbWlzc2luZwotICAgICMgc2NyaXB0IGlzIG1vZGVybiBlbm91Z2guCi0gICAgZXhpdCAwCi0gICAgOzsKLQotICAtLXJ1bikKLSAgICAjIEJhY2stY29tcGF0IHdpdGggdGhlIGNhbGxpbmcgY29udmVudGlvbiB1c2VkIGJ5IG9sZGVyIGF1dG9tYWtlLgotICAgIHNoaWZ0Ci0gICAgOzsKLQotICAtaHwtLWh8LS1oZXwtLWhlbHwtLWhlbHApCi0gICAgZWNobyAiXAotJDAgW09QVElPTl0uLi4gUFJPR1JBTSBbQVJHVU1FTlRdLi4uCi0KLVJ1biAnUFJPR1JBTSBbQVJHVU1FTlRdLi4uJywgcmV0dXJuaW5nIGEgcHJvcGVyIGFkdmljZSB3aGVuIHRoaXMgZmFpbHMgZHVlCi10byBQUk9HUkFNIGJlaW5nIG1pc3Npbmcgb3IgdG9vIG9sZC4KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0Ci0gIC12LCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotCi1TdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6Ci0gIGFjbG9jYWwgICBhdXRvY29uZiAgYXV0b2hlYWRlciAgIGF1dG9tNHRlICBhdXRvbWFrZSAgbWFrZWluZm8KLSAgYmlzb24gICAgIHlhY2MgICAgICBmbGV4ICAgICAgICAgbGV4ICAgICAgIGhlbHAybWFuCi0KLVZlcnNpb24gc3VmZml4ZXMgdG8gUFJPR1JBTSBhcyB3ZWxsIGFzIHRoZSBwcmVmaXhlcyAnZ251LScsICdnbnUnLCBhbmQKLSdnJyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBuYW1lLgotCi1TZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgotICAgIGV4aXQgJD8KLSAgICA7OwotCi0gIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKLSAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgotICAgIGV4aXQgJD8KLSAgICA7OwotCi0gIC0qKQotICAgIGVjaG8gMT4mMiAiJDA6IHVua25vd24gJyQxJyBvcHRpb24iCi0gICAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCi0gICAgZXhpdCAxCi0gICAgOzsKLQotZXNhYwotCi0jIFJ1biB0aGUgZ2l2ZW4gcHJvZ3JhbSwgcmVtZW1iZXIgaXRzIGV4aXQgc3RhdHVzLgotIiRAIjsgc3Q9JD8KLQotIyBJZiBpdCBzdWNjZWVkZWQsIHdlIGFyZSBkb25lLgotdGVzdCAkc3QgLWVxIDAgJiYgZXhpdCAwCi0KLSMgQWxzbyBleGl0IG5vdyBpZiB3ZSBpdCBmYWlsZWQgKG9yIHdhc24ndCBmb3VuZCksIGFuZCAnLS12ZXJzaW9uJyB3YXMKLSMgcGFzc2VkOyBzdWNoIGFuIG9wdGlvbiBpcyBwYXNzZWQgbW9zdCBsaWtlbHkgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlCi0jIHByb2dyYW0gaXMgcHJlc2VudCBhbmQgd29ya3MuCi1jYXNlICQyIGluIC0tdmVyc2lvbnwtLWhlbHApIGV4aXQgJHN0OzsgZXNhYwotCi0jIEV4aXQgY29kZSA2MyBtZWFucyB2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBvZnRlbiBoYXBwZW5zIHdoZW4gdGhlIHVzZXIKLSMgdHJpZXMgdG8gdXNlIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBhIHRvb2wgb24gYSBmaWxlIHRoYXQgcmVxdWlyZXMgYQotIyBtaW5pbXVtIHZlcnNpb24uCi1pZiB0ZXN0ICRzdCAtZXEgNjM7IHRoZW4KLSAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgotZWxpZiB0ZXN0ICRzdCAtZXEgMTI3OyB0aGVuCi0gICMgUHJvZ3JhbSB3YXMgbWlzc2luZy4KLSAgbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgotZWxzZQotICAjIFByb2dyYW0gd2FzIGZvdW5kIGFuZCBleGVjdXRlZCwgYnV0IGZhaWxlZC4gIEdpdmUgdXAuCi0gIGV4aXQgJHN0Ci1maQotCi1wZXJsX1VSTD1odHRwOi8vd3d3LnBlcmwub3JnLwotZmxleF9VUkw9aHR0cDovL2ZsZXguc291cmNlZm9yZ2UubmV0LwotZ251X3NvZnR3YXJlX1VSTD1odHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUKLQotcHJvZ3JhbV9kZXRhaWxzICgpCi17Ci0gIGNhc2UgJDEgaW4KLSAgICBhY2xvY2FsfGF1dG9tYWtlKQotICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b21ha2UgcGFja2FnZToiCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b21ha2U+IgotICAgICAgZWNobyAiSXQgYWxzbyByZXF1aXJlcyBHTlUgQXV0b2NvbmYsIEdOVSBtNCBhbmQgUGVybCBpbiBvcmRlciB0byBydW46IgotICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9jb25mPiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tNC8+IgotICAgICAgZWNobyAiPCRwZXJsX1VSTD4iCi0gICAgICA7OwotICAgIGF1dG9jb25mfGF1dG9tNHRlfGF1dG9oZWFkZXIpCi0gICAgICBlY2hvICJUaGUgJyQxJyBwcm9ncmFtIGlzIHBhcnQgb2YgdGhlIEdOVSBBdXRvY29uZiBwYWNrYWdlOiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZi8+IgotICAgICAgZWNobyAiSXQgYWxzbyByZXF1aXJlcyBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tNC8+IgotICAgICAgZWNobyAiPCRwZXJsX1VSTD4iCi0gICAgICA7OwotICBlc2FjCi19Ci0KLWdpdmVfYWR2aWNlICgpCi17Ci0gICMgTm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCi0gIG5vcm1hbGl6ZWRfcHJvZ3JhbT1gZWNobyAiJDEiIHwgc2VkICcKLSAgICBzL15nbnUtLy87IHQKLSAgICBzL15nbnUvLzsgdAotICAgIHMvXmcvLzsgdCdgCi0KLSAgcHJpbnRmICclc1xuJyAiJyQxJyBpcyAkbXNnLiIKLQotICBjb25maWd1cmVfZGVwcz0iJ2NvbmZpZ3VyZS5hYycgb3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgJ2NvbmZpZ3VyZS5hYyciCi0gIGNhc2UgJG5vcm1hbGl6ZWRfcHJvZ3JhbSBpbgotICAgIGF1dG9jb25mKikKLSAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnY29uZmlndXJlLmFjJywiCi0gICAgICBlY2hvICJvciBtNCBmaWxlcyBpbmNsdWRlZCBieSBpdC4iCi0gICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9jb25mJwotICAgICAgOzsKLSAgICBhdXRvaGVhZGVyKikKLSAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnYWNjb25maWcuaCcgb3IiCi0gICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgotICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvaGVhZGVyJwotICAgICAgOzsKLSAgICBhdXRvbWFrZSopCi0gICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ01ha2VmaWxlLmFtJyBvciIKLSAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCi0gICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9tYWtlJwotICAgICAgOzsKLSAgICBhY2xvY2FsKikKLSAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnYWNpbmNsdWRlLm00JyBvciIKLSAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCi0gICAgICBwcm9ncmFtX2RldGFpbHMgJ2FjbG9jYWwnCi0gICAgICA7OwotICAgYXV0b200dGUqKQotICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBtYWludGFpbmVyIGZpbGVzIHRoYXQgcmVxdWlyZSIKLSAgICAgIGVjaG8gInRoZSAnYXV0b200dGUnIHByb2dyYW0gdG8gYmUgcmVidWlsdC4iCi0gICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9tNHRlJwotICAgICAgOzsKLSAgICBiaXNvbip8eWFjYyopCi0gICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLnknIGZpbGUuIgotICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBCaXNvbiBwYWNrYWdlOiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9iaXNvbi8+IgotICAgICAgOzsKLSAgICBsZXgqfGZsZXgqKQotICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy5sJyBmaWxlLiIKLSAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBGYXN0IExleGljYWwgQW5hbHl6ZXIgcGFja2FnZToiCi0gICAgICBlY2hvICI8JGZsZXhfVVJMPiIKLSAgICAgIDs7Ci0gICAgaGVscDJtYW4qKQotICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSIgXAotICAgICAgICAgICAib2YgYSBtYW4gcGFnZS4iCi0gICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgR05VIEhlbHAybWFuIHBhY2thZ2U6IgotICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2hlbHAybWFuLz4iCi0gICAgOzsKLSAgICBtYWtlaW5mbyopCi0gICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLnRleGknIGZpbGUsIG9yIgotICAgICAgZWNobyAiYW55IG90aGVyIGZpbGUgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiIKLSAgICAgIGVjaG8gIllvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFRleGluZm8gcGFja2FnZToiCi0gICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvdGV4aW5mby8+IgotICAgICAgZWNobyAiVGhlIHNwdXJpb3VzIG1ha2VpbmZvIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YiCi0gICAgICBlY2hvICJ1c2luZyBhIGJ1Z2d5ICdtYWtlJyAoQUlYLCBEVSwgSVJJWCksIGluIHdoaWNoIGNhc2UgeW91IG1pZ2h0IgotICAgICAgZWNobyAid2FudCB0byBpbnN0YWxsIEdOVSBtYWtlOiIKLSAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tYWtlLz4iCi0gICAgICA7OwotICAgICopCi0gICAgICBlY2hvICJZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZSBwcm9wZXIiCi0gICAgICBlY2hvICJ0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlICdSRUFETUUnIGZpbGUsIGl0IgotICAgICAgZWNobyAib2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZyIKLSAgICAgIGVjaG8gInRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiIKLSAgICAgIGVjaG8gImNhc2Ugc29tZSBvdGhlciBwYWNrYWdlIGNvbnRhaW5zIHRoaXMgbWlzc2luZyAnJDEnIHByb2dyYW0uIgotICAgICAgOzsKLSAgZXNhYwotfQotCi1naXZlX2FkdmljZSAiJDEiIHwgc2VkIC1lICcxcy9eL1dBUk5JTkc6IC8nIFwKLSAgICAgICAgICAgICAgICAgICAgICAgLWUgJzIsJHMvXi8gICAgICAgICAvJyA+JjIKLQotIyBQcm9wYWdhdGUgdGhlIGNvcnJlY3QgZXhpdCBzdGF0dXMgKGV4cGVjdGVkIHRvIGJlIDEyNyBmb3IgYSBwcm9ncmFtCi0jIG5vdCBmb3VuZCwgNjMgZm9yIGEgcHJvZ3JhbSB0aGF0IGZhaWxlZCBkdWUgdG8gdmVyc2lvbiBtaXNtYXRjaCkuCi1leGl0ICRzdAotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9wa2djb25maWcvTWFrZWZpbGUuYW0gYi9wa2djb25maWcvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNzkxN2IuLjAwMDAwMDAKLS0tIGEvcGtnY29uZmlnL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyMjIGFsbCBvZiB0aGUgc3RhbmRhcmQgcGMgZmlsZXMgd2UgbmVlZCB0byBnZW5lcmF0ZQotcGN2ZXJmaWxlcyA9ICBcCi0JZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC1AR1NUX0FQSV9WRVJTSU9OQC5wYwotcGN2ZXJmaWxlc191bmluc3RhbGxlZCA9IFwKLQlnc3RyZWFtZXItcGx1Z2lucy1nb29kLUBHU1RfQVBJX1ZFUlNJT05ALXVuaW5zdGFsbGVkLnBjCi0KLSMjIyBhbGwtbG9jYWw6ICQocGN2ZXJmaWxlcykgJChwY3ZlcmZpbGVzX3VuaW5zdGFsbGVkKQotYWxsLWxvY2FsOiAkKHBjdmVyZmlsZXNfdW5pbnN0YWxsZWQpCi0KLWNwX3ZlcmJvc2UgPSAkKGNwX3ZlcmJvc2VfJChWKSkKLWNwX3ZlcmJvc2VfID0gJChjcF92ZXJib3NlXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotY3BfdmVyYm9zZV8wID0gQGVjaG8gIiAgQ1AgICAgICRAIjsKLQotIyMjIGhvdyB0byBnZW5lcmF0ZSB2ZXJzaW9uZWQgLnBjIGZpbGVzIGZyb20gLnBjIGZpbGVzIGluIHRoaXMgZGlyCi0lLUBHU1RfQVBJX1ZFUlNJT05ALnBjOiAlLnBjCi0JJChjcF92ZXJib3NlKWNwICQ8ICRACi0lLUBHU1RfQVBJX1ZFUlNJT05ALXVuaW5zdGFsbGVkLnBjOiAlLXVuaW5zdGFsbGVkLnBjCi0JJChjcF92ZXJib3NlKWNwICQ8ICRACi0KLSMgZG8gbm90IGluc3RhbGwgZm9yIG5vdwotIyBwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCi0jIHBrZ2NvbmZpZ19EQVRBID0gJChwY3ZlcmZpbGVzKQotCi1DTEVBTkZJTEVTID0gJChwY3ZlcmZpbGVzKSAkKHBjdmVyZmlsZXNfdW5pbnN0YWxsZWQpCi0jIHBjaW5maWxlcyA9IFwKLSMgICAgICAgICAgIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QucGMuaW4gZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbgotcGNpbmZpbGVzID0gXAotICAgICAgICAgICBnc3RyZWFtZXItcGx1Z2lucy1nb29kLXVuaW5zdGFsbGVkLnBjLmluCi0KLURJU1RDTEVBTkZJTEVTID0gJChwY2luZmlsZXM6LmluPSkKLUVYVFJBX0RJU1QgPSAkKHBjaW5maWxlcykKZGlmZiAtLWdpdCBhL3BrZ2NvbmZpZy9NYWtlZmlsZS5pbiBiL3BrZ2NvbmZpZy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxNjM5ZC4uMDAwMDAwMAotLS0gYS9wa2djb25maWcvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw3MTkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBwa2djb25maWcKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPSBnc3RyZWFtZXItcGx1Z2lucy1nb29kLXVuaW5zdGFsbGVkLnBjCi1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCi0JJChzcmNkaXIpL2dzdHJlYW1lci1wbHVnaW5zLWdvb2QtdW5pbnN0YWxsZWQucGMuaW4KLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLQotIyMjIGFsbCBvZiB0aGUgc3RhbmRhcmQgcGMgZmlsZXMgd2UgbmVlZCB0byBnZW5lcmF0ZQotcGN2ZXJmaWxlcyA9IFwKLQlnc3RyZWFtZXItcGx1Z2lucy1nb29kLUBHU1RfQVBJX1ZFUlNJT05ALnBjCi0KLXBjdmVyZmlsZXNfdW5pbnN0YWxsZWQgPSBcCi0JZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC1AR1NUX0FQSV9WRVJTSU9OQC11bmluc3RhbGxlZC5wYwotCi1jcF92ZXJib3NlID0gJChjcF92ZXJib3NlXyQoVikpCi1jcF92ZXJib3NlXyA9ICQoY3BfdmVyYm9zZV8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKLWNwX3ZlcmJvc2VfMCA9IEBlY2hvICIgIENQICAgICAkQCI7Ci0KLSMgZG8gbm90IGluc3RhbGwgZm9yIG5vdwotIyBwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCi0jIHBrZ2NvbmZpZ19EQVRBID0gJChwY3ZlcmZpbGVzKQotQ0xFQU5GSUxFUyA9ICQocGN2ZXJmaWxlcykgJChwY3ZlcmZpbGVzX3VuaW5zdGFsbGVkKQotIyBwY2luZmlsZXMgPSBcCi0jICAgICAgICAgICBnc3RyZWFtZXItcGx1Z2lucy1nb29kLnBjLmluIGdzdHJlYW1lci1wbHVnaW5zLWdvb2QtdW5pbnN0YWxsZWQucGMuaW4KLXBjaW5maWxlcyA9IFwKLSAgICAgICAgICAgZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbgotCi1ESVNUQ0xFQU5GSUxFUyA9ICQocGNpbmZpbGVzOi5pbj0pCi1FWFRSQV9ESVNUID0gJChwY2luZmlsZXMpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBwa2djb25maWcvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgcGtnY29uZmlnL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2dzdHJlYW1lci1wbHVnaW5zLWdvb2QtdW5pbnN0YWxsZWQucGMuaW4KLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotdGFncyBUQUdTOgotCi1jdGFncyBDVEFHUzoKLQotY3Njb3BlIGNzY29wZWxpc3Q6Ci0KLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgYWxsLWxvY2FsCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IGFsbCBhbGwtYW0gYWxsLWxvY2FsIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCBcCi0JdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIyMgYWxsLWxvY2FsOiAkKHBjdmVyZmlsZXMpICQocGN2ZXJmaWxlc191bmluc3RhbGxlZCkKLWFsbC1sb2NhbDogJChwY3ZlcmZpbGVzX3VuaW5zdGFsbGVkKQotCi0jIyMgaG93IHRvIGdlbmVyYXRlIHZlcnNpb25lZCAucGMgZmlsZXMgZnJvbSAucGMgZmlsZXMgaW4gdGhpcyBkaXIKLSUtQEdTVF9BUElfVkVSU0lPTkAucGM6ICUucGMKLQkkKGNwX3ZlcmJvc2UpY3AgJDwgJEAKLSUtQEdTVF9BUElfVkVSU0lPTkAtdW5pbnN0YWxsZWQucGM6ICUtdW5pbnN0YWxsZWQucGMKLQkkKGNwX3ZlcmJvc2UpY3AgJDwgJEAKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvcGtnY29uZmlnL2dzdHJlYW1lci1wbHVnaW5zLWdvb2QtdW5pbnN0YWxsZWQucGMuaW4gYi9wa2djb25maWcvZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3YTMyYi4uMDAwMDAwMAotLS0gYS9wa2djb25maWcvZ3N0cmVhbWVyLXBsdWdpbnMtZ29vZC11bmluc3RhbGxlZC5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXByZWZpeD0KLWV4ZWNfcHJlZml4PQotbGliZGlyPUBhYnNfdG9wX2J1aWxkZGlyQC9nc3QtbGlicy9nc3QKLWluY2x1ZGVkaXI9QGFic190b3BfYnVpbGRkaXJAL2dzdC1saWJzCi1wbHVnaW5zZGlyPUBhYnNfdG9wX2J1aWxkZGlyQAotCi1OYW1lOiBHU3RyZWFtZXIgR29vZCBQbHVnaW5zLCBVbmluc3RhbGxlZAotRGVzY3JpcHRpb246IFN0cmVhbWluZyBtZWRpYSBmcmFtZXdvcmssIGdvb2QgcGx1Z2lucywgdW5pbnN0YWxsZWQKLVZlcnNpb246IEBWRVJTSU9OQAotUmVxdWlyZXM6IGdzdHJlYW1lci1AR1NUX0FQSV9WRVJTSU9OQCBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLUBHU1RfQVBJX1ZFUlNJT05ACi0KLUxpYnM6IAotQ2ZsYWdzOiAKZGlmZiAtLWdpdCBhL3BvL0xJTkdVQVMgYi9wby9MSU5HVUFTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDIwMDE5Li4wMDAwMDAwCi0tLSBhL3BvL0xJTkdVQVMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hZiBheiBiZyBjYSBjcyBkYSBkZSBlbCBlbl9HQiBlbyBlcyBldSBmaSBmciBnbCBociBodSBpZCBpdCBqYSBsdCBsdiBtdCBuYiBubCBvciBwbCBwdF9CUiBybyBydSBzayBzbCBzcSBzciBzdiB0ciB1ayB2aSB6aF9DTiB6aF9ISyB6aF9UVwpkaWZmIC0tZ2l0IGEvcG8vTWFrZWZpbGUuaW4uaW4gYi9wby9NYWtlZmlsZS5pbi5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjZjUwMC4uMDAwMDAwMAotLS0gYS9wby9NYWtlZmlsZS5pbi5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCi0jIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDcgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+Ci0jCi0jIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgotIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAotIyBmdW5jdGlvbmFsaXR5LgotIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jCi0jIE9yaWdpbjogZ2V0dGV4dC0wLjE3Ci1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3Ci0KLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotCi1TSEVMTCA9IC9iaW4vc2gKLUBTRVRfTUFLRUAKLQotc3JjZGlyID0gQHNyY2RpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLVZQQVRIID0gQHNyY2RpckAKLQotcHJlZml4ID0gQHByZWZpeEAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotZ2V0dGV4dHNyY2RpciA9ICQoZGF0YWRpcikvZ2V0dGV4dC9wbwotCi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotCi0jIFdlIHVzZSAkKG1rZGlyX3ApLgotIyBJbiBhdXRvbWFrZSA8PSAxLjkueCwgJChta2Rpcl9wKSBpcyBkZWZpbmVkIGVpdGhlciBhcyAibWtkaXIgLXAgLS0iIG9yIGFzCi0jICIkKG1raW5zdGFsbGRpcnMpIiBvciBhcyAiJChpbnN0YWxsX3NoKSAtZCIuIEZvciB0aGVzZSBhdXRvbWFrZSB2ZXJzaW9ucywKLSMgQGluc3RhbGxfc2hAIGRvZXMgbm90IHN0YXJ0IHdpdGggJChTSEVMTCksIHNvIHdlIGFkZCBpdC4KLSMgSW4gYXV0b21ha2UgPj0gMS4xMCwgQG1rZGlyX3BAIGlzIGRlcml2ZWQgZnJvbSAke01LRElSX1B9LCB3aGljaCBpcyBkZWZpbmVkCi0jIGVpdGhlciBhcyAiL3BhdGgvdG8vbWtkaXIgLXAiIG9yICIuLi4vaW5zdGFsbC1zaCAtYyAtZCIuIEZvciB0aGVzZSBhdXRvbWFrZQotIyB2ZXJzaW9ucywgJChta2luc3RhbGxkaXJzKSBhbmQgJChpbnN0YWxsX3NoKSBhcmUgdW51c2VkLgotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpIEBpbnN0YWxsX3NoQCAtZAotaW5zdGFsbF9zaCA9ICQoU0hFTEwpIEBpbnN0YWxsX3NoQAotTUtESVJfUCA9IEBNS0RJUl9QQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotCi1HTVNHRk1UXyA9IEBHTVNHRk1UQAotR01TR0ZNVF9ubyA9IEBHTVNHRk1UQAotR01TR0ZNVF95ZXMgPSBAR01TR0ZNVF8wMTVACi1HTVNHRk1UID0gJChHTVNHRk1UXyQoVVNFX01TR0NUWFQpKQotTVNHRk1UXyA9IEBNU0dGTVRACi1NU0dGTVRfbm8gPSBATVNHRk1UQAotTVNHRk1UX3llcyA9IEBNU0dGTVRfMDE1QAotTVNHRk1UID0gJChNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCi1YR0VUVEVYVF8gPSBAWEdFVFRFWFRACi1YR0VUVEVYVF9ubyA9IEBYR0VUVEVYVEAKLVhHRVRURVhUX3llcyA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVCA9ICQoWEdFVFRFWFRfJChVU0VfTVNHQ1RYVCkpCi1NU0dNRVJHRSA9IG1zZ21lcmdlCi1NU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCi1NU0dJTklUID0gbXNnaW5pdAotTVNHQ09OViA9IG1zZ2NvbnYKLU1TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgotCi1QT0ZJTEVTID0gQFBPRklMRVNACi1HTU9GSUxFUyA9IEBHTU9GSUxFU0AKLVVQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKLURVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACi1ESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCi0kKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQotRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiBcCi0kKFBPRklMRVMpICQoR01PRklMRVMpIFwKLSQoRElTVEZJTEVTLmV4dHJhMSkgJChESVNURklMRVMuZXh0cmEyKSAkKERJU1RGSUxFUy5leHRyYTMpCi0KLVBPVEZJTEVTID0gXAotCi1DQVRBTE9HUyA9IEBDQVRBTE9HU0AKLQotIyBNYWtldmFycyBnZXRzIGluc2VydGVkIGhlcmUuIChEb24ndCByZW1vdmUgdGhpcyBsaW5lISkKLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAucG8gLmdtbyAubW8gLnNlZCAuc2luIC5ub3AgLnBvLWNyZWF0ZSAucG8tdXBkYXRlCi0KLS5wby5tbzoKLQlAZWNobyAiJChNU0dGTVQpIC1jIC1vICRAICQ8IjsgXAotCSQoTVNHRk1UKSAtYyAtbyB0LSRAICQ8ICYmIG12IHQtJEAgJEAKLQotLnBvLmdtbzoKLQlAbGFuZz1gZWNobyAkKiB8IHNlZCAtZSAncywuKi8sLCdgOyBcCi0JdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCi0JZWNobyAiJCR7Y2RjbWR9cm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC1vICQke2xhbmd9LmdtbyAkJHtsYW5nfS5wbyI7IFwKLQljZCAkKHNyY2RpcikgJiYgcm0gLWYgJCR7bGFuZ30uZ21vICYmICQoR01TR0ZNVCkgLWMgLS1zdGF0aXN0aWNzIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbwotCi0uc2luLnNlZDoKLQlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKLQltdiB0LSRAICRACi0KLQotYWxsOiBjaGVjay1tYWNyby12ZXJzaW9uIGFsbC1AVVNFX05MU0AKLQotYWxsLXllczogc3RhbXAtcG8KLWFsbC1ubzoKLQotIyBFbnN1cmUgdGhhdCB0aGUgZ2V0dGV4dCBtYWNyb3MgYW5kIHRoaXMgTWFrZWZpbGUuaW4uaW4gYXJlIGluIHN5bmMuCi1jaGVjay1tYWNyby12ZXJzaW9uOgotCUB0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCi0JICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCi0JICAgICAgIGV4aXQgMTsgXAotCSAgICAgfQotCi0jICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubwotIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQotIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0Ci0jIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KLSMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCi0KLSMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQotIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKLSMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAotIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKLSMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQotIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgotIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKLSMgY2hhbmdlZC4KLXN0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAotCXRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCBcCi0JICB0ZXN0IC16ICIkKEdNT0ZJTEVTKSIgfHwgJChNQUtFKSAkKEdNT0ZJTEVTKQotCUB0ZXN0ICEgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgfHwgeyBcCi0JICBlY2hvICJ0b3VjaCBzdGFtcC1wbyIgJiYgXAotCSAgZWNobyB0aW1lc3RhbXAgPiBzdGFtcC1wb1QgJiYgXAotCSAgbXYgc3RhbXAtcG9UIHN0YW1wLXBvOyBcCi0JfQotCi0jIE5vdGU6IFRhcmdldCAnYWxsJyBtdXN0IG5vdCBkZXBlbmQgb24gdGFyZ2V0ICckKERPTUFJTikucG90LXVwZGF0ZScsCi0jIG90aGVyd2lzZSBwYWNrYWdlcyBsaWtlIEdDQyBjYW4gbm90IGJlIGJ1aWx0IGlmIG9ubHkgcGFydHMgb2YgdGhlIHNvdXJjZQotIyBoYXZlIGJlZW4gZG93bmxvYWRlZC4KLQotIyBUaGlzIHRhcmdldCByZWJ1aWxkcyAkKERPTUFJTikucG90OyBpdCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLgotIyBOb3RlIHRoYXQgJChET01BSU4pLnBvdCBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KLSQoRE9NQUlOKS5wb3QtdXBkYXRlOiAkKFBPVEZJTEVTKSAkKHNyY2RpcikvUE9URklMRVMuaW4gcmVtb3ZlLXBvdGNkYXRlLnNlZAotCWlmIExDX0FMTD1DIGdyZXAgJ0dOVSBAUEFDS0FHRUAnICQodG9wX3NyY2RpcikvKiAyPi9kZXYvbnVsbCB8IGdyZXAgLXYgJ2xpYnRvb2w6JyA+L2Rldi9udWxsOyB0aGVuIFwKLQkgIHBhY2thZ2VfZ251PSdHTlUgJzsgXAotCWVsc2UgXAotCSAgcGFja2FnZV9nbnU9Jyc7IFwKLQlmaTsgXAotCWlmIHRlc3QgLW4gJyQoTVNHSURfQlVHU19BRERSRVNTKScgfHwgdGVzdCAnJChQQUNLQUdFX0JVR1JFUE9SVCknID0gJ0AnUEFDS0FHRV9CVUdSRVBPUlQnQCc7IHRoZW4gXAotCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKE1TR0lEX0JVR1NfQUREUkVTUyknOyBcCi0JZWxzZSBcCi0JICBtc2dpZF9idWdzX2FkZHJlc3M9JyQoUEFDS0FHRV9CVUdSRVBPUlQpJzsgXAotCWZpOyBcCi0JY2FzZSBgJChYR0VUVEVYVCkgLS12ZXJzaW9uIHwgc2VkIDFxIHwgc2VkIC1lICdzLF5bXjAtOV0qLCwnYCBpbiBcCi0JICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC01XSB8IDAuMVswLTVdLiogfCAwLjE2IHwgMC4xNi5bMC0xXSopIFwKLQkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCi0JICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKLQkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKLQkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKLQkgICAgICAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iJCRtc2dpZF9idWdzX2FkZHJlc3MiIFwKLQkgICAgOzsgXAotCSAgKikgXAotCSAgICAkKFhHRVRURVhUKSAtLWRlZmF1bHQtZG9tYWluPSQoRE9NQUlOKSAtLWRpcmVjdG9yeT0kKHRvcF9zcmNkaXIpIFwKLQkgICAgICAtLWFkZC1jb21tZW50cz1UUkFOU0xBVE9SUzogJChYR0VUVEVYVF9PUFRJT05TKSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AgXAotCSAgICAgIC0tZmlsZXMtZnJvbT0kKHNyY2RpcikvUE9URklMRVMuaW4gXAotCSAgICAgIC0tY29weXJpZ2h0LWhvbGRlcj0nJChDT1BZUklHSFRfSE9MREVSKScgXAotCSAgICAgIC0tcGFja2FnZS1uYW1lPSIkJHtwYWNrYWdlX2dudX1AUEFDS0FHRUAiIFwKLQkgICAgICAtLXBhY2thZ2UtdmVyc2lvbj0nQFZFUlNJT05AJyBcCi0JICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCi0JICAgIDs7IFwKLQllc2FjCi0JdGVzdCAhIC1mICQoRE9NQUlOKS5wbyB8fCB7IFwKLQkgIGlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAotCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoc3JjZGlyKS8kKERPTUFJTikucG90ID4gJChET01BSU4pLjFwbyAmJiBcCi0JICAgIHNlZCAtZiByZW1vdmUtcG90Y2RhdGUuc2VkIDwgJChET01BSU4pLnBvID4gJChET01BSU4pLjJwbyAmJiBcCi0JICAgIGlmIGNtcCAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChET01BSU4pLnBvOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIHJtIC1mICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAkKHNyY2RpcikvJChET01BSU4pLnBvdCAmJiBcCi0JICAgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCi0JICAgIGZpOyBcCi0JICBlbHNlIFwKLQkgICAgbXYgJChET01BSU4pLnBvICQoc3JjZGlyKS8kKERPTUFJTikucG90OyBcCi0JICBmaTsgXAotCX0KLQotIyBUaGlzIHJ1bGUgaGFzIG5vIGRlcGVuZGVuY2llczogd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgJChET01BSU4pLnBvdCBhdAotIyBldmVyeSAibWFrZSIgaW52b2NhdGlvbiwgb25seSBjcmVhdGUgaXQgd2hlbiBpdCBpcyBtaXNzaW5nLgotIyBPbmx5ICJtYWtlICQoRE9NQUlOKS5wb3QtdXBkYXRlIiBvciAibWFrZSBkaXN0IiB3aWxsIGZvcmNlIGFuIHVwZGF0ZS4KLSQoc3JjZGlyKS8kKERPTUFJTikucG90OgotCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKLQotIyBUaGlzIHRhcmdldCByZWJ1aWxkcyBhIFBPIGZpbGUgaWYgJChET01BSU4pLnBvdCBoYXMgY2hhbmdlZC4KLSMgTm90ZSB0aGF0IGEgUE8gZmlsZSBpcyBub3QgdG91Y2hlZCBpZiBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KLSQoUE9GSUxFUyk6ICQoc3JjZGlyKS8kKERPTUFJTikucG90Ci0JQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MsLiovLCwnIC1lICdzL1wucG8kJC8vJ2A7IFwKLQlpZiB0ZXN0IC1mICIkKHNyY2RpcikvJCR7bGFuZ30ucG8iOyB0aGVuIFwKLQkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAotCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCi0JICBjZCAkKHNyY2RpcikgJiYgJChNU0dNRVJHRV9VUERBVEUpICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3Q7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCi0JZmkKLQotCi1pbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCi1pbnN0YWxsLWV4ZWM6Ci1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKLQlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCi0JICAkKG1rZGlyX3ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCi0JICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKLQkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKLQkgIGRvbmU7IFwKLQkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCi0JICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAotCSAgZG9uZTsgXAotCWVsc2UgXAotCSAgOiA7IFwKLQlmaQotaW5zdGFsbC1kYXRhLW5vOiBhbGwKLWluc3RhbGwtZGF0YS15ZXM6IGFsbAotCSQobWtkaXJfcCkgJChERVNURElSKSQoZGF0YWRpcikKLQlAY2F0YWxvZ3M9JyQoQ0FUQUxPR1MpJzsgXAotCWZvciBjYXQgaW4gJCRjYXRhbG9nczsgZG8gXAotCSAgY2F0PWBiYXNlbmFtZSAkJGNhdGA7IFwKLQkgIGxhbmc9YGVjaG8gJCRjYXQgfCBzZWQgLWUgJ3MvXC5nbW8kJC8vJ2A7IFwKLQkgIGRpcj0kKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTOyBcCi0JICAkKG1rZGlyX3ApICQoREVTVERJUikkJGRpcjsgXAotCSAgaWYgdGVzdCAtciAkJGNhdDsgdGhlbiByZWFsY2F0PSQkY2F0OyBlbHNlIHJlYWxjYXQ9JChzcmNkaXIpLyQkY2F0OyBmaTsgXAotCSAgJChJTlNUQUxMX0RBVEEpICQkcmVhbGNhdCAkKERFU1RESVIpJCRkaXIvJChET01BSU4pLm1vOyBcCi0JICBlY2hvICJpbnN0YWxsaW5nICQkcmVhbGNhdCBhcyAkKERFU1RESVIpJCRkaXIvJChET01BSU4pLm1vIjsgXAotCSAgZm9yIGxjIGluICcnICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCi0JICAgIGlmIHRlc3QgLW4gIiQkbGMiOyB0aGVuIFwKLQkgICAgICBpZiAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyAyPi9kZXYvbnVsbCkgfCBncmVwICcgLT4gJyA+L2Rldi9udWxsOyB0aGVuIFwKLQkgICAgICAgIGxpbms9YGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgfCBzZWQgLWUgJ3MvXi4qIC0+IC8vJ2A7IFwKLQkgICAgICAgIG12ICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKLQkgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZCAmJiBcCi0JICAgICAgICAgZm9yIGZpbGUgaW4gKjsgZG8gXAotCSAgICAgICAgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAotCSAgICAgICAgICAgICBsbiAtcyAuLi8kJGxpbmsvJCRmaWxlICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJCRmaWxlOyBcCi0JICAgICAgICAgICBmaTsgXAotCSAgICAgICAgIGRvbmUpOyBcCi0JICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAotCSAgICAgIGVsc2UgXAotCSAgICAgICAgaWYgdGVzdCAtZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyB0aGVuIFwKLQkgICAgICAgICAgOjsgXAotCSAgICAgICAgZWxzZSBcCi0JICAgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAotCSAgICAgICAgZmk7IFwKLQkgICAgICBmaTsgXAotCSAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCi0JICAgICAgbG4gLXMgLi4vTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vIDI+L2Rldi9udWxsIHx8IFwKLQkgICAgICBsbiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAotCSAgICAgIGNwIC1wICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbzsgXAotCSAgICAgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGxpbmsgYXMgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8iOyBcCi0JICAgIGZpOyBcCi0JICBkb25lOyBcCi0JZG9uZQotCi1pbnN0YWxsLXN0cmlwOiBpbnN0YWxsCi0KLWluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1leGVjIGluc3RhbGxkaXJzLWRhdGEKLWluc3RhbGxkaXJzLWV4ZWM6Ci1pbnN0YWxsZGlycy1kYXRhOiBpbnN0YWxsZGlycy1kYXRhLUBVU0VfTkxTQAotCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKLQkgICQobWtkaXJfcCkgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKLQllbHNlIFwKLQkgIDogOyBcCi0JZmkKLWluc3RhbGxkaXJzLWRhdGEtbm86Ci1pbnN0YWxsZGlycy1kYXRhLXllczoKLQkkKG1rZGlyX3ApICQoREVTVERJUikkKGRhdGFkaXIpCi0JQGNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKLQlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKLQkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCi0JICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCi0JICBkaXI9JChsb2NhbGVkaXIpLyQkbGFuZy9MQ19NRVNTQUdFUzsgXAotCSAgJChta2Rpcl9wKSAkKERFU1RESVIpJCRkaXI7IFwKLQkgIGZvciBsYyBpbiAnJyAkKEVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTKTsgZG8gXAotCSAgICBpZiB0ZXN0IC1uICIkJGxjIjsgdGhlbiBcCi0JICAgICAgaWYgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nICYmIExDX0FMTD1DIGxzIC1sIC1kICQkbGMgMj4vZGV2L251bGwpIHwgZ3JlcCAnIC0+ICcgPi9kZXYvbnVsbDsgdGhlbiBcCi0JICAgICAgICBsaW5rPWBjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIHwgc2VkIC1lICdzL14uKiAtPiAvLydgOyBcCi0JICAgICAgICBtdiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCi0JICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICAoY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQgJiYgXAotCSAgICAgICAgIGZvciBmaWxlIGluICo7IGRvIFwKLQkgICAgICAgICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKLQkgICAgICAgICAgICAgbG4gLXMgLi4vJCRsaW5rLyQkZmlsZSAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQkZmlsZTsgXAotCSAgICAgICAgICAgZmk7IFwKLQkgICAgICAgICBkb25lKTsgXAotCSAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy5vbGQ7IFwKLQkgICAgICBlbHNlIFwKLQkgICAgICAgIGlmIHRlc3QgLWQgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgdGhlbiBcCi0JICAgICAgICAgIDo7IFwKLQkgICAgICAgIGVsc2UgXAotCSAgICAgICAgICBybSAtZiAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCi0JICAgICAgICAgIG1rZGlyICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IFwKLQkgICAgICAgIGZpOyBcCi0JICAgICAgZmk7IFwKLQkgICAgZmk7IFwKLQkgIGRvbmU7IFwKLQlkb25lCi0KLSMgRGVmaW5lIHRoaXMgYXMgZW1wdHkgdW50aWwgSSBmb3VuZCBhIHVzZWZ1bCBhcHBsaWNhdGlvbi4KLWluc3RhbGxjaGVjazoKLQotdW5pbnN0YWxsOiB1bmluc3RhbGwtZXhlYyB1bmluc3RhbGwtZGF0YQotdW5pbnN0YWxsLWV4ZWM6Ci11bmluc3RhbGwtZGF0YTogdW5pbnN0YWxsLWRhdGEtQFVTRV9OTFNACi0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAotCSAgZm9yIGZpbGUgaW4gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycy50ZW1wbGF0ZTsgZG8gXAotCSAgICBybSAtZiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKLQkgIGRvbmU7IFwKLQllbHNlIFwKLQkgIDogOyBcCi0JZmkKLXVuaW5zdGFsbC1kYXRhLW5vOgotdW5pbnN0YWxsLWRhdGEteWVzOgotCWNhdGFsb2dzPSckKENBVEFMT0dTKSc7IFwKLQlmb3IgY2F0IGluICQkY2F0YWxvZ3M7IGRvIFwKLQkgIGNhdD1gYmFzZW5hbWUgJCRjYXRgOyBcCi0JICBsYW5nPWBlY2hvICQkY2F0IHwgc2VkIC1lICdzL1wuZ21vJCQvLydgOyBcCi0JICBmb3IgbGMgaW4gTENfTUVTU0FHRVMgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKLQkgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKLQkgIGRvbmU7IFwKLQlkb25lCi0KLWNoZWNrOiBhbGwKLQotaW5mbyBkdmkgcHMgcGRmIGh0bWwgdGFncyBUQUdTIGN0YWdzIENUQUdTIElEOgotCi1tb3N0bHljbGVhbjoKLQlybSAtZiByZW1vdmUtcG90Y2RhdGUuc2VkCi0Jcm0gLWYgc3RhbXAtcG9UCi0Jcm0gLWYgY29yZSBjb3JlLiogJChET01BSU4pLnBvICQoRE9NQUlOKS4xcG8gJChET01BSU4pLjJwbyAqLm5ldy5wbwotCXJtIC1mciAqLm8KLQotY2xlYW46IG1vc3RseWNsZWFuCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiBNYWtlZmlsZSBNYWtlZmlsZS5pbiBQT1RGSUxFUyAqLm1vCi0KLW1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotCXJtIC1mIHN0YW1wLXBvICQoR01PRklMRVMpCi0KLWRpc3RkaXIgPSAkKHRvcF9idWlsZGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pLyQoc3ViZGlyKQotZGlzdCBkaXN0ZGlyOgotCSQoTUFLRSkgdXBkYXRlLXBvCi0JQCQoTUFLRSkgZGlzdDIKLSMgVGhpcyBpcyBhIHNlcGFyYXRlIHRhcmdldCBiZWNhdXNlICd1cGRhdGUtcG8nIG11c3QgYmUgZXhlY3V0ZWQgYmVmb3JlLgotZGlzdDI6IHN0YW1wLXBvICQoRElTVEZJTEVTKQotCWRpc3RzPSIkKERJU1RGSUxFUykiOyBcCi0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAotCSAgZGlzdHM9IiQkZGlzdHMgTWFrZXZhcnMudGVtcGxhdGUiOyBcCi0JZmk7IFwKLQlpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKLQkgIGRpc3RzPSIkJGRpc3RzICQoRE9NQUlOKS5wb3Qgc3RhbXAtcG8iOyBcCi0JZmk7IFwKLQlpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2c7IHRoZW4gXAotCSAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nIjsgXAotCWZpOyBcCi0JZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gXAotCSAgaWYgdGVzdCAtZiAkKHNyY2RpcikvQ2hhbmdlTG9nLiQkaTsgdGhlbiBcCi0JICAgIGRpc3RzPSIkJGRpc3RzIENoYW5nZUxvZy4kJGkiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0IC1mICQoc3JjZGlyKS9MSU5HVUFTOyB0aGVuIGRpc3RzPSIkJGRpc3RzIExJTkdVQVMiOyBmaTsgXAotCWZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKLQkgICAgY3AgLXAgJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi0KLXVwZGF0ZS1wbzogTWFrZWZpbGUKLQkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCi0JdGVzdCAteiAiJChVUERBVEVQT0ZJTEVTKSIgfHwgJChNQUtFKSAkKFVQREFURVBPRklMRVMpCi0JJChNQUtFKSB1cGRhdGUtZ21vCi0KLSMgR2VuZXJhbCBydWxlIGZvciBjcmVhdGluZyBQTyBmaWxlcy4KLQotLm5vcC5wby1jcmVhdGU6Ci0JQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby1jcmVhdGUkJC8vJ2A7IFwKLQllY2hvICJGaWxlICQkbGFuZy5wbyBkb2VzIG5vdCBleGlzdC4gSWYgeW91IGFyZSBhIHRyYW5zbGF0b3IsIHlvdSBjYW4gY3JlYXRlIGl0IHRocm91Z2ggJ21zZ2luaXQnLiIgMT4mMjsgXAotCWV4aXQgMQotCi0jIEdlbmVyYWwgcnVsZSBmb3IgdXBkYXRpbmcgUE8gZmlsZXMuCi0KLS5ub3AucG8tdXBkYXRlOgotCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzL1wucG8tdXBkYXRlJCQvLydgOyBcCi0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBmaTsgXAotCXRtcGRpcj1gcHdkYDsgXAotCWVjaG8gIiQkbGFuZzoiOyBcCi0JdGVzdCAiJChzcmNkaXIpIiA9IC4gJiYgY2RjbWQ9IiIgfHwgY2RjbWQ9ImNkICQoc3JjZGlyKSAmJiAiOyBcCi0JZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRSkgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKLQljZCAkKHNyY2Rpcik7IFwKLQlpZiAkKE1TR01FUkdFKSAkJGxhbmcucG8gJChET01BSU4pLnBvdCAtbyAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKLQkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCi0JICBlbHNlIFwKLQkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAotCSAgICAgIDo7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCi0JICAgICAgZXhpdCAxOyBcCi0JICAgIGZpOyBcCi0JICBmaTsgXAotCWVsc2UgXAotCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCi0JICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCi0JZmkKLQotJChEVU1NWVBPRklMRVMpOgotCi11cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQotCUA6Ci0KLU1ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiBNYWtldmFycyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACi0JY2QgJCh0b3BfYnVpbGRkaXIpIFwKLQkgICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAuaW4gcG8tZGlyZWN0b3JpZXMKLQotZm9yY2U6Ci0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSBub3QgdG8gZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3BvL01ha2V2YXJzIGIvcG8vTWFrZXZhcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NmZkZTMuLjAwMDAwMDAKLS0tIGEvcG8vTWFrZXZhcnMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgotCi0jIFVzdWFsbHkgdGhlIG1lc3NhZ2UgZG9tYWluIGlzIHRoZSBzYW1lIGFzIHRoZSBwYWNrYWdlIG5hbWUuCi1ET01BSU4gPSBnc3QtcGx1Z2lucy1nb29kLTEuMAotCi0jIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KLXN1YmRpciA9IHBvCi10b3BfYnVpbGRkaXIgPSAuLgotCi0jIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KLVhHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KLQotIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCi0jICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZwotIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKLSMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQotIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KLSMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKLSMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCi0jIHRoZWlyIGNvcHlyaWdodC4KLUNPUFlSSUdIVF9IT0xERVIgPQotCi0jIFRoaXMgaXMgdGhlIGVtYWlsIGFkZHJlc3Mgb3IgVVJMIHRvIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBzaGFsbCByZXBvcnQKLSMgYnVncyBpbiB0aGUgdW50cmFuc2xhdGVkIHN0cmluZ3M6Ci0jIC0gU3RyaW5ncyB3aGljaCBhcmUgbm90IGVudGlyZSBzZW50ZW5jZXMsIHNlZSB0aGUgbWFpbnRhaW5lciBndWlkZWxpbmVzCi0jICAgaW4gdGhlIEdOVSBnZXR0ZXh0IGRvY3VtZW50YXRpb24sIHNlY3Rpb24gJ1ByZXBhcmluZyBTdHJpbmdzJy4KLSMgLSBTdHJpbmdzIHdoaWNoIHVzZSB1bmNsZWFyIHRlcm1zIG9yIHJlcXVpcmUgYWRkaXRpb25hbCBjb250ZXh0IHRvIGJlCi0jICAgdW5kZXJzdG9vZC4KLSMgLSBTdHJpbmdzIHdoaWNoIG1ha2UgaW52YWxpZCBhc3N1bXB0aW9ucyBhYm91dCBub3RhdGlvbiBvZiBkYXRlLCB0aW1lIG9yCi0jICAgbW9uZXkuCi0jIC0gUGx1cmFsaXNhdGlvbiBwcm9ibGVtcy4KLSMgLSBJbmNvcnJlY3QgRW5nbGlzaCBzcGVsbGluZy4KLSMgLSBJbmNvcnJlY3QgZm9ybWF0dGluZy4KLSMgSXQgY2FuIGJlIHlvdXIgZW1haWwgYWRkcmVzcywgb3IgYSBtYWlsaW5nIGxpc3QgYWRkcmVzcyB3aGVyZSB0cmFuc2xhdG9ycwotIyBjYW4gd3JpdGUgdG8gd2l0aG91dCBiZWluZyBzdWJzY3JpYmVkLCBvciB0aGUgVVJMIG9mIGEgd2ViIHBhZ2UgdGhyb3VnaAotIyB3aGljaCB0aGUgdHJhbnNsYXRvcnMgY2FuIGNvbnRhY3QgeW91LgotTVNHSURfQlVHU19BRERSRVNTID0gaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy8KLQotIyBUaGlzIGlzIHRoZSBsaXN0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLCBiZXlvbmQgTENfTUVTU0FHRVMsIGZvciB3aGljaCB0aGUKLSMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KLUVYVFJBX0xPQ0FMRV9DQVRFR09SSUVTID0KLQotIyBBdm9pZCBsaW5lIG51bWJlcnMgaW4gKi5wbywgYnV0IGtlZXAgdGhlbSBpbiAqLnBvdC4KLU1TR01FUkdFID0gbXNnbWVyZ2UgLS1uby1sb2NhdGlvbgotTVNHTUVSR0VfVVBEQVRFID0gbXNnbWVyZ2UgLS1uby1sb2NhdGlvbiAtLXVwZGF0ZSAtLWJhY2t1cD1vZmYKLU1TR0ZJTFRFUiA9IG1zZ2ZpbHRlciAtLW5vLWxvY2F0aW9uCmRpZmYgLS1naXQgYS9wby9QT1RGSUxFUy5pbiBiL3BvL1BPVEZJTEVTLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDc4NmU2Li4wMDAwMDAwCi0tLSBhL3BvL1BPVEZJTEVTLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotZXh0L2ZsYWMvZ3N0ZmxhY2RlYy5jCi1leHQvamFjay9nc3RqYWNrYXVkaW9zaW5rLmMKLWV4dC9qYWNrL2dzdGphY2thdWRpb3NyYy5jCi1leHQvanBlZy9nc3RqcGVnZGVjLmMKLWV4dC9saWJwbmcvZ3N0cG5nZGVjLmMKLWV4dC9wdWxzZS9wdWxzZXNpbmsuYwotZXh0L3Nob3V0Mi9nc3RzaG91dDIuYwotZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYwotZ3N0L2F1ZGlvcGFyc2Vycy9nc3R3YXZwYWNrcGFyc2UuYwotZ3N0L2F2aS9nc3RhdmlkZW11eC5jCi1nc3QvYXZpL2dzdGF2aW11eC5jCi1nc3QvaXNvbXA0L3F0ZGVtdXguYwotZ3N0L211bHRpZmlsZS9nc3RzcGxpdG11eHNyYy5jCi1nc3QvcnRzcC9nc3RydHNwc3JjLmMKLWdzdC93YXZwYXJzZS9nc3R3YXZwYXJzZS5jCi1zeXMvb3NzNC9vc3M0LXNpbmsuYwotc3lzL29zczQvb3NzNC1zb3VyY2UuYwotc3lzL29zcy9nc3Rvc3NzaW5rLmMKLXN5cy9vc3MvZ3N0b3Nzc3JjLmMKLXN5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYwotc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmMKLXN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYwotc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuYwotc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCi1zeXMvdjRsMi9nc3R2NGwycmFkaW8uYwotc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYwotc3lzL3Y0bDIvZ3N0djRsMnNyYy5jCi1zeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmMKLXN5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jCi1zeXMvdjRsMi92NGwyX2NhbGxzLmMKLXN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmMKZGlmZiAtLWdpdCBhL3BvL1J1bGVzLXF1b3QgYi9wby9SdWxlcy1xdW90CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJhOTk1Li4wMDAwMDAwCi0tLSBhL3BvL1J1bGVzLXF1b3QKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jIFNwZWNpYWwgTWFrZWZpbGUgcnVsZXMgZm9yIEVuZ2xpc2ggbWVzc2FnZSBjYXRhbG9ncyB3aXRoIHF1b3RhdGlvbiBtYXJrcy4KLQotRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKLQotLlNVRkZJWEVTOiAuaW5zZXJ0LWhlYWRlciAucG8tdXBkYXRlLWVuCi0KLWVuQHF1b3QucG8tY3JlYXRlOgotCSQoTUFLRSkgZW5AcXVvdC5wby11cGRhdGUKLWVuQGJvbGRxdW90LnBvLWNyZWF0ZToKLQkkKE1BS0UpIGVuQGJvbGRxdW90LnBvLXVwZGF0ZQotCi1lbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KLWVuQGJvbGRxdW90LnBvLXVwZGF0ZTogZW5AYm9sZHF1b3QucG8tdXBkYXRlLWVuCi0KLS5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKLQlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLXVwZGF0ZS1lbiQkLy8nYDsgXAotCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFBBVEg9YHB3ZGAvLi4vc3JjOiQkUEFUSDsgR0VUVEVYVExJQkRJUj1gY2QgJCh0b3Bfc3JjZGlyKS9zcmMgJiYgcHdkYDsgZXhwb3J0IEdFVFRFWFRMSUJESVI7IGZpOyBcCi0JdG1wZGlyPWBwd2RgOyBcCi0JZWNobyAiJCRsYW5nOiI7IFwKLQlsbD1gZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvQC4qLy8nYDsgXAotCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCi0JY2QgJChzcmNkaXIpOyBcCi0JaWYgJChNU0dJTklUKSAtaSAkKERPTUFJTikucG90IC0tbm8tdHJhbnNsYXRvciAtbCAkJGxsIC1vIC0gMj4vZGV2L251bGwgfCBzZWQgLWYgJCR0bXBkaXIvJCRsYW5nLmluc2VydC1oZWFkZXIgfCAkKE1TR0NPTlYpIC10IFVURi04IHwgJChNU0dGSUxURVIpIHNlZCAtZiBgZWNobyAkJGxhbmcgfCBzZWQgLWUgJ3MvLipALy8nYC5zZWQgMj4vZGV2L251bGwgPiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyB0aGVuIFwKLQkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCi0JICBlbHNlIFwKLQkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAotCSAgICAgIDo7IFwKLQkgICAgZWxzZSBcCi0JICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKLQkgICAgICBleGl0IDE7IFwKLQkgICAgZmk7IFwKLQkgIGZpOyBcCi0JZWxzZSBcCi0JICBlY2hvICJjcmVhdGlvbiBvZiAkJGxhbmcucG8gZmFpbGVkISIgMT4mMjsgXAotCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAotCWZpCi0KLWVuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KLQlzZWQgLWUgJy9eIy9kJyAtZSAncy9IRUFERVIvZW5AcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AcXVvdC5pbnNlcnQtaGVhZGVyCi0KLWVuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCi0Jc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQGJvbGRxdW90LmhlYWRlci9nJyAkKHNyY2RpcikvaW5zZXJ0LWhlYWRlci5zaW4gPiBlbkBib2xkcXVvdC5pbnNlcnQtaGVhZGVyCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90Ci1tb3N0bHljbGVhbi1xdW90OgotCXJtIC1mICouaW5zZXJ0LWhlYWRlcgpkaWZmIC0tZ2l0IGEvcG8vYWYuZ21vIGIvcG8vYWYuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjEzZjY4Li4wMDAwMDAwCi0tLSBhL3BvL2FmLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2FmLnBvIGIvcG8vYWYucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MmE4MTkuLjAwMDAwMDAKLS0tIGEvcG8vYWYucG8KKysrIC9kZXYvbnVsbApAQCAtMSw2MjEgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBvZiBnc3RyZWFtZXIgcGx1Z2luIG1lc3NhZ2VzIHRvIEFmcmlrYWFucy4gCi0jIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgUGV0cmkgSm9vc3RlIDxya3dqcGpAcHVrLmFjLnphPiwgMjAwNC4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zIDAuNy42XG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDMtMTggMTQ6MTYrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogUGV0cmkgSm9vc3RlIDxya3dqcGpAcHVrLmFjLnphPlxuIgotIkxhbmd1YWdlLVRlYW06IEFmcmlrYWFucyA8aTE4bkBhZi5vcmcuemE+XG4iCi0iTGFuZ3VhZ2U6IGFmXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJLb24gbmllIGJlaGVlcnRvZXN0ZWwgXCIlc1wiIHRvZW1hYWsgbmllLiIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiS29uIG5pZSBiZWhlZXJ0b2VzdGVsIFwiJXNcIiB0b2VtYWFrIG5pZS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIktvbiBuaWUgYmVoZWVydG9lc3RlbCBcIiVzXCIgdG9lbWFhayBuaWUuIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIkdlZW4gb2Ygb25nZWxkaWdlIGtsYW5rdG9ldm9lciwgQVZJLXN0cm9vbSBzYWwga29ycnVwIHdlZXMuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJLb24gbmllIG91ZGlvLXRvZXN0ZWwgXCIlc1wiIG9vcG1hYWsgdmlyIHNrcnlmIG5pZS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiS29uIG5pZSBDRC10b2VzdGVsIG9vcG1hYWsgb20gdGUgbGVlcyBuaWUuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIk5lZW0gb3AiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTHluLWluIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9sdW1lIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotIywgZnV6enkKLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICJMdWlkc3ByZWtlciIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS29uIG5pZSBidWZmZXJzIHZhbmFmIHRvZXN0ZWwgXCIlc1wiIHZlcmtyeSBuaWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJLb24gbmllIGJ1ZmZlcnMgdmFuYWYgdG9lc3RlbCBcIiVzXCIgdmVya3J5IG5pZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiVG9lc3RlbCBcIiVzXCIgaXMgbmllICduIHZhc2xlZ2dpbmd0b2VzdGVsIG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJUb2VzdGVsIFwiJXNcIiBpcyBuaWUgJ24gdmFzbGVnZ2luZ3RvZXN0ZWwgbmllLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIlRvZXN0ZWwgXCIlc1wiIGlzIG5pZSAnbiB2YXNsZWdnaW5ndG9lc3RlbCBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJUb2VzdGVsIFwiJXNcIiBpcyBuaWUgJ24gdmFzbGVnZ2luZ3RvZXN0ZWwgbmllLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJLb24gbmllIGJ1ZmZlcnMgdmFuYWYgdG9lc3RlbCBcIiVzXCIgdmVya3J5IG5pZS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJLb24gbmllIGdlbm9lZyBidWZmZXJzIHZhbmFmIHRvZXN0ZWwgXCIlc1wiIGtyeSBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJLb24gbmllIGJ1ZmZlcnMgdmFuYWYgdG9lc3RlbCBcIiVzXCIgdmVya3J5IG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiVG9lc3RlbCBcIiVzXCIgaXMgbmllICduIHZhc2xlZ2dpbmd0b2VzdGVsIG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiS29uIG5pZSBvdWRpby10b2VzdGVsIFwiJXNcIiB0b2VtYWFrIG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiS29uIG5pZSBvdWRpby10b2VzdGVsIFwiJXNcIiB0b2VtYWFrIG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJLb24gbmllIGJ1ZmZlcnMgdmFuYWYgdG9lc3RlbCBcIiVzXCIgdmVya3J5IG5pZS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS29uIG5pZSBnZW5vZWcgYnVmZmVycyB2YW5hZiB0b2VzdGVsIFwiJXNcIiBrcnkgbmllLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJLb24gbmllIHNrcnlmIG5hIHRvZXN0ZWwgXCIlc1wiIG5pZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIktvbiBuaWUgdG9lc3RlbCBcIiVzXCIgb29wbWFhayB2aXIgbGVlcyBlbiBza3J5ZiBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIlRvZXN0ZWwgXCIlc1wiIGlzIG5pZSAnbiB2YXNsZWdnaW5ndG9lc3RlbCBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiVG9lc3RlbCBcIiVzXCIgaXMgbmllICduIHZhc2xlZ2dpbmd0b2VzdGVsIG5pZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJUb2VzdGVsIFwiJXNcIiBpcyBuaWUgJ24gdmFzbGVnZ2luZ3RvZXN0ZWwgbmllLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIktvbiBuaWUgdG9lc3RlbCBcIiVzXCIgb29wbWFhayB2aXIgbGVlcyBlbiBza3J5ZiBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS29uIG5pZSBidWZmZXJzIHZhbmFmIHRvZXN0ZWwgXCIlc1wiIHZlcmtyeSBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIktvbiBuaWUgZ2Vub2VnIGJ1ZmZlcnMgdmFuYWYgdG9lc3RlbCBcIiVzXCIga3J5IG5pZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIktvbiBuaWUgYmVoZWVydG9lc3RlbCBcIiVzXCIgdG9lbWFhayBuaWUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS29uIG5pZSBiZWhlZXJ0b2VzdGVsIFwiJXNcIiB0b2VtYWFrIG5pZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiS29uIG5pZSBnZW5vZWcgYnVmZmVycyB2YW5hZiB0b2VzdGVsIFwiJXNcIiBrcnkgbmllLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiS29uIG5pZSBvdWRpby10b2VzdGVsIFwiJXNcIiB0b2VtYWFrIG5pZS4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIlRvZXN0ZWwgXCIlc1wiIGlzIG5pZSAnbiB2YXNsZWdnaW5ndG9lc3RlbCBuaWUuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiS29uIG5pZSBnZW5vZWcgYnVmZmVycyB2YW5hZiB0b2VzdGVsIFwiJXNcIiBrcnkgbmllLiIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhcyIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAiVHJlYmxlIgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlNpbnRldGlzZWVyZGVyIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJMdWlkc3ByZWtlciIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkx5bi1pbiIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNZW5nZXIiCi0KLSN+IG1zZ2lkICJQQ00tMiIKLSN+IG1zZ3N0ciAiUENNLTIiCi0KLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIk5lZW0gb3AiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJJbi12ZXJzdGVya2luZyIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJVaXQtdmVyc3RlcmtpbmciCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIkx5bi0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMeW4tMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTHluLTMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIkRpZ2l0YWFsLTEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpZ2l0YWFsLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIkRpZ2l0YWFsLTMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAiVGVsZWZvb24taW4iCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIlRlbGVmb29uLXVpdCIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSYWRpbyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJLb24gbmllIG91ZGlvLXRvZXN0ZWwgXCIlc1wiIG9vcG1hYWsgdmlyIHNrcnlmIG5pZS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAiTmVlbSBvcCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJWaWRlbyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIk5lZW0gb3AiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIlVpdC12ZXJzdGVya2luZyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIk1vbml0b3IiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIkx1aWRzcHJla2VyIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIkRpZ2l0YWFsLTEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAiRGlnaXRhYWwtMSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJNaWtyb2Zvb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIktvbiBuaWUgYnVmZmVycyB2YW5hZiB0b2VzdGVsIFwiJXNcIiB2ZXJrcnkgbmllLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiS29uIG5pZSBsw6plciBcIiVzXCIgb29wbWFhayBvbSBpbiB0ZSBza3J5ZiBuaWUuIgotCi0jfiBtc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIkZvdXQgdHlkZW5zIHRvZW1hYWsgdmFuIGzDqmVyIFwiJXNcIi4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIktvbiBuaWUgbMOqZXIgXCIlc1wiIG9vcG1hYWsgb20gdGUgbGVlcyBuaWUuIgotCi0jfiBtc2dpZCAiTm8gZmlsZW5hbWUgc3BlY2lmaWVkLiIKLSN+IG1zZ3N0ciAiR2VlbiBsw6plcm5hYW0gZ2VzcGVzaWZpc2Vlci4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIuIgotI34gbXNnc3RyICJLb24gbmllIHNrcnlmIG5hIGzDqmVyIFwiJXNcIiBuaWUuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gY29udHJvbCBkZXZpY2UgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiS29uIG5pZSBiZWhlZXJ0b2VzdGVsIFwiJXNcIiBvb3BtYWFrIHZpciBza3J5ZiBuaWUuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBhdWRpbyBkZXZpY2UgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiS29uIG5pZSBvdWRpby10b2VzdGVsIFwiJXNcIiBrb25maWd1cmVlciBuaWUuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHNldCBhdWRpbyBkZXZpY2UgXCIlc1wiIHRvICVkIEh6LiIKLSN+IG1zZ3N0ciAiS29uIG5pZSBrbGFua3RvZXN0ZWwgXCIlc1wiIHZlcnN0ZWwgbmEgJWQgSHogbmllLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZpZGVvIGRldmljZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotI34gbXNnc3RyICJLb24gbmllIHZpZGVvLXRvZXN0ZWwgXCIlc1wiIG9vcG1hYWsgdmlyIHNrcnlmIG5pZS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgY2xvc2UgdmlkZW8gZGV2aWNlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIktvbiBuaWUgdmlkZW8tdG9lc3RlbCBcIiVzXCIgdG9lbWFhayBuaWUuIgotCi0jfiBtc2dpZCAiT1NTIGRldmljZSBcIiVzXCIgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBwcm9ncmFtLiIKLSN+IG1zZ3N0ciAiT1NTLXRvZXN0ZWwgXCIlc1wiIGlzIHJlZWRzIGluIGdlYnJ1aWsgZGV1ciAnbiBhbmRlciBwcm9ncmFtLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3MgZGV2aWNlIFwiJXNcIiwgY2hlY2sgaXRzIHBlcm1pc3Npb25zLiIKLSN+IG1zZ3N0ciAiS29uIG5pZSB0b2VnYW5nIGtyeSB0b3QgdG9lc3RlbCBcIiVzXCIgbmllLCBreWsgbmEgdG9lZ2FuZ3NyZWd0ZS4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgXCIlc1wiIGRvZXMgbm90IGV4aXN0LiIKLSN+IG1zZ3N0ciAiVG9lc3RlbCBcIiVzXCIgYmVzdGFhbiBuaWUuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIktvbiBuaWUgdG9lc3RlbCBcIiVzXCIgb29wbWFhayB2aXIgc2tyeWYgbmllLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotI34gbXNnc3RyICJLb24gbmllIHRvZXN0ZWwgXCIlc1wiIG9vcG1hYWsgdmlyIGxlZXMgbmllLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZmcyBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIktvbiBuaWUgdmZzLWzDqmVyIFwiJXNcIiBvb3BtYWFrIHZpciBsZWVzIG5pZS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTm8gZmlsZW5hbWUgZ2l2ZW4uIgotI34gbXNnc3RyICJHZWVuIGzDqmVybmFhbSBnZXNwZXNpZmlzZWVyLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiB2ZnMgZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmc6ICVzLiIKLSN+IG1zZ3N0ciAiS29uIG5pZSB2ZnMtbMOqZXIgXCIlc1wiIG9vcG1hYWsgdmlyIHNrcnlmIG5pZS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTm8gZmlsZW5hbWUgZ2l2ZW4iCi0jfiBtc2dzdHIgIkdlZW4gbMOqZXJuYWFtIGdlc3Blc2lmaXNlZXIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNsb3NlIHZmcyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIktvbiBuaWUgdmZzLWzDqmVyIFwiJXNcIiB0b2VtYWFrIG5pZS4iCi0KLSN+IG1zZ2lkICJObyBkZXZpY2Ugc3BlY2lmaWVkLiIKLSN+IG1zZ3N0ciAiR2VlbiB0b2VzdGVsIGdlc3Blc2lmaXNlZXIiCi0KLSN+IG1zZ2lkICJEZXZpY2UgaXMgbm90IG9wZW4uIgotI34gbXNnc3RyICJUb2VzdGVsIGlzIG5pZSBvb3AgbmllLiIKLQotI34gbXNnaWQgIkRldmljZSBpcyBvcGVuLiIKLSN+IG1zZ3N0ciAiVG9lc3RlbCBpcyBvb3AuIgpkaWZmIC0tZ2l0IGEvcG8vYXouZ21vIGIvcG8vYXouZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGRjZjM4Li4wMDAwMDAwCi0tLSBhL3BvL2F6LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2F6LnBvIGIvcG8vYXoucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZDM5YjMuLjAwMDAwMDAKLS0tIGEvcG8vYXoucG8KKysrIC9kZXYvbnVsbApAQCAtMSw2MjIgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBvZiAnZ3N0LXBsdWdpbnMnIG1lc3NhZ2VzIHRvIEF6ZXJiYWlqYW5pLgotIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jIE3JmXRpbiDGj21pcm92IDxtZXRpbkBrYXJlZ2VuLmNvbT4sIDIwMDQuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy0wLjguMFxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTAzLTE5IDE4OjI5KzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IE1ldGluIEFtaXJvZmYgPG1ldGluQGthcmVnZW4uY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IEF6ZXJiYWlqYW5pIDx0cmFuc2xhdGlvbi10ZWFtLWF6QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogYXpcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMC4yXG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJcIiVzXCIgaWRhcsmZIGF2YWRhbmzEscSfxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJcIiVzXCIgaWRhcsmZIGF2YWRhbmzEscSfxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJcIiVzXCIgaWRhcsmZIGF2YWRhbmzEscSfxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIlPJmWh2IHlhIGRhIG9sbWF5YW4gYXVkaW8gZ2lyacWfaSwgQVZJIHlhecSxbcSxIHBvenVsYWNhcWTEsXIuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJcIiVzXCIgYXVkaW8gYXZhZGFubMSxxJ/EsSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkNEIGF2YWRhbmzEscSfxLEgb3h1bWEgw7zDp8O8biBhw6fEsWxhIGJpbG3JmWRpLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJRZXlkIgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAiTWlrcm9mb24iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiWMmZdGQtZ2lyacWfIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiU8mZcyIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk1vbml0b3IiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiU3Bpa2VyIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsW5kYW4gYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsW5kYW4gYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIGNhcHR1cmUgYXZhZGFubMSxxJ/EsSBkZXlpbC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsSBjYXB0dXJlIGF2YWRhbmzEscSfxLEgZGV5aWwuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLEgY2FwdHVyZSBhdmFkYW5sxLHEn8SxIGRleWlsLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLEgY2FwdHVyZSBhdmFkYW5sxLHEn8SxIGRleWlsLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsW5kYW4gYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLFuZGFuIGtpZmF5yZl0IHHJmWTJmXIgYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsW5kYW4gYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIGNhcHR1cmUgYXZhZGFubMSxxJ/EsSBkZXlpbC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiXCIlc1wiIGF1ZGlvIGF2YWRhbmzEscSfxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIlwiJXNcIiBhdWRpbyBhdmFkYW5sxLHEn8SxIGJhxJ9sYW5hIGJpbG3JmWRpLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxbmRhbiBidWZmZXJsyZlyIGFsxLFuYSBiaWxtyZlkaS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLFuZGFuIGtpZmF5yZl0IHHJmWTJmXIgYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxbmEgeWF6xLFsYSBiaWxtyZlkaS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIG94dW1hIHbJmSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIGNhcHR1cmUgYXZhZGFubMSxxJ/EsSBkZXlpbC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsSBjYXB0dXJlIGF2YWRhbmzEscSfxLEgZGV5aWwuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLEgY2FwdHVyZSBhdmFkYW5sxLHEn8SxIGRleWlsLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIG94dW1hIHbJmSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLFuZGFuIGJ1ZmZlcmzJmXIgYWzEsW5hIGJpbG3JmWRpLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsW5kYW4ga2lmYXnJmXQgccmZZMmZciBidWZmZXJsyZlyIGFsxLFuYSBiaWxtyZlkaS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlwiJXNcIiBpZGFyyZkgYXZhZGFubMSxxJ/EsSBiYcSfbGFuYSBiaWxtyZlkaS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIgaWRhcsmZIGF2YWRhbmzEscSfxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxbmRhbiBraWZhecmZdCBxyZlkyZlyIGJ1ZmZlcmzJmXIgYWzEsW5hIGJpbG3JmWRpLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiXCIlc1wiIGF1ZGlvIGF2YWRhbmzEscSfxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJcIiVzXCIgYXZhZGFubMSxxJ/EsSBjYXB0dXJlIGF2YWRhbmzEscSfxLEgZGV5aWwuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLFuZGFuIGtpZmF5yZl0IHHJmWTJmXIgYnVmZmVybMmZciBhbMSxbmEgYmlsbcmZZGkuIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiQmFzIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICLEsG5jyZkiCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAiU2ludCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiU3Bpa2VyIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAiWMmZdGQtZ2lyacWfIgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgIkNEIgotCi0jfiBtc2dpZCAiTWl4ZXIiCi0jfiBtc2dzdHIgIk1pa3NlciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiUWV5ZCIKLQotI34gbXNnaWQgIkluLWdhaW4iCi0jfiBtc2dzdHIgIkdpcmnFny1nYWluIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIsOHxLF4xLHFny1nYWluIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJYyZl0ZC0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJYyZl0ZC0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJYyZl0ZC0zIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaWppdGFsLTEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpaml0YWwtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlqaXRhbC0zIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIlRlbGVmb24tZ2lyacWfaSIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiVGVsZWZvbi3Dp8SxeMSxxZ/EsSIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSYWRpbyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJcIiVzXCIgYXVkaW8gYXZhZGFubMSxxJ/EsSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIlFleWQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICJRZXlkIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICLDh8SxeMSxxZ8tZ2FpbiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJNaWtyb2ZvbiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTW9uaXRvciIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJTcGlrZXIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIk1pa3JvZm9uIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb24iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICJNaWtyb2ZvbiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAiRGlqaXRhbC0xIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkRpaml0YWwtMSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJNaWtyb2ZvbiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLFuZGFuIGJ1ZmZlcmzJmXIgYWzEsW5hIGJpbG3JmWRpLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGZheWzEsSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi0jfiBtc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIlwiJXNcIiBmYXlsxLEgYmHEn2xhbmEgYmlsbcmZZGkuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotI34gbXNnc3RyICJcIiVzXCIgZmF5bMSxIG94dW1hIMO8w6fDvG4gYcOnxLFsYSBiaWxtyZlkaS4iCi0KLSN+IG1zZ2lkICJObyBmaWxlbmFtZSBzcGVjaWZpZWQuIgotI34gbXNnc3RyICJGYXlsIGFkxLEgdmVyaWxtyZl5aWIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGZheWzEsW5hIHlhesSxbGEgYmlsbcmZZGkuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gY29udHJvbCBkZXZpY2UgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGlkYXLJmSBhdmFkYW5sxLHEn8SxIHlhem1hIMO8w6fDvG4gYcOnxLFsYSBiaWxtyZlkaS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIGF1ZGlvIGRldmljZSBcIiVzXCIuIgotI34gbXNnc3RyICJcIiVzXCIgYXVkaW8gYXZhZGFubMSxxJ/EsSBxdXJhxZ9kxLFyxLFsYSBiaWxtyZlkaS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgc2V0IGF1ZGlvIGRldmljZSBcIiVzXCIgdG8gJWQgSHouIgotI34gbXNnc3RyICJcIiVzXCIgYXVkaW8gYXZhZGFubMSxxJ/EsSAlZCBIei3JmSBrZcOnaXJpbMmZIGJpbG3JmWRpLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZpZGVvIGRldmljZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotI34gbXNnc3RyICJcIiVzXCIgdmlkZW8gYXZhZGFubMSxxJ/EsSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNsb3NlIHZpZGVvIGRldmljZSBcIiVzXCIuIgotI34gbXNnc3RyICJcIiVzXCIgdmlkZW8gYXZhZGFubMSxxJ/EsSBiYcSfbGFuYSBiaWxtyZlkaS4iCi0KLSN+IG1zZ2lkICJPU1MgZGV2aWNlIFwiJXNcIiBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHByb2dyYW0uIgotI34gbXNnc3RyICJcIiVzXCIgT1NTIGF2YWRhbmzEscSfxLEgYmHFn3FhIGJpciBwcm9xcmFtIHTJmXLJmWZpbmTJmW4gaXN0aWZhZMmZZMmZZGlyLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3MgZGV2aWNlIFwiJXNcIiwgY2hlY2sgaXRzIHBlcm1pc3Npb25zLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLFuYSB5ZXRpxZ/JmSBiaWxtyZlkaSwgc8mZbGFoaXl5yZl0bMmZcmluaSB5b3hsYXnEsW4uIgotCi0jfiBtc2dpZCAiRGV2aWNlIFwiJXNcIiBkb2VzIG5vdCBleGlzdC4iCi0jfiBtc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIG3DtnZjdWQgZGV5aWwuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIlwiJXNcIiBhdmFkYW5sxLHEn8SxIHlhem1hIMO8w6fDvG4gYcOnxLFsYSBiaWxtyZlkaS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgXCIlc1wiIGZvciByZWFkaW5nLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIGF2YWRhbmzEscSfxLEgb3h1bWEgw7zDp8O8biBhw6fEsWxhIGJpbG3JmWRpLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZmcyBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIlwiJXNcIiB2ZnMgZmF5bMSxIG94dW1hIMO8w6fDvG4gYcOnxLFsYSBiaWxtyZlkaS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTm8gZmlsZW5hbWUgZ2l2ZW4uIgotI34gbXNnc3RyICJGYXlsIGFkxLEgdmVyaWxtyZl5aWIuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZmcyBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZzogJXMuIgotI34gbXNnc3RyICJcIiVzXCIgdmZzIGZheWzEsSB5YXptYSDDvMOnw7xuIGHDp8SxbGEgYmlsbcmZZGkuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk5vIGZpbGVuYW1lIGdpdmVuIgotI34gbXNnc3RyICJGYXlsIGFkxLEgdmVyaWxtyZl5aWIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNsb3NlIHZmcyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIlwiJXNcIiB2ZnMgZmF5bMSxIGJhxJ9sYW5hIGJpbG3JmWRpLiIKLQotI34gbXNnaWQgIk5vIGRldmljZSBzcGVjaWZpZWQuIgotI34gbXNnc3RyICJBdmFkYW5sxLFxIGJpbGRpcmlsbcmZeWliLiIKLQotI34gbXNnaWQgIkRldmljZSBpcyBub3Qgb3Blbi4iCi0jfiBtc2dzdHIgIkF2YWRhbmzEsXEgYcOnxLFxIGRleWlsLiIKLQotI34gbXNnaWQgIkRldmljZSBpcyBvcGVuLiIKLSN+IG1zZ3N0ciAiQXZhZGFubMSxcSBhw6fEsXFkxLFyLiIKZGlmZiAtLWdpdCBhL3BvL2JnLmdtbyBiL3BvL2JnLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxMjFhNy4uMDAwMDAwMAotLS0gYS9wby9iZy5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9iZy5wbyBiL3BvL2JnLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDY4ODIzLi4wMDAwMDAwCi0tLSBhL3BvL2JnLnBvCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLSMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdzdC1wbHVnaW5zLWdvb2QuCi0jIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZS4KLSMgQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxNi4KLSMKLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QgMS43LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMi0yMSAyMTowMyswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQnVsZ2FyaWFuIDxkaWN0QGx1ZG9zdC5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGJnXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biAhPSAxO1xuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICLQodGK0YDQstGK0YDRitGCIEphY2sg0L3QtSDQtSDQvtGC0LrRgNC40YIuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LTQtdC60L7QtNC40YDQsNC90LUg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1LCDRhNC+0YDQvNCw0YIgSlBFRy4iCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIuKAniVz4oCcINC+0YIg4oCeJXPigJwiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YHRitGJ0LXRgdGC0LLQuCDQstGA0YrQt9C60LAg0LrRitC8INGB0YrRgNCy0YrRgC4iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAi0J3QtSDQtSDQt9Cw0LTQsNC00LXQvSDQsNC00YDQtdGBLiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICLQodGK0YDQstGK0YDRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCDRgtGK0YDRgdC10L3QtS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1INC/0L4g0LjQvNC1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQvtGB0YrRidC10YHRgtCy0Lgg0LLRgNGK0LfQutCwINC60YrQvCDRgdGK0YDQstGK0YDQsC4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L7RgdGK0YnQtdGB0YLQstGP0LLQsNC90LUg0L3QsCDRiNC40YTRgNC40YDQsNC90LAg0LLRgNGK0LfQutCwLiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgItCS0YrQt9C90LjQutC90LAg0LzRgNC10LbQvtCy0LAg0LPRgNC10YjQutCwINC40LvQuCDRgdGK0YDQstGK0YDRitGCINC90LXQvtGH0LDQutCy0LDQvdC+INC/0YDQtdC60YrRgdC90LAg0LLRgNGK0LfQutCw0YLQsC4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgItCh0YrRgNCy0YrRgNGK0YIg0LjQt9C/0YDQsNGC0Lgg0LvQvtGI0Lgg0LTQsNC90L3QuC4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgItCQ0YPQtNC40L4g0LLRhdC+0LTRitGCINC70LjQv9GB0LLQsCDQuNC70Lgg0LUg0LPRgNC10YjQtdC9LiDQn9C+0YLQvtC60YrRgiDRgSBBVkkg0YnQtSDQsdGK0LTQtSDQv9C+0LLRgNC10LTQtdC9LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAi0KLQvtC30Lgg0YTQsNC50Lsg0L3QtSDRgdGK0LTRitGA0LbQsCDQuNC30L/RitC70L3QuNC80Lgg0L/QvtGC0L7RhtC4LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi0KLQvtC30Lgg0YTQsNC50Lsg0LUg0L/QvtCy0YDQtdC00LXQvSDQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9C/0YrQu9C90LXQvS4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAi0J/QvtGC0L7QutGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0YrQu9C90LgsINC30LDRidC+0YLQviDQtSDRiNC40YTRgNC40YDQsNC9INGBIFBsYXlSZWFkeSBEUk0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLQotC+0LfQuCDRhNCw0LnQuyDQtSDQv9C+0LLRgNC10LTQtdC9INC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30L/RitC70L3QtdC9LiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0YDQsNC30LzQtdGAINC90LAg0LDRgtC+0LwuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLQotC+0LfQuCDRhNCw0LnQuyDQtSDQvdC10L/RitC70LXQvSDQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9C/0YrQu9C90LXQvS4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgItCS0LjQtNC10L4g0L/QvtGC0L7QutGK0YIg0LIg0YLQvtC30Lgg0YTQsNC50Lsg0LzQvtC20LUg0LTQsCDQvdC1INGB0LUg0L/QvtC60LDQttC1INC/0YDQsNCy0LjQu9C90L4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSLQotC+0LfQuCDRhNCw0LnQuyDRgdGK0LTRitGA0LbQsCDQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQv9C+0YLQvtGG0LguINCY0LfQv9GK0LvQvdGP0LLQsNGCINGB0LUg0YHQsNC80L4g0L/RitGA0LLQuNGC0LUgJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotItCd0LUg0LUg0L7RgtC60YDQuNGCINC/0L7QtNC00YrRgNC20LDQvSDQv9C+0YLQvtC6LiDQnNC+0LbQtSDQtNCwINGC0YDRj9Cx0LLQsCDQtNCwINC40L3RgdGC0LDQu9C40YDQsNGC0LUg0L/RgNC40YHRgtCw0LLQutCw0YLQsCDQvdCwICIKLSJHU3RyZWFtZXIg4oCUIFJUU1AsINC60L7QudGC0L4g0L/QvtC00LTRitGA0LbQsCDQv9C+0YLQvtGG0Lgg0L3QsCBSZWFsLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotItCd0LUg0LUg0L7RgtC60YDQuNGCINC/0L7QtNC00YrRgNC20LDQvSDQv9C+0YLQvtC6LiDQnNC+0LbQtSDQsdC4INGC0YDRj9Cx0LLQsCDQtNCwINGA0LDQt9GA0LXRiNC40YLQtSDQv9C+0LLQtdGH0LUg0YLRgNCw0L3RgdC/0L7RgNGC0L3QuCAiCi0i0L/RgNC+0YLQvtC60L7Qu9C4INC40LvQuCDQstC4INC70LjQv9GB0LLQsCDQv9GA0LDQstC40LvQvdCw0YLQsCDQv9GA0LjRgdGC0LDQstC60LAg0L3QsCBHU3RyZWFtZXIg0LfQsCBSVFNQLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSLQkNGD0LTQuNC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSwg0LjQt9C/0L7Qu9C30LLQsCDRgdC1INC+0YIg0LTRgNGD0LPQviAiCi0i0L/RgNC40LvQvtC20LXQvdC40LUuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSLQkNGD0LTQuNC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtSwg0L3Rj9C80LDRgtC1INC/0YDQsNCy0LAg0LfQsCDRgtC+0LLQsC4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1LiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSLQkNGD0LTQuNC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDQuNC30L/RitC70L3QtdC90LjQtS4g0JXQu9C10LzQtdC90YLRitGCINC90LUg0L/QvtC00LTRitGA0LbQsCAiCi0i0YLQsNC30Lgg0LLQtdGA0YHQuNGPINC90LAgT1NTLiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLQotC+0LLQsCDQsNGD0LTQuNC+INGD0YHRgtGA0L7QudGB0YLQstC+INC90LUg0L/QvtC00LTRitGA0LbQsCDQuNC30L/RitC70L3QtdC90LjQtS4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQsNGD0LTQuNC+0YLQvi4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgItCi0L7QstCwINCw0YPQtNC40L4g0YPRgdGC0YDQvtC50YHRgtCy0L4g0L3QtSDQv9C+0LTQtNGK0YDQttCwINC30LDQv9C40YEuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGB0LAg0L7RgiDQsNGD0LTQuNC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQvi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSLQkNGD0LTQuNC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0Lgg0LfQsCDQt9Cw0L/QuNGBLCDQvdGP0LzQsNGC0LUg0L/RgNCw0LLQsCDQt9CwINGC0L7QstCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAi0JDRg9C00LjQviDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4INC30LAg0LfQsNC/0LjRgS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IENvcmVBdWRpbyDQvdC1INC1INC+0YLQutGA0LjRgtC+IgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4gQ29yZUF1ZGlvINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuCIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgItCY0LfRgtC+0YfQvdC40Log0LfQsCDQt9Cw0L/QuNGBIgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAi0JzQuNC60YDQvtGE0L7QvSIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgItCS0YXQvtC0IgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgItCS0YrRgtGA0LXRiNC90L4gQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAi0JLRhdC+0LQgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAi0JLRhdC+0LQgQVVYIDEiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAi0JLRhdC+0LQgQVVYIDIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAi0J7QsdGA0LDRgtC90LAg0LLRgNGK0LfQutCwINC90LAg0LrQvtC00LXQutCwIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICLQntCx0YDQsNGC0L3QsCDQstGA0YrQt9C60LAg0L3QsCBTdW5WVFMiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgItCh0LjQu9CwINC90LAg0LfQstGD0LrQsCIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgItCj0YHQuNC70LLQsNC90LUiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICLQnNC+0L3QuNGC0L7RgCIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgItCS0LPRgNCw0LTQtdC9INCy0LjRgdC+0LrQvtCz0L7QstC+0YDQuNGC0LXQuyIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAi0KHQu9GD0YjQsNC70LrQuCIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICLQmNC30YXQvtC0IgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICLQmNC30YXQvtC0IFNQRElGIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICLQmNC30YXQvtC0IEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICLQmNC30YXQvtC0IEFVWCAyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0YfQuNGC0LDQvdC1ICVkINCx0LDQudGC0LAg0L7RgiDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0LjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDQv9C+0LTQtNGK0YDQttCw0L3QuNGC0LUg0L7RgiDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwg0LLQuNC00LXQviDRhNC+0YDQvNCw0YLQuCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQv9C+0LvRg9GH0LDRgiDQsdGD0YTQtdGA0LjRgtC1INC+0YIg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAi0JTRgNCw0LnQstC10YDRitGCINC30LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQv9C+0LfQvdCw0YLQuCDQvNC10YLQvtC00LAg0LfQsCDQki/QmCAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgItCU0YDQsNC50LLQtdGA0YrRgiDQt9CwINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L/QvtC30L3QsNGCINC80LXRgtC+0LQg0LfQsCDQki/QmC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC1INC30LDQtdGC0L4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+0YLQviDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LfQsNC/0LjRgdCy0LAg0YEg0YDQsNC30LTQtdC70LjRgtC10LvQvdCwINGB0L/QvtGB0L7QsdC90L7RgdGCICVkw5clZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQt9Cw0L/QuNGB0LLQsCDQsiDRg9C60LDQt9Cw0L3QuNGPINGE0L7RgNC80LDRgi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQvdC10YHRitGB0LXQtNC90Lgg0YDQsNCy0L3QuNC90LgiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICLQndC1INC80L7Qs9Cw0YIg0LTQsCDRgdC1INC/0L7Qu9GD0YfQsNGCINC/0LDRgNCw0LzQtdGC0YDQuNGC0LUg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0i0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+INC30LAg0LLQuNC00LXQviDQvdC1INC/0YDQuNC10LzQsCDQvdC+0LLQuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC4INC30LAg0YfQtdGB0YLQvtGC0LDRgtCwINC90LAg0LrQsNC00YDQuC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICLQktC40LTQtdC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQvdC1INGD0LrQsNC30LLQsCDRhNC+0YDQvNCw0YIuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgItCS0LjQtNC10L4g0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+INCy0YrRgNC90LAg0L3QtdC/0YDQsNCy0LjQu9C90Lgg0YDQsNC30LzQtdGA0LgiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAi0JLQuNC00LXQviDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g0LjQt9C/0L7Qu9C30LLQsCDQvdC10L/QvtC00LTRitGA0LbQsNC90LAg0L/RgNC10LfRgNC10LTQvtCy0LAg0YDQsNC30LLQuNCy0LrQsC4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAi0JLQuNC00LXQviDRg9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g0LjQt9C/0L7Qu9C30LLQsCDQvdC10L/QvtC00LTRitGA0LbQsNC9INGE0L7RgNC80LDRgiDQvdCwINC/0LjQutGB0LXQu9C40YLQtS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC90LDRgdGC0YDQvtC50LLQsNC90LUg0L3QsCDQstGK0YLRgNC10YjQvdC40YLQtSDQsdGD0YTQtdGA0LguIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICLQktC40LTQtdC+INGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQvdC1INGD0LrQsNC30LLQsCDRgNCw0LfQvNC10YAg0L3QsCDQsdGD0YTQtdGA0LAuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAi0J3Rj9C80LAg0LHRg9GE0LXRgNC4LCDQutC+0LjRgtC+INC00LAg0YHQtSDQstC90LXRgdCw0YIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LAg0YLRg9C90LXRgCAlZCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0LLRitC30LzQvtC20L3QvtGB0YLQuNGC0LUg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwg0L3QtSDQtSDRgtGD0L3QtdGALiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINGA0LDQtNC40L4g0LLRhdC+0LTQsCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+IOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LLRhdC+0LQgJWQg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QsCDRgdC80Y/QvdCwINC90LAg0LfQsNCz0LvRg9GI0LDQstCw0L3QtdGC0L4g0YPRgdGC0YDQvtC50YHRgtCy0L4g4oCeJXPigJwuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC00LXQu9GP0L3QtSDQvdCwINC90LXQvtCx0YXQvtC00LjQvNCw0YLQsCDQv9Cw0LzQtdGCLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC00LXQu9GP0L3QtSDQvdCwINC90LXQvtCx0YXQvtC00LjQvNCw0YLQsCDQv9Cw0LzQtdGCLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICLQmtC+0L3QstC10YDRgtC+0YDRitGCINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQv9C+0LfQvdCw0YLQuCDQvNC10YLQvtC0INC30LAg0LLRhdC+0LQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICLQmtC+0L3QstC10YDRgtC+0YDRitGCINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQv9C+0LfQvdCw0YLQuCDQvNC10YLQvtC0INC30LAg0LjQt9GF0L7QtC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgItCa0L7QtNC10YDRitGCINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDigJ4lc+KAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L/QvtC30L3QsNGC0Lgg0LzQtdGC0L7QtCDQt9CwINCy0YXQvtC0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgItCa0L7QtNC10YDRitGCINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0L/QvtC00LTRitGA0LbQsCDQv9C+0LfQvdCw0YLQuCDQvNC10YLQvtC0INC30LAg0LjQt9GF0L7QtC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg0L3QuNGI0LrQsNGC0LAg0LfQsCDQtNC10LrQvtC00LjRgNCw0L3QtS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QsCDQvtCx0YDQsNCx0L7RgtC60LAg0L3QsCDQutCw0LTRitGALiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSLQk9GA0LXRiNC60LAg0L/RgNC4INC/0L7Qu9GD0YfQsNCy0LDQvdC10YLQviDQvdCwINCy0YrQt9C80L7QttC90L7RgdGC0LjRgtC1INC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcOiDQvdC1INC1INC00YDQsNC50LLQtdGAICIKLSJ2NGwyLiDQn9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0LLRgdGK0YnQvdC+0YHRgiDQvdC1INC1INC00YDQsNC50LLQtdGAIHY0bDEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC30LDQv9C40YLQstCw0L3QtSDQt9CwINCw0YLRgNC40LHRg9GC0LjRgtC1INC30LAg0LLRhdC+0LQgJWQg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDQvdCwINGC0YPQvdC10YAgJWQg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC/0LjRgtCy0LDQvdC1INC30LAg0L3QvtGA0LzQsNGC0LAg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINC60L7QvdGC0YDQvtC70L3QuNGC0LUg0LDRgtGA0LjQsdGD0YLQuCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LTQtdC90YLQuNGE0LjRhtC40YDQsC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDRg9GB0YLRgNC+0LnRgdGC0LLQvi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtCy0L7RgNC4INC30LAg0YfQtdGC0LXQvdC1INC4INC30LDQv9C40YEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0LUg0YPRgdGC0YDQvtC50YHRgtCy0L4g0LfQsCDQt9Cw0L/QuNGBLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L7RgtC+IOKAniVz4oCcINC90LUg0LUg0LjQt9GF0L7QtNC90L4g0YPRgdGC0YDQvtC50YHRgtCy0L4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwg0L3QtSDQtSBNMk0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQvtGC0L4g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTRg9C/0LvQtdC60YHQuNGA0LAg0LfQsCDRh9C10YLQtdC90LUg0Lgg0LfQsNC/0LjRgS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0L3QvtGA0LzQsNGC0LAg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0i0J3QtdGD0YHQv9C10YjQvdC+INC/0L7Qu9GD0YfQsNCy0LDQvdC1INC90LAg0YLQtdC60YPRidCw0YLQsCDQvdCw0YHRgtGA0L7QudC60LAg0L3QsCDRh9C10YHRgtC+0YLQsNGC0LAg0LfQsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotItCd0LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0YLQtdC60YPRidCw0YLQsCDQvdCw0YHRgtGA0L7QudC60LAg0L3QsCDRh9C10YHRgtC+0YLQsNGC0LAg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnCDQtNCwICIKLSLQtSAlbHUgSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9C+0LvRg9GH0LDQstCw0L3QtSDQvdCwINGB0LjQu9Cw0YLQsCDQvdCwINGB0LjQs9C90LDQu9CwINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L4g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC60L7QvdGC0YDQvtC7ICVkINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L4g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC00LDQstCw0L3QtSDQvdCwINGB0YLQvtC50L3QvtGB0YLRgtCwICVkINC90LAg0LrQvtC90YLRgNC+0LsgJWQg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQviDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LjRjyDQstGF0L7QtCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+IOKAniVz4oCcLiDQnNC+0LbQtSDQsdC4INC1INGA0LDQtNC40L4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LjRjyDQuNC30YXQvtC0INC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L4g4oCeJXPigJwuINCc0L7QttC1INCx0Lgg0LUg0YDQsNC00LjQvi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDQuNC30YXQvtC0ICVkINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0L4g4oCeJXPigJwuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotItCf0YDQvtC80Y/QvdCw0YLQsCDQvdCwINGA0LDQt9C00LXQu9C40YLQtdC70L3QsNGC0LAg0YHQv9C+0YHQvtCx0L3QvtGB0YIg0L/QviDQstGA0LXQvNC1INC90LAg0YDQsNCx0L7RgtCwINCy0YHQtSDQvtGJ0LUg0L3QtSDRgdC1ICIKLSLQv9C+0LTQtNGK0YDQttCwLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAi0KDQsNCx0L7RgtCw0YLQsCDQsdC10Lcg0YfQsNGB0L7QstC90LjQuiDQtSDQvdC10LLRitC30LzQvtC20L3QsC4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgItCS0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwINC90LAg0L/QvtGC0L7QutCwINC+0YIg0LTQsNC90L3QuC4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICLQktGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQsiDQv9C+0YLQvtC60LAg0YEg0LTQsNC90L3QuC4iCmRpZmYgLS1naXQgYS9wby9ib2xkcXVvdC5zZWQgYi9wby9ib2xkcXVvdC5zZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiOTM3YWEuLjAwMDAwMDAKLS0tIGEvcG8vYm9sZHF1b3Quc2VkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCi1zL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCi1zLyAnXChbXmAnXSpcKScgLyDigJhcMeKAmSAvZwotcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZwotcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZwotcy/igJzigJ0vIiIvZwotcy/igJwv4oCcG1sxbS9nCi1zL+KAnS8bWzBt4oCdL2cKLXMv4oCYL+KAmBtbMW0vZwotcy/igJkvG1swbeKAmS9nCmRpZmYgLS1naXQgYS9wby9jYS5nbW8gYi9wby9jYS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2YTVhYjguLjAwMDAwMDAKLS0tIGEvcG8vY2EuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vY2EucG8gYi9wby9jYS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY4ODY0Ni4uMDAwMDAwMAotLS0gYS9wby9jYS5wbworKysgL2Rldi9udWxsCkBAIC0xLDkzNSArMCwwIEBACi0jIENhdGFsYW4gdHJhbnNsYXRpb24gb2YgZ3N0LXBsdWdpbnMtZ29vZAotIyBDb3B5cmlnaHQgwqkgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgSm9yZGkgTWFsbGFjaCA8am9yZGlAc2luZG9taW5pby5uZXQ+LCAyMDA1LgotIyBKb3JkaSBFc3RyYWRhIDxqb3JkaS5lc3RyYWRhQHlhbWFoYS1tb3Rvci5lcz4sIDIwMTEuCi0jIEdpbCBGb3JjYWRhIDxnZm9yY2FkYUBnbm9tZS5vcmc+LCAyMDEyLgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAwLjEwLjI4LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0wMS0wMSAxNDoxOSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBHaWwgRm9yY2FkYSA8Z2ZvcmNhZGFAZ25vbWUub3JnPlxuIgotIkxhbmd1YWdlLVRlYW06IENhdGFsYW4gPGNhQGRvZGRzLm5ldD5cbiIKLSJMYW5ndWFnZTogY2FcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uICE9IDE7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiSGEgZmFsbGF0IGVuIGRlc2NvZGlmaWNhciBsYSBpbWF0Z2UgSlBFRyIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAiwqslc8K7IHBlciDCqyVzwrsiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgY29ubmVjdGFyIGFsIHNlcnZpZG9yIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIk5vIHMnaGEgaW5kaWNhdCBjYXAgVVJMLiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJFbCBzZXJ2aWRvciBubyBhZGVtZXQgbGVzIGNlcnF1ZXMuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHJlc29sZHJlIGVsIG5vbSBkZWwgc2Vydmlkb3IuIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgbGEgY29ubmV4acOzIGFsIHNlcnZpZG9yLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIkhhIGZhbGxhdCBsYSBjb25maWd1cmFjacOzIGRlIGNvbm5leGnDsyBzZWd1cmEuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIiIKLSJTJ2hhIHByb2R1w690IHVuIGVycm9yIGRlIHhhcnhhLCBvIGVsIHNlcnZpZG9yIGhhIHRhbmNhdCBsYSBjb25uZXhpw7MgIgotImluZXNwZXJhZGFtZW50LiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiRWwgc2Vydmlkb3IgaGEgZW52aWF0IGRhZGVzIGVycsOybmllcy4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIk1hbmNhIG8gbm8gw6lzIHbDoGxpZGEgbCdlbnRyYWRhIGQnw6B1ZGlvLCBlbCBmbHV4IEFWSSBlc3RhcsOgIG1hbG3DqHMuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJBcXVlc3QgZml0eGVyIG5vIGNvbnTDqSBjYXAgZmx1eCByZXByb2R1w69ibGUuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJBcXVlc3QgZml0eGVyIG5vIMOpcyB2w6BsaWQgaSBubyBlcyBwb3QgcmVwcm9kdWlyLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkFxdWVzdCBmaXR4ZXIgZXN0w6AgbWFsbcOocyBpIG5vIGVzIHBvdCByZXByb2R1aXIuIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICJMYSBtaWRhIGRlIGwnw6B0b20gbm8gw6lzIHbDoGxpZGEuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJBcXVlc3QgZml0eGVyIG5vIGVzdMOgIGNvbXBsZXQgaSBubyBlcyBwb3QgcmVwcm9kdWlyLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiRWwgdsOtZGVvIGVuIGFxdWVzdCBmaXR4ZXIgcG9kcmlhIG5vIHJlcHJvZHVpci1zZSBjb3JyZWN0YW1lbnQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSJBcXVlc3QgZml0eGVyIGNvbnTDqSBtYXNzYSBmbHV4b3MuIE5vbcOpcyBzJ2VzdGFuIHJlcHJvZHVpbnQgZWxzIHByaW1lcnMgJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk5vIHMnaGEgdHJvYmF0IGNhcCBmbHV4IGNvbXBhdGlibGUuIFBvZHLDrWV1IG5lY2Vzc2l0YXIgaW5zdGFswrdsYXIgdW4gIgotImNvbm5lY3RvciBkJ2V4dGVuc2nDsyBSVFNQIGRlbCBHU3RyZWFtZXIgcGVyIGEgZmx1eG9zIGRlIG11bHRpbcOoZGlhIFJlYWwuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0iTm8gcydoYSB0cm9iYXQgY2FwIGZsdXggY29tcGF0aWJsZS4gUG9kcsOtZXUgbmVjZXNzaXRhciBwZXJtZXRyZSBtw6lzICIKLSJwcm90b2NvbHMgZGUgdHJhbnNwb3J0IG8gYsOpIHBvdHNlciBtYW5jYSBlbCBjb25uZWN0b3IgZCdleHRlbnNpw7MgUlRTUCBkZWwgIgotIkdTdHJlYW1lciBjb3JyZWN0ZS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iTm8gcydoYSBwb2d1dCBvYnJpciBlbCBkaXNwb3NpdGl1IGQnw6B1ZGlvIHBlciBhIGxhIHJlcHJvZHVjY2nDsy4gVW5hIGFsdHJhICIKLSJhcGxpY2FjacOzIGVzdMOgIHV0aWxpdHphbnQgZWwgZGlzcG9zaXRpdS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZGlzcG9zaXRpdSBkJ8OgdWRpbyBwZXIgYSBsYSByZXByb2R1Y2Npw7MuIE5vIHRlbml1ICIKLSJwZXJtw61zIHBlciBvYnJpciBlbCBkaXNwb3NpdGl1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyIGVsIGRpc3Bvc2l0aXUgZCdhzIB1ZGlvIHBlciBhIGxhIHJlcHJvZHVjY2nDsy4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTm8gcydoYSBwb2d1dCBvYnJpciBlbCBkaXNwb3NpdGl1IGQnYcyAdWRpbyBwZXIgYSBsYSByZXByb2R1Y2Npw7MuIEFxdWVzdGEgIgotInZlcnNpb8yBIGRlIGwnT3BlbiBTb3VuZCBTeXN0ZW0gbm8gZcyBcyBjb21wYXRpYmxlIGFtYiBhcXVlc3QgZWxlbWVudC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQXF1ZXN0IGRpc3Bvc2l0aXUgZCfDoHVkaW8gbm8gcGVybWV0IGxhIHJlcHJvZHVjY2nDsy4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgYWwgcmVwcm9kdWlyIGwnw6B1ZGlvLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQXF1ZXN0IGRpc3Bvc2l0aXUgZCfDoHVkaW8gbm8gcGVybWV0IGwnZW5yZWdpc3RyYW1lbnQuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBhIGwnZW5yZWdpc3RyYXIgZGVzIGRlbCBkaXNwb3NpdGl1IGQnw6B1ZGlvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZGlzcG9zaXRpdSBkJ2HMgHVkaW8gcGVyIGEgbCdlbnJlZ2lzdHJhbWVudC4gTm8gdGVuaXUgIgotInBlcm1pzIFzIHBlciBvYnJpciBlbCBkaXNwb3NpdGl1LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciBlbCBkaXNwb3NpdGl1IGQnYcyAdWRpbyBwZXIgYSBsJ2VucmVnaXN0cmFtZW50LiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIkZvbnQgZCdlbnJlZ2lzdHJhbWVudCIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pY3LDsmZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkzDrW5pYSBkJ2VudHJhZGEiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiQ0QgaW50ZXJuIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIkVudHJhZGEgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiRW50cmFkYSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJFbnRyYWRhIEFVWCAyIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJCdWNsZSBsb2NhbCIKLQotIywgZnV6enkKLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIkJ1Y2xlIGxvY2FsIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJWb2x1bSIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIkd1YW55IgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIkFsdGF2ZXUgaW5jb3Jwb3JhdCIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiQXVyaWN1bGFycyIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJMw61uaWEgZGUgc29ydGlkYSIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU29ydGlkYSBTUERJRiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiU29ydGlkYSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiU29ydGlkYSBBVVggMiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGFsIGxsZWdpciAlZCBieXRlcyBkZXMgZGVsIGRpc3Bvc2l0aXUgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJObyBzJ2hhbiBwb2d1dCBtYXBlamFyIGxlcyBtZW3DsnJpZXMgaW50ZXJtw6hkaWVzIGRlbCBkaXNwb3NpdGl1IMKrJXPCuyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIiIKLSJFbCBjb250cm9sYWRvciBkZWwgZGlzcG9zaXRpdSDCqyVzwrsgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGNhcCBtw6h0b2RlIGRlICIKLSJjYXB0dXJhIGNvbmVndXQuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJFbCBjb250cm9sYWRvciBkZWwgZGlzcG9zaXRpdSDCqyVzwrsgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGNhcCBtw6h0b2RlIGRlICIKLSJjYXB0dXJhIGNvbmVndXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXUgwqslc8K7IG5vIMOpcyB1biBkaXNwb3NpdGl1IGRlIGNhcHR1cmEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiRWwgZGlzcG9zaXRpdSDCqyVzwrsgbm8gw6lzIHVuIGRpc3Bvc2l0aXUgZGUgY2FwdHVyYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXUgwqslc8K7IG5vIMOpcyB1biBkaXNwb3NpdGl1IGRlIHNvcnRpZGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTm8gcydoYW4gcG9ndXQgb2J0ZW5pciBlbHMgcGFyw6BtZXRyZXMgZGVsIGRpc3Bvc2l0aXUgwqslc8K7IgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiIgotIkVsIGRpc3Bvc2l0aXUgZCdlbnRyYWRhIGRlIHbDrWRlbyBubyBoYSBhY2NlcHRhdCBlbCBwYXLDoG1ldHJlIG5vdSBkZSAiCi0iZm90b2dyYW1lcyBwZXIgc2Vnb24uIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIiIKLSJFbCBkaXNwb3NpdGl1IGQnZW50cmFkYSBkZSB2w61kZW8gbm8gaGEgYWNjZXB0YXQgZWwgcGFyw6BtZXRyZSBub3UgZGUgIgotImZvdG9ncmFtZXMgcGVyIHNlZ29uLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiIgotIkVsIGNvbnRyb2xhZG9yIGRlbCBkaXNwb3NpdGl1IMKrJXPCuyBubyDDqXMgY29tcGF0aWJsZSBhbWIgY2FwIG3DqHRvZGUgZGUgIgotImNhcHR1cmEgY29uZWd1dC4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotIkVsIGNvbnRyb2xhZG9yIGRlbCBkaXNwb3NpdGl1IMKrJXPCuyBubyDDqXMgY29tcGF0aWJsZSBhbWIgY2FwIG3DqHRvZGUgZGUgIgotImNhcHR1cmEgY29uZWd1dC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiIgotIkVsIGRpc3Bvc2l0aXUgZCdlbnRyYWRhIGRlIHbDrWRlbyBubyBoYSBhY2NlcHRhdCBlbCBwYXLDoG1ldHJlIG5vdSBkZSAiCi0iZm90b2dyYW1lcyBwZXIgc2Vnb24uIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIk5vIHMnaGFuIHBvZ3V0IG9idGVuaXIgZWxzIHBhcsOgbWV0cmVzIGRlbCBzaW50b25pdHphZG9yICVkIGVuIGVsIGRpc3Bvc2l0aXUgIgotIsKrJXPCuy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgYWwgbGxlZ2lyICVkIGJ5dGVzIGRlcyBkZWwgZGlzcG9zaXRpdSDCqyVzwrsuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXUgwqslc8K7IG5vIMOpcyB1biBkaXNwb3NpdGl1IGRlIHNvcnRpZGEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgbCdlbnRyYWRhICVkIGVuIGVsIGRpc3Bvc2l0aXUgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc3RhYmxpciBsJ2VudHJhZGEgJWQgZW4gZWwgZGlzcG9zaXRpdSAlcy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgbGEgaW50ZW5zaXRhdCBkZWwgc2VueWFsIHBlciBhbCBkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJFbCBjb250cm9sYWRvciBkZWwgZGlzcG9zaXRpdSDCqyVzwrsgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGNhcCBtw6h0b2RlIGRlICIKLSJjYXB0dXJhIGNvbmVndXQuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkVsIGRpc3Bvc2l0aXUgZCdlbnRyYWRhIGRlIHbDrWRlbyBubyBoYSBhY2NlcHRhdCBlbCBwYXLDoG1ldHJlIG5vdSBkZSAiCi0iZm90b2dyYW1lcyBwZXIgc2Vnb24uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkVsIGRpc3Bvc2l0aXUgZCdlbnRyYWRhIGRlIHbDrWRlbyBubyBoYSBhY2NlcHRhdCBlbCBwYXLDoG1ldHJlIG5vdSBkZSAiCi0iZm90b2dyYW1lcyBwZXIgc2Vnb24uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJFbCBkaXNwb3NpdGl1IGQnZW50cmFkYSBkZSB2w61kZW8gbm8gaGEgYWNjZXB0YXQgZWwgcGFyw6BtZXRyZSBub3UgZGUgIgotImZvdG9ncmFtZXMgcGVyIHNlZ29uLiIKLQotIywgZnV6enkKLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiSGEgZmFsbGF0IGVuIGRlc2NvZGlmaWNhciBsYSBpbWF0Z2UgSlBFRyIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gb2J0ZW5pciBsZXMgY2FwYWNpdGF0cyBkZWwgZGlzcG9zaXRpdSDCqyVzwrs6IG5vIMOpcyAiCi0idW4gY29udHJvbGFkb3IgdjRsMi4gQ29tcHJvdmV1IHNpIMOpcyB1biBjb250cm9sYWRvciB2NGwxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLSJTJ2hhIHByb2R1w690IHVuIGVycm9yIGVuIGNvbnN1bHRhciBlbHMgYXRyaWJ1dHMgZGUgbCdlbnRyYWRhICVkIGVuIGVsICIKLSJkaXNwb3NpdGl1ICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJObyBzJ2hhbiBwb2d1dCBvYnRlbmlyIGVscyBwYXLDoG1ldHJlcyBkZWwgc2ludG9uaXR6YWRvciAlZCBlbiBlbCBkaXNwb3NpdGl1ICIKLSLCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBlbiBjb25zdWx0YXIgbGEgbm9ybWEgZW4gZWwgZGlzcG9zaXRpdSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTm8gcydoYSBwb2d1dCBvYnRlbmlyIGVscyBhdHJpYnV0cyBkZWxzIGNvbnRyb2xzIGVuIGVsIGRpc3Bvc2l0aXUgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJObyBlcyBwb3QgaWRlbnRpZmljYXIgZWwgZGlzcG9zaXRpdSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkFpeMOyIG5vIMOpcyB1biBkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyIGVsIGRpc3Bvc2l0aXUgwqslc8K7IHBlciBhIGxlY3R1cmEgaSBsJ2VzY3JpcHR1cmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiRWwgZGlzcG9zaXRpdSDCqyVzwrsgbm8gw6lzIHVuIGRpc3Bvc2l0aXUgZGUgY2FwdHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXUgwqslc8K7IG5vIMOpcyB1biBkaXNwb3NpdGl1IGRlIHNvcnRpZGEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiRWwgZGlzcG9zaXRpdSDCqyVzwrsgbm8gw6lzIHVuIGRpc3Bvc2l0aXUgZGUgc29ydGlkYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9icmlyIGVsIGRpc3Bvc2l0aXUgwqslc8K7IHBlciBhIGxlY3R1cmEgaSBsJ2VzY3JpcHR1cmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVzdGFibGlyIGxhIG5vcm1hIHBlciBhbCBkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTm8gcydoYSBwb2d1dCBvYnRlbmlyIGxhIGZyZXHDvMOobmNpYSBhY3R1YWwgZGVsIHNpbnRvbml0emFkb3IgcGVyIGFsICIKLSJkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIk5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgbGEgZnJlccO8w6huY2lhIGFjdHVhbCBkZWwgc2ludG9uaXR6YWRvciBwZXIgYWwgIgotImRpc3Bvc2l0aXUgwqslc8K7IGEgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgbGEgaW50ZW5zaXRhdCBkZWwgc2VueWFsIHBlciBhbCBkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgdmFsb3IgcGVyIGFsIGNvbnRyb2wgJWQgZW4gZWwgZGlzcG9zaXRpdSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTm8gcydoYSBwb2d1dCBlc3RhYmxpciBlbCB2YWxvciAlZCBwZXIgYWwgY29udHJvbCAlZCBlbiBlbCBkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgbCdlbnRyYWRhIGFjdHVhbCBlbiBlbCBkaXNwb3NpdGl1IMKrJXPCuy4gUG90c2VyIMOpcyB1biAiCi0iZGlzcG9zaXRpdSBkZSByw6BkaW8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk5vIHMnaGEgcG9ndXQgb2J0ZW5pciBsYSBzb3J0aWRhIGFjdHVhbCBlbiBlbCBkaXNwb3NpdGl1IMKrJXPCuy4gUG90c2VyIMOpcyB1biAiCi0iZGlzcG9zaXRpdSBkZSByw6BkaW8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc3RhYmxpciBsYSBzb3J0aWRhICVkIGVuIGVsIGRpc3Bvc2l0aXUgJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiRW5jYXJhIG5vIGVzIHBlcm1ldCBlbCBjYW52aSBkZSBsYSByZXNvbHVjacOzIGVuIHRlbXBzIGQnZXhlY3VjacOzLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiTm8gZXMgcG90IG9wZXJhciBzZW5zZSB1biByZWxsb3RnZSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiUydoYSBwcm9kdcOvdCB1biBlcnJvciBpbnRlcm4gZGUgZmx1eCBkZSBkYWRlcy4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJTJ2hhIHByb2R1w690IHVuIGVycm9yIGludGVybiBkZSBmbHV4IGRlIGRhZGVzLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkVsIGRpc3Bvc2l0aXUgwqslc8K7IG5vIMOpcyB1biBkaXNwb3NpdGl1IGRlIHNvcnRpZGEuIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiUydoYSBvYnRpbmd1dCB1bmEgbWlkYSBkZSBmb3RvZ3JhbWEgaW5lc3BlcmFkYSBkZSAldSBlbiBsbG9jIGRlICV1LiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiIgotI34gIlMnaGEgcHJvZHXDr3QgdW4gZXJyb3IgZW4gcHJvdmFyIGQnb2J0ZW5pciBmb3RvZ3JhbWVzIGRlIHbDrWRlbyBkZXMgZGVsICIKLSN+ICJkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiIgotI34gIkhhIGZhbGxhdCBkZXNwcsOpcyBkZSAlZCBpbnRlbnRzLiBEaXNwb3NpdGl1ICVzLiBFcnJvciBkZSBzaXN0ZW1hOiAlcyIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhaXhvcyIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAiQWd1dHMiCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAiU2ludGV0aXR6YWRvciIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiQWx0YXZldSIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkzDrW5pYSBkJ2VudHJhZGEiCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiTWVzY2xhZG9yIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICJFbnJlZ2lzdHJhbWVudCIKLQotI34gbXNnaWQgIkluLWdhaW4iCi0jfiBtc2dzdHIgIkd1YW55IGQnZW50cmFkYSIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJHdWFueSBkZSBzb3J0aWRhIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMw61uaWEtMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAiTMOtbmlhLTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIkzDrW5pYS0zIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaWdpdGFsLTEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0zIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgZGVsIHRlbMOoZm9uIgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJTb3J0aWRhIGRlbCB0ZWzDqGZvbiIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWw61kZW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUsOgZGlvIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLSN+IG1zZ3N0ciAiIgotI34gIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZGlzcG9zaXRpdSBkJ8OgdWRpbyBwZXIgYSBsYSBnZXN0acOzIGRlbCBjb250cm9sIGRlbCAiCi0jfiAibWVzY2xhZG9yLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIk5vIHMnaGEgcG9ndXQgb2JyaXIgZWwgZGlzcG9zaXRpdSBkJ8OgdWRpbyBwZXIgYSBsYSBnZXN0acOzIGRlbCBjb250cm9sIGRlbCAiCi0jfiAibWVzY2xhZG9yLiBBcXVlc3RhIHZlcnNpw7MgZGUgbCdPcGVuIFNvdW5kIFN5c3RlbSBubyDDqXMgY29tcGF0aWJsZSBhbWIgIgotI34gImFxdWVzdCBlbGVtZW50LiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiTWVzdHJlIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIkZyb250YWwiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJQb3N0ZXJpb3IiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICJBdXJpY3VsYXJzIgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICJDZW50cmFsIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICJMRkUgKGVmZWN0ZXMgZGUgYmFpeGEgZnJlccO8w6huY2lhKSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJTbyBlbnZvbHRhbnQiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJMYXRlcmFsIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiU29ydGlkYSBBVVgiCi0KLSN+IG1zZ2lkICIzRCBEZXB0aCIKLSN+IG1zZ3N0ciAiUHJvZnVuZGl0YXQgM0QiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIkNlbnRyZSAzRCIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIk1pbGxvcmEgM0QiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbMOoZm9uIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgZGUgdsOtZGVvIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJFbnRyYWRhIEFVWCIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICJHdWFueSBkJ2VucmVnaXN0cmFtZW50IgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIkd1YW55IGRlIHNvcnRpZGEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJBbXBsaWZpY2FjacOzIGRlbCBtaWNyw7Jmb24iCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICJEaWFnbsOyc3RpYyIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkFtcGxpZmljYWNpw7MgZGVscyBiYWl4b3MiCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiUG9ydHMgZGUgcmVwcm9kdWNjacOzIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIkVudHJhZGEiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiRm9udCBkZWwgbW9uaXRvciIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIlNvIGRlbCB0ZWNsYXQiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIkVzdMOocmVvIHNpbXVsYXQiCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIkVzdMOocmVvIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIlNvIGVudm9sdGFudCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiR3VhbnkgZGVsIG1pY3LDsmZvbiIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJGb250IGRlIGwnYWx0YXZldSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJGb250IGRlbCBtaWNyw7Jmb24iCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICJKYWNrIgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICJDZW50cmUgLyBMRkUgKGVmZWN0ZXMgZGUgYmFpeGEgZnJlccO8w6huY2lhKSIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIk1lc2NsYSBlc3TDqHJlbyIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICJNZXNjbGEgbW9ubyIKLQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAiTWVzY2xhIGQnZW50cmFkYSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWljcsOyZm9uIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk1pY3LDsmZvbiAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIlNvcnRpZGEgZGlnaXRhbCIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgZGlnaXRhbCIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAiTcOyZGVtIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAiQ29tYW5kYW1lbnQgYSBkaXN0w6BuY2lhIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIkFsdHJlcyIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgIkNhcCIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICJFbmPDqHMiCi0KLSN+IG1zZ2lkICJPZmYiCi0jfiBtc2dzdHIgIkFwYWdhdCIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIlNpbGVuY2kiCi0KLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICJSw6BwaWQiCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiTW9sdCBiYWl4YSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiQmFpeGEiCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIk1pdGphbmEiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJBbHRhIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJNb2x0IGFsdGEiCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJQcm9kdWNjacOzIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAiTWljcsOyZm9uIGRlbCBxdWFkcmUgZnJvbnRhbCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIkzDrW5pYSBkJ2VudHJhZGEgZGVsIHF1YWRyZSBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiQXVyaWN1bGFycyBkZWwgcXVhZHJlIGZyb250YWwiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAiTMOtbmlhIGRlIHNvcnRpZGEgZGVsIHF1YWRyZSBmcm9udGFsIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgdmVyZCIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3Igcm9zYSIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgYmxhdSIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmVjdG9yIGJsYW5jIgotCi0jfiBtc2dpZCAiQmxhY2sgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgbmVncmUiCi0KLSN+IG1zZ2lkICJHcmF5IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmVjdG9yIGdyaXMiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgdGFyb25qYSIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciB2ZXJtZWxsIgotCi0jfiBtc2dpZCAiWWVsbG93IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmVjdG9yIGdyb2MiCi0KLSN+IG1zZ2lkICJHcmVlbiBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciB2ZXJkIGRlbCBxdWFkcmUgZnJvbnRhbCIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3Igcm9zYSBkZWwgcXVhZHJlIGZyb250YWwiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmVjdG9yIGJsYXUgZGVsIHF1YWRyZSBmcm9udGFsIgotCi0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgYmxhbmMgZGVsIHF1YWRyZSBmcm9udGFsIgotCi0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgbmVncmUgZGVsIHF1YWRyZSBmcm9udGFsIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciBncmlzIGRlbCBxdWFkcmUgZnJvbnRhbCIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciB0YXJvbmphIGRlbCBxdWFkcmUgZnJvbnRhbCIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciB2ZXJtZWxsIGRlbCBxdWFkcmUgZnJvbnRhbCIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciBncm9jIGRlbCBxdWFkcmUgZnJvbnRhbCIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIlNvcnRpZGEgZGUgcHJvcGFnYWNpw7MiCi0KLSN+IG1zZ2lkICJEb3dubWl4IgotI34gbXNnc3RyICJEb3dubWl4IgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAiRW50cmFkYSBkZWwgbWVzY2xhZG9yIHZpcnR1YWwiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiU29ydGlkYSBkZWwgbWVzY2xhZG9yIHZpcnR1YWwiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJDYW5hbHMgZGVsIG1lc2NsYWRvciB2aXJ0dWFsIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIkZ1bmNpw7MgJXMgJWQiCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiRnVuY2nDsyAlcyIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXN0YWJsaXIgbGEgY29ubmV4acOzIGFsIHNlcnZpZG9yIGRlIHNvIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIkhhIGZhbGxhdCBlbiBjb25zdWx0YXIgbGVzIGNhcGFjaXRhdHMgZGVsIHNlcnZpZG9yIGRlIHNvIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIlMnaGEgcHJvZHVpzIh0IHVuIGVycm9yIGFsIGxsZWdpciAlZCBieXRlcyBlbiBlbCBkaXNwb3NpdGl1IMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiIgotI34gIk5vIHMnaGFuIHBvZ3V0IGVudmlhciBhIGxhIGN1YSBsZXMgbWVtw7JyaWVzIGludGVybcOoZGllcyBlbiBlbCBkaXNwb3NpdGl1ICIKLSN+ICLCqyVzwrsuIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBpbnB1dCBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiRGVzY3JpdSBsJ2VsZW1lbnQgZCdlbnRyYWRhIHNlbGVjY2lvbmF0LiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJEZXNjcml1IGwnZWxlbWVudCBkZSBzb3J0aWRhIHNlbGVjY2lvbmF0IHBlciBhIGxlcyBjb25mZXLDqG5jaWVzIGQnw6B1ZGlvLyIKLSN+ICJ2w61kZW8uIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBvdXRwdXQgZWxlbWVudCBmb3IgTXVzaWMgYW5kIE1vdmllcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJEZXNjcml1IGwnZWxlbWVudCBkZSBzb3J0aWRhIHNlbGVjY2lvbmF0IHBlciBhIGxhIG3DunNpY2EgaSBsZXMgIgotI34gInBlbMK3bMOtY3VsZXMuIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBvdXRwdXQgZWxlbWVudC4iCi0jfiBtc2dzdHIgIkRlc2NyaXUgbCdlbGVtZW50IGRlIHNvcnRpZGEgc2VsZWNjaW9uYXQuIgotCi0jfiBtc2dpZCAiR1N0cmVhbWVyIGF1ZGlvc2luayBmb3IgQXVkaW8vVmlkZW8gQ29uZmVyZW5jaW5nIgotI34gbXNnc3RyICJMJ2F1ZGlvc2luayBkZWwgR1N0cmVhbWVyIHBlciBhIGxlcyBjb25mZXLDqG5jaWVzIGQnw6B1ZGlvL3bDrWRlbyIKLQotI34gbXNnaWQgIkdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIE11c2ljIGFuZCBNb3ZpZXMiCi0jfiBtc2dzdHIgIkwnYXVkaW9zaW5rIGRlbCBHU3RyZWFtZXIgcGVyIGEgbGEgbcO6c2ljYSBpIGxlcyBwZWzCt2zDrWN1bGVzIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcGxheSBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc2luaywgZXNkc2luayBhbmQgYWxzYXNpbmsuIFRoZSBhdWRpb3NpbmsgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkVsIEdTdHJlYW1lciBwb3QgcmVwcm9kdWlyIGwnw6B1ZGlvIHV0aWxpdHphbnQgcXVhbHNldm9sIG5vbWJyZSBkJ2VsZW1lbnRzICIKLSN+ICJkZSBzb3J0aWRhLiBBbGd1bmVzIG9wY2lvbnMgcG9zc2libGVzIHPDs24gbCdvc3NzaW5rLCBsJ2VzZHNpbmsgaSAiCi0jfiAibCdhbHNhc2luay4gTCdhdWRpb3NpbmsgcG90IHNlciB1biBjb25kdWN0ZSBwYXJjaWFsIGVuIGxsb2MgZCd1biBzb2wgIgotI34gImVsZW1lbnQuIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcGxheSB2aWRlbyB1c2luZyBhbnkgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgeHZpbWFnZXNpbmssIHhpbWFnZXNpbmssIHNkbHZpZGVvc2luayBhbmQgYWFzaW5rLiAiCi0jfiAiVGhlIHZpZGVvc2luayBjYW4gYmUgYSBwYXJ0aWFsIHBpcGVsaW5lIGluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFbCBHU3RyZWFtZXIgcG90IHJlcHJvZHVpciBlbCB2w61kZW8gdXRpbGl0emFudCBxdWFsc2V2b2wgbm9tYnJlICIKLSN+ICJkJ2VsZW1lbnRzIGRlIHNvcnRpZGEuIEFsZ3VuZXMgb3BjaW9ucyBwb3NzaWJsZXMgc8OzbiBlbCB4dmltYWdlc2luaywgZWwgIgotI34gInhpbWFnZXNpbmssIGVsIHNkbHZpZGVvc2luayBpIGwnYWFzaW5rLiBFbCB2aWRlb3NpbmsgcG90IHNlciB1biBjb25kdWN0ZSAiCi0jfiAicGFyY2lhbCBlbiBsbG9jIGQndW4gc29sIGVsZW1lbnQuIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcHV0IHZpc3VhbGl6YXRpb24gcGx1Z2lucyBpbiBhIHBpcGVsaW5lIHRvIHRyYW5zZm9ybSBhdWRpbyAiCi0jfiAic3RyZWFtIGluIHZpZGVvIGZyYW1lcy4gRGVmYXVsdCBpcyBnb29tIGJ1dCBtb3JlIHZpc3VhbGl6YXRpb24gcGx1Z2lucyAiCi0jfiAid2lsbCBiZSBwb3J0ZWQgc29vbi4gVGhlIHZpc3VhbGl6YXRpb24gcGx1Z2luIGNhbiBiZSBhIHBhcnRpYWwgcGlwZWxpbmUgIgotI34gImluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJFbCBHU3RyZWFtZXIgcG90IHBvc2FyIGVscyBjb25uZWN0b3JzIGRlIHZpc3VhbGl0emFjacOzIGVuIHVuIGNvbmR1Y3RlIHBlciAiCi0jfiAidHJhbnNmb3JtYXIgZWwgZmx1eCBkJ8OgdWRpbyBlbiBlbHMgZm90b2dyYW1lcyBkZWwgdsOtZGVvLiBQZXIgZGVmZWN0ZSDDqXMgIgotI34gImVsIGdvb20gcGVyw7IgYXZpYXQgcydpbXBvcnRhcmFuIG3DqXMgY29ubmVjdG9ycyBkZSB2aXN1YWxpdHphY2nDsy4gRWwgIgotI34gImNvbm5lY3RvciBkZSB2aXN1YWxpdHphY2nDsyBwb3Qgc2VyIHVuIGNvbmR1Y3RlIHBhcmNpYWwgZW4gbGxvYyBkJ3VuIHNvbCAiCi0jfiAiZWxlbWVudC4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgYXVkaW8gdXNpbmcgYW55IG51bWJlciBvZiBpbnB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc3JjLCBlc2RzcmMgYW5kIGFsc2FzcmMuIFRoZSBhdWRpbyBzb3VyY2UgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkVsIEdTdHJlYW1lciBwb3QgZW5yZWdpc3RyYXIgbCfDoHVkaW8gdXRpbGl0emFudCBxdWFsc2V2b2wgbm9tYnJlICIKLSN+ICJkJ2VsZW1lbnRzIGQnZW50cmFkYS4gQWxndW5lcyBvcGNpb25zIHBvc3NpYmxlcyBzw7NuIGwnb3Nzc3JjLCBsJ2VzZHNyYyBpICIKLSN+ICJsJ2Fsc2FzcmMuIExhIGZvbnQgZCfDoHVkaW8gcG90IHNlciB1biBjb25kdWN0ZSBwYXJjaWFsIGVuIGxsb2MgZCd1biBzb2wgIgotI34gImVsZW1lbnQuIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcmVjb3JkIHZpZGVvIGZyb20gYW55IG51bWJlciBvZiBpbnB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgdjRsc3JjIGFuZCB2aWRlb3Rlc3RzcmMuIFRoZSB2aWRlbyBzb3VyY2UgY2FuIGJlIGEgIgotI34gInBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkVsIEdTdHJlYW1lciBwb3QgZW5yZWdpc3RyYXIgZWwgdsOtZGVvIGRlIHF1YWxzZXZvbCBub21icmUgZCdlbGVtZW50cyAiCi0jfiAiZCdlbnRyYWRhLiBBbGd1bmVzIG9wY2lvbnMgcG9zc2libGVzIHPDs24gZWwgdjRsc3JjIGkgZWwgdmlkZW90ZXN0c3JjLiBMYSAiCi0jfiAiZm9udCBkZWwgdsOtZGVvIHBvdCBzZXIgdW4gY29uZHVjdGUgcGFyY2lhbCBlbiBsbG9jIGQndW4gc29sIGVsZW1lbnQuIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW8gc291cmNlIgotI34gbXNnc3RyICJmb250IGQnw6B1ZGlvIGRlbCBHU3RyZWFtZXIgcGVyIGRlZmVjdGUiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciBhdWRpb3NpbmsiCi0jfiBtc2dzdHIgImF1ZGlvc2luayBkZWwgR1N0cmVhbWVyIHBlciBkZWZlY3RlIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlkZW8gc291cmNlIgotI34gbXNnc3RyICJmb250IGRlIHbDrWRlbyBkZWwgR1N0cmVhbWVyIHBlciBkZWZlY3RlIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlkZW9zaW5rIgotI34gbXNnc3RyICJ2aWRlb3NpbmsgZGVsIEdTdHJlYW1lciBwZXIgZGVmZWN0ZSIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIHZpc3VhbGl6YXRpb24gcGx1Z2luIgotI34gbXNnc3RyICJjb25uZWN0b3IgZGUgdmlzdWFsaXR6YWNpw7MgZGVsIEdTdHJlYW1lciBwZXIgZGVmZWN0ZSIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBBdWRpby9WaWRlbyBDb25mZXJlbmNpbmciCi0jfiBtc2dzdHIgIiIKLSN+ICJkZXNjcmlwY2nDsyBkZSBsJ2F1ZGlvc2luayBkZWwgR1N0cmVhbWVyIHBlciBhIGxlcyBjb25mZXLDqG5jaWVzIGQnw6B1ZGlvLyIKLSN+ICJ2w61kZW8iCi0KLSN+IG1zZ2lkICJkZXNjcmlwdGlvbiBmb3IgR1N0cmVhbWVyIGF1ZGlvc2luayBmb3IgTXVzaWMgYW5kIE1vdmllcyIKLSN+IG1zZ3N0ciAiIgotI34gImRlc2NyaXBjacOzIGRlIGwnYXVkaW9zaW5rIGRlbCBHU3RyZWFtZXIgcGVyIGEgbGEgbcO6c2ljYSBpIGxlcyBwZWzCt2zDrWN1bGVzIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc2luayIKLSN+IG1zZ3N0ciAiZGVzY3JpcGNpw7MgZGUgbCdhdWRpb3NpbmsgZGVsIEdTdHJlYW1lciBwZXIgZGVmZWN0ZSIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBkZWZhdWx0IEdTdHJlYW1lciBhdWRpb3NyYyIKLSN+IG1zZ3N0ciAiZGVzY3JpcGNpw7MgZGUgbCdhdWRpb3NyYyBkZWwgR1N0cmVhbWVyIHBlciBkZWZlY3RlIgpkaWZmIC0tZ2l0IGEvcG8vY3MuZ21vIGIvcG8vY3MuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjM5ZDY3Li4wMDAwMDAwCi0tLSBhL3BvL2NzLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2NzLnBvIGIvcG8vY3MucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NDZhYjAuLjAwMDAwMDAKLS0tIGEvcG8vY3MucG8KKysrIC9kZXYvbnVsbApAQCAtMSw0MzMgKzAsMCBAQAotIyBDemVjaCB0cmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kLgotIyBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgdGhlIGF1dGhvcihzKSBvZiBnc3QtcGx1Z2lucy1nb29kLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4sIDIwMDQuCi0jIFBldHIgS292YXIgPHBrbmJlQHZvbG55LmN6PiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMS4KLSMgTWFyZWsgxIxlcm5vY2vDvSA8bWFyZWtAbWFuZXQuY3o+LCAyMDEzLCAyMDE1LCAyMDE2LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZC0xLjcuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTAyLTI3IDE2OjQwKzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IE1hcmVrIMSMZXJub2Nrw70gPG1hcmVrQG1hbmV0LmN6PlxuIgotIkxhbmd1YWdlLVRlYW06IEN6ZWNoIDx0cmFuc2xhdGlvbi10ZWFtLWNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogY3NcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSkgPyAwIDogKG4+PTIgJiYgbjw9NCkgPyAxIDogMjtcbiIKLSJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS42XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIlNlcnZlciBKYWNrIG5lYnlsIG5hbGV6ZW4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIlNlbGhhbG8gZGVrw7Nkb3bDoW7DrSBvYnLDoXprdSBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLigJ4lc+KAnCBvZCDigJ4lc+KAnCIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiTmV6ZGHFmWlsbyBzZSBzcG9qZW7DrSBzZSBzZXJ2ZXJlbSIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJOZW7DrSBuYXN0YXZlbmEgxb7DoWRuw6EgYWRyZXNhIFVSTC4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiU2VydmVyIG5lcG9kcG9ydWplIHDFmWVza2Frb3bDoW7DrS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIk5lemRhxZlpbCBzZSBwxZlla2xhZCBuw6F6dnUgc2VydmVydS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiTmV6ZGHFmWlsbyBzZSBuYXbDoXrDoW7DrSBzcG9qZW7DrSBzZSBzZXJ2ZXJlbS4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJTZWxoYWxvIG5hc3RhdmVuw60gemFiZXpwZcSNZW7DqWhvIHDFmWlwb2plbsOtLiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIkRvxaFsbyBrIGNoeWLEmyBzw610xJsgbmVibyBzZXJ2ZXIgbmVvxI1la8OhdmFuxJsgdWtvbsSNaWwgc3BvamVuw60uIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICJTZXJ2ZXIgb2Rlc2xhbCBjaHlibsOhIGRhdGEuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICLFvcOhZG7DvSBuZWJvIG5lcGxhdG7DvSB6dnVrb3bDvSB2c3R1cCwgcHJvdWQgQVZJIGJ1ZGUgcG/FoWtvemVuLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiVGVudG8gc291Ym9yIG5lb2JzYWh1amUgaHJhdGVsbsOpIHByb3VkeS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlRlbnRvIHNvdWJvciBqZSBuZXBsYXRuw70gYSBuZWx6ZSBqZWogcMWZZWhyw6F0LiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICJOZWx6ZSBwxZllaHLDoXQgcHJvdWQsIHByb3Rvxb5lIGplIMWhaWZyb3bDoW4gcG9tb2PDrSBEUk0gUGxheVJlYWR5LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiVGVudG8gc291Ym9yIGplIHBvxaFrb3plbiBhIG5lbHplIGplaiBwxZllaHLDoXQuIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICJOZXBsYXRuw6EgYXRvbWlja8OhIHZlbGlrb3N0LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiVGVudG8gc291Ym9yIG5lbsOtIMO6cGxuw70gYSBuZWx6ZSBqZWogcMWZZWhyw6F0LiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiVmlkZW8gdiB0b210byBzb3Vib3J1IHNlIG5lbXVzw60gcMWZZWhyw6F0IHNwcsOhdm7Emy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiVGVudG8gc291Ym9yIG9ic2FodWplIHDFmcOtbGnFoSBtbm9obyBwcm91ZMWvLiBQxZllaHLDoXbDoSBzZSBwb3V6ZSBwcnZuw60gJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk5lYnlsIG5hbGV6ZW4gxb7DoWRuw70gcG9kcG9yb3ZhbsO9IHByb3VkLiBCdWRlIHBhdHJuxJsgbnV0bsOpIG5haW5zdGFsb3ZhdCAiCi0iesOhc3V2bsO9IG1vZHVsIHJvesWhw63FmWVuw60gR1N0cmVhbWVyIFJUU1AgcHJvIG11bHRpbWVkacOhbG7DrSBwcm91ZHkgUmVhbC4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJOZWJ5bCBuYWxlemVuIMW+w6FkbsO9IHBvZHBvcm92YW7DvSBwcm91ZC4gUGF0cm7EmyBidWRlIG51dG7DqSBwb3ZvbGl0IHbDrWNlICIKLSJwxZllbm9zb3bDvWNoIHByb3Rva29sxa8sIGppbmFrIG5lanNww63FoSBidWRlIHNjaMOhemV0IHBvdMWZZWJuw70gesOhc3V2bsO9IG1vZHVsICIKLSJyb3rFocOtxZllbsOtIEdTdHJlYW1lciBSVFNQLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJadnVrb3bDqSB6YcWZw616ZW7DrSBuZWx6ZSBvdGV2xZnDrXQgcHJvIHDFmWVocsOhdsOhbsOtLiBaYcWZw616ZW7DrSBqZSBwb3XFvsOtdsOhbm8gamlub3UgIgotImFwbGlrYWPDrS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIlp2dWtvdsOpIHphxZnDrXplbsOtIG5lbHplIG90ZXbFmcOtdCBwcm8gcMWZZWhyw6F2w6Fuw60uIE5lbcOhdGUgb3Byw6F2bsSbbsOtIGsgb3RldsWZZW7DrSAiCi0iemHFmcOtemVuw60uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIlp2dWtvdsOpIHphxZnDrXplbsOtIG5lbHplIG90ZXbFmcOtdCBwcm8gxI10ZW7DrS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTmV6ZGHFmWlsbyBzZSBvdGV2xZllbsOtIHp2dWtvdsOpaG8gemHFmcOtemVuw60gcHJvIHDFmWVocsOhdsOhbsOtLiBUYXRvIHZlcnplIE9wZW4gIgotIlNvdW5kIFN5c3RlbSBuZW7DrSBwxZnDrXNsdcWhbsO9bSBwcnZrZW0gcG9kcG9yb3bDoW5hLiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJQxZllaHLDoXbDoW7DrSBuZW7DrSB0w61tdG8genZ1a292w71tIHphxZnDrXplbsOtbSBwb2Rwb3JvdsOhbm8uIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJDaHliYSBwxZllaHLDoXbDoW7DrSB6dnVrdS4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIlRvdG8genZ1a292w6kgemHFmcOtemVuw60gbmVwb2Rwb3J1amUgbmFocsOhdsOhbsOtLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkNoeWJhIHDFmWkgbmFocsOhdsOhbsOtIHplIHp2dWtvdsOpaG8gemHFmcOtemVuw60uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iWnZ1a292w6kgemHFmcOtemVuw60gbmVsemUgb3RldsWZw610IHBybyBuYWhyw6F2w6Fuw60uIE5lbcOhdGUgb3Byw6F2bsSbbsOtIGsgb3RldsWZZW7DrSAiCi0iemHFmcOtemVuw60uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJadnVrb3bDqSB6YcWZw616ZW7DrSBuZWx6ZSBvdGV2xZnDrXQgcHJvIG5haHLDoXbDoW7DrS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiTmVieWxvIG5hbGV6ZW5vIHphxZnDrXplbsOtIENvcmVBdWRpbyIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiTmVsemUgb3RldsWZw610IHphxZnDrXplbsOtIENvcmVBdWRpbyIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIlpkcm9qIG5haHLDoXbDoW7DrSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9uIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTGlua292w70gdnN0dXAiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiSW50ZXJuw60gQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiVnN0dXAgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiVnN0dXAgQVVYIDEiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiVnN0dXAgQVVYIDIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiS29kZWtvdsOhIHNtecSNa2EiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlNtecSNa2EgU3VuVlRTIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJIbGFzaXRvc3QiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJaZXPDrWxlbsOtIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIlphYnVkb3ZhbsO9IHJlcHJvZHVrdG9yIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJTbHVjaMOhdGtvIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIkxpbmtvdsO9IHbDvXN0dXAiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlbDvXN0dXAgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIlbDvXN0dXAgQVVYIDEiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIlbDvXN0dXAgQVVYIDIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQ2h5YmEgcMWZaSDEjXRlbsOtICVkIGJhanTFryBuYSB6YcWZw616ZW7DrSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSJTZWxoYWxvIHZ5dHZvxZllbsOtIHNlem5hbXUgbW/Fvm7DvWNoIGZvcm3DoXTFryB2aWRlYSwgc2Uga3RlcsO9bWkgdW3DrSB6YcWZw616ZW7DrSAiCi0i4oCeJXPigJwgcHJhY292YXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIk5lemRhxZlpbG8gc2UgbWFwb3bDoW7DrSB2eXJvdm7DoXZhY8OtIHBhbcSbdGkgemUgemHFmcOtemVuw60g4oCeJXPigJwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIk92bGFkYcSNIHphxZnDrXplbsOtIOKAniVz4oCcIG5lcG9kcG9ydWplIFYvViBtZXRvZHUgJWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICJPdmxhZGHEjSB6YcWZw616ZW7DrSDigJ4lc+KAnCBuZXBvZHBvcnVqZSDFvsOhZG5vdSB6bsOhbW91IFYvViBtZXRvZHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIlphxZnDrXplbsOtIOKAniVz4oCcIGplIHphbmVwcsOhemRuxJtubyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiWmHFmcOtemVuw60g4oCeJXPigJwgbmV1bcOtIHphY2h5dMOhdmF0IHYgcm96bcSbcnUgJWTigK/Dl+KAryVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJaYcWZw616ZW7DrSDigJ4lc+KAnCBuZXVtw60gemFjaHl0w6F2YXQgdiB0b210byBrb25rcsOpdG7DrW0gZm9ybcOhdHUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiWmHFmcOtemVuw60g4oCeJXPigJwgbmVwb2Rwb3J1amUgbmVzb3VzZWTDrWPDrSBzbG/Fvmt5IG9icmF6dSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIk5lemRhxZlpbG8gc2UgemppxaF0xJtuw60gcGFyYW1ldHLFryBuYSB6YcWZw616ZW7DrSDigJ4lc+KAnCIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmlkZW96YcWZw616ZW7DrSBuZXDFmWlqYWxvIG5vdsOpIG5hc3RhdmVuw60gc27DrW1rb3bDqSByeWNobG9zdGkuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiVmlkZW96YcWZw616ZW7DrSBuZXBvc2t5dHVqZSB2w71zdHVwbsOtIGZvcm3DoXQuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIlZpZGVvemHFmcOtemVuw60gc2TEm2xpbG8gbmVwbGF0bsOpIHJvem3Em3J5LiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICJWaWRlb3phxZnDrXplbsOtIHBvdcW+w612w6EgbmVwb2Rwb3JvdmFub3UgbWV0b2R1IHByb2tsw6Fkw6Fuw60uIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvemHFmcOtemVuw60gcG91xb7DrXbDoSBuZXBvZHBvcm92YW7DvSByYXN0cm92w70gZm9ybcOhdC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiU2VsaGFsbyBuYXN0YXZlbsOtIHZuaXTFmW7DrSBzcG9sZcSNbsOpIHZ5cm92bsOhdmFjw60gcGFtxJt0aS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIlZpZGVvemHFmcOtemVuw60gbmVkb3BvcnXEjXVqZSBuaWpha291IHZlbGlrb3N0IHZ5cm92bsOhdmFjw60gcGFtxJt0aS4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICJOZWV4aXN0dWplIMW+w6FkbsO9IHNwb2xlxI1uw70gcHJvdWQgZGF0LCB6ZSBrdGVyw6lobyBieSDFoWxvIGltcG9ydG92YXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJTZWxoYWxvIHpqacWhdMSbbsOtIG5hc3RhdmVuw60gdHVuZXJ1ICVkIHUgemHFmcOtemVuw60g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkNoeWJhIHDFmWkgemppxaHFpW92w6Fuw60gc2Nob3Bub3N0w60gemHFmcOtemVuw60g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiWmHFmcOtemVuw60g4oCeJXPigJwgbmVuw60gdHVuZXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiU2VsaGFsbyB6w61za8OhbsOtIHLDoWRpb3bDqWhvIHZzdHVwdSB1IHphxZnDrXplbsOtIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIk5lemRhxZlpbG8gc2UgbmFzdGF2ZW7DrSB2c3R1cHUgJWQgdSB6YcWZw616ZW7DrSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlNlbGhhbGEgem3Em25hIHN0YXZ1IHphcG51dMOtL3Z5cG51dMOtIHp2dWt1IHUgemHFmcOtemVuw60g4oCeJXPigJwuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJTZWxoYWxvIHDFmWlkxJtsZW7DrSBwb8W+YWRvdmFuw6kgcGFtxJt0aS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiU2VsaGFsbyBwxZlpZMSbbGVuw60gcG/FvmFkb3ZhbsOpIHBhbcSbdGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIlDFmWV2b2Ruw61rIG5hIHphxZnDrXplbsOtIOKAniVz4oCcIG5lcG9kcG9ydWplIHZzdHVwbsOtIGZvcm3DoXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIlDFmWV2b2Ruw61rIG5hIHphxZnDrXplbsOtIOKAniVz4oCcIG5lcG9kcG9ydWplIHbDvXN0dXBuw60gZm9ybcOhdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiS29kw6lyIG5hIHphxZnDrXplbsOtIOKAniVz4oCcIG5lcG9kcG9ydWplIHZzdHVwbsOtIGZvcm3DoXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJLb2TDqXIgbmEgemHFmcOtemVuw60g4oCeJXPigJwgbmVwb2Rwb3J1amUgdsO9c3R1cG7DrSBmb3Jtw6F0IgotCi1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIlNlbGhhbG8gc3B1xaF0xJtuw60gdmzDoWtuYSBkZWtvZMOpcnUuIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICJTZWxoYWxvIHpwcmFjb3bDoW7DrSBzbsOtbWt1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSJDaHliYSBwxZlpIHrDrXNrw6F2w6Fuw60gaW5mb3JtYWPDrSBvIHNjaG9wbm9zdGVjaCB1IHphxZnDrXplbsOtIOKAniVz4oCcOiBOZWplZG7DoSBzZSBvICIKLSJvdmxhZGHEjSB2NGwyLiBaa29udHJvbHVqdGUsIHpkYSBzZSBuZWplZG7DoSBvIG92bGFkYcSNIHY0bDEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTmV6ZGHFmWlsbyBzZSBkb3TDoXrDoW7DrSBuYSB2bGFzdG5vc3RpIHZzdHVwdSAlZCB1IHphxZnDrXplbsOtIOKAniVz4oCcIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlNlbGhhbG8gemppxaF0xJtuw60gbmFzdGF2ZW7DrSB0dW5lcnUgJWQgdSB6YcWZw616ZW7DrSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZXpkYcWZaWxvIHNlIGRvdMOhesOhbsOtIG5hIG5vcm11IG5hIHphxZnDrXplbsOtIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmV6ZGHFmWlsbyBzZSB6amnFoXTEm27DrSB2bGFzdG5vc3TDrSBvdmzDoWRhY8OtY2ggcHJ2a8WvIHUgemHFmcOtemVuw60g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lemRhxZlpbG8gc2Ugcm96cG96bmF0IHphxZnDrXplbsOtIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJUb3RvIG5lbsOtIHphxZnDrXplbsOtIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5lemRhxZlpbG8gc2Ugb3RldsWZw610IHphxZnDrXplbsOtIOKAniVz4oCcIHBybyDEjXRlbsOtIGEgesOhcGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIlphxZnDrXplbsOtIOKAniVz4oCcIG5lbsOtIHphY2h5dMOhdmFjw61tIHphxZnDrXplbsOtbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIlphxZnDrXplbsOtIOKAniVz4oCcIG5lbsOtIHbDvXN0dXBuw61tIHphxZnDrXplbsOtbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIlphxZnDrXplbsOtIOKAniVz4oCcIG5lbsOtIHphxZnDrXplbsOtbSBNMk0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOZXpkYcWZaWxvIHNlIGR1cGxpa292YXQgemHFmcOtemVuw60g4oCeJXPigJwgcHJvIMSNdGVuw60gYSB6w6FwaXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJTZWxoYWxvIG5hc3RhdmVuw60gbm9ybXkgdSB6YcWZw616ZW7DrSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJTZWxoYWxvIHpqacWhdMSbbsOtIGFrdHXDoWxuw60gZnJla3ZlbmNlIHR1bmVydSB1IHphxZnDrXplbsOtIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICJTZWxoYWxvIG5hc3RhdmVuw60gYWt0dcOhbG7DrSBmcmVrdmVuY2UgdHVuZXJ1IHUgemHFmcOtemVuw60g4oCeJXPigJwgbmEgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJTZWxoYWxvIHpqacWhdMSbbsOtIHPDrWx5IHNpZ27DoWx1IHUgemHFmcOtemVuw60g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJTZWxoYWxvIHpqacWhdMSbbsOtIGhvZG5vdHkgdSBvdmzDoWRhY8OtaG8gcHJ2a3UgJWQgbmEgemHFmcOtemVuw60g4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJTZWxoYWxvIG5hc3RhdmVuw60gaG9kbm90eSAlZCB1IG92bMOhZGFjw61obyBwcnZrdSAlZCBuYSB6YcWZw616ZW7DrSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJTZWxoYWxvIHrDrXNrw6Fuw60gYWt0dcOhbG7DrWhvIHZzdHVwdSBuYSB6YcWZw616ZW7DrSDigJ4lc+KAnC4gTW/Fvm7DoSBzZSBqZWRuw6EgbyAiCi0icmFkaW9wxZlpasOtbWHEjS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIlNlbGhhbG8gesOtc2vDoW7DrSBha3R1w6FsbsOtaG8gdsO9c3R1cHUgbmEgemHFmcOtemVuw60g4oCeJXPigJwuIE1vxb5uw6Egc2UgamVkbsOhIG8gIgotInJhZGlvcMWZaWrDrW1hxI0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiU2VsaGFsbyBuYXN0YXZlbsOtIHbDvXN0dXB1ICVkIG5hIHphxZnDrXplbsOtICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlptxJtuYSByb3psacWhZW7DrSB6YSBixJtodSB6YXTDrW0gbmVuw60gcG9kcG9yb3bDoW5hLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiTmVuw60gbW/Fvm7DqSBmdW5nb3ZhdCBiZXogaG9kaW4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlZuaXTFmW7DrSBjaHliYSBkYXRvdsOpaG8gcHJvdWR1LiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi0jfiBtc2dzdHIgIlZuaXTFmW7DrSBjaHliYSBkYXRvdsOpaG8gdG9rdS4iCmRpZmYgLS1naXQgYS9wby9kYS5nbW8gYi9wby9kYS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MzBmMjkuLjAwMDAwMDAKLS0tIGEvcG8vZGEuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZGEucG8gYi9wby9kYS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMyMjFjMS4uMDAwMDAwMAotLS0gYS9wby9kYS5wbworKysgL2Rldi9udWxsCkBAIC0xLDQzOCArMCwwIEBACi0jIERhbmlzaCB0cmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kLgotIyBDb3B5cmlnaHQgKEMpIDIwMTYgZ3N0LgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBNb2dlbnMgSmFlZ2VyIDxtb2dlbnNAamFlZ2VyLnRmPiwgMjAwNy4KLSMgSm9lIEhhbnNlbiA8am9lZGFsdG9uMkB5YWhvby5kaz4sIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYuCi0jCi0jIGdhaW4gLT4gZm9yaMO4amVsc2UKLSMgYm9vc3QgLT4gw7hnbmluZz8KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QtMS43LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMy0yNyAyMzo1NCswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBKb2UgSGFuc2VuIDxqb2VkYWx0b24yQHlhaG9vLmRrPlxuIgotIkxhbmd1YWdlLVRlYW06IERhbmlzaCA8ZGFuc2tAZGFuc2stZ3J1cHBlbi5kaz5cbiIKLSJMYW5ndWFnZTogZGFcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiSmFjay1zZXJ2ZXIgYmxldiBpa2tlIGZ1bmRldCIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiTWlzbHlra2VkZXMgaSBhdCBhZmtvZGUgSlBFRy1iaWxsZWRlIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLCuyVzwqsgYWYgwrslc8KrIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJLdW5uZSBpa2tlIGZvcmJpbmRlIHRpbCBzZXJ2ZXIiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiSW5nZW4gYWRyZXNzZSBhbmdpdmV0LiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJTZXJ2ZXIgdW5kZXJzdMO4dHRlciBpa2tlIHPDuGduaW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzbMOlIHNlcnZlcm5hdm4gb3AuIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugc2thYmUga29udGFrdCB0aWwgc2VydmVyZW4uIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiT3Bzw6Z0bmluZyBhZiBzaWtrZXIgZm9yYmluZGVsc2UgbWlzbHlra2VkZXMuIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotIkRlciBvcHN0b2QgZW4gbmV0dsOmcmtzZmVqbCwgZWxsZXIgc2VydmVyZW4gbHVra2VkZSB1dmVudGV0IGZvcmJpbmRlbHNlbi4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIlNlcnZlciBzZW5kdGUgdWd5bGRpZ2UgZGF0YS4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIkluZ2VuIGVsbGVyIGRlZmVrdCBpbmRkYXRhbHlkLCBBVkktc2VrdmVucyB2aWwgYmxpdmUgw7hkZWxhZ3QuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJEZW5uZSBmaWwgaW5kZWhvbGRlciBpbmdlbiBzcGlsYmFyIHN0csO4bS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkRlbm5lIGZpbCBlciB1ZnVsZHN0w6ZuZGlnIG9nIGthbiBpa2tlIGFmc3BpbGxlcy4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiS2FuIGlra2UgYWZzcGlsbGUgc3Ryw7htLCBkYSBkZW4gZXIga3J5cHRlcmV0IG1lZCBQbGF5UmVhZHkgRFJNLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGVubmUgZmlsIGVyIMO4ZGVsYWd0IG9nIGthbiBpa2tlIGFmc3BpbGxlcy4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIlVneWxkaWcgYXRvbXN0w7hycmVsc2UuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEZW5uZSBmaWwgZXIgdWZ1bGRzdMOmbmRpZyBvZyBrYW4gaWtrZSBhZnNwaWxsZXMuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJWaWRlb2VuIGkgZGVubmUgZmlsIGFmc3BpbGxlcyBtw6Vza2UgaWtrZSBrb3JyZWt0LiIKLQotIyBodmFkIGVyICVkIGkgZGV0dGUgcHJvZ3JhbT8gVW1pZGRlbGJhcnQgdmlsbGUgamVnIHRybyBkZXQgc2t1bGxlCi0jIGhlZGRlLCAiQWZwaWxsZXIga3VuIGbDuHJzdGUgJWQiIG1lbiBkZXQga29tbWVyIHNlbHZmw7hsZ2VsaWcgYW4gcMOlIAotIyBzYW1tZW5ow6ZuZ2VuLgotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICJEZW5uZSBmaWwgaW5kZWhvbGRlciBmb3IgbWFuZ2Ugc3Ryw7htbWUuIEFmc3BpbCBmw7hyc3Qga3VuICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJJbmdlbiB1bmRlcnN0w7h0dGV0IHN0csO4bSBibGV2IGZ1bmRldC4gRHUgc2thbCBtw6Vza2UgaW5zdGFsbGVyZSBldCAiCi0idWR2aWRlbHNlc21vZHVsIGZvciBHU3RyZWFtZXIgUlRTUCB0aWwgUmVhbCBtZWRpYS1zdHLDuG1tZS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJJbmdlbiB1bmRlcnN0w7h0dGV0IHN0csO4bSBibGV2IGZ1bmRldC4gRHUgbWFuZ2xlciBtw6Vza2UgYXQgdGlsbGFkZSB5ZGVybGlnZXJlICIKLSJ0cmFuc3BvcnRwcm90b2tvbGxlciBlbGxlciBtYW5nbGVyIG3DpXNrZSBkZXQga29ycmVrdGUgdWR2aWRlbHNlc21vZHVsIHRpbCAiCi0iR1N0cmVhbWVyIFJUU1AuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIkt1bm5lIGlra2Ugw6VibmUgbHlkZW5oZWQgdGlsIGFmc3BpbG5pbmcuIEVuaGVkZW4gYW52ZW5kZXMgYWYgZXQgYW5kZXQgIgotInByb2dyYW0uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJLdW5uZSBpa2tlIMOlYm5lIGx5ZGVuaGVkIHRpbCBhZnNwaWxuaW5nLiBEdSBoYXIgaWtrZSByZXR0aWdoZWQgdGlsIGF0IMOlYm5lICIKLSJlbmhlZGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJLdW5uZSBpa2tlIMOlYm5lIGVuaGVkIHRpbCBhZnNwaWxuaW5nLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJLdW5uZSBpa2tlIMOlYm5lIGx5ZGVuaGVkIHRpbCBhZnNwaWxuaW5nLiBEZW5uZSB2ZXJzaW9uIGFmIE9wZW4gU291bmQgU3lzdGVtICIKLSJlciBpa2tlIHVuZGVyc3TDuHR0ZXQgYWYgZGV0dGUgZWxlbWVudC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQWZzcGlsbmluZyBlciBpa2tlIHVuZGVyc3TDuHR0ZXQgYWYgZGVubmUgbHlkZW5oZWQuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJGZWpsIHZlZCBseWRhZnNwaWxuaW5nLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiT3B0YWdlbHNlIGVyIGlra2UgdW5kZXJzdMO4dHRldCBhZiBkZW5uZSBseWRlbmhlZC4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJGZWpsIHZlZCBvcHRhZ2Vsc2UgZnJhIGx5ZGVuaGVkLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIkt1bm5lIGlra2Ugw6VibmUgbHlkZW5oZWQgdGlsIG9wdGFnZWxzZS4gRHUgaGFyIGlra2UgcmV0dGlnaGVkIHRpbCBhdCDDpWJuZSAiCi0iZW5oZWRlbi4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugw6VibmUgbHlkZW5oZWQgdGlsIG9wdGFnZWxzZS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiQ29yZUF1ZGlvLWVuaGVkIGJsZXYgaWtrZSBmdW5kZXQiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIkNvcmVBdWRpby1lbmhlZCBrdW5uZSBpa2tlIMOlYm5lcyIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIk9wdGFnZWxzZXNraWxkZSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9uIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTGluamUgaW5kIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkludGVybiBjZCIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICJTUERJRiBpbmQiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiQVVYIDEgaW5kIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIGluZCIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJDb2RlYy1sb29wYmFjayIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiU3VuVlRTLWxvb3BiYWNrIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJMeWRzdHlya2UiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJGb3Jow7hqZWxzZSIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk1vbml0b3IiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICJJbmRieWdnZXQgaMO4anRhbGVyIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJIb3ZlZHRlbGVmb24iCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiTGluamUgdWQiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElGIHVkIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMSB1ZCIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYIDIgdWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmVqbCB2ZWQgbMOmc25pbmcgYWYgJWQgYnl0ZSBww6UgZW5oZWQgwrslc8KrLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotIkt1bm5lIGlra2UgbnVtbWVyZXJlIG11bGlnIHZpZGVvZm9ybWF0ZXIgc29tIGVuaGVkIMK7JXPCqyBrYW4gZnVuZ2VyZSBtZWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIkt1bm5lIGlra2UgYWZiaWxkZSBtZWxsZW1sYWdlciBmcmEgZW5oZWQgwrslc8KrIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICJEcml2ZXJlbiB0aWwgZW5oZWQgwrslc8KrIHVuZGVyc3TDuHR0ZXIgaWtrZSBJTy1tZXRvZGVuICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiRHJpdmVyZW4gdGlsIGVuaGVkIMK7JXPCqyB1bmRlcnN0w7h0dGVyIGluZ2VuIGtlbmR0IElPLW1ldG9kZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiRW5oZWRlbiDCuyVzwqsgZXIgb3B0YWdldCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiRW5oZWRlbiDCuyVzwqsga2FuIGlra2Ugb3B0YWdlIG1lZCAlZHglZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiRW5oZWRlbiDCuyVzwqsga2FuIGlra2Ugb3B0YWdlIGkgZGV0IGFuZ2l2bmUgZm9ybWF0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIkVuaGVkZW4gwrslc8KrIHVuZGVyc3TDuHR0ZXIgaWtrZSBwbGFuZXIsIGRlciBpa2tlIGjDpm5nZXIgc2FtbWVuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiS3VubmUgaWtrZSBoZW50ZSBwYXJhbWV0cmUgZnJhIGVuaGVkIMK7JXPCqyIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmlkZW9lbmhlZGVuIGFjY2VwdGVyZWRlIGlra2UgbnkgaW5kc3RpbGxpbmcgZm9yIGJpbGxlZHJhdGUuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiVmlkZW9lbmhlZGVuIGFuZ2F2IGlra2UgdWRkYXRhZm9ybWF0LiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICJWaWRlb2VuaGVkIHJldHVybmVyZWRlIHVneWxkaWdlIGRpbWVuc2lvbmVyLiIKLQotIyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVybGFjZWRfdmlkZW8KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiVmlkZW9lbmhlZGVyIGJydWdlciBlbiBpbnRlcmxhY2UtbWV0b2RlLCBkZXIgaWtrZSBlciB1bmRlcnN0w7h0dGV0LiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJWaWRlb2VuaGVkZXIgYnJ1Z2VyIGV0IGJpbGxlZHB1bmt0c2Zvcm1hdCwgZGVyIGlra2UgZXIgdW5kZXJzdMO4dHRldC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBrb25maWd1cmVyZSBpbnRlcm4gbWVsbGVtbGFnZXJrw7guIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICJWaWRlb2VuaGVkIGZvcmVzbG9nIGlra2UgZW4gbWVsbGVtbGFnZXJzdMO4cnJlbHNlLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIkluZ2VuIG5lZHN0csO4bXNrw7ggYXQgaW1wb3J0ZXJlIGZyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkhlbnRuaW5nIGFmIGluZHN0aWxsaW5nZXIgZm9yIHR1bmVyICVkIHDDpSBlbmhlZCDCuyVzwqsgZmVqbGVkZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmVqbCB1bmRlciBoZW50bmluZyBhZiBrYXBhY2l0ZXRlciBmb3IgZW5oZWQgwrslc8KrLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkVuaGVkIMK7JXPCqyBlciBpa2tlIGVuIHR1bmVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIkt1bm5lIGlra2UgaGVudGUgcmFkaW9pbmRkYXRhIGZvciBlbmhlZCDCuyVzwqsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzw6Z0dGUgaW5kZGF0YSAlZCBmb3IgZW5oZWQgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJLdW5uZSBpa2tlIMOmbmRyZSB0aWxzdGFuZCBmb3IgdMOmbmsvc2x1dCBmb3IgZW5oZWQgwrslc8KrLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZWQgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBhbGxva2VyZSBkZW4ga3LDpnZlZGUgaHVrb21tZWxzZS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBhbGxva2VyZSBkZW4ga3LDpnZlZGUgaHVrb21tZWxzZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIktvbnZlcnRlcmluZ3Nwcm9ncmFtIHDDpSBlbmhlZCAlcyBoYXIgaWtrZSBldCB1bmRlcnN0w7h0dGV0IGluZGRhdGFmb3JtYXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvbnZlcnRlcmluZ3Nwcm9ncmFtIHDDpSBlbmhlZCAlcyBoYXIgaWtrZSBldCB1bmRlcnN0w7h0dGV0IHVkZGF0YWZvcm1hdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiS29kZXIgcMOlIGVuaGVkICVzIGhhciBpa2tlIGV0IHVuZGVyc3TDuHR0ZXQgaW5kZGF0YWZvcm1hdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvZGVyIHDDpSBlbmhlZCAlcyBoYXIgaWtrZSBldCB1bmRlcnN0w7h0dGV0IHVkZGF0YWZvcm1hdCIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJLdW5uZSBpa2tlIHN0YXJ0ZSBhZmtvZG5pbmcgYWYgdHLDpWQuIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICJLdW5uZSBpa2tlIGJlaGFuZGxlIGJpbGxlZC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iRmVqbCB2ZWQgaGVudG5pbmcgYWYgZWdlbnNrYWJlciBmb3IgZW5oZWQgwrslc8KrOiBEZXQgZXIgaWtrZSBlbiB2NDEyIGRyaXZlci4gIgotIktvbnRyb2xsZXIgb20gZGV0IGVyIGVuIHY0MTEgZHJpdmVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIkxpc3RuaW5nIGFmIGluZGRhdGEtYXR0cmlidXR0ZXIgZm9yICVkIGkgZW5oZWQgJXMgZmVqbGVkZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJIZW50bmluZyBhZiBpbmRzdGlsbGluZ2VyIGZvciB0dW5lciAlZCBww6UgZW5oZWQgwrslc8KrIGZlamxlZGUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTGlzdG5pbmcgYWYgc3RhbmRhcmQgcMOlIGVuaGVkIMK7JXPCqyBmZWpsZWRlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiSGVudG5pbmcgYWYga29udHJvbGF0dHJpYnV0dGVyIGZvciBlbmhlZCDCuyVzwqsgZmVqbGVkZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2FuIGlra2UgaWRlbnRpZmljZXJlIGVuaGVkIMK7JXPCqy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRGV0dGUgZXIgaWtrZSBlbiBlbmhlZHMgwrslc8KrLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkt1bm5lIGlra2UgdGlsZ8OlIGVuaGVkIMK7JXPCqy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJFbmhlZCDCuyVzwqsgZXIgaWtrZSBlbiBvcHRhZ2VlbmhlZC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkVuaGVkIMK7JXPCqyBlciBpa2tlIGVuIHVkZGF0YWVuaGVkLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiRW5oZWQgwrslc8KrIGVyIGlra2UgZW4gTTJNLWVuaGVkLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBkdXAgZW5oZWQgwrslc8KrIGZvciBsw6ZzbmluZyBvZyBza3Jpdm5pbmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJJbmRzdGlsbGluZyBhZiBzdGFuZGFyZCBmb3IgZW5oZWQgwrslc8KrIGZlamxlZGUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBoZW50ZSBudXbDpnJlbmRlIHR1bmVyLWZyZWt2ZW5zIGZvciBlbmhlZCDCuyVzwqsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugc8OmdHRlIG51dsOmcmVuZGUgdHVuZXItZnJla3ZlbnMgZm9yIGVuaGVkIMK7JXPCqyB0aWwgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIHNpZ25hbHN0eXJrZSBmb3IgZW5oZWQgwrslc8KrLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBoZW50ZSB2w6ZyZGkgYWYga29udHJvbCAlZCBmb3IgZW5oZWQgwrslc8KrLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzw6Z0dGUgdsOmcmRpICVkIHDDpSBrb250cm9sICVkIGZvciBlbmhlZCDCuyVzwqsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iS3VubmUgaWtrZSBoZW50ZSBudXbDpnJlbmRlIGluZGRhdGEgZm9yIGVuaGVkIMK7JXPCqy4gTcOlc2tlIGVyIGRldCBlbiByYWRpb2VuaGVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJLdW5uZSBpa2tlIGhlbnRlIG51dsOmcmVuZGUgdWRkYXRhIGZvciBlbmhlZCDCuyVzwqsuIE3DpXNrZSBlciBkZXQgZW4gcmFkaW9lbmhlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJLdW5uZSBpa2tlIHPDpnR0ZSB1ZGRhdGEgJWQgZm9yIGVuaGVkICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIsOGbmRyaW5nIGFmIG9wbMO4c25pbmcgdW5kZXIga8O4cnNlbCBlciBlbmRudSBpa2tlIHVuZGVyc3TDuHR0ZXQuIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICJLYW4gaWtrZSBmdW5nZXJlIHVkZW4gZXQgdXIiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybiBkYXRhc3Ryw7htc2ZlamwuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiSW50ZXJuIGRhdGFzdHLDuG1zZmVqbC4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkVuaGVkZW4gwrslc8KrIHVuZGVyc3TDuHR0ZXIgaWtrZSB2aWRlb29wdGFnZWxzZSIKZGlmZiAtLWdpdCBhL3BvL2RlLmdtbyBiL3BvL2RlLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkzMDNhNC4uMDAwMDAwMAotLS0gYS9wby9kZS5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9kZS5wbyBiL3BvL2RlLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjRhNzIxLi4wMDAwMDAwCi0tLSBhL3BvL2RlLnBvCisrKyAvZGV2L251bGwKQEAgLTEsODM3ICswLDAgQEAKLSMgR2VybWFuIHRyYW5zbGF0aW9ucyBmb3IgZ3N0LXBsdWdpbnMtZ29vZCAxLjMuOTAKLSMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIwotIyBQQ00gPSBQQ00KLSMgTGluZS1pbiA9IExpbmUtRWluZ2FuZwotIyBMaW5lLW91dCA9IExpbmUtQXVzZ2FuZwotIyBQaXBlbGluZSA9IFdlaXRlcmxlaXR1bmcKLSMgU3RyZWFtID0gU3Ryb20KLSMgbWl4ZXIgID0gTWlzY2hlcgotIyBDaHJpc3RpYW4gS2lyYmFjaCA8Y2hyaXN0aWFuLmtpcmJhY2hAZ21haWwuY29tPiwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNC4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QgMS43LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMi0yMiAyMzo0MiswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gS2lyYmFjaCA8Y2hyaXN0aWFuLmtpcmJhY2hAZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IEdlcm1hbiA8dHJhbnNsYXRpb24tdGVhbS1kZUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGRlXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjguN1xuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICJKYWNrLVNlcnZlciBuaWNodCBnZWZ1bmRlbiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiRGVrb2RpZXJlbiBkZXMgSlBFRy1CaWxkZXMgc2NobHVnIGZlaGwiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIsK7JXPCqyBkdXJjaCDCuyVzwqsiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIlZlcmJpbmR1bmcgenVtIFNlcnZlciBrb25udGUgbmljaHQgaGVyZ2VzdGVsbHQgd2VyZGVuIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIktlaW5lIEFkcmVzc2UgZmVzdGdlbGVndC4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiU3VjaGxhdWYgd2lyZCBuaWNodCB2b20gU2VydmVyIHVudGVyc3TDvHR6dC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIlNlcnZlcm5hbWUga29ubnRlIG5pY2h0IGF1ZmdlbMO2c3Qgd2VyZGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJFcyBrb25udGUga2VpbmUgVmVyYmluZHVuZyB6dW0gU2VydmVyIGhlcmdlc3RlbGx0IHdlcmRlbi4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJBdWZiYXUgZWluZXIgc2ljaGVybiBWZXJiaW5kdW5nIGlzdCBnZXNjaGVpdGVydC4iCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iRWluIE5ldHp3ZXJrZmVobGVyIGlzdCBhdWZnZXRyZXRlbiwgb2RlciBkZXIgU2VydmVyIHNjaGxvc3MgZGllIFZlcmJpbmR1bmcgIgotInVuZXJ3YXJ0ZXQuIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICJTZXJ2ZXIgZ2FiIHVuZXJ3YXJ0ZXRlIERhdGVuIHp1cnXMiGNrLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiS2VpbiBvZGVyIHVuZ8O8bHRpZ2VyIEVpbmdhYmV0b24sIGRlciBBVkktU3Ryb20gd2lyZCBmZWhsZXJoYWZ0IHNlaW4uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJEaWVzZSBEYXRlaSBlbnRow6RsdCBrZWluZSBhYnNwaWVsYmFyZW4gU3Ryw7ZtZS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkRpZXNlIERhdGVpIGlzdCB1bmfDvGx0aWcgdW5kIGthbm4gbmljaHQgd2llZGVyZ2VnZWJlbiB3ZXJkZW4uIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLSJEZXIgU3Ryb20ga2FubiBuaWNodCB3aWVkZXJnZWdlYmVuIHdlcmRlbiwgd2VpbCBlciBtaXQgUGxheVJlYWR5IERSTSAiCi0idmVyc2NobMO8c3NlbHQgaXN0LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGllc2UgRGF0ZWkgaXN0IGJlc2Now6RkaWd0IHVuZCBrYW5uIG5pY2h0IHdpZWRlcmdlZ2ViZW4gd2VyZGVuLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiVW5nw7xsdGlnZSBBdG9tLUdyw7bDn2UuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEaWVzZSBEYXRlaSBpc3QgdW52b2xsc3TDpG5kaWcgdW5kIGthbm4gbmljaHQgd2llZGVyZ2VnZWJlbiB3ZXJkZW4uIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJEYXMgVmlkZW8gaW4gZGllc2VyIERhdGVpIHdpcmQgdmllbGxlaWNodCBuaWNodCBrb3JyZWt0IHdpZWRlcmdlZ2ViZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSJEaWVzZSBEYXRlaSBlbnRow6RsdCB6dSB2aWVsZSBTdHLDtm1lLiBFcyB3ZXJkZW4gbnVyIGRpZSBlcnN0ZW4gJWQgIgotIndpZWRlcmdlZ2ViZW4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIkVzIHd1cmRlIGtlaW4gdW50ZXJzdMO8dHp0ZXIgU3Ryb20gZ2VmdW5kZW4uIFNpZSBtw7xzc2VuIHZpZWxsZWljaHQgZWluIFBsdWdpbiAiCi0ienVyIFJUU1AtRXJ3ZWl0ZXJ1bmcgdm9uIEdTdHJlYW1lciBmw7xyIMK7UmVhbMKrLU1lZGllbnN0csO2bWUgaW5zdGFsbGllcmVuLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIkVzIHd1cmRlIGtlaW4gdW50ZXJzdMO8dHp0ZXIgU3Ryb20gZ2VmdW5kZW4uIFNpZSBtw7xzc2VuIGV2ZW50dWVsbCB6dXPDpHR6bGljaGUgIgotIlRyYW5zcG9ydC1Qcm90b2tvbGxlIGVybGF1YmVuIG9kZXIgZXMgZmVobHQgdmllbGxlaWNodCBkYXMgcmljaHRpZ2UgUGx1Z2luICIKLSJ6dXIgUlRTUC1FcndlaXRlcnVuZy4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iRGFzIEF1ZGlvLUdlcsOkdCBrb25udGUgbmljaHQgenVyIFdpZWRlcmdhYmUgZ2XDtmZmbmV0IHdlcmRlbi4gRGFzIEdlcsOkdCB3aXJkICIKLSJ2b24gZWluZXIgYW5kZXJlbiBBbndlbmR1bmcgdmVyd2VuZGV0LiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iRGFzIEF1ZGlvLUdlcsOkdCBrb25udGUgbmljaHQgenVyIFdpZWRlcmdhYmUgZ2XDtmZmbmV0IHdlcmRlbi4gU2llIGhhYmVuIG5pY2h0ICIKLSJkaWUgQmVyZWNodGlndW5nZW4genVtIMOWZmZuZW4gZGVzIEdlcsOkdGVzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJEYXMgQXVkaW8tR2Vyw6R0IGtvbm50ZSBuaWNodCB6dXIgV2llZGVyZ2FiZSBnZcO2ZmZuZXQgd2VyZGVuLiAiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iRGFzIEF1ZGlvLUdlcsOkdCBrb25udGUgbmljaHQgenVyIFdpZWRlcmdhYmUgZ2XDtmZmbmV0IHdlcmRlbi4gRGllc2UgVmVyc2lvbiAiCi0iZGVzIE9wZW4gU291bmQgU3lzdGVtIChPU1MpIHdpcmQgbmljaHQgdm9uIGRpZXNlbSBFbGVtZW50IHVudGVyc3TDvHR6dC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiV2llZGVyZ2FiZSB3aXJkIHZvbiBkaWVzZW0gQXVkaW8tR2Vyw6R0IG5pY2h0IHVudGVyc3TDvHR6dC4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIkZlaGxlciBiZWkgQXVkaW8tV2llZGVyZ2FiZS4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkF1Zm5haG1lIHdpcmQgdm9uIGRpZXNlbSBBdWRpby1HZXLDpHQgbmljaHQgdW50ZXJzdMO8dHp0LiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkZlaGxlciBiZWltIEF1Zm5laG1lbiB2b20gQXVkaW8tR2Vyw6R0LiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIkRhcyBBdWRpby1HZXLDpHQga29ubnRlIG5pY2h0IHp1ciBBdWZuYWhtZSBnZcO2ZmZuZXQgd2VyZGVuLiBTaWUgaGFiZW4gbmljaHQgIgotImRpZSBCZXJlY2h0aWd1bmdlbiB6dW0gw5ZmZm5lbiBkZXMgR2Vyw6R0ZXMuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJEYXMgQXVkaW8tR2Vyw6R0IGtvbm50ZSBuaWNodCB6dXIgQXVmbmFobWUgZ2XDtmZmbmV0IHdlcmRlbi4gIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIkNvcmVBdWRpby1HZXLDpHQgbmljaHQgZ2VmdW5kZW4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIkNvcmVBdWRpby1HZXLDpHQga29ubnRlIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW4iCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJBdWZuYWhtZXF1ZWxsZSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9uIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTGluZS1FaW5nYW5nIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkludGVybmUgQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiU1BESUYtRWluZ2FuZyIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICJBVVgtRWluZ2FuZyAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWC1FaW5nYW5nIDIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiQ29kZWMtUsO8Y2tzY2hsZWlmZSIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiU3VuVlRTLVLDvGNrc2NobGVpZmUiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIkxhdXRzdMOkcmtlIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiUGVnZWwiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiRWluZ2ViYXV0ZXIgTGF1dHNwcmVjaGVyIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJLb3BmaMO2cmVyIgotCi0jIEhpZXIgaXN0IG1pciBub2NoIG5pY2h0cyBCZXNzZXJlcyBlaW5nZWZhbGxlbi4KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiQXVzZ2FuZyIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYtQXVzZ2FuZyIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiQVVYLUF1c2dhbmcgMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYLUF1c2dhbmcgMiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiB2b24gJWQgQnl0ZXMgdm9uIEdlcsOkdCDCuyVzwqsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0iQXVmesOkaGxlbiBtw7ZnbGljaGVyIFZpZGVvZm9ybWF0ZSwgbWl0IGRlbmVuIEdlcsOkdCDCuyVzwqsgYXJiZWl0ZW4ga2Fubiwgc2NobHVnICIKLSJmZWhsIgotCi0jIMK7R2Vob2x0wqsgaXN0IGF1Y2ggbm9jaCBuaWNodCBvcHRpbWFsLCBhYmVyIMK7YWJnZWJpbGRldMKrIGdlaHQgYXVjaCBuaWNodCB3aXJrbGljaC4KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIkRpZSBQdWZmZXIgZGVzIEdlcsOkdGVzIMK7JXPCqyBrb25udGVuIG5pY2h0IGdlaG9sdCB3ZXJkZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICJEZXIgVHJlaWJlciB2b24gR2Vyw6R0IMK7JXPCqyB1bnRlcnN0w7x0enQgbmljaHQgZGllIEVBLU1ldGhvZGUgJWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICJEZXIgVHJlaWJlciB2b24gR2Vyw6R0IMK7JXPCqyB1bnRlcnN0w7x0enQga2VpbmUgYmVrYW5udGUgRUEtTWV0aG9kZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJHZXLDpHQgwrslc8KrIGlzdCBiZWxlZ3QiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIkRhcyBHZXLDpHQgwrslc8KrIGthbm4gbmljaHQgYmVpICVkeCVkIGF1Zm5laG1lbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiRGFzIGFuZ2VnZWJlbmUgRm9ybWF0IGthbm4gbmljaHQgdm9tIEdlcsOkdCDCuyVzwqsgYXVzZ2VsZXNlbiB3ZXJkZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiR2Vyw6R0IMK7JXPCqyB1bnRlcnN0w7x0enQgZ2V0cmVubnRlIEViZW5lbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIlBhcmFtZXRlciBrb25udGVuIG5pY2h0IHZvbiBHZXLDpHQgwrslc8KrIGF1c2dlbGVzZW4gd2VyZGVuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0iRGFzIFZpZGVvLUVpbmdhYmVnZXLDpHQgYWt6ZXB0aWVydGUgbmljaHQgZGllIG5ldWUgRWluc3RlbGx1bmcgenVyICIKLSJCaWxkd2llZGVyaG9sdW5nc3JhdGUuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiRGFzIFZpZGVvLUdlcsOkdCBnYWIga2VpbiBBdXNnYWJlZm9ybWF0IGFuLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICJEYXMgVmlkZW8tR2Vyw6R0IGdhYiB1bmfDvGx0aWdlIEFibWVzc3VuZ2VuIHp1csO8Y2suIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJWaWRlby1HZXLDpHRlIHZlcndlbmRldCBlaW5lIG5pY2h0IHVudGVyc3TDvHR6dCBNZXRob2RlIGRlciAiCi0iWmVpbGVudmVyc2NoYWNodGVsdW5nLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJEYXMgVmlkZW8tR2Vyw6R0IHZlcndlbmRldCBlaW4gbmljaHQgdW50ZXJzdMO8dHp0ZXMgUGl4ZWxmb3JtYXQuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIkVpbnJpY2h0ZW4gZGVzIGludGVybmVuIFB1ZmZlci1Qb29scyBpc3QgZmVobGdlc2NobGFnZW4uIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICJEYXMgVmlkZW9nZXLDpHQgZ2FiIGtlaW5lIFB1ZmZlci1HcsO2w59lIGFuLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIkVzIGdpYnQga2VpbmVuIERvd25zdHJlYW0tUG9vbCwgYXVzIGRlbSBpbXBvcnRpZXJ0IHdlcmRlbiBrYW5uLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkF1c2xlc2VuIGRlciBFaW5zdGVsbHVuZ2VuIHZvbiBFbXBmw6RuZ2VyIMK7JWTCqyBhdWYgR2Vyw6R0IMK7JXPCqyBzY2hsdWcgZmVobC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gRXJtaXR0ZWxuIGRlciBGdW5rdGlvbnNtZXJrbWFsZSB2b24gR2Vyw6R0IMK7JXPCqy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLCuyVzwqsgaXN0IGtlaW4gRW1wZsOkbmdlci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJFbXBmYW5nZW4gZWluZXMgRnVua3NpZ25hbHMgYXVmIEdlcsOkdCDCuyVzwqsgc2NobHVnIGZlaGwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiRmVzdGxlZ2VuIGRlciBFaW5nYWJlIMK7JWTCqyBkZXMgR2Vyw6R0cyDCuyVzwqsgc2NobHVnIGZlaGwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLDhG5kZXJuIGRlcyBTdHVtbXp1c3RhbmRzIHZvbiBHZXLDpHQgwrslc8KrIHNjaGx1ZyBmZWhsLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZWQgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiQW5mb3JkZXJuIGRlcyBiZW7DtnRpZ2VuIEFyYmVpdHNzcGVpY2hlcnMgc2NobHVnIGZlaGwuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIkFuZm9yZGVybiBkZXMgYmVuw7Z0aWdlbiBBcmJlaXRzc3BlaWNoZXJzIHNjaGx1ZyBmZWhsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJEZXIgVW13YW5kbGVyIGF1ZiBHZXLDpHQgJXMgaGF0IGtlaW4gdW50ZXJzdMO8dHp0ZXMgRWluZ2FiZWZvcm1hdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiRGVyIFVtd2FuZGxlciBhdWYgR2Vyw6R0ICVzIGhhdCBrZWluIHVudGVyc3TDvHR6dGVzIEF1c2dhYmVmb3JtYXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkRlciBLb2RpZXJlciBhdWYgR2Vyw6R0ICVzIGhhdCBrZWluIHVudGVyc3TDvHR6dGVzIEVpbmdhYmVmb3JtYXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJEZXIgS29kaWVyZXIgYXVmIEdlcsOkdCAlcyBoYXQga2VpbiB1bnRlcnN0w7x0enRlcyBBdXNnYWJlZm9ybWF0IgotCi1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIkJlZ2lubiBkZXIgRGVrb2RpZXJ1bmcgZGVzIEpQRUctQmlsZGVzIHNjaGx1ZyBmZWhsIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICJWZXJhcmJlaXRlbiBkZXMgRWluemVsYmlsZHMgc2NobHVnIGZlaGwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkZlaGxlciBiZWltIEJlc3RpbW1lbiBkZXIgRsOkaGlna2VpdGVuIGRlcyBHZXLDpHRzIMK7JXPCqzogRXMgaXN0IGtlaW4gwrt2NGwywqstIgotIlRyZWliZXIuIMOcYmVycHLDvGZlbiBTaWUsIG9iIGVzIGVpbiDCu3Y0bDHCqy1UcmVpYmVyIGlzdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICJBYmZyYWdlIGRlciBBdHRyaWJ1dGUgZGVyIEVpbmdhYmUgwrslZMKrIGltIEdlcsOkdCDCuyVzwqsgc2NobHVnIGZlaGwiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkF1c2xlc2VuIGRlciBFaW5zdGVsbHVuZ2VuIGRlciBTZW5kZXJ3YWhsIMK7JWTCqyBhdWYgR2Vyw6R0IMK7JXPCqyBzY2hsdWcgZmVobC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJBYmZyYWdlbiBkZXIgTm9ybSBhdWYgR2Vyw6R0IMK7JXPCqyBzY2hsdWcgZmVobC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkFiZnJhZ2UgZGVyIEtvbnRyb2xsYXR0cmlidXRlIGF1ZiBHZXLDpHQgwrslc8KrIHNjaGx1ZyBmZWhsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJHZXLDpHQgwrslc8KrIGthbm4gbmljaHQgaWRlbnRpZml6aWVydCB3ZXJkZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIsK7JXPCqyBpc3Qga2VpbiBHZXLDpHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiR2Vyw6R0IMK7JXPCqyBrb25udGUgbmljaHQgenVtIExlc2VuIG9kZXIgU2NocmVpYmVuIGdlw7ZmZm5ldCB3ZXJkZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiwrslc8KrIGlzdCBrZWluIEF1Zm5haG1lZ2Vyw6R0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiwrslc8KrIGlzdCBrZWluIFdpZWRlcmdhYmVnZXLDpHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJHZXLDpHQgwrslc8KrIGlzdCBrZWluIE0yTS1HZXLDpHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJHZXLDpHQgwrslc8KrIGtvbm50ZSBuaWNodCB6dW0gTGVzZW4gb2RlciBTY2hyZWliZW4gZ2XDtmZmbmV0IHdlcmRlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZlc3RsZWdlbiBkZXIgTm9ybSBhdWYgR2Vyw6R0IMK7JXPCqyBzY2hsdWcgZmVobC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJBdXNsZXNlbiBkZXIgYWt0dWVsbGVuIFNlbmRlZnJlcXVlbnogZGVzIEdlcsOkdHMgwrslc8KrIHNjaGx1ZyBmZWhsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0iRmVzdGxlZ2VuIGRlciBha3R1ZWxsZW4gU2VuZGVmcmVxdWVueiBkZXMgR2Vyw6R0cyDCuyVzwqsgYXVmICVsdSBIeiBzY2hsdWcgZmVobC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQXVzbGVzZW4gZGVyIGFrdHVlbGxlbiBTaWduYWxzdMOkcmtlIGRlcyBHZXLDpHRzIMK7JXPCqyBzY2hsdWcgZmVobC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkF1c2xlc2VuIGRlcyBXZXJ0ZXMgZGVyIEVpbnN0ZWxsdW5nIMK7JWTCqyBkZXMgR2Vyw6R0cyDCuyVzwqsgc2NobHVnIGZlaGwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iRmVzdGxlZ2VuIGRlcyBXZXJ0ZXMgwrslZMKrIGRlciBFaW5zdGVsbHVuZyDCuyVkwqsgZGVzIEdlcsOkdHMgwrslc8KrIHNjaGx1ZyBmZWhsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkF1c2xlc2VuIGRlciBha3R1ZWxsZW4gRWluZ2FiZSBhdWYgZGVtIEdlcsOkdCDCuyVzwqsgc2NobHVnIGZlaGwuIFZpZWxsZWljaHQgIgotImlzdCBlcyBlaW4gRnVua2dlcsOkdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkF1c2xlc2VuIGRlciBha3R1ZWxsZW4gQXVzZ2FiZSBkZXMgR2VyYcyIdHMgwrslc8KrIHNjaGx1ZyBmZWhsLiBWaWVsbGVpY2h0IGlzdCAiCi0iZXMgZWluIEZ1bmtnZXLDpHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkZlc3RsZWdlbiBkZXIgQXVzZ2FiZSDCuyVkwqsgZGVzIEdlcmHMiHRzIMK7JXPCqyBzY2hsdWcgZmVobC4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJFaW4gV2VjaHNlbCBkZXIgQXVmbMO2c3VuZyB6dXIgTGF1ZnplaXQgd2lyZCBub2NoIG5pY2h0IHVudGVyc3TDvHR6dC4iCi0KLSMgVGFrdGdlYmVyIGtsaW5ndCBndXQuCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICJFcyBrYW5uIG5pY2h0IG9obmUgZWluZW4gVGFrdGdlYmVyIGdlYXJiZWl0ZXQgd2VyZGVuLiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiSW50ZXJuZXIgRGF0ZW5zdHJvbWZlaGxlci4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJJbnRlcm5lciBEYXRlbnN0cm9tZmVobGVyLiIKLQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAiR2Vyw6R0IMK7JXPCqyB1bnRlcnN0w7x0enQga2VpbmUgVmlkZW9hdWZuYWhtZSIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIkVzIGtvbm50ZSBrZWluZSBWZXJiaW5kdW5nIHp1bSBBdWRpby1TZXJ2ZXIgaGVyZ2VzdGVsbHQgd2VyZGVuIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIkFiZnJhZ2UgZGVyIEbDpGhpZ2tlaXRlbiBkZXMgQXVkaW8tU2VydmVycyBpc3QgZmVobGdlc2NobGFnZW4iCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJCYXNzIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJIw7ZoZW4iCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAiU3ludGgiCi0KLSN+IG1zZ2lkICJQQ00iCi0jfiBtc2dzdHIgIlBDTSIKLQotI34gbXNnaWQgIlNwZWFrZXIiCi0jfiBtc2dzdHIgIkxhdXRzcHJlY2hlciIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkxpbmUtRWluZ2FuZyIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaXNjaGVyIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTSAyIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICJBdWZuYWhtZSIKLQotI34gbXNnaWQgIkluLWdhaW4iCi0jfiBtc2dzdHIgIkVpbmdhbmdzcGVnZWwiCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAiQXVzZ2FuZ3NwZWdlbCIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiRWluZ2FuZy0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJFaW5nYW5nLTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIkVpbmdhbmctMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0xIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICJEaWdpdGFsLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMyIKLQotIyBNaWtyb2Zvbj8gWndlaWZlbGhhZnQuIEVoZXIgS29wZmjDtnJlciBvZGVyIFRlbGVmb24uCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uZWluZ2FuZyIKLQotIyBJc3QgaGllciBLb3BmaMO2cmVyIG9kZXIgVGVsZWZvbiBnZW1laW50PwotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiTWlrcm9mb25hdXNnYW5nIgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlJhZGlvIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLSN+IG1zZ3N0ciAiRGFzIEF1ZGlvLUdlcsOkdCBrb25udGUgbmljaHQgZsO8ciBkYXMgTWlzY2hwdWx0IGdlw7ZmZm5ldCB3ZXJkZW4uIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiRGFzIEF1ZGlvLUdlcsOkdCBrb25udGUgbmljaHQgZsO8ciBkYXMgTWlzY2hwdWx0IGdlw7ZmZm5ldCB3ZXJkZW4uIERpZXNlICIKLSN+ICJWZXJzaW9uIGRlcyBPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKSB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC4iCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIkhhdXB0cmVnbGVyIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIkZyb250IgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAiQXVmbmFobWVSw7xja3NlaXRlIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiS29wZmjDtnJlciIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiTWl0dGUiCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZCIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIlNlaXRlIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiQVVYLUF1c2dhbmciCi0KLSN+IG1zZ2lkICIzRCBEZXB0aCIKLSN+IG1zZ3N0ciAiM0QtVGllZmUiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIjNELU1pdHRlIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiRXJ3ZWl0ZXJ0ZXMgM0QiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmb24iCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW8tRWluZ2FuZyIKLQotI34gbXNnaWQgIkFVWCBJbiIKLSN+IG1zZ3N0ciAiQVVYLUVpbmdhbmciCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiQXVmbmFobWVwZWdlbCIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJBdXNnYW5nc3BlZ2VsIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAiTWlrcm9mb252ZXJzdMOkcmt1bmciCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICJadXIgRGlhZ25vc2UiCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICJCYXNzdmVyc3TDpHJrdW5nIgotCi0jfiBtc2dpZCAiUGxheWJhY2sgUG9ydHMiCi0jfiBtc2dzdHIgIldpZWRlcmdhYmUtUG9ydHMiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAiRWluZ2FuZyIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICLDnGJlcndhY2h1bmdzcXVlbGxlIgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAiVGFzdGF0dXItUGllcHNlbiIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIHNpbXVsaWVyZW4iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIlN0ZXJlbyIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZC1BdWRpbyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiTWlrcm9mb25wZWdlbCIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJMYXV0c3ByZWNoZXJxdWVsbGUiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25xdWVsbGUiCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICJTdGVja2VyIgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICJNaXR0ZSAvIExGRSIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIlN0ZXJlby1NaXNjaHB1bHQiCi0KLSN+IG1zZ2lkICJNb25vIE1peCIKLSN+IG1zZ3N0ciAiTW9uby1NaXNjaHB1bHQiCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIkVpbmdhbmdzLU1pc2NocHVsdCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJEaWdpdGFsLUF1c2dhbmciCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJEaWdpdGFsLUVpbmdhbmciCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAiSMO2cmVyIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIkFuZGVyZXMiCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJLZWluIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIkFrdGl2aWVydCIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiRGVha3RpdmllcnQiCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICJTdHVtbSIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIlNjaG5lbGwiCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiU2VociBuaWVkcmlnIgotCi0jfiBtc2dpZCAiTG93IgotI34gbXNnc3RyICJOaWVkcmlnIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICJNZWRpdW0iCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJIb2NoIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJTZWhyIGhvY2giCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJQcm9kdWt0aW9uIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gYW0gVm9yZGVyZWluZ2FuZyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIkxpbmUtRWluZ2FuZyBhbSBWb3JkZXJlaW5nYW5nIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiS29wZmjDtnJlciBhbSBWb3JkZXJlaW5nYW5nIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIkxpbmUtQXVzZ2FuZyBhbSBWb3JkZXJlaW5nYW5nIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcsO8bmVyIFN0ZWNrZXIiCi0KLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUm9zYSBTdGVja2VyIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkJsYXVlciBTdGVja2VyIgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJXZWnDn2VyIFN0ZWNrZXIiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlNjaHdhcnplciBTdGVja2VyIgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkdyYXVlciBTdGVja2VyIgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbmdlciBTdGVja2VyIgotCi0jfiBtc2dpZCAiUmVkIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUm90ZXIgU3RlY2tlciIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkdlbGJlciBTdGVja2VyIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcsO8bmVyIFN0ZWNrZXIgYW0gVm9yZGVyZWluZ2FuZyIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb3NhIFN0ZWNrZXIgYW0gVm9yZGVyZWluZ2FuZyIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJCbGF1ZXIgU3RlY2tlciBhbSBWb3JkZXJlaW5nYW5nIgotCi0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJXZWnDn2VyIFN0ZWNrZXIgYW0gVm9yZGVyZWluZ2FuZyIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiU2Nod2FyemVyIFN0ZWNrZXIgYW0gVm9yZGVyZWluZ2FuZyIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcmF1ZXIgU3RlY2tlciBhbSBWb3JkZXJlaW5nYW5nIgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbmdlciBTdGVja2VyIGFtIFZvcmRlcmVpbmdhbmciCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb3RlciBTdGVja2VyIGFtIFZvcmRlcmVpbmdhbmciCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHZWxiZXIgU3RlY2tlciBhbSBWb3JkZXJlaW5nYW5nIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiQXVzZ2FiZSB2ZXJzdHJldWVuIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiSGVydW50ZXJtaXNjaGVuIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAiRWluZ2FuZyBkZXMgdmlydHVlbGxlbiBNaXNjaHB1bHRzIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBPdXRwdXQiCi0jfiBtc2dzdHIgIkF1c2dhbmcgZGVzIHZpcnR1ZWxsZW4gTWlzY2hwdWx0cyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgQ2hhbm5lbHMiCi0jfiBtc2dzdHIgIkthbsOkbGUgZGVzIHZpcnR1ZWxsZW4gTWlzY2hwdWx0cyIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyAlZCBGdW5jdGlvbiIKLQotI34gbXNnaWQgIiVzIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcy1GdW5rdGlvbiIKLQotIyDCu0ZyYW1lwqsgc29sbHRlbiB3aXIgaW0gWnVzYW1tZW5oYW5nIG1pdCBWaWRlb3MgdmllbGxlaWNodCBiZXNzZXIgc28gYmVsYXNzZW4uIEhhYmUgaWNoIGluIGdub21lLXN1YnRpdGxlcyBhdWNoIHNvIGdlbWFjaHQuCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiVW5lcndhcnRldGUgRnJhbWUtR3LDtsOfZSB2b24gJXUgYW5zdGF0dCAldSB3dXJkZSBlcmhhbHRlbi4iCi0KLSN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIG9uIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9uICVkIEJ5dGVzIGF1ZiBHZXLDpHQgwrslc8KrLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJBdWYgR2Vyw6R0IMK7JXPCqyBrb25udGVuIGtlaW5lIFB1ZmZlciBlaW5nZXJlaWh0IHdlcmRlbi4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkRlciBWZXJzdWNoIFZpZGVvYmlsZGVyIHZvbiBHZXLDpHQgwrslc8KrIGF1c3p1bGVzZW4gc2NobHVnIGZlaGwuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIiVkIFZlcnN1Y2hlIHNpbmQgZmVobGdlc2NobGFnZW4uIEdlcsOkdCDCuyVzwqsuIFN5c3RlbWZlaGxlcjogJXMiCi0KLSN+IG1zZ2lkICIiCi0jfiAiVGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLCBvciBubyAiCi0jfiAiYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlIHVzZXJwdHIgb3IgbGVuZ3RoIGFyZSBpbnZhbGlkLiAiCi0jfiAiZGV2aWNlICVzIgotI34gbXNnc3RyICIiCi0jfiAiRGVyIFB1ZmZlcnR5cCB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCwgZGVyIEluZGV4IGlzdCBhdcOfZXJoYWxiIHNlaW5lciAiCi0jfiAiR3Jlbnp3ZXJ0ZSwgZXMgc2luZCBiaXNoZXIgbm9jaCBrZWluZSBQdWZmZXIgYW5nZWZvcmRlcnQgd29yZGVuIG9kZXIgIgotI34gIsK7dXNlcnB0csKrIG9kZXIgZGllIEzDpG5nZSBzaW5kIHVuZ8O8bHRpZy4gR2Vyw6R0IMK7JXPCqyIKLQotI34gbXNnaWQgIiIKLSN+ICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4gTm90IGVub3VnaCBtZW1vcnkuIgotI34gbXNnc3RyICIiCi0jfiAiRGVyIFZlcnN1Y2ggVmlkZW9iaWxkZXIgdm9uIEdlcsOkdCDCuyVzwqsgYXVzenVsZXNlbiBzY2hsdWcgZmVobC4gTmljaHQgIgotI34gImdlbnVnIEFyYmVpdHNzcGVpY2hlci4iCi0KLSMgV2FzIGlzdCBlaW4gWmVpZ2VycHVmZmVyPwotIywgZnV6enkKLSN+IG1zZ2lkICJpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGVucXVldWUgYSB1c2VyIHBvaW50ZXIgYnVmZmVyLiBkZXZpY2UgJXMuIgotI34gbXNnc3RyICIiCi0jfiAiVW5nZW7DvGdlbmQgQXJiZWl0c3NwZWljaGVyLCB1bSBlaW5lbiBaZWlnZXJwdWZmZXIgZWluZXMgQmVudXR6ZXJzICIKLSN+ICJlaW56dXJlaWhlbi4gR2Vyw6R0IMK7JXPCqy4iCi0KLSN+IG1zZ2lkICJObyBmcmVlIGJ1ZmZlcnMgZm91bmQgaW4gdGhlIHBvb2wgYXQgaW5kZXggJWQuIgotI34gbXNnc3RyICJFcyB3dXJkZW4ga2VpbmUgZnJlaWVuIFB1ZmZlciBpbSBWb3JyYXQgYmVpIEluZGV4ICVkIGdlZnVuZGVuLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiRGllIFB1ZmZlciBrb25udGVuIG5pY2h0IHZvbiBHZXLDpHQgwrslc8KrIGF1c2dlbGVzZW4gd2VyZGVuLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgZW5vdWdoIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkVzIGtvbm50ZW4gbmljaHQgZ2VudWcgUHVmZmVyIHZvbiBHZXLDpHQgwrslc8KrIGF1c2dlbGVzZW4gd2VyZGVuLiIKZGlmZiAtLWdpdCBhL3BvL2VsLmdtbyBiL3BvL2VsLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA0ZWE1Yi4uMDAwMDAwMAotLS0gYS9wby9lbC5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9lbC5wbyBiL3BvL2VsLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzlkZDRhLi4wMDAwMDAwCi0tLSBhL3BvL2VsLnBvCisrKyAvZGV2L251bGwKQEAgLTEsODA3ICswLDAgQEAKLSMgR3JlZWsgdHJhbnNsYXRpb24gZm9yIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZSBvZiBHU3RyZWFtZXIgcHJvamVjdC4KLSMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdTdHJlYW1lciBjb3JlIHRlYW0KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZS4KLSMgU2ltb3MgWGVuaXRlbGxpcyA8c2ltb3MubGlzdHNAZ29vZ2xlbWFpbC5jb20+LCAyMDA5LgotIyBNaWNoYWVsIEtvdHNhcmluaXMgPG1rNzM2MjhAZ21haWwuY29tPiwgMjAxMAotIyBTYXZ2YXMgUmFkZXZpYyA8dmljZWRhckBnbWFpbC5jb20+LCAyMDEyLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAwLjEwLjI4LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0wNS0wNSAxOTowNSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBTYXZ2YXMgUmFkZXZpYyA8dmljZWRhckBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogR3JlZWsgPHRlYW1AbGlzdHMuZ25vbWUuZ3I+XG4iCi0iTGFuZ3VhZ2U6IGVsXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1CdWdzOiBSZXBvcnQgdHJhbnNsYXRpb24gZXJyb3JzIHRvIHRoZSBMYW5ndWFnZS1UZWFtIGFkZHJlc3MuXG4iCi0iWC1HZW5lcmF0b3I6IExva2FsaXplIDAuM1xuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHPgM6/zrrPic60zrnOus6/z4DOv86vzrfPg863z4Igz4TOt8+CIM61zrnOus+Mzr3Osc+CIEpQRUciCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiclcycgzrHPgM+MICclcyciCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4PPjc69zrTOtc+DzrcgzrzOtSDPhM6/zr0gzrTOuc6xzrrOv868zrnPg8+Ezq4iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAizpTOtc69IM6/z4HOr8+DzrjOt866zrUgVVJMLiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICLOnyDOtM65zrHOus6/zrzOuc+Dz4TOrs+CIM60zrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc65IM6xzr3Osc62zq7PhM63z4POty4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4zPgiDOvyDPgM+Bzr/Pg860zrnOv8+BzrnPg868z4zPgiDPhM6/z4Ugzr/Ovc+MzrzOsc+Ezr/PgiDPhM6/z4UgzrTOuc6xzrrOv868zrnPg8+Ezq4uIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4PPjc69zrTOtc+DzrcgzrzOtSDPhM6/zr0gzrTOuc6xzrrOv868zrnPg8+Ezq4uIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOtc66zrrOr869zrfPg863z4IgzrHPg8+GzrHOu86/z43PgiDPg8+Nzr3OtM61z4POt8+CLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0izqDPgc6/zq3Ous+Fz4jOtSDOrc69zrEgz4PPhs6szrvOvM6xIM60zrnOus+Ez43Ov8+FIM6uIM6/IM60zrnOsc66zr/OvM65z4PPhM6uz4Igzq3Ous67zrXOuc+DzrUgzr7Osc+Gzr3Ouc66zqwgz4TOtyDPg8+Nzr3OtM61z4POty4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIs6fIM60zrnOsc66zr/OvM65z4PPhM6uz4Igzq3Pg8+EzrXOuc67zrUgzrvOrM64zr/PgiDOtM61zrTOv868zq3Ovc6xLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAizprOsc68zq/OsSDOriDOrM66z4XPgc63IM61zrnPg86xzrPPic6zzq4gzq7Ph86/z4UsIM63IEFWSSDPgc6/zq4gzrjOsSDOus6xz4TOsc+Bz4HOtc+Nz4POtc65LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAizpHPhc+Ez4wgz4TOvyDOsc+Bz4fOtc6vzr8gzrTOtc69IM+AzrXPgc65zq3Ph861zrkgzrHOvc6xz4DOsc+BzrHOs8+OzrPOuc68zrXPgiDPgc6/zq3Pgi4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIs6kzr8gzrHPgc+HzrXOr86/IM6xz4XPhM+MIM60zrXOvSDOtc6vzr3Osc65IM6tzrPOus+Fz4HOvyDOus6xzrkgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM6xzr3Osc+AzrHPgc6xz4fOuM61zq8uIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAizqTOvyDOsc+Bz4fOtc6vzr8gzrHPhc+Ez4wgzrXOr869zrHOuSDOus6xz4TOtc+Dz4TPgc6xzrzOvM6tzr3OvyDOus6xzrkgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM6xzr3Osc+AzrHPgc6xz4fOuM61zq8uICIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAizobOus+Fz4HOvyDOvM6tzrPOtc64zr/PgiDOsc+Ez4zOvM6/z4UuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLOpM6/IM6xz4HPh861zq/OvyDOsc+Fz4TPjCDOtc6vzr3Osc65IM6xzr3Ov867zr/Ous67zq7Pgc+Jz4TOvyDOus6xzrkgzrTOtc69IM68z4DOv8+BzrXOryDOvc6xIM6xzr3Osc+AzrHPgc6xz4fOuM61zq8uIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICLOpM6/IM6yzq/Ovc+EzrXOvyDPg861IM6xz4XPhM+MIM+Ezr8gzrHPgc+HzrXOr86/IM68z4DOv8+BzrXOryDOvc6xIM68zrfOvSDOsc69zrHPgM6xz4HOsc+HzrjOtc6vIM+Dz4nPg8+EzqwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIs6Rz4XPhM+MIM+Ezr8gzrHPgc+HzrXOr86/IM+AzrXPgc65zq3Ph861zrkgz4DOv867zrvOrc+CIM+Bzr/Orc+CLiDOkc69zrHPgM6xz4HOrM6zzrXPhM6xzrkgzrzPjM69zr8gzrcgz4DPgc+Oz4TOtyAlZCIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0izpTOtc69IM6yz4HOrc64zrfOus61IM66zrHOvM6vzrEgz4XPgM6/z4PPhM63z4HOuc62z4zOvM61zr3OtyDPgc6/zq4uIM6Vzq/Ovc6xzrkgz4DOuc64zrHOvc+Mzr0gzr3OsSDPgM+Bzq3PgM61zrkgzr3OsSDOus6szr3Otc+EzrUgIgotIs61zrPOus6xz4TOrM+Dz4TOsc+Dzrcgzq3Ovc6xIM+Az4HPjM+DzrjOtc+Ezr8gR1N0cmVhbWVyIFJUU1AgzrPOuc6xIM+EzrnPgiDPgc6/zq3PgiBSZWFsIM68zq3Pg8+Jzr0uICIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIs6UzrXOvSDOss+Bzq3OuM63zrrOtSDOus6xzrzOr86xIM+Fz4DOv8+Dz4TOt8+BzrnOts+MzrzOtc69zrcgz4HOv86uLiDOlc6vzr3Osc65IM+AzrnOuM6xzr3PjM69IM69zrEgz4fPgc61zrnOsc+DzrjOtc6vIM69zrEgIgotIs61z4DOuc+Ez4HOrc+IzrXPhM61IM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgz4DPgc+Jz4TPjM66zr/Ou867zrEgzrzOtc+EzrHOs8+JzrPOrs+CIM6uIM6xzrvOu865z47PgiDOvc6xIM+DzrHPgiDOu861zq/PgM61zrkgz4TOvyDPg8+Jz4PPhM+MICIKLSLPgM+Bz4zPg864zrXPhM6/IFJUU1Agz4TOv8+FIEdTdHJlYW1lci4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM6uz4fOv8+FIM6zzrnOsSDOsc69zrHPgM6xz4HOsc6zz4nOs86uLiDOlyDPg8+Fz4POus61z4XOriAiCi0iz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IM6xz4DPjCDOvM65zrEgzqzOu867zrcgzrXPhs6xz4HOvM6/zrPOri4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDOrs+Hzr/PhSDOs865zrEgzrHOvc6xz4DOsc+BzrHOs8+JzrPOri4gzpTOtc69IM6tz4fOtc+EzrUgz4TOsSAiCi0izrTOuc66zrHOuc+OzrzOsc+EzrEgzr3OsSDOsc69zr/Or86+zrXPhM61IM+EzrfOvSDPg8+Fz4POus61z4XOri4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM6uz4fOv8+FIM6zzrnOsSDOsc69zrHPgM6xz4HOsc6zz4nOs86uLiAiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM6uz4fOv8+FIM6zzrnOsSDOsc69zrHPgM6xz4HOsc6zz4nOs86uLiDOkc+Fz4TOriDOtyDOrc66zrTOv8+DzrcgIgotIs+Ezr/PhSBPcGVuIFNvdW5kIFN5c3RlbSDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXPhM6xzrkgzrHPgM+MIM6xz4XPhM+MIM+Ezr8gz4PPhM6/zrnPh861zq/Ovy4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAizpHPhc+Ezq4gzrcgz4PPhc+DzrrOtc+Fzq4gzq7Ph86/z4UgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61zrkgzrHOvc6xz4DOsc+BzrHOs8+JzrPOri4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIs6jz4bOrM67zrzOsSDOsc69zrHPgM6xz4HOsc6zz4nOs86uz4Igzq7Ph86/z4UiCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIs6Rz4XPhM6uIM63IM+Dz4XPg866zrXPhc6uIM6uz4fOv8+FIM60zrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc65IM61zrPOs8+BzrHPhs6uLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gzrXOs86zz4HOsc+Gzq4gzrHPgM+MIM+Ezrcgz4PPhc+DzrrOtc+Fzq4gzq7Ph86/z4UuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM6uz4fOv8+FIM6zzrnOsSDOtc6zzrPPgc6xz4bOri4gzpTOtc69IM6tz4fOtc+EzrUgz4TOsSAiCi0izrTOuc66zrHOuc+OzrzOsc+EzrEgzr3OsSDOsc69zr/Or86+zrXPhM61IM+EzrfOvSDPg8+Fz4POus61z4XOri4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDOrs+Hzr/PhSDOs865zrEgzrXOs86zz4HOsc+Gzq4uICIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIs6gzrfOs86uIM61zrPOs8+BzrHPhs6uz4IiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICLOnM65zrrPgc+Mz4bPic69zr8iCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICLOlc6vz4POv860zr/PgiDOs8+BzrHOvM68zq7PgiIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICLOlc+Dz4nPhM61z4HOuc66z4wgQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAizpXOr8+DzrTOv8+CIFNQRElGIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIs6Vzq/Pg86/zrTOuc+CIEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIs6Vzq/Pg86/zrTOv8+CIEFVWCAyIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICLOkc69zrHPhM+Bzr/Phs6/zrTPjM+EzrfPg863IgotCi0jLCBmdXp6eQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAizpHOvc6xz4TPgc6/z4bOv860z4zPhM63z4POtyIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAizojOvc+EzrHPg863IgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAizprOrc+BzrTOv8+CIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAizp/OuM+Mzr3OtyIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIs6Vzr3Pg8+JzrzOsc+Ez4nOvM6tzr3OvyDOvM61zrPOrM+Gz4nOvc6/IgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICLOkc66zr/Phc+Dz4TOuc66z4wiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAizpPPgc6xzrzOvM6uIM61zr7PjM60zr/PhSIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgT3V0IgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMSBPdXQiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIkFVWCAyIE91dCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICLOo8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM6xzr3OrM6zzr3Pic+DzrcgJWQgYnl0ZXMgzrHPgM6/IM+EzrfOvSDPg8+Fz4POus61z4XOriAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM+HzrHPgc+Ezr/Os8+BzqzPhs63z4POt8+CIGJ1ZmZlciDOs865zrEgz4TOtyDPg8+Fz4POus61z4XOriAnJXMnIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAizp8gzr/OtM63zrPPjM+CIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CICclcycgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61zrkgzrrOrM+Azr/Ouc6xIM6zzr3Pic+Dz4TOriDOvM6tzrjOv860zr8gzrvOrs+IzrfPgi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAizp8gzr/OtM63zrPPjM+CIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CICclcycgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61zrkgzrrOrM+Azr/Ouc6xIM6zzr3Pic+Dz4TOriDOvM6tzrjOv860zr8gzrvOrs+IzrfPgi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAizpcgz4PPhc+DzrrOtc+Fzq4gJyVzJyDOtM61zr0gzrXOr869zrHOuSDOvM65zrEgz4PPhc+DzrrOtc+Fzq4gzrvOrs+IzrfPgi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICLOlyDPg8+Fz4POus61z4XOriAnJXMnIM60zrXOvSDOtc6vzr3Osc65IM68zrnOsSDPg8+Fz4POus61z4XOriDOu86uz4jOt8+CLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM6xzr3OrM6zzr3Pic+Dzrcgz4TPic69IM+AzrHPgc6xzrzOrc+Ez4HPic69IM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICclcyciCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICLOlyDPg8+Fz4POus61z4XOriDOtc65z4PPjM60zr/PhSDOss6vzr3PhM61zr8gzrTOtc69IM6xz4DOv860zq3Ph864zrfOus61IM+Ezrcgzr3Orc6xIM+Bz43OuM68zrnPg863IM+EzrHPh8+Nz4TOt8+EzrHPgiDOus6xz4HOrS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAizpcgz4PPhc+DzrrOtc+Fzq4gzrXOuc+Dz4zOtM6/z4UgzrLOr869z4TOtc6/IM60zrXOvSDOsc+Azr/OtM6tz4fOuM63zrrOtSDPhM63IM69zq3OsSDPgc+NzrjOvM65z4POtyDPhM6xz4fPjc+EzrfPhM6xz4IgzrrOsc+Bzq0uIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICLOnyDOv860zrfOs8+Mz4Igz4TOt8+CIM+Dz4XPg866zrXPhc6uz4IgJyVzJyDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXOuSDOus6sz4DOv865zrEgzrPOvc+Jz4PPhM6uIM68zq3OuM6/zrTOvyDOu86uz4jOt8+CLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICLOnyDOv860zrfOs8+Mz4Igz4TOt8+CIM+Dz4XPg866zrXPhc6uz4IgJyVzJyDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXOuSDOus6sz4DOv865zrEgzrPOvc+Jz4PPhM6uIM68zq3OuM6/zrTOvyDOu86uz4jOt8+CLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICLOlyDPg8+Fz4POus61z4XOriDOtc65z4PPjM60zr/PhSDOss6vzr3PhM61zr8gzrTOtc69IM6xz4DOv860zq3Ph864zrfOus61IM+Ezrcgzr3Orc6xIM+Bz43OuM68zrnPg863IM+EzrHPh8+Nz4TOt8+EzrHPgiDOus6xz4HOrS4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6xzr3OrM6zzr3Pic+DzrfPgiDPhM+Jzr0gz4HPhc64zrzOr8+DzrXPic69IM60zq3Ous+EzrcgJWQgz4PPhM63zr0gz4PPhc+DzrrOtc+Fzq4gJyVzJy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gzrHOvc6szrPOvc+Jz4POtyAlZCBieXRlcyDOsc+Azr8gz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIs6XIM+Dz4XPg866zrXPhc6uICclcycgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc+DzrrOtc+Fzq4gzrXOvs+MzrTOv8+FLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM+Bz43OuM68zrnPg863z4IgzrXOuc+DzrHOs8+JzrPOrs+CICVkIM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgz4HPjc64zrzOuc+DzrfPgiDOtc65z4POsc6zz4nOs86uz4IgJWQgz4PPhM63zr0gz4PPhc+DzrrOtc+Fzq4gJXMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOsc69zqzOs869z4nPg863z4IgzrnPg8+Hz43PgiDPg86uzrzOsc+Ezr/PgiDOs865zrEgz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICLOnyDOv860zrfOs8+Mz4Igz4TOt8+CIM+Dz4XPg866zrXPhc6uz4IgJyVzJyDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXOuSDOus6sz4DOv865zrEgzrPOvc+Jz4PPhM6uIM68zq3OuM6/zrTOvyDOu86uz4jOt8+CLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHPgM6/zrrPic60zrnOus6/z4DOv86vzrfPg863z4Igz4TOt8+CIM61zrnOus+Mzr3Osc+CIEpQRUciCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSLOo8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOtyDOu86uz4jOtyDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69IM+EzrfPgiDPg8+Fz4POus61z4XOrs+CICclcyc6IM6UzrXOvSDOtc6vzr3Osc65IM6/zrTOt86zz4zPgiB2NGwyLiAiCi0izpXOu86tzrPOvs+EzrUgzrHOvSDOtc6vzr3Osc65IM6/zrTOt86zz4zPgiB2NGwyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6vz4fOvc61z4XPg863z4IgzrnOtM65zr/PhM6uz4TPic69IM+EzrfPgiDOtc65z4PPjM60zr/PhSAlZCDPg8+Ezrcgz4PPhc+DzrrOtc+Fzq4gJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOsc69zqzOs869z4nPg863z4Igz4TPic69IM+Bz4XOuM68zq/Pg861z4nOvSDOtM6tzrrPhM63ICVkIM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOsc69zq/Ph869zrXPhc+DzrfPgiDOus6xzr3Ov869zrnOus6/z4DOv86vzrfPg863z4Igz4PPhM63IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0izpHPgM6/z4TPhc+Hzq/OsSDOus6xz4TOrCDPhM63zr0gzrHOvc6szrPOvc+Jz4POtyDPhM+Jzr0gz4fOsc+BzrHOus+EzrfPgc65z4PPhM65zrrPjs69IM61zrvOrc6zz4fOv8+FIM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgz4TOsc+Fz4TOv8+Azr/Or863z4POtyDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICLOkc+Fz4TOriDOtM61zr0gzrXOr869zrHOuSDOvM65zrEgz4PPhc66zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiIgotIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiAnJXMnIM6zzrnOsSDOsc69zqzOs869z4nPg863IM66zrHOuSDOs8+BzqzPiM65zrzOvy4gIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAizpcgz4PPhc+DzrrOtc+Fzq4gJyVzJyDOtM61zr0gzrXOr869zrHOuSDOvM65zrEgz4PPhc+DzrrOtc+Fzq4gzrvOrs+IzrfPgi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIs6XIM+Dz4XPg866zrXPhc6uICclcycgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc+DzrrOtc+Fzq4gzrXOvs+MzrTOv8+FLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIs6XIM+Dz4XPg866zrXPhc6uICclcycgzrTOtc69IM61zq/Ovc6xzrkgz4PPhc+DzrrOtc+Fzq4gzrXOvs+MzrTOv8+FLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIiIKLSLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM+MIM+Ezr8gzqzOvc6/zrnOs868zrEgz4TOt8+CIM+Dz4XPg866zrXPhc6uz4IgJyVzJyDOs865zrEgzrHOvc6szrPOvc+Jz4POtyDOus6xzrkgzrPPgc6sz4jOuc68zr8uICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPgc+NzrjOvM65z4POt8+CIM66zrHOvc+Mzr3OsSDOs865zrEgz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6szrPOvc+Jz4POt8+CIM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4Igz4PPhc+Hzr3PjM+EzrfPhM6xz4IgzrTOrc66z4TOtyDOs865zrEgz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSLOkc+Azr/PhM+Fz4fOr86xIM+Bz43OuM68zrnPg863z4Igz4TPgc6tz4fOv8+Fz4POsc+CIM+Dz4XPh869z4zPhM63z4TOsc+CIM60zq3Ous+EzrcgzrPOuc6xIM+EzrfOvSDPg8+Fz4POus61z4XOriAnJXMnIM+Dz4TOsSAlbHUgSHoiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOsc69zqzOs869z4nPg863z4IgzrnPg8+Hz43PgiDPg86uzrzOsc+Ezr/PgiDOs865zrEgz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6xzr3OrM6zzr3Pic+DzrfPgiDPhM65zrzOrs+CIM6zzrnOsSDPhM6/zr0gzq3Ou861zrPPh86/ICVkIM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM+Bz43OuM68zrnPg863z4Igz4TOuc68zq7PgiAlZCDOs865zrEgz4TOv869IM6tzrvOtc6zz4fOvyAlZCDPg8+EzrfOvSDPg8+Fz4POus61z4XOriAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6szrPOvc+Jz4POt8+CIM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4IgzrXOuc+DzrHOs8+JzrPOrs+CIM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIM6gzrnOuM6xzr3PjM69IM69zrEgIgotIs61zq/Ovc6xzrkgzrzOuc6xIM+Dz4XPg866zrXPhc6uIM+BzqzOtM65zr8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6szrPOvc+Jz4POt8+CIM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4IgzrXOvs+MzrTOv8+FIM+Dz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIM6gzrnOuM6xzr3PjM69IM69zrEgzrXOr869zrHOuSAiCi0izrzOuc6xIM+Dz4XPg866zrXPhc6uIM+BzqzOtM65zr8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOv8+BzrnPg868zr/PjSDOtc6+z4zOtM6/z4UgJWQgz4PPhM63zr0gz4PPhc+DzrrOtc+Fzq4gJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotIs6XIM6xzrvOu86xzrPOriDPhM63z4IgzrHOvc6szrvPhc+DzrfPgiDOus6xz4TOrCDPhM63IM60zrnOrM+BzrrOtc65zrEgzrvOtc65z4TOv8+Fz4HOs86vzrHPgiDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXPhM6xzrkgzrHOus+MzrzOsS4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIs6UzrXOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOu861zrnPhM6/z4XPgc6zzq/OsSDPh8+Jz4HOr8+CIM+Bzr/Ou8+MzrkgIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDPg8+Nzr3OtM61z4POtyDOvM61IM+Ezr/OvSDOtM65zrHOus6/zrzOuc+Dz4TOriDOrs+Hzr/PhSIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6xzr3Osc62zq7PhM63z4POt8+CIM+Ez4nOvSDOtM+Fzr3Osc+Ezr/PhM6uz4TPic69IM+Ezr/PhSDOtM65zrHOus6/zrzOuc+Dz4TOriDOrs+Hzr/PhSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSDPgc6/zq7PgiDOtM61zrTOv868zq3Ovc+Jzr0uIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAizpXPg8+Jz4TOtc+BzrnOus+MIM+Dz4bOrM67zrzOsSDPgc6/zq7PgiDOtM61zrTOv868zq3Ovc+Jzr0uIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAizpzPgM6sz4POsSIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAizqDPgc6vzrzOsSAodHJlYmxlKSIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTeW50aCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAizpzOtc6zzqzPhs+Jzr3OvyIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIs6Tz4HOsc68zrzOri3Otc65z4PPjM60zr/PhSIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICLOnM61zq/Ous+EzrfPgiIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAizpXOs86zz4HOsc+Gzq4iCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICLOms6tz4HOtM6/z4IgzrXOuc+Dz4zOtM6/z4UiCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAizprOrc+BzrTOv8+CIM61zr7PjM60zr/PhSIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAizpPPgc6xzrzOvM6uLTEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIs6Tz4HOsc68zrzOri0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICLOk8+BzrHOvM68zq4tMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAizqjOt8+GzrnOsc66z4wtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAizqjOt8+GzrnOsc66z4wtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAizqjOt8+GzrnOsc66z4wtMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICLOlc6vz4POv860zr/PgiDPhM63zrvOtc+Gz47Ovc6/z4UiCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIs6Izr7Ov860zr/PgiDPhM63zrvOtc+Gz47Ovc6/z4UiCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAizpLOr869z4TOtc6/IgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIs6hzqzOtM65zr8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICIiCi0jfiAizpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TPjCDPhM6/IM6szr3Ov865zrPOvM6xIM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM6uz4fOv8+FIM6zzrnOsSDPh861zrnPgc65z4POvM+MIM+Ezr/PhSDOtc67zq3Os8+Hzr/PhSDPhM6/z4UgIgotI34gIs68zq/Ous+EzrcuICIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIs6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ez4wgz4TOvyDOrM69zr/Ouc6zzrzOsSDPhM63z4Igz4PPhc+DzrrOtc+Fzq7PgiDOrs+Hzr/PhSDOs865zrEgz4fOtc65z4HOuc+DzrzPjCDPhM6/z4UgzrXOu86tzrPPh86/z4Ugz4TOv8+FICIKLSN+ICLOvM6vzrrPhM63LiDOkc+Fz4TOriDOtyDOrc66zrTOv8+Dzrcgz4TOv8+FIE9wZW4gU291bmQgU3lzdGVtIM60zrXOvSDPhc+Azr/Pg8+EzrfPgc6vzrbOtc+EzrHOuSDOsc+Az4wgzrHPhc+Ez4wgzr/PhCAiCi0jfiAiz4PPhM6/zrnPh861zq/Ovy4iCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIs6TzrXOvc65zrrPjM+CIChNYXN0ZXIpIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIs6cz4DPgc6/z4PPhM6sIgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAizqDOr8+Dz4kiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICLOkc66zr/Phc+Dz4TOuc66zqwiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIs6azq3Ovc+Ez4HOvyIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAizqfOsc68zrfOu8+Ozr0gz4PPhc+Hzr3Ov8+Ezq7PhM+Jzr0gKExGRSkiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAizqDOtc+BzrnOss6szrvOu8+Jzr0gKFN1cnJvdW5kKSIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIs6gzrvOtc+Fz4HOuc66z4wiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICLOiM6+zr/OtM6/z4IgQVVYIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIs6SzqzOuM6/z4IgM0QiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIs6azq3Ovc+Ez4HOvyAzRCIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIs6Vzr3Or8+Dz4fPhc+DzrcgM0QiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIs6kzrfOu86tz4bPic69zr8iCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAizpXOr8+Dzr/OtM6/z4IgzrLOr869z4TOtc6/IgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICLOlc6vz4POv860zr/PgiBBVVgiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAizprOrc+BzrTOv8+CIM6VzrPOs8+BzrHPhs6uz4IiCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAizprOrc+BzrTOv8+CIM61zr7PjM60zr/PhSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIs6Vzr3Or8+Dz4fPhc+DzrcgzrzOuc66z4HOv8+Gz47Ovc6/z4UiCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICLOlM65zrHOs869z4nPg8+EzrnOus+MIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAizpXOvc6vz4PPh8+Fz4POtyDPh86xzrzOt867z47OvSIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICLOmM+Nz4HOtc+CIM6Rzr3Osc+AzrHPgc6xzrPPic6zzq7PgiIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICLOlc6vz4POv860zr/PgiIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICLOoM6xz4HOsc66zr/Ou86/z43OuM63z4POtyDPgM63zrPOrs+CIgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAizonPh86/z4Igz4DOu863zrrPhM+Bzr/Ou86/zrPOr86/z4UiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIs6gz4HOv8+Dzr/OvM6/zq/Pic+Dzrcgz4PPhM6tz4HOtc6/IgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICLOo8+Ezq3Pgc61zr8iCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAizonPh86/z4IgU3Vycm91bmQiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIs6azq3Pgc60zr/PgiDOvM65zrrPgc6/z4bPjs69zr/PhSIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICLOoM63zrPOriDOvM61zrPOsc+Gz47Ovc6/z4UiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAizqDOt86zzq4gzrzOuc66z4HOv8+Gz47Ovc6/z4UiCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICLOks+Nz4POvM6xIgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICLOms61zr3PhM+BzrnOus+MIC8gzqfOsc68zrfOu8+Ozr0gz4PPhc+Hzr3Ov8+Ezq7PhM+Jzr0iCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICLOo8+EzrXPgc61zr/Phs+Jzr3Ouc66zq4gzrzOr86+zrciCi0KLSN+IG1zZ2lkICJNb25vIE1peCIKLSN+IG1zZ3N0ciAizpzOv869zr/Phs+Jzr3Ouc66zq4gzrzOr86+zrciCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIs6czq/Ovs63IM61zrnPg8+MzrTOv8+FIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICLOnM65zrrPgc+Mz4bPic69zr8gMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAizpzOuc66z4HPjM+Gz4nOvc6/IDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAizqjOt8+GzrnOsc66zq4gzq3Ovs6/zrTOv8+CIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAizqjOt8+GzrnOsc66zq4gzrXOr8+Dzr/OtM6/z4IiCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAizqTOt867zrXPhs+Jzr3Ouc66zq4gz4PPhc+DzrrOtc+Fzq4iCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAizobOu867zr8iCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICLOms6xzr3Orc69zrEiCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAiT24iCi0KLSN+IG1zZ2lkICJPZmYiCi0jfiBtc2dzdHIgIk9mZiIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIs6jzq/Os86xz4POtyIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIs6Tz4HOrs6zzr/Pgc6xIgotCi0jfiBtc2dpZCAiVmVyeSBMb3ciCi0jfiBtc2dzdHIgIs6gzr/Ou8+NIM+HzrHOvM63zrvOriIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAizqfOsc68zrfOu86uIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICLOnM61z4POsc6vzrEiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICLOpc+IzrfOu86uIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICLOoM6/zrvPjSDPhc+IzrfOu86uIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAizqDOsc+BzrHOs8+JzrPOrs+CIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAizpzOuc66z4HPjM+Gz4nOvc6/IM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICLOlc6vz4POv860zr/PgiDOs8+BzrHOvM68zq7PgiDOvM+Az4HOv8+Dz4TOuc69zr/PjSDPgM6szr3Otc67IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAizpHOus6/z4XPg8+EzrnOus6sIM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAizojOvs6/zrTOv8+CIM6zz4HOsc68zrzOrs+CIM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJHcmVlbiBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6gz4HOrM+DzrnOvc63IM+Fz4DOv860zr/Ph86uIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6hzr/OtiDPhc+Azr/OtM6/z4fOriIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLOnM+AzrvOtSDPhc+Azr/OtM6/z4fOriIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizpvOtc+FzrrOriDPhc+Azr/OtM6/z4fOriIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizpzOsc+Nz4HOtyDPhc+Azr/OtM6/z4fOriIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICLOk866z4HOuSDPhc+Azr/OtM6/z4fOriIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6gzr/Pgc+Ezr/Ous6xzrvOryDPhc+Azr/OtM6/z4fOriIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6az4zOus66zrnOvc63IM+Fz4DOv860zr/Ph86uIgotCi0jfiBtc2dpZCAiWWVsbG93IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizprOr8+Ez4HOuc69zrcgz4XPgM6/zrTOv8+Hzq4iCi0KLSN+IG1zZ2lkICJHcmVlbiBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6gz4HOrM+DzrnOvc63IM+Fz4DOv860zr/Ph86uIM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizqHOv862IM+Fz4DOv860zr/Ph86uIM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizpzPgM67zrUgz4XPgM6/zrTOv8+Hzq4gzrzPgM+Bzr/Pg8+EzrnOvc6/z40gz4DOrM69zrXOuyIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizpvOtc+FzrrOriDPhc+Azr/OtM6/z4fOriDOvM+Az4HOv8+Dz4TOuc69zr/PjSDPgM6szr3Otc67IgotCi0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLOnM6xz43Pgc63IM+Fz4DOv860zr/Ph86uIM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJHcmF5IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizpPOus+Bzrkgz4XPgM6/zrTOv8+Hzq4gzrzPgM+Bzr/Pg8+EzrnOvc6/z40gz4DOrM69zrXOuyIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6gzr/Pgc+Ezr/Ous6xzrvOryDPhc+Azr/OtM6/z4fOriDOvM+Az4HOv8+Dz4TOuc69zr/PjSDPgM6szr3Otc67IgotCi0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAizprPjM66zrrOuc69zrcgz4XPgM6/zrTOv8+Hzq4gzrzPgM+Bzr/Pg8+EzrnOvc6/z40gz4DOrM69zrXOuyIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIs6azq/PhM+BzrnOvc63IM+Fz4DOv860zr/Ph86uIM68z4DPgc6/z4PPhM65zr3Ov8+NIM+AzqzOvc61zrsiCi0KLSN+IG1zZ2lkICJTcHJlYWQgT3V0cHV0IgotI34gbXNnc3RyICLOlc+Fz4HOtc6vzrEgzq3Ovs6/zrTOv8+CIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAizpzOr86+zrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgiAoRG93bm1peCkiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICLOlc6vz4POv860zr/PgiDOtc65zrrOv869zrnOus6/z40gzrzOr866z4TOtyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICLOiM6+zr/OtM6/z4IgzrXOuc66zr/Ovc65zrrOv8+NIM68zq/Ous+EzrciCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICLOms6xzr3OrM67zrnOsSDOtc65zrrOv869zrnOus6/z40gzrzOr866z4TOtyIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICLOm861zrnPhM6/z4XPgc6zzq/OsSAlcyAlZCIKLQotI34gbXNnaWQgIiVzIEZ1bmN0aW9uIgotI34gbXNnc3RyICLOm861zrnPhM6/z4XPgc6zzq/OsSAlcyIKLQotI34gbXNnaWQgIkdvdCB1bmV4cGVjdGVkIGZyYW1lIHNpemUgb2YgJXUgaW5zdGVhZCBvZiAldS4iCi0jfiBtc2dzdHIgIs6Rz4DPgc6/z4POtM+MzrrOt8+Ezr8gzrzOrc6zzrXOuM6/z4Igz4DOu86xzrnPg86vzr/PhSDOsc+Az4wgJXUgzrHOvc+Ezq8gz4TOv8+FICV1IgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gzrHOvc6szrPOvc+Jz4POtyAlZCBieXRlcyDPg8+EzrfOvSDPg8+Fz4POus61z4XOriAnJXMnLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM64zq3Pg863z4Igz4POtSDPg861zrnPgc6sIM+Ez4nOvSBidWZmZXIgz4PPhM63IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6xzr3OrM6zzr3Pic+DzrfPgiDPgM67zrHOuc+Dzq/Pic69IM6yzq/Ovc+EzrXOvyDOsc+Az4wgz4TOt869IM+Dz4XPg866zrXPhc6uICclcycuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIiIKLSN+ICLOkc+Azr/PhM+Fz4fOr86xIM6tz4DOtc65z4TOsSDOsc+Az4wgJWQgz4DPgc6/z4PPgM6szrjOtc65zrXPgi4gz4PPhc+DzrrOtc+Fzq4gJXMuIM+Dz4bOrM67zrzOsSDPg8+Fz4PPhM6uzrzOsc+Ezr/PgjogJXMiCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIGlucHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICLOoM61z4HOuc6zz4HOrM+GzrXOuSDPhM6/IM61z4DOuc67zrXOs868zq3Ovc6/IM+Dz4TOv865z4fOtc6vzr8gzrXOuc+DzrHOs8+JzrPOrs+CLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZy4iCi0jfiBtc2dzdHIgIiIKLSN+ICLOoM61z4HOuc6zz4HOrM+GzrXOuSDPhM6/IM61z4DOuc67zrXOs868zq3Ovc6/IM+Dz4TOv865z4fOtc6vzr8gzrXOvs+MzrTOv8+FIM6zzrnOsSDPhM6/IEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZy4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIG91dHB1dCBlbGVtZW50IGZvciBNdXNpYyBhbmQgTW92aWVzLiIKLSN+IG1zZ3N0ciAizqDOtc+BzrnOs8+BzqzPhs61zrkgz4TOvyDOtc+AzrnOu861zrPOvM6tzr3OvyDPg8+Ezr/Ouc+HzrXOr86/IM61zr7PjM60zr/PhSDOs865zrEgzrzOv8+Fz4POuc66zq4gzrrOsc65IM+EzrHOuc69zq/Otc+CLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICLOoM61z4HOuc6zz4HOrM+GzrXOuSDPhM6/IM61z4DOuc67zrXOs868zq3Ovc6/IM+Dz4TOv865z4fOtc6vzr8gzrXOvs6xzrPPic6zzq7Pgi4iCmRpZmYgLS1naXQgYS9wby9lbkBib2xkcXVvdC5oZWFkZXIgYi9wby9lbkBib2xkcXVvdC5oZWFkZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZGI2YTAuLjAwMDAwMDAKLS0tIGEvcG8vZW5AYm9sZHF1b3QuaGVhZGVyCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCi0jIFRoZSBtc2dpZHMgbXVzdCBiZSBBU0NJSSBhbmQgdGhlcmVmb3JlIGNhbm5vdCBjb250YWluIHJlYWwgcXVvdGF0aW9uCi0jIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQotIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKLSMgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy9xdW90ZXMuaHRtbAotIwotIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bwotIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE4KSBhbmQgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTkpLgotIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KLSMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQotIyBhbmQgcGFpcnMgb2YgcXVvdGF0aW9uIG1hcmsgKDB4MjIpIHRvCi0jIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCi0jCi0jIFdoZW4gb3V0cHV0IHRvIGFuIFVURi04IHRlcm1pbmFsLCB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlcnMgYXBwZWFyIHBlcmZlY3RseS4KLSMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCi0jIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCi0jIGdyYXZlL2FjdXRlIGFjY2VudCAoYnkgbGliaWNvbnYpLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCi0jIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCi0jIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKLSMgdHJhbnNsaXRlcmF0ZWQgdG8gYXBvc3Ryb3BoZXMsIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKLSMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KLSMKLSMgVGhpcyBjYXRhbG9nIGZ1cnRoZXJtb3JlIGRpc3BsYXlzIHRoZSB0ZXh0IGJldHdlZW4gdGhlIHF1b3RhdGlvbiBtYXJrcyBpbgotIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgotIwpkaWZmIC0tZ2l0IGEvcG8vZW5AcXVvdC5oZWFkZXIgYi9wby9lbkBxdW90LmhlYWRlcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2NDdmYy4uMDAwMDAwMAotLS0gYS9wby9lbkBxdW90LmhlYWRlcgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgotIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgotIyBjaGFyYWN0ZXJzLCBvbmx5IHN1YnN0aXR1dGVzIGxpa2UgZ3JhdmUgYWNjZW50ICgweDYwKSwgYXBvc3Ryb3BoZSAoMHgyNykKLSMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCi0jIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKLSMKLSMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KLSMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KLSMgSXQgYWxzbyB0cmFuc2xhdGVzIHBhaXJzIG9mIGFwb3N0cm9waGUgKDB4MjcpIHRvCi0jIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKLSMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bwotIyBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFDKSBhbmQgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUQpLgotIwotIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCi0jIFdoZW4gb3V0cHV0IHRvIGFuIElTTy04ODU5LTEgdGVybWluYWwsIHRoZSBzaW5nbGUgcXVvdGF0aW9uIG1hcmtzIGFyZQotIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bwotIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQotIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgotIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCi0jIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCi0jIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCi0jCmRpZmYgLS1naXQgYS9wby9lbl9HQi5nbW8gYi9wby9lbl9HQi5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZjI0N2UuLjAwMDAwMDAKLS0tIGEvcG8vZW5fR0IuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZW5fR0IucG8gYi9wby9lbl9HQi5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlZTQ2My4uMDAwMDAwMAotLS0gYS9wby9lbl9HQi5wbworKysgL2Rldi9udWxsCkBAIC0xLDYyMSArMCwwIEBACi0jIEVuZ2xpc2ggKEJyaXRpc2gpIHRyYW5zbGF0aW9uLgotIyBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIEdhcmV0aCBPd2VuIDxnb3dlbjcyQHlhaG9vLmNvbT4sIDIwMDQuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucyAwLjguMVxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA0LTI2IDEwOjQxLTA0MDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEdhcmV0aCBPd2VuIDxnb3dlbjcyQHlhaG9vLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBFbmdsaXNoIChCcml0aXNoKSA8ZW5fZ2JAbGkub3JnPlxuIgotIkxhbmd1YWdlOiBlbl9HQlxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiQ291bGQgbm90IGNsb3NlIGNvbnRyb2wgZGV2aWNlIFwiJXNcIi4iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJZb3VyIG9zcyBkZXZpY2UgY291bGQgbm90IGJlIHByb2JlZCBjb3JyZWN0bHkiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJDb3VsZCBub3QgY2xvc2UgY29udHJvbCBkZXZpY2UgXCIlc1wiLiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiQ291bGQgbm90IGNsb3NlIGNvbnRyb2wgZGV2aWNlIFwiJXNcIi4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgXCIlc1wiIGZvciB3cml0aW5nLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJDb3VsZCBub3Qgb3BlbiBDRCBkZXZpY2UgZm9yIHJlYWRpbmcuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIllvdXIgb3NzIGRldmljZSBjb3VsZCBub3QgYmUgcHJvYmVkIGNvcnJlY3RseSIKLQotIywgZnV6enkKLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJSZWNvcmQiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWNyb3Bob25lIgotCi0jLCBmdXp6eQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmUtaW4iCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJWb2x1bWUiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi0jLCBmdXp6eQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIlNwZWFrZXIiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkNvdWxkIG5vdCBnZXQgYnVmZmVycyBmcm9tIGRldmljZSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJDb3VsZCBub3QgZ2V0IGJ1ZmZlcnMgZnJvbSBkZXZpY2UgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJEZXZpY2UgXCIlc1wiIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIkRldmljZSBcIiVzXCIgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiRGV2aWNlIFwiJXNcIiBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIkRldmljZSBcIiVzXCIgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIkNvdWxkIG5vdCBnZXQgYnVmZmVycyBmcm9tIGRldmljZSBcIiVzXCIuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQ291bGQgbm90IGdldCBlbm91Z2ggYnVmZmVycyBmcm9tIGRldmljZSBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJDb3VsZCBub3QgZ2V0IGJ1ZmZlcnMgZnJvbSBkZXZpY2UgXCIlc1wiLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJEZXZpY2UgXCIlc1wiIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJDb3VsZCBub3QgY2xvc2UgYXVkaW8gZGV2aWNlIFwiJXNcIi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiQ291bGQgbm90IGNsb3NlIGF1ZGlvIGRldmljZSBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlIFwiJXNcIi4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQ291bGQgbm90IGdldCBlbm91Z2ggYnVmZmVycyBmcm9tIGRldmljZSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkNvdWxkIG5vdCB3cml0ZSB0byBkZXZpY2UgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiRGV2aWNlIFwiJXNcIiBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJEZXZpY2UgXCIlc1wiIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkRldmljZSBcIiVzXCIgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJDb3VsZCBub3QgZ2V0IGJ1ZmZlcnMgZnJvbSBkZXZpY2UgXCIlc1wiLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJDb3VsZCBub3QgZ2V0IGVub3VnaCBidWZmZXJzIGZyb20gZGV2aWNlIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkNvdWxkIG5vdCBjbG9zZSBjb250cm9sIGRldmljZSBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQ291bGQgbm90IGNsb3NlIGNvbnRyb2wgZGV2aWNlIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiQ291bGQgbm90IGdldCBlbm91Z2ggYnVmZmVycyBmcm9tIGRldmljZSBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJDb3VsZCBub3QgY2xvc2UgYXVkaW8gZGV2aWNlIFwiJXNcIi4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkRldmljZSBcIiVzXCIgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IGdldCBlbm91Z2ggYnVmZmVycyBmcm9tIGRldmljZSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiQmFzcyIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAiVHJlYmxlIgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlN5bnRoIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJTcGVha2VyIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAiTGluZS1pbiIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaXhlciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiUmVjb3JkIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAiSW4tZ2FpbiIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJPdXQtZ2FpbiIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiTGluZS0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMaW5lLTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIkxpbmUtMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0xIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICJEaWdpdGFsLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJQaG9uZS1pbiIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiUGhvbmUtb3V0IgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlJhZGlvIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIlJlY29yZCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJWaWRlbyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIlJlY29yZCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAiT3V0LWdhaW4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAiTWljcm9waG9uZSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTW9uaXRvciIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pY3JvcGhvbmUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIlNwZWFrZXIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIk1pY3JvcGhvbmUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICJNaWNyb3Bob25lIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWljcm9waG9uZSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0xIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJNaWNyb3Bob25lIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJDb3VsZCBub3QgZ2V0IGJ1ZmZlcnMgZnJvbSBkZXZpY2UgXCIlc1wiLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotCi0jfiBtc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIkVycm9yIGNsb3NpbmcgZmlsZSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotI34gbXNnc3RyICJDb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0KLSN+IG1zZ2lkICJObyBmaWxlbmFtZSBzcGVjaWZpZWQuIgotI34gbXNnc3RyICJObyBmaWxlbmFtZSBzcGVjaWZpZWQuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbnRyb2wgZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIkNvdWxkIG5vdCBvcGVuIGNvbnRyb2wgZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIGF1ZGlvIGRldmljZSBcIiVzXCIuIgotI34gbXNnc3RyICJDb3VsZCBub3QgY29uZmlndXJlIGF1ZGlvIGRldmljZSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHNldCBhdWRpbyBkZXZpY2UgXCIlc1wiIHRvICVkIEh6LiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IHNldCBhdWRpbyBkZXZpY2UgXCIlc1wiIHRvICVkIEh6LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZpZGVvIGRldmljZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotI34gbXNnc3RyICJDb3VsZCBub3Qgb3BlbiB2aWRlbyBkZXZpY2UgXCIlc1wiIGZvciB3cml0aW5nLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSB2aWRlbyBkZXZpY2UgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IGNsb3NlIHZpZGVvIGRldmljZSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiT1NTIGRldmljZSBcIiVzXCIgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBwcm9ncmFtLiIKLSN+IG1zZ3N0ciAiT1NTIGRldmljZSBcIiVzXCIgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBwcm9ncmFtLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3MgZGV2aWNlIFwiJXNcIiwgY2hlY2sgaXRzIHBlcm1pc3Npb25zLiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IGFjY2VzcyBkZXZpY2UgXCIlc1wiLCBjaGVjayBpdHMgcGVybWlzc2lvbnMuIgotCi0jfiBtc2dpZCAiRGV2aWNlIFwiJXNcIiBkb2VzIG5vdCBleGlzdC4iCi0jfiBtc2dzdHIgIkRldmljZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIkNvdWxkIG5vdCBvcGVuIGRldmljZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIkNvdWxkIG5vdCBvcGVuIGRldmljZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gdmZzIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLSN+IG1zZ3N0ciAiQ291bGQgbm90IG9wZW4gdmZzIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJObyBmaWxlbmFtZSBnaXZlbi4iCi0jfiBtc2dzdHIgIk5vIGZpbGVuYW1lIGdpdmVuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZmcyBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZzogJXMuIgotI34gbXNnc3RyICJDb3VsZCBub3Qgb3BlbiB2ZnMgZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotCi0jfiBtc2dpZCAiTm8gZmlsZW5hbWUgZ2l2ZW4iCi0jfiBtc2dzdHIgIk5vIGZpbGVuYW1lIGdpdmVuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNsb3NlIHZmcyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIkNvdWxkIG5vdCBjbG9zZSB2ZnMgZmlsZSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiTm8gZGV2aWNlIHNwZWNpZmllZC4iCi0jfiBtc2dzdHIgIk5vIGRldmljZSBzcGVjaWZpZWQuIgotCi0jfiBtc2dpZCAiRGV2aWNlIGlzIG5vdCBvcGVuLiIKLSN+IG1zZ3N0ciAiRGV2aWNlIGlzIG5vdCBvcGVuLiIKLQotI34gbXNnaWQgIkRldmljZSBpcyBvcGVuLiIKLSN+IG1zZ3N0ciAiRGV2aWNlIGlzIG9wZW4uIgpkaWZmIC0tZ2l0IGEvcG8vZW8uZ21vIGIvcG8vZW8uZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTE4OWUzLi4wMDAwMDAwCi0tLSBhL3BvL2VvLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2VvLnBvIGIvcG8vZW8ucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMDI4MGMuLjAwMDAwMDAKLS0tIGEvcG8vZW8ucG8KKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotIyBFc3BlcmFudG8gdHJhbnNsYXRpb24gZm9yIGdzdC1wbHVnaW5zLWdvb2QuCi0jIENvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZS4KLSMgS3Jpc3RqYW4gU0NITUlEVCA8a3Jpc3RqYW4uc2NobWlkdEBnb29nbGVtYWlsLmNvbT4sIDIwMTEuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDAuMTAuMjguMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDExLTA2LTA0IDIxOjQ4KzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEtyaXN0amFuIFNDSE1JRFQgPGtyaXN0amFuLnNjaG1pZHRAZ29vZ2xlbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogRXNwZXJhbnRvIDx0cmFuc2xhdGlvbi10ZWFtLWVvQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogZW9cbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiclcycgZGUgJyVzJyIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiTmUgZWJsaXMga29uZWt0aSBhbCBzZXJ2aWxvIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iTmUgZWJsaXMgbWFsZmVybWkgbGEgc29uYXBhcmF0b24gcG9yIHJlcHJvZHVrdGFkby4gxJxpIGVzdGFzIHV6YXRlIGRlIGFsaWEgIgotImFwbGlrYcS1by4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk5lIGVibGlzIG1hbGZlcm1pIGxhIHNvbmFwYXJhdG9uIHBvciByZXByb2R1a3RhZG8uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiTmUgZWJsaXMgbWFsZmVybWkgc29uYXBhcmF0b24gcG9yIHJlZ2lzdHJhZG8uIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIlJlZ2lzdHJpIgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAiTWlrcm9mb25vIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiTGHFrXRlY28iCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJFa3Jhbm8iCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiVGlvIG5lIGVzdGFzICclcyctYXBhcmF0by4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTmUgZWJsaXMgbWFsZmVybWkgc29uYXBhcmF0b24gcG9yIHJlZ2lzdHJhZG8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICIiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybmEgZGF0dW1mbHUtZXJhcm8uIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiQmFzbyIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTaW50ZXppbG8iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJQYXJvbGlsbyIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJLRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaWtzaWxvIgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlJhZGlvIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICLEiGVmZSIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJBbnRhxa1lIgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAiTWFsYW50YcWtZSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkthcHRlbGVmb25vIgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICJDZW50cmUiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAixIhpcmthxa1lIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiRmxhbmtlIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIkVuaWdvIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICJEdWthbmFsZSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICLEiGlya2HFrWEgc29ubyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25vIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk1pa3JvZm9ubyAyIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtbyIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICJBbGlhIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiTmVuaXUiCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAiRW7FnWFsdGl0ZSIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiRWzFnWFsdGl0ZSIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIlNpbGVudGlnaSIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIlJhcGlkZSIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICJUcmUgbWFsYWx0ZSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiTWFsYWx0ZSIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiTWV6ZSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkFsdGUiCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIlRyZSBhbHRlIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzICVkIGZ1bmtjaW8iCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgZnVuY2lvIgpkaWZmIC0tZ2l0IGEvcG8vZXMuZ21vIGIvcG8vZXMuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzZiOTJkLi4wMDAwMDAwCi0tLSBhL3BvL2VzLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2VzLnBvIGIvcG8vZXMucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTFkYTkuLjAwMDAwMDAKLS0tIGEvcG8vZXMucG8KKysrIC9kZXYvbnVsbApAQCAtMSw4NzAgKzAsMCBAQAotIyB0cmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kLTAuMTAuMjYuMi5wbyB0byBFc3Bhw7FvbAotIyBzcGFuaXNoIHRyYW5zbGF0aW9uIGZvciBnc3QtcGx1Z2lucy1nb29kCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jIEpvcmdlIEdvbnrDoWxleiBHb256w6FsZXogPGFsb3JpZWxAZ21haWwuY29tPiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMS4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QgMC4xMC4yNi4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTEtMDItMTIgMTg6MzArMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogSm9yZ2UgR29uesOhbGV6IEdvbnrDoWxleiA8YWxvcmllbEBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogU3BhbmlzaCA8ZXNAbGkub3JnPlxuIgotIkxhbmd1YWdlOiBlc1xuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtR2VuZXJhdG9yOiBLQmFiZWwgMS4xMS40XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiRmFsbMOzIGFsIGRlY29kaWZpY2FyIGxhIGltYWdlbiBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLCqyVzwrsgcG9yIMKrJXPCuyIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBjb25lY3RhciBjb24gZWwgc2Vydmlkb3IiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiTm8gZXhpc3RlIHVuIFVSTCBlc3RhYmxlY2lkby4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiRWwgc2Vydmlkb3Igbm8gc29wb3J0YSBsYSBiw7pzcXVlZGEuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJObyBzZSBwdWRvIHJlc29sdmVyIGVsIG5vbWJyZSBkZWwgc2Vydmlkb3IuIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gZXN0YWJsZWNlciBsYSBjb25leGnDs24gY29uIGVsIHNlcnZpZG9yLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIkZhbGzDsyBsYSBjb25maWd1cmFjacOzbiBkZSBsYSBjb25leGnDs24gc2VndXJhLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iT2N1cnJpw7MgdW4gZXJyb3IgZGUgcmVkIG8gZWwgc2Vydmlkb3IgY2VycsOzIGxhIGNvbmV4acOzbiBkZSBmb3JtYSBpbmVzcGVyYWRhLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiRWwgc2Vydmlkb3IgZW52acOzIGRhdG9zIGVycsOzbmVvcy4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIkVsIGF1ZGlvIG5vIGV4aXN0ZSBvIG5vIGVzIHbDoWxpZG8sIGVsIGZsdWpvIEFWSSBlc3RhcsOhIGNvcnJ1cHRvLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiRXN0ZSBhcmNoaXZvIG5vIGNvbnRpZW5lIGZsdWpvcyByZXByb2R1Y2libGVzLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRXN0ZSBhcmNoaXZvIG5vIGVzIHbDoWxpZG8geSBubyBzZSBwdWVkZSByZXByb2R1Y2lyLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkVzdGUgYXJjaGl2byBlc3TDoSBjb3JydXB0byB5IG5vIHNlIHB1ZWRlIHJlcHJvZHVjaXIuIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICJFbCB0YW1hw7FvIGF0b20gbm8gZXMgdsOhbGlkby4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkVzdGUgYXJjaGl2byBlc3TDoSBpbmNvbXBsZXRvIHkgbm8gc2UgcHVlZGUgcmVwcm9kdWNpci4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIiIKLSJQdWVkZSBxdWUgZWwgdsOtZGVvIGVuIGVzdGUgYXJjaGl2byBubyBzZSBwdWVkYSByZXByb2R1Y2lyIGNvcnJlY3RhbWVudGUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSJFc3RlIGFyY2hpdm8gY29udGllbmUgZGVtYXNpYWRvcyBmbHVqb3MuIFPDs2xvIHNlIHJlcHJvZHVjaXLDoSBlbCBwcmltZXIgJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk5vIHNlIGVuY29udHLDsyB1biBmbHVqbyBzb3BvcnRhZG8uIFB1ZWRlIHF1ZSBuZWNlc2l0ZSBpbnN0YWxhciB1bmEgZXh0ZW5zacOzbiAiCi0iUlRTUCBkZSBHU3RyZWFtZXIgcGFyYSBsb3MgZm9ybWF0b3MgZGUgZmx1am8gUmVhbC4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJObyBzZSBlbmNvbnRyw7MgdW4gZmx1am8gc29wb3J0YWRvLiBQdWVkZSBxdWUgbmVjZXNpdGUgcGVybWl0aXIgbcOhcyAiCi0icHJvdG9jb2xvcyBkZSB0cmFuc3BvcnRlIG8gZGUgb3RyYSBmb3JtYSBwdWVkZSBxdWUgbGUgZmFsdGUgbGEgZXh0ZW5zacOzbiAiCi0iY29ycmVjdGEgZGUgUlRTUCBkZSBHU3RyZWFtZXIuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIk5vIHNlIHB1ZG8gYWJyaXIgZWwgZGlzcG9zaXRpdm8gcGFyYSByZXByb2R1Y2lyLiBPdHJhIGFwbGljYWNpw7NuIGVzdMOhIHVzYW5kbyAiCi0iZWwgZGlzcG9zaXRpdm8uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJObyBzZSBwdWRvIGFicmlyIGVsIGRpc3Bvc2l0aXZvIGRlIHNvbmlkbyBwYXJhIHJlcHJvZHVjaXIuIE5vIHRpZW5lIHBlcm1pc29zICIKLSJwYXJhIGFicmlyIGVsIGRpc3Bvc2l0aXZvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJObyBzZSBwdWRvIGFicmlyIGVsIGRpc3Bvc2l0aXZvIHBhcmEgcmVwcm9kdWNpci4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTm8gc2UgcHVkbyBhYnJpciBlbCBkaXNwb3NpdGl2byBkZSBzb25pZG8gcGFyYSBzdSBnZXN0acOzbiBwb3IgZWwgY29udHJvbCBkZSAiCi0ibWV6Y2xhZG8uIEVzdGUgZWxlbWVudG8gbm8gc29wb3J0YSBlc3RhIHZlcnNpw7NuIGRlbCBTaXN0ZW1hIGRlIHNvbmlkbyAiCi0iYWJpZXJ0byAoT1NTKS4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiRXN0ZSBkaXNwb3NpdGl2byBkZSBzb25pZG8gbm8gc29wb3J0YSBsYSByZXByb2R1Y2Npw7NuLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiRXJyb3IgZGUgcmVwcm9kdWNjacOzbiBkZSBzb25pZG8uIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJFc3RlIGRpc3Bvc2l0aXZvIGRlIHNvbmlkbyBubyBzb3BvcnRhIGxhIGdyYWJhY2nDs24uIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiRXJyb3IgYWwgZ3JhYmFyIGRlbCBkaXNwb3NpdGl2byBkZSBzb25pZG8uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTm8gc2UgcHVkbyBhYnJpciBlbCBkaXNwb3NpdGl2byBkZSBzb25pZG8gcGFyYSBncmFiYXIuIE5vIHRpZW5lIHBlcm1pc29zICIKLSJwYXJhIGFicmlyIGVsIGRpc3Bvc2l0aXZvLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBhYnJpciBlbCBkaXNwb3NpdGl2byBwYXJhIGdyYWJhci4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJPcmlnZW4gZGUgbGEgZ3JhYmFjacOzbiIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pY3LDs2Zvbm8iCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJMw61uZWEgZGUgZW50cmFkYSIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICJDRCBpbnRlcm5vIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIkVudHJhZGEgUy9QRElGIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkVudHJhZGEgQVVYIDEiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiRW50cmFkYSBBVVggMiIKLQotIywgZnV6enkKLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiQnVjbGUgbG9jYWwiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJCdWNsZSBsb2NhbCIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9sdW1lbiIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIkdhbmFuY2lhIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIkFsdGF2b3ogaW50ZWdyYWRvIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJBdXJpY3VsYXJlcyIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJMw61uZWEgZGUgc2FsaWRhIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICJTYWxpZGEgUy9QRElGIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJTYWxpZGEgQVVYIDEiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIlNhbGlkYSBBVVggMiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJFcnJvciBhbCBsZWVyICVkIGJ5dGVzIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0iRmFsbMOzIGFsIGVudW1lcmFyIGxvcyBwb3NpYmxlcyBmb3JtYXRvcyBkZSB2w61kZW8gY29uIGxvcyBxdWUgZWwgZGlzcG9zaXRpdm8gIgotIsKrJXPCuyBwdWVkZSB0cmFiYWphciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTm8gc2UgcHVkaWVyb24gbWFwZWFyIGxvcyBiw7pmZXJlcyBkZWwgZGlzcG9zaXRpdm8gwqslc8K7IgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotIkVsIGNvbnRyb2xhZG9yIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsgbm8gc29wb3J0YSBuaW5nw7puIG3DqXRvZG8gZGUgY2FwdHVyYSAiCi0iY29ub2NpZG8uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJFbCBjb250cm9sYWRvciBkZWwgZGlzcG9zaXRpdm8gwqslc8K7IG5vIHNvcG9ydGEgbmluZ8O6biBtw6l0b2RvIGRlIGNhcHR1cmEgIgotImNvbm9jaWRvLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiRWwgZGlzcG9zaXRpdm8gwqslc8K7IG5vIGVzIHVuIGRpc3Bvc2l0aXZvIGRlIHNhbGlkYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXZvIMKrJXPCuyBubyBwdWVkZSBjYXB0dXJhciBhICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJFbCBkaXNwb3NpdGl2byDCqyVzwrsgbm8gcHVlZGUgY2FwdHVyYXIgZW4gZWwgZm9ybWF0byBlc3BlY2lmaWNhZG8iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXZvIMKrJXPCuyBubyBlcyB1biBkaXNwb3NpdGl2byBkZSBzYWxpZGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTm8gc2UgcHVkaWVyb24gb2J0ZW5lciBsb3MgcGFyw6FtZXRyb3MgcGFyYSBlbCBkaXNwb3NpdGl2byDCqyVzwrsiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0iRWwgZGlzcG9zaXRpdm8gZGUgZW50cmFkYSBkZSB2w61kZW8gbm8gYWNlcHTDsyBlbCBhanVzdGUgZGUgbGEgbnVldmEgdGFzYSBkZSAiCi0iZm90b2dyYW1hcy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiIgotIkVsIGRpc3Bvc2l0aXZvIGRlIGVudHJhZGEgZGUgdsOtZGVvIG5vIGFjZXB0w7MgZWwgYWp1c3RlIGRlIGxhIG51ZXZhIHRhc2EgZGUgIgotImZvdG9ncmFtYXMuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICIiCi0iRWwgY29udHJvbGFkb3IgZGVsIGRpc3Bvc2l0aXZvIMKrJXPCuyBubyBzb3BvcnRhIG5pbmfDum4gbcOpdG9kbyBkZSBjYXB0dXJhICIKLSJjb25vY2lkby4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotIkVsIGNvbnRyb2xhZG9yIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsgbm8gc29wb3J0YSBuaW5nw7puIG3DqXRvZG8gZGUgY2FwdHVyYSAiCi0iY29ub2NpZG8uIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLSJFbCBkaXNwb3NpdGl2byBkZSBlbnRyYWRhIGRlIHbDrWRlbyBubyBhY2VwdMOzIGVsIGFqdXN0ZSBkZSBsYSBudWV2YSB0YXNhIGRlICIKLSJmb3RvZ3JhbWFzLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJGYWxsw7MgYWwgb2J0ZW5lciBsYSBwb3NpY2nDs24gZGVsIHNpbnRvbml6YWRvciAlZCBlbiBlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJFcnJvciBhbCBsZWVyICVkIGJ5dGVzIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXZvIMKrJXPCuyBubyBlcyB1biBkaXNwb3NpdGl2byBkZSBzYWxpZGEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIkZhbGzDsyBhbCBlc3RhYmxlY2VyIGxhIGVudHJhZGEgJWQgZW4gZWwgZGlzcG9zaXRpdm8gJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiRmFsbMOzIGFsIGVzdGFibGVjZXIgbGEgZW50cmFkYSAlZCBlbiBlbCBkaXNwb3NpdGl2byAlcy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxsw7MgYWwgb2J0ZW5lciBsYSBwb3RlbmNpYSBkZSBsYSBzZcOxYWwgcGFyYSBlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iRWwgY29udHJvbGFkb3IgZGVsIGRpc3Bvc2l0aXZvIMKrJXPCuyBubyBzb3BvcnRhIG5pbmfDum4gbcOpdG9kbyBkZSBjYXB0dXJhICIKLSJjb25vY2lkby4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iRWwgZGlzcG9zaXRpdm8gZGUgZW50cmFkYSBkZSB2w61kZW8gbm8gYWNlcHTDsyBlbCBhanVzdGUgZGUgbGEgbnVldmEgdGFzYSBkZSAiCi0iZm90b2dyYW1hcy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iRWwgZGlzcG9zaXRpdm8gZGUgZW50cmFkYSBkZSB2w61kZW8gbm8gYWNlcHTDsyBlbCBhanVzdGUgZGUgbGEgbnVldmEgdGFzYSBkZSAiCi0iZm90b2dyYW1hcy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkVsIGRpc3Bvc2l0aXZvIGRlIGVudHJhZGEgZGUgdsOtZGVvIG5vIGFjZXB0w7MgZWwgYWp1c3RlIGRlIGxhIG51ZXZhIHRhc2EgZGUgIgotImZvdG9ncmFtYXMuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJGYWxsw7MgYWwgZGVjb2RpZmljYXIgbGEgaW1hZ2VuIEpQRUciCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSJFcnJvciBhbCBvYnRlbmVyIGxhcyBjYXBhY2lkYWRlcyBkZWwgZGlzcG9zaXRpdm8gwqslc8K7OiBObyBlcyB1biBjb250cm9sYWRvciAiCi0icGFyYSB2NGwyLiBDb21wcnVlYmUgc2kgZXMgdW4gY29udHJvbGFkb3IgcGFyYSB2NGwxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIkZhbGzDsyBhbCBjb25zdWx0YXIgbG9zIGF0cmlidXRvcyBkZSBsYSBlbnRyYWRhICVkIGVuIGVsIGRpc3Bvc2l0aXZvICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJGYWxsw7MgYWwgb2J0ZW5lciBsYSBwb3NpY2nDs24gZGVsIHNpbnRvbml6YWRvciAlZCBlbiBlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmFsbMOzIGFsIGNvbnN1bHRhciBsYSBub3JtYSBwYXJhIGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZhbGzDsyBhbCBvYnRlbmVyIGxvcyBhdHJpYnV0b3MgZGUgY29udHJvbCBlbiBlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5vIHNlIHB1ZWRlIGlkZW50aWZpY2FyIGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRXN0byBubyBlcyB1biBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTm8gc2UgcHVkbyBhYnJpciBlbCBkaXNwb3NpdGl2byDCqyVzwrsgcGFyYSBsZWN0dXJhIHkgZXNjcml0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIkVsIGRpc3Bvc2l0aXZvIMKrJXPCuyBubyBlcyB1biBkaXNwb3NpdGl2byBkZSBjYXB0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiRWwgZGlzcG9zaXRpdm8gwqslc8K7IG5vIGVzIHVuIGRpc3Bvc2l0aXZvIGRlIHNhbGlkYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJFbCBkaXNwb3NpdGl2byDCqyVzwrsgbm8gZXMgdW4gZGlzcG9zaXRpdm8gZGUgc2FsaWRhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5vIHNlIHB1ZG8gYWJyaXIgZWwgZGlzcG9zaXRpdm8gwqslc8K7IHBhcmEgbGVjdHVyYSB5IGVzY3JpdHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZhbGzDsyBhbCBlc3RhYmxlY2VyIGxhIG5vcm1hIHBhcmEgZWwgZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJGYWxsw7MgYWwgb2J0ZW5lciBsYSBmcmVjdWVuY2lhIGFjdHVhbCBkZWwgc2ludG9uaXphZG9yIHBhcmEgZWwgZGlzcG9zaXRpdm8gIgotIsKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIkZhbGzDsyBhbCBlc3RhYmxlY2VyIGxhIGZyZWN1ZW5jaWEgYWN0dWFsIGRlbCBzaW50b25pemFkb3IgcGFyYSBlbCAiCi0iZGlzcG9zaXRpdm8gwqslc8K7IGEgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxsw7MgYWwgb2J0ZW5lciBsYSBwb3RlbmNpYSBkZSBsYSBzZcOxYWwgcGFyYSBlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxsw7MgYWwgb2J0ZW5lciBlbCB2YWxvciBwYXJhIGVsIGNvbnRyb2wgJWQgZGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJGYWxsw7MgYWwgZXN0YWJsZWNlciBlbCB2YWxvciAlZHMgcGFyYSBlbCBjb250cm9sICVkIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iRmFsbMOzIGFsIG9idGVuZXIgbGEgZW50cmFkYSBhY3R1YWwgZW4gZWwgZGlzcG9zaXRpdm8gwqslc8K7LiBRdWl6w6Egc2VhIHVuICIKLSJkaXNwb3NpdGl2byBkZSByYWRpby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkZhbGzDsyBhbCBvYnRlbmVyIGxhIHNhbGlkYSBhY3R1YWwgZW4gZWwgZGlzcG9zaXRpdm8gwqslc8K7LiBRdWl6w6Egc2VhIHVuICIKLSJkaXNwb3NpdGl2byBkZSByYWRpby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiRmFsbMOzIGFsIGVzdGFibGVjZXIgbGEgc2FsaWRhICVkIGVuIGVsIGRpc3Bvc2l0aXZvICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkVsIGNhbWJpbyBkZSByZXNvbHVjacOzbiBkdXJhbnRlIGxhIHJlcHJvZHVjY2nDs24gYcO6biBubyBlc3TDoSBzb3BvcnRhZG8uIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICJObyBzZSBwdWVkZSBvcGVyYXIgc2luIHJlbG9qIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJFcnJvciBpbnRlcm5vIGRlIGZsdWpvIGRlIGRhdG9zLiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi0jfiBtc2dzdHIgIkVycm9yIGVuIGVsIGZsdWpvIGRlIGRhdG9zIGludGVybm8uIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAiRWwgZGlzcG9zaXRpdm8gwqslc8K7IG5vIGVzIHVuIGRpc3Bvc2l0aXZvIGRlIHNhbGlkYS4iCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJTZSBvYnR1dm8gdW4gdGFtYcOxbyBkZSBjdWFkcm8gaW5lc3BlcmFkbyAldSBlbiBsdWdhciBkZSAldS4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkZhbGzDsyBhbCBpbnRlbnRhciBvYnRlbmVyIGN1YWRyb3MgZGUgdsOtZGVvIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIkZhbGzDsyBkZXNwdcOpcyBkZSAlZCBpbnRlbnRvcy4gRGlzcG9zaXRpdm8gJXMuIEVycm9yIGRlbCBzaXN0ZW1hOiAlcyIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhc3MiCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgIkFndWRvcyIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTaW50ZXRpemFkb3IiCi0KLSN+IG1zZ2lkICJQQ00iCi0jfiBtc2dzdHIgIlBDTSIKLQotI34gbXNnaWQgIlNwZWFrZXIiCi0jfiBtc2dzdHIgIkFsdGF2b3oiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICJMw61uZWEgZGUgZW50cmFkYSIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNZXpjbGFkb3IiCi0KLSN+IG1zZ2lkICJQQ00tMiIKLSN+IG1zZ3N0ciAiUENNLTIiCi0KLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIkdyYWJhY2nDs24iCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJHYW5hbmNpYSBkZSBlbnRyYWRhIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIkdhbmFuY2lhIGRlIHNhbGlkYSIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiTMOtbmVhLTEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIkzDrW5lYS0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJMw61uZWEtMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0xIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICJEaWdpdGFsLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJFbnRyYWRhIGRlIHRlbMOpZm9ubyIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiU2FsaWRhIGRlIHRlbMOpZm9ubyIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWw61kZW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkaW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICIiCi0jfiAiTm8gc2UgcHVkbyBhYnJpciBlbCBkaXNwb3NpdGl2byBkZSBzb25pZG8gcGFyYSBzdSBnZXN0acOzbiBwb3IgZWwgY29udHJvbCAiCi0jfiAiZGUgbWV6Y2xhZG8uIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiTm8gc2UgcHVkbyBhYnJpciBlbCBkaXNwb3NpdGl2byBkZSBzb25pZG8gcGFyYSBzdSBnZXN0acOzbiBwb3IgZWwgY29udHJvbCAiCi0jfiAiZGUgbWV6Y2xhZG8uIEVzdGUgZWxlbWVudG8gbm8gc29wb3J0YSBlc3RhIHZlcnNpw7NuIGRlbCBTaXN0ZW1hIGRlIHNvbmlkbyAiCi0jfiAiYWJpZXJ0byAoT1NTKS4iCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIk1hZXN0cm8iCi0KLSN+IG1zZ2lkICJGcm9udCIKLSN+IG1zZ3N0ciAiRnJvbnRhbCIKLQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIlRyYXNlcm8iCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICJBdXJpY3VsYXJlcyIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiQ2VudHJvIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICJMRkUiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAiRW52b2x2ZW50ZSIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIkxhdGVyYWwiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJTYWxpZGEgQVVYIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIlByb2Z1bmRpZGFkIDNEIgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICJDZW50cm8gM0QiCi0KLSN+IG1zZ2lkICIzRCBFbmhhbmNlIgotI34gbXNnc3RyICJNZWpvcmEgM0QiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGXMgWZvbm8iCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiRW50cmFkYSBkZSB2w61kZW8iCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgQVVYIgotCi0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIkdhbmFuY2lhIGRlIGdyYWJhY2nDs24iCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAiR2FuYW5jaWEgZGUgc2FsaWRhIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAiQXVtZW50byBkZWwgbWljcsOzZm9ubyIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub8yBc3RpY28iCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICJBdW1lbnRvIGRlIGJham9zIgotCi0jfiBtc2dpZCAiUGxheWJhY2sgUG9ydHMiCi0jfiBtc2dzdHIgIlB1ZXJ0b3MgZGUgcmVwcm9kdWNjacOzbiIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICJFbnRyYWRhIgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIk1vbml0b3IgZGUgb3JpZ2VuIgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAiUGl0aWRvIGRlIHRlY2xhZG8iCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsYXIgZXN0w6lyZW8iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIkVzdGXMgXJlbyIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTb25pZG8gZW52b2x2ZW50ZSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiR2FuYW5jaWEgZGVsIG1pY3LDs2Zvbm8iCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAiQWx0YXZveiBkZSBvcmlnZW4iCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWljcm/MgWZvbm8gZGUgb3JpZ2VuIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiSmFjayIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiQ2VudHJhZG8gLyBMRkUiCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICJNZXpjbGFkb3IgZXN0w6lyZW8iCi0KLSN+IG1zZ2lkICJNb25vIE1peCIKLSN+IG1zZ3N0ciAiTWV6Y2xhZG9yIG1vbm8iCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIk1lemNsYWRvciBkZSBlbnRyYWRhIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICJNaWNyw7Nmb25vIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk1pY3LDs2Zvbm8gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJTYWxpZGEgZGlnaXRhbCIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgZGlnaXRhbCIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAiTW/MgWRlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIkF1cmljdWxhcmVzIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIk90cm8iCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJOaW5ndW5vIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIkVuY2VuZGlkbyIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiQXBhZ2FkbyIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIlNpbGVuY2lhciIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIlLDoXBpZG8iCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiTXV5IGJham8iCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIkJham8iCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIk1lZGlvIgotCi0jfiBtc2dpZCAiSGlnaCIKLSN+IG1zZ3N0ciAiQWx0byIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAiTXV5IGFsdG8iCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJQcm9kdWNjacOzbiIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIE1pY3JvcGhvbmUiCi0jfiBtc2dzdHIgIk1pY3JvzIFmb25vIGRlbCBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiRW50cmFkYSBkZWwgcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIEhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkF1cmljdWxhcmVzIGRlbCBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIlNhbGlkYSBkZWwgcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgdmVyZGUiCi0KLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3Igcm9zYSIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBhenVsIgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBibGFuY28iCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIG5lZ3JvIgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGdyaXMiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBuYXJhbmphIgotCi0jfiBtc2dpZCAiUmVkIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3Igcm9qbyIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGFtYXJpbGxvIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciB2ZXJkZSBkZWwgcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciByb3NhIGRlbCBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiQmx1ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGF6dWwgZGVsIHBhbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGJsYW5jbyBkZWwgcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgbmVncm8gZGVsIHBhbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJHcmF5IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgZ3JpcyBkZWwgcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIG5hcmFuamEgZGVsIHBhbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciByb2pvIGRlbCBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiWWVsbG93IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgYW1hcmlsbG8gZGVsIHBhbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJTcHJlYWQgT3V0cHV0IgotI34gbXNnc3RyICJFeHBhbmRpciBzYWxpZGEiCi0KLSN+IG1zZ2lkICJEb3dubWl4IgotI34gbXNnc3RyICJSZWR1Y2Npw7NuIGRlIGNhbmFsZXMiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJFbnRyYWRhIGRlbCBtZXpjbGFkb3IgdmlydHVhbCIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJTYWxpZGEgZGVsIG1lemNsYWRvciB2aXJ0dWFsIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiQ2FuYWxlcyBkZWwgbWV6Y2xhZG9yIHZpcnR1YWwiCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiRnVuY2nDs24gJXMgJWQiCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiRnVuY2nDs24gJXMiCi0KLSN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIG9uIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiRXJyb3IgYWwgbGVlciAlZCBieXRlcyBkZWwgZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJObyBzZSBwdWVkZW4gZW5jb2xhciBsb3MgYsO6ZmVyZXMgZW4gZWwgZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIk5vIHNlIHB1ZG8gZXN0YWJsZWNlciBsYSBjb25leGnDs24gY29uIGVsIHNlcnZpZG9yIGRlIHNvbmlkbyIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICJGYWxsw7MgYWwgcHJlZ3VudGFyIGFsIHNlcnZpZG9yIGRlIHNvbmlkbyBzdXMgY2FwYWNpZGFkZXMiCi0KLSN+IG1zZ2lkICIiCi0jfiAiVGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLCBvciBubyAiCi0jfiAiYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlIHVzZXJwdHIgb3IgbGVuZ3RoIGFyZSBpbnZhbGlkLiAiCi0jfiAiZGV2aWNlICVzIgotI34gbXNnc3RyICIiCi0jfiAiRWwgdGlwbyBkZSBiw7pmZXIgbm8gZXN0w6Egc29wb3J0YWRvIG8gZWwgw61uZGljZSBlc3TDoSBmdWVyYSBkZSBsb3MgbMOtbWl0ZXMgIgotI34gIm8gbm8gc2UgaGFuIHJlZ2lzdHJhZG8gYsO6ZmVyZXMgdG9kYXbDrWEgbyBsYSBsb25naXR1ZCBvIGVsIHVzZXJwdHIgc29uICIKLSN+ICJpbnbDoWxpZG9zLiBEaXNwb3NpdGl2byAlcyIKLQotI34gbXNnaWQgIiIKLSN+ICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4gTm90IGVub3VnaCBtZW1vcnkuIgotI34gbXNnc3RyICIiCi0jfiAiRmFsbMOzIGFsIGludGVudGFyIG9idGVuZXIgY3VhZHJvcyBkZSB2w61kZW8gZGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4gTm8gaGF5ICIKLSN+ICJtZW1vcmlhIHN1ZmljaWVudGUuIgotCi0jfiBtc2dpZCAiaW5zdWZmaWNpZW50IG1lbW9yeSB0byBlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci4gZGV2aWNlICVzLiIKLSN+IG1zZ3N0ciAiIgotI34gIk1lbW9yaWEgaW5zdWZpY2llbnRlIHBhcmEgZW5jb2xhciB1biBiw7pmZXIgcHVudGVybyBkZSB1c3VhcmlvLiAiCi0jfiAiRGlzcG9zaXRpdm8gJXMuIgotCi0jfiBtc2dpZCAiTm8gZnJlZSBidWZmZXJzIGZvdW5kIGluIHRoZSBwb29sIGF0IGluZGV4ICVkLiIKLSN+IG1zZ3N0ciAiTm8gc2UgZW5jb250cmFyb24gYsO6ZmVyZXMgbGlicmVzIGVuIGVsIMOtbmRpY2UgJWQgZGVsIMKrcG9vbMK7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTm8gc2UgcHVkaWVyb24gb2J0ZW5lciBiw7pmZXJlcyBkZWwgZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgZW5vdWdoIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk5vIHNlIHB1ZGllcm9uIG9idGVuZXIgYsO6ZmVyZXMgc3VmaWNpZW50ZXMgZGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJFcnJvciBzdGFydGluZyBzdHJlYW1pbmcgY2FwdHVyZSBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiRXJyb3IgYWwgaW5pY2lhciBlbCBmbHVqbyBkZSBjYXB0dXJhIGRlbCBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jfiBtc2dpZCAiRXJyb3Igc3RvcHBpbmcgc3RyZWFtaW5nIGNhcHR1cmUgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkVycm9yIGFsIHBhcmFyIGVsIGZsdWpvIGRlIGNhcHR1cmEgZGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMuJyIKLSN+IG1zZ3N0ciAiRmFsbMOzIGFsIG9idGVuZXIgbG9zIGF0cmlidXRvcyBkZSBjb250cm9sIGVuIGVsIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIENELiIKLSN+IG1zZ3N0ciAiTm8gc2UgcHVkbyBsZWVyIGRlbCBDRC4iCi0KLSN+IG1zZ2lkICJEaXNjIGlzIG5vdCBhbiBBdWRpbyBDRC4iCi0jfiBtc2dzdHIgIkVsIGRpc2NvIG5vIGVzIHVuIENEIGRlIHNvbmlkby4iCi0KLSN+IG1zZ2lkICJUaGlzIGZpbGUgaXMgZW5jcnlwdGVkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLSN+IG1zZ3N0ciAiRXN0ZSBhcmNoaXZvIGVzdMOhIGNpZnJhZG8geSBubyBzZSBwdWVkZSByZXByb2R1Y2lyLiIKZGlmZiAtLWdpdCBhL3BvL2V1LmdtbyBiL3BvL2V1LmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEzYTc0My4uMDAwMDAwMAotLS0gYS9wby9ldS5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9ldS5wbyBiL3BvL2V1LnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdjODA0Li4wMDAwMDAwCi0tLSBhL3BvL2V1LnBvCisrKyAvZGV2L251bGwKQEAgLTEsOTEyICswLDAgQEAKLSMgdHJhbnNsYXRpb24gb2YgZ3N0LXBsdWdpbnMtZ29vZC5tYXN0ZXIucG8gdG8gQmFzcXVlCi0jIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZS4KLSMKLSMgScOxYWtpIExhcnJhw7FhZ2EgTXVyZ29pdGlvIDxkb290ZW9AZXVza2FsZ251Lm9yZz4sIDIwMDksIDIwMTAuCi0jIE1pa2VsIE9sYXNhZ2FzdGkgVXJhbmdhIDxoZXlfbmVrZW5AbXVuZHVyYXQubmV0PiwgMjAwOSwgMjAxMC4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QtMC4xMC4xOC4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDMtMjUgMTI6MzcrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogTWlrZWwgT2xhc2FnYXN0aSBVcmFuZ2EgPGhleV9uZWtlbkBtdW5kdXJhdC5uZXQ+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQmFzcXVlIDx0cmFuc2xhdGlvbi10ZWFtLWV1QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogZXVcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSBKUEVHIGlydWRpYSBkZXNrb2RldHplYW4iCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiclcycgLSAnJXMnIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJFemluIGl6YW4gZGEga29uZWt0YXR1IHplcmJpdHphcmlhcmVraW4iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBrb25la3RhdHUgemVyYml0emFyaWFyZWtpbiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhIGtvbmV4aW9hIGV6YXJyaSBzb2ludS16ZXJiaXR6YXJpYXJla2luIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIiIKLSJFeiBkYWdvIGF1ZGlvLXNhcnJlcmFyaWssIGVkbyBiYWxpb2dhYmVhIGRhLiBBVkkga29ycm9udGVhIGhvbmRhdHVhIGVnb25nbyAiCi0iZGEuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJGaXR4YXRlZ2kgaG9ycmV0YW4gZXogZGFnbyBlcnJlcHJvZHV6aSBkYWl0ZWtlZW4ga29ycm9udGVyaWsuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJGaXR4YXRlZ2kgaGF1IGV6IGRhIGJhbGlvemtvYSBldGEgZXppbiBkYSBlcnJlcHJvZHV6aXR1LiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkZpdHhhdGVnaSBoYXUgaG9uZGF0dWEgZGFnbywgZXRhIGV6aW4gZGEgZXJyZXByb2R1eml0dS4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRml0eGF0ZWdpIGhhdSBvc2F0dSBnYWJlYSBkYWdvLCBldGEgZXppbiBkYSBlcnJlcHJvZHV6aXR1LiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiIgotIkxpdGVrZWVuYSBkYSBmaXR4YXRlZ2kgaG9uZXRha28gYmlkZW9hIGV6IGJlaGFyIGJlemFsYSBlcnJlcHJvZHV6aXR6ZWEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSJGaXR4YXRlZ2kgaG9ycmVrIGtvcnJvbnRlIGdlaGllZ2kgZGl0dS4gRXJyZXByb2R1eml0dSBzb2lsaWsgbGVoZW4gJWQocilhayIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iRXogZGEgb25hcnR1dGFrbyBrb3Jyb250ZXJpayBhdXJraXR1LiBHU3RyZWFtZXIgUlRTUCBoZWRhcGVuYSBpbnN0YWxhdHUgIgotImJlaGFya28gZHV6dSBSZWFsIG11bHRpbWVkaWFrbyBrb3Jyb250ZWVudHpha28uIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0iRXogZGEgb25hcnR1dGFrbyBrb3Jyb250ZXJpayBhdXJraXR1LiBHYXJyYWlva28gcHJvdG9rb2xvIGdlaGlhZ28gYmFpbWVudHplYSAiCi0iYmVoYXIgZGEgZWRvIEdTdHJlYW1lciBSVFNQIGhlZGFwZW4gZWdva2lhIGZhbHRhIHphaXp1LiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJFemluIGl6YW4gZGEgYXVkaW9hcmVuIGdhaWx1YSBpcmVraSBlcnJlcHJvZHV6aXR6ZWtvLiBCZXN0ZSBhcGxpa2F6aW8gYmF0ZWsgIgotImRhcmFiaWwgZ2FpbHVhLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iRXppbiBpemFuIGRhIGF1ZGlvYXJlbiBnYWlsdWEgaXJla2kgZXJyZXByb2R1eml0emVrby4gRXogZHV6dSBiYWltZW5payAiCi0iZ2FpbHVhIGlyZWtpdHpla28uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBhdWRpb2FyZW4gZ2FpbHVhIGlyZWtpIGVycmVwcm9kdXppdHpla28uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIkV6aW4gaXphbiBkYSBhdWRpb2FyZW4gZ2FpbHVhIGlyZWtpIGVycmVwcm9kdXppdHpla28uIEVsZW1lbnR1IGhvbmVrIGV6IGR1ICIKLSJvbmFydHplbiBPcGVuIFNvdW5kIFN5c3RlbS1lbiBiZXJ0c2lvIGhhdS4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQXVkaW8gZ2FpbHUgaG9uZWsgZXogZHUgZXJyZXByb2R1eml0emVhIG9uYXJ0emVuLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiRXJyb3JlYSBhdWRpb2EgZXJyZXByb2R1eml0emVhbi4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkF1ZGlvIGdhaWx1IGhvbmVrIGV6IGR1IGdyYWJhdHplYSBvbmFydHplbi4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJFcnJvcmVhIGF1ZGlva28gZ2FpbHV0aWsgZ3JhYmF0emVhbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJFemluIGl6YW4gZGEgYXVkaW9hcmVuIGdhaWx1YSBpcmVraSBncmFiYXR6ZWtvLiBFeiBkdXp1IGJhaW1lbmlrIGdhaWx1YSAiCi0iaXJla2l0emVrby4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSBhdWRpb2FyZW4gZ2FpbHVhIGlyZWtpIGdyYWJhdHpla28uIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiR3JhYmF6aW9hcmVuIGl0dXJidXJ1YSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9ub2EiCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJTYXJyZXJha28gbGluZWEiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiQmFybmVrbyBDRGEiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiU1BESUYgc2FycmVyYSIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICIxLiBzYXJyZXJhIGxhZ3VuZ2FycmlhIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIjIuIHNhcnJlcmEgbGFndW5nYXJyaWEiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIkF0emVyYS1iZWdpenRhIgotCi0jLCBmdXp6eQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiQXR6ZXJhLWJlZ2l6dGEiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIkJvbHVtZW5hIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiSXJhYmF6aWEiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yZWEiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICJCYXJuZWtvIGJvemdvcmFpbHVhIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJFbnR6dW5nYWlsdWEiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiSXJ0ZWVyYWtvIGxpbmVhIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICJTUERJRiBpcnRlZXJhIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICIxLiBpcnRlZXJhIGxhZ3VuZ2FycmlhIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICIyLiBpcnRlZXJhIGxhZ3VuZ2FycmlhIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkVycm9yZWEgZ2VydGF0dSBkYSAnJTIkcycgZ2FpbHVhbiAlMSRkIGJ5dGUgaXJha3VydHplYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIkV6aW4gaXphbiBkaXJhICclcycgZ2FpbHVhcmVuIGJ1ZmZlcnJhayBtYXBhdHUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotIiclcycgZ2FpbHVhcmVuIGtvbnRyb2xhdHphaWxlYWsgZXogZHUgb25hcnR6ZW4ga2FwdHVyYS1tZXRvZG8gZXphZ3VuaWsuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSInJXMnIGdhaWx1YXJlbiBrb250cm9sYXR6YWlsZWFrIGV6IGR1IG9uYXJ0emVuIGthcHR1cmEtbWV0b2RvIGV6YWd1bmlrLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiJyVzJyBnYWlsdWEgZXogZGEgaXJ0ZWVyYWtvIGdhaWx1IGJhdC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICInJXMnIGdhaWx1YSBleiBkYSBrYXB0dXJhLWdhaWx1IGJhdC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICInJXMnIGdhaWx1YSBleiBkYSBrYXB0dXJhLWdhaWx1IGJhdC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIiclcycgZ2FpbHVhIGV6IGRhIGlydGVlcmFrbyBnYWlsdSBiYXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiRXppbiBpemFuIGRpcmEgJyVzJyBnYWlsdWFyZW4gcGFyYW1ldHJvYWsgZXNrdXJhdHUiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0iQmlkZW9hcmVuIHNhcnJlcmFrbyBnYWlsdWFrIGV6IGR1IGZvdG9ncmFtYS10YW1haW5hcmVuIGV6YXJwZW4gYmVycmlhICIKLSJvbmFydHplbi4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiIgotIkJpZGVvYXJlbiBzYXJyZXJha28gZ2FpbHVhayBleiBkdSBmb3RvZ3JhbWEtdGFtYWluYXJlbiBlemFycGVuIGJlcnJpYSAiCi0ib25hcnR6ZW4uIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICIiCi0iJyVzJyBnYWlsdWFyZW4ga29udHJvbGF0emFpbGVhayBleiBkdSBvbmFydHplbiBrYXB0dXJhLW1ldG9kbyBlemFndW5pay4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotIiclcycgZ2FpbHVhcmVuIGtvbnRyb2xhdHphaWxlYWsgZXogZHUgb25hcnR6ZW4ga2FwdHVyYS1tZXRvZG8gZXphZ3VuaWsuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLSJCaWRlb2FyZW4gc2FycmVyYWtvIGdhaWx1YWsgZXogZHUgZm90b2dyYW1hLXRhbWFpbmFyZW4gZXphcnBlbiBiZXJyaWEgIgotIm9uYXJ0emVuLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJIdXRzIGVnaW4gZHUgJyUyJHMnIGdhaWx1a28gJTEkZC4gc2ludG9uaXphZG9yZWFyZW4gZXphcnBlbmFrIGVza3VyYXR6ZWFuLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRXJyb3JlYSBnZXJ0YXR1IGRhICclMiRzJyBnYWlsdWFuICUxJGQgYnl0ZSBpcmFrdXJ0emVhbi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiJyVzJyBnYWlsdWEgZXogZGEgaXJ0ZWVyYWtvIGdhaWx1IGJhdC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiSHV0cyBlZ2luIGR1ICclMiRzJyBnYWlsdWtvICUxJGQuIHNhcnJlcmEgZXphcnR6ZWFuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSAnJTIkcycgZ2FpbHVrbyAlMSRkLiBzYXJyZXJhIGV6YXJ0emVhbi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJIdXRzIGVnaW4gZHUgJyVzJyBnYWlsdWFyZW4gc2VpbmFsZWFyZW4gaW5kYXJyYSBlc2t1cmF0emVhbi4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSInJXMnIGdhaWx1YXJlbiBrb250cm9sYXR6YWlsZWFrIGV6IGR1IG9uYXJ0emVuIGthcHR1cmEtbWV0b2RvIGV6YWd1bmlrLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJCaWRlb2FyZW4gc2FycmVyYWtvIGdhaWx1YWsgZXogZHUgZm90b2dyYW1hLXRhbWFpbmFyZW4gZXphcnBlbiBiZXJyaWEgIgotIm9uYXJ0emVuLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJCaWRlb2FyZW4gc2FycmVyYWtvIGdhaWx1YWsgZXogZHUgZm90b2dyYW1hLXRhbWFpbmFyZW4gZXphcnBlbiBiZXJyaWEgIgotIm9uYXJ0emVuLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iQmlkZW9hcmVuIHNhcnJlcmFrbyBnYWlsdWFrIGV6IGR1IGZvdG9ncmFtYS10YW1haW5hcmVuIGV6YXJwZW4gYmVycmlhICIKLSJvbmFydHplbi4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSBKUEVHIGlydWRpYSBkZXNrb2RldHplYW4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSJFcnJvcmVhIGdlcnRhdHUgZGEgJyVzJyBnYWlsdWFyZW4gYWhhbG1lbmEgZXNrdXJhdHplYW46IEV6IGRhIHY0bDIgIgotImtvbnRyb2xhdHphaWxlIGJhdC4gQmVnaXJhdHUgdjRsMSBrb250cm9sYXR6YWlsZSBiYXQgZGVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSAlMiRzIGdhaWx1a28gJTEkZC4gc2FycmVyYXJlbiBhdHJpYnV0dWFrIGtvbnRzdWx0YXR6ZWFuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJIdXRzIGVnaW4gZHUgJyUyJHMnIGdhaWx1a28gJTEkZC4gc2ludG9uaXphZG9yZWFyZW4gZXphcnBlbmFrIGVza3VyYXR6ZWFuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSAnJXMnIGdhaWx1YXJlbiBhcmF1YSBrb250c3VsdGF0emVhbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkh1dHMgZWdpbiBkdXQgJyVzJyBnYWlsdWFyZW4ga29udHJvbC1hdHJpYnV0dWFrIGVza3VyYXR6ZWFuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJFemluIGRhICclcycgZ2FpbHVhIGlkZW50aWZpa2F0dS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiSGF1IGV6IGRhICclcycgZ2FpbHUgYmF0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkV6aW4gaXphbiBkYSAnJXMnIGdhaWx1YSBpcmVraSBpcmFrdXJ0emVrbyBldGEgaWRhenRla28uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiJyVzJyBnYWlsdWEgZXogZGEga2FwdHVyYS1nYWlsdSBiYXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICInJXMnIGdhaWx1YSBleiBkYSBpcnRlZXJha28gZ2FpbHUgYmF0LiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIiclcycgZ2FpbHVhIGV6IGRhIGlydGVlcmFrbyBnYWlsdSBiYXQuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiRXppbiBpemFuIGRhICclcycgZ2FpbHVhIGlyZWtpIGlyYWt1cnR6ZWtvIGV0YSBpZGF6dGVrby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSAnJXMnIGdhaWx1YXJlbiBhcmF1YSBlemFydHplYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkh1dHMgZWdpbiBkdSAnJXMnIGdhaWx1YXJlbiB1bmVrbyBzaW50b25pemF6aW8tZnJla3VlbnR6aWEgZXNrdXJhdHplYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJIdXRzIGVnaW4gZHUgJyVzJyBnYWlsdWFyZW4gdW5la28gc2ludG9uaXphemlvLWZyZWt1ZW50emlhICVsdSBIei10YW4gIgotImV6YXJ0emVhbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiSHV0cyBlZ2luIGR1ICclcycgZ2FpbHVhcmVuIHNlaW5hbGVhcmVuIGluZGFycmEgZXNrdXJhdHplYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJIdXRzIGVnaW4gZHUgJyUyJHMnIGdhaWx1a28gJTEkZC4ga29udHJvbGFyZW4gYmFsaW9hIGVza3VyYXR6ZWFuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkh1dHMgZWdpbiBkdSAnJTMkcycgZ2FpbHVrbyAlMiRkLiBrb250cm9sYXJlbiAlMSRkLiBiYWxpb2EgZXNrdXJhdHplYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iSHV0cyBlZ2luIGR1ICclcycgZ2FpbHVrbyB1bmVrbyBzYXJyZXJhIGVza3VyYXR6ZWFuLiBMaXRla2VlbmEgZGEgaXJyYXRpLSIKLSJnYWlsdSBiYXQgaXphdGVhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkh1dHMgZWdpbiBkdSAnJXMnIGdhaWx1a28gdW5la28gc2FycmVyYSBlc2t1cmF0emVhbi4gTGl0ZWtlZW5hIGRhIGlycmF0aS0iCi0iZ2FpbHUgYmF0IGl6YXRlYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkh1dHMgZWdpbiBkdSAnJTIkcycgZ2FpbHVrbyAlMSRkLiBzYXJyZXJhIGV6YXJ0emVhbi4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJPcmFpbmRpayBleiBkYWdvIG9uYXJ0dWEgZXhla3V0YXR1IGJpdGFydGVhbiBiZXJlaXptZW5hIGFsZGF0emVhLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiRXppbiBkdSBmdW50emlvbmF0dSBlcmxvanVyaWsgZ2FiZSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiRGF0dS1rb3Jyb250ZWFyZW4gYmFybmUtZXJyb3JlYS4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJEYXR1LWZsdXh1YXJlbiBiYXJuZS1lcnJvcmVhLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIiclcycgZ2FpbHVhIGV6IGRhIGlydGVlcmFrbyBnYWlsdSBiYXQuIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiVXN0ZWthYmVrbyBmb3RvZ3JhbWEtdGFtYWluYSBqYXNvIGRhICgldSksICV1IG9yZGV6LiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiSHV0cyBlZ2luIGR1ICclcycgZ2FpbHV0aWsgYmlkZW8tZm90b2dyYW1hayBlc2t1cmF0emVuIHNhaWF0emVhbi4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiSHV0cyBlZ2luIGR1ICVkIHNhaW8gZXRhIGdlcm8uICVzIGdhaWx1YS4gU2lzdGVtYS1lcnJvcmVhOiAlcyIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJheHVhIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJBbHR1YSIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTaW50ZXRpemFkb3JlYSIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiQm96Z29yYWlsdWEiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICJMaW5lYS1zYXJyZXJhIgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgIkNEYSIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJOYWhhc3RhaWxlYSIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiR3JhYmF6aW9hIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAiU2FycmVyYWtvIGlyYWJhemlhIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIklydGVlcmFrbyBpcmFiYXppYSIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiMS4gbGluZWEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIjIuIGxpbmVhIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICIzLiBsaW5lYSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiMS4gZGlnaXRhbGEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIjIuIGRpZ2l0YWxhIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICIzLiBkaWdpdGFsYSIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJBdXJpa3VsYXJyZW4gc2FycmVyYSIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiQXVyaWt1bGFycmVuIGlydGVlcmEiCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiQmlkZW9hIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIklycmF0aWEiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICIiCi0jfiAiRXppbiBpemFuIGRhIGF1ZGlva28gZ2FpbHVhIGlyZWtpIG5haGFzdGFpbGVhcmVuIGtvbnRyb2xhIGt1ZGVhdHpla28uIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiRXppbiBpemFuIGRhIGF1ZGlva28gZ2FpbHVhIGlyZWtpIG5haGFzdGFpbGVhcmVuIGtvbnRyb2xhIGt1ZGVhdHpla28uICIKLSN+ICJFbGVtZW50dSBob25layBleiBkdSBvbmFydHplbiBPcGVuIFNvdW5kIFN5c3RlbS1lbiBiZXJ0c2lvIGhhdS4iCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIk1haXN1YSIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJBdXJyZWFsZGVrb2EiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJBdHplYWxkZWtvYSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkF1cmlrdWxhcnJhayIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiRXJkaWtvYSIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIkluZ3VyYXR6YWlsZWEiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJBbGJva29hIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiSXJ0ZWVyYSBsYWd1bmdhcnJpYSIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICIzRCBzYWtvbmVyYSIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0QgemVudHJ1YSIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIjNEIGhvYmV0dWEiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmb25vYSIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICJCaWRlby1zYXJyZXJhIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJTYXJyZXJhIGxhZ3VuZ2FycmlhIgotCi0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIkdyYWJhemlvYXJlbiBpcmFiYXppYSIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJJcnRlZXJhcmVuIGlyYWJhemlhIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAiTWlrcm9mb25vYXJlbiBidWx0emFkYSIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub3N0aWtvYSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkJheHVhcmVuIGJ1bHR6YWRhIgotCi0jfiBtc2dpZCAiUGxheWJhY2sgUG9ydHMiCi0jfiBtc2dzdHIgIkVycmVwcm9kdWt6aW9hcmVuIGF0YWthayIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICJTYXJyZXJhIgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIk1vbml0b3JlYXJlbiBpdHVyYnVydWEiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJUZWtsYXR1YXJlbiBzb2ludWEiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsYXR1IGVzdGVyZW9hIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICJFc3RlcmVvYSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTb2ludSBpbmd1cmF0emFpbGVhIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICJNaWtyb2Zvbm9hcmVuIGlyYWJhemlhIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIkJvemdvcmFpbHVhcmVuIGl0dXJidXJ1YSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJNaWtyb2Zvbm9hcmVuIGl0dXJidXJ1YSIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkphY2siCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgIlplbnRyYXR1YSAvIExGRSIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIkVzdGVyZW96a28gbmFoYXNrZXRhIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbm96a28gbmFoYXNrZXRhIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJTYXJyZXJha28gbmFoYXNrZXRhIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICIxLiBtaWtyb2Zvbm9hIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICIyLiBtaWtyb2Zvbm9hIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIklydGVlcmEgZGlnaXRhbGEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJTYXJyZXJhIGRpZ2l0YWxhIgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbWEiCi0KLSN+IG1zZ2lkICJIYW5kc2V0IgotI34gbXNnc3RyICJBdXJpa3VsYXIrbWlrcm9mb25vYSIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICJCZXN0ZWxha29hIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiQmF0IGVyZSBleiIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICJQaXp0dSIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiSXR6YWxpIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiTXV0dXR1IgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiQml6a29ycmEiCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiT3NvIG1vdGVsYSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiTW90ZWxhIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICJUYXJ0ZWtvYSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkFsdHVhIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJPc28gYWx0dWEiCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJFa29penBlbmEiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJBdXJyZWFsZGVrbyBwYW5lbGVrbyBtaWtyb2Zvbm9hIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiQXVycmVhbGRla28gcGFuZWxla28gc2FycmVyYWtvIGxpbmVhIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiQXVycmVhbGRla28gcGFuZWxla28gYXVyaWt1bGFycmFrIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIkF1cnJlYWxkZWtvIHBhbmVsZWtvIGlydGVlcmFrbyBsaW5lYSIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiS29uZWt0b3JlIGJlcmRlYSIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLb25la3RvcmUgYXJyb3NhIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIktvbmVrdG9yZSB1cmRpbmEiCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIktvbmVrdG9yZSB6dXJpYSIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiS29uZWt0b3JlIGJlbHR6YSIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLb25la3RvcmUgZ3Jpc2EiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLb25la3RvcmUgbGFyYW5qYSIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIktvbmVrdG9yZSBnb3JyaWEiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLb25la3RvcmUgaG9yaWEiCi0KLSN+IG1zZ2lkICJHcmVlbiBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkF1cnJlYWxkZWtvIHBhbmVsZWtvIGtvbmVrdG9yZSBiZXJkZWEiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQXVycmVhbGRla28gcGFuZWxla28ga29uZWt0b3JlIGFycm9zYSIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJBdXJyZWFsZGVrbyBwYW5lbGVrbyBrb25la3RvcmUgdXJkaW5hIgotCi0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJBdXJyZWFsZGVrbyBwYW5lbGVrbyBrb25la3RvcmUgenVyaWEiCi0KLSN+IG1zZ2lkICJCbGFjayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkF1cnJlYWxkZWtvIHBhbmVsZWtvIGtvbmVrdG9yZSBiZWx0emEiCi0KLSN+IG1zZ2lkICJHcmF5IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQXVycmVhbGRla28gcGFuZWxla28ga29uZWt0b3JlIGdyaXNhIgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQXVycmVhbGRla28gcGFuZWxla28ga29uZWt0b3JlIGxhcmFuamEiCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJBdXJyZWFsZGVrbyBwYW5lbGVrbyBrb25la3RvcmUgZ29ycmlhIgotCi0jfiBtc2dpZCAiWWVsbG93IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQXVycmVhbGRla28gcGFuZWxla28ga29uZWt0b3JlIGhvcmlhIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiWmFiYWxkdSBpcnRlZXJhIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiVG9sZXN0dSBuYWhhc2tldGEiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJOYWhhc3RhaWxlIGJpcnR1YWxhcmVuIHNhcnJlcmEiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiTmFoYXN0YWlsZSBiaXJ0dWFsYXJlbiBpcnRlZXJhIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiTmFoYXN0YWlsZSBiaXJ0dWFsYXJlbiBrYW5hbGFrIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyBmdW50emlvYSIKLQotI34gbXNnaWQgIiVzIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyBmdW50emlvYSIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJFcnJvcmVhIGdlcnRhdHUgZGEgJyUyJHMnIGdhaWx1YW4gJTEkZCBieXRlIGlyYWt1cnR6ZWFuLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJFemluIGl6YW4gZGlyYSBidWZmZXJyYWsgaWxhcmFuIGphcnJpICclcycgZ2FpbHVhbi4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc291bmQgc2VydmVyIgotI34gbXNnc3RyICJFemluIGl6YW4gZGEga29uZXhpb2EgZXphcnJpIHNvaW51LXplcmJpdHphcmlhcmVraW4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgc291bmQgc2VydmVyIGNhcGFiaWxpdGllcyIKLSN+IG1zZ3N0ciAiSHV0cyBlZ2luIGR1IHNvaW51LXplcmJpdHphcmlhcmVuIGFoYWxtZW5hIGtvbnRzdWx0YXR6ZWFuIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBpbnB1dCBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiU2FycmVyYWtvIGVsZW1lbnR1IGhhdXRhdHVhIGRlc2tyaWJhdHplbiBkdS4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIG91dHB1dCBlbGVtZW50IGZvciBBdWRpby9WaWRlbyBDb25mZXJlbmNpbmcuIgotI34gbXNnc3RyICIiCi0jfiAiQXVkaW8tL0JpZGVvLWtvbmZlcmVudHppYWsgZWdpdGVrbyBpcnRlZXJha28gZWxlbWVudHUgaGF1dGF0dWEgIgotI34gImRlc2tyaWJhdHplbiBkdS4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIG91dHB1dCBlbGVtZW50IGZvciBNdXNpYyBhbmQgTW92aWVzLiIKLSN+IG1zZ3N0ciAiTXVzaWthcmVuIGV0YSBmaWxtZW4gaXJ0ZWVyYWtvIGVsZW1lbnR1IGhhdXRhdHVhIGRlc2tyaWJhdHplbiBkdS4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIG91dHB1dCBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiSXJ0ZWVyYWtvIGVsZW1lbnR1IGhhdXRhdHVhIGRlc2tyaWJhdHplbiBkdS4iCi0KLSN+IG1zZ2lkICJHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBBdWRpby9WaWRlbyBDb25mZXJlbmNpbmciCi0jfiBtc2dzdHIgIkF1ZGlvLS9CaWRlby1rb25mZXJlbnR6aWFrIGVnaXRla28gR1N0cmVhbWVuIGF1ZGlvLWtvbGVrdG9yZWEiCi0KLSN+IG1zZ2lkICJHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBNdXNpYyBhbmQgTW92aWVzIgotI34gbXNnc3RyICJNdXNpa2FyZW4gZXRhIGZpbG1lbiBHU3RyZWFtZXIgYXVkaW8ta29sZWt0b3JlYSIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHBsYXkgYXVkaW8gdXNpbmcgYW55IG51bWJlciBvZiBvdXRwdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIG9zc3NpbmssIGVzZHNpbmsgYW5kIGFsc2FzaW5rLiBUaGUgYXVkaW9zaW5rIGNhbiBiZSAiCi0jfiAiYSBwYXJ0aWFsIHBpcGVsaW5lIGluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJIYWluYmF0IGlydGVlcmFrbyBlbGVtZW50dSBlcmFiaWxpeiBlcnJlcHJvZHV6aSBkZXpha2UgYXVkaW9hIEdTdHJlYW1lci0iCi0jfiAiZWsuIEhhbGEgbm9sYSBvc3NzaW5rLCBlc2RzaW5rIGV0YSBhbHNhc2luay4gQXVkaW8ta29sZWt0b3JlYSBrYW5hbGl6YXppbyAiCi0jfiAicGFydHppYWwgYmF0IGl6YW4gZGFpdGVrZSwgZWxlbWVudHUgYmF0IGl6YW4gYmVoYXJyZWFuLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHBsYXkgdmlkZW8gdXNpbmcgYW55IG51bWJlciBvZiBvdXRwdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIHh2aW1hZ2VzaW5rLCB4aW1hZ2VzaW5rLCBzZGx2aWRlb3NpbmsgYW5kIGFhc2luay4gIgotI34gIlRoZSB2aWRlb3NpbmsgY2FuIGJlIGEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiSGFpbmJhdCBpcnRlZXJha28gZWxlbWVudHUgZXJhYmlsaXogZXJyZXByb2R1emkgZGV6YWtlIGJpZGVvYSBHU3RyZWFtZXItIgotI34gImVrLiBIYWxhIG5vbGEgeHZpbWFnZXNpbmssIHhpbWFnZXNpbmssIHNkbHZpZGVvc2luayBldGEgYWFzaW5rLiBCaWRlby0iCi0jfiAia29sZWt0b3JlYSBrYW5hbGl6YXppbyBwYXJ0emlhbCBiYXQgaXphbiBkYWl0ZWtlLCBlbGVtZW50dSBiYXQgaXphbiAiCi0jfiAiYmVoYXJyZWFuLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHB1dCB2aXN1YWxpemF0aW9uIHBsdWdpbnMgaW4gYSBwaXBlbGluZSB0byB0cmFuc2Zvcm0gYXVkaW8gIgotI34gInN0cmVhbSBpbiB2aWRlbyBmcmFtZXMuIERlZmF1bHQgaXMgZ29vbSBidXQgbW9yZSB2aXN1YWxpemF0aW9uIHBsdWdpbnMgIgotI34gIndpbGwgYmUgcG9ydGVkIHNvb24uIFRoZSB2aXN1YWxpemF0aW9uIHBsdWdpbiBjYW4gYmUgYSBwYXJ0aWFsIHBpcGVsaW5lICIKLSN+ICJpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiS2FuYWxpemF6aW9ldGFuIGJpc3RhcmF0emVrbyBwbHVnaW5hayBqYXIgZGl0emFrZSBHU3RyZWFtZXItZWssIGF1ZGlvLSIKLSN+ICJrb3Jyb250ZWFrIGJpZGVvLWZvdG9ncmFtYSBiaWh1cnR6ZWtvLiBHb29tIGRhIGxlaGVuZXRzaWEsIGJhaW5hIGxhc3RlciAiCi0jfiAiaXphbmdvIGRhIGJpc3RhcmF0emVrbyBwbHVnaW4gZ2VoaWFnby4gQmlzdGFyYXR6ZWtvIHBsdWdpbmEga2FuYWxpemF6aW8gIgotI34gInBhcnR6aWFsIGJhdCBpemFuIGRhaXRla2UsIGVsZW1lbnR1IGJhdCBpemFuIGJlaGFycmVhbi4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgYXVkaW8gdXNpbmcgYW55IG51bWJlciBvZiBpbnB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc3JjLCBlc2RzcmMgYW5kIGFsc2FzcmMuIFRoZSBhdWRpbyBzb3VyY2UgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkhhaW5iYXQgc2FycmVyYWtvIGVsZW1lbnR1IGVyYWJpbGl6IGdyYWJhIGRlemFrZSBhdWRpb2EgR1N0cmVhbWVyLWVrLiAiCi0jfiAiSGFsYSBub2xhIG9zc3NyYywgZXNkc3JjIGV0YSBhbHNhc3JjLiBBdWRpby1pdHVyYnVydWEga2FuYWxpemF6aW8gIgotI34gInBhcnR6aWFsIGJhdCBpemFuIGRhaXRla2UsIGVsZW1lbnR1IGJhdCBpemFuIGJlaGFycmVhbi4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgdmlkZW8gZnJvbSBhbnkgbnVtYmVyIG9mIGlucHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSB2NGxzcmMgYW5kIHZpZGVvdGVzdHNyYy4gVGhlIHZpZGVvIHNvdXJjZSBjYW4gYmUgYSAiCi0jfiAicGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiSGFpbmJhdCBzYXJyZXJha28gZWxlbWVudHUgZXJhYmlsaXogZ3JhYmEgZGV6YWtlIGJpZGVvYSBHU3RyZWFtZXItZWsuICIKLSN+ICJIYWxhIG5vbGEgdjRsc3JjIGV0YSB2aWRlb3Rlc3RzcmMuIEJpZGVvLWl0dXJidXJ1YSBrYW5hbGl6YXppbyBwYXJ0emlhbCAiCi0jfiAiYmF0IGl6YW4gZGFpdGVrZSwgZWxlbWVudHUgYmF0IGl6YW4gYmVoYXJyZWFuLiIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvIHNvdXJjZSIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyIGF1ZGlvLWl0dXJidXJ1IGxlaGVuZXRzaWEiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciBhdWRpb3NpbmsiCi0jfiBtc2dzdHIgIkdTdHJlYW1lciBhdWRpby1rb2xla3RvcmUgbGVoZW5ldHNpYSIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIHZpZGVvIHNvdXJjZSIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyIGJpZGVvLWl0dXJidXJ1IGxlaGVuZXRzaWEiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aWRlb3NpbmsiCi0jfiBtc2dzdHIgIkdTdHJlYW1lciBiaWRlby1rb2xla3RvcmUgbGVoZW5ldHNpYSIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIHZpc3VhbGl6YXRpb24gcGx1Z2luIgotI34gbXNnc3RyICJHU3RyZWFtZXIgYmlzdGFyYXR6ZWtvIHBsdWdpbiBsZWhlbmV0c2lhIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIEdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZyIKLSN+IG1zZ3N0ciAiIgotI34gIkF1ZGlvLS9CaWRlby1rb25mZXJlbnR6aWFrIGVnaXRla28gR1N0cmVhbWVuIGF1ZGlvLWtvbGVrdG9yZWFyZW4gIgotI34gImRlc2tyaWJhcGVuYSIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBNdXNpYyBhbmQgTW92aWVzIgotI34gbXNnc3RyICJNdXNpa2FyZW4gZXRhIGZpbG1lbiBHU3RyZWFtZXIgYXVkaW8ta29sZWt0b3JlYXJlbiBkZXNrcmliYXBlbmEiCi0KLSN+IG1zZ2lkICJkZXNjcmlwdGlvbiBmb3IgZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW9zaW5rIgotI34gbXNnc3RyICJHU3RyZWFtZXIgYXVkaW8ta29sZWt0b3JlIGxlaGVuZXRzaWFyZW4gZGVza3JpYmFwZW5hIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc3JjIgotI34gbXNnc3RyICJHU3RyZWFtZXIgYXVkaW9zcmMgbGVoZW5ldHNpYXJlbiBkZXNrcmliYXBlbmEiCmRpZmYgLS1naXQgYS9wby9maS5nbW8gYi9wby9maS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzA5ZWEuLjAwMDAwMDAKLS0tIGEvcG8vZmkuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZmkucG8gYi9wby9maS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkZWYwZS4uMDAwMDAwMAotLS0gYS9wby9maS5wbworKysgL2Rldi9udWxsCkBAIC0xLDkwNyArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jIEZpbm5pc2ggbWVzc2FnZXMgZm9yIGdzdC1wbHVnaW5zLWdvb2QuCi0jIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRvbW1pIFZhaW5pa2FpbmVuLgotIyBDb3B5cmlnaHQgKEMpIDIwMDcgSWxra2EgVHVvaGVsYS4KLSMgU3VvbWVubm9zOiBodHRwOi8vZ25vbWUuZmkvCi0jCi0jIFRvbW1pIFZhaW5pa2FpbmVuIDx0aHZAaWtpLmZpPiwgMjAwOS0yMDEwLgotIyBJbGtrYSBUdW9oZWxhIDxoaWxlQGlraS5maT4sIDIwMDcuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDAuMTAuMjUuM1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTExLTE3IDIzOjAzKzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IFRvbW1pIFZhaW5pa2FpbmVuIDxUb21taS5WYWluaWthaW5lbkBpa2kuZmk+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogRmlubmlzaCA8dHJhbnNsYXRpb24tdGVhbS1maUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGZpXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiSlBFRy1rdXZhbiBwdXJrdSBlcMOkb25uaXN0dWkiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIuKAnSVz4oCdIGFydGlzdGlsdGEg4oCdJXPigJ0iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIlBhbHZlbGltZWVuIGVpIHNhYXR1IHlodGV5dHTDpCIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJFaSBVUkw6w6TDpCBhc2V0ZXR0dW5hLiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJQYXZlbGluIGVpIHR1ZSBrZWxhdXN0YS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIlBhbHZlbGltZW4gbmltZcOkIGVpIHNhYXR1IHNlbHZpdGV0dHnDpC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiWWh0ZXl0dMOkIHBhbHZlbGltZWVuIGVpIHZvaXR1IGF2YXRhLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIlR1cnZhbGxpc2VuIHlodGV5ZGVuIGF2YXVzIGVww6Rvbm5pc3R1aS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiVGFwYWh0dWkgdmVya2tvdmlyaGUgdGFpIHBhbHZlbGluIHN1bGtpIHlodGV5ZGVuIHlsbMOkdHTDpGVuLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiUGFsdmVsaW4gbMOkaGV0dGkgdmlyaGVlbGxpc3TDpCBkYXRhYS4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIiIKLSLDhMOkbnTDpCBlaSBvbGUgdGFpIMOkw6RuaWzDpGhkZSBvbiB2aWFsbGluZW4sIEFWSS12aXJ0YSB0dWxlZSBvbGVtYWFuICIKLSJ2YXVyaW9pdHVudXQuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJUaWVkb3N0byBlaSBzaXPDpGxsw6Qgc29pdGV0dGF2aWEgdmlydG9qYS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlRpZWRvc3RvIG9uIHZpcmhlZWxsaW5lbiBlaWvDpCBzaXTDpCB2b2lkYSBlc2l0dMOkw6QuIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiVGllZG9zdG8gb24gdmlvaXR0dW51dCBlaWvDpCBzaXTDpCB2b2lkYSBuw6R5dHTDpMOkLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJUaWVkb3N0byBvbiB2YWphYSBlaWvDpCBzaXTDpCB2b2lkYSBlc2l0dMOkw6QuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJUaWVkb3N0b3NzYSBvbGV2YWEgdmlkZW90YSBlaSBlaGvDpCB2b2lkYSBuw6R5dHTDpMOkIG9pa2Vpbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiVGllZG9zdG8gc2lzw6RsdMOkw6QgdXNlaXRhIHZpcnRvamEuIFNvaXRldGFhbiB2YWluIGVuc2ltbcOkaXNldCAlZCIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iVHVldHR1YSB2aXJ0YWEgZWkgbMO2eXR5bnl0LiBLZW50aWVzIHNpbnVuIHRhcnZpdHNlZSBhc2VudGFhIEdTdHJlYW1lci1SVFNQLSIKLSJsYWFqZW5udXMga8OkeXR0w6TDpGtzZXNpIFJlYWwtbWVkaWEtdmlydG9qYS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJUdWV0dHVhIHZpcnRhYSBlaSBsw7Z5dHlueXQuIFNpbnVuIGtlbnRpZXMgdGFydml0c2VlIHNhbGxpYSB1c2VhbXBpYSAiCi0ic2lpcnRvcHJvdG9rb2xsaWEsIHRhaSB2YWlodG9laHRvaXNlc3RpIHNpbnVsdGEgc2FhdHRhYSBwdXV0dHVhIG9pa2VhICIKLSJHU3RyZWFtZXItUlRTUC1sYWFqZW5udXNsaWl0w6RubsOkaW5lbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iw4TDpG5pbGFpdGV0dGEgZWkgdm9pdHUgYXZhdGEgdG9pc3RldHRhdmFrc2kuIExhaXRlIG9uIHRvaXNlbiBzb3ZlbGx1a3NlbiAiCi0ia8OkeXTDtnNzw6QuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSLDhMOkbmlsYWl0ZXR0YSBlaSB2b2l0dSBhdmF0YSB0b2lzdGFtaXN0YSB2YXJ0ZW4uIExhaXR0ZWVuIGF2YWFtaXNlZW4gZWkgb2xlICIKLSJvaWtldWtzaWEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIsOEw6RuaWxhaXRldHRhIGVpIHZvaXR1IGF2YXRhIHRvaXN0ZXR0YXZha3NpLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSLDhMOkbmlsYWl0ZXR0YSBlaSB2b2l0dSBhdmF0YSB0b2lzdGFtaXN0YSB2YXJ0ZW4uIFTDpG3DpCBlbGVtZW50dGkgZWkgdHVlIHTDpHTDpCAiCi0idmVyc2lvdGEgT3BlbiBTb3VuZCBTeXN0ZW1pc3TDpC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiVMOkbcOkIMOkw6RuaWxhaXRlIGVpIHR1ZSB0b2lzdGFtaXN0YS4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIsOEw6RuZW50b2lzdG92aXJoZS4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIlTDpG3DpCDDpMOkbmlsYWl0ZSBlaSB0dWUgbmF1aG9pdHVzdGEuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiVmlyaGUgbHVldHRhZXNzYSDDpMOkbmlsYWl0dGVlbHRhLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIsOEw6RuaWxhaXRldHRhIGVpIHZvaXR1IGF2YXRhIG5hdWhvaXR1c3RhIHZhcnRlbi4gTGFpdHRlZW4gYXZhYW1pc2VlbiBlaSBvbGUgIgotIm9pa2V1a3NpYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIsOEw6RuaWxhaXRldHRhIGVpIHZvaXR1IGF2YXRhIG5hdWhvaXR1c3RhIHZhcnRlbi4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJOYXVob2l0dXNsw6RoZGUiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbmkiCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJMaW5qYXR1bG8iCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiU2lzw6RpbmVuIENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIHNpc8Okw6RuIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIHNpc8Okw6RuIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIHNpc8Okw6RuIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJUYWthaXNpbmt5dGtlbnTDpCIKLQotIywgZnV6enkKLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlRha2Fpc2lua3l0a2VudMOkIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICLDhMOkbmVudm9pbWFra3V1cyIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIkhlcmtreXlzIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiVGFya2thaWx1IgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiU2lzw6TDpG5yYWtlbm5ldHR1IGthaXV0aW4iCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIkt1dWxva2tlZXQiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiTGluamEgdWxvcyIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgdWxvcyIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiQVVYIDEgdWxvcyIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYIDIgdWxvcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJWaXJoZSBsdWV0dGFlc3NhICVkIHRhdnVhIGxhaXR0ZWVsdGEg4oCdJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIlB1c2tlcmVpdGEgbGFpdHRlZWx0YSDigJ0lc+KAnSBlaSB2b2l0dSBrYXJ0b2l0dGFhIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiTGFpdHRlZW4g4oCdJXPigJ0gYWp1cmkgZWkgdHVlIG1pdMOkw6RuIHR1bm5ldHR1YSBrYWFwcGF1c3RhcGFhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICJMYWl0dGVlbiDigJ0lc+KAnSBhanVyaSBlaSB0dWUgbWl0w6TDpG4gdHVubmV0dHVhIGthYXBwYXVzdGFwYWEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJMYWl0ZSDigJ0lc+KAnSBlaSBvbGUgdWxvc3R1bG9sYWl0ZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJMYWl0dGVlbHRhIOKAnSVz4oCdIGVpIHZvaSBrYWFwYXRhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIkxhaXR0ZWVsdGEg4oCdJXPigJ0gZWkgdm9pIGthYXBhdGEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJMYWl0ZSDigJ0lc+KAnSBlaSBvbGUgdWxvc3R1bG9sYWl0ZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJMYWl0dGVlbHRhIOKAnSVz4oCdIGVpIHZvaXR1IHNhYWRhIHBhcmFtZXRyZWphIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmlkZW9zecO2dGVsYWl0ZSBlaSBoeXbDpGtzeSB1dXR0YSBrZWh5c25vcGV1c2FzZXR1c3RhLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICJWaWRlb3N5w7Z0ZWxhaXRlIGVpIGh5dsOka3N5IHV1dHRhIGtlaHlzbm9wZXVzYXNldHVzdGEuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICJMYWl0dGVlbiDigJ0lc+KAnSBhanVyaSBlaSB0dWUgbWl0w6TDpG4gdHVubmV0dHVhIGthYXBwYXVzdGFwYWEuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIkxhaXR0ZWVuIOKAnSVz4oCdIGFqdXJpIGVpIHR1ZSBtaXTDpMOkbiB0dW5uZXR0dWEga2FhcHBhdXN0YXBhYS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiVmlkZW9zecO2dGVsYWl0ZSBlaSBoeXbDpGtzeSB1dXR0YSBrZWh5c25vcGV1c2FzZXR1c3RhLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlZpcml0dGltZW4gJWQgYXNldHVrc2lhIGVpIHZvaXR1IGx1a2VhIGxhaXR0ZWVsdGEg4oCdJXPigJ0uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJWaXJoZSBsdWV0dGFlc3NhICVkIHRhdnVhIGxhaXR0ZWVsdGEg4oCdJXPigJ0uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkxhaXRlIOKAnSVz4oCdIGVpIG9sZSB1bG9zdHVsb2xhaXRlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJTaXPDpMOkbnR1bG9hICVkIGVpIHZvaXR1IGFzZXR0YWEgbGFpdHRlZWxsZSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJTaXPDpMOkbnR1bG9hICVkIGVpIHZvaXR1IGFzZXR0YWEgbGFpdHRlZWxsZSAlcy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJMYWl0dGVlbHRhIOKAnSVz4oCdIGVpIHNhYXR1IHNpZ25hYWxpbnZvaW1ha2t1dXR0YS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkxhaXR0ZWVuIOKAnSVz4oCdIGFqdXJpIGVpIHR1ZSBtaXTDpMOkbiB0dW5uZXR0dWEga2FhcHBhdXN0YXBhYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJWaWRlb3N5w7Z0ZWxhaXRlIGVpIGh5dsOka3N5IHV1dHRhIGtlaHlzbm9wZXVzYXNldHVzdGEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiVmlkZW9zecO2dGVsYWl0ZSBlaSBoeXbDpGtzeSB1dXR0YSBrZWh5c25vcGV1c2FzZXR1c3RhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJWaWRlb3N5w7Z0ZWxhaXRlIGVpIGh5dsOka3N5IHV1dHRhIGtlaHlzbm9wZXVzYXNldHVzdGEuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJKUEVHLWt1dmFuIHB1cmt1IGVww6Rvbm5pc3R1aSIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIlZpcmhlIGhhZXR0YWVzc2EgbGFpdHRlZW4g4oCdJXPigJ0gb21pbmFpc3V1a3NpYTogc2UgZWkgb2xlIHY0bDItYWp1cmkuVGFya2lzdGEsICIKLSJvbmtvIHNlIHY0bDEtYWp1cmkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTMOkaHRlZW4gJWQgb21pbmFpc3V1a3NpYSBsYWl0dGVlbHRhICVzIGVpIHZvaXR1IGt5c3nDpCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJWaXJpdHRpbWVuICVkIGFzZXR1a3NpYSBlaSB2b2l0dSBsdWtlYSBsYWl0dGVlbHRhIOKAnSVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkxhaXR0ZWVuIOKAnSVz4oCdIHZpZGVvc3RhbmRhcmRpYSBlaSB2b2l0dSBreXN5w6QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJMYWl0dGVlbiDigJ0lc+KAnSBvaGphaW5hdHRyaWJ1dXR0ZWphIGVpIHZvaXR1IGx1a2VhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJMYWl0ZXR0YSDigJ0lc+KAnSBlaSB2b2kgdHVubmlzdGFhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJUw6Rtw6QgZWkgb2xlIGxhaXRlIOKAnSVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkxhaXRldHRhIOKAnSVz4oCdIGVpIHZvaXR1IGF2YXRhIGx1ZXR0YXZha3NpIGphIGtpcmpvaXRldHRhdmFrc2kuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiTGFpdHRlZWx0YSDigJ0lc+KAnSBlaSB2b2kga2FhcGF0YS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkxhaXRlIOKAnSVz4oCdIGVpIG9sZSB1bG9zdHVsb2xhaXRlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkxhaXRlIOKAnSVz4oCdIGVpIG9sZSB1bG9zdHVsb2xhaXRlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkxhaXRldHRhIOKAnSVz4oCdIGVpIHZvaXR1IGF2YXRhIGx1ZXR0YXZha3NpIGphIGtpcmpvaXRldHRhdmFrc2kuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJMYWl0dGVlbiDigJ0lc+KAnSB2aWRlb3N0YW5kYXJkaWEgZWkgdm9pdHUgYXNldHRhYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJOeXQgdmlyaXRldHR5w6QgdGFhanV1dHRhIGVpIHZvaXR1IGx1a2VhIGxhaXR0ZWVsdGEg4oCdJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIkxhaXR0ZWVuIOKAnSVz4oCdIHZpcml0dGltZW4gdGFhanV0dGEgZWkgdm9pdHUgYXNldHRhYSBhcnZvb24gJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJMYWl0dGVlbHRhIOKAnSVz4oCdIGVpIHNhYXR1IHNpZ25hYWxpbnZvaW1ha2t1dXR0YS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk9oamFpbWVsbGUgJWQgZWkgc2FhdHUgYXJ2b2EgbGFpdHRlZWx0YSDigJ0lc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkFydm9hICVkIGVpIHZvaXR1IGFzZXR0YWEgb2hqYWltZWxsZSAlZCBsYWl0dGVlbGxhIOKAnSVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkxhaXR0ZWVuIOKAnSVz4oCdIHTDpG3DpG5oZXRraXN0w6Qgc2lzw6TDpG50dWxvYSBlaSB2b2l0dSBsdWtlYSwgc2UgZWkgZWhrw6Qgb2xlICIKLSJyYWRpb2xhaXRlIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iTGFpdHRlZW4g4oCdJXPigJ0gdMOkbcOkbmhldGtpc3TDpCBzaXPDpMOkbnR1bG9hIGVpIHZvaXR1IGx1a2VhLCBzZSBlaSBlaGvDpCBvbGUgIgotInJhZGlvbGFpdGUiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIlNpc8Okw6RudHVsb2EgJWQgZWkgdm9pdHUgYXNldHRhYSBsYWl0dGVlbGxlICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlJlc29sdXV0aW9uIHZhaWh0byBrw6R5dMO2biBhaWthbmEgZWkgb2xlIHZpZWzDpCBtYWhkb2xsaXN0YS4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIkVpIHZvaXR1IHRvaW1pYSBpbG1hbiBrZWxsb2EiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlNpc8OkaXNlbiB0aWV0b3ZpcnJhbiB2aXJoZS4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJTaXPDpGlzZW4gdGlldG92aXJyYW4gdmlyaGUuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAiTGFpdGUg4oCdJXPigJ0gZWkgb2xlIHVsb3N0dWxvbGFpdGUuIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiU2FhdGlpbiBvZG90dGFtYXRvbiBrZWh5cyBrb29sdGFhbiAldSBvZG90ZXR1biAldSBzaWphYW4uIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJWaWRlb3J1dXR1amVuIG5vdXRhbWluZW4gbGFpdHRlZWx0YSDigJ0lc+KAnSBlcMOkb25uaXN0dWkuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIkVww6Rvbm5pc3R1aSAlZCB5cml0eWtzZW4gasOkbGtlZW46IGxhaXRlICVzLCBqw6RyamVzdGVsbcOkdmlyaGU6ICVzIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiQmFzc28iCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgIllsw6Qtw6TDpG5ldCIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTeW50aCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiS2FpdXRpbiIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkxpbmphdHVsbyIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaWtzZXJpIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICJOYXVob2l0dXMiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJHYWluLXNpc8Okw6RuIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIkdhaW4tdWxvcyIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiTGluamEtMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAiTGluamEtMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTGluamEtMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGlnaXRhYWxpbmVuLTEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpZ2l0YWFsaW5lbi0yIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICJEaWdpdGFhbGluZW4tMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJMZXZ5c29pdGludHVsbyIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiTGV2eXNvaXRpbmzDpGh0w7YiCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkaW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICLDhMOkbmlsYWl0ZXR0YSBlaSB2b2l0dSBhdmF0YSBtaWtzZXJpbmhhbGxpbnRhYSB2YXJ0ZW4uIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiw4TDpG5pbGFpdGV0dGEgZWkgdm9pdHUgYXZhdGEgbWlrc2VyaW5oYWxsaW50YWEgdmFydGVuLiBUw6Rtw6QgZWxlbWVudHRpIGVpICIKLSN+ICJ0dWUgdMOkdMOkIHZlcnNpb3RhIE9wZW4gU291bmQgU3lzdGVtaXN0w6QuIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJQw6TDpCIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJFdHUiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJUYWthIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiS3V1bG9ra2VldCIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiS2Vza2kiCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZCIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIlNpdnUiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVggdWxvcyIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICIzRC1zeXZ5eXMiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIjNELWtlc2tpIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0QtdGVob3N0dXMiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlB1aGVsaW4iCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW90dWxvIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJBVVggc2lzw6TDpG4iCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiTmF1aG9pdHVzZ2FpbiIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJHYWluLXVsb3MiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJNaWtyb2Zvbml0ZWhvc3RpbiIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub3NvaW50aSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkJhc3NvdGVob3N0aW4iCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiVG9pc3RvcG9ydGl0IgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIlNpc8Okw6RuIgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIlRhcmtrYWlsdWzDpGhkZSIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIk7DpHBww6RpbWlzdMO2cGlpcHBhdXMiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsb2l0dSBzdGVyZW8iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIlN0ZXJlbyIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZC3DpMOkbmkiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uaS1nYWluIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIkthaXV0aW5sw6RoZGUiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25pbMOkaGRlIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiUGlzdG9rZSIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiS2Vza2kgLyBMRkUiCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICJTdGVyZW8gTWl4IgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbm8gTWl4IgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJTaXPDpMOkbiBNaXgiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDEiCi0jfiBtc2dzdHIgIk1pa3JvZm9uaSAxIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICJNaWtyb2ZvbmkgMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJEaWdpdGFhbGluZW4gdWxvcyIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkRpZ2l0YWFsaW5lbiBzaXPDpMOkbiIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAiTW9kZWVtaSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIkt1dWxva2tlZXQiCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAiTXV1IgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiRWkgbWlrw6TDpG4iCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAiUMOkw6RsbMOkIgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICJQb2lzc2EiCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICJWYWltZW5uZXR0dSIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIk5vcGVhIgotCi0jfiBtc2dpZCAiVmVyeSBMb3ciCi0jfiBtc2dzdHIgIkVyaXR0w6RpbiBtYXRhbGEiCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIk1hdGFsYSIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiTWVkaXVtIgotCi0jfiBtc2dpZCAiSGlnaCIKLSN+IG1zZ3N0ciAiS29ya2VhIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJFcml0dMOkaW4ga29ya2VhIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAiVHVvdGFudG8iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJFdHVwYW5lZWxpbiBtaWtyb2ZvbmkiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICJFdHVwYW5lZWxpbiBsaW5qYXR1bG8iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJFdHVwYW5lZWxpbiBrdXVsb2trZWV0IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIkV0dXBhbmVlbGluIGxpbmphIHVsb3MiCi0KLSN+IG1zZ2lkICJHcmVlbiBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlZpaHJlw6QgbGlpdGluIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlZhYWxlYW5wdW5haW5lbiBsaWl0aW4iCi0KLSN+IG1zZ2lkICJCbHVlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiU2luaW5lbiBsaWl0aW4iCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlZhbGtvaW5lbiBsaWl0aW4iCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk11c3RhIGxpaXRpbiIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJIYXJtYWEgbGlpdGluIgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbnNzaSBsaWl0aW4iCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICJQdW5haW5lbiBsaWl0aW4iCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLZWx0YWluZW4gbGlpdGluIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJWaWhyZcOkIGV0dXBhbmVlbGlsaWl0aW4iCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiVmFhbGVhbnB1bmFpbmVuIGV0dXBhbmVlbGlsaWl0aW4iCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiU2luaW5lbiBldHVwYW5lZWxpbGlpdGluIgotCi0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJWYWxrb2luZW4gZXR1cGFuZWVsaWxpaXRpbiIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTXVzdGEgZXR1cGFuZWVsaWxpaXRpbiIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJIYXJtYWEgZXR1cGFuZWVsaWxpaXRpbiIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk9yYW5zc2kgZXR1cGFuZWVsaWxpaXRpbiIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlB1bmFpbmVuIGV0dXBhbmVlbGlsaWl0aW4iCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLZWx0YWluZW4gZXR1cGFuZWVsaWxpaXRpbiIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIkxldml0ZXR0eSB1bG9zIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiQWxhc21pa3NhdXMiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJWaXJ0dWFhbGluZW4gbWlrc2VyaXR1bG8iCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiVmlydHVhYWxpbmVuIG1pa3NlcmkgdWxvcyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgQ2hhbm5lbHMiCi0jfiBtc2dzdHIgIlZpcnR1YWFsaXNldCBtaWtzZXJpa2FuYXZhdCIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyAlZCAtdG9pbWludG8iCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgLXRvaW1pbnRvIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIlZpcmhlIGx1ZXR0YWVzc2EgJWQgdGF2dWEgbGFpdHRlZWx0YSDigJ0lc+KAnS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiUHVza3VyZWl0YSBlaSB2b2l0dSBsYWl0dGFhIGpvbm9vbiBsYWl0dGVlbGxhIOKAnSVz4oCdLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIllodGV5dHTDpCDDpMOkbmlwYWx2ZWxpbWVlbiBlaSB2b2l0dSBhdmF0YSIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICLDhMOkbmlwYWx2ZWxpbWVuIG9taW5haXN1dWtzaWEgZWkgdm9pdHUgc2Vsdml0dMOkw6QiCi0KLSN+IG1zZ2lkICIiCi0jfiAiVGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLCBvciBubyAiCi0jfiAiYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlIHVzZXJwdHIgb3IgbGVuZ3RoIGFyZSBpbnZhbGlkLiAiCi0jfiAiZGV2aWNlICVzIgotI34gbXNnc3RyICIiCi0jfiAiUHVza3VyaXR5eXBwaSBlaSBvbGUgdHVldHR1LCBpbmRla3NpIG9uIHJham9qZW4gdWxrb3B1b2xlbGxhLCBwdXNrdXJlaXRhICIKLSN+ICJlaSBvbGUgdmllbMOkIHZhcmF0dHUgdGFpIGvDpHl0dMOkasOkbiBvc29pdGluIHRhaSBwaXR1dXMgb3ZhdCB2aXJoZWVsbGlzZXQuICIKLSN+ICJsYWl0ZSAlcyIKLQotI34gbXNnaWQgImluc3VmZmljaWVudCBtZW1vcnkgdG8gZW5xdWV1ZSBhIHVzZXIgcG9pbnRlciBidWZmZXIuIGRldmljZSAlcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJtdWlzdGkgZWkgcmlpdMOkIGvDpHl0dMOkasOkbiBvc29pdGlucHVza3VyaW4gam9ub29uIGxpc8Okw6RtaXNlZW4uIGxhaXRlICVzIgotCi0jfiBtc2dpZCAiTm8gZnJlZSBidWZmZXJzIGZvdW5kIGluIHRoZSBwb29sIGF0IGluZGV4ICVkLiIKLSN+IG1zZ3N0ciAiVmFwYWl0YSBwdXNrdXJlaXRhIGVpIGzDtnl0eW55dCBpbmRla3NpbGzDpCAlZC4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIENELiIKLSN+IG1zZ3N0ciAiQ0QtbGV2eWx0w6QgZWkgdm9pdHUgbHVrZWEuIgotCi0jfiBtc2dpZCAiRGlzYyBpcyBub3QgYW4gQXVkaW8gQ0QuIgotI34gbXNnc3RyICJMZXZ5IGVpIG9sZSDDpMOkbmktQ0QuIgotCi0jfiBtc2dpZCAiVGhpcyBmaWxlIGlzIGVuY3J5cHRlZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi0jfiBtc2dzdHIgIlRpZWRvc3RvIG9uIHNhbGF0dHUgZWlrw6Qgc2l0w6Qgdm9pZGEgbsOkeXR0w6TDpC4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIGlucHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICJLdXZhYSB2YWxpdHVuIGzDpGhkZS1lbGVtZW50aW4uIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBvdXRwdXQgZWxlbWVudCBmb3IgQXVkaW8vVmlkZW8gQ29uZmVyZW5jaW5nLiIKLSN+IG1zZ3N0ciAiS3V2YWEgw6TDpG5pLSBqYSB2aWRlb25ldXZvdHRlbHVpbGxlIHZhbGl0dW4gdWxvc3R1bG9lbGVtZW50aW4uIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBvdXRwdXQgZWxlbWVudCBmb3IgTXVzaWMgYW5kIE1vdmllcy4iCi0jfiBtc2dzdHIgIkt1dmFhIG11c2lpa2lsbGUgamEgZWxva3V2aWxsZSB2YWxpdHVuIHVsb3N0dWxvZWxlbWVudGluLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICJLdXZhYSB2YWxpdHVuIHVsb3N0dWxvZWxlbWVudGluLiIKLQotI34gbXNnaWQgIkdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZyIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyLcOkw6RuaW5pZWx1IMOkw6RuaS0gamEgdmlkZW9uZXV2b3R0ZWx1aWxsZSIKLQotI34gbXNnaWQgIkdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIE11c2ljIGFuZCBNb3ZpZXMiCi0jfiBtc2dzdHIgIkdTdHJlYW1lci3DpMOkbmluaWVsdSDDpMOkbmVsbGUgamEgZWxva3V2aWxsZSIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHBsYXkgYXVkaW8gdXNpbmcgYW55IG51bWJlciBvZiBvdXRwdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIG9zc3NpbmssIGVzZHNpbmsgYW5kIGFsc2FzaW5rLiBUaGUgYXVkaW9zaW5rIGNhbiBiZSAiCi0jfiAiYSBwYXJ0aWFsIHBpcGVsaW5lIGluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHU3RyZWFtZXIgdm9pIHNvaXR0YWEgw6TDpG50w6Qga8OkeXR0w6RlbiB1c2VpdGEgZXJpIG5pZWx1ZWxlbWVudHRlasOkLiAiCi0jfiAiTXV1dGFtaWEgdmFpaHRvZWh0b2phIG92YXQgb3Nzc2luaywgZXNkc2luayBqYSBhbHNhc2luay4gw4TDpG5pbmllbHUgdm9pICIKLSN+ICJvbGxhIG15w7ZzIGxpdWt1aGlobmFuIG9zYSBlaWvDpCB2YWluIHlrc2kgZWxlbWVudHRpLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHBsYXkgdmlkZW8gdXNpbmcgYW55IG51bWJlciBvZiBvdXRwdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIHh2aW1hZ2VzaW5rLCB4aW1hZ2VzaW5rLCBzZGx2aWRlb3NpbmsgYW5kIGFhc2luay4gIgotI34gIlRoZSB2aWRlb3NpbmsgY2FuIGJlIGEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIHZvaSB0b2lzdGFhIHZpZGVvdGEga8OkeXR0w6RlbiB1c2VpdGEgZXJpIG5pZWx1ZWxlbWVudHRlasOkLiAiCi0jfiAiTXV1dGFtaWEgdmFpaHRvZWh0b2phIG92YXQgeHZpbWFnZXNpbmssIHhpbWFnZXNpbmssIHNkbHZpZGVvc2luayBqYSAiCi0jfiAiYWFzaW5rLiBWaWRlb25pZWx1IHZvaSBvbGxhIG15w7ZzIGxpdWt1aGlobmFuIG9zYSBlaWvDpCB2YWluIHlrc2kgZWxlbWVudHRpLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHB1dCB2aXN1YWxpemF0aW9uIHBsdWdpbnMgaW4gYSBwaXBlbGluZSB0byB0cmFuc2Zvcm0gYXVkaW8gIgotI34gInN0cmVhbSBpbiB2aWRlbyBmcmFtZXMuIERlZmF1bHQgaXMgZ29vbSBidXQgbW9yZSB2aXN1YWxpemF0aW9uIHBsdWdpbnMgIgotI34gIndpbGwgYmUgcG9ydGVkIHNvb24uIFRoZSB2aXN1YWxpemF0aW9uIHBsdWdpbiBjYW4gYmUgYSBwYXJ0aWFsIHBpcGVsaW5lICIKLSN+ICJpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR3N0cmVhbWVyIHZvaSBsYWl0dGFhIHZpc3VhbGlzb2ludGlsaWl0w6RubsOkaXNpw6QgbGl1a3VoaWhuYWxsZSwgam9sbGUgc2UgIgotI34gIm11dW50YWEgw6TDpG5pdmlycmFuIHZpZGVvcnV1ZHVpa3NpLiBPbGV0dXNsaWl0w6RubsOkaW5lbiBvbiBnb29tLCBtdXR0YSAiCi0jfiAibXVpdGEgb2xsYWFuIGxpc8Okw6Rtw6Rzc8OkIHBpYW4uIFZpc3VhbGlzb2lubmluIGxpaXTDpG5uw6RpbmVuIHZvaSBvbGxhIG15w7ZzICIKLSN+ICJsaXVrdWhpaG5hbiBvc2EgZWlrw6QgdmFpbiB5a3NpIGVsZW1lbnR0aS4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgYXVkaW8gdXNpbmcgYW55IG51bWJlciBvZiBpbnB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc3JjLCBlc2RzcmMgYW5kIGFsc2FzcmMuIFRoZSBhdWRpbyBzb3VyY2UgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciB2b2kgbmF1aG9pdHRhYSDDpMOkbnTDpCBrw6R5dHTDpGVuIHVzZWl0YSBlcmkgbMOkaGRlLWVsZW1lbnR0ZWrDpC4gIgotI34gIk11dXRhbWlhIHZhaWh0b2VodG9qYSBvdmF0IG9zc3NyYywgZXNkc3JjIGphIGFsc2FzcmMuIMOEw6RuaWzDpGhkZSB2b2kgb2xsYSAiCi0jfiAibXnDtnMgbGl1a3VoaWhuYW4gb3NhIGVpa8OkIHZhaW4geWtzaSBlbGVtZW50dGkuIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcmVjb3JkIHZpZGVvIGZyb20gYW55IG51bWJlciBvZiBpbnB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgdjRsc3JjIGFuZCB2aWRlb3Rlc3RzcmMuIFRoZSB2aWRlbyBzb3VyY2UgY2FuIGJlIGEgIgotI34gInBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciB2b2kgbmF1aG9pdHRhYSB2aWRlb3RhIGvDpHl0dMOkZW4gdXNlaXRhIGVyaSBsw6RoZGUtZWxlbWVudHRlasOkLiAiCi0jfiAiTXV1dGFtaWEgdmFpaHRvZWh0b2phIG92YXQgdjRsc3JjIGphIHZpZGVvdGVzdHNyYy4uIFZpZGVvbMOkaGRlIHZvaSBvbGxhICIKLSN+ICJtecO2cyBsaXVrdWhpaG5hbiBvc2EgZWlrw6QgdmFpbiB5a3NpIGVsZW1lbnR0aS4iCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciBhdWRpbyBzb3VyY2UiCi0jfiBtc2dzdHIgIkdTdHJlYW1lcmluIG9sZXR1c8Okw6RuaWzDpGhkZSIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc2luayIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyaW4gb2xldHVzw6TDpG5pbmllbHUiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aWRlbyBzb3VyY2UiCi0jfiBtc2dzdHIgIkdTdHJlYW1lcmluIG9sZXR1c3ZpZGVvbMOkaGRlIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlkZW9zaW5rIgotI34gbXNnc3RyICJHU3RyZWFtZXJpbiBvbGV0dXN2aWRlb25pZWx1IgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlzdWFsaXphdGlvbiBwbHVnaW4iCi0jfiBtc2dzdHIgIkdzdHJlYW1lcmluIHZpc3VhbGlzb2ludGllbiBvbGV0dXNsaWl0w6RubsOkaW5lbiIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBBdWRpby9WaWRlbyBDb25mZXJlbmNpbmciCi0jfiBtc2dzdHIgImt1dmF1cyDDpMOkbmktIGphIHZpZGVvbmV1dm90dGVsdW4gR1N0cmVhbWVyLcOkw6RuaW5pZWx1bGxlIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIEdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIE11c2ljIGFuZCBNb3ZpZXMiCi0jfiBtc2dzdHIgImt1dmF1cyBtdXNpaWtpbiBqYSBlbG9rdXZpZW4gR1N0cmVhbWVyLcOkw6RuaW5pZWx1bGxlIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc2luayIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyaW4gb2xldHVzw6TDpG5pbmllbHVuIGt1dmF1cyIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBkZWZhdWx0IEdTdHJlYW1lciBhdWRpb3NyYyIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyaW4gb2xldHVzw6TDpG5pbMOkaHRlZW4ga3V2YXVzIgpkaWZmIC0tZ2l0IGEvcG8vZnIuZ21vIGIvcG8vZnIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2U5NDBjLi4wMDAwMDAwCi0tLSBhL3BvL2ZyLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2ZyLnBvIGIvcG8vZnIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MjczM2UuLjAwMDAwMDAKLS0tIGEvcG8vZnIucG8KKysrIC9kZXYvbnVsbApAQCAtMSw0NjMgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kIHRvIEZyZW5jaAotIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMSBHU3RyZWFtZXIgY29yZSB0ZWFtCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jCi0jIE5pY29sYXMgVmVsaW4gPG5pY29sYXNAdmVsaW4uZnI+LCAyMDA4LgotIyBDbGF1ZGUgUGFyb3ogPGNsYXVkZUAyeGxpYnJlLm5ldD4sIDIwMDgtMjAxMS4KLSMgU3TDqXBoYW5lIEF1bGVyeSA8bGtwcG9AZnJlZS5mcj4sIDIwMTUuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDItMjAgMTY6MjcrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogU3TDqXBoYW5lIEF1bGVyeSA8bGtwcG9AZnJlZS5mcj5cbiIKLSJMYW5ndWFnZS1UZWFtOiBGcmVuY2ggPHRyYWR1Y0B0cmFkdWMub3JnPlxuIgotIkxhbmd1YWdlOiBmclxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICJzZXJ2ZXVyIEphY2sgaW50cm91dmFibGUiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIsOJY2hlYyBkZSBkw6ljb2RhZ2UgZGUgbOKAmWltYWdlIEpQRUciCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIsKrwqAlc8KgwrsgcGFyIMKrwqAlc8KgwrsiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgc2UgY29ubmVjdGVyIGF1IHNlcnZldXIiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiQXVjdW4gVVJMIGTDqWZpbmkuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIkxlIHNlcnZldXIgbmUgZ8OocmUgcGFzIGxhIHJlY2hlcmNoZS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgcsOpc291ZHJlIGxlIG5vbSBkdSBzZXJ2ZXVyLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJnDqXRhYmxpciB1bmUgY29ubmV4aW9uIHZlcnMgbGUgc2VydmV1ci4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJMYSBjb25maWd1cmF0aW9uIGTigJl1bmUgY29ubmV4aW9uIHPDqWN1cmlzw6llIGEgw6ljaG91w6kuIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotIlVuZSBlcnJldXIgcsOpc2VhdSBz4oCZZXN0IHByb2R1aXRlIG91IGxlIHNlcnZldXIgYSBmZXJtw6kgYWJydXB0ZW1lbnQgbGEgIgotImNvbm5leGlvbi4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIkxlIHNlcnZldXIgYSBlbnZvecOpIGRlIG1hdXZhaXNlcyBkb25uw6llcy4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIkVudHLDqWUgYXVkaW8gYWJzZW50ZSBvdSBub24gdmFsaWRlLCBsZSBmbHV4IEFWSSBzZXJhIGNvcnJvbXB1LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiQ2UgZmljaGllciBuZSBjb250aWVudCBhdWN1biBmbHV4IGV4cGxvaXRhYmxlLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiQ2UgZmljaGllciBuJ2VzdCBwYXMgdmFsaWRlIGV0IG5lIHBldXQgZG9uYyBwYXMgw6p0cmUgbHUuIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBsZSBmbHV4IGNhciBpbCBlc3QgY2hpZmZyw6kgcGFyIHVuIERSTSBQbGF5UmVhZHkuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJDZSBmaWNoaWVyIGVzdCBjb3Jyb21wdSBldCBuZSBwZXV0IHBhcyDDqnRyZSBsdS4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIlRhaWxsZSBk4oCZYXRvbWUgbm9uIHZhbGlkZS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkNlIGZpY2hpZXIgbuKAmWVzdCBwYXMgY29tcGxldCBldCBuZSBwZXV0IGRvbmMgcGFzIMOqdHJlIGx1LiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiIgotIklsIGVzdCBwb3NzaWJsZSBxdWUgbGEgdmlkw6lvIGRhbnMgY2UgZmljaGllciBuZSBwdWlzc2UgcGFzIMOqdHJlIGx1ZSAiCi0iY29ycmVjdGVtZW50LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICJDZSBmaWNoaWVyIGNvbnRpZW50IHRyb3AgZGUgZmx1eC4gU2V1bHMgbGVzICVkIHByZW1pZXJzIHNlcm9udCBsdXMiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIkF1Y3VuIGZsdXggcHJpcyBlbiBjaGFyZ2UgbuKAmWEgw6l0w6kgdHJvdXbDqS4gSWwgZmF1dCBwZXV0LcOqdHJlIGluc3RhbGxlciB1biAiCi0iZ3JlZmZvbiBk4oCZZXh0ZW5zaW9uIEdTdHJlYW1lciBSVFNQIHBvdXIgbGVzIGZsdXggUmVhbCBtZWRpYS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJBdWN1biBmbHV4IHByaXMgZW4gY2hhcmdlIG7igJlhIMOpdMOpIHRyb3V2w6kuIElsIGZhdXQgcGV1dC3DqnRyZSBhdXRvcmlzZXIgIgotImRhdmFudGFnZSBkZSBwcm90b2NvbGVzIGRlIHRyYW5zcG9ydCBvdSBpbCBtYW5xdWUgcGV1dC3DqnRyZSBsZSBib24gZ3JlZmZvbiAiCi0iZOKAmWV4dGVuc2lvbiBHU3RyZWFtZXIgUlRTUC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBk4oCZb3V2cmlyIGxlIHDDqXJpcGjDqXJpcXVlIGF1ZGlvIGVuIGxlY3R1cmUuIExlIHDDqXJpcGjDqXJpcXVlIGVzdCAiCi0idXRpbGlzw6kgcGFyIHVuZSBhdXRyZSBhcHBsaWNhdGlvbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZOKAmW91dnJpciBsZSBww6lyaXBow6lyaXF1ZSBhdWRpbyBlbiBsZWN0dXJlLiBWb3VzIG7igJlhdmV6IHBhcyBsZXMgIgotImRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBvdXZyaXIgbGUgcMOpcmlwaMOpcmlxdWUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIkltcG9zc2libGUgZOKAmW91dnJpciBsZSBww6lyaXBow6lyaXF1ZSBhdWRpbyBlbiBsZWN0dXJlLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGTigJlvdXZyaXIgbGUgcMOpcmlwaMOpcmlxdWUgYXVkaW8gZW4gbGVjdHVyZS4gQ2V0dGUgdmVyc2lvbiBk4oCZT1NTICIKLSIoT3BlbiBTb3VuZCBTeXN0ZW0pIG7igJllc3QgcGFzIHByaXNlIGVuIGNoYXJnZSBwYXIgY2V0IMOpbMOpbWVudC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiTGEgbGVjdHVyZSBu4oCZZXN0IHBhcyBwcmlzZSBlbiBjaGFyZ2UgcGFyIGNlIHDDqXJpcGjDqXJpcXVlIGF1ZGlvLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiRXJyZXVyIGRlIGxlY3R1cmUgYXVkaW8uIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJM4oCZZW5yZWdpc3RyZW1lbnQgbuKAmWVzdCBwYXMgcHJpcyBlbiBjaGFyZ2UgcGFyIGNlIHDDqXJpcGjDqXJpcXVlIGF1ZGlvLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkVycmV1ciBsb3JzIGRlIGzigJllbnJlZ2lzdHJlbWVudCDDoCBwYXJ0aXIgZHUgcMOpcmlwaMOpcmlxdWUgYXVkaW8uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBk4oCZb3V2cmlyIGxlIHDDqXJpcGjDqXJpcXVlIGF1ZGlvIHBvdXIgbOKAmWVucmVnaXN0cmVtZW50LiBWb3VzIG7igJlhdmV6ICIKLSJwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBvdXZyaXIgbGUgcMOpcmlwaMOpcmlxdWUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlvdXZyaXIgbGUgcMOpcmlwaMOpcmlxdWUgYXVkaW8gcG91ciBs4oCZZW5yZWdpc3RyZW1lbnQuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIlDDqXJpcGjDqHJpcXVlIENvcmVBdWRpbyBpbnRyb3V2YWJsZSIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiTGUgcMOpcmlwaMOocmlxdWUgQ29yZUF1ZGlvIG7igJlhIHBhcyBwdSDDqnRyZSBvdXZlcnQiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJTb3VyY2UgZOKAmWVucmVnaXN0cmVtZW50IgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAiTWljcm8iCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJFbnRyw6llIGxpZ25lIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkNEIGludGVybmUiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiRW50csOpZSBTUERJRiIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICJFbnRyw6llIEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkVudHLDqWUgQVVYIDIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiQ29kZWMgYm91Y2xlIGludGVybmUiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlN1blZUUyBib3VjbGUgaW50ZXJuZSIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9sdW1lIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiR2FpbiIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk1vbml0ZXVyIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiSGF1dC1wYXJsZXVyIGludGVybmUiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIsOJY291dGV1cnMiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiU29ydGllIGxpZ25lIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICJTb3J0aWUgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIlNvcnRpZSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiU29ydGllIEFVWCAyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkVycmV1ciBkZSBsZWN0dXJlIGRlICVkIG9jdGV0cyBzdXIgbGUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGTigJnDqW51bcOpcmVyIGxlcyBmb3JtYXRzIHZpZMOpbyBjb21wYXRpYmxlcyBhdmVjIGxlIHDDqXJpcGjDqXJpcXVlICIKLSLCq8KgJXPCoMK7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1hcHBlciBsZXMgdGFtcG9ucyBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotIkxlIHBpbG90ZSBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IG5lIHByZW5kIGVuIGNoYXJnZSBsYSBtw6l0aG9kZSBk4oCZZW50csOpZS0iCi0ic29ydGllICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiIgotIkxlIHBpbG90ZSBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IG5lIHByZW5kIGVuIGNoYXJnZSBhdWN1bmUgbcOpdGhvZGUgZOKAmWVudHLDqWUtIgotInNvcnRpZSBjb25udWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIlDDqXJpcGjDqXJpcXVlIMKrwqAlc8Kgwrsgb2NjdXDDqSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiIgotIkxlIHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsgbmUgcGV1dCBwYXMgY2FwdHVyZXIgYXZlYyB1bmUgcsOpc29sdXRpb24gZGUgJWQgeCAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiTGUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuyBuZSBwZXV0IHBhcyBjYXB0dXJlciBkYW5zIGxlIGZvcm1hdCBzcMOpY2lmacOpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIkxlIHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsgbmUgcHJlbmQgcGFzIGVuIGNoYXJnZSBsZXMgcGxhbnMgbm9uIGNvbnRpZ3XDq3MiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlvYnRlbmlyIGxlcyBwYXJhbcOodHJlcyBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0iTGUgcMOpcmlwaMOpcmlxdWUgdmlkw6lvIG7igJlhIHBhcyBhY2NlcHTDqSBsZSBub3V2ZWF1IHBhcmFtw6h0cmUgZGUgZnLDqXF1ZW5jZSAiCi0iZOKAmWltYWdlLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIkxlIHDDqXJpcGjDqXJpcXVlIHZpZMOpbyBu4oCZYSBwYXMgZm91cm5pIGRlIGZvcm1hdCBkZSBzb3J0aWUuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIkxlIHDDqXJpcGjDqXJpcXVlIHZpZMOpbyBhIHJldG91cm7DqSB1bmUgZGltZW5zaW9ucyBpbmNvcnJlY3RlLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICIiCi0iTGUgcMOpcmlwaMOpcmlxdWUgdmlkw6lvIHV0aWxpc2UgdW5lIG3DqXRob2RlIGTigJllbnRyZWxhY2VtZW50IG5vbiBwcmlzZSBlbiAiCi0iY2hhcmdlLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJMZSBww6lyaXBow6lyaXF1ZSB2aWTDqW8gdXRpbGlzZSB1biBmb3JtYXQgZGUgcGl4ZWwgbm9uIHByaXMgZW4gY2hhcmdlLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNvbmZpZ3VyZXIgbGUgc3Bvb2xlciBpbnRlcm5lIGRlIHRhbXBvbnMuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICJMZSBww6lyaXBow6lyaXF1ZSB2aWTDqW8gbuKAmWEgc3VnZ8OpcsOpIGF1Y3VuZSB0YWlsbGUgZGUgY2FjaGUuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZOKAmW9idGVuaXIgbGVzIHBhcmFtw6h0cmVzIGR1IHN5bnRvbmlzZXVyICVkIGR1IHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkVycmV1ciBk4oCZaW50ZXJyb2dhdGlvbiBkZXMgY2FwYWNpdMOpcyBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkxlIHDDqXJpcGjDqXJpcXVlIMKrwqAlc8Kgwrsgbidlc3QgcGFzIHVuIHN5bnRvbmlzZXVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIkltcG9zc2libGUgZOKAmW9idGVuaXIgdW4gZmx1eCByYWRpbyBkZXB1aXMgbGUgcMOpcmlwaMOpcmlxdWUgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6lmaW5pciBs4oCZZW50csOpZSAlZCBzdXIgbGUgcMOpcmlwaMOpcmlxdWUgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHNvdXJkaW5lIGR1IHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlhbGxvdWVyIGxhIG3DqW1vaXJlIG7DqWNlc3NhaXJlLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlhbGxvdWVyIGxhIG3DqW1vaXJlIG7DqWNlc3NhaXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iTGUgY29udmVydGlzc2V1ciBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IG5lIHByZW5kIGVuIGNoYXJnZSBhdWN1biBmb3JtYXQgIgotImTigJllbnRyw6llIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iTGUgY29udmVydGlzc2V1ciBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IG5lIHByZW5kIGVuIGNoYXJnZSBhdWN1biBmb3JtYXQgZGUgIgotInNvcnRpZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkzigJllbmNvZGV1ciBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IG5lIHByZW5kIGVuIGNoYXJnZSBhdWN1biBmb3JtYXQgZOKAmWVudHLDqWUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iTOKAmWVuY29kZXVyIGR1IHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsgbmUgcHJlbmQgZW4gY2hhcmdlIGF1Y3VuIGZvcm1hdCBkZSBzb3J0aWUiCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiw4ljaGVjIGRlIGTDqW1hcnJhZ2UgZHUgcHJvY2Vzc3VzIGRlIGTDqWNvZGFnZS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIsOJY2hlYyBkdSB0cmFpdGVtZW50IGRlIGZyYW1lLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSJFcnJldXIgZGUgcsOpY3Vww6lyYXRpb24gZGVzIGNhcGFjaXTDqXMgcG91ciBsZSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7wqA6IGNlIG7igJllc3QgIgotInBhcyB1biBwaWxvdGUgdjRsMi4gVsOpcmlmaWV6IHNpIGPigJllc3QgdW4gcGlsb3RlIHY0bDEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIGF0dHJpYnV0cyBkZSBs4oCZZW50csOpZSAlZCBkdSBww6lyaXBow6lyaXF1ZSAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsZXMgcGFyYW3DqHRyZXMgZHUgc3ludG9uaXNldXIgJWQgZHUgcMOpcmlwaMOpcmlxdWUgIgotIsKrwqAlc8KgwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSBub3JtZSBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIGF0dHJpYnV0cyBkZSBjb250csO0bGUgZHUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBk4oCZaWRlbnRpZmllciBsZSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJDZWNpIG7igJllc3QgcGFzIHVuIHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBk4oCZb3V2cmlyIGxlIHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsgZW4gbGVjdHVyZSBldCDDqWNyaXR1cmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiTGUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuyBu4oCZZXN0IHBhcyB1biBww6lyaXBow6lyaXF1ZSBk4oCZZW5yZWdpc3RyZW1lbnQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJMZSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IG7igJllc3QgcGFzIHVuIHDDqXJpcGjDqXJpcXVlIGRlIHNvcnRpZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkxlIHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsgbuKAmWVzdCBwYXMgdW4gcMOpcmlwaMOpcmlxdWUgTTJNLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkdXBsaXF1ZXIgbGUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuyBlbiBsZWN0dXJlIGV0IMOpY3JpdHVyZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkxhIGTDqWZpbml0aW9uIGRlIGxhIG5vcm1lIGR1IHDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsgYSDDqWNob3XDqS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSBmcsOpcXVlbmNlIGFjdHVlbGxlIGRlIHN5bnRvbmlzYXRpb24gZHUgIgotInDDqXJpcGjDqXJpcXVlIMKrwqAlc8KgwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJJbXBvc3NpYmxlIGRlIGTDqWZpbmlyIGxhIGZyw6lxdWVuY2UgZGUgc3ludG9uaXNhdGlvbiBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7IMOgICIKLSIlbHXCoEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJJbXBvc3NpYmxlIGTigJlvYnRlbmlyIGxhIGZvcmNlIGR1IHNpZ25hbCBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGEgdmFsZXVyIGR1IGNvbnRyw7RsZSAlZCBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGEgdmFsZXVyICVkIGR1IGNvbnRyw7RsZSAlZCBkdSBww6lyaXBow6lyaXF1ZSDCq8KgJXPCoMK7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbOKAmWVudHLDqWUgYWN0dWVsbGUgZHUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuy4gQ+KAmWVzdCBwZXV0LSIKLSLDqnRyZSB1biBww6lyaXBow6lyaXF1ZSByYWRpbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSBzb3J0aWUgYWN0dWVsbGUgZHUgcMOpcmlwaMOpcmlxdWUgwqvCoCVzwqDCuy4gQ+KAmWVzdCAiCi0icGV1dC3DqnRyZSB1biBww6lyaXBow6lyaXF1ZSByYWRpbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqWZpbmlyIGxhIHNvcnRpZSAlZCBkdSBww6lyaXBow6lyaXF1ZSAlcy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0iTGEgbW9kaWZpY2F0aW9uIGRlIGxhIHLDqXNvbHV0aW9uIGF1IGNvdXJzIGRlIGzigJlleMOpY3V0aW9uIG7igJllc3QgcGFzIGVuY29yZSAiCi0icHJpc2UgZW4gY2hhcmdlLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmb25jdGlvbm5lciBzYW5zIGhvcmxvZ2UiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkVycmV1ciBkdSBmbHV4IGRlIGRvbm7DqWVzIGludGVybmUuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiRXJyZXVyIGR1IGZsdXggZGUgZG9ubsOpZXMgaW50ZXJuZS4iCmRpZmYgLS1naXQgYS9wby9nbC5nbW8gYi9wby9nbC5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMjA0ZTIuLjAwMDAwMDAKLS0tIGEvcG8vZ2wuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vZ2wucG8gYi9wby9nbC5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY2NGQ0Zi4uMDAwMDAwMAotLS0gYS9wby9nbC5wbworKysgL2Rldi9udWxsCkBAIC0xLDkxMyArMCwwIEBACi0jIEdhbGljaWFuIHRyYW5zbGF0aW9uIG9mIGdzdC1wbHVnaW5zLWdvb2QuCi0jIENvcHlyaWdodCAoQykgMjAwOSBnc3QtcGx1Z2lucy1nb29kJ3MgQ09QWVJJR0hUIEhPTERFUgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBGcmFuIERpw6lndWV6IDxmcmFuZGllZ3VlekB1YnVudHUuY29tPiwgMjAwOSwgMjAxMCwgMjAxMS4KLSMgRnJhbiBEaWVndWV6IDxmcmFuZGllZ3VlekBnbm9tZS5vcmc+LCAyMDEyLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjAuM1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTEyLTE1IDAzOjQ2KzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEZyYW4gRGllZ3VleiA8ZnJhbmRpZWd1ZXpAdWJ1bnR1LmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBHYWxpY2lhbiA8cHJveGVjdG9AdHJhc25vLm5ldD5cbiIKLSJMYW5ndWFnZTogZ2xcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLSJYLUdlbmVyYXRvcjogVmlydGFhbCAwLjcuMVxuIgotIlgtUHJvamVjdC1TdHlsZTogZ25vbWVcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gZGVzY29kaWZpY2FyIGEgaW1heGUgSlBFRyIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAiwqslc8K7IHBvciDCqyVzwrsiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgY29uZWN0YXJzZSBhbyBzZXJ2aWRvciIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJObyBleGlzdGUgdW4gVVJMIGVzdGFiZWxlY2lkby4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiTyBzZXJ2aWRvciBub24gYWRtaXRlIGEgYnVzY2EuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIHJlc29sdmVyIG8gbm9tZSBkbyBzZXJ2aWRvci4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBlc3RhYmVsZWNlciBhIGNvbmV4acOzbiBjbyBzZXJ2aWRvci4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGZhbGxvIGRlIGNvbmZpZ3VyYWNpw7NuIGRhIGNvbmV4acOzbiBzZWd1cmEuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gZGUgcmVkZSBvdSBvIHNlcnZpZG9yIHBlY2hvdSBhIGNvbmV4acOzbiBkZSBmb3JtYSAiCi0iaW5lc3BlcmFkYS4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIk8gc2Vydmlkb3IgZW52aW91IGRhdG9zIGVycsOzbmVvcy4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIk8gYXVkaW8gbm9uIGV4aXN0ZSBvdSBub24gw6kgdsOhbGlkbywgbyBmbHV4byBBVkkgZXN0w6EgY29ycm9tcGlkby4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIkVzdGUgZmljaGVpcm8gbm9uIGNvbnTDqW4gbmluZ8O6biBmbHV4byByZXByb2R1Y8OtYmVsLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRXN0ZSBmaWNoZWlybyDDqSBpbmNvcnJlY3RvIGUgbm9uIHBvZGUgcmVwcm9kdWNpcnNlLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkVzdGUgZmljaGVpcm8gZXN0w6EgZGFuYWRvIGUgbm9uIHBvZGUgcmVwcm9kdWNpcnNlLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiVGFtYcOxbyBhdG9tIG5vbiB2w6FsaWRvLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRXN0ZSBmaWNoZWlybyBlc3TDoSBpbmNvbXBsZXRvIGUgbm9uIHBvZGUgcmVwcm9kdWNpcnNlLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiRXN0ZSB2w61kZW8gbmVzdGUgZmljaGVpcm8gcG9kZXLDrWEgbm9uIHJlcHJvZHVjaXJzZSBjb3JyZWN0YW1lbnRlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0iRXN0ZSBmaWNoZWlybyBjb250w6luIGRlbWFzaWFkb3MgZmx1eG9zLiBTw7Mgc2UgcmVwcm9kdWNpcsOhIG8gcHJpbWVpcm8gJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk5vbiBzZSBlbmNvbnRyb3UgdW4gZmx1eG8gY29tcGF0w61iZWwuIFBvZGUgcXVlIG5lY2VzaXRlIGluc3RhbGFyIHVuaGEgIgotImV4dGVuc2nDs24gUlRTUCBkZSBHU3RyZWFtZXIgcGFyYSBvcyBmb3JtYXRvcyBkZSBmbHV4byBSZWFsLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIk5vbiBzZSBlbmNvbnRyb3UgdW4gZmx1eG8gY29tcGF0w61iZWwuIFBvZGUgcXVlIG5lY2VzaXRlIHBlcm1pdGlyIG3DoWlzICIKLSJwcm90b2NvbG9zIGRlIHRyYW5zcG9ydGUgb3UgZGUgb3V0cmEgZm9ybWEgcG9kZSBxdWUgbGxlIGZhbHRlIGEgZXh0ZW5zacOzbiAiCi0iY29ycmVjdGEgZGUgUlRTUCBkZSBHU3RyZWFtZXIuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIk5vbiBmb2kgcG9zw61iZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSBzb24gcGFyYSBhIHJlcHJvZHVjacOzbi4gTyBkaXNwb3NpdGl2byAiCi0iZXN0w6Egc2VuZG8gZW1wcmVnYWRvIHBvciBvdXRybyBhcGxpY2F0aXZvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIGRpc3Bvc2l0aXZvIGRlIHNvbi4gVm9zdGVkZSBub24gdGVuIHBlcm1pc29zIHBhcmEgIgotImFicmlyIG8gZGlzcG9zaXRpdm8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk5vbiBmb2kgcG9zw61iZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSBzb24gcGFyYSBhIHJlcHJvZHVjacOzbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIGRpc3Bvc2l0aXZvIGRlIHNvbiBwYXJhIGEgcmVwcm9kdWNpw7NuLiBFc3RhIHZlcnNpw7NuICIKLSJkbyBPcGVuIFNvdW5kIFN5c3RlbSBub24gZXN0w6EgYWRtaXRpZGEgcG9yIGVzdGUgZWxlbWVudG8uIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkVzdGUgZGlzcG9zaXRpdm8gZGUgc29uIG5vbiBhZG1pdGUgYSByZXByb2R1Y2nDs24uIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJFcnJvIGRlIHJlcHJvZHVjacOzbiBkZSBzb24uIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJFc3RlIGRpc3Bvc2l0aXZvIGRlIHNvbiBub24gYWRtaXRlIGEgZ3JhdmFjacOzbi4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJFcnJvIGFvIGdyYXZhciBkbyBkaXNwb3NpdGl2byBkZSBzb24uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIGRpc3Bvc2l0aXZvIGRlIHNvbiBwYXJhIGEgZ3JhdmFjacOzbi4gVm9zdGVkZSBub24gdGVuICIKLSJwZXJtaXNvcyBwYXJhIGFicmlyIG8gZGlzcG9zaXRpdm8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGFicmlyIG8gZGlzcG9zaXRpdm8gZGUgc29uIHBhcmEgYSBncmF2YWNpw7NuLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIk9yaXhlIGRhIGdyYXZhY2nDs24iCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWNyw7Nmb25vIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTGnDsWEgZGUgZW50cmFkYSIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICJDRCBpbnRlcm5vIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIkVudHJhZGEgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiRW50cmFkYSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJFbnRyYWRhIEFVWCAyIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJCdWNsZSBsb2NhbCIKLQotIywgZnV6enkKLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIkJ1Y2xlIGxvY2FsIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJWb2x1bWUiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJHYW5hbmNpYSIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk1vbml0b3IiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICJBbHRvZmFsYW50ZSBpbnRlcm5vIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJDYXNjb3MiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiTGnDsWEgZGUgc2HDrWRhIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICJTYcOtZGEgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIlNhw61kYSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiU2HDrWRhIEFVWCAyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBsZXIgJWQgYnl0ZXMgZGVzZGUgbyBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0iUHJvZHVjaXVzZSB1biBmYWxsbyBhbyBlbnVtZXJhciBvcyBmb3JtYXRvcyBkZSB2w61kZW8gcG9zw61iZWlzIGNvcyBxdWUgbyAiCi0iZGlzcG9zaXRpdm8gwqslc8K7IHBvZGUgcmVwcm9kdWNpciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBtYXBlYXIgb3MgYsO6ZmVyZXMgZG8gZGlzcG9zaXRpdm8gwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICJPIGNvbnRyb2xhZG9yIGRvIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gYWRtaXRlIG8gbcOpdG9kbyBJTyAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJPIGNvbnRyb2xhZG9yIGRvIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gYWRtaXRlIGNhbHF1ZXJhIG3DqXRvZG8gSU8gY2/DsWVjaWRvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBlc3TDoSBvY3VwYWRvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gcG9kZSBjYXB0dXJhciBhICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gcG9kZSBjYXB0dXJhciBvIGZvcm1hdG8gZXNwZWNpZmljYWRvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gYWRtaXRlIGEgY2FwdHVyYSBkZSB2w61kZW8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBvYnRlciBvcyBwYXLDoW1ldHJvcyBwYXJhIG8gZGlzcG9zaXRpdm8gwqslc8K7IgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0iTyBkaXNwb3NpdGl2byBkZSB2w61kZW8gbm9uIGFjZXB0YSBhIG5vdmEgY29uZmlndXJhY2nDs24gZGUgdGF4YSBkZSBtYXJjb3MuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIiIKLSJPIGRpc3Bvc2l0aXZvIGRlIHbDrWRlbyBub24gYWNlcHRhIGEgbm92YSBjb25maWd1cmFjacOzbiBkZSB0YXhhIGRlIG1hcmNvcy4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIk8gY29udHJvbGFkb3IgZG8gZGlzcG9zaXRpdm8gwqslc8K7IG5vbiBhZG1pdGUgbyBtw6l0b2RvIElPICVkIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIk8gY29udHJvbGFkb3IgZG8gZGlzcG9zaXRpdm8gwqslc8K7IG5vbiBhZG1pdGUgbyBtw6l0b2RvIElPICVkIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIGRlIHbDrWRlbyBub24gcG9kZSBjcmVhciB1biBwb29sIGRlIGLDumZlci4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIGRlIHbDrWRlbyBub24gcG9kZSBjcmVhciB1biBwb29sIGRlIGLDumZlci4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gYW8gb2J0ZXIgYXMgY29uZmlndXJhY2nDs25zIGRvIHNpbnRvbml6YWRvciAlZCBubyAiCi0iZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gbGVyIGFzIGNhcGFjaWRhZGVzIHBhcmEgbyBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byDCqyVzwrsgbm9uIMOpIHVuIHNpbnRvbml6YWRvci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGZhbGxvIGFvIG9idGVyIGEgZW50cmFkYSBkbyByYWRpbyBubyBkaXNwb3NpdGl2byAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJQcm9kdWNpdXNlIHVuIGZhbGxvIGFvIGVzdGFiZWxlY2VyIGEgZW50cmFkYSAlZCBubyBkaXNwb3NpdGl2byAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gYW8gY2FtYmlhciBvIGVzdGFkbyBkZSBlbm11ZGVjaWRvIHBhcmEgbyBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJPIGNvbnRyb2xhZG9yIGRvIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gYWRtaXRlIG8gbcOpdG9kbyBJTyAlZCIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJPIGRpc3Bvc2l0aXZvIGRlIHbDrWRlbyBub24gYWNlcHRhIGEgbm92YSBjb25maWd1cmFjacOzbiBkZSB0YXhhIGRlIG1hcmNvcy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iTyBkaXNwb3NpdGl2byBkZSB2w61kZW8gbm9uIGFjZXB0YSBhIG5vdmEgY29uZmlndXJhY2nDs24gZGUgdGF4YSBkZSBtYXJjb3MuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJPIGRpc3Bvc2l0aXZvIGRlIHbDrWRlbyBub24gYWNlcHRhIGEgbm92YSBjb25maWd1cmFjacOzbiBkZSB0YXhhIGRlIG1hcmNvcy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZXJybyBhbyBkZXNjb2RpZmljYXIgYSBpbWF4ZSBKUEVHIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iUHJvZHVjaXVzZSB1biBlcnJvIGFvIG9idGVyIGFzIGNhcGFjaWRhZGVzIGRvIGRpc3Bvc2l0aXZvIMKrJXPCuzogTm9uIMOpIHVuICIKLSJjb250cm9sYWRvciB2NGwyLiBDb21wcm9iZSBzZSDDqSB1biBjb250cm9sYWRvciB2NGwxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gYW8gY29uc3VsdGFyIG9zIGF0cmlidXRvcyBkZSBlbnRyYWRhICVkIG5vIGRpc3Bvc2l0aXZvICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gYW8gY29uZmlndXJhciBvIHNpbnRvbml6YWRvciAlZCBubyBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNvbnN1bHRhciBhIG5vcm1hIG5vIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gYW8gb2J0ZXIgb3MgYXRyaWJ1dG9zIGRlIGNvbnRyb2wgZG8gZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGlkZW50aWZpY2FyIG8gZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJFc3RlIG5vbiDDqSB1biBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIGRpc3Bvc2l0aXZvIMKrJXPCuyBwYXJhIGxlY3R1cmEgZSBlc2NyaXR1cmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byDCqyVzwrsgbm9uIMOpIHVuIGRpc3Bvc2l0aXZvIGRlIGNhcHR1cmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gw6kgdW4gZGlzcG9zaXRpdm8gZGUgY2FwdHVyYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gw6kgdW4gZGlzcG9zaXRpdm8gZGUgY2FwdHVyYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOb24gZm9pIHBvc8OtYmVsIGFicmlyIG8gZGlzcG9zaXRpdm8gwqslc8K7IHBhcmEgbGVjdHVyYSBlIGVzY3JpdHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZmFsbG8gYW8gZXN0YWJlbGVjZXIgYSBub3JtYSBubyBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIlByb2R1Y2l1c2UgdW4gZmFsbG8gIGFvIG9idGVyIGEgZnJlY3VlbmNpYSBhY3R1YWwgZG8gc2ludG9uaXphZG9yIHBhcmEgbyAiCi0iZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0iUHJvZHVjaXVzZSB1biBlcnJvIGFvIGVzdGFiZWxlY2VyIGEgZnJlY3VlbmNpYSBhY3R1YWwgZG8gc2ludG9uaXphZG9yIHBhcmEgbyAiCi0iZGlzcG9zaXRpdm8gwqslc8K7IGEgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iUHJvZHVjaXVzZSB1biBlcnJvIGFvIG9idGVyIGEgcG90ZW5jaWEgZG8gc2luYWwgcGFyYSBvIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGVycm8gYW8gb2J0ZXIgbyB2YWxvciBwYXJhIG8gY29udHJvbCAlZCBkbyBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iUHJvZHVjaXVzZSB1biBmYWxsbyBhbyBlc3RhYmVsZWNlciBvIHZhbG9yICVkcyBwYXJhIG8gY29udHJvbCAlZCBkbyAiCi0iZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIlByb2R1Y2l1c2UgdW4gZmFsbG8gYW8gb2J0ZXIgYSBlbnRyYWRhIGFjdHVhbCBubyBkaXNwb3NpdGl2byDCqyVzwrsuIENpY8OhaXMgIgotInNleGEgdW4gZGlzcG9zaXRpdm8gZGUgcmFkaW8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJQcm9kdWNpdXNlIHVuIGZhbGxvIGFvIG9idGVyIGEgZW50cmFkYSBhY3R1YWwgbm8gZGlzcG9zaXRpdm8gwqslc8K7LiBRdWl6YWlzICIKLSJzZXhhIHVuIGRpc3Bvc2l0aXZvIGRlIHJhZGlvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIlByb2R1Y2l1c2UgdW4gZmFsbG8gYW8gZXN0YWJlbGVjZXIgYSBzYcOtZGEgJWQgbm8gZGlzcG9zaXRpdm8gJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiQcOtbmRhIG5vbiBzZSBhZG1pdGUgbyBjYW1iaW8gZGUgcmVzb2x1Y2nDs24gZHVyYW50ZSBhIHJlcHJvZHVjacOzbi4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIk5vbiDDqSBwb3PDrWJlbCBvcGVyYXIgc2VuIHJlbG94byIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIG5vIGZsdXhvIGRlIGRhdG9zIGludGVybm8uIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGludGVybm8gbm8gZmx1eG8gZGUgZGF0b3MuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJPIGRpc3Bvc2l0aXZvIMKrJXPCuyBub24gYWRtaXRlIGEgY2FwdHVyYSBkZSB2w61kZW8uIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAiTm9uIGZvaSBwb3PDrWJlbCBlc3RhYmVsZWNlciBhIGNvbmV4acOzbiBjbyBzZXJ2aWRvciBkZSBzb24iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgc291bmQgc2VydmVyIGNhcGFiaWxpdGllcyIKLSN+IG1zZ3N0ciAiUHJvZHVjaXVzZSB1biBlcnJvIGFvIGNvbnN1bHRhciBhcyBjYXBhY2lkYWRlcyBkbyBzZXJ2aWRvciBkZSBzb24iCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJCYWl4b3MiCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgIkFndWRvcyIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTaW50ZXRpemFkb3IiCi0KLSN+IG1zZ2lkICJQQ00iCi0jfiBtc2dzdHIgIlBDTSIKLQotI34gbXNnaWQgIlNwZWFrZXIiCi0jfiBtc2dzdHIgIkFsdG9mYWxhbnRlIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAiTGnDsWEgZGUgZW50cmFkYSIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaXN0dXJhZG9yIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICJHcmF2YXIiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJHYW5hbmNpYSBkZSBlbnRyYWRhIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIkdhbmFuY2lhIGRlIHNhw61kYSIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiTGnDsWEgMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAiTGnDsWEgMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTGnDsWEgMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGl4aXRhbCAxIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICJEaXhpdGFsIDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIkRpeGl0YWwgMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJFbnRyYWRhIHRlbMOpZm9ubyIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIHRlbMOpZm9ubyIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWw61kZW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkaW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICIiCi0jfiAiTm9uIGZvaSBwb3PDrWJlbCBhYnJpciBvIGRpc3Bvc2l0aXZvIGRlIHNvbiBwYXJhIGEgc8O6YSB4ZXN0acOzbiBwb2xvICIKLSN+ICJjb250cm9sIGRlIG1pc3R1cmFkby4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiBUaGlzIHZlcnNpb24gb2YgIgotI34gInRoZSBPcGVuIFNvdW5kIFN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOb24gZm9pIHBvc8OtYmVsIGFicmlyIG8gZGlzcG9zaXRpdm8gZGUgc29uIHBhcmEgYSBzw7phIHhlc3Rpw7NuIHBvbG8gIgotI34gImNvbnRyb2wgZGUgbWlzdHVyYWRvLiBFc3RlIGVsZW1lbnRvIG5vbiBhZG1pdGUgZXN0YSB2ZXJzacOzbiBkbyBPcGVuIFNvdW5kICIKLSN+ICJTeXN0ZW0uIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJNZXN0cmUiCi0KLSN+IG1zZ2lkICJGcm9udCIKLSN+IG1zZ3N0ciAiRnJvbnRhbCIKLQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIlRyZXNlaXJvIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiQXVyaWN1bGFyZXMiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIkNlbnRybyIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIkVudm9sdmVudGUiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJMYXRlcmFsIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIEFVWCIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICJQcm9mdW5kaWRhZGUgM0QiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIkNlbnRybyAzRCIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIk1lbGxvcmEgM0QiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbMOpZm9ubyIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICJFbnRyYWRhIGRlIHbDrWRlbyIKLQotI34gbXNnaWQgIkFVWCBJbiIKLSN+IG1zZ3N0ciAiRW50cmFkYSBBVVgiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiR2FuYW5jaWEgZGUgZ3JhdmFjacOzbiIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJHYW5hbmNpYSBkZSBzYcOtZGEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJBdW1lbnRvIGRvIG1pY3LDs2Zvbm8iCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICJEaWFnbsOzc3RpY28iCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICJBdW1lbnRvIGRlIGJhaXhvcyIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICJQb3J0b3MgZGUgcmVwcm9kdWNpw7NuIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIkVudHJhZGEiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTW9uaXRvciBkZSBvcml4ZSIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIlBpdGlkbyBkZSB0ZWNsYWRvIgotCi0jfiBtc2dpZCAiU2ltdWxhdGUgU3RlcmVvIgotI34gbXNnc3RyICJTaW11bGFyIGVzdMOpcmVvIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICJFc3TDqXJlbyIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTb24gZW52b2x2ZW50ZSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiR2FuYW5jaWEgZG8gbWljcsOzZm9ubyIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJBbHRvZmFsYW50ZSBkZSBvcml4ZSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJNaWNyw7Nmb25vIGRlIG9yaXhlIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiSmFjayIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiQ2VudHJvIC8gTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiTWlzdHVyYWRvciBlc3TDqXJlbyIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICJNaXN0dXJhZG9yIG1vbm8iCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIk1pc3R1cmFkb3IgZGUgZW50cmFkYSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWljcsOzZm9ubyAxIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICJNaWNyw7Nmb25vIDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIGRpeGl0YWwiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJFbnRyYWRhIGRpeGl0YWwiCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk3Ds2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIkF1cmljdWxhcmVzIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIk91dHJvIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiTmluZ8O6biIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICJBY2VuZGlkbyIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiQXBhZ2FkbyIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIlNpbGVuY2lhciIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIlLDoXBpZG8iCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiTW9pIGJhaXhvIgotCi0jfiBtc2dpZCAiTG93IgotI34gbXNnc3RyICJCYWl4byIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiTWVkaW8iCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJBbHRvIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJNb2kgYWx0byIKLQotI34gbXNnaWQgIlByb2R1Y3Rpb24iCi0jfiBtc2dzdHIgIlByb2R1Y2nDs24iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJNaWNyw7Nmb25vIGRvIHBhbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICJFbnRyYWRhIGRvIHBhbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJBdXJpY3VsYXJlcyBkbyBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIlNhw61kYSBkbyBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RhZG9yIHZlcmRlIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3Igcm9zYSIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RhZG9yIGF6dWwiCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgYnJhbmNvIgotCi0jfiBtc2dpZCAiQmxhY2sgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RhZG9yIG5lZ3JvIgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgZ3JpcyIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgbGFyYW54YSIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgdmVybWVsbG8iCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RhZG9yIGFtYXJlbG8iCi0KLSN+IG1zZ2lkICJHcmVlbiBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgdmVyZGUgZG8gcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RhZG9yIHJvc2EgZG8gcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RhZG9yIGF6dWwgZG8gcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0YWRvciBicmFuY28gZG8gcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0YWRvciBuZWdybyBkbyBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgZ3JpcyBkbyBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0YWRvciBsYXJhbnhhZG8gcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgdmVybWVsbG8gZG8gcGFuZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdGFkb3IgYW1hcmVsbyBkbyBwYW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiRXhwYW5kaXIgc2HDrWRhIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiUmVkdWNpw7NuIGRlIGNhbmxlcyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgSW5wdXQiCi0jfiBtc2dzdHIgIkVudHJhZGEgZG8gbWlzdHVyYWRvciB2aXJ0dWFsIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBPdXRwdXQiCi0jfiBtc2dzdHIgIlNhw61kYSBkbyBtaXN0dXJhZG9yIHZpcnR1YWwiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJDYW5sZXMgZG8gbWlzdHVyYWRvciB2aXJ0dWFsIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIkZ1bmNpw7NuICVzICVkIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIkZ1bmNpw7NuICVzIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiT2J0w612b3NlIHVuIHRhbWHDsW8gZGUgbWFyY28gZGUgJXUgbm9uIGVzcGVyYWRvIG5vIGx1Z2FyIGRlICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJQcm9kdWNpdXNlIHVuIGVycm8gYW8gbGVyICVkIGJ5dGVzIGRvIGRpc3Bvc2l0aXZvIMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTm9uIMOpIHBvc8OtYmVsIG1ldGVyIG5hIGNvbGEgb3MgYsO6ZmVyZXMgbm8gZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiIgotI34gIlByb2R1Y2l1c2UgdW4gZmFsbG8gYW8gdGVudGFyIG9idGVyIGNhZHJvcyBkZSB2w61kZW8gZG8gZGlzcG9zaXRpdm8gwqslc8K7LiIKLQotI34gbXNnaWQgIkZhaWxlZCBhZnRlciAlZCB0cmllcy4gZGV2aWNlICVzLiBzeXN0ZW0gZXJyb3I6ICVzIgotI34gbXNnc3RyICIiCi0jfiAiUHJvdWNpdXNlIHVuIGZhbGxvIGRlc3BvaXMgZGUgJWQgaW50ZW50b3MuIERpc3Bvc2l0aXZvICVzLiBFcnJvciBkbyAiCi0jfiAic2lzdGVtYTogJXMiCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIGlucHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICJEZXNjcmliZSBvIGVsZW1lbnRvIGRlIGVudHJhZGEgc2VsZWNjaW9uYWRvLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJEZXNjcmliZSBvIGVsZW1lbnRvIGRlIHNhw61kYSBzZWxlY2Npb25hZG8gcGFyYSBhIENvbmZlcmVuY2lhIGRlIEF1ZGlvLyIKLSN+ICJWw61kZW8uIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBvdXRwdXQgZWxlbWVudCBmb3IgTXVzaWMgYW5kIE1vdmllcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJEZXNjcmliZSBvIGVsZW1lbnRvIGRlIHNhw61kYSBzZWxlY2Npb25hZG8gcGFyYSBhIE3DunNpY2EgZSBQZWzDrWN1bGFzLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICJEZXNjcmliZSBvIGVsZW1lbnRvIGRlIHNhw61kYSBzZWxlY2Npb25hZG8uIgotCi0jfiBtc2dpZCAiR1N0cmVhbWVyIGF1ZGlvc2luayBmb3IgQXVkaW8vVmlkZW8gQ29uZmVyZW5jaW5nIgotI34gbXNnc3RyICJHU3RyZWFtZXIgYXVkaW9zaW5rIHBhcmEgYSBDb25mZXJlbmNpYSBkZSBBdWRpby9WaWRlbyIKLQotI34gbXNnaWQgIkdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIE11c2ljIGFuZCBNb3ZpZXMiCi0jfiBtc2dzdHIgIkdTdHJlYW1lciBhdWRpb3NpbmsgcGFyYSBNw7pzaWNhIGUgRmlsbWVzIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcGxheSBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc2luaywgZXNkc2luayBhbmQgYWxzYXNpbmsuIFRoZSBhdWRpb3NpbmsgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBwb2RlIHJlcHJvZHVjaXIgYXVkaW8gZW1wcmVnYW5kbyBjYWxxdWVyYSBuw7ptZXJvIGRlIGVsZW1lbnRvcyAiCi0jfiAiZGUgc2HDrWRhLiBBbGd1bmhhIGVsZWNjacOzbiBwb3PDrWJlbCDDqSBvc3NpbmssIGVzZHNpbmsgZSBhbHNhc2luay4gTyAiCi0jfiAiYXVkaW9zaW5rIHBvZGUgc2VyIHVuIHBpcGVsaW5lIHBhcmNpYWwgbm8gY2FuZG8gZGUgc8OzIHVuIGVsZW1lbnRvIMO6bmljby4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiBwbGF5IHZpZGVvIHVzaW5nIGFueSBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSB4dmltYWdlc2luaywgeGltYWdlc2luaywgc2RsdmlkZW9zaW5rIGFuZCBhYXNpbmsuICIKLSN+ICJUaGUgdmlkZW9zaW5rIGNhbiBiZSBhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBwb2RlIHJlcHJvZHVjaXIgdsOtZGVvIHVzYW5kbyBjYWxxdWVyYSBuw7ptZXJvIGRlIGVsZW1lbnRvcyBkZSAiCi0jfiAic2HDrWRhLiBBcyBwb3PDrWJlaXMgZWxlY2Npw7NucyBzb24geHZpbWFnZXNpbmssIHhpbWFnZXNpbmssIHNkbHZpZGVvc2luayBlICIKLSN+ICJhYXNpbmsuIE8gdmlkZW9zaW5rIHBvZGUgc2VyIHVuIHBpcGVsaW5lIHBhcmNpYWwgbm8gbHVnYXIgZGUgdW4gZWxlbWVudG8gIgotI34gIsO6bmljby4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiBwdXQgdmlzdWFsaXphdGlvbiBwbHVnaW5zIGluIGEgcGlwZWxpbmUgdG8gdHJhbnNmb3JtIGF1ZGlvICIKLSN+ICJzdHJlYW0gaW4gdmlkZW8gZnJhbWVzLiBEZWZhdWx0IGlzIGdvb20gYnV0IG1vcmUgdmlzdWFsaXphdGlvbiBwbHVnaW5zICIKLSN+ICJ3aWxsIGJlIHBvcnRlZCBzb29uLiBUaGUgdmlzdWFsaXphdGlvbiBwbHVnaW4gY2FuIGJlIGEgcGFydGlhbCBwaXBlbGluZSAiCi0jfiAiaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBwb2RlIHBvw7FlciBlbmdhZGlkb3MgZGUgdmlzdWFsaXphY2nDs24gbnVuIHBpcGVsaW5lIHBhcmEgIgotI34gInRyYW5zZm9ybWFyIHVuIGZsdXhvIGRlIGF1ZGlvIGVuIG1hcmNvcyBkZSB2w61kZW8uIFBvciBvbWlzacOzbiDDqSBnb29tIHBlcm8gIgotI34gInByb250byBjb252ZXJ0aXLDoW5zZSBtw6FpcyB2aXN1YWxpemFjacOzbnMuIE8gZW5nYWRpZG8gZGUgdmlzdWFsaXphY2nDs24gIgotI34gInBvZGUgc2VyIHVuIHBpcGVsaW5lIHBhcmNpYWwgbm8gbHVnYXIgZGUgc8OzIHVuIGVsZW1lbnRvLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHJlY29yZCBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIGlucHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSBvc3NzcmMsIGVzZHNyYyBhbmQgYWxzYXNyYy4gVGhlIGF1ZGlvIHNvdXJjZSBjYW4gYmUgIgotI34gImEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIHBvZGUgZ3JhdmFyIGF1ZGlvIHVzYW5kbyBjYWxxdWVyYSBuw7ptZXJvIGRlIGVsZW1lbnRvcyBkZSAiCi0jfiAiZW50cmFkYS4gQWxndW5oYXMgZGFzIHBvc8OtYmVpcyBlbGVjY2nDs25zIHNvbiBvc3NzcmMsIGVzZHNyYyBlIGFsc2FzcmMuIEEgIgotI34gIm9yaXhlIGRvIGF1ZGlvIHBvZGUgc2VyIHVuIHBpcGVsaW5lIHBhcmNpYWwgbm8gbHVnYXIgZGUgdW4gc8OzIGVsZW1lbnRvLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHJlY29yZCB2aWRlbyBmcm9tIGFueSBudW1iZXIgb2YgaW5wdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIHY0bHNyYyBhbmQgdmlkZW90ZXN0c3JjLiBUaGUgdmlkZW8gc291cmNlIGNhbiBiZSBhICIKLSN+ICJwYXJ0aWFsIHBpcGVsaW5lIGluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHU3RyZWFtZXIgcG9kZSBncmF2YXIgYXVkaW8gdXNhbmRvIGNhbHF1ZXJhIG7Dum1lcm8gZGUgZWxlbWVudG9zIGRlICIKLSN+ICJlbnRyYWRhLiBBbGd1bmhhcyBkYXMgcG9zw61iZWlzIGVsZWNjacOzbnMgc29uIHY0bHNyYyBlIHZpZGVvdGVzdHNyYy4gQSAiCi0jfiAib3JpeGUgZG8gYXVkaW8gcG9kZSBzZXIgdW4gcGlwZWxpbmUgcGFyY2lhbCBubyBsdWdhciBkZSB1biBzw7MgZWxlbWVudG8uIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW8gc291cmNlIgotI34gbXNnc3RyICJvcml4ZSBkZSBzb24gZGUgR1N0cmVhbWVyIHByZWRlZmluaWRhIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW9zaW5rIgotI34gbXNnc3RyICJvcml4ZSBkbyBhdWRpb3NpbmsgR1N0cmVhbWVyIHByZWRlZmluaWRhIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlkZW8gc291cmNlIgotI34gbXNnc3RyICJvcml4ZSBkbyB2w61kZW8gZGUgR1N0cmVhbWVyIHByZWRlZmluaWRvIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlkZW9zaW5rIgotI34gbXNnc3RyICJ2aWRlb3NpbmsgZGUgR1N0cmVhbWVyIHByZWRlZmluaWRvIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlzdWFsaXphdGlvbiBwbHVnaW4iCi0jfiBtc2dzdHIgImVuZ2FkaWRvIGRlIHZpc3VhbGl6YWNpw7NuIEdTdHJlYW1lciBwcmVkZWZpbmlkbyIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBBdWRpby9WaWRlbyBDb25mZXJlbmNpbmciCi0jfiBtc2dzdHIgIiIKLSN+ICJkZXNjcmljacOzbiBwYXJhIG8gYXVkaW9zaW5rIEdTdHJlYW1lciBwYXJhIGEgY29uZmVyZW5jaWEgZGUgYXVkaW8vdsOtZGVvIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIEdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIE11c2ljIGFuZCBNb3ZpZXMiCi0jfiBtc2dzdHIgImRlc2NyaWNpw7NuIHBhcmEgbyBhdWRpb3NpbmsgZGUgR1N0cmVhbWVyIHBhcmEgTcO6c2ljYSBlIEZpbG1lcyIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBkZWZhdWx0IEdTdHJlYW1lciBhdWRpb3NpbmsiCi0jfiBtc2dzdHIgImRlc2NyaWNpw7NuIHBhcmEgbyBhdWRpb3NpbmsgZGUgR1N0cmVhbWVyIHByZWRlZmluaWRvIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc3JjIgotI34gbXNnc3RyICJkZXNjcmljacOzbiBwYXJhIG8gYXVkaW9zcmMgZGUgR1N0cmVhbWVyIHByZWRlZmluaWRvIgpkaWZmIC0tZ2l0IGEvcG8vZ3N0LXBsdWdpbnMtZ29vZC0xLjAucG90IGIvcG8vZ3N0LXBsdWdpbnMtZ29vZC0xLjAucG90CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWFlNjdmLi4wMDAwMDAwCi0tLSBhL3BvL2dzdC1wbHVnaW5zLWdvb2QtMS4wLnBvdAorKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0jIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jIEZJUlNUIEFVVEhPUiA8RU1BSUxAQUREUkVTUz4sIFlFQVIuCi0jCi0jLCBmdXp6eQotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjEwLjRcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKLSJMYW5ndWFnZTogXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Q0hBUlNFVFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotIzogZXh0L2phY2svZ3N0amFja2F1ZGlvc2luay5jOjM1NiBleHQvamFjay9nc3RqYWNrYXVkaW9zcmMuYzozNjQKLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotIzogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOjkxNSBleHQvanBlZy9nc3RqcGVnZGVjLmM6MTE4MQotIzogZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOjExOTMgZXh0L2pwZWcvZ3N0anBlZ2RlYy5jOjEyMjIKLSM6IGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoxMjMxIGV4dC9qcGVnL2dzdGpwZWdkZWMuYzoxMjQwCi0jOiBleHQvanBlZy9nc3RqcGVnZGVjLmM6MTI0OAotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSM6IGV4dC9wdWxzZS9wdWxzZXNpbmsuYzozMTI2Ci0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAiIgotCi0jOiBleHQvc2hvdXQyL2dzdHNob3V0Mi5jOjU2NgotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiIgotCi0jOiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOjg5NgotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICIiCi0KLSM6IGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6MTIzNAotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICIiCi0KLSM6IGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6MTI4OAotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiIgotCi0jOiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOjEyOTQKLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiIgotCi0jOiBleHQvc291cC9nc3Rzb3VwaHR0cHNyYy5jOjEyOTkKLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLSM6IGV4dC9zb3VwL2dzdHNvdXBodHRwc3JjLmM6MTMwNwotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIiIKLQotIzogZXh0L3NvdXAvZ3N0c291cGh0dHBzcmMuYzoxMzE0Ci1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9hdmkvZ3N0YXZpbXV4LmM6MTgzMgotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvaXNvbXA0L3F0ZGVtdXguYzo2NjkgZ3N0L2lzb21wNC9xdGRlbXV4LmM6NjczCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9pc29tcDQvcXRkZW11eC5jOjcxOSBnc3QvaXNvbXA0L3F0ZGVtdXguYzo2MjQ2IGdzdC9pc29tcDQvcXRkZW11eC5jOjYzMTMKLSM6IGdzdC9pc29tcDQvcXRkZW11eC5jOjY2MTIKLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2lzb21wNC9xdGRlbXV4LmM6Mjc1MAotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLSM6IGdzdC9pc29tcDQvcXRkZW11eC5jOjM4ODcgZ3N0L2lzb21wNC9xdGRlbXV4LmM6NzM0NAotIzogZ3N0L2lzb21wNC9xdGRlbXV4LmM6NzM1MSBnc3QvaXNvbXA0L3F0ZGVtdXguYzo4MTg1Ci0jOiBnc3QvaXNvbXA0L3F0ZGVtdXguYzo4NjE2IGdzdC9pc29tcDQvcXRkZW11eC5jOjg2MjMKLSM6IGdzdC9pc29tcDQvcXRkZW11eC5jOjExMDA5Ci1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9pc29tcDQvcXRkZW11eC5jOjQxMjkKLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIiIKLQotIzogZ3N0L2lzb21wNC9xdGRlbXV4LmM6NDIwNwotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvaXNvbXA0L3F0ZGVtdXguYzo5NjExCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICIiCi0KLSM6IGdzdC9pc29tcDQvcXRkZW11eC5jOjExMDUwCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLQotIzogZ3N0L3J0c3AvZ3N0cnRzcHNyYy5jOjY0MzcKLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotCi0jOiBnc3QvcnRzcC9nc3RydHNwc3JjLmM6NjQ0MgotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvb3NzNC9vc3M0LXNpbmsuYzo0OTMgc3lzL29zczQvb3NzNC1zb3VyY2UuYzozNTggc3lzL29zcy9nc3Rvc3NzaW5rLmM6Mzg0Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvb3NzNC9vc3M0LXNpbmsuYzo1MDMgc3lzL29zczQvb3NzNC1zb3VyY2UuYzozNjggc3lzL29zcy9nc3Rvc3NzaW5rLmM6MzkxCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLQotIzogc3lzL29zczQvb3NzNC1zaW5rLmM6NTE0IHN5cy9vc3M0L29zczQtc291cmNlLmM6Mzc5IHN5cy9vc3MvZ3N0b3Nzc2luay5jOjM5OQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICIiCi0KLSM6IHN5cy9vc3M0L29zczQtc2luay5jOjUyMyBzeXMvb3NzNC9vc3M0LXNvdXJjZS5jOjM4OQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLQotIzogc3lzL29zczQvb3NzNC1zaW5rLmM6NjQ2Ci1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIiIKLQotIzogc3lzL29zczQvb3NzNC1zaW5rLmM6NjUzCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICIiCi0KLSM6IHN5cy9vc3M0L29zczQtc291cmNlLmM6NTAzCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSM6IHN5cy9vc3M0L29zczQtc291cmNlLmM6NTEwCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvb3NzL2dzdG9zc3NyYy5jOjM3NgotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvb3NzL2dzdG9zc3NyYy5jOjM4NAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmM6MTQ5Ci1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotIzogc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jOjE1NQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMDkKLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICIiCi0KLSM6IHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jOjEyMAotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIiIKLQotIzogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmM6MTIxCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMjIKLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMjMKLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMjQKLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMjUKLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMjYKLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYzoxMjcKLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotIzogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jOjY5Ci1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICIiCi0KLSM6IHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzo3MAotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jOjcxCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmM6NzIKLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICIiCi0KLSM6IHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzo3MwotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmM6NzQKLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmM6NzUKLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIiIKLQotIzogc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jOjc2Ci1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICIiCi0KLSM6IHN5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suYzo3NwotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jOjE2NzgKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MTE3MgotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Mjg5MwotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MjkwMQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MjkwOAotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOjM1Mzggc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOjM1NDkKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MzU1NSBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MzU2NwotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MzU3OAotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MzU5MQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzozNjAyCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MzYxMAotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6MzczMgotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOjM3MzgKLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmM6Mzc0NgotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOjM3NTMKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL2dzdHY0bDJvYmplY3QuYzo0MTgwCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOjQxODYKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jOjQyMDEKLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOjE0MwotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoxNTAKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoxNTcKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL2dzdHY0bDJyYWRpby5jOjE4NAotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmM6MjA3IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzoxMDczCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwycmFkaW8uYzoyNDEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMnNpbmsuYzo2MjAKLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMnNyYy5jOjUzMCBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzo3MDkKLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmM6MTQzCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jOjE1MAotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzoxNDEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmM6MTQ4Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzo3MjMKLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYzo3MzEKLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjk0Ci0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6MTU4Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6MTg5Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjIzNwotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjQxNgotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6NjEwCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjYxNwotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo2MjQKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo2MzEKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo2MzkKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjY0NwotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6Njk5Ci0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo3ODMKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjgyMQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjg2MwotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo4OTcKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6OTMzCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSM6IHN5cy92NGwyL3Y0bDJfY2FsbHMuYzo5NjgKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjEwNDgKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLQotIzogc3lzL3Y0bDIvdjRsMl9jYWxscy5jOjExMDUKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotCi0jOiBzeXMvdjRsMi92NGwyX2NhbGxzLmM6MTEzMAotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICIiCi0KLSM6IHN5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmM6ODM4Ci1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotCi0jOiBzeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jOjg1MgotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvcG8vaHIuZ21vIGIvcG8vaHIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjVjNmM1Li4wMDAwMDAwCi0tLSBhL3BvL2hyLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2hyLnBvIGIvcG8vaHIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNjUxMzYuLjAwMDAwMDAKLS0tIGEvcG8vaHIucG8KKysrIC9kZXYvbnVsbApAQCAtMSw3ODYgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kIHRvIENyb2F0aWFuLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBUb21pc2xhdiBLcnpuYXIgPHRvbWlzbGF2Lmtyem5hckBnbWFpbC5jb20+LCAyMDEyLgotIyBCb8W+aWRhciBQdXRhbmVjIDxib3ppZGFycEB5YWhvby5jb20+LCAyMDE2LgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZC0xLjEwLjBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0xMS0xOSAxMDoyMi0wODAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBCb8W+aWRhciBQdXRhbmVjIDxib3ppZGFycEB5YWhvby5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQ3JvYXRpYW4gPGxva2FsaXphY2lqYUBsaW51eC5ocj5cbiIKLSJMYW5ndWFnZTogaHJcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUJ1Z3M6IFJlcG9ydCB0cmFuc2xhdGlvbiBlcnJvcnMgdG8gdGhlIExhbmd1YWdlLVRlYW0gYWRkcmVzcy5cbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgotIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKLSJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC43LjFcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAi4oCYSmFja+KAmSBwb3NsdcW+aXRlbGogbmlqZSBwcm9uYcSRZW4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIk5pamUgdXNwamVsbyBkZWtvZGlyYXRpIEpQRUcgc2xpa3UiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIuKAmCVz4oCZICjigJglc+KAmSkiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIlNwYWphbmplIG5hIHBvc2x1xb5pdGVsaiBuaWplIG1vZ3XEh2UiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiVVJMIGFkcmVzYSBuaWplIGltZW5vdmFuYS4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiUG9zbHXFvml0ZWxqIG5lIHBvZHLFvmF2YSB0cmHFvmVuamUuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJOaWplIG1vZ3XEh2UgcmF6cmlqZcWhaXRpIGltZSBwb3NsdcW+aXRlbGphLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOaWplIG1vZ3XEh2UgdXNwb3N0YXZpdGkgdmV6dSBzIHBvc2x1xb5pdGVsamVtLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIlVzcG9zdGF2bGphbmplIHNpZ3VybmUgdmV6ZSBuaWplIHVzcGplbG8uIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotIkRvZ29kaWxhIHNlIG1yZcW+bmEgZ3JlxaFrYSwgaWxpIGplIHBvc2x1xb5pdGVsaiBuZW/EjWVraXZhbm8gemF0dm9yaW8gdmV6dS4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIlBvc2x1xb5pdGVsaiBqZSBwb3NsYW8gbmVpc3ByYXZuZSBwb2RhdGtlLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiTmVtYSBhdWRpbyB1bGF6YSBpbGkgamUgbmVpc3ByYXZhbiwgQVZJIHN0cmVhbSDEh2UgYml0aSBpc2t2YXJlbi4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIk92YSBkYXRvdGVrYSBuZSBzYWRyxb5pIG5pamVkYW4gdXBvdHJlYmxqaXZpIHN0cmVhbSAodG9rIHBvZGF0YWthKS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkRhdG90ZWthIGplIG5laXNwcmF2bmEgaSBuZSBtb8W+ZSBzZSByZXByb2R1Y2lyYXRpLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0iT3ZhaiBzdHJlYW0gbmlqZSBtb2d1xIdlIHJlcHJvZHVjaXJhdGkgamVyIGplIGtyaXB0aXJhbiBzIFBsYXlSZWFkeSBEUk0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEYXRvdGVrYSBqZSBpc2t2YXJlbmEgaSBuZSBtb8W+ZSBzZSByZXByb2R1Y2lyYXRpLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiVmVsacSNaW5hIGF0b21hIGplIG5laXNwcmF2bmEuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEYXRvdGVrYSBqZSBuZXBvdHB1bmEgaSBuZSBtb8W+ZSBzZSByZXByb2R1Y2lyYXRpLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiVmlkZW8gaXogb3ZlIGRhdG90ZWtlIHNlIG1vxb5kYSBuZcSHZSBpc3ByYXZubyByZXByb2R1Y2lyYXRpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0iVSBvdm9qIGRhdG90ZWNpIGltYSBwcmV2acWhZSBzdHJlYW1vdmEgKHN0cmVhbXMpLiBTYW1vIHBydmloICVkIMSHZSBzZSAiCi0icmVwcm9kdWNpcmF0aSIKLQotIyBodHRwczovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvZG9jdW1lbnRhdGlvbi9ydHAuaHRtbAotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iTmlqZWRhbiBwb2Ryxb5hbmkgc3RyZWFtIG5pamUgbmHEkWVuLiBNb8W+ZGEgxIdldGUgbW9yYXRpIGluc3RhbGlyYXRpIEdTdHJlYW1lciAiCi0iUlRTUCBkb2RhdG5pIHBsdWdpbiB6YSBSZWFsIG1lZGlqc2tlIHN0cmVhbW92ZS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJOaWplZGFuIHBvZHLFvmFuaSBzdHJlYW0gbmlqZSBuYcSRZW4uIE1vxb5kYSDEh2V0ZSBtb3JhdGkgZG9wdXN0aXRpIHZpxaFlICIKLSJwcmlqZW5vc25paCBwcm90b2tvbGEgaWxpIG1vxb5kYSB2YW0gbmVkb3N0YWplIG9kZ292YXJhanXEh2kgR1N0cmVhbWVyIFJUU1AgIgotImRvZGF0bmkgcGx1Z2luLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJBdWRpb3VyZcSRYWogbmlqZSBtb2d1xIdlIG90dm9yaXRpIHphIHJlcHJvZHVrY2lqdS4gVXJlxJFhaiB0cmVudXRhxI1ubyBrb3Jpc3RpICIKLSJuZWthIGRydWdhIGFwbGlrYWNpamEuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJBdWRpb3VyZcSRYWogbmlqZSBtb2d1xIdlIG90dm9yaXRpIHphIHJlcHJvZHVrY2lqdS4gTmVtYXRlIGRvcHXFoXRlbmplIHphICIKLSJvdHZhcmFuamUgdXJlxJFhamEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIkF1ZGlvdXJlxJFhaiBuaWplIG1vZ3XEh2Ugb3R2b3JpdGkgemEgcmVwcm9kdWtjaWp1LiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJBdWRpb3VyZcSRYWogbmlqZSBtb2d1xIdlIG90dm9yaXRpIHphIHJlcHJvZHVrY2lqdS4gT3ZhaiBlbGVtZW50IG5lIHBvZHLFvmF2YSAiCi0ib3Z1IGluYcSNaWN1IE9wZW4gU291bmQgU3lzdGVtLiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJPdmFqIGF1ZGlvdXJlxJFhaiBuZSBwb2Ryxb5hdmEgcmVwcm9kdWtjaWp1LiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiR3JlxaFrYSB1IGF1ZGlvIHJlcHJvZHVrY2lqaS4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIk92YWogYXVkaW91cmXEkWFqIG5lIHBvZHLFvmF2YSBzbmltYW5qZS4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJHcmXFoWthIHNuaW1hbmphIHMgYXVkaW91cmXEkWFqYS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJBdWRpb3VyZcSRYWogbmlqZSBtb2d1xIdlIG90dm9yaXRpIHphIHNuaW1hbmplLiBOZW1hdGUgZG9wdcWhdGVuamUgemEgb3R2YXJhbmplICIKLSJ1cmXEkWFqYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkF1ZGlvdXJlxJFhaiBuaWplIG1vZ3XEh2Ugb3R2b3JpdGkgemEgc25pbWFuamUuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIkNvcmVBdWRpbyB1cmXEkWFqIG5pamUgcHJvbmHEkWVuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICJDb3JlQXVkaW8gdXJlxJFhaiBuaWplIG1vZ3XEh2Ugb3R2b3JpdGkiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJJenZvciBzbmltYW5qYSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9uIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTGluaWpza2kgdWxheiIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICJJbnRlcm5pIENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIHVsYXoiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiQVVYIDEgdWxheiIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJBVVggMiB1bGF6IgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIktvZGVrLXBvdnJhdG5hIHBldGxqYSIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiU3VuVlRTLXBvdnJhdG5hIHBldGxqYSIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiR2xhc25vxIdhIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiUG9qYcSNYW5qZSIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk5hZHpvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIlVncmHEkWVuaSB6dnXEjW5payIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiU2x1xaFhbGljYSIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJMaW5panNraSBpemxheiIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgaXpsYXoiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIkFVWCAxIGl6bGF6IgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICJBVVggMiBpemxheiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJHcmXFoWthIMSNaXRhbmphICVkIGJhanRvdmEgcyB1cmXEkWFqYSDigJglc+KAmS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSJOaWplIHVzcGplbG8gbmFicm9qYXRpIHN2ZSBtb2d1xIdlIHZpZGVvIGZvcm1hdGUgcyBrb2ppbWEgdXJlxJFhaiDigJglc+KAmSBtb8W+ZSAiCi0icmFkaXRpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJOaWplIG1vZ3XEh2UgcHJlc2xpa2F0aSAobWFwKSBtZcSRdXNwcmVtbmlrZSBpeiB1cmXEkWFqYSDigJglc+KAmSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiVXByYXZsamHEjWtpIHByb2dyYW0gdXJlxJFhamEg4oCYJXPigJkgbmUgcG9kcsW+YXZhIElPIG1ldG9kdSAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJVcHJhdmxqYcSNa2kgcHJvZ3JhbSB1cmXEkWFqYSDigJglc+KAmSBuZSBwb2Ryxb5hdmEgbmlqZWRudSBwb3puYXR1IElPIG1ldG9kdS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiVXJlxJFhaiDigJglc+KAmSBqZSB6YXV6ZXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIlVyZcSRYWog4oCYJXPigJkgbmUgbW/FvmUgc25pbWF0aSBzIHJhemx1xI1pdm9zdGkgb2QgJWR4JWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIlVyZcSRYWog4oCYJXPigJkgbmUgbW/FvmUgc25pbWF0aSB1IHNwZWNpZmljaXJhbm9tIGZvcm1hdHUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIkRldmljZSDigJglc+KAmSBuZSBwb2Ryxb5hdmEgcHJla2ludXRlIHJhdm5pbmUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJQYXJhbWV0cmUgdXJlxJFhamEg4oCYJXPigJkgbmlqZSBtb2d1xIdlIGRvYml0aSIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmlkZW91cmXEkWFqIG5pamUgcHJpaHZhdGlvIG5vdnUgZnJla3ZlbmNpanUgc2xpa2EgKGlsaSBwb2x1c2xpa2EpLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvdXJlxJFhaiBuaWplIHByZWRvxI1pbyBpemxhem5pIGZvcm1hdC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiVmlkZW91cmXEkWFqIGplIHV6dnJhdGlvIHMgbmVpc3ByYXZuaW0gZGltZW56aWphbWEuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJWaWRlb3VyZcSRYWoga29yaXN0aSBuZXBvZHLFvmFudSBtZXRvZHUgcG9sdXNsaWthIChwcm9yZWQgaSBmcmVrdmVuY2lqdSkuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvdXJlxJFhaiBrb3Jpc3RpIG5lcG9kcsW+YW5pIGZvcm1hdCBwaWtzZWxhLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJOaWplIHVzcGplbG8ga29uZmlndXJpcmF0aSBpbnRlcm51IHphbGlodSBtZcSRdXNwcmVtbmlrYS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIlZpZGVvdXJlxJFhaiBuaWplIHByZWRsb8W+aW8gbmlqZWRudSB2ZWxpxI1pbnUgbWXEkXVzcHJlbW5pa2EuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiTmVtYSBzZSBvZCBuaWt1ZGEgdXZlc3RpIOKAmGRvd25zdHJlYW3igJkgemFsaWhhLiIKLQotIyB0dW5lciA+IMWhdGVsYW5qZSBmcmVrdmVuY2lqZSwgbWlqZW5qYW5qZSAoYmlyYW5qZSkga2FuYWxhCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOaWplIHVzcGplbG8gZG9iaXRpIHBvc3RhdmtlIHR1bmVyYSAlZCBuYSB1cmXEkWFqIOKAmCVz4oCZLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJHcmXFoWthIHByaSBkb2JpdmFuanUgcG9kYXRha2EgbyBtb2d1xIdub3N0aW1hIHVyZcSRYWphIOKAmCVz4oCZLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIlVyZcSRYWog4oCYJXPigJkgbmlqZSB0dW5lci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJOaWplIHVzcGplbG8gZG9iaXRpIHJhZGlqc2tpIHVsYXogbmEgdXJlxJFhanUg4oCYJXPigJkuICIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIk5pamUgdXNwamVsbyBwb3N0YXZpdGkgdWxheiAlZCBuYSB1cmXEkWFqICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmlqZSB1c3BqZWxvIHByb21pamVuaXRpIHN0YXR1cyBtdXRlIChadsO7ayAoZGEvbmUpIHphIHVyZcSRYWog4oCYJXPigJkuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJOaWplIHVzcGplbG8gaXpkdm9qaXRpIHBvdHJlYm51IG1lbW9yaWp1LiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJOaWplIHVzcGplbG8gZG9kaWplbGl0aSBwb3RyZWJudSBtZW1vcmlqdS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiS29udmVydGVyIG5hIHVyZcSRYWp1ICVzIG5lbWEgcG9kcsW+YW5pIHVsYXpuaSBmb3JtYXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvbnZlcnRlciBuYSB1cmXEkWFqdSAlcyBuZW1hIHBvZHLFvmFuaSBpemxhem5pIGZvcm1hdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiS29kZXIgbmEgdXJlxJFhanUgJXMgbmVtYSBwb2Ryxb5hbmkgdWxhem5pIGZvcm1hdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvZGVyIG5hIHVyZcSRYWp1ICVzIG5lbWEgcG9kcsW+YW5pIGl6bGF6bmkgZm9ybWF0IgotCi1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIk5pamUgdXNwamVsbyB6YXBvxI1ldGkgZGVrb2RpcmFuamUgbml0aSAodGhyZWFkKS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIk5pamUgdXNwamVsbyBvYnJhZGl0aSBzbGlrdSAocG9sdXNsaWt1KS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iR3JlxaFrYSBwcmkgZG9iaXZhbmphIG1vZ3XEh25vc3RpIHphIHVyZcSRYWog4oCYJXPigJk6IFRvIG5pamUgdjRsMiB1cHJhdmxqYcSNa2kgIgotInByb2dyYW0uIFByb3ZqZXJpdGUgZGEgbGkgamUgdjRsMSB1cHJhdmxqYcSNa2kgcHJvZ3JhbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICJOaWplIHVzcGplbG8gaXNwaXRhdGkgc3ZvanN0dmEgdWxhemEgJWQgdXJlxJFhamEgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmlqZSB1c3BqZWxvIGRvYml0aSBwb3N0YXZrZSB0dW5lcmEgJWQgdXJlxJFhamEg4oCYJXPigJkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmlqZSB1c3BqZWxvIGlzcGl0YXRpIG5vcm11IChzdGFuZGFyZCkgbmEgdXJlxJFhanUg4oCYJXPigJkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOaWplIHVzcGplbG8gZG9iaXRpIHVwcmF2bGphxI1rYSBzdm9qc3R2YSB1cmXEkWFqYSDigJglc+KAmS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmUgbW/FvmUgc2UgaWRlbnRpZmljaXJhdGkgdXJlxJFhaiDigJglc+KAmS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiT3ZvIG5pamUgdXJlxJFhaiDigJglc+KAmS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJVcmXEkWFqIOKAmCVz4oCZbmlqZSBtb2d1xIdlIG90dm9yaXRpIHphIMSNaXRhbmplIGkgcGlzYW5qZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJVcmXEkWFqIOKAmCVz4oCZIG5pamUgdXJlxJFhaiB6YSBzbmltYW5qZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIlVyZcSRYWog4oCYJXPigJkgbmlqZSBpemxhem5pIHVyZcSRYWouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJVcmXEkWFqIOKAmCVz4oCZIG5pamUgTTJNIHVyZcSRYWouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJVcmXEkWFqIOKAmCVz4oCZbmlqZSBtb2d1xIdlIGR1cGxpY2lyYXRpIHphIMSNaXRhbmplIGkgcGlzYW5qZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pamUgdXNwamVsbyBwb3N0YXZpdGkgbm9ybXUgKHN0YW5kYXJkKSB6YSB1cmXEkWFqIOKAmCVz4oCZLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pamUgdXNwamVsbyBkb2JpdGkgdHJlbnV0YcSNbnUgZnJla3ZlbmNpanUgdHVuZXJhIHphIHVyZcSRYWog4oCYJXPigJkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJOaWplIHVzcGplbG8gcG9zdGF2aXRpIHRyZW51dGHEjW51IGZyZWt2ZW5jaWp1IHR1bmVyYSB6YSB1cmXEkWFqIOKAmCVz4oCZIG5hICVsdSAiCi0iSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pamUgdXNwamVsbyBkb2JpdGkgc25hZ3Ugc2lnbmFsYSB6YSB1cmXEkWFqIOKAmCVz4oCZLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmlqZSB1c3BqZWxvIGRvYml0aSB2cmlqZWRub3N0IHphIGtvbnRyb2x1ICVkIG5hIHVyZcSRYWp1IOKAmCVz4oCZLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmlqZSB1c3BqZWxvIHBvc3Rhdml0aSB2cmlqZWRub3N0ICVkIHphIGtvbnRyb2x1ICVkIG5hIHVyZcSRYWp1IOKAmCVz4oCZLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk5pamUgdXNwamVsbyBkb2JpdGkgdHJlbnV0YcSNbmkgdWxheiBuYSB1cmXEkWFqdSDigJglc+KAmS4gTW/FvmRhIGplIHRvIHJhZGlvdXJlxJFhaiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iTmlqZSB1c3BqZWxvIGRvYml0aSB0cmVudXRhxI1uaSBpemxheiBuYSB1cmXEkWFqdSDigJglc+KAmS4gTW/FvmRhIGplIHRvIHJhZGlvdXJlxJFhaiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJOaWplIHVzcGplbG8gcG9zdGF2aXRpIGl6bGF6ICVkIG5hIHVyZcSRYWogJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiUHJvbWplbmEgcmV6b2x1Y2lqZSB1IHRpamVrdSByYWRhIChydW50aW1lKSBqb8WhIG5pamUgcG9kcsW+YW5hLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiTmUgbW9ndSByYWRpdGkgYmV6IHRha3RhIChzYXRhKSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiSW50ZXJuYSBncmXFoWthIHRva2EgKHN0cmVhbSkgcG9kYXRha2EuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiSW50ZXJuYSBncmXFoWthIHByb3Rva2EgcG9kYXRha2EuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAiTmUgbW9ndSBvc3R2YXJpdGkgdmV6dSBwcmVtYSBwb3NsdcW+aXRlbGp1IHp2dWthIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIk5pc2FtIHVzcGlvIGlzcGl0YXRpIG1vZ3XEh25vc3RpIHBvc2x1xb5pdGVsamEgenZ1a2EiCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJOaXNraSIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAiVmlzb2tpIgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlNpbnRldGl6YXRvciIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiWnZ1xI1uaWsiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICJVbGF6bmEgbGluaWphIgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgIkNEIgotCi0jfiBtc2dpZCAiTWl4ZXIiCi0jfiBtc2dzdHIgIk1pa3NlciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiU25pbWFuamUiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJVbGF6bm8gcG9qYcSNYW5qZSIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJJemxhem5vIHBvamHEjWFuamUiCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIkxpbmlqYSAxIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMaW5pamEgMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTGluaWphIDMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIkRpZ2l0YWxuaSAxIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICJEaWdpdGFsbmkgMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXRhbG5pIDMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAiVGVsZWZvbnNraSB1bGF6IgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJUZWxlZm9uc2tpIGl6bGF6IgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlJhZGlvIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLSN+IG1zZ3N0ciAiTmUgbW9ndSBvdHZvcml0aSB6dnXEjW5pIHVyZcSRYWogemEgdXByYXZsamFuamUgbWlrc2Vyb20uIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiTmUgbW9ndSBvdHZvcml0aSB6dnXEjW5pIHVyZcSRYWogemEgdXByYXZsamFuamUgbWlrc2Vyb20uIE92YWogZWxlbWVudCBuZSAiCi0jfiAicG9kcsW+YXZhIG92dSBpbmHEjWljdSBPcGVuIFNvdW5kIFN5c3RlbSBzdXN0YXZhLiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiR2xhdm5pIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIlByZWRuamkiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJTdHJhxb5uamkiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICJTbHXFoWFsaWNlIgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICJTcmVkbmppIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICJMRkUiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAiU3Vycm91bmQiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJCb8SNbmkiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVggaXpsYXoiCi0KLSN+IG1zZ2lkICIzRCBEZXB0aCIKLSN+IG1zZ3N0ciAiM0QgZHViaW5hIgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICIzRCBzcmVkacWhdGUiCi0KLSN+IG1zZ2lkICIzRCBFbmhhbmNlIgotI34gbXNnc3RyICIzRCBkb3B1bmEiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmb24iCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW8gdWxheiIKLQotI34gbXNnaWQgIkFVWCBJbiIKLSN+IG1zZ3N0ciAiQVVYIHVsYXoiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiUG9qYcSNYW5qZSBzbmltYW5qYSIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJQb2phxI1hbmplIGl6bGF6YSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIlBvamHEjWFuamUgbWlrcm9mb25hIgotCi0jfiBtc2dpZCAiRGlhZ25vc3RpYyIKLSN+IG1zZ3N0ciAiRGlqYWdub3N0aWthIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAiUG9qYcSNYW5qZSBuaXNraWgiCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiUG9ydG92aSByZXByb2R1a2NpamUiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAiVWxheiIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICJJenZvciBuYWR6aXJhbmphIgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAiVGlwa292bmnEjWtpIHp2dWsiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsaXJhaiBzdGVyZW8iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIlN0ZXJlbyIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZCB6dnVrIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICJQb2phxI1hbmplIG1pa3JvZm9uYSIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJJenZvciB6dnXEjW5pa2EiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiSXp2b3IgbWlrcm9mb25hIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiUHJpa2xqdcSNYWsiCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgIlNyZWRuamkgLyBMRkUiCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICJTdGVyZW8gbWlrc2VyIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbm8gbWlrc2VyIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJVbGF6bmkgbWlrc2VyIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICJNaWtyb2ZvbiAxIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICJNaWtyb2ZvbiAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIkRpZ2l0YWxuaSBpemxheiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkRpZ2l0YWxuaSB1bGF6IgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIlNsdcWhYWxpY2UgcyBtaWtyb2Zvbm9tIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIk9zdGFsbyIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgIk5pamVkYW4iCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAiVWtsanXEjWVuIgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICJJc2tsanXEjWVuIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiVXRpxaFhbiIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIkJyem8iCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiVnJsbyBuaXNrYSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiTmlza2EiCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIlNyZWRuamEiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJWaXNva2EiCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIlZybG8gdmlzb2thIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAiUHJvZHVrY2lqc2thIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gbmEgcHJlZG5qb2ogcGxvxI1pIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiTGluaWpza2kgdWxheiBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJTbHXFoWFsaWNlIG5hIHByZWRuam9qIHBsb8SNaSIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgT3V0IgotI34gbXNnc3RyICJMaW5panNraSBpemxheiBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJHcmVlbiBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlplbGVuYSBwcmlrbGp1xI1uaWNhIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlJ1xb5pxI1hc3RhIHByaWtsanXEjW5pY2EiCi0KLSN+IG1zZ2lkICJCbHVlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUGxhdmEgcHJpa2xqdcSNbmljYSIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmlqZWxhIHByaWtsanXEjW5pY2EiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNybmEgcHJpa2xqdcSNbmljYSIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTaXZhIHByaWtsanXEjW5pY2EiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJOYXJhbsSNYXN0YSBwcmlrbGp1xI1uaWNhIgotCi0jfiBtc2dpZCAiUmVkIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ3J2ZW5hIHByaWtsanXEjW5pY2EiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICLFvXV0YSBwcmlrbGp1xI1uaWNhIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJaZWxlbmEgcHJpa2xqdcSNbmljYSBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUnXFvmnEjWFzdGEgcHJpa2xqdcSNbmljYSBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUGxhdmEgcHJpa2xqdcSNbmljYSBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkJpamVsYSBwcmlrbGp1xI1uaWNhIG5hIHByZWRuam9qIHBsb8SNaSIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ3JuYSBwcmlrbGp1xI1uaWNhIG5hIHByZWRuam9qIHBsb8SNaSIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTaXZhIHByaWtsanXEjW5pY2EgbmEgcHJlZG5qb2ogcGxvxI1pIgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTmFyYW7EjWFzdGEgcHJpa2xqdcSNbmljYSBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDcnZlbmEgcHJpa2xqdcSNbmljYSBuYSBwcmVkbmpvaiBwbG/EjWkiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLFvXV0YSBwcmlrbGp1xI1uaWNhIG5hIHByZWRuam9qIHBsb8SNaSIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIlJhxaFpcmVuaSBpemxheiIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIlNtYW5qZW5qZSBicm9qYSBrYW5hbGEiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJVbGF6IHZpcnR1YWxub2cgbWlrc2VyYSIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJJemxheiB2aXJ0dWFsbm9nIG1pa3NlcmEiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJLYW5hbGkgdmlydHVhbG5vZyBtaWtzZXJhIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzICVkIGZ1bmtjaWphIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIGZ1bmtjaWphIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiRG9iaXZlbmEgbmVvxI1la2l2YW5hIHZlbGnEjWluYSBva3ZpcmEgJXUgdW1qZXN0byAldS4iCi0KLSN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIG9uIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiR3JlxaFrYSDEjWl0YW5qYSAlZCBiYWp0b3ZhIG5hIHVyZcSRYWp1IOKAniVz4oCdLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJOaXNhbSB1c3BpbyBkb2RhdGkgdSByZWQgbWXEkXVzcHJlbW5pa2UgdSB1cmXEkWFqIOKAniVz4oCdLiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTmlzYW0gdXNwaW8gcG9rdcWhYXZhanXEh2kgZG9iaXRpIHZpZGVvIG9rdmlyZSBpeiB1cmXEkWFqYSDigJ4lc+KAnS4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiTmlzYW0gdXNwaW8gbmFrb24gJWQgcG9rdcWhYWphLiB1cmXEkWFqICVzLiBncmXFoWthIHN1c3RhdmE6ICVzIgpkaWZmIC0tZ2l0IGEvcG8vaHUuZ21vIGIvcG8vaHUuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODg3NjEyLi4wMDAwMDAwCi0tLSBhL3BvL2h1LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2h1LnBvIGIvcG8vaHUucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZTU4OTcuLjAwMDAwMDAKLS0tIGEvcG8vaHUucG8KKysrIC9kZXYvbnVsbApAQCAtMSw3OTAgKzAsMCBAQAotIyBIdW5nYXJpYW4gdHJhbnNsYXRpb24gZm9yIGdzdC1wbHVnaW5zLWdvb2QuCi0jIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZS4KLSMKLSMgTGFzemxvIER2b3JuaWsgPGR2b3JuaWtAaW52aXRlbC5odT4sIDIwMDQuCi0jIEdhYm9yIEtlbGVtZW4gPGtlbGVtZW5nQGdub21lLmh1PiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxNCwgMjAxNi4KLSMgQmFsw6F6cyDDmnIgPHVyYmFsYXpzQGdtYWlsLmNvbT4sIDIwMTQsIDIwMTUuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDMtMTQgMTg6MzUrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogR2Fib3IgS2VsZW1lbiA8a2VsZW1lbmdAZ25vbWUuaHU+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogSHVuZ2FyaWFuIDx0cmFuc2xhdGlvbi10ZWFtLWh1QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogaHVcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLVJvc2V0dGEtRXhwb3J0LURhdGU6IDIwMDctMDctMjcgMTk6MTg6MTUrMDAwMFxuIgotIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjVcbiIKLSJYLVJvc2V0dGEtRXhwb3J0LURhdGU6IDIwMDctMDctMjcgMTk6MTg6MTUrMDAwMFxuIgotIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiSmFjayBraXN6b2xnw6Fsw7MgbmVtIHRhbMOhbGhhdMOzIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJBIEpQRUcga8OpcCB2aXNzemFmZWp0w6lzZSBtZWdoacO6c3VsdCIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAi4oCeJXPigJ0gZXR0xZFsOiDigJ4lc+KAnSIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBjc2F0bGFrb3puaSBhIGtpc3pvbGfDoWzDs2hveiIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJOaW5jcyBiZcOhbGzDrXR2YSBVUkwuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIkEga2lzem9sZ8OhbMOzIG5lbSB0w6Ftb2dhdGphIGEgdGVrZXLDqXN0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBmZWxvbGRhbmkgYSBraXN6b2xnw6Fsw7MgbmV2w6l0LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOZW0gaG96aGF0w7MgbMOpdHJlIGthcGNzb2xhdCBhIGtpc3pvbGfDoWzDs2hvei4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJBIGJpenRvbnPDoWdvcyBrYXBjc29sYXQga2lhbGFrw610w6FzYSBtZWdoacO6c3VsdC4iCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iSMOhbMOzemF0aSBoaWJhIHTDtnJ0w6ludCwgdmFneSBhIGtpc3pvbGfDoWzDsyB2w6FyYXRsYW51bCBsZXrDoXJ0YSBhIGthcGNzb2xhdG90LiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiQSBraXN6b2xnw6Fsw7MgaGliw6FzIGFkYXRva2F0IGvDvGxkw7Z0dC4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIk5pbmNzIHZhZ3kgw6lydsOpbnl0ZWxlbiBiZW1lbmV0aSBoYW5nLCBheiBBVkktZm9seWFtIHPDqXLDvGx0IGxlc3ouIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJBIGbDoWpsIG5lbSB0YXJ0YWxtYXogbGVqw6F0c3poYXTDsyBhZGF0Zm9seWFtb2thdC4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkEgZsOhamwgbmVtIMOpcnbDqW55ZXMgw6lzIG5lbSBqw6F0c3poYXTDsyBsZS4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotIk5lbSBsZWhldCBsZWrDoXRzemFuaSBhIGZvbHlhbW90LCBtZXJ0IFBsYXlSZWFkeSBEUk0gdGl0a29zw610w6FzIHZhbiByYWp0YS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkEgZsOhamwgc8OpcsO8bHQgw6lzIG5lbSBqw6F0c3poYXTDsyBsZS4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIsOJcnbDqW55dGVsZW4gYXRvbSBtw6lyZXQuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJBIGbDoWpsIG5lbSB0ZWxqZXMgw6lzIG5lbSBqw6F0c3poYXTDsyBsZS4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIkEgZsOhamxiYW4gdGFsw6FsaGF0w7MgdmlkZcOzIGxlaGV0LCBob2d5IG5lbSBqw6F0c3poYXTDsyBsZSBtZWdmZWxlbMWRZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSJBIGbDoWpsIHTDumwgc29rIGFkYXRmb2x5YW1vdCB0YXJ0YWxtYXouIENzYWsgYXogZWxzxZEgJWQga2Vyw7xsIGxlasOhdHN6w6FzcmEuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJOZW0gdGFsw6FsaGF0w7MgdMOhbW9nYXRvdHQgYWRhdGZvbHlhbS4gVGVsZXDDrXRzZSBhIEdTdHJlYW1lciBSVFNQIGLFkXbDrXRtw6lueXQgYSAiCi0iUmVhbCBtZWRpYSBhZGF0Zm9seWFtb2tob3ouIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0iTmVtIHRhbMOhbGhhdMOzIHTDoW1vZ2F0b3R0IGFkYXRmb2x5YW0uIExlaGV0LCBob2d5IHTDtmJiIMOhdHZpdGVsaSBwcm90b2tvbGx0ICIKLSJrZWxsIGVuZ2Vkw6lseWV6bmksIHZhZ3kgaGnDoW55emlrIGEgbWVnZmVsZWzFkSBHU3RyZWFtZXIgUlRTUCBixZF2w610bcOpbnkuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIk5lbSBueWl0aGF0w7MgbWVnIGhhbmdlc3prw7Z6IGEgbGVqw6F0c3rDoXNob3ouIEF6IGVzemvDtnp0IG3DoXNpayBhbGthbG1hesOhcyAiCi0iaGFzem7DoWxqYS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5lbSBueWl0aGF0w7MgbWVnIGhhbmdlc3prw7Z6IGEgbGVqw6F0c3rDoXNob3ouIE5pbmNzIGpvZ29zdWx0c8OhZ2EgYXogZXN6a8O2eiAiCi0ibWVnbnlpdMOhc8OhcmEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk5lbSBueWl0aGF0w7MgbWVnIGhhbmdlc3prw7Z6IGEgbGVqw6F0c3rDoXNob3ouIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIk5lbSBueWl0aGF0w7MgbWVnIGhhbmdlc3prw7Z6IGEgbGVqw6F0c3rDoXNob3ouIEF6IE9wZW4gU291bmQgU3lzdGVtIGV6ZW4gIgotInZlcnppw7Nqw6F0IGF6IGVsZW0gbmVtIHTDoW1vZ2F0amEuIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkV6IGEgaGFuZ2VzemvDtnogbmVtIHTDoW1vZ2F0amEgYSBsZWrDoXRzesOhc3QuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJIYW5nbGVqw6F0c3rDoXNpIGhpYmEuIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJFeiBhIGhhbmdlc3prw7Z6IG5lbSB0w6Ftb2dhdGphIGEgZmVsdsOpdGVsdC4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJIaWJhIGEgaGFuZ2VzemvDtnpyxZFsIHZhbMOzIGZlbHbDqXRlbGtvci4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJOZW0gbnlpdGhhdMOzIG1lZyBoYW5nZXN6a8O2eiBhIGZlbHbDqXRlbGhlei4gTmluY3Mgam9nb3N1bHRzw6FnYSBheiBlc3prw7Z6ICIKLSJtZWdueWl0w6Fzw6FyYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIk5lbSBueWl0aGF0w7MgbWVnIGhhbmdlc3prw7Z6IGEgZmVsdsOpdGVsaGV6LiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICJBIENvcmVBdWRpbyBlc3prw7Z6IG5lbSB0YWzDoWxoYXTDsyIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiQSBDb3JlQXVkaW8gZXN6a8O2eiBuZW0gbnlpdGhhdMOzIG1lZyIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIkZlbHbDqXRlbCBmb3Jyw6FzYSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9uIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiVm9uYWxiZW1lbmV0IgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkJlbHPFkSBDRCIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICJTUERJRiBiZSIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICIxLiBBVVggYmUiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiMi4gQVVYIGJlIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIktvZGVrIHZpc3N6YWNzYXRvbMOhcyIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiU3VuVlRTIHZpc3N6YWNzYXRvbMOhcyIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiSGFuZ2VyxZEiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJFcsWRc8OtdMOpcyIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk1vbml0b3IiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICJCZcOpcMOtdGV0dCBoYW5nc3rDs3LDsyIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiRmVqaGFsbGdhdMOzIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIlZvbmFsa2ltZW5ldCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYga2kiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIjEuIEFVWCBraSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiMi4gQVVYIGtpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkhpYmEgJWQgYsOhanQgb2x2YXPDoXNha29yIGEga8O2dmV0a2V6xZEgZXN6a8O2enLFkWw6IOKAniVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotIkEoeikg4oCeJXPigJ0gZXN6a8O2eiDDoWx0YWwga2V6ZWxoZXTFkSBsZWhldHPDqWdlcyB2aWRlb2Zvcm3DoXR1bW9rIGZlbHNvcm9sw6FzYSAiCi0ic2lrZXJ0ZWxlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmVtIGvDqXBlemhldMWRayBsZSBhKHopIOKAniVz4oCdIGVzemvDtnogcHVmZmVyZWkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIkEoeikg4oCeJXPigJ0gZXN6a8O2eiBpbGxlc3p0xZFwcm9ncmFtamEgbmVtIHTDoW1vZ2F0amEgYSh6KSAlZC4gSU8gbcOzZG90IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiIgotIkEoeikg4oCeJXPigJ0gZXN6a8O2eiBpbGxlc3p0xZFwcm9ncmFtamEgbmVtIHTDoW1vZ2F0IGVneWV0bGVuIGlzbWVydCBJTyBtw7Nkb3Qgc2VtLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJBKHopIOKAniVz4oCdIGVzemvDtnogZm9nbGFsdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiQSh6KSDigJ4lc+KAnSBlc3prw7Z6IG5lbSBrw6lwZXMgZmVsdmVubmkgJWR4JWQgZmVsYm9udMOhc2JhbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiQSh6KSDigJ4lc+KAnSBlc3prw7Z6IG5lbSBrw6lwZXMgZmVsdmVubmkgYSBtZWdhZG90dCBmb3Jtw6F0dW1iYW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiQSh6KSDigJ4lc+KAnSBlc3prw7Z6IG5lbSB0w6Ftb2dhdGphIGEgbmVtIHN6b21zesOpZG9zIHPDrWtva2F0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmVtIGvDqXJoZXTFkWsgbGUgYSh6KSDigJ4lc+KAnSBlc3prw7Z6IHBhcmFtw6l0ZXJlaSIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiQSB2aWRlb2VzemvDtnogbmVtIGZvZ2FkdGEgZWwgYXogw7pqIGvDqXBrb2NrYXNlYmVzc8OpZy1iZcOhbGzDrXTDoXN0LiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIkEgdmlkZW9lc3prw7Z6IG5lbSBzem9sZ8OhbHRhdG90dCBraW1lbmV0aSBmb3Jtw6F0dW1vdC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiQSB2aWRlb2VzemvDtnogw6lydsOpbnl0ZWxlbiBkaW1lbnppw7Nra2FsIHTDqXJ0IHZpc3N6YS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiQSB2aWRlb2VzemvDtnrDtmsgbmVtIHTDoW1vZ2F0b3R0IHbDoWx0b3R0c29yb3MgbcOzZG90IGhhc3puw6FsbmFrLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJBIHZpZGVvZXN6a8O2esO2ayBuZW0gdMOhbW9nYXRvdHQga8OpcHBvbnRmb3Jtw6F0dW1vdCBoYXN6bsOhbG5hay4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBiZcOhbGzDrXRhbmkgYSBiZWxzxZEgcHVmZmVydMOhcm9sw7N0LiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiQSB2aWRlb2VzemvDtnogbmVtIGphdmFzb2x0IHNlbW1pbHllbiBwdWZmZXJtw6lyZXRldC4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICJOaW5jcyBpbXBvcnTDoWzDoXNpIGZvcnLDoXNrw6ludCBoYXN6bsOhbGhhdMOzIGFsw6FyZW5kZWx0IHTDoXJvbMOzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQSh6KSAlZC4gdHVuZXIgYmXDoWxsw610w6Fzw6FuYWsgbGVrw6lyw6lzZSBhKHopIOKAniVz4oCdIGVzemvDtnrDtm4gbWVnaGnDunN1bHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkhpYmEgYSh6KSDigJ4lc+KAnSBlc3prw7Z6IGvDqXBlc3PDqWdlaW5layBsZWvDqXLDqXNla29yLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkEoeikg4oCeJXPigJ0gZXN6a8O2eiBuZW0gdHVuZXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiQSByw6FkacOzYmVtZW5ldCBsZWvDqXLDqXNlIG1lZ2hpw7pzdWx0IGEoeikg4oCeJXPigJ0gZXN6a8O2esO2bi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJBKHopICVkLiBiZW1lbmV0IGJlw6FsbMOtdMOhc2EgbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6w7ZuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQSBuw6ltw610w6FzaSDDoWxsYXBvdCBtw7Nkb3PDrXTDoXNhIG1lZ2hpw7pzdWx0IGEoeikg4oCeJXPigJ0gZXN6a8O2esO2bi4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIk5lbSBzaWtlcsO8bHQgbGVmb2dsYWxuaSBhIHN6w7xrc8OpZ2VzIG1lbcOzcmnDoXQuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIk5lbSBzaWtlcsO8bHQgbGVmb2dsYWxuaSBhIHN6w7xrc8OpZ2VzIG1lbcOzcmnDoXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkEoeikgJXMgZXN6a8O2esO2biBsw6l2xZEgw6F0YWxha8OtdMOzbmFrIG5pbmNzIHTDoW1vZ2F0b3R0IGJlbWVuZXRpIGZvcm3DoXR1bWEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIkEoeikgJXMgZXN6a8O2esO2biBsw6l2xZEgw6F0YWxha8OtdMOzbmFrIG5pbmNzIHTDoW1vZ2F0b3R0IGtpbWVuZXRpIGZvcm3DoXR1bWEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkEoeikgJXMgZXN6a8O2esO2biBsw6l2xZEga8OzZG9sw7NuYWsgbmluY3MgdMOhbW9nYXRvdHQgYmVtZW5ldGkgZm9ybcOhdHVtYSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIkEoeikgJXMgZXN6a8O2esO2biBsw6l2xZEga8OzZG9sw7NuYWsgbmluY3MgdMOhbW9nYXRvdHQga2ltZW5ldGkgZm9ybcOhdHVtYSIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJOZW0gc2lrZXLDvGx0IGVsaW5kw610YW5pIGEgZGVrw7Nkb2zDoXNpIHN6w6FsYXQuIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICJOZW0gc2lrZXLDvGx0IGZlbGRvbGdvem5pIGEga2VyZXRldC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iSGliYSBhKHopIOKAniVz4oCdIGVzemvDtnoga8OpcGVzc8OpZ2VpbmVrIGxla8OpcsOpc2Vrb3IuIEV6IG5lbSBlZ3kgdjRsMiBtZWdoYWp0w7MuICIKLSJFbGxlbsWRcml6emUsIGhvZ3kgbmVtIHY0bDEgbWVnaGFqdMOzLWUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiQSh6KSAlZCBiZW1lbmV0IGF0dHJpYsO6dHVtYWluYWsgbGVrw6lyw6lzZSBtZWdoacO6c3VsdCBhKHopICVzIGVzemvDtnrDtm4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQSh6KSAlZC4gdHVuZXIgYmXDoWxsw610w6Fzw6FuYWsgbGVrw6lyw6lzZSBhKHopIOKAniVz4oCdIGVzemvDtnrDtm4gbWVnaGnDunN1bHQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQSBub3JtYSBsZWvDqXJkZXrDqXNlIG1lZ2hpw7pzdWx0IGEoeikg4oCeJXPigJ0gZXN6a8O2enTFkWwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJBIHZlesOpcmzFkWF0dHJpYsO6dHVtb2sgbGVrw6lyw6lzZSBtZWdoacO6c3VsdCBhKHopIOKAniVz4oCdIGVzemvDtnrDtm4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lbSBhem9ub3PDrXRoYXTDsyBhKHopIOKAniVz4oCdIGVzemvDtnouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkV6IG5lbSBlZ3kgZXN6a8O2ejog4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBvbHZhc8Ohc3JhIMOpcyDDrXLDoXNyYSBtZWdueWl0bmkgYSh6KSDigJ4lc+KAnSBlc3prw7Z6dC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJBKHopIOKAniVz4oCdIGVzemvDtnogbmVtIHLDtmd6w610xZFlc3prw7Z6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiQSh6KSDigJ4lc+KAnSBlc3prw7Z6IG5lbSBraW1lbmV0aSBlc3prw7Z6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiQSh6KSDigJ4lc+KAnSBlc3prw7Z6IG5lbSBNMk0gZXN6a8O2ei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5lbSBzaWtlcsO8bHQgZHVwbGlrw6FsbmkgYSh6KSDigJ4lc+KAnSBlc3prw7Z6dCBvbHZhc8Ohc3JhIMOpcyDDrXLDoXNyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkEgbm9ybWEgYmXDoWxsw610w6FzYSBtZWdoacO6c3VsdCBhKHopIOKAniVz4oCdIGVzemvDtnrDtm4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkEgdHVuZXIgYWt0dcOhbGlzIGZyZWt2ZW5jacOhasOhbmFrIGxla8OpcmRlesOpc2UgbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6dMWRbC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIkEgdHVuZXIgYWt0dcOhbGlzIGZyZWt2ZW5jacOhasOhbmFrIGJlw6FsbMOtdMOhc2EgbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6w7ZuICIKLSIlbHUgSHotcmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkEgamVsZXLFkXNzw6lnIGxla8OpcmRlesOpc2UgbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6w7ZuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQSh6KSAlZC4gdmV6w6lybMWRZWxlbSDDqXJ0w6lrw6luZWsgbGVrw6lyw6lzZSBtZWdoacO6c3VsdCBhKHopIOKAniVz4oCdIGVzemvDtnrDtm4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iQSh6KSAkJTJkIMOpcnTDqWsgYmXDoWxsw610w6FzYSAkJTFkIHZlesOpcmzFkWVsZW1oZXogbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6w7ZuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkF6IGFrdHXDoWxpcyBiZW1lbmV0IGxla8OpcsOpc2UgbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6csWRbC4gTGVoZXQsIGhvZ3kgZXogIgotImVneSByw6FkacOzZXN6a8O2ei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkF6IGFrdHXDoWxpcyBraW1lbmV0IGxla8OpcsOpc2UgbWVnaGnDunN1bHQgYSh6KSDigJ4lc+KAnSBlc3prw7Z6csWRbC4gTGVoZXQsIGhvZ3kgZXogIgotImVneSByw6FkacOzZXN6a8O2ei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiQSh6KSAlZC4ga2ltZW5ldCBiZcOhbGzDrXTDoXNhIG1lZ2hpw7pzdWx0IGEoeikg4oCeJXPigJ0gZXN6a8O2esO2bi4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJBIGZlbGJvbnTDoXMgbcOzZG9zw610w6FzYSBmdXTDoXMga8O2emJlbiBtw6lnIG5lbSB0w6Ftb2dhdG90dC4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIsOTcmEgbsOpbGvDvGwgbGVoZXRldGxlbiBhIG3FsWvDtmTDqXMiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkJlbHPFkSBhZGF0Zm9seWFtLWhpYmEuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiQmVsc8WRIGFkYXRmb2x5YW0taGliYS4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkEoeikg4oCeJXPigJ0gZXN6a8O2eiBuZW0gdMOhbW9nYXRqYSBhIHZpZGVvZmVsdsOpdGVsdCIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIk5lbSBob3poYXTDsyBsw6l0cmUga2FwY3NvbGF0IGEgaGFuZ2tpc3pvbGfDoWzDs2hveiIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICJBIGhhbmdraXN6b2xnw6Fsw7Mga8OpcGVzc8OpZ2VpbmVrIGxla8OpcmRlesOpc2UgbWVnaGnDunN1bHQiCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJCYXNzenVzIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJNYWdhcyIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTemludGV0LiIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiSGFuZ2ZhbCIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIlZvbmFsYmVtZW5ldCIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJLZXZlcsWRIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIjIuIFBDTSIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiRmVsdsOpdGVsIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAiQmUtZXLFkXPDrXTDqXMiCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAiS2ktZXLFkXPDrXTDqXMiCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIjEuIHZvbmFsIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICIyLiB2b25hbCIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiMy4gdm9uYWwiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIjEuIGRpZ2l0w6FsaXMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIjIuIGRpZ2l0w6FsaXMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIjMuIGRpZ2l0w6FsaXMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAiSGFuZy1iZSIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiSGFuZy1raSIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSw6FkacOzIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLSN+IG1zZ3N0ciAiTmVtIG55aXRoYXTDsyBtZWcgaGFuZ2VzemvDtnogYSBrZXZlcsWRdmV6w6lybMWRIGtlemVsw6lzw6loZXouIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiTmVtIG55aXRoYXTDsyBtZWcgaGFuZ2VzemvDtnogYSBrZXZlcsWRdmV6w6lybMWRIGtlemVsw6lzw6loZXouIEF6IE9wZW4gU291bmQgIgotI34gIlN5c3RlbSBlemVuIHZlcnppw7Nqw6F0IGF6IGVsZW0gbmVtIHTDoW1vZ2F0amEuIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJGxZEgaGFuZ2VyxZEiCi0KLSN+IG1zZ2lkICJGcm9udCIKLSN+IG1zZ3N0ciAiRWzDvGxzxZEiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJIw6F0c8OzIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiRsO8bGhhbGxnYXTDsyIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiS8O2esOpcHPFkSIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIlTDqXJoYXTDoXPDuiIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIk9sZGFsc8OzIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiQVVYIGtpIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNEIG3DqWx5IgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICIzRCBrw7Z6w6lwc8WRIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0QgamF2w610w6FzIgotCi0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICJUZWxlZm9uIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZGVvIGJlIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJBVVggYmUiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiRmVsdsOpdGVsZXLFkXPDrXTDqXMiCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAiS2ltZW5ldGVyxZFzw610w6lzIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAiTWlrcm9mb25lcsWRc8OtdMOpcyIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub3N6dGlrYSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkJhc3N6dXNraWVtZWzDqXMiCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiTGVqw6F0c3rDoXNpIHBvcnRvayIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICJCZW1lbmV0IgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIk1vbml0b3IgZm9ycsOhc2EiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJCaWxsZW50ecWxemV0Y3NlbmfFkSIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3p0ZXJlw7Mgc3ppbXVsw6Fsw6FzYSIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3p0ZXJlw7MiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAiVMOpcmhhdMOhc8O6IGhhbmciCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uZXLFkXPDrXTDqXMiCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAiSGFuZ2ZhbGZvcnLDoXMiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25mb3Jyw6FzIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiSmFjayIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiS8O2esOpcHPFkSAvIExGRSIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIlN6dGVyZcOzIGtldmVyw6lzIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbsOzIGtldmVyw6lzIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJCZW1lbmV0aSBrZXZlcsOpcyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiMS4gbWlrcm9mb24iCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIjIuIG1pa3JvZm9uIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIkRpZ2l0w6FsaXMga2kiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJEaWdpdMOhbGlzIGJlIgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIk1vYmlsdGVsZWZvbiIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICJFZ3nDqWIiCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJOaW5jcyIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICJCZSIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiS2kiCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICJOw6ltw610w6FzIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiR3lvcnMiCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiTmFneW9uIGFsYWNzb255IgotCi0jfiBtc2dpZCAiTG93IgotI34gbXNnc3RyICJBbGFjc29ueSIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiS8O2emVwZXMiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJNYWdhcyIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAiTmFneW9uIG1hZ2FzIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAiw4lsZXMiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJFbMWRbGFwaSBtaWtyb2ZvbiIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIkVsxZFsYXBpIHZvbmFsYmVtZW5ldCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIEhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkVsxZFsYXBpIGbDvGxoYWxsZ2F0w7MiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAiRWzFkWxhcGkgdm9uYWxraW1lbmV0IgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJaw7ZsZCBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSw7N6c2FzesOtbiBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLw6lrIGNzYXRsYWtvesOzIgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGZWjDqXIgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkZla2V0ZSBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTesO8cmtlIGNzYXRsYWtvesOzIgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTmFyYW5jcyBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlbDtnLDtnMgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTw6FyZ2EgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJHcmVlbiBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlrDtmxkIGVsxZFvbGRhbGkgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUsOzenNhc3rDrW4gZWzFkW9sZGFsaSBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLw6lrIGVsxZFvbGRhbGkgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkZlaMOpciBlbMWRb2xkYWxpIGNzYXRsYWtvesOzIgotCi0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGZWtldGUgZWzFkW9sZGFsaSBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTesO8cmtlIGVsxZFvbGRhbGkgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJOYXJhbmNzIGVsxZFvbGRhbGkgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJWw7Zyw7ZzIGVsxZFvbGRhbGkgY3NhdGxha296w7MiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTw6FyZ2EgZWzFkW9sZGFsaSBjc2F0bGFrb3rDsyIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIlN6w7Nyw6Fza2ltZW5ldCIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIkxla2V2ZXLDqXMiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJWaXJ0dcOhbGlzIGtldmVyxZFiZW1lbmV0IgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBPdXRwdXQiCi0jfiBtc2dzdHIgIlZpcnR1w6FsaXMga2V2ZXLFkWtpbWVuZXQiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJWaXJ0dcOhbGlzIGtldmVyxZFjc2F0b3Juw6FrIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzICVkIGZ1bmtjacOzIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIGZ1bmtjacOzIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiVsOhcmF0bGFuIGtlcmV0bcOpcmV0ICgldSkgw6lya2V6ZXR0ICV1IGhlbHlldHQuIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkhpYmEgJWQgYsOhanQgb2x2YXPDoXNha29yIGEga8O2dmV0a2V6xZEgZXN6a8O2enLFkWw6IOKAniVz4oCdLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJOZW0gw6FsbMOtdGhhdMOzayBzb3JiYSBhIHB1ZmZlcmVrIGEoeikg4oCeJXPigJ0gZXN6a8O2emJlbi4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk5lbSBzaWtlcsO8bHQgdmlkZW9rb2Nrw6FrYXQgbGVrw6lybmkgYSh6KSDigJ4lc+KAnSBlc3prw7Z6dMWRbC4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiSGliYSAlZCBwcsOzYsOhbGtvesOhcyB1dMOhbi4gRXN6a8O2ejogJXMuIFJlbmRzemVyaGliYTogJXMuIgpkaWZmIC0tZ2l0IGEvcG8vaWQuZ21vIGIvcG8vaWQuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODNhOGI3Li4wMDAwMDAwCi0tLSBhL3BvL2lkLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2lkLnBvIGIvcG8vaWQucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwZjBjNjAuLjAwMDAwMDAKLS0tIGEvcG8vaWQucG8KKysrIC9kZXYvbnVsbApAQCAtMSw0MzMgKzAsMCBAQAotIyBJbmRvbmVzaWFuIHRyYW5zbGF0aW9ucyBmb3IgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBBbmRoaWthIFBhZG1hd2FuIDxhbmRoaWthLnBhZG1hd2FuQGdtYWlsLmNvbT4sIDIwMTEtMjAxNi4KLSMgQW5kaWthIFRyaXdpZGFkYSA8YW5kaWthQGdtYWlsLmNvbT4sIDIwMTMuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuMTAuMFxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTExLTEwIDIyOjA2KzA3MDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEFuZGhpa2EgUGFkbWF3YW4gPGFuZGhpa2EucGFkbWF3YW5AZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IEluZG9uZXNpYW4gPHRyYW5zbGF0aW9uLXRlYW0taWRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBpZFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtQnVnczogUmVwb3J0IHRyYW5zbGF0aW9uIGVycm9ycyB0byB0aGUgTGFuZ3VhZ2UtVGVhbSBhZGRyZXNzLlxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIlNlcnZlciBKYWNrIHRhayBkaXRlbXVrYW4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIkdhZ2FsIHVudHVrIG1lbmdhd2FzYW5kaSBjaXRyYSBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICInJXMnIG9sZWggJyVzJyIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbmdodWJ1bmdpIHNlcnZlciIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJUYWsgYWRhIFVSTCB5YW5nIGRpdGVudHVrYW4uIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIlNlcnZlciB0aWRhayBtZW5kdWt1bmcgcGVuY2FyaWFuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbmVtdWthbiBuYW1hIHNlcnZlci4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbWJhbmd1biBrb25la3NpIGtlIHNlcnZlci4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJQZW5nYXR1cmFuIGtvbmVrc2kgYW1hbiBnYWdhbC4iCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iVGVyamFkaSBzZWJ1YWggZ2FsYXQgamFyaW5nYW4sIGF0YXUgc2VydmVyIG1lbnV0dXAga29uZWtzaSBzZWNhcmEgdGliYS10aWJhLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiU2VydmVyIG1lbmdpcmltIGRhdGEgcnVzYWsuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICJNYXN1a2FuIGF1ZGlvIHRpZGFrIGFkYSBhdGF1IHRpZGFrIHNhaCwgYXJ1cyBBVkkgYWthbiBydXNhay4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIkJlcmthcyBpbmkgdGlkYWsgYmVyaXNpIGFydXMgeWFuZyBkYXBhdCBkaXB1dGFyLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiQmVya2FzIGluaSB0aWRhayBzYWggZGFuIHRhayBkYXBhdCBkaXB1dGFyLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICJUYWsgYmlzYSBtZW1haW5rYW4gc3RyZWFtIGthcmVuYSBkaWVua3JpcHNpIG1lbWFrYWkgRFJNIFBsYXlSZWFkeS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkJlcmthcyBpbmkgcnVzYWsgZGFuIHRhayBkYXBhdCBkaXB1dGFyLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiVWt1cmFuIGF0b20gdGlkYWsgc2FoLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiQmVya2FzIGluaSB0aWRhayBsZW5na2FwIGRhbiB0YWsgZGFwYXQgZGlwdXRhci4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIlZpZGVvIGRpIGJlcmthcyBpbmkgbXVuZ2tpbiB0YWsgZGFwYXQgZGlwdXRhciBkZW5nYW4gYmVuYXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIkJlcmthcyBpbmkgYmVyaXNpIHRlcmxhbHUgYmFueWFrIGFydXMuIEhhbnlhIG1lbXV0YXIgJWQgcGVydGFtYSIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iVGFrIGFkYSBhcnVzIGRpZHVrdW5nIHlhbmcgZGl0ZW11a2FuLiBBbmRhIG11bmdraW4gcGVybHUgbWVuZ2luc3RhbCBwbHVnaW4gIgotImVrc3RlbnNpIEdTdHJlYW1lciBSVFNQIHVudHVrIGFydXMgUmVhbCBtZWRpYS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJUYWsgYWRhIGFydXMgZGlkdWt1bmcgeWFuZyBkaXRlbXVrYW4uIEFuZGEgbXVuZ2tpbiBpbmdpbiBtZW5naXppbmthbiBsZWJpaCAiCi0iYmFueWFrIHRyYW5zcG9ydGFzaSBhdGF1IGtlaGlsYW5nYW4gcGx1Z2luIGVrc3RlbnNpIEdTdHJlYW1lciBSVFNQIHlhbmcgIgotImJlbmFyLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJUYWsgZGFwYXQgbWVtYnVrYSBkaXZhaXMgYXVkaW8gdW50dWsgcHV0YXIga2VtYmFsaS4gRGl2YWlzIHNlZGFuZyBkaWd1bmFrYW4gIgotIm9sZWggYXBsaWthc2kgbGFpbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIlRhayBkYXBhdCBtZW1idWthIGRpdmFpcyBhdWRpbyB1bnR1ayBwdXRhciBrZW1iYWxpLiBBbmRhIHRhayBtZW1pbGlraSBoYWsgIgotImFrc2VzIHVudHVrIG1lbWJ1a2EgZGl2YWlzLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJUYWsgZGFwYXQgbWVtYnVrYSBkaXZhaXMgYXVkaW8gdW50dWsgcHV0YXIga2VtYmFsaS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iVGFrIGRhcGF0IG1lbWJ1a2EgZGl2YWlzIGF1ZGlvIHVudHVrIHB1dGFyIGtlbWJhbGkuIFZlcnNpIE9wZW4gU291bmQgU3lzdGVtICIKLSJpbmkgdGlkYWsgZGlkdWt1bmcgb2xlaCBlbGVtZW4gaW5pLiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJQdXRhciBiYWxpayB0aWRhayBkaWR1a3VuZyBvbGVoIGRpdmFpcyBhdWRpbyBpbmkuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJHYWxhdCBwdXRhciBiYWxpayBhdWRpby4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIlBlcmVrYW1hbiB0aWRhayBkaWR1a3VuZyBvbGVoIGRpdmFpcyBhdWRpbyBpbmkuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiR2FsYXQgbWVyZWthbSBkYXJpIGRpdmFpcyBhdWRpby4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJUYWsgZGFwYXQgbWVtYnVrYSBkaXZhaXMgYXVkaW8gdW50dWsgbWVyZWthbS4gQW5kYSB0YWsgbWVtaWxpa2kgaGFrIGFrc2VzICIKLSJ1bnR1ayBtZW1idWthIGRpdmFpcy4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW1idWthIGRpdmFpcyBhdWRpbyB1bnR1ayBtZXJla2FtLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICJEaXZhaXMgQ29yZUF1ZGlvIHRpZGFrIGRpdGVtdWthbiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiRGl2YWlzIENvcmVBdWRpbyB0aWRhayBkYXBhdCBidWthIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiU3VtYmVyIFJla2FtYW4iCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkphbHVyIE1hc3VrIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkNEIEludGVybmFsIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIE1hc3VrIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIE1hc3VrIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIE1hc3VrIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIkxvb3BiYWNrIEtvZGVrIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJMb29wYmFjayBTdW5WVFMiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIlZvbHVtZSIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIkdhaW4iCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiUGVuZ2VyYXMgU3VhcmEgVGVyYmluYSIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiSGVhZHBob25lIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIkphbHVyIEtlbHVhciIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgS2VsdWFyIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMSBLZWx1YXIiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIkFVWCAyIEtlbHVhciIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJHYWxhdCBtZW1iYWNhICVkIGJpdGEgZGFyaSBkaXZhaXMgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSJHYWdhbCBtZW55ZWJ1dGthbiBrZW11bmdraW5hbiBmb3JtYXQgdmlkZW8geWFuZyBkYXBhdCBiZWtlcmphIGRlbmdhbiBkaXZhaXMgIgotIiclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJUYWsgZGFwYXQgbWVtZXRha2FuIHBlbnlhbmdnYSBkYXJpIGRpdmFpcyAnJXMnIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICJEcml2ZXIgZGFyaSBkaXZhaXMgJyVzJyB0YWsgbWVuZHVrdW5nIG1ldG9kZSBJTyAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIkRyaXZlciBkYXJpIGRpdmFpcyAnJXMnIHRhayBtZW5kdWt1bmcgbWV0b2RlIElPIGFwYXB1biB5YW5nIGRpa2VuYWwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIkRpdmFpcyAnJXMnIHNpYnVrIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJEaXZhaXMgJyVzJyB0YWsgZGFwYXQgbWVuYW5na2FwIGRpICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJEaXZhaXMgJyVzJyB0YWsgZGFwYXQgbWVuYW5na2FwIGRhbGFtIGZvcm1hdCB5YW5nIGRpdGVudHVrYW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiRGl2YWlzICclcycgdGFrIG1lbmR1a3VuZyBwZXNhd2F0IHRhayBiZXJzaW5nZ3VuZ2FuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiVGFrIGJpc2EgbWVuZGFwYXRrYW4gcGFyYW1ldGVyIGRpIGRpdmFpcyAnJXMnIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICJEaXZhaXMgdmlkZW8gdGFrIG1lbmVyaW1hIHBlbmdhdHVyYW4gbGFqdSBiaW5na2FpIGJhcnUuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiRGl2YWlzIHZpZGVvIHRhayBtZW55ZWRpYWthbiBmb3JtYXQga2VsdWFyYW4uIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIkRpdmFpcyB2aWRlbyBtZW5nZW1iYWxpa2FuIGRpbWVuc2kgdGlkYWsgc2FoLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICJEaXZhaXMgdmlkZW8gbWVuZ2d1bmFrYW4gbWV0b2RlIHBlbnlpbGFuZ2FuIHlhbmcgdGlkYWsgZGlkdWt1bmcuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIkRpdmFpcyB2aWRlbyBtZW5nZ3VuYWthbiBmb3JtYXQgcGl4ZWwgeWFuZyB0aWRhayBkaWR1a3VuZy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiR2FnYWwgbWVuZ2F0dXIgcHVsIHNpbmdnYWhhbiBpbnRlcm5hbC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIkRpdmFpcyB2aWRlbyB0YWsgbWVueWFyYW5rYW4gdWt1cmFuIHNpbmdnYWhhbiBhcGFwdW4uIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiVGFrIGFkYSBwdWwgZG93bnN0cmVhbSB1bnR1ayBkaWltcG9yLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR2FnYWwgbWVuZGFwYXRrYW4gcGVuZ2F0dXJhbiB0dW5lciAlZCBkaSBkaXZhaXMgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR2FsYXQgc2FhdCBtZW5nYW1iaWwga2FwYWJpbGl0YXMgYmFnaSBkaXZhaXMgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJEaXZhaXMgJyVzJyBidWthbiB0dW5lci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJHYWdhbCBtZW5kYXBhdCBtYXN1a2FuIHJhZGlvIHBhZGEgZGl2YWlzICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiR2FnYWwgbWVuZ2F0dXIgbWFzdWthbiAlZCBkaSBkaXZhaXMgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJHYWdhbCBtZW5ndWJhaCBrZWFkYWFuIGJpc3UgdW50dWsgZGl2YWlzICclcycuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJHYWdhbCBtZW5nYWxva2FzaWthbiBtZW1vcmkgeWFuZyBkaXBlcmx1a2FuLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJHYWdhbCBtZW5nYWxva2FzaWthbiBtZW1vcmkgeWFuZyBkaXBlcmx1a2FuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJLb252ZXJ0ZXIgZGkgZGl2YWlzICVzIHRpZGFrIG1lbXB1bnlhaSBmb3JtYXQgbWFzdWthbiB5YW5nIGRpZHVrdW5nIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJLb252ZXJ0ZXIgZGkgZGl2YWlzICVzIHRpZGFrIG1lbXB1bnlhaSBmb3JtYXQga2VsdWFyYW4geWFuZyBkaWR1a3VuZyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiUGVueWFuZGkgZGkgZGl2YWlzICVzIHRpZGFrIG1lbXB1bnlhaSBmb3JtYXQgbWFzdWthbiB5YW5nIGRpZHVrdW5nIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiUGVueWFuZGkgZGkgZGl2YWlzICVzIHRpZGFrIG1lbXB1bnlhaSBmb3JtYXQga2VsdWFyYW4geWFuZyBkaWR1a3VuZyIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJHYWdhbCB1bnR1ayBtZW5qYWxhbmthbiB0YWxpIGF3YXNhbmRpLiIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiR2FnYWwgbWVtcHJvc2VzIGJpbmdrYWkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkdhbGF0IG1lbmRhcGF0a2FuIGtlbWFtcHVhbiB1bnR1ayBkaXZhaXMgJyVzJzogSXR1IGJ1a2FuIGRpdmVyIHY0bDIuIENlayAiCi0iYXBha2FoIGl0dSBtZXJ1cGFrYW4gZHJpdmVyIHY0bDEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiR2FnYWwga3VlcmkgYXRyaWJ1dCBtYXN1a2FuICVkIGRpIGRpdmFpcyAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJHYWdhbCBtZW5kYXBhdGthbiBwZW5nYXR1cmFuIHR1bmVyICVkIGRpIGRpdmFpcyAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkdhZ2FsIGt1ZXJpIHN0YW5kYXIgZGkgZGl2YWlzICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJHYWdhbCBtZW5kYXBhdGthbiBrZW5kYWxpIGF0cmlidXQgZGkgZGl2YWlzICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlRhayBkYXBhdCBtZW5naWRlbnRpZmlrYXNpIGRpdmFpcyAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJJbmkgYnVrYW4gZGl2YWlzICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1a2EgZGl2YWlzICclcycgdW50dWsgZGliYWNhIGRhbiBkaXR1bGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIkRpdmFpcyAnJXMnIGJ1a2FuIGRpdmFpcyBwZW5hbmdrYXAuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJEaXZhaXMgJyVzJyBidWthbiBkaXZhaXMga2VsdWFyYW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJEaXZhaXMgJyVzJyBidWthbiBkaXZhaXMgTTJNLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiVGFrIGRhcGF0IG1lbWJ1a2EgZGl2YWlzICclcycgdW50dWsgZGliYWNhIGRhbiBkaXR1bGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR2FnYWwgbWVuZ2F0dXIgc3RhbmRhciB1bnR1ayBkaXZhaXMgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJHYWdhbCB1bnR1ayBtZW5kYXBhdGthbiBmcmVrdWVuc2kgdHVuZXIgdGVya2luaSB1bnR1ayBkaXZhaXMgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiR2FnYWwgbWVuZ2F0dXIgZnJla3VlbnNpIHR1bmVyIHRlcmtpbmkgdW50dWsgZGl2YWlzICclcycga2UgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJHYWdhbCBtZW5kYXBhdGthbiBrZWt1YXRhbiBzaW55YWwgdW50dWsgZGl2YWlzICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJHYWdhbCBtZW5kYXBhdGthbiBuaWxhaSB1bnR1ayBrZW5kYWxpICVkIGRpIGRpdmFpcyAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR2FnYWwgbWVuZ2F0dXIgbmlsYWkgJWQgdW50dWsga2VuZGFsaSAlZCBkaSBkaXZhaXMgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJHYWdhbCBtZW5kYXBhdGthbiBtYXN1a2FuIHRlcmtpbmkgZGkgZGl2YWlzICclcycuIE11bmdraW4gaXR1IGRpdmFpcyByYWRpbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iR2FnYWwgbWVuZGFwYXRrYW4ga2VsdWFyYW4gdGVya2luaSBkaSBkaXZhaXMgJyVzJy4gTXVuZ2tpbiBpdHUgZGl2YWlzIHJhZGlvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkdhZ2FsIG1lbmdhdHVyIGtlbHVhcmFuICVkIGRpIGRpdmFpcyAlcy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJNZW5ndWJhaCByZXNvbHVzaSBzYWF0IHdha3R1IGJlcmphbGFuIGJlbHVtIGRpZHVrdW5nLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiVGFrIGRhcGF0IGJlcm9wZXJhc2kgdGFucGEgamFtIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJHYWxhdCBhcnVzIGRhdGEgaW50ZXJuYWwuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiR2FsYXQgYWxpcmFuIGRhdGEgaW50ZXJuYWwuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJEaXZhaXMgJyVzJyB0YWsgbWVuZHVrdW5nIHBlbmFuZ2thcGFuIHZpZGVvIgpkaWZmIC0tZ2l0IGEvcG8vaW5zZXJ0LWhlYWRlci5zaW4gYi9wby9pbnNlcnQtaGVhZGVyLnNpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2ZGUwMS4uMDAwMDAwMAotLS0gYS9wby9pbnNlcnQtaGVhZGVyLnNpbgorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgU2VkIHNjcmlwdCB0aGF0IGluc2VydHMgdGhlIGZpbGUgY2FsbGVkIEhFQURFUiBiZWZvcmUgdGhlIGhlYWRlciBlbnRyeS4KLSMKLSMgQXQgZWFjaCBvY2N1cnJlbmNlIG9mIGEgbGluZSBzdGFydGluZyB3aXRoICJtc2dpZCAiLCB3ZSBleGVjdXRlIHRoZSBmb2xsb3dpbmcKLSMgY29tbWFuZHMuIEF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlLCBpbnNlcnQgdGhlIGZpbGUuIEF0IHRoZSBmb2xsb3dpbmcKLSMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZwotIyBvY2N1cnJlbmNlcyBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgotL15tc2dpZCAvewoteAotIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgotcy9tL20vCi10YQotIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZWFkIHRoZSBmaWxlLgotciBIRUFERVIKLSMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKLSMgY3VycmVudCBsaW5lIHdoaWxlIGRvaW5nIHRoaXMuCi1nCi1OCi1iYgotOmEKLSMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCi14Ci06YgotfQpkaWZmIC0tZ2l0IGEvcG8vaXQuZ21vIGIvcG8vaXQuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDUwZjIzLi4wMDAwMDAwCi0tLSBhL3BvL2l0LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2l0LnBvIGIvcG8vaXQucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNGM4M2EuLjAwMDAwMDAKLS0tIGEvcG8vaXQucG8KKysrIC9kZXYvbnVsbApAQCAtMSw4MTcgKzAsMCBAQAotIyBJdGFsaWFuIHRyYW5zbGF0aW9uIGZvciBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2Ugb2YgR1N0cmVhbWVyIHByb2plY3QuCi0jIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBHU3RyZWFtZXIgY29yZSB0ZWFtCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jCi0jIEx1Y2EgRmVycmV0dGkgPGVsbGUudWNhQGluZmluaXRvLml0PiwgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMC4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QgMC4xMC4yNS4zXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMTAtMjUgMTA6MTErMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogTHVjYSBGZXJyZXR0aSA8ZWxsZS51Y2FAaW5maW5pdG8uaXQ+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCi0iTGFuZ3VhZ2U6IGl0XG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiRGVjb2RpZmljYSBkZWxsJ2ltbWFnaW5lIEpQRUcgbm9uIHJpdXNjaXRhIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLCqyVzwrsgZGkgwqslc8K7IgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjb25uZXR0ZXJzaSBhbCBzZXJ2ZXIiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiTmVzc3VuIFVSTCBpbXBvc3RhdG8uIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIklsIHNlcnZlciBub24gc3VwcG9ydGEgaWwgcG9zaXppb25hbWVudG8uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJJbXBvc3NpYmlsZSByaXNvbHZlcmUgaWwgbm9tZSBkZWwgc2VydmVyLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBzdGFiaWxpcmUgbGEgY29ubmVzc2lvbmUgYWwgc2VydmVyLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsYSBjb25uZXNzaW9uZSBzaWN1cmEgbm9uIHJpdXNjaXRhLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iU2kgw6ggdmVyaWZpY2F0byB1biBlcnJvcmUgZGkgcmV0ZSwgb3BwdXJlIGlsIHNlcnZlciBoYSBjaGl1c28gbGEgY29ubmVzc2lvbmUgIgotImluIG1vZG8gaW5hdHRlc28uIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICJJbiBzZXJ2ZXIgaGEgaW52aWF0byBkYXRpIGVycmF0aS4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIiIKLSJJbmdyZXNzbyBhdWRpbyBhc3NlbnRlIG8gbm9uIHZhbGlkby4gTG8gc3RyZWFtIEFWSSByaXN1bHRlcsOgIGRhbm5lZ2dpYXRvLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiUXVlc3RvIGZpbGUgbm9uIGNvbnRpZW5lIGFsY3VubyBzdHJlYW0gcmlwcm9kdWNpYmlsZS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlF1ZXN0byBmaWxlIG5vbiDDqCB2YWxpZG8gZSBub24gcHXDsiBlc3NlcmUgcmlwcm9kb3R0by4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJRdWVzdG8gZmlsZSDDqCBhbHRlcmF0byBlIG5vbiBwdcOyIGVzc2VyZSByaXByb2RvdHRvLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJRdWVzdG8gZmlsZSDDqCBpbmNvbXBsZXRvIGUgbm9uIHB1w7IgZXNzZXJlIHJpcHJvZG90dG8uIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJJbCB2aWRlbyBpbiBxdWVzdG8gZmlsZSBwb3RyZWJiZSBub24gZXNzZXJlIHJpcHJvZG90dG8gY29ycmV0dGFtZW50ZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiUXVlc3RvIGZpbGUgY29udGllbmUgdHJvcHBpIHN0cmVhbS4gUmlwcm9kb3R0aSBzb2xvIGkgcHJpbWkgJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk5vbiDDqCBzdGF0byB0cm92YXRvIGFsY3VubyBzdHJlYW0gc3VwcG9ydGF0by4gUG90cmViYmUgZXNzZXJlIG5lY2Vzc2FyaW8gIgotImluc3RhbGxhcmUgdW4gcGx1Z2luIEdTdHJlYW1lciBkaSB0aXBvIGVzdGVuc2lvbmUgUlRTUCBwZXIgZ2xpIHN0cmVhbSBSZWFsICIKLSJtZWRpYS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJOb24gw6ggc3RhdG8gdHJvdmF0byBhbGN1bm8gc3RyZWFtIHN1cHBvcnRhdG8uIFBvdHJlYmJlIGVzc2VyZSBuZWNlc3NhcmlvICIKLSJhYmlsaXRhcmUgYWx0cmkgcHJvdG9jb2xsaSBkaSB0cmFzcG9ydG8gb3BwdXJlIGluIGFsdGVybmF0aXZhIHBvdHJlYmJlICIKLSJtYW5jYXJlIGlsIGNvcnJldHRvIHBsdWdpbiBHU3RyZWFtZXIgZGkgdGlwbyBlc3RlbnNpb25lIFJUU1AuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGFwcmlyZSBpbCBkaXNwb3NpdGl2byBhdWRpbyBwZXIgbGEgcmlwcm9kdXppb25lLiBJbCBkaXNwb3NpdGl2byAiCi0iw6ggYXR0dWFsbWVudGUgdXNhdG8gZGEgdW4nYWx0cmEgYXBwbGljYXppb25lLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgYXByaXJlIGlsIGRpc3Bvc2l0aXZvIGF1ZGlvIHBlciBsYSByaXByb2R1emlvbmUuIFBlcm1lc3NpIG5vbiAiCi0ic3VmZmljaWVudGkgcGVyIGFwcmlyZSBpbCBkaXNwb3NpdGl2by4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGlsIGRpc3Bvc2l0aXZvIGF1ZGlvIHBlciBsYSByaXByb2R1emlvbmUuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIkltcG9zc2liaWxlIGFwcmlyZSBpbCBkZXZpY2UgYXVkaW8gcGVyIGxhIHJpcHJvZHV6aW9uZS4gUXVlc3RhIHZlcnNpb25lIGRpICIKLSJPcGVuIFNvdW5kIFN5c3RlbSBub24gw6ggc3VwcG9ydGF0YSBkYSBxdWVzdG8gZWxlbWVudG8uIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIlF1ZXN0byBkZXZpY2UgYXVkaW8gbm9uIHN1cHBvcnRhIGxhIHJpcHJvZHV6aW9uZS4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIkVycm9yZSBuZWwgcmlwcm9kdXJyZSBsJ2F1ZGlvLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiUXVlc3RvIGRpc3Bvc2l0aXZvIGF1ZGlvIG5vbiBzdXBwb3J0YSBsYSByZWdpc3RyYXppb25lLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkVycm9yZSBuZWwgcmVnaXN0cmFyZSBkYWwgZGlzcG9zaXRpdm8gYXVkaW8uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgYXByaXJlIGlsIGRpc3Bvc2l0aXZvIGF1ZGlvIHBlciBsYSByZWdpc3RyYXppb25lLiBQZXJtZXNzaSBub24gIgotInN1ZmZpY2llbnRpIHBlciBhcHJpcmUgaWwgZGlzcG9zaXRpdm8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZGlzcG9zaXRpdm8gYXVkaW8gcGVyIGxhIHJlZ2lzdHJhemlvbmUuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiU29yZ2VudGUgcmVnaXN0cmF6aW9uZSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pY3JvZm9ubyIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmVhIGluIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkNEIGludGVybm8iCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiU1BESUYgaW4iCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiQVVYIDEgaW4iCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiQVVYIDIgaW4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIkxvb3BiYWNrIgotCi0jLCBmdXp6eQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiTG9vcGJhY2siCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIlZvbHVtZSIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIkd1YWRhZ25vIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIkFsdG9wLiBpbmNvcnBvcmF0byIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiQ3VmZmlhIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIkxpbmVhIG91dCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgb3V0IgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMSBvdXQiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIkFVWCAyIG91dCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJFcnJvcmUgbmVsIGxlZ2dlcmUgJWQgYnl0ZSBkYWwgZGV2aWNlIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgbWFwcGFyZSBkZWkgYnVmZmVyIGRhbCBkZXZpY2Ugwqslc8K7LiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIklsIGRyaXZlciBkZWwgZGV2aWNlIMKrJXPCuyBub24gc3VwcG9ydGEgYWxjdW4gbWV0b2RvIGRpIGNhdHR1cmEgbm90by4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiSWwgZHJpdmVyIGRlbCBkZXZpY2Ugwqslc8K7IG5vbiBzdXBwb3J0YSBhbGN1biBtZXRvZG8gZGkgY2F0dHVyYSBub3RvLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiSWwgZGV2aWNlIMKrJXPCuyBub24gw6ggdW4gZGlzcG9zaXRpdm8gZGkgdXNjaXRhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIklsIGRldmljZSDCqyVzwrsgbm9uIMOoIHVuIGRpc3Bvc2l0aXZvIGRpIGNhdHR1cmEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiSWwgZGV2aWNlIMKrJXPCuyBub24gw6ggdW4gZGlzcG9zaXRpdm8gZGkgY2F0dHVyYS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIklsIGRldmljZSDCqyVzwrsgbm9uIMOoIHVuIGRpc3Bvc2l0aXZvIGRpIHVzY2l0YS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJJbXBvc3NpYmlsZSBvdHRlbmVyZSBpIHBhcmFtZXRyaSBzdWwgZGV2aWNlIMKrJXPCuyIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIiIKLSJJbCBkZXZpY2UgZGkgaW5ncmVzc28gdmlkZW8gbm9uIGFjY2V0dGEgbGEgbnVvdmEgaW1wb3N0YXppb25lIHN1bCBmcmFtZSByYXRlLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICIiCi0iSWwgZGV2aWNlIGRpIGluZ3Jlc3NvIHZpZGVvIG5vbiBhY2NldHRhIGxhIG51b3ZhIGltcG9zdGF6aW9uZSBzdWwgZnJhbWUgcmF0ZS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIklsIGRyaXZlciBkZWwgZGV2aWNlIMKrJXPCuyBub24gc3VwcG9ydGEgYWxjdW4gbWV0b2RvIGRpIGNhdHR1cmEgbm90by4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiSWwgZHJpdmVyIGRlbCBkZXZpY2Ugwqslc8K7IG5vbiBzdXBwb3J0YSBhbGN1biBtZXRvZG8gZGkgY2F0dHVyYSBub3RvLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICIiCi0iSWwgZGV2aWNlIGRpIGluZ3Jlc3NvIHZpZGVvIG5vbiBhY2NldHRhIGxhIG51b3ZhIGltcG9zdGF6aW9uZSBzdWwgZnJhbWUgcmF0ZS4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iUmVjdXBlcm8gZGVsbGUgaW1wb3N0YXppb25pIGRlbCBzaW50b25penphdG9yZSAlZCBzdWwgZGV2aWNlIMKrJXPCuyBub24gIgotInJpdXNjaXRvLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRXJyb3JlIG5lbCBsZWdnZXJlICVkIGJ5dGUgZGFsIGRldmljZSDCqyVzwrsuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIklsIGRldmljZSDCqyVzwrsgbm9uIMOoIHVuIGRpc3Bvc2l0aXZvIGRpIHVzY2l0YS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiSW1wb3N0YXppb25lIGRlbGwnaW5ncmVzc28gJWQgc3VsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkltcG9zdGF6aW9uZSBkZWxsJ2luZ3Jlc3NvICVkIHN1bCBkZXZpY2Ugwqslc8K7IG5vbiByaXVzY2l0YS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJSZWN1cGVybyBkZWxsJ2ludGVuc2l0w6AgZGVsIHNlZ25hbGUgcGVyIGlsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRvLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZWQgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiSWwgZHJpdmVyIGRlbCBkZXZpY2Ugwqslc8K7IG5vbiBzdXBwb3J0YSBhbGN1biBtZXRvZG8gZGkgY2F0dHVyYSBub3RvLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJJbCBkZXZpY2UgZGkgaW5ncmVzc28gdmlkZW8gbm9uIGFjY2V0dGEgbGEgbnVvdmEgaW1wb3N0YXppb25lIHN1bCBmcmFtZSByYXRlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJJbCBkZXZpY2UgZGkgaW5ncmVzc28gdmlkZW8gbm9uIGFjY2V0dGEgbGEgbnVvdmEgaW1wb3N0YXppb25lIHN1bCBmcmFtZSByYXRlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iSWwgZGV2aWNlIGRpIGluZ3Jlc3NvIHZpZGVvIG5vbiBhY2NldHRhIGxhIG51b3ZhIGltcG9zdGF6aW9uZSBzdWwgZnJhbWUgcmF0ZS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIkRlY29kaWZpY2EgZGVsbCdpbW1hZ2luZSBKUEVHIG5vbiByaXVzY2l0YSIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkVycm9yZSBuZWxsJ290dGVuZXJlIGxlIGZ1bnppb25hbGl0w6AgcGVyIGlsIGRldmljZSDCqyVzwrs6IG5vbiDDqCB1biBkcml2ZXIgIgotInY0bDIuIENvbnRyb2xsYXJlIHNlIHNpIHRyYXR0YSBkaSB1biBkcml2ZXIgdjRsMS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICIiCi0iSW50ZXJyb2dhemlvbmUgZGVnbGkgYXR0cmlidXRpIGRlbGwnaW5wdXQgJWQgbmVsIGRldmljZSAlcyBub24gcml1c2NpdGEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIlJlY3VwZXJvIGRlbGxlIGltcG9zdGF6aW9uaSBkZWwgc2ludG9uaXp6YXRvcmUgJWQgc3VsIGRldmljZSDCqyVzwrsgbm9uICIKLSJyaXVzY2l0by4iCi0KLSMgIG5vcm0gw6ggdW4gcGFyYW1lbnRybyBwYXJpIGEgbnRzYyBvIHBhbCAoZSBmb3JzZSBhbHRyby4gU2kgZXZpbmNlIGFkIGVzZW1waW8KLSMgIGRhbCBjb21hbmRvIGRpIFZpZGVvIExhbiBDbGllbgotIwotIyAgICAgdmxjIC0tY29sb3IgICMgICAgdjRsOi9kZXYvdmlkZW8yOm5vcm09bnRzYzpmcmVxdWVuY3k9NzcyNTA6c2l6ZT02NDB4NDgwOiMgICAgYWRldj0vZGV2L2RzcDI6YXVkaW89MCAoLi4uKQotIwotIyAgUXVhbGNoZSBpZGVhIGRpdmVyc2EgZGEgbm9ybWE/ICAtTHVjYQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkludGVycm9nYXppb25lIGRpIG5vcm0gc3VsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUmVjdXBlcm8gZGVnbGkgYXR0cmlidXRpIGRlaSBjb250cm9sbGkgc3VsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBpZGVudGlmaWNhcmUgaWwgZGV2aWNlIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUXVlc3RvIG5vbiDDqCB1biBkaXNwb3NpdGl2byDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgYXByaXJlIGlsIGRldmljZSDCqyVzwrsgaW4gbGV0dHVyYSBlIHNjcml0dHVyYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJJbCBkZXZpY2Ugwqslc8K7IG5vbiDDqCB1biBkaXNwb3NpdGl2byBkaSBjYXR0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiSWwgZGV2aWNlIMKrJXPCuyBub24gw6ggdW4gZGlzcG9zaXRpdm8gZGkgdXNjaXRhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIklsIGRldmljZSDCqyVzwrsgbm9uIMOoIHVuIGRpc3Bvc2l0aXZvIGRpIHVzY2l0YS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZGV2aWNlIMKrJXPCuyBpbiBsZXR0dXJhIGUgc2NyaXR0dXJhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiSW1wb3N0YXppb25lIGRpIG5vcm0gcGVyIGlsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJSZWN1cGVybyBkZWxsJ2F0dHVhbGUgZnJlcXVlbnphIGRpIHNpbnRvbml6emF6aW9uZSBwZXIgaWwgZGV2aWNlIMKrJXPCuyBub24gIgotInJpdXNjaXRhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0iSW1wb3N0YXppb25lIGRlbGwnYXR0dWFsZSBmcmVxdWVuemEgZGkgc2ludG9uaXp6YXppb25lIHBlciBpbCBkZXZpY2Ugwqslc8K7IGEgIgotIiVsdSBIeiBub24gcml1c2NpdGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlJlY3VwZXJvIGRlbGwnaW50ZW5zaXTDoCBkZWwgc2VnbmFsZSBwZXIgaWwgZGV2aWNlIMKrJXPCuyBub24gcml1c2NpdG8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJSZWN1cGVybyBkZWwgdmFsb3JlIHBlciBpbCBjb250cm9sbG8gJWQgc3VsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkltcG9zdGF6aW9uZSBhbCB2YWxvcmUgJWQgcGVyIGlsIGNvbnRyb2xsbyAlZCBzdWwgZGV2aWNlIMKrJXPCuyBub24gcml1c2NpdG8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iUmVjdXBlcm8gZGVsbCdhdHR1YWxlIGluZ3Jlc3NvIHN1bCBkZXZpY2Ugwqslc8K7IG5vbiByaXVzY2l0by4gRm9yc2Ugw6ggdW4gIgotImRpc3Bvc2l0aXZvIHJhZGlvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iUmVjdXBlcm8gZGVsbCdhdHR1YWxlIGluZ3Jlc3NvIHN1bCBkZXZpY2Ugwqslc8K7IG5vbiByaXVzY2l0by4gRm9yc2Ugw6ggdW4gIgotImRpc3Bvc2l0aXZvIHJhZGlvIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJJbXBvc3RhemlvbmUgZGVsbCdpbmdyZXNzbyAlZCBzdWwgZGV2aWNlIMKrJXPCuyBub24gcml1c2NpdGEuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiIgotIklsIGNhbWJpbyBkZWxsYSByaXNvbHV6aW9uZSBkdXJhbnRlIGwnZXNlY3V6aW9uZSBub24gw6ggYW5jb3JhIHN1cHBvcnRhdG8uIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICJJbXBvc3NpYmlsZSBvcGVyYXJlIHNlbnphIHVuIGNsb2NrIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJFcnJvcmUgaW50ZXJubyBuZWxsbyBzdHJlYW0gZGVpIGRhdGkuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiRXJyb3JlIGludGVybm8gbmVsIGZsdXNzbyBkaSBkYXRpLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIklsIGRldmljZSDCqyVzwrsgbm9uIMOoIHVuIGRpc3Bvc2l0aXZvIGRpIHVzY2l0YS4iCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJPdHRlbnV0YSBkaW1lbnNpb25lIGluYXR0ZXNhIGRlbCBmb3RvZ3JhbW1hOiAldSBpbnZlY2UgZGkgJXUuIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICIiCi0jfiAiVGVudGF0aXZvIGRpIG90dGVuZXJlIGZvdG9ncmFtbWkgdmlkZW8gZGFsIGRldmljZSDCqyVzwrsgbm9uIHJpdXNjaXRvLiIKLQotI34gbXNnaWQgIkZhaWxlZCBhZnRlciAlZCB0cmllcy4gZGV2aWNlICVzLiBzeXN0ZW0gZXJyb3I6ICVzIgotI34gbXNnc3RyICJGYWxsaXRvIGRvcG8gJWQgdGVudGF0aXZpLiBEZXZpY2UgJXMuIEVycm9yZSBkaSBzaXN0ZW1hOiAlcyIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhc3NpIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJBY3V0aSIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTaW50ZXRpeiIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiQWx0b3BhcmwiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICJMaW5lYSBpbiIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaXhlciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiUmVnaXN0ciIKLQotI34gbXNnaWQgIkluLWdhaW4iCi0jfiBtc2dzdHIgIkd1YWQgaW4iCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAiR3VhZCBvdXQiCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIkNhbmFsZSAxIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJDYW5hbGUgMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiQ2FuYWxlIDMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIkRpZ2l0YWwgMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiRGlnaXRhbCAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICJEaWdpdGFsIDMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAiVGVsZWZvbm8gaW4iCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIlRlbGVmb25vIG91dCIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSYWRpbyIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZGV2aWNlIGF1ZGlvIHBlciBsYSBnZXN0aW9uZSBkZWxsYSByZWdvbGF6aW9uZSBkZWwgIgotI34gIm1peGVyLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkltcG9zc2liaWxlIGFwcmlyZSBpbCBkZXZpY2UgYXVkaW8gcGVyIGxhIGdlc3Rpb25lIGRlbGxhIHJlZ29sYXppb25lIGRlbCAiCi0jfiAibWl4ZXIuIFF1ZXN0YSB2ZXJzaW9uZSBkaSBPcGVuIFNvdW5kIFN5c3RlbSBub24gw6ggc3VwcG9ydGF0YSBkYSBxdWVzdG8gIgotI34gImVsZW1lbnRvLiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiUHJpbmNpcGFsZSIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJGcm9udGUiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJEaWV0cm8iCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICJDdWZmaWUiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIkNlbnRyYWxlIgotCi0jIE5kVDogbGZlIGFuZHJlYmJlIHRyYWRvdHRvIGNvbWUgZWZmZXR0aSBhIGJhc3NhIGZyZXF1ZW56YSBlIGFuZHJlYmJlIGFwZXJ0byB1biBidWcgcGVyIGxvdyBmcmVxdWVuY3kgZW1pdHRlciBjaGUgYWwgbGltaXRlIMOoIGxhIGNhc3NhIG1hIG5vbiBpbCBjYW5hbGUKLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZCIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIkxhdGVyYWxlIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiQVVYIG91dCIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICJQcm9mb25kaXTDoCAzRCIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiQ2VudHJvIDNEIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiUHJvZm9uZGl0w6AgM0QiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmb25vIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZGVvIGluIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJBVVggaW4iCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiR3VhZGFnbm8gcmVnaXN0cmF6aW9uZSIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJHdWFkYWdubyB1c2NpdGEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJJbmNyZW1lbnRvIG1pY3JvZm9ubyIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub3N0aWNhIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAiSW5jcmVtZW50byBiYXNzaSIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICJQb3J0ZSByaXByb2R1emlvbmUiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAiSW5wdXQiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiU29yZ2VudGUgbW9uaXRvciIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIkJlZXAgdGFzdGllcmEiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsYSBzdGVyZW8iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIlN0ZXJlbyIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTdW9ubyBzdXJyb3VuZCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiR3VhZGFnbm8gbWljcm9mb25vIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIlNvcmdlbnRlIGFsdG9wYXJsYW50ZSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJTb3JnZW50ZSBtaWNyb2Zvbm8iCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICJKYWNrIgotCi0jIHZlZGkgcHJpbWEgcGVyIExGRQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiQ2VudHJhbGUgLyBMRkUiCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICJNaXggc3RlcmVvIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1peCBtb25vIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJNaXggaW5ncmVzc28iCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDEiCi0jfiBtc2dzdHIgIk1pY3JvZm9ubyAxIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICJNaWNyb2Zvbm8gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJVc2NpdGEgZGlnaXRhbGUiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJJbmdyZXNzbyBkaWdpdGFsZSIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAiTW9kZW0iCi0KLSN+IG1zZ2lkICJIYW5kc2V0IgotI34gbXNnc3RyICJBdXJpY29sYXJlIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIkFsdHJvIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiTmVzc3VubyIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICJBY2Nlc28iCi0KLSN+IG1zZ2lkICJPZmYiCi0jfiBtc2dzdHIgIlNwZW50byIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIkVzY2x1c28iCi0KLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICJWZWxvY2UiCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiTW9sdG8gbGVudG8iCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIkxlbnRvIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICJNZWRpbyIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkFsdG8iCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIk1vbHRvIGFsdG8iCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJQcm9kdXppb25lIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAiTWljcm9mb25vIHBhbm5lbGxvIGZyb250YWxlIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiTGluZWEgaW4gcGFubmVsbG8gZnJvbnRhbGUiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJDdWZmaWUgcGFubmVsbG8gZnJvbnRhbGUiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAiTGluZWEgb3V0IHBhbm5lbGxvIGZyb250YWxlIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZXR0b3JlIHZlcmRlIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgcm9zYSIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZXR0b3JlIGJsdSIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmV0dG9yZSBiaWFuY28iCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgbmVybyIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZXR0b3JlIGdyaWdpbyIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgYXJhbmNpb25lIgotCi0jfiBtc2dpZCAiUmVkIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmV0dG9yZSByb3NzbyIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgZ2lhbGxvIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZXR0b3JlIHZlcmRlIHBhbm5lbGxvIGZyb250YWxlIgotCi0jfiBtc2dpZCAiUGluayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgcm9zYSBwYW5uZWxsbyBmcm9udGFsZSIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZXR0b3JlIGJsdSBwYW5uZWxsbyBmcm9udGFsZSIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmV0dG9yZSBiaWFuY28gcGFubmVsbG8gZnJvbnRhbGUiCi0KLSN+IG1zZ2lkICJCbGFjayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgbmVybyBwYW5uZWxsbyBmcm9udGFsZSIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZXR0b3JlIGdyaWdpbyBwYW5uZWxsbyBmcm9udGFsZSIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgYXJhbmNpb25lIHBhbm5lbGxvIGZyb250YWxlIgotCi0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmV0dG9yZSByb3NzbyBwYW5uZWxsbyBmcm9udGFsZSIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5ldHRvcmUgZ2lhbGxvIHBhbm5lbGxvIGZyb250YWxlIgotCi0jICBpbnQgc3ByZWFkOyAgICAgICAgIC8qIGNvcHkgZnJvbnQgdG8gc3Vyci9jZW50ZXIgY2hhbm5lbHMgKi8gCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiVXNjaXRhIGRpZmZ1c2EiCi0KLSN+IG1zZ2lkICJEb3dubWl4IgotI34gbXNnc3RyICJEb3dubWl4IgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAiSW5ncmVzc28gbWl4ZXIgdmlydHVhbGUiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiVXNjaXRhIG1peGVyIHZpcnR1YWxlIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiQ2FuYWxpIG1peGVyIHZpcnR1YWxlIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIkZ1bnppb25lICVzICVkIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIkZ1bnppb25lICVzIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkVycm9yZSBuZWwgbGVnZ2VyZSAlZCBieXRlIHN1bCBkZXZpY2Ugwqslc8K7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJJbXBvc3NpYmlsZSBhY2NvZGFyZSBpIGJ1ZmZlciBuZWwgZGV2aWNlIMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc291bmQgc2VydmVyIgotI34gbXNnc3RyICJJbXBvc3NpYmlsZSBzdGFiaWxpcmUgbGEgY29ubmVzc2lvbmUgYWwgc2VydmVyIGF1ZGlvIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIkludGVycm9nYXppb25lIGRlbGxlIGZ1bnppb25hbGl0w6AgZGVsIHNlcnZlciBhdWRpbyBub24gcml1c2NpdGEiCmRpZmYgLS1naXQgYS9wby9qYS5nbW8gYi9wby9qYS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NmJhNzcuLjAwMDAwMDAKLS0tIGEvcG8vamEuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vamEucG8gYi9wby9qYS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3M2NiYi4uMDAwMDAwMAotLS0gYS9wby9qYS5wbworKysgL2Rldi9udWxsCkBAIC0xLDkzMCArMCwwIEBACi0jIEphcGFuZXNlIHRyYW5zbGF0aW9uIGZvciBnc3QtcGx1Z2lucy1nb29kLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBUYWthbyBGdWppd2FyYSA8dGFrYW8uZnVqaXdhcmFAc3VuLmNvbT4sIDIwMDYuCi0jIE1ha290byBLYXRvIDxtYWtvdG8ua3RAZ21haWwuY29tPiwgMjAwOS0yMDExLgotIyBUYWtlc2hpIEhhbWFzYWtpIDxobWF0cmpwQHVzZXJzLnNvdXJjZWZvcmdlLmpwPiwgMjAxMS0yMDEyCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuMC4zXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTItMTItMjIgMjA6MTMrMDkwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogVGFrZXNoaSBIYW1hc2FraSA8aG1hdHJqcEB1c2Vycy5zb3VyY2Vmb3JnZS5qcD5cbiIKLSJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZSA8dHJhbnNsYXRpb24tdGVhbS1qYUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCi0iTGFuZ3VhZ2U6IGphXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjUuNFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiSlBFR+eUu+WDj+OBruODh+OCs+ODvOODieOBq+WkseaVl+OBl+OBvuOBl+OBnyIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAiJyVzJyAsICclcyciCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIuOCteODvOODkOODvOOBuOaOpee2muOBp+OBjeOBvuOBm+OCkyIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJVUkzjgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpPjgIIiCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAi44K144O844OQ44O844Gv44K344O844Kv44KS44K144Od44O844OI44GX44Gm44GE44G+44Gb44KT44CCIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICLjgrXjg7zjg5Djg7zlkI3jgpLop6PmsbrjgafjgY3jgb7jgZvjgpPjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAi44K144O844OQ44O844G444Gu5o6l57aa44KS56K656uL44Gn44GN44G+44Gb44KT44CCIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAi44K744Kt44Ol44Ki5o6l57aa44Gu44K744OD44OI44Ki44OD44OX44Gr5aSx5pWX44GX44G+44GX44Gf44CCIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIuODjeODg+ODiOODr+ODvOOCr+OCqOODqeODvOOBjOeZuueUn+OBl+OBn+OBi+OAgeOCteODvOODkOODvOOBjOS6iOacn+OBm+OBmuaOpee2muOCkumWieOBmOOBvuOBl+OBn+OAgiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAi44K144O844OQ44GM5LiN5q2j44Gq44OH44O844K/44KS6YCB5L+h44GX44G+44GX44Gf44CCIgotCi0jIFNVTiBSRVZJRVdFRAotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAi5YWl5Yqb44Kq44O844OH44Kj44Kq44GM5a2Y5Zyo44GX44Gq44GE44GL54Sh5Yq544Gn44GC44KL44Gf44KB44CBQVZJIOOCueODiOODquODvOODoOOBr+WjiuOCjOOBvuOBmeOAgiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAi44GT44Gu44OV44Kh44Kk44Or44Gr44Gv5YaN55Sf5LiN5Y+v6IO944Gq44K544OI44Oq44O844Og44GM5ZCr44G+44KM44Gm44GE44G+44GZIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLjgZPjga7jg5XjgqHjgqTjg6vjga/kuI3mraPjgarjgZ/jgoHlho3nlJ/jgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLjgZPjga7jg5XjgqHjgqTjg6vjga/lo4rjgozjgabjgYTjgovjgZ/jgoHlho3nlJ/jgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpMiCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIuS4jeato+OBquOCouODiOODoOOCteOCpOOCuiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi44GT44Gu44OV44Kh44Kk44Or44Gv5q2j5bi444Gn44Gv44Gq44GE44Gf44KB44CB5YaN55Sf44GZ44KL44GT44Go44GM44Gn44GN44G+44Gb44KTIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICLjgZPjga7jg5XjgqHjgqTjg6vjga7kuK3jga7li5XnlLvjga/mraPjgZfjgY/lho3nlJ/jgafjgY3jgarjgYTjgYvjgoLjgZfjgozjgb7jgZvjgpMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiIgotIuOBk+OBruODleOCoeOCpOODq+OBq+OBr+WkmuOBj+OBruOCueODiOODquODvOODoOOBjOagvOe0jeOBleOCjOOBpuOBhOOCi+OBn+OCgeOAgeacgOWIneOBriAlZCDlgIvjga7jgb/lho3nlJ/jgZciCi0i44G+44GZIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSLjgrXjg53jg7zjg4jjgZfjgabjgYTjgovjgrnjg4jjg6rjg7zjg6DjgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIJSZWFsIOODoeODh+OCo+OCouOCueODiOODquODvOODoOOBruOBn+OCgeOBriIKLSJHU3RyZWFtZXIgUlRTUCDmi6HlvLXjg5fjg6njgrDjgqTjg7PjgpLjgqTjg7Pjgrnjg4jjg7zjg6vjgZnjgovlv4XopoHjgYzjgYLjgovjgYvjgoLjgZfjgozjgb7jgZvjgpPjgIIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSLjgrXjg53jg7zjg4jjgZfjgabjgYTjgovjgrnjg4jjg6rjg7zjg6DjgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgILliKXjga7ou6LpgIHjg5fjg63jg4jjgrPjg6vjgpLjgqTjg7Pjgrnjg4jjg7zjg6siCi0i44GZ44KL5b+F6KaB44GM44GC44KL44GL44KC44GX44KM44G+44Gb44KT44CC44G+44Gf44Gv44CB5q2j44GX44GEIEdTdHJlYW1lciBSVFNQIOaLoeW8teODl+ODqeOCsOOCpOODs+OBjCIKLSLjgarjgYTjga7jgYvjgoLjgZfjgozjgb7jgZvjgpPjgIIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0i5YaN55Sf55So44Gr44Kq44O844OH44Kj44Kq44OH44OQ44Kk44K544KS6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CC44OH44OQ44Kk44K544GM5LuW44Gu44Ki44OX44OqIgotIuOCseODvOOCt+ODp+ODs+OBp+WIqeeUqOOBleOCjOOBpuOBhOOBvuOBmSIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0i5YaN55Sf55So44Gr44Kq44O844OH44Kj44Kq44OH44OQ44Kk44K544KS6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CC44OH44OQ44Kk44K544KS6ZaL44GP44Gf44KB44GuIgotIuaoqemZkOOBjOOBguOCiuOBvuOBm+OCk+OAgiIKLQotIyBTVU4gUkVWSUVXRUQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAi6Z+z5aOw44OH44OQ44Kk44K544KS6Kqt44G/5Y+W44KK55So44Gr6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KT44CCIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIuWGjeeUn+eUqOOBq+OCquODvOODh+OCo+OCquODh+ODkOOCpOOCueOCkumWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAguOBk+OBruODkOODvOOCuOODp+ODs+OBriAiCi0iT3BlbiBTb3VuZCBTeXN0ZW0g44Gv44CB44GT44Gu44Ko44Os44Oh44Oz44OI44Gr44KI44Gj44Gm44K144Od44O844OI44GV44KM44Gm44GE44G+44Gb44KT44CCIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIuWGjeeUn+OBr+OBk+OBruOCquODvOODh+OCo+OCquODh+ODkOOCpOOCueOBp+OBr+OCteODneODvOODiOOBleOCjOOBpuOBhOOBvuOBm+OCk+OAgiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAi44Kq44O844OH44Kj44Kq5YaN55Sf44Ko44Op44O844Gn44GZ44CCIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLjgZPjga7jgqrjg7zjg4fjgqPjgqrjg4fjg5DjgqTjgrnjgavjgojjgaPjgabpjLLpn7Pjga/jgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpPjgIIiCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLjgqrjg7zjg4fjgqPjgqrjg4fjg5DjgqTjgrnjgYvjgonjga7pjLLpn7PmmYLjgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSLpjLLpn7PnlKjjgavjgqrjg7zjg4fjgqPjgqrjg4fjg5DjgqTjgrnjgpLplovjgY/jgZPjgajjgYzjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgILjg4fjg5DjgqTjgrnjgpLplovjgY/jgZ/jgoHjga4iCi0i5qip6ZmQ44GM44GC44KK44G+44Gb44KT44CCIgotCi0jIFNVTiBSRVZJRVdFRAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAi6Z+z5aOw44OH44OQ44Kk44K544KS6Yyy6Z+z55So44Gr6ZaL44GP44GT44Go44GM44Gn44GN44G+44Gb44KT44CCIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAi6Yyy6Z+z44K944O844K5IgotCi0jIFNVTiBSRVZJRVdFRAotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIuODnuOCpOOCr+ODreODleOCqeODsyIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIuODqeOCpOODs+WFpeWKmyIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICLlhoXolLVDRCIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICJTUERJRuWFpeWKmyIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICJBVVggMeWFpeWKmyIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJBVVggMuWFpeWKmyIKLQotIywgZnV6enkKLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAi44Or44O844OX44OQ44OD44KvIgotCi0jLCBmdXp6eQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAi44Or44O844OX44OQ44OD44KvIgotCi0jIFNVTiBSRVZJRVdFRAotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAi6Z+z6YePIgotCi0jIFNVTiBSRVZJRVdFRAotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIuOCsuOCpOODsyIKLQotIyBTVU4gUkVWSUVXRUQKLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICLjg6Ljg4vjgr/jg7wiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICLjg5Pjg6vjg4jjgqTjg7Pjgrnjg5Tjg7zjgqsiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIuODmOODg+ODieODleOCqeODsyIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICLjg6njgqTjg7Plh7rlipsiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElG5Ye65YqbIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMeWHuuWKmyIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYIDLlh7rlipsiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICUyJHMg44GL44KJ44CAJTEkZCDjg5DjgqTjg4joqq3jgb/ovrzjgb/mmYLjgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIuODh+ODkOOCpOOCuSclcyfjgYzkvZzmpa3jgafjgY3jgovjg5Pjg4fjgqrlvaLlvI/jga7mlbDjgYjkuIrjgZLjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBi+OCieODkOODg+ODleOCoeOCkuODnuODg+ODl+OBp+OBjeOBvuOBm+OCk+OAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44Gu44OJ44Op44Kk44OQ44GvSU/jg6Hjgr3jg4Pjg4klZOOCkuOCteODneODvOODiOOBl+OBpuOBhOOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSLjg4fjg5DjgqTjgrkgJyVzJyDjga7jg4njg6njgqTjg5Djga/nn6XjgonjgozjgabjgYTjgovjgYTjgYvjgarjgotJT+ODoeOCveODg+ODieOCguOCteODneODvOODiOOBl+OBpuOBhOOBvuOBmyIKLSLjgpPjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAi44OH44OQ44Kk44K5YCVzJ+OBr+ODk+OCuOODvOeKtuaFi+OBp+OBmSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44GvICVkeCVkIOOBp+OCreODo+ODl+ODgeODo+OBp+OBjeOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44Gv5oyH5a6a44GV44KM44Gf44OV44Kp44O844Oe44OD44OI44Gn44Kt44Oj44OX44OB44Oj44Gn44GN44G+44Gb44KTIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjga/jg5Pjg4fjgqrjgq3jg6Pjg5fjg4Hjg6PjgpLjgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZvjgpMiCi0KLSMgU1VOIFJFVklFV0VECi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg5LiK44Gu44OR44Op44Oh44O844K/44KS5Y+W5b6X44Gn44GN44G+44Gb44KT44CCIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICLjg5Pjg4fjgqrjg4fjg5DjgqTjgrnjgYzmlrDjgZfjgYTjg5Xjg6zjg7zjg6Djg6zjg7zjg4joqK3lrprjgpLlj5fjgZHku5jjgZHjgb7jgZvjgpPjgIIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAi44OT44OH44Kq44OH44OQ44Kk44K544GM5paw44GX44GE44OV44Os44O844Og44Os44O844OI6Kit5a6a44KS5Y+X44GR5LuY44GR44G+44Gb44KT44CCIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjga7jg4njg6njgqTjg5Djga9JT+ODoeOCveODg+ODiSVk44KS44K144Od44O844OI44GX44Gm44GE44G+44Gb44KTIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBruODieODqeOCpOODkOOBr0lP44Oh44K944OD44OJJWTjgpLjgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZvjgpMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIuODk+ODh+OCquODh+ODkOOCpOOCueOBr+ODkOODg+ODleOCoeODl+ODvOODq+OCkuS9nOaIkOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAgiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIuODk+ODh+OCquODh+ODkOOCpOOCueOBr+ODkOODg+ODleOCoeODl+ODvOODq+OCkuS9nOaIkOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAgiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclMiRzJyDkuIrjga7jg4Hjg6Xjg7zjg4rjg7wgJTEkZCDjga7oqK3lrprjga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5JyVzJyDjga7og73lipvjgpLlj5blvpfjgZnjgovmmYLjgavjgqjjg6njg7zjgYznmbrnlJ/jgZfjgb7jgZfjgZ/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjga/jg4Hjg6Xjg7zjg4rjgafjga/jgYLjgorjgb7jgZvjgpPjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDkuIrjga7jg6njgrjjgqrlhaXlipvjga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyUyJHMnIOS4iuOBruWFpeWKmyUxJGQg44Gu6Kit5a6a44Gr5aSx5pWX44GX44G+44GX44Gf44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjga7jg5/jg6Xjg7zjg4jnirbmhYvjga7lpInmm7TjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBruODieODqeOCpOODkOOBr0lP44Oh44K944OD44OJJWTjgpLjgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZvjgpMiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICLjg5Pjg4fjgqrjg4fjg5DjgqTjgrnjgYzmlrDjgZfjgYTjg5Xjg6zjg7zjg6Djg6zjg7zjg4joqK3lrprjgpLlj5fjgZHku5jjgZHjgb7jgZvjgpPjgIIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICLjg5Pjg4fjgqrjg4fjg5DjgqTjgrnjgYzmlrDjgZfjgYTjg5Xjg6zjg7zjg6Djg6zjg7zjg4joqK3lrprjgpLlj5fjgZHku5jjgZHjgb7jgZvjgpPjgIIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAi44OT44OH44Kq44OH44OQ44Kk44K544GM5paw44GX44GE44OV44Os44O844Og44Os44O844OI6Kit5a6a44KS5Y+X44GR5LuY44GR44G+44Gb44KT44CCIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJKUEVH55S75YOP44Gu44OH44Kz44O844OJ44Gr5aSx5pWX44GX44G+44GX44GfIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0i44OH44OQ44Kk44K5ICclcycg44Gu6IO95Yqb44KS5Y+W5b6X44GZ44KL5pmC44Gr44Ko44Op44O844GM55m655Sf44GX44G+44GX44GfOiB2NGwyIOODieODqeOCpOODkOOBp+OBr+OBguOCiiIKLSLjgb7jgZvjgpPjgIJ2NGwxIOODieODqeOCpOODkOOBp+OBquOBhOOBi+OAgeODgeOCp+ODg+OCr+OBl+OBpuOBj+OBoOOBleOBhOOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAlMiRzIOWGheOBruWFpeWKmyAlMSRkIOOBruWxnuaAp+OBruOCr+OCqOODquODvOOBq+WkseaVl+OBl+OBvuOBl+OBnyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLjg4fjg5DjgqTjgrkgJyUyJHMnIOS4iuOBruODgeODpeODvOODiuODvCAlMSRkIOOBruioreWumuOBruWPluW+l+OBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOS4iuOBruODjuODq+ODoOOBruWPluW+l+OBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44Gu44Kz44Oz44OI44Ot44O844Or5bGe5oCn44Gu5Y+W5b6X44Gr5aSx5pWX44GX44G+44GX44GfIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSclcyfjgpLnibnlrprjgafjgY3jgb7jgZvjgpPjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44GT44KM44Gv44OH44OQ44Kk44K5ICclcycg44Gn44Gv44GC44KK44G+44Gb44KTIgotCi0jIFNVTiBSRVZJRVdFRAotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOCkuiqreOBv+WPluOCiueUqOOBqOabuOOBjei+vOOBv+eUqOOBq+mWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBr+OCreODo+ODl+ODgeODo+ODh+ODkOOCpOOCueOBp+OBr+OBguOCiuOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44Gv5Ye65Yqb44OH44OQ44Kk44K544Gn44Gv44GC44KK44G+44Gb44KTIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44Gv5Ye65Yqb44OH44OQ44Kk44K544Gn44Gv44GC44KK44G+44Gb44KTIgotCi0jIFNVTiBSRVZJRVdFRAotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOCkuiqreOBv+WPluOCiueUqOOBqOabuOOBjei+vOOBv+eUqOOBq+mWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCkyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg5LiK44Gu44OO44Or44Og44Gu6Kit5a6a44Gr5aSx5pWX44GX44G+44GX44Gf44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44Gu54++5Zyo44Gu44OB44Ol44O844OK44O844Gu5ZGo5rOi5pWw44Gu5Y+W5b6X44Gr5aSx5pWX44GX44G+44GX44GfIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBruODgeODpeODvOODiuODvOOBruWRqOazouaVsOOBriAlbHUgSHog44G444Gu6Kit5a6a44Gr5aSx5pWX44GX44G+44GX44GfIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBruS/oeWPt+OBruW8t+OBleOBruWPluW+l+OBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi44OH44OQ44Kk44K5ICclMiRzJyDkuIrjga7jgrPjg7Pjg4jjg63jg7zjg6sgJTEkZCDjga7lgKTjga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSLjg4fjg5DjgqTjgrkgJyUzJHMnIOS4iuOBruOCs+ODs+ODiOODreODvOODqyAlMiRkIOOBruWApOOCkiAlMSRkIOOBuOioreWumuOBmeOCi+OBk+OBqOOBq+WkseaVl+OBl+OBvuOBlyIKLSLjgZ/jgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLjg4fjg5DjgqTjgrkgJyVzJyDkuIrjga7nj77lnKjjga7lhaXlipvjga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgILjg6njgrjjgqrjg4fjg5DjgqTjgrnjgYvjgoLjgZfjgozjgb7jgZsiCi0i44KTIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLjg4fjg5DjgqTjgrkgJyVzJyDkuIrjga7nj77lnKjjga7lh7rlipvjga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgILjg6njgrjjgqrjg4fjg5DjgqTjgrnjgYvjgoLjgZfjgozjgb7jgZsiCi0i44KTIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIuWHuuWKmyVk44KS44OH44OQ44Kk44K5ICVzIOOBq+ioreWumuOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAgiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIuWun+ihjOaZguOBruino+WDj+W6puWkieabtOOBr+OCteODneODvOODiOOBleOCjOOBpuOBhOOBvuOBm+OCk+OAgiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAi44Kv44Ot44OD44Kv44Gq44GX44Gn44Gv5YuV5L2c44Gn44GN44G+44Gb44KT44CCIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICLlhoXpg6jjg4fjg7zjgr/jgrnjg4jjg6rjg7zjg6Djgqjjg6njg7wiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICLlhoXpg6jjg4fjg7zjgr/jg5Xjg63jg7zjgqjjg6njg7zjgIIiCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIuODh+ODkOOCpOOCuSAnJXMnIOOBr+ODk+ODh+OCquOCreODo+ODl+ODgeODo+OCkuOCteODneODvOODiOOBl+OBpuOBhOOBvuOBm+OCkyIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIuOCteOCpuODs+ODieOCteODvOODkOODvOOBuOOBruaOpee2muOBq+WkseaVl+OBl+OBvuOBl+OBnyIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICLjgrXjgqbjg7Pjg4njgrXjg7zjg5Djg7zjga7jgrHjgqTjg5Hjg5Pjg6rjg4bjgqPjga7jgq/jgqjjg6rjg7zjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAi5L2O6Z+zIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAi6auY6Z+zIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICLjgrfjg7PjgrsiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAi44K544OU44O844KrIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAi44Op44Kk44Oz5YWl5YqbIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAi44Of44Kt44K144O8IgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIumMsumfsyIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICLlhaXlipvjgrLjgqTjg7MiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIuWHuuWKm+OCsuOCpOODsyIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIuODqeOCpOODsyAxIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAi44Op44Kk44OzIDIiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICLjg6njgqTjg7MgMyIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIuODh+OCuOOCv+ODqyAxIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAi44OH44K444K/44OrIDIiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICLjg4fjgrjjgr/jg6sgMyIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAi44OV44Kp44Oz5YWl5YqbIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAi44OV44Kp44Oz5Ye65YqbIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICLjg5Pjg4fjgqoiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIuODqeOCuOOCqiIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICLpn7Plo7Djg4fjg5DjgqTjgrnjgpLjg5/jgq3jgrXjg7zjgrPjg7Pjg4jjg63jg7zjg6vnlKjjgavplovjgY/jgZPjgajjgYzjgafjgY3jgb7jgZvjgpPjgIIiCi0KLSN+IG1zZ2lkICIiCi0jfiAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiBUaGlzIHZlcnNpb24gb2YgIgotI34gInRoZSBPcGVuIFNvdW5kIFN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICLjg5/jgq3jgrXjg7zjgrPjg7Pjg4jjg63jg7zjg6vnlKjjgavjgqrjg7zjg4fjgqPjgqrjg4fjg5DjgqTjgrnjgpLplovjgY/jgZPjgajjgYzjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIIiCi0jfiAiT3BlbiBTb3VuZCBTeXN0ZW3jga7jgZPjga7jg5Djg7zjgrjjg6fjg7Pjgafjga/jgZPjga7opoHntKDjgavjgojjgaPjgabjgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZsiCi0jfiAi44KT44CCIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICLjg57jgrnjgr8iCi0KLSN+IG1zZ2lkICJGcm9udCIKLSN+IG1zZ3N0ciAi44OV44Ot44Oz44OIIgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAi44Oq44KiIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi44OY44OD44OJ44OV44Kp44OzIgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICLjgrvjg7Pjgr/jg7wiCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICLjgrXjg6njgqbjg7Pjg4kiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICLjgrXjgqTjg4kiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVjlh7rlipsiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIuacgOWkp+a3seW6pjogIgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICIzROOCu+ODs+OCv+ODvCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICIzRCBFbmhhbmNlIgotI34gbXNnc3RyICLoibLjgpLlvLfoqr/jgZfjgabjgYTjgb7jgZkiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIumbu+ipsSIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICLjg5Pjg4fjgqrlhaXlipsiCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkFVWOWFpeWKmyIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICLpjLLpn7PjgrLjgqTjg7MiCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAi5Ye65Yqb44Ky44Kk44OzIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAi44Oe44Kk44Kv44Ot44OV44Kp44Oz44OW44O844K544OIIgotCi0jfiBtc2dpZCAiRGlhZ25vc3RpYyIKLSN+IG1zZ3N0ciAi6Ki65patIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAi5L2O6Z+z44OW44O844K544OIIgotCi0jfiBtc2dpZCAiUGxheWJhY2sgUG9ydHMiCi0jfiBtc2dzdHIgIuODl+ODrOOCpOODkOODg+OCr+ODneODvOODiCIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICLlhaXlipsiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAi44Oi44OL44K/44O844K944O844K5IgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAi44Kt44O844Oc44O844OJ44OT44O844OX6Z+zIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAi5b2r6YeR44KS6KGo54++44GX44G+44GZIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICLjgrnjg4bjg6zjgqoiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAi44K144Op44Km44Oz44OJ44K144Km44Oz44OJIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICLjg57jgqTjgq/jg63jg5Xjgqnjg7PjgrLjgqTjg7MiCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAi44K544OU44O844Kr44K944O844K5IgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIuODnuOCpOOCr+ODreODleOCqeODs+OCveODvOOCuSIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIuOCuOODo+ODg+OCryIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAi44K744Oz44K/44O8IC8gTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAi44K544OG44Os44Kq44Of44OD44Kv44K5IgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIuODouODjuODqeODq+ODn+ODg+OCr+OCuSIKLQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAi5YWl5Yqb44Of44OD44Kv44K5IgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICLjg57jgqTjgq/jg63jg5Xjgqnjg7MxIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICLjg57jgqTjgq/jg63jg5Xjgqnjg7MyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIuODh+OCuOOCv+ODq+WHuuWKmyIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIuODh+OCuOOCv+ODq+WFpeWKmyIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAi44Oi44OH44OgIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAi44OY44OD44OJ44K744OD44OIIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIuOBneOBruS7liIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgIuOBquOBlyIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICLjgqrjg7MiCi0KLSN+IG1zZ2lkICJPZmYiCi0jfiBtc2dzdHIgIuOCquODlSIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIuODn+ODpeODvOODiCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICLpgJ/jgYQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmVyeSBMb3ciCi0jfiBtc2dzdHIgIuS9juWTgeS9jSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIuS9jumfsyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIuS4remfsyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICLpq5jpn7MiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICLpq5jlk4HkvY0iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAi44OX44Ot44OA44Kv44K344On44OzIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAi44OV44Ot44Oz44OI44OR44ON44Or44Gu44Oe44Kk44Kv44Ot44OV44Kp44OzIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAi44OV44Ot44Oz44OI44OR44ON44Or44Gu44Op44Kk44Oz5YWl5YqbIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi44OV44Ot44Oz44OI44OR44ON44Or44Gu44OY44OD44OJ44OV44Kp44OzIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIuODleODreODs+ODiOODkeODjeODq+OBruODqeOCpOODs+WHuuWKmyIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi57eR6Imy44Kz44ON44Kv44K/IgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuODlOODs+OCr+iJsuOCs+ODjeOCr+OCvyIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLpnZLoibLjgrPjg43jgq/jgr8iCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIueZveiJsuOCs+ODjeOCr+OCvyIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi6buS6Imy44Kz44ON44Kv44K/IgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuOCsOODrOODvOiJsuOCs+ODjeOCr+OCvyIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuOCquODrOODs+OCuOiJsuOCs+ODjeOCr+OCvyIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIui1pOiJsuOCs+ODjeOCr+OCvyIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIum7hOiJsuOCs+ODjeOCr+OCvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTcHJlYWQgT3V0cHV0IgotI34gbXNnc3RyICLmg4XloLHlh7rlips6XG4iCi0KLSN+IG1zZ2lkICJEb3dubWl4IgotI34gbXNnc3RyICLjg4Djgqbjg7Pjg5/jg4Pjgq/jgrkiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICLku67mg7Pjg5/jgq3jgrXjg7zlhaXlipsiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAi5Luu5oOz44Of44Kt44K144O85Ye65YqbIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAi5Luu5oOz44Of44Kt44K144O844OB44Oj44Oz44ON44OrIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICLmqZ/og70iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIuapn+iDvSIKLQotI34gbXNnaWQgIkdvdCB1bmV4cGVjdGVkIGZyYW1lIHNpemUgb2YgJXUgaW5zdGVhZCBvZiAldS4iCi0jfiBtc2dzdHIgIuS6iOacn+OBl+OBquOBhOODleODrOODvOODoOOCteOCpOOCuiAoJTIkdSDjgafjga/jgarjgY8gJTEkdSkg44KS5Y+W5b6X44GX44G+44GX44Gf44CCIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIiIKLSN+ICLjg4fjg5DjgqTjgrkgJyUyJHMnIOS4iuOBpyAlMSRkIOODkOOCpOODiOOBruiqreOBv+i+vOOBv+aZguOBq+OCqOODqeODvOOBjOeZuueUn+OBl+OBvuOBl+OBn+OAgiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAi44OH44OQ44Kk44K5ICclcycg44GL44KJ44OQ44OD44OV44Kh44KS44Oe44OD44OX44Gn44GN44G+44Gb44KT44CCIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjgYvjgonjg5Pjg4fjgqrjg5Xjg6zjg7zjg6Djga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiIgotI34gIiVkIOWbnuODquODiOODqeOCpOOBl+OBvuOBl+OBn+OBjOWkseaVl+OBl+OBvuOBl+OBn+OAguODh+ODkOOCpOOCuSAlc+OAguOCt+OCueODhuODoOOCqOODqeODvDogJXMiCi0KLSN+IG1zZ2lkICIiCi0jfiAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIE5vdCBlbm91Z2ggbWVtb3J5LiIKLSN+IG1zZ3N0ciAiIgotI34gIuODh+ODkOOCpOOCuSAnJXMnIOOBi+OCieODk+ODh+OCquODleODrOODvOODoOOCkuWPluW+l+OBl+OCiOOBhuOBqOOBl+OBvuOBl+OBn+OBjOWkseaVl+OBl+OBvuOBl+OBn+OAguODoeODoiIKLSN+ICLjg6rjgYzljYHliIbjgavjgYLjgorjgb7jgZvjgpPjgIIiCi0KLSN+IG1zZ2lkICJObyBmcmVlIGJ1ZmZlcnMgZm91bmQgaW4gdGhlIHBvb2wgYXQgaW5kZXggJWQuIgotI34gbXNnc3RyICLjgqTjg7Pjg4fjg4Pjgq/jgrkgJWQg44Gn44OX44O844Or5YaF44Gr56m644GN44OQ44OD44OV44Kh44GM44GC44KK44G+44Gb44KT44CCIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjgYvjgonjg5Djg4Pjg5XjgqHjgpLlj5blvpfjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIIiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZ2V0IGVub3VnaCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICIiCi0jfiAi44OH44OQ44Kk44K5ICclcycg44GL44KJ5Y2B5YiG44Gq44OQ44OD44OV44Kh44O86aCY5Z+f44KS5Y+W5b6X44GZ44KL44GT44Go44GM44Gn44GN44G+44Gb44KT44Gn44GX44GfIgotCi0jIFNVTiBSRVZJRVdFRAotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIENELiIKLSN+IG1zZ3N0ciAi44OV44Kh44Kk44OrIFwiJXNcIiDjgavmm7jjgY3ovrzjgoDjgZPjgajjgYzjgafjgY3jgb7jgZvjgpPjgIIiCi0KLSMgU1VOIFJFVklFV0VECi0jLCBmdXp6eQotI34gbXNnaWQgIkRpc2MgaXMgbm90IGFuIEF1ZGlvIENELiIKLSN+IG1zZ3N0ciAi44OH44OQ44Kk44K544GM6ZaL44GE44Gm44GE44G+44Gb44KT44CCIgotCi0jIFNVTiBSRVZJRVdFRAotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3Qgc2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi0jfiBtc2dzdHIgIkNEIOODh+ODkOOCpOOCueOCkuiqreOBv+WPluOCiueUqOOBq+mWi+OBj+OBk+OBqOOBjOOBp+OBjeOBvuOBm+OCk+OAgiIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiBwbGF5IGF1ZGlvIHVzaW5nIGFueSBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSBvc3NzaW5rLCBlc2RzaW5rIGFuZCBhbHNhc2luay4gVGhlIGF1ZGlvc2luayBjYW4gYmUgIgotI34gImEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAi44Kq44O844OH44Kj44Kq44KS5YaN55Sf44GZ44KL44Go44GN44CBR1N0cmVhbWVyIOOBr+S7u+aEj+OBruaVsOOBruWHuuWKm+imgee0oOOCkuS9v+eUqOOBp+OBjeOBvuOBmeOAguS9vyIKLSN+ICLnlKjjgafjgY3jgovlh7rlipvopoHntKDjga/jgIFvc3NzaW5r44CBZXNkc2lua+OAgeOBiuOCiOOBsyBhbHNhc2luayDjgafjgZnjgIJhdWRpb3Npbmsg44Gv5Y2YIgotI34gIuOBquOCiyAxIOOBpOOBruimgee0oOOBp+OBr+OBquOBj+OAgeODkeOCpOODl+ODqeOCpOODs+OBruS4gOmDqOOBq+OBquOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAgiIKLQotIyBTVU4gUkVWSUVXRUQKLSMsIGZ1enp5Ci0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcGxheSB2aWRlbyB1c2luZyBhbnkgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgeHZpbWFnZXNpbmssIHhpbWFnZXNpbmssIHNkbHZpZGVvc2luayBhbmQgYWFzaW5rLiAiCi0jfiAiVGhlIHZpZGVvc2luayBjYW4gYmUgYSBwYXJ0aWFsIHBpcGVsaW5lIGluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICLjg5Pjg4fjgqrjgpLlho3nlJ/jgZnjgovjgajjgY3jgIFHU3RyZWFtZXIg44Gv5Lu75oSP44Gu5pWw44Gu5Ye65Yqb6KaB57Sg44KS5L2/55So44Gn44GN44G+44GZ44CC5L2/55So44GnIgotI34gIuOBjeOCi+WHuuWKm+imgee0oOOBr+OAgXh2aWRlb3NpbmvjgIFzZGx2aWRlb3NpbmvjgIHjgYrjgojjgbMgYWFzaW5rIOOBp+OBmeOAgnZpZGVvc2luayDjga8iCi0jfiAi5Y2Y44Gq44KLIDEg44Gk44Gu6KaB57Sg44Gn44Gv44Gq44GP44CB44OR44Kk44OX44Op44Kk44Oz44Gu5LiA6YOo44Gr44Gq44KL44GT44Go44GM44Gn44GN44G+44GZ44CCIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHB1dCB2aXN1YWxpemF0aW9uIHBsdWdpbnMgaW4gYSBwaXBlbGluZSB0byB0cmFuc2Zvcm0gYXVkaW8gIgotI34gInN0cmVhbSBpbiB2aWRlbyBmcmFtZXMuIERlZmF1bHQgaXMgZ29vbSBidXQgbW9yZSB2aXN1YWxpemF0aW9uIHBsdWdpbnMgIgotI34gIndpbGwgYmUgcG9ydGVkIHNvb24uIFRoZSB2aXN1YWxpemF0aW9uIHBsdWdpbiBjYW4gYmUgYSBwYXJ0aWFsIHBpcGVsaW5lICIKLSN+ICJpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIOOBr+imluimmuWMluODl+ODqeOCsOOCpOODs+OCkuODkeOCpOODl+ODqeOCpOODs+OBq+ioreWumuOBl+OBpuOAgeOCquODvOODh+OCo+OCquOCueODiOODquODvOODoCIKLSN+ICLjgpLjg5Pjg4fjgqrjg5Xjg6zjg7zjg6DjgavlpInmj5vjgafjgY3jgb7jgZnjgILjg4fjg5Xjgqnjg6vjg4jjga8gZ29vbSDjgafjgZnjgYzjgIHjgojjgorlpJrjgY/jga7oppbopprljJYiCi0jfiAi44OX44Op44Kw44Kk44Oz44GM44GZ44GQ44Gr56e75qSN44GV44KM44KL5LqI5a6a44Gn44GZ44CC6KaW6Kaa5YyW44OX44Op44Kw44Kk44Oz44Gv5Y2Y44Gq44KLIDEg44Gk44Gu6KaB57SgIgotI34gIuOBp+OBr+OBquOBj+OAgeODkeOCpOODl+ODqeOCpOODs+OBruS4gOmDqOOBq+OBquOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAgiIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgYXVkaW8gdXNpbmcgYW55IG51bWJlciBvZiBpbnB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc3JjLCBlc2RzcmMgYW5kIGFsc2FzcmMuIFRoZSBhdWRpbyBzb3VyY2UgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIuOCquODvOODh+OCo+OCquOCkuiomOmMsuOBmeOCi+OBqOOBjeOAgUdTdHJlYW1lciDjga/ku7vmhI/jga7mlbDjga7lhaXlipvopoHntKDjgpLkvb/nlKjjgafjgY3jgb7jgZnjgILkvb8iCi0jfiAi55So44Gn44GN44KL5YWl5Yqb6KaB57Sg44Gv44CBb3Nzc3Jj44CBZXNkc3Jj44CB44GK44KI44GzIGFsc2FzcmMg44Gn44GZ44CC44Kq44O844OH44Kj44Kq44K944O844K5IgotI34gIuOBr+WNmOOBquOCiyAxIOOBpOOBruimgee0oOOBp+OBr+OBquOBj+OAgeODkeOCpOODl+ODqeOCpOODs+OBruS4gOmDqOOBq+OBquOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAgiIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgdmlkZW8gZnJvbSBhbnkgbnVtYmVyIG9mIGlucHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSB2NGxzcmMgYW5kIHZpZGVvdGVzdHNyYy4gVGhlIHZpZGVvIHNvdXJjZSBjYW4gYmUgYSAiCi0jfiAicGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAi44OT44OH44Kq44KS6KiY6Yyy44GZ44KL44Go44GN44CBR1N0cmVhbWVyIOOBr+S7u+aEj+OBruaVsOOBruWFpeWKm+imgee0oOOCkuS9v+eUqOOBp+OBjeOBvuOBmeOAguS9v+eUqOOBpyIKLSN+ICLjgY3jgovlhaXlipvopoHntKDjga/jgIF2NGxzcmMg44GK44KI44GzIHZpZGVvdGVzdHNyYyDjgafjgZnjgILjg5Pjg4fjgqrjgr3jg7zjgrnjga/ljZjjgarjgosgMSDjgaQiCi0jfiAi44Gu6KaB57Sg44Gn44Gv44Gq44GP44CB44OR44Kk44OX44Op44Kk44Oz44Gu5LiA6YOo44Gr44Gq44KL44GT44Go44GM44Gn44GN44G+44GZ44CCIgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvIHNvdXJjZSIKLSN+IG1zZ3N0ciAi44OH44OV44Kp44Or44OI44GuIEdTdHJlYW1lciDjgqrjg7zjg4fjgqPjgqrjgr3jg7zjgrkiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW9zaW5rIgotI34gbXNnc3RyICLjg4fjg5Xjgqnjg6vjg4jjga4gR1N0cmVhbWVyIGF1ZGlvc2luayIKLQotIyBTVU4gUkVWSUVXRUQKLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aWRlbyBzb3VyY2UiCi0jfiBtc2dzdHIgIuODh+ODleOCqeODq+ODiOOBriBHU3RyZWFtZXIg44OT44OH44Kq44K944O844K5IgotCi0jIFNVTiBSRVZJRVdFRAotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIHZpZGVvc2luayIKLSN+IG1zZ3N0ciAi44OH44OV44Kp44Or44OI44GuIEdTdHJlYW1lciB2aWRlb3NpbmsiCi0KLSMgU1VOIFJFVklFV0VECi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlzdWFsaXphdGlvbiBwbHVnaW4iCi0jfiBtc2dzdHIgIuODh+ODleOCqeODq+ODiOOBriBHU3RyZWFtZXIg6KaW6Kaa5YyW44OX44Op44Kw44Kk44OzIgotCi0jIFNVTiBSRVZJRVdFRAotIywgZnV6enkKLSN+IG1zZ2lkICJkZXNjcmlwdGlvbiBmb3IgZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW9zaW5rIgotI34gbXNnc3RyICLjg4fjg5Xjgqnjg6vjg4jjga4gR1N0cmVhbWVyIGF1ZGlvc2luayIKLQotIyBTVU4gUkVWSUVXRUQKLSMsIGZ1enp5Ci0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc3JjIgotI34gbXNnc3RyICLjg4fjg5Xjgqnjg6vjg4jjga4gR1N0cmVhbWVyIOOCquODvOODh+OCo+OCquOCveODvOOCuSIKLQotI34gbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcy4nIgotI34gbXNnc3RyICLjg4fjg5DjgqTjgrkgJyVzJyDjga7jgrPjg7Pjg4jjg63jg7zjg6vlsZ7mgKfjga7lj5blvpfjgavlpLHmlZfjgZfjgb7jgZfjgZ8iCmRpZmYgLS1naXQgYS9wby9sdC5nbW8gYi9wby9sdC5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhZjU4NzIuLjAwMDAwMDAKLS0tIGEvcG8vbHQuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vbHQucG8gYi9wby9sdC5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYxZWUyMS4uMDAwMDAwMAotLS0gYS9wby9sdC5wbworKysgL2Rldi9udWxsCkBAIC0xLDg4OSArMCwwIEBACi0jIExpdGh1YW5pYW4gdHJhbnNsYXRpb24gZm9yIGdzdC1wbHVnaW5zLWdvb2QuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jIEdpbnRhdXRhcyBNaWxpYXVza2FzIDxnaW50YXNAYWtsLmx0PiwgMjAwOC4KLSMgQXVyaW1hcyDEjGVybml1cyA8YXVyaXNjNEBnbWFpbC5jb20+LCAyMDEwLgotIyDFvXlnaW1hbnRhcyBCZXJ1xI1rYSA8dWlkMEBha2wubHQ+LCAyMDEwLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAwLjEwLjIzLjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wNy0xNiAxOTozNCswMzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiDFvXlnaW1hbnRhcyBCZXJ1xI1rYSA8dWlkMEBha2wubHQ+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogTGl0aHVhbmlhbiA8a29tcF9sdEBrb25mZXJlbmNpam9zLmx0PlxuIgotIkxhbmd1YWdlOiBsdFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIChuIgotIiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKLSJYLUdlbmVyYXRvcjogVmlydGFhbCAwLjYuMVxuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIk5lcGF2eWtvIGRla29kdW90aSBKUEVHIHBhdmVpa3NsxJdsaW8iCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIuKAniVz4oCcIGF0bGlla2Eg4oCeJXPigJwiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIk5lcGF2eWtvIHByaXNpanVuZ3RpIHByaWUgc2VydmVyaW8iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIk5lcGF2eWtvIHByaXNpanVuZ3RpIHByaWUgc2VydmVyaW8iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIk5lcGF2eWtvIHByaXNpanVuZ3RpIHByaWUgZ2Fyc28gc2VydmVyaW8iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiTsSXcmEgxK92ZXN0aWVzIGdhcnNvIGFyYmEgamlzIG5ldGlua2FtYXMsIEFWSSBzcmF1dGFzIGJ1cyBzdWdhZGludGFzLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAixaBpYW1lIGZhaWxlIG7El3JhIGF0a3VydGluxbMgc3JhdXTFsy4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkZhaWxhcyBuZXRpbmthbWFzIGlyIG5lZ2FsaSBixat0aSBhdGt1cnRhcy4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJGYWlsYXMgc3VnYWRpbnRhcyBpciBuZWdhbGkgYsWrdGkgYXRrdXJ0YXMuIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkZhaWxhcyBuZWJhaWd0YXMgaXIgbmVnYWxpIGLFq3RpIGF0a3VydGFzLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAixaBpYW1lIGZhaWxlIGVzYW50aXMgdmFpemRvIMSvcmHFoWFzIGdhbGkgYsWrdGkgYXRrdXJ0YXMgbmVrb3Jla3RpxaFrYWkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIsWgaWFtZSBmYWlsZSBwZXIgZGF1ZyBzcmF1dMWzLiBHcm9qYW1pIHRpayBwaXJtaWVqaSAlZCIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iTmVyYXN0YSBwYWxhaWtvbcWzIHNyYXV0xbMuIEp1bXMgZ2FsaSByZWlrxJd0aSDEr2RpZWd0aSBHU3RyZWFtZXIgUlRTUCAiCi0icGFwaWxkaW5pbyDEr3NraWVwxK8gUmVhbCBtZWRpYSBzcmF1dGFtcy4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJOZXJhc3RhIHBhbGFpa29txbMgc3JhdXTFsy4gSnVtcyBnYWxpIHJlaWvEl3RpIGxlaXN0aSBkYXVnaWF1IHRyYW5zcG9ydG8gIgotInByb3Rva29sxbMsIGFyYmEgasWrcyBuZXR1cml0ZSB0aW5rYW1vIEdTdHJlYW1lciBSVFNQIHBhcGlsZGluaW8gxK9za2llcGlvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJOZXBhdnlrbyBhdHZlcnRpIGdhcnNvIMSvcmVuZ2luaW8gZ3JvamltdWkuIMSucmVuZ2luxK8gbmF1ZG9qYSBraXRhIHByb2dyYW1hLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTmVwYXZ5a28gYXR2ZXJ0aSBnYXJzbyDEr3JlbmdpbmlvIGdyb2ppbXVpLiBKxatzIG5ldHVyaXRlIGxlaWRpbW8gYXR2ZXJ0aSAiCi0ixK9yZW5naW7Ery4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXR2ZXJ0aSBnYXJzbyDEr3JlbmdpbmlvIGdyb2ppbXVpLiAiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTmVwYXZ5a28gYXR2ZXJ0aSBnYXJzbyDEr3JlbmdpbmlvIGdyb2ppbXVpLiDFoGlzIGVsZW1lbnRhcyBuZXBhbGFpa28gxaFpb3MgT3BlbiAiCi0iU291bmQgU3lzdGVtIHZlcnNpam9zLiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLFoGlzIGdhcnNvIMSvcmVuZ2lueXMgbmVwYWxhaWtvIGdyb2ppbW8uIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJHYXJzbyBncm9qaW1vIGtsYWlkYS4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIsWgaXMgZ2Fyc28gxK9yZW5naW55cyBuZXBhbGFpa28gZ3Jvamltby4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJLbGFpZGEgxK9yYcWhYW50IGnFoSBnYXJzbyDEr3JlbmdpbmlvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5lcGF2eWtvIGF0dmVydGkgZ2Fyc28gxK9yZW5naW5pbyDEr3JhxaF5bXVpLiBKxatzIG5ldHVyaXRlIGxlaWRpbW8gYXR2ZXJ0aSAiCi0ixK9yZW5naW7Ery4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIk5lcGF2eWtvIGF0dmVydGkgZ2Fyc28gxK9yZW5naW5pbyDEr3JhxaF5bXVpLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIsSucmHFoXltbyDFoWFsdGluaXMiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbmFzIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAixK5laW5hbnRpIGxpbmlqYSIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICJWaWRpbmlzIENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIMSvdmVzdGlzIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIMSvdmVzdGlzIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIMSvdmVzdGlzIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJQZXJkdW90aSByYXR1IgotCi0jLCBmdXp6eQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiUGVyZHVvdGkgcmF0dSIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiR2Fyc3VtYXMiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJHYXJzaW5pbWFzIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvcml1cyIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIkludGVncnVvdGFzIGdhcnNpYWthbGJpcyIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiQXVzaW7El3MiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiScWhZWluYW50aSBsaW5pamEiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElGIGnFoXZlc3RpcyIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiQVVYIDEgacWhdmVzdGlzIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICJBVVggMiBpxaF2ZXN0aXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2xhaWRhIHNrYWl0YW50ICVkIGJhaXR1cyAoLcWzKSBpxaEgxK9yZW5naW5pbyDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmVwYXZ5a28gacWhZMSXc3R5dGkgYnVmZXJpxbMgacWhIMSvcmVuZ2luaW8g4oCeJXPigJwiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICLErnJlbmdpbmlvIOKAniVz4oCcIHR2YXJreWtsxJcgbmVwYWxhaWtvIGpva2nFsyDFvmlub23FsyDEr3JhxaF5bW8gYsWrZMWzLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICLErnJlbmdpbmlvIOKAniVz4oCcIHR2YXJreWtsxJcgbmVwYWxhaWtvIGpva2nFsyDFvmlub23FsyDEr3JhxaF5bW8gYsWrZMWzLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAixK5yZW5naW55cyDigJ4lc+KAnCBuxJdyYSBpxaF2ZXN0aWVzIMSvcmVuZ2lueXMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAixK5yZW5naW55cyDigJ4lc+KAnCBuxJdyYSDEr3JhxaF5bW8gxK9yZW5naW55cy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICLErnJlbmdpbnlzIOKAniVz4oCcIG7El3JhIMSvcmHFoXltbyDEr3JlbmdpbnlzLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAixK5yZW5naW55cyDigJ4lc+KAnCBuxJdyYSBpxaF2ZXN0aWVzIMSvcmVuZ2lueXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmVwYXZ5a28gxK9yZW5naW5pbyDigJ4lc+KAnCBwYXJhbWV0csWzIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmFpemRvIMSvdmVzdGllcyDEr3JlbmdpbnlzIG5lcHJpxJdtxJcgbmF1asWzIGthZHLFsyBkYcW+bmlvIG51c3RhdHltxbMuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIlZhaXpkbyDEr3Zlc3RpZXMgxK9yZW5naW55cyBuZXByacSXbcSXIG5hdWrFsyBrYWRyxbMgZGHFvm5pbyBudXN0YXR5bcWzLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAixK5yZW5naW5pbyDigJ4lc+KAnCB0dmFya3lrbMSXIG5lcGFsYWlrbyBqb2tpxbMgxb5pbm9txbMgxK9yYcWheW1vIGLFq2TFsy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAixK5yZW5naW5pbyDigJ4lc+KAnCB0dmFya3lrbMSXIG5lcGFsYWlrbyBqb2tpxbMgxb5pbm9txbMgxK9yYcWheW1vIGLFq2TFsy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiVmFpemRvIMSvdmVzdGllcyDEr3JlbmdpbnlzIG5lcHJpxJdtxJcgbmF1asWzIGthZHLFsyBkYcW+bmlvIG51c3RhdHltxbMuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVwYXZ5a28gZ2F1dGkgZGVyaW50dXZvICVkIMSvcmVuZ2lueWplIOKAniVz4oCcIHBhcmFtZXRyxbMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJLbGFpZGEgc2thaXRhbnQgJWQgYmFpdHVzICgtxbMpIGnFoSDEr3JlbmdpbmlvIOKAniVz4oCcLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLErnJlbmdpbnlzIOKAniVz4oCcIG7El3JhIGnFoXZlc3RpZXMgxK9yZW5naW55cy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiTmVwYXZ5a28gbnVzdGF0eXRpIMSvdmVzdGllcyAlZCDEr3JlbmdpbnlqZSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJOZXBhdnlrbyBudXN0YXR5dGkgxK92ZXN0aWVzICVkIMSvcmVuZ2lueWplICVzLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcGF2eWtvIGdhdXRpIMSvcmVuZ2luaW8g4oCeJXPigJwgc2lnbmFsbyBzdGlwcnVtby4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIsSucmVuZ2luaW8g4oCeJXPigJwgdHZhcmt5a2zElyBuZXBhbGFpa28gam9racWzIMW+aW5vbcWzIMSvcmHFoXltbyBixatkxbMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiVmFpemRvIMSvdmVzdGllcyDEr3JlbmdpbnlzIG5lcHJpxJdtxJcgbmF1asWzIGthZHLFsyBkYcW+bmlvIG51c3RhdHltxbMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiVmFpemRvIMSvdmVzdGllcyDEr3JlbmdpbnlzIG5lcHJpxJdtxJcgbmF1asWzIGthZHLFsyBkYcW+bmlvIG51c3RhdHltxbMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIlZhaXpkbyDEr3Zlc3RpZXMgxK9yZW5naW55cyBuZXByacSXbcSXIG5hdWrFsyBrYWRyxbMgZGHFvm5pbyBudXN0YXR5bcWzLiIKLQotIywgZnV6enkKLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiTmVwYXZ5a28gZGVrb2R1b3RpIEpQRUcgcGF2ZWlrc2zEl2xpbyIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIktsYWlkYSBnYXVuYW50IMSvcmVuZ2luaW8g4oCeJXPigJwgZnVua2NpamFzOiB0YWkgbsSXcmEgdjRsMiB0dmFya3lrbMSXLiAiCi0iUGF0aWtyaW5raXRlLCBhciB0YWkgdjRsMSB0dmFya3lrbMSXLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIk5lcGF2eWtvIHXFvmtsYXVzdGkgxK92ZXN0aWVzICVkIMSvcmVuZ2lueWplICVzIGF0cmlidXTFsyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZXBhdnlrbyBnYXV0aSBkZXJpbnR1dm8gJWQgxK9yZW5naW55amUg4oCeJXPigJwgcGFyYW1ldHLFsy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZXBhdnlrbyB1xb5rbGF1c3RpIG5vcm1hbMSXcyDEr3JlbmdpbnlqZSDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcGF2eWtvIGdhdXRpIHZhbGR5bW8gYXRyaWJ1dMWzIMSvcmVuZ2lueWplIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJOZXBhdnlrbyBudXN0YXR5dGkgxK9yZW5naW5pbyDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiVGFpIG7El3JhIMSvcmVuZ2lueXMg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXR2ZXJ0aSDEr3JlbmdpbmlvIOKAniVz4oCcIHNrYWl0eW11aSBpciByYcWheW11aS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICLErnJlbmdpbnlzIOKAniVz4oCcIG7El3JhIMSvcmHFoXltbyDEr3JlbmdpbnlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAixK5yZW5naW55cyDigJ4lc+KAnCBuxJdyYSBpxaF2ZXN0aWVzIMSvcmVuZ2lueXMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAixK5yZW5naW55cyDigJ4lc+KAnCBuxJdyYSBpxaF2ZXN0aWVzIMSvcmVuZ2lueXMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTmVwYXZ5a28gYXR2ZXJ0aSDEr3JlbmdpbmlvIOKAniVz4oCcIHNrYWl0eW11aSBpciByYcWheW11aS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcGF2eWtvIG51c3RhdHl0aSBub3JtYWzEl3MgxK9yZW5naW5pdWkg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVwYXZ5a28gZ2F1dGkgxK9yZW5naW5pbyDigJ4lc+KAnCBkYWJhcnRpbmlvIGRlcmludHV2byBkYcW+bmlvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICJOZXBhdnlrbyBudXN0YXR5dGkgxK9yZW5naW5pbyDigJ4lc+KAnCBkZXJpbnR1dm8gZGHFvm5pbyDEryAlbHUgSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcGF2eWtvIGdhdXRpIMSvcmVuZ2luaW8g4oCeJXPigJwgc2lnbmFsbyBzdGlwcnVtby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcGF2eWtvIGdhdXRpIHZhbGRpa2xpbyAlZCByZWlrxaFtxJdzIMSvcmVuZ2lueWplIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVwYXZ5a28gbnVzdGF0eXRpIHZhbGRpa2xpbyAlMiRkIMSvcmVuZ2lueWplIOKAniUzJHPigJwgcmVpa8WhbcSXcyAlMSRkLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk5lcGF2eWtvIGdhdXRpIGRhYmFydGluxJdzIMSvdmVzdGllcyDEr3JlbmdpbnlqZSDigJ4lc+KAnC4gR2FsYsWrdCB0YWkgcmFkaWpvICIKLSLEr3JlbmdpbnlzIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iTmVwYXZ5a28gZ2F1dGkgZGFiYXJ0aW7El3MgxK92ZXN0aWVzIMSvcmVuZ2lueWplIOKAniVz4oCcLiBHYWxixat0IHRhaSByYWRpam8gIgotIsSvcmVuZ2lueXMiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIk5lcGF2eWtvIG51c3RhdHl0aSDEr3Zlc3RpZXMgJWQgxK9yZW5naW55amUgJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiR2FsaW15YsSXcyBrZWlzdGkgc2tpcmlhbcSFasSFIGdlYsSFIG9wZXJhY2lqb3MgdnlrZHltbyBtZXR1IGRhciBuxJdyYS4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIk5lZ2FsaSB2ZWlrdGkgYmUgbGFpa3JvZMW+aW8iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlZpZGluxJcgZHVvbWVuxbMgc3JhdXRvIGtsYWlkYS4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJWaWRpbsSXIGR1b21lbsWzIHNyYXV0byBrbGFpZGEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAixK5yZW5naW55cyDigJ4lc+KAnCBuxJdyYSBpxaF2ZXN0aWVzIMSvcmVuZ2lueXMuIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiR2F1dGFzIG5ldGlrxJd0YXMga2Fkcm8gZHlkaXMgJXUgdmlldG9qZSAldS4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk5lcGF2eWtvIGdhdXRpIHZhaXpkbyBrYWRyxbMgacWhIMSvcmVuZ2luaW8g4oCeJXPigJwuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIk5lcGF2eWtvIHBvICVkIGJhbmR5bcWzLiDErnJlbmdpbnlzICVzLiBTaXN0ZW1vcyBrbGFpZGE6ICVzIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAixb1lbWkgZGHFvm5pYWkiCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgIkF1a8WhdGkgZGHFvm5pYWkiCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAiU2ludGV6YXRvcml1cyIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiR2Fyc2lha2FsYmlhaSIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIsSudmVkaW1hcyIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNYWnFoWlrbGlzIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICLErnJhxaF5bWFzIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAiR2Fyc2luaW1vIHJpYm9zZSIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJVxb4gZ2Fyc2luaW1vIHJpYsWzIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMaW5pamEtMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAiTGluaWphLTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIkxpbmlqYS0zIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJTa2FpdG1lbmluaXMtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiU2thaXRtZW5pbmlzLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIlNrYWl0bWVuaW5pcy0zIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIlRlbGVmb25hcy3Er3YiCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIlRlbGVmb25hcy1pxaF2IgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlJhZGlqYXMiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJOZXBhdnlrbyBhdHZlcnRpIGdhcnNvIMSvcmVuZ2luaW8gbWFpxaFpa2xpbyB2YWxkeW1vIGFwZG9yb2ppbXVpLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIk5lcGF2eWtvIGF0dmVydGkgZ2Fyc28gxK9yZW5naW5pbyBtYWnFoWlrbGlvIHZhbGR5bW8gYXBkb3JvamltdWkuIMWgaXMgIgotI34gImVsZW1lbnRhcyBuZXBhbGFpa28gxaFpb3MgT3BlbiBTb3VuZCBTeXN0ZW0gdmVyc2lqb3MuIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJQYWdyaW5kaW5pcyIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJQcmlla2luaXMiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJHYWxpbmlzIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiQXVzaW7El3MiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIlZpZHVyaW5pcyIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIlN1cGFudGlzIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAixaBvbmluaXMiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVggacWhdmVzdGlzIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNEIGdpbHVtaW5pcyIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0QgdmlkdXJpbmlzIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0QgcGFrZWx0YXMiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmb25hcyIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICJWYWl6ZG8gxK92ZXN0aXMiCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkFVWCDEr3Zlc3RpcyIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICLErnJhxaF5bW8gZ2Fyc2luaW1hcyIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJJxaF2ZXN0aWVzIGdhcnNpbmltYXMiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJNaWtyb2Zvbm8gcGFnYXJzaW5pbWFzIgotCi0jfiBtc2dpZCAiRGlhZ25vc3RpYyIKLSN+IG1zZ3N0ciAiRGlhZ25vc3Rpa2EiCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICLFvWVtxbNqxbMgZGHFvm5pxbMgc3VzdGlwcmluaW1hcyIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICJHcm9qaW1vIHByaWV2YWRhaSIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICLErnZlc3RpcyIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICJNb25pdG9yaWF1cyDFoWFsdGluaXMiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJLbGF2aWF0xatyb3MgcHlwc8SXamltYXMiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIkltaXR1b3RpIHN0ZXJlbyIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIkVyZHZpbmlzIGdhcnNhcyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiTWlrcm9mb25vIGdhcnNpbmltYXMiCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAiR2Fyc2lha2FsYmlvIMWhYWx0aW5pcyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJNaWtyb2Zvbm8gxaFhbHRpbmlzIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiSmFjayIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiQ2VudHJhcyAvIExGRSIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIlN0ZXJlbyBtYWnFoWEiCi0KLSN+IG1zZ2lkICJNb25vIE1peCIKLSN+IG1zZ3N0ciAiTW9ubyBtYWnFoWEiCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIsSudmVzdGllcyBtYWnFoWEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDEiCi0jfiBtc2dzdHIgIk1pa3JvZm9uYXMgMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWlrcm9mb25hcyAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIlNrYWl0bWVuaW7ElyBpxaF2ZXN0aXMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJTa2FpdG1lbmluxJcgxK92ZXN0aXMiCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtYXMiCi0KLSN+IG1zZ2lkICJIYW5kc2V0IgotI34gbXNnc3RyICJSYWdlbGlzIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIktpdGEiCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJOxJdyYSIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICLErmp1bmd0YSIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiScWhanVuZ3RhIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiTnV0aWxkeXRhIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiR3JlaXRhcyIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICJMYWJhaSDFvmVtYSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAixb1lbWEiCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIlZpZHV0aW7ElyIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkF1a8WhdGEiCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIkxhYmFpIGF1a8WhdGEiCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJTdWvFq3JpbW8iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJQcmlla2luaW8gc2t5ZGVsaW8gbWlrcm9mb25hcyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIlByaWVraW5pbyBza3lkZWxpbyDEr2VpbmFudGkgbGluaWphIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiUHJpZWtpbmlvIHNreWRlbGlvIGF1c2luxJdzIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIlByaWVraW5pbyBza3lkZWxpbyBpxaFlaW5hbnRpIGxpbmlqYSIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAixb1hbGlhcyBracWhdHVrYXMiCi0KLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUm/FvmluaXMga2nFoXR1a2FzIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk3El2x5bmFzIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmFsdGFzIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiSnVvZGFzIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJQaWxrYXMga2nFoXR1a2FzIgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbsW+aW5pcyBracWhdHVrYXMiCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSYXVkb25hcyBracWhdHVrYXMiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHZWx0b25hcyBracWhdHVrYXMiCi0KLSN+IG1zZ2lkICJHcmVlbiBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsW9YWxpYXMgcHJpZWtpbmlvIHNreWRlbGlvIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb8W+aW5pcyBwcmlla2luaW8gc2t5ZGVsaW8ga2nFoXR1a2FzIgotCi0jfiBtc2dpZCAiQmx1ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk3El2x5bmFzIHByaWVraW5pbyBza3lkZWxpbyBracWhdHVrYXMiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkJhbHRhcyBwcmlla2luaW8gc2t5ZGVsaW8ga2nFoXR1a2FzIgotCi0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJKdW9kYXMgcHJpZWtpbmlvIHNreWRlbGlvIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJQaWxrYXMgcHJpZWtpbmlvIHNreWRlbGlvIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk9yYW7FvmluaXMgcHJpZWtpbmlvIHNreWRlbGlvIGtpxaF0dWthcyIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlJhdWRvbmFzIHByaWVraW5pbyBza3lkZWxpbyBracWhdHVrYXMiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHZWx0b25hcyBwcmlla2luaW8gc2t5ZGVsaW8ga2nFoXR1a2FzIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiU2tsZWlzdGkgacWhdmVzdMSvIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiU3VtYWnFoXl0aSIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgSW5wdXQiCi0jfiBtc2dzdHIgIlZpcnR1YWxhdXMgbWFpxaFpa2xpbyDEr3Zlc3RpcyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJWaXJ0dWFsYXVzIG1hacWhaWtsaW8gacWhdmVzdGlzIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiVmlydHVhbGF1cyBtYWnFoWlrbGlvIGthbmFsYWkiCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgJWQgZnVua2NpamEiCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgZnVua2NpamEiCi0KLSN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIG9uIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiS2xhaWRhIHNrYWl0YW50ICVkIGJhaXR1cyAoLcWzKSDEr3JlbmdpbnlqZSDigJ4lc+KAnC4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTmVwYXZ5a28gc3VzdGF0eXRpIMSvIGVpbMSXIGJ1ZmVyacWzIMSvcmVuZ2lueWplIOKAniVz4oCcLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIk5lcGF2eWtvIHByaXNpanVuZ3RpIHByaWUgZ2Fyc28gc2VydmVyaW8iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgc291bmQgc2VydmVyIGNhcGFiaWxpdGllcyIKLSN+IG1zZ3N0ciAiTmVwYXZ5a28gdcW+a2xhdXN0aSBnYXJzbyBzZXJ2ZXJpbyBnYWxpbXliacWzIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBpbnB1dCBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiQXByYcWhbyBwYXNpcmlua3TEhSDEr3Zlc3RpZXMgZWxlbWVudMSFLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZy4iCi0jfiBtc2dzdHIgIkFwcmHFoW8gcGFzaXJpbmt0xIUgacWhdmVzdGllcyBlbGVtZW50xIUgZ2Fyc28vdmFpemRvIGtvbmZlcmVuY2lqb21zLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQgZm9yIE11c2ljIGFuZCBNb3ZpZXMuIgotI34gbXNnc3RyICJBcHJhxaFvIHBhc2lyaW5rdMSFIGnFoXZlc3RpZXMgZWxlbWVudMSFIG11emlrYWkgaXIgZmlsbWFtcy4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIG91dHB1dCBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiQXByYcWhbyBwYXNpcmlua3TEhSBpxaF2ZXN0aWVzIGVsZW1lbnTEhS4iCi0KLSN+IG1zZ2lkICJHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBBdWRpby9WaWRlbyBDb25mZXJlbmNpbmciCi0jfiBtc2dzdHIgIkdTdHJlYW1lciBnYXJzbyBpxaF2ZXN0aWVzIGVsZW1lbnRhcyBnYXJzby92YWl6ZG8ga29uZmVyZW5jaWpvbXMiCi0KLSN+IG1zZ2lkICJHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBNdXNpYyBhbmQgTW92aWVzIgotI34gbXNnc3RyICJHU3RyZWFtZXIgZ2Fyc28gacWhdmVzdGllcyBlbGVtZW50YXMgbXV6aWthaSBpciBmaWxtYW1zIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcGxheSBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc2luaywgZXNkc2luayBhbmQgYWxzYXNpbmsuIFRoZSBhdWRpb3NpbmsgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBnYWxpIGdyb3RpIGdhcnPEhSBuYXVkb2RhbWFzIGJldCBrb2vEryBpxaF2ZXN0aWVzIGVsZW1lbnTFsyBraWVrxK8uICIKLSN+ICJLZWxldGFzIGdhbGltxbMgcGFzaXJpbmtpbcWzOiBvc3NzaW5rLCBlc2RzaW5rIGlyIGFsc2FzaW5rLiBHYXJzbyBpxaF2ZXN0aWVzICIKLSN+ICJlbGVtZW50xIUgZ2FsaSBzdWRhcnl0aSBkYWxpbmlzIGtvbnZlamVyaXMsIG5lIHRpayB2aWVuYXMgZWxlbWVudGFzLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHBsYXkgdmlkZW8gdXNpbmcgYW55IG51bWJlciBvZiBvdXRwdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIHh2aW1hZ2VzaW5rLCB4aW1hZ2VzaW5rLCBzZGx2aWRlb3NpbmsgYW5kIGFhc2luay4gIgotI34gIlRoZSB2aWRlb3NpbmsgY2FuIGJlIGEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIGdhbGkgZ3JvdGkgdmFpemRvIMSvcmHFoXVzIG5hdWRvZGFtYXMgYmV0IGtva8SvIGnFoXZlc3RpZXMgZWxlbWVudMWzICIKLSN+ICJraWVrxK8uIEtlbGV0YXMgZ2FsaW3FsyBwYXNpcmlua2ltxbM6IHh2aW1hZ2VzaW5rLCB4aW1hZ2VzaW5rLCBzZGx2aWRlb3NpbmsgIgotI34gImlyIGFhc2luay4gVmFpemRvIGnFoXZlc3RpZXMgZWxlbWVudMSFIGdhbGkgc3VkYXJ5dGkgZGFsaW5pcyBrb252ZWplcmlzLCBuZSAiCi0jfiAidGlrIHZpZW5hcyBlbGVtZW50YXMuIgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcHV0IHZpc3VhbGl6YXRpb24gcGx1Z2lucyBpbiBhIHBpcGVsaW5lIHRvIHRyYW5zZm9ybSBhdWRpbyAiCi0jfiAic3RyZWFtIGluIHZpZGVvIGZyYW1lcy4gRGVmYXVsdCBpcyBnb29tIGJ1dCBtb3JlIHZpc3VhbGl6YXRpb24gcGx1Z2lucyAiCi0jfiAid2lsbCBiZSBwb3J0ZWQgc29vbi4gVGhlIHZpc3VhbGl6YXRpb24gcGx1Z2luIGNhbiBiZSBhIHBhcnRpYWwgcGlwZWxpbmUgIgotI34gImluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHU3RyZWFtZXIgZ2FsaSDEr2TEl3RpIHZhaXpkbyBlZmVrdMWzIMSvc2tpZXBpdXMgxK8ga29udmVqZXLErywga2FkICIKLSN+ICJ0cmFuc2Zvcm11b3TFsyBnYXJzbyBzcmF1dMSFIHZhaXpkbyBrYWRydW9zZS4gTnVtYXR5dGFzaXMgxK9za2llcGlzIHlyYSAiCi0jfiAiZ29vbSwgdGHEjWlhdSBncmVpdHUgbWV0dSBidXMgcmVhbGl6dW90YSBkYXVnaWF1IHZhaXpkbyBlZmVrdMWzIMSvc2tpZXBpxbMuICIKLSN+ICJWYWl6ZG8gZWZla3RvIMSvc2tpZXDEryBnYWxpIHN1ZGFyeXRpIGRhbGluaXMga29udmVqZXJpcywgbmUgdGlrIHZpZW5hcyAiCi0jfiAiZWxlbWVudGFzLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHJlY29yZCBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIGlucHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSBvc3NzcmMsIGVzZHNyYyBhbmQgYWxzYXNyYy4gVGhlIGF1ZGlvIHNvdXJjZSBjYW4gYmUgIgotI34gImEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIGdhbGkgxK9yYcWheXRpIGdhcnPEhSBuYXVkb2RhbWFzIGJldCBrb2vEryDEr3Zlc3RpZXMgZWxlbWVudMWzICIKLSN+ICJza2FpxI1pxbMuIEtlbGV0YXMgZ2FsaW3FsyBwYXNpcmlua2ltxbM6IG9zc3NyYywgZXNkc3JjIGlyIGFsc2FzcmMuIEdhcnNvICIKLSN+ICLFoWFsdGluxK8gZ2FsaSBzdWRhcnl0aSBkYWxpbmlzIGtvbnZlamVyaXMsIG5lIHRpayB2aWVuYXMgZWxlbWVudGFzLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHJlY29yZCB2aWRlbyBmcm9tIGFueSBudW1iZXIgb2YgaW5wdXQgZWxlbWVudHMuIFNvbWUgIgotI34gInBvc3NpYmxlIGNob2ljZXMgYXJlIHY0bHNyYyBhbmQgdmlkZW90ZXN0c3JjLiBUaGUgdmlkZW8gc291cmNlIGNhbiBiZSBhICIKLSN+ICJwYXJ0aWFsIHBpcGVsaW5lIGluc3RlYWQgb2YganVzdCBvbmUgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJHU3RyZWFtZXIgZ2FsaSDEr3JhxaF5dGkgdmFpemTEhSBpxaEgYmV0IGtva2lvIHNrYWnEjWlhdXMgxK92ZXN0aWVzIGVsZW1lbnTFsy4gIgotI34gIktlbGV0YXMgZ2FsaW3FsyBwYXNpcmlua2ltxbM6IHY0bHNyYyBpciB2aWRlb3Rlc3RzcmMuIFZhaXpkbyDFoWFsdGluxK8gZ2FsaSAiCi0jfiAic3VkYXJ5dGkgZGFsaW5pcyBrb252ZWplcmlzLCBuZSB0aWsgdmllbmFzIGVsZW1lbnRhcy4iCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciBhdWRpbyBzb3VyY2UiCi0jfiBtc2dzdHIgIm51bWF0eXRhc2lzIEdTdHJlYW1lciBnYXJzbyDFoWFsdGluaXMiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciBhdWRpb3NpbmsiCi0jfiBtc2dzdHIgIm51bWF0eXRhc2lzIEdTdHJlYW1lciBnYXJzbyBpxaF2ZXN0aWVzIGVsZW1lbnRhcyIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIHZpZGVvIHNvdXJjZSIKLSN+IG1zZ3N0ciAibnVtYXR5dGFzaXMgR1N0cmVhbWVyIHZhaXpkbyDFoWFsdGluaXMiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aWRlb3NpbmsiCi0jfiBtc2dzdHIgIm51bWF0eXRhc2lzIEdTdHJlYW1lciB2YWl6ZG8gacWhdmVzdGllcyBlbGVtZW50YXMiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aXN1YWxpemF0aW9uIHBsdWdpbiIKLSN+IG1zZ3N0ciAibnVtYXR5dGFzaXMgR1N0cmVhbWVyIHZhaXpkbyBlZmVrdG8gxK9za2llcGlzIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIEdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZyIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBnYXJzbyBpxaF2ZXN0aWVzIGVsZW1lbnRvIGdhcnNvL3ZhaXpkbyBrb25mZXJlbmNpam9tcyBhcHJhxaF5bWFzIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIEdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIE11c2ljIGFuZCBNb3ZpZXMiCi0jfiBtc2dzdHIgIkdTdHJlYW1lciBnYXJzbyBpxaF2ZXN0aWVzIGVsZW1lbnRvIG11emlrYWkgaXIgZmlsbWFtcyBhcHJhxaF5bWFzIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc2luayIKLSN+IG1zZ3N0ciAibnVtYXR5dG9qbyBHU3RyZWFtZXIgZ2Fyc28gacWhdmVzdGllcyBlbGVtZW50byBhcHJhxaF5bWFzIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIGRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc3JjIgotI34gbXNnc3RyICJudW1hdHl0b2pvIEdTdHJlYW1lciBnYXJzbyDFoWFsdGluaW8gYXByYcWheW1hcyIKLQotI34gbXNnaWQgIlRoaXMgZmlsZSBpcyBlbmNyeXB0ZWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotI34gbXNnc3RyICLFoGlzIGZhaWxhcyB1xb7FoWlmcnVvdGFzIGlyIG5lZ2FsaSBixat0aSBwYWdyb3Rhcy4iCi0KLSN+IG1zZ2lkICJEaXNjIGlzIG5vdCBhbiBBdWRpbyBDRC4iCi0jfiBtc2dzdHIgIkRpc2thcyBuxJdyYSBBdWRpbyBDRCIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gQ0QuIgotI34gbXNnc3RyICJOZXBhdnlrbyBza2FpdHl0aSBpxaEgQ0QuIgpkaWZmIC0tZ2l0IGEvcG8vbHYuZ21vIGIvcG8vbHYuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWM2ZGM5Li4wMDAwMDAwCi0tLSBhL3BvL2x2LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL2x2LnBvIGIvcG8vbHYucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NDE4ZTIuLjAwMDAwMDAKLS0tIGEvcG8vbHYucG8KKysrIC9kZXYvbnVsbApAQCAtMSw3ODUgKzAsMCBAQAotIyBMYXR2aWFuIHRyYW5zbGF0aW9uIG9mIGdzdC1wbHVnaW5zLgotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBBcnZpcyBMxIFjaXMgPGFydmlzLmxhY2lzQGluYm94Lmx2PiwgMjAwOS4KLSMgUmloYXJkcyBQcmllZGl0aXMgPHJwcmllZGl0aXNAZ21haWwuY29tPiwgMjAxMC4KLSMgUmloYXJkcyBQcmllZGl0aXMgPHJwcmllZGl0aXNAZ21haWwuY29tPiwgMjAxMS4KLSMgUsWrZG9sZnMgTWF6dXJzIDxydWRvbGZzLm1henVyc0BnbWFpbC5jb20+LCAyMDE0LgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjIuMVxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA0LTIwIDE2OjM4KzAzMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IFJpaGFyZHMgUHJpZWRpdGlzIDxycHJpZWRpdGlzQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBMYXR2aWFuIDx0cmFuc2xhdGlvbi10ZWFtLWx2QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogbHZcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiAhPSAwID8gMSA6ICIKLSIyKTtcbiIKLSJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIk5hdiBhdHJhc3RzIEphY2sgc2VydmVyaXMiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIk5laXpkZXbEgXMgYXRrb2TEk3QgSlBFRyBhdHTEk2x1IgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLigJwlc+KAnSBpenBpbGRhIOKAnCVz4oCdIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJOZXZhcsSTamEgc2F2aWVub3RpZXMgYXIgc2VydmVyaSIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJVUkwgbmF2IGllc3RhdMSrdHMuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIlNlcnZlcmlzIG5lYXRiYWxzdGEgbWVrbMSTxaFhbnUuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJOZXZhciBhdHJhc3Qgc2VydmVyYSBub3NhdWt1bXUuIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIk5ldmFyIGl6dmVpZG90IHNhdmllbm9qdW11IGFyIHNlcnZlcmkuIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiTmVpemRldsSBcyBpenZlaWRvdCBkcm/FoW8gc2F2aWVub2p1bXUuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIk5vdGlrYSB0xKtrbGEga8S8xatkYSwgdmFpIHNlcnZlcmlzIG5lZ2FpZMSrdGkgYWl6dsSTcmEgc2F2aWVub2p1bXUuIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICJTZXJ2ZXJpcyBub3PFq3TEq2phIHNsaWt0dXMgZGF0dXMuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICJOYXYgdmFpIG5lZGVyxKtncyBpZXZhZGVzIGF1ZGlvLCBBVkkgc3RyYXVtZSB0aWtzIGJvasSBdGEuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICLFoMSrIGRhdG5lIG5lc2F0dXIgbmV2aWVudSBhdHNrYcWGb2phbXUgc3RyYXVtaS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIsWgxKsgZGF0bmUgaXIgbmVkZXLEq2dhIHVuIHRvIG5ldmFyIGF0c2thxYZvdC4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiTmV2YXIgYXRza2HFhm90IHN0cmF1bWksIGpvIHTEgSBpciDFoWlmcsSTdGEgYXIgUGxheVJlYWR5IERSTS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIsWgxKsgZGF0bmUgaXIgYm9qxIF0YSB1biB0byBuZXZhciBhdHNrYcWGb3QuIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICJOZWRlcsSrZ3MgYXRvbWEgaXptxJNycy4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIsWgxKsgZGF0bmUgaXIgbmVwYWJlaWd0YSB1biB0byBuZXZhciBhdHNrYcWGb3QuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJWaWRlbyDFoWFqxIEgZGF0bsSTIHZhcsSTdHUgdGlrdCBhdHNrYcWGb3RzIG5lcGFyZWl6aS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAixaDEqyBkYXRuZSBzYXR1ciBwxIFyxIFrIGRhdWR6IHN0cmF1bWp1LiBUaWVrIGF0c2thxYZvdGEgdGlrYWkgcGlybcSBICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJOZXRpa2EgYXRyYXN0YSBhdGJhbHN0xKt0YSBzdHJhdW1lLiBJZXNwxJNqYW1zLCBqdW1zIGrEgWluc3RhbMSTIEdTdHJlYW1lciBSVFNQICIKLSJwYXBsYcWhaW7EgWp1bWEgc3ByYXVkbmkgUmVhbCBtZWRpYSBzdHJhdW3Ek20uIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0iTmV0aWthIGF0cmFzdGEgYXRiYWxzdMSrdGEgc3RyYXVtZS4gSWVzcMSTamFtcywganVtcyBqxIFhdMS8YXVqIHZhaXLEgWsgIgotInRyYW5zcG9ydGEgcHJvdG9rb2xpIHZhaSBhcsSrIHRyxatrc3QgR1N0cmVhbWVyIFJUU1AgcGFwbGHFoWluxIFqdW1hIHNwcmF1ZG5pcy4gIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIk5ldmFyxJNqYSBhdHbEk3J0IGF1ZGlvIGllcsSrY2kgYXRza2HFhm/FoWFuYWkuIEllcsSrY2kgcGHFoWxhaWsgaXptYW50byBjaXRhICIKLSJsaWV0b3RuZS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5ldmFyIGF0dsSTcnQgYXVkaW8gaWVyxKtjaSBhdHNrYcWGb8WhYW5haS4gSnVtcyBuYXYgbmVwaWVjaWXFoWFtxIFzIGF0xLxhdWphcywgbGFpICIKLSJhdHbEk3J0dSBpZXLEq2NpLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJOZXZhcsSTamEgYXR2xJNydCBhdWRpbyBpZXLEq2NpIGF0c2thxYZvxaFhbmFpLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJOZXZhciBhdHbEk3J0IGF1ZGlvIGllcsSrY2kgYXRza2HFhm/FoWFuYWkuIMWgxKsgQXR2xJNydMSBcyBTa2HFhmFzIFNpc3TEk21hcyB2ZXJzaWphICIKLSJuZWF0YmFsc3RhIMWhbyBlbGVtZW50dS4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAixaDEqyBhdWRpbyBpZXLEq2NlIG5lYXRiYWxzdGEgYXRza2HFhm/FoWFudS4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIkF1ZGlvIGF0c2thxYZvxaFhbmFzIGvEvMWrZGEuIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLFoMSrIGF1ZGlvIGllcsSrY2UgbmVhdGJhbHN0YSBpZXJha3N0xKvFoWFudS4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJLxLzFq2RhLCBpZXJha3N0b3Qgbm8gYXVkaW8gaWVyxKtjZXMuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTmV2YXIgYXR2xJNydCBhdWRpbyBpZXLEq2NpIGllcmFrc3TEq8WhYW5haS4gSnVtcyBuYXYgbmVwaWVjaWXFoWFtbyBwaWVrxLx1dmVzICIKLSJ0aWVzxKtidSwgbGFpIGF0dsSTcnR1IGllcsSrY2kuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJOZXZhcsSTamEgYXR2xJNydCBhdWRpbyBpZXLEq2NpIGllcmFrc3TEq8WhYW5haS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJJZXJha3N0xKvFoWFuYXMgYXZvdHMiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbnMiCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJTa2HFhmFzIGllZWphIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIklla8WhxJNqYWlzIENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIGllZWphIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIGllZWphIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIGllZWphIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIktvZGVrYSBhdGdyaWV6ZW5pc2thaXMgY2lrbHMiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlN1blZUUyBhdGdyaWV6ZW5pc2thaXMgY2lrbHMiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIlNrYcS8dW1zIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiUGllYXVndW1zIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvcnMiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICJJZWLFq3bEk3RhaXMgc2thxLxydW5pcyIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiQXVzdGnFhmFzIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIlNrYcWGYXMgaXplamEiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElGIGl6ZWphIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMSBpemVqYSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYIDIgaXplamEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUmFkxIFzIGvEvMWrZGEsIG5vbGFzb3QgJWQgYmFpdHVzIG5vIGllcsSrY2VzIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiTmVpemRldsSBcyB1enNrYWl0xKt0IGllc3DEk2phbW9zIHZpZGVvIGZvcm3EgXR1cywgYXIga28gdmFyIHN0csSBZMSBdCDigJwlc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmV2YXIgaXp2aWV0b3QgYnVmZXJ1cyBubyBpZXLEq2NlcyDigJwlc+KAnSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiSWVyxKtjZXMgXCIlc1wiIGRyYWl2ZXJpcyBuZWF0YmFsc3RhIElPIG1ldG9kaSAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIkllcsSrY2VzIOKAnCVz4oCdIGRyYWl2ZXJpcyBuZWF0YmFsc3RhIG5ldmllbnUgemluxIFtbyBpZXJha3N0xKvFoWFuYXMgbWV0b2RpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJJZXLEq2NlIOKAnCVz4oCdIGlyIGFpesWGZW10YSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiSWVyxKtjZSDigJwlc+KAnSBuZXZhciB0dmVydCBhciAlZHglZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiSWVyxKtjZSDigJwlc+KAnSBuZXZhciB0dmVydCBub3LEgWTEq3RhasSBIGZvcm3EgXTEgSIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiSWVyxKtjZSDigJwlc+KAnSBuZWF0YmFsc3RhIHZpZGVvIHR2ZXLFoWFudSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIk5ldmFyIG5vbGFzxKt0IHBhcmFtZXRydXMgbm8gaWVyxKtjZXMg4oCcJXPigJ0iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIlZpZGVvIGllcsSrY2UgbmVwaWXFhsSTbWEgamF1bm9zIGthZHJ1IMSBdHJ1bWEgaWVzdGF0xKtqdW11cy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiVmlkZW8gaWVyxKtjZSBuZXBpZcWGxJNtYSBqYXVub3Mga2FkcnUgxIF0cnVtYSBpZXN0YXTEq2p1bXVzLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiSWVyxKtjZXMgXCIlc1wiIGRyYWl2ZXJpcyBuZWF0YmFsc3RhIElPIG1ldG9kaSAlZCIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJJZXLEq2NlcyBcIiVzXCIgZHJhaXZlcmlzIG5lYXRiYWxzdGEgSU8gbWV0b2RpICVkIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJWaWRlbyBpZXLEq2NlIG5ldmFyxJNqYSBpenZlaWRvdCBidWZlcmEgcMWrbHUuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiVmlkZW8gaWVyxKtjZSBuZXZhcsSTamEgaXp2ZWlkb3QgYnVmZXJhIHDFq2x1LiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVpemRldsSBcyBzYcWGZW10IHNrYcWGb3TEgWphICVkIGllc3RhdMSranVtdXMgbm8gaWVyxKtjZXMg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkvEvMWrZGEsIHNhxYZlbW90IGllc3DEk2phcyBubyBpZXLEq2NlcyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJJZXLEq2NlIOKAnCVz4oCdIG5hdiBza2HFhm90xIFqcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJOZWl6ZGV2xIFzIHNhxYZlbXQgcmFkaW8gaWV2YWRpIHV6IGllcsSrY2VzIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIk5laXpkZXbEgXMgaWVzdGF0xKt0IGlldmFkaSAlZCB1eiBpZXLEq2NlcyAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5laXpkZXbEgXMgbWFpbsSrdCBhcGtsdXNpbsSBxaFhbmFzIHN0xIF2b2tsaSBpZXLEq2NlaSDigJwlc+KAnS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkllcsSrY2VzIFwiJXNcIiBkcmFpdmVyaXMgbmVhdGJhbHN0YSBJTyBtZXRvZGkgJWQiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJWaWRlbyBpZXLEq2NlIG5lcGllxYbEk21hIGphdW5vcyBrYWRydSDEgXRydW1hIGllc3RhdMSranVtdXMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiVmlkZW8gaWVyxKtjZSBuZXBpZcWGxJNtYSBqYXVub3Mga2FkcnUgxIF0cnVtYSBpZXN0YXTEq2p1bXVzLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJWaWRlbyBpZXLEq2NlIG5lcGllxYbEk21hIGphdW5vcyBrYWRydSDEgXRydW1hIGllc3RhdMSranVtdXMuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJOZWl6ZGV2xIFzIGF0a29kxJN0IEpQRUcgYXR0xJNsdSIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIlJhZMSBcyBrxLzFq2RhLCBzYcWGZW1vdCBpZXLEq2NlcyDigJwlc+KAnSBpZXNwxJNqYXM6IGllc3DEk2phbXMgdGFzIG5hdiB2NEkyICIKLSJkcmFpdmVyaXMuIFDEgXJiYXVkaWV0IHZhaSB0YXMgaXIgdjRJMSBkcmFpdmVyaXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTmVpemRldsSBcyBub3RlaWt0IGF0cmlixat0dXMgaWV2YWRlaSAlZCBubyBpZXLEq2NlcyAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZWl6ZGV2xIFzIHNhxYZlbXQgc2thxYZvdMSBamEgJWQgaWVzdGF0xKtqdW11cyBubyBpZXLEq2NlcyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZWl6ZGV2xIFzIG5vc2thaWRyb3Qgbm9ybXUgaWVyxKtjZWkg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZWl6ZGV2xIFzIGllZ8WrdCBrb250cm9sZXMgYXRyaWLFq3R1cyBpZXLEq2NlaSDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmV2YXIgYXRwYXrEq3QgaWVyxKtjaSDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAixaDEqyBuYXYgaWVyxKtjZSDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOZXZhcsSTamEgYXR2xJNydCBpZXLEq2NpIOKAnCVz4oCdIGxhc8SrxaFhbmFpIHZhaSByYWtzdMSrxaFhbmFpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIkllcsSrY2Ug4oCcJXPigJ0gbmF2IGllcmFrc3TEq8WhYW5hcyBpZXLEq2NlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiSWVyxKtjZSDigJwlc+KAnSBuYXYgaXp2YWRlcyBpZXLEq2NlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkllcsSrY2Ug4oCcJXPigJ0gbmF2IGl6dmFkZXMgaWVyxKtjZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOZXZhcsSTamEgYXR2xJNydCBpZXLEq2NpIOKAnCVz4oCdIGxhc8SrxaFhbmFpIHZhaSByYWtzdMSrxaFhbmFpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVpemRldsSBcyBpZXN0YXTEq3Qgbm9ybXUgaWVyxKtjZWkg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVpemRldsSBcyBzYcWGZW10IHBhxaFyZWl6xJNqbyBhdHNrYcWGb8WhYW5hcyBmcmVrdmVuY2kgbm8gaWVyxKtjZXMg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJOZWl6ZGV2xIFzIGllc3RhdMSrdCBpZXLEq2NlcyDigJwlc+KAnSBwYcWhcmVpesSTam8gc2thxYZvdMSBamEgZnJla3ZlbmNpIHV6ICVsdSBIei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVpemRldsSBcyBzYcWGZW10IHNpZ27EgWxhIHN0aXBydW11IG5vIGllcsSrY2VzIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVpemRldsSBcyBzYcWGZW10IHZhZMSra2xhcyB2xJNydMSrYnUgJWQgaWVyxKtjZWkg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOZWl6ZGV2xIFzIGllc3RhdMSrdCB2xJNydMSrYnUgJWQgdmFkxKtrbGFpICVkIG5vIGllcsSrY2VzIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk5laXpkZXbEgXMgc2HFhmVtdCBwYcWhcmVpesSTam8gaWV2YWRpIG5vIGllcsSrY2VzIOKAnCVz4oCdLiBJZXNwxJNqYW1zIHTEgSBpciByYWRpbyAiCi0iaWVyxKtjZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iTmVpemRldsSBcyBzYcWGZW10IHBhxaFyZWl6xJNqbyBpenZhZHUgbm8gaWVyxKtjZXMg4oCcJXPigJ0uIEllc3DEk2phbXMgdMSBIGlyIHJhZGlvICIKLSJpZXLEq2NlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIk5laXpkZXbEgXMgaWVzdGF0xKt0IGl6dmFkaSAlZCB1eiBpZXLEq2NlcyAlcy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJJesWhxLdpcnRzcMSTamFzIG1haW7Eq8WhYW5hIGl6cGlsZGxhaWvEgSBwYcWhbGFpayBuZXRpZWsgYXRiYWxzdMSrdGEuIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICJOZXZhciB2ZWlrdCBkYXJixKtiYXMgYmV6IHB1bGtzdGXFhmEiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIklla8WhxJNqYSBkYXR1IHBsxatzbWFzIGvEvMWrZGEuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiSWVrxaHEk2phIGRhdHUgcGzFq3NtYXMga8S8xatkYS4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkllcsSrY2Ug4oCcJXPigJ0gbmVhdGJhbHN0YSB2aWRlbyB0dmVyxaFhbnUiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc291bmQgc2VydmVyIgotI34gbXNnc3RyICJOZXZhciBpenZlaWRvdCBzYXZpZW5vanVtdSBhciBza2HFhmFzIHNlcnZlcmkiCi0KLSN+IG1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgc291bmQgc2VydmVyIGNhcGFiaWxpdGllcyIKLSN+IG1zZ3N0ciAiTmVpemRldsSBcyBub3NrYWlkcm90IHNrYcWGYXMgc2VydmVyYSBpZXNwxJNqYXMiCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJCYXNpIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJEaXNrYW50cyIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTaW50xJN6ZSIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiU2thxLxydW5pcyIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIlNrYcWGYXMgaWVlamEiCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiSmF1Y8STanMiCi0KLSN+IG1zZ2lkICJQQ00tMiIKLSN+IG1zZ3N0ciAiUENNLTIiCi0KLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIkllcmFrc3TEq3QiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJJZXZhZGVzIHBpZWF1Z3VtcyIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJJenZhZGVzIHBpZWF1Z3VtcyIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiTMSrbmlqYS0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMxKtuaWphLTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIkzEq25pamEtMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGlnaXTEgWxhaXMtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiRGlnaXTEgWxhaXMtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXTEgWxhaXMtMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJUZWxlZm9uYSBpZXZhZGUiCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIlRlbGVmb25hIGl6dmFkZSIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSYWRpbyIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIk5ldmFyxJNqYSBhdHbEk3J0IGF1ZGlvIGllcsSrY2kgbWlrc2VyYSBrb250cm9sZXMgdmFkxKvFoWFuYWkuIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiTmV2YXIgYXR2xJNydCBhdWRpbyBpZXLEq2NpIG1pa3NlcmEga29udHJvbGFzIHZhZMSrxaFhbmFpLiDFoMSrIEF0dmVydMSBcyBTa2HFhmFzICIKLSN+ICJTaXN0ZW1hcyB2ZXJzaWphIG5lYXRiYWxzdGEgxaFvIGVsZW1lbnR1LiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiR2FsdmVuYWlzIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIlByaWVrxaHEk2phaXMiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJTxIFuaSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkF1c3RpxYZhcyIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiQ2VudHJzIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICJMRkUiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAiSWVza2F1am/FocSBIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiUHVzZSIKLQotI34gbXNnaWQgIkFVWCBPdXQiCi0jfiBtc2dzdHIgIkFVWCBpemVqYSIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICIzRCBkemnEvHVtcyIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0QgY2VudHJzIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0QgdXpsYWJvanVtcyIKLQotI34gbXNnaWQgIlRlbGVwaG9uZSIKLSN+IG1zZ3N0ciAiVGVsZWZvbnMiCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW8gaWVlamEiCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkFVQyBpZWVqYSIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICJJZXJha3N0xKt0YSBwaWVhdWd1bXMiCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAiSXp2YWRhIHBpZWF1Z3VtcyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIk1pa3JvZm9uYSBwYXN0aXByaW7EgWp1bXMiCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICJEaWFnbm9zdGlrYSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkJhc3NhIHBhc3RpcHJpbsSBanVtcyIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICJBdHNrYcWGb8WhYW5hcyBwb3J0aSIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICJJZXZhZHMiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTW9uaXRvcmEgYXZvdHMiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJLbGF2aWF0xatyYXMgcMSra3N0aWVuaSIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAiU2ltdWzEk3Qgc3RlcmVvIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICJTdGVyZW8iCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAiSWVza2F1am/FocSBIHNrYcWGYSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiTWlrcm9mb25hIHBpZWF1Z3VtcyIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJTa2HEvHJ1xYZhIGF2b3RzIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIk1pa3JvZm9uYSBhdm90cyIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkxpZ3pkYSIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiQ2VudHJzIC8gTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiU3RlcmVvIG1pa3NlcmlzIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbm8gbWlza2VyaXMiCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIkllZWphcyBtaWtzZXJpcyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25zIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk1pa3JvZm9ucyAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIkRpZ2l0xIFsxIEgaXplamEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJEaWdpdMSBbMSBIGllZWphIgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2TEk21zIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAiS2xhdXN1bGUiCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAiQ2l0cyIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgIk5la2FzIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIkllc2zEk2d0cyIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiSXpzbMSTZ3RzIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiS2x1c3VtcyIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIsSAdHJzIgotCi0jfiBtc2dpZCAiVmVyeSBMb3ciCi0jfiBtc2dzdHIgIsS7b3RpIHplbXMiCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIlplbXMiCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIlZpZMSTanMiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJBdWdzdHMiCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIsS7b3RpIGF1Z3N0cyIKLQotI34gbXNnaWQgIlByb2R1Y3Rpb24iCi0jfiBtc2dzdHIgIlByb2R1a2NpamEiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJQcmlla8WhxJNqxIEgcGFuZcS8YSBtaWtyb2ZvbnMiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICJQcmlla8WhxJNqxIEgcGFuZcS8YSBpZWVqYXMgbMSrbmlqYSIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIEhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIlByaWVrxaHEk2rEgSBwYW5lxLxhIGF1c3RpxYZhcyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgT3V0IgotI34gbXNnc3RyICJQcmlla8WhxJNqxIEgcGFuZcS8YSBsxKtuaWphcyBpemVqYSIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiWmHEvGFpcyBzYXZpZW5vdMSBanMiCi0KLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUm96xIEgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlppbGFpcyBzYXZpZW5vdMSBanMiCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkJhbHRhaXMgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiQmxhY2sgQ29ubmVjdG9yIgotI34gbXNnc3RyICJNZWxuYWlzIHNhdmllbm90xIFqcyIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJQZWzEgWthaXMgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbsW+YWlzIHNhdmllbm90xIFqcyIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlNhcmthbmFpcyBzYXZpZW5vdMSBanMiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJEemVsdGFpbnMgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJaYcS8YWlzIHByaWVrxaHEk2rEgSBwYW5lxLxhIHNhdmllbm90xIFqcyIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb3rEgSBwcmlla8WhxJNqxIEgcGFuZcS8YSBzYXZpZW5vdMSBanMiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiWmlsYWlzIHByaWVrxaHEk2rEgSBwYW5lxLxhIHNhdmllbm90xIFqcyIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmFsdGFpcyBwcmlla8WhxJNqxIEgcGFuZcS8YSBzYXZpZW5vdMSBanMiCi0KLSN+IG1zZ2lkICJCbGFjayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk1lbG5haXMgcHJpZWvFocSTasSBIHBhbmXEvGEgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlBlbMSTa2FpcyBwcmlla8WhxJNqxIEgcGFuZcS8YSBzYXZpZW5vdMSBanMiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJPcmFuxb5haXMgcHJpZWvFocSTasSBIHBhbmXEvGEgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiU2Fya2FuYWlzIHByaWVrxaHEk2rEgSBwYW5lxLxhIHNhdmllbm90xIFqcyIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkR6ZWx0ZW5haXMgcHJpZWvFocSTasSBIHBhbmXEvGEgc2F2aWVub3TEgWpzIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiSXpwbGVzdCBpenZhZHUiCi0KLSN+IG1zZ2lkICJEb3dubWl4IgotI34gbXNnc3RyICJMZWp1cG1pa3PEk8WhYW5hIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAiVmlydHXEgWzEgSBtaWtzZXJhIGlldmFkcyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJWaXJ0dcSBbMSBIG1pa3NlcmEgaXp2YWRzIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiVmlydHXEgWzEgSBtaWtzZXJhIGthbsSBbGkiCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgJWQgZnVua2NpamEiCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgZnVua2NpamEiCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJTYcWGxJNtdSBuZWdhaWTEq3R1IGthZHJhIGl6bcSTcnUgJXUsIG5ldmlzICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJSYWTEgXMga8S8xatkYSBub2xhc290ICVkIGJhaXR1cyBubyBpZXLEq2NlcyBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk5ldmFyIGllcmluZG9kIGJ1ZmVydXMgaWVyxKtjxJMgXCIlc1wiLiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTmVpemRldsSBcyBzYcWGZW10IHZpZGVvIGthZHJ1cyBubyBpZXLEq2NlcyBcIiVzXCIuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIk5ldmVpa3NtZSBwxJNjICVkIG3Ek8SjaW7EgWp1bWllbS4gaWVyxKtjZSAlcy4gc2lzdMSTbWFzIGvEvMWrZGE6ICVzIgpkaWZmIC0tZ2l0IGEvcG8vbXQuZ21vIGIvcG8vbXQuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzQ5OWM4Li4wMDAwMDAwCi0tLSBhL3BvL210LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL210LnBvIGIvcG8vbXQucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYzlhOGUuLjAwMDAwMDAKLS0tIGEvcG8vbXQucG8KKysrIC9kZXYvbnVsbApAQCAtMSw3NzEgKzAsMCBAQAotIyBNYWx0ZXNlIHRyYW5zbGF0aW9uIGZvciBnc3QtcGx1Z2lucy1nb29kLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBOQU1FIE9GIEFVVEhPUiA8bWljaGVsYnVnZWphQHJhYmF0bWFsdGEuY29tPiwgMjAwOC4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QtMC4xMC4xMC4zXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMTAtMjYgMTk6MDkrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsIEJ1Z2VqYSA8bWljaGVsYnVnZWphQHJhYmF0bWFsdGEuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IE1hbHRlc2UgPHRyYW5zbGF0aW9uLXRlYW0tbXRAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBtdFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtUG9lZGl0LUxhbmd1YWdlOiBNYWx0ZXNlXG4iCi0iWC1Qb2VkaXQtQ291bnRyeTogTUFMVEFcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJQcm9ibGVtIGZpZC1kZWNvZGluZyB0YWwtaXN0YW1wYSBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIk1odXggcG9zc2libGkgbmFxYmFkIG1hcy1zZXJ2ZXIiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJBcHBhcnQgJyVzJyBtYSBqYWfEp21pbHggdmlkZW8gY2FwdHVyZSIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIk1odXggcG9zc2libGkgbmFxYmFkIG1hcy1zZXJ2ZXIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIkt1bnRhdHQgbWFzLXNvdW5kIHNlcnZlciBtYSDEoWlleCBzdGFiYmlsaXQiCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiSW5wdXQgYXVkaW8gbWEgbnN0YWJ4IGpldyBtaHV4IHZhbGlkdS4gQVZJIHN0cmVhbSBqaXN0YSBqa3VuIGtvcnJvdHQuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJJbC1mYWpsIG1hIGZpxKcgbC1lYmRhIHN0cmVhbSBsaSB0aXN0YSB0aW5kYXFxLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiSWwtZmFqbCBtaHV4IHZhbGlkdSB1IG1hIGppc3RheCBqaW5kYXFxIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiSWwtZmFqbCBodXdhIGtvcnJvdHQgdSBtYSBqaXN0YXggamluZmV0YcSnLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJJbC1mYWpsIG1odXgga29tcGx1dCB1IG1hIGppc3RheCBqaW5kYXFxLCIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiSmlzdGEgamt1biBpbGxpIGwtdmlkam8gxKFvIGRhbiBpbC1mYWpsIG1hIGppZGhpcnggc2V3d2EuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIklsLWZhamwgZmnEpyBha3RhciBzdHJlYW1zIG1pbGxpIHN1cHBvc3QuIFNlciBpbmRvcXEgbC1ld3dlbCAlZCIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIkF1ZGlvIGRldmljZSBtYSBqaXN0YXggamludHXFvGEuIFFlZCBqaW50dcW8YSBtaW5uIHByb2dyYW1tIGllxKdvci4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIkF1ZGlvIGRldmljZSBtYSBqaXN0YXggamludHXFvGEuIE0nZ8SnYW5kZXggYcSLxItlc3MgZ8SnYWxpaC4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiQXVkaW8gZGV2aWNlIG1hIGppc3RheCBqaW50dcW8YS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTWEgbmlzdGF4IG5pZnRhxKcgYXBwYXJhdCB0YWwtYXdkam8gYmlleCBpbmRvcXEuIERpbCBpbC12ZXLFvGpvbmkgdGEnIE9wZW4gIgotIlNvdW5kIFN5c3RlbSBtaHV4IGlzc2FwcG9ydGphdGhhIG1pbm4gZGFuIGwtZWxlbWVudC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiSWQtZGFxcSBtaHV4IGlzc2FwcGFydGphdCBtaW5uIGRhbiBsLWFwcGFyYXQgdGFsLWF3ZGpvLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAixbtiYWxsIGZpaWQtZGFxcSB0YWwtYXdkam8uIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJJcnJla29yZGphciBtaHV4IGlzc2FwcG9ydGphdCBtaW5uIGRhbiBsLWFwcGFyYXQgdGFsLWF3ZGpvLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIsW7YmFsbCBmbC1pcnJla29yZGphciBtaWxsLWFwcGFyYXQgdGFsLWF3ZGpvLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJBdWRpbyBkZXZpY2UgbWEgamlzdGF4IGppbnR1xbxhIGJpZXggdGlycmVrb3JkamEuIE0nZ8SnYW5kZXggYcSLxItlc3MgZ8SnYWxpaC4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkF1ZGlvIGRldmljZSBtYSBqaXN0YXggamludHXFvGEgYmlleCB0aXJyZWtvcmRqYS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiUmVjb3JkIgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAiTWlrcm9mb251IgotCi0jLCBmdXp6eQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmUtaW4iCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJWb2x1bSIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIkdhaW4iCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi0jLCBmdXp6eQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIlNwZWFrZXIiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2JsZW1hIGZpbC1xYXIoKWkgJWQgYnl0ZXMgZmlkLWRldmljZSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIk1hIG5pc3RheCBucWFiYmVsIGJ1ZmZlcnMgbWlsbC1hcHBhcmF0ICclcycuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotIklkLWRyaXZlciB0YWwtYXBwYXJhdCAnJXMnIG1hIGppc3NhcHBvcnRqYSBsLWViZGEgY2FwdHVyZSBtZXRob2QgbWlmaHVtLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0iSWQtZHJpdmVyIHRhbC1hcHBhcmF0ICclcycgbWEgamlzc2FwcG9ydGphIGwtZWJkYSBjYXB0dXJlIG1ldGhvZCBtaWZodW0uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJEZXZpY2UgJyVzJyBtaHV4IGNhcHR1cmUgZGV2aWNlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiQXBwYXJ0ICclcycgbWEgamlzdGF4IGphZ8SnbWVsIGNhcHR1cmUgYmkgJWR4JWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIkFwcGFydCAnJXMnIG1hIGppc3RheCBqYWfEp21lbCBjYXB0dXJlIGYnZGFuIGlsLWZvcm1hdCIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiRGV2aWNlICclcycgbWh1eCBjYXB0dXJlIGRldmljZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJNaHV4IHBvc3NpYmxpIG7EoWliIHBhcmFtZXRyaSB0YWwtYXBwYXJhdCAnJXMnIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiIgotIkFwcGFyYXQgbGkgamFxcmEgdmlkZW8gaW5wdXQgbWEgYcSLxItldHRheCBpcy1zZXR0aW5ncyDEoW9kZGEgdGFsLWZyYW1lIHJhdGUuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIiIKLSJBcHBhcmF0IGxpIGphcXJhIHZpZGVvIGlucHV0IG1hIGHEi8SLZXR0YXggaXMtc2V0dGluZ3MgxKFvZGRhIHRhbC1mcmFtZSByYXRlLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiIgotIklkLWRyaXZlciB0YWwtYXBwYXJhdCAnJXMnIG1hIGppc3NhcHBvcnRqYSBsLWViZGEgY2FwdHVyZSBtZXRob2QgbWlmaHVtLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICIiCi0iSWQtZHJpdmVyIHRhbC1hcHBhcmF0ICclcycgbWEgamlzc2FwcG9ydGphIGwtZWJkYSBjYXB0dXJlIG1ldGhvZCBtaWZodW0uIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLSJBcHBhcmF0IGxpIGphcXJhIHZpZGVvIGlucHV0IG1hIGHEi8SLZXR0YXggaXMtc2V0dGluZ3MgxKFvZGRhIHRhbC1mcmFtZSByYXRlLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2JsZW1hIGJpZXggaW7EoWliIHNldHRpbmdzIHRhdC10dW5lciAlZCBmdXEgbC1hcHBhcnQgJyVzJyIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUHJvYmxlbWEgZmlsLXFhcigpaSAlZCBieXRlcyBmaWQtZGV2aWNlICclcycuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkRldmljZSAnJXMnIG1odXggY2FwdHVyZSBkZXZpY2UuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIlByb2JsZW1hIGJpZXggbmlzc2V0dGphIGlucHV0ICVkIGZ1cSBhcHBhcmF0ICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIlByb2JsZW1hIGJpZXggbmlzc2V0dGphIGlucHV0ICVkIGZ1cSBhcHBhcmF0ICVzLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2JsZW1hIGJpZXggaW7EoWliIHNpZ25hbCBzdHJlbmd0aCBmdXEgbC1hcHBhcmF0ICclcycuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iSWQtZHJpdmVyIHRhbC1hcHBhcmF0ICclcycgbWEgamlzc2FwcG9ydGphIGwtZWJkYSBjYXB0dXJlIG1ldGhvZCBtaWZodW0uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkFwcGFyYXQgbGkgamFxcmEgdmlkZW8gaW5wdXQgbWEgYcSLxItldHRheCBpcy1zZXR0aW5ncyDEoW9kZGEgdGFsLWZyYW1lIHJhdGUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkFwcGFyYXQgbGkgamFxcmEgdmlkZW8gaW5wdXQgbWEgYcSLxItldHRheCBpcy1zZXR0aW5ncyDEoW9kZGEgdGFsLWZyYW1lIHJhdGUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJBcHBhcmF0IGxpIGphcXJhIHZpZGVvIGlucHV0IG1hIGHEi8SLZXR0YXggaXMtc2V0dGluZ3MgxKFvZGRhIHRhbC1mcmFtZSByYXRlLiIKLQotIywgZnV6enkKLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiUHJvYmxlbSBmaWQtZGVjb2RpbmcgdGFsLWlzdGFtcGEgSlBFRyIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIlByb2JsZW1hIGJpZXggbsShaWIgaWwta2FwYcSLaXRhamlldCB0YWwtYXBwYXJhdCAnJXMnOiBNaHV4IHY0bDIgZHJpdmVyLiAiCi0iScSLxItla2tqYSBqZWtrIGh1eCB2NGwxIGRyaXZlci4gIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTWh1eCBwb3NzaWJsaSB0Zml0dHhqYSBnxKdhbCBhdHRyaWJ1dGkgdGEnIGlucHV0ICVkIMShb2wtYXBwYXJhdCAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJQcm9ibGVtYSBiaWV4IGluxKFpYiBzZXR0aW5ncyB0YXQtdHVuZXIgJWQgZnVxIGwtYXBwYXJ0ICclcyciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJNYSBzdGFqeCBuZml0dGV4IG5vcm0gZnVxIGFwcGFyYXQgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkwtYXR0cmlidXRpIHRhJyBrb250cm9sbCB0YScgZGV2aWNlICclcycgbWEgbnFyYXd4LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJEZXZpY2UgJyVzJyBtaHV4IGlkZW50aWZpa2F0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJEYW4gbWh1eCBkZXZpY2UgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiRGV2aWNlICclcycgbWEgbmlzdGF4IG5pZnRhxKd1IGJpZXggbmFxcmEgamV3IG5pa3RlYi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJEZXZpY2UgJyVzJyBtaHV4IGNhcHR1cmUgZGV2aWNlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkRldmljZSAnJXMnIG1odXggY2FwdHVyZSBkZXZpY2UuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiRGV2aWNlICclcycgbWh1eCBjYXB0dXJlIGRldmljZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJEZXZpY2UgJyVzJyBtYSBuaXN0YXggbmlmdGHEp3UgYmlleCBuYXFyYSBqZXcgbmlrdGViLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTWEgc3RhanR4IG5pc3NldGphIG5vcm0gZnVxIGFwcGFyYXQgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJQcm9ibGVtYSBiaWV4IGluxKFpYiBpbC1mcmVrd2VuemEgbGkgaml0cmHFvG1ldHRpIGZ1cWhhIGFwcGFyYXQgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIlByb2JsZW1hIGJpZXggbmlzc2V0dGphIGwtZnJla3dlbnphIGxpIGppdHJhxbxtZXR0aSBmdXFoYSBhcHBhcmF0ICclcycgZ8SnYWwgIgotIiVsdSBIei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUHJvYmxlbWEgYmlleCBpbsShaWIgc2lnbmFsIHN0cmVuZ3RoIGZ1cSBsLWFwcGFyYXQgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2JsZW1hIGJpZXggaW7EoWliIHZhbHVyIHRhJyBjb250cm9sICVkIGZ1cSBsLWFwcGFyYXQgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlByb2JsZW1hIGJpZXggbmlzc2V0amEgdmFsdXIgJWQgbGlsIGNvbnRyb2wgJWQgZnVxIGwtYXBwYXJhdCAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIlByb2JsZW1hIGJpZXggaW7EoWliIGN1cnJlbnQgaW5wdXQgZnVxIGFwcGFyYXQgJyVzJy4gSmlzdGEgamt1biBsaSBodXdhICIKLSJhcHBhcmF0IHRhci1yYWRqdS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJQcm9ibGVtYSBiaWV4IGluxKFpYiBjdXJyZW50IGlucHV0IGZ1cSBhcHBhcmF0ICclcycuIEppc3RhIGprdW4gbGkgaHV3YSAiCi0iYXBwYXJhdCB0YXItcmFkanUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJQcm9ibGVtYSBiaWV4IG5pc3NldHRqYSBpbnB1dCAlZCBmdXEgYXBwYXJhdCAlcy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJNYSB0aXN0YXggdGliZGVsIGlyLXJlc29sdXRpb24gd2FxdCBydW50aW1lLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiTWEgbmlzdGF4IG7Ep2FkZGVtIG1pbmfEp2FqciBhcmxvxKHEoSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiUHJvYmxlbWEgaW50ZXJuYSBmaWQtZGF0YSBzdHJlYW0iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJQcm9ibGVtYSBpbnRlcm5hIHRhJyBkYXRhIGZsb3ciCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJEZXZpY2UgJyVzJyBtaHV4IGNhcHR1cmUgZGV2aWNlLiIKLQotI34gbXNnaWQgIkdvdCB1bmV4cGVjdGVkIGZyYW1lIHNpemUgb2YgJXUgaW5zdGVhZCBvZiAldS4iCi0jfiBtc2dzdHIgIklyxItpdmVqdCBmcmFtZSBzaXplIHRhJyAldSBtaW5mbG9rIGtpZiBraWVuIG1pc3Rlbm5pIHRhJyAldS4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIlByb2JsZW1hIGJpZXggaW7EoWliIHZpZGVvIGZyYW1lcyBtaWxsLWFwcGFyYXQgJyVzJy4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiIgotI34gIlByb2JsZW1hIHdhcmEgbGkgcHJ1dmFqdCAlZCBkcmFiaS4gYXBwYXJhdCAlcy4gxbxiYWxsIGZpcy1zaXN0ZW1hOiAlcyIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhc3MiCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgIlRyZWJsZSIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTeW50aCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiU3BlYWtlciIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkxpbmUtaW4iCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiTWl4ZXIiCi0KLSN+IG1zZ2lkICJQQ00tMiIKLSN+IG1zZ3N0ciAiUENNLTIiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJJbi1nYWluIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIk91dC1nYWluIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMaW5lLTEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIkxpbmUtMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTGluZS0zIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaWdpdGFsLTEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0zIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIlBob25lLWluIgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJQaG9uZS1vdXQiCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiVmlkam8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkanUiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJNYSBuaXN0YXggbmlmdGHEpyBhcHBhcmF0IHRhbC1hd2RqbyBnxKdhbCBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIk1hIG5pc3RheCBuaWZ0YcSnIGFwcGFyYXQgdGFsLWF3ZGpvIGfEp2FsIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIERpbiBpbC0iCi0jfiAidmVyempvbmkgdGEnIE9wZW4gU291bmQgU3lzdGVtIG1odXggaXNzYXBwb3J0amF0YSBtaW5uIGRpbiBsLWVsZW1lbnQuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiRmFzdCIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJRdWRkaWVtIgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAiV2FyYSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkhlYWRwaG9uZXMiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICJDZW50ZXIgLyBMRkUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIlN1cnJvdW5kIHNvdW5kIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAixKBlbmIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICJIZWFkcGhvbmVzIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIk1pa3JvZm9udSIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICJJbnB1dCIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZCBzb3VuZCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9udSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb251IgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICJDZW50ZXIgLyBMRkUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiU3RlcmVvIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAiSW5wdXQgbWl4IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb251IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWlrcm9mb251IgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIk9uIgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICJPZmYiCi0KLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICJGYXN0IgotCi0jfiBtc2dpZCAiTG93IgotI34gbXNnc3RyICJMb3ciCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIk1lZGl1bSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkhpZ2giCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJWZXJ5IGhpZ2giCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJQcm9kdWN0aW9uIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkZyb250IFBhbmVsIE1pY3JvcGhvbmUiCi0jfiBtc2dzdHIgIk1pa3JvZm9udSB0YWwtcGFuZWxsYSB0YScgcXVkZGllbSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICJGcm9udCBwYW5lbCBsaW5lLWluIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkZyb250IFBhbmVsIEhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkZyb250IHBhbmVsIGhlYWRwaG9uZXMiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIkZyb250IHBhbmVsIGxpbmUtaW4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgYcSnZGFyIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3Igcm/FvGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciBCbHUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgYWJqYWQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQmxhY2sgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgaXN3ZWQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbm5lY3RvciBHcmnFvCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3Igb3JhbsSham8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVkIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29ubmVjdG9yIGHEp21hciIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25uZWN0b3IgaXNmYXIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGcm9udCBwYW5lbCBjb25uZWN0b3IgYcSnZGFyIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGcm9udCBwYW5lbCBjb25uZWN0b3Igcm/FvGEiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQmx1ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkZyb250IHBhbmVsIGNvbm5lY3RvciBibHUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGcm9udCBwYW5lbCBjb25uZWN0b3IgYWJqYWQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGcm9udCBwYW5lbCBjb25uZWN0b3IgaXN3ZWQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkZyb250IHBhbmVsIGNvbm5lY3RvciBHcmnFvCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJPcmFuZ2UgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGcm9udCBQYW5lbCBjb25uZWN0b3Igb3JhbsSham8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiRnJvbnQgcGFuZWwgY29ubmVjdG9yIGHEp21hciIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJGcm9udCBwYW5lbCBjb25uZWN0b3IgaXNmYXIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAiVmlydHVhbCBtaXhlciBpbnB1dCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiVmlydHVhbCBtaXhlciBvdXRwdXQiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiVmlydHVhbCBtaXhlciBpbnB1dCIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIG9uIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiUHJvYmxlbWEgZmlsLXFhcigpaSAlZCBieXRlcyBmaWQtZGV2aWNlICclcycuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAiS3VudGF0dCBtYXMtc291bmQgc2VydmVyIG1hIMShaWV4IHN0YWJiaWxpdCIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICJNaHV4IHBvc3NpYmxpIHQtdGZpdHR4aWphIGfEp2FsbC1rYXBhxItpdGEgdGFzLXNvdW5kIHNlcnZlciIKLQotI34gbXNnaWQgIkVycm9yIHN0b3BwaW5nIHN0cmVhbWluZyBjYXB0dXJlIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJQcm9ibGVtIGJpZXggaW53YXFxYWYgc3RyZWFtaW5nIGNhcHR1cmUgbWlsbC1hcHBhcmF0ICclcycuIgotCi0jfiBtc2dpZCAiRXJyb3Igc3RhcnRpbmcgc3RyZWFtaW5nIGNhcHR1cmUgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIlByb2JsZW0gYmlleCBuaWJkYSBzdHJlYW1pbmcgY2FwdHVyZSBtaWxsLWFwcGFyYXQgJyVzJy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZ2V0IGVub3VnaCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJNYSBuaXN0YXggbmlyxItpZXZpIGJpxbzFvGVqamVkIGJ1ZmZlcnMgbWlsbC1hcHBhcmF0ICclcycuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJNYSBuaXN0YXggbmlyxItpZXZpIGJ1ZmZlcnMgbWlsbC1hcHBhcmF0ICclcycuIgotCi0jfiBtc2dpZCAiTm8gZnJlZSBidWZmZXJzIGZvdW5kIGluIHRoZSBwb29sIGF0IGluZGV4ICVkLiIKLSN+IG1zZ3N0ciAiTWEgbnN0YWIgbC1lYmRhIGJ1ZmZlciBmcmVlIGZsLWluZGnEi2kgJWQgdGFsLXBvb2wuIgotCi0jfiBtc2dpZCAiaW5zdWZmaWNpZW50IG1lbW9yeSB0byBlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci4gZGV2aWNlICVzLiIKLSN+IG1zZ3N0ciAiaW5zdWZmaWNpZW50IG1lbW9yeSB0byBlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci4gZGV2aWNlICVzLiIKLQotI34gbXNnaWQgIiIKLSN+ICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4gTm90IGVub3VnaCBtZW1vcnkuIgotI34gbXNnc3RyICIiCi0jfiAiUHJvYmxlbWEgYmlleCBpbsShaWIgdmlkZW8gZnJhbWVzIG1pbGwtYXBwYXJhdCAnJXMnLiBJbC1tZW1vcmphIGFsbG9rYXRhICIKLSN+ICJtaGlqaWV4IGJpxbzFvGVqamVkLiIKLQotI34gbXNnaWQgIiIKLSN+ICJUaGUgYnVmZmVyIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMsIG9yIG5vICIKLSN+ICJidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgeWV0LCBvciB0aGUgdXNlcnB0ciBvciBsZW5ndGggYXJlIGludmFsaWQuICIKLSN+ICJkZXZpY2UgJXMiCi0jfiBtc2dzdHIgIiIKLSN+ICJUaGUgYnVmZmVyIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMsIG9yIG5vICIKLSN+ICJidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgeWV0LCBvciB0aGUgdXNlcnB0ciBvciBsZW5ndGggYXJlIGludmFsaWQuICIKLSN+ICJkZXZpY2UgJXMiCi0KLSN+IG1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMuJyIKLSN+IG1zZ3N0ciAiTC1hdHRyaWJ1dGkgdGEnIGtvbnRyb2xsIHRhJyBkZXZpY2UgJyVzJyBtYSBucXJhd3guIgpkaWZmIC0tZ2l0IGEvcG8vbmIuZ21vIGIvcG8vbmIuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzg4Mjk4Li4wMDAwMDAwCi0tLSBhL3BvL25iLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL25iLnBvIGIvcG8vbmIucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNzQ4NTQuLjAwMDAwMDAKLS0tIGEvcG8vbmIucG8KKysrIC9kZXYvbnVsbApAQCAtMSw3NzkgKzAsMCBAQAotIyBOb3J3ZWdpYW4gYm9rbWFhbCB0cmFuc2xhdGlvbiBvZiBnc3QtdXRpbHMuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jCi0jIEtqYXJ0YW4gTWFyYWFzIDxrbWFyYWFzQGdub21lLm9yZz4sIDIwMDQtMjAxMC4KLSMgSm9obm55IEEuIFNvbGJ1IDxqb2hubnlAc29sYnUubmV0PiwgMjAxMi0yMDE2Ci0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDgtMDUgMjM6NDcrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogSm9obm55IEEuIFNvbGJ1IDxqb2hubnlAc29sYnUubmV0PlxuIgotIkxhbmd1YWdlLVRlYW06IE5vcndlZ2lhbiBCb2ttYWFsIDxpMThuLW5iQGxpc3Rlci5waW5nLnVpby5ubz5cbiIKLSJMYW5ndWFnZTogbmJfTk9cbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC43LjFcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiSmFjay1zZXJ2ZXIgaWtrZSBmdW5uZXQiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIGRla29kZSBKUEVHLWJpbGRlIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLCqyVzwrsgYXYgwqslc8K7IgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJLdW5uZSBpa2tlIGtvYmxlIHRpbCB0amVuZXIuIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIkluZ2VuIFVSTCBzYXR0LiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJUamVuZXIgc3TDuHR0ZXIgaWtrZSBzw7hraW5nLiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzbMOlIG9wcCBuYXZuIHDDpSB0amVuZXIuIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIkt1bm5lIGlra2UgZXRhYmxlcmUgdGlsa29ibGluZyB0aWwgdGplbmVyLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIk9wcHNldHQgYXYgc2lra2VyIHRpbGtvYmxpbmcgZmVpbGV0LiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIkVuIG5ldHR2ZXJrc2ZlaWwgb3Bwc3RvZCwgZWxsZXIgdGplbmVyZW4gbHVra2V0IHV2ZW50ZXQgdGlsa29ibGluZ2VuLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiVGplbmVyIHNlbmR0ZSB1Z3lsZGlnZSBkYXRhLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiSW5nZW4gZWxsZXIgdWd5bGRpZyBpbm5kYXRhbHlkLCBBVkktc3Ryw7htbWVuIHZpbCBibGkgc2thZGV0LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiRmlsZW4gaW5uZWhvbGRlciBpbmdlbiBzcGlsbGJhcmUgc3Ryw7htbWVyLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRmlsZW4gZXIgdWd5bGRpZyBvZyBrYW4gaWtrZSBzcGlsbGVzLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICJLYW4gaWtrZSBzcGlsbGUgYXYgc3Ryw7htbWVuIGZvcmRpIGRlbiBlciBrcnlwdGVydCBtZWQgUGxheVJlYWR5IERSTS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkZpbGVuIGVyIHNrYWRldCBvZyBrYW4gaWtrZSBzcGlsbGVzLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiVWd5bGRpZyBhdG9tc3TDuHJyZWxzZS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkZpbGVuIGVyIHVmdWxsc3RlbmRpZyBvZyBrYW4gaWtrZSBzcGlsbGVzLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiVmlkZW9lbiBpIGRlbm5lIGZpbGVuIHNwaWxsZXMga2Fuc2tqZSBpa2tlIGF2IGtvcnJla3QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIkZpbGVuIGlubmVob2xkZXIgZm9yIG1hbmdlIHN0csO4bW1lci4gU3BpbGxlciBiYXJlIGbDuHJzdGUgJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIkluZ2VuIHN0w7h0dGV0IHN0csO4bSBibGUgZnVubmV0LiBEdSBtw6Uga2Fuc2tqZSBpbnN0YWxsZXJlIGVuIEdTdHJlYW1lciBSVFNQICIKLSJ1dHZpZGVsc2VzcHJvZ3JhbXRpbGxlZ2cgZm9yIFJlYWwgbWVkaWVzdHLDuG1tZXIuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0iSW5nZW4gc3TDuHR0ZXQgc3Ryw7htIGJsZSBmdW5uZXQuIER1IG3DpSBrYW5za2plIHRpbGxhdGUgZmxlcmUgIgotInRyYW5zcG9ydHByb3Rva29sbGVyIGVsbGVyIGRlbiBrYW4gbWFuZ2xlIGRlbiByZXR0ZSBHU3RyZWFtZXIgUlRTUC0iCi0idXR2aWRlbHNlc3RpbGxlZ2dldC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iS3VubmUgaWtrZSDDpXBuZSBseWRlbmhldGVuIGZvciBhdnNwaWxsaW5nLiBFbmhldGVuIGJydWtlcyBhdiBldCBhbm5ldCAiCi0icHJvZ3JhbS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIkt1bm5lIGlra2Ugw6VwbmUgbHlkZW5oZXRlbiBmb3IgYXZzcGlsbGluZy4gRHUgaGFyIGlra2UgdGlsbGF0ZWxzZSB0aWwgw6Ugw6VwbmUgIgotImVuaGV0ZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugw6VwbmUgbHlkZW5oZXQgZm9yIGF2c3BpbGxpbmcuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIkt1bm5lIGlra2Ugw6VwbmUgbHlkZW5oZXRlbiBmb3IgYXZzcGlsbGluZy4gRGVubmUgdmVyc2pvbmVuIGF2IMKrT3BlbiBTb3VuZCAiCi0iU3lzdGVtwrsgc3TDuHR0ZXMgaWtrZSBhdiBkZXR0ZSBlbGVtZW50ZXQuIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkF2c3BpbGxpbmcgc3TDuHR0ZXMgaWtrZSBhdiBkZW5uZSBseWRlbmhldGVuLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiTHlkYXZzcGlsbGluZ3NmZWlsIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJPcHB0YWsgc3TDuHR0ZXMgaWtrZSBhdiBkZW5uZSBseWRlbmhldGVuLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkZlaWwgdmVkIG9wcHRhayBmcmEgbHlkZW5oZXRlbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJLdW5uZSBpa2tlIMOlcG5lIGx5ZGVuaGV0ZW4gZm9yIG9wcHRhay4gRHUgaGFyIGlra2UgdGlsbGF0ZWxzZSB0aWwgw6Ugw6VwbmUgIgotImVuaGV0ZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJLdW5uZSBpa2tlIMOlcG5lIGx5ZGVuaGV0IGZvciBvcHB0YWsuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIkNvcmVBdWRpby1lbmhldCBpa2tlIGZ1bm5ldCIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiQ29yZUF1ZGlvLWVuaGV0IGt1bmUgaWtrZSDDpXBuZXMiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJPcHB0YWtza2lsZGUiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmplIGlubiIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICJJbnRlcm4gQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiU1BESUYgSW5uIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIGlubiIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJBVVggMiBpbm4iCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiS29kZWstTG9vcGJhY2siCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlN1blZUUy1Mb29wYmFjayIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9sdW0iCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJTdHlya2UiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiSW5uZWJ5Z2dldCBow7h5dHRhbGVyIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJIb2RldGVsZWZvbiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJMaW5qZSB1dCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgdXQiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIkFVWCAxIHV0IgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICJBVVggMiB1dCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJGZWlsIHZlZCBsZXNpbmcgYXYlIGQgYnl0ZXMgZnJhIGVuaGV0ZW4gJyUgc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiS3VubmUgaWtrZSBzcGVzaWZpc2VyZSBtdWxpZ2UgdmlkZW9mb3JtYXRlciBlbmhldCDCqyVzwrsga2FuIGFyYmVpZGUgbWVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJLdW5uZSBpa2tlIHRpbG9yZG5lIGJ1ZmZlcmUgZnJhIGVuaGV0ZW4gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiRHJpdmVyZW4gYXYgZW5oZXRlbiDCqyVzwrsgc3TDuHR0ZXIgaWtrZSBJTyBtZXRvZGVuICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiRHJpdmVyZW4gYXYgZW5oZXRlbiDCqyVzwrsgc3TDuHR0ZXIgaWtrZSBub2VuIGtqZW50ZSBJTy1tZXRvZGVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJFbmhldGVuIMKrJXPCuyBlciBvcHB0YXR0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJFbmhldCDCqyVzwrsga2FuIGlra2UgZmFuZ2UgdmVkICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJFbmhldCDCqyVzwrsga2FuIGlra2UgZmFuZ2UgaSBkZXQgYW5naXR0ZSBmb3JtYXRldCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJFbmhldCDCqyVzwrsgc3TDuHR0ZXIgaWtrZSBpa2tlLXNhbW1lbmhlbmdlbmRlIHBsYW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJLdW5uZSBpa2tlIGbDpSBwYXJhbWV0ZXJlIHDDpSBlbmhldGVuIMKrJXPCuy4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIlZpZGVvZW5oZXRlbiBha3NlcHRlcnRlIGlra2UgbnkgYmlsZGVmcmVrdmVuc2lubnN0aWxsaW5nLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvZW5oZXQgdGlsYsO4ZCBpa2tlIHV0ZGF0YWZvcm1hdC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiVmlkZW9lbmhldCByZXR1cm5lcnRlIHVneWxkaWdlIGRpbWVuc2pvbmVyLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICJWaWRlby1lbmhldGVyIGJydWtlciBlbiB1c3TDuHR0ZXQgbGluamVmbGV0dGluZ3NtZXRvZGUuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvZW5oZXQgYnJ1a2VyIGV0IHVzdMO4dHRldCBwaWtzZWxmb3JtYXQuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIGtvbmZpZ3VyZXJlIGludGVybnQgYnVmZmVyb21yw6VkZSIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiVmlkZW9lbmhldCBmb3Jlc2xvIGlra2Ugbm9lbiBidWZmZXJzdMO4cnJlbHNlLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIkluZ2VuIG5lZHN0csO4bXNvbXLDpWRlIMOlIGltcG9ydGVyZSBmcmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIGlubnN0aWxsaW5nZW5lIGZyYSBtb3R0YWtlcmVuICVkIHDDpSBlbmhldGVuIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmVpbCB2ZWQgaGVudGluZyBhdiBmdW5rc2pvbmVyIGZvciBlbmhldGVuIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJFbmhldGVuIMKrJXPCuyBlciBpa2tlIGVuIHR1bmVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIk1pc2x5a3RlcyBpIMOlIGbDpSByYWRpby1pbm5kYXRhIHDDpSBlbmhldGVuIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJLbGFydGUgaWtrZSDDpSBzZXR0ZSBpbm5nYW5nICVkIHDDpSBlbmhldCAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIGVuZHJlIGRlbXBlLW1vZHVzIGZvciBlbmhldGVuIMKrJXPCuy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIkt1bm5lIGlra2UgdGlsZGVsZSBuw7hkdmVuZGlnZSBtaW5uZS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiS3VubmUgaWtrZSB0aWxkZWxlIG7DuGR2ZW5kaWdlIG1pbm5lLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJLb252ZXJ0ZXIgcMOlIGVuaGV0IMKrJXPCuyBoYXIgaW5nZW4gc3TDuHR0ZWRlIGlubmRhdGFmb3JtYXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvbnZlcnRlciBww6UgZW5oZXQgwqslc8K7IGhhciBpbmdlbiBzdMO4dHRlZGUgdXRkYXRhZm9ybWF0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJFbmtvZGVyIHDDpSBlbmhldCDCqyVzwrsgaGFyIGluZ2VuIHN0w7h0dGVkZSBpbm5kYXRhZm9ybWF0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiRW5rb2RlciBww6UgZW5oZXQgwqslc8K7IGhhciBpbmdlbiBzdMO4dHRlZGUgdXRkYXRhZm9ybWF0IgotCi1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIHN0YXJ0ZSBkZWtvZGluZyBhdiB0csOlZGVuLiIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSBiZWhhbmRsZSByYW1tZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iRmVpbCB2ZWQgaGVudGluZyBhdiBldm5lciBmb3IgZW5oZXRlbiDCqyVzwrs6IERldCBlciBpa2tlIGVuIHY0bDIgZHJpdmVyLiAiCi0iU2pla2sgb20gZGV0IGVyIGVuIHY0bDEgZHJpdmVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIkZlaWwgdmVkIGF0dHJpYnV0dHNww7hycmluZyBhdiBpbm5kYXRhICVkIHDDpSBlbmhldCAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIGlubnN0aWxsaW5nZW4gYXYgbW90dGFrZXJlbiAlZCBww6UgZW5oZXRlbiDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmVpbCB2ZWQgbm9ybS1zcMO4cnJpbmcgcMOlIGVuaGV0ICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpSBmw6UgaW5uIGtvbnRyb2xsYXR0cmlidXR0ZXIgcMOlIGVuaGV0IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2FuIGlra2UgaWRlbnRpZmlzZXJlIGVuaGV0IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRGV0dGUgZXIgaWtrZSBlbiBlbmhldCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSBlbmhldCDCqyVzwrsgZm9yIGxlc2luZyBvZyBza3JpdmluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJFbmhldCDCqyVzwrsga2FuIGlra2UgZmFuZ2UgZGF0YS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkVuaGV0IMKrJXPCuyBlciBpa2tlIGVuIHV0Z2FuZ3NlbmhldC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkVuaGV0ZW4gwqslc8K7IGVyIGlra2UgZW4gTTJNLWVuaGV0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSBlbmhldCDCqyVzwrsgZm9yIGxlc2luZyBvZyBza3JpdmluZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkt1bm5lIGlra2Ugc2V0dGUgbm9ybWVuIGZvciBlbmhldCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2xhcnRlIGlra2Ugw6UgZsOlIGdqZWxkZW5kZSBtb3R0YWtlcmZyZWt2ZW5zIGZvciBlbmhldGVuIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIktsYXJ0ZSBpa2tlIMOlIHNldHRlIGdqZWxkZW5kZSBtb3R0YWtlcmZyZWt2ZW5zIGZvciBlbmhldGVuIMKrJXPCuyB0aWwgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJLbGFydGUgaWtrZSDDpSBpbm5oZW50ZSBzaWduYWxzdHlya2VuIGZvciBlbmhldGVuIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkt1bm5lIGlra2UgaGVudGUgdmVyZGkgZm9yIGtvbnRyb2xsICVkIHDDpSBlbmhldGVuIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIHNldHRlIHZlcmRpICVkIGZvciBrb250cm9sbCAlZCBww6UgZW5oZXRlbiDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iS3VubmUgaWtrZSBoZW50ZSBnamVsZGVuZGUgaW5uZGF0YSBww6UgZW5oZXRlbiDCqyVzwrsuIEthbnNramUgZGV0IGVyIGVuICIKLSJyYWRpb2VuaGV0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIkt1bm5lIGlra2UgaGVudGUgdXRkYXRhIGZyYSBlbmhldGVuIMKrJXPCuy4gS2Fuc2tqZSBkZXQgZXIgZW4gcmFkaW9lbmhldCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJLbGFydGUgaWtrZSDDpSBzZXR0ZSB1dGdhbmcgJWQgcMOlIGVuaGV0ICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkVuZHJpbmcgYXYgb3BwbMO4c25pbmcgdW5kZXIga2rDuHJpbmcgc3TDuHR0ZXMgaWtrZSBlbmRhLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiS2FuIGlra2Ugb3BlcmVyZSB1dGVuIGVuIGtsb2trZSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiSW50ZXJuIGZlaWwgaSBkYXRhc3Ryw7htLiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybiBkYXRhZmx5dGZlaWwuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJFbmhldCDCqyVzwrsgc3TDuHR0ZXIgaWtrZSB2aWRlb29wcHRhayIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIkt1bm5lIGlra2UgZXRhYmxlcmUgdGlsa29ibGluZyB0aWwgbHlkdGplbmVyIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIktsYXJ0ZSBpa2tlIMOlIGV0dGVyc3DDuHJyZSBseWR0amVuZXJlbnMgZXZuZXIiCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJCYXNzIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJEaXNrYW50IgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlN5bnRoIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJIw7h5dHRhbGVyIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAiTGluamUgaW5uIgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgIkNEIgotCi0jfiBtc2dpZCAiTWl4ZXIiCi0jfiBtc2dzdHIgIk1pa3NlciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiT3BwdGFrIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAiSW5uc3R5cmtlIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIlV0c3R5cmtlIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMaW5qZSAxIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMaW5qZSAyIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJMaW5qZSAzIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaWdpdGFsIDEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpZ2l0YWwgMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXRhbCAzIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIlRlbGVmb24gaW5uIgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJUZWxlZm9uIHV0IgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgIlZpZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlJhZGlvIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLSN+IG1zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSBseWRlbmhldGVuIGZvciBtaWtzZXJrb250cm9sbGjDpW5kdGVyaW5nLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkt1bm5lIGlra2Ugw6VwbmUgbHlkZW5oZXRlbiBmb3IgbWlrc2Vya29udHJvbGxow6VuZHRlcmluZy4gRGVubmUgdmVyc2pvbmVuICIKLSN+ICJhdiDCq09wZW4gU291bmQgU3lzdGVtwrsgc3TDuHR0ZXMgaWtrZSBhdiBkZXR0ZSBlbGVtZW50ZXQuIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJIb3ZlZHZvbHVtIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIkZyb250IgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAiQmFrIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiSG9kZXRlbGVmb25lciIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiU2VudGVyIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICJMRkUiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAiU3Vycm91bmQiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJTaWRlIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiQVVYIHV0IgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNEIGR5YmRlIgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICIzRCBzZW50ZXIiCi0KLSN+IG1zZ2lkICIzRCBFbmhhbmNlIgotI34gbXNnc3RyICIzRC1mb3JiZWRyaW5nIgotCi0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICJUZWxlZm9uIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZGVvIGlubiIKLQotI34gbXNnaWQgIkFVWCBJbiIKLSN+IG1zZ3N0ciAiQVVYIGlubiIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICJJbm5zcGlsbGluZ3NzdHlya2UiCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAiVXRkYXRhc3R5cmtlIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAiTWlrcm9mb25mb3JzdGVya25pbmciCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICJEaWFnbm9zZSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkJhc3NCb29zdCIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICJBdnNwaWxsaW5nc3BvcnRlcjoiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAiSW5uZ2FuZyIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICJNb25pdG9ya2lsZGUiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJUYXN0YXR1cnBpcCIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAiU2ltdWxlcnQgc3RlcmVvIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICJTdGVyZW8iCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAiU3Vycm91bmRseWQiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uc3R5cmtlIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIkjDuHl0dGFsZXJraWxkZSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJNaWtyb2ZvbmtpbGRlIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiSmFjayIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiU2VudGVyIC8gTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiU3RlcmVvbWlrcyIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICJNb25vbWlrcyIKLQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAiSW5uZGF0YW1pa3MiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDEiCi0jfiBtc2dzdHIgIk1pa3JvZm9uIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk1pa3JvZm9uIDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAiRGlnaXRhbCB1dCIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkRpZ2l0YWwgaW5uIgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIkjDpW5kc2V0dCIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICJBbm5ldCIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgIkluZ2VuIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIlDDpSIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiQXYiCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICJEZW1wIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiUmFzayIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICJNZWdldCBsYXYiCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIkxhdiIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiTWlkZGVscyIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkjDuHkiCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIk1lZ2V0IGjDuHkiCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJQcm9kdWtzam9uIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAiRnJvbnBhbmVsbWlrcm9mb24iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICJGcm9udHBhbmVsIGlubmxpbmplIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiRnJvbnRwYW5lbGhvZGV0ZWxlZm9uZXIiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAiRnJvbnRwYW5lbCB1dGxpbmplIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcsO4bm4ga29udGFrdCIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb3NhIGtvbnRha3QiCi0KLSN+IG1zZ2lkICJCbHVlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmzDpSBrb250YWt0IgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJIdml0IGtvbnRha3QiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlNvcnQga29udGFrdCIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcsOlIGtvbnRha3QiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJPcmFuc2plIGtvbnRha3QiCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSw7hkIGtvbnRha3QiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHdWwga29udGFrdCIKLQotI34gbXNnaWQgIkdyZWVuIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiR3LDuG5uIGZyb250cGFuZWxrb250YWt0IgotCi0jfiBtc2dpZCAiUGluayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlJvc2EgZnJvbnRwYW5lbGtvbnRha3QiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmzDpSBmcm9udHBhbmVsa29udGFrdCIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiSHZpdCBmcm9udHBhbmVsa29udGFrdCIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiU29ydCBmcm9udHBhbmVsa29udGFrdCIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcsOlIGZyb250cGFuZWxrb250YWt0IgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbnNqZSBmcm9udHBhbmVsa29udGFrdCIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlLDuGQgZnJvbnRwYW5lbGtvbnRha3QiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHdWwgZnJvbnRwYW5lbGtvbnRha3QiCi0KLSN+IG1zZ2lkICJTcHJlYWQgT3V0cHV0IgotI34gbXNnc3RyICJTcHJlZG5pbmdzdXRnYW5nIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiTmVkbWlrcyIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgSW5wdXQiCi0jfiBtc2dzdHIgIlZpcnR1ZWxsIG1pa3NlcmlubmdhbmciCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiVmlydHVlbGwgbWlrc2VydXRnYW5nIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiVmlydHVlbGxlIG1pa3NlcmthbmFsZXIiCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgJWQgRnVua3Nqb24iCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgRnVua3Nqb24iCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJGaWtrIHV2ZW50ZXQgcmFtbWVzdMO4cnJlbHNlbiAldSBpc3RlZGVuZm9yICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJGZWlsIHZlZCBsZXNpbmcgYXYgJWQgYnl0ZSBww6UgZW5oZXRlbiDCqyVzwrsuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkt1bm5lIGlra2UgbGVnZ2UgaSBrw7ggYnVmZmVyZSBpIGVuaGV0ZW4gwqslc8K7LiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTWlzbHlrdGVzIGkgw6UgZsOlIHZpZGVvYmlsZGVyIGZyYSBlbmhldCDCqyVzwrsuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIk1pc2x5a3RlcyBldHRlciAlZCBmb3Jzw7hrLiBFbmhldCAlcy4gU3lzdGVtZmVpbDogJXMiCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIGlucHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICJCZXNrcml2ZXIgdmFsZ3QgaW5uZGF0YWVsZW1lbnQuIgpkaWZmIC0tZ2l0IGEvcG8vbmwuZ21vIGIvcG8vbmwuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTg0YmRjLi4wMDAwMDAwCi0tLSBhL3BvL25sLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL25sLnBvIGIvcG8vbmwucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMjdmZTkuLjAwMDAwMDAKLS0tIGEvcG8vbmwucG8KKysrIC9kZXYvbnVsbApAQCAtMSw3ODIgKzAsMCBAQAotIyB0cmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kLm5sLnBvIHRvIER1dGNoCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jCi0jIEZyZWVrIGRlIEtydWlqZiA8Zi5kZS5rcnVpamZAZ21haWwuY29tPiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNi4KLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QgMS43LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMi0yMCAxNjo0MCswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBGcmVlayBkZSBLcnVpamYgPGYuZGUua3J1aWpmQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBEdXRjaCA8dmVydGFsaW5nQHZyaWpzY2hyaWZ0Lm9yZz5cbiIKLSJMYW5ndWFnZTogbmxcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9biAhPSAxO1xuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICJKYWNrLXNlcnZlciBuaWV0IGdldm9uZGVuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJLYW4gZGUgSlBFRy1hZmJlZWxkaW5nIG5pZXQgZGVjb2RlcmVuIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICInJXMnIGRvb3IgJyVzJyIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiS2FuIGdlZW4gdmVyYmluZGluZyBtYWtlbiBtZXQgc2VydmVyIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIkdlZW4gVVJMIGluZ2VzdGVsZC4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiWm9la2VuIHdvcmR0IGRvb3IgZGUgc2VydmVyIG5pZXQgb25kZXJzdGV1bmQuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJLYW4gZGUgc2VydmVybmFhbSBuaWV0IG9wem9la2VuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJLYW4gZ2VlbiB2ZXJiaW5kaW5nIG1ha2VuIG1ldCBkZSBzZXJ2ZXIiCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJCZXZlaWxpZ2RlIHZlcmJpbmRpbmcgb3B6ZXR0ZW4gaXMgbWlzbHVrdC4iCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iRXIgdHJhZCBlZW4gbmV0d2Vya2ZvdXQgb3Agb2YgZGUgc2VydmVyIGhlZWZ0IGRlIHZlcmJpbmRpbmcgb252ZXJ3YWNodCAiCi0iYWZnZWJyb2tlbi4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIkRlIHNlcnZlciBzdHV1cmRlIG9uanVpc3RlIGdlZ2V2ZW5zLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiR2VlbiBvZiBvbmdlbGRpZyBpbnZvZXJnZWx1aWQsIEFWSS1zdHJvb20gemFsIHNsZWNodCB6aWpuLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiRGl0IGJlc3RhbmQgYmV2YXQgZ2VlbiBhZnNwZWVsYmFyZSBzdHJvbWVuLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGl0IGJlc3RhbmQgaXMgb25nZWxkaWcgZW4ga2FuIG5pZXQgYWZnZXNwZWVsZCB3b3JkZW4uIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIkthbiBzdHJlYW0gbmlldCBhZnNwZWxlbiBvbWRhdCBoZXQgdmVyc2xldXRlbGQgaXMgbWV0IFBsYXlSZWFkeSBEUk0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEaXQgYmVzdGFuZCBpcyBiZXNjaGFkaWdkIGVuIGthbiBuaWV0IGFmZ2VzcGVlbGQgd29yZGVuLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiT25nZWxkaWdlIFwiYXRvbVwiLWdyb290dGUuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEaXQgYmVzdGFuZCBpcyBpbmNvbXBsZWV0IGVuIGthbiBuaWV0IGFmZ2VzcGVlbGQgd29yZGVuLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiRGUgdmlkZW8gaW4gZGl0IGJlc3RhbmQgemFsIG1vZ2VsaWprIG5pZXQgY29ycmVjdCBhZmdlc3BlZWxkIHdvcmRlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiIgotIkRpdCBiZXN0YW5kIGJldmF0IHRlIHZlZWwgc3Ryb21lbi4gQWxsZWVuIGRlIGVlcnN0ZSAlZCB3b3JkZW4gYWZnZXNwZWVsZC4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIkVyIGlzIGdlZW4gb25kZXJzdGV1bmRlIHN0cm9vbSBnZXZvbmRlbi4gTWlzc2NoaWVuIG1vZXQgZXIgZWVuIEdTdHJlYW1lciAiCi0iUlRTUCBleHRlbnNpZS1wbHVnaW4gdm9vciBSZWFsLW1lZGlhLXN0cmVhbXMgZ2XDr25zdGFsbGVlcmQgd29yZGVuLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIkVyIGlzIGdlZW4gb25kZXJzdGV1bmRlIHN0cm9vbSBnZXZvbmRlbi4gTWlzc2NoaWVuIG1vZXQgdSBtZWVyICIKLSJvdmVyZHJhY2h0c3Byb3RvY29sbGVuIHRvZXN0YWFuIG9mIGFuZGVycyBvbnRicmVla3QgZGUganVpc3RlIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpZS1wbHVnaW4uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIkthbiBoZXQgYXVkaW8tYXBwYXJhYXQgbmlldCBvcGVuZW4gdm9vciBhZnNwZWxlbi4gQXBwYXJhYXQgaXMgaW4gZ2VicnVpayBiaWogIgotImVlbiBhbmRlcmUgYXBwbGljYXRpZS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIkthbiBoZXQgYXVkaW8tYXBwYXJhYXQgbmlldCBvcGVuZW4gdm9vciBhZnNwZWxlbi4gVSBoZWJ0IGdlZW4gdG9lc3RlbW1pbmcgb20gIgotImhldCBhcHBhcmFhdCB0ZSBvcGVuZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIkthbiBoZXQgYXVkaW8tYXBwYXJhYXQgbmlldCBvcGVuZW4gdm9vciBhZnNwZWxlbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iS2FuIGhldCBhdWRpby1hcHBhcmFhdCBuaWV0IG9wZW5lbiB2b29yIGFmc3BlbGVuLiBEZXplIHZlcnNpZSB2YW4gaGV0IE9wZW4gIgotIlNvdW5kIFN5c3RlbSB3b3JkdCBuaWV0IG9uZGVyc3RldW50IGRvb3IgZGl0IGVsZW1lbnQuIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkFmc3BlbGVuIHdvcmR0IG5pZXQgb25kZXJzdGV1bmQgZG9vciBkaXQgYXVkaW8tYXBwYXJhYXQiCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIkZvdXQgaW4gZ2VsdWlkIGFmc3BlbGVuLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiT3BuZW1lbiB3b3JkdCBuaWV0IG9uZGVyc3RldW5kIGRvb3IgZGl0IGF1ZGlvLWFwcGFyYWF0IgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiRm91dCBiaWogb3BuZW1lbiB2YW5hZiBhdWRpby1hcHBhcmFhdC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJLYW4gaGV0IGF1ZGlvLWFwcGFyYWF0IG5pZXQgb3BlbmVuIHZvb3Igb3BuZW1lbi4gVSBoZWJ0IGdlZW4gdG9lc3RlbW1pbmcgb20gIgotImhldCBhcHBhcmFhdCB0ZSBvcGVuZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJLYW4gaGV0IGF1ZGlvLWFwcGFyYWF0IG5pZXQgb3BlbmVuIHZvb3Igb3BuZW1lbi4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiQ29yZUF1ZGlvIGFwcGFyYWF0IG5pZXQgZ2V2b25kZW4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIkNvcmVBdWRpbyBhcHBhcmFhdCBrb24gbmlldCBnZW9wZW5kIHdvcmRlbiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIk9wbmFtZWJyb24iCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWNyb2Zvb24iCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJMaWpuLWluIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkludGVybmUgY2QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiU1BESUYtaW4iCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiQVVYIDEtaW4iCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiQVVYIDItaW4iCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiQ29kZWMtbG9vcGJhY2siCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlN1blZUUy1sb29wYmFjayIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9sdW1lIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiVmVyc3RlcmtpbmciCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiSW5nZWJvdXdkZSBsdWlkc3ByZWtlciIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiSG9vZmR0ZWxlZm9vbiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJMaW5lLW91dCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYtb3V0IgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMS1vdXQiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIkFVWCAyLW91dCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJGb3V0IGJpaiBoZXQgbGV6ZW4gdmFuICVkIGJ5dGVzIHZhbiBhcHBhcmFhdCAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiT3Bub2VtZW4gdmFuIHZpZGVvZm9ybWF0ZW4gd2Fhcm1lZSBhcHBhcmFhdCAnJXMnIGthbiB3ZXJrZW4gaXMgbWlzbHVrdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiS2FuIGRlIGJ1ZmZlcnMgdmFuIGFwcGFyYWF0ICclcycgbmlldCB2aW5kZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIkhldCBzdHV1cnByb2dyYW1tYSB2YW4gYXBwYXJhYXQgJyVzJyBvbmRlcnN0ZXVudCBkZSBJTy1tZXRob2RlICVkIG5pZXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0iSGV0IHN0dXVycHJvZ3JhbW1hIHZhbiBhcHBhcmFhdCAnJXMnIG9uZGVyc3RldW50IGdlZW4gYmVrZW5kZSBJTy1tZXRob2RlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJBcHBhcmFhdCAnJXMnIGlzIGJlemV0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJBcHBhcmFhdCAnJXMnIGthbiBnZWVuIG9wbmFtZSBtYWtlbiBtZXQgJWR4JWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIkFwcGFyYWF0ICclcycga2FuIGdlZW4gb3BuYW1lIG1ha2VuIGluIGhldCBnZXNwZWNpZmljZWVyZGUgZm9ybWFhdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJBcHBhcmFhdCAnJXMnIG9uZGVyc3RldW50IG5pZXQtY29udGludWUgdmxha2tlbiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIkthbiBkZSBwYXJhbWV0ZXJzIG9wIGFwcGFyYWF0ICclcycgbmlldCB2ZXJrcmlqZ2VuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICJWaWRlb2FwcGFyYWF0IGhlZWZ0IGRlIG5pZXV3ZSBmcmFtZS1zbmVsaGVpZCBuaWV0IGdlYWNjZXB0ZWVyZC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICJWaWRlb2FwcGFyYWF0IGxldmVyZGUgZ2VlbiB1aXR2b2VyZm9ybWFhdC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiVmlkZW8tYXBwYXJhYXQgZ2FmIG9uZ2VsZGlnZSBhZm1ldGluZ2VuIHRlcnVnLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICIiCi0iVmlkZW8tYXBwYXJhYXQgZ2VicnVpa3QgZWVuIG5pZXQgb25kZXJzdGV1bmRlIG1ldGhvZGUgdm9vciBpbnRlcmxhY2luZy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiVmlkZW8tYXBwYXJhYXQgZ2VicnVpa3QgZWVuIG5pZXQgb25kZXJzdGV1bmQgcGl4ZWxmb3JtYWF0LiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJJbnN0ZWxsZW4gdmFuIGludGVybmUgYnVmZmVycG9vbCBpcyBtaXNsdWt0LiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiVmlkZW9hcHBhcmFhdCBnYWYgZ2VlbiBzdWdnZXN0aWUgdm9vciBlZW4gYnVmZmVyZ3Jvb3R0ZS4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICJHZWVuIGRvd25zdHJlYW0gcG9vbCBvbSB2YW4gdGUgaW1wb3J0ZXJlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkluc3RlbGxpbmdlbiB2YW4gdHVuZXIgJWQgb3AgYXBwYXJhYXQgJyVzJyBvcGhhbGVuIGlzIG1pc2x1a3QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZvdXQgYmlqIGhldCBvcGhhbGVuIGRlIG1vZ2VsaWpraGVkZW4gdmFuIGFwcGFyYWF0ICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiQXBwYXJhYXQgJyVzJyBpcyBnZWVuIHR1bmVyLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIlJhZGlvLWludm9lciB2YW4gYXBwYXJhYXQgJyVzJyBvcGhhbGVuIGlzIG1pc2x1a3QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiS2FuIGludm9lciAlZCBvcCBhcHBhcmFhdCAnJXMnIG5pZXQgaW5zdGVsbGVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRGUgZ2VkZW1wdGUgc3RhdHVzIHZhbiBhcHBhcmFhdCAnJXMnIHdpanppZ2VuIGlzIG1pc2x1a3QuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJWZXJlaXN0IGdlaGV1Z2VuIHRvZWtlbm5lbiBpcyBtaXNsdWt0LiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJWZXJlaXN0IGdlaGV1Z2VuIHRvZWtlbm5lbiBpcyBtaXNsdWt0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJDb252ZXJ0ZXIgb3AgYXBwYXJhYXQgJXMgaGVlZnQgZ2VlbiBvbmRlcnN0ZXVuZCBpbnZvZXJmb3JtYWF0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJDb252ZXJ0ZXIgb3AgYXBwYXJhYXQgJXMgaGVlZnQgZ2VlbiBvbmRlcnN0ZXVuZCB1aXR2b2VyZm9ybWFhdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiQ29kZWVyZGVyIG9wIGFwcGFyYWF0ICVzIGhlZWZ0IGdlZW4gb25kZXJzdGV1bmQgaW52b2VyZm9ybWFhdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIkNvZGVlcmRlciBvcCBhcHBhcmFhdCAlcyBoZWVmdCBnZWVuIG9uZGVyc3RldW5kIHVpdHZvZXJmb3JtYWF0IgotCi1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIkJlZ2lubmVuIG1ldCBkZWNvZGVyZW4gdmFuIHRocmVhZCBpcyBtaXNsdWt0LiIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiQmV3ZXJrZW4gdmFuIGZyYW1lIGlzIG1pc2x1a3QuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkZvdXQgYmlqIGhldCB2ZXJrcmlqZ2VuIHZhbiBkZSBlaWdlbnNjaGFwcGVuIHZhbiBhcHBhcmFhdCAnJXMnOiBoZXQgaXMgZ2VlbiAiCi0idjRsMi1zdHV1cnByb2dyYW1tYS4gQ29udHJvbGVlciBvZiBoZXQgZWVuIHY0bDEtc3R1dXJwcm9ncmFtbWEgaXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiS2FuIGVpZ2Vuc2NoYXBwZW4gdmFuIGludm9lciAlZCBvcCBhcHBhcmFhdCAlcyBuaWV0IG9wdnJhZ2VuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJLYW4gZGUgaW5zdGVsbGluZyB2YW4gdHVuZXIgJWQgb3AgYXBwYXJhYXQgJyVzJyBuaWV0IHZlcmtyaWpnZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2FuIGRlIG5vcm0gb3AgYXBwYXJhYXQgJyVzJyBuaWV0IG9wdnJhZ2VuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2FuIGRlIGtub3BlaWdlbnNjaGFwcGVuIG9wIGFwcGFyYWF0ICclcycgbmlldCB2ZXJrcmlqZ2VuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJLYW4gYXBwYXJhYXQgJyVzJyBuaWV0IGlkZW50aWZpY2VyZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkRpdCBpcyBnZWVuIGFwcGFyYWF0ICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS2FuIGFwcGFyYWF0ICclcycgbmlldCBvcGVuZW4gdm9vciBsZXplbiBlbiBzY2hyaWp2ZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiQXBwYXJhYXQgJyVzJyBpcyBnZWVuIG9wbmFtZWFwcGFyYWF0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiQXBwYXJhYXQgJyVzJyBpcyBnZWVuIHVpdHZvZXJhcHBhcmFhdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkFwcGFyYWF0ICclcycgaXMgZ2VlbiBNMk0tYXBwYXJhYXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJLYW4gZ2VlbiBkdXAgZG9lbiBvcCBhcHBhcmFhdCAnJXMnIHZvb3IgbGV6ZW4gZW4gc2NocmlqdmVuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2FuIG5vcm0gbmlldCBpbnN0ZWxsZW4gdm9vciBhcHBhcmFhdCAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkthbiBkZSB0dW5lcmZyZXF1ZW50aWUgdmFuIGFwcGFyYWF0ICclcycgbmlldCB2ZXJrcmlqZ2VuLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0iS2FuIGRlIGh1aWRpZ2UgdHVuZXJmcmVxdWVudGllIHZvb3IgYXBwYXJhYXQgJyVzJyBuaWV0IGluc3RlbGxlbiBvcCAlbHUgSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkthbiBkZSBzaWduYWFsc3Rlcmt0ZSB2YW4gYXBwYXJhYXQgJyVzJyBuaWV0IHZlcmtyaWpnZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJLYW4gZGUgd2FhcmRlIHZvb3Iga25vcCAlZCBvcCBhcHBhcmFhdCAnJXMnIG5pZXQgdmVya3Jpamdlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkthbiBkZSB3YWFyZGUgJWQgdm9vciBrbm9wICVkIG9wIGFwcGFyYWF0ICclcycgbmlldCBpbnN0ZWxsZW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iS2FuIGRlIGh1aWRpZ2UgaW5zdGVsbGluZ2VuIHZhbiBhcHBhcmFhdCAnJXMnIG5pZXQgdmVya3Jpamdlbi4gSGV0IGlzICIKLSJtb2dlbGlqayBlZW4gcmFkaW8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkthbiBkZSBodWlkaWdlIHVpdHZvZXIgbmlldCBvcCBhcHBhcmFhdCAnJXMnIGtyaWpnZW4uIEhldCBpcyBtb2dlbGlqayBlZW4gIgotInJhZGlvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkthbiB1aXR2b2VyICVkIG9wIGFwcGFyYWF0ICVzIG5pZXQgaW5zdGVsbGVuLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlRpamRlbnMgaGV0IGRyYWFpZW4ga2FuIGRlIHJlc29sdXRpZSBub2cgbmlldCBnZXdpanppZ2Qgd29yZGVuLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiS2FuIG5pZXQgd2Vya2VuIHpvbmRlciBlZW4ga2xvay4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybmUgZm91dCBpbiBnZWdldmVuc3N0cm9vbS4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJJbnRlcm5lIGZvdXQgaW4gZGUgZ2VnZXZlbnNkb29ydm9lci4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkFwcGFyYWF0ICclcycgb25kZXJzdGV1bnQgaGV0IG9wbmVtZW4gdmFuIHZpZGVvIG5pZXQiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc291bmQgc2VydmVyIgotI34gbXNnc3RyICJLYW4gZ2VlbiB2ZXJiaW5kaW5nIG1ha2VuIG1ldCBkZSBnZWx1aWRzc2VydmVyIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIkthbiBkZSBlaWdlbnNjaGFwcGVuIHZhbiBkZSBnZWx1aWRzc2VydmVyIG5pZXQgb3B2cmFnZW4iCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJMYWdlIHRvbmVuIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJIb2dlIHRvbmVuIgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlN5bnRoIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJMdWlkc3ByZWtlciIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkxpam4taW4iCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiTWl4ZXIiCi0KLSN+IG1zZ2lkICJQQ00tMiIKLSN+IG1zZ3N0ciAiUENNLTIiCi0KLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIk9wbmFtZSIKLQotI34gbXNnaWQgIkluLWdhaW4iCi0jfiBtc2dzdHIgIkluZ2FuZ3N2ZXJzdGVya2luZyIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJVaXRnYW5nc3ZlcnN0ZXJraW5nIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMaWpuLTEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIkxpam4tMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTGlqbi0zIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaWdpdGFhbC0xIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICJEaWdpdGFhbC0yIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICJEaWdpdGFhbC0zIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIlRlbGVmb29uaW5nYW5nIgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJUZWxlZm9vbnVpdGdhbmciCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkaW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJLYW4gaGV0IGF1ZGlvLWFwcGFyYWF0IG5pZXQgb3BlbmVuIHZvb3IgaGV0IGJlc3R1cmVuIHZhbiBkZSBtaXhlci4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiBUaGlzIHZlcnNpb24gb2YgIgotI34gInRoZSBPcGVuIFNvdW5kIFN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJLYW4gaGV0IGF1ZGlvLWFwcGFyYWF0IG5pZXQgb3BlbmVuIHZvb3IgYmVzdHVyZW4gdmFuIGRlIG1peGVyLiBEZXplICIKLSN+ICJ2ZXJzaWUgdmFuIGhldCBPcGVuIFNvdW5kIFN5c3RlbSB3b3JkdCBuaWV0IG9uZGVyc3RldW50IGRvb3IgZGl0IGVsZW1lbnQuIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJNYXN0ZXIiCi0KLSN+IG1zZ2lkICJGcm9udCIKLSN+IG1zZ3N0ciAiVm9vcmthbnQiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJBY2h0ZXJ6aWpkZSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkhvb2ZkdGVsZWZvb25zIgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICJNaWRkZW4iCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJTdXJyb3VuZCIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIlppamthbnQiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVgtdWl0IgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNELWRpZXB0ZSIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0QtY2VudHJ1bSIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIjNELXZlcmJldGVyZW4iCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmb29uIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZGVvLWluIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJBVVgtaW4iCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiT3BuYW1ldmVyc3RlcmtpbmciCi0KLSN+IG1zZ2lkICJPdXRwdXQgR2FpbiIKLSN+IG1zZ3N0ciAiVWl0Z2FuZ3N2ZXJzdGVya2luZyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIk1pY3JvZm9vbi1ib29zdCIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub3NlIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAiQmFzLWJvb3N0IgotCi0jfiBtc2dpZCAiUGxheWJhY2sgUG9ydHMiCi0jfiBtc2dzdHIgIkFmc3BlZWxwb29ydGVuIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIkludm9lciIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICJNb25pdG9yYnJvbiIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIlRvZXRzZW5ib3JkcGllcCIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIHNpbXVsZXJlbiIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIlN1cnJvdW5kLWdlbHVpZCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiTWljcm9mb29udmVyc3RlcmtpbmciCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTHVpZHNwcmVrZXJicm9uIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIk1pY3JvZm9vbmJyb24iCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICJQbHVnIgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICJNaWRkZW4gLyBMRkUiCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICJTdGVyZW8tbWl4IgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbm8tbWl4IgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJJbnZvZXItbWl4IgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICJNaWNyb2Zvb24tMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWljcm9mb29uLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAiRGlnaXRhYWwtdWl0IgotCi0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAiRGlnaXRhYWwtaW4iCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAiSGFuZHNldCIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICJPdmVyaWciCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJHZWVuIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIkFhbiIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiVWl0IgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiRGVtcGVuIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiU25lbCIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICJaZWVyIGxhYWciCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIkxhYWciCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIk1pZGRlbCIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIkhvb2ciCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIlplZXIgaG9vZyIKLQotI34gbXNnaWQgIlByb2R1Y3Rpb24iCi0jfiBtc2dzdHIgIlByb2R1Y3RpZSIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIE1pY3JvcGhvbmUiCi0jfiBtc2dzdHIgIk1pY3JvZm9vbiBpbiBmcm9udHBhbmVlbCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIkxpam4taW4gaW4gZnJvbnRwYW5lZWwiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJIb29mZHRlbGVmb29ucyBpbiBmcm9udHBhbmVlbCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgT3V0IgotI34gbXNnc3RyICJMaWpuLXVpdCBpbiBmcm9udHBhbmVlbCIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiR3JvZW5lIGNvbm5lY3RvciIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb3plIGNvbm5lY3RvciIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJCbGF1d2UgY29ubmVjdG9yIgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJXaXR0ZSBjb25uZWN0b3IiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlp3YXJ0ZSBjb25uZWN0b3IiCi0KLSN+IG1zZ2lkICJHcmF5IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiR3JpanplIGNvbm5lY3RvciIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk9yYW5qZSBjb25uZWN0b3IiCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSb2RlIGNvbm5lY3RvciIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkdlbGUgY29ubmVjdG9yIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcm9lbmUgY29ubmVjdG9yIGluIGZyb250cGFuZWVsIgotCi0jfiBtc2dpZCAiUGluayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlJvemUgY29ubmVjdG9yIGluIGZyb250cGFuZWVsIgotCi0jfiBtc2dpZCAiQmx1ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkJsYXV3ZSBjb25uZWN0b3IgaW4gZnJvbnRwYW5lZWwiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIldpdHRlIGNvbm5lY3RvciBpbiBmcm9udHBhbmVlbCIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiWndhcnRlIGNvbm5lY3RvciBpbiBmcm9udHBhbmVlbCIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcmlqemUgY29ubmVjdG9yIGluIGZyb250cGFuZWVsIgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbmplIGNvbm5lY3RvciBpbiBmcm9udHBhbmVlbCIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlJvZGUgY29ubmVjdG9yIGluIGZyb250cGFuZWVsIgotCi0jfiBtc2dpZCAiWWVsbG93IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiR2VsZSBjb25uZWN0b3IgaW4gZnJvbnRwYW5lZWwiCi0KLSN+IG1zZ2lkICJTcHJlYWQgT3V0cHV0IgotI34gbXNnc3RyICJVaXR2b2VyIHNwcmVpZGVuIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiRG93bm1peCIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgSW5wdXQiCi0jfiBtc2dzdHIgIlZpcnR1ZWxlIG1peGVyLWludm9lciIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJWaXJ0dWVsZSBtaXhlci11aXR2b2VyIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiVmlydHVlbGUgbWl4ZXIta2FuYWxlbiIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyAlZCBmdW5jdGllIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzLWZ1bmN0aW9uIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAiT252ZXJ3YWNodGUgZnJhbWVncm9vdHRlLCAldSBpbiBwbGFhdHMgdmFuICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJGb3V0IGJpaiBoZXQgbGV6ZW4gdmFuICVkIGJ5dGVzIHZhbiBhcHBhcmFhdCAnJXMnLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJLYW4gZ2VlbiBidWZmZXJzIHRvZWtlbm5lbiBpbiBhcHBhcmFhdCAnJXMnLiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiS2FuIGdlZW4gdmlkZW9mcmFtZXMgdmVya3JpamdlbiB2YW4gYXBwYXJhYXQgJyVzJy4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiRm91dCBuYSAlZCBwb2dpbmdlbi4gQXBwYXJhYXQgJXMuIFN5c3RlZW1mb3V0OiAlcyIKZGlmZiAtLWdpdCBhL3BvL29yLmdtbyBiL3BvL29yLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2YTRiMC4uMDAwMDAwMAotLS0gYS9wby9vci5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9vci5wbyBiL3BvL29yLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTgwNmY1Li4wMDAwMDAwCi0tLSBhL3BvL29yLnBvCisrKyAvZGV2L251bGwKQEAgLTEsNjUxICswLDAgQEAKLSMgT3JpeWEgdHJhbnNsYXRpb24gb2YgZ3N0LXBsdWdpbnMtMC44LjMucG90LgotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtMC44LjMgcGFja2FnZS4KLSMgR29yYSBNb2hhbnR5IDxnb3JhX21vaGFudHlAeWFob28uY28uaW4+LCAyMDA0LgotIyAkSWQ6IG9yLnBvLHYgMS4zMCAyMDA4LTA0LTIzIDIzOjE4OjQzIHRoYXl0YW4gRXhwICQKLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLTAuOC4zXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMDktMjcgMTM6MzIrMDUzMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogR29yYSBNb2hhbnR5IDxnb3JhX21vaGFudHlAeWFob28uY28uaW4+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogT3JpeWEgPGdvcmFfbW9oYW50eUB5YWhvby5jby5pbj5cbiIKLSJMYW5ndWFnZTogb3JcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIlwiJXNcIiDgrKjgrL/grZ/grKjgrY3grKTgrY3grLDgrKMg4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsrOCsqOCtjeCspiDgrJXgrLDgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4KyX4K2L4Kyf4Ky/4KyPIOCsheCsqOCtgeCssuCsv+CsquCsv+CsleCsvuCssCDgrKjgrYHgrLngrYfgrIEuIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiXCIlc1wiIOCsqOCsv+Ctn+CsqOCtjeCspOCtjeCssOCsoyDgrK/grKjgrY3grKTgrY3grLAg4Kys4Kyo4K2N4KymIOCsleCssOCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJcIiVzXCIg4Kyo4Ky/4K2f4Kyo4K2N4Kyk4K2N4Kyw4KyjIOCsr+CsqOCtjeCspOCtjeCssCDgrKzgrKjgrY3grKYg4KyV4Kyw4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAi4Kyo4Ky/4Kys4K2H4Ky2IOCsp+CtjeCsrOCsqOCsvyDgrKjgrL7grLngrL/grIEg4Kys4Ky+IOCsheCsrOCtiOCspyDgrIXgrJvgrL8uIOCsjy7grK3grL8u4KyG4KyHLiDgrKfgrL7grLDgrL4g4Kyt4K2N4Kyw4Ky34K2N4KyfIOCsueCti+Csh+Csr+Csv+CsrC4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiXCIlc1wiIOCsp+CtjeCsrOCsqOCsvyDgrK/grKjgrY3grKTgrY3grLAg4Kyy4K2H4KyW4Ky/4Kys4Ky+IOCsquCsvuCsh+CsgSDgrJbgrYvgrLLgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiXCIlc1wiIOCsp+CtjeCsrOCsqOCsvyDgrK/grKjgrY3grKTgrY3grLAg4Kyy4K2H4KyW4Ky/4Kys4Ky+IOCsquCsvuCsh+CsgSDgrJbgrYvgrLLgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAi4Ky44Ky/LuCsoeCsvy4g4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsquCsouCsvOCsv+CsrOCsviDgrKrgrL7grIfgrIEg4KyW4K2L4Kyy4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICLgrLjgrL8u4Kyh4Ky/LiDgrK/grKjgrY3grKTgrY3grLAg4Kyq4Kyi4Ky84Ky/4Kys4Ky+IOCsquCsvuCsh+CsgSDgrJbgrYvgrLLgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICLgrIbgrKrgrKPgrJngrY3grJXgrLAg4KyTLuCsj+CsuC7grI/grLguIOCsr+CsqOCtjeCspOCtjeCssOCssCDgrKDgrL/grJUg4Kyt4Ky+4Kys4Kyw4K2HIOCsheCsqOCtgeCsuOCsqOCtjeCsp+CsvuCsqCDgrJXgrLDgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotIywgZnV6enkKLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICLgrKrgrY3grLDgrKbgrLDgrY3grLbgrL/grJXgrL4iCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICLgrK7grL7grIfgrJXgrY3grLDgrYvgrKvgrYvgrKjgrY0iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAi4Kyy4Ky+4KyH4KyoLeCsh+CsqCIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIuCsquCtjeCssOCsrOCss+CspOCsviIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIuCsquCtjeCssOCspuCssOCtjeCstuCsv+CsleCsviIKLQotIywgZnV6enkKLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICLgrLjgrY3grKzgrLDgrKzgrLDgrY3grKbgrY3grKfgrJUg4K2f4Kyo4K2N4Kyk4K2N4KywIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4Kyw4Kyw4K2BIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4Kyw4Kyw4K2BIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4KyX4K2L4Kyf4Ky/4KyPIOCsheCsqOCtgeCssuCsv+CsquCsv+CsleCsvuCssCDgrKjgrYHgrLngrYfgrIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssCDgrJfgrYvgrJ/grL/grI8g4KyF4Kyo4K2B4Kyy4Ky/4Kyq4Ky/4KyV4Ky+4KywIOCsqOCtgeCsueCth+CsgS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsl+Cti+Csn+Csv+CsjyDgrIXgrKjgrYHgrLLgrL/grKrgrL/grJXgrL7grLAg4Kyo4K2B4Ky54K2H4KyBLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssCDgrJfgrYvgrJ/grL/grI8g4KyF4Kyo4K2B4Kyy4Ky/4Kyq4Ky/4KyV4Ky+4KywIOCsqOCtgeCsueCth+CsgS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssOCssOCtgSDgrIXgrLjgrY3grKXgrL7grZ/grYAg4Ky44Kye4K2N4Kya4K2fIOCsuOCtjeCspeCsvuCsqCDgrIbgrKPgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLDgrLDgrYEg4Kyq4Kyw4K2N4Kyv4K2N4Kyv4Ky+4Kyq4K2N4KykIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4Kyw4Kyw4K2BIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4KyX4K2L4Kyf4Ky/4KyPIOCsheCsqOCtgeCssuCsv+CsquCsv+CsleCsvuCssCDgrKjgrYHgrLngrYfgrIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIlwiJXNcIiDgrKfgrY3grKzgrKjgrL8g4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsrOCsqOCtjeCspiDgrJXgrLDgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJcIiVzXCIg4Kyn4K2N4Kys4Kyo4Ky/IOCsr+CsqOCtjeCspOCtjeCssCDgrKzgrKjgrY3grKYg4KyV4Kyw4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4Kyw4Kyw4K2BIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLDgrLDgrYEg4Kyq4Kyw4K2N4Kyv4K2N4Kyv4Ky+4Kyq4K2N4KykIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLDgrLDgrYcg4Kyy4K2H4KyW4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4Kyq4Kyi4Ky84Ky/4Kys4Ky+IOCskyDgrLLgrYfgrJbgrL/grKzgrL4g4Kyq4Ky+4KyH4KyBIOCsluCti+CssuCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4KyX4K2L4Kyf4Ky/4KyPIOCsheCsqOCtgeCssuCsv+CsquCsv+CsleCsvuCssCDgrKjgrYHgrLngrYfgrIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssCDgrJfgrYvgrJ/grL/grI8g4KyF4Kyo4K2B4Kyy4Ky/4Kyq4Ky/4KyV4Ky+4KywIOCsqOCtgeCsueCth+CsgS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsl+Cti+Csn+Csv+CsjyDgrIXgrKjgrYHgrLLgrL/grKrgrL/grJXgrL7grLAg4Kyo4K2B4Ky54K2H4KyBLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4Kyq4Kyi4Ky84Ky/4Kys4Ky+IOCskyDgrLLgrYfgrJbgrL/grKzgrL4g4Kyq4Ky+4KyH4KyBIOCsluCti+CssuCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssOCssOCtgSDgrIXgrLjgrY3grKXgrL7grZ/grYAg4Ky44Kye4K2N4Kya4K2fIOCsuOCtjeCspeCsvuCsqCDgrIbgrKPgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4Kyw4Kyw4K2BIOCsquCssOCtjeCsr+CtjeCsr+CsvuCsquCtjeCspCDgrIXgrLjgrY3grKXgrL7grZ/grYAg4Ky44Kye4K2N4Kya4K2fIOCsuOCtjeCspeCsvuCsqCDgrIbgrKPgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiXCIlc1wiIOCsqOCsv+Ctn+CsqOCtjeCspOCtjeCssOCsoyDgrK/grKjgrY3grKTgrY3grLAg4Kys4Kyo4K2N4KymIOCsleCssOCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiXCIlc1wiIOCsqOCsv+Ctn+CsqOCtjeCspOCtjeCssOCsoyDgrK/grKjgrY3grKTgrY3grLAg4Kys4Kyo4K2N4KymIOCsleCssOCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLDgrLDgrYEg4Kyq4Kyw4K2N4Kyv4K2N4Kyv4Ky+4Kyq4K2N4KykIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJcIiVzXCIg4Kyn4K2N4Kys4Kyo4Ky/IOCsr+CsqOCtjeCspOCtjeCssCDgrKzgrKjgrY3grKYg4KyV4Kyw4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4KyX4K2L4Kyf4Ky/4KyPIOCsheCsqOCtgeCssuCsv+CsquCsv+CsleCsvuCssCDgrKjgrYHgrLngrYfgrIEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssOCssOCtgSDgrKrgrLDgrY3grK/grY3grK/grL7grKrgrY3grKQg4KyF4Ky44K2N4Kyl4Ky+4K2f4K2AIOCsuOCsnuCtjeCsmuCtnyDgrLjgrY3grKXgrL7grKgg4KyG4Kyj4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICLgrIXgrKjgrYHgrJrgrY3grJog4Ky44K2N4Kys4KywIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICLgrIngrJrgrY3grJog4Ky44K2N4Kys4KywIgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIuCsuOCsv+CsqOCtjeCspeCth+CsuOCsvuCsh+CsnOCssCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAi4Kyq4Ky/LuCsuOCsvy7grI/grK4uIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAi4Ky44K2N4Kys4Kyw4Kys4Kyw4K2N4Kym4K2N4Kyn4KyVIOCtn+CsqOCtjeCspOCtjeCssCIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIuCssuCsvuCsh+CsqC3grIfgrKgiCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAi4Ky44Ky/LuCsoeCsvy4iCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAi4Kyu4Ky/4Ky24K2N4Kyw4KyjIOCsr+CsqOCtjeCspOCtjeCssCIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICLgrKrgrL8u4Ky44Ky/LuCsj+Csri4t4K2oIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICLgrIXgrKjgrYHgrLLgrL/grKrgrL/grJXgrLDgrKMiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICLgrKjgrL/grKzgrYfgrLYt4Kys4K2D4Kym4K2N4Kyn4Ky/IgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIuCsqOCsv+CssOCtjeCsl+Csri3grKzgrYPgrKbgrY3grKfgrL8iCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIuCssuCsvuCsh+CsqC3graciCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIuCssuCsvuCsh+CsqC3gragiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIuCssuCsvuCsh+CsqC3grakiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIuCsuOCsvuCsguCsluCtjeCsr+Csv+CslS3graciCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIuCsuOCsvuCsguCsluCtjeCsr+Csv+CslS3gragiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIuCsuOCsvuCsguCsluCtjeCsr+Csv+CslS3grakiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAi4Kyr4K2L4KyoLeCsqOCsv+CsrOCth+CstiIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAi4Kyr4K2L4KyoLeCsqOCsv+CssOCtjeCsl+CsriIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICLgrK3grL/grKHgrL/grJMiCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAi4Kyw4K2H4Kyh4Ky/4KyTIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrKfgrY3grKzgrKjgrL8g4Kyv4Kyo4K2N4Kyk4K2N4KywIOCssuCth+CsluCsv+CsrOCsviDgrKrgrL7grIfgrIEg4KyW4K2L4Kyy4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICJcIiVzXCIg4Kyn4K2N4Kys4Kyo4Ky/IOCsr+CsqOCtjeCspOCtjeCssCDgrLLgrYfgrJbgrL/grKzgrL4g4Kyq4Ky+4KyH4KyBIOCsluCti+CssuCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIuCsheCsqOCtgeCssuCsv+CsquCsv+CsleCssOCsoyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICLgrK3grL/grKHgrL/grJMiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIuCsqOCsv+CssOCtjeCsl+Csri3grKzgrYPgrKbgrY3grKfgrL8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSBCb29zdCIKLSN+IG1zZ3N0ciAi4Kyu4Ky+4KyH4KyV4K2N4Kyw4K2L4Kyr4K2L4Kyo4K2NIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAi4Kyu4Ky+4KyH4KyV4K2N4Kyw4K2L4Kyr4K2L4Kyo4K2NIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICLgrLjgrY3grKzgrLDgrKzgrLDgrY3grKbgrY3grKfgrJUg4K2f4Kyo4K2N4Kyk4K2N4KywIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICLgrK7grL7grIfgrJXgrY3grLDgrYvgrKvgrYvgrKjgrY0iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICLgrK7grL7grIfgrJXgrY3grLDgrYvgrKvgrYvgrKjgrY0iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICLgrK7grL7grIfgrJXgrY3grLDgrYvgrKvgrYvgrKjgrY0iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIuCsuOCsvuCsguCsluCtjeCsr+Csv+CslS3graciCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAi4Ky44Ky+4KyC4KyW4K2N4Kyv4Ky/4KyVLeCtpyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICLgrK7grL7grIfgrJXgrY3grLDgrYvgrKvgrYvgrKjgrY0iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLDgrLDgrYEg4KyF4Ky44K2N4Kyl4Ky+4K2f4K2AIOCsuOCsnuCtjeCsmuCtnyDgrLjgrY3grKXgrL7grKgg4KyG4Kyj4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJcIiVzXCIg4Kyv4Kyo4K2N4Kyk4K2N4Kyw4Kyw4K2BIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgZW5vdWdoIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLDgrLDgrYEg4Kyq4Kyw4K2N4Kyv4K2N4Kyv4Ky+4Kyq4K2N4KykIOCsheCsuOCtjeCspeCsvuCtn+CtgCDgrLjgrJ7grY3grJrgrZ8g4Ky44K2N4Kyl4Ky+4KyoIOCshuCso+Csv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gQ0QuIgotI34gbXNnc3RyICJcIiVzXCIg4Kyr4Ky+4KyH4KyyIOCssuCth+CsluCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRpc2MgaXMgbm90IGFuIEF1ZGlvIENELiIKLSN+IG1zZ3N0ciAi4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsluCti+CssuCsvuCsr+CsvuCshyDgrKjgrL7grLngrL/grIEuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkNvdWxkIG5vdCBzZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLSN+IG1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssOCssOCtgSDgrIXgrLjgrY3grKXgrL7grZ/grYAg4Ky44Kye4K2N4Kya4K2fIOCsuOCtjeCspeCsvuCsqCDgrIbgrKPgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIOCsq+CsvuCsh+CssiDgrLLgrYfgrJbgrL/grKzgrL4g4Kyq4Ky+4KyH4KyBIOCsluCti+CssuCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jfiBtc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrKvgrL7grIfgrLIg4Kys4Kyo4K2N4KymIOCsleCssOCsv+CsrOCsvuCssOCthyDgrKTgrY3grLDgrYHgrJ/grL8uIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotI34gbXNnc3RyICJcIiVzXCIg4Kyr4Ky+4KyH4KyyIOCsquCsouCsvOCsv+CsrOCsviDgrKrgrL7grIfgrIEg4KyW4K2L4Kyy4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJObyBmaWxlbmFtZSBzcGVjaWZpZWQuIgotI34gbXNnc3RyICLgrJXgrYzgrKPgrLjgrL8g4Kyr4Ky+4KyH4Kyy4Kyo4Ky+4KyuIOCsieCssuCtjeCssuCth+CsluCsv+CspCDgrLngrYvgrIcg4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGNvbnRyb2wgZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrKjgrL/grZ/grKjgrY3grKTgrY3grLDgrKMg4Kyv4Kyo4K2N4Kyk4K2N4KywIOCssuCth+CsluCsv+CsrOCsviDgrKrgrL7grIfgrIEg4KyW4K2L4Kyy4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgY29uZmlndXJlIGF1ZGlvIGRldmljZSBcIiVzXCIuIgotI34gbXNnc3RyICJcIiVzXCIg4Kyn4K2N4Kys4Kyo4Ky/IOCsr+CsqOCtjeCspOCtjeCssCDgrKzgrL/grKjgrY3grK/grL7grLgg4KyV4Kyw4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgc2V0IGF1ZGlvIGRldmljZSBcIiVzXCIgdG8gJWQgSHouIgotI34gbXNnc3RyICJcIiVzXCIg4Kyn4K2N4Kys4Kyo4Ky/IOCsr+CsqOCtjeCspOCtjeCssOCsleCtgSAlZCDgrLngrLDgrY3grJzgrLDgrYcg4Kys4Ky/4Kyo4K2N4Kyv4Ky+4Ky4IOCsleCssOCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gdmlkZW8gZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK3grL/grKHgrL/grJMg4Kyv4Kyo4K2N4Kyk4K2N4KywIOCssuCth+CsluCsv+CsrOCsviDgrKrgrL7grIfgrIEg4KyW4K2L4Kyy4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgY2xvc2UgdmlkZW8gZGV2aWNlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK3grL/grKHgrL/grJMg4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsrOCsqOCtjeCspiDgrJXgrLDgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotI34gbXNnaWQgIk9TUyBkZXZpY2UgXCIlc1wiIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgcHJvZ3JhbS4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrJMu4KyP4Ky4LuCsj+CsuC4g4Kyv4Kyo4K2N4Kyk4K2N4KywIOCsquCtguCssOCtjeCsrOCssOCtgSDgrIXgrKjgrY3grK8g4KyV4Ky+4Kyw4Ky/4KyV4Ky+IOCspuCtjeCsrOCsvuCssOCsviDgrKzgrY3grK/grKzgrLngrL7grLAg4KyV4Kyw4Ky+4Kyv4Ky+4KyJ4Kyb4Ky/LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3MgZGV2aWNlIFwiJXNcIiwgY2hlY2sgaXRzIHBlcm1pc3Npb25zLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssCDgrKzgrY3grK/grKzgrLngrL7grLAg4KyV4Kyw4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgSwg4Kyk4Ky+4Ky54Ky+4KywIOCsheCsqOCtgeCsruCspOCsvyDgrKbgrYfgrJbgrKjgrY3grKTgrYEuIgotCi0jfiBtc2dpZCAiRGV2aWNlIFwiJXNcIiBkb2VzIG5vdCBleGlzdC4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4KyF4Kys4Ky44K2N4Kyl4Ky/4KykIOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiXCIlc1wiIOCsr+CsqOCtjeCspOCtjeCssCDgrLLgrYfgrJbgrL/grKzgrL4g4Kyq4Ky+4KyH4KyBIOCsluCti+CssuCsv+CsueCth+CssuCsviDgrKjgrL7grLngrL/grIEuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIlwiJXNcIiDgrK/grKjgrY3grKTgrY3grLAg4Kyq4Kyi4Ky84Ky/4Kys4Ky+IOCsquCsvuCsh+CsgSDgrJbgrYvgrLLgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIHZmcyBmaWxlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIuCsreCsvy7grI/grKsu4KyP4Ky4LiDgrKvgrL7grIfgrLIgXCIlc1wiIOCsquCsouCsvOCsv+CsrOCsviDgrKrgrL7grIfgrIEg4KyW4K2L4Kyy4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTm8gZmlsZW5hbWUgZ2l2ZW4uIgotI34gbXNnc3RyICLgrJXgrYzgrKPgrLjgrL8g4Kyr4Ky+4KyH4Kyy4Kyo4Ky+4KyuIOCspuCsv+CshuCsr+CsvuCshyDgrKjgrL7grLngrL/grIEiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiB2ZnMgZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmc6ICVzLiIKLSN+IG1zZ3N0ciAi4Kyt4Ky/LuCsj+Csqy7grI/grLguIOCsq+CsvuCsh+CssiBcIiVzXCIg4Kyy4K2H4KyW4Ky/4Kys4Ky+IOCsquCsvuCsh+CsgSDgrJbgrYvgrLLgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBOiAlcy4iCi0KLSN+IG1zZ2lkICJObyBmaWxlbmFtZSBnaXZlbiIKLSN+IG1zZ3N0ciAi4KyV4K2M4Kyj4Ky44Ky/IOCsq+CsvuCsh+CssuCsqOCsvuCsriDgrKbgrL/grIbgrK/grL7grIcg4Kyo4Ky+4Ky54Ky/4KyBIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNsb3NlIHZmcyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIuCsreCsvy7grI/grKsu4KyP4Ky4LiDgrKvgrL7grIfgrLIgXCIlc1wiIOCsrOCsqOCtjeCspiDgrJXgrLDgrL/grLngrYfgrLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJZb3VyIE9TUyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IG1vbm8gb3Igc3RlcmVvLiIKLSN+IG1zZ3N0ciAi4KyG4Kyq4Kyj4KyZ4K2N4KyV4KywIOCsky7grI/grLgu4KyP4Ky4LiDgrK/grKjgrY3grKTgrY3grLDgrLAg4Kyg4Ky/4KyVIOCsreCsvuCsrOCssOCthyDgrIXgrKjgrYHgrLjgrKjgrY3grKfgrL7grKgg4KyV4Kyw4Ky/4Ky54K2H4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJObyBkZXZpY2Ugc3BlY2lmaWVkLiIKLSN+IG1zZ3N0ciAi4KyV4K2M4Kyj4Ky44Ky/IOCsr+CsqOCtjeCspOCtjeCssCDgrIngrLLgrY3grLLgrYfgrJbgrL/grKQg4KyV4Kyw4Ky+4Kyv4Ky+4KyHIOCsqOCsvuCsueCsv+CsgS4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgaXMgb3Blbi4iCi0jfiBtc2dzdHIgIuCsr+CsqOCtjeCspOCtjeCssCDgrJbgrYvgrLLgrL7grK/grL7grIfgrJrgrY3grJvgrL8uIgotCi0jfiBtc2dpZCAiIgotI34gIlRoZSAlcyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4gVGhpcyBlbGVtZW50IGlzIGVzc2VudGlhbCBmb3IgIgotI34gInBsYXliYWNrLiBQbGVhc2UgaW5zdGFsbCB0aGUgcmlnaHQgcGx1Zy1pbiBhbmQgdmVyaWZ5IHRoYXQgaXQgd29ya3MgYnkgIgotI34gInJ1bm5pbmcgJ2dzdC1pbnNwZWN0ICVzJyIKLSN+IG1zZ3N0ciAiIgotI34gIiVzIOCsieCsquCsvuCspuCsvuCsqCDgrK7grL/grLPgrL/grLLgrL4g4Kyo4Ky+4Ky54Ky/4KyBLiDgrKrgrYHgrKjgrIPgrKrgrY3grLDgrKbgrLDgrY3grLbgrKgg4Kyq4Ky+4KyH4KyBIOCsj+CsueCsvyDgrIngrKrgrL7grKbgrL7grKjgrJ/grL8g4KyG4Kys4Ky24K2N4Kyv4KyVLiDgrKbgrZ/grL4g4KyV4Kyw4Ky/IOCsuOCsoOCsv+CslSDgrKrgrY3grLLgrJfgrY3grIfgrKjgrY0gIgotI34gIuCsuOCtjeCspeCsvuCsquCsv+CspCDgrJXgrLDgrKjgrY3grKTgrYEsIOCskyAnZ3N0LWluc3BlY3QgJXMnIOCsmuCss+CsvuCshyDgrK/grL7grJ7grY3grJog4KyV4Kyw4Kyo4K2N4Kyk4K2BIOCsleCsvyDgrI/grLngrL4g4KyV4Ky+4Kyw4K2N4Kyv4K2N4Kyv4KyV4Ky+4Kyw4K2AIOCsheCsm+CsvyIKLQotI34gbXNnaWQgIiIKLSN+ICJObyB1c2FibGUgY29sb3JzcGFjZSBlbGVtZW50IGNvdWxkIGJlIGZvdW5kLlxuIgotI34gIlBsZWFzZSBpbnN0YWxsIG9uZSBhbmQgcmVzdGFydC4iCi0jfiBtc2dzdHIgIiIKLSN+ICLgrJXgrYzgrKPgrLjgrL8g4Kys4K2N4Kyv4Kys4Ky54Ky+4Kyw4Kyv4K2L4KyX4K2N4KyvIOCssOCsmeCtjeCsl+CsleCtjeCst+Cth+CspOCtjeCssCDgrIngrKrgrL7grKbgrL7grKgg4Kyu4Ky/4Kyz4Ky/4Kyy4Ky+IOCsqOCsvuCsueCsv+CsgS5cbiIKLSN+ICLgrKbgrZ/grL4g4KyV4Kyw4Ky/IOCsl+Cti+Csn+Csv+CsjyDgrIngrKrgrL7grKbgrL7grKgg4Ky44K2N4Kyl4Ky+4Kyq4Ky/4KykIOCsleCssOCsvyDgrKrgrYHgrKjgrIPgrKrgrY3grLDgrL7grLDgrK7grY3grK0g4KyV4Kyw4Kyo4K2N4Kyk4K2BLiIKZGlmZiAtLWdpdCBhL3BvL3BsLmdtbyBiL3BvL3BsLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2ODI2Mi4uMDAwMDAwMAotLS0gYS9wby9wbC5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9wbC5wbyBiL3BvL3BsLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDg1ZGYyLi4wMDAwMDAwCi0tLSBhL3BvL3BsLnBvCisrKyAvZGV2L251bGwKQEAgLTEsNDMwICswLDAgQEAKLSMgUG9saXNoIHRyYW5zbGF0aW9uIGZvciBnc3QtcGx1Z2lucy1nb29kLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBKYWt1YiBCb2d1c3ogPHFib29zaEBwbGQtbGludXgub3JnPiwgMjAwNy0yMDE2LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjcuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTAyLTIwIDIxOjQzKzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEpha3ViIEJvZ3VzeiA8cWJvb3NoQHBsZC1saW51eC5vcmc+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogUG9saXNoIDx0cmFuc2xhdGlvbi10ZWFtLXBsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogcGxcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiTmllIHpuYWxlemlvbm8gc2Vyd2VyYSBKYWNrIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgemRla29kb3dhxIcgb2JyYXp1IEpQRUciCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiclcycgYXV0b3JzdHdhICclcyciCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwb8WCxIVjennEhyB6IHNlcndlcmVtIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIk5pZSB1c3Rhd2lvbm8gVVJMLWEuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIlNlcndlciBuaWUgb2JzxYJ1Z3VqZSBwcnpld2lqYW5pYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSByb3p3acSFemHEhyBuYXp3eSBzZXJ3ZXJhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgbmF3acSFemHEhyBwb8WCxIVjemVuaWEgeiBzZXJ3ZXJlbS4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJVc3Rhbm93aWVuaWUgYmV6cGllY3puZWdvIHBvxYLEhWN6ZW5pYSBuaWUgcG93aW9kxYJvIHNpxJkuIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiV3lzdMSFcGnFgiBixYLEhWQgc2llY2lvd3kgbHViIHNlcndlciBuaWVvY3pla2l3YW5pZSB6YW1rbsSFxYIgcG/FgsSFY3plbmllLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiU2Vyd2VyIHByenlzxYJhxYIgYsWCxJlkbmUgZGFuZS4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIkJyYWsgbHViIG5pZXBvcHJhd25lIHdlasWbY2llIGTFundpxJlrdSwgc3RydW1pZcWEIEFWSSBixJlkemllIHVzemtvZHpvbnkuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJUZW4gcGxpayBuaWUgemF3aWVyYSBzdHJ1bWllbmkgbmFkYWrEhWN5Y2ggc2nEmSBkbyBvZHR3b3J6ZW5pYS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlRlbiBwbGlrIGplc3QgYsWCxJlkbnkgaSBuaWUgbW/FvGUgYnnEhyBvZHR3b3J6b255LiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0iTmllIG1vxbxuYSBvZHR3YXJ6YcSHIHN0cnVtaWVuaWEsIHBvbmlld2HFvCBqZXN0IHphc3p5ZnJvd2FueSBEUk0tZW0gUGxheVJlYWR5LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiVGVuIHBsaWsgamVzdCB1c3prb2R6b255IGkgbmllIG1vxbxlIGJ5xIcgb2R0d29yem9ueS4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIkLFgsSZZG55IHJvem1pYXIgYXRvbXUuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJUZW4gcGxpayBqZXN0IG5pZWtvbXBsZXRueSBpIG5pZSBtb8W8ZSBiecSHIG9kdHdvcnpvbnkuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJPYnJheiB3IHR5bSBwbGlrdSBtb8W8ZSBuaWUgYnnEhyBvZHR3YXJ6YW55IHByYXdpZMWCb3dvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICJUZW4gcGxpayB6YXdpZXJhIHpieXQgZHXFvG8gc3RydW1pZW5pLiBPZHR3YXJ6YW5pZSB0eWxrbyAlZCBwaWVyd3N6eWNoIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJOaWUgem5hbGV6aW9ubyBvYnPFgnVnaXdhbmVnbyBzdHJ1bWllbmlhLiBCecSHIG1vxbxlIHRyemViYSB6YWluc3RhbG93YcSHICIKLSJ3dHljemvEmSByb3pzemVyemVuaWEgR1N0cmVhbWVyYSBSVFNQIGRsYSBzdHJ1bWllbmkgUmVhbCBtZWRpYS4iCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLSJOaWUgem5hbGV6aW9ubyBvYnPFgnVnaXdhbmVnbyBzdHJ1bWllbmlhLiBCecSHIG1vxbxlIHRyemViYSB6ZXp3b2xpxIcgbmEgd2nEmWNlaiAiCi0icHJvdG9rb8WCw7N3IHRyYW5zcG9ydHUsIGFsYm8gbW/FvGUgYnJha293YcSHIHfFgmHFm2Npd2VqIHd0eWN6a2kgcm96c3plcnplbmlhICIKLSJSVFNQIEdTdHJlYW1lcmEuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgdXJ6xIVkemVuaWEgZMW6d2nEmWtvd2VnbyBkbyBvZHR3YXJ6YW5pYS4gVXJ6xIVkemVuaWUgIgotImplc3QgdcW8eXdhbmUgcHJ6ZXogaW5uxIUgYXBsaWthY2rEmS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgdXJ6xIVkemVuaWEgZMW6d2nEmWtvd2VnbyBkbyBvZHR3YXJ6YW5pYS4gQnJhayB1cHJhd25pZcWEICIKLSJkbyBvdHdhcmNpYSB1cnrEhWR6ZW5pYS4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG90d29yennEhyB1cnrEhWR6ZW5pYSBkxbp3acSZa293ZWdvIGRvIG9kdHdhcnphbmlhLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJOaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIHVyesSFZHplbmlhIGTFundpxJlrb3dlZ28gZG8gb2R0d2FyemFuaWEuIFRhIHdlcnNqYSBPcGVuICIKLSJTb3VuZCBTeXN0ZW0gbmllIGplc3Qgb2JzxYJ1Z2l3YW5hIHByemV6IHRlbiBlbGVtZW50LiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJPZHR3YXJ6YW5pZSBuaWUgamVzdCBvYnPFgnVnaXdhbmUgcHJ6ZXogdG8gdXJ6xIVkemVuaWUgZMW6d2nEmWtvd2UuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJCxYLEhWQgb2R0d2FyemFuaWEgZMW6d2nEmWt1LiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiTmFncnl3YW5pZSBuaWUgamVzdCBvYnPFgnVnaXdhbmUgcHJ6ZXogdG8gdXJ6xIVkemVuaWUgZMW6d2nEmWtvd2UuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQsWCxIVkIG5hZ3J5d2FuaWEgeiB1cnrEhWR6ZW5pYSBkxbp3acSZa293ZWdvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk5pZSB1ZGHFgm8gc2nEmSBvdHdvcnp5xIcgdXJ6xIVkemVuaWEgZMW6d2nEmWtvd2VnbyBkbyBuYWdyeXdhbmlhLiBCcmFrIHVwcmF3bmllxYQgIgotImRvIG90d2FyY2lhIHVyesSFZHplbmlhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG90d29yennEhyB1cnrEhWR6ZW5pYSBkxbp3acSZa293ZWdvIGRvIG5hZ3J5d2FuaWEuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIk5pZSB6bmFsZXppb25vIHVyesSFZHplbmlhIENvcmVBdWRpbyIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG90d29yennEhyB1cnrEhWR6ZW5pYSBDb3JlQXVkaW8iCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICLFuXLDs2TFgm8gbmFncnl3YW5pYSIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pa3JvZm9uIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiV2VqxZtjaWUgbGluaWkiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiV2V3bsSZdHJ6bnkgQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiV2VqxZtjaWUgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiV2VqxZtjaWUgQVVYIDEiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiV2VqxZtjaWUgQVVYIDIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiUMSZdGxhIHp3cm90bmEga29kZWthIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJQxJl0bGEgendyb3RuYSBTdW5WVFMiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIkfFgm/Fm25vxZvEhyIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIld6bW9jbmllbmllIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIldidWRvd2FueSBnxYJvxZtuaWN6ZWsiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIlPFgnVjaGF3a2kiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiV3lqxZtjaWUgbGluaWkiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIld5asWbY2llIFNQRElGIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJXeWrFm2NpZSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiV3lqxZtjaWUgQVVYIDIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQsWCxIVkIG9kY3p5dHUgJWQgYmFqdMOzdyB6IHVyesSFZHplbmlhICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0iTmllIHVkYcWCbyBzacSZIHd5bGljennEhyBkb3N0xJlwbnljaCBmb3JtYXTDs3cgb2JyYXp1LCB6IGt0w7NyeW1pIG1vxbxlIGR6aWHFgmHEhyAiCi0idXJ6xIVkemVuaWUgJyVzJyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kd3pvcm93YcSHIGJ1Zm9yw7N3IHogdXJ6xIVkemVuaWEgJyVzJyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiU3Rlcm93bmlrIHVyesSFZHplbmlhICclcycgbmllIG9ic8WCdWd1amUgbWV0b2R5IHdlL3d5ICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiU3Rlcm93bmlrIHVyesSFZHplbmlhICclcycgbmllIG9ic8WCdWd1amUgxbxhZG5laiB6bmFuZWogbWV0b2R5IHdlL3d5LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJVcnrEhWR6ZW5pZSAnJXMnIGplc3QgemFqxJl0ZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiVXJ6xIVkemVuaWUgJyVzJyBuaWUgcG90cmFmaSBwcnplY2h3eXR5d2HEhyBvYnJhenUgJWR4JWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIlVyesSFZHplbmllICclcycgbmllIHBvdHJhZmkgcHJ6ZWNod3l0eXdhxIcgb2JyYXp1IHcgcG9kYW55bSBmb3JtYWNpZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJVcnrEhWR6ZW5pZSAnJXMnIG9ic8WCdWd1amUgbmllY2nEhWfFgmUgcG93aWVyemNobmllIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHV6eXNrYcSHIHBhcmFtZXRyw7N3IHVyesSFZHplbmlhICclcyciCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIiIKLSJVcnrEhWR6ZW5pZSBvYnJhenUgbmllIHByenlqxJnFgm8gbm93ZWdvIHVzdGF3aWVuaWEgY3rEmXN0b3RsaXdvxZtjaSBrbGF0ZWsuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiVXJ6xIVkemVuaWUgb2JyYXp1IG5pZSBwcnpla2F6YcWCbyBmb3JtYXR1IHd5asWbY2lvd2Vnby4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiVXJ6xIVkemVuaWUgb2JyYXp1IHp3csOzY2nFgm8gYsWCxJlkbmUgd3ltaWFyeS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiVXJ6xJlkemVuaWUgb2JyYXp1IHd5a29yenlzdHVqZSBuaWUgb2JzxYJ1Z2l3YW55IHNwb3PDs2IgcHJ6ZXBsb3R1LiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJVcnrEhWR6ZW5pZSBvYnJhenUgd3lrb3J6eXN0dWplIG5pZSBvYnPFgnVnaXdhbnkgZm9ybWF0IHBpa3NlbGEuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBza29uZmlndXJvd2HEhyB3ZXduxJl0cnpuZWogcHVsaSBidWZvcsOzdy4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIlVyesSZZHplbmllIG9icmF6dSBuaWUgemFzdWdlcm93YcWCbyDFvGFkbmVnbyByb3ptaWFydSBidWZvcmEuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiQnJhayBvZGRvbG5laiBwdWxpIGRvIHphaW1wb3J0b3dhbmlhLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHV6eXNrYcSHIHVzdGF3aWXFhCB0dW5lcmEgJWQgdXJ6xIVkemVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQsWCxIVkIHBvZGN6YXMgcG9iaWVyYW5pYSBtb8W8bGl3b8WbY2kgdXrEhWR6ZW5pYSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIlVyesSFZHplbmllICclcycgbmllIGplc3QgdHVuZXJlbS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXp5c2thxIcgd2VqxZtjaWEgcmFkaW93ZWdvIHogdXJ6xIVkemVuaWEgJyVzJy4gIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHVzdGF3acSHIHdlasWbY2lhICVkIHVyesSFZHplbmlhICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHptaWVuacSHIHN0YW51IHd5Y2lzemVuaWEgZGxhIHVyesSFZHplbmlhICclcycuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgcHJ6eWR6aWVsacSHIHd5bWFnYW5laiBwYW1pxJljaS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHByenlkemllbGnEhyB3eW1hZ2FuZWogcGFtacSZY2kuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIktvbndlcnRlciB1cnrEhWR6ZW5pYSAlcyBuaWUgbWEgb2JzxYJ1Z2l3YW5lZ28gZm9ybWF0dSB3ZWrFm2Npb3dlZ28iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvbndlcnRlciB1cnrEhWR6ZW5pYSAlcyBuaWUgbWEgb2JzxYJ1Z2l3YW5lZ28gZm9ybWF0dSB3eWrFm2Npb3dlZ28iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIktvZGVyIHVyesSFZHplbmlhICVzIG5pZSBtYSBvYnPFgnVnaXdhbmVnbyBmb3JtYXR1IHdlasWbY2lvd2VnbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIktvZGVyIHVyesSFZHplbmlhICVzIG5pZSBtYSBvYnPFgnVnaXdhbmVnbyBmb3JtYXR1IHd5asWbY2lvd2VnbyIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXJ1Y2hvbWnEhyB3xIV0a3UgZGVrb2R1asSFY2Vnby4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSBwcnpldHdvcnp5xIcgcmFta2kuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkLFgsSFZCBwb2JpZXJhbmlhIG1vxbxsaXdvxZtjaSB1cnrEhWR6ZW5pYSAnJXMnOiB0byBuaWUgamVzdCBzdGVyb3duaWsgdjRsMi4gIgotIlByb3N6xJkgc3ByYXdkemnEhyBjenkgdG8gc3Rlcm93bmlrIHY0bDEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIG9kcHl0YcSHIG8gYXRyeWJ1dHkgd2VqxZtjaWEgJWQgdXJ6xIVkemVuaWEgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmllIHVkYcWCbyBzacSZIHV6eXNrYcSHIHVzdGF3aWXFhCB0dW5lcmEgJWQgdXJ6xIVkemVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb2RweXRhxIcgbm9ybWFsaXphY2ppIHVyesSFZHplbmlhICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXp5c2thxIcgYXRyeWJ1dMOzdyBzdGVydWrEhWN5Y2ggdXJ6xIVkemVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmllIG1vxbxuYSB6aWRlbnR5Zmlrb3dhxIcgdXJ6xIVkemVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiVG8gbmllIGplc3QgdXJ6xIVkemVuaWUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgb3R3b3J6ecSHIHVyesSFZHplbmlhICclcycgZG8gb2Rjenl0dSBpIHphcGlzdS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJVcnrEhWR6ZW5pZSAnJXMnIG5pZSBqZXN0IHVyesSFZHplbmllbSBwcnplY2h3eXR1asSFY3ltLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiVXJ6xIVkemVuaWUgJyVzJyBuaWUgamVzdCB1cnrEhWR6ZW5pZW0gd3lqxZtjaW93eW0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJVcnrEhWR6ZW5pZSAnJXMnIG5pZSBqZXN0IHVyesSFZHplbmllbSBNMk0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgd3lrb25hxIcgZHVwIHVyesSFZHplbmlhICclcycgZG8gb2Rjenl0dSBpIHphcGlzdS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB1c3Rhd2nEhyBub3JtYWxpemFjamkgZGxhIHVyesSFZHplbmlhICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIk5pZSB1ZGHFgm8gc2nEmSB1enlza2HEhyBha3R1YWxuZWogY3rEmXN0b3RsaXdvxZtjaSB0dW5lcmEgZGxhIHVyesSFZHplbmlhICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJOaWUgdWRhxYJvIHNpxJkgdXN0YXdpxIcgYWt0dWFsbmVqIGN6xJlzdG90bGl3b8WbY2kgdHVuZXJhIGRsYSB1cnrEhWR6ZW5pYSAnJXMnIG5hICIKLSIlbHUgSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB1enlza2HEhyBzacWCeSBzeWduYcWCdSBkbGEgdXJ6xIVkemVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB1enlza2HEhyB3YXJ0b8WbY2kgc3RlcnVqxIVjZWogJWQgdXJ6xIVkemVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5pZSB1ZGHFgm8gc2nEmSB1c3Rhd2nEhyAlZCBqYWtvIHdhcnRvxZtjaSBzdGVydWrEhWNlaiAlZCB1cnrEhWR6ZW5pYSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk5pZSB1ZGHFgm8gc2nEmSB1enlza2HEhyBha3R1YWxuZWdvIHdlasWbY2lhIHVyesSFZHplbmlhICclcycuIE1vxbxlIHRvIHJhZGlvIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJOaWUgdWRhxYJvIHNpxJkgdXp5c2thxIcgYWt0dWFsbmVnbyB3eWrFm2NpYSB1cnrEhWR6ZW5pYSAnJXMnLiBNb8W8ZSB0byByYWRpbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJOaWUgdWRhxYJvIHNpxJkgdXN0YXdpxIcgd3lqxZtjaWEgJWQgdXJ6xIVkemVuaWEgJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiWm1pYW5hIHJvemR6aWVsY3pvxZtjaSB3IGN6YXNpZSBkemlhxYJhbmlhIG5pZSBqZXN0IGplc3pjemUgb2JzxYJ1Z2l3YW5hLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiTmllIG1vxbxuYSBwcmFjb3dhxIcgYmV6IHplZ2FyYSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiQsWCxIVkIHdld27EmXRyem55IHN0cnVtaWVuaWEgZGFueWNoLiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi0jfiBtc2dzdHIgIkLFgsSFZCB3ZXduxJl0cnpueSBwcnplcMWCeXd1IGRhbnljaC4iCmRpZmYgLS1naXQgYS9wby9wdF9CUi5nbW8gYi9wby9wdF9CUi5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NGRkODAuLjAwMDAwMDAKLS0tIGEvcG8vcHRfQlIuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vcHRfQlIucG8gYi9wby9wdF9CUi5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiZGFkOC4uMDAwMDAwMAotLS0gYS9wby9wdF9CUi5wbworKysgL2Rldi9udWxsCkBAIC0xLDgwMSArMCwwIEBACi0jIEJyYXppbGlhbiBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9uIG9mIGdzdC1wbHVnaW5zLWdvb2QuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jIENvcHlyaWdodCAoQykgMjAwOC0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBGYWJyw61jaW8gR29kb3kgPHNrYXJsbG90QGdtYWlsLmNvbT4sIDIwMDgtMjAxNi4KLSMKLSMgZGF0YSBmbG93IC0+IGZsdXhvIGRlIGRhZG9zCi0jIHN0cmVhbWluZyAtPiBmbHV4byBjb250w61udW8KLSMgY2xvY2sgLT4gdGVtcG9yaXphZG9yCi0jIHBsYW5lIChvdmVybGF5IHBsYW5lKSAtPiBwbGFubyBkZSBzb2JyZXBvc2nDp8OjbwotIyBwb29sIC0+IGNvbGXDp8OjbywgY29uanVudG8sIGFncnVwYW1lbnRvCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kLTEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDUtMDYgMTc6NDktMDMwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogRmFicsOtY2lvIEdvZG95IDxza2FybGxvdEBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQnJhemlsaWFuIFBvcnR1Z3Vlc2UgPGxkcGJyLXRyYW5zbGF0aW9uQGxpc3RzLnNvdXJjZWZvcmdlLiIKLSJuZXQ+XG4iCi0iTGFuZ3VhZ2U6IHB0X0JSXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gPiAxKTtcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiU2Vydmlkb3IgSmFjayBuw6NvIGVuY29udHJhZG8iCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIkZhbGhhIGFvIGRlY29kaWZpY2FyIGEgaW1hZ2VtIEpQRUciCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIlwiJXNcIiBwb3IgXCIlc1wiIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29uZWN0YXIgYW8gc2Vydmlkb3IiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiTmVuaHVtIFVSTCBkZWZpbmlkby4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiTsOibyBow6Egc3Vwb3J0ZSBhIGJ1c2NhIHBlbG8gc2Vydmlkb3IuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgcmVzb2x2ZXIgbyBub21lIGRvIHNlcnZpZG9yLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXN0YWJlbGVjZXIgdW1hIGNvbmV4w6NvIGNvbSBzZXJ2aWRvci4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJDb25maWd1cmHDp8OjbyBkZSBjb25leMOjbyBzZWd1cmEgZmFsaG91LiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIiIKLSJVbSBlcnJvIGRlIHJlZGUgb2NvcnJldSwgb3UgbyBzZXJ2aWRvciBmZWNob3UgYSBjb25leMOjbyBpbmVzcGVyYWRhbWVudGUuIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICJPIHNlcnZpZG9yIGVudmlvdSBkYWRvcyBydWlucy4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIkVudHJhZGEgZGUgw6F1ZGlvIG51bGEgb3UgaW52w6FsaWRhLCBvIGZsdXhvIEFWSSBwb2RlIGVzdGFyIGNvcnJvbXBpZG8uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJFc3RlIGFycXVpdm8gbsOjbyBjb250w6ptIGZsdXhvcyByZXByb2R1esOtdmVpcy4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkVzdGUgYXJxdWl2byDDqSBpbnbDoWxpZG8gZSBuw6NvIHDDtGRlIHNlciByZXByb2R1emlkby4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotIk7Do28gZm9pIHBvc3PDrXZlbCByZXByb2R1emlyIG8gZmx1eG8gcG9yIGVzdGFyIGNyaXB0b2dyYWZhZG8gY29tIFBsYXlSZWFkeSAiCi0iRFJNLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRXN0ZSBhcnF1aXZvIGVzdMOhIGNvcnJvbXBpZG8gZSBuw6NvIHDDtGRlIHNlciByZXByb2R1emlkby4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIlRhbWFuaG8gZGUgQXRvbSBpbnbDoWxpZG8uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJFc3RlIGFycXVpdm8gZXN0w6EgaW5jb21wbGV0byBlIG7Do28gcMO0ZGUgc2VyIHJlcHJvZHV6aWRvLiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiTyB2w61kZW8gbmVzdGUgYXJxdWl2byBwb2RlIG7Do28gc2VyIHJlcHJvZHV6aWRvIGNvcnJldGFtZW50ZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiRXN0ZSBhcnF1aXZvIGNvbnTDqm0gbXVpdG9zIGZsdXhvcy4gQXBlbmFzIHJlcHJvZHV6aW5kbyBvIHByaW1laXJvICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJOZW5odW0gZmx1eG8gY29tIHN1cG9ydGUgZm9pIGxvY2FsaXphZG8uIFZvY8OqIHBvZGUgcHJlY2lzYXIgaW5zdGFsYXIgdW0gcGx1Zy0iCi0iaW4gZGUgZXh0ZW5zw6NvIEdTdHJlYW1lciBSVFNQIHBhcmEgZmx1eG9zIFJlYWwgbWVkaWEuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0iTmVuaHVtIGZsdXhvIGNvbSBzdXBvcnRlIGZvaSBsb2NhbGl6YWRvLiBUYWx2ZXogaGFqYSBuZWNlc3NpZGFkZSBkZSBxdWUgbWFpcyAiCi0icHJvdG9jb2xvcyBkZSB0cmFuc3BvcnRlIHNlamFtIHBlcm1pdGlkb3Mgb3Ugc2Vuw6NvIG8gcGx1Zy1pbiBkZSBleHRlbnPDo28gIgotIkdTdHJlYW1lciBSVFNQIHBvZGUgZXN0YXIgaW5jb3JyZXRvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSDDoXVkaW8gcGFyYSByZXByb2R1w6fDo28uIE8gZGlzcG9zaXRpdm8gIgotImVzdMOhIHNlbmRvIHVzYWRvIHBvciBvdXRybyBhcGxpY2F0aXZvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gZGlzcG9zaXRpdm8gZGUgw6F1ZGlvIHBhcmEgcmVwcm9kdcOnw6NvLiBWb2PDqiBuw6NvIHRlbSAiCi0icGVybWlzc8OjbyBwYXJhIGFicmlyIG8gZGlzcG9zaXRpdm8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciBvIGRpc3Bvc2l0aXZvIGRlIMOhdWRpbyBwYXJhIHJlcHJvZHXDp8Ojby4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyIG8gZGlzcG9zaXRpdm8gZGUgw6F1ZGlvIHBhcmEgcmVwcm9kdcOnw6NvLiBOw6NvIGjDoSAiCi0ic3Vwb3J0ZSBhIGVzdGUgZWxlbWVudG8gbmVzdGEgdmVyc8OjbyBkbyBTaXN0ZW1hIEFiZXJ0byBkZSBTb20gKE9TUykuIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIk7Do28gaMOhIHN1cG9ydGUgYSByZXByb2R1w6fDo28gcG9yIGVzdGUgZGlzcG9zaXRpdm8gZGUgw6F1ZGlvLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiRXJybyBkZSByZXByb2R1w6fDo28gZGUgw6F1ZGlvLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiTsOjbyBow6Egc3Vwb3J0ZSBhIGdyYXZhw6fDo28gcG9yIGVzdGUgZGlzcG9zaXRpdm8gZGUgw6F1ZGlvLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkVycm8gYW8gZ3JhdmFyIGRvIGRpc3Bvc2l0aXZvIGRlIMOhdWRpby4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSDDoXVkaW8gcGFyYSBncmF2YcOnw6NvLiBWb2PDqiBuw6NvIHRlbSAiCi0icGVybWlzc8OjbyBwYXJhIGFicmlyIG8gZGlzcG9zaXRpdm8uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSDDoXVkaW8gcGFyYSBncmF2YcOnw6NvLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICJEaXNwb3NpdGl2byBDb3JlQXVkaW8gbsOjbyBlbmNvbnRyYWRvIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICJEaXNwb3NpdGl2byBDb3JlQXVkaW8gbsOjbyBww7RkZSBzZXIgYWJlcnRvIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiT3JpZ2VtIGRlIGdyYXZhw6fDo28iCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWNyb2ZvbmUiCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICJFbnRyYWRhIGRlIGxpbmhhIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkNEIGludGVybm8iCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiRW50cmFkYSBTUERJRiIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICJFbnRyYWRhIGF1eC4gMSIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJFbnRyYWRhIGF1eC4gMiIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJDT0RFQyBMb29wYmFjayIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiU3VuVlRTIExvb3BiYWNrIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICJWb2x1bWUiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJHYW5obyIKLQotbXNnaWQgIk1vbml0b3IiCi1tc2dzdHIgIk1vbml0b3JhZG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiQWx0by1mYWxhbnRlIGludGVybm8iCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIkZvbmUgZGUgb3V2aWRvIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIlNhw61kYSBkZSBsaW5oYSIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU2HDrWRhIFNQRElGIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJTYcOtZGEgYXV4LiAxIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICJTYcOtZGEgYXV4LiAyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkVycm8gYW8gbGVyICVkIGJ5dGVzIGRvIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSJGYWxoYSBhbyByZWxhY2lvbmFyIG9zIGZvcm1hdG9zIGRlIHbDrWRlbyBxdWUgbyBkaXNwb3NpdGl2byBcIiVzXCIgb2ZlcmVjZSAiCi0ic3Vwb3J0ZSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIG1hcGVhciBidWZmZXJzIGRvIGRpc3Bvc2l0aXZvIFwiJXNcIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiTyBkcml2ZXIgZG8gZGlzcG9zaXRpdm8gXCIlc1wiIG7Do28gdGVtIHN1cG9ydGUgYW8gbcOpdG9kbyAlZCBkZSBFL1MiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0iTyBkcml2ZXIgZG8gZGlzcG9zaXRpdm8gXCIlc1wiIG7Do28gdGVtIHN1cG9ydGUgYSBuZW5odW0gbcOpdG9kbyBjb25oZWNpZG8gZGUgIgotIkUvUy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBcIiVzXCIgZXN0w6Egb2N1cGFkbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBcIiVzXCIgbsOjbyByZWFsaXphIGNhcHR1cmEgYSAlZHglZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBcIiVzXCIgbsOjbyByZWFsaXphIGNhcHR1cmEgbm8gZm9ybWF0byBlc3BlY2lmaWNhZG8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiIgotIk8gZGlzcG9zaXRpdm8gXCIlc1wiIG7Do28gdGVtIHN1cG9ydGUgYSBwbGFub3MgZGUgc29icmVwb3Npw6fDo28gbsOjby1jb250w61udW9zIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIG9idGVyIG9zIHBhcsOibWV0cm9zIG5vIGRpc3Bvc2l0aXZvIFwiJXNcIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBkZSB2w61kZW8gbsOjbyBhY2VpdGEgZGVmaW5pciB1bWEgbm92YSB0YXhhIGRlIHF1YWRyb3MuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBkZSB2w61kZW8gbsOjbyBmb3JuZWNldSB1bSBmb3JtYXRvIGRlIHNhw61kYS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBkZSB2w61kZW8gcmV0b3Jub3UgZGltZW5zw7VlcyBpbnbDoWxpZGFzLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICIiCi0iT3MgZGlzcG9zaXRpdm9zIGRlIHbDrWRlbyB1dGlsaXphbSB1bSBtw6l0b2RvIGRlIGVudHJlbGHDp2FtZW50byBuw6NvIHN1cG9ydGFkby4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiT3MgZGlzcG9zaXRpdm9zIGRlIHbDrWRlbyB1dGlsaXphbSB1bSBmb3JtYXRvIHBhcmEgcGl4ZWwgbsOjbyBzdXBvcnRhZG8uIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIkZhbGhhIGFvIGNvbmZpZ3VyYXIgdW1hIGNvbGXDp8OjbyBkZSBidWZmZXIgaW50ZXJuby4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIk8gZGlzcG9zaXRpdm8gZGUgdsOtZGVvIG7Do28gc3VnZXJpdSBuZW5odW0gdGFtYW5obyBkZSBidWZmZXIuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiTmVuaHVtYSBjb2xlw6fDo28gZGUgZmx1eG8gZGUgcmVjZWJpbWVudG8gcGFyYSBpbXBvcnRhci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZhbGhhIGFvIG9idGVyIGNvbmZpZ3VyYcOnw7VlcyBkbyBzaW50b25pemFkb3IgJWQgbm8gZGlzcG9zaXRpdm8gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJFcnJvIGFvIG9idGVyIGZ1bmNpb25hbGlkYWRlcyBkbyBkaXNwb3NpdGl2byBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBcIiVzXCIgbsOjbyDDqSB1bSBzaW50b25pemFkb3IuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiRmFsaGEgYW8gb2J0ZXIgYSBlbnRyYWRhIGRlIHLDoWRpbyBkbyBkaXNwb3NpdGl2byBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiRmFsaGEgYW8gZGVmaW5pciBhIGVudHJhZGEgJWQgbm8gZGlzcG9zaXRpdm8gJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxoYSBhbyBhbHRlcm5hciBlbnRyZSBjb20gZSBzZW0gw6F1ZGlvIHBhcmEgbyBkaXNwb3NpdGl2byBcIiVzXCIuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJGYWxoYSBhbyBhbG9jYXIgYSBtZW3Ds3JpYSBuZWNlc3PDoXJpYS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiRmFsaGEgYW8gYWxvY2FyIGEgbWVtw7NyaWEgbmVjZXNzw6FyaWEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJPIGNvbnZlcnNvciBubyBkaXNwb3NpdGl2byAlcyBuw6NvIHRlbSB1bSBmb3JtYXRvIGRlIGVudHJhZGEgY29tIHN1cG9ydGUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIk8gY29udmVyc29yIG5vIGRpc3Bvc2l0aXZvICVzIG7Do28gdGVtIHVtIGZvcm1hdG8gZGUgc2HDrWRhIGNvbSBzdXBvcnRlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iTyBjb2RpZmljYWRvciBubyBkaXNwb3NpdGl2byAlcyBuw6NvIHRlbSB1bSBmb3JtYXRvIGRlIGVudHJhZGEgY29tIHN1cG9ydGUiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iTyBjb2RpZmljYWRvciBubyBkaXNwb3NpdGl2byAlcyBuw6NvIHRlbSB1bSBmb3JtYXRvIGRlIHNhw61kYSBjb20gc3Vwb3J0ZSIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJGYWxoYSBhbyBpbmljaWFyIG8gc2VnbWVudG8gZGUgZGVjb2RpZmljYcOnw6NvLiIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiRmFsaGEgYW8gcHJvY2Vzc2FyIHF1YWRyby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iRXJybyBhbyBvYnRlciByZWN1cnNvcyBkbyBkaXNwb3NpdGl2byBcIiVzXCI6IEVsZSBuw6NvIMOpIHVtIGRyaXZlciB2NGwyLiAiCi0iVmVyaWZpcXVlIHNlIGVsZSDDqSB1bSBkcml2ZXIgdjRsMS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICJGYWxoYSBhbyBleGFtaW5hciBvcyBhdHJpYnV0b3MgZGEgZW50cmFkYSAlZCBubyBkaXNwb3NpdGl2byAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxoYSBhbyBvYnRlciBjb25maWd1cmHDp8O1ZXMgZG8gc2ludG9uaXphZG9yICVkIG5vIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxoYSBhbyBleGFtaW5hciBhcyBub3JtYXMgbm8gZGlzcG9zaXRpdm8gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmFsaGEgYW8gb2J0ZXIgYXRyaWJ1dG9zIGRlIGNvbnRyb2xlIG5vIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTyBkaXNwb3NpdGl2byBcIiVzXCIgbsOjbyBww7RkZSBzZXIgaWRlbnRpZmljYWRvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJcIiVzXCIgbsOjbyDDqSB1bSBkaXNwb3NpdGl2by4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBcIiVzXCIgcGFyYSBsZWl0dXJhIGUgZ3JhdmHDp8Ojby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIFwiJXNcIiBuw6NvIMOpIHVtIGRpc3Bvc2l0aXZvIGRlIGNhcHR1cmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJPIGRpc3Bvc2l0aXZvIFwiJXNcIiBuw6NvIMOpIHVtIGRpc3Bvc2l0aXZvIGRlIHNhw61kYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIk8gZGlzcG9zaXRpdm8gXCIlc1wiIG7Do28gw6kgdW0gZGlzcG9zaXRpdm8gTTJNLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiIgotIk7Do28gZm9pIHBvc3PDrXZlbCBkdXBsaWNhciBvIGRpc3Bvc2l0aXZvIFwiJXNcIiBwYXJhIGxlaXR1cmEgZSBncmF2YcOnw6NvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmFsaGEgYW8gZGVmaW5pciBhcyBub3JtYXMgcGFyYSBvIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJGYWxoYSBhbyBvYnRlciBhIGZyZXHDvMOqbmNpYSBkbyBzaW50b25pemFkb3IgcGFyYSBvIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIkZhbGhhIGFvIGRlZmluaXIgYSBmcmVxw7zDqm5jaWEgZG8gc2ludG9uaXphZG9yIHBhcmEgbyBkaXNwb3NpdGl2byBcIiVzXCIgw6AgIgotIiVsdSBIei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRmFsaGEgYW8gb2J0ZXIgYSBmb3LDp2EgZG8gc2luYWwgcGFyYSBvIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZhbGhhIGFvIG9idGVyIG8gdmFsb3IgcGFyYSBvIGNvbnRyb2xlICVkIG5vIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkZhbGhhIGFvIGRlZmluaXIgbyB2YWxvciAlZCBwYXJhIG8gY29udHJvbGUgJWQgbm8gZGlzcG9zaXRpdm8gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkZhbGhhIGFvIG9idGVyIGEgZW50cmFkYSBhdHVhbCBubyBkaXNwb3NpdGl2byBcIiVzXCIuIFRhbHZleiBzZWphIHVtICIKLSJkaXNwb3NpdGl2byBkZSByw6FkaW8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkZhbGhhIGFvIG9idGVyIGEgc2HDrWRhIGF0dWFsIG5vIGRpc3Bvc2l0aXZvIFwiJXNcIi4gVGFsdmV6IHNlamEgdW0gIgotImRpc3Bvc2l0aXZvIGRlIHLDoWRpbyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJGYWxoYSBhbyBkZWZpbmlyIGEgc2HDrWRhICVkIG5vIGRpc3Bvc2l0aXZvICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIkFpbmRhIG7Do28gaMOhIHN1cG9ydGUgYSBtdWRhbsOnYSBkZSByZXNvbHXDp8OjbyBlbnF1YW50byBlc3TDoSBleGVjdXRhbmRvLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgb3BlcmFyIHNlbSB1bSB0ZW1wb3JpemFkb3IiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkVycm8gaW50ZXJubyBubyBmbHV4byBkZSBkYWRvcy4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJFcnJvIGludGVybm8gbm8gZmx1eG8gZGUgZGFkb3MuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJPIGRpc3Bvc2l0aXZvIFwiJXNcIiBuw6NvIHRlbSBzdXBvcnRlIGEgY2FwdHVyYSBkZSB2w61kZW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc291bmQgc2VydmVyIgotI34gbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXN0YWJlbGVjZXIgdW1hIGNvbmV4w6NvIGNvbSBzZXJ2aWRvciBkZSBzb20iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgc291bmQgc2VydmVyIGNhcGFiaWxpdGllcyIKLSN+IG1zZ3N0ciAiRmFsaGEgYW8gZXhhbWluYXIgb3MgcmVjdXJzb3MgZG8gc2Vydmlkb3IgZGUgc29tIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiR3JhdmUiCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgIkFndWRvIgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlNpbnRldGl6YWRvciIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiQWx0by1mYWxhbnRlIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAiRW50cmFkYSBkZSBsaW5oYSIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJNaXhlciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiR3JhdmHDp8OjbyIKLQotI34gbXNnaWQgIkluLWdhaW4iCi0jfiBtc2dzdHIgIkdhbmhvIGRlIGVudHJhZGEiCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAiR2FuaG8gZGUgc2HDrWRhIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMaW5oYSAxIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMaW5oYSAyIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJMaW5oYSAzIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaWdpdGFsIDEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIkRpZ2l0YWwgMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXRhbCAzIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgZGUgZm9uZSIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIGRlIGZvbmUiCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiVsOtZGVvIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlLDoWRpbyIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSDDoXVkaW8gcGFyYSBtYW5pcHVsYcOnw6NvIGRvICIKLSN+ICJjb250cm9sYWRvciBkbyBtaXhlci4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiBUaGlzIHZlcnNpb24gb2YgIgotI34gInRoZSBPcGVuIFNvdW5kIFN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBkaXNwb3NpdGl2byBkZSDDoXVkaW8gcGFyYSBtYW5pcHVsYcOnw6NvIGRvICIKLSN+ICJjb250cm9sYWRvciBkbyBtaXhlci4gTsOjbyBow6Egc3Vwb3J0ZSBhIGVzdGUgZWxlbWVudG8gY29tIGVzdGEgdmVyc8OjbyBkbyAiCi0jfiAiU2lzdGVtYSBBYmVydG8gZGUgU29tIChPU1MpLiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiUHJpbmNpcGFsIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIkZyb250YWwiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJUcmFzZWlyYSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkZvbmVzIGRlIG91dmlkbyIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiQ2VudHJhbCIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIlN1cnJvdW5kIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiTGF0ZXJhbCIKLQotI34gbXNnaWQgIkFVWCBPdXQiCi0jfiBtc2dzdHIgIlNhw61kYSBhdXguIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIlByb2Z1bmRpZGFkZSAzRCIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0QgY2VudHJhbCIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIlJlYWxjZSAzRCIKLQotI34gbXNnaWQgIlRlbGVwaG9uZSIKLSN+IG1zZ3N0ciAiVGVsZWZvbmUiCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiRW50cmFkYSBkZSB2w61kZW8iCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgYXV4LiIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICJHYW5obyBkZSBncmF2YcOnw6NvIgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIkdhbmhvIGRlIHNhw61kYSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIkF1bWVudG8gZG8gbWljcm9mb25lIgotCi0jfiBtc2dpZCAiRGlhZ25vc3RpYyIKLSN+IG1zZ3N0ciAiRGlhZ27Ds3N0aWNvIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAiQXVtZW50byBkZSBncmF2ZXMiCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiUG9ydGFzIGRlIHJlcHJvZHXDp8OjbyIKLQotI34gbXNnaWQgIklucHV0IgotI34gbXNnc3RyICJFbnRyYWRhIgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIk9yaWdlbSBkZSBtb25pdG9yYcOnw6NvIgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAiQmlwIGRvIHRlY2xhZG8iCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsYXIgZXN0w6lyZW8iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgIkVzdMOpcmVvIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIlNvbSBzdXJyb3VuZCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAiR2FuaG8gZG8gbWljcm9mb25lIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIk9yaWdlbSBkbyBhbHRvLWZhbGFudGUiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiT3JpZ2VtIGRvIG1pY3JvZm9uZSIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkphY2siCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgIkNlbnRyYWwvTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiTWl4YWdlbSBlc3TDqXJlbyIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICJNaXhhZ2VtIG1vbm8iCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIk1peGFnZW0gZGUgZW50cmFkYSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWljcm9mb25lIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk1pY3JvZm9uZSAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIlNhw61kYSBkaWdpdGFsIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAiRW50cmFkYSBkaWdpdGFsIgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIk1vbm9mb25lIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgIk91dHJvIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiTmVuaHVtIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIkxpZ2FkbyIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAiRGVzbGlnYWRvIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiTXVkbyIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIlLDoXBpZG8iCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiTXVpdG8gYmFpeGEiCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIkJhaXhhIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICJNw6lkaWEiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJBbHRhIgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICJNdWl0byBhbHRhIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAiUHJvZHXDp8OjbyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIE1pY3JvcGhvbmUiCi0jfiBtc2dzdHIgIk1pY3JvZm9uZSBkbyBwYWluZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIkVudHJhZGEgZGUgbGluaGEgZG8gcGFpbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJGb25lcyBkZSBvdXZpZG8gZG8gcGFpbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIGRlIGxpbmhhIGRvIHBhaW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciB2ZXJkZSIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciByb3NhIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGF6dWwiCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGJyYW5jbyIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgcHJldG8iCi0KLSN+IG1zZ2lkICJHcmF5IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgY2luemEiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBsYXJhbmphIgotCi0jfiBtc2dpZCAiUmVkIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgdmVybWVsaG8iCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBhbWFyZWxvIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciB2ZXJkZSBkbyBwYWluZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciByb3NhIGRvIHBhaW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiQmx1ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGF6dWwgZG8gcGFpbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGJyYW5jbyBkbyBwYWluZWwgZnJvbnRhbCIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgcHJldG8gZG8gcGFpbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJHcmF5IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgY2luemEgZG8gcGFpbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBsYXJhbmphIGRvIHBhaW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgdmVybWVsaG8gZG8gcGFpbmVsIGZyb250YWwiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBhbWFyZWxvIGRvIHBhaW5lbCBmcm9udGFsIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIGNvbXVtIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiTWVzY2xhciBjYW5haXMiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJFbnRyYWRhIGRvIG1peGVyIHZpcnR1YWwiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAiU2HDrWRhIGRvIG1peGVyIHZpcnR1YWwiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJDYW5haXMgZG8gbWl4ZXIgdmlydHVhbCIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyAlZCIKLQotI34gbXNnaWQgIiVzIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyIKLQotI34gbXNnaWQgIkdvdCB1bmV4cGVjdGVkIGZyYW1lIHNpemUgb2YgJXUgaW5zdGVhZCBvZiAldS4iCi0jfiBtc2dzdHIgIkZvaSBvYnRpZG8gdW0gdGFtYW5obyBkZSBxdWFkcm8gaW5lc3BlcmFkbyBkZSAldSwgYW8gaW52w6lzIGRlICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJFcnJvIGFvIGxlciAlZCBieXRlcyBubyBkaXNwb3NpdGl2byBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk7Do28gcG9zc8OtdmVsIGFkaWNpb25hciBidWZmZXJzIMOgIGZpbGEgbm8gZGlzcG9zaXRpdm8gXCIlc1wiLiIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiRmFsaGEgYW8gdGVudGFyIG9idGVyIG9zIHF1YWRyb3MgZGUgdsOtZGVvIGRvIGRpc3Bvc2l0aXZvIFwiJXNcIi4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiRmFsaGEgYXDDs3MgJWQgdGVudGF0aXZhcy4gRGlzcG9zaXRpdm8gJXMuIEVycm8gZG8gc2lzdGVtYTogJXMiCmRpZmYgLS1naXQgYS9wby9xdW90LnNlZCBiL3BvL3F1b3Quc2VkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTIyYzQ2Li4wMDAwMDAwCi0tLSBhL3BvL3F1b3Quc2VkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1zLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKLXMvYFwoW15gJ10qXCknL+KAmFwx4oCZL2cKLXMvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCi1zLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCi1zL14nXChbXmAnXSpcKScgL+KAmFwx4oCZIC9nCi1zL+KAnOKAnS8iIi9nCmRpZmYgLS1naXQgYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luIGIvcG8vcmVtb3ZlLXBvdGNkYXRlLnNpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQzNmM0OS4uMDAwMDAwMAotLS0gYS9wby9yZW1vdmUtcG90Y2RhdGUuc2luCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBTZWQgc2NyaXB0IHRoYXQgcmVtb3ZlIHRoZSBQT1QtQ3JlYXRpb24tRGF0ZSBsaW5lIGluIHRoZSBoZWFkZXIgZW50cnkKLSMgZnJvbSBhIFBPVCBmaWxlLgotIwotIyBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHRoZSBmb2xsb3dpbmcgb2NjdXJyZW5jZXMgb2YgdGhlCi0jIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KLS9eIlBPVC1DcmVhdGlvbi1EYXRlOiAuKiIkL3sKLXgKLSMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KLXMvUC9QLwotdGEKLSMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgotZwotZAotYmIKLTphCi0jIFRoZSBob2xkIHNwYWNlIHdhcyBub25lbXB0eS4gRm9sbG93aW5nIG9jY3VycmVuY2VzLiBEbyBub3RoaW5nLgoteAotOmIKLX0KZGlmZiAtLWdpdCBhL3BvL3JvLmdtbyBiL3BvL3JvLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY2Yzg5MC4uMDAwMDAwMAotLS0gYS9wby9yby5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9yby5wbyBiL3BvL3JvLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjNiZTNmLi4wMDAwMDAwCi0tLSBhL3BvL3JvLnBvCisrKyAvZGV2L251bGwKQEAgLTEsODExICswLDAgQEAKLSMgUm9tYW5pYW4gdHJhbnNsYXRpb24gZm9yIGdzdC1wbHVnaW5zLWdvb2QKLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdzdC1wbHVnaW5zLWdvb2QgcGFja2FnZS4KLSMgTHVjaWFuIEFkcmlhbiBHcmlqaW5jdSA8bHVjaWFuLmdyaWppbmN1QGdtYWlsLmNvbT4sIDIwMTAuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDAuMTAuMjMuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA4LTE2IDAzOjIyKzAzMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEx1Y2lhbiBBZHJpYW4gR3JpamluY3UgPGx1Y2lhbi5ncmlqaW5jdUBnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogUm9tYW5pYW4gPHRyYW5zbGF0aW9uLXRlYW0tcm9AbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiByb1xuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MzsgcGx1cmFsPShuPT0xID8gMCA6IChuPT0wIHx8IChuJTEwMCA+IDAgJiYgbiUxMDAgPCAiCi0iMjApKSA/IDEgOiAyKTs7XG4iCi0iWC1HZW5lcmF0b3I6IFZpcnRhYWwgMC42LjFcbiIKLSJYLUxhdW5jaHBhZC1FeHBvcnQtRGF0ZTogMjAxMC0wOC0xNiAwMDowOCswMDAwXG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiTnUgcy1hIHB1dHV0IGRlY29kYSBpbWFnaW5lYSBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLigJ4lc+KAnSBkZSDigJ4lc+KAnSIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgc3RhYmlsaSBvIGNvbmV4aXVuZSBsYSBzZXJ2ZXIiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIk51IHNlIHBvYXRlIHN0YWJpbGkgbyBjb25leGl1bmUgbGEgc2VydmVyIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOdSBzZSBwb2F0ZSBzdGFiaWxpIG8gY29uZXhpdW5lIGxhIHNlcnZlcnVsIGRlIHN1bmV0IgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIiIKLSJJbnRyYXJlYSBhdWRpbyBudSBleGlzdMSDIHNhdSBlc3RlIG5ldmFsaWTEgywgZmx1eHVsIGRlIGRhdGUgQVZJIHZhIGZpIGNvcnVwdC4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIkFjZXN0IGZpyJlpZXIgbnUgY29uyJtpbmUgZmx1eHVyaSBjZSBwb3QgZmkgcmVkYXRlLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRmnImWllcnVsIG51IGVzdGUgdmFsaWQgyJlpIG51IHBvYXRlIGZpIHJlZGF0LiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkFjZXN0IGZpyJlpZXIgZXN0ZSBjb3J1cHQgyJlpIG51IHBvYXRlIGZpIHJlZGF0LiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJBY2VzdCBmaciZaWVyIG51IGVzdGUgY29tcGxldCDImWkgbnUgcG9hdGUgZmkgcmVkYXQuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJFc3RlIHBvc2liaWwgY2EgZmnImWllcnVsIHZpZGVvIHPEgyBudSBmaWUgcmVkYXQgY29yZWN0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICJGaciZaWVydWwgY29uyJtpbmUgcHJlYSBtdWx0ZSBmbHV4dXJpLiBTZSByZWRhdSBkb2FyIHByaW1lbGUgJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk51IHMtYSBnxINzaXQgbmljaSB1biBmbHV4IHN1cG9ydGF0LiBQZW50cnUgZmx1eHVyaSBSZWFsIG1lZGlhIHMtYXIgcHV0ZWEgc8SDICIKLSJmaWUgbmV2b2llIHPEgyBpbnN0YWxhyJtpIGV4dGVuc2lhIEdTdHJlYW1lciBSVFNQLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIk51IGEgZm9zdCBnxINzaXQgbmljaXVuIGZsdXggc3Vwb3J0YXQuIFMtYXIgcHV0ZWEgc8SDIG5lY2VzaXRlIHBlcm1pdGVyZWEgbWFpICIKLSJtdWx0b3IgcHJvdG9jb2FsZSBkZSB0cmFuc3BvcnQgc2F1IGRlIGFsdGZlbCBzLWFyIHB1dGVhIHPEgyBsaXBzZWFzY8SDIG1vZHVsdWwgIgotImNvcmVjdCBkZSBleHRlbnNpZSBHU3RyZWFtZXIgUlRTUC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iTnUgcy1hIHB1dHV0IGRlc2NoaWRlIGRpc3Bveml0aXZ1bCBhdWRpbyBwZW50cnUgcmVkYXJlLiBEaXNwb3ppdGl2dWwgZXN0ZSAiCi0iZm9sb3NpdCBkZSBvIGFsdMSDIGFwbGljYcibaWUuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJOdSBzLWEgcHV0dXQgZGVzY2hpZGUgZGlzcG96aXRpdnVsIGF1ZGlvIHBlbnRydSByZWRhcmUuIE51IGF2ZcibaSBwZXJtaXNpdW5lYSAiCi0iZGUgYSBkZXNjaGlkZSBkaXNwb3ppdGl2dWwuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk51IHMtYSBwdXR1dCBkZXNjaGlkZSBkaXNwb3ppdGl2dWwgYXVkaW8gcGVudHJ1IHJlZGFyZS4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iTnUgcy1hIHB1dHV0IGRlc2NoaWRlIGRpc3Bveml0aXZ1bCBhdWRpbyBwZW50cnUgcmVkYXJlLiBWZXJzaXVuZWEgYWNlYXN0YSBhICIKLSJPU1MgKE9wZW4gU291bmQgU3lzdGVtKSBudSBlc3RlIHN1cG9ydGF0xIMgZGUgYWNlc3QgZWxlbWVudC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiUmVkYXJlYSBudSBlc3RlIHN1cG9ydGF0xIMgZGUgYWNlc3QgZGlzcG96aXRpdiBhdWRpby4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIkVyb2FyZSByZWRhcmUgYXVkaW8uIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLDjm5yZWdpc3RyYXJlYSBudSBlc3RlIHN1cG9ydGF0xIMgZGUgYWNlc3QgZGlzcG96aXRpdiBhdWRpby4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJFcm9hcmUgbGEgw65ucmVnaXN0cmFyZWEgZGUgbGEgZGlzcG96aXRpdnVsIGF1ZGlvLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIk51IHMtYSBwdXR1dCBkZXNjaGlkZSBkaXNwb3ppdGl2dWwgYXVkaW8gcGVudHJ1IMOubnJlZ2lzdHJhcmUgTnUgYXZlyJtpICIKLSJwZXJtaXNpdW5lYSBkZSBhIGRlc2NoaWRlIGRpc3Bveml0aXZ1bC4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIk51IHMtYSBwdXR1dCBkZXNjaGlkZSBkaXNwb3ppdGl2dWwgYXVkaW8gcGVudHJ1IMOubnJlZ2lzdHJhcmUuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiU3Vyc8SDIMOubnJlZ2lzdHJhcmUiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWNyb2ZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmllIGludHJhcmUiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiQ0QgaW50ZXJuIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIkludHJhcmUgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiSW50cmFyZSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJJbnRyYXJlIEFVWCAyIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJCdWNsxIMiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJCdWNsxIMiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIlZvbHVtIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiQW1wbGlmaWNhcmUiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiQm94ZSBpbnRlZ3JhdGUiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIkPEg8iZdGkiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiTGluaWUgaWXImWlyZSIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiSWXImWlyZSBTUERJRiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiSWXImWlyZSBBVVggMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiSWXImWlyZSBBVVggMiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJFcm9hcmUgY2l0aXJlICVkIG9jdGXIm2kgZGUgbGEgZGlzcG96aXRpdnVsIOKAniVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJOdSBzLWEgcHV0dXQgbWFwYSBtZW1vcmlhIHRhbXBvbiBkaW4gZGlzcG96aXRpdnVsIOKAniVz4oCdIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotIkRyaXZlcnVsIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gbnUgc3Vwb3J0IG5pY2kgbyBtZXRvZMSDIGRlIGNhcHR1csSDICIKLSJjdW5vc2N1dMSDLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0iRHJpdmVydWwgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnSBudSBzdXBvcnQgbmljaSBvIG1ldG9kxIMgZGUgY2FwdHVyxIMgIgotImN1bm9zY3V0xIMuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJEaXNwb3ppdGl2dWwg4oCeJXPigJ0gbnUgZXN0ZSB1biBkaXNwb3ppdGl2IGRlIGllyJlpcmUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiRGlzcG96aXRpdnVsIOKAniVz4oCdIG51IGVzdGUgdW4gZGlzcG96aXRpdiBkZSBjYXB0dXLEgy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJEaXNwb3ppdGl2dWwg4oCeJXPigJ0gbnUgZXN0ZSB1biBkaXNwb3ppdGl2IGRlIGNhcHR1csSDLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiRGlzcG96aXRpdnVsIOKAniVz4oCdIG51IGVzdGUgdW4gZGlzcG96aXRpdiBkZSBpZciZaXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIk51IHMtYXUgcHV0dXQgb2LIm2luZSBwYXJhbWV0cmlpIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0iRGlzcG96aXRpdnVsIGRlIGludHJhcmUgdmlkZW8gbnUgYSBhY2NlcHRhdCBub3VhIGNvbmZpZ3VyYXJlIGRlIHJhdGUgY2FkcmUuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIiIKLSJEaXNwb3ppdGl2dWwgZGUgaW50cmFyZSB2aWRlbyBudSBhIGFjY2VwdGF0IG5vdWEgY29uZmlndXJhcmUgZGUgcmF0ZSBjYWRyZS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJEcml2ZXJ1bCBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIG51IHN1cG9ydCBuaWNpIG8gbWV0b2TEgyBkZSBjYXB0dXLEgyAiCi0iY3Vub3NjdXTEgy4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotIkRyaXZlcnVsIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gbnUgc3Vwb3J0IG5pY2kgbyBtZXRvZMSDIGRlIGNhcHR1csSDICIKLSJjdW5vc2N1dMSDLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICIiCi0iRGlzcG96aXRpdnVsIGRlIGludHJhcmUgdmlkZW8gbnUgYSBhY2NlcHRhdCBub3VhIGNvbmZpZ3VyYXJlIGRlIHJhdGUgY2FkcmUuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkEgZciZdWF0IG9iyJtpbmVyZWEgY29uZmlndXLEg3JpaSByZWNlcHRvcnVsdWkgJWQgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkVyb2FyZSBjaXRpcmUgJWQgb2N0ZcibaSBkZSBsYSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkRpc3Bveml0aXZ1bCDigJ4lc+KAnSBudSBlc3RlIHVuIGRpc3Bveml0aXYgZGUgaWXImWlyZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiRGVmaW5pcmVhIHZhbG9yaWkgJWQgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnSBhIGXImXVhdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJEZWZpbmlyZWEgdmFsb3JpaSAlZCBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIGEgZciZdWF0LiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk9iyJtpbmVyZWEgbml2ZWx1bHVpIHNlbW5hbHVsdWkgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnSBhIGXImXVhdC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSJEcml2ZXJ1bCBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIG51IHN1cG9ydCBuaWNpIG8gbWV0b2TEgyBkZSBjYXB0dXLEgyAiCi0iY3Vub3NjdXTEgy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iRGlzcG96aXRpdnVsIGRlIGludHJhcmUgdmlkZW8gbnUgYSBhY2NlcHRhdCBub3VhIGNvbmZpZ3VyYXJlIGRlIHJhdGUgY2FkcmUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotIkRpc3Bveml0aXZ1bCBkZSBpbnRyYXJlIHZpZGVvIG51IGEgYWNjZXB0YXQgbm91YSBjb25maWd1cmFyZSBkZSByYXRlIGNhZHJlLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0iRGlzcG96aXRpdnVsIGRlIGludHJhcmUgdmlkZW8gbnUgYSBhY2NlcHRhdCBub3VhIGNvbmZpZ3VyYXJlIGRlIHJhdGUgY2FkcmUuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJOdSBzLWEgcHV0dXQgZGVjb2RhIGltYWdpbmVhIEpQRUciCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSJFcm9hcmUgbGEgb2LIm2luZXJlYSBjYXBhYmlsaXTEg8ibaWxvciBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdOiBOdSBlc3RlIHVuICIKLSJkcml2ZXIgdjRsMi4gVmVyaWZpY2HIm2kgZGFjxIMgZXN0ZSB1biBkcml2ZXIgdjRsMS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICJJbnRlcm9nYXJlYSBhdHJpYnV0ZWxvciBkZSBpbnRyYXJlICVkIHBlbnRydSBkaXNwb3ppdGl2dWwgJXMgYSBlyJl1YXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIkEgZciZdWF0IG9iyJtpbmVyZWEgY29uZmlndXLEg3JpaSByZWNlcHRvcnVsdWkgJWQgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJJbnRlcm9nYXJlYSBub3JtZWkgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnSBhIGXImXVhdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk9iyJtpbmVyZWEgYXRyaWJ1dGVsb3IgZGUgY29udHJvbCBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIGEgZciZdWF0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJEaXNwb3ppdGl2dWwg4oCeJXPigJ0gbnUgcG9hdGUgZmkgaWRlbnRpZmljYXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkFjZXN0YSBudSBlc3RlIHVuIGRpc3Bveml0aXYg4oCeJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgZGVzY2hpZGUgZGlzcG96aXRpdnVsIOKAniVz4oCdIHBlbnRydSBjaXRpcmUgyJlpIHNjcmllcmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiRGlzcG96aXRpdnVsIOKAniVz4oCdIG51IGVzdGUgdW4gZGlzcG96aXRpdiBkZSBjYXB0dXLEgy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkRpc3Bveml0aXZ1bCDigJ4lc+KAnSBudSBlc3RlIHVuIGRpc3Bveml0aXYgZGUgaWXImWlyZS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJEaXNwb3ppdGl2dWwg4oCeJXPigJ0gbnUgZXN0ZSB1biBkaXNwb3ppdGl2IGRlIGllyJlpcmUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiTnUgc2UgcG9hdGUgZGVzY2hpZGUgZGlzcG96aXRpdnVsIOKAniVz4oCdIHBlbnRydSBjaXRpcmUgyJlpIHNjcmllcmUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJEZWZpbmlyZWEgbm9ybWVpIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gYSBlyJl1YXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotIk9iyJtpbmVyZWEgZnJlY3ZlbsibZWkgY3VyZW50IGEgcmVjZXB0b3J1bHVpIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gYSBlyJl1YXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJEZWZpbmlyZWEgZnJlY3ZlbsibZWkgY3VyZW50IGEgcmVjZXB0b3J1bHVpIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gbGEgJWx1ICIKLSJIeiBhIGXImXVhdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiT2LIm2luZXJlYSBuaXZlbHVsdWkgc2VtbmFsdWx1aSBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIGEgZciZdWF0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiT2LIm2luZXJlYSB2YWxvcmlpICVkIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gYSBlyJl1YXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJEZWZpbmlyaWkgdmFsb3JpaSAlZCBwZW50cnUgY29udHJvbHVsICVkIGFsIGRpc3Bveml0aXZ1bCDigJ4lc+KAnSBhIGXImXVhdC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJPYsibaW5lcmVhIGludHLEg3JpIGN1cmVudGUgcGVudHJ1IGRpc3Bveml0aXZ1bCDigJ4lc+KAnSBhIGXImXVhdC4gUG9zaWJpbCBzxIMgZmllICIKLSJ1biBkaXNwb3ppdGl2IHJhZGlvLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk9iyJtpbmVyZWEgaW50csSDcmkgY3VyZW50ZSBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIGEgZciZdWF0LiBQb3NpYmlsIHPEgyBmaWUgIgotInVuIGRpc3Bveml0aXYgcmFkaW8uIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJEZWZpbmlyZWEgdmFsb3JpaSAlZCBwZW50cnUgZGlzcG96aXRpdnVsIOKAniVz4oCdIGEgZciZdWF0LiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlNjaGltYmFyZWEgcmV6b2x1yJtpZWkgcGUgZHVyYXRhIHJ1bMSDcmlpIG51IGVzdGUgaW5jxIMgc3Vwb3J0YXTEgy4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIk51IHNlIHBvYXRlIG9wZXJhIGbEg3LEgyB1biBjZWFzIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJFcm9hcmUgaW50ZXJuxIMgYSBmbHV4dWx1aSBkZSBkYXRlLiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi0jfiBtc2dzdHIgIkVyb2FyZSBpbnRlcm7EgyBhIGZsdXh1bHVpIGRlIGRhdGUuIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAiRGlzcG96aXRpdnVsIOKAniVz4oCdIG51IGVzdGUgdW4gZGlzcG96aXRpdiBkZSBpZciZaXJlLiIKLQotI34gbXNnaWQgIkdvdCB1bmV4cGVjdGVkIGZyYW1lIHNpemUgb2YgJXUgaW5zdGVhZCBvZiAldS4iCi0jfiBtc2dzdHIgIlMtYSBvYsibaW51dCBvIGRpbWVuc2l1bmUgbmVhyJl0ZXB0YXTEgyBwZW50cnUgY2FkcnUsICV1IMOubiBsb2MgZGUgJXUuIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJPYsibaW5lcmVhIGNhZHJlbG9yIHZpZGVvIHBlbnRydSBkaXNwb3ppdGl2dWwg4oCeJXPigJ0gYSBlyJl1YXQuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgIkEgZciZdWF0IGR1cMSDICVkIMOubmNlcmPEg3JpLiBkaXNwb3ppdGl2ICVzLiBlcm9hcmUgc2lzdGVtOiAlcyIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhcyIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAiw45uYWx0ZSIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICJTeW50aCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAiRGlmdXpvciIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkxpbmllIGludHJhcmUiCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiTWl4ZXIiCi0KLSN+IG1zZ2lkICJQQ00tMiIKLSN+IG1zZ3N0ciAiUENNLTIiCi0KLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIsOObnJlZ2lzdHJhcmUiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJDw6LImXRpZyBpbnRyYXJlIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIkPDosiZdGlnIGllyJlpcmUiCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIkxpbmlhLTEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIkxpbmlhLTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgIkxpbmlhLTMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIkRpZ2l0YWwtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiRGlnaXRhbC0yIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICJEaWdpdGFsLTMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAiSW50cmFyZSB0ZWxlZm9uIgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJJZciZaXJlIHRlbGVmb24iCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkaW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICIiCi0jfiAiTnUgcy1hIHB1dHV0IGRlc2NoaWRlIGRpc3Bveml0aXZ1bCBhdWRpbyBwZW50cnUgZ2VzdGlvbmFyZWEgY29udHJvbHVsdWkgIgotI34gImRlIG1peGFqLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIk51IHMtYSBwdXR1dCBkZXNjaGlkZSBkaXNwb3ppdGl2dWwgYXVkaW8gcGVudHJ1IGdlc3Rpb25hcmVhIGNvbnRyb2x1bHVpICIKLSN+ICJkZSBtaXhhai4gQWNlYXN0xIMgdmVyc2l1bmUgYSBPU1MgKE9wZW4gU291bmQgU3lzdGVtKSBudSBlc3RlIHN1cG9ydGF0xIMgZGUgIgotI34gImFjZXN0IGVsZW1lbnQiCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIlByaW5jaXBhbCIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICJGYcibxIMiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJTcGF0ZSIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIkPEg8iZdGkiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIkNlbnRydSIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIlN1cnJvdW5kIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiTGF0ZXJhbCIKLQotI34gbXNnaWQgIkFVWCBPdXQiCi0jfiBtc2dzdHIgIkllyJlpcmUgQVVYIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIkFkw6JuY2ltZSAzRCIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiQ2VudHJ1IDNEIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiw45tYnVuxIN0xIPIm2lyZSAzRCIKLQotI34gbXNnaWQgIlRlbGVwaG9uZSIKLSN+IG1zZ3N0ciAiVGVsZWZvbiIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICJJbnRyYXJlIHZpZGVvIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJJbnRyYXJlIEFVWCIKLQotI34gbXNnaWQgIlJlY29yZCBHYWluIgotI34gbXNnc3RyICJDw6LImXRpZyDDrm5yZWdpc3RyYXJlIgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIkPDosiZdGlnIGllyJlpcmUiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJBbXBsaWZpY2FyZSBtaWNyb2ZvbiIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkRpYWdub3N0aWMiCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICJBbXBsaWZpY2FyZSBiYXMiCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiUG9ydHVyaSByZWRhcmUiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAiSW50cmFyZSIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICJTdXJzxIMgbW9uaXRvciIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIkJpcCB0YXN0YXR1csSDIgotCi0jfiBtc2dpZCAiU2ltdWxhdGUgU3RlcmVvIgotI34gbXNnc3RyICJTaW11bGVhesSDIHN0ZXJlbyIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIlN1bmV0IHN1cnJvdW5kIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICJDw6LImXRpZyBtaWNyb2ZvbiIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJTdXJzxIMgZGlmdXpvciIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICJTdXJzxIMgbWljcm9mb24iCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICJKYWNrIgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICJDZW50cnUgLyBMRkUiCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICJTdGVyZW8gTWl4IgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIk1vbm8gTWl4IgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJNaXggaW50cmFyZSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWljcm9mb24gMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWljcm9mb24gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJJZciZaXJlIGRpZ2l0YWzEgyIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIkludHJhcmUgZGlnaXRhbMSDIgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIkPEg8iZdGkiCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAiQWx0dWwiCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJOaWNpdW51bCIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICJBY3RpdmF0IgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICJEZXphY3RpdmF0IgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiTXV0IgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiUmFwaWQiCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiRm9hcnRlIHNjxIN6dXTEgyIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiU2PEg3p1dMSDIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICJNZWRpZSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIlJpZGljYXTEgyIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAiRm9hcnRlIHJpZGljYXTEgyIKLQotI34gbXNnaWQgIlByb2R1Y3Rpb24iCi0jfiBtc2dzdHIgIlByb2R1Y8ibaWUiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJNaWNyb2ZvbiBwYW5vdSBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiTGluaWUgaW50cmFyZSBwYW5vdSBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiQ8SDyJl0aSBwYW5vdSBmcm9udGFsIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIkxpbmllIGllyJlpcmUgcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgdmVyZGUiCi0KLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3Igcm96IgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGFsYmFzdHJ1IgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBhbGIiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIG5lZ3J1IgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGdyaSIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIHBvcnRvY2FsaXUiCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciByb8iZdSIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIGdhbGJlbiIKLQotI34gbXNnaWQgIkdyZWVuIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgdmVyZGUgcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciByb3ogcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBhbGJhc3RydSBwYW5vdSBmcm9udGFsIgotCi0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBhbGIgcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQ29uZWN0b3IgbmVncnUgcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIkdyYXkgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBncmkgcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIHBvcnRvY2FsaXUgcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkNvbmVjdG9yIHJvyJl1IHBhbm91IGZyb250YWwiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJDb25lY3RvciBnYWxiZW4gcGFub3UgZnJvbnRhbCIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIsOObXBhcnRlIGllyJlpcmVhIgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAiTWl4YWogcmVkdXMiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJJbnRyYXJlIG1peGVyIHZpZGVvIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBPdXRwdXQiCi0jfiBtc2dzdHIgIkllyJlpcmUgbWl4ZXIgdmlkZW8iCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJDYW5hbGUgbWl4ZXIgdmlkZW8iCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiRnVuY8ibaWUgJXMgJWQiCi0KLSN+IG1zZ2lkICIlcyBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiRnVuY8ibaWUgJXMiCi0KLSN+IG1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIG9uIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiRXJvYXJlIGNpdGlyZSAlZCBvY3RlyJtpIHBlIGRpc3Bveml0aXZ1bCDigJ4lc+KAnS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZW5xdWV1ZSBidWZmZXJzIGluIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTnUgcy1hIHB1dHV0IHByb2dyYW1hIG1lbW9yaWEgdGFtcG9uIMOubiBkaXNwb3ppdGl2dWwg4oCeJXPigJ0uIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAiTnUgc2UgcG9hdGUgc3RhYmlsaSBvIGNvbmV4aXVuZSBsYSBzZXJ2ZXJ1bCBkZSBzdW5ldCIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICJJbnRlcm9nYXJlYSBjYXBhYmlsaXTEg8ibaWxvciBzZXJ2ZXJ1bHVpIGRlIHN1bmV0IGEgZciZdWF0IgpkaWZmIC0tZ2l0IGEvcG8vcnUuZ21vIGIvcG8vcnUuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTFlZGFlLi4wMDAwMDAwCi0tLSBhL3BvL3J1LmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3J1LnBvIGIvcG8vcnUucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YmE1YzMuLjAwMDAwMDAKLS0tIGEvcG8vcnUucG8KKysrIC9kZXYvbnVsbApAQCAtMSw4NDcgKzAsMCBAQAotIyBUcmFuc2xhdGlvbiBmb3IgZ3N0LXBsdWdpbnMtZ29vZCBtZXNzYWdlcyB0byBSdXNzaWFuCi0jIFRoaXMgZmlsZSBpcyBwdXQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0jCi0jINCQ0YDRgtGR0Lwg0J/QvtC/0L7QsiA8YXJ0ZndvQGdtYWlsLmNvbT4sIDIwMDkuCi0jIFBhdmVsIE1hcnlhbm92IDxhY2lkX2phY2tAdWtyLm5ldD4sIDIwMDkuCi0jIFl1cmkgS296bG92IDx5dXJheUBrb215YWtpbm8ucnU+LCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2LgotIyBQYXZlbCBNYXJ5YW5vdiA8YWNpZEBqYWNrLmtpZXYudWE+LCAyMDEzLgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjcuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTAyLTIxIDA5OjU1KzAzMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IFl1cmkgS296bG92IDx5dXJheUBrb215YWtpbm8ucnU+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogUnVzc2lhbiA8Z251QGQwNy5ydT5cbiIKLSJMYW5ndWFnZTogcnVcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiIKLSIlMTA8PTQgJiYgKG4lMTAwPDEwIHx8IG4lMTAwPj0yMCkgPyAxIDogMik7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgItCh0LXRgNCy0LXRgCBKYWNrINC90LUg0L3QsNC50LTQtdC9IgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00LXQutC+0LTQuNGA0L7QstCw0YLRjCBKUEVHLdC40LfQvtCx0YDQsNC20LXQvdC40LUiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIsKrJXPCuywgwqslc8K7IgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7QtdC00LjQvdC40YLRjNGB0Y8g0YEg0YHQtdGA0LLQtdGA0L7QvCIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJVUkwg0L3QtSDQt9Cw0LTQsNC9LiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICLQodC10YDQstC10YAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L/QvtC40YHQui4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LjQvNGPINGB0LXRgNCy0LXRgNCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0YHRgtCw0L3QvtCy0LjRgtGMINGB0L7QtdC00LjQvdC10L3QuNC1INGBINGB0LXRgNCy0LXRgNC+0LwuIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0YHRgtGA0L7QuNGC0Ywg0LfQsNGJ0LjRidGR0L3QvdC+0LUg0YHQvtC10LTQuNC90LXQvdC40LUuIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINGB0LXRgtC10LLQsNGPINC+0YjQuNCx0LrQsCDQuNC70Lgg0YHQtdGA0LLQtdGAINC90LXQvtC20LjQtNCw0L3QvdC+INC30LDQutGA0YvQuyDRgdC+0LXQtNC40L3QtdC90LjQtS4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgItCh0LXRgNCy0LXRgCDQv9GA0LjRgdC70LDQuyDQvdC10LrQvtGA0YDQtdC60YLQvdGL0LUg0LTQsNC90L3Ri9C1LiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiIgotItCS0YXQvtC00Y/RidC40LUg0LDRg9C00LjQvi3QtNCw0L3QvdGL0LUg0L7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQuNC70Lgg0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdGLLCDQv9C+0YLQvtC6IEFWSSDQsdGD0LTQtdGCICIKLSLQv9C+0LLRgNC10LbQtNGR0L0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICLQpNCw0LnQuyDQvdC1INGB0L7QtNC10YDQttC40YIg0LLQvtGB0L/RgNC+0LjQt9Cy0L7QtNC40LzRi9GFINC/0L7RgtC+0LrQvtCyLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi0KTQsNC50Lsg0L3QtdC60L7RgNGA0LXQutGC0LXQvSDQuCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0LLQvtGB0L/RgNC+0LjQt9Cy0LXQtNGR0L0uIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLSLQndC10LLQvtC30LzQvtC20L3QviDQstC+0YHQv9GA0L7QuNC30LLQtdGB0YLQuCDQv9C+0YLQvtC6LCDRgtCw0Log0LrQsNC6INC+0L0g0LfQsNGI0LjRhNGA0L7QstCw0L0g0YEg0L/QvtC80L7RidGM0Y4gUGxheVJlYWR5ICIKLSJEUk0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLQpNCw0LnQuyDQv9C+0LLRgNC10LbQtNGR0L0g0Lgg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINCy0L7RgdC/0YDQvtC40LfQstC10LTRkdC9LiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAi0J3QtdCy0LXRgNC90YvQuSDQsNGC0L7QvNCw0YDQvdGL0Lkg0YDQsNC30LzQtdGALiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi0KTQsNC50Lsg0L3QtSDQv9C+0LvQvtC9INC4INC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQstC+0YHQv9GA0L7QuNC30LLQtdC00ZHQvS4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgItCS0LjQtNC10L4g0LjQtyDRjdGC0L7Qs9C+INGE0LDQudC70LAg0LzQvtC20LXRgiDQsdGL0YLRjCDQstC+0YHQv9GA0L7QuNC30LLQtdC00LXQvdC+INC90LXQutC+0YDRgNC10LrRgtC90L4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLSLQpNCw0LnQuyDRgdC+0LTQtdGA0LbQuNGCINGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0L/QvtGC0L7QutC+0LIuINCR0YPQtNC10YIg0LLQvtGB0L/RgNC+0LjQt9Cy0LXQtNGR0L3QviDRgtC+0LvRjNC60L4g0L/QtdGA0LLRi9GFICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSLQndC4INC+0LTQuNC9INC/0L7RgtC+0Log0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPLiDQktC+0LfQvNC+0LbQvdC+INGC0YDQtdCx0YPQtdGC0YHRjyDRg9GB0YLQsNC90L7QstC60LAgIgotItC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0LPQviDQvNC+0LTRg9C70Y8gR1N0cmVhbWVyIFJUU1Ag0LTQu9GPINC/0L7RgtC+0LrQvtCyIFJlYWwgbWVkaWEuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0i0J3QuCDQvtC00LjQvSDQv9C+0YLQvtC6INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjy4g0JLQvtC30LzQvtC20L3QviDRgtGA0LXQsdGD0LXRgtGB0Y8g0YDQsNC30YDQtdGI0LjRgtGMINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUgIgotItC/0YDQvtGC0L7QutC+0LvRiyDQv9C10YDQtdC00LDRh9C4INC40LvQuCDQttC1INC+0YLRgdGD0YLRgdGC0LLRg9C10YIg0L/RgNCw0LLQuNC70YzQvdGL0Lkg0LzQvtC00YPQu9GMIEdTdHJlYW1lciBSVFNQLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINCw0YPQtNC40L4t0YPRgdGC0YDQvtC50YHRgtCy0L4g0LTQu9GPINCy0L7RgdC/0YDQvtC40LfQstC10LTQtdC90LjRjy4g0KPRgdGC0YDQvtC50YHRgtCy0L4gIgotItC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNGA0YPQs9C40Lwg0L/RgNC40LvQvtC20LXQvdC40LXQvC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LDRg9C00LjQvi3Rg9GB0YLRgNC+0LnRgdGC0LLQviDQtNC70Y8g0LLQvtGB0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNGPLiDQntGC0YHRg9GC0YHRgtCy0YPRjtGCINC/0YDQsNCy0LAgIgotItC00L7RgdGC0YPQv9CwINC6INGD0YHRgtGA0L7QudGB0YLQstGDLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINCw0YPQtNC40L4t0YPRgdGC0YDQvtC50YHRgtCy0L4g0LTQu9GPINCy0L7RgdC/0YDQvtC40LfQstC10LTQtdC90LjRjy4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0i0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQsNGD0LTQuNC+LdGD0YHRgtGA0L7QudGB0YLQstC+INC00LvRjyDQstC+0YHQv9GA0L7QuNC30LLQtdC00LXQvdC40Y8uINCU0LDQvdC90LDRjyDQstC10YDRgdC40Y8gT3BlbiAiCi0iU291bmQgU3lzdGVtINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyDRjdGC0LjQvCDRjdC70LXQvNC10L3RgtC+0LwuIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgItCS0L7RgdC/0YDQvtC40LfQstC10LTQtdC90LjQtSDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8g0LTQsNC90L3Ri9C8INCw0YPQtNC40L4t0YPRgdGC0YDQvtC50YHRgtCy0L7QvC4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQstC+0YHQv9GA0L7QuNC30LLQtdC00LXQvdC40Y8g0LDRg9C00LjQvi4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgItCX0LDQv9C40YHRjCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8g0LTQsNC90L3Ri9C8INCw0YPQtNC40L4t0YPRgdGC0YDQvtC50YHRgtCy0L7QvC4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0LjRgdC4INGBINCw0YPQtNC40L4t0YPRgdGC0YDQvtC50YHRgtCy0LAuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0i0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQsNGD0LTQuNC+LdGD0YHRgtGA0L7QudGB0YLQstC+INC00LvRjyDQt9Cw0L/QuNGB0LguINCe0YLRgdGD0YLRgdGC0LLRg9GO0YIg0L/RgNCw0LLQsCDQtNC+0YHRgtGD0L/QsCDQuiAiCi0i0YPRgdGC0YDQvtC50YHRgtCy0YMuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINCw0YPQtNC40L4t0YPRgdGC0YDQvtC50YHRgtCy0L4g0LTQu9GPINC30LDQv9C40YHQuC4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L4gQ29yZUF1ZGlvINC90LUg0L3QsNC50LTQtdC90L4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC+0YLQutGA0YvRgtGMINGD0YHRgtGA0L7QudGB0YLQstC+IENvcmVBdWRpbyIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+INC30LDQv9C40YHQuCIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgItCc0LjQutGA0L7RhNC+0L0iCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICLQm9C40L3QtdC50L3Ri9C5INCy0YXQvtC0IgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgItCS0L3Rg9GC0YDQtdC90L3QuNC5IENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgItCS0YXQvtC0IFNQRElGIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgItCS0YXQvtC0IEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgItCS0YXQvtC0IEFVWCAyIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgItCf0LXRgtC70Y8gQ29kZWMiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgItCf0LXRgtC70Y8gU3VuVlRTIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICLQo9GA0L7QstC10L3RjCIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgItCj0YDQvtCy0LXQvdGMIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAi0JzQvtC90LjRgtC+0YDQuNC90LMiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICLQktC90YPRgtGA0LXQvdC90LjQuSDQtNC40L3QsNC80LjQuiIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAi0J3QsNGD0YjQvdC40LoiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAi0JvQuNC90LXQudC90YvQuSDQstGL0YXQvtC0IgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICLQktGL0YXQvtC0IFNQRElGIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICLQktGL0YXQvtC0IEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICLQktGL0YXQvtC0IEFVWCAyIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDRh9GC0LXQvdC40Y8gJWQg0LHQsNC50YIg0LjQtyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0i0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgdC/0LjRgdC+0Log0LLQuNC00LXQvi3RhNC+0YDQvNCw0YLQvtCyLCDRgSDQutC+0YLQvtGA0YvQvNC4INC80L7QttC10YIg0YDQsNCx0L7RgtCw0YLRjCAiCi0i0YPRgdGC0YDQvtC50YHRgtCy0L4gwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDRgdC/0YDQtdC00LXQu9C40YLRjCDQsdGD0YTQtdGA0Ysg0YPRgdGC0YDQvtC50YHRgtCy0LAgwqslc8K7IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICLQlNGA0LDQudCy0LXRgCDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LzQtdGC0L7QtCDQstCy0L7QtNCwLdCy0YvQstC+0LTQsCAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSLQlNGA0LDQudCy0LXRgCDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0L3QuCDQvtC00LjQvSDQuNC3INC40LfQstC10YHRgtC90YvRhSDQvNC10YLQvtC00L7QsiDQstCy0L7QtNCwLSIKLSLQstGL0LLQvtC00LAuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+IMKrJXPCuyDQt9Cw0L3Rj9GC0L4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+IMKrJXPCuyDQvdC1INC80L7QttC10YIg0L7RgdGD0YnQtdGB0YLQstC70Y/RgtGMINC30LDRhdCy0LDRgiDQsiDRgNCw0LfRgNC10YjQtdC90LjQuCAlZHglZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L4gwqslc8K7INC90LUg0LzQvtC20LXRgiDQvtGB0YPRidC10YHRgtCy0LvRj9GC0Ywg0LfQsNGF0LLQsNGCINCyINGD0LrQsNC30LDQvdC90L7QvCDRhNC+0YDQvNCw0YLQtSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICIiCi0i0KPRgdGC0YDQvtC50YHRgtCy0L4gwqslc8K7INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQv9GA0LXRgNGL0LLQuNGB0YLRi9C1INC80LDRgtGA0LjRhtGLIChub24tY29udGlndW91cyBwbGFuZXMpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC/0LDRgNCw0LzQtdGC0YDRiyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgItCS0LjQtNC10L4t0YPRgdGC0YDQvtC50YHRgtCy0L4g0L3QtSDQv9GA0LjQvdGP0LvQviDQvdC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUg0L3QsNGB0YLRgNC+0LnQutC4INC60LDQtNGA0L7QstC+0Lkg0YfQsNGB0YLQvtGC0YsuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAi0JLQuNC00LXQvi3Rg9GB0YLRgNC+0LnRgdGC0LLQviDQvdC1INC/0YDQtdC00L7RgdGC0LDQstC40LvQviDQstGL0YXQvtC00L3QvtC5INGE0L7RgNC80LDRgi4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAi0JLQuNC00LXQvi3Rg9GB0YLRgNC+0LnRgdGC0LLQviDQstC10YDQvdGD0LvQviDQvdC10LrQvtGA0YDQtdC60YLQvdGL0LUg0YDQsNC30LzQtdGA0YsuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgItCS0LjQtNC10L4t0YPRgdGC0YDQvtC50YHRgtCy0LAg0LjRgdC/0L7Qu9GM0LfRg9GO0YIg0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNGL0Lkg0LzQtdGC0L7QtCDRh9C10YDQtdC30YHRgtGA0L7Rh9C90L7RgdGC0LguIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgItCS0LjQtNC10L4t0YPRgdGC0YDQvtC50YHRgtCy0LAg0LjRgdC/0L7Qu9GM0LfRg9GO0YIg0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNGL0Lkg0YTQvtGA0LzQsNGCINC/0LjQutGB0LXQu9C10LkuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0L3QsNGB0YLRgNC+0LnQutC1INCy0L3Rg9GC0YDQtdC90L3QtdCz0L4g0LHRg9GE0LXRgNC90L7Qs9C+INC/0YPQu9CwLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAi0JLQuNC00LXQvi3Rg9GB0YLRgNC+0LnRgdGC0LLQviDQvdC1INC/0YDQtdC00LvQvtC20LjQu9C+INC60LDQutC+0Lkt0LvQuNCx0L4g0YDQsNC30LzQtdGAINCx0YPRhNC10YDQsC4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICLQndC10L7RgtC60YPQtNCwINC40LzQv9C+0YDRgtC40YDQvtCy0LDRgtGMINC/0YPQuyDQvdC40YHRhdC+0LTRj9GJ0LXQs9C+INC/0L7RgtC+0LrQsC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0YLRjtC90LXRgNCwICVkINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQv9C+0LvRg9GH0LXQvdC40Lgg0YHQv9C40YHQutCwINCy0L7Qt9C80L7QttC90L7RgdGC0LXQuSDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L4gwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDRgtGO0L3QtdGA0L7QvC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQsdGA0LDRgtGMINGA0LDQtNC40L4t0LLRhdC+0LQg0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQstGL0LHRgNCw0YLRjCDQstGF0L7QtCAlZCDQtNC70Y8g0YPRgdGC0YDQvtC50YHRgtCy0LAgJXMuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40LfQvNC10L3QuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC/0YDQuNCz0LvRg9GI0LXQvdC40Y8g0LTQu9GPINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C00LXQu9C40YLRjCDQtNC+0YHRgtCw0YLQvtGH0L3QviDQv9Cw0LzRj9GC0LguIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C00LXQu9C40YLRjCDQtNC+0YHRgtCw0YLQvtGH0L3QviDQv9Cw0LzRj9GC0LguIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgItCf0YDQtdC+0LHRgNCw0LfQvtCy0LDRgtC10LvRjCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC1ICVzINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINCy0YXQvtC00L3QvtC5INGE0L7RgNC80LDRgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAi0J/RgNC10L7QsdGA0LDQt9C+0LLQsNGC0LXQu9GMINC90LAg0YPRgdGC0YDQvtC50YHRgtCy0LUgJXMg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LLRi9GF0L7QtNC90L7QuSDRhNC+0YDQvNCw0YIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgItCa0L7QtNC40YDQvtCy0YnQuNC6INC90LAg0YPRgdGC0YDQvtC50YHRgtCy0LUgJXMg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LLRhdC+0LTQvdC+0Lkg0YTQvtGA0LzQsNGCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAi0JrQvtC00LjRgNC+0LLRidC40Log0L3QsCDRg9GB0YLRgNC+0LnRgdGC0LLQtSAlcyDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQstGL0YXQvtC00L3QvtC5INGE0L7RgNC80LDRgiIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQvdC40YLRjCDQtNC10LrQvtC00LjRgNC+0LLQsNC90LjRjy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0LrQsNC00YAuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LLQvtC30LzQvtC20L3QvtGB0YLQtdC5INGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuzog0LTRgNCw0LnQstC10YAg0YPRgdGC0YDQvtC50YHRgtCy0LAgIgotItC90LXRgdC+0LLQvNC10YHRgtC40Lwg0YEgdjRsMi4g0J/RgNC+0LLQtdGA0YzRgtC1LCDQvdC1INC40YHQv9C+0LvRjNC30YPQtdGCINC70Lgg0YPRgdGC0YDQvtC50YHRgtCy0L4g0LTRgNCw0LnQstC10YAgdjRsMS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0YDQvtGB0LAg0LDRgtGA0LjQsdGD0YLQvtCyINCy0YXQvtC00LAgJWQg0YPRgdGC0YDQvtC50YHRgtCy0LAgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDRg9GB0YLQsNC90L7QstC+0Log0YLRjtC90LXRgNCwICVkINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0YDQvtGB0LAg0YHRgtCw0L3QtNCw0YDRgtCwINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LDRgtGA0LjQsdGD0YLQvtCyINGD0L/RgNCw0LLQu9C10L3QuNGPINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QtSDRg9C00LDRkdGC0YHRjyDRgNCw0YHQv9C+0LfQvdCw0YLRjCDRg9GB0YLRgNC+0LnRgdGC0LLQviDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0YPRgdGC0YDQvtC50YHRgtCy0L7QvC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGD0YHRgtGA0L7QudGB0YLQstC+IMKrJXPCuyDQtNC70Y8g0YfRgtC10L3QuNGPINC4INC30LDQv9C40YHQuC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQviDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGD0YHRgtGA0L7QudGB0YLQstC+0Lwg0LfQsNGF0LLQsNGC0LAuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQviDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGD0YHRgtGA0L7QudGB0YLQstC+0Lwg0LLRi9Cy0L7QtNCwLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAi0KPRgdGC0YDQvtC50YHRgtCy0L4gwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDRg9GB0YLRgNC+0LnRgdGC0LLQvtC8IE0yTS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQtNC10LvQsNGC0Ywg0LTRg9Cx0LvQuNC60LDRgiDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsg0LTQu9GPINGH0YLQtdC90LjRjyDQuCDQt9Cw0L/QuNGB0LguIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLQntGI0LjQsdC60LAg0YPRgdGC0LDQvdC+0LLQutC4INGB0YLQsNC90LTQsNGA0YLQsCDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDRgtC10LrRg9GJ0LXQuSDRh9Cw0YHRgtC+0YLRiyDRgtGO0L3QtdGA0LAg0YPRgdGC0YDQvtC50YHRgtCy0LAgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICLQntGI0LjQsdC60LAg0YPRgdGC0LDQvdC+0LLQutC4INGC0LXQutGD0YnQtdC5INGH0LDRgdGC0L7RgtGLINGC0Y7QvdC10YDQsCDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsg0LIgJWx1INCT0YYuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LzQvtGJ0L3QvtGB0YLQuCDRgdC40LPQvdCw0LvQsCDQtNC70Y8g0YPRgdGC0YDQvtC50YHRgtCy0LAgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDQt9C90LDRh9C10L3QuNGPINGD0L/RgNCw0LLQu9GP0Y7RidC10LPQviDQv9Cw0YDQsNC80LXRgtGA0LAgJWQg0YPRgdGC0YDQvtC50YHRgtCy0LAgwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotItCe0YjQuNCx0LrQsCDRg9GB0YLQsNC90L7QstC60Lgg0LfQvdCw0YfQtdC90LjRjyAlZCDQtNC70Y8g0YPQv9GA0LDQstC70Y/RjtGJ0LXQs9C+INC/0LDRgNCw0LzQtdGC0YDQsCAlZCDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0i0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCDQsNC60YLQuNCy0L3Ri9C5INCy0YXQvtC0INGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4g0JLQvtC30LzQvtC20L3Qviwg0Y3RgtC+INGA0LDQtNC40L4tIgotItGD0YHRgtGA0L7QudGB0YLQstC+IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLQndC1INGD0LTQsNC70L7RgdGMINC+0L/RgNC10LTQtdC70LjRgtGMINCw0LrRgtC40LLQvdGL0Lkg0LLRi9GF0L7QtCDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuINCS0L7Qt9C80L7QttC90L4sINGN0YLQviDRgNCw0LTQuNC+LSIKLSLRg9GB0YLRgNC+0LnRgdGC0LLQviIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQsdGA0LDRgtGMINCy0YvRhdC+0LQgJWQg0LTQu9GPINGD0YHRgtGA0L7QudGB0YLQstCwICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIiIKLSLQmNC30LzQtdC90LXQvdC40LUg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LLQuNC00LXQviDQstC+INCy0YDQtdC80Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YLRgdGPINCyINC90LDRgdGC0L7Rj9GJ0LjQuSAiCi0i0LzQvtC80LXQvdGCLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAi0J7Qv9C10YDQsNGG0LjRjyDQvdC10LLQvtC30LzQvtC20L3QsCDQsdC10Lcg0YfQsNGB0L7QsiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwINC/0L7RgtC+0LrQsCDQtNCw0L3QvdGL0YUuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0L7RiNC40LHQutCwINC/0L7RgtC+0LrQsCDQtNCw0L3QvdGL0YUuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQviDCqyVzwrsg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LfQsNGF0LLQsNGCINCy0LjQtNC10L4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc291bmQgc2VydmVyIgotI34gbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0YHRgtCw0L3QvtCy0LjRgtGMINGB0L7QtdC00LjQvdC10L3QuNC1INGBINGB0LXRgNCy0LXRgNC+0Lwg0LfQstGD0LrQsCIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INC30LDQv9GA0L7RgdC1INCy0L7Qt9C80L7QttC90L7RgdGC0LXQuSDRgdC10YDQstC10YDQsCDQt9Cy0YPQutCwIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAi0J3QuNC30LrQuNC1IgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICLQktGL0YHQvtC60LjQtSIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICLQodC40L3RgtC10LfQsNGC0L7RgCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAiUENNIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAi0JLQvdGD0YLRgNC10L3QvdC40Lkg0LTQuNC90LDQvNC40LoiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICLQm9C40L3QtdC50L3Ri9C5INCy0YXQvtC0IgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgIkNEIgotCi0jfiBtc2dpZCAiTWl4ZXIiCi0jfiBtc2dzdHIgItCc0LjQutGI0LXRgCIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAi0JfQsNC/0LjRgdGMIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAi0KPRgdC40LvQtdC90LjQtSDQvdCwINCy0YXQvtC00LUiCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAi0KPRgdC40LvQtdC90LjQtSDQvdCwINCy0YvRhdC+0LTQtSIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAi0JvQuNC90LXQudC90YvQuS0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICLQm9C40L3QtdC50L3Ri9C5LTIiCi0KLSN+IG1zZ2lkICJMaW5lLTMiCi0jfiBtc2dzdHIgItCb0LjQvdC10LnQvdGL0LktMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAi0KbQuNGE0YDQvtCy0L7QuS0xIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0yIgotI34gbXNnc3RyICLQptC40YTRgNC+0LLQvtC5LTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgItCm0LjRhNGA0L7QstC+0LktMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICLQotC10LsuINCy0YXQvtC0IgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICLQotC10LsuINCy0YvRhdC+0LQiCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAi0JLQuNC00LXQviIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICLQoNCw0LTQuNC+IgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiIKLSN+IG1zZ3N0ciAiIgotI34gItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LDRg9C00LjQvi3Rg9GB0YLRgNC+0LnRgdGC0LLQviDQtNC70Y8g0L7QsdGA0LDQsdC+0YLQutC4INC/0LDRgNCw0LzQtdGC0YDQvtCyINC80LjQutGI0LXRgNCwLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LDRg9C00LjQvi3Rg9GB0YLRgNC+0LnRgdGC0LLQviDQtNC70Y8g0L7QsdGA0LDQsdC+0YLQutC4INC/0LDRgNCw0LzQtdGC0YDQvtCyINC80LjQutGI0LXRgNCwLiAiCi0jfiAi0JTQsNC90L3QsNGPINCy0LXRgNGB0LjRjyBPcGVuIFNvdW5kIFN5c3RlbSDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8g0Y3RgtC40Lwg0Y3Qu9C10LzQtdC90YLQvtC8LiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAi0J7QsdGJ0LjQuSIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICLQpNGA0L7QvdGC0LDQu9GM0L3Ri9C1IgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAi0KLRi9C70L7QstGL0LUiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICLQndCw0YPRiNC90LjQutC4IgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICLQptC10L3RgtGAIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICLQodCw0LHQstGD0YTQtdGAIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgItCe0LHRitGR0LzQvdGL0Lkg0LfQstGD0LoiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICLQkdC+0LrQvtCy0YvQtSIKLQotI34gbXNnaWQgIkFVWCBPdXQiCi0jfiBtc2dzdHIgItCS0YvRhdC+0LQgQVVYIgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNEINCz0LvRg9Cx0LjQvdCwIgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICIzRCDRhtC10L3RgtGAIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0Qg0YPQu9GD0YfRiNC10L3QuNC1IgotCi0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICLQotC10LvQtdGE0L7QvSIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICLQktC40LTQtdC+INCy0YXQvtC0IgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICLQktGF0L7QtCBBVVgiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAi0KPRgNC+0LLQtdC90Ywg0LfQsNC/0LjRgdC4IgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgItCS0YvRhdC+0LTQvdC+0Lkg0YPRgNC+0LLQtdC90YwiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICLQnNC40LrRgNC+0YTQvtC90L3Ri9C5INGD0YHQuNC70LjRgtC10LvRjCIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgItCU0LjQsNCz0L3QvtGB0YLQuNC60LAiCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICLQo9GB0LjQu9C10L3QuNC1INCx0LDRgdCwIgotCi0jfiBtc2dpZCAiUGxheWJhY2sgUG9ydHMiCi0jfiBtc2dzdHIgItCf0L7RgNGC0Ysg0LLQvtGB0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNGPIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgItCS0YXQvtC0IgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+INCy0YvQstC+0LTQsCIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgItCe0LfQstGD0YfQutCwINC60LvQsNCy0LjQsNGC0YPRgNGLIgotCi0jfiBtc2dpZCAiU2ltdWxhdGUgU3RlcmVvIgotI34gbXNnc3RyICLQmNC80LjRgtCw0YbQuNGPINGB0YLQtdGA0LXQviIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAi0KHRgtC10YDQtdC+IgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgItCe0LHRitGR0LzQvdGL0Lkg0LfQstGD0LoiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgItCj0YDQvtCy0LXQvdGMINC80LjQutGA0L7RhNC+0L3QsCIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICLQo9GB0YLRgNC+0LnRgdGC0LLQviDQtNC40L3QsNC80LjQutCwIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgItCj0YHRgtGA0L7QudGB0YLQstC+INC80LjQutGA0L7RhNC+0L3QsCIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkphY2siCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgItCm0LXQvdGC0YAgLyDQodCw0LHQstGD0YTQtdGAIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAi0KHRgtC10YDQtdC+INC80LjQutGI0LjRgNC+0LLQsNC90LjQtSIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICLQnNC+0L3QviDQvNC40LrRiNC40YDQvtCy0LDQvdC40LUiCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgItCc0LjQutGI0LjRgNC+0LLQsNC90LjQtSDQstGF0L7QtNCwIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICLQnNC40LrRgNC+0YTQvtC9IDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgItCc0LjQutGA0L7RhNC+0L0gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICLQptC40YTRgNC+0LLQvtC5INCy0YvRhdC+0LQiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICLQptC40YTRgNC+0LLQvtC5INCy0YXQvtC0IgotCi0jfiBtc2dpZCAiSERNSSIKLSN+IG1zZ3N0ciAiSERNSSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICLQnNC+0LTQtdC8IgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAi0JPQsNGA0L3QuNGC0YPRgNCwIgotCi0jfiBtc2dpZCAiT3RoZXIiCi0jfiBtc2dzdHIgItCU0YDRg9Cz0L7QuSIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgItCd0LjRh9C10LPQviIKLQotI34gbXNnaWQgIk9uIgotI34gbXNnc3RyICLQktC60LsiCi0KLSN+IG1zZ2lkICJPZmYiCi0jfiBtc2dzdHIgItCS0YvQutC7IgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAi0JfQsNCz0LvRg9GI0LjRgtGMIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAi0KHQutC+0YDQvtGB0YLRjCIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICLQntGH0LXQvdGMINC90LjQt9C60L7QtSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAi0J3QuNC30LrQvtC1IgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICLQodGA0LXQtNC90LXQtSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgItCS0YvRgdC+0LrQvtC1IgotCi0jfiBtc2dpZCAiVmVyeSBIaWdoIgotI34gbXNnc3RyICLQntGH0LXQvdGMINCy0YvRgdC+0LrQvtC1IgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAi0JLRi9C00LDRh9CwIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAi0JzQuNC60YDQvtGE0L7QvSDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAi0JvQuNC90LXQudC90YvQuSDQstGF0L7QtCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi0J3QsNGD0YjQvdC40LrQuCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgItCb0LjQvdC10LnQvdGL0Lkg0LLRi9GF0L7QtCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICLQl9C10LvRkdC90YvQuSDRgNCw0LfRitGR0LwiCi0KLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KDQvtC30L7QstGL0Lkg0YDQsNC30YrRkdC8IgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCh0LjQvdC40Lkg0YDQsNC30YrRkdC8IgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQkdC10LvRi9C5INGA0LDQt9GK0ZHQvCIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KfRkdGA0L3Ri9C5INGA0LDQt9GK0ZHQvCIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQodC10YDRi9C5INGA0LDQt9GK0ZHQvCIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCe0YDQsNC90LbQtdCy0YvQuSDRgNCw0LfRitGR0LwiCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQmtGA0LDRgdC90YvQuSDRgNCw0LfRitGR0LwiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQltGR0LvRgtGL0Lkg0YDQsNC30YrRkdC8IgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQl9C10LvRkdC90YvQuSDRgNCw0LfRitGR0Lwg0L3QsCDQv9C10YDQtdC00L3QtdC5INC/0LDQvdC10LvQuCIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQoNC+0LfQvtCy0YvQuSDRgNCw0LfRitGR0Lwg0L3QsCDQv9C10YDQtdC00L3QtdC5INC/0LDQvdC10LvQuCIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQodC40L3QuNC5INGA0LDQt9GK0ZHQvCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiV2hpdGUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQkdC10LvRi9C5INGA0LDQt9GK0ZHQvCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQp9GR0YDQvdGL0Lkg0YDQsNC30YrRkdC8INC90LAg0L/QtdGA0LXQtNC90LXQuSDQv9Cw0L3QtdC70LgiCi0KLSN+IG1zZ2lkICJHcmF5IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KHQtdGA0YvQuSDRgNCw0LfRitGR0Lwg0L3QsCDQv9C10YDQtdC00L3QtdC5INC/0LDQvdC10LvQuCIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCe0YDQsNC90LbQtdCy0YvQuSDRgNCw0LfRitGR0Lwg0L3QsCDQv9C10YDQtdC00L3QtdC5INC/0LDQvdC10LvQuCIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCa0YDQsNGB0L3Ri9C5INGA0LDQt9GK0ZHQvCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiWWVsbG93IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0JbRkdC70YLRi9C5INGA0LDQt9GK0ZHQvCDQvdCwINC/0LXRgNC10LTQvdC10Lkg0L/QsNC90LXQu9C4IgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAi0KDQsNC30LLRkdGA0L3Rg9GC0YvQuSDQstGL0LLQvtC0IgotCi0jfiBtc2dpZCAiRG93bm1peCIKLSN+IG1zZ3N0ciAi0J3QuNC30LLQtdC00LXQvdC40LUiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICLQktGF0L7QtCDQstC40YDRgtGD0LDQu9GM0L3QvtCz0L4g0LzQuNC60YjQtdGA0LAiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIE91dHB1dCIKLSN+IG1zZ3N0ciAi0JLRi9GF0L7QtCDQstC40YDRgtGD0LDQu9GM0L3QvtCz0L4g0LzQuNC60YjQtdGA0LAiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICLQmtCw0L3QsNC70Ysg0LLQuNGA0YLRg9Cw0LvRjNC90L7Qs9C+INC80LjQutGI0LXRgNCwIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgItCk0YPQvdC60YbQuNGPICVzICVkIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgItCk0YPQvdC60YbQuNGPICVzIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAi0J/QvtC70YPRh9C10L0g0L3QtdC+0LbQuNC00LDQvdC90YvQuSDRgNCw0LfQvNC10YAg0LrQsNC00YDQsDogJXUg0LLQvNC10YHRgtC+ICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPICVkINCx0LDQudGCINC40Lcg0YPRgdGC0YDQvtC50YHRgtCy0LAgwqslc8K7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0LIg0L7Rh9C10YDQtdC00Ywg0LHRg9GE0LXRgNGLINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuyIKLQotI34gbXNnaWQgIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQv9C+0L/Ri9GC0LrQtSDQv9C+0LvRg9GH0LXQvdC40Y8g0LrQsNC00YDQvtCyINCy0LjQtNC10L4g0YEg0YPRgdGC0YDQvtC50YHRgtCy0LAgwqslc8K7LiIKLQotI34gbXNnaWQgIkZhaWxlZCBhZnRlciAlZCB0cmllcy4gZGV2aWNlICVzLiBzeXN0ZW0gZXJyb3I6ICVzIgotI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtGB0LvQtSAlZCDQv9C+0L/Ri9GC0L7Qui4g0KPRgdGC0YDQvtC50YHRgtCy0L46ICVzLiDQodC40YHRgtC10LzQvdCw0Y8g0L7RiNC40LHQutCwOiAlcyIKLQotI34gbXNnaWQgIiIKLSN+ICJUaGUgYnVmZmVyIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMsIG9yIG5vICIKLSN+ICJidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgeWV0LCBvciB0aGUgdXNlcnB0ciBvciBsZW5ndGggYXJlIGludmFsaWQuICIKLSN+ICJkZXZpY2UgJXMiCi0jfiBtc2dzdHIgIiIKLSN+ICLQndC10L/QvtC00LTQtdGA0LbQuNCy0LDQtdC80YvQuSDRgtC40L8g0LHRg9GE0LXRgNCwLCDQu9C40LHQviDQuNC90LTQtdC60YEg0LLQvdC1INC00LjQsNC/0LDQt9C+0L3QsCwg0LvQuNCx0L4g0LHRg9GE0LXRgNGLINC90LUgIgotI34gItCx0YvQu9C4INGA0LDRgdC/0YDQtdC00LXQu9C10L3Riywg0LvQuNCx0L4g0L3QtdCy0LXRgNC90YvQtSDQt9C90LDRh9C10L3QuNGPINC00LvQuNC90Ysg0LjQu9C4IHVzZXJwdHIgKNGD0YHRgtGA0L7QudGB0YLQstC+ICIKLSN+ICIlcykiCi0KLSN+IG1zZ2lkICIiCi0jfiAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIE5vdCBlbm91Z2ggbWVtb3J5LiIKLSN+IG1zZ3N0ciAiIgotI34gItCe0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtC/0YvRgtC60LUg0L/QvtC70YPRh9C10L3QuNGPINC60LDQtNGA0L7QsiDQstC40LTQtdC+INGBINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4g0J3QtSDRhdCy0LDRgtCw0LXRgiAiCi0jfiAi0L/QsNC80Y/RgtC4LiIKLQotI34gbXNnaWQgImluc3VmZmljaWVudCBtZW1vcnkgdG8gZW5xdWV1ZSBhIHVzZXIgcG9pbnRlciBidWZmZXIuIGRldmljZSAlcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQvdC1INGF0LLQsNGC0LDQtdGCINC/0LDQvNGP0YLQuCDQtNC70Y8g0L/QvtGB0YLQsNC90L7QstC60Lgg0LIg0L7Rh9C10YDQtdC00Ywg0LHRg9GE0LXRgNCwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQvtCz0L4gIgotI34gItGD0LrQsNC30LDRgtC10LvRjyAo0YPRgdGC0YDQvtC50YHRgtCy0L4gJXMpIgotCi0jfiBtc2dpZCAiTm8gZnJlZSBidWZmZXJzIGZvdW5kIGluIHRoZSBwb29sIGF0IGluZGV4ICVkLiIKLSN+IG1zZ3N0ciAi0JIg0L/Rg9C70LUg0L3QtSDQvdCw0LnQtNC10L3QviDRgdCy0L7QsdC+0LTQvdGL0YUg0LHRg9GE0LXRgNC+0LIg0LTQu9GPINC40L3QtNC10LrRgdCwICVkLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINCx0YPRhNC10YDRiyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZ2V0IGVub3VnaCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0L3QtdC+0LHRhdC+0LTQuNC80L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQsdGD0YTQtdGA0L7QsiDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsiCi0KLSN+IG1zZ2lkICJFcnJvciBzdGFydGluZyBzdHJlYW1pbmcgY2FwdHVyZSBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDQt9Cw0L/Rg9GB0LrQtSDQv9C+0YLQvtC60L7QstC+0LPQviDQt9Cw0YXQstCw0YLQsCDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuIgotCi0jfiBtc2dpZCAiRXJyb3Igc3RvcHBpbmcgc3RyZWFtaW5nIGNhcHR1cmUgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0L7RgdGC0LDQvdC+0LLQutC1INC/0L7RgtC+0LrQvtCy0L7Qs9C+INC30LDRhdCy0LDRgtCwINGBINGD0YHRgtGA0L7QudGB0YLQstCwIMKrJXPCuy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIENELiIKLSN+IG1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0YwgQ0QuIgotCi0jfiBtc2dpZCAiRGlzYyBpcyBub3QgYW4gQXVkaW8gQ0QuIgotI34gbXNnc3RyICLQlNC40YHQuiDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LDRg9C00LjQvi1DRC4iCi0KLSN+IG1zZ2lkICJUaGlzIGZpbGUgaXMgZW5jcnlwdGVkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLSN+IG1zZ3N0ciAi0KTQsNC50Lsg0LfQsNGI0LjRhNGA0L7QstCw0L0g0Lgg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINCy0L7RgdC/0YDQvtC40LfQstC10LTRkdC9LiIKLQotI34gbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcy4nIgotI34gbXNnc3RyICLQntGI0LjQsdC60LAg0L/QvtC70YPRh9C10L3QuNGPINCw0YLRgNC40LHRg9GC0L7QsiDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHNldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotI34gbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0YHRgtCw0L3QvtCy0LjRgtGMINC/0LDRgNCw0LzQtdGC0YDRiyDRg9GB0YLRgNC+0LnRgdGC0LLQsCDCqyVzwrsiCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZC8lZCBmcmFtZXMgcGVyIHNlY29uZCIKLSN+IG1zZ3N0ciAiIgotI34gItCj0YHRgtGA0L7QudGB0YLQstC+IMKrJXPCuyDQvdC1INC80L7QttC10YIg0L7RgdGD0YnQtdGB0YLQstC40YLRjCDQt9Cw0YXQstCw0YIg0L/RgNC4ICVkLyVkINC60LDQtNGA0LDRhSDQsiDRgdC10LrRg9C90LTRgyIKZGlmZiAtLWdpdCBhL3BvL3NrLmdtbyBiL3BvL3NrLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RhMjJjNS4uMDAwMDAwMAotLS0gYS9wby9zay5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby9zay5wbyBiL3BvL3NrLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzAyNmFkLi4wMDAwMDAwCi0tLSBhL3BvL3NrLnBvCisrKyAvZGV2L251bGwKQEAgLTEsOTI1ICswLDAgQEAKLSMgU2xvdmFrIHRyYW5zbGF0aW9ucyBmb3IgZ3N0LXBsdWdpbnMtZ29vZC4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMKLSMgUGV0ZXIgVHVow6Fyc2t5IDx0dWhhcnNreUBtaXNiYi5zaz4sIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTQsIDIwMTYuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDUtMjAgMTI6MzErMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgVHVow6Fyc2t5IDx0dWhhcnNreUBtaXNiYi5zaz5cbiIKLSJMYW5ndWFnZS1UZWFtOiBTbG92YWsgPHNrLWkxOG5AbGlzdHMubGludXguc2s+XG4iCi0iTGFuZ3VhZ2U6IHNrXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEpID8gMCA6IChuPj0yICYmIG48PTQpID8gMSA6IDI7XFxuO1xuIgotIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS42LjEwXG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIkphY2sgc2VydmVyIHNhIG5lbmHFoWllbCIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBkZWvDs2RvdmHFpSBvYnLDoXpvayBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICInJXMnIG9kICclcyciCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgcHJpcG9qacWlIGsgc2VydmVydSIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICJOZWJvbG8gbmFzdGF2ZW7DqSBVUkwuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIlNlcnZlciBuZXBvZHBvcnVqZSB6bWVudSBwb3rDrWNpZSIKLQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBwcmVsb8W+acWlIG7DoXpvdiBzZXJ2ZXJhLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG5hZHZpYXphxaUgc3BvamVuaWUgc28gc2VydmVyb20uIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiTmFzdGF2ZW5pZSBiZXpwZcSNbsOpaG8gcHJpcG9qZW5pYSB6bHloYWxvLiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIlZ5c2t5dGxhIHNhIHNpZcWlb3bDoSBjaHliYSwgYWxlYm8gc2VydmVyIG5lxI1ha2FuZSB1emF2cmVsIHNwb2plbmllLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiU2VydmVyIG9kb3NsYWwgY2h5Ym7DqSDDumRhamUuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICLFvWlhZG55IGFsZWJvIGNoeWJuw70gdnN0dXAgenZ1a3UsIHByw7pkIMO6ZGFqb3YgQVZJIGJ1ZGUgcG/FoWtvZGVuw70uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJUZW50byBzw7pib3IgbmVvYnNhaHVqZSDFvmlhZG5lIHByZWhyYXRlxL5uw6kgcHLDumR5IMO6ZGFqb3YuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJUZW50byBzw7pib3IgamUgY2h5Ym7DvSBhIG5lZMOhIHNhIHByZWhyYcWlLiIKLQotbXNnaWQgIkNhbm5vdCBwbGF5IHN0cmVhbSBiZWNhdXNlIGl0IGlzIGVuY3J5cHRlZCB3aXRoIFBsYXlSZWFkeSBEUk0uIgotbXNnc3RyICIiCi0iUHLDumQgw7pkYWpvdiBzYSBuZWTDoSBwcmVocmHFpSBwcmV0b8W+ZSBqZSDFoWlmcm92YW7DvSBwb21vY291IFBsYXlSZWFkeSBEUk0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJUZW50byBzw7pib3IgamUgcG/FoWtvZGVuw70gYSBuZWTDoSBzYSBwcmVocmHFpS4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIk5lc3Byw6F2bmEgYXRvbWlja8OhIHZlxL5rb3PFpS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlRlbnRvIHPDumJvciBqZSBuZcO6cGxuw70gYSBuZWTDoSBzYSBwcmVocmHFpS4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIlZpZGVvIHYgdG9tdG8gc8O6Ym9yZSBtb8W+bm8gbmVidWRlIGhyYcWlIGtvcmVrdG5lLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICJUZW50byBzw7pib3Igb2JzYWh1amUgcHLDrWxpxaEgbW5vaG8gcHLDumRvdiDDumRham92LiBQcmVocsOhdmFtIGliYSBwcnbDvSAlZCIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iTmVuYcWhaWVsIHNhIMW+aWFkZW4gcG9kcG9yb3ZhbsO9IHByw7pkIMO6ZGFqb3YuIE1vxb5ubyBqZSBwb3RyZWJuw6kgbmFpbsWhdGFsb3ZhxaUgIgotInrDoXN1dm7DvSBtb2R1bCBHU3RyZWFtZXIgUlRTUCBwcmUgcHLDumR5IFJlYWwgbWVkaWEuLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIk5lbmHFoWllbCBzYSDFvmlhZGVuIHBvZHBvcm92YW7DvSBwcsO6ZCDDumRham92LiBNb8W+bm8gYnkgc3RlIG1hbGkgcG92b2xpxaUgIgotInZpYWNlcm8gcHJlbm9zb3bDvWNoIHByb3Rva29sb3YsIGFsZWJvIHbDoW0gbW/Fvm5vIGNow71iYSBzcHLDoXZueSB6w6FzdXZuw70gbW9kdWwgIgotIkdTdHJlYW1lciBSVFNQLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHp2dWtvdsOpIHphcmlhZGVuaWUgdiByZcW+aW1lIHByZWhyw6F2YW5pYS4gWmFyaWFkZW5pZSB1xb4gIgotInBvdcW+w612YSBpbsOhIGFwbGlrw6FjaWEuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHp2dWtvdsOpIHphcmlhZGVuaWUgdiByZcW+aW1lIHByZWhyw6F2YW5pYS4gTmVtw6F0ZSAiCi0ib3Byw6F2bmVuaWUgbmEgb3R2b3JlbmllIHRvaHRvIHphcmlhZGVuaWEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2Egb3R2b3JpxaUgenZ1a292w6kgemFyaWFkZW5pZSB2cmXFvmltZSBwcmVocsOhdmFuaWEuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIk5lcG9kYXJpbG8gc2Egb3R2b3JpxaUgenZ1a292w6kgemFyaWFkZW5pZSB2IHJlxb5pbWUgcHJlaHLDoXZhbmlhLiBUZW50byBwcnZvayAiCi0ibmVwb2Rwb3J1amUgdMO6dG8gdmVyeml1IE9wZW4gU291bmQgU3lzdGVtLiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJUb3RvIHp2dWtvdsOpIHphcmlhZGVuaWUgbmVwb2Rwb3J1amUgcHJlaHLDoXZhbmllLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiQ2h5YmEgcHJlaHLDoXZhbmlhIHp2dWt1LiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiVG90byB6dnVrb3bDqSB6YXJpYWRlbmllIG5lcG9kcG9ydWplIG5haHLDoXZhbmllLiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkNoeWJhIHByaSBuYWhyw6F2YW7DrSB6byB6dnVrb3bDqWhvIHphcmlhZGVuaWEuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTmVwb2RhcmlsbyBzYSBvdHZvcmnFpSB6dnVrb3bDqSB6YXJpYWRlbmllIHYgcmXFvmltZSBuYWhyw6F2YW5pYS4gTmVtw6F0ZSAiCi0ib3Byw6F2bmVuaWUgbmEgb3R2b3JlbmllIHRvaHRvIHphcmlhZGVuaWEuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHp2dWtvdsOpIHphcmlhZGVuaWUgdiByZcW+aW1lIG5haHLDoXZhbmlhLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIlpkcm9qIHrDoXpuYW11IgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAiTWlrcm9mw7NuIgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAiTGlua292w70gdnN0dXAiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiVm7DunRvcm5lIENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIHZzdHVwIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIHZzdHVwIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIHZzdHVwIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIlNww6R0bsOhIHNsdcSNa2Ega29kZWt1IgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJTcMOkdG7DoSBzbHXEjWthIFN1blZUUyIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiSGxhc2l0b3PFpSIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgIlppc2siCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNb25pdG9yIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiUEMgcmVwcm9kdWt0b3IiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIlNsw7pjaGFkbMOhIgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgIkxpbmtvdsO9IHbDvXN0dXAiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElGIHbDvXN0dXAiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIkFVWCAxIHbDvXN0dXAiCi0KLW1zZ2lkICJBVVggMiBPdXQiCi1tc2dzdHIgIkFVWCAyIHbDvXN0dXAiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQ2h5YmEgcHJpIMSNw610YW7DrSAlZCBiYWp0b3Ygem8gemFyaWFkZW5pYSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotIk5lcG9kYXJpbG8gc2EgemlzdGnFpSBtb8W+bsOpIHZpZGVvIGZvcm3DoXR5IHMga3RvcsO9bWkgYnkgdmVkZWxvIHByYWNvdmHFpSAiCi0iemFyaWFkZW5pZSAnJXMnIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG5hbWFwb3ZhxaUgdnlyb3Zuw6F2YWNpdSBwYW3DpMWlIHphcmlhZGVuaWEgJyVzJyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiVGVudG8gb3Zsw6FkYcSNIHphcmlhZGVuaWEgJyVzJyBuZXBvZHBvcnVqZSBJTyBtZXTDs2R1ICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiVGVudG8gb3Zsw6FkYcSNIHphcmlhZGVuaWEgJyVzJyBuZXBvZHBvcnVqZSDFvmlhZG51IHpuw6FtdSBJTyBtZXTDs2R1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJaYXJpYWRlbmllICclcycgamUgemFuZXByw6F6ZG5lbsOpIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJaYXJpYWRlbmllICclcycgbmV2aWUgbmFocsOhdmHFpSBuYSAlZHglZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiWmFyaWFkZW5pZSAnJXMnIG5lZG9rw6HFvmUgbmFocsOhdmHFpSB2IHV2ZWRlbm9tIGZvcm3DoXRlIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIlphcmlhZGVuaWUgJyVzJyBwb2Rwb3J1amUgbmVzcG9qaXTDqSByb3ZpbnkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlIHBhcmFtZXRyZSB6YXJpYWRlbmlhICclcyciCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIlZpZGVvIHphcmlhZGVuaWUgb2RtaWV0bG8gbm92w6kgbmFzdGF2ZW5pZSBmcmVrdmVuY2llIHNuw61tb2suIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiaWRlbyB6YXJpYWRlbmllIG5lcG9za3l0bG8gdsO9c3R1cG7DvSBmb3Jtw6F0LiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICJWaWRlbyB6YXJpYWRlbmllIHVkw6F2YSBuZXNwcsOhdm5lIHJvem1lcnkuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIlZpZGVvIHphcmlhZGVuaWUgcG91xb7DrXZhIG5lcG9kcG9yb3ZhbsO6IG1ldMOzZHUgcHJla2xhZGFuaWEgc27DrW1vay4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiVmlkZW8gemFyaWFkZW5pZSBwb3XFvsOtdmEgbmVwb2Rwb3JvdmFuw70gZm9ybcOhdCBwaXhlbG92LiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG5hc3RhdmnFpSB2bsO6dG9ybsO6IG9ibGFzxaUgdnlyb3Zuw6F2YWNlaiBwYW3DpHRlLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiVmlkZW8gemFyaWFkZW5pZSBuZW9kcG9ydcSNaWxvIMW+aWFkbnUgdmXEvmtvc8WlIHZ5cm92bsOhdmFjZWogcGFtw6R0ZS4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgesOtc2thxaUgbmFzdGF2ZW5pZSBwcmlqw61tYcSNYSAlZCBvZCB6YXJpYWRlbmlhICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkNoeWJhIHByaSBuYcSNw610YW7DrSBtb8W+bm9zdMOtIHphcmlhZGVuYSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIlphcmlhZGVuaWUgJyVzJyBuaWUgamUgcHJpasOtbWHEjS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlIHJvemhsYXNvdsO9IHZzdHVwIG5hIHphcmlhZGVuw60gJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG5hc3RhdmnFpSB2c3R1cCAlZCBuYSB6YXJpYWRlbsOtICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6bWVuacWlIHN0YXYgc3RsbWVuaWEgcHJlIHphcmlhZGVuaWUgJyVzJy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgdXZvxL5uacWlIGRvc3RhdG9rIHBhbcOkdGUuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgdXZvxL5uacWlIGRvc3RhdG9rIHBhbcOkdGUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIktvbnZlcnRvciBuYSB6YXJpYWRlbsOtICVzIG5lcG9kcG9ydWplIMW+aWFkbnkgdnN0dXBuw70gZm9ybcOhdCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiS29udmVydG9yIG5hIHphcmlhZGVuw60gJXMgbmVwb2Rwb3J1amUgxb5pYWRueSB2w71zdHVwbsO9IGZvcm3DoXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkVua29kw6lyIG5hIHphcmlhZGVuw60gJXMgbmVwb2Rwb3J1amUgxb5pYWRueSB2c3R1cG7DvSBmb3Jtw6F0IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiRW5rb2TDqXIgbmEgemFyaWFkZW7DrSAlcyBuZXBvZHBvcnVqZSDFvmlhZG55IHbDvXN0dXBuw70gZm9ybcOhdCIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIHNwdXN0acWlIGRla8OzZG92YWNpZSB2bMOha25vLiIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBzcHJhY292YcWlIHNuw61tb2suIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkNoeWJhIHByaSB6aXPFpW92YW7DrSBzY2hvcG5vc3TDrSB6YXJpYWRlbmlhICclcyc6IFRvdG8gbmllIGplIG92bMOhZGHEjSB2NGwyLiAiCi0iU2tvbnRyb2x1anRlLCDEjWkgamUgdG8gb3Zsw6FkYcSNIHY0bDEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6w61za2HFpSBhdHJpYsO6dHkgdnN0dXB1ICVkIHphcmlhZGVuaWEgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6w61za2HFpSBuYXN0YXZlbmllIHByaWrDrW1hxI1hICVkIG9kIHphcmlhZGVuaWEgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJabHloYWxhIHBvxb5pYWRhdmthIG5vcm0gbmEgemFyaWFkZW7DrSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSB6w61za2HFpSBhdHJpYsO6dHkgb3Zsw6FkYWPDrWNoIHBydmtvdiBuYSB6YXJpYWRlbsOtICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5ldmllbSBpZGVudGlmaWtvdmHFpSB6YXJpYWRlbmllICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlRvdG8gbmllIGplIHphcmlhZGVuaWUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHphcmlhZGVuaWUgJyVzJyBwcmUgxI3DrXRhbmllIGEgesOhcGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIlphcmlhZGVuaWUgJyVzJyBuaWUgamUgdXLEjWVuw6kgcHJlIG5haHLDoXZhbmllLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiWmFyaWFkZW5pZSAnJXMnIG5pZSBqZSB1csSNZW7DqSBwcmUgdsO9c3R1cC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIlphcmlhZGVuaWUgJyVzJyBuaWUgamUgdHlwdSBNMk0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHphcmlhZGVuaWUgJyVzJyBwcmUgxI3DrXRhbmllIGEgesOhcGlzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiWmx5aGFsbyBuYXN0YXZlbmllIG5vcm0gbmEgemFyaWFkZW7DrSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgemlzdGnFpSBzw7rEjWFzbsO6IGZyZWt2ZW5jaXUgcHJpasOtbWHEjWEgcHJlIHphcmlhZGVuaWUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIk5lcG9kYXJpbG8gc2EgbmFzdGF2acWlIHPDusSNYXNuw7ogZnJla3ZlbmNpdSBwcmlqw61tYcSNYSBwcmUgemFyaWFkZW5pZSAnJXMnIG5hICIKLSIlbHUgSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5lcG9kYXJpbG8gc2EgemlzdGnFpSBzaWx1IHNpZ27DoWx1IHByZSB6YXJpYWRlbmllICclcycuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTmVwb2RhcmlsbyBzYSB6aXN0acWlIGhvZG5vdHUgcHJlIG92bMOhZGFjw60gcHJ2b2sgJWQgcHJlIHphcmlhZGVuaWUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJOZXBvZGFyaWxvIHNhIG5hc3RhdmnFpSBob2Rub3R1ICVkIHByZSBvdmzDoWRhY8OtIHBydm9rICVkIG5hIHphcmlhZGVuw60gJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJOZXBvZGFyaWxvIHNhIHppc3RpxaUgc8O6xI1hc27DvSB2c3R1cCBuYSB6YXJpYWRlbsOtICclcycuIE1vxb5ubyBqZSB0byByw6FkaW8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJOZXBvZGFyaWxvIHNhIHppc3RpxaUgc8O6xI1hc27DvSB2w71zdHVwIG5hIHphcmlhZGVuw60gJyVzJy4gTW/Fvm5vIGplIHRvIHLDoWRpby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBuYXN0YXZpxaUgdsO9c3R1cCAlZCBuYSB6YXJpYWRlbsOtICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIlptZW5hIHJvemzDrcWhZW5pYSB6YSBjaG9kdSBuaWUgamUgemF0aWHEviBwb2Rwb3JvdmFuw6EuIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICJOZW3DtMW+ZW0gZnVuZ292YcWlIGJleiBob2TDrW4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIlZuw7p0b3Juw6EgY2h5YmEgcHLDumR1IMO6ZGFqb3YuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiVm7DunRvcm7DoSBjaHliYSB0b2t1IMO6ZGFqb3YuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBuYWR2aWF6YcWlIHNwb2plbmllIHNvIHp2dWtvdsO9bSBzZXJ2ZXJvbSIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICJOZXBvZGFyaWxvIHNhIHppc3RpxaUgc2Nob3Bub3N0aSB6dnVrb3bDqWhvIHNlcnZlcmEiCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICJCYXN5IgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJWw73FoWt5IgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlN5bnRldGl6w6lyIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJSZXByb2R1a3RvciIKLQotI34gbXNnaWQgIkxpbmUtaW4iCi0jfiBtc2dzdHIgIkxpbmtvdsO9IHZzdHVwIgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgIkNEIgotCi0jfiBtc2dpZCAiTWl4ZXIiCi0jfiBtc2dzdHIgIk1peMOpciIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiTmFocsOhdmFuaWUiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJWc3R1cG7DvSB6aXNrIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIlbDvXN0dXBuw70gemlzayIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiTGlua2EtMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAiTGlua2EtMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAiTGlua2EtMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiRGlnaXTDoWwtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiRGlnaXTDoWwtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiRGlnaXTDoWwtMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJUZWxlZsOzbi12c3R1cCIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiVGVsZWbDs24tdsO9c3R1cCIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSw6FkaW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHp2dWtvdsOpIHphcmlhZGVuaWUgdiByZcW+aW1lIG9ic2x1aHkgbWl4w6lydS4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBtaXhlciBjb250cm9sIGhhbmRsaW5nLiBUaGlzIHZlcnNpb24gb2YgIgotI34gInRoZSBPcGVuIFNvdW5kIFN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOZXBvZGFyaWxvIHNhIG90dm9yacWlIHp2dWtvdsOpIHphcmlhZGVuaWUgdiByZcW+aW1lIG9ic2x1aHkgbWl4w6lydS4gVMOhdG8gIgotI34gInZlcnppYSBPcGVuIFNvdW5kIFN5c3RlbSBuaWUgamUgcG9kcG9yb3ZhbsOhIHTDvW10byBwcnZrb20uIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICJIbGF2bsO9IgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIlByZWRuw70iCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJaYWRuw6kiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICJTbMO6Y2hhZGzDoSIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAiU3RyZWRuw70iCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJQcmllc3Rvcm92w70iCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJTdHJhbmEiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVggdsO9c3R1cCIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICIzRCBoxLpia2EiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIjNEIHN0cmVkIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0QgdnlsZXDFoWVuaWUiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIlRlbGVmw7NuIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZGVvIHZzdHVwIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJBVVggdnN0dXAiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiWmlzayB6w6F6bmFtdSIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJWw71zdHVwbsO9IHppc2siCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJab3NpbG5lbmllIG1pa3JvZsOzbnUiCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICJEaWFnbm9zdGlrYSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIlp2w71yYXpuZW5pZSBiYXNvdiIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICJQcmVocsOhdmFjaWUgcG9ydHkiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAiVnN0dXAiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTW9uaXRvciB6ZHJvamEiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJQw61wbnV0aWUga2zDoXZlc25pY2UiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIlNpbXVsb3ZhxaUgc3RlcmVvIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICJTdGVyZW8iCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAiUHJpZXN0b3JvdsO9IHp2dWsiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIlppc2sgbWlrcm9mw7NudSIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICJaZHJvaiByZXByb2R1a3RvcmEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiWmRyb2ogbWlrcm9mw7NudSIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkphY2siCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgIlN0cmVkIC8gTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiU3RlcmVvIE1peCIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICJNb25vIE1peCIKLQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAiVnN0dXAgTWl4IgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAxIgotI34gbXNnc3RyICJNaWtyb2bDs24gMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWlrcm9mw7NuIDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAiRGlnaXTDoWxueSB2w71zdHVwIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAiRGlnaXTDoWxueSB2c3R1cCIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAiTW9kZW0iCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAiSW7DqSIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgIk5pxI0iCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAiWmFwbnV0w6kiCi0KLSN+IG1zZ2lkICJPZmYiCi0jfiBtc2dzdHIgIlZ5cG51dMOpIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiU3RsbWnFpSIKLQotI34gbXNnaWQgIkZhc3QiCi0jfiBtc2dzdHIgIlLDvWNobG8iCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAiVmXEvm1pIG7DrXprZSIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiTsOtemtlIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICJTdHJlZG7DqSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIlZ5c29rw6kiCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIlZlxL5taSB2eXNva8OpIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAiUHJvZHVrY2lhIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAiTWlrcm9mw7NuIG5hIHByZWRub20gcGFuZWxpIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiTGlua292w70gdnN0dXAgbmEgcHJlZG5vbSBwYW5lbGkiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJTbMO6Y2hhZGzDoSBuYSBwcmVkbm9tIHBhbmVsaSIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgT3V0IgotI34gbXNnc3RyICJMaW5rb3bDvSB2w71zdHVwIG5hIHByZWRub20gcGFuZWxpIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJaZWxlbsO9IGtvbmVrdG9yIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlJ1xb5vdsO9IGtvbmVrdG9yIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk1vZHLDvSBrb25la3RvciIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmllbHkga29uZWt0b3IiCi0KLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsSMaWVybnkga29uZWt0b3IiCi0KLSN+IG1zZ2lkICJHcmF5IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAixaBlZMO9IGtvbmVrdG9yIgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiT3JhbsW+b3bDvSBrb25la3RvciIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsSMZXJ2ZW7DvSBrb25la3RvciIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsW9bHTDvSBrb25la3RvciIKLQotI34gbXNnaWQgIkdyZWVuIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiWmVsZW7DvSBrb25la3RvciBuYSBwcmVkbm9tIHBhbmVsaSIKLQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJSdcW+b3bDvSBrb25la3RvciBuYSBwcmVkbm9tIHBhbmVsaSIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJNb2Ryw70ga29uZWt0b3IgbmEgcHJlZG5vbSBwYW5lbGkiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkJpZWx5IGtvbmVrdG9yIG5hIHByZWRub20gcGFuZWxpIgotCi0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEjGllcm55IGtvbmVrdG9yIG5hIHByZWRub20gcGFuZWxpIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsWgZWTDvSBrb25la3RvciBuYSBwcmVkbm9tIHBhbmVsaSIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk9yYW7Fvm92w70ga29uZWt0b3IgbmEgcHJlZG5vbSBwYW5lbGkiCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEjGVydmVuw70ga29uZWt0b3IgbmEgcHJlZG5vbSBwYW5lbGkiCi0KLSN+IG1zZ2lkICJZZWxsb3cgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLFvWx0w70ga29uZWt0b3IgbmEgcHJlZG5vbSBwYW5lbGkiCi0KLSN+IG1zZ2lkICJTcHJlYWQgT3V0cHV0IgotI34gbXNnc3RyICJSb3pkZWxpxaUgdsO9c3R1cCIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIlptaWXFoWFuaWUiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJWc3R1cCB2aXJ0dcOhbG5laG8gbWl4w6lyYSIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJWw71zdHVwIHZpcnR1w6FsbmVobyBtaXjDqXJhIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBDaGFubmVscyIKLSN+IG1zZ3N0ciAiS2Fuw6FseSB2aXJ0dcOhbG5laG8gbWl4w6lyYSIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyAlZCBmdW5rY2lhIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIGZ1bmtjaWEiCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJOYXN0YWxhIG5lb8SNYWvDoXZhbsOhIHZlxL5rb3PFpSBzbsOtbWt5ICV1IG5hbWllc3RvICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJDaHliYSBwcmkgxI3DrXRhbsOtICVkIGJhanRvdiBuYSB6YXJpYWRlbsOtICclcycuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk5lcG9kYXJpbG8gc2EgemFyYWRpxaUgdnlyb3Zuw6F2YWNpdSBwYW3DpMWlIG5hIHphcmlhZGVuw60gJyVzJy4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIk5lcG9kYXJpbG8gc2EgesOtc2thxaUgdmlkZW9zbsOtbWt5IHpvIHphcmlhZGVuaWEgJyVzJy4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgYWZ0ZXIgJWQgdHJpZXMuIGRldmljZSAlcy4gc3lzdGVtIGVycm9yOiAlcyIKLSN+IG1zZ3N0ciAiTmVwb2RhcmlsbyBzYSBwbyAlZCBwb2t1c29jaC4gWmFyaWFkZW5pZSAlcy4gU3lzdMOpbW92w6EgY2h5YmE6ICVzIgotCi0jfiBtc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzLiciCi0jfiBtc2dzdHIgIk5lcG9kYXJpbG8gc2EgesOtc2thxaUgYXRyaWLDunR5IG92bMOhZGFjw61jaCBwcnZrb3YgbmEgemFyaWFkZW7DrSAnJXMuJyIKLQotI34gbXNnaWQgIiIKLSN+ICJUaGUgYnVmZmVyIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMsIG9yIG5vICIKLSN+ICJidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgeWV0LCBvciB0aGUgdXNlcnB0ciBvciBsZW5ndGggYXJlIGludmFsaWQuICIKLSN+ICJkZXZpY2UgJXMiCi0jfiBtc2dzdHIgIiIKLSN+ICJUZW50byB0eXAgdnlyb3Zuw6F2YWNlaiBwYW3DpHRlIG5pZSBqZSBwb2Rwb3JvdmFuw70sIGFsZWJvIGplIHRlbnRvIGluZGV4ICIKLSN+ICJtaW1vIG1lZHrDrSwgYWxlYm8gemF0aWHEviBuZWJvbGEgYWxva292YW7DoSDFvmlhZG5hIHZ5cm92bsOhdmFjaWEgcGFtw6TFpSwgIgotI34gImFsZWJvIHVzZXJwdHIgYWxlYm8gZMS6xb5rYSBzw7ogY2h5Ym7DqS4gWmFyaWFkZW5pZSAlcyIKLQotI34gbXNnaWQgIiIKLSN+ICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4gTm90IGVub3VnaCBtZW1vcnkuIgotI34gbXNnc3RyICIiCi0jfiAiTmVwb2RhcmlsbyBzYSB6w61za2HFpSB2aWRlb3Nuw61ta3kgem8gemFyaWFkZW5pYSAnJXMnLiBOZWRvc3RhdG9rIHBhbcOkdGUuIgotCi0jfiBtc2dpZCAiaW5zdWZmaWNpZW50IG1lbW9yeSB0byBlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci4gZGV2aWNlICVzLiIKLSN+IG1zZ3N0ciAiIgotI34gIm5lZG9zdGF0b2sgcGFtw6R0ZSBwcmUgemFyYWRlbmllIHBvxb5pYWRhdmt5IG5hIHBvdcW+w612YXRlxL5za8O6IHZ5cm92bsOhdmFjaXUgIgotI34gInBhbcOkxaUgdWthem92YXRlxL5hLiB6YXJpYWRlbmllICVzLiIKLQotI34gbXNnaWQgIk5vIGZyZWUgYnVmZmVycyBmb3VuZCBpbiB0aGUgcG9vbCBhdCBpbmRleCAlZC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOZW5hxaFsaSBzYSDFvmlhZG5lIHZvxL5uw6kgb2JsYXN0aSB2eXJvdm7DoXZhY2VpIHBhbcOkdGUgdiBibG9rdSBuYSBpbmRleGUgJWQuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJOZXBvZGFyaWxvIHNhIHrDrXNrYcWlIHZ5cm92bsOhdmFjaXUgcGFtw6TFpSBvZCB6YXJpYWRlbmlhICclcycuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBlbm91Z2ggYnVmZmVycyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiIgotI34gIk5lcG9kYXJpbG8gc2EgesOtc2thxaUgZG9zdGF0b2sgdnlyb3Zuw6F2YWNlaiBwYW3DpHRlIG9kIHphcmlhZGVuaWEgJyVzJy4iCi0KLSN+IG1zZ2lkICJFcnJvciBzdGFydGluZyBzdHJlYW1pbmcgY2FwdHVyZSBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiQ2h5YmEgcHJpIMWhdGFydG92YW7DrSB6YWNoeXTDoXZhbmlhIHByw7pkdSDDumRham92IHpvIHphcmlhZGVuaWEgJyVzJy4iCi0KLSN+IG1zZ2lkICJFcnJvciBzdG9wcGluZyBzdHJlYW1pbmcgY2FwdHVyZSBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiQ2h5YmEgcHJpIHphc3Rhdm92YW7DrSB6YWNoeXTDoXZhbmlhIHByw7pkdSDDumRham92IHpvIHphcmlhZGVuaWEgJyVzJy4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIENELiIKLSN+IG1zZ3N0ciAiTmVwb2RhcmlsbyBzYSDEjcOtdGHFpSB6IENELiIKLQotI34gbXNnaWQgIkRpc2MgaXMgbm90IGFuIEF1ZGlvIENELiIKLSN+IG1zZ3N0ciAiVGVudG8gZGlzayBuaWUgamUgenZ1a292w6kgQ0QuIgotCi0jfiBtc2dpZCAiVGhpcyBmaWxlIGlzIGVuY3J5cHRlZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi0jfiBtc2dzdHIgIlRlbnRvIHPDumJvciBqZSB6YcWhaWZyb3ZhbsO9IGEgbmVkw6Egc2EgcHJlaHJhxaUuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHNldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotI34gbXNnc3RyICJOZXBvZGFyaWxvIHNhIG5hc3RhdmnFpSBwYXJhbWV0cmUgemFyaWFkZW5pdSAnJXMnIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWQvJWQgZnJhbWVzIHBlciBzZWNvbmQiCi0jfiBtc2dzdHIgIlphcmlhZGVuaWUgJyVzJyBuZWRva8Ohxb5lIHphY2h5dMOhdmHFpSBwcmkgJWQvJWQgc27DrW1rYWNoIHphIHNla3VuZHUiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZXhjaGFuZ2UgZGF0YSB3aXRoIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiTmVwb2RhcmlsYSBzYSB2w71tZW5hIMO6ZGFqb3Ygc28gemFyaWFkZW7DrW0gJyVzJy4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIGlucHV0IGVsZW1lbnQuIgotI34gbXNnc3RyICJPcGlzdWplIHZ5YnJhbsO9IHZzdHVwbsO9IHBydm9rLiIKLQotI34gbXNnaWQgIkRlc2NyaWJlcyB0aGUgc2VsZWN0ZWQgb3V0cHV0IGVsZW1lbnQgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZy4iCi0jfiBtc2dzdHIgIk9waXN1amUgdnlicmFuw70gdsO9c3R1cG7DvSBwcnZvayBwcmUgaGxhc292w6kvdmlkZW8ga29uZmVyZW5jaWUuIgotCi0jfiBtc2dpZCAiRGVzY3JpYmVzIHRoZSBzZWxlY3RlZCBvdXRwdXQgZWxlbWVudCBmb3IgTXVzaWMgYW5kIE1vdmllcy4iCi0jfiBtc2dzdHIgIk9waXN1amUgdnlicmFuw70gdsO9c3R1cG7DvSBwcnZvayBwcmUgaHVkYnUgYSBmaWxteS4iCi0KLSN+IG1zZ2lkICJEZXNjcmliZXMgdGhlIHNlbGVjdGVkIG91dHB1dCBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiT3Bpc3VqZSB2eWJyYW7DvSB2w71zdHVwbsO9IHBydm9rLiIKLQotI34gbXNnaWQgIkdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZyIKLSN+IG1zZ3N0ciAiR1N0cmVhbWVyIGF1ZGlvc2luayBwcmUgaGxhc292w6kvdmlkZW8ga29uZmVyZW5jaWUiCi0KLSN+IG1zZ2lkICJHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBNdXNpYyBhbmQgTW92aWVzIgotI34gbXNnc3RyICJHU3RyZWFtZXIgYXVkaW9zaW5rIHByZSBodWRidSBhIGZpbG15IgotCi0jfiBtc2dpZCAiIgotI34gIkdTdHJlYW1lciBjYW4gcGxheSBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIG91dHB1dCBlbGVtZW50cy4gU29tZSAiCi0jfiAicG9zc2libGUgY2hvaWNlcyBhcmUgb3Nzc2luaywgZXNkc2luayBhbmQgYWxzYXNpbmsuIFRoZSBhdWRpb3NpbmsgY2FuIGJlICIKLSN+ICJhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBkb2vDocW+ZSBwcmVocsOhdmHFpSB6dnVrIHBvbW9jb3UgxL51Ym92b8S+bsOpaG8gcG/EjXR1IHbDvXN0dXBuw71jaCAiCi0jfiAicHJ2a292LiBNb8W+bm9zxaVhbWkgc8O6IG5hcHLDrWtsYWQgb3Nzc2luaywgZXNkc2luayBhIGFsc2FzaW5rLiBBdWRpb3NpbmsgIgotI34gIm3DtMW+ZSBiecWlIMSNaWFzdG/EjW5lIHLDunJvdSwgbmllbGVuIGplZGluw71tIHBydmtvbS4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiBwbGF5IHZpZGVvIHVzaW5nIGFueSBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSB4dmltYWdlc2luaywgeGltYWdlc2luaywgc2RsdmlkZW9zaW5rIGFuZCBhYXNpbmsuICIKLSN+ICJUaGUgdmlkZW9zaW5rIGNhbiBiZSBhIHBhcnRpYWwgcGlwZWxpbmUgaW5zdGVhZCBvZiBqdXN0IG9uZSBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIkdTdHJlYW1lciBkb2vDocW+ZSBwcmVocsOhdmHFpSB2aWRlbyBwb21vY291IMS+dWJvdm/Evm7DqWhvIHBvxI10dSB2w71zdHVwbsO9Y2ggIgotI34gInBydmtvdi4gTW/Fvm5vc8WlYW1pIHPDuiBuYXByw61rbGFkIHh2aW1hZ2VzaW5rLCB4aW1hZ2VzaW5rLCBzZGx2aWRlb3NpbmsgYSAiCi0jfiAiYWFzaW5rLiBWaWRlb3NpbmsgbcO0xb5lIGJ5xaUgxI1pYXN0b8SNbmUgcsO6cm91LCBuaWVsZW4gamVkaW7DvW0gcHJ2a29tLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHB1dCB2aXN1YWxpemF0aW9uIHBsdWdpbnMgaW4gYSBwaXBlbGluZSB0byB0cmFuc2Zvcm0gYXVkaW8gIgotI34gInN0cmVhbSBpbiB2aWRlbyBmcmFtZXMuIERlZmF1bHQgaXMgZ29vbSBidXQgbW9yZSB2aXN1YWxpemF0aW9uIHBsdWdpbnMgIgotI34gIndpbGwgYmUgcG9ydGVkIHNvb24uIFRoZSB2aXN1YWxpemF0aW9uIHBsdWdpbiBjYW4gYmUgYSBwYXJ0aWFsIHBpcGVsaW5lICIKLSN+ICJpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIGRva8Ohxb5lIHZzdW7DusWlIHZpenVhbGl6YcSNbsOpIHrDoXN1dm7DqSBtb2R1bHkgZG8gcsO6cnkgYSAiCi0jfiAidHJhbnNmb3Jtb3ZhxaUgenZ1a292w70gcHLDumQgw7pkYWpvdiBuYSB2aWRlb3Nuw61ta3kuIFByZWR2b2xlbsO9IGplIGdvb20sIGFsZSAiCi0jfiAixI1vc2tvcm8gYnVkZSBkb3N0dXBuw71jaCB2aWFjZXJvIHZpenVhbGl6YcSNbsO9Y2ggesOhc3V2bsO9Y2ggbW9kdWxvdi4gIgotI34gIlZpenVhbGl6YcSNbsO9IHrDoXN1dm7DvSBtb2R1bCBtw7TFvmUgYnnFpSDEjWlhc3RvxI1uZSByw7pyb3UsIG5pZWxlbiBqZWRpbsO9bSAiCi0jfiAicHJ2a29tLiIKLQotI34gbXNnaWQgIiIKLSN+ICJHU3RyZWFtZXIgY2FuIHJlY29yZCBhdWRpbyB1c2luZyBhbnkgbnVtYmVyIG9mIGlucHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSBvc3NzcmMsIGVzZHNyYyBhbmQgYWxzYXNyYy4gVGhlIGF1ZGlvIHNvdXJjZSBjYW4gYmUgIgotI34gImEgcGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIGRva8Ohxb5lIG5haHLDoXZhxaUgenZ1ayBwb21vY291IMS+dWJvdm/Evm7DqWhvIHBvxI10dSB2c3R1cG7DvWNoICIKLSN+ICJwcnZrb3YuIE1vxb5ub3PFpWFtaSBzw7ogbmFwcsOta2xhZCBvc3NzcmMsIGVzZHNyYywgYWxzYXNyYy4gWnZ1a292w70gemRyb2ogIgotI34gIm3DtMW+ZSBiecWlIMSNaWFzdG/EjW5lIHLDunJvdSwgbmllbGVuIGplZGluw71tIHBydmtvbS4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiR1N0cmVhbWVyIGNhbiByZWNvcmQgdmlkZW8gZnJvbSBhbnkgbnVtYmVyIG9mIGlucHV0IGVsZW1lbnRzLiBTb21lICIKLSN+ICJwb3NzaWJsZSBjaG9pY2VzIGFyZSB2NGxzcmMgYW5kIHZpZGVvdGVzdHNyYy4gVGhlIHZpZGVvIHNvdXJjZSBjYW4gYmUgYSAiCi0jfiAicGFydGlhbCBwaXBlbGluZSBpbnN0ZWFkIG9mIGp1c3Qgb25lIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiR1N0cmVhbWVyIGRva8Ohxb5lIG5haHJhxaUgdmlkZW8gcG9tb2NvdSDEvnVib3ZvxL5uw6lobyBwb8SNdHUgdnN0dXBuw71jaCBwcnZrb3YuICIKLSN+ICJNb8W+bm9zxaVhbWkgc8O6IG5hcHLDrWtsYWQgdjRsc3JjIGEgdmlkZW90ZXN0c3JjLiBWaWRlbyB6ZHJvaiBtw7TFvmUgYnnFpSAiCi0jfiAixI1pYXN0b8SNbmUgcsO6cm91LCBuaWVsZW4gamVkaW7DvW0gcHJ2a29tLiIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvIHNvdXJjZSIKLSN+IG1zZ3N0ciAicHJlZHZvbGVuw70gemRyb2ogenZ1a3UgcHJlIEdTdHJlYW1lciIKLQotI34gbXNnaWQgImRlZmF1bHQgR1N0cmVhbWVyIGF1ZGlvc2luayIKLSN+IG1zZ3N0ciAicHJlZHZvbGVuw70gYXVkaW9zaW5rIHByZSBHU3RyZWFtZXIiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aWRlbyBzb3VyY2UiCi0jfiBtc2dzdHIgInByZWR2b2xlbsO9IHpkcm9qIHZpZGVhIHByZSBHU3RyZWFtZXIiCi0KLSN+IG1zZ2lkICJkZWZhdWx0IEdTdHJlYW1lciB2aWRlb3NpbmsiCi0jfiBtc2dzdHIgInByZWR2b2xlbsO9IHZpZGVvc2luayBwcmUgR1N0cmVhbWVyIgotCi0jfiBtc2dpZCAiZGVmYXVsdCBHU3RyZWFtZXIgdmlzdWFsaXphdGlvbiBwbHVnaW4iCi0jfiBtc2dzdHIgInByZWR2b2xlbsO9IHZpenVhbGl6YcSNbsO9IHrDoXN1dm7DvSBtb2R1bCBwcmUgR1N0cmVhbWVyIgotCi0jfiBtc2dpZCAiZGVzY3JpcHRpb24gZm9yIEdTdHJlYW1lciBhdWRpb3NpbmsgZm9yIEF1ZGlvL1ZpZGVvIENvbmZlcmVuY2luZyIKLSN+IG1zZ3N0ciAicG9waXMgcHJlIGF1ZGlvc2luayBwcmUgR1N0cmVhbWVyIHByZSBobGFzb3bDqS92aWRlbyBrb25mZXJlbmNpZSIKLQotI34gbXNnaWQgImRlc2NyaXB0aW9uIGZvciBHU3RyZWFtZXIgYXVkaW9zaW5rIGZvciBNdXNpYyBhbmQgTW92aWVzIgotI34gbXNnc3RyICJwb3BpcyBwcmUgYXVkaW9zaW5rIHByZSBHU3RyZWFtZXIgcHJlIGh1ZGJ1IGEgZmlsbXkiCi0KLSN+IG1zZ2lkICJkZXNjcmlwdGlvbiBmb3IgZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW9zaW5rIgotI34gbXNnc3RyICJwb3BpcyBwcmUgcHJlZHZvbGVuw70gYXVkaW9zaW5rIHByZSBHU3RyZWFtZXIiCi0KLSN+IG1zZ2lkICJkZXNjcmlwdGlvbiBmb3IgZGVmYXVsdCBHU3RyZWFtZXIgYXVkaW9zcmMiCi0jfiBtc2dzdHIgInBvcGlzIHByZSBwcmVkdm9sZW7DvSBhdWRpb3NyYyBwcmUgR1N0cmVhbWVyIgpkaWZmIC0tZ2l0IGEvcG8vc2wuZ21vIGIvcG8vc2wuZ21vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTA0YWY1Li4wMDAwMDAwCi0tLSBhL3BvL3NsLmdtbworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BvL3NsLnBvIGIvcG8vc2wucG8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMWY5OTMuLjAwMDAwMDAKLS0tIGEvcG8vc2wucG8KKysrIC9kZXYvbnVsbApAQCAtMSw0NDUgKzAsMCBAQAotIyBTbG92ZW5pYW4gdHJhbnNsYXRpb24gZm9yIGdzdC1wbHVnaW5zLWdvb2QuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFJvYmVydCBIb3J2YXQgPHJvYmlAaGlwbm9zLm5ldD4sIDIwMTAuCi0jIE1hdGVqIFVyYmFuxI1pxI0gPG1hdGVqLnVyYmFuQGdtYWlsLmNvbT4sIDIwMTAgLSAyMDExLgotIyBLbGVtZW4gS2/FoWlyIDxrbGVtZW45MTNAZ21haWwuY29tPiwgMjAxMiAtIDIwMTQuCi0jCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kLTEuMi4xXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTQtMDQtMDkgMjI6NTIrMDEwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogS2xlbWVuIEtvxaFpciA8a2xlbWVuOTEzQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBTbG92ZW5pYW4gPHRyYW5zbGF0aW9uLXRlYW0tc2xAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiBzbFxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9NDsgcGx1cmFsPShuJTEwMD09MSA/IDEgOiBuJTEwMD09MiA/IDIgOiBuJTEwMD09MyB8fCBuIgotIiUxMDA9PTQgPyAzIDogMCk7XG4iCi0KLW1zZ2lkICJKYWNrIHNlcnZlciBub3QgZm91bmQiCi1tc2dzdHIgIlN0cmXFvm5pa2EgSkFDSyBuaSBtb2dvxI1lIG5hanRpIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJOYXBha2EgbWVkIGRla29kaXJhbmplbSBKUEVHIHNsaWtlIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICInJXMnIGl6dmFqYWxjYSAnJXMnIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICJOaSBzZSBtb2dvxI1lIHBvdmV6YXRpIHMgc3RyZcW+bmlrb20iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiTmkgbmFzdGF2bGplbmVnYSBuYXNsb3ZhIFVSTC4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiU3RyZcW+bmlrIG5lIHBvZHBpcmEgaXNrYW5qYS4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIk5pIG1vZ2/EjWUgcmF6cmXFoWl0aSBpbWVuYSBzdHJlxb5uaWthLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJOaSBtb2dvxI1lIHZ6cG9zdGF2aXRpIHBvdmV6YXZlIHMgc3RyZcW+bmlrb20uIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiTmFzdGF2aXRldiB2YXJuZSBwb3ZlemF2ZSBqZSBzcG9kbGV0ZWxhLiIKLQotIywgZnV6enkKLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0iUHJpxaFsbyBqZSBkbyBvbXJlxb5uZSBuYXBha2UgYWxpIHBhIGplIHBvdmV6YXZhIG5lcHJpxI1ha292YW5vIHByZWtpbmplbmEuIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICJTdHJlxb5uaWsgamUgcG9zbGFsIHNsYWJlIHBvZGF0a2UuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICJOYXBha2EgdmhvZG5lZ2EgenZva2EsIEFWSSBwcmV0b2sgYm8gcG9rdmFyamVuLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiRGF0b3Rla2EgbmUgdnNlYnVqZSBwcmV0b2tvdiB6YSBwcmVkdmFqYW5qZS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkRhdG90ZWthIGplIG5hcGHEjW5hLCB6YXRvIGplIG5pIG1vZ2/EjWUgcHJlZHZhamF0aS4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiUHJldG9rYSBuaSBtb2dvxI1lIHByZWR2YWphdGksIGtlciBqZSDFoWlmcmlyYW4gcyBQbGF5UmVhZHkgRFJNLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGF0b3Rla2EgamUgcG9rdmFyamVuYSwgemF0byBqZSBuaSBtb2dvxI1lIHByZWR2YWphdGkuIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICJOZXZlbGphdm5hIHZlbGlrb3N0IGF0b21hLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGF0b3Rla2EgbmkgcG9wb2xuYSwgemF0byBqZSBuaSBtb2dvxI1lIHByZWR2YWphdGkuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJWaWRlbyB6YXBpcyB2IHRlaiBkYXRvdGVraSBtb3JkYSBuZSBibyBwcmVkdmFqYW4gcHJhdmlsbm8uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIkRhdG90ZWthIHZzZWJ1amUgdmXEjSBwcmV0b2tvdi4gUHJlZHZhamFubyBibyBsZSB6YcSNZXRuaWggJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotIk5pIG1vZ2/EjWUgbmFqdGkgcG9kcHJ0ZWdhIHByZXRva2EuIE5hanZlcmpldG5lamUgamUgdHJlYmEgbmFtZXN0aXRpIHZzdGF2ZWsgIgotIkdTdHJlYW1lciBSVFNQIHJhesWhaXJpdHZlIHphIFJlYWxNZWRpYSBwcmV0b2tlLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIk5pIG1vZ2/EjWUgbmFqdGkgcG9kcHJ0ZWdhIHByZXRva2EuIE5hanZlcmpldG5lamUgamUgdHJlYmEgb21vZ2/EjWl0aSB2ZcSNICIKLSJwcm90b2tvbG92IHByZW5vc2EsIG96aXJvbWEgbWFuamthIHVzdHJlemVuIHZzdGF2ZWsgR1N0cmVhbWVyIFJUU1AgIgotInJhesWhaXJpdHZlLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSJOaSBtb2dvxI1lIG9kcHJldGkgenZvxI1uZSBuYXByYXZlIHphIHByZWR2YWphbmplLiBOYXByYXZvIHVwb3JhYmxqYSBkcnVnICIKLSJwcm9ncmFtLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iTmkgbW9nb8SNZSBvZHByZXRpIHp2b8SNbmUgbmFwcmF2ZSB6YSBwcmVkdmFqYW5qZS4gTmkgdXN0cmV6bmloIGRvdm9samVuaiB6YSAiCi0ib2RwaXJhbmplIG5hcHJhdmUuIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIk5pIG1vZ2/EjWUgb2RwcmV0aSB6dm/EjW5lIG5hcHJhdmUgemEgcHJlZHZhamFuamUuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotIk5pIG1vZ2/EjWUgb2RwcmV0aSB6dm/EjW5lIG5hcHJhdmUgemEgcHJlZHZhamFuamUuIE9wZW4gU291bmQgU3lzdGVtIG5pIHBvZHBydC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiUHJlZHZhamFuZSBzIHRvIHp2b8SNbm8gbmFwcmF2byBuaSBwb2RwcnRvLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiTWVkIHByZWR2YWphbmplbSB6dm9rYSBqZSBwcmnFoWxvIGRvIG5hcGFrZS4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIlNuZW1hbmplIHMgdG8genZvxI1ubyBuYXByYXZvIG5pIHBvZHBydG8uIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiTmFwYWthIG1lZCBzaHJhbmpldmFuamVtIHByZWtvIHp2b8SNbmUgbmFwcmF2ZSIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotIlp2b8SNbmUgbmFwcmF2ZSBuaSBtb2dvxI1lIG9kcHJldGkgemEgc25lbWFuamUuIE5pIHVzdHJlem5paCBkb3ZvbGplbmogemEgIgotIm9kcGlyYW5qZSBuYXByYXZlLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiWnZvxI1uZSBuYXByYXZlIG5pIG1vZ2/EjWUgb2RwcmV0aSB6YSBzbmVtYW5qZS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICJWaXIgc25lbWFuamEiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkFuYWxvZ25pIHZob2QiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAiTm90cmFuamkgQ0QiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAiVmhvZCBTUERJRiIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICJWaG9kIEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIlZob2QgQVVYIDIiCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiUG92cmF0bmEgemFua2Ega29kZWthIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJQb3ZyYXRuYSB6YW5rYSBTdW5WVFMiCi0KLW1zZ2lkICJWb2x1bWUiCi1tc2dzdHIgIkdsYXNub3N0IgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiT2phxI1pdGV2IgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiWmFzbG9uIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiVmdyYWplbmkgenZvxI1uaWsiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIlNsdcWhYWxrZSIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJBbmFsb2duaSBpemhvZCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiSXpob2QgU1BESUYiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIkl6aG9kIEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICJJemhvZCBBVVggMiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJOYXBha2EgbWVkIGJyYW5qZW0gJWQgYmFqdG92IGl6IG5hcHJhdmUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSJNZWQgxaF0ZXZpbMSNZW5qZW0gb2JsaWsgdmlkZWEsIGtpIGppaCBwb2RwaXJhIG5hcHJhdmEgXCIlc1wiLCBqZSBwcmnFoWxvIGRvICIKLSJuYXBha2UuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJOaSBtb2dvxI1lIHByZXNsaWthdGkgbWVkcG9tbmlsbmlrYSBuYXByYXZlICclcyciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIkdvbmlsbmlrIG5hcHJhdmUgXCIlc1wiIG5lIHBvZHBpcmEgbm9iZW5lZ2EgbmHEjWluYSBJL08gJWQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiR29uaWxuaWsgbmFwcmF2ZSBcIiVzXCIgbmUgcG9kcGlyYSBub2JlbmVnYSB6bmFuZWdhIG5hxI1pbmEgSS9PLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJOYXByYXZhIFwiJXNcIiBqZSB6YXBvc2xlbmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJOYXByYXZhIFwiJXNcIiBuZSBwb2RwaXJhIHphamVtYW5qYSB2IGxvxI1saml2b3N0aSAlZHglZC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIk5hcHJhdmEgXCIlc1wiIG5lIHBvZHBpcmEgemFqZW1hbmphIHYgaXpicmFuaSBvYmxpa2kuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJOYXByYXZhIFwiJXNcIiBuZSBwb2RwaXJhIHphamVtYW5qYSB2aWRlYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJOaSBtb2dvxI1lIHByaWRvYml0aSBwYXJhbWV0cm92IG5hIG5hcHJhdmkgJyVzJy4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIk5hcHJhdmkgbmkgbW9nb8SNZSBkb2xvxI1pdGkgbm92aWggbmFzdGF2aXRldiBoaXRyb3N0aSBzbGnEjWljLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICJOYXByYXZpIG5pIG1vZ2/EjWUgZG9sb8SNaXRpIG5vdmloIG5hc3Rhdml0ZXYgaGl0cm9zdGkgc2xpxI1pYy4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIkdvbmlsbmlrIG5hcHJhdmUgXCIlc1wiIG5lIHBvZHBpcmEgbm9iZW5lZ2EgbmHEjWluYSBJL08gJWQuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIkdvbmlsbmlrIG5hcHJhdmUgXCIlc1wiIG5lIHBvZHBpcmEgbm9iZW5lZ2EgbmHEjWluYSBJL08gJWQuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJOYXByYXZhIG5lIG1vcmUgdXN0dmFyaXRpIHphbG9nZSBtZWRwb21uaWxuaWthLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIk5hcHJhdmEgbmUgbW9yZSB1c3R2YXJpdGkgemFsb2dlIG1lZHBvbW5pbG5pa2EuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTWVkIHByaWRvYml2YW5qZW0gbmFzdGF2aXRldiB1Z2xhxaFldmFsbmlrYSAlZCBuYSBuYXByYXZpIFwiJXNcIiBqZSBwcmnFoWxvIGRvICIKLSJuYXBha2UuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk1lZCBwcmlkb2JpdmFuamVtIGxhc3Rub3N0aSBuYXByYXZlIFwiJXNcIiBqZSBwcmnFoWxvIGRvIG5hcGFrZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJOYXByYXZhIFwiJXNcIiBuaSB1Z2xhxaFldmFsbmlrLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIk1lZCBwcmlkb2JpdmFuamVtIHZob2RhIG5hIG5hcHJhdmkgXCIlc1wiIGplIHByacWhbG8gZG8gbmFwYWtlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIk5hcGFrYSBtZWQgZG9sb8SNYW5qZW0gdmhvZGEgJWQgbmFwcmF2ZSAlcy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJNZWQgbmFzdGF2bGphbmplbSBzdGFuamEgZ2xhc25vc3RpIG5hIG5hcHJhdmkgXCIlc1wiIGplIHByacWhbG8gZG8gbmFwYWtlLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZWQgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiR29uaWxuaWsgbmFwcmF2ZSBcIiVzXCIgbmUgcG9kcGlyYSBub2JlbmVnYSBuYcSNaW5hIEkvTyAlZC4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJOYXByYXZpIG5pIG1vZ2/EjWUgZG9sb8SNaXRpIG5vdmloIG5hc3Rhdml0ZXYgaGl0cm9zdGkgc2xpxI1pYy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJOYXByYXZpIG5pIG1vZ2/EjWUgZG9sb8SNaXRpIG5vdmloIG5hc3Rhdml0ZXYgaGl0cm9zdGkgc2xpxI1pYy4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiTmFwcmF2aSBuaSBtb2dvxI1lIGRvbG/EjWl0aSBub3ZpaCBuYXN0YXZpdGV2IGhpdHJvc3RpIHNsacSNaWMuIgotCi0jLCBmdXp6eQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJOYXBha2EgbWVkIGRla29kaXJhbmplbSBKUEVHIHNsaWtlIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iTmFwYWthIG1lZCBwcmlkb2JpdmFuamVtIHptb8W+bm9zdGkgbmFwcmF2ZSAnJXMnOiBuaSBwcmF2ZWdhIGdvbmlsbmlrYSB2NGwyLiAiCi0iUHJldmVyaXRlIG5hbWVzdGl0ZXYuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiTmFwYWthIG1lZCBwcmVnbGVkb3ZhbmplbSBhdHJpYnV0b3YgcG9penZlZGJlIHZob2RhICVkIG5hcHJhdmUgJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmFwYWthIG1lZCBwcmlkb2JpdmFuamVtIG5hc3Rhdml0ZXYgdWdsYcWhZXZhbG5pa2EgJWQgbmEgbmFwcmF2aSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5hcGFrYSBtZWQgcG9penZlZG92YW5qZW0gdXJhdm5hbm9zdGkgbmFwcmF2ZSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmFwYWthIG1lZCBwcmlkb2JpdmFuamVtIGF0cmlidXRvdiBuYWR6b3JhIG5hcHJhdmUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmFwcmF2ZSBcIiVzXCIgbmkgbW9nb8SNZSBkb2xvxI1pdGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIlRvIG5pIG5hcHJhdmEgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5pIG1vZ2/EjWUgb2RwcmV0aSBuYXByYXZlICclcycgemEgYnJhbmplIGluIHBpc2FuamUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiTmFwcmF2YSAnJXMnIG5pIG5hcHJhdmEgemEgemFqZW1hbmplLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiTmFwcmF2YSAnJXMnIG5pIGl6aG9kbmEgbmFwcmF2YS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICJOYXByYXZhICclcycgbmkgaXpob2RuYSBuYXByYXZhLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIk5pIG1vZ2/EjWUgb2RwcmV0aSBuYXByYXZlICclcycgemEgYnJhbmplIGluIHBpc2FuamUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJNZWQgbmFzdGF2bGphbmplbSBuYXByYXZlIFwiJXNcIiBqZSBwcmnFoWxvIGRvIG5hcGFrZS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJOYXBha2EgbWVkIHByaWRvYml2YW5qZW0gZnJla3ZlbmNlIHVnbGHFoWV2YWxuaWthIG5hcHJhdmUgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIk5hcGFrYSBtZWQgbmFzdGF2bGphbmplbSBmcmVrdmVuY2UgdWdsYcWhZXZhbG5pa2EgbmFwcmF2ZSAnJXMnIG5hICVsdSBIei4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5hcGFrYSBtZWQgcHJpZG9iaXZhbmplbSBtb8SNaSBzaWduYWxhIHphIG5hcHJhdm8gJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIk5hcGFrYSBtZWQgcHJpZG9iaXZhbmplbSB2cmVkbm9zdGkgJWQgbmEgbmFwcmF2aSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTmFwYWthIG1lZCBkb2xvxI1hbmplbSB2cmVkbm9zdGkgJWQgemEgJWQgbmEgbmFwcmF2aSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIk5hcGFrYSBtZWQgcHJpZG9iaXZhbmplbSB2aG9kbmVnYSBzaWduYWxhIG5hcHJhdmUgJyVzJy4gTW9yZGEgamUgcmFkaWpza2EgIgotIm5hcHJhdmEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJOYXBha2EgbWVkIHByaWRvYml2YW5qZW0gb2R2b2RuZWdhIHNpZ25hbGEgbmFwcmF2ZSAnJXMnLiBNb3JkYSBqZSByYWRpanNrYSAiCi0ibmFwcmF2YS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiTmFwYWthIG1lZCBkb2xvxI1hbmplbSBvZHZvZGEgJWQgbmFwcmF2ZSAlcy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICJTcHJlbWluamFuamUgbG/EjWxqaXZvc3RpIG1lZCBkZWxvdmFuamVtIMWhZSBuaSBwb2RwcnRvLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiSXp2YWphbmplIG9wcmF2aWwgYnJleiB1cmUgbmkgbW9nb8SNZSIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAiTm90cmFuamEgbmFwYWthIHByZXRva2EgcG9kYXRrb3YuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiTm90cmFuamEgbmFwYWthIHByZXRva2EgcG9kYXRrb3YuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJOYXByYXZhIFwiJXNcIiBuZSBwb2RwaXJhIHphamVtYW5qYSB2aWRlYS4iCmRpZmYgLS1naXQgYS9wby9zcS5nbW8gYi9wby9zcS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZDQ1MDQuLjAwMDAwMDAKLS0tIGEvcG8vc3EuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc3EucG8gYi9wby9zcS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM1NzYzZC4uMDAwMDAwMAotLS0gYS9wby9zcS5wbworKysgL2Rldi9udWxsCkBAIC0xLDYzOCArMCwwIEBACi0jIFDDq3JrdGhpbWkgaSBtZXNhemhldmUgdMOrIGdzdC1wbHVnaW5zIG7DqyBzaHFpcC4KLSMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBMYXVyZW50IERoaW1hIDxsYXVyZW50aUBhbGJsaW51eC5uZXQ+LCAyMDA0LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMgMC44LjNcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwNC0wOC0wNyAyMDoyOSswMjAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBMYXVyZW50IERoaW1hIDxsYXVyZW50aUBhbGJsaW51eC5uZXQ+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogQWxiYW5pYW4gPGJlZ3JhakBob3RtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZTogc3FcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWJ5bGxqYSBlIGRpc3Bveml0aXZpdCB0w6sga29udHJvbGxpdCBcIiVzXCIuIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiRGlzcG96aXRpdmkganVhaiBPU1MgbXVuZCB0w6sgbW9zIHByb3ZvaGV0IGtvcnJla3TDq3Npc2h0IgotCi0jLCBmdXp6eQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgZGlzcG96aXRpdml0IHTDqyBrb250cm9sbGl0IFwiJXNcIi4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWJ5bGxqYSBlIGRpc3Bveml0aXZpdCB0w6sga29udHJvbGxpdCBcIiVzXCIuIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIklucHV0IGF1ZGlvIGkgZ2FidWFyIG9zZSBtdW5nb24sIHN0cmVhbSBBVkkgbXVuZCB0w6sgamV0w6sgaSBkw6ttdHVhci4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBkaXNwb3ppdGl2aXQgdMOrIHrDq3JpdCBcIiVzXCIgcMOrciBzaGtyaW0uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkkgcGFtdW5kdXIgaGFwamEgZSBkaXNwb3ppdGl2aXQgQ0QgcMOrciBsZXhpbS4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAiRGlzcG96aXRpdmkganVhaiBPU1MgbXVuZCB0w6sgbW9zIHByb3ZvaGV0IGtvcnJla3TDq3Npc2h0IgotCi0jLCBmdXp6eQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIlJlZ2ppc3RyaW1pIgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAiTWlrcm9mb25pIgotCi0jLCBmdXp6eQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmphLWh5cmplIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9sdW1pIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiRWtyYW5pIgotCi0jLCBmdXp6eQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIlrDqyBmb2zDq3MiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyBuZ2EgZGlzcG96aXRpdmkgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEgZSBidWZmZXJzIG5nYSBkaXNwb3ppdGl2aSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIkRpc3Bveml0aXZpIFwiJXNcIiBudWsgw6tzaHTDqyBuasOrIGRpc3Bveml0aXYgbWFycmplLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIkRpc3Bveml0aXZpIFwiJXNcIiBudWsgw6tzaHTDqyBuasOrIGRpc3Bveml0aXYgbWFycmplLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIkRpc3Bveml0aXZpIFwiJXNcIiBudWsgw6tzaHTDqyBuasOrIGRpc3Bveml0aXYgbWFycmplLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiRGlzcG96aXRpdmkgXCIlc1wiIG51ayDDq3NodMOrIG5qw6sgZGlzcG96aXRpdiBtYXJyamUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyBuZ2EgZGlzcG96aXRpdmkgXCIlc1wiLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyB0w6sgbWphZnR1ZXNow6ttIG5nYSBkaXNwb3ppdGl2aSBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJFIHBhbXVuZHVyIG1hcnJqYSBlIGJ1ZmZlcnMgbmdhIGRpc3Bveml0aXZpIFwiJXNcIi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiRGlzcG96aXRpdmkgXCIlc1wiIG51ayDDq3NodMOrIG5qw6sgZGlzcG96aXRpdiBtYXJyamUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWJ5bGxqYSBlIGRpc3Bveml0aXZpdCBhdWRpbyBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWJ5bGxqYSBlIGRpc3Bveml0aXZpdCBhdWRpbyBcIiVzXCIuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYXJyamEgZSBidWZmZXJzIG5nYSBkaXNwb3ppdGl2aSBcIiVzXCIuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyB0w6sgbWphZnR1ZXNow6ttIG5nYSBkaXNwb3ppdGl2aSBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkkgcGFtdW5kdXIgc2hrcmltaSBuw6sgZGlzcG96aXRpdmluIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBkaXNwb3ppdGl2aXQgXCIlc1wiIHDDq3IgbGV4aW0gZGhlIHNoa3JpbS4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiRGlzcG96aXRpdmkgXCIlc1wiIG51ayDDq3NodMOrIG5qw6sgZGlzcG96aXRpdiBtYXJyamUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiRGlzcG96aXRpdmkgXCIlc1wiIG51ayDDq3NodMOrIG5qw6sgZGlzcG96aXRpdiBtYXJyamUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiRGlzcG96aXRpdmkgXCIlc1wiIG51ayDDq3NodMOrIG5qw6sgZGlzcG96aXRpdiBtYXJyamUuIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBoYXBqYSBlIGRpc3Bveml0aXZpdCBcIiVzXCIgcMOrciBsZXhpbSBkaGUgc2hrcmltLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyBuZ2EgZGlzcG96aXRpdmkgXCIlc1wiLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJFIHBhbXVuZHVyIG1hcnJqYSBlIGJ1ZmZlcnMgdMOrIG1qYWZ0dWVzaMOrbSBuZ2EgZGlzcG96aXRpdmkgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgZGlzcG96aXRpdml0IHTDqyBrb250cm9sbGl0IFwiJXNcIi4iCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJFIHBhbXVuZHVyIG1ieWxsamEgZSBkaXNwb3ppdGl2aXQgdMOrIGtvbnRyb2xsaXQgXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotCi0jLCBmdXp6eSwgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICJFIHBhbXVuZHVyIG1hcnJqYSBlIGJ1ZmZlcnMgdMOrIG1qYWZ0dWVzaMOrbSBuZ2EgZGlzcG96aXRpdmkgXCIlc1wiLiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgZGlzcG96aXRpdml0IGF1ZGlvIFwiJXNcIi4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHZpZGVvIGNhcHR1cmUiCi0jfiBtc2dzdHIgIkRpc3Bveml0aXZpIFwiJXNcIiBudWsgw6tzaHTDqyBuasOrIGRpc3Bveml0aXYgbWFycmplLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyB0w6sgbWphZnR1ZXNow6ttIG5nYSBkaXNwb3ppdGl2aSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiQmFzIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJUcmVibGUiCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAiU2ludGV0aXp1ZXNpIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJaw6sgZm9sw6tzIgotCi0jfiBtc2dpZCAiTGluZS1pbiIKLSN+IG1zZ3N0ciAiTGluamEtaHlyamUiCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiS29udHJvbGxpIGkgdm9sdW1pdCIKLQotI34gbXNnaWQgIlBDTS0yIgotI34gbXNnc3RyICJQQ00tMiIKLQotI34gbXNnaWQgIlJlY29yZCIKLSN+IG1zZ3N0ciAiUmVnamlzdHJpbWkiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJJbi1nYWluIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIk91dC1nYWluIgotCi0jfiBtc2dpZCAiTGluZS0xIgotI34gbXNnc3RyICJMaW5qYS0xIgotCi0jfiBtc2dpZCAiTGluZS0yIgotI34gbXNnc3RyICJMaW5qYS0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJMaW5qYS0zIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0xIgotI34gbXNnc3RyICJEaXhoaXRhbGUtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiRGl4aGl0YWxlLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIkRpeGhpdGFsZS0zIgotCi0jfiBtc2dpZCAiUGhvbmUtaW4iCi0jfiBtc2dzdHIgIlBob25lLWh5cmphIgotCi0jfiBtc2dpZCAiUGhvbmUtb3V0IgotI34gbXNnc3RyICJQaG9uZS1kYWxqYSIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICJWaWRlbyIKLQotI34gbXNnaWQgIlJhZGlvIgotI34gbXNnc3RyICJSYWRpbyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgZGlzcG96aXRpdml0IHTDqyB6w6tyaXQgXCIlc1wiIHDDq3Igc2hrcmltLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICJSZWdqaXN0cmltaSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICJWaWRlbyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAiVmlkZW8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIlJlZ2ppc3RyaW1pIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJPdXQtZ2FpbiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJNaWtyb2ZvbmkiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIkVrcmFuaSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uaSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAiWsOrIGZvbMOrcyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25pIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb25pIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWlrcm9mb25pIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJEaXhoaXRhbGUtMSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJEaXhoaXRhbGUtMSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICJNaWtyb2ZvbmkiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkUgcGFtdW5kdXIgbWFycmphIGUgYnVmZmVycyBuZ2EgZGlzcG96aXRpdmkgXCIlc1wiLiIKLQotI34gbXNnaWQgIiIKLSN+ICJObyB1c2FibGUgY29sb3JzcGFjZSBlbGVtZW50IGNvdWxkIGJlIGZvdW5kLlxuIgotI34gIlBsZWFzZSBpbnN0YWxsIG9uZSBhbmQgcmVzdGFydC4iCi0jfiBtc2dzdHIgIiIKLSN+ICJOdWsgYXJyaW4gdMOrIGdqZWhldCBhc25qw6sgZWxlbWVudCBuZ2p5cmEgZSBoYXDDq3NpcsOrcy5cbiIKLSN+ICJKdSBsdXRlbSBpbnN0YWxvbmkgbmrDqyBkaGUgcmluaXNuaS4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiVGhlICVzIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLiBUaGlzIGVsZW1lbnQgaXMgZXNzZW50aWFsIGZvciAiCi0jfiAicGxheWJhY2suIFBsZWFzZSBpbnN0YWxsIHRoZSByaWdodCBwbHVnLWluIGFuZCB2ZXJpZnkgdGhhdCBpdCB3b3JrcyBieSAiCi0jfiAicnVubmluZyAnZ3N0LWluc3BlY3QgJXMnIgotI34gbXNnc3RyICIiCi0jfiAiRSBwYW11bmR1ciBnamV0amEgZSBlbGVtZW50aXQgJXMuIEt5IGVsZW1lbnQgw6tzaHTDqyB0aGVsYsOrc29yIHDDq3IgIgotI34gInBsYXliYWNrLiBKdSBsdXRlbSBpbnN0YWxvbmkgcGx1Zy1pbiBlIGR1aHVyIGRoZSBrb250cm9sbG8gZnVua3Npb25pbWluICIKLSN+ICJkdWtlIGVremVrdXR1YXIgJ2dzdC1pbnNwZWN0ICVzJyIKLQotI34gbXNnaWQgIkRldmljZSBpcyBvcGVuLiIKLSN+IG1zZ3N0ciAiRGlzcG96aXRpdmkgw6tzaHTDqyBpIGhhcHVyLiIKLQotI34gbXNnaWQgIkRldmljZSBpcyBub3Qgb3Blbi4iCi0jfiBtc2dzdHIgIkRpc3Bveml0aXZpIG51ayDDq3NodMOrIGhhcHVyLiIKLQotI34gbXNnaWQgIk5vIGRldmljZSBzcGVjaWZpZWQuIgotI34gbXNnc3RyICJOdWsgw6tzaHTDqyBww6tyY2FrdHVhciBhc25qw6sgZGlzcG96aXRpdi4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgY2xvc2UgdmZzIGZpbGUgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgZmlsZSB2ZnMgXCIlc1wiLiIKLQotI34gbXNnaWQgIk5vIGZpbGVuYW1lIGdpdmVuIgotI34gbXNnc3RyICJOdWsgw6tzaHTDqyBkaMOrbsOrIGFzbmrDqyBlbcOrciBmaWxlIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gdmZzIGZpbGUgXCIlc1wiIGZvciB3cml0aW5nOiAlcy4iCi0jfiBtc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBmaWxlIHZmcyBcIiVzXCIgcMOrciBzaGtyaW06ICVzLiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJObyBmaWxlbmFtZSBnaXZlbi4iCi0jfiBtc2dzdHIgIk51ayDDq3NodMOrIGRow6tuw6sgYXNuasOrIGVtw6tyIGZpbGUiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiB2ZnMgZmlsZSBcIiVzXCIgZm9yIHJlYWRpbmcuIgotI34gbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgZmlsZSB2ZnMgXCIlc1wiIHDDq3IgbGV4aW0uIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3IgcmVhZGluZy4iCi0jfiBtc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBkaXNwb3ppdGl2aXQgXCIlc1wiIHDDq3IgbGV4aW0uIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlIFwiJXNcIiBmb3Igd3JpdGluZy4iCi0jfiBtc2dzdHIgIkUgcGFtdW5kdXIgaGFwamEgZSBkaXNwb3ppdGl2aXQgXCIlc1wiIHDDq3Igc2hrcmltLiIKLQotI34gbXNnaWQgIkRldmljZSBcIiVzXCIgZG9lcyBub3QgZXhpc3QuIgotI34gbXNnc3RyICJEaXNwb3ppdGl2aSBcIiVzXCIgbnVrIGVremlzdG9uLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBhY2Nlc3MgZGV2aWNlIFwiJXNcIiwgY2hlY2sgaXRzIHBlcm1pc3Npb25zLiIKLSN+IG1zZ3N0ciAiIgotI34gIkUgcGFtdW5kdXIgZnV0amEgbsOrIGRpc3Bveml0aXZpbiBcIiVzXCIsIGtvbnRyb2xsbyB0w6sgZHJlanRhdCBlIHRpai4iCi0KLSN+IG1zZ2lkICJPU1MgZGV2aWNlIFwiJXNcIiBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHByb2dyYW0uIgotI34gbXNnc3RyICIiCi0jfiAiRGlzcG96aXRpdmkgT1NTIFwiJXNcIiDDq3NodMOrIGR1a2UgdSBww6tyZG9ydXIgbmdhIG5qw6sgdGpldMOrciBwcm9ncmFtLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBjbG9zZSB2aWRlbyBkZXZpY2UgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiRSBwYW11bmR1ciBtYnlsbGphIGUgZGlzcG96aXRpdml0IHZpZGVvIFwiJXNcIi4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiB2aWRlbyBkZXZpY2UgXCIlc1wiIGZvciB3cml0aW5nLiIKLSN+IG1zZ3N0ciAiRSBwYW11bmR1ciBoYXBqYSBlIGRpc3Bveml0aXZpdCB2aWRlbyBcIiVzXCIgcMOrciBzaGtyaW0uIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IHNldCBhdWRpbyBkZXZpY2UgXCIlc1wiIHRvICVkIEh6LiIKLSN+IG1zZ3N0ciAiSSBwYW11bmR1ciBycmVndWxsaW1pIGkgZGlzcG96aXRpdml0IGF1ZGlvIFwiJXNcIiBuw6sgJWQgSHouIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGNvbmZpZ3VyZSBhdWRpbyBkZXZpY2UgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiSSBwYW11bmR1ciBrb25maWd1cmltaSBpIGRpc3Bveml0aXZpdCB0w6sgesOrcml0IFwiJXNcIi4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBjb250cm9sIGRldmljZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotI34gbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgZGlzcG96aXRpdml0IHTDqyBrb250cm9sbGl0IFwiJXNcIiBww6tyIHNoa3JpbS4iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIuIgotI34gbXNnc3RyICJJIHBhbXVuZHVyIHNoa3JpbWkgdGVrIGZpbGUgXCIlc1wiLiIKLQotI34gbXNnaWQgIk5vIGZpbGVuYW1lIHNwZWNpZmllZC4iCi0jfiBtc2dzdHIgIk51ayDDq3NodMOrIHDDq3JjYWt0dWFyIGVtcmkgaSBmaWxlLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciByZWFkaW5nLiIKLSN+IG1zZ3N0ciAiRSBwYW11bmR1ciBoYXBqYSBlIGZpbGUgXCIlc1wiIHDDq3IgbGV4aW0uIgotCi0jfiBtc2dpZCAiRXJyb3IgY2xvc2luZyBmaWxlIFwiJXNcIi4iCi0jfiBtc2dzdHIgIkdhYmltIGdqYXTDqyBtYnlsbGplcyBzw6sgZmlsZSBcIiVzXCIuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRpbmcuIgotI34gbXNnc3RyICJFIHBhbXVuZHVyIGhhcGphIGUgZmlsZSBcIiVzXCIgbsOrIHNoa3JpbS4iCmRpZmYgLS1naXQgYS9wby9zci5nbW8gYi9wby9zci5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzBjY2IuLjAwMDAwMDAKLS0tIGEvcG8vc3IuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc3IucG8gYi9wby9zci5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYxNWJlMS4uMDAwMDAwMAotLS0gYS9wby9zci5wbworKysgL2Rldi9udWxsCkBAIC0xLDQzNCArMCwwIEBACi0jIFNlcmJpYW4gdHJhbnNsYXRpb24gb2YgZ3N0LXBsdWdpbnMKLSMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBEYW5pbG8gU2VnYW4gPGRzZWdhbkBnbXgubmV0PiwgMjAwNC4KLSMg0JzQuNGA0L7RgdC70LDQsiDQndC40LrQvtC70LjRmyA8bWlyb3NsYXZuaWtvbGljQHJvY2tldG1haWwuY29tPiwgMjAxMeKAlDIwMTYuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kLTEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDMtMDUgMDk6NTIrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjog0JzQuNGA0L7RgdC70LDQsiDQndC40LrQvtC70LjRmyA8bWlyb3NsYXZuaWtvbGljQHJvY2tldG1haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IFNlcmJpYW4gPChub3RoaW5nKT5cbiIKLSJMYW5ndWFnZTogc3JcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTM7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuIgotIiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTtcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDQv9GA0L7QvdCw0YjQsNC+INGB0LXRgNCy0LXRgCDRg9GC0LjRh9C90LjRhtC1IgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC10LrQvtC00LjRgNCw0Lwg0IjQn9CV0JMg0YHQu9C40LrRgyIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAi4oCeJXPigJwg0LjQt9Cy0L7QtNC4IOKAniVz4oCcIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YHQtSDQv9C+0LLQtdC20LXQvCDRgdCwINGB0LXRgNCy0LXRgNC+0LwiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAi0J3QuNGY0LUg0L/QvtC00LXRiNC10L3QsCDQsNC00YDQtdGB0LAuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgItCh0LXRgNCy0LXRgCDQvdC1INC/0L7QtNGA0LbQsNCy0LAg0L/QvtC30LjRhtC40L7QvdC40YDQsNGa0LUuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YDQtdGI0LjQvCDQvdCw0LfQuNCyINGB0LXRgNCy0LXRgNCwLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICLQndC1INC80L7Qs9GDINC00LAg0YPRgdC/0L7RgdGC0LDQstC40Lwg0LLQtdC30YMg0YHQsCDRgdC10YDQstC10YDQvtC8LiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgItCf0L7QtNC10YjQsNCy0LDRmtC1INCx0LXQt9Cx0LXQtNC90LUg0LLQtdC30LUg0L3QuNGY0LUg0YPRgdC/0LXQu9C+LiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgItCU0L7RiNC70L4g0ZjQtSDQtNC+INCz0YDQtdGI0LrQtSDQvdCwINC80YDQtdC20LgsINC40LvQuCDRmNC1INGB0LXRgNCy0LXRgCDQvdC10L7Rh9C10LrQuNCy0LDQvdC+INC30LDRgtCy0L7RgNC40L4g0LLQtdC30YMuIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICLQodC10YDQstC10YAg0ZjQtSDQv9C+0YHQu9Cw0L4g0LvQvtGI0LUg0L/QvtC00LDRgtC60LUuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICLQo9C70LDQt9C90L7QsyDQt9Cy0YPQutCwINC90LXQvNCwINC40LvQuCDRmNC1INC90LXQuNGB0L/RgNCw0LLQsNC9LCDQkNCS0Jgg0YLQvtC6INGb0LUg0LHQuNGC0Lgg0L7RiNGC0LXRm9C10L0uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICLQntCy0LAg0LTQsNGC0L7RgtC10LrQsCDQvdC1INGB0LDQtNGA0LbQuCDRgtC+0LrQvtCy0LUg0LfQsCDQv9GD0YjRgtCw0ZrQtS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgItCe0LLQsCDQtNCw0YLQvtGC0LXQutCwINGY0LUg0L3QtdC40YHQv9GA0LDQstC90LAg0Lgg0L3QtSDQvNC+0LbQtSDQsdC40YLQuCDQv9GD0YjRgtC10L3QsC4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotItCd0LUg0LzQvtCz0YMg0LTQsCDQv9GD0YHRgtC40Lwg0YLQvtC6INC30LDRgtC+INGI0YLQviDRmNC1INGI0LjRhNGA0L7QstCw0L0g0KPQlNCfLdC+0Lwg4oCe0KHQv9GA0LXQvNCw0L0g0LfQsCDQv9GD0YjRgtCw0ZrQteKAnC4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgItCe0LLQsCDQtNCw0YLQvtGC0LXQutCwINGY0LUg0L7RiNGC0LXRm9C10L3QsCDQuCDQvdC1INC80L7QttC1INCx0LjRgtC4INC/0YPRiNGC0LXQvdCwLiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAi0J3QtdC40YHQv9GA0LDQstC90LAg0LLQtdC70LjRh9C40L3QsCDQsNGC0L7QvNCwLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi0J7QstCwINC00LDRgtC+0YLQtdC60LAg0ZjQtSDQvdC10L/QvtGC0L/Rg9C90LAg0Lgg0L3QtSDQvNC+0LbQtSDQsdC40YLQuCDQv9GD0YjRgtC10L3QsC4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgItCS0LjQtNC10L4g0YMg0L7QstC+0Zgg0LTQsNGC0L7RgtC10YbQuCDQvNC+0LbQtNCwINC90LXRm9C1INCx0LjRgtC4INC/0YPRiNGC0LXQvSDQuNGB0L/RgNCw0LLQvdC+LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICLQntCy0LAg0LTQsNGC0L7RgtC10LrQsCDRgdCw0LTRgNC20Lgg0L/RgNC10LLQuNGI0LUg0YLQvtC60L7QstCwLiDQn9GD0YjRgtCw0Lwg0YHQsNC80L4g0L/RgNCy0LggJWQiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGluc3RhbGwgYSBHU3RyZWFtZXIgUlRTUCAiCi0iZXh0ZW5zaW9uIHBsdWdpbiBmb3IgUmVhbCBtZWRpYSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotItCd0LjRmNC1INC/0YDQvtC90LDRktC10L0g0L3QuNGY0LXQtNCw0L0g0L/QvtC00YDQttCw0L3QuCDRgtC+0LouINCc0L7QttC00LAg0ZvQtdGC0LUg0LzQvtGA0LDRgtC4INC00LAg0LjQvdGB0YLQsNC70LjRgNCw0YLQtSAiCi0i0L/RgNC40LrRmdGD0YfQsNC6INCg0KLQodCfINC/0YDQvtGI0LjRgNC10ZrQsCDQk9GB0YLRgNC40LzQtdGA0LAg0LfQsCDRgtC+0LrQvtCy0LUg0KHRgtCy0LDRgNC90L7QsyDQvNC10LTQuNGY0LAuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0i0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSDQvdC40ZjQtdC00LDQvSDQv9C+0LTRgNC20LDQvdC4INGC0L7Qui4g0JzQvtC20LTQsCDRm9C10YLQtSDQvNC+0YDQsNGC0Lgg0LTQsCDQvtC80L7Qs9GD0ZvQuNGC0LUg0LLQuNGI0LUgIgotItC/0YDQvtGC0L7QutC+0LvQsCDQv9GA0LXQvdC+0YHQsCDQuNC70Lgg0LzQvtC20LTQsCDQvdCwINC90LXQutC4INC00YDRg9Cz0Lgg0L3QsNGH0LjQvSDQvdC10LTQvtGB0YLQsNGY0LUg0L/RgNCw0LLQuCDQv9GA0LjQutGZ0YPRh9Cw0LogIgotItCg0KLQodCfINC/0YDQvtGI0LjRgNC10ZrQsCDQk9Ch0YLRgNC40LzQtdGA0LAuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotItCd0LUg0LzQvtCz0YMg0LTQsCDQv9C+0LrRgNC10L3QtdC8INC30LLRg9GH0L3QuCDRg9GA0LXRktCw0Zgg0YDQsNC00Lgg0L/Rg9GI0YLQsNGa0LAuINCj0YDQtdGS0LDRmCDQutC+0YDQuNGB0YLQuCDQvdC10LrQsCDQtNGA0YPQs9CwICIKLSLQsNC/0LvQuNC60LDRhtC40ZjQsC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotItCd0LUg0LzQvtCz0YMg0LTQsCDQv9C+0LrRgNC10L3QtdC8INCw0YPQtNC40L4g0YPRgNC10ZLQsNGYINGA0LDQtNC4INC/0YPRiNGC0LDRmtCwLiDQndC10LzQsNGC0LUg0L7QstC70LDRiNGb0LXRmtC1INC30LAg0L/QvtC60YDQtdGC0LDRmtC1ICIKLSLRg9GA0LXRktCw0ZjQsC4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC/0L7QutGA0LXQvdC10Lwg0LfQstGD0YfQvdC4INGD0YDQtdGS0LDRmCDRgNCw0LTQuCDQv9GD0YjRgtCw0ZrQsC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0i0J3QtSDQvNC+0LPRgyDQtNCwINC/0L7QutGA0LXQvdC10Lwg0LfQstGD0YfQvdC4INGD0YDQtdGS0LDRmCDRgNCw0LTQuCDQv9GD0YjRgtCw0ZrQsC4g0J7QstC+INC40LfQtNCw0ZrQtSDRgdC40YHRgtC10LzQsCDQvtGC0LLQvtGA0LXQvdC+0LMgIgotItC30LLRg9C60LAg0L3QuNGY0LUg0L/QvtC00YDQttCw0L3QviDQvtCy0LjQvCDQtdC70LXQvNC10L3RgtC+0LwuIgotCi1tc2dpZCAiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgItCf0YPRiNGC0LDRmtC1INC90LjRmNC1INC/0L7QtNGA0LbQsNC90L4g0L7QtCDRgdGC0YDQsNC90LUg0L7QstC+0LMg0LfQstGD0YfQvdC+0LMg0YPRgNC10ZLQsNGY0LAuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC40LvQuNC60L7QvCDQv9GD0YjRgtCw0ZrQsCDQt9Cy0YPQutCwLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi0KHQvdC40LzQsNGa0LUg0L3QuNGY0LUg0L/QvtC00YDQttCw0L3QviDQvtC0INGB0YLRgNCw0L3QtSDQvtCy0L7QsyDQt9Cy0YPRh9C90L7QsyDRg9GA0LXRktCw0ZjQsC4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC40LvQuNC60L7QvCDRgdC90LjQvNCw0ZrQsCDRgdCwINC30LLRg9GH0L3QvtCzINGD0YDQtdGS0LDRmNCwLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotItCd0LUg0LzQvtCz0YMg0LTQsCDQv9C+0LrRgNC10L3QtdC8INCw0YPQtNC40L4g0YPRgNC10ZLQsNGYINGA0LDQtNC4INGB0L3QuNC80LDRmtCwLiDQndC10LzQsNGC0LUg0L7QstC70LDRiNGb0LXRmtC1INC30LAg0L/QvtC60YDQtdGC0LDRmtC1ICIKLSLRg9GA0LXRktCw0ZjQsC4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQv9C+0LrRgNC10L3QtdC8INC30LLRg9GH0L3QuCDRg9GA0LXRktCw0Zgg0YDQsNC00Lgg0YHQvdC40LzQsNGa0LAuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgItCd0LjRgdCw0Lwg0L3QsNGI0LDQviDQutGZ0YPRh9C90Lgg0YPRgNC10ZLQsNGYINC30LLRg9C60LAiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQvtGC0LLQvtGA0LjQvCDQutGZ0YPRh9C90Lgg0YPRgNC10ZLQsNGYINC30LLRg9C60LAiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICLQmNC30LLQvtGAINGB0L3QuNC80LDRmtCwIgotCi1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAi0JzQuNC60YDQvtGE0L7QvSIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgItCb0LjQvdC40ZjRgdC60Lgg0YPQu9Cw0LciCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAi0KPQvdGD0YLRgNCw0YjRmtC4INCm0JQiCi0KLW1zZ2lkICJTUERJRiBJbiIKLW1zZ3N0ciAi0KHQn9CU0JjQpCDRg9C70LDQtyIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICLQkNCj0KUgMSDRg9C70LDQtyIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICLQkNCj0KUgMiDRg9C70LDQtyIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICLQn9C+0LLRgNCw0YLQvdCwINC/0LXRgtGZ0LAg0LrQvtC00LXQutCwIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICLQn9C+0LLRgNCw0YLQvdCwINC/0LXRgtGZ0LAg0KHQsNC90JLQotChLdCwIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICLQiNCw0YfQuNC90LAg0LfQstGD0LrQsCIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgItCf0L7RmNCw0YfQsNGa0LUiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICLQn9GA0LDRm9C10ZrQtSIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgItCj0LPRgNCw0ZLQtdC90Lgg0LfQstGD0YfQvdC40LoiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgItCh0LvRg9GI0LDQu9C40YbQtSIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICLQm9C40L3QuNGY0YHQutC4INC40LfQu9Cw0LciCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgItCh0J/QlNCY0KQg0LjQt9C70LDQtyIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAi0JDQo9ClIDEg0LjQt9C70LDQtyIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAi0JDQo9ClIDIg0LjQt9C70LDQtyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC40LvQuNC60L7QvCDRh9C40YLQsNGa0LAgJWQg0LHQsNGY0YLQvtCy0LAg0YHQsCDRg9GA0LXRktCw0ZjQsCDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGVudW1lcmF0ZSBwb3NzaWJsZSB2aWRlbyBmb3JtYXRzIGRldmljZSAnJXMnIGNhbiB3b3JrIHdpdGgiCi1tc2dzdHIgIiIKLSLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQvdGD0LzQtdGA0LjRiNC10Lwg0LzQvtCz0YPRm9C4INGD0YDQtdGS0LDRmCDQt9Cw0L/QuNGB0LAg0YHQvdC40LzQutCwIOKAniVz4oCcINGB0LAg0LrQvtGY0LjQvCDQvNC+0LbQtSDQtNCwICIKLSLRgNCw0LTQuCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgbWFwIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC80LDQv9C40YDQsNC8INC/0L7QvNC+0ZvQvdC1INC80LXQvNC+0YDQuNGY0LUg0YHQsCDRg9GA0LXRktCw0ZjQsCDigJ4lc+KAnCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAi0KPQv9GA0LDQstGZ0LDRh9C60Lgg0L/RgNC+0LPRgNCw0Lwg0YPRgNC10ZLQsNGY0LAg4oCeJXPigJwg0L3QtSDQv9C+0LTRgNC20LDQstCwINCj0Jgg0L3QsNGH0LjQvSAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgItCj0L/RgNCw0LLRmdCw0YfQutC4INC/0YDQvtCz0YDQsNC8INGD0YDQtdGS0LDRmNCwIOKAniVz4oCcINC90LUg0L/QvtC00YDQttCw0LLQsCDQvdC40ZjQtdC00LDQvSDQv9C+0LfQvdCw0YLQuCDQo9CYINC90LDRh9C40L0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgItCj0YDQtdGS0LDRmCDigJ4lc+KAnCDRmNC1INC30LDRg9C30LXRgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAi0KPRgNC10ZLQsNGYIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC90LjQvNCwINC90LAgJWR4JWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgItCj0YDQtdGS0LDRmCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQvdC40LzQsCDRgyDQvdCw0LLQtdC00LXQvdC+0Lwg0LfQsNC/0LjRgdGDIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgItCj0YDQtdGS0LDRmCDigJ4lc+KAnCDQvdC1INC/0L7QtNGA0LbQsNCy0LAg0L3QtS3QvdC10L/RgNC10LrQuNC00L3QtSDRgNCw0LLQvdC4IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINC00L7QsdCw0LLQuNC8INC/0LDRgNCw0LzQtdGC0YDQtSDQvdCwINGD0YDQtdGS0LDRmNGDIOKAniVz4oCcIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICLQktC40LTQtdC+INGD0YDQtdGS0LDRmCDQvdC1INC/0YDQuNGF0LLQsNGC0LAg0L3QvtCy0LUg0L/QvtGB0YLQsNCy0LrQtSDQv9GA0L7RgtC+0LrQsCDQutCw0LTRgNC+0LLQsC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICLQktC40LTQtdC+INGD0YDQtdGS0LDRmCDQvdC1INC+0LHQtdC30LHQtdGS0YPRmNC1INC40LfQu9Cw0LfQvdC4INC30LDQv9C40YEuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgItCS0LjQtNC10L4g0YPRgNC10ZLQsNGYINGY0LUg0LLRgNCw0YLQuNC+INC90LXQuNGB0L/RgNCw0LLQvdC1INC00LjQvNC10L3Qt9C40ZjQtS4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAi0JLQuNC00LXQviDRg9GA0LXRktCw0ZjQuCDQutC+0YDQuNGB0YLQtSDQvdC10L/QvtC00YDQttCw0L3QuCDQvNC10YLQvtC0INC/0YDQtdC/0LvQuNGC0LDRmtCwLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICLQktC40LTQtdC+INGD0YDQtdGS0LDRmNC4INC60L7RgNC40YHRgtC1INC90LXQv9C+0LTRgNC20LDQvdC4INC30LDQv9C40YEg0YHQu9C40YfQuNGG0LUuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgItCd0LjRgdCw0Lwg0YPRgdC/0LXQviDQtNCwINC/0L7QtNC10YHQuNC8INGD0L3Rg9GC0YDQsNGI0ZrQuCDRgdC80LXRiNGC0LDRmCDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0LUuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICLQktC40LTQtdC+INGD0YDQtdGS0LDRmCDQvdC1INC/0YDQtdC00LvQsNC20LUg0LLQtdC70LjRh9C40L3RgyDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0LUuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAi0J3QtdC80LAg0YHQvNC10YjRgtCw0ZjQsCDQtNC+0ZrQtdCzINGC0L7QutCwINC40Lcg0LrQvtCz0LAg0YPQstC10YHRgtC4LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0LTQvtCx0LDQstC40Lwg0L/QvtC00LXRiNCw0LLQsNGa0LAg0YLRmNGD0L3QtdGA0LAgJWQg0L3QsCDRg9GA0LXRktCw0ZjRgyDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC00L7QsdCw0LLRmdCw0ZrQsCDQvNC+0LPRg9Gb0L3QvtGB0YLQuCDQt9CwINGD0YDQtdGS0LDRmCDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLQo9GA0LXRktCw0Zgg4oCeJXPigJwg0L3QuNGY0LUg0YLRmNGD0L3QtdGALiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgItCd0LjRgdCw0Lwg0YPRgdC/0LXQviDQtNCwINC00L7QsdCw0LLQuNC8INGA0LDQtNC40L4g0YPQu9Cw0Lcg0L3QsCDRg9GA0LXRktCw0ZjRgyDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQv9C+0LTQtdGB0LjQvCDRg9C70LDQtyAlZCDQvdCwINGD0YDQtdGS0LDRmNGDICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0LjQt9C80LXQvdC40Lwg0YHRgtCw0ZrQtSDRg9GC0LjRiNCw0L3QvtGB0YLQuCDQt9CwINGD0YDQtdGS0LDRmCDigJ4lc+KAnC4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgItCd0LjRgdCw0Lwg0YPRgdC/0LXQviDQtNCwINC00L7QtNC10LvQuNC8INC30LDRgtGA0LDQttC10L3RgyDQvNC10LzQvtGA0LjRmNGDLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC+0LTQtdC70LjQvCDQt9Cw0YLRgNCw0LbQtdC90YMg0LzQtdC80L7RgNC40ZjRgy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAi0J/RgNC10YLQstCw0YDQsNGHINC90LAg0YPRgNC10ZLQsNGY0YMg4oCeJXPigJwg0L3QtdC80LAg0L/QvtC00YDQttCw0L3QuCDRg9C70LDQt9C90Lgg0LfQsNC/0LjRgSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAi0J/RgNC10YLQstCw0YDQsNGHINC90LAg0YPRgNC10ZLQsNGY0YMg4oCeJXPigJwg0L3QtdC80LAg0L/QvtC00YDQttCw0L3QuCDQuNC30LvQsNC30L3QuCDQt9Cw0L/QuNGBIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICLQmtC+0LTQtdGAINC90LAg0YPRgNC10ZLQsNGY0YMg4oCeJXPigJwg0L3QtdC80LAg0L/QvtC00YDQttCw0L3QuCDRg9C70LDQt9C90Lgg0LfQsNC/0LjRgSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgItCa0L7QtNC10YAg0L3QsCDRg9GA0LXRktCw0ZjRgyDigJ4lc+KAnCDQvdC10LzQsCDQv9C+0LTRgNC20LDQvdC4INC40LfQu9Cw0LfQvdC4INC30LDQv9C40YEiCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0L/QvtC60YDQtdC90LXQvCDQvdC40YIg0LTQtdC60L7QtNC40YDQsNGa0LAuIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQvtCx0YDQsNC00LjQvCDQutCw0LTQsNGALiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLSLQk9GA0LXRiNC60LAg0L/RgNC40LvQuNC60L7QvCDQtNC+0LHQsNCy0ZnQsNGa0LAg0LzQvtCz0YPRm9C90L7RgdGC0Lgg0LfQsCDRg9GA0LXRktCw0Zgg4oCeJXPigJw6INCd0LjRmNC1INCyNNC7MiDRg9C/0YDQsNCy0ZnQsNGH0LrQuCAiCi0i0L/RgNC+0LPRgNCw0LwuINCf0YDQvtCy0LXRgNC40YLQtSDQtNCwINC70Lgg0ZjQtSDRgtC+INCyNNC7MSDRg9C/0YDQsNCy0ZnQsNGH0LrQuCDQv9GA0L7Qs9GA0LDQvC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQv9GA0L7Qv9C40YLQsNC8INGB0LLQvtGY0YHRgtCy0LAg0YPQvdC+0YHQsCAlZCDRgyDRg9GA0LXRktCw0ZjRgyAlcyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC+0LHQsNCy0LjQvCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDRgtGY0YPQvdC10YDQsCAlZCDQvdCwINGD0YDQtdGS0LDRmNGDIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LjRgdCw0Lwg0YPRgdC/0LXQviDQtNCwINC/0YDQvtC/0LjRgtCw0Lwg0L3QvtGA0LzRgyDQvdCwINGD0YDQtdGS0LDRmNGDIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgZ2V0dGluZyBjb250cm9scyBhdHRyaWJ1dGVzIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0LTQvtCx0LDQstC40Lwg0YHQstC+0ZjRgdGC0LLQsCDQutC+0L3RgtGA0L7Qu9CwINC90LAg0YPRgNC10ZLQsNGY0YMg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNhbm5vdCBpZGVudGlmeSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDRgNCw0YHQv9C+0LfQvdCw0Lwg0YPRgNC10ZLQsNGYIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICLQntCy0L4g0L3QuNGY0LUg0YPRgNC10ZLQsNGYIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDQv9C+0LrRgNC10L3QtdC8INGD0YDQtdGS0LDRmCDigJ4lc+KAnCDRgNCw0LTQuCDRh9C40YLQsNGa0LAg0Lgg0YPQv9C40YHQsC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgY2FwdHVyZSBkZXZpY2UuIgotbXNnc3RyICLQo9GA0LXRktCw0Zgg4oCeJXPigJwg0L3QuNGY0LUg0YPRgNC10ZLQsNGYINC30LAg0YHQvdC40LzQsNGa0LUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICLQo9GA0LXRktCw0Zgg4oCeJXPigJwg0L3QuNGY0LUg0LjQt9C70LDQt9C90Lgg0YPRgNC10ZLQsNGYLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAi0KPRgNC10ZLQsNGYIOKAniVz4oCcINC90LjRmNC1INCcMtCcINGD0YDQtdGS0LDRmC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgItCd0LUg0LzQvtCz0YMg0LTQsCDRg9C00LLQvtGB0YLRgNGD0YfQuNC8INGD0YDQtdGS0LDRmCDigJ4lc+KAnCDRgNCw0LTQuCDRh9C40YLQsNGa0LAg0Lgg0YPQv9C40YHQsC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LjRgdCw0Lwg0YPRgdC/0LXQviDQtNCwINC/0L7QtNC10YHQuNC8INC90L7RgNC80YMg0LfQsCDRg9GA0LXRktCw0Zgg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0LTQvtCx0LDQstC40Lwg0YLQtdC60YPRm9GDINGD0YfQtdGB0YLQsNC90L7RgdGCINGC0ZjRg9C90LXRgNCwINC30LAg0YPRgNC10ZLQsNGYIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0i0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0L/QvtC00LXRgdC40Lwg0YLQtdC60YPRm9GDINGD0YfQtdGB0YLQsNC90L7RgdGCINGC0ZjRg9C90LXRgNCwINC30LAg0YPRgNC10ZLQsNGYIOKAniVz4oCcINC90LAgJWx1IEh6LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC+0LHQsNCy0LjQvCDRmNCw0YfQuNC90YMg0YHQuNCz0L3QsNC70LAg0LfQsCDRg9GA0LXRktCw0Zgg4oCeJXPigJwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC+0LHQsNCy0LjQvCDQstGA0LXQtNC90L7RgdGCINC30LAg0LrQvtC90YLRgNC+0LvRgyAlZCDQvdCwINGD0YDQtdGS0LDRmNGDIOKAniVz4oCcLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QuNGB0LDQvCDRg9GB0L/QtdC+INC00LAg0L/QvtC00LXRgdC40Lwg0LLRgNC10LTQvdC+0YHRgiAlZCDQt9CwINC60L7QvdGC0YDQvtC70YMgJWQg0L3QsCDRg9GA0LXRktCw0ZjRgyDigJ4lc+KAnC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC+0LHQsNCy0LjQvCDRgtC10LrRg9Gb0Lgg0YPQu9Cw0Lcg0L3QsCDRg9GA0LXRktCw0ZjRgyDigJ4lc+KAnC4g0JzQvtC20LTQsCDRmNC1INGC0L4g0YDQsNC00LjQviDRg9GA0LXRktCw0ZguIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLQndC40YHQsNC8INGD0YHQv9C10L4g0LTQsCDQtNC+0LHQsNCy0LjQvCDRgtC10LrRg9Gb0Lgg0LjQt9C70LDQtyDQvdCwINGD0YDQtdGS0LDRmNGDIOKAniVz4oCcLiDQnNC+0LbQtNCwINGY0LUg0YLQviDRgNCw0LTQuNC+ICIKLSLRg9GA0LXRktCw0ZguIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgItCd0LjRgdCw0Lwg0YPRgdC/0LXQviDQtNCwINC/0L7QtNC10YHQuNC8INC40LfQu9Cw0LcgJWQg0L3QsCDRg9GA0LXRktCw0ZjRgyAlcy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQn9GA0L7QvNC10L3QsCDRgNC10LfQvtC70YPRhtC40ZjQtSDQv9GA0LjQu9C40LrQvtC8INC40LfQstGA0YjQsNCy0LDRmtCwINGY0L7RiCDRg9Cy0LXQuiDQvdC40ZjQtSDQv9C+0LTRgNC20LDQvdCwLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQtNCwINGA0LDQtNC40Lwg0LHQtdC3INGB0LDRgtCwIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICLQo9C90YPRgtGA0LDRiNGa0LAg0LPRgNC10YjQutCwINGC0L7QutCwINC/0L7QtNCw0YLQsNC60LAuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAi0KPQvdGD0YLRgGHRiNGa0LAg0LPRgNC10YjQutCwINC/0YDQvtGC0L7QutCwINC/0L7QtNCw0YLQsNC60LAuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICLQo9GA0LXRktCw0Zgg4oCeJXPigJwg0L3QtSDQv9C+0LTRgNC20LDQstCwINCy0LjQtNC10L4g0YHQvdC40LzQsNGa0LUiCmRpZmYgLS1naXQgYS9wby9zdGFtcC1wbyBiL3BvL3N0YW1wLXBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Nzg4ZjcwLi4wMDAwMDAwCi0tLSBhL3BvL3N0YW1wLXBvCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGltZXN0YW1wCmRpZmYgLS1naXQgYS9wby9zdi5nbW8gYi9wby9zdi5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNzVhN2YuLjAwMDAwMDAKLS0tIGEvcG8vc3YuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vc3YucG8gYi9wby9zdi5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIzMzA3NS4uMDAwMDAwMAotLS0gYS9wby9zdi5wbworKysgL2Rldi9udWxsCkBAIC0xLDQ0MyArMCwwIEBACi0jIFN3ZWRpc2ggbWVzc2FnZXMgZm9yIGdzdC1wbHVnaW5zLWdvb2QuCi0jIENvcHlyaWdodCDCqSAyMDA3LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jIENocmlzdGlhbiBSb3NlIDxtZW50aG9zQG1lbnRob3MuY29tPiwgMjAwNC4KLSMgRGFuaWVsIE55bGFuZGVyIDxwb0BkYW5pZWxueWxhbmRlci5zZT4sIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEuCi0jIFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0BnbWFpbC5jb20+LCAyMDE0LCAyMDE1LCAyMDE2LgotIwotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjcuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTAyLTIwIDE2OjEzKzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IFNlYmFzdGlhbiBSYXNtdXNzZW4gPHNlYnJhc0BnbWFpbC5jb20+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgotIkxhbmd1YWdlOiBzdlxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjdcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiSmFjay1zZXJ2ZXIgaGl0dGFkZXMgZWoiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IGF2a29kYSBKUEVHLWJpbGQiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIlwiJXNcIiBhdiBcIiVzXCIiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIkt1bmRlIGludGUgYW5zbHV0YSB0aWxsIHNlcnZlcm4iCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiSW5nZW4gVVJMIGluc3TDpGxsZC4iCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAiU2VydmVybiBzdMO2ZGVyIGludGUgc8O2a25pbmcvc3BvbG5pbmcuIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIHNlcnZlcm5hbW5ldC4iCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBldGFibGVyYSBhbnNsdXRuaW5nIHRpbGwgc2VydmVybi4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJTw6RrZXIgYW5zbHV0bmluZyBtaXNzbHlja2FkZXMuIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAiRXR0IG7DpHR2ZXJrc2ZlbCBpbnRyw6RmZmFkZSBlbGxlciBzZXJ2ZXJuIHN0w6RuZ2RlIGFuc2x1dG5pbmdlbiBvdsOkbnRhdC4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIlNlcnZlcm4gc2tpY2thZGUgZmVsYWt0aWd0IGRhdGEuIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICJJbmdldCBlbGxlciBvZ2lsdGlndCBpbmfDpW5nc2xqdWQuIEFWSS1zdHLDtm1tZW4ga29tbWVyIGF0dCBza2FkYXMuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIG5vIHBsYXlhYmxlIHN0cmVhbXMuIgotbXNnc3RyICJEZW4gaMOkciBmaWxlbiBpbm5laMOlbGxlciBpbmdhIHVwcHNwZWxuaW5nc2JhcmEgc3Ryw7ZtbWFyLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGVuIGjDpHIgZmlsZW4gw6RyIG9naWx0aWcgb2NoIGthbiBpbnRlIHNwZWxhcyB1cHAuIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIkthbiBlaiBzcGVsYSBzdHLDtm0gZMOlIGRlbiDDpHIga3J5cHRlcmFkIG1lZCBQbGF5UmVhZHkgRFJNLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiRGVuIGjDpHIgZmlsZW4gw6RyIHNrYWRhZCBvY2gga2FuIGludGUgc3BlbGFzIHVwcC4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIk9naWx0aWcgYXRvbXN0b3JsZWsuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJEZW4gaMOkciBmaWxlbiDDpHIgaW50ZSBmdWxsc3TDpG5kaWcgb2NoIGthbiBpbnRlIHNwZWxhcyB1cHAuIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICJWaWRlb24gaSBkZW4gaMOkciBmaWxlbiBrYW5za2UgaW50ZSBrYW4gc3BlbGFzIHVwcCBrb3JyZWt0LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICIiCi0iRGVuIGjDpHIgZmlsZW4gaW5uZWjDpWxsZXIgZsO2ciBtw6VuZ2Egc3Ryw7ZtbWFyLiBTcGVsYXIgZW5kYXN0IHVwcCBkZSBmw7Zyc3RhICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJJbmdlbiBzdHLDtm0gc29tIHN0w7ZkcyBoaXR0YWRlcy4gRHUga2Fuc2tlIGJlaMO2dmVyIGluc3RhbGxlcmEgZW4gR1N0cmVhbWVyLSIKLSJpbnN0aWNrc21vZHVsIGbDtnIgUlRTUCBmw7ZyIFJlYWwgTWVkaWEtc3Ryw7ZtbWFyLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIkluZ2VuIHN0csO2bSBzb20gc3TDtmRzIGhpdHRhZGVzLiBEdSBrYW5za2UgYmVow7Z2ZXIgdGlsbMOldGEgZmxlciAiCi0idHJhbnNwb3J0cHJvdG9rb2xsIGVsbGVyIHPDpSBzYWtuYXIgZHUga2Fuc2tlIGRldCByw6R0dGEgR1N0cmVhbWVyLXRpbGzDpGdnZXQgIgotImbDtnIgUlRTUC4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciAiCi0iYXBwbGljYXRpb24uIgotbXNnc3RyICIiCi0iS3VuZGUgaW50ZSDDtnBwbmEgbGp1ZGVuaGV0ZW4gZsO2ciB1cHBzcGVsbmluZy4gRW5oZXRlbiBhbnbDpG5kcyBhdiBldHQgYW5uYXQgIgotInByb2dyYW0uIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJLdW5kZSBpbnRlIMO2cHBuYSBsanVkZW5oZXRlbiBmw7ZyIHVwcHNwZWxuaW5nLiBEdSBoYXIgaW50ZSBiZWjDtnJpZ2hldCBhdHQgIgotIsO2cHBuYSBlbmhldGVuLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBsanVkZW5oZXRlbiBmw7ZyIHVwcHNwZWxuaW5nLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJLdW5kZSBpbnRlIMO2cHBuYSBsanVkZW5oZXRlbiBmw7ZyIHVwcHNwZWxuaW5nLiBEZW5uYSB2ZXJzaW9uIGF2IE9wZW4gU291bmQgIgotIlN5c3RlbSBzdMO2ZHMgaW50ZSBhdiBkZXR0YSBlbGVtZW50LiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJVcHBzcGVsbmluZyBzdMO2ZHMgaW50ZSBhdiBkZW5uYSBsanVkZW5oZXQuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJGZWwgdmlkIGxqdWR1cHBzcGVsbmluZy4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkluc3BlbG5pbmcgc3TDtmRzIGludGUgYXYgZGVubmEgbGp1ZGVuaGV0LiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIkZlbCB2aWQgaW5zcGVsbmluZyBmcsOlbiBsanVkZW5oZXRlbi4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJLdW5kZSBpbnRlIMO2cHBuYSBsanVkZW5oZXRlbiBmw7ZyIGluc3BlbG5pbmcuIER1IGhhciBpbnRlIGJlaMO2cmlnaGV0IGF0dCAiCi0iw7ZwcG5hIGVuaGV0ZW4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBsanVkZW5oZXRlbiBmw7ZyIGluc3BlbG5pbmcuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIkNvcmVBdWRpby1lbmhldCBoaXR0YWRlcyBpbnRlIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICJDb3JlQXVkaW8tZW5oZXQga3VuZGUgaW50ZSDDtnBwbmFzIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiSW5zcGVsbmluZ3Nrw6RsbGEiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkxpbmplLUluIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkludGVybiBjZC1zcGVsYXJlIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIEluIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIEluIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIEluIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIk9ta29kYXItw6V0ZXJrb3BwbGluZ3NzbGluZ2EiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlN1blZUUy3DpXRlcmtvcHBsaW5nc3NsaW5nYSIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiVm9seW0iCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJGw7Zyc3TDpHJrIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiTW9uaXRvciIKLQotbXNnaWQgIkJ1aWx0LWluIFNwZWFrZXIiCi1tc2dzdHIgIkluYnlnZ2QgaMO2Z3RhbGFyZSIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAiSMO2cmx1ciIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICJMaW5qZSB1dCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAiU1BESUYgdXQiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIkFVWCAxIHV0IgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICJBVVggMiB1dCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2ICVkIGJ5dGUgZnLDpW4gZW5oZXRlbiBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0iTWlzc2x5Y2thZGVzIG1lZCBhdHQgcsOka25hIHVwcCBtw7ZqbGlnYSB2aWRlb2Zvcm1hdCBzb20gZW5oZXRlbiBcIiVzXCIga2FuICIKLSJhcmJldGEgbWVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJLdW5kZSBpbnRlIG1hcHBhIGJ1ZmZlcnRhciBmcsOlbiBlbmhldGVuIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIkRyaXZydXRpbmVuIGbDtnIgZW5oZXRlbiBcIiVzXCIgc3TDtmRlciBpbnRlIElPLW1ldG9kICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiRHJpdnJ1dGluZW4gZsO2ciBlbmhldGVuIFwiJXNcIiBzdMO2ZGVyIGludGUgbsOlZ29uIGvDpG5kIElPLW1ldG9kLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJFbmhldGVuIFwiJXNcIiDDpHIgdXBwdGFnZW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIkVuaGV0ZW4gXCIlc1wiIGthbiBpbnRlIGbDpW5nYSBpICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJFbmhldGVuIFwiJXNcIiBrYW4gaW50ZSBmw6VuZ2EgaSBkZXQgYW5naXZuYSBmb3JtYXRldCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIgotbXNnc3RyICJFbmhldGVuIFwiJXNcIiBzdMO2ZGVyIGludGUgaWNrZS1rb250aW51ZXJsaWdhIHBsYW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJLdW5kZSBpbnRlIGbDpSB0YWcgaSBwYXJhbWV0cmFyIHDDpSBlbmhldGVuIFwiJXNcIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmlkZW9lbmhldGVuIGFjY2VwdGVyYWRlIGludGUgbnkgaW5zdMOkbGxuaW5nIGbDtnIgYmlsZGZyZWt2ZW5zLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvZW5oZXRlbiB0aWxsaGFuZGFow7ZsbCBpbmdldCB1dGfDpW5nc2Zvcm1hdC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiVmlkZW9lbmhldGVuIHJldHVybmVyYWRlIG9naWx0aWdhIGRpbWVuc2lvbmVyLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICJWaWRlb2VuaGV0ZXIgYW52w6RuZGVyIGVuIHNhbW1hbmZsw6R0bmluZ3NtZXRvZCBzb20gZWogc3TDtmRzLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICJWaWRlb2VuaGV0ZXIgYW52w6RuZGVyIGV0dCBwaXhlbC1mb3JtYXQgc29tIGVqIHN0w7Zkcy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQga29uZmlndXJlcmEgaW50ZXJuIGJ1ZmZlcnQtcG9vbC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIlZpZGVvZW5oZXRlbiBmw7ZyZXNsb2cgaW50ZSBueSBidWZmZXJ0c3Rvcmxlay4iCi0KLW1zZ2lkICJObyBkb3duc3RyZWFtIHBvb2wgdG8gaW1wb3J0IGZyb20uIgotbXNnc3RyICJJbmdlbiBuZWRzdHLDtm1zLXBvb2wgYXR0IGltcG9ydGVyYSBmcsOlbi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJNaXNzbHlja2FkZXMgbWVkIGF0dCBmw6UgdGFnIGkgaW5zdMOkbGxuaW5nYXJuYSBmw7ZyIG1vdHRhZ2FyZSAlZCBww6UgZW5oZXRlbiAiCi0iXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJGZWwgdmlkIGzDpHNuaW5nIGF2IGbDtnJtw6Vnb3IgZsO2ciBlbmhldGVuIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJFbmhldGVuIFwiJXNcIiDDpHIgaW5nZW4gbW90dGFnYXJlLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIkt1bmRlIGludGUgc3TDpGxsYSBpbiByYWRpb2luZ8OlbmcgcMOlIGVuaGV0ZW4gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkt1bmRlIGludGUgc3TDpGxsYSBpbiBpbmfDpW5nICVkIHDDpSBlbmhldGVuICVzLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgw6RuZHJhIHDDpSBsanVkbMO2cy1sw6RnZSBmw7ZyIGVuaGV0ZW4gXCIlc1wiLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZWQgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIGF0dCBhbGxva2VyYSBiZWfDpHJ0IG1pbm5lLiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBhbGxva2VyYSBiZWfDpHJ0IG1pbm5lLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJLb252ZXJ0b3JuIHDDpSBlbmhldGVuICVzIGhhciBpbmdldCBpbmfDpW5nc2Zvcm1hdCBzb20gc3TDtmRzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJLb252ZXJ0b3JuIHDDpSBlbmhldGVuICVzIGhhciBpbmdldCB1dGfDpW5nc2Zvcm1hdCBzb20gc3TDtmRzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJLb2RhcmVuIHDDpSBlbmhldGVuICVzIGhhciBpbmdldCBpbmfDpW5nc2Zvcm1hdCBzb20gc3TDtmRzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiS29kYXJlbiBww6UgZW5oZXRlbiAlcyBoYXIgaW5nZXQgdXRnw6VuZ3Nmb3JtYXQgc29tIHN0w7ZkcyIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBzdGFydGEgYXZrb2RuaW5nc3Ryw6VkLiIKLQotbXNnaWQgIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIGF0dCBiZWhhbmRsYSByYW0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotIkZlbCB2aWQgbMOkc25pbmcgYXYgZsO2cm3DpWdvciBmw7ZyIGVuaGV0ZW4gXCIlc1wiOiBEZXQgw6RyIGludGUgZW4gdjRsMi0iCi0iZHJpdnJ1dGluLiBLb250cm9sbGVyYSBvbSBkZXQgw6RyIGVuIHY0bDEtZHJpdnJ1dGluLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIk1pc3NseWNrYWRlcyBtZWQgYXR0IGZyw6VnYSBlZnRlciBhdHRyaWJ1dCBmw7ZyIGluZ8OlbmcgJWQgaSBlbmhldGVuICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJNaXNzbHlja2FkZXMgbWVkIGF0dCBmw6UgdGFnIGkgaW5zdMOkbGxuaW5nZW4gZsO2ciBtb3R0YWdhcmUgJWQgcMOlIGVuaGV0ZW4gXCIlcyIKLSJcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBmcsOlZ2EgZWZ0ZXIgbm9ybSBww6UgZW5oZXRlbiBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBmw6UgdGFnIHDDpSBrb250cm9sbGF0dHJpYnV0ZW4gcMOlIGVuaGV0ZW4gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICJLdW5kZSBpbnRlIGlkZW50aWZpZXJhIGVuaGV0ZW4gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJEZXQgaMOkciDDpHIgaW50ZSBlbiBlbmhldCBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgZW5oZXRlbiBcIiVzXCIgZsO2ciBsw6RzbmluZyBvY2ggc2tyaXZuaW5nLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIkVuaGV0ZW4gXCIlc1wiIMOkciBpbmdlbiBmw6VuZ3N0ZW5oZXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJFbmhldGVuIFwiJXNcIiDDpHIgaW5nZW4gdXRnw6VuZ3NlbmhldC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIkVuaGV0ZW4gXCIlc1wiIMOkciBpbmdlbiBNMk0tZW5oZXQuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJLdW5kZSBpbnRlIGR1cGxpY2VyYSBlbmhldGVuIFwiJXNcIiBmw7ZyIGzDpHNuaW5nIG9jaCBza3Jpdm5pbmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgbm9ybSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBzdMOkbGxhIGluIG5vcm0gZsO2ciBlbmhldGVuIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTWlzc2x5Y2thZGVzIG1lZCBhdHQgZ8OlIHRhZyBww6UgYWt0dWVsbCBtb3R0YWdhcmZyZWt2ZW5zIGbDtnIgZW5oZXRlbiBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLSJNaXNzbHlja2FkZXMgbWVkIGF0dCBzdMOkbGxhIGluIGFrdHVlbGwgbW90dGFnYXJmcmVrdmVucyBmw7ZyIGVuaGV0ZW4gXCIlc1wiICIKLSJ0aWxsICVsdSBIei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgZsOlIHRhZyBww6Ugc2lnbmFsc3R5cmthIGbDtnIgZW5oZXRlbiBcIiVzXCIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iTWlzc2x5Y2thZGVzIG1lZCBhdHQgZsOlIHRhZyBww6UgdsOkcmRldCBmw7ZyIGtvbnRyb2xsZW4gJWQgcMOlIGVuaGV0ZW4gXCIlc1wiLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS3VuZGUgaW50ZSBzdMOkbGxhIGluIHbDpHJkZXQgJWQgZsO2ciBrb250cm9sbGVuICVkIHDDpSBlbmhldGVuIFwiJXNcIi4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJNaXNzbHlja2FkZXMgbWVkIGF0dCBmw6UgdGFnIHDDpSBha3R1ZWxsIGluZ8OlbmcgcMOlIGVuaGV0ZW4gXCIlc1wiLiBLYW4gdmFyYSBlbiAiCi0icmFkaW9lbmhldCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRmFpbGVkIHRvIGdldCBjdXJyZW50IG91dHB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0iTWlzc2x5Y2thZGVzIG1lZCBhdHQgZsOlIHRhZyBww6UgYWt0dWVsbCB1dGfDpW5nIHDDpSBlbmhldGVuIFwiJXNcIi4gS2FuIHZhcmEgZW4gIgotInJhZGlvZW5oZXQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgc3TDpGxsYSBpbiB1dGfDpW5nICVkIHDDpSBlbmhldGVuICVzLiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIsOEbmRyaW5nIGF2IHVwcGzDtnNuaW5nIHZpZCBrw7ZydGlkIHN0w7ZkcyBpbnRlIMOkbi4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIkthbiBpbnRlIGZ1bmdlcmEgdXRhbiBlbiBrbG9ja2EiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgIkludGVybnQgZmVsIGkgZGF0YXN0csO2bS4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICJJbnRlcm50IGZlbCBpIGRhdGFmbMO2ZGUuIgotCi0jfiBtc2dpZCAiRGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB2aWRlbyBjYXB0dXJlIgotI34gbXNnc3RyICJFbmhldGVuIFwiJXNcIiBzdMO2ZGVyIGludGUgdmlkZW9pbmbDpW5nbmluZy4iCmRpZmYgLS1naXQgYS9wby90ci5nbW8gYi9wby90ci5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNzRhN2IuLjAwMDAwMDAKLS0tIGEvcG8vdHIuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdHIucG8gYi9wby90ci5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNlYWIyMS4uMDAwMDAwMAotLS0gYS9wby90ci5wbworKysgL2Rldi9udWxsCkBAIC0xLDgwOCArMCwwIEBACi0jIHRyYW5zbGF0aW9uIG9mIGdzdC1wbHVnaW5zLWdvb2QtMS4wLjMucG8gdG8gVHVya2lzaAotIyBUaGlzIGZpbGUgaXMgcHV0IGluIHRoZSBwdWJsaWMgZG9tYWluLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIyBTZXJ2ZXIgQWNpbSA8c2VydmVyYWNpbUBnbWFpbC5jb20+LCAyMDEwLgotIyBTZXJ2ZXIgQWNpbSA8c2VydmVyYWNpbUBnbWFpbC5jb20+LCAyMDExLgotIyBTZXJ2ZXIgQWNpbSA8c2VydmVyYWNpbUBnbWFpbC5jb20+LCAyMDEzLCAyMDE1LgotbXNnaWQgIiIKLW1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ3N0LXBsdWdpbnMtZ29vZCAxLjQuMVxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTAxLTEwIDIxOjA3KzAxMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IFZvbGthbiBHZXplciA8dm9sa2FuZ2V6ZXJAZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IFR1cmtpc2ggPGdudS10ci11MTJhQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogdHJcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgotIlgtR2VuZXJhdG9yOiBMb2thbGl6ZSAxLjVcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiSmFjayBzdW51Y3VzdSBidWx1bmFtYWTEsSIKLQotbXNnaWQgIkZhaWxlZCB0byBkZWNvZGUgSlBFRyBpbWFnZSIKLW1zZ3N0ciAiSlBFRyBnw7Zyw7xudMO8c8O8bsO8IMOnw7Z6w7xtbGVuZW1lZGkiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiclcycgdGFyYWbEsW5kYW4gJyVzJyIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiU3VudWN1eWEgYmHEn2xhbmFtxLF5b3IiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiSGnDpyBiaXIgVVJMIGF5YXJsYW5tYW3EscWfLiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICJTdW51Y3UgYXJhbWF5xLEgZGVzdGVrbGVtaXlvci4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIlN1bnVjdSBhZMSxIMOnw7Z6w7xtbGVuZW1peW9yLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJTdW51Y3V5bGEgYmHEn2xhbnTEsSBrdXJ1bHVtYXlvci4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICJHw7x2ZW5saSBiYcSfbGFudMSxIGF5YXLEsSB5YXDEsWxhbWFkxLEuIgotCi0jLCBmdXp6eQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIiIKLSJCaXIgYcSfIGhhdGFzxLEgbWV5ZGFuYSBnZWxkaSwgdmV5YSBzdW51Y3UgYmHEn2xhbnTEsXnEsSBiZWtsZW5tZXllbiBiaXIgxZ9la2lsZGUgIgotImtlc3RpLiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiU3VudWN1IHlldGVyc2l6IHZlcmkgZ8O2bmRlcmRpLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiR2XDp2VybGkgYmlyIHNlcyBnaXJpxZ9pIGJ1bHVuYW1hZMSxLiBBVkkgYWvEscWfxLEga2VzaWxlY2VrLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiRG9zeWEgw6dhbMSxbmFiaWxpciBha8SxxZ9sYXIgacOnZXJtaXlvci4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW52YWxpZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkJ1IGRvc3lhIGdlw6dlcnNpeiB2ZSBveW5hdMSxbGFtYXouIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIkFrxLHFnyDDp2FsxLFuYW1hZMSxIMOnw7xua8O8IFBsYXlSZWFkeSBEUk0gaWxlIMWfaWZyZWxlbm1pxZ8uIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJCdSBkb3N5YSBib3p1ayB2ZSBveW5hdMSxbGFtYXouIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICJHZcOnZXJzaXogYXRvbSBib3l1dHUiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIkRvc3lhIGVrc2lrIHZlIG95bmF0xLFsYW1hei4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIkJ1IGRvc3lhZGFraSB2aWR5byBkb8SfcnUgb3luYXTEsWxhbcSxeWFiaWxpci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiQnUgZG9zeWEgw6dvayBmYXpsYSBha8SxxZ8gacOnZXJpeW9yLiBTYWRlY2UgaWxraSBveW5hdMSxbMSxeW9yICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSJEZXN0ZWtsZW5lbiBiaXIgYWvEscWfIGJ1bHVuYW1hZMSxLiBSZWFsIE1lZGlhIGFrxLHFn2xhcsSxIGnDp2luIGJpciBHU3RyZWFtZXIgUlRTUCAiCi0idXphbnTEsSBla2xlbnRpc2kga3VybWFsxLFzxLFuxLF6LiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIkRlc3Rla2xlbmVuIGFrxLHFnyBidWx1bmFtYWTEsS4gRGFoYSBmYXpsYSBha3RhcsSxbSBwcm90b2tvbMO8bmUgaXppbiB2ZXJtZW5peiAiCi0idmV5YSBkb8SfcnUgR1N0cmVhbWVyIFJUU1AgdXphbnTEsSBla2xlbnRpc2luZSBvbmF5IHZlcm1lbml6IGdlcmVrZWJpbGlyLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSLDh2FsbWFrIGnDp2luIHNlcyBheWfEsXTEsSBhw6fEsWxhbcSxeW9yLiBBeWfEsXQgYmHFn2thIGJpciB1eWd1bGFtYSB0YXJhZsSxbmRhbiAiCi0ia3VsbGFuxLFsxLF5b3IuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIsOHYWxtYWsgacOnaW4gc2VzIGF5Z8SxdMSxIGHDp8SxbGFtxLF5b3IuIEF5Z8SxdMSxIGHDp21hIGl6bmluaXogYnVsdW5tdXlvci4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiw4dhbG1hayBpw6dpbiBzZXMgYXlnxLF0xLEgYcOnxLFsYW3EsXlvci4iCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICIiCi0iw4dhbG1hIGnDp2luIHNlcyBheWfEsXTEsSBhw6fEsWxhbcSxeW9yLiBBw6fEsWsgU2VzIFNpc3RlbWknbmluIGJ1IHPDvHLDvG3DvCwgYnUgw7bEn2V5aSAiCi0iZGVzdGVrbGVtaXlvci4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQnUgc2VzIGF5Z8SxdMSxIMOnYWxtYXnEsSBkZXN0ZWtsZW1peW9yLiIKLQotbXNnaWQgIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIKLW1zZ3N0ciAiU2VzIMOnYWxtYSBoYXRhc8SxLiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQnUgc2VzIGF5Z8SxdMSxIGtheWRldG1leWkgZGVzdGVrbGVtaXlvci4iCi0KLW1zZ2lkICJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJTZXMgYXlnxLF0xLFuZGFuIGtheWRldG1la3RlIGhhdGEuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICJLYXnEsXQgacOnaW4gYXlnxLF0xLEgYcOnYW3EsXlvci4gQXlnxLF0xLEgYcOnbWFrIGnDp2luIHlldGtpbml6IHlvay4iCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIkF5Z8SxdMSxIGthecSxdCBpw6dpbiBhw6dhbcSxeW9yLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIkthecSxdCBLYXluYcSfxLEiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICJNaWtyb2ZvbiIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIkhhdCBHaXJpxZ9pIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkRhaGlsaSBDRCIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICJTUERJRiBHaXJpxZ9pIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIEdpcmnFnyIKLQotbXNnaWQgIkFVWCAyIEluIgotbXNnc3RyICJBVVggMiBHaXJpxZ8iCi0KLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiS29kZWsgR2VyaWTDtm7DvMWfw7wiCi0KLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIlN1blZUUyBHZXJpZMO2bsO8xZ/DvCIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiU2VzIEdpcmnFn2kiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJLYXphbsOnIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiSG9wYXJsw7ZyIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiVmFyc2F5xLFsYW4gSG9wYXJsw7ZyIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJLdWxha2zEsWsiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiSGF0IMOHxLFrxLHFn8SxIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICJTUERJRiDDh8Sxa8SxxZ8iCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIkFVWCAxIMOHxLFrxLHFnyIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYIDIgw4fEsWvEscWfIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiVkIGJheXQgYmlsZ2lsaSAnJXMnIGF5Z8SxdMSxbmRhbiBva3VtYWRhIGhhdGEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICJBeWfEsXTEsW4gJyVzJyBiaXJsaWt0ZSDDp2FsxLHFn2FiaWxlY2XEn2kgdmlkeW8ga2lwbGVyaW5pIHPEsXJhbGFtYWRhIGhhdGEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIkF5Z8SxdHRhbiAnJXMnIGJlbGxla2xlciBlxZ9sZW5lbWl5b3IiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIkJ1IGF5Z8SxdMSxbiBzw7xyw7xjw7xzw7wgJyVzJyBJTyB5w7ZudGVtaW5pIGRlc3Rla2xlbWl5b3IgJWQiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyBtZXRob2QuIgotbXNnc3RyICIiCi0iQnUgYXlnxLF0xLFuIHPDvHLDvGPDvHPDvCAnJXMnIGJpbGluZW4gSU8gecO2bnRlbWxlcmluZGVuIGhlcmhhbmdpIGJpcmlzaW5pICIKLSJkZXN0ZWtsZW1peW9yLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJBeWfEsXQgJyVzJyBtZcWfZ3VsIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICJBeWfEsXQgJyVzJyBnw7Zyw7xudMO8IHlha2FsYXlhbWFkxLElZHglZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiQXlnxLF0ICclcycgYmVsaXJ0aWxlbiBraXB0ZSBnw7Zyw7xudMO8IHlha2FsYXlhbWFkxLEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiQXlnxLF0ICclcycgYml0acWfaWsgb2xtYXlhbiBkw7x6bGVtbGVyaSBkZXN0ZWtsZW1peW9yIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiRGXEn2nFn3RpcmdlbGVyIGF5Z8SxdHRhbiAnJXMnIGFsxLFuYW3EsXlvciIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiVmlkeW8gYXlnxLF0xLEgeWVuaSDDp2Vyw6dldmUgb3JhbsSxIGF5YXJsYXLEsW7EsSBrYWJ1bCBldG1lZGkuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiVmlkZW8gYXlnxLF0xLEgw6fEsWt0xLEgYmnDp2ltaW5pIHNhxJ9sYW1hZMSxLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICJWaWRlbyBheWfEsXTEsSBnZcOnZXJzaXogYm95dXRsYXIgZMO2bmTDvC4iCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiVmlkZW8gYXlnxLF0bGFyxLEgZGVzdGVrbGVubWV5ZW4gYmlyIGJpcmJpcmluZSBnZcOnbWUgecO2bnRlbWkga3VsbGFuxLF5b3IuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIlZpZGVvIGF5Z8SxdGxhcsSxIGRlc3Rla2xlbm1leWVuIGJpciBwaWtzZWwgYmnDp2ltaW5pIGt1bGxhbsSxeW9yLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICLEsMOnIHRhbXBvbiBiZWxsZWsgaGF2dXp1IHlhcMSxbGFuZMSxcsSxbGFtxLF5b3IuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3Qgc3VnZ2VzdCBhbnkgYnVmZmVyIHNpemUuIgotbXNnc3RyICJWaWRlbyBheWfEsXTEsSBoZXJoYW5naSBiaXIgdGFtcG9uIGJlbGxlayBib3l1dHUgw7ZuZXJtZWRpLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIsSww6dlcmkgYWt0YXLEsWxhY2FrIGFrxLFudMSxIGhhdnV6dSB5b2suIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLEsHN0YXN5b24gYXlhcmxhcsSxbsSxIGJ1bG1hIGnFn2xlbWkgJWQgxZ91IGF5Z8SxdHRhICclcycgYmHFn2FyxLFsYW1hZMSxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJCdSBheWfEsXQgacOnaW4ga2FwYXNpdGUgYmlsZ2lzaSBhbMSxbmFtYWTEsSAnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIkF5Z8SxdCAnJXMnIGJpciByYWR5byBkZcSfaWwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiUmFkeW8gZ2lyacWfIGRlxJ9lcmkgxZ91IGF5Z8SxdHRhICclcycgYXlhcmxhbmFtYWTEsS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBpbnB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJHaXJpxZ8gZGXEn2VyaSBvbGFyYWsgYnUgJWQgxZ91IGF5Z8SxdHRhICVzIGF5YXJsYW5hbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJBeWfEsXQgJyVzJyBzdXN0dXJ1bG1heWEgYXlhcmxhbmFtYWTEsS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIkdlcmVrbGkgYmVsbGVrIGF5csSxbGFtYWTEsS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiR2VyZWtsaSBiZWxsZWsgYXlyxLFsYW3EsXlvci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiQXlnxLF0ICVzIMO8emVyaW5kZWtpIGTDtm7DvMWfdMO8csO8Y8O8IGdpcmRpIGJpw6dpbWluaSBkZXN0ZWtsZW1peW9yIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJBeWfEsXQgJXMgw7x6ZXJpbmRla2kgZMO2bsO8xZ90w7xyw7xjw7wgw6fEsWt0xLEgYmnDp2ltaW5pIGRlc3Rla2xlbWl5b3IiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIkF5Z8SxdCAlcyDDvHplcmluZGVraSBrb2RsYXnEsWPEsSBnaXJkaSBiacOnaW1pbmkgZGVza3Rla2xlbWl5b3IiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJBeWfEsXQgJXMgw7x6ZXJpbmRla2kga29kbGF5xLFjxLEgw6fEsWt0xLEgYmnDp2ltaW5pIGRlc2t0ZWtsZW1peW9yIgotCi1tc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGRlY29kaW5nIHRocmVhZC4iCi1tc2dzdHIgIsOHw7Z6bWUgacWfaSBiYcWfbGFtYXPEsSBiYcWfYXLEsXPEsXouIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICLEsMWfbGVtIMOnZXLDp2V2ZXNpIGJhxZ9hcsSxc8Sxei4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0ixZ51IGF5Z8SxdMSxbiAnJXMnIMO2emVsbGlrbGVyaW5pIGFsbWFkYSBoYXRhOiBPIGJpciB2NGwyIHPDvHLDvGPDvHPDvCBkZcSfaWwuIE9udW4gIgotImJpciB2NGwxIHPDvHLDvGPDvHPDvCBvbHVwIG9sbWFkxLHEn8SxbsSxIGRlbmV0bGV5aW4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAiR2lyacWfIGRhdnJhbsSxxZ9sYXLEsSBzb3JndXN1ICVkIMWfdSBheWfEsXR0YSAlcyBiYcWfYXLEsWxhbWFkxLEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiUmFkeW8gaXN0YXN5b251IGF5YXJsYXLEsW7EsSBidWxtYSAlZCDFn3UgYXlnxLF0dGEgJyVzJyBiYcWfYXLEsWxhbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAixZ51IGF5Z8SxdHRhICclcycgc29yZ3Ugbm9ybXVuYSBlcmnFn2lsZW1lZGkuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJEZW5ldGltIGRhdnJhbsSxxZ9sYXLEsSDFn3UgYXlnxLF0dGEgJyVzJyBidWx1bmFtYWTEsS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQXlnxLF0IHRhbsSxbWxhbmFtxLF5b3IgJyVzJy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQnUgYmlyIGF5Z8SxdCBkZcSfaWwnJXMnLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIsWedSBheWfEsXTEsSAnJXMnIG9rdW1hIHZlIHlhem1hIGnDp2luIGHDp2FtxLF5b3IuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiQXlnxLF0ICclcycgYmlyIHlha2FsYW1hIGF5Z8SxdMSxIGRlxJ9pbC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIkF5Z8SxdCAnJXMnIGJpciDDp8Sxa8SxxZ8gYXlnxLF0xLEgZGXEn2lsLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBNMk0gZGV2aWNlLiIKLW1zZ3N0ciAiQXlnxLF0ICclcycgYmlyIE0yTSBheWfEsXTEsSBkZcSfaWwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICJPa3VtYSB2ZSB5YXptYSBpw6dpbiAnJXMnIGF5Z8SxdMSxIGtvcHlhbGFuYW1hZMSxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQXlnxLF0IGnDp2luICclcycgbm9ybSBkZcSfZXJsZXJpIGF5YXJsYW5hbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiQXlnxLF0IGnDp2luICclcycgcmFkeW8gZnJla2Fuc2xhcsSxIGF5YXJsYW5hbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIkF5Z8SxdCBpw6dpbiAnJXMnIHJhZHlvIGZyZWthbnPEsSAlbHUgSHogacOnaW4geWFwxLFsYW1hZMSxLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICJBeWfEsXQgacOnaW4gJyVzJyBnw7zDp2zDvCBzaW55YWwgYWzEsW3EsSBnZXLDp2VrbGXFn2VtZWRpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiRGVuZXRpbSBkZcSfZXJpIMWfdW5hICVkIGJ1IGF5Z8SxdHRhICclcycgYXlhcmxhbmFtYWTEsS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkRlxJ9lciAlZCBkZW5ldGltIGnDp2luICVkIMWfdSBheWfEsXR0YSAnJXMnIGF5YXJsYW5hbWFkxLEuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0ixZ51IGF5Z8SxdHRhICclcycgZ2XDp2VybGkgZ2lyacWfIGVsZGUgZWRpbGVtZWRpLiBPIGJpciByYWR5byBheWfEsXTEsSBvbGFiaWxpci4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIsWedSBheWfEsXR0YSAnJXMnIGdlw6dlcmxpIGdpcmnFnyBlbGRlIGVkaWxlbWVkaS4gTyBiaXIgcmFkeW8gYXlnxLF0xLEgb2xhYmlsaXIuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIsOHxLFrxLHFnyBkZcSfZXJpIG9sYXJhayAlZCDFn3UgYXlnxLF0dGEgJXMgZWxkZSBlZGlsZW1lZGkuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiw4dhbMSxxZ/EsXJrZW4gw6fDtnrDvG7DvHJsw7zEn8O8IGRlxJ9pxZ90aXJtZWsgaGVuw7x6IGRlc3Rla2xlbm1peW9yLiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiU2FhdCBvbG1hZGFuIMOnYWzEscWfYW1heiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAixLDDpyB2ZXJpIGFrxLFtIGhhdGFzxLEuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAixLDDpyB2ZXJpIGFrxLHFnyBoYXRhc8SxLiIKLQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAiQXlnxLF0ICclcycgdmlkZW8geWFrYWxhbWF5xLEgZGVzdGVrbGVtaXlvciIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIlNlcyBzdW51Y3VzdXlsYSBiYcSfbGFudMSxIGt1cnVsdW1heW9yIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIlNlcyBzdW51Y3VzdSBvbGFuYWtsYXLEsSBzb3JndWxhbmFtYWTEsSIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIkJhcyIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAiVGl6IgotCi0jfiBtc2dpZCAiU3ludGgiCi0jfiBtc2dzdHIgIlN5bnRoaXNpemVyIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJIb3BhcmzDtnIiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICJIYXQgZ2lyacWfaSIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCIKLQotI34gbXNnaWQgIk1peGVyIgotI34gbXNnc3RyICJLYXLEscWfdMSxcsSxY8SxIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICJLYXnEsXQiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJLYXphbsOnLWdpcmnFn2kiCi0KLSN+IG1zZ2lkICJPdXQtZ2FpbiIKLSN+IG1zZ3N0ciAiS2F6YW7Dpy3Dp8Sxa8SxxZ/EsSIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAiSGF0LTEiCi0KLSN+IG1zZ2lkICJMaW5lLTIiCi0jfiBtc2dzdHIgIkhhdC0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJIYXQtMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAiU2F5xLFzYWwtMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAiU2F5xLFzYWwtMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAiU2F5xLFzYWwtMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICJGb25vLWdpcmnFnyIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAiRm9uby3Dp8Sxa8SxxZ8iCi0KLSN+IG1zZ2lkICJWaWRlbyIKLSN+IG1zZ3N0ciAiVmlkeW8iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAiUmFkeW8iCi0KLSN+IG1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIgotI34gbXNnc3RyICJNaWtzZXIgZGVuZXRpbWkgacOnaW4gc2VzIGF5Z8SxdMSxIGHDp8SxbGFtxLF5b3IuIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiTWlrc2VyIGRlbmV0aW1pIGnDp2luIHNlcyBheWfEsXTEsSBhw6fEsWxhbcSxeW9yLiBBw6fEsWsgU2VzIFNpc3RlbWluaW4gYnUgIgotI34gInPDvHLDvG3DvCwgYnUgw7bEn2V5aSBkZXN0ZWtsZW1peW9yLiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAiTWFzdGVyIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIsOWbiIKLQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIkFya2EiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICJLdWxha2zEsWtsYXIiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIk1lcmtleiIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAiTEZFIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIlN1cnJvdW5kIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiWWFuIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAiQVVYIMOHxLFrxLHFnyIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICIzRCBEZXJpbmxpayIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0QgTWVya2V6IgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0QgR2VuacWfbGlrIgotCi0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICJUZWxlZm9uIgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgIlZpZHlvIEdpcmnFn2kiCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkFVWCBHaXJpxZ8iCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAiS2F5xLF0IEthemFuY8SxIgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIsOHxLFrxLHFnyBLYXphbmPEsSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIk1pa3JvZm9uIFNldml5ZSBZw7xrc2VsdG1lIgotCi0jfiBtc2dpZCAiRGlhZ25vc3RpYyIKLSN+IG1zZ3N0ciAiQXlhcmxhciIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIkJhc3MgQXJ0dMSxcsSxbSIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICLDh2FsbWEgUG9ydGxhcsSxIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIkdpcmnFnyIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICJIb3BhcmzDtnIgS2F5bmHEn8SxIgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAiS2xhdnllIEJpcGxlbWVzaSIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIFNpbcO8bGFzeW9udSIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiU3RlcmVvIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIlN1cnJvdW5kIFNlc2kiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgIk1pa3JvZm9uIEthemFuY8SxIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIkhvcGFybMO2ciBLYXluYcSfxLEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gS2F5bmHEn8SxIgotCi0jfiBtc2dpZCAiSmFjayIKLSN+IG1zZ3N0ciAiSmFjayIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiTWVya2V6IC8gTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAiU3RlcmVvIE1peCIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICJNb25vIE1peCIKLQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAiR2lyacWfIE1peCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAiTWlrcm9mb24gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICJTYXnEsXNhbCDDh8Sxa8SxxZ8iCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICJTYXnEsXNhbCBHaXJpxZ8iCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAiQWhpemUiCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAiRGnEn2VyIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAiSGnDp2JpcmkiCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAiQcOnxLFrIgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICJLYXBhbMSxIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAiU3VzdHVsdXJtdcWfIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAiSMSxemzEsSIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICLDh29rIEthbMSxbiIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAiRCIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiT3J0YSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIlRpeiIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAiw4dvayBUaXoiCi0KLSN+IG1zZ2lkICJQcm9kdWN0aW9uIgotI34gbXNnc3RyICJZYXDEsW0iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICLDlm4gUGFuZWwgTWlrcm9mb251IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAiw5ZuIFBhbmVsIEhhdCBHaXJpxZ9pIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiw5ZuIFBhbmVsIEt1bGFrbMSxa2xhciIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgT3V0IgotI34gbXNnc3RyICLDlm4gUGFuZWwgSGF0IMOHxLFrxLHFn8SxIgotCi0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICJZZcWfaWwgS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICJQZW1iZSBLb25uZWt0w7ZyIgotCi0jfiBtc2dpZCAiQmx1ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk1hdmkgS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmV5YXogS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiU2l5YWggS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICJHcmkgS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlBvcnRha2FsIEtvbm5la3TDtnIiCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICJLxLFybcSxesSxIEtvbm5la3TDtnIiCi0KLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJTYXLEsSBLb25uZWt0w7ZyIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJZZcWfaWwgw5ZuIFBhbmVsIEtvbm5la3TDtnIiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiUGVtYmUgw5ZuIFBhbmVsIEtvbm5la3TDtnIiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTWF2aSDDlm4gUGFuZWwgS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiQmV5YXogw5ZuIFBhbmVsIEtvbm5la3TDtnIiCi0KLSN+IG1zZ2lkICJCbGFjayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlNpeWFoIMOWbiBQYW5lbCBLb25uZWt0w7ZyIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIkdyaSDDlm4gUGFuZWwgS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlBvcnRha2FsIMOWbiBQYW5lbCBLb25uZWt0w7ZyIgotCi0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiS8Sxcm3EsXrEsSDDlm4gUGFuZWwgS29ubmVrdMO2ciIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIlNhcsSxIMOWbiBQYW5lbCBLb25uZWt0w7ZyIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiw4fEsWvEscWfxLEgRGHEn8SxdCIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIk1pa3MgRWRpbG1pxZ8iCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICJTYW5hbCBNaWtzZXIgR2lyacWfaSIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICJTYW5hbCBNaWtzZXIgw4fEsWvEscWfxLEiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJTYW5hbCBNaWtzZXIgS2FuYWxsYXLEsSIKLQotI34gbXNnaWQgIiVzICVkIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyAlZCDEsMWfbGV2IgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIMSwxZ9sZXYiCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJCZWtsZW5tZXllbiBiaXIgw6dlcsOnZXZlY2UgYm95dXR1ICV1IGJ1bnVuIHllcmluZSAldSBnw7Zyw7xudMO8bGVuZGkuIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIiVkIGJheXTEsSDFn3UgYXlnxLF0dGEgJyVzJyBva3VtYWRhIGhhdGEuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkF5Z8SxdHRhICclcycgYXJhYmVsbGVrIGt1eXJ1xJ9hIHNva3VsYW3EsXlvci4iCi0KLSN+IG1zZ2lkICJGYWlsZWQgdHJ5aW5nIHRvIGdldCB2aWRlbyBmcmFtZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkF5Z8SxdHRhbiBkZXZpY2UgJyVzJyB2aWR5byDDp2Vyw6dldmVsZXJpIGFsxLFuYW1hZMSxLiIKLQotI34gbXNnaWQgIkZhaWxlZCBhZnRlciAlZCB0cmllcy4gZGV2aWNlICVzLiBzeXN0ZW0gZXJyb3I6ICVzIgotI34gbXNnc3RyICLFnnUgZGVuZW1lZGVuIHNvbnJhICVkIGJhxZ9hcsSxbGFtYWTEsS4gYXlnxLF0ICVzLiBzaXN0ZW0gaGF0YXPEsTogJXMiCi0KLSN+IG1zZ2lkICIiCi0jfiAiVGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLCBvciBubyAiCi0jfiAiYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlIHVzZXJwdHIgb3IgbGVuZ3RoIGFyZSBpbnZhbGlkLiAiCi0jfiAiZGV2aWNlICVzIgotI34gbXNnc3RyICIiCi0jfiAiQXJhYmVsbGVrIHTDvHLDvCBkZXN0ZWtsZW5taXlvciwgdmV5YSBpw6dlcmlrIGJpciB5ZXJlIGFpdCBkZcSfaWwsIHZleWEgIgotI34gImFyYWJlbGxla2xlciBoZW7DvHogYXlyxLFsbWFtxLHFnywgdmV5YSB1c2VycHRyIHZleWEgdXp1bmx1ayBnZcOnZXJzaXouIGF5Z8SxdC4gIgotI34gIiVzIgotCi0jfiBtc2dpZCAiIgotI34gIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiBOb3QgZW5vdWdoIG1lbW9yeS4iCi0jfiBtc2dzdHIgIlZpZHlvIMOnZXJ2ZXZlc2kgYXlnxLF0dGFuICclcycgYWzEsW5hbWFkxLEuIFlldGVyc2l6IGJlbGxlay4iCi0KLSN+IG1zZ2lkICJpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGVucXVldWUgYSB1c2VyIHBvaW50ZXIgYnVmZmVyLiBkZXZpY2UgJXMuIgotI34gbXNnc3RyICIiCi0jfiAia3VsbGFuxLFjxLEgYXJhYmVsbGXEn2luaSBrdXlydcSfYSBzb2ttYWsgacOnaW4geWV0ZXJzaXogYmVsbGVrLiBheWfEsXQgJXMuIgotCi0jfiBtc2dpZCAiTm8gZnJlZSBidWZmZXJzIGZvdW5kIGluIHRoZSBwb29sIGF0IGluZGV4ICVkLiIKLSN+IG1zZ3N0ciAiRGl6aW5kZWtpICVkIGhhdnV6ZGEgYm/FnyBiZWxsZWsgYnVsdW5hbWFkxLEuIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJBcmFiZWxsZWsgYXlnxLF0dGFuICclcycgYWzEsW5hbcSxeW9yLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgZW5vdWdoIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIllldGVybGkgYmVsbGVrIGF5Z8SxdHRhbiAnJXMnIGFsxLFuYW3EsXlvci4iCi0KLSN+IG1zZ2lkICJFcnJvciBzdGFydGluZyBzdHJlYW1pbmcgY2FwdHVyZSBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAiQXlnxLF0dGFuICclcycgYWthbiBnw7Zyw7xudMO8IGJhxZ9sYXTEsWxhbWFkxLEuIgotCi0jfiBtc2dpZCAiRXJyb3Igc3RvcHBpbmcgc3RyZWFtaW5nIGNhcHR1cmUgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIkF5Z8SxdHRhbiAnJXMnIGFrYW4gZ8O2csO8bnTDvCBkdXJkdXJ1bGFtYWTEsS4iCmRpZmYgLS1naXQgYS9wby91ay5nbW8gYi9wby91ay5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYTIxMmMuLjAwMDAwMDAKLS0tIGEvcG8vdWsuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdWsucG8gYi9wby91ay5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk3NmVhZS4uMDAwMDAwMAotLS0gYS9wby91ay5wbworKysgL2Rldi9udWxsCkBAIC0xLDg1MCArMCwwIEBACi0jIFVrcmFpbmlhbiB0cmFuc2xhdGlvbiB0byBnc3QtcGx1Z2lucy4KLSMgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ3N0LXBsdWdpbnMtZ29vZCBwYWNrYWdlLgotIwotIyBNYXhpbSBWLiBEeml1bWFuZW5rbyA8ZHppdW1hbmVua29AZ21haWwuY29tPiwgMjAwNC0yMDA3LgotIyBZdXJpIENob3Jub2l2YW4gPHl1cmNob3JAdWtyLm5ldD4sIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuNy4yXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IGh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTctMDItMjMgMTU6MTYrMDIwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTYtMDItMjAgMTc6MjcrMDIwMFxuIgotIkxhc3QtVHJhbnNsYXRvcjogWXVyaSBDaG9ybm9pdmFuIDx5dXJjaG9yQHVrci5uZXQ+XG4iCi0iTGFuZ3VhZ2UtVGVhbTogVWtyYWluaWFuIDx0cmFuc2xhdGlvbi10ZWFtLXVrQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIKLSJMYW5ndWFnZTogdWtcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLSJYLUdlbmVyYXRvcjogTG9rYWxpemUgMS41XG4iCi0iUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAi0J3QtSDQt9C90LDQudC00LXQvdC+INGB0LXRgNCy0LXRgNCwIEphY2siCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgItCf0L7QvNC40LvQutCwINC/0YDQuCDQtNC10LrQvtC00YPQstCw0L3QvdGWINC30L7QsdGA0LDQttC10L3QvdGPIEpQRUciCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIsKrJXPCuywgJXMiCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0Lcn0ZTQtNC90LDRgtC40YHRjCDQtyDRgdC10YDQstC10YDQvtC8IgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgItCd0LUg0LLQutCw0LfQsNC90L4g0LDQtNGA0LXRgdGDIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgItCh0LXRgNCy0LXRgNC+0Lwg0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjyDQv9C+0LfQuNGG0ZbRjtCy0LDQvdC90Y8uIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0LjQt9C90LDRh9C40YLQuCDQsNC00YDQtdGB0YMg0YHQtdGA0LLQtdGA0LAg0LfQsCDQvdCw0LfQstC+0Y4uIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0Lcn0ZTQtNC90LDQvdC90Y8g0Lcg0YHQtdGA0LLQtdGA0L7QvC4iCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDQvdCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8g0LHQtdC30L/QtdGH0L3QvtCz0L4g0LfigJnRlNC00L3QsNC90L3Rjy4iCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0i0KHRgtCw0LvQsNGB0Y8g0L/QvtC80LjQu9C60LAg0YDQvtCx0L7RgtC4INC3INC80LXRgNC10LbQtdGOINCw0LHQviDQt+KAmdGU0LTQvdCw0L3QvdGPINCx0YPQu9C+INC90LXRgdC/0L7QtNGW0LLQsNC90L4g0YDQvtC30ZbRgNCy0LDQvdC+INC3ICIKLSLQsdC+0LrRgyDRgdC10YDQstC10YDQsC4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgItCh0LXRgNCy0LXRgNC+0Lwg0L3QsNC00ZbRgdC70LDQvdC+INC/0L7QvNC40LvQutC+0LLRliDQtNCw0L3Rli4iCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIiIKLSLQndC1INCy0LrQsNC30LDQvdC+INCw0LHQviDQstC60LDQt9Cw0L3QviDQvdC10LrQvtGA0LXQutGC0L3QuNC5INCy0YXRltC0INC30LLRg9C60L7QstC40YUg0LTQsNC90LjRhSwgQVZJLdC/0L7RgtGW0Log0LHRg9C00LUgIgotItC/0L7RiNC60L7QtNC20LXQvdC+LiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAi0KTQsNC50Lsg0L3QtSDQvNGW0YHRgtC40YLRjCDQv9C+0YLQvtC60ZbQsiwg0Y/QutGWINC80L7QttC90LAg0LLRltC00YLQstC+0YDQuNGC0LguIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLQpNCw0LnQuyDRlCDQvdC10LrQvtGA0LXQutGC0L3QuNC8LCDQudC+0LPQviDQvdC1INC80L7QttC90LAg0LLRltC00YLQstC+0YDQuNGC0LguIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLSLQktGW0LTRgtCy0L7RgNC10L3QvdGPINC/0L7RgtC+0LrRgyDQtNCw0L3QuNGFINC90LXQvNC+0LbQu9C40LLQtSwg0L7RgdC60ZbQu9GM0LrQuCDQtNCw0L3RliDQt9Cw0YjQuNGE0YDQvtCy0LDQvdC+INC30LAg0LTQvtC/0L7QvNC+0LPQvtGOICIKLSJQbGF5UmVhZHkgRFJNLiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi0KTQsNC50Lsg0L/QvtGI0LrQvtC00LbQtdC90L4sINC50L7Qs9C+INC90LUg0LzQvtC20L3QsCDQstGW0LTRgtCy0L7RgNC40YLQuC4iCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgItCd0LXQutC+0YDQtdC60YLQvdC40Lkg0YDQvtC30LzRltGAINC10LvQtdC80LXQvdGC0LDRgNC90L7Qs9C+INGE0YDQsNCz0LzQtdC90YLQsC4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgItCk0LDQudC7INC90LXQv9C+0LLQvdC40LksINC50L7Qs9C+INC90LUg0LzQvtC20L3QsCDQstGW0LTRgtCy0L7RgNC40YLQuC4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIiIKLSLQmdC80L7QstGW0YDQvdC+LCDQstGW0LTQtdC+0LTQsNC90ZYg0YbRjNC+0LPQviDRhNCw0LnQu9CwINC90LUg0LzQvtC20L3QsCDQsdGD0LTQtSDQstGW0LTRgtCy0L7RgNC40YLQuCDQvdCw0LvQtdC20L3QuNC8INGH0LjQvdC+0LwuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgItCk0LDQudC7INC80ZbRgdGC0LjRgtGMINC90LDQtNGC0L4g0LHQsNCz0LDRgtC+INC/0L7RgtC+0LrRltCyLiDQktGW0LTRgtCy0L7RgNGO0Y7RgtGM0YHRjyDQu9C40YjQtSDQv9C10YDRiNGWICVkIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSLQndC1INC30L3QsNC50LTQtdC90L4g0L/RltC00YLRgNC40LzRg9Cy0LDQvdC40YUg0L/QvtGC0L7QutGW0LIuINCZ0LzQvtCy0ZbRgNC90L4sINCy0LDQvCDRgdC70ZbQtCDQstGB0YLQsNC90L7QstC40YLQuCDQvNC+0LTRg9C70YwgUlRTUCAiCi0iR1N0cmVhbWVyINC00LvRjyDQstGW0LTRgtCy0L7RgNC10L3QvdGPINC/0L7RgtC+0LrRltCyIFJlYWwgbWVkaWEuIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBhbGxvdyBtb3JlIHRyYW5zcG9ydCAiCi0icHJvdG9jb2xzIG9yIG1heSBvdGhlcndpc2UgYmUgbWlzc2luZyB0aGUgcmlnaHQgR1N0cmVhbWVyIFJUU1AgZXh0ZW5zaW9uICIKLSJwbHVnaW4uIgotbXNnc3RyICIiCi0i0J3QtSDQt9C90LDQudC00LXQvdC+INC/0ZbQtNGC0YDQuNC80YPQstCw0L3QuNGFINC/0L7RgtC+0LrRltCyLiDQmdC80L7QstGW0YDQvdC+LCDQstCw0Lwg0YHQu9GW0LQg0YPQstGW0LzQutC90YPRgtC4INC00L7QtNCw0YLQutC+0LLRliAiCi0i0L/RgNC+0YLQvtC60L7Qu9C4INC/0LXRgNC10LTQsNCy0LDQvdC90Y8g0LTQsNC90LjRhSDQsNCx0L4g0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0LTQvtC00LDRgtC60L7QstC40Lkg0LzQvtC00YPQu9GMIFJUU1AgR1N0cmVhbWVyLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLSLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0L/RgNC40YHRgtGA0ZbQuSDQtNC70Y8g0LLRltC00YLQstC+0YDQtdC90L3Rjy4g0J/RgNC40YHRgtGA0ZbQuSDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTRgtGM0YHRjyAiCi0i0YHRgtC+0YDQvtC90L3RjNC+0Y4g0L/RgNC+0LPRgNCw0LzQvtGOLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0i0J3QtSDQstC00LDQu9C+0YHRjyDQstGW0LTQutGA0LjRgtC4INC/0YDQuNGB0YLRgNGW0Lkg0LTQu9GPINCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8uINCjINCy0LDRgSDQvdC10LTQvtGB0YLQsNGC0L3RjNC+INC/0YDQsNCyINC00LvRjyAiCi0i0LLRltC00LrRgNC40YLRgtGPINC/0YDQuNGB0YLRgNC+0Y4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDQv9GA0LjRgdGC0YDRltC5INC00LvRjyDQstGW0LTRgtCy0L7RgNC10L3QvdGPLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0L/RgNC40YHRgtGA0ZbQuSDQtNC70Y8g0LLRltC00YLQstC+0YDQtdC90L3Rjy4g0KbRjyDQstC10YDRgdGW0Y8gT3BlbiBTb3VuZCBTeXN0ZW0g0L3QtSAiCi0i0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8g0YbQuNC8INC10LvQtdC80LXQvdGC0L7QvC4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi0JLRltC00YLQstC+0YDQtdC90L3RjyDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPINGG0LjQvCDQt9Cy0YPQutC+0LLQuNC8INC/0YDQuNGB0YLRgNC+0ZTQvC4iCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgItCf0L7QvNC40LvQutCwINCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8g0LfQstGD0LrRgy4iCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgItCX0LDQv9C40YEg0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjyDRhtC40Lwg0LfQstGD0LrQvtCy0LjQvCDQv9GA0LjRgdGC0YDQvtGU0LwuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0LfQsNC/0LjRgdGD0LLQsNC90L3RjyDQt9GWINC30LLRg9C60L7QstC+0LPQviDQv9GA0LjRgdGC0YDQvtGOLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDQv9GA0LjRgdGC0YDRltC5INC00LvRjyDQt9Cw0L/QuNGB0YMuINCjINCy0LDRgSDQvdC10LTQvtGB0YLQsNGC0L3RjNC+INC/0YDQsNCyINC00LvRjyAiCi0i0LLRltC00LrRgNC40YLRgtGPINC/0YDQuNGB0YLRgNC+0Y4uIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0L/RgNC40YHRgtGA0ZbQuSDQtNC70Y8g0LfQsNC/0LjRgdGDLiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICLQn9GA0LjRgdGC0YDRltC5IENvcmVBdWRpbyDQvdC1INC30L3QsNC50LTQtdC90L4iCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDQv9GA0LjRgdGC0YDRltC5IENvcmVBdWRpbyIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgItCX0LDQv9C40YEg0LTQttC10YDQtdC70LAiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICLQnNGW0LrRgNC+0YTQvtC9IgotCi1tc2dpZCAiTGluZSBJbiIKLW1zZ3N0ciAi0JvRltC90ZbQudC90LjQuSDQstGF0ZbQtCIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICLQktCx0YPQtNC+0LLQsNC90LjQuSDQmtCUIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgItCS0YXRltC0IFNQRElGIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgItCS0YXRltC0IEFVWCAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgItCS0YXRltC0IEFVWCAyIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgItCf0LXRgtC70Y8g0LrQvtC00LXQutCwIgotCi1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICLQn9C10YLQu9GPIFN1blZUUyIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAi0JPRg9GH0L3RltGB0YLRjCIKLQotbXNnaWQgIkdhaW4iCi1tc2dzdHIgItCf0ZbQtNGB0LjQu9C10L3QvdGPIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAi0JzQvtC90ZbRgtC+0YAiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICLQktCx0YPQtNC+0LLQsNC90LjQuSDQtNC40L3QsNC80ZbQuiIKLQotbXNnaWQgIkhlYWRwaG9uZSIKLW1zZ3N0ciAi0J3QsNCy0YPRiNC90LjQutC4IgotCi1tc2dpZCAiTGluZSBPdXQiCi1tc2dzdHIgItCb0ZbQvdGW0LnQvdC40Lkg0LLQuNGF0ZbQtCIKLQotbXNnaWQgIlNQRElGIE91dCIKLW1zZ3N0ciAi0JLQuNGF0ZbQtCBTUERJRiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAi0JLQuNGF0ZbQtCBBVVggMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAi0JLQuNGF0ZbQtCBBVVggMiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nICVkIGJ5dGVzIGZyb20gZGV2aWNlICclcycuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GW0LQg0YfQsNGBINGB0L/RgNC+0LHQuCDRh9C40YLQsNC90L3RjyAlZCDQsdCw0LnRgtGW0LIg0Lcg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0i0J3QtSDQstC00LDRlNGC0YzRgdGPINC+0YLRgNC40LzQsNGC0Lgg0YHQv9C40YHQvtC6INGD0YHRltGFINC80L7QttC70LjQstC40YUg0LLRltC00LXQvtGE0L7RgNC80LDRgtGW0LIsINGP0LrRliDQv9GW0LTRgtGA0LjQvNGD0ZQgIgotItC/0YDQuNGB0YLRgNGW0LkgXCIlc1wiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC/0L7QsuKAmdGP0LfQsNGC0Lgg0LHRg9GE0LXRgNC4INC3INC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAi0JTRgNCw0LnQstC10YAg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsg0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZQg0LzQtdGC0L7QtCDQstCy0LXQtNC10L3QvdGPLdCy0LjQstC10LTQtdC90L3RjyDQtNCw0L3QuNGFICVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiIgotItCU0YDQsNC50LLQtdGAINC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7INC90LUg0L/RltC00YLRgNC40LzRg9GUINC20L7QtNC10L0g0LLRltC00L7QvNC40Lkg0LzQtdGC0L7QtCDQstCy0LXQtNC10L3QvdGPLdCy0LjQstC10LTQtdC90L3RjyAiCi0i0LTQsNC90LjRhS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgYnVzeSIKLW1zZ3N0ciAi0J/RgNC40YHRgtGA0ZbQuSDCqyVzwrsg0LfQsNC50L3Rj9GC0L4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgItCf0YDQuNGB0YLRgNGW0LkgXCIlc1wiINC90LUg0LfQtNCw0YLQvdC40Lkg0LfQsNGF0L7Qv9C70Y7QstCw0YLQuCDQstGW0LTQtdC+INGDINGE0L7RgNC80LDRgtGWICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICLQn9GA0LjRgdGC0YDRltC5IFwiJXNcIiDQvdC1INC30LTQsNGC0L3QuNC5INC30LDRhdC+0L/Qu9GO0LLQsNGC0Lgg0LLRltC00LXQviDRgyDQstC60LDQt9Cw0L3QvtC80YMg0YTQvtGA0LzQsNGC0ZYiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiIgotItCjINC/0YDQuNGB0YLRgNC+0Zcgwqslc8K7INC90LUg0L/QtdGA0LXQtNCx0LDRh9C10L3QviDQvNC+0LbQu9C40LLQvtGB0YLRliDQstC40LrQvtGA0LjRgdGC0LDQvdC90Y8g0YDQvtC30YDQuNCy0L3QuNGFINC/0LvQvtGJ0LjQvSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQv9Cw0YDQsNC80LXRgtGA0Lgg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsuIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0i0JLRltC00LXQvtC/0YDQuNGB0YLRgNC+0ZTQvCDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlNGC0YzRgdGPINC90L7QstC1INC30L3QsNGH0LXQvdC90Y8g0L/QsNGA0LDQvNC10YLRgNCwINGH0LDRgdGC0L7RgtC4INC60LDQtNGA0ZbQsi4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICLQktGW0LTQtdC+0L/RgNC40YHRgtGA0L7RlNC8INC90LUg0L3QsNC00LDQvdC+INC00LDQvdC40YUg0YnQvtC00L4g0YTQvtGA0LzQsNGC0YMg0LLQuNCy0LXQtNC10L3QvdGPLiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICLQktGW0LTQtdC+0L/RgNC40YHRgtGA0L7RlNC8INC/0L7QstC10YDQvdGD0YLQviDQvdC10LrQvtGA0LXQutGC0L3RliDRgNC+0LfQvNGW0YDQvdC+0YHRgtGWLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICLQlNGA0LDQudCy0LXRgCDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuyDQvdC1INC/0ZbQtNGC0YDQuNC80YPRlCDQvNC10YLQvtC0INGH0LXRgNC10LfRgNGP0LTQutC+0LLQvtCz0L4g0LLQuNCy0LXQtNC10L3QvdGPLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQuIgotbXNnc3RyICLQktGW0LTQtdC+0L/RgNC40YHRgtGA0ZbQuSDQstC40LrQvtGA0LjRgdGC0L7QstGD0ZQg0L3QtdC/0ZbQtNGC0YDQuNC80YPQstCw0L3QuNC5INGE0L7RgNC80LDRgiDQv9GW0LrRgdC10LvRltCyLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC90LDQu9Cw0YjRgtGD0LLQsNGC0Lgg0LLQsdGD0LTQvtCy0LDQvdC40Lkg0LHRg9GE0LXRgC4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgItCS0ZbQtNC10L7Qv9GA0LjRgdGC0YDQvtGU0Lwg0L3QtSDQt9Cw0L/RgNC+0L/QvtC90L7QstCw0L3QviDQttC+0LTQvdC+0LPQviDRgNC+0LfQvNGW0YDRgyDQsdGD0YTQtdGA0LAuIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAi0J3QtdC80LDRlCDQv9GW0LTQu9C10LPQu9C+0LPQviDQsdGD0YTQtdGA0LAg0LTQu9GPINGW0LzQv9C+0YDRgtGD0LLQsNC90L3RjyDQtNCw0L3QuNGFLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0L7RgtGA0LjQvNCw0L3QvdGPINC00LDQvdC40YUg0YnQvtC00L4g0L/RgNC40LnQvNCw0YfQsCAlZCDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RltC0INGH0LDRgSDRgdC/0YDQvtCx0Lgg0L7RgtGA0LjQvNCw0L3QvdGPINC00LDQvdC40YUg0YnQvtC00L4g0LzQvtC20LvQuNCy0L7RgdGC0LXQuSDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLQn9GA0LjRgdGC0YDRltC5IMKrJXPCuyDQvdC1INGUINC/0YDQuNC50LzQsNGH0LXQvC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L/RgNC40LnQvdGP0YLRliDRgNCw0LTRltC+0LTQsNC90ZYg0Lcg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstGB0YLQsNC90L7QstC40YLQuCDQstCy0ZbQtCAlZCDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LfQvNGW0L3QuNGC0Lgg0YHRgtCw0L0g0LLQuNC80LjQutCw0L3QvdGPINC30LLRg9C60YMg0L3QsCDQv9GA0LjRgdGC0YDQvtGXIMKrJXPCuy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQv9C+0YLRgNGW0LHQvdC40Lkg0L7QsdGB0Y/QsyDQv9Cw0LzigJnRj9GC0ZYuIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQv9C+0YLRgNGW0LHQvdC40Lkg0L7QsdGB0Y/QsyDQv9Cw0LzigJnRj9GC0ZYuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSLQl9Cw0YHRltCxINC/0LXRgNC10YLQstC+0YDQtdC90L3RjyDQvdCwINC/0YDQuNGB0YLRgNC+0ZcgJXMg0L3QtSDQvNC+0LbQtSDQvtGC0YDQuNC80YPQstCw0YLQuCDQtNCw0L3RliDRgyDQv9GW0LTRgtGA0LjQvNGD0LLQsNC90L7QvNGDICIKLSLRhNC+0YDQvNCw0YLRliIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotItCX0LDRgdGW0LEg0L/QtdGA0LXRgtCy0L7RgNC10L3QvdGPINC90LAg0L/RgNC40YHRgtGA0L7RlyAlcyDQvdC1INC80L7QttC1INCy0LjQstC+0LTQuNGC0Lgg0LTQsNC90ZYg0YMg0L/RltC00YLRgNC40LzRg9Cy0LDQvdC+0LzRgyAiCi0i0YTQvtGA0LzQsNGC0ZYiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSLQl9Cw0YHRltCxINC60L7QtNGD0LLQsNC90L3RjyDQvdCwINC/0YDQuNGB0YLRgNC+0ZcgJXMg0L3QtSDQvNC+0LbQtSDQvtGC0YDQuNC80YPQstCw0YLQuCDQtNCw0L3RliDRgyDQv9GW0LTRgtGA0LjQvNGD0LLQsNC90L7QvNGDICIKLSLRhNC+0YDQvNCw0YLRliIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLSLQl9Cw0YHRltCxINC60L7QtNGD0LLQsNC90L3RjyDQvdCwINC/0YDQuNGB0YLRgNC+0ZcgJXMg0L3QtSDQvNC+0LbQtSDQstC40LLQvtC00LjRgtC4INC00LDQvdGWINGDINC/0ZbQtNGC0YDQuNC80YPQstCw0L3QvtC80YMg0YTQvtGA0LzQsNGC0ZYiCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQt9Cw0L/QvtGH0LDRgtC60YPQstCw0YLQuCDQv9C+0YLRltC6INC00LXQutC+0LTRg9Cy0LDQvdC90Y8uIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0LHRgNC+0LHQuNGC0Lgg0LrQsNC00YAuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJFcnJvciBnZXR0aW5nIGNhcGFiaWxpdGllcyBmb3IgZGV2aWNlICclcyc6IEl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmICIKLSJpdCBpcyBhIHY0bDEgZHJpdmVyLiIKLW1zZ3N0ciAiIgotItCf0L7QvNC40LvQutCwINC/0YDQuCDQvtGC0YDQuNC80LDQvdC90ZYg0LzQvtC20LvQuNCy0L7RgdGC0LXQuSDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuzog0LTRgNCw0LnQstC10YAg0L3QtSDRlCDQtNGA0LDQudCy0LXRgNC+0Lwg0LTQu9GPICIKLSJ2NGwyLiDQn9C10YDQtdCy0ZbRgNGC0LUsINC80L7QttC1INGG0LUg0LTRgNCw0LnQstC10YAg0YLQuNC/0YMgdjRsMS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0LfQsNC/0LjRgtGWINCw0YLRgNC40LHRg9GC0ZbQsiDQstCy0L7QtNGDICVkINC/0YDQuNGB0YLRgNC+0Y4gJXMiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J/QvtC80LjQu9C60LAg0L/RgNC4INCy0YHRgtCw0L3QvtCy0LvQtdC90L3RliDQv9GA0LjQudC80LDRh9CwICVkINC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCf0L7QvNC40LvQutCwINC/0YDQuCDQt9Cw0L/QuNGC0ZYg0L3QvtGA0LzQuCDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQsNGC0YDQuNCx0YPRgtC4INGA0LXQs9GD0LvRj9GC0L7RgNGW0LIg0LrQtdGA0YPQstCw0L3QvdGPINC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINGW0LTQtdC90YLQuNGE0ZbQutGD0LLQsNGC0Lgg0L/RgNC40YHRgtGA0ZbQuSDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCm0LUg0L3QtSDQv9GA0LjRgdGC0YDRltC5IMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG9wZW4gZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINCy0ZbQtNC60YDQuNGC0Lgg0L/RgNC40YHRgtGA0ZbQuSDCqyVzwrsg0LTQu9GPINGH0LjRgtCw0L3QvdGPINGC0LAg0LfQsNC/0LjRgdGDLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgItCf0YDQuNGB0YLRgNGW0Lkgwqslc8K7INC90LUg0ZQg0L/RgNC40YHRgtGA0L7RlNC8INC30LDRhdC+0L/Qu9C10L3QvdGPLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAi0J/RgNC40YHRgtGA0ZbQuSDCqyVzwrsg0L3QtSDRlCDQv9GA0LjRgdGC0YDQvtGU0Lwg0LLQuNCy0LXQtNC10L3QvdGPINC00LDQvdC40YUuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICLQn9GA0LjRgdGC0YDRltC5IMKrJXPCuyDQvdC1INGUINC/0YDQuNGB0YLRgNC+0ZTQvCBNMk0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC30LTRg9Cx0LvRjtCy0LDRgtC4INC/0YDQuNGB0YLRgNGW0Lkgwqslc8K7INC00LvRjyDRh9C40YLQsNC90L3RjyDRgtCwINC30LDQv9C40YHRgy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0L3QvtGA0LzRgyDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L/QvtGC0L7Rh9C90YMg0YfQsNGB0YLQvtGC0YMg0L/RgNC40LnQvNCw0YfQsCDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQstGB0YLQsNC90L7QstC40YLQuCDQv9C+0YLQvtGH0L3RgyDRh9Cw0YHRgtC+0YLRgyDQv9GA0LjQudC80LDRh9CwINC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7INGDICVsdSDQk9GGLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0L7RgtGA0LjQvNCw0L3QvdGWINGB0LjQu9C4INGB0LjQs9C90LDQu9GDINC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi0J3QtSDQstC00LDQu9C+0YHRjyDQvtGC0YDQuNC80LDRgtC4INC30L3QsNGH0LXQvdC90Y8g0LLRltC0INC+0YDQs9Cw0L3RgyDQutC10YDRg9Cy0LDQvdC90Y8gJWQg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgdmFsdWUgJWQgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0i0J3QtSDQstC00LDQu9C+0YHRjyDQstGB0YLQsNC90L7QstC40YLQuCDQt9C90LDRh9C10L3QvdGPICVkINC00LvRjyDQvtGA0LPQsNC90YMg0LrQtdGA0YPQstCw0L3QvdGPICVkINC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQv9C+0YLQvtGH0L3QuNC5INCy0LLRltC0INC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiDQnNC+0LbQu9C40LLQviDRhtC10Lkg0L/RgNC40YHRgtGA0ZbQuSDigJQgIgotItGA0LDQtNGW0L4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0L/QvtGC0L7Rh9C90LjQuSDQstC40YXRltC0INC/0YDQuNGB0YLRgNC+0Y4gwqslc8K7LiDQnNC+0LbQu9C40LLQviDRhtC10Lkg0L/RgNC40YHRgtGA0ZbQuSDigJQgIgotItGA0LDQtNGW0L4uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0LLQuNGF0ZbQtCAlZCDQv9GA0LjRgdGC0YDQvtGOIMKrJXPCuy4iCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICLQl9C80ZbQvdCwINGA0L7Qt9C00ZbQu9GM0L3QvtGXINC30LTQsNGC0L3QvtGB0YLRliDQv9GA0Lgg0LLRltC00YLQstC+0YDQtdC90L3RliDRidC1INC90LUg0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8uIgotCi1tc2dpZCAiQ2Fubm90IG9wZXJhdGUgd2l0aG91dCBhIGNsb2NrIgotbXNnc3RyICLQoNC+0LHQvtGC0LAg0LHQtdC3INCz0L7QtNC40L3QvdC40LrQsCDQvdC10LzQvtC20LvQuNCy0LAiCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIHN0cmVhbSBlcnJvci4iCi0jfiBtc2dzdHIgItCS0L3Rg9GC0YDRltGI0L3RjyDQv9C+0LzQuNC70LrQsCDQv9C+0YLQvtC60YMg0LTQsNC90LjRhS4iCi0KLSN+IG1zZ2lkICJJbnRlcm5hbCBkYXRhIGZsb3cgZXJyb3IuIgotI34gbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQstC90YPRgtGA0ZbRiNC90YzQvtCz0L4g0L/QtdGA0LXQvdC10YHQtdC90L3RjyDQtNCw0L3QuNGFLiIKLQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAi0J/RgNC40YHRgtGA0ZbQuSDCqyVzwrsg0L3QtSDQvNC+0LbQtSDQt9Cw0YXQvtC/0LvRjtCy0LDRgtC4INCy0ZbQtNC10L7QtNCw0L3RliIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRgdGC0LDQvdC+0LLQuNGC0Lgg0Lcn0ZTQtNC90LDQvdC90Y8g0ZbQtyDQt9Cy0YPQutC+0LLQuNC8INGB0LXRgNCy0LXRgNC+0LwuIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgItCf0L7QvNC40LvQutCwINC/0YDQuCDQt9Cw0L/QuNGC0ZYg0LzQvtC20LvQuNCy0L7RgdGC0LXQuSDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQtdGA0LLQtdGA0LAiCi0KLSN+IG1zZ2lkICJCYXNzIgotI34gbXNnc3RyICLQndC40LfRjNC60ZYiCi0KLSN+IG1zZ2lkICJUcmVibGUiCi0jfiBtc2dzdHIgItCS0LjRgdC+0LrRliIKLQotI34gbXNnaWQgIlN5bnRoIgotI34gbXNnc3RyICLQodC40L3RgtC10LfQsNGC0L7RgCIKLQotI34gbXNnaWQgIlBDTSIKLSN+IG1zZ3N0ciAi0JrQhtCcIgotCi0jfiBtc2dpZCAiU3BlYWtlciIKLSN+IG1zZ3N0ciAi0JTQuNC90LDQvNGW0LoiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICLQm9GW0L3RltC50L3QuNC5INCy0YXRltC0IgotCi0jfiBtc2dpZCAiQ0QiCi0jfiBtc2dzdHIgItCa0JQiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAi0JzRltC60YjQtdGAIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgItCa0IbQnC0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICLQl9Cw0L/QuNGBIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAi0JLRhS7Qv9GW0LTRgdC40LvQtdC90L3RjyIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICLQktC40YUu0L/RltC00YHQuNC70LXQvdC90Y8iCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgItCb0ZbQvdGW0LnQvdC40LktMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAi0JvRltC90ZbQudC90LjQuS0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICLQm9GW0L3RltC50L3QuNC5LTMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgItCm0LjRhNGA0L7QstC40LktMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAi0KbQuNGE0YDQvtCy0LjQuS0yIgotCi0jfiBtc2dpZCAiRGlnaXRhbC0zIgotI34gbXNnc3RyICLQptC40YTRgNC+0LLQuNC5LTMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAi0JLRhS7RgtC10LvQtdGE0L7QvSIKLQotI34gbXNnaWQgIlBob25lLW91dCIKLSN+IG1zZ3N0ciAi0JLQuNGFLtGC0LXQu9C10YTQvtC9IgotCi0jfiBtc2dpZCAiVmlkZW8iCi0jfiBtc2dzdHIgItCS0ZbQtNC10L4iCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAi0KDQsNC00ZbQviIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDQv9GA0LjRgdGC0YDRltC5INC00LvRjyDQutC10YDRg9Cy0LDQvdC90Y8g0YDQtdCz0YPQu9GP0YLQvtGA0LDQvNC4INC80ZbQutGI0LXRgNCwLiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gItCd0LUg0LLQtNCw0LvQvtGB0Y8g0LLRltC00LrRgNC40YLQuCDQv9GA0LjRgdGC0YDRltC5INC00LvRjyDQutC10YDRg9Cy0LDQvdC90Y8g0YDQtdCz0YPQu9GP0YLQvtGA0LDQvNC4INC80ZbQutGI0LXRgNCwLiDQptGPICIKLSN+ICLQstC10YDRgdGW0Y8gT3BlbiBTb3VuZCBTeXN0ZW0g0L3QtSDQv9GW0LTRgtGA0LjQvNGD0ZTRgtGM0YHRjyDRhtC40Lwg0LXQu9C10LzQtdC90YLQvtC8LiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAi0J7RgdC90L7QstC90LjQuSIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICLQn9C10YDQtdC00L3RltC5IgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAi0JfQsNC00L3RltC5IgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi0J3QsNCy0YPRiNC90LjQutC4IgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICLQptC10L3RgtGA0LDQu9GM0L3QuNC5IgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICJMRkUiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAi0J7QsSfRlNC80L3QuNC5IgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAi0JHQvtC60L7QstC40LkiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICLQktC40YXRltC0IEFVWCIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICLQn9GA0L7RgdGC0L7RgNC+0LLQsCDQs9C70LjQsdC40L3QsCIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAi0J/RgNC+0YHRgtC+0YDQvtCy0LjQuSDRhtC10L3RgtGAIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAi0J/RgNC+0YHRgtC+0YDQvtCy0LUg0L/QvtC60YDQsNGJ0LXQvdC90Y8iCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgItCi0LXQu9C10YTQvtC9IgotCi0jfiBtc2dpZCAiVmlkZW8gSW4iCi0jfiBtc2dzdHIgItCS0ZbQtNC10L7QstGF0ZbQtCIKLQotI34gbXNnaWQgIkFVWCBJbiIKLSN+IG1zZ3N0ciAi0JLRhdGW0LQgQVVYIgotCi0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgItCf0ZbQtNGB0LjQu9C10L3QvdGPINC30LDQv9C40YHRgyIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICLQn9GW0LTRgdC40LvQtdC90L3RjyDQstC40YXQvtC00YMiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICLQn9GW0LTRgdC40LvQtdC90L3RjyDQvNGW0LrRgNC+0YTQvtC90LAiCi0KLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICLQlNGW0LDQs9C90L7RgdGC0LjQutCwIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAi0J/RltC00YHQuNC70LXQvdC90Y8g0LHQsNGB0ZbQsiIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICLQn9C+0YDRgtC4INCy0ZbQtNGC0LLQvtGA0LXQvdC90Y8iCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAi0JLRhdGW0LQiCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAi0KHQv9C+0YHRgtC10YDQtdC20LXQvdC90Y8g0LfQsCDQtNC20LXRgNC10LvQvtC8IgotCi0jfiBtc2dpZCAiS2V5Ym9hcmQgQmVlcCIKLSN+IG1zZ3N0ciAi0JPRg9C00L7QuiDQutC70LDQstGW0LDRgtGD0YDQuCIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAi0IbQvNGW0YLQsNGG0ZbRjyDRgdGC0LXRgNC10L4iCi0KLSN+IG1zZ2lkICJTdGVyZW8iCi0jfiBtc2dzdHIgItCh0YLQtdGA0LXQviIKLQotI34gbXNnaWQgIlN1cnJvdW5kIFNvdW5kIgotI34gbXNnc3RyICLQntCxJ9GU0LzQvdC40Lkg0LfQstGD0LoiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEdhaW4iCi0jfiBtc2dzdHIgItCf0ZbQtNGB0LjQu9C10L3QvdGPINC80ZbQutGA0L7RhNC+0L3QsCIKLQotI34gbXNnaWQgIlNwZWFrZXIgU291cmNlIgotI34gbXNnc3RyICLQntGB0L3QvtCy0L3QuNC5INC00LjQvdCw0LzRltC6IgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgItCe0YHQvdC+0LLQvdC40Lkg0LzRltC60YDQvtGE0L7QvSIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkphY2siCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgItCm0LXQvdGC0YDQsNC70YzQvdC40LkvTEZFIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAi0KHRgtC10YDQtdC+0LzRltC60YjQtdGAIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgItCc0L7QvdC+0LzRltC60YjQtdGAIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICLQnNGW0LrRiNC10YAg0LLRhS4g0LTQsNC90LjRhSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAi0JzRltC60YDQvtGE0L7QvSAxIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICLQnNGW0LrRgNC+0YTQvtC9IDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAi0KbQuNGE0YDQvtCy0LjQuSDQstC40YXRltC0IgotCi0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAi0KbQuNGE0YDQvtCy0LjQuSDQstGF0ZbQtCIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAi0JzQvtC00LXQvCIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgItCT0LDRgNC90ZbRgtGD0YDQsCIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICLQhtC90YjQtSIKLQotI34gbXNnaWQgIk5vbmUiCi0jfiBtc2dzdHIgItCd0LXQvNCw0ZQiCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAi0KPQstGW0LzQutC9LiIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAi0JLQuNC80LrQvS4iCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICLQktC40LzQutC90YPRgtC4INC30LLRg9C6IgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAi0KjQstC40LTQutC+IgotCi0jfiBtc2dpZCAiVmVyeSBMb3ciCi0jfiBtc2dzdHIgItCU0YPQttC1INC90LjQt9GM0LrQsCIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAi0J3QuNC30YzQutCwIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICLQodC10YDQtdC00L3RjyIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgItCS0LjRgdC+0LrQsCIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAi0JTRg9C20LUg0LLQuNGB0L7QutCwIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAi0J/RgNC+0LzQuNGB0LvQvtCy0LAiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBNaWNyb3Bob25lIgotI34gbXNnc3RyICLQnNGW0LrRgNC+0YTQvtC9INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIEluIgotI34gbXNnc3RyICLQm9GW0L3RltC50L3QuNC5INCy0YXRltC0INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICLQktC40YXRltC0INC90LDQstGD0YjQvdC40LrRltCyINC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAi0JvRltC90ZbQudC90LjQuSDQstC40YXRltC0INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJHcmVlbiBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCX0LXQu9C10L3QuNC5INGA0L7Qt9C90ZbQvCIKLQotI34gbXNnaWQgIlBpbmsgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQoNC+0LbQtdCy0LjQuSDRgNC+0LfQvdGW0LwiCi0KLSN+IG1zZ2lkICJCbHVlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KHQuNC90ZbQuSDRgNC+0LfQvdGW0LwiCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCR0ZbQu9C40Lkg0YDQvtC30L3RltC8IgotCi0jfiBtc2dpZCAiQmxhY2sgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQp9C+0YDQvdC40Lkg0YDQvtC30L3RltC8IgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCh0ZbRgNC40Lkg0YDQvtC30L3RltC8IgotCi0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0J/QvtC80LDRgNCw0L3Rh9C10LLQuNC5INGA0L7Qt9C90ZbQvCIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCn0LXRgNCy0L7QvdC40Lkg0YDQvtC30L3RltC8IgotCi0jfiBtc2dpZCAiWWVsbG93IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0JbQvtCy0YLQuNC5INGA0L7Qt9C90ZbQvCIKLQotI34gbXNnaWQgIkdyZWVuIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0JfQtdC70LXQvdC40Lkg0YDQvtC30L3RltC8INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KDQvtC20LXQstC40Lkg0YDQvtC30L3RltC8INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KHQuNC90ZbQuSDRgNC+0LfQvdGW0Lwg0L/QtdGA0LXQtNC90YzQvtGXINC/0LDQvdC10LvRliIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0JHRltC70LjQuSDRgNC+0LfQvdGW0Lwg0L/QtdGA0LXQtNC90YzQvtGXINC/0LDQvdC10LvRliIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0KfQvtGA0L3QuNC5INGA0L7Qt9C90ZbQvCDQv9C10YDQtdC00L3RjNC+0Zcg0L/QsNC90LXQu9GWIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgItCh0ZbRgNC40Lkg0YDQvtC30L3RltC8INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJPcmFuZ2UgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQn9C+0LzQsNGA0LDQvdGH0LXQstC40Lkg0YDQvtC30L3RltC8INC/0LXRgNC10LTQvdGM0L7RlyDQv9Cw0L3QtdC70ZYiCi0KLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLQp9C10YDQstC+0L3QuNC5INGA0L7Qt9C90ZbQvCDQv9C10YDQtdC00L3RjNC+0Zcg0L/QsNC90LXQu9GWIgotCi0jfiBtc2dpZCAiWWVsbG93IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi0JbQvtCy0YLQuNC5INGA0L7Qt9C90ZbQvCDQv9C10YDQtdC00L3RjNC+0Zcg0L/QsNC90LXQu9GWIgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAi0KDQvtC30LPQvtGA0L3Rg9GC0Lgg0LLQuNGF0ZbQtCIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgItCe0LHigJnRlNC00L3QsNC90L3RjyDQutCw0L3QsNC70ZbQsiIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgSW5wdXQiCi0jfiBtc2dzdHIgItCS0YXRltC0INCy0ZbRgNGC0YPQsNC70YzQvdC+0LPQviDQvNGW0LrRiNC10YDQsCIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICLQktC40YXRltC0INCy0ZbRgNGC0YPQsNC70YzQvdC+0LPQviDQvNGW0LrRiNC10YDQsCIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgQ2hhbm5lbHMiCi0jfiBtc2dzdHIgItCa0LDQvdCw0LvQuCDQstGW0YDRgtGD0LDQu9GM0L3QvtCz0L4g0LzRltC60YjQtdGA0LAiCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMsINGE0YPQvdC60YbRltGPICVkIgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgItCk0YPQvdC60YbRltGPICVzIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAi0J7RgtGA0LjQvNCw0L3QviDQvdC10L7Rh9GW0LrRg9Cy0LDQvdC40Lkg0YDQvtC30LzRltGAINCx0LvQvtC60YMgJXUg0LfQsNC80ZbRgdGC0YwgJXUuIgotCi0jfiBtc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBvbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbQtCDRh9Cw0YEg0YHQv9GA0L7QsdC4INGH0LjRgtCw0L3QvdGPICVkINCx0LDQudGC0ZbQsiDQvdCwINC/0YDQuNGB0YLRgNC+0Zcgwqslc8K7LiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0L/QuNGC0LDRgtC4INCx0YPRhNC10YDQuCDQstGW0LQg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsuIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQndC1INCy0LTQsNC70L7RgdGPINC+0YLRgNC40LzQsNGC0Lgg0LLRltC00LXQvtC60LDQtNGA0Lgg0Lcg0L/RgNC40YHRgtGA0L7RjiDCqyVzwrsuIgotCi0jfiBtc2dpZCAiRmFpbGVkIGFmdGVyICVkIHRyaWVzLiBkZXZpY2UgJXMuIHN5c3RlbSBlcnJvcjogJXMiCi0jfiBtc2dzdHIgItCf0L7QvNC40LvQutCwINC/0ZbRgdC70Y8gJWQg0YHQv9GA0L7QsS4g0J/RgNC40YHRgtGA0ZbQuSAlcy4g0KHQuNGB0YLQtdC80L3QsCDQv9C+0LzQuNC70LrQsDogJXMiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tIENELiIKLSN+IG1zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINC/0YDQvtGH0LjRgtCw0YLQuCDQtyDQutC+0LzQv9Cw0LrRgi3QtNC40YHQutGDLiIKLQotI34gbXNnaWQgIkRpc2MgaXMgbm90IGFuIEF1ZGlvIENELiIKLSN+IG1zZ3N0ciAi0JTQuNGB0Log0L3QtSDRlCDQsNGD0LTRltC+INC60L7QvNC/0LDQutGCLdC00LjRgdC60L7QvC4iCi0KLSN+IG1zZ2lkICJUaGlzIGZpbGUgaXMgZW5jcnlwdGVkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLSN+IG1zZ3N0ciAi0KTQsNC50Lsg0LfQsNGI0LjRhNGA0L7QstCw0L3QuNC5INGC0LAg0L3QtSDQvNC+0LbQtSDQsdGD0YLQuCDQstGW0LTRgtCy0L7RgNC10L3QuNC5LiIKLQotI34gbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcy4nIgotI34gbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQsNGC0YDQuNCx0YPRgtC4INC+0YDQs9Cw0L3RltCyINC60LXRgNGD0LLQsNC90L3RjyDQv9GA0LjRgdGC0YDQvtGOIFwiJXNcIi4iCi0KLSN+IG1zZ2lkICIiCi0jfiAiVGhlIGJ1ZmZlciB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQsIG9yIHRoZSBpbmRleCBpcyBvdXQgb2YgYm91bmRzLCBvciBubyAiCi0jfiAiYnVmZmVycyBoYXZlIGJlZW4gYWxsb2NhdGVkIHlldCwgb3IgdGhlIHVzZXJwdHIgb3IgbGVuZ3RoIGFyZSBpbnZhbGlkLiAiCi0jfiAiZGV2aWNlICVzIgotI34gbXNnc3RyICIiCi0jfiAi0JHRg9GE0LXRgCDRhtGM0L7Qs9C+INGC0LjQv9GDINC90LUg0L/RltC00YLRgNC40LzRg9GU0YLRjNGB0Y8sINCw0LHQviDRltC90LTQtdC60YEg0L/QvtC30LAg0LzQtdC20LDQvNC4INC00ZbQsNC/0LDQt9C+0L3Rgywg0LDQsdC+ICIKLSN+ICLQsdGD0YTQtdGA0Lgg0YnQtSDQvdC1INCx0YPQu9C4INCy0LjQtNGW0LvQtdC90ZYsINCw0LHQviDQvdC10L/RgNCw0LLQuNC70YzQvdGWINC/0LDRgNCw0LzQtdGC0YDQuCB1c2VycHRyINGH0Lgg0LTQvtCy0LbQuNC90LAuICIKLSN+ICLQn9GA0LjRgdGC0YDRltC5ICVzIgotCi0jfiBtc2dpZCAiIgotI34gIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiBOb3QgZW5vdWdoIG1lbW9yeS4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQstGW0LTQtdC+0LrQsNC00YDQuCDQtyDQv9GA0LjRgdGC0YDQvtGOIFwiJXNcIi4g0J3QtdC00L7RgdGC0LDRgtC90YzQviDQv9Cw0Lwn0Y/RgtGWLiIKLQotI34gbXNnaWQgImluc3VmZmljaWVudCBtZW1vcnkgdG8gZW5xdWV1ZSBhIHVzZXIgcG9pbnRlciBidWZmZXIuIGRldmljZSAlcy4iCi0jfiBtc2dzdHIgIiIKLSN+ICLQndC10LTQvtGB0YLQsNGC0L3RjNC+INC/0LDQvCfRj9GC0ZYg0LTQu9GPINCy0YHRgtCw0LLQu9GP0L3QvdGPINGDINGH0LXRgNCz0YMg0LLQutCw0LfRltCy0L3QuNC60LAg0L3QsCDQsdGD0YTQtdGAICIKLSN+ICLQutC+0YDQuNGB0YLRg9Cy0LDRh9CwLiDQn9GA0LjRgdGC0YDRltC5ICVzLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBleGNoYW5nZSBkYXRhIHdpdGggZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0L7QsdC80ZbQvdGWINC00LDQvdC40LzQuCDQtyDQv9GA0LjRgdGC0YDQvtGU0LwgXCIlc1wiLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBzZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLSN+IG1zZ3N0ciAi0J3QtSDQstC00LDRlNGC0YzRgdGPINCy0YHRgtCw0L3QvtCy0LjRgtC4INC/0LDRgNCw0LzQtdGC0YDQuCDQv9GA0LjRgdGC0YDQvtGOIFwiJXNcIi4iCi0KLSN+IG1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZC8lZCBmcmFtZXMgcGVyIHNlY29uZCIKLSN+IG1zZ3N0ciAi0J/RgNC40YHRgtGA0ZbQuSBcIiVzXCIg0L3QtSDQt9C00LDRgtC90LjQuSDQt9Cw0YXQvtC/0LvRjtCy0LDRgtC4ICVkLyVkINC60LDQtNGA0ZbQsiDQt9CwINGB0LXQutGD0L3QtNGDIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGdldCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQndC1INCy0LTQsNGU0YLRjNGB0Y8g0L7RgtGA0LjQvNCw0YLQuCDQsdGD0YTQtdGA0Lgg0LLRltC0INC/0YDQuNGB0YLRgNC+0Y4gXCIlc1wiLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgZW5vdWdoIGJ1ZmZlcnMgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDQvtGC0YDQuNC80LDRgtC4INC00L7RgdGC0LDRgtC90YzQviDQsdGD0YTQtdGA0ZbQsiDQstGW0LQg0L/RgNC40YHRgtGA0L7RjiBcIiVzXCIuIgotCi0jfiBtc2dpZCAiRXJyb3Igc3RhcnRpbmcgc3RyZWFtaW5nIGNhcHR1cmUgZnJvbSBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgItCd0LUg0LLQtNCw0ZTRgtGM0YHRjyDRgNC+0LfQv9C+0YfQsNGC0Lgg0LfQsNGF0L7Qv9C70LXQvdC90Y8g0LrQsNC00YDRltCyINC3INC/0YDQuNGB0YLRgNC+0Y4gXCIlc1wiLiIKLQotI34gbXNnaWQgIkVycm9yIHN0b3BwaW5nIHN0cmVhbWluZyBjYXB0dXJlIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLQn9C+0LzQuNC70LrQsCDQv9GA0Lgg0LfRg9C/0LjQvdC10L3QvdGWINC30LDRhdC+0L/Qu9C10L3QvdGPINC60LDQtNGA0ZbQsiDQtyDQv9GA0LjRgdGC0YDQvtGOIFwiJXNcIi4iCmRpZmYgLS1naXQgYS9wby92aS5nbW8gYi9wby92aS5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZjc4NWQuLjAwMDAwMDAKLS0tIGEvcG8vdmkuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vdmkucG8gYi9wby92aS5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE3NDhiMS4uMDAwMDAwMAotLS0gYS9wby92aS5wbworKysgL2Rldi9udWxsCkBAIC0xLDc5MSArMCwwIEBACi0jIFZpZXRuYW1lc2UgVHJhbnNsYXRpb24gZm9yIEdTVCBQbHVnaW5zIEdvb2QuCi0jIELhuqNuIGThu4tjaCB0aeG6v25nIFZp4buHdCBkw6BuaCBjaG8gR1NUIFBsdWdpbnMgR29vZC4KLSMgQ29weXJpZ2h0IMKpIDIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnc3QtcGx1Z2lucy1nb29kIHBhY2thZ2UuCi0jIENseXRpZSBTaWRkYWxsIDxjbHl0aWVAcml2ZXJsYW5kLm5ldC5hdT4sIDIwMDUtMjAxMC4KLSMgVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT4sIDIwMTItMjAxNCwgMjAxNSwgMjAxNi4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QgMS43LjJcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogaHR0cDovL2J1Z3ppbGxhLmdub21lLm9yZy9cbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNy0wMi0yMyAxNToxNiswMjAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNi0wMi0yMSAwNzoyNSswNzAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgotIkxhbmd1YWdlOiB2aVxuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MTsgcGx1cmFsPTA7XG4iCi0iWC1MYW5ndWFnZS1UZWFtLVdlYnNpdGU6IDxodHRwOi8vdHJhbnNsYXRpb25wcm9qZWN0Lm9yZy90ZWFtL3ZpLmh0bWw+XG4iCi0iWC1HZW5lcmF0b3I6IEd0cmFuc2xhdG9yIDIuOTEuN1xuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgbcOheSBwaOG7pWMgduG7pSBKYWNrIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgZ2nhuqNpIG3DoyDhuqNuaCBKUEVHIgotCi0jLiBUUkFOU0xBVE9SUzogJ3NvbmcgdGl0bGUnIGJ5ICdhcnRpc3QgbmFtZScKLSMsIGMtZm9ybWF0Ci1tc2dpZCAiJyVzJyBieSAnJXMnIgotbXNnc3RyICLigJwlc+KAnSBi4bufaSDigJwlc+KAnSIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIGvhur90IG7hu5FpIHThu5tpIG3DoXkgcGjhu6VjIHbhu6UiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiS2jDtG5nIGPDsyBVUkwgbsOgbyDEkcaw4bujYyDEkeG6t3QuIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIk3DoXkgcGjhu6VjIHbhu6Uga2jDtG5nIGjhu5cgdHLhu6MgZGkgY2h1eeG7g24gduG7iyB0csOtIMSR4buNYy4iCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgdMOqbiBtw6F5IHBo4bulYyB24bulLiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgdGhp4bq/dCBs4bqtcCBr4bq/dCBu4buRaSB04bubaSBtw6F5IGNo4bunLiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBjw6BpIMSR4bq3dCBr4bq/dCBu4buRaSBhbiB0b8Ogbi4iCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICJDw7MgbOG7l2kgbeG6oW5nIMSRw6MgeOG6o3kgcmEsIGhv4bq3YyBtw6F5IGNo4bunIMSRw7NuZyBr4bq/dCBu4buRaSBi4bqldCBuZ+G7nS4iCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIk3DoXkgY2jhu6cgZ+G7rWkgZOG7ryBsaeG7h3Ugc2FpLiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAiIgotIkNoxrBhIGPDsyBk4buvIGxp4buHdSDDom0gdGhhbmggbmjhuq1wLCBob+G6t2MgZOG7ryBsaeG7h3Ugw6JtIHRoYW5oIG5o4bqtcCBraMO0bmcgaOG7o3AgbOG7hy4gVsOsICIKLSJ0aOG6vyBsdeG7k25nIEFWSSBz4bq9IGjhu49uZy4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIlThuq1wIHRpbiBuw6B5IGtow7RuZyBjaOG7qWEgbHXhu5NuZyBjw7MgdGjhu4MgcGjDoXQuIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICJU4bqtcCB0aW4gbsOgeSBraMO0bmcgaOG7o3AgbOG7hyBuw6puIGtow7RuZyB0aOG7gyBwaMOhdCDEkcaw4bujYy4iCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6F0IGx14buTbmcgZOG7ryBsaeG7h3UgYuG7n2kgdsOsIG7DsyDEkcaw4bujYyBtw6MgaMOzYSBi4bqxbmcgUGxheVJlYWR5IERSTS4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlThuq1wIHRpbiBuw6B5IGLhu4sgaOG7j25nIG7Dqm4ga2jDtG5nIHRo4buDIHBow6F0LiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAiS8OtY2ggdGjGsOG7m2Mgbmd1ecOqbiB04butIChhdG9tKSBraMO0bmcgaOG7o3AgbOG7hy4iCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIlThuq1wIHRpbiBuw6B5IGNoxrBhIGhvw6BuIHRow6BuaCBuw6puIGtow7RuZyB0aOG7gyDEkcaw4bujYyBwaMOhdC4iCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIuG6om5oIMSR4buZbmcgdHJvbmcgdOG6rXAgdGluIG7DoHkgY8OzIHRo4buDIGtow7RuZyBwaMOhdCDEkcO6bmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIlThuq1wIHRpbiBuw6B5IGNo4bupYSBxdcOhIG5oaeG7gXUgbHXhu5NuZyBuw6puIGNo4buJIHBow6F0ICVkIMSR4bqndSB0acOqbiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0iS2jDtG5nIHTDrG0gdGjhuqV5IGx14buTbmcgxJHGsOG7o2MgaOG7lyB0cuG7oy4gTmfGsOG7nWkgZMO5bmcgY8OzIHRo4buDIGPhuqduIHBo4bqjaSBjw6BpIMSR4bq3dCBt4buZdCAiCi0icGjhuqduIGLhu5Ugc3VuZyBSVFNQIEdzdHJlYW1lciDEkeG7gyB44butIGzDvSBsdeG7k25nIG5o4bqhYy9waGltIGxv4bqhaSBSZWFsLiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIktow7RuZyB0w6xtIHRo4bqleSBsdeG7k25nIGThu68gbGnhu4d1IMSRxrDhu6NjIGjhu5cgdHLhu6MuIE5nxrDhu51pIGTDuW5nIGPDsyB0aOG7gyBj4bqnbiBjaG8gcGjDqXAgIgotInRow6ptIGdpYW8gdGjhu6ljIHRydXnhu4FuLCBob+G6t2MgY2jGsGEgY8OgaSDEkeG6t3QgcGjhuqduIGLhu5Ugc3VuZyBSVFNQIEdzdHJlYW1lciDEkcO6bmcuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotIktow7RuZyB0aOG7gyBt4bufIHRoaeG6v3QgYuG7iyDDom0gdGhhbmggxJHhu4MgcGjDoXQgbOG6oWkuIFRoaeG6v3QgYuG7iyBuw6B5IMSRYW5nIMSRxrDhu6NjIG3hu5l0IOG7qW5nICIKLSJk4bulbmcga2jDoWMgc+G7rSBk4bulbmcuIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgbeG7nyB0aGnhur90IGLhu4sgw6JtIHRoYW5oIMSR4buDIHBow6F0IGzhuqFpLiBC4bqhbiBraMO0bmcgY8OzIMSR4bunIHRo4bqpbSBxdXnhu4FuIMSR4buDIG3hu58gIgotInRoaeG6v3QgYuG7iyBuw6B5LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB0aGnhur90IGLhu4sgw6JtIHRoYW5oIMSR4buDIHBow6F0IGzhuqFpLiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgIgotIlN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZWxlbWVudC4iCi1tc2dzdHIgIiIKLSJLaMO0bmcgdGjhu4MgbeG7nyB0aGnhur90IGLhu4sgw6JtIHRoYW5oIMSR4buDIHBow6F0IGzhuqFpLiBQaGnDqm4gYuG6o24gSOG7hyB0aOG7kW5nIMOCbSB0aGFuaCBN4bufICIKLSJuw6B5IGtow7RuZyDEkcaw4bujYyB54bq/dSB04buRIG7DoHkgaOG7lyB0cuG7oy4iCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiQ2jhu6ljIG7Eg25nIHBow6F0IGzhuqFpIGtow7RuZyBwaOG6o2kgxJHGsOG7o2MgdGhp4bq/dCBi4buLIMOibSB0aGFuaCBuw6B5IGjhu5cgdHLhu6MuIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICJM4buXaSBwaMOhdCBs4bqhaSDDom0gdGhhbmguIgotCi1tc2dpZCAiUmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICJDaOG7qWMgbsSDbmcgdGh1IGtow7RuZyBwaOG6o2kgxJHGsOG7o2MgdGhp4bq/dCBi4buLIMOibSB0aGFuaCBuw6B5IGjhu5cgdHLhu6MuIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRodSB04burIHRoaeG6v3QgYuG7iyDDom0gdGhhbmguIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0iS2jDtG5nIHRo4buDIG3hu58gdGhp4bq/dCBi4buLIMOibSB0aGFuaCDEkeG7gyB0aHUuIELhuqFuIGtow7RuZyBjw7MgcXV54buBbiBt4bufIHRoaeG6v3QgYuG7iyBuw6B5LiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdGhp4bq/dCBi4buLIMOibSB0aGFuaCDEkeG7gyB0aHUuIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBub3QgZm91bmQiCi1tc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSB0aGnhur90IGLhu4sgQ29yZUF1ZGlvIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB0aGnhur90IGLhu4sgQ29yZUF1ZGlvIgotCi1tc2dpZCAiUmVjb3JkIFNvdXJjZSIKLW1zZ3N0ciAiR2hpIGzGsHUgbmd14buTbiIKLQotbXNnaWQgIk1pY3JvcGhvbmUiCi1tc2dzdHIgIk1pY3LDtCIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIsSQ4bqndSB2w6BvIgotCi1tc2dpZCAiSW50ZXJuYWwgQ0QiCi1tc2dzdHIgIkNEIOG7nyB0cm9uZyIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICJTUERJRiBWw6BvIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIkFVWCAxIFbDoG8iCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiQVVYIDIgVsOgbyIKLQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJWw7JuZyBuZ8aw4bujYyBDb2RlYyIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiVsOybmcgbmfGsOG7o2MgU3VuVlRTIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICLDgm0gbMaw4bujbmciCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICJLaHXhur9jaCDEkeG6oWkiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICJNw6BuIGjDrG5oIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiTG9hIHTDrWNoIGjhu6NwIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICJUYWkgbmdoZSIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICLEkOG6p3UgcmEiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElGIFJhIgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICJBVVggMSBSYSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiQVVYIDIgUmEiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyAlZCBieXRlIHThu6sgdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotIkfhurdwIGzhu5dpIGtoaSDEkcOhbmggc+G7kSBjw6FjIMSR4buLbmggZOG6oW5nIHZpZGVvIGPDsyB0aOG7gywgbcOgIHRoaeG6v3QgYuG7iyDigJwlc+KAnSBjw7MgdGjhu4MgbMOgbSAiCi0idmnhu4djIGPDuW5nIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICJLaMO0bmcgdGjhu4Mgw6FuaCB44bqhIGPDoWMgYuG7mSDEkeG7h20gdOG7qyB0aGnhur90IGLhu4sg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICJUcsOsbmggxJFp4buBdSBraGnhu4NuIGPhu6dhIHRoaeG6v3QgYuG7iyDigJwlc+KAnSBraMO0bmcgaOG7lyB0cuG7oyBwaMawxqFuZyBwaMOhcCBWUiAlZCIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLSJUcsOsbmggxJFp4buBdSBraGnhu4NuIGPhu6dhIHRoaeG6v3QgYuG7iyDigJwlc+KAnSBraMO0bmcgaOG7lyB0cuG7oyBwaMawxqFuZyBwaMOhcCBWUiDEkcOjIGJp4bq/dCBuw6BvLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICJUaGnhur90IGLhu4sg4oCcJXPigJ0gxJFhbmcgYuG6rW4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIlRoaeG6v3QgYuG7iyDigJwlc+KAnSBraMO0bmcgdGjhu4MgY2jhu6VwIHThuqFpICVkeCVkIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICJUaGnhur90IGLhu4sg4oCcJXPigJ0ga2jDtG5nIHRo4buDIGNo4bulcCDhu58gxJHhu4tuaCBk4bqhbmcgxJHDoyBjaG8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiVGhp4bq/dCBi4buLIOKAnCVz4oCdIGtow7RuZyBo4buXIHRy4bujIGNo4bupYyBuxINuZyDigJxub24tY29udGlndW91cyBwbGFuZXPigJ0iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGdldCBwYXJhbWV0ZXJzIG9uIGRldmljZSAnJXMnIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgY8OhYyB0aGFtIHPhu5EgduG7gSB0aGnhur90IGLhu4sg4oCcJXPigJ0uIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICJUaGnhur90IGLhu4sgdmlkZW8ga2jDtG5nIGNo4bqlcCBuaOG6rW4gY8OgaSDEkeG6t3QgduG7gSB04buRYyDEkeG7mSBraHVuZyBow6xuaCBt4bubaS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICJUaGnhur90IGLhu4sgdmlkZW8ga2jDtG5nIGN1bmcgY+G6pXAgxJHhu4tuaCBk4bqhbmcgeHXhuqV0LiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICJUaGnhur90IGLhu4sgdmlkZW8gdHLhuqMgdsOgIGvDrWNoIHRoxrDhu5tjIGtow7RuZyBo4bujcCBs4buHLiIKLQotIywgZnV6enkKLW1zZ2lkICJWaWRlbyBkZXZpY2UgdXNlcyBhbiB1bnN1cHBvcnRlZCBpbnRlcmxhY2luZyBtZXRob2QuIgotbXNnc3RyICJUaGnhur90IGLhu4sgZMO5bmcgcGjGsMahbmcgcGjDoXAgeGVuIGvhur0ga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MuIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIlRoaeG6v3QgYuG7iyB2aWRlbyBkw7luZyDEkeG7i25oIGThuqFuZyDEkWnhu4NtIOG6o25oIGtow7RuZyDEkcaw4bujYyBo4buXIHRy4bujLiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6pXUgaMOsbmgga2hvIMSR4buHbSBu4buZaSB04bqhaS4iCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIlRoaeG6v3QgYuG7iyB2aWRlbyBraMO0bmcgxJHGsGEgcmEgZ+G7o2kgw70gbsOgbyB24buBIGLhu5kgxJHhu4dtLiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIktow7RuZyBjw7MgYuG7gyBkw7JuZyBk4buvIGxp4buHdSB04bqjaSB24buBIMSR4buDIG3DoCBuaOG6rXAgdsOgby4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5ncyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJH4bq3cCBs4buXaSBraGkgbOG6pXkgY8OhYyBjw6BpIMSR4bq3dCB04burIHRoaeG6v3QgYuG7iyDEkWnhu4F1IGNo4buJbmggY+G7mW5nIGjGsOG7n25nICVkIHRyw6puIHRoaeG6v3QgIgotImLhu4sg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgZHVuZyBsxrDhu6NuZyB04burIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICJUaGnhur90IGLhu4sgJXMga2jDtG5nIHBo4bqjaSB0aGnhur90IGLhu4sgxJFp4buBdSBjaOG7iW5oIGPhu5luZyBoxrDhu59uZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbOG6pXkgxJHhuqd1IHbDoG8gcmFkaW8gdHLDqm4gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG6t3QgZOG7ryBsaeG7h3Ugbmjhuq1wICVkIHbDoG8gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRoYXkgxJHhu5VpIHRy4bqhbmcgdGjDoWkgbmfhuq90IHRp4bq/bmcgY2hvIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqlcCBwaMOhdCBi4buZIG5o4bubIHRoZW8gecOqdSBj4bqndS4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuqVwIHBow6F0IGLhu5kgbmjhu5sgdGhlbyB5w6p1IGPhuqd1LiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICJC4buZIGNodXnhu4NuIMSR4buVaSB0csOqbiB0aGnhur90IGLhu4sgJXMga2jDtG5nIGPDsyDEkeG7i25oIGThuqFuZyDEkeG6p3UgdsOgbyDEkcaw4bujYyBo4buXIHRy4bujIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJC4buZIGNodXnhu4NuIMSR4buVaSB0csOqbiB0aGnhur90IGLhu4sgJXMga2jDtG5nIGPDsyDEkeG7i25oIGThuqFuZyB4deG6pXQgxJHGsOG7o2MgaOG7lyB0cuG7oyIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiQuG7mSBtw6MgaMOzYSB0csOqbiB0aGnhur90IGLhu4sg4oCcJXPigJ0ga2jDtG5nIGjhu5cgdHLhu6MgxJHhu4tuaCBk4bqhbmcgxJHhuqd1IHbDoG8iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICJC4buZIGdp4bqjaSBtw6MgdHLDqm4gdGhp4bq/dCBi4buLIOKAnCVz4oCdIGtow7RuZyBo4buXIHRy4bujIMSR4buLbmggZOG6oW5nIMSR4bqndSByYSIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgYuG6r3QgxJHhuqd1IHRp4bq/biB0csOsbmggZ2nhuqNpIG3Doy4iCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB44butIGzDvSBraHVuZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0iR+G6t3AgbOG7l2kga2hpIGzhuqV5IGto4bqjIG7Eg25nIGPhu6dhIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4gTsOzIGtow7RuZyBwaOG6o2kgbMOgIHRyw6xuaCDEkWnhu4F1ICIKLSJraGnhu4NuIHBoacOqbiBi4bqjbiA0bDIuIEtp4buDbSB0cmEgeGVtIG7DsyBjw7MgcGjhuqNpIGzDoCB0csOsbmggxJFp4buBdSBraGnhu4NuIHBoacOqbiBi4bqjbiAiCi0iNGwxIGtow7RuZy4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdHJ1eSB24bqlbiBjw6FjIHRodeG7mWMgdMOtbmggY+G7p2EgxJHhuqd1IHbDoG8gJWQgdHJvbmcgdGhp4bq/dCBi4buLICVzIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLSJH4bq3cCBs4buXaSBraGkgbOG6pXkgY8OhYyBjw6BpIMSR4bq3dCBj4bunYSBi4buZIGNo4buJbmggY+G7mW5nIGjGsOG7n25nICVkIHRyw6puIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdHJ1eSB24bqlbiBjaOG7iSB0acOqdSB0csOqbiB0aGnhur90IGLhu4sg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbOG6pXkgY8OhYyB0aHXhu5ljIHTDrW5oIGPhu6dhIGLhu5kgxJFp4buBdSBraGnhu4NuIHRyw6puIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG5o4bqtbiBkaeG7h24gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICJLaMO0bmcgcGjhuqNpIGzDoCB0aGnhur90IGLhu4sg4oCcJXPigJ0uIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdGhp4bq/dCBi4buLIOKAnCVz4oCdIMSR4buDIMSR4buNYyB2w6AgZ2hpLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIlRoaeG6v3QgYuG7iyDigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCB0aGnhur90IGLhu4sgZ2hpIGjDrG5oL3Rp4bq/bmcuIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICJUaGnhur90IGLhu4sg4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgdGhp4bq/dCBi4buLIHh14bqldCByYS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIlRoaeG6v3QgYuG7iyDigJwlc+KAnSBraMO0bmcgcGjhuqNpIGzDoCB0aGnhur90IGLhu4sgTTJNLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIG5ow6JuIGLhuqNuIHRoaeG6v3QgYuG7iyDigJwlc+KAnSDEkeG7gyDEkeG7jWMgdsOgIGdoaS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG6t3QgY2jhu4kgdGnDqnUgY2hvIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0iR+G6t3AgbOG7l2kga2hpIGzhuqV5IHThuqduIHPhu5EgaGnhu4duIHRo4budaSBj4bunYSB0aGnhur90IGLhu4sgxJFp4buBdSBjaOG7iW5oIGPhu5luZyBoxrDhu59uZyBjaG8gIgotInRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAiIgotIkfhurdwIGzhu5dpIGtoaSDEkeG6t3QgdOG6p24gc+G7kSBoaeG7h24gdGjhu51pIGPhu6dhIHRoaeG6v3QgYuG7iyDEkWnhu4F1IGNo4buJbmggY+G7mW5nIGjGsOG7n25nIGNobyAiCi0idGhp4bq/dCBi4buLIOKAnCVz4oCdIGzDoCAlbHUgSHouIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBs4bqleSBiacOqbiDEkeG7mSB0w61uIGhp4buHdSBjaG8gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGzhuqV5IGdpw6EgdHLhu4sgY+G7p2EgYuG7mSDEkWnhu4F1IGtoaeG7g24gJWQgdHLDqm4gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4bq3dCBnacOhIHRy4buLICVkIGPhu6dhIGLhu5kgxJFp4buBdSBraGnhu4NuICVkIHRyw6puIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLSJH4bq3cCBs4buXaSBraGkgbOG6pXkgxJHhuqd1IHbDoG8gaGnhu4duIHRo4budaSB2w6BvIHRoaeG6v3QgYuG7iyDigJwlc+KAnS4gQ8OzIHRo4buDIGzDoCB0aGnhur90IGLhu4sgdGh1ICIKLSJ0aGFuaC4iCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotIkfhurdwIGzhu5dpIGtoaSBs4bqleSDEkeG6p3UgdsOgbyBoaeG7h24gaMOgbmggdHLDqm4gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiBDw7MgdGjhu4MgbsOzIGzDoCB0aGnhur90IGLhu4sgIgotInbDtCB0dXnhur9uLiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhurd0IGThu68gbGnhu4d1IG5o4bqtcCAlZCB0csOqbiB0aGnhur90IGLhu4sgJXMuIgotCi1tc2dpZCAiQ2hhbmdpbmcgcmVzb2x1dGlvbiBhdCBydW50aW1lIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiIKLW1zZ3N0ciAiQ2jGsGEgaOG7lyB0cuG7oyBraOG6oyBuxINuZyB0aGF5IMSR4buVaSDEkeG7mSBwaMOibiBnaeG6o2kgdHJvbmcga2hpIGNo4bqheS4iCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIktow7RuZyB0aOG7gyB0aGFvIHTDoWMga2hpIGtow7RuZyBjw7MgxJHhu5NuZyBo4buTIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICJM4buXaSBsdeG7k25nIGThu68gbGnhu4d1IG7hu5lpIGLhu5kuIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAiTOG7l2kgbHXhu5NuZyBk4buvIGxp4buHdSBu4buZaSBi4buZLiIKLQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAiVGhp4bq/dCBi4buLIOKAnCVz4oCdIGtow7RuZyBo4buXIHRy4bujIGNo4bupYyBuxINuZyBxdWF5IHZpZGVvIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNvdW5kIHNlcnZlciIKLSN+IG1zZ3N0ciAiS2jDtG5nIHRo4buDIHRoaeG6v3QgbOG6rXAgc+G7sSBr4bq/dCBu4buRaSB04bubaSBtw6F5IHBo4bulYyB24bulIMOibSB0aGFuaCIKLQotI34gbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBzb3VuZCBzZXJ2ZXIgY2FwYWJpbGl0aWVzIgotI34gbXNnc3RyICJM4buXaSB0cnV5IHbhuqVuIGtoYcyJIG7Eg25nIGPhu6dhIG3DoXkgcGjhu6VjIHbhu6Ugw6JtIHRoYW5oIgotCi0jfiBtc2dpZCAiQmFzcyIKLSN+IG1zZ3N0ciAiVHLhuqdtIgotCi0jfiBtc2dpZCAiVHJlYmxlIgotI34gbXNnc3RyICJDYW8iCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAiVOG7lW5nIGjhu6NwIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICJQQ00iCi0KLSN+IG1zZ2lkICJTcGVha2VyIgotI34gbXNnc3RyICJMb2EiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICJEw6J5LXbDoG8iCi0KLSN+IG1zZ2lkICJDRCIKLSN+IG1zZ3N0ciAiQ0QiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAiVHLhu5luIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiUmVjb3JkIgotI34gbXNnc3RyICJHaGkiCi0KLSN+IG1zZ2lkICJJbi1nYWluIgotI34gbXNnc3RyICJWw6BvLWdpYSBsxrDhu6NuZyIKLQotI34gbXNnaWQgIk91dC1nYWluIgotI34gbXNnc3RyICJSYS1naWEgbMaw4bujbmciCi0KLSN+IG1zZ2lkICJMaW5lLTEiCi0jfiBtc2dzdHIgIkTDonktMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAiRMOieS0yIgotCi0jfiBtc2dpZCAiTGluZS0zIgotI34gbXNnc3RyICJEw6J5LTMiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTEiCi0jfiBtc2dzdHIgIsSQb+G6oW4gYmnhur9uLTEiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTIiCi0jfiBtc2dzdHIgIsSQb+G6oW4gYmnhur9uLTIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsLTMiCi0jfiBtc2dzdHIgIsSQb+G6oW4gYmnhur9uLTMiCi0KLSN+IG1zZ2lkICJQaG9uZS1pbiIKLSN+IG1zZ3N0ciAixJBp4buHbiB0aG/huqFpLXbDoG8iCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIsSQaeG6oW4gdGhv4bqhaS1yYSIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICLhuqJuaCDEkeG7mW5nIgotCi0jfiBtc2dpZCAiUmFkaW8iCi0jfiBtc2dzdHIgIlRodSB0aGFuaCIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIHRoaeG6v3QgYuG7iyDDom0gdGhhbmggxJHhu4MgcXXhuqNuIGzDvSDEkWnhu4F1IGtoaeG7g24gbcOheSBow7JhIHRp4bq/bmcuIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAiS2jDtG5nIHRo4buDIG3hu58gdGhp4bq/dCBi4buLIMOibSB0aGFuaCDEkeG7gyBxdeG6o24gbMO9IMSRaeG7gXUga2hp4buDbiBtw6F5IGjDsmEgdGnhur9uZy4gUGhpw6puICIKLSN+ICJi4bqjbiBI4buHIHRo4buRbmcgw4JtIHRoYW5oIE3hu58ga2jDtG5nIHBo4bqjaSDEkcaw4bujYyB54bq/dSB04buRIG7DoHkgaOG7lyB0cuG7oy4iCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIkNo4bunIgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIlRyxrDhu5tjIgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAiU2F1IgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAiVGFpIG5naGUiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIlTDom0iCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIkxGRSIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICJWw7JtIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAiQsOqbiIKLQotI34gbXNnaWQgIkFVWCBPdXQiCi0jfiBtc2dzdHIgIkFVWCBSYSIKLQotI34gbXNnaWQgIjNEIERlcHRoIgotI34gbXNnc3RyICJTw6J1IGJhIGNoaeG7gXUiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIlTDom0gYmEgY2hp4buBdSIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIlTEg25nIGPGsOG7nW5nIGJhIGNoaeG7gXUiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIsSQaeG7h24gdGhv4bqhaSIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICLhuqJuaCDEkeG7mW5nIFbDoG8iCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkFVWCBWw6BvIgotCi0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIkdoaSBsxrB1IGtodeG6v2NoIMSR4bqhaSIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICJLaHXhur9jaCDEkeG6oWkgUmEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICJUxINuZyBtw6F5IHZpIMOibSIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIkNo4bqpbiDEkW/DoW4iCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICJUxINuZyB0cuG6p20iCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAiQ+G7lW5nIHBow6F0IGzhuqFpIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIlbDoG8iCi0KLSN+IG1zZ2lkICJNb25pdG9yIFNvdXJjZSIKLSN+IG1zZ3N0ciAiVGhlbyBkw7VpIG5ndeG7k24iCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICJCw61wIGLDoG4gcGjDrW0iCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIk3DtCBwaOG7j25nIMOibSBs4bqtcCB0aOG7gyIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAiw4JtIGzhuq1wIHRo4buDIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIsOCbSB0aGFuaCB2w7JtIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICJLaHXhur9jaCDEkeG6oWkgbcOheSB2aSDDom0iCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTmd14buTbiBsb2EiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIFNvdXJjZSIKLSN+IG1zZ3N0ciAiTmd14buTbiBtw6F5IHZpIMOibSIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIuG7lCBj4bqvbSIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAiVMOibSAvIExGRSIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIkjhu49hIHRp4bq/bmcgw6JtIGzhuq1wIHRo4buDIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIkjDsmEgdGnhur9uZyDEkcahbiBuZ3Xhu5NuIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICJIw7JhIHRp4bq/bmcgxJHhuqd1IHbDoG8iCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDEiCi0jfiBtc2dzdHIgIk3DoXkgdmkgw6JtIDEiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIk3DoXkgdmkgw6JtIDIiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIE91dCIKLSN+IG1zZ3N0ciAixJBp4buHbiBz4buRIFJhIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBJbiIKLSN+IG1zZ3N0ciAixJBp4buHbiBz4buRIFbDoG8iCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIkLhu5kgxJFp4buBdSBnaeG6o2kiCi0KLSN+IG1zZ2lkICJIYW5kc2V0IgotI34gbXNnc3RyICJD4bqnbSB0YXkiCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAiS2jDoWMiCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICJLaMO0bmcgY8OzIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIkLhuq10IgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICJU4bqvdCIKLQotI34gbXNnaWQgIk11dGUiCi0jfiBtc2dzdHIgIkPDom0iCi0KLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICJOaGFuaCIKLQotI34gbXNnaWQgIlZlcnkgTG93IgotI34gbXNnc3RyICJS4bqldCB0aOG6pXAiCi0KLSN+IG1zZ2lkICJMb3ciCi0jfiBtc2dzdHIgIlRo4bqlcCIKLQotI34gbXNnaWQgIk1lZGl1bSIKLSN+IG1zZ3N0ciAiVuG7q2EiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICJDYW8iCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIlLhuqV0IGNhbyIKLQotI34gbXNnaWQgIlByb2R1Y3Rpb24iCi0jfiBtc2dzdHIgIlPhuqNuIHh14bqldCIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIE1pY3JvcGhvbmUiCi0jfiBtc2dzdHIgIk3hurd0IHRyxrDhu5tjOiBNw6F5IHZpIMOibSIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIk3hurd0IHRyxrDhu5tjOiBEw6J5IFbDoG8iCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBIZWFkcGhvbmVzIgotI34gbXNnc3RyICJN4bq3dCB0csaw4bubYzogVGFpIG5naGUiCi0KLSN+IG1zZ2lkICJGcm9udCBQYW5lbCBMaW5lIE91dCIKLSN+IG1zZ3N0ciAiTeG6t3QgdHLGsOG7m2M6IETDonkgUmEiCi0KLSN+IG1zZ2lkICJHcmVlbiBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsSQ4bqndSBu4buRaSBtw6B1IGzhu6VjIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsSQ4bqndSBu4buRaSBtw6B1IGjhu5NuZyIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEkOG6p3UgbuG7kWkgbcOgdSB4YW5oIgotCi0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEkOG6p3UgbuG7kWkgbcOgdSB0cuG6r25nIgotCi0jfiBtc2dpZCAiQmxhY2sgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEkOG6p3UgbuG7kWkgbcOgdSDEkWVuIgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsSQ4bqndSBu4buRaSBtw6B1IHjDoW0iCi0KLSN+IG1zZ2lkICJPcmFuZ2UgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEkOG6p3UgbuG7kWkgbcOgdSBjYW0iCi0KLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICLEkOG6p3UgbuG7kWkgbcOgdSDEkeG7jyIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIsSQ4bqndSBu4buRaSBtw6B1IHbDoG5nIgotCi0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJN4bq3dCB0csaw4bubYzogxJHhuqd1IG7hu5FpIG3DoHUgbOG7pWMiCi0KLSN+IG1zZ2lkICJQaW5rIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTeG6t3QgdHLGsOG7m2M6IMSR4bqndSBu4buRaSBtw6B1IGjhu5NuZyIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICJN4bq3dCB0csaw4bubYzogxJHhuqd1IG7hu5FpIG3DoHUgeGFuaCIKLQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTeG6t3QgdHLGsOG7m2M6IMSR4bqndSBu4buRaSBtw6B1IHRy4bqvbmciCi0KLSN+IG1zZ2lkICJCbGFjayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk3hurd0IHRyxrDhu5tjOiDEkeG6p3UgbuG7kWkgbcOgdSDEkWVuIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk3hurd0IHRyxrDhu5tjOiDEkeG6p3UgbuG7kWkgbcOgdSB4w6FtIgotCi0jfiBtc2dpZCAiT3JhbmdlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTeG6t3QgdHLGsOG7m2M6IMSR4bqndSBu4buRaSBtw6B1IGNhbSIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk3hurd0IHRyxrDhu5tjOiDEkeG6p3UgbuG7kWkgbcOgdSDEkeG7jyIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk3hurd0IHRyxrDhu5tjOiDEkeG6p3UgbuG7kWkgbcOgdSB2w6BuZyIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIk3hu58gcuG7mW5nIGvhur90IHh14bqldCIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIkjhuqEgaMOyYSB0aeG6v25nIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAiSMOyYSB0aeG6v25nIOG6o28gOiBWw6BvIgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBPdXRwdXQiCi0jfiBtc2dzdHIgIkjDsmEgdGnhur9uZyDhuqNvIDogUmEiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICJIw7JhIHRp4bq/bmcg4bqjbyA6IEvDqm5oIgotCi0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIkNo4bupYyBuxINuZyAlcyAlZCIKLQotI34gbXNnaWQgIiVzIEZ1bmN0aW9uIgotI34gbXNnc3RyICJDaOG7qWMgbsSDbmcgJXMiCi0KLSN+IG1zZ2lkICJHb3QgdW5leHBlY3RlZCBmcmFtZSBzaXplIG9mICV1IGluc3RlYWQgb2YgJXUuIgotI34gbXNnc3RyICJOaOG6rW4gxJHGsOG7o2Mga8OtY2ggY+G7oSBraHVuZyBi4bqldCB0aMaw4budbmcgJXUsIHRoYXkgY2hvICV1LiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jICVkIGJ5dGUgdHLDqm4gdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlbnF1ZXVlIGJ1ZmZlcnMgaW4gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjhu6UgdGjDqm0gY8OhYyBi4buZIMSR4buHbSB2w6BvIGjDoG5nIMSR4bujaSB0csOqbiB0aGnhur90IGLhu4sg4oCcJXPigJ0uIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICJM4buXaSBraGkgdGjhu60gbOG6pXkgY8OhYyBraHVuZyDhuqNuaCDEkeG7mW5nIHThu6sgdGhp4bq/dCBi4buLIOKAnCVz4oCdLiIKLQotI34gbXNnaWQgIkZhaWxlZCBhZnRlciAlZCB0cmllcy4gZGV2aWNlICVzLiBzeXN0ZW0gZXJyb3I6ICVzIgotI34gbXNnc3RyICJM4buXaSBzYXUgJWQgbOG6p24gdGjhu60uIFRoaeG6v3QgYuG7iyAlcy4gTOG7l2kgaOG7hyB0aOG7kW5nOiAlcyIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLmdtbyBiL3BvL3poX0NOLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcyNDU5OC4uMDAwMDAwMAotLS0gYS9wby96aF9DTi5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby96aF9DTi5wbyBiL3BvL3poX0NOLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWMyMzRlLi4wMDAwMDAwCi0tLSBhL3BvL3poX0NOLnBvCisrKyAvZGV2L251bGwKQEAgLTEsODA0ICswLDAgQEAKLSMgQ2hpbmVzZSAoc2ltcGxpZmllZCkgdHJhbnNsYXRpb24gYWJvdXQgZ3N0LXBsdWdpbnMtZ29vZC4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgRnVuZGEgV2FuZyA8ZnVuZGF3YW5nQGxpbnV4Lm5ldC5jbj4sIDIwMDUuCi0jIEppIFpoZW5nWXUgPHpoZW5neXVqaUBnbWFpbC5jb20+LCAyMDA4LCAyMDA5LgotIyB6d3B3and0eiA8endwd2p3dHpAMTI2LmNvbT4sIDIwMTUuCi1tc2dpZCAiIgotbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnc3QtcGx1Z2lucy1nb29kIDEuMTAuMFxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE2LTExLTAyIDEzOjM5KzA4MDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IFRpYW56ZSBXYW5nIDx6d3B3and0ekAxMjYuY29tPlxuIgotIkxhbmd1YWdlLVRlYW06IENoaW5lc2UgKHNpbXBsaWZpZWQpIDxpMThuLXpoQGdvb2dsZWdyb3Vwcy5jb20+XG4iCi0iTGFuZ3VhZ2U6IHpoX0NOXG4iCi0iTUlNRS1WZXJzaW9uOiAxLjBcbiIKLSJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKLSJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCi0iWC1CdWdzOiBSZXBvcnQgdHJhbnNsYXRpb24gZXJyb3JzIHRvIHRoZSBMYW5ndWFnZS1UZWFtIGFkZHJlc3MuXG4iCi0iWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjguOVxuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICLmnKrmib7liLDmj5Llj6Porr7lpIciCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIuino+eggSBKUEVHIOWbvuWDj+WHuumUmSIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAi4oCcJTIkc+KAneeahOKAnCUxJHPigJ0iCi0KLW1zZ2lkICJDb3VsZCBub3QgY29ubmVjdCB0byBzZXJ2ZXIiCi1tc2dzdHIgIuaXoOazlei/nuaOpeiHs+acjeWKoeWZqCIKLQotbXNnaWQgIk5vIFVSTCBzZXQuIgotbXNnc3RyICLmnKrorr7nva5VUkzjgIIiCi0KLW1zZ2lkICJTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nLiIKLW1zZ3N0ciAi6K6+5aSH5LiN5pSv5oyB5a6a5L2N44CCIgotCi1tc2dpZCAiQ291bGQgbm90IHJlc29sdmUgc2VydmVyIG5hbWUuIgotbXNnc3RyICLml6Dms5Xop6PmnpDmnI3liqHlmajlkI3jgIIiCi0KLW1zZ2lkICJDb3VsZCBub3QgZXN0YWJsaXNoIGNvbm5lY3Rpb24gdG8gc2VydmVyLiIKLW1zZ3N0ciAi5peg5rOV5bu656uL5LiO6Z+z6aKR5pyN5Yqh5Zmo55qE6L+e5o6lIgotCi1tc2dpZCAiU2VjdXJlIGNvbm5lY3Rpb24gc2V0dXAgZmFpbGVkLiIKLW1zZ3N0ciAi5a6J5YWo6L+e5o6l5aSx6LSl44CCIgotCi1tc2dpZCAiIgotIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZCwgb3IgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5LiIKLW1zZ3N0ciAi5Y+R55Sf5LqG572R57uc6ZSZ6K+v77yM5oiW5pyN5Yqh5Zmo5oSP5aSW5Zyw5YWz6Zet5LqG6L+e5o6l44CCIgotCi1tc2dpZCAiU2VydmVyIHNlbnQgYmFkIGRhdGEuIgotbXNnc3RyICLmnI3liqHlmajlj5HpgIHkuobplJnor6/nmoTmlbDmja7jgIIiCi0KLW1zZ2lkICJObyBvciBpbnZhbGlkIGlucHV0IGF1ZGlvLCBBVkkgc3RyZWFtIHdpbGwgYmUgY29ycnVwdC4iCi1tc2dzdHIgIuayoeacieaIluaXoOaViOeahOi+k+WFpemfs+mike+8jEFWSSDmtYHlsIbmjZ/lnY/jgIIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIuatpOaWh+S7tuS4jeWMheWQq+WPr+aSreaUvueahOa1geOAgiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAi5q2k5paH5Lu25peg5pWI77yM5peg5rOV5pKt5pS+44CCIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIuaXoOazleaSreaUvua1ge+8jOWboOS4uuWug+W3suiiq1BsYXlSZWFkeSBEUk3liqDlr4bjgIIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIuatpOaWh+S7tuW3suaNn+Wdj++8jOaXoOazleaSreaUvuOAgiIKLQotbXNnaWQgIkludmFsaWQgYXRvbSBzaXplLiIKLW1zZ3N0ciAi5peg5pWI55qE5Y6f5a2Q5bC65a+444CCIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGluY29tcGxldGUgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICLmraTmlofku7bkuI3lrozmlbTkuJTml6Dms5Xmkq3mlL7jgIIiCi0KLW1zZ2lkICJUaGUgdmlkZW8gaW4gdGhpcyBmaWxlIG1pZ2h0IG5vdCBwbGF5IGNvcnJlY3RseS4iCi1tc2dzdHIgIuatpOaWh+S7tuS4reeahOinhumikeWPr+iDveaXoOazleato+ehruaSreaUvuOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgdG9vIG1hbnkgc3RyZWFtcy4gT25seSBwbGF5aW5nIGZpcnN0ICVkIgotbXNnc3RyICLmraTmlofku7bljIXlkKvkuoblpKrlpJrnmoTmtYHjgILlj6rmkq3mlL7liY3pnaIgJWQg5LiqIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLSLmnKrmib7liLDmlK/mjIHnmoTmtYHlqpLkvZPjgILmgqjlj6/og73pnIDopoHlronoo4XkuIDkuKogR1N0cmVhbWVyIFJUU1Ag5omp5bGV5o+S5Lu25p2l5pKt5pS+IFJlYWwg5aqSIgotIuS9k+a1geOAgiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotIuacquaJvuWIsOaUr+aMgeeahOa1geWqkuS9k+OAguaCqOWPr+iDvemcgOimgeWQr+eUqOabtOWkmueahOS8oOmAgeWNj+iuru+8jOaIluiAheS5n+acieWPr+iDveaYr+e8uuWwkeato+ehrueahCAiCi0iR1N0cmVhbWVyIFJUU1Ag5omp5bGV5o+S5Lu244CCIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAi5peg5rOV5omT5byA6Z+z6aKR6K6+5aSH5pKt5pS+6Z+z6aKR44CC6K6+5aSH5b2T5YmN55Sx5Y+m5LiA5Liq56iL5bqP5L2/55So44CCIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOmfs+mikeiuvuWkh+aSreaUvumfs+mikeOAguaCqOaXoOadg+S9v+eUqOi/meS4gOiuvuWkh+OAgiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICLml6Dms5XmiZPlvIDpn7PpopHorr7lpIfmkq3mlL7pn7PpopHjgIIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICLml6Dms5XmiZPlvIDpn7PpopHorr7lpIfov5vooYzlm57mlL7jgILov5nkuIDniYjmnKznmoRPcGVuIFNvdW5kIFN5c3RlbeS4jeaUr+aMgeatpOe7hOS7tuOAgiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLmraTpn7PpopHorr7lpIfkuI3mlK/mjIHlm57mlL7jgIIiCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIumfs+mikeWbnuaUvumUmeivr+OAgiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi5q2k6Z+z6aKR6K6+5aSH5LiN5pSv5oyB5b2V6Z+z44CCIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi6Z+z6aKR6K6+5aSH5b2V6Z+z6ZSZ6K+v44CCIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICLml6Dms5XmiZPlvIDpn7PpopHorr7lpIflvZXpn7PjgILmgqjml6DmnYPkvb/nlKjov5nkuIDorr7lpIfjgIIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOmfs+mikeiuvuWkh+W9lemfs+OAgiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICLmnKrmib7liLAgQ29yZUF1ZGlvIOiuvuWkhyIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIKLW1zZ3N0ciAi5peg5rOV5omT5byAIENvcmVBdWRpbyDorr7lpIciCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICLlvZXpn7PmupAiCi0KLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICLor53nrZIiCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICLnur/ot6/ovpPlhaUiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAi5YaF6YOoIENEIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElG6L6T5YWlIgotCi1tc2dpZCAiQVVYIDEgSW4iCi1tc2dzdHIgIui+heWKqei+k+WFpSAxIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIui+heWKqei+k+WHuiAyIgotCi1tc2dpZCAiQ29kZWMgTG9vcGJhY2siCi1tc2dzdHIgIue8lueggeWZqOWbnueOryIKLQotbXNnaWQgIlN1blZUUyBMb29wYmFjayIKLW1zZ3N0ciAiU3VuVlRT5Zue546vIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICLpn7Pph48iCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICLlop7nm4oiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICLnm5HmjqflmagiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICLlhoXlu7rmiazlo7DlmagiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIuWktOaItOW8j+iAs+acuiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICLnur/ot6/ovpPlh7oiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIlNQRElG6L6T5Ye6IgotCi1tc2dpZCAiQVVYIDEgT3V0IgotbXNnc3RyICLovoXliqnovpPlh7ogMSIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAi6L6F5Yqp6L6T5Ye6IDIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi5LuO6K6+5aSH4oCcJTIkc+KAneS4reivu+WPliAlMSRkIOS4quWtl+iKguaXtuWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAi5p6a5Li+6K6+5aSH4oCcJXPigJ3lj6/og73mlK/mjIHnmoTop4bpopHmoLzlvI/ml7blh7rplJkiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIuaXoOazleS7juiuvuWkh+KAnCVz4oCd5Lit5pig5bCE5Ye657yT5Yay5Yy6IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSU8gbWV0aG9kICVkIgotbXNnc3RyICLorr7lpIfigJwlc+KAneeahOmpseWKqOS4jeaUr+aMgUkvT+aWueW8jyAlZOOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIuiuvuWkh+KAnCVz4oCd55qE6amx5Yqo5LiN5pSv5oyB5Lu75L2V5bey55+l55qESS9P5pa55byP44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIuiuvuWkh+KAnCVz4oCd5q2j5b+ZIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIgotbXNnc3RyICLorr7lpIfigJwlc+KAneS4jeiDveWcqCAlZHglZCDlpITmjZXojrciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQiCi1tc2dzdHIgIuiuvuWkh+KAnCVz4oCd5peg5rOV5Lul5oyH5a6a5qC85byP5o2V6I63IgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIuiuvuWkh+KAnCVz4oCd5LiN5pSv5oyB6Z2e6L+e57ut5bmz6Z2iIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAi5peg5rOV6I635Y+W6K6+5aSH4oCcJXPigJ3nmoTlj4LmlbAiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBhY2NlcHQgbmV3IGZyYW1lIHJhdGUgc2V0dGluZy4iCi1tc2dzdHIgIuinhumikeiuvuWkh+S4jeaOpeWPl+aWsOeahOW4p+eOh+iuvue9ruOAgiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iCi1tc2dzdHIgIuinhumikeiuvuWkh+acquaPkOS+m+i+k+WHuuagvOW8j+OAgiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSByZXR1cm5lZCBpbnZhbGlkIGRpbWVuc2lvbnMuIgotbXNnc3RyICLop4bpopHorr7lpIfov5Tlm57kuobml6DmlYjnmoTnu7TluqbjgIIiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAi6KeG6aKR6K6+5aSH5L2/55So5LqG5LiN5pSv5oyB55qE6ZqU6KGM5omr5o+P5pa55byP44CCIgotCi0jLCBmdXp6eQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIuinhumikeiuvuWkh+S9v+eUqOS6huS4jeaUr+aMgeeahOWDj+e0oOagvOW8j+OAgiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICLml6Dms5XphY3nva7lhoXpg6jnvJPlhrLmsaDjgIIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIuinhumikeiuvuWkh+acquaPkOS+m+S7u+S9lee8k+WGsuWkp+Wwj+OAgiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIuayoeacieWPr+S7peeUqOS6juWvvOWFpeeahOS4i+a4uOaxoOOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi6I635Y+W6K6+5aSH4oCcJTIkc+KAneS4iuW+ruiwg+mSruKAnCUxJGTigJ3nmoTorr7nva7ml7blh7rplJnjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi6I635Y+W6K6+5aSH4oCcJXPigJ3mnInlhbPkv6Hmga/ml7blh7rplJnjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgdHVuZXIuIgotbXNnc3RyICLorr7lpIfigJwlc+KAneS4jeaYr+W+ruiwg+mSruOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIuiuvue9ruiuvuWkh+KAnCVz4oCd5LiK55qE5bm/5pKt6L6T5Ye65pe25Ye66ZSZ44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAi6K6+572u6K6+5aSHICUyJHMg5LiK55qE6L6T5YWlICUxJGQg5pe25Ye66ZSZ44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLmlLnlj5jorr7lpIfigJwlc+KAneeahOmdmemfs+eKtuaAgeaXtuWHuumUmeOAgiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZWQgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAi5YiG6YWN6K+35rGC55qE5YaF5a2Y5aSx6LSl44CCIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIuWIhumFjeivt+axgueahOWGheWtmOWksei0peOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICLorr7lpIcgJXMg5LiK55qE6L2s5o2i5Zmo5rKh5pyJ5pSv5oyB55qE6L6T5YWl5qC85byPIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICLorr7lpIcgJXMg5LiK55qE6L2s5o2i5Zmo5rKh5pyJ5pSv5oyB55qE6L6T5Ye65qC85byPIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICLorr7lpIcgJXMg5LiK55qE57yW56CB5Zmo5rKh5pyJ5pSv5oyB55qE6L6T5YWl5qC85byPIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAi6K6+5aSHICVzIOS4iueahOe8lueggeWZqOayoeacieaUr+aMgeeahOi+k+WHuuagvOW8jyIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICLlkK/liqjop6PnoIHnur/nqIvlpLHotKXjgIIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIuWkhOeQhuW4p+Wksei0peOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIuiOt+WPluiuvuWkh+KAnCVz4oCd55qE5L+h5oGv5pe25Ye66ZSZOuWug+S4jeaYr+S4gOS4qiB2NGwyIOmpseWKqOWZqO+8jOivt+ajgOafpeaYr+WQpuS4uiB2NGwx44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIKLW1zZ3N0ciAi5p+l5a+76K6+5aSHICUyJHMg5Lit55qE6L6T5YWlICUxJGQg55qE5bGe5oCn5pe25Ye66ZSZIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZyBvZiB0dW5lciAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIuiOt+WPluiuvuWkhyAlMiRzIOS4iueahOW+ruiwg+mSriAlMSRkIOeahOiuvue9ruaXtuWHuumUmSIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgbm9ybSBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIuiOt+WPluiuvuWkh+KAnCVz4oCd55qE5Z+65YeG5pe25Ye66ZSZ44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICLojrflj5borr7lpIfigJwlc+KAneS4iueahOaOp+WItuWxnuaAp+aXtuWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICLml6Dms5Xnoa7orqTorr7lpIfigJwlc+KAneOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGlzIGlzbid0IGEgZGV2aWNlICclcycuIgotbXNnc3RyICLkuI3mmK/orr7lpIfigJwlc+KAneOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOiuvuWkh+KAnCVz4oCd6K+75YaZ44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAi4oCcJXPigJ3kuI3mmK/kuIDkuKrmjZXojrforr7lpIfjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iCi1tc2dzdHIgIuKAnCVz4oCd5LiN5piv6L6T5Ye66K6+5aSH44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICLorr7lpIfigJwlc+KAneS4jeaYr00yTeiuvuWkh+OAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZHVwIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAi5peg5rOV5aSN5Yi26K6+5aSH4oCcJXPigJ3mnaXor7vlj5blkozlhpnlhaXjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIuiuvue9ruiuvuWkh+KAnCVz4oCd55qE5Z+65YeG5pe25Ye66ZSZ44CCIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi6I635Y+W6K6+5aSH4oCcJXPigJ3nmoTlvZPliY3lvq7osIPpkq7popHnjofml7blh7rplJnjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSBmb3IgZGV2aWNlICclcycgdG8gJWx1IEh6LiIKLW1zZ3N0ciAi6K6+572u6K6+5aSH4oCcJXPigJ3nmoTlvZPliY3lvq7osIPpkq7popHnjofkuLogJWx1IEh6IOaXtuWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICLojrflj5borr7lpIfigJwlc+KAneeahOS/oeWPt+mVv+W6puaXtuWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi6I635Y+W6K6+5aSH4oCcJTIkc+KAneeahOaOp+WItuWZqCAlMSRkIOeahOWAvOWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAi6K6+572u6K6+5aSH4oCcJTMkc+KAneeahOaOp+WItuWZqCAlMiRkIOeahOWAvOS4uiAlMSRkIOaXtuWHuumUmeOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAi6I635Y+W6K6+5aSH4oCcJXPigJ3kuIrnmoTlvZPliY3ovpPlhaXlh7rplJnjgILkuZ/orrjlroPmmK/kuIDkuKrlub/mkq3orr7lpIciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAi6I635Y+W6K6+5aSH4oCcJXPigJ3kuIrnmoTlvZPliY3ovpPlhaXlh7rplJnjgILlroPlj6/og73mmK/kuIDkuKrlub/mkq3orr7lpIciCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAi5bCG6L6T5Ye6ICVkIOiuvue9ruWIsOiuvuWkhyAlcyDkuIrlpLHotKXjgIIiCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICLlsJrkuI3mlK/mjIHlnKjov5DooYzml7bmm7TmlLnliIbovqjnjofjgIIiCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIuayoeacieaXtumSn+eahOivneaXoOazleaTjeS9nCIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6ZSZ6K+v44CCIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAi5YaF6YOo5pWw5o2u5rWB6ZSZ6K+v44CCIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IHNvdW5kIHNlcnZlciBjYXBhYmlsaXRpZXMiCi0jfiBtc2dzdHIgIuafpeWvu+mfs+mikeacjeWKoeWZqOeahOacjeWKoeWksei0pSIKLQotI34gbXNnaWQgIkJhc3MiCi0jfiBtc2dzdHIgIuS9jumfsyhCYXNzKSIKLQotI34gbXNnaWQgIlRyZWJsZSIKLSN+IG1zZ3N0ciAi6auY6Z+zKFRyZWJsZSkiCi0KLSN+IG1zZ2lkICJTeW50aCIKLSN+IG1zZ3N0ciAi5ZCI5oiQ5ZmoIgotCi0jfiBtc2dpZCAiUENNIgotI34gbXNnc3RyICLms6LlvaIoUENNKSIKLQotI34gbXNnaWQgIlNwZWFrZXIiCi0jfiBtc2dzdHIgIuaJrOWjsOWZqCIKLQotI34gbXNnaWQgIkNEIgotI34gbXNnc3RyICJDRCDpn7PpopEiCi0KLSN+IG1zZ2lkICJNaXhlciIKLSN+IG1zZ3N0ciAi5re36Z+z5ZmoIgotCi0jfiBtc2dpZCAiUENNLTIiCi0jfiBtc2dzdHIgIlBDTS0yIgotCi0jfiBtc2dpZCAiSW4tZ2FpbiIKLSN+IG1zZ3N0ciAi6L6T5YWl5aKe55uKIgotCi0jfiBtc2dpZCAiT3V0LWdhaW4iCi0jfiBtc2dzdHIgIui+k+WHuuWinuebiiIKLQotI34gbXNnaWQgIkxpbmUtMSIKLSN+IG1zZ3N0ciAi57q/6LevMSIKLQotI34gbXNnaWQgIkxpbmUtMiIKLSN+IG1zZ3N0ciAi57q/6LevMiIKLQotI34gbXNnaWQgIkxpbmUtMyIKLSN+IG1zZ3N0ciAi57q/6LevMyIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMSIKLSN+IG1zZ3N0ciAi5pWw5a2X57q/6LevMSIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMiIKLSN+IG1zZ3N0ciAi5pWw5a2X57q/6LevMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwtMyIKLSN+IG1zZ3N0ciAi5pWw5a2X57q/6LevMyIKLQotI34gbXNnaWQgIlBob25lLWluIgotI34gbXNnc3RyICLor53nrZLovpPlhaUiCi0KLSN+IG1zZ2lkICJQaG9uZS1vdXQiCi0jfiBtc2dzdHIgIuivneetkui+k+WHuiIKLQotI34gbXNnaWQgIlZpZGVvIgotI34gbXNnc3RyICLop4bpopEiCi0KLSN+IG1zZ2lkICJSYWRpbyIKLSN+IG1zZ3N0ciAi5bm/5pKtIgotCi0jfiBtc2dpZCAiR290IHVuZXhwZWN0ZWQgZnJhbWUgc2l6ZSBvZiAldSBpbnN0ZWFkIG9mICV1LiIKLSN+IG1zZ3N0ciAi5Y+W5b6X5LqGICV1IOeahOS4jemcgOimgeeahOW4p+Wkp+Wwj++8jOiAjOS4jeaYryAldeOAgiIKLQotI34gbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgb24gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLor7vlj5borr7lpIfigJglMiRz4oCZ5Lit55qEICUxJGQg5a2X6IqC5pe25Ye66ZSZ44CCIgotCi0jfiBtc2dpZCAiQ291bGQgbm90IGVucXVldWUgYnVmZmVycyBpbiBkZXZpY2UgJyVzJy4iCi0jfiBtc2dzdHIgIuaXoOazleWvueiuvuWkh+KAmCVz4oCZ5Lit55qE57yT5Yay5Yy66L+b6KGM5o6S5bqP44CCIgotCi0jfiBtc2dpZCAiRmFpbGVkIHRyeWluZyB0byBnZXQgdmlkZW8gZnJhbWVzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLku47orr7lpIfigJglc+KAmeS4iuiOt+WPluinhumikeeahOWwneivleWksei0peS6huOAgiIKLQotI34gbXNnaWQgIkZhaWxlZCBhZnRlciAlZCB0cmllcy4gZGV2aWNlICVzLiBzeXN0ZW0gZXJyb3I6ICVzIgotI34gbXNnc3RyICLlnKggJWQg5qyh5bCd6K+V5ZCO5aSx6LSl44CC6K6+5aSHICVz44CC57O757uf6ZSZ6K+vOiAlcyIKLQotI34gbXNnaWQgIiIKLSN+ICJUaGUgYnVmZmVyIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgb3IgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMsIG9yIG5vICIKLSN+ICJidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgeWV0LCBvciB0aGUgdXNlcnB0ciBvciBsZW5ndGggYXJlIGludmFsaWQuICIKLSN+ICJkZXZpY2UgJXMiCi0jfiBtc2dzdHIgIiIKLSN+ICLkuI3mlK/mjIHnmoTnvJPlhrLljLrnsbvlnovvvIzmiJbogIXntKLlvJXotoXlh7rojIPlm7TkuobvvIzmiJbmmK/ov5jmnKrliIbphY3nvJPlhrLljLrvvIzmiJbpnZ7ms5XnmoTnlKjmiLfmjIciCi0jfiAi6ZKI5oiW6ZW/5bqm44CC6K6+5aSHICVzIgotCi0jfiBtc2dpZCAiIgotI34gIkZhaWxlZCB0cnlpbmcgdG8gZ2V0IHZpZGVvIGZyYW1lcyBmcm9tIGRldmljZSAnJXMnLiBOb3QgZW5vdWdoIG1lbW9yeS4iCi0jfiBtc2dzdHIgIuS7juiuvuWkh+KAmCVz4oCZ5LiK6I635Y+W6KeG6aKR55qE5bCd6K+V5aSx6LSl5LqG44CC5rKh5pyJ6Laz5aSf55qE5YaF5a2Y44CCIgotCi0jfiBtc2dpZCAiaW5zdWZmaWNpZW50IG1lbW9yeSB0byBlbnF1ZXVlIGEgdXNlciBwb2ludGVyIGJ1ZmZlci4gZGV2aWNlICVzLiIKLSN+IG1zZ3N0ciAi5YaF5a2Y5LiN6Laz5peg5rOV5a+555So5oi35oyH6ZKI57yT5Yay5Yy66L+b6KGM5o6S5bqP44CC6K6+5aSHICVz44CCIgotCi0jfiBtc2dpZCAiTm8gZnJlZSBidWZmZXJzIGZvdW5kIGluIHRoZSBwb29sIGF0IGluZGV4ICVkLiIKLSN+IG1zZ3N0ciAi5Zyo5YaF5a2Y5rGg5LitICVkIOWkhOayoeacieWPr+WIhumFjeeahOe8k+WGsuWMuuOAgiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBnZXQgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnLiIKLSN+IG1zZ3N0ciAi5peg5rOV5LuO6K6+5aSH4oCYJXPigJnkuK3ojrflj5bnvJPlhrLljLrjgIIiCi0KLSN+IG1zZ2lkICJDb3VsZCBub3QgZ2V0IGVub3VnaCBidWZmZXJzIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLml6Dms5Xku47orr7lpIfigJglc+KAmeS4reiOt+WPlui2s+Wkn+eahOe8k+WGsuWMuuOAgiIKLQotI34gbXNnaWQgIkVycm9yIHN0YXJ0aW5nIHN0cmVhbWluZyBjYXB0dXJlIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLku47orr7lpIfigJglc+KAmeS4reWQr+eUqOa1geaNleiOt+aXtuWHuumUmeOAgiIKLQotI34gbXNnaWQgIkVycm9yIHN0b3BwaW5nIHN0cmVhbWluZyBjYXB0dXJlIGZyb20gZGV2aWNlICclcycuIgotI34gbXNnc3RyICLku47orr7lpIfigJglc+KAmeS4reWBnOatoua1geaNleiOt+aXtuWHuumUmeOAgiIKLQotI34gbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcy4nIgotI34gbXNnc3RyICLojrflj5borr7lpIfigJglc+KAmeS4iueahOaOp+WItuWxnuaAp+aXtuWHuumUmeOAgiIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gQ0QuIgotI34gbXNnc3RyICLml6Dms5Xku44gQ0Qg5Lit6K+75Y+W44CCIgotCi0jfiBtc2dpZCAiRGlzYyBpcyBub3QgYW4gQXVkaW8gQ0QuIgotI34gbXNnc3RyICLpnZ7pn7PpopEgQ0Qg55uY44CCIgotCi0jfiBtc2dpZCAiVGhpcyBmaWxlIGlzIGVuY3J5cHRlZCBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi0jfiBtc2dzdHIgIuatpOaWh+S7tuW3suWKoOWvhu+8jOaXoOazleaSreaUvuOAgiIKLQotI34gbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdmlkZW8gY2FwdHVyZSIKLSN+IG1zZ3N0ciAi6K6+5aSH4oCcJXPigJ3kuI3mlK/mjIHop4bpopHmjZXmjYkiCi0KLSN+IG1zZ2lkICJMaW5lLWluIgotI34gbXNnc3RyICLnur/ot6/ovpPlhaUiCi0KLSN+IG1zZ2lkICJSZWNvcmQiCi0jfiBtc2dzdHIgIuW9lemfsyIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzb3VuZCBzZXJ2ZXIiCi0jfiBtc2dzdHIgIuaXoOazleW7uueri+S4jumfs+mikeacjeWKoeWZqOeahOi/nuaOpSIKLQotI34gbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4iCi0jfiBtc2dzdHIgIuaXoOazleaJk+W8gOmfs+mikeiuvuWkh+adpei/m+ihjOa3t+mfs+WZqOaOp+WItuOAgiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIuaXoOazleaJk+W8gOmfs+mikeiuvuWkh+adpei/m+ihjOa3t+mfs+WZqOaOp+WItuOAgui/meS4gOeJiOacrOeahE9wZW4gU291bmQgU3lzdGVt5LiN5pSv5oyB5q2k57uEIgotI34gIuS7tuOAgiIKLQotI34gbXNnaWQgIk1hc3RlciIKLSN+IG1zZ3N0ciAi5Li7IgotCi0jfiBtc2dpZCAiRnJvbnQiCi0jfiBtc2dzdHIgIuWJjSIKLQotI34gbXNnaWQgIlJlYXIiCi0jfiBtc2dzdHIgIuWQjiIKLQotI34gbXNnaWQgIkhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIuWktOaItOW8j+iAs+acuiIKLQotI34gbXNnaWQgIkNlbnRlciIKLSN+IG1zZ3N0ciAi5LitIgotCi0jfiBtc2dpZCAiTEZFIgotI34gbXNnc3RyICLph43kvY7pn7MiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCIKLSN+IG1zZ3N0ciAi546v57uVIgotCi0jfiBtc2dpZCAiU2lkZSIKLSN+IG1zZ3N0ciAi5L6nIgotCi0jfiBtc2dpZCAiQVVYIE91dCIKLSN+IG1zZ3N0ciAi6L6F5Yqp6L6T5Ye6IgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNEIOa3seW6piIKLQotI34gbXNnaWQgIjNEIENlbnRlciIKLSN+IG1zZ3N0ciAiM0Qg5Lit5aSuIgotCi0jfiBtc2dpZCAiM0QgRW5oYW5jZSIKLSN+IG1zZ3N0ciAiM0Qg5aKe5by6IgotCi0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICLnlLXor50iCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAi6KeG6aKR6L6T5YWlIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICLovoXliqnovpPlh7oiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAi5b2V6Z+z5aKe55uKIgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIui+k+WHuuWinuebiiIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIum6puWFi+mjjuWinuW8uiIKLQotI34gbXNnaWQgIkRpYWdub3N0aWMiCi0jfiBtc2dzdHIgIuiviuaWrSIKLQotI34gbXNnaWQgIkJhc3MgQm9vc3QiCi0jfiBtc2dzdHIgIui0neWPuOWinuW8uiIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICLlm57mlL7nq6/lj6MiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAi6L6T5YWlIgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIuebkeaOp+a6kCIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIumUruebmOicgum4oyIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAi5qih5ouf56uL5L2T5aOwIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICLnq4vkvZPlo7AiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAi546v57uV5aOwIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICLor53nrZLlop7nm4oiCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAi5oms5aOw5Zmo5rqQIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIuivneetkua6kCIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIuaPkuWPoyIKLQotI34gbXNnaWQgIkNlbnRlciAvIExGRSIKLSN+IG1zZ3N0ciAi5LitL+mHjeS9jumfsyIKLQotI34gbXNnaWQgIlN0ZXJlbyBNaXgiCi0jfiBtc2dzdHIgIueri+S9k+WjsOa3t+mfsyIKLQotI34gbXNnaWQgIk1vbm8gTWl4IgotI34gbXNnc3RyICLljZXlo7DpgZPmt7fpn7MiCi0KLSN+IG1zZ2lkICJJbnB1dCBNaXgiCi0jfiBtc2dzdHIgIui+k+WFpea3t+mfsyIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMSIKLSN+IG1zZ3N0ciAi6K+d562SMSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgMiIKLSN+IG1zZ3N0ciAi6K+d562SMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICLmlbDlrZfovpPlh7oiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICLmlbDlrZfovpPlhaUiCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JIgotCi0jfiBtc2dpZCAiTW9kZW0iCi0jfiBtc2dzdHIgIk1vZGVtIgotCi0jfiBtc2dpZCAiSGFuZHNldCIKLSN+IG1zZ3N0ciAiSGFuZHNldCIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICLlhbbku5YiCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICLml6AiCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAi5byAIgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICLlhbMiCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICLpnZnpn7MiCi0KLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICLlv6siCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAi6Z2e5bi45L2OIgotCi0jfiBtc2dpZCAiTG93IgotI34gbXNnc3RyICLkvY4iCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIuS4rSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIumrmCIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAi6Z2e5bi46auYIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAi5Lqn5ZOBIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAi5YmN6Z2i5p2/6K+d562SIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAi5YmN6Z2i5p2/57q/6Lev6L6T5YWlIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi5YmN6Z2i5p2/5aS05oi05byP6ICz5py6IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIuWJjemdouadv+e6v+i3r+i+k+WHuiIKLQotI34gbXNnaWQgIkdyZWVuIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi57u/6Imy5o+S5Y+jIgotCi0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIueyieiJsuaPkuWPoyIKLQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLok53oibLmj5Llj6MiCi0KLSN+IG1zZ2lkICJXaGl0ZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIueZveiJsuaPkuWPoyIKLQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi6buR6Imy5o+S5Y+jIgotCi0jfiBtc2dpZCAiR3JheSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIueBsOiJsuaPkuWPoyIKLQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuapmeiJsuaPkuWPoyIKLQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIue6ouiJsuaPkuWPoyIKLQotI34gbXNnaWQgIlllbGxvdyBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIum7hOiJsuaPkuWPoyIKLQotI34gbXNnaWQgIkdyZWVuIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5YmN6Z2i5p2/57u/6Imy5o+S5Y+jIgotCi0jfiBtc2dpZCAiUGluayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWJjemdouadv+eyieiJsuaPkuWPoyIKLQotI34gbXNnaWQgIkJsdWUgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLliY3pnaLmnb/ok53oibLmj5Llj6MiCi0KLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWJjemdouadv+eZveiJsuaPkuWPoyIKLQotI34gbXNnaWQgIkJsYWNrIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5YmN6Z2i5p2/6buR6Imy5o+S5Y+jIgotCi0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWJjemdouadv+eBsOiJsuaPkuWPoyIKLQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWJjemdouadv+apmeiJsuaPkuWPoyIKLQotI34gbXNnaWQgIlJlZCBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWJjemdouadv+e6ouiJsuaPkuWPoyIKLQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWJjemdouadv+m7hOiJsuaPkuWPoyIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIuWIhuaVo+W8j+i+k+WHuiIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIua3t+e8qSIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgSW5wdXQiCi0jfiBtc2dzdHIgIuiZmuaLn+a3t+mfs+i+k+WFpSIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICLomZrmi5/mt7fpn7PovpPlh7oiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICLomZrmi5/mt7fpn7PpgJrpgZMiCi0KLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMgJWQg5Yqf6IO9IgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIOWKn+iDvSIKZGlmZiAtLWdpdCBhL3BvL3poX0hLLmdtbyBiL3BvL3poX0hLLmdtbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmZmI0Zi4uMDAwMDAwMAotLS0gYS9wby96aF9ISy5nbW8KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wby96aF9ISy5wbyBiL3BvL3poX0hLLnBvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjQ4NWQ3Li4wMDAwMDAwCi0tLSBhL3BvL3poX0hLLnBvCisrKyAvZGV2L251bGwKQEAgLTEsNjgxICswLDAgQEAKLSMgQ2hpbmVzZSAoSG9uZyBLb25nKSB0cmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kLTAuMTAuMi4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgQWJlbCBDaGV1bmcgPGFiZWxjaGV1bmdAZ21haWwuY29tPiwgMjAwNi4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QtMC4xMC4yIDAuMTAuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTA4LTI5IDAxOjA4KzA4MDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEFiZWwgQ2hldW5nIDxhYmVsY2hldW5nQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBDaGluZXNlIChIb25nIEtvbmcpIDxjb21tdW5pdHlAbGludXhoYWxsLm9yZz5cbiIKLSJMYW5ndWFnZTogemhfSEtcbiIKLSJNSU1FLVZlcnNpb246IDEuMFxuIgotIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgotIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKLQotbXNnaWQgIkphY2sgc2VydmVyIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGRlY29kZSBKUEVHIGltYWdlIgotbXNnc3RyICIiCi0KLSMuIFRSQU5TTEFUT1JTOiAnc29uZyB0aXRsZScgYnkgJ2FydGlzdCBuYW1lJwotIywgYy1mb3JtYXQKLW1zZ2lkICInJXMnIGJ5ICclcyciCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBjb25uZWN0IHRvIHNlcnZlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gVVJMIHNldC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBzZXJ2ZXIgbmFtZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBlc3RhYmxpc2ggY29ubmVjdGlvbiB0byBzZXJ2ZXIuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZWN1cmUgY29ubmVjdGlvbiBzZXR1cCBmYWlsZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQSBuZXR3b3JrIGVycm9yIG9jY3VycmVkLCBvciB0aGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbiB1bmV4cGVjdGVkbHkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJTZXJ2ZXIgc2VudCBiYWQgZGF0YS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIG9yIGludmFsaWQgaW5wdXQgYXVkaW8sIEFWSSBzdHJlYW0gd2lsbCBiZSBjb3JydXB0LiIKLW1zZ3N0ciAi5rKS5pyJ5Lu75L2V6Ly45YWl55qE6Z+z5pWI6LOH5paZ5oiW6ICF6LOH5paZ54Sh5pWI77yM6KGo56S6IEFWSSDkuLLmtYHlh7rnj77pjK/oqqTjgIIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgY29udGFpbnMgbm8gcGxheWFibGUgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbnZhbGlkIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ2Fubm90IHBsYXkgc3RyZWFtIGJlY2F1c2UgaXQgaXMgZW5jcnlwdGVkIHdpdGggUGxheVJlYWR5IERSTS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBjb3JydXB0IGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSW52YWxpZCBhdG9tIHNpemUuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJUaGlzIGZpbGUgaXMgaW5jb21wbGV0ZSBhbmQgY2Fubm90IGJlIHBsYXllZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoZSB2aWRlbyBpbiB0aGlzIGZpbGUgbWlnaHQgbm90IHBsYXkgY29ycmVjdGx5LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyB0b28gbWFueSBzdHJlYW1zLiBPbmx5IHBsYXlpbmcgZmlyc3QgJWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhIEdTdHJlYW1lciBSVFNQICIKLSJleHRlbnNpb24gcGx1Z2luIGZvciBSZWFsIG1lZGlhIHN0cmVhbXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iTm8gc3VwcG9ydGVkIHN0cmVhbSB3YXMgZm91bmQuIFlvdSBtaWdodCBuZWVkIHRvIGFsbG93IG1vcmUgdHJhbnNwb3J0ICIKLSJwcm90b2NvbHMgb3IgbWF5IG90aGVyd2lzZSBiZSBtaXNzaW5nIHRoZSByaWdodCBHU3RyZWFtZXIgUlRTUCBleHRlbnNpb24gIgotInBsdWdpbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBEZXZpY2UgaXMgYmVpbmcgdXNlZCBieSBhbm90aGVyICIKLSJhcHBsaWNhdGlvbi4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCAiCi0iU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLW1zZ3N0ciAi5peg5rOV5omT5byA6Z+z6aKR6K6+5aSH5pKt5pS+6Z+z6aKR44CC5q2k57uE5Lu25LiN5pSv5oyB5byA5pS+5aOw6Z+z57O757ufKE9TUynniYjmnKzjgIIiCi0KLW1zZ2lkICJQbGF5YmFjayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi5q2k6Z+z6aKR6K6+5aSH5LiN5pSv5oyB6Z+z6aKR5pKt5pS+44CCIgotCi1tc2dpZCAiQXVkaW8gcGxheWJhY2sgZXJyb3IuIgotbXNnc3RyICLpn7PpopHmkq3mlL7plJnor6/jgIIiCi0KLW1zZ2lkICJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIuatpOmfs+mikeiuvuWkh+S4jeaUr+aMgeW9lemfs+OAgiIKLQotbXNnaWQgIkVycm9yIHJlY29yZGluZyBmcm9tIGF1ZGlvIGRldmljZS4iCi1tc2dzdHIgIuS7jumfs+mikeiuvuWkh+W9lemfs+aXtuWPkeeUn+mUmeivr+OAgiIKLQotbXNnaWQgIiIKLSJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4gWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuICIKLSJ0aGUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIG5vdCBmb3VuZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIgotbXNnc3RyICIiCi0KLW1zZ2lkICJSZWNvcmQgU291cmNlIgotbXNnc3RyICLlvZXpn7PmnaXmupAiCi0KLSMsIGZ1enp5Ci1tc2dpZCAiTWljcm9waG9uZSIKLW1zZ3N0ciAi6bqm5YWL6aOOIDEiCi0KLW1zZ2lkICJMaW5lIEluIgotbXNnc3RyICLnur/ot6/ovpPlhaUiCi0KLW1zZ2lkICJJbnRlcm5hbCBDRCIKLW1zZ3N0ciAi5YaF6YOoIENEIOmfs+mikSIKLQotbXNnaWQgIlNQRElGIEluIgotbXNnc3RyICJTUERJRiDovpPlhaUiCi0KLW1zZ2lkICJBVVggMSBJbiIKLW1zZ3N0ciAiQVVYIDEg6L6T5YWlIgotCi1tc2dpZCAiQVVYIDIgSW4iCi1tc2dzdHIgIkFVWCAyIOi+k+WFpSIKLQotIywgZnV6enkKLW1zZ2lkICJDb2RlYyBMb29wYmFjayIKLW1zZ3N0ciAiTG9vcGJhY2siCi0KLSMsIGZ1enp5Ci1tc2dpZCAiU3VuVlRTIExvb3BiYWNrIgotbXNnc3RyICJMb29wYmFjayIKLQotbXNnaWQgIlZvbHVtZSIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiR2FpbiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTW9uaXRvciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQnVpbHQtaW4gU3BlYWtlciIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiSGVhZHBob25lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJMaW5lIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU1BESUYgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJBVVggMSBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAyIE91dCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgd2l0aCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBtYXAgYnVmZmVycyBmcm9tIGRldmljZSAnJXMnIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJTyBtZXRob2QgJWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgYW55IGtub3duIElPIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBidXN5IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgY2Fubm90IGNhcHR1cmUgYXQgJWR4JWQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGRvZXMgc3VwcG9ydCBub24tY29udGlndW91cyBwbGFuZXMiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgcHJvdmlkZSBvdXRwdXQgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgYnVmZmVyIHBvb2wuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIk5vIGRvd25zdHJlYW0gcG9vbCB0byBpbXBvcnQgZnJvbS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmdzIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSB0dW5lci4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHJhZGlvIGlucHV0IG9uIGRldmljZSAnJXMnLiAiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGlucHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gY2hhbmdlIG11dGUgc3RhdGUgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb252ZXJ0ZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkVuY29kZXIgb24gZGV2aWNlICVzIGhhcyBubyBzdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIHByb2Nlc3MgZnJhbWUuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkVycm9yIGdldHRpbmcgY2FwYWJpbGl0aWVzIGZvciBkZXZpY2UgJyVzJzogSXQgaXNuJ3QgYSB2NGwyIGRyaXZlci4gQ2hlY2sgaWYgIgotIml0IGlzIGEgdjRsMSBkcml2ZXIuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IGF0dHJpYnV0ZXMgb2YgaW5wdXQgJWQgaW4gZGV2aWNlICVzIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoaXMgaXNuJ3QgYSBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBjYXB0dXJlIGRldmljZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBpcyBub3QgYSBvdXRwdXQgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSMsIGZ1enp5LCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIgotbXNnc3RyICLml6Dms5XmiZPlvIDpn7PpopHmlofku7bov5vooYzmt7fpn7PmjqfliLbmk43kvZzjgIIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCBub3JtIGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJyB0byAlbHUgSHouIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgdmFsdWUgZm9yIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgaW5wdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIiIKLSJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG91dHB1dCAlZCBvbiBkZXZpY2UgJXMuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYW5ub3Qgb3BlcmF0ZSB3aXRob3V0IGEgY2xvY2siCi1tc2dzdHIgIiIKLQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgc3RyZWFtIGVycm9yLiIKLSN+IG1zZ3N0ciAi5YWn6YOo6LOH5paZ5Liy5rWB55m855Sf6Yyv6Kqk44CCIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkludGVybmFsIGRhdGEgZmxvdyBlcnJvci4iCi0jfiBtc2dzdHIgIuWFp+mDqOizh+aWmeS4sua1geeZvOeUn+mMr+iqpOOAgiIKLQotI34gbXNnaWQgIiIKLSN+ICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIG1peGVyIGNvbnRyb2wgaGFuZGxpbmcuIFRoaXMgdmVyc2lvbiBvZiAiCi0jfiAidGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBlbGVtZW50LiIKLSN+IG1zZ3N0ciAiIgotI34gIuaXoOazleaJk+W8gOmfs+mikeiuvuWkh+i/m+ihjOmfs+mHj+aOp+WItuaTjeS9nOOAguatpOmDqOS7tuS4jeaUr+aMgeW8gOaUvuWjsOmfs+ezu+e7nyhPU1Mp55qE54mI5pys44CCIgotCi0jfiBtc2dpZCAiTWFzdGVyIgotI34gbXNnc3RyICLkuLvlo7DpgZMiCi0KLSN+IG1zZ2lkICJGcm9udCIKLSN+IG1zZ3N0ciAi5YmN572u5aOw6YGTIgotCi0jfiBtc2dpZCAiUmVhciIKLSN+IG1zZ3N0ciAi5ZCO572u5aOw6YGTIgotCi0jfiBtc2dpZCAiSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi5aS05oi05byP6ICz5py6IgotCi0jfiBtc2dpZCAiQ2VudGVyIgotI34gbXNnc3RyICLkuK3nva4iCi0KLSN+IG1zZ2lkICJMRkUiCi0jfiBtc2dzdHIgIuS9jumfs+eCriIKLQotI34gbXNnaWQgIlN1cnJvdW5kIgotI34gbXNnc3RyICLnq4vkvZPlo7Dnjq/nu5UiCi0KLSN+IG1zZ2lkICJTaWRlIgotI34gbXNnc3RyICLlt6blj7Plo7DpgZMiCi0KLSN+IG1zZ2lkICJBVVggT3V0IgotI34gbXNnc3RyICJBVVgg6L6T5Ye6IgotCi0jfiBtc2dpZCAiM0QgRGVwdGgiCi0jfiBtc2dzdHIgIjNEIERlcHRoIgotCi0jfiBtc2dpZCAiM0QgQ2VudGVyIgotI34gbXNnc3RyICIzRCBDZW50ZXIiCi0KLSN+IG1zZ2lkICIzRCBFbmhhbmNlIgotI34gbXNnc3RyICIzRCBFbmhhbmNlIgotCi0jfiBtc2dpZCAiVGVsZXBob25lIgotI34gbXNnc3RyICLor53nrZIiCi0KLSN+IG1zZ2lkICJWaWRlbyBJbiIKLSN+IG1zZ3N0ciAi6KeG6aKR6L6T5YWlIgotCi0jfiBtc2dpZCAiQVVYIEluIgotI34gbXNnc3RyICJBVVgg6L6T5YWlIgotCi0jfiBtc2dpZCAiUmVjb3JkIEdhaW4iCi0jfiBtc2dzdHIgIuW9lemfs+WinuebiiIKLQotI34gbXNnaWQgIk91dHB1dCBHYWluIgotI34gbXNnc3RyICLovpPlh7rlop7nm4oiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIEJvb3N0IgotI34gbXNnc3RyICLpuqblhYvpo47lop7nm4oiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiRGlhZ25vc3RpYyIKLSN+IG1zZ3N0ciAi6YeH5qC35YiG5p6QIgotCi0jfiBtc2dpZCAiQmFzcyBCb29zdCIKLSN+IG1zZ3N0ciAiQmFzcyDlop7nm4oiCi0KLSN+IG1zZ2lkICJQbGF5YmFjayBQb3J0cyIKLSN+IG1zZ3N0ciAi5Zue5pS+56uv5Y+jIgotCi0jfiBtc2dpZCAiSW5wdXQiCi0jfiBtc2dzdHIgIui+k+WFpSIKLQotI34gbXNnaWQgIk1vbml0b3IgU291cmNlIgotI34gbXNnc3RyICLnm5Hop4blmajmnaXmupAiCi0KLSN+IG1zZ2lkICJLZXlib2FyZCBCZWVwIgotI34gbXNnc3RyICLmjInplK7lo7Dpn7MiCi0KLSN+IG1zZ2lkICJTaW11bGF0ZSBTdGVyZW8iCi0jfiBtc2dzdHIgIuaooeaLn+eri+S9k+WjsCIKLQotI34gbXNnaWQgIlN0ZXJlbyIKLSN+IG1zZ3N0ciAi56uL5L2T5aOwIgotCi0jfiBtc2dpZCAiU3Vycm91bmQgU291bmQiCi0jfiBtc2dzdHIgIueri+S9k+WjsOeOr+e7lSIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgR2FpbiIKLSN+IG1zZ3N0ciAi6bqm5YWL6aOO5aKe55uKIgotCi0jfiBtc2dpZCAiU3BlYWtlciBTb3VyY2UiCi0jfiBtc2dzdHIgIuaJrOWjsOWZqOmfs+a6kCIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgU291cmNlIgotI34gbXNnc3RyICLpuqblhYvpo47pn7PmupAiCi0KLSN+IG1zZ2lkICJKYWNrIgotI34gbXNnc3RyICJKYWNrIgotCi0jfiBtc2dpZCAiQ2VudGVyIC8gTEZFIgotI34gbXNnc3RyICLkuK3nva4v5L2O6Z+z54KuIgotCi0jfiBtc2dpZCAiU3RlcmVvIE1peCIKLSN+IG1zZ3N0ciAi56uL5L2T5aOwIgotCi0jfiBtc2dpZCAiTW9ubyBNaXgiCi0jfiBtc2dzdHIgIuWNleWjsOmBkyIKLQotI34gbXNnaWQgIklucHV0IE1peCIKLSN+IG1zZ3N0ciAi5re36Z+z6L6T5YWlIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSAyIgotI34gbXNnc3RyICLpuqblhYvpo44gMiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgT3V0IgotI34gbXNnc3RyICLmlbDlrZfovpPlh7oiCi0KLSN+IG1zZ2lkICJEaWdpdGFsIEluIgotI34gbXNnc3RyICLmlbDlrZfovpPlhaUiCi0KLSN+IG1zZ2lkICJIRE1JIgotI34gbXNnc3RyICJIRE1JKOmrmOa4hSkiCi0KLSN+IG1zZ2lkICJNb2RlbSIKLSN+IG1zZ3N0ciAiTW9kZW0iCi0KLSN+IG1zZ2lkICJIYW5kc2V0IgotI34gbXNnc3RyICLmiYvmjIHorr7lpIciCi0KLSN+IG1zZ2lkICJPdGhlciIKLSN+IG1zZ3N0ciAi5YW25a6D6K6+5aSHIgotCi0jfiBtc2dpZCAiTm9uZSIKLSN+IG1zZ3N0ciAi5pegIgotCi0jfiBtc2dpZCAiT24iCi0jfiBtc2dzdHIgIuW8gCIKLQotI34gbXNnaWQgIk9mZiIKLSN+IG1zZ3N0ciAi5YWzIgotCi0jfiBtc2dpZCAiTXV0ZSIKLSN+IG1zZ3N0ciAi6Z2Z6Z+zIgotCi0jfiBtc2dpZCAiRmFzdCIKLSN+IG1zZ3N0ciAi5b+rIgotCi0jfiBtc2dpZCAiVmVyeSBMb3ciCi0jfiBtc2dzdHIgIuW+iOaFoiIKLQotI34gbXNnaWQgIkxvdyIKLSN+IG1zZ3N0ciAi5oWiIgotCi0jfiBtc2dpZCAiTWVkaXVtIgotI34gbXNnc3RyICLkuK3nrYkiCi0KLSN+IG1zZ2lkICJIaWdoIgotI34gbXNnc3RyICLpq5giCi0KLSN+IG1zZ2lkICJWZXJ5IEhpZ2giCi0jfiBtc2dzdHIgIuW+iOmrmCIKLQotI34gbXNnaWQgIlByb2R1Y3Rpb24iCi0jfiBtc2dzdHIgIueUn+S6p+WVhiIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIE1pY3JvcGhvbmUiCi0jfiBtc2dzdHIgIum6puWFi+mjjumdouadvyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgSW4iCi0jfiBtc2dzdHIgIue6v+i3r+i+k+WFpemdouadvyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIEhlYWRwaG9uZXMiCi0jfiBtc2dzdHIgIuWktOaItOW8j+iAs+acuumdouadvyIKLQotI34gbXNnaWQgIkZyb250IFBhbmVsIExpbmUgT3V0IgotI34gbXNnc3RyICLnur/ot6/ovpPlh7rpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JlZW4gQ29ubmVjdG9yIgotI34gbXNnc3RyICLnur/ot6/ovpPlh7oiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUGluayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuivneetkui+k+WHuiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJCbHVlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi56uL5L2T5aOw6L6T5YWlIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIldoaXRlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5bemL+WNleWjsOmBkyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJCbGFjayBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWQjue9ruWjsOmBk+i+k+WHuiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJHcmF5IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5Lit572u5aOw6YGT6L6T5Ye6IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk9yYW5nZSBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuS9jumfs+eCrui+k+WHuiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJSZWQgQ29ubmVjdG9yIgotI34gbXNnc3RyICLlj7Plo7DpgZMiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiWWVsbG93IENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTWlkaSDovpPlh7ov5ri45oiP5pGH5p2GIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkdyZWVuIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi57q/6Lev6L6T5Ye66Z2i5p2/IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlBpbmsgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLor53nrZLovpPlh7rpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQmx1ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIueri+S9k+WjsOi+k+WFpemdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJXaGl0ZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuW3pi/ljZXlo7DpgZPpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiQmxhY2sgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLlkI7nva7lo7DpgZPovpPlh7rpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JheSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuS4ree9ruWjsOmBk+i+k+WHuumdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJPcmFuZ2UgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLkvY7pn7Pngq7ovpPlh7rpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUmVkIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5Y+z5aOw6YGT6Z2i5p2/IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlllbGxvdyBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIk1pZGkg6L6T5Ye6L+a4uOaIj+aRh+adhumdouadvyIKLQotI34gbXNnaWQgIlNwcmVhZCBPdXRwdXQiCi0jfiBtc2dzdHIgIlNwcmVhZCDovpPlh7oiCi0KLSN+IG1zZ2lkICJEb3dubWl4IgotI34gbXNnc3RyICJEb3dubWl4IgotCi0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBJbnB1dCIKLSN+IG1zZ3N0ciAi5qih5ouf5re36Z+z6L6T5YWlIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgT3V0cHV0IgotI34gbXNnc3RyICLmqKHmi5/mt7fpn7PovpPlh7oiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIENoYW5uZWxzIgotI34gbXNnc3RyICLmqKHmi5/mt7fpn7PovpPlhaUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiJXMgJWQgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIOWKn+iDvSIKLQotI34gbXNnaWQgIiVzIEZ1bmN0aW9uIgotI34gbXNnc3RyICIlcyDlip/og70iCmRpZmYgLS1naXQgYS9wby96aF9UVy5nbW8gYi9wby96aF9UVy5nbW8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MjEwMGUuLjAwMDAwMDAKLS0tIGEvcG8vemhfVFcuZ21vCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcG8vemhfVFcucG8gYi9wby96aF9UVy5wbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJhMzU2Zi4uMDAwMDAwMAotLS0gYS9wby96aF9UVy5wbworKysgL2Rldi9udWxsCkBAIC0xLDY4MSArMCwwIEBACi0jIENoaW5lc2UgKHRyYWRpdGlvbmFsKSB0cmFuc2xhdGlvbiBvZiBnc3QtcGx1Z2lucy1nb29kLTAuMTAuMi4KLSMgVGhpcyBmaWxlIGlzIHB1dCBpbiB0aGUgcHVibGljIGRvbWFpbi4KLSMgQWJlbCBDaGV1bmcgPGFiZWxjaGV1bmdAZ21haWwuY29tPiwgMjAwNi4KLSMKLW1zZ2lkICIiCi1tc2dzdHIgIiIKLSJQcm9qZWN0LUlkLVZlcnNpb246IGdzdC1wbHVnaW5zLWdvb2QtMC4xMC4yIDAuMTAuMlxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL1xuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE3LTAyLTIzIDE1OjE2KzAyMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA2LTA4LTI5IDAxOjA4KzA4MDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IEFiZWwgQ2hldW5nIDxhYmVsY2hldW5nQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBDaGluZXNlICh0cmFkaXRpb25hbCkgPHpoLWwxMG5AbGludXgub3JnLnR3PlxuIgotIkxhbmd1YWdlOiB6aF9UV1xuIgotIk1JTUUtVmVyc2lvbjogMS4wXG4iCi0iQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCi0iQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotCi1tc2dpZCAiSmFjayBzZXJ2ZXIgbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gZGVjb2RlIEpQRUcgaW1hZ2UiCi1tc2dzdHIgIiIKLQotIy4gVFJBTlNMQVRPUlM6ICdzb25nIHRpdGxlJyBieSAnYXJ0aXN0IG5hbWUnCi0jLCBjLWZvcm1hdAotbXNnaWQgIiclcycgYnkgJyVzJyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGNvbm5lY3QgdG8gc2VydmVyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJObyBVUkwgc2V0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vla2luZy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIHNlcnZlciBuYW1lLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQ291bGQgbm90IGVzdGFibGlzaCBjb25uZWN0aW9uIHRvIHNlcnZlci4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlY3VyZSBjb25uZWN0aW9uIHNldHVwIGZhaWxlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQsIG9yIHRoZSBzZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlNlcnZlciBzZW50IGJhZCBkYXRhLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gb3IgaW52YWxpZCBpbnB1dCBhdWRpbywgQVZJIHN0cmVhbSB3aWxsIGJlIGNvcnJ1cHQuIgotbXNnc3RyICLmspLmnInku7vkvZXovLjlhaXnmoTpn7PmlYjos4fmlpnmiJbogIXos4fmlpnnhKHmlYjvvIzooajnpLogQVZJIOS4sua1geWHuuePvumMr+iqpOOAgiIKLQotbXNnaWQgIlRoaXMgZmlsZSBjb250YWlucyBubyBwbGF5YWJsZSBzdHJlYW1zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGludmFsaWQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDYW5ub3QgcGxheSBzdHJlYW0gYmVjYXVzZSBpdCBpcyBlbmNyeXB0ZWQgd2l0aCBQbGF5UmVhZHkgRFJNLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhpcyBmaWxlIGlzIGNvcnJ1cHQgYW5kIGNhbm5vdCBiZSBwbGF5ZWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJJbnZhbGlkIGF0b20gc2l6ZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlRoaXMgZmlsZSBpcyBpbmNvbXBsZXRlIGFuZCBjYW5ub3QgYmUgcGxheWVkLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVGhlIHZpZGVvIGluIHRoaXMgZmlsZSBtaWdodCBub3QgcGxheSBjb3JyZWN0bHkuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBmaWxlIGNvbnRhaW5zIHRvbyBtYW55IHN0cmVhbXMuIE9ubHkgcGxheWluZyBmaXJzdCAlZCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIk5vIHN1cHBvcnRlZCBzdHJlYW0gd2FzIGZvdW5kLiBZb3UgbWlnaHQgbmVlZCB0byBpbnN0YWxsIGEgR1N0cmVhbWVyIFJUU1AgIgotImV4dGVuc2lvbiBwbHVnaW4gZm9yIFJlYWwgbWVkaWEgc3RyZWFtcy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIiIKLSJObyBzdXBwb3J0ZWQgc3RyZWFtIHdhcyBmb3VuZC4gWW91IG1pZ2h0IG5lZWQgdG8gYWxsb3cgbW9yZSB0cmFuc3BvcnQgIgotInByb3RvY29scyBvciBtYXkgb3RoZXJ3aXNlIGJlIG1pc3NpbmcgdGhlIHJpZ2h0IEdTdHJlYW1lciBSVFNQIGV4dGVuc2lvbiAiCi0icGx1Z2luLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIERldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgIgotImFwcGxpY2F0aW9uLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiAiCi0idGhlIGRldmljZS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIgotbXNnc3RyICIiCi0KLW1zZ2lkICIiCi0iQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBPcGVuIFNvdW5kICIKLSJTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotbXNnc3RyICLml6Dms5XmiZPlvIDpn7PpopHorr7lpIfmkq3mlL7pn7PpopHjgILmraTnu4Tku7bkuI3mlK/mjIHlvIDmlL7lo7Dpn7Pns7vnu58oT1NTKeeJiOacrOOAgiIKLQotbXNnaWQgIlBsYXliYWNrIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhdWRpbyBkZXZpY2UuIgotbXNnc3RyICLmraTpn7PpopHorr7lpIfkuI3mlK/mjIHpn7PpopHmkq3mlL7jgIIiCi0KLW1zZ2lkICJBdWRpbyBwbGF5YmFjayBlcnJvci4iCi1tc2dzdHIgIumfs+mikeaSreaUvumUmeivr+OAgiIKLQotbXNnaWQgIlJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi5q2k6Z+z6aKR6K6+5aSH5LiN5pSv5oyB5b2V6Z+z44CCIgotCi1tc2dpZCAiRXJyb3IgcmVjb3JkaW5nIGZyb20gYXVkaW8gZGV2aWNlLiIKLW1zZ3N0ciAi5LuO6Z+z6aKR6K6+5aSH5b2V6Z+z5pe25Y+R55Sf6ZSZ6K+v44CCIgotCi1tc2dpZCAiIgotIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gIgotInRoZSBkZXZpY2UuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHJlY29yZGluZy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIgotbXNnc3RyICIiCi0KLW1zZ2lkICJDb3JlQXVkaW8gZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIlJlY29yZCBTb3VyY2UiCi1tc2dzdHIgIuW9lemfs+adpea6kCIKLQotIywgZnV6enkKLW1zZ2lkICJNaWNyb3Bob25lIgotbXNnc3RyICLpuqblhYvpo44gMSIKLQotbXNnaWQgIkxpbmUgSW4iCi1tc2dzdHIgIue6v+i3r+i+k+WFpSIKLQotbXNnaWQgIkludGVybmFsIENEIgotbXNnc3RyICLlhoXpg6ggQ0Qg6Z+z6aKRIgotCi1tc2dpZCAiU1BESUYgSW4iCi1tc2dzdHIgIlNQRElGIOi+k+WFpSIKLQotbXNnaWQgIkFVWCAxIEluIgotbXNnc3RyICJBVVggMSDovpPlhaUiCi0KLW1zZ2lkICJBVVggMiBJbiIKLW1zZ3N0ciAiQVVYIDIg6L6T5YWlIgotCi0jLCBmdXp6eQotbXNnaWQgIkNvZGVjIExvb3BiYWNrIgotbXNnc3RyICJMb29wYmFjayIKLQotIywgZnV6enkKLW1zZ2lkICJTdW5WVFMgTG9vcGJhY2siCi1tc2dzdHIgIkxvb3BiYWNrIgotCi1tc2dpZCAiVm9sdW1lIgotbXNnc3RyICIiCi0KLW1zZ2lkICJHYWluIgotbXNnc3RyICIiCi0KLW1zZ2lkICJNb25pdG9yIgotbXNnc3RyICIiCi0KLW1zZ2lkICJCdWlsdC1pbiBTcGVha2VyIgotbXNnc3RyICIiCi0KLW1zZ2lkICJIZWFkcGhvbmUiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkxpbmUgT3V0IgotbXNnc3RyICIiCi0KLW1zZ2lkICJTUERJRiBPdXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkFVWCAxIE91dCIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiQVVYIDIgT3V0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyAlZCBieXRlcyBmcm9tIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBlbnVtZXJhdGUgcG9zc2libGUgdmlkZW8gZm9ybWF0cyBkZXZpY2UgJyVzJyBjYW4gd29yayB3aXRoIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIlRoZSBkcml2ZXIgb2YgZGV2aWNlICclcycgZG9lcyBub3Qgc3VwcG9ydCBhbnkga25vd24gSU8gbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIGJ1c3kiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgZG9lcyBzdXBwb3J0IG5vbi1jb250aWd1b3VzIHBsYW5lcyIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBnZXQgcGFyYW1ldGVycyBvbiBkZXZpY2UgJyVzJyIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIGRpZCBub3QgYWNjZXB0IG5ldyBmcmFtZSByYXRlIHNldHRpbmcuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgZGlkIG5vdCBwcm92aWRlIG91dHB1dCBmb3JtYXQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJWaWRlbyBkZXZpY2UgcmV0dXJuZWQgaW52YWxpZCBkaW1lbnNpb25zLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgaW50ZXJsYWNpbmcgbWV0aG9kLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiVmlkZW8gZGV2aWNlIHVzZXMgYW4gdW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0LiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBidWZmZXIgcG9vbC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIlZpZGVvIGRldmljZSBkaWQgbm90IHN1Z2dlc3QgYW55IGJ1ZmZlciBzaXplLiIKLW1zZ3N0ciAiIgotCi1tc2dpZCAiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgcmFkaW8gaW5wdXQgb24gZGV2aWNlICclcycuICIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBjaGFuZ2UgbXV0ZSBzdGF0ZSBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gYWxsb2NhdGVkIHJlcXVpcmVkIG1lbW9yeS4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvbnZlcnRlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiCi1tc2dzdHIgIiIKLQotbXNnaWQgIkZhaWxlZCB0byBzdGFydCBkZWNvZGluZyB0aHJlYWQuIgotbXNnc3RyICIiCi0KLW1zZ2lkICJGYWlsZWQgdG8gcHJvY2VzcyBmcmFtZS4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICIiCi0iRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiBJdCBpc24ndCBhIHY0bDIgZHJpdmVyLiBDaGVjayBpZiAiCi0iaXQgaXMgYSB2NGwxIGRyaXZlci4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gcXVlcnkgYXR0cmlidXRlcyBvZiBpbnB1dCAlZCBpbiBkZXZpY2UgJXMiCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNldHRpbmcgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIHF1ZXJ5IG5vcm0gb24gZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIGdldHRpbmcgY29udHJvbHMgYXR0cmlidXRlcyBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkNvdWxkIG5vdCBvcGVuIGRldmljZSAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkRldmljZSAnJXMnIGlzIG5vdCBhIG91dHB1dCBkZXZpY2UuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRGV2aWNlICclcycgaXMgbm90IGEgTTJNIGRldmljZS4iCi1tc2dzdHIgIiIKLQotIywgZnV6enksIGMtZm9ybWF0Ci1tc2dpZCAiQ291bGQgbm90IGR1cCBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iCi1tc2dzdHIgIuaXoOazleaJk+W8gOmfs+mikeaWh+S7tui/m+ihjOa3t+mfs+aOp+WItuaTjeS9nOOAgiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gZ2V0IHNpZ25hbCBzdHJlbmd0aCBmb3IgZGV2aWNlICclcycuIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiRmFpbGVkIHRvIGdldCB2YWx1ZSBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iCi1tc2dzdHIgIiIKLQotIywgYy1mb3JtYXQKLW1zZ2lkICJGYWlsZWQgdG8gc2V0IHZhbHVlICVkIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBnZXQgY3VycmVudCBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gTWF5IGJlIGl0IGlzIGEgcmFkaW8gZGV2aWNlIgotbXNnc3RyICIiCi0KLSMsIGMtZm9ybWF0Ci1tc2dpZCAiIgotIkZhaWxlZCB0byBnZXQgY3VycmVudCBvdXRwdXQgb24gZGV2aWNlICclcycuIE1heSBiZSBpdCBpcyBhIHJhZGlvIGRldmljZSIKLW1zZ3N0ciAiIgotCi0jLCBjLWZvcm1hdAotbXNnaWQgIkZhaWxlZCB0byBzZXQgb3V0cHV0ICVkIG9uIGRldmljZSAlcy4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNoYW5naW5nIHJlc29sdXRpb24gYXQgcnVudGltZSBpcyBub3QgeWV0IHN1cHBvcnRlZC4iCi1tc2dzdHIgIiIKLQotbXNnaWQgIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIKLW1zZ3N0ciAiIgotCi0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBzdHJlYW0gZXJyb3IuIgotI34gbXNnc3RyICLlhafpg6jos4fmlpnkuLLmtYHnmbznlJ/pjK/oqqTjgIIiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiSW50ZXJuYWwgZGF0YSBmbG93IGVycm9yLiIKLSN+IG1zZ3N0ciAi5YWn6YOo6LOH5paZ5Liy5rWB55m855Sf6Yyv6Kqk44CCIgotCi0jfiBtc2dpZCAiIgotI34gIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgbWl4ZXIgY29udHJvbCBoYW5kbGluZy4gVGhpcyB2ZXJzaW9uIG9mICIKLSN+ICJ0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVsZW1lbnQuIgotI34gbXNnc3RyICIiCi0jfiAi5peg5rOV5omT5byA6Z+z6aKR6K6+5aSH6L+b6KGM6Z+z6YeP5o6n5Yi25pON5L2c44CC5q2k6YOo5Lu25LiN5pSv5oyB5byA5pS+5aOw6Z+z57O757ufKE9TUynnmoTniYjmnKzjgIIiCi0KLSN+IG1zZ2lkICJNYXN0ZXIiCi0jfiBtc2dzdHIgIuS4u+WjsOmBkyIKLQotI34gbXNnaWQgIkZyb250IgotI34gbXNnc3RyICLliY3nva7lo7DpgZMiCi0KLSN+IG1zZ2lkICJSZWFyIgotI34gbXNnc3RyICLlkI7nva7lo7DpgZMiCi0KLSN+IG1zZ2lkICJIZWFkcGhvbmVzIgotI34gbXNnc3RyICLlpLTmiLTlvI/ogLPmnLoiCi0KLSN+IG1zZ2lkICJDZW50ZXIiCi0jfiBtc2dzdHIgIuS4ree9riIKLQotI34gbXNnaWQgIkxGRSIKLSN+IG1zZ3N0ciAi5L2O6Z+z54KuIgotCi0jfiBtc2dpZCAiU3Vycm91bmQiCi0jfiBtc2dzdHIgIueri+S9k+WjsOeOr+e7lSIKLQotI34gbXNnaWQgIlNpZGUiCi0jfiBtc2dzdHIgIuW3puWPs+WjsOmBkyIKLQotI34gbXNnaWQgIkFVWCBPdXQiCi0jfiBtc2dzdHIgIkFVWCDovpPlh7oiCi0KLSN+IG1zZ2lkICIzRCBEZXB0aCIKLSN+IG1zZ3N0ciAiM0QgRGVwdGgiCi0KLSN+IG1zZ2lkICIzRCBDZW50ZXIiCi0jfiBtc2dzdHIgIjNEIENlbnRlciIKLQotI34gbXNnaWQgIjNEIEVuaGFuY2UiCi0jfiBtc2dzdHIgIjNEIEVuaGFuY2UiCi0KLSN+IG1zZ2lkICJUZWxlcGhvbmUiCi0jfiBtc2dzdHIgIuivneetkiIKLQotI34gbXNnaWQgIlZpZGVvIEluIgotI34gbXNnc3RyICLop4bpopHovpPlhaUiCi0KLSN+IG1zZ2lkICJBVVggSW4iCi0jfiBtc2dzdHIgIkFVWCDovpPlhaUiCi0KLSN+IG1zZ2lkICJSZWNvcmQgR2FpbiIKLSN+IG1zZ3N0ciAi5b2V6Z+z5aKe55uKIgotCi0jfiBtc2dpZCAiT3V0cHV0IEdhaW4iCi0jfiBtc2dzdHIgIui+k+WHuuWinuebiiIKLQotI34gbXNnaWQgIk1pY3JvcGhvbmUgQm9vc3QiCi0jfiBtc2dzdHIgIum6puWFi+mjjuWinuebiiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJEaWFnbm9zdGljIgotI34gbXNnc3RyICLph4fmoLfliIbmnpAiCi0KLSN+IG1zZ2lkICJCYXNzIEJvb3N0IgotI34gbXNnc3RyICJCYXNzIOWinuebiiIKLQotI34gbXNnaWQgIlBsYXliYWNrIFBvcnRzIgotI34gbXNnc3RyICLlm57mlL7nq6/lj6MiCi0KLSN+IG1zZ2lkICJJbnB1dCIKLSN+IG1zZ3N0ciAi6L6T5YWlIgotCi0jfiBtc2dpZCAiTW9uaXRvciBTb3VyY2UiCi0jfiBtc2dzdHIgIuebkeinhuWZqOadpea6kCIKLQotI34gbXNnaWQgIktleWJvYXJkIEJlZXAiCi0jfiBtc2dzdHIgIuaMiemUruWjsOmfsyIKLQotI34gbXNnaWQgIlNpbXVsYXRlIFN0ZXJlbyIKLSN+IG1zZ3N0ciAi5qih5ouf56uL5L2T5aOwIgotCi0jfiBtc2dpZCAiU3RlcmVvIgotI34gbXNnc3RyICLnq4vkvZPlo7AiCi0KLSN+IG1zZ2lkICJTdXJyb3VuZCBTb3VuZCIKLSN+IG1zZ3N0ciAi56uL5L2T5aOw546v57uVIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBHYWluIgotI34gbXNnc3RyICLpuqblhYvpo47lop7nm4oiCi0KLSN+IG1zZ2lkICJTcGVha2VyIFNvdXJjZSIKLSN+IG1zZ3N0ciAi5oms5aOw5Zmo6Z+z5rqQIgotCi0jfiBtc2dpZCAiTWljcm9waG9uZSBTb3VyY2UiCi0jfiBtc2dzdHIgIum6puWFi+mjjumfs+a6kCIKLQotI34gbXNnaWQgIkphY2siCi0jfiBtc2dzdHIgIkphY2siCi0KLSN+IG1zZ2lkICJDZW50ZXIgLyBMRkUiCi0jfiBtc2dzdHIgIuS4ree9ri/kvY7pn7Pngq4iCi0KLSN+IG1zZ2lkICJTdGVyZW8gTWl4IgotI34gbXNnc3RyICLnq4vkvZPlo7AiCi0KLSN+IG1zZ2lkICJNb25vIE1peCIKLSN+IG1zZ3N0ciAi5Y2V5aOw6YGTIgotCi0jfiBtc2dpZCAiSW5wdXQgTWl4IgotI34gbXNnc3RyICLmt7fpn7PovpPlhaUiCi0KLSN+IG1zZ2lkICJNaWNyb3Bob25lIDIiCi0jfiBtc2dzdHIgIum6puWFi+mjjiAyIgotCi0jfiBtc2dpZCAiRGlnaXRhbCBPdXQiCi0jfiBtc2dzdHIgIuaVsOWtl+i+k+WHuiIKLQotI34gbXNnaWQgIkRpZ2l0YWwgSW4iCi0jfiBtc2dzdHIgIuaVsOWtl+i+k+WFpSIKLQotI34gbXNnaWQgIkhETUkiCi0jfiBtc2dzdHIgIkhETUko6auY5riFKSIKLQotI34gbXNnaWQgIk1vZGVtIgotI34gbXNnc3RyICJNb2RlbSIKLQotI34gbXNnaWQgIkhhbmRzZXQiCi0jfiBtc2dzdHIgIuaJi+aMgeiuvuWkhyIKLQotI34gbXNnaWQgIk90aGVyIgotI34gbXNnc3RyICLlhbblroPorr7lpIciCi0KLSN+IG1zZ2lkICJOb25lIgotI34gbXNnc3RyICLml6AiCi0KLSN+IG1zZ2lkICJPbiIKLSN+IG1zZ3N0ciAi5byAIgotCi0jfiBtc2dpZCAiT2ZmIgotI34gbXNnc3RyICLlhbMiCi0KLSN+IG1zZ2lkICJNdXRlIgotI34gbXNnc3RyICLpnZnpn7MiCi0KLSN+IG1zZ2lkICJGYXN0IgotI34gbXNnc3RyICLlv6siCi0KLSN+IG1zZ2lkICJWZXJ5IExvdyIKLSN+IG1zZ3N0ciAi5b6I5oWiIgotCi0jfiBtc2dpZCAiTG93IgotI34gbXNnc3RyICLmhaIiCi0KLSN+IG1zZ2lkICJNZWRpdW0iCi0jfiBtc2dzdHIgIuS4reetiSIKLQotI34gbXNnaWQgIkhpZ2giCi0jfiBtc2dzdHIgIumrmCIKLQotI34gbXNnaWQgIlZlcnkgSGlnaCIKLSN+IG1zZ3N0ciAi5b6I6auYIgotCi0jfiBtc2dpZCAiUHJvZHVjdGlvbiIKLSN+IG1zZ3N0ciAi55Sf5Lqn5ZWGIgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTWljcm9waG9uZSIKLSN+IG1zZ3N0ciAi6bqm5YWL6aOO6Z2i5p2/IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBJbiIKLSN+IG1zZ3N0ciAi57q/6Lev6L6T5YWl6Z2i5p2/IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgSGVhZHBob25lcyIKLSN+IG1zZ3N0ciAi5aS05oi05byP6ICz5py66Z2i5p2/IgotCi0jfiBtc2dpZCAiRnJvbnQgUGFuZWwgTGluZSBPdXQiCi0jfiBtc2dzdHIgIue6v+i3r+i+k+WHuumdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJHcmVlbiBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIue6v+i3r+i+k+WHuiIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJQaW5rIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi6K+d562S6L6T5Ye6IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkJsdWUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLnq4vkvZPlo7DovpPlhaUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiV2hpdGUgQ29ubmVjdG9yIgotI34gbXNnc3RyICLlt6Yv5Y2V5aOw6YGTIgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkJsYWNrIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5ZCO572u5aOw6YGT6L6T5Ye6IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIkdyYXkgQ29ubmVjdG9yIgotI34gbXNnc3RyICLkuK3nva7lo7DpgZPovpPlh7oiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiT3JhbmdlIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5L2O6Z+z54Ku6L6T5Ye6IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIlJlZCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWPs+WjsOmBkyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJZZWxsb3cgQ29ubmVjdG9yIgotI34gbXNnc3RyICJNaWRpIOi+k+WHui/muLjmiI/mkYfmnYYiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiR3JlZW4gRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLnur/ot6/ovpPlh7rpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiUGluayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuivneetkui+k+WHuumdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJCbHVlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi56uL5L2T5aOw6L6T5YWl6Z2i5p2/IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIldoaXRlIEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5bemL+WNleWjsOmBk+mdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJCbGFjayBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuWQjue9ruWjsOmBk+i+k+WHuumdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJHcmF5IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAi5Lit572u5aOw6YGT6L6T5Ye66Z2i5p2/IgotCi0jLCBmdXp6eQotI34gbXNnaWQgIk9yYW5nZSBGcm9udCBQYW5lbCBDb25uZWN0b3IiCi0jfiBtc2dzdHIgIuS9jumfs+eCrui+k+WHuumdouadvyIKLQotIywgZnV6enkKLSN+IG1zZ2lkICJSZWQgRnJvbnQgUGFuZWwgQ29ubmVjdG9yIgotI34gbXNnc3RyICLlj7Plo7DpgZPpnaLmnb8iCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiWWVsbG93IEZyb250IFBhbmVsIENvbm5lY3RvciIKLSN+IG1zZ3N0ciAiTWlkaSDovpPlh7ov5ri45oiP5pGH5p2G6Z2i5p2/IgotCi0jfiBtc2dpZCAiU3ByZWFkIE91dHB1dCIKLSN+IG1zZ3N0ciAiU3ByZWFkIOi+k+WHuiIKLQotI34gbXNnaWQgIkRvd25taXgiCi0jfiBtc2dzdHIgIkRvd25taXgiCi0KLSN+IG1zZ2lkICJWaXJ0dWFsIE1peGVyIElucHV0IgotI34gbXNnc3RyICLmqKHmi5/mt7fpn7PovpPlhaUiCi0KLSMsIGZ1enp5Ci0jfiBtc2dpZCAiVmlydHVhbCBNaXhlciBPdXRwdXQiCi0jfiBtc2dzdHIgIuaooeaLn+a3t+mfs+i+k+WHuiIKLQotI34gbXNnaWQgIlZpcnR1YWwgTWl4ZXIgQ2hhbm5lbHMiCi0jfiBtc2dzdHIgIuaooeaLn+a3t+mfs+i+k+WFpSIKLQotIywgZnV6enkKLSN+IG1zZ2lkICIlcyAlZCBGdW5jdGlvbiIKLSN+IG1zZ3N0ciAiJXMg5Yqf6IO9IgotCi0jfiBtc2dpZCAiJXMgRnVuY3Rpb24iCi0jfiBtc2dzdHIgIiVzIOWKn+iDvSIKZGlmZiAtLWdpdCBhL3N5cy9NYWtlZmlsZS5hbSBiL3N5cy9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjZDllNy4uMDAwMDAwMAotLS0gYS9zeXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0jIGlmIFVTRV9EWFIzCi0jIERYUjNfRElSPWR4cjMKLSMgZWxzZQotIyBEWFIzX0RJUj0KLSMgZW5kaWYKLQotaWYgVVNFX09TUwotT1NTX0RJUj1vc3MKLWVsc2UKLU9TU19ESVI9Ci1lbmRpZgotCi1pZiBVU0VfT1NTNAotT1NTNF9ESVI9b3NzNAotZWxzZQotT1NTNF9ESVI9Ci1lbmRpZgotCi0KLWlmIFVTRV9ESVJFQ1RTT1VORAotRElSRUNUU09VTkRfRElSPWRpcmVjdHNvdW5kCi1lbHNlCi1ESVJFQ1RTT1VORF9ESVI9Ci1lbmRpZgotCi1pZiBVU0VfV0FWRUZPUk0KLVdBVkVGT1JNX0RJUj13YXZlZm9ybQotZWxzZQotV0FWRUZPUk1fRElSPQotZW5kaWYKLQotaWYgVVNFX1NVTkFVRElPCi1TVU5BVURJT19ESVI9c3VuYXVkaW8KLWVsc2UKLVNVTkFVRElPX0RJUj0KLWVuZGlmCi0KLWlmIFVTRV9PU1hfQVVESU8KLU9TWF9BVURJT19ESVI9b3N4YXVkaW8KLWVsc2UKLU9TWF9BVURJT19ESVI9Ci1lbmRpZgotCi1pZiBVU0VfT1NYX1ZJREVPCi1PU1hfVklERU9fRElSPW9zeHZpZGVvCi1lbHNlCi1PU1hfVklERU9fRElSPQotZW5kaWYKLQotIyBpZiBVU0VfUUNBTQotIyBRQ0FNX0RJUj1xY2FtCi0jIGVsc2UKLSMgUUNBTV9ESVI9Ci0jIGVuZGlmCi0KLWlmIFVTRV9HU1RfVjRMMgotVjRMMl9ESVI9djRsMgotZWxzZQotVjRMMl9ESVI9Ci1lbmRpZgotCi0jIGlmIFVTRV9WQ0QKLSMgVkNEX0RJUj12Y2QKLSMgZWxzZQotIyBWQ0RfRElSPQotIyBlbmRpZgotCi0jIGlmIFVTRV9DRFJPTQotIyAgQ0RST01fRElSPWNkcm9tCi0jIGVsc2UKLSMgQ0RST01fRElSPQotIyBlbmRpZgotCi0jIGlmIFVTRV9PUEVOR0wKLSMgR0xfRElSPWdsc2luawotIyBlbHNlCi0jIEdMX0RJUj0KLSMgZW5kaWYKLQotaWYgVVNFX1gKLVhJTUFHRV9ESVI9eGltYWdlCi1lbHNlCi1YSU1BR0VfRElSPQotZW5kaWYKLQotU1VCRElSUz0kKERJUkVDVFNPVU5EX0RJUikgJChXQVZFRk9STV9ESVIpICQoT1NTX0RJUikgJChPU1M0X0RJUikgJChPU1hfQVVESU9fRElSKSAkKE9TWF9WSURFT19ESVIpICQoU1VOQVVESU9fRElSKSAkKFY0TDJfRElSKSAkKFhJTUFHRV9ESVIpCi0KLURJU1RfU1VCRElSUz1kaXJlY3Rzb3VuZCBvc3Mgb3NzNCBvc3hhdWRpbyBvc3h2aWRlbyBzdW5hdWRpbyB2NGwyIHdhdmVmb3JtIHhpbWFnZQotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCmRpZmYgLS1naXQgYS9zeXMvTWFrZWZpbGUuaW4gYi9zeXMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMTllMWIuLjAwMDAwMDAKLS0tIGEvc3lzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTI2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIGlmIFVTRV9EWFIzCi0jIERYUjNfRElSPWR4cjMKLSMgZWxzZQotIyBEWFIzX0RJUj0KLSMgZW5kaWYKLQotIyBpbmNsdWRlIHRoaXMgYXQgdGhlIGVuZCBvZiAkTU9EVUxFL2V4dC9NYWtlZmlsZS5hbSB0byBmb3JjZSBtYWtlIHRvCi0jIGJ1aWxkIHN1YmRpcmVjdG9yaWVzIGluIHBhcmFsbGVsIHdoZW4gbWFrZSAtak4gaXMgdXNlZC4gV2Ugd2lsbCBlbmQgdXAKLSMgZGVzY2VuZGluZyBpbnRvIGFsbCBzdWJkaXJlY3RvcmllcyBhIHNlY29uZCB0aW1lLCBidXQgb25seSBhZnRlciB0aGUgZmlyc3QKLSMgKHBhcmFsbGVsKSBydW4gaGFzIGZpbmlzaGVkLCBzbyBpdCBzaG91bGQgZ28gcmlnaHQgdGhyb3VnaCB0aGUgc2Vjb25kIHRpbWUuCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBzeXMKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotU09VUkNFUyA9Ci1ESVNUX1NPVVJDRVMgPQotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBcCi0JY3RhZ3MtcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1kdmktcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaHRtbC1yZWN1cnNpdmUgXAotCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1wZGYtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIFwKLQlpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgXAotCXRhZ3MtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1SRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAotICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi1hbV9fcmVjdXJzaXZlX3RhcmdldHMgPSBcCi0gICQoUkVDVVJTSVZFX1RBUkdFVFMpIFwKLSAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgXAotICAkKGFtX19leHRyYV9yZWN1cnNpdmVfdGFyZ2V0cykKLUFNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChhbV9fcmVjdXJzaXZlX3RhcmdldHM6LXJlY3Vyc2l2ZT0pIFRBR1MgQ1RBR1MgXAotCWRpc3RkaXIKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hawotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1AVVNFX09TU19GQUxTRUBPU1NfRElSID0gCi1AVVNFX09TU19UUlVFQE9TU19ESVIgPSBvc3MKLUBVU0VfT1NTNF9GQUxTRUBPU1M0X0RJUiA9IAotQFVTRV9PU1M0X1RSVUVAT1NTNF9ESVIgPSBvc3M0Ci1AVVNFX0RJUkVDVFNPVU5EX0ZBTFNFQERJUkVDVFNPVU5EX0RJUiA9IAotQFVTRV9ESVJFQ1RTT1VORF9UUlVFQERJUkVDVFNPVU5EX0RJUiA9IGRpcmVjdHNvdW5kCi1AVVNFX1dBVkVGT1JNX0ZBTFNFQFdBVkVGT1JNX0RJUiA9IAotQFVTRV9XQVZFRk9STV9UUlVFQFdBVkVGT1JNX0RJUiA9IHdhdmVmb3JtCi1AVVNFX1NVTkFVRElPX0ZBTFNFQFNVTkFVRElPX0RJUiA9IAotQFVTRV9TVU5BVURJT19UUlVFQFNVTkFVRElPX0RJUiA9IHN1bmF1ZGlvCi1AVVNFX09TWF9BVURJT19GQUxTRUBPU1hfQVVESU9fRElSID0gCi1AVVNFX09TWF9BVURJT19UUlVFQE9TWF9BVURJT19ESVIgPSBvc3hhdWRpbwotQFVTRV9PU1hfVklERU9fRkFMU0VAT1NYX1ZJREVPX0RJUiA9IAotQFVTRV9PU1hfVklERU9fVFJVRUBPU1hfVklERU9fRElSID0gb3N4dmlkZW8KLUBVU0VfR1NUX1Y0TDJfRkFMU0VAVjRMMl9ESVIgPSAKLQotIyBpZiBVU0VfUUNBTQotIyBRQ0FNX0RJUj1xY2FtCi0jIGVsc2UKLSMgUUNBTV9ESVI9Ci0jIGVuZGlmCi1AVVNFX0dTVF9WNEwyX1RSVUVAVjRMMl9ESVIgPSB2NGwyCi1AVVNFX1hfRkFMU0VAWElNQUdFX0RJUiA9IAotCi0jIGlmIFVTRV9WQ0QKLSMgVkNEX0RJUj12Y2QKLSMgZWxzZQotIyBWQ0RfRElSPQotIyBlbmRpZgotCi0jIGlmIFVTRV9DRFJPTQotIyAgQ0RST01fRElSPWNkcm9tCi0jIGVsc2UKLSMgQ0RST01fRElSPQotIyBlbmRpZgotCi0jIGlmIFVTRV9PUEVOR0wKLSMgR0xfRElSPWdsc2luawotIyBlbHNlCi0jIEdMX0RJUj0KLSMgZW5kaWYKLUBVU0VfWF9UUlVFQFhJTUFHRV9ESVIgPSB4aW1hZ2UKLVNVQkRJUlMgPSAkKERJUkVDVFNPVU5EX0RJUikgJChXQVZFRk9STV9ESVIpICQoT1NTX0RJUikgJChPU1M0X0RJUikgJChPU1hfQVVESU9fRElSKSAkKE9TWF9WSURFT19ESVIpICQoU1VOQVVESU9fRElSKSAkKFY0TDJfRElSKSAkKFhJTUFHRV9ESVIpCi1ESVNUX1NVQkRJUlMgPSBkaXJlY3Rzb3VuZCBvc3Mgb3NzNCBvc3hhdWRpbyBvc3h2aWRlbyBzdW5hdWRpbyB2NGwyIHdhdmVmb3JtIHhpbWFnZQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgc3lzL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHN5cy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0kKHRvcF9zcmNkaXIpL2NvbW1vbi9wYXJhbGxlbC1zdWJkaXJzLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKLSMgaW50byB0aGVtIGFuZCBydW4gJ21ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgotIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiAnbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAotIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiAnY29uZmlnLnN0YXR1cycsIGVkaXQgJ2NvbmZpZy5zdGF0dXMnCi0jICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biAnbWFrZScpOwotIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgJ21ha2UnIGNvbW1hbmQgbGluZS4KLSQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKLQlAZmFpbD07IFwKLQlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAotCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCi0JZWxzZSBcCi0JICBmYWlsY29tPSdleGl0IDEnOyBcCi0JZmk7IFwKLQlkb3Rfc2Vlbj1ubzsgXAotCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKLQljYXNlICIkQCIgaW4gXAotCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAotCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAotCWVzYWM7IFwKLQlmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKLQkgICAgZG90X3NlZW49eWVzOyBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCi0JICBlbHNlIFwKLQkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKLQkgIGZpOyBcCi0JICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCi0JICB8fCBldmFsICQkZmFpbGNvbTsgXAotCWRvbmU7IFwKLQlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKLQlmaTsgdGVzdCAteiAiJCRmYWlsIgotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1yZWN1cnNpdmUKLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9LjsgXAotCWVsc2UgXAotCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCi0JICBlbXB0eV9maXg9OyBcCi0JZmk7IFwKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgIHRlc3QgISAtZiAkJHN1YmRpci9UQUdTIHx8IFwKLQkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCi0JICBmaTsgXAotCWRvbmU7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1yZWN1cnNpdmUKLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotCUBsaXN0PSckKERJU1RfU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKLQkgICAgJChhbV9fbWFrZV9kcnlydW4pIFwKLQkgICAgICB8fCB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCi0JICAgICAgfHwgJChNS0RJUl9QKSAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKGRpc3RkaXIpLyQkc3ViZGlyIjsgXAotCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAotCSAgICBuZXdfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBkaXIxPSQkc3ViZGlyOyBkaXIyPSIkKHRvcF9kaXN0ZGlyKSI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X3RvcF9kaXN0ZGlyPSQkcmVsZGlyOyBcCi0JICAgIGVjaG8gIiAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcXCI7IFwKLQkgICAgZWNobyAiICAgICBhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBhbV9fc2tpcF9tb2RlX2ZpeD06IGRpc3RkaXIpIjsgXAotCSAgICAoJChhbV9fY2QpICQkc3ViZGlyICYmIFwKLQkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCi0JICAgICAgICB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIFwKLQkgICAgICAgIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFwKLQkJYW1fX3JlbW92ZV9kaXN0ZGlyPTogXAotCQlhbV9fc2tpcF9sZW5ndGhfY2hlY2s9OiBcCi0JCWFtX19za2lwX21vZGVfZml4PTogXAotCSAgICAgICAgZGlzdGRpcikgXAotCSAgICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stcmVjdXJzaXZlCi1hbGwtYW06IE1ha2VmaWxlCi1pbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCi1pbnN0YWxsZGlycy1hbToKLWluc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQotdW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1yZWN1cnNpdmUKLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktcmVjdXJzaXZlCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1yZWN1cnNpdmUKLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1yZWN1cnNpdmUKLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktcmVjdXJzaXZlCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtcmVjdXJzaXZlCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1yZWN1cnNpdmUKLQotcGRmLWFtOgotCi1wczogcHMtcmVjdXJzaXZlCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiAkKGFtX19yZWN1cnNpdmVfdGFyZ2V0cykgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBcCi0JY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQlpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gXAotCXBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0uUEhPTlk6IGluZGVwZW5kZW50LXN1YmRpcnMgJChTVUJESVJTKQotCi1pbmRlcGVuZGVudC1zdWJkaXJzOiAkKFNVQkRJUlMpCi0KLSQoU1VCRElSUyk6Ci0JJChNQUtFKSAtQyAkQAotCi1hbGwtcmVjdXJzaXZlOiBpbmRlcGVuZGVudC1zdWJkaXJzCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3N5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZS5hbSBiL3N5cy9kaXJlY3Rzb3VuZC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU4MWQyOC4uMDAwMDAwMAotLS0gYS9zeXMvZGlyZWN0c291bmQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RkaXJlY3Rzb3VuZHNpbmsubGENCi0NCi1saWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfU09VUkNFUyA9ICBnc3RkaXJlY3Rzb3VuZHNpbmsuYyBnc3RkaXJlY3Rzb3VuZHBsdWdpbi5jDQotbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0NGTEFHUyA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9DRkxBR1MpIFwKLQkkKERJUkVDVFNPVU5EX0NGTEFHUykKLWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCSQoRElSRUNUU09VTkRfTElCUykKLWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpICQoRElSRUNUU09VTkRfTERGTEFHUykNCi1saWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykNCi0NCi1ub2luc3RfSEVBREVSUyA9IGdzdGRpcmVjdHNvdW5kc2luay5oCmRpZmYgLS1naXQgYS9zeXMvZGlyZWN0c291bmQvTWFrZWZpbGUuaW4gYi9zeXMvZGlyZWN0c291bmQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZWViZmUuLjAwMDAwMDAKLS0tIGEvc3lzL2RpcmVjdHNvdW5kL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTMyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHN5cy9kaXJlY3Rzb3VuZAotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYS1nc3RkaXJlY3Rzb3VuZHNpbmsubG8gXAotCWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYS1nc3RkaXJlY3Rzb3VuZHBsdWdpbi5sbwotbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX09CSkVDVFMgPSAgXAotCSQoYW1fbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQobGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0ZGlyZWN0c291bmRzaW5rLmxhCi1saWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfU09VUkNFUyA9IGdzdGRpcmVjdHNvdW5kc2luay5jIGdzdGRpcmVjdHNvdW5kcGx1Z2luLmMKLWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSBcCi0JJChESVJFQ1RTT1VORF9DRkxBR1MpCi0KLWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCSQoRElSRUNUU09VTkRfTElCUykKLQotbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgJChESVJFQ1RTT1VORF9MREZMQUdTKQotbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdGRpcmVjdHNvdW5kc2luay5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBzeXMvZGlyZWN0c291bmQvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgc3lzL2RpcmVjdHNvdW5kL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0ZGlyZWN0c291bmRzaW5rLmxhOiAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9PQkpFQ1RTKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGFfTElOSykgLXJwYXRoICQocGx1Z2luZGlyKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9PQkpFQ1RTKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRpcmVjdHNvdW5kc2lua19sYS1nc3RkaXJlY3Rzb3VuZHBsdWdpbi5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdGRpcmVjdHNvdW5kc2lua19sYS1nc3RkaXJlY3Rzb3VuZHNpbmsuUGxvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxpYmdzdGRpcmVjdHNvdW5kc2lua19sYS1nc3RkaXJlY3Rzb3VuZHNpbmsubG86IGdzdGRpcmVjdHNvdW5kc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kc2luay5UcG8gLWMgLW8gbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kc2luay5sbyBgdGVzdCAtZiAnZ3N0ZGlyZWN0c291bmRzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRpcmVjdHNvdW5kc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGEtZ3N0ZGlyZWN0c291bmRzaW5rLlRwbyAkKERFUERJUikvbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RkaXJlY3Rzb3VuZHNpbmsuYycgb2JqZWN0PSdsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGEtZ3N0ZGlyZWN0c291bmRzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGEtZ3N0ZGlyZWN0c291bmRzaW5rLmxvIGB0ZXN0IC1mICdnc3RkaXJlY3Rzb3VuZHNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGlyZWN0c291bmRzaW5rLmMKLQotbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kcGx1Z2luLmxvOiBnc3RkaXJlY3Rzb3VuZHBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kcGx1Z2luLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGEtZ3N0ZGlyZWN0c291bmRwbHVnaW4uVHBvIC1jIC1vIGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYS1nc3RkaXJlY3Rzb3VuZHBsdWdpbi5sbyBgdGVzdCAtZiAnZ3N0ZGlyZWN0c291bmRwbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0ZGlyZWN0c291bmRwbHVnaW4uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kcGx1Z2luLlRwbyAkKERFUERJUikvbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kcGx1Z2luLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdGRpcmVjdHNvdW5kcGx1Z2luLmMnIG9iamVjdD0nbGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhLWdzdGRpcmVjdHNvdW5kcGx1Z2luLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0ZGlyZWN0c291bmRzaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdGRpcmVjdHNvdW5kc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RkaXJlY3Rzb3VuZHNpbmtfbGEtZ3N0ZGlyZWN0c291bmRwbHVnaW4ubG8gYHRlc3QgLWYgJ2dzdGRpcmVjdHNvdW5kcGx1Z2luLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdGRpcmVjdHNvdW5kcGx1Z2luLmMKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoSEVBREVSUykKLWluc3RhbGxkaXJzOgotCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLXBsdWdpbkxUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAotCXBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAotCXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kcGx1Z2luLmMgYi9zeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRwbHVnaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFlZTIxNS4uMDAwMDAwMAotLS0gYS9zeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRwbHVnaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotKiBDb3B5cmlnaHQgKEMpIDIwMDUgU2ViYXN0aWVuIE1vdXR0ZSA8c2ViYXN0aWVuQG1vdXR0ZS5uZXQ+Ci0qIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSA8c29uZ2JpcmRAc29uZ2JpcmRuZXN0LmNvbT4KLSoKLSogZ3N0ZGlyZWN0c291bmRwbHVnaW4uYzoKLSoKLSogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKgotKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qCi0qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0qIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0qIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSogCi0qCi0qIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudAotKiBvZiBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSwgdGhlIGNyZWF0b3JzIG9mIHRoZSBTb25nYmlyZCBNdXNpYyBwbGF5ZXIKLSoKLSovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdGRpcmVjdHNvdW5kc2luay5oIgotCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZGlyZWN0c291bmRzaW5rIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9ESVJFQ1RTT1VORF9TSU5LKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBkaXJlY3Rzb3VuZCwKLSAgICAiRGlyZWN0IFNvdW5kIHBsdWdpbiBsaWJyYXJ5IiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgIkxHUEwiLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9zeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmMgYi9zeXMvZGlyZWN0c291bmQvZ3N0ZGlyZWN0c291bmRzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3M2UyYjguLjAwMDAwMDAKLS0tIGEvc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSogQ29weXJpZ2h0IChDKSAyMDA1IFNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PgotKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUgPHNvbmdiaXJkQHNvbmdiaXJkbmVzdC5jb20+Ci0qIENvcHlyaWdodCAoQykgMjAxMCBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0qCi0qIGdzdGRpcmVjdHNvdW5kc2luay5jOgotKgotKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0qIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qCi0qIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoKLSogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0qIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKgotKgotKiBUaGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBtYWRlIHBvc3NpYmxlIGR1ZSB0byB0aGUgaW52b2x2ZW1lbnQKLSogb2YgUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0qCi0qLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1kaXJlY3Rzb3VuZHNpbmsKLSAqCi0gKiBUaGlzIGVsZW1lbnQgbGV0cyB5b3Ugb3V0cHV0IHNvdW5kIHVzaW5nIHRoZSBEaXJlY3RTb3VuZCBBUEkuCi0gKgotICogTm90ZSB0aGF0IHlvdSBzaG91bGQgYWxtb3N0IGFsd2F5cyB1c2UgZ2VuZXJpYyBhdWRpbyBjb252ZXJzaW9uIGVsZW1lbnRzCi0gKiBsaWtlIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBpbiBmcm9udCBvZiBhbiBhdWRpb3NpbmsgdG8gbWFrZSBzdXJlCi0gKiB5b3VyIHBpcGVsaW5lIHdvcmtzIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzICh0aG9zZSBjb252ZXJzaW9uIGVsZW1lbnRzIHdpbGwKLSAqIGFjdCBpbiBwYXNzdGhyb3VnaC1tb2RlIGlmIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5KS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBwaXBlbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGF1ZGlvdGVzdHNyYyAhIGF1ZGlvY29udmVydCAhIHZvbHVtZSB2b2x1bWU9MC4xICEgZGlyZWN0c291bmRzaW5rCi0gKiBdfCB3aWxsIG91dHB1dCBhIHNpbmUgd2F2ZSAoY29udGludW91cyBiZWVwIHNvdW5kKSB0byB5b3VyIHNvdW5kIGNhcmQgKHdpdGgKLSAqIGEgdmVyeSBsb3cgdm9sdW1lIGFzIHByZWNhdXRpb24pLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249bXVzaWMub2dnICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGRpcmVjdHNvdW5kc2luawotICogXXwgd2lsbCBwbGF5IGFuIE9nZy9Wb3JiaXMgYXVkaW8gZmlsZSBhbmQgb3V0cHV0IGl0LgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotI2luY2x1ZGUgImdzdGRpcmVjdHNvdW5kc2luay5oIgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2llYzYxOTM3Lmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpZmRlZiBfX0NZR1dJTl9fCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaWZuZGVmIF9zd2FiCi0jZGVmaW5lIF9zd2FiIHN3YWIKLSNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgREVGQVVMVF9NVVRFIEZBTFNFCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGRpcmVjdHNvdW5kc2lua19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBkaXJlY3Rzb3VuZHNpbmtfZGVidWcKLQotc3RhdGljIHZvaWQgZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3RfZGlyZWN0c291bmRfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfZGlyZWN0c291bmRfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfZGlyZWN0c291bmRfc2lua19nZXRjYXBzIChHc3RCYXNlU2luayAqIGJzaW5rLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X2RpcmVjdHNvdW5kX3NpbmtfcGF5bG9hZCAoR3N0QXVkaW9CYXNlU2luayAqIHNpbmssCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGlyZWN0c291bmRfc2lua19wcmVwYXJlIChHc3RBdWRpb1NpbmsgKiBhc2luaywKLSAgICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RpcmVjdHNvdW5kX3NpbmtfdW5wcmVwYXJlIChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X2RpcmVjdHNvdW5kX3Npbmtfb3BlbiAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2Nsb3NlIChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci1zdGF0aWMgZ2ludCBnc3RfZGlyZWN0c291bmRfc2lua193cml0ZSAoR3N0QXVkaW9TaW5rICogYXNpbmssCi0gICAgZ3BvaW50ZXIgZGF0YSwgZ3VpbnQgbGVuZ3RoKTsKLXN0YXRpYyBndWludCBnc3RfZGlyZWN0c291bmRfc2lua19kZWxheSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIHZvaWQgZ3N0X2RpcmVjdHNvdW5kX3NpbmtfcmVzZXQgKEdzdEF1ZGlvU2luayAqIGFzaW5rKTsKLXN0YXRpYyBHc3RDYXBzICpnc3RfZGlyZWN0c291bmRfcHJvYmVfc3VwcG9ydGVkX2Zvcm1hdHMgKEdzdERpcmVjdFNvdW5kU2luayAqCi0gICAgZHNvdW5kc2luaywgY29uc3QgR3N0Q2FwcyAqIHRlbXBsYXRlX2NhcHMpOwotc3RhdGljIGdib29sZWFuIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX3F1ZXJ5IChHc3RCYXNlU2luayAqIHBhZCwKLSAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotc3RhdGljIHZvaWQgZ3N0X2RpcmVjdHNvdW5kX3Npbmtfc2V0X3ZvbHVtZSAoR3N0RGlyZWN0U291bmRTaW5rICogc2luaywKLSAgICBnZG91YmxlIHZvbHVtZSwgZ2Jvb2xlYW4gc3RvcmUpOwotc3RhdGljIGdkb3VibGUgZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZ2V0X3ZvbHVtZSAoR3N0RGlyZWN0U291bmRTaW5rICogc2luayk7Ci1zdGF0aWMgdm9pZCBnc3RfZGlyZWN0c291bmRfc2lua19zZXRfbXV0ZSAoR3N0RGlyZWN0U291bmRTaW5rICogc2luaywKLSAgICBnYm9vbGVhbiBtdXRlKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfZGlyZWN0c291bmRfc2lua19nZXRfbXV0ZSAoR3N0RGlyZWN0U291bmRTaW5rICogc2luayk7Ci1zdGF0aWMgY29uc3QgZ2NoYXIgKmdzdF9kaXJlY3Rzb3VuZF9zaW5rX2dldF9kZXZpY2UgKEdzdERpcmVjdFNvdW5kU2luayAqCi0gICAgZHNvdW5kc2luayk7Ci1zdGF0aWMgdm9pZCBnc3RfZGlyZWN0c291bmRfc2lua19zZXRfZGV2aWNlIChHc3REaXJlY3RTb3VuZFNpbmsgKiBkc291bmRzaW5rLAotICAgIGNvbnN0IGdjaGFyICogZGV2aWNlX2lkKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2lzX3NwZGlmX2Zvcm1hdCAoR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqCi0gICAgc3BlYyk7Ci0KLXN0YXRpYyBnY2hhciAqZ3N0X2hyZXNfdG9fc3RyaW5nIChIUkVTVUxUIGhSZXMpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgZGlyZWN0c291bmRzaW5rX3NpbmtfZmFjdG9yeSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIFMxNkxFLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF07ICIKLSAgICAgICAgImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSBVOCwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiICJjaGFubmVscyA9IChpbnQpIFsgMSwgMiBdOyIKLSAgICAgICAgImF1ZGlvL3gtYWMzLCBmcmFtZWQgPSAoYm9vbGVhbikgdHJ1ZTsiCi0gICAgICAgICJhdWRpby94LWR0cywgZnJhbWVkID0gKGJvb2xlYW4pIHRydWU7IikpOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9WT0xVTUUsCi0gIFBST1BfTVVURSwKLSAgUFJPUF9ERVZJQ0UKLX07Ci0KLSNkZWZpbmUgZ3N0X2RpcmVjdHNvdW5kX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdERpcmVjdFNvdW5kU2luaywgZ3N0X2RpcmVjdHNvdW5kX3NpbmssCi0gICAgR1NUX1RZUEVfQVVESU9fU0lOSywgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9TVFJFQU1fVk9MVU1FLCBOVUxMKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfZGlyZWN0c291bmRfc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0RGlyZWN0U291bmRTaW5rICpkc291bmRzaW5rID0gR1NUX0RJUkVDVFNPVU5EX1NJTksgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChkc291bmRzaW5rLT5kZXZpY2VfaWQpOwotICBkc291bmRzaW5rLT5kZXZpY2VfaWQgPSBOVUxMOwotCi0gIGdfbXV0ZXhfY2xlYXIgKCZkc291bmRzaW5rLT5kc291bmRfbG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfY2xhc3NfaW5pdCAoR3N0RGlyZWN0U291bmRTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEF1ZGlvU2lua0NsYXNzICpnc3RhdWRpb3NpbmtfY2xhc3MgPSBHU1RfQVVESU9fU0lOS19DTEFTUyAoa2xhc3MpOwotICBHc3RBdWRpb0Jhc2VTaW5rQ2xhc3MgKmdzdGF1ZGlvYmFzZXNpbmtfY2xhc3MgPQotICAgICAgR1NUX0FVRElPX0JBU0VfU0lOS19DTEFTUyAoa2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChkaXJlY3Rzb3VuZHNpbmtfZGVidWcsICJkaXJlY3Rzb3VuZHNpbmsiLCAwLAotICAgICAgIkRpcmVjdFNvdW5kIHNpbmsiKTsKLQotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfZGlyZWN0c291bmRfc2lua19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2dldF9wcm9wZXJ0eTsKLQotICBnc3RiYXNlc2lua19jbGFzcy0+Z2V0X2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2dldGNhcHMpOwotCi0gIGdzdGJhc2VzaW5rX2NsYXNzLT5xdWVyeSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGlyZWN0c291bmRfc2lua19xdWVyeSk7Ci0KLSAgZ3N0YXVkaW9iYXNlc2lua19jbGFzcy0+cGF5bG9hZCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RpcmVjdHNvdW5kX3NpbmtfcGF5bG9hZCk7Ci0KLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5wcmVwYXJlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGlyZWN0c291bmRfc2lua19wcmVwYXJlKTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT51bnByZXBhcmUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kaXJlY3Rzb3VuZF9zaW5rX3VucHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+b3BlbiA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGlyZWN0c291bmRfc2lua19vcGVuKTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5jbG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGlyZWN0c291bmRfc2lua19jbG9zZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+d3JpdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X2RpcmVjdHNvdW5kX3Npbmtfd3JpdGUpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2RlbGF5KTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5yZXNldCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfZGlyZWN0c291bmRfc2lua19yZXNldCk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfVk9MVU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoInZvbHVtZSIsICJWb2x1bWUiLAotICAgICAgICAgICJWb2x1bWUgb2YgdGhpcyBzdHJlYW0iLCAwLjAsIDEuMCwgMS4wLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsCi0gICAgICBQUk9QX01VVEUsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoIm11dGUiLCAiTXV0ZSIsCi0gICAgICAgICAgIk11dGUgc3RhdGUgb2YgdGhpcyBzdHJlYW0iLCBERUZBVUxUX01VVEUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfREVWSUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZSIsICJEZXZpY2UiLAotICAgICAgICAgICJEaXJlY3RTb3VuZCBwbGF5YmFjayBkZXZpY2UgYXMgYSBHVUlEIHN0cmluZyIsCi0gICAgICAgICAgTlVMTCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJEaXJlY3QgU291bmQgQXVkaW8gU2luayIsICJTaW5rL0F1ZGlvIiwKLSAgICAgICJPdXRwdXQgdG8gYSBzb3VuZCBjYXJkIHZpYSBEaXJlY3QgU291bmQiLAotICAgICAgIlNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJmRpcmVjdHNvdW5kc2lua19zaW5rX2ZhY3RvcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfaW5pdCAoR3N0RGlyZWN0U291bmRTaW5rICogZHNvdW5kc2luaykKLXsKLSAgZHNvdW5kc2luay0+dm9sdW1lID0gMTAwOwotICBkc291bmRzaW5rLT5tdXRlID0gRkFMU0U7Ci0gIGRzb3VuZHNpbmstPmRldmljZV9pZCA9IE5VTEw7Ci0gIGRzb3VuZHNpbmstPnBEUyA9IE5VTEw7Ci0gIGRzb3VuZHNpbmstPmNhY2hlZF9jYXBzID0gTlVMTDsKLSAgZHNvdW5kc2luay0+cERTQlNlY29uZGFyeSA9IE5VTEw7Ci0gIGRzb3VuZHNpbmstPmN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0ID0gMDsKLSAgZHNvdW5kc2luay0+YnVmZmVyX3NpemUgPSBEU0JTSVpFX01JTjsKLSAgZHNvdW5kc2luay0+dm9sdW1lID0gMTAwOwotICBnX211dGV4X2luaXQgKCZkc291bmRzaW5rLT5kc291bmRfbG9jayk7Ci0gIGRzb3VuZHNpbmstPmZpcnN0X2J1ZmZlcl9hZnRlcl9yZXNldCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdHNvdW5kX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdERpcmVjdFNvdW5kU2luayAqc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9WT0xVTUU6Ci0gICAgICBnc3RfZGlyZWN0c291bmRfc2lua19zZXRfdm9sdW1lIChzaW5rLCBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKSwgVFJVRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVURToKLSAgICAgIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX3NldF9tdXRlIChzaW5rLCBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFVklDRToKLSAgICAgIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX3NldF9kZXZpY2UgKHNpbmssIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKnNpbmsgPSBHU1RfRElSRUNUU09VTkRfU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfVk9MVU1FOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZ2V0X3ZvbHVtZSAoc2luaykpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX01VVEU6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZ2V0X211dGUgKHNpbmspKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBnc3RfZGlyZWN0c291bmRfc2lua19nZXRfZGV2aWNlIChzaW5rKSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX2dldGNhcHMgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZTsKLSAgR3N0RGlyZWN0U291bmRTaW5rICpkc291bmRzaW5rID0gR1NUX0RJUkVDVFNPVU5EX1NJTksgKGJzaW5rKTsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBpZiAoZHNvdW5kc2luay0+cERTID09IE5VTEwpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChkc291bmRzaW5rLCAiZGV2aWNlIG5vdCBvcGVuLCB1c2luZyB0ZW1wbGF0ZSBjYXBzIik7Ci0gICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGJhc2UgY2xhc3Mgd2lsbCBnZXQgdGVtcGxhdGUgY2FwcyBmb3IgdXMgKi8KLSAgfQotCi0gIGlmIChkc291bmRzaW5rLT5jYWNoZWRfY2FwcykgewotICAgIGNhcHMgPSBnc3RfY2Fwc19yZWYgKGRzb3VuZHNpbmstPmNhY2hlZF9jYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfR0VUX0NMQVNTIChkc291bmRzaW5rKTsKLSAgICBwYWRfdGVtcGxhdGUgPSBnc3RfZWxlbWVudF9jbGFzc19nZXRfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLCAic2luayIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChwYWRfdGVtcGxhdGUgIT0gTlVMTCwgTlVMTCk7Ci0KLSAgICBjYXBzID0gZ3N0X2RpcmVjdHNvdW5kX3Byb2JlX3N1cHBvcnRlZF9mb3JtYXRzIChkc291bmRzaW5rLAotICAgICAgICBnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChwYWRfdGVtcGxhdGUpKTsKLSAgICBpZiAoY2FwcykKLSAgICAgIGRzb3VuZHNpbmstPmNhY2hlZF9jYXBzID0gZ3N0X2NhcHNfcmVmIChjYXBzKTsKLSAgfQotCi0gIGlmIChjYXBzICYmIGZpbHRlcikgewotICAgIEdzdENhcHMgKnRtcCA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGNhcHMgPSB0bXA7Ci0gIH0KLQotICBpZiAoY2FwcykgewotICAgIGdjaGFyICpjYXBzX3N0cmluZyA9IGdzdF9jYXBzX3RvX3N0cmluZyAoY2Fwcyk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHNvdW5kc2luaywgInJldHVybmluZyBjYXBzICVzIiwgY2Fwc19zdHJpbmcpOwotICAgIGdfZnJlZSAoY2Fwc19zdHJpbmcpOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfYWNjZXB0Y2FwcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKmRzaW5rID0gR1NUX0RJUkVDVFNPVU5EX1NJTksgKHNpbmspOwotICBHc3RQYWQgKnBhZDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0Q2FwcyAqcGFkX2NhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqc3Q7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjIHNwZWMgPSB7IDAgfTsKLQotICBpZiAoR19VTkxJS0VMWSAoZHNpbmsgPT0gTlVMTCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHBhZCA9IHNpbmstPnNpbmtwYWQ7Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FjY2VwdF9jYXBzIChxdWVyeSwgJmNhcHMpOwotICBHU1RfREVCVUdfT0JKRUNUIChwYWQsICJjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBwYWRfY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAocGFkLCBOVUxMKTsKLSAgaWYgKHBhZF9jYXBzKSB7Ci0gICAgZ2Jvb2xlYW4gY3JldCA9IGdzdF9jYXBzX2lzX3N1YnNldCAoY2FwcywgcGFkX2NhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChwYWRfY2Fwcyk7Ci0gICAgaWYgKCFjcmV0KSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChkc2luaywKLSAgICAgICAgICAiQ2FwcyBhcmUgbm90IGEgc3Vic2V0IG9mIHRoZSBwYWQgY2Fwcywgbm90IGFjY2VwdGluZyBjYXBzIik7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICB9Ci0KLSAgLyogSWYgd2UndmUgbm90IGdvdCBmaXhlZCBjYXBzLCBjcmVhdGluZyBhIHN0cmVhbSBtaWdodCBmYWlsLCBzbyBsZXQncyBqdXN0Ci0gICAqIHJldHVybiBmcm9tIGhlcmUgd2l0aCBkZWZhdWx0IGFjY2VwdGNhcHMgYmVoYXZpb3VyICovCi0gIGlmICghZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHNpbmssICJDYXBzIGFyZSBub3QgZml4ZWQsIG5vdCBhY2NlcHRpbmcgY2FwcyIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIHNwZWMubGF0ZW5jeV90aW1lID0gR1NUX1NFQ09ORDsKLSAgaWYgKCFnc3RfYXVkaW9fcmluZ19idWZmZXJfcGFyc2VfY2FwcyAoJnNwZWMsIGNhcHMpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHNpbmssICJGYWlsZWQgdG8gcGFyc2UgY2Fwcywgbm90IGFjY2VwdGluZyIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIE1ha2Ugc3VyZSBpbnB1dCBpcyBmcmFtZWQgKG9uZSBmcmFtZSBwZXIgYnVmZmVyKSBhbmQgY2FuIGJlIHBheWxvYWRlZCAqLwotICBzd2l0Y2ggKHNwZWMudHlwZSkgewotICAgIGNhc2UgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0FDMzoKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9EVFM6Ci0gICAgewotICAgICAgZ2Jvb2xlYW4gZnJhbWVkID0gRkFMU0UsIHBhcnNlZCA9IEZBTFNFOwotICAgICAgc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfYm9vbGVhbiAoc3QsICJmcmFtZWQiLCAmZnJhbWVkKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKHN0LCAicGFyc2VkIiwgJnBhcnNlZCk7Ci0gICAgICBpZiAoKCFmcmFtZWQgJiYgIXBhcnNlZCkgfHwgZ3N0X2F1ZGlvX2llYzYxOTM3X2ZyYW1lX3NpemUgKCZzcGVjKSA8PSAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRzaW5rLCAiV3JvbmcgQUMzL0RUUyBjYXBzLCBub3QgYWNjZXB0aW5nIik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldCA9IFRSVUU7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGRzaW5rLCAiQWNjZXB0aW5nIGNhcHMiKTsKLQotZG9uZToKLSAgZ3N0X3F1ZXJ5X3NldF9hY2NlcHRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCByZXQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGlyZWN0c291bmRfc2lua19xdWVyeSAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBnYm9vbGVhbiByZXMgPSBUUlVFOwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0FDQ0VQVF9DQVBTOgotICAgICAgcmVzID0gZ3N0X2RpcmVjdHNvdW5kX3NpbmtfYWNjZXB0Y2FwcyAoc2luaywgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChzaW5rLCBxdWVyeSk7Ci0gIH0KLQotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgTFBHVUlECi1zdHJpbmdfdG9fZ3VpZCAoY29uc3QgZ2NoYXIgKiBzdHIpCi17Ci0gIEhSRVNVTFQgcmV0OwotICBndW5pY2hhcjIgKndzdHI7Ci0gIExQR1VJRCBvdXQ7Ci0KLSAgd3N0ciA9IGdfdXRmOF90b191dGYxNiAoc3RyLCAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gIGlmICghd3N0cikKLSAgICByZXR1cm4gTlVMTDsKLQotICBvdXQgPSBnX25ldyAoR1VJRCwgMSk7Ci0gIHJldCA9IENMU0lERnJvbVN0cmluZyAoKExQT0xFU1RSKSB3c3RyLCBvdXQpOwotICBnX2ZyZWUgKHdzdHIpOwotICBpZiAocmV0ICE9IE5PRVJST1IpIHsKLSAgICBnX2ZyZWUgKG91dCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gb3V0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX29wZW4gKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKmRzb3VuZHNpbms7Ci0gIEhSRVNVTFQgaFJlczsKLSAgTFBHVUlEIGxwR3VpZCA9IE5VTEw7Ci0KLSAgZHNvdW5kc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChhc2luayk7Ci0KLSAgaWYgKGRzb3VuZHNpbmstPmRldmljZV9pZCkgewotICAgIGxwR3VpZCA9IHN0cmluZ190b19ndWlkIChkc291bmRzaW5rLT5kZXZpY2VfaWQpOwotICAgIGlmIChscEd1aWQgPT0gTlVMTCkgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRzb3VuZHNpbmssIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICAgKCJnc3RfZGlyZWN0c291bmRfc2lua19vcGVuOiBkZXZpY2Ugc2V0LCBidXQgZ3VpZCBub3QgZm91bmQ6ICVzIiwKLSAgICAgICAgICAgICAgZHNvdW5kc2luay0+ZGV2aWNlX2lkKSwgKE5VTEwpKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICAvKiBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBEaXJlY1NvdW5kIG9iamVjdCAqLwotICBpZiAoRkFJTEVEIChoUmVzID0gRGlyZWN0U291bmRDcmVhdGUgKGxwR3VpZCwgJmRzb3VuZHNpbmstPnBEUywgTlVMTCkpKSB7Ci0gICAgZ2NoYXIgKmVycm9yX3RleHQgPSBnc3RfaHJlc190b19zdHJpbmcgKGhSZXMpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChkc291bmRzaW5rLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoImdzdF9kaXJlY3Rzb3VuZF9zaW5rX29wZW46IERpcmVjdFNvdW5kQ3JlYXRlOiAlcyIsCi0gICAgICAgICAgICBlcnJvcl90ZXh0KSwgKE5VTEwpKTsKLSAgICBnX2ZyZWUgKGxwR3VpZCk7Ci0gICAgZ19mcmVlIChlcnJvcl90ZXh0KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBnX2ZyZWUgKGxwR3VpZCk7Ci0KLSAgaWYgKEZBSUxFRCAoaFJlcyA9IElEaXJlY3RTb3VuZF9TZXRDb29wZXJhdGl2ZUxldmVsIChkc291bmRzaW5rLT5wRFMsCi0gICAgICAgICAgICAgIEdldERlc2t0b3BXaW5kb3cgKCksIERTU0NMX1BSSU9SSVRZKSkpIHsKLSAgICBnY2hhciAqZXJyb3JfdGV4dCA9IGdzdF9ocmVzX3RvX3N0cmluZyAoaFJlcyk7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGRzb3VuZHNpbmssIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICgiZ3N0X2RpcmVjdHNvdW5kX3Npbmtfb3BlbjogSURpcmVjdFNvdW5kX1NldENvb3BlcmF0aXZlTGV2ZWw6ICVzIiwKLSAgICAgICAgICAgIGVycm9yX3RleHQpLCAoTlVMTCkpOwotICAgIGdfZnJlZSAoZXJyb3JfdGV4dCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfaXNfc3BkaWZfZm9ybWF0IChHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYykKLXsKLSAgcmV0dXJuIHNwZWMtPnR5cGUgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0FDMyB8fAotICAgICAgc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfRFRTOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX3ByZXBhcmUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLAotICAgIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKmRzb3VuZHNpbms7Ci0gIEhSRVNVTFQgaFJlczsKLSAgRFNCVUZGRVJERVNDIGRlc2NTZWNvbmRhcnk7Ci0gIFdBVkVGT1JNQVRFWCB3Zng7Ci0KLSAgZHNvdW5kc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChhc2luayk7Ci0KLSAgLypzYXZlIG51bWJlciBvZiBieXRlcyBwZXIgc2FtcGxlIGFuZCBidWZmZXIgZm9ybWF0ICovCi0gIGRzb3VuZHNpbmstPmJ5dGVzX3Blcl9zYW1wbGUgPSBzcGVjLT5pbmZvLmJwZjsKLSAgZHNvdW5kc2luay0+dHlwZSA9IHNwZWMtPnR5cGU7Ci0KLSAgLyogZmlsbCB0aGUgV0FWRUZPUk1BVEVYIHN0cnVjdHVyZSB3aXRoIHNwZWMgcGFyYW1zICovCi0gIG1lbXNldCAoJndmeCwgMCwgc2l6ZW9mICh3ZngpKTsKLSAgaWYgKCFnc3RfZGlyZWN0c291bmRfc2lua19pc19zcGRpZl9mb3JtYXQgKHNwZWMpKSB7Ci0gICAgd2Z4LmNiU2l6ZSA9IHNpemVvZiAod2Z4KTsKLSAgICB3Zngud0Zvcm1hdFRhZyA9IFdBVkVfRk9STUFUX1BDTTsKLSAgICB3ZngubkNoYW5uZWxzID0gc3BlYy0+aW5mby5jaGFubmVsczsKLSAgICB3ZngublNhbXBsZXNQZXJTZWMgPSBzcGVjLT5pbmZvLnJhdGU7Ci0gICAgd2Z4LndCaXRzUGVyU2FtcGxlID0gKHNwZWMtPmluZm8uYnBmICogOCkgLyB3ZngubkNoYW5uZWxzOwotICAgIHdmeC5uQmxvY2tBbGlnbiA9IHNwZWMtPmluZm8uYnBmOwotICAgIHdmeC5uQXZnQnl0ZXNQZXJTZWMgPSB3ZngublNhbXBsZXNQZXJTZWMgKiB3ZngubkJsb2NrQWxpZ247Ci0KLSAgICAvKiBDcmVhdGUgZGlyZWN0c291bmQgYnVmZmVyIHdpdGggc2l6ZSBiYXNlZCBvbiBvdXIgY29uZmlndXJlZAotICAgICAqIGJ1ZmZlcl9zaXplICh3aGljaCBpcyAyMDAgbXMgYnkgZGVmYXVsdCkgKi8KLSAgICBkc291bmRzaW5rLT5idWZmZXJfc2l6ZSA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHdmeC5uQXZnQnl0ZXNQZXJTZWMsIHNwZWMtPmJ1ZmZlcl90aW1lLAotICAgICAgICBHU1RfTVNFQ09ORCk7Ci0gICAgLyogTWFrZSBzdXJlIHdlIG1ha2UgdGhvc2UgbnVtYmVycyBtdWx0aXBsZSBvZiBvdXIgc2FtcGxlIHNpemUgaW4gYnl0ZXMgKi8KLSAgICBkc291bmRzaW5rLT5idWZmZXJfc2l6ZSAtPSBkc291bmRzaW5rLT5idWZmZXJfc2l6ZSAlIHNwZWMtPmluZm8uYnBmOwotCi0gICAgc3BlYy0+c2Vnc2l6ZSA9Ci0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHdmeC5uQXZnQnl0ZXNQZXJTZWMsIHNwZWMtPmxhdGVuY3lfdGltZSwKLSAgICAgICAgR1NUX01TRUNPTkQpOwotICAgIHNwZWMtPnNlZ3NpemUgLT0gc3BlYy0+c2Vnc2l6ZSAlIHNwZWMtPmluZm8uYnBmOwotICAgIHNwZWMtPnNlZ3RvdGFsID0gZHNvdW5kc2luay0+YnVmZmVyX3NpemUgLyBzcGVjLT5zZWdzaXplOwotICB9IGVsc2UgewotI2lmZGVmIFdBVkVfRk9STUFUX0RPTEJZX0FDM19TUERJRgotICAgIHdmeC5jYlNpemUgPSAwOwotICAgIHdmeC53Rm9ybWF0VGFnID0gV0FWRV9GT1JNQVRfRE9MQllfQUMzX1NQRElGOwotICAgIHdmeC5uQ2hhbm5lbHMgPSAyOwotICAgIHdmeC5uU2FtcGxlc1BlclNlYyA9IDQ4MDAwOwotICAgIHdmeC53Qml0c1BlclNhbXBsZSA9IDE2OwotICAgIHdmeC5uQmxvY2tBbGlnbiA9IHdmeC53Qml0c1BlclNhbXBsZSAvIDggKiB3ZngubkNoYW5uZWxzOwotICAgIHdmeC5uQXZnQnl0ZXNQZXJTZWMgPSB3ZngublNhbXBsZXNQZXJTZWMgKiB3ZngubkJsb2NrQWxpZ247Ci0KLSAgICBzcGVjLT5zZWdzaXplID0gNjE0NDsKLSAgICBzcGVjLT5zZWd0b3RhbCA9IDEwOwotI2Vsc2UKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSNlbmRpZgotICB9Ci0KLSAgLy8gTWFrZSB0aGUgZmluYWwgYnVmZmVyIHNpemUgYmUgYW4gaW50ZWdlciBudW1iZXIgb2Ygc2VnbWVudHMKLSAgZHNvdW5kc2luay0+YnVmZmVyX3NpemUgPSBzcGVjLT5zZWdzaXplICogc3BlYy0+c2VndG90YWw7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChkc291bmRzaW5rLAotICAgICAgIkdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMtPmNoYW5uZWxzOiAlZCwgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYy0+cmF0ZTogJWQsIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMtPmJ5dGVzX3Blcl9zYW1wbGU6ICVkXG4iCi0gICAgICAiV0FWRUZPUk1BVEVYLm5TYW1wbGVzUGVyU2VjOiAlbGQsIFdBVkVGT1JNQVRFWC53Qml0c1BlclNhbXBsZTogJWQsIFdBVkVGT1JNQVRFWC5uQmxvY2tBbGlnbjogJWQsIFdBVkVGT1JNQVRFWC5uQXZnQnl0ZXNQZXJTZWM6ICVsZFxuIgotICAgICAgIlNpemUgb2YgZHNvdW5kIGNpcmN1bGFyIGJ1ZmZlcj0+JWRcbiIsIHNwZWMtPmluZm8uY2hhbm5lbHMsCi0gICAgICBzcGVjLT5pbmZvLnJhdGUsIHNwZWMtPmluZm8uYnBmLCB3ZngublNhbXBsZXNQZXJTZWMsIHdmeC53Qml0c1BlclNhbXBsZSwKLSAgICAgIHdmeC5uQmxvY2tBbGlnbiwgd2Z4Lm5BdmdCeXRlc1BlclNlYywgZHNvdW5kc2luay0+YnVmZmVyX3NpemUpOwotCi0gIC8qIGNyZWF0ZSBhIHNlY29uZGFyeSBkaXJlY3Rzb3VuZCBidWZmZXIgKi8KLSAgbWVtc2V0ICgmZGVzY1NlY29uZGFyeSwgMCwgc2l6ZW9mIChEU0JVRkZFUkRFU0MpKTsKLSAgZGVzY1NlY29uZGFyeS5kd1NpemUgPSBzaXplb2YgKERTQlVGRkVSREVTQyk7Ci0gIGRlc2NTZWNvbmRhcnkuZHdGbGFncyA9IERTQkNBUFNfR0VUQ1VSUkVOVFBPU0lUSU9OMiB8IERTQkNBUFNfR0xPQkFMRk9DVVM7Ci0gIGlmICghZ3N0X2RpcmVjdHNvdW5kX3NpbmtfaXNfc3BkaWZfZm9ybWF0IChzcGVjKSkKLSAgICBkZXNjU2Vjb25kYXJ5LmR3RmxhZ3MgfD0gRFNCQ0FQU19DVFJMVk9MVU1FOwotCi0gIGRlc2NTZWNvbmRhcnkuZHdCdWZmZXJCeXRlcyA9IGRzb3VuZHNpbmstPmJ1ZmZlcl9zaXplOwotICBkZXNjU2Vjb25kYXJ5Lmxwd2Z4Rm9ybWF0ID0gKFdBVkVGT1JNQVRFWCAqKSAmIHdmeDsKLQotICBoUmVzID0gSURpcmVjdFNvdW5kX0NyZWF0ZVNvdW5kQnVmZmVyIChkc291bmRzaW5rLT5wRFMsICZkZXNjU2Vjb25kYXJ5LAotICAgICAgJmRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnksIE5VTEwpOwotICBpZiAoRkFJTEVEIChoUmVzKSkgewotICAgIGdjaGFyICplcnJvcl90ZXh0ID0gZ3N0X2hyZXNfdG9fc3RyaW5nIChoUmVzKTsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZHNvdW5kc2luaywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgKCJnc3RfZGlyZWN0c291bmRfc2lua19wcmVwYXJlOiBJRGlyZWN0U291bmRfQ3JlYXRlU291bmRCdWZmZXI6ICVzIiwKLSAgICAgICAgICAgIGVycm9yX3RleHQpLCAoTlVMTCkpOwotICAgIGdfZnJlZSAoZXJyb3JfdGV4dCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgZ3N0X2RpcmVjdHNvdW5kX3Npbmtfc2V0X3ZvbHVtZSAoZHNvdW5kc2luaywgZHNvdW5kc2luay0+dm9sdW1lLCBGQUxTRSk7Ci0gIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX3NldF9tdXRlIChkc291bmRzaW5rLCBkc291bmRzaW5rLT5tdXRlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfZGlyZWN0c291bmRfc2lua191bnByZXBhcmUgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKmRzb3VuZHNpbms7Ci0KLSAgZHNvdW5kc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChhc2luayk7Ci0KLSAgLyogcmVsZWFzZSBzZWNvbmRhcnkgRGlyZWN0U291bmQgYnVmZmVyICovCi0gIGlmIChkc291bmRzaW5rLT5wRFNCU2Vjb25kYXJ5KSB7Ci0gICAgSURpcmVjdFNvdW5kQnVmZmVyX1JlbGVhc2UgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnkpOwotICAgIGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnkgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfY2xvc2UgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKmRzb3VuZHNpbmsgPSBOVUxMOwotCi0gIGRzb3VuZHNpbmsgPSBHU1RfRElSRUNUU09VTkRfU0lOSyAoYXNpbmspOwotCi0gIC8qIHJlbGVhc2UgRGlyZWN0U291bmQgb2JqZWN0ICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkc291bmRzaW5rLT5wRFMgIT0gTlVMTCwgRkFMU0UpOwotICBJRGlyZWN0U291bmRfUmVsZWFzZSAoZHNvdW5kc2luay0+cERTKTsKLSAgZHNvdW5kc2luay0+cERTID0gTlVMTDsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmZHNvdW5kc2luay0+Y2FjaGVkX2NhcHMsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X2RpcmVjdHNvdW5kX3Npbmtfd3JpdGUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLCBncG9pbnRlciBkYXRhLCBndWludCBsZW5ndGgpCi17Ci0gIEdzdERpcmVjdFNvdW5kU2luayAqZHNvdW5kc2luazsKLSAgRFdPUkQgZHdTdGF0dXMgPSAwOwotICBIUkVTVUxUIGhSZXMsIGhSZXMyOwotICBMUFZPSUQgcExvY2tlZEJ1ZmZlcjEgPSBOVUxMLCBwTG9ja2VkQnVmZmVyMiA9IE5VTEw7Ci0gIERXT1JEIGR3U2l6ZUJ1ZmZlcjEsIGR3U2l6ZUJ1ZmZlcjI7Ci0gIERXT1JEIGR3Q3VycmVudFBsYXlDdXJzb3I7Ci0KLSAgZHNvdW5kc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChhc2luayk7Ci0KLSAgR1NUX0RTT1VORF9MT0NLIChkc291bmRzaW5rKTsKLQotICAvKiBnZXQgY3VycmVudCBidWZmZXIgc3RhdHVzICovCi0gIGhSZXMgPSBJRGlyZWN0U291bmRCdWZmZXJfR2V0U3RhdHVzIChkc291bmRzaW5rLT5wRFNCU2Vjb25kYXJ5LCAmZHdTdGF0dXMpOwotCi0gIC8qIGdldCBjdXJyZW50IHBsYXkgY3Vyc29yIHBvc2l0aW9uICovCi0gIGhSZXMyID0gSURpcmVjdFNvdW5kQnVmZmVyX0dldEN1cnJlbnRQb3NpdGlvbiAoZHNvdW5kc2luay0+cERTQlNlY29uZGFyeSwKLSAgICAgICZkd0N1cnJlbnRQbGF5Q3Vyc29yLCBOVUxMKTsKLQotICBpZiAoU1VDQ0VFREVEIChoUmVzKSAmJiBTVUNDRUVERUQgKGhSZXMyKSAmJiAoZHdTdGF0dXMgJiBEU0JTVEFUVVNfUExBWUlORykpIHsKLSAgICBEV09SRCBkd0ZyZWVCdWZmZXJTaXplID0gMDsKLSAgICBEV09SRCBzbGVlcFRpbWUgPSAwOwotCi0gIGNhbGN1bGF0ZV9mcmVlc2l6ZToKLSAgICAvKiBjYWxjdWxhdGUgdGhlIGZyZWUgc2l6ZSBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyICovCi0gICAgaWYgKGR3Q3VycmVudFBsYXlDdXJzb3IgPCBkc291bmRzaW5rLT5jdXJyZW50X2NpcmN1bGFyX29mZnNldCkKLSAgICAgIGR3RnJlZUJ1ZmZlclNpemUgPQotICAgICAgICAgIGRzb3VuZHNpbmstPmJ1ZmZlcl9zaXplIC0gKGRzb3VuZHNpbmstPmN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0IC0KLSAgICAgICAgICBkd0N1cnJlbnRQbGF5Q3Vyc29yKTsKLSAgICBlbHNlCi0gICAgICBkd0ZyZWVCdWZmZXJTaXplID0KLSAgICAgICAgICBkd0N1cnJlbnRQbGF5Q3Vyc29yIC0gZHNvdW5kc2luay0+Y3VycmVudF9jaXJjdWxhcl9vZmZzZXQ7Ci0KLSAgICBpZiAobGVuZ3RoID49IGR3RnJlZUJ1ZmZlclNpemUpIHsKLSAgICAgIHNsZWVwVGltZSA9Ci0gICAgICAgICAgKChsZW5ndGggLQotICAgICAgICAgICAgICBkd0ZyZWVCdWZmZXJTaXplKSAqIDEwMDApIC8gKGRzb3VuZHNpbmstPmJ5dGVzX3Blcl9zYW1wbGUgKgotICAgICAgICAgIEdTVF9BVURJT19CQVNFX1NJTksgKGFzaW5rKS0+cmluZ2J1ZmZlci0+c3BlYy5pbmZvLnJhdGUpOwotICAgICAgaWYgKHNsZWVwVGltZSA+IDApIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZHNvdW5kc2luaywKLSAgICAgICAgICAgICJnc3RfZGlyZWN0c291bmRfc2lua193cml0ZTogbGVuZ3RoOiVpLCBGcmVlQnVmU2l6OiAlbGQsIHNsZWVwVGltZTogJWxkLCBicHM6ICVpLCByYXRlOiAlaSIsCi0gICAgICAgICAgICBsZW5ndGgsIGR3RnJlZUJ1ZmZlclNpemUsIHNsZWVwVGltZSwgZHNvdW5kc2luay0+Ynl0ZXNfcGVyX3NhbXBsZSwKLSAgICAgICAgICAgIEdTVF9BVURJT19CQVNFX1NJTksgKGFzaW5rKS0+cmluZ2J1ZmZlci0+c3BlYy5pbmZvLnJhdGUpOwotICAgICAgICBTbGVlcCAoc2xlZXBUaW1lKTsKLSAgICAgIH0KLSAgICAgIGhSZXMgPSBJRGlyZWN0U291bmRCdWZmZXJfR2V0Q3VycmVudFBvc2l0aW9uIChkc291bmRzaW5rLT5wRFNCU2Vjb25kYXJ5LAotICAgICAgICAgICZkd0N1cnJlbnRQbGF5Q3Vyc29yLCBOVUxMKTsKLQotICAgICAgaFJlczIgPQotICAgICAgICAgIElEaXJlY3RTb3VuZEJ1ZmZlcl9HZXRTdGF0dXMgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnksICZkd1N0YXR1cyk7Ci0gICAgICBpZiAoU1VDQ0VFREVEIChoUmVzKSAmJiBTVUNDRUVERUQgKGhSZXMyKQotICAgICAgICAgICYmIChkd1N0YXR1cyAmIERTQlNUQVRVU19QTEFZSU5HKSkKLSAgICAgICAgZ290byBjYWxjdWxhdGVfZnJlZXNpemU7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgZ2NoYXIgKmVycjEsICplcnIyOwotCi0gICAgICAgIGRzb3VuZHNpbmstPmZpcnN0X2J1ZmZlcl9hZnRlcl9yZXNldCA9IEZBTFNFOwotICAgICAgICBHU1RfRFNPVU5EX1VOTE9DSyAoZHNvdW5kc2luayk7Ci0KLSAgICAgICAgZXJyMSA9IGdzdF9ocmVzX3RvX3N0cmluZyAoaFJlcyk7Ci0gICAgICAgIGVycjIgPSBnc3RfaHJlc190b19zdHJpbmcgKGhSZXMyKTsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRzb3VuZHNpbmssIFJFU09VUkNFLCBPUEVOX1dSSVRFLAotICAgICAgICAgICAgKCJnc3RfZGlyZWN0c291bmRfc2lua193cml0ZTogSURpcmVjdFNvdW5kQnVmZmVyX0dldFN0YXR1cyAlcywgIgotICAgICAgICAgICAgICAgICJJRGlyZWN0U291bmRCdWZmZXJfR2V0Q3VycmVudFBvc2l0aW9uOiAlcywgZHdTdGF0dXM6ICVsdSIsCi0gICAgICAgICAgICAgICAgZXJyMiwgZXJyMSwgZHdTdGF0dXMpLCAoTlVMTCkpOwotICAgICAgICBnX2ZyZWUgKGVycjEpOwotICAgICAgICBnX2ZyZWUgKGVycjIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGR3U3RhdHVzICYgRFNCU1RBVFVTX0JVRkZFUkxPU1QpIHsKLSAgICBoUmVzID0gSURpcmVjdFNvdW5kQnVmZmVyX1Jlc3RvcmUgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnkpOyAgICAgIC8qbmVlZCBhIGxvb3Agd2FpdGluZyB0aGUgYnVmZmVyIGlzIHJlc3RvcmVkPz8gKi8KLQotICAgIGRzb3VuZHNpbmstPmN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0ID0gMDsKLSAgfQotCi0gIGhSZXMgPSBJRGlyZWN0U291bmRCdWZmZXJfTG9jayAoZHNvdW5kc2luay0+cERTQlNlY29uZGFyeSwKLSAgICAgIGRzb3VuZHNpbmstPmN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0LCBsZW5ndGgsICZwTG9ja2VkQnVmZmVyMSwKLSAgICAgICZkd1NpemVCdWZmZXIxLCAmcExvY2tlZEJ1ZmZlcjIsICZkd1NpemVCdWZmZXIyLCAwTCk7Ci0KLSAgaWYgKFNVQ0NFRURFRCAoaFJlcykpIHsKLSAgICAvLyBXcml0ZSB0byBwb2ludGVycyB3aXRob3V0IHJlb3JkZXJpbmcuCi0gICAgbWVtY3B5IChwTG9ja2VkQnVmZmVyMSwgZGF0YSwgZHdTaXplQnVmZmVyMSk7Ci0gICAgaWYgKHBMb2NrZWRCdWZmZXIyICE9IE5VTEwpCi0gICAgICBtZW1jcHkgKHBMb2NrZWRCdWZmZXIyLCAoTFBCWVRFKSBkYXRhICsgZHdTaXplQnVmZmVyMSwgZHdTaXplQnVmZmVyMik7Ci0KLSAgICAvLyBVcGRhdGUgd2hlcmUgdGhlIGJ1ZmZlciB3aWxsIGxvY2sgKGZvciBuZXh0IHRpbWUpCi0gICAgZHNvdW5kc2luay0+Y3VycmVudF9jaXJjdWxhcl9vZmZzZXQgKz0gZHdTaXplQnVmZmVyMSArIGR3U2l6ZUJ1ZmZlcjI7Ci0gICAgZHNvdW5kc2luay0+Y3VycmVudF9jaXJjdWxhcl9vZmZzZXQgJT0gZHNvdW5kc2luay0+YnVmZmVyX3NpemU7ICAgICAvKiBDaXJjdWxhciBidWZmZXIgKi8KLQotICAgIGhSZXMgPSBJRGlyZWN0U291bmRCdWZmZXJfVW5sb2NrIChkc291bmRzaW5rLT5wRFNCU2Vjb25kYXJ5LCBwTG9ja2VkQnVmZmVyMSwKLSAgICAgICAgZHdTaXplQnVmZmVyMSwgcExvY2tlZEJ1ZmZlcjIsIGR3U2l6ZUJ1ZmZlcjIpOwotICB9Ci0KLSAgLyogaWYgdGhlIGJ1ZmZlciB3YXMgbm90IGluIHBsYXlpbmcgc3RhdGUgeWV0LCBjYWxsIHBsYXkgb24gdGhlIGJ1ZmZlciAKLSAgICAgZXhjZXB0IGlmIHRoaXMgYnVmZmVyIGlzIHRoZSBmaXN0IGFmdGVyIGEgcmVzZXQgKGJhc2UgY2xhc3MgY2FsbCByZXNldCBhbmQgd3JpdGUgYSBidWZmZXIgd2hlbiBzZXR0aW5nIHRoZSBzaW5rIHRvIHBhdXNlKSAqLwotICBpZiAoIShkd1N0YXR1cyAmIERTQlNUQVRVU19QTEFZSU5HKSAmJgotICAgICAgZHNvdW5kc2luay0+Zmlyc3RfYnVmZmVyX2FmdGVyX3Jlc2V0ID09IEZBTFNFKSB7Ci0gICAgaFJlcyA9IElEaXJlY3RTb3VuZEJ1ZmZlcl9QbGF5IChkc291bmRzaW5rLT5wRFNCU2Vjb25kYXJ5LCAwLCAwLAotICAgICAgICBEU0JQTEFZX0xPT1BJTkcpOwotICB9Ci0KLSAgZHNvdW5kc2luay0+Zmlyc3RfYnVmZmVyX2FmdGVyX3Jlc2V0ID0gRkFMU0U7Ci0KLSAgR1NUX0RTT1VORF9VTkxPQ0sgKGRzb3VuZHNpbmspOwotCi0gIHJldHVybiBsZW5ndGg7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZGVsYXkgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3REaXJlY3RTb3VuZFNpbmsgKmRzb3VuZHNpbms7Ci0gIEhSRVNVTFQgaFJlczsKLSAgRFdPUkQgZHdDdXJyZW50UGxheUN1cnNvcjsKLSAgRFdPUkQgZHdCeXRlc0luUXVldWUgPSAwOwotICBnaW50IG5OYlNhbXBsZXNJblF1ZXVlID0gMDsKLSAgRFdPUkQgZHdTdGF0dXM7Ci0KLSAgZHNvdW5kc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChhc2luayk7Ci0KLSAgLyogZ2V0IGN1cnJlbnQgYnVmZmVyIHN0YXR1cyAqLwotICBoUmVzID0gSURpcmVjdFNvdW5kQnVmZmVyX0dldFN0YXR1cyAoZHNvdW5kc2luay0+cERTQlNlY29uZGFyeSwgJmR3U3RhdHVzKTsKLQotICBpZiAoU1VDQ0VFREVEIChoUmVzKSAmJiAoZHdTdGF0dXMgJiBEU0JTVEFUVVNfUExBWUlORykpIHsKLSAgICAvKmV2YWx1YXRlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBpbiBxdWV1ZSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyICovCi0gICAgaFJlcyA9IElEaXJlY3RTb3VuZEJ1ZmZlcl9HZXRDdXJyZW50UG9zaXRpb24gKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnksCi0gICAgICAgICZkd0N1cnJlbnRQbGF5Q3Vyc29yLCBOVUxMKTsKLQotICAgIGlmIChoUmVzID09IFNfT0spIHsKLSAgICAgIGlmIChkd0N1cnJlbnRQbGF5Q3Vyc29yIDwgZHNvdW5kc2luay0+Y3VycmVudF9jaXJjdWxhcl9vZmZzZXQpCi0gICAgICAgIGR3Qnl0ZXNJblF1ZXVlID0KLSAgICAgICAgICAgIGRzb3VuZHNpbmstPmN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0IC0gZHdDdXJyZW50UGxheUN1cnNvcjsKLSAgICAgIGVsc2UKLSAgICAgICAgZHdCeXRlc0luUXVldWUgPQotICAgICAgICAgICAgZHNvdW5kc2luay0+Y3VycmVudF9jaXJjdWxhcl9vZmZzZXQgKyAoZHNvdW5kc2luay0+YnVmZmVyX3NpemUgLQotICAgICAgICAgICAgZHdDdXJyZW50UGxheUN1cnNvcik7Ci0KLSAgICAgIG5OYlNhbXBsZXNJblF1ZXVlID0gZHdCeXRlc0luUXVldWUgLyBkc291bmRzaW5rLT5ieXRlc19wZXJfc2FtcGxlOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBuTmJTYW1wbGVzSW5RdWV1ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX3Jlc2V0IChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgR3N0RGlyZWN0U291bmRTaW5rICpkc291bmRzaW5rOwotICBMUFZPSUQgcExvY2tlZEJ1ZmZlciA9IE5VTEw7Ci0gIERXT1JEIGR3U2l6ZUJ1ZmZlciA9IDA7Ci0KLSAgZHNvdW5kc2luayA9IEdTVF9ESVJFQ1RTT1VORF9TSU5LIChhc2luayk7Ci0KLSAgR1NUX0RTT1VORF9MT0NLIChkc291bmRzaW5rKTsKLQotICBpZiAoZHNvdW5kc2luay0+cERTQlNlY29uZGFyeSkgewotICAgIC8qc3RvcCBwbGF5aW5nICovCi0gICAgSFJFU1VMVCBoUmVzID0gSURpcmVjdFNvdW5kQnVmZmVyX1N0b3AgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnkpOwotCi0gICAgLypyZXNldCBwb3NpdGlvbiAqLwotICAgIGhSZXMgPSBJRGlyZWN0U291bmRCdWZmZXJfU2V0Q3VycmVudFBvc2l0aW9uIChkc291bmRzaW5rLT5wRFNCU2Vjb25kYXJ5LCAwKTsKLSAgICBkc291bmRzaW5rLT5jdXJyZW50X2NpcmN1bGFyX29mZnNldCA9IDA7Ci0KLSAgICAvKnJlc2V0IHRoZSBidWZmZXIgKi8KLSAgICBoUmVzID0gSURpcmVjdFNvdW5kQnVmZmVyX0xvY2sgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnksCi0gICAgICAgIGRzb3VuZHNpbmstPmN1cnJlbnRfY2lyY3VsYXJfb2Zmc2V0LCBkc291bmRzaW5rLT5idWZmZXJfc2l6ZSwKLSAgICAgICAgJnBMb2NrZWRCdWZmZXIsICZkd1NpemVCdWZmZXIsIE5VTEwsIE5VTEwsIDBMKTsKLQotICAgIGlmIChTVUNDRUVERUQgKGhSZXMpKSB7Ci0gICAgICBtZW1zZXQgKHBMb2NrZWRCdWZmZXIsIDAsIGR3U2l6ZUJ1ZmZlcik7Ci0KLSAgICAgIGhSZXMgPQotICAgICAgICAgIElEaXJlY3RTb3VuZEJ1ZmZlcl9VbmxvY2sgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnksIHBMb2NrZWRCdWZmZXIsCi0gICAgICAgICAgZHdTaXplQnVmZmVyLCBOVUxMLCAwKTsKLSAgICB9Ci0gIH0KLQotICBkc291bmRzaW5rLT5maXJzdF9idWZmZXJfYWZ0ZXJfcmVzZXQgPSBUUlVFOwotCi0gIEdTVF9EU09VTkRfVU5MT0NLIChkc291bmRzaW5rKTsKLX0KLQotLyoKLSAqIGdzdF9kaXJlY3Rzb3VuZF9wcm9iZV9zdXBwb3J0ZWRfZm9ybWF0czoKLSAqCi0gKiBUYWtlcyB0aGUgdGVtcGxhdGUgY2FwcyBhbmQgcmV0dXJucyB0aGUgc3Vic2V0IHdoaWNoIGlzIGFjdHVhbGx5Ci0gKiBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UuCi0gKgotICovCi0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9kaXJlY3Rzb3VuZF9wcm9iZV9zdXBwb3J0ZWRfZm9ybWF0cyAoR3N0RGlyZWN0U291bmRTaW5rICogZHNvdW5kc2luaywKLSAgICBjb25zdCBHc3RDYXBzICogdGVtcGxhdGVfY2FwcykKLXsKLSAgSFJFU1VMVCBoUmVzOwotICBEU0JVRkZFUkRFU0MgZGVzY1NlY29uZGFyeTsKLSAgV0FWRUZPUk1BVEVYIHdmeDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0Q2FwcyAqdG1wLCAqdG1wMjsKLSAgTFBESVJFQ1RTT1VOREJVRkZFUiB0bXBCdWZmZXI7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKHRlbXBsYXRlX2NhcHMpOwotCi0gIC8qCi0gICAqIENoZWNrIGF2YWlsYWJpbGl0eSBvZiBkaWdpdGFsIG91dHB1dCBieSB0cnlpbmcgdG8gY3JlYXRlIGFuIFNQRElGIGJ1ZmZlcgotICAgKi8KLQotI2lmZGVmIFdBVkVfRk9STUFUX0RPTEJZX0FDM19TUERJRgotICAvKiBmaWxsIHRoZSBXQVZFRk9STUFURVggc3RydWN0dXJlIHdpdGggc29tZSBzdGFuZGFyZCBBQzMgb3ZlciBTUERJRiBwYXJhbXMgKi8KLSAgbWVtc2V0ICgmd2Z4LCAwLCBzaXplb2YgKHdmeCkpOwotICB3ZnguY2JTaXplID0gMDsKLSAgd2Z4LndGb3JtYXRUYWcgPSBXQVZFX0ZPUk1BVF9ET0xCWV9BQzNfU1BESUY7Ci0gIHdmeC5uQ2hhbm5lbHMgPSAyOwotICB3ZngublNhbXBsZXNQZXJTZWMgPSA0ODAwMDsKLSAgd2Z4LndCaXRzUGVyU2FtcGxlID0gMTY7Ci0gIHdmeC5uQmxvY2tBbGlnbiA9IDQ7Ci0gIHdmeC5uQXZnQnl0ZXNQZXJTZWMgPSB3ZngublNhbXBsZXNQZXJTZWMgKiB3ZngubkJsb2NrQWxpZ247Ci0KLSAgLy8gY3JlYXRlIGEgc2Vjb25kYXJ5IGRpcmVjdHNvdW5kIGJ1ZmZlcgotICBtZW1zZXQgKCZkZXNjU2Vjb25kYXJ5LCAwLCBzaXplb2YgKERTQlVGRkVSREVTQykpOwotICBkZXNjU2Vjb25kYXJ5LmR3U2l6ZSA9IHNpemVvZiAoRFNCVUZGRVJERVNDKTsKLSAgZGVzY1NlY29uZGFyeS5kd0ZsYWdzID0gRFNCQ0FQU19HRVRDVVJSRU5UUE9TSVRJT04yIHwgRFNCQ0FQU19HTE9CQUxGT0NVUzsKLSAgZGVzY1NlY29uZGFyeS5kd0J1ZmZlckJ5dGVzID0gNjE0NDsKLSAgZGVzY1NlY29uZGFyeS5scHdmeEZvcm1hdCA9ICZ3Zng7Ci0KLSAgaFJlcyA9IElEaXJlY3RTb3VuZF9DcmVhdGVTb3VuZEJ1ZmZlciAoZHNvdW5kc2luay0+cERTLCAmZGVzY1NlY29uZGFyeSwKLSAgICAgICZ0bXBCdWZmZXIsIE5VTEwpOwotICBpZiAoRkFJTEVEIChoUmVzKSkgewotICAgIGdjaGFyICplcnJvcl90ZXh0ID0gZ3N0X2hyZXNfdG9fc3RyaW5nIChoUmVzKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKGRzb3VuZHNpbmssICJBQzMgcGFzc3Rocm91Z2ggbm90IHN1cHBvcnRlZCAiCi0gICAgICAgICIoSURpcmVjdFNvdW5kX0NyZWF0ZVNvdW5kQnVmZmVyIHJldHVybmVkOiAlcylcbiIsIGVycm9yX3RleHQpOwotICAgIGdfZnJlZSAoZXJyb3JfdGV4dCk7Ci0gICAgdG1wID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtYWMzIik7Ci0gICAgdG1wMiA9IGdzdF9jYXBzX3N1YnRyYWN0IChjYXBzLCB0bXApOwotICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICBjYXBzID0gdG1wMjsKLSAgICB0bXAgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1kdHMiKTsKLSAgICB0bXAyID0gZ3N0X2NhcHNfc3VidHJhY3QgKGNhcHMsIHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGNhcHMgPSB0bXAyOwotICB9IGVsc2UgewotICAgIEdTVF9JTkZPX09CSkVDVCAoZHNvdW5kc2luaywgIkFDMyBwYXNzdGhyb3VnaCBzdXBwb3J0ZWQiKTsKLSAgICBoUmVzID0gSURpcmVjdFNvdW5kQnVmZmVyX1JlbGVhc2UgKHRtcEJ1ZmZlcik7Ci0gICAgaWYgKEZBSUxFRCAoaFJlcykpIHsKLSAgICAgIGdjaGFyICplcnJvcl90ZXh0ID0gZ3N0X2hyZXNfdG9fc3RyaW5nIChoUmVzKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRzb3VuZHNpbmssCi0gICAgICAgICAgIihJRGlyZWN0U291bmRCdWZmZXJfUmVsZWFzZSByZXR1cm5lZDogJXMpXG4iLCBlcnJvcl90ZXh0KTsKLSAgICAgIGdfZnJlZSAoZXJyb3JfdGV4dCk7Ci0gICAgfQotICB9Ci0jZWxzZQotICB0bXAgPSBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlICgiYXVkaW8veC1hYzMiKTsKLSAgdG1wMiA9IGdzdF9jYXBzX3N1YnRyYWN0IChjYXBzLCB0bXApOwotICBnc3RfY2Fwc191bnJlZiAodG1wKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBjYXBzID0gdG1wMjsKLSAgdG1wID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImF1ZGlvL3gtZHRzIik7Ci0gIHRtcDIgPSBnc3RfY2Fwc19zdWJ0cmFjdCAoY2FwcywgdG1wKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgY2FwcyA9IHRtcDI7Ci0jZW5kaWYKLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nc3RfZGlyZWN0c291bmRfc2lua19wYXlsb2FkIChHc3RBdWRpb0Jhc2VTaW5rICogc2luaywgR3N0QnVmZmVyICogYnVmKQotewotICBpZiAoZ3N0X2RpcmVjdHNvdW5kX3NpbmtfaXNfc3BkaWZfZm9ybWF0ICgmc2luay0+cmluZ2J1ZmZlci0+c3BlYykpIHsKLSAgICBnaW50IGZyYW1lc2l6ZSA9IGdzdF9hdWRpb19pZWM2MTkzN19mcmFtZV9zaXplICgmc2luay0+cmluZ2J1ZmZlci0+c3BlYyk7Ci0gICAgR3N0QnVmZmVyICpvdXQ7Ci0gICAgR3N0TWFwSW5mbyBpbmZvYnVmLCBpbmZvb3V0OwotICAgIGdib29sZWFuIHN1Y2Nlc3M7Ci0KLSAgICBpZiAoZnJhbWVzaXplIDw9IDApCi0gICAgICByZXR1cm4gTlVMTDsKLQotICAgIG91dCA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoZnJhbWVzaXplKTsKLQotICAgIGlmICghZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm9idWYsIEdTVF9NQVBfUkVBRFdSSVRFKSkgewotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0KTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoIWdzdF9idWZmZXJfbWFwIChvdXQsICZpbmZvb3V0LCBHU1RfTUFQX1JFQURXUklURSkpIHsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm9idWYpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0KTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzdWNjZXNzID0gZ3N0X2F1ZGlvX2llYzYxOTM3X3BheWxvYWQgKGluZm9idWYuZGF0YSwgaW5mb2J1Zi5zaXplLAotICAgICAgICBpbmZvb3V0LmRhdGEsIGluZm9vdXQuc2l6ZSwgJnNpbmstPnJpbmdidWZmZXItPnNwZWMsIEdfQllURV9PUkRFUik7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VubWFwIChvdXQsICZpbmZvb3V0KTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm9idWYpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0KTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGdzdF9idWZmZXJfY29weV9pbnRvIChvdXQsIGJ1ZiwgR1NUX0JVRkZFUl9DT1BZX0FMTCwgMCwgLTEpOwotICAgIC8qIEZpeCBlbmRpYW5uZXNzICovCi0gICAgX3N3YWIgKChnY2hhciAqKSBpbmZvb3V0LmRhdGEsIChnY2hhciAqKSBpbmZvb3V0LmRhdGEsIGluZm9idWYuc2l6ZSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0LCAmaW5mb291dCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmaW5mb2J1Zik7Ci0gICAgcmV0dXJuIG91dDsKLSAgfSBlbHNlCi0gICAgcmV0dXJuIGdzdF9idWZmZXJfcmVmIChidWYpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2RpcmVjdHNvdW5kX3Npbmtfc2V0X3ZvbHVtZSAoR3N0RGlyZWN0U291bmRTaW5rICogZHNvdW5kc2luaywKLSAgICBnZG91YmxlIGR2b2x1bWUsIGdib29sZWFuIHN0b3JlKQotewotICBnbG9uZyB2b2x1bWU7Ci0KLSAgdm9sdW1lID0gZHZvbHVtZSAqIDEwMDsKLSAgaWYgKHN0b3JlKQotICAgIGRzb3VuZHNpbmstPnZvbHVtZSA9IHZvbHVtZTsKLQotICBpZiAoZHNvdW5kc2luay0+cERTQlNlY29uZGFyeSkgewotICAgIC8qIERpcmVjdFNvdW5kIGNvbnRyb2xzIHZvbHVtZSB1c2luZyB1bml0cyBvZiAxMDB0aCBvZiBhIGRlY2liZWwsCi0gICAgICogcmFuZ2luZyBmcm9tIC0xMDAwMCB0byAwLiBXZSB1c2UgYSBsaW5lYXIgc2NhbGUgb2YgMCAtIDEwMAotICAgICAqIGhlcmUsIHNvIHJlbWFwLgotICAgICAqLwotICAgIGxvbmcgZHNWb2x1bWU7Ci0gICAgaWYgKHZvbHVtZSA9PSAwIHx8IGRzb3VuZHNpbmstPm11dGUpCi0gICAgICBkc1ZvbHVtZSA9IC0xMDAwMDsKLSAgICBlbHNlCi0gICAgICBkc1ZvbHVtZSA9IDEwMCAqIChsb25nKSAoMjAgKiBsb2cxMCAoKGRvdWJsZSkgdm9sdW1lIC8gMTAwLikpOwotICAgIGRzVm9sdW1lID0gQ0xBTVAgKGRzVm9sdW1lLCAtMTAwMDAsIDApOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZHNvdW5kc2luaywKLSAgICAgICAgIlNldHRpbmcgdm9sdW1lIG9uIHNlY29uZGFyeSBidWZmZXIgdG8gJWQgZnJvbSAlZCIsIChpbnQpIGRzVm9sdW1lLAotICAgICAgICAoaW50KSB2b2x1bWUpOwotICAgIElEaXJlY3RTb3VuZEJ1ZmZlcl9TZXRWb2x1bWUgKGRzb3VuZHNpbmstPnBEU0JTZWNvbmRhcnksIGRzVm9sdW1lKTsKLSAgfQotfQotCi1nZG91YmxlCi1nc3RfZGlyZWN0c291bmRfc2lua19nZXRfdm9sdW1lIChHc3REaXJlY3RTb3VuZFNpbmsgKiBkc291bmRzaW5rKQotewotICByZXR1cm4gKGdkb3VibGUpIGRzb3VuZHNpbmstPnZvbHVtZSAvIDEwMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX3NldF9tdXRlIChHc3REaXJlY3RTb3VuZFNpbmsgKiBkc291bmRzaW5rLCBnYm9vbGVhbiBtdXRlKQotewotICBpZiAobXV0ZSkgewotICAgIGdzdF9kaXJlY3Rzb3VuZF9zaW5rX3NldF92b2x1bWUgKGRzb3VuZHNpbmssIDAsIEZBTFNFKTsKLSAgICBkc291bmRzaW5rLT5tdXRlID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfZGlyZWN0c291bmRfc2lua19zZXRfdm9sdW1lIChkc291bmRzaW5rLAotICAgICAgICBnc3RfZGlyZWN0c291bmRfc2lua19nZXRfdm9sdW1lIChkc291bmRzaW5rKSwgRkFMU0UpOwotICAgIGRzb3VuZHNpbmstPm11dGUgPSBGQUxTRTsKLSAgfQotCi19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZ2V0X211dGUgKEdzdERpcmVjdFNvdW5kU2luayAqIGRzb3VuZHNpbmspCi17Ci0gIHJldHVybiBkc291bmRzaW5rLT5tdXRlOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotZ3N0X2RpcmVjdHNvdW5kX3NpbmtfZ2V0X2RldmljZSAoR3N0RGlyZWN0U291bmRTaW5rICogZHNvdW5kc2luaykKLXsKLSAgcmV0dXJuIGRzb3VuZHNpbmstPmRldmljZV9pZDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9kaXJlY3Rzb3VuZF9zaW5rX3NldF9kZXZpY2UgKEdzdERpcmVjdFNvdW5kU2luayAqIGRzb3VuZHNpbmssCi0gICAgY29uc3QgZ2NoYXIgKiBkZXZpY2VfaWQpCi17Ci0gIGdfZnJlZSAoZHNvdW5kc2luay0+ZGV2aWNlX2lkKTsKLSAgZHNvdW5kc2luay0+ZGV2aWNlX2lkID0gZ19zdHJkdXAgKGRldmljZV9pZCk7Ci19Ci0KLS8qIENvbnZlcnRzIGEgSFJFU1VMVCBlcnJvciB0byBhIHRleHQgc3RyaW5nCi0gKiBMUFRTVFIgaXMgZWl0aGVyIGEgKi8KLXN0YXRpYyBnY2hhciAqCi1nc3RfaHJlc190b19zdHJpbmcgKEhSRVNVTFQgaFJlcykKLXsKLSAgRFdPUkQgZmxhZ3M7Ci0gIGdjaGFyICpyZXRfdGV4dDsKLSAgTFBUU1RSIGVycm9yX3RleHQgPSBOVUxMOwotCi0gIGZsYWdzID0gRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0gfCBGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIKLSAgICAgIHwgRk9STUFUX01FU1NBR0VfSUdOT1JFX0lOU0VSVFM7Ci0gIEZvcm1hdE1lc3NhZ2UgKGZsYWdzLCBOVUxMLCBoUmVzLCBNQUtFTEFOR0lEIChMQU5HX05FVVRSQUwsIFNVQkxBTkdfREVGQVVMVCksCi0gICAgICAoTFBUU1RSKSAmIGVycm9yX3RleHQsIDAsIE5VTEwpOwotCi0jaWZkZWYgVU5JQ09ERQotICAvKiBJZiBVTklDT0RFIGlzIGRlZmluZWQsIExQVFNUUiBpcyBMUFdTVFIgd2hpY2ggaXMgVVRGLTE2ICovCi0gIHJldF90ZXh0ID0gZ191dGYxNl90b191dGY4IChlcnJvcl90ZXh0LCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSNlbHNlCi0gIHJldF90ZXh0ID0gZ19zdHJkdXAgKGVycm9yX3RleHQpOwotI2VuZGlmCi0KLSAgTG9jYWxGcmVlIChlcnJvcl90ZXh0KTsKLSAgcmV0dXJuIHJldF90ZXh0OwotfQpkaWZmIC0tZ2l0IGEvc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oIGIvc3lzL2RpcmVjdHNvdW5kL2dzdGRpcmVjdHNvdW5kc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWY3NjQ4Li4wMDAwMDAwCi0tLSBhL3N5cy9kaXJlY3Rzb3VuZC9nc3RkaXJlY3Rzb3VuZHNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAgMjAwNSBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSA8c29uZ2JpcmRAc29uZ2JpcmRuZXN0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0ZGlyZWN0c291bmRzaW5rLmg6IAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudAotICogb2YgUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0gKgotICogCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9ESVJFQ1RTT1VORFNJTktfSF9fCi0jZGVmaW5lIF9fR1NUX0RJUkVDVFNPVU5EU0lOS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9zaW5rLmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8ZHNvdW5kLmg+Ci0jaW5jbHVkZSA8bW1yZWcuaD4gCi0jaW5jbHVkZSA8a3MuaD4gCi0jaW5jbHVkZSA8a3NtZWRpYS5oPiAKLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBHU1RfVFlQRV9ESVJFQ1RTT1VORF9TSU5LICAgICAgICAgICAgKGdzdF9kaXJlY3Rzb3VuZF9zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9ESVJFQ1RTT1VORF9TSU5LKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfRElSRUNUU09VTkRfU0lOSyxHc3REaXJlY3RTb3VuZFNpbmspKQotI2RlZmluZSBHU1RfRElSRUNUU09VTkRfU0lOS19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfRElSRUNUU09VTkRfU0lOSyxHc3REaXJlY3RTb3VuZFNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19ESVJFQ1RTT1VORF9TSU5LKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfRElSRUNUU09VTkRfU0lOSykpCi0jZGVmaW5lIEdTVF9JU19ESVJFQ1RTT1VORF9TSU5LX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9ESVJFQ1RTT1VORF9TSU5LKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3REaXJlY3RTb3VuZFNpbmsgR3N0RGlyZWN0U291bmRTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdERpcmVjdFNvdW5kU2lua0NsYXNzIEdzdERpcmVjdFNvdW5kU2lua0NsYXNzOwotCi0jZGVmaW5lIEdTVF9EU09VTkRfTE9DSyhvYmopCShnX211dGV4X2xvY2sgKCZvYmotPmRzb3VuZF9sb2NrKSkKLSNkZWZpbmUgR1NUX0RTT1VORF9VTkxPQ0sob2JqKQkoZ19tdXRleF91bmxvY2sgKCZvYmotPmRzb3VuZF9sb2NrKSkKLQotc3RydWN0IF9Hc3REaXJlY3RTb3VuZFNpbmsKLXsKLSAgR3N0QXVkaW9TaW5rIHNpbms7Ci0KLQotICAvKiBkaXJlY3Rzb3VuZCBvYmplY3QgaW50ZXJmYWNlIHBvaW50ZXIgKi8KLSAgTFBESVJFQ1RTT1VORCBwRFM7Ci0KLSAgLyogZGlyZWN0c291bmQgc291bmQgb2JqZWN0IGludGVyZmFjZSBwb2ludGVyICovCi0gIExQRElSRUNUU09VTkRCVUZGRVIgcERTQlNlY29uZGFyeTsKLQotICAvKiBkaXJlY3RTb3VuZCBidWZmZXIgc2l6ZSAqLwotICBndWludCBidWZmZXJfc2l6ZTsKLQotICAvKiBvZmZzZXQgb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciB3aGVyZSB3ZSBtdXN0IHdyaXRlIG5leHQgKi8KLSAgZ3VpbnQgY3VycmVudF9jaXJjdWxhcl9vZmZzZXQ7Ci0KLSAgZ3VpbnQgYnl0ZXNfcGVyX3NhbXBsZTsKLQotICAvKiBjdXJyZW50IHZvbHVtZSBzZXR1cCBieSBtaXhlciBpbnRlcmZhY2UgKi8KLSAgZ2xvbmcgdm9sdW1lOwotICBnYm9vbGVhbiBtdXRlOwotICAKLSAgLyogY3VycmVudCBkaXJlY3Rzb3VuZCBkZXZpY2UgSUQgKi8KLSAgZ2NoYXIgKiBkZXZpY2VfaWQ7Ci0KLSAgR3N0Q2FwcyAqY2FjaGVkX2NhcHM7Ci0gIC8qIGxvY2sgdXNlZCB0byBwcm90ZWN0IHdyaXRlcyBhbmQgcmVzZXRzICovCi0gIEdNdXRleCBkc291bmRfbG9jazsKLQotICBnYm9vbGVhbiBmaXJzdF9idWZmZXJfYWZ0ZXJfcmVzZXQ7Ci0KLSAgR3N0QXVkaW9SaW5nQnVmZmVyRm9ybWF0VHlwZSB0eXBlOwotfTsKLQotc3RydWN0IF9Hc3REaXJlY3RTb3VuZFNpbmtDbGFzcwotewotICBHc3RBdWRpb1NpbmtDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfZGlyZWN0c291bmRfc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfRElSRUNUU09VTkRTSU5LX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL29zcy9NYWtlZmlsZS5hbSBiL3N5cy9vc3MvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NDc2NmIuLjAwMDAwMDAKLS0tIGEvc3lzL29zcy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG9zc2F1ZGlvLmxhCi0KLWxpYmdzdG9zc2F1ZGlvX2xhX1NPVVJDRVMgPSBnc3Rvc3NhdWRpby5jCSBcCi0JCSAgICAgICAgICAgIGdzdG9zc2hlbHBlci5jCSBcCi0JCQkgICAgZ3N0b3Nzc2luay5jCSBcCi0JCQkgICAgZ3N0b3Nzc3JjLmMKLQotbGliZ3N0b3NzYXVkaW9fbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdG9zc2F1ZGlvX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9MSUJTKQotbGliZ3N0b3NzYXVkaW9fbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKSAKLWxpYmdzdG9zc2F1ZGlvX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi0KLW5vaW5zdF9IRUFERVJTID0gY29tbW9uLmggICAgICAgICAgICBcCi0JCWdzdG9zc3NpbmsuaAkgICAgIFwKLQkJZ3N0b3Nzc3JjLmgJICAgICBcCi0gICAgICAgICAgICAgICAgZ3N0b3NzaGVscGVyLmgJICAgICBcCi0gICAgICAgICAgICAgICAgZ3N0b3NzZG1hYnVmZmVyLmgKZGlmZiAtLWdpdCBhL3N5cy9vc3MvTWFrZWZpbGUuaW4gYi9zeXMvb3NzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTEwN2I2Li4wMDAwMDAwCi0tLSBhL3N5cy9vc3MvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NDkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gc3lzL29zcwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdG9zc2F1ZGlvX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0b3NzYXVkaW9fbGFfT0JKRUNUUyA9IGxpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2F1ZGlvLmxvIFwKLQlsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NoZWxwZXIubG8gXAotCWxpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc3NpbmsubG8gbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc3JjLmxvCi1saWJnc3Rvc3NhdWRpb19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rvc3NhdWRpb19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0b3NzYXVkaW9fbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3Rvc3NhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdG9zc2F1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdG9zc2F1ZGlvX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdG9zc2F1ZGlvX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdG9zc2F1ZGlvX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG9zc2F1ZGlvLmxhCi1saWJnc3Rvc3NhdWRpb19sYV9TT1VSQ0VTID0gZ3N0b3NzYXVkaW8uYwkgXAotCQkgICAgICAgICAgICBnc3Rvc3NoZWxwZXIuYwkgXAotCQkJICAgIGdzdG9zc3NpbmsuYwkgXAotCQkJICAgIGdzdG9zc3NyYy5jCi0KLWxpYmdzdG9zc2F1ZGlvX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1saWJnc3Rvc3NhdWRpb19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykKLQotbGliZ3N0b3NzYXVkaW9fbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKSAKLWxpYmdzdG9zc2F1ZGlvX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGNvbW1vbi5oICAgICAgICAgICAgXAotCQlnc3Rvc3NzaW5rLmgJICAgICBcCi0JCWdzdG9zc3NyYy5oCSAgICAgXAotICAgICAgICAgICAgICAgIGdzdG9zc2hlbHBlci5oCSAgICAgXAotICAgICAgICAgICAgICAgIGdzdG9zc2RtYWJ1ZmZlci5oCi0KLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHN5cy9vc3MvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgc3lzL29zcy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdG9zc2F1ZGlvLmxhOiAkKGxpYmdzdG9zc2F1ZGlvX2xhX09CSkVDVFMpICQobGliZ3N0b3NzYXVkaW9fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdG9zc2F1ZGlvX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3Rvc3NhdWRpb19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0b3NzYXVkaW9fbGFfT0JKRUNUUykgJChsaWJnc3Rvc3NhdWRpb19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2F1ZGlvLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzaGVscGVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc3NyYy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzYXVkaW8ubG86IGdzdG9zc2F1ZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3NhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3NhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzYXVkaW8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2F1ZGlvLlRwbyAtYyAtbyBsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NhdWRpby5sbyBgdGVzdCAtZiAnZ3N0b3NzYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3NzYXVkaW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzYXVkaW8uVHBvICQoREVQRElSKS9saWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NhdWRpby5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rvc3NhdWRpby5jJyBvYmplY3Q9J2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2F1ZGlvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3NzYXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3NzYXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzYXVkaW8ubG8gYHRlc3QgLWYgJ2dzdG9zc2F1ZGlvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9zc2F1ZGlvLmMKLQotbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzaGVscGVyLmxvOiBnc3Rvc3NoZWxwZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zc2F1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zc2F1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NoZWxwZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2hlbHBlci5UcG8gLWMgLW8gbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3NzaGVscGVyLmxvIGB0ZXN0IC1mICdnc3Rvc3NoZWxwZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3NzaGVscGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2hlbHBlci5UcG8gJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc2hlbHBlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rvc3NoZWxwZXIuYycgb2JqZWN0PSdsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NoZWxwZXIubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3NhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3NhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NoZWxwZXIubG8gYHRlc3QgLWYgJ2dzdG9zc2hlbHBlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3NoZWxwZXIuYwotCi1saWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NzaW5rLmxvOiBnc3Rvc3NzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3NhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3NhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc2luay5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc2luay5UcG8gLWMgLW8gbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc2luay5sbyBgdGVzdCAtZiAnZ3N0b3Nzc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3NzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc3NpbmsuVHBvICQoREVQRElSKS9saWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NzaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG9zc3NpbmsuYycgb2JqZWN0PSdsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NzaW5rLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3NzYXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3NzYXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc2luay5sbyBgdGVzdCAtZiAnZ3N0b3Nzc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3NzaW5rLmMKLQotbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc3JjLmxvOiBnc3Rvc3NzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zc2F1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zc2F1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc3NyYy5UcG8gLWMgLW8gbGliZ3N0b3NzYXVkaW9fbGEtZ3N0b3Nzc3JjLmxvIGB0ZXN0IC1mICdnc3Rvc3NzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3Nzc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc3NyYy5UcG8gJChERVBESVIpL2xpYmdzdG9zc2F1ZGlvX2xhLWdzdG9zc3NyYy5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rvc3NzcmMuYycgb2JqZWN0PSdsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NzcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3NhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3NhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rvc3NhdWRpb19sYS1nc3Rvc3NzcmMubG8gYHRlc3QgLWYgJ2dzdG9zc3NyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3NzcmMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9zeXMvb3NzL2NvbW1vbi5oIGIvc3lzL29zcy9jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzNjMyZi4uMDAwMDAwMAotLS0gYS9zeXMvb3NzL2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNkZWZpbmUgU0VUX1BBUkFNKF9vc3MsIF9uYW1lLCBfdmFsLCBfZGV0YWlsKSAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50IF90bXAgPSBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGlvY3RsKF9vc3MtPmZkLCBfbmFtZSwgJl90bXApID09IC0xKSB7ICAgIFwKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoX29zcywgUkVTT1VSQ0UsIFNFVFRJTkdTLFwKLSAgICAgICAgKE5VTEwpLAkJCQkJXAotICAgICAgICAoIlVuYWJsZSB0byBzZXQgcGFyYW0gIiBfZGV0YWlsICI6ICVzIiwgXAotICAgICAgICAgICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSkpOyAgICAgICAgXAotICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfREVCVUdfT0JKRUNUKF9vc3MsIF9kZXRhaWwgIiAlZCIsIF90bXApOyAgXAotfSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgR0VUX1BBUkFNKF9vc3MsIF9uYW1lLCBfdmFsLCBfZGV0YWlsKSAgIFwKLUdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKGlvY3RsKG9zcy0+ZmQsIF9uYW1lLCBfdmFsKSA9PSAtMSkgeyAgICAgIFwKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob3NzLCBSRVNPVVJDRSwgU0VUVElOR1MsIFwKLSAgICAgICAgKE5VTEwpLAkJCQkJXAotICAgICAgICAoIlVuYWJsZSB0byBnZXQgcGFyYW0gIiBfZGV0YWlsICI6ICVzIiwgXAotICAgICAgICAgICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSkpOyAgICAgICAgXAotICAgIHJldHVybiBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSBHX1NUTVRfRU5ECmRpZmYgLS1naXQgYS9zeXMvb3NzL2dzdG9zc2F1ZGlvLmMgYi9zeXMvb3NzL2dzdG9zc2F1ZGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOTRlMmUuLjAwMDAwMDAKLS0tIGEvc3lzL29zcy9nc3Rvc3NhdWRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwxOTk5PiBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgImdzdG9zc3NpbmsuaCIKLSNpbmNsdWRlICJnc3Rvc3NzcmMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZIChvc3NfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgb3NzX2RlYnVnCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAib3Nzc3JjIiwgR1NUX1JBTktfU0VDT05EQVJZLAotICAgICAgICAgIEdTVF9UWVBFX09TU19TUkMpIHx8Ci0gICAgICAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIm9zc3NpbmsiLCBHU1RfUkFOS19TRUNPTkRBUlksCi0gICAgICAgICAgR1NUX1RZUEVfT1NTU0lOSykpIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3NzX2RlYnVnLCAib3NzIiwgMCwgIk9TUyBlbGVtZW50cyIpOwotCi0jaWZkZWYgRU5BQkxFX05MUwotICBHU1RfREVCVUcgKCJiaW5kaW5nIHRleHQgZG9tYWluICVzIHRvIGxvY2FsZSBkaXIgJXMiLCBHRVRURVhUX1BBQ0tBR0UsCi0gICAgICBMT0NBTEVESVIpOwotICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOwotICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKLSNlbmRpZiAvKiBFTkFCTEVfTkxTICovCi0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBvc3NhdWRpbywKLSAgICAiT1NTIChPcGVuIFNvdW5kIFN5c3RlbSkgc3VwcG9ydCBmb3IgR1N0cmVhbWVyIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL3N5cy9vc3MvZ3N0b3NzZG1hYnVmZmVyLmggYi9zeXMvb3NzL2dzdG9zc2RtYWJ1ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTQzYjAzLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3MvZ3N0b3NzZG1hYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwNSBXaW0gVGF5bWFucyA8d2ltQGZsdWVuZG8uY29tPgotICoKLSAqIGdzdG9zc2RtYWJ1ZmZlci5oOiAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX09TU0RNQUJVRkZFUl9IX18KLSNkZWZpbmUgX19HU1RfT1NTRE1BQlVGRkVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAiZ3N0b3NzaGVscGVyLmgiCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdHJpbmdidWZmZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09TU0RNQUJVRkZFUiAgICAgICAgICAgIChnc3Rfb3NzZG1hYnVmZmVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9PU1NETUFCVUZGRVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9PU1NETUFCVUZGRVIsR3N0T3NzRE1BQnVmZmVyKSkKLSNkZWZpbmUgR1NUX09TU0RNQUJVRkZFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfT1NTRE1BQlVGRkVSLEdzdE9zc0RNQUJ1ZmZlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX09TU0RNQUJVRkZFUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX09TU0RNQUJVRkZFUikpCi0jZGVmaW5lIEdTVF9JU19PU1NETUFCVUZGRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX09TU0RNQUJVRkZFUikpCi0KLSNkZWZpbmUgR1NUX09TU0VMRU1FTlRfR0VUKG9iaikgIEdTVF9PU1NFTEVNRU5UIChvYmotPmVsZW1lbnQpCi0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9PU1NETUFCVUZGRVJfT1BFTiAgICAgICAgID0gKDEgPDwgMCksCi19IEdzdE9zc0RNQUJ1ZmZlckZsYWdzOwotCi10eXBlZGVmIHN0cnVjdCBfR3N0T3NzRE1BQnVmZmVyIEdzdE9zc0RNQUJ1ZmZlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3NETUFCdWZmZXJDbGFzcyBHc3RPc3NETUFCdWZmZXJDbGFzczsKLQotI2RlZmluZSBHU1RfT1NTRE1BQlVGRkVSX1RIUkVBRChidWYpICAgKEdTVF9PU1NETUFCVUZGRVIoYnVmKS0+dGhyZWFkKQotI2RlZmluZSBHU1RfT1NTRE1BQlVGRkVSX0xPQ0sgICAgICAgICAgR1NUX09CSkVDVF9MT0NLCi0jZGVmaW5lIEdTVF9PU1NETUFCVUZGRVJfVU5MT0NLICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSwotI2RlZmluZSBHU1RfT1NTRE1BQlVGRkVSX0NPTkQoYnVmKSAgICAgKEdTVF9PU1NETUFCVUZGRVIoYnVmKS0+Y29uZCkKLSNkZWZpbmUgR1NUX09TU0RNQUJVRkZFUl9TSUdOQUwoYnVmKSAgIChnX2NvbmRfc2lnbmFsIChHU1RfT1NTRE1BQlVGRkVSX0NPTkQgKGJ1ZikpKQotI2RlZmluZSBHU1RfT1NTRE1BQlVGRkVSX1dBSVQoYnVmKSAgICAgKGdfY29uZF93YWl0IChHU1RfT1NTRE1BQlVGRkVSX0NPTkQgKGJ1ZiksIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKGJ1ZikpKQotCi1zdHJ1Y3QgX0dzdE9zc0RNQUJ1ZmZlciB7Ci0gIEdzdFJpbmdCdWZmZXIgIGJ1ZmZlcjsKLQotICBHc3RPc3NFbGVtZW50ICplbGVtZW50OwotCi0gIGludCAgICAgICAgICAgIGZkOwotICBpbnQgICAgICAgICAgICBjYXBzOwotICBpbnQgICAgICAgICAgICBmcmFnOwotCi0gIEdUaHJlYWQgICAgICAgKnRocmVhZDsKLSAgR0NvbmQgICAgICAgICAqY29uZDsKLSAgZ2Jvb2xlYW4gICAgICAgcnVubmluZzsKLX07Ci0KLXN0cnVjdCBfR3N0T3NzRE1BQnVmZmVyQ2xhc3MgewotICBHc3RSaW5nQnVmZmVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X29zc2RtYWJ1ZmZlcl9nZXRfdHlwZSh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX09TU0RNQUJVRkZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy9vc3MvZ3N0b3NzaGVscGVyLmMgYi9zeXMvb3NzL2dzdG9zc2hlbHBlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjQ5ZTAwLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3MvZ3N0b3NzaGVscGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4KLSAqCi0gKiBnc3Rvc3NoZWxwZXIuYzogT1NTIGhlbHBlciByb3V0aW5lcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmZGVmIEhBVkVfT1NTX0lOQ0xVREVfSU5fU1lTCi0jIGluY2x1ZGUgPHN5cy9zb3VuZGNhcmQuaD4KLSNlbHNlCi0jIGlmZGVmIEhBVkVfT1NTX0lOQ0xVREVfSU5fUk9PVAotIyAgaW5jbHVkZSA8c291bmRjYXJkLmg+Ci0jIGVsc2UKLSMgIGlmZGVmIEhBVkVfT1NTX0lOQ0xVREVfSU5fTUFDSElORQotIyAgIGluY2x1ZGUgPG1hY2hpbmUvc291bmRjYXJkLmg+Ci0jICBlbHNlCi0jICAgZXJyb3IgIldoYXQgdG8gaW5jbHVkZT8iCi0jICBlbmRpZiAvKiBIQVZFX09TU19JTkNMVURFX0lOX01BQ0hJTkUgKi8KLSMgZW5kaWYgLyogSEFWRV9PU1NfSU5DTFVERV9JTl9ST09UICovCi0jZW5kaWYgLyogSEFWRV9PU1NfSU5DTFVERV9JTl9TWVMgKi8KLQotI2luY2x1ZGUgImdzdG9zc2hlbHBlci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChvc3NfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgb3NzX2RlYnVnCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3NQcm9iZSBHc3RPc3NQcm9iZTsKLXN0cnVjdCBfR3N0T3NzUHJvYmUKLXsKLSAgaW50IGZkOwotICBpbnQgZm9ybWF0OwotICBpbnQgbl9jaGFubmVsczsKLSAgR0FycmF5ICpyYXRlczsKLSAgaW50IG1pbjsKLSAgaW50IG1heDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3NSYW5nZSBHc3RPc3NSYW5nZTsKLXN0cnVjdCBfR3N0T3NzUmFuZ2UKLXsKLSAgaW50IG1pbjsKLSAgaW50IG1heDsKLX07Ci0KLXN0YXRpYyBHc3RTdHJ1Y3R1cmUgKmdzdF9vc3NfaGVscGVyX2dldF9mb3JtYXRfc3RydWN0dXJlICh1bnNpZ25lZCBpbnQKLSAgICBmb3JtYXRfYml0KTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzX2hlbHBlcl9yYXRlX3Byb2JlX2NoZWNrIChHc3RPc3NQcm9iZSAqIHByb2JlKTsKLXN0YXRpYyBpbnQgZ3N0X29zc19oZWxwZXJfcmF0ZV9jaGVja19yYXRlIChHc3RPc3NQcm9iZSAqIHByb2JlLCBpbnQgaXJhdGUpOwotc3RhdGljIHZvaWQgZ3N0X29zc19oZWxwZXJfcmF0ZV9hZGRfcmFuZ2UgKEdRdWV1ZSAqIHF1ZXVlLCBpbnQgbWluLCBpbnQgbWF4KTsKLXN0YXRpYyB2b2lkIGdzdF9vc3NfaGVscGVyX3JhdGVfYWRkX3JhdGUgKEdBcnJheSAqIGFycmF5LCBpbnQgcmF0ZSk7Ci1zdGF0aWMgaW50IGdzdF9vc3NfaGVscGVyX3JhdGVfaW50X2NvbXBhcmUgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKTsKLQotR3N0Q2FwcyAqCi1nc3Rfb3NzX2hlbHBlcl9wcm9iZV9jYXBzIChnaW50IGZkKQotewotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSAgY29uc3QgZ3VpbnQgcHJvYmVfZm9ybWF0c1tdID0geyBBRk1UX1MxNl9MRSwgQUZNVF9VMTZfTEUsIEFGTVRfVTgsIEFGTVRfUzggfTsKLSNlbHNlCi0gIGNvbnN0IGd1aW50IHByb2JlX2Zvcm1hdHNbXSA9IHsgQUZNVF9TMTZfQkUsIEFGTVRfVTE2X0JFLCBBRk1UX1U4LCBBRk1UX1M4IH07Ci0jZW5kaWYKLSAgR3N0T3NzUHJvYmUgKnByb2JlOwotICBpbnQgaSwgZjsKLSAgZ2Jvb2xlYW4gcmV0OwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICAvKiBGSVhNRSB0ZXN0IG1ha2Ugc3VyZSB3ZSdyZSBub3QgY3VycmVudGx5IHBsYXlpbmcgKi8KLSAgLyogRklYTUUgdGVzdCBib3RoIG1vbm8gYW5kIHN0ZXJlbyAqLwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgLyogYXNzdW1lIHRoYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIGZvcm1hdF9tYXNrIGlzIDAgKi8KLSAgZm9yIChmID0gMDsgZiA8IEdfTl9FTEVNRU5UUyAocHJvYmVfZm9ybWF0cyk7ICsrZikgewotICAgIEdWYWx1ZSByYXRlX3ZhbHVlID0geyAwIH07Ci0KLSAgICBwcm9iZSA9IGdfbmV3MCAoR3N0T3NzUHJvYmUsIDEpOwotICAgIHByb2JlLT5mZCA9IGZkOwotICAgIHByb2JlLT5mb3JtYXQgPSBwcm9iZV9mb3JtYXRzW2ZdOwotICAgIC8qIEZJWE1FOiB0aGlzIGlzIG5vdCB3b3JraW5nIGZvciBhbGwgY2FyZHMsIHNlZSBidWcgIzUxODQ3NCAqLwotICAgIHByb2JlLT5uX2NoYW5uZWxzID0gMjsKLQotICAgIHJldCA9IGdzdF9vc3NfaGVscGVyX3JhdGVfcHJvYmVfY2hlY2sgKHByb2JlKTsKLSAgICBpZiAocHJvYmUtPm1pbiA9PSAtMSB8fCBwcm9iZS0+bWF4ID09IC0xKSB7Ci0gICAgICBnX2FycmF5X2ZyZWUgKHByb2JlLT5yYXRlcywgVFJVRSk7Ci0gICAgICBnX2ZyZWUgKHByb2JlKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChyZXQpIHsKLSAgICAgIEdWYWx1ZSB2YWx1ZSA9IHsgMCB9OwotCi0gICAgICBnX2FycmF5X3NvcnQgKHByb2JlLT5yYXRlcywgZ3N0X29zc19oZWxwZXJfcmF0ZV9pbnRfY29tcGFyZSk7Ci0KLSAgICAgIGdfdmFsdWVfaW5pdCAoJnJhdGVfdmFsdWUsIEdTVF9UWVBFX0xJU1QpOwotICAgICAgZ192YWx1ZV9pbml0ICgmdmFsdWUsIEdfVFlQRV9JTlQpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvYmUtPnJhdGVzLT5sZW47IGkrKykgewotICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZ2YWx1ZSwgZ19hcnJheV9pbmRleCAocHJvYmUtPnJhdGVzLCBpbnQsIGkpKTsKLQotICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZyYXRlX3ZhbHVlLCAmdmFsdWUpOwotICAgICAgfQotCi0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBvbmUgYmlnIHJhbmdlICovCi0gICAgICBnX3ZhbHVlX2luaXQgKCZyYXRlX3ZhbHVlLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZyYXRlX3ZhbHVlLCBwcm9iZS0+bWluLCBwcm9iZS0+bWF4KTsKLSAgICB9Ci0KLSAgICBnX2FycmF5X2ZyZWUgKHByb2JlLT5yYXRlcywgVFJVRSk7Ci0gICAgZ19mcmVlIChwcm9iZSk7Ci0KLSAgICBzdHJ1Y3R1cmUgPSBnc3Rfb3NzX2hlbHBlcl9nZXRfZm9ybWF0X3N0cnVjdHVyZSAocHJvYmVfZm9ybWF0c1tmXSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCAyLCBOVUxMKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAoc3RydWN0dXJlLCAicmF0ZSIsICZyYXRlX3ZhbHVlKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmcmF0ZV92YWx1ZSk7Ci0KLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzLCBzdHJ1Y3R1cmUpOwotICB9Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSkgewotICAgIC8qIGZpeG1lOiBtYWtlIHVzZXItdmlzaWJsZSAqLwotICAgIEdTVF9XQVJOSU5HICgiWW91ciBPU1MgZGV2aWNlIGNvdWxkIG5vdCBiZSBwcm9iZWQgY29ycmVjdGx5Iik7Ci0gIH0gZWxzZSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX3NpbXBsaWZ5IChjYXBzKTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoInByb2JlZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RTdHJ1Y3R1cmUgKgotZ3N0X29zc19oZWxwZXJfZ2V0X2Zvcm1hdF9zdHJ1Y3R1cmUgKHVuc2lnbmVkIGludCBmb3JtYXRfYml0KQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgY29uc3QgZ2NoYXIgKmZvcm1hdDsKLQotICBzd2l0Y2ggKGZvcm1hdF9iaXQpIHsKLSAgICBjYXNlIEFGTVRfVTg6Ci0gICAgICBmb3JtYXQgPSAiVTgiOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBRk1UX1MxNl9MRToKLSAgICAgIGZvcm1hdCA9ICJTMTZMRSI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFGTVRfUzE2X0JFOgotICAgICAgZm9ybWF0ID0gIlMxNkJFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQUZNVF9TODoKLSAgICAgIGZvcm1hdCA9ICJTOCI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFGTVRfVTE2X0xFOgotICAgICAgZm9ybWF0ID0gIlUxNkxFIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQUZNVF9VMTZfQkU6Ci0gICAgICBmb3JtYXQgPSAiVTE2QkUiOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBmb3JtYXQsCi0gICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3NzX2hlbHBlcl9yYXRlX3Byb2JlX2NoZWNrIChHc3RPc3NQcm9iZSAqIHByb2JlKQotewotICBHc3RPc3NSYW5nZSAqcmFuZ2U7Ci0gIEdRdWV1ZSAqcmFuZ2VzOwotICBpbnQgZXhhY3RfcmF0ZXMgPSAwOwotICBnYm9vbGVhbiBjaGVja2luZ19leGFjdF9yYXRlcyA9IFRSVUU7Ci0gIGludCBuX2NoZWNrcyA9IDA7Ci0gIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0KLSAgcmFuZ2VzID0gZ19xdWV1ZV9uZXcgKCk7Ci0KLSAgcHJvYmUtPnJhdGVzID0gZ19hcnJheV9uZXcgKEZBTFNFLCBGQUxTRSwgc2l6ZW9mIChpbnQpKTsKLQotICBwcm9iZS0+bWluID0gZ3N0X29zc19oZWxwZXJfcmF0ZV9jaGVja19yYXRlIChwcm9iZSwgMTAwMCk7Ci0gIG5fY2hlY2tzKys7Ci0gIHByb2JlLT5tYXggPSBnc3Rfb3NzX2hlbHBlcl9yYXRlX2NoZWNrX3JhdGUgKHByb2JlLCAxMDAwMDApOwotICAvKiBhIGxpdHRsZSBidWcgd29ya2Fyb3VuZCAqLwotICB7Ci0gICAgaW50IG1heDsKLQotICAgIG1heCA9IGdzdF9vc3NfaGVscGVyX3JhdGVfY2hlY2tfcmF0ZSAocHJvYmUsIDQ4MDAwKTsKLSAgICBpZiAobWF4ID4gcHJvYmUtPm1heCkgewotICAgICAgR1NUX0VSUk9SCi0gICAgICAgICAgKCJEcml2ZXIgYnVnIHJlY29nbml6ZWQgKGRyaXZlciBkb2VzIG5vdCByb3VuZCByYXRlcyBjb3JyZWN0bHkpLiAgUGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0LiIpOwotICAgICAgcHJvYmUtPm1heCA9IG1heDsKLSAgICB9Ci0gIH0KLSAgbl9jaGVja3MrKzsKLSAgaWYgKHByb2JlLT5taW4gPT0gLTEgfHwgcHJvYmUtPm1heCA9PSAtMSkgewotICAgIC8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBkcml2ZXJzIHRoYXQgcmV0dXJuIC1FSU5WQUwgKG9yIGFub3RoZXIKLSAgICAgKiBlcnJvcikgZm9yIHJhdGVzIG91dHNpZGUgb2YgWzgwMDAsNDgwMDBdLiAgSWYgdGhpcyBmYWlscywgdGhlCi0gICAgICogZHJpdmVyIGlzIHNlcmlvdXNseSBidWdneSwgYW5kIHByb2JhYmx5IGRvZXNuJ3Qgd29yayB3aXRoIG90aGVyCi0gICAgICogbWVkaWEgbGlicmFyaWVzL2FwcHMuICAqLwotICAgIHByb2JlLT5taW4gPSBnc3Rfb3NzX2hlbHBlcl9yYXRlX2NoZWNrX3JhdGUgKHByb2JlLCA4MDAwKTsKLSAgICBwcm9iZS0+bWF4ID0gZ3N0X29zc19oZWxwZXJfcmF0ZV9jaGVja19yYXRlIChwcm9iZSwgNDgwMDApOwotICB9Ci0gIGlmIChwcm9iZS0+bWluID09IC0xIHx8IHByb2JlLT5tYXggPT0gLTEpIHsKLSAgICBHU1RfREVCVUcgKCJ1bmV4cGVjdGVkIGNoZWNrX3JhdGUgZXJyb3IiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgZ3N0X29zc19oZWxwZXJfcmF0ZV9hZGRfcmFuZ2UgKHJhbmdlcywgcHJvYmUtPm1pbiArIDEsIHByb2JlLT5tYXggLSAxKTsKLQotICB3aGlsZSAoKHJhbmdlID0gZ19xdWV1ZV9wb3BfaGVhZCAocmFuZ2VzKSkpIHsKLSAgICBpbnQgbWluMTsKLSAgICBpbnQgbWF4MTsKLSAgICBpbnQgbWlkOwotICAgIGludCBtaWRfcmV0OwotCi0gICAgR1NUX0RFQlVHICgiY2hlY2tpbmcgWyVkLCVkXSIsIHJhbmdlLT5taW4sIHJhbmdlLT5tYXgpOwotCi0gICAgbWlkID0gKHJhbmdlLT5taW4gKyByYW5nZS0+bWF4KSAvIDI7Ci0gICAgbWlkX3JldCA9IGdzdF9vc3NfaGVscGVyX3JhdGVfY2hlY2tfcmF0ZSAocHJvYmUsIG1pZCk7Ci0gICAgaWYgKG1pZF9yZXQgPT0gLTEpIHsKLSAgICAgIC8qIEZJWE1FIGlvY3RsIHJldHVybmVkIGFuIGVycm9yLiAgZG8gc29tZXRoaW5nICovCi0gICAgICBHU1RfREVCVUcgKCJ1bmV4cGVjdGVkIGNoZWNrX3JhdGUgZXJyb3IiKTsKLSAgICB9Ci0gICAgbl9jaGVja3MrKzsKLQotICAgIGlmIChtaWQgPT0gbWlkX3JldCAmJiBjaGVja2luZ19leGFjdF9yYXRlcykgewotICAgICAgaW50IG1heF9leGFjdF9tYXRjaGVzID0gMjA7Ci0KLSAgICAgIGV4YWN0X3JhdGVzKys7Ci0gICAgICBpZiAoZXhhY3RfcmF0ZXMgPiBtYXhfZXhhY3RfbWF0Y2hlcykgewotICAgICAgICBHU1RfREVCVUcgKCJnb3QgJWQgZXhhY3QgcmF0ZXMsIGFzc3VtaW5nIGFsbCBhcmUgZXhhY3QiLAotICAgICAgICAgICAgbWF4X2V4YWN0X21hdGNoZXMpOwotICAgICAgICByZXN1bHQgPSBGQUxTRTsKLSAgICAgICAgZ19mcmVlIChyYW5nZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBjaGVja2luZ19leGFjdF9yYXRlcyA9IEZBTFNFOwotICAgIH0KLQotICAgIC8qIEFzc3VtZSB0aGF0IHRoZSByYXRlIGlzIGFyaXRobWV0aWNhbGx5IHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QKLSAgICAgKiBzdXBwb3J0ZWQgcmF0ZS4gKi8KLSAgICBpZiAobWlkID09IG1pZF9yZXQpIHsKLSAgICAgIG1pbjEgPSBtaWQgLSAxOwotICAgICAgbWF4MSA9IG1pZCArIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChtaWQgPCBtaWRfcmV0KSB7Ci0gICAgICAgIG1pbjEgPSBtaWQgLSAobWlkX3JldCAtIG1pZCk7Ci0gICAgICAgIG1heDEgPSBtaWRfcmV0ICsgMTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pbjEgPSBtaWRfcmV0IC0gMTsKLSAgICAgICAgbWF4MSA9IG1pZCArIChtaWQgLSBtaWRfcmV0KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBnc3Rfb3NzX2hlbHBlcl9yYXRlX2FkZF9yYW5nZSAocmFuZ2VzLCByYW5nZS0+bWluLCBtaW4xKTsKLSAgICBnc3Rfb3NzX2hlbHBlcl9yYXRlX2FkZF9yYW5nZSAocmFuZ2VzLCBtYXgxLCByYW5nZS0+bWF4KTsKLQotICAgIGdfZnJlZSAocmFuZ2UpOwotICB9Ci0KLSAgd2hpbGUgKChyYW5nZSA9IGdfcXVldWVfcG9wX2hlYWQgKHJhbmdlcykpKSB7Ci0gICAgZ19mcmVlIChyYW5nZSk7Ci0gIH0KLSAgZ19xdWV1ZV9mcmVlIChyYW5nZXMpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzX2hlbHBlcl9yYXRlX2FkZF9yYW5nZSAoR1F1ZXVlICogcXVldWUsIGludCBtaW4sIGludCBtYXgpCi17Ci0gIGlmIChtaW4gPD0gbWF4KSB7Ci0gICAgR3N0T3NzUmFuZ2UgKnJhbmdlID0gZ19uZXcwIChHc3RPc3NSYW5nZSwgMSk7Ci0KLSAgICByYW5nZS0+bWluID0gbWluOwotICAgIHJhbmdlLT5tYXggPSBtYXg7Ci0KLSAgICBnX3F1ZXVlX3B1c2hfdGFpbCAocXVldWUsIHJhbmdlKTsKLSAgICAvKiBwdXNoX2hlYWQgYWxzbyB3b3JrcywgYnV0IGhhcyBkaWZmZXJlbnQgcHJvYmluZyBiZWhhdmlvciAqLwotICAgIC8qZ19xdWV1ZV9wdXNoX2hlYWQgKHF1ZXVlLCByYW5nZSk7ICovCi0gIH0KLX0KLQotc3RhdGljIGludAotZ3N0X29zc19oZWxwZXJfcmF0ZV9jaGVja19yYXRlIChHc3RPc3NQcm9iZSAqIHByb2JlLCBpbnQgaXJhdGUpCi17Ci0gIGludCByYXRlOwotICBpbnQgZm9ybWF0OwotICBpbnQgbl9jaGFubmVsczsKLSAgaW50IHJldDsKLQotICByYXRlID0gaXJhdGU7Ci0gIGZvcm1hdCA9IHByb2JlLT5mb3JtYXQ7Ci0gIG5fY2hhbm5lbHMgPSBwcm9iZS0+bl9jaGFubmVsczsKLQotICBHU1RfTE9HICgiY2hlY2tpbmcgZm9ybWF0ICVkLCBjaGFubmVscyAlZCwgcmF0ZSAlZCIsCi0gICAgICBmb3JtYXQsIG5fY2hhbm5lbHMsIHJhdGUpOwotICByZXQgPSBpb2N0bCAocHJvYmUtPmZkLCBTTkRDVExfRFNQX1NFVEZNVCwgJmZvcm1hdCk7Ci0gIGlmIChyZXQgPCAwIHx8IGZvcm1hdCAhPSBwcm9iZS0+Zm9ybWF0KSB7Ci0gICAgR1NUX0RFQlVHICgidW5zdXBwb3J0ZWQgZm9ybWF0OiAlZCAoJWQpIiwgcHJvYmUtPmZvcm1hdCwgZm9ybWF0KTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgcmV0ID0gaW9jdGwgKHByb2JlLT5mZCwgU05EQ1RMX0RTUF9DSEFOTkVMUywgJm5fY2hhbm5lbHMpOwotICBpZiAocmV0IDwgMCB8fCBuX2NoYW5uZWxzICE9IHByb2JlLT5uX2NoYW5uZWxzKSB7Ci0gICAgR1NUX0RFQlVHICgidW5zdXBwb3J0ZWQgY2hhbm5lbHM6ICVkICglZCkiLCBwcm9iZS0+bl9jaGFubmVscywgbl9jaGFubmVscyk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIHJldCA9IGlvY3RsIChwcm9iZS0+ZmQsIFNORENUTF9EU1BfU1BFRUQsICZyYXRlKTsKLSAgaWYgKHJldCA8IDApIHsKLSAgICBHU1RfREVCVUcgKCJ1bnN1cHBvcnRlZCByYXRlOiAlZCAoJWQpIiwgaXJhdGUsIHJhdGUpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoInJhdGUgJWQgLT4gJWQiLCBpcmF0ZSwgcmF0ZSk7Ci0KLSAgaWYgKHJhdGUgPT0gaXJhdGUgLSAxIHx8IHJhdGUgPT0gaXJhdGUgKyAxKSB7Ci0gICAgcmF0ZSA9IGlyYXRlOwotICB9Ci0gIGdzdF9vc3NfaGVscGVyX3JhdGVfYWRkX3JhdGUgKHByb2JlLT5yYXRlcywgcmF0ZSk7Ci0gIHJldHVybiByYXRlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19oZWxwZXJfcmF0ZV9hZGRfcmF0ZSAoR0FycmF5ICogYXJyYXksIGludCByYXRlKQotewotICBpbnQgaTsKLSAgaW50IHZhbDsKLQotICBmb3IgKGkgPSAwOyBpIDwgYXJyYXktPmxlbjsgaSsrKSB7Ci0gICAgdmFsID0gZ19hcnJheV9pbmRleCAoYXJyYXksIGludCwgaSk7Ci0KLSAgICBpZiAodmFsID09IHJhdGUpCi0gICAgICByZXR1cm47Ci0gIH0KLSAgR1NUX0RFQlVHICgic3VwcG9ydGVkIHJhdGU6ICVkIiwgcmF0ZSk7Ci0gIGdfYXJyYXlfYXBwZW5kX3ZhbCAoYXJyYXksIHJhdGUpOwotfQotCi1zdGF0aWMgaW50Ci1nc3Rfb3NzX2hlbHBlcl9yYXRlX2ludF9jb21wYXJlIChnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKLXsKLSAgY29uc3QgaW50ICp2YSA9IChjb25zdCBpbnQgKikgYTsKLSAgY29uc3QgaW50ICp2YiA9IChjb25zdCBpbnQgKikgYjsKLQotICBpZiAoKnZhIDwgKnZiKQotICAgIHJldHVybiAtMTsKLSAgaWYgKCp2YSA+ICp2YikKLSAgICByZXR1cm4gMTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWdjaGFyICoKLWdzdF9vc3NfaGVscGVyX2dldF9jYXJkX25hbWUgKGNvbnN0IGdjaGFyICogbWl4ZXJfbmFtZSkKLXsKLSNpZmRlZiBTT1VORF9NSVhFUl9JTkZPCi0gIHN0cnVjdCBtaXhlcl9pbmZvIG1pbmZvOwotI2VuZGlmCi0gIGdpbnQgZmQ7Ci0gIGdjaGFyICpuYW1lID0gTlVMTDsKLQotICBHU1RfSU5GTyAoIk9wZW5pbmcgbWl4ZXIgZm9yIGRldmljZSAlcyIsIG1peGVyX25hbWUpOwotICBmZCA9IG9wZW4gKG1peGVyX25hbWUsIE9fUkRXUik7Ci0gIGlmIChmZCA9PSAtMSkKLSAgICBnb3RvIG9wZW5fZmFpbGVkOwotCi0gIC8qIGdldCBuYW1lLCBub3QgZmF0YWwgKi8KLSNpZmRlZiBTT1VORF9NSVhFUl9JTkZPCi0gIGlmIChpb2N0bCAoZmQsIFNPVU5EX01JWEVSX0lORk8sICZtaW5mbykgPT0gMCkgewotICAgIG5hbWUgPSBnX3N0cmR1cCAobWluZm8ubmFtZSk7Ci0gICAgR1NUX0lORk8gKCJDYXJkIG5hbWUgPSAlcyIsIEdTVF9TVFJfTlVMTCAobmFtZSkpOwotICB9IGVsc2UKLSNlbmRpZgotICB7Ci0gICAgbmFtZSA9IGdfc3RyZHVwICgiVW5rbm93biIpOwotICAgIEdTVF9JTkZPICgiVW5rbm93biBjYXJkIG5hbWUiKTsKLSAgfQotCi0gIGNsb3NlIChmZCk7Ci0gIHJldHVybiBuYW1lOwotCi0gIC8qIEVSUk9SUyAqLwotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICAvKiB0aGlzIGlzIHZhbGlkLiBPU1MgZGV2aWNlcyBkb24ndCBuZWVkIHRvIGV4cG9zZSBhIG1peGVyICovCi0gICAgR1NUX0RFQlVHICgiRmFpbGVkIHRvIG9wZW4gbWl4ZXIgZGV2aWNlICVzLCBtaXhpbmcgZGlzYWJsZWQ6ICVzIiwKLSAgICAgICAgbWl4ZXJfbmFtZSwgc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3N5cy9vc3MvZ3N0b3NzaGVscGVyLmggYi9zeXMvb3NzL2dzdG9zc2hlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWY5OTE0Li4wMDAwMDAwCi0tLSBhL3N5cy9vc3MvZ3N0b3NzaGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIEVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+Ci0gKiAgICAgICAgICAgICAgICAgICAgMjAwMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAY2hlbGxvLmJlPgotICoKLSAqIGdzdG9zc2hlbHBlci5oOiBPU1MgaGVscGVyIHJvdXRpbmVzLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9PU1NfSEVMUEVSX0hfXwotI2RlZmluZSBfX0dTVF9PU1NfSEVMUEVSX0hfXwotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlICJnc3Rvc3NoZWxwZXIuaCIKLQotCi1HX0JFR0lOX0RFQ0xTCi0KLQotR3N0Q2FwcyogZ3N0X29zc19oZWxwZXJfcHJvYmVfY2FwcyAoZ2ludCBmZCk7Ci0KLWdjaGFyICpnc3Rfb3NzX2hlbHBlcl9nZXRfY2FyZF9uYW1lIChjb25zdCBnY2hhciAqIG1peGVyX25hbWUpOwotCi0KLQotR19FTkRfREVDTFMKLQotCi0jZW5kaWYgLyogX19HU1RfT1NTX0hFTFBFUl9IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy9vc3MvZ3N0b3Nzc2luay5jIGIvc3lzL29zcy9nc3Rvc3NzaW5rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNmI4YzUuLjAwMDAwMDAKLS0tIGEvc3lzL29zcy9nc3Rvc3NzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAyMDAwLDIwMDUgV2ltIFRheW1hbnMgPHdpbUBmbHVlbmRvLmNvbT4KLSAqCi0gKiBnc3Rvc3NzaW5rLmM6IAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW9zc3NpbmsKLSAqCi0gKiBUaGlzIGVsZW1lbnQgbGV0cyB5b3Ugb3V0cHV0IHNvdW5kIHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbSAoT1NTKS4KLSAqCi0gKiBOb3RlIHRoYXQgeW91IHNob3VsZCBhbG1vc3QgYWx3YXlzIHVzZSBnZW5lcmljIGF1ZGlvIGNvbnZlcnNpb24gZWxlbWVudHMKLSAqIGxpa2UgYXVkaW9jb252ZXJ0IGFuZCBhdWRpb3Jlc2FtcGxlIGluIGZyb250IG9mIGFuIGF1ZGlvc2luayB0byBtYWtlIHN1cmUKLSAqIHlvdXIgcGlwZWxpbmUgd29ya3MgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMgKHRob3NlIGNvbnZlcnNpb24gZWxlbWVudHMgd2lsbAotICogYWN0IGluIHBhc3N0aHJvdWdoLW1vZGUgaWYgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgdm9sdW1lIHZvbHVtZT0wLjEgISBvc3NzaW5rCi0gKiBdfCB3aWxsIG91dHB1dCBhIHNpbmUgd2F2ZSAoY29udGludW91cyBiZWVwIHNvdW5kKSB0byB5b3VyIHNvdW5kIGNhcmQgKHdpdGgKLSAqIGEgdmVyeSBsb3cgdm9sdW1lIGFzIHByZWNhdXRpb24pLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249bXVzaWMub2dnICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zc3NpbmsKLSAqIF18IHdpbGwgcGxheSBhbiBPZ2cvVm9yYmlzIGF1ZGlvIGZpbGUgYW5kIG91dHB1dCBpdCB1c2luZyB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0uCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZmRlZiBIQVZFX09TU19JTkNMVURFX0lOX1NZUwotIyBpbmNsdWRlIDxzeXMvc291bmRjYXJkLmg+Ci0jZWxzZQotIyBpZmRlZiBIQVZFX09TU19JTkNMVURFX0lOX1JPT1QKLSMgIGluY2x1ZGUgPHNvdW5kY2FyZC5oPgotIyBlbHNlCi0jICBpZmRlZiBIQVZFX09TU19JTkNMVURFX0lOX01BQ0hJTkUKLSMgICBpbmNsdWRlIDxtYWNoaW5lL3NvdW5kY2FyZC5oPgotIyAgZWxzZQotIyAgIGVycm9yICJXaGF0IHRvIGluY2x1ZGU/IgotIyAgZW5kaWYgLyogSEFWRV9PU1NfSU5DTFVERV9JTl9NQUNISU5FICovCi0jIGVuZGlmIC8qIEhBVkVfT1NTX0lOQ0xVREVfSU5fUk9PVCAqLwotI2VuZGlmIC8qIEhBVkVfT1NTX0lOQ0xVREVfSU5fU1lTICovCi0KLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJnc3Rvc3NzaW5rLmgiCi0KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKG9zc19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3NfZGVidWcKLQotc3RhdGljIHZvaWQgZ3N0X29zc19zaW5rX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X29zc19zaW5rX2ZpbmFsaXNlIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X29zc19zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9vc3Nfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3Rfb3NzX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0Q2FwcyAqIGZpbHRlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzX3Npbmtfb3BlbiAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3Nfc2lua19jbG9zZSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3Nfc2lua19wcmVwYXJlIChHc3RBdWRpb1NpbmsgKiBhc2luaywKLSAgICBHc3RBdWRpb1JpbmdCdWZmZXJTcGVjICogc3BlYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X29zc19zaW5rX3VucHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdpbnQgZ3N0X29zc19zaW5rX3dyaXRlIChHc3RBdWRpb1NpbmsgKiBhc2luaywgZ3BvaW50ZXIgZGF0YSwKLSAgICBndWludCBsZW5ndGgpOwotc3RhdGljIGd1aW50IGdzdF9vc3Nfc2lua19kZWxheSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIHZvaWQgZ3N0X29zc19zaW5rX3Jlc2V0IChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci0KLS8qIE9zc1Npbmsgc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBMQVNUX1NJR05BTAotfTsKLQotI2RlZmluZSBERUZBVUxUX0RFVklDRSAgIi9kZXYvZHNwIgotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfREVWSUNFLAotfTsKLQotI2RlZmluZSBGT1JNQVRTICJ7IiBHU1RfQVVESU9fTkUoUzE2KSIsIkdTVF9BVURJT19ORShVMTYpIiwgUzgsIFU4IH0iCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBvc3NzaW5rX3NpbmtfZmFjdG9yeSA9Ci0gICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUUyAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMTsgIgotICAgICAgICAiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUUyAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMiwgIiAiY2hhbm5lbC1tYXNrID0gKGJpdG1hc2spIDB4MyIpCi0gICAgKTsKLQotLyogc3RhdGljIGd1aW50IGdzdF9vc3Nfc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OyAqLwotCi0jZGVmaW5lIGdzdF9vc3Nfc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RPc3NTaW5rLCBnc3Rfb3NzX3NpbmssIEdTVF9UWVBFX0FVRElPX1NJTkspOwotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19zaW5rX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE9zc1NpbmsgKm9zc3NpbmsgPSBHU1RfT1NTU0lOSyAob2JqZWN0KTsKLQotICBpZiAob3Nzc2luay0+cHJvYmVkX2NhcHMpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAob3Nzc2luay0+cHJvYmVkX2NhcHMpOwotICAgIG9zc3NpbmstPnByb2JlZF9jYXBzID0gTlVMTDsKLSAgfQotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kaXNwb3NlIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19zaW5rX2NsYXNzX2luaXQgKEdzdE9zc1NpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqZ3N0YmFzZXNpbmtfY2xhc3M7Ci0gIEdzdEF1ZGlvU2lua0NsYXNzICpnc3RhdWRpb3NpbmtfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc2lua19jbGFzcyA9IChHc3RCYXNlU2lua0NsYXNzICopIGtsYXNzOwotICBnc3RhdWRpb3NpbmtfY2xhc3MgPSAoR3N0QXVkaW9TaW5rQ2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9vc3Nfc2lua19kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF9vc3Nfc2lua19maW5hbGlzZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29zc19zaW5rX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X29zc19zaW5rX3NldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFVklDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJkZXZpY2UiLCAiRGV2aWNlIiwKLSAgICAgICAgICAiT1NTIGRldmljZSAodXN1YWxseSAvZGV2L2RzcE4pIiwgREVGQVVMVF9ERVZJQ0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmdldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3Nfc2lua19nZXRjYXBzKTsKLQotICBnc3RhdWRpb3NpbmtfY2xhc3MtPm9wZW4gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zc19zaW5rX29wZW4pOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPmNsb3NlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3Nfc2lua19jbG9zZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+cHJlcGFyZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzX3NpbmtfcHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+dW5wcmVwYXJlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3Nfc2lua191bnByZXBhcmUpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPndyaXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3Nfc2lua193cml0ZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+ZGVsYXkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zc19zaW5rX2RlbGF5KTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5yZXNldCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzX3NpbmtfcmVzZXQpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsICJBdWRpbyBTaW5rIChPU1MpIiwKLSAgICAgICJTaW5rL0F1ZGlvIiwKLSAgICAgICJPdXRwdXQgdG8gYSBzb3VuZCBjYXJkIHZpYSBPU1MiLAotICAgICAgIkVyaWsgV2FsdGhpbnNlbiA8b21lZ2FAY3NlLm9naS5lZHU+LCAiCi0gICAgICAiV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGNoZWxsby5iZT4iKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywKLSAgICAgICZvc3NzaW5rX3NpbmtfZmFjdG9yeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzX3NpbmtfaW5pdCAoR3N0T3NzU2luayAqIG9zc3NpbmspCi17Ci0gIGNvbnN0IGdjaGFyICpkZXZpY2U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3Nzc2luaywgImluaXRpYWxpemluZyBvc3NzaW5rIik7Ci0KLSAgZGV2aWNlID0gZ19nZXRlbnYgKCJBVURJT0RFViIpOwotICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgZGV2aWNlID0gREVGQVVMVF9ERVZJQ0U7Ci0gIG9zc3NpbmstPmRldmljZSA9IGdfc3RyZHVwIChkZXZpY2UpOwotICBvc3NzaW5rLT5mZCA9IC0xOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19zaW5rX2ZpbmFsaXNlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RPc3NTaW5rICpvc3NzaW5rID0gR1NUX09TU1NJTksgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChvc3NzaW5rLT5kZXZpY2UpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAoKEdPYmplY3QgKikgKG9iamVjdCkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RPc3NTaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfT1NTU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgZ19mcmVlIChzaW5rLT5kZXZpY2UpOwotICAgICAgc2luay0+ZGV2aWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBpZiAoc2luay0+cHJvYmVkX2NhcHMpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHNpbmstPnByb2JlZF9jYXBzKTsKLSAgICAgICAgc2luay0+cHJvYmVkX2NhcHMgPSBOVUxMOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RPc3NTaW5rICpzaW5rOwotCi0gIHNpbmsgPSBHU1RfT1NTU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc2luay0+ZGV2aWNlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X29zc19zaW5rX2dldGNhcHMgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdE9zc1NpbmsgKm9zc3Npbms7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgb3Nzc2luayA9IEdTVF9PU1NTSU5LIChic2luayk7Ci0KLSAgaWYgKG9zc3NpbmstPmZkID09IC0xKSB7Ci0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfQkFTRV9TSU5LX1BBRCAoYnNpbmspKTsKLSAgfSBlbHNlIGlmIChvc3NzaW5rLT5wcm9iZWRfY2FwcykgewotICAgIGNhcHMgPSBnc3RfY2Fwc19yZWYgKG9zc3NpbmstPnByb2JlZF9jYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBjYXBzID0gZ3N0X29zc19oZWxwZXJfcHJvYmVfY2FwcyAob3Nzc2luay0+ZmQpOwotICAgIGlmIChjYXBzICYmICFnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAgIG9zc3NpbmstPnByb2JlZF9jYXBzID0gZ3N0X2NhcHNfcmVmIChjYXBzKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZmlsdGVyICYmIGNhcHMpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uOwotICB9IGVsc2UgewotICAgIHJldHVybiBjYXBzOwotICB9Ci19Ci0KLXN0YXRpYyBnaW50Ci1pbG9nMiAoZ2ludCB4KQotewotICAvKiB3ZWxsLi4uIGhhY2tlcidzIGRlbGlnaHQgZXhwbGFpbnMuLi4gKi8KLSAgeCA9IHggfCAoeCA+PiAxKTsKLSAgeCA9IHggfCAoeCA+PiAyKTsKLSAgeCA9IHggfCAoeCA+PiA0KTsKLSAgeCA9IHggfCAoeCA+PiA4KTsKLSAgeCA9IHggfCAoeCA+PiAxNik7Ci0gIHggPSB4IC0gKCh4ID4+IDEpICYgMHg1NTU1NTU1NSk7Ci0gIHggPSAoeCAmIDB4MzMzMzMzMzMpICsgKCh4ID4+IDIpICYgMHgzMzMzMzMzMyk7Ci0gIHggPSAoeCArICh4ID4+IDQpKSAmIDB4MGYwZjBmMGY7Ci0gIHggPSB4ICsgKHggPj4gOCk7Ci0gIHggPSB4ICsgKHggPj4gMTYpOwotICByZXR1cm4gKHggJiAweDAwMDAwMDNmKSAtIDE7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3Rfb3NzX3NpbmtfZ2V0X2Zvcm1hdCAoR3N0QXVkaW9SaW5nQnVmZmVyRm9ybWF0VHlwZSBmbXQsIEdzdEF1ZGlvRm9ybWF0IHJmbXQpCi17Ci0gIGdpbnQgcmVzdWx0OwotCi0gIHN3aXRjaCAoZm10KSB7Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVVfTEFXOgotICAgICAgcmVzdWx0ID0gQUZNVF9NVV9MQVc7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9BX0xBVzoKLSAgICAgIHJlc3VsdCA9IEFGTVRfQV9MQVc7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9JTUFfQURQQ006Ci0gICAgICByZXN1bHQgPSBBRk1UX0lNQV9BRFBDTTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX01QRUc6Ci0gICAgICByZXN1bHQgPSBBRk1UX01QRUc7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVc6Ci0gICAgewotICAgICAgc3dpdGNoIChyZm10KSB7Ci0gICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9VODoKLSAgICAgICAgICByZXN1bHQgPSBBRk1UX1U4OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzE2TEU6Ci0gICAgICAgICAgcmVzdWx0ID0gQUZNVF9TMTZfTEU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTZCRToKLSAgICAgICAgICByZXN1bHQgPSBBRk1UX1MxNl9CRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1M4OgotICAgICAgICAgIHJlc3VsdCA9IEFGTVRfUzg7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9VMTZMRToKLSAgICAgICAgICByZXN1bHQgPSBBRk1UX1UxNl9MRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1UxNkJFOgotICAgICAgICAgIHJlc3VsdCA9IEFGTVRfVTE2X0JFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3Nfc2lua19vcGVuIChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgR3N0T3NzU2luayAqb3NzOwotICBpbnQgbW9kZTsKLQotICBvc3MgPSBHU1RfT1NTU0lOSyAoYXNpbmspOwotCi0gIG1vZGUgPSBPX1dST05MWTsKLSAgbW9kZSB8PSBPX05PTkJMT0NLOwotCi0gIG9zcy0+ZmQgPSBvcGVuIChvc3MtPmRldmljZSwgbW9kZSwgMCk7Ci0gIGlmIChvc3MtPmZkID09IC0xKSB7Ci0gICAgc3dpdGNoIChlcnJubykgewotICAgICAgY2FzZSBFQlVTWToKLSAgICAgICAgZ290byBidXN5OwotICAgICAgY2FzZSBFQUNDRVM6Ci0gICAgICAgIGdvdG8gbm9fcGVybWlzc2lvbjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdvdG8gb3Blbl9mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1idXN5OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIEJVU1ksCi0gICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiAiCi0gICAgICAgICAgICAgICAgIkRldmljZSBpcyBiZWluZyB1c2VkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24uIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fcGVybWlzc2lvbjoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBPUEVOX1dSSVRFLAotICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gIgotICAgICAgICAgICAgICAgICJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gdGhlIGRldmljZS4iKSksCi0gICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotb3Blbl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob3NzLCBSRVNPVVJDRSwgT1BFTl9XUklURSwKLSAgICAgICAgKF8oIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIikpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3NzX3NpbmtfY2xvc2UgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBjbG9zZSAoR1NUX09TU1NJTksgKGFzaW5rKS0+ZmQpOwotICBHU1RfT1NTU0lOSyAoYXNpbmspLT5mZCA9IC0xOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3NzX3NpbmtfcHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmssIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBHc3RPc3NTaW5rICpvc3M7Ci0gIHN0cnVjdCBhdWRpb19idWZfaW5mbyBpbmZvOwotICBpbnQgbW9kZTsKLSAgaW50IHRtcDsKLSAgZ3VpbnQgd2lkdGgsIHJhdGUsIGNoYW5uZWxzOwotCi0gIG9zcyA9IEdTVF9PU1NTSU5LIChhc2luayk7Ci0KLSAgLyogd2Ugb3BlbmVkIG5vbi1ibG9ja2luZyBzbyB0aGF0IHdlIGNhbiBkZXRlY3QgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUKLSAgICogd2l0aG91dCBoYW5naW5nIGZvcmV2ZXIuIFdlIG5vdyB3YW50IHRvIHJlbW92ZSB0aGUgbm9uLWJsb2NraW5nIGZsYWcuICovCi0gIG1vZGUgPSBmY250bCAob3NzLT5mZCwgRl9HRVRGTCk7Ci0gIG1vZGUgJj0gfk9fTk9OQkxPQ0s7Ci0gIGlmIChmY250bCAob3NzLT5mZCwgRl9TRVRGTCwgbW9kZSkgPT0gLTEpIHsKLSAgICAvKiBzb21lIGRyaXZlcnMgZG8gbm8gc3VwcG9ydCB1bnNldHRpbmcgdGhlIG5vbi1ibG9ja2luZyBmbGFnLCB0cnkgdG8KLSAgICAgKiBjbG9zZS9vcGVuIHRoZSBkZXZpY2UgdGhlbi4gVGhpcyBpcyByYWN5IGJ1dCB3ZSBlcnJvciBvdXQgcHJvcGVybHkuICovCi0gICAgZ3N0X29zc19zaW5rX2Nsb3NlIChhc2luayk7Ci0gICAgaWYgKChvc3MtPmZkID0gb3BlbiAob3NzLT5kZXZpY2UsIE9fV1JPTkxZLCAwKSkgPT0gLTEpCi0gICAgICBnb3RvIG5vbl9ibG9jazsKLSAgfQotCi0gIHRtcCA9IGdzdF9vc3Nfc2lua19nZXRfZm9ybWF0IChzcGVjLT50eXBlLAotICAgICAgR1NUX0FVRElPX0lORk9fRk9STUFUICgmc3BlYy0+aW5mbykpOwotICBpZiAodG1wID09IDApCi0gICAgZ290byB3cm9uZ19mb3JtYXQ7Ci0KLSAgd2lkdGggPSBHU1RfQVVESU9fSU5GT19XSURUSCAoJnNwZWMtPmluZm8pOwotICByYXRlID0gR1NUX0FVRElPX0lORk9fUkFURSAoJnNwZWMtPmluZm8pOwotICBjaGFubmVscyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTICgmc3BlYy0+aW5mbyk7Ci0KLSAgaWYgKHdpZHRoICE9IDE2ICYmIHdpZHRoICE9IDgpCi0gICAgZ290byBkb2RneV93aWR0aDsKLQotICBTRVRfUEFSQU0gKG9zcywgU05EQ1RMX0RTUF9TRVRGTVQsIHRtcCwgIlNFVEZNVCIpOwotICBpZiAoY2hhbm5lbHMgPT0gMikKLSAgICBTRVRfUEFSQU0gKG9zcywgU05EQ1RMX0RTUF9TVEVSRU8sIDEsICJTVEVSRU8iKTsKLSAgU0VUX1BBUkFNIChvc3MsIFNORENUTF9EU1BfQ0hBTk5FTFMsIGNoYW5uZWxzLCAiQ0hBTk5FTFMiKTsKLSAgU0VUX1BBUkFNIChvc3MsIFNORENUTF9EU1BfU1BFRUQsIHJhdGUsICJTUEVFRCIpOwotCi0gIHRtcCA9IGlsb2cyIChzcGVjLT5zZWdzaXplKTsKLSAgdG1wID0gKChzcGVjLT5zZWd0b3RhbCAmIDB4N2ZmZikgPDwgMTYpIHwgdG1wOwotICBHU1RfREVCVUdfT0JKRUNUIChvc3MsICJzZXQgc2Vnc2l6ZTogJWQsIHNlZ3RvdGFsOiAlZCwgdmFsdWU6ICUwOHgiLAotICAgICAgc3BlYy0+c2Vnc2l6ZSwgc3BlYy0+c2VndG90YWwsIHRtcCk7Ci0KLSAgU0VUX1BBUkFNIChvc3MsIFNORENUTF9EU1BfU0VURlJBR01FTlQsIHRtcCwgIlNFVEZSQUdNRU5UIik7Ci0gIEdFVF9QQVJBTSAob3NzLCBTTkRDVExfRFNQX0dFVE9TUEFDRSwgJmluZm8sICJHRVRPU1BBQ0UiKTsKLQotICBzcGVjLT5zZWdzaXplID0gaW5mby5mcmFnc2l6ZTsKLSAgc3BlYy0+c2VndG90YWwgPSBpbmZvLmZyYWdzdG90YWw7Ci0KLSAgb3NzLT5ieXRlc19wZXJfc2FtcGxlID0gR1NUX0FVRElPX0lORk9fQlBGICgmc3BlYy0+aW5mbyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3NzLCAiZ290IHNlZ3NpemU6ICVkLCBzZWd0b3RhbDogJWQsIHZhbHVlOiAlMDh4IiwKLSAgICAgIHNwZWMtPnNlZ3NpemUsIHNwZWMtPnNlZ3RvdGFsLCB0bXApOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9uX2Jsb2NrOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiVW5hYmxlIHRvIHNldCBkZXZpY2UgJXMgaW4gbm9uIGJsb2NraW5nIG1vZGU6ICVzIiwKLSAgICAgICAgICAgIG9zcy0+ZGV2aWNlLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXdyb25nX2Zvcm1hdDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIlVuYWJsZSB0byBnZXQgZm9ybWF0ICglZCwgJWQpIiwgc3BlYy0+dHlwZSwKLSAgICAgICAgICAgIEdTVF9BVURJT19JTkZPX0ZPUk1BVCAoJnNwZWMtPmluZm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1kb2RneV93aWR0aDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoInVuZXhwZWN0ZWQgd2lkdGggJWQiLCB3aWR0aCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3Nfc2lua191bnByZXBhcmUgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICAvKiBjb3VsZCBkbyBhIFNORENUTF9EU1BfUkVTRVQsIGJ1dCB0aGUgT1NTIG1hbnVhbCByZWNvbW1lbmRzIGEgY2xvc2Uvb3BlbiAqLwotCi0gIGlmICghZ3N0X29zc19zaW5rX2Nsb3NlIChhc2luaykpCi0gICAgZ290byBjb3VsZG50X2Nsb3NlOwotCi0gIGlmICghZ3N0X29zc19zaW5rX29wZW4gKGFzaW5rKSkKLSAgICBnb3RvIGNvdWxkbnRfcmVvcGVuOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotY291bGRudF9jbG9zZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFzaW5rLCAiQ291bGQgbm90IGNsb3NlIHRoZSBhdWRpbyBkZXZpY2UiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWNvdWxkbnRfcmVvcGVuOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXNpbmssICJDb3VsZCBub3QgcmVvcGVuIHRoZSBhdWRpbyBkZXZpY2UiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdpbnQKLWdzdF9vc3Nfc2lua193cml0ZSAoR3N0QXVkaW9TaW5rICogYXNpbmssIGdwb2ludGVyIGRhdGEsIGd1aW50IGxlbmd0aCkKLXsKLSAgcmV0dXJuIHdyaXRlIChHU1RfT1NTU0lOSyAoYXNpbmspLT5mZCwgZGF0YSwgbGVuZ3RoKTsKLX0KLQotc3RhdGljIGd1aW50Ci1nc3Rfb3NzX3NpbmtfZGVsYXkgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3RPc3NTaW5rICpvc3M7Ci0gIGdpbnQgZGVsYXkgPSAwOwotICBnaW50IHJldDsKLQotICBvc3MgPSBHU1RfT1NTU0lOSyAoYXNpbmspOwotCi0jaWZkZWYgU05EQ1RMX0RTUF9HRVRPREVMQVkKLSAgcmV0ID0gaW9jdGwgKG9zcy0+ZmQsIFNORENUTF9EU1BfR0VUT0RFTEFZLCAmZGVsYXkpOwotI2Vsc2UKLSAgcmV0ID0gLTE7Ci0jZW5kaWYKLSAgaWYgKHJldCA8IDApIHsKLSAgICBhdWRpb19idWZfaW5mbyBpbmZvOwotCi0gICAgcmV0ID0gaW9jdGwgKG9zcy0+ZmQsIFNORENUTF9EU1BfR0VUT1NQQUNFLCAmaW5mbyk7Ci0KLSAgICBkZWxheSA9IChyZXQgPCAwID8gMCA6IChpbmZvLmZyYWdzdG90YWwgKiBpbmZvLmZyYWdzaXplKSAtIGluZm8uYnl0ZXMpOwotICB9Ci0gIHJldHVybiBkZWxheSAvIG9zcy0+Ynl0ZXNfcGVyX3NhbXBsZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3Nfc2lua19yZXNldCAoR3N0QXVkaW9TaW5rICogYXNpbmspCi17Ci0gIC8qIFRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gaGVyZSByZWFsbHk6IE9TUyBjYW4ndCBoYW5kbGUgYWNjZXNzIHRvIHRoZQotICAgKiBzYW1lIGRldmljZS9mZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYW5kIG1pZ2h0IGRlYWRsb2NrIG9yIGJsb3cgdXAgaW4KLSAgICogb3RoZXIgd2F5cyBpZiB3ZSB0cnkgYW4gaW9jdGwgU05EQ1RMX0RTUF9SRVNFVCBvciBzaW1pbGFyICovCi19CmRpZmYgLS1naXQgYS9zeXMvb3NzL2dzdG9zc3NpbmsuaCBiL3N5cy9vc3MvZ3N0b3Nzc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTc0ZGYxLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3MvZ3N0b3Nzc2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdG9zc3NpbmsuaDogCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX09TU1NJTktfSF9fCi0jZGVmaW5lIF9fR1NUX09TU1NJTktfSF9fCi0KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9zaW5rLmg+Ci0KLSNpbmNsdWRlICJnc3Rvc3NoZWxwZXIuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09TU1NJTksgICAgICAgICAgICAoZ3N0X29zc19zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9PU1NTSU5LKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfT1NTU0lOSyxHc3RPc3NTaW5rKSkKLSNkZWZpbmUgR1NUX09TU1NJTktfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX09TU1NJTkssR3N0T3NzU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX09TU1NJTksob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9PU1NTSU5LKSkKLSNkZWZpbmUgR1NUX0lTX09TU1NJTktfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX09TU1NJTkspKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0T3NzU2luayBHc3RPc3NTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zc1NpbmtDbGFzcyBHc3RPc3NTaW5rQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0T3NzU2luayB7Ci0gIEdzdEF1ZGlvU2luayAgICBzaW5rOwotCi0gIGdjaGFyICpkZXZpY2U7Ci0gIGdpbnQgICBmZDsKLSAgZ2ludCAgIGJ5dGVzX3Blcl9zYW1wbGU7Ci0KLSAgR3N0Q2FwcyAqcHJvYmVkX2NhcHM7Ci19OwotCi1zdHJ1Y3QgX0dzdE9zc1NpbmtDbGFzcyB7Ci0gIEdzdEF1ZGlvU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9vc3Nfc2lua19nZXRfdHlwZSh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX09TU1NJTktfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvb3NzL2dzdG9zc3NyYy5jIGIvc3lzL29zcy9nc3Rvc3NzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkyM2FkMi4uMDAwMDAwMAotLS0gYS9zeXMvb3NzL2dzdG9zc3NyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqICAgICAgICAgICAgICAgMjAwMCwyMDA1IFdpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Ci0gKgotICogZ3N0b3Nzc3JjLmM6IAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW9zc3NyYwotICoKLSAqIFRoaXMgZWxlbWVudCBsZXRzIHlvdSByZWNvcmQgc291bmQgdXNpbmcgdGhlIE9wZW4gU291bmQgU3lzdGVtIChPU1MpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgb3Nzc3JjICEgYXVkaW9jb252ZXJ0ICEgdm9yYmlzZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249bXltdXNpYy5vZ2cKLSAqIF18IHdpbGwgcmVjb3JkIHNvdW5kIGZyb20geW91ciBzb3VuZCBjYXJkIHVzaW5nIE9TUyBhbmQgZW5jb2RlIGl0IHRvIGFuCi0gKiBPZ2cvVm9yYmlzIGZpbGUgKHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91ciBtaXhlciBzZXR0aW5ncyBhcmUgcmlnaHQKLSAqIGFuZCB0aGUgcmlnaHQgaW5wdXRzIGVuYWJsZWQgZXRjLikKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgSEFWRV9PU1NfSU5DTFVERV9JTl9TWVMKLSMgaW5jbHVkZSA8c3lzL3NvdW5kY2FyZC5oPgotI2Vsc2UKLSMgaWZkZWYgSEFWRV9PU1NfSU5DTFVERV9JTl9ST09UCi0jICBpbmNsdWRlIDxzb3VuZGNhcmQuaD4KLSMgZWxzZQotIyAgaWZkZWYgSEFWRV9PU1NfSU5DTFVERV9JTl9NQUNISU5FCi0jICAgaW5jbHVkZSA8bWFjaGluZS9zb3VuZGNhcmQuaD4KLSMgIGVsc2UKLSMgICBlcnJvciAiV2hhdCB0byBpbmNsdWRlPyIKLSMgIGVuZGlmIC8qIEhBVkVfT1NTX0lOQ0xVREVfSU5fTUFDSElORSAqLwotIyBlbmRpZiAvKiBIQVZFX09TU19JTkNMVURFX0lOX1JPT1QgKi8KLSNlbmRpZiAvKiBIQVZFX09TU19JTkNMVURFX0lOX1NZUyAqLwotCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiZ3N0b3Nzc3JjLmgiCi0KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKG9zc19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3NfZGVidWcKLQotI2RlZmluZSBERUZBVUxUX0RFVklDRSAgICAgICAgICAiL2Rldi9kc3AiCi0jZGVmaW5lIERFRkFVTFRfREVWSUNFX05BTUUgICAgICIiCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0RFVklDRSwKLSAgUFJPUF9ERVZJQ0VfTkFNRSwKLX07Ci0KLSNkZWZpbmUgZ3N0X29zc19zcmNfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0T3NzU3JjLCBnc3Rfb3NzX3NyYywgR1NUX1RZUEVfQVVESU9fU1JDKTsKLQotc3RhdGljIHZvaWQgZ3N0X29zc19zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X29zc19zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZCBnc3Rfb3NzX3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyB2b2lkIGdzdF9vc3Nfc3JjX2ZpbmFsaXplIChHc3RPc3NTcmMgKiBvc3NzcmMpOwotCi1zdGF0aWMgR3N0Q2FwcyAqZ3N0X29zc19zcmNfZ2V0Y2FwcyAoR3N0QmFzZVNyYyAqIGJzcmMsIEdzdENhcHMgKiBmaWx0ZXIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X29zc19zcmNfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzX3NyY19jbG9zZSAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzX3NyY19wcmVwYXJlIChHc3RBdWRpb1NyYyAqIGFzcmMsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3Nfc3JjX3VucHJlcGFyZSAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLXN0YXRpYyBndWludCBnc3Rfb3NzX3NyY19yZWFkIChHc3RBdWRpb1NyYyAqIGFzcmMsIGdwb2ludGVyIGRhdGEsIGd1aW50IGxlbmd0aCwKLSAgICBHc3RDbG9ja1RpbWUgKiB0aW1lc3RhbXApOwotc3RhdGljIGd1aW50IGdzdF9vc3Nfc3JjX2RlbGF5IChHc3RBdWRpb1NyYyAqIGFzcmMpOwotc3RhdGljIHZvaWQgZ3N0X29zc19zcmNfcmVzZXQgKEdzdEF1ZGlvU3JjICogYXNyYyk7Ci0KLSNkZWZpbmUgRk9STUFUUyAieyIgR1NUX0FVRElPX05FKFMxNikiLCJHU1RfQVVESU9fTkUoVTE2KSIsIFM4LCBVOCB9IgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgb3Nzc3JjX3NyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEZPUk1BVFMgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDE7ICIKLSAgICAgICAgImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEZPUk1BVFMgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDIsICIgImNoYW5uZWwtbWFzayA9IChiaXRtYXNrKSAweDMiKQotICAgICk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzX3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3Nfc3JjX2NsYXNzX2luaXQgKEdzdE9zc1NyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU3JjQ2xhc3MgKmdzdGJhc2VzcmNfY2xhc3M7Ci0gIEdzdEF1ZGlvU3JjQ2xhc3MgKmdzdGF1ZGlvc3JjX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzID0gKEdzdEF1ZGlvU3JjQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9vc3Nfc3JjX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gKEdPYmplY3RGaW5hbGl6ZUZ1bmMpIGdzdF9vc3Nfc3JjX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3Rfb3NzX3NyY19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9vc3Nfc3JjX3NldF9wcm9wZXJ0eTsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5nZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzX3NyY19nZXRjYXBzKTsKLQotICBnc3RhdWRpb3NyY19jbGFzcy0+b3BlbiA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzX3NyY19vcGVuKTsKLSAgZ3N0YXVkaW9zcmNfY2xhc3MtPnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zc19zcmNfcHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT51bnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zc19zcmNfdW5wcmVwYXJlKTsKLSAgZ3N0YXVkaW9zcmNfY2xhc3MtPmNsb3NlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3Nfc3JjX2Nsb3NlKTsKLSAgZ3N0YXVkaW9zcmNfY2xhc3MtPnJlYWQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zc19zcmNfcmVhZCk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5kZWxheSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzX3NyY19kZWxheSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5yZXNldCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzX3NyY19yZXNldCk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERVZJQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlIiwgIkRldmljZSIsCi0gICAgICAgICAgIk9TUyBkZXZpY2UgKHVzdWFsbHkgL2Rldi9kc3BOKSIsIERFRkFVTFRfREVWSUNFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlLW5hbWUiLCAiRGV2aWNlIG5hbWUiLAotICAgICAgICAgICJIdW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoZSBzb3VuZCBkZXZpY2UiLCBERUZBVUxUX0RFVklDRV9OQU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiQXVkaW8gU291cmNlIChPU1MpIiwKLSAgICAgICJTb3VyY2UvQXVkaW8iLAotICAgICAgIkNhcHR1cmUgZnJvbSBhIHNvdW5kIGNhcmQgdmlhIE9TUyIsCi0gICAgICAiRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4sICIgIldpbSBUYXltYW5zIDx3aW1AZmx1ZW5kby5jb20+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAmb3Nzc3JjX3NyY19mYWN0b3J5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3Nfc3JjX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RPc3NTcmMgKnNyYzsKLQotICBzcmMgPSBHU1RfT1NTX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgZ19mcmVlIChzcmMtPmRldmljZSk7Ci0gICAgICBzcmMtPmRldmljZSA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zc19zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zc1NyYyAqc3JjOwotCi0gIHNyYyA9IEdTVF9PU1NfU1JDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPmRldmljZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVWSUNFX05BTUU6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBzcmMtPmRldmljZV9uYW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3Nfc3JjX2luaXQgKEdzdE9zc1NyYyAqIG9zc3NyYykKLXsKLSAgY29uc3QgZ2NoYXIgKmRldmljZTsKLQotICBHU1RfREVCVUcgKCJpbml0aWFsaXppbmcgb3Nzc3JjIik7Ci0KLSAgZGV2aWNlID0gZ19nZXRlbnYgKCJBVURJT0RFViIpOwotICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgZGV2aWNlID0gREVGQVVMVF9ERVZJQ0U7Ci0KLSAgb3Nzc3JjLT5mZCA9IC0xOwotICBvc3NzcmMtPmRldmljZSA9IGdfc3RyZHVwIChkZXZpY2UpOwotICBvc3NzcmMtPmRldmljZV9uYW1lID0gZ19zdHJkdXAgKERFRkFVTFRfREVWSUNFX05BTUUpOwotICBvc3NzcmMtPnByb2JlZF9jYXBzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3Nfc3JjX2ZpbmFsaXplIChHc3RPc3NTcmMgKiBvc3NzcmMpCi17Ci0gIGdfZnJlZSAob3Nzc3JjLT5kZXZpY2UpOwotICBnX2ZyZWUgKG9zc3NyYy0+ZGV2aWNlX25hbWUpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAoKEdPYmplY3QgKikgKG9zc3NyYykpOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfb3NzX3NyY19nZXRjYXBzIChHc3RCYXNlU3JjICogYnNyYywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0T3NzU3JjICpvc3NzcmM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgb3Nzc3JjID0gR1NUX09TU19TUkMgKGJzcmMpOwotCi0gIGlmIChvc3NzcmMtPmZkID09IC0xKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAob3Nzc3JjLCAiZGV2aWNlIG5vdCBvcGVuLCB1c2luZyB0ZW1wbGF0ZSBjYXBzIik7Ci0gICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGJhc2UgY2xhc3Mgd2lsbCBnZXQgdGVtcGxhdGUgY2FwcyBmb3IgdXMgKi8KLSAgfQotCi0gIGlmIChvc3NzcmMtPnByb2JlZF9jYXBzKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG9zc3NyYywgIlJldHVybmluZyBjYWNoZWQgY2FwcyIpOwotICAgIHJldHVybiBnc3RfY2Fwc19yZWYgKG9zc3NyYy0+cHJvYmVkX2NhcHMpOwotICB9Ci0KLSAgY2FwcyA9IGdzdF9vc3NfaGVscGVyX3Byb2JlX2NhcHMgKG9zc3NyYy0+ZmQpOwotCi0gIGlmIChjYXBzKSB7Ci0gICAgb3Nzc3JjLT5wcm9iZWRfY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKG9zc3NyYywgInJldHVybmluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBpZiAoZmlsdGVyICYmIGNhcHMpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uOwotICB9IGVsc2UgewotICAgIHJldHVybiBjYXBzOwotICB9Ci19Ci0KLXN0YXRpYyBnaW50Ci1pbG9nMiAoZ2ludCB4KQotewotICAvKiB3ZWxsLi4uIGhhY2tlcidzIGRlbGlnaHQgZXhwbGFpbnMuLi4gKi8KLSAgeCA9IHggfCAoeCA+PiAxKTsKLSAgeCA9IHggfCAoeCA+PiAyKTsKLSAgeCA9IHggfCAoeCA+PiA0KTsKLSAgeCA9IHggfCAoeCA+PiA4KTsKLSAgeCA9IHggfCAoeCA+PiAxNik7Ci0gIHggPSB4IC0gKCh4ID4+IDEpICYgMHg1NTU1NTU1NSk7Ci0gIHggPSAoeCAmIDB4MzMzMzMzMzMpICsgKCh4ID4+IDIpICYgMHgzMzMzMzMzMyk7Ci0gIHggPSAoeCArICh4ID4+IDQpKSAmIDB4MGYwZjBmMGY7Ci0gIHggPSB4ICsgKHggPj4gOCk7Ci0gIHggPSB4ICsgKHggPj4gMTYpOwotICByZXR1cm4gKHggJiAweDAwMDAwMDNmKSAtIDE7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3Rfb3NzX3NyY19nZXRfZm9ybWF0IChHc3RBdWRpb1JpbmdCdWZmZXJGb3JtYXRUeXBlIGZtdCwgR3N0QXVkaW9Gb3JtYXQgcmZtdCkKLXsKLSAgZ2ludCByZXN1bHQ7Ci0KLSAgc3dpdGNoIChmbXQpIHsKLSAgICBjYXNlIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9NVV9MQVc6Ci0gICAgICByZXN1bHQgPSBBRk1UX01VX0xBVzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0FfTEFXOgotICAgICAgcmVzdWx0ID0gQUZNVF9BX0xBVzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0lNQV9BRFBDTToKLSAgICAgIHJlc3VsdCA9IEFGTVRfSU1BX0FEUENNOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfTVBFRzoKLSAgICAgIHJlc3VsdCA9IEFGTVRfTVBFRzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX1JBVzoKLSAgICB7Ci0gICAgICBzd2l0Y2ggKHJmbXQpIHsKLSAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1U4OgotICAgICAgICAgIHJlc3VsdCA9IEFGTVRfVTg7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX0FVRElPX0ZPUk1BVF9TMTZMRToKLSAgICAgICAgICByZXN1bHQgPSBBRk1UX1MxNl9MRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1MxNkJFOgotICAgICAgICAgIHJlc3VsdCA9IEFGTVRfUzE2X0JFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfUzg6Ci0gICAgICAgICAgcmVzdWx0ID0gQUZNVF9TODsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfQVVESU9fRk9STUFUX1UxNkxFOgotICAgICAgICAgIHJlc3VsdCA9IEFGTVRfVTE2X0xFOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9BVURJT19GT1JNQVRfVTE2QkU6Ci0gICAgICAgICAgcmVzdWx0ID0gQUZNVF9VMTZfQkU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgcmVzdWx0ID0gMDsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zc19zcmNfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjKQotewotICBHc3RPc3NTcmMgKm9zczsKLSAgaW50IG1vZGU7Ci0KLSAgb3NzID0gR1NUX09TU19TUkMgKGFzcmMpOwotCi0gIG1vZGUgPSBPX1JET05MWTsKLSAgbW9kZSB8PSBPX05PTkJMT0NLOwotCi0gIG9zcy0+ZmQgPSBvcGVuIChvc3MtPmRldmljZSwgbW9kZSwgMCk7Ci0gIGlmIChvc3MtPmZkID09IC0xKSB7Ci0gICAgc3dpdGNoIChlcnJubykgewotICAgICAgY2FzZSBFQUNDRVM6Ci0gICAgICAgIGdvdG8gbm9fcGVybWlzc2lvbjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdvdG8gb3Blbl9mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgZ19mcmVlIChvc3MtPmRldmljZV9uYW1lKTsKLSAgb3NzLT5kZXZpY2VfbmFtZSA9IGdzdF9vc3NfaGVscGVyX2dldF9jYXJkX25hbWUgKCIvZGV2L21peGVyIik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLW5vX3Blcm1pc3Npb246Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob3NzLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciByZWNvcmRpbmcuICIKLSAgICAgICAgICAgICAgICAiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuIHRoZSBkZXZpY2UuIikpLAotICAgICAgICBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW9wZW5fZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgKF8oIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcmVjb3JkaW5nLiIpKSwKLSAgICAgICAgKCJVbmFibGUgdG8gb3BlbiBkZXZpY2UgJXMgZm9yIHJlY29yZGluZzogJXMiLAotICAgICAgICAgICAgb3NzLT5kZXZpY2UsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3Nfc3JjX2Nsb3NlIChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdE9zc1NyYyAqb3NzOwotCi0gIG9zcyA9IEdTVF9PU1NfU1JDIChhc3JjKTsKLQotICBjbG9zZSAob3NzLT5mZCk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJm9zcy0+cHJvYmVkX2NhcHMsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3Nfc3JjX3ByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYywgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIEdzdE9zc1NyYyAqb3NzOwotICBzdHJ1Y3QgYXVkaW9fYnVmX2luZm8gaW5mbzsKLSAgaW50IG1vZGU7Ci0gIGludCBmbXQsIHRtcDsKLSAgZ3VpbnQgd2lkdGgsIHJhdGUsIGNoYW5uZWxzOwotCi0gIG9zcyA9IEdTVF9PU1NfU1JDIChhc3JjKTsKLQotICBtb2RlID0gZmNudGwgKG9zcy0+ZmQsIEZfR0VURkwpOwotICBtb2RlICY9IH5PX05PTkJMT0NLOwotICBpZiAoZmNudGwgKG9zcy0+ZmQsIEZfU0VURkwsIG1vZGUpID09IC0xKQotICAgIGdvdG8gbm9uX2Jsb2NrOwotCi0gIGZtdCA9IGdzdF9vc3Nfc3JjX2dldF9mb3JtYXQgKHNwZWMtPnR5cGUsCi0gICAgICBHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZzcGVjLT5pbmZvKSk7Ci0gIGlmIChmbXQgPT0gMCkKLSAgICBnb3RvIHdyb25nX2Zvcm1hdDsKLQotICB3aWR0aCA9IEdTVF9BVURJT19JTkZPX1dJRFRIICgmc3BlYy0+aW5mbyk7Ci0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmc3BlYy0+aW5mbyk7Ci0gIGNoYW5uZWxzID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzcGVjLT5pbmZvKTsKLQotICBpZiAod2lkdGggIT0gMTYgJiYgd2lkdGggIT0gOCkKLSAgICBnb3RvIGRvZGd5X3dpZHRoOwotCi0gIHRtcCA9IGlsb2cyIChzcGVjLT5zZWdzaXplKTsKLSAgdG1wID0gKChzcGVjLT5zZWd0b3RhbCAmIDB4N2ZmZikgPDwgMTYpIHwgdG1wOwotICBHU1RfREVCVUdfT0JKRUNUIChvc3MsICJzZXQgc2Vnc2l6ZTogJWQsIHNlZ3RvdGFsOiAlZCwgdmFsdWU6ICUwOHgiLAotICAgICAgc3BlYy0+c2Vnc2l6ZSwgc3BlYy0+c2VndG90YWwsIHRtcCk7Ci0KLSAgU0VUX1BBUkFNIChvc3MsIFNORENUTF9EU1BfU0VURlJBR01FTlQsIHRtcCwgIlNFVEZSQUdNRU5UIik7Ci0KLSAgU0VUX1BBUkFNIChvc3MsIFNORENUTF9EU1BfUkVTRVQsIDAsICJSRVNFVCIpOwotCi0gIFNFVF9QQVJBTSAob3NzLCBTTkRDVExfRFNQX1NFVEZNVCwgZm10LCAiU0VURk1UIik7Ci0gIGlmIChjaGFubmVscyA9PSAyKQotICAgIFNFVF9QQVJBTSAob3NzLCBTTkRDVExfRFNQX1NURVJFTywgMSwgIlNURVJFTyIpOwotICBTRVRfUEFSQU0gKG9zcywgU05EQ1RMX0RTUF9DSEFOTkVMUywgY2hhbm5lbHMsICJDSEFOTkVMUyIpOwotICBTRVRfUEFSQU0gKG9zcywgU05EQ1RMX0RTUF9TUEVFRCwgcmF0ZSwgIlNQRUVEIik7Ci0KLSAgR0VUX1BBUkFNIChvc3MsIFNORENUTF9EU1BfR0VUSVNQQUNFLCAmaW5mbywgIkdFVElTUEFDRSIpOwotCi0gIHNwZWMtPnNlZ3NpemUgPSBpbmZvLmZyYWdzaXplOwotICBzcGVjLT5zZWd0b3RhbCA9IGluZm8uZnJhZ3N0b3RhbDsKLQotICBvc3MtPmJ5dGVzX3Blcl9zYW1wbGUgPSBHU1RfQVVESU9fSU5GT19CUEYgKCZzcGVjLT5pbmZvKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvc3MsICJnb3Qgc2Vnc2l6ZTogJWQsIHNlZ3RvdGFsOiAlZCwgdmFsdWU6ICUwOHgiLAotICAgICAgc3BlYy0+c2Vnc2l6ZSwgc3BlYy0+c2VndG90YWwsIHRtcCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLW5vbl9ibG9jazoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICgiVW5hYmxlIHRvIHNldCBkZXZpY2UgJXMgaW4gbm9uIGJsb2NraW5nIG1vZGU6ICVzIiwKLSAgICAgICAgICAgIG9zcy0+ZGV2aWNlLCBnX3N0cmVycm9yIChlcnJubykpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotd3JvbmdfZm9ybWF0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgKCJVbmFibGUgdG8gZ2V0IGZvcm1hdCAoJWQsICVkKSIsIHNwZWMtPnR5cGUsCi0gICAgICAgICAgICBHU1RfQVVESU9fSU5GT19GT1JNQVQgKCZzcGVjLT5pbmZvKSksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1kb2RneV93aWR0aDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICgiVW5leHBlY3RlZCB3aWR0aCAlZCIsIHdpZHRoKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3NzX3NyY191bnByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYykKLXsKLSAgLyogY291bGQgZG8gYSBTTkRDVExfRFNQX1JFU0VULCBidXQgdGhlIE9TUyBtYW51YWwgcmVjb21tZW5kcyBhIGNsb3NlL29wZW4gKi8KLQotICBpZiAoIWdzdF9vc3Nfc3JjX2Nsb3NlIChhc3JjKSkKLSAgICBnb3RvIGNvdWxkbnRfY2xvc2U7Ci0KLSAgaWYgKCFnc3Rfb3NzX3NyY19vcGVuIChhc3JjKSkKLSAgICBnb3RvIGNvdWxkbnRfcmVvcGVuOwotCi0gIHJldHVybiBUUlVFOwotCi1jb3VsZG50X2Nsb3NlOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYXNyYywgIkNvdWxkIG5vdCBjbG9zZSB0aGUgYXVkaW8gZGV2aWNlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1jb3VsZG50X3Jlb3BlbjoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFzcmMsICJDb3VsZCBub3QgcmVvcGVuIHRoZSBhdWRpbyBkZXZpY2UiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50Ci1nc3Rfb3NzX3NyY19yZWFkIChHc3RBdWRpb1NyYyAqIGFzcmMsIGdwb2ludGVyIGRhdGEsIGd1aW50IGxlbmd0aCwKLSAgICBHc3RDbG9ja1RpbWUgKiB0aW1lc3RhbXApCi17Ci0gIHJldHVybiByZWFkIChHU1RfT1NTX1NSQyAoYXNyYyktPmZkLCBkYXRhLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9vc3Nfc3JjX2RlbGF5IChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdE9zc1NyYyAqb3NzOwotICBnaW50IGRlbGF5ID0gMDsKLSAgZ2ludCByZXQ7Ci0KLSAgb3NzID0gR1NUX09TU19TUkMgKGFzcmMpOwotCi0jaWZkZWYgU05EQ1RMX0RTUF9HRVRPREVMQVkKLSAgcmV0ID0gaW9jdGwgKG9zcy0+ZmQsIFNORENUTF9EU1BfR0VUT0RFTEFZLCAmZGVsYXkpOwotI2Vsc2UKLSAgcmV0ID0gLTE7Ci0jZW5kaWYKLSAgaWYgKHJldCA8IDApIHsKLSAgICBhdWRpb19idWZfaW5mbyBpbmZvOwotCi0gICAgcmV0ID0gaW9jdGwgKG9zcy0+ZmQsIFNORENUTF9EU1BfR0VUT1NQQUNFLCAmaW5mbyk7Ci0KLSAgICBkZWxheSA9IChyZXQgPCAwID8gMCA6IChpbmZvLmZyYWdzdG90YWwgKiBpbmZvLmZyYWdzaXplKSAtIGluZm8uYnl0ZXMpOwotICB9Ci0gIHJldHVybiBkZWxheSAvIG9zcy0+Ynl0ZXNfcGVyX3NhbXBsZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3Nfc3JjX3Jlc2V0IChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIC8qIFRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gaGVyZSByZWFsbHk6IE9TUyBjYW4ndCBoYW5kbGUgYWNjZXNzIHRvIHRoZQotICAgKiBzYW1lIGRldmljZS9mZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYW5kIG1pZ2h0IGRlYWRsb2NrIG9yIGJsb3cgdXAgaW4KLSAgICogb3RoZXIgd2F5cyBpZiB3ZSB0cnkgYW4gaW9jdGwgU05EQ1RMX0RTUF9SRVNFVCBvciBzaW1pbGFyICovCi19CmRpZmYgLS1naXQgYS9zeXMvb3NzL2dzdG9zc3NyYy5oIGIvc3lzL29zcy9nc3Rvc3NzcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg5OTVmYi4uMDAwMDAwMAotLS0gYS9zeXMvb3NzL2dzdG9zc3NyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBFcmlrIFdhbHRoaW5zZW4gPG9tZWdhQGNzZS5vZ2kuZWR1PgotICogICAgICAgICAgICAgICAgICAgIDIwMDAgV2ltIFRheW1hbnMgPHd0YXlAY2hlbGxvLmJlPgotICoKLSAqIGdzdG9zc3NyYy5oOiAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfT1NTX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfT1NTX1NSQ19IX18KLQotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb3NyYy5oPgotCi0jaW5jbHVkZSAiZ3N0b3NzaGVscGVyLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9PU1NfU1JDICAgICAgICAgICAoZ3N0X29zc19zcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX09TU19TUkMob2JqKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX09TU19TUkMsR3N0T3NzU3JjKSkKLSNkZWZpbmUgR1NUX09TU19TUkNfQ0xBU1Moa2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfT1NTX1NSQyxHc3RPc3NTcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19PU1NfU1JDKG9iaikgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9PU1NfU1JDKSkKLSNkZWZpbmUgR1NUX0lTX09TU19TUkNfQ0xBU1Moa2xhcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfT1NTX1NSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3NTcmMgR3N0T3NzU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zc1NyY0NsYXNzIEdzdE9zc1NyY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdE9zc1NyYyB7Ci0gIEdzdEF1ZGlvU3JjICAgIHNyYzsKLQotICBnaW50IGZkOwotICBnaW50ICAgICAgICAgICBieXRlc19wZXJfc2FtcGxlOwotCi0gIGdjaGFyICpkZXZpY2U7Ci0gIGdjaGFyICpkZXZpY2VfbmFtZTsKLQotICBHc3RDYXBzICAgICAgICpwcm9iZWRfY2FwczsKLX07Ci0KLXN0cnVjdCBfR3N0T3NzU3JjQ2xhc3MgewotICBHc3RBdWRpb1NyY0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9vc3Nfc3JjX2dldF90eXBlKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfT1NTX1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy9vc3M0L01ha2VmaWxlLmFtIGIvc3lzL29zczQvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMjQ3NWEuLjAwMDAwMDAKLS0tIGEvc3lzL29zczQvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rvc3M0YXVkaW8ubGEKLQotbGliZ3N0b3NzNGF1ZGlvX2xhX1NPVVJDRVMgPSBcCi0Jb3NzNC1hdWRpby5jICAgICAgICAgIFwKLQlvc3M0LXByb3BlcnR5LXByb2JlLmMgXAotCW9zczQtc2luay5jICAgICAgICAgICBcCi0Jb3NzNC1zb3VyY2UuYwotCi1saWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotbGliZ3N0b3NzNGF1ZGlvX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCS1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9MSUJTKQotbGliZ3N0b3NzNGF1ZGlvX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgCi1saWJnc3Rvc3M0YXVkaW9fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBcCi0Jb3NzNC1hdWRpby5oICAgICAgICAgIFwKLQlvc3M0LXByb3BlcnR5LXByb2JlLmggXAotCW9zczQtc2luay5oICAgICAgICAgICBcCi0Jb3NzNC1zb3VuZGNhcmQuaCAgICAgIFwKLQlvc3M0LXNvdXJjZS5oCi0KZGlmZiAtLWdpdCBhL3N5cy9vc3M0L01ha2VmaWxlLmluIGIvc3lzL29zczQvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiMzZjYWMuLjAwMDAwMDAKLS0tIGEvc3lzL29zczQvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5NTEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gc3lzL29zczQKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3Rvc3M0YXVkaW9fbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdG9zczRhdWRpb19sYV9PQkpFQ1RTID0gbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtYXVkaW8ubG8gXAotCWxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXByb3BlcnR5LXByb2JlLmxvIFwKLQlsaWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1zaW5rLmxvIFwKLQlsaWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1zb3VyY2UubG8KLWxpYmdzdG9zczRhdWRpb19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rvc3M0YXVkaW9fbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdG9zczRhdWRpb19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdG9zczRhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3Rvc3M0YXVkaW9fbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0b3NzNGF1ZGlvX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdG9zczRhdWRpb19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rvc3M0YXVkaW8ubGEKLWxpYmdzdG9zczRhdWRpb19sYV9TT1VSQ0VTID0gXAotCW9zczQtYXVkaW8uYyAgICAgICAgICBcCi0Jb3NzNC1wcm9wZXJ0eS1wcm9iZS5jIFwKLQlvc3M0LXNpbmsuYyAgICAgICAgICAgXAotCW9zczQtc291cmNlLmMKLQotbGliZ3N0b3NzNGF1ZGlvX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdG9zczRhdWRpb19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQktbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfTElCUykKLQotbGliZ3N0b3NzNGF1ZGlvX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgCi1saWJnc3Rvc3M0YXVkaW9fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gXAotCW9zczQtYXVkaW8uaCAgICAgICAgICBcCi0Jb3NzNC1wcm9wZXJ0eS1wcm9iZS5oIFwKLQlvc3M0LXNpbmsuaCAgICAgICAgICAgXAotCW9zczQtc291bmRjYXJkLmggICAgICBcCi0Jb3NzNC1zb3VyY2UuaAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBzeXMvb3NzNC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBzeXMvb3NzNC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdG9zczRhdWRpby5sYTogJChsaWJnc3Rvc3M0YXVkaW9fbGFfT0JKRUNUUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdG9zczRhdWRpb19sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGliZ3N0b3NzNGF1ZGlvX2xhX0xJTkspIC1ycGF0aCAkKHBsdWdpbmRpcikgJChsaWJnc3Rvc3M0YXVkaW9fbGFfT0JKRUNUUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfTElCQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1hdWRpby5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXByb3BlcnR5LXByb2JlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNvdXJjZS5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtYXVkaW8ubG86IG9zczQtYXVkaW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG9zczRhdWRpb19sYS1vc3M0LWF1ZGlvLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1hdWRpby5UcG8gLWMgLW8gbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtYXVkaW8ubG8gYHRlc3QgLWYgJ29zczQtYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgb3NzNC1hdWRpby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1hdWRpby5UcG8gJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LWF1ZGlvLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J29zczQtYXVkaW8uYycgb2JqZWN0PSdsaWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1hdWRpby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtYXVkaW8ubG8gYHRlc3QgLWYgJ29zczQtYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgb3NzNC1hdWRpby5jCi0KLWxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXByb3BlcnR5LXByb2JlLmxvOiBvc3M0LXByb3BlcnR5LXByb2JlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3M0YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3NzNGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1wcm9wZXJ0eS1wcm9iZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtcHJvcGVydHktcHJvYmUuVHBvIC1jIC1vIGxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXByb3BlcnR5LXByb2JlLmxvIGB0ZXN0IC1mICdvc3M0LXByb3BlcnR5LXByb2JlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG9zczQtcHJvcGVydHktcHJvYmUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtcHJvcGVydHktcHJvYmUuVHBvICQoREVQRElSKS9saWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1wcm9wZXJ0eS1wcm9iZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdvc3M0LXByb3BlcnR5LXByb2JlLmMnIG9iamVjdD0nbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtcHJvcGVydHktcHJvYmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3M0YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3NzNGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXByb3BlcnR5LXByb2JlLmxvIGB0ZXN0IC1mICdvc3M0LXByb3BlcnR5LXByb2JlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG9zczQtcHJvcGVydHktcHJvYmUuYwotCi1saWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1zaW5rLmxvOiBvc3M0LXNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNpbmsuVHBvIC1jIC1vIGxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNpbmsubG8gYHRlc3QgLWYgJ29zczQtc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bvc3M0LXNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtc2luay5UcG8gJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nb3NzNC1zaW5rLmMnIG9iamVjdD0nbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtc2luay5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtc2luay5sbyBgdGVzdCAtZiAnb3NzNC1zaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG9zczQtc2luay5jCi0KLWxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNvdXJjZS5sbzogb3NzNC1zb3VyY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNvdXJjZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtc291cmNlLlRwbyAtYyAtbyBsaWJnc3Rvc3M0YXVkaW9fbGEtb3NzNC1zb3VyY2UubG8gYHRlc3QgLWYgJ29zczQtc291cmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYG9zczQtc291cmNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNvdXJjZS5UcG8gJChERVBESVIpL2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNvdXJjZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdvc3M0LXNvdXJjZS5jJyBvYmplY3Q9J2xpYmdzdG9zczRhdWRpb19sYS1vc3M0LXNvdXJjZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zczRhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3M0YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3NzNGF1ZGlvX2xhLW9zczQtc291cmNlLmxvIGB0ZXN0IC1mICdvc3M0LXNvdXJjZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bvc3M0LXNvdXJjZS5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3N5cy9vc3M0L29zczQtYXVkaW8uYyBiL3N5cy9vc3M0L29zczQtYXVkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg5NjA4MS4uMDAwMDAwMAotLS0gYS9zeXMvb3NzNC9vc3M0LWF1ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3ODEgKzAsMCBAQAotLyogR1N0cmVhbWVyIE9TUzQgYXVkaW8gcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotI2luY2x1ZGUgIm9zczQtYXVkaW8uaCIKLSNpbmNsdWRlICJvc3M0LXByb3BlcnR5LXByb2JlLmgiCi0jaW5jbHVkZSAib3NzNC1zaW5rLmgiCi0jaW5jbHVkZSAib3NzNC1zb3VyY2UuaCIKLSNpbmNsdWRlICJvc3M0LXNvdW5kY2FyZC5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKG9zczRtaXhlcl9kZWJ1Zyk7Ci1HU1RfREVCVUdfQ0FURUdPUlkgKG9zczRzaW5rX2RlYnVnKTsKLUdTVF9ERUJVR19DQVRFR09SWSAob3NzNHNyY19kZWJ1Zyk7Ci1HU1RfREVCVUdfQ0FURUdPUlkgKG9zczRfZGVidWcpOwotCi0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3M0X2RlYnVnCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IEdzdEF1ZGlvUmluZ0J1ZmZlckZvcm1hdFR5cGUgZ3N0X3JiZm10OwotICBjb25zdCBHc3RBdWRpb0Zvcm1hdCBnc3RfcmZtdDsKLSAgY29uc3QgZ2ludCBvc3NfZm10OwotICBjb25zdCBnY2hhciBuYW1lWzE2XTsKLX0gR3N0T3NzNEF1ZGlvRm9ybWF0OwotCi0vKiAqSU5ERU5ULU9GRiogKi8KLXN0YXRpYyBjb25zdCBHc3RPc3M0QXVkaW9Gb3JtYXQgZm10X21hcFtdID0gewotICAvKiBub3RlOiBrZWVwIHNvcnRlZCBieSBwcmVmZXJlbmNlLCBwcmVmZXJlZCBmb3JtYXRzIGZpcnN0ICovCi0gIHsKLSAgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX01VX0xBVywgMCwKLSAgICAgIEFGTVRfTVVfTEFXLCAiYXVkaW8veC1tdWxhdyJ9LCB7Ci0gIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9BX0xBVywgMCwKLSAgICAgIEFGTVRfQV9MQVcsICJhdWRpby94LWFsYXcifSwgewotICBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfUkFXLCBHU1RfQVVESU9fRk9STUFUX1MzMkxFLAotICAgICAgQUZNVF9TMzJfTEUsICJhdWRpby94LXJhdyJ9LCB7Ci0gIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVcsIEdTVF9BVURJT19GT1JNQVRfUzMyQkUsCi0gICAgICBBRk1UX1MzMl9CRSwgImF1ZGlvL3gtcmF3In0sIHsKLSAgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX1JBVywgR1NUX0FVRElPX0ZPUk1BVF9TMjRfMzJMRSwKLSAgICAgIEFGTVRfUzI0X0xFLCAiYXVkaW8veC1yYXcifSwgewotICBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfUkFXLCBHU1RfQVVESU9fRk9STUFUX1MyNF8zMkJFLAotICAgICAgQUZNVF9TMjRfQkUsICJhdWRpby94LXJhdyJ9LCB7Ci0gIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVcsIEdTVF9BVURJT19GT1JNQVRfUzI0TEUsCi0gICAgICBBRk1UX1MyNF9QQUNLRUQsICJhdWRpby94LXJhdyJ9LCB7Ci0gIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVcsIEdTVF9BVURJT19GT1JNQVRfUzE2TEUsCi0gICAgICBBRk1UX1MxNl9MRSwgImF1ZGlvL3gtcmF3In0sIHsKLSAgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX1JBVywgR1NUX0FVRElPX0ZPUk1BVF9TMTZCRSwKLSAgICAgIEFGTVRfUzE2X0JFLCAiYXVkaW8veC1yYXcifSwgewotICBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfUkFXLCBHU1RfQVVESU9fRk9STUFUX1UxNkxFLAotICAgICAgQUZNVF9VMTZfTEUsICJhdWRpby94LXJhdyJ9LCB7Ci0gIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVcsIEdTVF9BVURJT19GT1JNQVRfVTE2QkUsCi0gICAgICBBRk1UX1UxNl9CRSwgImF1ZGlvL3gtcmF3In0sIHsKLSAgR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX1JBVywgR1NUX0FVRElPX0ZPUk1BVF9TOCwKLSAgICAgIEFGTVRfUzgsICJhdWRpby94LXJhdyJ9LCB7Ci0gIEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVcsIEdTVF9BVURJT19GT1JNQVRfVTgsCi0gICAgICBBRk1UX1U4LCAiYXVkaW8veC1yYXcifQotfTsKLS8qICpJTkRFTlQtT04qICovCi0KLS8qIGZvcm1hdHMgd2UgYXNzdW1lIHRoZSBPU1M0IGxheWVyIGNhbiBhbHdheXMgaGFuZGxlIGFuZCBjb252ZXJ0IGludGVybmFsbHkgKi8KLSNkZWZpbmUgQ09OVkVSVElCTEVfRk9STUFUUyAoICAgXAotICAgIEFGTVRfTVVfTEFXIHwgQUZNVF9BX0xBVyB8ICBcCi0gICAgQUZNVF9TMzJfTEUgfCBBRk1UX1MzMl9CRSB8IFwKLSAgICBBRk1UX1MyNF9MRSB8IEFGTVRfUzI0X0JFIHwgXAotICAgIEFGTVRfUzI0X1BBQ0tFRCB8ICAgICAgICAgICBcCi0gICAgQUZNVF9TMTZfTEUgfCBBRk1UX1MxNl9CRSB8IFwKLSAgICBBRk1UX1UxNl9MRSB8IEFGTVRfVTE2X0JFIHwgXAotICAgIEFGTVRfUzggfCBBRk1UX1U4ICkKLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X2FwcGVuZF9mb3JtYXRfdG9fY2FwcyAoY29uc3QgR3N0T3NzNEF1ZGlvRm9ybWF0ICogZm10LCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoZm10LT5uYW1lKTsKLSAgaWYgKGZtdC0+Z3N0X3JiZm10ID09IEdTVF9BVURJT19SSU5HX0JVRkZFUl9GT1JNQVRfVFlQRV9SQVcpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgIGdzdF9hdWRpb19mb3JtYXRfdG9fc3RyaW5nIChmbXQtPmdzdF9yZm10KSwKLSAgICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJpbnRlcmxlYXZlZCIsIE5VTEwpOwotICB9Ci0gIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMsIHMpOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X29zczRfYXVkaW9fZ2V0X29zc19mb3JtYXQgKEdzdEF1ZGlvUmluZ0J1ZmZlckZvcm1hdFR5cGUgZm10LAotICAgIEdzdEF1ZGlvRm9ybWF0IHJmbXQpCi17Ci0gIGd1aW50IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZm10X21hcCk7ICsraSkgewotICAgIGlmIChmbXRfbWFwW2ldLmdzdF9yYmZtdCA9PSBmbXQgJiYgZm10X21hcFtpXS5nc3RfcmZtdCA9PSByZm10KQotICAgICAgcmV0dXJuIGZtdF9tYXBbaV0ub3NzX2ZtdDsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyogVGhlc2UgYXJlIHByZXR0eSByYW5kb20gKi8KLSNkZWZpbmUgR1NUX09TUzRfTUlOX1NBTVBMRV9SQVRFIDEKLSNkZWZpbmUgR1NUX09TUzRfTUFYX1NBTVBMRV9SQVRFIDE5MjAwMAotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3M0X2F1ZGlvX2RldGVjdF9yYXRlcyAoR3N0T2JqZWN0ICogb2JqLCBvc3NfYXVkaW9pbmZvICogYWksCi0gICAgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0gIGludCBtaW5yYXRlLCBtYXhyYXRlLCBpOwotCi0gIG1pbnJhdGUgPSBhaS0+bWluX3JhdGU7Ci0gIG1heHJhdGUgPSBhaS0+bWF4X3JhdGU7Ci0KLSAgLyogc2FuaXR5IGNoZWNrICovCi0gIGlmIChtaW5yYXRlID4gbWF4cmF0ZSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqLCAibWluX3JhdGUgJWQgPiBtYXhfcmF0ZSAlZCAoYnVnZ3kgZHJpdmVyPykiLAotICAgICAgICBtaW5yYXRlLCBtYXhyYXRlKTsKLSAgICBtYXhyYXRlID0gYWktPm1pbl9yYXRlOyAgICAgLyogc3dhcCAqLwotICAgIG1pbnJhdGUgPSBhaS0+bWF4X3JhdGU7Ci0gIH0KLQotICAvKiBsaW1pdCB0byBzb21ldGhpbmcgc2Vuc2libGUgKi8KLSAgaWYgKG1pbnJhdGUgPCBHU1RfT1NTNF9NSU5fU0FNUExFX1JBVEUpCi0gICAgbWlucmF0ZSA9IEdTVF9PU1M0X01JTl9TQU1QTEVfUkFURTsKLSAgaWYgKG1heHJhdGUgPiBHU1RfT1NTNF9NQVhfU0FNUExFX1JBVEUpCi0gICAgbWF4cmF0ZSA9IEdTVF9PU1M0X01BWF9TQU1QTEVfUkFURTsKLQotICBpZiAobWF4cmF0ZSA8IEdTVF9PU1M0X01JTl9TQU1QTEVfUkFURSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqLCAibWF4X3JhdGUgPCAlZCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UiLAotICAgICAgICBHU1RfT1NTNF9NSU5fU0FNUExFX1JBVEUpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChvYmosICJtaW5fcmF0ZSAlZCwgbWF4X3JhdGUgJWQgKG9yaWdpbmFsbHk6ICVkLCAlZCkiLAotICAgICAgbWlucmF0ZSwgbWF4cmF0ZSwgYWktPm1pbl9yYXRlLCBhaS0+bWF4X3JhdGUpOwotCi0gIGlmICgoYWktPmNhcHMgJiBQQ01fQ0FQX0ZSRUVSQVRFKSkgewotICAgIEdTVF9MT0dfT0JKRUNUIChvYmosICJkZXZpY2Ugc3VwcG9ydHMgYW55IHNhbXBsZSByYXRlIGJldHdlZW4gbWluIGFuZCBtYXgiKTsKLSAgICBpZiAobWlucmF0ZSA9PSBtYXhyYXRlKSB7Ci0gICAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9JTlQpOwotICAgICAgZ192YWx1ZV9zZXRfaW50ICgmdmFsLCBtYXhyYXRlKTsKLSAgICB9IGVsc2UgewotICAgICAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9JTlRfUkFOR0UpOwotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2UgKCZ2YWwsIG1pbnJhdGUsIG1heHJhdGUpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfTE9HX09CSkVDVCAob2JqLCAiJWQgc2FtcGxlIHJhdGVzOiIsIGFpLT5ucmF0ZXMpOwotICAgIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfTElTVCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGFpLT5ucmF0ZXM7ICsraSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgIiByYXRlOiAlZCIsIGFpLT5yYXRlc1tpXSk7Ci0KLSAgICAgIGlmIChhaS0+cmF0ZXNbaV0gPj0gbWlucmF0ZSAmJiBhaS0+cmF0ZXNbaV0gPD0gbWF4cmF0ZSkgewotICAgICAgICBHVmFsdWUgcmF0ZV92YWwgPSB7IDAsIH07Ci0KLSAgICAgICAgZ192YWx1ZV9pbml0ICgmcmF0ZV92YWwsIEdfVFlQRV9JTlQpOwotICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKCZyYXRlX3ZhbCwgYWktPnJhdGVzW2ldKTsKLSAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmdmFsLCAmcmF0ZV92YWwpOwotICAgICAgICBnX3ZhbHVlX3Vuc2V0ICgmcmF0ZV92YWwpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZSAoJnZhbCkgPT0gMCkgewotICAgICAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgKytpKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzLCAicmF0ZSIsICZ2YWwpOwotICB9Ci0KLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzNF9hdWRpb19nZXRfY2hhbm5lbF9sYXlvdXQgKEdzdE9iamVjdCAqIG9iaiwgZ3VpbnQ2NCBsYXlvdXQsCi0gICAgZ3VpbnQgbnVtX2NoYW5uZWxzLCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqIGNoX2xheW91dCkKLXsKLSAgY29uc3QgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zX21hcFsxNl0gPSB7Ci0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORSwgICAgLyogMCA9IGR1bm5vICAgICAgICAgICovCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCwgICAgICAvKiAxID0gbGVmdCAgICAgICAgICAgKi8KLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVCwgICAgIC8qIDIgPSByaWdodCAgICAgICAgICAqLwotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwgICAgLyogMyA9IGNlbnRlciAgICAgICAgICovCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMSwgICAgLyogNCA9IGxmZSAgICAgICAgICAgICovCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZULCAgICAgICAvKiA1ID0gbGVmdCBzdXJyb3VuZCAgKi8KLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9TSURFX1JJR0hULCAgICAgIC8qIDYgPSByaWdodCBzdXJyb3VuZCAqLwotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVCwgICAgICAgLyogNyA9IGxlZnQgcmVhciAgICAgICovCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVCwgICAgICAvKiA4ID0gcmlnaHQgcmVhciAgICAgKi8KLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FLAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORSwKLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FLAotICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUsCi0gICAgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORSwKLSAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FCi0gIH07Ci0gIGd1aW50IHNwZWFrZXJfcG9zOyAgICAgICAgICAgIC8qIHNwZWFrZXIgcG9zaXRpb24gYXMgZGVmaW5lZCBieSBPU1MgKi8KLSAgZ3VpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyArK2kpIHsKLSAgICAvKiBsYXlvdXQgY29udGFpbnMgdXAgdG8gMTYgc3BlYWtlciBwb3NpdGlvbnMsIHdpdGggZWFjaCB0YWtpbmcgdXAgNCBiaXRzICovCi0gICAgc3BlYWtlcl9wb3MgPSAoZ3VpbnQpICgobGF5b3V0ID4+IChpICogNCkpICYgMHgwZik7Ci0KLSAgICAvKiBpZiBpdCdzIGEgY2hhbm5lbCBwb3NpdGlvbiB0aGF0J3MgdW5rbm93biB0byB1cywgc2V0IGFsbCB0byBOT05FIGFuZAotICAgICAqIGJhaWwgb3V0ICovCi0gICAgaWYgKEdfVU5MSUtFTFkgKHBvc19tYXBbc3BlYWtlcl9wb3NdID09IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUpKQotICAgICAgZ290byBub19sYXlvdXQ7Ci0KLSAgICBjaF9sYXlvdXRbaV0gPSBwb3NfbWFwW3NwZWFrZXJfcG9zXTsKLSAgfQotCi0gIHJldHVybjsKLQotbm9fbGF5b3V0OgotICB7Ci0gICAgLyogb25seSB3YXJuIGlmIGl0J3MgcmVhbGx5IHVua25vd24sIHBvc2l0aW9uIDAgaXMgb2sgYW5kIHJlcHJlc2VudHMgTk9ORQotICAgICAqIChpbiB3aGljaCBjYXNlIHdlIGFsc28ganVzdCBzZXQgYWxsIG90aGVycyB0byBOT05FIGlnbm9yaW5nIHRoZSBvdGhlcgotICAgICAqIHBvc2l0aW9ucyBpbiB0aGUgT1NTLWdpdmVuIGxheW91dCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB3ZSBjdXJyZW50bHkKLSAgICAgKiByZXF1aXJlIGluIEdTdHJlYW1lcikgKi8KLSAgICBpZiAoc3BlYWtlcl9wb3MgIT0gMCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmosICJ1bmtub3duIE9TUyBjaGFubmVsIHBvc2l0aW9uICV4IiwgY2hfbGF5b3V0W2ldKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bV9jaGFubmVsczsgKytpKSB7Ci0gICAgICBjaF9sYXlvdXRbaV0gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X2F1ZGlvX3NldF9yaW5nYnVmZmVyX2NoYW5uZWxfbGF5b3V0IChHc3RPYmplY3QgKiBvYmosIGdpbnQgZmQsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIGd1aW50IG51bV9jaGFubmVsczsKLSAgZ3VpbnQ2NCBsYXlvdXQgPSAwOwotICBHc3RBdWRpb1JpbmdCdWZmZXIgKnJiOwotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaF9sYXlvdXRbOF0gPSB7IDAsIH07Ci0KLSAgbnVtX2NoYW5uZWxzID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzcGVjLT5pbmZvKTsKLSAgaWYgKG51bV9jaGFubmVscyA8IDMgfHwgbnVtX2NoYW5uZWxzID4gOCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKHNwZWMtPnR5cGUgIT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX1JBVykKLSAgICByZXR1cm47Ci0KLSAgaWYgKEdTVF9JU19PU1M0X1NJTksgKG9iaikpIHsKLSAgICByYiA9IEdTVF9BVURJT19CQVNFX1NJTksgKG9iaiktPnJpbmdidWZmZXI7Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX09TUzRfU09VUkNFIChvYmopKSB7Ci0gICAgcmIgPSBHU1RfQVVESU9fQkFTRV9TUkMgKG9iaiktPnJpbmdidWZmZXI7Ci0gIH0gZWxzZQotICAgIGdfcmV0dXJuX2lmX3JlYWNoZWQgKCk7Ci0KLSAgLyogLTEgPSBnZXQgaW5mbyBmb3IgY3VycmVudGx5IG9wZW4gZGV2aWNlIChmZCkuIFRoaXMgd2lsbCBmYWlsIHdpdGgKLSAgICogT1NTIGJ1aWxkIDw9IDEwMTMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBPU1MgKi8KLSAgaWYgKGlvY3RsIChmZCwgU05EQ1RMX0RTUF9HRVRfQ0hOT1JERVIsICZsYXlvdXQpID09IC0xKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmosICJjb3VsZG4ndCBxdWVyeSBjaGFubmVsIGxheW91dCwgYXNzdW1pbmcgZGVmYXVsdCIpOwotICAgIGxheW91dCA9IENITk9SREVSX05PUk1BTDsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJjaGFubmVsIGxheW91dDogJTA4IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsIGxheW91dCk7Ci0KLQotICBnc3Rfb3NzNF9hdWRpb19nZXRfY2hhbm5lbF9sYXlvdXQgKG9iaiwgbGF5b3V0LCBudW1fY2hhbm5lbHMsIGNoX2xheW91dCk7Ci0gIGdzdF9hdWRpb19yaW5nX2J1ZmZlcl9zZXRfY2hhbm5lbF9wb3NpdGlvbnMgKHJiLCBjaF9sYXlvdXQpOwotCi0gIHJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X2F1ZGlvX2FkZF9jaGFubmVsX2xheW91dCAoR3N0T2JqZWN0ICogb2JqLCBndWludDY0IGxheW91dCwKLSAgICBndWludCBudW1fY2hhbm5lbHMsIEdzdFN0cnVjdHVyZSAqIHMpCi17Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGNoX2xheW91dFs4XSA9IHsgMCwgfTsKLSAgZ3VpbnQ2NCBtYXNrOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKG51bV9jaGFubmVscyA8PSBHX05fRUxFTUVOVFMgKGNoX2xheW91dCkpOwotCi0gIGdzdF9vc3M0X2F1ZGlvX2dldF9jaGFubmVsX2xheW91dCAob2JqLCBsYXlvdXQsIG51bV9jaGFubmVscywgY2hfbGF5b3V0KTsKLSAgaWYgKGdzdF9hdWRpb19jaGFubmVsX3Bvc2l0aW9uc190b19tYXNrIChjaF9sYXlvdXQsIG51bV9jaGFubmVscywgRkFMU0UsCi0gICAgICAgICAgJm1hc2spKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgbWFzaywgTlVMTCk7Ci0KLSAgcmV0dXJuOwotfQotCi0vKiBhcmJpdHJhcnkgbWF4LiBsaW1pdCAqLwotI2RlZmluZSBHU1RfT1NTNF9NSU5fQ0hBTk5FTFMgMQotI2RlZmluZSBHU1RfT1NTNF9NQVhfQ0hBTk5FTFMgNDA5NgotCi0vKiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGlucHV0IGNhcHMgKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9vc3M0X2F1ZGlvX2RldGVjdF9jaGFubmVscyAoR3N0T2JqZWN0ICogb2JqLCBpbnQgZmQsIG9zc19hdWRpb2luZm8gKiBhaSwKLSAgICBHc3RDYXBzICogaW5fY2FwcykKLXsKLSAgY29uc3QgZ2NoYXIgKmZvcmNlZF9sYXlvdXQ7Ci0gIEdzdFN0cnVjdHVyZSAqcyA9IE5VTEw7Ci0gIGd1aW50NjQgbGF5b3V0ID0gMDsKLSAgR3N0Q2FwcyAqY2hhbl9jYXBzID0gTlVMTDsKLSAgR3N0Q2FwcyAqb3V0X2NhcHMgPSBOVUxMOwotICBpbnQgbWluY2hhbnMsIG1heGNoYW5zOwotICBpbnQgYywgaSwgajsKLQotICAvKiBHU1RfT1NTNF9DSEFOTkVMX0xBWU9VVCBlbnZpcm9ubWVudCB2YXJpYWJsZTogbWF5IGJlIHVzZWQgdG8gZm9yY2UgYQotICAgKiBwYXJ0aWN1bGFyIGNoYW5uZWwgbGF5b3V0IChpZiBpdCBjb250YWlucyBhbiBvZGQgbnVtYmVyIG9mIGNoYW5uZWwKLSAgICogcG9zaXRpb25zIGl0IHdpbGwgYWxzbyBtYWtlIHVzIGFkdmVydGlzZSBhIGNoYW5uZWwgbGF5b3V0IGZvciB0aGF0Ci0gICAqIGNoYW5uZWwgY291bnQsIGV2ZW4gaWYgd2UnZCB1c3VhbGx5IHNraXAgaXQ7IHRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwKLSAgICogZm9yIGZvbGtzIHdpdGggMi4xIHNwZWFrZXJzLCBJIGd1ZXNzKSAqLwotICBmb3JjZWRfbGF5b3V0ID0gZ19nZXRlbnYgKCJHU1RfT1NTNF9DSEFOTkVMX0xBWU9VVCIpOwotCi0gIG1pbmNoYW5zID0gYWktPm1pbl9jaGFubmVsczsKLSAgbWF4Y2hhbnMgPSBhaS0+bWF4X2NoYW5uZWxzOwotCi0gIC8qIHNhbml0eSBjaGVjayAqLwotICBpZiAobWluY2hhbnMgPiBtYXhjaGFucykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqLCAibWluX2NoYW5zICVkID4gbWF4X2NoYW5zICVkIChidWdneSBkcml2ZXI/KSIsCi0gICAgICAgIG1pbmNoYW5zLCBtYXhjaGFucyk7Ci0gICAgbWF4Y2hhbnMgPSBhaS0+bWluX2NoYW5uZWxzOyAgICAgICAgLyogc3dhcCAqLwotICAgIG1pbmNoYW5zID0gYWktPm1heF9jaGFubmVsczsKLSAgfQotCi0gIC8qIGxpbWl0IHRvIHNvbWV0aGluZyBzZW5zaWJsZSAqLwotICBpZiAobWluY2hhbnMgPCBHU1RfT1NTNF9NSU5fQ0hBTk5FTFMpCi0gICAgbWluY2hhbnMgPSBHU1RfT1NTNF9NSU5fQ0hBTk5FTFM7Ci0gIGlmIChtYXhjaGFucyA+IEdTVF9PU1M0X01BWF9DSEFOTkVMUykKLSAgICBtYXhjaGFucyA9IEdTVF9PU1M0X01BWF9DSEFOTkVMUzsKLQotICBpZiAobWF4Y2hhbnMgPCBHU1RfT1NTNF9NSU5fQ0hBTk5FTFMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9iaiwgIm1heF9jaGFucyA8ICVkLCB3aGljaCBtYWtlcyBubyBzZW5zZSIsCi0gICAgICAgIEdTVF9PU1M0X01JTl9DSEFOTkVMUyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGluX2NhcHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgIm1pbl9jaGFubmVscyAlZCwgbWF4X2NoYW5uZWxzICVkIChvcmlnaW5hbGx5OiAlZCwgJWQpIiwKLSAgICAgIG1pbmNoYW5zLCBtYXhjaGFucywgYWktPm1pbl9jaGFubmVscywgYWktPm1heF9jaGFubmVscyk7Ci0KLSAgY2hhbl9jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIC8qIGZpcnN0IGRvIHRoZSBzaW1wbGUgY2FzZXM6IG1vbm8gKyBzdGVyZW8gKGNoYW5uZWwgbGF5b3V0IGltcGxpZWQpICovCi0gIGlmIChtaW5jaGFucyA9PSAxICYmIG1heGNoYW5zID09IDEpCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgieCIsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwotICBlbHNlIGlmIChtaW5jaGFucyA9PSAyICYmIG1heGNoYW5zID49IDIpCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgieCIsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDIsIE5VTEwpOwotICBlbHNlIGlmIChtaW5jaGFucyA9PSAxICYmIG1heGNoYW5zID49IDIpCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgieCIsICJjaGFubmVscyIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgMiwgTlVMTCk7Ci0gIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNoYW5fY2Fwcywgcyk7Ci0gIHMgPSBOVUxMOwotCi0gIC8qIFRPRE86IHdlIGFzc3VtZSBhbGwgZHJpdmVycyB1c2UgYSBsZWZ0L3JpZ2h0IGxheW91dCBmb3Igc3RlcmVvIGhlcmUgKi8KLSAgaWYgKG1heGNoYW5zIDw9IDIpCi0gICAgZ290byBkb25lOwotCi0gIGlmIChpb2N0bCAoZmQsIFNORENUTF9EU1BfR0VUX0NITk9SREVSLCAmbGF5b3V0KSA9PSAtMSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqLCAiY291bGRuJ3QgcXVlcnkgY2hhbm5lbCBsYXlvdXQsIGFzc3VtaW5nIGRlZmF1bHQiKTsKLSAgICBsYXlvdXQgPSBDSE5PUkRFUl9OT1JNQUw7Ci0gIH0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqLCAiY2hhbm5lbCBsYXlvdXQ6ICUwOCIgR19HSU5UNjRfTU9ESUZJRVIgIngiLCBsYXlvdXQpOwotCi0gIC8qIGUuZy4gZm9yY2VkIDIuMSBsYXlvdXQgd291bGQgYmUgR1NUX09TUzRfQ0hBTk5FTF9MQVlPVVQ9NDIxICovCi0gIGlmIChmb3JjZWRfbGF5b3V0ICE9IE5VTEwgJiYgKmZvcmNlZF9sYXlvdXQgIT0gJ1wwJykgewotICAgIGd1aW50IGxheW91dF9sZW47Ci0KLSAgICBsYXlvdXRfbGVuID0gc3RybGVuIChmb3JjZWRfbGF5b3V0KTsKLSAgICBpZiAobGF5b3V0X2xlbiA+PSBtaW5jaGFucyAmJiBsYXlvdXRfbGVuIDw9IG1heGNoYW5zKSB7Ci0gICAgICBsYXlvdXQgPSBnX2FzY2lpX3N0cnRvdWxsIChmb3JjZWRfbGF5b3V0LCBOVUxMLCAxNik7Ci0gICAgICBtYXhjaGFucyA9IGxheW91dF9sZW47Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJmb3JjZWQgY2hhbm5lbCBsYXlvdXQ6ICUwOCIgR19HSU5UNjRfTU9ESUZJRVIgIngiCi0gICAgICAgICAgIiAoJyVzJyksIG1heGNoYW5zIG5vdyAlZCIsIGxheW91dCwgZm9yY2VkX2xheW91dCwgbWF4Y2hhbnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9iaiwgImlnbm9yaW5nIGZvcmNlZCBjaGFubmVsIGxheW91dDogbGF5b3V0IGhhcyAlZCAiCi0gICAgICAgICAgImNoYW5uZWwgcG9zaXRpb25zIGJ1dCBtYXhjaGFucyBpcyAlZCIsIGxheW91dF9sZW4sIG1heGNoYW5zKTsKLSAgICB9Ci0gIH0KLQotICAvKiBuZWVkIHRvIGFkdmVydGlzZSBjaGFubmVsIGxheW91dHMgZm9yIGFueXRoaW5nID4yIGFuZCA8PTggY2hhbm5lbHMgKi8KLSAgZm9yIChjID0gTUFYICgzLCBtaW5jaGFucyk7IGMgPD0gTUlOIChtYXhjaGFucywgOCk7IGMrKykgewotICAgIC8qICJUaGUgbWluX2NoYW5uZWxzIGFuZCBtYXhfY2hhbm5lbHMgZmllbGRzIGRlZmluZSB0aGUgbGltaXRzIGZvciB0aGUKLSAgICAgKiBudW1iZXIgb2YgY2hhbm5lbHMuIEhvd2V2ZXIgc29tZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQgYWxsIGNoYW5uZWxzCi0gICAgICogd2l0aGluIHRoaXMgcmFuZ2UuIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgb2RkIHZhbHVlcyAoMywgNSwgNywgOSwgZXRjKS4KLSAgICAgKiBhcmUgbm90IHN1cHBvcnRlZC4gVGhlcmUgaXMgY3VycmVudGx5IG5vIHdheSB0byBjaGVjayBmb3IgdGhpcyBvdGhlcgotICAgICAqIHRoYW4gY2hlY2tpbmcgaWYgU05EQ1RMX0RTUF9DSEFOTkVMUyBhY2NlcHRzIHRoZSByZXF1ZXN0ZWQgdmFsdWUuCi0gICAgICogQW5vdGhlciBhcHByb2FjaCBpcyB0cnlpbmcgdG8gYXZvaWQgdXNpbmcgb2RkIG51bWJlciBvZiBjaGFubmVscy4iCi0gICAgICoKLSAgICAgKiBTbywgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSBpZiB0aGVzZSBvZGQgdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6Ci0gICAgICovCi0gICAgaWYgKChjID09IDMgfHwgYyA9PSA1IHx8IGMgPT0gNykgJiYgKGMgIT0gbWF4Y2hhbnMpKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAob2JqLCAibm90IGFkZGluZyBsYXlvdXQgd2l0aCAlZCBjaGFubmVscyIsIGMpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgieCIsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGMsIE5VTEwpOwotICAgIGdzdF9vc3M0X2F1ZGlvX2FkZF9jaGFubmVsX2xheW91dCAob2JqLCBsYXlvdXQsIGMsIHMpOwotICAgIEdTVF9MT0dfT0JKRUNUIChvYmosICJjPSV1LCBhcHBlbmRpbmcgc3RydWN0ICUiIEdTVF9QVFJfRk9STUFULCBjLCBzKTsKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjaGFuX2NhcHMsIHMpOwotICAgIHMgPSBOVUxMOwotICB9Ci0KLSAgaWYgKG1heGNoYW5zIDw9IDgpCi0gICAgZ290byBkb25lOwotCi0gIC8qIGZvciBldmVyeXRoaW5nID44IGNoYW5uZWxzLCBDSEFOTkVMX1BPU0lUSU9OX05PTkUgaXMgaW1wbGllZC4gKi8KLSAgaWYgKG1pbmNoYW5zID09IG1heGNoYW5zIHx8IG1heGNoYW5zID09IDkpIHsKLSAgICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ4IiwgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgbWF4Y2hhbnMsIE5VTEwpOwotICB9IGVsc2UgewotICAgIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoIngiLCAiY2hhbm5lbHMiLCBHU1RfVFlQRV9JTlRfUkFOR0UsCi0gICAgICAgIE1BWCAoOSwgbWluY2hhbnMpLCBtYXhjaGFucywgTlVMTCk7Ci0gIH0KLSAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoY2hhbl9jYXBzLCBzKTsKLSAgcyA9IE5VTEw7Ci0KLWRvbmU6Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgImNoYW5uZWwgc3RydWN0dXJlczogJSIgR1NUX1BUUl9GT1JNQVQsIGNoYW5fY2Fwcyk7Ci0KLSAgb3V0X2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgLyogY29tYmluZSBlYWNoIHN0cnVjdHVyZSBpbiB0aGUgaW5wdXQgY2FwcyB3aXRoIGVhY2ggY2hhbm5lbCBjYXBzIHN0cnVjdCAqLwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGluX2NhcHMpOyArK2kpIHsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKmluX3M7Ci0KLSAgICBpbl9zID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoaW5fY2FwcywgaSk7Ci0KLSAgICBmb3IgKGogPSAwOyBqIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGNoYW5fY2Fwcyk7ICsraikgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpjaGFuX3M7Ci0gICAgICBjb25zdCBHVmFsdWUgKnZhbDsKLQotICAgICAgcyA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoaW5fcyk7Ci0gICAgICBjaGFuX3MgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjaGFuX2NhcHMsIGopOwotICAgICAgaWYgKCh2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoY2hhbl9zLCAiY2hhbm5lbHMiKSkpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChzLCAiY2hhbm5lbHMiLCB2YWwpOwotICAgICAgaWYgKCh2YWwgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoY2hhbl9zLCAiY2hhbm5lbC1tYXNrIikpKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF92YWx1ZSAocywgImNoYW5uZWwtbWFzayIsIHZhbCk7Ci0KLSAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKG91dF9jYXBzLCBzKTsKLSAgICAgIHMgPSBOVUxMOwotICAgIH0KLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChpbl9jYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNoYW5fY2Fwcyk7Ci0gIHJldHVybiBvdXRfY2FwczsKLX0KLQotR3N0Q2FwcyAqCi1nc3Rfb3NzNF9hdWRpb19wcm9iZV9jYXBzIChHc3RPYmplY3QgKiBvYmosIGludCBmZCkKLXsKLSAgb3NzX2F1ZGlvaW5mbyBhaSA9IHsgMCwgfTsKLSAgZ2Jvb2xlYW4gb3V0cHV0OwotICBHc3RDYXBzICpjYXBzOwotICBpbnQgbm9ubmF0aXZlX2Zvcm1hdHMgPSAwOwotICBpbnQgZm9ybWF0cywgaTsKLQotICBvdXRwdXQgPSBHU1RfSVNfT1NTNF9TSU5LIChvYmopOwotCi0gIC8qIC0xID0gZ2V0IGluZm8gZm9yIGN1cnJlbnRseSBvcGVuIGRldmljZSAoZmQpLiBUaGlzIHdpbGwgZmFpbCB3aXRoCi0gICAqIE9TUyBidWlsZCA8PSAxMDEzIGJlY2F1c2Ugb2YgYSBidWcgaW4gT1NTICovCi0gIGFpLmRldiA9IC0xOwotICBpZiAoaW9jdGwgKGZkLCBTTkRDVExfRU5HSU5FSU5GTywgJmFpKSA9PSAtMSkKLSAgICBnb3RvIGVuZ2luZWluZm9fZmFpbGVkOwotCi0gIGZvcm1hdHMgPSAob3V0cHV0KSA/IGFpLm9mb3JtYXRzIDogYWkuaWZvcm1hdHM7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgIiVzIGZvcm1hdHMgOiAweCUwOHgiLCAob3V0cHV0KSA/ICJvdXQiIDogImluIiwgZm9ybWF0cyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICAvKiBmaXJzdCBsaXN0IGFsbCB0aGUgZm9ybWF0cyBuYXRpdmVseSBzdXBwb3J0ZWQgKi8KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZm10X21hcCk7ICsraSkgewotICAgIGlmICgoZm9ybWF0cyAmIGZtdF9tYXBbaV0ub3NzX2ZtdCkpIHsKLSAgICAgIGdzdF9vc3M0X2FwcGVuZF9mb3JtYXRfdG9fY2FwcyAoJmZtdF9tYXBbaV0sIGNhcHMpOwotICAgIH0gZWxzZSBpZiAoKGZtdF9tYXBbaV0ub3NzX2ZtdCAmIENPTlZFUlRJQkxFX0ZPUk1BVFMpKSB7Ci0gICAgICBub25uYXRpdmVfZm9ybWF0cyB8PSBmbXRfbWFwW2ldLm9zc19mbXQ7Ci0gICAgfQotICB9Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgImFkZGluZyBub24tbmF0aXZlICVzIGZvcm1hdHMgOiAweCUwOHgiLAotICAgICAgKG91dHB1dCkgPyAib3V0IiA6ICJpbiIsIG5vbm5hdGl2ZV9mb3JtYXRzKTsKLQotICAvKiBub3cgYXBwZW5kIG5vbi1uYXRpdmUgZm9ybWF0cyBmb3Igd2hpY2ggY29udmVyc2lvbiB3b3VsZCBiZSBuZWVkZWQgKi8KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZm10X21hcCk7ICsraSkgewotICAgIGlmICgobm9ubmF0aXZlX2Zvcm1hdHMgJiBmbXRfbWFwW2ldLm9zc19mbXQpKSB7Ci0gICAgICBnc3Rfb3NzNF9hcHBlbmRfZm9ybWF0X3RvX2NhcHMgKCZmbXRfbWFwW2ldLCBjYXBzKTsKLSAgICB9Ci0gIH0KLQotICBjYXBzID0gZ3N0X2NhcHNfc2ltcGxpZnkgKGNhcHMpOwotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiZm9ybWF0czogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIGlmICghZ3N0X29zczRfYXVkaW9fZGV0ZWN0X3JhdGVzIChvYmosICZhaSwgY2FwcykpCi0gICAgZ290byBkZXRlY3RfcmF0ZXNfZmFpbGVkOwotCi0gIGNhcHMgPSBnc3Rfb3NzNF9hdWRpb19kZXRlY3RfY2hhbm5lbHMgKG9iaiwgZmQsICZhaSwgY2Fwcyk7Ci0gIGlmIChjYXBzID09IE5VTEwpCi0gICAgZ290byBkZXRlY3RfY2hhbm5lbHNfZmFpbGVkOwotCi0gIEdTVF9MT0dfT0JKRUNUIChvYmosICJwcm9iZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gIHJldHVybiBjYXBzOwotCi0vKiBFUlJPUlMgKi8KLWVuZ2luZWluZm9fZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkcgKCJFTkdJTkVJTkZPIHN1cHBvcnRlZCBmb3JtYXRzIHByb2JlIGZhaWxlZDogJXMiLAotICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1kZXRlY3RfcmF0ZXNfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmosICJmYWlsZWQgdG8gZGV0ZWN0IHN1cHBvcnRlZCBzYW1wbGUgcmF0ZXMiKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWRldGVjdF9jaGFubmVsc19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9iaiwgImZhaWxlZCB0byBkZXRlY3Qgc3VwcG9ydGVkIGNoYW5uZWxzIik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLUdzdENhcHMgKgotZ3N0X29zczRfYXVkaW9fZ2V0X3RlbXBsYXRlX2NhcHMgKHZvaWQpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdpbnQgaTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKGZtdF9tYXApOyArK2kpIHsKLSAgICBnc3Rfb3NzNF9hcHBlbmRfZm9ybWF0X3RvX2NhcHMgKCZmbXRfbWFwW2ldLCBjYXBzKTsKLSAgfQotCi0gIGNhcHMgPSBnc3RfY2Fwc19zaW1wbGlmeSAoY2Fwcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgKytpKSB7Ci0gICAgR3N0U3RydWN0dXJlICpzOwotCi0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAicmF0ZSIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgR1NUX09TUzRfTUlOX1NBTVBMRV9SQVRFLAotICAgICAgICBHU1RfT1NTNF9NQVhfU0FNUExFX1JBVEUsICJjaGFubmVscyIsIEdTVF9UWVBFX0lOVF9SQU5HRSwKLSAgICAgICAgR1NUX09TUzRfTUlOX0NIQU5ORUxTLCBHU1RfT1NTNF9NQVhfQ0hBTk5FTFMsIE5VTEwpOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLS8qIGNhbGxlZCBieSBnc3Rfb3NzNF9zaW5rX3ByZXBhcmUoKSBhbmQgZ3N0X29zczRfc291cmNlX3ByZXBhcmUoKSAqLwotZ2Jvb2xlYW4KLWdzdF9vc3M0X2F1ZGlvX3NldF9mb3JtYXQgKEdzdE9iamVjdCAqIG9iaiwgaW50IGZkLAotICAgIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBzdHJ1Y3QgYXVkaW9fYnVmX2luZm8gaW5mbyA9IHsgMCwgfTsKLSAgaW50IG9mbXQsIGZtdCwgY2hhbnMsIHJhdGUsIHdpZHRoOwotCi0gIGZtdCA9IGdzdF9vc3M0X2F1ZGlvX2dldF9vc3NfZm9ybWF0IChzcGVjLT50eXBlLAotICAgICAgR1NUX0FVRElPX0lORk9fRk9STUFUICgmc3BlYy0+aW5mbykpOwotCi0gIGlmIChmbXQgPT0gMCkKLSAgICBnb3RvIHdyb25nX2Zvcm1hdDsKLQotICBvZm10ID0gZm10OwotICBjaGFucyA9IEdTVF9BVURJT19JTkZPX0NIQU5ORUxTICgmc3BlYy0+aW5mbyk7Ci0gIHJhdGUgPSBHU1RfQVVESU9fSU5GT19SQVRFICgmc3BlYy0+aW5mbyk7Ci0gIHdpZHRoID0gR1NUX0FVRElPX0lORk9fV0lEVEggKCZzcGVjLT5pbmZvKTsKLQotICBpZiAoc3BlYy0+dHlwZSA9PSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfUkFXICYmCi0gICAgICB3aWR0aCAhPSAzMiAmJiB3aWR0aCAhPSAyNCAmJiB3aWR0aCAhPSAxNiAmJiB3aWR0aCAhPSA4KSB7Ci0gICAgZ290byBkb2RneV93aWR0aDsKLSAgfQotCi0gIC8qIGZvcm1hdCAqLwotICBHU1RfTE9HX09CSkVDVCAob2JqLCAic2V0dGluZyBmb3JtYXQ6ICVkIiwgZm10KTsKLSAgaWYgKGlvY3RsIChmZCwgU05EQ1RMX0RTUF9TRVRGTVQsICZmbXQpID09IC0xKQotICAgIGdvdG8gc2V0X2Zvcm1hdF9mYWlsZWQ7Ci0KLSAgLyogY2hhbm5lbHMgKi8KLSAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgInNldHRpbmcgY2hhbm5lbHM6ICVkIiwgY2hhbnMpOwotICBpZiAoaW9jdGwgKGZkLCBTTkRDVExfRFNQX0NIQU5ORUxTLCAmY2hhbnMpID09IC0xKQotICAgIGdvdG8gc2V0X2NoYW5uZWxzX2ZhaWxlZDsKLQotICAvKiByYXRlICovCi0gIEdTVF9MT0dfT0JKRUNUIChvYmosICJzZXR0aW5nIHJhdGU6ICVkIiwgcmF0ZSk7Ci0gIGlmIChpb2N0bCAoZmQsIFNORENUTF9EU1BfU1BFRUQsICZyYXRlKSA9PSAtMSkKLSAgICBnb3RvIHNldF9yYXRlX2ZhaWxlZDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJlZmZlY3RpdmUgZm9ybWF0ICAgOiAlZCIsIGZtdCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKG9iaiwgImVmZmVjdGl2ZSBjaGFubmVscyA6ICVkIiwgY2hhbnMpOwotICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJlZmZlY3RpdmUgcmF0ZSAgICAgOiAlZCIsIHJhdGUpOwotCi0gIC8qIG1ha2Ugc3VyZSBmb3JtYXQsIGNoYW5uZWxzLCBhbmQgcmF0ZSBhcmUgdGhlIG9uZXMgd2UgcmVxdWVzdGVkICovCi0gIGlmIChmbXQgIT0gb2ZtdCB8fCBjaGFucyAhPSBHU1RfQVVESU9fSU5GT19DSEFOTkVMUyAoJnNwZWMtPmluZm8pIHx8Ci0gICAgICByYXRlICE9IEdTVF9BVURJT19JTkZPX1JBVEUgKCZzcGVjLT5pbmZvKSkgewotICAgIC8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGhleSAqLwotICAgIGdvdG8gZm9ybWF0X25vdF93aGF0X3dhc19yZXF1ZXN0ZWQ7Ci0gIH0KLQotICBpZiAoR1NUX0lTX09TUzRfU09VUkNFIChvYmopKSB7Ci0gICAgaWYgKGlvY3RsIChmZCwgU05EQ1RMX0RTUF9HRVRJU1BBQ0UsICZpbmZvKSA9PSAtMSkKLSAgICAgIGdvdG8gZ2V0X2lzcGFjZV9mYWlsZWQ7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGlvY3RsIChmZCwgU05EQ1RMX0RTUF9HRVRPU1BBQ0UsICZpbmZvKSA9PSAtMSkKLSAgICAgIGdvdG8gZ2V0X29zcGFjZV9mYWlsZWQ7Ci0gIH0KLQotICBzcGVjLT5zZWdzaXplID0gaW5mby5mcmFnc2l6ZTsKLQotICAvKiB3ZSBhZGQgc29tZSBleHRyYSBmcmFnbWVudHMgLS0gdGhpcyBoZWxwcyB1cyBhY2NvdW50IGZvciBkZWxheXMgZHVlIHRvCi0gICAqIGNvbnZlcnNpb24gYnVmZmVyLCBzdHJlYW1zIHF1ZXVlaW5nLCBldGMuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVzZQotICAgKiBiZSB0YWtlbiBpbnRvIGFjY291bnQgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGRlbGF5IGNvdW50ZXIgY2FuIHdpbmQgdXAKLSAgICogYmVpbmcgdG9vIGxhcmdlLCBhbmQgdGhlIGJ1ZmZlciB3aWxsIHdyYXAuICAqLwotICBzcGVjLT5zZWd0b3RhbCA9IGluZm8uZnJhZ3N0b3RhbCArIDQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqLCAiZ290IHNlZ3NpemU6ICVkLCBzZWd0b3RhbDogJWQsIHZhbHVlOiAlMDh4IiwKLSAgICAgIHNwZWMtPnNlZ3NpemUsIHNwZWMtPnNlZ3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKLQotICBnc3Rfb3NzNF9hdWRpb19zZXRfcmluZ2J1ZmZlcl9jaGFubmVsX2xheW91dCAob2JqLCBmZCwgc3BlYyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLS8qIEVSUk9SUyAqLwotd3JvbmdfZm9ybWF0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9iaiwgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiVW5hYmxlIHRvIGdldCBmb3JtYXQgKCVkLCAlZCkiLCBzcGVjLT50eXBlLAotICAgICAgICAgICAgR1NUX0FVRElPX0lORk9fRk9STUFUICgmc3BlYy0+aW5mbykpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWRvZGd5X3dpZHRoOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9iaiwgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgidW5leHBlY3RlZCB3aWR0aCAlZCIsIHdpZHRoKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1zZXRfZm9ybWF0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvYmosIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkRTUF9TRVRGTVQoJWQpIGZhaWxlZDogJXMiLCBmbXQsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotc2V0X2NoYW5uZWxzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvYmosIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkRTUF9DSEFOTkVMUyglZCkgZmFpbGVkOiAlcyIsIGNoYW5zLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXNldF9yYXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvYmosIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkRTUF9TUEVFRCglZCkgZmFpbGVkOiAlcyIsIHJhdGUsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZ2V0X29zcGFjZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob2JqLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgKCJEU1BfR0VUT1NQQUNFIGZhaWxlZDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWdldF9pc3BhY2VfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9iaiwgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICgiRFNQX0dFVElTUEFDRSBmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1mb3JtYXRfbm90X3doYXRfd2FzX3JlcXVlc3RlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvYmosIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLAotICAgICAgICAoIkZvcm1hdCBhY3R1YWxseSBjb25maWd1cmVkIHdhc24ndCB0aGUgb25lIHdlIHJlcXVlc3RlZC4gVGhpcyBpcyAiCi0gICAgICAgICAgICAicHJvYmFibHkgZWl0aGVyIGEgYnVnIGluIHRoZSBkcml2ZXIgb3IgaW4gdGhlIGZvcm1hdCBwcm9iaW5nIGNvZGUuIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1pbnQKLWdzdF9vc3M0X2F1ZGlvX2dldF92ZXJzaW9uIChHc3RPYmplY3QgKiBvYmosIGludCBmZCkKLXsKLSAgZ2ludCB2ZXIgPSAwOwotCi0gIC8qIHdlIHVzZSB0aGUgb2xkIGlvY3RsIGhlcmUgb24gcHVycG9zZSBpbnN0ZWFkIG9mIFNORENUTF9TWVNJTkZPICovCi0gIGlmIChpb2N0bCAoZmQsIE9TU19HRVRWRVJTSU9OLCAmdmVyKSA8IDApIHsKLSAgICBHU1RfTE9HX09CSkVDVCAob2JqLCAiT1NTX0dFVFZFUlNJT04gZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIEdTVF9MT0dfT0JKRUNUIChvYmosICJPU1MgdmVyc2lvbjogMHglMDh4IiwgdmVyKTsKLSAgcmV0dXJuIHZlcjsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9vc3M0X2F1ZGlvX2NoZWNrX3ZlcnNpb24gKEdzdE9iamVjdCAqIG9iaiwgaW50IGZkKQotewotICByZXR1cm4gKGdzdF9vc3M0X2F1ZGlvX2dldF92ZXJzaW9uIChvYmosIGZkKSA+PSBHU1RfTUlOX09TUzRfVkVSU0lPTik7Ci19Ci0KLWdjaGFyICoKLWdzdF9vc3M0X2F1ZGlvX2ZpbmRfZGV2aWNlIChHc3RPYmplY3QgKiBvc3MpCi17Ci0gIEdWYWx1ZUFycmF5ICphcnI7Ci0gIGdjaGFyICpyZXQgPSBOVUxMOwotCi0gIGFyciA9IGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2dldF92YWx1ZXMgKEdTVF9PQkpFQ1QgKG9zcyksICJkZXZpY2UiKTsKLQotICBpZiAoYXJyICE9IE5VTEwpIHsKLSAgICBpZiAoYXJyLT5uX3ZhbHVlcyA+IDApIHsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqdmFsOwotCi0gICAgICB2YWwgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFyciwgMCk7Ci0gICAgICByZXQgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbCk7Ci0gICAgfQotICAgIGdfdmFsdWVfYXJyYXlfZnJlZSAoYXJyKTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChvc3MsICJmaXJzdCBkZXZpY2UgZm91bmQ6ICVzIiwgR1NUX1NUUl9OVUxMIChyZXQpKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGdpbnQgcmFuazsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3NzNHNpbmtfZGVidWcsICJvc3M0c2luayIsIDAsICJPU1M0IGF1ZGlvIHNpbmsiKTsKLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG9zczRzcmNfZGVidWcsICJvc3M0c3JjIiwgMCwgIk9TUzQgYXVkaW8gc3JjIik7Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChvc3M0bWl4ZXJfZGVidWcsICJvc3M0bWl4ZXIiLCAwLCAiT1NTNCBtaXhlciIpOwotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3NzNF9kZWJ1ZywgIm9zczQiLCAwLCAiT1NTNCBwbHVnaW4iKTsKLQotI2lmZGVmIEVOQUJMRV9OTFMKLSAgR1NUX0RFQlVHICgiYmluZGluZyB0ZXh0IGRvbWFpbiAlcyB0byBsb2NhbGUgZGlyICVzIiwgR0VUVEVYVF9QQUNLQUdFLAotICAgICAgTE9DQUxFRElSKTsKLSAgYmluZHRleHRkb21haW4gKEdFVFRFWFRfUEFDS0FHRSwgTE9DQUxFRElSKTsKLSAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKEdFVFRFWFRfUEFDS0FHRSwgIlVURi04Iik7Ci0jZW5kaWYKLQotICAvKiB3ZSB3YW50IGEgaGlnaGVyIHJhbmsgdGhhbiB0aGUgbGVnYWN5IE9TUyBlbGVtZW50cyBoYXZlIG5vdyAqLwotICByYW5rID0gR1NUX1JBTktfU0VDT05EQVJZICsgMTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJvc3M0c2luayIsIHJhbmssIEdTVF9UWVBFX09TUzRfU0lOSykgfHwKLSAgICAgICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAib3NzNHNyYyIsIHJhbmssIEdTVF9UWVBFX09TUzRfU09VUkNFKSkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgb3NzNCwKLSAgICAiT3BlbiBTb3VuZCBTeXN0ZW0gKE9TUykgdmVyc2lvbiA0IHN1cHBvcnQgZm9yIEdTdHJlYW1lciIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9zeXMvb3NzNC9vc3M0LWF1ZGlvLmggYi9zeXMvb3NzNC9vc3M0LWF1ZGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MTI4YzAuLjAwMDAwMDAKLS0tIGEvc3lzL29zczQvb3NzNC1hdWRpby5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyogR1N0cmVhbWVyIE9TUzQgYXVkaW8gcGx1Z2luCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1NUX09TUzRfQVVESU9fSAotI2RlZmluZSBHU1RfT1NTNF9BVURJT19ICi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLS8qIFRoaXMgaXMgdGhlIG1pbmltdW0gdmVyc2lvbiB3ZSByZXF1aXJlICovCi0jZGVmaW5lIEdTVF9NSU5fT1NTNF9WRVJTSU9OICAweDA0MDAwMwotCi1pbnQgICAgICAgZ3N0X29zczRfYXVkaW9fZ2V0X3ZlcnNpb24gKEdzdE9iamVjdCAqIG9iaiwgaW50IGZkKTsKLQotZ2Jvb2xlYW4gIGdzdF9vc3M0X2F1ZGlvX2NoZWNrX3ZlcnNpb24gKEdzdE9iamVjdCAqIG9iaiwgaW50IGZkKTsKLQotR3N0Q2FwcyAqIGdzdF9vc3M0X2F1ZGlvX3Byb2JlX2NhcHMgIChHc3RPYmplY3QgKiBvYmosIGludCBmZCk7Ci0KLWdib29sZWFuICBnc3Rfb3NzNF9hdWRpb19zZXRfZm9ybWF0ICAoR3N0T2JqZWN0ICogb2JqLCBpbnQgZmQsIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKTsKLQotR3N0Q2FwcyAqIGdzdF9vc3M0X2F1ZGlvX2dldF90ZW1wbGF0ZV9jYXBzICh2b2lkKTsKLQotZ2NoYXIgICAqIGdzdF9vc3M0X2F1ZGlvX2ZpbmRfZGV2aWNlIChHc3RPYmplY3QgKiBvc3MpOwotCi0jZW5kaWYgLyogR1NUX09TUzRfQVVESU9fSCAqLwotCi0KZGlmZiAtLWdpdCBhL3N5cy9vc3M0L29zczQtcHJvcGVydHktcHJvYmUuYyBiL3N5cy9vc3M0L29zczQtcHJvcGVydHktcHJvYmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY0NGVhMS4uMDAwMDAwMAotLS0gYS9zeXMvb3NzNC9vc3M0LXByb3BlcnR5LXByb2JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyogR1N0cmVhbWVyIE9TUzQgYXVkaW8gcHJvcGVydHkgcHJvYmUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotCi0jZGVmaW5lIE5PX0xFR0FDWV9NSVhFUgotI2luY2x1ZGUgIm9zczQtYXVkaW8uaCIKLSNpbmNsdWRlICJvc3M0LXNpbmsuaCIKLSNpbmNsdWRlICJvc3M0LXNvdXJjZS5oIgotI2luY2x1ZGUgIm9zczQtc291bmRjYXJkLmgiCi0jaW5jbHVkZSAib3NzNC1wcm9wZXJ0eS1wcm9iZS5oIgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZiAwCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKG9zczRfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgb3NzNF9kZWJ1ZwotCi1zdGF0aWMgY29uc3QgR0xpc3QgKgotZ3N0X29zczRfcHJvcGVydHlfcHJvYmVfZ2V0X3Byb3BlcnRpZXMgKEdzdFByb3BlcnR5UHJvYmUgKiBwcm9iZSkKLXsKLSAgR09iamVjdENsYXNzICprbGFzcyA9IEdfT0JKRUNUX0dFVF9DTEFTUyAocHJvYmUpOwotICBHTGlzdCAqbGlzdDsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKEdTVF9PQkpFQ1QgKHByb2JlKSk7Ci0KLSAgLyogd2UgY3JlYXRlIGEgbmV3IGxpc3QgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnN0YW5jZSBzdHJ1Y3QsIHNpbmNlIGFwcGFyZW50bHkKLSAgICogd2UgZm9yZ290IHRvIHVwZGF0ZSB0aGUgQVBJIGZvciAwLjEwIChhbmQgd2h5IGRvbid0IHdlIG1hcmsgcHJvYmFibGUKLSAgICogcHJvcGVydGllcyB3aXRoIGEgZmxhZyBpbnN0ZWFkIGFueXdheT8pLiBBIGJpdCBoYWNraXNoLCBidXQgd2hhdCBjYW4geW91Ci0gICAqIGRvIChjYW4ndCByZWFsbHkgdXNlIGEgc3RhdGljIHZhcmlhYmxlIHNpbmNlIHRoZSBwc3BlYyB3aWxsIGJlIGRpZmZlcmVudAotICAgKiBmb3Igc3JjIGFuZCBzaW5rIGNsYXNzKTsgdGhpcyBpc24ndCBwYXJ0aWN1bGFybHkgcHJldHR5LCBidXQgdGhlIGJlc3QKLSAgICogd2UgY2FuIGRvIGdpdmVuIHRoYXQgd2UgY2FuJ3QgY3JlYXRlIGEgY29tbW9uIGJhc2UgY2xhc3MgKHdlIGNvdWxkIGRvCi0gICAqIGZhbmN5IHRoaW5ncyB3aXRoIHRoZSBpbnRlcmZhY2UsIG9yIHVzZSBnX29iamVjdF9zZXRfZGF0YSBpbnN0ZWFkLCBidXQKLSAgICogaXQncyBub3QgcmVhbGx5IGdvaW5nIHRvIG1ha2UgaXQgbXVjaCBiZXR0ZXIpICovCi0gIGlmIChHU1RfSVNfQVVESU9fU0lOS19DTEFTUyAoa2xhc3MpKSB7Ci0gICAgbGlzdCA9IEdTVF9PU1M0X1NJTksgKHByb2JlKS0+cHJvcGVydHlfcHJvYmVfbGlzdDsKLSAgfSBlbHNlIGlmIChHU1RfSVNfQVVESU9fU1JDX0NMQVNTIChrbGFzcykpIHsKLSAgICBsaXN0ID0gR1NUX09TUzRfU09VUkNFIChwcm9iZSktPnByb3BlcnR5X3Byb2JlX2xpc3Q7Ci0gIH0gZWxzZSBpZiAoR1NUX0lTX09TUzRfTUlYRVJfQ0xBU1MgKGtsYXNzKSkgewotICAgIGxpc3QgPSBHU1RfT1NTNF9NSVhFUiAocHJvYmUpLT5wcm9wZXJ0eV9wcm9iZV9saXN0OwotICB9IGVsc2UgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChHU1RfT0JKRUNUIChwcm9iZSkpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChOVUxMKTsKLSAgfQotCi0gIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICBHUGFyYW1TcGVjICpwc3BlYzsKLQotICAgIHBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoa2xhc3MsICJkZXZpY2UiKTsKLSAgICBsaXN0ID0gZ19saXN0X3ByZXBlbmQgKE5VTEwsIHBzcGVjKTsKLQotICAgIGlmIChHU1RfSVNfQVVESU9fU0lOS19DTEFTUyAoa2xhc3MpKSB7Ci0gICAgICBHU1RfT1NTNF9TSU5LIChwcm9iZSktPnByb3BlcnR5X3Byb2JlX2xpc3QgPSBsaXN0OwotICAgIH0gZWxzZSBpZiAoR1NUX0lTX0FVRElPX1NSQ19DTEFTUyAoa2xhc3MpKSB7Ci0gICAgICBHU1RfT1NTNF9TT1VSQ0UgKHByb2JlKS0+cHJvcGVydHlfcHJvYmVfbGlzdCA9IGxpc3Q7Ci0gICAgfSBlbHNlIGlmIChHU1RfSVNfT1NTNF9NSVhFUl9DTEFTUyAoa2xhc3MpKSB7Ci0gICAgICBHU1RfT1NTNF9NSVhFUiAocHJvYmUpLT5wcm9wZXJ0eV9wcm9iZV9saXN0ID0gbGlzdDsKLSAgICB9Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoR1NUX09CSkVDVCAocHJvYmUpKTsKLQotICByZXR1cm4gbGlzdDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX3Byb2JlX3Byb3BlcnR5IChHc3RQcm9wZXJ0eVByb2JlICogcHJvYmUsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBpZiAoIWdfc3RyX2VxdWFsIChwc3BlYy0+bmFtZSwgImRldmljZSIpKSB7Ci0gICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChwcm9iZSwgcHJvcF9pZCwgcHNwZWMpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zczRfcHJvcGVydHlfcHJvYmVfbmVlZHNfcHJvYmUgKEdzdFByb3BlcnR5UHJvYmUgKiBwcm9iZSwKLSAgICBndWludCBwcm9wX2lkLCBjb25zdCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIC8qIGRvbid0IGNhY2hlIHByb2JlZCBkYXRhICovCi0gIHJldHVybiBUUlVFOwotfQotCi0jZW5kaWYKLQotLyogY2FsbGVyIG11c3QgZW5zdXJlIExPQ0sgaXMgdGFrZW4gKGUuZy4gaWYgaW9jdGxzIG5lZWQgdG8gYmUgc2VyaWFsaXNlZCkgKi8KLWdib29sZWFuCi1nc3Rfb3NzNF9wcm9wZXJ0eV9wcm9iZV9maW5kX2RldmljZV9uYW1lIChHc3RPYmplY3QgKiBvYmosIGludCBmZCwKLSAgICBjb25zdCBnY2hhciAqIGRldmljZV9oYW5kbGUsIGdjaGFyICoqIGRldmljZV9uYW1lKQotewotICBzdHJ1Y3Qgb3NzX3N5c2luZm8gc2kgPSB7IHswLH0sIH07Ci0gIGdjaGFyICpuYW1lID0gTlVMTDsKLQotICBpZiAoaW9jdGwgKGZkLCBTTkRDVExfU1lTSU5GTywgJnNpKSA9PSAwKSB7Ci0gICAgaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2kubnVtYXVkaW9zOyArK2kpIHsKLSAgICAgIHN0cnVjdCBvc3NfYXVkaW9pbmZvIGFpID0geyAwLCB9OwotCi0gICAgICBhaS5kZXYgPSBpOwotICAgICAgaWYgKGlvY3RsIChmZCwgU05EQ1RMX0FVRElPSU5GTywgJmFpKSA9PSAtMSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJBVURJT0lORk8gaW9jdGwgZm9yIGRldmljZSAlZCBmYWlsZWQiLCBpKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RyY21wIChhaS5kZXZub2RlLCBkZXZpY2VfaGFuZGxlKSA9PSAwKSB7Ci0gICAgICAgIG5hbWUgPSBnX3N0cmR1cCAoYWkubmFtZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9iaiwgIlNZU0lORk8gaW9jdGwgZmFpbGVkOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gIH0KLQotICAvKiB0cnkgRU5HSU5FSU5GTyBhcyBmYWxsYmFjayAod2hpY2ggaXMgYmV0dGVyIHRoYW4gbm90aGluZykgKi8KLSAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgIHN0cnVjdCBvc3NfYXVkaW9pbmZvIGFpID0geyAwLCB9OwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgImRldmljZSAlcyBub3QgbGlzdGVkIGluIEFVRElPSU5GTyIsIGRldmljZV9oYW5kbGUpOwotICAgIGFpLmRldiA9IC0xOwotICAgIGlmIChpb2N0bCAoZmQsIFNORENUTF9FTkdJTkVJTkZPLCAmYWkpID09IDApCi0gICAgICBuYW1lID0gZ19zdHJkdXAgKGFpLm5hbWUpOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqLCAiRGV2aWNlIG5hbWU6ICVzIiwgR1NUX1NUUl9OVUxMIChuYW1lKSk7Ci0KLSAgaWYgKG5hbWUgIT0gTlVMTCkKLSAgICAqZGV2aWNlX25hbWUgPSBuYW1lOwotCi0gIHJldHVybiAobmFtZSAhPSBOVUxMKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWVfbm9mZCAoR3N0T2JqZWN0ICogb2JqLAotICAgIGNvbnN0IGdjaGFyICogZGV2aWNlX2hhbmRsZSwgZ2NoYXIgKiogZGV2aWNlX25hbWUpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgaW50IGZkOwotCi0gIGZkID0gb3BlbiAoIi9kZXYvbWl4ZXIiLCBPX1JET05MWSk7Ci0gIGlmIChmZCA8IDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJlcyA9IGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWUgKG9iaiwgZmQsIGRldmljZV9oYW5kbGUsCi0gICAgICBkZXZpY2VfbmFtZSk7Ci0KLSAgY2xvc2UgKGZkKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdMaXN0ICoKLWdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2dldF9hdWRpb19kZXZpY2VzIChHc3RPYmplY3QgKiBvYmosIGludCBmZCwKLSAgICBzdHJ1Y3Qgb3NzX3N5c2luZm8gKnNpLCBpbnQgY2FwX21hc2spCi17Ci0gIEdMaXN0ICpkZXZpY2VzID0gTlVMTDsKLSAgaW50IGk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKG9iaiwgIiVkIGF1ZGlvL2RzcCBkZXZpY2VzIiwgc2ktPm51bWF1ZGlvcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IHNpLT5udW1hdWRpb3M7ICsraSkgewotICAgIHN0cnVjdCBvc3NfYXVkaW9pbmZvIGFpID0geyAwLCB9OwotCi0gICAgYWkuZGV2ID0gaTsKLSAgICBpZiAoaW9jdGwgKGZkLCBTTkRDVExfQVVESU9JTkZPLCAmYWkpID09IC0xKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJBVURJT0lORk8gaW9jdGwgZm9yIGRldmljZSAlZCBmYWlsZWQiLCBpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmICgoYWkuY2FwcyAmIGNhcF9tYXNrKSA9PSAwKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJhdWRpbyBkZXZpY2UgJWQgaXMgbm90IGFuICVzIGRldmljZSIsIGksCi0gICAgICAgICAgKGNhcF9tYXNrID09IFBDTV9DQVBfT1VUUFVUKSA/ICJvdXRwdXQiIDogImlucHV0Iik7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWFpLmVuYWJsZWQpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iaiwgImF1ZGlvIGRldmljZSAlZCBpcyBub3QgdXNhYmxlL2VuYWJsZWQiLCBpKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iaiwgImF1ZGlvIGRldmljZSAlZCBsb29rcyBvazogJXMgKFwiJXNcIikiLCBpLAotICAgICAgICBhaS5kZXZub2RlLCBhaS5uYW1lKTsKLQotICAgIGRldmljZXMgPSBnX2xpc3RfcHJlcGVuZCAoZGV2aWNlcywgZ19zdHJkdXAgKGFpLmRldm5vZGUpKTsKLSAgfQotCi0gIHJldHVybiBnX2xpc3RfcmV2ZXJzZSAoZGV2aWNlcyk7Ci19Ci0KLUdWYWx1ZUFycmF5ICoKLWdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2dldF92YWx1ZXMgKEdzdE9iamVjdCAqIHByb2JlLCBjb25zdCBnY2hhciAqIHBuYW1lKQotewotICBzdHJ1Y3Qgb3NzX3N5c2luZm8gc2kgPSB7IHswLH0sIH07Ci0gIEdWYWx1ZUFycmF5ICphcnJheSA9IE5VTEw7Ci0gIEdzdE9iamVjdCAqb2JqOwotICBHTGlzdCAqZGV2aWNlcywgKmw7Ci0gIGludCBjYXBfbWFzaywgZmQgPSAtMTsKLQotICBpZiAoIWdfc3RyX2VxdWFsIChwbmFtZSwgImRldmljZSIpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcm9iZSwgImludmFsaWQgcHJvcGVydHkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIG9iaiA9IEdTVF9PQkpFQ1QgKHByb2JlKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9iaik7Ci0KLSAgLyogZmlndXJlIG91dCB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGEgc291cmNlIG9yIHNpbmsgKi8KLSAgaWYgKEdTVF9JU19PU1M0X1NJTksgKHByb2JlKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByb2JlLCAicHJvYmluZyBhdmFpbGFibGUgb3V0cHV0IGRldmljZXMiKTsKLSAgICBjYXBfbWFzayA9IFBDTV9DQVBfT1VUUFVUOwotICAgIGZkID0gR1NUX09TUzRfU0lOSyAocHJvYmUpLT5mZDsKLSAgfSBlbHNlIGlmIChHU1RfSVNfT1NTNF9TT1VSQ0UgKHByb2JlKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByb2JlLCAicHJvYmluZyBhdmFpbGFibGUgaW5wdXQgZGV2aWNlcyIpOwotICAgIGNhcF9tYXNrID0gUENNX0NBUF9JTlBVVDsKLSAgICBmZCA9IEdTVF9PU1M0X1NPVVJDRSAocHJvYmUpLT5mZDsKLSAgfSBlbHNlIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqKTsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8qIGNvcHkgZmQgaWYgaXQncyBvcGVuLCBzbyB3ZSBjYW4ganVzdCB1bmNvbmRpdGlvbmFsbHkgY2xvc2UoKSBsYXRlciAqLwotICBpZiAoZmQgIT0gLTEpCi0gICAgZmQgPSBkdXAgKGZkKTsKLQotICAvKiB0aGlzIHdpbGwgYWxzbyBjYXRjaCB0aGUgdW5saWtlbHkgY2FzZSB3aGVyZSB0aGUgYWJvdmUgZHVwKCkgZmFpbGVkICovCi0gIGlmIChmZCA9PSAtMSkgewotICAgIGZkID0gb3BlbiAoIi9kZXYvbWl4ZXIiLCBPX1JET05MWSB8IE9fTk9OQkxPQ0ssIDApOwotICAgIGlmIChmZCA8IDApCi0gICAgICBnb3RvIG9wZW5fZmFpbGVkOwotICAgIGVsc2UgaWYgKCFnc3Rfb3NzNF9hdWRpb19jaGVja192ZXJzaW9uIChHU1RfT0JKRUNUIChwcm9iZSksIGZkKSkKLSAgICAgIGdvdG8gbGVnYWN5X29zczsKLSAgfQotCi0gIGlmIChpb2N0bCAoZmQsIFNORENUTF9TWVNJTkZPLCAmc2kpID09IC0xKQotICAgIGdvdG8gbm9fc3lzaW5mbzsKLQotICBkZXZpY2VzID0gZ3N0X29zczRfcHJvcGVydHlfcHJvYmVfZ2V0X2F1ZGlvX2RldmljZXMgKG9iaiwgZmQsICZzaSwgY2FwX21hc2spOwotCi0gIGlmIChkZXZpY2VzID09IE5VTEwpIHsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAob2JqKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChvYmosICJObyBkZXZpY2VzIGZvdW5kIik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgYXJyYXkgPSBnX3ZhbHVlX2FycmF5X25ldyAoMSk7Ci0KLSAgZm9yIChsID0gZGV2aWNlczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdWYWx1ZSB2YWwgPSB7IDAsIH07Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9TVFJJTkcpOwotICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKCZ2YWwsIChnY2hhciAqKSBsLT5kYXRhKTsKLSAgICBsLT5kYXRhID0gTlVMTDsKLSAgICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyYXksICZ2YWwpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9iaik7Ci0KLSAgZ19saXN0X2ZyZWUgKGRldmljZXMpOwotCi1kb25lOgotCi0gIGNsb3NlIChmZCk7Ci0KLSAgcmV0dXJuIGFycmF5OwotCi0vKiBFUlJPUlMgKi8KLW9wZW5fZmFpbGVkOgotICB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKEdTVF9PQkpFQ1QgKHByb2JlKSk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcm9iZSwgIkNhbid0IG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHByb2JlICIKLSAgICAgICAgImF2YWlsYWJsZSBkZXZpY2VzOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLWxlZ2FjeV9vc3M6Ci0gIHsKLSAgICBjbG9zZSAoZmQpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChHU1RfT0JKRUNUIChwcm9iZSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHByb2JlLCAiTGVnYWN5IE9TUyAoaWUuIG5vdCBPU1N2NCksIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotbm9fc3lzaW5mbzoKLSAgewotICAgIGNsb3NlIChmZCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKEdTVF9PQkpFQ1QgKHByb2JlKSk7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwcm9iZSwgIkNhbid0IG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHByb2JlICIKLSAgICAgICAgImF2YWlsYWJsZSBkZXZpY2VzOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkCi1nc3Rfb3NzNF9wcm9wZXJ0eV9wcm9iZV9pbnRlcmZhY2VfaW5pdCAoR3N0UHJvcGVydHlQcm9iZUludGVyZmFjZSAqIGlmYWNlKQotewotICBpZmFjZS0+Z2V0X3Byb3BlcnRpZXMgPSBnc3Rfb3NzNF9wcm9wZXJ0eV9wcm9iZV9nZXRfcHJvcGVydGllczsKLSAgaWZhY2UtPnByb2JlX3Byb3BlcnR5ID0gZ3N0X29zczRfcHJvcGVydHlfcHJvYmVfcHJvYmVfcHJvcGVydHk7Ci0gIGlmYWNlLT5uZWVkc19wcm9iZSA9IGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX25lZWRzX3Byb2JlOwotICBpZmFjZS0+Z2V0X3ZhbHVlcyA9IGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2dldF92YWx1ZXM7Ci19Ci0KLXZvaWQKLWdzdF9vc3M0X2FkZF9wcm9wZXJ0eV9wcm9iZV9pbnRlcmZhY2UgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBwcm9iZV9pZmFjZV9pbmZvID0gewotICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ludGVyZmFjZV9pbml0LAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgfTsKLQotICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKHR5cGUsIEdTVF9UWVBFX1BST1BFUlRZX1BST0JFLAotICAgICAgJnByb2JlX2lmYWNlX2luZm8pOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9zeXMvb3NzNC9vc3M0LXByb3BlcnR5LXByb2JlLmggYi9zeXMvb3NzNC9vc3M0LXByb3BlcnR5LXByb2JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmNDZmOWEuLjAwMDAwMDAKLS0tIGEvc3lzL29zczQvb3NzNC1wcm9wZXJ0eS1wcm9iZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyogR1N0cmVhbWVyIE9TUzQgYXVkaW8gcHJvcGVydHkgcHJvYmUgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1NUX09TUzRfUFJPUEVSVFlfUFJPQkVfSAotI2RlZmluZSBHU1RfT1NTNF9QUk9QRVJUWV9QUk9CRV9ICi0KLSNpZiAwCi0KLSNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9wcm9wZXJ0eXByb2JlLmg+Ci0KLXZvaWQgICAgICBnc3Rfb3NzNF9hZGRfcHJvcGVydHlfcHJvYmVfaW50ZXJmYWNlIChHVHlwZSB0eXBlKTsKLQotI2VuZGlmCi0KLWdib29sZWFuICBnc3Rfb3NzNF9wcm9wZXJ0eV9wcm9iZV9maW5kX2RldmljZV9uYW1lIChHc3RPYmplY3QgICAqIG9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIGZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogZGV2aWNlX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAgICAgICoqIGRldmljZV9uYW1lKTsKLQotZ2Jvb2xlYW4gIGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWVfbm9mZCAoR3N0T2JqZWN0ICAgKiBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqIGRldmljZV9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAgICAgICoqIGRldmljZV9uYW1lKTsKLQotR1ZhbHVlQXJyYXkgKmdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2dldF92YWx1ZXMgKEdzdE9iamVjdCAqIG9iaiwgY29uc3QgZ2NoYXIgKiBwbmFtZSk7Ci0KLQotI2VuZGlmIC8qIEdTVF9PU1M0X1BST1BFUlRZX1BST0JFX0ggKi8KLQotCmRpZmYgLS1naXQgYS9zeXMvb3NzNC9vc3M0LXNpbmsuYyBiL3N5cy9vc3M0L29zczQtc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDAyOGU3Li4wMDAwMDAwCi0tLSBhL3N5cy9vc3M0L29zczQtc2luay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg5ICswLDAgQEAKLS8qIEdTdHJlYW1lciBPU1M0IGF1ZGlvIHNpbmsKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qKgotICogU0VDVElPTjplbGVtZW50LW9zczRzaW5rCi0gKgotICogVGhpcyBlbGVtZW50IGxldHMgeW91IG91dHB1dCBzb3VuZCB1c2luZyB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gKE9TUykKLSAqIHZlcnNpb24gNC4KLSAqIAotICogTm90ZSB0aGF0IHlvdSBzaG91bGQgYWxtb3N0IGFsd2F5cyB1c2UgZ2VuZXJpYyBhdWRpbyBjb252ZXJzaW9uIGVsZW1lbnRzCi0gKiBsaWtlIGF1ZGlvY29udmVydCBhbmQgYXVkaW9yZXNhbXBsZSBpbiBmcm9udCBvZiBhbiBhdWRpb3NpbmsgdG8gbWFrZSBzdXJlCi0gKiB5b3VyIHBpcGVsaW5lIHdvcmtzIHVuZGVyIGFsbCBjaXJjdW1zdGFuY2VzICh0aG9zZSBjb252ZXJzaW9uIGVsZW1lbnRzIHdpbGwKLSAqIGFjdCBpbiBwYXNzdGhyb3VnaC1tb2RlIGlmIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5KS4KLSAqIAotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBhdWRpb3Rlc3RzcmMgISBhdWRpb2NvbnZlcnQgISB2b2x1bWUgdm9sdW1lPTAuMSAhIG9zczRzaW5rCi0gKiBdfCB3aWxsIG91dHB1dCBhIHNpbmUgd2F2ZSAoY29udGludW91cyBiZWVwIHNvdW5kKSB0byB5b3VyIHNvdW5kIGNhcmQgKHdpdGgKLSAqIGEgdmVyeSBsb3cgdm9sdW1lIGFzIHByZWNhdXRpb24pLgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIC12IGZpbGVzcmMgbG9jYXRpb249bXVzaWMub2dnICEgZGVjb2RlYmluICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zczRzaW5rCi0gKiBdfCB3aWxsIHBsYXkgYW4gT2dnL1ZvcmJpcyBhdWRpbyBmaWxlIGFuZCBvdXRwdXQgaXQgdXNpbmcgdGhlIE9wZW4gU291bmQgU3lzdGVtCi0gKiB2ZXJzaW9uIDQuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC1pMThuLXBsdWdpbi5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9zdHJlYW12b2x1bWUuaD4KLQotI2RlZmluZSBOT19MRUdBQ1lfTUlYRVIKLSNpbmNsdWRlICJvc3M0LWF1ZGlvLmgiCi0jaW5jbHVkZSAib3NzNC1zaW5rLmgiCi0jaW5jbHVkZSAib3NzNC1wcm9wZXJ0eS1wcm9iZS5oIgotI2luY2x1ZGUgIm9zczQtc291bmRjYXJkLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKG9zczRzaW5rX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIG9zczRzaW5rX2RlYnVnCi0KLXN0YXRpYyB2b2lkIGdzdF9vc3M0X3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3NzNF9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIHZvaWQgZ3N0X29zczRfc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3NzNF9zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9vc3M0X3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0Q2FwcyAqIGZpbHRlcik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X29zczRfc2lua19vcGVuIChHc3RBdWRpb1NpbmsgKiBhc2luaywKLSAgICBnYm9vbGVhbiBzaWxlbnRfZXJyb3JzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzNF9zaW5rX29wZW5fZnVuYyAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3M0X3NpbmtfY2xvc2UgKEdzdEF1ZGlvU2luayAqIGFzaW5rKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzNF9zaW5rX3ByZXBhcmUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLAotICAgIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzNF9zaW5rX3VucHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdpbnQgZ3N0X29zczRfc2lua193cml0ZSAoR3N0QXVkaW9TaW5rICogYXNpbmssIGdwb2ludGVyIGRhdGEsCi0gICAgZ3VpbnQgbGVuZ3RoKTsKLXN0YXRpYyBndWludCBnc3Rfb3NzNF9zaW5rX2RlbGF5IChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3NzNF9zaW5rX3Jlc2V0IChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci0KLSNkZWZpbmUgREVGQVVMVF9ERVZJQ0UgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfREVWSUNFX05BTUUgTlVMTAotI2RlZmluZSBERUZBVUxUX01VVEUgICAgICAgIEZBTFNFCi0jZGVmaW5lIERFRkFVTFRfVk9MVU1FICAgICAgMS4wCi0jZGVmaW5lIE1BWF9WT0xVTUUgICAgICAgICAgMTAuMAotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgUFJPUF9ERVZJQ0UsCi0gIFBST1BfREVWSUNFX05BTUUsCi0gIFBST1BfVk9MVU1FLAotICBQUk9QX01VVEUsCi0gIFBST1BfTEFTVAotfTsKLQotI2RlZmluZSBnc3Rfb3NzNF9zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RPc3M0U2luaywgZ3N0X29zczRfc2luaywKLSAgICBHU1RfVFlQRV9BVURJT19TSU5LLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1NUUkVBTV9WT0xVTUUsIE5VTEwpKTsKLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NpbmtfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0T3NzNFNpbmsgKm9zc3NpbmsgPSBHU1RfT1NTNF9TSU5LIChvYmplY3QpOwotCi0gIGlmIChvc3NzaW5rLT5wcm9iZWRfY2FwcykgewotICAgIGdzdF9jYXBzX3VucmVmIChvc3NzaW5rLT5wcm9iZWRfY2Fwcyk7Ci0gICAgb3Nzc2luay0+cHJvYmVkX2NhcHMgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzNF9zaW5rX2NsYXNzX2luaXQgKEdzdE9zczRTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0QXVkaW9TaW5rQ2xhc3MgKmF1ZGlvc2lua19jbGFzcyA9IChHc3RBdWRpb1NpbmtDbGFzcyAqKSBrbGFzczsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqYmFzZXNpbmtfY2xhc3MgPSAoR3N0QmFzZVNpbmtDbGFzcyAqKSBrbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfb3NzNF9zaW5rX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X29zczRfc2lua19maW5hbGl6ZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29zczRfc2lua19nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9vc3M0X3Npbmtfc2V0X3Byb3BlcnR5OwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZSIsICJEZXZpY2UiLAotICAgICAgICAgICJPU1M0IGRldmljZSAoZS5nLiAvZGV2L29zcy9oZGF1ZGlvMC9wY20wIG9yIC9kZXYvZHNwTikgIgotICAgICAgICAgICIoTlVMTCA9IHVzZSBmaXJzdCBhdmFpbGFibGUgcGxheWJhY2sgZGV2aWNlKSIsCi0gICAgICAgICAgREVGQVVMVF9ERVZJQ0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlLW5hbWUiLCAiRGV2aWNlIG5hbWUiLAotICAgICAgICAgICJIdW1hbi1yZWFkYWJsZSBuYW1lIG9mIHRoZSBzb3VuZCBkZXZpY2UiLCBERUZBVUxUX0RFVklDRV9OQU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfVk9MVU1FLAotICAgICAgZ19wYXJhbV9zcGVjX2RvdWJsZSAoInZvbHVtZSIsICJWb2x1bWUiLAotICAgICAgICAgICJMaW5lYXIgdm9sdW1lIG9mIHRoaXMgc3RyZWFtLCAxLjA9MTAwJSIsIDAuMCwgTUFYX1ZPTFVNRSwKLSAgICAgICAgICBERUZBVUxUX1ZPTFVNRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywKLSAgICAgIFBST1BfTVVURSwKLSAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuICgibXV0ZSIsICJNdXRlIiwKLSAgICAgICAgICAiTXV0ZSBzdGF0ZSBvZiB0aGlzIHN0cmVhbSIsIERFRkFVTFRfTVVURSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBiYXNlc2lua19jbGFzcy0+Z2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc2lua19nZXRjYXBzKTsKLQotICBhdWRpb3NpbmtfY2xhc3MtPm9wZW4gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc2lua19vcGVuX2Z1bmMpOwotICBhdWRpb3NpbmtfY2xhc3MtPmNsb3NlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3M0X3NpbmtfY2xvc2UpOwotICBhdWRpb3NpbmtfY2xhc3MtPnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc2lua19wcmVwYXJlKTsKLSAgYXVkaW9zaW5rX2NsYXNzLT51bnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc2lua191bnByZXBhcmUpOwotICBhdWRpb3NpbmtfY2xhc3MtPndyaXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3M0X3Npbmtfd3JpdGUpOwotICBhdWRpb3NpbmtfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3M0X3NpbmtfZGVsYXkpOwotICBhdWRpb3NpbmtfY2xhc3MtPnJlc2V0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3M0X3NpbmtfcmVzZXQpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiT1NTIHY0IEF1ZGlvIFNpbmsiLCAiU2luay9BdWRpbyIsCi0gICAgICAiT3V0cHV0IHRvIGEgc291bmQgY2FyZCB2aWEgT1NTIHZlcnNpb24gNCIsCi0gICAgICAiVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4iKTsKLQotICB0ZW1wbCA9IGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsCi0gICAgICBnc3Rfb3NzNF9hdWRpb19nZXRfdGVtcGxhdGVfY2FwcyAoKSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsIHRlbXBsKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NpbmtfaW5pdCAoR3N0T3NzNFNpbmsgKiBvc3NzaW5rKQotewotICBjb25zdCBnY2hhciAqZGV2aWNlOwotCi0gIGRldmljZSA9IGdfZ2V0ZW52ICgiQVVESU9ERVYiKTsKLSAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIGRldmljZSA9IERFRkFVTFRfREVWSUNFOwotICBvc3NzaW5rLT5kZXZpY2UgPSBnX3N0cmR1cCAoZGV2aWNlKTsKLSAgb3Nzc2luay0+ZmQgPSAtMTsKLSAgb3Nzc2luay0+Ynl0ZXNfcGVyX3NhbXBsZSA9IDA7Ci0gIG9zc3NpbmstPnByb2JlZF9jYXBzID0gTlVMTDsKLSAgb3Nzc2luay0+ZGV2aWNlX25hbWUgPSBOVUxMOwotICBvc3NzaW5rLT5tdXRlX3ZvbHVtZSA9IDEwMCB8ICgxMDAgPDwgOCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzNF9zaW5rX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RPc3M0U2luayAqb3Nzc2luayA9IEdTVF9PU1M0X1NJTksgKG9iamVjdCk7Ci0KLSAgZ19mcmVlIChvc3NzaW5rLT5kZXZpY2UpOwotICBvc3NzaW5rLT5kZXZpY2UgPSBOVUxMOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3Npbmtfc2V0X3ZvbHVtZSAoR3N0T3NzNFNpbmsgKiBvc3MsIGdkb3VibGUgdm9sdW1lKQotewotICBpbnQgaXZvbDsKLQotICB2b2x1bWUgPSB2b2x1bWUgKiAxMDAuMDsKLSAgaXZvbCA9IChpbnQpIHZvbHVtZSB8ICgoaW50KSB2b2x1bWUgPDwgOCk7Ci0gIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgaWYgKGlvY3RsIChvc3MtPmZkLCBTTkRDVExfRFNQX1NFVFBMQVlWT0wsICZpdm9sKSA8IDApIHsKLSAgICBHU1RfTE9HX09CSkVDVCAob3NzLCAiU0VUUExBWVZPTCBmYWlsZWQiKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob3NzKTsKLX0KLQotc3RhdGljIGdkb3VibGUKLWdzdF9vc3M0X3NpbmtfZ2V0X3ZvbHVtZSAoR3N0T3NzNFNpbmsgKiBvc3MpCi17Ci0gIGludCBpdm9sLCBsdm9sLCBydm9sOwotICBnZG91YmxlIGR2b2wgPSBERUZBVUxUX1ZPTFVNRTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKG9zcyk7Ci0gIGlmIChpb2N0bCAob3NzLT5mZCwgU05EQ1RMX0RTUF9HRVRQTEFZVk9MLCAmaXZvbCkgPCAwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG9zcywgIkdFVFBMQVlWT0wgZmFpbGVkIik7Ci0gIH0gZWxzZSB7Ci0gICAgLyogUmV0dXJuIHRoZSBoaWdoZXIgb2YgdGhlIHR3byB2b2x1bWUgY2hhbm5lbHMsIGlmIGRpZmZlcmVudCAqLwotICAgIGx2b2wgPSBpdm9sICYgMHhmZjsKLSAgICBydm9sID0gKGl2b2wgPj4gOCkgJiAweGZmOwotICAgIGR2b2wgPSBNQVggKGx2b2wsIHJ2b2wpIC8gMTAwLjA7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zcyk7Ci0KLSAgcmV0dXJuIGR2b2w7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3NzNF9zaW5rX3NldF9tdXRlIChHc3RPc3M0U2luayAqIG9zcywgZ2Jvb2xlYW4gbXV0ZSkKLXsKLSAgaW50IGl2b2w7Ci0KLSAgaWYgKG11dGUpIHsKLSAgICAvKgotICAgICAqIE9TU3Y0IGRvZXMgbm90IGhhdmUgYSBwZXItY2hhbm5lbCBtdXRlLCBzbyBzaW11bGF0ZSBieSBzZXR0aW5nCi0gICAgICogdGhlIHZhbHVlIHRvIDAuICBTYXZlIHRoZSB2b2x1bWUgYmVmb3JlIGRvaW5nIGEgbXV0ZSBzbyB3ZSBjYW4KLSAgICAgKiByZXNldCB0aGUgdmFsdWUgd2hlbiB0aGUgdXNlciB1bi1tdXRlcy4KLSAgICAgKi8KLSAgICBpdm9sID0gMDsKLQotICAgIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgICBpZiAoaW9jdGwgKG9zcy0+ZmQsIFNORENUTF9EU1BfR0VUUExBWVZPTCwgJm9zcy0+bXV0ZV92b2x1bWUpIDwgMCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG9zcywgIkdFVFBMQVlWT0wgZmFpbGVkIik7Ci0gICAgfQotICAgIGlmIChpb2N0bCAob3NzLT5mZCwgU05EQ1RMX0RTUF9TRVRQTEFZVk9MLCAmaXZvbCkgPCAwKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAob3NzLCAiU0VUUExBWVZPTCBmYWlsZWQiKTsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zcyk7Ci0gIH0gZWxzZSB7Ci0gICAgLyoKLSAgICAgKiBJZiB0aGUgc2F2ZWQgdm9sdW1lIGlzIDAsIHRoZW4gcmVzZXQgaXQgdG8gMTAwLiAgT3RoZXJ3aXNlIHRoZSBtdXRlCi0gICAgICogY2FuIGdldCBzdHVjay4gIFRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGR1ZSB0byByb3VuZGluZwotICAgICAqIGVycm9ycyBpbiBjb252ZXJ0aW5nIGZyb20gdGhlIGZsb2F0IHRvIGFuIGludGVnZXIuCi0gICAgICovCi0gICAgaWYgKG9zcy0+bXV0ZV92b2x1bWUgPT0gMCkgewotICAgICAgb3NzLT5tdXRlX3ZvbHVtZSA9IDEwMCB8ICgxMDAgPDwgOCk7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgICBpZiAoaW9jdGwgKG9zcy0+ZmQsIFNORENUTF9EU1BfU0VUUExBWVZPTCwgJm9zcy0+bXV0ZV92b2x1bWUpIDwgMCkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG9zcywgIlNFVFBMQVlWT0wgZmFpbGVkIik7Ci0gICAgfQotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3MpOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zczRfc2lua19nZXRfbXV0ZSAoR3N0T3NzNFNpbmsgKiBvc3MpCi17Ci0gIGludCBpdm9sLCBsdm9sLCBydm9sOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgaWYgKGlvY3RsIChvc3MtPmZkLCBTTkRDVExfRFNQX0dFVFBMQVlWT0wsICZpdm9sKSA8IDApIHsKLSAgICBHU1RfTE9HX09CSkVDVCAob3NzLCAiR0VUUExBWVZPTCBmYWlsZWQiKTsKLSAgICBsdm9sID0gcnZvbCA9IDEwMDsKLSAgfSBlbHNlIHsKLSAgICBsdm9sID0gaXZvbCAmIDB4ZmY7Ci0gICAgcnZvbCA9IChpdm9sID4+IDgpICYgMHhmZjsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob3NzKTsKLQotICByZXR1cm4gKGx2b2wgPT0gMCAmJiBydm9sID09IDApOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zczRfc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0T3NzNFNpbmsgKm9zcyA9IEdTVF9PU1M0X1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFVklDRToKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgICAgIGlmIChvc3MtPmZkID09IC0xKSB7Ci0gICAgICAgIGdfZnJlZSAob3NzLT5kZXZpY2UpOwotICAgICAgICBvc3MtPmRldmljZSA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgICBpZiAob3NzLT5wcm9iZWRfY2FwcykgewotICAgICAgICAgIGdzdF9jYXBzX3VucmVmIChvc3MtPnByb2JlZF9jYXBzKTsKLSAgICAgICAgICBvc3MtPnByb2JlZF9jYXBzID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBnX2ZyZWUgKG9zcy0+ZGV2aWNlX25hbWUpOwotICAgICAgICBvc3MtPmRldmljZV9uYW1lID0gTlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfd2FybmluZyAoIiVzOiBjYW4ndCBjaGFuZ2UgXCJkZXZpY2VcIiBwcm9wZXJ0eSB3aGlsZSBhdWRpbyBzaW5rICIKLSAgICAgICAgICAgICJpcyBvcGVuIiwgR1NUX09CSkVDVF9OQU1FIChvc3MpKTsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1ZPTFVNRToKLSAgICAgIGdzdF9vc3M0X3Npbmtfc2V0X3ZvbHVtZSAob3NzLCBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVURToKLSAgICAgIGdzdF9vc3M0X3Npbmtfc2V0X211dGUgKG9zcywgZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zczRTaW5rICpvc3MgPSBHU1RfT1NTNF9TSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9zcyk7Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBvc3MtPmRldmljZSk7Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob3NzKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9ERVZJQ0VfTkFNRToKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgICAgIGlmIChvc3MtPmZkID09IC0xICYmIG9zcy0+ZGV2aWNlICE9IE5VTEwpIHsKLSAgICAgICAgLyogSWYgZGV2aWNlIGlzIHNldCwgdHJ5IHRvIHJldHJpZXZlIHRoZSBuYW1lIGV2ZW4gaWYgd2UncmUgbm90IG9wZW4gKi8KLSAgICAgICAgaWYgKGdzdF9vc3M0X3Npbmtfb3BlbiAoR1NUX0FVRElPX1NJTksgKG9zcyksIFRSVUUpKSB7Ci0gICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgb3NzLT5kZXZpY2VfbmFtZSk7Ci0gICAgICAgICAgZ3N0X29zczRfc2lua19jbG9zZSAoR1NUX0FVRElPX1NJTksgKG9zcykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGdjaGFyICpuYW1lID0gTlVMTDsKLQotICAgICAgICAgIGdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWVfbm9mZCAoR1NUX09CSkVDVCAob3NzKSwKLSAgICAgICAgICAgICAgb3NzLT5kZXZpY2UsICZuYW1lKTsKLSAgICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBuYW1lKTsKLSAgICAgICAgICBnX2ZyZWUgKG5hbWUpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBvc3MtPmRldmljZV9uYW1lKTsKLSAgICAgIH0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3MpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1ZPTFVNRToKLSAgICAgIGdfdmFsdWVfc2V0X2RvdWJsZSAodmFsdWUsIGdzdF9vc3M0X3NpbmtfZ2V0X3ZvbHVtZSAob3NzKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTVVURToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBnc3Rfb3NzNF9zaW5rX2dldF9tdXRlIChvc3MpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X29zczRfc2lua19nZXRjYXBzIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RPc3M0U2luayAqb3NzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NJTksgKGJzaW5rKTsKLQotICBpZiAob3NzLT5mZCA9PSAtMSkgewotICAgIGNhcHMgPSBnc3Rfb3NzNF9hdWRpb19nZXRfdGVtcGxhdGVfY2FwcyAoKTsKLSAgfSBlbHNlIGlmIChvc3MtPnByb2JlZF9jYXBzKSB7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKG9zcy0+cHJvYmVkX2NhcHMpOwotICB9IGVsc2UgewotICAgIGNhcHMgPSBnc3Rfb3NzNF9hdWRpb19wcm9iZV9jYXBzIChHU1RfT0JKRUNUIChvc3MpLCBvc3MtPmZkKTsKLSAgICBpZiAoY2FwcyAhPSBOVUxMICYmICFnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAgIG9zcy0+cHJvYmVkX2NhcHMgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZmlsdGVyICYmIGNhcHMpIHsKLSAgICBHc3RDYXBzICppbnRlcnNlY3Rpb247Ci0KLSAgICBpbnRlcnNlY3Rpb24gPQotICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uOwotICB9IGVsc2UgewotICAgIHJldHVybiBjYXBzOwotICB9Ci19Ci0KLS8qIG5vdGU6IHdlIG11c3Qgbm90IHRha2UgdGhlIG9iamVjdCBsb2NrIGhlcmUgdW5sZXNzIHdlIGZpeCB1cCBnZXRfcHJvcGVydHkgKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zczRfc2lua19vcGVuIChHc3RBdWRpb1NpbmsgKiBhc2luaywgZ2Jvb2xlYW4gc2lsZW50X2Vycm9ycykKLXsKLSAgR3N0T3NzNFNpbmsgKm9zczsKLSAgZ2NoYXIgKmRldmljZTsKLSAgaW50IG1vZGU7Ci0KLSAgb3NzID0gR1NUX09TUzRfU0lOSyAoYXNpbmspOwotCi0gIGlmIChvc3MtPmRldmljZSkKLSAgICBkZXZpY2UgPSBnX3N0cmR1cCAob3NzLT5kZXZpY2UpOwotICBlbHNlCi0gICAgZGV2aWNlID0gZ3N0X29zczRfYXVkaW9fZmluZF9kZXZpY2UgKEdTVF9PQkpFQ1RfQ0FTVCAob3NzKSk7Ci0KLSAgLyogZGVzcGVyYXRlIHRpbWVzLCBkZXNwZXJhdGUgbWVhc3VyZXMgKi8KLSAgaWYgKGRldmljZSA9PSBOVUxMKQotICAgIGRldmljZSA9IGdfc3RyZHVwICgiL2Rldi9kc3AwIik7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChvc3MsICJUcnlpbmcgdG8gb3BlbiBPU1M0IGRldmljZSAnJXMnIiwgZGV2aWNlKTsKLQotICAvKiB3ZSBvcGVuIGluIG5vbi1ibG9ja2luZyBtb2RlIGV2ZW4gaWYgd2UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gZG8gd3JpdGVzCi0gICAqIG5vbi1ibG9ja2luZyBiZWNhdXNlIHdlIGNhbid0IGJlIHN1cmUgdGhhdCB0aGlzIGlzIHJlYWxseSBhIGdlbnVpbmUKLSAgICogT1NTNCBkZXZpY2Ugd2l0aCB3ZWxsLWJlaGF2ZWQgZHJpdmVycyBldGMuIFdlIHJlYWxseSBkb24ndCB3YW50IHRvCi0gICAqIGhhbmcgZm9yZXZlciB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcy4gKi8KLSAgb3NzLT5mZCA9IG9wZW4gKGRldmljZSwgT19XUk9OTFkgfCBPX05PTkJMT0NLLCAwKTsKLSAgaWYgKG9zcy0+ZmQgPT0gLTEpIHsKLSAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICBjYXNlIEVCVVNZOgotICAgICAgICBnb3RvIGJ1c3k7Ci0gICAgICBjYXNlIEVBQ0NFUzoKLSAgICAgICAgZ290byBub19wZXJtaXNzaW9uOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ290byBvcGVuX2ZhaWxlZDsKLSAgICB9Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKG9zcywgIk9wZW5lZCBkZXZpY2UgJyVzJyIsIGRldmljZSk7Ci0KLSAgLyogTWFrZSBzdXJlIGl0J3MgT1NTNC4gSWYgaXQncyBvbGQgT1NTLCBsZXQgb3Nzc2luayBoYW5kbGUgaXQgKi8KLSAgaWYgKCFnc3Rfb3NzNF9hdWRpb19jaGVja192ZXJzaW9uIChHU1RfT0JKRUNUX0NBU1QgKG9zcyksIG9zcy0+ZmQpKQotICAgIGdvdG8gbGVnYWN5X29zczsKLQotICAvKiBub3cgcmVtb3ZlIHRoZSBub24tYmxvY2tpbmcgZmxhZy4gKi8KLSAgbW9kZSA9IGZjbnRsIChvc3MtPmZkLCBGX0dFVEZMKTsKLSAgbW9kZSAmPSB+T19OT05CTE9DSzsKLSAgaWYgKGZjbnRsIChvc3MtPmZkLCBGX1NFVEZMLCBtb2RlKSA8IDApIHsKLSAgICAvKiBzb21lIGRyaXZlcnMgZG8gbm8gc3VwcG9ydCB1bnNldHRpbmcgdGhlIG5vbi1ibG9ja2luZyBmbGFnLCB0cnkgdG8KLSAgICAgKiBjbG9zZS9vcGVuIHRoZSBkZXZpY2UgdGhlbi4gVGhpcyBpcyByYWN5IGJ1dCB3ZSBlcnJvciBvdXQgcHJvcGVybHkuICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvc3MsICJmYWlsZWQgdG8gdW5zZXQgT19OT05CTE9DSyAoYnVnZ3kgZHJpdmVyPyksICIKLSAgICAgICAgIndpbGwgdHJ5IHRvIHJlLW9wZW4gZGV2aWNlIG5vdyIpOwotICAgIGdzdF9vc3M0X3NpbmtfY2xvc2UgKGFzaW5rKTsKLSAgICBpZiAoKG9zcy0+ZmQgPSBvcGVuIChkZXZpY2UsIE9fV1JPTkxZLCAwKSkgPT0gLTEpCi0gICAgICBnb3RvIG5vbl9ibG9jazsKLSAgfQotCi0gIG9zcy0+b3Blbl9kZXZpY2UgPSBkZXZpY2U7Ci0KLSAgLyogbm90IHVzaW5nIEVOR0lORUlORk8gaGVyZSBiZWNhdXNlIGl0IHNvbWV0aW1lcyByZXR1cm5zIGEgZGlmZmVyZW50IGFuZAotICAgKiBsZXNzIHVzZWZ1bCBuYW1lIHRoYW4gQVVESU9JTkZPIGZvciB0aGUgc2FtZSBkZXZpY2UgKi8KLSAgaWYgKCFnc3Rfb3NzNF9wcm9wZXJ0eV9wcm9iZV9maW5kX2RldmljZV9uYW1lIChHU1RfT0JKRUNUIChvc3MpLCBvc3MtPmZkLAotICAgICAgICAgIG9zcy0+b3Blbl9kZXZpY2UsICZvc3MtPmRldmljZV9uYW1lKSkgewotICAgIG9zcy0+ZGV2aWNlX25hbWUgPSBOVUxMOwotICB9Ci0KLSAgLyogbGlzdCBvdXRwdXQgcm91dGluZ3MsIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgc28gZmFyICovCi0gIHsKLSAgICBvc3NfbWl4ZXJfZW51bWluZm8gcm91dGluZ3MgPSB7IDAsIH07Ci0gICAgZ3VpbnQgaTsKLQotICAgIGlmIChpb2N0bCAob3NzLT5mZCwgU05EQ1RMX0RTUF9HRVRfUExBWVRHVF9OQU1FUywgJnJvdXRpbmdzKSAhPSAtMSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKG9zcywgIiV1IG91dHB1dCByb3V0aW5ncyAoc3RhdGljIGxpc3Q6ICVkKSIsCi0gICAgICAgICAgcm91dGluZ3MubnZhbHVlcywgISAhKHJvdXRpbmdzLnZlcnNpb24gPT0gMCkpOwotICAgICAgZm9yIChpID0gMDsgaSA8IHJvdXRpbmdzLm52YWx1ZXM7ICsraSkgewotICAgICAgICBHU1RfTE9HX09CSkVDVCAob3NzLCAiICBvdXRwdXQgcm91dGluZyAlZDogJXMiLCBpLAotICAgICAgICAgICAgJnJvdXRpbmdzLnN0cmluZ3Nbcm91dGluZ3Muc3RyaW5kZXhbaV1dKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWJ1c3k6Ci0gIHsKLSAgICBpZiAoIXNpbGVudF9lcnJvcnMpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBCVVNZLAotICAgICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiAiCi0gICAgICAgICAgICAgICAgICAiRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbi4iKSksIChOVUxMKSk7Ci0gICAgfQotICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3Blcm1pc3Npb246Ci0gIHsKLSAgICBpZiAoIXNpbGVudF9lcnJvcnMpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBPUEVOX1dSSVRFLAotICAgICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiAiCi0gICAgICAgICAgICAgICAgICAiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBvcGVuIHRoZSBkZXZpY2UuIikpLAotICAgICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIH0KLSAgICBnX2ZyZWUgKGRldmljZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1vcGVuX2ZhaWxlZDoKLSAgewotICAgIGlmICghc2lsZW50X2Vycm9ycykgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsCi0gICAgICAgICAgKF8oIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suIikpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICB9Ci0gICAgZ19mcmVlIChkZXZpY2UpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbGVnYWN5X29zczoKLSAgewotICAgIGlmICghc2lsZW50X2Vycm9ycykgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsCi0gICAgICAgICAgKF8oIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suICIKLSAgICAgICAgICAgICAgICAgICJUaGlzIHZlcnNpb24gb2YgdGhlIE9wZW4gU291bmQgU3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyAiCi0gICAgICAgICAgICAgICAgICAiZWxlbWVudC4iKSksICgiVHJ5IHRoZSAnb3Nzc2luaycgZWxlbWVudCBpbnN0ZWFkIikpOwotICAgIH0KLSAgICBnc3Rfb3NzNF9zaW5rX2Nsb3NlIChhc2luayk7Ci0gICAgZ19mcmVlIChkZXZpY2UpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9uX2Jsb2NrOgotICB7Ci0gICAgaWYgKCFzaWxlbnRfZXJyb3JzKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAob3NzLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwKLSAgICAgICAgICAoIlVuYWJsZSB0byBzZXQgZGV2aWNlICVzIGludG8gbm9uLWJsb2NraW5nIG1vZGU6ICVzIiwKLSAgICAgICAgICAgICAgb3NzLT5kZXZpY2UsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIH0KLSAgICBnX2ZyZWUgKGRldmljZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zczRfc2lua19vcGVuX2Z1bmMgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBpZiAoIWdzdF9vc3M0X3Npbmtfb3BlbiAoYXNpbmssIEZBTFNFKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogdGhlIGluaXRpYWwgdm9sdW1lIG1pZ2h0IG5vdCBiZSB0aGUgcHJvcGVydHkgZGVmYXVsdCwgc28gbm90aWZ5Ci0gICAqIGFwcGxpY2F0aW9uIHRvIG1ha2UgaXQgZ2V0IGEgcmVhZGluZyBvZiB0aGUgY3VycmVudCB2b2x1bWUgKi8KLSAgZ19vYmplY3Rfbm90aWZ5IChHX09CSkVDVCAoYXNpbmspLCAidm9sdW1lIik7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3M0X3NpbmtfY2xvc2UgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3RPc3M0U2luayAqb3NzID0gR1NUX09TUzRfU0lOSyAoYXNpbmspOwotCi0gIGlmIChvc3MtPmZkICE9IC0xKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAob3NzLCAiY2xvc2luZyBkZXZpY2UiKTsKLSAgICBjbG9zZSAob3NzLT5mZCk7Ci0gICAgb3NzLT5mZCA9IC0xOwotICB9Ci0KLSAgb3NzLT5ieXRlc19wZXJfc2FtcGxlID0gMDsKLSAgLyogd2Uga2VlcCB0aGUgcHJvYmVkIGNhcHMgY2FjaGVkLCBhdCBsZWFzdCB1bnRpbCB0aGUgZGV2aWNlIGNoYW5nZXMgKi8KLQotICBnX2ZyZWUgKG9zcy0+b3Blbl9kZXZpY2UpOwotICBvc3MtPm9wZW5fZGV2aWNlID0gTlVMTDsKLQotICBnX2ZyZWUgKG9zcy0+ZGV2aWNlX25hbWUpOwotICBvc3MtPmRldmljZV9uYW1lID0gTlVMTDsKLQotICBpZiAob3NzLT5wcm9iZWRfY2FwcykgewotICAgIGdzdF9jYXBzX3VucmVmIChvc3MtPnByb2JlZF9jYXBzKTsKLSAgICBvc3MtPnByb2JlZF9jYXBzID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3M0X3NpbmtfcHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmssIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBHc3RPc3M0U2luayAqb3NzOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NJTksgKGFzaW5rKTsKLQotICBpZiAoIWdzdF9vc3M0X2F1ZGlvX3NldF9mb3JtYXQgKEdTVF9PQkpFQ1RfQ0FTVCAob3NzKSwgb3NzLT5mZCwgc3BlYykpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKG9zcywgIkNvdWxkbid0IHNldCByZXF1ZXN0ZWQgZm9ybWF0ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgICBzcGVjLT5jYXBzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBvc3MtPmJ5dGVzX3Blcl9zYW1wbGUgPSBHU1RfQVVESU9fSU5GT19CUEYgKCZzcGVjLT5pbmZvKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3NzNF9zaW5rX3VucHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmspCi17Ci0gIC8qIGNvdWxkIGRvIGEgU05EQ1RMX0RTUF9IQUxULCBidXQgdGhlIE9TUyBtYW51YWwgcmVjb21tZW5kcyBhIGNsb3NlL29wZW4sCi0gICAqIHNpbmNlIEhBTFQgd29uJ3QgcHJvcGVybHkgcmVzZXQgc29tZSBkZXZpY2VzLCBhcHBhcmVudGx5ICovCi0KLSAgaWYgKCFnc3Rfb3NzNF9zaW5rX2Nsb3NlIChhc2luaykpCi0gICAgZ290byBjb3VsZG50X2Nsb3NlOwotCi0gIGlmICghZ3N0X29zczRfc2lua19vcGVuX2Z1bmMgKGFzaW5rKSkKLSAgICBnb3RvIGNvdWxkbnRfcmVvcGVuOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotY291bGRudF9jbG9zZToKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFzaW5rLCAiQ291bGRuJ3QgY2xvc2UgdGhlIGF1ZGlvIGRldmljZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotY291bGRudF9yZW9wZW46Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhc2luaywgIkNvdWxkbid0IHJlb3BlbiB0aGUgYXVkaW8gZGV2aWNlIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3Rfb3NzNF9zaW5rX3dyaXRlIChHc3RBdWRpb1NpbmsgKiBhc2luaywgZ3BvaW50ZXIgZGF0YSwgZ3VpbnQgbGVuZ3RoKQotewotICBHc3RPc3M0U2luayAqb3NzOwotICBpbnQgbjsKLQotICBvc3MgPSBHU1RfT1NTNF9TSU5LX0NBU1QgKGFzaW5rKTsKLQotICBuID0gd3JpdGUgKG9zcy0+ZmQsIGRhdGEsIGxlbmd0aCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChhc2luaywgIndyb3RlICVkLyVkIHNhbXBsZXMsICVkIGJ5dGVzIiwKLSAgICAgIG4gLyBvc3MtPmJ5dGVzX3Blcl9zYW1wbGUsIGxlbmd0aCAvIG9zcy0+Ynl0ZXNfcGVyX3NhbXBsZSwgbik7Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKG4gPCAwKSkgewotICAgIHN3aXRjaCAoZXJybm8pIHsKLSAgICAgIGNhc2UgRU5PVFNVUDoKLSAgICAgIGNhc2UgRUFDQ0VTOnsKLSAgICAgICAgLyogVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgY2F1c2UsIEkgdGhpbmsgKi8KLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGFzaW5rLCBSRVNPVVJDRSwgV1JJVEUsCi0gICAgICAgICAgICAoXygiUGxheWJhY2sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iKSksCi0gICAgICAgICAgICAoIndyaXRlOiAlcyAoZGV2aWNlOiAlcykgKG1heWJlIHRoaXMgaXMgYW4gaW5wdXQtb25seSBkZXZpY2U/KSIsCi0gICAgICAgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pLCBvc3MtPm9wZW5fZGV2aWNlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDp7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhc2luaywgUkVTT1VSQ0UsIFdSSVRFLAotICAgICAgICAgICAgKF8oIkF1ZGlvIHBsYXliYWNrIGVycm9yLiIpKSwKLSAgICAgICAgICAgICgid3JpdGU6ICVzIChkZXZpY2U6ICVzKSIsIGdfc3RyZXJyb3IgKGVycm5vKSwgb3NzLT5vcGVuX2RldmljZSkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gbjsKLX0KLQotc3RhdGljIGd1aW50Ci1nc3Rfb3NzNF9zaW5rX2RlbGF5IChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgR3N0T3NzNFNpbmsgKm9zczsKLSAgZ2ludCBkZWxheSA9IC0xOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NJTktfQ0FTVCAoYXNpbmspOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob3NzKTsKLSAgaWYgKGlvY3RsIChvc3MtPmZkLCBTTkRDVExfRFNQX0dFVE9ERUxBWSwgJmRlbGF5KSA8IDAgfHwgZGVsYXkgPCAwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG9zcywgIkdFVE9ERUxBWSBmYWlsZWQiKTsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAob3NzKTsKLQotICBpZiAoR19VTkxJS0VMWSAoZGVsYXkgPCAwKSkgICAvKiBlcnJvciBjYXNlICovCi0gICAgcmV0dXJuIDA7Ci0KLSAgcmV0dXJuIGRlbGF5IC8gb3NzLT5ieXRlc19wZXJfc2FtcGxlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zczRfc2lua19yZXNldCAoR3N0QXVkaW9TaW5rICogYXNpbmspCi17Ci0gIC8qIFRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gaGVyZSByZWFsbHk6IE9TUyBjYW4ndCBoYW5kbGUgYWNjZXNzIHRvIHRoZQotICAgKiBzYW1lIGRldmljZS9mZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYW5kIG1pZ2h0IGRlYWRsb2NrIG9yIGJsb3cgdXAgaW4KLSAgICogb3RoZXIgd2F5cyBpZiB3ZSB0cnkgYW4gaW9jdGwgU05EQ1RMX0RTUF9IQUxUIG9yIHNpbWlsYXIgKi8KLX0KZGlmZiAtLWdpdCBhL3N5cy9vc3M0L29zczQtc2luay5oIGIvc3lzL29zczQvb3NzNC1zaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NjQ1ZmUuLjAwMDAwMDAKLS0tIGEvc3lzL29zczQvb3NzNC1zaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgT1NTNCBhdWRpbyBzaW5rCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1NUX09TUzRfU0lOS19ICi0jZGVmaW5lIEdTVF9PU1M0X1NJTktfSAotCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvc2luay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfT1NTNF9TSU5LICAgICAgICAgICAgKGdzdF9vc3M0X3NpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX09TUzRfU0lOSyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX09TUzRfU0lOSyxHc3RPc3M0U2luaykpCi0jZGVmaW5lIEdTVF9PU1M0X1NJTktfQ0FTVChvYmopICAgICAgICgoR3N0T3NzNFNpbmsgKikob2JqKSkKLSNkZWZpbmUgR1NUX09TUzRfU0lOS19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfT1NTNF9TSU5LLEdzdE9zczRTaW5rQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfT1NTNF9TSU5LKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfT1NTNF9TSU5LKSkKLSNkZWZpbmUgR1NUX0lTX09TUzRfU0lOS19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfT1NTNF9TSU5LKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zczRTaW5rIEdzdE9zczRTaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zczRTaW5rQ2xhc3MgR3N0T3NzNFNpbmtDbGFzczsKLQotc3RydWN0IF9Hc3RPc3M0U2luayB7Ci0gIEdzdEF1ZGlvU2luayAgYXVkaW9fc2luazsKLQotICBnY2hhciAgICAgICAqIGRldmljZTsgICAgICAgICAgICAgLyogTlVMTCBpZiBub25lIHdhcyBzZXQgICAgICAqLwotICBnY2hhciAgICAgICAqIG9wZW5fZGV2aWNlOyAgICAgICAgLyogdGhlIGRldmljZSB3ZSBvcGVuZWQgICAgICAqLwotICBnY2hhciAgICAgICAqIGRldmljZV9uYW1lOyAgICAgICAgLyogc2V0IGlmIHRoZSBkZXZpY2UgaXMgb3BlbiAqLwotICBnaW50ICAgICAgICAgIGZkOyAgICAgICAgICAgICAgICAgLyogLTEgaWYgbm90IG9wZW4gICAgICAgICAgICAqLwotICBnaW50ICAgICAgICAgIGJ5dGVzX3Blcl9zYW1wbGU7Ci0gIGdpbnQgICAgICAgICAgbXV0ZV92b2x1bWU7Ci0KLSAgR3N0Q2FwcyAgICAgKiBwcm9iZWRfY2FwczsKLX07Ci0KLXN0cnVjdCBfR3N0T3NzNFNpbmtDbGFzcyB7Ci0gIEdzdEF1ZGlvU2lua0NsYXNzIGF1ZGlvX3NpbmtfY2xhc3M7Ci19OwotCi1HVHlwZSAgZ3N0X29zczRfc2lua19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBHU1RfT1NTNF9TSU5LX0ggKi8KLQotCmRpZmYgLS1naXQgYS9zeXMvb3NzNC9vc3M0LXNvdW5kY2FyZC5oIGIvc3lzL29zczQvb3NzNC1zb3VuZGNhcmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxMjQ4OS4uMDAwMDAwMAotLS0gYS9zeXMvb3NzNC9vc3M0LXNvdW5kY2FyZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA2NyArMCwwIEBACi0vKgotICogUHVycG9zZTogVGhlIEMvQysrIGhlYWRlciBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgT1NTIEFQSS4KLSAqIERlc2NyaXB0aW9uOgotICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBhbGwgdGhlIGRlY2xhcmF0aW9ucyByZXF1aXJlZCB0byBjb21waWxlIE9TUwotICogcHJvZ3JhbXMuIFRoZSBsYXRlc3QgdmVyc2lvbiBpcyBhbHdheXMgaW5zdGFsbGVkIHRvZ2V0aGVyIHdpdGggT1NTCi0gKiB1c2Ugb2YgdGhlIGxhdGVzdCB2ZXJzaW9uIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLgotICoKLSAqIHshbm90aWNlIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgbWFueSBvYnNvbGV0ZSBkZWZpbml0aW9ucwotICogKGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgYXBwbGljYXRpb25zIHRoYXQgc3RpbGwgbmVkIHRoZW0pLgotICogRG8gbm90IHVzZSB0aGlzIGZpbGUgYXMgYSByZWZlcmVuY2UgbWFudWFsIG9mIE9TUy4KLSAqIFBsZWFzZSBjaGVjayB0aGUgT1NTIFByb2dyYW1tZXIncyBndWlkZSBmb3IgZGVzY3JpcHRpb25zCi0gKiBvZiB0aGUgc3VwcG9ydGVkIEFQSSBkZXRhaWxzIChodHRwOi8vbWFudWFscy5vcGVuc291bmQuY29tL2RldmVsb3BlcikufQotICovCi0KLSNpZm5kZWYgU09VTkRDQVJEX0gKLSNkZWZpbmUgU09VTkRDQVJEX0gKLQotI2RlZmluZSBDT1BZSU5HNDAgQ29weXJpZ2h0IChDKSA0RnJvbnQgVGVjaG5vbG9naWVzIDIwMDAtMjAwNi4gUmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlLgotCi0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKLSNkZWZpbmUgRVhURVJOQyBleHRlcm4gIkMiCi0jZWxzZQotI2RlZmluZSBFWFRFUk5DIGV4dGVybgotI2VuZGlmIC8qIEVYVEVSTl9DX1dSQVBQRVJTICovCi0KLSNkZWZpbmUgT1NTX1ZFUlNJT04JMHgwNDAwOTAgLy8gUHJlIDQuMQotCi0jZGVmaW5lIFNPVU5EX1ZFUlNJT04JT1NTX1ZFUlNJT04KLSNkZWZpbmUgT1BFTl9TT1VORF9TWVNURU0KLQotI2lmIGRlZmluZWQoX19ocHV4KSAmJiAhZGVmaW5lZChfSFBVWF9TT1VSQ0UpCi0jCWVycm9yICItRF9IUFVYX1NPVVJDRSBtdXN0IGJlIHVzZWQgd2hlbiBjb21waWxpbmcgT1NTIGFwcGxpY2F0aW9ucyIKLSNlbmRpZgotCi0jaWZkZWYgX19ocHV4Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZW5kaWYKLQotI2lmZGVmIGxpbnV4Ci0vKiBJbiBMaW51eCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBjcm9zcyBjb21waWxpbmcgKi8KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2Vsc2UKLSMgaWZkZWYgX19GcmVlQlNEX18KLSMgICAgaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgotIyBlbHNlCi0jICAgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX19TSU9XUgotI2lmIGRlZmluZWQoX19ocHV4KSB8fCAoZGVmaW5lZChfSU9XUikgJiYgKGRlZmluZWQoX0FJWCkgfHwgKCFkZWZpbmVkKHN1bikgJiYgIWRlZmluZWQoc3BhcmMpICYmICFkZWZpbmVkKF9fSU5DaW9jdGxoKSAmJiAhZGVmaW5lZChfX0x5bnhfXykpKSkKLQotLyogCi0gKiBNYWtlIHN1cmUgdGhlIGlvY3RsIG1hY3JvcyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbmVzIGFscmVhZHkgdXNlZAotICogYnkgdGhpcyBvcGVyYXRpbmcgc3lzdGVtLgotICovCi0jZGVmaW5lCVNJT0NQQVJNX01BU0sJSU9DUEFSTV9NQVNLCi0jZGVmaW5lCVNJT0NfVk9JRAlJT0NfVk9JRAotI2RlZmluZQlTSU9DX09VVAlJT0NfT1VUCi0jZGVmaW5lCVNJT0NfSU4JCUlPQ19JTgotI2RlZmluZQlTSU9DX0lOT1VUCUlPQ19JTk9VVAotI2RlZmluZSBfX1NJT0NfU0laRQlfSU9DX1NJWkUKLSNkZWZpbmUgX19TSU9DX0RJUglfSU9DX0RJUgotI2RlZmluZSBfX1NJT0NfTk9ORQlfSU9DX05PTkUKLSNkZWZpbmUgX19TSU9DX1JFQUQJX0lPQ19SRUFECi0jZGVmaW5lIF9fU0lPQ19XUklURQlfSU9DX1dSSVRFCi0jZGVmaW5lCV9fU0lPCQlfSU8KLSNkZWZpbmUJX19TSU9SCQlfSU9SCi0jZGVmaW5lCV9fU0lPVwkJX0lPVwotI2RlZmluZQlfX1NJT1dSCQlfSU9XUgotI2Vsc2UKLQotLyogI2RlZmluZQlTSU9DVFlQRQkJKDB4ZmY8PDgpICovCi0jZGVmaW5lCVNJT0NQQVJNX01BU0sJMHgxZmZmCS8qIHBhcmFtZXRlcnMgbXVzdCBiZSA8IDgxOTIgYnl0ZXMgKi8KLSNkZWZpbmUJU0lPQ19WT0lECTB4MDAwMDAwMDAJLyogbm8gcGFyYW1ldGVycyAqLwotI2RlZmluZQlTSU9DX09VVAkweDIwMDAwMDAwCS8qIGNvcHkgb3V0IHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUJU0lPQ19JTgkJMHg0MDAwMDAwMAkvKiBjb3B5IGluIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUJU0lPQ19JTk9VVAkoU0lPQ19JTnxTSU9DX09VVCkKLQotI2RlZmluZQlfX1NJTyh4LHkpCSgoaW50KShTSU9DX1ZPSUR8KHg8PDgpfHkpKQotI2RlZmluZQlfX1NJT1IoeCx5LHQpCSgoaW50KShTSU9DX09VVHwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKLSNkZWZpbmUJX19TSU9XKHgseSx0KQkoKGludCkoU0lPQ19JTnwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKLSNkZWZpbmUJX19TSU9XUih4LHksdCkJKChpbnQpKFNJT0NfSU5PVVR8KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCi0jZGVmaW5lIF9fU0lPQ19TSVpFKHgpCSgoeD4+MTYpJlNJT0NQQVJNX01BU0spCi0jZGVmaW5lIF9fU0lPQ19ESVIoeCkJKHggJiAweGYwMDAwMDAwKQotI2RlZmluZSBfX1NJT0NfTk9ORQlTSU9DX1ZPSUQKLSNkZWZpbmUgX19TSU9DX1JFQUQJU0lPQ19PVVQKLSNkZWZpbmUgX19TSU9DX1dSSVRFCVNJT0NfSU4KLSMgIGVuZGlmIC8qIF9JT1dSICovCi0jZW5kaWYgLyogIV9fU0lPV1IgKi8KLQotI2RlZmluZSBPU1NfTE9OR05BTUVfU0laRQk2NAotI2RlZmluZSBPU1NfTEFCRUxfU0laRQkJMTYKLSNkZWZpbmUgT1NTX0RFVk5PREVfU0laRQkzMgotdHlwZWRlZiBjaGFyIG9zc19sb25nbmFtZV90W09TU19MT05HTkFNRV9TSVpFXTsKLXR5cGVkZWYgY2hhciBvc3NfbGFiZWxfdFtPU1NfTEFCRUxfU0laRV07Ci10eXBlZGVmIGNoYXIgb3NzX2Rldm5vZGVfdFtPU1NfREVWTk9ERV9TSVpFXTsKLQotI2lmbmRlZiBESVNBQkxFX1NFUVVFTkNFUgotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJT0NUTCBDb21tYW5kcyBmb3IgL2Rldi9zZXF1ZW5jZXIgYW5kIC9kZXYvbXVzaWMgKEFLQSAvZGV2L3NlcXVlbmNlcjIpCi0gKgotICogTm90ZSB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIG9ic29sZXRlIGFuZCBubyBsb25nZXIgZGV2ZWxvcGVkLiBOZXcKLSAqIGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIC9kZXYvbWlkaSBpbnN0ZWFkLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNORENUTF9TRVFfUkVTRVQJCV9fU0lPICAoJ1EnLCAwKQotI2RlZmluZSBTTkRDVExfU0VRX1NZTkMJCQlfX1NJTyAgKCdRJywgMSkKLSNkZWZpbmUgU05EQ1RMX1NZTlRIX0lORk8JCV9fU0lPV1IoJ1EnLCAyLCBzdHJ1Y3Qgc3ludGhfaW5mbykKLSNkZWZpbmUgU05EQ1RMX1NFUV9DVFJMUkFURQkJX19TSU9XUignUScsIDMsIGludCkJLyogU2V0L2dldCB0aW1lciByZXNvbHV0aW9uIChIWikgKi8KLSNkZWZpbmUgU05EQ1RMX1NFUV9HRVRPVVRDT1VOVAkJX19TSU9SICgnUScsIDQsIGludCkKLSNkZWZpbmUgU05EQ1RMX1NFUV9HRVRJTkNPVU5UCQlfX1NJT1IgKCdRJywgNSwgaW50KQotI2RlZmluZSBTTkRDVExfU0VRX1BFUkNNT0RFCQlfX1NJT1cgKCdRJywgNiwgaW50KQotI2RlZmluZSBTTkRDVExfRk1fTE9BRF9JTlNUUgkJX19TSU9XICgnUScsIDcsIHN0cnVjdCBzYmlfaW5zdHJ1bWVudCkJLyogT2Jzb2xldGUuIERvbid0IHVzZSEhISEhISAqLwotI2RlZmluZSBTTkRDVExfU0VRX1RFU1RNSURJCQlfX1NJT1cgKCdRJywgOCwgaW50KQotI2RlZmluZSBTTkRDVExfU0VRX1JFU0VUU0FNUExFUwkJX19TSU9XICgnUScsIDksIGludCkKLSNkZWZpbmUgU05EQ1RMX1NFUV9OUlNZTlRIUwkJX19TSU9SICgnUScsMTAsIGludCkKLSNkZWZpbmUgU05EQ1RMX1NFUV9OUk1JRElTCQlfX1NJT1IgKCdRJywxMSwgaW50KQotI2RlZmluZSBTTkRDVExfTUlESV9JTkZPCQlfX1NJT1dSKCdRJywxMiwgc3RydWN0IG1pZGlfaW5mbykJLyogT0JTT0xFVEUgLSB1c2UgU05EQ1RMX01JRElJTkZPIGluc3RlYWQgKi8KLSNkZWZpbmUgU05EQ1RMX1NFUV9USFJFU0hPTEQJCV9fU0lPVyAoJ1EnLDEzLCBpbnQpCi0jZGVmaW5lIFNORENUTF9TWU5USF9NRU1BVkwJCV9fU0lPV1IoJ1EnLDE0LCBpbnQpCS8qIGluPWRldiMsIG91dD1tZW1zaXplICovCi0jZGVmaW5lIFNORENUTF9GTV80T1BfRU5BQkxFCQlfX1NJT1cgKCdRJywxNSwgaW50KQkvKiBpbj1kZXYjICovCi0jZGVmaW5lIFNORENUTF9TRVFfUEFOSUMJCV9fU0lPICAoJ1EnLDE3KQotI2RlZmluZSBTTkRDVExfU0VRX09VVE9GQkFORAkJX19TSU9XICgnUScsMTgsIHN0cnVjdCBzZXFfZXZlbnRfcmVjKQotI2RlZmluZSBTTkRDVExfU0VRX0dFVFRJTUUJCV9fU0lPUiAoJ1EnLDE5LCBpbnQpCi0jZGVmaW5lIFNORENUTF9TWU5USF9JRAkJCV9fU0lPV1IoJ1EnLDIwLCBzdHJ1Y3Qgc3ludGhfaW5mbykKLSNkZWZpbmUgU05EQ1RMX1NZTlRIX0NPTlRST0wJCV9fU0lPV1IoJ1EnLDIxLCBzdHJ1Y3Qgc3ludGhfY29udHJvbCkKLSNkZWZpbmUgU05EQ1RMX1NZTlRIX1JFTU9WRVNBTVBMRQlfX1NJT1dSKCdRJywyMiwgc3RydWN0IHJlbW92ZV9zYW1wbGUpCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCi0jZGVmaW5lIFNORENUTF9TRVFfVElNSU5HX0VOQUJMRQlfX1NJTyAgKCdRJywgMjMpCS8qIEVuYWJsZSBpbmNvbWluZyBNSURJIHRpbWluZyBtZXNzYWdlcyAqLwotI2RlZmluZSBTTkRDVExfU0VRX0FDVFNFTlNFX0VOQUJMRQlfX1NJTyAgKCdRJywgMjQpCS8qIEVuYWJsZSBpbmNvbWluZyBhY3RpdmUgc2Vuc2luZyBtZXNzYWdlcyAqLwotI2RlZmluZSBTTkRDVExfU0VRX1JUX0VOQUJMRQkJX19TSU8gICgnUScsIDI1KQkvKiBFbmFibGUgb3RoZXIgaW5jb21pbmcgcmVhbHRpbWUgbWVzc2FnZXMgKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc3ludGhfY29udHJvbAotewotICBpbnQgZGV2bm87CQkJLyogU3ludGhlc2l6ZXIgIyAqLwotICBjaGFyIGRhdGFbNDAwMF07CQkvKiBEZXZpY2Ugc3Blc2lmaWMgY29tbWFuZC9kYXRhIHJlY29yZCAqLwotfSBzeW50aF9jb250cm9sOwotCi10eXBlZGVmIHN0cnVjdCByZW1vdmVfc2FtcGxlCi17Ci0gIGludCBkZXZubzsJCQkvKiBTeW50aGVzaXplciAjICovCi0gIGludCBiYW5rbm87CQkJLyogTUlESSBiYW5rICMgKDA9R2VuZXJhbCBNSURJKSAqLwotICBpbnQgaW5zdHJubzsJCQkvKiBNSURJIGluc3RydW1lbnQgbnVtYmVyICovCi19IHJlbW92ZV9zYW1wbGU7Ci0KLXR5cGVkZWYgc3RydWN0IHNlcV9ldmVudF9yZWMKLXsKLSAgdW5zaWduZWQgY2hhciBhcnJbOF07Ci19IHNlcV9ldmVudF9yZWM7Ci0KLSNkZWZpbmUgU05EQ1RMX1RNUl9USU1FQkFTRQkJX19TSU9XUignVCcsIDEsIGludCkKLSNkZWZpbmUgU05EQ1RMX1RNUl9TVEFSVAkJX19TSU8gICgnVCcsIDIpCi0jZGVmaW5lIFNORENUTF9UTVJfU1RPUAkJCV9fU0lPICAoJ1QnLCAzKQotI2RlZmluZSBTTkRDVExfVE1SX0NPTlRJTlVFCQlfX1NJTyAgKCdUJywgNCkKLSNkZWZpbmUgU05EQ1RMX1RNUl9URU1QTwkJX19TSU9XUignVCcsIDUsIGludCkKLSNkZWZpbmUgU05EQ1RMX1RNUl9TT1VSQ0UJCV9fU0lPV1IoJ1QnLCA2LCBpbnQpCi0jCWRlZmluZSBUTVJfSU5URVJOQUwJCTB4MDAwMDAwMDEKLSMJZGVmaW5lIFRNUl9FWFRFUk5BTAkJMHgwMDAwMDAwMgotIwkJZGVmaW5lIFRNUl9NT0RFX01JREkJMHgwMDAwMDAxMAotIwkJZGVmaW5lIFRNUl9NT0RFX0ZTSwkweDAwMDAwMDIwCi0jCQlkZWZpbmUgVE1SX01PREVfQ0xTCTB4MDAwMDAwNDAKLSMJCWRlZmluZSBUTVJfTU9ERV9TTVBURQkweDAwMDAwMDgwCi0jZGVmaW5lIFNORENUTF9UTVJfTUVUUk9OT01FCQlfX1NJT1cgKCdUJywgNywgaW50KQotI2RlZmluZSBTTkRDVExfVE1SX1NFTEVDVAkJX19TSU9XICgnVCcsIDgsIGludCkKLQotLyoKLSAqIFNhbXBsZSBsb2FkaW5nIG1lY2hhbmlzbSBmb3IgaW50ZXJuYWwgc3ludGhlc2l6ZXJzICgvZGV2L3NlcXVlbmNlcikKLSAqIChmb3IgdGhlIC5QQVQgZm9ybWF0KS4KLSAqLwotCi1zdHJ1Y3QgcGF0Y2hfaW5mbwotewotICB1bnNpZ25lZCBzaG9ydCBrZXk7CQkvKiBVc2UgV0FWRV9QQVRDSCBoZXJlICovCi0jZGVmaW5lIFdBVkVfUEFUQ0gJX1BBVENIS0VZKDB4MDQpCi0jZGVmaW5lIEdVU19QQVRDSAlXQVZFX1BBVENICi0jZGVmaW5lIFdBVkVGUk9OVF9QQVRDSCBfUEFUQ0hLRVkoMHgwNikKLQotICBzaG9ydCBkZXZpY2Vfbm87CQkvKiBTeW50aGVzaXplciBudW1iZXIgKi8KLSAgc2hvcnQgaW5zdHJfbm87CQkvKiBNaWRpIHBnbSMgKi8KLQotICB1bnNpZ25lZCBpbnQgbW9kZTsKLS8qCi0gKiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIHNhbWUgZm9ybWF0IHRoYW4gdGhlIEdVUyAuUEFUCi0gKiBmaWxlcwotICovCi0jZGVmaW5lIFdBVkVfMTZfQklUUwkweDAxCS8qIGJpdCAwID0gOCBvciAxNiBiaXQgd2F2ZSBkYXRhLiAqLwotI2RlZmluZSBXQVZFX1VOU0lHTkVECTB4MDIJLyogYml0IDEgPSBTaWduZWQgLSBVbnNpZ25lZCBkYXRhLiAqLwotI2RlZmluZSBXQVZFX0xPT1BJTkcJMHgwNAkvKiBiaXQgMiA9IGxvb3BpbmcgZW5hYmxlZC0xLiAqLwotI2RlZmluZSBXQVZFX0JJRElSX0xPT1AJMHgwOAkvKiBiaXQgMyA9IFNldCBpcyBiaWRpcmVjdGlvbmFsIGxvb3BpbmcuICovCi0jZGVmaW5lIFdBVkVfTE9PUF9CQUNLCTB4MTAJLyogYml0IDQgPSBTZXQgaXMgbG9vcGluZyBiYWNrd2FyZC4gKi8KLSNkZWZpbmUgV0FWRV9TVVNUQUlOX09OCTB4MjAJLyogYml0IDUgPSBUdXJuIHN1c3RhaW5pbmcgb24uIChFbnYuIHB0cy4gMykgKi8KLSNkZWZpbmUgV0FWRV9FTlZFTE9QRVMJMHg0MAkvKiBiaXQgNiA9IEVuYWJsZSBlbnZlbG9wZXMgLSAxICovCi0jZGVmaW5lIFdBVkVfRkFTVF9SRUxFQVNFIDB4ODAJLyogYml0IDcgPSBTaHV0IG9mZiBpbW1lZGlhdGVseSBhZnRlciBub3RlIG9mZiAqLwotICAvKiAgKHVzZSB0aGUgZW52X3JhdGUvZW52X29mZnMgZmllbGRzKS4gKi8KLS8qIExpbnV4IHNwZWNpZmljIGJpdHMgKi8KLSNkZWZpbmUgV0FWRV9WSUJSQVRPCTB4MDAwMTAwMDAJLyogVGhlIHZpYnJhdG8gaW5mbyBpcyB2YWxpZCAqLwotI2RlZmluZSBXQVZFX1RSRU1PTE8JMHgwMDAyMDAwMAkvKiBUaGUgdHJlbW9sbyBpbmZvIGlzIHZhbGlkICovCi0jZGVmaW5lIFdBVkVfU0NBTEUJMHgwMDA0MDAwMAkvKiBUaGUgc2NhbGluZyBpbmZvIGlzIHZhbGlkICovCi0jZGVmaW5lIFdBVkVfRlJBQ1RJT05TCTB4MDAwODAwMDAJLyogRnJhY3Rpb24gaW5mb3JtYXRpb24gaXMgdmFsaWQgKi8KLS8qIFJlc2VydmVkIGJpdHMgKi8KLSNkZWZpbmUgV0FWRV9ST00JMHg0MDAwMDAwMAkvKiBGb3IgZnV0dXJlIHVzZSAqLwotI2RlZmluZSBXQVZFX01VTEFXCTB4MjAwMDAwMDAJLyogRm9yIGZ1dHVyZSB1c2UgKi8KLS8qIE90aGVyIGJpdHMgbXVzdCBiZSB6ZXJvZWQgKi8KLQotICBpbnQgbGVuOwkJCS8qIFNpemUgb2YgdGhlIHdhdmUgZGF0YSBpbiBieXRlcyAqLwotICBpbnQgbG9vcF9zdGFydCwgbG9vcF9lbmQ7CS8qIEJ5dGUgb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbm5pbmcgKi8KLQotLyogCi0gKiBUaGUgYmFzZV9mcmVxIGFuZCBiYXNlX25vdGUgZmllbGRzIGFyZSB1c2VkIHdoZW4gY29tcHV0aW5nIHRoZQotICogcGxheWJhY2sgc3BlZWQgZm9yIGEgbm90ZS4gVGhlIGJhc2Vfbm90ZSBkZWZpbmVzIHRoZSB0b25lIGZyZXF1ZW5jeQotICogd2hpY2ggaXMgaGVhcmQgaWYgdGhlIHNhbXBsZSBpcyBwbGF5ZWQgdXNpbmcgdGhlIGJhc2VfZnJlcSBhcyB0aGUKLSAqIHBsYXliYWNrIHNwZWVkLgotICoKLSAqIFRoZSBsb3dfbm90ZSBhbmQgaGlnaF9ub3RlIGZpZWxkcyBkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbm90ZQotICogZnJlcXVlbmNpZXMgZm9yIHdoaWNoIHRoaXMgc2FtcGxlIGlzIHZhbGlkLiBJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUKLSAqIG1vcmUgdGhhbiBvbmUgc2FtcGxlcyBmb3IgYW4gaW5zdHJ1bWVudCBudW1iZXIgYXQgdGhlIHNhbWUgdGltZS4gVGhlCi0gKiBsb3dfbm90ZSBhbmQgaGlnaF9ub3RlIGZpZWxkcyBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIG1vc3Qgc3VpdGFibGUgb25lLgotICoKLSAqIFRoZSBmaWVsZHMgYmFzZV9ub3RlLCBoaWdoX25vdGUgYW5kIGxvd19ub3RlIHNob3VsZCBjb250YWluCi0gKiB0aGUgbm90ZSBmcmVxdWVuY3kgbXVsdGlwbGllZCBieSAxMDAwLiBGb3IgZXhhbXBsZSB2YWx1ZSBmb3IgdGhlCi0gKiBtaWRkbGUgQSBpcyA0NDAqMTAwMC4KLSAqLwotCi0gIHVuc2lnbmVkIGludCBiYXNlX2ZyZXE7Ci0gIHVuc2lnbmVkIGludCBiYXNlX25vdGU7Ci0gIHVuc2lnbmVkIGludCBoaWdoX25vdGU7Ci0gIHVuc2lnbmVkIGludCBsb3dfbm90ZTsKLSAgaW50IHBhbm5pbmc7CQkJLyogLTEyOD1sZWZ0LCAxMjc9cmlnaHQgKi8KLSAgaW50IGRldHVuaW5nOwotCi0gIC8qIEVudmVsb3BlLiBFbmFibGVkIGJ5IG1vZGUgYml0IFdBVkVfRU5WRUxPUEVTICAqLwotICB1bnNpZ25lZCBjaGFyIGVudl9yYXRlWzZdOwkvKiBHVVMgSFcgcmFtcGluZyByYXRlICovCi0gIHVuc2lnbmVkIGNoYXIgZW52X29mZnNldFs2XTsJLyogMjU1ID09IDEwMCUgKi8KLQotICAvKiAKLSAgICogVGhlIHRyZW1vbG8sIHZpYnJhdG8gYW5kIHNjYWxlIGluZm8gYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgKiBFbmFibGUgYnkgc2V0dGluZyB0aGUgbW9kZSBiaXRzIFdBVkVfVFJFTU9MTywgV0FWRV9WSUJSQVRPIG9yCi0gICAqIFdBVkVfU0NBTEUKLSAgICovCi0KLSAgdW5zaWduZWQgY2hhciB0cmVtb2xvX3N3ZWVwOwotICB1bnNpZ25lZCBjaGFyIHRyZW1vbG9fcmF0ZTsKLSAgdW5zaWduZWQgY2hhciB0cmVtb2xvX2RlcHRoOwotCi0gIHVuc2lnbmVkIGNoYXIgdmlicmF0b19zd2VlcDsKLSAgdW5zaWduZWQgY2hhciB2aWJyYXRvX3JhdGU7Ci0gIHVuc2lnbmVkIGNoYXIgdmlicmF0b19kZXB0aDsKLQotICBpbnQgc2NhbGVfZnJlcXVlbmN5OwotICB1bnNpZ25lZCBpbnQgc2NhbGVfZmFjdG9yOwkvKiBmcm9tIDAgdG8gMjA0OCBvciAwIHRvIDIgKi8KLQotICBpbnQgdm9sdW1lOwotICBpbnQgZnJhY3Rpb25zOwotICBpbnQgcmVzZXJ2ZWQxOwotICBpbnQgc3BhcmVbMl07Ci0gIGNoYXIgZGF0YVsxXTsJCQkvKiBUaGUgd2F2ZWZvcm0gZGF0YSBzdGFydHMgaGVyZSAqLwotfTsKLQotc3RydWN0IHN5c2V4X2luZm8KLXsKLSAgc2hvcnQga2V5OwkJCS8qIFVzZSBTWVNFWF9QQVRDSCBvciBNQVVJX1BBVENIIGhlcmUgKi8KLSNkZWZpbmUgU1lTRVhfUEFUQ0gJX1BBVENIS0VZKDB4MDUpCi0jZGVmaW5lIE1BVUlfUEFUQ0gJX1BBVENIS0VZKDB4MDYpCi0gIHNob3J0IGRldmljZV9ubzsJCS8qIFN5bnRoZXNpemVyIG51bWJlciAqLwotICBpbnQgbGVuOwkJCS8qIFNpemUgb2YgdGhlIHN5c2V4IGRhdGEgaW4gYnl0ZXMgKi8KLSAgdW5zaWduZWQgY2hhciBkYXRhWzFdOwkvKiBTeXNleCBkYXRhIHN0YXJ0cyBoZXJlICovCi19OwotCi0vKgotICogL2Rldi9zZXF1ZW5jZXIgaW5wdXQgZXZlbnRzLgotICoKLSAqIFRoZSBkYXRhIHdyaXR0ZW4gdG8gdGhlIC9kZXYvc2VxdWVuY2VyIGlzIGEgc3RyZWFtIG9mIGV2ZW50cy4gRXZlbnRzCi0gKiBhcmUgcmVjb3JkcyBvZiA0IG9yIDggYnl0ZXMuIFRoZSBmaXJzdCBieXRlIGRlZmluZXMgdGhlIHNpemUuIAotICogQW55IG51bWJlciBvZiBldmVudHMgY2FuIGJlIHdyaXR0ZW4gd2l0aCBhIHdyaXRlIGNhbGwuIFRoZXJlCi0gKiBpcyBhIHNldCBvZiBtYWNyb3MgZm9yIHNlbmRpbmcgdGhlc2UgZXZlbnRzLiBVc2UgdGhlc2UgbWFjcm9zIGlmIHlvdQotICogd2FudCB0byBtYXhpbWl6ZSBwb3J0YWJpbGl0eSBvZiB5b3VyIHByb2dyYW0uCi0gKgotICogRXZlbnRzIFNFUV9XQUlULCBTRVFfTUlESVBVVEMgYW5kIFNFUV9FQ0hPLiBBcmUgYWxzbyBpbnB1dCBldmVudHMuCi0gKiAoQWxsIGlucHV0IGV2ZW50cyBhcmUgY3VycmVudGx5IDQgYnl0ZXMgbG9uZy4gQmUgcHJlcGFyZWQgdG8gc3VwcG9ydAotICogOCBieXRlIGV2ZW50cyBhbHNvLiBJZiB5b3UgcmVjZWl2ZSBhbnkgZXZlbnQgaGF2aW5nIGZpcnN0IGJ5dGUgPj0gMTI4LAotICogaXQncyBhIDggYnl0ZSBldmVudC4KLSAqCi0gKiBUaGUgZXZlbnRzIGFyZSBkb2N1bWVudGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgotICoKLSAqIE5vcm1hbCBldmVudHMgKDQgYnl0ZXMpCi0gKiBUaGVyZSBpcyBhbHNvIGEgOCBieXRlIHZlcnNpb24gb2YgbW9zdCBvZiB0aGUgNCBieXRlIGV2ZW50cy4gVGhlCi0gKiA4IGJ5dGUgb25lIGlzIHJlY29tbWVuZGVkLgotICoKLSAqIE5PVEUhIEFsbCA0IGJ5dGUgZXZlbnRzIGFyZSBub3cgb2Jzb2xldGUuIEFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHdyaXRlCi0gKiAgICAgICB0aGVtLiBIb3dldmVyIDQgYnl0ZSBldmVudHMgYXJlIHN0aWxsIHVzZWQgYXMgaW5wdXRzIGZyb20KLSAqICAgICAgIC9kZXYvc2VxdWVuY2VyICgvZGV2L211c2ljIHVzZXMgb25seSA4IGJ5dGUgb25lcykuCi0gKi8KLSNkZWZpbmUgU0VRX05PVEVPRkYJCTAKLSNkZWZpbmUgU0VRX0ZNTk9URU9GRgkJU0VRX05PVEVPRkYJLyogSnVzdCBvbGQgbmFtZSAqLwotI2RlZmluZSBTRVFfTk9URU9OCQkxCi0jZGVmaW5lCVNFUV9GTU5PVEVPTgkJU0VRX05PVEVPTgotI2RlZmluZSBTRVFfV0FJVAkJVE1SX1dBSVRfQUJTCi0jZGVmaW5lIFNFUV9QR01DSEFOR0UJCTMKLSNkZWZpbmUgU0VRX0ZNUEdNQ0hBTkdFCQlTRVFfUEdNQ0hBTkdFCi0jZGVmaW5lIFNFUV9TWU5DVElNRVIJCVRNUl9TVEFSVAotI2RlZmluZSBTRVFfTUlESVBVVEMJCTUKLSNkZWZpbmUgU0VRX0RSVU1PTgkJNgkJLyoqKiBPQlNPTEVURSAqKiovCi0jZGVmaW5lIFNFUV9EUlVNT0ZGCQk3CQkvKioqIE9CU09MRVRFICoqKi8KLSNkZWZpbmUgU0VRX0VDSE8JCVRNUl9FQ0hPCS8qIEZvciBzeW5jaGluZyBwcm9ncmFtcyB3aXRoIG91dHB1dCAqLwotI2RlZmluZSBTRVFfQUZURVJUT1VDSAkJOQotI2RlZmluZSBTRVFfQ09OVFJPTExFUgkJMTAKLSNkZWZpbmUgU0VRX0JBTEFOQ0UJCTExCi0jZGVmaW5lIFNFUV9WT0xNT0RFICAgICAgICAgICAgIDEyCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCU1pZGkgY29udHJvbGxlciBudW1iZXJzCSAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIENvbnRyb2xsZXJzIDAgdG8gMzEgKDB4MDAgdG8gMHgxZikgYW5kCi0gKiAzMiB0byA2MyAoMHgyMCB0byAweDNmKSBhcmUgY29udGludW91cwotICogY29udHJvbGxlcnMuCi0gKiBJbiB0aGUgTUlESSAxLjAgdGhlc2UgY29udHJvbGxlcnMgYXJlIHNlbnQgdXNpbmcKLSAqIHR3byBtZXNzYWdlcy4gQ29udHJvbGxlciBudW1iZXJzIDAgdG8gMzEgYXJlIHVzZWQKLSAqIHRvIHNlbmQgdGhlIE1TQiBhbmQgdGhlIGNvbnRyb2xsZXIgbnVtYmVycyAzMiB0byA2MwotICogYXJlIGZvciB0aGUgTFNCLiBOb3RlIHRoYXQganVzdCA3IGJpdHMgYXJlIHVzZWQgaW4gTUlESSBieXRlcy4KLSAqLwotCi0jZGVmaW5lCSAgIENUTF9CQU5LX1NFTEVDVAkJMHgwMAotI2RlZmluZQkgICBDVExfTU9EV0hFRUwJCQkweDAxCi0jZGVmaW5lICAgIENUTF9CUkVBVEgJCQkweDAyCi0vKgkJdW5kZWZpbmVkCQkweDAzICovCi0jZGVmaW5lICAgIENUTF9GT09UCQkJMHgwNAotI2RlZmluZSAgICBDVExfUE9SVEFNRU5UT19USU1FCQkweDA1Ci0jZGVmaW5lICAgIENUTF9EQVRBX0VOVFJZCQkweDA2Ci0jZGVmaW5lICAgIENUTF9NQUlOX1ZPTFVNRQkJMHgwNwotI2RlZmluZSAgICBDVExfQkFMQU5DRQkJCTB4MDgKLS8qCQl1bmRlZmluZWQJCTB4MDkgKi8KLSNkZWZpbmUgICAgQ1RMX1BBTgkJCTB4MGEKLSNkZWZpbmUgICAgQ1RMX0VYUFJFU1NJT04JCTB4MGIKLS8qCQl1bmRlZmluZWQJCTB4MGMgKi8KLS8qCQl1bmRlZmluZWQJCTB4MGQgKi8KLS8qCQl1bmRlZmluZWQJCTB4MGUgKi8KLS8qCQl1bmRlZmluZWQJCTB4MGYgKi8KLSNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTEJCTB4MTAKLSNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTIJCTB4MTEKLSNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTMJCTB4MTIKLSNkZWZpbmUgICAgQ1RMX0dFTkVSQUxfUFVSUE9TRTQJCTB4MTMKLS8qCQl1bmRlZmluZWQJCTB4MTQgLSAweDFmICovCi0KLS8qCQl1bmRlZmluZWQJCTB4MjAgKi8KLS8qIFRoZSBjb250cm9sbGVyIG51bWJlcnMgMHgyMSB0byAweDNmIGFyZSByZXNlcnZlZCBmb3IgdGhlICovCi0vKiBsZWFzdCBzaWduaWZpY2FudCBieXRlcyBvZiB0aGUgY29udHJvbGxlcnMgMHgwMCB0byAweDFmLiAqLwotLyogVGhlc2UgY29udHJvbGxlcnMgYXJlIG5vdCByZWNvZ25pc2VkIGJ5IHRoZSBkcml2ZXIuICovCi0KLS8qIENvbnRyb2xsZXJzIDY0IHRvIDY5ICgweDQwIHRvIDB4NDUpIGFyZSBvbi9vZmYgc3dpdGNoZXMuICovCi0vKiAwPU9GRiBhbmQgMTI3PU9OIChpbnRlcm1lZGlhdGUgdmFsdWVzIGFyZSBwb3NzaWJsZSkgKi8KLSNkZWZpbmUgICAgQ1RMX0RBTVBFUl9QRURBTAkJMHg0MAotI2RlZmluZSAgICBDVExfU1VTVEFJTgkJCTB4NDAJLyogQWxpYXMgKi8KLSNkZWZpbmUgICAgQ1RMX0hPTEQJCQkweDQwCS8qIEFsaWFzICovCi0jZGVmaW5lICAgIENUTF9QT1JUQU1FTlRPCQkweDQxCi0jZGVmaW5lICAgIENUTF9TT1NURU5VVE8JCTB4NDIKLSNkZWZpbmUgICAgQ1RMX1NPRlRfUEVEQUwJCTB4NDMKLS8qCQl1bmRlZmluZWQJCTB4NDQgKi8KLSNkZWZpbmUgICAgQ1RMX0hPTEQyCQkJMHg0NQotLyoJCXVuZGVmaW5lZAkJMHg0NiAtIDB4NGYgKi8KLQotI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFNQkJMHg1MAotI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFNgkJMHg1MQotI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFNwkJMHg1MgotI2RlZmluZSAgICBDVExfR0VORVJBTF9QVVJQT1NFOAkJMHg1MwotLyoJCXVuZGVmaW5lZAkJMHg1NCAtIDB4NWEgKi8KLSNkZWZpbmUgICAgQ1RMX0VYVF9FRkZfREVQVEgJCTB4NWIKLSNkZWZpbmUgICAgQ1RMX1RSRU1PTE9fREVQVEgJCTB4NWMKLSNkZWZpbmUgICAgQ1RMX0NIT1JVU19ERVBUSAkJMHg1ZAotI2RlZmluZSAgICBDVExfREVUVU5FX0RFUFRICQkweDVlCi0jZGVmaW5lICAgIENUTF9DRUxFU1RFX0RFUFRICQkweDVlCS8qIEFsaWFzIGZvciB0aGUgYWJvdmUgb25lICovCi0jZGVmaW5lICAgIENUTF9QSEFTRVJfREVQVEgJCTB4NWYKLSNkZWZpbmUgICAgQ1RMX0RBVEFfSU5DUkVNRU5UCQkweDYwCi0jZGVmaW5lICAgIENUTF9EQVRBX0RFQ1JFTUVOVAkJMHg2MQotI2RlZmluZSAgICBDVExfTk9OUkVHX1BBUk1fTlVNX0xTQgkweDYyCi0jZGVmaW5lICAgIENUTF9OT05SRUdfUEFSTV9OVU1fTVNCCTB4NjMKLSNkZWZpbmUgICAgQ1RMX1JFR0lTVF9QQVJNX05VTV9MU0IJMHg2NAotI2RlZmluZSAgICBDVExfUkVHSVNUX1BBUk1fTlVNX01TQgkweDY1Ci0vKgkJdW5kZWZpbmVkCQkweDY2IC0gMHg3OCAqLwotLyoJCXJlc2VydmVkCQkweDc5IC0gMHg3ZiAqLwotCi0vKiBQc2V1ZG8gY29udHJvbGxlcnMgKG5vdCBtaWRpIGNvbXBhdGlibGUpICovCi0jZGVmaW5lICAgIENUUkxfUElUQ0hfQkVOREVSCQkyNTUKLSNkZWZpbmUgICAgQ1RSTF9QSVRDSF9CRU5ERVJfUkFOR0UJMjU0Ci0jZGVmaW5lICAgIENUUkxfRVhQUkVTU0lPTgkJMjUzCS8qIE9ic29sZXRlICovCi0jZGVmaW5lICAgIENUUkxfTUFJTl9WT0xVTUUJCTI1MgkvKiBPYnNvbGV0ZSAqLwotCi0vKgotICogVm9sdW1lIG1vZGUgZGVmaW5lcyBob3cgdm9sdW1lcyBhcmUgdXNlZAotICovCi0KLSNkZWZpbmUgVk9MX01FVEhPRF9BREFHSU8JMQotI2RlZmluZSBWT0xfTUVUSE9EX0xJTkVBUgkyCi0KLS8qCi0gKiBOb3RlISBTRVFfV0FJVCwgU0VRX01JRElQVVRDIGFuZCBTRVFfRUNITyBhcmUgdXNlZCBhbHNvIGFzCi0gKgkgaW5wdXQgZXZlbnRzLgotICovCi0KLS8qCi0gKiBFdmVudCBjb2RlcyAweGYwIHRvIDB4ZmMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgZXh0ZW5zaW9ucy4KLSAqLwotCi0jZGVmaW5lIFNFUV9GVUxMU0laRQkJMHhmZAkvKiBMb25nIGV2ZW50cyAqLwotLyoKLSAqIFNFUV9GVUxMU0laRSBldmVudHMgYXJlIHVzZWQgZm9yIGxvYWRpbmcgcGF0Y2hlcy9zYW1wbGVzIHRvIHRoZQotICogc3ludGhlc2l6ZXIgZGV2aWNlcy4gVGhlc2UgZXZlbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlcgotICogb2YgdGhlIGFzc29jaWF0ZWQgc3ludGhlc2l6ZXIgZGV2aWNlLiBUaGVyZSBpcyBubyBsaW1pdCB0byB0aGUgc2l6ZQotICogb2YgdGhlIGV4dGVuZGVkIGV2ZW50cy4gVGhlc2UgZXZlbnRzIGFyZSBub3QgcXVldWVkIGJ1dCBleGVjdXRlZAotICogaW1tZWRpYXRlbHkgd2hlbiB0aGUgd3JpdGUoKSBpcyBjYWxsZWQgKGV4ZWN1dGlvbiBjYW4gdGFrZSBzZXZlcmFsCi0gKiBzZWNvbmRzIG9mIHRpbWUpLiAKLSAqCi0gKiBXaGVuIGEgU0VRX0ZVTExTSVpFIG1lc3NhZ2UgaXMgd3JpdHRlbiB0byB0aGUgZGV2aWNlLCBpdCBtdXN0Ci0gKiBiZSB3cml0dGVuIHVzaW5nIGV4YWN0bHkgb25lIHdyaXRlKCkgY2FsbC4gT3RoZXIgZXZlbnRzIGNhbm5vdAotICogYmUgbWl4ZWQgdG8gdGhlIHNhbWUgd3JpdGUuCi0gKgkKLSAqIEZvciBGTSBzeW50aHMgKFlNMzgxMi9PUEwzKSB1c2Ugc3RydWN0IHNiaV9pbnN0cnVtZW50IGFuZCB3cml0ZSBpdCB0byB0aGUgCi0gKiAvZGV2L3NlcXVlbmNlci4gRG9uJ3Qgd3JpdGUgb3RoZXIgZGF0YSB0b2dldGhlciB3aXRoIHRoZSBpbnN0cnVtZW50IHN0cnVjdHVyZQotICogU2V0IHRoZSBrZXkgZmllbGQgb2YgdGhlIHN0cnVjdHVyZSB0byBGTV9QQVRDSC4gVGhlIGRldmljZSBmaWVsZCBpcyB1c2VkIHRvCi0gKiByb3V0ZSB0aGUgcGF0Y2ggdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlLgotICoKLSAqIEZvciB3YXZlIHRhYmxlIHVzZSBzdHJ1Y3QgcGF0Y2hfaW5mby4gSW5pdGlhbGl6ZSB0aGUga2V5IGZpZWxkCi0gKiB0byBXQVZFX1BBVENILgotICovCi0jZGVmaW5lIFNFUV9QUklWQVRFCQkweGZlCS8qIExvdyBsZXZlbCBIVyBkZXBlbmRlbnQgZXZlbnRzICg4IGJ5dGVzKSAqLwotI2RlZmluZSBTRVFfRVhURU5ERUQJCTB4ZmYJLyogRXh0ZW5kZWQgZXZlbnRzICg4IGJ5dGVzKSBPQlNPTEVURSAqLwotCi0vKgotICogUmVjb3JkIGZvciBGTSBwYXRjaGVzCi0gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNiaV9pbnN0cl9kYXRhWzMyXTsKLQotc3RydWN0IHNiaV9pbnN0cnVtZW50Ci17Ci0gIHVuc2lnbmVkIHNob3J0IGtleTsJCS8qIEZNX1BBVENIIG9yIE9QTDNfUEFUQ0ggKi8KLSNkZWZpbmUgRk1fUEFUQ0gJX1BBVENIS0VZKDB4MDEpCi0jZGVmaW5lIE9QTDNfUEFUQ0gJX1BBVENIS0VZKDB4MDMpCi0gIHNob3J0IGRldmljZTsJCQkvKiAgU3ludGgjICgwLTQpICAgICovCi0gIGludCBjaGFubmVsOwkJCS8qICBQcm9ncmFtIyB0byBiZSBpbml0aWFsaXplZCAgKi8KLSAgc2JpX2luc3RyX2RhdGEgb3BlcmF0b3JzOwkvKiAgUmVnaXN0ZXIgc2V0dGluZ3MgZm9yIG9wZXJhdG9yIGNlbGxzICguU0JJIGZvcm1hdCkgICovCi19OwotCi1zdHJ1Y3Qgc3ludGhfaW5mbwotewkJCQkvKiBSZWFkIG9ubHkgKi8KLSAgY2hhciBuYW1lWzMwXTsKLSAgaW50IGRldmljZTsJCQkvKiAwLU4uIElOSVRJQUxJWkUgQkVGT1JFIENBTExJTkcgKi8KLSAgaW50IHN5bnRoX3R5cGU7Ci0jZGVmaW5lIFNZTlRIX1RZUEVfRk0JCQkwCi0jZGVmaW5lIFNZTlRIX1RZUEVfU0FNUExFCQkxCi0jZGVmaW5lIFNZTlRIX1RZUEVfTUlESQkJCTIJLyogTWlkaSBpbnRlcmZhY2UgKi8KLQotICBpbnQgc3ludGhfc3VidHlwZTsKLSNkZWZpbmUgRk1fVFlQRV9BRExJQgkJCTB4MDAKLSNkZWZpbmUgRk1fVFlQRV9PUEwzCQkJMHgwMQotI2RlZmluZSBNSURJX1RZUEVfTVBVNDAxCQkweDQwMQotCi0jZGVmaW5lIFNBTVBMRV9UWVBFX0JBU0lDCQkweDEwCi0jZGVmaW5lIFNBTVBMRV9UWVBFX0dVUwkJCVNBTVBMRV9UWVBFX0JBU0lDCi0jZGVmaW5lIFNBTVBMRV9UWVBFX1dBVkVGUk9OVCAgIAkweDExCi0KLSAgaW50IHBlcmNfbW9kZTsJCS8qIE5vIGxvbmdlciBzdXBwb3J0ZWQgKi8KLSAgaW50IG5yX3ZvaWNlczsKLSAgaW50IG5yX2RydW1zOwkJCS8qIE9ic29sZXRlIGZpZWxkICovCi0gIGludCBpbnN0cl9iYW5rX3NpemU7Ci0gIHVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7Ci0jZGVmaW5lIFNZTlRIX0NBUF9QRVJDTU9ERQkweDAwMDAwMDAxCS8qIE5vIGxvbmdlciB1c2VkICovCi0jZGVmaW5lIFNZTlRIX0NBUF9PUEwzCQkweDAwMDAwMDAyCS8qIFNldCBpZiBPUEwzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBTWU5USF9DQVBfSU5QVVQJCTB4MDAwMDAwMDQJLyogSW5wdXQgKE1JREkpIGRldmljZSAqLwotICBpbnQgZHVtbWllc1sxOV07CQkvKiBSZXNlcnZlIHNwYWNlICovCi19OwotCi1zdHJ1Y3Qgc291bmRfdGltZXJfaW5mbwotewotICBjaGFyIG5hbWVbMzJdOwotICBpbnQgY2FwczsKLX07Ci0KLXN0cnVjdCBtaWRpX2luZm8JCS8qIE9CU09MRVRFICovCi17Ci0gIGNoYXIgbmFtZVszMF07Ci0gIGludCBkZXZpY2U7CQkJLyogMC1OLiBJTklUSUFMSVpFIEJFRk9SRSBDQUxMSU5HICovCi0gIHVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7CS8qIFRvIGJlIGRlZmluZWQgbGF0ZXIgKi8KLSAgaW50IGRldl90eXBlOwotICBpbnQgZHVtbWllc1sxOF07CQkvKiBSZXNlcnZlIHNwYWNlICovCi19OwotCi0vKgotICogTGV2ZWwgMiBldmVudCB0eXBlcyBmb3IgL2Rldi9zZXF1ZW5jZXIKLSAqLwotCi0vKgotICogVGhlIDQgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIGJ5dGUgMCBzcGVjaWZ5IHRoZSBjbGFzcyBvZgotICogdGhlIGV2ZW50OiAKLSAqCi0gKgkweDhYID0gc3lzdGVtIGxldmVsIGV2ZW50cywKLSAqCTB4OVggPSBkZXZpY2UvcG9ydCBzcGVjaWZpYyBldmVudHMsIGV2ZW50WzFdID0gZGV2aWNlL3BvcnQsCi0gKgkJVGhlIGxhc3QgNCBiaXRzIGdpdmUgdGhlIHN1YnR5cGU6Ci0gKgkJCTB4MDIJPSBDaGFubmVsIGV2ZW50IChldmVudFszXSA9IGNobikuCi0gKgkJCTB4MDEJPSBub3RlIGV2ZW50IChldmVudFs0XSA9IG5vdGUpLgotICoJCQkoMHgwMSBpcyBub3QgdXNlZCBhbG9uZSBidXQgYWx3YXlzIHdpdGggYml0IDB4MDIpLgotICoJICAgICAgIGV2ZW50WzJdID0gTUlESSBtZXNzYWdlIGNvZGUgKDB4ODA9bm90ZSBvZmYgZXRjLikKLSAqCi0gKi8KLQotI2RlZmluZSBFVl9TRVFfTE9DQUwJCTB4ODAKLSNkZWZpbmUgRVZfVElNSU5HCQkweDgxCi0jZGVmaW5lIEVWX0NITl9DT01NT04JCTB4OTIKLSNkZWZpbmUgRVZfQ0hOX1ZPSUNFCQkweDkzCi0jZGVmaW5lIEVWX1NZU0VYCQkweDk0Ci0jZGVmaW5lIEVWX1NZU1RFTQkJMHg5NQkvKiBNSURJIHN5c3RlbSBhbmQgcmVhbCB0aW1lIG1lc3NhZ2VzIChpbnB1dCBvbmx5KSAqLwotLyoKLSAqIEV2ZW50IHR5cGVzIDIwMCB0byAyMjAgYXJlIHJlc2VydmVkIGZvciBhcHBsaWNhdGlvbiB1c2UuCi0gKiBUaGVzZSBudW1iZXJzIHdpbGwgbm90IGJlIHVzZWQgYnkgdGhlIGRyaXZlci4KLSAqLwotCi0vKgotICogRXZlbnRzIGZvciBldmVudCB0eXBlIEVWX0NITl9WT0lDRQotICovCi0KLSNkZWZpbmUgTUlESV9OT1RFT0ZGCQkweDgwCi0jZGVmaW5lIE1JRElfTk9URU9OCQkweDkwCi0jZGVmaW5lIE1JRElfS0VZX1BSRVNTVVJFCTB4QTAKLQotLyoKLSAqIEV2ZW50cyBmb3IgZXZlbnQgdHlwZSBFVl9DSE5fQ09NTU9OCi0gKi8KLQotI2RlZmluZSBNSURJX0NUTF9DSEFOR0UJCTB4QjAKLSNkZWZpbmUgTUlESV9QR01fQ0hBTkdFCQkweEMwCi0jZGVmaW5lIE1JRElfQ0hOX1BSRVNTVVJFCTB4RDAKLSNkZWZpbmUgTUlESV9QSVRDSF9CRU5ECQkweEUwCi0KLSNkZWZpbmUgTUlESV9TWVNURU1fUFJFRklYCTB4RjAKLQotLyoKLSAqIFRpbWVyIGV2ZW50IHR5cGVzCi0gKi8KLSNkZWZpbmUgVE1SX1dBSVRfUkVMCQkxCS8qIFRpbWUgcmVsYXRpdmUgdG8gdGhlIHByZXYgdGltZSAqLwotI2RlZmluZSBUTVJfV0FJVF9BQlMJCTIJLyogQWJzb2x1dGUgdGltZSBzaW5jZSBUTVJfU1RBUlQgKi8KLSNkZWZpbmUgVE1SX1NUT1AJCTMKLSNkZWZpbmUgVE1SX1NUQVJUCQk0Ci0jZGVmaW5lIFRNUl9DT05USU5VRQkJNQotI2RlZmluZSBUTVJfVEVNUE8JCTYKLSNkZWZpbmUgVE1SX0VDSE8JCTgKLSNkZWZpbmUgVE1SX0NMT0NLCQk5CS8qIE1JREkgY2xvY2sgKi8KLSNkZWZpbmUgVE1SX1NQUAkJCTEwCS8qIFNvbmcgcG9zaXRpb24gcG9pbnRlciAqLwotI2RlZmluZSBUTVJfVElNRVNJRwkJMTEJLyogVGltZSBzaWduYXR1cmUgKi8KLQotLyoKLSAqCUxvY2FsIGV2ZW50IHR5cGVzCi0gKi8KLSNkZWZpbmUgTE9DTF9TVEFSVEFVRElPCQkxCi0jZGVmaW5lIExPQ0xfU1RBUlRBVURJTzIJMgotI2RlZmluZSBMT0NMX1NUQVJUQVVESU8zCTMKLSNkZWZpbmUgTE9DTF9TVEFSVEFVRElPNAk0Ci0KLSNpZiAoIWRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoS0VSTkVMKSAmJiAhZGVmaW5lZChJTktFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkpIHx8IGRlZmluZWQoVVNFX1NFUV9NQUNST1MpCi0vKgotICogU29tZSBjb252ZW5pZW5jZSBtYWNyb3MgdG8gc2ltcGxpZnkgcHJvZ3JhbW1pbmcgb2YgdGhlCi0gKiAvZGV2L3NlcXVlbmNlciBpbnRlcmZhY2UKLSAqCi0gKiBUaGVzZSBtYWNyb3MgZGVmaW5lIHRoZSBBUEkgd2hpY2ggc2hvdWxkIGJlIHVzZWQgd2hlbiBwb3NzaWJsZS4KLSAqLwotI2RlZmluZSBTRVFfREVDTEFSRUJVRigpCQlTRVFfVVNFX0VYVEJVRigpCi0KLXZvaWQgc2VxYnVmX2R1bXAgKHZvaWQpOwkvKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcHJvdmlkZWQgYnkgcHJvZ3JhbXMgKi8KLQotRVhURVJOQyBpbnQgT1NTX2luaXQgKGludCBzZXFmZCwgaW50IGJ1Zmxlbik7Ci1FWFRFUk5DIHZvaWQgT1NTX3NlcWJ1Zl9kdW1wIChpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci1FWFRFUk5DIHZvaWQgT1NTX3NlcV9hZHZidWYgKGludCBsZW4sIGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKLUVYVEVSTkMgdm9pZCBPU1Nfc2VxX25lZWRidWYgKGludCBsZW4sIGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJICAgICAgaW50IGJ1Zmxlbik7Ci1FWFRFUk5DIHZvaWQgT1NTX3BhdGNoX2NhY2hpbmcgKGludCBkZXYsIGludCBjaG4sIGludCBwYXRjaCwgaW50IGZkLAotCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci1FWFRFUk5DIHZvaWQgT1NTX2RydW1fY2FjaGluZyAoaW50IGRldiwgaW50IGNobiwgaW50IHBhdGNoLCBpbnQgZmQsCi0JCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKLUVYVEVSTkMgdm9pZCBPU1Nfd3JpdGVfcGF0Y2ggKGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKLUVYVEVSTkMgaW50IE9TU193cml0ZV9wYXRjaDIgKGludCBmZCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKLQotI2RlZmluZSBTRVFfUE1fREVGSU5FUyBpbnQgX19mb29fYmFyX19fCi0jaWZkZWYgT1NTTElCCi0jICBkZWZpbmUgU0VRX1VTRV9FWFRCVUYoKSBcCi0JCUVYVEVSTkMgdW5zaWduZWQgY2hhciAqX3NlcWJ1ZjsgXAotCQlFWFRFUk5DIGludCBfc2VxYnVmbGVuO0VYVEVSTkMgaW50IF9zZXFidWZwdHIKLSMgIGRlZmluZSBTRVFfREVGSU5FQlVGKGxlbikgU0VRX1VTRV9FWFRCVUYoKTtzdGF0aWMgaW50IF9yZXF1ZXN0ZWRfc2VxYnVmbGVuPWxlbgotIyAgZGVmaW5lIF9TRVFfQURWQlVGKGxlbikgT1NTX3NlcV9hZHZidWYobGVuLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKLSMgIGRlZmluZSBfU0VRX05FRURCVUYobGVuKSBPU1Nfc2VxX25lZWRidWYobGVuLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKLSMgIGRlZmluZSBTRVFfRFVNUEJVRigpIE9TU19zZXFidWZfZHVtcChzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKLQotIyAgZGVmaW5lIFNFUV9MT0FEX0dNSU5TVFIoZGV2LCBpbnN0cikgXAotCQlPU1NfcGF0Y2hfY2FjaGluZyhkZXYsIC0xLCBpbnN0ciwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCi0jICBkZWZpbmUgU0VRX0xPQURfR01EUlVNKGRldiwgZHJ1bSkgXAotCQlPU1NfZHJ1bV9jYWNoaW5nKGRldiwgLTEsIGRydW0sIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQotI2Vsc2UgLyogIU9TU0xJQiAqLwotCi0jICBkZWZpbmUgU0VRX0xPQURfR01JTlNUUihkZXYsIGluc3RyKQotIyAgZGVmaW5lIFNFUV9MT0FEX0dNRFJVTShkZXYsIGRydW0pCi0KLSMgIGRlZmluZSBTRVFfVVNFX0VYVEJVRigpIFwKLQkJRVhURVJOQyB1bnNpZ25lZCBjaGFyIF9zZXFidWZbXTsgXAotCQlFWFRFUk5DIGludCBfc2VxYnVmbGVuO0VYVEVSTkMgaW50IF9zZXFidWZwdHIKLQotI2lmbmRlZiBVU0VfU0lNUExFX01BQ1JPUwotLyogU2FtcGxlIHNlcWJ1Zl9kdW1wKCkgaW1wbGVtZW50YXRpb246Ci0gKgotICoJU0VRX0RFRklORUJVRiAoMjA0OCk7CS0tIERlZmluZXMgYSBidWZmZXIgZm9yIDIwNDggYnl0ZXMKLSAqCi0gKglpbnQgc2VxZmQ7CQktLSBUaGUgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3NlcXVlbmNlci4KLSAqCi0gKgl2b2lkCi0gKglzZXFidWZfZHVtcCAoKQotICoJewotICoJICBpZiAoX3NlcWJ1ZnB0cikKLSAqCSAgICBpZiAod3JpdGUgKHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmcHRyKSA9PSAtMSkKLSAqCSAgICAgIHsKLSAqCQlwZXJyb3IgKCJ3cml0ZSAvZGV2L3NlcXVlbmNlciIpOwotICoJCWV4aXQgKC0xKTsKLSAqCSAgICAgIH0KLSAqCSAgX3NlcWJ1ZnB0ciA9IDA7Ci0gKgl9Ci0gKi8KLQotI2RlZmluZSBTRVFfREVGSU5FQlVGKGxlbikgXAotCXVuc2lnbmVkIGNoYXIgX3NlcWJ1ZltsZW5dOyBpbnQgX3NlcWJ1ZmxlbiA9IGxlbjtpbnQgX3NlcWJ1ZnB0ciA9IDAKLSNkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikgXAotCWlmICgoX3NlcWJ1ZnB0cisobGVuKSkgPiBfc2VxYnVmbGVuKSBzZXFidWZfZHVtcCgpCi0jZGVmaW5lIF9TRVFfQURWQlVGKGxlbikgX3NlcWJ1ZnB0ciArPSBsZW4KLSNkZWZpbmUgU0VRX0RVTVBCVUYgc2VxYnVmX2R1bXAKLSNlbHNlCi0vKgotICogVGhpcyB2YXJpYXRpb24gb2YgdGhlIHNlcXVlbmNlciBtYWNyb3MgaXMgdXNlZCBqdXN0IHRvIGZvcm1hdCBvbmUgZXZlbnQKLSAqIHVzaW5nIGZpeGVkIGJ1ZmZlci4KLSAqIAotICogVGhlIHByb2dyYW0gdXNpbmcgdGhlIG1hY3JvIGxpYnJhcnkgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3MgYmVmb3JlCi0gKiB1c2luZyB0aGlzIGxpYnJhcnkuCi0gKgotICogI2RlZmluZSBfc2VxYnVmIAkJIG5hbWUgb2YgdGhlIGJ1ZmZlciAodW5zaWduZWQgY2hhcltdKSAKLSAqICNkZWZpbmUgX1NFUV9BRFZCVUYobGVuKQkgSWYgdGhlIGFwcGxpYyBuZWVkcyB0byBrbm93IHRoZSBleGFjdAotICoJCQkJIHNpemUgb2YgdGhlIGV2ZW50LCB0aGlzIG1hY3JvIGNhbiBiZSB1c2VkLgotICoJCQkJIE90aGVyd2lzZSB0aGlzIG11c3QgYmUgZGVmaW5lZCBhcyBlbXB0eS4KLSAqICNkZWZpbmUgX3NlcWJ1ZnB0cgkJIERlZmluZSB0aGUgbmFtZSBvZiBpbmRleCB2YXJpYWJsZSBvciAwIGlmCi0gKgkJCQkgbm90IHJlcXVpcmVkLiAKLSAqLwotI2RlZmluZSBfU0VRX05FRURCVUYobGVuKQkvKiBlbXB0eSAqLwotI2VuZGlmCi0jZW5kaWYgLyogIU9TU0xJQiAqLwotCi0jZGVmaW5lIFNFUV9WT0xVTUVfTU9ERShkZXYsIG1vZGUpIFwKLQkJCQl7X1NFUV9ORUVEQlVGKDgpO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gU0VRX0VYVEVOREVEO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfVk9MTU9ERTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGRldik7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IChtb2RlKTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gMDtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gMDtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gMDtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDtcCi0JCQkJX1NFUV9BRFZCVUYoOCk7fQotCi0vKgotICogTWlkaSB2b2ljZSBtZXNzYWdlcwotICovCi0KLSNkZWZpbmUgX0NITl9WT0lDRShkZXYsIGV2ZW50LCBjaG4sIG5vdGUsIHBhcm0pIFwKLQkJCQl7X1NFUV9ORUVEQlVGKDgpO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfQ0hOX1ZPSUNFO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZGV2KTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGV2ZW50KTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChub3RlKTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKHBhcm0pO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAoMCk7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis3XSA9IDA7XAotCQkJCV9TRVFfQURWQlVGKDgpO30KLQotI2RlZmluZSBTRVFfU1RBUlRfTk9URShkZXYsIGNobiwgbm90ZSwgdm9sKSBcCi0JCQlfQ0hOX1ZPSUNFKGRldiwgTUlESV9OT1RFT04sIGNobiwgbm90ZSwgdm9sKQotCi0jZGVmaW5lIFNFUV9TVE9QX05PVEUoZGV2LCBjaG4sIG5vdGUsIHZvbCkgXAotCQkJX0NITl9WT0lDRShkZXYsIE1JRElfTk9URU9GRiwgY2huLCBub3RlLCB2b2wpCi0KLSNkZWZpbmUgU0VRX0tFWV9QUkVTU1VSRShkZXYsIGNobiwgbm90ZSwgcHJlc3N1cmUpIFwKLQkJCV9DSE5fVk9JQ0UoZGV2LCBNSURJX0tFWV9QUkVTU1VSRSwgY2huLCBub3RlLCBwcmVzc3VyZSkKLQotLyoKLSAqIE1pZGkgY2hhbm5lbCBtZXNzYWdlcwotICovCi0KLSNkZWZpbmUgX0NITl9DT01NT04oZGV2LCBldmVudCwgY2huLCBwMSwgcDIsIHcxNCkgXAotCQkJCXtfU0VRX05FRURCVUYoOCk7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9DSE5fQ09NTU9OO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZGV2KTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGV2ZW50KTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChwMSk7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IChwMik7XAotCQkJCSooc2hvcnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKHcxNCk7XAotCQkJCV9TRVFfQURWQlVGKDgpO30KLS8qCi0gKiBTRVFfU1lTRVggcGVybWl0cyBzZW5kaW5nIG9mIHN5c2V4IG1lc3NhZ2VzLiAoSXQgbWF5IGxvb2sgdGhhdCBpdCBwZXJtaXRzCi0gKiBzZW5kaW5nIGFueSBNSURJIGJ5dGVzIGJ1dCBpdCdzIGFic29sdXRlbHkgbm90IHBvc3NpYmxlLiBUcnlpbmcgdG8gZG8KLSAqIHNvIF93aWxsXyBjYXVzZSBwcm9ibGVtcyB3aXRoIE1QVTQwMSBpbnRlbGxpZ2VudCBtb2RlKS4KLSAqCi0gKiBTeXNleCBtZXNzYWdlcyBhcmUgc2VudCBpbiBibG9ja3Mgb2YgMSB0byA2IGJ5dGVzLiBMb25nZXIgbWVzc2FnZXMgbXVzdCBiZSAKLSAqIHNlbnQgYnkgY2FsbGluZyBTRVFfU1lTRVgoKSBzZXZlcmFsIHRpbWVzICh0aGVyZSBtdXN0IGJlIG5vIG90aGVyIGV2ZW50cwotICogYmV0d2VlbiB0aGVtKS4gRmlyc3Qgc3lzZXggZnJhZ21lbnQgbXVzdCBoYXZlIDB4ZjAgaW4gdGhlIGZpcnN0IGJ5dGUKLSAqIGFuZCB0aGUgbGFzdCBieXRlIChidWZbbGVuLTFdIG9mIHRoZSBsYXN0IGZyYWdtZW50IG11c3QgYmUgMHhmNy4gTm8gYnl0ZQotICogYmV0d2VlbiB0aGVzZSBzeXNleCBzdGFydCBhbmQgZW5kIG1hcmtlcnMgY2Fubm90IGJlIGxhcmdlciB0aGFuIDB4N2YuIEFsc28KLSAqIGxlbmd0aHMgb2YgZWFjaCBmcmFnbWVudHMgKGV4Y2VwdCB0aGUgbGFzdCBvbmUpIG11c3QgYmUgNi4KLSAqCi0gKiBCcmVha2luZyB0aGUgYWJvdmUgcnVsZXMgbWF5IHdvcmsgd2l0aCBzb21lIE1JREkgcG9ydHMgYnV0IGlzIGxpa2VseSB0bwotICogY2F1c2UgZmF0YWwgcHJvYmxlbXMgd2l0aCBzb21lIG90aGVyIGRldmljZXMgKHN1Y2ggYXMgTVBVNDAxKS4KLSAqLwotI2RlZmluZSBTRVFfU1lTRVgoZGV2LCBidWYsIGxlbikgXAotCQkJCXtpbnQgaWksIGxsPShsZW4pOyBcCi0JCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZnA9YnVmO1wKLQkJCQkgaWYgKGxsPjYpbGw9NjtcCi0JCQkJX1NFUV9ORUVEQlVGKDgpO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfU1lTRVg7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChkZXYpO1wKLQkJCQlmb3IoaWk9MDtpaTxsbDtpaSsrKVwKLQkJCQkgICBfc2VxYnVmW19zZXFidWZwdHIraWkrMl0gPSBidWZwW2lpXTtcCi0JCQkJZm9yKGlpPWxsO2lpPDY7aWkrKylcCi0JCQkJICAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gMHhmZjtcCi0JCQkJX1NFUV9BRFZCVUYoOCk7fQotCi0jZGVmaW5lIFNFUV9DSE5fUFJFU1NVUkUoZGV2LCBjaG4sIHByZXNzdXJlKSBcCi0JCV9DSE5fQ09NTU9OKGRldiwgTUlESV9DSE5fUFJFU1NVUkUsIGNobiwgcHJlc3N1cmUsIDAsIDApCi0KLSNkZWZpbmUgU0VRX1NFVF9QQVRDSCBTRVFfUEdNX0NIQU5HRQotI2lmZGVmIE9TU0xJQgotIyAgIGRlZmluZSBTRVFfUEdNX0NIQU5HRShkZXYsIGNobiwgcGF0Y2gpIFwKLQkJe09TU19wYXRjaF9jYWNoaW5nKGRldiwgY2huLCBwYXRjaCwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pOyBcCi0JCSBfQ0hOX0NPTU1PTihkZXYsIE1JRElfUEdNX0NIQU5HRSwgY2huLCBwYXRjaCwgMCwgMCk7fQotI2Vsc2UKLSMgICBkZWZpbmUgU0VRX1BHTV9DSEFOR0UoZGV2LCBjaG4sIHBhdGNoKSBcCi0JCV9DSE5fQ09NTU9OKGRldiwgTUlESV9QR01fQ0hBTkdFLCBjaG4sIHBhdGNoLCAwLCAwKQotI2VuZGlmCi0KLSNkZWZpbmUgU0VRX0NPTlRST0woZGV2LCBjaG4sIGNvbnRyb2xsZXIsIHZhbHVlKSBcCi0JCV9DSE5fQ09NTU9OKGRldiwgTUlESV9DVExfQ0hBTkdFLCBjaG4sIGNvbnRyb2xsZXIsIDAsIHZhbHVlKQotCi0jZGVmaW5lIFNFUV9CRU5ERVIoZGV2LCBjaG4sIHZhbHVlKSBcCi0JCV9DSE5fQ09NTU9OKGRldiwgTUlESV9QSVRDSF9CRU5ELCBjaG4sIDAsIDAsIHZhbHVlKQotCi0jZGVmaW5lIFNFUV9WMl9YX0NPTlRST0woZGV2LCB2b2ljZSwgY29udHJvbGxlciwgdmFsdWUpCVwKLQkJCQl7X1NFUV9ORUVEQlVGKDgpO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHJdID0gU0VRX0VYVEVOREVEO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfQ09OVFJPTExFUjtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGRldik7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9ICh2b2ljZSk7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChjb250cm9sbGVyKTtcCi0JCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKCh2YWx1ZSkmMHhmZik7XAotCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICgodmFsdWU+PjgpJjB4ZmYpO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwO1wKLQkJCQlfU0VRX0FEVkJVRig4KTt9Ci0vKgotICogVGhlIGZvbGxvd2luZyA1IG1hY3JvcyBhcmUgaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQgYW5kIG9ic29sZXRlLgotICogVXNlIFNFUV9CRU5ERVIgYW5kIFNFUV9DT05UUk9MICh3aXRoIHByb3BlciBjb250cm9sbGVyKSBpbnN0ZWFkLgotICovCi0jZGVmaW5lIFNFUV9QSVRDSEJFTkQoZGV2LCB2b2ljZSwgdmFsdWUpIFwKLQlTRVFfVjJfWF9DT05UUk9MKGRldiwgdm9pY2UsIENUUkxfUElUQ0hfQkVOREVSLCB2YWx1ZSkKLSNkZWZpbmUgU0VRX0JFTkRFUl9SQU5HRShkZXYsIHZvaWNlLCB2YWx1ZSkgXAotCVNFUV9WMl9YX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RSTF9QSVRDSF9CRU5ERVJfUkFOR0UsIHZhbHVlKQotI2RlZmluZSBTRVFfRVhQUkVTU0lPTihkZXYsIHZvaWNlLCB2YWx1ZSkgXAotCVNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9FWFBSRVNTSU9OLCB2YWx1ZSoxMjgpCi0jZGVmaW5lIFNFUV9NQUlOX1ZPTFVNRShkZXYsIHZvaWNlLCB2YWx1ZSkgXAotCVNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9NQUlOX1ZPTFVNRSwgKHZhbHVlKjE2MzgzKS8xMDApCi0jZGVmaW5lIFNFUV9QQU5OSU5HKGRldiwgdm9pY2UsIHBvcykgXAotCVNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9QQU4sIChwb3MrMTI4KSAvIDIpCi0KLS8qCi0gKiBUaW1pbmcgYW5kIHN5bmNyb25pemF0aW9uIG1hY3JvcwotICovCi0KLSNkZWZpbmUgX1RJTUVSX0VWRU5UKGV2LCBwYXJtKQl7X1NFUV9ORUVEQlVGKDgpO1wKLQkJCSAJX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfVElNSU5HOyBcCi0JCQkgCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChldik7IFwKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAwO1wKLQkJCQlfc2VxYnVmW19zZXFidWZwdHIrM10gPSAwO1wKLQkJCSAJKih1bnNpZ25lZCBpbnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKHBhcm0pOyBcCi0JCQkJX1NFUV9BRFZCVUYoOCk7fQotCi0jZGVmaW5lIFNFUV9TVEFSVF9USU1FUigpCQlfVElNRVJfRVZFTlQoVE1SX1NUQVJULCAwKQotI2RlZmluZSBTRVFfU1RPUF9USU1FUigpCQlfVElNRVJfRVZFTlQoVE1SX1NUT1AsIDApCi0jZGVmaW5lIFNFUV9DT05USU5VRV9USU1FUigpCQlfVElNRVJfRVZFTlQoVE1SX0NPTlRJTlVFLCAwKQotI2RlZmluZSBTRVFfV0FJVF9USU1FKHRpY2tzKQkJX1RJTUVSX0VWRU5UKFRNUl9XQUlUX0FCUywgdGlja3MpCi0jZGVmaW5lIFNFUV9ERUxUQV9USU1FKHRpY2tzKQkJX1RJTUVSX0VWRU5UKFRNUl9XQUlUX1JFTCwgdGlja3MpCi0jZGVmaW5lIFNFUV9FQ0hPX0JBQ0soa2V5KQkJX1RJTUVSX0VWRU5UKFRNUl9FQ0hPLCBrZXkpCi0jZGVmaW5lIFNFUV9TRVRfVEVNUE8odmFsdWUpCQlfVElNRVJfRVZFTlQoVE1SX1RFTVBPLCB2YWx1ZSkKLSNkZWZpbmUgU0VRX1NPTkdQT1MocG9zKQkJX1RJTUVSX0VWRU5UKFRNUl9TUFAsIHBvcykKLSNkZWZpbmUgU0VRX1RJTUVfU0lHTkFUVVJFKHNpZykJCV9USU1FUl9FVkVOVChUTVJfVElNRVNJRywgc2lnKQotCi0vKgotICogTG9jYWwgY29udHJvbCBldmVudHMKLSAqLwotCi0jZGVmaW5lIF9MT0NBTF9FVkVOVChldiwgcGFybSkJCXtfU0VRX05FRURCVUYoOCk7XAotCQkJCSAJX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfU0VRX0xPQ0FMOyBcCi0JCQkJIAlfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZXYpOyBcCi0JCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IDA7XAotCQkJCQlfc2VxYnVmW19zZXFidWZwdHIrM10gPSAwO1wKLQkJCQkgCSoodW5zaWduZWQgaW50ICopJl9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChwYXJtKTsgXAotCQkJCQlfU0VRX0FEVkJVRig4KTt9Ci0KLSNkZWZpbmUgU0VRX1BMQVlBVURJTyhkZXZtYXNrKQkJX0xPQ0FMX0VWRU5UKExPQ0xfU1RBUlRBVURJTywgZGV2bWFzaykKLSNkZWZpbmUgU0VRX1BMQVlBVURJTzIoZGV2bWFzaykJCV9MT0NBTF9FVkVOVChMT0NMX1NUQVJUQVVESU8yLCBkZXZtYXNrKQotI2RlZmluZSBTRVFfUExBWUFVRElPMyhkZXZtYXNrKQkJX0xPQ0FMX0VWRU5UKExPQ0xfU1RBUlRBVURJTzMsIGRldm1hc2spCi0jZGVmaW5lIFNFUV9QTEFZQVVESU80KGRldm1hc2spCQlfTE9DQUxfRVZFTlQoTE9DTF9TVEFSVEFVRElPNCwgZGV2bWFzaykKLS8qCi0gKiBFdmVudHMgZm9yIHRoZSBsZXZlbCAxIGludGVyZmFjZSBvbmx5IAotICovCi0KLSNkZWZpbmUgU0VRX01JRElPVVQoZGV2aWNlLCBieXRlKQl7X1NFUV9ORUVEQlVGKDQpO1wKLQkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9NSURJUFVUQztcCi0JCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChieXRlKTtcCi0JCQkJCV9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXZpY2UpO1wKLQkJCQkJX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDtcCi0JCQkJCV9TRVFfQURWQlVGKDQpO30KLQotLyoKLSAqIFBhdGNoIGxvYWRpbmcuCi0gKi8KLSNpZmRlZiBPU1NMSUIKLSMgICBkZWZpbmUgU0VRX1dSUEFUQ0gocGF0Y2h4LCBsZW4pIFwKLQkJT1NTX3dyaXRlX3BhdGNoKHNlcWZkLCAoY2hhciopKHBhdGNoeCksIGxlbikKLSMgICBkZWZpbmUgU0VRX1dSUEFUQ0gyKHBhdGNoeCwgbGVuKSBcCi0JCU9TU193cml0ZV9wYXRjaDIoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKQotI2Vsc2UKLSMgICBkZWZpbmUgU0VRX1dSUEFUQ0gocGF0Y2h4LCBsZW4pIFwKLQkJe2lmIChfc2VxYnVmcHRyKSBTRVFfRFVNUEJVRigpO1wKLQkJIGlmICh3cml0ZShzZXFmZCwgKGNoYXIqKShwYXRjaHgpLCBsZW4pPT0tMSkgXAotCQkgICAgcGVycm9yKCJXcml0ZSBwYXRjaDogL2Rldi9zZXF1ZW5jZXIiKTt9Ci0jICAgZGVmaW5lIFNFUV9XUlBBVENIMihwYXRjaHgsIGxlbikgXAotCQkoU0VRX0RVTVBCVUYoKSwgd3JpdGUoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKSkKLSNlbmRpZgotCi0jZW5kaWYKLSNlbmRpZiAvKiBpZm5kZWYgRElTQUJMRV9TRVFVRU5DRVIgKi8KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpb2N0bCBjb21tYW5kcyBmb3IgdGhlIC9kZXYvbWlkaSMjIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNORENUTF9NSURJX1BSRVRJTUUJX19TSU9XUignbScsIDAsIGludCkKLQotI2lmIDAKLS8qCi0gKiBUaGUgU05EQ1RMX01JRElfTVBVTU9ERSBhbmQgU05EQ1RMX01JRElfTVBVQ01EIGNhbGxzCi0gKiBhcmUgY29tcGxldGVseSBvYnNvbGV0ZS4gVGhlIGhhcmR3YXJlIGRldmljZSAoTVBVLTQwMSAiaW50ZWxsaWdlbnQgbW9kZSIKLSAqIGFuZCBjb21wYXRpYmxlcykgaGFzIGRpc2FwcGVhcmVkIGZyb20gdGhlIG1hcmtldCAxMCB5ZWFycyBhZ28gc28gdGhlcmUgCi0gKiBpcyBubyBuZWVkIGZvciB0aGlzIHN0dWZmLiBUaGUgTVBVLTQwMSAiVUFSVCIgbW9kZSBkZXZpY2VzIGRvbid0IHN1cHBvcnQKLSAqIHRoaXMgc3R1ZmYuCi0gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHVuc2lnbmVkIGNoYXIgY21kOwotICBjaGFyIG5yX2FyZ3MsIG5yX3JldHVybnM7Ci0gIHVuc2lnbmVkIGNoYXIgZGF0YVszMF07Ci19IG1wdV9jb21tYW5kX3JlYzsKLQotI2RlZmluZSBTTkRDVExfTUlESV9NUFVNT0RFCV9fU0lPV1IoJ20nLCAxLCBpbnQpCi0jZGVmaW5lIFNORENUTF9NSURJX01QVUNNRAlfX1NJT1dSKCdtJywgMiwgbXB1X2NvbW1hbmRfcmVjKQotI2VuZGlmCi0KLS8qCi0gKiBTTkRDVExfTUlESV9NVENJTlBVVCB0dXJucyBvbiBhIG1vZGUgd2hlcmUgT1NTIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cwotICogTVRDIHF1YXJ0ZXIgZnJhbWUgbWVzc2FnZXMgKEYxIHh4KSB0byB0aGUgaW5wdXQuCi0gKiBUaGUgYXJndW1lbnQgaXMgdGhlIE1UQyBtb2RlOgotICoKLSAqIAktMSA9IFR1cm4gTVRDIG1lc3NhZ2VzIE9GRiAoZGVmYXVsdCkKLSAqCTI0ID0gMjQgRlBTIAotICoJMjUgPSAyNSBGUFMgCi0gKgkyOSA9IDMwIEZQUyBkcm9wIGZyYW1lCi0gKgkzMCA9IDMwIEZQUyAKLSAqCi0gKiBOb3RlIHRoYXQgMjUgRlBTIG1vZGUgaXMgcHJvYmFibHkgdGhlIG9ubHkgbW9kZSB0aGF0IGlzIHN1cHBvcnRlZC4gT3RoZXIKLSAqIG1vZGVzIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZSB2ZXJzaW9ucyBvZiBPU1MsIDI1IEZQUyBpcyBoYW5keSAKLSAqIGJlY2F1c2UgaXQgZ2VuZXJhdGVzIDI1KjQ9MTAwIHF1YXJ0ZXIgZnJhbWUgbWVzc2FnZXMgcGVyIHNlY29uZCB3aGljaAotICogbWF0Y2hlcyB0aGUgdXN1YWwgMTAwIEhaIHN5c3RlbSB0aW1lciByYXRlKS4KLSAqCi0gKiBUaGUgcXVhcnRlciBmcmFtZSB0aW1lciB3aWxsIGJlIHJlc2V0IHRvIDA6MDA6MDA6MDAuMCBhdCB0aGUgbW9tZW50IHRoaXMKLSAqIGlvY3RsIGlzIG1hZGUuCi0gKi8KLSNkZWZpbmUgU05EQ1RMX01JRElfTVRDSU5QVVQJX19TSU9XUignbScsIDMsIGludCkKLQotLyoKLSAqIE1UQy9TTVBURSB0aW1lIGNvZGUgcmVjb3JkIChmb3IgZnV0dXJlIHVzZSkKLSAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgdW5zaWduZWQgY2hhciBob3VycywgbWludXRlcywgc2Vjb25kcywgZnJhbWVzLCBxZnJhbWVzOwotICBjaGFyIGRpcmVjdGlvbjsKLSNkZWZpbmUgTVRDX0RJUl9TVE9QUEVECQkgMAotI2RlZmluZSBNVENfRElSX0ZPUldBUkQJCSAxCi0jZGVmaW5lIE1UQ19ESVJfQkFDS1dBUkQJLTEKLSAgdW5zaWduZWQgY2hhciB0aW1lX2NvZGVfdHlwZTsKLSAgdW5zaWduZWQgaW50IGZsYWdzOwotfSBvc3NfbXRjX2RhdGFfdDsKLQotI2RlZmluZSBTTkRDVExfTUlESV9TRVRNT0RFCV9fU0lPV1IoJ20nLCA2LCBpbnQpCi0jCWRlZmluZSBNSURJX01PREVfVFJBRElUSU9OQUwJMAotIwlkZWZpbmUgTUlESV9NT0RFX1RJTUVECQkxCS8qIElucHV0IHRpbWVzIGFyZSBpbiBNSURJIHRpY2tzICovCi0jCWRlZmluZSBNSURJX01PREVfVElNRURfQUJTICAJMgkvKiBJbnB1dCB0aW1lcyBhcmUgYWJzb2x1dGUgKHVzZWNzKSAqLwotCi0vKgotICogUGFja2V0IGhlYWRlciBmb3IgTUlESV9NT0RFX1RJTUVEIGFuZCBNSURJX01PREVfVElNRURfQUJTCi0gKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG9zc19taWRpX3RpbWVfdDsJLyogVmFyaWFibGUgdHlwZSBmb3IgTUlESSB0aW1lIChjbG9jayB0aWNrcykgKi8KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgaW50IG1hZ2ljOwkJCS8qIEluaXRpYWxpemUgdG8gTUlESV9IRFJfTUFHSUMgKi8KLSNkZWZpbmUgTUlESV9IRFJfTUFHSUMJLTEKLSAgdW5zaWduZWQgc2hvcnQgZXZlbnRfdHlwZTsKLSNkZWZpbmUgTUlESV9FVl9XUklURQkJCTAJLyogV3JpdGUgb3IgcmVhZCAod2l0aCBwYXlsb2FkKSAqLwotI2RlZmluZSBNSURJX0VWX1RFTVBPCQkJMQotI2RlZmluZSBNSURJX0VWX0VDSE8JCQkyCi0jZGVmaW5lIE1JRElfRVZfU1RBUlQJCQkzCi0jZGVmaW5lIE1JRElfRVZfU1RPUAkJCTQKLSNkZWZpbmUgTUlESV9FVl9DT05USU5VRQkJNQotI2RlZmluZSBNSURJX0VWX1hQUkVTU1dSSVRFCQk2Ci0jZGVmaW5lIE1JRElfRVZfVElNRUJBU0UJCTcKLSNkZWZpbmUgTUlESV9FVl9ERVZDVEwJCQk4CS8qIERldmljZSBjb250cm9sIHJlYWQvd3JpdGUgKi8KLSAgdW5zaWduZWQgc2hvcnQgb3B0aW9uczsKLSNkZWZpbmUgTUlESV9PUFRfTk9ORQkJCTB4MDAwMAotI2RlZmluZSBNSURJX09QVF9USU1FRAkJCTB4MDAwMQotI2RlZmluZSBNSURJX09QVF9DT05USU5VQVRJT04JCTB4MDAwMgotI2RlZmluZSBNSURJX09QVF9VU0VDVElNRQkJMHgwMDA0CS8qIFRpbWUgaXMgYWJzb2x1dGUgKGluIHVzZWNzKSAqLwotI2RlZmluZSBNSURJX09QVF9CVVNZCQkJMHgwMDA4CS8qIFJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UgKi8KLSAgb3NzX21pZGlfdGltZV90IHRpbWU7Ci0gIGludCBwYXJtOwotICBpbnQgZmlsbGVyWzNdOwkJLyogRnVyIGZ1dHVyZSBleHBhbnNpb24gLSBpbml0IHRvIHplcm9zICovCi19IG1pZGlfcGFja2V0X2hlYWRlcl90OwotLyogCi0gKiBNSURJX1BBWUxPQURfU0laRSBpcyB0aGUgbWF4aW11bSBzaXplIG9mIG9uZSBNSURJIGlucHV0IGNodW5rLiBJdCBtdXN0IGJlCi0gKiBsZXNzIChvciBlcXVhbCkgdGhhbiAxMDI0IHdoaWNoIGlzIHRoZSByZWFkIHNpemUgcmVjb21tZW5kZWQgaW4gdGhlIAotICogZG9jdW1lbnRhdGlvbi4gVE9ETzogRXhwbGFpbiB0aGlzIGJldHRlci4KLSAqLwotI2RlZmluZSBNSURJX1BBWUxPQURfU0laRQkJMTAwMAotCi10eXBlZGVmIHN0cnVjdAotewotICBtaWRpX3BhY2tldF9oZWFkZXJfdCBoZHI7Ci0gIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFtNSURJX1BBWUxPQURfU0laRV07Ci19IG1pZGlfcGFja2V0X3Q7Ci0KLSNkZWZpbmUgU05EQ1RMX01JRElfVElNRUJBU0UJCV9fU0lPV1IoJ20nLCA3LCBpbnQpCi0jZGVmaW5lIFNORENUTF9NSURJX1RFTVBPCQlfX1NJT1dSKCdtJywgOCwgaW50KQotLyoKLSAqIFVzZXIgbGFuZCBNSURJIHNlcnZlcnMgKHN5bnRocykgY2FuIHVzZSBTTkRDVExfTUlESV9TRVRfTEFURU5DWQotICogdG8gcmVxdWVzdCBNSURJIGV2ZW50cyB0byBiZSBzZW50IHRvIHRoZW0gaW4gYWR2YW5jZS4gVGhlIHBhcmFtZXRlcgotICogKGluIG1pY3Jvc2Vjb25kcykgdGVsbHMgaG93IG11Y2ggYmVmb3JlIHRoZSBldmVudHMgYXJlIHN1Ym1pdHRlZC4KLSAqCi0gKiBUaGlzIGZlYXR1cmUgaXMgb25seSB2YWxpZCBmb3IgbG9vcGJhY2sgZGV2aWNlcyBhbmQgcG9zc2libHkgc29tZSBvdGhlcgotICogdHlwZXMgb2YgdmlydHVhbCBkZXZpY2VzLgotICovCi0jZGVmaW5lIFNORENUTF9NSURJX1NFVF9MQVRFTkNZCQlfX1NJT1cgKCdtJywgOSwgaW50KQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJT0NUTCBjb21tYW5kcyBmb3IgL2Rldi9kc3AKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFNORENUTF9EU1BfSEFMVAkJCV9fU0lPICAoJ1AnLCAwKQotI2RlZmluZSBTTkRDVExfRFNQX1JFU0VUCQlTTkRDVExfRFNQX0hBTFQJLyogT2xkIG5hbWUgKi8KLSNkZWZpbmUgU05EQ1RMX0RTUF9TWU5DCQkJX19TSU8gICgnUCcsIDEpCi0jZGVmaW5lIFNORENUTF9EU1BfU1BFRUQJCV9fU0lPV1IoJ1AnLCAyLCBpbnQpCi0KLS8qIFNORENUTF9EU1BfU1RFUkVPIGlzIG9ic29sZXRlIC0gdXNlIFNORENUTF9EU1BfQ0hBTk5FTFMgaW5zdGVhZCAqLwotI2RlZmluZSBTTkRDVExfRFNQX1NURVJFTwkJX19TSU9XUignUCcsIDMsIGludCkKLS8qIFNORENUTF9EU1BfU1RFUkVPIGlzIG9ic29sZXRlIC0gdXNlIFNORENUTF9EU1BfQ0hBTk5FTFMgaW5zdGVhZCAqLwotCi0jZGVmaW5lIFNORENUTF9EU1BfR0VUQkxLU0laRQkJX19TSU9XUignUCcsIDQsIGludCkKLSNkZWZpbmUgU05EQ1RMX0RTUF9TQU1QTEVTSVpFCQlTTkRDVExfRFNQX1NFVEZNVAotI2RlZmluZSBTTkRDVExfRFNQX0NIQU5ORUxTCQlfX1NJT1dSKCdQJywgNiwgaW50KQotI2RlZmluZSBTTkRDVExfRFNQX1BPU1QJCQlfX1NJTyAgKCdQJywgOCkKLSNkZWZpbmUgU05EQ1RMX0RTUF9TVUJESVZJREUJCV9fU0lPV1IoJ1AnLCA5LCBpbnQpCi0jZGVmaW5lIFNORENUTF9EU1BfU0VURlJBR01FTlQJCV9fU0lPV1IoJ1AnLDEwLCBpbnQpCi0KLS8qIEF1ZGlvIGRhdGEgZm9ybWF0cyAoTm90ZSEgVTg9OCBhbmQgUzE2X0xFPTE2IGZvciBjb21wYXRpYmlsaXR5KSAqLwotI2RlZmluZSBTTkRDVExfRFNQX0dFVEZNVFMJCV9fU0lPUiAoJ1AnLDExLCBpbnQpCS8qIFJldHVybnMgYSBtYXNrICovCi0jZGVmaW5lIFNORENUTF9EU1BfU0VURk1UCQlfX1NJT1dSKCdQJyw1LCBpbnQpCS8qIFNlbGVjdHMgT05FIGZtdCAqLwotIwlkZWZpbmUgQUZNVF9RVUVSWQkweDAwMDAwMDAwCS8qIFJldHVybiBjdXJyZW50IGZtdCAqLwotIwlkZWZpbmUgQUZNVF9NVV9MQVcJMHgwMDAwMDAwMQotIwlkZWZpbmUgQUZNVF9BX0xBVwkweDAwMDAwMDAyCi0jCWRlZmluZSBBRk1UX0lNQV9BRFBDTQkweDAwMDAwMDA0Ci0jCWRlZmluZSBBRk1UX1U4CQkweDAwMDAwMDA4Ci0jCWRlZmluZSBBRk1UX1MxNl9MRQkweDAwMDAwMDEwCS8qIExpdHRsZSBlbmRpYW4gc2lnbmVkIDE2ICovCi0jCWRlZmluZSBBRk1UX1MxNl9CRQkweDAwMDAwMDIwCS8qIEJpZyBlbmRpYW4gc2lnbmVkIDE2ICovCi0jCWRlZmluZSBBRk1UX1M4CQkweDAwMDAwMDQwCi0jCWRlZmluZSBBRk1UX1UxNl9MRQkweDAwMDAwMDgwCS8qIExpdHRsZSBlbmRpYW4gVTE2ICovCi0jCWRlZmluZSBBRk1UX1UxNl9CRQkweDAwMDAwMTAwCS8qIEJpZyBlbmRpYW4gVTE2ICovCi0jCWRlZmluZSBBRk1UX01QRUcJMHgwMDAwMDIwMAkvKiBNUEVHICgyKSBhdWRpbyAqLwotCi0vKiBBQzMgX2NvbXByZXNzZWRfIGJpdHN0cmVhbXMgKFNlZSBQcm9ncmFtbWVyJ3MgR3VpZGUgZm9yIGRldGFpbHMpLiAqLwotIwlkZWZpbmUgQUZNVF9BQzMJCTB4MDAwMDA0MDAKLS8qIE9nZyBWb3JiaXMgX2NvbXByZXNzZWRfIGJpdCBzdHJlYW1zICovCi0jCWRlZmluZSBBRk1UX1ZPUkJJUwkweDAwMDAwODAwCi0KLS8qIDMyIGJpdCBmb3JtYXRzIChNU0IgYWxpZ25lZCkgZm9ybWF0cyAqLwotIwlkZWZpbmUgQUZNVF9TMzJfTEUJMHgwMDAwMTAwMAotIwlkZWZpbmUgQUZNVF9TMzJfQkUJMHgwMDAwMjAwMAotCi0vKiBSZXNlcnZlZCBmb3IgX25hdGl2ZV8gZW5kaWFuIGRvdWJsZSBwcmVjaXNpb24gSUVFRSBmbG9hdGluZyBwb2ludCAqLwotIwlkZWZpbmUgQUZNVF9GTE9BVAkweDAwMDA0MDAwCi0KLS8qIDI0IGJpdCBmb3JtYXRzIChMU0IgYWxpZ25lZCBpbiAzMiBiaXQgd29yZCkgZm9ybWF0cyAqLwotIwlkZWZpbmUgQUZNVF9TMjRfTEUJMHgwMDAwODAwMAotIwlkZWZpbmUgQUZNVF9TMjRfQkUJMHgwMDAxMDAwMAotCi0vKgotICogUy9QRElGIHJhdyBmb3JtYXQuIEluIHRoaXMgZm9ybWF0IHRoZSBTL1BESUYgZnJhbWVzIChpbmNsdWRpbmcgYWxsCi0gKiBjb250cm9sIGFuZCB1c2VyIGJpdHMpIGFyZSBpbmNsdWRlZCBpbiB0aGUgZGF0YSBzdHJlYW0uIEVhY2ggc2FtcGxlCi0gKiBpcyBzdG9yZWQgaW4gYSAzMiBiaXQgZnJhbWUgKHNlZSBJRUMtOTU4IGZvciBtb3JlIGluZm8pLiBUaGlzIGZvcm1hdAotICogaXMgc3VwcG9ydGVkIGJ5IHZlcnkgZmV3IGRldmljZXMgYW5kIGl0J3Mgb25seSB1c2FibGUgZm9yIHB1cnBvc2VzCi0gKiB3aGVyZSBmdWxsIGFjY2VzcyB0byB0aGUgY29udHJvbC91c2VyIGJpdHMgaXMgcmVxdWlyZWQgKHJlYWwgdGltZSBjb250cm9sKS4KLSAqLwotIwlkZWZpbmUgQUZNVF9TUERJRl9SQVcJMHgwMDAyMDAwMAotCi0vKiAyNCBiaXQgcGFja2VkICgzIGJ5dGUpIGxpdHRsZSBlbmRpYW4gZm9ybWF0IChVU0IgY29tcGF0aWJpbGl0eSkgKi8KLSMJZGVmaW5lIEFGTVRfUzI0X1BBQ0tFRAkweDAwMDQwMDAwCi0KLQotLyoKLSAqIFNvbWUgYmlnIGVuZGlhbi9saXR0bGUgZW5kaWFuIGhhbmRsaW5nIG1hY3JvcyAobmF0aXZlIGVuZGlhbiBhbmQgb3Bwb3NpdGUKLSAqIGVuZGlhbiBmb3JtYXRzKS4gVGhlIHVzYWdlIG9mIHRoZXNlIG1hY3JvcyBpcyBkZXNjcmliZWQgaW4gdGhlIE9TUwotICogUHJvZ3JhbW1lcidzIE1hbnVhbC4KLSAqLwotCi0jaWYgZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKEFJWCkgfHwgZGVmaW5lZChzcGFyYykgfHwgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoUFBDKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSAmJiAhZGVmaW5lZChpMzg2KSAmJiAhZGVmaW5lZChfX2kzODYpICYmICFkZWZpbmVkKF9faTM4Nl9fKQotCi0vKiBCaWcgZW5kaWFuIG1hY2hpbmVzICovCi0jICBkZWZpbmUgX1BBVENIS0VZKGlkKSAoMHhmZDAwfGlkKQotIyAgZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0JFCi0jICBkZWZpbmUgQUZNVF9VMTZfTkUgQUZNVF9VMTZfQkUKLSMgIGRlZmluZSBBRk1UX1MzMl9ORSBBRk1UX1MzMl9CRQotIyAgZGVmaW5lIEFGTVRfUzI0X05FIEFGTVRfUzI0X0JFCi0jICBkZWZpbmUgQUZNVF9TMTZfT0UgQUZNVF9TMTZfTEUKLSMgIGRlZmluZSBBRk1UX1MzMl9PRSBBRk1UX1MzMl9MRQotIyAgZGVmaW5lIEFGTVRfUzI0X09FIEFGTVRfUzI0X0xFCi0jZWxzZQotIyAgZGVmaW5lIF9QQVRDSEtFWShpZCkgKChpZDw8OCl8MHhmZCkKLSMgIGRlZmluZSBBRk1UX1MxNl9ORSBBRk1UX1MxNl9MRQotIyAgZGVmaW5lIEFGTVRfVTE2X05FIEFGTVRfVTE2X0xFCi0jICBkZWZpbmUgQUZNVF9TMzJfTkUgQUZNVF9TMzJfTEUKLSMgIGRlZmluZSBBRk1UX1MyNF9ORSBBRk1UX1MyNF9MRQotIyAgZGVmaW5lIEFGTVRfUzE2X09FIEFGTVRfUzE2X0JFCi0jICBkZWZpbmUgQUZNVF9TMzJfT0UgQUZNVF9TMzJfQkUKLSMgIGRlZmluZSBBRk1UX1MyNF9PRSBBRk1UX1MyNF9CRQotI2VuZGlmCi0vKgotICogQnVmZmVyIHN0YXR1cyBxdWVyaWVzLgotICovCi10eXBlZGVmIHN0cnVjdCBhdWRpb19idWZfaW5mbwotewotICBpbnQgZnJhZ21lbnRzOwkJLyogIyBvZiBhdmFpbGFibGUgZnJhZ21lbnRzIChwYXJ0aWFsbHkgdXNlbmQgb25lcyBub3QgY291bnRlZCkgKi8KLSAgaW50IGZyYWdzdG90YWw7CQkvKiBUb3RhbCAjIG9mIGZyYWdtZW50cyBhbGxvY2F0ZWQgKi8KLSAgaW50IGZyYWdzaXplOwkJCS8qIFNpemUgb2YgYSBmcmFnbWVudCBpbiBieXRlcyAqLwotICBpbnQgYnl0ZXM7CQkJLyogQXZhaWxhYmxlIHNwYWNlIGluIGJ5dGVzIChpbmNsdWRlcyBwYXJ0aWFsbHkgdXNlZCBmcmFnbWVudHMpICovCi0gIC8qIE5vdGUhICdieXRlcycgY291bGQgYmUgbW9yZSB0aGFuIGZyYWdtZW50cypmcmFnc2l6ZSAqLwotfSBhdWRpb19idWZfaW5mbzsKLQotI2RlZmluZSBTTkRDVExfRFNQX0dFVE9TUEFDRQkJX19TSU9SICgnUCcsMTIsIGF1ZGlvX2J1Zl9pbmZvKQotI2RlZmluZSBTTkRDVExfRFNQX0dFVElTUEFDRQkJX19TSU9SICgnUCcsMTMsIGF1ZGlvX2J1Zl9pbmZvKQotI2RlZmluZSBTTkRDVExfRFNQX0dFVENBUFMJCV9fU0lPUiAoJ1AnLDE1LCBpbnQpCi0jCWRlZmluZSBQQ01fQ0FQX1JFVklTSU9OCQkweDAwMDAwMGZmCS8qIEJpdHMgZm9yIHJldmlzaW9uIGxldmVsICgwIHRvIDI1NSkgKi8KLSMJZGVmaW5lIFBDTV9DQVBfRFVQTEVYCQkweDAwMDAwMTAwCS8qIEZ1bGwgZHVwbGV4IHJlY29yZC9wbGF5YmFjayAqLwotIwlkZWZpbmUgUENNX0NBUF9SRUFMVElNRQkJMHgwMDAwMDIwMAkvKiBOb3QgaW4gdXNlICovCi0jCWRlZmluZSBQQ01fQ0FQX0JBVENICQkweDAwMDAwNDAwCS8qIERldmljZSBoYXMgc29tZSBraW5kIG9mICovCi0JCQkJCQkJLyogaW50ZXJuYWwgYnVmZmVycyB3aGljaCBtYXkgKi8KLQkJCQkJCQkvKiBjYXVzZSBzb21lIGRlbGF5cyBhbmQgKi8KLQkJCQkJCQkvKiBkZWNyZWFzZSBwcmVjaXNpb24gb2YgdGltaW5nICovCi0jCWRlZmluZSBQQ01fQ0FQX0NPUFJPQwkJMHgwMDAwMDgwMAkvKiBIYXMgYSBjb3Byb2Nlc3NvciAqLwotCQkJCQkJCS8qIFNvbWV0aW1lcyBpdCdzIGEgRFNQICovCi0JCQkJCQkJLyogYnV0IHVzdWFsbHkgbm90ICovCi0jCWRlZmluZSBQQ01fQ0FQX1RSSUdHRVIJCTB4MDAwMDEwMDAJLyogU3VwcG9ydHMgU0VUVFJJR0dFUiAqLwotIwlkZWZpbmUgUENNX0NBUF9NTUFQCQkweDAwMDAyMDAwCS8qIFN1cHBvcnRzIG1tYXAoKSAqLwotIwlkZWZpbmUgUENNX0NBUF9NVUxUSQkJMHgwMDAwNDAwMAkvKiBTdXBwb3J0cyBtdWx0aXBsZSBvcGVuICovCi0jCWRlZmluZSBQQ01fQ0FQX0JJTkQJCTB4MDAwMDgwMDAJLyogU3VwcG9ydHMgYmluZGluZyB0byBmcm9udC9yZWFyL2NlbnRlci9sZmUgKi8KLSMgICAJZGVmaW5lIFBDTV9DQVBfSU5QVVQJCTB4MDAwMTAwMDAJLyogU3VwcG9ydHMgcmVjb3JkaW5nICovCi0jICAgCWRlZmluZSBQQ01fQ0FQX09VVFBVVAkJMHgwMDAyMDAwMAkvKiBTdXBwb3J0cyBwbGF5YmFjayAqLwotIwlkZWZpbmUgUENNX0NBUF9WSVJUVUFMCQkweDAwMDQwMDAwCS8qIFZpcnR1YWwgZGV2aWNlICovCi0vKiAweDAwMDQwMDAwIGFuZCAweDAwMDgwMDAwIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCi0KLS8qIEFuYWxvZy9kaWdpdGFsIGNvbnRyb2wgY2FwYWJpbGl0aWVzICovCi0jCWRlZmluZSBQQ01fQ0FQX0FOQUxPR09VVAkweDAwMTAwMDAwCi0jCWRlZmluZSBQQ01fQ0FQX0FOQUxPR0lOCQkweDAwMjAwMDAwCi0jCWRlZmluZSBQQ01fQ0FQX0RJR0lUQUxPVVQJMHgwMDQwMDAwMAotIwlkZWZpbmUgUENNX0NBUF9ESUdJVEFMSU4JMHgwMDgwMDAwMAotIwlkZWZpbmUgUENNX0NBUF9BRE1BU0sJCTB4MDBmMDAwMDAKLS8qCi0gKiBOT1RFISAoY2FwYWJpbGl0aWVzICYgUENNX0NBUF9BRE1BU0spPT0wIG1lYW5zIGp1c3QgdGhhdCB0aGUKLSAqIGRpZ2l0YWwvYW5hbG9nIGludGVyZmFjZSBjb250cm9sIGZlYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAKLSAqIGRldmljZS9kcml2ZXIuIEhvd2V2ZXIgdGhlIGRldmljZSBzdGlsbCBzdXBwb3J0cyBhbmFsb2csIGRpZ2l0YWwgb3IKLSAqIGJvdGggaW5wdXRzL291dHB1dHMgKGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlKS4gU2VlIHRoZSBPU1MgUHJvZ3JhbW1lcidzCi0gKiBHdWlkZSBmb3IgZnVsbCBkZXRhaWxzLgotICovCi0jCWRlZmluZSBQQ01fQ0FQX1NIQURPVwkJMHgwMTAwMDAwMAkvKiAiU2hhZG93IiBkZXZpY2UgKi8KLQotLyoKLSAqIFByZWZlcnJlZCBjaGFubmVsIHVzYWdlLiBUaGVzZSBiaXRzIGNhbiBiZSB1c2VkIHRvCi0gKiBnaXZlIHJlY29tbWVuZGF0aW9ucyB0byB0aGUgYXBwbGljYXRpb24uIFVzZWQgYnkgZmV3IGRyaXZlcnMuCi0gKiBGb3IgZXhhbXBsZSBpZiAoKGNhcHMgJiBEU1BfQ0hfTUFTSykgPT0gRFNQX0NIX01PTk8pIG1lYW5zIHRoYXQKLSAqIHRoZSBkZXZpY2Ugd29ya3MgYmVzdCBpbiBtb25vIG1vZGUuIEhvd2V2ZXIgaXQgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuCi0gKiB0aGF0IHRoZSBkZXZpY2UgY2Fubm90IGJlIHVzZWQgaW4gc3RlcmVvLiBUaGVzZSBiaXRzIHNob3VsZCBvbmx5IGJlIHVzZWQKLSAqIGJ5IHNwZWNpYWwgYXBwbGljYXRpb25zIHN1Y2ggYXMgbXVsdGkgdHJhY2sgaGFyZCBkaXNrIHJlY29yZGVycyB0byBmaW5kCi0gKiBvdXQgdGhlIGluaXRpYWwgc2V0dXAuIEhvd2V2ZXIgdGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gb3ZlcnJpZGUgdGhpcwotICogc2VsZWN0aW9uLgotICoKLSAqIFRvIGZpbmQgb3V0IHdoaWNoIG1vZGVzIGFyZSBhY3R1YWxseSBzdXBwb3J0ZWQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCAKLSAqIHRyeSB0byBzZWxlY3QgdGhlbSB1c2luZyBTTkRDVExfRFNQX0NIQU5ORUxTLgotICovCi0jCWRlZmluZSBEU1BfQ0hfTUFTSwkJMHgwNjAwMDAwMAkvKiBNYXNrICovCi0jCWRlZmluZSBEU1BfQ0hfQU5ZCQkweDAwMDAwMDAwCS8qIE5vIHByZWZlcnJlZCBtb2RlICovCi0jCWRlZmluZSBEU1BfQ0hfTU9OTwkJMHgwMjAwMDAwMAotIwlkZWZpbmUgRFNQX0NIX1NURVJFTwkJMHgwNDAwMDAwMAotIwlkZWZpbmUgRFNQX0NIX01VTFRJCQkweDA2MDAwMDAwCS8qIE1vcmUgdGhhbiB0d28gY2hhbm5lbHMgKi8KLQotIwlkZWZpbmUgUENNX0NBUF9ISURERU4JCTB4MDgwMDAwMDAJLyogSGlkZGVuIGRldmljZSAqLwotIwlkZWZpbmUgUENNX0NBUF9GUkVFUkFURQkJMHgxMDAwMDAwMAotIwlkZWZpbmUgUENNX0NBUF9NT0RFTQkJMHgyMDAwMDAwMAkvKiBNb2RlbSBkZXZpY2UgKi8KLSMJZGVmaW5lIFBDTV9DQVBfREVGQVVMVAkJMHg0MDAwMDAwMAkvKiAiRGVmYXVsdCIgZGV2aWNlICovCi0KLS8qCi0gKiBUaGUgUENNX0NBUF8qIGNhcGFiaWxpdHkgbmFtZXMgd2VyZSBrbm93biBhcyBEU1BfQ0FQXyogcHJpb3IgT1NTIDQuMAotICogc28gaXQncyBuZWNlc3NhcnkgdG8gZGVmaW5lIHRoZSBvbGRlciBuYW1lcyB0b28uCi0gKi8KLSNkZWZpbmUgRFNQX0NBUF9BRE1BU0sJCVBDTV9DQVBfQURNQVNLCi0jZGVmaW5lIERTUF9DQVBfQU5BTE9HSU4JUENNX0NBUF9BTkFMT0dJTgotI2RlZmluZSBEU1BfQ0FQX0FOQUxPR09VVAlQQ01fQ0FQX0FOQUxPR09VVAotI2RlZmluZSBEU1BfQ0FQX0JBVENICQlQQ01fQ0FQX0JBVENICi0jZGVmaW5lIERTUF9DQVBfQklORAkJUENNX0NBUF9CSU5ECi0jZGVmaW5lIERTUF9DQVBfQ09QUk9DCQlQQ01fQ0FQX0NPUFJPQwotI2RlZmluZSBEU1BfQ0FQX0RFRkFVTFQJCVBDTV9DQVBfREVGQVVMVAotI2RlZmluZSBEU1BfQ0FQX0RJR0lUQUxJTglQQ01fQ0FQX0RJR0lUQUxJTgotI2RlZmluZSBEU1BfQ0FQX0RJR0lUQUxPVVQJUENNX0NBUF9ESUdJVEFMT1VUCi0jZGVmaW5lIERTUF9DQVBfRFVQTEVYCQlQQ01fQ0FQX0RVUExFWAotI2RlZmluZSBEU1BfQ0FQX0ZSRUVSQVRFCVBDTV9DQVBfRlJFRVJBVEUKLSNkZWZpbmUgRFNQX0NBUF9ISURERU4JCVBDTV9DQVBfSElEREVOCi0jZGVmaW5lIERTUF9DQVBfSU5QVVQJCVBDTV9DQVBfSU5QVVQKLSNkZWZpbmUgRFNQX0NBUF9NTUFQCQlQQ01fQ0FQX01NQVAKLSNkZWZpbmUgRFNQX0NBUF9NT0RFTQkJUENNX0NBUF9NT0RFTQotI2RlZmluZSBEU1BfQ0FQX01VTFRJCQlQQ01fQ0FQX01VTFRJCi0jZGVmaW5lIERTUF9DQVBfT1VUUFVUCQlQQ01fQ0FQX09VVFBVVAotI2RlZmluZSBEU1BfQ0FQX1JFQUxUSU1FCVBDTV9DQVBfUkVBTFRJTUUKLSNkZWZpbmUgRFNQX0NBUF9SRVZJU0lPTglQQ01fQ0FQX1JFVklTSU9OCi0jZGVmaW5lIERTUF9DQVBfU0hBRE9XCQlQQ01fQ0FQX1NIQURPVwotI2RlZmluZSBEU1BfQ0FQX1RSSUdHRVIJCVBDTV9DQVBfVFJJR0dFUgotI2RlZmluZSBEU1BfQ0FQX1ZJUlRVQUwJCVBDTV9DQVBfVklSVFVBTAotCi0jZGVmaW5lIFNORENUTF9EU1BfR0VUVFJJR0dFUgkJX19TSU9SICgnUCcsMTYsIGludCkKLSNkZWZpbmUgU05EQ1RMX0RTUF9TRVRUUklHR0VSCQlfX1NJT1cgKCdQJywxNiwgaW50KQotIwlkZWZpbmUgUENNX0VOQUJMRV9JTlBVVAkJMHgwMDAwMDAwMQotIwlkZWZpbmUgUENNX0VOQUJMRV9PVVRQVVQJMHgwMDAwMDAwMgotCi10eXBlZGVmIHN0cnVjdCBjb3VudF9pbmZvCi17Ci0gIHVuc2lnbmVkIGludCBieXRlczsJCS8qIFRvdGFsICMgb2YgYnl0ZXMgcHJvY2Vzc2VkICovCi0gIGludCBibG9ja3M7CQkJLyogIyBvZiBmcmFnbWVudCB0cmFuc2l0aW9ucyBzaW5jZSBsYXN0IHRpbWUgKi8KLSAgaW50IHB0cjsJCQkvKiBDdXJyZW50IERNQSBwb2ludGVyIHZhbHVlICovCi19IGNvdW50X2luZm87Ci0KLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRJUFRSCQlfX1NJT1IgKCdQJywxNywgY291bnRfaW5mbykKLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRPUFRSCQlfX1NJT1IgKCdQJywxOCwgY291bnRfaW5mbykKLQotdHlwZWRlZiBzdHJ1Y3QgYnVmZm1lbV9kZXNjCi17Ci0gIHVuc2lnbmVkICpidWZmZXI7Ci0gIGludCBzaXplOwotfSBidWZmbWVtX2Rlc2M7Ci0jZGVmaW5lIFNORENUTF9EU1BfU0VUU1lOQ1JPCQlfX1NJTyAgKCdQJywgMjEpCi0jZGVmaW5lIFNORENUTF9EU1BfU0VURFVQTEVYCQlfX1NJTyAgKCdQJywgMjIpCi0KLSNkZWZpbmUgU05EQ1RMX0RTUF9QUk9GSUxFCQlfX1NJT1cgKCdQJywgMjMsIGludCkJLyogT0JTT0xFVEUgKi8KLSNkZWZpbmUJICBBUEZfTk9STUFMCTAJLyogTm9ybWFsIGFwcGxpY2F0aW9ucyAqLwotI2RlZmluZQkgIEFQRl9ORVRXT1JLCTEJLyogVW5kZXJydW5zIHByb2JhYmx5IGNhdXNlZCBieSBhbiAiZXh0ZXJuYWwiIGRlbGF5ICovCi0jZGVmaW5lICAgQVBGX0NQVUlOVEVOUyAyCS8qIFVuZGVycnVucyBwcm9iYWJseSBjYXVzZWQgYnkgIm92ZXJoZWF0aW5nIiB0aGUgQ1BVICovCi0KLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRPREVMQVkJCV9fU0lPUiAoJ1AnLCAyMywgaW50KQotCi10eXBlZGVmIHN0cnVjdCBhdWRpb19lcnJpbmZvCi17Ci0gIGludCBwbGF5X3VuZGVycnVuczsKLSAgaW50IHJlY19vdmVycnVuczsKLSAgdW5zaWduZWQgaW50IHBsYXlfcHRyYWRqdXN0OwotICB1bnNpZ25lZCBpbnQgcmVjX3B0cmFkanVzdDsKLSAgaW50IHBsYXlfZXJyb3Jjb3VudDsKLSAgaW50IHJlY19lcnJvcmNvdW50OwotICBpbnQgcGxheV9sYXN0ZXJyb3I7Ci0gIGludCByZWNfbGFzdGVycm9yOwotICBpbnQgcGxheV9lcnJvcnBhcm07Ci0gIGludCByZWNfZXJyb3JwYXJtOwotICBpbnQgZmlsbGVyWzE2XTsKLX0gYXVkaW9fZXJyaW5mbzsKLQotI2RlZmluZSBTTkRDVExfRFNQX0dFVFBMQVlWT0wJCV9fU0lPUiAoJ1AnLCAyNCwgaW50KQotI2RlZmluZSBTTkRDVExfRFNQX1NFVFBMQVlWT0wJCV9fU0lPV1IoJ1AnLCAyNCwgaW50KQotI2RlZmluZSBTTkRDVExfRFNQX0dFVEVSUk9SCQlfX1NJT1IgKCdQJywgMjUsIGF1ZGlvX2VycmluZm8pCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERpZ2l0YWwgaW50ZXJmYWNlIChTL1BESUYpIGNvbnRyb2wgaW50ZXJmYWNlCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgb3NzX2RpZ2l0YWxfY29udHJvbAotewotICB1bnNpZ25lZCBpbnQgY2FwczsKLSNkZWZpbmUgRElHX0NCSVRJTl9OT05FCQkJMHgwMDAwMDAwMAotI2RlZmluZSBESUdfQ0JJVElOX0xJTUlURUQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgRElHX0NCSVRJTl9EQVRBIAkJMHgwMDAwMDAwMgotI2RlZmluZSBESUdfQ0JJVElOX0JZVEUwCQkweDAwMDAwMDA0Ci0jZGVmaW5lIERJR19DQklUSU5fRlVMTCAJCTB4MDAwMDAwMDgKLSNkZWZpbmUgRElHX0NCSVRJTl9NQVNLIAkJMHgwMDAwMDAwZgotI2RlZmluZSBESUdfQ0JJVE9VVF9OT05FCQkweDAwMDAwMDAwCi0jZGVmaW5lIERJR19DQklUT1VUX0xJTUlURUQJCTB4MDAwMDAwMTAKLSNkZWZpbmUgRElHX0NCSVRPVVRfQllURTAJCTB4MDAwMDAwMjAKLSNkZWZpbmUgRElHX0NCSVRPVVRfRlVMTCAJCTB4MDAwMDAwNDAKLSNkZWZpbmUgRElHX0NCSVRPVVRfREFUQSAJCTB4MDAwMDAwODAKLSNkZWZpbmUgRElHX0NCSVRPVVRfTUFTSyAJCTB4MDAwMDAwZjAKLSNkZWZpbmUgRElHX1VCSVRJTgkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgRElHX1VCSVRPVVQJCQkweDAwMDAwMjAwCi0jZGVmaW5lIERJR19WQklUT1VUCQkJMHgwMDAwMDQwMAotI2RlZmluZSBESUdfT1VUUkFURQkJCTB4MDAwMDA4MDAKLSNkZWZpbmUgRElHX0lOUkFURQkJCTB4MDAwMDEwMDAKLSNkZWZpbmUgRElHX0lOQklUUwkJCTB4MDAwMDIwMDAKLSNkZWZpbmUgRElHX09VVEJJVFMJCQkweDAwMDA0MDAwCi0jZGVmaW5lIERJR19FWEFDVAkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgRElHX1BSTwkJCQkweDAwMDIwMDAwCi0jZGVmaW5lIERJR19DT05TVU1FUgkJCTB4MDAwNDAwMDAKLSNkZWZpbmUgRElHX1BBU1NUSFJPVUdICQkJMHgwMDA4MDAwMAotI2RlZmluZSBESUdfT1VUU0VMCQkJMHgwMDEwMDAwMAotCi0gIHVuc2lnbmVkIGludCB2YWxpZDsKLSNkZWZpbmUgVkFMX0NCSVRJTgkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgVkFMX1VCSVRJTgkJCTB4MDAwMDAwMDIKLSNkZWZpbmUgVkFMX0NCSVRPVVQJCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFZBTF9VQklUT1VUCQkJMHgwMDAwMDAwOAotI2RlZmluZSBWQUxfSVNUQVRVUwkJCTB4MDAwMDAwMTAKLSNkZWZpbmUgVkFMX0lSQVRFCQkJMHgwMDAwMDAyMAotI2RlZmluZSBWQUxfT1JBVEUJCQkweDAwMDAwMDQwCi0jZGVmaW5lIFZBTF9JTkJJVFMJCQkweDAwMDAwMDgwCi0jZGVmaW5lIFZBTF9PVVRCSVRTCQkJMHgwMDAwMDEwMAotI2RlZmluZSBWQUxfUkVRVUVTVAkJCTB4MDAwMDAyMDAKLSNkZWZpbmUgVkFMX09VVFNFTAkJCTB4MDAwMDA0MDAKLQotI2RlZmluZSBWQUxfT1VUTUFTSyAoVkFMX0NCSVRPVVR8VkFMX1VCSVRPVVR8VkFMX09SQVRFfFZBTF9PVVRCSVRTfFZBTF9PVVRTRUwpCi0KLSAgdW5zaWduZWQgaW50IHJlcXVlc3QsIHBhcmFtOwotI2RlZmluZSBTUERfUlFfUEFTU1RIUk9VR0gJCQkJMQotCi0gIHVuc2lnbmVkIGNoYXIgY2JpdGluWzI0XTsKLSAgdW5zaWduZWQgY2hhciB1Yml0aW5bMjRdOwotICB1bnNpZ25lZCBjaGFyIGNiaXRvdXRbMjRdOwotICB1bnNpZ25lZCBjaGFyIHViaXRvdXRbMjRdOwotCi0gIHVuc2lnbmVkIGludCBvdXRzZWw7Ci0jZGVmaW5lIE9VVFNFTF9ESUdJVEFMCQkxCi0jZGVmaW5lIE9VVFNFTF9BTkFMT0cJCTIKLSNkZWZpbmUgT1VUU0VMX0JPVEgJCShPVVRTRUxfRElHSVRBTHxPVVRTRUxfQU5BTE9HKQotCi0gIGludCBpbl9kYXRhOwkJCS8qIEF1ZGlvL2RhdGEgaWYgYXV0b2RldGVjdGFibGUgYnkgdGhlIHJlY2VpdmVyICovCi0jZGVmaW5lIElORF9VTktOT1dOCQkwCi0jZGVmaW5lIElORF9BVURJTwkJMQotI2RlZmluZSBJTkRfREFUQQkJMgotCi0gIGludCBpbl9sb2NrZWQ7CQkvKiBSZWNlaXZlciBsb2NrZWQgKi8KLSNkZWZpbmUgTE9DS19OT1RfSU5ESUNBVEVECTAKLSNkZWZpbmUgTE9DS19VTkxPQ0tFRAkJMQotI2RlZmluZSBMT0NLX0xPQ0tFRAkJMgotCi0gIGludCBpbl9xdWFsaXR5OwkJLyogSW5wdXQgc2lnbmFsIHF1YWxpdHkgKi8KLSNkZWZpbmUgSU5fUVVBTF9OT1RfSU5ESUNBVEVECTAKLSNkZWZpbmUgSU5fUVVBTF9QT09SCQkxCi0jZGVmaW5lIElOX1FVQUxfR09PRAkJMgotCi0gIGludCBpbl92Yml0LCBvdXRfdmJpdDsJLyogViBiaXRzICovCi0jZGVmaW5lIFZCSVRfTk9UX0lORElDQVRFRAkwCi0jZGVmaW5lIFZCSVRfT0ZGCQkxCi0jZGVmaW5lIFZCSVRfT04JCQkyCi0KLSAgdW5zaWduZWQgaW50IGluX2Vycm9yczsJLyogVmFyaW91cyBpbnB1dCBlcnJvciBjb25kaXRpb25zICovCi0jZGVmaW5lIElORVJSX0NSQwkJMHgwMDAxCi0jZGVmaW5lIElORVJSX1FDT0RFX0NSQwkJMHgwMDAyCi0jZGVmaW5lIElORVJSX1BBUklUWQkJMHgwMDA0Ci0jZGVmaW5lIElORVJSX0JJUEhBU0UJCTB4MDAwOAotCi0gIGludCBzcmF0ZV9pbiwgc3JhdGVfb3V0OwotICBpbnQgYml0c19pbiwgYml0c19vdXQ7Ci0KLSAgaW50IGZpbGxlclszMl07Ci19IG9zc19kaWdpdGFsX2NvbnRyb2w7Ci0KLSNkZWZpbmUgU05EQ1RMX0RTUF9SRUFEQ1RMCQlfX1NJT1dSKCdQJywgMjYsIG9zc19kaWdpdGFsX2NvbnRyb2wpCi0jZGVmaW5lIFNORENUTF9EU1BfV1JJVEVDVEwJCV9fU0lPV1IoJ1AnLCAyNywgb3NzX2RpZ2l0YWxfY29udHJvbCkKLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTeW5jIGdyb3VwcyBmb3IgYXVkaW8gZGV2aWNlcwotICovCi10eXBlZGVmIHN0cnVjdCBvc3Nfc3luY2dyb3VwCi17Ci0gIGludCBpZDsKLSAgaW50IG1vZGU7Ci0gIGludCBmaWxsZXJbMTZdOwotfSBvc3Nfc3luY2dyb3VwOwotCi0jZGVmaW5lIFNORENUTF9EU1BfU1lOQ0dST1VQCQlfX1NJT1dSKCdQJywgMjgsIG9zc19zeW5jZ3JvdXApCi0jZGVmaW5lIFNORENUTF9EU1BfU1lOQ1NUQVJUCQlfX1NJT1cgKCdQJywgMjksIGludCkKLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogImNvb2tlZCIgbW9kZSBlbmFibGVzIHNvZnR3YXJlIGJhc2VkIGNvbnZlcnNpb25zIGZvciBzYW1wbGUgcmF0ZSwgc2FtcGxlCi0gKiBmb3JtYXQgKGJpdHMpIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMgKG1vbm8vc3RlcmVvKS4gVGhlc2UgY29udmVyc2lvbnMgYXJlCi0gKiByZXF1aXJlZCB3aXRoIHNvbWUgZGV2aWNlcyB0aGF0IHN1cHBvcnQgb25seSBvbmUgc2FtcGxlIHJhdGUgb3IganVzdCBzdGVyZW8KLSAqIHRvIGxldCB0aGUgYXBwbGljYXRpb25zIHRvIHVzZSBvdGhlciBmb3JtYXRzLiBUaGUgY29va2VkIG1vZGUgaXMgZW5hYmxlZCBieQotICogZGVmYXVsdC4gSG93ZXZlciBpdCdzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIHRoaXMgbW9kZSB3aGVuIG1tYXAoKSBpcyB1c2VkIG9yCi0gKiB3aGVuIHZlcnkgZGV0ZXJtaW5pc3RpYyB0aW1pbmcgaXMgcmVxdWlyZWQuIFNORENUTF9EU1BfQ09PS0VETU9ERSBpcyBhbgotICogb3B0aW9uYWwgY2FsbCBpbnRyb2R1Y2VkIGluIE9TUyAzLjkuNmYuIEl0J3MgX2Vycm9yIHJldHVybiBtdXN0IGJlIGlnbm9yZWRfCi0gKiBzaW5jZSBub3JtYWxseSB0aGlzIGNhbGwgd2lsbCByZXR1cm4gZXJubz1FSU5WQUwuCi0gKgotICogU05EQ1RMX0RTUF9DT09LRURNT0RFIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIG9wZW4gYmVmb3JlIGRvaW5nCi0gKiBhbnl0aGluZyBlbHNlLiBPdGhlcndpc2UgdGhlIGNhbGwgd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0LgotICovCi0jZGVmaW5lIFNORENUTF9EU1BfQ09PS0VETU9ERQkJX19TSU9XICgnUCcsIDMwLCBpbnQpCi0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNORENUTF9EU1BfU0lMRU5DRSBhbmQgU05EQ1RMX0RTUF9TS0lQIGFyZSBuZXcgY2FsbHMgaW4gT1NTIDMuOTkuMAotICogdGhhdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgcGF1c2UvY29udGludWUgZHVyaW5nIHBsYXliYWNrIChubyBlZmZlY3QKLSAqIG9uIHJlY29yZGluZykuCi0gKi8KLSNkZWZpbmUgU05EQ1RMX0RTUF9TSUxFTkNFCQlfX1NJTyAgKCdQJywgMzEpCi0jZGVmaW5lIFNORENUTF9EU1BfU0tJUAkJCV9fU0lPICAoJ1AnLCAzMikKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQWJvcnQgdHJhbnNmZXIgKHJlc2V0KSBmdW5jdGlvbnMgZm9yIGlucHV0IGFuZCBvdXRwdXQKLSAqLwotI2RlZmluZSBTTkRDVExfRFNQX0hBTFRfSU5QVVQJCV9fU0lPICAoJ1AnLCAzMykKLSNkZWZpbmUgU05EQ1RMX0RTUF9SRVNFVF9JTlBVVAlTTkRDVExfRFNQX0hBTFRfSU5QVVQJLyogT2xkIG5hbWUgKi8KLSNkZWZpbmUgU05EQ1RMX0RTUF9IQUxUX09VVFBVVAkJX19TSU8gICgnUCcsIDM0KQotI2RlZmluZSBTTkRDVExfRFNQX1JFU0VUX09VVFBVVAlTTkRDVExfRFNQX0hBTFRfT1VUUFVUCS8qIE9sZCBuYW1lICovCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIExvdyB3YXRlciBsZXZlbCBjb250cm9sCi0gKi8KLSNkZWZpbmUgU05EQ1RMX0RTUF9MT1dfV0FURVIJCV9fU0lPVyAoJ1AnLCAzNCwgaW50KQotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDY0IGJpdCBwb2ludGVyIHN1cHBvcnQuIE9ubHkgYXZhaWxhYmxlIGluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQKLSAqIHRoZSA2NCBiaXQgKGxvbmcgbG9uZykgaW50ZWdlciB0eXBlLgotICovCi0jaWZuZGVmIE9TU19OT19MT05HX0xPTkcKLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGxvbmcgbG9uZyBzYW1wbGVzOwotICBpbnQgZmlmb19zYW1wbGVzOwotICBpbnQgZmlsbGVyWzMyXTsJCS8qIEZvciBmdXR1cmUgdXNlICovCi19IG9zc19jb3VudF90OwotCi0jZGVmaW5lIFNORENUTF9EU1BfQ1VSUkVOVF9JUFRSCQlfX1NJT1IgKCdQJywgMzUsIG9zc19jb3VudF90KQotI2RlZmluZSBTTkRDVExfRFNQX0NVUlJFTlRfT1BUUgkJX19TSU9SICgnUCcsIDM2LCBvc3NfY291bnRfdCkKLSNlbmRpZgotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEludGVyZmFjZSBmb3Igc2VsZWN0aW5nIHJlY29yZGluZyBzb3VyY2VzIGFuZCBwbGF5YmFjayBvdXRwdXQgcm91dGluZ3MuCi0gKi8KLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRfUkVDU1JDX05BTUVTCV9fU0lPUiAoJ1AnLCAzNywgb3NzX21peGVyX2VudW1pbmZvKQotI2RlZmluZSBTTkRDVExfRFNQX0dFVF9SRUNTUkMJCV9fU0lPUiAoJ1AnLCAzOCwgaW50KQotI2RlZmluZSBTTkRDVExfRFNQX1NFVF9SRUNTUkMJCV9fU0lPV1IoJ1AnLCAzOCwgaW50KQotCi0jZGVmaW5lIFNORENUTF9EU1BfR0VUX1BMQVlUR1RfTkFNRVMJX19TSU9SICgnUCcsIDM5LCBvc3NfbWl4ZXJfZW51bWluZm8pCi0jZGVmaW5lIFNORENUTF9EU1BfR0VUX1BMQVlUR1QJCV9fU0lPUiAoJ1AnLCA0MCwgaW50KQotI2RlZmluZSBTTkRDVExfRFNQX1NFVF9QTEFZVEdUCQlfX1NJT1dSKCdQJywgNDAsIGludCkKLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRSRUNWT0wJCV9fU0lPUiAoJ1AnLCA0MSwgaW50KQotI2RlZmluZSBTTkRDVExfRFNQX1NFVFJFQ1ZPTAkJX19TSU9XUignUCcsIDQxLCBpbnQpCi0KLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTb21lIGNhbGxzIGZvciBzZXR0aW5nIHRoZSBjaGFubmVsIGFzc2lnbm1lbnQgd2l0aCBtdWx0aSBjaGFubmVsIGRldmljZXMKLSAqIChzZWUgdGhlIG1hbnVhbCBmb3IgZGV0YWlscykuCi0gKi8KLSNpZm5kZWYgT1NTX05PX0xPTkdfTE9ORwotI2RlZmluZSBTTkRDVExfRFNQX0dFVF9DSE5PUkRFUgkJX19TSU9SICgnUCcsIDQyLCB1bnNpZ25lZCBsb25nIGxvbmcpCi0jZGVmaW5lIFNORENUTF9EU1BfU0VUX0NITk9SREVSCQlfX1NJT1dSKCdQJywgNDIsIHVuc2lnbmVkIGxvbmcgbG9uZykKLSMJZGVmaW5lIENISURfVU5ERUYJMAotIwlkZWZpbmUgQ0hJRF9MCQkxCi0jCWRlZmluZSBDSElEX1IJCTIKLSMJZGVmaW5lIENISURfQwkJMwotIwlkZWZpbmUgQ0hJRF9MRkUJCTQKLSMJZGVmaW5lIENISURfTFMJCTUKLSMJZGVmaW5lIENISURfUlMJCTYKLSMJZGVmaW5lIENISURfTFIJCTcKLSMJZGVmaW5lIENISURfUlIJCTgKLSNkZWZpbmUgQ0hOT1JERVJfVU5ERUYJCTB4MDAwMDAwMDAwMDAwMDAwMFVMTAotI2RlZmluZSBDSE5PUkRFUl9OT1JNQUwJCTB4MDAwMDAwMDA4NzY1NDMyMVVMTAotI2VuZGlmCi0KLSNkZWZpbmUgTUFYX1BFQUtfQ0hBTk5FTFMJMTI4Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG9zc19wZWFrc190W01BWF9QRUFLX0NIQU5ORUxTXTsKLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRJUEVBS1MJCV9fU0lPUignUCcsIDQzLCBvc3NfcGVha3NfdCkKLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRPUEVBS1MJCV9fU0lPUignUCcsIDQ0LCBvc3NfcGVha3NfdCkKLQotI2RlZmluZSBTTkRDVExfRFNQX1BPTElDWQkJX19TSU9XKCdQJywgNDUsIGludCkJLyogU2VlIHRoZSBtYW51YWwgKi8KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGZXcgaW9jdGwgY2FsbHMgdGhhdCBhcmUgbm90IG9mZmljaWFsIHBhcnRzIG9mIE9TUy4gVGhleSBoYXZlIGJlZW4gdXNlZAotICogYnkgZmV3IGZyZWV3YXJlIGltcGxlbWVudGF0aW9ucyBvZiBPU1MuCi0gKi8KLSNkZWZpbmUgU05EQ1RMX0RTUF9HRVRDSEFOTkVMTUFTSwlfX1NJT1dSKCdQJywgNjQsIGludCkKLSNkZWZpbmUgU05EQ1RMX0RTUF9CSU5EX0NIQU5ORUwJCV9fU0lPV1IoJ1AnLCA2NSwgaW50KQotIyAgICAgZGVmaW5lIERTUF9CSU5EX1FVRVJZICAgICAgICAgICAweDAwMDAwMDAwCi0jICAgICBkZWZpbmUgRFNQX0JJTkRfRlJPTlQgICAgICAgICAgIDB4MDAwMDAwMDEKLSMgICAgIGRlZmluZSBEU1BfQklORF9TVVJSICAgICAgICAgICAgMHgwMDAwMDAwMgotIyAgICAgZGVmaW5lIERTUF9CSU5EX0NFTlRFUl9MRkUgICAgICAweDAwMDAwMDA0Ci0jICAgICBkZWZpbmUgRFNQX0JJTkRfSEFORFNFVCAgICAgICAgIDB4MDAwMDAwMDgKLSMgICAgIGRlZmluZSBEU1BfQklORF9NSUMgICAgICAgICAgICAgMHgwMDAwMDAxMAotIyAgICAgZGVmaW5lIERTUF9CSU5EX01PREVNMSAgICAgICAgICAweDAwMDAwMDIwCi0jICAgICBkZWZpbmUgRFNQX0JJTkRfTU9ERU0yICAgICAgICAgIDB4MDAwMDAwNDAKLSMgICAgIGRlZmluZSBEU1BfQklORF9JMlMgICAgICAgICAgICAgMHgwMDAwMDA4MAotIyAgICAgZGVmaW5lIERTUF9CSU5EX1NQRElGICAgICAgICAgICAweDAwMDAwMTAwCi0jICAgICBkZWZpbmUgRFNQX0JJTkRfUkVBUiAgICAgICAgICAgIDB4MDAwMDAyMDAKLQotI2lmZGVmIHN1bgotLyogTm90IHBhcnQgb2YgT1NTLiBSZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlIGJ5IFNvbGFyaXMgKi8KLSNkZWZpbmUgWF9TQURBX0dFVF9QTEFZVEdUX01BU0sJX19TSU9SICgnUCcsIDY2LCBpbnQpCi0jZGVmaW5lIFhfU0FEQV9HRVRfUExBWVRHVAlfX1NJT1IgKCdQJywgNjcsIGludCkKLSNkZWZpbmUgWF9TQURBX1NFVF9QTEFZVEdUCV9fU0lPV1IoJ1AnLCA2OCwgaW50KQotI2VuZGlmCi0KLSNpZm5kZWYgTk9fTEVHQUNZX01JWEVSCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElPQ1RMIGNvbW1hbmRzIGZvciB0aGUgImxlZ2FjeSAiIC9kZXYvbWl4ZXIgQVBJIChvYnNvbGV0ZSkKLSAqCi0gKiBNaXhlciBjb250cm9scwotICoKLSAqIFRoZXJlIGNhbiBiZSB1cCB0byAyMCBkaWZmZXJlbnQgYW5hbG9nIG1peGVyIGNoYW5uZWxzLiBUaGUKLSAqIFNPVU5EX01JWEVSX05SREVWSUNFUyBnaXZlcyB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBtYXhpbXVtLiAKLSAqIFRoZSBTT1VORF9NSVhFUl9SRUFEX0RFVk1BU0sgcmV0dXJucyBhIGJpdG1hc2sgd2hpY2ggdGVsbHMKLSAqIHRoZSBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgcGFydGljdWxhciBtaXhlci4KLSAqCi0gKiB7IW5vdGljZSBUaGlzICJsZWdhY3kiIG1peGVyIEFQSSBpcyBvYnNvbGV0ZS4gSXQgaGFzIGJlZW4gc3VwZXJjZWRlZAotICogYnkgYSBuZXcgb25lIChzZWUgYmVsb3cpLgotICovCi0KLSNkZWZpbmUgU09VTkRfTUlYRVJfTlJERVZJQ0VTCTI4Ci0jZGVmaW5lIFNPVU5EX01JWEVSX1ZPTFVNRQkwCi0jZGVmaW5lIFNPVU5EX01JWEVSX0JBU1MJMQotI2RlZmluZSBTT1VORF9NSVhFUl9UUkVCTEUJMgotI2RlZmluZSBTT1VORF9NSVhFUl9TWU5USAkzCi0jZGVmaW5lIFNPVU5EX01JWEVSX1BDTQkJNAotI2RlZmluZSBTT1VORF9NSVhFUl9TUEVBS0VSCTUKLSNkZWZpbmUgU09VTkRfTUlYRVJfTElORQk2Ci0jZGVmaW5lIFNPVU5EX01JWEVSX01JQwkJNwotI2RlZmluZSBTT1VORF9NSVhFUl9DRAkJOAotI2RlZmluZSBTT1VORF9NSVhFUl9JTUlYCTkJLyogIFJlY29yZGluZyBtb25pdG9yICAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9BTFRQQ00JMTAKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVDTEVWCTExCS8qIFJlY29yZGluZyBsZXZlbCAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9JR0FJTgkxMgkvKiBJbnB1dCBnYWluICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX09HQUlOCTEzCS8qIE91dHB1dCBnYWluICovCi0vKiAKLSAqIFNvbWUgc291bmRjYXJkcyBoYXZlIHRocmVlIGxpbmUgbGV2ZWwgaW5wdXRzIChsaW5lLCBhdXgxIGFuZCBhdXgyKS4gCi0gKiBTaW5jZSBlYWNoIGNhcmQgbWFudWZhY3R1cmVyIGhhcyBhc3NpZ25lZCBkaWZmZXJlbnQgbWVhbmluZ3MgdG8gCi0gKiB0aGVzZSBpbnB1dHMsIGl0J3MgaW1wcmFjdGljYWwgdG8gYXNzaWduIHNwZWNpZmljIG1lYW5pbmdzIAotICogKGVnIGxpbmUsIGNkLCBzeW50aCBldGMuKSB0byB0aGVtLgotICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUxCTE0CS8qIElucHV0IHNvdXJjZSAxICAoYXV4MSkgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfTElORTIJMTUJLyogSW5wdXQgc291cmNlIDIgIChhdXgyKSAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9MSU5FMwkxNgkvKiBJbnB1dCBzb3VyY2UgMyAgKGxpbmUpICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwxCTE3CS8qIERpZ2l0YWwgSS9PIDEgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfRElHSVRBTDIJMTgJLyogRGlnaXRhbCBJL08gMiAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMwkxOQkvKiBEaWdpdGFsIEkvTyAzICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FCTIwCS8qIFBob25lICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX01PTk8JMjEJLyogTW9ubyBPdXRwdXQgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfVklERU8JMjIJLyogVmlkZW8vVFYgKGF1ZGlvKSBpbiAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9SQURJTwkyMwkvKiBSYWRpbyBpbiAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9ERVBUSAkyNAkvKiBTdXJyb3VuZCBkZXB0aCAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFSVk9MCTI1CS8qIFJlYXIvU3Vycm91bmQgc3BlYWtlciB2b2wgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfQ0VOVEVSVk9MCTI2CS8qIENlbnRlci9MRkUgc3BlYWtlciB2b2wgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfU0lERVZPTAkyNwkvKiBTaWRlLVN1cnJvdW5kICg4c3BlYWtlcikgdm9sICovCi0KLS8qCi0gKiBXYXJuaW5nOiBTT1VORF9NSVhFUl9TVVJSVk9MIGlzIGFuIG9sZCBuYW1lIG9mIFNPVU5EX01JWEVSX1NJREVWT0wuCi0gKiAgICAgICAgICBUaGV5IGFyZSBib3RoIGFzc2lnbmVkIHRvIHRoZSBzYW1lIG1peGVyIGNvbnRyb2wuIERvbid0Ci0gKiAgICAgICAgICB1c2UgYm90aCBjb250cm9sIG5hbWVzIGluIHRoZSBzYW1lIHByb2dyYW0vZHJpdmVyLgotICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX1NVUlJWT0wJU09VTkRfTUlYRVJfU0lERVZPTAotCi0vKiBTb21lIG9uL29mZiBzZXR0aW5ncyAoU09VTkRfU1BFQ0lBTF9NSU4gLSBTT1VORF9TUEVDSUFMX01BWCkgKi8KLS8qIE5vdCBjb3VudGVkIHRvIFNPVU5EX01JWEVSX05SREVWSUNFUywgYnV0IHVzZSB0aGUgc2FtZSBudW1iZXIgc3BhY2UgKi8KLSNkZWZpbmUgU09VTkRfT05PRkZfTUlOCQkyOAotI2RlZmluZSBTT1VORF9PTk9GRl9NQVgJCTMwCi0KLS8qIE5vdGUhCU51bWJlciAzMSBjYW5ub3QgYmUgdXNlZCBzaW5jZSB0aGUgc2lnbiBiaXQgaXMgcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfTk9ORQkzMQotCi0vKgotICogVGhlIGZvbGxvd2luZyB1bnN1cHBvcnRlZCBtYWNyb3MgYXJlIG5vIGxvbmdlciBmdW5jdGlvbmFsLgotICogVXNlIFNPVU5EX01JWEVSX1BSSVZBVEUjIG1hY3JvcyBpbiBmdXR1cmUuCi0gKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfRU5IQU5DRQlTT1VORF9NSVhFUl9OT05FCi0jZGVmaW5lIFNPVU5EX01JWEVSX01VVEUJU09VTkRfTUlYRVJfTk9ORQotI2RlZmluZSBTT1VORF9NSVhFUl9MT1VECVNPVU5EX01JWEVSX05PTkUKLQotI2RlZmluZSBTT1VORF9ERVZJQ0VfTEFCRUxTIFwKLQl7IlZvbCAgIiwgIkJhc3MgIiwgIlRyZWJsZSIsICJTeW50aCIsICJQY20gICIsICJTcGVha2VyICIsICJMaW5lICIsIFwKLQkgIk1pYyAgIiwgIkNEICAgIiwgIk1peCAgIiwgIlBjbTIgIiwgIlJlYyAgIiwgIklHYWluIiwgIk9HYWluIiwgXAotCSAiQXV4MSIsICJBdXgyIiwgIkF1eDMiLCAiRGlnaXRhbDEiLCAiRGlnaXRhbDIiLCAiRGlnaXRhbDMiLCBcCi0JICJQaG9uZSIsICJNb25vIiwgIlZpZGVvIiwgIlJhZGlvIiwgIkRlcHRoIiwgXAotCSAiUmVhciIsICJDZW50ZXIiLCAiU2lkZSJ9Ci0KLSNkZWZpbmUgU09VTkRfREVWSUNFX05BTUVTIFwKLQl7InZvbCIsICJiYXNzIiwgInRyZWJsZSIsICJzeW50aCIsICJwY20iLCAic3BlYWtlciIsICJsaW5lIiwgXAotCSAibWljIiwgImNkIiwgIm1peCIsICJwY20yIiwgInJlYyIsICJpZ2FpbiIsICJvZ2FpbiIsIFwKLQkgImF1eDEiLCAiYXV4MiIsICJhdXgzIiwgImRpZzEiLCAiZGlnMiIsICJkaWczIiwgXAotCSAicGhvbmUiLCAibW9ubyIsICJ2aWRlbyIsICJyYWRpbyIsICJkZXB0aCIsIFwKLQkgInJlYXIiLCAiY2VudGVyIiwgInNpZGUifQotCi0vKglEZXZpY2UgYml0bWFzayBpZGVudGlmaWVycwkqLwotCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQ1NSQwkweGZmCS8qIEFyZyBjb250YWlucyBhIGJpdCBmb3IgZWFjaCByZWNvcmRpbmcgc291cmNlICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX0RFVk1BU0sJMHhmZQkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGRldmljZSAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9SRUNNQVNLCTB4ZmQJLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByZWNvcmRpbmcgc291cmNlICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX0NBUFMJMHhmYwotIwlkZWZpbmUgU09VTkRfQ0FQX0VYQ0xfSU5QVVQJMHgwMDAwMDAwMQkvKiBPbmx5IG9uZSByZWNvcmRpbmcgc291cmNlIGF0IGEgdGltZSAqLwotIwlkZWZpbmUgU09VTkRfQ0FQX05PTEVHQUNZCTB4MDAwMDAwMDQJLyogRm9yIGludGVybmFsIHVzZSBvbmx5ICovCi0jCWRlZmluZSBTT1VORF9DQVBfTk9SRUNTUkMJMHgwMDAwMDAwOAotI2RlZmluZSBTT1VORF9NSVhFUl9TVEVSRU9ERVZTCTB4ZmIJLyogTWl4ZXIgY2hhbm5lbHMgc3VwcG9ydGluZyBzdGVyZW8gKi8KLQotLyogT1NTL0ZyZWUgT05MWSAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9PVVRTUkMgICAgMHhmYQkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggaW5wdXQgc291cmNlIHRvIG91dHB1dCAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9PVVRNQVNLICAgMHhmOQkvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGlucHV0IHNvdXJjZSB0byBvdXRwdXQgKi8KLS8qIE9TUy9GcmVlIE9OTFkgKi8KLQotLyoJRGV2aWNlIG1hc2sgYml0cwkqLwotCi0jZGVmaW5lIFNPVU5EX01BU0tfVk9MVU1FCSgxIDw8IFNPVU5EX01JWEVSX1ZPTFVNRSkKLSNkZWZpbmUgU09VTkRfTUFTS19CQVNTCQkoMSA8PCBTT1VORF9NSVhFUl9CQVNTKQotI2RlZmluZSBTT1VORF9NQVNLX1RSRUJMRQkoMSA8PCBTT1VORF9NSVhFUl9UUkVCTEUpCi0jZGVmaW5lIFNPVU5EX01BU0tfU1lOVEgJKDEgPDwgU09VTkRfTUlYRVJfU1lOVEgpCi0jZGVmaW5lIFNPVU5EX01BU0tfUENNCQkoMSA8PCBTT1VORF9NSVhFUl9QQ00pCi0jZGVmaW5lIFNPVU5EX01BU0tfU1BFQUtFUgkoMSA8PCBTT1VORF9NSVhFUl9TUEVBS0VSKQotI2RlZmluZSBTT1VORF9NQVNLX0xJTkUJCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUpCi0jZGVmaW5lIFNPVU5EX01BU0tfTUlDCQkoMSA8PCBTT1VORF9NSVhFUl9NSUMpCi0jZGVmaW5lIFNPVU5EX01BU0tfQ0QJCSgxIDw8IFNPVU5EX01JWEVSX0NEKQotI2RlZmluZSBTT1VORF9NQVNLX0lNSVgJCSgxIDw8IFNPVU5EX01JWEVSX0lNSVgpCi0jZGVmaW5lIFNPVU5EX01BU0tfQUxUUENNCSgxIDw8IFNPVU5EX01JWEVSX0FMVFBDTSkKLSNkZWZpbmUgU09VTkRfTUFTS19SRUNMRVYJKDEgPDwgU09VTkRfTUlYRVJfUkVDTEVWKQotI2RlZmluZSBTT1VORF9NQVNLX0lHQUlOCSgxIDw8IFNPVU5EX01JWEVSX0lHQUlOKQotI2RlZmluZSBTT1VORF9NQVNLX09HQUlOCSgxIDw8IFNPVU5EX01JWEVSX09HQUlOKQotI2RlZmluZSBTT1VORF9NQVNLX0xJTkUxCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUxKQotI2RlZmluZSBTT1VORF9NQVNLX0xJTkUyCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUyKQotI2RlZmluZSBTT1VORF9NQVNLX0xJTkUzCSgxIDw8IFNPVU5EX01JWEVSX0xJTkUzKQotI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwxCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwxKQotI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwyCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwyKQotI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwzCSgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwzKQotI2RlZmluZSBTT1VORF9NQVNLX01PTk8JCSgxIDw8IFNPVU5EX01JWEVSX01PTk8pCi0jZGVmaW5lIFNPVU5EX01BU0tfUEhPTkUJKDEgPDwgU09VTkRfTUlYRVJfUEhPTkUpCi0jZGVmaW5lIFNPVU5EX01BU0tfUkFESU8JKDEgPDwgU09VTkRfTUlYRVJfUkFESU8pCi0jZGVmaW5lIFNPVU5EX01BU0tfVklERU8JKDEgPDwgU09VTkRfTUlYRVJfVklERU8pCi0jZGVmaW5lIFNPVU5EX01BU0tfREVQVEgJKDEgPDwgU09VTkRfTUlYRVJfREVQVEgpCi0jZGVmaW5lIFNPVU5EX01BU0tfUkVBUlZPTAkoMSA8PCBTT1VORF9NSVhFUl9SRUFSVk9MKQotI2RlZmluZSBTT1VORF9NQVNLX0NFTlRFUlZPTAkoMSA8PCBTT1VORF9NSVhFUl9DRU5URVJWT0wpCi0jZGVmaW5lIFNPVU5EX01BU0tfU0lERVZPTAkoMSA8PCBTT1VORF9NSVhFUl9TSURFVk9MKQotCi0vKiBOb3RlISBTT1VORF9NQVNLX1NVUlJWT0wgaXMgYWxpYXMgb2YgU09VTkRfTUFTS19TSURFVk9MICovCi0jZGVmaW5lIFNPVU5EX01BU0tfU1VSUlZPTAkoMSA8PCBTT1VORF9NSVhFUl9TSURFVk9MKQotCi0vKiBPYnNvbGV0ZSBtYWNyb3MgKi8KLSNkZWZpbmUgU09VTkRfTUFTS19NVVRFCQkoMSA8PCBTT1VORF9NSVhFUl9NVVRFKQotI2RlZmluZSBTT1VORF9NQVNLX0VOSEFOQ0UJKDEgPDwgU09VTkRfTUlYRVJfRU5IQU5DRSkKLSNkZWZpbmUgU09VTkRfTUFTS19MT1VECQkoMSA8PCBTT1VORF9NSVhFUl9MT1VEKQotCi0jZGVmaW5lIE1JWEVSX1JFQUQoZGV2KQkJCV9fU0lPUignTScsIGRldiwgaW50KQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRQkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9WT0xVTUUpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQkFTUwkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9CQVNTKQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1RSRUJMRQkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9UUkVCTEUpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1lOVEgJCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1lOVEgpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUENNCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1BDTSkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TUEVBS0VSCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1BFQUtFUikKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MSU5FCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTUlDCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01JQykKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DRAkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9DRCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9JTUlYCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lNSVgpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQUxUUENNCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0FMVFBDTSkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYJCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTEVWKQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0lHQUlOCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lHQUlOKQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX09HQUlOCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX09HQUlOKQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUxCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUxKQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUyCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUyKQotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUzCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUzKQotCi0vKiBPYnNvbGV0ZSBtYWNyb3MgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9NVVRFCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01VVEUpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfRU5IQU5DRQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0VOSEFOQ0UpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTE9VRAkJTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MT1VEKQotCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ1NSQykKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfREVWTUFTSykKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTUFTSykKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTCU1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1RFUkVPREVWUykKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DQVBTCQlNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NBUFMpCi0KLSNkZWZpbmUgTUlYRVJfV1JJVEUoZGV2KQkJX19TSU9XUignTScsIGRldiwgaW50KQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9WT0xVTUUJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVk9MVU1FKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9CQVNTCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9CQVNTKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9UUkVCTEUJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVFJFQkxFKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9TWU5USAkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfU1lOVEgpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1BDTQkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfUENNKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1NQRUFLRVIpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX01JQwkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTUlDKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9DRAkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfQ0QpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0lNSVgJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lNSVgpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0FMVFBDTQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9BTFRQQ00pCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1JFQ0xFVglNSVhFUl9XUklURShTT1VORF9NSVhFUl9SRUNMRVYpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0lHQUlOCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9JR0FJTikKLSNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfT0dBSU4JCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX09HQUlOKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FMQkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTEpCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUyCQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9MSU5FMikKLSNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORTMJCU1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUzKQotCi0vKiBPYnNvbGV0ZSBtYWNyb3MgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTVVURQkJTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTVVURSkKLSNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfRU5IQU5DRQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9FTkhBTkNFKQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MT1VECQlNSVhFUl9XUklURShTT1VORF9NSVhFUl9MT1VEKQotCi0jZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1JFQ1NSQwlNSVhFUl9XUklURShTT1VORF9NSVhFUl9SRUNTUkMpCi0KLXR5cGVkZWYgc3RydWN0IG1peGVyX2luZm8JLyogT0JTT0xFVEUgKi8KLXsKLSAgY2hhciBpZFsxNl07Ci0gIGNoYXIgbmFtZVszMl07Ci0gIGludCBtb2RpZnlfY291bnRlcjsKLSAgaW50IGNhcmRfbnVtYmVyOwotICBpbnQgcG9ydF9udW1iZXI7Ci0gIGNoYXIgaGFuZGxlWzMyXTsKLX0gbWl4ZXJfaW5mbzsKLQotLyogU09VTkRfTUlYRVJfSU5GTyBpcyBvYnNvbGV0ZSAtIHVzZSBTTkRDVExfTUlYRVJJTkZPIGluc3RlYWQgKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfSU5GTwkJX19TSU9SICgnTScsIDEwMSwgbWl4ZXJfaW5mbykKLQotLyoKLSAqIFR3byBpb2N0bHMgZm9yIHNwZWNpYWwgc291bmNhcmQgZnVuY3Rpb24gKE9TUy9GcmVlIG9ubHkpCi0gKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfQUdDICBfU0lPV1IoJ00nLCAxMDMsIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfM0RTRSAgX1NJT1dSKCdNJywgMTA0LCBpbnQpCi0vKgotICogVGhlIFNPVU5EX01JWEVSX1BSSVZBVEUjIGNvbW1hbmRzIGNhbiBiZSByZWRlZmluZWQgYnkgbG93IGxldmVsIGRyaXZlcnMuCi0gKiBUaGVzZSBmZWF0dXJlcyBjYW4gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyBkZXZpY2Ugc3BlY2lmaWMgZmVhdHVyZXMuCi0gKi8KLSNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTEJCV9fU0lPV1IoJ00nLCAxMTEsIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTIJCV9fU0lPV1IoJ00nLCAxMTIsIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTMJCV9fU0lPV1IoJ00nLCAxMTMsIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTQJCV9fU0lPV1IoJ00nLCAxMTQsIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTUJCV9fU0lPV1IoJ00nLCAxMTUsIGludCkKLQotLyogVGhlIGZvbGxvd2luZyB0d28gY29udHJvbHMgd2VyZSBuZXZlciBpbXBsZW1lbnRlZCBhbmQgdGhleSBzaG91bGQgbm90IGJlIHVzZWQuICovCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTUFJTlZPTAkJX19TSU9SICgnTScsIDExNiwgaW50KQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9NQUlOVk9MCQlfX1NJT1dSKCdNJywgMTE2LCBpbnQpCi0KLS8qCi0gKiBTT1VORF9NSVhFUl9HRVRMRVZFTFMgYW5kIFNPVU5EX01JWEVSX1NFVExFVkVMUyBjYWxscyBjYW4gYmUgdXNlZAotICogZm9yIHF1ZXJ5aW5nIGN1cnJlbnQgbWl4ZXIgc2V0dGluZ3MgZnJvbSB0aGUgZHJpdmVyIGFuZCBmb3IgbG9hZGluZwotICogZGVmYXVsdCB2b2x1bWUgc2V0dGluZ3MgX3ByaW9yXyBhY3RpdmF0aW5nIHRoZSBtaXhlciAobG9hZGluZwotICogZG9lc24ndCBhZmZlY3QgY3VycmVudCBzdGF0ZSBvZiB0aGUgbWl4ZXIgaGFyZHdhcmUpLiBUaGVzZSBjYWxscwotICogYXJlIGZvciBpbnRlcm5hbCB1c2UgYnkgdGhlIGRyaXZlciBzb2Z0d2FyZSBvbmx5LgotICovCi0KLXR5cGVkZWYgc3RydWN0IG1peGVyX3ZvbF90YWJsZQotewotICBpbnQgbnVtOwkJCS8qIEluZGV4IHRvIHZvbHVtZSB0YWJsZSAqLwotICBjaGFyIG5hbWVbMzJdOwotICBpbnQgbGV2ZWxzWzMyXTsKLX0gbWl4ZXJfdm9sX3RhYmxlOwotCi0jZGVmaW5lIFNPVU5EX01JWEVSX0dFVExFVkVMUwkJX19TSU9XUignTScsIDExNiwgbWl4ZXJfdm9sX3RhYmxlKQotI2RlZmluZSBTT1VORF9NSVhFUl9TRVRMRVZFTFMJCV9fU0lPV1IoJ00nLCAxMTcsIG1peGVyX3ZvbF90YWJsZSkKLQotI2RlZmluZSBPU1NfR0VUVkVSU0lPTgkJCV9fU0lPUiAoJ00nLCAxMTgsIGludCkKLQotLyoKLSAqIENhbGxzIHRvIHNldC9nZXQgdGhlIHJlY29yZGluZyBnYWluIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZQotICogcmVjb3JkaW5nIHNvdXJjZS4gVGhlc2UgY2FsbHMgYXV0b21hdGljYWxseSBtYXAgdG8gdGhlIHJpZ2h0IGNvbnRyb2wuCi0gKiBOb3RlIHRoYXQgdGhlc2UgY2FsbHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIGRyaXZlcnMuIEluIHRoaXMgY2FzZQotICogdGhlIGNhbGwgd2lsbCByZXR1cm4gLTEgd2l0aCBlcnJubyBzZXQgdG8gRUlOVkFMCi0gKgotICogVGhlIF9NT05HQUlOIHdvcmsgaW4gc2ltaWxhciB3YXkgYnV0IHNldC9nZXQgdGhlIG1vbml0b3JpbmcgZ2FpbiBmb3IKLSAqIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVjb3JkaW5nIHNvdXJjZS4KLSAqLwotI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1JFQ0dBSU4JX19TSU9SICgnTScsIDExOSwgaW50KQotI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9SRUNHQUlOCV9fU0lPV1IoJ00nLCAxMTksIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9NT05HQUlOCV9fU0lPUiAoJ00nLCAxMjAsIGludCkKLSNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTU9OR0FJTglfX1NJT1dSKCdNJywgMTIwLCBpbnQpCi0KLS8qIFRoZSBmb2xsb3dpbmcgY2FsbCBpcyBmb3IgZHJpdmVyIGRldmVsb3BtZW50IHRpbWUgcHVycG9zZXMuIEl0J3Mgbm90Ci0gKiBwcmVzZW50IGluIGFueSByZWxlYXNlZCBkcml2ZXJzLgotICovCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgb3NzX3Jlc2VydmVkX3RbNTEyXTsKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVTRVJWRUQJCV9fU0lPV1IoJ00nLCAxMjEsIG9zc19yZXNlcnZlZF90KQotI2VuZGlmIC8qIGlmbmRlZiBOT19MRUdBQ1lfTUlYRVIgKi8KLQotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUaGUgIm5ldyIgbWl4ZXIgQVBJIG9mIE9TUyA0LjAgYW5kIGxhdGVyLgotICoKLSAqIFRoaXMgaW1wcm92ZWQgbWl4ZXIgQVBJIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFjY2VzcyBldmVyeSBwb3NzaWJsZSBmZWF0dXJlCi0gKiBvZiBldmVyeSBwb3NzaWJsZSBkZXZpY2UuIEhvd2V2ZXIgeW91IHNob3VsZCByZWFkIHRoZSBtaXhlciBwcm9ncmFtbWluZwotICogc2VjdGlvbiBvZiB0aGUgT1NTIEFQSSBEZXZlbG9wZXIncyBNYW51YWwuIFRoZXJlIGlzIG5vIGNoYW5jZSB0aGF0IHlvdQotICogY291bGQgdXNlIHRoaXMgaW50ZXJmYWNlIGNvcnJlY3RseSBqdXN0IGJ5IGV4YW1pbmluZyB0aGlzIGhlYWRlci4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBvc3Nfc3lzaW5mbwotewotICBjaGFyIHByb2R1Y3RbMzJdOwkJLyogRm9yIGV4YW1wbGUgT1NTL0ZyZWUsIE9TUy9MaW51eCBvciBPU1MvU29sYXJpcyAqLwotICBjaGFyIHZlcnNpb25bMzJdOwkJLyogRm9yIGV4YW1wbGUgNC4wYSAqLwotICBpbnQgdmVyc2lvbm51bTsJCS8qIFNlZSBPU1NfR0VUVkVSU0lPTiAqLwotICBjaGFyIG9wdGlvbnNbMTI4XTsJCS8qIFJlc2VydmVkICovCi0KLSAgaW50IG51bWF1ZGlvczsJCS8qICMgb2YgYXVkaW8vZHNwIGRldmljZXMgKi8KLSAgaW50IG9wZW5lZGF1ZGlvWzhdOwkJLyogQml0IG1hc2sgdGVsbGluZyB3aGljaCBhdWRpbyBkZXZpY2VzIGFyZSBidXN5ICovCi0KLSAgaW50IG51bXN5bnRoczsJCS8qICMgb2YgYXZhaWxhdmxlIHN5bnRoIGRldmljZXMgKi8KLSAgaW50IG51bW1pZGlzOwkJCS8qICMgb2YgYXZhaWxhYmxlIE1JREkgcG9ydHMgKi8KLSAgaW50IG51bXRpbWVyczsJCS8qICMgb2YgYXZhaWxhYmxlIHRpbWVyIGRldmljZXMgKi8KLSAgaW50IG51bW1peGVyczsJCS8qICMgb2YgbWl4ZXIgZGV2aWNlcyAqLwotCi0gIGludCBvcGVuZWRtaWRpWzhdOwkJLyogQml0IG1hc2sgdGVsbGluZyB3aGljaCBtaWRpIGRldmljZXMgYXJlIGJ1c3kgKi8KLSAgaW50IG51bWNhcmRzOwkJCS8qIE51bWJlciBvZiBzb3VuZCBjYXJkcyBpbiB0aGUgc3lzdGVtICovCi0gIGludCBudW1hdWRpb2VuZ2luZXM7CQkvKiBOdW1iZXIgb2YgYXVkaW8gZW5naW5lcyBpbiB0aGUgc3lzdGVtICovCi0gIGNoYXIgbGljZW5zZVsxNl07CQkvKiBGb3IgZXhhbXBsZSAiR1BMIiBvciAiQ0RETCIgKi8KLSAgaW50IGZpbGxlclsyMzZdOwkJLyogRm9yIGZ1dHVyZSBleHBhbnNpb24gKHNldCB0byAtMSkgKi8KLX0gb3NzX3N5c2luZm87Ci0KLXR5cGVkZWYgc3RydWN0IG9zc19taXhleHQKLXsKLSAgaW50IGRldjsJCQkvKiBNaXhlciBkZXZpY2UgbnVtYmVyICovCi0gIGludCBjdHJsOwkJCS8qIENvbnRyb2xsZXIgbnVtYmVyICovCi0gIGludCB0eXBlOwkJCS8qIEVudHJ5IHR5cGUgKi8KLSMJZGVmaW5lIE1JWFRfREVWUk9PVAkgMAkvKiBEZXZpY2Ugcm9vdCBlbnRyeSAqLwotIwlkZWZpbmUgTUlYVF9HUk9VUAkgMQkvKiBDb250cm9sbGVyIGdyb3VwICovCi0jCWRlZmluZSBNSVhUX09OT0ZGCSAyCS8qIE9GRiAoMCkgb3IgT04gKDEpICovCi0jCWRlZmluZSBNSVhUX0VOVU0JIDMJLyogRW51bWVyYXRlZCAoMCB0byBtYXh2YWx1ZSkgKi8KLSMJZGVmaW5lIE1JWFRfTU9OT1NMSURFUgkgNAkvKiBNb25vIHNsaWRlciAoMCB0byAyNTUpICovCi0jCWRlZmluZSBNSVhUX1NURVJFT1NMSURFUiA1CS8qIFN0ZXJlbyBzbGlkZXIgKGR1YWwgMCB0byAyNTUpICovCi0jCWRlZmluZSBNSVhUX01FU1NBR0UJIDYJLyogKFJlYWRhYmxlKSB0ZXh0dWFsIG1lc3NhZ2UgKi8KLSMJZGVmaW5lIE1JWFRfTU9OT1ZVCSA3CS8qIFZVIG1ldGVyIHZhbHVlIChtb25vKSAqLwotIwlkZWZpbmUgTUlYVF9TVEVSRU9WVQkgOAkvKiBWVSBtZXRlciB2YWx1ZSAoc3RlcmVvKSAqLwotIwlkZWZpbmUgTUlYVF9NT05PUEVBSwkgOQkvKiBWVSBtZXRlciBwZWFrIHZhbHVlIChtb25vKSAqLwotIwlkZWZpbmUgTUlYVF9TVEVSRU9QRUFLCTEwCS8qIFZVIG1ldGVyIHBlYWsgdmFsdWUgKHN0ZXJlbykgKi8KLSMJZGVmaW5lIE1JWFRfUkFESU9HUk9VUAkxMQkvKiBSYWRpbyBidXR0b24gZ3JvdXAgKi8KLSMJZGVmaW5lIE1JWFRfTUFSS0VSCTEyCS8qIFNlcGFyYXRvciBiZXR3ZWVuIG5vcm1hbCBhbmQgZXh0ZW5zaW9uIGVudHJpZXMgKi8KLSMJZGVmaW5lIE1JWFRfVkFMVUUJMTMJLyogRGVjaW1hbCB2YWx1ZSBlbnRyeSAqLwotIwlkZWZpbmUgTUlYVF9IRVhWQUxVRQkxNAkvKiBIZXhhZGVjaW1hbCB2YWx1ZSBlbnRyeSAqLwotIwlkZWZpbmUgTUlYVF9NT05PREIJMTUJLyogT0JTT0xFVEUgKi8KLSMJZGVmaW5lIE1JWFRfU1RFUkVPREIJMTYJLyogT0JTT0xFVEUgKi8KLSMJZGVmaW5lIE1JWFRfU0xJREVSCTE3CS8qIFNsaWRlciAobW9ubykgd2l0aCBmdWxsICgzMSBiaXQpIHBvc3RpdGl2ZSBpbnRlZ2VyIHJhbmdlICovCi0jCWRlZmluZSBNSVhUXzNECQkxOAotCi0vKgotICogU2xpZGVycyB3aXRoIHJhbmdlIGV4cGFuZGVkIHRvIDE1IGJpdHMgcGVyIGNoYW5uZWwgKDAtMzI3NjcpCi0gKi8KLSMJZGVmaW5lIE1JWFRfTU9OT1NMSURFUjE2CTE5Ci0jCWRlZmluZSBNSVhUX1NURVJFT1NMSURFUjE2CTIwCi0jCWRlZmluZSBNSVhUX01VVEUJMjEJLyogTXV0ZT0xLCB1bm11dGU9MCAqLwotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICAvKiBQb3NzaWJsZSB2YWx1ZSByYW5nZSAobWludmFsdWUgdG8gbWF4dmFsdWUpICovCi0gIC8qIE5vdGUgdGhhdCBtYXh2YWx1ZSBtYXkgYWxzbyBiZSBzbWFsbGVyIHRoYW4gbWludmFsdWUgKi8KLSAgaW50IG1heHZhbHVlOwotICBpbnQgbWludmFsdWU7Ci0KLSAgaW50IGZsYWdzOwotIwlkZWZpbmUgTUlYRl9SRUFEQUJMRQkweDAwMDAwMDAxCS8qIEhhcyByZWFkYWJsZSB2YWx1ZSAqLwotIwlkZWZpbmUgTUlYRl9XUklURUFCTEUJMHgwMDAwMDAwMgkvKiBIYXMgd3JpdGVhYmxlIHZhbHVlICovCi0jCWRlZmluZSBNSVhGX1BPTEwJMHgwMDAwMDAwNAkvKiBNYXkgY2hhbmdlIGl0c2VsZiAqLwotIwlkZWZpbmUgTUlYRl9IWgkJMHgwMDAwMDAwOAkvKiBIZXJ6IHNjYWxlICovCi0jCWRlZmluZSBNSVhGX1NUUklORwkweDAwMDAwMDEwCS8qIFVzZSBkeW5hbWljIGV4dGVuc2lvbnMgZm9yIHZhbHVlICovCi0jCWRlZmluZSBNSVhGX0RZTkFNSUMJMHgwMDAwMDAxMAkvKiBTdXBwb3J0cyBkeW5hbWljIGV4dGVuc2lvbnMgKi8KLSMJZGVmaW5lIE1JWEZfT0tGQUlMCTB4MDAwMDAwMjAJLyogSW50ZXJwcmV0IHZhbHVlIGFzIDE9T0ssIDA9RkFJTCAqLwotIwlkZWZpbmUgTUlYRl9GTEFUCTB4MDAwMDAwNDAJLyogRmxhdCB2ZXJ0aWNhbCBzcGFjZSByZXF1aXJlbWVudHMgKi8KLSMJZGVmaW5lIE1JWEZfTEVHQUNZCTB4MDAwMDAwODAJLyogTGVnYWN5IG1peGVyIGNvbnRyb2wgZ3JvdXAgKi8KLSMJZGVmaW5lIE1JWEZfQ0VOVElCRUwJMHgwMDAwMDEwMAkvKiBDZW50aWJlbCAoMC4xIGRCKSBzdGVwIHNpemUgKi8KLSMJZGVmaW5lIE1JWEZfREVDSUJFTAkweDAwMDAwMjAwCS8qIFN0ZXAgc2l6ZSBvZiAxIGRCICovCi0jCWRlZmluZSBNSVhGX01BSU5WT0wJMHgwMDAwMDQwMAkvKiBNYWluIHZvbHVtZSBjb250cm9sICovCi0jCWRlZmluZSBNSVhGX1BDTVZPTAkweDAwMDAwODAwCS8qIFBDTSBvdXRwdXQgdm9sdW1lIGNvbnRyb2wgKi8KLSMJZGVmaW5lIE1JWEZfUkVDVk9MCTB4MDAwMDEwMDAJLyogUENNIHJlY29yZGluZyB2b2x1bWUgY29udHJvbCAqLwotIwlkZWZpbmUgTUlYRl9NT05WT0wJMHgwMDAwMjAwMAkvKiBJbnB1dC0+b3V0cHV0IG1vbml0b3Igdm9sdW1lICovCi0jCWRlZmluZSBNSVhGX1dJREUJMHgwMDAwNDAwMAkvKiBFbnVtIGNvbnRyb2wgaGFzIHdpZGUgbGFiZWxzICovCi0jCWRlZmluZSBNSVhGX0RFU0NSCTB4MDAwMDgwMDAJLyogRGVzY3JpcHRpb24gKHRvb2x0aXApIGF2YWlsYWJsZSAqLwotICBjaGFyIGlkWzE2XTsJCQkvKiBNbmVtb25pYyBJRCAobWFpbmx5IGZvciBpbnRlcm5hbCB1c2UpICovCi0gIGludCBwYXJlbnQ7CQkJLyogRW50cnkjIG9mIHBhcmVudCAoZ3JvdXApIG5vZGUgKC0xIGlmIHJvb3QpICovCi0KLSAgaW50IGR1bW15OwkJCS8qIEludGVybmFsIHVzZSAqLwotCi0gIGludCB0aW1lc3RhbXA7Ci0KLSAgY2hhciBkYXRhWzY0XTsJCS8qIE1pc2MgZGF0YSAoZW50cnkgdHlwZSBkZXBlbmRlbnQpICovCi0gIHVuc2lnbmVkIGNoYXIgZW51bV9wcmVzZW50WzMyXTsJLyogTWFzayBvZiBhbGxvd2VkIGVudW0gdmFsdWVzICovCi0gIGludCBjb250cm9sX25vOwkJLyogU09VTkRfTUlYRVJfVk9MVU1FLi5TT1VORF9NSVhFUl9NSURJICovCi0gIC8qICgtMSBtZWFucyBub3QgaW5kaWNhdGVkKSAqLwotCi0vKgotICogVGhlIGRlc2MgZmllbGQgaXMgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHB1cnBvc2VzIG9mIE9TUy4gSXQgc2hvdWxkIG5vdCBiZSAKLSAqIHVzZWQgYnkgYXBwbGljYXRpb25zLgotICovCi0gIHVuc2lnbmVkIGludCBkZXNjOwotI2RlZmluZSBNSVhFWFRfU0NPUEVfTUFTSwkJCTB4MDAwMDAwM2YKLSNkZWZpbmUgTUlYRVhUX1NDT1BFX09USEVSCQkJMHgwMDAwMDAwMAotI2RlZmluZSBNSVhFWFRfU0NPUEVfSU5QVVQJCQkweDAwMDAwMDAxCi0jZGVmaW5lIE1JWEVYVF9TQ09QRV9PVVRQVVQJCQkweDAwMDAwMDAyCi0jZGVmaW5lIE1JWEVYVF9TQ09QRV9NT05JVE9SCQkJMHgwMDAwMDAwMwotI2RlZmluZSBNSVhFWFRfU0NPUEVfUkVDU1dJVENICQkJMHgwMDAwMDAwNAotCi0gIGNoYXIgZXh0bmFtZVszMl07Ci0gIGludCB1cGRhdGVfY291bnRlcjsKLSAgaW50IHJnYmNvbG9yOwkJLyogMCBtZWFucyBkZWZhdWx0IGNvbG9yIChub3QgYmxhY2spIC4gT3RoZXJ3aXNlIDI0IGJpdCBSR0IgY29sb3IgKi8KLSAgaW50IGZpbGxlcls2XTsKLX0gb3NzX21peGV4dDsKLQotLyoKLSAqIFJlY29tbWVuZGVkIGNvbG9ycyB0byBiZSB1c2VkIGluIHRoZSByZ2Jjb2xvciBmaWVsZC4gVGhlc2UgbWF0Y2ggdGhlCi0gKiBjb2xvcnMgdXNlZCBhcyB0aGUgYXVkaW8gamFjayBjb2xvcnMgaW4gSEQgYXVkaW8gbW90aGVyYm9hcmRzLgotICovCi0jZGVmaW5lIE9TU19SR0JfQkxVRQkweDdhYWJkZQkJLy8gTGlnaHQgYmx1ZQotI2RlZmluZSBPU1NfUkdCX0dSRUVOCTB4YjNjOThjCQkvLyBMaW1lIGdyZWVuCi0jZGVmaW5lIE9TU19SR0JfUElOSwkweGU4OGM5OQotI2RlZmluZSBPU1NfUkdCX0dSQVkJMHhkMWNjYzQKLSNkZWZpbmUgT1NTX1JHQl9CTEFDSwkweDJiMjkyNgkJLy8gTGlnaHQgYmxhY2sKLSNkZWZpbmUgT1NTX1JHQl9PUkFOR0UJMHhlODllNDcKLSNkZWZpbmUgT1NTX1JHQl9SRUQJMHhmZjAwMDAKLSNkZWZpbmUgT1NTX1JHQl9ZRUxMT1cJMHhmZmZmMDAKLSNkZWZpbmUgT1NTX1JHQl9QVVJQTEUJMHg4MDAwODAKLSNkZWZpbmUgT1NTX1JHQl9XSElURQkweGY4ZjhmZgotCi10eXBlZGVmIHN0cnVjdCBvc3NfbWl4ZXh0X3Jvb3QKLXsKLSAgY2hhciBpZFsxNl07Ci0gIGNoYXIgbmFtZVs0OF07Ci19IG9zc19taXhleHRfcm9vdDsKLQotdHlwZWRlZiBzdHJ1Y3Qgb3NzX21peGVyX3ZhbHVlCi17Ci0gIGludCBkZXY7Ci0gIGludCBjdHJsOwotICBpbnQgdmFsdWU7Ci0gIGludCBmbGFnczsJCQkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gSW5pdGlhbGl6ZSB0byAwICovCi0gIGludCB0aW1lc3RhbXA7CQkvKiBNdXN0IGJlIHNldCB0byBvc3NfbWl4ZXh0LnRpbWVzdGFtcCAqLwotICBpbnQgZmlsbGVyWzhdOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIEluaXRpYWxpemUgdG8gMCAqLwotfSBvc3NfbWl4ZXJfdmFsdWU7Ci0KLSNkZWZpbmUgT1NTX0VOVU1fTUFYVkFMVUUJMjU1Ci0jZGVmaW5lIE9TU19FTlVNX1NUUklOR1NJWkUJMzAwMAotdHlwZWRlZiBzdHJ1Y3Qgb3NzX21peGVyX2VudW1pbmZvCi17Ci0gIGludCBkZXY7Ci0gIGludCBjdHJsOwotICBpbnQgbnZhbHVlczsKLSAgaW50IHZlcnNpb247CQkJLyogUmVhZCB0aGUgbWFudWFsICovCi0gIHNob3J0IHN0cmluZGV4W09TU19FTlVNX01BWFZBTFVFXTsKLSAgY2hhciBzdHJpbmdzW09TU19FTlVNX1NUUklOR1NJWkVdOwotfSBvc3NfbWl4ZXJfZW51bWluZm87Ci0KLSNkZWZpbmUgT1BFTl9SRUFECVBDTV9FTkFCTEVfSU5QVVQKLSNkZWZpbmUgT1BFTl9XUklURQlQQ01fRU5BQkxFX09VVFBVVAotI2RlZmluZSBPUEVOX1JFQURXUklURQkoT1BFTl9SRUFEfE9QRU5fV1JJVEUpCi0KLXR5cGVkZWYgc3RydWN0IG9zc19hdWRpb2luZm8KLXsKLSAgaW50IGRldjsJCQkvKiBBdWRpbyBkZXZpY2UgbnVtYmVyICovCi0gIGNoYXIgbmFtZVs2NF07Ci0gIGludCBidXN5OwkJCS8qIDAsIE9QRU5fUkVBRCwgT1BFTl9XUklURSBvciBPUEVOX1JFQURXUklURSAqLwotICBpbnQgcGlkOwotICBpbnQgY2FwczsJCQkvKiBQQ01fQ0FQX0lOUFVULCBQQ01fQ0FQX09VVFBVVCAqLwotICBpbnQgaWZvcm1hdHMsIG9mb3JtYXRzOwotICBpbnQgbWFnaWM7CQkJLyogUmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSAqLwotICBjaGFyIGNtZFs2NF07CQkJLyogQ29tbWFuZCB1c2luZyB0aGUgZGV2aWNlIChpZiBrbm93bikgKi8KLSAgaW50IGNhcmRfbnVtYmVyOwotICBpbnQgcG9ydF9udW1iZXI7Ci0gIGludCBtaXhlcl9kZXY7Ci0gIGludCBsZWdhY3lfZGV2aWNlOwkJLyogT2Jzb2xldGUgZmllbGQuIFJlcGxhY2VkIGJ5IGRldm5vZGUgKi8KLSAgaW50IGVuYWJsZWQ7CQkJLyogMT1lbmFibGVkLCAwPWRldmljZSBub3QgcmVhZHkgYXQgdGhpcyBtb21lbnQgKi8KLSAgaW50IGZsYWdzOwkJCS8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAtIG5vIHByYWN0aWNhbCBtZWFuaW5nICovCi0gIGludCBtaW5fcmF0ZSwgbWF4X3JhdGU7CS8qIFNhbXBsZSByYXRlIGxpbWl0cyAqLwotICBpbnQgbWluX2NoYW5uZWxzLCBtYXhfY2hhbm5lbHM7CS8qIE51bWJlciBvZiBjaGFubmVscyBzdXBwb3J0ZWQgKi8KLSAgaW50IGJpbmRpbmc7CQkJLyogRFNQX0JJTkRfRlJPTlQsIGV0Yy4gMCBtZWFucyB1bmRlZmluZWQgKi8KLSAgaW50IHJhdGVfc291cmNlOwotICBjaGFyIGhhbmRsZVszMl07Ci0jZGVmaW5lIE9TU19NQVhfU0FNUExFX1JBVEVTCTIwCS8qIENhbm5vdCBiZSBjaGFuZ2VkICAqLwotICB1bnNpZ25lZCBpbnQgbnJhdGVzLCByYXRlc1tPU1NfTUFYX1NBTVBMRV9SQVRFU107CS8qIFBsZWFzZSByZWFkIHRoZSBtYW51YWwgYmVmb3JlIHVzaW5nIHRoZXNlICovCi0gIG9zc19sb25nbmFtZV90IHNvbmdfbmFtZTsJLyogU29uZyBuYW1lIChpZiBnaXZlbikgKi8KLSAgb3NzX2xhYmVsX3QgbGFiZWw7CQkvKiBEZXZpY2UgbGFiZWwgKGlmIGdpdmVuKSAqLwotICBpbnQgbGF0ZW5jeTsJCQkvKiBJbiB1c2VjcywgLTE9dW5rbm93biAqLwotICBvc3NfZGV2bm9kZV90IGRldm5vZGU7CS8qIERldmljZSBzcGVjaWFsIGZpbGUgbmFtZSAoYWJzb2x1dGUgcGF0aCkgKi8KLSAgaW50IG5leHRfcGxheV9lbmdpbmU7CQkvKiBSZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm8gKi8KLSAgaW50IG5leHRfcmVjX2VuZ2luZTsJCS8qIFJlYWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mbyAqLwotICBpbnQgZmlsbGVyWzE4NF07Ci19IG9zc19hdWRpb2luZm87Ci0KLXR5cGVkZWYgc3RydWN0IG9zc19taXhlcmluZm8KLXsKLSAgaW50IGRldjsKLSAgY2hhciBpZFsxNl07Ci0gIGNoYXIgbmFtZVszMl07Ci0gIGludCBtb2RpZnlfY291bnRlcjsKLSAgaW50IGNhcmRfbnVtYmVyOwotICBpbnQgcG9ydF9udW1iZXI7Ci0gIGNoYXIgaGFuZGxlWzMyXTsKLSAgaW50IG1hZ2ljOwkJCS8qIFJlc2VydmVkICovCi0gIGludCBlbmFibGVkOwkJCS8qIFJlc2VydmVkICovCi0gIGludCBjYXBzOwotI2RlZmluZSBNSVhFUl9DQVBfVklSVFVBTAkweDAwMDAwMDAxCi0jZGVmaW5lIE1JWEVSX0NBUF9MQVlPVVRfQgkweDAwMDAwMDAyCS8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwotI2RlZmluZSBNSVhFUl9DQVBfTkFSUk9XCTB4MDAwMDAwMDQJLyogQ29uc2VydmUgaG9yaXogc3BhY2UgKi8KLSAgaW50IGZsYWdzOwkJCS8qIFJlc2VydmVkICovCi0gIGludCBucmV4dDsKLSAgLyoKLSAgICogVGhlIHByaW9yaXR5IGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgZGVmYXVsdCAobW90aGVyYm9hcmQpCi0gICAqIG1peGVyIGRldmljZS4gVGhlIG1peGVyIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaXMgdGhlCi0gICAqIG1vc3QgcHJlZmVycmVkIG9uZS4gLTIgb3IgbGVzcyBtZWFucyB0aGF0IHRoaXMgZGV2aWNlIGNhbm5vdCBiZSB1c2VkCi0gICAqIGFzIHRoZSBkZWZhdWx0IG1peGVyLgotICAgKi8KLSAgaW50IHByaW9yaXR5OwotICBvc3NfZGV2bm9kZV90IGRldm5vZGU7CS8qIERldmljZSBzcGVjaWFsIGZpbGUgbmFtZSAoYWJzb2x1dGUgcGF0aCkgKi8KLSAgaW50IGxlZ2FjeV9kZXZpY2U7Ci0gIGludCBmaWxsZXJbMjQ1XTsJCS8qIFJlc2VydmVkICovCi19IG9zc19taXhlcmluZm87Ci0KLXR5cGVkZWYgc3RydWN0IG9zc19taWRpX2luZm8KLXsKLSAgaW50IGRldjsJCQkvKiBNaWRpIGRldmljZSBudW1iZXIgKi8KLSAgY2hhciBuYW1lWzY0XTsKLSAgaW50IGJ1c3k7CQkJLyogMCwgT1BFTl9SRUFELCBPUEVOX1dSSVRFIG9yIE9QRU5fUkVBRFdSSVRFICovCi0gIGludCBwaWQ7Ci0gIGNoYXIgY21kWzY0XTsJCQkvKiBDb21tYW5kIHVzaW5nIHRoZSBkZXZpY2UgKGlmIGtub3duKSAqLwotICBpbnQgY2FwczsKLSNkZWZpbmUgTUlESV9DQVBfTVBVNDAxCQkweDAwMDAwMDAxCS8qKioqIE9CU09MRVRFICoqKiovCi0jZGVmaW5lIE1JRElfQ0FQX0lOUFVUCQkweDAwMDAwMDAyCi0jZGVmaW5lIE1JRElfQ0FQX09VVFBVVAkJMHgwMDAwMDAwNAotI2RlZmluZSBNSURJX0NBUF9JTk9VVAkJKE1JRElfQ0FQX0lOUFVUfE1JRElfQ0FQX09VVFBVVCkKLSNkZWZpbmUgTUlESV9DQVBfVklSVFVBTAkweDAwMDAwMDA4CS8qIFBzZXVkbyBkZXZpY2UgKi8KLSNkZWZpbmUgTUlESV9DQVBfTVRDSU5QVVQJMHgwMDAwMDAxMAkvKiBTdXBwb3J0cyBTTkRDVExfTUlESV9NVENJTlBVVCAqLwotI2RlZmluZSBNSURJX0NBUF9DTElFTlQJCTB4MDAwMDAwMjAJLyogVmlydHVhbCBjbGllbnQgc2lkZSBkZXZpY2UgKi8KLSNkZWZpbmUgTUlESV9DQVBfU0VSVkVSCQkweDAwMDAwMDQwCS8qIFZpcnR1YWwgc2VydmVyIHNpZGUgZGV2aWNlICovCi0jZGVmaW5lIE1JRElfQ0FQX0lOVEVSTkFMCTB4MDAwMDAwODAJLyogSW50ZXJuYWwgKHN5bnRoKSBkZXZpY2UgKi8KLSNkZWZpbmUgTUlESV9DQVBfRVhURVJOQUwJMHgwMDAwMDEwMAkvKiBleHRlcm5hbCAoTUlESSBwb3J0KSBkZXZpY2UgKi8KLSNkZWZpbmUgTUlESV9DQVBfUFRPUAkJMHgwMDAwMDIwMAkvKiBQb2ludCB0byBwb2ludCBsaW5rIHRvIG9uZSBkZXZpY2UgKi8KLSNkZWZpbmUgTUlESV9DQVBfTVRDCQkweDAwMDAwNDAwCS8qIE1UQy9TTVBURSAoY29udHJvbCkgZGV2aWNlICovCi0gIGludCBtYWdpYzsJCQkvKiBSZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0gIGludCBjYXJkX251bWJlcjsKLSAgaW50IHBvcnRfbnVtYmVyOwotICBpbnQgZW5hYmxlZDsJCQkvKiAxPWVuYWJsZWQsIDA9ZGV2aWNlIG5vdCByZWFkeSBhdCB0aGlzIG1vbWVudCAqLwotICBpbnQgZmxhZ3M7CQkJLyogRm9yIGludGVybmFsIHVzZSBvbmx5IC0gbm8gcHJhY3RpY2FsIG1lYW5pbmcgKi8KLSAgY2hhciBoYW5kbGVbMzJdOwotICBvc3NfbG9uZ25hbWVfdCBzb25nX25hbWU7CS8qIFNvbmcgbmFtZSAoaWYga25vd24pICovCi0gIG9zc19sYWJlbF90IGxhYmVsOwkJLyogRGV2aWNlIGxhYmVsIChpZiBnaXZlbikgKi8KLSAgaW50IGxhdGVuY3k7CQkJLyogSW4gdXNlY3MsIC0xPXVua25vd24gKi8KLSAgb3NzX2Rldm5vZGVfdCBkZXZub2RlOwkvKiBEZXZpY2Ugc3BlY2lhbCBmaWxlIG5hbWUgKGFic29sdXRlIHBhdGgpICovCi0gIGludCBsZWdhY3lfZGV2aWNlOwkJLyogTGVnYWN5IGRldmljZSBtYXBwaW5nICovCi0gIGludCBmaWxsZXJbMjM1XTsKLX0gb3NzX21pZGlfaW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3Qgb3NzX2NhcmRfaW5mbwotewotICBpbnQgY2FyZDsKLSAgY2hhciBzaG9ydG5hbWVbMTZdOwotICBjaGFyIGxvbmduYW1lWzEyOF07Ci0gIGludCBmbGFnczsKLSAgY2hhciBod19pbmZvWzQwMF07Ci0gIGludCBpbnRyX2NvdW50LCBhY2tfY291bnQ7Ci0gIGludCBmaWxsZXJbMTU0XTsKLX0gb3NzX2NhcmRfaW5mbzsKLQotI2RlZmluZSBTTkRDVExfU1lTSU5GTwkJX19TSU9SICgnWCcsIDEsIG9zc19zeXNpbmZvKQotI2RlZmluZSBPU1NfU1lTSU5GTwkJU05EQ1RMX1NZU0lORk8JLyogT2xkIG5hbWUgKi8KLQotI2RlZmluZSBTTkRDVExfTUlYX05STUlYCV9fU0lPUiAoJ1gnLCAyLCBpbnQpCi0jZGVmaW5lIFNORENUTF9NSVhfTlJFWFQJX19TSU9XUignWCcsIDMsIGludCkKLSNkZWZpbmUgU05EQ1RMX01JWF9FWFRJTkZPCV9fU0lPV1IoJ1gnLCA0LCBvc3NfbWl4ZXh0KQotI2RlZmluZSBTTkRDVExfTUlYX1JFQUQJCV9fU0lPV1IoJ1gnLCA1LCBvc3NfbWl4ZXJfdmFsdWUpCi0jZGVmaW5lIFNORENUTF9NSVhfV1JJVEUJX19TSU9XUignWCcsIDYsIG9zc19taXhlcl92YWx1ZSkKLQotI2RlZmluZSBTTkRDVExfQVVESU9JTkZPCV9fU0lPV1IoJ1gnLCA3LCBvc3NfYXVkaW9pbmZvKQotI2RlZmluZSBTTkRDVExfTUlYX0VOVU1JTkZPCV9fU0lPV1IoJ1gnLCA4LCBvc3NfbWl4ZXJfZW51bWluZm8pCi0jZGVmaW5lIFNORENUTF9NSURJSU5GTwkJX19TSU9XUignWCcsIDksIG9zc19taWRpX2luZm8pCi0jZGVmaW5lIFNORENUTF9NSVhFUklORk8JX19TSU9XUignWCcsMTAsIG9zc19taXhlcmluZm8pCi0jZGVmaW5lIFNORENUTF9DQVJESU5GTwkJX19TSU9XUignWCcsMTEsIG9zc19jYXJkX2luZm8pCi0jZGVmaW5lIFNORENUTF9FTkdJTkVJTkZPCV9fU0lPV1IoJ1gnLDEyLCBvc3NfYXVkaW9pbmZvKQotI2RlZmluZSBTTkRDVExfQVVESU9JTkZPX0VYCV9fU0lPV1IoJ1gnLDEzLCBvc3NfYXVkaW9pbmZvKQotCi0jZGVmaW5lIFNORENUTF9NSVhfREVTQ1JJUFRJT04JX19TSU9XUignWCcsMTQsIG9zc19taXhlcl9lbnVtaW5mbykKLQotLyogaW9jdGwgY29kZXMgJ1gnLCAyMDAtMjU1IGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlICovCi0KLS8qCi0gKiBGZXcgbW9yZSAiZ2xvYmFsbHkiIGF2YWlsYWJsZSBpb2N0bCBjYWxscy4KLSAqLwotI2RlZmluZSBTTkRDVExfU0VUU09ORwkJX19TSU9XICgnWScsIDIsIG9zc19sb25nbmFtZV90KQotI2RlZmluZSBTTkRDVExfR0VUU09ORwkJX19TSU9SICgnWScsIDIsIG9zc19sb25nbmFtZV90KQotI2RlZmluZSBTTkRDVExfU0VUTkFNRQkJX19TSU9XICgnWScsIDMsIG9zc19sb25nbmFtZV90KQotI2RlZmluZSBTTkRDVExfU0VUTEFCRUwJCV9fU0lPVyAoJ1knLCA0LCBvc3NfbGFiZWxfdCkKLSNkZWZpbmUgU05EQ1RMX0dFVExBQkVMCQlfX1NJT1IgKCdZJywgNCwgb3NzX2xhYmVsX3QpCi0vKgotICogVGhlICJuZXciIG1peGVyIEFQSSBkZWZpbml0aW9ucyBlbmQgaGVyZS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRmV3IHJvdXRpbmVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIC1sT1NTbGliCi0gKgotICogQXQgdGhpcyBtb21lbnQgdGhpcyBpbnRlcmZhY2UgaXMgbm90IHVzZWQuIE9TU2xpYiBjb250YWlucyBqdXN0Ci0gKiBzdHVicyB0aGF0IGNhbGwgdGhlIHJlbGF0ZWQgc3lzdGVtIGNhbGxzIGRpcmVjdGx5LgotICovCi0jaWZkZWYgT1NTTElCCi1leHRlcm4gaW50IG9zc2xpYl9vcGVuIChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIGludCBkdW1teSk7Ci1leHRlcm4gdm9pZCBvc3NsaWJfY2xvc2UgKGludCBmZCk7Ci1leHRlcm4gaW50IG9zc2xpYl93cml0ZSAoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIGludCBjb3VudCk7Ci1leHRlcm4gaW50IG9zc2xpYl9yZWFkIChpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGNvdW50KTsKLWV4dGVybiBpbnQgb3NzbGliX2lvY3RsIChpbnQgZmQsIHVuc2lnbmVkIGludCByZXF1ZXN0LCB2b2lkICphcmcpOwotI2Vsc2UKLSMgIGRlZmluZSBvc3NsaWJfb3BlbglvcGVuCi0jICBkZWZpbmUgb3NzbGliX2Nsb3NlCWNsb3NlCi0jICBkZWZpbmUgb3NzbGliX3dyaXRlCXdyaXRlCi0jICBkZWZpbmUgb3NzbGliX3JlYWQJcmVhZAotIyAgZGVmaW5lIG9zc2xpYl9pb2N0bAlpb2N0bAotI2VuZGlmCi0KLSNpZiAxCi0jZGVmaW5lIFNORENUTF9EU1BfTk9OQkxPQ0sJCV9fU0lPICAoJ1AnLDE0KQkvKiBPYnNvbGV0ZS4gTm90IHN1cHBvcnRlZCBhbnkgbW9yZSAqLwotI2VuZGlmCi0KLSNpZiAxCi0vKgotICogU29tZSBvYnNvbGV0ZSBtYWNyb3MgdGhhdCBhcmUgbm90IHBhcnQgb2YgT3BlbiBTb3VuZCBTeXN0ZW0gQVBJLgotICovCi0jZGVmaW5lIFNPVU5EX1BDTV9SRUFEX1JBVEUgICAgICAgICAgICAgU09VTkRfUENNX1JFQURfUkFURV9pc19vYnNvbGV0ZQotI2RlZmluZSBTT1VORF9QQ01fUkVBRF9CSVRTICAgICAgICAgICAgIFNPVU5EX1BDTV9SRUFEX0JJVFNfaXNfb2Jzb2xldGUKLSNkZWZpbmUgU09VTkRfUENNX1JFQURfQ0hBTk5FTFMgICAgICAgICBTT1VORF9QQ01fUkVBRF9DSEFOTkVMU19pc19vYnNvbGV0ZQotI2RlZmluZSBTT1VORF9QQ01fV1JJVEVfUkFURSAgICAgICAgICAgIFNPVU5EX1BDTV9XUklURV9SQVRFX2lzX29ic29sZXRfdXNlX1NORENUTF9EU1BfU1BFRURfaW5zdGVhZAotI2RlZmluZSBTT1VORF9QQ01fV1JJVEVfQ0hBTk5FTFMgICAgICAgIFNPVU5EX1BDTV9XUklURV9DSEFOTkVMU19pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9DSEFOTkVMU19pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9XUklURV9CSVRTICAgICAgICAgICAgU09VTkRfUENNX1dSSVRFX0JJVFNfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfU0VURk1UX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX1BPU1QgICAgICAgICAgICAgICAgICBTT1VORF9QQ01fUE9TVF9pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9QT1NUX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX1JFU0VUICAgICAgICAgICAgICAgICBTT1VORF9QQ01fUkVTRVRfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfSEFMVF9pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9TWU5DICAgICAgICAgICAgICAgICAgU09VTkRfUENNX1NZTkNfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfU1lOQ19pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9TVUJESVZJREUgICAgICAgICAgICAgU09VTkRfUENNX1NVQkRJVklERV9pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9TVUJESVZJREVfaW5zdGVhZAotI2RlZmluZSBTT1VORF9QQ01fU0VURlJBR01FTlQgICAgICAgICAgIFNPVU5EX1BDTV9TRVRGUkFHTUVOVF9pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9TRVRGUkFHTUVOVF9pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9HRVRGTVRTICAgICAgICAgICAgICAgU09VTkRfUENNX0dFVEZNVFNfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfR0VURk1UU19pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9TRVRGTVQgICAgICAgICAgICAgICAgU09VTkRfUENNX1NFVEZNVF9pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9TRVRGTVRfaW5zdGVhZAotI2RlZmluZSBTT1VORF9QQ01fR0VUT1NQQUNFICAgICAgICAgICAgIFNPVU5EX1BDTV9HRVRPU1BBQ0VfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfR0VUT1NQQUNFX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX0dFVElTUEFDRSAgICAgICAgICAgICBTT1VORF9QQ01fR0VUSVNQQUNFX2lzX29ic29sZXRlX3VzZV9TTkRDVExfRFNQX0dFVElTUEFDRV9pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9OT05CTE9DSyAgICAgICAgICAgICAgU09VTkRfUENNX05PTkJMT0NLX2lzX29ic29sZXRlX3VzZV9TTkRDVExfRFNQX05PTkJMT0NLX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX0dFVENBUFMgICAgICAgICAgICAgICBTT1VORF9QQ01fR0VUQ0FQU19pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9HRVRDQVBTX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX0dFVFRSSUdHRVIgICAgICAgICAgICBTT1VORF9QQ01fR0VUVFJJR0dFUl9pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9HRVRUUklHR0VSX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX1NFVFRSSUdHRVIgICAgICAgICAgICBTT1VORF9QQ01fU0VUVFJJR0dFUl9pc19vYnNvbGV0ZV91c2VfU05EQ1RMX0RTUF9TRVRUUklHR0VSX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX1NFVFNZTkNSTyAgICAgICAgICAgICBTT1VORF9QQ01fU0VUU1lOQ1JPX2lzX29ic29sZXRlX3VzZV9TTkRDVExfRFNQX1NFVFNZTkNST19pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9HRVRJUFRSICAgICAgICAgICAgICAgU09VTkRfUENNX0dFVElQVFJfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfR0VUSVBUUl9pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9HRVRPUFRSICAgICAgICAgICAgICAgU09VTkRfUENNX0dFVE9QVFJfaXNfb2Jzb2xldGVfdXNlX1NORENUTF9EU1BfR0VUT1BUUl9pbnN0ZWFkCi0jZGVmaW5lIFNPVU5EX1BDTV9NQVBJTkJVRiAgICAgICAgICAgICAgU09VTkRfUENNX01BUElOQlVGX2lzX29ic29sZXRlX3VzZV9TTkRDVExfRFNQX01BUElOQlVGX2luc3RlYWQKLSNkZWZpbmUgU09VTkRfUENNX01BUE9VVEJVRiAgICAgICAgICAgICBTT1VORF9QQ01fTUFQT1VUQlVGX2lzX29ic29sZXRlX3VzZV9TTkRDVExfRFNQX01BUE9VVEJVRl9pbnN0ZWFkCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zeXMvb3NzNC9vc3M0LXNvdXJjZS5jIGIvc3lzL29zczQvb3NzNC1zb3VyY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRiMzE1ZC4uMDAwMDAwMAotLS0gYS9zeXMvb3NzNC9vc3M0LXNvdXJjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ2ICswLDAgQEAKLS8qIEdTdHJlYW1lciBPU1M0IGF1ZGlvIHNvdXJjZQotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1vc3M0c3JjCi0gKgotICogVGhpcyBlbGVtZW50IGxldHMgeW91IHJlY29yZCBzb3VuZCB1c2luZyB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gKE9TUykKLSAqIHZlcnNpb24gNC4KLSAqIAotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBvc3M0c3JjICEgcXVldWUgISBhdWRpb2NvbnZlcnQgISB2b3JiaXNlbmMgISBvZ2dtdXggISBmaWxlc2luayBsb2NhdGlvbj1teW11c2ljLm9nZwotICogXXwgd2lsbCByZWNvcmQgc291bmQgZnJvbSB5b3VyIHNvdW5kIGNhcmQgdXNpbmcgT1NTNCBhbmQgZW5jb2RlIGl0IHRvIGFuCi0gKiBPZ2cvVm9yYmlzIGZpbGUgKHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91ciBtaXhlciBzZXR0aW5ncyBhcmUgcmlnaHQKLSAqIGFuZCB0aGUgcmlnaHQgaW5wdXRzIGFyZWVuYWJsZWQgZXRjLikKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotLyogRklYTUU6IG1ha2Ugc3VyZSB3ZSdyZSBub3QgZG9pbmcgaW9jdGxzIGZyb20gdGhlIGFwcCB0aHJlYWQgKGUuZy4gdmlhIHRoZQotICogbWl4ZXIgaW50ZXJmYWNlKSB3aGlsZSByZWNvcmRpbmcgKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLSNkZWZpbmUgTk9fTEVHQUNZX01JWEVSCi0jaW5jbHVkZSAib3NzNC1hdWRpby5oIgotI2luY2x1ZGUgIm9zczQtc291cmNlLmgiCi0jaW5jbHVkZSAib3NzNC1wcm9wZXJ0eS1wcm9iZS5oIgotI2luY2x1ZGUgIm9zczQtc291bmRjYXJkLmgiCi0KLSNkZWZpbmUgR1NUX09TUzRfU09VUkNFX0lTX09QRU4oc3JjKSAgKEdTVF9PU1M0X1NPVVJDRShzcmMpLT5mZCAhPSAtMSkKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAob3NzNHNyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3M0c3JjX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9ERVZJQ0UgICAgICAgTlVMTAotI2RlZmluZSBERUZBVUxUX0RFVklDRV9OQU1FICBOVUxMCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0RFVklDRSwKLSAgUFJPUF9ERVZJQ0VfTkFNRQotfTsKLQotI2RlZmluZSBnc3Rfb3NzNF9zb3VyY2VfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0T3NzNFNvdXJjZSwgZ3N0X29zczRfc291cmNlLCBHU1RfVFlQRV9BVURJT19TUkMpOwotCi1zdGF0aWMgdm9pZCBnc3Rfb3NzNF9zb3VyY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X29zczRfc291cmNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIHZvaWQgZ3N0X29zczRfc291cmNlX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X29zczRfc291cmNlX2ZpbmFsaXplIChHc3RPc3M0U291cmNlICogb3Nzc3JjKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9vc3M0X3NvdXJjZV9nZXRjYXBzIChHc3RCYXNlU3JjICogYnNyYywgR3N0Q2FwcyAqIGZpbHRlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3NzNF9zb3VyY2Vfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjLAotICAgIGdib29sZWFuIHNpbGVudF9lcnJvcnMpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3M0X3NvdXJjZV9vcGVuX2Z1bmMgKEdzdEF1ZGlvU3JjICogYXNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X29zczRfc291cmNlX2Nsb3NlIChHc3RBdWRpb1NyYyAqIGFzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3M0X3NvdXJjZV9wcmVwYXJlIChHc3RBdWRpb1NyYyAqIGFzcmMsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3M0X3NvdXJjZV91bnByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYyk7Ci1zdGF0aWMgZ3VpbnQgZ3N0X29zczRfc291cmNlX3JlYWQgKEdzdEF1ZGlvU3JjICogYXNyYywgZ3BvaW50ZXIgZGF0YSwKLSAgICBndWludCBsZW5ndGgsIEdzdENsb2NrVGltZSAqIHRpbWVzdGFtcCk7Ci1zdGF0aWMgZ3VpbnQgZ3N0X29zczRfc291cmNlX2RlbGF5IChHc3RBdWRpb1NyYyAqIGFzcmMpOwotc3RhdGljIHZvaWQgZ3N0X29zczRfc291cmNlX3Jlc2V0IChHc3RBdWRpb1NyYyAqIGFzcmMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X29zczRfc291cmNlX2NsYXNzX2luaXQgKEdzdE9zczRTb3VyY2VDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzczsKLSAgR3N0QmFzZVNyY0NsYXNzICpnc3RiYXNlc3JjX2NsYXNzOwotICBHc3RBdWRpb1NyY0NsYXNzICpnc3RhdWRpb3NyY19jbGFzczsKLSAgR3N0UGFkVGVtcGxhdGUgKnRlbXBsOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNyY19jbGFzcyA9IChHc3RCYXNlU3JjQ2xhc3MgKikga2xhc3M7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzID0gKEdzdEF1ZGlvU3JjQ2xhc3MgKikga2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF9vc3M0X3NvdXJjZV9kaXNwb3NlOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IChHT2JqZWN0RmluYWxpemVGdW5jKSBnc3Rfb3NzNF9zb3VyY2VfZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF9vc3M0X3NvdXJjZV9nZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9vc3M0X3NvdXJjZV9zZXRfcHJvcGVydHk7Ci0KLSAgZ3N0YmFzZXNyY19jbGFzcy0+Z2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc291cmNlX2dldGNhcHMpOwotCi0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5vcGVuID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3M0X3NvdXJjZV9vcGVuX2Z1bmMpOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cHJlcGFyZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzNF9zb3VyY2VfcHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT51bnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc291cmNlX3VucHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5jbG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzNF9zb3VyY2VfY2xvc2UpOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cmVhZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzNF9zb3VyY2VfcmVhZCk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5kZWxheSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3NzNF9zb3VyY2VfZGVsYXkpOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cmVzZXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zczRfc291cmNlX3Jlc2V0KTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFVklDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJkZXZpY2UiLCAiRGV2aWNlIiwKLSAgICAgICAgICAiT1NTNCBkZXZpY2UgKGUuZy4gL2Rldi9vc3MvaGRhdWRpbzAvcGNtMCBvciAvZGV2L2RzcE4pICIKLSAgICAgICAgICAiKE5VTEwgPSB1c2UgZmlyc3QgYXZhaWxhYmxlIGRldmljZSkiLAotICAgICAgICAgIERFRkFVTFRfREVWSUNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFVklDRV9OQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZS1uYW1lIiwgIkRldmljZSBuYW1lIiwKLSAgICAgICAgICAiSHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGUgc291bmQgZGV2aWNlIiwgREVGQVVMVF9ERVZJQ0VfTkFNRSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiT1NTIHY0IEF1ZGlvIFNvdXJjZSIsICJTb3VyY2UvQXVkaW8iLAotICAgICAgIkNhcHR1cmUgZnJvbSBhIHNvdW5kIGNhcmQgdmlhIE9TUyB2ZXJzaW9uIDQiLAotICAgICAgIlRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Iik7Ci0KLSAgdGVtcGwgPSBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNyYyIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywKLSAgICAgIGdzdF9vc3M0X2F1ZGlvX2dldF90ZW1wbGF0ZV9jYXBzICgpKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZ3N0ZWxlbWVudF9jbGFzcywgdGVtcGwpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zczRfc291cmNlX2luaXQgKEdzdE9zczRTb3VyY2UgKiBvc3NzcmMpCi17Ci0gIGNvbnN0IGdjaGFyICpkZXZpY2U7Ci0KLSAgZGV2aWNlID0gZ19nZXRlbnYgKCJBVURJT0RFViIpOwotICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgZGV2aWNlID0gREVGQVVMVF9ERVZJQ0U7Ci0KLSAgb3Nzc3JjLT5mZCA9IC0xOwotICBvc3NzcmMtPmRldmljZSA9IGdfc3RyZHVwIChkZXZpY2UpOwotICBvc3NzcmMtPmRldmljZV9uYW1lID0gZ19zdHJkdXAgKERFRkFVTFRfREVWSUNFX05BTUUpOwotICBvc3NzcmMtPmRldmljZV9uYW1lID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NvdXJjZV9maW5hbGl6ZSAoR3N0T3NzNFNvdXJjZSAqIG9zcykKLXsKLSAgZ19mcmVlIChvc3MtPmRldmljZSk7Ci0gIG9zcy0+ZGV2aWNlID0gTlVMTDsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKChHT2JqZWN0ICopIChvc3MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NvdXJjZV9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RPc3M0U291cmNlICpvc3MgPSBHU1RfT1NTNF9TT1VSQ0UgKG9iamVjdCk7Ci0KLSAgaWYgKG9zcy0+cHJvYmVkX2NhcHMpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAob3NzLT5wcm9iZWRfY2Fwcyk7Ci0gICAgb3NzLT5wcm9iZWRfY2FwcyA9IE5VTEw7Ci0gIH0KLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NvdXJjZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0T3NzNFNvdXJjZSAqb3NzOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NPVVJDRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChvc3MpOwotICAgICAgaWYgKG9zcy0+ZmQgPT0gLTEpIHsKLSAgICAgICAgZ19mcmVlIChvc3MtPmRldmljZSk7Ci0gICAgICAgIG9zcy0+ZGV2aWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICAgIGdfZnJlZSAob3NzLT5kZXZpY2VfbmFtZSk7Ci0gICAgICAgIG9zcy0+ZGV2aWNlX25hbWUgPSBOVUxMOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ193YXJuaW5nICgiJXM6IGNhbid0IGNoYW5nZSBcImRldmljZVwiIHByb3BlcnR5IHdoaWxlIGF1ZGlvIHNvdXJjZSAiCi0gICAgICAgICAgICAiaXMgb3BlbiIsIEdTVF9PQkpFQ1RfTkFNRSAob3NzKSk7Ci0gICAgICB9Ci0gICAgICBHU1RfT0JKRUNUX1VOTE9DSyAob3NzKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NvdXJjZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0T3NzNFNvdXJjZSAqb3NzOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NPVVJDRSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChvc3MpOwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgb3NzLT5kZXZpY2UpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKG9zcyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfREVWSUNFX05BTUU6Ci0gICAgICBHU1RfT0JKRUNUX0xPQ0sgKG9zcyk7Ci0gICAgICAvKiBJZiBkZXZpY2UgaXMgc2V0LCB0cnkgdG8gcmV0cmlldmUgdGhlIG5hbWUgZXZlbiBpZiB3ZSdyZSBub3Qgb3BlbiAqLwotICAgICAgaWYgKG9zcy0+ZmQgPT0gLTEgJiYgb3NzLT5kZXZpY2UgIT0gTlVMTCkgewotICAgICAgICBpZiAoZ3N0X29zczRfc291cmNlX29wZW4gKEdTVF9BVURJT19TUkMgKG9zcyksIFRSVUUpKSB7Ci0gICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgb3NzLT5kZXZpY2VfbmFtZSk7Ci0gICAgICAgICAgZ3N0X29zczRfc291cmNlX2Nsb3NlIChHU1RfQVVESU9fU1JDIChvc3MpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnY2hhciAqbmFtZSA9IE5VTEw7Ci0KLSAgICAgICAgICBnc3Rfb3NzNF9wcm9wZXJ0eV9wcm9iZV9maW5kX2RldmljZV9uYW1lX25vZmQgKEdTVF9PQkpFQ1QgKG9zcyksCi0gICAgICAgICAgICAgIG9zcy0+ZGV2aWNlLCAmbmFtZSk7Ci0gICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgbmFtZSk7Ci0gICAgICAgICAgZ19mcmVlIChuYW1lKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgb3NzLT5kZXZpY2VfbmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3MpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfb3NzNF9zb3VyY2VfZ2V0Y2FwcyAoR3N0QmFzZVNyYyAqIGJzcmMsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdE9zczRTb3VyY2UgKm9zczsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBvc3MgPSBHU1RfT1NTNF9TT1VSQ0UgKGJzcmMpOwotCi0gIGlmIChvc3MtPmZkID09IC0xKSB7Ci0gICAgY2FwcyA9IGdzdF9vc3M0X2F1ZGlvX2dldF90ZW1wbGF0ZV9jYXBzICgpOwotICB9IGVsc2UgaWYgKG9zcy0+cHJvYmVkX2NhcHMpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfY29weSAob3NzLT5wcm9iZWRfY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgY2FwcyA9IGdzdF9vc3M0X2F1ZGlvX3Byb2JlX2NhcHMgKEdTVF9PQkpFQ1QgKG9zcyksIG9zcy0+ZmQpOwotICAgIGlmIChjYXBzICE9IE5VTEwgJiYgIWdzdF9jYXBzX2lzX2VtcHR5IChjYXBzKSkgewotICAgICAgb3NzLT5wcm9iZWRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotICAgIH0KLSAgfQotCi0gIGlmIChmaWx0ZXIgJiYgY2FwcykgewotICAgIEdzdENhcHMgKmludGVyc2VjdGlvbjsKLQotICAgIGludGVyc2VjdGlvbiA9Ci0gICAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIHJldHVybiBpbnRlcnNlY3Rpb247Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGNhcHM7Ci0gIH0KLX0KLQotLyogbm90ZTogd2UgbXVzdCBub3QgdGFrZSB0aGUgb2JqZWN0IGxvY2sgaGVyZSB1bmxlc3Mgd2UgZml4IHVwIGdldF9wcm9wZXJ0eSAqLwotc3RhdGljIGdib29sZWFuCi1nc3Rfb3NzNF9zb3VyY2Vfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjLCBnYm9vbGVhbiBzaWxlbnRfZXJyb3JzKQotewotICBHc3RPc3M0U291cmNlICpvc3M7Ci0gIGdjaGFyICpkZXZpY2U7Ci0gIGludCBtb2RlOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NPVVJDRSAoYXNyYyk7Ci0KLSAgaWYgKG9zcy0+ZGV2aWNlKQotICAgIGRldmljZSA9IGdfc3RyZHVwIChvc3MtPmRldmljZSk7Ci0gIGVsc2UKLSAgICBkZXZpY2UgPSBnc3Rfb3NzNF9hdWRpb19maW5kX2RldmljZSAoR1NUX09CSkVDVF9DQVNUIChvc3MpKTsKLQotICAvKiBkZXNwZXJhdGUgdGltZXMsIGRlc3BlcmF0ZSBtZWFzdXJlcyAqLwotICBpZiAoZGV2aWNlID09IE5VTEwpCi0gICAgZGV2aWNlID0gZ19zdHJkdXAgKCIvZGV2L2RzcDAiKTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKG9zcywgIlRyeWluZyB0byBvcGVuIE9TUzQgZGV2aWNlICclcyciLCBkZXZpY2UpOwotCi0gIC8qIHdlIG9wZW4gaW4gbm9uLWJsb2NraW5nIG1vZGUgZXZlbiBpZiB3ZSBkb24ndCByZWFsbHkgd2FudCB0byBkbyB3cml0ZXMKLSAgICogbm9uLWJsb2NraW5nIGJlY2F1c2Ugd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHRoaXMgaXMgcmVhbGx5IGEgZ2VudWluZQotICAgKiBPU1M0IGRldmljZSB3aXRoIHdlbGwtYmVoYXZlZCBkcml2ZXJzIGV0Yy4gV2UgcmVhbGx5IGRvbid0IHdhbnQgdG8KLSAgICogaGFuZyBmb3JldmVyIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzLiAqLwotICBvc3MtPmZkID0gb3BlbiAoZGV2aWNlLCBPX1JET05MWSB8IE9fTk9OQkxPQ0ssIDApOwotICBpZiAob3NzLT5mZCA9PSAtMSkgewotICAgIHN3aXRjaCAoZXJybm8pIHsKLSAgICAgIGNhc2UgRUJVU1k6Ci0gICAgICAgIGdvdG8gYnVzeTsKLSAgICAgIGNhc2UgRUFDQ0VTOgotICAgICAgICBnb3RvIG5vX3Blcm1pc3Npb247Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBnb3RvIG9wZW5fZmFpbGVkOwotICAgIH0KLSAgfQotCi0gIEdTVF9JTkZPX09CSkVDVCAob3NzLCAiT3BlbmVkIGRldmljZSIpOwotCi0gIC8qIE1ha2Ugc3VyZSBpdCdzIE9TUzQuIElmIGl0J3Mgb2xkIE9TUywgbGV0IG9zc3NpbmsgaGFuZGxlIGl0ICovCi0gIGlmICghZ3N0X29zczRfYXVkaW9fY2hlY2tfdmVyc2lvbiAoR1NUX09CSkVDVF9DQVNUIChvc3MpLCBvc3MtPmZkKSkKLSAgICBnb3RvIGxlZ2FjeV9vc3M7Ci0KLSAgLyogbm93IHJlbW92ZSB0aGUgbm9uLWJsb2NraW5nIGZsYWcuICovCi0gIG1vZGUgPSBmY250bCAob3NzLT5mZCwgRl9HRVRGTCk7Ci0gIG1vZGUgJj0gfk9fTk9OQkxPQ0s7Ci0gIGlmIChmY250bCAob3NzLT5mZCwgRl9TRVRGTCwgbW9kZSkgPCAwKSB7Ci0gICAgLyogc29tZSBkcml2ZXJzIGRvIG5vIHN1cHBvcnQgdW5zZXR0aW5nIHRoZSBub24tYmxvY2tpbmcgZmxhZywgdHJ5IHRvCi0gICAgICogY2xvc2Uvb3BlbiB0aGUgZGV2aWNlIHRoZW4uIFRoaXMgaXMgcmFjeSBidXQgd2UgZXJyb3Igb3V0IHByb3Blcmx5LiAqLwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob3NzLCAiZmFpbGVkIHRvIHVuc2V0IE9fTk9OQkxPQ0sgKGJ1Z2d5IGRyaXZlcj8pLCAiCi0gICAgICAgICJ3aWxsIHRyeSB0byByZS1vcGVuIGRldmljZSBub3ciKTsKLSAgICBnc3Rfb3NzNF9zb3VyY2VfY2xvc2UgKGFzcmMpOwotICAgIGlmICgob3NzLT5mZCA9IG9wZW4gKGRldmljZSwgT19SRE9OTFksIDApKSA9PSAtMSkKLSAgICAgIGdvdG8gbm9uX2Jsb2NrOwotICB9Ci0KLSAgb3NzLT5vcGVuX2RldmljZSA9IGRldmljZTsKLQotICAvKiBub3QgdXNpbmcgRU5HSU5FSU5GTyBoZXJlIGJlY2F1c2UgaXQgc29tZXRpbWVzIHJldHVybnMgYSBkaWZmZXJlbnQgYW5kCi0gICAqIGxlc3MgdXNlZnVsIG5hbWUgdGhhbiBBVURJT0lORk8gZm9yIHRoZSBzYW1lIGRldmljZSAqLwotICBpZiAoIWdzdF9vc3M0X3Byb3BlcnR5X3Byb2JlX2ZpbmRfZGV2aWNlX25hbWUgKEdTVF9PQkpFQ1QgKG9zcyksIG9zcy0+ZmQsCi0gICAgICAgICAgb3NzLT5vcGVuX2RldmljZSwgJm9zcy0+ZGV2aWNlX25hbWUpKSB7Ci0gICAgb3NzLT5kZXZpY2VfbmFtZSA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWJ1c3k6Ci0gIHsKLSAgICBpZiAoIXNpbGVudF9lcnJvcnMpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBCVVNZLAotICAgICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiAiCi0gICAgICAgICAgICAgICAgICAiRGV2aWNlIGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbi4iKSksIChOVUxMKSk7Ci0gICAgfQotICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX3Blcm1pc3Npb246Ci0gIHsKLSAgICBpZiAoIXNpbGVudF9lcnJvcnMpIHsKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3MsIFJFU09VUkNFLCBPUEVOX1JFQUQsCi0gICAgICAgICAgKF8oIkNvdWxkIG5vdCBvcGVuIGF1ZGlvIGRldmljZSBmb3IgcGxheWJhY2suICIKLSAgICAgICAgICAgICAgICAgICJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gdGhlIGRldmljZS4iKSksCi0gICAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgfQotICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW9wZW5fZmFpbGVkOgotICB7Ci0gICAgaWYgKCFzaWxlbnRfZXJyb3JzKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAob3NzLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBhdWRpbyBkZXZpY2UgZm9yIHBsYXliYWNrLiIpKSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgfQotICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWxlZ2FjeV9vc3M6Ci0gIHsKLSAgICBnc3Rfb3NzNF9zb3VyY2VfY2xvc2UgKGFzcmMpOwotICAgIGlmICghc2lsZW50X2Vycm9ycykgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgICAoXygiQ291bGQgbm90IG9wZW4gYXVkaW8gZGV2aWNlIGZvciBwbGF5YmFjay4gIgotICAgICAgICAgICAgICAgICAgIlRoaXMgdmVyc2lvbiBvZiB0aGUgT3BlbiBTb3VuZCBTeXN0ZW0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzICIKLSAgICAgICAgICAgICAgICAgICJlbGVtZW50LiIpKSwgKCJUcnkgdGhlICdvc3NzaW5rJyBlbGVtZW50IGluc3RlYWQiKSk7Ci0gICAgfQotICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vbl9ibG9jazoKLSAgewotICAgIGlmICghc2lsZW50X2Vycm9ycykgewotICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKG9zcywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksCi0gICAgICAgICAgKCJVbmFibGUgdG8gc2V0IGRldmljZSAlcyBpbnRvIG5vbi1ibG9ja2luZyBtb2RlOiAlcyIsCi0gICAgICAgICAgICAgIG9zcy0+ZGV2aWNlLCBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICB9Ci0gICAgZ19mcmVlIChkZXZpY2UpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3M0X3NvdXJjZV9vcGVuX2Z1bmMgKEdzdEF1ZGlvU3JjICogYXNyYykKLXsKLSAgcmV0dXJuIGdzdF9vc3M0X3NvdXJjZV9vcGVuIChhc3JjLCBGQUxTRSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zczRfc291cmNlX2Nsb3NlIChHc3RBdWRpb1NyYyAqIGFzcmMpCi17Ci0gIEdzdE9zczRTb3VyY2UgKm9zczsKLQotICBvc3MgPSBHU1RfT1NTNF9TT1VSQ0UgKGFzcmMpOwotCi0gIGlmIChvc3MtPmZkICE9IC0xKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAob3NzLCAiY2xvc2luZyBkZXZpY2UiKTsKLSAgICBjbG9zZSAob3NzLT5mZCk7Ci0gICAgb3NzLT5mZCA9IC0xOwotICB9Ci0KLSAgb3NzLT5ieXRlc19wZXJfc2FtcGxlID0gMDsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmb3NzLT5wcm9iZWRfY2FwcywgTlVMTCk7Ci0KLSAgZ19mcmVlIChvc3MtPm9wZW5fZGV2aWNlKTsKLSAgb3NzLT5vcGVuX2RldmljZSA9IE5VTEw7Ci0KLSAgZ19mcmVlIChvc3MtPmRldmljZV9uYW1lKTsKLSAgb3NzLT5kZXZpY2VfbmFtZSA9IE5VTEw7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zczRfc291cmNlX3ByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYywgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIEdzdE9zczRTb3VyY2UgKm9zczsKLQotICBvc3MgPSBHU1RfT1NTNF9TT1VSQ0UgKGFzcmMpOwotCi0gIGlmICghZ3N0X29zczRfYXVkaW9fc2V0X2Zvcm1hdCAoR1NUX09CSkVDVF9DQVNUIChvc3MpLCBvc3MtPmZkLCBzcGVjKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob3NzLCAiQ291bGRuJ3Qgc2V0IHJlcXVlc3RlZCBmb3JtYXQgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIHNwZWMtPmNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIG9zcy0+Ynl0ZXNfcGVyX3NhbXBsZSA9IEdTVF9BVURJT19JTkZPX0JQRiAoJnNwZWMtPmluZm8pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3M0X3NvdXJjZV91bnByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYykKLXsKLSAgLyogY291bGQgZG8gYSBTTkRDVExfRFNQX0hBTFQsIGJ1dCB0aGUgT1NTIG1hbnVhbCByZWNvbW1lbmRzIGEgY2xvc2Uvb3BlbiwKLSAgICogc2luY2UgSEFMVCB3b24ndCBwcm9wZXJseSByZXNldCBzb21lIGRldmljZXMsIGFwcGFyZW50bHkgKi8KLQotICBpZiAoIWdzdF9vc3M0X3NvdXJjZV9jbG9zZSAoYXNyYykpCi0gICAgZ290byBjb3VsZG50X2Nsb3NlOwotCi0gIGlmICghZ3N0X29zczRfc291cmNlX29wZW5fZnVuYyAoYXNyYykpCi0gICAgZ290byBjb3VsZG50X3Jlb3BlbjsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWNvdWxkbnRfY2xvc2U6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhc3JjLCAiQ291bGRuJ3QgY2xvc2UgdGhlIGF1ZGlvIGRldmljZSIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotY291bGRudF9yZW9wZW46Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhc3JjLCAiQ291bGRuJ3QgcmVvcGVuIHRoZSBhdWRpbyBkZXZpY2UiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGd1aW50Ci1nc3Rfb3NzNF9zb3VyY2VfcmVhZCAoR3N0QXVkaW9TcmMgKiBhc3JjLCBncG9pbnRlciBkYXRhLCBndWludCBsZW5ndGgsCi0gICAgR3N0Q2xvY2tUaW1lICogdGltZXN0YW1wKQotewotICBHc3RPc3M0U291cmNlICpvc3M7Ci0gIGludCBuOwotCi0gIG9zcyA9IEdTVF9PU1M0X1NPVVJDRV9DQVNUIChhc3JjKTsKLQotICBuID0gcmVhZCAob3NzLT5mZCwgZGF0YSwgbGVuZ3RoKTsKLSAgR1NUX0xPR19PQkpFQ1QgKGFzcmMsICIldSBieXRlcywgJXUgc2FtcGxlcyIsIG4sIG4gLyBvc3MtPmJ5dGVzX3Blcl9zYW1wbGUpOwotCi0gIGlmIChHX1VOTElLRUxZIChuIDwgMCkpIHsKLSAgICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgICBjYXNlIEVOT1RTVVA6Ci0gICAgICBjYXNlIEVBQ0NFUzp7Ci0gICAgICAgIC8qIFRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5IGNhdXNlLCBJIHRoaW5rICovCi0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhc3JjLCBSRVNPVVJDRSwgUkVBRCwKLSAgICAgICAgICAgIChfKCJSZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGF1ZGlvIGRldmljZS4iKSksCi0gICAgICAgICAgICAoInJlYWQ6ICVzIChkZXZpY2U6ICVzKSAobWF5YmUgdGhpcyBpcyBhbiBvdXRwdXQtb25seSBkZXZpY2U/KSIsCi0gICAgICAgICAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pLCBvc3MtPm9wZW5fZGV2aWNlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVmYXVsdDp7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChhc3JjLCBSRVNPVVJDRSwgUkVBRCwKLSAgICAgICAgICAgIChfKCJFcnJvciByZWNvcmRpbmcgZnJvbSBhdWRpbyBkZXZpY2UuIikpLAotICAgICAgICAgICAgKCJyZWFkOiAlcyAoZGV2aWNlOiAlcykiLCBnX3N0cmVycm9yIChlcnJubyksIG9zcy0+b3Blbl9kZXZpY2UpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIChndWludCkgbjsKLX0KLQotc3RhdGljIGd1aW50Ci1nc3Rfb3NzNF9zb3VyY2VfZGVsYXkgKEdzdEF1ZGlvU3JjICogYXNyYykKLXsKLSAgYXVkaW9fYnVmX2luZm8gaW5mbyA9IHsgMCwgfTsKLSAgR3N0T3NzNFNvdXJjZSAqb3NzOwotICBndWludCBkZWxheTsKLQotICBvc3MgPSBHU1RfT1NTNF9TT1VSQ0VfQ0FTVCAoYXNyYyk7Ci0KLSAgaWYgKGlvY3RsIChvc3MtPmZkLCBTTkRDVExfRFNQX0dFVElTUEFDRSwgJmluZm8pID09IC0xKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKG9zcywgIkdFVElTUEFDRSBmYWlsZWQ6ICVzIiwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGRlbGF5ID0gKGluZm8uZnJhZ3N0b3RhbCAqIGluZm8uZnJhZ3NpemUpIC0gaW5mby5ieXRlczsKLSAgR1NUX0xPR19PQkpFQ1QgKG9zcywgImZyYWdzdG90YWw6JWQsIGZyYWdzaXplOiVkLCBieXRlczolZCwgZGVsYXk6JWQiLAotICAgICAgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplLCBpbmZvLmJ5dGVzLCBkZWxheSk7Ci0gIHJldHVybiBkZWxheTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3M0X3NvdXJjZV9yZXNldCAoR3N0QXVkaW9TcmMgKiBhc3JjKQotewotICAvKiBUaGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGhlcmUgcmVhbGx5OiBPU1MgY2FuJ3QgaGFuZGxlIGFjY2VzcyB0byB0aGUKLSAgICogc2FtZSBkZXZpY2UvZmQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGFuZCBtaWdodCBkZWFkbG9jayBvciBibG93IHVwIGluCi0gICAqIG90aGVyIHdheXMgaWYgd2UgdHJ5IGFuIGlvY3RsIFNORENUTF9EU1BfSEFMVCBvciBzaW1pbGFyICovCi19CmRpZmYgLS1naXQgYS9zeXMvb3NzNC9vc3M0LXNvdXJjZS5oIGIvc3lzL29zczQvb3NzNC1zb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFkOGYxMy4uMDAwMDAwMAotLS0gYS9zeXMvb3NzNC9vc3M0LXNvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyogR1N0cmVhbWVyIE9TUzQgYXVkaW8gc291cmNlCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgR1NUX09TUzRfU09VUkNFX0gKLSNkZWZpbmUgR1NUX09TUzRfU09VUkNFX0gKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9zcmMuaD4KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09TUzRfU09VUkNFICAgICAgICAgICAgKGdzdF9vc3M0X3NvdXJjZV9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfT1NTNF9TT1VSQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9PU1M0X1NPVVJDRSxHc3RPc3M0U291cmNlKSkKLSNkZWZpbmUgR1NUX09TUzRfU09VUkNFX0NBU1Qob2JqKSAgICAgICAoKEdzdE9zczRTb3VyY2UgKikob2JqKSkKLSNkZWZpbmUgR1NUX09TUzRfU09VUkNFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9PU1M0X1NPVVJDRSxHc3RPc3M0U291cmNlQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfT1NTNF9TT1VSQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9PU1M0X1NPVVJDRSkpCi0jZGVmaW5lIEdTVF9JU19PU1M0X1NPVVJDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfT1NTNF9TT1VSQ0UpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0T3NzNFNvdXJjZSBHc3RPc3M0U291cmNlOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zczRTb3VyY2VDbGFzcyBHc3RPc3M0U291cmNlQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0T3NzNFNvdXJjZSB7Ci0gIEdzdEF1ZGlvU3JjICAgICBhdWRpb3NyYzsKLQotICBnY2hhciAgICAgICAgICogZGV2aWNlOyAgICAgICAgICAgICAvKiBOVUxMIGlmIG5vbmUgd2FzIHNldCAgICAgICovCi0gIGdjaGFyICAgICAgICAgKiBvcGVuX2RldmljZTsgICAgICAgIC8qIHRoZSBkZXZpY2Ugd2Ugb3BlbmVkICAgICAgKi8KLSAgZ2NoYXIgICAgICAgICAqIGRldmljZV9uYW1lOyAgICAgICAgLyogc2V0IGlmIHRoZSBkZXZpY2UgaXMgb3BlbiAqLwotICBnaW50ICAgICAgICAgICAgZmQ7ICAgICAgICAgICAgICAgICAvKiAtMSBpZiBub3Qgb3BlbiAgICAgICAgICAgICovCi0gIGdpbnQgICAgICAgICAgICBieXRlc19wZXJfc2FtcGxlOwotCi0gIEdzdENhcHMgICAgICAgKiBwcm9iZWRfY2FwczsKLX07Ci0KLXN0cnVjdCBfR3N0T3NzNFNvdXJjZUNsYXNzIHsKLSAgR3N0QXVkaW9TcmNDbGFzcyBhdWRpb3NyY19jbGFzczsKLX07Ci0KLUdUeXBlICBnc3Rfb3NzNF9zb3VyY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogR1NUX09TUzRfU09VUkNFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtIGIvc3lzL29zeGF1ZGlvL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWYxZDljLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG9zeGF1ZGlvLmxhCi0KLWxpYmdzdG9zeGF1ZGlvX2xhX1NPVVJDRVMgPSBnc3Rvc3hhdWRpb3JpbmdidWZmZXIuYyAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Rvc3hhdWRpb2VsZW1lbnQuYyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0b3N4YXVkaW9zaW5rLmMgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdG9zeGF1ZGlvc3JjLmMgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Rvc3hjb3JlYXVkaW9jb21tb24uYyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdG9zeGNvcmVhdWRpby5jICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0b3N4YXVkaW8uYwotCi1saWJnc3Rvc3hhdWRpb19sYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpIFwKLSAgICAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zCi1saWJnc3Rvc3hhdWRpb19sYV9MSUJBREQgPSAJCQkgIFwKLSAgICAtbGdzdGF1ZGlvLUBHU1RfQVBJX1ZFUlNJT05AICAgICAgIFwKLSAgICAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgICAgICAgICAgXAotICAgICQoR1NUX0JBU0VfTElCUykgICAgICAgICAgICAgICAgICBcCi0gICAgJChHU1RfTElCUykKLQotbGliZ3N0b3N4YXVkaW9fbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKSAtV2wsLWZyYW1ld29yayxDb3JlQXVkaW8gIC1XbCwtZnJhbWV3b3JrLEF1ZGlvVG9vbGJveAotbGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykgLS10YWc9Q0MKLQotbm9pbnN0X0hFQURFUlMgPSBnc3Rvc3hhdWRpb3NpbmsuaAkgIFwKLSAgICAgICAgICAgICAgICAgZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0b3N4YXVkaW9lbGVtZW50LmggXAotICAgICAgICAgICAgICAgICBnc3Rvc3hhdWRpb3JpbmdidWZmZXIuaAkgIFwKLSAgICAgICAgICAgICAgICAgZ3N0b3N4YXVkaW9zcmMuaCAgICAgXAotICAgICAgICAgICAgICAgICBnc3Rvc3hjb3JlYXVkaW9jb21tb24uaCAgICAgXAotICAgICAgICAgICAgICAgICBnc3Rvc3hjb3JlYXVkaW8uaAotCi1FWFRSQV9ESVNUID0gZ3N0b3N4Y29yZWF1ZGlvaGFsLmMgXAotICAgICAgICAgICAgIGdzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmMKLQotaWYgIUhBVkVfSU9TCi1saWJnc3Rvc3hhdWRpb19sYV9TT1VSQ0VTICs9IGdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuYwotbGliZ3N0b3N4YXVkaW9fbGFfTERGTEFHUyArPSAtV2wsLWZyYW1ld29yayxBdWRpb1VuaXQgLVdsLC1mcmFtZXdvcmssQ29yZVNlcnZpY2VzCi1lbHNlCi1FWFRSQV9ESVNUICs9IGdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuYwotZW5kaWYKZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9NYWtlZmlsZS5pbiBiL3N5cy9vc3hhdWRpby9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzODQ2MC4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMDAxICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLUBIQVZFX0lPU19GQUxTRUBhbV9fYXBwZW5kXzEgPSBnc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmMKLUBIQVZFX0lPU19GQUxTRUBhbV9fYXBwZW5kXzIgPSAtV2wsLWZyYW1ld29yayxBdWRpb1VuaXQgLVdsLC1mcmFtZXdvcmssQ29yZVNlcnZpY2VzCi1ASEFWRV9JT1NfVFJVRUBhbV9fYXBwZW5kXzMgPSBnc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmMKLXN1YmRpciA9IHN5cy9vc3hhdWRpbwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdG9zeGF1ZGlvX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fX2xpYmdzdG9zeGF1ZGlvX2xhX1NPVVJDRVNfRElTVCA9IGdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jIFwKLQlnc3Rvc3hhdWRpb2VsZW1lbnQuYyBnc3Rvc3hhdWRpb3NpbmsuYyBnc3Rvc3hhdWRpb3NyYy5jIFwKLQlnc3Rvc3hjb3JlYXVkaW9jb21tb24uYyBnc3Rvc3hjb3JlYXVkaW8uYyBnc3Rvc3hhdWRpby5jIFwKLQlnc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmMKLUBIQVZFX0lPU19GQUxTRUBhbV9fb2JqZWN0c18xID0gbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5sbwotYW1fbGliZ3N0b3N4YXVkaW9fbGFfT0JKRUNUUyA9ICBcCi0JbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmxvIFwKLQlsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb2VsZW1lbnQubG8gXAotCWxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc2luay5sbyBcCi0JbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9zcmMubG8gXAotCWxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGNvcmVhdWRpb2NvbW1vbi5sbyBcCi0JbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvLmxvIFwKLQlsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpby5sbyAkKGFtX19vYmplY3RzXzEpCi1saWJnc3Rvc3hhdWRpb19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3Rvc3hhdWRpb19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0b3N4YXVkaW9fbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayBcCi0JJChDQ0xEKSAkKGxpYmdzdG9zeGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdG9zeGF1ZGlvX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGxpYmdzdG9zeGF1ZGlvX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGFtX19saWJnc3Rvc3hhdWRpb19sYV9TT1VSQ0VTX0RJU1QpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG9zeGF1ZGlvLmxhCi1saWJnc3Rvc3hhdWRpb19sYV9TT1VSQ0VTID0gZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmMgXAotCWdzdG9zeGF1ZGlvZWxlbWVudC5jIGdzdG9zeGF1ZGlvc2luay5jIGdzdG9zeGF1ZGlvc3JjLmMgXAotCWdzdG9zeGNvcmVhdWRpb2NvbW1vbi5jIGdzdG9zeGNvcmVhdWRpby5jIGdzdG9zeGF1ZGlvLmMgXAotCSQoYW1fX2FwcGVuZF8xKQotbGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSBcCi0gICAgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucwotCi1saWJnc3Rvc3hhdWRpb19sYV9MSUJBREQgPSBcCi0gICAgLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCAgICAgICBcCi0gICAgJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICAgICAgICAgIFwKLSAgICAkKEdTVF9CQVNFX0xJQlMpICAgICAgICAgICAgICAgICAgXAotICAgICQoR1NUX0xJQlMpCi0KLWxpYmdzdG9zeGF1ZGlvX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgXAotCS1XbCwtZnJhbWV3b3JrLENvcmVBdWRpbyAtV2wsLWZyYW1ld29yayxBdWRpb1Rvb2xib3ggXAotCSQoYW1fX2FwcGVuZF8yKQotbGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykgLS10YWc9Q0MKLW5vaW5zdF9IRUFERVJTID0gZ3N0b3N4YXVkaW9zaW5rLmgJICBcCi0gICAgICAgICAgICAgICAgIGdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuaCBcCi0gICAgICAgICAgICAgICAgIGdzdG9zeGF1ZGlvZWxlbWVudC5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmgJICBcCi0gICAgICAgICAgICAgICAgIGdzdG9zeGF1ZGlvc3JjLmggICAgIFwKLSAgICAgICAgICAgICAgICAgZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmggICAgIFwKLSAgICAgICAgICAgICAgICAgZ3N0b3N4Y29yZWF1ZGlvLmgKLQotRVhUUkFfRElTVCA9IGdzdG9zeGNvcmVhdWRpb2hhbC5jIGdzdG9zeGNvcmVhdWRpb3JlbW90ZWlvLmMgXAotCSQoYW1fX2FwcGVuZF8zKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgc3lzL29zeGF1ZGlvL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHN5cy9vc3hhdWRpby9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdG9zeGF1ZGlvLmxhOiAkKGxpYmdzdG9zeGF1ZGlvX2xhX09CSkVDVFMpICQobGliZ3N0b3N4YXVkaW9fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdG9zeGF1ZGlvX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3Rvc3hhdWRpb19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0b3N4YXVkaW9fbGFfT0JKRUNUUykgJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZWxlbWVudC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3JpbmdidWZmZXIubG86IGdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLlRwbyAtYyAtbyBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3JpbmdidWZmZXIubG8gYHRlc3QgLWYgJ2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3hhdWRpb3JpbmdidWZmZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLlRwbyAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jJyBvYmplY3Q9J2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zeGF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5sbyBgdGVzdCAtZiAnZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5jCi0KLWxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZWxlbWVudC5sbzogZ3N0b3N4YXVkaW9lbGVtZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3hhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9lbGVtZW50LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb2VsZW1lbnQuVHBvIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZWxlbWVudC5sbyBgdGVzdCAtZiAnZ3N0b3N4YXVkaW9lbGVtZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9zeGF1ZGlvZWxlbWVudC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb2VsZW1lbnQuVHBvICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb2VsZW1lbnQuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0b3N4YXVkaW9lbGVtZW50LmMnIG9iamVjdD0nbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9lbGVtZW50LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9lbGVtZW50LmxvIGB0ZXN0IC1mICdnc3Rvc3hhdWRpb2VsZW1lbnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4YXVkaW9lbGVtZW50LmMKLQotbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9zaW5rLmxvOiBnc3Rvc3hhdWRpb3NpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zeGF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc2luay5UcG8gLWMgLW8gbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9zaW5rLmxvIGB0ZXN0IC1mICdnc3Rvc3hhdWRpb3NpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4YXVkaW9zaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc2luay5UcG8gJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rvc3hhdWRpb3NpbmsuYycgb2JqZWN0PSdsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3hhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NpbmsubG8gYHRlc3QgLWYgJ2dzdG9zeGF1ZGlvc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3hhdWRpb3NpbmsuYwotCi1saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NyYy5sbzogZ3N0b3N4YXVkaW9zcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zeGF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9zcmMuVHBvIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc3JjLmxvIGB0ZXN0IC1mICdnc3Rvc3hhdWRpb3NyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3hhdWRpb3NyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NyYy5UcG8gJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvc3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG9zeGF1ZGlvc3JjLmMnIG9iamVjdD0nbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9zcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3hhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb3NyYy5sbyBgdGVzdCAtZiAnZ3N0b3N4YXVkaW9zcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4YXVkaW9zcmMuYwotCi1saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hjb3JlYXVkaW9jb21tb24ubG86IGdzdG9zeGNvcmVhdWRpb2NvbW1vbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGNvcmVhdWRpb2NvbW1vbi5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLlRwbyAtYyAtbyBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hjb3JlYXVkaW9jb21tb24ubG8gYHRlc3QgLWYgJ2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3Rvc3hjb3JlYXVkaW9jb21tb24uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLlRwbyAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jJyBvYmplY3Q9J2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGNvcmVhdWRpb2NvbW1vbi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zeGF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGNvcmVhdWRpb2NvbW1vbi5sbyBgdGVzdCAtZiAnZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9zeGNvcmVhdWRpb2NvbW1vbi5jCi0KLWxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGNvcmVhdWRpby5sbzogZ3N0b3N4Y29yZWF1ZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3hhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hjb3JlYXVkaW8uVHBvIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGNvcmVhdWRpby5sbyBgdGVzdCAtZiAnZ3N0b3N4Y29yZWF1ZGlvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9zeGNvcmVhdWRpby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hjb3JlYXVkaW8uVHBvICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hjb3JlYXVkaW8uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0b3N4Y29yZWF1ZGlvLmMnIG9iamVjdD0nbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4Y29yZWF1ZGlvLmxvIGB0ZXN0IC1mICdnc3Rvc3hjb3JlYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4Y29yZWF1ZGlvLmMKLQotbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW8ubG86IGdzdG9zeGF1ZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3Rvc3hhdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3hhdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvLlRwbyAtYyAtbyBsaWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpby5sbyBgdGVzdCAtZiAnZ3N0b3N4YXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4YXVkaW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW8uVHBvICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpby5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rvc3hhdWRpby5jJyBvYmplY3Q9J2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW8ubG8gYHRlc3QgLWYgJ2dzdG9zeGF1ZGlvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdG9zeGF1ZGlvLmMKLQotbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5sbzogZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0b3N4YXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4YXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuVHBvIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rvc3hhdWRpb19sYS1nc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLlRwbyAkKERFUERJUikvbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmMnIG9iamVjdD0nbGliZ3N0b3N4YXVkaW9fbGEtZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdG9zeGF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeGF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdG9zeGF1ZGlvX2xhLWdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5jCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpby5jIGIvc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZGZkYmYuLjAwMDAwMDAKLS0tIGEvc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgRXJpayBXYWx0aGluc2VuIDxvbWVnYUBjc2Uub2dpLmVkdT4KLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IFBpb25lZXJzIG9mIHRoZSBJbmV2aXRhYmxlIDxzb25nYmlyZEBzb25nYmlyZG5lc3QuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudCBvZgotICogUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0gKgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdG9zeGF1ZGlvZWxlbWVudC5oIgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvc2luay5oIgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvc3JjLmgiCi0jaWZuZGVmIEhBVkVfSU9TCi0jaW5jbHVkZSAiZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5oIgotI2VuZGlmCi0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAib3N4YXVkaW9zaW5rIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9PU1hfQVVESU9fU0lOSykpIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAib3N4YXVkaW9zcmMiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIEdTVF9UWVBFX09TWF9BVURJT19TUkMpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0jaWZuZGVmIEhBVkVfSU9TCi0gIGlmICghZ3N0X2RldmljZV9wcm92aWRlcl9yZWdpc3RlciAocGx1Z2luLCAib3N4YXVkaW9kZXZpY2Vwcm92aWRlciIsCi0gICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfT1NYX0FVRElPX0RFVklDRV9QUk9WSURFUikpCi0gICAgcmV0dXJuIEZBTFNFOwotI2VuZGlmCi0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBvc3hhdWRpbywKLSAgICAiT1NYIChNYWMgT1MgWCkgYXVkaW8gc3VwcG9ydCBmb3IgR1N0cmVhbWVyIiwKLSAgICBwbHVnaW5faW5pdCwgVkVSU0lPTiwgR1NUX0xJQ0VOU0UsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmMgYi9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmEyMjJmLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgSHl1bmp1biBLbyA8enpvb25AaWdhbGlhLmNvbT4KLSAqCi0gKiBnc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmM6IE9TWCBhdWRpbyBkZXZpY2UgcHJvYmluZyBhbmQgbW9uaXRvcmluZwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlICJnc3Rvc3hhdWRpb3NyYy5oIgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvc2luay5oIgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvZGV2aWNlcHJvdmlkZXIuaCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX09TWF9BVURJT19TUkNfQ0FQUykKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfT1NYX0FVRElPX1NJTktfQ0FQUykKLSAgICApOwotCi1zdGF0aWMgR3N0T3N4QXVkaW9EZXZpY2UgKmdzdF9vc3hfYXVkaW9fZGV2aWNlX25ldyAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQsCi0gICAgY29uc3QgZ2NoYXIgKiBkZXZpY2VfbmFtZSwgR3N0T3N4QXVkaW9EZXZpY2VUeXBlIHR5cGUsCi0gICAgR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbyk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdE9zeEF1ZGlvRGV2aWNlUHJvdmlkZXIsIGdzdF9vc3hfYXVkaW9fZGV2aWNlX3Byb3ZpZGVyLAotICAgIEdTVF9UWVBFX0RFVklDRV9QUk9WSURFUik7Ci0KLXN0YXRpYyBHTGlzdCAqZ3N0X29zeF9hdWRpb19kZXZpY2VfcHJvdmlkZXJfcHJvYmUgKEdzdERldmljZVByb3ZpZGVyICoKLSAgICBwcm92aWRlcik7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X2F1ZGlvX2RldmljZV9wcm92aWRlcl9jbGFzc19pbml0IChHc3RPc3hBdWRpb0RldmljZVByb3ZpZGVyQ2xhc3MgKgotICAgIGtsYXNzKQotewotICBHc3REZXZpY2VQcm92aWRlckNsYXNzICpkbV9jbGFzcyA9IEdTVF9ERVZJQ0VfUFJPVklERVJfQ0xBU1MgKGtsYXNzKTsKLQotICBkbV9jbGFzcy0+cHJvYmUgPSBnc3Rfb3N4X2F1ZGlvX2RldmljZV9wcm92aWRlcl9wcm9iZTsKLQotICBnc3RfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGRtX2NsYXNzLAotICAgICAgIk9TWCBBdWRpbyBEZXZpY2UgUHJvdmlkZXIiLCAiU291cmNlL1NpbmsvQXVkaW8iLAotICAgICAgIkxpc3QgYW5kIG1vbml0b3IgT1NYIGF1ZGlvIHNvdXJjZSBhbmQgc2luayBkZXZpY2VzIiwKLSAgICAgICJIeXVuanVuIEtvIDx6em9vbkBpZ2FsaWEuY29tPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19kZXZpY2VfcHJvdmlkZXJfaW5pdCAoR3N0T3N4QXVkaW9EZXZpY2VQcm92aWRlciAqIHByb3ZpZGVyKQotewotfQotCi1zdGF0aWMgR3N0T3N4QXVkaW9EZXZpY2UgKgotZ3N0X29zeF9hdWRpb19kZXZpY2VfcHJvdmlkZXJfcHJvYmVfZGV2aWNlIChHc3RPc3hBdWRpb0RldmljZVByb3ZpZGVyICoKLSAgICBwcm92aWRlciwgQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQsIGNvbnN0IGdjaGFyICogZGV2aWNlX25hbWUsCi0gICAgR3N0T3N4QXVkaW9EZXZpY2VUeXBlIHR5cGUpCi17Ci0gIEdzdE9zeEF1ZGlvRGV2aWNlICpkZXZpY2UgPSBOVUxMOwotICBHc3RDb3JlQXVkaW8gKmNvcmVfYXVkaW87Ci0KLSAgY29yZV9hdWRpbyA9IGdzdF9jb3JlX2F1ZGlvX25ldyAoTlVMTCk7Ci0gIGNvcmVfYXVkaW8tPmlzX3NyYyA9IHR5cGUgPT0gR1NUX09TWF9BVURJT19ERVZJQ0VfVFlQRV9TT1VSQ0UgPyBUUlVFIDogRkFMU0U7Ci0gIGNvcmVfYXVkaW8tPmRldmljZV9pZCA9IGRldmljZV9pZDsKLQotICBpZiAoIWdzdF9jb3JlX2F1ZGlvX29wZW4gKGNvcmVfYXVkaW8pKSB7Ci0gICAgR1NUX0VSUk9SICgiQ29yZUF1ZGlvIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIik7Ci0gICAgZ290byBkb25lOwotICB9Ci0KLSAgZGV2aWNlID0gZ3N0X29zeF9hdWRpb19kZXZpY2VfbmV3IChkZXZpY2VfaWQsIGRldmljZV9uYW1lLCB0eXBlLCBjb3JlX2F1ZGlvKTsKLQotICBnc3RfY29yZV9hdWRpb19jbG9zZSAoY29yZV9hdWRpbyk7Ci0KLWRvbmU6Ci0gIGdfb2JqZWN0X3VucmVmIChjb3JlX2F1ZGlvKTsKLQotICByZXR1cm4gZGV2aWNlOwotfQotCi1zdGF0aWMgaW5saW5lIGdjaGFyICoKLV9hdWRpb19kZXZpY2VfZ2V0X25hbWUgKEF1ZGlvRGV2aWNlSUQgZGV2aWNlX2lkLCBnYm9vbGVhbiBvdXRwdXQpCi17Ci0gIE9TU3RhdHVzIHN0YXR1cyA9IG5vRXJyOwotICBVSW50MzIgcHJvcGVydHlTaXplID0gMDsKLSAgZ2NoYXIgKmRldmljZV9uYW1lID0gTlVMTDsKLSAgQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlIHByb3Bfc2NvcGU7Ci0KLSAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgZGV2aWNlTmFtZUFkZHJlc3MgPSB7Ci0gICAga0F1ZGlvRGV2aWNlUHJvcGVydHlEZXZpY2VOYW1lLAotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgcHJvcF9zY29wZSA9IG91dHB1dCA/IGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQgOgotICAgICAga0F1ZGlvRGV2aWNlUHJvcGVydHlTY29wZUlucHV0OwotCi0gIGRldmljZU5hbWVBZGRyZXNzLm1TY29wZSA9IHByb3Bfc2NvcGU7Ci0KLSAgLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGRldmljZSBuYW1lICovCi0gIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhU2l6ZSAoZGV2aWNlX2lkLAotICAgICAgJmRldmljZU5hbWVBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICAvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGRldmljZSAqLwotICBkZXZpY2VfbmFtZSA9IChnY2hhciAqKSBnX21hbGxvYyAocHJvcGVydHlTaXplKTsKLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGEgKGRldmljZV9pZCwKLSAgICAgICZkZXZpY2VOYW1lQWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSwgZGV2aWNlX25hbWUpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgZ19mcmVlIChkZXZpY2VfbmFtZSk7Ci0gICAgZGV2aWNlX25hbWUgPSBOVUxMOwotICB9Ci0KLWJlYWNoOgotICByZXR1cm4gZGV2aWNlX25hbWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9hdWRpb19kZXZpY2VfaGFzX291dHB1dCAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQpCi17Ci0gIE9TU3RhdHVzIHN0YXR1cyA9IG5vRXJyOwotICBVSW50MzIgcHJvcGVydHlTaXplOwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIHN0cmVhbXNBZGRyZXNzID0gewotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U3RyZWFtcywKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eVNjb3BlT3V0cHV0LAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1hc3RlcgotICB9OwotCi0gIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhU2l6ZSAoZGV2aWNlX2lkLAotICAgICAgJnN0cmVhbXNBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBpZiAocHJvcGVydHlTaXplID09IDApIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBBdWRpb0RldmljZUlEICoKLV9hdWRpb19zeXN0ZW1fZ2V0X2RldmljZXMgKGdpbnQgKiBuZGV2aWNlcykKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSAwOwotICBBdWRpb0RldmljZUlEICpkZXZpY2VzID0gTlVMTDsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBhdWRpb0RldmljZXNBZGRyZXNzID0gewotICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZXZpY2VzLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGFTaXplIChrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsCi0gICAgICAmYXVkaW9EZXZpY2VzQWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfV0FSTklORyAoImZhaWxlZCBnZXR0aW5nIG51bWJlciBvZiBkZXZpY2VzOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAqbmRldmljZXMgPSBwcm9wZXJ0eVNpemUgLyBzaXplb2YgKEF1ZGlvRGV2aWNlSUQpOwotCi0gIGRldmljZXMgPSAoQXVkaW9EZXZpY2VJRCAqKSBnX21hbGxvYyAocHJvcGVydHlTaXplKTsKLSAgaWYgKGRldmljZXMpIHsKLSAgICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoa0F1ZGlvT2JqZWN0U3lzdGVtT2JqZWN0LAotICAgICAgICAmYXVkaW9EZXZpY2VzQWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSwgZGV2aWNlcyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgZ2V0dGluZyB0aGUgbGlzdCBvZiBkZXZpY2VzOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgICBnX2ZyZWUgKGRldmljZXMpOwotICAgICAgKm5kZXZpY2VzID0gMDsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBkZXZpY2VzOwotfQotCi1zdGF0aWMgR0xpc3QgKgotZ3N0X29zeF9hdWRpb19kZXZpY2VfcHJvdmlkZXJfcHJvYmUgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpCi17Ci0gIEdzdE9zeEF1ZGlvRGV2aWNlUHJvdmlkZXIgKnNlbGYgPSBHU1RfT1NYX0FVRElPX0RFVklDRV9QUk9WSURFUiAocHJvdmlkZXIpOwotICBHTGlzdCAqZGV2aWNlcyA9IE5VTEw7Ci0gIEdzdE9zeEF1ZGlvRGV2aWNlICpkZXZpY2UgPSBOVUxMOwotICBBdWRpb0RldmljZUlEICpvc3hfZGV2aWNlcyA9IE5VTEw7Ci0gIGdpbnQgaSwgbmRldmljZXMgPSAwOwotCi0gIG9zeF9kZXZpY2VzID0gX2F1ZGlvX3N5c3RlbV9nZXRfZGV2aWNlcyAoJm5kZXZpY2VzKTsKLQotICBpZiAobmRldmljZXMgPCAxKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJubyBhdWRpbyBvdXRwdXQgZGV2aWNlcyBmb3VuZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIEdTVF9JTkZPICgiZm91bmQgJWQgYXVkaW8gZGV2aWNlKHMpIiwgbmRldmljZXMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuZGV2aWNlczsgaSsrKSB7Ci0gICAgZ2NoYXIgKmRldmljZV9uYW1lOwotICAgIEdzdE9zeEF1ZGlvRGV2aWNlVHlwZSB0eXBlID0gR1NUX09TWF9BVURJT19ERVZJQ0VfVFlQRV9JTlZBTElEOwotCi0gICAgaWYgKChkZXZpY2VfbmFtZSA9IF9hdWRpb19kZXZpY2VfZ2V0X25hbWUgKG9zeF9kZXZpY2VzW2ldLCBGQUxTRSkpKSB7Ci0gICAgICBpZiAoIV9hdWRpb19kZXZpY2VfaGFzX291dHB1dCAob3N4X2RldmljZXNbaV0pKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIklucHV0IERldmljZSBJRDogJXUgTmFtZTogJXMiLAotICAgICAgICAgICAgKHVuc2lnbmVkKSBvc3hfZGV2aWNlc1tpXSwgZGV2aWNlX25hbWUpOwotICAgICAgICB0eXBlID0gR1NUX09TWF9BVURJT19ERVZJQ0VfVFlQRV9TT1VSQ0U7Ci0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIk91dHB1dCBEZXZpY2UgSUQ6ICV1IE5hbWU6ICVzIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCkgb3N4X2RldmljZXNbaV0sIGRldmljZV9uYW1lKTsKLSAgICAgICAgdHlwZSA9IEdTVF9PU1hfQVVESU9fREVWSUNFX1RZUEVfU0lOSzsKLSAgICAgIH0KLQotICAgICAgZGV2aWNlID0KLSAgICAgICAgICBnc3Rfb3N4X2F1ZGlvX2RldmljZV9wcm92aWRlcl9wcm9iZV9kZXZpY2UgKHNlbGYsIG9zeF9kZXZpY2VzW2ldLAotICAgICAgICAgIGRldmljZV9uYW1lLCB0eXBlKTsKLSAgICAgIGlmIChkZXZpY2UpIHsKLSAgICAgICAgZ3N0X29iamVjdF9yZWZfc2luayAoZGV2aWNlKTsKLSAgICAgICAgZGV2aWNlcyA9IGdfbGlzdF9wcmVwZW5kIChkZXZpY2VzLCBkZXZpY2UpOwotICAgICAgfQotCi0gICAgICBnX2ZyZWUgKGRldmljZV9uYW1lKTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgZ19mcmVlIChvc3hfZGV2aWNlcyk7Ci0KLSAgcmV0dXJuIGRldmljZXM7Ci19Ci0KLWVudW0KLXsKLSAgUFJPUF9ERVZJQ0VfSUQgPSAxLAotfTsKLQotR19ERUZJTkVfVFlQRSAoR3N0T3N4QXVkaW9EZXZpY2UsIGdzdF9vc3hfYXVkaW9fZGV2aWNlLCBHU1RfVFlQRV9ERVZJQ0UpOwotCi1zdGF0aWMgdm9pZCBnc3Rfb3N4X2F1ZGlvX2RldmljZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3N4X2F1ZGlvX2RldmljZV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgR3N0RWxlbWVudCAqZ3N0X29zeF9hdWRpb19kZXZpY2VfY3JlYXRlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUpOwotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19kZXZpY2VfY2xhc3NfaW5pdCAoR3N0T3N4QXVkaW9EZXZpY2VDbGFzcyAqIGtsYXNzKQotewotICBHc3REZXZpY2VDbGFzcyAqZGV2X2NsYXNzID0gR1NUX0RFVklDRV9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZGV2X2NsYXNzLT5jcmVhdGVfZWxlbWVudCA9IGdzdF9vc3hfYXVkaW9fZGV2aWNlX2NyZWF0ZV9lbGVtZW50OwotCi0gIG9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29zeF9hdWRpb19kZXZpY2VfZ2V0X3Byb3BlcnR5OwotICBvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9vc3hfYXVkaW9fZGV2aWNlX3NldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFX0lELAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImRldmljZS1pZCIsICJEZXZpY2UgSUQiLCAiRGV2aWNlIElEIG9mIGlucHV0IGRldmljZSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19kZXZpY2VfaW5pdCAoR3N0T3N4QXVkaW9EZXZpY2UgKiBkZXZpY2UpCi17Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWdzdF9vc3hfYXVkaW9fZGV2aWNlX2NyZWF0ZV9lbGVtZW50IChHc3REZXZpY2UgKiBkZXZpY2UsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgR3N0T3N4QXVkaW9EZXZpY2UgKm9zeGRldiA9IEdTVF9PU1hfQVVESU9fREVWSUNFIChkZXZpY2UpOwotICBHc3RFbGVtZW50ICplbGVtOwotCi0gIGVsZW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKG9zeGRldi0+ZWxlbWVudCwgbmFtZSk7Ci0gIGdfb2JqZWN0X3NldCAoZWxlbSwgImRldmljZSIsIG9zeGRldi0+ZGV2aWNlX2lkLCBOVUxMKTsKLQotICByZXR1cm4gZWxlbTsKLX0KLQotc3RhdGljIEdzdE9zeEF1ZGlvRGV2aWNlICoKLWdzdF9vc3hfYXVkaW9fZGV2aWNlX25ldyAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQsIGNvbnN0IGdjaGFyICogZGV2aWNlX25hbWUsCi0gICAgR3N0T3N4QXVkaW9EZXZpY2VUeXBlIHR5cGUsIEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pCi17Ci0gIEdzdE9zeEF1ZGlvRGV2aWNlICpnc3RkZXY7Ci0gIGNvbnN0IGdjaGFyICplbGVtZW50X25hbWUgPSBOVUxMOwotICBjb25zdCBnY2hhciAqa2xhc3MgPSBOVUxMOwotICBHc3RDYXBzICp0ZW1wbGF0ZV9jYXBzLCAqY2FwczsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGV2aWNlX2lkID4gMCwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChkZXZpY2VfbmFtZSwgTlVMTCk7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfT1NYX0FVRElPX0RFVklDRV9UWVBFX1NPVVJDRToKLSAgICAgIGVsZW1lbnRfbmFtZSA9ICJvc3hhdWRpb3NyYyI7Ci0gICAgICBrbGFzcyA9ICJBdWRpby9Tb3VyY2UiOwotCi0gICAgICB0ZW1wbGF0ZV9jYXBzID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0X2NhcHMgKCZzcmNfZmFjdG9yeSk7Ci0gICAgICBjYXBzID0gZ3N0X2NvcmVfYXVkaW9fcHJvYmVfY2FwcyAoY29yZV9hdWRpbywgdGVtcGxhdGVfY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAodGVtcGxhdGVfY2Fwcyk7Ci0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX09TWF9BVURJT19ERVZJQ0VfVFlQRV9TSU5LOgotICAgICAgZWxlbWVudF9uYW1lID0gIm9zeGF1ZGlvc2luayI7Ci0gICAgICBrbGFzcyA9ICJBdWRpby9TaW5rIjsKLQotICAgICAgdGVtcGxhdGVfY2FwcyA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldF9jYXBzICgmc2lua19mYWN0b3J5KTsKLSAgICAgIGNhcHMgPSBnc3RfY29yZV9hdWRpb19wcm9iZV9jYXBzIChjb3JlX2F1ZGlvLCB0ZW1wbGF0ZV9jYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGF0ZV9jYXBzKTsKLQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RkZXYgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX09TWF9BVURJT19ERVZJQ0UsICJkZXZpY2UtaWQiLAotICAgICAgZGV2aWNlX2lkLCAiZGlzcGxheS1uYW1lIiwgZGV2aWNlX25hbWUsICJjYXBzIiwgY2FwcywgImRldmljZS1jbGFzcyIsCi0gICAgICBrbGFzcywgTlVMTCk7Ci0KLSAgZ3N0ZGV2LT5lbGVtZW50ID0gZWxlbWVudF9uYW1lOwotCi0KLSAgcmV0dXJuIGdzdGRldjsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fZGV2aWNlX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RPc3hBdWRpb0RldmljZSAqZGV2aWNlOwotCi0gIGRldmljZSA9IEdTVF9PU1hfQVVESU9fREVWSUNFX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFVklDRV9JRDoKLSAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIGRldmljZS0+ZGV2aWNlX2lkKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19kZXZpY2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zeEF1ZGlvRGV2aWNlICpkZXZpY2U7Ci0KLSAgZGV2aWNlID0gR1NUX09TWF9BVURJT19ERVZJQ0VfQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFX0lEOgotICAgICAgZGV2aWNlLT5kZXZpY2VfaWQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmggYi9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9kZXZpY2Vwcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDU0MTc4Li4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2RldmljZXByb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxNiBIeXVuanVuIEtvIDx6em9vbkBpZ2FsaWEuY29tPgotICoKLSAqIGdzdG9zeGF1ZGlvZGV2aWNlZXByb3ZpZGVyLmg6IE9TWCBhdWRpbyBwcm9iaW5nIGFuZCBtb25pdG9yaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIF9fR1NUX09TWF9BVURJT19ERUlWQ0VfUFJPVklERVJfSF9fCi0jZGVmaW5lIF9fR1NUX09TWF9BVURJT19ERUlWQ0VfUFJPVklERVJfSF9fCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlICJnc3Rvc3hjb3JlYXVkaW9jb21tb24uaCIKLQotR19CRUdJTl9ERUNMUwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zeEF1ZGlvRGV2aWNlUHJvdmlkZXIgR3N0T3N4QXVkaW9EZXZpY2VQcm92aWRlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3hBdWRpb0RldmljZVByb3ZpZGVyQ2xhc3MgR3N0T3N4QXVkaW9EZXZpY2VQcm92aWRlckNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX09TWF9BVURJT19ERVZJQ0VfUFJPVklERVIgICAgICAgICAgICAgICAgIChnc3Rfb3N4X2F1ZGlvX2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSVNfT1NYX0FVRElPX0RFVklDRV9QUk9WSURFUihvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9PU1hfQVVESU9fREVWSUNFX1BST1ZJREVSKSkKLSNkZWZpbmUgR1NUX0lTX09TWF9BVURJT19ERVZJQ0VfUFJPVklERVJfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9PU1hfQVVESU9fREVWSUNFX1BST1ZJREVSKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19ERVZJQ0VfUFJPVklERVJfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9PU1hfQVVESU9fREVWSUNFX1BST1ZJREVSLCBHc3RPc3hBdWRpb0RldmljZVByb3ZpZGVyQ2xhc3MpKQotI2RlZmluZSBHU1RfT1NYX0FVRElPX0RFVklDRV9QUk9WSURFUihvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9PU1hfQVVESU9fREVWSUNFX1BST1ZJREVSLCBHc3RPc3hBdWRpb0RldmljZVByb3ZpZGVyKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19ERVZJQ0VfUFJPVklERVJfQ0xBU1Moa2xhc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIsIEdzdE9zeEF1ZGlvRGV2aWNlUHJvdmlkZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fREVWSUNFX1BST1ZJREVSX0NBU1Qob2JqKSAgICAgICAgICAgICgoR3N0T3N4QXVkaW9EZXZpY2VQcm92aWRlciAqKShvYmopKQotCi1zdHJ1Y3QgX0dzdE9zeEF1ZGlvRGV2aWNlUHJvdmlkZXIKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXIgcGFyZW50OwotfTsKLQotc3RydWN0IF9Hc3RPc3hBdWRpb0RldmljZVByb3ZpZGVyQ2xhc3MKLXsKLSAgR3N0RGV2aWNlUHJvdmlkZXJDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfb3N4X2F1ZGlvX2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3hBdWRpb0RldmljZSBHc3RPc3hBdWRpb0RldmljZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3hBdWRpb0RldmljZUNsYXNzIEdzdE9zeEF1ZGlvRGV2aWNlQ2xhc3M7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfT1NYX0FVRElPX0RFVklDRSAgICAgICAgICAgICAgICAgKGdzdF9vc3hfYXVkaW9fZGV2aWNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JU19PU1hfQVVESU9fREVWSUNFKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX09TWF9BVURJT19ERVZJQ0UpKQotI2RlZmluZSBHU1RfSVNfT1NYX0FVRElPX0RFVklDRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX09TWF9BVURJT19ERVZJQ0UpKQotI2RlZmluZSBHU1RfT1NYX0FVRElPX0RFVklDRV9HRVRfQ0xBU1Mob2JqKSAgICAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIEdTVF9UWVBFX09TWF9BVURJT19ERVZJQ0UsIEdzdE9zeEF1ZGlvQ2xhc3MpKQotI2RlZmluZSBHU1RfT1NYX0FVRElPX0RFVklDRShvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9PU1hfQVVESU9fREVWSUNFLCBHc3RPc3hBdWRpb0RldmljZSkpCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fREVWSUNFX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfREVWSUNFLCBHc3RPc3hBdWRpb0RldmljZUNsYXNzKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19ERVZJQ0VfQ0FTVChvYmopICAgICAgICAgICAgKChHc3RPc3hBdWRpb0RldmljZSAqKShvYmopKQotCi10eXBlZGVmIGVudW0KLXsKLSAgR1NUX09TWF9BVURJT19ERVZJQ0VfVFlQRV9JTlZBTElEID0gMCwKLSAgR1NUX09TWF9BVURJT19ERVZJQ0VfVFlQRV9TT1VSQ0UsCi0gIEdTVF9PU1hfQVVESU9fREVWSUNFX1RZUEVfU0lOSwotfSBHc3RPc3hBdWRpb0RldmljZVR5cGU7Ci0KLXN0cnVjdCBfR3N0T3N4QXVkaW9EZXZpY2UKLXsKLSAgR3N0RGV2aWNlIHBhcmVudDsKLQotICBjb25zdCBnY2hhciAqZWxlbWVudDsKLSAgQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQ7Ci19OwotCi1zdHJ1Y3QgX0dzdE9zeEF1ZGlvRGV2aWNlQ2xhc3MKLXsKLSAgR3N0RGV2aWNlQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X29zeF9hdWRpb19kZXZpY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX09TWF9BVURJT19ERUlWQ0VfUFJPVklERVJfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50LmMgYi9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYzI0ZDEuLjAwMDAwMDAKLS0tIGEvc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvZWxlbWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXJzIG9mIHRoZSBJbmV2aXRhYmxlIDxzb25nYmlyZEBzb25nYmlyZG5lc3QuY29tPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xICh0aGUgIkxHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5IGluc3RlYWQgb2YgdGhlIG9uZXMKLSAqIG1lbnRpb25lZCBhYm92ZToKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKiBUaGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBtYWRlIHBvc3NpYmxlIGR1ZSB0byB0aGUgaW52b2x2ZW1lbnQgb2YKLSAqIFBpb25lZXJzIG9mIHRoZSBJbmV2aXRhYmxlLCB0aGUgY3JlYXRvcnMgb2YgdGhlIFNvbmdiaXJkIE11c2ljIHBsYXllcgotICoKLSAqLwotCi0jaW5jbHVkZSAiZ3N0b3N4YXVkaW9lbGVtZW50LmgiCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19lbGVtZW50X2ludGVyZmFjZV9pbml0IChHc3RPc3hBdWRpb0VsZW1lbnRJbnRlcmZhY2UgKiBpZmFjZSk7Ci0KLUdUeXBlCi1nc3Rfb3N4X2F1ZGlvX2VsZW1lbnRfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBnc3Rfb3N4YXVkaW9lbGVtZW50X3R5cGUgPSAwOwotCi0gIGlmICghZ3N0X29zeGF1ZGlvZWxlbWVudF90eXBlKSB7Ci0gICAgc3RhdGljIGNvbnN0IEdUeXBlSW5mbyBnc3Rfb3N4YXVkaW9lbGVtZW50X2luZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdE9zeEF1ZGlvRWxlbWVudEludGVyZmFjZSksCi0gICAgICAoR0Jhc2VJbml0RnVuYykgZ3N0X29zeF9hdWRpb19lbGVtZW50X2ludGVyZmFjZV9pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIDAsCi0gICAgICAwLAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwKLSAgICB9OwotCi0gICAgZ3N0X29zeGF1ZGlvZWxlbWVudF90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR19UWVBFX0lOVEVSRkFDRSwKLSAgICAgICAgIkdzdE9zeEF1ZGlvRWxlbWVudCIsICZnc3Rfb3N4YXVkaW9lbGVtZW50X2luZm8sIDApOwotICB9Ci0KLSAgcmV0dXJuIGdzdF9vc3hhdWRpb2VsZW1lbnRfdHlwZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fZWxlbWVudF9pbnRlcmZhY2VfaW5pdCAoR3N0T3N4QXVkaW9FbGVtZW50SW50ZXJmYWNlICogaWZhY2UpCi17Ci0gIHN0YXRpYyBnYm9vbGVhbiBpbml0aWFsaXplZCA9IEZBTFNFOwotCi0gIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICBpbml0aWFsaXplZCA9IFRSVUU7Ci0gIH0KLQotICAvKiBkZWZhdWx0IHZpcnR1YWwgZnVuY3Rpb25zICovCi0gIGlmYWNlLT5pb19wcm9jID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuaCBiL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb2VsZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UwOWRjMS4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9lbGVtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUgPHNvbmdiaXJkQHNvbmdiaXJkbmVzdC5jb20+Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgKHRoZSAiTEdQTCIpLCBpbgotICogd2hpY2ggY2FzZSB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkgaW5zdGVhZCBvZiB0aGUgb25lcwotICogbWVudGlvbmVkIGFib3ZlOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudCBvZgotICogUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0gKgotICovCi0KLSNpZm5kZWYgX19HU1RfT1NYX0FVRElPX0VMRU1FTlRfSF9fCi0jZGVmaW5lIF9fR1NUX09TWF9BVURJT19FTEVNRU5UX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpZmRlZiBIQVZFX0lPUwotI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfT1NYX0FVRElPX0VMRU1FTlRfVFlQRSBcCi0gIChnc3Rfb3N4X2F1ZGlvX2VsZW1lbnRfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19FTEVNRU5UKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX09TWF9BVURJT19FTEVNRU5UX1RZUEUsR3N0T3N4QXVkaW9FbGVtZW50SW50ZXJmYWNlKSkKLSNkZWZpbmUgR1NUX0lTX09TWF9BVURJT19FTEVNRU5UKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX09TWF9BVURJT19FTEVNRU5UX1RZUEUpKQotI2RlZmluZSBHU1RfT1NYX0FVRElPX0VMRU1FTlRfR0VUX0lOVEVSRkFDRShpbnN0KSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0lOVEVSRkFDRSgoaW5zdCksR1NUX09TWF9BVURJT19FTEVNRU5UX1RZUEUsR3N0T3N4QXVkaW9FbGVtZW50SW50ZXJmYWNlKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zeEF1ZGlvRWxlbWVudEludGVyZmFjZSBHc3RPc3hBdWRpb0VsZW1lbnRJbnRlcmZhY2U7Ci0KLXN0cnVjdCBfR3N0T3N4QXVkaW9FbGVtZW50SW50ZXJmYWNlCi17Ci0gIEdUeXBlSW50ZXJmYWNlIHBhcmVudDsKLQotICBPU1N0YXR1cyAoKmlvX3Byb2MpICh2b2lkICogdXNlcmRhdGEsCi0gICAgICBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyAqIGlvQWN0aW9uRmxhZ3MsCi0gICAgICBjb25zdCBBdWRpb1RpbWVTdGFtcCAqIGluVGltZVN0YW1wLAotICAgICAgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsCi0gICAgICBBdWRpb0J1ZmZlckxpc3QgKiBidWZmZXJMaXN0KTsKLX07Ci0KLUdUeXBlIGdzdF9vc3hfYXVkaW9fZWxlbWVudF9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9PU1hfQVVESU9fRUxFTUVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYyBiL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIwMWUwNC4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IFBpb25lZXJzIG9mIHRoZSBJbmV2aXRhYmxlIDxzb25nYmlyZEBzb25nYmlyZG5lc3QuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIEZsdWVuZG8gUy5BLiA8c3VwcG9ydEBmbHVlbmRvLmNvbT4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSAodGhlICJMR1BMIiksIGluCi0gKiB3aGljaCBjYXNlIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9ucyBhcHBseSBpbnN0ZWFkIG9mIHRoZSBvbmVzCi0gKiBtZW50aW9uZWQgYWJvdmU6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC1pMThuLXBsdWdpbi5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby1jaGFubmVscy5oPgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvcmluZ2J1ZmZlci5oIgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvc2luay5oIgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvc3JjLmgiCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgICAgLyogZm9yIGdldHBpZCgpICovCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG9zeF9hdWRpb19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3hfYXVkaW9fZGVidWcKLQotI2luY2x1ZGUgImdzdG9zeGNvcmVhdWRpby5oIgotCi1zdGF0aWMgdm9pZCBnc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfb3Blbl9kZXZpY2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqCi0gICAgYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2Nsb3NlX2RldmljZSAoR3N0QXVkaW9SaW5nQnVmZmVyICoKLSAgICBidWYpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9hY3F1aXJlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfcmVsZWFzZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLQotc3RhdGljIGdib29sZWFuIGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfc3RhcnQgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9wYXVzZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX3N0b3AgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1Zik7Ci1zdGF0aWMgZ3VpbnQgZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9kZWxheSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKTsKLXN0YXRpYyBHc3RBdWRpb1JpbmdCdWZmZXJDbGFzcyAqcmluZ19wYXJlbnRfY2xhc3MgPSBOVUxMOwotCi0jZGVmaW5lIGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfZG9faW5pdCBcCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChvc3hfYXVkaW9fZGVidWcsICJvc3hhdWRpbyIsIDAsICJPU1ggQXVkaW8gRWxlbWVudHMiKTsKLQotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdE9zeEF1ZGlvUmluZ0J1ZmZlciwgZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlciwKLSAgICBHU1RfVFlQRV9BVURJT19SSU5HX0JVRkZFUiwgZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9kb19pbml0KTsKLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfY2xhc3NfaW5pdCAoR3N0T3N4QXVkaW9SaW5nQnVmZmVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RBdWRpb1JpbmdCdWZmZXJDbGFzcyAqZ3N0cmluZ2J1ZmZlcl9jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcyA9IChHc3RBdWRpb1JpbmdCdWZmZXJDbGFzcyAqKSBrbGFzczsKLQotICByaW5nX3BhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2Rpc3Bvc2U7Ci0KLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+b3Blbl9kZXZpY2UgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfb3Blbl9kZXZpY2UpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5jbG9zZV9kZXZpY2UgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfY2xvc2VfZGV2aWNlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+YWNxdWlyZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9hY3F1aXJlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+cmVsZWFzZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9yZWxlYXNlKTsKLSAgZ3N0cmluZ2J1ZmZlcl9jbGFzcy0+c3RhcnQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfc3RhcnQpOwotICBnc3RyaW5nYnVmZmVyX2NsYXNzLT5wYXVzZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9wYXVzZSk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPnJlc3VtZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9zdGFydCk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPnN0b3AgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfc3RvcCk7Ci0gIGdzdHJpbmdidWZmZXJfY2xhc3MtPmRlbGF5ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2RlbGF5KTsKLQotICBHU1RfREVCVUcgKCJvc3ggYXVkaW8gcmluZyBidWZmZXIgY2xhc3MgaW5pdCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9pbml0IChHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKiByaW5nYnVmZmVyKQotewotICByaW5nYnVmZmVyLT5jb3JlX2F1ZGlvID0gZ3N0X2NvcmVfYXVkaW9fbmV3IChHU1RfT0JKRUNUIChyaW5nYnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdE9zeEF1ZGlvUmluZ0J1ZmZlciAqb3N4YnVmOwotCi0gIG9zeGJ1ZiA9IEdTVF9PU1hfQVVESU9fUklOR19CVUZGRVIgKG9iamVjdCk7Ci0KLSAgaWYgKG9zeGJ1Zi0+Y29yZV9hdWRpbykgewotICAgIGdfb2JqZWN0X3VucmVmIChvc3hidWYtPmNvcmVfYXVkaW8pOwotICAgIG9zeGJ1Zi0+Y29yZV9hdWRpbyA9IE5VTEw7Ci0gIH0KLSAgR19PQkpFQ1RfQ0xBU1MgKHJpbmdfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX29wZW5fZGV2aWNlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE9iamVjdCAqb3N4ZWwgPSBHU1RfT0JKRUNUX1BBUkVOVCAoYnVmKTsKLSAgR3N0T3N4QXVkaW9SaW5nQnVmZmVyICpvc3hidWYgPSBHU1RfT1NYX0FVRElPX1JJTkdfQlVGRkVSIChidWYpOwotCi0gIGlmICghZ3N0X2NvcmVfYXVkaW9fc2VsZWN0X2RldmljZSAob3N4YnVmLT5jb3JlX2F1ZGlvKSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3hlbCwgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgKF8oIkNvcmVBdWRpbyBkZXZpY2Ugbm90IGZvdW5kIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmICghZ3N0X2NvcmVfYXVkaW9fb3BlbiAob3N4YnVmLT5jb3JlX2F1ZGlvKSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3hlbCwgUkVTT1VSQ0UsIE9QRU5fUkVBRCwKLSAgICAgICAgKF8oIkNvcmVBdWRpbyBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCIpKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2Nsb3NlX2RldmljZSAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKm9zeGJ1ZjsKLSAgb3N4YnVmID0gR1NUX09TWF9BVURJT19SSU5HX0JVRkZFUiAoYnVmKTsKLQotICByZXR1cm4gZ3N0X2NvcmVfYXVkaW9fY2xvc2UgKG9zeGJ1Zi0+Y29yZV9hdWRpbyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9hY3F1aXJlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYsCi0gICAgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFLCBpc19wYXNzdGhyb3VnaCA9IEZBTFNFOwotICBHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKm9zeGJ1ZjsKLSAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZvcm1hdDsKLQotICBvc3hidWYgPSBHU1RfT1NYX0FVRElPX1JJTkdfQlVGRkVSIChidWYpOwotCi0gIGlmIChSSU5HQlVGRkVSX0lTX1NQRElGIChzcGVjLT50eXBlKSkgewotICAgIGZvcm1hdC5tRm9ybWF0SUQgPSBrQXVkaW9Gb3JtYXQ2MDk1OEFDMzsKLSAgICBmb3JtYXQubVNhbXBsZVJhdGUgPSAoZG91YmxlKSBHU1RfQVVESU9fSU5GT19SQVRFICgmc3BlYy0+aW5mbyk7Ci0gICAgZm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0gMjsKLSAgICBmb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlciB8Ci0gICAgICAgIGtBdWRpb0Zvcm1hdEZsYWdJc1BhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbk1peGFibGU7Ci0gICAgZm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gMDsKLSAgICBmb3JtYXQubUJpdHNQZXJDaGFubmVsID0gMTY7Ci0gICAgZm9ybWF0Lm1CeXRlc1BlclBhY2tldCA9IDYxNDQ7Ci0gICAgZm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxNTM2OwotICAgIGZvcm1hdC5tUmVzZXJ2ZWQgPSAwOwotICAgIHNwZWMtPnNlZ3NpemUgPSA2MTQ0OwotICAgIHNwZWMtPnNlZ3RvdGFsID0gMTA7Ci0gICAgaXNfcGFzc3Rocm91Z2ggPSBUUlVFOwotICB9IGVsc2UgewotICAgIGludCB3aWR0aCwgZGVwdGg7Ci0gICAgLyogRmlsbCBvdXQgdGhlIGF1ZGlvIGRlc2NyaXB0aW9uIHdlJ3JlIGdvaW5nIHRvIGJlIHVzaW5nICovCi0gICAgZm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKLSAgICBmb3JtYXQubVNhbXBsZVJhdGUgPSAoZG91YmxlKSBHU1RfQVVESU9fSU5GT19SQVRFICgmc3BlYy0+aW5mbyk7Ci0gICAgZm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0gR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZzcGVjLT5pbmZvKTsKLSAgICBpZiAoR1NUX0FVRElPX0lORk9fSVNfRkxPQVQgKCZzcGVjLT5pbmZvKSkgewotICAgICAgZm9ybWF0Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNrZWQ7Ci0gICAgICB3aWR0aCA9IGRlcHRoID0gR1NUX0FVRElPX0lORk9fV0lEVEggKCZzcGVjLT5pbmZvKTsKLSAgICB9IGVsc2UgewotICAgICAgZm9ybWF0Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXI7Ci0gICAgICB3aWR0aCA9IEdTVF9BVURJT19JTkZPX1dJRFRIICgmc3BlYy0+aW5mbyk7Ci0gICAgICBkZXB0aCA9IEdTVF9BVURJT19JTkZPX0RFUFRIICgmc3BlYy0+aW5mbyk7Ci0gICAgICBpZiAod2lkdGggPT0gZGVwdGgpIHsKLSAgICAgICAgZm9ybWF0Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNQYWNrZWQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmb3JtYXQubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc0FsaWduZWRIaWdoOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChHU1RfQVVESU9fSU5GT19JU19CSUdfRU5ESUFOICgmc3BlYy0+aW5mbykpIHsKLSAgICAgIGZvcm1hdC5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzQmlnRW5kaWFuOwotICAgIH0KLQotICAgIGZvcm1hdC5tQnl0ZXNQZXJGcmFtZSA9IEdTVF9BVURJT19JTkZPX0JQRiAoJnNwZWMtPmluZm8pOwotICAgIGZvcm1hdC5tQml0c1BlckNoYW5uZWwgPSBkZXB0aDsKLSAgICBmb3JtYXQubUJ5dGVzUGVyUGFja2V0ID0gR1NUX0FVRElPX0lORk9fQlBGICgmc3BlYy0+aW5mbyk7Ci0gICAgZm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOwotICAgIGZvcm1hdC5tUmVzZXJ2ZWQgPSAwOwotICAgIHNwZWMtPnNlZ3NpemUgPQotICAgICAgICAoc3BlYy0+bGF0ZW5jeV90aW1lICogR1NUX0FVRElPX0lORk9fUkFURSAoJnNwZWMtPmluZm8pIC8KLSAgICAgICAgR19VU0VDX1BFUl9TRUMpICogR1NUX0FVRElPX0lORk9fQlBGICgmc3BlYy0+aW5mbyk7Ci0gICAgc3BlYy0+c2VndG90YWwgPSBzcGVjLT5idWZmZXJfdGltZSAvIHNwZWMtPmxhdGVuY3lfdGltZTsKLSAgICBpc19wYXNzdGhyb3VnaCA9IEZBTFNFOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3N4YnVmLCAiRm9ybWF0OiAiIENPUkVfQVVESU9fRk9STUFULAotICAgICAgQ09SRV9BVURJT19GT1JNQVRfQVJHUyAoZm9ybWF0KSk7Ci0KLSAgLyogZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3NldF9jaGFubmVsX3Bvc2l0aW9ucyBpcyBub3QgY2FsbGVkCi0gICAqIHNpbmNlIHRoZSBBVXMgcGVyZm9ybSBjaGFubmVsIHJlb3JkZXJpbmcgdGhlbXNlbHZlcy4KLSAgICogKHNlZSBnc3RfY29yZV9hdWRpb19zZXRfY2hhbm5lbF9sYXlvdXQpICovCi0KLSAgYnVmLT5zaXplID0gc3BlYy0+c2VndG90YWwgKiBzcGVjLT5zZWdzaXplOwotICBidWYtPm1lbW9yeSA9IGdfbWFsbG9jMCAoYnVmLT5zaXplKTsKLQotICByZXQgPSBnc3RfY29yZV9hdWRpb19pbml0aWFsaXplIChvc3hidWYtPmNvcmVfYXVkaW8sIGZvcm1hdCwgc3BlYy0+Y2FwcywKLSAgICAgIGlzX3Bhc3N0aHJvdWdoKTsKLQotICBpZiAoIXJldCkgewotICAgIGdfZnJlZSAoYnVmLT5tZW1vcnkpOwotICAgIGJ1Zi0+bWVtb3J5ID0gTlVMTDsKLSAgICBidWYtPnNpemUgPSAwOwotICB9Ci0KLSAgb3N4YnVmLT5zZWdvZmZzZXQgPSAwOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9yZWxlYXNlIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE9zeEF1ZGlvUmluZ0J1ZmZlciAqb3N4YnVmOwotCi0gIG9zeGJ1ZiA9IEdTVF9PU1hfQVVESU9fUklOR19CVUZGRVIgKGJ1Zik7Ci0KLSAgZ3N0X2NvcmVfYXVkaW9fdW5pbml0aWFsaXplIChvc3hidWYtPmNvcmVfYXVkaW8pOwotCi0gIGdfZnJlZSAoYnVmLT5tZW1vcnkpOwotICBidWYtPm1lbW9yeSA9IE5VTEw7Ci0gIGJ1Zi0+c2l6ZSA9IDA7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9zdGFydCAoR3N0QXVkaW9SaW5nQnVmZmVyICogYnVmKQotewotICBHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKm9zeGJ1ZjsKLQotICBvc3hidWYgPSBHU1RfT1NYX0FVRElPX1JJTkdfQlVGRkVSIChidWYpOwotCi0gIHJldHVybiBnc3RfY29yZV9hdWRpb19zdGFydF9wcm9jZXNzaW5nIChvc3hidWYtPmNvcmVfYXVkaW8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfcGF1c2UgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0T3N4QXVkaW9SaW5nQnVmZmVyICpvc3hidWYgPSBHU1RfT1NYX0FVRElPX1JJTkdfQlVGRkVSIChidWYpOwotCi0gIHJldHVybiBnc3RfY29yZV9hdWRpb19wYXVzZV9wcm9jZXNzaW5nIChvc3hidWYtPmNvcmVfYXVkaW8pOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9zdG9wIChHc3RBdWRpb1JpbmdCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE9zeEF1ZGlvUmluZ0J1ZmZlciAqb3N4YnVmOwotCi0gIG9zeGJ1ZiA9IEdTVF9PU1hfQVVESU9fUklOR19CVUZGRVIgKGJ1Zik7Ci0KLSAgZ3N0X2NvcmVfYXVkaW9fc3RvcF9wcm9jZXNzaW5nIChvc3hidWYtPmNvcmVfYXVkaW8pOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9vc3hfYXVkaW9fcmluZ19idWZmZXJfZGVsYXkgKEdzdEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0T3N4QXVkaW9SaW5nQnVmZmVyICpvc3hidWY7Ci0gIGRvdWJsZSBsYXRlbmN5OwotICBndWludCBzYW1wbGVzOwotCi0gIG9zeGJ1ZiA9IEdTVF9PU1hfQVVESU9fUklOR19CVUZGRVIgKGJ1Zik7Ci0KLSAgaWYgKCFnc3RfY29yZV9hdWRpb19nZXRfc2FtcGxlc19hbmRfbGF0ZW5jeSAob3N4YnVmLT5jb3JlX2F1ZGlvLAotICAgICAgICAgIEdTVF9BVURJT19JTkZPX1JBVEUgKCZidWYtPnNwZWMuaW5mbyksICZzYW1wbGVzLCAmbGF0ZW5jeSkpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBHU1RfREVCVUdfT0JKRUNUIChidWYsICJHb3QgbGF0ZW5jeTogJWYgc2Vjb25kcyAtPiAlZCBzYW1wbGVzIiwKLSAgICAgIGxhdGVuY3ksIHNhbXBsZXMpOwotICByZXR1cm4gc2FtcGxlczsKLX0KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuaCBiL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3JpbmdidWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA1NGZkMy4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgRmx1ZW5kbyBTLkEuIDxzdXBwb3J0QGZsdWVuZG8uY29tPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xICh0aGUgIkxHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5IGluc3RlYWQgb2YgdGhlIG9uZXMKLSAqIG1lbnRpb25lZCBhYm92ZToKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX09TWF9SSU5HX0JVRkZFUl9IX18KLSNkZWZpbmUgX19HU1RfT1NYX1JJTkdfQlVGRkVSX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9yaW5nYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0b3N4Y29yZWF1ZGlvLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09TWF9BVURJT19SSU5HX0JVRkZFUiBcCi0gIChnc3Rfb3N4X2F1ZGlvX3JpbmdfYnVmZmVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fUklOR19CVUZGRVIob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9PU1hfQVVESU9fUklOR19CVUZGRVIsR3N0T3N4QXVkaW9SaW5nQnVmZmVyKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19SSU5HX0JVRkZFUl9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9PU1hfQVVESU9fUklOR19CVUZGRVIsR3N0T3N4QXVkaW9SaW5nQnVmZmVyQ2xhc3MpKQotI2RlZmluZSBHU1RfT1NYX0FVRElPX1JJTkdfQlVGRkVSX0dFVF9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksR1NUX1RZUEVfT1NYX0FVRElPX1JJTkdfQlVGRkVSLEdzdE9zeEF1ZGlvUmluZ0J1ZmZlckNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX09TWF9BVURJT19SSU5HX0JVRkZFUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX09TWF9BVURJT19SSU5HX0JVRkZFUikpCi0jZGVmaW5lIEdTVF9JU19PU1hfQVVESU9fUklOR19CVUZGRVJfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfT1NYX0FVRElPX1JJTkdfQlVGRkVSKSkKLQotI2RlZmluZSBSSU5HQlVGRkVSX0lTX1NQRElGKHQpICgodCkgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0FDMyB8fCAodCkgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSX0ZPUk1BVF9UWVBFX0RUUykKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9zeEF1ZGlvUmluZ0J1ZmZlciBHc3RPc3hBdWRpb1JpbmdCdWZmZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0T3N4QXVkaW9SaW5nQnVmZmVyQ2xhc3MgR3N0T3N4QXVkaW9SaW5nQnVmZmVyQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0T3N4QXVkaW9SaW5nQnVmZmVyCi17Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciBvYmplY3Q7Ci0KLSAgR3N0Q29yZUF1ZGlvICpjb3JlX2F1ZGlvOwotCi0gIGd1aW50IGJ1ZmZlcl9sZW47Ci0gIGd1aW50IHNlZ29mZnNldDsKLX07Ci0KLXN0cnVjdCBfR3N0T3N4QXVkaW9SaW5nQnVmZmVyQ2xhc3MKLXsKLSAgR3N0QXVkaW9SaW5nQnVmZmVyQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X29zeF9hdWRpb19yaW5nX2J1ZmZlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9PU1hfQVVESU9fUklOR19CVUZGRVJfSF9fICovCi0KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYyBiL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFmZDE1OC4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzMgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSA8c29uZ2JpcmRAc29uZ2JpcmRuZXN0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgKHRoZSAiTEdQTCIpLCBpbgotICogd2hpY2ggY2FzZSB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkgaW5zdGVhZCBvZiB0aGUgb25lcwotICogbWVudGlvbmVkIGFib3ZlOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudCBvZgotICogUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0gKgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW9zeGF1ZGlvc2luawotICoKLSAqIFRoaXMgZWxlbWVudCByZW5kZXJzIHJhdyBhdWRpbyBzYW1wbGVzIHVzaW5nIHRoZSBDb3JlQXVkaW8gYXBpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgZmlsZXNyYyBsb2NhdGlvbj1zaW5lLm9nZyAhIG9nZ2RlbXV4ICEgdm9yYmlzZGVjICEgYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIG9zeGF1ZGlvc2luawotICogXXwgUGxheSBhbiBPZ2cvVm9yYmlzIGZpbGUuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby1jaGFubmVscy5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9nc3RhdWRpb2llYzYxOTM3Lmg+Ci0KLSNpbmNsdWRlICJnc3Rvc3hhdWRpb3NpbmsuaCIKLSNpbmNsdWRlICJnc3Rvc3hhdWRpb2VsZW1lbnQuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAob3N4X2F1ZGlvc2lua19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3hfYXVkaW9zaW5rX2RlYnVnCi0KLSNpbmNsdWRlICJnc3Rvc3hjb3JlYXVkaW8uaCIKLQotLyogRmlsdGVyIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBBUkdfMCwKLSAgQVJHX0RFVklDRSwKLSAgQVJHX1ZPTFVNRQotfTsKLQotI2RlZmluZSBERUZBVUxUX1ZPTFVNRSAxLjAKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfZmFjdG9yeSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX09TWF9BVURJT19TSU5LX0NBUFMpCi0gICAgKTsKLQotc3RhdGljIHZvaWQgZ3N0X29zeF9hdWRpb19zaW5rX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLXN0YXRpYyB2b2lkIGdzdF9vc3hfYXVkaW9fc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X29zeF9hdWRpb19zaW5rX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfb3N4X2F1ZGlvX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYmFzZSwgR3N0UXVlcnkgKiBxdWVyeSk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBiYXNlLAotICAgIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF9vc3hfYXVkaW9fc2lua19hY2NlcHRjYXBzIChHc3RPc3hBdWRpb1NpbmsgKiBzaW5rLAotICAgIEdzdENhcHMgKiBjYXBzKTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqZ3N0X29zeF9hdWRpb19zaW5rX3NpbmtfcGF5bG9hZCAoR3N0QXVkaW9CYXNlU2luayAqIHNpbmssCi0gICAgR3N0QnVmZmVyICogYnVmKTsKLXN0YXRpYyBHc3RBdWRpb1JpbmdCdWZmZXIKLSAgICAqIGdzdF9vc3hfYXVkaW9fc2lua19jcmVhdGVfcmluZ2J1ZmZlciAoR3N0QXVkaW9CYXNlU2luayAqIHNpbmspOwotc3RhdGljIHZvaWQgZ3N0X29zeF9hdWRpb19zaW5rX29zeGVsZW1lbnRfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLXN0YXRpYyB2b2lkIGdzdF9vc3hfYXVkaW9fc2lua19zZXRfdm9sdW1lIChHc3RPc3hBdWRpb1NpbmsgKiBzaW5rKTsKLQotc3RhdGljIE9TU3RhdHVzIGdzdF9vc3hfYXVkaW9fc2lua19pb19wcm9jIChHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKiBidWYsCi0gICAgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MgKiBpb0FjdGlvbkZsYWdzLAotICAgIGNvbnN0IEF1ZGlvVGltZVN0YW1wICogaW5UaW1lU3RhbXAsCi0gICAgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqIGJ1ZmZlckxpc3QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19zaW5rX2RvX2luaXQgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBHSW50ZXJmYWNlSW5mbyBvc3hlbGVtZW50X2luZm8gPSB7Ci0gICAgZ3N0X29zeF9hdWRpb19zaW5rX29zeGVsZW1lbnRfaW5pdCwKLSAgICBOVUxMLAotICAgIE5VTEwKLSAgfTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3N4X2F1ZGlvc2lua19kZWJ1ZywgIm9zeGF1ZGlvc2luayIsIDAsCi0gICAgICAiT1NYIEF1ZGlvIFNpbmsiKTsKLSAgZ3N0X2NvcmVfYXVkaW9faW5pdF9kZWJ1ZyAoKTsKLSAgR1NUX0RFQlVHICgiQWRkaW5nIHN0YXRpYyBpbnRlcmZhY2UiKTsKLSAgZ190eXBlX2FkZF9pbnRlcmZhY2Vfc3RhdGljICh0eXBlLCBHU1RfT1NYX0FVRElPX0VMRU1FTlRfVFlQRSwKLSAgICAgICZvc3hlbGVtZW50X2luZm8pOwotfQotCi0jZGVmaW5lIGdzdF9vc3hfYXVkaW9fc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0T3N4QXVkaW9TaW5rLCBnc3Rfb3N4X2F1ZGlvX3NpbmssCi0gICAgR1NUX1RZUEVfQVVESU9fQkFTRV9TSU5LLCBnc3Rfb3N4X2F1ZGlvX3NpbmtfZG9faW5pdCAoZ19kZWZpbmVfdHlwZV9pZCkpOwotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19zaW5rX2NsYXNzX2luaXQgKEdzdE9zeEF1ZGlvU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU2lua0NsYXNzICpnc3RiYXNlc2lua19jbGFzczsKLSAgR3N0QXVkaW9CYXNlU2lua0NsYXNzICpnc3RhdWRpb2Jhc2VzaW5rX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MgPSAoR3N0QmFzZVNpbmtDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YXVkaW9iYXNlc2lua19jbGFzcyA9IChHc3RBdWRpb0Jhc2VTaW5rQ2xhc3MgKikga2xhc3M7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X29zeF9hdWRpb19zaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29zeF9hdWRpb19zaW5rX2dldF9wcm9wZXJ0eTsKLQotICBnc3RlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fc2lua19jaGFuZ2Vfc3RhdGUpOwotCi0jaWZuZGVmIEhBVkVfSU9TCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19ERVZJQ0UsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZGV2aWNlIiwgIkRldmljZSBJRCIsICJEZXZpY2UgSUQgb2Ygb3V0cHV0IGRldmljZSIsCi0gICAgICAgICAgMCwgR19NQVhJTlQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotI2VuZGlmCi0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnF1ZXJ5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fc2lua19xdWVyeSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX1ZPTFVNRSwKLSAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUgKCJ2b2x1bWUiLCAiVm9sdW1lIiwgIlZvbHVtZSBvZiB0aGlzIHN0cmVhbSIsCi0gICAgICAgICAgMCwgMS4wLCAxLjAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdGJhc2VzaW5rX2NsYXNzLT5nZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0Y2Fwcyk7Ci0KLSAgZ3N0YXVkaW9iYXNlc2lua19jbGFzcy0+Y3JlYXRlX3JpbmdidWZmZXIgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fc2lua19jcmVhdGVfcmluZ2J1ZmZlcik7Ci0gIGdzdGF1ZGlvYmFzZXNpbmtfY2xhc3MtPnBheWxvYWQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9vc3hfYXVkaW9fc2lua19zaW5rX3BheWxvYWQpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmc2lua19mYWN0b3J5KTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChnc3RlbGVtZW50X2NsYXNzLCAiQXVkaW8gU2luayAoT1NYKSIsCi0gICAgICAiU2luay9BdWRpbyIsCi0gICAgICAiT3V0cHV0IHRvIGEgc291bmQgY2FyZCBpbiBPUyBYIiwKLSAgICAgICJaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fc2lua19pbml0IChHc3RPc3hBdWRpb1NpbmsgKiBzaW5rKQotewotICBHU1RfREVCVUcgKCJJbml0aWFsaXNpbmcgb2JqZWN0Iik7Ci0KLSAgc2luay0+ZGV2aWNlX2lkID0ga0F1ZGlvRGV2aWNlVW5rbm93bjsKLSAgc2luay0+dm9sdW1lID0gREVGQVVMVF9WT0xVTUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X2F1ZGlvX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zeEF1ZGlvU2luayAqc2luayA9IEdTVF9PU1hfQVVESU9fU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSNpZm5kZWYgSEFWRV9JT1MKLSAgICBjYXNlIEFSR19ERVZJQ0U6Ci0gICAgICBzaW5rLT5kZXZpY2VfaWQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBBUkdfVk9MVU1FOgotICAgICAgc2luay0+dm9sdW1lID0gZ192YWx1ZV9nZXRfZG91YmxlICh2YWx1ZSk7Ci0gICAgICBnc3Rfb3N4X2F1ZGlvX3Npbmtfc2V0X3ZvbHVtZSAoc2luayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X29zeF9hdWRpb19zaW5rX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCi0gICAgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0T3N4QXVkaW9TaW5rICpvc3hzaW5rID0gR1NUX09TWF9BVURJT19TSU5LIChlbGVtZW50KTsKLSAgR3N0T3N4QXVkaW9SaW5nQnVmZmVyICpyaW5nYnVmZmVyOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdvdG8gb3V0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgLyogRGV2aWNlIGhhcyBiZWVuIHNlbGVjdGVkLCBBdWRpb1VuaXQgc2V0IHVwLCBzbyBpbml0aWFsaXplIHZvbHVtZSAqLwotICAgICAgZ3N0X29zeF9hdWRpb19zaW5rX3NldF92b2x1bWUgKG9zeHNpbmspOwotCi0gICAgICAvKiBUaGUgZGV2aWNlIGlzIG9wZW4gbm93LCBzbyBmaXggb3VyIGRldmljZV9pZCBpZiBpdCBjaGFuZ2VkICovCi0gICAgICByaW5nYnVmZmVyID0KLSAgICAgICAgICBHU1RfT1NYX0FVRElPX1JJTkdfQlVGRkVSIChHU1RfQVVESU9fQkFTRV9TSU5LIChvc3hzaW5rKS0+cmluZ2J1ZmZlcik7Ci0gICAgICBpZiAocmluZ2J1ZmZlci0+Y29yZV9hdWRpby0+ZGV2aWNlX2lkICE9IG9zeHNpbmstPmRldmljZV9pZCkgewotICAgICAgICBvc3hzaW5rLT5kZXZpY2VfaWQgPSByaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5kZXZpY2VfaWQ7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKG9zeHNpbmspLCAiZGV2aWNlIik7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi1vdXQ6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zeEF1ZGlvU2luayAqc2luayA9IEdTVF9PU1hfQVVESU9fU0lOSyAob2JqZWN0KTsKLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0jaWZuZGVmIEhBVkVfSU9TCi0gICAgY2FzZSBBUkdfREVWSUNFOgotICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgc2luay0+ZGV2aWNlX2lkKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBBUkdfVk9MVU1FOgotICAgICAgZ192YWx1ZV9zZXRfZG91YmxlICh2YWx1ZSwgc2luay0+dm9sdW1lKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3N4X2F1ZGlvX3NpbmtfcXVlcnkgKEdzdEJhc2VTaW5rICogYmFzZSwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0T3N4QXVkaW9TaW5rICpzaW5rID0gR1NUX09TWF9BVURJT19TSU5LIChiYXNlKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQUNDRVBUX0NBUFM6Ci0gICAgewotICAgICAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9hY2NlcHRfY2FwcyAocXVlcnksICZjYXBzKTsKLSAgICAgIHJldCA9IGdzdF9vc3hfYXVkaW9fc2lua19hY2NlcHRjYXBzIChzaW5rLCBjYXBzKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfYWNjZXB0X2NhcHNfcmVzdWx0IChxdWVyeSwgcmV0KTsKLSAgICAgIHJldCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEdTVF9CQVNFX1NJTktfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChiYXNlLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RPc3hBdWRpb1NpbmsgKm9zeHNpbms7Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciAqYnVmOwotICBHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKm9zeGJ1ZjsKLSAgR3N0Q2FwcyAqY2FwcywgKmZpbHRlcmVkX2NhcHM7Ci0KLSAgb3N4c2luayA9IEdTVF9PU1hfQVVESU9fU0lOSyAoc2luayk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvc3hzaW5rKTsKLSAgYnVmID0gR1NUX0FVRElPX0JBU0VfU0lOSyAoc2luayktPnJpbmdidWZmZXI7Ci0gIGlmIChidWYpCi0gICAgZ3N0X29iamVjdF9yZWYgKGJ1Zik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3hzaW5rKTsKLQotICBpZiAoIWJ1ZikgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNpbmssICJubyByaW5nIGJ1ZmZlciwgcmV0dXJuaW5nIE5VTEwgY2FwcyIpOwotICAgIHJldHVybiBHU1RfQkFTRV9TSU5LX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5nZXRfY2FwcyAoc2luaywgZmlsdGVyKTsKLSAgfQotCi0gIG9zeGJ1ZiA9IEdTVF9PU1hfQVVESU9fUklOR19CVUZGRVIgKGJ1Zik7Ci0KLSAgLyogcHJvdGVjdCBhZ2FpbnN0IGNhY2hlZF9jYXBzIGdvaW5nIGF3YXkgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChidWYpOwotCi0gIGlmIChvc3hidWYtPmNvcmVfYXVkaW8tPmNhY2hlZF9jYXBzX3ZhbGlkKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJSZXR1cm5pbmcgY2FjaGVkIGNhcHMiKTsKLSAgICBjYXBzID0gZ3N0X2NhcHNfcmVmIChvc3hidWYtPmNvcmVfYXVkaW8tPmNhY2hlZF9jYXBzKTsKLSAgfSBlbHNlIGlmIChidWYtPm9wZW4pIHsKLSAgICBHc3RDYXBzICp0ZW1wbGF0ZV9jYXBzOwotCi0gICAgLyogR2V0IHRlbXBsYXRlIGNhcHMgKi8KLSAgICB0ZW1wbGF0ZV9jYXBzID0KLSAgICAgICAgZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9BVURJT19CQVNFX1NJTktfUEFEIChvc3hzaW5rKSk7Ci0KLSAgICAvKiBEZXZpY2UgaXMgb3BlbiwgbGV0J3MgcHJvYmUgaXRzIGNhcHMgKi8KLSAgICBjYXBzID0gZ3N0X2NvcmVfYXVkaW9fcHJvYmVfY2FwcyAob3N4YnVmLT5jb3JlX2F1ZGlvLCB0ZW1wbGF0ZV9jYXBzKTsKLSAgICBnc3RfY2Fwc19yZXBsYWNlICgmb3N4YnVmLT5jb3JlX2F1ZGlvLT5jYWNoZWRfY2FwcywgY2Fwcyk7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAodGVtcGxhdGVfY2Fwcyk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgInJpbmcgYnVmZmVyIG5vdCBvcGVuLCByZXR1cm5pbmcgTlVMTCBjYXBzIik7Ci0gICAgY2FwcyA9IE5VTEw7Ci0gIH0KLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoYnVmKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidWYpOwotCi0gIGlmICghY2FwcykKLSAgICByZXR1cm4gTlVMTDsKLQotICBpZiAoIWZpbHRlcikKLSAgICByZXR1cm4gY2FwczsKLQotICAvKiBUYWtlIGNhcmUgb2YgZmlsdGVyZWQgY2FwcyAqLwotICBmaWx0ZXJlZF9jYXBzID0KLSAgICAgIGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIGNhcHMsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgcmV0dXJuIGZpbHRlcmVkX2NhcHM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF9hdWRpb19zaW5rX2FjY2VwdGNhcHMgKEdzdE9zeEF1ZGlvU2luayAqIHNpbmssIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RDYXBzICpwYWRfY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgc3BlYyA9IHsgMCB9OwotICBnY2hhciAqY2Fwc19zdHJpbmcgPSBOVUxMOwotCi0gIGNhcHNfc3RyaW5nID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgImFjY2VwdGNhcHMgY2FsbGVkIHdpdGggJXMiLCBjYXBzX3N0cmluZyk7Ci0gIGdfZnJlZSAoY2Fwc19zdHJpbmcpOwotCi0gIHBhZF9jYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChHU1RfQkFTRV9TSU5LX1BBRCAoc2luayksIGNhcHMpOwotICBpZiAocGFkX2NhcHMpIHsKLSAgICBnYm9vbGVhbiBjcmV0ID0gZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAocGFkX2NhcHMsIGNhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChwYWRfY2Fwcyk7Ci0gICAgaWYgKCFjcmV0KQotICAgICAgZ290byBkb25lOwotICB9Ci0KLSAgLyogSWYgd2UndmUgbm90IGdvdCBmaXhlZCBjYXBzLCBjcmVhdGluZyBhIHN0cmVhbSBtaWdodCBmYWlsLAotICAgKiBzbyBsZXQncyBqdXN0IHJldHVybiBmcm9tIGhlcmUgd2l0aCBkZWZhdWx0IGFjY2VwdGNhcHMKLSAgICogYmVoYXZpb3VyICovCi0gIGlmICghZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBwYXJzZSBoZWxwZXIgZXhwZWN0cyB0aGlzIHNldCwgc28gYXZvaWQgbmFzdHkgd2FybmluZwotICAgKiB3aWxsIGJlIHNldCBwcm9wZXJseSBsYXRlciBvbiBhbnl3YXkgICovCi0gIHNwZWMubGF0ZW5jeV90aW1lID0gR1NUX1NFQ09ORDsKLSAgaWYgKCFnc3RfYXVkaW9fcmluZ19idWZmZXJfcGFyc2VfY2FwcyAoJnNwZWMsIGNhcHMpKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBNYWtlIHN1cmUgaW5wdXQgaXMgZnJhbWVkIGFuZCBjYW4gYmUgcGF5bG9hZGVkICovCi0gIHN3aXRjaCAoc3BlYy50eXBlKSB7Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfQUMzOgotICAgIHsKLSAgICAgIGdib29sZWFuIGZyYW1lZCA9IEZBTFNFOwotCi0gICAgICBzdCA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuIChzdCwgImZyYW1lZCIsICZmcmFtZWQpOwotICAgICAgaWYgKCFmcmFtZWQgfHwgZ3N0X2F1ZGlvX2llYzYxOTM3X2ZyYW1lX3NpemUgKCZzcGVjKSA8PSAwKQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfQVVESU9fUklOR19CVUZGRVJfRk9STUFUX1RZUEVfRFRTOgotICAgIHsKLSAgICAgIGdib29sZWFuIHBhcnNlZCA9IEZBTFNFOwotCi0gICAgICBzdCA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9ib29sZWFuIChzdCwgInBhcnNlZCIsICZwYXJzZWQpOwotICAgICAgaWYgKCFwYXJzZWQgfHwgZ3N0X2F1ZGlvX2llYzYxOTM3X2ZyYW1lX3NpemUgKCZzcGVjKSA8PSAwKQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldCA9IFRSVUU7Ci0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ3N0X29zeF9hdWRpb19zaW5rX3NpbmtfcGF5bG9hZCAoR3N0QXVkaW9CYXNlU2luayAqIHNpbmssIEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgaWYgKFJJTkdCVUZGRVJfSVNfU1BESUYgKHNpbmstPnJpbmdidWZmZXItPnNwZWMudHlwZSkpIHsKLSAgICBnaW50IGZyYW1lc2l6ZSA9IGdzdF9hdWRpb19pZWM2MTkzN19mcmFtZV9zaXplICgmc2luay0+cmluZ2J1ZmZlci0+c3BlYyk7Ci0gICAgR3N0QnVmZmVyICpvdXQ7Ci0gICAgR3N0TWFwSW5mbyBpbm1hcCwgb3V0bWFwOwotICAgIGdib29sZWFuIHJlczsKLQotICAgIGlmIChmcmFtZXNpemUgPD0gMCkKLSAgICAgIHJldHVybiBOVUxMOwotCi0gICAgb3V0ID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChmcmFtZXNpemUpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmlubWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIGdzdF9idWZmZXJfbWFwIChvdXQsICZvdXRtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gICAgLyogRklYTUU6IHRoZSBlbmRpYW5uZXNzIG5lZWRzIHRvIGJlIHF1ZXJpZWQgYW5kIHRoZW4gc2V0ICovCi0gICAgcmVzID0gZ3N0X2F1ZGlvX2llYzYxOTM3X3BheWxvYWQgKGlubWFwLmRhdGEsIGlubWFwLnNpemUsCi0gICAgICAgIG91dG1hcC5kYXRhLCBvdXRtYXAuc2l6ZSwgJnNpbmstPnJpbmdidWZmZXItPnNwZWMsIEdfQklHX0VORElBTik7Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZpbm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0LCAmb3V0bWFwKTsKLQotICAgIGlmICghcmVzKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmIChvdXQpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8gKG91dCwgYnVmLCBHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEsIDAsIC0xKTsKLSAgICByZXR1cm4gb3V0OwotCi0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGdzdF9idWZmZXJfcmVmIChidWYpOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RBdWRpb1JpbmdCdWZmZXIgKgotZ3N0X29zeF9hdWRpb19zaW5rX2NyZWF0ZV9yaW5nYnVmZmVyIChHc3RBdWRpb0Jhc2VTaW5rICogc2luaykKLXsKLSAgR3N0T3N4QXVkaW9TaW5rICpvc3hzaW5rOwotICBHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKnJpbmdidWZmZXI7Ci0KLSAgb3N4c2luayA9IEdTVF9PU1hfQVVESU9fU0lOSyAoc2luayk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIkNyZWF0aW5nIHJpbmdidWZmZXIiKTsKLSAgcmluZ2J1ZmZlciA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfT1NYX0FVRElPX1JJTkdfQlVGRkVSLCBOVUxMKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc2luaywgIm9zeCBzaW5rICVwIGVsZW1lbnQgJXAgIGlvcHJvYyAlcCIsIG9zeHNpbmssCi0gICAgICBHU1RfT1NYX0FVRElPX0VMRU1FTlRfR0VUX0lOVEVSRkFDRSAob3N4c2luayksCi0gICAgICAodm9pZCAqKSBnc3Rfb3N4X2F1ZGlvX3NpbmtfaW9fcHJvYyk7Ci0KLSAgcmluZ2J1ZmZlci0+Y29yZV9hdWRpby0+ZWxlbWVudCA9Ci0gICAgICBHU1RfT1NYX0FVRElPX0VMRU1FTlRfR0VUX0lOVEVSRkFDRSAob3N4c2luayk7Ci0gIHJpbmdidWZmZXItPmNvcmVfYXVkaW8tPmlzX3NyYyA9IEZBTFNFOwotCi0gIC8qIEJ5IGRlZmF1bHQgdGhlIGNvcmVhdWRpbyBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSByaW5nYnVmZmVyCi0gICAqIGhhcyBkZXZpY2VfaWQ9PWtBdWRpb0RldmljZVVua25vd24uIFRoZSB1c2VyIG1pZ2h0IGhhdmUKLSAgICogc2VsZWN0ZWQgYSBkaWZmZXJlbnQgb25lIGhlcmUKLSAgICovCi0gIGlmIChyaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5kZXZpY2VfaWQgIT0gb3N4c2luay0+ZGV2aWNlX2lkKQotICAgIHJpbmdidWZmZXItPmNvcmVfYXVkaW8tPmRldmljZV9pZCA9IG9zeHNpbmstPmRldmljZV9pZDsKLQotICByZXR1cm4gR1NUX0FVRElPX1JJTkdfQlVGRkVSIChyaW5nYnVmZmVyKTsKLX0KLQotLyogSEFMT3V0cHV0IEF1ZGlvVW5pdCB3aWxsIHJlcXVlc3QgZmFpcmx5IGFyYml0cmFyaWx5LXNpemVkIGNodW5rcwotICogb2YgZGF0YSwgbm90IG9mIGEgZml4ZWQgc2l6ZS4gU28sIHdlIGtlZXAgdHJhY2sgb2Ygd2hlcmUgaW4KLSAqIHRoZSBjdXJyZW50IHJpbmdidWZmZXIgc2VnbWVudCB3ZSBhcmUsIGFuZCBvbmx5IGFkdmFuY2UgdGhlIHNlZ21lbnQKLSAqIG9uY2Ugd2UndmUgcmVhZCB0aGUgd2hvbGUgdGhpbmcgKi8KLXN0YXRpYyBPU1N0YXR1cwotZ3N0X29zeF9hdWRpb19zaW5rX2lvX3Byb2MgKEdzdE9zeEF1ZGlvUmluZ0J1ZmZlciAqIGJ1ZiwKLSAgICBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyAqIGlvQWN0aW9uRmxhZ3MsCi0gICAgY29uc3QgQXVkaW9UaW1lU3RhbXAgKiBpblRpbWVTdGFtcCwKLSAgICBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0ICogYnVmZmVyTGlzdCkKLXsKLSAgZ3VpbnQ4ICpyZWFkcHRyOwotICBnaW50IHJlYWRzZWc7Ci0gIGdpbnQgbGVuOwotICBnaW50IHN0cmVhbV9pZHggPSBidWYtPmNvcmVfYXVkaW8tPnN0cmVhbV9pZHg7Ci0gIGdpbnQgcmVtYWluaW5nID0gYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbc3RyZWFtX2lkeF0ubURhdGFCeXRlU2l6ZTsKLSAgZ2ludCBvZmZzZXQgPSAwOwotCi0gIHdoaWxlIChyZW1haW5pbmcpIHsKLSAgICBpZiAoIWdzdF9hdWRpb19yaW5nX2J1ZmZlcl9wcmVwYXJlX3JlYWQgKEdTVF9BVURJT19SSU5HX0JVRkZFUiAoYnVmKSwKLSAgICAgICAgICAgICZyZWFkc2VnLCAmcmVhZHB0ciwgJmxlbikpCi0gICAgICByZXR1cm4gMDsKLQotICAgIGxlbiAtPSBidWYtPnNlZ29mZnNldDsKLQotICAgIGlmIChsZW4gPiByZW1haW5pbmcpCi0gICAgICBsZW4gPSByZW1haW5pbmc7Ci0KLSAgICBtZW1jcHkgKChjaGFyICopIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW3N0cmVhbV9pZHhdLm1EYXRhICsgb2Zmc2V0LAotICAgICAgICByZWFkcHRyICsgYnVmLT5zZWdvZmZzZXQsIGxlbik7Ci0KLSAgICBidWYtPnNlZ29mZnNldCArPSBsZW47Ci0gICAgb2Zmc2V0ICs9IGxlbjsKLSAgICByZW1haW5pbmcgLT0gbGVuOwotCi0gICAgaWYgKChnaW50KSBidWYtPnNlZ29mZnNldCA9PSBHU1RfQVVESU9fUklOR19CVUZGRVIgKGJ1ZiktPnNwZWMuc2Vnc2l6ZSkgewotICAgICAgLyogY2xlYXIgd3JpdHRlbiBzYW1wbGVzICovCi0gICAgICBnc3RfYXVkaW9fcmluZ19idWZmZXJfY2xlYXIgKEdTVF9BVURJT19SSU5HX0JVRkZFUiAoYnVmKSwgcmVhZHNlZyk7Ci0KLSAgICAgIC8qIHdlIHdyb3RlIG9uZSBzZWdtZW50ICovCi0gICAgICBnc3RfYXVkaW9fcmluZ19idWZmZXJfYWR2YW5jZSAoR1NUX0FVRElPX1JJTkdfQlVGRkVSIChidWYpLCAxKTsKLQotICAgICAgYnVmLT5zZWdvZmZzZXQgPSAwOwotICAgIH0KLSAgfQotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fc2lua19vc3hlbGVtZW50X2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCi17Ci0gIEdzdE9zeEF1ZGlvRWxlbWVudEludGVyZmFjZSAqaWZhY2UgPSAoR3N0T3N4QXVkaW9FbGVtZW50SW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmlvX3Byb2MgPSAoQVVSZW5kZXJDYWxsYmFjaykgZ3N0X29zeF9hdWRpb19zaW5rX2lvX3Byb2M7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X2F1ZGlvX3Npbmtfc2V0X3ZvbHVtZSAoR3N0T3N4QXVkaW9TaW5rICogc2luaykKLXsKLSAgR3N0T3N4QXVkaW9SaW5nQnVmZmVyICpvc3hidWY7Ci0KLSAgb3N4YnVmID0gR1NUX09TWF9BVURJT19SSU5HX0JVRkZFUiAoR1NUX0FVRElPX0JBU0VfU0lOSyAoc2luayktPnJpbmdidWZmZXIpOwotICBpZiAoIW9zeGJ1ZikKLSAgICByZXR1cm47Ci0KLSAgZ3N0X2NvcmVfYXVkaW9fc2V0X3ZvbHVtZSAob3N4YnVmLT5jb3JlX2F1ZGlvLCBzaW5rLT52b2x1bWUpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oIGIvc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjU1YzRkLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSA8c29uZ2JpcmRAc29uZ2JpcmRuZXN0LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCi0gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgKHRoZSAiTEdQTCIpLCBpbgotICogd2hpY2ggY2FzZSB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkgaW5zdGVhZCBvZiB0aGUgb25lcwotICogbWVudGlvbmVkIGFib3ZlOgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudCBvZgotICogUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0gKgotICovCi0KLSNpZm5kZWYgX19HU1RfT1NYQVVESU9TSU5LX0hfXwotI2RlZmluZSBfX0dTVF9PU1hBVURJT1NJTktfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvYmFzZXNpbmsuaD4KLSNpbmNsdWRlICJnc3Rvc3hhdWRpb3JpbmdidWZmZXIuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fU0lOS19DQVBTICJhdWRpby94LXJhdywgIiBcCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19GT1JNQVRTX0FMTCAiLCAiIFwKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiIFwKLSAgICAgICAgInJhdGUgPSAoaW50KSBbMSwgTUFYXSwgIiBcCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIFsxLCA5XTsiIFwKLSAgICAgICAgImF1ZGlvL3gtYWMzLCBmcmFtZWQgPSAoYm9vbGVhbikgdHJ1ZTsiIFwKLSAgICAgICAgImF1ZGlvL3gtZHRzLCBmcmFtZWQgPSAoYm9vbGVhbikgdHJ1ZSIKLQotI2RlZmluZSBHU1RfVFlQRV9PU1hfQVVESU9fU0lOSyBcCi0gIChnc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19TSU5LKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfT1NYX0FVRElPX1NJTkssR3N0T3N4QXVkaW9TaW5rKSkKLSNkZWZpbmUgR1NUX09TWF9BVURJT19TSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX09TWF9BVURJT19TSU5LLEdzdE9zeEF1ZGlvU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX09TWF9BVURJT19TSU5LKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfT1NYX0FVRElPX1NJTkspKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0T3N4QXVkaW9TaW5rIEdzdE9zeEF1ZGlvU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3hBdWRpb1NpbmtDbGFzcyBHc3RPc3hBdWRpb1NpbmtDbGFzczsKLQotc3RydWN0IF9Hc3RPc3hBdWRpb1NpbmsKLXsKLSAgR3N0QXVkaW9CYXNlU2luayBzaW5rOwotCi0gIEF1ZGlvRGV2aWNlSUQgZGV2aWNlX2lkOwotCi0gIEF1ZGlvVW5pdCBhdWRpb3VuaXQ7Ci0gIGRvdWJsZSB2b2x1bWU7Ci0KLSAgZ3VpbnQgY2hhbm5lbHM7Ci19OwotCi1zdHJ1Y3QgX0dzdE9zeEF1ZGlvU2lua0NsYXNzCi17Ci0gIEdzdEF1ZGlvQmFzZVNpbmtDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfb3N4X2F1ZGlvX3NpbmtfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfT1NYQVVESU9TSU5LX0hfXyAqLwotCmRpZmYgLS1naXQgYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuYyBiL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTU2Nzc4Li4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9nc3Rvc3hhdWRpb3NyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2IFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4IFBpb25lZXJzIG9mIHRoZSBJbmV2aXRhYmxlIDxzb25nYmlyZEBzb25nYmlyZG5lc3QuY29tPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xICh0aGUgIkxHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5IGluc3RlYWQgb2YgdGhlIG9uZXMKLSAqIG1lbnRpb25lZCBhYm92ZToKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1vc3hhdWRpb3NyYwotICoKLSAqIFRoaXMgZWxlbWVudCBjYXB0dXJlcyByYXcgYXVkaW8gc2FtcGxlcyB1c2luZyB0aGUgQ29yZUF1ZGlvIGFwaS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZTwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgb3N4YXVkaW9zcmMgISB3YXZlbmMgISBmaWxlc2luayBsb2NhdGlvbj1hdWRpby53YXYKLSAqIF18Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgImdzdG9zeGF1ZGlvc3JjLmgiCi0jaW5jbHVkZSAiZ3N0b3N4YXVkaW9lbGVtZW50LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKG9zeF9hdWRpb3NyY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBvc3hfYXVkaW9zcmNfZGVidWcKLQotLyogRmlsdGVyIHNpZ25hbHMgYW5kIGFyZ3MgKi8KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotZW51bQotewotICBBUkdfMCwKLSAgQVJHX0RFVklDRQotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY19mYWN0b3J5ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX09TWF9BVURJT19TUkNfQ0FQUykKLSAgICApOwotCi1zdGF0aWMgdm9pZCBnc3Rfb3N4X2F1ZGlvX3NyY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfb3N4X2F1ZGlvX3NyY19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X29zeF9hdWRpb19zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9vc3hfYXVkaW9fc3JjX2dldF9jYXBzIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogZmlsdGVyKTsKLQotc3RhdGljIEdzdEF1ZGlvUmluZ0J1ZmZlciAqZ3N0X29zeF9hdWRpb19zcmNfY3JlYXRlX3JpbmdidWZmZXIgKEdzdEF1ZGlvQmFzZVNyYwotICAgICogc3JjKTsKLXN0YXRpYyB2b2lkIGdzdF9vc3hfYXVkaW9fc3JjX29zeGVsZW1lbnRfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwKLSAgICBncG9pbnRlciBpZmFjZV9kYXRhKTsKLXN0YXRpYyBPU1N0YXR1cyBnc3Rfb3N4X2F1ZGlvX3NyY19pb19wcm9jIChHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKiBidWYsCi0gICAgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MgKiBpb0FjdGlvbkZsYWdzLAotICAgIGNvbnN0IEF1ZGlvVGltZVN0YW1wICogaW5UaW1lU3RhbXAsIFVJbnQzMiBpbkJ1c051bWJlciwKLSAgICBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCAqIGJ1ZmZlckxpc3QpOwotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19zcmNfZG9faW5pdCAoR1R5cGUgdHlwZSkKLXsKLSAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIG9zeGVsZW1lbnRfaW5mbyA9IHsKLSAgICBnc3Rfb3N4X2F1ZGlvX3NyY19vc3hlbGVtZW50X2luaXQsCi0gICAgTlVMTCwKLSAgICBOVUxMCi0gIH07Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKG9zeF9hdWRpb3NyY19kZWJ1ZywgIm9zeGF1ZGlvc3JjIiwgMCwKLSAgICAgICJPU1ggQXVkaW8gU3JjIik7Ci0gIGdfdHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyAodHlwZSwgR1NUX09TWF9BVURJT19FTEVNRU5UX1RZUEUsCi0gICAgICAmb3N4ZWxlbWVudF9pbmZvKTsKLX0KLQotI2RlZmluZSBnc3Rfb3N4X2F1ZGlvX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0T3N4QXVkaW9TcmMsIGdzdF9vc3hfYXVkaW9fc3JjLAotICAgIEdTVF9UWVBFX0FVRElPX0JBU0VfU1JDLCBnc3Rfb3N4X2F1ZGlvX3NyY19kb19pbml0IChnX2RlZmluZV90eXBlX2lkKSk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X2F1ZGlvX3NyY19jbGFzc19pbml0IChHc3RPc3hBdWRpb1NyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICpnc3RlbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU3JjQ2xhc3MgKmdzdGJhc2VzcmNfY2xhc3M7Ci0gIEdzdEF1ZGlvQmFzZVNyY0NsYXNzICpnc3RhdWRpb2Jhc2VzcmNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc3JjX2NsYXNzID0gKEdzdEJhc2VTcmNDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YXVkaW9iYXNlc3JjX2NsYXNzID0gKEdzdEF1ZGlvQmFzZVNyY0NsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF9vc3hfYXVkaW9fc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29zeF9hdWRpb19zcmNfZ2V0X3Byb3BlcnR5OwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X29zeF9hdWRpb19zcmNfY2hhbmdlX3N0YXRlKTsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5nZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3N4X2F1ZGlvX3NyY19nZXRfY2Fwcyk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgQVJHX0RFVklDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJkZXZpY2UiLCAiRGV2aWNlIElEIiwgIkRldmljZSBJRCBvZiBpbnB1dCBkZXZpY2UiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnc3RhdWRpb2Jhc2VzcmNfY2xhc3MtPmNyZWF0ZV9yaW5nYnVmZmVyID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfb3N4X2F1ZGlvX3NyY19jcmVhdGVfcmluZ2J1ZmZlcik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGdzdGVsZW1lbnRfY2xhc3MsICZzcmNfZmFjdG9yeSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkF1ZGlvIFNvdXJjZSAoT1NYKSIsCi0gICAgICAiU291cmNlL0F1ZGlvIiwKLSAgICAgICJJbnB1dCBmcm9tIGEgc291bmQgY2FyZCBpbiBPUyBYIiwKLSAgICAgICJaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fc3JjX2luaXQgKEdzdE9zeEF1ZGlvU3JjICogc3JjKQotewotICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdTVF9CQVNFX1NSQyAoc3JjKSwgVFJVRSk7Ci0KLSAgc3JjLT5kZXZpY2VfaWQgPSBrQXVkaW9EZXZpY2VVbmtub3duOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zeEF1ZGlvU3JjICpzcmMgPSBHU1RfT1NYX0FVRElPX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19ERVZJQ0U6Ci0gICAgICBzcmMtPmRldmljZV9pZCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF9hdWRpb19zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9zeEF1ZGlvU3JjICpzcmMgPSBHU1RfT1NYX0FVRElPX1NSQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19ERVZJQ0U6Ci0gICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBzcmMtPmRldmljZV9pZCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X29zeF9hdWRpb19zcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0T3N4QXVkaW9TcmMgKm9zeHNyYyA9IEdTVF9PU1hfQVVESU9fU1JDIChlbGVtZW50KTsKLSAgR3N0T3N4QXVkaW9SaW5nQnVmZmVyICpyaW5nYnVmZmVyOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgIGdvdG8gb3V0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgLyogVGhlIGRldmljZSBpcyBvcGVuIG5vdywgc28gZml4IG91ciBkZXZpY2VfaWQgaWYgaXQgY2hhbmdlZCAqLwotICAgICAgcmluZ2J1ZmZlciA9Ci0gICAgICAgICAgR1NUX09TWF9BVURJT19SSU5HX0JVRkZFUiAoR1NUX0FVRElPX0JBU0VfU1JDIChvc3hzcmMpLT5yaW5nYnVmZmVyKTsKLSAgICAgIGlmIChyaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5kZXZpY2VfaWQgIT0gb3N4c3JjLT5kZXZpY2VfaWQpIHsKLSAgICAgICAgb3N4c3JjLT5kZXZpY2VfaWQgPSByaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5kZXZpY2VfaWQ7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKG9zeHNyYyksICJkZXZpY2UiKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLW91dDoKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X29zeF9hdWRpb19zcmNfZ2V0X2NhcHMgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdE9zeEF1ZGlvU3JjICpvc3hzcmM7Ci0gIEdzdEF1ZGlvUmluZ0J1ZmZlciAqYnVmOwotICBHc3RPc3hBdWRpb1JpbmdCdWZmZXIgKm9zeGJ1ZjsKLSAgR3N0Q2FwcyAqY2FwcywgKmZpbHRlcmVkX2NhcHM7Ci0KLSAgb3N4c3JjID0gR1NUX09TWF9BVURJT19TUkMgKHNyYyk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvc3hzcmMpOwotICBidWYgPSBHU1RfQVVESU9fQkFTRV9TUkMgKHNyYyktPnJpbmdidWZmZXI7Ci0gIGlmIChidWYpCi0gICAgZ3N0X29iamVjdF9yZWYgKGJ1Zik7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3hzcmMpOwotCi0gIGlmICghYnVmKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoc3JjLCAibm8gcmluZyBidWZmZXIsIHVzaW5nIHRlbXBsYXRlIGNhcHMiKTsKLSAgICByZXR1cm4gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5nZXRfY2FwcyAoc3JjLCBmaWx0ZXIpOwotICB9Ci0KLSAgb3N4YnVmID0gR1NUX09TWF9BVURJT19SSU5HX0JVRkZFUiAoYnVmKTsKLQotICAvKiBwcm90ZWN0IGFnYWluc3QgY2FjaGVkX2NhcHMgZ29pbmcgYXdheSAqLwotICBHU1RfT0JKRUNUX0xPQ0sgKGJ1Zik7Ci0KLSAgaWYgKG9zeGJ1Zi0+Y29yZV9hdWRpby0+Y2FjaGVkX2NhcHNfdmFsaWQpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAoc3JjLCAiUmV0dXJuaW5nIGNhY2hlZCBjYXBzIik7Ci0gICAgY2FwcyA9IGdzdF9jYXBzX3JlZiAob3N4YnVmLT5jb3JlX2F1ZGlvLT5jYWNoZWRfY2Fwcyk7Ci0gIH0gZWxzZSBpZiAoYnVmLT5vcGVuKSB7Ci0gICAgR3N0Q2FwcyAqdGVtcGxhdGVfY2FwczsKLQotICAgIC8qIEdldCB0ZW1wbGF0ZSBjYXBzICovCi0gICAgdGVtcGxhdGVfY2FwcyA9Ci0gICAgICAgIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfQVVESU9fQkFTRV9TUkNfUEFEIChvc3hzcmMpKTsKLQotICAgIC8qIERldmljZSBpcyBvcGVuLCBsZXQncyBwcm9iZSBpdHMgY2FwcyAqLwotICAgIGNhcHMgPSBnc3RfY29yZV9hdWRpb19wcm9iZV9jYXBzIChvc3hidWYtPmNvcmVfYXVkaW8sIHRlbXBsYXRlX2NhcHMpOwotICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZvc3hidWYtPmNvcmVfYXVkaW8tPmNhY2hlZF9jYXBzLCBjYXBzKTsKLQotICAgIGdzdF9jYXBzX3VucmVmICh0ZW1wbGF0ZV9jYXBzKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChzcmMsICJyaW5nIGJ1ZmZlciBub3Qgb3BlbiwgdXNpbmcgdGVtcGxhdGUgY2FwcyIpOwotICAgIGNhcHMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmdldF9jYXBzIChzcmMsIE5VTEwpOwotICB9Ci0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGJ1Zik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVmKTsKLQotICBpZiAoIWNhcHMpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgaWYgKCFmaWx0ZXIpCi0gICAgcmV0dXJuIGNhcHM7Ci0KLSAgLyogVGFrZSBjYXJlIG9mIGZpbHRlcmVkIGNhcHMgKi8KLSAgZmlsdGVyZWRfY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCBjYXBzLCBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIHJldHVybiBmaWx0ZXJlZF9jYXBzOwotfQotCi1zdGF0aWMgR3N0QXVkaW9SaW5nQnVmZmVyICoKLWdzdF9vc3hfYXVkaW9fc3JjX2NyZWF0ZV9yaW5nYnVmZmVyIChHc3RBdWRpb0Jhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdE9zeEF1ZGlvU3JjICpvc3hzcmM7Ci0gIEdzdE9zeEF1ZGlvUmluZ0J1ZmZlciAqcmluZ2J1ZmZlcjsKLQotICBvc3hzcmMgPSBHU1RfT1NYX0FVRElPX1NSQyAoc3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvc3hzcmMsICJDcmVhdGluZyByaW5nYnVmZmVyIik7Ci0gIHJpbmdidWZmZXIgPSBnX29iamVjdF9uZXcgKEdTVF9UWVBFX09TWF9BVURJT19SSU5HX0JVRkZFUiwgTlVMTCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKG9zeHNyYywgIm9zeCBzcmMgMHglcCBlbGVtZW50IDB4JXAgIGlvcHJvYyAweCVwIiwgb3N4c3JjLAotICAgICAgR1NUX09TWF9BVURJT19FTEVNRU5UX0dFVF9JTlRFUkZBQ0UgKG9zeHNyYyksCi0gICAgICAodm9pZCAqKSBnc3Rfb3N4X2F1ZGlvX3NyY19pb19wcm9jKTsKLQotICByaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5lbGVtZW50ID0KLSAgICAgIEdTVF9PU1hfQVVESU9fRUxFTUVOVF9HRVRfSU5URVJGQUNFIChvc3hzcmMpOwotICByaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5pc19zcmMgPSBUUlVFOwotCi0gIC8qIEJ5IGRlZmF1bHQgdGhlIGNvcmVhdWRpbyBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSByaW5nYnVmZmVyCi0gICAqIGhhcyBkZXZpY2VfaWQ9PWtBdWRpb0RldmljZVVua25vd24uIFRoZSB1c2VyIG1pZ2h0IGhhdmUKLSAgICogc2VsZWN0ZWQgYSBkaWZmZXJlbnQgb25lIGhlcmUKLSAgICovCi0gIGlmIChyaW5nYnVmZmVyLT5jb3JlX2F1ZGlvLT5kZXZpY2VfaWQgIT0gb3N4c3JjLT5kZXZpY2VfaWQpCi0gICAgcmluZ2J1ZmZlci0+Y29yZV9hdWRpby0+ZGV2aWNlX2lkID0gb3N4c3JjLT5kZXZpY2VfaWQ7Ci0KLSAgcmV0dXJuIEdTVF9BVURJT19SSU5HX0JVRkZFUiAocmluZ2J1ZmZlcik7Ci19Ci0KLXN0YXRpYyBPU1N0YXR1cwotZ3N0X29zeF9hdWRpb19zcmNfaW9fcHJvYyAoR3N0T3N4QXVkaW9SaW5nQnVmZmVyICogYnVmLAotICAgIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzICogaW9BY3Rpb25GbGFncywKLSAgICBjb25zdCBBdWRpb1RpbWVTdGFtcCAqIGluVGltZVN0YW1wLAotICAgIFVJbnQzMiBpbkJ1c051bWJlciwgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKiBidWZmZXJMaXN0KQotewotICBPU1N0YXR1cyBzdGF0dXM7Ci0gIGd1aW50OCAqd3JpdGVwdHI7Ci0gIGdpbnQgd3JpdGVzZWc7Ci0gIGdpbnQgbGVuOwotICBnaW50IHJlbWFpbmluZzsKLSAgVUludDMyIG47Ci0gIGdpbnQgb2Zmc2V0ID0gMDsKLQotICAvKiBQcmV2aW91cyBpbnZva2Ugb2YgQXVkaW9Vbml0UmVuZGVyIGNoYW5nZWQgbURhdGFCeXRlU2l6ZSBpbnRvCi0gICAqIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkLiBSZXNldCB0aGUgbWVtYmVycy4gKi8KLSAgZm9yIChuID0gMDsgbiA8IGJ1Zi0+Y29yZV9hdWRpby0+cmVjQnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnM7ICsrbikgewotICAgIGJ1Zi0+Y29yZV9hdWRpby0+cmVjQnVmZmVyTGlzdC0+bUJ1ZmZlcnNbbl0ubURhdGFCeXRlU2l6ZSA9Ci0gICAgICAgIGJ1Zi0+Y29yZV9hdWRpby0+cmVjQnVmZmVyU2l6ZTsKLSAgfQotCi0gIHN0YXR1cyA9IEF1ZGlvVW5pdFJlbmRlciAoYnVmLT5jb3JlX2F1ZGlvLT5hdWRpb3VuaXQsIGlvQWN0aW9uRmxhZ3MsCi0gICAgICBpblRpbWVTdGFtcCwgaW5CdXNOdW1iZXIsIGluTnVtYmVyRnJhbWVzLCBidWYtPmNvcmVfYXVkaW8tPnJlY0J1ZmZlckxpc3QpOwotCi0gIGlmIChzdGF0dXMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGJ1ZiwgIkF1ZGlvVW5pdFJlbmRlciByZXR1cm5lZCAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIC8qIFRPRE86IFRvIHN1cHBvcnQgbm9uLWludGVybGVhdmVkIGF1ZGlvLCBnbyBvdmVyIGFsbCBtQnVmZmVycywKLSAgICogICAgICAgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4gKi8KLQotICByZW1haW5pbmcgPSBidWYtPmNvcmVfYXVkaW8tPnJlY0J1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhQnl0ZVNpemU7Ci0KLSAgd2hpbGUgKHJlbWFpbmluZykgewotICAgIGlmICghZ3N0X2F1ZGlvX3JpbmdfYnVmZmVyX3ByZXBhcmVfcmVhZCAoR1NUX0FVRElPX1JJTkdfQlVGRkVSIChidWYpLAotICAgICAgICAgICAgJndyaXRlc2VnLCAmd3JpdGVwdHIsICZsZW4pKQotICAgICAgcmV0dXJuIDA7Ci0KLSAgICBsZW4gLT0gYnVmLT5zZWdvZmZzZXQ7Ci0KLSAgICBpZiAobGVuID4gcmVtYWluaW5nKQotICAgICAgbGVuID0gcmVtYWluaW5nOwotCi0gICAgbWVtY3B5ICh3cml0ZXB0ciArIGJ1Zi0+c2Vnb2Zmc2V0LAotICAgICAgICAoY2hhciAqKSBidWYtPmNvcmVfYXVkaW8tPnJlY0J1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhICsgb2Zmc2V0LAotICAgICAgICBsZW4pOwotCi0gICAgYnVmLT5zZWdvZmZzZXQgKz0gbGVuOwotICAgIG9mZnNldCArPSBsZW47Ci0gICAgcmVtYWluaW5nIC09IGxlbjsKLQotICAgIGlmICgoZ2ludCkgYnVmLT5zZWdvZmZzZXQgPT0gR1NUX0FVRElPX1JJTkdfQlVGRkVSIChidWYpLT5zcGVjLnNlZ3NpemUpIHsKLSAgICAgIC8qIHdlIHdyb3RlIG9uZSBzZWdtZW50ICovCi0gICAgICBnc3RfYXVkaW9fcmluZ19idWZmZXJfYWR2YW5jZSAoR1NUX0FVRElPX1JJTkdfQlVGRkVSIChidWYpLCAxKTsKLQotICAgICAgYnVmLT5zZWdvZmZzZXQgPSAwOwotICAgIH0KLSAgfQotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfYXVkaW9fc3JjX29zeGVsZW1lbnRfaW5pdCAoZ3BvaW50ZXIgZ19pZmFjZSwgZ3BvaW50ZXIgaWZhY2VfZGF0YSkKLXsKLSAgR3N0T3N4QXVkaW9FbGVtZW50SW50ZXJmYWNlICppZmFjZSA9IChHc3RPc3hBdWRpb0VsZW1lbnRJbnRlcmZhY2UgKikgZ19pZmFjZTsKLQotICBpZmFjZS0+aW9fcHJvYyA9IChBVVJlbmRlckNhbGxiYWNrKSBnc3Rfb3N4X2F1ZGlvX3NyY19pb19wcm9jOwotfQpkaWZmIC0tZ2l0IGEvc3lzL29zeGF1ZGlvL2dzdG9zeGF1ZGlvc3JjLmggYi9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4MjViMC4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4YXVkaW9zcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xICh0aGUgIkxHUEwiKSwgaW4KLSAqIHdoaWNoIGNhc2UgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5IGluc3RlYWQgb2YgdGhlIG9uZXMKLSAqIG1lbnRpb25lZCBhYm92ZToKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX09TWEFVRElPU1JDX0hfXwotI2RlZmluZSBfX0dTVF9PU1hBVURJT1NSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9iYXNlc3JjLmg+Ci0jaW5jbHVkZSAiZ3N0b3N4YXVkaW9yaW5nYnVmZmVyLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfT1NYX0FVRElPX1NSQ19DQVBTICJhdWRpby94LXJhdywgIiBcCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19GT1JNQVRTX0FMTCAiLCAiIFwKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiIFwKLSAgICAgICAgInJhdGUgPSAoaW50KSBbMSwgTUFYXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbMSwgTUFYXSIKLQotI2RlZmluZSBHU1RfVFlQRV9PU1hfQVVESU9fU1JDIFwKLSAgKGdzdF9vc3hfYXVkaW9fc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfT1NYX0FVRElPX1NSQyxHc3RPc3hBdWRpb1NyYykpCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX09TWF9BVURJT19TUkMsR3N0T3N4QXVkaW9TcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19PU1hfQVVESU9fU1JDKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfT1NYX0FVRElPX1NSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3hBdWRpb1NyYyBHc3RPc3hBdWRpb1NyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPc3hBdWRpb1NyY0NsYXNzIEdzdE9zeEF1ZGlvU3JjQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0T3N4QXVkaW9TcmMKLXsKLSAgR3N0QXVkaW9CYXNlU3JjIHNyYzsKLQotICBBdWRpb0RldmljZUlEIGRldmljZV9pZDsKLX07Ci0KLXN0cnVjdCBfR3N0T3N4QXVkaW9TcmNDbGFzcwotewotICBHc3RBdWRpb0Jhc2VTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfb3N4X2F1ZGlvX3NyY19nZXRfdHlwZSAodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9PU1hBVURJT1NSQ19IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uYyBiL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUxNmU2ZC4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjcgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRmx1ZW5kbyBTLkEuIDxzdXBwb3J0QGZsdWVuZG8uY29tPgotICogICBBdXRob3JzOiBKb3NlcCBUb3JyYSBWYWxsw6hzIDxqb3NlcEBmbHVlbmRvLmNvbT4KLSAqICAgICAgICAgICAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5IDxhbW9yYWxlc0BmbHVlbmRvLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImdzdG9zeGNvcmVhdWRpby5oIgotI2luY2x1ZGUgImdzdG9zeGNvcmVhdWRpb2NvbW1vbi5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDIChvc3hfYXVkaW9fZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgb3N4X2F1ZGlvX2RlYnVnCi0KLUdfREVGSU5FX1RZUEUgKEdzdENvcmVBdWRpbywgZ3N0X2NvcmVfYXVkaW8sIEdfVFlQRV9PQkpFQ1QpOwotCi0jaWZkZWYgSEFWRV9JT1MKLSNpbmNsdWRlICJnc3Rvc3hjb3JlYXVkaW9yZW1vdGVpby5jIgotI2Vsc2UKLSNpbmNsdWRlICJnc3Rvc3hjb3JlYXVkaW9oYWwuYyIKLSNlbmRpZgotCi0KLXN0YXRpYyB2b2lkCi1nc3RfY29yZV9hdWRpb19jbGFzc19pbml0IChHc3RDb3JlQXVkaW9DbGFzcyAqIGtsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X2NvcmVfYXVkaW9faW5pdCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgY29yZV9hdWRpby0+aXNfcGFzc3Rocm91Z2ggPSBGQUxTRTsKLSAgY29yZV9hdWRpby0+ZGV2aWNlX2lkID0ga0F1ZGlvRGV2aWNlVW5rbm93bjsKLSAgY29yZV9hdWRpby0+aXNfc3JjID0gRkFMU0U7Ci0gIGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCA9IE5VTEw7Ci0gIGNvcmVfYXVkaW8tPmNhY2hlZF9jYXBzID0gTlVMTDsKLSAgY29yZV9hdWRpby0+Y2FjaGVkX2NhcHNfdmFsaWQgPSBGQUxTRTsKLSNpZm5kZWYgSEFWRV9JT1MKLSAgY29yZV9hdWRpby0+aG9nX3BpZCA9IC0xOwotICBjb3JlX2F1ZGlvLT5kaXNhYmxlZF9taXhpbmcgPSBGQUxTRTsKLSNlbmRpZgotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9pc19vdXRlcl9zY29wZSAoQXVkaW9Vbml0U2NvcGUgc2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQgZWxlbWVudCkKLXsKLSAgcmV0dXJuCi0gICAgICAoc2NvcGUgPT0ga0F1ZGlvVW5pdFNjb3BlX0lucHV0ICYmIGVsZW1lbnQgPT0gMSkgfHwKLSAgICAgIChzY29wZSA9PSBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0ICYmIGVsZW1lbnQgPT0gMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fYXVkaW9fdW5pdF9wcm9wZXJ0eV9saXN0ZW5lciAodm9pZCAqaW5SZWZDb24sIEF1ZGlvVW5pdCBpblVuaXQsCi0gICAgQXVkaW9Vbml0UHJvcGVydHlJRCBpbklELCBBdWRpb1VuaXRTY29wZSBpblNjb3BlLAotICAgIEF1ZGlvVW5pdEVsZW1lbnQgaW5FbGVtZW50KQotewotICBHc3RDb3JlQXVkaW8gKmNvcmVfYXVkaW87Ci0KLSAgY29yZV9hdWRpbyA9IEdTVF9DT1JFX0FVRElPIChpblJlZkNvbik7Ci0gIGdfYXNzZXJ0IChpblVuaXQgPT0gY29yZV9hdWRpby0+YXVkaW91bml0KTsKLQotICBzd2l0Y2ggKGluSUQpIHsKLSAgICBjYXNlIGtBdWRpb1VuaXRQcm9wZXJ0eV9BdWRpb0NoYW5uZWxMYXlvdXQ6Ci0gICAgY2FzZSBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0OgotICAgICAgaWYgKF9pc19vdXRlcl9zY29wZSAoaW5TY29wZSwgaW5FbGVtZW50KSkgewotICAgICAgICAvKiBXZSBkb24ndCBwdXNoIGdzdF9ldmVudF9uZXdfY2FwcyBoZXJlIChmb3Igc3JjKSwKLSAgICAgICAgICogbm9yIGdzdF9ldmVudF9uZXdfcmVjb25maWd1cmUgKGZvciBzaW5rKSwgc2luY2UgQ29yZSBBdWRpbyBjb250aW51ZXMKLSAgICAgICAgICogdG8gaGFwcGlseSBmdW5jdGlvbiB3aXRoIHRoZSBvbGQgZm9ybWF0LCBkb2luZyBjb252ZXJzaW9uL3Jlc2FtcGxpbmcKLSAgICAgICAgICogYXMgbmVlZGVkLgotICAgICAgICAgKiBUaGlzIG1lcmVseSAicmVmcmVzaGVzIiBvdXIgUFJFRkVSUkVEIGNhcHMuICovCi0KLSAgICAgICAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZWl0aGVyIGZyb20gYSBDb3JlIEF1ZGlvIHRocmVhZAotICAgICAgICAgKiBvciBhcyBhIHJlc3VsdCBvZiBhIENvcmUgQXVkaW8gQVBJIChlLmcuIEF1ZGlvVW5pdEluaXRpYWxpemUpCi0gICAgICAgICAqIGZyb20gb3VyIG93biB0aHJlYWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgb3N4YnVmIGNhbiBiZQotICAgICAgICAgKiBhbHJlYWR5IGxvY2tlZCAoR1N0cmVhbWVyJ3MgbXV0ZXggaXMgbm90IHJlY3Vyc2l2ZSkuCi0gICAgICAgICAqIEZvciB0aGlzIHJlYXNvbiB3ZSB1c2UgYSBib29sZWFuIGZsYWcgaW5zdGVhZCBvZiBudWxsaWZ5aW5nCi0gICAgICAgICAqIGNhY2hlZF9jYXBzLiAqLwotICAgICAgICBjb3JlX2F1ZGlvLT5jYWNoZWRfY2Fwc192YWxpZCA9IEZBTFNFOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICBQdWJsaWMgQVBJICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1Hc3RDb3JlQXVkaW8gKgotZ3N0X2NvcmVfYXVkaW9fbmV3IChHc3RPYmplY3QgKiBvc3hidWYpCi17Ci0gIEdzdENvcmVBdWRpbyAqY29yZV9hdWRpbzsKLQotICBjb3JlX2F1ZGlvID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9DT1JFX0FVRElPLCBOVUxMKTsKLSAgY29yZV9hdWRpby0+b3N4YnVmID0gb3N4YnVmOwotICBjb3JlX2F1ZGlvLT5jYWNoZWRfY2FwcyA9IE5VTEw7Ci0gIHJldHVybiBjb3JlX2F1ZGlvOwotfQotCi1nYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fY2xvc2UgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pCi17Ci0gIE9TU3RhdHVzIHN0YXR1czsKLQotICAvKiBVbmluaXRpYWxpemUgdGhlIEF1ZGlvVW5pdCAqLwotICBzdGF0dXMgPSBBdWRpb1VuaXRVbmluaXRpYWxpemUgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCk7Ci0gIGlmIChzdGF0dXMpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb3JlX2F1ZGlvLCAiRmFpbGVkIHRvIHVuaW5pdGlhbGl6ZSBBdWRpb1VuaXQ6ICVkIiwKLSAgICAgICAgKGludCkgc3RhdHVzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBBdWRpb1VuaXRSZW1vdmVQcm9wZXJ0eUxpc3RlbmVyV2l0aFVzZXJEYXRhIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQsCi0gICAgICBrQXVkaW9Vbml0UHJvcGVydHlfQXVkaW9DaGFubmVsTGF5b3V0LCBfYXVkaW9fdW5pdF9wcm9wZXJ0eV9saXN0ZW5lciwKLSAgICAgIGNvcmVfYXVkaW8pOwotICBBdWRpb1VuaXRSZW1vdmVQcm9wZXJ0eUxpc3RlbmVyV2l0aFVzZXJEYXRhIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQsCi0gICAgICBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBfYXVkaW9fdW5pdF9wcm9wZXJ0eV9saXN0ZW5lciwKLSAgICAgIGNvcmVfYXVkaW8pOwotCi0gIC8qIGNvcmVfYXVkaW8tPm9zeGJ1ZiBpcyBhbHJlYWR5IGxvY2tlZCBhdCB0aGlzIHBvaW50ICovCi0gIGNvcmVfYXVkaW8tPmNhY2hlZF9jYXBzX3ZhbGlkID0gRkFMU0U7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZjb3JlX2F1ZGlvLT5jYWNoZWRfY2FwcywgTlVMTCk7Ci0KLSAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCk7Ci0gIGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCA9IE5VTEw7Ci0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fb3BlbiAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgT1NTdGF0dXMgc3RhdHVzOwotCi0gIC8qIGNvcmVfYXVkaW8tPm9zeGJ1ZiBpcyBhbHJlYWR5IGxvY2tlZCBhdCB0aGlzIHBvaW50ICovCi0gIGNvcmVfYXVkaW8tPmNhY2hlZF9jYXBzX3ZhbGlkID0gRkFMU0U7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZjb3JlX2F1ZGlvLT5jYWNoZWRfY2FwcywgTlVMTCk7Ci0KLSAgaWYgKCFnc3RfY29yZV9hdWRpb19vcGVuX2ltcGwgKGNvcmVfYXVkaW8pKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBBZGQgcHJvcGVydHkgbGlzdGVuZXIgKi8KLSAgc3RhdHVzID0gQXVkaW9Vbml0QWRkUHJvcGVydHlMaXN0ZW5lciAoY29yZV9hdWRpby0+YXVkaW91bml0LAotICAgICAga0F1ZGlvVW5pdFByb3BlcnR5X0F1ZGlvQ2hhbm5lbExheW91dCwgX2F1ZGlvX3VuaXRfcHJvcGVydHlfbGlzdGVuZXIsCi0gICAgICBjb3JlX2F1ZGlvKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvcmVfYXVkaW8sICJGYWlsZWQgdG8gYWRkIGF1ZGlvIGNoYW5uZWwgbGF5b3V0IHByb3BlcnR5ICIKLSAgICAgICAgImxpc3RlbmVyIGZvciBBdWRpb1VuaXQ6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgfQotICBzdGF0dXMgPSBBdWRpb1VuaXRBZGRQcm9wZXJ0eUxpc3RlbmVyIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQsCi0gICAgICBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBfYXVkaW9fdW5pdF9wcm9wZXJ0eV9saXN0ZW5lciwKLSAgICAgIGNvcmVfYXVkaW8pOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpbywgIkZhaWxlZCB0byBhZGQgc3RyZWFtIGZvcm1hdCBwcm9wZXJ0eSAiCi0gICAgICAgICJsaXN0ZW5lciBmb3IgQXVkaW9Vbml0OiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gIH0KLQotICAvKiBJbml0aWFsaXplIHRoZSBBdWRpb1VuaXQuIFdlIGtlZXAgdGhlIGF1ZGlvIHVuaXQgaW5pdGlhbGl6ZWQgZWFybHkgc28gdGhhdAotICAgKiB3ZSBjYW4gcHJvYmUgdGhlIHVuZGVybHlpbmcgZGV2aWNlLiAqLwotICBzdGF0dXMgPSBBdWRpb1VuaXRJbml0aWFsaXplIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpbywgIkZhaWxlZCB0byBpbml0aWFsaXplIEF1ZGlvVW5pdDogJWQiLAotICAgICAgICAoaW50KSBzdGF0dXMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fc3RhcnRfcHJvY2Vzc2luZyAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX3N0YXJ0X3Byb2Nlc3NpbmdfaW1wbCAoY29yZV9hdWRpbyk7Ci19Ci0KLWdib29sZWFuCi1nc3RfY29yZV9hdWRpb19wYXVzZV9wcm9jZXNzaW5nIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICByZXR1cm4gZ3N0X2NvcmVfYXVkaW9fcGF1c2VfcHJvY2Vzc2luZ19pbXBsIChjb3JlX2F1ZGlvKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX3N0b3BfcHJvY2Vzc2luZyAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX3N0b3BfcHJvY2Vzc2luZ19pbXBsIChjb3JlX2F1ZGlvKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX2dldF9zYW1wbGVzX2FuZF9sYXRlbmN5IChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgIGdkb3VibGUgcmF0ZSwgZ3VpbnQgKiBzYW1wbGVzLCBnZG91YmxlICogbGF0ZW5jeSkKLXsKLSAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX2dldF9zYW1wbGVzX2FuZF9sYXRlbmN5X2ltcGwgKGNvcmVfYXVkaW8sIHJhdGUsCi0gICAgICBzYW1wbGVzLCBsYXRlbmN5KTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX2luaXRpYWxpemUgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8sCi0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZvcm1hdCwgR3N0Q2FwcyAqIGNhcHMsIGdib29sZWFuIGlzX3Bhc3N0aHJvdWdoKQotewotICBndWludDMyIGZyYW1lX3NpemU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoY29yZV9hdWRpbywKLSAgICAgICJJbml0aWFsaXppbmc6IHBhc3N0aHJvdWdoOiVkIGNhcHM6JSIgR1NUX1BUUl9GT1JNQVQsIGlzX3Bhc3N0aHJvdWdoLAotICAgICAgY2Fwcyk7Ci0KLSAgaWYgKCFnc3RfY29yZV9hdWRpb19pbml0aWFsaXplX2ltcGwgKGNvcmVfYXVkaW8sIGZvcm1hdCwgY2FwcywKLSAgICAgICAgICBpc19wYXNzdGhyb3VnaCwgJmZyYW1lX3NpemUpKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPmlzX3NyYykgewotICAgIC8qIGNyZWF0ZSBBdWRpb0J1ZmZlckxpc3QgbmVlZGVkIGZvciByZWNvcmRpbmcgKi8KLSAgICBjb3JlX2F1ZGlvLT5yZWNCdWZmZXJTaXplID0gZnJhbWVfc2l6ZSAqIGZvcm1hdC5tQnl0ZXNQZXJGcmFtZTsKLSAgICBjb3JlX2F1ZGlvLT5yZWNCdWZmZXJMaXN0ID0KLSAgICAgICAgYnVmZmVyX2xpc3RfYWxsb2MgKGZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSwgY29yZV9hdWRpby0+cmVjQnVmZmVyU2l6ZSwKLSAgICAgICAgLyogQ3VycmVudGx5IGFsd2F5cyBUUlVFIChpLmUuIGludGVybGVhdmVkKSAqLwotICAgICAgICAhKGZvcm1hdC5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZCkpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQKLWdzdF9jb3JlX2F1ZGlvX3VuaW5pdGlhbGl6ZSAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgYnVmZmVyX2xpc3RfZnJlZSAoY29yZV9hdWRpby0+cmVjQnVmZmVyTGlzdCk7Ci0gIGNvcmVfYXVkaW8tPnJlY0J1ZmZlckxpc3QgPSBOVUxMOwotfQotCi12b2lkCi1nc3RfY29yZV9hdWRpb19zZXRfdm9sdW1lIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLCBnZmxvYXQgdm9sdW1lKQotewotICBBdWRpb1VuaXRTZXRQYXJhbWV0ZXIgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwga0hBTE91dHB1dFBhcmFtX1ZvbHVtZSwKLSAgICAgIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsIChmbG9hdCkgdm9sdW1lLCAwKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX3NlbGVjdF9kZXZpY2UgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pCi17Ci0gIHJldHVybiBnc3RfY29yZV9hdWRpb19zZWxlY3RfZGV2aWNlX2ltcGwgKGNvcmVfYXVkaW8pOwotfQotCi12b2lkCi1nc3RfY29yZV9hdWRpb19pbml0X2RlYnVnICh2b2lkKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAob3N4X2F1ZGlvX2RlYnVnLCAib3N4YXVkaW8iLCAwLAotICAgICAgIk9TWCBBdWRpbyBFbGVtZW50cyIpOwotfQotCi1nYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fYXVkaW9fZGV2aWNlX2lzX3NwZGlmX2F2YWlsIChBdWRpb0RldmljZUlEIGRldmljZV9pZCkKLXsKLSAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX2F1ZGlvX2RldmljZV9pc19zcGRpZl9hdmFpbF9pbXBsIChkZXZpY2VfaWQpOwotfQotCi0vKiBEb2VzIHRoZSBjaGFubmVsIGhhdmUgYXQgbGVhc3Qgb25lIHBvc2l0aW9uZWQgY2hhbm5lbD8KLSAqIChHU3RyZWFtZXIgaXMgbW9yZSBzdHJpY3QgdGhhbiBDb3JlIEF1ZGlvLCBpbiB0aGF0IGl0IHJlcXVpcmVzIGVpdGhlcgotICogYWxsIGNoYW5uZWxzIHRvIGJlIHBvc2l0aW9uZWQsIG9yIGFsbCB1bnBvc2l0aW9uZWQuKSAqLwotc3RhdGljIGdib29sZWFuCi1faXNfY29yZV9hdWRpb19sYXlvdXRfcG9zaXRpb25lZCAoQXVkaW9DaGFubmVsTGF5b3V0ICogbGF5b3V0KQotewotICBndWludCBpOwotCi0gIGdfYXNzZXJ0IChsYXlvdXQtPm1DaGFubmVsTGF5b3V0VGFnID09Ci0gICAgICBrQXVkaW9DaGFubmVsTGF5b3V0VGFnX1VzZUNoYW5uZWxEZXNjcmlwdGlvbnMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBsYXlvdXQtPm1OdW1iZXJDaGFubmVsRGVzY3JpcHRpb25zOyArK2kpIHsKLSAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwID0KLSAgICAgICAgZ3N0X2NvcmVfYXVkaW9fY2hhbm5lbF9sYWJlbF90b19nc3QKLSAgICAgICAgKGxheW91dC0+bUNoYW5uZWxEZXNjcmlwdGlvbnNbaV0ubUNoYW5uZWxMYWJlbCwgaSwgRkFMU0UpOwotCi0gICAgaWYgKHAgPj0gMCkgICAgICAgICAgICAgICAgIC8qIG5vdCBzcGVjaWFsIHBvc2l0aXRpb24gKi8KLSAgICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotX2NvcmVfYXVkaW9fcGFyc2VfY2hhbm5lbF9kZXNjcmlwdGlvbnMgKEF1ZGlvQ2hhbm5lbExheW91dCAqIGxheW91dCwKLSAgICBndWludCAqIGNoYW5uZWxzLCBndWludDY0ICogY2hhbm5lbF9tYXNrLCBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqIHBvcykKLXsKLSAgZ2Jvb2xlYW4gcG9zaXRpb25lZDsKLSAgZ3VpbnQgaTsKLQotICBnX2Fzc2VydCAobGF5b3V0LT5tQ2hhbm5lbExheW91dFRhZyA9PQotICAgICAga0F1ZGlvQ2hhbm5lbExheW91dFRhZ19Vc2VDaGFubmVsRGVzY3JpcHRpb25zKTsKLQotICBwb3NpdGlvbmVkID0gX2lzX2NvcmVfYXVkaW9fbGF5b3V0X3Bvc2l0aW9uZWQgKGxheW91dCk7Ci0gICpjaGFubmVsX21hc2sgPSAwOwotCi0gIC8qIEdvIG92ZXIgYWxsIGxhYmVscywgZWl0aGVyIHRha2luZyBvbmx5IHBvc2l0aW9uZWQgb3Igb25seQotICAgKiB1bnBvc2l0aW9uZWQgY2hhbm5lbHMsIHVwIHRvIEdTVF9PU1hfQVVESU9fTUFYX0NIQU5ORUwgY2hhbm5lbHMuCi0gICAqCi0gICAqIFRoZSByZXN1bHRpbmcgJ3BvcycgYXJyYXkgd2lsbCBjb250YWluIGVpdGhlcjoKLSAgICogIC0gb25seSByZWd1bGFyICg+PSAwKSBwb3NpdGlvbnMKLSAgICogIC0gb25seSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FIHBvc2l0aW9ucwotICAgKiBpbiBhIGNvbXBhY3QgZm9ybSwgc2tpcHBpbmcgb3ZlciBhbGwgdW5zdXBwb3J0ZWQgcG9zaXRpb25zLgotICAgKi8KLSAgKmNoYW5uZWxzID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IGxheW91dC0+bU51bWJlckNoYW5uZWxEZXNjcmlwdGlvbnM7ICsraSkgewotICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHAgPQotICAgICAgICBnc3RfY29yZV9hdWRpb19jaGFubmVsX2xhYmVsX3RvX2dzdAotICAgICAgICAobGF5b3V0LT5tQ2hhbm5lbERlc2NyaXB0aW9uc1tpXS5tQ2hhbm5lbExhYmVsLCBpLCBUUlVFKTsKLQotICAgIC8qIEluIHBvc2l0aW9uZWQgbGF5b3V0cywgc2tpcCBhbGwgdW5wb3NpdGlvbmVkIGNoYW5uZWxzLgotICAgICAqIEluIHVucG9zaXRpb25lZCBsYXlvdXRzLCBza2lwIGFsbCBpbnZhbGlkIGNoYW5uZWxzLiAqLwotICAgIGlmICgocG9zaXRpb25lZCAmJiBwID49IDApIHx8Ci0gICAgICAgICghcG9zaXRpb25lZCAmJiBwID09IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkUpKSB7Ci0KLSAgICAgIGlmIChwb3MpCi0gICAgICAgIHBvc1sqY2hhbm5lbHNdID0gcDsKLSAgICAgICpjaGFubmVsX21hc2sgfD0gR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCBwOwotICAgICAgKysoKmNoYW5uZWxzKTsKLQotICAgICAgaWYgKCpjaGFubmVscyA9PSBHU1RfT1NYX0FVRElPX01BWF9DSEFOTkVMKQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBub3QgdG8gb3ZlcmZsb3cgKi8KLSAgICB9Ci0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX3BhcnNlX2NoYW5uZWxfbGF5b3V0IChBdWRpb0NoYW5uZWxMYXlvdXQgKiBsYXlvdXQsCi0gICAgZ3VpbnQgKiBjaGFubmVscywgZ3VpbnQ2NCAqIGNoYW5uZWxfbWFzaywgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gKiBwb3MpCi17Ci0gIGdfYXNzZXJ0IChjaGFubmVscyAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGNoYW5uZWxfbWFzayAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGxheW91dCAhPSBOVUxMKTsKLQotICBpZiAobGF5b3V0LT5tQ2hhbm5lbExheW91dFRhZyAhPQotICAgICAga0F1ZGlvQ2hhbm5lbExheW91dFRhZ19Vc2VDaGFubmVsRGVzY3JpcHRpb25zKSB7Ci0gICAgR1NUX0VSUk9SCi0gICAgICAgICgiT25seSBrQXVkaW9DaGFubmVsTGF5b3V0VGFnX1VzZUNoYW5uZWxEZXNjcmlwdGlvbnMgaXMgc3VwcG9ydGVkLiIpOwotICAgICpjaGFubmVscyA9IDA7Ci0gICAgKmNoYW5uZWxfbWFzayA9IDA7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgc3dpdGNoIChsYXlvdXQtPm1OdW1iZXJDaGFubmVsRGVzY3JpcHRpb25zKSB7Ci0gICAgY2FzZSAwOgotICAgICAgaWYgKHBvcykKLSAgICAgICAgcG9zWzBdID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORTsKLSAgICAgICpjaGFubmVscyA9IDA7Ci0gICAgICAqY2hhbm5lbF9tYXNrID0gMDsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgMToKLSAgICAgIGlmIChwb3MpCi0gICAgICAgIHBvc1swXSA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX01PTk87Ci0gICAgICAqY2hhbm5lbHMgPSAxOwotICAgICAgKmNoYW5uZWxfbWFzayA9IDA7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICBjYXNlIDI6Ci0gICAgICBpZiAocG9zKSB7Ci0gICAgICAgIHBvc1swXSA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ7Ci0gICAgICAgIHBvc1sxXSA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUOwotICAgICAgfQotICAgICAgKmNoYW5uZWxzID0gMjsKLSAgICAgICpjaGFubmVsX21hc2sgPQotICAgICAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX01BU0sgKEZST05UX0xFRlQpIHwKLSAgICAgICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NQVNLIChGUk9OVF9SSUdIVCk7Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICBkZWZhdWx0OgotICAgICAgX2NvcmVfYXVkaW9fcGFyc2VfY2hhbm5lbF9kZXNjcmlwdGlvbnMgKGxheW91dCwgY2hhbm5lbHMsIGNoYW5uZWxfbWFzaywKLSAgICAgICAgICBwb3MpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gIH0KLX0KLQotLyogQ29udmVydHMgYW4gQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHRvIHByZWZlcnJlZCBjYXBzLgotICoKLSAqIFRoZXNlIGNhcHMgd2lsbCBpbmRpY2F0ZSB0aGUgQVUgZWxlbWVudCdzIGNhbm9uaWNhbCBmb3JtYXQsIHdoaWNoIHdvbid0Ci0gKiBtYWtlIENvcmUgQXVkaW8gcmVzYW1wbGUgbm9yIGNvbnZlcnQuCi0gKgotICogTk9URSBPTiBNVUxUSS1DSEFOTkVMIEFVRElPOgotICoKLSAqIElmIGxheW91dCBpcyBub3QgTlVMTCwgcmVzdWx0aW5nIGNhcHMgd2lsbCBvbmx5IGluY2x1ZGUgdGhlIHN1YnNldAotICogb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IEdTdHJlYW1lci4gSWYgdGhlIENvcmUgQXVkaW8gbGF5b3V0IGNvbnRhaW5lZAotICogQU5ZIHBvc2l0aW9uZWQgY2hhbm5lbHMsIHRoZW4gT05MWSBwb3NpdGlvbmVkIGNoYW5uZWxzIHdpbGwgYmUgaW5jbHVkZWQKLSAqIGluIHRoZSByZXN1bHRpbmcgY2Fwcy4gT3RoZXJ3aXNlLCByZXN1bHRpbmcgY2FwcyB3aWxsIGJlIHVucG9zaXRpb25lZCwKLSAqIGFuZCBpbmNsdWRlIG9ubHkgdW5wb3NpdGlvbmVkIGNoYW5uZWxzLgotICogKENoYW5uZWxzIHdpdGggdW5zdXBwb3J0ZWQgQXVkaW9DaGFubmVsTGFiZWwgd2lsbCBiZSBza2lwcGVkIGVpdGhlciB3YXkuKQotICoKLSAqIE5hdHVyYWxseSwgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbmRpY2F0ZWQgYnkgJ2NoYW5uZWxzJyBjYW4gYmUgbG93ZXIKLSAqIHRoYW4gdGhlIEFVIGVsZW1lbnQncyB0b3RhbCBudW1iZXIgb2YgY2hhbm5lbHMuCi0gKi8KLUdzdENhcHMgKgotZ3N0X2NvcmVfYXVkaW9fYXNiZF90b19jYXBzIChBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKiBhc2JkLAotICAgIEF1ZGlvQ2hhbm5lbExheW91dCAqIGxheW91dCkKLXsKLSAgR3N0QXVkaW9JbmZvIGluZm87Ci0gIEdzdEF1ZGlvRm9ybWF0IGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfVU5LTk9XTjsKLSAgZ3VpbnQgcmF0ZSwgY2hhbm5lbHMsIGJwcywgZW5kaWFubmVzczsKLSAgZ3VpbnQ2NCBjaGFubmVsX21hc2s7Ci0gIGdib29sZWFuIHNpZ24sIGludGVybGVhdmVkOwotCi0gIGlmIChhc2JkLT5tRm9ybWF0SUQgIT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJPbmx5IGxpbmVhciBQQ00gaXMgc3VwcG9ydGVkIik7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCi0gIGlmICghKGFzYmQtPm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc1BhY2tlZCkpIHsKLSAgICBHU1RfV0FSTklORyAoIk9ubHkgcGFja2VkIGZvcm1hdHMgc3VwcG9ydGVkIik7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCi0gIGlmIChhc2JkLT5tRm9ybWF0RmxhZ3MgJiBrTGluZWFyUENNRm9ybWF0RmxhZ3NTYW1wbGVGcmFjdGlvbk1hc2spIHsKLSAgICBHU1RfV0FSTklORyAoIkZpeGVkIHBvaW50IGF1ZGlvIGlzIHVuc3VwcG9ydGVkIik7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCi0gIHJhdGUgPSBhc2JkLT5tU2FtcGxlUmF0ZTsKLSAgaWYgKHJhdGUgPT0ga0F1ZGlvU3RyZWFtQW55UmF0ZSkgewotICAgIEdTVF9XQVJOSU5HICgiTm8gc2FtcGxlIHJhdGUiKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci0KLSAgYnBzID0gYXNiZC0+bUJpdHNQZXJDaGFubmVsOwotICBlbmRpYW5uZXNzID0gYXNiZC0+bUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzQmlnRW5kaWFuID8KLSAgICAgIEdfQklHX0VORElBTiA6IEdfTElUVExFX0VORElBTjsKLSAgc2lnbiA9IGFzYmQtPm1Gb3JtYXRJRCAmIGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXIgPyBUUlVFIDogRkFMU0U7Ci0gIGludGVybGVhdmVkID0gYXNiZC0+bUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQgPwotICAgICAgVFJVRSA6IEZBTFNFOwotCi0gIGlmIChhc2JkLT5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdCkgewotICAgIGlmIChicHMgPT0gMzIpIHsKLSAgICAgIGlmIChlbmRpYW5uZXNzID09IEdfTElUVExFX0VORElBTikKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9GMzJMRTsKLSAgICAgIGVsc2UKLSAgICAgICAgZm9ybWF0ID0gR1NUX0FVRElPX0ZPUk1BVF9GMzJCRTsKLQotICAgIH0gZWxzZSBpZiAoYnBzID09IDY0KSB7Ci0gICAgICBpZiAoZW5kaWFubmVzcyA9PSBHX0xJVFRMRV9FTkRJQU4pCi0gICAgICAgIGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfRjY0TEU7Ci0gICAgICBlbHNlCi0gICAgICAgIGZvcm1hdCA9IEdTVF9BVURJT19GT1JNQVRfRjY0QkU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGZvcm1hdCA9IGdzdF9hdWRpb19mb3JtYXRfYnVpbGRfaW50ZWdlciAoc2lnbiwgZW5kaWFubmVzcywgYnBzLCBicHMpOwotICB9Ci0KLSAgaWYgKGZvcm1hdCA9PSBHU1RfQVVESU9fRk9STUFUX1VOS05PV04pIHsKLSAgICBHU1RfV0FSTklORyAoIlVuc3VwcG9ydGVkIHNhbXBsZSBmb3JtYXQiKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci0KLSAgaWYgKGxheW91dCkgewotICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc1tHU1RfT1NYX0FVRElPX01BWF9DSEFOTkVMXTsKLQotICAgIGlmICghZ3N0X2NvcmVfYXVkaW9fcGFyc2VfY2hhbm5lbF9sYXlvdXQgKGxheW91dCwgJmNoYW5uZWxzLCAmY2hhbm5lbF9tYXNrLAotICAgICAgICAgICAgcG9zKSkgewotICAgICAgR1NUX1dBUk5JTkcgKCJGYWlsZWQgdG8gcGFyc2UgY2hhbm5lbCBsYXlvdXQiKTsKLSAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotCi0gICAgLyogVGhlIEFVIGNhbiBoYXZlIGFyYml0cmFyeSBjaGFubmVsIG9yZGVyLCBidXQgd2UncmUgdXNpbmcgR3N0QXVkaW9JbmZvCi0gICAgICogd2hpY2ggc3VwcG9ydHMgb25seSB0aGUgR1N0cmVhbWVyIGNoYW5uZWwgb3JkZXIuCi0gICAgICogQWxzbywgd2UncmUgZXZlbnR1YWxseSBwcm9kdWNpbmcgY2Fwcywgd2hpY2ggb25seSBoYXZlIGNoYW5uZWwtbWFzawotICAgICAqICh3aG9zZSBpbXBsaWVkIG9yZGVyIGlzIHRoZSBHU3RyZWFtZXIgY2hhbm5lbCBvcmRlcikuICovCi0gICAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX3ZhbGlkX29yZGVyIChwb3MsIGNoYW5uZWxzKTsKLQotICAgIGdzdF9hdWRpb19pbmZvX3NldF9mb3JtYXQgKCZpbmZvLCBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzLCBwb3MpOwotICB9IGVsc2UgewotICAgIGNoYW5uZWxzID0gTUlOIChhc2JkLT5tQ2hhbm5lbHNQZXJGcmFtZSwgR1NUX09TWF9BVURJT19NQVhfQ0hBTk5FTCk7Ci0gICAgZ3N0X2F1ZGlvX2luZm9fc2V0X2Zvcm1hdCAoJmluZm8sIGZvcm1hdCwgcmF0ZSwgY2hhbm5lbHMsIE5VTEwpOwotICB9Ci0KLSAgcmV0dXJuIGdzdF9hdWRpb19pbmZvX3RvX2NhcHMgKCZpbmZvKTsKLQotZXJyb3I6Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9jb3JlX2F1ZGlvX2dldF9wcm9wZXJ0eSAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywgZ2Jvb2xlYW4gb3V0ZXIsCi0gICAgQXVkaW9Vbml0UHJvcGVydHlJRCBpbklELCB2b2lkICppbkRhdGEsIFVJbnQzMiAqIGluRGF0YVNpemUpCi17Ci0gIE9TU3RhdHVzIHN0YXR1czsKLSAgQXVkaW9Vbml0U2NvcGUgc2NvcGU7Ci0gIEF1ZGlvVW5pdEVsZW1lbnQgZWxlbWVudDsKLQotICBzY29wZSA9IG91dGVyID8KLSAgICAgIENPUkVfQVVESU9fT1VURVJfU0NPUEUgKGNvcmVfYXVkaW8pIDogQ09SRV9BVURJT19JTk5FUl9TQ09QRSAoY29yZV9hdWRpbyk7Ci0gIGVsZW1lbnQgPSBDT1JFX0FVRElPX0VMRU1FTlQgKGNvcmVfYXVkaW8pOwotCi0gIHN0YXR1cyA9Ci0gICAgICBBdWRpb1VuaXRHZXRQcm9wZXJ0eSAoY29yZV9hdWRpby0+YXVkaW91bml0LCBpbklELCBzY29wZSwgZWxlbWVudCwgaW5EYXRhLAotICAgICAgaW5EYXRhU2l6ZSk7Ci0KLSAgcmV0dXJuIHN0YXR1cyA9PSBub0VycjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fY29yZV9hdWRpb19nZXRfc3RyZWFtX2Zvcm1hdCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywKLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKiBhc2JkLCBnYm9vbGVhbiBvdXRlcikKLXsKLSAgVUludDMyIHNpemU7Ci0KLSAgc2l6ZSA9IHNpemVvZiAoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKTsKLSAgcmV0dXJuIF9jb3JlX2F1ZGlvX2dldF9wcm9wZXJ0eSAoY29yZV9hdWRpbywgb3V0ZXIsCi0gICAgICBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBhc2JkLCAmc2l6ZSk7Ci19Ci0KLUF1ZGlvQ2hhbm5lbExheW91dCAqCi1nc3RfY29yZV9hdWRpb19nZXRfY2hhbm5lbF9sYXlvdXQgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8sIGdib29sZWFuIG91dGVyKQotewotICBVSW50MzIgc2l6ZTsKLSAgQXVkaW9DaGFubmVsTGF5b3V0ICpsYXlvdXQ7Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPmlzX3NyYykgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpbywKLSAgICAgICAgImdzdF9jb3JlX2F1ZGlvX2dldF9jaGFubmVsX2xheW91dCBub3Qgc3VwcG9ydGVkIG9uIHNvdXJjZS4iKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGlmICghX2NvcmVfYXVkaW9fZ2V0X3Byb3BlcnR5IChjb3JlX2F1ZGlvLCBvdXRlciwKLSAgICAgICAgICBrQXVkaW9Vbml0UHJvcGVydHlfQXVkaW9DaGFubmVsTGF5b3V0LCBOVUxMLCAmc2l6ZSkpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvcmVfYXVkaW8sICJ1bmFibGUgdG8gZ2V0IGNoYW5uZWwgbGF5b3V0Iik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBsYXlvdXQgPSBnX21hbGxvYyAoc2l6ZSk7Ci0gIGlmICghX2NvcmVfYXVkaW9fZ2V0X3Byb3BlcnR5IChjb3JlX2F1ZGlvLCBvdXRlciwKLSAgICAgICAgICBrQXVkaW9Vbml0UHJvcGVydHlfQXVkaW9DaGFubmVsTGF5b3V0LCBsYXlvdXQsICZzaXplKSkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpbywgInVuYWJsZSB0byBnZXQgY2hhbm5lbCBsYXlvdXQiKTsKLSAgICBnX2ZyZWUgKGxheW91dCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gbGF5b3V0OwotfQotCi0jZGVmaW5lIFNURVJFT19DSEFOTkVMX01BU0sgXAotICAoR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTUFTSyAoRlJPTlRfTEVGVCkgfCBcCi0gICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NQVNLIChGUk9OVF9SSUdIVCkpCi0KLUdzdENhcHMgKgotZ3N0X2NvcmVfYXVkaW9fcHJvYmVfY2FwcyAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywgR3N0Q2FwcyAqIGluX2NhcHMpCi17Ci0gIGd1aW50IGksIGNoYW5uZWxzOwotICBnYm9vbGVhbiBzcGRpZl9hbGxvd2VkOwotICBBdWRpb0NoYW5uZWxMYXlvdXQgKmxheW91dDsKLSAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG91dGVyX2FzYmQ7Ci0gIGdib29sZWFuIGdvdF9vdXRlcl9hc2JkOwotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgZ3VpbnQ2NCBjaGFubmVsX21hc2s7Ci0KLSAgLyogR2V0IHRoZSBBU0JEIG9mIHRoZSBvdXRlciBzY29wZSAoaS5lLiBpbnB1dCBzY29wZSBvZiBJbnB1dCwKLSAgICogb3V0cHV0IHNjb3BlIG9mIE91dHB1dCkuCi0gICAqIFRoaXMgQVNCRCBpbmRpY2F0ZXMgdGhlIGhhcmR3YXJlIGZvcm1hdC4gKi8KLSAgZ290X291dGVyX2FzYmQgPQotICAgICAgX2NvcmVfYXVkaW9fZ2V0X3N0cmVhbV9mb3JtYXQgKGNvcmVfYXVkaW8sICZvdXRlcl9hc2JkLCBUUlVFKTsKLQotICAvKiBDb2xsZWN0IGluZm8gYWJvdXQgdGhlIEhXIGNhcGFiaWxpdGVzIGFuZCBwcmVmZXJlbmNlcyAqLwotICBzcGRpZl9hbGxvd2VkID0KLSAgICAgIGdzdF9jb3JlX2F1ZGlvX2F1ZGlvX2RldmljZV9pc19zcGRpZl9hdmFpbCAoY29yZV9hdWRpby0+ZGV2aWNlX2lkKTsKLSAgaWYgKCFjb3JlX2F1ZGlvLT5pc19zcmMpCi0gICAgbGF5b3V0ID0gZ3N0X2NvcmVfYXVkaW9fZ2V0X2NoYW5uZWxfbGF5b3V0IChjb3JlX2F1ZGlvLCBUUlVFKTsKLSAgZWxzZQotICAgIGxheW91dCA9IE5VTEw7ICAgICAgICAgICAgICAvKiBubyBzdXBwb3J0ZWQgZm9yIHNvdXJjZXMgKi8KLQotICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLCAiU2VsZWN0ZWQgZGV2aWNlIElEOiAldSBTUERJRiBhbGxvd2VkOiAlZCIsCi0gICAgICAodW5zaWduZWQpIGNvcmVfYXVkaW8tPmRldmljZV9pZCwgc3BkaWZfYWxsb3dlZCk7Ci0KLSAgaWYgKGxheW91dCkgewotICAgIGlmICghZ3N0X2NvcmVfYXVkaW9fcGFyc2VfY2hhbm5lbF9sYXlvdXQgKGxheW91dCwgJmNoYW5uZWxzLCAmY2hhbm5lbF9tYXNrLAotICAgICAgICAgICAgTlVMTCkpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpbywgIkZhaWxlZCB0byBwYXJzZSBjaGFubmVsIGxheW91dCIpOwotICAgICAgY2hhbm5lbF9tYXNrID0gMDsKLSAgICB9Ci0KLSAgICAvKiBJZiBhdmFpbGFibGUsIHN0YXJ0IHdpdGggdGhlIHByZWZlcnJlZCBjYXBzLiAqLwotICAgIGlmIChnb3Rfb3V0ZXJfYXNiZCkKLSAgICAgIGNhcHMgPSBnc3RfY29yZV9hdWRpb19hc2JkX3RvX2NhcHMgKCZvdXRlcl9hc2JkLCBsYXlvdXQpOwotCi0gICAgZ19mcmVlIChsYXlvdXQpOwotICB9IGVsc2UgaWYgKGdvdF9vdXRlcl9hc2JkKSB7Ci0gICAgY2hhbm5lbHMgPSBvdXRlcl9hc2JkLm1DaGFubmVsc1BlckZyYW1lOwotICAgIGNoYW5uZWxfbWFzayA9IDA7Ci0gICAgLyogSWYgYXZhaWxhYmxlLCBzdGFydCB3aXRoIHRoZSBwcmVmZXJyZWQgY2FwcyAqLwotICAgIGNhcHMgPSBnc3RfY29yZV9hdWRpb19hc2JkX3RvX2NhcHMgKCZvdXRlcl9hc2JkLCBOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb3JlX2F1ZGlvLAotICAgICAgICAiVW5hYmxlIHRvIGdldCBhbnkgaW5mb3JtYXRpb24gYWJvdXQgaGFyZHdhcmUiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8qIEFwcGVuZCB0aGUgYWxsb3dlZCBzdWJzZXQgYmFzZWQgb24gdGhlIHRlbXBsYXRlIGNhcHMgICovCi0gIGlmICghY2FwcykKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGluX2NhcHMpOyBpKyspIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKmluX3M7Ci0KLSAgICBpbl9zID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoaW5fY2FwcywgaSk7Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoaW5fcywgImF1ZGlvL3gtYWMzIikgfHwKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAoaW5fcywgImF1ZGlvL3gtZHRzIikpIHsKLSAgICAgIGlmIChzcGRpZl9hbGxvd2VkKSB7Ci0gICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMsIGdzdF9zdHJ1Y3R1cmVfY29weSAoaW5fcykpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBHc3RTdHJ1Y3R1cmUgKm91dF9zOwotCi0gICAgICBvdXRfcyA9IGdzdF9zdHJ1Y3R1cmVfY29weSAoaW5fcyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAob3V0X3MsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIGNoYW5uZWxzLCBOVUxMKTsKLSAgICAgIGlmIChjaGFubmVsX21hc2sgIT0gMCkgewotICAgICAgICAvKiBwb3NpdGlvbmVkIGxheW91dCAqLwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAob3V0X3MsCi0gICAgICAgICAgICAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgY2hhbm5lbF9tYXNrLCBOVUxMKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIHVucG9zaXRpb25lZCBsYXlvdXQgKi8KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKG91dF9zLCAiY2hhbm5lbC1tYXNrIik7Ci0gICAgICB9Ci0KLSNpZm5kZWYgSEFWRV9JT1MKLSAgICAgIGlmIChjb3JlX2F1ZGlvLT5pc19zcmMgJiYgZ290X291dGVyX2FzYmQKLSAgICAgICAgICAmJiBvdXRlcl9hc2JkLm1TYW1wbGVSYXRlICE9IGtBdWRpb1N0cmVhbUFueVJhdGUpIHsKLSAgICAgICAgLyogQWNjb3JkaW5nIHRvIENvcmUgQXVkaW8gZW5naW5lZXIsIEFVSEFMIGRvZXMgbm90IHN1cHBvcnQgc2FtcGxlIHJhdGUgY29udmVyc2lvbi4KLSAgICAgICAgICogb24gc291cmNlcy4gVGhlcmVmb3JlLCB3ZSBmaXhhdGUgdGhlIHNhbXBsZSByYXRlLgotICAgICAgICAgKgotICAgICAgICAgKiAiWW91IGRlZmluaXRlbHkgY2Fubm90IGRvIHJhdGUgY29udmVyc2lvbiBhcyBwYXJ0IG9mIGdldHRpbmcgaW5wdXQgZnJvbSBBVUhBTC4KLSAgICAgICAgICogIFRoYXQncyB0aGUgbW9zdCBjb21tb24gY2F1c2Ugb2YgdGhvc2UgImNhbm5vdCBkbyBpbiBjdXJyZW50IGNvbnRleHQiIGVycm9ycy4iCi0gICAgICAgICAqIGh0dHA6Ly9saXN0cy5hcHBsZS5jb20vYXJjaGl2ZXMvY29yZWF1ZGlvLWFwaS8yMDA2L1NlcC9tc2cwMDA4OC5odG1sCi0gICAgICAgICAqLwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAob3V0X3MsICJyYXRlIiwgR19UWVBFX0lOVCwKLSAgICAgICAgICAgIChnaW50KSBvdXRlcl9hc2JkLm1TYW1wbGVSYXRlLCBOVUxMKTsKLSAgICAgIH0KLSNlbmRpZgotCi0gICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciB1cG1peGluZyBhbmQgZG93bm1peGluZy4KLSAgICAgICAqIE90aGVyIHRoYW4gdGhhdCwgdGhlIEFVcyBkb24ndCB1cG1peCBvciBkb3dubWl4IG11bHRpLWNoYW5uZWwgYXVkaW8sCi0gICAgICAgKiBlLmcuIGlmIHlvdSBwdXNoIDUuMS1zdXJyb3VuZCBhdWRpbyB0byBhIHN0ZXJlbyBjb25maWd1cmF0aW9uLAotICAgICAgICogdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIHdpbGwgYmUgcGxheWVkIGFjY29yZGluZ2x5LAotICAgICAgICogYW5kIHRoZSByZXN0IHdpbGwgYmUgZHJvcHBlZC4gKi8KLQotICAgICAgaWYgKGNoYW5uZWxzID09IDEgfHwgKGNoYW5uZWxzID09IDIgJiYKLSAgICAgICAgICAgICAgKGNoYW5uZWxfbWFzayA9PSAwIHx8IGNoYW5uZWxfbWFzayA9PSBTVEVSRU9fQ0hBTk5FTF9NQVNLKSkpIHsKLQotICAgICAgICAvKiBJZiBoYXZlIHN0ZXJlbyBjaGFubmVscywgdGhlbiBhbHNvIG9mZmVyIG1vbm8gc2luY2UgQ29yZUF1ZGlvCi0gICAgICAgICAqIHVwbWl4ZXMgaXQuIElmIG1vbm8sIHRoZW4gYWxzbyBvZmZlciBzdGVyZW8gc2luY2UgQ29yZUF1ZGlvCi0gICAgICAgICAqIGRvd25taXhlcyB0byBpdCAqLwotCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRfcywgImNoYW5uZWxzIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCAyLCBOVUxMKTsKLQotICAgICAgICBpZiAoY2hhbm5lbHMgPT0gMSkKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAob3V0X3MsICJjaGFubmVsLW1hc2siLCBHU1RfVFlQRV9CSVRNQVNLLAotICAgICAgICAgICAgICBTVEVSRU9fQ0hBTk5FTF9NQVNLLCBOVUxMKTsKLSAgICAgIH0KLQotICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoY2Fwcywgb3V0X3MpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQpkaWZmIC0tZ2l0IGEvc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oIGIvc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTg4ZTNjLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgRmx1ZW5kbyBTLkEuIDxzdXBwb3J0QGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIF9fR1NUX0NPUkVfQVVESU9fSF9fCi0jZGVmaW5lIF9fR1NUX0NPUkVfQVVESU9fSF9fCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby1jaGFubmVscy5oPgotI2lmZGVmIEhBVkVfSU9TCi0gICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSAgI2RlZmluZSBBdWRpb0RldmljZUlEIGdpbnQKLSAgI2RlZmluZSBrQXVkaW9EZXZpY2VVbmtub3duIDAKLSNlbHNlCi0gICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvLmg+Ci0gICNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Ub29sYm94Lmg+Ci0gICNpZiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwNjAKLSAgICAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVTZXJ2aWNlcy5oPgotICAgICNkZWZpbmUgQXVkaW9Db21wb25lbnRGaW5kTmV4dCBGaW5kTmV4dENvbXBvbmVudAotICAgICNkZWZpbmUgQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyBPcGVuQUNvbXBvbmVudAotICAgICNkZWZpbmUgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UgQ2xvc2VDb21wb25lbnQKLSAgICAjZGVmaW5lIEF1ZGlvQ29tcG9uZW50IENvbXBvbmVudAotICAgICNkZWZpbmUgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBDb21wb25lbnREZXNjcmlwdGlvbgotICAjZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KLSNpbmNsdWRlICJnc3Rvc3hhdWRpb2VsZW1lbnQuaCIKLQotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfQ09SRV9BVURJTyBcCi0gIChnc3RfY29yZV9hdWRpb19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfQ09SRV9BVURJTyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX0NPUkVfQVVESU8sR3N0Q29yZUF1ZGlvKSkKLSNkZWZpbmUgR1NUX0NPUkVfQVVESU9fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfQ09SRV9BVURJTyxHc3RDb3JlQXVkaW9DbGFzcykpCi0jZGVmaW5lIEdTVF9DT1JFX0FVRElPX0dFVF9DTEFTUyhvYmopIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksR1NUX1RZUEVfQ09SRV9BVURJTyxHc3RDb3JlQXVkaW9DbGFzcykpCi0jZGVmaW5lIEdTVF9JU19DT1JFX0FVRElPKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfQ09SRV9BVURJTykpCi0jZGVmaW5lIEdTVF9JU19DT1JFX0FVRElPX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX0NPUkVfQVVESU8pKQotCi0vKiBUT0RPOiBDb25zaWRlciByYWlzaW5nIHRvIDY0ICovCi0jZGVmaW5lIEdTVF9PU1hfQVVESU9fTUFYX0NIQU5ORUwgKDkpCi0KLSNkZWZpbmUgQ09SRV9BVURJT19GT1JNQVRfSVNfU1BESUYoZikgKChmKS5tRm9ybWF0Lm1Gb3JtYXRJRCA9PSAnSUFDMycgfHwgKGYpLm1Gb3JtYXQubUZvcm1hdElEID09ICdpYWMzJyB8fCAoZikubUZvcm1hdC5tRm9ybWF0SUQgPT0ga0F1ZGlvRm9ybWF0NjA5NThBQzMgfHwgKGYpLm1Gb3JtYXQubUZvcm1hdElEID09IGtBdWRpb0Zvcm1hdEFDMykKLQotI2RlZmluZSBDT1JFX0FVRElPX0ZPUk1BVCAiRm9ybWF0SUQ6ICUiIEdTVF9GT1VSQ0NfRk9STUFUICIgcmF0ZTogJWYgZmxhZ3M6IDB4JXggQnl0ZXNQZXJQYWNrZXQ6ICV1IEZyYW1lc1BlclBhY2tldDogJXUgQnl0ZXNQZXJGcmFtZTogJXUgQ2hhbm5lbHNQZXJGcmFtZTogJXUgQml0c1BlckNoYW5uZWw6ICV1IgotI2RlZmluZSBDT1JFX0FVRElPX0ZPUk1BVF9BUkdTKGYpIEdTVF9GT1VSQ0NfQVJHUygodW5zaWduZWQgaW50KShmKS5tRm9ybWF0SUQpLChmKS5tU2FtcGxlUmF0ZSwodW5zaWduZWQgaW50KShmKS5tRm9ybWF0RmxhZ3MsKHVuc2lnbmVkIGludCkoZikubUJ5dGVzUGVyUGFja2V0LCh1bnNpZ25lZCBpbnQpKGYpLm1GcmFtZXNQZXJQYWNrZXQsKHVuc2lnbmVkIGludCkoZikubUJ5dGVzUGVyRnJhbWUsKHVuc2lnbmVkIGludCkoZikubUNoYW5uZWxzUGVyRnJhbWUsKHVuc2lnbmVkIGludCkoZikubUJpdHNQZXJDaGFubmVsCi0KLSNkZWZpbmUgQ09SRV9BVURJT19JTk5FUl9TQ09QRShjb3JlX2F1ZGlvKSAoKGNvcmVfYXVkaW8pLT5pc19zcmMgPyBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0IDoga0F1ZGlvVW5pdFNjb3BlX0lucHV0KQotI2RlZmluZSBDT1JFX0FVRElPX09VVEVSX1NDT1BFKGNvcmVfYXVkaW8pICgoY29yZV9hdWRpbyktPmlzX3NyYyA/IGtBdWRpb1VuaXRTY29wZV9JbnB1dCA6IGtBdWRpb1VuaXRTY29wZV9PdXRwdXQpCi0jZGVmaW5lIENPUkVfQVVESU9fRUxFTUVOVChjb3JlX2F1ZGlvKSAoKGNvcmVfYXVkaW8pLT5pc19zcmMgPyAxIDogMCkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdENvcmVBdWRpbyBHc3RDb3JlQXVkaW87Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q29yZUF1ZGlvQ2xhc3MgR3N0Q29yZUF1ZGlvQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0Q29yZUF1ZGlvCi17Ci0gIEdPYmplY3Qgb2JqZWN0OwotCi0gIEdzdE9iamVjdCAqb3N4YnVmOwotICBHc3RPc3hBdWRpb0VsZW1lbnRJbnRlcmZhY2UgKmVsZW1lbnQ7Ci0KLSAgZ2Jvb2xlYW4gaXNfc3JjOwotICBnYm9vbGVhbiBpc19wYXNzdGhyb3VnaDsKLSAgQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQ7Ci0gIGdib29sZWFuIGNhY2hlZF9jYXBzX3ZhbGlkOyAvKiB0aHJlYWQtc2FmZSBmbGFnICovCi0gIEdzdENhcHMgKmNhY2hlZF9jYXBzOwotICBnaW50IHN0cmVhbV9pZHg7Ci0gIGdib29sZWFuIGlvX3Byb2NfYWN0aXZlOwotICBnYm9vbGVhbiBpb19wcm9jX25lZWRzX2RlYWN0aXZhdGlvbjsKLQotICAvKiBGb3IgTFBDTSBpbi9vdXQgKi8KLSAgQXVkaW9Vbml0IGF1ZGlvdW5pdDsKLSAgVUludDMyIHJlY0J1ZmZlclNpemU7IC8qIEF1ZGlvVW5pdFJlbmRlciBjbG9iYmVycyBtRGF0YUJ5dGVTaXplICovCi0gIEF1ZGlvQnVmZmVyTGlzdCAqcmVjQnVmZmVyTGlzdDsKLQotI2lmbmRlZiBIQVZFX0lPUwotICAvKiBGb3IgU1BESUYgb3V0ICovCi0gIHBpZF90IGhvZ19waWQ7Ci0gIGdib29sZWFuIGRpc2FibGVkX21peGluZzsKLSAgQXVkaW9TdHJlYW1JRCBzdHJlYW1faWQ7Ci0gIGdib29sZWFuIHJldmVydF9mb3JtYXQ7Ci0gIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBvcmlnaW5hbF9mb3JtYXQsIHN0cmVhbV9mb3JtYXQ7Ci0gIEF1ZGlvRGV2aWNlSU9Qcm9jSUQgcHJvY0lEOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgX0dzdENvcmVBdWRpb0NsYXNzCi17Ci0gIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfY29yZV9hdWRpb19nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwotCi12b2lkIGdzdF9jb3JlX2F1ZGlvX2luaXRfZGVidWcgKHZvaWQpOwotCi1Hc3RDb3JlQXVkaW8gKiBnc3RfY29yZV9hdWRpb19uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdzdE9iamVjdCAqb3N4YnVmKTsKLQotZ2Jvb2xlYW4gZ3N0X2NvcmVfYXVkaW9fb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHc3RDb3JlQXVkaW8gKmNvcmVfYXVkaW8pOwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqY29yZV9hdWRpbyk7Ci0KLWdib29sZWFuIGdzdF9jb3JlX2F1ZGlvX2luaXRpYWxpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3N0Q29yZUF1ZGlvICpjb3JlX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICpjYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpc19wYXNzdGhyb3VnaCk7Ci0KLXZvaWQgZ3N0X2NvcmVfYXVkaW9fdW5pbml0aWFsaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3N0Q29yZUF1ZGlvICpjb3JlX2F1ZGlvKTsKLQotZ2Jvb2xlYW4gZ3N0X2NvcmVfYXVkaW9fc3RhcnRfcHJvY2Vzc2luZyAgICAgICAgICAgICAgICAgICAgIChHc3RDb3JlQXVkaW8gKmNvcmVfYXVkaW8pOwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19wYXVzZV9wcm9jZXNzaW5nICAgICAgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqY29yZV9hdWRpbyk7Ci0KLWdib29sZWFuIGdzdF9jb3JlX2F1ZGlvX3N0b3BfcHJvY2Vzc2luZyAgICAgICAgICAgICAgICAgICAgICAoR3N0Q29yZUF1ZGlvICpjb3JlX2F1ZGlvKTsKLQotZ2Jvb2xlYW4gZ3N0X2NvcmVfYXVkaW9fZ2V0X3NhbXBsZXNfYW5kX2xhdGVuY3kgICAgICAgICAgICAgIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICpzYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlICpsYXRlbmN5KTsKLQotdm9pZCAgZ3N0X2NvcmVfYXVkaW9fc2V0X3ZvbHVtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHc3RDb3JlQXVkaW8gKmNvcmVfYXVkaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmbG9hdCB2b2x1bWUpOwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19hdWRpb19kZXZpY2VfaXNfc3BkaWZfYXZhaWwgICAgICAgICAgKEF1ZGlvRGV2aWNlSUQgZGV2aWNlX2lkKTsKLQotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19zZWxlY3RfZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pOwotCi1Hc3RDYXBzICoKLWdzdF9jb3JlX2F1ZGlvX3Byb2JlX2NhcHMgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8sIEdzdENhcHMgKiBpbl9jYXBzKTsKLQotQXVkaW9DaGFubmVsTGF5b3V0ICoKLWdzdF9jb3JlX2F1ZGlvX2dldF9jaGFubmVsX2xheW91dCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywgZ2Jvb2xlYW4gb3V0ZXIpOwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19wYXJzZV9jaGFubmVsX2xheW91dCAoQXVkaW9DaGFubmVsTGF5b3V0ICogbGF5b3V0LAotICAgIGd1aW50ICogY2hhbm5lbHMsIGd1aW50NjQgKiBjaGFubmVsX21hc2ssIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICogcG9zKTsKLUdzdENhcHMgKiBnc3RfY29yZV9hdWRpb19hc2JkX3RvX2NhcHMgKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqIGFzYmQsCi0gICAgQXVkaW9DaGFubmVsTGF5b3V0ICogbGF5b3V0KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX0NPUkVfQVVESU9fSF9fICovCmRpZmYgLS1naXQgYS9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmMgYi9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZDAzYWMuLjAwMDAwMDAKLS0tIGEvc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2NvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUyICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIEZsdWVuZG8gUy5BLiA8c3VwcG9ydEBmbHVlbmRvLmNvbT4KLSAqICAgQXV0aG9yczogSm9zZXAgVG9ycmEgVmFsbMOocyA8am9zZXBAZmx1ZW5kby5jb20+Ci0gKiAgICAgICAgICAgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJnc3Rvc3hjb3JlYXVkaW9jb21tb24uaCIKLQotdm9pZAotZ3N0X2NvcmVfYXVkaW9fcmVtb3ZlX3JlbmRlcl9jYWxsYmFjayAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgQVVSZW5kZXJDYWxsYmFja1N0cnVjdCBpbnB1dDsKLSAgT1NTdGF0dXMgc3RhdHVzOwotCi0gIC8qIERlYWN0aXZhdGUgdGhlIHJlbmRlciBjYWxsYmFjayBieSBjYWxsaW5nIFNldFJlbmRlckNhbGxiYWNrCi0gICAqIHdpdGggYSBOVUxMIGlucHV0UHJvYy4KLSAgICovCi0gIGlucHV0LmlucHV0UHJvYyA9IE5VTEw7Ci0gIGlucHV0LmlucHV0UHJvY1JlZkNvbiA9IE5VTEw7Ci0KLSAgc3RhdHVzID0gQXVkaW9Vbml0U2V0UHJvcGVydHkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAgICAgICAgLyogTi9BIGZvciBnbG9iYWwgKi8KLSAgICAgICZpbnB1dCwgc2l6ZW9mIChpbnB1dCkpOwotCi0gIGlmIChzdGF0dXMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwKLSAgICAgICAgIkZhaWxlZCB0byByZW1vdmUgcmVuZGVyIGNhbGxiYWNrICVkIiwgKGludCkgc3RhdHVzKTsKLSAgfQotCi0gIC8qIFJlbW92ZSB0aGUgUmVuZGVyTm90aWZ5IHRvbyAqLwotICBzdGF0dXMgPSBBdWRpb1VuaXRSZW1vdmVSZW5kZXJOb3RpZnkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwKLSAgICAgIChBVVJlbmRlckNhbGxiYWNrKSBnc3RfY29yZV9hdWRpb19yZW5kZXJfbm90aWZ5LCBjb3JlX2F1ZGlvKTsKLQotICBpZiAoc3RhdHVzKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsCi0gICAgICAgICJGYWlsZWQgdG8gcmVtb3ZlIHJlbmRlciBub3RpZnkgY2FsbGJhY2sgJWQiLCAoaW50KSBzdGF0dXMpOwotICB9Ci0KLSAgLyogV2UncmUgZGVhY3RpdmF0ZWQuLiAqLwotICBjb3JlX2F1ZGlvLT5pb19wcm9jX25lZWRzX2RlYWN0aXZhdGlvbiA9IEZBTFNFOwotICBjb3JlX2F1ZGlvLT5pb19wcm9jX2FjdGl2ZSA9IEZBTFNFOwotfQotCi1PU1N0YXR1cwotZ3N0X2NvcmVfYXVkaW9fcmVuZGVyX25vdGlmeSAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywKLSAgICBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyAqIGlvQWN0aW9uRmxhZ3MsCi0gICAgY29uc3QgQXVkaW9UaW1lU3RhbXAgKiBpblRpbWVTdGFtcCwKLSAgICB1bnNpZ25lZCBpbnQgaW5CdXNOdW1iZXIsCi0gICAgdW5zaWduZWQgaW50IGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKiBpb0RhdGEpCi17Ci0gIC8qIEJlZm9yZSByZW5kZXJpbmcgYSBmcmFtZSwgd2UgZ2V0IHRoZSBQcmVSZW5kZXIgbm90aWZpY2F0aW9uLgotICAgKiBIZXJlLCB3ZSBkZXRhY2ggdGhlIFJlbmRlckNhbGxiYWNrIGlmIHdlJ3ZlIGJlZW4gcGF1c2VkLgotICAgKgotICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSAocmF0aGVyIHRoYW4ganVzdCBkaXJlY3RseSBkZXRhY2hpbmcgaXQpIHRvCi0gICAqIHdvcmsgYXJvdW5kIHNvbWUgdGhyZWFkLXNhZmV0eSBpc3N1ZXMgaW4gQ29yZUF1ZGlvCi0gICAqLwotICBpZiAoKCppb0FjdGlvbkZsYWdzKSAmIGtBdWRpb1VuaXRSZW5kZXJBY3Rpb25fUHJlUmVuZGVyKSB7Ci0gICAgaWYgKGNvcmVfYXVkaW8tPmlvX3Byb2NfbmVlZHNfZGVhY3RpdmF0aW9uKSB7Ci0gICAgICBnc3RfY29yZV9hdWRpb19yZW1vdmVfcmVuZGVyX2NhbGxiYWNrIChjb3JlX2F1ZGlvKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gbm9FcnI7Ci19Ci0KLWdib29sZWFuCi1nc3RfY29yZV9hdWRpb19pb19wcm9jX3N0YXJ0IChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBPU1N0YXR1cyBzdGF0dXM7Ci0gIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgaW5wdXQ7Ci0gIEF1ZGlvVW5pdFByb3BlcnR5SUQgY2FsbGJhY2tfdHlwZTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsCi0gICAgICAib3N4IHJpbmcgYnVmZmVyIHN0YXJ0IGlvcHJvYzogJXAgZGV2aWNlX2lkICVsdSIsCi0gICAgICBjb3JlX2F1ZGlvLT5lbGVtZW50LT5pb19wcm9jLCAoZ3Vsb25nKSBjb3JlX2F1ZGlvLT5kZXZpY2VfaWQpOwotICBpZiAoIWNvcmVfYXVkaW8tPmlvX3Byb2NfYWN0aXZlKSB7Ci0gICAgY2FsbGJhY2tfdHlwZSA9IGNvcmVfYXVkaW8tPmlzX3NyYyA/Ci0gICAgICAgIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9TZXRJbnB1dENhbGxiYWNrIDoKLSAgICAgICAga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrOwotCi0gICAgaW5wdXQuaW5wdXRQcm9jID0gKEFVUmVuZGVyQ2FsbGJhY2spIGNvcmVfYXVkaW8tPmVsZW1lbnQtPmlvX3Byb2M7Ci0gICAgaW5wdXQuaW5wdXRQcm9jUmVmQ29uID0gY29yZV9hdWRpby0+b3N4YnVmOwotCi0gICAgc3RhdHVzID0gQXVkaW9Vbml0U2V0UHJvcGVydHkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwgY2FsbGJhY2tfdHlwZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgICAgIC8qIE4vQSBmb3IgZ2xvYmFsICovCi0gICAgICAgICZpbnB1dCwgc2l6ZW9mIChpbnB1dCkpOwotCi0gICAgaWYgKHN0YXR1cykgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLAotICAgICAgICAgICJBdWRpb1VuaXRTZXRQcm9wZXJ0eSBmYWlsZWQ6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgLy8gIyMjIGRvZXMgaXQgbWFrZSBzZW5zZSB0byBkbyB0aGlzIG5vdGlmeSBzdHVmZiBmb3IgaW5wdXQgbW9kZT8KLSAgICBzdGF0dXMgPSBBdWRpb1VuaXRBZGRSZW5kZXJOb3RpZnkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwKLSAgICAgICAgKEFVUmVuZGVyQ2FsbGJhY2spIGdzdF9jb3JlX2F1ZGlvX3JlbmRlcl9ub3RpZnksIGNvcmVfYXVkaW8pOwotCi0gICAgaWYgKHN0YXR1cykgewotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLAotICAgICAgICAgICJBdWRpb1VuaXRBZGRSZW5kZXJOb3RpZnkgZmFpbGVkICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgY29yZV9hdWRpby0+aW9fcHJvY19hY3RpdmUgPSBUUlVFOwotICB9Ci0KLSAgY29yZV9hdWRpby0+aW9fcHJvY19uZWVkc19kZWFjdGl2YXRpb24gPSBGQUxTRTsKLQotICBzdGF0dXMgPSBBdWRpb091dHB1dFVuaXRTdGFydCAoY29yZV9hdWRpby0+YXVkaW91bml0KTsKLSAgaWYgKHN0YXR1cykgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwgIkF1ZGlvT3V0cHV0VW5pdFN0YXJ0IGZhaWxlZDogJWQiLAotICAgICAgICAoaW50KSBzdGF0dXMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX2lvX3Byb2Nfc3RvcCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgT1NFcnIgc3RhdHVzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwKLSAgICAgICJvc3ggcmluZyBidWZmZXIgc3RvcCBpb3Byb2M6ICVwIGRldmljZV9pZCAlbHUiLAotICAgICAgY29yZV9hdWRpby0+ZWxlbWVudC0+aW9fcHJvYywgKGd1bG9uZykgY29yZV9hdWRpby0+ZGV2aWNlX2lkKTsKLQotICBzdGF0dXMgPSBBdWRpb091dHB1dFVuaXRTdG9wIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsCi0gICAgICAgICJBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZDogJWQiLCAoaW50KSBzdGF0dXMpOwotICB9Ci0gIC8vICMjIzogd2h5IGlzIGl0IG9rYXkgdG8gZGlyZWN0bHkgcmVtb3ZlIGZyb20gaGVyZSBidXQgbm90IGZyb20gcGF1c2UoKSA/Ci0gIGlmIChjb3JlX2F1ZGlvLT5pb19wcm9jX2FjdGl2ZSkgewotICAgIGdzdF9jb3JlX2F1ZGlvX3JlbW92ZV9yZW5kZXJfY2FsbGJhY2sgKGNvcmVfYXVkaW8pOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1BdWRpb0J1ZmZlckxpc3QgKgotYnVmZmVyX2xpc3RfYWxsb2MgKFVJbnQzMiBjaGFubmVscywgVUludDMyIHNpemUsIGdib29sZWFuIGludGVybGVhdmVkKQotewotICBBdWRpb0J1ZmZlckxpc3QgKmxpc3Q7Ci0gIGdzaXplIGxpc3Rfc2l6ZTsKLSAgVUludDMyIG51bV9idWZmZXJzLCBuOwotCi0gIG51bV9idWZmZXJzID0gaW50ZXJsZWF2ZWQgPyAxIDogY2hhbm5lbHM7Ci0gIC8qIEF1ZGlvQnVmZmVyTGlzdCBtZW1iZXIgbUJ1ZmZlcnMgaXMgdmFyaWFibGUtbGVuZ3RoIGFycmF5ICovCi0gIGxpc3Rfc2l6ZSA9IEdfU1RSVUNUX09GRlNFVCAoQXVkaW9CdWZmZXJMaXN0LCBtQnVmZmVyc1tudW1fYnVmZmVyc10pOwotICBsaXN0ID0gKEF1ZGlvQnVmZmVyTGlzdCAqKSBnX21hbGxvYyAobGlzdF9zaXplKTsKLQotICBsaXN0LT5tTnVtYmVyQnVmZmVycyA9IG51bV9idWZmZXJzOwotICBmb3IgKG4gPSAwOyBuIDwgbnVtX2J1ZmZlcnM7ICsrbikgewotICAgIC8qIFNlZSBodHRwOi8vbGlzdHMuYXBwbGUuY29tL2FyY2hpdmVzL2NvcmVhdWRpby1hcGkvMjAxNS9GZWIvbXNnMDAwMjcuaHRtbCAqLwotICAgIGxpc3QtPm1CdWZmZXJzW25dLm1OdW1iZXJDaGFubmVscyA9IGludGVybGVhdmVkID8gY2hhbm5lbHMgOiAxOwotICAgIC8qIEF1ZGlvVW5pdFJlbmRlciB3aWxsIGtlZXAgb3ZlcndyaXRpbmcgbURhdGFCeXRlU2l6ZSAqLwotICAgIGxpc3QtPm1CdWZmZXJzW25dLm1EYXRhQnl0ZVNpemUgPSBzaXplOwotICAgIGxpc3QtPm1CdWZmZXJzW25dLm1EYXRhID0gZ19tYWxsb2MgKHNpemUpOwotICB9Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXZvaWQKLWJ1ZmZlcl9saXN0X2ZyZWUgKEF1ZGlvQnVmZmVyTGlzdCAqIGxpc3QpCi17Ci0gIFVJbnQzMiBuOwotCi0gIGlmIChsaXN0ID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIGZvciAobiA9IDA7IG4gPCBsaXN0LT5tTnVtYmVyQnVmZmVyczsgKytuKSB7Ci0gICAgZ19mcmVlIChsaXN0LT5tQnVmZmVyc1tuXS5tRGF0YSk7Ci0gIH0KLQotICBnX2ZyZWUgKGxpc3QpOwotfQotCi1nYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fYmluZF9kZXZpY2UgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pCi17Ci0gIE9TU3RhdHVzIHN0YXR1czsKLQotICAvKiBTcGVjaWZ5IHdoaWNoIGRldmljZSB3ZSdyZSB1c2luZy4gKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLCAiQmluZCBBdWRpb1VuaXQgdG8gZGV2aWNlICVkIiwKLSAgICAgIChpbnQpIGNvcmVfYXVkaW8tPmRldmljZV9pZCk7Ci0gIHN0YXR1cyA9IEF1ZGlvVW5pdFNldFByb3BlcnR5IChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQsCi0gICAgICBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfQ3VycmVudERldmljZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwKLSAgICAgICZjb3JlX2F1ZGlvLT5kZXZpY2VfaWQsIHNpemVvZiAoQXVkaW9EZXZpY2VJRCkpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLCAiRmFpbGVkIGJpbmRpbmcgdG8gZGV2aWNlOiAlZCIsCi0gICAgICAgIChpbnQpIHN0YXR1cyk7Ci0gICAgZ290byBhdWRpb3VuaXRfZXJyb3I7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci0KLWF1ZGlvdW5pdF9lcnJvcjoKLSAgaWYgKGNvcmVfYXVkaW8tPnJlY0J1ZmZlckxpc3QpIHsKLSAgICBidWZmZXJfbGlzdF9mcmVlIChjb3JlX2F1ZGlvLT5yZWNCdWZmZXJMaXN0KTsKLSAgICBjb3JlX2F1ZGlvLT5yZWNCdWZmZXJMaXN0ID0gTlVMTDsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX2NvcmVfYXVkaW9fc2V0X3Byb3BlcnR5IChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLCBBdWRpb1VuaXRQcm9wZXJ0eUlEIGluSUQsCi0gICAgdm9pZCAqaW5EYXRhLCBVSW50MzIgaW5EYXRhU2l6ZSkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzOwotICBBdWRpb1VuaXRTY29wZSBzY29wZTsKLSAgQXVkaW9Vbml0RWxlbWVudCBlbGVtZW50OwotCi0gIHNjb3BlID0gQ09SRV9BVURJT19JTk5FUl9TQ09QRSAoY29yZV9hdWRpbyk7Ci0gIGVsZW1lbnQgPSBDT1JFX0FVRElPX0VMRU1FTlQgKGNvcmVfYXVkaW8pOwotCi0gIHN0YXR1cyA9Ci0gICAgICBBdWRpb1VuaXRTZXRQcm9wZXJ0eSAoY29yZV9hdWRpby0+YXVkaW91bml0LCBpbklELCBzY29wZSwgZWxlbWVudCwgaW5EYXRhLAotICAgICAgaW5EYXRhU2l6ZSk7Ci0KLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLAotICAgICAgICAiRmFpbGVkIHRvIHNldCBBdWRpbyBVbml0IHByb3BlcnR5OiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIEZBTFNFOzsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBUaGUgQXVkaW9Vbml0IG11c3QgYmUgdW5pbml0aWFsaXplZCBiZWZvcmUgY2FsbGluZyB0aGlzICovCi1nYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fc2V0X2NoYW5uZWxfbGF5b3V0IChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgIGdpbnQgY2hhbm5lbHMsIEdzdENhcHMgKiBjYXBzKQotewotICBBdWRpb0NoYW5uZWxMYXlvdXQgKmxheW91dCA9IE5VTEw7Ci0gIGdib29sZWFuIHJldDsKLSAgZ3NpemUgbGF5b3V0U2l6ZTsKLSAgZ2ludCBpOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zaXRpb25zW0dTVF9PU1hfQVVESU9fTUFYX0NIQU5ORUxdOwotICBndWludDY0IGNoYW5uZWxfbWFzazsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2hhbm5lbHMgPD0gR1NUX09TWF9BVURJT19NQVhfQ0hBTk5FTCwgRkFMU0UpOwotCi0gIC8qIERldGVybWluZSB0aGUgY2hhbm5lbCBwb3NpdGlvbnMgKi8KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGNoYW5uZWxfbWFzayA9IDA7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0IChzdHJ1Y3R1cmUsICJjaGFubmVsLW1hc2siLCBHU1RfVFlQRV9CSVRNQVNLLCAmY2hhbm5lbF9tYXNrLAotICAgICAgTlVMTCk7Ci0KLSAgaWYgKGNoYW5uZWxfbWFzayAhPSAwKQotICAgIGdzdF9hdWRpb19jaGFubmVsX3Bvc2l0aW9uc19mcm9tX21hc2sgKGNoYW5uZWxzLCBjaGFubmVsX21hc2ssIHBvc2l0aW9ucyk7Ci0KLSAgLyogQXVkaW9DaGFubmVsTGF5b3V0IG1lbWJlciBtQ2hhbm5lbERlc2NyaXB0aW9ucyBpcyB2YXJpYWJsZS1sZW5ndGggYXJyYXkgKi8KLSAgbGF5b3V0U2l6ZSA9Ci0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEF1ZGlvQ2hhbm5lbExheW91dCwgbUNoYW5uZWxEZXNjcmlwdGlvbnNbY2hhbm5lbHNdKTsKLSAgbGF5b3V0ID0gZ19tYWxsb2MgKGxheW91dFNpemUpOwotCi0gIC8qIEZpbGwgb3V0IHRoZSBBdWRpb0NoYW5uZWxMYXlvdXQgKi8KLSAgbGF5b3V0LT5tQ2hhbm5lbExheW91dFRhZyA9IGtBdWRpb0NoYW5uZWxMYXlvdXRUYWdfVXNlQ2hhbm5lbERlc2NyaXB0aW9uczsKLSAgbGF5b3V0LT5tQ2hhbm5lbEJpdG1hcCA9IDA7ICAgLyogTm90IHVzZWQgKi8KLSAgbGF5b3V0LT5tTnVtYmVyQ2hhbm5lbERlc2NyaXB0aW9ucyA9IGNoYW5uZWxzOwotICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkrKykgewotICAgIGlmIChjaGFubmVsX21hc2sgIT0gMCkgewotICAgICAgbGF5b3V0LT5tQ2hhbm5lbERlc2NyaXB0aW9uc1tpXS5tQ2hhbm5lbExhYmVsID0KLSAgICAgICAgICBnc3RfYXVkaW9fY2hhbm5lbF9wb3NpdGlvbl90b19jb3JlX2F1ZGlvIChwb3NpdGlvbnNbaV0sIGkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBEaXNjcmV0ZSBjaGFubmVsIG51bWJlcnMgYXJlIE9SZWQgaW50byB0aGlzICovCi0gICAgICBsYXlvdXQtPm1DaGFubmVsRGVzY3JpcHRpb25zW2ldLm1DaGFubmVsTGFiZWwgPQotICAgICAgICAgIGtBdWRpb0NoYW5uZWxMYWJlbF9EaXNjcmV0ZV8wIHwgaTsKLSAgICB9Ci0KLSAgICAvKiBPdGhlcnMgdW51c2VkICovCi0gICAgbGF5b3V0LT5tQ2hhbm5lbERlc2NyaXB0aW9uc1tpXS5tQ2hhbm5lbEZsYWdzID0ga0F1ZGlvQ2hhbm5lbEZsYWdzX0FsbE9mZjsKLSAgICBsYXlvdXQtPm1DaGFubmVsRGVzY3JpcHRpb25zW2ldLm1Db29yZGluYXRlc1swXSA9IDAuZjsKLSAgICBsYXlvdXQtPm1DaGFubmVsRGVzY3JpcHRpb25zW2ldLm1Db29yZGluYXRlc1sxXSA9IDAuZjsKLSAgICBsYXlvdXQtPm1DaGFubmVsRGVzY3JpcHRpb25zW2ldLm1Db29yZGluYXRlc1syXSA9IDAuZjsKLSAgfQotCi0gIC8qIFNldHMgR1N0cmVhbWVyLW9yZGVyZWQgY2hhbm5lbCBsYXlvdXQgb24gdGhlIGlubmVyIHNjb3BlLgotICAgKiBSZW9yZGVyaW5nIGJldHdlZW4gdGhlIGlubmVyIHNjb3BlIGFuZCBvdXRlciBzY29wZSBpcyBoYW5kbGVkCi0gICAqIGJ5IHRoZSBBdWRpbyBVbml0IGl0c2VsZi4gKi8KLSAgcmV0ID0gX2NvcmVfYXVkaW9fc2V0X3Byb3BlcnR5IChjb3JlX2F1ZGlvLAotICAgICAga0F1ZGlvVW5pdFByb3BlcnR5X0F1ZGlvQ2hhbm5lbExheW91dCwgbGF5b3V0LCBsYXlvdXRTaXplKTsKLQotICBnX2ZyZWUgKGxheW91dCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8qIFRoZSBBdWRpb1VuaXQgbXVzdCBiZSB1bmluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgKi8KLWdib29sZWFuCi1nc3RfY29yZV9hdWRpb19zZXRfZm9ybWF0IChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBmb3JtYXQpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwgIlNldHRpbmcgZm9ybWF0IGZvciBBdWRpb1VuaXQiKTsKLQotICByZXR1cm4gX2NvcmVfYXVkaW9fc2V0X3Byb3BlcnR5IChjb3JlX2F1ZGlvLCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LAotICAgICAgJmZvcm1hdCwgc2l6ZW9mIChBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX29wZW5fZGV2aWNlIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLCBPU1R5cGUgc3ViX3R5cGUsCi0gICAgY29uc3QgZ2NoYXIgKiBhZGVzYykKLXsKLSAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBkZXNjOwotICBBdWRpb0NvbXBvbmVudCBjb21wOwotICBPU1N0YXR1cyBzdGF0dXM7Ci0gIEF1ZGlvVW5pdCB1bml0OwotICBVSW50MzIgZW5hYmxlSU87Ci0KLSAgZGVzYy5jb21wb25lbnRUeXBlID0ga0F1ZGlvVW5pdFR5cGVfT3V0cHV0OwotICBkZXNjLmNvbXBvbmVudFN1YlR5cGUgPSBzdWJfdHlwZTsKLSAgZGVzYy5jb21wb25lbnRNYW51ZmFjdHVyZXIgPSBrQXVkaW9Vbml0TWFudWZhY3R1cmVyX0FwcGxlOwotICBkZXNjLmNvbXBvbmVudEZsYWdzID0gMDsKLSAgZGVzYy5jb21wb25lbnRGbGFnc01hc2sgPSAwOwotCi0gIGNvbXAgPSBBdWRpb0NvbXBvbmVudEZpbmROZXh0IChOVUxMLCAmZGVzYyk7Ci0KLSAgaWYgKGNvbXAgPT0gTlVMTCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLCAiQ291bGRuJ3QgZmluZCAlcyBjb21wb25lbnQiLAotICAgICAgICBhZGVzYyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgc3RhdHVzID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyAoY29tcCwgJnVuaXQpOwotCi0gIGlmIChzdGF0dXMpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsICJDb3VsZG4ndCBvcGVuICVzIGNvbXBvbmVudCAlZCIsCi0gICAgICAgIGFkZXNjLCAoaW50KSBzdGF0dXMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChjb3JlX2F1ZGlvLT5pc19zcmMpIHsKLSAgICAvKiBlbmFibGUgaW5wdXQgKi8KLSAgICBlbmFibGVJTyA9IDE7Ci0gICAgc3RhdHVzID0gQXVkaW9Vbml0U2V0UHJvcGVydHkgKHVuaXQsIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAxLCAgIC8qIDEgPSBpbnB1dCBlbGVtZW50ICovCi0gICAgICAgICZlbmFibGVJTywgc2l6ZW9mIChlbmFibGVJTykpOwotCi0gICAgaWYgKHN0YXR1cykgewotICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UgKHVuaXQpOwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsICJGYWlsZWQgdG8gZW5hYmxlIGlucHV0OiAlZCIsCi0gICAgICAgICAgKGludCkgc3RhdHVzKTsKLSAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBkaXNhYmxlIG91dHB1dCAqLwotICAgIGVuYWJsZUlPID0gMDsKLSAgICBzdGF0dXMgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eSAodW5pdCwga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAgLyogMCA9IG91dHB1dCBlbGVtZW50ICovCi0gICAgICAgICZlbmFibGVJTywgc2l6ZW9mIChlbmFibGVJTykpOwotCi0gICAgaWYgKHN0YXR1cykgewotICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UgKHVuaXQpOwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsICJGYWlsZWQgdG8gZGlzYWJsZSBvdXRwdXQ6ICVkIiwKLSAgICAgICAgICAoaW50KSBzdGF0dXMpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwgIkNyZWF0ZWQgJXMgQXVkaW9Vbml0OiAlcCIsIGFkZXNjLAotICAgICAgdW5pdCk7Ci0gIGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCA9IHVuaXQ7Ci0gIHJldHVybiBUUlVFOwotfQotCi1BdWRpb0NoYW5uZWxMYWJlbAotZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25fdG9fY29yZV9hdWRpbyAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24KLSAgICBwb3NpdGlvbiwgaW50IGNoYW5uZWwpCi17Ci0gIHN3aXRjaCAocG9zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX0xlZnQ7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVDoKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfUmlnaHQ7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0NFTlRFUjoKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfQ2VudGVyU3Vycm91bmQ7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX0xlZnRTdXJyb3VuZDsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0U3Vycm91bmQ7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUxOgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9MRkVTY3JlZW47Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVI6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX0NlbnRlcjsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NJREVfTEVGVDoKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfTGVmdFN1cnJvdW5kRGlyZWN0OwotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVDoKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfUmlnaHRTdXJyb3VuZERpcmVjdDsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlRfT0ZfQ0VOVEVSOgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9MZWZ0Q2VudGVyOwotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFRfT0ZfQ0VOVEVSOgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9SaWdodENlbnRlcjsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9SRUFSX0xFRlQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX1RvcEJhY2tMZWZ0OwotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfQ0VOVEVSOgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9Ub3BCYWNrQ2VudGVyOwotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfUklHSFQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX1RvcEJhY2tSaWdodDsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1dJREVfTEVGVDoKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfTGVmdFdpZGU7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9XSURFX1JJR0hUOgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9SaWdodFdpZGU7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUyOgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9MRkUyOwotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX0ZST05UX0xFRlQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX1ZlcnRpY2FsSGVpZ2h0TGVmdDsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9GUk9OVF9SSUdIVDoKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfVmVydGljYWxIZWlnaHRSaWdodDsKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9GUk9OVF9DRU5URVI6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX1ZlcnRpY2FsSGVpZ2h0Q2VudGVyOwotCi0gICAgICAvKiBTcGVjaWFsIHBvc2l0aW9uIHZhbHVlcyAqLwotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTk9ORToKLSAgICAgIHJldHVybiBrQXVkaW9DaGFubmVsTGFiZWxfRGlzY3JldGVfMCB8IGNoYW5uZWw7Ci0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05POgotICAgICAgcmV0dXJuIGtBdWRpb0NoYW5uZWxMYWJlbF9Nb25vOwotCi0gICAgICAvKiBGb2xsb3dpbmcgcG9zaXRpb25zIGFyZSB1bm1hcHBlZCAtLQotICAgICAgICogaS5lLiBtYXBwZWQgdG8ga0F1ZGlvQ2hhbm5lbExhYmVsX1Vua25vd246ICovCi0gICAgY2FzZSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfQ0VOVEVSOgotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1NJREVfTEVGVDoKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9TSURFX1JJR0hUOgotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fQk9UVE9NX0ZST05UX0NFTlRFUjoKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0JPVFRPTV9GUk9OVF9MRUZUOgotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fQk9UVE9NX0ZST05UX1JJR0hUOgotICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU1VSUk9VTkRfTEVGVDoKLSAgICBjYXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1NVUlJPVU5EX1JJR0hUOgotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4ga0F1ZGlvQ2hhbm5lbExhYmVsX1Vua25vd247Ci0gIH0KLX0KLQotLyogUGVyZm9ybXMgYSBiZXN0LWVmZm9ydCBjb252ZXJzaW9uLiAnY2hhbm5lbCcgaXMgdXNlZCBmb3Igd2FybmluZ3Mgb25seS4gKi8KLUdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uCi1nc3RfY29yZV9hdWRpb19jaGFubmVsX2xhYmVsX3RvX2dzdCAoQXVkaW9DaGFubmVsTGFiZWwgbGFiZWwsCi0gICAgaW50IGNoYW5uZWwsIGdib29sZWFuIHdhcm4pCi17Ci0gIHN3aXRjaCAobGFiZWwpIHsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9MZWZ0OgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ7Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfUmlnaHQ6Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ7Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfQ2VudGVyOgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUjsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9MRkVTY3JlZW46Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFMTsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9MZWZ0U3Vycm91bmQ6Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZUOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0U3Vycm91bmQ6Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVDsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9MZWZ0U3Vycm91bmREaXJlY3Q6Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9MRUZUOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0U3Vycm91bmREaXJlY3Q6Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fU0lERV9SSUdIVDsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9DZW50ZXJTdXJyb3VuZDoKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0NFTlRFUjsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9MZWZ0Q2VudGVyOgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlRfT0ZfQ0VOVEVSOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0Q2VudGVyOgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUX09GX0NFTlRFUjsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9Ub3BCYWNrTGVmdDoKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9MRUZUOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1RvcEJhY2tDZW50ZXI6Ci0gICAgICByZXR1cm4gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fVE9QX1JFQVJfQ0VOVEVSOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1RvcEJhY2tSaWdodDoKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfUkVBUl9SSUdIVDsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9MZWZ0V2lkZToKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9XSURFX0xFRlQ7Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfUmlnaHRXaWRlOgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1dJREVfUklHSFQ7Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfTEZFMjoKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkUyOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1ZlcnRpY2FsSGVpZ2h0TGVmdDoKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfTEVGVDsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9WZXJ0aWNhbEhlaWdodFJpZ2h0OgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1RPUF9GUk9OVF9SSUdIVDsKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9WZXJ0aWNhbEhlaWdodENlbnRlcjoKLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9UT1BfRlJPTlRfQ0VOVEVSOwotCi0gICAgICAvKiBTcGVjaWFsIHBvc2l0aW9uIHZhbHVlcyAqLwotCi0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfTW9ubzoKLSAgICAgIC8qIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX01PTk8gaXMgb25seSBmb3IgMS1jaGFubmVsIGxheW91dHMgKi8KLSAgICAgIHJldHVybiBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9JTlZBTElEOwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX0Rpc2NyZXRlOgotICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkU7Ci0KLSAgICAgIC8qCi0gICAgICAgICBGb2xsb3dpbmcgbGFiZWxzIGFyZSB1bm1hcHBlZCAtLQotICAgICAgICAgaS5lLiBtYXBwZWQgdG8gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fSU5WQUxJRDoKLSAgICAgICAqLwotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1JlYXJTdXJyb3VuZExlZnQ6Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfUmVhclN1cnJvdW5kUmlnaHQ6Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfVG9wQ2VudGVyU3Vycm91bmQ6Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfTGVmdFRvdGFsOgotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0VG90YWw6Ci0gICAgY2FzZSBrQXVkaW9DaGFubmVsTGFiZWxfSGVhcmluZ0ltcGFpcmVkOgotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX05hcnJhdGlvbjoKLSAgICBjYXNlIGtBdWRpb0NoYW5uZWxMYWJlbF9EaWFsb2dDZW50cmljTWl4OgotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX0NlbnRlclN1cnJvdW5kRGlyZWN0OgotICAgIGNhc2Uga0F1ZGlvQ2hhbm5lbExhYmVsX0hhcHRpYzoKLSAgICBkZWZhdWx0OgotICAgICAgaWYgKGxhYmVsID4+IDE2ICE9IDApIHsgICAvKiBrQXVkaW9DaGFubmVsTGFiZWxfRGlzY3JldGVfTiAqLwotICAgICAgICAvKiBubyB3YXkgdG8gc3RvcmUgZGlzY3JldGUgY2hhbm5lbCBvcmRlciAqLwotICAgICAgICBpZiAod2FybikKLSAgICAgICAgICBHU1RfV0FSTklORwotICAgICAgICAgICAgICAoIkNvcmUgQXVkaW8gY2hhbm5lbCAldSBsYWJlbGVkIGtBdWRpb0NoYW5uZWxMYWJlbF9EaXNjcmV0ZV8ldSAtLSBkaXNjcmV0ZSBvcmRlciB3aWxsIGJlIGxvc3QiLAotICAgICAgICAgICAgICBjaGFubmVsLCAoKHVuc2lnbmVkIGludCkgbGFiZWwpICYgMHhGRkZGKTsKLSAgICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX05PTkU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAod2FybikKLSAgICAgICAgICBHU1RfV0FSTklORwotICAgICAgICAgICAgICAoIkNvcmUgQXVkaW8gY2hhbm5lbCAldSBoYXMgdW5zdXBwb3J0ZWQgbGFiZWwgJWQgYW5kIHdpbGwgYmUgc2tpcHBlZCIsCi0gICAgICAgICAgICAgIGNoYW5uZWwsIChpbnQpIGxhYmVsKTsKLSAgICAgICAgcmV0dXJuIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0lOVkFMSUQ7Ci0gICAgICB9Ci0gIH0KLX0KLQotdm9pZAotZ3N0X2NvcmVfYXVkaW9fZHVtcF9jaGFubmVsX2xheW91dCAoQXVkaW9DaGFubmVsTGF5b3V0ICogY2hhbm5lbF9sYXlvdXQpCi17Ci0gIFVJbnQzMiBpOwotCi0gIEdTVF9ERUJVRyAoIm1DaGFubmVsTGF5b3V0VGFnOiAweCVseCIsCi0gICAgICAodW5zaWduZWQgbG9uZykgY2hhbm5lbF9sYXlvdXQtPm1DaGFubmVsTGF5b3V0VGFnKTsKLSAgR1NUX0RFQlVHICgibUNoYW5uZWxCaXRtYXA6IDB4JWx4IiwKLSAgICAgICh1bnNpZ25lZCBsb25nKSBjaGFubmVsX2xheW91dC0+bUNoYW5uZWxCaXRtYXApOwotICBHU1RfREVCVUcgKCJtTnVtYmVyQ2hhbm5lbERlc2NyaXB0aW9uczogJWx1IiwKLSAgICAgICh1bnNpZ25lZCBsb25nKSBjaGFubmVsX2xheW91dC0+bU51bWJlckNoYW5uZWxEZXNjcmlwdGlvbnMpOwotICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbF9sYXlvdXQtPm1OdW1iZXJDaGFubmVsRGVzY3JpcHRpb25zOyBpKyspIHsKLSAgICBBdWRpb0NoYW5uZWxEZXNjcmlwdGlvbiAqY2hhbm5lbF9kZXNjID0KLSAgICAgICAgJmNoYW5uZWxfbGF5b3V0LT5tQ2hhbm5lbERlc2NyaXB0aW9uc1tpXTsKLSAgICBHU1RfREVCVUcgKCIgIG1DaGFubmVsTGFiZWw6IDB4JWx4IG1DaGFubmVsRmxhZ3M6IDB4JWx4ICIKLSAgICAgICAgIm1Db29yZGluYXRlc1swXTogJWYgbUNvb3JkaW5hdGVzWzFdOiAlZiAiCi0gICAgICAgICJtQ29vcmRpbmF0ZXNbMl06ICVmIiwKLSAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGNoYW5uZWxfZGVzYy0+bUNoYW5uZWxMYWJlbCwKLSAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGNoYW5uZWxfZGVzYy0+bUNoYW5uZWxGbGFncywKLSAgICAgICAgY2hhbm5lbF9kZXNjLT5tQ29vcmRpbmF0ZXNbMF0sIGNoYW5uZWxfZGVzYy0+bUNvb3JkaW5hdGVzWzFdLAotICAgICAgICBjaGFubmVsX2Rlc2MtPm1Db29yZGluYXRlc1syXSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW9jb21tb24uaCBiL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW9jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ2MDJhNi4uMDAwMDAwMAotLS0gYS9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0gKiAgIEF1dGhvcnM6IEpvc2VwIFRvcnJhIFZhbGzDqHMgPGpvc2VwQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiZ3N0b3N4Y29yZWF1ZGlvLmgiCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWNoYW5uZWxzLmg+Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdNdXRleCBsb2NrOwotICBHQ29uZCBjb25kOwotfSBQcm9wZXJ0eU11dGV4OwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19iaW5kX2RldmljZSAgICAgICAgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqY29yZV9hdWRpbyk7Ci0KLXZvaWQgZ3N0X2NvcmVfYXVkaW9fZHVtcF9jaGFubmVsX2xheW91dCAgICAgICAgICAgICAgICAgICAoQXVkaW9DaGFubmVsTGF5b3V0ICogY2hhbm5lbF9sYXlvdXQpOwotCi12b2lkIGdzdF9jb3JlX2F1ZGlvX3JlbW92ZV9yZW5kZXJfY2FsbGJhY2sgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pOwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19pb19wcm9jX3N0YXJ0ICAgICAgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pOwotCi1nYm9vbGVhbiBnc3RfY29yZV9hdWRpb19pb19wcm9jX3N0b3AgICAgICAgICAgICAgICAgICAgICAgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pOwotCi1BdWRpb0J1ZmZlckxpc3QgKiBidWZmZXJfbGlzdF9hbGxvYyAgICAgICAgICAgICAgICAgICAgICAgKFVJbnQzMiBjaGFubmVscywgVUludDMyIHNpemUsIGdib29sZWFuIGludGVybGVhdmVkKTsKLQotdm9pZCBidWZmZXJfbGlzdF9mcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBdWRpb0J1ZmZlckxpc3QgKiBsaXN0KTsKLQotZ2Jvb2xlYW4gZ3N0X2NvcmVfYXVkaW9fc2V0X2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gZm9ybWF0KTsKLQotZ2Jvb2xlYW4gZ3N0X2NvcmVfYXVkaW9fc2V0X2NoYW5uZWxfbGF5b3V0ICAgICAgICAgICAgICAgIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGNoYW5uZWxzLCBHc3RDYXBzICogY2Fwcyk7Ci0KLWdib29sZWFuIGdzdF9jb3JlX2F1ZGlvX29wZW5fZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAoR3N0Q29yZUF1ZGlvICpjb3JlX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPU1R5cGUgc3ViX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICphZGVzYyk7Ci0KLU9TU3RhdHVzIGdzdF9jb3JlX2F1ZGlvX3JlbmRlcl9ub3RpZnkgICAgICAgICAgICAgICAgICAgICAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MgKiBpb0FjdGlvbkZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb1RpbWVTdGFtcCAqIGluVGltZVN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5CdXNOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbk51bWJlckZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9CdWZmZXJMaXN0ICogaW9EYXRhKTsKLQotQXVkaW9DaGFubmVsTGFiZWwgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25fdG9fY29yZV9hdWRpbyAoR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zaXRpb24sIGludCBjaGFubmVsKTsKLQotR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gZ3N0X2NvcmVfYXVkaW9fY2hhbm5lbF9sYWJlbF90b19nc3QgKEF1ZGlvQ2hhbm5lbExhYmVsIGxhYmVsLCBpbnQgY2hhbm5lbCwgZ2Jvb2xlYW4gd2Fybik7CmRpZmYgLS1naXQgYS9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmMgYi9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvaGFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDVjMjkuLjAwMDAwMDAKLS0tIGEvc3lzL29zeGF1ZGlvL2dzdG9zeGNvcmVhdWRpb2hhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI4NyArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0gKiAgIEF1dGhvcnM6IEpvc2VwIFRvcnJhIFZhbGzDqHMgPGpvc2VwQGZsdWVuZG8uY29tPgotICogICAgICAgICAgICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgPGFtb3JhbGVzQGZsdWVuZG8uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgIC8qIGZvciBnZXRwaWQgKi8KLSNpbmNsdWRlICJnc3Rvc3hhdWRpb3NpbmsuaCIKLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2F1ZGlvX3N5c3RlbV9zZXRfcnVubG9vcCAoQ0ZSdW5Mb29wUmVmIHJ1bkxvb3ApCi17Ci0gIE9TU3RhdHVzIHN0YXR1cyA9IG5vRXJyOwotCi0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIHJ1bmxvb3BBZGRyZXNzID0gewotICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlSdW5Mb29wLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RTZXRQcm9wZXJ0eURhdGEgKGtBdWRpb09iamVjdFN5c3RlbU9iamVjdCwKLSAgICAgICZydW5sb29wQWRkcmVzcywgMCwgTlVMTCwgc2l6ZW9mIChDRlJ1bkxvb3BSZWYpLCAmcnVuTG9vcCk7Ci0gIGlmIChzdGF0dXMgPT0gbm9FcnIpIHsKLSAgICByZXMgPSBUUlVFOwotICB9IGVsc2UgewotICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBzZXQgcnVubG9vcCB0byAlcDogJWQiLCBydW5Mb29wLCAoaW50KSBzdGF0dXMpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGlubGluZSBBdWRpb0RldmljZUlECi1fYXVkaW9fc3lzdGVtX2dldF9kZWZhdWx0X2RldmljZSAoZ2Jvb2xlYW4gb3V0cHV0KQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZiAoQXVkaW9EZXZpY2VJRCk7Ci0gIEF1ZGlvRGV2aWNlSUQgZGV2aWNlX2lkID0ga0F1ZGlvRGV2aWNlVW5rbm93bjsKLSAgQXVkaW9PYmplY3RQcm9wZXJ0eVNlbGVjdG9yIHByb3Bfc2VsZWN0b3I7Ci0KLSAgcHJvcF9zZWxlY3RvciA9IG91dHB1dCA/IGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0T3V0cHV0RGV2aWNlIDoKLSAgICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0SW5wdXREZXZpY2U7Ci0KLSAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgZGVmYXVsdERldmljZUFkZHJlc3MgPSB7Ci0gICAgcHJvcF9zZWxlY3RvciwKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1hc3RlcgotICB9OwotCi0gIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhIChrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsCi0gICAgICAmZGVmYXVsdERldmljZUFkZHJlc3MsIDAsIE5VTEwsICZwcm9wZXJ0eVNpemUsICZkZXZpY2VfaWQpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIGdldHRpbmcgZGVmYXVsdCBvdXRwdXQgZGV2aWNlOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJEZWZhdWx0IGRldmljZSBpZDogJXUiLCAodW5zaWduZWQpIGRldmljZV9pZCk7Ci0KLSAgcmV0dXJuIGRldmljZV9pZDsKLX0KLQotc3RhdGljIGlubGluZSBBdWRpb0RldmljZUlEICoKLV9hdWRpb19zeXN0ZW1fZ2V0X2RldmljZXMgKGdpbnQgKiBuZGV2aWNlcykKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSAwOwotICBBdWRpb0RldmljZUlEICpkZXZpY2VzID0gTlVMTDsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBhdWRpb0RldmljZXNBZGRyZXNzID0gewotICAgIGtBdWRpb0hhcmR3YXJlUHJvcGVydHlEZXZpY2VzLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGFTaXplIChrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsCi0gICAgICAmYXVkaW9EZXZpY2VzQWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfV0FSTklORyAoImZhaWxlZCBnZXR0aW5nIG51bWJlciBvZiBkZXZpY2VzOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAqbmRldmljZXMgPSBwcm9wZXJ0eVNpemUgLyBzaXplb2YgKEF1ZGlvRGV2aWNlSUQpOwotCi0gIGRldmljZXMgPSAoQXVkaW9EZXZpY2VJRCAqKSBnX21hbGxvYyAocHJvcGVydHlTaXplKTsKLSAgaWYgKGRldmljZXMpIHsKLSAgICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoa0F1ZGlvT2JqZWN0U3lzdGVtT2JqZWN0LAotICAgICAgICAmYXVkaW9EZXZpY2VzQWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSwgZGV2aWNlcyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgZ2V0dGluZyB0aGUgbGlzdCBvZiBkZXZpY2VzOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgICBnX2ZyZWUgKGRldmljZXMpOwotICAgICAgKm5kZXZpY2VzID0gMDsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfQotICByZXR1cm4gZGV2aWNlczsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2F1ZGlvX2RldmljZV9pc19hbGl2ZSAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQsIGdib29sZWFuIG91dHB1dCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIGludCBhbGl2ZSA9IEZBTFNFOwotICBVSW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mIChhbGl2ZSk7Ci0gIEF1ZGlvT2JqZWN0UHJvcGVydHlTY29wZSBwcm9wX3Njb3BlOwotCi0gIHByb3Bfc2NvcGUgPSBvdXRwdXQgPyBrQXVkaW9EZXZpY2VQcm9wZXJ0eVNjb3BlT3V0cHV0IDoKLSAgICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVJbnB1dDsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBhdWRpb0RldmljZUFsaXZlQWRkcmVzcyA9IHsKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eURldmljZUlzQWxpdmUsCi0gICAgcHJvcF9zY29wZSwKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYXN0ZXIKLSAgfTsKLQotICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoZGV2aWNlX2lkLAotICAgICAgJmF1ZGlvRGV2aWNlQWxpdmVBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplLCAmYWxpdmUpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgYWxpdmUgPSBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBhbGl2ZTsKLX0KLQotc3RhdGljIGlubGluZSBndWludAotX2F1ZGlvX2RldmljZV9nZXRfbGF0ZW5jeSAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQpCi17Ci0gIE9TU3RhdHVzIHN0YXR1cyA9IG5vRXJyOwotICBVSW50MzIgbGF0ZW5jeSA9IDA7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YgKGxhdGVuY3kpOwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGF1ZGlvRGV2aWNlTGF0ZW5jeUFkZHJlc3MgPSB7Ci0gICAga0F1ZGlvRGV2aWNlUHJvcGVydHlMYXRlbmN5LAotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGEgKGRldmljZV9pZCwKLSAgICAgICZhdWRpb0RldmljZUxhdGVuY3lBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplLCAmbGF0ZW5jeSk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZ2V0IGxhdGVuY3k6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICBsYXRlbmN5ID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbGF0ZW5jeTsKLX0KLQotc3RhdGljIGlubGluZSBwaWRfdAotX2F1ZGlvX2RldmljZV9nZXRfaG9nIChBdWRpb0RldmljZUlEIGRldmljZV9pZCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIHBpZF90IGhvZ19waWQ7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YgKGhvZ19waWQpOwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGF1ZGlvRGV2aWNlSG9nTW9kZUFkZHJlc3MgPSB7Ci0gICAga0F1ZGlvRGV2aWNlUHJvcGVydHlIb2dNb2RlLAotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGEgKGRldmljZV9pZCwKLSAgICAgICZhdWRpb0RldmljZUhvZ01vZGVBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplLCAmaG9nX3BpZCk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZ2V0IGhvZzogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIGhvZ19waWQgPSAtMTsKLSAgfQotCi0gIHJldHVybiBob2dfcGlkOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fYXVkaW9fZGV2aWNlX3NldF9ob2cgKEF1ZGlvRGV2aWNlSUQgZGV2aWNlX2lkLCBwaWRfdCBob2dfcGlkKQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgVUludDMyIHByb3BlcnR5U2l6ZSA9IHNpemVvZiAoaG9nX3BpZCk7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGF1ZGlvRGV2aWNlSG9nTW9kZUFkZHJlc3MgPSB7Ci0gICAga0F1ZGlvRGV2aWNlUHJvcGVydHlIb2dNb2RlLAotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RTZXRQcm9wZXJ0eURhdGEgKGRldmljZV9pZCwKLSAgICAgICZhdWRpb0RldmljZUhvZ01vZGVBZGRyZXNzLCAwLCBOVUxMLCBwcm9wZXJ0eVNpemUsICZob2dfcGlkKTsKLQotICBpZiAoc3RhdHVzID09IG5vRXJyKSB7Ci0gICAgcmVzID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gc2V0IGhvZzogJWQiLCAoaW50KSBzdGF0dXMpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2F1ZGlvX2RldmljZV9zZXRfbWl4aW5nIChBdWRpb0RldmljZUlEIGRldmljZV9pZCwgZ2Jvb2xlYW4gZW5hYmxlX21peCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSAwLCBjYW5fbWl4ID0gZW5hYmxlX21peDsKLSAgQm9vbGVhbiB3cml0YWJsZSA9IEZBTFNFOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBhdWRpb0RldmljZVN1cHBvcnRzTWl4aW5nQWRkcmVzcyA9IHsKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eVN1cHBvcnRzTWl4aW5nLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgaWYgKEF1ZGlvT2JqZWN0SGFzUHJvcGVydHkgKGRldmljZV9pZCwgJmF1ZGlvRGV2aWNlU3VwcG9ydHNNaXhpbmdBZGRyZXNzKSkgewotICAgIC8qIFNldCBtaXhhYmxlIHRvIGZhbHNlIGlmIHdlIGFyZSBhbGxvd2VkIHRvICovCi0gICAgc3RhdHVzID0gQXVkaW9PYmplY3RJc1Byb3BlcnR5U2V0dGFibGUgKGRldmljZV9pZCwKLSAgICAgICAgJmF1ZGlvRGV2aWNlU3VwcG9ydHNNaXhpbmdBZGRyZXNzLCAmd3JpdGFibGUpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIEdTVF9ERUJVRyAoIkF1ZGlvT2JqZWN0SXNQcm9wZXJ0eVNldHRhYmxlOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgfQotICAgIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhU2l6ZSAoZGV2aWNlX2lkLAotICAgICAgICAmYXVkaW9EZXZpY2VTdXBwb3J0c01peGluZ0FkZHJlc3MsIDAsIE5VTEwsICZwcm9wZXJ0eVNpemUpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgIEdTVF9ERUJVRyAoIkF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhU2l6ZTogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIH0KLSAgICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoZGV2aWNlX2lkLAotICAgICAgICAmYXVkaW9EZXZpY2VTdXBwb3J0c01peGluZ0FkZHJlc3MsIDAsIE5VTEwsICZwcm9wZXJ0eVNpemUsICZjYW5fbWl4KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBHU1RfREVCVUcgKCJBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YTogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIH0KLQotICAgIGlmIChzdGF0dXMgPT0gbm9FcnIgJiYgd3JpdGFibGUpIHsKLSAgICAgIGNhbl9taXggPSBlbmFibGVfbWl4OwotICAgICAgc3RhdHVzID0gQXVkaW9PYmplY3RTZXRQcm9wZXJ0eURhdGEgKGRldmljZV9pZCwKLSAgICAgICAgICAmYXVkaW9EZXZpY2VTdXBwb3J0c01peGluZ0FkZHJlc3MsIDAsIE5VTEwsIHByb3BlcnR5U2l6ZSwgJmNhbl9taXgpOwotICAgICAgcmVzID0gVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gc2V0IG1peG1vZGU6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHICgicHJvcGVydHkgbm90IGZvdW5kLCBtaXhpbmcgY291ZGxuJ3QgYmUgY2hhbmdlZCIpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGlubGluZSBnY2hhciAqCi1fYXVkaW9fZGV2aWNlX2dldF9uYW1lIChBdWRpb0RldmljZUlEIGRldmljZV9pZCwgZ2Jvb2xlYW4gb3V0cHV0KQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgVUludDMyIHByb3BlcnR5U2l6ZSA9IDA7Ci0gIGdjaGFyICpkZXZpY2VfbmFtZSA9IE5VTEw7Ci0gIEF1ZGlvT2JqZWN0UHJvcGVydHlTY29wZSBwcm9wX3Njb3BlOwotCi0gIHByb3Bfc2NvcGUgPSBvdXRwdXQgPyBrQXVkaW9EZXZpY2VQcm9wZXJ0eVNjb3BlT3V0cHV0IDoKLSAgICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVJbnB1dDsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBkZXZpY2VOYW1lQWRkcmVzcyA9IHsKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eURldmljZU5hbWUsCi0gICAgcHJvcF9zY29wZSwKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYXN0ZXIKLSAgfTsKLQotICAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgKi8KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGFTaXplIChkZXZpY2VfaWQsCi0gICAgICAmZGV2aWNlTmFtZUFkZHJlc3MsIDAsIE5VTEwsICZwcm9wZXJ0eVNpemUpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIC8qIEdldCB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlICovCi0gIGRldmljZV9uYW1lID0gKGdjaGFyICopIGdfbWFsbG9jIChwcm9wZXJ0eVNpemUpOwotICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoZGV2aWNlX2lkLAotICAgICAgJmRldmljZU5hbWVBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplLCBkZXZpY2VfbmFtZSk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBnX2ZyZWUgKGRldmljZV9uYW1lKTsKLSAgICBkZXZpY2VfbmFtZSA9IE5VTEw7Ci0gIH0KLQotYmVhY2g6Ci0gIHJldHVybiBkZXZpY2VfbmFtZTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2F1ZGlvX2RldmljZV9oYXNfb3V0cHV0IChBdWRpb0RldmljZUlEIGRldmljZV9pZCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemU7Ci0KLSAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3Mgc3RyZWFtc0FkZHJlc3MgPSB7Ci0gICAga0F1ZGlvRGV2aWNlUHJvcGVydHlTdHJlYW1zLAotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGFTaXplIChkZXZpY2VfaWQsCi0gICAgICAmc3RyZWFtc0FkZHJlc3MsIDAsIE5VTEwsICZwcm9wZXJ0eVNpemUpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmIChwcm9wZXJ0eVNpemUgPT0gMCkgewotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0jaWZkZWYgR1NUX0NPUkVfQVVESU9fREVCVUcKLXN0YXRpYyBBdWRpb0NoYW5uZWxMYXlvdXQgKgotZ3N0X2NvcmVfYXVkaW9fYXVkaW9fZGV2aWNlX2dldF9jaGFubmVsX2xheW91dCAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQsCi0gICAgZ2Jvb2xlYW4gb3V0cHV0KQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgVUludDMyIHByb3BlcnR5U2l6ZSA9IDA7Ci0gIEF1ZGlvQ2hhbm5lbExheW91dCAqbGF5b3V0ID0gTlVMTDsKLSAgQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlIHByb3Bfc2NvcGU7Ci0KLSAgcHJvcF9zY29wZSA9IG91dHB1dCA/IGtBdWRpb0RldmljZVByb3BlcnR5U2NvcGVPdXRwdXQgOgotICAgICAga0F1ZGlvRGV2aWNlUHJvcGVydHlTY29wZUlucHV0OwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGNoYW5uZWxMYXlvdXRBZGRyZXNzID0gewotICAgIGtBdWRpb0RldmljZVByb3BlcnR5UHJlZmVycmVkQ2hhbm5lbExheW91dCwKLSAgICBwcm9wX3Njb3BlLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1hc3RlcgotICB9OwotCi0gIC8qIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBkZWZhdWx0IGNoYW5uZWwgbGF5b3V0IHN0cnVjdHVyZSAqLwotICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YVNpemUgKGRldmljZV9pZCwKLSAgICAgICZjaGFubmVsTGF5b3V0QWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZ2V0IHByZWZlcnJlZCBsYXlvdXQ6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgLyogR2V0IHRoZSBkZWZhdWx0IGNoYW5uZWwgbGF5b3V0IG9mIHRoZSBkZXZpY2UgKi8KLSAgbGF5b3V0ID0gKEF1ZGlvQ2hhbm5lbExheW91dCAqKSBnX21hbGxvYyAocHJvcGVydHlTaXplKTsKLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGEgKGRldmljZV9pZCwKLSAgICAgICZjaGFubmVsTGF5b3V0QWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSwgbGF5b3V0KTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBnZXQgcHJlZmVycmVkIGxheW91dDogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIGdvdG8gZmFpbGVkOwotICB9Ci0KLSAgaWYgKGxheW91dC0+bUNoYW5uZWxMYXlvdXRUYWcgPT0ga0F1ZGlvQ2hhbm5lbExheW91dFRhZ19Vc2VDaGFubmVsQml0bWFwKSB7Ci0gICAgLyogYml0bWFwIGRlZmluZWQgY2hhbm5lbGxheW91dCAqLwotICAgIHN0YXR1cyA9Ci0gICAgICAgIEF1ZGlvRm9ybWF0R2V0UHJvcGVydHkgKGtBdWRpb0Zvcm1hdFByb3BlcnR5X0NoYW5uZWxMYXlvdXRGb3JCaXRtYXAsCi0gICAgICAgIHNpemVvZiAoVUludDMyKSwgJmxheW91dC0+bUNoYW5uZWxCaXRtYXAsICZwcm9wZXJ0eVNpemUsIGxheW91dCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIGdldCBsYXlvdXQgZm9yIGJpdG1hcDogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfQotICB9IGVsc2UgaWYgKGxheW91dC0+bUNoYW5uZWxMYXlvdXRUYWcgIT0KLSAgICAgIGtBdWRpb0NoYW5uZWxMYXlvdXRUYWdfVXNlQ2hhbm5lbERlc2NyaXB0aW9ucykgewotICAgIC8qIGxheW91dHRhZ3MgZGVmaW5lZCBjaGFubmVsbGF5b3V0ICovCi0gICAgc3RhdHVzID0gQXVkaW9Gb3JtYXRHZXRQcm9wZXJ0eSAoa0F1ZGlvRm9ybWF0UHJvcGVydHlfQ2hhbm5lbExheW91dEZvclRhZywKLSAgICAgICAgc2l6ZW9mIChBdWRpb0NoYW5uZWxMYXlvdXRUYWcpLCAmbGF5b3V0LT5tQ2hhbm5lbExheW91dFRhZywKLSAgICAgICAgJnByb3BlcnR5U2l6ZSwgbGF5b3V0KTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZ2V0IGxheW91dCBmb3IgdGFnOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgICBnb3RvIGZhaWxlZDsKLSAgICB9Ci0gIH0KLQotICBnc3RfY29yZV9hdWRpb19kdW1wX2NoYW5uZWxfbGF5b3V0IChsYXlvdXQpOwotCi1iZWFjaDoKLSAgcmV0dXJuIGxheW91dDsKLQotZmFpbGVkOgotICBnX2ZyZWUgKGxheW91dCk7Ci0gIHJldHVybiBOVUxMOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgQXVkaW9TdHJlYW1JRCAqCi1fYXVkaW9fZGV2aWNlX2dldF9zdHJlYW1zIChBdWRpb0RldmljZUlEIGRldmljZV9pZCwgZ2ludCAqIG5zdHJlYW1zKQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgVUludDMyIHByb3BlcnR5U2l6ZSA9IDA7Ci0gIEF1ZGlvU3RyZWFtSUQgKnN0cmVhbXMgPSBOVUxMOwotCi0gIEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIHN0cmVhbXNBZGRyZXNzID0gewotICAgIGtBdWRpb0RldmljZVByb3BlcnR5U3RyZWFtcywKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eVNjb3BlT3V0cHV0LAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1hc3RlcgotICB9OwotCi0gIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhU2l6ZSAoZGV2aWNlX2lkLAotICAgICAgJnN0cmVhbXNBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9XQVJOSU5HICgiZmFpbGVkIGdldHRpbmcgbnVtYmVyIG9mIHN0cmVhbXM6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gICpuc3RyZWFtcyA9IHByb3BlcnR5U2l6ZSAvIHNpemVvZiAoQXVkaW9TdHJlYW1JRCk7Ci0gIHN0cmVhbXMgPSAoQXVkaW9TdHJlYW1JRCAqKSBnX21hbGxvYyAocHJvcGVydHlTaXplKTsKLQotICBpZiAoc3RyZWFtcykgewotICAgIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhIChkZXZpY2VfaWQsCi0gICAgICAgICZzdHJlYW1zQWRkcmVzcywgMCwgTlVMTCwgJnByb3BlcnR5U2l6ZSwgc3RyZWFtcyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgR1NUX1dBUk5JTkcgKCJmYWlsZWQgZ2V0dGluZyB0aGUgbGlzdCBvZiBzdHJlYW1zOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgICBnX2ZyZWUgKHN0cmVhbXMpOwotICAgICAgKm5zdHJlYW1zID0gMDsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBzdHJlYW1zOwotfQotCi1zdGF0aWMgaW5saW5lIGd1aW50Ci1fYXVkaW9fc3RyZWFtX2dldF9sYXRlbmN5IChBdWRpb1N0cmVhbUlEIHN0cmVhbV9pZCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBsYXRlbmN5OwotICBVSW50MzIgcHJvcGVydHlTaXplID0gc2l6ZW9mIChsYXRlbmN5KTsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBsYXRlbmN5QWRkcmVzcyA9IHsKLSAgICBrQXVkaW9TdHJlYW1Qcm9wZXJ0eUxhdGVuY3ksCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlTY29wZUdsb2JhbCwKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYXN0ZXIKLSAgfTsKLQotICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoc3RyZWFtX2lkLAotICAgICAgJmxhdGVuY3lBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplLCAmbGF0ZW5jeSk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfRVJST1IgKCJmYWlsZWQgdG8gZ2V0IGxhdGVuY3k6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICBsYXRlbmN5ID0gLTE7Ci0gIH0KLQotICByZXR1cm4gbGF0ZW5jeTsKLX0KLQotc3RhdGljIGlubGluZSBnYm9vbGVhbgotX2F1ZGlvX3N0cmVhbV9nZXRfY3VycmVudF9mb3JtYXQgKEF1ZGlvU3RyZWFtSUQgc3RyZWFtX2lkLAotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAqIGZvcm1hdCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YgKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik7Ci0KLSAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgZm9ybWF0QWRkcmVzcyA9IHsKLSAgICBrQXVkaW9TdHJlYW1Qcm9wZXJ0eVBoeXNpY2FsRm9ybWF0LAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RHZXRQcm9wZXJ0eURhdGEgKHN0cmVhbV9pZCwKLSAgICAgICZmb3JtYXRBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplLCBmb3JtYXQpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIGdldCBjdXJyZW50IGZvcm1hdDogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fYXVkaW9fc3RyZWFtX3NldF9jdXJyZW50X2Zvcm1hdCAoQXVkaW9TdHJlYW1JRCBzdHJlYW1faWQsCi0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZvcm1hdCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSBzaXplb2YgKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik7Ci0KLSAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgZm9ybWF0QWRkcmVzcyA9IHsKLSAgICBrQXVkaW9TdHJlYW1Qcm9wZXJ0eVBoeXNpY2FsRm9ybWF0LAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgc3RhdHVzID0gQXVkaW9PYmplY3RTZXRQcm9wZXJ0eURhdGEgKHN0cmVhbV9pZCwKLSAgICAgICZmb3JtYXRBZGRyZXNzLCAwLCBOVUxMLCBwcm9wZXJ0eVNpemUsICZmb3JtYXQpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHNldCBjdXJyZW50IGZvcm1hdDogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIEF1ZGlvU3RyZWFtUmFuZ2VkRGVzY3JpcHRpb24gKgotX2F1ZGlvX3N0cmVhbV9nZXRfZm9ybWF0cyAoQXVkaW9TdHJlYW1JRCBzdHJlYW1faWQsIGdpbnQgKiBuZm9ybWF0cykKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIFVJbnQzMiBwcm9wZXJ0eVNpemUgPSAwOwotICBBdWRpb1N0cmVhbVJhbmdlZERlc2NyaXB0aW9uICpmb3JtYXRzID0gTlVMTDsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBmb3JtYXRzQWRkcmVzcyA9IHsKLSAgICBrQXVkaW9TdHJlYW1Qcm9wZXJ0eUF2YWlsYWJsZVBoeXNpY2FsRm9ybWF0cywKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1hc3RlcgotICB9OwotCi0gIHN0YXR1cyA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhU2l6ZSAoc3RyZWFtX2lkLAotICAgICAgJmZvcm1hdHNBZGRyZXNzLCAwLCBOVUxMLCAmcHJvcGVydHlTaXplKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9XQVJOSU5HICgiZmFpbGVkIGdldHRpbmcgbnVtYmVyIG9mIHN0cmVhbSBmb3JtYXRzOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAqbmZvcm1hdHMgPSBwcm9wZXJ0eVNpemUgLyBzaXplb2YgKEF1ZGlvU3RyZWFtUmFuZ2VkRGVzY3JpcHRpb24pOwotCi0gIGZvcm1hdHMgPSAoQXVkaW9TdHJlYW1SYW5nZWREZXNjcmlwdGlvbiAqKSBnX21hbGxvYyAocHJvcGVydHlTaXplKTsKLSAgaWYgKGZvcm1hdHMpIHsKLSAgICBzdGF0dXMgPSBBdWRpb09iamVjdEdldFByb3BlcnR5RGF0YSAoc3RyZWFtX2lkLAotICAgICAgICAmZm9ybWF0c0FkZHJlc3MsIDAsIE5VTEwsICZwcm9wZXJ0eVNpemUsIGZvcm1hdHMpOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiZmFpbGVkIGdldHRpbmcgdGhlIGxpc3Qgb2Ygc3RyZWFtIGZvcm1hdHM6ICVkIiwKLSAgICAgICAgICAoaW50KSBzdGF0dXMpOwotICAgICAgZ19mcmVlIChmb3JtYXRzKTsKLSAgICAgICpuZm9ybWF0cyA9IDA7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGZvcm1hdHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9hdWRpb19zdHJlYW1faXNfc3BkaWZfYXZhaWwgKEF1ZGlvU3RyZWFtSUQgc3RyZWFtX2lkKQotewotICBBdWRpb1N0cmVhbVJhbmdlZERlc2NyaXB0aW9uICpmb3JtYXRzOwotICBnaW50IGksIG5mb3JtYXRzID0gMDsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgZm9ybWF0cyA9IF9hdWRpb19zdHJlYW1fZ2V0X2Zvcm1hdHMgKHN0cmVhbV9pZCwgJm5mb3JtYXRzKTsKLSAgR1NUX0RFQlVHICgiZm91bmQgJWQgc3RyZWFtIGZvcm1hdHMiLCBuZm9ybWF0cyk7Ci0KLSAgaWYgKGZvcm1hdHMpIHsKLSAgICBHU1RfREVCVUcgKCJmb3JtYXRzIHN1cHBvcnRlZCBvbiBzdHJlYW0gSUQ6ICV1IiwgKHVuc2lnbmVkKSBzdHJlYW1faWQpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG5mb3JtYXRzOyBpKyspIHsKLSAgICAgIEdTVF9ERUJVRyAoIiAgIiBDT1JFX0FVRElPX0ZPUk1BVCwKLSAgICAgICAgICBDT1JFX0FVRElPX0ZPUk1BVF9BUkdTIChmb3JtYXRzW2ldLm1Gb3JtYXQpKTsKLQotICAgICAgaWYgKENPUkVfQVVESU9fRk9STUFUX0lTX1NQRElGIChmb3JtYXRzW2ldKSkgewotICAgICAgICByZXMgPSBUUlVFOwotICAgICAgfQotICAgIH0KLSAgICBnX2ZyZWUgKGZvcm1hdHMpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIE9TU3RhdHVzCi1fYXVkaW9fc3RyZWFtX2Zvcm1hdF9saXN0ZW5lciAoQXVkaW9PYmplY3RJRCBpbk9iamVjdElELAotICAgIFVJbnQzMiBpbk51bWJlckFkZHJlc3NlcywKLSAgICBjb25zdCBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBpbkFkZHJlc3Nlc1tdLCB2b2lkICppbkNsaWVudERhdGEpCi17Ci0gIE9TU3RhdHVzIHN0YXR1cyA9IG5vRXJyOwotICBndWludCBpOwotICBQcm9wZXJ0eU11dGV4ICpwcm9wX211dGV4ID0gaW5DbGllbnREYXRhOwotCi0gIGZvciAoaSA9IDA7IGkgPCBpbk51bWJlckFkZHJlc3NlczsgaSsrKSB7Ci0gICAgaWYgKGluQWRkcmVzc2VzW2ldLm1TZWxlY3RvciA9PSBrQXVkaW9TdHJlYW1Qcm9wZXJ0eVBoeXNpY2FsRm9ybWF0KSB7Ci0gICAgICBnX211dGV4X2xvY2sgKCZwcm9wX211dGV4LT5sb2NrKTsKLSAgICAgIGdfY29uZF9zaWduYWwgKCZwcm9wX211dGV4LT5jb25kKTsKLSAgICAgIGdfbXV0ZXhfdW5sb2NrICgmcHJvcF9tdXRleC0+bG9jayk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIChzdGF0dXMpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV9hdWRpb19zdHJlYW1fY2hhbmdlX2Zvcm1hdCAoQXVkaW9TdHJlYW1JRCBzdHJlYW1faWQsCi0gICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZvcm1hdCkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIGdpbnQgaTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBjZm9ybWF0OwotICBQcm9wZXJ0eU11dGV4IHByb3BfbXV0ZXg7Ci0KLSAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgZm9ybWF0QWRkcmVzcyA9IHsKLSAgICBrQXVkaW9TdHJlYW1Qcm9wZXJ0eVBoeXNpY2FsRm9ybWF0LAotICAgIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFzdGVyCi0gIH07Ci0KLSAgR1NUX0RFQlVHICgic2V0dGluZyBzdHJlYW0gZm9ybWF0OiAiIENPUkVfQVVESU9fRk9STUFULAotICAgICAgQ09SRV9BVURJT19GT1JNQVRfQVJHUyAoZm9ybWF0KSk7Ci0KLSAgLyogQ29uZGl0aW9uIGJlY2F1c2UgU2V0UHJvcGVydHkgaXMgYXN5bmNocm9ub3VzICovCi0gIGdfbXV0ZXhfaW5pdCAoJnByb3BfbXV0ZXgubG9jayk7Ci0gIGdfY29uZF9pbml0ICgmcHJvcF9tdXRleC5jb25kKTsKLQotICBnX211dGV4X2xvY2sgKCZwcm9wX211dGV4LmxvY2spOwotCi0gIC8qIEluc3RhbGwgdGhlIHByb3BlcnR5IGxpc3RlbmVyIHRvIHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9ucyAqLwotICBzdGF0dXMgPSBBdWRpb09iamVjdEFkZFByb3BlcnR5TGlzdGVuZXIgKHN0cmVhbV9pZCwgJmZvcm1hdEFkZHJlc3MsCi0gICAgICBfYXVkaW9fc3RyZWFtX2Zvcm1hdF9saXN0ZW5lciwgKHZvaWQgKikgJnByb3BfbXV0ZXgpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SICgiQXVkaW9PYmplY3RBZGRQcm9wZXJ0eUxpc3RlbmVyIGZhaWxlZDogJWQiLCAoaW50KSBzdGF0dXMpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIENoYW5nZSB0aGUgZm9ybWF0ICovCi0gIGlmICghX2F1ZGlvX3N0cmVhbV9zZXRfY3VycmVudF9mb3JtYXQgKHN0cmVhbV9pZCwgZm9ybWF0KSkgewotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIC8qIFRoZSBBdWRpb09iamVjdFNldFByb3BlcnR5IGlzIG5vdCBvbmx5IGFzeW5jaHJvbm91cwotICAgKiBpdCBpcyBhbHNvIG5vdCBhdG9taWMgaW4gaXRzIGJlaGF2aW91ci4KLSAgICogVGhlcmVmb3JlIHdlIGNoZWNrIDQgdGltZXMgYmVmb3JlIHdlIHJlYWxseSBnaXZlIHVwLiAqLwotICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgR1RpbWVWYWwgdGltZW91dDsKLQotICAgIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnRpbWVvdXQpOwotICAgIGdfdGltZV92YWxfYWRkICgmdGltZW91dCwgMjUwMDAwKTsKLQotICAgIGlmICghZ19jb25kX3dhaXRfdW50aWwgKCZwcm9wX211dGV4LmNvbmQsICZwcm9wX211dGV4LmxvY2ssIHRpbWVvdXQudHZfc2VjKSkgewotICAgICAgR1NUX0xPRyAoInRpbWVvdXQuLi4iKTsKLSAgICB9Ci0KLSAgICBpZiAoX2F1ZGlvX3N0cmVhbV9nZXRfY3VycmVudF9mb3JtYXQgKHN0cmVhbV9pZCwgJmNmb3JtYXQpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJjdXJyZW50IHN0cmVhbSBmb3JtYXQ6ICIgQ09SRV9BVURJT19GT1JNQVQsCi0gICAgICAgICAgQ09SRV9BVURJT19GT1JNQVRfQVJHUyAoY2Zvcm1hdCkpOwotCi0gICAgICBpZiAoY2Zvcm1hdC5tU2FtcGxlUmF0ZSA9PSBmb3JtYXQubVNhbXBsZVJhdGUgJiYKLSAgICAgICAgICBjZm9ybWF0Lm1Gb3JtYXRJRCA9PSBmb3JtYXQubUZvcm1hdElEICYmCi0gICAgICAgICAgY2Zvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID09IGZvcm1hdC5tRnJhbWVzUGVyUGFja2V0KSB7Ci0gICAgICAgIC8qIFRoZSByaWdodCBmb3JtYXQgaXMgbm93IGFjdGl2ZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoY2Zvcm1hdC5tU2FtcGxlUmF0ZSAhPSBmb3JtYXQubVNhbXBsZVJhdGUgfHwKLSAgICAgIGNmb3JtYXQubUZvcm1hdElEICE9IGZvcm1hdC5tRm9ybWF0SUQgfHwKLSAgICAgIGNmb3JtYXQubUZyYW1lc1BlclBhY2tldCAhPSBmb3JtYXQubUZyYW1lc1BlclBhY2tldCkgewotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIHJldCA9IFRSVUU7Ci0KLWRvbmU6Ci0gIC8qIFJlbW92aW5nIHRoZSBwcm9wZXJ0eSBsaXN0ZW5lciAqLwotICBzdGF0dXMgPSBBdWRpb09iamVjdFJlbW92ZVByb3BlcnR5TGlzdGVuZXIgKHN0cmVhbV9pZCwKLSAgICAgICZmb3JtYXRBZGRyZXNzLCBfYXVkaW9fc3RyZWFtX2Zvcm1hdF9saXN0ZW5lciwgKHZvaWQgKikgJnByb3BfbXV0ZXgpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SICgiQXVkaW9PYmplY3RSZW1vdmVQcm9wZXJ0eUxpc3RlbmVyIGZhaWxlZDogJWQiLCAoaW50KSBzdGF0dXMpOwotICB9Ci0gIC8qIERlc3Ryb3kgdGhlIGxvY2sgYW5kIGNvbmRpdGlvbiAqLwotICBnX211dGV4X3VubG9jayAoJnByb3BfbXV0ZXgubG9jayk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZwcm9wX211dGV4LmxvY2spOwotICBnX2NvbmRfY2xlYXIgKCZwcm9wX211dGV4LmNvbmQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBPU1N0YXR1cwotX2F1ZGlvX3N0cmVhbV9oYXJkd2FyZV9jaGFuZ2VkX2xpc3RlbmVyIChBdWRpb09iamVjdElEIGluT2JqZWN0SUQsCi0gICAgVUludDMyIGluTnVtYmVyQWRkcmVzc2VzLAotICAgIGNvbnN0IEF1ZGlvT2JqZWN0UHJvcGVydHlBZGRyZXNzIGluQWRkcmVzc2VzW10sIHZvaWQgKmluQ2xpZW50RGF0YSkKLXsKLSAgT1NTdGF0dXMgc3RhdHVzID0gbm9FcnI7Ci0gIGd1aW50IGk7Ci0gIEdzdENvcmVBdWRpbyAqY29yZV9hdWRpbyA9IGluQ2xpZW50RGF0YTsKLQotICBmb3IgKGkgPSAwOyBpIDwgaW5OdW1iZXJBZGRyZXNzZXM7IGkrKykgewotICAgIGlmIChpbkFkZHJlc3Nlc1tpXS5tU2VsZWN0b3IgPT0ga0F1ZGlvRGV2aWNlUHJvcGVydHlEZXZpY2VIYXNDaGFuZ2VkKSB7Ci0gICAgICBpZiAoIWdzdF9jb3JlX2F1ZGlvX2F1ZGlvX2RldmljZV9pc19zcGRpZl9hdmFpbCAoY29yZV9hdWRpby0+ZGV2aWNlX2lkKSkgewotICAgICAgICBHc3RPc3hBdWRpb1NpbmsgKnNpbmsgPQotICAgICAgICAgICAgR1NUX09TWF9BVURJT19TSU5LIChHU1RfT0JKRUNUX1BBUkVOVCAoY29yZV9hdWRpby0+b3N4YnVmKSk7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAgICAgKCJTUERJRiBvdXRwdXQgbm8gbG9uZ2VyIGF2YWlsYWJsZSIpLAotICAgICAgICAgICAgKCJBdWRpbyBkZXZpY2UgaXMgcmVwb3J0aW5nIHRoYXQgU1BESUYgb3V0cHV0IGlzbid0IGF2YWlsYWJsZSIpKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICByZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9tb25pdG9yaXplX3NwZGlmIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBwcm9wQWRkcmVzcyA9IHsKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eURldmljZUhhc0NoYW5nZWQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlTY29wZUdsb2JhbCwKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYXN0ZXIKLSAgfTsKLQotICAvKiBJbnN0YWxsIHRoZSBwcm9wZXJ0eSBsaXN0ZW5lciAqLwotICBzdGF0dXMgPSBBdWRpb09iamVjdEFkZFByb3BlcnR5TGlzdGVuZXIgKGNvcmVfYXVkaW8tPmRldmljZV9pZCwKLSAgICAgICZwcm9wQWRkcmVzcywgX2F1ZGlvX3N0cmVhbV9oYXJkd2FyZV9jaGFuZ2VkX2xpc3RlbmVyLAotICAgICAgKHZvaWQgKikgY29yZV9hdWRpbyk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsCi0gICAgICAgICJBdWRpb09iamVjdEFkZFByb3BlcnR5TGlzdGVuZXIgZmFpbGVkOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0ID0gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fdW5tb25pdG9yaXplX3NwZGlmIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBPU1N0YXR1cyBzdGF0dXMgPSBub0VycjsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBwcm9wQWRkcmVzcyA9IHsKLSAgICBrQXVkaW9EZXZpY2VQcm9wZXJ0eURldmljZUhhc0NoYW5nZWQsCi0gICAga0F1ZGlvT2JqZWN0UHJvcGVydHlTY29wZUdsb2JhbCwKLSAgICBrQXVkaW9PYmplY3RQcm9wZXJ0eUVsZW1lbnRNYXN0ZXIKLSAgfTsKLQotICAvKiBSZW1vdmUgdGhlIHByb3BlcnR5IGxpc3RlbmVyICovCi0gIHN0YXR1cyA9IEF1ZGlvT2JqZWN0UmVtb3ZlUHJvcGVydHlMaXN0ZW5lciAoY29yZV9hdWRpby0+ZGV2aWNlX2lkLAotICAgICAgJnByb3BBZGRyZXNzLCBfYXVkaW9fc3RyZWFtX2hhcmR3YXJlX2NoYW5nZWRfbGlzdGVuZXIsCi0gICAgICAodm9pZCAqKSBjb3JlX2F1ZGlvKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwKLSAgICAgICAgIkF1ZGlvT2JqZWN0UmVtb3ZlUHJvcGVydHlMaXN0ZW5lciBmYWlsZWQ6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9vcGVuX3NwZGlmIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgcGlkX3QgaG9nX3BpZCwgb3duX3BpZCA9IGdldHBpZCAoKTsKLQotICAvKiBXZSBuZWVkIHRoZSBkZXZpY2UgaW4gZXhjbHVzaXZlIGFuZCBkaXNhYmxlIHRoZSBtaXhpbmcgKi8KLSAgaG9nX3BpZCA9IF9hdWRpb19kZXZpY2VfZ2V0X2hvZyAoY29yZV9hdWRpby0+ZGV2aWNlX2lkKTsKLQotICBpZiAoaG9nX3BpZCAhPSAtMSAmJiBob2dfcGlkICE9IG93bl9waWQpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLAotICAgICAgICAiZGV2aWNlIGlzIGN1cnJlbnRseSBpbiB1c2UgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIGlmIChfYXVkaW9fZGV2aWNlX3NldF9ob2cgKGNvcmVfYXVkaW8tPmRldmljZV9pZCwgb3duX3BpZCkpIHsKLSAgICBjb3JlX2F1ZGlvLT5ob2dfcGlkID0gb3duX3BpZDsKLSAgfQotCi0gIGlmIChfYXVkaW9fZGV2aWNlX3NldF9taXhpbmcgKGNvcmVfYXVkaW8tPmRldmljZV9pZCwgRkFMU0UpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoY29yZV9hdWRpbywgImRpc2FibGVkIG1peGluZyBvbiB0aGUgZGV2aWNlIik7Ci0gICAgY29yZV9hdWRpby0+ZGlzYWJsZWRfbWl4aW5nID0gVFJVRTsKLSAgfQotCi0gIHJlcyA9IFRSVUU7Ci1kb25lOgotICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1fY2xvc2Vfc3BkaWYgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pCi17Ci0gIHBpZF90IGhvZ19waWQ7Ci0KLSAgX3VubW9uaXRvcml6ZV9zcGRpZiAoY29yZV9hdWRpbyk7Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPnJldmVydF9mb3JtYXQpIHsKLSAgICBpZiAoIV9hdWRpb19zdHJlYW1fY2hhbmdlX2Zvcm1hdCAoY29yZV9hdWRpby0+c3RyZWFtX2lkLAotICAgICAgICAgICAgY29yZV9hdWRpby0+b3JpZ2luYWxfZm9ybWF0KSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsICJGb3JtYXQgcmV2ZXJ0IGZhaWxlZCIpOwotICAgIH0KLSAgICBjb3JlX2F1ZGlvLT5yZXZlcnRfZm9ybWF0ID0gRkFMU0U7Ci0gIH0KLQotICBpZiAoY29yZV9hdWRpby0+ZGlzYWJsZWRfbWl4aW5nKSB7Ci0gICAgX2F1ZGlvX2RldmljZV9zZXRfbWl4aW5nIChjb3JlX2F1ZGlvLT5kZXZpY2VfaWQsIFRSVUUpOwotICAgIGNvcmVfYXVkaW8tPmRpc2FibGVkX21peGluZyA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPmhvZ19waWQgIT0gLTEpIHsKLSAgICBob2dfcGlkID0gX2F1ZGlvX2RldmljZV9nZXRfaG9nIChjb3JlX2F1ZGlvLT5kZXZpY2VfaWQpOwotICAgIGlmIChob2dfcGlkID09IGdldHBpZCAoKSkgewotICAgICAgaWYgKF9hdWRpb19kZXZpY2Vfc2V0X2hvZyAoY29yZV9hdWRpby0+ZGV2aWNlX2lkLCAtMSkpIHsKLSAgICAgICAgY29yZV9hdWRpby0+aG9nX3BpZCA9IC0xOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgT1NTdGF0dXMKLV9pb19wcm9jX3NwZGlmIChBdWRpb0RldmljZUlEIGluRGV2aWNlLAotICAgIGNvbnN0IEF1ZGlvVGltZVN0YW1wICogaW5Ob3csCi0gICAgY29uc3Qgdm9pZCAqaW5JbnB1dERhdGEsCi0gICAgY29uc3QgQXVkaW9UaW1lU3RhbXAgKiBpblRpbWVzdGFtcCwKLSAgICBBdWRpb0J1ZmZlckxpc3QgKiBidWZmZXJMaXN0LAotICAgIGNvbnN0IEF1ZGlvVGltZVN0YW1wICogaW5PdXRwdXRUaW1lLCBHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBPU1N0YXR1cyBzdGF0dXM7Ci0KLSAgc3RhdHVzID0gY29yZV9hdWRpby0+ZWxlbWVudC0+aW9fcHJvYyAoY29yZV9hdWRpby0+b3N4YnVmLCBOVUxMLCBpblRpbWVzdGFtcCwKLSAgICAgIDAsIDAsIGJ1ZmZlckxpc3QpOwotCi0gIHJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZ2Jvb2xlYW4KLV9hY3F1aXJlX3NwZGlmIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gZm9ybWF0KQotewotICBBdWRpb1N0cmVhbUlEICpzdHJlYW1zID0gTlVMTDsKLSAgZ2ludCBpLCBqLCBuc3RyZWFtcyA9IDA7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGlmICghX29wZW5fc3BkaWYgKGNvcmVfYXVkaW8pKQotICAgIGdvdG8gZG9uZTsKLQotICBzdHJlYW1zID0gX2F1ZGlvX2RldmljZV9nZXRfc3RyZWFtcyAoY29yZV9hdWRpby0+ZGV2aWNlX2lkLCAmbnN0cmVhbXMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBuc3RyZWFtczsgaSsrKSB7Ci0gICAgQXVkaW9TdHJlYW1SYW5nZWREZXNjcmlwdGlvbiAqZm9ybWF0cyA9IE5VTEw7Ci0gICAgZ2ludCBuZm9ybWF0cyA9IDA7Ci0KLSAgICBmb3JtYXRzID0gX2F1ZGlvX3N0cmVhbV9nZXRfZm9ybWF0cyAoc3RyZWFtc1tpXSwgJm5mb3JtYXRzKTsKLQotICAgIGlmIChmb3JtYXRzKSB7Ci0gICAgICBnYm9vbGVhbiBpc19zcGRpZiA9IEZBTFNFOwotCi0gICAgICAvKiBDaGVjayBpZiBvbmUgb2YgdGhlIHN1cHBvcnRlZCBmb3JtYXRzIGlzIGEgZGlnaXRhbCBmb3JtYXQgKi8KLSAgICAgIGZvciAoaiA9IDA7IGogPCBuZm9ybWF0czsgaisrKSB7Ci0gICAgICAgIGlmIChDT1JFX0FVRElPX0ZPUk1BVF9JU19TUERJRiAoZm9ybWF0c1tqXSkpIHsKLSAgICAgICAgICBpc19zcGRpZiA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGlzX3NwZGlmKSB7Ci0gICAgICAgIC8qIGlmIHRoaXMgc3RyZWFtIHN1cHBvcnRzIGEgZGlnaXRhbCAoY2FjMykgZm9ybWF0LAotICAgICAgICAgKiB0aGVuIGdvIHNldCBpdC4gKi8KLSAgICAgICAgZ2ludCByZXF1ZXN0ZWRfcmF0ZV9mb3JtYXQgPSAtMTsKLSAgICAgICAgZ2ludCBjdXJyZW50X3JhdGVfZm9ybWF0ID0gLTE7Ci0gICAgICAgIGdpbnQgYmFja3VwX3JhdGVfZm9ybWF0ID0gLTE7Ci0KLSAgICAgICAgY29yZV9hdWRpby0+c3RyZWFtX2lkID0gc3RyZWFtc1tpXTsKLSAgICAgICAgY29yZV9hdWRpby0+c3RyZWFtX2lkeCA9IGk7Ci0KLSAgICAgICAgaWYgKCFjb3JlX2F1ZGlvLT5yZXZlcnRfZm9ybWF0KSB7Ci0gICAgICAgICAgaWYgKCFfYXVkaW9fc3RyZWFtX2dldF9jdXJyZW50X2Zvcm1hdCAoY29yZV9hdWRpby0+c3RyZWFtX2lkLAotICAgICAgICAgICAgICAgICAgJmNvcmVfYXVkaW8tPm9yaWdpbmFsX2Zvcm1hdCkpIHsKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLAotICAgICAgICAgICAgICAgICJmb3JtYXQgY291bGQgbm90IGJlIHNhdmVkIik7Ci0gICAgICAgICAgICBnX2ZyZWUgKGZvcm1hdHMpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNvcmVfYXVkaW8tPnJldmVydF9mb3JtYXQgPSBUUlVFOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChqID0gMDsgaiA8IG5mb3JtYXRzOyBqKyspIHsKLSAgICAgICAgICBpZiAoQ09SRV9BVURJT19GT1JNQVRfSVNfU1BESUYgKGZvcm1hdHNbal0pKSB7Ci0gICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLAotICAgICAgICAgICAgICAgICJmb3VuZCBzdHJlYW0gZm9ybWF0OiAiIENPUkVfQVVESU9fRk9STUFULAotICAgICAgICAgICAgICAgIENPUkVfQVVESU9fRk9STUFUX0FSR1MgKGZvcm1hdHNbal0ubUZvcm1hdCkpOwotCi0gICAgICAgICAgICBpZiAoZm9ybWF0c1tqXS5tRm9ybWF0Lm1TYW1wbGVSYXRlID09IGZvcm1hdC5tU2FtcGxlUmF0ZSkgewotICAgICAgICAgICAgICByZXF1ZXN0ZWRfcmF0ZV9mb3JtYXQgPSBqOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0c1tqXS5tRm9ybWF0Lm1TYW1wbGVSYXRlID09Ci0gICAgICAgICAgICAgICAgY29yZV9hdWRpby0+b3JpZ2luYWxfZm9ybWF0Lm1TYW1wbGVSYXRlKSB7Ci0gICAgICAgICAgICAgIGN1cnJlbnRfcmF0ZV9mb3JtYXQgPSBqOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgaWYgKGJhY2t1cF9yYXRlX2Zvcm1hdCA8IDAgfHwKLSAgICAgICAgICAgICAgICAgIGZvcm1hdHNbal0ubUZvcm1hdC5tU2FtcGxlUmF0ZSA+Ci0gICAgICAgICAgICAgICAgICBmb3JtYXRzW2JhY2t1cF9yYXRlX2Zvcm1hdF0ubUZvcm1hdC5tU2FtcGxlUmF0ZSkgewotICAgICAgICAgICAgICAgIGJhY2t1cF9yYXRlX2Zvcm1hdCA9IGo7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVxdWVzdGVkX3JhdGVfZm9ybWF0ID49IDApIHsKLSAgICAgICAgICAvKiBXZSBwcmVmZXIgdG8gb3V0cHV0IGF0IHRoZSByYXRlIG9mIHRoZSBvcmlnaW5hbCBhdWRpbyAqLwotICAgICAgICAgIGNvcmVfYXVkaW8tPnN0cmVhbV9mb3JtYXQgPSBmb3JtYXRzW3JlcXVlc3RlZF9yYXRlX2Zvcm1hdF0ubUZvcm1hdDsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50X3JhdGVfZm9ybWF0ID49IDApIHsKLSAgICAgICAgICAvKiBJZiBub3QgcG9zc2libGUsIHdlIHdpbGwgdHJ5IHRvIHVzZSB0aGUgY3VycmVudCByYXRlICovCi0gICAgICAgICAgY29yZV9hdWRpby0+c3RyZWFtX2Zvcm1hdCA9IGZvcm1hdHNbY3VycmVudF9yYXRlX2Zvcm1hdF0ubUZvcm1hdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBBbmQgaWYgd2UgaGF2ZSB0bywgYW55IGRpZ2l0YWwgZm9ybWF0IHdpbGwgYmUganVzdAotICAgICAgICAgICAqIGZpbmUgKGhpZ2hlc3QgcmF0ZSBwb3NzaWJsZSkgKi8KLSAgICAgICAgICBjb3JlX2F1ZGlvLT5zdHJlYW1fZm9ybWF0ID0gZm9ybWF0c1tiYWNrdXBfcmF0ZV9mb3JtYXRdLm1Gb3JtYXQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdfZnJlZSAoZm9ybWF0cyk7Ci0gICAgfQotICB9Ci0gIGdfZnJlZSAoc3RyZWFtcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoY29yZV9hdWRpbywKLSAgICAgICJvcmlnaW5hbCBzdHJlYW0gZm9ybWF0OiAiIENPUkVfQVVESU9fRk9STUFULAotICAgICAgQ09SRV9BVURJT19GT1JNQVRfQVJHUyAoY29yZV9hdWRpby0+b3JpZ2luYWxfZm9ybWF0KSk7Ci0KLSAgaWYgKCFfYXVkaW9fc3RyZWFtX2NoYW5nZV9mb3JtYXQgKGNvcmVfYXVkaW8tPnN0cmVhbV9pZCwKLSAgICAgICAgICBjb3JlX2F1ZGlvLT5zdHJlYW1fZm9ybWF0KSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgcmV0ID0gVFJVRTsKLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1fcmVtb3ZlX3JlbmRlcl9zcGRpZl9jYWxsYmFjayAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgT1NTdGF0dXMgc3RhdHVzOwotCi0gIC8qIERlYWN0aXZhdGUgdGhlIHJlbmRlciBjYWxsYmFjayBieSBjYWxsaW5nCi0gICAqIEF1ZGlvRGV2aWNlRGVzdHJveUlPUHJvY0lEICovCi0gIHN0YXR1cyA9Ci0gICAgICBBdWRpb0RldmljZURlc3Ryb3lJT1Byb2NJRCAoY29yZV9hdWRpby0+ZGV2aWNlX2lkLCBjb3JlX2F1ZGlvLT5wcm9jSUQpOwotICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLAotICAgICAgICAiQXVkaW9EZXZpY2VEZXN0cm95SU9Qcm9jSUQgZmFpbGVkOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLAotICAgICAgIm9zeCByaW5nIGJ1ZmZlciByZW1vdmVkIGlvcHJvYyBJRDogJXAgZGV2aWNlX2lkICVsdSIsCi0gICAgICBjb3JlX2F1ZGlvLT5wcm9jSUQsIChndWxvbmcpIGNvcmVfYXVkaW8tPmRldmljZV9pZCk7Ci0KLSAgLyogV2UncmUgZGVhY3RpdmF0ZWQuLiAqLwotICBjb3JlX2F1ZGlvLT5wcm9jSUQgPSAwOwotICBjb3JlX2F1ZGlvLT5pb19wcm9jX25lZWRzX2RlYWN0aXZhdGlvbiA9IEZBTFNFOwotICBjb3JlX2F1ZGlvLT5pb19wcm9jX2FjdGl2ZSA9IEZBTFNFOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1faW9fcHJvY19zcGRpZl9zdGFydCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgT1NFcnIgc3RhdHVzOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGNvcmVfYXVkaW8sCi0gICAgICAib3N4IHJpbmcgYnVmZmVyIHN0YXJ0IGlvcHJvYyBJRDogJXAgZGV2aWNlX2lkICVsdSIsCi0gICAgICBjb3JlX2F1ZGlvLT5wcm9jSUQsIChndWxvbmcpIGNvcmVfYXVkaW8tPmRldmljZV9pZCk7Ci0KLSAgaWYgKCFjb3JlX2F1ZGlvLT5pb19wcm9jX2FjdGl2ZSkgewotICAgIC8qIEFkZCBJT1Byb2MgY2FsbGJhY2sgKi8KLSAgICBzdGF0dXMgPSBBdWRpb0RldmljZUNyZWF0ZUlPUHJvY0lEIChjb3JlX2F1ZGlvLT5kZXZpY2VfaWQsCi0gICAgICAgIChBdWRpb0RldmljZUlPUHJvYykgX2lvX3Byb2Nfc3BkaWYsCi0gICAgICAgICh2b2lkICopIGNvcmVfYXVkaW8sICZjb3JlX2F1ZGlvLT5wcm9jSUQpOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwKLSAgICAgICAgICAiOkF1ZGlvRGV2aWNlQ3JlYXRlSU9Qcm9jSUQgZmFpbGVkOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIGNvcmVfYXVkaW8tPmlvX3Byb2NfYWN0aXZlID0gVFJVRTsKLSAgfQotCi0gIGNvcmVfYXVkaW8tPmlvX3Byb2NfbmVlZHNfZGVhY3RpdmF0aW9uID0gRkFMU0U7Ci0KLSAgLyogU3RhcnQgZGV2aWNlICovCi0gIHN0YXR1cyA9IEF1ZGlvRGV2aWNlU3RhcnQgKGNvcmVfYXVkaW8tPmRldmljZV9pZCwgY29yZV9hdWRpby0+cHJvY0lEKTsKLSAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwKLSAgICAgICAgIkF1ZGlvRGV2aWNlU3RhcnQgZmFpbGVkOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIGdib29sZWFuCi1faW9fcHJvY19zcGRpZl9zdG9wIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBPU0VyciBzdGF0dXM7Ci0KLSAgLyogU3RvcCBkZXZpY2UgKi8KLSAgc3RhdHVzID0gQXVkaW9EZXZpY2VTdG9wIChjb3JlX2F1ZGlvLT5kZXZpY2VfaWQsIGNvcmVfYXVkaW8tPnByb2NJRCk7Ci0gIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb3JlX2F1ZGlvLT5vc3hidWYsCi0gICAgICAgICJBdWRpb0RldmljZVN0b3AgZmFpbGVkOiAlZCIsIChpbnQpIHN0YXR1cyk7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLAotICAgICAgIm9zeCByaW5nIGJ1ZmZlciBzdG9wIGlvcHJvYyBJRDogJXAgZGV2aWNlX2lkICVsdSIsCi0gICAgICBjb3JlX2F1ZGlvLT5wcm9jSUQsIChndWxvbmcpIGNvcmVfYXVkaW8tPmRldmljZV9pZCk7Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPmlvX3Byb2NfYWN0aXZlKSB7Ci0gICAgX3JlbW92ZV9yZW5kZXJfc3BkaWZfY2FsbGJhY2sgKGNvcmVfYXVkaW8pOwotICB9Ci0KLSAgX2Nsb3NlX3NwZGlmIChjb3JlX2F1ZGlvKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgSW1wbGVtZW50YXRpb24gICAgKgotICoqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fb3Blbl9pbXBsIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBnYm9vbGVhbiByZXQ7Ci0KLSAgLyogVGhlIGZvbGxvd2luZyBpcyBuZWVkZWQgdG8gaW5zdHJ1Y3QgSEFMIHRvIGNyZWF0ZSB0aGVpciBvd24KLSAgICogdGhyZWFkIHRvIGhhbmRsZSB0aGUgbm90aWZpY2F0aW9ucy4gKi8KLSAgX2F1ZGlvX3N5c3RlbV9zZXRfcnVubG9vcCAoTlVMTCk7Ci0KLSAgLyogQ3JlYXRlIGEgSEFMT3V0cHV0IEF1ZGlvVW5pdC4KLSAgICogVGhpcyBpcyB0aGUgbG93ZXN0LWxldmVsIG91dHB1dCBBUEkgdGhhdCBpcyBhY3R1YWxseSBzZW5zaWJseQotICAgKiB1c2FibGUgKHRoZSBsb3dlciBsZXZlbCBvbmVzIHJlcXVpcmUgdGhhdCB5b3UgZG8KLSAgICogY2hhbm5lbC1yZW1hcHBpbmcgeW91cnNlbGYsIGFuZCB0aGUgQ29yZUF1ZGlvIGNoYW5uZWwgbWFwcGluZwotICAgKiBpcyBzdWZmaWNpZW50bHkgY29tcGxleCB0aGF0IGRvaW5nIHNvIHdvdWxkIGJlIHZlcnkgZGlmZmljdWx0KQotICAgKgotICAgKiBOb3RlIHRoYXQgZm9yIGlucHV0IHdlIHJlcXVlc3QgYW4gb3V0cHV0IHVuaXQgZXZlbiB0aG91Z2gKLSAgICogd2Ugd2lsbCBkbyBpbnB1dCB3aXRoIGl0LgotICAgKiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS90ZWNobm90ZXMvdG4yMDAyL3RuMjA5MS5odG1sCi0gICAqLwotICByZXQgPSBnc3RfY29yZV9hdWRpb19vcGVuX2RldmljZSAoY29yZV9hdWRpbywga0F1ZGlvVW5pdFN1YlR5cGVfSEFMT3V0cHV0LAotICAgICAgIkhBTE91dHB1dCIpOwotICBpZiAoIXJldCkgewotICAgIEdTVF9ERUJVRyAoIkNvdWxkIG5vdCBvcGVuIGRldmljZSIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIHJldCA9IGdzdF9jb3JlX2F1ZGlvX2JpbmRfZGV2aWNlIChjb3JlX2F1ZGlvKTsKLSAgaWYgKCFyZXQpIHsKLSAgICBHU1RfREVCVUcgKCJDb3VsZCBub3QgYmluZCBkZXZpY2UiKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29yZV9hdWRpb19zdGFydF9wcm9jZXNzaW5nX2ltcGwgKEdzdENvcmVBdWRpbyAqIGNvcmVfYXVkaW8pCi17Ci0gIGlmIChjb3JlX2F1ZGlvLT5pc19wYXNzdGhyb3VnaCkgewotICAgIHJldHVybiBfaW9fcHJvY19zcGRpZl9zdGFydCAoY29yZV9hdWRpbyk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX2lvX3Byb2Nfc3RhcnQgKGNvcmVfYXVkaW8pOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fcGF1c2VfcHJvY2Vzc2luZ19pbXBsIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBpZiAoY29yZV9hdWRpby0+aXNfcGFzc3Rocm91Z2gpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLAotICAgICAgICAib3N4IHJpbmcgYnVmZmVyIHBhdXNlIGlvcHJvYyBJRDogJXAgZGV2aWNlX2lkICVsdSIsCi0gICAgICAgIGNvcmVfYXVkaW8tPnByb2NJRCwgKGd1bG9uZykgY29yZV9hdWRpby0+ZGV2aWNlX2lkKTsKLQotICAgIGlmIChjb3JlX2F1ZGlvLT5pb19wcm9jX2FjdGl2ZSkgewotICAgICAgX3JlbW92ZV9yZW5kZXJfc3BkaWZfY2FsbGJhY2sgKGNvcmVfYXVkaW8pOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLAotICAgICAgICAib3N4IHJpbmcgYnVmZmVyIHBhdXNlIGlvcHJvYzogJXAgZGV2aWNlX2lkICVsdSIsCi0gICAgICAgIGNvcmVfYXVkaW8tPmVsZW1lbnQtPmlvX3Byb2MsIChndWxvbmcpIGNvcmVfYXVkaW8tPmRldmljZV9pZCk7Ci0gICAgaWYgKGNvcmVfYXVkaW8tPmlvX3Byb2NfYWN0aXZlKSB7Ci0gICAgICAvKiBDb3JlQXVkaW8gaXNuJ3QgdGhyZWFkc2FmZSBlbm91Z2ggdG8gZG8gdGhpcyBoZXJlOwotICAgICAgICogd2UgbXVzdCBkZWFjdGl2YXRlIHRoZSByZW5kZXIgY2FsbGJhY2sgZWxzZXdoZXJlLiBTZWU6Ci0gICAgICAgKiBodHRwOi8vbGlzdHMuYXBwbGUuY29tL2FyY2hpdmVzL0NvcmVhdWRpby1hcGkvMjAwNi9NYXIvbXNnMDAwMTAuaHRtbAotICAgICAgICovCi0gICAgICBjb3JlX2F1ZGlvLT5pb19wcm9jX25lZWRzX2RlYWN0aXZhdGlvbiA9IFRSVUU7Ci0gICAgfQotICB9Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX3N0b3BfcHJvY2Vzc2luZ19pbXBsIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBpZiAoY29yZV9hdWRpby0+aXNfcGFzc3Rocm91Z2gpIHsKLSAgICBfaW9fcHJvY19zcGRpZl9zdG9wIChjb3JlX2F1ZGlvKTsKLSAgfSBlbHNlIHsKLSAgICBnc3RfY29yZV9hdWRpb19pb19wcm9jX3N0b3AgKGNvcmVfYXVkaW8pOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fZ2V0X3NhbXBsZXNfYW5kX2xhdGVuY3lfaW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywKLSAgICBnZG91YmxlIHJhdGUsIGd1aW50ICogc2FtcGxlcywgZ2RvdWJsZSAqIGxhdGVuY3kpCi17Ci0gIE9TU3RhdHVzIHN0YXR1czsKLSAgVUludDMyIHNpemUgPSBzaXplb2YgKGRvdWJsZSk7Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPmlzX3Bhc3N0aHJvdWdoKSB7Ci0gICAgKnNhbXBsZXMgPSBfYXVkaW9fZGV2aWNlX2dldF9sYXRlbmN5IChjb3JlX2F1ZGlvLT5kZXZpY2VfaWQpOwotICAgICpzYW1wbGVzICs9IF9hdWRpb19zdHJlYW1fZ2V0X2xhdGVuY3kgKGNvcmVfYXVkaW8tPnN0cmVhbV9pZCk7Ci0gICAgKmxhdGVuY3kgPSAoZG91YmxlKSAqc2FtcGxlcyAvIHJhdGU7Ci0gIH0gZWxzZSB7Ci0gICAgc3RhdHVzID0gQXVkaW9Vbml0R2V0UHJvcGVydHkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X0xhdGVuY3ksIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICAgICAgICAvKiBOL0EgZm9yIGdsb2JhbCAqLwotICAgICAgICBsYXRlbmN5LCAmc2l6ZSk7Ci0KLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvcmVfYXVkaW8tPm9zeGJ1ZiwgIkZhaWxlZCB0byBnZXQgbGF0ZW5jeTogJWQiLAotICAgICAgICAgIChpbnQpIHN0YXR1cyk7Ci0gICAgICAqc2FtcGxlcyA9IDA7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgKnNhbXBsZXMgPSAqbGF0ZW5jeSAqIHJhdGU7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9faW5pdGlhbGl6ZV9pbXBsIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvLAotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBmb3JtYXQsIEdzdENhcHMgKiBjYXBzLAotICAgIGdib29sZWFuIGlzX3Bhc3N0aHJvdWdoLCBndWludDMyICogZnJhbWVfc2l6ZSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIE9TU3RhdHVzIHN0YXR1czsKLQotICAvKiBVbmluaXRpYWxpemUgdGhlIEF1ZGlvVW5pdCBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0cyAqLwotICBzdGF0dXMgPSBBdWRpb1VuaXRVbmluaXRpYWxpemUgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCk7Ci0gIGlmIChzdGF0dXMpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChjb3JlX2F1ZGlvLCAiRmFpbGVkIHRvIHVuaW5pdGlhbGl6ZSBBdWRpb1VuaXQ6ICVkIiwKLSAgICAgICAgKGludCkgc3RhdHVzKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBjb3JlX2F1ZGlvLT5pc19wYXNzdGhyb3VnaCA9IGlzX3Bhc3N0aHJvdWdoOwotICBpZiAoaXNfcGFzc3Rocm91Z2gpIHsKLSAgICBpZiAoIV9hY3F1aXJlX3NwZGlmIChjb3JlX2F1ZGlvLCBmb3JtYXQpKQotICAgICAgZ290byBkb25lOwotICAgIF9tb25pdG9yaXplX3NwZGlmIChjb3JlX2F1ZGlvKTsKLSAgfSBlbHNlIHsKLSAgICBPU1N0YXR1cyBzdGF0dXM7Ci0gICAgVUludDMyIHByb3BlcnR5U2l6ZTsKLQotICAgIGNvcmVfYXVkaW8tPnN0cmVhbV9pZHggPSAwOwotICAgIGlmICghZ3N0X2NvcmVfYXVkaW9fc2V0X2Zvcm1hdCAoY29yZV9hdWRpbywgZm9ybWF0KSkKLSAgICAgIGdvdG8gZG9uZTsKLQotICAgIGlmICghZ3N0X2NvcmVfYXVkaW9fc2V0X2NoYW5uZWxfbGF5b3V0IChjb3JlX2F1ZGlvLAotICAgICAgICAgICAgZm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lLCBjYXBzKSkKLSAgICAgIGdvdG8gZG9uZTsKLQotICAgIGlmIChjb3JlX2F1ZGlvLT5pc19zcmMpIHsKLSAgICAgIHByb3BlcnR5U2l6ZSA9IHNpemVvZiAoKmZyYW1lX3NpemUpOwotICAgICAgc3RhdHVzID0gQXVkaW9Vbml0R2V0UHJvcGVydHkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwga0F1ZGlvRGV2aWNlUHJvcGVydHlCdWZmZXJGcmFtZVNpemUsIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICAgICAvKiBOL0EgZm9yIGdsb2JhbCAqLwotICAgICAgICAgIGZyYW1lX3NpemUsICZwcm9wZXJ0eVNpemUpOwotCi0gICAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoY29yZV9hdWRpby0+b3N4YnVmLCAiRmFpbGVkIHRvIGdldCBmcmFtZSBzaXplOiAlZCIsCi0gICAgICAgICAgICAoaW50KSBzdGF0dXMpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0ID0gVFJVRTsKLQotZG9uZToKLSAgLyogRm9ybWF0IGNoYW5nZWQsIGluaXRpYWxpc2UgdGhlIEF1ZGlvVW5pdCBhZ2FpbiAqLwotICBzdGF0dXMgPSBBdWRpb1VuaXRJbml0aWFsaXplIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpbywgIkZhaWxlZCB0byBpbml0aWFsaXplIEF1ZGlvVW5pdDogJWQiLAotICAgICAgICAoaW50KSBzdGF0dXMpOwotICAgIHJldCA9IEZBTFNFOwotICB9Ci0KLSAgaWYgKHJldCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGNvcmVfYXVkaW8sICJvc3hidWYgcmluZyBidWZmZXIgYWNxdWlyZWQiKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fc2VsZWN0X2RldmljZV9pbXBsIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICBBdWRpb0RldmljZUlEICpkZXZpY2VzID0gTlVMTDsKLSAgQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQgPSBjb3JlX2F1ZGlvLT5kZXZpY2VfaWQ7Ci0gIEF1ZGlvRGV2aWNlSUQgZGVmYXVsdF9kZXZpY2VfaWQgPSAwOwotICBnaW50IGksIG5kZXZpY2VzID0gMDsKLSAgZ2Jvb2xlYW4gb3V0cHV0ID0gIWNvcmVfYXVkaW8tPmlzX3NyYzsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0jaWZkZWYgR1NUX0NPUkVfQVVESU9fREVCVUcKLSAgQXVkaW9DaGFubmVsTGF5b3V0ICpjaGFubmVsX2xheW91dDsKLSNlbmRpZgotCi0gIGRldmljZXMgPSBfYXVkaW9fc3lzdGVtX2dldF9kZXZpY2VzICgmbmRldmljZXMpOwotCi0gIGlmIChuZGV2aWNlcyA8IDEpIHsKLSAgICBHU1RfRVJST1IgKCJubyBhdWRpbyBvdXRwdXQgZGV2aWNlcyBmb3VuZCIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIEdTVF9ERUJVRyAoImZvdW5kICVkIGF1ZGlvIGRldmljZShzKSIsIG5kZXZpY2VzKTsKLQotI2lmZGVmIEdTVF9DT1JFX0FVRElPX0RFQlVHCi0gIGZvciAoaSA9IDA7IGkgPCBuZGV2aWNlczsgaSsrKSB7Ci0gICAgZ2NoYXIgKmRldmljZV9uYW1lOwotCi0gICAgaWYgKChkZXZpY2VfbmFtZSA9IF9hdWRpb19kZXZpY2VfZ2V0X25hbWUgKGRldmljZXNbaV0sIG91dHB1dCkpKSB7Ci0gICAgICBpZiAoIV9hdWRpb19kZXZpY2VfaGFzX291dHB1dCAoZGV2aWNlc1tpXSkpIHsKLSAgICAgICAgR1NUX0RFQlVHICgiSW5wdXQgRGV2aWNlIElEOiAldSBOYW1lOiAlcyIsCi0gICAgICAgICAgICAodW5zaWduZWQpIGRldmljZXNbaV0sIGRldmljZV9uYW1lKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoIk91dHB1dCBEZXZpY2UgSUQ6ICV1IE5hbWU6ICVzIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCkgZGV2aWNlc1tpXSwgZGV2aWNlX25hbWUpOwotCi0gICAgICAgIGNoYW5uZWxfbGF5b3V0ID0KLSAgICAgICAgICAgIGdzdF9jb3JlX2F1ZGlvX2F1ZGlvX2RldmljZV9nZXRfY2hhbm5lbF9sYXlvdXQgKGRldmljZXNbaV0sIG91dHB1dCk7Ci0gICAgICAgIGlmIChjaGFubmVsX2xheW91dCkgewotICAgICAgICAgIGdzdF9jb3JlX2F1ZGlvX2R1bXBfY2hhbm5lbF9sYXlvdXQgKGNoYW5uZWxfbGF5b3V0KTsKLSAgICAgICAgICBnX2ZyZWUgKGNoYW5uZWxfbGF5b3V0KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBnX2ZyZWUgKGRldmljZV9uYW1lKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIC8qIEZpbmQgdGhlIElEIG9mIHRoZSBkZWZhdWx0IG91dHB1dCBkZXZpY2UgKi8KLSAgZGVmYXVsdF9kZXZpY2VfaWQgPSBfYXVkaW9fc3lzdGVtX2dldF9kZWZhdWx0X2RldmljZSAob3V0cHV0KTsKLQotICAvKiBIZXJlIHdlIGRlY2lkZSBpZiBzZWxlY3RlZCBkZXZpY2UgaXMgdmFsaWQgb3IgYXV0b3NlbGVjdAotICAgKiB0aGUgZGVmYXVsdCBvbmUgd2hlbiByZXF1aXJlZCAqLwotICBpZiAoZGV2aWNlX2lkID09IGtBdWRpb0RldmljZVVua25vd24pIHsKLSAgICBpZiAoZGVmYXVsdF9kZXZpY2VfaWQgIT0ga0F1ZGlvRGV2aWNlVW5rbm93bikgewotICAgICAgZGV2aWNlX2lkID0gZGVmYXVsdF9kZXZpY2VfaWQ7Ci0gICAgICByZXMgPSBUUlVFOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfRVJST1IgKCJObyBkZXZpY2Ugb2YgcmVxdWlyZWQgdHlwZSBhdmFpbGFibGUiKTsKLSAgICAgIHJlcyA9IEZBTFNFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmRldmljZXM7IGkrKykgewotICAgICAgaWYgKGRldmljZV9pZCA9PSBkZXZpY2VzW2ldKSB7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXMgJiYgIV9hdWRpb19kZXZpY2VfaXNfYWxpdmUgKGRldmljZV9pZCwgb3V0cHV0KSkgewotICAgICAgR1NUX0VSUk9SICgiUmVxdWVzdGVkIGRldmljZSBub3QgdXNhYmxlIik7Ci0gICAgICByZXMgPSBGQUxTRTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gIH0KLQotICBpZiAocmVzKQotICAgIGNvcmVfYXVkaW8tPmRldmljZV9pZCA9IGRldmljZV9pZDsKLQotZG9uZToKLSAgZ19mcmVlIChkZXZpY2VzKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29yZV9hdWRpb19hdWRpb19kZXZpY2VfaXNfc3BkaWZfYXZhaWxfaW1wbCAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQpCi17Ci0gIEF1ZGlvU3RyZWFtSUQgKnN0cmVhbXMgPSBOVUxMOwotICBnaW50IGksIG5zdHJlYW1zID0gMDsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0KLSAgc3RyZWFtcyA9IF9hdWRpb19kZXZpY2VfZ2V0X3N0cmVhbXMgKGRldmljZV9pZCwgJm5zdHJlYW1zKTsKLSAgR1NUX0RFQlVHICgiZm91bmQgJWQgc3RyZWFtcyIsIG5zdHJlYW1zKTsKLSAgaWYgKHN0cmVhbXMpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnN0cmVhbXM7IGkrKykgewotICAgICAgaWYgKF9hdWRpb19zdHJlYW1faXNfc3BkaWZfYXZhaWwgKHN0cmVhbXNbaV0pKSB7Ci0gICAgICAgIHJlcyA9IFRSVUU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZ19mcmVlIChzdHJlYW1zKTsKLSAgfQotCi0gIHJldHVybiByZXM7Ci19CmRpZmYgLS1naXQgYS9zeXMvb3N4YXVkaW8vZ3N0b3N4Y29yZWF1ZGlvcmVtb3RlaW8uYyBiL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW9yZW1vdGVpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmIwZWJhLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3hhdWRpby9nc3Rvc3hjb3JlYXVkaW9yZW1vdGVpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMiBGbHVlbmRvIFMuQS4gPHN1cHBvcnRAZmx1ZW5kby5jb20+Ci0gKiAgIEF1dGhvcnM6IEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSA8YW1vcmFsZXNAZmx1ZW5kby5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbXBvcnQgPEF1ZGlvVW5pdC9BVUNvbXBvbmVudC5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX29wZW5faW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX29wZW5fZGV2aWNlIChjb3JlX2F1ZGlvLCBrQXVkaW9Vbml0U3ViVHlwZV9SZW1vdGVJTywKLSAgICAgICJSZW1vdGVJTyIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX3N0YXJ0X3Byb2Nlc3NpbmdfaW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgcmV0dXJuIGdzdF9jb3JlX2F1ZGlvX2lvX3Byb2Nfc3RhcnQgKGNvcmVfYXVkaW8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX3BhdXNlX3Byb2Nlc3NpbmdfaW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAoY29yZV9hdWRpbywKLSAgICAgICJvc3ggcmluZyBidWZmZXIgcGF1c2UgaW9wcm9jOiAlcCBkZXZpY2VfaWQgJWx1IiwKLSAgICAgIGNvcmVfYXVkaW8tPmVsZW1lbnQtPmlvX3Byb2MsIChndWxvbmcpIGNvcmVfYXVkaW8tPmRldmljZV9pZCk7Ci0KLSAgaWYgKGNvcmVfYXVkaW8tPmlvX3Byb2NfYWN0aXZlKSB7Ci0gICAgLyogQ29yZUF1ZGlvIGlzbid0IHRocmVhZHNhZmUgZW5vdWdoIHRvIGRvIHRoaXMgaGVyZTsKLSAgICAgKiB3ZSBtdXN0IGRlYWN0aXZhdGUgdGhlIHJlbmRlciBjYWxsYmFjayBlbHNld2hlcmUuIFNlZToKLSAgICAgKiBodHRwOi8vbGlzdHMuYXBwbGUuY29tL2FyY2hpdmVzL0NvcmVhdWRpby1hcGkvMjAwNi9NYXIvbXNnMDAwMTAuaHRtbAotICAgICAqLwotICAgIGNvcmVfYXVkaW8tPmlvX3Byb2NfbmVlZHNfZGVhY3RpdmF0aW9uID0gVFJVRTsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29yZV9hdWRpb19zdG9wX3Byb2Nlc3NpbmdfaW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbykKLXsKLSAgZ3N0X2NvcmVfYXVkaW9faW9fcHJvY19zdG9wIChjb3JlX2F1ZGlvKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fZ2V0X3NhbXBsZXNfYW5kX2xhdGVuY3lfaW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywKLSAgICBnZG91YmxlIHJhdGUsIGd1aW50ICogc2FtcGxlcywgZ2RvdWJsZSAqIGxhdGVuY3kpCi17Ci0gIE9TU3RhdHVzIHN0YXR1czsKLSAgVUludDMyIHNpemUgPSBzaXplb2YgKGRvdWJsZSk7Ci0KLSAgc3RhdHVzID0gQXVkaW9Vbml0R2V0UHJvcGVydHkgKGNvcmVfYXVkaW8tPmF1ZGlvdW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X0xhdGVuY3ksIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICAvKiBOL0EgZm9yIGdsb2JhbCAqLwotICAgICAgbGF0ZW5jeSwgJnNpemUpOwotCi0gIGlmIChzdGF0dXMpIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGNvcmVfYXVkaW8sICJGYWlsZWQgdG8gZ2V0IGxhdGVuY3k6ICVkIiwgKGludCkgc3RhdHVzKTsKLSAgICAqc2FtcGxlcyA9IDA7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgKnNhbXBsZXMgPSAqbGF0ZW5jeSAqIHJhdGU7Ci0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9jb3JlX2F1ZGlvX2luaXRpYWxpemVfaW1wbCAoR3N0Q29yZUF1ZGlvICogY29yZV9hdWRpbywKLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gZm9ybWF0LCBHc3RDYXBzICogY2FwcywKLSAgICBnYm9vbGVhbiBpc19wYXNzdGhyb3VnaCwgZ3VpbnQzMiAqIGZyYW1lX3NpemUpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotICBPU1N0YXR1cyBzdGF0dXM7Ci0KLSAgLyogVW5pbml0aWFsaXplIHRoZSBBdWRpb1VuaXQgYmVmb3JlIGNoYW5naW5nIGZvcm1hdHMgKi8KLSAgc3RhdHVzID0gQXVkaW9Vbml0VW5pbml0aWFsaXplIChjb3JlX2F1ZGlvLT5hdWRpb3VuaXQpOwotICBpZiAoc3RhdHVzKSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoY29yZV9hdWRpbywgIkZhaWxlZCB0byB1bmluaXRpYWxpemUgQXVkaW9Vbml0OiAlZCIsCi0gICAgICAgIChpbnQpIHN0YXR1cyk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgY29yZV9hdWRpby0+aXNfcGFzc3Rocm91Z2ggPSBpc19wYXNzdGhyb3VnaDsKLSAgY29yZV9hdWRpby0+c3RyZWFtX2lkeCA9IDA7Ci0KLSAgaWYgKCFnc3RfY29yZV9hdWRpb19zZXRfZm9ybWF0IChjb3JlX2F1ZGlvLCBmb3JtYXQpKQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBGSVhNRTogVXNlIGtBdWRpb1Nlc3Npb25Qcm9wZXJ0eV9DdXJyZW50SGFyZHdhcmVTYW1wbGVSYXRlIGFuZAotICAgKiBrQXVkaW9TZXNzaW9uUHJvcGVydHlfQ3VycmVudEhhcmR3YXJlSU9CdWZmZXJEdXJhdGlvbiB3aXRoIHByb3BlcnR5Ci0gICAqIGxpc3RlbmVycyB0byBkZXRlY3QgY2hhbmdlcyBpbiBzY3JlZW4gbG9ja3MuCi0gICAqIEZvciBub3cgdXNlIHRoZSBtYXhpbXVtIHZhbHVlICovCi0gICpmcmFtZV9zaXplID0gNDE5NjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChjb3JlX2F1ZGlvLCAib3N4YnVmIHJpbmcgYnVmZmVyIGFjcXVpcmVkIik7Ci0gIHJldCA9IFRSVUU7Ci0KLWRvbmU6Ci0gIC8qIEZvcm1hdCBjaGFuZ2VkLCBpbml0aWFsaXNlIHRoZSBBdWRpb1VuaXQgYWdhaW4gKi8KLSAgc3RhdHVzID0gQXVkaW9Vbml0SW5pdGlhbGl6ZSAoY29yZV9hdWRpby0+YXVkaW91bml0KTsKLSAgaWYgKHN0YXR1cykgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGNvcmVfYXVkaW8sICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBBdWRpb1VuaXQ6ICVkIiwKLSAgICAgICAgKGludCkgc3RhdHVzKTsKLSAgICByZXQgPSBGQUxTRTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X2NvcmVfYXVkaW9fc2VsZWN0X2RldmljZV9pbXBsIChHc3RDb3JlQXVkaW8gKiBjb3JlX2F1ZGlvKQotewotICAvKiBObyBkZXZpY2Ugc2VsZWN0aW9uIGluIGlPUyAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY29yZV9hdWRpb19hdWRpb19kZXZpY2VfaXNfc3BkaWZfYXZhaWxfaW1wbCAoQXVkaW9EZXZpY2VJRCBkZXZpY2VfaWQpCi17Ci0gIC8qIE5vIFNQRElGIGluIGlPUyAqLwotICByZXR1cm4gRkFMU0U7Ci19CmRpZmYgLS1naXQgYS9zeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW0gYi9zeXMvb3N4dmlkZW8vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOTJhODcuLjAwMDAwMDAKLS0tIGEvc3lzL29zeHZpZGVvL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotCi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3Rvc3h2aWRlb3NpbmsubGEKLQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX1NPVVJDRVMgPSBvc3h2aWRlb3NpbmsubSBjb2NvYXdpbmRvdy5tIAotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX09CSkNGTEFHUyA9ICQoR1NUX09CSkNGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xJQkFERCA9ICBcCi0JJChHU1RfTElCUykgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikKLQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgLVdsLC1mcmFtZXdvcmsgLVdsLENvY29hIC1XbCwtZnJhbWV3b3JrIC1XbCxPcGVuR0wKLWxpYmdzdG9zeHZpZGVvc2lua19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKSAtLXRhZz1DQwotCi1ub2luc3RfSEVBREVSUyA9IG9zeHZpZGVvc2luay5oIGNvY29hd2luZG93LmgKZGlmZiAtLWdpdCBhL3N5cy9vc3h2aWRlby9NYWtlZmlsZS5pbiBiL3N5cy9vc3h2aWRlby9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiMTUxYi4uMDAwMDAwMAotLS0gYS9zeXMvb3N4dmlkZW8vTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MjkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gc3lzL29zeHZpZGVvCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChub2luc3RfSEVBREVSUykgXAotCSQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7Ci1hbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAotICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCi0gICAgKikgZj0kJHA7OyBcCi0gIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7Ci1hbV9faW5zdGFsbF9tYXggPSA0MAotYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKLSAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAotYW1fX25vYmFzZV9zdHJpcCA9IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCi1hbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0gIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCi0gICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKLSAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCi0gICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCi0gICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JwotYW1fX2Jhc2VfbGlzdCA9IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKLSAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJwotYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpciA9IHsgXAotICB0ZXN0IC16ICIkJGZpbGVzIiBcCi0gICAgfHwgeyB0ZXN0ICEgLWQgIiQkZGlyIiAmJiB0ZXN0ICEgLWYgIiQkZGlyIiAmJiB0ZXN0ICEgLXIgIiQkZGlyIjsgfSBcCi0gICAgfHwgeyBlY2hvICIgKCBjZCAnJCRkaXInICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotICAgICAgICAgJChhbV9fY2QpICIkJGRpciIgJiYgcm0gLWYgJCRmaWxlczsgfTsgXAotICB9Ci1hbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQocGx1Z2luZGlyKSIKLUxUTElCUkFSSUVTID0gJChwbHVnaW5fTFRMSUJSQVJJRVMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0b3N4dmlkZW9zaW5rX2xhX09CSkVDVFMgPSAgXAotCWxpYmdzdG9zeHZpZGVvc2lua19sYS1vc3h2aWRlb3NpbmsubG8gXAotCWxpYmdzdG9zeHZpZGVvc2lua19sYS1jb2NvYXdpbmRvdy5sbwotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdG9zeHZpZGVvc2lua19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgXAotCSQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKE9CSkNMRCkgJChsaWJnc3Rvc3h2aWRlb3NpbmtfbGFfT0JKQ0ZMQUdTKSBcCi0JJChPQkpDRkxBR1MpICQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotT0JKQ0NPTVBJTEUgPSAkKE9CSkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9PQkpDRkxBR1MpICQoT0JKQ0ZMQUdTKQotTFRPQkpDQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKE9CSkMpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fT0JKQ0ZMQUdTKSAkKE9CSkNGTEFHUykKLUFNX1ZfT0JKQyA9ICQoYW1fX3ZfT0JKQ19AQU1fVkApCi1hbV9fdl9PQkpDXyA9ICQoYW1fX3ZfT0JKQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X09CSkNfMCA9IEBlY2hvICIgIE9CSkMgICAgIiAkQDsKLWFtX192X09CSkNfMSA9IAotT0JKQ0xEID0gJChPQkpDKQotT0JKQ0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWxpbmsgJChPQkpDTEQpICQoQU1fT0JKQ0ZMQUdTKSAkKE9CSkNGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9PQkpDTEQgPSAkKGFtX192X09CSkNMRF9AQU1fVkApCi1hbV9fdl9PQkpDTERfID0gJChhbV9fdl9PQkpDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9PQkpDTERfMCA9IEBlY2hvICIgIE9CSkNMRCAgIiAkQDsKLWFtX192X09CSkNMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3Rvc3h2aWRlb3NpbmtfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdG9zeHZpZGVvc2luay5sYQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX1NPVVJDRVMgPSBvc3h2aWRlb3NpbmsubSBjb2NvYXdpbmRvdy5tIAotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKQotCi1saWJnc3Rvc3h2aWRlb3NpbmtfbGFfT0JKQ0ZMQUdTID0gJChHU1RfT0JKQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpCi0KLWxpYmdzdG9zeHZpZGVvc2lua19sYV9MSUJBREQgPSBcCi0JJChHU1RfTElCUykgXAotCSQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikKLQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykgLVdsLC1mcmFtZXdvcmsgLVdsLENvY29hIC1XbCwtZnJhbWV3b3JrIC1XbCxPcGVuR0wKLWxpYmdzdG9zeHZpZGVvc2lua19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKSAtLXRhZz1DQwotbm9pbnN0X0hFQURFUlMgPSBvc3h2aWRlb3NpbmsuaCBjb2NvYXdpbmRvdy5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5sbyAubSAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBzeXMvb3N4dmlkZW8vTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgc3lzL29zeHZpZGVvL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWxpc3QyPTsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCi0JICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQlkb25lOyBcCi0JdGVzdCAteiAiJCRsaXN0MiIgfHwgeyBcCi0JICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKE1LRElSX1ApICIkKERFU1RESVIpJChwbHVnaW5kaXIpIiB8fCBleGl0IDE7IFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAnJChERVNURElSKSQocGx1Z2luZGlyKSciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJCRsaXN0MiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IFwKLQl9Ci0KLXVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAkKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYnIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgIiQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmIjsgXAotCWRvbmUKLQotY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQocGx1Z2luX0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLQotbGliZ3N0b3N4dmlkZW9zaW5rLmxhOiAkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9PQkpFQ1RTKSAkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZ3N0b3N4dmlkZW9zaW5rX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX09CSkNMRCkkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX09CSkVDVFMpICQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3N4dmlkZW9zaW5rX2xhLWNvY29hd2luZG93LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0b3N4dmlkZW9zaW5rX2xhLW9zeHZpZGVvc2luay5QbG9AYW1fX3F1b3RlQAotCi0ubS5vOgotQGFtX19mYXN0ZGVwT0JKQ19UUlVFQAkkKEFNX1ZfT0JKQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcE9CSkNfVFJVRUAJJChPQkpDQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwT0JKQ19GQUxTRUAJJChBTV9WX09CSkMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoT0JKQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwT0JKQ19GQUxTRUAJJChBTV9WX09CSkNAYW1fX25vZGVwQCkkKE9CSkNDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0ubS5vYmo6Ci1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoQU1fVl9PQkpDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoT0JKQ0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwT0JKQ19GQUxTRUAJJChBTV9WX09CSkMpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoT0JKQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwT0JKQ19GQUxTRUAJJChBTV9WX09CSkNAYW1fX25vZGVwQCkkKE9CSkNDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5tLmxvOgotQGFtX19mYXN0ZGVwT0JKQ19UUlVFQAkkKEFNX1ZfT0JKQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoTFRPQkpDQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcE9CSkNfRkFMU0VACSQoQU1fVl9PQkpDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcE9CSkNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChPQkpDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAkkKEFNX1ZfT0JKQ0BhbV9fbm9kZXBAKSQoTFRPQkpDQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhLW9zeHZpZGVvc2luay5sbzogb3N4dmlkZW9zaW5rLm0KLUBhbV9fZmFzdGRlcE9CSkNfVFJVRUAJJChBTV9WX09CSkMpJChMSUJUT09MKSAkKEFNX1ZfbHQpICQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoT0JKQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0b3N4dmlkZW9zaW5rX2xhX09CSkNGTEFHUykgJChPQkpDRkxBR1MpIC1NVCBsaWJnc3Rvc3h2aWRlb3NpbmtfbGEtb3N4dmlkZW9zaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rvc3h2aWRlb3NpbmtfbGEtb3N4dmlkZW9zaW5rLlRwbyAtYyAtbyBsaWJnc3Rvc3h2aWRlb3NpbmtfbGEtb3N4dmlkZW9zaW5rLmxvIGB0ZXN0IC1mICdvc3h2aWRlb3NpbmsubScgfHwgZWNobyAnJChzcmNkaXIpLydgb3N4dmlkZW9zaW5rLm0KLUBhbV9fZmFzdGRlcE9CSkNfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0b3N4dmlkZW9zaW5rX2xhLW9zeHZpZGVvc2luay5UcG8gJChERVBESVIpL2xpYmdzdG9zeHZpZGVvc2lua19sYS1vc3h2aWRlb3NpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAkkKEFNX1ZfT0JKQylzb3VyY2U9J29zeHZpZGVvc2luay5tJyBvYmplY3Q9J2xpYmdzdG9zeHZpZGVvc2lua19sYS1vc3h2aWRlb3NpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcE9CSkNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChPQkpDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAkkKEFNX1ZfT0JKQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKE9CSkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9PQkpDRkxBR1MpICQoT0JKQ0ZMQUdTKSAtYyAtbyBsaWJnc3Rvc3h2aWRlb3NpbmtfbGEtb3N4dmlkZW9zaW5rLmxvIGB0ZXN0IC1mICdvc3h2aWRlb3NpbmsubScgfHwgZWNobyAnJChzcmNkaXIpLydgb3N4dmlkZW9zaW5rLm0KLQotbGliZ3N0b3N4dmlkZW9zaW5rX2xhLWNvY29hd2luZG93LmxvOiBjb2NvYXdpbmRvdy5tCi1AYW1fX2Zhc3RkZXBPQkpDX1RSVUVACSQoQU1fVl9PQkpDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKE9CSkMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdG9zeHZpZGVvc2lua19sYV9PQkpDRkxBR1MpICQoT0JKQ0ZMQUdTKSAtTVQgbGliZ3N0b3N4dmlkZW9zaW5rX2xhLWNvY29hd2luZG93LmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3Rvc3h2aWRlb3NpbmtfbGEtY29jb2F3aW5kb3cuVHBvIC1jIC1vIGxpYmdzdG9zeHZpZGVvc2lua19sYS1jb2NvYXdpbmRvdy5sbyBgdGVzdCAtZiAnY29jb2F3aW5kb3cubScgfHwgZWNobyAnJChzcmNkaXIpLydgY29jb2F3aW5kb3cubQotQGFtX19mYXN0ZGVwT0JKQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3Rvc3h2aWRlb3NpbmtfbGEtY29jb2F3aW5kb3cuVHBvICQoREVQRElSKS9saWJnc3Rvc3h2aWRlb3NpbmtfbGEtY29jb2F3aW5kb3cuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAkkKEFNX1ZfT0JKQylzb3VyY2U9J2NvY29hd2luZG93Lm0nIG9iamVjdD0nbGliZ3N0b3N4dmlkZW9zaW5rX2xhLWNvY29hd2luZG93LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBPQkpDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoT0JKQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwT0JKQ19GQUxTRUAJJChBTV9WX09CSkNAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgJChsaWJnc3Rvc3h2aWRlb3NpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChPQkpDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3Rvc3h2aWRlb3NpbmtfbGFfT0JKQ0ZMQUdTKSAkKE9CSkNGTEFHUykgLWMgLW8gbGliZ3N0b3N4dmlkZW9zaW5rX2xhLWNvY29hd2luZG93LmxvIGB0ZXN0IC1mICdjb2NvYXdpbmRvdy5tJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bjb2NvYXdpbmRvdy5tCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKExUTElCUkFSSUVTKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgZG8gXAotCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAotCWRvbmUKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1wbHVnaW5MVExJQlJBUklFUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUyBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKLQlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKLQl1bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMKLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3N5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5oIGIvc3lzL29zeHZpZGVvL2NvY29hd2luZG93LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxNmYxYmIuLjAwMDAwMDAKLS0tIGEvc3lzL29zeHZpZGVvL2NvY29hd2luZG93LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNCBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSA8c29uZ2JpcmRAc29uZ2JpcmRuZXN0LmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKiBUaGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBtYWRlIHBvc3NpYmxlIGR1ZSB0byB0aGUgaW52b2x2ZW1lbnQgb2YgUGlvbmVlcnMgCi0gKiBvZiB0aGUgSW5ldml0YWJsZSwgdGhlIGNyZWF0b3JzIG9mIHRoZSBTb25nYmlyZCBNdXNpYyBwbGF5ZXIKLSAqIAotICovCi0KLS8qIGluc3BpcmF0aW9uIGdhaW5lZCBmcm9tIGxvb2tpbmcgYXQgc291cmNlIG9mIG9zeCB2aWRlbyBvdXQgb2YgeGluZSBhbmQgdmxjIAotICogYW5kIGlzIHJlZmxlY3RlZCBpbiB0aGUgY29kZQotICovCi0KLSNpbXBvcnQgPENvY29hL0NvY29hLmg+Ci0jaW1wb3J0IDxnbGliLmg+Ci0jaW1wb3J0IDxnc3QvdmlkZW8vbmF2aWdhdGlvbi5oPgotCi1zdHJ1Y3QgX0dzdE9TWEltYWdlOwotCi1AaW50ZXJmYWNlIEdzdEdMVmlldyA6IE5TT3BlbkdMVmlldwotewotICAgIGludCBpX2VmZmVjdDsKLSAgICB1bnNpZ25lZCBpbnQgcGlfdGV4dHVyZTsKLSAgICBmbG9hdCBmX3g7Ci0gICAgZmxvYXQgZl95OwotICAgIGludCBpbml0RG9uZTsKLSAgICBjaGFyKiBkYXRhOwotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgIEJPT0wgZnVsbHNjcmVlbjsKLSAgICBCT09MIGtlZXBBc3BlY3RSYXRpbzsKLSAgICBOU09wZW5HTENvbnRleHQqIGZ1bGxTY3JlZW5Db250ZXh0OyAKLSAgICBOU09wZW5HTENvbnRleHQqIGFjdHVhbENvbnRleHQ7Ci0gICAgTlNUcmFja2luZ0FyZWEgKnRyYWNraW5nQXJlYTsKLSAgICBHc3ROYXZpZ2F0aW9uICpuYXZpZ2F0aW9uOwotICAgIE5TUmVjdCBkcmF3aW5nQm91bmRzOwotICAgIE5TVGhyZWFkICptYWluVGhyZWFkOwotICAgIE5TVUludGVnZXIgc2F2ZWRNb2RpZmllckZsYWdzOwotfQotLSAodm9pZCkgZHJhd1F1YWQ7Ci0tICh2b2lkKSBkcmF3UmVjdDogKE5TUmVjdCkgcmVjdDsKLS0gKGlkKSBpbml0V2l0aEZyYW1lOiAoTlNSZWN0KSBmcmFtZTsKLS0gKHZvaWQpIGluaXRUZXh0dXJlczsKLS0gKHZvaWQpIHJlbG9hZFRleHR1cmU7Ci0tICh2b2lkKSBjbGVhblVwOwotLSAodm9pZCkgZGlzcGxheVRleHR1cmU7Ci0tIChjaGFyKikgZ2V0VGV4dHVyZUJ1ZmZlcjsKLS0gKHZvaWQpIHNldEZ1bGxTY3JlZW46IChCT09MKSBmbGFnOwotLSAodm9pZCkgc2V0S2VlcEFzcGVjdFJhdGlvOiAoQk9PTCkgZmxhZzsKLS0gKHZvaWQpIHJlc2hhcGU7Ci0tICh2b2lkKSBzZXRWaWRlb1NpemU6KGludCl3IDogKGludCloOwotLSAoTlNSZWN0KSBnZXREcmF3aW5nQm91bmRzOwotLSAoQk9PTCkgaGF2ZVN1cGVydmlldzsKLS0gKHZvaWQpIGhhdmVTdXBlcnZpZXdSZWFsOiAoTlNNdXRhYmxlQXJyYXkgKiljbG9zdXJlOwotLSAodm9pZCkgYWRkVG9TdXBlcnZpZXc6IChOU1ZpZXcgKilzdXBlcnZpZXc7Ci0tICh2b2lkKSByZW1vdmVGcm9tU3VwZXJ2aWV3OiAoaWQpdW51c2VkOwotLSAodm9pZCkgc2V0TmF2aWdhdGlvbjogKEdzdE5hdmlnYXRpb24gKikgbmF2OwotI2lmbmRlZiBHU1RSRUFNRVJfR0xJQl9DT0NPQV9OU0FQUExJQ0FUSU9OCi0tICh2b2lkKSBzZXRNYWluVGhyZWFkOiAoTlNUaHJlYWQgKikgdGhyZWFkOwotI2VuZGlmCi0KLUBlbmQKLQotQGludGVyZmFjZSBHc3RPU1hWaWRlb1NpbmtXaW5kb3c6IE5TV2luZG93IHsKLSAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgR3N0R0xWaWV3ICpnc3R2aWV3OwotfQotCi0tICh2b2lkKSBzZXRDb250ZW50U2l6ZTogKE5TU2l6ZSkgc2l6ZTsKLS0gKEdzdEdMVmlldyAqKSBnc3RWaWV3OwotLSAoaWQpaW5pdFdpdGhDb250ZW50TlNSZWN0OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOih1bnNpZ25lZCBpbnQpc3R5bGVNYXNrIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlwZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcgc2NyZWVuOihOU1NjcmVlbiAqKWFTY3JlZW47Ci1AZW5kCmRpZmYgLS1naXQgYS9zeXMvb3N4dmlkZW8vY29jb2F3aW5kb3cubSBiL3N5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWUxY2EwLi4wMDAwMDAwCi0tLSBhL3N5cy9vc3h2aWRlby9jb2NvYXdpbmRvdy5tCisrKyAvZGV2L251bGwKQEAgLTEsODI4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA0IFphaGVlciBBYmJhcyBNZXJhbGkgPHphaGVlcmFiYmFzIGF0IG1lcmFsaSBkb3Qgb3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXJzIG9mIHRoZSBJbmV2aXRhYmxlIDxzb25nYmlyZEBzb25nYmlyZG5lc3QuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudCBvZiBQaW9uZWVycwotICogb2YgdGhlIEluZXZpdGFibGUsIHRoZSBjcmVhdG9ycyBvZiB0aGUgU29uZ2JpcmQgTXVzaWMgcGxheWVyCi0gKgotICovCi0KLS8qIGluc3BpcmF0aW9uIGdhaW5lZCBmcm9tIGxvb2tpbmcgYXQgc291cmNlIG9mIG9zeCB2aWRlbyBvdXQgb2YgeGluZSBhbmQgdmxjCi0gKiBhbmQgaXMgcmVmbGVjdGVkIGluIHRoZSBjb2RlCi0gKi8KLQotCi0jaW5jbHVkZSA8Q29jb2EvQ29jb2EuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW1wb3J0ICJjb2NvYXdpbmRvdy5oIgotI2ltcG9ydCAib3N4dmlkZW9zaW5rLmgiCi0KLSNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsZXh0Lmg+Ci0KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+Ci0KLS8qIERlYnVnZ2luZyBjYXRlZ29yeSAqLwotI2luY2x1ZGUgPGdzdC9nc3RpbmZvLmg+Ci0KLXN0YXRpYwotY29uc3QgZ2NoYXIqIGdzdF9rZXljb2RlX3RvX2tleW5hbWUoZ2ludDE2IGtleWNvZGUpCi17Ci0gICAgc3dpdGNoIChrZXljb2RlKQotICAgIHsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfQToKLSAgICAgICAgcmV0dXJuICJhIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfUzoKLSAgICAgICAgcmV0dXJuICJzIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfRDoKLSAgICAgICAgcmV0dXJuICJkIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfRjoKLSAgICAgICAgcmV0dXJuICJmIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfSDoKLSAgICAgICAgcmV0dXJuICJoIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfRzoKLSAgICAgICAgcmV0dXJuICJnIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfWjoKLSAgICAgICAgcmV0dXJuICJ6IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfWDoKLSAgICAgICAgcmV0dXJuICJ4IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfQzoKLSAgICAgICAgcmV0dXJuICJjIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfVjoKLSAgICAgICAgcmV0dXJuICJ2IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfQjoKLSAgICAgICAgcmV0dXJuICJiIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfUToKLSAgICAgICAgcmV0dXJuICJxIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfVzoKLSAgICAgICAgcmV0dXJuICJ3IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfRToKLSAgICAgICAgcmV0dXJuICJlIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfUjoKLSAgICAgICAgcmV0dXJuICJyIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfWToKLSAgICAgICAgcmV0dXJuICJ5IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfVDoKLSAgICAgICAgcmV0dXJuICJ0IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfMToKLSAgICAgICAgcmV0dXJuICIxIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfMjoKLSAgICAgICAgcmV0dXJuICIyIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfMzoKLSAgICAgICAgcmV0dXJuICIzIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfNDoKLSAgICAgICAgcmV0dXJuICI0IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfNjoKLSAgICAgICAgcmV0dXJuICI2IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfNToKLSAgICAgICAgcmV0dXJuICI1IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfRXF1YWw6Ci0gICAgICAgIHJldHVybiAiZXF1YWwiOwotICAgICAgY2FzZSBrVktfQU5TSV85OgotICAgICAgICByZXR1cm4gIjkiOwotICAgICAgY2FzZSBrVktfQU5TSV83OgotICAgICAgICByZXR1cm4gIjciOwotICAgICAgY2FzZSBrVktfQU5TSV9NaW51czoKLSAgICAgICAgcmV0dXJuICJtaW51cyI7Ci0gICAgICBjYXNlIGtWS19BTlNJXzg6Ci0gICAgICAgIHJldHVybiAiOCI7Ci0gICAgICBjYXNlIGtWS19BTlNJXzA6Ci0gICAgICAgIHJldHVybiAiMCI7Ci0gICAgICBjYXNlIGtWS19BTlNJX1JpZ2h0QnJhY2tldDoKLSAgICAgICAgcmV0dXJuICJicmFja2V0cmlnaHQiOwotICAgICAgY2FzZSBrVktfQU5TSV9POgotICAgICAgICByZXR1cm4gIjAiOwotICAgICAgY2FzZSBrVktfQU5TSV9VOgotICAgICAgICByZXR1cm4gInUiOwotICAgICAgY2FzZSBrVktfQU5TSV9MZWZ0QnJhY2tldDoKLSAgICAgICAgcmV0dXJuICJicmFja2V0bGVmdCI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0k6Ci0gICAgICAgIHJldHVybiAiaSI7Ci0gICAgICBjYXNlIGtWS19BTlNJX1A6Ci0gICAgICAgIHJldHVybiAicCI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0w6Ci0gICAgICAgIHJldHVybiAibCI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0o6Ci0gICAgICAgIHJldHVybiAiaiI7Ci0gICAgICBjYXNlIGtWS19BTlNJX1F1b3RlOgotICAgICAgICByZXR1cm4gImFwb3N0cm9waGUiOwotICAgICAgY2FzZSBrVktfQU5TSV9LOgotICAgICAgICByZXR1cm4gImsiOwotICAgICAgY2FzZSBrVktfQU5TSV9TZW1pY29sb246Ci0gICAgICAgIHJldHVybiAic2VtaWNvbG9uIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfQmFja3NsYXNoOgotICAgICAgICByZXR1cm4gImJhY2tzbGFzaCI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0NvbW1hOgotICAgICAgICByZXR1cm4gImNvbW1hIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfU2xhc2g6Ci0gICAgICAgIHJldHVybiAic2xhc2giOwotICAgICAgY2FzZSBrVktfQU5TSV9OOgotICAgICAgICByZXR1cm4gIm4iOwotICAgICAgY2FzZSBrVktfQU5TSV9NOgotICAgICAgICByZXR1cm4gIm0iOwotICAgICAgY2FzZSBrVktfQU5TSV9QZXJpb2Q6Ci0gICAgICAgIHJldHVybiAicGVyaW9kIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfR3JhdmU6Ci0gICAgICAgIHJldHVybiAiZ3JhdmUiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWREZWNpbWFsOgotICAgICAgICByZXR1cm4gIktQX0RlbGV0ZSI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0tleXBhZE11bHRpcGx5OgotICAgICAgICByZXR1cm4gIktQX011bHRpcGx5IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfS2V5cGFkUGx1czoKLSAgICAgICAgcmV0dXJuICJLUF9BZGQiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWRDbGVhcjoKLSAgICAgICAgcmV0dXJuICJLUF9DbGVhciI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0tleXBhZERpdmlkZToKLSAgICAgICAgcmV0dXJuICJLUF9EaXZpZGUiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWRFbnRlcjoKLSAgICAgICAgcmV0dXJuICJLUF9FbnRlciI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0tleXBhZE1pbnVzOgotICAgICAgICByZXR1cm4gIktQX1N1YnRyYWN0IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfS2V5cGFkRXF1YWxzOgotICAgICAgICByZXR1cm4gIktQX0VxdWFscyI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0tleXBhZDA6Ci0gICAgICAgIHJldHVybiAiS1BfSW5zZXJ0IjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfS2V5cGFkMToKLSAgICAgICAgcmV0dXJuICJLUF9FbmQiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWQyOgotICAgICAgICByZXR1cm4gIktQX0Rvd24iOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWQzOgotICAgICAgICByZXR1cm4gIktQX05leHQiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWQ0OgotICAgICAgICByZXR1cm4gIktQX0xlZnQiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWQ1OgotICAgICAgICByZXR1cm4gIktQX0JlZ2luIjsKLSAgICAgIGNhc2Uga1ZLX0FOU0lfS2V5cGFkNjoKLSAgICAgICAgcmV0dXJuICJLUF9SaWdodCI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0tleXBhZDc6Ci0gICAgICAgIHJldHVybiAiS1BfSG9tZSI7Ci0gICAgICBjYXNlIGtWS19BTlNJX0tleXBhZDg6Ci0gICAgICAgIHJldHVybiAiS1BfVXAiOwotICAgICAgY2FzZSBrVktfQU5TSV9LZXlwYWQ5OgotICAgICAgICByZXR1cm4gIktQX1ByaW9yIjsKLQotICAgIC8qIGtleWNvZGVzIGZvciBrZXlzIHRoYXQgYXJlIGluZGVwZW5kZW50IG9mIGtleWJvYXJkIGxheW91dCovCi0KLSAgICAgIGNhc2Uga1ZLX1JldHVybjoKLSAgICAgICAgcmV0dXJuICJSZXR1cm4iOwotICAgICAgY2FzZSBrVktfVGFiOgotICAgICAgICByZXR1cm4gIlRhYiI7Ci0gICAgICBjYXNlIGtWS19TcGFjZToKLSAgICAgICAgcmV0dXJuICJzcGFjZSI7Ci0gICAgICBjYXNlIGtWS19EZWxldGU6Ci0gICAgICAgIHJldHVybiAiQmFja3NwYWNlIjsKLSAgICAgIGNhc2Uga1ZLX0VzY2FwZToKLSAgICAgICAgcmV0dXJuICJFc2NhcGUiOwotICAgICAgY2FzZSBrVktfQ29tbWFuZDoKLSAgICAgICAgcmV0dXJuICJDb21tYW5kIjsKLSAgICAgIGNhc2Uga1ZLX1NoaWZ0OgotICAgICAgICByZXR1cm4gIlNoaWZ0X0wiOwotICAgICAgY2FzZSBrVktfQ2Fwc0xvY2s6Ci0gICAgICAgIHJldHVybiAiQ2Fwc19Mb2NrIjsKLSAgICAgIGNhc2Uga1ZLX09wdGlvbjoKLSAgICAgICAgcmV0dXJuICJPcHRpb25fTCI7Ci0gICAgICBjYXNlIGtWS19Db250cm9sOgotICAgICAgICByZXR1cm4gIkNvbnRyb2xfTCI7Ci0gICAgICBjYXNlIGtWS19SaWdodFNoaWZ0OgotICAgICAgICByZXR1cm4gIlNoaWZ0X1IiOwotICAgICAgY2FzZSBrVktfUmlnaHRPcHRpb246Ci0gICAgICAgIHJldHVybiAiT3B0aW9uX1IiOwotICAgICAgY2FzZSBrVktfUmlnaHRDb250cm9sOgotICAgICAgICByZXR1cm4gIkNvbnRyb2xfUiI7Ci0gICAgICBjYXNlIGtWS19GdW5jdGlvbjoKLSAgICAgICAgcmV0dXJuICJGdW5jdGlvbiI7Ci0gICAgICBjYXNlIGtWS19GMTc6Ci0gICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAgIGNhc2Uga1ZLX1ZvbHVtZVVwOgotICAgICAgICByZXR1cm4gIlZvbHVtZVVwIjsKLSAgICAgIGNhc2Uga1ZLX1ZvbHVtZURvd246Ci0gICAgICAgIHJldHVybiAiVm9sdW1lRG93biI7Ci0gICAgICBjYXNlIGtWS19NdXRlOgotICAgICAgICByZXR1cm4gIk11dGUiOwotICAgICAgY2FzZSBrVktfRjE4OgotICAgICAgICByZXR1cm4gIkYxOCI7Ci0gICAgICBjYXNlIGtWS19GMTk6Ci0gICAgICAgIHJldHVybiAiRjE5IjsKLSAgICAgIGNhc2Uga1ZLX0YyMDoKLSAgICAgICAgcmV0dXJuICJGMjAiOwotICAgICAgY2FzZSBrVktfRjU6Ci0gICAgICAgIHJldHVybiAiRjUiOwotICAgICAgY2FzZSBrVktfRjY6Ci0gICAgICAgIHJldHVybiAiRjYiOwotICAgICAgY2FzZSBrVktfRjc6Ci0gICAgICAgIHJldHVybiAiRjciOwotICAgICAgY2FzZSBrVktfRjM6Ci0gICAgICAgIHJldHVybiAiRjMiOwotICAgICAgY2FzZSBrVktfRjg6Ci0gICAgICAgIHJldHVybiAiRjgiOwotICAgICAgY2FzZSBrVktfRjk6Ci0gICAgICAgIHJldHVybiAiRjkiOwotICAgICAgY2FzZSBrVktfRjExOgotICAgICAgICByZXR1cm4gIkYxMSI7Ci0gICAgICBjYXNlIGtWS19GMTM6Ci0gICAgICAgIHJldHVybiAiRjEzIjsKLSAgICAgIGNhc2Uga1ZLX0YxNjoKLSAgICAgICAgcmV0dXJuICJGMTYiOwotICAgICAgY2FzZSBrVktfRjE0OgotICAgICAgICByZXR1cm4gIkYxNCI7Ci0gICAgICBjYXNlIGtWS19GMTA6Ci0gICAgICAgIHJldHVybiAiRjEwIjsKLSAgICAgIGNhc2Uga1ZLX0YxMjoKLSAgICAgICAgcmV0dXJuICJGMTIiOwotICAgICAgY2FzZSBrVktfRjE1OgotICAgICAgICByZXR1cm4gIkYxNSI7Ci0gICAgICBjYXNlIGtWS19IZWxwOgotICAgICAgICByZXR1cm4gIkhlbHAiOwotICAgICAgY2FzZSBrVktfSG9tZToKLSAgICAgICAgcmV0dXJuICJIb21lIjsKLSAgICAgIGNhc2Uga1ZLX1BhZ2VVcDoKLSAgICAgICAgcmV0dXJuICJQcmlvciI7Ci0gICAgICBjYXNlIGtWS19Gb3J3YXJkRGVsZXRlOgotICAgICAgICByZXR1cm4gIkRlbGV0ZSI7Ci0gICAgICBjYXNlIGtWS19GNDoKLSAgICAgICAgcmV0dXJuICJGNCI7Ci0gICAgICBjYXNlIGtWS19FbmQ6Ci0gICAgICAgIHJldHVybiAiRW5kIjsKLSAgICAgIGNhc2Uga1ZLX0YyOgotICAgICAgICByZXR1cm4gIkYyIjsKLSAgICAgIGNhc2Uga1ZLX1BhZ2VEb3duOgotICAgICAgICByZXR1cm4gIk5leHQiOwotICAgICAgY2FzZSBrVktfRjE6Ci0gICAgICAgIHJldHVybiAiRjEiOwotICAgICAgY2FzZSBrVktfTGVmdEFycm93OgotICAgICAgICByZXR1cm4gIkxlZnQiOwotICAgICAgY2FzZSBrVktfUmlnaHRBcnJvdzoKLSAgICAgICAgcmV0dXJuICJSaWdodCI7Ci0gICAgICBjYXNlIGtWS19Eb3duQXJyb3c6Ci0gICAgICAgIHJldHVybiAiRG93biI7Ci0gICAgICBjYXNlIGtWS19VcEFycm93OgotICAgICAgICByZXR1cm4gIlVwIjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gIiI7Ci0gIH07Ci19Ci0KLUAgaW1wbGVtZW50YXRpb24gR3N0T1NYVmlkZW9TaW5rV2luZG93Ci0KLS8qIFRoZSBvYmplY3QgaGFzIHRvIGJlIHJlbGVhc2VkICovCi0tIChpZCkgaW5pdFdpdGhDb250ZW50TlNSZWN0OiAoTlNSZWN0KSByZWN0Ci0JCSBzdHlsZU1hc2s6ICh1bnNpZ25lZCBpbnQpIHN0eWxlTWFzawotCQkgICBiYWNraW5nOiAoTlNCYWNraW5nU3RvcmVUeXBlKSBidWZmZXJpbmdUeXBlCi0JCSAgICAgZGVmZXI6IChCT09MKSBmbGFnCi0JCSAgICBzY3JlZW46KE5TU2NyZWVuICopIGFTY3JlZW4KLXsKLSAgc2VsZiA9IFtzdXBlciBpbml0V2l0aENvbnRlbnRSZWN0OiByZWN0Ci0JCXN0eWxlTWFzazogc3R5bGVNYXNrCi0JCWJhY2tpbmc6IGJ1ZmZlcmluZ1R5cGUKLQkJZGVmZXI6IGZsYWcKLQkJc2NyZWVuOmFTY3JlZW5dOwotCi0gIEdTVF9ERUJVRyAoIkluaXRpYWxpemluZyBHc3RPU1h2aWRlb1NpbmtXaW5kb3ciKTsKLQotICBnc3R2aWV3ID0gW1tHc3RHTFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdF07Ci0KLSAgaWYgKGdzdHZpZXcpCi0gICAgW3NlbGYgc2V0Q29udGVudFZpZXc6Z3N0dmlld107Ci0gIFtzZWxmIHNldFRpdGxlOkAiR1N0cmVhbWVyIFZpZGVvIE91dHB1dCJdOwotCi0gIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKSBzZXRDb250ZW50U2l6ZTooTlNTaXplKSBzaXplIHsKLSAgd2lkdGggPSBzaXplLndpZHRoOwotICBoZWlnaHQgPSBzaXplLmhlaWdodDsKLQotICBbc3VwZXIgc2V0Q29udGVudFNpemU6c2l6ZV07Ci19Ci0KLS0gKEdzdEdMVmlldyAqKSBnc3RWaWV3IHsKLSAgcmV0dXJuIGdzdHZpZXc7Ci19Ci0KLS0gKHZvaWQpIGF3YWtlRnJvbU5pYiB7Ci0gIFtzZWxmIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOllFU107Ci19Ci0KLUBlbmQKLQotCi0vLwotLy8gT3BlbkdMIGltcGxlbWVudGF0aW9uCi0vLwotCi1AIGltcGxlbWVudGF0aW9uIEdzdEdMVmlldwotCi0tIChpZCkgaW5pdFdpdGhGcmFtZTooTlNSZWN0KSBmcmFtZSB7Ci0gIE5TT3BlbkdMUGl4ZWxGb3JtYXQgKmZtdDsKLSAgTlNPcGVuR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzW10gPSB7Ci0gICAgTlNPcGVuR0xQRkFOb1JlY292ZXJ5LAotICAgIE5TT3BlbkdMUEZBRG91YmxlQnVmZmVyLAotICAgIE5TT3BlbkdMUEZBQ29sb3JTaXplLCAyNCwKLSAgICBOU09wZW5HTFBGQUFscGhhU2l6ZSwgOCwKLSAgICBOU09wZW5HTFBGQURlcHRoU2l6ZSwgMjQsCi0jaWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEwOTAKLSAgICBOU09wZW5HTFBGQVdpbmRvdywKLSNlbmRpZgotICAgIDAKLSAgfTsKLQotICBmbXQgPSBbW05TT3BlbkdMUGl4ZWxGb3JtYXQgYWxsb2NdCi0JICBpbml0V2l0aEF0dHJpYnV0ZXM6YXR0cmlic107Ci0KLSAgaWYgKCFmbXQpIHsKLSAgICBHU1RfV0FSTklORyAoIkNhbm5vdCBjcmVhdGUgTlNPcGVuR0xQaXhlbEZvcm1hdCIpOwotICAgIHJldHVybiBuaWw7Ci0gIH0KLQotICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6IGZyYW1lIHBpeGVsRm9ybWF0OmZtdF07Ci0gIFtmbXQgcmVsZWFzZV07Ci0KLSAgIGFjdHVhbENvbnRleHQgPSBbc2VsZiBvcGVuR0xDb250ZXh0XTsKLSAgIFthY3R1YWxDb250ZXh0IG1ha2VDdXJyZW50Q29udGV4dF07Ci0gICBbYWN0dWFsQ29udGV4dCB1cGRhdGVdOwotCi0gIC8qIEJsYWNrIGJhY2tncm91bmQgKi8KLSAgZ2xDbGVhckNvbG9yICgwLjAsIDAuMCwgMC4wLCAwLjApOwotCi0gIHBpX3RleHR1cmUgPSAwOwotICBkYXRhID0gbmlsOwotICB3aWR0aCA9IGZyYW1lLnNpemUud2lkdGg7Ci0gIGhlaWdodCA9IGZyYW1lLnNpemUuaGVpZ2h0OwotICBkcmF3aW5nQm91bmRzID0gTlNNYWtlUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLQotICBHU1RfTE9HICgiV2lkdGg6ICVkIEhlaWdodDogJWQiLCB3aWR0aCwgaGVpZ2h0KTsKLQotICB0cmFja2luZ0FyZWEgPSBbW05TVHJhY2tpbmdBcmVhIGFsbG9jXSBpbml0V2l0aFJlY3Q6W3NlbGYgYm91bmRzXQotICAgICAgb3B0aW9uczogKE5TVHJhY2tpbmdNb3VzZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nTW91c2VNb3ZlZCB8IE5TVHJhY2tpbmdBY3RpdmVJbktleVdpbmRvdykKLSAgICAgIG93bmVyOnNlbGYKLSAgICAgIHVzZXJJbmZvOm5pbF07Ci0KLSAgW3NlbGYgYWRkVHJhY2tpbmdBcmVhOnRyYWNraW5nQXJlYV07Ci0gIG1haW5UaHJlYWQgPSBbTlNUaHJlYWQgbWFpblRocmVhZF07Ci0KLSAgW3NlbGYgaW5pdFRleHR1cmVzXTsKLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TUmVjdCkgZ2V0RHJhd2luZ0JvdW5kcyB7Ci0gIHJldHVybiBkcmF3aW5nQm91bmRzOwotfQotCi0tICh2b2lkKSByZXNoYXBlIHsKLSAgTlNSZWN0IGJvdW5kczsKLSAgZ2RvdWJsZSBmcmFtZV9wYXIsIHZpZXdfcGFyOwotICBnaW50IHZpZXdfaGVpZ2h0LCB2aWV3X3dpZHRoLCBjX2hlaWdodCwgY193aWR0aCwgY194LCBjX3k7Ci0KLQotICBHU1RfTE9HICgicmVzaGFwaW5nIik7Ci0KLSAgaWYgKCFpbml0RG9uZSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIFthY3R1YWxDb250ZXh0IG1ha2VDdXJyZW50Q29udGV4dF07Ci0KLSAgYm91bmRzID0gW3NlbGYgYm91bmRzXTsKLSAgdmlld193aWR0aCA9IGJvdW5kcy5zaXplLndpZHRoOwotICB2aWV3X2hlaWdodCA9IGJvdW5kcy5zaXplLmhlaWdodDsKLQotICBmcmFtZV9wYXIgPSAoZ2RvdWJsZSkgd2lkdGggLyBoZWlnaHQ7Ci0gIHZpZXdfcGFyID0gKGdkb3VibGUpIHZpZXdfd2lkdGggLyB2aWV3X2hlaWdodDsKLSAgaWYgKCFrZWVwQXNwZWN0UmF0aW8pCi0gICAgdmlld19wYXIgPSBmcmFtZV9wYXI7Ci0KLSAgaWYgKGZyYW1lX3BhciA9PSB2aWV3X3BhcikgewotICAgIGNfaGVpZ2h0ID0gdmlld19oZWlnaHQ7Ci0gICAgY193aWR0aCA9IHZpZXdfd2lkdGg7Ci0gICAgY194ID0gMDsKLSAgICBjX3kgPSAwOwotICB9IGVsc2UgaWYgKGZyYW1lX3BhciA8IHZpZXdfcGFyKSB7Ci0gICAgY19oZWlnaHQgPSB2aWV3X2hlaWdodDsKLSAgICBjX3dpZHRoID0gY19oZWlnaHQgKiBmcmFtZV9wYXI7Ci0gICAgY194ID0gKHZpZXdfd2lkdGggLSBjX3dpZHRoKSAvIDI7Ci0gICAgY195ID0gMDsKLSAgfSBlbHNlIHsKLSAgICBjX3dpZHRoID0gdmlld193aWR0aDsKLSAgICBjX2hlaWdodCA9IGNfd2lkdGggLyBmcmFtZV9wYXI7Ci0gICAgY194ID0gMDsKLSAgICBjX3kgPSAodmlld19oZWlnaHQgLSBjX2hlaWdodCkgLyAyOwotICB9Ci0KLSAgZHJhd2luZ0JvdW5kcyA9IE5TTWFrZVJlY3QoY194LCBjX3ksIGNfd2lkdGgsIGNfaGVpZ2h0KTsKLSAgZ2xWaWV3cG9ydCAoY194LCBjX3ksIChHTGludCkgY193aWR0aCwgKEdMaW50KSBjX2hlaWdodCk7Ci19Ci0KLS0gKHZvaWQpIGluaXRUZXh0dXJlcyB7Ci0KLSAgW2FjdHVhbENvbnRleHQgbWFrZUN1cnJlbnRDb250ZXh0XTsKLQotICAvKiBGcmVlIHByZXZpb3VzIHRleHR1cmUgaWYgYW55ICovCi0gIGlmIChwaV90ZXh0dXJlKSB7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcyAoMSwgKEdMdWludCAqKSZwaV90ZXh0dXJlKTsKLSAgfQotCi0gIGlmIChkYXRhKSB7Ci0gICAgZGF0YSA9IGdfcmVhbGxvYyAoZGF0YSwgd2lkdGggKiBoZWlnaHQgKiBzaXplb2Yoc2hvcnQpKTsgLy8gc2hvcnQgb3IgM2J5dGU/Ci0gIH0gZWxzZSB7Ci0gICAgZGF0YSA9IGdfbWFsbG9jMCh3aWR0aCAqIGhlaWdodCAqIHNpemVvZihzaG9ydCkpOwotICB9Ci0gIC8qIENyZWF0ZSB0ZXh0dXJlcyAqLwotICBnbEdlblRleHR1cmVzICgxLCAoR0x1aW50ICopJnBpX3RleHR1cmUpOwotCi0gIGdsRW5hYmxlIChHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQpOwotICBnbEVuYWJsZSAoR0xfVU5QQUNLX0NMSUVOVF9TVE9SQUdFX0FQUExFKTsKLQotICBnbFBpeGVsU3RvcmVpIChHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgZ2xQaXhlbFN0b3JlaSAoR0xfVU5QQUNLX1JPV19MRU5HVEgsIHdpZHRoKTsKLQotICBnbEJpbmRUZXh0dXJlIChHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIHBpX3RleHR1cmUpOwotCi0gIC8qIFVzZSBWUkFNIHRleHR1cmluZyAqLwotICBnbFRleFBhcmFtZXRlcmkgKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwKLQkJICAgR0xfVEVYVFVSRV9TVE9SQUdFX0hJTlRfQVBQTEUsIEdMX1NUT1JBR0VfQ0FDSEVEX0FQUExFKTsKLQotICAvKiBUZWxsIHRoZSBkcml2ZXIgbm90IHRvIG1ha2UgYSBjb3B5IG9mIHRoZSB0ZXh0dXJlIGJ1dCB0byB1c2UKLSAgICAgb3VyIGJ1ZmZlciAqLwotICBnbFBpeGVsU3RvcmVpIChHTF9VTlBBQ0tfQ0xJRU5UX1NUT1JBR0VfQVBQTEUsIEdMX1RSVUUpOwotCi0gIC8qIExpbmVhciBpbnRlcnBvbGF0aW9uICovCi0gIGdsVGV4UGFyYW1ldGVyaSAoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gIGdsVGV4UGFyYW1ldGVyaSAoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgLyogSSBoYXZlIG5vIGlkZWEgd2hhdCB0aGlzIGV4YWN0bHkgZG9lcywgYnV0IGl0IHNlZW1zIHRvIGJlCi0gICAgIG5lY2Vzc2FyeSBmb3Igc2NhbGluZyAqLwotICBnbFRleFBhcmFtZXRlcmkgKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwKLQkJICAgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICBnbFRleFBhcmFtZXRlcmkgKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwKLQkJICAgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAvLyBnbFBpeGVsU3RvcmVpIChHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgMCk7IFdIWSA/PwotCi0gIGdsVGV4SW1hZ2UyRCAoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCAwLCBHTF9SR0JBLAotCQl3aWR0aCwgaGVpZ2h0LCAwLAotCQlHTF9ZQ0JDUl80MjJfQVBQTEUsIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSwgZGF0YSk7Ci0KLQotICBpbml0RG9uZSA9IDE7Ci19Ci0KLS0gKHZvaWQpIHJlbG9hZFRleHR1cmUgewotICBpZiAoIWluaXREb25lKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgR1NUX0xPRyAoIlJlbG9hZGluZyBUZXh0dXJlIik7Ci0KLSAgW2FjdHVhbENvbnRleHQgbWFrZUN1cnJlbnRDb250ZXh0XTsKLQotICBnbEJpbmRUZXh0dXJlIChHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIHBpX3RleHR1cmUpOwotICBnbFBpeGVsU3RvcmVpIChHTF9VTlBBQ0tfUk9XX0xFTkdUSCwgd2lkdGgpOwotCi0gIC8qIGdsVGV4U3ViSW1hZ2UyRCBpcyBmYXN0ZXIgdGhhbiBnbFRleEltYWdlMkQKLSAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FtcGxlY29kZS9TYW1wbGVfQ29kZS9HcmFwaGljc18zRC8KLSAgICAgVGV4dHVyZVJhbmdlL01haW5PcGVuR0xWaWV3Lm0uaHRtICovCi0gIGdsVGV4U3ViSW1hZ2UyRCAoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCAwLCAwLCAwLAotCQkgICB3aWR0aCwgaGVpZ2h0LAotCQkgICBHTF9ZQ0JDUl80MjJfQVBQTEUsIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSwgZGF0YSk7ICAgIC8vRklYTUUKLX0KLQotLSAodm9pZCkgY2xlYW5VcCB7Ci0gIGluaXREb25lID0gMDsKLX0KLQotLSAodm9pZCkgZHJhd1F1YWQgewotICBmX3ggPSAxLjA7Ci0gIGZfeSA9IDEuMDsKLQotICBnbEJlZ2luIChHTF9RVUFEUyk7Ci0gIC8qIFRvcCBsZWZ0ICovCi0gIGdsVGV4Q29vcmQyZiAoMC4wLCAwLjApOwotICBnbFZlcnRleDJmICgtZl94LCBmX3kpOwotICAvKiBCb3R0b20gbGVmdCAqLwotICBnbFRleENvb3JkMmYgKDAuMCwgKGZsb2F0KSBoZWlnaHQpOwotICBnbFZlcnRleDJmICgtZl94LCAtZl95KTsKLSAgLyogQm90dG9tIHJpZ2h0ICovCi0gIGdsVGV4Q29vcmQyZiAoKGZsb2F0KSB3aWR0aCwgKGZsb2F0KSBoZWlnaHQpOwotICBnbFZlcnRleDJmIChmX3gsIC1mX3kpOwotICAvKiBUb3AgcmlnaHQgKi8KLSAgZ2xUZXhDb29yZDJmICgoZmxvYXQpIHdpZHRoLCAwLjApOwotICBnbFZlcnRleDJmIChmX3gsIGZfeSk7Ci0gIGdsRW5kICgpOwotfQotCi0tICh2b2lkKSBkcmF3UmVjdDooTlNSZWN0KSByZWN0IHsKLSAgR0xpbnQgcGFyYW1zW10gPSB7IDEgfTsKLQotICBbYWN0dWFsQ29udGV4dCBtYWtlQ3VycmVudENvbnRleHRdOwotCi0gIENHTFNldFBhcmFtZXRlciAoQ0dMR2V0Q3VycmVudENvbnRleHQgKCksIGtDR0xDUFN3YXBJbnRlcnZhbCwgcGFyYW1zKTsKLQotICAvKiBCbGFjayBiYWNrZ3JvdW5kICovCi0gIGdsQ2xlYXIgKEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKLQotICBpZiAoIWluaXREb25lKSB7Ci0gICAgW2FjdHVhbENvbnRleHQgZmx1c2hCdWZmZXJdOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8qIERyYXcgKi8KLSAgZ2xCaW5kVGV4dHVyZSAoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBwaV90ZXh0dXJlKTsgLy8gRklYTUUKLSAgW3NlbGYgZHJhd1F1YWRdOwotICAvKiBEcmF3ICovCi0gIFthY3R1YWxDb250ZXh0IGZsdXNoQnVmZmVyXTsKLX0KLQotLSAodm9pZCkgZGlzcGxheVRleHR1cmUgewotICBpZiAoW3NlbGYgbG9ja0ZvY3VzSWZDYW5EcmF3XSkgewotCi0gICAgW3NlbGYgZHJhd1JlY3Q6W3NlbGYgYm91bmRzXV07Ci0gICAgW3NlbGYgcmVsb2FkVGV4dHVyZV07Ci0KLSAgICBbc2VsZiB1bmxvY2tGb2N1c107Ci0KLSAgfQotCi19Ci0KLS0gKGNoYXIgKikgZ2V0VGV4dHVyZUJ1ZmZlciB7Ci0gIHJldHVybiBkYXRhOwotfQotCi0tICh2b2lkKSBzZXRGdWxsU2NyZWVuOihCT09MKSBmbGFnIHsKLSAgaWYgKCFmdWxsc2NyZWVuICYmIGZsYWcpIHsKLSAgICAvLyBnbyB0byBmdWxsIHNjcmVlbgotICAgIC8qIENyZWF0ZSB0aGUgbmV3IHBpeGVsIGZvcm1hdCAqLwotICAgIE5TT3BlbkdMUGl4ZWxGb3JtYXQgKmZtdDsKLSAgICBOU09wZW5HTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbXSA9IHsKLSAgICAgIE5TT3BlbkdMUEZBQWNjZWxlcmF0ZWQsCi0gICAgICBOU09wZW5HTFBGQU5vUmVjb3ZlcnksCi0gICAgICBOU09wZW5HTFBGQURvdWJsZUJ1ZmZlciwKLSAgICAgIE5TT3BlbkdMUEZBQ29sb3JTaXplLCAyNCwKLSAgICAgIE5TT3BlbkdMUEZBQWxwaGFTaXplLCA4LAotICAgICAgTlNPcGVuR0xQRkFEZXB0aFNpemUsIDI0LAotI2lmIE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMDYwCi0gICAgICBOU09wZW5HTFBGQUZ1bGxTY3JlZW4sCi0jZW5kaWYKLSAgICAgIE5TT3BlbkdMUEZBU2NyZWVuTWFzaywKLSAgICAgIENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayAoa0NHRGlyZWN0TWFpbkRpc3BsYXkpLAotICAgICAgMAotICAgIH07Ci0KLSAgICBmbXQgPSBbW05TT3BlbkdMUGl4ZWxGb3JtYXQgYWxsb2NdCi0JICAgIGluaXRXaXRoQXR0cmlidXRlczphdHRyaWJzXTsKLQotICAgIGlmICghZm10KSB7Ci0gICAgICBHU1RfV0FSTklORyAoIkNhbm5vdCBjcmVhdGUgTlNPcGVuR0xQaXhlbEZvcm1hdCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIENyZWF0ZSB0aGUgbmV3IE9wZW5HTCBjb250ZXh0ICovCi0gICAgZnVsbFNjcmVlbkNvbnRleHQgPSBbW05TT3BlbkdMQ29udGV4dCBhbGxvY10KLQkJCSAgaW5pdFdpdGhGb3JtYXQ6IGZtdCBzaGFyZUNvbnRleHQ6bmlsXTsKLSAgICBpZiAoIWZ1bGxTY3JlZW5Db250ZXh0KSB7Ci0gICAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBjcmVhdGUgbmV3IE5TT3BlbkdMQ29udGV4dCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFjdHVhbENvbnRleHQgPSBmdWxsU2NyZWVuQ29udGV4dDsKLQotICAgIC8qIENhcHR1cmUgZGlzcGxheSwgc3dpdGNoIHRvIGZ1bGxzY3JlZW4gKi8KLSAgICBpZiAoQ0dDYXB0dXJlQWxsRGlzcGxheXMgKCkgIT0gQ0dEaXNwbGF5Tm9FcnIpIHsKLSAgICAgIEdTVF9XQVJOSU5HICgiQ0dDYXB0dXJlQWxsRGlzcGxheXMoKSBmYWlsZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEwNzAKLSAgICBbZnVsbFNjcmVlbkNvbnRleHQgc2V0RnVsbFNjcmVlbl07Ci0jZW5kaWYKLSAgICBbZnVsbFNjcmVlbkNvbnRleHQgbWFrZUN1cnJlbnRDb250ZXh0XTsKLQotICAgIGZ1bGxzY3JlZW4gPSBZRVM7Ci0KLSAgICBbc2VsZiBpbml0VGV4dHVyZXNdOwotICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOwotCi0gIH0gZWxzZSBpZiAoZnVsbHNjcmVlbiAmJiAhZmxhZykgewotICAgIC8vIGZ1bGxzY3JlZW4gbm93IGFuZCBuZWVkcyB0byBnbyBiYWNrIHRvIG5vcm1hbAotICAgIGluaXREb25lID0gTk87Ci0KLSAgICBhY3R1YWxDb250ZXh0ID0gW3NlbGYgb3BlbkdMQ29udGV4dF07Ci0KLSAgICBbTlNPcGVuR0xDb250ZXh0IGNsZWFyQ3VycmVudENvbnRleHRdOwotICAgIFtmdWxsU2NyZWVuQ29udGV4dCBjbGVhckRyYXdhYmxlXTsKLSAgICBbZnVsbFNjcmVlbkNvbnRleHQgcmVsZWFzZV07Ci0gICAgZnVsbFNjcmVlbkNvbnRleHQgPSBuaWw7Ci0KLSAgICBDR1JlbGVhc2VBbGxEaXNwbGF5cyAoKTsKLQotICAgIFtzZWxmIHJlc2hhcGVdOwotICAgIFtzZWxmIGluaXRUZXh0dXJlc107Ci0KLSAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKLQotICAgIGZ1bGxzY3JlZW4gPSBOTzsKLSAgICBpbml0RG9uZSA9IFlFUzsKLSAgfQotfQotCi0tICh2b2lkKSBzZXRWaWRlb1NpemU6IChpbnQpdyA6IChpbnQpaCB7Ci0gIEdTVF9MT0cgKCJ3aWR0aDolZCwgaGVpZ2h0OiVkIiwgdywgaCk7Ci0KLSAgd2lkdGggPSB3OwotICBoZWlnaHQgPSBoOwotCi0gIFtzZWxmIGluaXRUZXh0dXJlc107Ci0gIFtzZWxmIHJlc2hhcGVdOwotfQotCi0tICh2b2lkKSBzZXRLZWVwQXNwZWN0UmF0aW86IChCT09MKSBmbGFnIHsKLSAga2VlcEFzcGVjdFJhdGlvID0gZmxhZzsKLSAgW3NlbGYgcmVzaGFwZV07Ci19Ci0KLSNpZm5kZWYgR1NUUkVBTUVSX0dMSUJfQ09DT0FfTlNBUFBMSUNBVElPTgotLSAodm9pZCkgc2V0TWFpblRocmVhZDogKE5TVGhyZWFkICopIHRocmVhZCB7Ci0gIG1haW5UaHJlYWQgPSB0aHJlYWQ7Ci19Ci0jZW5kaWYKLQotLSAodm9pZCkgaGF2ZVN1cGVydmlld1JlYWw6KE5TTXV0YWJsZUFycmF5ICopY2xvc3VyZSB7Ci0JQk9PTCBoYXZlU3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XSAhPSBuaWw7Ci0JW2Nsb3N1cmUgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpoYXZlU3VwZXJ2aWV3XV07Ci19Ci0KLS0gKEJPT0wpIGhhdmVTdXBlcnZpZXcgewotCU5TTXV0YWJsZUFycmF5ICpjbG9zdXJlID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OjFdOwotCVtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoaGF2ZVN1cGVydmlld1JlYWw6KQotCQlvblRocmVhZDptYWluVGhyZWFkCi0JCXdpdGhPYmplY3Q6KGlkKWNsb3N1cmUgd2FpdFVudGlsRG9uZTpZRVNdOwotCi0JcmV0dXJuIFtbY2xvc3VyZSBvYmplY3RBdEluZGV4OjBdIGJvb2xWYWx1ZV07Ci19Ci0KLS0gKHZvaWQpIGFkZFRvU3VwZXJ2aWV3UmVhbDooTlNWaWV3ICopc3VwZXJ2aWV3IHsKLQlOU1JlY3QgYm91bmRzOwotCVtzdXBlcnZpZXcgYWRkU3VidmlldzpzZWxmXTsKLQlib3VuZHMgPSBbc3VwZXJ2aWV3IGJvdW5kc107Ci0JW3NlbGYgc2V0RnJhbWU6Ym91bmRzXTsKLQlbc2VsZiBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZXxOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLX0KLQotLSAodm9pZCkgYWRkVG9TdXBlcnZpZXc6IChOU1ZpZXcgKilzdXBlcnZpZXcgewotCVtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoYWRkVG9TdXBlcnZpZXdSZWFsOikKLQkJb25UaHJlYWQ6bWFpblRocmVhZAotCQl3aXRoT2JqZWN0OnN1cGVydmlldyB3YWl0VW50aWxEb25lOllFU107Ci19Ci0KLS0gKHZvaWQpIHJlbW92ZUZyb21TdXBlcnZpZXc6IChpZCl1bnVzZWQKLXsKLQlbc2VsZiByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLX0KLQotLSAodm9pZCkgZGVhbGxvYyB7Ci0gIEdTVF9MT0cgKCJkZWFsbG9jIGNhbGxlZCIpOwotICBpZiAoZGF0YSkgZ19mcmVlKGRhdGEpOwotCi0gIGlmIChmdWxsU2NyZWVuQ29udGV4dCkgewotICAgIFtOU09wZW5HTENvbnRleHQgY2xlYXJDdXJyZW50Q29udGV4dF07Ci0gICAgW2Z1bGxTY3JlZW5Db250ZXh0IGNsZWFyRHJhd2FibGVdOwotICAgIFtmdWxsU2NyZWVuQ29udGV4dCByZWxlYXNlXTsKLSAgICBpZiAoYWN0dWFsQ29udGV4dCA9PSBmdWxsU2NyZWVuQ29udGV4dCkgYWN0dWFsQ29udGV4dCA9IG5pbDsKLSAgICBmdWxsU2NyZWVuQ29udGV4dCA9IG5pbDsKLSAgfQotCi0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZCl1cGRhdGVUcmFja2luZ0FyZWFzIHsKLSAgW3NlbGYgcmVtb3ZlVHJhY2tpbmdBcmVhOnRyYWNraW5nQXJlYV07Ci0gIFt0cmFja2luZ0FyZWEgcmVsZWFzZV07Ci0gIHRyYWNraW5nQXJlYSA9IFtbTlNUcmFja2luZ0FyZWEgYWxsb2NdIGluaXRXaXRoUmVjdDogW3NlbGYgYm91bmRzXQotICAgICAgb3B0aW9uczogKE5TVHJhY2tpbmdNb3VzZUVudGVyZWRBbmRFeGl0ZWQgfCBOU1RyYWNraW5nTW91c2VNb3ZlZCB8IE5TVHJhY2tpbmdBY3RpdmVJbktleVdpbmRvdykKLSAgICAgIG93bmVyOnNlbGYgdXNlckluZm86bmlsXTsKLSAgW3NlbGYgYWRkVHJhY2tpbmdBcmVhOnRyYWNraW5nQXJlYV07Ci19Ci0KLS0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyIHsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKSBzZXROYXZpZ2F0aW9uOihHc3ROYXZpZ2F0aW9uICopbmF2Ci17Ci0gIG5hdmlnYXRpb24gPSBuYXY7Ci19Ci0KLS0gKHZvaWQpc2VuZE1vdXNlRXZlbnQ6KE5TRXZlbnQgKilldmVudCA6IChjb25zdCBjaGFyICopZXZlbnRfbmFtZQotewotICBOU1BvaW50IGxvY2F0aW9uOwotICBnaW50IGJ1dHRvbjsKLSAgZ2RvdWJsZSB4LCB5OwotCi0gIGlmICghbmF2aWdhdGlvbikKLSAgICByZXR1cm47Ci0KLSAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKLSAgICBjYXNlIE5TTW91c2VNb3ZlZDoKLSAgICAgIGJ1dHRvbiA9IDA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKLSAgICBjYXNlIE5TTGVmdE1vdXNlVXA6Ci0gICAgICBidXR0b24gPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1JpZ2h0TW91c2VEb3duOgotICAgIGNhc2UgTlNSaWdodE1vdXNlVXA6Ci0gICAgICBidXR0b24gPSAyOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJ1dHRvbiA9IDM7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGxvY2F0aW9uID0gW3NlbGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotCi0gIHggPSBsb2NhdGlvbi54OwotICB5ID0gbG9jYXRpb24ueTsKLSAgLyogaW52ZXJ0IFkgKi8KLQotICB5ID0gKDEgLSAoKGdkb3VibGUpIHkpIC8gW3NlbGYgYm91bmRzXS5zaXplLmhlaWdodCkgKiBbc2VsZiBib3VuZHNdLnNpemUuaGVpZ2h0OwotCi0gIGdzdF9uYXZpZ2F0aW9uX3NlbmRfbW91c2VfZXZlbnQgKG5hdmlnYXRpb24sIGV2ZW50X25hbWUsIGJ1dHRvbiwgeCwgeSk7Ci19Ci0KLS0gKHZvaWQpc2VuZEtleUV2ZW50OihOU0V2ZW50ICopZXZlbnQgOiAoY29uc3QgY2hhciAqKWV2ZW50X25hbWUKLXsKLSAgaWYgKCFuYXZpZ2F0aW9uKQotICAgIHJldHVybjsKLQotICBnc3RfbmF2aWdhdGlvbl9zZW5kX2tleV9ldmVudChuYXZpZ2F0aW9uLCBldmVudF9uYW1lLCBnc3Rfa2V5Y29kZV90b19rZXluYW1lKFtldmVudCBrZXlDb2RlXSkpOwotfQotCi0tICh2b2lkKXNlbmRNb2RpZmllcktleUV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgTlNVSW50ZWdlciBmbGFncyA9IFtldmVudCBtb2RpZmllckZsYWdzXTsKLSAgY29uc3QgZ2NoYXIqIGV2ZW50X25hbWUgPSBmbGFncyA+IHNhdmVkTW9kaWZpZXJGbGFncyA/ICJrZXktcHJlc3MiIDogImtleS1yZWxlYXNlIjsKLSAgc2F2ZWRNb2RpZmllckZsYWdzID0gZmxhZ3M7Ci0gIFtzZWxmIHNlbmRLZXlFdmVudDogZXZlbnQ6IGV2ZW50X25hbWVdOwotfQotCi0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKikgZXZlbnQ7Ci17Ci0gIFtzZWxmIHNlbmRLZXlFdmVudDogZXZlbnQ6ICJrZXktcHJlc3MiXTsKLSAgW3N1cGVyIGtleURvd246IGV2ZW50XTsKLX0KLQotLSAodm9pZClrZXlVcDooTlNFdmVudCAqKSBldmVudDsKLXsKLSAgW3NlbGYgc2VuZEtleUV2ZW50OiBldmVudDogImtleS1yZWxlYXNlIl07Ci0gIFtzdXBlciBrZXlVcDogZXZlbnRdOwotfQotCi0tICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKSBldmVudDsKLXsKLSAgW3NlbGYgc2VuZE1vZGlmaWVyS2V5RXZlbnQ6IGV2ZW50XTsKLSAgW3N1cGVyIGZsYWdzQ2hhbmdlZDogZXZlbnRdOwotfQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKSBldmVudDsKLXsKLSAgW3NlbGYgc2VuZE1vdXNlRXZlbnQ6ZXZlbnQ6ICJtb3VzZS1idXR0b24tcHJlc3MiXTsKLSAgW3N1cGVyIG1vdXNlRG93bjogZXZlbnRdOwotfQotCi0tICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKikgZXZlbnQ7Ci17Ci0gIFtzZWxmIHNlbmRNb3VzZUV2ZW50OmV2ZW50OiAibW91c2UtYnV0dG9uLXJlbGVhc2UiXTsKLSAgW3N1cGVyIG1vdXNlVXA6IGV2ZW50XTsKLX0KLQotLSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7Ci17Ci0gIFtzZWxmIHNlbmRNb3VzZUV2ZW50OmV2ZW50OiAibW91c2UtbW92ZSJdOwotICBbc3VwZXIgbW91c2VNb3ZlZDogZXZlbnRdOwotfQotCi0tICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50OwotewotICBbc3VwZXIgbW91c2VFbnRlcmVkOiBldmVudF07Ci19Ci0KLS0gKHZvaWQpbW91c2VFeGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKLXsKLSAgW3N1cGVyIG1vdXNlRXhpdGVkOiBldmVudF07Ci19Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL3N5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaCBiL3N5cy9vc3h2aWRlby9vc3h2aWRlb3NpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ2N2IwZS4uMDAwMDAwMAotLS0gYS9zeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtNiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSA8c29uZ2JpcmRAc29uZ2JpcmRuZXN0LmNvbT4KLSAqCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICoKLSAqIFRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgd2FzIG1hZGUgcG9zc2libGUgZHVlIHRvIHRoZSBpbnZvbHZlbWVudCBvZiBQaW9uZWVycyAKLSAqIG9mIHRoZSBJbmV2aXRhYmxlLCB0aGUgY3JlYXRvcnMgb2YgdGhlIFNvbmdiaXJkIE11c2ljIHBsYXllcgotICogCi0gKi8KLSAKLSNpZm5kZWYgX19HU1RfT1NYX1ZJREVPX1NJTktfSF9fCi0jZGVmaW5lIF9fR1NUX09TWF9WSURFT19TSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPG9iamMvcnVudGltZS5oPgotI2luY2x1ZGUgPENvY29hL0NvY29hLmg+Ci0KLSNpbXBvcnQgImNvY29hd2luZG93LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKGdzdF9kZWJ1Z19vc3hfdmlkZW9fc2luayk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfZGVidWdfb3N4X3ZpZGVvX3NpbmsKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX09TWF9WSURFT19TSU5LIFwKLSAgKGdzdF9vc3hfdmlkZW9fc2lua19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfT1NYX1ZJREVPX1NJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfT1NYX1ZJREVPX1NJTkssIEdzdE9TWFZpZGVvU2luaykpCi0jZGVmaW5lIEdTVF9PU1hfVklERU9fU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgR1NUX1RZUEVfT1NYX1ZJREVPX1NJTkssIEdzdE9TWFZpZGVvU2lua0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX09TWF9WSURFT19TSU5LKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdTVF9UWVBFX09TWF9WSURFT19TSU5LKSkKLSNkZWZpbmUgR1NUX0lTX09TWF9WSURFT19TSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBHU1RfVFlQRV9PU1hfVklERU9fU0lOSykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RPU1hXaW5kb3cgR3N0T1NYV2luZG93OwotCi10eXBlZGVmIHN0cnVjdCBfR3N0T1NYVmlkZW9TaW5rIEdzdE9TWFZpZGVvU2luazsKLXR5cGVkZWYgc3RydWN0IF9Hc3RPU1hWaWRlb1NpbmtDbGFzcyBHc3RPU1hWaWRlb1NpbmtDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9PU1hWSURFT0JVRkZFUiAoZ3N0X29zeHZpZGVvYnVmZmVyX2dldF90eXBlKCkpCi0KLXR5cGVkZWYgZW51bSB7Ci0gIEdTVF9PU1hfVklERU9fU0lOS19SVU5fTE9PUF9TVEFURV9OT1RfUlVOTklORyA9IDAsCi0gIEdTVF9PU1hfVklERU9fU0lOS19SVU5fTE9PUF9TVEFURV9SVU5OSU5HID0gMSwKLSAgR1NUX09TWF9WSURFT19TSU5LX1JVTl9MT09QX1NUQVRFX1VOS05PV04gPSAyLAotfSBHc3RPU1hWaWRlb1NpbmtSdW5Mb29wU3RhdGU7Ci0KLS8qIE9TWFdpbmRvdyBzdHVmZiAqLwotc3RydWN0IF9Hc3RPU1hXaW5kb3cgewotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIGdib29sZWFuIGNsb3NlZDsKLSAgZ2Jvb2xlYW4gaW50ZXJuYWw7Ci0gIEdzdEdMVmlldyogZ3N0dmlldzsKLSAgR3N0T1NYVmlkZW9TaW5rV2luZG93KiB3aW47Ci19OwotCi1zdHJ1Y3QgX0dzdE9TWFZpZGVvU2luayB7Ci0gIC8qIE91ciBlbGVtZW50IHN0dWZmICovCi0gIEdzdFZpZGVvU2luayB2aWRlb3Npbms7Ci0gIEdzdE9TWFdpbmRvdyAqb3N4d2luZG93OwotICB2b2lkICpvc3h2aWRlb3NpbmtvYmplY3Q7Ci0gIE5TVmlldyAqc3VwZXJ2aWV3OwotICBnYm9vbGVhbiBrZWVwX3BhcjsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci19OwotCi1zdHJ1Y3QgX0dzdE9TWFZpZGVvU2lua0NsYXNzIHsKLSAgR3N0VmlkZW9TaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIEdzdE9TWFZpZGVvU2lua1J1bkxvb3BTdGF0ZSBydW5fbG9vcF9zdGF0ZTsKLSAgTlNUaHJlYWQgKm5zX2FwcF90aHJlYWQ7Ci19OwotCi1HVHlwZSBnc3Rfb3N4X3ZpZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCk7Ci0KLUBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbihBcHBsZU1lbnUpCi0tICh2b2lkKXNldEFwcGxlTWVudTooTlNNZW51ICopbWVudTsKLUBlbmQKLQotQGludGVyZmFjZSBHc3RCdWZmZXJPYmplY3QgOiBOU09iamVjdAotewotICBAcHVibGljCi0gIEdzdEJ1ZmZlciAqYnVmOwotfQotCi0tKGlkKSBpbml0V2l0aEJ1ZmZlcjogKEdzdEJ1ZmZlciAqKSBidWY7Ci1AZW5kCi0KLQotQGludGVyZmFjZSBHc3RXaW5kb3dEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1dpbmRvd0RlbGVnYXRlPgotewotICBAcHVibGljCi0gIEdzdE9TWFZpZGVvU2luayAqb3N4dmlkZW9zaW5rOwotfQotLShpZCkgaW5pdFdpdGhTaW5rOiAoR3N0T1NYVmlkZW9TaW5rICopIHNpbms7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgR3N0T1NYVmlkZW9TaW5rT2JqZWN0IDogTlNPYmplY3QKLXsKLSAgQHB1YmxpYwotICBHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luazsKLX0KLQotLShpZCkgaW5pdFdpdGhTaW5rOiAoR3N0T1NYVmlkZW9TaW5rICopIHNpbms7Ci0tKHZvaWQpIGNyZWF0ZUludGVybmFsV2luZG93OwotLSh2b2lkKSByZXNpemU7Ci0tKHZvaWQpIGRlc3Ryb3k7Ci0tKHZvaWQpIHNob3dGcmFtZTogKEdzdEJ1ZmZlck9iamVjdCopIGJ1ZjsKLS0odm9pZCkgc2V0VmlldzogKE5TVmlldyopIHZpZXc7Ci0rIChCT09MKSBpc01haW5UaHJlYWQ7Ci0jaWZuZGVmIEdTVFJFQU1FUl9HTElCX0NPQ09BX05TQVBQTElDQVRJT04KLS0odm9pZCkgbnNBcHBUaHJlYWQ7Ci0tKHZvaWQpIGNoZWNrTWFpblJ1bkxvb3A7Ci0jZW5kaWYKLUBlbmQKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX09TWF9WSURFT19TSU5LX0hfXyAqLwotCmRpZmYgLS1naXQgYS9zeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm0gYi9zeXMvb3N4dmlkZW8vb3N4dmlkZW9zaW5rLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MmM2ZTguLjAwMDAwMDAKLS0tIGEvc3lzL29zeHZpZGVvL29zeHZpZGVvc2luay5tCisrKyAvZGV2L251bGwKQEAgLTEsMTAxNiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIE9TWCB2aWRlbyBzaW5rCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtNiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4LDIwMDkgUGlvbmVlcnMgb2YgdGhlIEluZXZpdGFibGUgPHNvbmdiaXJkQHNvbmdiaXJkbmVzdC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICogVGhlIGRldmVsb3BtZW50IG9mIHRoaXMgY29kZSB3YXMgbWFkZSBwb3NzaWJsZSBkdWUgdG8gdGhlIGludm9sdmVtZW50IG9mCi0gKiBQaW9uZWVycyBvZiB0aGUgSW5ldml0YWJsZSwgdGhlIGNyZWF0b3JzIG9mIHRoZSBTb25nYmlyZCBNdXNpYyBwbGF5ZXIuCi0gKgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LW9zeHZpZGVvc2luawotICoKLSAqIFRoZSBPU1hWaWRlb1NpbmsgcmVuZGVycyB2aWRlbyBmcmFtZXMgdG8gYSBNYWNPU1ggd2luZG93LiBUaGUgdmlkZW8gb3V0cHV0Ci0gKiBtdXN0IGJlIGRpcmVjdGVkIHRvIGEgd2luZG93IGVtYmVkZGVkIGluIGFuIGV4aXN0aW5nIE5TQXBwLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvb3ZlcmxheS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9uYXZpZ2F0aW9uLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLSNpbmNsdWRlICJvc3h2aWRlb3NpbmsuaCIKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbXBvcnQgImNvY29hd2luZG93LmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWSAoZ3N0X2RlYnVnX29zeF92aWRlb19zaW5rKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9kZWJ1Z19vc3hfdmlkZW9fc2luawotCi0jaWZuZGVmIEdTVFJFQU1FUl9HTElCX0NPQ09BX05TQVBQTElDQVRJT04KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci1leHRlcm4gdm9pZCBfQ0ZSdW5Mb29wU2V0Q3VycmVudCAoQ0ZSdW5Mb29wUmVmIHJsKTsKLWV4dGVybiBwdGhyZWFkX3QgX0NGTWFpblBUaHJlYWQ7Ci0jZW5kaWYKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGdzdF9vc3hfdmlkZW9fc2lua19zaW5rX3RlbXBsYXRlX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcsICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXSwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJoZWlnaHQgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0jaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSBZVVkyIikKLSNlbHNlCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSBVWVZZIikKLSNlbmRpZgotICAgICk7Ci0KLWVudW0KLXsKLSAgQVJHXzAsCi0gIEFSR19FTUJFRCwKLSAgQVJHX0ZPUkNFX1BBUiwKLX07Ci0KLXN0YXRpYyB2b2lkIGdzdF9vc3hfdmlkZW9fc2lua19vc3h3aW5kb3dfZGVzdHJveSAoR3N0T1NYVmlkZW9TaW5rICogb3N4dmlkZW9zaW5rKTsKLQotI2lmbmRlZiBHU1RSRUFNRVJfR0xJQl9DT0NPQV9OU0FQUExJQ0FUSU9OCi1zdGF0aWMgR011dGV4IF9ydW5fbG9vcF9jaGVja19tdXRleDsKLXN0YXRpYyBHTXV0ZXggX3J1bl9sb29wX211dGV4Owotc3RhdGljIEdDb25kIF9ydW5fbG9vcF9jb25kOwotI2VuZGlmCi0KLXN0YXRpYyBHc3RPU1hWaWRlb1NpbmtDbGFzcyAqc2lua19jbGFzcyA9IE5VTEw7Ci1zdGF0aWMgR3N0VmlkZW9TaW5rQ2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLS8qIEhlbHBlciB0byB0cmlnZ2VyIGNhbGxzIGZyb20gdGhlIG1haW4gdGhyZWFkICovCi1zdGF0aWMgdm9pZAotZ3N0X29zeF92aWRlb19zaW5rX2NhbGxfZnJvbV9tYWluX3RocmVhZChHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luaywKLSAgICBOU09iamVjdCAqIG9iamVjdCwgU0VMIGZ1bmN0aW9uLCBOU09iamVjdCAqZGF0YSwgQk9PTCB3YWl0VW50aWxEb25lKQotewotCi0gIE5TVGhyZWFkICp0aHJlYWQ7Ci0gIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0KLSAgaWYgKHNpbmtfY2xhc3MtPm5zX2FwcF90aHJlYWQgPT0gTlVMTCl7Ci0gICAgdGhyZWFkID0gW05TVGhyZWFkIG1haW5UaHJlYWRdOwotICB9IGVsc2UgewotICAgIHRocmVhZCA9IHNpbmtfY2xhc3MtPm5zX2FwcF90aHJlYWQ7Ci0gIH0KLQotICBbb2JqZWN0IHBlcmZvcm1TZWxlY3RvcjpmdW5jdGlvbiBvblRocmVhZDp0aHJlYWQKLSAgICAgICAgICB3aXRoT2JqZWN0OmRhdGEgd2FpdFVudGlsRG9uZTp3YWl0VW50aWxEb25lXTsKLSAgW3Bvb2wgcmVsZWFzZV07Ci19Ci0KLSNpZm5kZWYgR1NUUkVBTUVSX0dMSUJfQ09DT0FfTlNBUFBMSUNBVElPTgotLyogUG9sbCBmb3IgY29jb2EgZXZlbnRzICovCi1zdGF0aWMgdm9pZAotcnVuX25zX2FwcF9sb29wICh2b2lkKSB7Ci0gIE5TRXZlbnQgKmV2ZW50OwotICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9W1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0gIE5TRGF0ZSAqcG9sbFRpbWUgPSBuaWw7Ci0KLSAgLyogd2hlbiBydW5uaW5nIHRoZSBsb29wIGluIGEgdGhyZWFkIHdlIHdhbnQgdG8gc2xlZXAgYXMgbG9uZyBhcyBwb3NzaWJsZSAqLwotICBwb2xsVGltZSA9IFtOU0RhdGUgZGlzdGFudEZ1dHVyZV07Ci0KLSAgZG8gewotICAgICAgZXZlbnQgPSBbTlNBcHAgbmV4dEV2ZW50TWF0Y2hpbmdNYXNrOk5TQW55RXZlbnRNYXNrIHVudGlsRGF0ZTpwb2xsVGltZQotICAgICAgICAgIGluTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZSBkZXF1ZXVlOllFU107Ci0gICAgICBbTlNBcHAgc2VuZEV2ZW50OmV2ZW50XTsKLSAgICB9Ci0gIHdoaWxlIChldmVudCAhPSBuaWwpOwotICBbcG9vbCByZWxlYXNlXTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfdmlkZW9zaW5rX2NoZWNrX21haW5fcnVuX2xvb3AgKEdzdE9TWFZpZGVvU2luayAqc2luaykKLXsKLSAgLyogY2hlY2sgaWYgdGhlIG1haW4gcnVuIGxvb3AgaXMgcnVubmluZyAqLwotICBnYm9vbGVhbiBpc19ydW5uaW5nOwotCi0gIC8qIHRoZSBlYXN5IHdheSAqLwotICBpc19ydW5uaW5nID0gW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGN1cnJlbnRNb2RlXSAhPSBuaWw7Ci0gIGlmIChpc19ydW5uaW5nKSB7Ci0gICAgZ290byBleGl0OwotICB9IGVsc2UgewotICAgIC8qIHRoZSBwcmV2aW91cyBjaGVjayBkb2Vzbid0IGFsd2F5cyB3b3JrIHdpdGggbWFpbiBsb29wcyB0aGF0IHJ1bgotICAgICAqIGNvY29hJ3MgbWFpbiBydW4gbG9vcCBtYW51YWxseSwgbGlrZSB0aGUgZ2RrIG9uZSwgZ2l2aW5nIGZhbHNlCi0gICAgICogbmVnYXRpdmVzLiBUaGlzIGNoZWNrIGRlZmVycyBhIGNhbGwgdG8gdGhlIG1haW4gdGhyZWFkIGFuZCB3YWl0cyB0bwotICAgICAqIGJlIGF3YWtlbiBieSB0aGlzIGZ1bmN0aW9uLiAqLwotICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0gICAgR3N0T1NYVmlkZW9TaW5rT2JqZWN0ICogb2JqZWN0ID0gKEdzdE9TWFZpZGVvU2lua09iamVjdCAqKSBzaW5rLT5vc3h2aWRlb3NpbmtvYmplY3Q7Ci0gICAgZ2ludDY0IGFic3RpbWU7Ci0KLSAgICBnX211dGV4X2xvY2sgKCZfcnVuX2xvb3BfbXV0ZXgpOwotICAgIFtvYmplY3QgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOgotICAgICAgICAgIEBzZWxlY3RvcihjaGVja01haW5SdW5Mb29wKQotICAgICAgICAgIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOwotICAgIC8qIFdhaXQgMTAwIG1zICovCi0gICAgYWJzdGltZSA9IGdfZ2V0X21vbm90b25pY190aW1lICgpICsgMTAwICogMTAwMDsKLSAgICBpc19ydW5uaW5nID0gZ19jb25kX3dhaXRfdW50aWwgKCZfcnVuX2xvb3BfY29uZCwKLSAgICAgICAgJl9ydW5fbG9vcF9tdXRleCwgYWJzdGltZSk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZfcnVuX2xvb3BfbXV0ZXgpOwotCi0gICAgW3Bvb2wgcmVsZWFzZV07Ci0gIH0KLQotZXhpdDoKLSAgewotICBHU1RfREVCVUdfT0JKRUNUKHNpbmssICJUaGUgbWFpbiBydW5sb29wICVzIGlzIHJ1bm5pbmciLAotICAgICAgaXNfcnVubmluZyA/ICIiIDogIiBub3QgIik7Ci0gIGlmIChpc19ydW5uaW5nKSB7Ci0gICAgc2lua19jbGFzcy0+cnVuX2xvb3Bfc3RhdGUgPSBHU1RfT1NYX1ZJREVPX1NJTktfUlVOX0xPT1BfU1RBVEVfUlVOTklORzsKLSAgICBzaW5rX2NsYXNzLT5uc19hcHBfdGhyZWFkID0gW05TVGhyZWFkIG1haW5UaHJlYWRdOwotICB9IGVsc2UgewotICAgIHNpbmtfY2xhc3MtPnJ1bl9sb29wX3N0YXRlID0gR1NUX09TWF9WSURFT19TSU5LX1JVTl9MT09QX1NUQVRFX05PVF9SVU5OSU5HOwotICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfdmlkZW9fc2lua19ydW5fY29jb2FfbG9vcCAoR3N0T1NYVmlkZW9TaW5rICogc2luayApCi17Ci0gIC8qIENvY29hIGFwcGxpY2F0aW9ucyByZXF1aXJlIGEgbWFpbiBydW5sb29wIHJ1bm5pbmcgdG8gZGlzcGF0Y2ggVUkKLSAgICogZXZlbnRzIGFuZCBwcm9jZXNzIGRlZmVycmVkIGNhbGxzIHRvIHRoZSBtYWluIHRocmVhZCB0aHJvdWdoCi0gICAqIHBlcmZlcm1TZWxlY3Rvck9uTWFpblRocmVhZC4KLSAgICogU2luY2UgdGhlIHNpbmsgbmVlZHMgdG8gY3JlYXRlIGl0J3Mgb3duIENvY29hIHdpbmRvdyB3aGVuIG5vCi0gICAqIGV4dGVybmFsIE5TVmlldyBpcyBwYXNzZWQgdG8gdGhlIHNpbmsgdGhyb3VnaCB0aGUgR3N0VmlkZW9PdmVybGF5IEFQSSwKLSAgICogd2UgbmVlZCB0byBydW4gdGhlIGNvY29hIG1haW5sb29wIHNvbWVob3cuCi0gICAqIFRoaXMgcnVuIGxvb3AgY2FuIG9ubHkgYmUgc3RhcnRlZCBvbmNlLCBieSB0aGUgZmlyc3Qgc2luayBuZWVkaW5nIGl0Ci0gICAqLwotCi0gIGdfbXV0ZXhfbG9jayAoJl9ydW5fbG9vcF9jaGVja19tdXRleCk7Ci0KLSAgaWYgKHNpbmtfY2xhc3MtPnJ1bl9sb29wX3N0YXRlID09IEdTVF9PU1hfVklERU9fU0lOS19SVU5fTE9PUF9TVEFURV9VTktOT1dOKSB7Ci0gICAgZ3N0X29zeF92aWRlb3NpbmtfY2hlY2tfbWFpbl9ydW5fbG9vcCAoc2luayk7Ci0gIH0KLQotICBpZiAoc2lua19jbGFzcy0+cnVuX2xvb3Bfc3RhdGUgPT0gR1NUX09TWF9WSURFT19TSU5LX1JVTl9MT09QX1NUQVRFX1JVTk5JTkcpIHsKLSAgICBnX211dGV4X3VubG9jayAoJl9ydW5fbG9vcF9jaGVja19tdXRleCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKHNpbmtfY2xhc3MtPm5zX2FwcF90aHJlYWQgPT0gTlVMTCkgewotICAgIC8qIHJ1biB0aGUgbWFpbiBydW5sb29wIGluIGEgc2VwYXJhdGUgdGhyZWFkICovCi0KLSAgICAvKiBvdmVycmlkZSBbTlNUaHJlYWQgaXNNYWluVGhyZWFkXSB3aXRoIG91ciBvd24gaW1wbGVtZW50YXRpb24gc28gdGhhdCB3ZSBjYW4KLSAgICAgKiBtYWtlIGl0IGJlbGlldmUgb3VyIGRlZGljYXRlZCB0aHJlYWQgaXMgdGhlIG1haW4gdGhyZWFkCi0gICAgICovCi0gICAgTWV0aG9kIG9yaWdJc01haW5UaHJlYWQgPSBjbGFzc19nZXRDbGFzc01ldGhvZChbTlNUaHJlYWQgY2xhc3NdLAotICAgICAgICBOU1NlbGVjdG9yRnJvbVN0cmluZyhAImlzTWFpblRocmVhZCIpKTsKLSAgICBNZXRob2Qgb3VySXNNYWluVGhyZWFkID0gY2xhc3NfZ2V0Q2xhc3NNZXRob2QoW0dzdE9TWFZpZGVvU2lua09iamVjdCBjbGFzc10sCi0gICAgICAgIE5TU2VsZWN0b3JGcm9tU3RyaW5nKEAiaXNNYWluVGhyZWFkIikpOwotCi0gICAgbWV0aG9kX2V4Y2hhbmdlSW1wbGVtZW50YXRpb25zKG9yaWdJc01haW5UaHJlYWQsIG91cklzTWFpblRocmVhZCk7Ci0KLSAgICBzaW5rX2NsYXNzLT5uc19hcHBfdGhyZWFkID0gW1tOU1RocmVhZCBhbGxvY10KLSAgICAgICAgaW5pdFdpdGhUYXJnZXQ6c2luay0+b3N4dmlkZW9zaW5rb2JqZWN0Ci0gICAgICAgIHNlbGVjdG9yOkBzZWxlY3Rvcihuc0FwcFRocmVhZCkgb2JqZWN0Om5pbF07Ci0gICAgW3NpbmtfY2xhc3MtPm5zX2FwcF90aHJlYWQgc3RhcnRdOwotCi0gICAgZ19tdXRleF9sb2NrICgmX3J1bl9sb29wX211dGV4KTsKLSAgICBnX2NvbmRfd2FpdCAoJl9ydW5fbG9vcF9jb25kLCAmX3J1bl9sb29wX211dGV4KTsKLSAgICBnX211dGV4X3VubG9jayAoJl9ydW5fbG9vcF9tdXRleCk7Ci0gIH0KLQotICBnX211dGV4X3VubG9jayAoJl9ydW5fbG9vcF9jaGVja19tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X3ZpZGVvX3Npbmtfc3RvcF9jb2NvYV9sb29wIChHc3RPU1hWaWRlb1NpbmsgKiBvc3h2aWRlb3NpbmspCi17Ci19Ci0jZW5kaWYKLQotLyogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIG9zeCB3aW5kb3cgY3JlYXRpb24gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF92aWRlb19zaW5rX29zeHdpbmRvd19jcmVhdGUgKEdzdE9TWFZpZGVvU2luayAqIG9zeHZpZGVvc2luaywgZ2ludCB3aWR0aCwKLSAgICBnaW50IGhlaWdodCkKLXsKLSAgTlNSZWN0IHJlY3Q7Ci0gIEdzdE9TWFdpbmRvdyAqb3N4d2luZG93ID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmVzID0gVFJVRTsKLSAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX09TWF9WSURFT19TSU5LIChvc3h2aWRlb3NpbmspLCBGQUxTRSk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3N4dmlkZW9zaW5rLCAiQ3JlYXRpbmcgbmV3IE9TWCB3aW5kb3ciKTsKLQotICBvc3h2aWRlb3NpbmstPm9zeHdpbmRvdyA9IG9zeHdpbmRvdyA9IGdfbmV3MCAoR3N0T1NYV2luZG93LCAxKTsKLQotICBvc3h3aW5kb3ctPndpZHRoID0gd2lkdGg7Ci0gIG9zeHdpbmRvdy0+aGVpZ2h0ID0gaGVpZ2h0OwotICBvc3h3aW5kb3ctPmNsb3NlZCA9IEZBTFNFOwotICBvc3h3aW5kb3ctPmludGVybmFsID0gRkFMU0U7Ci0KLSAgLyogQWxsb2NhdGUgb3VyIEdzdEdMVmlldyBmb3IgdGhlIHdpbmRvdywgYW5kIHRoZW4gdGVsbCB0aGUgYXBwbGljYXRpb24KLSAgICogYWJvdXQgaXQgKGhvcGVmdWxseSBpdCdzIGxpc3RlbmluZy4uLikgKi8KLSAgcmVjdC5vcmlnaW4ueCA9IDAuMDsKLSAgcmVjdC5vcmlnaW4ueSA9IDAuMDsKLSAgcmVjdC5zaXplLndpZHRoID0gKGZsb2F0KSBvc3h3aW5kb3ctPndpZHRoOwotICByZWN0LnNpemUuaGVpZ2h0ID0gKGZsb2F0KSBvc3h3aW5kb3ctPmhlaWdodDsKLSAgb3N4d2luZG93LT5nc3R2aWV3ID1bW0dzdEdMVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0XTsKLQotI2lmbmRlZiBHU1RSRUFNRVJfR0xJQl9DT0NPQV9OU0FQUExJQ0FUSU9OCi0gIGdzdF9vc3hfdmlkZW9fc2lua19ydW5fY29jb2FfbG9vcCAob3N4dmlkZW9zaW5rKTsKLSAgW29zeHdpbmRvdy0+Z3N0dmlldyBzZXRNYWluVGhyZWFkOnNpbmtfY2xhc3MtPm5zX2FwcF90aHJlYWRdOwotI2VuZGlmCi0KLSAgaWYgKG9zeHZpZGVvc2luay0+c3VwZXJ2aWV3ID09IE5VTEwpIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKG9zeHZpZGVvc2luaywgImVtaXR0aW5nIHByZXBhcmUteHdpbmRvdy1pZCIpOwotICAgIGdzdF92aWRlb19vdmVybGF5X3ByZXBhcmVfd2luZG93X2hhbmRsZSAoR1NUX1ZJREVPX09WRVJMQVkgKG9zeHZpZGVvc2luaykpOwotICB9Ci0KLSAgaWYgKG9zeHZpZGVvc2luay0+c3VwZXJ2aWV3ICE9IE5VTEwpIHsKLSAgICAvKiBwcmVwYXJlLXh3aW5kb3ctaWQgd2FzIGhhbmRsZWQsIHdlIGhhdmUgdGhlIHN1cGVydmlldyBpbgotICAgICAqIG9zeHZpZGVvc2luay0+c3VwZXJ2aWV3LiBXZSBub3cgYWRkIG9zeHdpbmRvdy0+Z3N0dmlldyB0byB0aGUgc3VwZXJ2aWV3Ci0gICAgICogZnJvbSB0aGUgbWFpbiB0aHJlYWQKLSAgICAgKi8KLSAgICBHU1RfSU5GT19PQkpFQ1QgKG9zeHZpZGVvc2luaywgIndlIGhhdmUgYSBzdXBlcnZpZXcsIGFkZGluZyBvdXIgdmlldyB0byBpdCIpOwotICAgIGdzdF9vc3hfdmlkZW9fc2lua19jYWxsX2Zyb21fbWFpbl90aHJlYWQob3N4dmlkZW9zaW5rLCBvc3h3aW5kb3ctPmdzdHZpZXcsCi0gICAgICAgIEBzZWxlY3RvcihhZGRUb1N1cGVydmlldzopLCBvc3h2aWRlb3NpbmstPnN1cGVydmlldywgTk8pOwotCi0gIH0gZWxzZSB7Ci0gICAgZ3N0X29zeF92aWRlb19zaW5rX2NhbGxfZnJvbV9tYWluX3RocmVhZChvc3h2aWRlb3NpbmssCi0gICAgICBvc3h2aWRlb3NpbmstPm9zeHZpZGVvc2lua29iamVjdCwKLSAgICAgIEBzZWxlY3RvcihjcmVhdGVJbnRlcm5hbFdpbmRvdyksIG5pbCwgWUVTKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKG9zeHZpZGVvc2luaywgIk5vIHN1cGVydmlldywgY3JlYXRpbmcgYW4gaW50ZXJuYWwgd2luZG93LiIpOwotICB9Ci0gIFtvc3h3aW5kb3ctPmdzdHZpZXcgc2V0TmF2aWdhdGlvbjogR1NUX05BVklHQVRJT04ob3N4dmlkZW9zaW5rKV07Ci0gIFtvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+Z3N0dmlldyBzZXRLZWVwQXNwZWN0UmF0aW86IG9zeHZpZGVvc2luay0+a2VlcF9wYXJdOwotCi0gIFtwb29sIHJlbGVhc2VdOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X3ZpZGVvX3Npbmtfb3N4d2luZG93X2Rlc3Ryb3kgKEdzdE9TWFZpZGVvU2luayAqIG9zeHZpZGVvc2luaykKLXsKLSAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2w7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX09TWF9WSURFT19TSU5LIChvc3h2aWRlb3NpbmspKTsKLSAgcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAob3N4dmlkZW9zaW5rKTsKLSAgZ3N0X29zeF92aWRlb19zaW5rX2NhbGxfZnJvbV9tYWluX3RocmVhZChvc3h2aWRlb3NpbmssCi0gICAgICBvc3h2aWRlb3NpbmstPm9zeHZpZGVvc2lua29iamVjdCwKLSAgICAgIEBzZWxlY3RvcihkZXN0cm95KSwgKGlkKSBuaWwsIFlFUyk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3h2aWRlb3NpbmspOwotI2lmbmRlZiBHU1RSRUFNRVJfR0xJQl9DT0NPQV9OU0FQUExJQ0FUSU9OCi0gIGdzdF9vc3hfdmlkZW9fc2lua19zdG9wX2NvY29hX2xvb3AgKG9zeHZpZGVvc2luayk7Ci0jZW5kaWYKLSAgW3Bvb2wgcmVsZWFzZV07Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gcmVzaXplcyBhIEdzdFhXaW5kb3cgKi8KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X3ZpZGVvX3Npbmtfb3N4d2luZG93X3Jlc2l6ZSAoR3N0T1NYVmlkZW9TaW5rICogb3N4dmlkZW9zaW5rLAotICAgIEdzdE9TWFdpbmRvdyAqIG9zeHdpbmRvdywgZ3VpbnQgd2lkdGgsIGd1aW50IGhlaWdodCkKLXsKLSAgR3N0T1NYVmlkZW9TaW5rT2JqZWN0ICpvYmplY3QgPSBvc3h2aWRlb3NpbmstPm9zeHZpZGVvc2lua29iamVjdDsKLQotICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwotICBnX3JldHVybl9pZl9mYWlsIChvc3h3aW5kb3cgIT0gTlVMTCk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19PU1hfVklERU9fU0lOSyAob3N4dmlkZW9zaW5rKSk7Ci0KLSAgb3N4d2luZG93LT53aWR0aCA9IHdpZHRoOwotICBvc3h3aW5kb3ctPmhlaWdodCA9IGhlaWdodDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvc3h2aWRlb3NpbmssICJSZXNpemluZyB3aW5kb3cgdG8gKCVkLCVkKSIsIHdpZHRoLCBoZWlnaHQpOwotCi0gIC8qIERpcmVjdGx5IHJlc2l6ZSB0aGUgdW5kZXJseWluZyB2aWV3ICovCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG9zeHZpZGVvc2luaywgIkNhbGxpbmcgc2V0VmlkZW9TaXplIG9uICVwIiwgb3N4d2luZG93LT5nc3R2aWV3KTsKLSAgZ3N0X29zeF92aWRlb19zaW5rX2NhbGxfZnJvbV9tYWluX3RocmVhZCAob3N4dmlkZW9zaW5rLCBvYmplY3QsCi0gICAgICBAc2VsZWN0b3IocmVzaXplKSwgKGlkKW5pbCwgWUVTKTsKLQotICBbcG9vbCByZWxlYXNlXTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfb3N4X3ZpZGVvX3Npbmtfc2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdE9TWFZpZGVvU2luayAqb3N4dmlkZW9zaW5rOwotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2Jvb2xlYW4gcmVzLCByZXN1bHQgPSBGQUxTRTsKLSAgZ2ludCB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0OwotCi0gIG9zeHZpZGVvc2luayA9IEdTVF9PU1hfVklERU9fU0lOSyAoYnNpbmspOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG9zeHZpZGVvc2luaywgImNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgcmVzID0gZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJ3aWR0aCIsICZ2aWRlb193aWR0aCk7Ci0gIHJlcyAmPSBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImhlaWdodCIsICZ2aWRlb19oZWlnaHQpOwotCi0gIGlmICghcmVzKSB7Ci0gICAgZ290byBiZWFjaDsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG9zeHZpZGVvc2luaywgIm91ciBmb3JtYXQgaXM6ICVkeCVkIHZpZGVvIiwKLSAgICAgIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwotCi0gIEdTVF9WSURFT19TSU5LX1dJRFRIIChvc3h2aWRlb3NpbmspID0gdmlkZW9fd2lkdGg7Ci0gIEdTVF9WSURFT19TSU5LX0hFSUdIVCAob3N4dmlkZW9zaW5rKSA9IHZpZGVvX2hlaWdodDsKLQotICBnc3Rfb3N4X3ZpZGVvX3Npbmtfb3N4d2luZG93X3Jlc2l6ZSAob3N4dmlkZW9zaW5rLCBvc3h2aWRlb3NpbmstPm9zeHdpbmRvdywKLSAgICAgIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwotCi0gIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcyAoJm9zeHZpZGVvc2luay0+aW5mbywgY2Fwcyk7Ci0KLSAgcmVzdWx0ID0gVFJVRTsKLQotYmVhY2g6Ci0gIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3Rfb3N4X3ZpZGVvX3NpbmtfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luazsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIG9zeHZpZGVvc2luayA9IEdTVF9PU1hfVklERU9fU0lOSyAoZWxlbWVudCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob3N4dmlkZW9zaW5rLCAiJXMgPT4gJXMiLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEVfVFJBTlNJVElPTl9DVVJSRU5UICh0cmFuc2l0aW9uKSksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKEdTVF9TVEFURV9UUkFOU0lUSU9OX05FWFQgKHRyYW5zaXRpb24pKSk7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgotICAgICAgLyogQ3JlYXRpbmcgb3VyIHdpbmRvdyBhbmQgb3VyIGltYWdlICovCi0gICAgICBHU1RfVklERU9fU0lOS19XSURUSCAob3N4dmlkZW9zaW5rKSA9IDMyMDsKLSAgICAgIEdTVF9WSURFT19TSU5LX0hFSUdIVCAob3N4dmlkZW9zaW5rKSA9IDI0MDsKLSAgICAgIGlmICghZ3N0X29zeF92aWRlb19zaW5rX29zeHdpbmRvd19jcmVhdGUgKG9zeHZpZGVvc2luaywKLSAgICAgICAgICBHU1RfVklERU9fU0lOS19XSURUSCAob3N4dmlkZW9zaW5rKSwKLSAgICAgICAgICBHU1RfVklERU9fU0lOS19IRUlHSFQgKG9zeHZpZGVvc2luaykpKSB7Ci0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gKEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgR1NUX1ZJREVPX1NJTktfV0lEVEggKG9zeHZpZGVvc2luaykgPSAwOwotICAgICAgR1NUX1ZJREVPX1NJTktfSEVJR0hUIChvc3h2aWRlb3NpbmspID0gMDsKLSAgICAgIGdzdF9vc3hfdmlkZW9fc2lua19vc3h3aW5kb3dfZGVzdHJveSAob3N4dmlkZW9zaW5rKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3Rfb3N4X3ZpZGVvX3Npbmtfc2hvd19mcmFtZSAoR3N0QmFzZVNpbmsgKiBic2luaywgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luazsKLSAgR3N0QnVmZmVyT2JqZWN0KiBidWZmZXJvYmplY3Q7Ci0gIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0KLSAgb3N4dmlkZW9zaW5rID0gR1NUX09TWF9WSURFT19TSU5LIChic2luayk7Ci0KLSAgR1NUX0RFQlVHICgic2hvd19mcmFtZSIpOwotICBidWZmZXJvYmplY3QgPSBbW0dzdEJ1ZmZlck9iamVjdCBhbGxvY10gaW5pdFdpdGhCdWZmZXI6YnVmXTsKLSAgZ3N0X29zeF92aWRlb19zaW5rX2NhbGxfZnJvbV9tYWluX3RocmVhZChvc3h2aWRlb3NpbmssCi0gICAgICBvc3h2aWRlb3NpbmstPm9zeHZpZGVvc2lua29iamVjdCwKLSAgICAgIEBzZWxlY3RvcihzaG93RnJhbWU6KSwgYnVmZmVyb2JqZWN0LCBOTyk7Ci0gIFtwb29sIHJlbGVhc2VdOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLS8qIEJ1ZmZlciBtYW5hZ2VtZW50ICovCi0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgSW5pdCAmIENsYXNzIGluaXQgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X3ZpZGVvX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdE9TWFZpZGVvU2luayAqb3N4dmlkZW9zaW5rOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19PU1hfVklERU9fU0lOSyAob2JqZWN0KSk7Ci0KLSAgb3N4dmlkZW9zaW5rID0gR1NUX09TWF9WSURFT19TSU5LIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgQVJHX0VNQkVEOgotICAgICAgZ193YXJuaW5nICgiVGhlIFwiZW1iZWRcIiBwcm9wZXJ0eSBvZiBvc3h2aWRlb3NpbmsgaXMgZGVwcmVjYXRlZCBhbmQgIgotICAgICAgICAgICJoYXMgbm8gZWZmZWN0IGFueW1vcmUuIFVzZSB0aGUgR3N0VmlkZW9PdmVybGF5ICIKLSAgICAgICAgICAiaW5zdGVhZC4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQVJHX0ZPUkNFX1BBUjoKLSAgICAgIG9zeHZpZGVvc2luay0+a2VlcF9wYXIgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKLSAgICAgIGlmIChvc3h2aWRlb3NpbmstPm9zeHdpbmRvdykKLSAgICAgICAgW29zeHZpZGVvc2luay0+b3N4d2luZG93LT5nc3R2aWV3Ci0gICAgICAgICAgICBzZXRLZWVwQXNwZWN0UmF0aW86IG9zeHZpZGVvc2luay0+a2VlcF9wYXJdOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF92aWRlb19zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luazsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfT1NYX1ZJREVPX1NJTksgKG9iamVjdCkpOwotCi0gIG9zeHZpZGVvc2luayA9IEdTVF9PU1hfVklERU9fU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19FTUJFRDoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBGQUxTRSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19GT1JDRV9QQVI6Ci0gICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgb3N4dmlkZW9zaW5rLT5rZWVwX3Bhcik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X29zeF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbiAoR3N0QmFzZVNpbmsgKiBiYXNlX3NpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEgKHF1ZXJ5LAotICAgICAgICBHU1RfVklERU9fTUVUQV9BUElfVFlQRSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfdmlkZW9fc2lua19pbml0IChHc3RPU1hWaWRlb1NpbmsgKiBzaW5rKQotewotICBzaW5rLT5vc3h3aW5kb3cgPSBOVUxMOwotICBzaW5rLT5zdXBlcnZpZXcgPSBOVUxMOwotICBzaW5rLT5vc3h2aWRlb3NpbmtvYmplY3QgPSBbW0dzdE9TWFZpZGVvU2lua09iamVjdCBhbGxvY10gaW5pdFdpdGhTaW5rOnNpbmtdOwotICBzaW5rLT5rZWVwX3BhciA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF92aWRlb19zaW5rX2Jhc2VfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGdfY2xhc3MpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJPU1ggVmlkZW8gc2luayIsCi0gICAgICAiU2luay9WaWRlbyIsICJPU1ggbmF0aXZlIHZpZGVvc2luayIsCi0gICAgICAiWmFoZWVyIEFiYmFzIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsICZnc3Rfb3N4X3ZpZGVvX3Npbmtfc2lua190ZW1wbGF0ZV9mYWN0b3J5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfdmlkZW9fc2lua19maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQotewotICBHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luayA9IEdTVF9PU1hfVklERU9fU0lOSyAob2JqZWN0KTsKLQotICBpZiAob3N4dmlkZW9zaW5rLT5zdXBlcnZpZXcpCi0gICAgW29zeHZpZGVvc2luay0+c3VwZXJ2aWV3IHJlbGVhc2VdOwotCi0gIGlmIChvc3h2aWRlb3NpbmstPm9zeHZpZGVvc2lua29iamVjdCkKLSAgICBbKEdzdE9TWFZpZGVvU2lua09iamVjdCopKG9zeHZpZGVvc2luay0+b3N4dmlkZW9zaW5rb2JqZWN0KSByZWxlYXNlXTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCAoR3N0T1NYVmlkZW9TaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmdzdGJhc2VzaW5rX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBnc3RlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MgPSAoR3N0QmFzZVNpbmtDbGFzcyAqKSBrbGFzczsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmIChHU1RfVFlQRV9WSURFT19TSU5LKTsKLSAgc2lua19jbGFzcyA9IGtsYXNzOwotCi0gIGtsYXNzLT5ydW5fbG9vcF9zdGF0ZSA9IEdTVF9PU1hfVklERU9fU0lOS19SVU5fTE9PUF9TVEFURV9VTktOT1dOOwotICBrbGFzcy0+bnNfYXBwX3RocmVhZCA9IE5VTEw7Ci0KLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X29zeF92aWRlb19zaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X29zeF92aWRlb19zaW5rX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfb3N4X3ZpZGVvX3NpbmtfZmluYWxpemU7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnNldF9jYXBzID0gZ3N0X29zeF92aWRlb19zaW5rX3NldGNhcHM7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT5wcmVyb2xsID0gZ3N0X29zeF92aWRlb19zaW5rX3Nob3dfZnJhbWU7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzLT5yZW5kZXIgPSBnc3Rfb3N4X3ZpZGVvX3Npbmtfc2hvd19mcmFtZTsKLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9IGdzdF9vc3hfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb247Ci0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9vc3hfdmlkZW9fc2lua19jaGFuZ2Vfc3RhdGU7Ci0KLSAgLyoqCi0gICAqIEdzdE9TWFZpZGVvU2luazplbWJlZAotICAgKgotICAgKiBGb3IgQUJJIGNvbWF0aWJpbGl0eSBvbnlsLCBkbyBub3QgdXNlCi0gICAqCi0gICAqKi8KLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfRU1CRUQsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImVtYmVkIiwgImVtYmVkIiwgIkZvciBBQkkgY29tcGF0aWJsaXR5IG9ubHksIGRvIG5vdCB1c2UiLAotICAgICAgICAgIEZBTFNFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0T1NYVmlkZW9TaW5rOmZvcmNlLWFzcGVjdC1yYXRpbwotICAgKgotICAgKiBXaGVuIGVuYWJsZWQsIHNjYWxpbmcgd2lsbCByZXNwZWN0IG9yaWdpbmFsIGFzcGVjdCByYXRpby4KLSAgICoKLSAgICoqLwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19GT1JDRV9QQVIsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImZvcmNlLWFzcGVjdC1yYXRpbyIsICJmb3JjZSBhc3BlY3QgcmF0aW9uIiwKLSAgICAgICAgICAiV2hlbiBlbmFibGVkLCBzY2FsaW5nIHdpbGwgcmVzcGVjdCBvcmlnaW5hbCBhc3BlY3QgcmF0aW9uIiwKLSAgICAgICAgICBUUlVFLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfdmlkZW9fc2lua19uYXZpZ2F0aW9uX3NlbmRfZXZlbnQgKEdzdE5hdmlnYXRpb24gKiBuYXZpZ2F0aW9uLAotICAgIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSkKLXsKLSAgR3N0T1NYVmlkZW9TaW5rICpvc3h2aWRlb3NpbmsgPSBHU1RfT1NYX1ZJREVPX1NJTksgKG5hdmlnYXRpb24pOwotICBHc3RQYWQgKnBlZXI7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0VmlkZW9SZWN0YW5nbGUgc3JjID0geyAwLCB9OwotICBHc3RWaWRlb1JlY3RhbmdsZSBkc3QgPSB7IDAsIH07Ci0gIEdzdFZpZGVvUmVjdGFuZ2xlIHJlc3VsdDsKLSAgTlNSZWN0IGJvdW5kczsKLSAgZ2RvdWJsZSB4LCB5LCB4c2NhbGUgPSAxLjAsIHlzY2FsZSA9IDEuMDsKLQotICBwZWVyID0gZ3N0X3BhZF9nZXRfcGVlciAoR1NUX1ZJREVPX1NJTktfUEFEIChvc3h2aWRlb3NpbmspKTsKLQotICBpZiAoIXBlZXIgfHwgIW9zeHZpZGVvc2luay0+b3N4d2luZG93KQotICAgIHJldHVybjsKLQotICBldmVudCA9IGdzdF9ldmVudF9uZXdfbmF2aWdhdGlvbiAoc3RydWN0dXJlKTsKLQotICBib3VuZHMgPSBbb3N4dmlkZW9zaW5rLT5vc3h3aW5kb3ctPmdzdHZpZXcgZ2V0RHJhd2luZ0JvdW5kc107Ci0KLSAgaWYgKG9zeHZpZGVvc2luay0+a2VlcF9wYXIpIHsKLSAgICAvKiBXZSBnZXQgdGhlIGZyYW1lIHBvc2l0aW9uIHVzaW5nIHRoZSBjYWxjdWxhdGVkIGdlb21ldHJ5IGZyb20gX3NldGNhcHMKLSAgICAgICB0aGF0IHJlc3BlY3QgcGl4ZWwgYXNwZWN0IHJhdGlvcyAqLwotICAgIHNyYy53ID0gR1NUX1ZJREVPX1NJTktfV0lEVEggKG9zeHZpZGVvc2luayk7Ci0gICAgc3JjLmggPSBHU1RfVklERU9fU0lOS19IRUlHSFQgKG9zeHZpZGVvc2luayk7Ci0gICAgZHN0LncgPSBib3VuZHMuc2l6ZS53aWR0aDsKLSAgICBkc3QuaCA9IGJvdW5kcy5zaXplLmhlaWdodDsKLQotICAgIGdzdF92aWRlb19zaW5rX2NlbnRlcl9yZWN0IChzcmMsIGRzdCwgJnJlc3VsdCwgVFJVRSk7Ci0gICAgcmVzdWx0LnggKz0gYm91bmRzLm9yaWdpbi54OwotICAgIHJlc3VsdC55ICs9IGJvdW5kcy5vcmlnaW4ueTsKLSAgfSBlbHNlIHsKLSAgICByZXN1bHQueCA9IGJvdW5kcy5vcmlnaW4ueDsKLSAgICByZXN1bHQueSA9IGJvdW5kcy5vcmlnaW4ueTsKLSAgICByZXN1bHQudyA9IGJvdW5kcy5zaXplLndpZHRoOwotICAgIHJlc3VsdC5oID0gYm91bmRzLnNpemUuaGVpZ2h0OwotICB9Ci0KLSAgLyogV2UgY2FsY3VsYXRlIHNjYWxpbmcgdXNpbmcgdGhlIG9yaWdpbmFsIHZpZGVvIGZyYW1lcyBnZW9tZXRyeSB0byBpbmNsdWRlCi0gICAgIHBpeGVsIGFzcGVjdCByYXRpbyBzY2FsaW5nLiAqLwotICB4c2NhbGUgPSAoZ2RvdWJsZSkgb3N4dmlkZW9zaW5rLT5vc3h3aW5kb3ctPndpZHRoIC8gcmVzdWx0Lnc7Ci0gIHlzY2FsZSA9IChnZG91YmxlKSBvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+aGVpZ2h0IC8gcmVzdWx0Lmg7Ci0KLSAgLyogQ29udmVydGluZyBwb2ludGVyIGNvb3JkaW5hdGVzIHRvIHRoZSBub24gc2NhbGVkIGdlb21ldHJ5ICovCi0gIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUgKHN0cnVjdHVyZSwgInBvaW50ZXJfeCIsICZ4KSkgewotICAgIHggPSBNSU4gKHgsIHJlc3VsdC54ICsgcmVzdWx0LncpOwotICAgIHggPSBNQVggKHggLSByZXN1bHQueCwgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwgInBvaW50ZXJfeCIsIEdfVFlQRV9ET1VCTEUsCi0gICAgICAgIChnZG91YmxlKSB4ICogeHNjYWxlLCBOVUxMKTsKLSAgfQotICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlIChzdHJ1Y3R1cmUsICJwb2ludGVyX3kiLCAmeSkpIHsKLSAgICB5ID0gTUlOICh5LCByZXN1bHQueSArIHJlc3VsdC5oKTsKLSAgICB5ID0gTUFYICh5IC0gcmVzdWx0LnksIDApOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzdHJ1Y3R1cmUsICJwb2ludGVyX3kiLCBHX1RZUEVfRE9VQkxFLAotICAgICAgICAoZ2RvdWJsZSkgeSAqIHlzY2FsZSwgTlVMTCk7Ci0gIH0KLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBlZXIsIGV2ZW50KTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGVlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfb3N4X3ZpZGVvX3NpbmtfbmF2aWdhdGlvbl9pbml0IChHc3ROYXZpZ2F0aW9uSW50ZXJmYWNlICogaWZhY2UpCi17Ci0gIGlmYWNlLT5zZW5kX2V2ZW50ID0gZ3N0X29zeF92aWRlb19zaW5rX25hdmlnYXRpb25fc2VuZF9ldmVudDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9vc3hfdmlkZW9fc2lua19zZXRfd2luZG93X2hhbmRsZSAoR3N0VmlkZW9PdmVybGF5ICogb3ZlcmxheSwgZ3VpbnRwdHIgaGFuZGxlX2lkKQotewotICBHc3RPU1hWaWRlb1NpbmsgKm9zeHZpZGVvc2luayA9IEdTVF9PU1hfVklERU9fU0lOSyAob3ZlcmxheSk7Ci0gIE5TVmlldyAqdmlldyA9IChOU1ZpZXcgKikgaGFuZGxlX2lkOwotCi0gIGdzdF9vc3hfdmlkZW9fc2lua19jYWxsX2Zyb21fbWFpbl90aHJlYWQob3N4dmlkZW9zaW5rLAotICAgICAgb3N4dmlkZW9zaW5rLT5vc3h2aWRlb3NpbmtvYmplY3QsCi0gICAgICBAc2VsZWN0b3Ioc2V0VmlldzopLCB2aWV3LCBZRVMpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X29zeF92aWRlb19zaW5rX3hvdmVybGF5X2luaXQgKEdzdFZpZGVvT3ZlcmxheUludGVyZmFjZSAqIGlmYWNlKQotewotICBpZmFjZS0+c2V0X3dpbmRvd19oYW5kbGUgPSBnc3Rfb3N4X3ZpZGVvX3Npbmtfc2V0X3dpbmRvd19oYW5kbGU7Ci0gIGlmYWNlLT5leHBvc2UgPSBOVUxMOwotICBpZmFjZS0+aGFuZGxlX2V2ZW50cyA9IE5VTEw7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWMgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgT2JqZWN0IHR5cGluZyAmIENyZWF0aW9uICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1HVHlwZQotZ3N0X29zeF92aWRlb19zaW5rX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgb3N4dmlkZW9zaW5rX3R5cGUgPSAwOwotCi0gIGlmICghb3N4dmlkZW9zaW5rX3R5cGUpIHsKLSAgICBzdGF0aWMgY29uc3QgR1R5cGVJbmZvIG9zeHZpZGVvc2lua19pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RPU1hWaWRlb1NpbmtDbGFzcyksCi0gICAgICBnc3Rfb3N4X3ZpZGVvX3NpbmtfYmFzZV9pbml0LAotICAgICAgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X29zeF92aWRlb19zaW5rX2NsYXNzX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICAgIHNpemVvZiAoR3N0T1NYVmlkZW9TaW5rKSwKLSAgICAgIDAsCi0gICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9vc3hfdmlkZW9fc2lua19pbml0LAotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgR0ludGVyZmFjZUluZm8gb3ZlcmxheV9pbmZvID0gewotICAgICAgKEdJbnRlcmZhY2VJbml0RnVuYykgZ3N0X29zeF92aWRlb19zaW5rX3hvdmVybGF5X2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICB9OwotCi0gICAgc3RhdGljIGNvbnN0IEdJbnRlcmZhY2VJbmZvIG5hdmlnYXRpb25faW5mbyA9IHsKLSAgICAgIChHSW50ZXJmYWNlSW5pdEZ1bmMpIGdzdF9vc3hfdmlkZW9fc2lua19uYXZpZ2F0aW9uX2luaXQsCi0gICAgICBOVUxMLAotICAgICAgTlVMTCwKLSAgICB9OwotICAgIG9zeHZpZGVvc2lua190eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfVklERU9fU0lOSywKLSAgICAgICAgIkdzdE9TWFZpZGVvU2luayIsICZvc3h2aWRlb3NpbmtfaW5mbywgMCk7Ci0KLSAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKG9zeHZpZGVvc2lua190eXBlLCBHU1RfVFlQRV9WSURFT19PVkVSTEFZLAotICAgICAgICAmb3ZlcmxheV9pbmZvKTsKLSAgICBnX3R5cGVfYWRkX2ludGVyZmFjZV9zdGF0aWMgKG9zeHZpZGVvc2lua190eXBlLCBHU1RfVFlQRV9OQVZJR0FUSU9OLAotICAgICAgICAmbmF2aWdhdGlvbl9pbmZvKTsKLSAgfQotCi0gIHJldHVybiBvc3h2aWRlb3NpbmtfdHlwZTsKLX0KLQotQGltcGxlbWVudGF0aW9uIEdzdFdpbmRvd0RlbGVnYXRlCi0tIChpZCkgaW5pdFdpdGhTaW5rOiAoR3N0T1NYVmlkZW9TaW5rICopIHNpbmsKLXsKLSAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgc2VsZi0+b3N4dmlkZW9zaW5rID0gc2luazsKLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbiB7Ci0gIC8qIE9ubHkgaGFuZGxlIGNsb3NlIGV2ZW50cyBpZiB0aGUgd2luZG93IHdhcyBjbG9zZWQgbWFudWFsbHkgYnkgdGhlIHVzZXIKLSAgICogYW5kIG5vdCBiZWN1YXNlIG9mIGEgc3RhdGUgY2hhbmdlIHN0YXRlIHRvIFJFQURZICovCi0gIGlmIChvc3h2aWRlb3NpbmstPm9zeHdpbmRvdyA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGlmICghb3N4dmlkZW9zaW5rLT5vc3h3aW5kb3ctPmNsb3NlZCkgewotICAgIG9zeHZpZGVvc2luay0+b3N4d2luZG93LT5jbG9zZWQgPSBUUlVFOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChvc3h2aWRlb3NpbmssIFJFU09VUkNFLCBOT1RfRk9VTkQsICgiT3V0cHV0IHdpbmRvdyB3YXMgY2xvc2VkIiksIChOVUxMKSk7Ci0gICAgZ3N0X29zeF92aWRlb19zaW5rX29zeHdpbmRvd19kZXN0cm95KG9zeHZpZGVvc2luayk7Ci0gIH0KLX0KLQotQGVuZAotCi1AIGltcGxlbWVudGF0aW9uIEdzdE9TWFZpZGVvU2lua09iamVjdAotCi0tKGlkKSBpbml0V2l0aFNpbms6IChHc3RPU1hWaWRlb1NpbmsqKSBzaW5rCi17Ci0gIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gIHNlbGYtPm9zeHZpZGVvc2luayA9IGdzdF9vYmplY3RfcmVmIChzaW5rKTsKLSAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0odm9pZCkgZGVhbGxvYyB7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKG9zeHZpZGVvc2luayk7Ci0gIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSh2b2lkKSBjcmVhdGVJbnRlcm5hbFdpbmRvdwotewotICBHc3RPU1hXaW5kb3cgKm9zeHdpbmRvdyA9IG9zeHZpZGVvc2luay0+b3N4d2luZG93OwotICBOU1JlY3QgcmVjdDsKLSAgdW5zaWduZWQgaW50IG1hc2s7Ci0KLSAgW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOwotCi0gIG9zeHdpbmRvdy0+aW50ZXJuYWwgPSBUUlVFOwotCi0gIG1hc2sgPSAgTlNUaXRsZWRXaW5kb3dNYXNrICAgICAgICAgICAgIHwKLSAgICAgICAgICBOU0Nsb3NhYmxlV2luZG93TWFzayAgICAgICAgICAgfAotICAgICAgICAgIE5TUmVzaXphYmxlV2luZG93TWFzayAgICAgICAgICB8Ci0gICAgICAgICAgTlNUZXh0dXJlZEJhY2tncm91bmRXaW5kb3dNYXNrIHwKLSAgICAgICAgICBOU01pbmlhdHVyaXphYmxlV2luZG93TWFzazsKLQotICByZWN0Lm9yaWdpbi54ID0gMTAwLjA7Ci0gIHJlY3Qub3JpZ2luLnkgPSAxMDAuMDsKLSAgcmVjdC5zaXplLndpZHRoID0gKGZsb2F0KSBvc3h3aW5kb3ctPndpZHRoOwotICByZWN0LnNpemUuaGVpZ2h0ID0gKGZsb2F0KSBvc3h3aW5kb3ctPmhlaWdodDsKLQotICBvc3h3aW5kb3ctPndpbiA9W1tbR3N0T1NYVmlkZW9TaW5rV2luZG93IGFsbG9jXQotICAgICAgICAgICAgICAgICAgICAgICBpbml0V2l0aENvbnRlbnROU1JlY3Q6IHJlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVNYXNrOiBtYXNrCi0gICAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmc6IE5TQmFja2luZ1N0b3JlQnVmZmVyZWQKLSAgICAgICAgICAgICAgICAgICAgICAgZGVmZXI6IE5PCi0gICAgICAgICAgICAgICAgICAgICAgIHNjcmVlbjogbmlsXSByZXRhaW5dOwotICBHU1RfREVCVUcoIlZpZGVvU2lua1dpbmRvdyBjcmVhdGVkLCAlcCIsIG9zeHdpbmRvdy0+d2luKTsKLSAgW29zeHdpbmRvdy0+d2luIG9yZGVyRnJvbnRSZWdhcmRsZXNzXTsKLSAgb3N4d2luZG93LT5nc3R2aWV3ID1bb3N4d2luZG93LT53aW4gZ3N0Vmlld107Ci0gIFtvc3h3aW5kb3ctPndpbiBzZXREZWxlZ2F0ZTpbW0dzdFdpbmRvd0RlbGVnYXRlIGFsbG9jXQotICAgICAgaW5pdFdpdGhTaW5rOm9zeHZpZGVvc2lua11dOwotCi19Ci0KLSsgKEJPT0wpIGlzTWFpblRocmVhZAotewotICAvKiBGSVhNRTogaWRlYWxseSB3ZSBzaG91bGQgcmV0dXJuIFlFUyBvbmx5IGZvciAtPm5zX2FwcF90aHJlYWQgaGVyZSAqLwotICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKSBzZXRWaWV3OiAoTlNWaWV3Kil2aWV3Ci17Ci0gIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0KLSAgaWYgKG9zeHZpZGVvc2luay0+c3VwZXJ2aWV3KSB7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChvc3h2aWRlb3NpbmssICJvbGQgeHdpbmRvdyBpZCAlcCIsIG9zeHZpZGVvc2luay0+c3VwZXJ2aWV3KTsKLSAgICBpZiAob3N4dmlkZW9zaW5rLT5vc3h3aW5kb3cpIHsKLSAgICAgIFtvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+Z3N0dmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICB9Ci0gICAgW29zeHZpZGVvc2luay0+c3VwZXJ2aWV3IHJlbGVhc2VdOwotICB9Ci0gIGlmIChvc3h2aWRlb3NpbmstPm9zeHdpbmRvdyAhPSBOVUxMICYmIHZpZXcgIT0gTlVMTCkgewotICAgIGlmIChvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+aW50ZXJuYWwpIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAob3N4dmlkZW9zaW5rLCAiY2xvc2luZyBpbnRlcm5hbCB3aW5kb3ciKTsKLSAgICAgIG9zeHZpZGVvc2luay0+b3N4d2luZG93LT5jbG9zZWQgPSBUUlVFOwotICAgICAgW29zeHZpZGVvc2luay0+b3N4d2luZG93LT53aW4gY2xvc2VdOwotICAgICAgW29zeHZpZGVvc2luay0+b3N4d2luZG93LT53aW4gcmVsZWFzZV07Ci0gICAgfQotICB9Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChvc3h2aWRlb3NpbmssICJzZXQgeHdpbmRvdyBpZCAlcCIsIHZpZXcpOwotICBvc3h2aWRlb3NpbmstPnN1cGVydmlldyA9IFt2aWV3IHJldGFpbl07Ci0gIGlmIChvc3h2aWRlb3NpbmstPm9zeHdpbmRvdykgewotICAgIFtvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+Z3N0dmlldyBhZGRUb1N1cGVydmlldzogb3N4dmlkZW9zaW5rLT5zdXBlcnZpZXddOwotICAgIGlmICh2aWV3KSB7Ci0gICAgICBvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+aW50ZXJuYWwgPSBGQUxTRTsKLSAgICB9Ci0gIH0KLQotICBbcG9vbCByZWxlYXNlXTsKLX0KLQotLSAodm9pZCkgcmVzaXplCi17Ci0gIEdzdE9TWFdpbmRvdyAqb3N4d2luZG93ID0gb3N4dmlkZW9zaW5rLT5vc3h3aW5kb3c7Ci0KLSAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKG9zeHZpZGVvc2luaywgInJlc2l6aW5nIik7Ci0gIE5TU2l6ZSBzaXplID0ge29zeHdpbmRvdy0+d2lkdGgsIG9zeHdpbmRvdy0+aGVpZ2h0fTsKLSAgaWYgKG9zeHdpbmRvdy0+aW50ZXJuYWwpIHsKLSAgICBbb3N4d2luZG93LT53aW4gc2V0Q29udGVudFNpemU6c2l6ZV07Ci0gIH0KLSAgaWYgKG9zeHdpbmRvdy0+Z3N0dmlldykgewotICAgICAgW29zeHdpbmRvdy0+Z3N0dmlldyBzZXRWaWRlb1NpemUgOihpbnQpb3N4d2luZG93LT53aWR0aCA6KGludClvc3h3aW5kb3ctPmhlaWdodF07Ci0gIH0KLSAgR1NUX0lORk9fT0JKRUNUIChvc3h2aWRlb3NpbmssICJkb25lIik7Ci0KLSAgW3Bvb2wgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpIHNob3dGcmFtZTogKEdzdEJ1ZmZlck9iamVjdCAqKSBvYmplY3QKLXsKLSAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLSAgZ3VpbnQ4ICpkYXRhLCAqcmVhZHAsICp3cml0ZXA7Ci0gIGdpbnQgaSwgYWN0aXZlX3dpZHRoLCBzdHJpZGU7Ci0gIGd1aW50OCAqdGV4dHVyZV9idWZmZXI7Ci0gIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0gIEdzdEJ1ZmZlciAqYnVmID0gb2JqZWN0LT5idWY7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChvc3h2aWRlb3NpbmspOwotICBpZiAob3N4dmlkZW9zaW5rLT5vc3h3aW5kb3cgPT0gTlVMTCkKLSAgICAgIGdvdG8gbm9fd2luZG93OwotCi0gIHRleHR1cmVfYnVmZmVyID0gKGd1aW50OCAqKSBbb3N4dmlkZW9zaW5rLT5vc3h3aW5kb3ctPmdzdHZpZXcgZ2V0VGV4dHVyZUJ1ZmZlcl07Ci0gIGlmIChHX1VOTElLRUxZICh0ZXh0dXJlX2J1ZmZlciA9PSBOVUxMKSkKLSAgICAgIGdvdG8gbm9fdGV4dHVyZV9idWZmZXI7Ci0KLSAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmZnJhbWUsICZvc3h2aWRlb3NpbmstPmluZm8sIGJ1ZiwgR1NUX01BUF9SRUFEKSkKLSAgICAgIGdvdG8gbm9fbWFwOwotCi0gIGRhdGEgPSByZWFkcCA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBICgmZnJhbWUsIDApOwotICBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFICgmZnJhbWUsIDApOwotICB3cml0ZXAgPSB0ZXh0dXJlX2J1ZmZlcjsKLSAgYWN0aXZlX3dpZHRoID0gR1NUX1ZJREVPX1NJTktfV0lEVEggKG9zeHZpZGVvc2luaykgKiBzaXplb2YgKHNob3J0KTsKLSAgZm9yIChpID0gMDsgaSA8IEdTVF9WSURFT19TSU5LX0hFSUdIVCAob3N4dmlkZW9zaW5rKTsgaSsrKSB7Ci0gICAgICBtZW1jcHkgKHdyaXRlcCwgcmVhZHAsIGFjdGl2ZV93aWR0aCk7Ci0gICAgICB3cml0ZXAgKz0gYWN0aXZlX3dpZHRoOwotICAgICAgcmVhZHAgKz0gc3RyaWRlOwotICB9Ci0gIFtvc3h2aWRlb3NpbmstPm9zeHdpbmRvdy0+Z3N0dmlldyBkaXNwbGF5VGV4dHVyZV07Ci0KLSAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOwotCi1vdXQ6Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChvc3h2aWRlb3NpbmspOwotICBbb2JqZWN0IHJlbGVhc2VdOwotCi0gIFtwb29sIHJlbGVhc2VdOwotICByZXR1cm47Ci0KLW5vX21hcDoKLSAgR1NUX1dBUk5JTkdfT0JKRUNUIChvc3h2aWRlb3NpbmssICJjb3VsZG4ndCBtYXAgZnJhbWUiKTsKLSAgZ290byBvdXQ7Ci0KLW5vX3dpbmRvdzoKLSAgR1NUX1dBUk5JTkdfT0JKRUNUIChvc3h2aWRlb3NpbmssICJub3Qgc2hvd2luZyBmcmFtZSBzaW5jZSB3ZSBoYXZlIG5vIHdpbmRvdyAoIT8pIik7Ci0gIGdvdG8gb3V0OwotCi1ub190ZXh0dXJlX2J1ZmZlcjoKLSAgR1NUX0VMRU1FTlRfRVJST1IgKG9zeHZpZGVvc2luaywgUkVTT1VSQ0UsIFdSSVRFLCAoTlVMTCksCi0gICAgICAgICAgKCJ0aGUgdGV4dHVyZSBidWZmZXIgaXMgTlVMTCIpKTsKLSAgZ290byBvdXQ7Ci19Ci0KLS0odm9pZCkgZGVzdHJveQotewotICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbDsKLSAgR3N0T1NYV2luZG93ICpvc3h3aW5kb3c7Ci0KLSAgcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwotCi0gIG9zeHdpbmRvdyA9IG9zeHZpZGVvc2luay0+b3N4d2luZG93OwotICBvc3h2aWRlb3NpbmstPm9zeHdpbmRvdyA9IE5VTEw7Ci0KLSAgaWYgKG9zeHdpbmRvdykgewotICAgIGlmIChvc3h2aWRlb3NpbmstPnN1cGVydmlldykgewotICAgICAgW29zeHdpbmRvdy0+Z3N0dmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICB9Ci0gICAgW29zeHdpbmRvdy0+Z3N0dmlldyByZWxlYXNlXTsKLSAgICBpZiAob3N4d2luZG93LT5pbnRlcm5hbCkgewotICAgICAgaWYgKCFvc3h3aW5kb3ctPmNsb3NlZCkgewotICAgICAgICBvc3h3aW5kb3ctPmNsb3NlZCA9IFRSVUU7Ci0gICAgICAgIFtvc3h3aW5kb3ctPndpbiBjbG9zZV07Ci0gICAgICAgIFtvc3h3aW5kb3ctPndpbiByZWxlYXNlXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ19mcmVlIChvc3h3aW5kb3cpOwotICB9Ci0gIFtwb29sIHJlbGVhc2VdOwotfQotCi0jaWZuZGVmIEdTVFJFQU1FUl9HTElCX0NPQ09BX05TQVBQTElDQVRJT04KLS0odm9pZCkgbnNBcHBUaHJlYWQKLXsKLSAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2w7Ci0KLSAgLyogc2V0IHRoZSBtYWluIHJ1bmxvb3AgYXMgdGhlIHJ1bmxvb3AgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gVGhpcyBoYXMgdGhlCi0gICAqIGVmZmVjdCB0aGF0IGNhbGxpbmcgTlNBcHAgbmV4dEV2ZW50TWF0Y2hpbmdNYXNrOnVudGlsRGF0ZTppbk1vZGU6ZGVxdWV1ZQotICAgKiBydW5zIHRoZSBtYWluIHJ1bmxvb3AuCi0gICAqLwotICBfQ0ZSdW5Mb29wU2V0Q3VycmVudChDRlJ1bkxvb3BHZXRNYWluKCkpOwotCi0gIC8qIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgSXNNYWluVGhyZWFkIGNoZWNrcyBpbiBjb3JlIGZvdW5kYXRpb24gd29yayBmcm9tIHRoZQotICAgKiBjdXJyZW50IHRocmVhZAotICAgKi8KLSAgX0NGTWFpblBUaHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLQotICBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0KLSAgW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOwotICBbTlNBcHAgZmluaXNoTGF1bmNoaW5nXTsKLQotICBnX211dGV4X2xvY2sgKCZfcnVuX2xvb3BfbXV0ZXgpOwotICBnX2NvbmRfc2lnbmFsICgmX3J1bl9sb29wX2NvbmQpOwotICBnX211dGV4X3VubG9jayAoJl9ydW5fbG9vcF9tdXRleCk7Ci0KLSAgLyogcnVuIHRoZSBsb29wICovCi0gIHJ1bl9uc19hcHBfbG9vcCAoKTsKLQotICBbcG9vbCByZWxlYXNlXTsKLX0KLQotLSh2b2lkKSBjaGVja01haW5SdW5Mb29wCi17Ci0gIGdfbXV0ZXhfbG9jayAoJl9ydW5fbG9vcF9tdXRleCk7Ci0gIGdfY29uZF9zaWduYWwgKCZfcnVuX2xvb3BfY29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmX3J1bl9sb29wX211dGV4KTsKLX0KLSNlbmRpZgotCi1AZW5kCi0KLUAgaW1wbGVtZW50YXRpb24gR3N0QnVmZmVyT2JqZWN0Ci0tKGlkKSBpbml0V2l0aEJ1ZmZlcjogKEdzdEJ1ZmZlciopIGJ1ZmZlcgotewotICBzZWxmID0gW3N1cGVyIGluaXRdOwotICBnc3RfYnVmZmVyX3JlZihidWZmZXIpOwotICBzZWxmLT5idWYgPSBidWZmZXI7Ci0gIHJldHVybiBzZWxmOwotfQotCi0tKHZvaWQpIGRlYWxsb2N7Ci0gIGdzdF9idWZmZXJfdW5yZWYoYnVmKTsKLSAgW3N1cGVyIGRlYWxsb2NdOwotfQotQGVuZAotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAib3N4dmlkZW9zaW5rIiwKLSAgICAgICAgICBHU1RfUkFOS19NQVJHSU5BTCwgR1NUX1RZUEVfT1NYX1ZJREVPX1NJTkspKQotICAgIHJldHVybiBGQUxTRTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoZ3N0X2RlYnVnX29zeF92aWRlb19zaW5rLCAib3N4dmlkZW9zaW5rIiwgMCwKLSAgICAgICJvc3h2aWRlb3NpbmsgZWxlbWVudCIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgb3N4dmlkZW8sCi0gICAgIk9TWCBuYXRpdmUgdmlkZW8gb3V0cHV0IHBsdWdpbiIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vTWFrZWZpbGUuYW0gYi9zeXMvc3VuYXVkaW8vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YjYyZGEuLjAwMDAwMDAKLS0tIGEvc3lzL3N1bmF1ZGlvL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0c3VuYXVkaW8ubGEKLQotbGliZ3N0c3VuYXVkaW9fbGFfU09VUkNFUyA9IGdzdHN1bmF1ZGlvLmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvc2luay5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb21peGVyY3RybC5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb21peGVyLmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb3NyYy5jCi0KLWxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdHN1bmF1ZGlvX2xhX0xJQkFERCA9IFwKLSAgICAgICAgLWxnc3RpbnRlcmZhY2VzLUBHU1RfQVBJX1ZFUlNJT05AIFwKLSAgICAgICAgLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgICAgICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0gICAgICAgICQoR1NUX0xJQlMpCi1saWJnc3RzdW5hdWRpb19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MgPSAkKEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTKQotCi1ub2luc3RfSEVBREVSUyA9IGdzdHN1bmF1ZGlvc2luay5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0c3VuYXVkaW9taXhlci5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0c3VuYXVkaW9taXhlcmN0cmwuaCBcCi0gICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuaCBcCi0gICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvc3JjLmgKLQpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL01ha2VmaWxlLmluIGIvc3lzL3N1bmF1ZGlvL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDVlYzcyLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDk4MSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSBzeXMvc3VuYXVkaW8KLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3RzdW5hdWRpb19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0c3VuYXVkaW9fbGFfT0JKRUNUUyA9IGxpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvLmxvIFwKLQlsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NpbmsubG8gXAotCWxpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJjdHJsLmxvIFwKLQlsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyLmxvIFwKLQlsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVydHJhY2subG8gXAotCWxpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmxvIFwKLQlsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NyYy5sbwotbGliZ3N0c3VuYXVkaW9fbGFfT0JKRUNUUyA9ICQoYW1fbGliZ3N0c3VuYXVkaW9fbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHN1bmF1ZGlvX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0c3VuYXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgXAotCSQoQ0NMRCkgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3RzdW5hdWRpb19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3RzdW5hdWRpb19sYV9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChsaWJnc3RzdW5hdWRpb19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3RzdW5hdWRpby5sYQotbGliZ3N0c3VuYXVkaW9fbGFfU09VUkNFUyA9IGdzdHN1bmF1ZGlvLmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvc2luay5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb21peGVyY3RybC5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb21peGVyLmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RzdW5hdWRpb3NyYy5jCi0KLWxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWxpYmdzdHN1bmF1ZGlvX2xhX0xJQkFERCA9IFwKLSAgICAgICAgLWxnc3RpbnRlcmZhY2VzLUBHU1RfQVBJX1ZFUlNJT05AIFwKLSAgICAgICAgLWxnc3RhdWRpby1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgICAgICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0gICAgICAgICQoR1NUX0xJQlMpCi0KLWxpYmdzdHN1bmF1ZGlvX2xhX0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWxpYmdzdHN1bmF1ZGlvX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1ub2luc3RfSEVBREVSUyA9IGdzdHN1bmF1ZGlvc2luay5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0c3VuYXVkaW9taXhlci5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0c3VuYXVkaW9taXhlcmN0cmwuaCBcCi0gICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oIFwKLSAgICAgICAgICAgICAgICAgZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuaCBcCi0gICAgICAgICAgICAgICAgIGdzdHN1bmF1ZGlvc3JjLmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgc3lzL3N1bmF1ZGlvL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHN5cy9zdW5hdWRpby9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUzogJChwbHVnaW5fTFRMSUJSQVJJRVMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQocGx1Z2luZGlyKSIgfHwgZXhpdCAxOyBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKHBsdWdpbmRpciknIjsgXAotCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKHBsdWdpbmRpcikiOyBcCi0JfQotCi11bmluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChwbHVnaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgJChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKHBsdWdpbmRpcikvJCRmJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiI7IFwKLQlkb25lCi0KLWNsZWFuLXBsdWdpbkxUTElCUkFSSUVTOgotCS10ZXN0IC16ICIkKHBsdWdpbl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyBcCi0JbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKLQkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCi0JICAgICAgc29ydCAtdWA7IFwKLQl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAotCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAotCSAgcm0gLWYgJCR7bG9jc307IFwKLQl9Ci0KLWxpYmdzdHN1bmF1ZGlvLmxhOiAkKGxpYmdzdHN1bmF1ZGlvX2xhX09CSkVDVFMpICQobGliZ3N0c3VuYXVkaW9fbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmdzdHN1bmF1ZGlvX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJnc3RzdW5hdWRpb19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0c3VuYXVkaW9fbGFfT0JKRUNUUykgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJjdHJsLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVydHJhY2suUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NpbmsuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NyYy5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW8ubG86IGdzdHN1bmF1ZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW8ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvLlRwbyAtYyAtbyBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpby5sbyBgdGVzdCAtZiAnZ3N0c3VuYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3VuYXVkaW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW8uVHBvICQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpby5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzdW5hdWRpby5jJyBvYmplY3Q9J2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c3VuYXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c3VuYXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW8ubG8gYHRlc3QgLWYgJ2dzdHN1bmF1ZGlvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHN1bmF1ZGlvLmMKLQotbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9zaW5rLmxvOiBnc3RzdW5hdWRpb3NpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHN1bmF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvc2luay5UcG8gLWMgLW8gbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9zaW5rLmxvIGB0ZXN0IC1mICdnc3RzdW5hdWRpb3NpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3VuYXVkaW9zaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvc2luay5UcG8gJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvc2luay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzdW5hdWRpb3NpbmsuYycgb2JqZWN0PSdsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NpbmsubG8gYHRlc3QgLWYgJ2dzdHN1bmF1ZGlvc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb3NpbmsuYwotCi1saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyY3RybC5sbzogZ3N0c3VuYXVkaW9taXhlcmN0cmwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHN1bmF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyY3RybC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcmN0cmwuVHBvIC1jIC1vIGxpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJjdHJsLmxvIGB0ZXN0IC1mICdnc3RzdW5hdWRpb21peGVyY3RybC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb21peGVyY3RybC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyY3RybC5UcG8gJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJjdHJsLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmMnIG9iamVjdD0nbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcmN0cmwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyY3RybC5sbyBgdGVzdCAtZiAnZ3N0c3VuYXVkaW9taXhlcmN0cmwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3VuYXVkaW9taXhlcmN0cmwuYwotCi1saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyLmxvOiBnc3RzdW5hdWRpb21peGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlci5UcG8gLWMgLW8gbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlci5sbyBgdGVzdCAtZiAnZ3N0c3VuYXVkaW9taXhlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb21peGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXIuVHBvICQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHN1bmF1ZGlvbWl4ZXIuYycgb2JqZWN0PSdsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0c3VuYXVkaW9fbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0c3VuYXVkaW9fbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlci5sbyBgdGVzdCAtZiAnZ3N0c3VuYXVkaW9taXhlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb21peGVyLmMKLQotbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmxvOiBnc3RzdW5hdWRpb21peGVydHJhY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHN1bmF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVydHJhY2subG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5UcG8gLWMgLW8gbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmxvIGB0ZXN0IC1mICdnc3RzdW5hdWRpb21peGVydHJhY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5UcG8gJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3RzdW5hdWRpb21peGVydHJhY2suYycgb2JqZWN0PSdsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVydHJhY2subG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVydHJhY2subG8gYHRlc3QgLWYgJ2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb21peGVydHJhY2suYwotCi1saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5sbzogZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHN1bmF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuVHBvIC1jIC1vIGxpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmxvIGB0ZXN0IC1mICdnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5UcG8gJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmMnIG9iamVjdD0nbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5sbyBgdGVzdCAtZiAnZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYwotCi1saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NyYy5sbzogZ3N0c3VuYXVkaW9zcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHN1bmF1ZGlvX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHN1bmF1ZGlvX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NyYy5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9zcmMuVHBvIC1jIC1vIGxpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvc3JjLmxvIGB0ZXN0IC1mICdnc3RzdW5hdWRpb3NyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3RzdW5hdWRpb3NyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NyYy5UcG8gJChERVBESVIpL2xpYmdzdHN1bmF1ZGlvX2xhLWdzdHN1bmF1ZGlvc3JjLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHN1bmF1ZGlvc3JjLmMnIG9iamVjdD0nbGliZ3N0c3VuYXVkaW9fbGEtZ3N0c3VuYXVkaW9zcmMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3RzdW5hdWRpb19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3RzdW5hdWRpb19sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3RzdW5hdWRpb19sYS1nc3RzdW5hdWRpb3NyYy5sbyBgdGVzdCAtZiAnZ3N0c3VuYXVkaW9zcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0c3VuYXVkaW9zcmMuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW8uYyBiL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzNjMWYwLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lciAtIFN1bkF1ZGlvIHBsdWdpbgotICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwKLSAqICAgICAgICAgICAgICAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdC9nc3QtaTE4bi1wbHVnaW4uaCIKLQotI2luY2x1ZGUgImdzdHN1bmF1ZGlvbWl4ZXIuaCIKLSNpbmNsdWRlICJnc3RzdW5hdWRpb3NpbmsuaCIKLSNpbmNsdWRlICJnc3RzdW5hdWRpb3NyYy5oIgotCi1leHRlcm4gZ2NoYXIgKl9fZ3N0X29zc19wbHVnaW5fZGlyOwotCi1HU1RfREVCVUdfQ0FURUdPUlkgKHN1bmF1ZGlvX2RlYnVnKTsKLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJzdW5hdWRpb21peGVyIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgICAgICBHU1RfVFlQRV9TVU5BVURJT19NSVhFUikgfHwKLSAgICAgICFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAic3VuYXVkaW9zaW5rIiwgR1NUX1JBTktfU0VDT05EQVJZLAotICAgICAgICAgIEdTVF9UWVBFX1NVTkFVRElPX1NJTkspIHx8Ci0gICAgICAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInN1bmF1ZGlvc3JjIiwgR1NUX1JBTktfU0VDT05EQVJZLAotICAgICAgICAgIEdTVF9UWVBFX1NVTkFVRElPX1NSQykpIHsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAoc3VuYXVkaW9fZGVidWcsICJzdW5hdWRpbyIsIDAsICJzdW5hdWRpbyBlbGVtZW50cyIpOwotCi0jaWZkZWYgRU5BQkxFX05MUwotICBiaW5kdGV4dGRvbWFpbiAoR0VUVEVYVF9QQUNLQUdFLCBMT0NBTEVESVIpOwotICBiaW5kX3RleHRkb21haW5fY29kZXNldCAoR0VUVEVYVF9QQUNLQUdFLCAiVVRGLTgiKTsKLSNlbmRpZiAvKiBFTkFCTEVfTkxTICovCi0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICBzdW5hdWRpbywKLSAgICAiU3VuIEF1ZGlvIHN1cHBvcnQgZm9yIEdTdHJlYW1lciIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pCmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlci5jIGIvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0MzFiZi4uMDAwMDAwMAotLS0gYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgLSBTdW5BdWRpbyBtaXhlcgotICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwKLSAqICAgICAgICAgICAgICAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXN1bmF1ZGlvbWl4ZXIKLSAqCi0gKiBzdW5hdWRpb21peGVyIGlzIGFuIG1peGVyIHRoYXQgY29udHJvbHMgdGhlIHNvdW5kIGlucHV0IGFuZCBvdXRwdXQKLSAqIGxldmVscyB3aXRoIHRoZSBTdW4gQXVkaW8gaW50ZXJmYWNlIGF2YWlsYWJsZSBpbiBTb2xhcmlzLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHN1bmF1ZGlvbWl4ZXIuaCIKLQotR1NUX0JPSUxFUlBMQVRFX1dJVEhfSU5URVJGQUNFIChHc3RTdW5BdWRpb01peGVyLCBnc3Rfc3VuYXVkaW9taXhlciwKLSAgICBHc3RFbGVtZW50LCBHU1RfVFlQRV9FTEVNRU5ULCBHc3RNaXhlciwgR1NUX1RZUEVfTUlYRVIsIGdzdF9zdW5hdWRpb21peGVyKTsKLQotR1NUX0lNUExFTUVOVF9TVU5BVURJT19NSVhFUl9DVFJMX01FVEhPRFMgKEdzdFN1bkF1ZGlvTWl4ZXIsIGdzdF9zdW5hdWRpb21peGVyKTsKLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF9zdW5hdWRpb21peGVyX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqCi0gICAgZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbik7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9taXhlcl9iYXNlX2luaXQgKGdwb2ludGVyIGtsYXNzKQotewotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChHU1RfRUxFTUVOVF9DTEFTUyAoa2xhc3MpLAotICAgICAgIlN1biBBdWRpbyBNaXhlciIsICJHZW5lcmljL0F1ZGlvIiwKLSAgICAgICJDb250cm9sIHNvdW5kIGlucHV0IGFuZCBvdXRwdXQgbGV2ZWxzIHdpdGggU3VuIEF1ZGlvIiwKLSAgICAgICJCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9taXhlcl9jbGFzc19pbml0IChHc3RTdW5BdWRpb01peGVyQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF9zdW5hdWRpb21peGVyX2NoYW5nZV9zdGF0ZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb21peGVyX2luaXQgKEdzdFN1bkF1ZGlvTWl4ZXIgKiB0aGlzLAotICAgIEdzdFN1bkF1ZGlvTWl4ZXJDbGFzcyAqIGdfY2xhc3MpCi17Ci0gIHRoaXMtPm1peGVyID0gTlVMTDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3Rfc3VuYXVkaW9taXhlcl9jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RTdW5BdWRpb01peGVyICp0aGlzID0gR1NUX1NVTkFVRElPX01JWEVSIChlbGVtZW50KTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTlVMTF9UT19SRUFEWToKLSAgICAgIGlmICghdGhpcy0+bWl4ZXIpIHsKLSAgICAgICAgY29uc3QgY2hhciAqYXVkaW9kZXY7Ci0KLSAgICAgICAgYXVkaW9kZXYgPSBnX2dldGVudiAoIkFVRElPREVWIik7Ci0gICAgICAgIGlmIChhdWRpb2RldiA9PSBOVUxMKSB7Ci0gICAgICAgICAgdGhpcy0+bWl4ZXIgPSBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX25ldyAoIi9kZXYvYXVkaW9jdGwiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBnY2hhciAqZGV2aWNlID0gZ19zdHJkdXBfcHJpbnRmICgiJXNjdGwiLCBhdWRpb2Rldik7Ci0KLSAgICAgICAgICB0aGlzLT5taXhlciA9IGdzdF9zdW5hdWRpb21peGVyX2N0cmxfbmV3IChkZXZpY2UpOwotICAgICAgICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICBpZiAodGhpcy0+bWl4ZXIpIHsKLSAgICAgICAgZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9mcmVlICh0aGlzLT5taXhlcik7Ci0gICAgICAgIHRoaXMtPm1peGVyID0gTlVMTDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKQotICAgIHJldHVybiBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuaCBiL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMjkyZWQuLjAwMDAwMDAKLS0tIGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgLSBTdW5BdWRpbyBtaXhlcgotICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwKLSAqICAgICAgICAgICAgICAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1NVTkFVRElPX01JWEVSX0hfXwotI2RlZmluZSBfX0dTVF9TVU5BVURJT19NSVhFUl9IX18KLQotI2luY2x1ZGUgImdzdHN1bmF1ZGlvbWl4ZXJjdHJsLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfU1VOQVVESU9fTUlYRVIob2JqKQkJICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NVTkFVRElPX01JWEVSLEdzdFN1bkF1ZGlvTWl4ZXIpKQotI2RlZmluZSBHU1RfU1VOQVVESU9fTUlYRVJfQ0xBU1Moa2xhc3MpCSAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1NVTkFVRElPX01JWEVSLEdzdFN1bkF1ZGlvTWl4ZXJDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19NSVhFUihvYmopCSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9TVU5BVURJT19NSVhFUikpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19NSVhFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU1VOQVVESU9fTUlYRVIpKQotI2RlZmluZSBHU1RfVFlQRV9TVU5BVURJT19NSVhFUgkJICAgKGdzdF9zdW5hdWRpb21peGVyX2dldF90eXBlKCkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTdW5BdWRpb01peGVyIEdzdFN1bkF1ZGlvTWl4ZXI7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3VuQXVkaW9NaXhlckNsYXNzIEdzdFN1bkF1ZGlvTWl4ZXJDbGFzczsKLQotc3RydWN0IF9Hc3RTdW5BdWRpb01peGVyIHsKLSAgR3N0RWxlbWVudAkJcGFyZW50OwotCi0gIEdzdFN1bkF1ZGlvTWl4ZXJDdHJsCSptaXhlcjsKLX07Ci0KLXN0cnVjdCBfR3N0U3VuQXVkaW9NaXhlckNsYXNzIHsKLSAgR3N0RWxlbWVudENsYXNzCXBhcmVudDsKLX07Ci0KLUdUeXBlCQlnc3Rfc3VuYXVkaW9taXhlcl9nZXRfdHlwZQkJKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfU1VOQVVESU9fTUlYRVJfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuYyBiL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmZjNGUyLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyY3RybC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgLSBTdW5BdWRpbyBtaXhlciBpbnRlcmZhY2UgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwOCwyMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sCi0gKiAgICAgICAgICAgICAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBKYW4gU2NobWlkdCA8amFuLnNjaG1pZHRAc3VuLmNvbT4gCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwKLSAqICAgICAgICAgICAgICAgR2FycmV0dCBEJ0Ftb3JlIDxnYXJyZXR0LmRhbW9yZUBzdW4uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9hdWRpby5oPgotI2luY2x1ZGUgPHN5cy9taXhlci5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC1pMThuLXBsdWdpbi5oPgotCi0jaW5jbHVkZSAiZ3N0c3VuYXVkaW9taXhlcmN0cmwuaCIKLSNpbmNsdWRlICJnc3RzdW5hdWRpb21peGVydHJhY2suaCIKLSNpbmNsdWRlICJnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChzdW5hdWRpb19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzdW5hdWRpb19kZWJ1ZwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdW5hdWRpb21peGVyX2N0cmxfb3BlbiAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlcikKLXsKLSAgaW50IGZkOwotCi0gIC8qIEZpcnN0IHRyeSB0byBvcGVuIG5vbi1ibG9ja2luZyAqLwotICBmZCA9IG9wZW4gKG1peGVyLT5kZXZpY2UsIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwotCi0gIGlmIChmZCA+PSAwKSB7Ci0gICAgY2xvc2UgKGZkKTsKLSAgICBmZCA9IG9wZW4gKG1peGVyLT5kZXZpY2UsIE9fV1JPTkxZKTsKLSAgfQotCi0gIGlmIChmZCA9PSAtMSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG1peGVyLAotICAgICAgICAiRmFpbGVkIHRvIG9wZW4gbWl4ZXIgZGV2aWNlICVzLCBtaXhpbmcgZGlzYWJsZWQ6ICVzIiwgbWl4ZXItPmRldmljZSwKLSAgICAgICAgc3RyZXJyb3IgKGVycm5vKSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLSAgbWl4ZXItPm1peGVyX2ZkID0gZmQ7Ci0KLSAgLyogVHJ5IHRvIHNldCB0aGUgbXVsdGlwbGUgb3BlbiBmbGFnIGlmIHdlIGNhbiwgYnV0IGlnbm9yZSBlcnJvcnMgKi8KLSAgaW9jdGwgKG1peGVyLT5taXhlcl9mZCwgQVVESU9fTUlYRVJfTVVMVElQTEVfT1BFTik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAobWl4ZXIsICJPcGVuZWQgbWl4ZXIgZGV2aWNlICVzIiwgbWl4ZXItPmRldmljZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXZvaWQKLWdzdF9zdW5hdWRpb21peGVyX2N0cmxfYnVpbGRfbGlzdCAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlcikKLXsKLSAgR3N0TWl4ZXJUcmFjayAqdHJhY2s7Ci0gIEdzdE1peGVyT3B0aW9ucyAqb3B0aW9uczsKLQotICBzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb2luZm87Ci0KLSAgLyoKLSAgICogRG8gbm90IGNvbnRpbnVlIGFwcGVuZGluZyB0aGUgc2FtZSAzIHN0YXRpYyB0cmFja3Mgb250byB0aGUgbGlzdAotICAgKi8KLSAgaWYgKG1peGVyLT50cmFja2xpc3QgPT0gTlVMTCkgewotICAgIGdfcmV0dXJuX2lmX2ZhaWwgKG1peGVyLT5taXhlcl9mZCAhPSAtMSk7Ci0KLSAgICAvKiBxdWVyeSBhdmFpbGFibGUgcG9ydHMgKi8KLSAgICBpZiAoaW9jdGwgKG1peGVyLT5taXhlcl9mZCwgQVVESU9fR0VUSU5GTywgJmF1ZGlvaW5mbykgPCAwKSB7Ci0gICAgICBnX3dhcm5pbmcgKCJFcnJvciBnZXR0aW5nIGF1ZGlvIGRldmljZSB2b2x1bWUiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBPdXRwdXQgJiBzaG91bGQgYmUgTUFTVEVSIHdoZW4gaXQncyB0aGUgb25seSBvbmUuICovCi0gICAgdHJhY2sgPSBnc3Rfc3VuYXVkaW9taXhlcl90cmFja19uZXcgKEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQpOwotICAgIG1peGVyLT50cmFja2xpc3QgPSBnX2xpc3RfYXBwZW5kIChtaXhlci0+dHJhY2tsaXN0LCB0cmFjayk7Ci0KLSAgICAvKiBJbnB1dCAqLwotICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfUkVDT1JEKTsKLSAgICBtaXhlci0+dHJhY2tsaXN0ID0gZ19saXN0X2FwcGVuZCAobWl4ZXItPnRyYWNrbGlzdCwgdHJhY2spOwotCi0gICAgLyogTW9uaXRvciAqLwotICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfTU9OSVRPUik7Ci0gICAgbWl4ZXItPnRyYWNrbGlzdCA9IGdfbGlzdF9hcHBlbmQgKG1peGVyLT50cmFja2xpc3QsIHRyYWNrKTsKLQotICAgIGlmIChhdWRpb2luZm8ucGxheS5hdmFpbF9wb3J0cyAmIEFVRElPX1NQRUFLRVIpIHsKLSAgICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfU1BFQUtFUik7Ci0gICAgICBtaXhlci0+dHJhY2tsaXN0ID0gZ19saXN0X2FwcGVuZCAobWl4ZXItPnRyYWNrbGlzdCwgdHJhY2spOwotICAgIH0KLSAgICBpZiAoYXVkaW9pbmZvLnBsYXkuYXZhaWxfcG9ydHMgJiBBVURJT19IRUFEUEhPTkUpIHsKLSAgICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfSFApOwotICAgICAgbWl4ZXItPnRyYWNrbGlzdCA9IGdfbGlzdF9hcHBlbmQgKG1peGVyLT50cmFja2xpc3QsIHRyYWNrKTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvaW5mby5wbGF5LmF2YWlsX3BvcnRzICYgQVVESU9fTElORV9PVVQpIHsKLSAgICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfTElORU9VVCk7Ci0gICAgICBtaXhlci0+dHJhY2tsaXN0ID0gZ19saXN0X2FwcGVuZCAobWl4ZXItPnRyYWNrbGlzdCwgdHJhY2spOwotICAgIH0KLSAgICBpZiAoYXVkaW9pbmZvLnBsYXkuYXZhaWxfcG9ydHMgJiBBVURJT19TUERJRl9PVVQpIHsKLSAgICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfU1BESUZPVVQpOwotICAgICAgbWl4ZXItPnRyYWNrbGlzdCA9IGdfbGlzdF9hcHBlbmQgKG1peGVyLT50cmFja2xpc3QsIHRyYWNrKTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvaW5mby5wbGF5LmF2YWlsX3BvcnRzICYgQVVESU9fQVVYMV9PVVQpIHsKLSAgICAgIHRyYWNrID0gZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3IChHU1RfU1VOQVVESU9fVFJBQ0tfQVVYMU9VVCk7Ci0gICAgICBtaXhlci0+dHJhY2tsaXN0ID0gZ19saXN0X2FwcGVuZCAobWl4ZXItPnRyYWNrbGlzdCwgdHJhY2spOwotICAgIH0KLSAgICBpZiAoYXVkaW9pbmZvLnBsYXkuYXZhaWxfcG9ydHMgJiBBVURJT19BVVgyX09VVCkgewotICAgICAgdHJhY2sgPSBnc3Rfc3VuYXVkaW9taXhlcl90cmFja19uZXcgKEdTVF9TVU5BVURJT19UUkFDS19BVVgyT1VUKTsKLSAgICAgIG1peGVyLT50cmFja2xpc3QgPSBnX2xpc3RfYXBwZW5kIChtaXhlci0+dHJhY2tsaXN0LCB0cmFjayk7Ci0gICAgfQotCi0gICAgaWYgKGF1ZGlvaW5mby5yZWNvcmQuYXZhaWxfcG9ydHMgIT0gQVVESU9fTk9ORSkgewotICAgICAgb3B0aW9ucyA9Ci0gICAgICAgICAgZ3N0X3N1bmF1ZGlvbWl4ZXJfb3B0aW9uc19uZXcgKG1peGVyLCBHU1RfU1VOQVVESU9fVFJBQ0tfUkVDU1JDKTsKLSAgICAgIG1peGVyLT50cmFja2xpc3QgPSBnX2xpc3RfYXBwZW5kIChtaXhlci0+dHJhY2tsaXN0LCBvcHRpb25zKTsKLSAgICB9Ci0gIH0KLX0KLQotR3N0U3VuQXVkaW9NaXhlckN0cmwgKgotZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9uZXcgKGNvbnN0IGNoYXIgKmRldmljZSkKLXsKLSAgR3N0U3VuQXVkaW9NaXhlckN0cmwgKnJldCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGRldmljZSAhPSBOVUxMLCBOVUxMKTsKLQotICByZXQgPSBnX25ldzAgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsLCAxKTsKLQotICByZXQtPmRldmljZSA9IGdfc3RyZHVwIChkZXZpY2UpOwotICByZXQtPm1peGVyX2ZkID0gLTE7Ci0gIHJldC0+dHJhY2tsaXN0ID0gTlVMTDsKLQotICBpZiAoIWdzdF9zdW5hdWRpb21peGVyX2N0cmxfb3BlbiAocmV0KSkKLSAgICBnb3RvIGVycm9yOwotCi0gIHJldHVybiByZXQ7Ci0KLWVycm9yOgotICBpZiAocmV0KQotICAgIGdzdF9zdW5hdWRpb21peGVyX2N0cmxfZnJlZSAocmV0KTsKLQotICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZAotZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9mcmVlIChHc3RTdW5BdWRpb01peGVyQ3RybCAqIG1peGVyKQotewotICBnX3JldHVybl9pZl9mYWlsIChtaXhlciAhPSBOVUxMKTsKLQotICBpZiAobWl4ZXItPmRldmljZSkgewotICAgIGdfZnJlZSAobWl4ZXItPmRldmljZSk7Ci0gICAgbWl4ZXItPmRldmljZSA9IE5VTEw7Ci0gIH0KLQotICBpZiAobWl4ZXItPnRyYWNrbGlzdCkgewotICAgIGdfbGlzdF9mb3JlYWNoIChtaXhlci0+dHJhY2tsaXN0LCAoR0Z1bmMpIGdfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgICBnX2xpc3RfZnJlZSAobWl4ZXItPnRyYWNrbGlzdCk7Ci0gICAgbWl4ZXItPnRyYWNrbGlzdCA9IE5VTEw7Ci0gIH0KLQotICBpZiAobWl4ZXItPm1peGVyX2ZkICE9IC0xKSB7Ci0gICAgY2xvc2UgKG1peGVyLT5taXhlcl9mZCk7Ci0gICAgbWl4ZXItPm1peGVyX2ZkID0gLTE7Ci0gIH0KLQotICBnX2ZyZWUgKG1peGVyKTsKLX0KLQotR3N0TWl4ZXJGbGFncwotZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9nZXRfbWl4ZXJfZmxhZ3MgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIpCi17Ci0gIHJldHVybiBHU1RfTUlYRVJfRkxBR19IQVNfV0hJVEVMSVNUIHwgR1NUX01JWEVSX0ZMQUdfR1JPVVBJTkc7Ci19Ci0KLWNvbnN0IEdMaXN0ICoKLWdzdF9zdW5hdWRpb21peGVyX2N0cmxfbGlzdF90cmFja3MgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIpCi17Ci0gIGdzdF9zdW5hdWRpb21peGVyX2N0cmxfYnVpbGRfbGlzdCAobWl4ZXIpOwotCi0gIHJldHVybiAoY29uc3QgR0xpc3QgKikgbWl4ZXItPnRyYWNrbGlzdDsKLX0KLQotdm9pZAotZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9nZXRfdm9sdW1lIChHc3RTdW5BdWRpb01peGVyQ3RybCAqIG1peGVyLAotICAgIEdzdE1peGVyVHJhY2sgKiB0cmFjaywgZ2ludCAqIHZvbHVtZXMpCi17Ci0gIGdpbnQgZ2FpbiwgYmFsYW5jZTsKLSAgZmxvYXQgcmF0aW87Ci0gIHN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvaW5mbzsKLSAgR3N0U3VuQXVkaW9NaXhlclRyYWNrICpzdW5hdWRpb3RyYWNrOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19TVU5BVURJT19NSVhFUl9UUkFDSyAodHJhY2spKTsKLSAgc3VuYXVkaW90cmFjayA9IEdTVF9TVU5BVURJT19NSVhFUl9UUkFDSyAodHJhY2spOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1peGVyLT5taXhlcl9mZCAhPSAtMSk7Ci0KLSAgaWYgKGlvY3RsIChtaXhlci0+bWl4ZXJfZmQsIEFVRElPX0dFVElORk8sICZhdWRpb2luZm8pIDwgMCkgewotICAgIGdfd2FybmluZyAoIkVycm9yIGdldHRpbmcgYXVkaW8gZGV2aWNlIHZvbHVtZSIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGJhbGFuY2UgPSBBVURJT19NSURfQkFMQU5DRTsKLSAgZ2FpbiA9IDA7Ci0KLSAgc3dpdGNoIChzdW5hdWRpb3RyYWNrLT50cmFja19udW0pIHsKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQ6Ci0gICAgICBnYWluID0gKGludCkgYXVkaW9pbmZvLnBsYXkuZ2FpbjsKLSAgICAgIGJhbGFuY2UgPSBhdWRpb2luZm8ucGxheS5iYWxhbmNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfUkVDT1JEOgotICAgICAgZ2FpbiA9IChpbnQpIGF1ZGlvaW5mby5yZWNvcmQuZ2FpbjsKLSAgICAgIGJhbGFuY2UgPSBhdWRpb2luZm8ucmVjb3JkLmJhbGFuY2U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19NT05JVE9SOgotICAgICAgZ2FpbiA9IChpbnQpIGF1ZGlvaW5mby5tb25pdG9yX2dhaW47Ci0gICAgICBiYWxhbmNlID0gYXVkaW9pbmZvLnJlY29yZC5iYWxhbmNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfU1BFQUtFUjoKLSAgICAgIGlmIChhdWRpb2luZm8ucGxheS5wb3J0ICYgQVVESU9fU1BFQUtFUikKLSAgICAgICAgZ2FpbiA9IEFVRElPX01BWF9HQUlOOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfSFA6Ci0gICAgICBpZiAoYXVkaW9pbmZvLnBsYXkucG9ydCAmIEFVRElPX0hFQURQSE9ORSkKLSAgICAgICAgZ2FpbiA9IEFVRElPX01BWF9HQUlOOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfTElORU9VVDoKLSAgICAgIGlmIChhdWRpb2luZm8ucGxheS5wb3J0ICYgQVVESU9fTElORV9PVVQpCi0gICAgICAgIGdhaW4gPSBBVURJT19NQVhfR0FJTjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX1NQRElGT1VUOgotICAgICAgaWYgKGF1ZGlvaW5mby5wbGF5LnBvcnQgJiBBVURJT19TUERJRl9PVVQpCi0gICAgICAgIGdhaW4gPSBBVURJT19NQVhfR0FJTjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX0FVWDFPVVQ6Ci0gICAgICBpZiAoYXVkaW9pbmZvLnBsYXkucG9ydCAmIEFVRElPX0FVWDFfT1VUKQotICAgICAgICBnYWluID0gQVVESU9fTUFYX0dBSU47Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19BVVgyT1VUOgotICAgICAgaWYgKGF1ZGlvaW5mby5wbGF5LnBvcnQgJiBBVURJT19BVVgyX09VVCkKLSAgICAgICAgZ2FpbiA9IEFVRElPX01BWF9HQUlOOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgc3dpdGNoICh0cmFjay0+bnVtX2NoYW5uZWxzKSB7Ci0gICAgY2FzZSAyOgotICAgICAgaWYgKGJhbGFuY2UgPT0gQVVESU9fTUlEX0JBTEFOQ0UpIHsKLSAgICAgICAgdm9sdW1lc1swXSA9IGdhaW47Ci0gICAgICAgIHZvbHVtZXNbMV0gPSBnYWluOwotICAgICAgfSBlbHNlIGlmIChiYWxhbmNlIDwgQVVESU9fTUlEX0JBTEFOQ0UpIHsKLSAgICAgICAgdm9sdW1lc1swXSA9IGdhaW47Ci0gICAgICAgIHJhdGlvID0gMSAtIChmbG9hdCkgKEFVRElPX01JRF9CQUxBTkNFIC0gYmFsYW5jZSkgLwotICAgICAgICAgICAgKGZsb2F0KSBBVURJT19NSURfQkFMQU5DRTsKLSAgICAgICAgdm9sdW1lc1sxXSA9IChpbnQpICgoZmxvYXQpIGdhaW4gKiByYXRpbyArIDAuNSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2b2x1bWVzWzFdID0gZ2FpbjsKLSAgICAgICAgcmF0aW8gPSAxIC0gKGZsb2F0KSAoYmFsYW5jZSAtIEFVRElPX01JRF9CQUxBTkNFKSAvCi0gICAgICAgICAgICAoZmxvYXQpIEFVRElPX01JRF9CQUxBTkNFOwotICAgICAgICB2b2x1bWVzWzBdID0gKGludCkgKChmbG9hdCkgZ2FpbiAqIHJhdGlvICsgMC41KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgIHZvbHVtZXNbMF0gPSBnYWluOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBMaWtld2lzZSByZXNldCBNVVRFICovCi0gIGlmICgoc3VuYXVkaW90cmFjay0+dHJhY2tfbnVtID09IEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQKLSAgICAgICAgICAmJiBhdWRpb2luZm8ub3V0cHV0X211dGVkID09IDEpCi0gICAgICB8fCAoc3VuYXVkaW90cmFjay0+dHJhY2tfbnVtICE9IEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQgJiYgZ2FpbiA9PSAwKSkgewotICAgIC8qCi0gICAgICogSWYgTVVURSBpcyBzZXQsIHRoZW4gZ2FpbiBpcyBhbHdheXMgMCwgc28gZG9uJ3QgYm90aGVyCi0gICAgICogcmVzZXR0aW5nIG91ciBpbnRlcm5hbCB2YWx1ZS4KLSAgICAgKi8KLSAgICB0cmFjay0+ZmxhZ3MgfD0gR1NUX01JWEVSX1RSQUNLX01VVEU7Ci0gIH0gZWxzZSB7Ci0gICAgc3VuYXVkaW90cmFjay0+Z2FpbiA9IGdhaW47Ci0gICAgc3VuYXVkaW90cmFjay0+YmFsYW5jZSA9IGJhbGFuY2U7Ci0gICAgdHJhY2stPmZsYWdzICY9IH5HU1RfTUlYRVJfVFJBQ0tfTVVURTsKLSAgfQotfQotCi12b2lkCi1nc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF92b2x1bWUgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIsCi0gICAgR3N0TWl4ZXJUcmFjayAqIHRyYWNrLCBnaW50ICogdm9sdW1lcykKLXsKLSAgZ2ludCBnYWluOwotICBnaW50IGJhbGFuY2U7Ci0gIGdpbnQgbF9yZWFsX2dhaW47Ci0gIGdpbnQgcl9yZWFsX2dhaW47Ci0gIGZsb2F0IHJhdGlvOwotICBzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb2luZm87Ci0gIEdzdFN1bkF1ZGlvTWl4ZXJUcmFjayAqc3VuYXVkaW90cmFjayA9IEdTVF9TVU5BVURJT19NSVhFUl9UUkFDSyAodHJhY2spOwotCi0gIGxfcmVhbF9nYWluID0gdm9sdW1lc1swXTsKLSAgcl9yZWFsX2dhaW4gPSB2b2x1bWVzWzFdOwotCi0gIGlmIChsX3JlYWxfZ2FpbiA9PSByX3JlYWxfZ2FpbikgewotICAgIGdhaW4gPSBsX3JlYWxfZ2FpbjsKLSAgICBiYWxhbmNlID0gQVVESU9fTUlEX0JBTEFOQ0U7Ci0gIH0gZWxzZSBpZiAobF9yZWFsX2dhaW4gPCByX3JlYWxfZ2FpbikgewotICAgIGdhaW4gPSByX3JlYWxfZ2FpbjsKLSAgICByYXRpbyA9IChmbG9hdCkgbF9yZWFsX2dhaW4gLyAoZmxvYXQpIHJfcmVhbF9nYWluOwotICAgIGJhbGFuY2UgPQotICAgICAgICBBVURJT19SSUdIVF9CQUxBTkNFIC0gKGludCkgKHJhdGlvICogKGZsb2F0KSBBVURJT19NSURfQkFMQU5DRSArIDAuNSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ2FpbiA9IGxfcmVhbF9nYWluOwotICAgIHJhdGlvID0gKGZsb2F0KSByX3JlYWxfZ2FpbiAvIChmbG9hdCkgbF9yZWFsX2dhaW47Ci0gICAgYmFsYW5jZSA9Ci0gICAgICAgIEFVRElPX0xFRlRfQkFMQU5DRSArIChpbnQpIChyYXRpbyAqIChmbG9hdCkgQVVESU9fTUlEX0JBTEFOQ0UgKyAwLjUpOwotICB9Ci0KLSAgc3VuYXVkaW90cmFjay0+Z2FpbiA9IGdhaW47Ci0gIHN1bmF1ZGlvdHJhY2stPmJhbGFuY2UgPSBiYWxhbmNlOwotCi0gIGlmIChHU1RfTUlYRVJfVFJBQ0tfSEFTX0ZMQUcgKHRyYWNrLCBHU1RfTUlYRVJfVFJBQ0tfTVVURSkpIHsKLSAgICBpZiAoc3VuYXVkaW90cmFjay0+dHJhY2tfbnVtID09IEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGdhaW4gPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKgotICAgICAgICogSWYgdGhlIHZvbHVtZSBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSBmb3IgTElORV9JTgotICAgICAgICogb3IgTU9OSVRPUiwgdGhlbiB1bnNldCBNVVRFLgotICAgICAgICovCi0gICAgICB0cmFjay0+ZmxhZ3MgJj0gfkdTVF9NSVhFUl9UUkFDS19NVVRFOwotICAgIH0KLSAgfQotCi0gIC8qIFNldCB0aGUgdm9sdW1lICovCi0gIEFVRElPX0lOSVRJTkZPICgmYXVkaW9pbmZvKTsKLQotICBzd2l0Y2ggKHN1bmF1ZGlvdHJhY2stPnRyYWNrX251bSkgewotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX09VVFBVVDoKLSAgICAgIGF1ZGlvaW5mby5wbGF5LmdhaW4gPSBnYWluOwotICAgICAgYXVkaW9pbmZvLnBsYXkuYmFsYW5jZSA9IGJhbGFuY2U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19SRUNPUkQ6Ci0gICAgICBhdWRpb2luZm8ucmVjb3JkLmdhaW4gPSBnYWluOwotICAgICAgYXVkaW9pbmZvLnJlY29yZC5iYWxhbmNlID0gYmFsYW5jZTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX01PTklUT1I6Ci0gICAgICBhdWRpb2luZm8ubW9uaXRvcl9nYWluID0gZ2FpbjsKLSAgICAgIGF1ZGlvaW5mby5yZWNvcmQuYmFsYW5jZSA9IGJhbGFuY2U7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnX3JldHVybl9pZl9mYWlsIChtaXhlci0+bWl4ZXJfZmQgIT0gLTEpOwotCi0gIGlmIChpb2N0bCAobWl4ZXItPm1peGVyX2ZkLCBBVURJT19TRVRJTkZPLCAmYXVkaW9pbmZvKSA8IDApIHsKLSAgICBnX3dhcm5pbmcgKCJFcnJvciBzZXR0aW5nIGF1ZGlvIGRldmljZSB2b2x1bWUiKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotdm9pZAotZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9zZXRfbXV0ZSAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlciwKLSAgICBHc3RNaXhlclRyYWNrICogdHJhY2ssIGdib29sZWFuIG11dGUpCi17Ci0gIHN0cnVjdCBhdWRpb19pbmZvIGF1ZGlvaW5mbzsKLSAgc3RydWN0IGF1ZGlvX2luZm8gb2xkaW5mbzsKLSAgR3N0U3VuQXVkaW9NaXhlclRyYWNrICpzdW5hdWRpb3RyYWNrID0gR1NUX1NVTkFVRElPX01JWEVSX1RSQUNLICh0cmFjayk7Ci0gIGdpbnQgdm9sdW1lLCBiYWxhbmNlOwotCi0gIEFVRElPX0lOSVRJTkZPICgmYXVkaW9pbmZvKTsKLQotICBpZiAoaW9jdGwgKG1peGVyLT5taXhlcl9mZCwgQVVESU9fR0VUSU5GTywgJm9sZGluZm8pIDwgMCkgewotICAgIGdfd2FybmluZyAoIkVycm9yIGdldHRpbmcgYXVkaW8gZGV2aWNlIHZvbHVtZSIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChtdXRlKSB7Ci0gICAgdm9sdW1lID0gMDsKLSAgICB0cmFjay0+ZmxhZ3MgfD0gR1NUX01JWEVSX1RSQUNLX01VVEU7Ci0gIH0gZWxzZSB7Ci0gICAgdm9sdW1lID0gc3VuYXVkaW90cmFjay0+Z2FpbjsKLSAgICB0cmFjay0+ZmxhZ3MgJj0gfkdTVF9NSVhFUl9UUkFDS19NVVRFOwotICB9Ci0KLSAgYmFsYW5jZSA9IHN1bmF1ZGlvdHJhY2stPmJhbGFuY2U7Ci0KLSAgc3dpdGNoIChzdW5hdWRpb3RyYWNrLT50cmFja19udW0pIHsKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQ6Ci0gICAgICBpZiAobXV0ZSkKLSAgICAgICAgYXVkaW9pbmZvLm91dHB1dF9tdXRlZCA9IDE7Ci0gICAgICBlbHNlCi0gICAgICAgIGF1ZGlvaW5mby5vdXRwdXRfbXV0ZWQgPSAwOwotCi0gICAgICBhdWRpb2luZm8ucGxheS5nYWluID0gdm9sdW1lOwotICAgICAgYXVkaW9pbmZvLnBsYXkuYmFsYW5jZSA9IGJhbGFuY2U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19SRUNPUkQ6Ci0gICAgICBhdWRpb2luZm8ucmVjb3JkLmdhaW4gPSB2b2x1bWU7Ci0gICAgICBhdWRpb2luZm8ucmVjb3JkLmJhbGFuY2UgPSBiYWxhbmNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfTU9OSVRPUjoKLSAgICAgIGF1ZGlvaW5mby5tb25pdG9yX2dhaW4gPSB2b2x1bWU7Ci0gICAgICBhdWRpb2luZm8ucmVjb3JkLmJhbGFuY2UgPSBiYWxhbmNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfU1BFQUtFUjoKLSAgICAgIGlmIChtdXRlKSB7Ci0gICAgICAgIGF1ZGlvaW5mby5wbGF5LnBvcnQgPSBvbGRpbmZvLnBsYXkucG9ydCAmIH5BVURJT19TUEVBS0VSOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYXVkaW9pbmZvLnBsYXkucG9ydCA9IG9sZGluZm8ucGxheS5wb3J0IHwgQVVESU9fU1BFQUtFUjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX0hQOgotICAgICAgaWYgKG11dGUpIHsKLSAgICAgICAgYXVkaW9pbmZvLnBsYXkucG9ydCA9IG9sZGluZm8ucGxheS5wb3J0ICYgfkFVRElPX0hFQURQSE9ORTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1ZGlvaW5mby5wbGF5LnBvcnQgPSBvbGRpbmZvLnBsYXkucG9ydCB8IEFVRElPX0hFQURQSE9ORTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX0xJTkVPVVQ6Ci0gICAgICBpZiAobXV0ZSkgewotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0ID0gb2xkaW5mby5wbGF5LnBvcnQgJiB+QVVESU9fTElORV9PVVQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0ID0gb2xkaW5mby5wbGF5LnBvcnQgfCBBVURJT19MSU5FX09VVDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX1NQRElGT1VUOgotICAgICAgaWYgKG11dGUpIHsKLSAgICAgICAgYXVkaW9pbmZvLnBsYXkucG9ydCA9IG9sZGluZm8ucGxheS5wb3J0ICYgfkFVRElPX1NQRElGX09VVDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1ZGlvaW5mby5wbGF5LnBvcnQgPSBvbGRpbmZvLnBsYXkucG9ydCB8IEFVRElPX1NQRElGX09VVDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX0FVWDFPVVQ6Ci0gICAgICBpZiAobXV0ZSkgewotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0ID0gb2xkaW5mby5wbGF5LnBvcnQgJiB+QVVESU9fQVVYMV9PVVQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0ID0gb2xkaW5mby5wbGF5LnBvcnQgfCBBVURJT19BVVgxX09VVDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX0FVWDJPVVQ6Ci0gICAgICBpZiAobXV0ZSkgewotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0ID0gb2xkaW5mby5wbGF5LnBvcnQgJiB+QVVESU9fQVVYMl9PVVQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0ID0gb2xkaW5mby5wbGF5LnBvcnQgfCBBVURJT19BVVgyX09VVDsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChhdWRpb2luZm8ucGxheS5wb3J0ICE9ICgodW5zaWduZWQpIH4wKSkgewotICAgIC8qIG1hc2sgb2ZmIHBvcnRzIHdlIGNhbid0IG1vZGlmeS4gSGFjayBmb3IgYnJva2VuIGRyaXZlcnMgd2hlcmUgbW9kX3BvcnRzID09IDAgKi8KLSAgICBpZiAob2xkaW5mby5wbGF5Lm1vZF9wb3J0cyAhPSAwKSB7Ci0gICAgICBhdWRpb2luZm8ucGxheS5wb3J0ICY9IG9sZGluZm8ucGxheS5tb2RfcG9ydHM7Ci0gICAgICAvKiBhbmQgYWRkIGluIGFueSB0aGF0IGFyZSBmb3JjZWQgdG8gYmUgb24gKi8KLSAgICAgIGF1ZGlvaW5mby5wbGF5LnBvcnQgfD0gKG9sZGluZm8ucGxheS5wb3J0ICYgfm9sZGluZm8ucGxheS5tb2RfcG9ydHMpOwotICAgIH0KLSAgfQotICBnX3JldHVybl9pZl9mYWlsIChtaXhlci0+bWl4ZXJfZmQgIT0gLTEpOwotCi0gIGlmIChhdWRpb2luZm8ucGxheS5wb3J0ICE9IChndWludCkgKC0xKSAmJgotICAgICAgYXVkaW9pbmZvLnBsYXkucG9ydCAhPSBvbGRpbmZvLnBsYXkucG9ydCkKLSAgICBHU1RfTE9HX09CSkVDVCAobWl4ZXIsICJDaGFuZ2luZyBwbGF5IHBvcnQgbWFzayB0byAweCUwOHgiLAotICAgICAgICBhdWRpb2luZm8ucGxheS5wb3J0KTsKLQotICBpZiAoaW9jdGwgKG1peGVyLT5taXhlcl9mZCwgQVVESU9fU0VUSU5GTywgJmF1ZGlvaW5mbykgPCAwKSB7Ci0gICAgZ193YXJuaW5nICgiRXJyb3Igc2V0dGluZyBhdWRpbyBzZXR0aW5ncyIpOwotICAgIHJldHVybjsKLSAgfQotfQotCi12b2lkCi1nc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF9yZWNvcmQgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIsCi0gICAgR3N0TWl4ZXJUcmFjayAqIHRyYWNrLCBnYm9vbGVhbiByZWNvcmQpCi17Ci19Ci0KLXZvaWQKLWdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X29wdGlvbiAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlciwKLSAgICBHc3RNaXhlck9wdGlvbnMgKiBvcHRpb25zLCBnY2hhciAqIHZhbHVlKQotewotICBzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb2luZm87Ci0gIEdzdE1peGVyVHJhY2sgKnRyYWNrOwotICBHc3RTdW5BdWRpb01peGVyT3B0aW9ucyAqb3B0czsKLSAgR1F1YXJrIHE7Ci0gIGludCBpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKG1peGVyICE9IE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChtaXhlci0+bWl4ZXJfZmQgIT0gLTEpOwotICBnX3JldHVybl9pZl9mYWlsICh2YWx1ZSAhPSBOVUxMKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1NVTkFVRElPX01JWEVSX09QVElPTlMgKG9wdGlvbnMpKTsKLQotICB0cmFjayA9IEdTVF9NSVhFUl9UUkFDSyAob3B0aW9ucyk7Ci0gIG9wdHMgPSBHU1RfU1VOQVVESU9fTUlYRVJfT1BUSU9OUyAob3B0aW9ucyk7Ci0KLSAgaWYgKG9wdHMtPnRyYWNrX251bSAhPSBHU1RfU1VOQVVESU9fVFJBQ0tfUkVDU1JDKSB7Ci0gICAgZ193YXJuaW5nICgic2V0X29wdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRyYWNrICVzIiwgdHJhY2stPmxhYmVsKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBxID0gZ19xdWFya190cnlfc3RyaW5nICh2YWx1ZSk7Ci0gIGlmIChxID09IDApIHsKLSAgICBnX3dhcm5pbmcgKCJ1bmtub3duIG9wdGlvbiAnJXMnIiwgdmFsdWUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLSAgICBpZiAob3B0cy0+bmFtZXNbaV0gPT0gcSkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCgoMSA8PCAoaSkpICYgb3B0cy0+YXZhaWwpID09IDApIHsKLSAgICBnX3dhcm5pbmcgKCJSZWNvcmQgcG9ydCAlcyBub3QgYXZhaWxhYmxlIiwgZ19xdWFya190b19zdHJpbmcgKHEpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBBVURJT19JTklUSU5GTyAoJmF1ZGlvaW5mbyk7Ci0gIGF1ZGlvaW5mby5yZWNvcmQucG9ydCA9ICgxIDw8IChpKSk7Ci0KLSAgaWYgKGlvY3RsIChtaXhlci0+bWl4ZXJfZmQsIEFVRElPX1NFVElORk8sICZhdWRpb2luZm8pIDwgMCkgewotICAgIGdfd2FybmluZyAoIkVycm9yIHNldHRpbmcgYXVkaW8gcmVjb3JkIHBvcnQiKTsKLSAgfQotfQotCi1jb25zdCBnY2hhciAqCi1nc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF9vcHRpb24gKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIsCi0gICAgR3N0TWl4ZXJPcHRpb25zICogb3B0aW9ucykKLXsKLSAgR3N0TWl4ZXJUcmFjayAqdHJhY2s7Ci0gIEdzdFN1bkF1ZGlvTWl4ZXJPcHRpb25zICpvcHRzOwotICBzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb2luZm87Ci0gIGludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChtaXhlciAhPSBOVUxMLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKG1peGVyLT5mZCAhPSAtMSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfU1VOQVVESU9fTUlYRVJfT1BUSU9OUyAob3B0aW9ucyksIE5VTEwpOwotCi0gIHRyYWNrID0gR1NUX01JWEVSX1RSQUNLIChvcHRpb25zKTsKLSAgb3B0cyA9IEdTVF9TVU5BVURJT19NSVhFUl9PUFRJT05TIChvcHRpb25zKTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAob3B0cy0+dHJhY2tfbnVtID09IEdTVF9TVU5BVURJT19UUkFDS19SRUNTUkMsIE5VTEwpOwotCi0gIGlmIChpb2N0bCAobWl4ZXItPm1peGVyX2ZkLCBBVURJT19HRVRJTkZPLCAmYXVkaW9pbmZvKSA8IDApIHsKLSAgICBnX3dhcm5pbmcgKCJFcnJvciBnZXR0aW5nIGF1ZGlvIGRldmljZSBzZXR0aW5ncyIpOwotICAgIHJldHVybiAoTlVMTCk7Ci0gIH0KLQotICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgaWYgKCgxIDw8IGkpID09IGF1ZGlvaW5mby5yZWNvcmQucG9ydCkgewotICAgICAgY29uc3QgZ2NoYXIgKnMgPSBnX3F1YXJrX3RvX3N0cmluZyAob3B0cy0+bmFtZXNbaV0pOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAobWl4ZXIsICJHZXR0aW5nIHZhbHVlIGZvciBvcHRpb24gJWQ6ICVzIiwKLSAgICAgICAgICBvcHRzLT50cmFja19udW0sIHMpOwotICAgICAgcmV0dXJuIChzKTsKLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChtaXhlciwgIlVuYWJsZSB0byBnZXQgdmFsdWUgZm9yIG9wdGlvbiAlZCIsCi0gICAgICBvcHRzLT50cmFja19udW0pOwotCi0gIGdfd2FybmluZyAoIlJlY29yZCBwb3J0IHZhbHVlICVkIHNlZW1zIGlsbGVnYWwiLCBhdWRpb2luZm8ucmVjb3JkLnBvcnQpOwotICByZXR1cm4gKE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJjdHJsLmggYi9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhYTQ3Ny4uMDAwMDAwMAotLS0gYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcmN0cmwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKgotICogR1N0cmVhbWVyIC0gU3VuQXVkaW8gbWl4ZXIgaW50ZXJmYWNlIGVsZW1lbnQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiwyMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sCi0gKiAgICAgICAgICAgICAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBHYXJyZXR0IEQnQW1vcmUgPGdhcnJldHQuZGFtb3JlQHN1bi5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfU1VOQVVESU9fTUlYRVJfQ1RSTF9ICi0jZGVmaW5lIF9fR1NUX1NVTkFVRElPX01JWEVSX0NUUkxfSAotCi0jaW5jbHVkZSA8c3lzL2F1ZGlvaW8uaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvaW50ZXJmYWNlcy9taXhlci5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1NVTkFVRElPX01JWEVSX0NUUkwob2JqKSAgICAgICAgICAgICAgKChHc3RTdW5BdWRpb01peGVyQ3RybCopKG9iaikpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTdW5BdWRpb01peGVyQ3RybCBHc3RTdW5BdWRpb01peGVyQ3RybDsKLQotc3RydWN0IF9Hc3RTdW5BdWRpb01peGVyQ3RybCB7Ci0gIEdMaXN0ICogICAgICAgICAgICAgICB0cmFja2xpc3Q7ICAgICAgLyogbGlzdCBvZiBhdmFpbGFibGUgdHJhY2tzICovCi0KLSAgZ2ludCAgICAgICAgICAgICAgICAgIGZkOwotICBnaW50ICAgICAgICAgICAgICAgICAgbWl4ZXJfZmQ7Ci0KLSAgZ2NoYXIgKiAgICAgICAgICAgICAgIGRldmljZTsKLX07Ci0KLUdzdFN1bkF1ZGlvTWl4ZXJDdHJsKiBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX25ldyAgICAgICAgICAoY29uc3QgZ2NoYXIgKmRldmljZSk7Ci12b2lkICAgICAgICAgICAgICAgICAgZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9mcmVlICAgICAgICAgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICptaXhlcik7Ci0KLWNvbnN0IEdMaXN0KiAgICAgICAgICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2xpc3RfdHJhY2tzICAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlcik7Ci12b2lkICAgICAgICAgICAgICAgICAgZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9zZXRfdm9sdW1lICAgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0TWl4ZXJUcmFjayAqIHRyYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKiB2b2x1bWVzKTsKLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF92b2x1bWUgICAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RNaXhlclRyYWNrICogdHJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqIHZvbHVtZXMpOwotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X3JlY29yZCAgIChHc3RTdW5BdWRpb01peGVyQ3RybCAqIG1peGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1peGVyVHJhY2sgKiB0cmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiByZWNvcmQpOwotdm9pZCAgICAgICAgICAgICAgICAgIGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X211dGUgICAgIChHc3RTdW5BdWRpb01peGVyQ3RybCAqIG1peGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdE1peGVyVHJhY2sgKiB0cmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBtdXRlKTsKLXZvaWQgICAgICAgICAgICAgICAgICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF9vcHRpb24gICAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlciwKLQkJCQkJCQkgIEdzdE1peGVyT3B0aW9ucyAqIG9wdGlvbnMsCi0JCQkJCQkJICBnY2hhciAqIHZhbHVlKTsKLWNvbnN0IGdjaGFyICogICAgICAgICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF9vcHRpb24gICAoR3N0U3VuQXVkaW9NaXhlckN0cmwgKiBtaXhlciwKLQkJCQkJCQkgIEdzdE1peGVyT3B0aW9ucyAqIG9wdGlvbnMpOwotR3N0TWl4ZXJGbGFncwkgICAgICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF9taXhlcl9mbGFncwkgIChHc3RTdW5BdWRpb01peGVyQ3RybCAqbWl4ZXIpOwotCi0jZGVmaW5lIEdTVF9JTVBMRU1FTlRfU1VOQVVESU9fTUlYRVJfQ1RSTF9NRVRIT0RTKFR5cGUsIGludGVyZmFjZV9hc19mdW5jdGlvbikgIFwKLXN0YXRpYyBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9zdXBwb3J0ZWQgKFR5cGUgKnRoaXMsIEdUeXBlIGlmYWNlX3R5cGUpICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19hc3NlcnQgKGlmYWNlX3R5cGUgPT0gR1NUX1RZUEVfTUlYRVIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiAodGhpcy0+bWl4ZXIgIT0gTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgY29uc3QgR0xpc3QqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfbGlzdF90cmFja3MgKEdzdE1peGVyICogbWl4ZXIpICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIG1peGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGhpcyAhPSBOVUxMLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0aGlzLT5taXhlciAhPSBOVUxMLCBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9saXN0X3RyYWNrcyAodGhpcy0+bWl4ZXIpOyAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3NldF92b2x1bWUgKEdzdE1peGVyICogbWl4ZXIsIEdzdE1peGVyVHJhY2sgKiB0cmFjaywgIFwKLSAgICBnaW50ICogdm9sdW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIG1peGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX3JldHVybl9pZl9mYWlsICh0aGlzICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRoaXMtPm1peGVyICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF92b2x1bWUgKHRoaXMtPm1peGVyLCB0cmFjaywgdm9sdW1lcyk7ICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2dldF92b2x1bWUgKEdzdE1peGVyICogbWl4ZXIsIEdzdE1peGVyVHJhY2sgKiB0cmFjaywgIFwKLSAgICBnaW50ICogdm9sdW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIG1peGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX3JldHVybl9pZl9mYWlsICh0aGlzICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRoaXMtPm1peGVyICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF92b2x1bWUgKHRoaXMtPm1peGVyLCB0cmFjaywgdm9sdW1lcyk7ICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3NldF9yZWNvcmQgKEdzdE1peGVyICogbWl4ZXIsIEdzdE1peGVyVHJhY2sgKiB0cmFjaywgIFwKLSAgICBnYm9vbGVhbiByZWNvcmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIG1peGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX3JldHVybl9pZl9mYWlsICh0aGlzICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRoaXMtPm1peGVyICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF9yZWNvcmQgKHRoaXMtPm1peGVyLCB0cmFjaywgcmVjb3JkKTsgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3NldF9tdXRlIChHc3RNaXhlciAqIG1peGVyLCBHc3RNaXhlclRyYWNrICogdHJhY2ssICAgIFwKLSAgICBnYm9vbGVhbiBtdXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIG1peGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnX3JldHVybl9pZl9mYWlsICh0aGlzICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRoaXMtPm1peGVyICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX3NldF9tdXRlICh0aGlzLT5taXhlciwgdHJhY2ssIG11dGUpOyAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkJCQkJCQlcCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgkJCQkJCQkJXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9nZXRfb3B0aW9uIChHc3RNaXhlciAqIG1peGVyLCBHc3RNaXhlck9wdGlvbnMgKiBvcHRzKQlcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0aGlzICE9IE5VTEwsIE5VTEwpOwkJCQkJXAotICBnX3JldHVybl92YWxfaWZfZmFpbCAodGhpcy0+bWl4ZXIgIT0gTlVMTCwgTlVMTCk7CQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gZ3N0X3N1bmF1ZGlvbWl4ZXJfY3RybF9nZXRfb3B0aW9uICh0aGlzLT5taXhlciwgb3B0cyk7CQkJXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1cCi1zdGF0aWMgdm9pZAkJCQkJCQkJCVwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfc2V0X29wdGlvbiAoR3N0TWl4ZXIgKiBtaXhlciwgR3N0TWl4ZXJPcHRpb25zICogb3B0cywJXAotICAgIGdjaGFyICogdmFsdWUpCQkJCQkJCQlcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKHRoaXMgIT0gTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5faWZfZmFpbCAodGhpcy0+bWl4ZXIgIT0gTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF9zdW5hdWRpb21peGVyX2N0cmxfc2V0X29wdGlvbiAodGhpcy0+bWl4ZXIsIG9wdHMsIHZhbHVlKTsJCQlcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLVwKLXN0YXRpYyBHc3RNaXhlckZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9nZXRfbWl4ZXJfZmxhZ3MgKEdzdE1peGVyICogbWl4ZXIpICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICh0aGlzICE9IE5VTEwsIEdTVF9NSVhFUl9GTEFHX05PTkUpOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHRoaXMtPm1peGVyICE9IE5VTEwsIEdTVF9NSVhFUl9GTEFHX05PTkUpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2dldF9taXhlcl9mbGFncyAodGhpcy0+bWl4ZXIpOwkJCVwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCQkJCQkJCVwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9pbnRlcmZhY2VfaW5pdCAoR3N0TWl4ZXJJbnRlcmZhY2UgKiBpZmFjZSkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdTVF9NSVhFUl9UWVBFIChpZmFjZSkgPSBHU1RfTUlYRVJfSEFSRFdBUkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAvKiBzZXQgdXAgdGhlIGludGVyZmFjZSBob29rcyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5saXN0X3RyYWNrcyA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfbGlzdF90cmFja3M7ICAgICAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPnNldF92b2x1bWUgID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9zZXRfdm9sdW1lOyAgICAgICAgICAgICAgICAgICAgXAotICBpZmFjZS0+Z2V0X3ZvbHVtZSAgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2dldF92b2x1bWU7ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5zZXRfbXV0ZSAgICA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfc2V0X211dGU7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPnNldF9yZWNvcmQgID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9zZXRfcmVjb3JkOyAgICAgICAgICAgICAgICAgICAgXAotICBpZmFjZS0+Z2V0X29wdGlvbiAgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2dldF9vcHRpb247CQkJXAotICBpZmFjZS0+c2V0X29wdGlvbiAgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3NldF9vcHRpb247CQkJXAotICBpZmFjZS0+Z2V0X21peGVyX2ZsYWdzICAgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2dldF9taXhlcl9mbGFnczsJCVwKLX0KLQotR19FTkRfREVDTFMKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuYyBiL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjM3ZDgyLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgU3VuQXVkaW8gbWl4ZXIgdHJhY2sgaW1wbGVtZW50YXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwOSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0gKiAgICAgICAgICAgICAgIEdhcnJldHQgRCdBbW9yZSA8Z2FycmV0dC5kYW1vcmVAc3VuLmNvbT4KLSAqCi0gKiBnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5jOiBTdW4gQXVkaW8gbWl4ZXIgb3B0aW9ucyBvYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL21peGVyLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLSNpbmNsdWRlICJnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5oIgotI2luY2x1ZGUgImdzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChzdW5hdWRpb19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzdW5hdWRpb19kZWJ1ZwotCi1zdGF0aWMgdm9pZCBnc3Rfc3VuYXVkaW9taXhlcl9vcHRpb25zX2luaXQgKEdzdFN1bkF1ZGlvTWl4ZXJPcHRpb25zICogc3VuX29wdHMpOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvbWl4ZXJfb3B0aW9uc19jbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzLAotICAgIGdwb2ludGVyIGNsYXNzX2RhdGEpOwotCi1zdGF0aWMgR3N0TWl4ZXJPcHRpb25zQ2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7Ci0KLUdUeXBlCi1nc3Rfc3VuYXVkaW9taXhlcl9vcHRpb25zX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgb3B0c190eXBlID0gMDsKLQotICBpZiAoIW9wdHNfdHlwZSkgewotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gb3B0c19pbmZvID0gewotICAgICAgc2l6ZW9mIChHc3RTdW5BdWRpb01peGVyT3B0aW9uc0NsYXNzKSwKLSAgICAgIE5VTEwsCi0gICAgICBOVUxMLAotICAgICAgZ3N0X3N1bmF1ZGlvbWl4ZXJfb3B0aW9uc19jbGFzc19pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBzaXplb2YgKEdzdFN1bkF1ZGlvTWl4ZXJPcHRpb25zKSwKLSAgICAgIDAsCi0gICAgICAoR0luc3RhbmNlSW5pdEZ1bmMpIGdzdF9zdW5hdWRpb21peGVyX29wdGlvbnNfaW5pdCwKLSAgICB9OwotCi0gICAgb3B0c190eXBlID0KLSAgICAgICAgZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfTUlYRVJfT1BUSU9OUywKLSAgICAgICAgIkdzdFN1bkF1ZGlvTWl4ZXJPcHRpb25zIiwgJm9wdHNfaW5mbywgMCk7Ci0gIH0KLQotICByZXR1cm4gb3B0c190eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvbWl4ZXJfb3B0aW9uc19jbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzLCBncG9pbnRlciBjbGFzc19kYXRhKQotewotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGdfY2xhc3MpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvbWl4ZXJfb3B0aW9uc19pbml0IChHc3RTdW5BdWRpb01peGVyT3B0aW9ucyAqIHN1bl9vcHRzKQotewotfQotCi1Hc3RNaXhlck9wdGlvbnMgKgotZ3N0X3N1bmF1ZGlvbWl4ZXJfb3B0aW9uc19uZXcgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICogbWl4ZXIsIGdpbnQgdHJhY2tfbnVtKQotewotICBHc3RNaXhlck9wdGlvbnMgKm9wdHM7Ci0gIEdzdFN1bkF1ZGlvTWl4ZXJPcHRpb25zICpzdW5fb3B0czsKLSAgR3N0TWl4ZXJUcmFjayAqdHJhY2s7Ci0gIGNvbnN0IGdjaGFyICpsYWJlbDsKLSAgZ2ludCBpOwotICBzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb2luZm87Ci0KLSAgaWYgKChtaXhlciA9PSBOVUxMKSB8fCAobWl4ZXItPm1peGVyX2ZkID09IC0xKSkgewotICAgIGdfd2FybmluZyAoIm1peGVyIG5vdCBpbml0aWFsaXplZCIpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKHRyYWNrX251bSAhPSBHU1RfU1VOQVVESU9fVFJBQ0tfUkVDU1JDKSB7Ci0gICAgZ193YXJuaW5nICgiaW52YWxpZCBvcHRpb25zIHRyYWNrIik7Ci0gICAgcmV0dXJuIChOVUxMKTsKLSAgfQotCi0gIGxhYmVsID0gTl8oIlJlY29yZCBTb3VyY2UiKTsKLQotICBvcHRzID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9TVU5BVURJT19NSVhFUl9PUFRJT05TLAotICAgICAgInVudHJhbnNsYXRlZC1sYWJlbCIsIGxhYmVsLCBOVUxMKTsKLSAgc3VuX29wdHMgPSBHU1RfU1VOQVVESU9fTUlYRVJfT1BUSU9OUyAob3B0cyk7Ci0gIHRyYWNrID0gR1NUX01JWEVSX1RSQUNLIChvcHRzKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvcHRzLCAiTmV3IG1peGVyIG9wdGlvbnMsIHRyYWNrICVkOiAlcyIsCi0gICAgICB0cmFja19udW0sIEdTVF9TVFJfTlVMTCAobGFiZWwpKTsKLQotICAvKiBzYXZlIG9mZiBuYW1lcyBmb3IgdGhlIHJlY29yZCBzb3VyY2VzICovCi0gIHN1bl9vcHRzLT5uYW1lc1swXSA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKF8oIk1pY3JvcGhvbmUiKSk7Ci0gIHN1bl9vcHRzLT5uYW1lc1sxXSA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKF8oIkxpbmUgSW4iKSk7Ci0gIHN1bl9vcHRzLT5uYW1lc1syXSA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKF8oIkludGVybmFsIENEIikpOwotICBzdW5fb3B0cy0+bmFtZXNbM10gPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChfKCJTUERJRiBJbiIpKTsKLSAgc3VuX29wdHMtPm5hbWVzWzRdID0gZ19xdWFya19mcm9tX3N0cmluZyAoXygiQVVYIDEgSW4iKSk7Ci0gIHN1bl9vcHRzLT5uYW1lc1s1XSA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKF8oIkFVWCAyIEluIikpOwotICBzdW5fb3B0cy0+bmFtZXNbNl0gPSBnX3F1YXJrX2Zyb21fc3RyaW5nIChfKCJDb2RlYyBMb29wYmFjayIpKTsKLSAgc3VuX29wdHMtPm5hbWVzWzddID0gZ19xdWFya19mcm9tX3N0cmluZyAoXygiU3VuVlRTIExvb3BiYWNrIikpOwotCi0gIC8qIHNldCBiYXNpYyBpbmZvcm1hdGlvbiAqLwotICB0cmFjay0+bGFiZWwgPSBnX3N0cmR1cCAoXyhsYWJlbCkpOwotICB0cmFjay0+bnVtX2NoYW5uZWxzID0gMDsKLSAgdHJhY2stPm1pbl92b2x1bWUgPSAwOwotICB0cmFjay0+bWF4X3ZvbHVtZSA9IDA7Ci0gIHRyYWNrLT5mbGFncyA9Ci0gICAgICBHU1RfTUlYRVJfVFJBQ0tfSU5QVVQgfCBHU1RfTUlYRVJfVFJBQ0tfV0hJVEVMSVNUIHwKLSAgICAgIEdTVF9NSVhFUl9UUkFDS19OT19SRUNPUkQ7Ci0KLSAgaWYgKGlvY3RsIChtaXhlci0+bWl4ZXJfZmQsIEFVRElPX0dFVElORk8sICZhdWRpb2luZm8pIDwgMCkgewotICAgIGdfd2FybmluZyAoIkVycm9yIGdldHRpbmcgYXVkaW8gZGV2aWNlIHNldHRpbmdzIik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChzdW5fb3B0cykpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgc3VuX29wdHMtPmF2YWlsID0gYXVkaW9pbmZvLnJlY29yZC5hdmFpbF9wb3J0czsKLSAgc3VuX29wdHMtPnRyYWNrX251bSA9IHRyYWNrX251bTsKLQotICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgaWYgKCgxIDw8IGkpICYgYXVkaW9pbmZvLnJlY29yZC5hdmFpbF9wb3J0cykgewotICAgICAgY29uc3QgY2hhciAqcyA9IGdfcXVhcmtfdG9fc3RyaW5nIChzdW5fb3B0cy0+bmFtZXNbaV0pOwotICAgICAgb3B0cy0+dmFsdWVzID0gZ19saXN0X2FwcGVuZCAob3B0cy0+dmFsdWVzLCBnX3N0cmR1cCAocykpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAob3B0cywgIm9wdGlvbiBmb3IgdHJhY2sgJWQ6ICVzIiwKLSAgICAgICAgICB0cmFja19udW0sIEdTVF9TVFJfTlVMTCAocykpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBvcHRzOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJvcHRpb25zLmggYi9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI3ZWYyMS4uMDAwMDAwMAotLS0gYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcm9wdGlvbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgU3VuQXVkaW8gbWl4ZXIgdHJhY2sgaW1wbGVtZW50YXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwOSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0gKiAgICAgICAgICAgICAgIEdhcnJldHQgRCdBbW9yZSA8Z2FycmV0dC5kYW1vcmVAc3VuLmNvbT4KLSAqCi0gKiBnc3RzdW5hdWRpb21peGVyb3B0aW9ucy5oOiBTdW4gQXVkaW8gbWl4ZXIgb3B0aW9ucyBvYmplY3QKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVU5BVURJT19NSVhFUl9PUFRJT05TX0hfXwotI2RlZmluZSBfX0dTVF9TVU5BVURJT19NSVhFUl9PUFRJT05TX0hfXwotCi0KLSNpbmNsdWRlICJnc3RzdW5hdWRpb21peGVyLmgiCi0jaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvbWl4ZXJvcHRpb25zLmg+Ci0KLQotR19CRUdJTl9ERUNMUwotCi0KLSNkZWZpbmUgR1NUX1NVTkFVRElPX01JWEVSX09QVElPTlMob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSxHU1RfVFlQRV9TVU5BVURJT19NSVhFUl9PUFRJT05TLCBHc3RTdW5BdWRpb01peGVyT3B0aW9ucykpCi0jZGVmaW5lIEdTVF9TVU5BVURJT19NSVhFUl9PUFRJT05TX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TVU5BVURJT19NSVhFUl9PUFRJT05TLCBHc3RTdW5BdWRpb01peGVyT3B0aW9uc0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NVTkFVRElPX01JWEVSX09QVElPTlMob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU1VOQVVESU9fTUlYRVJfT1BUSU9OUykpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19NSVhFUl9PUFRJT05TX0NMQVNTKGtsYXNzKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU1VOQVVESU9fTUlYRVJfT1BUSU9OUykpCi0jZGVmaW5lIEdTVF9UWVBFX1NVTkFVRElPX01JWEVSX09QVElPTlMgICAgICAgICAgICAgKGdzdF9zdW5hdWRpb21peGVyX29wdGlvbnNfZ2V0X3R5cGUoKSkKLQotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3VuQXVkaW9NaXhlck9wdGlvbnMgR3N0U3VuQXVkaW9NaXhlck9wdGlvbnM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3VuQXVkaW9NaXhlck9wdGlvbnNDbGFzcyBHc3RTdW5BdWRpb01peGVyT3B0aW9uc0NsYXNzOwotCi0KLXN0cnVjdCBfR3N0U3VuQXVkaW9NaXhlck9wdGlvbnMgewotICBHc3RNaXhlck9wdGlvbnMgICAgICAgIHBhcmVudDsKLSAgZ2ludCAgICAgICAgICAgICAgICAgIHRyYWNrX251bTsKLSAgR1F1YXJrCQluYW1lc1s4XTsJLyogb25seSA4IHBvc3NpYmxlICovCi0gIGdpbnQJCQlhdmFpbDsJCS8qIG1hc2sgb2YgYXZhaWwgKi8KLX07Ci0KLXN0cnVjdCBfR3N0U3VuQXVkaW9NaXhlck9wdGlvbnNDbGFzcyB7Ci0gIEdzdE1peGVyT3B0aW9uc0NsYXNzIHBhcmVudDsKLX07Ci0KLQotR1R5cGUgICAgICAgICAgIGdzdF9zdW5hdWRpb21peGVyX29wdGlvbnNfZ2V0X3R5cGUgKHZvaWQpOwotR3N0TWl4ZXJPcHRpb25zICpnc3Rfc3VuYXVkaW9taXhlcl9vcHRpb25zX25ldyAgICAgKEdzdFN1bkF1ZGlvTWl4ZXJDdHJsICptaXhlciwgZ2ludCB0cmFja19udW0pOwotCi0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUX1NVTkFVRElPX01JWEVSX09QVElPTlNfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmMgYi9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9taXhlcnRyYWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYmYwNDQuLjAwMDAwMDAKLS0tIGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA4LCAyMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sCi0gKiAgICAgICAgICAgICAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBHYXJyZXR0IEQnQW1vcmUgPGdhcnJldHQuZGFtb3JlQHN1bi5jb20+Ci0gKgotICogZ3N0c3VuYXVkaW9taXhlci5jOiBtaXhlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZm9yIE9TUwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9hdWRpb2lvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLSNpbmNsdWRlICJnc3RzdW5hdWRpb21peGVydHJhY2suaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAoc3VuYXVkaW9fZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgc3VuYXVkaW9fZGVidWcKLQotI2RlZmluZSBNQVNLX0JJVF9JU19TRVQobWFzaywgYml0KSBcCi0gIChtYXNrICYgKDEgPDwgYml0KSkKLQotR19ERUZJTkVfVFlQRSAoR3N0U3VuQXVkaW9NaXhlclRyYWNrLCBnc3Rfc3VuYXVkaW9taXhlcl90cmFjaywKLSAgICBHU1RfVFlQRV9NSVhFUl9UUkFDSyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9taXhlcl90cmFja19jbGFzc19pbml0IChHc3RTdW5BdWRpb01peGVyVHJhY2tDbGFzcyAqIGtsYXNzKQotewotICAvKiBub3AgKi8KLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb21peGVyX3RyYWNrX2luaXQgKEdzdFN1bkF1ZGlvTWl4ZXJUcmFjayAqIHRyYWNrKQotewotICB0cmFjay0+Z2FpbiA9IDA7Ci0gIHRyYWNrLT5iYWxhbmNlID0gQVVESU9fTUlEX0JBTEFOQ0U7Ci0gIHRyYWNrLT50cmFja19udW0gPSAwOwotfQotCi1Hc3RNaXhlclRyYWNrICoKLWdzdF9zdW5hdWRpb21peGVyX3RyYWNrX25ldyAoR3N0U3VuQXVkaW9UcmFja1R5cGUgdHJhY2tfbnVtKQotewotICBjb25zdCBnY2hhciAqbGFiZWxzW10gPSB7IE5fKCJWb2x1bWUiKSwKLSAgICBOXygiR2FpbiIpLAotICAgIE5fKCJNb25pdG9yIiksCi0gICAgTl8oIkJ1aWx0LWluIFNwZWFrZXIiKSwKLSAgICBOXygiSGVhZHBob25lIiksCi0gICAgTl8oIkxpbmUgT3V0IiksCi0gICAgTl8oIlNQRElGIE91dCIpLAotICAgIE5fKCJBVVggMSBPdXQiKSwKLSAgICBOXygiQVVYIDIgT3V0IiksCi0gIH07Ci0KLQotICBHc3RTdW5BdWRpb01peGVyVHJhY2sgKnN1bmF1ZGlvdHJhY2s7Ci0gIEdzdE1peGVyVHJhY2sgKnRyYWNrOwotICBjb25zdCBnY2hhciAqdW50cmFuc2xhdGVkX2xhYmVsOwotCi0gIGlmICgoZ3VpbnQpIHRyYWNrX251bSA8IEdfTl9FTEVNRU5UUyAobGFiZWxzKSkKLSAgICB1bnRyYW5zbGF0ZWRfbGFiZWwgPSBsYWJlbHNbdHJhY2tfbnVtXTsKLSAgZWxzZQotICAgIHVudHJhbnNsYXRlZF9sYWJlbCA9IE5VTEw7Ci0KLSAgc3VuYXVkaW90cmFjayA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfU1VOQVVESU9fTUlYRVJfVFJBQ0ssCi0gICAgICAidW50cmFuc2xhdGVkLWxhYmVsIiwgdW50cmFuc2xhdGVkX2xhYmVsLCBOVUxMKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzdW5hdWRpb3RyYWNrLCAiQ3JlYXRpbmcgbmV3IG1peGVyIHRyYWNrIG9mIHR5cGUgJWQ6ICVzIiwKLSAgICAgIHRyYWNrX251bSwgR1NUX1NUUl9OVUxMICh1bnRyYW5zbGF0ZWRfbGFiZWwpKTsKLQotICBzd2l0Y2ggKHRyYWNrX251bSkgewotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX09VVFBVVDoKLSAgICAgIC8qIHRoZXNlIGFyZSBzbGlkZXJzICovCi0gICAgICB0cmFjayA9IEdTVF9NSVhFUl9UUkFDSyAoc3VuYXVkaW90cmFjayk7Ci0gICAgICB0cmFjay0+bGFiZWwgPSBnX3N0cmR1cCAoXyh1bnRyYW5zbGF0ZWRfbGFiZWwpKTsKLSAgICAgIHRyYWNrLT5udW1fY2hhbm5lbHMgPSAyOwotICAgICAgdHJhY2stPmZsYWdzID0gR1NUX01JWEVSX1RSQUNLX09VVFBVVCB8IEdTVF9NSVhFUl9UUkFDS19XSElURUxJU1QgfAotICAgICAgICAgIEdTVF9NSVhFUl9UUkFDS19NQVNURVI7Ci0gICAgICB0cmFjay0+bWluX3ZvbHVtZSA9IDA7Ci0gICAgICB0cmFjay0+bWF4X3ZvbHVtZSA9IDI1NTsKLSAgICAgIHN1bmF1ZGlvdHJhY2stPnRyYWNrX251bSA9IHRyYWNrX251bTsKLSAgICAgIHN1bmF1ZGlvdHJhY2stPmdhaW4gPSAoMCAmIDB4ZmYpOwotICAgICAgc3VuYXVkaW90cmFjay0+YmFsYW5jZSA9IEFVRElPX01JRF9CQUxBTkNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfUkVDT1JEOgotICAgICAgLyogdGhlc2UgYXJlIHNsaWRlcnMgKi8KLSAgICAgIHRyYWNrID0gR1NUX01JWEVSX1RSQUNLIChzdW5hdWRpb3RyYWNrKTsKLSAgICAgIHRyYWNrLT5sYWJlbCA9IGdfc3RyZHVwIChfKHVudHJhbnNsYXRlZF9sYWJlbCkpOwotICAgICAgdHJhY2stPm51bV9jaGFubmVscyA9IDI7Ci0gICAgICB0cmFjay0+ZmxhZ3MgPSBHU1RfTUlYRVJfVFJBQ0tfSU5QVVQgfCBHU1RfTUlYRVJfVFJBQ0tfTk9fUkVDT1JEIHwKLSAgICAgICAgICBHU1RfTUlYRVJfVFJBQ0tfV0hJVEVMSVNUOwotICAgICAgdHJhY2stPm1pbl92b2x1bWUgPSAwOwotICAgICAgdHJhY2stPm1heF92b2x1bWUgPSAyNTU7Ci0gICAgICBzdW5hdWRpb3RyYWNrLT50cmFja19udW0gPSB0cmFja19udW07Ci0gICAgICBzdW5hdWRpb3RyYWNrLT5nYWluID0gKDAgJiAweGZmKTsKLSAgICAgIHN1bmF1ZGlvdHJhY2stPmJhbGFuY2UgPSBBVURJT19NSURfQkFMQU5DRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX01PTklUT1I6Ci0gICAgICAvKiB0aGVzZSBhcmUgc2xpZGVycyAqLwotICAgICAgdHJhY2sgPSBHU1RfTUlYRVJfVFJBQ0sgKHN1bmF1ZGlvdHJhY2spOwotICAgICAgdHJhY2stPmxhYmVsID0gZ19zdHJkdXAgKF8odW50cmFuc2xhdGVkX2xhYmVsKSk7Ci0gICAgICB0cmFjay0+bnVtX2NoYW5uZWxzID0gMjsKLSAgICAgIHRyYWNrLT5mbGFncyA9IEdTVF9NSVhFUl9UUkFDS19JTlBVVCB8IEdTVF9NSVhFUl9UUkFDS19OT19SRUNPUkQ7Ci0gICAgICB0cmFjay0+bWluX3ZvbHVtZSA9IDA7Ci0gICAgICB0cmFjay0+bWF4X3ZvbHVtZSA9IDI1NTsKLSAgICAgIHN1bmF1ZGlvdHJhY2stPnRyYWNrX251bSA9IHRyYWNrX251bTsKLSAgICAgIHN1bmF1ZGlvdHJhY2stPmdhaW4gPSAoMCAmIDB4ZmYpOwotICAgICAgc3VuYXVkaW90cmFjay0+YmFsYW5jZSA9IEFVRElPX01JRF9CQUxBTkNFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfU1BFQUtFUjoKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19IUDoKLSAgICBjYXNlIEdTVF9TVU5BVURJT19UUkFDS19MSU5FT1VUOgotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX1NQRElGT1VUOgotICAgIGNhc2UgR1NUX1NVTkFVRElPX1RSQUNLX0FVWDFPVVQ6Ci0gICAgY2FzZSBHU1RfU1VOQVVESU9fVFJBQ0tfQVVYMk9VVDoKLSAgICAgIC8qIHRoZXNlIGFyZSBzd2l0Y2hlcyAqLwotICAgICAgdHJhY2sgPSBHU1RfTUlYRVJfVFJBQ0sgKHN1bmF1ZGlvdHJhY2spOwotICAgICAgdHJhY2stPmxhYmVsID0gZ19zdHJkdXAgKF8odW50cmFuc2xhdGVkX2xhYmVsKSk7Ci0gICAgICB0cmFjay0+bnVtX2NoYW5uZWxzID0gMDsKLSAgICAgIHRyYWNrLT5mbGFncyA9IEdTVF9NSVhFUl9UUkFDS19PVVRQVVQgfCBHU1RfTUlYRVJfVFJBQ0tfV0hJVEVMSVNUOwotICAgICAgdHJhY2stPm1pbl92b2x1bWUgPSAwOwotICAgICAgdHJhY2stPm1heF92b2x1bWUgPSAyNTU7Ci0gICAgICBzdW5hdWRpb3RyYWNrLT50cmFja19udW0gPSB0cmFja19udW07Ci0gICAgICBzdW5hdWRpb3RyYWNrLT5nYWluID0gKDAgJiAweGZmKTsKLSAgICAgIHN1bmF1ZGlvdHJhY2stPmJhbGFuY2UgPSBBVURJT19NSURfQkFMQU5DRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX3dhcm5pbmcgKCJVbmtub3duIHN1biBhdWRpbyB0cmFjayBudW0gJWQiLCB0cmFja19udW0pOwotICAgICAgdHJhY2sgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIHRyYWNrOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oIGIvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvbWl4ZXJ0cmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzhlZDgxLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb21peGVydHJhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgU3VuQXVkaW8gbWl4ZXIgdHJhY2sgaW1wbGVtZW50YXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2LDIwMDkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwKLSAqICAgICAgICAgICAgICAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sCi0gKiAgICAgICAgICAgICAgIEdhcnJldHQgRCdBbW9yZSA8Z2FycmV0dC5kYW1vcmVAc3VuLmNvbT4KLSAqCi0gKiBnc3RzdW5hdWRpb21peGVydHJhY2suaDogU3VuQXVkaW8gbWl4ZXIgdHJhY2tzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVU5BVURJT19NSVhFUl9UUkFDS19IX18KLSNkZWZpbmUgX19HU1RfU1VOQVVESU9fTUlYRVJfVFJBQ0tfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvbWl4ZXIuaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIGVudW0KLXsKLSAgIEdTVF9TVU5BVURJT19UUkFDS19PVVRQVVQgICA9IDAsCi0gICBHU1RfU1VOQVVESU9fVFJBQ0tfUkVDT1JELAotICAgR1NUX1NVTkFVRElPX1RSQUNLX01PTklUT1IsCi0gICBHU1RfU1VOQVVESU9fVFJBQ0tfU1BFQUtFUiwKLSAgIEdTVF9TVU5BVURJT19UUkFDS19IUCwKLSAgIEdTVF9TVU5BVURJT19UUkFDS19MSU5FT1VULAotICAgR1NUX1NVTkFVRElPX1RSQUNLX1NQRElGT1VULAotICAgR1NUX1NVTkFVRElPX1RSQUNLX0FVWDFPVVQsCi0gICBHU1RfU1VOQVVESU9fVFJBQ0tfQVVYMk9VVCwKLSAgIEdTVF9TVU5BVURJT19UUkFDS19SRUNTUkMKLX0gR3N0U3VuQXVkaW9UcmFja1R5cGU7Ci0KLSNkZWZpbmUgR1NUX1RZUEVfU1VOQVVESU9fTUlYRVJfVFJBQ0sgXAotICAoZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9TVU5BVURJT19NSVhFUl9UUkFDSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfU1VOQVVESU9fTUlYRVJfVFJBQ0ssIFwKLQkJCSAgICAgICBHc3RTdW5BdWRpb01peGVyVHJhY2spKQotI2RlZmluZSBHU1RfU1VOQVVESU9fTUlYRVJfVFJBQ0tfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9TVU5BVURJT19NSVhFUl9UUkFDSywgXAotCQkJICAgIEdzdFN1bkF1ZGlvTWl4ZXJUcmFja0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1NVTkFVRElPX01JWEVSX1RSQUNLKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9TVU5BVURJT19NSVhFUl9UUkFDSykpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19NSVhFUl9UUkFDS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1NVTkFVRElPX01JWEVSX1RSQUNLKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN1bkF1ZGlvTWl4ZXJUcmFjayB7Ci0gIEdzdE1peGVyVHJhY2sgcGFyZW50OwotCi0gIGdpbnQgICAgICAgICAgICAgICAgICBnYWluOwotICBnaW50ICAgICAgICAgICAgICAgICAgYmFsYW5jZTsKLSAgR3N0U3VuQXVkaW9UcmFja1R5cGUgdHJhY2tfbnVtOwotfSBHc3RTdW5BdWRpb01peGVyVHJhY2s7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTdW5BdWRpb01peGVyVHJhY2tDbGFzcyB7Ci0gIEdzdE1peGVyVHJhY2tDbGFzcyBwYXJlbnQ7Ci19IEdzdFN1bkF1ZGlvTWl4ZXJUcmFja0NsYXNzOwotCi1HVHlwZQkJZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfZ2V0X3R5cGUJKHZvaWQpOwotR3N0TWl4ZXJUcmFjayoJZ3N0X3N1bmF1ZGlvbWl4ZXJfdHJhY2tfbmV3CQkoR3N0U3VuQXVkaW9UcmFja1R5cGUgdHJhY2tfbnVtKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1NVTkFVRElPX01JWEVSX1RSQUNLX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jIGIvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDczMDY4Li4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDY1MCArMCwwIEBACi0vKgotICogR1N0cmVhbWVyIC0gU3VuQXVkaW8gc2luawotICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwKLSAqICAgICAgICAgICAgICAgQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA2IEphbiBTY2htaWR0IDx0aGF5dGFuQG1hZC5zY2llbnRpc3QuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXN1bmF1ZGlvc2luawotICoKLSAqIHN1bmF1ZGlvc2luayBpcyBhbiBhdWRpbyBzaW5rIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgU3VuIEF1ZGlvCi0gKiBpbnRlcmZhY2UgYXZhaWxhYmxlIGluIFNvbGFyaXMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmU8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIGF1ZGlvdGVzdHNyYyB2b2x1bWU9MC41ICEgc3VuYXVkaW9zaW5rCi0gKiBdfAotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cm9wdHMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaW5jbHVkZSAiZ3N0c3VuYXVkaW9zaW5rLmgiCi0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHN1bmF1ZGlvX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHN1bmF1ZGlvX2RlYnVnCi0KLXN0YXRpYyB2b2lkIGdzdF9zdW5hdWRpb3NpbmtfYmFzZV9pbml0IChncG9pbnRlciBnX2NsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9zdW5hdWRpb3NpbmtfY2xhc3NfaW5pdCAoR3N0U3VuQXVkaW9TaW5rQ2xhc3MgKiBrbGFzcyk7Ci1zdGF0aWMgdm9pZCBnc3Rfc3VuYXVkaW9zaW5rX2luaXQgKEdzdFN1bkF1ZGlvU2luayAqIGZpbHRlcik7Ci1zdGF0aWMgdm9pZCBnc3Rfc3VuYXVkaW9zaW5rX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvc2lua19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF9zdW5hdWRpb3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3Rfc3VuYXVkaW9zaW5rX2dldGNhcHMgKEdzdEJhc2VTaW5rICogYnNpbmspOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N1bmF1ZGlvc2lua19vcGVuIChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N1bmF1ZGlvc2lua19jbG9zZSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGdib29sZWFuIGdzdF9zdW5hdWRpb3NpbmtfcHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmssCi0gICAgR3N0UmluZ0J1ZmZlclNwZWMgKiBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3VuYXVkaW9zaW5rX3VucHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIGd1aW50IGdzdF9zdW5hdWRpb3Npbmtfd3JpdGUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLCBncG9pbnRlciBkYXRhLAotICAgIGd1aW50IGxlbmd0aCk7Ci1zdGF0aWMgZ3VpbnQgZ3N0X3N1bmF1ZGlvc2lua19kZWxheSAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvc2lua19yZXNldCAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotCi0jZGVmaW5lIERFRkFVTFRfREVWSUNFICAiL2Rldi9hdWRpbyIKLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0RFVklDRSwKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfc3VuYXVkaW9zaW5rX2ZhY3RvcnkgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXctaW50LCAiCi0gICAgICAgICJlbmRpYW5uZXNzID0gKGludCkgQllURV9PUkRFUiwgIgotICAgICAgICAic2lnbmVkID0gKGJvb2xlYW4pIFRSVUUsICIgIndpZHRoID0gKGludCkgMTYsICIgImRlcHRoID0gKGludCkgMTYsICIKLSAgICAgICAgLyogWzU1MTAsNDgwMDBdIHNlZW1zIHRvIGJlIGEgU29sYXJpcyBsaW1pdCAqLwotICAgICAgICAicmF0ZSA9IChpbnQpIFsgNTUxMCwgNDgwMDAgXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdEVsZW1lbnRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKLQotR1R5cGUKLWdzdF9zdW5hdWRpb3NpbmtfZ2V0X3R5cGUgKHZvaWQpCi17Ci0gIHN0YXRpYyBHVHlwZSBwbHVnaW5fdHlwZSA9IDA7Ci0KLSAgaWYgKCFwbHVnaW5fdHlwZSkgewotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gcGx1Z2luX2luZm8gPSB7Ci0gICAgICBzaXplb2YgKEdzdFN1bkF1ZGlvU2lua0NsYXNzKSwKLSAgICAgIGdzdF9zdW5hdWRpb3NpbmtfYmFzZV9pbml0LAotICAgICAgTlVMTCwKLSAgICAgIChHQ2xhc3NJbml0RnVuYykgZ3N0X3N1bmF1ZGlvc2lua19jbGFzc19pbml0LAotICAgICAgTlVMTCwKLSAgICAgIE5VTEwsCi0gICAgICBzaXplb2YgKEdzdFN1bkF1ZGlvU2luayksCi0gICAgICAwLAotICAgICAgKEdJbnN0YW5jZUluaXRGdW5jKSBnc3Rfc3VuYXVkaW9zaW5rX2luaXQsCi0gICAgfTsKLQotICAgIHBsdWdpbl90eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAoR1NUX1RZUEVfQVVESU9fU0lOSywKLSAgICAgICAgIkdzdFN1bkF1ZGlvU2luayIsICZwbHVnaW5faW5mbywgMCk7Ci0gIH0KLSAgcmV0dXJuIHBsdWdpbl90eXBlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvc2lua19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb3NpbmtfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFN1bkF1ZGlvU2luayAqc3VuYXVkaW9zaW5rID0gR1NUX1NVTkFVRElPX1NJTksgKG9iamVjdCk7Ci0KLSAgZ19tdXRleF9mcmVlIChzdW5hdWRpb3NpbmstPndyaXRlX211dGV4KTsKLSAgZ19jb25kX2ZyZWUgKHN1bmF1ZGlvc2luay0+c2xlZXBfY29uZCk7Ci0KLSAgZ19mcmVlIChzdW5hdWRpb3NpbmstPmRldmljZSk7Ci0KLSAgaWYgKHN1bmF1ZGlvc2luay0+ZmQgIT0gLTEpIHsKLSAgICBjbG9zZSAoc3VuYXVkaW9zaW5rLT5mZCk7Ci0gICAgc3VuYXVkaW9zaW5rLT5mZCA9IC0xOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvc2lua19iYXNlX2luaXQgKGdwb2ludGVyIGdfY2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc3VuYXVkaW9zaW5rX2ZhY3RvcnkpOwotICBnc3RfZWxlbWVudF9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiU3VuIEF1ZGlvIFNpbmsiLAotICAgICAgIlNpbmsvQXVkaW8iLCAiQXVkaW8gc2luayBmb3IgU3VuIEF1ZGlvIGRldmljZXMiLAotICAgICAgIkRhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPiwgIgotICAgICAgIkJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb3NpbmtfY2xhc3NfaW5pdCAoR3N0U3VuQXVkaW9TaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmdzdGJhc2VzaW5rX2NsYXNzOwotICBHc3RCYXNlQXVkaW9TaW5rQ2xhc3MgKmdzdGJhc2VhdWRpb3NpbmtfY2xhc3M7Ci0gIEdzdEF1ZGlvU2lua0NsYXNzICpnc3RhdWRpb3NpbmtfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc2lua19jbGFzcyA9IChHc3RCYXNlU2lua0NsYXNzICopIGtsYXNzOwotICBnc3RiYXNlYXVkaW9zaW5rX2NsYXNzID0gKEdzdEJhc2VBdWRpb1NpbmtDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzID0gKEdzdEF1ZGlvU2lua0NsYXNzICopIGtsYXNzOwotCi0gIHBhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfc3VuYXVkaW9zaW5rX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3N1bmF1ZGlvc2lua19maW5hbGl6ZTsKLQotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfc3VuYXVkaW9zaW5rX3NldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3N1bmF1ZGlvc2lua19nZXRfcHJvcGVydHk7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmdldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zdW5hdWRpb3NpbmtfZ2V0Y2Fwcyk7Ci0KLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5vcGVuID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zdW5hdWRpb3Npbmtfb3Blbik7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+Y2xvc2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N1bmF1ZGlvc2lua19jbG9zZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+cHJlcGFyZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3VuYXVkaW9zaW5rX3ByZXBhcmUpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPnVucHJlcGFyZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N1bmF1ZGlvc2lua191bnByZXBhcmUpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPndyaXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zdW5hdWRpb3Npbmtfd3JpdGUpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zdW5hdWRpb3NpbmtfZGVsYXkpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPnJlc2V0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF9zdW5hdWRpb3NpbmtfcmVzZXQpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZSIsICJEZXZpY2UiLCAiQXVkaW8gRGV2aWNlICgvZGV2L2F1ZGlvKSIsCi0gICAgICAgICAgREVGQVVMVF9ERVZJQ0UsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvc2lua19pbml0IChHc3RTdW5BdWRpb1NpbmsgKiBzdW5hdWRpb3NpbmspCi17Ci0gIGNvbnN0IGNoYXIgKmF1ZGlvZGV2OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHN1bmF1ZGlvc2luaywgImluaXRpYWxpemluZyBzdW5hdWRpb3NpbmsiKTsKLQotICBzdW5hdWRpb3NpbmstPmZkID0gLTE7Ci0KLSAgYXVkaW9kZXYgPSBnX2dldGVudiAoIkFVRElPREVWIik7Ci0gIGlmIChhdWRpb2RldiA9PSBOVUxMKQotICAgIGF1ZGlvZGV2ID0gREVGQVVMVF9ERVZJQ0U7Ci0gIHN1bmF1ZGlvc2luay0+ZGV2aWNlID0gZ19zdHJkdXAgKGF1ZGlvZGV2KTsKLQotICAvKiBtdXRleCBhbmQgZ2NvbmQgdXNlZCB0byBjb250cm9sIHRoZSB3cml0ZSBtZXRob2QgKi8KLSAgc3VuYXVkaW9zaW5rLT53cml0ZV9tdXRleCA9IGdfbXV0ZXhfbmV3ICgpOwotICBzdW5hdWRpb3NpbmstPnNsZWVwX2NvbmQgPSBnX2NvbmRfbmV3ICgpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0U3VuQXVkaW9TaW5rICpzdW5hdWRpb3Npbms7Ci0KLSAgc3VuYXVkaW9zaW5rID0gR1NUX1NVTkFVRElPX1NJTksgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFVklDRToKLSAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoc3VuYXVkaW9zaW5rKTsKLSAgICAgIGdfZnJlZSAoc3VuYXVkaW9zaW5rLT5kZXZpY2UpOwotICAgICAgc3VuYXVkaW9zaW5rLT5kZXZpY2UgPSBnX3N0cmR1cCAoZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHN1bmF1ZGlvc2luayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9zaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RTdW5BdWRpb1NpbmsgKnN1bmF1ZGlvc2luazsKLQotICBzdW5hdWRpb3NpbmsgPSBHU1RfU1VOQVVESU9fU0lOSyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgR1NUX09CSkVDVF9MT0NLIChzdW5hdWRpb3NpbmspOwotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3VuYXVkaW9zaW5rLT5kZXZpY2UpOwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHN1bmF1ZGlvc2luayk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF9zdW5hdWRpb3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaykKLXsKLSAgR3N0UGFkVGVtcGxhdGUgKnBhZF90ZW1wbGF0ZTsKLSAgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0gIEdzdFN1bkF1ZGlvU2luayAqc3VuYXVkaW9zaW5rID0gR1NUX1NVTkFVRElPX1NJTksgKGJzaW5rKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzdW5hdWRpb3NpbmssICJnZXRjYXBzIGNhbGxlZCIpOwotCi0gIHBhZF90ZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCAoJmdzdF9zdW5hdWRpb3NpbmtfZmFjdG9yeSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19jb3B5IChnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzIChwYWRfdGVtcGxhdGUpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwYWRfdGVtcGxhdGUpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdW5hdWRpb3Npbmtfb3BlbiAoR3N0QXVkaW9TaW5rICogYXNpbmspCi17Ci0gIEdzdFN1bkF1ZGlvU2luayAqc3VuYXVkaW9zaW5rID0gR1NUX1NVTkFVRElPX1NJTksgKGFzaW5rKTsKLSAgaW50IGZkLCByZXQ7Ci0KLSAgLyogRmlyc3QgdHJ5IHRvIG9wZW4gbm9uLWJsb2NraW5nICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc3VuYXVkaW9zaW5rKTsKLSAgZmQgPSBvcGVuIChzdW5hdWRpb3NpbmstPmRldmljZSwgT19XUk9OTFkgfCBPX05PTkJMT0NLKTsKLQotICBpZiAoZmQgPj0gMCkgewotICAgIGNsb3NlIChmZCk7Ci0gICAgZmQgPSBvcGVuIChzdW5hdWRpb3NpbmstPmRldmljZSwgT19XUk9OTFkpOwotICB9Ci0KLSAgaWYgKGZkID09IC0xKSB7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHN1bmF1ZGlvc2luayk7Ci0gICAgZ290byBvcGVuX2ZhaWxlZDsKLSAgfQotCi0gIHN1bmF1ZGlvc2luay0+ZmQgPSBmZDsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHN1bmF1ZGlvc2luayk7Ci0KLSAgcmV0ID0gaW9jdGwgKGZkLCBBVURJT19HRVRERVYsICZzdW5hdWRpb3NpbmstPmRldik7Ci0gIGlmIChyZXQgPT0gLTEpCi0gICAgZ290byBpb2N0bF9lcnJvcjsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzdW5hdWRpb3NpbmssICJuYW1lICVzIiwgc3VuYXVkaW9zaW5rLT5kZXYubmFtZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHN1bmF1ZGlvc2luaywgInZlcnNpb24gJXMiLCBzdW5hdWRpb3NpbmstPmRldi52ZXJzaW9uKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zaW5rLCAiY29uZmlnICVzIiwgc3VuYXVkaW9zaW5rLT5kZXYuY29uZmlnKTsKLQotICByZXQgPSBpb2N0bCAoZmQsIEFVRElPX0dFVElORk8sICZzdW5hdWRpb3NpbmstPmluZm8pOwotICBpZiAocmV0ID09IC0xKQotICAgIGdvdG8gaW9jdGxfZXJyb3I7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zaW5rLCAibW9uaXRvcl9nYWluICVkIiwKLSAgICAgIHN1bmF1ZGlvc2luay0+aW5mby5tb25pdG9yX2dhaW4pOwotICBHU1RfREVCVUdfT0JKRUNUIChzdW5hdWRpb3NpbmssICJvdXRwdXRfbXV0ZWQgJWQiLAotICAgICAgc3VuYXVkaW9zaW5rLT5pbmZvLm91dHB1dF9tdXRlZCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHN1bmF1ZGlvc2luaywgImh3X2ZlYXR1cmVzICUwOHgiLAotICAgICAgc3VuYXVkaW9zaW5rLT5pbmZvLmh3X2ZlYXR1cmVzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zaW5rLCAic3dfZmVhdHVyZXMgJTA4eCIsCi0gICAgICBzdW5hdWRpb3NpbmstPmluZm8uc3dfZmVhdHVyZXMpOwotICBHU1RfREVCVUdfT0JKRUNUIChzdW5hdWRpb3NpbmssICJzd19mZWF0dXJlc19lbmFibGVkICUwOHgiLAotICAgICAgc3VuYXVkaW9zaW5rLT5pbmZvLnN3X2ZlYXR1cmVzX2VuYWJsZWQpOwotCi0gIHJldHVybiBUUlVFOwotCi1vcGVuX2ZhaWxlZDoKLSAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc2luaywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsIChOVUxMKSwKLSAgICAgICgiY2FuJ3Qgb3BlbiBjb25uZWN0aW9uIHRvIFN1biBBdWRpbyBkZXZpY2UgJXMiLCBzdW5hdWRpb3NpbmstPmRldmljZSkpOwotICByZXR1cm4gRkFMU0U7Ci1pb2N0bF9lcnJvcjoKLSAgY2xvc2UgKHN1bmF1ZGlvc2luay0+ZmQpOwotICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSkpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N1bmF1ZGlvc2lua19jbG9zZSAoR3N0QXVkaW9TaW5rICogYXNpbmspCi17Ci0gIEdzdFN1bkF1ZGlvU2luayAqc3VuYXVkaW9zaW5rID0gR1NUX1NVTkFVRElPX1NJTksgKGFzaW5rKTsKLQotICBpZiAoc3VuYXVkaW9zaW5rLT5mZCAhPSAtMSkgewotICAgIGNsb3NlIChzdW5hdWRpb3NpbmstPmZkKTsKLSAgICBzdW5hdWRpb3NpbmstPmZkID0gLTE7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3N1bmF1ZGlvc2lua19wcmVwYXJlIChHc3RBdWRpb1NpbmsgKiBhc2luaywgR3N0UmluZ0J1ZmZlclNwZWMgKiBzcGVjKQotewotICBHc3RTdW5BdWRpb1NpbmsgKnN1bmF1ZGlvc2luayA9IEdTVF9TVU5BVURJT19TSU5LIChhc2luayk7Ci0gIGF1ZGlvX2luZm9fdCBhaW5mbzsKLSAgaW50IHJldDsKLSAgaW50IHBvcnRzOwotCi0gIHJldCA9IGlvY3RsIChzdW5hdWRpb3NpbmstPmZkLCBBVURJT19HRVRJTkZPLCAmYWluZm8pOwotICBpZiAocmV0ID09IC0xKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksICgiJXMiLAotICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChzcGVjLT53aWR0aCAhPSAxNikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcG9ydHMgPSBhaW5mby5wbGF5LnBvcnQ7Ci0KLSAgQVVESU9fSU5JVElORk8gKCZhaW5mbyk7Ci0KLSAgYWluZm8ucGxheS5zYW1wbGVfcmF0ZSA9IHNwZWMtPnJhdGU7Ci0gIGFpbmZvLnBsYXkuY2hhbm5lbHMgPSBzcGVjLT5jaGFubmVsczsKLSAgYWluZm8ucGxheS5wcmVjaXNpb24gPSBzcGVjLT53aWR0aDsKLSAgYWluZm8ucGxheS5lbmNvZGluZyA9IEFVRElPX0VOQ09ESU5HX0xJTkVBUjsKLSAgYWluZm8ucGxheS5wb3J0ID0gcG9ydHM7Ci0KLSAgLyogYnVmZmVyX3RpbWUgZm9yIHBsYXliYWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBTb2xhcmlzIGF0IHRoZSBtb21lbnQsCi0gICAgIGJ1dCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIGl0IG1pZ2h0IGJlICovCi0gIGFpbmZvLnBsYXkuYnVmZmVyX3NpemUgPQotICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlIChzcGVjLT5yYXRlICogc3BlYy0+Ynl0ZXNfcGVyX3NhbXBsZSwKLSAgICAgIHNwZWMtPmJ1ZmZlcl90aW1lLCBHU1RfU0VDT05EIC8gR1NUX1VTRUNPTkQpOwotCi0gIHNwZWMtPnNpbGVuY2Vfc2FtcGxlWzBdID0gMDsKLSAgc3BlYy0+c2lsZW5jZV9zYW1wbGVbMV0gPSAwOwotICBzcGVjLT5zaWxlbmNlX3NhbXBsZVsyXSA9IDA7Ci0gIHNwZWMtPnNpbGVuY2Vfc2FtcGxlWzNdID0gMDsKLQotICByZXQgPSBpb2N0bCAoc3VuYXVkaW9zaW5rLT5mZCwgQVVESU9fU0VUSU5GTywgJmFpbmZvKTsKLSAgaWYgKHJldCA9PSAtMSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzdW5hdWRpb3NpbmssIFJFU09VUkNFLCBTRVRUSU5HUywgKE5VTEwpLCAoIiVzIiwKLSAgICAgICAgICAgIHN0cmVycm9yIChlcnJubykpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBOb3cgcmVhZCBiYWNrIHRoZSBpbmZvIHRvIGZpbmQgb3V0IHRoZSBhY3R1YWwgYnVmZmVyIHNpemUgYW5kIHNldCAKLSAgICAgc2VndG90YWwgKi8KLSAgQVVESU9fSU5JVElORk8gKCZhaW5mbyk7Ci0KLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc2luay0+ZmQsIEFVRElPX0dFVElORk8sICZhaW5mbyk7Ci0gIGlmIChyZXQgPT0gLTEpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0jaWYgMAotICAvKiBXZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIGJ1ZmZlcl9zaXplIGZyb20gdGhlIHNvdW5kIGRldmljZSwgYmVjYXVzZQotICAgKiBpdCBzZWVtcyBpdCdzIGp1c3QgYm9ndXMgc29tZXRpbWVzICovCi0gIHN1bmF1ZGlvc2luay0+c2VndG90YWwgPSBzcGVjLT5zZWd0b3RhbCA9Ci0gICAgICBhaW5mby5wbGF5LmJ1ZmZlcl9zaXplIC8gc3BlYy0+c2Vnc2l6ZTsKLSNlbHNlCi0gIHN1bmF1ZGlvc2luay0+c2VndG90YWwgPSBzcGVjLT5zZWd0b3RhbDsKLSNlbmRpZgotICBzdW5hdWRpb3NpbmstPnNlZ3RvdGFsX3NhbXBsZXMgPQotICAgICAgc3BlYy0+c2VndG90YWwgKiBzcGVjLT5zZWdzaXplIC8gc3BlYy0+Ynl0ZXNfcGVyX3NhbXBsZTsKLQotICBzdW5hdWRpb3NpbmstPnNlZ3Nfd3JpdHRlbiA9IChnaW50KSBhaW5mby5wbGF5LmVvZjsKLSAgc3VuYXVkaW9zaW5rLT5zYW1wbGVzX3dyaXR0ZW4gPSBhaW5mby5wbGF5LnNhbXBsZXM7Ci0gIHN1bmF1ZGlvc2luay0+Ynl0ZXNfcGVyX3NhbXBsZSA9IHNwZWMtPmJ5dGVzX3Blcl9zYW1wbGU7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zaW5rLCAiR290IGRldmljZSBidWZmZXJfc2l6ZSBvZiAldSIsCi0gICAgICBhaW5mby5wbGF5LmJ1ZmZlcl9zaXplKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3VuYXVkaW9zaW5rX3VucHJlcGFyZSAoR3N0QXVkaW9TaW5rICogYXNpbmspCi17Ci0gIHJldHVybiBUUlVFOwotfQotCi0jZGVmaW5lIExPT1BfV0hJTEVfRUlOVFIodixmdW5jKSBkbyB7ICh2KSA9IChmdW5jKTsgfSBcCi0JCXdoaWxlICgodikgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0vKiBDYWxsZWQgd2l0aCB0aGUgd3JpdGVfbXV0ZXggaGVsZCAqLwotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb19zaW5rX2RvX2RlbGF5IChHc3RTdW5BdWRpb1NpbmsgKiBzaW5rKQotewotICBHc3RCYXNlQXVkaW9TaW5rICpiYV9zaW5rID0gR1NUX0JBU0VfQVVESU9fU0lOSyAoc2luayk7Ci0gIEdzdENsb2NrVGltZSB0b3RhbF9zbGVlcDsKLSAgR3N0Q2xvY2tUaW1lIG1heF9zbGVlcDsKLSAgZ2ludCBzbGVlcF91c2VjczsKLSAgR1RpbWVWYWwgc2xlZXBfZW5kOwotICBnaW50IGVycjsKLSAgYXVkaW9faW5mb190IGFpbmZvOwotICBndWludCBkaWZmOwotCi0gIC8qIFRoaXMgY29kZSBiZWxvdyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgcmFjZSBhbnkgZnVydGhlciB0aGFuIGJ1ZmZlcl90aW1lIAotICAgKiBhaGVhZCBvZiB0aGUgYXVkaW8gb3V0cHV0LCBieSBzbGVlcGluZyBpZiB0aGUgbmV4dCB3cml0ZSBjYWxsIHdvdWxkIGNhdXNlCi0gICAqIHVzIHRvIGFkdmFuY2UgdG9vIGZhciBpbiB0aGUgcmluZy1idWZmZXIgKi8KLSAgTE9PUF9XSElMRV9FSU5UUiAoZXJyLCBpb2N0bCAoc2luay0+ZmQsIEFVRElPX0dFVElORk8sICZhaW5mbykpOwotICBpZiAoZXJyIDwgMCkKLSAgICBnb3RvIHdyaXRlX2Vycm9yOwotCi0gIC8qIENvbXB1dGUgb3VyIG9mZnNldCBmcm9tIHRoZSBvdXRwdXQgKGNvcGVzIHdpdGggb3ZlcmZsb3cpICovCi0gIGRpZmYgPSAoZ3VpbnQpIChzaW5rLT5zZWdzX3dyaXR0ZW4pIC0gYWluZm8ucGxheS5lb2Y7Ci0gIGlmIChkaWZmID4gc2luay0+c2VndG90YWwpIHsKLSAgICAvKiBUaGlzIGltcGxpZXMgdGhhdCByZXNldCBkaWQgYSBmbHVzaCBqdXN0IGFzIHRoZSBzb3VuZCBkZXZpY2UgYXF1aXJlZAotICAgICAqIHNvbWUgYnVmZmVycyBpbnRlcm5hbGx5LCBhbmQgaXQgY2F1c2VzIHVzIHRvIGJlIG91dCBvZiBzeW5jIHdpdGggdGhlCi0gICAgICogZW9mIG1lYXN1cmUuIFRoaXMgY29ycmVjdHMgaXQgKi8KLSAgICBzaW5rLT5zZWdzX3dyaXR0ZW4gPSBhaW5mby5wbGF5LmVvZjsKLSAgICBkaWZmID0gMDsKLSAgfQotCi0gIGlmIChkaWZmICsgMSA8IHNpbmstPnNlZ3RvdGFsKQotICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAvKiBubyBuZWVkIHRvIHNsZWVwIGF0IGFsbCAqLwotCi0gIC8qIE5ldmVyIHNsZWVwIGxvbmdlciB0aGFuIHRoZSBpbml0aWFsIG51bWJlciBvZiB1bmRyYWluZWQgc2VnbWVudHMgaW4gdGhlIAotICAgICBkZXZpY2UgcGx1cyBvbmUgKi8KLSAgdG90YWxfc2xlZXAgPSAwOwotICBtYXhfc2xlZXAgPSAoZGlmZiArIDEpICogKGJhX3NpbmstPmxhdGVuY3lfdGltZSAqIEdTVF9VU0VDT05EKTsKLSAgLyogc2xlZXAgZm9yIGEgc2VnbWVudCBwZXJpb2QgYmV0d2VlbiAuZW9mIHBvbGxzICovCi0gIHNsZWVwX3VzZWNzID0gYmFfc2luay0+bGF0ZW5jeV90aW1lOwotCi0gIC8qIEN1cnJlbnQgdGltZSBpcyBvdXIgcmVmZXJlbmNlIHBvaW50ICovCi0gIGdfZ2V0X2N1cnJlbnRfdGltZSAoJnNsZWVwX2VuZCk7Ci0KLSAgLyogSWYgdGhlIG5leHQgc2VnbWVudCB3b3VsZCB0YWtlIHVzIHRvbyBmYXIgYWxvbmcgdGhlIHJpbmcgYnVmZmVyLAotICAgKiBzbGVlcCBmb3IgYSBiaXQgdG8gZnJlZSB1cCBhIHNsb3QuIElmIHRoZXJlIHdlcmUgYSB3YXkgdG8gZmluZCBvdXQKLSAgICogd2hlbiB0aGUgZW9mIGZpZWxkIGFjdHVhbGx5IGluY3JlbWVudHMsIHdlIGNvdWxkIHVzZSwgYnV0IHRoZSBvbmx5Ci0gICAqIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gc2VlbXMgdG8gYmUgU0lHUE9MTCwgd2hpY2ggd2UgY2FuJ3QgdXNlIGZyb20KLSAgICogYSBzdXBwb3J0IGxpYnJhcnkgKi8KLSAgd2hpbGUgKGRpZmYgKyAxID49IHNpbmstPnNlZ3RvdGFsICYmIHRvdGFsX3NsZWVwIDwgbWF4X3NsZWVwKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJuZWVkIHRvIGJsb2NrIHRvIGRyYWluIHNlZ21lbnQocykuICIKLSAgICAgICAgIlNsZWVwaW5nIGZvciAlZCB1cyIsIHNsZWVwX3VzZWNzKTsKLQotICAgIGdfdGltZV92YWxfYWRkICgmc2xlZXBfZW5kLCBzbGVlcF91c2Vjcyk7Ci0KLSAgICBpZiAoZ19jb25kX3RpbWVkX3dhaXQgKHNpbmstPnNsZWVwX2NvbmQsIHNpbmstPndyaXRlX211dGV4LCAmc2xlZXBfZW5kKSkgewotICAgICAgR1NUX0xPR19PQkpFQ1QgKHNpbmssICJXYWtpbmcgdXAgZWFybHkgZHVlIHRvIHJlc2V0Iik7Ci0gICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8qIEdvdCB0b2xkIHRvIHdha2UgdXAgKi8KLSAgICB9Ci0gICAgdG90YWxfc2xlZXAgKz0gKHNsZWVwX3VzZWNzICogR1NUX1VTRUNPTkQpOwotCi0gICAgTE9PUF9XSElMRV9FSU5UUiAoZXJyLCBpb2N0bCAoc2luay0+ZmQsIEFVRElPX0dFVElORk8sICZhaW5mbykpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgZ290byB3cml0ZV9lcnJvcjsKLQotICAgIC8qIENvbXB1dGUgb3VyIChuZXcpIG9mZnNldCBmcm9tIHRoZSBvdXRwdXQgKGNvcGVzIHdpdGggb3ZlcmZsb3cpICovCi0gICAgZGlmZiA9IChndWludCkgZ19hdG9taWNfaW50X2dldCAoJnNpbmstPnNlZ3Nfd3JpdHRlbikgLSBhaW5mby5wbGF5LmVvZjsKLSAgfQotCi0gIHJldHVybjsKLQotd3JpdGVfZXJyb3I6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChzaW5rLCBSRVNPVVJDRSwgT1BFTl9XUklURSwgKE5VTEwpLAotICAgICAgKCJQbGF5YmFjayBlcnJvciBvbiBkZXZpY2UgJyVzJzogJXMiLCBzaW5rLT5kZXZpY2UsIHN0cmVycm9yIChlcnJubykpKTsKLSAgcmV0dXJuOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9zdW5hdWRpb3Npbmtfd3JpdGUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLCBncG9pbnRlciBkYXRhLCBndWludCBsZW5ndGgpCi17Ci0gIEdzdFN1bkF1ZGlvU2luayAqc2luayA9IEdTVF9TVU5BVURJT19TSU5LIChhc2luayk7Ci0KLSAgZ2ludCBieXRlc193cml0dGVuLCBlcnI7Ci0KLSAgZ19tdXRleF9sb2NrIChzaW5rLT53cml0ZV9tdXRleCk7Ci0gIGlmIChzaW5rLT5mbHVzaGluZykgewotICAgIC8qIEV4aXQgaW1tZWRpYXRlbHkgaWYgcmVzZXQgdGVsbHMgdXMgdG8gKi8KLSAgICBnX211dGV4X3VubG9jayAoc2luay0+d3JpdGVfbXV0ZXgpOwotICAgIHJldHVybiBsZW5ndGg7Ci0gIH0KLQotICBMT09QX1dISUxFX0VJTlRSIChieXRlc193cml0dGVuLCB3cml0ZSAoc2luay0+ZmQsIGRhdGEsIGxlbmd0aCkpOwotICBpZiAoYnl0ZXNfd3JpdHRlbiA8IDApIHsKLSAgICBlcnIgPSBieXRlc193cml0dGVuOwotICAgIGdvdG8gd3JpdGVfZXJyb3I7Ci0gIH0KLQotICAvKiBJbmNyZW1lbnQgb3VyIHNhbXBsZSBjb3VudGVyLCBmb3IgZGVsYXkgY2FsY3MgKi8KLSAgZ19hdG9taWNfaW50X2FkZCAoJnNpbmstPnNhbXBsZXNfd3JpdHRlbiwgbGVuZ3RoIC8gc2luay0+Ynl0ZXNfcGVyX3NhbXBsZSk7Ci0KLSAgLyogRG9uJ3QgY29uc2lkZXIgdGhlIHNlZ21lbnQgd3JpdHRlbiBpZiB3ZSBkaWRuJ3Qgb3V0cHV0IHRoZSB3aG9sZSBsb3QgeWV0ICovCi0gIGlmIChieXRlc193cml0dGVuIDwgbGVuZ3RoKSB7Ci0gICAgZ19tdXRleF91bmxvY2sgKHNpbmstPndyaXRlX211dGV4KTsKLSAgICByZXR1cm4gKGd1aW50KSBieXRlc193cml0dGVuOwotICB9Ci0KLSAgLyogV3JpdGUgYSB6ZXJvIGxlbmd0aCBvdXRwdXQgdG8gdHJpZ2dlciBpbmNyZW1lbnQgb2YgdGhlIGVvZiBmaWVsZCAqLwotICBMT09QX1dISUxFX0VJTlRSIChlcnIsIHdyaXRlIChzaW5rLT5mZCwgTlVMTCwgMCkpOwotICBpZiAoZXJyIDwgMCkKLSAgICBnb3RvIHdyaXRlX2Vycm9yOwotCi0gIC8qIENvdW50IHRoaXMgZXh0cmEgc2VnbWVudCB3ZSd2ZSB3cml0dGVuICovCi0gIHNpbmstPnNlZ3Nfd3JpdHRlbiArPSAxOwotCi0gIC8qIE5vdyBkZWxheSBzbyB3ZSBkb24ndCBvdmVycnVuIHRoZSByaW5nIGJ1ZmZlciAqLwotICBnc3Rfc3VuYXVkaW9fc2lua19kb19kZWxheSAoc2luayk7Ci0KLSAgZ19tdXRleF91bmxvY2sgKHNpbmstPndyaXRlX211dGV4KTsKLSAgcmV0dXJuIGxlbmd0aDsKLQotd3JpdGVfZXJyb3I6Ci0gIGdfbXV0ZXhfdW5sb2NrIChzaW5rLT53cml0ZV9tdXRleCk7Ci0KLSAgR1NUX0VMRU1FTlRfRVJST1IgKHNpbmssIFJFU09VUkNFLCBPUEVOX1dSSVRFLCAoTlVMTCksCi0gICAgICAoIlBsYXliYWNrIGVycm9yIG9uIGRldmljZSAnJXMnOiAlcyIsIHNpbmstPmRldmljZSwgc3RyZXJyb3IgKGVycm5vKSkpOwotICByZXR1cm4gbGVuZ3RoOyAgICAgICAgICAgICAgICAvKiBTYXkgd2Ugd3JvdGUgdGhlIHNlZ21lbnQgdG8gbGV0IHRoZSByaW5nYnVmZmVyIGV4aXQgKi8KLX0KLQotLyoKLSAqIFByb3ZpZGUgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHVucGxheWVkIHNhbXBsZXMgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbgotICogdG8gdGhlIGRldmljZSAqLwotc3RhdGljIGd1aW50Ci1nc3Rfc3VuYXVkaW9zaW5rX2RlbGF5IChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgR3N0U3VuQXVkaW9TaW5rICpzaW5rID0gR1NUX1NVTkFVRElPX1NJTksgKGFzaW5rKTsKLSAgYXVkaW9faW5mb190IGFpbmZvOwotICBnaW50IHJldDsKLSAgZ3VpbnQgb2Zmc2V0OwotCi0gIHJldCA9IGlvY3RsIChzaW5rLT5mZCwgQVVESU9fR0VUSU5GTywgJmFpbmZvKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCA9PSAtMSkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgb2Zmc2V0ID0gKGdfYXRvbWljX2ludF9nZXQgKCZzaW5rLT5zYW1wbGVzX3dyaXR0ZW4pIC0gYWluZm8ucGxheS5zYW1wbGVzKTsKLQotICAvKiBJZiB0aGUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIHRoZSB0b3RhbCByaW5nYnVmZmVyIHNpemUsIHRoZW4gd2UgYXNrZWQKLSAgICAgYmV0d2VlbiB0aGUgd3JpdGUgY2FsbCBhbmQgd2hlbiBzYW1wbGVzX3dyaXR0ZW4gaXMgdXBkYXRlZCAqLwotICBpZiAoR19VTkxJS0VMWSAob2Zmc2V0ID4gc2luay0+c2VndG90YWxfc2FtcGxlcykpCi0gICAgcmV0dXJuIDA7Ci0KLSAgcmV0dXJuIG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb3NpbmtfcmVzZXQgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICAvKiBHZXQgY3VycmVudCB2YWx1ZXMgKi8KLSAgR3N0U3VuQXVkaW9TaW5rICpzdW5hdWRpb3NpbmsgPSBHU1RfU1VOQVVESU9fU0lOSyAoYXNpbmspOwotICBhdWRpb19pbmZvX3QgYWluZm87Ci0gIGludCByZXQ7Ci0KLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc2luay0+ZmQsIEFVRElPX0dFVElORk8sICZhaW5mbyk7Ci0gIGlmIChyZXQgPT0gLTEpIHsKLSAgICAvKgotICAgICAqIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiB3ZSBjb3VsZG4ndCBnZXRpbmZvLCB0aGVuIG5vIHBvaW50Ci0gICAgICogdHJ5aW5nIHRvIHNldGluZm8KLSAgICAgKi8KLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyoKLSAgICogUGF1c2UgdGhlIGF1ZGlvIC0gc28gYXVkaW8gc3RvcHMgcGxheWluZyBpbW1lZGlhdGVseSByYXRoZXIgdGhhbgotICAgKiB3YWl0aW5nIGZvciB0aGUgcmluZ2J1ZmZlciB0byBlbXB0eS4KLSAgICovCi0gIGFpbmZvLnBsYXkucGF1c2UgPSAhTlVMTDsKLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc2luay0+ZmQsIEFVRElPX1NFVElORk8sICZhaW5mbyk7Ci0gIGlmIChyZXQgPT0gLTEpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gIH0KLQotICAvKiBGbHVzaCB0aGUgYXVkaW8gKi8KLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc2luay0+ZmQsIElfRkxVU0gsIEZMVVNIVyk7Ci0gIGlmIChyZXQgPT0gLTEpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gIH0KLQotICAvKiBOb3csIHdlIHRha2UgdGhlIHdyaXRlX211dGV4IGFuZCBzaWduYWwgdG8gZW5zdXJlIHRoZSB3cml0ZSB0aHJlYWQKLSAgICogaXMgbm90IGJ1c3ksIGFuZCB3ZSBzaWduYWwgdGhlIGNvbmRpdGlvbiB0byB3YWtlIHVwIGFueSBzbGVlcGVyLAotICAgKiB0aGVuIHdlIGZsdXNoIGFnYWluIGluIGNhc2UgdGhlIHdyaXRlIHdyb3RlIHNvbWV0aGluZyBhZnRlciB3ZSBmbHVzaGVkLAotICAgKiBhbmQgZmluYWxseSByZWxlYXNlIHRoZSBsb2NrIGFuZCB1bnBhdXNlICovCi0gIGdfbXV0ZXhfbG9jayAoc3VuYXVkaW9zaW5rLT53cml0ZV9tdXRleCk7Ci0gIHN1bmF1ZGlvc2luay0+Zmx1c2hpbmcgPSBUUlVFOwotCi0gIGdfY29uZF9zaWduYWwgKHN1bmF1ZGlvc2luay0+c2xlZXBfY29uZCk7Ci0KLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc2luay0+ZmQsIElfRkxVU0gsIEZMVVNIVyk7Ci0gIGlmIChyZXQgPT0gLTEpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gIH0KLQotICAvKiB1bnBhdXNlIHRoZSBhdWRpbyAqLwotICBhaW5mby5wbGF5LnBhdXNlID0gTlVMTDsKLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc2luay0+ZmQsIEFVRElPX1NFVElORk8sICZhaW5mbyk7Ci0gIGlmIChyZXQgPT0gLTEpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3VuYXVkaW9zaW5rLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gIH0KLQotICAvKiBBZnRlciBmbHVzaGluZyB0aGUgYXVkaW8gZGV2aWNlLCB3ZSBuZWVkIHRvIHJlbWVhc3VyZSB0aGUgc2FtcGxlIGNvdW50Ci0gICAqIGFuZCBzZWdtZW50cyB3cml0dGVuIGNvdW50IHNvIHdlJ3JlIGluIHN5bmMgd2l0aCB0aGUgZGV2aWNlICovCi0KLSAgc3VuYXVkaW9zaW5rLT5zZWdzX3dyaXR0ZW4gPSBhaW5mby5wbGF5LmVvZjsKLSAgZ19hdG9taWNfaW50X3NldCAoJnN1bmF1ZGlvc2luay0+c2FtcGxlc193cml0dGVuLCBhaW5mby5wbGF5LnNhbXBsZXMpOwotCi0gIHN1bmF1ZGlvc2luay0+Zmx1c2hpbmcgPSBGQUxTRTsKLSAgZ19tdXRleF91bmxvY2sgKHN1bmF1ZGlvc2luay0+d3JpdGVfbXV0ZXgpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5oIGIvc3lzL3N1bmF1ZGlvL2dzdHN1bmF1ZGlvc2luay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjMwZTZhLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgLSBTdW5BdWRpbyBzaW5rCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+Ci0gKgotICogZ3N0c3VuYXVkaW9zaW5rLmg6Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9TVU5BVURJT19TSU5LX0hfXwotI2RlZmluZSBfX0dTVF9TVU5BVURJT19TSU5LX0hfXwotCi0jaW5jbHVkZSA8c3lzL2F1ZGlvaW8uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvc2luay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU1VOQVVESU9fU0lOSyAgICAgICAgICAgIChnc3Rfc3VuYXVkaW9zaW5rX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TVU5BVURJT19TSU5LKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfU1VOQVVESU9fU0lOSyxHc3RTdW5BdWRpb1NpbmspKQotI2RlZmluZSBHU1RfU1VOQVVESU9fU0lOS19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfU1VOQVVESU9fU0lOSyxHc3RTdW5BdWRpb1NpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19TSU5LKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU1VOQVVESU9fU0lOSykpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19TSU5LX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9TVU5BVURJT19TSU5LKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN1bkF1ZGlvU2luayBHc3RTdW5BdWRpb1Npbms7Ci10eXBlZGVmIHN0cnVjdCBfR3N0U3VuQXVkaW9TaW5rQ2xhc3MgR3N0U3VuQXVkaW9TaW5rQ2xhc3M7Ci0KLXN0cnVjdCBfR3N0U3VuQXVkaW9TaW5rIHsKLSAgR3N0QXVkaW9TaW5rICAgIHNpbms7Ci0KLSAgZ2NoYXIgKmRldmljZTsKLSAgZ2ludCAgIGZkOwotCi0gIGF1ZGlvX2RldmljZV90IGRldjsKLSAgYXVkaW9faW5mb190IGluZm87Ci0KLSAgLyogTnVtYmVyIG9mIHNlZ21lbnRzIHRoZSByaW5nYnVmZmVyIGlzIGNvbmZpZ3VyZWQgZm9yICovCi0gIGd1aW50IHNlZ3RvdGFsOwotICBndWludCBzZWd0b3RhbF9zYW1wbGVzOwotCi0gIC8qIE51bWJlciBvZiBzZWdtZW50cyB3cml0dGVuIHRvIHRoZSBkZXZpY2UgKi8KLSAgZ2ludCBzZWdzX3dyaXR0ZW47Ci0gIC8qIE51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4gdG8gdGhlIGRldmljZSAqLwotICBnaW50IHNhbXBsZXNfd3JpdHRlbjsKLSAgZ3VpbnQgYnl0ZXNfcGVyX3NhbXBsZTsKLQotICAvKiBtdXRleCBhbmQgZ2NvbmQgdXNlZCB0byBjb250cm9sIHRoZSB3cml0ZSBtZXRob2QgKi8KLSAgR011dGV4ICp3cml0ZV9tdXRleDsKLSAgR0NvbmQgKnNsZWVwX2NvbmQ7Ci0gIGdib29sZWFuIGZsdXNoaW5nOwotfTsKLQotc3RydWN0IF9Hc3RTdW5BdWRpb1NpbmtDbGFzcyB7Ci0gIEdzdEF1ZGlvU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF9zdW5hdWRpb3NpbmtfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TVU5BVURJT19TSU5LX0hfXyAqLwotCmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuYyBiL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWNjNGU5Li4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIxICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIgLSBTdW5BdWRpbyBzb3VyY2UKLSAqIENvcHlyaWdodCAoQykgMjAwNSwyMDA2IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sCi0gKiAgICAgICAgICAgICAgIEJyaWFuIENhbWVyb24gPGJyaWFuLmNhbWVyb25Ac3VuLmNvbT4KLSAqCi0gKiBnc3RzdW5hdWRpb3NyYy5jOiAKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC1zdW5hdWRpb3NyYwotICoKLSAqIHN1bmF1ZGlvc3JjIGlzIGFuIGF1ZGlvIHNvdXJjZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIFN1biBBdWRpbwotICogaW50ZXJmYWNlIGF2YWlsYWJsZSBpbiBTb2xhcmlzLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIGxhdW5jaCBsaW5lPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCBzdW5hdWRpb3NyYyAhIHdhdmVuYyAhIGZpbGVzaW5rIGxvY2F0aW9uPWF1ZGlvLndhdgotICogXXwKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJvcHRzLmg+Ci0jaW5jbHVkZSA8c3lzL21peGVyLmg+Ci0KLSNpbmNsdWRlICJnc3RzdW5hdWRpb3NyYy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOIChzdW5hdWRpb19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBzdW5hdWRpb19kZWJ1ZwotCi1zdGF0aWMgdm9pZCBnc3Rfc3VuYXVkaW9zcmNfYmFzZV9pbml0IChncG9pbnRlciBnX2NsYXNzKTsKLXN0YXRpYyB2b2lkIGdzdF9zdW5hdWRpb3NyY19jbGFzc19pbml0IChHc3RTdW5BdWRpb1NyY0NsYXNzICoga2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvc3JjX2luaXQgKEdzdFN1bkF1ZGlvU3JjICogc3VuYXVkaW9zcmMsCi0gICAgR3N0U3VuQXVkaW9TcmNDbGFzcyAqIGdfY2xhc3MpOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvc3JjX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi1zdGF0aWMgdm9pZCBnc3Rfc3VuYXVkaW9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3N1bmF1ZGlvc3JjX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotc3RhdGljIEdzdENhcHMgKmdzdF9zdW5hdWRpb3NyY19nZXRjYXBzIChHc3RCYXNlU3JjICogYnNyYyk7Ci0KLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3VuYXVkaW9zcmNfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfc3VuYXVkaW9zcmNfY2xvc2UgKEdzdEF1ZGlvU3JjICogYXNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3N1bmF1ZGlvc3JjX3ByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYywKLSAgICBHc3RSaW5nQnVmZmVyU3BlYyAqIHNwZWMpOwotc3RhdGljIGdib29sZWFuIGdzdF9zdW5hdWRpb3NyY191bnByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYyk7Ci1zdGF0aWMgZ3VpbnQgZ3N0X3N1bmF1ZGlvc3JjX3JlYWQgKEdzdEF1ZGlvU3JjICogYXNyYywgZ3BvaW50ZXIgZGF0YSwKLSAgICBndWludCBsZW5ndGgpOwotc3RhdGljIGd1aW50IGdzdF9zdW5hdWRpb3NyY19kZWxheSAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLXN0YXRpYyB2b2lkIGdzdF9zdW5hdWRpb3NyY19yZXNldCAoR3N0QXVkaW9TcmMgKiBhc3JjKTsKLQotI2RlZmluZSBERUZBVUxUX0RFVklDRSAgICAgICAgICAiL2Rldi9hdWRpbyIKLQotZW51bQotewotICBQUk9QXzAsCi0gIFBST1BfREVWSUNFCi19OwotCi1HU1RfQk9JTEVSUExBVEVfV0lUSF9JTlRFUkZBQ0UgKEdzdFN1bkF1ZGlvU3JjLCBnc3Rfc3VuYXVkaW9zcmMsCi0gICAgR3N0QXVkaW9TcmMsIEdTVF9UWVBFX0FVRElPX1NSQywgR3N0TWl4ZXIsIEdTVF9UWVBFX01JWEVSLCBnc3Rfc3VuYXVkaW9zcmMpOwotCi1HU1RfSU1QTEVNRU5UX1NVTkFVRElPX01JWEVSX0NUUkxfTUVUSE9EUyAoR3N0U3VuQXVkaW9TcmMsIGdzdF9zdW5hdWRpb3NyYyk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBnc3Rfc3VuYXVkaW9zcmNfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXctaW50LCAiCi0gICAgICAgICJlbmRpYW5uZXNzID0gKGludCkgQllURV9PUkRFUiwgIgotICAgICAgICAic2lnbmVkID0gKGJvb2xlYW4pIFRSVUUsICIgIndpZHRoID0gKGludCkgMTYsICIgImRlcHRoID0gKGludCkgMTYsICIKLSAgICAgICAgLyogWzU1MTAsNDgwMDBdIHNlZW1zIHRvIGJlIGEgU29sYXJpcyBsaW1pdCAqLwotICAgICAgICAicmF0ZSA9IChpbnQpIFsgNTUxMCwgNDgwMDAgXSwgIiAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXSIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb3NyY19iYXNlX2luaXQgKGdwb2ludGVyIGdfY2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgICZnc3Rfc3VuYXVkaW9zcmNfZmFjdG9yeSk7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJTdW4gQXVkaW8gU291cmNlIiwKLSAgICAgICJTb3VyY2UvQXVkaW8iLCAiQXVkaW8gc291cmNlIGZvciBTdW4gQXVkaW8gZGV2aWNlcyIsCi0gICAgICAiQnJpYW4gQ2FtZXJvbiA8YnJpYW4uY2FtZXJvbkBzdW4uY29tPiIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3N1bmF1ZGlvc3JjX2NsYXNzX2luaXQgKEdzdFN1bkF1ZGlvU3JjQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqZ3N0YmFzZXNyY19jbGFzczsKLSAgR3N0QmFzZUF1ZGlvU3JjQ2xhc3MgKmdzdGJhc2VhdWRpb3NyY19jbGFzczsKLSAgR3N0QXVkaW9TcmNDbGFzcyAqZ3N0YXVkaW9zcmNfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotICBnc3RiYXNlc3JjX2NsYXNzID0gKEdzdEJhc2VTcmNDbGFzcyAqKSBrbGFzczsKLSAgZ3N0YmFzZWF1ZGlvc3JjX2NsYXNzID0gKEdzdEJhc2VBdWRpb1NyY0NsYXNzICopIGtsYXNzOwotICBnc3RhdWRpb3NyY19jbGFzcyA9IChHc3RBdWRpb1NyY0NsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3Rfc3VuYXVkaW9zcmNfZGlzcG9zZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3N1bmF1ZGlvc3JjX2dldF9wcm9wZXJ0eTsKLSAgZ29iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3N1bmF1ZGlvc3JjX3NldF9wcm9wZXJ0eTsKLQotICBnc3RiYXNlc3JjX2NsYXNzLT5nZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3VuYXVkaW9zcmNfZ2V0Y2Fwcyk7Ci0KLSAgZ3N0YXVkaW9zcmNfY2xhc3MtPm9wZW4gPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N1bmF1ZGlvc3JjX29wZW4pOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cHJlcGFyZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3VuYXVkaW9zcmNfcHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT51bnByZXBhcmUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N1bmF1ZGlvc3JjX3VucHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5jbG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3VuYXVkaW9zcmNfY2xvc2UpOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cmVhZCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3VuYXVkaW9zcmNfcmVhZCk7Ci0gIGdzdGF1ZGlvc3JjX2NsYXNzLT5kZWxheSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfc3VuYXVkaW9zcmNfZGVsYXkpOwotICBnc3RhdWRpb3NyY19jbGFzcy0+cmVzZXQgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3N1bmF1ZGlvc3JjX3Jlc2V0KTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFVklDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJkZXZpY2UiLCAiRGV2aWNlIiwKLSAgICAgICAgICAiU3VuQXVkaW8gZGV2aWNlICh1c3VhbGx5IC9kZXYvYXVkaW8pIiwgREVGQVVMVF9ERVZJQ0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9zcmNfaW5pdCAoR3N0U3VuQXVkaW9TcmMgKiBzdW5hdWRpb3NyYywKLSAgICBHc3RTdW5BdWRpb1NyY0NsYXNzICogZ19jbGFzcykKLXsKLSAgY29uc3QgY2hhciAqYXVkaW9kZXY7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJpbml0aWFsaXppbmcgc3VuYXVkaW9zcmMiKTsKLQotICBzdW5hdWRpb3NyYy0+ZmQgPSAtMTsKLQotICBhdWRpb2RldiA9IGdfZ2V0ZW52ICgiQVVESU9ERVYiKTsKLSAgaWYgKGF1ZGlvZGV2ID09IE5VTEwpCi0gICAgYXVkaW9kZXYgPSBERUZBVUxUX0RFVklDRTsKLSAgc3VuYXVkaW9zcmMtPmRldmljZSA9IGdfc3RyZHVwIChhdWRpb2Rldik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN1bkF1ZGlvU3JjICpzdW5hdWRpb3NyYzsKLQotICBzdW5hdWRpb3NyYyA9IEdTVF9TVU5BVURJT19TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFVklDRToKLSAgICAgIGdfZnJlZSAoc3VuYXVkaW9zcmMtPmRldmljZSk7Ci0gICAgICBzdW5hdWRpb3NyYy0+ZGV2aWNlID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfc3VuYXVkaW9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFN1bkF1ZGlvU3JjICpzdW5hdWRpb3NyYzsKLQotICBzdW5hdWRpb3NyYyA9IEdTVF9TVU5BVURJT19TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFVklDRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHN1bmF1ZGlvc3JjLT5kZXZpY2UpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3Rfc3VuYXVkaW9zcmNfZ2V0Y2FwcyAoR3N0QmFzZVNyYyAqIGJzcmMpCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpwYWRfdGVtcGxhdGU7Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICBHc3RTdW5BdWRpb1NyYyAqc3VuYXVkaW9zcmMgPSBHU1RfU1VOQVVESU9fU1JDIChic3JjKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzdW5hdWRpb3NyYywgImdldGNhcHMgY2FsbGVkIik7Ci0KLSAgcGFkX3RlbXBsYXRlID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0ICgmZ3N0X3N1bmF1ZGlvc3JjX2ZhY3RvcnkpOwotICBjYXBzID0gZ3N0X2NhcHNfY29weSAoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyAocGFkX3RlbXBsYXRlKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGFkX3RlbXBsYXRlKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3VuYXVkaW9zcmNfb3BlbiAoR3N0QXVkaW9TcmMgKiBhc3JjKQotewotICBHc3RTdW5BdWRpb1NyYyAqc3VuYXVkaW9zcmMgPSBHU1RfU1VOQVVESU9fU1JDIChhc3JjKTsKLSAgaW50IGZkLCByZXQ7Ci0KLSAgZmQgPSBvcGVuIChzdW5hdWRpb3NyYy0+ZGV2aWNlLCBPX1JET05MWSk7Ci0KLSAgaWYgKGZkID09IC0xKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoTlVMTCksCi0gICAgICAgICgiY2FuJ3Qgb3BlbiBjb25uZWN0aW9uIHRvIFN1biBBdWRpbyBkZXZpY2UgJXMiLCBzdW5hdWRpb3NyYy0+ZGV2aWNlKSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBzdW5hdWRpb3NyYy0+ZmQgPSBmZDsKLQotICByZXQgPSBpb2N0bCAoZmQsIEFVRElPX0dFVERFViwgJnN1bmF1ZGlvc3JjLT5kZXYpOwotICBpZiAocmV0ID09IC0xKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJuYW1lICVzIiwgc3VuYXVkaW9zcmMtPmRldi5uYW1lKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJ2ZXJzaW9uICVzIiwgc3VuYXVkaW9zcmMtPmRldi52ZXJzaW9uKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJjb25maWcgJXMiLCBzdW5hdWRpb3NyYy0+ZGV2LmNvbmZpZyk7Ci0KLSAgcmV0ID0gaW9jdGwgKGZkLCBBVURJT19HRVRJTkZPLCAmc3VuYXVkaW9zcmMtPmluZm8pOwotICBpZiAocmV0ID09IC0xKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJtb25pdG9yX2dhaW4gJWQiLAotICAgICAgc3VuYXVkaW9zcmMtPmluZm8ubW9uaXRvcl9nYWluKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJvdXRwdXRfbXV0ZWQgJWQiLAotICAgICAgc3VuYXVkaW9zcmMtPmluZm8ub3V0cHV0X211dGVkKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJod19mZWF0dXJlcyAlMDh4IiwKLSAgICAgIHN1bmF1ZGlvc3JjLT5pbmZvLmh3X2ZlYXR1cmVzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJzd19mZWF0dXJlcyAlMDh4IiwKLSAgICAgIHN1bmF1ZGlvc3JjLT5pbmZvLnN3X2ZlYXR1cmVzKTsKLSAgR1NUX0RFQlVHX09CSkVDVCAoc3VuYXVkaW9zcmMsICJzd19mZWF0dXJlc19lbmFibGVkICUwOHgiLAotICAgICAgc3VuYXVkaW9zcmMtPmluZm8uc3dfZmVhdHVyZXNfZW5hYmxlZCk7Ci0KLSAgaWYgKCFzdW5hdWRpb3NyYy0+bWl4ZXIpIHsKLSAgICBjb25zdCBjaGFyICphdWRpb2RldjsKLQotICAgIGF1ZGlvZGV2ID0gZ19nZXRlbnYgKCJBVURJT0RFViIpOwotICAgIGlmIChhdWRpb2RldiA9PSBOVUxMKSB7Ci0gICAgICBzdW5hdWRpb3NyYy0+bWl4ZXIgPSBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX25ldyAoIi9kZXYvYXVkaW9jdGwiKTsKLSAgICB9IGVsc2UgewotICAgICAgZ2NoYXIgKmRldmljZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzY3RsIiwgYXVkaW9kZXYpOwotCi0gICAgICBzdW5hdWRpb3NyYy0+bWl4ZXIgPSBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX25ldyAoZGV2aWNlKTsKLSAgICAgIGdfZnJlZSAoZGV2aWNlKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfc3VuYXVkaW9zcmNfY2xvc2UgKEdzdEF1ZGlvU3JjICogYXNyYykKLXsKLSAgR3N0U3VuQXVkaW9TcmMgKnN1bmF1ZGlvc3JjID0gR1NUX1NVTkFVRElPX1NSQyAoYXNyYyk7Ci0KLSAgY2xvc2UgKHN1bmF1ZGlvc3JjLT5mZCk7Ci0gIHN1bmF1ZGlvc3JjLT5mZCA9IC0xOwotCi0gIGlmIChzdW5hdWRpb3NyYy0+bWl4ZXIpIHsKLSAgICBnc3Rfc3VuYXVkaW9taXhlcl9jdHJsX2ZyZWUgKHN1bmF1ZGlvc3JjLT5taXhlcik7Ci0gICAgc3VuYXVkaW9zcmMtPm1peGVyID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdW5hdWRpb3NyY19wcmVwYXJlIChHc3RBdWRpb1NyYyAqIGFzcmMsIEdzdFJpbmdCdWZmZXJTcGVjICogc3BlYykKLXsKLSAgR3N0U3VuQXVkaW9TcmMgKnN1bmF1ZGlvc3JjID0gR1NUX1NVTkFVRElPX1NSQyAoYXNyYyk7Ci0gIGF1ZGlvX2luZm9fdCBhaW5mbzsKLSAgaW50IHJldDsKLSAgR3N0U3VuQXVkaW9NaXhlckN0cmwgKm1peGVyOwotICBzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb2luZm87Ci0KLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc3JjLT5mZCwgQVVESU9fR0VUSU5GTywgJmFpbmZvKTsKLSAgaWYgKHJldCA9PSAtMSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzdW5hdWRpb3NyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksICgiJXMiLAotICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIGlmIChzcGVjLT53aWR0aCAhPSAxNikKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgQVVESU9fSU5JVElORk8gKCZhaW5mbyk7Ci0KLSAgYWluZm8ucmVjb3JkLnNhbXBsZV9yYXRlID0gc3BlYy0+cmF0ZTsKLSAgYWluZm8ucmVjb3JkLnByZWNpc2lvbiA9IHNwZWMtPndpZHRoOwotICBhaW5mby5yZWNvcmQuY2hhbm5lbHMgPSBzcGVjLT5jaGFubmVsczsKLSAgYWluZm8ucmVjb3JkLmVuY29kaW5nID0gQVVESU9fRU5DT0RJTkdfTElORUFSOwotICBhaW5mby5yZWNvcmQuYnVmZmVyX3NpemUgPSBzcGVjLT5idWZmZXJfdGltZTsKLQotICBtaXhlciA9IHN1bmF1ZGlvc3JjLT5taXhlcjsKLQotICBpZiAoaW9jdGwgKG1peGVyLT5taXhlcl9mZCwgQVVESU9fR0VUSU5GTywgJmF1ZGlvaW5mbykgPCAwKSB7Ci0gICAgZ193YXJuaW5nICgiRXJyb3IgZ2V0dGluZyBhdWRpbyBkZXZpY2Ugdm9sdW1lIik7Ci0gIH0KLSAgYWluZm8ucmVjb3JkLnBvcnQgPSBhdWRpb2luZm8ucmVjb3JkLnBvcnQ7Ci0gIGFpbmZvLnJlY29yZC5nYWluID0gYXVkaW9pbmZvLnJlY29yZC5nYWluOwotICBhaW5mby5yZWNvcmQuYmFsYW5jZSA9IGF1ZGlvaW5mby5yZWNvcmQuYmFsYW5jZTsKLQotICBzcGVjLT5zZWdzaXplID0gMTI4OwotICBzcGVjLT5zZWd0b3RhbCA9IHNwZWMtPmJ1ZmZlcl90aW1lIC8gMTI4OwotCi0gIHNwZWMtPnNpbGVuY2Vfc2FtcGxlWzBdID0gMDsKLSAgc3BlYy0+c2lsZW5jZV9zYW1wbGVbMV0gPSAwOwotICBzcGVjLT5zaWxlbmNlX3NhbXBsZVsyXSA9IDA7Ci0gIHNwZWMtPnNpbGVuY2Vfc2FtcGxlWzNdID0gMDsKLQotICByZXQgPSBpb2N0bCAoc3VuYXVkaW9zcmMtPmZkLCBBVURJT19TRVRJTkZPLCAmYWluZm8pOwotICBpZiAocmV0ID09IC0xKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLQotICBpb2N0bCAoc3VuYXVkaW9zcmMtPmZkLCBJX0ZMVVNILCBGTFVTSFIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9zdW5hdWRpb3NyY191bnByZXBhcmUgKEdzdEF1ZGlvU3JjICogYXNyYykKLXsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X3N1bmF1ZGlvc3JjX3JlYWQgKEdzdEF1ZGlvU3JjICogYXNyYywgZ3BvaW50ZXIgZGF0YSwgZ3VpbnQgbGVuZ3RoKQotewotICByZXR1cm4gcmVhZCAoR1NUX1NVTkFVRElPX1NSQyAoYXNyYyktPmZkLCBkYXRhLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgZ3VpbnQKLWdzdF9zdW5hdWRpb3NyY19kZWxheSAoR3N0QXVkaW9TcmMgKiBhc3JjKQotewotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9zdW5hdWRpb3NyY19yZXNldCAoR3N0QXVkaW9TcmMgKiBhc3JjKQotewotICAvKiBHZXQgY3VycmVudCB2YWx1ZXMgKi8KLSAgR3N0U3VuQXVkaW9TcmMgKnN1bmF1ZGlvc3JjID0gR1NUX1NVTkFVRElPX1NSQyAoYXNyYyk7Ci0gIGF1ZGlvX2luZm9fdCBhaW5mbzsKLSAgaW50IHJldDsKLQotICByZXQgPSBpb2N0bCAoc3VuYXVkaW9zcmMtPmZkLCBBVURJT19HRVRJTkZPLCAmYWluZm8pOwotICBpZiAocmV0ID09IC0xKSB7Ci0gICAgLyoKLSAgICAgKiBTaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgd2UgY291bGRuJ3QgZ2V0aW5mbywgdGhlbiBubyBwb2ludAotICAgICAqIHRyeWluZyB0byBzZXRpbmZvCi0gICAgICovCi0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyoKLSAgICogUGF1c2UgdGhlIGF1ZGlvIC0gc28gYXVkaW8gc3RvcHMgcGxheWluZyBpbW1lZGlhdGVseSByYXRoZXIgdGhhbgotICAgKiB3YWl0aW5nIGZvciB0aGUgcmluZ2J1ZmZlciB0byBlbXB0eS4KLSAgICovCi0gIGFpbmZvLnJlY29yZC5wYXVzZSA9ICFOVUxMOwotICByZXQgPSBpb2N0bCAoc3VuYXVkaW9zcmMtPmZkLCBBVURJT19TRVRJTkZPLCAmYWluZm8pOwotICBpZiAocmV0ID09IC0xKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHN1bmF1ZGlvc3JjLCBSRVNPVVJDRSwgU0VUVElOR1MsIChOVUxMKSwgKCIlcyIsCi0gICAgICAgICAgICBzdHJlcnJvciAoZXJybm8pKSk7Ci0gIH0KLQotICAvKiBGbHVzaCB0aGUgYXVkaW8gKi8KLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc3JjLT5mZCwgSV9GTFVTSCwgRkxVU0hSKTsKLSAgaWYgKHJldCA9PSAtMSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzdW5hdWRpb3NyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksICgiJXMiLAotICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSkpOwotICB9Ci0KLSAgLyogdW5wYXVzZSB0aGUgYXVkaW8gKi8KLSAgYWluZm8ucmVjb3JkLnBhdXNlID0gTlVMTDsKLSAgcmV0ID0gaW9jdGwgKHN1bmF1ZGlvc3JjLT5mZCwgQVVESU9fU0VUSU5GTywgJmFpbmZvKTsKLSAgaWYgKHJldCA9PSAtMSkgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzdW5hdWRpb3NyYywgUkVTT1VSQ0UsIFNFVFRJTkdTLCAoTlVMTCksICgiJXMiLAotICAgICAgICAgICAgc3RyZXJyb3IgKGVycm5vKSkpOwotICB9Ci19CmRpZmYgLS1naXQgYS9zeXMvc3VuYXVkaW8vZ3N0c3VuYXVkaW9zcmMuaCBiL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTY1ZjNiLi4wMDAwMDAwCi0tLSBhL3N5cy9zdW5hdWRpby9nc3RzdW5hdWRpb3NyYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogR1N0cmVhbWVyIC0gU3VuQXVkaW8gc291cmNlCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAotICogICAgICAgICAgICAgICBCcmlhbiBDYW1lcm9uIDxicmlhbi5jYW1lcm9uQHN1bi5jb20+Ci0gKgotICogZ3N0c3VuYXVkaW9zcmMuaDoKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1NVTkFVRElPX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfU1VOQVVESU9fU1JDX0hfXwotCi0jaW5jbHVkZSA8c3lzL2F1ZGlvaW8uaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2dzdGF1ZGlvc3JjLmg+Ci0KLSNpbmNsdWRlICJnc3RzdW5hdWRpb21peGVyY3RybC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfU1VOQVVESU9fU1JDICAgICAoZ3N0X3N1bmF1ZGlvc3JjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9TVU5BVURJT19TUkMob2JqKSAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1NVTkFVRElPX1NSQyxHc3RTdW5BdWRpb1NyYykpCi0jZGVmaW5lIEdTVF9TVU5BVURJT19TUkNfQ0xBU1Moa2xhc3MpICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9TVU5BVURJT19TUkMsR3N0U3VuQXVkaW9TcmNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19TVU5BVURJT19TUkMob2JqKSAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfU1VOQVVESU9fU1JDKSkKLSNkZWZpbmUgR1NUX0lTX1NVTkFVRElPX1NSQ19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfU1VOQVVESU9fU1JDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN1bkF1ZGlvU3JjIEdzdFN1bkF1ZGlvU3JjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN1bkF1ZGlvU3JjQ2xhc3MgR3N0U3VuQXVkaW9TcmNDbGFzczsKLQotc3RydWN0IF9Hc3RTdW5BdWRpb1NyYyB7Ci0gIEdzdEF1ZGlvU3JjICAgIHNyYzsKLQotICBnY2hhciAqZGV2aWNlOwotICBnaW50ICAgZmQ7Ci0gIGdpbnQgICBjb250cm9sX2ZkOwotCi0gIGF1ZGlvX2RldmljZV90IGRldjsKLSAgYXVkaW9faW5mb190IGluZm87Ci0KLSAgZ2ludCAgIGJ5dGVzX3Blcl9zYW1wbGU7Ci0KLSAgR3N0U3VuQXVkaW9NaXhlckN0cmwgKm1peGVyOwotfTsKLQotc3RydWN0IF9Hc3RTdW5BdWRpb1NyY0NsYXNzIHsKLSAgR3N0QXVkaW9TcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3Rfc3VuYXVkaW9zcmNfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9TVU5BVURJT19TUkNfSF9fICovCi0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL01ha2VmaWxlLmFtIGIvc3lzL3Y0bDIvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjY2VhMWEuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R2aWRlbzRsaW51eDIubGEKLQotaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtZ2xpYi1nZW4ubWFrCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9TT1VSQ0VTID0gZ3N0djRsMi5jIFwKLQkJCQlnc3R2NGwyYWxsb2NhdG9yLmMgXAotCQkJCWdzdHY0bDJjb2xvcmJhbGFuY2UuYyBcCi0JCQkJZ3N0djRsMmRldmljZXByb3ZpZGVyLmMgXAotCQkJCWdzdHY0bDJvYmplY3QuYyBcCi0JCQkJZ3N0djRsMmJ1ZmZlcnBvb2wuYyBcCi0JCQkJZ3N0djRsMnNpbmsuYyBcCi0JCQkJZ3N0djRsMnNyYy5jIFwKLQkJCQlnc3R2NGwycmFkaW8uYyBcCi0JCQkJZ3N0djRsMnR1bmVyLmMgXAotCQkJCWdzdHY0bDJ0cmFuc2Zvcm0uYyBcCi0JCQkJZ3N0djRsMnZpZGVvZGVjLmMgXAotCQkJCWdzdHY0bDJ2aWRvcmllbnQuYyBcCi0JCQkJdjRsMl9jYWxscy5jIFwKLQkJCQl2NGwyLXV0aWxzLmMgXAotCQkJCXR1bmVyLmMgXAotCQkJCXR1bmVyY2hhbm5lbC5jIFwKLQkJCQl0dW5lcm5vcm0uYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTID0gICAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSBcCi0JCQkJICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JCQkJICQoR1NUX0NGTEFHUykgXAotCQkJCSAkKFhfQ0ZMQUdTKSBcCi0JCQkJICQoTElCVjRMMl9DRkxBR1MpIFwKLQkJCQkgJChHVURFVl9DRkxBR1MpCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJBREQgPSAgICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JCQkJIC1sZ3N0YWxsb2NhdG9ycy0kKEdTVF9BUElfVkVSU0lPTikgXAotCQkJCSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JCQkJICQoR1NUX0JBU0VfTElCUykgXAotCQkJCSAkKEdTVF9MSUJTKSBcCi0JCQkJICQoTElCVjRMMl9MSUJTKSBcCi0JCQkJICQoR1VERVZfTElCUykgXAotCQkJCSAkKExJQlJUKQotCi1ub2luc3RfSEVBREVSUyA9IFwKLQlleHQvdHlwZXMtY29tcGF0LmggXAotCWV4dC92NGwyLWNvbW1vbi5oIFwKLQlleHQvdjRsMi1jb250cm9scy5oIFwKLQlleHQvdmlkZW9kZXYyLmggXAotCWdzdHY0bDJhbGxvY2F0b3IuaCBcCi0JZ3N0djRsMmJ1ZmZlcnBvb2wuaCBcCi0JZ3N0djRsMmNvbG9yYmFsYW5jZS5oIFwKLQlnc3R2NGwyZGV2aWNlcHJvdmlkZXIuaCBcCi0JZ3N0djRsMm9iamVjdC5oIFwKLQlnc3R2NGwyc2luay5oIFwKLQlnc3R2NGwyc3JjLmggXAotCWdzdHY0bDJyYWRpby5oIFwKLQlnc3R2NGwydHVuZXIuaCBcCi0JZ3N0djRsMnRyYW5zZm9ybS5oIFwKLQlnc3R2NGwydmlkZW9kZWMuaCBcCi0JZ3N0djRsMnZpZG9yaWVudC5oIFwKLQl2NGwyX2NhbGxzLmggXAotCXY0bDItdXRpbHMuaCBcCi0JdHVuZXIuaCBcCi0JdHVuZXJjaGFubmVsLmggXAotCXR1bmVybm9ybS5oCi0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL01ha2VmaWxlLmluIGIvc3lzL3Y0bDIvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3YWZhZTcuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwxMTY2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIHRoZXNlIGFyZSB0aGUgdmFyaWFibGVzIHlvdXIgTWFrZWZpbGUuYW0gc2hvdWxkIHNldAotIyB0aGUgZXhhbXBsZSBpcyBiYXNlZCBvbiB0aGUgY29sb3JiYWxhbmNlIGludGVyZmFjZQotCi0jZ2xpYl9lbnVtX2hlYWRlcnM9JChjb2xvcmJhbGFuY2VfaGVhZGVycykKLSNnbGliX2VudW1fZGVmaW5lPUdTVF9DT0xPUl9CQUxBTkNFCi0jZ2xpYl9nZW5fcHJlZml4PWdzdF9jb2xvcl9iYWxhbmNlCi0jZ2xpYl9nZW5fYmFzZW5hbWU9Y29sb3JiYWxhbmNlCi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gc3lzL3Y0bDIKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChwbHVnaW5kaXIpIgotTFRMSUJSQVJJRVMgPSAkKHBsdWdpbl9MVExJQlJBUklFUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1saWJnc3R2aWRlbzRsaW51eDJfbGFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHZpZGVvNGxpbnV4Ml9sYV9PQkpFQ1RTID0gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDIubG8gXAotCWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYWxsb2NhdG9yLmxvIFwKLQlsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmNvbG9yYmFsYW5jZS5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJkZXZpY2Vwcm92aWRlci5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJvYmplY3QubG8gXAotCWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYnVmZmVycG9vbC5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJzaW5rLmxvIFwKLQlsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNyYy5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJyYWRpby5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0dW5lci5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0cmFuc2Zvcm0ubG8gXAotCWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkZW9kZWMubG8gXAotCWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkb3JpZW50LmxvIFwKLQlsaWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMl9jYWxscy5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLXY0bDItdXRpbHMubG8gXAotCWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lci5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyY2hhbm5lbC5sbyBcCi0JbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVybm9ybS5sbwotbGliZ3N0dmlkZW80bGludXgyX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHZpZGVvNGxpbnV4Ml9sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0dmlkZW80bGludXgyX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0dmlkZW80bGludXgyX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vZ3N0LWdsaWItZ2VuLm1hayAkKHRvcF9zcmNkaXIpL2RlcGNvbXAgXAotCVJFQURNRQotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0dmlkZW80bGludXgyLmxhCi1lbnVtX2hlYWRlcnMgPSAkKGZvcmVhY2ggaCwkKGdsaWJfZW51bV9oZWFkZXJzKSxcblwjaW5jbHVkZSBcIiQoaClcIikKLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9TT1VSQ0VTID0gZ3N0djRsMi5jIFwKLQkJCQlnc3R2NGwyYWxsb2NhdG9yLmMgXAotCQkJCWdzdHY0bDJjb2xvcmJhbGFuY2UuYyBcCi0JCQkJZ3N0djRsMmRldmljZXByb3ZpZGVyLmMgXAotCQkJCWdzdHY0bDJvYmplY3QuYyBcCi0JCQkJZ3N0djRsMmJ1ZmZlcnBvb2wuYyBcCi0JCQkJZ3N0djRsMnNpbmsuYyBcCi0JCQkJZ3N0djRsMnNyYy5jIFwKLQkJCQlnc3R2NGwycmFkaW8uYyBcCi0JCQkJZ3N0djRsMnR1bmVyLmMgXAotCQkJCWdzdHY0bDJ0cmFuc2Zvcm0uYyBcCi0JCQkJZ3N0djRsMnZpZGVvZGVjLmMgXAotCQkJCWdzdHY0bDJ2aWRvcmllbnQuYyBcCi0JCQkJdjRsMl9jYWxscy5jIFwKLQkJCQl2NGwyLXV0aWxzLmMgXAotCQkJCXR1bmVyLmMgXAotCQkJCXR1bmVyY2hhbm5lbC5jIFwKLQkJCQl0dW5lcm5vcm0uYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCQkJCSAkKEdTVF9CQVNFX0NGTEFHUykgXAotCQkJCSAkKEdTVF9DRkxBR1MpIFwKLQkJCQkgJChYX0NGTEFHUykgXAotCQkJCSAkKExJQlY0TDJfQ0ZMQUdTKSBcCi0JCQkJICQoR1VERVZfQ0ZMQUdTKQotCi1saWJnc3R2aWRlbzRsaW51eDJfbGFfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotbGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUyA9ICQoR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MpCi1saWJnc3R2aWRlbzRsaW51eDJfbGFfTElCQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQkJCQkgLWxnc3RhbGxvY2F0b3JzLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JCQkJIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkJCQkgJChHU1RfQkFTRV9MSUJTKSBcCi0JCQkJICQoR1NUX0xJQlMpIFwKLQkJCQkgJChMSUJWNEwyX0xJQlMpIFwKLQkJCQkgJChHVURFVl9MSUJTKSBcCi0JCQkJICQoTElCUlQpCi0KLW5vaW5zdF9IRUFERVJTID0gXAotCWV4dC90eXBlcy1jb21wYXQuaCBcCi0JZXh0L3Y0bDItY29tbW9uLmggXAotCWV4dC92NGwyLWNvbnRyb2xzLmggXAotCWV4dC92aWRlb2RldjIuaCBcCi0JZ3N0djRsMmFsbG9jYXRvci5oIFwKLQlnc3R2NGwyYnVmZmVycG9vbC5oIFwKLQlnc3R2NGwyY29sb3JiYWxhbmNlLmggXAotCWdzdHY0bDJkZXZpY2Vwcm92aWRlci5oIFwKLQlnc3R2NGwyb2JqZWN0LmggXAotCWdzdHY0bDJzaW5rLmggXAotCWdzdHY0bDJzcmMuaCBcCi0JZ3N0djRsMnJhZGlvLmggXAotCWdzdHY0bDJ0dW5lci5oIFwKLQlnc3R2NGwydHJhbnNmb3JtLmggXAotCWdzdHY0bDJ2aWRlb2RlYy5oIFwKLQlnc3R2NGwydmlkb3JpZW50LmggXAotCXY0bDJfY2FsbHMuaCBcCi0JdjRsMi11dGlscy5oIFwKLQl0dW5lci5oIFwKLQl0dW5lcmNoYW5uZWwuaCBcCi0JdHVuZXJub3JtLmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3QtZ2xpYi1nZW4ubWFrICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHN5cy92NGwyL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHN5cy92NGwyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL2dzdC1nbGliLWdlbi5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R2aWRlbzRsaW51eDIubGE6ICQobGliZ3N0dmlkZW80bGludXgyX2xhX09CSkVDVFMpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R2aWRlbzRsaW51eDJfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0dmlkZW80bGludXgyX2xhX09CSkVDVFMpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDIuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmFsbG9jYXRvci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYnVmZmVycG9vbC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyY29sb3JiYWxhbmNlLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJkZXZpY2Vwcm92aWRlci5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyb2JqZWN0LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJyYWRpby5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc2luay5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc3JjLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0cmFuc2Zvcm0uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnR1bmVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRlb2RlYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkb3JpZW50LlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyY2hhbm5lbC5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lcm5vcm0uUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMi11dGlscy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS12NGwyX2NhbGxzLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMi5sbzogZ3N0djRsMi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyLlRwbyAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMi5sbyBgdGVzdCAtZiAnZ3N0djRsMi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMi5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMi5sbyBgdGVzdCAtZiAnZ3N0djRsMi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyLmMKLQotbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJhbGxvY2F0b3IubG86IGdzdHY0bDJhbGxvY2F0b3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYWxsb2NhdG9yLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmFsbG9jYXRvci5UcG8gLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJhbGxvY2F0b3IubG8gYHRlc3QgLWYgJ2dzdHY0bDJhbGxvY2F0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0djRsMmFsbG9jYXRvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmFsbG9jYXRvci5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYWxsb2NhdG9yLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHY0bDJhbGxvY2F0b3IuYycgb2JqZWN0PSdsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmFsbG9jYXRvci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJhbGxvY2F0b3IubG8gYHRlc3QgLWYgJ2dzdHY0bDJhbGxvY2F0b3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0djRsMmFsbG9jYXRvci5jCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyY29sb3JiYWxhbmNlLmxvOiBnc3R2NGwyY29sb3JiYWxhbmNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmNvbG9yYmFsYW5jZS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJjb2xvcmJhbGFuY2UuVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyY29sb3JiYWxhbmNlLmxvIGB0ZXN0IC1mICdnc3R2NGwyY29sb3JiYWxhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJjb2xvcmJhbGFuY2UuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJjb2xvcmJhbGFuY2UuVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmNvbG9yYmFsYW5jZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2NGwyY29sb3JiYWxhbmNlLmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJjb2xvcmJhbGFuY2UubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyY29sb3JiYWxhbmNlLmxvIGB0ZXN0IC1mICdnc3R2NGwyY29sb3JiYWxhbmNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJjb2xvcmJhbGFuY2UuYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmRldmljZXByb3ZpZGVyLmxvOiBnc3R2NGwyZGV2aWNlcHJvdmlkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyZGV2aWNlcHJvdmlkZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyZGV2aWNlcHJvdmlkZXIuVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyZGV2aWNlcHJvdmlkZXIubG8gYHRlc3QgLWYgJ2dzdHY0bDJkZXZpY2Vwcm92aWRlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyZGV2aWNlcHJvdmlkZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJkZXZpY2Vwcm92aWRlci5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyZGV2aWNlcHJvdmlkZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMmRldmljZXByb3ZpZGVyLmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJkZXZpY2Vwcm92aWRlci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJkZXZpY2Vwcm92aWRlci5sbyBgdGVzdCAtZiAnZ3N0djRsMmRldmljZXByb3ZpZGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJkZXZpY2Vwcm92aWRlci5jCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyb2JqZWN0LmxvOiBnc3R2NGwyb2JqZWN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMm9iamVjdC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJvYmplY3QuVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyb2JqZWN0LmxvIGB0ZXN0IC1mICdnc3R2NGwyb2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJvYmplY3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJvYmplY3QuVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMm9iamVjdC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2NGwyb2JqZWN0LmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJvYmplY3QubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyb2JqZWN0LmxvIGB0ZXN0IC1mICdnc3R2NGwyb2JqZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJvYmplY3QuYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmJ1ZmZlcnBvb2wubG86IGdzdHY0bDJidWZmZXJwb29sLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmJ1ZmZlcnBvb2wubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYnVmZmVycG9vbC5UcG8gLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJidWZmZXJwb29sLmxvIGB0ZXN0IC1mICdnc3R2NGwyYnVmZmVycG9vbC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyYnVmZmVycG9vbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmJ1ZmZlcnBvb2wuVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmJ1ZmZlcnBvb2wuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMmJ1ZmZlcnBvb2wuYycgb2JqZWN0PSdsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMmJ1ZmZlcnBvb2wubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyYnVmZmVycG9vbC5sbyBgdGVzdCAtZiAnZ3N0djRsMmJ1ZmZlcnBvb2wuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0djRsMmJ1ZmZlcnBvb2wuYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNpbmsubG86IGdzdHY0bDJzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNpbmsubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc2luay5UcG8gLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJzaW5rLmxvIGB0ZXN0IC1mICdnc3R2NGwyc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyc2luay5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNpbmsuVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNpbmsuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMnNpbmsuYycgb2JqZWN0PSdsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc2luay5sbyBgdGVzdCAtZiAnZ3N0djRsMnNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0djRsMnNpbmsuYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNyYy5sbzogZ3N0djRsMnNyYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc3JjLlRwbyAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNyYy5sbyBgdGVzdCAtZiAnZ3N0djRsMnNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc3JjLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMnNyYy5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwyc3JjLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnNyYy5sbyBgdGVzdCAtZiAnZ3N0djRsMnNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwyc3JjLmMKLQotbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJyYWRpby5sbzogZ3N0djRsMnJhZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnJhZGlvLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnJhZGlvLlRwbyAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnJhZGlvLmxvIGB0ZXN0IC1mICdnc3R2NGwycmFkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0djRsMnJhZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwycmFkaW8uVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnJhZGlvLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHY0bDJyYWRpby5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwycmFkaW8ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwycmFkaW8ubG8gYHRlc3QgLWYgJ2dzdHY0bDJyYWRpby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwycmFkaW8uYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnR1bmVyLmxvOiBnc3R2NGwydHVuZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHVuZXIubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHVuZXIuVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHVuZXIubG8gYHRlc3QgLWYgJ2dzdHY0bDJ0dW5lci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwydHVuZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0dW5lci5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHVuZXIuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMnR1bmVyLmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0dW5lci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0dW5lci5sbyBgdGVzdCAtZiAnZ3N0djRsMnR1bmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJ0dW5lci5jCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHJhbnNmb3JtLmxvOiBnc3R2NGwydHJhbnNmb3JtLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnRyYW5zZm9ybS5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0cmFuc2Zvcm0uVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHJhbnNmb3JtLmxvIGB0ZXN0IC1mICdnc3R2NGwydHJhbnNmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJ0cmFuc2Zvcm0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0cmFuc2Zvcm0uVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnRyYW5zZm9ybS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2NGwydHJhbnNmb3JtLmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ0cmFuc2Zvcm0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydHJhbnNmb3JtLmxvIGB0ZXN0IC1mICdnc3R2NGwydHJhbnNmb3JtLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJ0cmFuc2Zvcm0uYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnZpZGVvZGVjLmxvOiBnc3R2NGwydmlkZW9kZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkZW9kZWMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkZW9kZWMuVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkZW9kZWMubG8gYHRlc3QgLWYgJ2dzdHY0bDJ2aWRlb2RlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R2NGwydmlkZW9kZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRlb2RlYy5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkZW9kZWMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0djRsMnZpZGVvZGVjLmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRlb2RlYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRlb2RlYy5sbyBgdGVzdCAtZiAnZ3N0djRsMnZpZGVvZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJ2aWRlb2RlYy5jCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkb3JpZW50LmxvOiBnc3R2NGwydmlkb3JpZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnZpZG9yaWVudC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRvcmllbnQuVHBvIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkb3JpZW50LmxvIGB0ZXN0IC1mICdnc3R2NGwydmlkb3JpZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJ2aWRvcmllbnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRvcmllbnQuVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtZ3N0djRsMnZpZG9yaWVudC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnc3R2NGwydmlkb3JpZW50LmMnIG9iamVjdD0nbGliZ3N0dmlkZW80bGludXgyX2xhLWdzdHY0bDJ2aWRvcmllbnQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS1nc3R2NGwydmlkb3JpZW50LmxvIGB0ZXN0IC1mICdnc3R2NGwydmlkb3JpZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHY0bDJ2aWRvcmllbnQuYwotCi1saWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMl9jYWxscy5sbzogdjRsMl9jYWxscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW80bGludXgyX2xhLXY0bDJfY2FsbHMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS12NGwyX2NhbGxzLlRwbyAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMl9jYWxscy5sbyBgdGVzdCAtZiAndjRsMl9jYWxscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2NGwyX2NhbGxzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS12NGwyX2NhbGxzLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLXY0bDJfY2FsbHMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndjRsMl9jYWxscy5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS12NGwyX2NhbGxzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMl9jYWxscy5sbyBgdGVzdCAtZiAndjRsMl9jYWxscy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2NGwyX2NhbGxzLmMKLQotbGliZ3N0dmlkZW80bGludXgyX2xhLXY0bDItdXRpbHMubG86IHY0bDItdXRpbHMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS12NGwyLXV0aWxzLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMi11dGlscy5UcG8gLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLXY0bDItdXRpbHMubG8gYHRlc3QgLWYgJ3Y0bDItdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdjRsMi11dGlscy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMi11dGlscy5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS12NGwyLXV0aWxzLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Y0bDItdXRpbHMuYycgb2JqZWN0PSdsaWJnc3R2aWRlbzRsaW51eDJfbGEtdjRsMi11dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLXY0bDItdXRpbHMubG8gYHRlc3QgLWYgJ3Y0bDItdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdjRsMi11dGlscy5jCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lci5sbzogdHVuZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lci5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyLlRwbyAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXIubG8gYHRlc3QgLWYgJ3R1bmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR1bmVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lci5UcG8gJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0dW5lci5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lci5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyLmxvIGB0ZXN0IC1mICd0dW5lci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dW5lci5jCi0KLWxpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lcmNoYW5uZWwubG86IHR1bmVyY2hhbm5lbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyY2hhbm5lbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyY2hhbm5lbC5UcG8gLWMgLW8gbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyY2hhbm5lbC5sbyBgdGVzdCAtZiAndHVuZXJjaGFubmVsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHR1bmVyY2hhbm5lbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJjaGFubmVsLlRwbyAkKERFUERJUikvbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVyY2hhbm5lbC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0dW5lcmNoYW5uZWwuYycgb2JqZWN0PSdsaWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJjaGFubmVsLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQobGliZ3N0dmlkZW80bGludXgyX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYmdzdHZpZGVvNGxpbnV4Ml9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJjaGFubmVsLmxvIGB0ZXN0IC1mICd0dW5lcmNoYW5uZWwuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHVuZXJjaGFubmVsLmMKLQotbGliZ3N0dmlkZW80bGludXgyX2xhLXR1bmVybm9ybS5sbzogdHVuZXJub3JtLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJub3JtLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJub3JtLlRwbyAtYyAtbyBsaWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJub3JtLmxvIGB0ZXN0IC1mICd0dW5lcm5vcm0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgdHVuZXJub3JtLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lcm5vcm0uVHBvICQoREVQRElSKS9saWJnc3R2aWRlbzRsaW51eDJfbGEtdHVuZXJub3JtLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3R1bmVybm9ybS5jJyBvYmplY3Q9J2xpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lcm5vcm0ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R2aWRlbzRsaW51eDJfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0dmlkZW80bGludXgyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHZpZGVvNGxpbnV4Ml9sYS10dW5lcm5vcm0ubG8gYHRlc3QgLWYgJ3R1bmVybm9ybS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0dW5lcm5vcm0uYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIHRoZXNlIGFyZSBhbGwgdGhlIHJ1bGVzIGdlbmVyYXRpbmcgdGhlIHJlbGV2YW50IGZpbGVzCi0kKGdsaWJfZ2VuX2Jhc2VuYW1lKS1tYXJzaGFsLmg6ICQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwubGlzdAotCSQoQU1fVl9HRU4pJChHTElCX0dFTk1BUlNIQUwpIC0taGVhZGVyIC0tcHJlZml4PSQoZ2xpYl9nZW5fcHJlZml4KV9tYXJzaGFsICReID4gJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5oLnRtcCAmJiBcCi0JbXYgJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5oLnRtcCAkKGdsaWJfZ2VuX2Jhc2VuYW1lKS1tYXJzaGFsLmgKLQotJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5jOiAkKGdsaWJfZ2VuX2Jhc2VuYW1lKS1tYXJzaGFsLmxpc3QKLQkkKEFNX1ZfR0VOKWVjaG8gIiNpbmNsdWRlIFwiJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5oXCIiID4+ICQoZ2xpYl9nZW5fYmFzZW5hbWUpLW1hcnNoYWwuYy50bXAgJiYgXAotCSQoR0xJQl9HRU5NQVJTSEFMKSAtLWJvZHkgLS1wcmVmaXg9JChnbGliX2dlbl9wcmVmaXgpX21hcnNoYWwgJF4gPj4gJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5jLnRtcCAmJiBcCi0JbXYgJChnbGliX2dlbl9iYXNlbmFtZSktbWFyc2hhbC5jLnRtcCAkKGdsaWJfZ2VuX2Jhc2VuYW1lKS1tYXJzaGFsLmMKLQotJChnbGliX2dlbl9iYXNlbmFtZSktZW51bXR5cGVzLmg6ICQoZ2xpYl9lbnVtX2hlYWRlcnMpCi0JJChBTV9WX0dFTikkKEdMSUJfTUtFTlVNUykgXAotCS0tZmhlYWQgIiNpZm5kZWYgX18kKGdsaWJfZW51bV9kZWZpbmUpX0VOVU1fVFlQRVNfSF9fXG4jZGVmaW5lIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfX1xuXG4jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cblxuR19CRUdJTl9ERUNMU1xuIiBcCi0JLS1mcHJvZCAiXG4vKiBlbnVtZXJhdGlvbnMgZnJvbSBcIkBmaWxlbmFtZUBcIiAqL1xuIiBcCi0JLS12aGVhZCAiR1R5cGUgQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpO1xuI2RlZmluZSBHU1RfVFlQRV9ARU5VTVNIT1JUQCAoQGVudW1fbmFtZUBfZ2V0X3R5cGUoKSlcbiIgICAgICAgICBcCi0JLS1mdGFpbCAiR19FTkRfREVDTFNcblxuI2VuZGlmIC8qIF9fJChnbGliX2VudW1fZGVmaW5lKV9FTlVNX1RZUEVTX0hfXyAqLyIgXAotCSReID4gJEAKLQotJChnbGliX2dlbl9iYXNlbmFtZSktZW51bXR5cGVzLmM6ICQoZ2xpYl9lbnVtX2hlYWRlcnMpCi0JQGlmIHRlc3QgIngkKGdsaWJfZW51bV9oZWFkZXJzKSIgPSAieCI7IHRoZW4gZWNobyAiRVJST1I6IGdsaWJfZW51bV9oZWFkZXJzIGlzIGVtcHR5LCBwbGVhc2UgZml4IE1ha2VmaWxlIjsgZXhpdCAxOyBmaQotCSQoQU1fVl9HRU4pJChHTElCX01LRU5VTVMpIFwKLQktLWZoZWFkICIjaW5jbHVkZSBcIiQoZ2xpYl9nZW5fYmFzZW5hbWUpLWVudW10eXBlcy5oXCJcbiQoZW51bV9oZWFkZXJzKSIgXAotCS0tZnByb2QgIlxuLyogZW51bWVyYXRpb25zIGZyb20gXCJAZmlsZW5hbWVAXCIgKi8iIFwKLQktLXZoZWFkICJHVHlwZVxuQGVudW1fbmFtZUBfZ2V0X3R5cGUgKHZvaWQpXG57XG4gIHN0YXRpYyB2b2xhdGlsZSBnc2l6ZSBnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZSA9IDA7XG4gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmdfZGVmaW5lX3R5cGVfaWRfX3ZvbGF0aWxlKSkge1xuICAgIHN0YXRpYyBjb25zdCBHQFR5cGVAVmFsdWUgdmFsdWVzW10gPSB7IiAgICAgXAotCS0tdnByb2QgIiAgICAgIHsgQFZBTFVFTkFNRUAsIFwiQFZBTFVFTkFNRUBcIiwgXCJAdmFsdWVuaWNrQFwiIH0sIiBcCi0JLS12dGFpbCAiICAgICAgeyAwLCBOVUxMLCBOVUxMIH1cbiAgICB9O1xuICAgIEdUeXBlIGdfZGVmaW5lX3R5cGVfaWQgPSBnX0B0eXBlQF9yZWdpc3Rlcl9zdGF0aWMgKFwiQEVudW1OYW1lQFwiLCB2YWx1ZXMpO1xuICAgIGdfb25jZV9pbml0X2xlYXZlICgmZ19kZWZpbmVfdHlwZV9pZF9fdm9sYXRpbGUsIGdfZGVmaW5lX3R5cGVfaWQpO1xuICB9XG4gIHJldHVybiBnX2RlZmluZV90eXBlX2lkX192b2xhdGlsZTtcbn1cbiIgXAotCSReID4gJEAKLQotIyBhIGhhY2sgcnVsZSB0byBtYWtlIHN1cmUgLlBsbyBmaWxlcyBleGlzdCBiZWNhdXNlIHRoZXkgZ2V0IGluY2x1ZGUnZAotIyBmcm9tIE1ha2VmaWxlJ3MKLS5kZXBzLyUtbWFyc2hhbC5QbG86Ci0JQHRvdWNoICRACi0KLS5kZXBzLyUtZW51bXR5cGVzLlBsbzoKLQlAdG91Y2ggJEAKLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvUkVBRE1FIGIvc3lzL3Y0bDIvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWM0YWI0Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLXY0bDIgcGx1Z2lucwotPT09PT09PT09PT09Ci0KLVRoZSBpZGVhIGlzIGEgYml0IHRoZSBzYW1lIGFzIHRoZSBpZGVhIGZvciB0aGUgdjRsMSBwbHVnaW5zLiBXZSB3YW50Ci1vbmUgZ2VuZXJpYyB2NGwyZWxlbWVudCwgYW5kIGEgZmV3IGNoaWxkIG9iamVjdHMgKHByb2JhYmx5IG9ubHkgdHdvOgotdjRsMnNyYyBhbmQgdjRsMnNpbmspOgotCi0gICAgICAgICAgICAgICAgLy0tLS0tLS0tIHY0bDJzcmMKLXY0bDJlbGVtZW50IC0tLT0KLSAgICAgICAgICAgICAgICBcLS0tLS0tLS0gdjRsMnNpbmsKLQotQm90aCB2NGwyc3JjIGFuZCB2NGwyc2luayBoYXZlIGEgdW5jb21wcmVzc2VkIGFuZCBhIGNvbXByZXNzZWQKLXJlY29yZGluZy0vcGxheWJhY2stbW9kZS4gU2luY2UgdGhpcyBpcyBhbGwgcGFydCBvZiB2NGwyLCB0aGUgJ2NsaWVudCcKLW9mIHRoZXNlIGVsZW1lbnRzLCBpLmUuIGFuIGFwcGxpY2F0aW9uIHVzaW5nIHY0bDJzcmMvdjRsMnNpbmssIHdpbGwKLWhhcmRseSBub3RpY2UgdGhpcy4gQWxsIGNhcHNuZWdvIHN0dWZmIGlzIGRvbmUgaW5zaWRlLCBhbmQgdGhlIHBsdWdpbgota25vd3Mgd2hpY2ggZm9ybWF0cyBhcmUgY29tcHJlc3NlZCBhbmQgd2hpY2ggYXJlIG5vdC4KLQotUGxlYXNlIG5vdGUgdGhhdCB0aGUgdjRsMSBhbmQgdGhlIHY0bDIgcGx1Z2lucyBhcmUgKm5vdCogY29tcGF0aWJsZQotY29uY2VybmluZyBwcm9wZXJ0aWVzLiBOYW1pbmcgaGFzIGJlZW4ga2VwdCB0aGUgc2FtZSB3aGVyZSBwb3NzaWJsZSwKLWJ1dCBpbiBzb21lIGNhc2VzLCBwcm9wZXJ0aWVzIGhhZCB0byBiZSByZW1vdmVkIG9yIGFkZGVkIHRvIG1ha2UKLWZ1bGwgdXNlIG9mIHY0bDIuCi0KLVY0TDIgQVBJOiBodHRwOi8vbGludXguYnl0ZXNleC5vcmcvdjRsMi8uCi0gICAgICAgICAgaHR0cDovL3Y0bDJzcGVjLmJ5dGVzZXgub3JnLwotICAgICAgICAgIC91c3IvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBvcgotCi1LZXJuZWwgcGF0Y2hlcyBhdmFpbGFibGUgZnJvbQotICAgICAgICAgIGh0dHA6Ly9kbC5ieXRlc2V4Lm9yZy9wYXRjaGVzLy4KLQotQXJ0aWNsZXM6Ci0gICAgICAgICAgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjAzOTI0LwotCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9leHQvdHlwZXMtY29tcGF0LmggYi9zeXMvdjRsMi9leHQvdHlwZXMtY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMDk1Y2IuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZXh0L3R5cGVzLWNvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBDb2xsYWJvcmEgTHRkLgotICogICAgIEF1dGhvcjogTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhc0BuZHVmcmVzbmUuY2E+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLSNpZm5kZWYgX19UWVBFU19DT01QQVRfSF9fCi0jZGVmaW5lIF9fVFlQRVNfQ09NUEFUX0hfXwotCi0vKiBGcm9tIGxpbnV4L3R5cGVzLmggKi8KLSNpZmRlZiBfX0NIRUNLRVJfXwotI2RlZmluZSBfX2JpdHdpc2VfXyBfX2F0dHJpYnV0ZV9fKChiaXR3aXNlKSkKLSNlbHNlCi0jZGVmaW5lIF9fYml0d2lzZV9fCi0jZW5kaWYKLSNpZmRlZiBfX0NIRUNLX0VORElBTl9fCi0jZGVmaW5lIF9fYml0d2lzZSBfX2JpdHdpc2VfXwotI2Vsc2UKLSNkZWZpbmUgX19iaXR3aXNlCi0jZW5kaWYKLQotI2RlZmluZSBfX3U2NCBndWludDY0Ci0jZGVmaW5lIF9fdTMyIGd1aW50MzIKLSNkZWZpbmUgX191MTYgZ3VpbnQxNgotI2RlZmluZSBfX3U4IGd1aW50OAotI2RlZmluZSBfX3M2NCBnaW50NjQKLSNkZWZpbmUgX19zMzIgZ2ludDMyCi0jZGVmaW5lIF9fbGUzMiBndWludDMyIF9fYml0d2lzZQotCi0jZGVmaW5lIF9fdXNlcgotCi0jZW5kaWYgLyogX19UWVBFU19DT01QQVRfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9leHQvdjRsMi1jb21tb24uaCBiL3N5cy92NGwyL2V4dC92NGwyLWNvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmRhNTkzLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2V4dC92NGwyLWNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvbGludXgvdjRsMi1jb21tb24uaAotICoKLSAqIENvbW1vbiBWNEwyIGFuZCBWNEwyIHN1YmRldiBkZWZpbml0aW9ucy4KLSAqCi0gKiBVc2VycyBhcmUgYWR2aXNlZCB0byAjaW5jbHVkZSB0aGlzIGZpbGUgZWl0aGVyIHRocm91Z2ggdmlkZW9kZXYyLmgKLSAqIChWNEwyKSBvciB0aHJvdWdoIHY0bDItc3ViZGV2LmggKFY0TDIgc3ViZGV2KSByYXRoZXIgdGhhbiB0byByZWZlcgotICogdG8gdGhpcyBmaWxlIGRpcmVjdGx5LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29udGFjdDogU2FrYXJpIEFpbHVzIDxzYWthcmkuYWlsdXNAaWtpLmZpPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1Y0TDJfQ09NTU9OX18KLSNkZWZpbmUgX19WNEwyX0NPTU1PTl9fCi0KLSNpbmNsdWRlICJleHQvdHlwZXMtY29tcGF0LmgiCi0KLS8qCi0gKgotICogU2VsZWN0aW9uIGludGVyZmFjZSBkZWZpbml0aW9ucwotICoKLSAqLwotCi0vKiBDdXJyZW50IGNyb3BwaW5nIGFyZWEgKi8KLSNkZWZpbmUgVjRMMl9TRUxfVEdUX0NST1AJCTB4MDAwMAotLyogRGVmYXVsdCBjcm9wcGluZyBhcmVhICovCi0jZGVmaW5lIFY0TDJfU0VMX1RHVF9DUk9QX0RFRkFVTFQJMHgwMDAxCi0vKiBDcm9wcGluZyBib3VuZHMgKi8KLSNkZWZpbmUgVjRMMl9TRUxfVEdUX0NST1BfQk9VTkRTCTB4MDAwMgotLyogTmF0aXZlIGZyYW1lIHNpemUgKi8KLSNkZWZpbmUgVjRMMl9TRUxfVEdUX05BVElWRV9TSVpFCTB4MDAwMwotLyogQ3VycmVudCBjb21wb3NpbmcgYXJlYSAqLwotI2RlZmluZSBWNEwyX1NFTF9UR1RfQ09NUE9TRQkJMHgwMTAwCi0vKiBEZWZhdWx0IGNvbXBvc2luZyBhcmVhICovCi0jZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFX0RFRkFVTFQJMHgwMTAxCi0vKiBDb21wb3NpbmcgYm91bmRzICovCi0jZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFX0JPVU5EUwkweDAxMDIKLS8qIEN1cnJlbnQgY29tcG9zaW5nIGFyZWEgcGx1cyBhbGwgcGFkZGluZyBwaXhlbHMgKi8KLSNkZWZpbmUgVjRMMl9TRUxfVEdUX0NPTVBPU0VfUEFEREVECTB4MDEwMwotCi0vKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IHRhcmdldCBkZWZpbml0aW9ucyAtLS0gdG8gYmUgcmVtb3ZlZC4gKi8KLSNkZWZpbmUgVjRMMl9TRUxfVEdUX0NST1BfQUNUSVZFCVY0TDJfU0VMX1RHVF9DUk9QCi0jZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFX0FDVElWRQlWNEwyX1NFTF9UR1RfQ09NUE9TRQotI2RlZmluZSBWNEwyX1NVQkRFVl9TRUxfVEdUX0NST1BfQUNUVUFMCVY0TDJfU0VMX1RHVF9DUk9QCi0jZGVmaW5lIFY0TDJfU1VCREVWX1NFTF9UR1RfQ09NUE9TRV9BQ1RVQUwgVjRMMl9TRUxfVEdUX0NPTVBPU0UKLSNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX1RHVF9DUk9QX0JPVU5EUwlWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFMKLSNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX1RHVF9DT01QT1NFX0JPVU5EUyBWNEwyX1NFTF9UR1RfQ09NUE9TRV9CT1VORFMKLQotLyogU2VsZWN0aW9uIGZsYWdzICovCi0jZGVmaW5lIFY0TDJfU0VMX0ZMQUdfR0UJCSgxIDw8IDApCi0jZGVmaW5lIFY0TDJfU0VMX0ZMQUdfTEUJCSgxIDw8IDEpCi0jZGVmaW5lIFY0TDJfU0VMX0ZMQUdfS0VFUF9DT05GSUcJKDEgPDwgMikKLQotLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBmbGFnIGRlZmluaXRpb25zIC0tLSB0byBiZSByZW1vdmVkLiAqLwotI2RlZmluZSBWNEwyX1NVQkRFVl9TRUxfRkxBR19TSVpFX0dFCVY0TDJfU0VMX0ZMQUdfR0UKLSNkZWZpbmUgVjRMMl9TVUJERVZfU0VMX0ZMQUdfU0laRV9MRQlWNEwyX1NFTF9GTEFHX0xFCi0jZGVmaW5lIFY0TDJfU1VCREVWX1NFTF9GTEFHX0tFRVBfQ09ORklHIFY0TDJfU0VMX0ZMQUdfS0VFUF9DT05GSUcKLQotc3RydWN0IHY0bDJfZWRpZCB7Ci0JX191MzIgcGFkOwotCV9fdTMyIHN0YXJ0X2Jsb2NrOwotCV9fdTMyIGJsb2NrczsKLQlfX3UzMiByZXNlcnZlZFs1XTsKLQlfX3U4ICAqZWRpZDsKLX07Ci0KLSNlbmRpZiAvKiBfX1Y0TDJfQ09NTU9OX18gKi8KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2V4dC92NGwyLWNvbnRyb2xzLmggYi9zeXMvdjRsMi9leHQvdjRsMi1jb250cm9scy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjZlMTA4Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2V4dC92NGwyLWNvbnRyb2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NTkgKzAsMCBAQAotLyoKLSAqICBWaWRlbyBmb3IgTGludXggVHdvIGNvbnRyb2xzIGhlYWRlciBmaWxlCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIHRoZSBjb250cmlidXRvcnMKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHJlZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogIEJTRCBsaWNlbnNlIGFzIHN0YXRlZCBiZWxvdzoKLSAqCi0gKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiAgYXJlIG1ldDoKLSAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgICBkaXN0cmlidXRpb24uCi0gKiAgMy4gVGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotICogICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgotICogICAgIHBlcm1pc3Npb24uCi0gKgotICogIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiAgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKLSAqICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotICogIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBUaGUgY29udGVudHMgb2YgdGhpcyBoZWFkZXIgd2FzIHNwbGl0IG9mZiBmcm9tIHZpZGVvZGV2Mi5oLiBBbGwgY29udHJvbAotICogIGRlZmluaXRpb25zIHNob3VsZCBiZSBhZGRlZCB0byB0aGlzIGhlYWRlciwgd2hpY2ggaXMgaW5jbHVkZWQgYnkKLSAqICB2aWRlb2RldjIuaC4KLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfVjRMMl9DT05UUk9MU19ICi0jZGVmaW5lIF9fTElOVVhfVjRMMl9DT05UUk9MU19ICi0KLS8qIENvbnRyb2wgY2xhc3NlcyAqLwotI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfVVNFUgkJMHgwMDk4MDAwMAkvKiBPbGQtc3R5bGUgJ3VzZXInIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHCQkweDAwOTkwMDAwCS8qIE1QRUctY29tcHJlc3Npb24gY29udHJvbHMgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0NBTUVSQQkJMHgwMDlhMDAwMAkvKiBDYW1lcmEgY2xhc3MgY29udHJvbHMgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0ZNX1RYCQkweDAwOWIwMDAwCS8qIEZNIE1vZHVsYXRvciBjb250cm9scyAqLwotI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfRkxBU0gJCTB4MDA5YzAwMDAJLyogQ2FtZXJhIGZsYXNoIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19KUEVHCQkweDAwOWQwMDAwCS8qIEpQRUctY29tcHJlc3Npb24gY29udHJvbHMgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1NPVVJDRQkweDAwOWUwMDAwCS8qIEltYWdlIHNvdXJjZSBjb250cm9scyAqLwotI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfSU1BR0VfUFJPQwkweDAwOWYwMDAwCS8qIEltYWdlIHByb2Nlc3NpbmcgY29udHJvbHMgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0RWCQkweDAwYTAwMDAwCS8qIERpZ2l0YWwgVmlkZW8gY29udHJvbHMgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0ZNX1JYCQkweDAwYTEwMDAwCS8qIEZNIFJlY2VpdmVyIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19SRl9UVU5FUgkweDAwYTIwMDAwCS8qIFJGIHR1bmVyIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19ERVRFQ1QJCTB4MDBhMzAwMDAJLyogRGV0ZWN0aW9uIGNvbnRyb2xzICovCi0KLS8qIFVzZXItY2xhc3MgY29udHJvbCBJRHMgKi8KLQotI2RlZmluZSBWNEwyX0NJRF9CQVNFCQkJKFY0TDJfQ1RSTF9DTEFTU19VU0VSIHwgMHg5MDApCi0jZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQkFTRSAJCVY0TDJfQ0lEX0JBU0UKLSNkZWZpbmUgVjRMMl9DSURfVVNFUl9DTEFTUyAJCShWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDEpCi0jZGVmaW5lIFY0TDJfQ0lEX0JSSUdIVE5FU1MJCShWNEwyX0NJRF9CQVNFKzApCi0jZGVmaW5lIFY0TDJfQ0lEX0NPTlRSQVNUCQkoVjRMMl9DSURfQkFTRSsxKQotI2RlZmluZSBWNEwyX0NJRF9TQVRVUkFUSU9OCQkoVjRMMl9DSURfQkFTRSsyKQotI2RlZmluZSBWNEwyX0NJRF9IVUUJCQkoVjRMMl9DSURfQkFTRSszKQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19WT0xVTUUJCShWNEwyX0NJRF9CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UJCShWNEwyX0NJRF9CQVNFKzYpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBU1MJCShWNEwyX0NJRF9CQVNFKzcpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1RSRUJMRQkJKFY0TDJfQ0lEX0JBU0UrOCkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fTVVURQkJKFY0TDJfQ0lEX0JBU0UrOSkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fTE9VRE5FU1MJCShWNEwyX0NJRF9CQVNFKzEwKQotI2RlZmluZSBWNEwyX0NJRF9CTEFDS19MRVZFTAkJKFY0TDJfQ0lEX0JBU0UrMTEpIC8qIERlcHJlY2F0ZWQgKi8KLSNkZWZpbmUgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFCShWNEwyX0NJRF9CQVNFKzEyKQotI2RlZmluZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFCShWNEwyX0NJRF9CQVNFKzEzKQotI2RlZmluZSBWNEwyX0NJRF9SRURfQkFMQU5DRQkJKFY0TDJfQ0lEX0JBU0UrMTQpCi0jZGVmaW5lIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRQkJKFY0TDJfQ0lEX0JBU0UrMTUpCi0jZGVmaW5lIFY0TDJfQ0lEX0dBTU1BCQkJKFY0TDJfQ0lEX0JBU0UrMTYpCi0jZGVmaW5lIFY0TDJfQ0lEX1dISVRFTkVTUwkJKFY0TDJfQ0lEX0dBTU1BKSAvKiBEZXByZWNhdGVkICovCi0jZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFCQkoVjRMMl9DSURfQkFTRSsxNykKLSNkZWZpbmUgVjRMMl9DSURfQVVUT0dBSU4JCShWNEwyX0NJRF9CQVNFKzE4KQotI2RlZmluZSBWNEwyX0NJRF9HQUlOCQkJKFY0TDJfQ0lEX0JBU0UrMTkpCi0jZGVmaW5lIFY0TDJfQ0lEX0hGTElQCQkJKFY0TDJfQ0lEX0JBU0UrMjApCi0jZGVmaW5lIFY0TDJfQ0lEX1ZGTElQCQkJKFY0TDJfQ0lEX0JBU0UrMjEpCi0KLSNkZWZpbmUgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1kJKFY0TDJfQ0lEX0JBU0UrMjQpCi1lbnVtIHY0bDJfcG93ZXJfbGluZV9mcmVxdWVuY3kgewotCVY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVECT0gMCwKLQlWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaCT0gMSwKLQlWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaCT0gMiwKLQlWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV9BVVRPCT0gMywKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX0hVRV9BVVRPCQkJKFY0TDJfQ0lEX0JBU0UrMjUpCi0jZGVmaW5lIFY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkUJKFY0TDJfQ0lEX0JBU0UrMjYpCi0jZGVmaW5lIFY0TDJfQ0lEX1NIQVJQTkVTUwkJCShWNEwyX0NJRF9CQVNFKzI3KQotI2RlZmluZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OIAkoVjRMMl9DSURfQkFTRSsyOCkKLSNkZWZpbmUgVjRMMl9DSURfQ0hST01BX0FHQyAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI5KQotI2RlZmluZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVIgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzApCi0jZGVmaW5lIFY0TDJfQ0lEX0NPTE9SRlgJCQkoVjRMMl9DSURfQkFTRSszMSkKLWVudW0gdjRsMl9jb2xvcmZ4IHsKLQlWNEwyX0NPTE9SRlhfTk9ORQkJCT0gMCwKLQlWNEwyX0NPTE9SRlhfQlcJCQkJPSAxLAotCVY0TDJfQ09MT1JGWF9TRVBJQQkJCT0gMiwKLQlWNEwyX0NPTE9SRlhfTkVHQVRJVkUJCQk9IDMsCi0JVjRMMl9DT0xPUkZYX0VNQk9TUwkJCT0gNCwKLQlWNEwyX0NPTE9SRlhfU0tFVENICQkJPSA1LAotCVY0TDJfQ09MT1JGWF9TS1lfQkxVRQkJCT0gNiwKLQlWNEwyX0NPTE9SRlhfR1JBU1NfR1JFRU4JCT0gNywKLQlWNEwyX0NPTE9SRlhfU0tJTl9XSElURU4JCT0gOCwKLQlWNEwyX0NPTE9SRlhfVklWSUQJCQk9IDksCi0JVjRMMl9DT0xPUkZYX0FRVUEJCQk9IDEwLAotCVY0TDJfQ09MT1JGWF9BUlRfRlJFRVpFCQkJPSAxMSwKLQlWNEwyX0NPTE9SRlhfU0lMSE9VRVRURQkJCT0gMTIsCi0JVjRMMl9DT0xPUkZYX1NPTEFSSVpBVElPTgkJPSAxMywKLQlWNEwyX0NPTE9SRlhfQU5USVFVRQkJCT0gMTQsCi0JVjRMMl9DT0xPUkZYX1NFVF9DQkNSCQkJPSAxNSwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX0FVVE9CUklHSFRORVNTCQkJKFY0TDJfQ0lEX0JBU0UrMzIpCi0jZGVmaW5lIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVIJCShWNEwyX0NJRF9CQVNFKzMzKQotCi0jZGVmaW5lIFY0TDJfQ0lEX1JPVEFURQkJCQkoVjRMMl9DSURfQkFTRSszNCkKLSNkZWZpbmUgVjRMMl9DSURfQkdfQ09MT1IJCQkoVjRMMl9DSURfQkFTRSszNSkKLQotI2RlZmluZSBWNEwyX0NJRF9DSFJPTUFfR0FJTiAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzYpCi0KLSNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzEJCQkoVjRMMl9DSURfQkFTRSszNykKLSNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzIJCQkoVjRMMl9DSURfQkFTRSszOCkKLQotI2RlZmluZSBWNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfQ0FQVFVSRQkoVjRMMl9DSURfQkFTRSszOSkKLSNkZWZpbmUgVjRMMl9DSURfTUlOX0JVRkZFUlNfRk9SX09VVFBVVAkJKFY0TDJfQ0lEX0JBU0UrNDApCi0KLSNkZWZpbmUgVjRMMl9DSURfQUxQSEFfQ09NUE9ORU5UCQkoVjRMMl9DSURfQkFTRSs0MSkKLSNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWF9DQkNSCQkJKFY0TDJfQ0lEX0JBU0UrNDIpCi0KLS8qIGxhc3QgQ0lEICsgMSAqLwotI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrNDMpCi0KLS8qIFVTRVItY2xhc3MgcHJpdmF0ZSBjb250cm9sIElEcyAqLwotCi0vKiBUaGUgYmFzZSBmb3IgdGhlIG1leWUgZHJpdmVyIGNvbnRyb2xzLiBTZWUgbGludXgvbWV5ZS5oIGZvciB0aGUgbGlzdAotICogb2YgY29udHJvbHMuIFdlIHJlc2VydmUgMTYgY29udHJvbHMgZm9yIHRoaXMgZHJpdmVyLiAqLwotI2RlZmluZSBWNEwyX0NJRF9VU0VSX01FWUVfQkFTRQkJCShWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwMDApCi0KLS8qIFRoZSBiYXNlIGZvciB0aGUgYnR0diBkcml2ZXIgY29udHJvbHMuCi0gKiBXZSByZXNlcnZlIDMyIGNvbnRyb2xzIGZvciB0aGlzIGRyaXZlci4gKi8KLSNkZWZpbmUgVjRMMl9DSURfVVNFUl9CVFRWX0JBU0UJCQkoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMDEwKQotCi0KLS8qIFRoZSBiYXNlIGZvciB0aGUgczIyNTUgZHJpdmVyIGNvbnRyb2xzLgotICogV2UgcmVzZXJ2ZSAxNiBjb250cm9scyBmb3IgdGhpcyBkcml2ZXIuICovCi0jZGVmaW5lIFY0TDJfQ0lEX1VTRVJfUzIyNTVfQkFTRQkJKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTAzMCkKLQotLyogVGhlIGJhc2UgZm9yIHRoZSBzaTQ3NnggZHJpdmVyIGNvbnRyb2xzLiBTZWUgaW5jbHVkZS9tZWRpYS9zaTQ3NnguaCBmb3IgdGhlIGxpc3QKLSAqIG9mIGNvbnRyb2xzLiBUb3RhbCBvZiAxNiBjb250cm9scyBpcyByZXNlcnZlZCBmb3IgdGhpcyBkcml2ZXIgKi8KLSNkZWZpbmUgVjRMMl9DSURfVVNFUl9TSTQ3NlhfQkFTRQkJKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA0MCkKLQotLyogVGhlIGJhc2UgZm9yIHRoZSBUSSBWUEUgZHJpdmVyIGNvbnRyb2xzLiBUb3RhbCBvZiAxNiBjb250cm9scyBpcyByZXNlcnZlZCBmb3IKLSAqIHRoaXMgZHJpdmVyICovCi0jZGVmaW5lIFY0TDJfQ0lEX1VTRVJfVElfVlBFX0JBU0UJCShWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwNTApCi0KLS8qIFRoZSBiYXNlIGZvciB0aGUgc2FhNzEzNCBkcml2ZXIgY29udHJvbHMuCi0gKiBXZSByZXNlcnZlIDE2IGNvbnRyb2xzIGZvciB0aGlzIGRyaXZlci4gKi8KLSNkZWZpbmUgVjRMMl9DSURfVVNFUl9TQUE3MTM0X0JBU0UJCShWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwNjApCi0KLS8qIFRoZSBiYXNlIGZvciB0aGUgYWR2NzE4MCBkcml2ZXIgY29udHJvbHMuCi0gKiBXZSByZXNlcnZlIDE2IGNvbnRyb2xzIGZvciB0aGlzIGRyaXZlci4gKi8KLSNkZWZpbmUgVjRMMl9DSURfVVNFUl9BRFY3MTgwX0JBU0UJCShWNEwyX0NJRF9VU0VSX0JBU0UgKyAweDEwNzApCi0KLS8qIE1QRUctY2xhc3MgY29udHJvbCBJRHMgKi8KLS8qIFRoZSBNUEVHIGNvbnRyb2xzIGFyZSBhcHBsaWNhYmxlIHRvIGFsbCBjb2RlYyBjb250cm9scwotICogYW5kIHRoZSAnTVBFRycgcGFydCBvZiB0aGUgZGVmaW5lIGlzIGhpc3RvcmljYWwgKi8KLQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ0xBU1MgCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMSkKLQotLyogIE1QRUcgc3RyZWFtcywgc3BlY2lmaWMgdG8gbXVsdGlwbGV4ZWQgc3RyZWFtcyAqLwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSswKQotZW51bSB2NGwyX21wZWdfc3RyZWFtX3R5cGUgewotCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUyAgID0gMCwgLyogTVBFRy0yIHByb2dyYW0gc3RyZWFtICovCi0JVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTICAgPSAxLCAvKiBNUEVHLTIgdHJhbnNwb3J0IHN0cmVhbSAqLwotCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9TUyAgID0gMiwgLyogTVBFRy0xIHN5c3RlbSBzdHJlYW0gKi8KLQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfRFZEICA9IDMsIC8qIE1QRUctMiBEVkQtY29tcGF0aWJsZSBzdHJlYW0gKi8KLQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfVkNEICA9IDQsIC8qIE1QRUctMSBWQ0QtY29tcGF0aWJsZSBzdHJlYW0gKi8KLQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCA9IDUsIC8qIE1QRUctMiBTVkNELWNvbXBhdGlibGUgc3RyZWFtICovCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU8gCQkoVjRMMl9DSURfTVBFR19CQVNFKzIpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMykKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUiAJCShWNEwyX0NJRF9NUEVHX0JBU0UrNCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPIAkoVjRMMl9DSURfTVBFR19CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTyAJKFY0TDJfQ0lEX01QRUdfQkFTRSs2KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSs3KQotZW51bSB2NGwyX21wZWdfc3RyZWFtX3ZiaV9mbXQgewotCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FID0gMCwgIC8qIE5vIFZCSSBpbiB0aGUgTVBFRyBzdHJlYW0gKi8KLQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViA9IDEsICAvKiBWQkkgaW4gcHJpdmF0ZSBwYWNrZXRzLCBJVlRWIGZvcm1hdCAqLwotfTsKLQotLyogIE1QRUcgYXVkaW8gY29udHJvbHMgc3BlY2lmaWMgdG8gbXVsdGlwbGV4ZWQgc3RyZWFtcyAgKi8KLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVRIAkoVjRMMl9DSURfTVBFR19CQVNFKzEwMCkKLWVudW0gdjRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXEgewotCVY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwID0gMCwKLQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCA9IDEsCi0JVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAgPSAyLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTAxKQotZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgewotCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xID0gMCwKLQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiA9IDEsCi0JVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzMgPSAyLAotCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMgICAgID0gMywKLQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzICAgICA9IDQsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKLWVudW0gdjRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGUgewotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySyAgPSAwLAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzY0SyAgPSAxLAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzk2SyAgPSAyLAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzEyOEsgPSAzLAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE2MEsgPSA0LAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5MksgPSA1LAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI1NksgPSA3LAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI4OEsgPSA4LAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMyMEsgPSA5LAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM1MksgPSAxMCwKLQlWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zODRLID0gMTEsCi0JVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDE2SyA9IDEyLAotCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQ0OEsgPSAxMywKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTAzKQotZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSB7Ci0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzJLICA9IDAsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLICA9IDEsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNTZLICA9IDIsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNjRLICA9IDMsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLICA9IDQsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfOTZLICA9IDUsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTEySyA9IDYsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTI4SyA9IDcsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSyA9IDgsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTkySyA9IDksCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjI0SyA9IDEwLAotCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPSAxMSwKLQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMjBLID0gMTIsCi0JVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SyA9IDEzLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDQpCi1lbnVtIHY0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlIHsKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMksgID0gMCwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80MEsgID0gMSwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEsgID0gMiwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV81NksgID0gMywKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV82NEsgID0gNCwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEsgID0gNSwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV85NksgID0gNiwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xMTJLID0gNywKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xMjhLID0gOCwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xNjBLID0gOSwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8xOTJLID0gMTAsCi0JVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjI0SyA9IDExLAotCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzI1NksgPSAxMiwKLQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMjBLID0gMTMsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwNSkKLWVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGUgewotCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyAgICAgICA9IDAsCi0JVjRMMl9NUEVHX0FVRElPX01PREVfSk9JTlRfU1RFUkVPID0gMSwKLQlWNEwyX01QRUdfQVVESU9fTU9ERV9EVUFMICAgICAgICAgPSAyLAotCVY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gICAgICAgICA9IDMsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OIAkoVjRMMl9DSURfTVBFR19CQVNFKzEwNikKLWVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uIHsKLQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCAgPSAwLAotCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF84ICA9IDEsCi0JVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzEyID0gMiwKLQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYgPSAzLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTA3KQotZW51bSB2NGwyX21wZWdfYXVkaW9fZW1waGFzaXMgewotCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FICAgICAgICAgPSAwLAotCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVMgPSAxLAotCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcgICAgPSAyLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19DUkMgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwOCkKLWVudW0gdjRsMl9tcGVnX2F1ZGlvX2NyYyB7Ci0JVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FICA9IDAsCi0JVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiA9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01VVEUgCQkoVjRMMl9DSURfTVBFR19CQVNFKzEwOSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUJCShWNEwyX0NJRF9NUEVHX0JBU0UrMTExKQotZW51bSB2NGwyX21wZWdfYXVkaW9fYWMzX2JpdHJhdGUgewotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMksgID0gMCwKLQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDBLICA9IDEsCi0JVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SyAgPSAyLAotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81NksgID0gMywKLQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjRLICA9IDQsCi0JVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzgwSyAgPSA1LAotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV85NksgID0gNiwKLQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTEySyA9IDcsCi0JVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzEyOEsgPSA4LAotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xNjBLID0gOSwKLQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTkySyA9IDEwLAotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yMjRLID0gMTEsCi0JVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgPSAxMiwKLQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzIwSyA9IDEzLAotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLID0gMTQsCi0JVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ0OEsgPSAxNSwKLQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTEySyA9IDE2LAotCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81NzZLID0gMTcsCi0JVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0MEsgPSAxOCwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fREVDX1BMQVlCQUNLCShWNEwyX0NJRF9NUEVHX0JBU0UrMTEyKQotZW51bSB2NGwyX21wZWdfYXVkaW9fZGVjX3BsYXliYWNrIHsKLQlWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX0FVVE8JICAgID0gMCwKLQlWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX1NURVJFTwkgICAgPSAxLAotCVY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfTEVGVAkgICAgPSAyLAotCVY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfUklHSFQJICAgID0gMywKLQlWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX01PTk8JICAgID0gNCwKLQlWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX1NXQVBQRURfU1RFUkVPID0gNSwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fREVDX01VTFRJTElOR1VBTF9QTEFZQkFDSyAoVjRMMl9DSURfTVBFR19CQVNFKzExMykKLQotLyogIE1QRUcgdmlkZW8gY29udHJvbHMgc3BlY2lmaWMgdG8gbXVsdGlwbGV4ZWQgc3RyZWFtcyAqLwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDApCi1lbnVtIHY0bDJfbXBlZ192aWRlb19lbmNvZGluZyB7Ci0JVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSAgICAgPSAwLAotCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgICAgID0gMSwKLQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQyA9IDIsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjAxKQotZW51bSB2NGwyX21wZWdfdmlkZW9fYXNwZWN0IHsKLQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSAgICAgPSAwLAotCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzICAgICA9IDEsCi0JVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5ICAgID0gMiwKLQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAgPSAzLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUyAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjAyKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDMpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkUgCShWNEwyX0NJRF9NUEVHX0JBU0UrMjA0KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFIAkoVjRMMl9DSURfTVBFR19CQVNFKzIwNikKLWVudW0gdjRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZSB7Ci0JVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIgPSAwLAotCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSID0gMSwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjA3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSyAJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDgpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwOSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFIAkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURV9ZVVYgCQkoVjRMMl9DSURfTVBFR19CQVNFKzIxMSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX1NMSUNFX0lOVEVSRkFDRQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTIpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9NUEVHNF9ERUJMT0NLX0ZJTFRFUgkoVjRMMl9DSURfTVBFR19CQVNFKzIxMykKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19DWUNMSUNfSU5UUkFfUkVGUkVTSF9NQgkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTQpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSEVBREVSX01PREUJCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTYpCi1lbnVtIHY0bDJfbXBlZ192aWRlb19oZWFkZXJfbW9kZSB7Ci0JVjRMMl9NUEVHX1ZJREVPX0hFQURFUl9NT0RFX1NFUEFSQVRFCQkJPSAwLAotCVY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9KT0lORURfV0lUSF8xU1RfRlJBTUUJPSAxLAotCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01BWF9SRUZfUElDCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTcpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTUJfUkNfRU5BQkxFCQkoVjRMMl9DSURfTVBFR19CQVNFKzIxOCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVMJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTkpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX01CCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyMCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyMSkKLWVudW0gdjRsMl9tcGVnX3ZpZGVvX211bHRpX3NsaWNlX21vZGUgewotCVY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX1NJTkdMRQkJPSAwLAotCVY0TDJfTVBFR19WSURFT19NVUxUSV9TSUNFX01PREVfTUFYX01CCQk9IDEsCi0JVjRMMl9NUEVHX1ZJREVPX01VTFRJX1NJQ0VfTU9ERV9NQVhfQllURVMJPSAyLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WQlZfU0laRQkJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjIyKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0RFQ19QVFMJCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyMykKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19ERUNfRlJBTUUJCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyNCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WQlZfREVMQVkJCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyNSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19SRVBFQVRfU0VRX0hFQURFUgkJKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjYpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVZfSF9TRUFSQ0hfUkFOR0UJCShWNEwyX0NJRF9NUEVHX0JBU0UrMjI3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01WX1ZfU0VBUkNIX1JBTkdFCQkoVjRMMl9DSURfTVBFR19CQVNFKzIyOCkKLQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfSV9GUkFNRV9RUAkJKFY0TDJfQ0lEX01QRUdfQkFTRSszMDApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19QX0ZSQU1FX1FQCQkoVjRMMl9DSURfTVBFR19CQVNFKzMwMSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX0JfRlJBTUVfUVAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzAyKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfTUlOX1FQCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszMDMpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19NQVhfUVAJCQkoVjRMMl9DSURfTVBFR19CQVNFKzMwNCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfRlJBTUVfUVAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzUwKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUF9GUkFNRV9RUAkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9CX0ZSQU1FX1FQCQkoVjRMMl9DSURfTVBFR19CQVNFKzM1MikKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X01JTl9RUAkJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzUzKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUFYX1FQCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTQpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNCQkoVjRMMl9DSURfTVBFR19CQVNFKzM1NSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0NQQl9TSVpFCQkoVjRMMl9DSURfTVBFR19CQVNFKzM1NikKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTcpCi1lbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2VudHJvcHlfbW9kZSB7Ci0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFX0NBVkxDCT0gMCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREVfQ0FCQUMJPSAxLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfUEVSSU9ECQkoVjRMMl9DSURfTVBFR19CQVNFKzM1OCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xFVkVMCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNTkpCi1lbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2xldmVsIHsKLQlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzAJPSAwLAotCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFCCT0gMSwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzEJPSAyLAotCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMgk9IDMsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8zCT0gNCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzAJPSA1LAotCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMQk9IDYsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8yCT0gNywKLQlWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8zXzAJPSA4LAotCVY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMQk9IDksCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18yCT0gMTAsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wCT0gMTEsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8xCT0gMTIsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8yCT0gMTMsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8wCT0gMTQsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8xCT0gMTUsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQUxQSEEJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9CRVRBCShWNEwyX0NJRF9NUEVHX0JBU0UrMzYxKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERQkoVjRMMl9DSURfTVBFR19CQVNFKzM2MikKLWVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfbG9vcF9maWx0ZXJfbW9kZSB7Ci0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfTU9ERV9FTkFCTEVECQkJCT0gMCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVECQkJCT0gMSwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEX0FUX1NMSUNFX0JPVU5EQVJZCT0gMiwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QUk9GSUxFCQkoVjRMMl9DSURfTVBFR19CQVNFKzM2MykKLWVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfcHJvZmlsZSB7Ci0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9CQVNFTElORQkJCT0gMCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0NPTlNUUkFJTkVEX0JBU0VMSU5FCT0gMSwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX01BSU4JCQk9IDIsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9FWFRFTkRFRAkJCT0gMywKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0gJCQk9IDQsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzEwCQkJPSA1LAotCVY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjIJCQk9IDYsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9QUkVESUNUSVZFCT0gNywKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTBfSU5UUkEJCT0gOCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDIyX0lOVFJBCQk9IDksCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9JTlRSQQkJPSAxMCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0NBVkxDXzQ0NF9JTlRSQQkJPSAxMSwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0JBU0VMSU5FCQk9IDEyLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfSElHSAkJPSAxMywKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0hfSU5UUkEJPSAxNCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NURVJFT19ISUdICQk9IDE1LAotCVY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTVVMVElWSUVXX0hJR0gJCT0gMTYsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfSEVJR0hUCShWNEwyX0NJRF9NUEVHX0JBU0UrMzY0KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfV0lEVEgJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjUpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjYpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQwkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNjcpCi1lbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Z1aV9zYXJfaWRjIHsKLQlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ19VTlNQRUNJRklFRAk9IDAsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMXgxCQk9IDEsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTJ4MTEJCT0gMiwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMHgxMQkJPSAzLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2eDExCQk9IDQsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNDB4MzMJCT0gNSwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18yNHgxMQkJPSA2LAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzIweDExCQk9IDcsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMzJ4MTEJCT0gOCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ184MHgzMwkJPSA5LAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE4eDExCQk9IDEwLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE1eDExCQk9IDExLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzY0eDMzCQk9IDEyLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2MHg5OQkJPSAxMywKLQlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180eDMJCT0gMTQsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfM3gyCQk9IDE1LAotCVY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzJ4MQkJPSAxNiwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ19FWFRFTkRFRAk9IDE3LAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUkFNRV9QQUNLSU5HCQkoVjRMMl9DSURfTVBFR19CQVNFKzM2OCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUF9DVVJSRU5UX0ZSQU1FXzAJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzY5KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEUJKFY0TDJfQ0lEX01QRUdfQkFTRSszNzApCi1lbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3NlaV9mcF9hcnJhbmdlbWVudF90eXBlIHsKLQlWNEwyX01QRUdfVklERU9fSDI2NF9TRUlfRlBfQVJSQU5HRU1FTlRfVFlQRV9DSEVDS0VSQk9BUkQJPSAwLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX0NPTFVNTgkJPSAxLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX1JPVwkJPSAyLAotCVY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX1NJREVfQllfU0lERQk9IDMsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfVE9QX0JPVFRPTQkJPSA0LAotCVY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX1RFTVBPUkFMCQk9IDUsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNzEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEUJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzcyKQotZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9mbW9fbWFwX3R5cGUgewotCVY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9JTlRFUkxFQVZFRF9TTElDRVMJCT0gMCwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfU0NBVFRFUkVEX1NMSUNFUwkJPSAxLAotCVY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9GT1JFR1JPVU5EX1dJVEhfTEVGVF9PVkVSCT0gMiwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfQk9YX09VVAkJCT0gMywKLQlWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfUkFTVEVSX1NDQU4JCQk9IDQsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX1dJUEVfU0NBTgkJCT0gNSwKLQlWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfRVhQTElDSVQJCQk9IDYsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX1NMSUNFX0dST1VQCShWNEwyX0NJRF9NUEVHX0JBU0UrMzczKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX0NIQU5HRV9ESVJFQ1RJT04JKFY0TDJfQ0lEX01QRUdfQkFTRSszNzQpCi1lbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2Ztb19jaGFuZ2VfZGlyIHsKLQlWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fQ0hBTkdFX0RJUl9SSUdIVAk9IDAsCi0JVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX0NIQU5HRV9ESVJfTEVGVAk9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX0NIQU5HRV9SQVRFCShWNEwyX0NJRF9NUEVHX0JBU0UrMzc1KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX1JVTl9MRU5HVEgJCShWNEwyX0NJRF9NUEVHX0JBU0UrMzc2KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQVNPCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSszNzcpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9BU09fU0xJQ0VfT1JERVIJKFY0TDJfQ0lEX01QRUdfQkFTRSszNzgpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HCQkoVjRMMl9DSURfTVBFR19CQVNFKzM3OSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfVFlQRQkoVjRMMl9DSURfTVBFR19CQVNFKzM4MCkKLWVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfaGllcmFyY2hpY2FsX2NvZGluZ190eXBlIHsKLQlWNEwyX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HX0IJPSAwLAotCVY0TDJfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfUAk9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSElFUkFSQ0hJQ0FMX0NPRElOR19MQVlFUgkoVjRMMl9DSURfTVBFR19CQVNFKzM4MSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfTEFZRVJfUVAJKFY0TDJfQ0lEX01QRUdfQkFTRSszODIpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfSV9GUkFNRV9RUAkoVjRMMl9DSURfTVBFR19CQVNFKzQwMCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QX0ZSQU1FX1FQCShWNEwyX0NJRF9NUEVHX0JBU0UrNDAxKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0JfRlJBTUVfUVAJKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDIpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUlOX1FQCShWNEwyX0NJRF9NUEVHX0JBU0UrNDAzKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01BWF9RUAkoVjRMMl9DSURfTVBFR19CQVNFKzQwNCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9MRVZFTAkJKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDUpCi1lbnVtIHY0bDJfbXBlZ192aWRlb19tcGVnNF9sZXZlbCB7Ci0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzAJPSAwLAotCVY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8wQgk9IDEsCi0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzEJPSAyLAotCVY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8yCT0gMywKLQlWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMwk9IDQsCi0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzNCCT0gNSwKLQlWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfNAk9IDYsCi0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzUJPSA3LAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFCShWNEwyX0NJRF9NUEVHX0JBU0UrNDA2KQotZW51bSB2NGwyX21wZWdfdmlkZW9fbXBlZzRfcHJvZmlsZSB7Ci0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfU0lNUExFCQkJCT0gMCwKLQlWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9BRFZBTkNFRF9TSU1QTEUJCQk9IDEsCi0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQ09SRQkJCQk9IDIsCi0JVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfU0lNUExFX1NDQUxBQkxFCQkJPSAzLAotCVY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX0NPRElOR19FRkZJQ0lFTkNZCT0gNCwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUVBFTAkJKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDcpCi0KLS8qICBDb250cm9sIElEcyBmb3IgVlA4IHN0cmVhbXMKLSAqICBBbHRob3VnaCBWUDggaXMgbm90IHBhcnQgb2YgTVBFRyB3ZSBhZGQgdGhlc2UgY29udHJvbHMgdG8gdGhlIE1QRUcgY2xhc3MKLSAqICBhcyB0aGF0IGNsYXNzIGlzIGFscmVhZHkgaGFuZGxpbmcgb3RoZXIgdmlkZW8gY29tcHJlc3Npb24gc3RhbmRhcmRzCi0gKi8KLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfTlVNX1BBUlRJVElPTlMJCShWNEwyX0NJRF9NUEVHX0JBU0UrNTAwKQotZW51bSB2NGwyX3ZwOF9udW1fcGFydGl0aW9ucyB7Ci0JVjRMMl9DSURfTVBFR19WSURFT19WUFhfMV9QQVJUSVRJT04JPSAwLAotCVY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzJfUEFSVElUSU9OUwk9IDEsCi0JVjRMMl9DSURfTVBFR19WSURFT19WUFhfNF9QQVJUSVRJT05TCT0gMiwKLQlWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF84X1BBUlRJVElPTlMJPSAzLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfSU1EX0RJU0FCTEVfNFg0CQkoVjRMMl9DSURfTVBFR19CQVNFKzUwMSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfTlVNX1JFRl9GUkFNRVMJCShWNEwyX0NJRF9NUEVHX0JBU0UrNTAyKQotZW51bSB2NGwyX3ZwOF9udW1fcmVmX2ZyYW1lcyB7Ci0JVjRMMl9DSURfTVBFR19WSURFT19WUFhfMV9SRUZfRlJBTUUJPSAwLAotCVY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzJfUkVGX0ZSQU1FCT0gMSwKLQlWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF8zX1JFRl9GUkFNRQk9IDIsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9GSUxURVJfTEVWRUwJCShWNEwyX0NJRF9NUEVHX0JBU0UrNTAzKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9GSUxURVJfU0hBUlBORVNTCShWNEwyX0NJRF9NUEVHX0JBU0UrNTA0KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9HT0xERU5fRlJBTUVfUkVGX1BFUklPRAkoVjRMMl9DSURfTVBFR19CQVNFKzUwNSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1NFTAkoVjRMMl9DSURfTVBFR19CQVNFKzUwNikKLWVudW0gdjRsMl92cDhfZ29sZGVuX2ZyYW1lX3NlbCB7Ci0JVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1VTRV9QUkVWCQk9IDAsCi0JVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1VTRV9SRUZfUEVSSU9ECT0gMSwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX01JTl9RUAkJCShWNEwyX0NJRF9NUEVHX0JBU0UrNTA3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9NQVhfUVAJCQkoVjRMMl9DSURfTVBFR19CQVNFKzUwOCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfSV9GUkFNRV9RUAkJKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDkpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX1BfRlJBTUVfUVAJCShWNEwyX0NJRF9NUEVHX0JBU0UrNTEwKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9QUk9GSUxFCQkJKFY0TDJfQ0lEX01QRUdfQkFTRSs1MTEpCi0KLS8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIHNwZWNpZmljIHRvIHRoZSBDWDIzNDF4IGRyaXZlciBhcyBkZWZpbmVkIGJ5IFY0TDIgKi8KLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UgCQkJCShWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4MTAwMCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQotZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlIHsKLQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCi0JVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPICAgPSAxLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSIAkJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsyKQotZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgewotCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgICAgICAgICAgICAgICAgICA9IDAsCi0JVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiAgICAgICAgICAgICAgID0gMSwKLQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCAgICAgICAgICAgICAgPSAyLAotCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9IVl9TRVBBUkFCTEUgICAgICA9IDMsCi0JVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX1NZTV9OT05fU0VQQVJBQkxFID0gNCwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRSAJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCi1lbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKLQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgICAgPSAwLAotCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiA9IDEsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREUgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs0KQotZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSB7Ci0JVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKLQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9BVVRPICAgPSAxLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiAJCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs1KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFIAkJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzYpCi1lbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSB7Ci0JVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRiAgICAgID0gMCwKLQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SICAgICAgPSAxLAotCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9WRVJUICAgICA9IDIsCi0JVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0hPUl9WRVJUID0gMywKLQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfRElBRyAgICAgPSA0LAotfTsKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAJKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzgpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00JKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzkpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFMgCShWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxMSkKLQotLyogIE1QRUctY2xhc3MgY29udHJvbCBJRHMgc3BlY2lmaWMgdG8gdGhlIFNhbXN1bmcgTUZDIDUuMSBkcml2ZXIgYXMgZGVmaW5lZCBieSBWNEwyICovCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRQkJCQkoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDExMDApCi0KLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSswKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZX0VOQUJMRQkoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRlJBTUVfU0tJUF9NT0RFCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSsyKQotZW51bSB2NGwyX21wZWdfbWZjNTFfdmlkZW9fZnJhbWVfc2tpcF9tb2RlIHsKLQlWNEwyX01QRUdfTUZDNTFfVklERU9fRlJBTUVfU0tJUF9NT0RFX0RJU0FCTEVECQk9IDAsCi0JVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9MRVZFTF9MSU1JVAk9IDEsCi0JVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9CVUZfTElNSVQJCT0gMiwKLX07Ci0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRQkJCShWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMykKLWVudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZvcmNlX2ZyYW1lX3R5cGUgewotCVY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0RJU0FCTEVECQk9IDAsCi0JVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfSV9GUkFNRQkJPSAxLAotCVY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX05PVF9DT0RFRAk9IDIsCi19OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkcJCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs0KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkdfWVVWCQkJCShWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19GSVhFRF9UQVJHRVRfQklUCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs2KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1JDX1JFQUNUSU9OX0NPRUZGCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs3KQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfQUNUSVZJVFkJCShWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTApCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19EQVJLCQkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MSkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NNT09USAkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MikKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NUQVRJQwkJKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MykKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X05VTV9SRUZfUElDX0ZPUl9QCQkoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzU0KQotCi0KLS8qICBDYW1lcmEgY2xhc3MgY29udHJvbCBJRHMgKi8KLQotI2RlZmluZSBWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSAJKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKLSNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTIAkJKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAxKQotCi0jZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE8JCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMSkKLWVudW0gIHY0bDJfZXhwb3N1cmVfYXV0b190eXBlIHsKLQlWNEwyX0VYUE9TVVJFX0FVVE8gPSAwLAotCVY0TDJfRVhQT1NVUkVfTUFOVUFMID0gMSwKLQlWNEwyX0VYUE9TVVJFX1NIVVRURVJfUFJJT1JJVFkgPSAyLAotCVY0TDJfRVhQT1NVUkVfQVBFUlRVUkVfUFJJT1JJVFkgPSAzCi19OwotI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIpCi0jZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszKQotCi0jZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRUxBVElWRQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs0KQotI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzUpCi0jZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRVNFVAkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs2KQotI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFU0VUCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzcpCi0KLSNkZWZpbmUgVjRMMl9DSURfUEFOX0FCU09MVVRFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzgpCi0jZGVmaW5lIFY0TDJfQ0lEX1RJTFRfQUJTT0xVVEUJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKLQotI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMCkKLSNkZWZpbmUgVjRMMl9DSURfRk9DVVNfUkVMQVRJVkUJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTEpCi0jZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FVVE8JCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTIpCi0KLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9BQlNPTFVURQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMykKLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9SRUxBVElWRQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNCkKLSNkZWZpbmUgVjRMMl9DSURfWk9PTV9DT05USU5VT1VTCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTUpCi0KLSNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWQkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNikKLQotI2RlZmluZSBWNEwyX0NJRF9JUklTX0FCU09MVVRFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE3KQotI2RlZmluZSBWNEwyX0NJRF9JUklTX1JFTEFUSVZFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE4KQotCi0jZGVmaW5lIFY0TDJfQ0lEX0FVVE9fRVhQT1NVUkVfQklBUwkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE5KQotCi0jZGVmaW5lIFY0TDJfQ0lEX0FVVE9fTl9QUkVTRVRfV0hJVEVfQkFMQU5DRQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjApCi1lbnVtIHY0bDJfYXV0b19uX3ByZXNldF93aGl0ZV9iYWxhbmNlIHsKLQlWNEwyX1dISVRFX0JBTEFOQ0VfTUFOVUFMCQk9IDAsCi0JVjRMMl9XSElURV9CQUxBTkNFX0FVVE8JCQk9IDEsCi0JVjRMMl9XSElURV9CQUxBTkNFX0lOQ0FOREVTQ0VOVAkJPSAyLAotCVY0TDJfV0hJVEVfQkFMQU5DRV9GTFVPUkVTQ0VOVAkJPSAzLAotCVY0TDJfV0hJVEVfQkFMQU5DRV9GTFVPUkVTQ0VOVF9ICT0gNCwKLQlWNEwyX1dISVRFX0JBTEFOQ0VfSE9SSVpPTgkJPSA1LAotCVY0TDJfV0hJVEVfQkFMQU5DRV9EQVlMSUdIVAkJPSA2LAotCVY0TDJfV0hJVEVfQkFMQU5DRV9GTEFTSAkJPSA3LAotCVY0TDJfV0hJVEVfQkFMQU5DRV9DTE9VRFkJCT0gOCwKLQlWNEwyX1dISVRFX0JBTEFOQ0VfU0hBREUJCT0gOSwKLX07Ci0KLSNkZWZpbmUgVjRMMl9DSURfV0lERV9EWU5BTUlDX1JBTkdFCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjEpCi0jZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1NUQUJJTElaQVRJT04JCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMikKLQotI2RlZmluZSBWNEwyX0NJRF9JU09fU0VOU0lUSVZJVFkJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMykKLSNkZWZpbmUgVjRMMl9DSURfSVNPX1NFTlNJVElWSVRZX0FVVE8JCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyNCkKLWVudW0gdjRsMl9pc29fc2Vuc2l0aXZpdHlfYXV0b190eXBlIHsKLQlWNEwyX0lTT19TRU5TSVRJVklUWV9NQU5VQUwJCT0gMCwKLQlWNEwyX0lTT19TRU5TSVRJVklUWV9BVVRPCQk9IDEsCi19OwotCi0jZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX01FVEVSSU5HCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjUpCi1lbnVtIHY0bDJfZXhwb3N1cmVfbWV0ZXJpbmcgewotCVY0TDJfRVhQT1NVUkVfTUVURVJJTkdfQVZFUkFHRQkJPSAwLAotCVY0TDJfRVhQT1NVUkVfTUVURVJJTkdfQ0VOVEVSX1dFSUdIVEVECT0gMSwKLQlWNEwyX0VYUE9TVVJFX01FVEVSSU5HX1NQT1QJCT0gMiwKLQlWNEwyX0VYUE9TVVJFX01FVEVSSU5HX01BVFJJWAkJPSAzLAotfTsKLQotI2RlZmluZSBWNEwyX0NJRF9TQ0VORV9NT0RFCQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI2KQotZW51bSB2NGwyX3NjZW5lX21vZGUgewotCVY0TDJfU0NFTkVfTU9ERV9OT05FCQkJPSAwLAotCVY0TDJfU0NFTkVfTU9ERV9CQUNLTElHSFQJCT0gMSwKLQlWNEwyX1NDRU5FX01PREVfQkVBQ0hfU05PVwkJPSAyLAotCVY0TDJfU0NFTkVfTU9ERV9DQU5ETEVfTElHSFQJCT0gMywKLQlWNEwyX1NDRU5FX01PREVfREFXTl9EVVNLCQk9IDQsCi0JVjRMMl9TQ0VORV9NT0RFX0ZBTExfQ09MT1JTCQk9IDUsCi0JVjRMMl9TQ0VORV9NT0RFX0ZJUkVXT1JLUwkJPSA2LAotCVY0TDJfU0NFTkVfTU9ERV9MQU5EU0NBUEUJCT0gNywKLQlWNEwyX1NDRU5FX01PREVfTklHSFQJCQk9IDgsCi0JVjRMMl9TQ0VORV9NT0RFX1BBUlRZX0lORE9PUgkJPSA5LAotCVY0TDJfU0NFTkVfTU9ERV9QT1JUUkFJVAkJPSAxMCwKLQlWNEwyX1NDRU5FX01PREVfU1BPUlRTCQkJPSAxMSwKLQlWNEwyX1NDRU5FX01PREVfU1VOU0VUCQkJPSAxMiwKLQlWNEwyX1NDRU5FX01PREVfVEVYVAkJCT0gMTMsCi19OwotCi0jZGVmaW5lIFY0TDJfQ0lEXzNBX0xPQ0sJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjcpCi0jZGVmaW5lIFY0TDJfTE9DS19FWFBPU1VSRQkJCSgxIDw8IDApCi0jZGVmaW5lIFY0TDJfTE9DS19XSElURV9CQUxBTkNFCQkJKDEgPDwgMSkKLSNkZWZpbmUgVjRMMl9MT0NLX0ZPQ1VTCQkJCSgxIDw8IDIpCi0KLSNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19TVEFSVAkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI4KQotI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1NUT1AJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyOSkKLSNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19TVEFUVVMJCShWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSszMCkKLSNkZWZpbmUgVjRMMl9BVVRPX0ZPQ1VTX1NUQVRVU19JRExFCQkoMCA8PCAwKQotI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX0JVU1kJCSgxIDw8IDApCi0jZGVmaW5lIFY0TDJfQVVUT19GT0NVU19TVEFUVVNfUkVBQ0hFRAkJKDEgPDwgMSkKLSNkZWZpbmUgVjRMMl9BVVRPX0ZPQ1VTX1NUQVRVU19GQUlMRUQJCSgxIDw8IDIpCi0KLSNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19SQU5HRQkJKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMxKQotZW51bSB2NGwyX2F1dG9fZm9jdXNfcmFuZ2UgewotCVY0TDJfQVVUT19GT0NVU19SQU5HRV9BVVRPCQk9IDAsCi0JVjRMMl9BVVRPX0ZPQ1VTX1JBTkdFX05PUk1BTAkJPSAxLAotCVY0TDJfQVVUT19GT0NVU19SQU5HRV9NQUNSTwkJPSAyLAotCVY0TDJfQVVUT19GT0NVU19SQU5HRV9JTkZJTklUWQkJPSAzLAotfTsKLQotI2RlZmluZSBWNEwyX0NJRF9QQU5fU1BFRUQJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMzIpCi0jZGVmaW5lIFY0TDJfQ0lEX1RJTFRfU1BFRUQJCQkoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMzMpCi0KLS8qIEZNIE1vZHVsYXRvciBjbGFzcyBjb250cm9sIElEcyAqLwotCi0jZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UJCShWNEwyX0NUUkxfQ0xBU1NfRk1fVFggfCAweDkwMCkKLSNkZWZpbmUgVjRMMl9DSURfRk1fVFhfQ0xBU1MJCQkoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMSkKLQotI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDEpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9QSQkJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMikKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BUWQkJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMykKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BTX05BTUUJCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDUpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDYpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9NT05PX1NURVJFTwkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA3KQotI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfQVJUSUZJQ0lBTF9IRUFECQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9DT01QUkVTU0VECQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDkpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9EWU5BTUlDX1BUWQkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMCkKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1RSQUZGSUNfQU5OT1VOQ0VNRU5UCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9UUkFGRklDX1BST0dSQU0JCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTIpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9NVVNJQ19TUEVFQ0gJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTMpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9BTFRfRlJFUVNfRU5BQkxFCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTQpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9BTFRfRlJFUVMJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTUpCi0KLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVECQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY0KQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY1KQotI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTgkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY2KQotCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MCkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTgkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MSkKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xECShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODIpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODMpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1JFTEVBU0VfVElNRQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDg0KQotCi0jZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRAkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA5NikKLSNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT04JCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTcpCi0jZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRlJFUVVFTkNZCQkoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk4KQotCi0jZGVmaW5lIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQotZW51bSB2NGwyX3ByZWVtcGhhc2lzIHsKLQlWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVECT0gMCwKLQlWNEwyX1BSRUVNUEhBU0lTXzUwX3VTCQk9IDEsCi0JVjRMMl9QUkVFTVBIQVNJU183NV91UwkJPSAyLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTAkJKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTMpCi0jZGVmaW5lIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1IJCShWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTE0KQotCi0KLS8qIEZsYXNoIGFuZCBwcml2YWN5IChpbmRpY2F0b3IpIGxpZ2h0IGNvbnRyb2xzICovCi0KLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRQkJKFY0TDJfQ1RSTF9DTEFTU19GTEFTSCB8IDB4OTAwKQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DTEFTUwkJCShWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggfCAxKQotCi0jZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0xFRF9NT0RFCQkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxKQotZW51bSB2NGwyX2ZsYXNoX2xlZF9tb2RlIHsKLQlWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkUsCi0JVjRMMl9GTEFTSF9MRURfTU9ERV9GTEFTSCwKLQlWNEwyX0ZMQVNIX0xFRF9NT0RFX1RPUkNILAotfTsKLQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU09VUkNFCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDIpCi1lbnVtIHY0bDJfZmxhc2hfc3Ryb2JlX3NvdXJjZSB7Ci0JVjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX1NPRlRXQVJFLAotCVY0TDJfRkxBU0hfU1RST0JFX1NPVVJDRV9FWFRFUk5BTCwKLX07Ci0KLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFCQkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAzKQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RPUAkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA0KQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU1RBVFVTCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDUpCi0KLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfVElNRU9VVAkJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNikKLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfSU5URU5TSVRZCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDcpCi0jZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1RPUkNIX0lOVEVOU0lUWQkJKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA4KQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9JTkRJQ0FUT1JfSU5URU5TSVRZCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgOSkKLQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9GQVVMVAkJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTApCi0jZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9WT0xUQUdFCQkoMSA8PCAwKQotI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX1RJTUVPVVQJCSgxIDw8IDEpCi0jZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9URU1QRVJBVFVSRQkoMSA8PCAyKQotI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX1NIT1JUX0NJUkNVSVQJCSgxIDw8IDMpCi0jZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9DVVJSRU5UCQkoMSA8PCA0KQotI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX0lORElDQVRPUgkJKDEgPDwgNSkKLSNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9VTkRFUl9WT0xUQUdFCQkoMSA8PCA2KQotI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX0lOUFVUX1ZPTFRBR0UJCSgxIDw8IDcpCi0jZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfTEVEX09WRVJfVEVNUEVSQVRVUkUJKDEgPDwgOCkKLQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DSEFSR0UJCQkoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDExKQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9SRUFEWQkJCShWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTIpCi0KLQotLyogSlBFRy1jbGFzcyBjb250cm9sIElEcyAqLwotCi0jZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRQkJKFY0TDJfQ1RSTF9DTEFTU19KUEVHIHwgMHg5MDApCi0jZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ0xBU1MJCQkoVjRMMl9DVFJMX0NMQVNTX0pQRUcgfCAxKQotCi0jZGVmaW5lCVY0TDJfQ0lEX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HCShWNEwyX0NJRF9KUEVHX0NMQVNTX0JBU0UgKyAxKQotZW51bSB2NGwyX2pwZWdfY2hyb21hX3N1YnNhbXBsaW5nIHsKLQlWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQ0NAk9IDAsCi0JVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MjIJPSAxLAotCVY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDIwCT0gMiwKLQlWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQxMQk9IDMsCi0JVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MTAJPSA0LAotCVY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfR1JBWQk9IDUsCi19OwotI2RlZmluZQlWNEwyX0NJRF9KUEVHX1JFU1RBUlRfSU5URVJWQUwJCShWNEwyX0NJRF9KUEVHX0NMQVNTX0JBU0UgKyAyKQotI2RlZmluZQlWNEwyX0NJRF9KUEVHX0NPTVBSRVNTSU9OX1FVQUxJVFkJKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDMpCi0KLSNkZWZpbmUJVjRMMl9DSURfSlBFR19BQ1RJVkVfTUFSS0VSCQkoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgNCkKLSNkZWZpbmUJVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMAkJKDEgPDwgMCkKLSNkZWZpbmUJVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMQkJKDEgPDwgMSkKLSNkZWZpbmUJVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQ09NCQkoMSA8PCAxNikKLSNkZWZpbmUJVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfRFFUCQkoMSA8PCAxNykKLSNkZWZpbmUJVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfREhUCQkoMSA8PCAxOCkKLQotCi0vKiBJbWFnZSBzb3VyY2UgY29udHJvbHMgKi8KLSNkZWZpbmUgVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UJKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9TT1VSQ0UgfCAweDkwMCkKLSNkZWZpbmUgVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTCQkoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1NPVVJDRSB8IDEpCi0KLSNkZWZpbmUgVjRMMl9DSURfVkJMQU5LCQkJCShWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDEpCi0jZGVmaW5lIFY0TDJfQ0lEX0hCTEFOSwkJCQkoVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKyAyKQotI2RlZmluZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOCQkJKFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFICsgMykKLSNkZWZpbmUgVjRMMl9DSURfVEVTVF9QQVRURVJOX1JFRAkJKFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFICsgNCkKLSNkZWZpbmUgVjRMMl9DSURfVEVTVF9QQVRURVJOX0dSRUVOUgkJKFY0TDJfQ0lEX0lNQUdFX1NPVVJDRV9DTEFTU19CQVNFICsgNSkKLSNkZWZpbmUgVjRMMl9DSURfVEVTVF9QQVRURVJOX0JMVUUJCShWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDYpCi0jZGVmaW5lIFY0TDJfQ0lEX1RFU1RfUEFUVEVSTl9HUkVFTkIJCShWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDcpCi0KLQotLyogSW1hZ2UgcHJvY2Vzc2luZyBjb250cm9scyAqLwotCi0jZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRQkJKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9QUk9DIHwgMHg5MDApCi0jZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1MJCShWNEwyX0NUUkxfQ0xBU1NfSU1BR0VfUFJPQyB8IDEpCi0KLSNkZWZpbmUgVjRMMl9DSURfTElOS19GUkVRCQkJKFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSArIDEpCi0jZGVmaW5lIFY0TDJfQ0lEX1BJWEVMX1JBVEUJCQkoVjRMMl9DSURfSU1BR0VfUFJPQ19DTEFTU19CQVNFICsgMikKLSNkZWZpbmUgVjRMMl9DSURfVEVTVF9QQVRURVJOCQkJKFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSArIDMpCi0KLQotLyogIERWLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLwotI2RlZmluZSBWNEwyX0NJRF9EVl9DTEFTU19CQVNFCQkJKFY0TDJfQ1RSTF9DTEFTU19EViB8IDB4OTAwKQotI2RlZmluZSBWNEwyX0NJRF9EVl9DTEFTUwkJCShWNEwyX0NUUkxfQ0xBU1NfRFYgfCAxKQotCi0jZGVmaW5lCVY0TDJfQ0lEX0RWX1RYX0hPVFBMVUcJCQkoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDEpCi0jZGVmaW5lCVY0TDJfQ0lEX0RWX1RYX1JYU0VOU0UJCQkoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDIpCi0jZGVmaW5lCVY0TDJfQ0lEX0RWX1RYX0VESURfUFJFU0VOVAkJKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyAzKQotI2RlZmluZQlWNEwyX0NJRF9EVl9UWF9NT0RFCQkJKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyA0KQotZW51bSB2NGwyX2R2X3R4X21vZGUgewotCVY0TDJfRFZfVFhfTU9ERV9EVklfRAk9IDAsCi0JVjRMMl9EVl9UWF9NT0RFX0hETUkJPSAxLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfRFZfVFhfUkdCX1JBTkdFCQkoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDUpCi1lbnVtIHY0bDJfZHZfcmdiX3JhbmdlIHsKLQlWNEwyX0RWX1JHQl9SQU5HRV9BVVRPCSAgPSAwLAotCVY0TDJfRFZfUkdCX1JBTkdFX0xJTUlURUQgPSAxLAotCVY0TDJfRFZfUkdCX1JBTkdFX0ZVTEwJICA9IDIsCi19OwotCi0jZGVmaW5lCVY0TDJfQ0lEX0RWX1JYX1BPV0VSX1BSRVNFTlQJCShWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgMTAwKQotI2RlZmluZSBWNEwyX0NJRF9EVl9SWF9SR0JfUkFOR0UJCShWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgMTAxKQotCi0jZGVmaW5lIFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UJCShWNEwyX0NUUkxfQ0xBU1NfRk1fUlggfCAweDkwMCkKLSNkZWZpbmUgVjRMMl9DSURfRk1fUlhfQ0xBU1MJCQkoVjRMMl9DVFJMX0NMQVNTX0ZNX1JYIHwgMSkKLQotI2RlZmluZSBWNEwyX0NJRF9UVU5FX0RFRU1QSEFTSVMJCShWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFICsgMSkKLWVudW0gdjRsMl9kZWVtcGhhc2lzIHsKLQlWNEwyX0RFRU1QSEFTSVNfRElTQUJMRUQJPSBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAotCVY0TDJfREVFTVBIQVNJU181MF91UwkJPSBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTLAotCVY0TDJfREVFTVBIQVNJU183NV91UwkJPSBWNEwyX1BSRUVNUEhBU0lTXzc1X3VTLAotfTsKLQotI2RlZmluZSBWNEwyX0NJRF9SRFNfUkVDRVBUSU9OCQkJKFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKyAyKQotI2RlZmluZSBWNEwyX0NJRF9SRFNfUlhfUFRZCQkJKFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKyAzKQotI2RlZmluZSBWNEwyX0NJRF9SRFNfUlhfUFNfTkFNRQkJCShWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFICsgNCkKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1JYX1JBRElPX1RFWFQJCShWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFICsgNSkKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1JYX1RSQUZGSUNfQU5OT1VOQ0VNRU5UCShWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFICsgNikKLSNkZWZpbmUgVjRMMl9DSURfUkRTX1JYX1RSQUZGSUNfUFJPR1JBTQkJKFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKyA3KQotI2RlZmluZSBWNEwyX0NJRF9SRFNfUlhfTVVTSUNfU1BFRUNICQkoVjRMMl9DSURfRk1fUlhfQ0xBU1NfQkFTRSArIDgpCi0KLSNkZWZpbmUgVjRMMl9DSURfUkZfVFVORVJfQ0xBU1NfQkFTRQkJKFY0TDJfQ1RSTF9DTEFTU19SRl9UVU5FUiB8IDB4OTAwKQotI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9DTEFTUwkJCShWNEwyX0NUUkxfQ0xBU1NfUkZfVFVORVIgfCAxKQotCi0jZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSF9BVVRPCShWNEwyX0NJRF9SRl9UVU5FUl9DTEFTU19CQVNFICsgMTEpCi0jZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSAkJKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyAxMikKLSNkZWZpbmUgVjRMMl9DSURfUkZfVFVORVJfTE5BX0dBSU5fQVVUTwkJKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyA0MSkKLSNkZWZpbmUgVjRMMl9DSURfUkZfVFVORVJfTE5BX0dBSU4JCShWNEwyX0NJRF9SRl9UVU5FUl9DTEFTU19CQVNFICsgNDIpCi0jZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX01JWEVSX0dBSU5fQVVUTwkoVjRMMl9DSURfUkZfVFVORVJfQ0xBU1NfQkFTRSArIDUxKQotI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9NSVhFUl9HQUlOCQkoVjRMMl9DSURfUkZfVFVORVJfQ0xBU1NfQkFTRSArIDUyKQotI2RlZmluZSBWNEwyX0NJRF9SRl9UVU5FUl9JRl9HQUlOX0FVVE8JCShWNEwyX0NJRF9SRl9UVU5FUl9DTEFTU19CQVNFICsgNjEpCi0jZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX0lGX0dBSU4JCShWNEwyX0NJRF9SRl9UVU5FUl9DTEFTU19CQVNFICsgNjIpCi0jZGVmaW5lIFY0TDJfQ0lEX1JGX1RVTkVSX1BMTF9MT0NLCQkJKFY0TDJfQ0lEX1JGX1RVTkVSX0NMQVNTX0JBU0UgKyA5MSkKLQotCi0vKiAgRGV0ZWN0aW9uLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLwotI2RlZmluZSBWNEwyX0NJRF9ERVRFQ1RfQ0xBU1NfQkFTRQkJKFY0TDJfQ1RSTF9DTEFTU19ERVRFQ1QgfCAweDkwMCkKLSNkZWZpbmUgVjRMMl9DSURfREVURUNUX0NMQVNTCQkJKFY0TDJfQ1RSTF9DTEFTU19ERVRFQ1QgfCAxKQotCi0jZGVmaW5lIFY0TDJfQ0lEX0RFVEVDVF9NRF9NT0RFCQkJKFY0TDJfQ0lEX0RFVEVDVF9DTEFTU19CQVNFICsgMSkKLWVudW0gdjRsMl9kZXRlY3RfbWRfbW9kZSB7Ci0JVjRMMl9ERVRFQ1RfTURfTU9ERV9ESVNBQkxFRAkJPSAwLAotCVY0TDJfREVURUNUX01EX01PREVfR0xPQkFMCQk9IDEsCi0JVjRMMl9ERVRFQ1RfTURfTU9ERV9USFJFU0hPTERfR1JJRAk9IDIsCi0JVjRMMl9ERVRFQ1RfTURfTU9ERV9SRUdJT05fR1JJRAkJPSAzLAotfTsKLSNkZWZpbmUgVjRMMl9DSURfREVURUNUX01EX0dMT0JBTF9USFJFU0hPTEQJKFY0TDJfQ0lEX0RFVEVDVF9DTEFTU19CQVNFICsgMikKLSNkZWZpbmUgVjRMMl9DSURfREVURUNUX01EX1RIUkVTSE9MRF9HUklECShWNEwyX0NJRF9ERVRFQ1RfQ0xBU1NfQkFTRSArIDMpCi0jZGVmaW5lIFY0TDJfQ0lEX0RFVEVDVF9NRF9SRUdJT05fR1JJRAkJKFY0TDJfQ0lEX0RFVEVDVF9DTEFTU19CQVNFICsgNCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9leHQvdmlkZW9kZXYyLmggYi9zeXMvdjRsMi9leHQvdmlkZW9kZXYyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZTgyYmUuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZXh0L3ZpZGVvZGV2Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI3NiArMCwwIEBACi0vKgotICogIFZpZGVvIGZvciBMaW51eCBUd28gaGVhZGVyIGZpbGUKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgdGhlIGNvbnRyaWJ1dG9ycwotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gcmVkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiAgQlNEIGxpY2Vuc2UgYXMgc3RhdGVkIGJlbG93OgotICoKLSAqICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqICBhcmUgbWV0OgotICogIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgIGRpc3RyaWJ1dGlvbi4KLSAqICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi0gKiAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0gKiAgICAgcGVybWlzc2lvbi4KLSAqCi0gKiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgotICogIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0gKiAgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICoJSGVhZGVyIGZpbGUgZm9yIHY0bCBvciBWNEwyIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucwotICogd2l0aCBwdWJsaWMgQVBJLgotICogQWxsIGtlcm5lbC1zcGVjaWZpYyBzdHVmZiB3ZXJlIG1vdmVkIHRvIG1lZGlhL3Y0bDItZGV2LmgsIHNvCi0gKiBubyAjaWYgX19LRVJORUwgdGVzdHMgYXJlIGFsbG93ZWQgaGVyZQotICoKLSAqCVNlZSBodHRwOi8vbGludXh0di5vcmcgZm9yIG1vcmUgaW5mbwotICoKLSAqCUF1dGhvcjogQmlsbCBEaXJrcyA8YmlsbEB0aGVkaXJrcy5vcmc+Ci0gKgkJSnVzdGluIFNjaG9lbWFuCi0gKiAgICAgICAgICAgICAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+Ci0gKgkJZXQgYWwuCi0gKi8KLSNpZm5kZWYgX19MSU5VWF9WSURFT0RFVjJfSAotI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWMl9ICi0KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotCi0jaW5jbHVkZSAiZXh0L3R5cGVzLWNvbXBhdC5oIgotI2luY2x1ZGUgImV4dC92NGwyLWNvbW1vbi5oIgotI2luY2x1ZGUgImV4dC92NGwyLWNvbnRyb2xzLmgiCi0KLS8qCi0gKiBDb21tb24gc3R1ZmYgZm9yIGJvdGggVjRMMSBhbmQgVjRMMgotICogTW92ZWQgZnJvbSB2aWRlb2Rldi5oCi0gKi8KLSNkZWZpbmUgVklERU9fTUFYX0ZSQU1FICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgVklERU9fTUFYX1BMQU5FUyAgICAgICAgICAgICAgIDgKLQotLyoKLSAqCU0gSSBTIEMgRSBMIEwgQSBOIEUgTyBVIFMKLSAqLwotCi0vKiAgRm91ci1jaGFyYWN0ZXItY29kZSAoRk9VUkNDKSAqLwotI2RlZmluZSB2NGwyX2ZvdXJjYyhhLCBiLCBjLCBkKVwKLQkoKF9fdTMyKShhKSB8ICgoX191MzIpKGIpIDw8IDgpIHwgKChfX3UzMikoYykgPDwgMTYpIHwgKChfX3UzMikoZCkgPDwgMjQpKQotI2RlZmluZSB2NGwyX2ZvdXJjY19iZShhLCBiLCBjLCBkKQkodjRsMl9mb3VyY2MoYSwgYiwgYywgZCkgfCAoMSA8PCAzMSkpCi0KLS8qCi0gKglFIE4gVSBNIFMKLSAqLwotZW51bSB2NGwyX2ZpZWxkIHsKLQlWNEwyX0ZJRUxEX0FOWSAgICAgICAgICAgPSAwLCAvKiBkcml2ZXIgY2FuIGNob29zZSBmcm9tIG5vbmUsCi0JCQkJCSB0b3AsIGJvdHRvbSwgaW50ZXJsYWNlZAotCQkJCQkgZGVwZW5kaW5nIG9uIHdoYXRldmVyIGl0IHRoaW5rcwotCQkJCQkgaXMgYXBwcm94aW1hdGUgLi4uICovCi0JVjRMMl9GSUVMRF9OT05FICAgICAgICAgID0gMSwgLyogdGhpcyBkZXZpY2UgaGFzIG5vIGZpZWxkcyAuLi4gKi8KLQlWNEwyX0ZJRUxEX1RPUCAgICAgICAgICAgPSAyLCAvKiB0b3AgZmllbGQgb25seSAqLwotCVY0TDJfRklFTERfQk9UVE9NICAgICAgICA9IDMsIC8qIGJvdHRvbSBmaWVsZCBvbmx5ICovCi0JVjRMMl9GSUVMRF9JTlRFUkxBQ0VEICAgID0gNCwgLyogYm90aCBmaWVsZHMgaW50ZXJsYWNlZCAqLwotCVY0TDJfRklFTERfU0VRX1RCICAgICAgICA9IDUsIC8qIGJvdGggZmllbGRzIHNlcXVlbnRpYWwgaW50byBvbmUKLQkJCQkJIGJ1ZmZlciwgdG9wLWJvdHRvbSBvcmRlciAqLwotCVY0TDJfRklFTERfU0VRX0JUICAgICAgICA9IDYsIC8qIHNhbWUgYXMgYWJvdmUgKyBib3R0b20tdG9wIG9yZGVyICovCi0JVjRMMl9GSUVMRF9BTFRFUk5BVEUgICAgID0gNywgLyogYm90aCBmaWVsZHMgYWx0ZXJuYXRpbmcgaW50bwotCQkJCQkgc2VwYXJhdGUgYnVmZmVycyAqLwotCVY0TDJfRklFTERfSU5URVJMQUNFRF9UQiA9IDgsIC8qIGJvdGggZmllbGRzIGludGVybGFjZWQsIHRvcCBmaWVsZAotCQkJCQkgZmlyc3QgYW5kIHRoZSB0b3AgZmllbGQgaXMKLQkJCQkJIHRyYW5zbWl0dGVkIGZpcnN0ICovCi0JVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUID0gOSwgLyogYm90aCBmaWVsZHMgaW50ZXJsYWNlZCwgdG9wIGZpZWxkCi0JCQkJCSBmaXJzdCBhbmQgdGhlIGJvdHRvbSBmaWVsZCBpcwotCQkJCQkgdHJhbnNtaXR0ZWQgZmlyc3QgKi8KLX07Ci0jZGVmaW5lIFY0TDJfRklFTERfSEFTX1RPUChmaWVsZCkJXAotCSgoZmllbGQpID09IFY0TDJfRklFTERfVE9QIAl8fFwKLQkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHxcCi0JIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCIHx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCB8fFwKLQkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQgl8fFwKLQkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKLSNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9UVE9NKGZpZWxkKQlcCi0JKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9CT1RUT00gCXx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fFwKLQkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgfHxcCi0JIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUIHx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX1RCCXx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQotI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19CT1RIKGZpZWxkKQlcCi0JKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fFwKLQkgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHxcCi0JIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHxcCi0JIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCi0jZGVmaW5lIFY0TDJfRklFTERfSEFTX1RfT1JfQihmaWVsZCkJXAotCSgoZmllbGQpID09IFY0TDJfRklFTERfQk9UVE9NIHx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfVE9QIHx8XAotCSAoZmllbGQpID09IFY0TDJfRklFTERfQUxURVJOQVRFKQotCi1lbnVtIHY0bDJfYnVmX3R5cGUgewotCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAgICAgICAgPSAxLAotCVY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICAgICAgICAgPSAyLAotCVY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSAgICAgICAgPSAzLAotCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUgICAgICAgICAgPSA0LAotCVY0TDJfQlVGX1RZUEVfVkJJX09VVFBVVCAgICAgICAgICAgPSA1LAotCVY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICAgPSA2LAotCVY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgICAgPSA3LAotI2lmIDEKLQkvKiBFeHBlcmltZW50YWwgKi8KLQlWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9PVkVSTEFZID0gOCwKLSNlbmRpZgotCVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUgPSA5LAotCVY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSAgPSAxMCwKLQlWNEwyX0JVRl9UWVBFX1NEUl9DQVBUVVJFICAgICAgICAgID0gMTEsCi0JLyogRGVwcmVjYXRlZCwgZG8gbm90IHVzZSAqLwotCVY0TDJfQlVGX1RZUEVfUFJJVkFURSAgICAgICAgICAgICAgPSAweDgwLAotfTsKLQotI2RlZmluZSBWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIodHlwZSkJCQlcCi0JKCh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FCVwKLQkgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkKLQotI2RlZmluZSBWNEwyX1RZUEVfSVNfT1VUUFVUKHR5cGUpCQkJCVwKLQkoKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUCQkJXAotCSB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FCQlcCi0JIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVkJCVwKLQkgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVkJXAotCSB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUCQkJXAotCSB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCkKLQotZW51bSB2NGwyX3R1bmVyX3R5cGUgewotCVY0TDJfVFVORVJfUkFESU8JICAgICA9IDEsCi0JVjRMMl9UVU5FUl9BTkFMT0dfVFYJICAgICA9IDIsCi0JVjRMMl9UVU5FUl9ESUdJVEFMX1RWCSAgICAgPSAzLAotCVY0TDJfVFVORVJfQURDICAgICAgICAgICAgICAgPSA0LAotCVY0TDJfVFVORVJfUkYgICAgICAgICAgICAgICAgPSA1LAotfTsKLQotZW51bSB2NGwyX21lbW9yeSB7Ci0JVjRMMl9NRU1PUllfTU1BUCAgICAgICAgICAgICA9IDEsCi0JVjRMMl9NRU1PUllfVVNFUlBUUiAgICAgICAgICA9IDIsCi0JVjRMMl9NRU1PUllfT1ZFUkxBWSAgICAgICAgICA9IDMsCi0JVjRMMl9NRU1PUllfRE1BQlVGICAgICAgICAgICA9IDQsCi19OwotCi0vKiBzZWUgYWxzbyBodHRwOi8vdmVrdG9yLnRoZW9yZW0uY2EvZ3JhcGhpY3MveWNiY3IvICovCi1lbnVtIHY0bDJfY29sb3JzcGFjZSB7Ci0JLyoKLQkgKiBEZWZhdWx0IGNvbG9yc3BhY2UsIGkuZS4gbGV0IHRoZSBkcml2ZXIgZmlndXJlIGl0IG91dC4KLQkgKiBDYW4gb25seSBiZSB1c2VkIHdpdGggdmlkZW8gY2FwdHVyZS4KLQkgKi8KLQlWNEwyX0NPTE9SU1BBQ0VfREVGQVVMVCAgICAgICA9IDAsCi0KLQkvKiBTTVBURSAxNzBNOiB1c2VkIGZvciBicm9hZGNhc3QgTlRTQy9QQUwgU0RUViAqLwotCVY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0gICAgID0gMSwKLQotCS8qIE9ic29sZXRlIHByZS0xOTk4IFNNUFRFIDI0ME0gSERUViBzdGFuZGFyZCwgc3VwZXJzZWRlZCBieSBSZWMgNzA5ICovCi0JVjRMMl9DT0xPUlNQQUNFX1NNUFRFMjQwTSAgICAgPSAyLAotCi0JLyogUmVjLjcwOTogdXNlZCBmb3IgSERUViAqLwotCVY0TDJfQ09MT1JTUEFDRV9SRUM3MDkgICAgICAgID0gMywKLQotCS8qCi0JICogRGVwcmVjYXRlZCwgZG8gbm90IHVzZS4gTm8gZHJpdmVyIHdpbGwgZXZlciByZXR1cm4gdGhpcy4gVGhpcyB3YXMKLQkgKiBiYXNlZCBvbiBhIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIGJ0ODc4IGRhdGFzaGVldC4KLQkgKi8KLQlWNEwyX0NPTE9SU1BBQ0VfQlQ4NzggICAgICAgICA9IDQsCi0KLQkvKgotCSAqIE5UU0MgMTk1MyBjb2xvcnNwYWNlLiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiBkZWFsaW5nIHdpdGgKLQkgKiByZWFsbHksIHJlYWxseSBvbGQgTlRTQyByZWNvcmRpbmdzLiBTdXBlcnNlZGVkIGJ5IFNNUFRFIDE3ME0uCi0JICovCi0JVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTSAgPSA1LAotCi0JLyoKLQkgKiBFQlUgVGVjaCAzMjEzIFBBTC9TRUNBTSBjb2xvcnNwYWNlLiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbgotCSAqIGRlYWxpbmcgd2l0aCByZWFsbHkgb2xkIFBBTC9TRUNBTSByZWNvcmRpbmdzLiBTdXBlcnNlZGVkIGJ5Ci0JICogU01QVEUgMTcwTS4KLQkgKi8KLQlWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9CRyA9IDYsCi0KLQkvKgotCSAqIEVmZmVjdGl2ZWx5IHNob3J0aGFuZCBmb3IgVjRMMl9DT0xPUlNQQUNFX1NSR0IsIFY0TDJfWUNCQ1JfRU5DXzYwMQotCSAqIGFuZCBWNEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdFLiBUbyBiZSB1c2VkIGZvciAoTW90aW9uLSlKUEVHLgotCSAqLwotCVY0TDJfQ09MT1JTUEFDRV9KUEVHICAgICAgICAgID0gNywKLQotCS8qIEZvciBSR0IgY29sb3JzcGFjZXMgc3VjaCBhcyBwcm9kdWNlcyBieSBtb3N0IHdlYmNhbXMuICovCi0JVjRMMl9DT0xPUlNQQUNFX1NSR0IgICAgICAgICAgPSA4LAotCi0JLyogQWRvYmVSR0IgY29sb3JzcGFjZSAqLwotCVY0TDJfQ09MT1JTUEFDRV9BRE9CRVJHQiAgICAgID0gOSwKLQotCS8qIEJULjIwMjAgY29sb3JzcGFjZSwgdXNlZCBmb3IgVUhEVFYuICovCi0JVjRMMl9DT0xPUlNQQUNFX0JUMjAyMCAgICAgICAgPSAxMCwKLQotCS8qIFJhdyBjb2xvcnNwYWNlOiBmb3IgUkFXIHVucHJvY2Vzc2VkIGltYWdlcyAqLwotCVY0TDJfQ09MT1JTUEFDRV9SQVcgICAgICAgICAgID0gMTEsCi19OwotCi0vKgotICogRGV0ZXJtaW5lIGhvdyBDT0xPUlNQQUNFX0RFRkFVTFQgc2hvdWxkIG1hcCB0byBhIHByb3BlciBjb2xvcnNwYWNlLgotICogVGhpcyBkZXBlbmRzIG9uIHdoZXRoZXIgdGhpcyBpcyBhIFNEVFYgaW1hZ2UgKHVzZSBTTVBURSAxNzBNKSwgYW4KLSAqIEhEVFYgaW1hZ2UgKHVzZSBSZWMuIDcwOSksIG9yIHNvbWV0aGluZyBlbHNlICh1c2Ugc1JHQikuCi0gKi8KLSNkZWZpbmUgVjRMMl9NQVBfQ09MT1JTUEFDRV9ERUZBVUxUKGlzX3NkdHYsIGlzX2hkdHYpIFwKLQkoKGlzX3NkdHYpID8gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSA6IFwKLQkgKChpc19oZHR2KSA/IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDkgOiBWNEwyX0NPTE9SU1BBQ0VfU1JHQikpCi0KLWVudW0gdjRsMl94ZmVyX2Z1bmMgewotCS8qCi0JICogTWFwcGluZyBvZiBWNEwyX1hGRVJfRlVOQ19ERUZBVUxUIHRvIGFjdHVhbCB0cmFuc2ZlciBmdW5jdGlvbnMKLQkgKiBmb3IgdGhlIHZhcmlvdXMgY29sb3JzcGFjZXM6Ci0JICoKLQkgKiBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLCBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NLAotCSAqIFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHLCBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5IGFuZAotCSAqIFY0TDJfQ09MT1JTUEFDRV9CVDIwMjA6IFY0TDJfWEZFUl9GVU5DXzcwOQotCSAqCi0JICogVjRMMl9DT0xPUlNQQUNFX1NSR0IsIFY0TDJfQ09MT1JTUEFDRV9KUEVHOiBWNEwyX1hGRVJfRlVOQ19TUkdCCi0JICoKLQkgKiBWNEwyX0NPTE9SU1BBQ0VfQURPQkVSR0I6IFY0TDJfWEZFUl9GVU5DX0FET0JFUkdCCi0JICoKLQkgKiBWNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNOiBWNEwyX1hGRVJfRlVOQ19TTVBURTI0ME0KLQkgKgotCSAqIFY0TDJfQ09MT1JTUEFDRV9SQVc6IFY0TDJfWEZFUl9GVU5DX05PTkUKLQkgKi8KLQlWNEwyX1hGRVJfRlVOQ19ERUZBVUxUICAgICA9IDAsCi0JVjRMMl9YRkVSX0ZVTkNfNzA5ICAgICAgICAgPSAxLAotCVY0TDJfWEZFUl9GVU5DX1NSR0IgICAgICAgID0gMiwKLQlWNEwyX1hGRVJfRlVOQ19BRE9CRVJHQiAgICA9IDMsCi0JVjRMMl9YRkVSX0ZVTkNfU01QVEUyNDBNICAgPSA0LAotCVY0TDJfWEZFUl9GVU5DX05PTkUgICAgICAgID0gNSwKLX07Ci0KLS8qCi0gKiBEZXRlcm1pbmUgaG93IFhGRVJfRlVOQ19ERUZBVUxUIHNob3VsZCBtYXAgdG8gYSBwcm9wZXIgdHJhbnNmZXIgZnVuY3Rpb24uCi0gKiBUaGlzIGRlcGVuZHMgb24gdGhlIGNvbG9yc3BhY2UuCi0gKi8KLSNkZWZpbmUgVjRMMl9NQVBfWEZFUl9GVU5DX0RFRkFVTFQoY29sc3ApIFwKLQkoKGNvbHNwKSA9PSBWNEwyX1hGRVJfRlVOQ19BRE9CRVJHQiA/IFY0TDJfWEZFUl9GVU5DX0FET0JFUkdCIDogXAotCSAoKGNvbHNwKSA9PSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUyNDBNID8gVjRMMl9YRkVSX0ZVTkNfU01QVEUyNDBNIDogXAotCSAgKChjb2xzcCkgPT0gVjRMMl9DT0xPUlNQQUNFX1JBVyA/IFY0TDJfWEZFUl9GVU5DX05PTkUgOiBcCi0JICAgKChjb2xzcCkgPT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IgfHwgKGNvbHNwKSA9PSBWNEwyX0NPTE9SU1BBQ0VfSlBFRyA/IFwKLQkgICAgVjRMMl9YRkVSX0ZVTkNfU1JHQiA6IFY0TDJfWEZFUl9GVU5DXzcwOSkpKSkKLQotZW51bSB2NGwyX3ljYmNyX2VuY29kaW5nIHsKLQkvKgotCSAqIE1hcHBpbmcgb2YgVjRMMl9ZQ0JDUl9FTkNfREVGQVVMVCB0byBhY3R1YWwgZW5jb2RpbmdzIGZvciB0aGUKLQkgKiB2YXJpb3VzIGNvbG9yc3BhY2VzOgotCSAqCi0JICogVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTSwKLQkgKiBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9CRywgVjRMMl9DT0xPUlNQQUNFX0FET0JFUkdCIGFuZAotCSAqIFY0TDJfQ09MT1JTUEFDRV9KUEVHOiBWNEwyX1lDQkNSX0VOQ182MDEKLQkgKgotCSAqIFY0TDJfQ09MT1JTUEFDRV9SRUM3MDk6IFY0TDJfWUNCQ1JfRU5DXzcwOQotCSAqCi0JICogVjRMMl9DT0xPUlNQQUNFX1NSR0I6IFY0TDJfWUNCQ1JfRU5DX1NZQ0MKLQkgKgotCSAqIFY0TDJfQ09MT1JTUEFDRV9CVDIwMjA6IFY0TDJfWUNCQ1JfRU5DX0JUMjAyMAotCSAqCi0JICogVjRMMl9DT0xPUlNQQUNFX1NNUFRFMjQwTTogVjRMMl9ZQ0JDUl9FTkNfU01QVEUyNDBNCi0JICovCi0JVjRMMl9ZQ0JDUl9FTkNfREVGQVVMVCAgICAgICAgPSAwLAotCi0JLyogSVRVLVIgNjAxIC0tIFNEVFYgKi8KLQlWNEwyX1lDQkNSX0VOQ182MDEgICAgICAgICAgICA9IDEsCi0KLQkvKiBSZWMuIDcwOSAtLSBIRFRWICovCi0JVjRMMl9ZQ0JDUl9FTkNfNzA5ICAgICAgICAgICAgPSAyLAotCi0JLyogSVRVLVIgNjAxL0VOIDYxOTY2LTItNCBFeHRlbmRlZCBHYW11dCAtLSBTRFRWICovCi0JVjRMMl9ZQ0JDUl9FTkNfWFY2MDEgICAgICAgICAgPSAzLAotCi0JLyogUmVjLiA3MDkvRU4gNjE5NjYtMi00IEV4dGVuZGVkIEdhbXV0IC0tIEhEVFYgKi8KLQlWNEwyX1lDQkNSX0VOQ19YVjcwOSAgICAgICAgICA9IDQsCi0KLQkvKiBzWUNDIChZJ0NiQ3IgZW5jb2Rpbmcgb2Ygc1JHQikgKi8KLQlWNEwyX1lDQkNSX0VOQ19TWUNDICAgICAgICAgICA9IDUsCi0KLQkvKiBCVC4yMDIwIE5vbi1jb25zdGFudCBMdW1pbmFuY2UgWSdDYkNyICovCi0JVjRMMl9ZQ0JDUl9FTkNfQlQyMDIwICAgICAgICAgPSA2LAotCi0JLyogQlQuMjAyMCBDb25zdGFudCBMdW1pbmFuY2UgWSdDYmNDcmMgKi8KLQlWNEwyX1lDQkNSX0VOQ19CVDIwMjBfQ09OU1RfTFVNID0gNywKLQotCS8qIFNNUFRFIDI0ME0gLS0gT2Jzb2xldGUgSERUViAqLwotCVY0TDJfWUNCQ1JfRU5DX1NNUFRFMjQwTSAgICAgID0gOCwKLX07Ci0KLS8qCi0gKiBEZXRlcm1pbmUgaG93IFlDQkNSX0VOQ19ERUZBVUxUIHNob3VsZCBtYXAgdG8gYSBwcm9wZXIgWSdDYkNyIGVuY29kaW5nLgotICogVGhpcyBkZXBlbmRzIG9uIHRoZSBjb2xvcnNwYWNlLgotICovCi0jZGVmaW5lIFY0TDJfTUFQX1lDQkNSX0VOQ19ERUZBVUxUKGNvbHNwKSBcCi0JKChjb2xzcCkgPT0gVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSA/IFY0TDJfWUNCQ1JfRU5DXzcwOSA6IFwKLQkgKChjb2xzcCkgPT0gVjRMMl9DT0xPUlNQQUNFX0JUMjAyMCA/IFY0TDJfWUNCQ1JfRU5DX0JUMjAyMCA6IFwKLQkgICgoY29sc3ApID09IFY0TDJfQ09MT1JTUEFDRV9TTVBURTI0ME0gPyBWNEwyX1lDQkNSX0VOQ19TTVBURTI0ME0gOiBcCi0JICAgVjRMMl9ZQ0JDUl9FTkNfNjAxKSkpCi0KLWVudW0gdjRsMl9xdWFudGl6YXRpb24gewotCS8qCi0JICogVGhlIGRlZmF1bHQgZm9yIFInRydCJyBxdWFudGl6YXRpb24gaXMgYWx3YXlzIGZ1bGwgcmFuZ2UsIGV4Y2VwdAotCSAqIGZvciB0aGUgQlQyMDIwIGNvbG9yc3BhY2UuIEZvciBZJ0NiQ3IgdGhlIHF1YW50aXphdGlvbiBpcyBhbHdheXMKLQkgKiBsaW1pdGVkIHJhbmdlLCBleGNlcHQgZm9yIENPTE9SU1BBQ0VfSlBFRywgU1lDQywgWFY2MDEgb3IgWFY3MDk6Ci0JICogdGhvc2UgYXJlIGZ1bGwgcmFuZ2UuCi0JICovCi0JVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVCAgICAgPSAwLAotCVY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0UgID0gMSwKLQlWNEwyX1FVQU5USVpBVElPTl9MSU1fUkFOR0UgICA9IDIsCi19OwotCi0vKgotICogRGV0ZXJtaW5lIGhvdyBRVUFOVElaQVRJT05fREVGQVVMVCBzaG91bGQgbWFwIHRvIGEgcHJvcGVyIHF1YW50aXphdGlvbi4KLSAqIFRoaXMgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbWFnZSBpcyBSR0Igb3Igbm90LCB0aGUgY29sb3JzcGFjZSBhbmQgdGhlCi0gKiBZJ0NiQ3IgZW5jb2RpbmcuCi0gKi8KLSNkZWZpbmUgVjRMMl9NQVBfUVVBTlRJWkFUSU9OX0RFRkFVTFQoaXNfcmdiLCBjb2xzcCwgeWNiY3JfZW5jKSBcCi0JKCgoaXNfcmdiKSAmJiAoY29sc3ApID09IFY0TDJfQ09MT1JTUEFDRV9CVDIwMjApID8gVjRMMl9RVUFOVElaQVRJT05fTElNX1JBTkdFIDogXAotCSAoKChpc19yZ2IpIHx8ICh5Y2Jjcl9lbmMpID09IFY0TDJfWUNCQ1JfRU5DX1hWNjAxIHx8IFwKLQkgICh5Y2Jjcl9lbmMpID09IFY0TDJfWUNCQ1JfRU5DX1hWNzA5IHx8IChjb2xzcCkgPT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcpID8gXAotCSBWNEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdFIDogVjRMMl9RVUFOVElaQVRJT05fTElNX1JBTkdFKSkKLQotZW51bSB2NGwyX3ByaW9yaXR5IHsKLQlWNEwyX1BSSU9SSVRZX1VOU0VUICAgICAgID0gMCwgIC8qIG5vdCBpbml0aWFsaXplZCAqLwotCVY0TDJfUFJJT1JJVFlfQkFDS0dST1VORCAgPSAxLAotCVY0TDJfUFJJT1JJVFlfSU5URVJBQ1RJVkUgPSAyLAotCVY0TDJfUFJJT1JJVFlfUkVDT1JEICAgICAgPSAzLAotCVY0TDJfUFJJT1JJVFlfREVGQVVMVCAgICAgPSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFLAotfTsKLQotc3RydWN0IHY0bDJfcmVjdCB7Ci0JX19zMzIgICBsZWZ0OwotCV9fczMyICAgdG9wOwotCV9fdTMyICAgd2lkdGg7Ci0JX191MzIgICBoZWlnaHQ7Ci19OwotCi1zdHJ1Y3QgdjRsMl9mcmFjdCB7Ci0JX191MzIgICBudW1lcmF0b3I7Ci0JX191MzIgICBkZW5vbWluYXRvcjsKLX07Ci0KLS8qKgotICAqIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgLSBEZXNjcmliZXMgVjRMMiBkZXZpY2UgY2FwcyByZXR1cm5lZCBieSBWSURJT0NfUVVFUllDQVAKLSAgKgotICAqIEBkcml2ZXI6CSAgIG5hbWUgb2YgdGhlIGRyaXZlciBtb2R1bGUgKGUuZy4gImJ0dHYiKQotICAqIEBjYXJkOgkgICBuYW1lIG9mIHRoZSBjYXJkIChlLmcuICJIYXVwcGF1Z2UgV2luVFYiKQotICAqIEBidXNfaW5mbzoJICAgbmFtZSBvZiB0aGUgYnVzIChlLmcuICJQQ0k6IiArIHBjaV9uYW1lKHBjaV9kZXYpICkKLSAgKiBAdmVyc2lvbjoJICAgS0VSTkVMX1ZFUlNJT04KLSAgKiBAY2FwYWJpbGl0aWVzOiBjYXBhYmlsaXRpZXMgb2YgdGhlIHBoeXNpY2FsIGRldmljZSBhcyBhIHdob2xlCi0gICogQGRldmljZV9jYXBzOiAgY2FwYWJpbGl0aWVzIGFjY2Vzc2VkIHZpYSB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlIChub2RlKQotICAqIEByZXNlcnZlZDoJICAgcmVzZXJ2ZWQgZmllbGRzIGZvciBmdXR1cmUgZXh0ZW5zaW9ucwotICAqLwotc3RydWN0IHY0bDJfY2FwYWJpbGl0eSB7Ci0JX191OAlkcml2ZXJbMTZdOwotCV9fdTgJY2FyZFszMl07Ci0JX191OAlidXNfaW5mb1szMl07Ci0JX191MzIgICB2ZXJzaW9uOwotCV9fdTMyCWNhcGFiaWxpdGllczsKLQlfX3UzMglkZXZpY2VfY2FwczsKLQlfX3UzMglyZXNlcnZlZFszXTsKLX07Ci0KLS8qIFZhbHVlcyBmb3IgJ2NhcGFiaWxpdGllcycgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRQkJMHgwMDAwMDAwMSAgLyogSXMgYSB2aWRlbyBjYXB0dXJlIGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQJCTB4MDAwMDAwMDIgIC8qIElzIGEgdmlkZW8gb3V0cHV0IGRldmljZSAqLwotI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZCQkweDAwMDAwMDA0ICAvKiBDYW4gZG8gdmlkZW8gb3ZlcmxheSAqLwotI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRQkJMHgwMDAwMDAxMCAgLyogSXMgYSByYXcgVkJJIGNhcHR1cmUgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQJCTB4MDAwMDAwMjAgIC8qIElzIGEgcmF3IFZCSSBvdXRwdXQgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRQkweDAwMDAwMDQwICAvKiBJcyBhIHNsaWNlZCBWQkkgY2FwdHVyZSBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQJMHgwMDAwMDA4MCAgLyogSXMgYSBzbGljZWQgVkJJIG91dHB1dCBkZXZpY2UgKi8KLSNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUJCTB4MDAwMDAxMDAgIC8qIFJEUyBkYXRhIGNhcHR1cmUgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUX09WRVJMQVkJMHgwMDAwMDIwMCAgLyogQ2FuIGRvIHZpZGVvIG91dHB1dCBvdmVybGF5ICovCi0jZGVmaW5lIFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSwkJMHgwMDAwMDQwMCAgLyogQ2FuIGRvIGhhcmR3YXJlIGZyZXF1ZW5jeSBzZWVrICAqLwotI2RlZmluZSBWNEwyX0NBUF9SRFNfT1VUUFVUCQkweDAwMDAwODAwICAvKiBJcyBhbiBSRFMgZW5jb2RlciAqLwotCi0vKiBJcyBhIHZpZGVvIGNhcHR1cmUgZGV2aWNlIHRoYXQgc3VwcG9ydHMgbXVsdGlwbGFuYXIgZm9ybWF0cyAqLwotI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFX01QTEFORQkweDAwMDAxMDAwCi0vKiBJcyBhIHZpZGVvIG91dHB1dCBkZXZpY2UgdGhhdCBzdXBwb3J0cyBtdWx0aXBsYW5hciBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9NUExBTkUJMHgwMDAwMjAwMAotLyogSXMgYSB2aWRlbyBtZW0tdG8tbWVtIGRldmljZSB0aGF0IHN1cHBvcnRzIG11bHRpcGxhbmFyIGZvcm1hdHMgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fTTJNX01QTEFORQkweDAwMDA0MDAwCi0vKiBJcyBhIHZpZGVvIG1lbS10by1tZW0gZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX00yTQkJMHgwMDAwODAwMAotCi0jZGVmaW5lIFY0TDJfQ0FQX1RVTkVSCQkJMHgwMDAxMDAwMCAgLyogaGFzIGEgdHVuZXIgKi8KLSNkZWZpbmUgVjRMMl9DQVBfQVVESU8JCQkweDAwMDIwMDAwICAvKiBoYXMgYXVkaW8gc3VwcG9ydCAqLwotI2RlZmluZSBWNEwyX0NBUF9SQURJTwkJCTB4MDAwNDAwMDAgIC8qIGlzIGEgcmFkaW8gZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX01PRFVMQVRPUgkJMHgwMDA4MDAwMCAgLyogaGFzIGEgbW9kdWxhdG9yICovCi0KLSNkZWZpbmUgVjRMMl9DQVBfU0RSX0NBUFRVUkUJCTB4MDAxMDAwMDAgIC8qIElzIGEgU0RSIGNhcHR1cmUgZGV2aWNlICovCi0jZGVmaW5lIFY0TDJfQ0FQX0VYVF9QSVhfRk9STUFUCQkweDAwMjAwMDAwICAvKiBTdXBwb3J0cyB0aGUgZXh0ZW5kZWQgcGl4ZWwgZm9ybWF0ICovCi0KLSNkZWZpbmUgVjRMMl9DQVBfUkVBRFdSSVRFICAgICAgICAgICAgICAweDAxMDAwMDAwICAvKiByZWFkL3dyaXRlIHN5c3RlbWNhbGxzICovCi0jZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gICAgICAgICAgICAgICAgMHgwMjAwMDAwMCAgLyogYXN5bmMgSS9PICovCi0jZGVmaW5lIFY0TDJfQ0FQX1NUUkVBTUlORyAgICAgICAgICAgICAgMHgwNDAwMDAwMCAgLyogc3RyZWFtaW5nIEkvTyBpb2N0bHMgKi8KLQotI2RlZmluZSBWNEwyX0NBUF9ERVZJQ0VfQ0FQUyAgICAgICAgICAgIDB4ODAwMDAwMDAgIC8qIHNldHMgZGV2aWNlIGNhcGFiaWxpdGllcyBmaWVsZCAqLwotCi0vKgotICoJViBJIEQgRSBPICAgSSBNIEEgRyBFICAgRiBPIFIgTSBBIFQKLSAqLwotc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB7Ci0JX191MzIgICAgICAgICAJCXdpZHRoOwotCV9fdTMyCQkJaGVpZ2h0OwotCV9fdTMyCQkJcGl4ZWxmb3JtYXQ7Ci0JX191MzIJCQlmaWVsZDsJCS8qIGVudW0gdjRsMl9maWVsZCAqLwotCV9fdTMyICAgICAgICAgICAgCWJ5dGVzcGVybGluZTsJLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCi0JX191MzIgICAgICAgICAgCQlzaXplaW1hZ2U7Ci0JX191MzIJCQljb2xvcnNwYWNlOwkvKiBlbnVtIHY0bDJfY29sb3JzcGFjZSAqLwotCV9fdTMyCQkJcHJpdjsJCS8qIHByaXZhdGUgZGF0YSwgZGVwZW5kcyBvbiBwaXhlbGZvcm1hdCAqLwotCV9fdTMyCQkJZmxhZ3M7CQkvKiBmb3JtYXQgZmxhZ3MgKFY0TDJfUElYX0ZNVF9GTEFHXyopICovCi0JX191MzIJCQl5Y2Jjcl9lbmM7CS8qIGVudW0gdjRsMl95Y2Jjcl9lbmNvZGluZyAqLwotCV9fdTMyCQkJcXVhbnRpemF0aW9uOwkvKiBlbnVtIHY0bDJfcXVhbnRpemF0aW9uICovCi0JX191MzIJCQl4ZmVyX2Z1bmM7CS8qIGVudW0gdjRsMl94ZmVyX2Z1bmMgKi8KLX07Ci0KLS8qICAgICAgUGl4ZWwgZm9ybWF0ICAgICAgICAgRk9VUkNDICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCAgRGVzY3JpcHRpb24gICovCi0KLS8qIFJHQiBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IzMzIgIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICcxJykgLyogIDggIFJHQi0zLTMtMiAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjQ0NCAgdjRsMl9mb3VyY2MoJ1InLCAnNCcsICc0JywgJzQnKSAvKiAxNiAgeHh4eHJycnIgZ2dnZ2JiYmIgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0FSR0I0NDQgdjRsMl9mb3VyY2MoJ0EnLCAnUicsICcxJywgJzInKSAvKiAxNiAgYWFhYXJycnIgZ2dnZ2JiYmIgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1hSR0I0NDQgdjRsMl9mb3VyY2MoJ1gnLCAnUicsICcxJywgJzInKSAvKiAxNiAgeHh4eHJycnIgZ2dnZ2JiYmIgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU1NSAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ08nKSAvKiAxNiAgUkdCLTUtNS01ICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfQVJHQjU1NSB2NGwyX2ZvdXJjYygnQScsICdSJywgJzEnLCAnNScpIC8qIDE2ICBBUkdCLTEtNS01LTUgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9YUkdCNTU1IHY0bDJfZm91cmNjKCdYJywgJ1InLCAnMScsICc1JykgLyogMTYgIFhSR0ItMS01LTUtNSAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NSAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1AnKSAvKiAxNiAgUkdCLTUtNi01ICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTU1WCB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUScpIC8qIDE2ICBSR0ItNS01LTUgQkUgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9BUkdCNTU1WCB2NGwyX2ZvdXJjY19iZSgnQScsICdSJywgJzEnLCAnNScpIC8qIDE2ICBBUkdCLTUtNS01IEJFICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9YUkdCNTU1WCB2NGwyX2ZvdXJjY19iZSgnWCcsICdSJywgJzEnLCAnNScpIC8qIDE2ICBYUkdCLTUtNS01IEJFICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NjVYIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdSJykgLyogMTYgIFJHQi01LTYtNSBCRSAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjY2NiAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJ0gnKSAvKiAxOCAgQkdSLTYtNi02CSAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjI0ICAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzMnKSAvKiAyNCAgQkdSLTgtOC04ICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMjQgICB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMycpIC8qIDI0ICBSR0ItOC04LTggICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IzMiAgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICc0JykgLyogMzIgIEJHUi04LTgtOC04ICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0FCR1IzMiAgdjRsMl9mb3VyY2MoJ0EnLCAnUicsICcyJywgJzQnKSAvKiAzMiAgQkdSQS04LTgtOC04ICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWEJHUjMyICB2NGwyX2ZvdXJjYygnWCcsICdSJywgJzInLCAnNCcpIC8qIDMyICBCR1JYLTgtOC04LTggICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IzMiAgIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICc0JykgLyogMzIgIFJHQi04LTgtOC04ICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0FSR0IzMiAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcyJywgJzQnKSAvKiAzMiAgQVJHQi04LTgtOC04ICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWFJHQjMyICB2NGwyX2ZvdXJjYygnQicsICdYJywgJzInLCAnNCcpIC8qIDMyICBYUkdCLTgtOC04LTggICovCi0KLS8qIEdyZXkgZm9ybWF0cyAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfR1JFWSAgICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpIC8qICA4ICBHcmV5c2NhbGUgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNCAgICAgIHY0bDJfZm91cmNjKCdZJywgJzAnLCAnNCcsICcgJykgLyogIDQgIEdyZXlzY2FsZSAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1k2ICAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMCcsICc2JywgJyAnKSAvKiAgNiAgR3JleXNjYWxlICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWTEwICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzAnLCAnICcpIC8qIDEwICBHcmV5c2NhbGUgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTIgICAgIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnMicsICcgJykgLyogMTIgIEdyZXlzY2FsZSAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxNiAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICc2JywgJyAnKSAvKiAxNiAgR3JleXNjYWxlICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWTE2X0JFICB2NGwyX2ZvdXJjY19iZSgnWScsICcxJywgJzYnLCAnICcpIC8qIDE2ICBHcmV5c2NhbGUgQkUgICovCi0KLS8qIEdyZXkgYml0LXBhY2tlZCBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTBCUEFDSyAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzAnLCAnQicpIC8qIDEwICBHcmV5c2NhbGUgYml0LXBhY2tlZCAqLwotCi0vKiBQYWxldHRlIGZvcm1hdHMgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1BBTDggICAgdjRsMl9mb3VyY2MoJ1AnLCAnQScsICdMJywgJzgnKSAvKiAgOCAgOC1iaXQgcGFsZXR0ZSAqLwotCi0vKiBDaHJvbWluYW5jZSBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9VVjggICAgIHY0bDJfZm91cmNjKCdVJywgJ1YnLCAnOCcsICcgJykgLyogIDggIFVWIDQ6NCAqLwotCi0vKiBMdW1pbmFuY2UrQ2hyb21pbmFuY2UgZm9ybWF0cyAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDEwICB2NGwyX2ZvdXJjYygnWScsICdWJywgJ1UnLCAnOScpIC8qICA5ICBZVlUgNDoxOjAgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVlU0MjAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnMScsICcyJykgLyogMTIgIFlWVSA0OjI6MCAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVWVYgICAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdZJywgJ1YnKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVlVViAgICB2NGwyX2ZvdXJjYygnWScsICdZJywgJ1UnLCAnVicpIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVllVICAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnWScsICdVJykgLyogMTYgWVZVIDQ6MjoyICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9VWVZZICAgIHY0bDJfZm91cmNjKCdVJywgJ1knLCAnVicsICdZJykgLyogMTYgIFlVViA0OjI6MiAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1ZZVVkgICAgdjRsMl9mb3VyY2MoJ1YnLCAnWScsICdVJywgJ1knKSAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDIyUCB2NGwyX2ZvdXJjYygnNCcsICcyJywgJzInLCAnUCcpIC8qIDE2ICBZVlU0MjIgcGxhbmFyICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTFQIHY0bDJfZm91cmNjKCc0JywgJzEnLCAnMScsICdQJykgLyogMTYgIFlWVTQxMSBwbGFuYXIgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1k0MVAgICAgdjRsMl9mb3VyY2MoJ1knLCAnNCcsICcxJywgJ1AnKSAvKiAxMiAgWVVWIDQ6MToxICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDQ0ICB2NGwyX2ZvdXJjYygnWScsICc0JywgJzQnLCAnNCcpIC8qIDE2ICB4eHh4eXl5eSB1dXV1dnZ2diAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNTU1ICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnTycpIC8qIDE2ICBZVVYtNS01LTUgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY1NjUgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdQJykgLyogMTYgIFlVVi01LTYtNSAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjMyICAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJzQnKSAvKiAzMiAgWVVWLTgtOC04LTggICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDEwICB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnOScpIC8qICA5ICBZVVYgNDoxOjAgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjAgIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnMScsICcyJykgLyogMTIgIFlVViA0OjI6MCAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0hJMjQwICAgdjRsMl9mb3VyY2MoJ0gnLCAnSScsICcyJywgJzQnKSAvKiAgOCAgOC1iaXQgY29sb3IgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfSE0xMiAgICB2NGwyX2ZvdXJjYygnSCcsICdNJywgJzEnLCAnMicpIC8qICA4ICBZVVYgNDoyOjAgMTZ4MTYgbWFjcm9ibG9ja3MgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX000MjAgICAgdjRsMl9mb3VyY2MoJ00nLCAnNCcsICcyJywgJzAnKSAvKiAxMiAgWVVWIDQ6MjowIDIgbGluZXMgeSwgMSBsaW5lIHV2IGludGVybGVhdmVkICovCi0KLS8qIHR3byBwbGFuZXMgLS0gb25lIFksIG9uZSBDciArIENiIGludGVybGVhdmVkICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMiAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzEnLCAnMicpIC8qIDEyICBZL0NiQ3IgNDoyOjAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjIxICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMicsICcxJykgLyogMTIgIFkvQ3JDYiA0OjI6MCAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTYgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcxJywgJzYnKSAvKiAxNiAgWS9DYkNyIDQ6MjoyICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfTlY2MSAgICB2NGwyX2ZvdXJjYygnTicsICdWJywgJzYnLCAnMScpIC8qIDE2ICBZL0NyQ2IgNDoyOjIgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjI0ICAgIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMicsICc0JykgLyogMjQgIFkvQ2JDciA0OjQ6NCAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNDIgICAgdjRsMl9mb3VyY2MoJ04nLCAnVicsICc0JywgJzInKSAvKiAyNCAgWS9DckNiIDQ6NDo0ICAqLwotCi0vKiB0d28gbm9uIGNvbnRpZ3VvdXMgcGxhbmVzIC0gb25lIFksIG9uZSBDciArIENiIGludGVybGVhdmVkICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMk0gICB2NGwyX2ZvdXJjYygnTicsICdNJywgJzEnLCAnMicpIC8qIDEyICBZL0NiQ3IgNDoyOjAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjIxTSAgIHY0bDJfZm91cmNjKCdOJywgJ00nLCAnMicsICcxJykgLyogMjEgIFkvQ3JDYiA0OjI6MCAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTZNICAgdjRsMl9mb3VyY2MoJ04nLCAnTScsICcxJywgJzYnKSAvKiAxNiAgWS9DYkNyIDQ6MjoyICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfTlY2MU0gICB2NGwyX2ZvdXJjYygnTicsICdNJywgJzYnLCAnMScpIC8qIDE2ICBZL0NyQ2IgNDoyOjIgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyTVQgIHY0bDJfZm91cmNjKCdUJywgJ00nLCAnMScsICcyJykgLyogMTIgIFkvQ2JDciA0OjI6MCA2NHgzMiBtYWNyb2Jsb2NrcyAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMk1UXzE2WDE2IHY0bDJfZm91cmNjKCdWJywgJ00nLCAnMScsICcyJykgLyogMTIgIFkvQ2JDciA0OjI6MCAxNngxNiBtYWNyb2Jsb2NrcyAqLwotCi0vKiB0aHJlZSBub24gY29udGlndW91cyBwbGFuZXMgLSBZLCBDYiwgQ3IgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyME0gdjRsMl9mb3VyY2MoJ1knLCAnTScsICcxJywgJzInKSAvKiAxMiAgWVVWNDIwIHBsYW5hciAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDIwTSB2NGwyX2ZvdXJjYygnWScsICdNJywgJzInLCAnMScpIC8qIDEyICBZVlU0MjAgcGxhbmFyICovCi0KLS8qIEJheWVyIGZvcm1hdHMgLSBzZWUgaHR0cDovL3d3dy5zaWxpY29uaW1hZ2luZy5jb20vUkdCJTIwQmF5ZXIuaHRtICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjggIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnOCcsICcxJykgLyogIDggIEJHQkcuLiBHUkdSLi4gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHOCAgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICdSJywgJ0cnKSAvKiAgOCAgR0JHQi4uIFJHUkcuLiAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkc4ICB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0InLCAnRycpIC8qICA4ICBHUkdSLi4gQkdCRy4uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjggIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnRycsICdCJykgLyogIDggIFJHUkcuLiBHQkdCLi4gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSMTAgdjRsMl9mb3VyY2MoJ0InLCAnRycsICcxJywgJzAnKSAvKiAxMCAgQkdCRy4uIEdSR1IuLiAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMCB2NGwyX2ZvdXJjYygnRycsICdCJywgJzEnLCAnMCcpIC8qIDEwICBHQkdCLi4gUkdSRy4uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnMScsICcwJykgLyogMTAgIEdSR1IuLiBCR0JHLi4gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NSR0dCMTAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICcxJywgJzAnKSAvKiAxMCAgUkdSRy4uIEdCR0IuLiAqLwotCS8qIDEwYml0IHJhdyBiYXllciBwYWNrZWQsIDUgYnl0ZXMgZm9yIGV2ZXJ5IDQgcGl4ZWxzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEwUCB2NGwyX2ZvdXJjYygncCcsICdCJywgJ0EnLCAnQScpCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzEwUCB2NGwyX2ZvdXJjYygncCcsICdHJywgJ0EnLCAnQScpCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwUCB2NGwyX2ZvdXJjYygncCcsICdnJywgJ0EnLCAnQScpCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEwUCB2NGwyX2ZvdXJjYygncCcsICdSJywgJ0EnLCAnQScpCi0JLyogMTBiaXQgcmF3IGJheWVyIGEtbGF3IGNvbXByZXNzZWQgdG8gOCBiaXRzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEwQUxBVzggdjRsMl9mb3VyY2MoJ2EnLCAnQicsICdBJywgJzgnKQotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMEFMQVc4IHY0bDJfZm91cmNjKCdhJywgJ0cnLCAnQScsICc4JykKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTBBTEFXOCB2NGwyX2ZvdXJjYygnYScsICdnJywgJ0EnLCAnOCcpCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEwQUxBVzggdjRsMl9mb3VyY2MoJ2EnLCAnUicsICdBJywgJzgnKQotCS8qIDEwYml0IHJhdyBiYXllciBEUENNIGNvbXByZXNzZWQgdG8gOCBiaXRzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEwRFBDTTggdjRsMl9mb3VyY2MoJ2InLCAnQicsICdBJywgJzgnKQotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMERQQ004IHY0bDJfZm91cmNjKCdiJywgJ0cnLCAnQScsICc4JykKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCB2NGwyX2ZvdXJjYygnQicsICdEJywgJzEnLCAnMCcpCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEwRFBDTTggdjRsMl9mb3VyY2MoJ2InLCAnUicsICdBJywgJzgnKQotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMiB2NGwyX2ZvdXJjYygnQicsICdHJywgJzEnLCAnMicpIC8qIDEyICBCR0JHLi4gR1JHUi4uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzEyIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnMScsICcyJykgLyogMTIgIEdCR0IuLiBSR1JHLi4gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTIgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzInKSAvKiAxMiAgR1JHUi4uIEJHQkcuLiAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMiB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMicpIC8qIDEyICBSR1JHLi4gR0JHQi4uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjE2IHY0bDJfZm91cmNjKCdCJywgJ1knLCAnUicsICcyJykgLyogMTYgIEJHQkcuLiBHUkdSLi4gKi8KLQotLyogY29tcHJlc3NlZCBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9NSlBFRyAgICB2NGwyX2ZvdXJjYygnTScsICdKJywgJ1AnLCAnRycpIC8qIE1vdGlvbi1KUEVHICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0pQRUcgICAgIHY0bDJfZm91cmNjKCdKJywgJ1AnLCAnRScsICdHJykgLyogSkZJRiBKUEVHICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfRFYgICAgICAgdjRsMl9mb3VyY2MoJ2QnLCAndicsICdzJywgJ2QnKSAvKiAxMzk0ICAgICAgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHICAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0UnLCAnRycpIC8qIE1QRUctMS8yLzQgTXVsdGlwbGV4ZWQgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjQgICAgIHY0bDJfZm91cmNjKCdIJywgJzInLCAnNicsICc0JykgLyogSDI2NCB3aXRoIHN0YXJ0IGNvZGVzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjY0X05PX1NDIHY0bDJfZm91cmNjKCdBJywgJ1YnLCAnQycsICcxJykgLyogSDI2NCB3aXRob3V0IHN0YXJ0IGNvZGVzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjY0X01WQyB2NGwyX2ZvdXJjYygnTScsICcyJywgJzYnLCAnNCcpIC8qIEgyNjQgTVZDICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9IMjYzICAgICB2NGwyX2ZvdXJjYygnSCcsICcyJywgJzYnLCAnMycpIC8qIEgyNjMgICAgICAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcxICAgIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRycsICcxJykgLyogTVBFRy0xIEVTICAgICAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRzIgICAgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdHJywgJzInKSAvKiBNUEVHLTIgRVMgICAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHNCAgICB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnNCcpIC8qIE1QRUctNCBwYXJ0IDIgRVMgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1hWSUQgICAgIHY0bDJfZm91cmNjKCdYJywgJ1YnLCAnSScsICdEJykgLyogWHZpZCAgICAgICAgICAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1ZDMV9BTk5FWF9HIHY0bDJfZm91cmNjKCdWJywgJ0MnLCAnMScsICdHJykgLyogU01QVEUgNDIxTSBBbm5leCBHIGNvbXBsaWFudCBzdHJlYW0gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1ZDMV9BTk5FWF9MIHY0bDJfZm91cmNjKCdWJywgJ0MnLCAnMScsICdMJykgLyogU01QVEUgNDIxTSBBbm5leCBMIGNvbXBsaWFudCBzdHJlYW0gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1ZQOCAgICAgIHY0bDJfZm91cmNjKCdWJywgJ1AnLCAnOCcsICcwJykgLyogVlA4ICovCi0KLS8qICBWZW5kb3Itc3BlY2lmaWMgZm9ybWF0cyAgICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9DUElBMSAgICB2NGwyX2ZvdXJjYygnQycsICdQJywgJ0knLCAnQScpIC8qIGNwaWExIFlVViAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfV05WQSAgICAgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKSAvKiBXaW5ub3YgaHcgY29tcHJlc3MgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMxMFggIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgLyogU045QzEweCBjb21wcmVzc2lvbiAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMicsICcwJykgLyogU045QzIweCBZVVYgNDoyOjAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzEgICAgIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcxJykgLyogcHdjIG9sZGVyIHdlYmNhbSAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMiAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnVycsICdDJywgJzInKSAvKiBwd2MgbmV3ZXIgd2ViY2FtICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsICc2JywgJzInLCAnNScpIC8qIEVUNjFYMjUxIGNvbXByZXNzaW9uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTAxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnMScpIC8qIFlVWVYgcGVyIGxpbmUgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDUgIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc1JykgLyogWVlVViBwZXIgbGluZSAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTUwOCAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzgnKSAvKiBZVVZZIHBlciBsaW5lICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTYxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFDMjA3ICAgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX01SOTczMTBBIHY0bDJfZm91cmNjKCdNJywgJzMnLCAnMScsICcwJykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9KTDIwMDVCQ0QgdjRsMl9mb3VyY2MoJ0onLCAnTCcsICcyJywgJzAnKSAvKiBjb21wcmVzc2VkIFJHR0IgYmF5ZXIgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMyMDI4IHY0bDJfZm91cmNjKCdTJywgJ08nLCAnTicsICdYJykgLyogY29tcHJlc3NlZCBHQlJHIGJheWVyICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUTkwNUMgICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnSicsICdQJywgJ0cnKSAvKiBQaXhhcnQgNzN4eCBKUEVHICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxMSAgICB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnMScpIC8qIG92NTExIEpQRUcgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX09WNTE4ICAgIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICc4JykgLyogb3Y1MTggSlBFRyAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU1RWMDY4MCAgdjRsMl9mb3VyY2MoJ1MnLCAnNicsICc4JywgJzAnKSAvKiBzdHYwNjgwIGJheWVyICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9UTTYwMDAgICB2NGwyX2ZvdXJjYygnVCcsICdNJywgJzYnLCAnMCcpIC8qIHRtNTYwMC90bTYweDAgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVkgdjRsMl9mb3VyY2MoJ0MnLCAnSScsICdUJywgJ1YnKSAvKiBvbmUgbGluZSBvZiBZIHRoZW4gMSBsaW5lIG9mIFZZVVkgKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0tPTklDQTQyMCAgdjRsMl9mb3VyY2MoJ0snLCAnTycsICdOJywgJ0knKSAvKiBZVVY0MjAgcGxhbmFyIGluIGJsb2NrcyBvZiAyNTYgcGl4ZWxzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9KUEdMCXY0bDJfZm91cmNjKCdKJywgJ1AnLCAnRycsICdMJykgLyogSlBFRy1MaXRlICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TRTQwMSAgICAgIHY0bDJfZm91cmNjKCdTJywgJzQnLCAnMCcsICcxJykgLyogc2U0MDEgamFuZ2d1IGNvbXByZXNzZWQgcmdiICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TNUNfVVlWWV9KUEcgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICdDJywgJ0knKSAvKiBTNUM3M00zIGludGVybGVhdmVkIFVZVlkvSlBFRyAqLwotCi0vKiBTRFIgZm9ybWF0cyAtIHVzZWQgb25seSBmb3IgU29mdHdhcmUgRGVmaW5lZCBSYWRpbyBkZXZpY2VzICovCi0jZGVmaW5lIFY0TDJfU0RSX0ZNVF9DVTggICAgICAgICAgdjRsMl9mb3VyY2MoJ0MnLCAnVScsICcwJywgJzgnKSAvKiBJUSB1OCAqLwotI2RlZmluZSBWNEwyX1NEUl9GTVRfQ1UxNkxFICAgICAgIHY0bDJfZm91cmNjKCdDJywgJ1UnLCAnMScsICc2JykgLyogSVEgdTE2bGUgKi8KLSNkZWZpbmUgVjRMMl9TRFJfRk1UX0NTOCAgICAgICAgICB2NGwyX2ZvdXJjYygnQycsICdTJywgJzAnLCAnOCcpIC8qIGNvbXBsZXggczggKi8KLSNkZWZpbmUgVjRMMl9TRFJfRk1UX0NTMTRMRSAgICAgICB2NGwyX2ZvdXJjYygnQycsICdTJywgJzEnLCAnNCcpIC8qIGNvbXBsZXggczE0bGUgKi8KLSNkZWZpbmUgVjRMMl9TRFJfRk1UX1JVMTJMRSAgICAgICB2NGwyX2ZvdXJjYygnUicsICdVJywgJzEnLCAnMicpIC8qIHJlYWwgdTEybGUgKi8KLQotLyogcHJpdiBmaWVsZCB2YWx1ZSB0byBpbmRpY2F0ZXMgdGhhdCBzdWJzZXF1ZW50IGZpZWxkcyBhcmUgdmFsaWQuICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9QUklWX01BR0lDCQkweGZlZWRjYWZlCi0KLS8qIEZsYWdzICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9GTEFHX1BSRU1VTF9BTFBIQQkweDAwMDAwMDAxCi0KLS8qCi0gKglGIE8gUiBNIEEgVCAgIEUgTiBVIE0gRSBSIEEgVCBJIE8gTgotICovCi1zdHJ1Y3QgdjRsMl9mbXRkZXNjIHsKLQlfX3UzMgkJICAgIGluZGV4OyAgICAgICAgICAgICAvKiBGb3JtYXQgbnVtYmVyICAgICAgKi8KLQlfX3UzMgkJICAgIHR5cGU7ICAgICAgICAgICAgICAvKiBlbnVtIHY0bDJfYnVmX3R5cGUgKi8KLQlfX3UzMiAgICAgICAgICAgICAgIGZsYWdzOwotCV9fdTgJCSAgICBkZXNjcmlwdGlvblszMl07ICAgLyogRGVzY3JpcHRpb24gc3RyaW5nICovCi0JX191MzIJCSAgICBwaXhlbGZvcm1hdDsgICAgICAgLyogRm9ybWF0IGZvdXJjYyAgICAgICovCi0JX191MzIJCSAgICByZXNlcnZlZFs0XTsKLX07Ci0KLSNkZWZpbmUgVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEIDB4MDAwMQotI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEICAgMHgwMDAyCi0KLSNpZiAxCi0JLyogRXhwZXJpbWVudGFsIEZyYW1lIFNpemUgYW5kIGZyYW1lIHJhdGUgZW51bWVyYXRpb24gKi8KLS8qCi0gKglGIFIgQSBNIEUgICBTIEkgWiBFICAgRSBOIFUgTSBFIFIgQSBUIEkgTyBOCi0gKi8KLWVudW0gdjRsMl9mcm1zaXpldHlwZXMgewotCVY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFCT0gMSwKLQlWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTCT0gMiwKLQlWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRQk9IDMsCi19OwotCi1zdHJ1Y3QgdjRsMl9mcm1zaXplX2Rpc2NyZXRlIHsKLQlfX3UzMgkJCXdpZHRoOwkJLyogRnJhbWUgd2lkdGggW3BpeGVsXSAqLwotCV9fdTMyCQkJaGVpZ2h0OwkJLyogRnJhbWUgaGVpZ2h0IFtwaXhlbF0gKi8KLX07Ci0KLXN0cnVjdCB2NGwyX2ZybXNpemVfc3RlcHdpc2UgewotCV9fdTMyCQkJbWluX3dpZHRoOwkvKiBNaW5pbXVtIGZyYW1lIHdpZHRoIFtwaXhlbF0gKi8KLQlfX3UzMgkJCW1heF93aWR0aDsJLyogTWF4aW11bSBmcmFtZSB3aWR0aCBbcGl4ZWxdICovCi0JX191MzIJCQlzdGVwX3dpZHRoOwkvKiBGcmFtZSB3aWR0aCBzdGVwIHNpemUgW3BpeGVsXSAqLwotCV9fdTMyCQkJbWluX2hlaWdodDsJLyogTWluaW11bSBmcmFtZSBoZWlnaHQgW3BpeGVsXSAqLwotCV9fdTMyCQkJbWF4X2hlaWdodDsJLyogTWF4aW11bSBmcmFtZSBoZWlnaHQgW3BpeGVsXSAqLwotCV9fdTMyCQkJc3RlcF9oZWlnaHQ7CS8qIEZyYW1lIGhlaWdodCBzdGVwIHNpemUgW3BpeGVsXSAqLwotfTsKLQotc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gewotCV9fdTMyCQkJaW5kZXg7CQkvKiBGcmFtZSBzaXplIG51bWJlciAqLwotCV9fdTMyCQkJcGl4ZWxfZm9ybWF0OwkvKiBQaXhlbCBmb3JtYXQgKi8KLQlfX3UzMgkJCXR5cGU7CQkvKiBGcmFtZSBzaXplIHR5cGUgdGhlIGRldmljZSBzdXBwb3J0cy4gKi8KLQotCXVuaW9uIHsJCQkJCS8qIEZyYW1lIHNpemUgKi8KLQkJc3RydWN0IHY0bDJfZnJtc2l6ZV9kaXNjcmV0ZQlkaXNjcmV0ZTsKLQkJc3RydWN0IHY0bDJfZnJtc2l6ZV9zdGVwd2lzZQlzdGVwd2lzZTsKLQl9OwotCi0JX191MzIgICByZXNlcnZlZFsyXTsJCQkvKiBSZXNlcnZlZCBzcGFjZSBmb3IgZnV0dXJlIHVzZSAqLwotfTsKLQotLyoKLSAqCUYgUiBBIE0gRSAgIFIgQSBUIEUgICBFIE4gVSBNIEUgUiBBIFQgSSBPIE4KLSAqLwotZW51bSB2NGwyX2ZybWl2YWx0eXBlcyB7Ci0JVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEUJPSAxLAotCVY0TDJfRlJNSVZBTF9UWVBFX0NPTlRJTlVPVVMJPSAyLAotCVY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFCT0gMywKLX07Ci0KLXN0cnVjdCB2NGwyX2ZybWl2YWxfc3RlcHdpc2UgewotCXN0cnVjdCB2NGwyX2ZyYWN0CW1pbjsJCS8qIE1pbmltdW0gZnJhbWUgaW50ZXJ2YWwgW3NdICovCi0Jc3RydWN0IHY0bDJfZnJhY3QJbWF4OwkJLyogTWF4aW11bSBmcmFtZSBpbnRlcnZhbCBbc10gKi8KLQlzdHJ1Y3QgdjRsMl9mcmFjdAlzdGVwOwkJLyogRnJhbWUgaW50ZXJ2YWwgc3RlcCBzaXplIFtzXSAqLwotfTsKLQotc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gewotCV9fdTMyCQkJaW5kZXg7CQkvKiBGcmFtZSBmb3JtYXQgaW5kZXggKi8KLQlfX3UzMgkJCXBpeGVsX2Zvcm1hdDsJLyogUGl4ZWwgZm9ybWF0ICovCi0JX191MzIJCQl3aWR0aDsJCS8qIEZyYW1lIHdpZHRoICovCi0JX191MzIJCQloZWlnaHQ7CQkvKiBGcmFtZSBoZWlnaHQgKi8KLQlfX3UzMgkJCXR5cGU7CQkvKiBGcmFtZSBpbnRlcnZhbCB0eXBlIHRoZSBkZXZpY2Ugc3VwcG9ydHMuICovCi0KLQl1bmlvbiB7CQkJCQkvKiBGcmFtZSBpbnRlcnZhbCAqLwotCQlzdHJ1Y3QgdjRsMl9mcmFjdAkJZGlzY3JldGU7Ci0JCXN0cnVjdCB2NGwyX2ZybWl2YWxfc3RlcHdpc2UJc3RlcHdpc2U7Ci0JfTsKLQotCV9fdTMyCXJlc2VydmVkWzJdOwkJCS8qIFJlc2VydmVkIHNwYWNlIGZvciBmdXR1cmUgdXNlICovCi19OwotI2VuZGlmCi0KLS8qCi0gKglUIEkgTSBFIEMgTyBEIEUKLSAqLwotc3RydWN0IHY0bDJfdGltZWNvZGUgewotCV9fdTMyCXR5cGU7Ci0JX191MzIJZmxhZ3M7Ci0JX191OAlmcmFtZXM7Ci0JX191OAlzZWNvbmRzOwotCV9fdTgJbWludXRlczsKLQlfX3U4CWhvdXJzOwotCV9fdTgJdXNlcmJpdHNbNF07Ci19OwotCi0vKiAgVHlwZSAgKi8KLSNkZWZpbmUgVjRMMl9UQ19UWVBFXzI0RlBTCQkxCi0jZGVmaW5lIFY0TDJfVENfVFlQRV8yNUZQUwkJMgotI2RlZmluZSBWNEwyX1RDX1RZUEVfMzBGUFMJCTMKLSNkZWZpbmUgVjRMMl9UQ19UWVBFXzUwRlBTCQk0Ci0jZGVmaW5lIFY0TDJfVENfVFlQRV82MEZQUwkJNQotCi0vKiAgRmxhZ3MgICovCi0jZGVmaW5lIFY0TDJfVENfRkxBR19EUk9QRlJBTUUJCTB4MDAwMSAvKiAiZHJvcC1mcmFtZSIgbW9kZSAqLwotI2RlZmluZSBWNEwyX1RDX0ZMQUdfQ09MT1JGUkFNRQkJMHgwMDAyCi0jZGVmaW5lIFY0TDJfVENfVVNFUkJJVFNfZmllbGQJCTB4MDAwQwotI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX1VTRVJERUZJTkVECTB4MDAwMAotI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTXzhCSVRDSEFSUwkweDAwMDgKLS8qIFRoZSBhYm92ZSBpcyBiYXNlZCBvbiBTTVBURSB0aW1lY29kZXMgKi8KLQotc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIHsKLQlpbnQgcXVhbGl0eTsKLQotCWludCAgQVBQbjsgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBBUFAgc2VnbWVudCB0byBiZSB3cml0dGVuLAotCQkJCSAqIG11c3QgYmUgMC4uMTUgKi8KLQlpbnQgIEFQUF9sZW47ICAgICAgICAgICAvKiBMZW5ndGggb2YgZGF0YSBpbiBKUEVHIEFQUG4gc2VnbWVudCAqLwotCWNoYXIgQVBQX2RhdGFbNjBdOyAgICAgIC8qIERhdGEgaW4gdGhlIEpQRUcgQVBQbiBzZWdtZW50LiAqLwotCi0JaW50ICBDT01fbGVuOyAgICAgICAgICAgLyogTGVuZ3RoIG9mIGRhdGEgaW4gSlBFRyBDT00gc2VnbWVudCAqLwotCWNoYXIgQ09NX2RhdGFbNjBdOyAgICAgIC8qIERhdGEgaW4gSlBFRyBDT00gc2VnbWVudCAqLwotCi0JX191MzIganBlZ19tYXJrZXJzOyAgICAgLyogV2hpY2ggbWFya2VycyBzaG91bGQgZ28gaW50byB0aGUgSlBFRwotCQkJCSAqIG91dHB1dC4gVW5sZXNzIHlvdSBleGFjdGx5IGtub3cgd2hhdAotCQkJCSAqIHlvdSBkbywgbGVhdmUgdGhlbSB1bnRvdWNoZWQuCi0JCQkJICogSW5jbHVkaW5nIGxlc3MgbWFya2VycyB3aWxsIG1ha2UgdGhlCi0JCQkJICogcmVzdWx0aW5nIGNvZGUgc21hbGxlciwgYnV0IHRoZXJlIHdpbGwKLQkJCQkgKiBiZSBmZXdlciBhcHBsaWNhdGlvbnMgd2hpY2ggY2FuIHJlYWQgaXQuCi0JCQkJICogVGhlIHByZXNlbmNlIG9mIHRoZSBBUFAgYW5kIENPTSBtYXJrZXIKLQkJCQkgKiBpcyBpbmZsdWVuY2VkIGJ5IEFQUF9sZW4gYW5kIENPTV9sZW4KLQkJCQkgKiBPTkxZLCBub3QgYnkgdGhpcyBwcm9wZXJ0eSEgKi8KLQotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RIVCAoMTw8MykgICAgLyogRGVmaW5lIEh1ZmZtYW4gVGFibGVzICovCi0jZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFFUICgxPDw0KSAgICAvKiBEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlcyAqLwotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkgICAgLyogRGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWwgKi8KLSNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpICAgIC8qIENvbW1lbnQgc2VnbWVudCAqLwotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykgICAgLyogQXBwIHNlZ21lbnQsIGRyaXZlciB3aWxsCi0JCQkJCSogYWx3YXlzIHVzZSBBUFAwICovCi19OwotCi0vKgotICoJTSBFIE0gTyBSIFkgLSBNIEEgUCBQIEkgTiBHICAgQiBVIEYgRiBFIFIgUwotICovCi1zdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyB7Ci0JX191MzIJCQljb3VudDsKLQlfX3UzMgkJCXR5cGU7CQkvKiBlbnVtIHY0bDJfYnVmX3R5cGUgKi8KLQlfX3UzMgkJCW1lbW9yeTsJCS8qIGVudW0gdjRsMl9tZW1vcnkgKi8KLQlfX3UzMgkJCXJlc2VydmVkWzJdOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdjRsMl9wbGFuZSAtIHBsYW5lIGluZm8gZm9yIG11bHRpLXBsYW5hciBidWZmZXJzCi0gKiBAYnl0ZXN1c2VkOgkJbnVtYmVyIG9mIGJ5dGVzIG9jY3VwaWVkIGJ5IGRhdGEgaW4gdGhlIHBsYW5lIChwYXlsb2FkKQotICogQGxlbmd0aDoJCXNpemUgb2YgdGhpcyBwbGFuZSAoTk9UIHRoZSBwYXlsb2FkKSBpbiBieXRlcwotICogQG1lbV9vZmZzZXQ6CQl3aGVuIG1lbW9yeSBpbiB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3QgdjRsMl9idWZmZXIgaXMKLSAqCQkJVjRMMl9NRU1PUllfTU1BUCwgZXF1YWxzIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YKLSAqCQkJdGhlIGRldmljZSBtZW1vcnkgZm9yIHRoaXMgcGxhbmUgKG9yIGlzIGEgImNvb2tpZSIgdGhhdAotICoJCQlzaG91bGQgYmUgcGFzc2VkIHRvIG1tYXAoKSBjYWxsZWQgb24gdGhlIHZpZGVvIG5vZGUpCi0gKiBAdXNlcnB0cjoJCXdoZW4gbWVtb3J5IGlzIFY0TDJfTUVNT1JZX1VTRVJQVFIsIGEgdXNlcnNwYWNlIHBvaW50ZXIKLSAqCQkJcG9pbnRpbmcgdG8gdGhpcyBwbGFuZQotICogQGZkOgkJCXdoZW4gbWVtb3J5IGlzIFY0TDJfTUVNT1JZX0RNQUJVRiwgYSB1c2Vyc3BhY2UgZmlsZQotICoJCQlkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBsYW5lCi0gKiBAZGF0YV9vZmZzZXQ6CW9mZnNldCBpbiB0aGUgcGxhbmUgdG8gdGhlIHN0YXJ0IG9mIGRhdGE7IHVzdWFsbHkgMCwKLSAqCQkJdW5sZXNzIHRoZXJlIGlzIGEgaGVhZGVyIGluIGZyb250IG9mIHRoZSBkYXRhCi0gKgotICogTXVsdGktcGxhbmFyIGJ1ZmZlcnMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBwbGFuZXMsIGUuZy4gYW4gWUNiQ3IgYnVmZmVyCi0gKiB3aXRoIHR3byBwbGFuZXMgY2FuIGhhdmUgb25lIHBsYW5lIGZvciBZLCBhbmQgYW5vdGhlciBmb3IgaW50ZXJsZWF2ZWQgQ2JDcgotICogY29tcG9uZW50cy4gRWFjaCBwbGFuZSBjYW4gcmVzaWRlIGluIGEgc2VwYXJhdGUgbWVtb3J5IGJ1ZmZlciwgb3IgZXZlbiBpbgotICogYSBjb21wbGV0ZWx5IHNlcGFyYXRlIG1lbW9yeSBub2RlIChlLmcuIGluIGVtYmVkZGVkIGRldmljZXMpLgotICovCi1zdHJ1Y3QgdjRsMl9wbGFuZSB7Ci0JX191MzIJCQlieXRlc3VzZWQ7Ci0JX191MzIJCQlsZW5ndGg7Ci0JdW5pb24gewotCQlfX3UzMgkJbWVtX29mZnNldDsKLQkJdW5zaWduZWQgbG9uZwl1c2VycHRyOwotCQlfX3MzMgkJZmQ7Ci0JfSBtOwotCV9fdTMyCQkJZGF0YV9vZmZzZXQ7Ci0JX191MzIJCQlyZXNlcnZlZFsxMV07Ci19OwotCi0vKioKLSAqIHN0cnVjdCB2NGwyX2J1ZmZlciAtIHZpZGVvIGJ1ZmZlciBpbmZvCi0gKiBAaW5kZXg6CWlkIG51bWJlciBvZiB0aGUgYnVmZmVyCi0gKiBAdHlwZToJZW51bSB2NGwyX2J1Zl90eXBlOyBidWZmZXIgdHlwZSAodHlwZSA9PSAqX01QTEFORSBmb3IKLSAqCQltdWx0aXBsYW5hciBidWZmZXJzKTsKLSAqIEBieXRlc3VzZWQ6CW51bWJlciBvZiBieXRlcyBvY2N1cGllZCBieSBkYXRhIGluIHRoZSBidWZmZXIgKHBheWxvYWQpOwotICoJCXVudXNlZCAoc2V0IHRvIDApIGZvciBtdWx0aXBsYW5hciBidWZmZXJzCi0gKiBAZmxhZ3M6CWJ1ZmZlciBpbmZvcm1hdGlvbmFsIGZsYWdzCi0gKiBAZmllbGQ6CWVudW0gdjRsMl9maWVsZDsgZmllbGQgb3JkZXIgb2YgdGhlIGltYWdlIGluIHRoZSBidWZmZXIKLSAqIEB0aW1lc3RhbXA6CWZyYW1lIHRpbWVzdGFtcAotICogQHRpbWVjb2RlOglmcmFtZSB0aW1lY29kZQotICogQHNlcXVlbmNlOglzZXF1ZW5jZSBjb3VudCBvZiB0aGlzIGZyYW1lCi0gKiBAbWVtb3J5OgllbnVtIHY0bDJfbWVtb3J5OyB0aGUgbWV0aG9kLCBpbiB3aGljaCB0aGUgYWN0dWFsIHZpZGVvIGRhdGEgaXMKLSAqCQlwYXNzZWQKLSAqIEBvZmZzZXQ6CWZvciBub24tbXVsdGlwbGFuYXIgYnVmZmVycyB3aXRoIG1lbW9yeSA9PSBWNEwyX01FTU9SWV9NTUFQOwotICoJCW9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGV2aWNlIG1lbW9yeSBmb3IgdGhpcyBwbGFuZSwKLSAqCQkob3IgYSAiY29va2llIiB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gbW1hcCgpIGFzIG9mZnNldCkKLSAqIEB1c2VycHRyOglmb3Igbm9uLW11bHRpcGxhbmFyIGJ1ZmZlcnMgd2l0aCBtZW1vcnkgPT0gVjRMMl9NRU1PUllfVVNFUlBUUjsKLSAqCQlhIHVzZXJzcGFjZSBwb2ludGVyIHBvaW50aW5nIHRvIHRoaXMgYnVmZmVyCi0gKiBAZmQ6CQlmb3Igbm9uLW11bHRpcGxhbmFyIGJ1ZmZlcnMgd2l0aCBtZW1vcnkgPT0gVjRMMl9NRU1PUllfRE1BQlVGOwotICoJCWEgdXNlcnNwYWNlIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBidWZmZXIKLSAqIEBwbGFuZXM6CWZvciBtdWx0aXBsYW5hciBidWZmZXJzOyB1c2Vyc3BhY2UgcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgcGxhbmUKLSAqCQlpbmZvIHN0cnVjdHMgZm9yIHRoaXMgYnVmZmVyCi0gKiBAbGVuZ3RoOglzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgKE5PVCBpdHMgcGF5bG9hZCkgZm9yIHNpbmdsZS1wbGFuZQotICoJCWJ1ZmZlcnMgKHdoZW4gdHlwZSAhPSAqX01QTEFORSk7IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUKLSAqCQlwbGFuZXMgYXJyYXkgZm9yIG11bHRpLXBsYW5lIGJ1ZmZlcnMKLSAqCi0gKiBDb250YWlucyBkYXRhIGV4Y2hhbmdlZCBieSBhcHBsaWNhdGlvbiBhbmQgZHJpdmVyIHVzaW5nIG9uZSBvZiB0aGUgU3RyZWFtaW5nCi0gKiBJL08gbWV0aG9kcy4KLSAqLwotc3RydWN0IHY0bDJfYnVmZmVyIHsKLQlfX3UzMgkJCWluZGV4OwotCV9fdTMyCQkJdHlwZTsKLQlfX3UzMgkJCWJ5dGVzdXNlZDsKLQlfX3UzMgkJCWZsYWdzOwotCV9fdTMyCQkJZmllbGQ7Ci0Jc3RydWN0IHRpbWV2YWwJCXRpbWVzdGFtcDsKLQlzdHJ1Y3QgdjRsMl90aW1lY29kZQl0aW1lY29kZTsKLQlfX3UzMgkJCXNlcXVlbmNlOwotCi0JLyogbWVtb3J5IGxvY2F0aW9uICovCi0JX191MzIJCQltZW1vcnk7Ci0JdW5pb24gewotCQlfX3UzMiAgICAgICAgICAgb2Zmc2V0OwotCQl1bnNpZ25lZCBsb25nICAgdXNlcnB0cjsKLQkJc3RydWN0IHY0bDJfcGxhbmUgKnBsYW5lczsKLQkJX19zMzIJCWZkOwotCX0gbTsKLQlfX3UzMgkJCWxlbmd0aDsKLQlfX3UzMgkJCXJlc2VydmVkMjsKLQlfX3UzMgkJCXJlc2VydmVkOwotfTsKLQotLyogIEZsYWdzIGZvciAnZmxhZ3MnIGZpZWxkICovCi0vKiBCdWZmZXIgaXMgbWFwcGVkIChmbGFnKSAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX01BUFBFRAkJCTB4MDAwMDAwMDEKLS8qIEJ1ZmZlciBpcyBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19RVUVVRUQJCQkweDAwMDAwMDAyCi0vKiBCdWZmZXIgaXMgcmVhZHkgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19ET05FCQkJMHgwMDAwMDAwNAotLyogSW1hZ2UgaXMgYSBrZXlmcmFtZSAoSS1mcmFtZSkgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19LRVlGUkFNRQkJCTB4MDAwMDAwMDgKLS8qIEltYWdlIGlzIGEgUC1mcmFtZSAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1BGUkFNRQkJCTB4MDAwMDAwMTAKLS8qIEltYWdlIGlzIGEgQi1mcmFtZSAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRQkJCTB4MDAwMDAwMjAKLS8qIEJ1ZmZlciBpcyByZWFkeSwgYnV0IHRoZSBkYXRhIGNvbnRhaW5lZCB3aXRoaW4gaXMgY29ycnVwdGVkLiAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX0VSUk9SCQkJMHgwMDAwMDA0MAotLyogdGltZWNvZGUgZmllbGQgaXMgdmFsaWQgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERQkJCTB4MDAwMDAxMDAKLS8qIEJ1ZmZlciBpcyBwcmVwYXJlZCBmb3IgcXVldWluZyAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1BSRVBBUkVECQkJMHgwMDAwMDQwMAotLyogQ2FjaGUgaGFuZGxpbmcgZmxhZ3MgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19OT19DQUNIRV9JTlZBTElEQVRFCTB4MDAwMDA4MDAKLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19OT19DQUNIRV9DTEVBTgkJMHgwMDAwMTAwMAotLyogVGltZXN0YW1wIHR5cGUgKi8KLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTUFTSwkJMHgwMDAwZTAwMAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9VTktOT1dOCQkweDAwMDAwMDAwCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQwkweDAwMDAyMDAwCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFkJCTB4MDAwMDQwMDAKLS8qIFRpbWVzdGFtcCBzb3VyY2VzLiAqLwotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RTVEFNUF9TUkNfTUFTSwkJMHgwMDA3MDAwMAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RTVEFNUF9TUkNfRU9GCQkweDAwMDAwMDAwCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVFNUQU1QX1NSQ19TT0UJCTB4MDAwMTAwMDAKLS8qIG1lbTJtZW0gZW5jb2Rlci9kZWNvZGVyICovCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTEFTVAkJCTB4MDAxMDAwMDAKLQotLyoqCi0gKiBzdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIgLSBleHBvcnQgb2YgdmlkZW8gYnVmZmVyIGFzIERNQUJVRiBmaWxlIGRlc2NyaXB0b3IKLSAqCi0gKiBAaW5kZXg6CWlkIG51bWJlciBvZiB0aGUgYnVmZmVyCi0gKiBAdHlwZToJZW51bSB2NGwyX2J1Zl90eXBlOyBidWZmZXIgdHlwZSAodHlwZSA9PSAqX01QTEFORSBmb3IKLSAqCQltdWx0aXBsYW5hciBidWZmZXJzKTsKLSAqIEBwbGFuZToJaW5kZXggb2YgdGhlIHBsYW5lIHRvIGJlIGV4cG9ydGVkLCAwIGZvciBzaW5nbGUgcGxhbmUgcXVldWVzCi0gKiBAZmxhZ3M6CWZsYWdzIGZvciBuZXdseSBjcmVhdGVkIGZpbGUsIGN1cnJlbnRseSBvbmx5IE9fQ0xPRVhFQyBpcwotICoJCXN1cHBvcnRlZCwgcmVmZXIgdG8gbWFudWFsIG9mIG9wZW4gc3lzY2FsbCBmb3IgbW9yZSBkZXRhaWxzCi0gKiBAZmQ6CQlmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIERNQUJVRiAoc2V0IGJ5IGRyaXZlcikKLSAqCi0gKiBDb250YWlucyBkYXRhIHVzZWQgZm9yIGV4cG9ydGluZyBhIHZpZGVvIGJ1ZmZlciBhcyBETUFCVUYgZmlsZSBkZXNjcmlwdG9yLgotICogVGhlIGJ1ZmZlciBpcyBpZGVudGlmaWVkIGJ5IGEgJ2Nvb2tpZScgcmV0dXJuZWQgYnkgVklESU9DX1FVRVJZQlVGCi0gKiAoaWRlbnRpY2FsIHRvIHRoZSBjb29raWUgdXNlZCB0byBtbWFwKCkgdGhlIGJ1ZmZlciB0byB1c2Vyc3BhY2UpLiBBbGwKLSAqIHJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHNldCB0byB6ZXJvLiBUaGUgZmllbGQgcmVzZXJ2ZWQwIGlzIGV4cGVjdGVkIHRvCi0gKiBiZWNvbWUgYSBzdHJ1Y3R1cmUgJ3R5cGUnIGFsbG93aW5nIGFuIGFsdGVybmF0aXZlIGxheW91dCBvZiB0aGUgc3RydWN0dXJlCi0gKiBjb250ZW50LiBUaGVyZWZvcmUgdGhpcyBmaWVsZCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGFueSBvdGhlciBleHRlbnNpb25zLgotICovCi1zdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIgewotCV9fdTMyCQl0eXBlOyAvKiBlbnVtIHY0bDJfYnVmX3R5cGUgKi8KLQlfX3UzMgkJaW5kZXg7Ci0JX191MzIJCXBsYW5lOwotCV9fdTMyCQlmbGFnczsKLQlfX3MzMgkJZmQ7Ci0JX191MzIJCXJlc2VydmVkWzExXTsKLX07Ci0KLS8qCi0gKglPIFYgRSBSIEwgQSBZICAgUCBSIEUgViBJIEUgVwotICovCi1zdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciB7Ci0JX191MzIJCQljYXBhYmlsaXR5OwotCV9fdTMyCQkJZmxhZ3M7Ci0vKiBGSVhNRTogaW4gdGhlb3J5IHdlIHNob3VsZCBwYXNzIHNvbWV0aGluZyBsaWtlIFBDSSBkZXZpY2UgKyBtZW1vcnkKLSAqIHJlZ2lvbiArIG9mZnNldCBpbnN0ZWFkIG9mIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXZvaWQgICAgICAgICAgICAgICAgICAgICpiYXNlOwotCXN0cnVjdCB7Ci0JCV9fdTMyCQl3aWR0aDsKLQkJX191MzIJCWhlaWdodDsKLQkJX191MzIJCXBpeGVsZm9ybWF0OwotCQlfX3UzMgkJZmllbGQ7CQkvKiBlbnVtIHY0bDJfZmllbGQgKi8KLQkJX191MzIJCWJ5dGVzcGVybGluZTsJLyogZm9yIHBhZGRpbmcsIHplcm8gaWYgdW51c2VkICovCi0JCV9fdTMyCQlzaXplaW1hZ2U7Ci0JCV9fdTMyCQljb2xvcnNwYWNlOwkvKiBlbnVtIHY0bDJfY29sb3JzcGFjZSAqLwotCQlfX3UzMgkJcHJpdjsJCS8qIHJlc2VydmVkIGZpZWxkLCBzZXQgdG8gMCAqLwotCX0gZm10OwotfTsKLS8qICBGbGFncyBmb3IgdGhlICdjYXBhYmlsaXR5JyBmaWVsZC4gUmVhZCBvbmx5ICovCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWQkweDAwMDEKLSNkZWZpbmUgVjRMMl9GQlVGX0NBUF9DSFJPTUFLRVkJCTB4MDAwMgotI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgICAgIDB4MDAwNAotI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORwkweDAwMDgKLSNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MT0NBTF9BTFBIQQkweDAwMTAKLSNkZWZpbmUgVjRMMl9GQlVGX0NBUF9HTE9CQUxfQUxQSEEJMHgwMDIwCi0jZGVmaW5lIFY0TDJfRkJVRl9DQVBfTE9DQUxfSU5WX0FMUEhBCTB4MDA0MAotI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX1NSQ19DSFJPTUFLRVkJMHgwMDgwCi0vKiAgRmxhZ3MgZm9yIHRoZSAnZmxhZ3MnIGZpZWxkLiAqLwotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19QUklNQVJZCQkweDAwMDEKLSNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWQkJMHgwMDAyCi0jZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0NIUk9NQUtFWQkweDAwMDQKLSNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEEJMHgwMDA4Ci0jZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0dMT0JBTF9BTFBIQQkweDAwMTAKLSNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfSU5WX0FMUEhBCTB4MDAyMAotI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19TUkNfQ0hST01BS0VZCTB4MDA0MAotCi1zdHJ1Y3QgdjRsMl9jbGlwIHsKLQlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBjOwotCXN0cnVjdCB2NGwyX2NsaXAJX191c2VyICpuZXh0OwotfTsKLQotc3RydWN0IHY0bDJfd2luZG93IHsKLQlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICB3OwotCV9fdTMyCQkJZmllbGQ7CSAvKiBlbnVtIHY0bDJfZmllbGQgKi8KLQlfX3UzMgkJCWNocm9tYWtleTsKLQlzdHJ1Y3QgdjRsMl9jbGlwCV9fdXNlciAqY2xpcHM7Ci0JX191MzIJCQljbGlwY291bnQ7Ci0Jdm9pZAkJCV9fdXNlciAqYml0bWFwOwotCV9fdTggICAgICAgICAgICAgICAgICAgIGdsb2JhbF9hbHBoYTsKLX07Ci0KLS8qCi0gKglDIEEgUCBUIFUgUiBFICAgUCBBIFIgQSBNIEUgVCBFIFIgUwotICovCi1zdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSB7Ci0JX191MzIJCSAgIGNhcGFiaWxpdHk7CSAgLyogIFN1cHBvcnRlZCBtb2RlcyAqLwotCV9fdTMyCQkgICBjYXB0dXJlbW9kZTsJICAvKiAgQ3VycmVudCBtb2RlICovCi0Jc3RydWN0IHY0bDJfZnJhY3QgIHRpbWVwZXJmcmFtZTsgIC8qICBUaW1lIHBlciBmcmFtZSBpbiBzZWNvbmRzICovCi0JX191MzIJCSAgIGV4dGVuZGVkbW9kZTsgIC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLwotCV9fdTMyICAgICAgICAgICAgICByZWFkYnVmZmVyczsgICAvKiAgIyBvZiBidWZmZXJzIGZvciByZWFkICovCi0JX191MzIJCSAgIHJlc2VydmVkWzRdOwotfTsKLQotLyogIEZsYWdzIGZvciAnY2FwYWJpbGl0eScgYW5kICdjYXB0dXJlbW9kZScgZmllbGRzICovCi0jZGVmaW5lIFY0TDJfTU9ERV9ISUdIUVVBTElUWQkweDAwMDEJLyogIEhpZ2ggcXVhbGl0eSBpbWFnaW5nIG1vZGUgKi8KLSNkZWZpbmUgVjRMMl9DQVBfVElNRVBFUkZSQU1FCTB4MTAwMAkvKiAgdGltZXBlcmZyYW1lIGZpZWxkIGlzIHN1cHBvcnRlZCAqLwotCi1zdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtIHsKLQlfX3UzMgkJICAgY2FwYWJpbGl0eTsJIC8qICBTdXBwb3J0ZWQgbW9kZXMgKi8KLQlfX3UzMgkJICAgb3V0cHV0bW9kZTsJIC8qICBDdXJyZW50IG1vZGUgKi8KLQlzdHJ1Y3QgdjRsMl9mcmFjdCAgdGltZXBlcmZyYW1lOyAvKiAgVGltZSBwZXIgZnJhbWUgaW4gc2Vjb25kcyAqLwotCV9fdTMyCQkgICBleHRlbmRlZG1vZGU7IC8qICBEcml2ZXItc3BlY2lmaWMgZXh0ZW5zaW9ucyAqLwotCV9fdTMyICAgICAgICAgICAgICB3cml0ZWJ1ZmZlcnM7IC8qICAjIG9mIGJ1ZmZlcnMgZm9yIHdyaXRlICovCi0JX191MzIJCSAgIHJlc2VydmVkWzRdOwotfTsKLQotLyoKLSAqCUkgTiBQIFUgVCAgIEkgTSBBIEcgRSAgIEMgUiBPIFAgUCBJIE4gRwotICovCi1zdHJ1Y3QgdjRsMl9jcm9wY2FwIHsKLQlfX3UzMgkJCXR5cGU7CS8qIGVudW0gdjRsMl9idWZfdHlwZSAqLwotCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgIGJvdW5kczsKLQlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBkZWZyZWN0OwotCXN0cnVjdCB2NGwyX2ZyYWN0ICAgICAgIHBpeGVsYXNwZWN0OwotfTsKLQotc3RydWN0IHY0bDJfY3JvcCB7Ci0JX191MzIJCQl0eXBlOwkvKiBlbnVtIHY0bDJfYnVmX3R5cGUgKi8KLQlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICBjOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdjRsMl9zZWxlY3Rpb24gLSBzZWxlY3Rpb24gaW5mbwotICogQHR5cGU6CWJ1ZmZlciB0eXBlIChkbyBub3QgdXNlICpfTVBMQU5FIHR5cGVzKQotICogQHRhcmdldDoJU2VsZWN0aW9uIHRhcmdldCwgdXNlZCB0byBjaG9vc2Ugb25lIG9mIHBvc3NpYmxlIHJlY3RhbmdsZXM7Ci0gKgkJZGVmaW5lZCBpbiB2NGwyLWNvbW1vbi5oOyBWNEwyX1NFTF9UR1RfKiAuCi0gKiBAZmxhZ3M6CWNvbnN0cmFpbnRzIGZsYWdzLCBkZWZpbmVkIGluIHY0bDItY29tbW9uLmg7IFY0TDJfU0VMX0ZMQUdfKi4KLSAqIEByOgkJY29vcmRpbmF0ZXMgb2Ygc2VsZWN0aW9uIHdpbmRvdwotICogQHJlc2VydmVkOglmb3IgZnV0dXJlIHVzZSwgcm91bmRzIHN0cnVjdHVyZSBzaXplIHRvIDY0IGJ5dGVzLCBzZXQgdG8gemVybwotICoKLSAqIEhhcmR3YXJlIG1heSB1c2UgbXVsdGlwbGUgaGVscGVyIHdpbmRvd3MgdG8gcHJvY2VzcyBhIHZpZGVvIHN0cmVhbS4KLSAqIFRoZSBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBleGNoYW5nZSB0aGlzIHNlbGVjdGlvbiBhcmVhcyBiZXR3ZWVuCi0gKiBhbiBhcHBsaWNhdGlvbiBhbmQgYSBkcml2ZXIuCi0gKi8KLXN0cnVjdCB2NGwyX3NlbGVjdGlvbiB7Ci0JX191MzIJCQl0eXBlOwotCV9fdTMyCQkJdGFyZ2V0OwotCV9fdTMyICAgICAgICAgICAgICAgICAgIGZsYWdzOwotCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgIHI7Ci0JX191MzIgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRbOV07Ci19OwotCi0KLS8qCi0gKiAgICAgIEEgTiBBIEwgTyBHICAgViBJIEQgRSBPICAgUyBUIEEgTiBEIEEgUiBECi0gKi8KLQotdHlwZWRlZiBfX3U2NCB2NGwyX3N0ZF9pZDsKLQotLyogb25lIGJpdCBmb3IgZWFjaCAqLwotI2RlZmluZSBWNEwyX1NURF9QQUxfQiAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0cgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQotI2RlZmluZSBWNEwyX1NURF9QQUxfSCAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDgpCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9JICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0QgICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQotI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwNDApCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9LICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDA4MCkKLQotI2RlZmluZSBWNEwyX1NURF9QQUxfTSAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCi0jZGVmaW5lIFY0TDJfU1REX1BBTF9OICAgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKLSNkZWZpbmUgVjRMMl9TVERfUEFMX05jICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQotI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCi0KLSNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQkvKiBCVFNDICovCi0jZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAgICAgICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkJLyogRUlBLUogKi8KLSNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQotI2RlZmluZSBWNEwyX1NURF9OVFNDX01fS1IgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMDgwMDApCS8qIEZNIEEyICovCi0KLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fQiAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDEwMDAwKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTV9EICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAwMjAwMDApCi0jZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDA0MDAwMCkKLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwMDgwMDAwKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LICAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDAxMDAwMDApCi0jZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICAgICAgICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTCAgICAgICAgKCh2NGwyX3N0ZF9pZCkweDAwNDAwMDAwKQotI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MQyAgICAgICAoKHY0bDJfc3RkX2lkKTB4MDA4MDAwMDApCi0KLS8qIEFUU0MvSERUViAqLwotI2RlZmluZSBWNEwyX1NURF9BVFNDXzhfVlNCICAgICAoKHY0bDJfc3RkX2lkKTB4MDEwMDAwMDApCi0jZGVmaW5lIFY0TDJfU1REX0FUU0NfMTZfVlNCICAgICgodjRsMl9zdGRfaWQpMHgwMjAwMDAwMCkKLQotLyogRklYTUU6Ci0gICBBbHRob3VnaCBzdGRfaWQgaXMgNjQgYml0cywgdGhlcmUgaXMgYW4gaXNzdWUgb24gUFBDMzIgYXJjaGl0ZWN0dXJlIHRoYXQKLSAgIG1ha2VzIHN3aXRjaChfX3U2NCkgdG8gYnJlYWsuIFNvLCB0aGVyZSdzIGEgaGFjayBvbiB2NGwyLWNvbW1vbi5jIHJvdW5kaW5nCi0gICB0aGlzIHZhbHVlIHRvIDMyIGJpdHMuCi0gICBBcywgY3VycmVudGx5LCB0aGUgbWF4IHZhbHVlIGlzIGZvciBWNEwyX1NURF9BVFNDXzE2X1ZTQiAoMzAgYml0cyB3aWRlKSwKLSAgIGl0IHNob3VsZCB3b3JrIGZpbmUuIEhvd2V2ZXIsIGlmIG5lZWRlZCB0byBhZGQgbW9yZSB0aGFuIHR3byBzdGFuZGFyZHMsCi0gICB2NGwyLWNvbW1vbi5jIHNob3VsZCBiZSBmaXhlZC4KLSAqLwotCi0vKgotICogU29tZSBtYWNyb3MgdG8gbWVyZ2UgdmlkZW8gc3RhbmRhcmRzIGluIG9yZGVyIHRvIG1ha2UgbGl2ZSBlYXNpZXIgZm9yIHRoZQotICogZHJpdmVycyBhbmQgVjRMMiBhcHBsaWNhdGlvbnMKLSAqLwotCi0vKgotICogIkNvbW1vbiIgTlRTQy9NIC0gSXQgc2hvdWxkIGJlIG5vdGljZWQgdGhhdCBWNEwyX1NURF9OVFNDXzQ0MyBpcwotICogTWlzc2luZyBoZXJlLgotICovCi0jZGVmaW5lIFY0TDJfU1REX05UU0MgICAgICAgICAgIChWNEwyX1NURF9OVFNDX00JfFwKLQkJCQkgVjRMMl9TVERfTlRTQ19NX0pQICAgICB8XAotCQkJCSBWNEwyX1NURF9OVFNDX01fS1IpCi0vKiBTZWNhbSBtYWNyb3MgKi8KLSNkZWZpbmUgVjRMMl9TVERfU0VDQU1fREsgICAgICAJKFY0TDJfU1REX1NFQ0FNX0QJfFwKLQkJCQkgVjRMMl9TVERfU0VDQU1fSwl8XAotCQkJCSBWNEwyX1NURF9TRUNBTV9LMSkKLS8qIEFsbCBTZWNhbSBTdGFuZGFyZHMgKi8KLSNkZWZpbmUgVjRMMl9TVERfU0VDQU0JCShWNEwyX1NURF9TRUNBTV9CCXxcCi0JCQkJIFY0TDJfU1REX1NFQ0FNX0cJfFwKLQkJCQkgVjRMMl9TVERfU0VDQU1fSAl8XAotCQkJCSBWNEwyX1NURF9TRUNBTV9ESwl8XAotCQkJCSBWNEwyX1NURF9TRUNBTV9MICAgICAgIHxcCi0JCQkJIFY0TDJfU1REX1NFQ0FNX0xDKQotLyogUEFMIG1hY3JvcyAqLwotI2RlZmluZSBWNEwyX1NURF9QQUxfQkcJCShWNEwyX1NURF9QQUxfQgkJfFwKLQkJCQkgVjRMMl9TVERfUEFMX0IxCXxcCi0JCQkJIFY0TDJfU1REX1BBTF9HKQotI2RlZmluZSBWNEwyX1NURF9QQUxfREsJCShWNEwyX1NURF9QQUxfRAkJfFwKLQkJCQkgVjRMMl9TVERfUEFMX0QxCXxcCi0JCQkJIFY0TDJfU1REX1BBTF9LKQotLyoKLSAqICJDb21tb24iIFBBTCAtIFRoaXMgbWFjcm8gaXMgdGhlcmUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQKLSAqIFY0TDEgY29uY2VwdCBvZiAiUEFMIjogL0JHREtISS4KLSAqIFNldmVyYWwgUEFMIHN0YW5kYXJkcyBhcmUgbWlzc2luZyBoZXJlOiAvTSwgL04gYW5kIC9OYwotICovCi0jZGVmaW5lIFY0TDJfU1REX1BBTAkJKFY0TDJfU1REX1BBTF9CRwl8XAotCQkJCSBWNEwyX1NURF9QQUxfREsJfFwKLQkJCQkgVjRMMl9TVERfUEFMX0gJCXxcCi0JCQkJIFY0TDJfU1REX1BBTF9JKQotLyogQ2hyb21hICJhZ25vc3RpYyIgc3RhbmRhcmRzICovCi0jZGVmaW5lIFY0TDJfU1REX0IJCShWNEwyX1NURF9QQUxfQgkJfFwKLQkJCQkgVjRMMl9TVERfUEFMX0IxCXxcCi0JCQkJIFY0TDJfU1REX1NFQ0FNX0IpCi0jZGVmaW5lIFY0TDJfU1REX0cJCShWNEwyX1NURF9QQUxfRwkJfFwKLQkJCQkgVjRMMl9TVERfU0VDQU1fRykKLSNkZWZpbmUgVjRMMl9TVERfSAkJKFY0TDJfU1REX1BBTF9ICQl8XAotCQkJCSBWNEwyX1NURF9TRUNBTV9IKQotI2RlZmluZSBWNEwyX1NURF9MCQkoVjRMMl9TVERfU0VDQU1fTAl8XAotCQkJCSBWNEwyX1NURF9TRUNBTV9MQykKLSNkZWZpbmUgVjRMMl9TVERfR0gJCShWNEwyX1NURF9HCQl8XAotCQkJCSBWNEwyX1NURF9IKQotI2RlZmluZSBWNEwyX1NURF9ESwkJKFY0TDJfU1REX1BBTF9ESwl8XAotCQkJCSBWNEwyX1NURF9TRUNBTV9ESykKLSNkZWZpbmUgVjRMMl9TVERfQkcJCShWNEwyX1NURF9CCQl8XAotCQkJCSBWNEwyX1NURF9HKQotI2RlZmluZSBWNEwyX1NURF9NTgkJKFY0TDJfU1REX1BBTF9NCQl8XAotCQkJCSBWNEwyX1NURF9QQUxfTgkJfFwKLQkJCQkgVjRMMl9TVERfUEFMX05jCXxcCi0JCQkJIFY0TDJfU1REX05UU0MpCi0KLS8qIFN0YW5kYXJkcyB3aGVyZSBNVFMvQlRTQyBzdGVyZW8gY291bGQgYmUgZm91bmQgKi8KLSNkZWZpbmUgVjRMMl9TVERfTVRTCQkoVjRMMl9TVERfTlRTQ19NCXxcCi0JCQkJIFY0TDJfU1REX1BBTF9NCQl8XAotCQkJCSBWNEwyX1NURF9QQUxfTgkJfFwKLQkJCQkgVjRMMl9TVERfUEFMX05jKQotCi0vKiBTdGFuZGFyZHMgZm9yIENvdW50cmllcyB3aXRoIDYwSHogTGluZSBmcmVxdWVuY3kgKi8KLSNkZWZpbmUgVjRMMl9TVERfNTI1XzYwCQkoVjRMMl9TVERfUEFMX00JCXxcCi0JCQkJIFY0TDJfU1REX1BBTF82MAl8XAotCQkJCSBWNEwyX1NURF9OVFNDCQl8XAotCQkJCSBWNEwyX1NURF9OVFNDXzQ0MykKLS8qIFN0YW5kYXJkcyBmb3IgQ291bnRyaWVzIHdpdGggNTBIeiBMaW5lIGZyZXF1ZW5jeSAqLwotI2RlZmluZSBWNEwyX1NURF82MjVfNTAJCShWNEwyX1NURF9QQUwJCXxcCi0JCQkJIFY0TDJfU1REX1BBTF9OCQl8XAotCQkJCSBWNEwyX1NURF9QQUxfTmMJfFwKLQkJCQkgVjRMMl9TVERfU0VDQU0pCi0KLSNkZWZpbmUgVjRMMl9TVERfQVRTQyAgICAgICAgICAgKFY0TDJfU1REX0FUU0NfOF9WU0IgICAgfFwKLQkJCQkgVjRMMl9TVERfQVRTQ18xNl9WU0IpCi0vKiBNYWNyb3Mgd2l0aCBub25lIGFuZCBhbGwgYW5hbG9nIHN0YW5kYXJkcyAqLwotI2RlZmluZSBWNEwyX1NURF9VTktOT1dOICAgICAgICAwCi0jZGVmaW5lIFY0TDJfU1REX0FMTCAgICAgICAgICAgIChWNEwyX1NURF81MjVfNjAJfFwKLQkJCQkgVjRMMl9TVERfNjI1XzUwKQotCi1zdHJ1Y3QgdjRsMl9zdGFuZGFyZCB7Ci0JX191MzIJCSAgICAgaW5kZXg7Ci0JdjRsMl9zdGRfaWQgICAgICAgICAgaWQ7Ci0JX191OAkJICAgICBuYW1lWzI0XTsKLQlzdHJ1Y3QgdjRsMl9mcmFjdCAgICBmcmFtZXBlcmlvZDsgLyogRnJhbWVzLCBub3QgZmllbGRzICovCi0JX191MzIJCSAgICAgZnJhbWVsaW5lczsKLQlfX3UzMgkJICAgICByZXNlcnZlZFs0XTsKLX07Ci0KLS8qCi0gKglEIFYgCUIgVAlUIEkgTSBJIE4gRyBTCi0gKi8KLQotLyoqIHN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgLSBCVC42NTYvQlQuMTEyMCB0aW1pbmcgZGF0YQotICogQHdpZHRoOgl0b3RhbCB3aWR0aCBvZiB0aGUgYWN0aXZlIHZpZGVvIGluIHBpeGVscwotICogQGhlaWdodDoJdG90YWwgaGVpZ2h0IG9mIHRoZSBhY3RpdmUgdmlkZW8gaW4gbGluZXMKLSAqIEBpbnRlcmxhY2VkOglJbnRlcmxhY2VkIG9yIHByb2dyZXNzaXZlCi0gKiBAcG9sYXJpdGllczoJUG9zaXRpdmUgb3IgbmVnYXRpdmUgcG9sYXJpdGllcwotICogQHBpeGVsY2xvY2s6CVBpeGVsIGNsb2NrIGluIEhaLiBFeC4gNzQuMjVNSHotPjc0MjUwMDAwCi0gKiBAaGZyb250cG9yY2g6SG9yaXpvbnRhbCBmcm9udCBwb3JjaCBpbiBwaXhlbHMKLSAqIEBoc3luYzoJSG9yaXpvbnRhbCBTeW5jIGxlbmd0aCBpbiBwaXhlbHMKLSAqIEBoYmFja3BvcmNoOglIb3Jpem9udGFsIGJhY2sgcG9yY2ggaW4gcGl4ZWxzCi0gKiBAdmZyb250cG9yY2g6VmVydGljYWwgZnJvbnQgcG9yY2ggaW4gbGluZXMKLSAqIEB2c3luYzoJVmVydGljYWwgU3luYyBsZW5ndGggaW4gbGluZXMKLSAqIEB2YmFja3BvcmNoOglWZXJ0aWNhbCBiYWNrIHBvcmNoIGluIGxpbmVzCi0gKiBAaWxfdmZyb250cG9yY2g6VmVydGljYWwgZnJvbnQgcG9yY2ggZm9yIHRoZSBldmVuIGZpZWxkCi0gKgkJKGFrYSBmaWVsZCAyKSBvZiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKLSAqIEBpbF92c3luYzoJVmVydGljYWwgU3luYyBsZW5ndGggZm9yIHRoZSBldmVuIGZpZWxkCi0gKgkJKGFrYSBmaWVsZCAyKSBvZiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKLSAqIEBpbF92YmFja3BvcmNoOlZlcnRpY2FsIGJhY2sgcG9yY2ggZm9yIHRoZSBldmVuIGZpZWxkCi0gKgkJKGFrYSBmaWVsZCAyKSBvZiBpbnRlcmxhY2VkIGZpZWxkIGZvcm1hdHMKLSAqIEBzdGFuZGFyZHM6CVN0YW5kYXJkcyB0aGUgdGltaW5nIGJlbG9uZ3MgdG8KLSAqIEBmbGFnczoJRmxhZ3MKLSAqIEByZXNlcnZlZDoJUmVzZXJ2ZWQgZmllbGRzLCBtdXN0IGJlIHplcm9lZC4KLSAqCi0gKiBBIG5vdGUgcmVnYXJkaW5nIHZlcnRpY2FsIGludGVybGFjZWQgdGltaW5nczogaGVpZ2h0IHJlZmVycyB0byB0aGUgdG90YWwKLSAqIGhlaWdodCBvZiB0aGUgYWN0aXZlIHZpZGVvIGZyYW1lICg9IHR3byBmaWVsZHMpLiBUaGUgYmxhbmtpbmcgdGltaW5ncyByZWZlcgotICogdG8gdGhlIGJsYW5raW5nIG9mIGVhY2ggZmllbGQuIFNvIHRoZSBoZWlnaHQgb2YgdGhlIHRvdGFsIGZyYW1lIGlzCi0gKiBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6Ci0gKgotICogdG90X2hlaWdodCA9IGhlaWdodCArIHZmcm9udHBvcmNoICsgdnN5bmMgKyB2YmFja3BvcmNoICsKLSAqICAgICAgICAgICAgICAgICAgICAgICBpbF92ZnJvbnRwb3JjaCArIGlsX3ZzeW5jICsgaWxfdmJhY2twb3JjaAotICoKLSAqIFRoZSBhY3RpdmUgaGVpZ2h0IG9mIGVhY2ggZmllbGQgaXMgaGVpZ2h0IC8gMi4KLSAqLwotc3RydWN0IHY0bDJfYnRfdGltaW5ncyB7Ci0JX191MzIJd2lkdGg7Ci0JX191MzIJaGVpZ2h0OwotCV9fdTMyCWludGVybGFjZWQ7Ci0JX191MzIJcG9sYXJpdGllczsKLQlfX3U2NAlwaXhlbGNsb2NrOwotCV9fdTMyCWhmcm9udHBvcmNoOwotCV9fdTMyCWhzeW5jOwotCV9fdTMyCWhiYWNrcG9yY2g7Ci0JX191MzIJdmZyb250cG9yY2g7Ci0JX191MzIJdnN5bmM7Ci0JX191MzIJdmJhY2twb3JjaDsKLQlfX3UzMglpbF92ZnJvbnRwb3JjaDsKLQlfX3UzMglpbF92c3luYzsKLQlfX3UzMglpbF92YmFja3BvcmNoOwotCV9fdTMyCXN0YW5kYXJkczsKLQlfX3UzMglmbGFnczsKLQlfX3UzMglyZXNlcnZlZFsxNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogSW50ZXJsYWNlZCBvciBwcm9ncmVzc2l2ZSBmb3JtYXQgKi8KLSNkZWZpbmUJVjRMMl9EVl9QUk9HUkVTU0lWRQkwCi0jZGVmaW5lCVY0TDJfRFZfSU5URVJMQUNFRAkxCi0KLS8qIFBvbGFyaXRpZXMuIElmIGJpdCBpcyBub3Qgc2V0LCBpdCBpcyBhc3N1bWVkIHRvIGJlIG5lZ2F0aXZlIHBvbGFyaXR5ICovCi0jZGVmaW5lIFY0TDJfRFZfVlNZTkNfUE9TX1BPTAkweDAwMDAwMDAxCi0jZGVmaW5lIFY0TDJfRFZfSFNZTkNfUE9TX1BPTAkweDAwMDAwMDAyCi0KLS8qIFRpbWluZ3Mgc3RhbmRhcmRzICovCi0jZGVmaW5lIFY0TDJfRFZfQlRfU1REX0NFQTg2MQkoMSA8PCAwKSAgLyogQ0VBLTg2MSBEaWdpdGFsIFRWIFByb2ZpbGUgKi8KLSNkZWZpbmUgVjRMMl9EVl9CVF9TVERfRE1UCSgxIDw8IDEpICAvKiBWRVNBIERpc2NyZXRlIE1vbml0b3IgVGltaW5ncyAqLwotI2RlZmluZSBWNEwyX0RWX0JUX1NURF9DVlQJKDEgPDwgMikgIC8qIFZFU0EgQ29vcmRpbmF0ZWQgVmlkZW8gVGltaW5ncyAqLwotI2RlZmluZSBWNEwyX0RWX0JUX1NURF9HVEYJKDEgPDwgMykgIC8qIFZFU0EgR2VuZXJhbGl6ZWQgVGltaW5ncyBGb3JtdWxhICovCi0KLS8qIEZsYWdzICovCi0KLS8qIENWVC9HVEYgc3BlY2lmaWM6IHRpbWluZyB1c2VzIHJlZHVjZWQgYmxhbmtpbmcgKENWVCkgb3IgdGhlICdTZWNvbmRhcnkKLSAgIEdURicgY3VydmUgKEdURikuIEluIGJvdGggY2FzZXMgdGhlIGhvcml6b250YWwgYW5kL29yIHZlcnRpY2FsIGJsYW5raW5nCi0gICBpbnRlcnZhbHMgYXJlIHJlZHVjZWQsIGFsbG93aW5nIGEgaGlnaGVyIHJlc29sdXRpb24gb3ZlciB0aGUgc2FtZQotICAgYmFuZHdpZHRoLiBUaGlzIGlzIGEgcmVhZC1vbmx5IGZsYWcuICovCi0jZGVmaW5lIFY0TDJfRFZfRkxfUkVEVUNFRF9CTEFOS0lORwkJKDEgPDwgMCkKLS8qIENFQS04NjEgc3BlY2lmaWM6IHNldCBmb3IgQ0VBLTg2MSBmb3JtYXRzIHdpdGggYSBmcmFtZXJhdGUgb2YgYSBtdWx0aXBsZQotICAgb2Ygc2l4LiBUaGVzZSBmb3JtYXRzIGNhbiBiZSBvcHRpb25hbGx5IHBsYXllZCBhdCAxIC8gMS4wMDEgc3BlZWQuCi0gICBUaGlzIGlzIGEgcmVhZC1vbmx5IGZsYWcuICovCi0jZGVmaW5lIFY0TDJfRFZfRkxfQ0FOX1JFRFVDRV9GUFMJCSgxIDw8IDEpCi0vKiBDRUEtODYxIHNwZWNpZmljOiBvbmx5IHZhbGlkIGZvciB2aWRlbyB0cmFuc21pdHRlcnMsIHRoZSBmbGFnIGlzIGNsZWFyZWQKLSAgIGJ5IHJlY2VpdmVycy4KLSAgIElmIHRoZSBmcmFtZXJhdGUgb2YgdGhlIGZvcm1hdCBpcyBhIG11bHRpcGxlIG9mIHNpeCwgdGhlbiB0aGUgcGl4ZWxjbG9jawotICAgdXNlZCB0byBzZXQgdXAgdGhlIHRyYW5zbWl0dGVyIGlzIGRpdmlkZWQgYnkgMS4wMDEgdG8gbWFrZSBpdCBjb21wYXRpYmxlCi0gICB3aXRoIDYwIEh6IGJhc2VkIHN0YW5kYXJkcyBzdWNoIGFzIE5UU0MgYW5kIFBBTC1NIHRoYXQgdXNlIGEgZnJhbWVyYXRlIG9mCi0gICAyOS45NyBIei4gT3RoZXJ3aXNlIHRoaXMgZmxhZyBpcyBjbGVhcmVkLiBJZiB0aGUgdHJhbnNtaXR0ZXIgY2FuJ3QgZ2VuZXJhdGUKLSAgIHN1Y2ggZnJlcXVlbmNpZXMsIHRoZW4gdGhlIGZsYWcgd2lsbCBhbHNvIGJlIGNsZWFyZWQuICovCi0jZGVmaW5lIFY0TDJfRFZfRkxfUkVEVUNFRF9GUFMJCQkoMSA8PCAyKQotLyogU3BlY2lmaWMgdG8gaW50ZXJsYWNlZCBmb3JtYXRzOiBpZiBzZXQsIHRoZW4gZmllbGQgMSBpcyByZWFsbHkgb25lIGhhbGYtbGluZQotICAgbG9uZ2VyIGFuZCBmaWVsZCAyIGlzIHJlYWxseSBvbmUgaGFsZi1saW5lIHNob3J0ZXIsIHNvIGVhY2ggZmllbGQgaGFzCi0gICBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiBoYWxmLWxpbmVzLiBXaGV0aGVyIGhhbGYtbGluZXMgY2FuIGJlIGRldGVjdGVkCi0gICBvciB1c2VkIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiAqLwotI2RlZmluZSBWNEwyX0RWX0ZMX0hBTEZfTElORQkJCSgxIDw8IDMpCi0vKiBJZiBzZXQsIHRoZW4gdGhpcyBpcyBhIENvbnN1bWVyIEVsZWN0cm9uaWNzIChDRSkgdmlkZW8gZm9ybWF0LiBTdWNoIGZvcm1hdHMKLSAqIGRpZmZlciBmcm9tIG90aGVyIGZvcm1hdHMgKGNvbW1vbmx5IGNhbGxlZCBJVCBmb3JtYXRzKSBpbiB0aGF0IGlmIFJHQgotICogZW5jb2RpbmcgaXMgdXNlZCB0aGVuIGJ5IGRlZmF1bHQgdGhlIFJHQiB2YWx1ZXMgdXNlIGxpbWl0ZWQgcmFuZ2UgKGkuZS4KLSAqIHVzZSB0aGUgcmFuZ2UgMTYtMjM1KSBhcyBvcHBvc2VkIHRvIDAtMjU1LiBBbGwgZm9ybWF0cyBkZWZpbmVkIGluIENFQS04NjEKLSAqIGV4Y2VwdCBmb3IgdGhlIDY0MHg0ODAgZm9ybWF0IGFyZSBDRSBmb3JtYXRzLiAqLwotI2RlZmluZSBWNEwyX0RWX0ZMX0lTX0NFX1ZJREVPCQkJKDEgPDwgNCkKLQotLyogQSBmZXcgdXNlZnVsIGRlZmluZXMgdG8gY2FsY3VsYXRlIHRoZSB0b3RhbCBibGFua2luZyBhbmQgZnJhbWUgc2l6ZXMgKi8KLSNkZWZpbmUgVjRMMl9EVl9CVF9CTEFOS0lOR19XSURUSChidCkgXAotCSgoYnQpLT5oZnJvbnRwb3JjaCArIChidCktPmhzeW5jICsgKGJ0KS0+aGJhY2twb3JjaCkKLSNkZWZpbmUgVjRMMl9EVl9CVF9GUkFNRV9XSURUSChidCkgXAotCSgoYnQpLT53aWR0aCArIFY0TDJfRFZfQlRfQkxBTktJTkdfV0lEVEgoYnQpKQotI2RlZmluZSBWNEwyX0RWX0JUX0JMQU5LSU5HX0hFSUdIVChidCkgXAotCSgoYnQpLT52ZnJvbnRwb3JjaCArIChidCktPnZzeW5jICsgKGJ0KS0+dmJhY2twb3JjaCArIFwKLQkgKGJ0KS0+aWxfdmZyb250cG9yY2ggKyAoYnQpLT5pbF92c3luYyArIChidCktPmlsX3ZiYWNrcG9yY2gpCi0jZGVmaW5lIFY0TDJfRFZfQlRfRlJBTUVfSEVJR0hUKGJ0KSBcCi0JKChidCktPmhlaWdodCArIFY0TDJfRFZfQlRfQkxBTktJTkdfSEVJR0hUKGJ0KSkKLQotLyoqIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgLSBEViB0aW1pbmdzCi0gKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIHRpbWluZ3MKLSAqIEBidDoJQlQ2NTYvMTEyMCB0aW1pbmdzCi0gKi8KLXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgewotCV9fdTMyIHR5cGU7Ci0JdW5pb24gewotCQlzdHJ1Y3QgdjRsMl9idF90aW1pbmdzCWJ0OwotCQlfX3UzMglyZXNlcnZlZFszMl07Ci0JfTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBWYWx1ZXMgZm9yIHRoZSB0eXBlIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfRFZfQlRfNjU2XzExMjAJMAkvKiBCVC42NTYvMTEyMCB0aW1pbmcgdHlwZSAqLwotCi0KLS8qKiBzdHJ1Y3QgdjRsMl9lbnVtX2R2X3RpbWluZ3MgLSBEViB0aW1pbmdzIGVudW1lcmF0aW9uCi0gKiBAaW5kZXg6CWVudW1lcmF0aW9uIGluZGV4Ci0gKiBAcGFkOgl0aGUgcGFkIG51bWJlciBmb3Igd2hpY2ggdG8gZW51bWVyYXRlIHRpbWluZ3MgKHVzZWQgd2l0aAotICoJCXY0bC1zdWJkZXYgbm9kZXMgb25seSkKLSAqIEByZXNlcnZlZDoJbXVzdCBiZSB6ZXJvZWQKLSAqIEB0aW1pbmdzOgl0aGUgdGltaW5ncyBmb3IgdGhlIGdpdmVuIGluZGV4Ci0gKi8KLXN0cnVjdCB2NGwyX2VudW1fZHZfdGltaW5ncyB7Ci0JX191MzIgaW5kZXg7Ci0JX191MzIgcGFkOwotCV9fdTMyIHJlc2VydmVkWzJdOwotCXN0cnVjdCB2NGwyX2R2X3RpbWluZ3MgdGltaW5nczsKLX07Ci0KLS8qKiBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzX2NhcCAtIEJULjY1Ni9CVC4xMTIwIHRpbWluZyBjYXBhYmlsaXRpZXMKLSAqIEBtaW5fd2lkdGg6CQl3aWR0aCBpbiBwaXhlbHMKLSAqIEBtYXhfd2lkdGg6CQl3aWR0aCBpbiBwaXhlbHMKLSAqIEBtaW5faGVpZ2h0OgkJaGVpZ2h0IGluIGxpbmVzCi0gKiBAbWF4X2hlaWdodDoJCWhlaWdodCBpbiBsaW5lcwotICogQG1pbl9waXhlbGNsb2NrOglQaXhlbCBjbG9jayBpbiBIWi4gRXguIDc0LjI1TUh6LT43NDI1MDAwMAotICogQG1heF9waXhlbGNsb2NrOglQaXhlbCBjbG9jayBpbiBIWi4gRXguIDc0LjI1TUh6LT43NDI1MDAwMAotICogQHN0YW5kYXJkczoJCVN1cHBvcnRlZCBzdGFuZGFyZHMKLSAqIEBjYXBhYmlsaXRpZXM6CVN1cHBvcnRlZCBjYXBhYmlsaXRpZXMKLSAqIEByZXNlcnZlZDoJCU11c3QgYmUgemVyb2VkCi0gKi8KLXN0cnVjdCB2NGwyX2J0X3RpbWluZ3NfY2FwIHsKLQlfX3UzMgltaW5fd2lkdGg7Ci0JX191MzIJbWF4X3dpZHRoOwotCV9fdTMyCW1pbl9oZWlnaHQ7Ci0JX191MzIJbWF4X2hlaWdodDsKLQlfX3U2NAltaW5fcGl4ZWxjbG9jazsKLQlfX3U2NAltYXhfcGl4ZWxjbG9jazsKLQlfX3UzMglzdGFuZGFyZHM7Ci0JX191MzIJY2FwYWJpbGl0aWVzOwotCV9fdTMyCXJlc2VydmVkWzE2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBTdXBwb3J0cyBpbnRlcmxhY2VkIGZvcm1hdHMgKi8KLSNkZWZpbmUgVjRMMl9EVl9CVF9DQVBfSU5URVJMQUNFRAkoMSA8PCAwKQotLyogU3VwcG9ydHMgcHJvZ3Jlc3NpdmUgZm9ybWF0cyAqLwotI2RlZmluZSBWNEwyX0RWX0JUX0NBUF9QUk9HUkVTU0lWRQkoMSA8PCAxKQotLyogU3VwcG9ydHMgQ1ZUL0dURiByZWR1Y2VkIGJsYW5raW5nICovCi0jZGVmaW5lIFY0TDJfRFZfQlRfQ0FQX1JFRFVDRURfQkxBTktJTkcJKDEgPDwgMikKLS8qIFN1cHBvcnRzIGN1c3RvbSBmb3JtYXRzICovCi0jZGVmaW5lIFY0TDJfRFZfQlRfQ0FQX0NVU1RPTQkJKDEgPDwgMykKLQotLyoqIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3NfY2FwIC0gRFYgdGltaW5ncyBjYXBhYmlsaXRpZXMKLSAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgdGltaW5ncyAoc2FtZSBhcyBpbiBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQotICogQHBhZDoJdGhlIHBhZCBudW1iZXIgZm9yIHdoaWNoIHRvIHF1ZXJ5IGNhcGFiaWxpdGllcyAodXNlZCB3aXRoCi0gKgkJdjRsLXN1YmRldiBub2RlcyBvbmx5KQotICogQGJ0OgkJdGhlIEJUNjU2LzExMjAgdGltaW5ncyBjYXBhYmlsaXRpZXMKLSAqLwotc3RydWN0IHY0bDJfZHZfdGltaW5nc19jYXAgewotCV9fdTMyIHR5cGU7Ci0JX191MzIgcGFkOwotCV9fdTMyIHJlc2VydmVkWzJdOwotCXVuaW9uIHsKLQkJc3RydWN0IHY0bDJfYnRfdGltaW5nc19jYXAgYnQ7Ci0JCV9fdTMyIHJhd19kYXRhWzMyXTsKLQl9OwotfTsKLQotCi0vKgotICoJViBJIEQgRSBPICAgSSBOIFAgVSBUIFMKLSAqLwotc3RydWN0IHY0bDJfaW5wdXQgewotCV9fdTMyCSAgICAgaW5kZXg7CQkvKiAgV2hpY2ggaW5wdXQgKi8KLQlfX3U4CSAgICAgbmFtZVszMl07CQkvKiAgTGFiZWwgKi8KLQlfX3UzMgkgICAgIHR5cGU7CQkvKiAgVHlwZSBvZiBpbnB1dCAqLwotCV9fdTMyCSAgICAgYXVkaW9zZXQ7CQkvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLwotCV9fdTMyICAgICAgICB0dW5lcjsgICAgICAgICAgICAgLyogIGVudW0gdjRsMl90dW5lcl90eXBlICovCi0JdjRsMl9zdGRfaWQgIHN0ZDsKLQlfX3UzMgkgICAgIHN0YXR1czsKLQlfX3UzMgkgICAgIGNhcGFiaWxpdGllczsKLQlfX3UzMgkgICAgIHJlc2VydmVkWzNdOwotfTsKLQotLyogIFZhbHVlcyBmb3IgdGhlICd0eXBlJyBmaWVsZCAqLwotI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfVFVORVIJCTEKLSNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQQkJMgotCi0vKiBmaWVsZCAnc3RhdHVzJyAtIGdlbmVyYWwgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAgICAweDAwMDAwMDAxICAvKiBBdHRhY2hlZCBkZXZpY2UgaXMgb2ZmICovCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fU0lHTkFMICAgMHgwMDAwMDAwMgotI2RlZmluZSBWNEwyX0lOX1NUX05PX0NPTE9SICAgIDB4MDAwMDAwMDQKLQotLyogZmllbGQgJ3N0YXR1cycgLSBzZW5zb3Igb3JpZW50YXRpb24gKi8KLS8qIElmIHNlbnNvciBpcyBtb3VudGVkIHVwc2lkZSBkb3duIHNldCBib3RoIGJpdHMgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9IRkxJUCAgICAgICAweDAwMDAwMDEwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCBob3Jpem9udGFsbHkgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9WRkxJUCAgICAgICAweDAwMDAwMDIwIC8qIEZyYW1lcyBhcmUgZmxpcHBlZCB2ZXJ0aWNhbGx5ICovCi0KLS8qIGZpZWxkICdzdGF0dXMnIC0gYW5hbG9nICovCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fSF9MT0NLICAgMHgwMDAwMDEwMCAgLyogTm8gaG9yaXpvbnRhbCBzeW5jIGxvY2sgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9DT0xPUl9LSUxMICAweDAwMDAwMjAwICAvKiBDb2xvciBraWxsZXIgaXMgYWN0aXZlICovCi0KLS8qIGZpZWxkICdzdGF0dXMnIC0gZGlnaXRhbCAqLwotI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgICAgIDB4MDAwMTAwMDAgIC8qIE5vIHN5bmNocm9uaXphdGlvbiBsb2NrICovCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fRVFVICAgICAgMHgwMDAyMDAwMCAgLyogTm8gZXF1YWxpemVyIGxvY2sgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSICAweDAwMDQwMDAwICAvKiBDYXJyaWVyIHJlY292ZXJ5IGZhaWxlZCAqLwotCi0vKiBmaWVsZCAnc3RhdHVzJyAtIFZDUiBhbmQgc2V0LXRvcCBib3ggKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwICAvKiBNYWNyb3Zpc2lvbiBkZXRlY3RlZCAqLwotI2RlZmluZSBWNEwyX0lOX1NUX05PX0FDQ0VTUyAgIDB4MDIwMDAwMDAgIC8qIENvbmRpdGlvbmFsIGFjY2VzcyBkZW5pZWQgKi8KLSNkZWZpbmUgVjRMMl9JTl9TVF9WVFIgICAgICAgICAweDA0MDAwMDAwICAvKiBWVFIgdGltZSBjb25zdGFudCAqLwotCi0vKiBjYXBhYmlsaXRpZXMgZmxhZ3MgKi8KLSNkZWZpbmUgVjRMMl9JTl9DQVBfRFZfVElNSU5HUwkJMHgwMDAwMDAwMiAvKiBTdXBwb3J0cyBTX0RWX1RJTUlOR1MgKi8KLSNkZWZpbmUgVjRMMl9JTl9DQVBfQ1VTVE9NX1RJTUlOR1MJVjRMMl9JTl9DQVBfRFZfVElNSU5HUyAvKiBGb3IgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBWNEwyX0lOX0NBUF9TVEQJCQkweDAwMDAwMDA0IC8qIFN1cHBvcnRzIFNfU1REICovCi0jZGVmaW5lIFY0TDJfSU5fQ0FQX05BVElWRV9TSVpFCQkweDAwMDAwMDA4IC8qIFN1cHBvcnRzIHNldHRpbmcgbmF0aXZlIHNpemUgKi8KLQotLyoKLSAqCVYgSSBEIEUgTyAgIE8gVSBUIFAgVSBUIFMKLSAqLwotc3RydWN0IHY0bDJfb3V0cHV0IHsKLQlfX3UzMgkgICAgIGluZGV4OwkJLyogIFdoaWNoIG91dHB1dCAqLwotCV9fdTgJICAgICBuYW1lWzMyXTsJCS8qICBMYWJlbCAqLwotCV9fdTMyCSAgICAgdHlwZTsJCS8qICBUeXBlIG9mIG91dHB1dCAqLwotCV9fdTMyCSAgICAgYXVkaW9zZXQ7CQkvKiAgQXNzb2NpYXRlZCBhdWRpb3MgKGJpdGZpZWxkKSAqLwotCV9fdTMyCSAgICAgbW9kdWxhdG9yOyAgICAgICAgIC8qICBBc3NvY2lhdGVkIG1vZHVsYXRvciAqLwotCXY0bDJfc3RkX2lkICBzdGQ7Ci0JX191MzIJICAgICBjYXBhYmlsaXRpZXM7Ci0JX191MzIJICAgICByZXNlcnZlZFszXTsKLX07Ci0vKiAgVmFsdWVzIGZvciB0aGUgJ3R5cGUnIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SCQkxCi0jZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HCQkJMgotI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVkJMwotCi0vKiBjYXBhYmlsaXRpZXMgZmxhZ3MgKi8KLSNkZWZpbmUgVjRMMl9PVVRfQ0FQX0RWX1RJTUlOR1MJCTB4MDAwMDAwMDIgLyogU3VwcG9ydHMgU19EVl9USU1JTkdTICovCi0jZGVmaW5lIFY0TDJfT1VUX0NBUF9DVVNUT01fVElNSU5HUwlWNEwyX09VVF9DQVBfRFZfVElNSU5HUyAvKiBGb3IgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBWNEwyX09VVF9DQVBfU1RECQkweDAwMDAwMDA0IC8qIFN1cHBvcnRzIFNfU1REICovCi0jZGVmaW5lIFY0TDJfT1VUX0NBUF9OQVRJVkVfU0laRQkweDAwMDAwMDA4IC8qIFN1cHBvcnRzIHNldHRpbmcgbmF0aXZlIHNpemUgKi8KLQotLyoKLSAqCUMgTyBOIFQgUiBPIEwgUwotICovCi1zdHJ1Y3QgdjRsMl9jb250cm9sIHsKLQlfX3UzMgkJICAgICBpZDsKLQlfX3MzMgkJICAgICB2YWx1ZTsKLX07Ci0KLXN0cnVjdCB2NGwyX2V4dF9jb250cm9sIHsKLQlfX3UzMiBpZDsKLQlfX3UzMiBzaXplOwotCV9fdTMyIHJlc2VydmVkMlsxXTsKLQl1bmlvbiB7Ci0JCV9fczMyIHZhbHVlOwotCQlfX3M2NCB2YWx1ZTY0OwotCQljaGFyIF9fdXNlciAqc3RyaW5nOwotCQlfX3U4IF9fdXNlciAqcF91ODsKLQkJX191MTYgX191c2VyICpwX3UxNjsKLQkJX191MzIgX191c2VyICpwX3UzMjsKLQkJdm9pZCBfX3VzZXIgKnB0cjsKLQl9OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyB7Ci0JX191MzIgY3RybF9jbGFzczsKLQlfX3UzMiBjb3VudDsKLQlfX3UzMiBlcnJvcl9pZHg7Ci0JX191MzIgcmVzZXJ2ZWRbMl07Ci0Jc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmNvbnRyb2xzOwotfTsKLQotI2RlZmluZSBWNEwyX0NUUkxfSURfTUFTSyAgICAgIAkgICgweDBmZmZmZmZmKQotI2RlZmluZSBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpICAgICgoaWQpICYgMHgwZmZmMDAwMFVMKQotI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmIDB4ZmZmZikgPj0gMHgxMDAwKQotI2RlZmluZSBWNEwyX0NUUkxfTUFYX0RJTVMJICAoNCkKLQotZW51bSB2NGwyX2N0cmxfdHlwZSB7Ci0JVjRMMl9DVFJMX1RZUEVfSU5URUdFUgkgICAgID0gMSwKLQlWNEwyX0NUUkxfVFlQRV9CT09MRUFOCSAgICAgPSAyLAotCVY0TDJfQ1RSTF9UWVBFX01FTlUJICAgICA9IDMsCi0JVjRMMl9DVFJMX1RZUEVfQlVUVE9OCSAgICAgPSA0LAotCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NCAgICAgPSA1LAotCVY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MgICAgPSA2LAotCVY0TDJfQ1RSTF9UWVBFX1NUUklORyAgICAgICAgPSA3LAotCVY0TDJfQ1RSTF9UWVBFX0JJVE1BU0sgICAgICAgPSA4LAotCVY0TDJfQ1RSTF9UWVBFX0lOVEVHRVJfTUVOVSAgPSA5LAotCi0JLyogQ29tcG91bmQgdHlwZXMgYXJlID49IDB4MDEwMCAqLwotCVY0TDJfQ1RSTF9DT01QT1VORF9UWVBFUyAgICAgPSAweDAxMDAsCi0JVjRMMl9DVFJMX1RZUEVfVTgJICAgICA9IDB4MDEwMCwKLQlWNEwyX0NUUkxfVFlQRV9VMTYJICAgICA9IDB4MDEwMSwKLQlWNEwyX0NUUkxfVFlQRV9VMzIJICAgICA9IDB4MDEwMiwKLX07Ci0KLS8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllDVFJMIGlvY3RsIGZvciBxdWVyeWluZyBjb250cm9scyAqLwotc3RydWN0IHY0bDJfcXVlcnljdHJsIHsKLQlfX3UzMgkJICAgICBpZDsKLQlfX3UzMgkJICAgICB0eXBlOwkvKiBlbnVtIHY0bDJfY3RybF90eXBlICovCi0JX191OAkJICAgICBuYW1lWzMyXTsJLyogV2hhdGV2ZXIgKi8KLQlfX3MzMgkJICAgICBtaW5pbXVtOwkvKiBOb3RlIHNpZ25lZG5lc3MgKi8KLQlfX3MzMgkJICAgICBtYXhpbXVtOwotCV9fczMyCQkgICAgIHN0ZXA7Ci0JX19zMzIJCSAgICAgZGVmYXVsdF92YWx1ZTsKLQlfX3UzMiAgICAgICAgICAgICAgICBmbGFnczsKLQlfX3UzMgkJICAgICByZXNlcnZlZFsyXTsKLX07Ci0KLS8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllfRVhUX0NUUkwgaW9jdGwgZm9yIHF1ZXJ5aW5nIGV4dGVuZGVkIGNvbnRyb2xzICovCi1zdHJ1Y3QgdjRsMl9xdWVyeV9leHRfY3RybCB7Ci0JX191MzIJCSAgICAgaWQ7Ci0JX191MzIJCSAgICAgdHlwZTsKLQljaGFyCQkgICAgIG5hbWVbMzJdOwotCV9fczY0CQkgICAgIG1pbmltdW07Ci0JX19zNjQJCSAgICAgbWF4aW11bTsKLQlfX3U2NAkJICAgICBzdGVwOwotCV9fczY0CQkgICAgIGRlZmF1bHRfdmFsdWU7Ci0JX191MzIgICAgICAgICAgICAgICAgZmxhZ3M7Ci0JX191MzIgICAgICAgICAgICAgICAgZWxlbV9zaXplOwotCV9fdTMyICAgICAgICAgICAgICAgIGVsZW1zOwotCV9fdTMyICAgICAgICAgICAgICAgIG5yX29mX2RpbXM7Ci0JX191MzIgICAgICAgICAgICAgICAgZGltc1tWNEwyX0NUUkxfTUFYX0RJTVNdOwotCV9fdTMyCQkgICAgIHJlc2VydmVkWzMyXTsKLX07Ci0KLS8qICBVc2VkIGluIHRoZSBWSURJT0NfUVVFUllNRU5VIGlvY3RsIGZvciBxdWVyeWluZyBtZW51IGl0ZW1zICovCi1zdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgewotCV9fdTMyCQlpZDsKLQlfX3UzMgkJaW5kZXg7Ci0JdW5pb24gewotCQlfX3U4CW5hbWVbMzJdOwkvKiBXaGF0ZXZlciAqLwotCQlfX3M2NAl2YWx1ZTsKLQl9OwotCV9fdTMyCQlyZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiAgQ29udHJvbCBmbGFncyAgKi8KLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQJCTB4MDAwMQotI2RlZmluZSBWNEwyX0NUUkxfRkxBR19HUkFCQkVECQkweDAwMDIKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIAkweDAwMDQKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFIAkJMHgwMDA4Ci0jZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFIAkweDAwMTAKLSNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfU0xJREVSIAkJMHgwMDIwCi0jZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFkgCTB4MDA0MAotI2RlZmluZSBWNEwyX0NUUkxfRkxBR19WT0xBVElMRQkJMHgwMDgwCi0jZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0hBU19QQVlMT0FECTB4MDEwMAotI2RlZmluZSBWNEwyX0NUUkxfRkxBR19FWEVDVVRFX09OX1dSSVRFCTB4MDIwMAotCi0vKiAgUXVlcnkgZmxhZ3MsIHRvIGJlIE9SZWQgd2l0aCB0aGUgY29udHJvbCBJRCAqLwotI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwJMHg4MDAwMDAwMAotI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ORVhUX0NPTVBPVU5ECTB4NDAwMDAwMDAKLQotLyogIFVzZXItY2xhc3MgY29udHJvbCBJRHMgZGVmaW5lZCBieSBWNEwyICovCi0jZGVmaW5lIFY0TDJfQ0lEX01BWF9DVFJMUwkJMTAyNAotLyogIElEcyByZXNlcnZlZCBmb3IgZHJpdmVyIHNwZWNpZmljIGNvbnRyb2xzICovCi0jZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQkJMHgwODAwMDAwMAotCi0KLS8qCi0gKglUIFUgTiBJIE4gRwotICovCi1zdHJ1Y3QgdjRsMl90dW5lciB7Ci0JX191MzIgICAgICAgICAgICAgICAgICAgaW5kZXg7Ci0JX191OAkJCW5hbWVbMzJdOwotCV9fdTMyCQkJdHlwZTsJLyogZW51bSB2NGwyX3R1bmVyX3R5cGUgKi8KLQlfX3UzMgkJCWNhcGFiaWxpdHk7Ci0JX191MzIJCQlyYW5nZWxvdzsKLQlfX3UzMgkJCXJhbmdlaGlnaDsKLQlfX3UzMgkJCXJ4c3ViY2hhbnM7Ci0JX191MzIJCQlhdWRtb2RlOwotCV9fczMyCQkJc2lnbmFsOwotCV9fczMyCQkJYWZjOwotCV9fdTMyCQkJcmVzZXJ2ZWRbNF07Ci19OwotCi1zdHJ1Y3QgdjRsMl9tb2R1bGF0b3IgewotCV9fdTMyCQkJaW5kZXg7Ci0JX191OAkJCW5hbWVbMzJdOwotCV9fdTMyCQkJY2FwYWJpbGl0eTsKLQlfX3UzMgkJCXJhbmdlbG93OwotCV9fdTMyCQkJcmFuZ2VoaWdoOwotCV9fdTMyCQkJdHhzdWJjaGFuczsKLQlfX3UzMgkJCXJlc2VydmVkWzRdOwotfTsKLQotLyogIEZsYWdzIGZvciB0aGUgJ2NhcGFiaWxpdHknIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xPVwkJMHgwMDAxCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX05PUk0JCTB4MDAwMgotI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9IV1NFRUtfQk9VTkRFRAkweDAwMDQKLSNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfSFdTRUVLX1dSQVAJMHgwMDA4Ci0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NURVJFTwkJMHgwMDEwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyCQkweDAwMjAKLSNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU0FQCQkweDAwMjAKLSNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzEJCTB4MDA0MAotI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9SRFMJCTB4MDA4MAotI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9SRFNfQkxPQ0tfSU8JMHgwMTAwCi0jZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEU19DT05UUk9MUwkweDAyMDAKLSNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfRlJFUV9CQU5EUwkweDA0MDAKLSNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfSFdTRUVLX1BST0dfTElNCTB4MDgwMAotI2RlZmluZSBWNEwyX1RVTkVSX0NBUF8xSFoJCTB4MTAwMAotCi0vKiAgRmxhZ3MgZm9yIHRoZSAncnhzdWJjaGFucycgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTU9OTwkJMHgwMDAxCi0jZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTwkJMHgwMDAyCi0jZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyCQkweDAwMDQKLSNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU0FQCQkweDAwMDQKLSNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEJCTB4MDAwOAotI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9SRFMJCTB4MDAxMAotCi0vKiAgVmFsdWVzIGZvciB0aGUgJ2F1ZG1vZGUnIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9NT05PCQkweDAwMDAKLSNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTwkJMHgwMDAxCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMgkJMHgwMDAyCi0jZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TQVAJCTB4MDAwMgotI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzEJCTB4MDAwMwotI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIJMHgwMDA0Ci0KLXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSB7Ci0JX191MzIJdHVuZXI7Ci0JX191MzIJdHlwZTsJLyogZW51bSB2NGwyX3R1bmVyX3R5cGUgKi8KLQlfX3UzMglmcmVxdWVuY3k7Ci0JX191MzIJcmVzZXJ2ZWRbOF07Ci19OwotCi0jZGVmaW5lIFY0TDJfQkFORF9NT0RVTEFUSU9OX1ZTQgkoMSA8PCAxKQotI2RlZmluZSBWNEwyX0JBTkRfTU9EVUxBVElPTl9GTQkJKDEgPDwgMikKLSNkZWZpbmUgVjRMMl9CQU5EX01PRFVMQVRJT05fQU0JCSgxIDw8IDMpCi0KLXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeV9iYW5kIHsKLQlfX3UzMgl0dW5lcjsKLQlfX3UzMgl0eXBlOwkvKiBlbnVtIHY0bDJfdHVuZXJfdHlwZSAqLwotCV9fdTMyCWluZGV4OwotCV9fdTMyCWNhcGFiaWxpdHk7Ci0JX191MzIJcmFuZ2Vsb3c7Ci0JX191MzIJcmFuZ2VoaWdoOwotCV9fdTMyCW1vZHVsYXRpb247Ci0JX191MzIJcmVzZXJ2ZWRbOV07Ci19OwotCi1zdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgewotCV9fdTMyCXR1bmVyOwotCV9fdTMyCXR5cGU7CS8qIGVudW0gdjRsMl90dW5lcl90eXBlICovCi0JX191MzIJc2Vla191cHdhcmQ7Ci0JX191MzIJd3JhcF9hcm91bmQ7Ci0JX191MzIJc3BhY2luZzsKLQlfX3UzMglyYW5nZWxvdzsKLQlfX3UzMglyYW5nZWhpZ2g7Ci0JX191MzIJcmVzZXJ2ZWRbNV07Ci19OwotCi0vKgotICoJUiBEIFMKLSAqLwotCi1zdHJ1Y3QgdjRsMl9yZHNfZGF0YSB7Ci0JX191OCAJbHNiOwotCV9fdTggCW1zYjsKLQlfX3U4IAlibG9jazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFY0TDJfUkRTX0JMT0NLX01TSyAJIDB4NwotI2RlZmluZSBWNEwyX1JEU19CTE9DS19BIAkgMAotI2RlZmluZSBWNEwyX1JEU19CTE9DS19CIAkgMQotI2RlZmluZSBWNEwyX1JEU19CTE9DS19DIAkgMgotI2RlZmluZSBWNEwyX1JEU19CTE9DS19EIAkgMwotI2RlZmluZSBWNEwyX1JEU19CTE9DS19DX0FMVCAJIDQKLSNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfSU5WQUxJRCAJIDcKLQotI2RlZmluZSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQgMHg0MAotI2RlZmluZSBWNEwyX1JEU19CTE9DS19FUlJPUiAJIDB4ODAKLQotLyoKLSAqCUEgVSBEIEkgTwotICovCi1zdHJ1Y3QgdjRsMl9hdWRpbyB7Ci0JX191MzIJaW5kZXg7Ci0JX191OAluYW1lWzMyXTsKLQlfX3UzMgljYXBhYmlsaXR5OwotCV9fdTMyCW1vZGU7Ci0JX191MzIJcmVzZXJ2ZWRbMl07Ci19OwotCi0vKiAgRmxhZ3MgZm9yIHRoZSAnY2FwYWJpbGl0eScgZmllbGQgKi8KLSNkZWZpbmUgVjRMMl9BVURDQVBfU1RFUkVPCQkweDAwMDAxCi0jZGVmaW5lIFY0TDJfQVVEQ0FQX0FWTAkJCTB4MDAwMDIKLQotLyogIEZsYWdzIGZvciB0aGUgJ21vZGUnIGZpZWxkICovCi0jZGVmaW5lIFY0TDJfQVVETU9ERV9BVkwJCTB4MDAwMDEKLQotc3RydWN0IHY0bDJfYXVkaW9vdXQgewotCV9fdTMyCWluZGV4OwotCV9fdTgJbmFtZVszMl07Ci0JX191MzIJY2FwYWJpbGl0eTsKLQlfX3UzMgltb2RlOwotCV9fdTMyCXJlc2VydmVkWzJdOwotfTsKLQotLyoKLSAqCU0gUCBFIEcgICBTIEUgUiBWIEkgQyBFIFMKLSAqCi0gKglOT1RFOiBFWFBFUklNRU5UQUwgQVBJCi0gKi8KLSNpZiAxCi0jZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9JICAgICgwKQotI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfUCAgICAoMSkKLSNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX0IgICAgKDIpCi0jZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9NQVNLICgweGYpCi0KLXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgewotCV9fdTY0IG9mZnNldDsKLQlfX3U2NCBwdHM7Ci0JX191MzIgbGVuZ3RoOwotCV9fdTMyIGZsYWdzOwotCV9fdTMyIHJlc2VydmVkWzJdOwotfTsKLQotI2RlZmluZSBWNEwyX0VOQ19JRFhfRU5UUklFUyAoNjQpCi1zdHJ1Y3QgdjRsMl9lbmNfaWR4IHsKLQlfX3UzMiBlbnRyaWVzOwotCV9fdTMyIGVudHJpZXNfY2FwOwotCV9fdTMyIHJlc2VydmVkWzRdOwotCXN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgZW50cnlbVjRMMl9FTkNfSURYX0VOVFJJRVNdOwotfTsKLQotCi0jZGVmaW5lIFY0TDJfRU5DX0NNRF9TVEFSVCAgICAgICgwKQotI2RlZmluZSBWNEwyX0VOQ19DTURfU1RPUCAgICAgICAoMSkKLSNkZWZpbmUgVjRMMl9FTkNfQ01EX1BBVVNFICAgICAgKDIpCi0jZGVmaW5lIFY0TDJfRU5DX0NNRF9SRVNVTUUgICAgICgzKQotCi0vKiBGbGFncyBmb3IgVjRMMl9FTkNfQ01EX1NUT1AgKi8KLSNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORCAgICAoMSA8PCAwKQotCi1zdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCB7Ci0JX191MzIgY21kOwotCV9fdTMyIGZsYWdzOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fdTMyIGRhdGFbOF07Ci0JCX0gcmF3OwotCX07Ci19OwotCi0vKiBEZWNvZGVyIGNvbW1hbmRzICovCi0jZGVmaW5lIFY0TDJfREVDX0NNRF9TVEFSVCAgICAgICAoMCkKLSNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUT1AgICAgICAgICgxKQotI2RlZmluZSBWNEwyX0RFQ19DTURfUEFVU0UgICAgICAgKDIpCi0jZGVmaW5lIFY0TDJfREVDX0NNRF9SRVNVTUUgICAgICAoMykKLQotLyogRmxhZ3MgZm9yIFY0TDJfREVDX0NNRF9TVEFSVCAqLwotI2RlZmluZSBWNEwyX0RFQ19DTURfU1RBUlRfTVVURV9BVURJTwkoMSA8PCAwKQotCi0vKiBGbGFncyBmb3IgVjRMMl9ERUNfQ01EX1BBVVNFICovCi0jZGVmaW5lIFY0TDJfREVDX0NNRF9QQVVTRV9UT19CTEFDSwkoMSA8PCAwKQotCi0vKiBGbGFncyBmb3IgVjRMMl9ERUNfQ01EX1NUT1AgKi8KLSNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUT1BfVE9fQkxBQ0sJKDEgPDwgMCkKLSNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUT1BfSU1NRURJQVRFTFkJKDEgPDwgMSkKLQotLyogUGxheSBmb3JtYXQgcmVxdWlyZW1lbnRzIChyZXR1cm5lZCBieSB0aGUgZHJpdmVyKTogKi8KLQotLyogVGhlIGRlY29kZXIgaGFzIG5vIHNwZWNpYWwgZm9ybWF0IHJlcXVpcmVtZW50cyAqLwotI2RlZmluZSBWNEwyX0RFQ19TVEFSVF9GTVRfTk9ORQkJKDApCi0vKiBUaGUgZGVjb2RlciByZXF1aXJlcyBmdWxsIEdPUHMgKi8KLSNkZWZpbmUgVjRMMl9ERUNfU1RBUlRfRk1UX0dPUAkJKDEpCi0KLS8qIFRoZSBzdHJ1Y3R1cmUgbXVzdCBiZSB6ZXJvZWQgYmVmb3JlIHVzZSBieSB0aGUgYXBwbGljYXRpb24KLSAgIFRoaXMgZW5zdXJlcyBpdCBjYW4gYmUgZXh0ZW5kZWQgc2FmZWx5IGluIHRoZSBmdXR1cmUuICovCi1zdHJ1Y3QgdjRsMl9kZWNvZGVyX2NtZCB7Ci0JX191MzIgY21kOwotCV9fdTMyIGZsYWdzOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCV9fdTY0IHB0czsKLQkJfSBzdG9wOwotCi0JCXN0cnVjdCB7Ci0JCQkvKiAwIG9yIDEwMDAgc3BlY2lmaWVzIG5vcm1hbCBzcGVlZCwKLQkJCSAgIDEgc3BlY2lmaWVzIGZvcndhcmQgc2luZ2xlIHN0ZXBwaW5nLAotCQkJICAgLTEgc3BlY2lmaWVzIGJhY2t3YXJkIHNpbmdsZSBzdGVwcGluZywKLQkJCSAgID4xOiBwbGF5YmFjayBhdCBzcGVlZC8xMDAwIG9mIHRoZSBub3JtYWwgc3BlZWQsCi0JCQkgICA8LTE6IHJldmVyc2UgcGxheWJhY2sgYXQgKC1zcGVlZC8xMDAwKSBvZiB0aGUgbm9ybWFsIHNwZWVkLiAqLwotCQkJX19zMzIgc3BlZWQ7Ci0JCQlfX3UzMiBmb3JtYXQ7Ci0JCX0gc3RhcnQ7Ci0KLQkJc3RydWN0IHsKLQkJCV9fdTMyIGRhdGFbMTZdOwotCQl9IHJhdzsKLQl9OwotfTsKLSNlbmRpZgotCi0KLS8qCi0gKglEIEEgVCBBICAgUyBFIFIgViBJIEMgRSBTICAgKCBWIEIgSSApCi0gKgotICoJRGF0YSBzZXJ2aWNlcyBBUEkgYnkgTWljaGFlbCBTY2hpbWVrCi0gKi8KLQotLyogUmF3IFZCSSAqLwotc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCB7Ci0JX191MzIJc2FtcGxpbmdfcmF0ZTsJCS8qIGluIDEgSHogKi8KLQlfX3UzMglvZmZzZXQ7Ci0JX191MzIJc2FtcGxlc19wZXJfbGluZTsKLQlfX3UzMglzYW1wbGVfZm9ybWF0OwkJLyogVjRMMl9QSVhfRk1UXyogKi8KLQlfX3MzMglzdGFydFsyXTsKLQlfX3UzMgljb3VudFsyXTsKLQlfX3UzMglmbGFnczsJCQkvKiBWNEwyX1ZCSV8qICovCi0JX191MzIJcmVzZXJ2ZWRbMl07CQkvKiBtdXN0IGJlIHplcm8gKi8KLX07Ci0KLS8qICBWQkkgZmxhZ3MgICovCi0jZGVmaW5lIFY0TDJfVkJJX1VOU1lOQwkJKDEgPDwgMCkKLSNkZWZpbmUgVjRMMl9WQklfSU5URVJMQUNFRAkoMSA8PCAxKQotCi0vKiBJVFUtUiBzdGFydCBsaW5lcyBmb3IgZWFjaCBmaWVsZCAqLwotI2RlZmluZSBWNEwyX1ZCSV9JVFVfNTI1X0YxX1NUQVJUICgxKQotI2RlZmluZSBWNEwyX1ZCSV9JVFVfNTI1X0YyX1NUQVJUICgyNjQpCi0jZGVmaW5lIFY0TDJfVkJJX0lUVV82MjVfRjFfU1RBUlQgKDEpCi0jZGVmaW5lIFY0TDJfVkJJX0lUVV82MjVfRjJfU1RBUlQgKDMxNCkKLQotLyogU2xpY2VkIFZCSQotICoKLSAqICAgIFRoaXMgaW1wbGVtZW50cyBpcyBhIHByb3Bvc2FsIFY0TDIgQVBJIHRvIGFsbG93IFNMSUNFRCBWQkkKLSAqIHJlcXVpcmVkIGZvciBzb21lIGhhcmR3YXJlIGVuY29kZXJzLiBJdCBzaG91bGQgY2hhbmdlIHdpdGhvdXQKLSAqIG5vdGljZSBpbiB0aGUgZGVmaW5pdGl2ZSBpbXBsZW1lbnRhdGlvbi4KLSAqLwotCi1zdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCB7Ci0JX191MTYgICBzZXJ2aWNlX3NldDsKLQkvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCi0JICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKLQkJCQkgKGVxdWFscyBmcmFtZSBsaW5lcyAzMTMtMzM2IGZvciA2MjUgbGluZSB2aWRlbwotCQkJCSAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCi0JX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLQlfX3UzMiAgIGlvX3NpemU7Ci0JX191MzIgICByZXNlcnZlZFsyXTsgICAgICAgICAgICAvKiBtdXN0IGJlIHplcm8gKi8KLX07Ci0KLS8qIFRlbGV0ZXh0IFdvcmxkIFN5c3RlbSBUZWxldGV4dAotICAgKFdTVCksIGRlZmluZWQgb24gSVRVLVIgQlQuNjUzLTIgKi8KLSNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAgICAgICAgICAoMHgwMDAxKQotLyogVmlkZW8gUHJvZ3JhbSBTeXN0ZW0sIGRlZmluZWQgb24gRVRTIDMwMCAyMzEqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgICAgICAgICAgICAgICAgICgweDA0MDApCi0vKiBDbG9zZWQgQ2FwdGlvbiwgZGVmaW5lZCBvbiBFSUEtNjA4ICovCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICAgICAgICAgKDB4MTAwMCkKLS8qIFdpZGUgU2NyZWVuIFN5c3RlbSwgZGVmaW5lZCBvbiBJVFUtUiBCVDExMTkuMSAqLwotI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNjI1ICAgICAgICAgICAgICgweDQwMDApCi0KLSNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAgICAgICAgICAgICAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCi0jZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgICAgICAgICAgICAgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQotCi1zdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCB7Ci0JX191MTYgICBzZXJ2aWNlX3NldDsKLQkvKiBzZXJ2aWNlX2xpbmVzWzBdWy4uLl0gc3BlY2lmaWVzIGxpbmVzIDAtMjMgKDEtMjMgdXNlZCkgb2YgdGhlIGZpcnN0IGZpZWxkCi0JICAgc2VydmljZV9saW5lc1sxXVsuLi5dIHNwZWNpZmllcyBsaW5lcyAwLTIzICgxLTIzIHVzZWQpIG9mIHRoZSBzZWNvbmQgZmllbGQKLQkJCQkgKGVxdWFscyBmcmFtZSBsaW5lcyAzMTMtMzM2IGZvciA2MjUgbGluZSB2aWRlbwotCQkJCSAgc3RhbmRhcmRzLCAyNjMtMjg2IGZvciA1MjUgbGluZSBzdGFuZGFyZHMpICovCi0JX191MTYgICBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLQlfX3UzMgl0eXBlOwkJLyogZW51bSB2NGwyX2J1Zl90eXBlICovCi0JX191MzIgICByZXNlcnZlZFszXTsgICAgLyogbXVzdCBiZSAwICovCi19OwotCi1zdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgewotCV9fdTMyICAgaWQ7Ci0JX191MzIgICBmaWVsZDsgICAgICAgICAgLyogMDogZmlyc3QgZmllbGQsIDE6IHNlY29uZCBmaWVsZCAqLwotCV9fdTMyICAgbGluZTsgICAgICAgICAgIC8qIDEtMjMgKi8KLQlfX3UzMiAgIHJlc2VydmVkOyAgICAgICAvKiBtdXN0IGJlIDAgKi8KLQlfX3U4ICAgIGRhdGFbNDhdOwotfTsKLQotLyoKLSAqIFNsaWNlZCBWQkkgZGF0YSBpbnNlcnRlZCBpbnRvIE1QRUcgU3RyZWFtcwotICovCi0KLS8qCi0gKiBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUVjoKLSAqCi0gKiBTdHJ1Y3R1cmUgb2YgcGF5bG9hZCBjb250YWluZWQgaW4gYW4gTVBFRyAyIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCBpbiBhbgotICogTVBFRy0yIFByb2dyYW0gUGFjayB0aGF0IGNvbnRhaW5zIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWIFNsaWNlZCBWQkkKLSAqIGRhdGEKLSAqCi0gKiBOb3RlLCB0aGUgTVBFRy0yIFByb2dyYW0gUGFjayBhbmQgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgcGFja2V0IGhlYWRlcgotICogZGVmaW5pdGlvbnMgYXJlIG5vdCBpbmNsdWRlZCBoZXJlLiAgU2VlIHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbnMgZm9yIGRldGFpbHMKLSAqIG9uIHRoZXNlIGhlYWRlcnMuCi0gKi8KLQotLyogTGluZSB0eXBlIElEcyAqLwotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQiAgICAgKDEpCi0jZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNSAgICAoNCkKLSNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1dTU182MjUgICAgICAgICg1KQotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVlBTICAgICAgICAgICAgKDcpCi0KLXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSB7Ci0JX191OCBpZDsJLyogT25lIG9mIFY0TDJfTVBFR19WQklfSVZUVl8qIGFib3ZlICovCi0JX191OCBkYXRhWzQyXTsJLyogU2xpY2VkIFZCSSBkYXRhIGZvciB0aGUgbGluZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgewotCV9fbGUzMiBsaW5lbWFza1syXTsgLyogQml0bWFza3Mgb2YgVkJJIHNlcnZpY2UgbGluZXMgcHJlc2VudCAqLwotCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM1XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIHsKLQlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMwCSJpdHYwIgotI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMxCSJJVFYwIgotCi1zdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9mbXRfaXZ0diB7Ci0JX191OCBtYWdpY1s0XTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgaXR2MDsKLQkJc3RydWN0IHY0bDJfbXBlZ192YmlfSVRWMCBJVFYwOwotCX07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqCUEgRyBHIFIgRSBHIEEgVCBFICAgUyBUIFIgVSBDIFQgVSBSIEUgUwotICovCi0KLS8qKgotICogc3RydWN0IHY0bDJfcGxhbmVfcGl4X2Zvcm1hdCAtIGFkZGl0aW9uYWwsIHBlci1wbGFuZSBmb3JtYXQgZGVmaW5pdGlvbgotICogQHNpemVpbWFnZToJCW1heGltdW0gc2l6ZSBpbiBieXRlcyByZXF1aXJlZCBmb3IgZGF0YSwgZm9yIHdoaWNoCi0gKgkJCXRoaXMgcGxhbmUgd2lsbCBiZSB1c2VkCi0gKiBAYnl0ZXNwZXJsaW5lOglkaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHRoZSBsZWZ0bW9zdCBwaXhlbHMgaW4gdHdvCi0gKgkJCWFkamFjZW50IGxpbmVzCi0gKi8KLXN0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQgewotCV9fdTMyCQlzaXplaW1hZ2U7Ci0JX191MzIJCWJ5dGVzcGVybGluZTsKLQlfX3UxNgkJcmVzZXJ2ZWRbNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAtIG11bHRpcGxhbmFyIGZvcm1hdCBkZWZpbml0aW9uCi0gKiBAd2lkdGg6CQlpbWFnZSB3aWR0aCBpbiBwaXhlbHMKLSAqIEBoZWlnaHQ6CQlpbWFnZSBoZWlnaHQgaW4gcGl4ZWxzCi0gKiBAcGl4ZWxmb3JtYXQ6CWxpdHRsZSBlbmRpYW4gZm91ciBjaGFyYWN0ZXIgY29kZSAoZm91cmNjKQotICogQGZpZWxkOgkJZW51bSB2NGwyX2ZpZWxkOyBmaWVsZCBvcmRlciAoZm9yIGludGVybGFjZWQgdmlkZW8pCi0gKiBAY29sb3JzcGFjZToJCWVudW0gdjRsMl9jb2xvcnNwYWNlOyBzdXBwbGVtZW50YWwgdG8gcGl4ZWxmb3JtYXQKLSAqIEBwbGFuZV9mbXQ6CQlwZXItcGxhbmUgaW5mb3JtYXRpb24KLSAqIEBudW1fcGxhbmVzOgkJbnVtYmVyIG9mIHBsYW5lcyBmb3IgdGhpcyBmb3JtYXQKLSAqIEBmbGFnczoJCWZvcm1hdCBmbGFncyAoVjRMMl9QSVhfRk1UX0ZMQUdfKikKLSAqIEB5Y2Jjcl9lbmM6CQllbnVtIHY0bDJfeWNiY3JfZW5jb2RpbmcsIFknQ2JDciBlbmNvZGluZwotICogQHF1YW50aXphdGlvbjoJZW51bSB2NGwyX3F1YW50aXphdGlvbiwgY29sb3JzcGFjZSBxdWFudGl6YXRpb24KLSAqIEB4ZmVyX2Z1bmM6CQllbnVtIHY0bDJfeGZlcl9mdW5jLCBjb2xvcnNwYWNlIHRyYW5zZmVyIGZ1bmN0aW9uCi0gKi8KLXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lIHsKLQlfX3UzMgkJCQl3aWR0aDsKLQlfX3UzMgkJCQloZWlnaHQ7Ci0JX191MzIJCQkJcGl4ZWxmb3JtYXQ7Ci0JX191MzIJCQkJZmllbGQ7Ci0JX191MzIJCQkJY29sb3JzcGFjZTsKLQotCXN0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQJcGxhbmVfZm10W1ZJREVPX01BWF9QTEFORVNdOwotCV9fdTgJCQkJbnVtX3BsYW5lczsKLQlfX3U4CQkJCWZsYWdzOwotCV9fdTgJCQkJeWNiY3JfZW5jOwotCV9fdTgJCQkJcXVhbnRpemF0aW9uOwotCV9fdTgJCQkJeGZlcl9mdW5jOwotCV9fdTgJCQkJcmVzZXJ2ZWRbN107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3QgdjRsMl9zZHJfZm9ybWF0IC0gU0RSIGZvcm1hdCBkZWZpbml0aW9uCi0gKiBAcGl4ZWxmb3JtYXQ6CWxpdHRsZSBlbmRpYW4gZm91ciBjaGFyYWN0ZXIgY29kZSAoZm91cmNjKQotICogQGJ1ZmZlcnNpemU6CQltYXhpbXVtIHNpemUgaW4gYnl0ZXMgcmVxdWlyZWQgZm9yIGRhdGEKLSAqLwotc3RydWN0IHY0bDJfc2RyX2Zvcm1hdCB7Ci0JX191MzIJCQkJcGl4ZWxmb3JtYXQ7Ci0JX191MzIJCQkJYnVmZmVyc2l6ZTsKLQlfX3U4CQkJCXJlc2VydmVkWzI0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCB2NGwyX2Zvcm1hdCAtIHN0cmVhbSBkYXRhIGZvcm1hdAotICogQHR5cGU6CWVudW0gdjRsMl9idWZfdHlwZTsgdHlwZSBvZiB0aGUgZGF0YSBzdHJlYW0KLSAqIEBwaXg6CWRlZmluaXRpb24gb2YgYW4gaW1hZ2UgZm9ybWF0Ci0gKiBAcGl4X21wOglkZWZpbml0aW9uIG9mIGEgbXVsdGlwbGFuYXIgaW1hZ2UgZm9ybWF0Ci0gKiBAd2luOglkZWZpbml0aW9uIG9mIGFuIG92ZXJsYWlkIGltYWdlCi0gKiBAdmJpOglyYXcgVkJJIGNhcHR1cmUgb3Igb3V0cHV0IHBhcmFtZXRlcnMKLSAqIEBzbGljZWQ6CXNsaWNlZCBWQkkgY2FwdHVyZSBvciBvdXRwdXQgcGFyYW1ldGVycwotICogQHJhd19kYXRhOglwbGFjZWhvbGRlciBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgYW5kIGN1c3RvbSBmb3JtYXRzCi0gKi8KLXN0cnVjdCB2NGwyX2Zvcm1hdCB7Ci0JX191MzIJIHR5cGU7Ci0JdW5pb24gewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0CQlwaXg7ICAgICAvKiBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgKi8KLQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUJcGl4X21wOyAgLyogVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSAqLwotCQlzdHJ1Y3QgdjRsMl93aW5kb3cJCXdpbjsgICAgIC8qIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSAqLwotCQlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0CQl2Ymk7ICAgICAvKiBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFICovCi0JCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0CXNsaWNlZDsgIC8qIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICovCi0JCXN0cnVjdCB2NGwyX3Nkcl9mb3JtYXQJCXNkcjsgICAgIC8qIFY0TDJfQlVGX1RZUEVfU0RSX0NBUFRVUkUgKi8KLQkJX191OAlyYXdfZGF0YVsyMDBdOyAgICAgICAgICAgICAgICAgICAvKiB1c2VyLWRlZmluZWQgKi8KLQl9IGZtdDsKLX07Ci0KLS8qCVN0cmVhbSB0eXBlLWRlcGVuZGVudCBwYXJhbWV0ZXJzCi0gKi8KLXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gewotCV9fdTMyCSB0eXBlOwkJCS8qIGVudW0gdjRsMl9idWZfdHlwZSAqLwotCXVuaW9uIHsKLQkJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0JY2FwdHVyZTsKLQkJc3RydWN0IHY0bDJfb3V0cHV0cGFybQlvdXRwdXQ7Ci0JCV9fdTgJcmF3X2RhdGFbMjAwXTsgIC8qIHVzZXItZGVmaW5lZCAqLwotCX0gcGFybTsKLX07Ci0KLS8qCi0gKglFIFYgRSBOIFQgUwotICovCi0KLSNkZWZpbmUgVjRMMl9FVkVOVF9BTEwJCQkJMAotI2RlZmluZSBWNEwyX0VWRU5UX1ZTWU5DCQkJMQotI2RlZmluZSBWNEwyX0VWRU5UX0VPUwkJCQkyCi0jZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTAkJCQkzCi0jZGVmaW5lIFY0TDJfRVZFTlRfRlJBTUVfU1lOQwkJCTQKLSNkZWZpbmUgVjRMMl9FVkVOVF9TT1VSQ0VfQ0hBTkdFCQk1Ci0jZGVmaW5lIFY0TDJfRVZFTlRfTU9USU9OX0RFVAkJCTYKLSNkZWZpbmUgVjRMMl9FVkVOVF9QUklWQVRFX1NUQVJUCQkweDA4MDAwMDAwCi0KLS8qIFBheWxvYWQgZm9yIFY0TDJfRVZFTlRfVlNZTkMgKi8KLXN0cnVjdCB2NGwyX2V2ZW50X3ZzeW5jIHsKLQkvKiBDYW4gYmUgVjRMMl9GSUVMRF9BTlksIF9OT05FLCBfVE9QIG9yIF9CT1RUT00gKi8KLQlfX3U4IGZpZWxkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFBheWxvYWQgZm9yIFY0TDJfRVZFTlRfQ1RSTCAqLwotI2RlZmluZSBWNEwyX0VWRU5UX0NUUkxfQ0hfVkFMVUUJCSgxIDw8IDApCi0jZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9GTEFHUwkJKDEgPDwgMSkKLSNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMX0NIX1JBTkdFCQkoMSA8PCAyKQotCi1zdHJ1Y3QgdjRsMl9ldmVudF9jdHJsIHsKLQlfX3UzMiBjaGFuZ2VzOwotCV9fdTMyIHR5cGU7Ci0JdW5pb24gewotCQlfX3MzMiB2YWx1ZTsKLQkJX19zNjQgdmFsdWU2NDsKLQl9OwotCV9fdTMyIGZsYWdzOwotCV9fczMyIG1pbmltdW07Ci0JX19zMzIgbWF4aW11bTsKLQlfX3MzMiBzdGVwOwotCV9fczMyIGRlZmF1bHRfdmFsdWU7Ci19OwotCi1zdHJ1Y3QgdjRsMl9ldmVudF9mcmFtZV9zeW5jIHsKLQlfX3UzMiBmcmFtZV9zZXF1ZW5jZTsKLX07Ci0KLSNkZWZpbmUgVjRMMl9FVkVOVF9TUkNfQ0hfUkVTT0xVVElPTgkJKDEgPDwgMCkKLQotc3RydWN0IHY0bDJfZXZlbnRfc3JjX2NoYW5nZSB7Ci0JX191MzIgY2hhbmdlczsKLX07Ci0KLSNkZWZpbmUgVjRMMl9FVkVOVF9NRF9GTF9IQVZFX0ZSQU1FX1NFUQkoMSA8PCAwKQotCi0vKioKLSAqIHN0cnVjdCB2NGwyX2V2ZW50X21vdGlvbl9kZXQgLSBtb3Rpb24gZGV0ZWN0aW9uIGV2ZW50Ci0gKiBAZmxhZ3M6ICAgICAgICAgICAgIGlmIFY0TDJfRVZFTlRfTURfRkxfSEFWRV9GUkFNRV9TRVEgaXMgc2V0LCB0aGVuIHRoZQotICogICAgICAgICAgICAgICAgICAgICBmcmFtZV9zZXF1ZW5jZSBmaWVsZCBpcyB2YWxpZC4KLSAqIEBmcmFtZV9zZXF1ZW5jZTogICAgdGhlIGZyYW1lIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudC4KLSAqIEByZWdpb25fbWFzazogICAgICAgd2hpY2ggcmVnaW9ucyBkZXRlY3RlZCBtb3Rpb24uCi0gKi8KLXN0cnVjdCB2NGwyX2V2ZW50X21vdGlvbl9kZXQgewotCV9fdTMyIGZsYWdzOwotCV9fdTMyIGZyYW1lX3NlcXVlbmNlOwotCV9fdTMyIHJlZ2lvbl9tYXNrOwotfTsKLQotc3RydWN0IHY0bDJfZXZlbnQgewotCV9fdTMyCQkJCXR5cGU7Ci0JdW5pb24gewotCQlzdHJ1Y3QgdjRsMl9ldmVudF92c3luYwkJdnN5bmM7Ci0JCXN0cnVjdCB2NGwyX2V2ZW50X2N0cmwJCWN0cmw7Ci0JCXN0cnVjdCB2NGwyX2V2ZW50X2ZyYW1lX3N5bmMJZnJhbWVfc3luYzsKLQkJc3RydWN0IHY0bDJfZXZlbnRfc3JjX2NoYW5nZQlzcmNfY2hhbmdlOwotCQlzdHJ1Y3QgdjRsMl9ldmVudF9tb3Rpb25fZGV0CW1vdGlvbl9kZXQ7Ci0JCV9fdTgJCQkJZGF0YVs2NF07Ci0JfSB1OwotCV9fdTMyCQkJCXBlbmRpbmc7Ci0JX191MzIJCQkJc2VxdWVuY2U7Ci0Jc3RydWN0IHRpbWVzcGVjCQkJdGltZXN0YW1wOwotCV9fdTMyCQkJCWlkOwotCV9fdTMyCQkJCXJlc2VydmVkWzhdOwotfTsKLQotI2RlZmluZSBWNEwyX0VWRU5UX1NVQl9GTF9TRU5EX0lOSVRJQUwJCSgxIDw8IDApCi0jZGVmaW5lIFY0TDJfRVZFTlRfU1VCX0ZMX0FMTE9XX0ZFRURCQUNLCSgxIDw8IDEpCi0KLXN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbiB7Ci0JX191MzIJCQkJdHlwZTsKLQlfX3UzMgkJCQlpZDsKLQlfX3UzMgkJCQlmbGFnczsKLQlfX3UzMgkJCQlyZXNlcnZlZFs1XTsKLX07Ci0KLS8qCi0gKglBIEQgViBBIE4gQyBFIEQgICBEIEUgQiBVIEcgRyBJIE4gRwotICoKLSAqCU5PVEU6IEVYUEVSSU1FTlRBTCBBUEksIE5FVkVSIFJFTFkgT04gVEhJUyBJTiBBUFBMSUNBVElPTlMhCi0gKglGT1IgREVCVUdHSU5HLCBURVNUSU5HIEFORCBJTlRFUk5BTCBVU0UgT05MWSEKLSAqLwotCi0vKiBWSURJT0NfREJHX0dfUkVHSVNURVIgYW5kIFZJRElPQ19EQkdfU19SRUdJU1RFUiAqLwotCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9CUklER0UgICAgICAwICAvKiBNYXRjaCBhZ2FpbnN0IGNoaXAgSUQgb24gdGhlIGJyaWRnZSAoMCBmb3IgdGhlIGJyaWRnZSkgKi8KLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX1NVQkRFViAgICAgIDQgIC8qIE1hdGNoIGFnYWluc3Qgc3ViZGV2IGluZGV4ICovCi0KLS8qIFRoZSBmb2xsb3dpbmcgZm91ciBkZWZpbmVzIGFyZSBubyBsb25nZXIgaW4gdXNlICovCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9IT1NUIFY0TDJfQ0hJUF9NQVRDSF9CUklER0UKLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgIDEgIC8qIE1hdGNoIGFnYWluc3QgSTJDIGRyaXZlciBuYW1lICovCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiAgICAyICAvKiBNYXRjaCBhZ2FpbnN0IEkyQyA3LWJpdCBhZGRyZXNzICovCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9BQzk3ICAgICAgICAzICAvKiBNYXRjaCBhZ2FpbnN0IGFuY2lsbGFyeSBBQzk3IGNoaXAgKi8KLQotc3RydWN0IHY0bDJfZGJnX21hdGNoIHsKLQlfX3UzMiB0eXBlOyAvKiBNYXRjaCB0eXBlICovCi0JdW5pb24geyAgICAgLyogTWF0Y2ggdGhpcyBjaGlwLCBtZWFuaW5nIGRldGVybWluZWQgYnkgdHlwZSAqLwotCQlfX3UzMiBhZGRyOwotCQljaGFyIG5hbWVbMzJdOwotCX07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyIHsKLQlzdHJ1Y3QgdjRsMl9kYmdfbWF0Y2ggbWF0Y2g7Ci0JX191MzIgc2l6ZTsJLyogcmVnaXN0ZXIgc2l6ZSBpbiBieXRlcyAqLwotCV9fdTY0IHJlZzsKLQlfX3U2NCB2YWw7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBWNEwyX0NISVBfRkxfUkVBREFCTEUgKDEgPDwgMCkKLSNkZWZpbmUgVjRMMl9DSElQX0ZMX1dSSVRBQkxFICgxIDw8IDEpCi0KLS8qIFZJRElPQ19EQkdfR19DSElQX0lORk8gKi8KLXN0cnVjdCB2NGwyX2RiZ19jaGlwX2luZm8gewotCXN0cnVjdCB2NGwyX2RiZ19tYXRjaCBtYXRjaDsKLQljaGFyIG5hbWVbMzJdOwotCV9fdTMyIGZsYWdzOwotCV9fdTMyIHJlc2VydmVkWzMyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCB2NGwyX2NyZWF0ZV9idWZmZXJzIC0gVklESU9DX0NSRUFURV9CVUZTIGFyZ3VtZW50Ci0gKiBAaW5kZXg6CW9uIHJldHVybiwgaW5kZXggb2YgdGhlIGZpcnN0IGNyZWF0ZWQgYnVmZmVyCi0gKiBAY291bnQ6CWVudHJ5OiBudW1iZXIgb2YgcmVxdWVzdGVkIGJ1ZmZlcnMsCi0gKgkJcmV0dXJuOiBudW1iZXIgb2YgY3JlYXRlZCBidWZmZXJzCi0gKiBAbWVtb3J5OgllbnVtIHY0bDJfbWVtb3J5OyBidWZmZXIgbWVtb3J5IHR5cGUKLSAqIEBmb3JtYXQ6CWZyYW1lIGZvcm1hdCwgZm9yIHdoaWNoIGJ1ZmZlcnMgYXJlIHJlcXVlc3RlZAotICogQHJlc2VydmVkOglmdXR1cmUgZXh0ZW5zaW9ucwotICovCi1zdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyB7Ci0JX191MzIJCQlpbmRleDsKLQlfX3UzMgkJCWNvdW50OwotCV9fdTMyCQkJbWVtb3J5OwotCXN0cnVjdCB2NGwyX2Zvcm1hdAlmb3JtYXQ7Ci0JX191MzIJCQlyZXNlcnZlZFs4XTsKLX07Ci0KLS8qCi0gKglJIE8gQyBUIEwgICBDIE8gRCBFIFMgICBGIE8gUiAgIFYgSSBEIEUgTyAgIEQgRSBWIEkgQyBFIFMKLSAqCi0gKi8KLSNkZWZpbmUgVklESU9DX1FVRVJZQ0FQCQkgX0lPUignVicsICAwLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KQotI2RlZmluZSBWSURJT0NfUkVTRVJWRUQJCSAgX0lPKCdWJywgIDEpCi0jZGVmaW5lIFZJRElPQ19FTlVNX0ZNVCAgICAgICAgIF9JT1dSKCdWJywgIDIsIHN0cnVjdCB2NGwyX2ZtdGRlc2MpCi0jZGVmaW5lIFZJRElPQ19HX0ZNVAkJX0lPV1IoJ1YnLCAgNCwgc3RydWN0IHY0bDJfZm9ybWF0KQotI2RlZmluZSBWSURJT0NfU19GTVQJCV9JT1dSKCdWJywgIDUsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKLSNkZWZpbmUgVklESU9DX1JFUUJVRlMJCV9JT1dSKCdWJywgIDgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzKQotI2RlZmluZSBWSURJT0NfUVVFUllCVUYJCV9JT1dSKCdWJywgIDksIHN0cnVjdCB2NGwyX2J1ZmZlcikKLSNkZWZpbmUgVklESU9DX0dfRkJVRgkJIF9JT1IoJ1YnLCAxMCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCi0jZGVmaW5lIFZJRElPQ19TX0ZCVUYJCSBfSU9XKCdWJywgMTEsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyKQotI2RlZmluZSBWSURJT0NfT1ZFUkxBWQkJIF9JT1coJ1YnLCAxNCwgaW50KQotI2RlZmluZSBWSURJT0NfUUJVRgkJX0lPV1IoJ1YnLCAxNSwgc3RydWN0IHY0bDJfYnVmZmVyKQotI2RlZmluZSBWSURJT0NfRVhQQlVGCQlfSU9XUignVicsIDE2LCBzdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIpCi0jZGVmaW5lIFZJRElPQ19EUUJVRgkJX0lPV1IoJ1YnLCAxNywgc3RydWN0IHY0bDJfYnVmZmVyKQotI2RlZmluZSBWSURJT0NfU1RSRUFNT04JCSBfSU9XKCdWJywgMTgsIGludCkKLSNkZWZpbmUgVklESU9DX1NUUkVBTU9GRgkgX0lPVygnVicsIDE5LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19HX1BBUk0JCV9JT1dSKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCi0jZGVmaW5lIFZJRElPQ19TX1BBUk0JCV9JT1dSKCdWJywgMjIsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCi0jZGVmaW5lIFZJRElPQ19HX1NURAkJIF9JT1IoJ1YnLCAyMywgdjRsMl9zdGRfaWQpCi0jZGVmaW5lIFZJRElPQ19TX1NURAkJIF9JT1coJ1YnLCAyNCwgdjRsMl9zdGRfaWQpCi0jZGVmaW5lIFZJRElPQ19FTlVNU1RECQlfSU9XUignVicsIDI1LCBzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkKLSNkZWZpbmUgVklESU9DX0VOVU1JTlBVVAlfSU9XUignVicsIDI2LCBzdHJ1Y3QgdjRsMl9pbnB1dCkKLSNkZWZpbmUgVklESU9DX0dfQ1RSTAkJX0lPV1IoJ1YnLCAyNywgc3RydWN0IHY0bDJfY29udHJvbCkKLSNkZWZpbmUgVklESU9DX1NfQ1RSTAkJX0lPV1IoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKLSNkZWZpbmUgVklESU9DX0dfVFVORVIJCV9JT1dSKCdWJywgMjksIHN0cnVjdCB2NGwyX3R1bmVyKQotI2RlZmluZSBWSURJT0NfU19UVU5FUgkJIF9JT1coJ1YnLCAzMCwgc3RydWN0IHY0bDJfdHVuZXIpCi0jZGVmaW5lIFZJRElPQ19HX0FVRElPCQkgX0lPUignVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKLSNkZWZpbmUgVklESU9DX1NfQVVESU8JCSBfSU9XKCdWJywgMzQsIHN0cnVjdCB2NGwyX2F1ZGlvKQotI2RlZmluZSBWSURJT0NfUVVFUllDVFJMCV9JT1dSKCdWJywgMzYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkKLSNkZWZpbmUgVklESU9DX1FVRVJZTUVOVQlfSU9XUignVicsIDM3LCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUpCi0jZGVmaW5lIFZJRElPQ19HX0lOUFVUCQkgX0lPUignVicsIDM4LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19TX0lOUFVUCQlfSU9XUignVicsIDM5LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19HX0VESUQJCV9JT1dSKCdWJywgNDAsIHN0cnVjdCB2NGwyX2VkaWQpCi0jZGVmaW5lIFZJRElPQ19TX0VESUQJCV9JT1dSKCdWJywgNDEsIHN0cnVjdCB2NGwyX2VkaWQpCi0jZGVmaW5lIFZJRElPQ19HX09VVFBVVAkJIF9JT1IoJ1YnLCA0NiwgaW50KQotI2RlZmluZSBWSURJT0NfU19PVVRQVVQJCV9JT1dSKCdWJywgNDcsIGludCkKLSNkZWZpbmUgVklESU9DX0VOVU1PVVRQVVQJX0lPV1IoJ1YnLCA0OCwgc3RydWN0IHY0bDJfb3V0cHV0KQotI2RlZmluZSBWSURJT0NfR19BVURPVVQJCSBfSU9SKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQotI2RlZmluZSBWSURJT0NfU19BVURPVVQJCSBfSU9XKCdWJywgNTAsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQotI2RlZmluZSBWSURJT0NfR19NT0RVTEFUT1IJX0lPV1IoJ1YnLCA1NCwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQotI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IJIF9JT1coJ1YnLCA1NSwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQotI2RlZmluZSBWSURJT0NfR19GUkVRVUVOQ1kJX0lPV1IoJ1YnLCA1Niwgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQotI2RlZmluZSBWSURJT0NfU19GUkVRVUVOQ1kJIF9JT1coJ1YnLCA1Nywgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQotI2RlZmluZSBWSURJT0NfQ1JPUENBUAkJX0lPV1IoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKLSNkZWZpbmUgVklESU9DX0dfQ1JPUAkJX0lPV1IoJ1YnLCA1OSwgc3RydWN0IHY0bDJfY3JvcCkKLSNkZWZpbmUgVklESU9DX1NfQ1JPUAkJIF9JT1coJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKLSNkZWZpbmUgVklESU9DX0dfSlBFR0NPTVAJIF9JT1IoJ1YnLCA2MSwgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKQotI2RlZmluZSBWSURJT0NfU19KUEVHQ09NUAkgX0lPVygnVicsIDYyLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCi0jZGVmaW5lIFZJRElPQ19RVUVSWVNURCAgICAgIAkgX0lPUignVicsIDYzLCB2NGwyX3N0ZF9pZCkKLSNkZWZpbmUgVklESU9DX1RSWV9GTVQgICAgICAJX0lPV1IoJ1YnLCA2NCwgc3RydWN0IHY0bDJfZm9ybWF0KQotI2RlZmluZSBWSURJT0NfRU5VTUFVRElPCV9JT1dSKCdWJywgNjUsIHN0cnVjdCB2NGwyX2F1ZGlvKQotI2RlZmluZSBWSURJT0NfRU5VTUFVRE9VVAlfSU9XUignVicsIDY2LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKLSNkZWZpbmUgVklESU9DX0dfUFJJT1JJVFkJIF9JT1IoJ1YnLCA2NywgX191MzIpIC8qIGVudW0gdjRsMl9wcmlvcml0eSAqLwotI2RlZmluZSBWSURJT0NfU19QUklPUklUWQkgX0lPVygnVicsIDY4LCBfX3UzMikgLyogZW51bSB2NGwyX3ByaW9yaXR5ICovCi0jZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQotI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyAgICAgICAgIF9JTygnVicsIDcwKQotI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMJX0lPV1IoJ1YnLCA3MSwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQotI2RlZmluZSBWSURJT0NfU19FWFRfQ1RSTFMJX0lPV1IoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQotI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUwlfSU9XUignVicsIDczLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCi0jZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FU0laRVMJX0lPV1IoJ1YnLCA3NCwgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0pCi0jZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIF9JT1dSKCdWJywgNzUsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtKQotI2RlZmluZSBWSURJT0NfR19FTkNfSU5ERVggICAgICAgX0lPUignVicsIDc2LCBzdHJ1Y3QgdjRsMl9lbmNfaWR4KQotI2RlZmluZSBWSURJT0NfRU5DT0RFUl9DTUQgICAgICBfSU9XUignVicsIDc3LCBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCkKLSNkZWZpbmUgVklESU9DX1RSWV9FTkNPREVSX0NNRCAgX0lPV1IoJ1YnLCA3OCwgc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQpCi0KLS8qIEV4cGVyaW1lbnRhbCwgbWVhbnQgZm9yIGRlYnVnZ2luZywgdGVzdGluZyBhbmQgaW50ZXJuYWwgdXNlLgotICAgT25seSBpbXBsZW1lbnRlZCBpZiBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIGRlZmluZWQuCi0gICBZb3UgbXVzdCBiZSByb290IHRvIHVzZSB0aGVzZSBpb2N0bHMuIE5ldmVyIHVzZSB0aGVzZSBpbiBhcHBsaWNhdGlvbnMhICovCi0jZGVmaW5lCVZJRElPQ19EQkdfU19SRUdJU1RFUiAJIF9JT1coJ1YnLCA3OSwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQotI2RlZmluZQlWSURJT0NfREJHX0dfUkVHSVNURVIgCV9JT1dSKCdWJywgODAsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlcikKLQotI2RlZmluZSBWSURJT0NfU19IV19GUkVRX1NFRUsJIF9JT1coJ1YnLCA4Miwgc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrKQotCi0jZGVmaW5lCVZJRElPQ19TX0RWX1RJTUlOR1MJX0lPV1IoJ1YnLCA4Nywgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKLSNkZWZpbmUJVklESU9DX0dfRFZfVElNSU5HUwlfSU9XUignVicsIDg4LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQotI2RlZmluZQlWSURJT0NfRFFFVkVOVAkJIF9JT1IoJ1YnLCA4OSwgc3RydWN0IHY0bDJfZXZlbnQpCi0jZGVmaW5lCVZJRElPQ19TVUJTQ1JJQkVfRVZFTlQJIF9JT1coJ1YnLCA5MCwgc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uKQotI2RlZmluZQlWSURJT0NfVU5TVUJTQ1JJQkVfRVZFTlQgX0lPVygnVicsIDkxLCBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJzY3JpcHRpb24pCi0KLS8qIEV4cGVyaW1lbnRhbCwgdGhlIGJlbG93IHR3byBpb2N0bHMgbWF5IGNoYW5nZSBvdmVyIHRoZSBuZXh0IGNvdXBsZSBvZiBrZXJuZWwKLSAgIHZlcnNpb25zICovCi0jZGVmaW5lIFZJRElPQ19DUkVBVEVfQlVGUwlfSU9XUignVicsIDkyLCBzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycykKLSNkZWZpbmUgVklESU9DX1BSRVBBUkVfQlVGCV9JT1dSKCdWJywgOTMsIHN0cnVjdCB2NGwyX2J1ZmZlcikKLQotLyogRXhwZXJpbWVudGFsIHNlbGVjdGlvbiBBUEkgKi8KLSNkZWZpbmUgVklESU9DX0dfU0VMRUNUSU9OCV9JT1dSKCdWJywgOTQsIHN0cnVjdCB2NGwyX3NlbGVjdGlvbikKLSNkZWZpbmUgVklESU9DX1NfU0VMRUNUSU9OCV9JT1dSKCdWJywgOTUsIHN0cnVjdCB2NGwyX3NlbGVjdGlvbikKLQotLyogRXhwZXJpbWVudGFsLCB0aGVzZSB0d28gaW9jdGxzIG1heSBjaGFuZ2Ugb3ZlciB0aGUgbmV4dCBjb3VwbGUgb2Yga2VybmVsCi0gICB2ZXJzaW9ucy4gKi8KLSNkZWZpbmUgVklESU9DX0RFQ09ERVJfQ01ECV9JT1dSKCdWJywgOTYsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQotI2RlZmluZSBWSURJT0NfVFJZX0RFQ09ERVJfQ01ECV9JT1dSKCdWJywgOTcsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQotCi0vKiBFeHBlcmltZW50YWwsIHRoZXNlIHRocmVlIGlvY3RscyBtYXkgY2hhbmdlIG92ZXIgdGhlIG5leHQgY291cGxlIG9mIGtlcm5lbAotICAgdmVyc2lvbnMuICovCi0jZGVmaW5lIFZJRElPQ19FTlVNX0RWX1RJTUlOR1MgIF9JT1dSKCdWJywgOTgsIHN0cnVjdCB2NGwyX2VudW1fZHZfdGltaW5ncykKLSNkZWZpbmUgVklESU9DX1FVRVJZX0RWX1RJTUlOR1MgIF9JT1IoJ1YnLCA5OSwgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKLSNkZWZpbmUgVklESU9DX0RWX1RJTUlOR1NfQ0FQICAgX0lPV1IoJ1YnLCAxMDAsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3NfY2FwKQotCi0vKiBFeHBlcmltZW50YWwsIHRoaXMgaW9jdGwgbWF5IGNoYW5nZSBvdmVyIHRoZSBuZXh0IGNvdXBsZSBvZiBrZXJuZWwKLSAgIHZlcnNpb25zLiAqLwotI2RlZmluZSBWSURJT0NfRU5VTV9GUkVRX0JBTkRTCV9JT1dSKCdWJywgMTAxLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3lfYmFuZCkKLQotLyogRXhwZXJpbWVudGFsLCBtZWFudCBmb3IgZGVidWdnaW5nLCB0ZXN0aW5nIGFuZCBpbnRlcm5hbCB1c2UuCi0gICBOZXZlciB1c2UgdGhlc2UgaW4gYXBwbGljYXRpb25zISAqLwotI2RlZmluZSBWSURJT0NfREJHX0dfQ0hJUF9JTkZPICBfSU9XUignVicsIDEwMiwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaW5mbykKLQotI2RlZmluZSBWSURJT0NfUVVFUllfRVhUX0NUUkwJX0lPV1IoJ1YnLCAxMDMsIHN0cnVjdCB2NGwyX3F1ZXJ5X2V4dF9jdHJsKQotCi0vKiBSZW1pbmRlcjogd2hlbiBhZGRpbmcgbmV3IGlvY3RscyBwbGVhc2UgYWRkIHN1cHBvcnQgZm9yIHRoZW0gdG8KLSAgIGRyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGFzIHdlbGwhICovCi0KLSNkZWZpbmUgQkFTRV9WSURJT0NfUFJJVkFURQkxOTIJCS8qIDE5Mi0yNTUgYXJlIHByaXZhdGUgKi8KLQotI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVYyX0ggKi8KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDIuYyBiL3N5cy92NGwyL2dzdHY0bDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVlODI2YS4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgICAgICAgICAgICAyMDA2IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiBnc3R2NGwyLmM6IHBsdWdpbiBmb3IgdjRsMiBlbGVtZW50cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmbmRlZiBfR05VX1NPVVJDRQotIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAgICAgICAgICAvKiBPX0NMT0VYRUMgKi8KLSNlbmRpZgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAiZXh0L3ZpZGVvZGV2Mi5oIgotI2luY2x1ZGUgInY0bDItdXRpbHMuaCIKLQotI2luY2x1ZGUgImdzdHY0bDJvYmplY3QuaCIKLSNpbmNsdWRlICJnc3R2NGwyc3JjLmgiCi0jaW5jbHVkZSAiZ3N0djRsMnNpbmsuaCIKLSNpbmNsdWRlICJnc3R2NGwycmFkaW8uaCIKLSNpbmNsdWRlICJnc3R2NGwydmlkZW9kZWMuaCIKLSNpbmNsdWRlICJnc3R2NGwyZGV2aWNlcHJvdmlkZXIuaCIKLSNpbmNsdWRlICJnc3R2NGwydHJhbnNmb3JtLmgiCi0KLS8qIHVzZWQgaW4gdjRsMl9jYWxscy5jIGFuZCB2NGwyc3JjX2NhbGxzLmMgKi8KLUdTVF9ERUJVR19DQVRFR09SWSAodjRsMl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB2NGwyX2RlYnVnCi0KLSNpZmRlZiBHU1RfVjRMMl9FTkFCTEVfUFJPQkUKLS8qIFRoaXMgaXMgYSBtaW5pbWFsaXN0IHByb2JlLCBmb3Igc3BlZWQsIHdlIG9ubHkgZW51bWVyYXRlIGZvcm1hdHMgKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92NGwyX3Byb2JlX3RlbXBsYXRlX2NhcHMgKGNvbnN0IGdjaGFyICogZGV2aWNlLCBnaW50IHZpZGVvX2ZkLAotICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQotewotICBnaW50IG47Ci0gIHN0cnVjdCB2NGwyX2ZtdGRlc2MgZm9ybWF0OwotICBHc3RDYXBzICpjYXBzOwotCi0gIEdTVF9ERUJVRyAoIkdldHRpbmcgJXMgZm9ybWF0IGVudW1lcmF0aW9ucyIsIGRldmljZSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgZm9yIChuID0gMDs7IG4rKykgewotICAgIEdzdFN0cnVjdHVyZSAqdGVtcGxhdGU7Ci0KLSAgICBtZW1zZXQgKCZmb3JtYXQsIDAsIHNpemVvZiAoZm9ybWF0KSk7Ci0KLSAgICBmb3JtYXQuaW5kZXggPSBuOwotICAgIGZvcm1hdC50eXBlID0gdHlwZTsKLQotICAgIGlmIChpb2N0bCAodmlkZW9fZmQsIFZJRElPQ19FTlVNX0ZNVCwgJmZvcm1hdCkgPCAwKQotICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgZW51bWVyYXRpb24gKi8KLQotICAgIEdTVF9MT0cgKCJpbmRleDogICAgICAgJXUiLCBmb3JtYXQuaW5kZXgpOwotICAgIEdTVF9MT0cgKCJ0eXBlOiAgICAgICAgJWQiLCBmb3JtYXQudHlwZSk7Ci0gICAgR1NUX0xPRyAoImZsYWdzOiAgICAgICAlMDh4IiwgZm9ybWF0LmZsYWdzKTsKLSAgICBHU1RfTE9HICgiZGVzY3JpcHRpb246ICclcyciLCBmb3JtYXQuZGVzY3JpcHRpb24pOwotICAgIEdTVF9MT0cgKCJwaXhlbGZvcm1hdDogJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm9ybWF0LnBpeGVsZm9ybWF0KSk7Ci0KLSAgICB0ZW1wbGF0ZSA9IGdzdF92NGwyX29iamVjdF92NGwyZm91cmNjX3RvX3N0cnVjdHVyZSAoZm9ybWF0LnBpeGVsZm9ybWF0KTsKLQotICAgIGlmICh0ZW1wbGF0ZSkgewotICAgICAgR3N0U3RydWN0dXJlICphbHRfdCA9IE5VTEw7Ci0KLSAgICAgIHN3aXRjaCAoZm9ybWF0LnBpeGVsZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjMyOgotICAgICAgICAgIGFsdF90ID0gZ3N0X3N0cnVjdHVyZV9jb3B5ICh0ZW1wbGF0ZSk7Ci0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKGFsdF90LCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkFSR0IiLCBOVUxMKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWNEwyX1BJWF9GTVRfQkdSMzI6Ci0gICAgICAgICAgYWx0X3QgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHRlbXBsYXRlKTsKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoYWx0X3QsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsIE5VTEwpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzLCB0ZW1wbGF0ZSk7Ci0KLSAgICAgIGlmIChhbHRfdCkKLSAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoY2FwcywgYWx0X3QpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBnc3RfY2Fwc19zaW1wbGlmeSAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfcHJvYmVfYW5kX3JlZ2lzdGVyIChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIEdzdFY0bDJJdGVyYXRvciAqaXQ7Ci0gIGdpbnQgdmlkZW9fZmQgPSAtMTsKLSAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSB2Y2FwOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBndWludDMyIGRldmljZV9jYXBzOwotCi0gIGl0ID0gZ3N0X3Y0bDJfaXRlcmF0b3JfbmV3ICgpOwotCi0gIHdoaWxlIChnc3RfdjRsMl9pdGVyYXRvcl9uZXh0IChpdCkpIHsKLSAgICBHc3RDYXBzICpzcmNfY2FwcywgKnNpbmtfY2FwczsKLSAgICBnY2hhciAqYmFzZW5hbWU7Ci0KLSAgICBpZiAodmlkZW9fZmQgPj0gMCkKLSAgICAgIGNsb3NlICh2aWRlb19mZCk7Ci0KLSAgICB2aWRlb19mZCA9IG9wZW4gKGl0LT5kZXZpY2VfcGF0aCwgT19SRFdSIHwgT19DTE9FWEVDKTsKLQotICAgIGlmICh2aWRlb19mZCA9PSAtMSkgewotICAgICAgR1NUX0RFQlVHICgiRmFpbGVkIHRvIG9wZW4gJXM6ICVzIiwgaXQtPmRldmljZV9wYXRoLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgbWVtc2V0ICgmdmNhcCwgMCwgc2l6ZW9mICh2Y2FwKSk7Ci0KLSAgICBpZiAoaW9jdGwgKHZpZGVvX2ZkLCBWSURJT0NfUVVFUllDQVAsICZ2Y2FwKSA8IDApIHsKLSAgICAgIEdTVF9ERUJVRyAoIkZhaWxlZCB0byBnZXQgZGV2aWNlIGNhcGFiaWxpdGllczogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKHZjYXAuY2FwYWJpbGl0aWVzICYgVjRMMl9DQVBfREVWSUNFX0NBUFMpCi0gICAgICBkZXZpY2VfY2FwcyA9IHZjYXAuZGV2aWNlX2NhcHM7Ci0gICAgZWxzZQotICAgICAgZGV2aWNlX2NhcHMgPSB2Y2FwLmNhcGFiaWxpdGllczsKLQotICAgIGlmICghKChkZXZpY2VfY2FwcyAmIChWNEwyX0NBUF9WSURFT19NMk0gfCBWNEwyX0NBUF9WSURFT19NMk1fTVBMQU5FKSkgfHwKLSAgICAgICAgICAgIC8qIEJ1dCBsZWdhY3kgZHJpdmVyIG1heSBleHBvc2UgYm90aCBDQVBUVVJFIGFuZCBPVVRQVVQgKi8KLSAgICAgICAgICAgICgoZGV2aWNlX2NhcHMgJgotICAgICAgICAgICAgICAgICAgICAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSkgJiYKLSAgICAgICAgICAgICAgICAoZGV2aWNlX2NhcHMgJgotICAgICAgICAgICAgICAgICAgICAoVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfVklERU9fT1VUUFVUX01QTEFORSkpKSkpCi0gICAgICBjb250aW51ZTsKLQotICAgIEdTVF9ERUJVRyAoIlByb2JpbmcgJyVzJyBsb2NhdGVkIGF0ICclcyciLAotICAgICAgICBpdC0+ZGV2aWNlX25hbWUgPyBpdC0+ZGV2aWNlX25hbWUgOiAoY29uc3QgZ2NoYXIgKikgdmNhcC5kcml2ZXIsCi0gICAgICAgIGl0LT5kZXZpY2VfcGF0aCk7Ci0KLSAgICAvKiBnZXQgc2luayBzdXBwb3J0ZWQgZm9ybWF0IChubyBNUExBTkUgZm9yIGNvZGVjKSAqLwotICAgIHNpbmtfY2FwcyA9IGdzdF9jYXBzX21lcmdlIChnc3RfdjRsMl9wcm9iZV90ZW1wbGF0ZV9jYXBzIChpdC0+ZGV2aWNlX3BhdGgsCi0gICAgICAgICAgICB2aWRlb19mZCwgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpLAotICAgICAgICBnc3RfdjRsMl9wcm9iZV90ZW1wbGF0ZV9jYXBzIChpdC0+ZGV2aWNlX3BhdGgsIHZpZGVvX2ZkLAotICAgICAgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSk7Ci0KLSAgICAvKiBnZXQgc3JjIHN1cHBvcnRlZCBmb3JtYXQgKi8KLSAgICBzcmNfY2FwcyA9IGdzdF9jYXBzX21lcmdlIChnc3RfdjRsMl9wcm9iZV90ZW1wbGF0ZV9jYXBzIChpdC0+ZGV2aWNlX3BhdGgsCi0gICAgICAgICAgICB2aWRlb19mZCwgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSwKLSAgICAgICAgZ3N0X3Y0bDJfcHJvYmVfdGVtcGxhdGVfY2FwcyAoaXQtPmRldmljZV9wYXRoLCB2aWRlb19mZCwKLSAgICAgICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpKTsKLQotICAgIC8qIFNraXAgZGV2aWNlcyB3aXRob3V0IGFueSBzdXBwb3J0ZWQgZm9ybWF0cyAqLwotICAgIGlmIChnc3RfY2Fwc19pc19lbXB0eSAoc2lua19jYXBzKSB8fCBnc3RfY2Fwc19pc19lbXB0eSAoc3JjX2NhcHMpKSB7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoc2lua19jYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChzcmNfY2Fwcyk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBiYXNlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUgKGl0LT5kZXZpY2VfcGF0aCk7Ci0KLSAgICBpZiAoZ3N0X3Y0bDJfaXNfdmlkZW9fZGVjIChzaW5rX2NhcHMsIHNyY19jYXBzKSkKLSAgICAgIHJldCA9IGdzdF92NGwyX3ZpZGVvX2RlY19yZWdpc3RlciAocGx1Z2luLCBiYXNlbmFtZSwgaXQtPmRldmljZV9wYXRoLAotICAgICAgICAgIHNpbmtfY2Fwcywgc3JjX2NhcHMpOwotICAgIGVsc2UgaWYgKGdzdF92NGwyX2lzX3RyYW5zZm9ybSAoc2lua19jYXBzLCBzcmNfY2FwcykpCi0gICAgICByZXQgPSBnc3RfdjRsMl90cmFuc2Zvcm1fcmVnaXN0ZXIgKHBsdWdpbiwgYmFzZW5hbWUsIGl0LT5kZXZpY2VfcGF0aCwKLSAgICAgICAgICBzaW5rX2NhcHMsIHNyY19jYXBzKTsKLSAgICAvKiBlbHNlIGlmICggLi4uIGV0Yy4gKi8KLQotICAgIGdzdF9jYXBzX3VucmVmIChzaW5rX2NhcHMpOwotICAgIGdzdF9jYXBzX3VucmVmIChzcmNfY2Fwcyk7Ci0gICAgZ19mcmVlIChiYXNlbmFtZSk7Ci0KLSAgICBpZiAoIXJldCkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKHZpZGVvX2ZkID49IDApCi0gICAgY2xvc2UgKHZpZGVvX2ZkKTsKLQotICBnc3RfdjRsMl9pdGVyYXRvcl9mcmVlIChpdCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGNvbnN0IGdjaGFyICpwYXRoc1tdID0geyAiL2RldiIsICIvZGV2L3Y0bDIiLCBOVUxMIH07Ci0gIGNvbnN0IGdjaGFyICpuYW1lc1tdID0geyAidmlkZW8iLCBOVUxMIH07Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHY0bDJfZGVidWcsICJ2NGwyIiwgMCwgIlY0TDIgQVBJIGNhbGxzIik7Ci0KLSAgLyogQWRkIHNvbWUgZGVwZWRlbmN5LCBzbyB0aGUgZHluYW1pYyBmZWF0dXJlcyBnZXQgdXBkYXRlZCB1cG9uIGNoYW5nZXMgaW4KLSAgICogL2Rldi92aWRlbyogKi8KLSAgZ3N0X3BsdWdpbl9hZGRfZGVwZW5kZW5jeSAocGx1Z2luLAotICAgICAgTlVMTCwgcGF0aHMsIG5hbWVzLCBHU1RfUExVR0lOX0RFUEVOREVOQ1lfRkxBR19GSUxFX05BTUVfSVNfUFJFRklYKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2NGwyc3JjIiwgR1NUX1JBTktfUFJJTUFSWSwKLSAgICAgICAgICBHU1RfVFlQRV9WNEwyU1JDKSB8fAotICAgICAgIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJ2NGwyc2luayIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfVjRMMlNJTkspIHx8Ci0gICAgICAhZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInY0bDJyYWRpbyIsIEdTVF9SQU5LX05PTkUsCi0gICAgICAgICAgR1NUX1RZUEVfVjRMMlJBRElPKSB8fAotICAgICAgIWdzdF9kZXZpY2VfcHJvdmlkZXJfcmVnaXN0ZXIgKHBsdWdpbiwgInY0bDJkZXZpY2Vwcm92aWRlciIsCi0gICAgICAgICAgR1NUX1JBTktfUFJJTUFSWSwgR1NUX1RZUEVfVjRMMl9ERVZJQ0VfUFJPVklERVIpCi0gICAgICAvKiBldGMuICovCi0jaWZkZWYgR1NUX1Y0TDJfRU5BQkxFX1BST0JFCi0gICAgICB8fCAhZ3N0X3Y0bDJfcHJvYmVfYW5kX3JlZ2lzdGVyIChwbHVnaW4pCi0jZW5kaWYKLSAgICAgICkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSNpZmRlZiBFTkFCTEVfTkxTCi0gIGJpbmR0ZXh0ZG9tYWluIChHRVRURVhUX1BBQ0tBR0UsIExPQ0FMRURJUik7Ci0gIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChHRVRURVhUX1BBQ0tBR0UsICJVVEYtOCIpOwotI2VuZGlmIC8qIEVOQUJMRV9OTFMgKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1BMVUdJTl9ERUZJTkUgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgIEdTVF9WRVJTSU9OX01JTk9SLAotICAgIHZpZGVvNGxpbnV4MiwKLSAgICAiZWxlbWVudHMgZm9yIFZpZGVvIDQgTGludXgiLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCBHU1RfTElDRU5TRSwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jIGIvc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQ3MzgzLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBDb2xsYWJvcmEgTHRkLgotICogICAgIEF1dGhvcjogTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZm5kZWYgX0dOVV9TT1VSQ0UKLSMgZGVmaW5lIF9HTlVfU09VUkNFICAgICAgICAgICAgLyogT19DTE9FWEVDICovCi0jZW5kaWYKLQotI2luY2x1ZGUgImV4dC92aWRlb2RldjIuaCIKLSNpbmNsdWRlICJnc3R2NGwyYWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAidjRsMl9jYWxscy5oIgotCi0jaW5jbHVkZSA8Z3N0L2FsbG9jYXRvcnMvZ3N0ZG1hYnVmLmg+Ci0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLQotI2RlZmluZSBHU1RfVjRMMl9NRU1PUllfVFlQRSAiVjRsMk1lbW9yeSIKLQotI2RlZmluZSBnc3RfdjRsMl9hbGxvY2F0b3JfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0VjRsMkFsbG9jYXRvciwgZ3N0X3Y0bDJfYWxsb2NhdG9yLCBHU1RfVFlQRV9BTExPQ0FUT1IpOwotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh2NGwyYWxsb2NhdG9yX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHY0bDJhbGxvY2F0b3JfZGVidWcKLQotI2RlZmluZSBVTlNFVF9RVUVVRUQoYnVmZmVyKSBcCi0gICAgKChidWZmZXIpLmZsYWdzICY9IH4oVjRMMl9CVUZfRkxBR19RVUVVRUQgfCBWNEwyX0JVRl9GTEFHX0RPTkUpKQotCi0jZGVmaW5lIFNFVF9RVUVVRUQoYnVmZmVyKSAoKGJ1ZmZlcikuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQpCi0KLSNkZWZpbmUgSVNfUVVFVUVEKGJ1ZmZlcikgXAotICAgICgoYnVmZmVyKS5mbGFncyAmIChWNEwyX0JVRl9GTEFHX1FVRVVFRCB8IFY0TDJfQlVGX0ZMQUdfRE9ORSkpCi0KLWVudW0KLXsKLSAgR1JPVVBfUkVMRUFTRUQsCi0gIExBU1RfU0lHTkFMCi19OwotCi1zdGF0aWMgZ3VpbnQgZ3N0X3Y0bDJfYWxsb2NhdG9yX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyB2b2lkIGdzdF92NGwyX2FsbG9jYXRvcl9yZWxlYXNlIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgIEdzdFY0bDJNZW1vcnkgKiBtZW0pOwotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKgotbWVtb3J5X3R5cGVfdG9fc3RyIChndWludDMyIG1lbW9yeSkKLXsKLSAgc3dpdGNoIChtZW1vcnkpIHsKLSAgICBjYXNlIFY0TDJfTUVNT1JZX01NQVA6Ci0gICAgICByZXR1cm4gIm1tYXAiOwotICAgIGNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKLSAgICAgIHJldHVybiAidXNlcnB0ciI7Ci0gICAgY2FzZSBWNEwyX01FTU9SWV9ETUFCVUY6Ci0gICAgICByZXR1cm4gImRtYWJ1ZiI7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAidW5rbm93biI7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBHc3RWNGxNZW1vcnkgaW1wbGVtZW50YXRpb24gKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgZ3BvaW50ZXIKLV92NGwybWVtX21hcCAoR3N0VjRsMk1lbW9yeSAqIG1lbSwgZ3NpemUgbWF4c2l6ZSwgR3N0TWFwRmxhZ3MgZmxhZ3MpCi17Ci0gIGdwb2ludGVyIGRhdGEgPSBOVUxMOwotCi0gIHN3aXRjaCAobWVtLT5ncm91cC0+YnVmZmVyLm1lbW9yeSkgewotICAgIGNhc2UgVjRMMl9NRU1PUllfTU1BUDoKLSAgICBjYXNlIFY0TDJfTUVNT1JZX1VTRVJQVFI6Ci0gICAgICBkYXRhID0gbWVtLT5kYXRhOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX01FTU9SWV9ETUFCVUY6Ci0gICAgICAvKiB2NGwyIGRtYWJ1ZiBtZW1vcnkgYXJlIG5vdCBzaGFyZWQgd2l0aCBkb3duc3RyZWFtICovCi0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklORyAoIlVua25vd24gbWVtb3J5IHR5cGUgJWkiLCBtZW0tPmdyb3VwLT5idWZmZXIubWVtb3J5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV92NGwybWVtX3VubWFwIChHc3RWNGwyTWVtb3J5ICogbWVtKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBzd2l0Y2ggKG1lbS0+Z3JvdXAtPmJ1ZmZlci5tZW1vcnkpIHsKLSAgICBjYXNlIFY0TDJfTUVNT1JZX01NQVA6Ci0gICAgY2FzZSBWNEwyX01FTU9SWV9VU0VSUFRSOgotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9NRU1PUllfRE1BQlVGOgotICAgICAgLyogdjRsMiBkbWFidWYgbWVtb3J5IGFyZSBub3Qgc2hhcmUgd2l0aCBkb3duc3RyZWFtICovCi0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklORyAoIlVua25vd24gbWVtb3J5IHR5cGUgJWkiLCBtZW0tPmdyb3VwLT5idWZmZXIubWVtb3J5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotX3Y0bDJtZW1fZGlzcG9zZSAoR3N0VjRsMk1lbW9yeSAqIG1lbSkKLXsKLSAgR3N0VjRsMkFsbG9jYXRvciAqYWxsb2NhdG9yID0gKEdzdFY0bDJBbGxvY2F0b3IgKikgbWVtLT5tZW0uYWxsb2NhdG9yOwotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwID0gbWVtLT5ncm91cDsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIGlmIChncm91cC0+bWVtW21lbS0+cGxhbmVdKSB7Ci0gICAgLyogV2UgbWF5IGhhdmUgYSBkbWFidWYsIHJlcGxhY2UgaXQgd2l0aCByZXR1cm5lZCBvcmlnaW5hbCBtZW1vcnkgKi8KLSAgICBncm91cC0+bWVtW21lbS0+cGxhbmVdID0gZ3N0X21lbW9yeV9yZWYgKChHc3RNZW1vcnkgKikgbWVtKTsKLSAgICBnc3RfdjRsMl9hbGxvY2F0b3JfcmVsZWFzZSAoYWxsb2NhdG9yLCBtZW0pOwotICAgIHJldCA9IEZBTFNFOwotICB9IGVsc2UgewotICAgIGdzdF9vYmplY3RfcmVmIChhbGxvY2F0b3IpOwotICAgIHJldCA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIEdzdFY0bDJNZW1vcnkgKgotX3Y0bDJtZW1fbmV3IChHc3RNZW1vcnlGbGFncyBmbGFncywgR3N0QWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgIEdzdE1lbW9yeSAqIHBhcmVudCwgZ3NpemUgbWF4c2l6ZSwgZ3NpemUgYWxpZ24sIGdzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSwKLSAgICBnaW50IHBsYW5lLCBncG9pbnRlciBkYXRhLCBpbnQgZG1hZmQsIEdzdFY0bDJNZW1vcnlHcm91cCAqIGdyb3VwKQotewotICBHc3RWNGwyTWVtb3J5ICptZW07Ci0KLSAgbWVtID0gZ19zbGljZV9uZXcwIChHc3RWNGwyTWVtb3J5KTsKLSAgZ3N0X21lbW9yeV9pbml0IChHU1RfTUVNT1JZX0NBU1QgKG1lbSksCi0gICAgICBmbGFncywgYWxsb2NhdG9yLCBwYXJlbnQsIG1heHNpemUsIGFsaWduLCBvZmZzZXQsIHNpemUpOwotCi0gIGlmIChwYXJlbnQgPT0gTlVMTCkKLSAgICBtZW0tPm1lbS5taW5pX29iamVjdC5kaXNwb3NlID0KLSAgICAgICAgKEdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24pIF92NGwybWVtX2Rpc3Bvc2U7Ci0KLSAgbWVtLT5wbGFuZSA9IHBsYW5lOwotICBtZW0tPmRhdGEgPSBkYXRhOwotICBtZW0tPmRtYWZkID0gZG1hZmQ7Ci0gIG1lbS0+Z3JvdXAgPSBncm91cDsKLQotICByZXR1cm4gbWVtOwotfQotCi1zdGF0aWMgR3N0VjRsMk1lbW9yeSAqCi1fdjRsMm1lbV9zaGFyZSAoR3N0VjRsMk1lbW9yeSAqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKLXsKLSAgR3N0VjRsMk1lbW9yeSAqc3ViOwotICBHc3RNZW1vcnkgKnBhcmVudDsKLQotICAvKiBmaW5kIHRoZSByZWFsIHBhcmVudCAqLwotICBpZiAoKHBhcmVudCA9IG1lbS0+bWVtLnBhcmVudCkgPT0gTlVMTCkKLSAgICBwYXJlbnQgPSAoR3N0TWVtb3J5ICopIG1lbTsKLQotICBpZiAoc2l6ZSA9PSAtMSkKLSAgICBzaXplID0gbWVtLT5tZW0uc2l6ZSAtIG9mZnNldDsKLQotICAvKiB0aGUgc2hhcmVkIG1lbW9yeSBpcyBhbHdheXMgcmVhZG9ubHkgKi8KLSAgc3ViID0gX3Y0bDJtZW1fbmV3IChHU1RfTUlOSV9PQkpFQ1RfRkxBR1MgKHBhcmVudCkgfAotICAgICAgR1NUX01JTklfT0JKRUNUX0ZMQUdfTE9DS19SRUFET05MWSwgbWVtLT5tZW0uYWxsb2NhdG9yLCBwYXJlbnQsCi0gICAgICBtZW0tPm1lbS5tYXhzaXplLCBtZW0tPm1lbS5hbGlnbiwgb2Zmc2V0LCBzaXplLCBtZW0tPnBsYW5lLCBtZW0tPmRhdGEsCi0gICAgICAtMSwgbWVtLT5ncm91cCk7Ci0KLSAgcmV0dXJuIHN1YjsKLX0KLQotc3RhdGljIGdib29sZWFuCi1fdjRsMm1lbV9pc19zcGFuIChHc3RWNGwyTWVtb3J5ICogbWVtMSwgR3N0VjRsMk1lbW9yeSAqIG1lbTIsIGdzaXplICogb2Zmc2V0KQotewotICBpZiAob2Zmc2V0KQotICAgICpvZmZzZXQgPSBtZW0xLT5tZW0ub2Zmc2V0IC0gbWVtMS0+bWVtLnBhcmVudC0+b2Zmc2V0OwotCi0gIC8qIGFuZCBtZW1vcnkgaXMgY29udGlndW91cyAqLwotICByZXR1cm4gbWVtMS0+bWVtLm9mZnNldCArIG1lbTEtPm1lbS5zaXplID09IG1lbTItPm1lbS5vZmZzZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfaXNfdjRsMl9tZW1vcnkgKEdzdE1lbW9yeSAqIG1lbSkKLXsKLSAgcmV0dXJuIGdzdF9tZW1vcnlfaXNfdHlwZSAobWVtLCBHU1RfVjRMMl9NRU1PUllfVFlQRSk7Ci19Ci0KLUdRdWFyawotZ3N0X3Y0bDJfbWVtb3J5X3F1YXJrICh2b2lkKQotewotICBzdGF0aWMgR1F1YXJrIHF1YXJrID0gMDsKLQotICBpZiAocXVhcmsgPT0gMCkKLSAgICBxdWFyayA9IGdfcXVhcmtfZnJvbV9zdHJpbmcgKCJHc3RWNGwyTWVtb3J5Iik7Ci0KLSAgcmV0dXJuIHF1YXJrOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogR3N0VjRsMk1lbW9yeUdyb3VwIGltcGxlbWVudGF0aW9uICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX21lbW9yeV9ncm91cF9mcmVlIChHc3RWNGwyTWVtb3J5R3JvdXAgKiBncm91cCkKLXsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBncm91cC0+bl9tZW07IGkrKykgewotICAgIEdzdE1lbW9yeSAqbWVtID0gZ3JvdXAtPm1lbVtpXTsKLSAgICBncm91cC0+bWVtW2ldID0gTlVMTDsKLSAgICBpZiAobWVtKQotICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLSAgfQotCi0gIGdfc2xpY2VfZnJlZSAoR3N0VjRsMk1lbW9yeUdyb3VwLCBncm91cCk7Ci19Ci0KLXN0YXRpYyBHc3RWNGwyTWVtb3J5R3JvdXAgKgotZ3N0X3Y0bDJfbWVtb3J5X2dyb3VwX25ldyAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwgZ3VpbnQzMiBpbmRleCkKLXsKLSAgZ2ludCB2aWRlb19mZCA9IGFsbG9jYXRvci0+dmlkZW9fZmQ7Ci0gIGd1aW50MzIgbWVtb3J5ID0gYWxsb2NhdG9yLT5tZW1vcnk7Ci0gIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0ID0gJmFsbG9jYXRvci0+Zm9ybWF0OwotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwOwotICBnc2l6ZSBpbWdfc2l6ZSwgYnVmX3NpemU7Ci0KLSAgZ3JvdXAgPSBnX3NsaWNlX25ldzAgKEdzdFY0bDJNZW1vcnlHcm91cCk7Ci0KLSAgZ3JvdXAtPmJ1ZmZlci50eXBlID0gZm9ybWF0LT50eXBlOwotICBncm91cC0+YnVmZmVyLmluZGV4ID0gaW5kZXg7Ci0gIGdyb3VwLT5idWZmZXIubWVtb3J5ID0gbWVtb3J5OwotCi0gIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGZvcm1hdC0+dHlwZSkpIHsKLSAgICBncm91cC0+bl9tZW0gPSBncm91cC0+YnVmZmVyLmxlbmd0aCA9IGZvcm1hdC0+Zm10LnBpeF9tcC5udW1fcGxhbmVzOwotICAgIGdyb3VwLT5idWZmZXIubS5wbGFuZXMgPSBncm91cC0+cGxhbmVzOwotICB9IGVsc2UgewotICAgIGdyb3VwLT5uX21lbSA9IDE7Ci0gIH0KLQotICBpZiAodjRsMl9pb2N0bCAodmlkZW9fZmQsIFZJRElPQ19RVUVSWUJVRiwgJmdyb3VwLT5idWZmZXIpIDwgMCkKLSAgICBnb3RvIHF1ZXJ5YnVmX2ZhaWxlZDsKLQotICBpZiAoZ3JvdXAtPmJ1ZmZlci5pbmRleCAhPSBpbmRleCkgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFsbG9jYXRvciwgIkJ1ZmZlciBpbmRleCByZXR1cm5lZCBieSBWSURJT0NfUVVFUllCVUYgIgotICAgICAgICAiZGlkbid0IG1hdGNoLCB0aGlzIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBhIGJ1ZyBpbiB5b3VyIGRyaXZlciBvciAiCi0gICAgICAgICJsaWJ2NGwyIik7Ci0gICAgZ19zbGljZV9mcmVlIChHc3RWNGwyTWVtb3J5R3JvdXAsIGdyb3VwKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8qIENoZWNrIHRoYXQgcHJvdmlkZWQgc2l6ZSBtYXRjaGVzIHRoZSBmb3JtYXQgd2UgaGF2ZSBuZWdvdGlhdGlvbi4gRmFpbGluZwotICAgKiB0aGVyZSB1c3VhbGx5IG1lYW5zIGEgZHJpdmVyIG9mIGxpYnY0bCBidWcuICovCi0gIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBnaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICAgIGltZ19zaXplID0gYWxsb2NhdG9yLT5mb3JtYXQuZm10LnBpeF9tcC5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlOwotICAgICAgYnVmX3NpemUgPSBncm91cC0+cGxhbmVzW2ldLmxlbmd0aDsKLSAgICAgIGlmIChidWZfc2l6ZSA8IGltZ19zaXplKQotICAgICAgICBnb3RvIGJ1ZmZlcl90b29fc2hvcnQ7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGltZ19zaXplID0gYWxsb2NhdG9yLT5mb3JtYXQuZm10LnBpeC5zaXplaW1hZ2U7Ci0gICAgYnVmX3NpemUgPSBncm91cC0+YnVmZmVyLmxlbmd0aDsKLSAgICBpZiAoYnVmX3NpemUgPCBpbWdfc2l6ZSkKLSAgICAgIGdvdG8gYnVmZmVyX3Rvb19zaG9ydDsKLSAgfQotCi0gIC8qIFdlIHNhdmUgbm9uIHBsYW5hciBidWZmZXIgaW5mb3JtYXRpb24gaW50byB0aGUgbXVsdGktcGxhbmFyIHBsYW5lIGFycmF5Ci0gICAqIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoZSBjb2RlIGxhdGVyICovCi0gIGlmICghVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSIChmb3JtYXQtPnR5cGUpKSB7Ci0gICAgZ3JvdXAtPnBsYW5lc1swXS5ieXRlc3VzZWQgPSBncm91cC0+YnVmZmVyLmJ5dGVzdXNlZDsKLSAgICBncm91cC0+cGxhbmVzWzBdLmxlbmd0aCA9IGdyb3VwLT5idWZmZXIubGVuZ3RoOwotICAgIGdfYXNzZXJ0IChzaXplb2YgKGdyb3VwLT5wbGFuZXNbMF0ubSkgPT0gc2l6ZW9mIChncm91cC0+YnVmZmVyLm0pKTsKLSAgICBtZW1jcHkgKCZncm91cC0+cGxhbmVzWzBdLm0sICZncm91cC0+YnVmZmVyLm0sIHNpemVvZiAoZ3JvdXAtPmJ1ZmZlci5tKSk7Ci0gIH0KLQotICBHU1RfTE9HX09CSkVDVCAoYWxsb2NhdG9yLCAiR290ICVzIGJ1ZmZlciIsIG1lbW9yeV90eXBlX3RvX3N0ciAobWVtb3J5KSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICIgIGluZGV4OiAgICAgJXUiLCBncm91cC0+YnVmZmVyLmluZGV4KTsKLSAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgIiAgdHlwZTogICAgICAlZCIsIGdyb3VwLT5idWZmZXIudHlwZSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICIgIGZsYWdzOiAgICAgJTA4eCIsIGdyb3VwLT5idWZmZXIuZmxhZ3MpOwotICBHU1RfTE9HX09CSkVDVCAoYWxsb2NhdG9yLCAiICBmaWVsZDogICAgICVkIiwgZ3JvdXAtPmJ1ZmZlci5maWVsZCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICIgIG1lbW9yeTogICAgJWQiLCBncm91cC0+YnVmZmVyLm1lbW9yeSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICIgIHBsYW5lczogICAgJWQiLCBncm91cC0+bl9tZW0pOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBpZiAobWVtb3J5ID09IFY0TDJfTUVNT1JZX01NQVApIHsKLSAgICBnaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGdyb3VwLT5uX21lbTsgaSsrKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoYWxsb2NhdG9yLCAiICBbJXVdIGJ5dGVzdXNlZDogJXUsIGxlbmd0aDogJXUiLCBpLAotICAgICAgICAgIGdyb3VwLT5wbGFuZXNbaV0uYnl0ZXN1c2VkLCBncm91cC0+cGxhbmVzW2ldLmxlbmd0aCk7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoYWxsb2NhdG9yLCAiICBbJXVdIE1NQVAgb2Zmc2V0OiAgJXUiLCBpLAotICAgICAgICAgIGdyb3VwLT5wbGFuZXNbaV0ubS5tZW1fb2Zmc2V0KTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiBncm91cDsKLQotcXVlcnlidWZfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SICgiZXJyb3IgcXVlcnlpbmcgYnVmZmVyICVkOiAlcyIsIGluZGV4LCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIGdvdG8gZmFpbGVkOwotICB9Ci1idWZmZXJfdG9vX3Nob3J0OgotICB7Ci0gICAgR1NUX0VSUk9SICgiYnVmZmVyIHNpemUgJSIgR19HU0laRV9GT1JNQVQKLSAgICAgICAgIiBpcyBzbWFsbGVyIHRoZW4gbmVnb3RpYXRlZCBzaXplICUiIEdfR1NJWkVfRk9STUFUCi0gICAgICAgICIsIHRoaXMgaXMgdXN1YWxseSB0aGUgcmVzdWx0IG9mIGEgYnVnIGluIHRoZSB2NGwyIGRyaXZlciBvciBsaWJ2NGwuIiwKLSAgICAgICAgYnVmX3NpemUsIGltZ19zaXplKTsKLSAgICBnb3RvIGZhaWxlZDsKLSAgfQotZmFpbGVkOgotICBnc3RfdjRsMl9tZW1vcnlfZ3JvdXBfZnJlZSAoZ3JvdXApOwotICByZXR1cm4gTlVMTDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEdzdFY0bEFsbG9jYXRvciBpbXBsZW1lbnRhdGlvbiAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9hbGxvY2F0b3JfcmVsZWFzZSAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwgR3N0VjRsMk1lbW9yeSAqIG1lbSkKLXsKLSAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCA9IG1lbS0+Z3JvdXA7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgInBsYW5lICVpIG9mIGJ1ZmZlciAldSByZWxlYXNlZCIsCi0gICAgICBtZW0tPnBsYW5lLCBncm91cC0+YnVmZmVyLmluZGV4KTsKLQotICBzd2l0Y2ggKGFsbG9jYXRvci0+bWVtb3J5KSB7Ci0gICAgY2FzZSBWNEwyX01FTU9SWV9ETUFCVUY6Ci0gICAgICBjbG9zZSAobWVtLT5kbWFmZCk7Ci0gICAgICBtZW0tPmRtYWZkID0gLTE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfTUVNT1JZX1VTRVJQVFI6Ci0gICAgICBtZW0tPmRhdGEgPSBOVUxMOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogV2hlbiBhbGwgbWVtb3J5IGFyZSBiYWNrLCBwdXQgdGhlIGdyb3VwIGJhY2sgaW4gdGhlIGZyZWUgcXVldWUgKi8KLSAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZncm91cC0+bWVtc19hbGxvY2F0ZWQpKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgImJ1ZmZlciAldSByZWxlYXNlZCIsIGdyb3VwLT5idWZmZXIuaW5kZXgpOwotICAgIGdzdF9hdG9taWNfcXVldWVfcHVzaCAoYWxsb2NhdG9yLT5mcmVlX3F1ZXVlLCBncm91cCk7Ci0gICAgZ19zaWduYWxfZW1pdCAoYWxsb2NhdG9yLCBnc3RfdjRsMl9hbGxvY2F0b3Jfc2lnbmFsc1tHUk9VUF9SRUxFQVNFRF0sIDApOwotICB9Ci0KLSAgLyogS2VlcCBsYXN0LCBhbGxvY2F0b3IgbWF5IGJlIGZyZWVkIGFmdGVyIHRoaXMgY2FsbCAqLwotICBnX29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2FsbG9jYXRvcl9mcmVlIChHc3RBbGxvY2F0b3IgKiBnYWxsb2NhdG9yLCBHc3RNZW1vcnkgKiBnbWVtKQotewotICBHc3RWNGwyQWxsb2NhdG9yICphbGxvY2F0b3IgPSAoR3N0VjRsMkFsbG9jYXRvciAqKSBnYWxsb2NhdG9yOwotICBHc3RWNGwyTWVtb3J5ICptZW0gPSAoR3N0VjRsMk1lbW9yeSAqKSBnbWVtOwotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwID0gbWVtLT5ncm91cDsKLQotICAvKiBPbmx5IGZyZWUgdW5wYXJlbnRlZCBtZW1vcnkgKi8KLSAgaWYgKG1lbS0+bWVtLnBhcmVudCA9PSBOVUxMKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgImZyZWVpbmcgcGxhbmUgJWkgb2YgYnVmZmVyICV1IiwKLSAgICAgICAgbWVtLT5wbGFuZSwgZ3JvdXAtPmJ1ZmZlci5pbmRleCk7Ci0KLSAgICBpZiAoYWxsb2NhdG9yLT5tZW1vcnkgPT0gVjRMMl9NRU1PUllfTU1BUCkgewotICAgICAgaWYgKG1lbS0+ZGF0YSkKLSAgICAgICAgdjRsMl9tdW5tYXAgKG1lbS0+ZGF0YSwgZ3JvdXAtPnBsYW5lc1ttZW0tPnBsYW5lXS5sZW5ndGgpOwotICAgIH0KLQotICAgIC8qIFRoaXMgYXBwbHkgZm9yIGJvdGggbW1hcCB3aXRoIGV4cGJ1ZiwgYW5kIGRtYWJ1ZiBpbXBvcnRlZCBtZW1vcnkgKi8KLSAgICBpZiAobWVtLT5kbWFmZCA+PSAwKQotICAgICAgY2xvc2UgKG1lbS0+ZG1hZmQpOwotICB9Ci0KLSAgZ19zbGljZV9mcmVlIChHc3RWNGwyTWVtb3J5LCBtZW0pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfYWxsb2NhdG9yX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFY0bDJBbGxvY2F0b3IgKmFsbG9jYXRvciA9IChHc3RWNGwyQWxsb2NhdG9yICopIG9iajsKLSAgZ2ludCBpOwotCi0gIEdTVF9MT0dfT0JKRUNUIChvYmosICJjYWxsZWQiKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYWxsb2NhdG9yLT5jb3VudDsgaSsrKSB7Ci0gICAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCA9IGFsbG9jYXRvci0+Z3JvdXBzW2ldOwotICAgIGFsbG9jYXRvci0+Z3JvdXBzW2ldID0gTlVMTDsKLSAgICBpZiAoZ3JvdXApCi0gICAgICBnc3RfdjRsMl9tZW1vcnlfZ3JvdXBfZnJlZSAoZ3JvdXApOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iaik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9hbGxvY2F0b3JfZmluYWxpemUgKEdPYmplY3QgKiBvYmopCi17Ci0gIEdzdFY0bDJBbGxvY2F0b3IgKmFsbG9jYXRvciA9IChHc3RWNGwyQWxsb2NhdG9yICopIG9iajsKLQotICBHU1RfTE9HX09CSkVDVCAob2JqLCAiY2FsbGVkIik7Ci0KLSAgdjRsMl9jbG9zZSAoYWxsb2NhdG9yLT52aWRlb19mZCk7Ci0gIGdzdF9hdG9taWNfcXVldWVfdW5yZWYgKGFsbG9jYXRvci0+ZnJlZV9xdWV1ZSk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmopOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfYWxsb2NhdG9yX2NsYXNzX2luaXQgKEdzdFY0bDJBbGxvY2F0b3JDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzczsKLSAgR3N0QWxsb2NhdG9yQ2xhc3MgKmFsbG9jYXRvcl9jbGFzczsKLQotICBhbGxvY2F0b3JfY2xhc3MgPSAoR3N0QWxsb2NhdG9yQ2xhc3MgKikga2xhc3M7Ci0gIG9iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgYWxsb2NhdG9yX2NsYXNzLT5hbGxvYyA9IE5VTEw7Ci0gIGFsbG9jYXRvcl9jbGFzcy0+ZnJlZSA9IGdzdF92NGwyX2FsbG9jYXRvcl9mcmVlOwotCi0gIG9iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IGdzdF92NGwyX2FsbG9jYXRvcl9kaXNwb3NlOwotICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX2ZpbmFsaXplOwotCi0gIGdzdF92NGwyX2FsbG9jYXRvcl9zaWduYWxzW0dST1VQX1JFTEVBU0VEXSA9IGdfc2lnbmFsX25ldyAoImdyb3VwLXJlbGVhc2VkIiwKLSAgICAgIEdfVFlQRV9GUk9NX0NMQVNTIChvYmplY3RfY2xhc3MpLCBHX1NJR05BTF9SVU5fTEFTVCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgIEdfVFlQRV9OT05FLCAwKTsKLQotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAodjRsMmFsbG9jYXRvcl9kZWJ1ZywgInY0bDJhbGxvY2F0b3IiLCAwLAotICAgICAgIlY0TDIgQWxsb2NhdG9yIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9hbGxvY2F0b3JfaW5pdCAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvcikKLXsKLSAgR3N0QWxsb2NhdG9yICphbGxvYyA9IEdTVF9BTExPQ0FUT1JfQ0FTVCAoYWxsb2NhdG9yKTsKLQotICBhbGxvYy0+bWVtX3R5cGUgPSBHU1RfVjRMMl9NRU1PUllfVFlQRTsKLSAgYWxsb2MtPm1lbV9tYXAgPSAoR3N0TWVtb3J5TWFwRnVuY3Rpb24pIF92NGwybWVtX21hcDsKLSAgYWxsb2MtPm1lbV91bm1hcCA9IChHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uKSBfdjRsMm1lbV91bm1hcDsKLSAgYWxsb2MtPm1lbV9zaGFyZSA9IChHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uKSBfdjRsMm1lbV9zaGFyZTsKLSAgYWxsb2MtPm1lbV9pc19zcGFuID0gKEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uKSBfdjRsMm1lbV9pc19zcGFuOwotICAvKiBVc2UgdGhlIGRlZmF1bHQsIGZhbGxiYWNrIGNvcHkgZnVuY3Rpb24gKi8KLQotICBhbGxvY2F0b3ItPmZyZWVfcXVldWUgPSBnc3RfYXRvbWljX3F1ZXVlX25ldyAoVklERU9fTUFYX0ZSQU1FKTsKLQotICBHU1RfT0JKRUNUX0ZMQUdfU0VUIChhbGxvY2F0b3IsIEdTVF9BTExPQ0FUT1JfRkxBR19DVVNUT01fQUxMT0MpOwotfQotCi0jZGVmaW5lIEdTVF9WNEwyX0FMTE9DQVRPUl9QUk9CRShvYmosdHlwZSkgXAotICAgIGdzdF92NGwyX2FsbG9jYXRvcl9wcm9iZSAoKG9iaiksIFY0TDJfTUVNT1JZXyAjIyB0eXBlLCBcCi0gICAgICAgIEdTVF9WNEwyX0FMTE9DQVRPUl9GTEFHXyAjIyB0eXBlICMjIF9SRVFCVUZTLCBcCi0gICAgICAgIEdTVF9WNEwyX0FMTE9DQVRPUl9GTEFHXyAjIyB0eXBlICMjIF9DUkVBVEVfQlVGUykKLXN0YXRpYyBndWludDMyCi1nc3RfdjRsMl9hbGxvY2F0b3JfcHJvYmUgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsIGd1aW50MzIgbWVtb3J5LAotICAgIGd1aW50MzIgYnJlcV9mbGFnLCBndWludDMyIGJjcmVhdGVfZmxhZykKLXsKLSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgYnJlcSA9IHsgMCB9OwotICBndWludDMyIGZsYWdzID0gMDsKLQotICBicmVxLnR5cGUgPSBhbGxvY2F0b3ItPnR5cGU7Ci0gIGJyZXEuY291bnQgPSAwOwotICBicmVxLm1lbW9yeSA9IG1lbW9yeTsKLQotICBpZiAodjRsMl9pb2N0bCAoYWxsb2NhdG9yLT52aWRlb19mZCwgVklESU9DX1JFUUJVRlMsICZicmVxKSA9PSAwKSB7Ci0gICAgc3RydWN0IHY0bDJfY3JlYXRlX2J1ZmZlcnMgYmNyZWF0ZSA9IHsgMCB9OwotCi0gICAgZmxhZ3MgfD0gYnJlcV9mbGFnOwotCi0gICAgYmNyZWF0ZS5tZW1vcnkgPSBtZW1vcnk7Ci0gICAgYmNyZWF0ZS5mb3JtYXQgPSBhbGxvY2F0b3ItPmZvcm1hdDsKLQotICAgIGlmICgodjRsMl9pb2N0bCAoYWxsb2NhdG9yLT52aWRlb19mZCwgVklESU9DX0NSRUFURV9CVUZTLCAmYmNyZWF0ZSkgPT0gMCkpCi0gICAgICBmbGFncyB8PSBiY3JlYXRlX2ZsYWc7Ci0gIH0KLQotICByZXR1cm4gZmxhZ3M7Ci19Ci0KLXN0YXRpYyBHc3RWNGwyTWVtb3J5R3JvdXAgKgotZ3N0X3Y0bDJfYWxsb2NhdG9yX2NyZWF0ZV9idWYgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IpCi17Ci0gIHN0cnVjdCB2NGwyX2NyZWF0ZV9idWZmZXJzIGJjcmVhdGUgPSB7IDAgfTsKLSAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCA9IE5VTEw7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChhbGxvY2F0b3IpOwotCi0gIGlmICghZ19hdG9taWNfaW50X2dldCAoJmFsbG9jYXRvci0+YWN0aXZlKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgYmNyZWF0ZS5tZW1vcnkgPSBhbGxvY2F0b3ItPm1lbW9yeTsKLSAgYmNyZWF0ZS5mb3JtYXQgPSBhbGxvY2F0b3ItPmZvcm1hdDsKLSAgYmNyZWF0ZS5jb3VudCA9IDE7Ci0KLSAgaWYgKCFhbGxvY2F0b3ItPmNhbl9hbGxvY2F0ZSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgaWYgKHY0bDJfaW9jdGwgKGFsbG9jYXRvci0+dmlkZW9fZmQsIFZJRElPQ19DUkVBVEVfQlVGUywgJmJjcmVhdGUpIDwgMCkKLSAgICBnb3RvIGNyZWF0ZV9idWZzX2ZhaWxlZDsKLQotICBpZiAoYWxsb2NhdG9yLT5ncm91cHNbYmNyZWF0ZS5pbmRleF0gIT0gTlVMTCkKLSAgICBnb3RvIGNyZWF0ZV9idWZzX2J1ZzsKLQotICBncm91cCA9IGdzdF92NGwyX21lbW9yeV9ncm91cF9uZXcgKGFsbG9jYXRvciwgYmNyZWF0ZS5pbmRleCk7Ci0KLSAgaWYgKGdyb3VwKSB7Ci0gICAgYWxsb2NhdG9yLT5ncm91cHNbYmNyZWF0ZS5pbmRleF0gPSBncm91cDsKLSAgICBhbGxvY2F0b3ItPmNvdW50Kys7Ci0gIH0KLQotZG9uZToKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGFsbG9jYXRvcik7Ci0gIHJldHVybiBncm91cDsKLQotY3JlYXRlX2J1ZnNfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhbGxvY2F0b3IsICJlcnJvciBjcmVhdGluZyBhIG5ldyBidWZmZXI6ICVzIiwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLWNyZWF0ZV9idWZzX2J1ZzoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFsbG9jYXRvciwgImNyZWF0ZWQgYnVmZmVyIGhhcyBhbHJlYWR5IHVzZWQgYnVmZmVyICIKLSAgICAgICAgImluZGV4ICVpLCB0aGlzIG1lYW5zIHRoZXJlIGlzIGFuIGJ1ZyBpbiB5b3VyIGRyaXZlciBvciBsaWJ2NGwyIiwKLSAgICAgICAgYmNyZWF0ZS5pbmRleCk7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RWNGwyTWVtb3J5R3JvdXAgKgotZ3N0X3Y0bDJfYWxsb2NhdG9yX2FsbG9jIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKQotewotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwOwotCi0gIGlmICghZ19hdG9taWNfaW50X2dldCAoJmFsbG9jYXRvci0+YWN0aXZlKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBncm91cCA9IGdzdF9hdG9taWNfcXVldWVfcG9wIChhbGxvY2F0b3ItPmZyZWVfcXVldWUpOwotCi0gIGlmIChncm91cCA9PSBOVUxMKSB7Ci0gICAgaWYgKGFsbG9jYXRvci0+Y2FuX2FsbG9jYXRlKSB7Ci0gICAgICBncm91cCA9IGdzdF92NGwyX2FsbG9jYXRvcl9jcmVhdGVfYnVmIChhbGxvY2F0b3IpOwotCi0gICAgICAvKiBEb24ndCBoYW1tZXIgb24gQ1JFQVRFX0JVRlMgKi8KLSAgICAgIGlmIChncm91cCA9PSBOVUxMKQotICAgICAgICBhbGxvY2F0b3ItPmNhbl9hbGxvY2F0ZSA9IEZBTFNFOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBncm91cDsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2FsbG9jYXRvcl9yZXNldF9zaXplIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgIEdzdFY0bDJNZW1vcnlHcm91cCAqIGdyb3VwKQotewotICBnc2l6ZSBzaXplOwotICBnYm9vbGVhbiBpbXBvcnRlZCA9IEZBTFNFOwotCi0gIHN3aXRjaCAoYWxsb2NhdG9yLT5tZW1vcnkpIHsKLSAgICBjYXNlIFY0TDJfTUVNT1JZX1VTRVJQVFI6Ci0gICAgY2FzZSBWNEwyX01FTU9SWV9ETUFCVUY6Ci0gICAgICBpbXBvcnRlZCA9IFRSVUU7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBnaW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICAgIHNpemUgPSBhbGxvY2F0b3ItPmZvcm1hdC5mbXQucGl4X21wLnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2U7Ci0KLSAgICAgIGlmIChpbXBvcnRlZCkKLSAgICAgICAgZ3JvdXAtPm1lbVtpXS0+bWF4c2l6ZSA9IHNpemU7Ci0KLSAgICAgIGdzdF9tZW1vcnlfcmVzaXplIChncm91cC0+bWVtW2ldLCAwLCBzaXplKTsKLSAgICB9Ci0KLSAgfSBlbHNlIHsKLSAgICBzaXplID0gYWxsb2NhdG9yLT5mb3JtYXQuZm10LnBpeC5zaXplaW1hZ2U7Ci0KLSAgICBpZiAoaW1wb3J0ZWQpCi0gICAgICBncm91cC0+bWVtWzBdLT5tYXhzaXplID0gc2l6ZTsKLQotICAgIGdzdF9tZW1vcnlfcmVzaXplIChncm91cC0+bWVtWzBdLCAwLCBzaXplKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotX2NsZWFudXBfZmFpbGVkX2FsbG9jIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLCBHc3RWNGwyTWVtb3J5R3JvdXAgKiBncm91cCkKLXsKLSAgaWYgKGdyb3VwLT5tZW1zX2FsbG9jYXRlZCA+IDApIHsKLSAgICBnaW50IGk7Ci0gICAgLyogSWYgb25lIG9yIG1vcmUgbW1hcCB3b3JrZWQsIHdlIG5lZWQgdG8gdW5yZWYgdGhlIG1lbW9yeSwgb3RoZXJ3aXNlCi0gICAgICogdGhleSB3aWxsIGtlZXAgYSByZWYgb24gdGhlIGFsbG9jYXRvciBhbmQgbGVhayBpdC4gVGhpcyB3aWxsIHB1dCBiYWNrCi0gICAgICogdGhlIGdyb3VwIGludG8gdGhlIGZyZWVfcXVldWUgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspCi0gICAgICBnc3RfbWVtb3J5X3VucmVmIChncm91cC0+bWVtW2ldKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBPdGhlcndpc2UsIGdyb3VwIGhhcyB0byBiZSBvbiBmcmVlIHF1ZXVlIGZvciBfc3RvcCgpIHRvIHdvcmsgKi8KLSAgICBnc3RfYXRvbWljX3F1ZXVlX3B1c2ggKGFsbG9jYXRvci0+ZnJlZV9xdWV1ZSwgZ3JvdXApOwotICB9Ci19Ci0KLQotCi1Hc3RWNGwyQWxsb2NhdG9yICoKLWdzdF92NGwyX2FsbG9jYXRvcl9uZXcgKEdzdE9iamVjdCAqIHBhcmVudCwgZ2ludCB2aWRlb19mZCwKLSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKLXsKLSAgR3N0VjRsMkFsbG9jYXRvciAqYWxsb2NhdG9yOwotICBndWludDMyIGZsYWdzID0gMDsKLSAgZ2NoYXIgKm5hbWUsICpwYXJlbnRfbmFtZTsKLQotICBwYXJlbnRfbmFtZSA9IGdzdF9vYmplY3RfZ2V0X25hbWUgKHBhcmVudCk7Ci0gIG5hbWUgPSBnX3N0cmNvbmNhdCAocGFyZW50X25hbWUsICI6YWxsb2NhdG9yIiwgTlVMTCk7Ci0gIGdfZnJlZSAocGFyZW50X25hbWUpOwotCi0gIGFsbG9jYXRvciA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfVjRMMl9BTExPQ0FUT1IsICJuYW1lIiwgbmFtZSwgTlVMTCk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0KLSAgLyogU2F2ZSBldmVyeXRoaW5nICovCi0gIGFsbG9jYXRvci0+dmlkZW9fZmQgPSB2NGwyX2R1cCAodmlkZW9fZmQpOwotICBhbGxvY2F0b3ItPnR5cGUgPSBmb3JtYXQtPnR5cGU7Ci0gIGFsbG9jYXRvci0+Zm9ybWF0ID0gKmZvcm1hdDsKLQotICBmbGFncyB8PSBHU1RfVjRMMl9BTExPQ0FUT1JfUFJPQkUgKGFsbG9jYXRvciwgTU1BUCk7Ci0gIGZsYWdzIHw9IEdTVF9WNEwyX0FMTE9DQVRPUl9QUk9CRSAoYWxsb2NhdG9yLCBVU0VSUFRSKTsKLSAgZmxhZ3MgfD0gR1NUX1Y0TDJfQUxMT0NBVE9SX1BST0JFIChhbGxvY2F0b3IsIERNQUJVRik7Ci0KLQotICBpZiAoZmxhZ3MgPT0gMCkgewotICAgIC8qIERyaXZlcnMgbm90IHBvcnRlZCBmcm9tIHZpZGVvYnVmIHRvIHZpZGVidWYyIGRvbid0IGFsbG93IGZyZWVpbmcgYnVmZmVycwotICAgICAqIHVzaW5nIFJFUUJVRlMoMCkuIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIHN0aWxsIHN1cHBvcnQgdGhlc2UgZHJpdmVycywKLSAgICAgKiB3aGljaCBhcmUga25vd24gdG8gaGF2ZSBNTUFQIHN1cHBvcnQuICovCi0gICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhbGxvY2F0b3IsICJDb3VsZCBub3QgcHJvYmUgc3VwcG9ydGVkIG1lbW9yeSB0eXBlLCAiCi0gICAgICAgICJhc3N1bWluZyBNTUFQIGlzIHN1cHBvcnRlZCwgdGhpcyBpcyBleHBlY3RlZCBmb3Igb2xkZXIgZHJpdmVycyBub3QgIgotICAgICAgICAiIHlldCBwb3J0ZWQgdG8gdmlkZW9idWYyIGZyYW1ld29yayIpOwotICAgIGZsYWdzID0gR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfTU1BUF9SRVFCVUZTOwotICB9Ci0KLSAgR1NUX09CSkVDVF9GTEFHX1NFVCAoYWxsb2NhdG9yLCBmbGFncyk7Ci0KLSAgcmV0dXJuIGFsbG9jYXRvcjsKLX0KLQotZ3VpbnQKLWdzdF92NGwyX2FsbG9jYXRvcl9zdGFydCAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwgZ3VpbnQzMiBjb3VudCwKLSAgICBndWludDMyIG1lbW9yeSkKLXsKLSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgYnJlcSA9IHsgY291bnQsIGFsbG9jYXRvci0+dHlwZSwgbWVtb3J5IH07Ci0gIGdib29sZWFuIGNhbl9hbGxvY2F0ZTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb3VudCAhPSAwLCAwKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGFsbG9jYXRvcik7Ci0KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZhbGxvY2F0b3ItPmFjdGl2ZSkpCi0gICAgZ290byBhbHJlYWR5X2FjdGl2ZTsKLQotICBpZiAodjRsMl9pb2N0bCAoYWxsb2NhdG9yLT52aWRlb19mZCwgVklESU9DX1JFUUJVRlMsICZicmVxKSA8IDApCi0gICAgZ290byByZXFidWZzX2ZhaWxlZDsKLQotICBpZiAoYnJlcS5jb3VudCA8IDEpCi0gICAgZ290byBvdXRfb2ZfbWVtb3J5OwotCi0gIHN3aXRjaCAobWVtb3J5KSB7Ci0gICAgY2FzZSBWNEwyX01FTU9SWV9NTUFQOgotICAgICAgY2FuX2FsbG9jYXRlID0gR1NUX1Y0TDJfQUxMT0NBVE9SX0NBTl9BTExPQ0FURSAoYWxsb2NhdG9yLCBNTUFQKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKLSAgICAgIGNhbl9hbGxvY2F0ZSA9IEdTVF9WNEwyX0FMTE9DQVRPUl9DQU5fQUxMT0NBVEUgKGFsbG9jYXRvciwgVVNFUlBUUik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfTUVNT1JZX0RNQUJVRjoKLSAgICAgIGNhbl9hbGxvY2F0ZSA9IEdTVF9WNEwyX0FMTE9DQVRPUl9DQU5fQUxMT0NBVEUgKGFsbG9jYXRvciwgRE1BQlVGKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBjYW5fYWxsb2NhdGUgPSBGQUxTRTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYWxsb2NhdG9yLCAiYWxsb2NhdGVkICV1ICVzIGJ1ZmZlcnMgb3V0IG9mICV1IHJlcXVlc3RlZCIsCi0gICAgICBicmVxLmNvdW50LCBtZW1vcnlfdHlwZV90b19zdHIgKG1lbW9yeSksIGNvdW50KTsKLQotICBhbGxvY2F0b3ItPmNhbl9hbGxvY2F0ZSA9IGNhbl9hbGxvY2F0ZTsKLSAgYWxsb2NhdG9yLT5jb3VudCA9IGJyZXEuY291bnQ7Ci0gIGFsbG9jYXRvci0+bWVtb3J5ID0gbWVtb3J5OwotCi0gIC8qIENyZWF0ZSBtZW1vcnkgZ3JvdXBzICovCi0gIGZvciAoaSA9IDA7IGkgPCBhbGxvY2F0b3ItPmNvdW50OyBpKyspIHsKLSAgICBhbGxvY2F0b3ItPmdyb3Vwc1tpXSA9IGdzdF92NGwyX21lbW9yeV9ncm91cF9uZXcgKGFsbG9jYXRvciwgaSk7Ci0gICAgaWYgKGFsbG9jYXRvci0+Z3JvdXBzW2ldID09IE5VTEwpCi0gICAgICBnb3RvIGVycm9yOwotCi0gICAgZ3N0X2F0b21pY19xdWV1ZV9wdXNoIChhbGxvY2F0b3ItPmZyZWVfcXVldWUsIGFsbG9jYXRvci0+Z3JvdXBzW2ldKTsKLSAgfQotCi0gIGdfYXRvbWljX2ludF9zZXQgKCZhbGxvY2F0b3ItPmFjdGl2ZSwgVFJVRSk7Ci0KLWRvbmU6Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChhbGxvY2F0b3IpOwotICByZXR1cm4gYnJlcS5jb3VudDsKLQotYWxyZWFkeV9hY3RpdmU6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsICJhbGxvY2F0b3IgYWxyZWFkeSBhY3RpdmUiKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1yZXFidWZzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFsbG9jYXRvciwKLSAgICAgICAgImVycm9yIHJlcXVlc3RpbmcgJWQgYnVmZmVyczogJXMiLCBjb3VudCwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1vdXRfb2ZfbWVtb3J5OgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYWxsb2NhdG9yLCAiTm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgYnVmZmVycyIpOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLWVycm9yOgotICB7Ci0gICAgYnJlcS5jb3VudCA9IDA7Ci0gICAgZ290byBkb25lOwotICB9Ci19Ci0KLUdzdFY0bDJSZXR1cm4KLWdzdF92NGwyX2FsbG9jYXRvcl9zdG9wIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKQotewotICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyBicmVxID0geyAwLCBhbGxvY2F0b3ItPnR5cGUsIGFsbG9jYXRvci0+bWVtb3J5IH07Ci0gIGdpbnQgaSA9IDA7Ci0gIEdzdFY0bDJSZXR1cm4gcmV0ID0gR1NUX1Y0TDJfT0s7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoYWxsb2NhdG9yLCAic3RvcCBhbGxvY2F0b3IiKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKGFsbG9jYXRvcik7Ci0KLSAgaWYgKCFnX2F0b21pY19pbnRfZ2V0ICgmYWxsb2NhdG9yLT5hY3RpdmUpKQotICAgIGdvdG8gZG9uZTsKLQotICBpZiAoZ3N0X2F0b21pY19xdWV1ZV9sZW5ndGggKGFsbG9jYXRvci0+ZnJlZV9xdWV1ZSkgIT0gYWxsb2NhdG9yLT5jb3VudCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFsbG9jYXRvciwgImFsbG9jYXRvciBpcyBzdGlsbCBpbiB1c2UiKTsKLSAgICByZXQgPSBHU1RfVjRMMl9CVVNZOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIHdoaWxlIChnc3RfYXRvbWljX3F1ZXVlX3BvcCAoYWxsb2NhdG9yLT5mcmVlX3F1ZXVlKSkgewotICAgIC8qIG5vdGhpbmcgKi8KLSAgfTsKLQotICBmb3IgKGkgPSAwOyBpIDwgYWxsb2NhdG9yLT5jb3VudDsgaSsrKSB7Ci0gICAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCA9IGFsbG9jYXRvci0+Z3JvdXBzW2ldOwotICAgIGFsbG9jYXRvci0+Z3JvdXBzW2ldID0gTlVMTDsKLSAgICBpZiAoZ3JvdXApCi0gICAgICBnc3RfdjRsMl9tZW1vcnlfZ3JvdXBfZnJlZSAoZ3JvdXApOwotICB9Ci0KLSAgLyogTm90IGFsbCBkcml2ZXJzIHN1cHBvcnQgcmVidWZzKDApLCBzbyB3YXJuIG9ubHkgKi8KLSAgaWYgKHY0bDJfaW9jdGwgKGFsbG9jYXRvci0+dmlkZW9fZmQsIFZJRElPQ19SRVFCVUZTLCAmYnJlcSkgPCAwKQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYWxsb2NhdG9yLAotICAgICAgICAiZXJyb3IgcmVsZWFzaW5nIGJ1ZmZlcnMgYnVmZmVyczogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotCi0gIGFsbG9jYXRvci0+Y291bnQgPSAwOwotCi0gIGdfYXRvbWljX2ludF9zZXQgKCZhbGxvY2F0b3ItPmFjdGl2ZSwgRkFMU0UpOwotCi1kb25lOgotICBHU1RfT0JKRUNUX1VOTE9DSyAoYWxsb2NhdG9yKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotR3N0VjRsMk1lbW9yeUdyb3VwICoKLWdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19tbWFwIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKQotewotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwOwotICBnaW50IGk7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGFsbG9jYXRvci0+bWVtb3J5ID09IFY0TDJfTUVNT1JZX01NQVAsIE5VTEwpOwotCi0gIGdyb3VwID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX2FsbG9jIChhbGxvY2F0b3IpOwotCi0gIGlmIChncm91cCA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIGZvciAoaSA9IDA7IGkgPCBncm91cC0+bl9tZW07IGkrKykgewotICAgIGlmIChncm91cC0+bWVtW2ldID09IE5VTEwpIHsKLSAgICAgIGdwb2ludGVyIGRhdGE7Ci0gICAgICBkYXRhID0gdjRsMl9tbWFwIChOVUxMLCBncm91cC0+cGxhbmVzW2ldLmxlbmd0aCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLSAgICAgICAgICBNQVBfU0hBUkVELCBhbGxvY2F0b3ItPnZpZGVvX2ZkLCBncm91cC0+cGxhbmVzW2ldLm0ubWVtX29mZnNldCk7Ci0KLSAgICAgIGlmIChkYXRhID09IE1BUF9GQUlMRUQpCi0gICAgICAgIGdvdG8gbW1hcF9mYWlsZWQ7Ci0KLSAgICAgIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsCi0gICAgICAgICAgIm1tYXAgYnVmZmVyIGxlbmd0aCAlZCwgZGF0YSBvZmZzZXQgJWQsIHBsYW5lICVkIiwKLSAgICAgICAgICBncm91cC0+cGxhbmVzW2ldLmxlbmd0aCwgZ3JvdXAtPnBsYW5lc1tpXS5kYXRhX29mZnNldCwgaSk7Ci0KLSAgICAgIGdyb3VwLT5tZW1baV0gPSAoR3N0TWVtb3J5ICopIF92NGwybWVtX25ldyAoMCwgR1NUX0FMTE9DQVRPUiAoYWxsb2NhdG9yKSwKLSAgICAgICAgICBOVUxMLCBncm91cC0+cGxhbmVzW2ldLmxlbmd0aCwgMCwgMCwgZ3JvdXAtPnBsYW5lc1tpXS5sZW5ndGgsIGksCi0gICAgICAgICAgZGF0YSwgLTEsIGdyb3VwKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogVGFrZSBiYWNrIHRoZSBhbGxvY2F0b3IgcmVmZXJlbmNlICovCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoYWxsb2NhdG9yKTsKLSAgICB9Ci0KLSAgICBncm91cC0+bWVtc19hbGxvY2F0ZWQrKzsKLSAgfQotCi0gIC8qIEVuc3VyZSBncm91cCBzaXplLiBVbmxpa2UgR1NULCB2NGwyIGhhdmUgc2l6ZSAoYnl0ZXN1c2VkKSBpbml0aWFsbHkgc2V0Ci0gICAqIHRvIDAuIEFzIGxlbmd0aCBtaWdodCBiZSBiaWdnZXIgdGhlbiB0aGUgZXhwZWN0ZWQgc2l6ZSBleHBvc2VkIGluIHRoZQotICAgKiBmb3JtYXQsIHdlIHNpbXBseSBzZXQgYnl0ZXN1c2VkIGluaXRpYWxseSBhbmQgcmVzZXQgaXQgaGVyZSBmb3IKLSAgICogc2ltcGxpY2l0eSAqLwotICBnc3RfdjRsMl9hbGxvY2F0b3JfcmVzZXRfc2l6ZSAoYWxsb2NhdG9yLCBncm91cCk7Ci0KLSAgcmV0dXJuIGdyb3VwOwotCi1tbWFwX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKGFsbG9jYXRvciwgIkZhaWxlZCB0byBtbWFwIGJ1ZmZlcjogJXMiLAotICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgIF9jbGVhbnVwX2ZhaWxlZF9hbGxvYyAoYWxsb2NhdG9yLCBncm91cCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotR3N0VjRsMk1lbW9yeUdyb3VwICoKLWdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19kbWFidWYgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0QWxsb2NhdG9yICogZG1hYnVmX2FsbG9jYXRvcikKLXsKLSAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cDsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhbGxvY2F0b3ItPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9NTUFQLCBOVUxMKTsKLQotICBncm91cCA9IGdzdF92NGwyX2FsbG9jYXRvcl9hbGxvYyAoYWxsb2NhdG9yKTsKLQotICBpZiAoZ3JvdXAgPT0gTlVMTCkKLSAgICByZXR1cm4gTlVMTDsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICBHc3RWNGwyTWVtb3J5ICptZW07Ci0gICAgR3N0TWVtb3J5ICpkbWFfbWVtOwotICAgIGdpbnQgZG1hZmQ7Ci0KLSAgICBpZiAoZ3JvdXAtPm1lbVtpXSA9PSBOVUxMKSB7Ci0gICAgICBzdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIgZXhwYnVmID0geyAwIH07Ci0KLSAgICAgIGV4cGJ1Zi50eXBlID0gYWxsb2NhdG9yLT50eXBlOwotICAgICAgZXhwYnVmLmluZGV4ID0gZ3JvdXAtPmJ1ZmZlci5pbmRleDsKLSAgICAgIGV4cGJ1Zi5wbGFuZSA9IGk7Ci0gICAgICBleHBidWYuZmxhZ3MgPSBPX0NMT0VYRUMgfCBPX1JEV1I7Ci0KLSAgICAgIGlmICh2NGwyX2lvY3RsIChhbGxvY2F0b3ItPnZpZGVvX2ZkLCBWSURJT0NfRVhQQlVGLCAmZXhwYnVmKSA8IDApCi0gICAgICAgIGdvdG8gZXhwYnVmX2ZhaWxlZDsKLQotICAgICAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgImV4cG9ydGVkIERNQUJVRiBhcyBmZCAlaSBwbGFuZSAlZCIsCi0gICAgICAgICAgZXhwYnVmLmZkLCBpKTsKLQotICAgICAgZ3JvdXAtPm1lbVtpXSA9IChHc3RNZW1vcnkgKikgX3Y0bDJtZW1fbmV3ICgwLCBHU1RfQUxMT0NBVE9SIChhbGxvY2F0b3IpLAotICAgICAgICAgIE5VTEwsIGdyb3VwLT5wbGFuZXNbaV0ubGVuZ3RoLCAwLCAwLCBncm91cC0+cGxhbmVzW2ldLmxlbmd0aCwgaSwKLSAgICAgICAgICBOVUxMLCBleHBidWYuZmQsIGdyb3VwKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogVGFrZSBiYWNrIHRoZSBhbGxvY2F0b3IgcmVmZXJlbmNlICovCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoYWxsb2NhdG9yKTsKLSAgICB9Ci0KLSAgICBnX2Fzc2VydCAoZ3N0X2lzX3Y0bDJfbWVtb3J5IChncm91cC0+bWVtW2ldKSk7Ci0gICAgbWVtID0gKEdzdFY0bDJNZW1vcnkgKikgZ3JvdXAtPm1lbVtpXTsKLQotICAgIGlmICgoZG1hZmQgPSBkdXAgKG1lbS0+ZG1hZmQpKSA8IDApCi0gICAgICBnb3RvIGR1cF9mYWlsZWQ7Ci0KLSAgICBkbWFfbWVtID0gZ3N0X2RtYWJ1Zl9hbGxvY2F0b3JfYWxsb2MgKGRtYWJ1Zl9hbGxvY2F0b3IsIGRtYWZkLAotICAgICAgICBtZW0tPm1lbS5tYXhzaXplKTsKLQotICAgIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEgKEdTVF9NSU5JX09CSkVDVCAoZG1hX21lbSksCi0gICAgICAgIEdTVF9WNEwyX01FTU9SWV9RVUFSSywgbWVtLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9tZW1vcnlfdW5yZWYpOwotCi0gICAgZ3JvdXAtPm1lbVtpXSA9IGRtYV9tZW07Ci0gICAgZ3JvdXAtPm1lbXNfYWxsb2NhdGVkKys7Ci0gIH0KLQotICBnc3RfdjRsMl9hbGxvY2F0b3JfcmVzZXRfc2l6ZSAoYWxsb2NhdG9yLCBncm91cCk7Ci0KLSAgcmV0dXJuIGdyb3VwOwotCi1leHBidWZfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYWxsb2NhdG9yLCAiRmFpbGVkIHRvIGV4cG9ydCBETUFCVUY6ICVzIiwKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLWR1cF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsICJGYWlsZWQgdG8gZHVwIERNQUJVRiBkZXNjcmlwdG9yOiAlcyIsCi0gICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci1jbGVhbnVwOgotICB7Ci0gICAgX2NsZWFudXBfZmFpbGVkX2FsbG9jIChhbGxvY2F0b3IsIGdyb3VwKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfYWxsb2NhdG9yX2NsZWFyX2RtYWJ1ZmluIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgIEdzdFY0bDJNZW1vcnlHcm91cCAqIGdyb3VwKQotewotICBHc3RWNGwyTWVtb3J5ICptZW07Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl9pZl9mYWlsIChhbGxvY2F0b3ItPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9ETUFCVUYpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBncm91cC0+bl9tZW07IGkrKykgewotCi0gICAgbWVtID0gKEdzdFY0bDJNZW1vcnkgKikgZ3JvdXAtPm1lbVtpXTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICJjbGVhcmluZyBETUFCVUYgaW1wb3J0LCBmZCAlaSBwbGFuZSAlZCIsCi0gICAgICAgIG1lbS0+ZG1hZmQsIGkpOwotCi0gICAgaWYgKG1lbS0+ZG1hZmQgPj0gMCkKLSAgICAgIGNsb3NlIChtZW0tPmRtYWZkKTsKLQotICAgIC8qIFVwZGF0ZSBtZW1vcnkgKi8KLSAgICBtZW0tPm1lbS5tYXhzaXplID0gMDsKLSAgICBtZW0tPm1lbS5vZmZzZXQgPSAwOwotICAgIG1lbS0+bWVtLnNpemUgPSAwOwotICAgIG1lbS0+ZG1hZmQgPSAtMTsKLQotICAgIC8qIFVwZGF0ZSB2NGwyIHN0cnVjdHVyZSAqLwotICAgIGdyb3VwLT5wbGFuZXNbaV0ubGVuZ3RoID0gMDsKLSAgICBncm91cC0+cGxhbmVzW2ldLmJ5dGVzdXNlZCA9IDA7Ci0gICAgZ3JvdXAtPnBsYW5lc1tpXS5tLmZkID0gLTE7Ci0gICAgZ3JvdXAtPnBsYW5lc1tpXS5kYXRhX29mZnNldCA9IDA7Ci0gIH0KLQotICBpZiAoIVY0TDJfVFlQRV9JU19NVUxUSVBMQU5BUiAoYWxsb2NhdG9yLT50eXBlKSkgewotICAgIGdyb3VwLT5idWZmZXIuYnl0ZXN1c2VkID0gMDsKLSAgICBncm91cC0+YnVmZmVyLmxlbmd0aCA9IDA7Ci0gICAgZ3JvdXAtPmJ1ZmZlci5tLmZkID0gLTE7Ci0gIH0KLX0KLQotR3N0VjRsMk1lbW9yeUdyb3VwICoKLWdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19kbWFidWZpbiAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvcikKLXsKLSAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cDsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhbGxvY2F0b3ItPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9ETUFCVUYsIE5VTEwpOwotCi0gIGdyb3VwID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX2FsbG9jIChhbGxvY2F0b3IpOwotCi0gIGlmIChncm91cCA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotCi0gIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICJhbGxvY2F0aW5nIGVtcHR5IERNQUJVRiBpbXBvcnQgZ3JvdXAiKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICBpZiAoZ3JvdXAtPm1lbVtpXSA9PSBOVUxMKSB7Ci0gICAgICBncm91cC0+bWVtW2ldID0gKEdzdE1lbW9yeSAqKSBfdjRsMm1lbV9uZXcgKDAsIEdTVF9BTExPQ0FUT1IgKGFsbG9jYXRvciksCi0gICAgICAgICAgTlVMTCwgMCwgMCwgMCwgMCwgaSwgTlVMTCwgLTEsIGdyb3VwKTsKLSAgICB9IGVsc2UgewotICAgICAgLyogVGFrZSBiYWNrIHRoZSBhbGxvY2F0b3IgcmVmZXJlbmNlICovCi0gICAgICBnc3Rfb2JqZWN0X3JlZiAoYWxsb2NhdG9yKTsKLSAgICB9Ci0KLSAgICBncm91cC0+bWVtc19hbGxvY2F0ZWQrKzsKLSAgfQotCi0gIGdzdF92NGwyX2FsbG9jYXRvcl9jbGVhcl9kbWFidWZpbiAoYWxsb2NhdG9yLCBncm91cCk7Ci0KLSAgcmV0dXJuIGdyb3VwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfYWxsb2NhdG9yX2NsZWFyX3VzZXJwdHIgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0VjRsMk1lbW9yeUdyb3VwICogZ3JvdXApCi17Ci0gIEdzdFY0bDJNZW1vcnkgKm1lbTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKGFsbG9jYXRvci0+bWVtb3J5ID09IFY0TDJfTUVNT1JZX1VTRVJQVFIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBncm91cC0+bl9tZW07IGkrKykgewotICAgIG1lbSA9IChHc3RWNGwyTWVtb3J5ICopIGdyb3VwLT5tZW1baV07Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoYWxsb2NhdG9yLCAiY2xlYXJpbmcgVVNFUlBUUiAlcCBwbGFuZSAlZCBzaXplICUiCi0gICAgICAgIEdfR1NJWkVfRk9STUFULCBtZW0tPmRhdGEsIGksIG1lbS0+bWVtLnNpemUpOwotCi0gICAgbWVtLT5tZW0ubWF4c2l6ZSA9IDA7Ci0gICAgbWVtLT5tZW0uc2l6ZSA9IDA7Ci0gICAgbWVtLT5kYXRhID0gTlVMTDsKLQotICAgIGdyb3VwLT5wbGFuZXNbaV0ubGVuZ3RoID0gMDsKLSAgICBncm91cC0+cGxhbmVzW2ldLmJ5dGVzdXNlZCA9IDA7Ci0gICAgZ3JvdXAtPnBsYW5lc1tpXS5tLnVzZXJwdHIgPSAwOwotICB9Ci0KLSAgaWYgKCFWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBncm91cC0+YnVmZmVyLmJ5dGVzdXNlZCA9IDA7Ci0gICAgZ3JvdXAtPmJ1ZmZlci5sZW5ndGggPSAwOwotICAgIGdyb3VwLT5idWZmZXIubS51c2VycHRyID0gMDsKLSAgfQotfQotCi1Hc3RWNGwyTWVtb3J5R3JvdXAgKgotZ3N0X3Y0bDJfYWxsb2NhdG9yX2FsbG9jX3VzZXJwdHIgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IpCi17Ci0gIEdzdFY0bDJNZW1vcnlHcm91cCAqZ3JvdXA7Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYWxsb2NhdG9yLT5tZW1vcnkgPT0gVjRMMl9NRU1PUllfVVNFUlBUUiwgTlVMTCk7Ci0KLSAgZ3JvdXAgPSBnc3RfdjRsMl9hbGxvY2F0b3JfYWxsb2MgKGFsbG9jYXRvcik7Ci0KLSAgaWYgKGdyb3VwID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgImFsbG9jYXRpbmcgZW1wdHkgVVNFUlBUUiBncm91cCIpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBncm91cC0+bl9tZW07IGkrKykgewotCi0gICAgaWYgKGdyb3VwLT5tZW1baV0gPT0gTlVMTCkgewotICAgICAgZ3JvdXAtPm1lbVtpXSA9IChHc3RNZW1vcnkgKikgX3Y0bDJtZW1fbmV3ICgwLCBHU1RfQUxMT0NBVE9SIChhbGxvY2F0b3IpLAotICAgICAgICAgIE5VTEwsIDAsIDAsIDAsIDAsIGksIE5VTEwsIC0xLCBncm91cCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIFRha2UgYmFjayB0aGUgYWxsb2NhdG9yIHJlZmVyZW5jZSAqLwotICAgICAgZ3N0X29iamVjdF9yZWYgKGFsbG9jYXRvcik7Ci0gICAgfQotCi0gICAgZ3JvdXAtPm1lbXNfYWxsb2NhdGVkKys7Ci0gIH0KLQotICBnc3RfdjRsMl9hbGxvY2F0b3JfY2xlYXJfdXNlcnB0ciAoYWxsb2NhdG9yLCBncm91cCk7Ci0KLSAgcmV0dXJuIGdyb3VwOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfYWxsb2NhdG9yX2ltcG9ydF9kbWFidWYgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0VjRsMk1lbW9yeUdyb3VwICogZ3JvdXAsIGdpbnQgbl9tZW0sIEdzdE1lbW9yeSAqKiBkbWFfbWVtKQotewotICBHc3RWNGwyTWVtb3J5ICptZW07Ci0gIGdpbnQgaTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoYWxsb2NhdG9yLT5tZW1vcnkgPT0gVjRMMl9NRU1PUllfRE1BQlVGLCBGQUxTRSk7Ci0KLSAgaWYgKGdyb3VwLT5uX21lbSAhPSBuX21lbSkKLSAgICBnb3RvIG5fbWVtX21pc3NtYXRjaDsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICBnaW50IGRtYWZkOwotICAgIGdzaXplIHNpemUsIG9mZnNldCwgbWF4c2l6ZTsKLQotICAgIGlmICghZ3N0X2lzX2RtYWJ1Zl9tZW1vcnkgKGRtYV9tZW1baV0pKQotICAgICAgZ290byBub3RfZG1hYnVmOwotCi0gICAgc2l6ZSA9IGdzdF9tZW1vcnlfZ2V0X3NpemVzIChkbWFfbWVtW2ldLCAmb2Zmc2V0LCAmbWF4c2l6ZSk7Ci0KLSAgICBpZiAoKGRtYWZkID0gZHVwIChnc3RfZG1hYnVmX21lbW9yeV9nZXRfZmQgKGRtYV9tZW1baV0pKSkgPCAwKQotICAgICAgZ290byBkdXBfZmFpbGVkOwotCi0gICAgR1NUX0xPR19PQkpFQ1QgKGFsbG9jYXRvciwgImltcG9ydGVkIERNQUJVRiBhcyBmZCAlaSBwbGFuZSAlZCIsIGRtYWZkLCBpKTsKLQotICAgIG1lbSA9IChHc3RWNGwyTWVtb3J5ICopIGdyb3VwLT5tZW1baV07Ci0KLSAgICAvKiBVcGRhdGUgbWVtb3J5ICovCi0gICAgbWVtLT5tZW0ubWF4c2l6ZSA9IG1heHNpemU7Ci0gICAgbWVtLT5tZW0ub2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1lbS0+bWVtLnNpemUgPSBzaXplOwotICAgIG1lbS0+ZG1hZmQgPSBkbWFmZDsKLQotICAgIC8qIFVwZGF0ZSB2NGwyIHN0cnVjdHVyZSAqLwotICAgIGdyb3VwLT5wbGFuZXNbaV0ubGVuZ3RoID0gbWF4c2l6ZTsKLSAgICBncm91cC0+cGxhbmVzW2ldLmJ5dGVzdXNlZCA9IHNpemU7Ci0gICAgZ3JvdXAtPnBsYW5lc1tpXS5tLmZkID0gZG1hZmQ7Ci0gICAgZ3JvdXAtPnBsYW5lc1tpXS5kYXRhX29mZnNldCA9IG9mZnNldDsKLSAgfQotCi0gIC8qIENvcHkgaW50byBidWZmZXIgc3RydWN0dXJlIGlmIG5vdCB1c2luZyBwbGFuZXMgKi8KLSAgaWYgKCFWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBncm91cC0+YnVmZmVyLmJ5dGVzdXNlZCA9IGdyb3VwLT5wbGFuZXNbMF0uYnl0ZXN1c2VkOwotICAgIGdyb3VwLT5idWZmZXIubGVuZ3RoID0gZ3JvdXAtPnBsYW5lc1swXS5sZW5ndGg7Ci0gICAgZ3JvdXAtPmJ1ZmZlci5tLmZkID0gZ3JvdXAtPnBsYW5lc1swXS5tLnVzZXJwdHI7Ci0gIH0gZWxzZSB7Ci0gICAgZ3JvdXAtPmJ1ZmZlci5sZW5ndGggPSBncm91cC0+bl9tZW07Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotbl9tZW1fbWlzc21hdGNoOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYWxsb2NhdG9yLCAiR290ICVpIGRtYWJ1ZiBidXQgbmVlZGVkICVpIiwgbl9tZW0sCi0gICAgICAgIGdyb3VwLT5uX21lbSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1ub3RfZG1hYnVmOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYWxsb2NhdG9yLCAiTWVtb3J5ICVpIGlzIG5vdCBvZiBETUFCVUYiLCBpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWR1cF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsICJGYWlsZWQgdG8gZHVwIERNQUJVRiBkZXNjcmlwdG9yOiAlcyIsCi0gICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9hbGxvY2F0b3JfaW1wb3J0X3VzZXJwdHIgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0VjRsMk1lbW9yeUdyb3VwICogZ3JvdXAsIGdzaXplIGltZ19zaXplLCBpbnQgbl9wbGFuZXMsCi0gICAgZ3BvaW50ZXIgKiBkYXRhLCBnc2l6ZSAqIHNpemUpCi17Ci0gIEdzdFY0bDJNZW1vcnkgKm1lbTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChhbGxvY2F0b3ItPm1lbW9yeSA9PSBWNEwyX01FTU9SWV9VU0VSUFRSLCBGQUxTRSk7Ci0KLSAgLyogVE9ETyBTdXBwb3J0IHBhc3NpbmcgTiBwbGFuZSBmcm9tIDEgbWVtb3J5IHRvIE1QTEFORSB2NGwyIGZvcm1hdCAqLwotICBpZiAoVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSIChhbGxvY2F0b3ItPnR5cGUpICYmIG5fcGxhbmVzICE9IGdyb3VwLT5uX21lbSkKLSAgICBnb3RvIG5fbWVtX21pc3NtYXRjaDsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICBnc2l6ZSBtYXhzaXplLCBwc2l6ZTsKLQotICAgIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICAgIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXggPSAmYWxsb2NhdG9yLT5mb3JtYXQuZm10LnBpeF9tcDsKLSAgICAgIG1heHNpemUgPSBwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2U7Ci0gICAgICBwc2l6ZSA9IHNpemVbaV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1heHNpemUgPSBhbGxvY2F0b3ItPmZvcm1hdC5mbXQucGl4LnNpemVpbWFnZTsKLSAgICAgIHBzaXplID0gaW1nX3NpemU7Ci0gICAgfQotCi0gICAgZ19hc3NlcnQgKHBzaXplIDw9IGltZ19zaXplKTsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICJpbXBvcnRlZCBVU0VSUFRSICVwIHBsYW5lICVkIHNpemUgJSIKLSAgICAgICAgR19HU0laRV9GT1JNQVQsIGRhdGFbaV0sIGksIHBzaXplKTsKLQotICAgIG1lbSA9IChHc3RWNGwyTWVtb3J5ICopIGdyb3VwLT5tZW1baV07Ci0KLSAgICBtZW0tPm1lbS5tYXhzaXplID0gbWF4c2l6ZTsKLSAgICBtZW0tPm1lbS5zaXplID0gcHNpemU7Ci0gICAgbWVtLT5kYXRhID0gZGF0YVtpXTsKLQotICAgIGdyb3VwLT5wbGFuZXNbaV0ubGVuZ3RoID0gbWF4c2l6ZTsKLSAgICBncm91cC0+cGxhbmVzW2ldLmJ5dGVzdXNlZCA9IHBzaXplOwotICAgIGdyb3VwLT5wbGFuZXNbaV0ubS51c2VycHRyID0gKHVuc2lnbmVkIGxvbmcpIGRhdGFbaV07Ci0gICAgZ3JvdXAtPnBsYW5lc1tpXS5kYXRhX29mZnNldCA9IDA7Ci0gIH0KLQotICAvKiBDb3B5IGludG8gYnVmZmVyIHN0cnVjdHVyZSBpZiBub3QgdXNpbmcgcGxhbmVzICovCi0gIGlmICghVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSIChhbGxvY2F0b3ItPnR5cGUpKSB7Ci0gICAgZ3JvdXAtPmJ1ZmZlci5ieXRlc3VzZWQgPSBncm91cC0+cGxhbmVzWzBdLmJ5dGVzdXNlZDsKLSAgICBncm91cC0+YnVmZmVyLmxlbmd0aCA9IGdyb3VwLT5wbGFuZXNbMF0ubGVuZ3RoOwotICAgIGdyb3VwLT5idWZmZXIubS51c2VycHRyID0gZ3JvdXAtPnBsYW5lc1swXS5tLnVzZXJwdHI7Ci0gIH0gZWxzZSB7Ci0gICAgZ3JvdXAtPmJ1ZmZlci5sZW5ndGggPSBncm91cC0+bl9tZW07Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLQotbl9tZW1fbWlzc21hdGNoOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoYWxsb2NhdG9yLCAiR290ICVpIHVzZXJwdHIgcGxhbmUgd2hpbGUgZHJpdmVyIG5lZWQgJWkiLAotICAgICAgICBuX3BsYW5lcywgZ3JvdXAtPm5fbWVtKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotdm9pZAotZ3N0X3Y0bDJfYWxsb2NhdG9yX2ZsdXNoIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKQotewotICBnaW50IGk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChhbGxvY2F0b3IpOwotCi0gIGlmICghZ19hdG9taWNfaW50X2dldCAoJmFsbG9jYXRvci0+YWN0aXZlKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGFsbG9jYXRvci0+Y291bnQ7IGkrKykgewotICAgIEdzdFY0bDJNZW1vcnlHcm91cCAqZ3JvdXAgPSBhbGxvY2F0b3ItPmdyb3Vwc1tpXTsKLSAgICBnaW50IG47Ci0KLSAgICBpZiAoSVNfUVVFVUVEIChncm91cC0+YnVmZmVyKSkgewotICAgICAgVU5TRVRfUVVFVUVEIChncm91cC0+YnVmZmVyKTsKLQotICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3Jlc2V0X2dyb3VwIChhbGxvY2F0b3IsIGdyb3VwKTsKLQotICAgICAgZm9yIChuID0gMDsgbiA8IGdyb3VwLT5uX21lbTsgbisrKQotICAgICAgICBnc3RfbWVtb3J5X3VucmVmIChncm91cC0+bWVtW25dKTsKLSAgICB9Ci0gIH0KLQotZG9uZToKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKGFsbG9jYXRvcik7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9hbGxvY2F0b3JfcWJ1ZiAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICBHc3RWNGwyTWVtb3J5R3JvdXAgKiBncm91cCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgZ2ludCBpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX2F0b21pY19pbnRfZ2V0ICgmYWxsb2NhdG9yLT5hY3RpdmUpLCBGQUxTRSk7Ci0KLSAgLyogdXBkYXRlIHNpemVzICovCi0gIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspCi0gICAgICBncm91cC0+cGxhbmVzW2ldLmJ5dGVzdXNlZCA9Ci0gICAgICAgICAgZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKGdyb3VwLT5tZW1baV0sIE5VTEwsIE5VTEwpOwotICB9IGVsc2UgewotICAgIGdyb3VwLT5idWZmZXIuYnl0ZXN1c2VkID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKGdyb3VwLT5tZW1bMF0sIE5VTEwsIE5VTEwpOwotICB9Ci0KLSAgLyogRW5zdXJlIHRoZSBtZW1vcnkgd2lsbCBzdGF5IGFyb3VuZCBhbmQgaXMgUk8gKi8KLSAgZm9yIChpID0gMDsgaSA8IGdyb3VwLT5uX21lbTsgaSsrKQotICAgIGdzdF9tZW1vcnlfcmVmIChncm91cC0+bWVtW2ldKTsKLQotICBpZiAodjRsMl9pb2N0bCAoYWxsb2NhdG9yLT52aWRlb19mZCwgVklESU9DX1FCVUYsICZncm91cC0+YnVmZmVyKSA8IDApIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsICJmYWlsZWQgcXVldWVpbmcgYnVmZmVyICVpOiAlcyIsCi0gICAgICAgIGdyb3VwLT5idWZmZXIuaW5kZXgsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0KLSAgICAvKiBSZWxlYXNlIHRoZSBtZW1vcnksIHBvc3NpYmx5IG1ha2luZyBpdCBSVyBhZ2FpbiAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBncm91cC0+bl9tZW07IGkrKykKLSAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKGdyb3VwLT5tZW1baV0pOwotCi0gICAgcmV0ID0gRkFMU0U7Ci0gICAgaWYgKElTX1FVRVVFRCAoZ3JvdXAtPmJ1ZmZlcikpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGFsbG9jYXRvciwKLSAgICAgICAgICAiZHJpdmVyIHByZXRlbmRzIGJ1ZmZlciBpcyBxdWV1ZWQgZXZlbiBpZiBxdWV1ZSBmYWlsZWQiKTsKLSAgICAgIFVOU0VUX1FVRVVFRCAoZ3JvdXAtPmJ1ZmZlcik7Ci0gICAgfQotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIEdTVF9MT0dfT0JKRUNUIChhbGxvY2F0b3IsICJxdWV1ZWQgYnVmZmVyICVpIChmbGFncyAweCVYKSIsCi0gICAgICBncm91cC0+YnVmZmVyLmluZGV4LCBncm91cC0+YnVmZmVyLmZsYWdzKTsKLQotICBpZiAoIUlTX1FVRVVFRCAoZ3JvdXAtPmJ1ZmZlcikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhbGxvY2F0b3IsCi0gICAgICAgICJkcml2ZXIgcHJldGVuZHMgYnVmZmVyIGlzIG5vdCBxdWV1ZWQgZXZlbiBpZiBxdWV1ZSBzdWNjZWVkZWQiKTsKLSAgICBTRVRfUVVFVUVEIChncm91cC0+YnVmZmVyKTsKLSAgfQotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1Hc3RGbG93UmV0dXJuCi1nc3RfdjRsMl9hbGxvY2F0b3JfZHFidWYgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgR3N0VjRsMk1lbW9yeUdyb3VwICoqIGdyb3VwX291dCkKLXsKLSAgc3RydWN0IHY0bDJfYnVmZmVyIGJ1ZmZlciA9IHsgMCB9OwotICBzdHJ1Y3QgdjRsMl9wbGFuZSBwbGFuZXNbVklERU9fTUFYX1BMQU5FU10gPSB7IHswfSB9OwotICBnaW50IGk7Ci0KLSAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCA9IE5VTEw7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfYXRvbWljX2ludF9nZXQgKCZhbGxvY2F0b3ItPmFjdGl2ZSksIEdTVF9GTE9XX0VSUk9SKTsKLQotICBidWZmZXIudHlwZSA9IGFsbG9jYXRvci0+dHlwZTsKLSAgYnVmZmVyLm1lbW9yeSA9IGFsbG9jYXRvci0+bWVtb3J5OwotCi0gIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBidWZmZXIubGVuZ3RoID0gYWxsb2NhdG9yLT5mb3JtYXQuZm10LnBpeF9tcC5udW1fcGxhbmVzOwotICAgIGJ1ZmZlci5tLnBsYW5lcyA9IHBsYW5lczsKLSAgfQotCi0gIGlmICh2NGwyX2lvY3RsIChhbGxvY2F0b3ItPnZpZGVvX2ZkLCBWSURJT0NfRFFCVUYsICZidWZmZXIpIDwgMCkKLSAgICBnb3RvIGVycm9yOwotCi0gIGdyb3VwID0gYWxsb2NhdG9yLT5ncm91cHNbYnVmZmVyLmluZGV4XTsKLQotICBpZiAoIUlTX1FVRVVFRCAoZ3JvdXAtPmJ1ZmZlcikpIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsCi0gICAgICAgICJidWZmZXIgJWkgd2FzIG5vdCBxdWV1ZWQsIHRoaXMgaW5kaWNhdGUgYSBkcml2ZXIgYnVnLiIsIGJ1ZmZlci5pbmRleCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci0KLSAgZ3JvdXAtPmJ1ZmZlciA9IGJ1ZmZlcjsKLQotICBHU1RfTE9HX09CSkVDVCAoYWxsb2NhdG9yLCAiZGVxdWV1ZWQgYnVmZmVyICVpIChmbGFncyAweCVYKSIsIGJ1ZmZlci5pbmRleCwKLSAgICAgIGJ1ZmZlci5mbGFncyk7Ci0KLSAgaWYgKElTX1FVRVVFRCAoZ3JvdXAtPmJ1ZmZlcikpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChhbGxvY2F0b3IsCi0gICAgICAgICJkcml2ZXIgcHJldGVuZHMgYnVmZmVyIGlzIHF1ZXVlZCBldmVuIGlmIGRlcXVldWUgc3VjY2VlZGVkIik7Ci0gICAgVU5TRVRfUVVFVUVEIChncm91cC0+YnVmZmVyKTsKLSAgfQotCi0gIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBncm91cC0+YnVmZmVyLm0ucGxhbmVzID0gZ3JvdXAtPnBsYW5lczsKLSAgICBtZW1jcHkgKGdyb3VwLT5wbGFuZXMsIGJ1ZmZlci5tLnBsYW5lcywgc2l6ZW9mIChwbGFuZXMpKTsKLSAgfSBlbHNlIHsKLSAgICBncm91cC0+cGxhbmVzWzBdLmJ5dGVzdXNlZCA9IGdyb3VwLT5idWZmZXIuYnl0ZXN1c2VkOwotICAgIGdyb3VwLT5wbGFuZXNbMF0ubGVuZ3RoID0gZ3JvdXAtPmJ1ZmZlci5sZW5ndGg7Ci0gICAgZ19hc3NlcnQgKHNpemVvZiAoZ3JvdXAtPnBsYW5lc1swXS5tKSA9PSBzaXplb2YgKGdyb3VwLT5idWZmZXIubSkpOwotICAgIG1lbWNweSAoJmdyb3VwLT5wbGFuZXNbMF0ubSwgJmdyb3VwLT5idWZmZXIubSwgc2l6ZW9mIChncm91cC0+YnVmZmVyLm0pKTsKLSAgfQotCi0gIC8qIEFuZCB1cGRhdGUgbWVtb3J5IHNpemUgKi8KLSAgaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQgKGFsbG9jYXRvci0+dHlwZSkpIHsKLSAgICBnc3RfdjRsMl9hbGxvY2F0b3JfcmVzZXRfc2l6ZSAoYWxsb2NhdG9yLCBncm91cCk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogZm9yIGNhcHR1cmUsIHNpbXBseSByZWFkIHRoZSBzaXplICovCi0gICAgZm9yIChpID0gMDsgaSA8IGdyb3VwLT5uX21lbTsgaSsrKSB7Ci0gICAgICBpZiAoR19MSUtFTFkgKGdyb3VwLT5wbGFuZXNbaV0uYnl0ZXN1c2VkIDw9IGdyb3VwLT5tZW1baV0tPm1heHNpemUpKQotICAgICAgICBnc3RfbWVtb3J5X3Jlc2l6ZSAoZ3JvdXAtPm1lbVtpXSwgMCwgZ3JvdXAtPnBsYW5lc1tpXS5ieXRlc3VzZWQpOwotICAgICAgZWxzZSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYWxsb2NhdG9yLAotICAgICAgICAgICAgInY0bDIgcHJvdmlkZWQgYnVmZmVyIHRoYXQgaXMgdG9vIGJpZyBmb3IgdGhlIG1lbW9yeSBpdCB3YXMgIgotICAgICAgICAgICAgIndyaXRpbmcgaW50by4gIHY0bDIgY2xhaW1zICUiIEdfR1VJTlQzMl9GT1JNQVQgIiBieXRlcyB1c2VkIGJ1dCAiCi0gICAgICAgICAgICAibWVtb3J5IGlzIG9ubHkgJSIgR19HU0laRV9GT1JNQVQgIkIuICBUaGlzIGlzIHByb2JhYmx5IGEgZHJpdmVyICIKLSAgICAgICAgICAgICJidWcuIiwgZ3JvdXAtPnBsYW5lc1tpXS5ieXRlc3VzZWQsIGdyb3VwLT5tZW1baV0tPm1heHNpemUpOwotICAgICAgICBnc3RfbWVtb3J5X3Jlc2l6ZSAoZ3JvdXAtPm1lbVtpXSwgMCwgZ3JvdXAtPm1lbVtpXS0+bWF4c2l6ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogUmVsZWFzZSB0aGUgbWVtb3J5LCBwb3NzaWJseSBtYWtpbmcgaXQgUlcgYWdhaW4gKi8KLSAgZm9yIChpID0gMDsgaSA8IGdyb3VwLT5uX21lbTsgaSsrKQotICAgIGdzdF9tZW1vcnlfdW5yZWYgKGdyb3VwLT5tZW1baV0pOwotCi0gICpncm91cF9vdXQgPSBncm91cDsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1lcnJvcjoKLSAgaWYgKGVycm5vID09IEVQSVBFKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoYWxsb2NhdG9yLCAiYnJva2VuIHBpcGUgc2lnbmFscyBsYXN0IGJ1ZmZlciIpOwotICAgIHJldHVybiBHU1RfRkxPV19FT1M7Ci0gIH0KLQotICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsICJmYWlsZWQgZGVxdWV1aW5nIGEgJXMgYnVmZmVyOiAlcyIsCi0gICAgICBtZW1vcnlfdHlwZV90b19zdHIgKGFsbG9jYXRvci0+bWVtb3J5KSwgZ19zdHJlcnJvciAoZXJybm8pKTsKLQotICBzd2l0Y2ggKGVycm5vKSB7Ci0gICAgY2FzZSBFQUdBSU46Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGFsbG9jYXRvciwKLSAgICAgICAgICAiTm9uLWJsb2NraW5nIEkvTyBoYXMgYmVlbiBzZWxlY3RlZCB1c2luZyBPX05PTkJMT0NLIGFuZCIKLSAgICAgICAgICAiIG5vIGJ1ZmZlciB3YXMgaW4gdGhlIG91dGdvaW5nIHF1ZXVlLiIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFSU5WQUw6Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChhbGxvY2F0b3IsCi0gICAgICAgICAgIlRoZSBidWZmZXIgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLCBvciB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcywgIgotICAgICAgICAgICJvciBubyBidWZmZXJzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgeWV0LCBvciB0aGUgdXNlcnB0ciAiCi0gICAgICAgICAgIm9yIGxlbmd0aCBhcmUgaW52YWxpZC4iKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRU5PTUVNOgotICAgICAgR1NUX0VSUk9SX09CSkVDVCAoYWxsb2NhdG9yLAotICAgICAgICAgICJpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGVucXVldWUgYSB1c2VyIHBvaW50ZXIgYnVmZmVyIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEVJTzoKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoYWxsb2NhdG9yLAotICAgICAgICAgICJWSURJT0NfRFFCVUYgZmFpbGVkIGR1ZSB0byBhbiBpbnRlcm5hbCBlcnJvci4iCi0gICAgICAgICAgIiBDYW4gYWxzbyBpbmRpY2F0ZSB0ZW1wb3JhcnkgcHJvYmxlbXMgbGlrZSBzaWduYWwgbG9zcy4iCi0gICAgICAgICAgIiBOb3RlIHRoZSBkcml2ZXIgbWlnaHQgZGVxdWV1ZSBhbiAoZW1wdHkpIGJ1ZmZlciBkZXNwaXRlIgotICAgICAgICAgICIgcmV0dXJuaW5nIGFuIGVycm9yLCBvciBldmVuIHN0b3AgY2FwdHVyaW5nLiIpOwotICAgICAgLyogaGF2ZSB3ZSBkZS1xdWV1ZWQgYSBidWZmZXIgPyAqLwotICAgICAgaWYgKCFJU19RVUVVRUQgKGJ1ZmZlcikpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYWxsb2NhdG9yLCAicmVlbnF1ZXVlaW5nIGJ1ZmZlciIpOwotICAgICAgICAvKiBGSVhNRSAuLi4gc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBoZXJlPyAqLwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFSU5UUjoKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoYWxsb2NhdG9yLCAiY291bGQgbm90IHN5bmMgb24gYSBidWZmZXIgb24gZGV2aWNlIik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChhbGxvY2F0b3IsCi0gICAgICAgICAgIkdyYWJiaW5nIGZyYW1lIGdvdCBpbnRlcnJ1cHRlZCB1bmV4cGVjdGVkbHkuICVkOiAlcy4iLCBlcnJubywKLSAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci19Ci0KLXZvaWQKLWdzdF92NGwyX2FsbG9jYXRvcl9yZXNldF9ncm91cCAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICBHc3RWNGwyTWVtb3J5R3JvdXAgKiBncm91cCkKLXsKLSAgc3dpdGNoIChhbGxvY2F0b3ItPm1lbW9yeSkgewotICAgIGNhc2UgVjRMMl9NRU1PUllfVVNFUlBUUjoKLSAgICAgIGdzdF92NGwyX2FsbG9jYXRvcl9jbGVhcl91c2VycHRyIChhbGxvY2F0b3IsIGdyb3VwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9NRU1PUllfRE1BQlVGOgotICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX2NsZWFyX2RtYWJ1ZmluIChhbGxvY2F0b3IsIGdyb3VwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9NRU1PUllfTU1BUDoKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3Jlc2V0X3NpemUgKGFsbG9jYXRvciwgZ3JvdXApOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5oIGIvc3lzL3Y0bDIvZ3N0djRsMmFsbG9jYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjYwMzg5Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJhbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuCi0gKiAgICAgQXV0aG9yOiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLQotI2lmbmRlZiBfX0dTVF9WNEwyX0FMTE9DQVRPUl9IX18KLSNkZWZpbmUgX19HU1RfVjRMMl9BTExPQ0FUT1JfSF9fCi0KLSNpbmNsdWRlICJleHQvdmlkZW9kZXYyLmgiCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9nc3RhdG9taWNxdWV1ZS5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMl9BTExPQ0FUT1IgICAgICAgICAgICAgICAgIChnc3RfdjRsMl9hbGxvY2F0b3JfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJfQUxMT0NBVE9SKG9iaikgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIEdTVF9UWVBFX1Y0TDJfQUxMT0NBVE9SKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJfQUxMT0NBVE9SX0NMQVNTKGtsYXNzKSAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVjRMMl9BTExPQ0FUT1IpKQotI2RlZmluZSBHU1RfVjRMMl9BTExPQ0FUT1JfR0VUX0NMQVNTKG9iaikgICAgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBHU1RfVFlQRV9WNEwyX0FMTE9DQVRPUiwgR3N0VjRsMkFsbG9jYXRvckNsYXNzKSkKLSNkZWZpbmUgR1NUX1Y0TDJfQUxMT0NBVE9SKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1Y0TDJfQUxMT0NBVE9SLCBHc3RWNGwyQWxsb2NhdG9yKSkKLSNkZWZpbmUgR1NUX1Y0TDJfQUxMT0NBVE9SX0NMQVNTKGtsYXNzKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfVjRMMl9BTExPQ0FUT1IsIEdzdFY0bDJBbGxvY2F0b3JDbGFzcykpCi0jZGVmaW5lIEdTVF9WNEwyX0FMTE9DQVRPUl9DQVNUKG9iaikgICAgICAgICAgICAoKEdzdFY0bDJBbGxvY2F0b3IgKikob2JqKSkKLQotI2RlZmluZSBHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX1JFUVVFU1Qob2JqLHR5cGUpIFwKLSAgICAgICAgKEdTVF9PQkpFQ1RfRkxBR19JU19TRVQgKG9iaiwgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfICMjIHR5cGUgIyMgX1JFUUJVRlMpKQotI2RlZmluZSBHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX0FMTE9DQVRFKG9iaix0eXBlKSBcCi0gICAgICAgIChHU1RfT0JKRUNUX0ZMQUdfSVNfU0VUIChvYmosIEdTVF9WNEwyX0FMTE9DQVRPUl9GTEFHXyAjIyB0eXBlICMjIF9DUkVBVEVfQlVGUykpCi0KLSNkZWZpbmUgR1NUX1Y0TDJfTUVNT1JZX1FVQVJLIGdzdF92NGwyX21lbW9yeV9xdWFyayAoKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMkFsbG9jYXRvciBHc3RWNGwyQWxsb2NhdG9yOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJBbGxvY2F0b3JDbGFzcyBHc3RWNGwyQWxsb2NhdG9yQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMk1lbW9yeUdyb3VwIEdzdFY0bDJNZW1vcnlHcm91cDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyTWVtb3J5IEdzdFY0bDJNZW1vcnk7Ci10eXBlZGVmIGVudW0gX0dzdFY0bDJDYXBhYmlsaXRpZXMgR3N0VjRsMkNhcGFiaWxpdGllczsKLXR5cGVkZWYgZW51bSBfR3N0VjRsMlJldHVybiBHc3RWNGwyUmV0dXJuOwotCi1lbnVtIF9Hc3RWNGwyQWxsb2NhdG9yRmxhZ3MKLXsKLSAgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfTU1BUF9SRVFCVUZTICAgICAgICA9IChHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCA8PCAwKSwKLSAgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfTU1BUF9DUkVBVEVfQlVGUyAgICA9IChHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCA8PCAxKSwKLSAgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfVVNFUlBUUl9SRVFCVUZTICAgICA9IChHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCA8PCAyKSwKLSAgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfVVNFUlBUUl9DUkVBVEVfQlVGUyA9IChHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCA8PCAzKSwKLSAgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfRE1BQlVGX1JFUUJVRlMgICAgICA9IChHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCA8PCA0KSwKLSAgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfRE1BQlVGX0NSRUFURV9CVUZTICA9IChHU1RfQUxMT0NBVE9SX0ZMQUdfTEFTVCA8PCA1KSwKLX07Ci0KLWVudW0gX0dzdFY0bDJSZXR1cm4KLXsKLSAgR1NUX1Y0TDJfT0sgPSAwLAotICBHU1RfVjRMMl9FUlJPUiA9IC0xLAotICBHU1RfVjRMMl9CVVNZID0gLTIKLX07Ci0KLXN0cnVjdCBfR3N0VjRsMk1lbW9yeQotewotICBHc3RNZW1vcnkgbWVtOwotICBnaW50IHBsYW5lOwotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwOwotICBncG9pbnRlciBkYXRhOwotICBnaW50IGRtYWZkOwotfTsKLQotc3RydWN0IF9Hc3RWNGwyTWVtb3J5R3JvdXAKLXsKLSAgZ2ludCBuX21lbTsKLSAgR3N0TWVtb3J5ICogbWVtW1ZJREVPX01BWF9QTEFORVNdOwotICBnaW50IG1lbXNfYWxsb2NhdGVkOwotICBzdHJ1Y3QgdjRsMl9idWZmZXIgYnVmZmVyOwotICBzdHJ1Y3QgdjRsMl9wbGFuZSBwbGFuZXNbVklERU9fTUFYX1BMQU5FU107Ci19OwotCi1zdHJ1Y3QgX0dzdFY0bDJBbGxvY2F0b3IKLXsKLSAgR3N0QWxsb2NhdG9yIHBhcmVudDsKLSAgZ2ludCB2aWRlb19mZDsKLSAgZ3VpbnQzMiBjb3VudDsKLSAgZ3VpbnQzMiB0eXBlOwotICBndWludDMyIG1lbW9yeTsKLSAgc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKLSAgZ2Jvb2xlYW4gY2FuX2FsbG9jYXRlOwotICBnYm9vbGVhbiBhY3RpdmU7Ci0KLSAgR3N0VjRsMk1lbW9yeUdyb3VwICogZ3JvdXBzW1ZJREVPX01BWF9GUkFNRV07Ci0gIEdzdEF0b21pY1F1ZXVlICpmcmVlX3F1ZXVlOwotICBHc3RBdG9taWNRdWV1ZSAqcGVuZGluZ19xdWV1ZTsKLQotfTsKLQotc3RydWN0IF9Hc3RWNGwyQWxsb2NhdG9yQ2xhc3MgewotICBHc3RBbGxvY2F0b3JDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1HVHlwZSBnc3RfdjRsMl9hbGxvY2F0b3JfZ2V0X3R5cGUodm9pZCk7Ci0KLWdib29sZWFuICAgICAgICAgICAgIGdzdF9pc192NGwyX21lbW9yeSAgICAgICAgICAgICAgICAoR3N0TWVtb3J5ICogbWVtKTsKLQotR1F1YXJrICAgICAgICAgICAgICAgZ3N0X3Y0bDJfbWVtb3J5X3F1YXJrICAgICAgICAgICAgICh2b2lkKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX2lzX2FjdGl2ZSAgICAgIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKTsKLQotZ3VpbnQgICAgICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX2dldF9zaXplICAgICAgIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKTsKLQotR3N0VjRsMkFsbG9jYXRvciogICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX25ldyAgICAgICAgICAgIChHc3RPYmplY3QgKnBhcmVudCwgZ2ludCB2aWRlb19mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICogZm9ybWF0KTsKLQotZ3VpbnQgICAgICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3N0YXJ0ICAgICAgICAgIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDMyIGNvdW50LCBndWludDMyIG1lbW9yeSk7Ci0KLUdzdFY0bDJSZXR1cm4gICAgICAgIGdzdF92NGwyX2FsbG9jYXRvcl9zdG9wICAgICAgICAgICAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvcik7Ci0KLUdzdFY0bDJNZW1vcnlHcm91cCogIGdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19tbWFwICAgICAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvcik7Ci0KLUdzdFY0bDJNZW1vcnlHcm91cCogIGdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19kbWFidWYgICAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0QWxsb2NhdG9yICogZG1hYnVmX2FsbG9jYXRvcik7Ci0KLUdzdFY0bDJNZW1vcnlHcm91cCAqIGdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19kbWFidWZpbiAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvcik7Ci0KLUdzdFY0bDJNZW1vcnlHcm91cCAqIGdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY191c2VycHRyICAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvcik7Ci0KLWdib29sZWFuICAgICAgICAgICAgIGdzdF92NGwyX2FsbG9jYXRvcl9pbXBvcnRfZG1hYnVmICAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBuX21lbSwgR3N0TWVtb3J5ICoqIGRtYV9tZW0pOwotCi1nYm9vbGVhbiAgICAgICAgICAgICBnc3RfdjRsMl9hbGxvY2F0b3JfaW1wb3J0X3VzZXJwdHIgKEdzdFY0bDJBbGxvY2F0b3IgKiBhbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFY0bDJNZW1vcnlHcm91cCAqZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIGltZ19zaXplLCBpbnQgbl9wbGFuZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICogZGF0YSwgZ3NpemUgKiBzaXplKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX2ZsdXNoICAgICAgICAgIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yKTsKLQotZ2Jvb2xlYW4gICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3FidWYgICAgICAgICAgIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RWNGwyTWVtb3J5R3JvdXAgKiBncm91cCk7Ci0KLUdzdEZsb3dSZXR1cm4gICAgICAgIGdzdF92NGwyX2FsbG9jYXRvcl9kcWJ1ZiAgICAgICAgICAoR3N0VjRsMkFsbG9jYXRvciAqIGFsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VjRsMk1lbW9yeUdyb3VwICoqIGdyb3VwKTsKLQotdm9pZCAgICAgICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX3Jlc2V0X2dyb3VwICAgIChHc3RWNGwyQWxsb2NhdG9yICogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RWNGwyTWVtb3J5R3JvdXAgKiBncm91cCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9WNEwyX0FMTE9DQVRPUl9IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmMgYi9zeXMvdjRsMi9nc3R2NGwyYnVmZmVycG9vbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWFhOGU2Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDE2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKiAgICAgICAgICAgICAgIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYyAtIGh0dHA6Ly93d3cudGkuY29tLwotICoKLSAqIGdzdHY0bDJidWZmZXJwb29sLmMgVjRMMiBidWZmZXIgcG9vbCBjbGFzcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaWZuZGVmIF9HTlVfU09VUkNFCi0jIGRlZmluZSBfR05VX1NPVVJDRSAgICAgICAgICAgIC8qIE9fQ0xPRVhFQyAqLwotI2VuZGlmCi0jaW5jbHVkZSA8ZmNudGwuaD4KLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJnc3QvdmlkZW8vdmlkZW8uaCIKLSNpbmNsdWRlICJnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmgiCi0jaW5jbHVkZSAiZ3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oIgotI2luY2x1ZGUgImdzdC9hbGxvY2F0b3JzL2dzdGRtYWJ1Zi5oIgotCi0jaW5jbHVkZSA8Z3N0djRsMmJ1ZmZlcnBvb2wuaD4KLQotI2luY2x1ZGUgInY0bDJfY2FsbHMuaCIKLSNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tcGx1Z2luLmgiCi0jaW5jbHVkZSA8Z3N0L2dsaWItY29tcGF0LXByaXZhdGUuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAodjRsMmJ1ZmZlcnBvb2xfZGVidWcpOwotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoQ0FUX1BFUkZPUk1BTkNFKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHY0bDJidWZmZXJwb29sX2RlYnVnCi0KLSNkZWZpbmUgR1NUX1Y0TDJfSU1QT1JUX1FVQVJLIGdzdF92NGwyX2J1ZmZlcl9wb29sX2ltcG9ydF9xdWFyayAoKQotCi0KLS8qCi0gKiBHc3RWNGwyQnVmZmVyUG9vbDoKLSAqLwotI2RlZmluZSBnc3RfdjRsMl9idWZmZXJfcG9vbF9wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RWNGwyQnVmZmVyUG9vbCwgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2wsIEdTVF9UWVBFX0JVRkZFUl9QT09MKTsKLQotZW51bSBfR3N0VjRsMkJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MKLXsKLSAgR1NUX1Y0TDJfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX1JFU1VSUkVDVCA9Ci0gICAgICBHU1RfQlVGRkVSX1BPT0xfQUNRVUlSRV9GTEFHX0xBU1QsCi0gIEdTVF9WNEwyX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19MQVNUCi19OwotCi1zdGF0aWMgdm9pZCBnc3RfdjRsMl9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIGJwb29sLAotICAgIEdzdEJ1ZmZlciAqIGJ1ZmZlcik7Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfaXNfYnVmZmVyX3ZhbGlkIChHc3RCdWZmZXIgKiBidWZmZXIsIEdzdFY0bDJNZW1vcnlHcm91cCAqKiBvdXRfZ3JvdXApCi17Ci0gIEdzdE1lbW9yeSAqbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSAoYnVmZmVyLCAwKTsKLSAgZ2Jvb2xlYW4gdmFsaWQgPSBGQUxTRTsKLQotICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfVEFHX01FTU9SWSkpCi0gICAgZ290byBkb25lOwotCi0gIGlmIChnc3RfaXNfZG1hYnVmX21lbW9yeSAobWVtKSkKLSAgICBtZW0gPSBnc3RfbWluaV9vYmplY3RfZ2V0X3FkYXRhIChHU1RfTUlOSV9PQkpFQ1QgKG1lbSksCi0gICAgICAgIEdTVF9WNEwyX01FTU9SWV9RVUFSSyk7Ci0KLSAgaWYgKG1lbSAmJiBnc3RfaXNfdjRsMl9tZW1vcnkgKG1lbSkpIHsKLSAgICBHc3RWNGwyTWVtb3J5ICp2bWVtID0gKEdzdFY0bDJNZW1vcnkgKikgbWVtOwotICAgIEdzdFY0bDJNZW1vcnlHcm91cCAqZ3JvdXAgPSB2bWVtLT5ncm91cDsKLSAgICBnaW50IGk7Ci0KLSAgICBpZiAoZ3JvdXAtPm5fbWVtICE9IGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZmZlcikpCi0gICAgICBnb3RvIGRvbmU7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspIHsKLSAgICAgIGlmIChncm91cC0+bWVtW2ldICE9IGdzdF9idWZmZXJfcGVla19tZW1vcnkgKGJ1ZmZlciwgaSkpCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgICAgaWYgKCFnc3RfbWVtb3J5X2lzX3dyaXRhYmxlIChncm91cC0+bWVtW2ldKSkKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIHZhbGlkID0gVFJVRTsKLSAgICBpZiAob3V0X2dyb3VwKQotICAgICAgKm91dF9ncm91cCA9IGdyb3VwOwotICB9Ci0KLWRvbmU6Ci0gIHJldHVybiB2YWxpZDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX2NvcHlfYnVmZmVyIChHc3RWNGwyQnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqIGRlc3QsCi0gICAgR3N0QnVmZmVyICogc3JjKQotewotICBjb25zdCBHc3RWaWRlb0Zvcm1hdEluZm8gKmZpbmZvID0gcG9vbC0+Y2Fwc19pbmZvLmZpbmZvOwotCi0gIEdTVF9MT0dfT0JKRUNUIChwb29sLCAiY29weWluZyBidWZmZXIiKTsKLQotICBpZiAoZmluZm8gJiYgKGZpbmZvLT5mb3JtYXQgIT0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOICYmCi0gICAgICAgICAgZmluZm8tPmZvcm1hdCAhPSBHU1RfVklERU9fRk9STUFUX0VOQ09ERUQpKSB7Ci0gICAgR3N0VmlkZW9GcmFtZSBzcmNfZnJhbWUsIGRlc3RfZnJhbWU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAiY29weSB2aWRlbyBmcmFtZSIpOwotCi0gICAgLyogd2UgaGF2ZSByYXcgdmlkZW8sIHVzZSB2aWRlb2ZyYW1lIGNvcHkgdG8gZ2V0IHN0cmlkZXMgcmlnaHQgKi8KLSAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZzcmNfZnJhbWUsICZwb29sLT5jYXBzX2luZm8sIHNyYywgR1NUX01BUF9SRUFEKSkKLSAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7Ci0KLSAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZkZXN0X2ZyYW1lLCAmcG9vbC0+Y2Fwc19pbmZvLCBkZXN0LAotICAgICAgICAgICAgR1NUX01BUF9XUklURSkpIHsKLSAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJnNyY19mcmFtZSk7Ci0gICAgICBnb3RvIGludmFsaWRfYnVmZmVyOwotICAgIH0KLQotICAgIGdzdF92aWRlb19mcmFtZV9jb3B5ICgmZGVzdF9mcmFtZSwgJnNyY19mcmFtZSk7Ci0KLSAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZzcmNfZnJhbWUpOwotICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmRlc3RfZnJhbWUpOwotICB9IGVsc2UgewotICAgIEdzdE1hcEluZm8gbWFwOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgImNvcHkgcmF3IGJ5dGVzIik7Ci0KLSAgICBpZiAoIWdzdF9idWZmZXJfbWFwIChzcmMsICZtYXAsIEdTVF9NQVBfUkVBRCkpCi0gICAgICBnb3RvIGludmFsaWRfYnVmZmVyOwotCi0gICAgZ3N0X2J1ZmZlcl9maWxsIChkZXN0LCAwLCBtYXAuZGF0YSwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoc3JjKSk7Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChzcmMsICZtYXApOwotICAgIGdzdF9idWZmZXJfcmVzaXplIChkZXN0LCAwLCBnc3RfYnVmZmVyX2dldF9zaXplIChzcmMpKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfY29weV9pbnRvIChkZXN0LCBzcmMsCi0gICAgICBHU1RfQlVGRkVSX0NPUFlfRkxBR1MgfCBHU1RfQlVGRkVSX0NPUFlfVElNRVNUQU1QUywgMCwgLTEpOwotCi0gIEdTVF9DQVRfTE9HX09CSkVDVCAoQ0FUX1BFUkZPUk1BTkNFLCBwb29sLCAic2xvdyBjb3B5IGludG8gYnVmZmVyICVwIiwgZGVzdCk7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi1pbnZhbGlkX2J1ZmZlcjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJjb3VsZCBub3QgbWFwIGJ1ZmZlciIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdHJ1Y3QgVXNlclB0ckRhdGEKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGdib29sZWFuIGlzX2ZyYW1lOwotICBHc3RWaWRlb0ZyYW1lIGZyYW1lOwotICBHc3RNYXBJbmZvIG1hcDsKLX07Ci0KLXN0YXRpYyBHUXVhcmsKLWdzdF92NGwyX2J1ZmZlcl9wb29sX2ltcG9ydF9xdWFyayAodm9pZCkKLXsKLSAgc3RhdGljIEdRdWFyayBxdWFyayA9IDA7Ci0KLSAgaWYgKHF1YXJrID09IDApCi0gICAgcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RyaW5nICgiR3N0VjRsMkJ1ZmZlclBvb2xVc2VQdHJEYXRhIik7Ci0KLSAgcmV0dXJuIHF1YXJrOwotfQotCi1zdGF0aWMgdm9pZAotX3VubWFwX3VzZXJwdHJfZnJhbWUgKHN0cnVjdCBVc2VyUHRyRGF0YSAqZGF0YSkKLXsKLSAgaWYgKGRhdGEtPmlzX2ZyYW1lKQotICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmRhdGEtPmZyYW1lKTsKLSAgZWxzZQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGRhdGEtPmJ1ZmZlciwgJmRhdGEtPm1hcCk7Ci0KLSAgaWYgKGRhdGEtPmJ1ZmZlcikKLSAgICBnc3RfYnVmZmVyX3VucmVmIChkYXRhLT5idWZmZXIpOwotCi0gIGdfc2xpY2VfZnJlZSAoc3RydWN0IFVzZXJQdHJEYXRhLCBkYXRhKTsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX2ltcG9ydF91c2VycHRyIChHc3RWNGwyQnVmZmVyUG9vbCAqIHBvb2wsCi0gICAgR3N0QnVmZmVyICogZGVzdCwgR3N0QnVmZmVyICogc3JjKQotewotICBHc3RGbG93UmV0dXJuIHJldCA9IEdTVF9GTE9XX09LOwotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwID0gTlVMTDsKLSAgR3N0TWFwRmxhZ3MgZmxhZ3M7Ci0gIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqZmluZm8gPSBwb29sLT5jYXBzX2luZm8uZmluZm87Ci0gIHN0cnVjdCBVc2VyUHRyRGF0YSAqZGF0YSA9IE5VTEw7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJpbXBvcnRpbmcgdXNlcnB0ciIpOwotCi0gIC8qIGdldCB0aGUgZ3JvdXAgKi8KLSAgaWYgKCFnc3RfdjRsMl9pc19idWZmZXJfdmFsaWQgKGRlc3QsICZncm91cCkpCi0gICAgZ290byBub3Rfb3VyX2J1ZmZlcjsKLQotICBpZiAoVjRMMl9UWVBFX0lTX09VVFBVVCAocG9vbC0+b2JqLT50eXBlKSkKLSAgICBmbGFncyA9IEdTVF9NQVBfUkVBRDsKLSAgZWxzZQotICAgIGZsYWdzID0gR1NUX01BUF9XUklURTsKLQotICBkYXRhID0gZ19zbGljZV9uZXcwIChzdHJ1Y3QgVXNlclB0ckRhdGEpOwotCi0gIGlmIChmaW5mbyAmJiAoZmluZm8tPmZvcm1hdCAhPSBHU1RfVklERU9fRk9STUFUX1VOS05PV04gJiYKLSAgICAgICAgICBmaW5mby0+Zm9ybWF0ICE9IEdTVF9WSURFT19GT1JNQVRfRU5DT0RFRCkpIHsKLSAgICBnc2l6ZSBzaXplW0dTVF9WSURFT19NQVhfUExBTkVTXSA9IHsgMCwgfTsKLSAgICBnaW50IGk7Ci0KLSAgICBkYXRhLT5pc19mcmFtZSA9IFRSVUU7Ci0KLSAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZkYXRhLT5mcmFtZSwgJnBvb2wtPmNhcHNfaW5mbywgc3JjLCBmbGFncykpCi0gICAgICBnb3RvIGludmFsaWRfYnVmZmVyOwotCi0gICAgZm9yIChpID0gMDsgaSA8IEdTVF9WSURFT19GT1JNQVRfSU5GT19OX1BMQU5FUyAoZmluZm8pOyBpKyspIHsKLSAgICAgIGlmIChHU1RfVklERU9fRk9STUFUX0lORk9fSVNfVElMRUQgKGZpbmZvKSkgewotICAgICAgICBnaW50IHRpbmZvID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoJmRhdGEtPmZyYW1lLCBpKTsKLSAgICAgICAgZ2ludCBwc3RyaWRlOwotICAgICAgICBndWludCBwaGVpZ2h0OwotCi0gICAgICAgIHBzdHJpZGUgPSBHU1RfVklERU9fVElMRV9YX1RJTEVTICh0aW5mbykgPDwKLSAgICAgICAgICAgIEdTVF9WSURFT19GT1JNQVRfSU5GT19USUxFX1dTIChmaW5mbyk7Ci0KLSAgICAgICAgcGhlaWdodCA9IEdTVF9WSURFT19USUxFX1lfVElMRVMgKHRpbmZvKSA8PAotICAgICAgICAgICAgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1RJTEVfSFMgKGZpbmZvKTsKLQotICAgICAgICBzaXplW2ldID0gcHN0cmlkZSAqIHBoZWlnaHQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzaXplW2ldID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSAoJmRhdGEtPmZyYW1lLCBpKSAqCi0gICAgICAgICAgICBHU1RfVklERU9fRlJBTUVfQ09NUF9IRUlHSFQgKCZkYXRhLT5mcmFtZSwgaSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogSW4gdGhlIHNpbmdsZSBwbGFuYXIgQVBJLCBwbGFuZXMgbXVzdCBiZSBjb250aWd1b3VzIGluIG1lbW9yeSBhbmQKLSAgICAgKiB0aGVyZWZvcmUgdGhleSBtdXN0IGhhdmUgZXhwZWN0ZWQgc2l6ZS4gaWU6IG5vIHBhZGRpbmcuCi0gICAgICogVG8gY2hlY2sgdGhlc2UgY29uZGl0aW9ucywgd2UgY2hlY2sgdGhhdCBwbGFuZSAnaScgc3RhcnQgYWRkcmVzcwotICAgICAqICsgcGxhbmUgJ2knIHNpemUgZXF1YWxzIHRvIHBsYW5lICdpKzEnIHN0YXJ0IGFkZHJlc3MgKi8KLSAgICBpZiAoIVY0TDJfVFlQRV9JU19NVUxUSVBMQU5BUiAocG9vbC0+b2JqLT50eXBlKSkgewotICAgICAgZm9yIChpID0gMDsgaSA8IChHU1RfVklERU9fRk9STUFUX0lORk9fTl9QTEFORVMgKGZpbmZvKSAtIDEpOyBpKyspIHsKLSAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4X2ZtdCA9ICZwb29sLT5vYmotPmZvcm1hdC5mbXQucGl4OwotICAgICAgICBncG9pbnRlciB0bXA7Ci0gICAgICAgIGdpbnQgZXN0cmlkZSA9IGdzdF92NGwyX29iamVjdF9leHRyYXBvbGF0ZV9zdHJpZGUgKGZpbmZvLCBpLAotICAgICAgICAgICAgcGl4X2ZtdC0+Ynl0ZXNwZXJsaW5lKTsKLSAgICAgICAgZ3VpbnQgZWhlaWdodCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGZpbmZvLCBpLAotICAgICAgICAgICAgcGl4X2ZtdC0+aGVpZ2h0KTsKLQotICAgICAgICB0bXAgPSAoKGd1aW50OCAqKSBkYXRhLT5mcmFtZS5kYXRhW2ldKSArIGVzdHJpZGUgKiBlaGVpZ2h0OwotICAgICAgICBpZiAodG1wICE9IGRhdGEtPmZyYW1lLmRhdGFbaSArIDFdKQotICAgICAgICAgIGdvdG8gbm9uX2NvbnRpZ3VvdXNfbWVtOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghZ3N0X3Y0bDJfYWxsb2NhdG9yX2ltcG9ydF91c2VycHRyIChwb29sLT52YWxsb2NhdG9yLCBncm91cCwKLSAgICAgICAgICAgIGRhdGEtPmZyYW1lLmluZm8uc2l6ZSwgZmluZm8tPm5fcGxhbmVzLCBkYXRhLT5mcmFtZS5kYXRhLCBzaXplKSkKLSAgICAgIGdvdG8gaW1wb3J0X2ZhaWxlZDsKLSAgfSBlbHNlIHsKLSAgICBncG9pbnRlciBwdHJbMV07Ci0gICAgZ3NpemUgc2l6ZVsxXTsKLQotICAgIGRhdGEtPmlzX2ZyYW1lID0gRkFMU0U7Ci0KLSAgICBpZiAoIWdzdF9idWZmZXJfbWFwIChzcmMsICZkYXRhLT5tYXAsIGZsYWdzKSkKLSAgICAgIGdvdG8gaW52YWxpZF9idWZmZXI7Ci0KLSAgICBwdHJbMF0gPSBkYXRhLT5tYXAuZGF0YTsKLSAgICBzaXplWzBdID0gZGF0YS0+bWFwLnNpemU7Ci0KLSAgICBpZiAoIWdzdF92NGwyX2FsbG9jYXRvcl9pbXBvcnRfdXNlcnB0ciAocG9vbC0+dmFsbG9jYXRvciwgZ3JvdXAsCi0gICAgICAgICAgICBkYXRhLT5tYXAuc2l6ZSwgMSwgcHRyLCBzaXplKSkKLSAgICAgIGdvdG8gaW1wb3J0X2ZhaWxlZDsKLSAgfQotCi0gIGRhdGEtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChzcmMpOwotCi0gIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEgKEdTVF9NSU5JX09CSkVDVCAoZGVzdCksIEdTVF9WNEwyX0lNUE9SVF9RVUFSSywKLSAgICAgIGRhdGEsIChHRGVzdHJveU5vdGlmeSkgX3VubWFwX3VzZXJwdHJfZnJhbWUpOwotCi0gIHJldHVybiByZXQ7Ci0KLW5vdF9vdXJfYnVmZmVyOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImRlc3RpbmF0aW9uIGJ1ZmZlciBpbnZhbGlkIG9yIG5vdCBmcm9tIG91ciBwb29sIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1pbnZhbGlkX2J1ZmZlcjoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJjb3VsZCBub3QgbWFwIGJ1ZmZlciIpOwotICAgIGdfc2xpY2VfZnJlZSAoc3RydWN0IFVzZXJQdHJEYXRhLCBkYXRhKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLW5vbl9jb250aWd1b3VzX21lbToKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJtZW1vcnkgaXMgbm90IGNvbnRpZ3VvdXMgb3IgcGxhbmUgc2l6ZSBtaXNtYXRjaCIpOwotICAgIF91bm1hcF91c2VycHRyX2ZyYW1lIChkYXRhKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLWltcG9ydF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAiZmFpbGVkIHRvIGltcG9ydCBkYXRhIik7Ci0gICAgX3VubWFwX3VzZXJwdHJfZnJhbWUgKGRhdGEpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfaW1wb3J0X2RtYWJ1ZiAoR3N0VjRsMkJ1ZmZlclBvb2wgKiBwb29sLAotICAgIEdzdEJ1ZmZlciAqIGRlc3QsIEdzdEJ1ZmZlciAqIHNyYykKLXsKLSAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cCA9IE5VTEw7Ci0gIEdzdE1lbW9yeSAqZG1hX21lbVtHU1RfVklERU9fTUFYX1BMQU5FU10gPSB7IDAgfTsKLSAgZ3VpbnQgbl9tZW0gPSBnc3RfYnVmZmVyX25fbWVtb3J5IChzcmMpOwotICBnaW50IGk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJpbXBvcnRpbmcgZG1hYnVmIik7Ci0KLSAgaWYgKCFnc3RfdjRsMl9pc19idWZmZXJfdmFsaWQgKGRlc3QsICZncm91cCkpCi0gICAgZ290byBub3Rfb3VyX2J1ZmZlcjsKLQotICBpZiAobl9tZW0gPiBHU1RfVklERU9fTUFYX1BMQU5FUykKLSAgICBnb3RvIHRvb19tYW55X21lbXM7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5fbWVtOyBpKyspCi0gICAgZG1hX21lbVtpXSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkgKHNyYywgaSk7Ci0KLSAgaWYgKCFnc3RfdjRsMl9hbGxvY2F0b3JfaW1wb3J0X2RtYWJ1ZiAocG9vbC0+dmFsbG9jYXRvciwgZ3JvdXAsIG5fbWVtLAotICAgICAgICAgIGRtYV9tZW0pKQotICAgIGdvdG8gaW1wb3J0X2ZhaWxlZDsKLQotICBnc3RfbWluaV9vYmplY3Rfc2V0X3FkYXRhIChHU1RfTUlOSV9PQkpFQ1QgKGRlc3QpLCBHU1RfVjRMMl9JTVBPUlRfUVVBUkssCi0gICAgICBnc3RfYnVmZmVyX3JlZiAoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3RfYnVmZmVyX3VucmVmKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLW5vdF9vdXJfYnVmZmVyOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImRlc3RpbmF0aW9uIGJ1ZmZlciBpbnZhbGlkIG9yIG5vdCBmcm9tIG91ciBwb29sIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci10b29fbWFueV9tZW1zOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImNvdWxkIG5vdCBtYXAgYnVmZmVyIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1pbXBvcnRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImZhaWxlZCB0byBpbXBvcnQgZG1hYnVmIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9wcmVwYXJlX2J1ZmZlciAoR3N0VjRsMkJ1ZmZlclBvb2wgKiBwb29sLAotICAgIEdzdEJ1ZmZlciAqIGRlc3QsIEdzdEJ1ZmZlciAqIHNyYykKLXsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gb3duX3NyYyA9IEZBTFNFOwotCi0gIGlmIChzcmMgPT0gTlVMTCkgewotICAgIGlmIChwb29sLT5vdGhlcl9wb29sID09IE5VTEwpIHsKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJjYW4ndCBwcmVwYXJlIGJ1ZmZlciwgc291cmNlIGJ1ZmZlciBtaXNzaW5nIik7Ci0gICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfQotCi0gICAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLT5vdGhlcl9wb29sLCAmc3JjLCBOVUxMKTsKLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKSB7Ci0gICAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAiZmFpbGVkIHRvIGFjcXVpcmUgYnVmZmVyIGZyb20gZG93bnN0cmVhbSBwb29sIik7Ci0gICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgb3duX3NyYyA9IFRSVUU7Ci0gIH0KLQotICBzd2l0Y2ggKHBvb2wtPm9iai0+bW9kZSkgewotICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICBjYXNlIEdTVF9WNEwyX0lPX0RNQUJVRjoKLSAgICAgIHJldCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX2NvcHlfYnVmZmVyIChwb29sLCBkZXN0LCBzcmMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19VU0VSUFRSOgotICAgICAgcmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfaW1wb3J0X3VzZXJwdHIgKHBvb2wsIGRlc3QsIHNyYyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WNEwyX0lPX0RNQUJVRl9JTVBPUlQ6Ci0gICAgICByZXQgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9pbXBvcnRfZG1hYnVmIChwb29sLCBkZXN0LCBzcmMpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKG93bl9zcmMpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoc3JjKTsKLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX2FsbG9jX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIGJwb29sLCBHc3RCdWZmZXIgKiogYnVmZmVyLAotICAgIEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zICogcGFyYW1zKQotewotICBHc3RWNGwyQnVmZmVyUG9vbCAqcG9vbCA9IEdTVF9WNEwyX0JVRkZFUl9QT09MIChicG9vbCk7Ci0gIEdzdFY0bDJNZW1vcnlHcm91cCAqZ3JvdXAgPSBOVUxMOwotICBHc3RCdWZmZXIgKm5ld2J1ZiA9IE5VTEw7Ci0gIEdzdFY0bDJPYmplY3QgKm9iajsKLSAgR3N0VmlkZW9JbmZvICppbmZvOwotCi0gIG9iaiA9IHBvb2wtPm9iajsKLSAgaW5mbyA9ICZvYmotPmluZm87Ci0KLSAgc3dpdGNoIChvYmotPm1vZGUpIHsKLSAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgbmV3YnVmID0KLSAgICAgICAgICBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAocG9vbC0+YWxsb2NhdG9yLCBwb29sLT5zaXplLCAmcG9vbC0+cGFyYW1zKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICAgIGdyb3VwID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX2FsbG9jX21tYXAgKHBvb2wtPnZhbGxvY2F0b3IpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgICBncm91cCA9IGdzdF92NGwyX2FsbG9jYXRvcl9hbGxvY19kbWFidWYgKHBvb2wtPnZhbGxvY2F0b3IsCi0gICAgICAgICAgcG9vbC0+YWxsb2NhdG9yKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1Y0TDJfSU9fVVNFUlBUUjoKLSAgICAgIGdyb3VwID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX2FsbG9jX3VzZXJwdHIgKHBvb2wtPnZhbGxvY2F0b3IpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUZfSU1QT1JUOgotICAgICAgZ3JvdXAgPSBnc3RfdjRsMl9hbGxvY2F0b3JfYWxsb2NfZG1hYnVmaW4gKHBvb2wtPnZhbGxvY2F0b3IpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIG5ld2J1ZiA9IE5VTEw7Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKGdyb3VwICE9IE5VTEwpIHsKLSAgICBnaW50IGk7Ci0gICAgbmV3YnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm5fbWVtOyBpKyspCi0gICAgICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKG5ld2J1ZiwgZ3JvdXAtPm1lbVtpXSk7Ci0gIH0gZWxzZSBpZiAobmV3YnVmID09IE5VTEwpIHsKLSAgICBnb3RvIGFsbG9jYXRpb25fZmFpbGVkOwotICB9Ci0KLSAgLyogYWRkIG1ldGFkYXRhIHRvIHJhdyB2aWRlbyBidWZmZXJzICovCi0gIGlmIChwb29sLT5hZGRfdmlkZW9tZXRhKQotICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX21ldGFfZnVsbCAobmV3YnVmLCBHU1RfVklERU9fRlJBTUVfRkxBR19OT05FLAotICAgICAgICBHU1RfVklERU9fSU5GT19GT1JNQVQgKGluZm8pLCBHU1RfVklERU9fSU5GT19XSURUSCAoaW5mbyksCi0gICAgICAgIEdTVF9WSURFT19JTkZPX0hFSUdIVCAoaW5mbyksIEdTVF9WSURFT19JTkZPX05fUExBTkVTIChpbmZvKSwKLSAgICAgICAgaW5mby0+b2Zmc2V0LCBpbmZvLT5zdHJpZGUpOwotCi0gICpidWZmZXIgPSBuZXdidWY7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotCi0gIC8qIEVSUk9SUyAqLwotYWxsb2NhdGlvbl9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAiZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciIpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBicG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQotewotICBHc3RWNGwyQnVmZmVyUG9vbCAqcG9vbCA9IEdTVF9WNEwyX0JVRkZFUl9QT09MIChicG9vbCk7Ci0gIEdzdFY0bDJPYmplY3QgKm9iaiA9IHBvb2wtPm9iajsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQgc2l6ZSwgbWluX2J1ZmZlcnMsIG1heF9idWZmZXJzOwotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0gIGdib29sZWFuIGNhbl9hbGxvY2F0ZSA9IEZBTFNFOwotICBnYm9vbGVhbiB1cGRhdGVkID0gRkFMU0U7Ci0gIGdib29sZWFuIHJldDsKLQotICBwb29sLT5hZGRfdmlkZW9tZXRhID0KLSAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfaGFzX29wdGlvbiAoY29uZmlnLAotICAgICAgR1NUX0JVRkZFUl9QT09MX09QVElPTl9WSURFT19NRVRBKTsKLQotICAvKiBwYXJzZSB0aGUgY29uZmlnIGFuZCBrZWVwIGFyb3VuZCAqLwotICBpZiAoIWdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3BhcmFtcyAoY29uZmlnLCAmY2FwcywgJnNpemUsICZtaW5fYnVmZmVycywKLSAgICAgICAgICAmbWF4X2J1ZmZlcnMpKQotICAgIGdvdG8gd3JvbmdfY29uZmlnOwotCi0gIGlmICghZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfYWxsb2NhdG9yIChjb25maWcsICZhbGxvY2F0b3IsICZwYXJhbXMpKQotICAgIGdvdG8gd3JvbmdfY29uZmlnOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJjb25maWcgJSIgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7Ci0KLSAgaWYgKHBvb2wtPmFsbG9jYXRvcikKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sLT5hbGxvY2F0b3IpOwotICBwb29sLT5hbGxvY2F0b3IgPSBOVUxMOwotCi0gIHN3aXRjaCAob2JqLT5tb2RlKSB7Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgICBwb29sLT5hbGxvY2F0b3IgPSBnc3RfZG1hYnVmX2FsbG9jYXRvcl9uZXcgKCk7Ci0gICAgICBjYW5fYWxsb2NhdGUgPSBHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX0FMTE9DQVRFIChwb29sLT52YWxsb2NhdG9yLCBNTUFQKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICAgIGNhbl9hbGxvY2F0ZSA9IEdTVF9WNEwyX0FMTE9DQVRPUl9DQU5fQUxMT0NBVEUgKHBvb2wtPnZhbGxvY2F0b3IsIE1NQVApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19VU0VSUFRSOgotICAgICAgY2FuX2FsbG9jYXRlID0KLSAgICAgICAgICBHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX0FMTE9DQVRFIChwb29sLT52YWxsb2NhdG9yLCBVU0VSUFRSKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGX0lNUE9SVDoKLSAgICAgIGNhbl9hbGxvY2F0ZSA9IEdTVF9WNEwyX0FMTE9DQVRPUl9DQU5fQUxMT0NBVEUgKHBvb2wtPnZhbGxvY2F0b3IsIERNQUJVRik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgaWYgKGFsbG9jYXRvcikKLSAgICAgICAgcG9vbC0+YWxsb2NhdG9yID0gZ19vYmplY3RfcmVmIChhbGxvY2F0b3IpOwotICAgICAgcG9vbC0+cGFyYW1zID0gcGFyYW1zOwotICAgICAgLyogTm8gbmVlZCB0byBjaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gKi8KLSAgICAgIGdvdG8gZG9uZTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogbGlidjRsMiBjb252ZXJzaW9uIGNvZGUgZG9lcyBub3QgaGFuZGxlIENSRUFURV9CVUZTLCBhbmQgbWF5IGxlYWQgdG8KLSAgICogaW5zdGFiaWxpdHkgYW5kIGNyYXNoLCBkaXNhYmxlIGl0IGZvciBub3cgKi8KLSAgaWYgKGNhbl9hbGxvY2F0ZSAmJiBvYmotPmZtdGRlc2MtPmZsYWdzICYgVjRMMl9GTVRfRkxBR19FTVVMQVRFRCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwKLSAgICAgICAgImxpYnY0bDIgY29udmVydGVyIGRldGVjdGVkLCBkaXNhYmxpbmcgQ1JFQVRFX0JVRlMiKTsKLSAgICBjYW5fYWxsb2NhdGUgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX0ZMQUdfVU5TRVQgKHBvb2wtPnZhbGxvY2F0b3IsCi0gICAgICAgIEdTVF9WNEwyX0FMTE9DQVRPUl9GTEFHX01NQVBfQ1JFQVRFX0JVRlMKLSAgICAgICAgfCBHU1RfVjRMMl9BTExPQ0FUT1JfRkxBR19VU0VSUFRSX0NSRUFURV9CVUZTCi0gICAgICAgIHwgR1NUX1Y0TDJfQUxMT0NBVE9SX0ZMQUdfRE1BQlVGX0NSRUFURV9CVUZTKTsKLSAgfQotCi0gIGlmIChtaW5fYnVmZmVycyA8IEdTVF9WNEwyX01JTl9CVUZGRVJTKSB7Ci0gICAgdXBkYXRlZCA9IFRSVUU7Ci0gICAgbWluX2J1ZmZlcnMgPSBHU1RfVjRMMl9NSU5fQlVGRkVSUzsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHBvb2wsICJpbmNyZWFzaW5nIG1pbmltdW0gYnVmZmVycyB0byAldSIsIG1pbl9idWZmZXJzKTsKLSAgfQotCi0gIC8qIHJlc3BlY3QgZHJpdmVyIHJlcXVpcmVtZW50cyAqLwotICBpZiAobWluX2J1ZmZlcnMgPCBvYmotPm1pbl9idWZmZXJzKSB7Ci0gICAgdXBkYXRlZCA9IFRSVUU7Ci0gICAgbWluX2J1ZmZlcnMgPSBvYmotPm1pbl9idWZmZXJzOwotICAgIEdTVF9JTkZPX09CSkVDVCAocG9vbCwgImluY3JlYXNpbmcgbWluaW11bSBidWZmZXJzIHRvICV1IiwgbWluX2J1ZmZlcnMpOwotICB9Ci0KLSAgaWYgKG1heF9idWZmZXJzID4gVklERU9fTUFYX0ZSQU1FIHx8IG1heF9idWZmZXJzID09IDApIHsKLSAgICB1cGRhdGVkID0gVFJVRTsKLSAgICBtYXhfYnVmZmVycyA9IFZJREVPX01BWF9GUkFNRTsKLSAgICBHU1RfSU5GT19PQkpFQ1QgKHBvb2wsICJyZWR1Y2luZyBtYXhpbXVtIGJ1ZmZlcnMgdG8gJXUiLCBtYXhfYnVmZmVycyk7Ci0gIH0KLQotICBpZiAobWluX2J1ZmZlcnMgPiBtYXhfYnVmZmVycykgewotICAgIHVwZGF0ZWQgPSBUUlVFOwotICAgIG1pbl9idWZmZXJzID0gbWF4X2J1ZmZlcnM7Ci0gICAgR1NUX0lORk9fT0JKRUNUIChwb29sLCAicmVkdWNpbmcgbWluaW11bSBidWZmZXJzIHRvICV1IiwgbWluX2J1ZmZlcnMpOwotICB9IGVsc2UgaWYgKG1pbl9idWZmZXJzICE9IG1heF9idWZmZXJzKSB7Ci0gICAgaWYgKCFjYW5fYWxsb2NhdGUpIHsKLSAgICAgIHVwZGF0ZWQgPSBUUlVFOwotICAgICAgbWF4X2J1ZmZlcnMgPSBtaW5fYnVmZmVyczsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAocG9vbCwgImNhbid0IGFsbG9jYXRlLCBzZXR0aW5nIG1heGltdW0gdG8gbWluaW11bSIpOwotICAgIH0KLSAgfQotCi0gIGlmICghcG9vbC0+YWRkX3ZpZGVvbWV0YSAmJiBvYmotPm5lZWRfdmlkZW9fbWV0YSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAocG9vbCwgImFkZGluZyBuZWVkZWQgdmlkZW8gbWV0YSIpOwotICAgIHVwZGF0ZWQgPSBUUlVFOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICB9Ci0KLSAgLyogQWx3YXlzIHVwZGF0ZSB0aGUgY29uZmlnIHRvIGVuc3VyZSB0aGUgY29uZmlndXJlZCBzaXplIG1hdGNoZXMgKi8KLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIGNhcHMsIG9iai0+aW5mby5zaXplLCBtaW5fYnVmZmVycywKLSAgICAgIG1heF9idWZmZXJzKTsKLQotICAvKiBrZWVwIGEgR3N0VmlkZW9JbmZvIHdpdGggZGVmYXVsdHMgZm9yIHRoZSB3aGVuIHdlIG5lZWQgdG8gY29weSAqLwotICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZwb29sLT5jYXBzX2luZm8sIGNhcHMpOwotCi1kb25lOgotICByZXQgPSBHU1RfQlVGRkVSX1BPT0xfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNldF9jb25maWcgKGJwb29sLCBjb25maWcpOwotCi0gIC8qIElmIGFueXRoaW5nIHdhcyBjaGFuZ2VkIGRvY3VtZW50YXRpb24gcmVjb21tYW5kIHRvIHJldHVybiBGQUxTRSAqLwotICByZXR1cm4gIXVwZGF0ZWQgJiYgcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfY29uZmlnOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImludmFsaWQgY29uZmlnICUiIEdTVF9QVFJfRk9STUFULCBjb25maWcpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX3N0cmVhbW9uIChHc3RWNGwyQnVmZmVyUG9vbCAqIHBvb2wpCi17Ci0gIEdzdFY0bDJPYmplY3QgKm9iaiA9IHBvb2wtPm9iajsKLQotICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICBjYXNlIEdTVF9WNEwyX0lPX1VTRVJQVFI6Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUZfSU1QT1JUOgotICAgICAgaWYgKCFwb29sLT5zdHJlYW1pbmcpIHsKLSAgICAgICAgaWYgKHY0bDJfaW9jdGwgKHBvb2wtPnZpZGVvX2ZkLCBWSURJT0NfU1RSRUFNT04sICZvYmotPnR5cGUpIDwgMCkKLSAgICAgICAgICBnb3RvIHN0cmVhbW9uX2ZhaWxlZDsKLQotICAgICAgICBwb29sLT5zdHJlYW1pbmcgPSBUUlVFOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJTdGFydGVkIHN0cmVhbWluZyIpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLXN0cmVhbW9uX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJlcnJvciB3aXRoIFNUUkVBTU9OICVkICglcykiLCBlcnJubywKLSAgICAgICAgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2J1ZmZlcl9wb29sX3N0cmVhbW9mZiAoR3N0VjRsMkJ1ZmZlclBvb2wgKiBwb29sKQotewotICBHc3RWNGwyT2JqZWN0ICpvYmogPSBwb29sLT5vYmo7Ci0KLSAgc3dpdGNoIChvYmotPm1vZGUpIHsKLSAgICBjYXNlIEdTVF9WNEwyX0lPX01NQVA6Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19VU0VSUFRSOgotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGOgotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGX0lNUE9SVDoKLSAgICAgIGlmIChwb29sLT5zdHJlYW1pbmcpIHsKLSAgICAgICAgaWYgKHY0bDJfaW9jdGwgKHBvb2wtPnZpZGVvX2ZkLCBWSURJT0NfU1RSRUFNT0ZGLCAmb2JqLT50eXBlKSA8IDApCi0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiU1RSRUFNT0ZGIGZhaWxlZCB3aXRoIGVycm5vICVkICglcykiLAotICAgICAgICAgICAgICBlcnJubywgZ19zdHJlcnJvciAoZXJybm8pKTsKLQotICAgICAgICBwb29sLT5zdHJlYW1pbmcgPSBGQUxTRTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAiU3RvcHBlZCBzdHJlYW1pbmciKTsKLQotICAgICAgICBpZiAocG9vbC0+dmFsbG9jYXRvcikKLSAgICAgICAgICBnc3RfdjRsMl9hbGxvY2F0b3JfZmx1c2ggKHBvb2wtPnZhbGxvY2F0b3IpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9yZXN1cmVjdF9idWZmZXIgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCkKLXsKLSAgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgcGFyYW1zID0geyAwIH07Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKLSAgR3N0Rmxvd1JldHVybiByZXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgIkEgYnVmZmVyIHdhcyBsb3N0LCByZWFsbG9jYXRpbmcgaXQiKTsKLQotICBwYXJhbXMuZmxhZ3MgPQotICAgICAgKEdzdEJ1ZmZlclBvb2xBY3F1aXJlRmxhZ3MpIEdTVF9WNEwyX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19SRVNVUlJFQ1QgfAotICAgICAgR1NUX0JVRkZFUl9QT09MX0FDUVVJUkVfRkxBR19ET05UV0FJVDsKLSAgcmV0ID0KLSAgICAgIGdzdF9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoR1NUX0JVRkZFUl9QT09MIChwb29sKSwgJmJ1ZmZlciwgJnBhcmFtcyk7Ci0KLSAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc3RhcnQgKEdzdEJ1ZmZlclBvb2wgKiBicG9vbCkKLXsKLSAgR3N0VjRsMkJ1ZmZlclBvb2wgKnBvb2wgPSBHU1RfVjRMMl9CVUZGRVJfUE9PTCAoYnBvb2wpOwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9DTEFTUyAocGFyZW50X2NsYXNzKTsKLSAgR3N0VjRsMk9iamVjdCAqb2JqID0gcG9vbC0+b2JqOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQgc2l6ZSwgbWluX2J1ZmZlcnMsIG1heF9idWZmZXJzOwotICBndWludCBtYXhfbGF0ZW5jeSwgbWluX2xhdGVuY3ksIGNvcHlfdGhyZXNob2xkID0gMDsKLSAgZ2Jvb2xlYW4gY2FuX2FsbG9jYXRlID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgImFjdGl2YXRpbmcgcG9vbCIpOwotCi0gIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChicG9vbCk7Ci0gIGlmICghZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfcGFyYW1zIChjb25maWcsICZjYXBzLCAmc2l6ZSwgJm1pbl9idWZmZXJzLAotICAgICAgICAgICZtYXhfYnVmZmVycykpCi0gICAgZ290byB3cm9uZ19jb25maWc7Ci0KLSAgbWluX2xhdGVuY3kgPSBNQVggKEdTVF9WNEwyX01JTl9CVUZGRVJTLCBvYmotPm1pbl9idWZmZXJzKTsKLQotICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgIGNhc2UgR1NUX1Y0TDJfSU9fUlc6Ci0gICAgICBjYW5fYWxsb2NhdGUgPSBUUlVFOwotI2lmZGVmIEhBVkVfTElCVjRMMgotICAgICAgLyogVGhpcyB3b3JrYXJvdW5kIGEgdW5maXhhYmxlIGJ1ZyBpbiBsaWJ2NGwyIHdoZW4gUlcgaXMgZW11bGF0ZWQgb24gdG9wCi0gICAgICAgKiBvZiBNTUFQLiBJbiB0aGlzIGNhc2UsIHRoZSBmaXJzdCByZWFkIGluaXRpYWxpemUgdGhlIHF1ZXVlcywgYnV0IHRoZQotICAgICAgICogcG9sbCBiZWZvcmUgdGhhdCB3aWxsIGFsd2F5cyBmYWlsLiBEb2luZyBhbiBlbXB0eSByZWFkLCBmb3JjZXMgdGhlCi0gICAgICAgKiBxdWV1ZSB0byBiZSBpbml0aWFsaXplZCBub3cuIFdlIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgc3RyZWFtaW5nCi0gICAgICAgKiBkcml2ZXIuICovCi0gICAgICBpZiAob2JqLT5kZXZpY2VfY2FwcyAmIFY0TDJfQ0FQX1NUUkVBTUlORykKLSAgICAgICAgdjRsMl9yZWFkIChvYmotPnZpZGVvX2ZkLCBOVUxMLCAwKTsKLSNlbmRpZgotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19NTUFQOgotICAgIHsKLSAgICAgIGd1aW50IGNvdW50OwotCi0gICAgICBjYW5fYWxsb2NhdGUgPSBHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX0FMTE9DQVRFIChwb29sLT52YWxsb2NhdG9yLCBNTUFQKTsKLQotICAgICAgLyogZmlyc3QsIGxldHMgcmVxdWVzdCBidWZmZXJzLCBhbmQgc2VlIGhvdyBtYW55IHdlIGNhbiBnZXQ6ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChwb29sLCAicmVxdWVzdGluZyAlZCBNTUFQIGJ1ZmZlcnMiLCBtaW5fYnVmZmVycyk7Ci0KLSAgICAgIGNvdW50ID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX3N0YXJ0IChwb29sLT52YWxsb2NhdG9yLCBtaW5fYnVmZmVycywKLSAgICAgICAgICBWNEwyX01FTU9SWV9NTUFQKTsKLQotICAgICAgaWYgKGNvdW50IDwgR1NUX1Y0TDJfTUlOX0JVRkZFUlMpIHsKLSAgICAgICAgbWluX2J1ZmZlcnMgPSBjb3VudDsKLSAgICAgICAgZ290byBub19idWZmZXJzOwotICAgICAgfQotCi0gICAgICAvKiBWNEwyIGJ1ZmZlciBwb29sIGFyZSBvZnRlbiB2ZXJ5IGxpbWl0ZWQgaW4gdGhlIGFtb3VudCBvZiBidWZmZXJzIGl0Ci0gICAgICAgKiBjYW4gb2ZmZXIuIFRoZSBjb3B5X3RocmVzaG9sZCB3aWxsIHdvcmthcm91bmQgdGhpcyBsaW1pdGF0aW9uIGJ5Ci0gICAgICAgKiBmYWxsaW5nIGJhY2sgdG8gY29weSBpZiB0aGUgcGlwZWxpbmUgbmVlZGVkIG1vcmUgYnVmZmVycy4gVGhpcyBhbHNvCi0gICAgICAgKiBwcmV2ZW50IGhhdmluZyB0byBkbyBSRVFCVUZTKE4pL1JFUUJVRlMoMCkgZXZlcnl0aW1lIGNvbmZpZ3VyZSBpcwotICAgICAgICogY2FsbGVkLiAqLwotICAgICAgaWYgKGNvdW50ICE9IG1pbl9idWZmZXJzIHx8IHBvb2wtPmVuYWJsZV9jb3B5X3RocmVzaG9sZCkgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsCi0gICAgICAgICAgICAiVW5jZXJ0YWluIG9yIG5vdCBlbm91Z2ggYnVmZmVycywgZW5hYmxpbmcgY29weSB0aHJlc2hvbGQiKTsKLSAgICAgICAgbWluX2J1ZmZlcnMgPSBjb3VudDsKLSAgICAgICAgY29weV90aHJlc2hvbGQgPSBtaW5fbGF0ZW5jeTsKLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1Y0TDJfSU9fVVNFUlBUUjoKLSAgICB7Ci0gICAgICBndWludCBjb3VudDsKLQotICAgICAgY2FuX2FsbG9jYXRlID0KLSAgICAgICAgICBHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX0FMTE9DQVRFIChwb29sLT52YWxsb2NhdG9yLCBVU0VSUFRSKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInJlcXVlc3RpbmcgJWQgVVNFUlBUUiBidWZmZXJzIiwgbWluX2J1ZmZlcnMpOwotCi0gICAgICBjb3VudCA9IGdzdF92NGwyX2FsbG9jYXRvcl9zdGFydCAocG9vbC0+dmFsbG9jYXRvciwgbWluX2J1ZmZlcnMsCi0gICAgICAgICAgVjRMMl9NRU1PUllfVVNFUlBUUik7Ci0KLSAgICAgIC8qIFRoZXJlIGlzIG5vIHJhdGlvbmFsIHRvIG5vdCBnZXQgd2hhdCB3ZSBhc2tlZCAqLwotICAgICAgaWYgKGNvdW50IDwgbWluX2J1ZmZlcnMpIHsKLSAgICAgICAgbWluX2J1ZmZlcnMgPSBjb3VudDsKLSAgICAgICAgZ290byBub19idWZmZXJzOwotICAgICAgfQotCi0gICAgICBtaW5fYnVmZmVycyA9IGNvdW50OwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGX0lNUE9SVDoKLSAgICB7Ci0gICAgICBndWludCBjb3VudDsKLQotICAgICAgY2FuX2FsbG9jYXRlID0gR1NUX1Y0TDJfQUxMT0NBVE9SX0NBTl9BTExPQ0FURSAocG9vbC0+dmFsbG9jYXRvciwgRE1BQlVGKTsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInJlcXVlc3RpbmcgJWQgRE1BQlVGIGJ1ZmZlcnMiLCBtaW5fYnVmZmVycyk7Ci0KLSAgICAgIGNvdW50ID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX3N0YXJ0IChwb29sLT52YWxsb2NhdG9yLCBtaW5fYnVmZmVycywKLSAgICAgICAgICBWNEwyX01FTU9SWV9ETUFCVUYpOwotCi0gICAgICAvKiBUaGVyZSBpcyBubyByYXRpb25hbCB0byBub3QgZ2V0IHdoYXQgd2UgYXNrZWQgKi8KLSAgICAgIGlmIChjb3VudCA8IG1pbl9idWZmZXJzKSB7Ci0gICAgICAgIG1pbl9idWZmZXJzID0gY291bnQ7Ci0gICAgICAgIGdvdG8gbm9fYnVmZmVyczsKLSAgICAgIH0KLQotICAgICAgbWluX2J1ZmZlcnMgPSBjb3VudDsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgbWluX2J1ZmZlcnMgPSAwOwotICAgICAgY29weV90aHJlc2hvbGQgPSAwOwotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmIChjYW5fYWxsb2NhdGUpCi0gICAgbWF4X2xhdGVuY3kgPSBtYXhfYnVmZmVyczsKLSAgZWxzZQotICAgIG1heF9sYXRlbmN5ID0gbWluX2J1ZmZlcnM7Ci0KLSAgcG9vbC0+c2l6ZSA9IHNpemU7Ci0gIHBvb2wtPmNvcHlfdGhyZXNob2xkID0gY29weV90aHJlc2hvbGQ7Ci0gIHBvb2wtPm1heF9sYXRlbmN5ID0gbWF4X2xhdGVuY3k7Ci0gIHBvb2wtPm1pbl9sYXRlbmN5ID0gbWluX2xhdGVuY3k7Ci0gIHBvb2wtPm51bV9xdWV1ZWQgPSAwOwotCi0gIGlmIChtYXhfYnVmZmVycyAhPSAwICYmIG1heF9idWZmZXJzIDwgbWluX2J1ZmZlcnMpCi0gICAgbWF4X2J1ZmZlcnMgPSBtaW5fYnVmZmVyczsKLQotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgY2Fwcywgc2l6ZSwgbWluX2J1ZmZlcnMsCi0gICAgICBtYXhfYnVmZmVycyk7Ci0gIHBjbGFzcy0+c2V0X2NvbmZpZyAoYnBvb2wsIGNvbmZpZyk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoY29uZmlnKTsKLQotICBpZiAocG9vbC0+b3RoZXJfcG9vbCkKLSAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9zZXRfYWN0aXZlIChwb29sLT5vdGhlcl9wb29sLCBUUlVFKSkKLSAgICAgIGdvdG8gb3RoZXJfcG9vbF9mYWlsZWQ7Ci0KLSAgLyogbm93LCBhbGxvY2F0ZSB0aGUgYnVmZmVyczogKi8KLSAgaWYgKCFwY2xhc3MtPnN0YXJ0IChicG9vbCkpCi0gICAgZ290byBzdGFydF9mYWlsZWQ7Ci0KLSAgaWYgKCFWNEwyX1RZUEVfSVNfT1VUUFVUIChvYmotPnR5cGUpKQotICAgIHBvb2wtPmdyb3VwX3JlbGVhc2VkX2hhbmRsZXIgPQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQgKHBvb2wtPnZhbGxvY2F0b3IsICJncm91cC1yZWxlYXNlZCIsCi0gICAgICAgIEdfQ0FMTEJBQ0sgKGdzdF92NGwyX2J1ZmZlcl9wb29sX3Jlc3VyZWN0X2J1ZmZlciksIHBvb2wpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotd3JvbmdfY29uZmlnOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImludmFsaWQgY29uZmlnICUiIEdTVF9QVFJfRk9STUFULCBjb25maWcpOwotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoY29uZmlnKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vX2J1ZmZlcnM6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLAotICAgICAgICAid2UgcmVjZWl2ZWQgJWQgYnVmZmVyIGZyb20gZGV2aWNlICclcycsIHdlIHdhbnQgYXQgbGVhc3QgJWQiLAotICAgICAgICBtaW5fYnVmZmVycywgb2JqLT52aWRlb2RldiwgR1NUX1Y0TDJfTUlOX0JVRkZFUlMpOwotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoY29uZmlnKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXN0YXJ0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJmYWlsZWQgdG8gc3RhcnQgc3RyZWFtaW5nIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1vdGhlcl9wb29sX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJmYWlsZWQgdG8gYWN0aXZlIHRoZSBvdGhlciBwb29sICUiCi0gICAgICAgIEdTVF9QVFJfRk9STUFULCBwb29sLT5vdGhlcl9wb29sKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9zdG9wIChHc3RCdWZmZXJQb29sICogYnBvb2wpCi17Ci0gIEdzdFY0bDJCdWZmZXJQb29sICpwb29sID0gR1NUX1Y0TDJfQlVGRkVSX1BPT0wgKGJwb29sKTsKLSAgR3N0QnVmZmVyUG9vbENsYXNzICpwY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfQ0xBU1MgKHBhcmVudF9jbGFzcyk7Ci0gIGdib29sZWFuIHJldDsKLSAgZ2ludCBpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJzdG9wcGluZyBwb29sIik7Ci0KLSAgaWYgKHBvb2wtPmdyb3VwX3JlbGVhc2VkX2hhbmRsZXIgPiAwKSB7Ci0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChwb29sLT52YWxsb2NhdG9yLAotICAgICAgICBwb29sLT5ncm91cF9yZWxlYXNlZF9oYW5kbGVyKTsKLSAgICBwb29sLT5ncm91cF9yZWxlYXNlZF9oYW5kbGVyID0gMDsKLSAgfQotCi0gIGlmIChwb29sLT5vdGhlcl9wb29sKSB7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wtPm90aGVyX3Bvb2wsIEZBTFNFKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sLT5vdGhlcl9wb29sKTsKLSAgICBwb29sLT5vdGhlcl9wb29sID0gTlVMTDsKLSAgfQotCi0gIGdzdF92NGwyX2J1ZmZlcl9wb29sX3N0cmVhbW9mZiAocG9vbCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7Ci0gICAgaWYgKHBvb2wtPmJ1ZmZlcnNbaV0pIHsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyID0gcG9vbC0+YnVmZmVyc1tpXTsKLQotICAgICAgcG9vbC0+YnVmZmVyc1tpXSA9IE5VTEw7Ci0KLSAgICAgIGlmIChWNEwyX1RZUEVfSVNfT1VUUFVUIChwb29sLT5vYmotPnR5cGUpKQotICAgICAgICBnc3RfdjRsMl9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlcik7Ci0gICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHJlLWVucXVldWUgY2FwdHVyZSBidWZmZXIgb24gc3RvcCAqLwotICAgICAgICBwY2xhc3MtPnJlbGVhc2VfYnVmZmVyIChicG9vbCwgYnVmZmVyKTsKLQotICAgICAgZ19hdG9taWNfaW50X2FkZCAoJnBvb2wtPm51bV9xdWV1ZWQsIC0xKTsKLSAgICB9Ci0gIH0KLQotICByZXQgPSBHU1RfQlVGRkVSX1BPT0xfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnN0b3AgKGJwb29sKTsKLQotICBpZiAocmV0ICYmIHBvb2wtPnZhbGxvY2F0b3IpIHsKLSAgICBHc3RWNGwyUmV0dXJuIHZyZXQ7Ci0KLSAgICB2cmV0ID0gZ3N0X3Y0bDJfYWxsb2NhdG9yX3N0b3AgKHBvb2wtPnZhbGxvY2F0b3IpOwotCi0gICAgaWYgKHZyZXQgPT0gR1NUX1Y0TDJfQlVTWSkKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwgInNvbWUgYnVmZmVycyBhcmUgc3RpbGwgb3V0c3RhbmRpbmciKTsKLQotICAgIHJldCA9ICh2cmV0ID09IEdTVF9WNEwyX09LKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9mbHVzaF9zdGFydCAoR3N0QnVmZmVyUG9vbCAqIGJwb29sKQotewotICBHc3RWNGwyQnVmZmVyUG9vbCAqcG9vbCA9IEdTVF9WNEwyX0JVRkZFUl9QT09MIChicG9vbCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInN0YXJ0IGZsdXNoaW5nIik7Ci0KLSAgZ3N0X3BvbGxfc2V0X2ZsdXNoaW5nIChwb29sLT5wb2xsLCBUUlVFKTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBvb2wpOwotICBwb29sLT5lbXB0eSA9IEZBTFNFOwotICBnX2NvbmRfYnJvYWRjYXN0ICgmcG9vbC0+ZW1wdHlfY29uZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKLQotICBpZiAocG9vbC0+b3RoZXJfcG9vbCkKLSAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2ZsdXNoaW5nIChwb29sLT5vdGhlcl9wb29sLCBUUlVFKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2J1ZmZlcl9wb29sX2ZsdXNoX3N0b3AgKEdzdEJ1ZmZlclBvb2wgKiBicG9vbCkKLXsKLSAgR3N0VjRsMkJ1ZmZlclBvb2wgKnBvb2wgPSBHU1RfVjRMMl9CVUZGRVJfUE9PTCAoYnBvb2wpOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSBwb29sLT5vYmo7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyc1tWSURFT19NQVhfRlJBTUVdOwotICBnaW50IGk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInN0b3AgZmx1c2hpbmciKTsKLQotICAvKiBJZiB3ZSBoYXZlbid0IHN0YXJ0ZWQgc3RyZWFtaW5nIHlldCwgc2ltcGx5IGNhbGwgc3RyZWFtb24gKi8KLSAgaWYgKCFwb29sLT5zdHJlYW1pbmcpCi0gICAgZ290byBzdHJlYW1vbjsKLQotICBpZiAocG9vbC0+b3RoZXJfcG9vbCkKLSAgICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2ZsdXNoaW5nIChwb29sLT5vdGhlcl9wb29sLCBGQUxTRSk7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChwb29sKTsKLSAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc3RyZWFtb2ZmIChwb29sKTsKLSAgLyogUmVtZW1iZXIgYnVmZmVycyB0byByZS1lbnF1ZXVlICovCi0gIG1lbWNweShidWZmZXJzLCBwb29sLT5idWZmZXJzLCBzaXplb2YoYnVmZmVycykpOwotICBtZW1zZXQocG9vbC0+YnVmZmVycywgMCwgc2l6ZW9mKHBvb2wtPmJ1ZmZlcnMpKTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBvb2wpOwotCi0gIC8qIFJlc2V0IG91ciBzdGF0ZSAqLwotICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgIGNhc2UgR1NUX1Y0TDJfSU9fUlc6Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9WNEwyX0lPX01NQVA6Ci0gICAgY2FzZSBHU1RfVjRMMl9JT19VU0VSUFRSOgotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGOgotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGX0lNUE9SVDoKLSAgICB7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKLSAgICAgICAgLyogUmUtZW5xdWV1ZSBidWZmZXJzICovCi0gICAgICAgIGlmIChidWZmZXJzW2ldKSB7Ci0gICAgICAgICAgR3N0QnVmZmVyUG9vbCAqYnBvb2wgPSAoR3N0QnVmZmVyUG9vbCAqKSBwb29sOwotICAgICAgICAgIEdzdEJ1ZmZlciAqYnVmZmVyID0gYnVmZmVyc1tpXTsKLQotICAgICAgICAgIC8qIFJlbW92ZSBxZGF0YSwgdGhpcyB3aWxsIHVubWFwIGFueSBtYXAgZGF0YSBpbgotICAgICAgICAgICAqIHVzZXJwdHIvZG1hYnVmLWltcG9ydCAqLwotICAgICAgICAgIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEgKEdTVF9NSU5JX09CSkVDVCAoYnVmZmVyKSwKLSAgICAgICAgICAgICAgR1NUX1Y0TDJfSU1QT1JUX1FVQVJLLCBOVUxMLCBOVUxMKTsKLQotICAgICAgICAgIGlmIChidWZmZXItPnBvb2wgPT0gTlVMTCkKLSAgICAgICAgICAgIGdzdF92NGwyX2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyIChicG9vbCwgYnVmZmVyKTsKLQotICAgICAgICAgIGdfYXRvbWljX2ludF9hZGQgKCZwb29sLT5udW1fcXVldWVkLCAtMSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLXN0cmVhbW9uOgotICAvKiBTdGFydCBzdHJlYW1pbmcgb24gY2FwdHVyZSBkZXZpY2Ugb25seSAqLwotICBpZiAoIVY0TDJfVFlQRV9JU19PVVRQVVQgKG9iai0+dHlwZSkpCi0gICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc3RyZWFtb24gKHBvb2wpOwotCi0gIGdzdF9wb2xsX3NldF9mbHVzaGluZyAocG9vbC0+cG9sbCwgRkFMU0UpOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcG9sbCAoR3N0VjRsMkJ1ZmZlclBvb2wgKiBwb29sKQotewotICBnaW50IHJldDsKLQotICAvKiBJbiBSVyBtb2RlIHRoZXJlIGlzIG5vIHF1ZXVlLCBoZW5jZSBubyBuZWVkIHRvIHdhaXQgd2hpbGUgdGhlIHF1ZXVlIGlzCi0gICAqIGVtcHR5ICovCi0gIGlmIChwb29sLT5vYmotPm1vZGUgIT0gR1NUX1Y0TDJfSU9fUlcpIHsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHBvb2wpOwotICAgIHdoaWxlIChwb29sLT5lbXB0eSkKLSAgICAgIGdfY29uZF93YWl0ICgmcG9vbC0+ZW1wdHlfY29uZCwgR1NUX09CSkVDVF9HRVRfTE9DSyAocG9vbCkpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKLSAgfQotCi0gIGlmICghcG9vbC0+Y2FuX3BvbGxfZGV2aWNlKQotICAgIGdvdG8gZG9uZTsKLQotICBHU1RfTE9HX09CSkVDVCAocG9vbCwgInBvbGxpbmcgZGV2aWNlIik7Ci0KLWFnYWluOgotICByZXQgPSBnc3RfcG9sbF93YWl0IChwb29sLT5wb2xsLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCA8IDApKSB7Ci0gICAgc3dpdGNoIChlcnJubykgewotICAgICAgY2FzZSBFQlVTWToKLSAgICAgICAgZ290byBzdG9wcGVkOwotICAgICAgY2FzZSBFQUdBSU46Ci0gICAgICBjYXNlIEVJTlRSOgotICAgICAgICBnb3RvIGFnYWluOwotICAgICAgY2FzZSBFTlhJTzoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLAotICAgICAgICAgICAgInY0bDIgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBwb2xsaW5nLiBEaXNhYmxpbmciCi0gICAgICAgICAgICAiIHVzaW5nIGxpYnY0bDIgaW4gdGhpcyBjYXNlIG1heSBjYXVzZSBkZWFkbG9ja3MiKTsKLSAgICAgICAgcG9vbC0+Y2FuX3BvbGxfZGV2aWNlID0gRkFMU0U7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdvdG8gc2VsZWN0X2Vycm9yOwotICAgIH0KLSAgfQotCi0gIGlmIChnc3RfcG9sbF9mZF9oYXNfZXJyb3IgKHBvb2wtPnBvbGwsICZwb29sLT5wb2xsZmQpKQotICAgIGdvdG8gc2VsZWN0X2Vycm9yOwotCi1kb25lOgotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1zdG9wcGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInN0b3AgY2FsbGVkIik7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICB9Ci1zZWxlY3RfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocG9vbC0+b2JqLT5lbGVtZW50LCBSRVNPVVJDRSwgUkVBRCwgKE5VTEwpLAotICAgICAgICAoInBvbGwgZXJyb3IgJWQ6ICVzICglZCkiLCByZXQsIGdfc3RyZXJyb3IgKGVycm5vKSwgZXJybm8pKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX3FidWYgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCwgR3N0QnVmZmVyICogYnVmKQotewotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwID0gTlVMTDsKLSAgY29uc3QgR3N0VjRsMk9iamVjdCAqb2JqID0gcG9vbC0+b2JqOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBnaW50IGluZGV4OwotCi0gIGlmICghZ3N0X3Y0bDJfaXNfYnVmZmVyX3ZhbGlkIChidWYsICZncm91cCkpIHsKLSAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgInVucmVmIGNvcGllZC9pbnZhbGlkIGJ1ZmZlciAlcCIsIGJ1Zik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0gIH0KLQotICBpbmRleCA9IGdyb3VwLT5idWZmZXIuaW5kZXg7Ci0KLSAgaWYgKHBvb2wtPmJ1ZmZlcnNbaW5kZXhdICE9IE5VTEwpCi0gICAgZ290byBhbHJlYWR5X3F1ZXVlZDsKLQotICBHU1RfTE9HX09CSkVDVCAocG9vbCwgInF1ZXVpbmcgYnVmZmVyICVpIiwgaW5kZXgpOwotCi0gIGlmIChWNEwyX1RZUEVfSVNfT1VUUFVUIChvYmotPnR5cGUpKSB7Ci0gICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCi0gICAgLyogRXhjZXB0IHdoZW4gZmllbGQgaXMgc2V0IHRvIGFsdGVybmF0ZSwgYnVmZmVyIGZpZWxkIGlzIHRoZSBzYW1lIGFzCi0gICAgICogdGhlIG9uZSBkZWZpbmVkIGluIGZvcm1hdCAqLwotICAgIGlmIChWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIgKG9iai0+dHlwZSkpCi0gICAgICBmaWVsZCA9IG9iai0+Zm9ybWF0LmZtdC5waXhfbXAuZmllbGQ7Ci0gICAgZWxzZQotICAgICAgZmllbGQgPSBvYmotPmZvcm1hdC5mbXQucGl4LmZpZWxkOwotCi0gICAgLyogTkI6IEF0IHRoaXMgbW9tZW50LCB3ZSBjYW4ndCBoYXZlIGFsdGVybmF0ZSBtb2RlIGJlY2F1c2UgaXQgbm90IGhhbmRsZWQKLSAgICAgKiB5ZXQgKi8KLSAgICBpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9BTFRFUk5BVEUpIHsKLSAgICAgIGlmIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChidWYsIEdTVF9WSURFT19GUkFNRV9GTEFHX1RGRikpCi0gICAgICAgIGZpZWxkID0gVjRMMl9GSUVMRF9UT1A7Ci0gICAgICBlbHNlCi0gICAgICAgIGZpZWxkID0gVjRMMl9GSUVMRF9CT1RUT007Ci0gICAgfQotCi0gICAgZ3JvdXAtPmJ1ZmZlci5maWVsZCA9IGZpZWxkOwotICB9Ci0KLSAgaWYgKEdTVF9CVUZGRVJfVElNRVNUQU1QX0lTX1ZBTElEIChidWYpKSB7Ci0gICAgdGltZXN0YW1wID0gR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1Zik7Ci0gICAgR1NUX1RJTUVfVE9fVElNRVZBTCAodGltZXN0YW1wLCBncm91cC0+YnVmZmVyLnRpbWVzdGFtcCk7Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKHBvb2wpOwotICBnX2F0b21pY19pbnRfaW5jICgmcG9vbC0+bnVtX3F1ZXVlZCk7Ci0gIHBvb2wtPmJ1ZmZlcnNbaW5kZXhdID0gYnVmOwotCi0gIGlmICghZ3N0X3Y0bDJfYWxsb2NhdG9yX3FidWYgKHBvb2wtPnZhbGxvY2F0b3IsIGdyb3VwKSkKLSAgICBnb3RvIHF1ZXVlX2ZhaWxlZDsKLQotICBwb29sLT5lbXB0eSA9IEZBTFNFOwotICBnX2NvbmRfc2lnbmFsICgmcG9vbC0+ZW1wdHlfY29uZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLWFscmVhZHlfcXVldWVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgInRoZSBidWZmZXIgJWkgd2FzIGFscmVhZHkgcXVldWVkIiwgaW5kZXgpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotcXVldWVfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImNvdWxkIG5vdCBxdWV1ZSBhIGJ1ZmZlciAlaSIsIGluZGV4KTsKLSAgICAvKiBNYXJrIGJyb2tlbiBidWZmZXIgdG8gdGhlIGFsbG9jYXRvciAqLwotICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZiwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotICAgIGdfYXRvbWljX2ludF9hZGQgKCZwb29sLT5udW1fcXVldWVkLCAtMSk7Ci0gICAgcG9vbC0+YnVmZmVyc1tpbmRleF0gPSBOVUxMOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92NGwyX2J1ZmZlcl9wb29sX2RxYnVmIChHc3RWNGwyQnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqKiBidWZmZXIpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RCdWZmZXIgKm91dGJ1ZjsKLSAgR3N0VjRsMk9iamVjdCAqb2JqID0gcG9vbC0+b2JqOwotICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wOwotICBHc3RWNGwyTWVtb3J5R3JvdXAgKmdyb3VwOwotICBnaW50IGk7Ci0KLSAgaWYgKChyZXMgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9wb2xsIChwb29sKSkgIT0gR1NUX0ZMT1dfT0spCi0gICAgZ290byBwb2xsX2ZhaWxlZDsKLQotICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImRlcXVldWVpbmcgYSBidWZmZXIiKTsKLQotICByZXMgPSBnc3RfdjRsMl9hbGxvY2F0b3JfZHFidWYgKHBvb2wtPnZhbGxvY2F0b3IsICZncm91cCk7Ci0gIGlmIChyZXMgPT0gR1NUX0ZMT1dfRU9TKQotICAgIGdvdG8gZW9zOwotICBpZiAocmVzICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gZHFidWZfZmFpbGVkOwotCi0gIC8qIGdldCBvdXIgR3N0QnVmZmVyIHdpdGggdGhhdCBpbmRleCBmcm9tIHRoZSBwb29sLCBpZiB0aGUgYnVmZmVyIHdhcwotICAgKiBvdXRzdGFuZGluZyB3ZSBoYXZlIGEgc2VyaW91cyBwcm9ibGVtLgotICAgKi8KLSAgb3V0YnVmID0gcG9vbC0+YnVmZmVyc1tncm91cC0+YnVmZmVyLmluZGV4XTsKLSAgaWYgKG91dGJ1ZiA9PSBOVUxMKQotICAgIGdvdG8gbm9fYnVmZmVyOwotCi0gIC8qIG1hcmsgdGhlIGJ1ZmZlciBvdXRzdGFuZGluZyAqLwotICBwb29sLT5idWZmZXJzW2dyb3VwLT5idWZmZXIuaW5kZXhdID0gTlVMTDsKLSAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZwb29sLT5udW1fcXVldWVkKSkgewotICAgIEdTVF9PQkpFQ1RfTE9DSyAocG9vbCk7Ci0gICAgcG9vbC0+ZW1wdHkgPSBUUlVFOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChwb29sKTsKLSAgfQotCi0gIHRpbWVzdGFtcCA9IEdTVF9USU1FVkFMX1RPX1RJTUUgKGdyb3VwLT5idWZmZXIudGltZXN0YW1wKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgZm9yIChpID0gMDsgaSA8IGdyb3VwLT5uX21lbTsgaSsrKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsCi0gICAgICAgICJkZXF1ZXVlZCBidWZmZXIgJXAgc2VxOiVkIChpeD0lZCksIG1lbSAlcCB1c2VkICVkLCBwbGFuZT0lZCwgZmxhZ3MgJTA4eCwgdHMgJSIKLSAgICAgICAgR1NUX1RJTUVfRk9STUFUICIsIHBvb2wtcXVldWVkPSVkLCBidWZmZXI9JXAiLCBvdXRidWYsCi0gICAgICAgIGdyb3VwLT5idWZmZXIuc2VxdWVuY2UsIGdyb3VwLT5idWZmZXIuaW5kZXgsIGdyb3VwLT5tZW1baV0sCi0gICAgICAgIGdyb3VwLT5wbGFuZXNbaV0uYnl0ZXN1c2VkLCBpLCBncm91cC0+YnVmZmVyLmZsYWdzLAotICAgICAgICBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApLCBwb29sLT5udW1fcXVldWVkLCBvdXRidWYpOwotICB9Ci0jZW5kaWYKLQotICAvKiBJZ25vcmUgdGltZXN0YW1wIGFuZCBmaWVsZCBmb3IgT1VUUFVUIGRldmljZSAqLwotICBpZiAoVjRMMl9UWVBFX0lTX09VVFBVVCAob2JqLT50eXBlKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogQ2hlY2sgZm9yIGRyaXZlciBidWcgaW4gcmVwb3J0aW5nIGZlaWxkICovCi0gIGlmIChncm91cC0+YnVmZmVyLmZpZWxkID09IFY0TDJfRklFTERfQU5ZKSB7Ci0gICAgLyogT25seSB3YXJuIG9uY2UgdG8gYXZvaWQgdGhlIHNwYW1taW5nICovCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICAgIGlmICghcG9vbC0+aGFzX3dhcm5lZF9vbl9idWdneV9maWVsZCkgewotICAgICAgcG9vbC0+aGFzX3dhcm5lZF9vbl9idWdneV9maWVsZCA9IFRSVUU7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsCi0gICAgICAgICAgIkRyaXZlciBzaG91bGQgbmV2ZXIgc2V0IHY0bDJfYnVmZmVyLmZpZWxkIHRvIEFOWSIpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLyogVXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBmb3JtYXQgKHdvcmtzIGZvciBVVkMgYnVnKSAqLwotICAgIGdyb3VwLT5idWZmZXIuZmllbGQgPSBvYmotPmZvcm1hdC5mbXQucGl4LmZpZWxkOwotCi0gICAgLyogSWYgZHJpdmVyIGFsc28gaGFzIGJ1Z2d5IFNfRk1ULCBhc3N1bWUgcHJvZ3Jlc3NpdmUgKi8KLSAgICBpZiAoZ3JvdXAtPmJ1ZmZlci5maWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgewotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgICAgIGlmICghcG9vbC0+aGFzX3dhcm5lZF9vbl9idWdneV9maWVsZCkgewotICAgICAgICBwb29sLT5oYXNfd2FybmVkX29uX2J1Z2d5X2ZpZWxkID0gVFJVRTsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLAotICAgICAgICAgICAgIkRyaXZlciBzaG91bGQgbmV2ZXIgc2V0IHY0bDJfZm9ybWF0LnBpeC5maWVsZCB0byBBTlkiKTsKLSAgICAgIH0KLSNlbmRpZgotCi0gICAgICBncm91cC0+YnVmZmVyLmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotICAgIH0KLSAgfQotCi0gIC8qIHNldCB0b3AvYm90dG9tIGZpZWxkIGZpcnN0IGlmIHY0bDJfYnVmZmVyIGhhcyB0aGUgaW5mb3JtYXRpb24gKi8KLSAgc3dpdGNoIChncm91cC0+YnVmZmVyLmZpZWxkKSB7Ci0gICAgY2FzZSBWNEwyX0ZJRUxEX05PTkU6Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX1ZJREVPX0JVRkZFUl9GTEFHX0lOVEVSTEFDRUQpOwotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9WSURFT19CVUZGRVJfRkxBR19URkYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEI6Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9WSURFT19CVUZGRVJfRkxBR19JTlRFUkxBQ0VEKTsKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX1ZJREVPX0JVRkZFUl9GTEFHX1RGRik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRF9CVDoKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKG91dGJ1ZiwgR1NUX1ZJREVPX0JVRkZFUl9GTEFHX0lOVEVSTEFDRUQpOwotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9WSURFT19CVUZGRVJfRkxBR19URkYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9WSURFT19CVUZGRVJfRkxBR19JTlRFUkxBQ0VEKTsKLSAgICAgIGlmIChvYmotPnR2X25vcm0gPT0gVjRMMl9TVERfTlRTQ19NIHx8Ci0gICAgICAgICAgb2JqLT50dl9ub3JtID09IFY0TDJfU1REX05UU0NfTV9KUCB8fAotICAgICAgICAgIG9iai0+dHZfbm9ybSA9PSBWNEwyX1NURF9OVFNDX01fS1IpIHsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9WSURFT19CVUZGRVJfRkxBR19URkYpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0JVRkZFUl9GTEFHX1NFVCAob3V0YnVmLCBHU1RfVklERU9fQlVGRkVSX0ZMQUdfVEZGKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG91dGJ1ZiwgR1NUX1ZJREVPX0JVRkZFUl9GTEFHX0lOVEVSTEFDRUQpOwotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9WSURFT19CVUZGRVJfRkxBR19URkYpOwotICAgICAgR1NUX0ZJWE1FX09CSkVDVCAocG9vbCwKLSAgICAgICAgICAiVW5oYW5kbGVkIGVudW0gdjRsMl9maWVsZCAlZCAtIHRyZWF0aW5nIGFzIHByb2dyZXNzaXZlIiwKLSAgICAgICAgICBncm91cC0+YnVmZmVyLmZpZWxkKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJm9iai0+aW5mbykgPT0gR1NUX1ZJREVPX0ZPUk1BVF9FTkNPREVEKSB7Ci0gICAgaWYgKGdyb3VwLT5idWZmZXIuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FKQotICAgICAgR1NUX0JVRkZFUl9GTEFHX1VOU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgICBlbHNlCi0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19ERUxUQV9VTklUKTsKLSAgfQotCi0gIGlmIChncm91cC0+YnVmZmVyLmZsYWdzICYgVjRMMl9CVUZfRkxBR19FUlJPUikKLSAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChvdXRidWYsIEdTVF9CVUZGRVJfRkxBR19DT1JSVVBURUQpOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWYpID0gdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX09GRlNFVCAob3V0YnVmKSA9IGdyb3VwLT5idWZmZXIuc2VxdWVuY2U7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAob3V0YnVmKSA9IGdyb3VwLT5idWZmZXIuc2VxdWVuY2UgKyAxOwotCi1kb25lOgotICAqYnVmZmVyID0gb3V0YnVmOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLQotICAvKiBFUlJPUlMgKi8KLXBvbGxfZmFpbGVkOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInBvbGwgZXJyb3IgJXMiLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotZW9zOgotICB7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKLSAgfQotZHFidWZfZmFpbGVkOgotICB7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci1ub19idWZmZXI6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAiTm8gZnJlZSBidWZmZXIgZm91bmQgaW4gdGhlIHBvb2wgYXQgaW5kZXggJWQuIiwKLSAgICAgICAgZ3JvdXAtPmJ1ZmZlci5pbmRleCk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICB9Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9hY3F1aXJlX2J1ZmZlciAoR3N0QnVmZmVyUG9vbCAqIGJwb29sLCBHc3RCdWZmZXIgKiogYnVmZmVyLAotICAgIEdzdEJ1ZmZlclBvb2xBY3F1aXJlUGFyYW1zICogcGFyYW1zKQotewotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0VjRsMkJ1ZmZlclBvb2wgKnBvb2wgPSBHU1RfVjRMMl9CVUZGRVJfUE9PTCAoYnBvb2wpOwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKnBjbGFzcyA9IEdTVF9CVUZGRVJfUE9PTF9DTEFTUyAocGFyZW50X2NsYXNzKTsKLSAgR3N0VjRsMk9iamVjdCAqb2JqID0gcG9vbC0+b2JqOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJhY3F1aXJlIik7Ci0KLSAgLyogSWYgdGhpcyBpcyBiZWluZyBjYWxsZWQgdG8gcmVzdXJlY3QgYSBsb3N0IGJ1ZmZlciAqLwotICBpZiAocGFyYW1zICYmIHBhcmFtcy0+ZmxhZ3MgJiBHU1RfVjRMMl9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfUkVTVVJSRUNUKSB7Ci0gICAgcmV0ID0gcGNsYXNzLT5hY3F1aXJlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlciwgcGFyYW1zKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBzd2l0Y2ggKG9iai0+dHlwZSkgewotICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORToKLSAgICAgIC8qIGNhcHR1cmUsIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIGJ1ZmZlciB3aXRoIG5ldyBjYXB0dXJlZCBkYXRhICovCi0gICAgICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgICB7Ci0gICAgICAgICAgLyogdGFrZSBlbXB0eSBidWZmZXIgZnJvbSB0aGUgcG9vbCAqLwotICAgICAgICAgIHJldCA9IHBjbGFzcy0+YWNxdWlyZV9idWZmZXIgKGJwb29sLCBidWZmZXIsIHBhcmFtcyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19VU0VSUFRSOgotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX0RNQUJVRl9JTVBPUlQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAvKiBqdXN0IGRlcXVldWUgYSBidWZmZXIsIHdlIGJhc2ljYWxseSB1c2UgdGhlIHF1ZXVlIG9mIHY0bDIgYXMgdGhlCi0gICAgICAgICAgICogc3RvcmFnZSBmb3Igb3VyIGJ1ZmZlcnMuIFRoaXMgZnVuY3Rpb24gZG9lcyBwb2xsIGZpcnN0IHNvIHdlIGNhbgotICAgICAgICAgICAqIGludGVycnVwdCBpdCBmaW5lLiAqLwotICAgICAgICAgIHJldCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX2RxYnVmIChwb29sLCBidWZmZXIpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotCi0gICAgY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLSAgICBjYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORToKLSAgICAgIC8qIHBsYXliYWNrLCBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgYnVmZmVyICovCi0gICAgICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgICAgIC8qIGdldCBhbiBlbXB0eSBidWZmZXIgKi8KLSAgICAgICAgICByZXQgPSBwY2xhc3MtPmFjcXVpcmVfYnVmZmVyIChicG9vbCwgYnVmZmVyLCBwYXJhbXMpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fVVNFUlBUUjoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUZfSU1QT1JUOgotICAgICAgICAgIC8qIGdldCBhIGZyZWUgdW5xdWV1ZWQgYnVmZmVyICovCi0gICAgICAgICAgcmV0ID0gcGNsYXNzLT5hY3F1aXJlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlciwgcGFyYW1zKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgIGJyZWFrOwotICB9Ci1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIgKEdzdEJ1ZmZlclBvb2wgKiBicG9vbCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBHc3RWNGwyQnVmZmVyUG9vbCAqcG9vbCA9IEdTVF9WNEwyX0JVRkZFUl9QT09MIChicG9vbCk7Ci0gIEdzdEJ1ZmZlclBvb2xDbGFzcyAqcGNsYXNzID0gR1NUX0JVRkZFUl9QT09MX0NMQVNTIChwYXJlbnRfY2xhc3MpOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSBwb29sLT5vYmo7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInJlbGVhc2UgYnVmZmVyICVwIiwgYnVmZmVyKTsKLQotICBzd2l0Y2ggKG9iai0+dHlwZSkgewotICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORToKLSAgICAgIC8qIGNhcHR1cmUsIHB1dCB0aGUgYnVmZmVyIGJhY2sgaW4gdGhlIHF1ZXVlIHNvIHRoYXQgd2UgY2FuIHJlZmlsbCBpdAotICAgICAgICogbGF0ZXIuICovCi0gICAgICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgICAgIC8qIHJlbGVhc2UgYmFjayBpbiB0aGUgcG9vbCAqLwotICAgICAgICAgIHBjbGFzcy0+cmVsZWFzZV9idWZmZXIgKGJwb29sLCBidWZmZXIpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGOgotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX01NQVA6Ci0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fVVNFUlBUUjoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUZfSU1QT1JUOgotICAgICAgICB7Ci0gICAgICAgICAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cDsKLSAgICAgICAgICBpZiAoZ3N0X3Y0bDJfaXNfYnVmZmVyX3ZhbGlkIChidWZmZXIsICZncm91cCkpIHsKLSAgICAgICAgICAgIGdzdF92NGwyX2FsbG9jYXRvcl9yZXNldF9ncm91cCAocG9vbC0+dmFsbG9jYXRvciwgZ3JvdXApOwotICAgICAgICAgICAgLyogcXVldWUgYmFjayBpbiB0aGUgZGV2aWNlICovCi0gICAgICAgICAgICBpZiAocG9vbC0+b3RoZXJfcG9vbCkKLSAgICAgICAgICAgICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcHJlcGFyZV9idWZmZXIgKHBvb2wsIGJ1ZmZlciwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcWJ1ZiAocG9vbCwgYnVmZmVyKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgcGNsYXNzLT5yZWxlYXNlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlcik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIFNpbXBseSByZWxlYXNlIGludmFsaWRlL21vZGlmaWVkIGJ1ZmZlciwgdGhlIGFsbG9jYXRvciB3aWxsCi0gICAgICAgICAgICAgKiBnaXZlIGl0IGJhY2sgbGF0ZXIgKi8KLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotICAgICAgICAgICAgcGNsYXNzLT5yZWxlYXNlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlcik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0gICAgY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkU6Ci0gICAgICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgICAgIC8qIHJlbGVhc2UgYmFjayBpbiB0aGUgcG9vbCAqLwotICAgICAgICAgIHBjbGFzcy0+cmVsZWFzZV9idWZmZXIgKGJwb29sLCBidWZmZXIpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fVVNFUlBUUjoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUZfSU1QT1JUOgotICAgICAgICB7Ci0gICAgICAgICAgR3N0VjRsMk1lbW9yeUdyb3VwICpncm91cDsKLSAgICAgICAgICBndWludCBpbmRleDsKLQotICAgICAgICAgIGlmICghZ3N0X3Y0bDJfaXNfYnVmZmVyX3ZhbGlkIChidWZmZXIsICZncm91cCkpIHsKLSAgICAgICAgICAgIC8qIFNpbXBseSByZWxlYXNlIGludmFsaWRlL21vZGlmaWVkIGJ1ZmZlciwgdGhlIGFsbG9jYXRvciB3aWxsCi0gICAgICAgICAgICAgKiBnaXZlIGl0IGJhY2sgbGF0ZXIgKi8KLSAgICAgICAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX1RBR19NRU1PUlkpOwotICAgICAgICAgICAgcGNsYXNzLT5yZWxlYXNlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpbmRleCA9IGdyb3VwLT5idWZmZXIuaW5kZXg7Ci0KLSAgICAgICAgICBpZiAocG9vbC0+YnVmZmVyc1tpbmRleF0gPT0gTlVMTCkgewotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJidWZmZXIgJXUgbm90IHF1ZXVlZCwgcHV0dGluZyBvbiBmcmVlIGxpc3QiLAotICAgICAgICAgICAgICAgIGluZGV4KTsKLQotICAgICAgICAgICAgLyogUmVtb3ZlIHFkYXRhLCB0aGlzIHdpbGwgdW5tYXAgYW55IG1hcCBkYXRhIGluIHVzZXJwdHIgKi8KLSAgICAgICAgICAgIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEgKEdTVF9NSU5JX09CSkVDVCAoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICBHU1RfVjRMMl9JTVBPUlRfUVVBUkssIE5VTEwsIE5VTEwpOwotCi0gICAgICAgICAgICAvKiByZXNldCB0byBkZWZhdWx0IHNpemUgKi8KLSAgICAgICAgICAgIGdzdF92NGwyX2FsbG9jYXRvcl9yZXNldF9ncm91cCAocG9vbC0+dmFsbG9jYXRvciwgZ3JvdXApOwotCi0gICAgICAgICAgICAvKiBwbGF5YmFjaywgcHV0IHRoZSBidWZmZXIgYmFjayBpbiB0aGUgcXVldWUgdG8gcmVmaWxsIGxhdGVyLiAqLwotICAgICAgICAgICAgcGNsYXNzLT5yZWxlYXNlX2J1ZmZlciAoYnBvb2wsIGJ1ZmZlcik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRoZSBidWZmZXIgaXMgcXVldWVkIGluIHRoZSBkZXZpY2UgYnV0IG1heWJlIG5vdCBwbGF5ZWQgeWV0LiBXZSBqdXN0Ci0gICAgICAgICAgICAgKiBsZWF2ZSBpdCB0aGVyZSBhbmQgbm90IG1ha2UgaXQgYXZhaWxhYmxlIGZvciBmdXR1cmUgY2FsbHMgdG8gYWNxdWlyZQotICAgICAgICAgICAgICogZm9yIG5vdy4gVGhlIGJ1ZmZlciB3aWxsIGJlIGRlcXVldWVkIGFuZCByZXVzZWQgbGF0ZXIuICovCi0gICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImJ1ZmZlciAldSBpcyBxdWV1ZWQiLCBpbmRleCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2J1ZmZlcl9wb29sX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFY0bDJCdWZmZXJQb29sICpwb29sID0gR1NUX1Y0TDJfQlVGRkVSX1BPT0wgKG9iamVjdCk7Ci0KLSAgaWYgKHBvb2wtPnZhbGxvY2F0b3IpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocG9vbC0+dmFsbG9jYXRvcik7Ci0gIHBvb2wtPnZhbGxvY2F0b3IgPSBOVUxMOwotCi0gIGlmIChwb29sLT5hbGxvY2F0b3IpCi0gICAgZ3N0X29iamVjdF91bnJlZiAocG9vbC0+YWxsb2NhdG9yKTsKLSAgcG9vbC0+YWxsb2NhdG9yID0gTlVMTDsKLQotICBpZiAocG9vbC0+b3RoZXJfcG9vbCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sLT5vdGhlcl9wb29sKTsKLSAgcG9vbC0+b3RoZXJfcG9vbCA9IE5VTEw7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VjRsMkJ1ZmZlclBvb2wgKnBvb2wgPSBHU1RfVjRMMl9CVUZGRVJfUE9PTCAob2JqZWN0KTsKLQotICBpZiAocG9vbC0+dmlkZW9fZmQgPj0gMCkKLSAgICB2NGwyX2Nsb3NlIChwb29sLT52aWRlb19mZCk7Ci0KLSAgZ3N0X3BvbGxfZnJlZSAocG9vbC0+cG9sbCk7Ci0KLSAgLyogRklYTUUgSXMgdGhpcyByZXF1aXJlZCB0byBrZWVwIGFyb3VuZCA/Ci0gICAqIFRoaXMgY2FuJ3QgYmUgZG9uZSBpbiBkaXNwb3NlIG1ldGhvZCBiZWNhdXNlIHdlIG11c3Qgbm90IHNldCBwb2ludGVyCi0gICAqIHRvIE5VTEwgYXMgaXQgaXMgcGFydCBvZiB0aGUgdjRsMm9iamVjdCBhbmQgZGlzcG9zZSBjb3VsZCBiZSBjYWxsZWQKLSAgICogbXVsdGlwbGUgdGltZXMgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAocG9vbC0+b2JqLT5lbGVtZW50KTsKLQotICBnX2NvbmRfY2xlYXIgKCZwb29sLT5lbXB0eV9jb25kKTsKLQotICAvKiBGSVhNRSBoYXZlIHdlIGRvbmUgZW5vdWdoIGhlcmUgPyAqLwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2J1ZmZlcl9wb29sX2luaXQgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCkKLXsKLSAgcG9vbC0+cG9sbCA9IGdzdF9wb2xsX25ldyAoVFJVRSk7Ci0gIHBvb2wtPmNhbl9wb2xsX2RldmljZSA9IFRSVUU7Ci0gIGdfY29uZF9pbml0ICgmcG9vbC0+ZW1wdHlfY29uZCk7Ci0gIHBvb2wtPmVtcHR5ID0gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2J1ZmZlcl9wb29sX2NsYXNzX2luaXQgKEdzdFY0bDJCdWZmZXJQb29sQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBHc3RCdWZmZXJQb29sQ2xhc3MgKmJ1ZmZlcnBvb2xfY2xhc3MgPSBHU1RfQlVGRkVSX1BPT0xfQ0xBU1MgKGtsYXNzKTsKLQotICBvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9kaXNwb3NlOwotICBvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZmluYWxpemU7Ci0KLSAgYnVmZmVycG9vbF9jbGFzcy0+c3RhcnQgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9zdGFydDsKLSAgYnVmZmVycG9vbF9jbGFzcy0+c3RvcCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX3N0b3A7Ci0gIGJ1ZmZlcnBvb2xfY2xhc3MtPnNldF9jb25maWcgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9zZXRfY29uZmlnOwotICBidWZmZXJwb29sX2NsYXNzLT5hbGxvY19idWZmZXIgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9hbGxvY19idWZmZXI7Ci0gIGJ1ZmZlcnBvb2xfY2xhc3MtPmFjcXVpcmVfYnVmZmVyID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXI7Ci0gIGJ1ZmZlcnBvb2xfY2xhc3MtPnJlbGVhc2VfYnVmZmVyID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXI7Ci0gIGJ1ZmZlcnBvb2xfY2xhc3MtPmZsdXNoX3N0YXJ0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZmx1c2hfc3RhcnQ7Ci0gIGJ1ZmZlcnBvb2xfY2xhc3MtPmZsdXNoX3N0b3AgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9mbHVzaF9zdG9wOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2NGwyYnVmZmVycG9vbF9kZWJ1ZywgInY0bDJidWZmZXJwb29sIiwgMCwKLSAgICAgICJWNEwyIEJ1ZmZlciBQb29sIik7Ci0gIEdTVF9ERUJVR19DQVRFR09SWV9HRVQgKENBVF9QRVJGT1JNQU5DRSwgIkdTVF9QRVJGT1JNQU5DRSIpOwotfQotCi0vKioKLSAqIGdzdF92NGwyX2J1ZmZlcl9wb29sX25ldzoKLSAqIEBvYmo6ICB0aGUgdjRsMiBvYmplY3Qgb3duaW5nIHRoZSBwb29sCi0gKgotICogQ29uc3RydWN0IGEgbmV3IGJ1ZmZlciBwb29sLgotICoKLSAqIFJldHVybnM6IHRoZSBuZXcgcG9vbCwgdXNlIGdzdF9vYmplY3RfdW5yZWYoKSB0byBmcmVlIHJlc291cmNlcwotICovCi1Hc3RCdWZmZXJQb29sICoKLWdzdF92NGwyX2J1ZmZlcl9wb29sX25ldyAoR3N0VjRsMk9iamVjdCAqIG9iaiwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFY0bDJCdWZmZXJQb29sICpwb29sOwotICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLSAgZ2NoYXIgKm5hbWUsICpwYXJlbnRfbmFtZTsKLSAgZ2ludCBmZDsKLQotICBmZCA9IHY0bDJfZHVwIChvYmotPnZpZGVvX2ZkKTsKLSAgaWYgKGZkIDwgMCkKLSAgICBnb3RvIGR1cF9mYWlsZWQ7Ci0KLSAgLyogc2V0dGluZyBhIHNpZ25pZmljYW50IHVuaXF1ZSBuYW1lICovCi0gIHBhcmVudF9uYW1lID0gZ3N0X29iamVjdF9nZXRfbmFtZSAoR1NUX09CSkVDVCAob2JqLT5lbGVtZW50KSk7Ci0gIG5hbWUgPSBnX3N0cmNvbmNhdCAocGFyZW50X25hbWUsICI6IiwgInBvb2w6IiwKLSAgICAgIFY0TDJfVFlQRV9JU19PVVRQVVQgKG9iai0+dHlwZSkgPyAic2luayIgOiAic3JjIiwgTlVMTCk7Ci0gIGdfZnJlZSAocGFyZW50X25hbWUpOwotCi0gIHBvb2wgPSAoR3N0VjRsMkJ1ZmZlclBvb2wgKikgZ19vYmplY3RfbmV3IChHU1RfVFlQRV9WNEwyX0JVRkZFUl9QT09MLAotICAgICAgIm5hbWUiLCBuYW1lLCBOVUxMKTsKLSAgZ19mcmVlIChuYW1lKTsKLQotICBnc3RfcG9sbF9mZF9pbml0ICgmcG9vbC0+cG9sbGZkKTsKLSAgcG9vbC0+cG9sbGZkLmZkID0gZmQ7Ci0gIGdzdF9wb2xsX2FkZF9mZCAocG9vbC0+cG9sbCwgJnBvb2wtPnBvbGxmZCk7Ci0gIGlmIChWNEwyX1RZUEVfSVNfT1VUUFVUIChvYmotPnR5cGUpKQotICAgIGdzdF9wb2xsX2ZkX2N0bF93cml0ZSAocG9vbC0+cG9sbCwgJnBvb2wtPnBvbGxmZCwgVFJVRSk7Ci0gIGVsc2UKLSAgICBnc3RfcG9sbF9mZF9jdGxfcmVhZCAocG9vbC0+cG9sbCwgJnBvb2wtPnBvbGxmZCwgVFJVRSk7Ci0KLSAgcG9vbC0+dmlkZW9fZmQgPSBmZDsKLSAgcG9vbC0+b2JqID0gb2JqOwotICBwb29sLT5jYW5fcG9sbF9kZXZpY2UgPSBUUlVFOwotCi0gIHBvb2wtPnZhbGxvY2F0b3IgPQotICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX25ldyAoR1NUX09CSkVDVCAocG9vbCksIG9iai0+dmlkZW9fZmQsICZvYmotPmZvcm1hdCk7Ci0gIGlmIChwb29sLT52YWxsb2NhdG9yID09IE5VTEwpCi0gICAgZ290byBhbGxvY2F0b3JfZmFpbGVkOwotCi0gIGdzdF9vYmplY3RfcmVmIChvYmotPmVsZW1lbnQpOwotCi0gIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChHU1RfQlVGRkVSX1BPT0xfQ0FTVCAocG9vbCkpOwotICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgY2Fwcywgb2JqLT5pbmZvLnNpemUsIDAsIDApOwotICAvKiBUaGlzIHdpbGwgc2ltcGx5IHNldCBhIGRlZmF1bHQgY29uZmlnLCBidXQgd2lsbCBub3QgY29uZmlndXJlIHRoZSBwb29sCi0gICAqIGJlY2F1c2UgbWluIGFuZCBtYXggYXJlIG5vdCB2YWxpZCAqLwotICBnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAoR1NUX0JVRkZFUl9QT09MX0NBU1QgKHBvb2wpLCBjb25maWcpOwotCi0gIHJldHVybiBHU1RfQlVGRkVSX1BPT0wgKHBvb2wpOwotCi0gIC8qIEVSUk9SUyAqLwotZHVwX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUiAoImZhaWxlZCB0byBkdXAgZmQgJWQgKCVzKSIsIGVycm5vLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci1hbGxvY2F0b3JfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgIkZhaWxlZCB0byBjcmVhdGUgVjRMMiBhbGxvY2F0b3IiKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJfZG9fcmVhZCAoR3N0VjRsMkJ1ZmZlclBvb2wgKiBwb29sLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSBwb29sLT5vYmo7Ci0gIGdpbnQgYW1vdW50OwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2ludCB0b3JlYWQ7Ci0KLSAgdG9yZWFkID0gb2JqLT5pbmZvLnNpemU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJyZWFkaW5nICVkIGJ5dGVzIGludG8gYnVmZmVyICVwIiwgdG9yZWFkLCBidWYpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotCi0gIGRvIHsKLSAgICBpZiAoKHJlcyA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX3BvbGwgKHBvb2wpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgIGdvdG8gcG9sbF9lcnJvcjsKLQotICAgIGFtb3VudCA9IHY0bDJfcmVhZCAob2JqLT52aWRlb19mZCwgbWFwLmRhdGEsIHRvcmVhZCk7Ci0KLSAgICBpZiAoYW1vdW50ID09IHRvcmVhZCkgewotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChhbW91bnQgPT0gLTEpIHsKLSAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9IGVsc2UKLSAgICAgICAgZ290byByZWFkX2Vycm9yOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBzaG9ydCByZWFkcyBjYW4gaGFwcGVuIGlmIGEgc2lnbmFsIGludGVycnVwdHMgdGhlIHJlYWQgKi8KLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgfSB3aGlsZSAoVFJVRSk7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJyZWFkICVkIGJ5dGVzIiwgYW1vdW50KTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgYW1vdW50KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci0KLSAgLyogRVJST1JTICovCi1wb2xsX2Vycm9yOgotICB7Ci0gICAgR1NUX0RFQlVHICgicG9sbCBlcnJvciAlcyIsIGdzdF9mbG93X2dldF9uYW1lIChyZXMpKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLXJlYWRfZXJyb3I6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob2JqLT5lbGVtZW50LCBSRVNPVVJDRSwgUkVBRCwKLSAgICAgICAgKF8oIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBkZXZpY2UgJyVzJy4iKSwKLSAgICAgICAgICAgIHRvcmVhZCwgb2JqLT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJlcyA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gY2xlYW51cDsKLSAgfQotY2xlYW51cDoKLSAgewotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gICAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgMCk7Ci0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi0vKioKLSAqIGdzdF92NGwyX2J1ZmZlcl9wb29sX3Byb2Nlc3M6Ci0gKiBAYnBvb2w6IGEgI0dzdEJ1ZmZlclBvb2wKLSAqIEBidWY6IGEgI0dzdEJ1ZmZlciwgbWF5YmUgYmUgcmVwbGFjZWQKLSAqCi0gKiBQcm9jZXNzIEBidWYgaW4gQGJwb29sLiBGb3IgY2FwdHVyZSBkZXZpY2VzLCB0aGlzIGZ1bmN0aW9ucyBmaWxscyBAYnVmIHdpdGgKLSAqIGRhdGEgZnJvbSB0aGUgZGV2aWNlLiBGb3Igb3V0cHV0IGRldmljZXMsIHRoaXMgZnVuY3Rpb25zIHNlbmQgdGhlIGNvbnRlbnRzIG9mCi0gKiBAYnVmIHRvIHRoZSBkZXZpY2UgZm9yIHBsYXliYWNrLgotICoKLSAqIFJldHVybnM6ICVHU1RfRkxPV19PSyBvbiBzdWNjZXNzLgotICovCi1Hc3RGbG93UmV0dXJuCi1nc3RfdjRsMl9idWZmZXJfcG9vbF9wcm9jZXNzIChHc3RWNGwyQnVmZmVyUG9vbCAqIHBvb2wsIEdzdEJ1ZmZlciAqKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJ1ZmZlclBvb2wgKmJwb29sID0gR1NUX0JVRkZFUl9QT09MX0NBU1QgKHBvb2wpOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSBwb29sLT5vYmo7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgInByb2Nlc3MgYnVmZmVyICVwIiwgYnVmKTsKLQotICBpZiAoR1NUX0JVRkZFUl9QT09MX0lTX0ZMVVNISU5HIChwb29sKSkKLSAgICByZXR1cm4gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0KLSAgc3dpdGNoIChvYmotPnR5cGUpIHsKLSAgICBjYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLSAgICBjYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkU6Ci0gICAgICAvKiBjYXB0dXJlICovCi0gICAgICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgICAgIC8qIGNhcHR1cmUgaW50byB0aGUgYnVmZmVyICovCi0gICAgICAgICAgcmV0ID0gZ3N0X3Y0bDJfZG9fcmVhZCAocG9vbCwgKmJ1Zik7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19NTUFQOgotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX0RNQUJVRjoKLSAgICAgICAgewotICAgICAgICAgIEdzdEJ1ZmZlciAqdG1wOwotCi0gICAgICAgICAgaWYgKCgqYnVmKS0+cG9vbCA9PSBicG9vbCkgewotICAgICAgICAgICAgZ3VpbnQgbnVtX3F1ZXVlZDsKLSAgICAgICAgICAgIGdzaXplIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplICgqYnVmKTsKLQotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICAgICAgICBpZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoKmJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0NPUlJVUFRFRCkpCi0gICAgICAgICAgICAgICAgZ290byBidWZmZXJfY29ycnVwdGVkOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ290byBlb3M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHZlcmlmeSB0aGF0IGJ1ZmZlciBjb250YWlucyBhIGZ1bGwgZnJhbWUgZm9yIHJhdyB2aWRlbyAqLwotICAgICAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJm9iai0+aW5mbykgIT0gR1NUX1ZJREVPX0ZPUk1BVF9FTkNPREVECi0gICAgICAgICAgICAgICAgJiYgc2l6ZSA8IEdTVF9WSURFT19JTkZPX1NJWkUgKCZvYmotPmluZm8pKSB7Ci0gICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocG9vbCwgIkludmFsaWQgYnVmZmVyIHNpemUsIHRoaXMgaXMgbGlrZWx5ICIKLSAgICAgICAgICAgICAgICAgICJkdWUgdG8gYSBidWcgaW4geW91ciBkcml2ZXIsIGRyb3BwaW5nIik7Ci0gICAgICAgICAgICAgIGdvdG8gYnVmZmVyX2NvcnJ1cHRlZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbnVtX3F1ZXVlZCA9IGdfYXRvbWljX2ludF9nZXQgKCZwb29sLT5udW1fcXVldWVkKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QgKHBvb2wsICJPbmx5ICVpIGJ1ZmZlciBsZWZ0IGluIHRoZSBjYXB0dXJlIHF1ZXVlLiIsCi0gICAgICAgICAgICAgICAgbnVtX3F1ZXVlZCk7Ci0KLSAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgbm8gbW9yZSBidWZmZXIsIGFuZCBjYW4gYWxsb2NhdGUgaXQgdGltZSB0byBkbyBzbyAqLwotICAgICAgICAgICAgaWYgKG51bV9xdWV1ZWQgPT0gMCkgewotICAgICAgICAgICAgICBpZiAoR1NUX1Y0TDJfQUxMT0NBVE9SX0NBTl9BTExPQ0FURSAocG9vbC0+dmFsbG9jYXRvciwgTU1BUCkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9yZXN1cmVjdF9idWZmZXIgKHBvb2wpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogc3RhcnQgY29weWluZyBidWZmZXJzIHdoZW4gd2UgYXJlIHJ1bm5pbmcgbG93IG9uIGJ1ZmZlcnMgKi8KLSAgICAgICAgICAgIGlmIChudW1fcXVldWVkIDwgcG9vbC0+Y29weV90aHJlc2hvbGQpIHsKLSAgICAgICAgICAgICAgR3N0QnVmZmVyICpjb3B5OwotCi0gICAgICAgICAgICAgIGlmIChHU1RfVjRMMl9BTExPQ0FUT1JfQ0FOX0FMTE9DQVRFIChwb29sLT52YWxsb2NhdG9yLCBNTUFQKSkgewotICAgICAgICAgICAgICAgIHJldCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX3Jlc3VyZWN0X2J1ZmZlciAocG9vbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCA9PSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIGNvcHkgdGhlIGJ1ZmZlciAqLwotICAgICAgICAgICAgICBjb3B5ID0gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiAoKmJ1ZiwKLSAgICAgICAgICAgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9BTEwgfCBHU1RfQlVGRkVSX0NPUFlfREVFUCwgMCwgLTEpOwotICAgICAgICAgICAgICBHU1RfTE9HX09CSkVDVCAocG9vbCwgImNvcHkgYnVmZmVyICVwLT4lcCIsICpidWYsIGNvcHkpOwotCi0gICAgICAgICAgICAgIC8qIGFuZCByZXF1ZXVlIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGNhcHR1cmluZyAqLwotICAgICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmICgqYnVmKTsKLSAgICAgICAgICAgICAgKmJ1ZiA9IGNvcHk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldCA9IEdTVF9GTE9XX09LOwotICAgICAgICAgICAgLyogbm90aGluZywgZGF0YSB3YXMgaW5zaWRlIHRoZSBidWZmZXIgd2hlbiB3ZSBkaWQgX2FjcXVpcmUoKSAqLwotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIGJ1ZmZlciBub3QgZnJvbSBvdXIgcG9vbCwgZ3JhYiBhIGZyYW1lIGFuZCBjb3B5IGl0IGludG8gdGhlIHRhcmdldCAqLwotICAgICAgICAgIGlmICgocmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZHFidWYgKHBvb2wsICZ0bXApKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLQotICAgICAgICAgIC8qIEFuIGVtcHR5IGJ1ZmZlciBvbiBjYXB0dXJlIGluZGljYXRlcyB0aGUgZW5kIG9mIHN0cmVhbSAqLwotICAgICAgICAgIGlmIChnc3RfYnVmZmVyX2dldF9zaXplICh0bXApID09IDApIHsKLSAgICAgICAgICAgIGdib29sZWFuIGNvcnJ1cHRlZCA9IEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKHRtcCwKLSAgICAgICAgICAgICAgICBHU1RfQlVGRkVSX0ZMQUdfQ09SUlVQVEVEKTsKLQotICAgICAgICAgICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcmVsZWFzZV9idWZmZXIgKGJwb29sLCB0bXApOwotCi0gICAgICAgICAgICBpZiAoY29ycnVwdGVkKQotICAgICAgICAgICAgICBnb3RvIGJ1ZmZlcl9jb3JydXB0ZWQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGdvdG8gZW9zOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJldCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX2NvcHlfYnVmZmVyIChwb29sLCAqYnVmLCB0bXApOwotCi0gICAgICAgICAgLyogYW4gcXVldWUgdGhlIGJ1ZmZlciBhZ2FpbiBhZnRlciB0aGUgY29weSAqLwotICAgICAgICAgIGdzdF92NGwyX2J1ZmZlcl9wb29sX3JlbGVhc2VfYnVmZmVyIChicG9vbCwgdG1wKTsKLQotICAgICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICAgICAgICBnb3RvIGNvcHlfZmFpbGVkOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19VU0VSUFRSOgotICAgICAgICB7Ci0gICAgICAgICAgc3RydWN0IFVzZXJQdHJEYXRhICpkYXRhOwotCi0gICAgICAgICAgLyogUmVwbGFjZSBvdXIgYnVmZmVyIHdpdGggZG93bnN0cmVhbSBhbGxvY2F0ZWQgYnVmZmVyICovCi0gICAgICAgICAgZGF0YSA9IGdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YSAoR1NUX01JTklfT0JKRUNUICgqYnVmKSwKLSAgICAgICAgICAgICAgR1NUX1Y0TDJfSU1QT1JUX1FVQVJLKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKGJ1ZiwgZGF0YS0+YnVmZmVyKTsKLSAgICAgICAgICBfdW5tYXBfdXNlcnB0cl9mcmFtZSAoZGF0YSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX0RNQUJVRl9JTVBPUlQ6Ci0gICAgICAgIHsKLSAgICAgICAgICBHc3RCdWZmZXIgKnRtcDsKLQotICAgICAgICAgIC8qIFJlcGxhY2Ugb3VyIGJ1ZmZlciB3aXRoIGRvd25zdHJlYW0gYWxsb2NhdGVkIGJ1ZmZlciAqLwotICAgICAgICAgIHRtcCA9IGdzdF9taW5pX29iamVjdF9zdGVhbF9xZGF0YSAoR1NUX01JTklfT0JKRUNUICgqYnVmKSwKLSAgICAgICAgICAgICAgR1NUX1Y0TDJfSU1QT1JUX1FVQVJLKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKGJ1ZiwgdG1wKTsKLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmICh0bXApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLSAgICBjYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORToKLSAgICAgIC8qIHBsYXliYWNrICovCi0gICAgICBzd2l0Y2ggKG9iai0+bW9kZSkgewotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgICAgIC8qIEZJWE1FLCBkbyB3cml0ZSgpICovCi0gICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiaW1wbGVtZW50IHdyaXRlKCkiKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEdTVF9WNEwyX0lPX1VTRVJQVFI6Ci0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGX0lNUE9SVDoKLSAgICAgICAgY2FzZSBHU1RfVjRMMl9JT19ETUFCVUY6Ci0gICAgICAgIGNhc2UgR1NUX1Y0TDJfSU9fTU1BUDoKLSAgICAgICAgewotICAgICAgICAgIEdzdEJ1ZmZlciAqdG9fcXVldWUgPSBOVUxMOwotICAgICAgICAgIEdzdFY0bDJNZW1vcnlHcm91cCAqZ3JvdXA7Ci0gICAgICAgICAgZ2ludCBpbmRleDsKLQotICAgICAgICAgIGlmICgoKmJ1ZiktPnBvb2wgIT0gYnBvb2wpCi0gICAgICAgICAgICBnb3RvIGNvcHlpbmc7Ci0KLSAgICAgICAgICBpZiAoIWdzdF92NGwyX2lzX2J1ZmZlcl92YWxpZCAoKmJ1ZiwgJmdyb3VwKSkKLSAgICAgICAgICAgIGdvdG8gY29weWluZzsKLQotICAgICAgICAgIGluZGV4ID0gZ3JvdXAtPmJ1ZmZlci5pbmRleDsKLQotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAicHJvY2Vzc2luZyBidWZmZXIgJWkgZnJvbSBvdXIgcG9vbCIsIGluZGV4KTsKLQotICAgICAgICAgIGluZGV4ID0gZ3JvdXAtPmJ1ZmZlci5pbmRleDsKLSAgICAgICAgICBpZiAocG9vbC0+YnVmZmVyc1tpbmRleF0gIT0gTlVMTCkgewotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHBvb2wsICJidWZmZXIgJWkgYWxyZWFkeSBxdWV1ZWQsIGNvcHlpbmciLCBpbmRleCk7Ci0gICAgICAgICAgICBnb3RvIGNvcHlpbmc7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogd2UgY2FuIHF1ZXVlIGRpcmVjdGx5ICovCi0gICAgICAgICAgdG9fcXVldWUgPSBnc3RfYnVmZmVyX3JlZiAoKmJ1Zik7Ci0KLSAgICAgICAgY29weWluZzoKLSAgICAgICAgICBpZiAodG9fcXVldWUgPT0gTlVMTCkgewotICAgICAgICAgICAgR3N0QnVmZmVyUG9vbEFjcXVpcmVQYXJhbXMgcGFyYW1zID0geyAwIH07Ci0KLSAgICAgICAgICAgIEdTVF9MT0dfT0JKRUNUIChwb29sLCAiYWxsb2MgYnVmZmVyIGZyb20gb3VyIHBvb2wiKTsKLQotICAgICAgICAgICAgLyogdGhpcyBjYW4gcmV0dXJuIEVPUyBpZiBhbGwgYnVmZmVycyBhcmUgb3V0c3RhbmRpbmcgd2hpY2ggd291bGQKLSAgICAgICAgICAgICAqIGJlIHN0cmFuZ2UgYmVjYXVzZSB3ZSB3b3VsZCBleHBlY3QgdGhlIHVwc3RyZWFtIGVsZW1lbnQgdG8gaGF2ZQotICAgICAgICAgICAgICogYWxsb2NhdGVkIHRoZW0gYW5kIHJldHVybmVkIHRvIHVzLi4gKi8KLSAgICAgICAgICAgIHBhcmFtcy5mbGFncyA9IEdTVF9CVUZGRVJfUE9PTF9BQ1FVSVJFX0ZMQUdfRE9OVFdBSVQ7Ci0gICAgICAgICAgICByZXQgPSBnc3RfYnVmZmVyX3Bvb2xfYWNxdWlyZV9idWZmZXIgKGJwb29sLCAmdG9fcXVldWUsICZwYXJhbXMpOwotICAgICAgICAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgICAgZ290byBhY3F1aXJlX2ZhaWxlZDsKLQotICAgICAgICAgICAgcmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcHJlcGFyZV9idWZmZXIgKHBvb2wsIHRvX3F1ZXVlLCAqYnVmKTsKLSAgICAgICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAodG9fcXVldWUpOwotICAgICAgICAgICAgICBnb3RvIHByZXBhcmVfZmFpbGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmICgocmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcWJ1ZiAocG9vbCwgdG9fcXVldWUpKSAhPSBHU1RfRkxPV19PSykKLSAgICAgICAgICAgIGdvdG8gcXVldWVfZmFpbGVkOwotCi0gICAgICAgICAgLyogaWYgd2UgYXJlIG5vdCBzdHJlYW1pbmcgeWV0ICh0aGlzIGlzIHRoZSBmaXJzdCBidWZmZXIsIHN0YXJ0Ci0gICAgICAgICAgICogc3RyZWFtaW5nIG5vdyAqLwotICAgICAgICAgIGlmICghZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc3RyZWFtb24gKHBvb2wpKSB7Ci0gICAgICAgICAgICAvKiBkb24ndCBjaGVjayByZXR1cm4gdmFsdWUgYmVjYXVzZSBxYnVmIHdvdWxkIGhhdmUgZmFpbGVkICovCi0gICAgICAgICAgICBnc3RfdjRsMl9pc19idWZmZXJfdmFsaWQgKHRvX3F1ZXVlLCAmZ3JvdXApOwotCi0gICAgICAgICAgICAvKiBxYnVmIGhhcyBzdG9yZWQgdG9fcXVldWUgYnVmZmVyIGJ1dCB3ZSBhcmUgbm90IGluCi0gICAgICAgICAgICAgKiBzdHJlYW1pbmcgc3RhdGUsIHNvIHRoZSBmbHVzaCBsb2dpYyB3b24ndCBiZSBwZXJmb3JtZWQuCi0gICAgICAgICAgICAgKiBUbyBhdm9pZCBsZWFrcywgZmx1c2ggdGhlIGFsbG9jYXRvciBhbmQgcmVzdG9yZSB0aGUgcXVldWVkCi0gICAgICAgICAgICAgKiBidWZmZXIgYXMgbm9uLXF1ZXVlZCAqLwotICAgICAgICAgICAgZ3N0X3Y0bDJfYWxsb2NhdG9yX2ZsdXNoIChwb29sLT52YWxsb2NhdG9yKTsKLQotICAgICAgICAgICAgcG9vbC0+YnVmZmVyc1tncm91cC0+YnVmZmVyLmluZGV4XSA9IE5VTEw7Ci0KLSAgICAgICAgICAgIGdzdF9taW5pX29iamVjdF9zZXRfcWRhdGEgKEdTVF9NSU5JX09CSkVDVCAodG9fcXVldWUpLAotICAgICAgICAgICAgICAgIEdTVF9WNEwyX0lNUE9SVF9RVUFSSywgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmICh0b19xdWV1ZSk7Ci0gICAgICAgICAgICBnX2F0b21pY19pbnRfYWRkICgmcG9vbC0+bnVtX3F1ZXVlZCwgLTEpOwotICAgICAgICAgICAgZ290byBzdGFydF9mYWlsZWQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogUmVtb3ZlIG91ciByZWYsIHdlIHdpbGwgc3RpbGwgaG9sZCB0aGlzIGJ1ZmZlciBpbiBhY3F1aXJlIGFzIG5lZWRlZCwKLSAgICAgICAgICAgKiBvdGhlcndpc2UgdGhlIHBvb2wgd2lsbCB0aGluayBpdCBpcyBvdXRzdGFuZGluZyBhbmQgd2lsbCByZWZ1c2UgdG8gc3RvcC4gKi8KLSAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmICh0b19xdWV1ZSk7Ci0KLSAgICAgICAgICBpZiAoZ19hdG9taWNfaW50X2dldCAoJnBvb2wtPm51bV9xdWV1ZWQpID49IHBvb2wtPm1pbl9sYXRlbmN5KSB7Ci0gICAgICAgICAgICBHc3RCdWZmZXIgKm91dDsKLSAgICAgICAgICAgIC8qIGFsbCBidWZmZXJzIGFyZSBxdWV1ZWQsIHRyeSB0byBkZXF1ZXVlIG9uZSBhbmQgcmVsZWFzZSBpdCBiYWNrCi0gICAgICAgICAgICAgKiBpbnRvIHRoZSBwb29sIHNvIHRoYXQgX2FjcXVpcmUgY2FuIGdldCB0byBpdCBhZ2Fpbi4gKi8KLSAgICAgICAgICAgIHJldCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX2RxYnVmIChwb29sLCAmb3V0KTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gR1NUX0ZMT1dfT0sgJiYgb3V0LT5wb29sID09IE5VTEwpCi0gICAgICAgICAgICAgIC8qIHJlbGVhc2UgdGhlIHJlbmRlcmVkIGJ1ZmZlciBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgd2FrZXMgdXAgYW55Ci0gICAgICAgICAgICAgICAqIHRocmVhZCB3YWl0aW5nIGZvciBhIGJ1ZmZlciBpbiBfYWNxdWlyZSgpLiAqLwotICAgICAgICAgICAgICBnc3RfdjRsMl9idWZmZXJfcG9vbF9yZWxlYXNlX2J1ZmZlciAoYnBvb2wsIG91dCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotZG9uZToKLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWNvcHlfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImZhaWxlZCB0byBjb3B5IGJ1ZmZlciIpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLWJ1ZmZlcl9jb3JydXB0ZWQ6Ci0gIHsKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBvb2wsICJEcm9wcGluZyBjb3JydXB0ZWQgYnVmZmVyIHdpdGhvdXQgcGF5bG9hZCIpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKCpidWYpOwotICAgICpidWYgPSBOVUxMOwotICAgIHJldHVybiBHU1RfVjRMMl9GTE9XX0NPUlJVUFRFRF9CVUZGRVI7Ci0gIH0KLWVvczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBvb2wsICJlbmQgb2Ygc3RyZWFtIHJlYWNoZWQiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmICgqYnVmKTsKLSAgICAqYnVmID0gTlVMTDsKLSAgICByZXR1cm4gR1NUX1Y0TDJfRkxPV19MQVNUX0JVRkZFUjsKLSAgfQotYWNxdWlyZV9mYWlsZWQ6Ci0gIHsKLSAgICBpZiAocmV0ID09IEdTVF9GTE9XX0ZMVVNISU5HKQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocG9vbCwgImZsdXNoaW5nIik7Ci0gICAgZWxzZQotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwb29sLCAiZmFpbGVkIHRvIGFjcXVpcmUgYSBidWZmZXI6ICVzIiwKLSAgICAgICAgICBnc3RfZmxvd19nZXRfbmFtZSAocmV0KSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotcHJlcGFyZV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChwb29sLCAiZmFpbGVkIHRvIHByZXBhcmUgZGF0YSIpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLXF1ZXVlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBvb2wsICJmYWlsZWQgdG8gcXVldWUgYnVmZmVyIik7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotc3RhcnRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAocG9vbCwgImZhaWxlZCB0byBzdGFydCBzdHJlYW1pbmciKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLX0KLQotdm9pZAotZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc2V0X290aGVyX3Bvb2wgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCwKLSAgICBHc3RCdWZmZXJQb29sICogb3RoZXJfcG9vbCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoIWdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmUgKEdTVF9CVUZGRVJfUE9PTCAocG9vbCkpKTsKLQotICBpZiAocG9vbC0+b3RoZXJfcG9vbCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sLT5vdGhlcl9wb29sKTsKLSAgcG9vbC0+b3RoZXJfcG9vbCA9IGdzdF9vYmplY3RfcmVmIChvdGhlcl9wb29sKTsKLX0KLQotdm9pZAotZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfY29weV9hdF90aHJlc2hvbGQgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCwgZ2Jvb2xlYW4gY29weSkKLXsKLSAgR1NUX09CSkVDVF9MT0NLIChwb29sKTsKLSAgcG9vbC0+ZW5hYmxlX2NvcHlfdGhyZXNob2xkID0gY29weTsKLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHBvb2wpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaCBiL3N5cy92NGwyL2dzdHY0bDJidWZmZXJwb29sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMmY1Y2QuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMmJ1ZmZlcnBvb2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAgICAgICAgICAgICAgIDIwMDYgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICogICAgICAgICAgICAgICAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMgLSBodHRwOi8vd3d3LnRpLmNvbS8KLSAqCi0gKiBnc3R2NGwyYnVmZmVycG9vbC5oIFY0TDIgYnVmZmVyIHBvb2wgY2xhc3MKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1Y0TDJfQlVGRkVSX1BPT0xfSF9fCi0jZGVmaW5lIF9fR1NUX1Y0TDJfQlVGRkVSX1BPT0xfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyQnVmZmVyUG9vbCBHc3RWNGwyQnVmZmVyUG9vbDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyQnVmZmVyUG9vbENsYXNzIEdzdFY0bDJCdWZmZXJQb29sQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMk1ldGEgR3N0VjRsMk1ldGE7Ci0KLSNpbmNsdWRlICJnc3R2NGwyb2JqZWN0LmgiCi0jaW5jbHVkZSAiZ3N0djRsMmFsbG9jYXRvci5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh2NGwyYnVmZmVyX2RlYnVnKTsKLQotR19CRUdJTl9ERUNMUwotCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMl9CVUZGRVJfUE9PTCAgICAgIChnc3RfdjRsMl9idWZmZXJfcG9vbF9nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfSVNfVjRMMl9CVUZGRVJfUE9PTChvYmopICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgR1NUX1RZUEVfVjRMMl9CVUZGRVJfUE9PTCkpCi0jZGVmaW5lIEdTVF9WNEwyX0JVRkZFUl9QT09MKG9iaikgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9WNEwyX0JVRkZFUl9QT09MLCBHc3RWNGwyQnVmZmVyUG9vbCkpCi0jZGVmaW5lIEdTVF9WNEwyX0JVRkZFUl9QT09MX0NBU1Qob2JqKSAoKEdzdFY0bDJCdWZmZXJQb29sKikob2JqKSkKLQotLyogVGhpcyBmbG93IHJldHVybiBpcyB1c2VkIHRvIGluZGljYXRlZCB0aGF0IHRoZSBsYXN0IGJ1ZmZlciBvZiBhCi0gKiBkcmFpbiBvciBhIHJlc29sdHVpb24gY2hhbmdlIGhhcyBiZWVuIGZvdW5kLiBUaGlzIHNob3VsZCBub3JtYWxseQotICogb25seSBvY2N1cmUgZm9yIG1lbS0yLW1lbSBkZXZpY2VzLiAqLwotI2RlZmluZSBHU1RfVjRMMl9GTE9XX0xBU1RfQlVGRkVSIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTCi0KLS8qIFRoaXMgZmxvdyByZXR1cm4gaXMgdXNlZCB0byBpbmRpY2F0ZWQgdGhhdCB0aGUgcmV0dXJuZWQgYnVmZmVyIHdhcyBtYXJrZWQKLSAqIHdpdGggdGhlIGVycm9yIGZsYWcgYW5kIGhhZCBubyBwYXlsb2FkLiBUaGlzIGVycm9yIHNob3VsZCBiZSByZWNvdmVyZWQgYnkKLSAqIHNpbXBseSB3YWl0aW5nIGZvciBuZXh0IGJ1ZmZlci4gKi8KLSNkZWZpbmUgR1NUX1Y0TDJfRkxPV19DT1JSVVBURURfQlVGRkVSIEdTVF9GTE9XX0NVU1RPTV9TVUNDRVNTXzEKLQotc3RydWN0IF9Hc3RWNGwyQnVmZmVyUG9vbAotewotICBHc3RCdWZmZXJQb29sIHBhcmVudDsKLQotICBHc3RWNGwyT2JqZWN0ICpvYmo7ICAgICAgICAvKiB0aGUgdjRsMiBvYmplY3QgKi8KLSAgZ2ludCB2aWRlb19mZDsgICAgICAgICAgICAgLyogYSBkdXAoMikgb2YgdGhlIHY0bDJvYmplY3QncyB2aWRlb19mZCAqLwotICBHc3RQb2xsICpwb2xsOyAgICAgICAgICAgICAvKiBhIHBvbGwgZm9yIHZpZGVvX2ZkICovCi0gIEdzdFBvbGxGRCBwb2xsZmQ7Ci0gIGdib29sZWFuIGNhbl9wb2xsX2RldmljZTsKLQotICBnYm9vbGVhbiBlbXB0eTsKLSAgR0NvbmQgZW1wdHlfY29uZDsKLQotICBHc3RWNGwyQWxsb2NhdG9yICp2YWxsb2NhdG9yOwotICBHc3RBbGxvY2F0b3IgKmFsbG9jYXRvcjsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0gIEdzdEJ1ZmZlclBvb2wgKm90aGVyX3Bvb2w7Ci0gIGd1aW50IHNpemU7Ci0gIEdzdFZpZGVvSW5mbyBjYXBzX2luZm87ICAgLyogRGVmYXVsdCB2aWRlbyBpbmZvcm1hdGlvbiAqLwotCi0gIGdib29sZWFuIGFkZF92aWRlb21ldGE7ICAgIC8qIHNldCBpZiB2aWRlbyBtZXRhIHNob3VsZCBiZSBhZGRlZCAqLwotICBnYm9vbGVhbiBlbmFibGVfY29weV90aHJlc2hvbGQ7IC8qIElmIGNvcHlfdGhyZXNob2xkIHNob3VsZCBiZSBzZXQgKi8KLQotICBndWludCBtaW5fbGF0ZW5jeTsgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVycyB3ZSB3aWxsIGhvbGQgKi8KLSAgZ3VpbnQgbWF4X2xhdGVuY3k7ICAgICAgICAgLyogbnVtYmVyIG9mIGJ1ZmZlcnMgd2UgY2FuIGhvbGQgKi8KLSAgZ3VpbnQgbnVtX3F1ZXVlZDsgICAgICAgICAgLyogbnVtYmVyIG9mIGJ1ZmZlcnMgcXVldWVkIGluIHRoZSBkcml2ZXIgKi8KLSAgZ3VpbnQgY29weV90aHJlc2hvbGQ7ICAgICAgLyogd2hlbiBvdXIgcG9vbCBydW5zIGxvd2VyLCBzdGFydCBoYW5kaW5nIG91dCBjb3BpZXMgKi8KLQotICBnYm9vbGVhbiBzdHJlYW1pbmc7Ci0gIGdib29sZWFuIGZsdXNoaW5nOwotCi0gIEdzdEJ1ZmZlciAqYnVmZmVyc1tWSURFT19NQVhfRlJBTUVdOwotCi0gIC8qIHNpZ25hbCBoYW5kbGVycyAqLwotICBndWxvbmcgZ3JvdXBfcmVsZWFzZWRfaGFuZGxlcjsKLQotICAvKiBDb250cm9sIHRvIHdhcm4gb25seSBvbmNlIG9uIGJ1Z2d5IGZlaWxkIGRyaXZlciBidWcgKi8KLSAgZ2Jvb2xlYW4gaGFzX3dhcm5lZF9vbl9idWdneV9maWVsZDsKLX07Ci0KLXN0cnVjdCBfR3N0VjRsMkJ1ZmZlclBvb2xDbGFzcwotewotICBHc3RCdWZmZXJQb29sQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfZ2V0X3R5cGUgKHZvaWQpOwotCi1Hc3RCdWZmZXJQb29sICogICAgIGdzdF92NGwyX2J1ZmZlcl9wb29sX25ldyAgICAgKEdzdFY0bDJPYmplY3QgKm9iaiwgR3N0Q2FwcyAqY2Fwcyk7Ci0KLUdzdEZsb3dSZXR1cm4gICAgICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcHJvY2VzcyAoR3N0VjRsMkJ1ZmZlclBvb2wgKiBicG9vbCwgR3N0QnVmZmVyICoqIGJ1Zik7Ci0KLXZvaWQgICAgICAgICAgICAgICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc2V0X290aGVyX3Bvb2wgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdEJ1ZmZlclBvb2wgKiBvdGhlcl9wb29sKTsKLXZvaWQgICAgICAgICAgICAgICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfY29weV9hdF90aHJlc2hvbGQgKEdzdFY0bDJCdWZmZXJQb29sICogcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGNvcHkpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLypfX0dTVF9WNEwyX0JVRkZFUl9QT09MX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5jIGIvc3lzL3Y0bDIvZ3N0djRsMmNvbG9yYmFsYW5jZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjM2OTc4Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgICAgICAgICAgICAyMDA2IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiBnc3R2NGwyY29sb3JiYWxhbmNlLmM6IGNvbG9yIGJhbGFuY2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBWNEwyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgImdzdHY0bDJjb2xvcmJhbGFuY2UuaCIKLSNpbmNsdWRlICJnc3R2NGwyb2JqZWN0LmgiCi0KLSNkZWZpbmUgZ3N0X3Y0bDJfY29sb3JfYmFsYW5jZV9jaGFubmVsX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEUgKEdzdFY0bDJDb2xvckJhbGFuY2VDaGFubmVsLAotICAgIGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY2hhbm5lbCwgR1NUX1RZUEVfQ09MT1JfQkFMQU5DRV9DSEFOTkVMKTsKLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY2hhbm5lbF9jbGFzc19pbml0IChHc3RWNGwyQ29sb3JCYWxhbmNlQ2hhbm5lbENsYXNzICoKLSAgICBrbGFzcykKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY2hhbm5lbF9pbml0IChHc3RWNGwyQ29sb3JCYWxhbmNlQ2hhbm5lbCAqIGNoYW5uZWwpCi17Ci0gIGNoYW5uZWwtPmlkID0gKGd1aW50MzIpIC0gMTsKLX0KLQotc3RhdGljIEdfR05VQ19VTlVTRUQgZ2Jvb2xlYW4KLWdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY29udGFpbnNfY2hhbm5lbCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgR3N0VjRsMkNvbG9yQmFsYW5jZUNoYW5uZWwgKiB2NGwyY2hhbm5lbCkKLXsKLSAgY29uc3QgR0xpc3QgKml0ZW07Ci0KLSAgZm9yIChpdGVtID0gdjRsMm9iamVjdC0+Y29sb3JzOyBpdGVtICE9IE5VTEw7IGl0ZW0gPSBpdGVtLT5uZXh0KQotICAgIGlmIChpdGVtLT5kYXRhID09IHY0bDJjaGFubmVsKQotICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1jb25zdCBHTGlzdCAqCi1nc3RfdjRsMl9jb2xvcl9iYWxhbmNlX2xpc3RfY2hhbm5lbHMgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KQotewotICByZXR1cm4gdjRsMm9iamVjdC0+Y29sb3JzOwotfQotCi12b2lkCi1nc3RfdjRsMl9jb2xvcl9iYWxhbmNlX3NldF92YWx1ZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqIGNoYW5uZWwsIGdpbnQgdmFsdWUpCi17Ci0KLSAgR3N0VjRsMkNvbG9yQmFsYW5jZUNoYW5uZWwgKnY0bDJjaGFubmVsID0KLSAgICAgIEdTVF9WNEwyX0NPTE9SX0JBTEFOQ0VfQ0hBTk5FTCAoY2hhbm5lbCk7Ci0KLSAgLyogYXNzZXJ0IHRoYXQgd2UncmUgb3BlbmVkIGFuZCB0aGF0IHdlJ3JlIHVzaW5nIGEga25vd24gaXRlbSAqLwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY29udGFpbnNfY2hhbm5lbCAodjRsMm9iamVjdCwKLSAgICAgICAgICB2NGwyY2hhbm5lbCkpOwotCi0gIGdzdF92NGwyX3NldF9hdHRyaWJ1dGUgKHY0bDJvYmplY3QsIHY0bDJjaGFubmVsLT5pZCwgdmFsdWUpOwotfQotCi1naW50Ci1nc3RfdjRsMl9jb2xvcl9iYWxhbmNlX2dldF92YWx1ZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqIGNoYW5uZWwpCi17Ci0gIEdzdFY0bDJDb2xvckJhbGFuY2VDaGFubmVsICp2NGwyY2hhbm5lbCA9Ci0gICAgICBHU1RfVjRMMl9DT0xPUl9CQUxBTkNFX0NIQU5ORUwgKGNoYW5uZWwpOwotICBnaW50IHZhbHVlOwotCi0gIC8qIGFzc2VydCB0aGF0IHdlJ3JlIG9wZW5lZCBhbmQgdGhhdCB3ZSdyZSB1c2luZyBhIGtub3duIGl0ZW0gKi8KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY29udGFpbnNfY2hhbm5lbCAodjRsMm9iamVjdCwKLSAgICAgICAgICB2NGwyY2hhbm5lbCksIDApOwotCi0gIGlmICghZ3N0X3Y0bDJfZ2V0X2F0dHJpYnV0ZSAodjRsMm9iamVjdCwgdjRsMmNoYW5uZWwtPmlkLCAmdmFsdWUpKQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiB2YWx1ZTsKLX0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaCBiL3N5cy92NGwyL2dzdHY0bDJjb2xvcmJhbGFuY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNiZTBkNC4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwyY29sb3JiYWxhbmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogZ3N0djRsMmNvbG9yYmFsYW5jZS5oOiBjb2xvciBiYWxhbmNlIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgVjRMMgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfVjRMMl9DT0xPUl9CQUxBTkNFX0hfXwotI2RlZmluZSBfX0dTVF9WNEwyX0NPTE9SX0JBTEFOQ0VfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2NvbG9yYmFsYW5jZS5oPgotI2luY2x1ZGUgInY0bDJfY2FsbHMuaCIKLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1Y0TDJfQ09MT1JfQkFMQU5DRV9DSEFOTkVMIFwKLSAgKGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfY2hhbm5lbF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1Y0TDJfQ09MT1JfQkFMQU5DRV9DSEFOTkVMKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9WNEwyX0NPTE9SX0JBTEFOQ0VfQ0hBTk5FTCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFY0bDJDb2xvckJhbGFuY2VDaGFubmVsKSkKLSNkZWZpbmUgR1NUX1Y0TDJfQ09MT1JfQkFMQU5DRV9DSEFOTkVMX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgR1NUX1RZUEVfVjRMMl9DT0xPUl9CQUxBTkNFX0NIQU5ORUwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RWNGwyQ29sb3JCYWxhbmNlQ2hhbm5lbENsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJfQ09MT1JfQkFMQU5DRV9DSEFOTkVMKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9WNEwyX0NPTE9SX0JBTEFOQ0VfQ0hBTk5FTCkpCi0jZGVmaW5lIEdTVF9JU19WNEwyX0NPTE9SX0JBTEFOQ0VfQ0hBTk5FTF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1Y0TDJfQ09MT1JfQkFMQU5DRV9DSEFOTkVMKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJDb2xvckJhbGFuY2VDaGFubmVsIHsKLSAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCBwYXJlbnQ7Ci0KLSAgZ3VpbnQzMiBpZDsKLX0gR3N0VjRsMkNvbG9yQmFsYW5jZUNoYW5uZWw7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyQ29sb3JCYWxhbmNlQ2hhbm5lbENsYXNzIHsKLSAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbENsYXNzIHBhcmVudDsKLX0gR3N0VjRsMkNvbG9yQmFsYW5jZUNoYW5uZWxDbGFzczsKLQotR1R5cGUgZ3N0X3Y0bDJfY29sb3JfYmFsYW5jZV9jaGFubmVsX2dldF90eXBlICAgKHZvaWQpOwotCi1jb25zdCBHTGlzdCAqICAgZ3N0X3Y0bDJfY29sb3JfYmFsYW5jZV9saXN0X2NoYW5uZWxzICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCk7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfdjRsMl9jb2xvcl9iYWxhbmNlX3NldF92YWx1ZSAgICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqIGNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHZhbHVlKTsKLQotZ2ludCAgICAgICAgICAgIGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfZ2V0X3ZhbHVlICAgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDb2xvckJhbGFuY2VDaGFubmVsICogY2hhbm5lbCk7Ci0KLSNkZWZpbmUgR1NUX0lNUExFTUVOVF9WNEwyX0NPTE9SX0JBTEFOQ0VfTUVUSE9EUyhUeXBlLCBpbnRlcmZhY2VfYXNfZnVuY3Rpb24pICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgY29uc3QgR0xpc3QgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfY29sb3JfYmFsYW5jZV9saXN0X2NoYW5uZWxzIChHc3RDb2xvckJhbGFuY2UgKiBiYWxhbmNlKSAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIGJhbGFuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfbGlzdF9jaGFubmVscyh0aGlzLT52NGwyb2JqZWN0KTsgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9jb2xvcl9iYWxhbmNlX3NldF92YWx1ZSAoR3N0Q29sb3JCYWxhbmNlICogYmFsYW5jZSwgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDb2xvckJhbGFuY2VDaGFubmVsICogY2hhbm5lbCwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIGJhbGFuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3Y0bDJfY29sb3JfYmFsYW5jZV9zZXRfdmFsdWUodGhpcy0+djRsMm9iamVjdCwgY2hhbm5lbCwgdmFsdWUpOyAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGdpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2NvbG9yX2JhbGFuY2VfZ2V0X3ZhbHVlIChHc3RDb2xvckJhbGFuY2UgKiBiYWxhbmNlLCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENvbG9yQmFsYW5jZUNoYW5uZWwgKiBjaGFubmVsKSAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIGJhbGFuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIGdzdF92NGwyX2NvbG9yX2JhbGFuY2VfZ2V0X3ZhbHVlKHRoaXMtPnY0bDJvYmplY3QsIGNoYW5uZWwpOyAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBHc3RDb2xvckJhbGFuY2VUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9jb2xvcl9iYWxhbmNlX2dldF9iYWxhbmNlX3R5cGUgKEdzdENvbG9yQmFsYW5jZSAqIGJhbGFuY2UpICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIEdTVF9DT0xPUl9CQUxBTkNFX0hBUkRXQVJFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9jb2xvcl9iYWxhbmNlX2ludGVyZmFjZV9pbml0IChHc3RDb2xvckJhbGFuY2VJbnRlcmZhY2UgKiBpZmFjZSkgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qIGRlZmF1bHQgdmlydHVhbCBmdW5jdGlvbnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPmxpc3RfY2hhbm5lbHMgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2NvbG9yX2JhbGFuY2VfbGlzdF9jaGFubmVsczsgICAgICAgXAotICBpZmFjZS0+c2V0X3ZhbHVlID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9jb2xvcl9iYWxhbmNlX3NldF92YWx1ZTsgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5nZXRfdmFsdWUgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2NvbG9yX2JhbGFuY2VfZ2V0X3ZhbHVlOyAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPmdldF9iYWxhbmNlX3R5cGUgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX2NvbG9yX2JhbGFuY2VfZ2V0X2JhbGFuY2VfdHlwZTsgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0KLUdfRU5EX0RFQ0xTCi0jZW5kaWYgLyogX19HU1RfVjRMMl9DT0xPUl9CQUxBTkNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMmRldmljZXByb3ZpZGVyLmMgYi9zeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjYTEzNS4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU5NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMiBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0gKgotICogZ3N0djRsMmRldmljZXByb3ZpZGVyLmM6IFY0bDIgZGV2aWNlIHByb2JpbmcgYW5kIG1vbml0b3JpbmcKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3R2NGwyZGV2aWNlcHJvdmlkZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3R2NGwyb2JqZWN0LmgiCi0jaW5jbHVkZSAidjRsMl9jYWxscy5oIgotI2luY2x1ZGUgInY0bDItdXRpbHMuaCIKLQotI2lmZGVmIEhBVkVfR1VERVYKLSNpbmNsdWRlIDxndWRldi9ndWRldi5oPgotI2VuZGlmCi0KLXN0YXRpYyBHc3RWNGwyRGV2aWNlICpnc3RfdjRsMl9kZXZpY2VfbmV3IChjb25zdCBnY2hhciAqIGRldmljZV9wYXRoLAotICAgIGNvbnN0IGdjaGFyICogZGV2aWNlX25hbWUsIEdzdENhcHMgKiBjYXBzLCBHc3RWNGwyRGV2aWNlVHlwZSB0eXBlLAotICAgIEdzdFN0cnVjdHVyZSAqIHByb3BzKTsKLQotCi1HX0RFRklORV9UWVBFIChHc3RWNGwyRGV2aWNlUHJvdmlkZXIsIGdzdF92NGwyX2RldmljZV9wcm92aWRlciwKLSAgICBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIpOwotCi1zdGF0aWMgdm9pZCBnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIEdMaXN0ICpnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfcHJvYmUgKEdzdERldmljZVByb3ZpZGVyICogcHJvdmlkZXIpOwotCi0jaWZkZWYgSEFWRV9HVURFVgotc3RhdGljIGdib29sZWFuIGdzdF92NGwyX2RldmljZV9wcm92aWRlcl9zdGFydCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcik7Ci1zdGF0aWMgdm9pZCBnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfc3RvcCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcik7Ci0jZW5kaWYKLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfZGV2aWNlX3Byb3ZpZGVyX2NsYXNzX2luaXQgKEdzdFY0bDJEZXZpY2VQcm92aWRlckNsYXNzICoga2xhc3MpCi17Ci0gIEdzdERldmljZVByb3ZpZGVyQ2xhc3MgKmRtX2NsYXNzID0gR1NUX0RFVklDRV9QUk9WSURFUl9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotCi0gIGRtX2NsYXNzLT5wcm9iZSA9IGdzdF92NGwyX2RldmljZV9wcm92aWRlcl9wcm9iZTsKLQotI2lmZGVmIEhBVkVfR1VERVYKLSAgZG1fY2xhc3MtPnN0YXJ0ID0gZ3N0X3Y0bDJfZGV2aWNlX3Byb3ZpZGVyX3N0YXJ0OwotICBkbV9jbGFzcy0+c3RvcCA9IGdzdF92NGwyX2RldmljZV9wcm92aWRlcl9zdG9wOwotI2VuZGlmCi0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfZmluYWxpemU7Ci0KLSAgZ3N0X2RldmljZV9wcm92aWRlcl9jbGFzc19zZXRfc3RhdGljX21ldGFkYXRhIChkbV9jbGFzcywKLSAgICAgICJWaWRlbyAodmlkZW80bGludXgyKSBEZXZpY2UgUHJvdmlkZXIiLCAiU291cmNlL1NpbmsvVmlkZW8iLAotICAgICAgIkxpc3QgYW5kIG1vbml0b3IgdmlkZW80bGludXgyIHNvdXJjZSBhbmQgc2luayBkZXZpY2VzIiwKLSAgICAgICJPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfaW5pdCAoR3N0VjRsMkRldmljZVByb3ZpZGVyICogcHJvdmlkZXIpCi17Ci0jaWZkZWYgSEFWRV9HVURFVgotICBnX2NvbmRfaW5pdCAoJnByb3ZpZGVyLT5zdGFydGVkX2NvbmQpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0jaWZkZWYgSEFWRV9HVURFVgotICBHc3RWNGwyRGV2aWNlUHJvdmlkZXIgKnByb3ZpZGVyID0gR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSIChvYmplY3QpOwotCi0gIGdfY29uZF9jbGVhciAoJnByb3ZpZGVyLT5zdGFydGVkX2NvbmQpOwotI2VuZGlmCi0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF92NGwyX2RldmljZV9wcm92aWRlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIEdzdFY0bDJEZXZpY2UgKgotZ3N0X3Y0bDJfZGV2aWNlX3Byb3ZpZGVyX3Byb2JlX2RldmljZSAoR3N0VjRsMkRldmljZVByb3ZpZGVyICogcHJvdmlkZXIsCi0gICAgY29uc3QgZ2NoYXIgKiBkZXZpY2VfcGF0aCwgY29uc3QgZ2NoYXIgKiBkZXZpY2VfbmFtZSwgR3N0U3RydWN0dXJlICogcHJvcHMpCi17Ci0gIEdzdFY0bDJPYmplY3QgKnY0bDJvYmogPSBOVUxMOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RWNGwyRGV2aWNlICpkZXZpY2UgPSBOVUxMOwotICBzdHJ1Y3Qgc3RhdCBzdDsKLSAgR3N0VjRsMkRldmljZVR5cGUgdHlwZSA9IEdTVF9WNEwyX0RFVklDRV9UWVBFX0lOVkFMSUQ7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHByb3BzICE9IE5VTEwsIE5VTEwpOwotCi0gIGlmIChzdGF0IChkZXZpY2VfcGF0aCwgJnN0KSA9PSAtMSkKLSAgICBnb3RvIGRlc3Ryb3k7Ci0KLSAgaWYgKCFTX0lTQ0hSIChzdC5zdF9tb2RlKSkKLSAgICBnb3RvIGRlc3Ryb3k7Ci0KLSAgdjRsMm9iaiA9IGdzdF92NGwyX29iamVjdF9uZXcgKChHc3RFbGVtZW50ICopIHByb3ZpZGVyLAotICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBkZXZpY2VfcGF0aCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgaWYgKCFnc3RfdjRsMl9vcGVuICh2NGwyb2JqKSkKLSAgICBnb3RvIGRlc3Ryb3k7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BzLCAiZGV2aWNlLmFwaSIsIEdfVFlQRV9TVFJJTkcsICJ2NGwyIiwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgImRldmljZS5wYXRoIiwgR19UWVBFX1NUUklORywgZGV2aWNlX3BhdGgsIE5VTEwpOwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgInY0bDIuZGV2aWNlLmRyaXZlciIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICB2NGwyb2JqLT52Y2FwLmRyaXZlciwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgInY0bDIuZGV2aWNlLmNhcmQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgdjRsMm9iai0+dmNhcC5jYXJkLCBOVUxMKTsKLSAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BzLCAidjRsMi5kZXZpY2UuYnVzX2luZm8iLCBHX1RZUEVfU1RSSU5HLAotICAgICAgdjRsMm9iai0+dmNhcC5idXNfaW5mbywgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgInY0bDIuZGV2aWNlLnZlcnNpb24iLCBHX1RZUEVfVUlOVCwKLSAgICAgIHY0bDJvYmotPnZjYXAudmVyc2lvbiwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgInY0bDIuZGV2aWNlLmNhcGFiaWxpdGllcyIsIEdfVFlQRV9VSU5ULAotICAgICAgdjRsMm9iai0+dmNhcC5jYXBhYmlsaXRpZXMsIE5VTEwpOwotICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcHMsICJ2NGwyLmRldmljZS5kZXZpY2VfY2FwcyIsIEdfVFlQRV9VSU5ULAotICAgICAgdjRsMm9iai0+dmNhcC5kZXZpY2VfY2FwcywgTlVMTCk7Ci0KLSAgaWYgKHY0bDJvYmotPmRldmljZV9jYXBzICYKLSAgICAgIChWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRV9NUExBTkUpKQotICAgIHR5cGUgPSBHU1RfVjRMMl9ERVZJQ0VfVFlQRV9TT1VSQ0U7Ci0KLSAgaWYgKHY0bDJvYmotPmRldmljZV9jYXBzICYKLSAgICAgIChWNEwyX0NBUF9WSURFT19PVVRQVVQgfCBWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FKSkgewotICAgIC8qIFdlIGlnbm9yZSBNMk0gZGV2aWNlcyB0aGF0IGFyZSBib3RoIGNhcHR1cmUgYW5kIG91dHB1dCBmb3Igbm93Ci0gICAgICogVGhlIHByb3ZpZGVyIGlzIG5vdCBmb3IgdGhlbSAqLwotICAgIGlmICh0eXBlICE9IEdTVF9WNEwyX0RFVklDRV9UWVBFX0lOVkFMSUQpCi0gICAgICBnb3RvIGNsb3NlOwotCi0gICAgdHlwZSA9IEdTVF9WNEwyX0RFVklDRV9UWVBFX1NJTks7Ci0KLSAgICAvKiBXZSBoYXZlIG9wZW5lZCBhcyBhIGNhcHR1cmUgYXMgd2UgZGlkbid0IGtub3csIG5vdyB0aGF0IGtub3csCi0gICAgICogbGV0J3MgZml4ZWQgaXQgKi8KLSAgICBpZiAodjRsMm9iai0+ZGV2aWNlX2NhcHMgJiBWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FKQotICAgICAgdjRsMm9iai0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORTsKLSAgICBlbHNlCi0gICAgICB2NGwyb2JqLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0gIH0KLQotICBpZiAodHlwZSA9PSBHU1RfVjRMMl9ERVZJQ0VfVFlQRV9JTlZBTElEKQotICAgIGdvdG8gY2xvc2U7Ci0KLSAgY2FwcyA9IGdzdF92NGwyX29iamVjdF9nZXRfY2FwcyAodjRsMm9iaiwgTlVMTCk7Ci0KLSAgaWYgKGNhcHMgPT0gTlVMTCkKLSAgICBnb3RvIGNsb3NlOwotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKGNhcHMpKSB7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICAgIGdvdG8gY2xvc2U7Ci0gIH0KLQotICBkZXZpY2UgPSBnc3RfdjRsMl9kZXZpY2VfbmV3IChkZXZpY2VfcGF0aCwKLSAgICAgIGRldmljZV9uYW1lID8gZGV2aWNlX25hbWUgOiAoZ2NoYXIgKikgdjRsMm9iai0+dmNhcC5jYXJkLCBjYXBzLCB0eXBlLAotICAgICAgcHJvcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLWNsb3NlOgotCi0gIGdzdF92NGwyX2Nsb3NlICh2NGwyb2JqKTsKLQotZGVzdHJveToKLQotICBpZiAodjRsMm9iaikKLSAgICBnc3RfdjRsMl9vYmplY3RfZGVzdHJveSAodjRsMm9iaik7Ci0KLSAgaWYgKHByb3BzKQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHJvcHMpOwotCi0gIHJldHVybiBkZXZpY2U7Ci19Ci0KLQotc3RhdGljIEdMaXN0ICoKLWdzdF92NGwyX2RldmljZV9wcm92aWRlcl9wcm9iZSAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgR3N0VjRsMkRldmljZVByb3ZpZGVyICpzZWxmID0gR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcik7Ci0gIEdzdFY0bDJJdGVyYXRvciAqaXQ7Ci0gIEdMaXN0ICpkZXZpY2VzID0gTlVMTDsKLQotICBpdCA9IGdzdF92NGwyX2l0ZXJhdG9yX25ldyAoKTsKLQotICB3aGlsZSAoZ3N0X3Y0bDJfaXRlcmF0b3JfbmV4dCAoaXQpKSB7Ci0gICAgR3N0U3RydWN0dXJlICpwcm9wczsKLSAgICBHc3RWNGwyRGV2aWNlICpkZXZpY2U7Ci0KLSAgICBwcm9wcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidjRsMi1wcm9wbGlzdCIsICJkZXZpY2UucGF0aCIsIEdfVFlQRV9TVFJJTkcsCi0gICAgICAgIGl0LT5kZXZpY2VfcGF0aCwgInVkZXYtcHJvYmVkIiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICBkZXZpY2UgPSBnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfcHJvYmVfZGV2aWNlIChzZWxmLCBpdC0+ZGV2aWNlX3BhdGgsIE5VTEwsCi0gICAgICAgIHByb3BzKTsKLQotICAgIGlmIChkZXZpY2UpIHsKLSAgICAgIGdzdF9vYmplY3RfcmVmX3NpbmsgKGRldmljZSk7Ci0gICAgICBkZXZpY2VzID0gZ19saXN0X3ByZXBlbmQgKGRldmljZXMsIGRldmljZSk7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X3Y0bDJfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIHJldHVybiBkZXZpY2VzOwotfQotCi0jaWZkZWYgSEFWRV9HVURFVgotCi1zdGF0aWMgR3N0RGV2aWNlICoKLWdzdF92NGwyX2RldmljZV9wcm92aWRlcl9kZXZpY2VfZnJvbV91ZGV2IChHc3RWNGwyRGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlciwKLSAgICBHVWRldkRldmljZSAqIHVkZXZfZGV2aWNlKQotewotICBHc3RWNGwyRGV2aWNlICpnc3RkZXY7Ci0gIGNvbnN0IGdjaGFyICpkZXZpY2VfcGF0aCA9IGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlICh1ZGV2X2RldmljZSk7Ci0gIGNvbnN0IGdjaGFyICpkZXZpY2VfbmFtZSwgKnN0cjsKLSAgR3N0U3RydWN0dXJlICpwcm9wczsKLQotICBwcm9wcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidjRsMmRldmljZXByb3ZpZGVyIiwgInVkZXYtcHJvYmVkIiwKLSAgICAgIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLQotICBzdHIgPSBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9QQVRIIik7Ci0gIGlmICghKHN0ciAmJiAqc3RyKSkgewotICAgIHN0ciA9IGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGggKHVkZXZfZGV2aWNlKTsKLSAgfQotICBpZiAoc3RyICYmICpzdHIpCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BzLCAiZGV2aWNlLmJ1c19wYXRoIiwgR19UWVBFX1NUUklORywgc3RyLCBOVUxMKTsKLQotICBpZiAoKHN0ciA9IGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGggKHVkZXZfZGV2aWNlKSkgJiYgKnN0cikKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcHMsICJzeXNmcy5wYXRoIiwgR19UWVBFX1NUUklORywgc3RyLCBOVUxMKTsKLQotICBpZiAoKHN0ciA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5ICh1ZGV2X2RldmljZSwgIklEX0lEIikpICYmICpzdHIpCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BzLCAidWRldi5pZCIsIEdfVFlQRV9TVFJJTkcsIHN0ciwgTlVMTCk7Ci0KLSAgaWYgKChzdHIgPSBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9CVVMiKSkgJiYgKnN0cikKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcHMsICJkZXZpY2UuYnVzIiwgR19UWVBFX1NUUklORywgc3RyLCBOVUxMKTsKLQotICBpZiAoKHN0ciA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5ICh1ZGV2X2RldmljZSwgIlNVQlNZU1RFTSIpKSAmJiAqc3RyKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgImRldmljZS5zdWJzeXN0ZW0iLCBHX1RZUEVfU1RSSU5HLCBzdHIsIE5VTEwpOwotCi0gIGlmICgoc3RyID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKHVkZXZfZGV2aWNlLCAiSURfVkVORE9SX0lEIikpICYmICpzdHIpCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BzLCAiZGV2aWNlLnZlbmRvci5pZCIsIEdfVFlQRV9TVFJJTkcsIHN0ciwgTlVMTCk7Ci0KLSAgc3RyID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKHVkZXZfZGV2aWNlLCAiSURfVkVORE9SX0ZST01fREFUQUJBU0UiKTsKLSAgaWYgKCEoc3RyICYmICpzdHIpKSB7Ci0gICAgc3RyID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKHVkZXZfZGV2aWNlLCAiSURfVkVORE9SX0VOQyIpOwotICAgIGlmICghKHN0ciAmJiAqc3RyKSkgewotICAgICAgc3RyID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKHVkZXZfZGV2aWNlLCAiSURfVkVORE9SIik7Ci0gICAgfQotICB9Ci0gIGlmIChzdHIgJiYgKnN0cikKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcHMsICJkZXZpY2UudmVuZG9yLm5hbWUiLCBHX1RZUEVfU1RSSU5HLCBzdHIsIE5VTEwpOwotCi0gIGlmICgoc3RyID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKHVkZXZfZGV2aWNlLCAiSURfTU9ERUxfSUQiKSkgJiYgKnN0cikKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcHMsICJkZXZpY2UucHJvZHVjdC5pZCIsIEdfVFlQRV9TVFJJTkcsIHN0ciwgTlVMTCk7Ci0KLSAgZGV2aWNlX25hbWUgPSBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9WNExfUFJPRFVDVCIpOwotICBpZiAoIShkZXZpY2VfbmFtZSAmJiAqZGV2aWNlX25hbWUpKSB7Ci0gICAgZGV2aWNlX25hbWUgPQotICAgICAgICBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9NT0RFTF9GUk9NX0RBVEFCQVNFIik7Ci0gICAgaWYgKCEoZGV2aWNlX25hbWUgJiYgKmRldmljZV9uYW1lKSkgewotICAgICAgZGV2aWNlX25hbWUgPSBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9NT0RFTF9FTkMiKTsKLSAgICAgIGlmICghKGRldmljZV9uYW1lICYmICpkZXZpY2VfbmFtZSkpIHsKLSAgICAgICAgZGV2aWNlX25hbWUgPSBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9NT0RFTCIpOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAoZGV2aWNlX25hbWUgJiYgKmRldmljZV9uYW1lKQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChwcm9wcywgImRldmljZS5wcm9kdWN0Lm5hbWUiLCBHX1RZUEVfU1RSSU5HLCBkZXZpY2VfbmFtZSwKLSAgICAgICAgTlVMTCk7Ci0KLSAgaWYgKChzdHIgPSBnX3VkZXZfZGV2aWNlX2dldF9wcm9wZXJ0eSAodWRldl9kZXZpY2UsICJJRF9TRVJJQUwiKSkgJiYgKnN0cikKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocHJvcHMsICJkZXZpY2Uuc2VyaWFsIiwgR19UWVBFX1NUUklORywgc3RyLCBOVUxMKTsKLQotICBpZiAoKHN0ciA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5ICh1ZGV2X2RldmljZSwgIklEX1Y0TF9DQVBBQklMSVRJRVMiKSkKLSAgICAgICYmICpzdHIpCi0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHByb3BzLCAiZGV2aWNlLmNhcGFiaWxpdGllcyIsIEdfVFlQRV9TVFJJTkcsIHN0ciwgTlVMTCk7Ci0KLSAgZ3N0ZGV2ID0gZ3N0X3Y0bDJfZGV2aWNlX3Byb3ZpZGVyX3Byb2JlX2RldmljZSAocHJvdmlkZXIsIGRldmljZV9wYXRoLAotICAgICAgZGV2aWNlX25hbWUsIHByb3BzKTsKLQotICBpZiAoZ3N0ZGV2KQotICAgIGdzdGRldi0+c3lzcGF0aCA9IGdfc3RyZHVwIChnX3VkZXZfZGV2aWNlX2dldF9zeXNmc19wYXRoICh1ZGV2X2RldmljZSkpOwotCi0gIHJldHVybiBHU1RfREVWSUNFIChnc3RkZXYpOwotfQotCi1zdGF0aWMgdm9pZAotdWV2ZW50X2NiIChHVWRldkNsaWVudCAqIGNsaWVudCwgY29uc3QgZ2NoYXIgKiBhY3Rpb24sIEdVZGV2RGV2aWNlICogZGV2aWNlLAotICAgIEdzdFY0bDJEZXZpY2VQcm92aWRlciAqIHNlbGYpCi17Ci0gIEdzdERldmljZVByb3ZpZGVyICpwcm92aWRlciA9IEdTVF9ERVZJQ0VfUFJPVklERVIgKHNlbGYpOwotCi0gIC8qIE5vdCBWNEwyLCBpZ25vcmluZyAqLwotICBpZiAoZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHlfYXNfaW50IChkZXZpY2UsICJJRF9WNExfVkVSU0lPTiIpICE9IDIpCi0gICAgcmV0dXJuOwotCi0gIGlmICghc3RyY21wIChhY3Rpb24sICJhZGQiKSkgewotICAgIEdzdERldmljZSAqZ3N0ZGV2ID0gTlVMTDsKLQotICAgIGdzdGRldiA9IGdzdF92NGwyX2RldmljZV9wcm92aWRlcl9kZXZpY2VfZnJvbV91ZGV2IChzZWxmLCBkZXZpY2UpOwotCi0gICAgaWYgKGdzdGRldikKLSAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZCAocHJvdmlkZXIsIGdzdGRldik7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcCAoYWN0aW9uLCAicmVtb3ZlIikpIHsKLSAgICBHc3RWNGwyRGV2aWNlICpnc3RkZXYgPSBOVUxMOwotICAgIEdMaXN0ICppdGVtOwotCi0gICAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgICBmb3IgKGl0ZW0gPSBwcm92aWRlci0+ZGV2aWNlczsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKLSAgICAgIGdzdGRldiA9IGl0ZW0tPmRhdGE7Ci0KLSAgICAgIGlmICghc3RyY21wIChnc3RkZXYtPnN5c3BhdGgsIGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGggKGRldmljZSkpKSB7Ci0gICAgICAgIGdzdF9vYmplY3RfcmVmIChnc3RkZXYpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgZ3N0ZGV2ID0gTlVMTDsKLSAgICB9Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHByb3ZpZGVyKTsKLQotICAgIGlmIChnc3RkZXYpIHsKLSAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX3JlbW92ZSAocHJvdmlkZXIsIEdTVF9ERVZJQ0UgKGdzdGRldikpOwotICAgICAgZ19vYmplY3RfdW5yZWYgKGdzdGRldik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiVW5oYW5kbGVkIGFjdGlvbiAlcyIsIGFjdGlvbik7Ci0gIH0KLX0KLQotc3RhdGljIGdwb2ludGVyCi1wcm92aWRlcl90aHJlYWQgKGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdFY0bDJEZXZpY2VQcm92aWRlciAqcHJvdmlkZXIgPSBkYXRhOwotICBHTWFpbkNvbnRleHQgKmNvbnRleHQgPSBOVUxMOwotICBHTWFpbkxvb3AgKmxvb3AgPSBOVUxMOwotICBHVWRldkNsaWVudCAqY2xpZW50OwotICBHTGlzdCAqZGV2aWNlczsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpzdWJzeXN0ZW1zW10gPSB7ICJ2aWRlbzRsaW51eCIsIE5VTEwgfTsKLQotICBHU1RfT0JKRUNUX0xPQ0sgKHByb3ZpZGVyKTsKLSAgaWYgKHByb3ZpZGVyLT5jb250ZXh0KQotICAgIGNvbnRleHQgPSBnX21haW5fY29udGV4dF9yZWYgKHByb3ZpZGVyLT5jb250ZXh0KTsKLSAgaWYgKHByb3ZpZGVyLT5sb29wKQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9yZWYgKHByb3ZpZGVyLT5sb29wKTsKLQotICBpZiAoY29udGV4dCA9PSBOVUxMIHx8IGxvb3AgPT0gTlVMTCkgewotICAgIHByb3ZpZGVyLT5zdGFydGVkID0gVFJVRTsKLSAgICBnX2NvbmRfYnJvYWRjYXN0ICgmcHJvdmlkZXItPnN0YXJ0ZWRfY29uZCk7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0sgKHByb3ZpZGVyKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBHU1RfT0JKRUNUX1VOTE9DSyAocHJvdmlkZXIpOwotCi0gIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQgKGNvbnRleHQpOwotCi0gIGNsaWVudCA9IGdfdWRldl9jbGllbnRfbmV3IChzdWJzeXN0ZW1zKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChjbGllbnQsICJ1ZXZlbnQiLCBHX0NBTExCQUNLICh1ZXZlbnRfY2IpLCBwcm92aWRlcik7Ci0KLSAgZGV2aWNlcyA9IGdfdWRldl9jbGllbnRfcXVlcnlfYnlfc3Vic3lzdGVtIChjbGllbnQsICJ2aWRlbzRsaW51eCIpOwotCi0gIHdoaWxlIChkZXZpY2VzKSB7Ci0gICAgR1VkZXZEZXZpY2UgKnVkZXZfZGV2aWNlID0gZGV2aWNlcy0+ZGF0YTsKLSAgICBHc3REZXZpY2UgKmdzdGRldjsKLQotICAgIGRldmljZXMgPSBnX2xpc3RfcmVtb3ZlIChkZXZpY2VzLCB1ZGV2X2RldmljZSk7Ci0KLSAgICBpZiAoZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHlfYXNfaW50ICh1ZGV2X2RldmljZSwgIklEX1Y0TF9WRVJTSU9OIikgPT0gMikgewotICAgICAgZ3N0ZGV2ID0KLSAgICAgICAgICBnc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2Zyb21fdWRldiAocHJvdmlkZXIsIHVkZXZfZGV2aWNlKTsKLSAgICAgIGlmIChnc3RkZXYpCi0gICAgICAgIGdzdF9kZXZpY2VfcHJvdmlkZXJfZGV2aWNlX2FkZCAoR1NUX0RFVklDRV9QUk9WSURFUiAocHJvdmlkZXIpLCBnc3RkZXYpOwotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmICh1ZGV2X2RldmljZSk7Ci0gIH0KLQotICBHU1RfT0JKRUNUX0xPQ0sgKHByb3ZpZGVyKTsKLSAgcHJvdmlkZXItPnN0YXJ0ZWQgPSBUUlVFOwotICBnX2NvbmRfYnJvYWRjYXN0ICgmcHJvdmlkZXItPnN0YXJ0ZWRfY29uZCk7Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChwcm92aWRlcik7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIGdfb2JqZWN0X3VucmVmIChjbGllbnQpOwotICBnX21haW5fY29udGV4dF91bnJlZiAoY29udGV4dCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocHJvdmlkZXIpOwotCi0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX2RldmljZV9wcm92aWRlcl9zdGFydCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgR3N0VjRsMkRldmljZVByb3ZpZGVyICpzZWxmID0gR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcik7Ci0KLSAgR1NUX09CSkVDVF9MT0NLIChzZWxmKTsKLSAgZ19hc3NlcnQgKHNlbGYtPmNvbnRleHQgPT0gTlVMTCk7Ci0KLSAgc2VsZi0+Y29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKLSAgc2VsZi0+bG9vcCA9IGdfbWFpbl9sb29wX25ldyAoc2VsZi0+Y29udGV4dCwgRkFMU0UpOwotCi0gIHNlbGYtPnRocmVhZCA9IGdfdGhyZWFkX25ldyAoInY0bDItZGV2aWNlLXByb3ZpZGVyIiwgcHJvdmlkZXJfdGhyZWFkLAotICAgICAgZ19vYmplY3RfcmVmIChzZWxmKSk7Ci0KLSAgd2hpbGUgKHNlbGYtPnN0YXJ0ZWQgPT0gRkFMU0UpCi0gICAgZ19jb25kX3dhaXQgKCZzZWxmLT5zdGFydGVkX2NvbmQsIEdTVF9PQkpFQ1RfR0VUX0xPQ0sgKHNlbGYpKTsKLQotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9kZXZpY2VfcHJvdmlkZXJfc3RvcCAoR3N0RGV2aWNlUHJvdmlkZXIgKiBwcm92aWRlcikKLXsKLSAgR3N0VjRsMkRldmljZVByb3ZpZGVyICpzZWxmID0gR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSIChwcm92aWRlcik7Ci0gIEdNYWluQ29udGV4dCAqY29udGV4dDsKLSAgR01haW5Mb29wICpsb29wOwotICBHU291cmNlICppZGxlX3N0b3Bfc291cmNlOwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAoc2VsZik7Ci0gIGNvbnRleHQgPSBzZWxmLT5jb250ZXh0OwotICBsb29wID0gc2VsZi0+bG9vcDsKLSAgc2VsZi0+Y29udGV4dCA9IE5VTEw7Ci0gIHNlbGYtPmxvb3AgPSBOVUxMOwotICBHU1RfT0JKRUNUX1VOTE9DSyAoc2VsZik7Ci0KLSAgaWYgKCFjb250ZXh0IHx8ICFsb29wKQotICAgIHJldHVybjsKLQotICBpZGxlX3N0b3Bfc291cmNlID0gZ19pZGxlX3NvdXJjZV9uZXcgKCk7Ci0gIGdfc291cmNlX3NldF9jYWxsYmFjayAoaWRsZV9zdG9wX3NvdXJjZSwgKEdTb3VyY2VGdW5jKSBnX21haW5fbG9vcF9xdWl0LCBsb29wLAotICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnX21haW5fbG9vcF91bnJlZik7Ci0gIGdfc291cmNlX2F0dGFjaCAoaWRsZV9zdG9wX3NvdXJjZSwgY29udGV4dCk7Ci0gIGdfc291cmNlX3VucmVmIChpZGxlX3N0b3Bfc291cmNlKTsKLSAgZ19tYWluX2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOwotCi0gIGdfdGhyZWFkX2pvaW4gKHNlbGYtPnRocmVhZCk7Ci0gIHNlbGYtPnRocmVhZCA9IE5VTEw7Ci0gIHNlbGYtPnN0YXJ0ZWQgPSBGQUxTRTsKLX0KLQotI2VuZGlmCi0KLWVudW0KLXsKLSAgUFJPUF9ERVZJQ0VfUEFUSCA9IDEsCi19OwotCi1HX0RFRklORV9UWVBFIChHc3RWNGwyRGV2aWNlLCBnc3RfdjRsMl9kZXZpY2UsIEdTVF9UWVBFX0RFVklDRSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF92NGwyX2RldmljZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdjRsMl9kZXZpY2Vfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3Y0bDJfZGV2aWNlX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KTsKLXN0YXRpYyBHc3RFbGVtZW50ICpnc3RfdjRsMl9kZXZpY2VfY3JlYXRlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwKLSAgICBjb25zdCBnY2hhciAqIG5hbWUpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfZGV2aWNlX2NsYXNzX2luaXQgKEdzdFY0bDJEZXZpY2VDbGFzcyAqIGtsYXNzKQotewotICBHc3REZXZpY2VDbGFzcyAqZGV2X2NsYXNzID0gR1NUX0RFVklDRV9DTEFTUyAoa2xhc3MpOwotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7Ci0KLSAgZGV2X2NsYXNzLT5jcmVhdGVfZWxlbWVudCA9IGdzdF92NGwyX2RldmljZV9jcmVhdGVfZWxlbWVudDsKLQotICBvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF92NGwyX2RldmljZV9nZXRfcHJvcGVydHk7Ci0gIG9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3N0X3Y0bDJfZGV2aWNlX3NldF9wcm9wZXJ0eTsKLSAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGdzdF92NGwyX2RldmljZV9maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFX1BBVEgsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlLXBhdGgiLCAiRGV2aWNlIFBhdGgiLAotICAgICAgICAgICJUaGUgUGF0aCBvZiB0aGUgZGV2aWNlIG5vZGUiLCAiIiwKLSAgICAgICAgICBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9kZXZpY2VfaW5pdCAoR3N0VjRsMkRldmljZSAqIGRldmljZSkKLXsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2RldmljZV9maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VjRsMkRldmljZSAqZGV2aWNlID0gR1NUX1Y0TDJfREVWSUNFIChvYmplY3QpOwotCi0gIGdfZnJlZSAoZGV2aWNlLT5kZXZpY2VfcGF0aCk7Ci0gIGdfZnJlZSAoZGV2aWNlLT5zeXNwYXRoKTsKLQotICBHX09CSkVDVF9DTEFTUyAoZ3N0X3Y0bDJfZGV2aWNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1nc3RfdjRsMl9kZXZpY2VfY3JlYXRlX2VsZW1lbnQgKEdzdERldmljZSAqIGRldmljZSwgY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RWNGwyRGV2aWNlICp2NGwyX2RldiA9IEdTVF9WNEwyX0RFVklDRSAoZGV2aWNlKTsKLSAgR3N0RWxlbWVudCAqZWxlbTsKLQotICBlbGVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICh2NGwyX2Rldi0+ZWxlbWVudCwgbmFtZSk7Ci0gIGdfb2JqZWN0X3NldCAoZWxlbSwgImRldmljZSIsIHY0bDJfZGV2LT5kZXZpY2VfcGF0aCwgTlVMTCk7Ci0KLSAgcmV0dXJuIGVsZW07Ci19Ci0KLXN0YXRpYyBHc3RWNGwyRGV2aWNlICoKLWdzdF92NGwyX2RldmljZV9uZXcgKGNvbnN0IGdjaGFyICogZGV2aWNlX3BhdGgsIGNvbnN0IGdjaGFyICogZGV2aWNlX25hbWUsCi0gICAgR3N0Q2FwcyAqIGNhcHMsIEdzdFY0bDJEZXZpY2VUeXBlIHR5cGUsIEdzdFN0cnVjdHVyZSAqIHByb3BzKQotewotICBHc3RWNGwyRGV2aWNlICpnc3RkZXY7Ci0gIGNvbnN0IGdjaGFyICplbGVtZW50ID0gTlVMTDsKLSAgY29uc3QgZ2NoYXIgKmtsYXNzID0gTlVMTDsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGV2aWNlX3BhdGgsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZGV2aWNlX25hbWUsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2FwcywgTlVMTCk7Ci0KLSAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHU1RfVjRMMl9ERVZJQ0VfVFlQRV9TT1VSQ0U6Ci0gICAgICBlbGVtZW50ID0gInY0bDJzcmMiOwotICAgICAga2xhc3MgPSAiVmlkZW8vU291cmNlIjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1Y0TDJfREVWSUNFX1RZUEVfU0lOSzoKLSAgICAgIGVsZW1lbnQgPSAidjRsMnNpbmsiOwotICAgICAga2xhc3MgPSAiVmlkZW8vU2luayI7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdzdGRldiA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfVjRMMl9ERVZJQ0UsICJkZXZpY2UtcGF0aCIsIGRldmljZV9wYXRoLAotICAgICAgImRpc3BsYXktbmFtZSIsIGRldmljZV9uYW1lLCAiY2FwcyIsIGNhcHMsICJkZXZpY2UtY2xhc3MiLCBrbGFzcywKLSAgICAgICJwcm9wZXJ0aWVzIiwgcHJvcHMsIE5VTEwpOwotCi0gIGdzdGRldi0+ZWxlbWVudCA9IGVsZW1lbnQ7Ci0KLQotICByZXR1cm4gZ3N0ZGV2OwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9kZXZpY2VfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFY0bDJEZXZpY2UgKmRldmljZTsKLQotICBkZXZpY2UgPSBHU1RfVjRMMl9ERVZJQ0VfQ0FTVCAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFX1BBVEg6Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBkZXZpY2UtPmRldmljZV9wYXRoKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfZGV2aWNlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWNGwyRGV2aWNlICpkZXZpY2U7Ci0KLSAgZGV2aWNlID0gR1NUX1Y0TDJfREVWSUNFX0NBU1QgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RFVklDRV9QQVRIOgotICAgICAgZGV2aWNlLT5kZXZpY2VfcGF0aCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMmRldmljZXByb3ZpZGVyLmggYi9zeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwNWIzNS4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwyZGV2aWNlcHJvdmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMiBPbGl2aWVyIENyZXRlIDxvbGl2aWVyLmNyZXRlQGNvbGxhYm9yYS5jb20+Ci0gKgotICogZ3N0djRsMmRldmljZXByb3ZpZGVyLmg6IFY0bDIgZGV2aWNlIHByb2JpbmcgYW5kIG1vbml0b3JpbmcKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0KLSNpZm5kZWYgX19HU1RfVjRMMl9ERVZJQ0VfUFJPVklERVJfSF9fCi0jZGVmaW5lIF9fR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSX0hfXwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpZmRlZiBIQVZFX0dVREVWCi0jaW5jbHVkZSA8Z3VkZXYvZ3VkZXYuaD4KLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyRGV2aWNlUHJvdmlkZXIgR3N0VjRsMkRldmljZVByb3ZpZGVyOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJEZXZpY2VQcm92aWRlckNsYXNzIEdzdFY0bDJEZXZpY2VQcm92aWRlckNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1Y0TDJfREVWSUNFX1BST1ZJREVSICAgICAgICAgICAgICAgICAoZ3N0X3Y0bDJfZGV2aWNlX3Byb3ZpZGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JU19WNEwyX0RFVklDRV9QUk9WSURFUihvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9WNEwyX0RFVklDRV9QUk9WSURFUikpCi0jZGVmaW5lIEdTVF9JU19WNEwyX0RFVklDRV9QUk9WSURFUl9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1Y0TDJfREVWSUNFX1BST1ZJREVSKSkKLSNkZWZpbmUgR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfVjRMMl9ERVZJQ0VfUFJPVklERVIsIEdzdFY0bDJEZXZpY2VQcm92aWRlckNsYXNzKSkKLSNkZWZpbmUgR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSKG9iaikgICAgICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1Y0TDJfREVWSUNFX1BST1ZJREVSLCBHc3RWNGwyRGV2aWNlUHJvdmlkZXIpKQotI2RlZmluZSBHU1RfVjRMMl9ERVZJQ0VfUFJPVklERVJfQ0xBU1Moa2xhc3MpICAgICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9ERVZJQ0VfUFJPVklERVIsIEdzdFY0bDJEZXZpY2VQcm92aWRlckNsYXNzKSkKLSNkZWZpbmUgR1NUX1Y0TDJfREVWSUNFX1BST1ZJREVSX0NBU1Qob2JqKSAgICAgICAgICAgICgoR3N0VjRsMkRldmljZVByb3ZpZGVyICopKG9iaikpCi0KLXN0cnVjdCBfR3N0VjRsMkRldmljZVByb3ZpZGVyIHsKLSAgR3N0RGV2aWNlUHJvdmlkZXIgICAgICAgICBwYXJlbnQ7Ci0KLSNpZmRlZiBIQVZFX0dVREVWCi0gIEdNYWluQ29udGV4dCAqY29udGV4dDsKLSAgR01haW5Mb29wICpsb29wOwotICBHVGhyZWFkICp0aHJlYWQ7Ci0gIGdib29sZWFuIHN0YXJ0ZWQ7Ci0gIEdDb25kIHN0YXJ0ZWRfY29uZDsKLSNlbmRpZgotfTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1Y0TDJfREVWSUNFX1RZUEVfSU5WQUxJRCA9IDAsCi0gIEdTVF9WNEwyX0RFVklDRV9UWVBFX1NPVVJDRSwKLSAgR1NUX1Y0TDJfREVWSUNFX1RZUEVfU0lOSwotfSBHc3RWNGwyRGV2aWNlVHlwZTsKLQotc3RydWN0IF9Hc3RWNGwyRGV2aWNlUHJvdmlkZXJDbGFzcyB7Ci0gIEdzdERldmljZVByb3ZpZGVyQ2xhc3MgICAgcGFyZW50X2NsYXNzOwotfTsKLQotR1R5cGUgICAgICAgIGdzdF92NGwyX2RldmljZV9wcm92aWRlcl9nZXRfdHlwZSAodm9pZCk7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJEZXZpY2UgR3N0VjRsMkRldmljZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyRGV2aWNlQ2xhc3MgR3N0VjRsMkRldmljZUNsYXNzOwotCi0jZGVmaW5lIEdTVF9UWVBFX1Y0TDJfREVWSUNFICAgICAgICAgICAgICAgICAoZ3N0X3Y0bDJfZGV2aWNlX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9JU19WNEwyX0RFVklDRShvYmopICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9WNEwyX0RFVklDRSkpCi0jZGVmaW5lIEdTVF9JU19WNEwyX0RFVklDRV9DTEFTUyhrbGFzcykgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIEdTVF9UWVBFX1Y0TDJfREVWSUNFKSkKLSNkZWZpbmUgR1NUX1Y0TDJfREVWSUNFX0dFVF9DTEFTUyhvYmopICAgICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgR1NUX1RZUEVfVjRMMl9ERVZJQ0UsIEdzdFY0bDJEZXZpY2VDbGFzcykpCi0jZGVmaW5lIEdTVF9WNEwyX0RFVklDRShvYmopICAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBHU1RfVFlQRV9WNEwyX0RFVklDRSwgR3N0VjRsMkRldmljZSkpCi0jZGVmaW5lIEdTVF9WNEwyX0RFVklDRV9DTEFTUyhrbGFzcykgICAgICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX0RFVklDRSwgR3N0VjRsMkRldmljZUNsYXNzKSkKLSNkZWZpbmUgR1NUX1Y0TDJfREVWSUNFX0NBU1Qob2JqKSAgICAgICAgICAgICgoR3N0VjRsMkRldmljZSAqKShvYmopKQotCi1zdHJ1Y3QgX0dzdFY0bDJEZXZpY2UgewotICBHc3REZXZpY2UgICAgICAgICBwYXJlbnQ7Ci0KLSAgZ2NoYXIgICAgICAgICAgICAqZGV2aWNlX3BhdGg7Ci0gIGdjaGFyICAgICAgICAgICAgKnN5c3BhdGg7Ci0gIGNvbnN0IGdjaGFyICAgICAgKmVsZW1lbnQ7Ci19OwotCi1zdHJ1Y3QgX0dzdFY0bDJEZXZpY2VDbGFzcyB7Ci0gIEdzdERldmljZUNsYXNzICAgIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlICAgICAgICBnc3RfdjRsMl9kZXZpY2VfZ2V0X3R5cGUgKHZvaWQpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVjRMMl9ERVZJQ0VfUFJPVklERVJfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmMgYi9zeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlODI3YjYuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMm9iamVjdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI3MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAgICAgICAgICAgICAgIDIwMDYgRWRnYXJkIExpbWEgPGVkZ2FyZC5saW1hQGluZHQub3JnLmJyPgotICoKLSAqIGdzdHY0bDJvYmplY3QuYzogYmFzZSBjbGFzcyBmb3IgVjRMMiBlbGVtZW50cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCi0gKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlCi0gKiB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUKLSAqIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAotICogVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgSEFWRV9HVURFVgotI2luY2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInY0bDJfY2FsbHMuaCIKLSNpbmNsdWRlICJnc3R2NGwydHVuZXIuaCIKLSNpbmNsdWRlICJnc3R2NGwyY29sb3JiYWxhbmNlLmgiCi0KLSNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tcGx1Z2luLmgiCi0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTiAodjRsMl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB2NGwyX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9QUk9QX0RFVklDRV9OQU1FICAgICAgICBOVUxMCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9ERVZJQ0VfRkQgICAgICAgICAgLTEKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0ZMQUdTICAgICAgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9UVl9OT1JNICAgICAgICAgICAgMAotI2RlZmluZSBERUZBVUxUX1BST1BfQ0hBTk5FTCAgICAgICAgICAgIE5VTEwKLSNkZWZpbmUgREVGQVVMVF9QUk9QX0ZSRVFVRU5DWSAgICAgICAgICAwCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9JT19NT0RFICAgICAgICAgICAgR1NUX1Y0TDJfSU9fQVVUTwotCi0jZGVmaW5lIEVOQ09ERURfQlVGRkVSX1NJWkUgICAgICAgICAgICAgKDEgKiAxMDI0ICogMTAyNCkKLQotZW51bQotewotICBQUk9QXzAsCi0gIFY0TDJfU1REX09CSkVDVF9QUk9QUywKLX07Ci0KLS8qCi0gKiBjb21tb24gZm9ybWF0IC8gY2FwcyB1dGlsaXRpZXM6Ci0gKi8KLXR5cGVkZWYgZW51bQotewotICBHU1RfVjRMMl9SQVcgPSAxIDw8IDAsCi0gIEdTVF9WNEwyX0NPREVDID0gMSA8PCAxLAotICBHU1RfVjRMMl9UUkFOU1BPUlQgPSAxIDw8IDIsCi0gIEdTVF9WNEwyX05PX1BBUlNFID0gMSA8PCAzLAotICBHU1RfVjRMMl9BTEwgPSAweGZmZmYKLX0gR3N0VjRMMkZvcm1hdEZsYWdzOwotCi10eXBlZGVmIHN0cnVjdAotewotICBndWludDMyIGZvcm1hdDsKLSAgZ2Jvb2xlYW4gZGltZW5zaW9uczsKLSAgR3N0VjRMMkZvcm1hdEZsYWdzIGZsYWdzOwotfSBHc3RWNEwyRm9ybWF0RGVzYzsKLQotc3RhdGljIGNvbnN0IEdzdFY0TDJGb3JtYXREZXNjIGdzdF92NGwyX2Zvcm1hdHNbXSA9IHsKLSAgLyogUkdCIGZvcm1hdHMgKi8KLSAge1Y0TDJfUElYX0ZNVF9SR0IzMzIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfQVJHQjU1NSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9YUkdCNTU1LCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX0FSR0I1NTVYLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1hSR0I1NTVYLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1JHQjU2NSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9SR0I1NjVYLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX0JHUjY2NiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9CR1IyNCwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9SR0IyNCwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9BQkdSMzIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWEJHUjMyLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX0FSR0IzMiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9YUkdCMzIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0KLSAgLyogRGVwcmVjYXRlZCBQYWNrZWQgUkdCIEltYWdlIEZvcm1hdHMgKGFscGhhIGFtYmlndWl0eSkgKi8KLSAge1Y0TDJfUElYX0ZNVF9SR0I0NDQsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfUkdCNTU1LCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1JHQjU1NVgsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfQkdSMzIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfUkdCMzIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0KLSAgLyogR3JleSBmb3JtYXRzICovCi0gIHtWNEwyX1BJWF9GTVRfR1JFWSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZNCwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZNiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZMTAsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWTEyLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1kxNiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZMTZfQkUsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWTEwQlBBQ0ssIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0KLSAgLyogUGFsZXR0ZSBmb3JtYXRzICovCi0gIHtWNEwyX1BJWF9GTVRfUEFMOCwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLQotICAvKiBDaHJvbWluYW5jZSBmb3JtYXRzICovCi0gIHtWNEwyX1BJWF9GTVRfVVY4LCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotCi0gIC8qIEx1bWluYW5jZStDaHJvbWluYW5jZSBmb3JtYXRzICovCi0gIHtWNEwyX1BJWF9GTVRfWVZVNDEwLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1lWVTQyMCwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZVlU0MjBNLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1lVWVYsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWVlVViwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZVllVLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1VZVlksIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfVllVWSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZVVY0MjJQLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1lVVjQxMVAsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWTQxUCwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZVVY0NDQsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWVVWNTU1LCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1lVVjU2NSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZVVYzMiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9ZVVY0MTAsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfWVVWNDIwLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX1lVVjQyME0sIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfSEkyNDAsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfSE0xMiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9NNDIwLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotCi0gIC8qIHR3byBwbGFuZXMgLS0gb25lIFksIG9uZSBDciArIENiIGludGVybGVhdmVkICAqLwotICB7VjRMMl9QSVhfRk1UX05WMTIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfTlYxMk0sIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfTlYxMk1ULCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX05WMTJNVF8xNlgxNiwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9OVjIxLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX05WMjFNLCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX05WMTYsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfTlYxNk0sIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0gIHtWNEwyX1BJWF9GTVRfTlY2MSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9OVjYxTSwgVFJVRSwgR1NUX1Y0TDJfUkFXfSwKLSAge1Y0TDJfUElYX0ZNVF9OVjI0LCBUUlVFLCBHU1RfVjRMMl9SQVd9LAotICB7VjRMMl9QSVhfRk1UX05WNDIsIFRSVUUsIEdTVF9WNEwyX1JBV30sCi0KLSAgLyogQmF5ZXIgZm9ybWF0cyAtIHNlZSBodHRwOi8vd3d3LnNpbGljb25pbWFnaW5nLmNvbS9SR0IlMjBCYXllci5odG0gKi8KLSAge1Y0TDJfUElYX0ZNVF9TQkdHUjgsIFRSVUUsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9TR0JSRzgsIFRSVUUsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9TR1JCRzgsIFRSVUUsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9TUkdHQjgsIFRSVUUsIEdTVF9WNEwyX0NPREVDfSwKLQotICAvKiBjb21wcmVzc2VkIGZvcm1hdHMgKi8KLSAge1Y0TDJfUElYX0ZNVF9NSlBFRywgRkFMU0UsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9KUEVHLCBGQUxTRSwgR1NUX1Y0TDJfQ09ERUN9LAotICB7VjRMMl9QSVhfRk1UX1BKUEcsIEZBTFNFLCBHU1RfVjRMMl9DT0RFQ30sCi0gIHtWNEwyX1BJWF9GTVRfRFYsIEZBTFNFLCBHU1RfVjRMMl9UUkFOU1BPUlR9LAotICB7VjRMMl9QSVhfRk1UX01QRUcsIEZBTFNFLCBHU1RfVjRMMl9UUkFOU1BPUlR9LAotICB7VjRMMl9QSVhfRk1UX0gyNjQsIEZBTFNFLCBHU1RfVjRMMl9DT0RFQ30sCi0gIHtWNEwyX1BJWF9GTVRfSDI2NF9OT19TQywgRkFMU0UsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9IMjY0X01WQywgRkFMU0UsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9IMjYzLCBGQUxTRSwgR1NUX1Y0TDJfQ09ERUN9LAotICB7VjRMMl9QSVhfRk1UX01QRUcxLCBGQUxTRSwgR1NUX1Y0TDJfQ09ERUN9LAotICB7VjRMMl9QSVhfRk1UX01QRUcyLCBGQUxTRSwgR1NUX1Y0TDJfQ09ERUN9LAotICB7VjRMMl9QSVhfRk1UX01QRUc0LCBGQUxTRSwgR1NUX1Y0TDJfQ09ERUN9LAotICB7VjRMMl9QSVhfRk1UX1hWSUQsIEZBTFNFLCBHU1RfVjRMMl9DT0RFQ30sCi0gIHtWNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0csIEZBTFNFLCBHU1RfVjRMMl9DT0RFQ30sCi0gIHtWNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0wsIEZBTFNFLCBHU1RfVjRMMl9DT0RFQ30sCi0gIHtWNEwyX1BJWF9GTVRfVlA4LCBGQUxTRSwgR1NUX1Y0TDJfQ09ERUMgfCBHU1RfVjRMMl9OT19QQVJTRX0sCi0KLSAgLyogIFZlbmRvci1zcGVjaWZpYyBmb3JtYXRzICAgKi8KLSAge1Y0TDJfUElYX0ZNVF9XTlZBLCBUUlVFLCBHU1RfVjRMMl9DT0RFQ30sCi0gIHtWNEwyX1BJWF9GTVRfU045QzEwWCwgVFJVRSwgR1NUX1Y0TDJfQ09ERUN9LAotICB7VjRMMl9QSVhfRk1UX1BXQzEsIFRSVUUsIEdTVF9WNEwyX0NPREVDfSwKLSAge1Y0TDJfUElYX0ZNVF9QV0MyLCBUUlVFLCBHU1RfVjRMMl9DT0RFQ30sCi19OwotCi0jZGVmaW5lIEdTVF9WNEwyX0ZPUk1BVF9DT1VOVCAoR19OX0VMRU1FTlRTIChnc3RfdjRsMl9mb3JtYXRzKSkKLQotc3RhdGljIEdTTGlzdCAqZ3N0X3Y0bDJfb2JqZWN0X2dldF9mb3JtYXRfbGlzdCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpOwotCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMl9ERVZJQ0VfRkxBR1MgKGdzdF92NGwyX2RldmljZV9nZXRfdHlwZSAoKSkKLXN0YXRpYyBHVHlwZQotZ3N0X3Y0bDJfZGV2aWNlX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdjRsMl9kZXZpY2VfdHlwZSA9IDA7Ci0KLSAgaWYgKHY0bDJfZGV2aWNlX3R5cGUgPT0gMCkgewotICAgIHN0YXRpYyBjb25zdCBHRmxhZ3NWYWx1ZSB2YWx1ZXNbXSA9IHsKLSAgICAgIHtWNEwyX0NBUF9WSURFT19DQVBUVVJFLCAiRGV2aWNlIHN1cHBvcnRzIHZpZGVvIGNhcHR1cmUiLCAiY2FwdHVyZSJ9LAotICAgICAge1Y0TDJfQ0FQX1ZJREVPX09VVFBVVCwgIkRldmljZSBzdXBwb3J0cyB2aWRlbyBwbGF5YmFjayIsICJvdXRwdXQifSwKLSAgICAgIHtWNEwyX0NBUF9WSURFT19PVkVSTEFZLCAiRGV2aWNlIHN1cHBvcnRzIHZpZGVvIG92ZXJsYXkiLCAib3ZlcmxheSJ9LAotCi0gICAgICB7VjRMMl9DQVBfVkJJX0NBUFRVUkUsICJEZXZpY2Ugc3VwcG9ydHMgdGhlIFZCSSBjYXB0dXJlIiwgInZiaS1jYXB0dXJlIn0sCi0gICAgICB7VjRMMl9DQVBfVkJJX09VVFBVVCwgIkRldmljZSBzdXBwb3J0cyB0aGUgVkJJIG91dHB1dCIsICJ2Ymktb3V0cHV0In0sCi0KLSAgICAgIHtWNEwyX0NBUF9UVU5FUiwgIkRldmljZSBoYXMgYSB0dW5lciBvciBtb2R1bGF0b3IiLCAidHVuZXIifSwKLSAgICAgIHtWNEwyX0NBUF9BVURJTywgIkRldmljZSBoYXMgYXVkaW8gaW5wdXRzIG9yIG91dHB1dHMiLCAiYXVkaW8ifSwKLQotICAgICAgezAsIE5VTEwsIE5VTEx9Ci0gICAgfTsKLQotICAgIHY0bDJfZGV2aWNlX3R5cGUgPQotICAgICAgICBnX2ZsYWdzX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFY0bDJEZXZpY2VUeXBlRmxhZ3MiLCB2YWx1ZXMpOwotICB9Ci0KLSAgcmV0dXJuIHY0bDJfZGV2aWNlX3R5cGU7Ci19Ci0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMl9UVl9OT1JNIChnc3RfdjRsMl90dl9ub3JtX2dldF90eXBlICgpKQotc3RhdGljIEdUeXBlCi1nc3RfdjRsMl90dl9ub3JtX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgR1R5cGUgdjRsMl90dl9ub3JtID0gMDsKLQotICBpZiAoIXY0bDJfdHZfbm9ybSkgewotICAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIHR2X25vcm1zW10gPSB7Ci0gICAgICB7MCwgIm5vbmUiLCAibm9uZSJ9LAotCi0gICAgICB7VjRMMl9TVERfTlRTQywgIk5UU0MiLCAiTlRTQyJ9LAotICAgICAge1Y0TDJfU1REX05UU0NfTSwgIk5UU0MtTSIsICJOVFNDLU0ifSwKLSAgICAgIHtWNEwyX1NURF9OVFNDX01fSlAsICJOVFNDLU0tSlAiLCAiTlRTQy1NLUpQIn0sCi0gICAgICB7VjRMMl9TVERfTlRTQ19NX0tSLCAiTlRTQy1NLUtSIiwgIk5UU0MtTS1LUiJ9LAotICAgICAge1Y0TDJfU1REX05UU0NfNDQzLCAiTlRTQy00NDMiLCAiTlRTQy00NDMifSwKLQotICAgICAge1Y0TDJfU1REX1BBTCwgIlBBTCIsICJQQUwifSwKLSAgICAgIHtWNEwyX1NURF9QQUxfQkcsICJQQUwtQkciLCAiUEFMLUJHIn0sCi0gICAgICB7VjRMMl9TVERfUEFMX0IsICJQQUwtQiIsICJQQUwtQiJ9LAotICAgICAge1Y0TDJfU1REX1BBTF9CMSwgIlBBTC1CMSIsICJQQUwtQjEifSwKLSAgICAgIHtWNEwyX1NURF9QQUxfRywgIlBBTC1HIiwgIlBBTC1HIn0sCi0gICAgICB7VjRMMl9TVERfUEFMX0gsICJQQUwtSCIsICJQQUwtSCJ9LAotICAgICAge1Y0TDJfU1REX1BBTF9JLCAiUEFMLUkiLCAiUEFMLUkifSwKLSAgICAgIHtWNEwyX1NURF9QQUxfREssICJQQUwtREsiLCAiUEFMLURLIn0sCi0gICAgICB7VjRMMl9TVERfUEFMX0QsICJQQUwtRCIsICJQQUwtRCJ9LAotICAgICAge1Y0TDJfU1REX1BBTF9EMSwgIlBBTC1EMSIsICJQQUwtRDEifSwKLSAgICAgIHtWNEwyX1NURF9QQUxfSywgIlBBTC1LIiwgIlBBTC1LIn0sCi0gICAgICB7VjRMMl9TVERfUEFMX00sICJQQUwtTSIsICJQQUwtTSJ9LAotICAgICAge1Y0TDJfU1REX1BBTF9OLCAiUEFMLU4iLCAiUEFMLU4ifSwKLSAgICAgIHtWNEwyX1NURF9QQUxfTmMsICJQQUwtTmMiLCAiUEFMLU5jIn0sCi0gICAgICB7VjRMMl9TVERfUEFMXzYwLCAiUEFMLTYwIiwgIlBBTC02MCJ9LAotCi0gICAgICB7VjRMMl9TVERfU0VDQU0sICJTRUNBTSIsICJTRUNBTSJ9LAotICAgICAge1Y0TDJfU1REX1NFQ0FNX0IsICJTRUNBTS1CIiwgIlNFQ0FNLUIifSwKLSAgICAgIHtWNEwyX1NURF9TRUNBTV9HLCAiU0VDQU0tRyIsICJTRUNBTS1HIn0sCi0gICAgICB7VjRMMl9TVERfU0VDQU1fSCwgIlNFQ0FNLUgiLCAiU0VDQU0tSCJ9LAotICAgICAge1Y0TDJfU1REX1NFQ0FNX0RLLCAiU0VDQU0tREsiLCAiU0VDQU0tREsifSwKLSAgICAgIHtWNEwyX1NURF9TRUNBTV9ELCAiU0VDQU0tRCIsICJTRUNBTS1EIn0sCi0gICAgICB7VjRMMl9TVERfU0VDQU1fSywgIlNFQ0FNLUsiLCAiU0VDQU0tSyJ9LAotICAgICAge1Y0TDJfU1REX1NFQ0FNX0sxLCAiU0VDQU0tSzEiLCAiU0VDQU0tSzEifSwKLSAgICAgIHtWNEwyX1NURF9TRUNBTV9MLCAiU0VDQU0tTCIsICJTRUNBTS1MIn0sCi0gICAgICB7VjRMMl9TVERfU0VDQU1fTEMsICJTRUNBTS1MYyIsICJTRUNBTS1MYyJ9LAotCi0gICAgICB7MCwgTlVMTCwgTlVMTH0KLSAgICB9OwotCi0gICAgdjRsMl90dl9ub3JtID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIlY0TDJfVFZfbm9ybXMiLCB0dl9ub3Jtcyk7Ci0gIH0KLQotICByZXR1cm4gdjRsMl90dl9ub3JtOwotfQotCi1HVHlwZQotZ3N0X3Y0bDJfaW9fbW9kZV9nZXRfdHlwZSAodm9pZCkKLXsKLSAgc3RhdGljIEdUeXBlIHY0bDJfaW9fbW9kZSA9IDA7Ci0KLSAgaWYgKCF2NGwyX2lvX21vZGUpIHsKLSAgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBpb19tb2Rlc1tdID0gewotICAgICAge0dTVF9WNEwyX0lPX0FVVE8sICJHU1RfVjRMMl9JT19BVVRPIiwgImF1dG8ifSwKLSAgICAgIHtHU1RfVjRMMl9JT19SVywgIkdTVF9WNEwyX0lPX1JXIiwgInJ3In0sCi0gICAgICB7R1NUX1Y0TDJfSU9fTU1BUCwgIkdTVF9WNEwyX0lPX01NQVAiLCAibW1hcCJ9LAotICAgICAge0dTVF9WNEwyX0lPX1VTRVJQVFIsICJHU1RfVjRMMl9JT19VU0VSUFRSIiwgInVzZXJwdHIifSwKLSAgICAgIHtHU1RfVjRMMl9JT19ETUFCVUYsICJHU1RfVjRMMl9JT19ETUFCVUYiLCAiZG1hYnVmIn0sCi0gICAgICB7R1NUX1Y0TDJfSU9fRE1BQlVGX0lNUE9SVCwgIkdTVF9WNEwyX0lPX0RNQUJVRl9JTVBPUlQiLAotICAgICAgICAgICJkbWFidWYtaW1wb3J0In0sCi0KLSAgICAgIHswLCBOVUxMLCBOVUxMfQotICAgIH07Ci0gICAgdjRsMl9pb19tb2RlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIkdzdFY0bDJJT01vZGUiLCBpb19tb2Rlcyk7Ci0gIH0KLSAgcmV0dXJuIHY0bDJfaW9fbW9kZTsKLX0KLQotdm9pZAotZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIgKEdPYmplY3RDbGFzcyAqIGdvYmplY3RfY2xhc3MsCi0gICAgY29uc3QgY2hhciAqZGVmYXVsdF9kZXZpY2UpCi17Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZSIsICJEZXZpY2UiLCAiRGV2aWNlIGxvY2F0aW9uIiwKLSAgICAgICAgICBkZWZhdWx0X2RldmljZSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfREVWSUNFX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGV2aWNlLW5hbWUiLCAiRGV2aWNlIG5hbWUiLAotICAgICAgICAgICJOYW1lIG9mIHRoZSBkZXZpY2UiLCBERUZBVUxUX1BST1BfREVWSUNFX05BTUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERVZJQ0VfRkQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZGV2aWNlLWZkIiwgIkZpbGUgZGVzY3JpcHRvciIsCi0gICAgICAgICAgIkZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlIiwgLTEsIEdfTUFYSU5ULCBERUZBVUxUX1BST1BfREVWSUNFX0ZELAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRkxBR1MsCi0gICAgICBnX3BhcmFtX3NwZWNfZmxhZ3MgKCJmbGFncyIsICJGbGFncyIsICJEZXZpY2UgdHlwZSBmbGFncyIsCi0gICAgICAgICAgR1NUX1RZUEVfVjRMMl9ERVZJQ0VfRkxBR1MsIERFRkFVTFRfUFJPUF9GTEFHUywKLSAgICAgICAgICBHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RWNGwyU3JjOmJyaWdodG5lc3M6Ci0gICAqCi0gICAqIFBpY3R1cmUgYnJpZ2h0bmVzcywgb3IgbW9yZSBwcmVjaXNlbHksIHRoZSBibGFjayBsZXZlbAotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9CUklHSFRORVNTLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImJyaWdodG5lc3MiLCAiQnJpZ2h0bmVzcyIsCi0gICAgICAgICAgIlBpY3R1cmUgYnJpZ2h0bmVzcywgb3IgbW9yZSBwcmVjaXNlbHksIHRoZSBibGFjayBsZXZlbCIsIEdfTUlOSU5ULAotICAgICAgICAgIEdfTUFYSU5ULCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgLyoqCi0gICAqIEdzdFY0bDJTcmM6Y29udHJhc3Q6Ci0gICAqCi0gICAqIFBpY3R1cmUgY29udHJhc3Qgb3IgbHVtYSBnYWluCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NPTlRSQVNULAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoImNvbnRyYXN0IiwgIkNvbnRyYXN0IiwKLSAgICAgICAgICAiUGljdHVyZSBjb250cmFzdCBvciBsdW1hIGdhaW4iLCBHX01JTklOVCwKLSAgICAgICAgICBHX01BWElOVCwgMCwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MgfCBHU1RfUEFSQU1fQ09OVFJPTExBQkxFKSk7Ci0gIC8qKgotICAgKiBHc3RWNGwyU3JjOnNhdHVyYXRpb246Ci0gICAqCi0gICAqIFBpY3R1cmUgY29sb3Igc2F0dXJhdGlvbiBvciBjaHJvbWEgZ2FpbgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9TQVRVUkFUSU9OLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoInNhdHVyYXRpb24iLCAiU2F0dXJhdGlvbiIsCi0gICAgICAgICAgIlBpY3R1cmUgY29sb3Igc2F0dXJhdGlvbiBvciBjaHJvbWEgZ2FpbiIsIEdfTUlOSU5ULAotICAgICAgICAgIEdfTUFYSU5ULCAwLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUyB8IEdTVF9QQVJBTV9DT05UUk9MTEFCTEUpKTsKLSAgLyoqCi0gICAqIEdzdFY0bDJTcmM6aHVlOgotICAgKgotICAgKiBIdWUgb3IgY29sb3IgYmFsYW5jZQotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9IVUUsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiaHVlIiwgIkh1ZSIsCi0gICAgICAgICAgIkh1ZSBvciBjb2xvciBiYWxhbmNlIiwgR19NSU5JTlQsCi0gICAgICAgICAgR19NQVhJTlQsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTIHwgR1NUX1BBUkFNX0NPTlRST0xMQUJMRSkpOwotCi0gIC8qKgotICAgKiBHc3RWNGwyU3JjOm5vcm06Ci0gICAqCi0gICAqIFRWIG5vcm0KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfVFZfTk9STSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgibm9ybSIsICJUViBub3JtIiwKLSAgICAgICAgICAidmlkZW8gc3RhbmRhcmQiLAotICAgICAgICAgIEdTVF9UWVBFX1Y0TDJfVFZfTk9STSwgREVGQVVMVF9QUk9QX1RWX05PUk0sCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFY0bDJTcmM6aW8tbW9kZToKLSAgICoKLSAgICogSU8gTW9kZQotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9JT19NT0RFLAotICAgICAgZ19wYXJhbV9zcGVjX2VudW0gKCJpby1tb2RlIiwgIklPIG1vZGUiLAotICAgICAgICAgICJJL08gbW9kZSIsCi0gICAgICAgICAgR1NUX1RZUEVfVjRMMl9JT19NT0RFLCBERUZBVUxUX1BST1BfSU9fTU9ERSwKLSAgICAgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICAvKioKLSAgICogR3N0VjRsMlNyYzpleHRyYS1jb250cm9sczoKLSAgICoKLSAgICogQWRkaXRpb25hbCB2NGwyIGNvbnRyb2xzIGZvciB0aGUgZGV2aWNlLiBUaGUgY29udHJvbHMgYXJlIGlkZW50aWZpZWQKLSAgICogYnkgdGhlIGNvbnRyb2wgbmFtZSAobG93ZXJjYXNlIHdpdGggJ18nIGZvciBhbnkgbm9uLWFscGhhbnVtZXJpYwotICAgKiBjaGFyYWN0ZXJzKS4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9FWFRSQV9DT05UUk9MUywKLSAgICAgIGdfcGFyYW1fc3BlY19ib3hlZCAoImV4dHJhLWNvbnRyb2xzIiwgIkV4dHJhIENvbnRyb2xzIiwKLSAgICAgICAgICAiRXh0cmEgdjRsMiBjb250cm9scyAoQ0lEcykgZm9yIHRoZSBkZXZpY2UiLAotICAgICAgICAgIEdTVF9UWVBFX1NUUlVDVFVSRSwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgLyoqCi0gICAqIEdzdFY0bDJTcmM6cGl4ZWwtYXNwZWN0LXJhdGlvOgotICAgKgotICAgKiBUaGUgcGl4ZWwgYXNwZWN0IHJhdGlvIG9mIHRoZSBkZXZpY2UuIFRoaXMgb3ZlcndyaXRlcyB0aGUgcGl4ZWwgYXNwZWN0Ci0gICAqIHJhdGlvIHF1ZXJpZWQgZnJvbSB0aGUgZGV2aWNlLgotICAgKgotICAgKiBTaW5jZTogMS4yCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX1BJWEVMX0FTUEVDVF9SQVRJTywKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJwaXhlbC1hc3BlY3QtcmF0aW8iLCAiUGl4ZWwgQXNwZWN0IFJhdGlvIiwKLSAgICAgICAgICAiT3ZlcndyaXRlIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gb2YgdGhlIGRldmljZSIsICIxLzEiLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIC8qKgotICAgKiBHc3RWNGwyU3JjOmZvcmNlLWFzcGVjdC1yYXRpbzoKLSAgICoKLSAgICogV2hlbiBlbmFibGVkLCB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIHF1ZXJpZWQgZnJvbSB0aGUgZGV2aWNlIG9yIHNldAotICAgKiB3aXRoIHRoZSBwaXhlbC1hc3BlY3QtcmF0aW8gcHJvcGVydHkgd2lsbCBiZSBlbmZvcmNlZC4KLSAgICoKLSAgICogU2luY2U6IDEuMgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9GT1JDRV9BU1BFQ1RfUkFUSU8sCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoImZvcmNlLWFzcGVjdC1yYXRpbyIsICJGb3JjZSBhc3BlY3QgcmF0aW8iLAotICAgICAgICAgICJXaGVuIGVuYWJsZWQsIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gd2lsbCBiZSBlbmZvcmNlZCIsIFRSVUUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLX0KLQotdm9pZAotZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfbTJtX3Byb3BlcnRpZXNfaGVscGVyIChHT2JqZWN0Q2xhc3MgKiBnb2JqZWN0X2NsYXNzKQotewotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFVklDRSwKLSAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJkZXZpY2UiLCAiRGV2aWNlIiwgIkRldmljZSBsb2NhdGlvbiIsCi0gICAgICAgICAgTlVMTCwgR19QQVJBTV9SRUFEQUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0RFVklDRV9OQU1FLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZS1uYW1lIiwgIkRldmljZSBuYW1lIiwKLSAgICAgICAgICAiTmFtZSBvZiB0aGUgZGV2aWNlIiwgREVGQVVMVF9QUk9QX0RFVklDRV9OQU1FLAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9ERVZJQ0VfRkQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZGV2aWNlLWZkIiwgIkZpbGUgZGVzY3JpcHRvciIsCi0gICAgICAgICAgIkZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZGV2aWNlIiwgLTEsIEdfTUFYSU5ULCBERUZBVUxUX1BST1BfREVWSUNFX0ZELAotICAgICAgICAgIEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9PVVRQVVRfSU9fTU9ERSwKLSAgICAgIGdfcGFyYW1fc3BlY19lbnVtICgib3V0cHV0LWlvLW1vZGUiLCAiT3V0cHV0IElPIG1vZGUiLAotICAgICAgICAgICJPdXRwdXQgc2lkZSBJL08gbW9kZSAobWF0Y2hlcyBzaW5rIHBhZCkiLAotICAgICAgICAgIEdTVF9UWVBFX1Y0TDJfSU9fTU9ERSwgREVGQVVMVF9QUk9QX0lPX01PREUsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQVBUVVJFX0lPX01PREUsCi0gICAgICBnX3BhcmFtX3NwZWNfZW51bSAoImNhcHR1cmUtaW8tbW9kZSIsICJDYXB0dXJlIElPIG1vZGUiLAotICAgICAgICAgICJDYXB0dXJlIEkvTyBtb2RlIChtYXRjaGVzIHNyYyBwYWQpIiwKLSAgICAgICAgICBHU1RfVFlQRV9WNEwyX0lPX01PREUsIERFRkFVTFRfUFJPUF9JT19NT0RFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfRVhUUkFfQ09OVFJPTFMsCi0gICAgICBnX3BhcmFtX3NwZWNfYm94ZWQgKCJleHRyYS1jb250cm9scyIsICJFeHRyYSBDb250cm9scyIsCi0gICAgICAgICAgIkV4dHJhIHY0bDIgY29udHJvbHMgKENJRHMpIGZvciB0aGUgZGV2aWNlIiwKLSAgICAgICAgICBHU1RfVFlQRV9TVFJVQ1RVUkUsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotfQotCi1Hc3RWNGwyT2JqZWN0ICoKLWdzdF92NGwyX29iamVjdF9uZXcgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAotICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfZGV2aWNlLAotICAgIEdzdFY0bDJHZXRJbk91dEZ1bmN0aW9uIGdldF9pbl9vdXRfZnVuYywKLSAgICBHc3RWNGwyU2V0SW5PdXRGdW5jdGlvbiBzZXRfaW5fb3V0X2Z1bmMsCi0gICAgR3N0VjRsMlVwZGF0ZUZwc0Z1bmN0aW9uIHVwZGF0ZV9mcHNfZnVuYykKLXsKLSAgR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdDsKLQotICAvKgotICAgKiBzb21lIGRlZmF1bHQgdmFsdWVzCi0gICAqLwotICB2NGwyb2JqZWN0ID0gZ19uZXcwIChHc3RWNGwyT2JqZWN0LCAxKTsKLQotICB2NGwyb2JqZWN0LT50eXBlID0gdHlwZTsKLSAgdjRsMm9iamVjdC0+Zm9ybWF0cyA9IE5VTEw7Ci0KLSAgdjRsMm9iamVjdC0+ZWxlbWVudCA9IGVsZW1lbnQ7Ci0gIHY0bDJvYmplY3QtPmdldF9pbl9vdXRfZnVuYyA9IGdldF9pbl9vdXRfZnVuYzsKLSAgdjRsMm9iamVjdC0+c2V0X2luX291dF9mdW5jID0gc2V0X2luX291dF9mdW5jOwotICB2NGwyb2JqZWN0LT51cGRhdGVfZnBzX2Z1bmMgPSB1cGRhdGVfZnBzX2Z1bmM7Ci0KLSAgdjRsMm9iamVjdC0+dmlkZW9fZmQgPSAtMTsKLSAgdjRsMm9iamVjdC0+YWN0aXZlID0gRkFMU0U7Ci0gIHY0bDJvYmplY3QtPnZpZGVvZGV2ID0gZ19zdHJkdXAgKGRlZmF1bHRfZGV2aWNlKTsKLQotICB2NGwyb2JqZWN0LT5ub3JtcyA9IE5VTEw7Ci0gIHY0bDJvYmplY3QtPmNoYW5uZWxzID0gTlVMTDsKLSAgdjRsMm9iamVjdC0+Y29sb3JzID0gTlVMTDsKLQotICB2NGwyb2JqZWN0LT54d2luZG93X2lkID0gMDsKLQotICB2NGwyb2JqZWN0LT5rZWVwX2FzcGVjdCA9IFRSVUU7Ci0KLSAgdjRsMm9iamVjdC0+bl92NGwyX3BsYW5lcyA9IDA7Ci0KLSAgdjRsMm9iamVjdC0+bm9faW5pdGlhbF9mb3JtYXQgPSBGQUxTRTsKLQotICByZXR1cm4gdjRsMm9iamVjdDsKLX0KLQotc3RhdGljIGdib29sZWFuIGdzdF92NGwyX29iamVjdF9jbGVhcl9mb3JtYXRfbGlzdCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpOwotCi0KLXZvaWQKLWdzdF92NGwyX29iamVjdF9kZXN0cm95IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAodjRsMm9iamVjdCAhPSBOVUxMKTsKLQotICBnX2ZyZWUgKHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLQotICBnX2ZyZWUgKHY0bDJvYmplY3QtPmNoYW5uZWwpOwotCi0gIGlmICh2NGwyb2JqZWN0LT5mb3JtYXRzKSB7Ci0gICAgZ3N0X3Y0bDJfb2JqZWN0X2NsZWFyX2Zvcm1hdF9saXN0ICh2NGwyb2JqZWN0KTsKLSAgfQotCi0gIGlmICh2NGwyb2JqZWN0LT5wcm9iZWRfY2FwcykgewotICAgIGdzdF9jYXBzX3VucmVmICh2NGwyb2JqZWN0LT5wcm9iZWRfY2Fwcyk7Ci0gIH0KLQotICBpZiAodjRsMm9iamVjdC0+ZXh0cmFfY29udHJvbHMpIHsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHY0bDJvYmplY3QtPmV4dHJhX2NvbnRyb2xzKTsKLSAgfQotCi0gIGdfZnJlZSAodjRsMm9iamVjdCk7Ci19Ci0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl9vYmplY3RfY2xlYXJfZm9ybWF0X2xpc3QgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KQotewotICBnX3NsaXN0X2ZvcmVhY2ggKHY0bDJvYmplY3QtPmZvcm1hdHMsIChHRnVuYykgZ19mcmVlLCBOVUxMKTsKLSAgZ19zbGlzdF9mcmVlICh2NGwyb2JqZWN0LT5mb3JtYXRzKTsKLSAgdjRsMm9iamVjdC0+Zm9ybWF0cyA9IE5VTEw7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50Ci1nc3RfdjRsMl9vYmplY3RfcHJvcF90b19jaWQgKGd1aW50IHByb3BfaWQpCi17Ci0gIGdpbnQgY2lkID0gLTE7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0JSSUdIVE5FU1M6Ci0gICAgICBjaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NPTlRSQVNUOgotICAgICAgY2lkID0gVjRMMl9DSURfQ09OVFJBU1Q7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0FUVVJBVElPTjoKLSAgICAgIGNpZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT047Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfSFVFOgotICAgICAgY2lkID0gVjRMMl9DSURfSFVFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9XQVJOSU5HICgidW5tYXBwZWQgcHJvcGVydHkgaWQ6ICVkIiwgcHJvcF9pZCk7Ci0gIH0KLSAgcmV0dXJuIGNpZDsKLX0KLQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X3NldF9wcm9wZXJ0eV9oZWxwZXIgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9ERVZJQ0U6Ci0gICAgICBnX2ZyZWUgKHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLSAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2ID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQlJJR0hUTkVTUzoKLSAgICBjYXNlIFBST1BfQ09OVFJBU1Q6Ci0gICAgY2FzZSBQUk9QX1NBVFVSQVRJT046Ci0gICAgY2FzZSBQUk9QX0hVRToKLSAgICB7Ci0gICAgICBnaW50IGNpZCA9IGdzdF92NGwyX29iamVjdF9wcm9wX3RvX2NpZCAocHJvcF9pZCk7Ci0KLSAgICAgIGlmIChjaWQgIT0gLTEpIHsKLSAgICAgICAgaWYgKEdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKSB7Ci0gICAgICAgICAgZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSAodjRsMm9iamVjdCwgY2lkLCBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9UVl9OT1JNOgotICAgICAgdjRsMm9iamVjdC0+dHZfbm9ybSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotI2lmIDAKLSAgICBjYXNlIFBST1BfQ0hBTk5FTDoKLSAgICAgIGlmIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkgewotICAgICAgICBHc3RUdW5lciAqdHVuZXIgPSBHU1RfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpOwotICAgICAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwgPSBnc3RfdHVuZXJfZmluZF9jaGFubmVsX2J5X25hbWUgKHR1bmVyLAotICAgICAgICAgICAgKGdjaGFyICopIGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLQotICAgICAgICBpZiAoY2hhbm5lbCkgewotICAgICAgICAgIC8qIGxpa2UgZ3N0X3R1bmVyX3NldF9jaGFubmVsICh0dW5lciwgY2hhbm5lbCkKLSAgICAgICAgICAgICB3aXRob3V0IGdfb2JqZWN0X25vdGlmeSAqLwotICAgICAgICAgIGdzdF92NGwyX3R1bmVyX3NldF9jaGFubmVsICh2NGwyb2JqZWN0LCBjaGFubmVsKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ19mcmVlICh2NGwyb2JqZWN0LT5jaGFubmVsKTsKLSAgICAgICAgdjRsMm9iamVjdC0+Y2hhbm5lbCA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZSRVFVRU5DWToKLSAgICAgIGlmIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkgewotICAgICAgICBHc3RUdW5lciAqdHVuZXIgPSBHU1RfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpOwotICAgICAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwgPSBnc3RfdHVuZXJfZ2V0X2NoYW5uZWwgKHR1bmVyKTsKLQotICAgICAgICBpZiAoY2hhbm5lbCAmJgotICAgICAgICAgICAgR1NUX1RVTkVSX0NIQU5ORUxfSEFTX0ZMQUcgKGNoYW5uZWwsIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSkpIHsKLSAgICAgICAgICAvKiBsaWtlCi0gICAgICAgICAgICAgZ3N0X3R1bmVyX3NldF9mcmVxdWVuY3kgKHR1bmVyLCBjaGFubmVsLCBnX3ZhbHVlX2dldF91bG9uZyAodmFsdWUpKQotICAgICAgICAgICAgIHdpdGhvdXQgZ19vYmplY3Rfbm90aWZ5ICovCi0gICAgICAgICAgZ3N0X3Y0bDJfdHVuZXJfc2V0X2ZyZXF1ZW5jeSAodjRsMm9iamVjdCwgY2hhbm5lbCwKLSAgICAgICAgICAgICAgZ192YWx1ZV9nZXRfdWxvbmcgKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHY0bDJvYmplY3QtPmZyZXF1ZW5jeSA9IGdfdmFsdWVfZ2V0X3Vsb25nICh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgY2FzZSBQUk9QX0lPX01PREU6Ci0gICAgICB2NGwyb2JqZWN0LT5yZXFfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQVBUVVJFX0lPX01PREU6Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoIVY0TDJfVFlQRV9JU19PVVRQVVQgKHY0bDJvYmplY3QtPnR5cGUpLCBGQUxTRSk7Ci0gICAgICB2NGwyb2JqZWN0LT5yZXFfbW9kZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9PVVRQVVRfSU9fTU9ERToKLSAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChWNEwyX1RZUEVfSVNfT1VUUFVUICh2NGwyb2JqZWN0LT50eXBlKSwgRkFMU0UpOwotICAgICAgdjRsMm9iamVjdC0+cmVxX21vZGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRVhUUkFfQ09OVFJPTFM6ewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUgKHZhbHVlKTsKLQotICAgICAgaWYgKHY0bDJvYmplY3QtPmV4dHJhX2NvbnRyb2xzKQotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHY0bDJvYmplY3QtPmV4dHJhX2NvbnRyb2xzKTsKLQotICAgICAgdjRsMm9iamVjdC0+ZXh0cmFfY29udHJvbHMgPSBzID8gZ3N0X3N0cnVjdHVyZV9jb3B5IChzKSA6IE5VTEw7Ci0gICAgICBpZiAoR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpCi0gICAgICAgIGdzdF92NGwyX3NldF9jb250cm9scyAodjRsMm9iamVjdCwgdjRsMm9iamVjdC0+ZXh0cmFfY29udHJvbHMpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9QSVhFTF9BU1BFQ1RfUkFUSU86Ci0gICAgICBnX2ZyZWUgKHY0bDJvYmplY3QtPnBhcik7Ci0gICAgICB2NGwyb2JqZWN0LT5wYXIgPSBnX25ldzAgKEdWYWx1ZSwgMSk7Ci0gICAgICBnX3ZhbHVlX2luaXQgKHY0bDJvYmplY3QtPnBhciwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICAgICAgaWYgKCFnX3ZhbHVlX3RyYW5zZm9ybSAodmFsdWUsIHY0bDJvYmplY3QtPnBhcikpIHsKLSAgICAgICAgZ193YXJuaW5nICgiQ291bGQgbm90IHRyYW5zZm9ybSBzdHJpbmcgdG8gYXNwZWN0IHJhdGlvIik7Ci0gICAgICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKHY0bDJvYmplY3QtPnBhciwgMSwgMSk7Ci0gICAgICB9Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAic2V0IFBBUiB0byAlZC8lZCIsCi0gICAgICAgICAgZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKHY0bDJvYmplY3QtPnBhciksCi0gICAgICAgICAgZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAodjRsMm9iamVjdC0+cGFyKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRk9SQ0VfQVNQRUNUX1JBVElPOgotICAgICAgdjRsMm9iamVjdC0+a2VlcF9hc3BlY3QgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfREVWSUNFOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgdjRsMm9iamVjdC0+dmlkZW9kZXYpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0RFVklDRV9OQU1FOgotICAgIHsKLSAgICAgIGNvbnN0IGd1Y2hhciAqbmV3ID0gTlVMTDsKLQotICAgICAgaWYgKEdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKSB7Ci0gICAgICAgIG5ldyA9IHY0bDJvYmplY3QtPnZjYXAuY2FyZDsKLSAgICAgIH0gZWxzZSBpZiAoZ3N0X3Y0bDJfb3BlbiAodjRsMm9iamVjdCkpIHsKLSAgICAgICAgbmV3ID0gdjRsMm9iamVjdC0+dmNhcC5jYXJkOwotICAgICAgICBnc3RfdjRsMl9jbG9zZSAodjRsMm9iamVjdCk7Ci0gICAgICB9Ci0gICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCAoZ2NoYXIgKikgbmV3KTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfREVWSUNFX0ZEOgotICAgIHsKLSAgICAgIGlmIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdjRsMm9iamVjdC0+dmlkZW9fZmQpOwotICAgICAgZWxzZQotICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCBERUZBVUxUX1BST1BfREVWSUNFX0ZEKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfRkxBR1M6Ci0gICAgewotICAgICAgZ3VpbnQgZmxhZ3MgPSAwOwotCi0gICAgICBpZiAoR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpIHsKLSAgICAgICAgZmxhZ3MgfD0gdjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJgotICAgICAgICAgICAgKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotICAgICAgICAgICAgVjRMMl9DQVBfVklERU9fT1VUUFVUIHwKLSAgICAgICAgICAgIFY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgfAotICAgICAgICAgICAgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfAotICAgICAgICAgICAgVjRMMl9DQVBfVkJJX09VVFBVVCB8IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfQVVESU8pOwotCi0gICAgICAgIGlmICh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5FKQotICAgICAgICAgIGZsYWdzIHw9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU7Ci0KLSAgICAgICAgaWYgKHY0bDJvYmplY3QtPmRldmljZV9jYXBzICYgVjRMMl9DQVBfVklERU9fT1VUUFVUX01QTEFORSkKLSAgICAgICAgICBmbGFncyB8PSBWNEwyX0NBUF9WSURFT19PVVRQVVQ7Ci0gICAgICB9Ci0gICAgICBnX3ZhbHVlX3NldF9mbGFncyAodmFsdWUsIGZsYWdzKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQlJJR0hUTkVTUzoKLSAgICBjYXNlIFBST1BfQ09OVFJBU1Q6Ci0gICAgY2FzZSBQUk9QX1NBVFVSQVRJT046Ci0gICAgY2FzZSBQUk9QX0hVRToKLSAgICB7Ci0gICAgICBnaW50IGNpZCA9IGdzdF92NGwyX29iamVjdF9wcm9wX3RvX2NpZCAocHJvcF9pZCk7Ci0KLSAgICAgIGlmIChjaWQgIT0gLTEpIHsKLSAgICAgICAgaWYgKEdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKSB7Ci0gICAgICAgICAgZ2ludCB2OwotICAgICAgICAgIGlmIChnc3RfdjRsMl9nZXRfYXR0cmlidXRlICh2NGwyb2JqZWN0LCBjaWQsICZ2KSkgewotICAgICAgICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgdik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gVFJVRTsKLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVFZfTk9STToKLSAgICAgIGdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCB2NGwyb2JqZWN0LT50dl9ub3JtKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9JT19NT0RFOgotICAgICAgZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHY0bDJvYmplY3QtPnJlcV9tb2RlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9DQVBUVVJFX0lPX01PREU6Ci0gICAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoIVY0TDJfVFlQRV9JU19PVVRQVVQgKHY0bDJvYmplY3QtPnR5cGUpLCBGQUxTRSk7Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgdjRsMm9iamVjdC0+cmVxX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX09VVFBVVF9JT19NT0RFOgotICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFY0TDJfVFlQRV9JU19PVVRQVVQgKHY0bDJvYmplY3QtPnR5cGUpLCBGQUxTRSk7Ci0gICAgICBnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgdjRsMm9iamVjdC0+cmVxX21vZGUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VYVFJBX0NPTlRST0xTOgotICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUgKHZhbHVlLCB2NGwyb2JqZWN0LT5leHRyYV9jb250cm9scyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUElYRUxfQVNQRUNUX1JBVElPOgotICAgICAgaWYgKHY0bDJvYmplY3QtPnBhcikKLSAgICAgICAgZ192YWx1ZV90cmFuc2Zvcm0gKHY0bDJvYmplY3QtPnBhciwgdmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0ZPUkNFX0FTUEVDVF9SQVRJTzoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCB2NGwyb2JqZWN0LT5rZWVwX2FzcGVjdCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9nZXRfZHJpdmVyX21pbl9idWZmZXJzIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgc3RydWN0IHY0bDJfY29udHJvbCBjb250cm9sID0geyAwLCB9OwotCi0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKTsKLQotICBpZiAoVjRMMl9UWVBFX0lTX09VVFBVVCAodjRsMm9iamVjdC0+dHlwZSkpCi0gICAgY29udHJvbC5pZCA9IFY0TDJfQ0lEX01JTl9CVUZGRVJTX0ZPUl9PVVRQVVQ7Ci0gIGVsc2UKLSAgICBjb250cm9sLmlkID0gVjRMMl9DSURfTUlOX0JVRkZFUlNfRk9SX0NBUFRVUkU7Ci0KLSAgaWYgKHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfR19DVFJMLCAmY29udHJvbCkgPT0gMCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICJkcml2ZXIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mICVkIGJ1ZmZlcnMiLCBjb250cm9sLnZhbHVlKTsKLSAgICB2NGwyb2JqZWN0LT5taW5fYnVmZmVycyA9IGNvbnRyb2wudmFsdWU7Ci0gIH0gZWxzZSB7Ci0gICAgdjRsMm9iamVjdC0+bWluX2J1ZmZlcnMgPSAwOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9zZXRfZGVmYXVsdHMgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KQotewotICBHc3RUdW5lck5vcm0gKm5vcm0gPSBOVUxMOwotICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwgPSBOVUxMOwotICBHc3RUdW5lciAqdHVuZXI7Ci0KLSAgaWYgKCFHU1RfSVNfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpKQotICAgIHJldHVybjsKLQotICB0dW5lciA9IEdTVF9UVU5FUiAodjRsMm9iamVjdC0+ZWxlbWVudCk7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPnR2X25vcm0pCi0gICAgbm9ybSA9IGdzdF92NGwyX3R1bmVyX2dldF9ub3JtX2J5X3N0ZF9pZCAodjRsMm9iamVjdCwgdjRsMm9iamVjdC0+dHZfbm9ybSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJ0dl9ub3JtPTB4JSIgR19HSU5UNjRfTU9ESUZJRVIgIngsICIKLSAgICAgICJub3JtPSVwIiwgKGd1aW50NjQpIHY0bDJvYmplY3QtPnR2X25vcm0sIG5vcm0pOwotICBpZiAobm9ybSkgewotICAgIGdzdF90dW5lcl9zZXRfbm9ybSAodHVuZXIsIG5vcm0pOwotICB9IGVsc2UgewotICAgIG5vcm0gPQotICAgICAgICBHU1RfVFVORVJfTk9STSAoZ3N0X3R1bmVyX2dldF9ub3JtIChHU1RfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpKSk7Ci0gICAgaWYgKG5vcm0pIHsKLSAgICAgIHY0bDJvYmplY3QtPnR2X25vcm0gPQotICAgICAgICAgIGdzdF92NGwyX3R1bmVyX2dldF9zdGRfaWRfYnlfbm9ybSAodjRsMm9iamVjdCwgbm9ybSk7Ci0gICAgICBnc3RfdHVuZXJfbm9ybV9jaGFuZ2VkICh0dW5lciwgbm9ybSk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHY0bDJvYmplY3QtPmNoYW5uZWwpCi0gICAgY2hhbm5lbCA9IGdzdF90dW5lcl9maW5kX2NoYW5uZWxfYnlfbmFtZSAodHVuZXIsIHY0bDJvYmplY3QtPmNoYW5uZWwpOwotICBpZiAoY2hhbm5lbCkgewotICAgIGdzdF90dW5lcl9zZXRfY2hhbm5lbCAodHVuZXIsIGNoYW5uZWwpOwotICB9IGVsc2UgewotICAgIGNoYW5uZWwgPQotICAgICAgICBHU1RfVFVORVJfQ0hBTk5FTCAoZ3N0X3R1bmVyX2dldF9jaGFubmVsIChHU1RfVFVORVIKLSAgICAgICAgICAgICh2NGwyb2JqZWN0LT5lbGVtZW50KSkpOwotICAgIGlmIChjaGFubmVsKSB7Ci0gICAgICBnX2ZyZWUgKHY0bDJvYmplY3QtPmNoYW5uZWwpOwotICAgICAgdjRsMm9iamVjdC0+Y2hhbm5lbCA9IGdfc3RyZHVwIChjaGFubmVsLT5sYWJlbCk7Ci0gICAgICBnc3RfdHVuZXJfY2hhbm5lbF9jaGFuZ2VkICh0dW5lciwgY2hhbm5lbCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNoYW5uZWwKLSAgICAgICYmIEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHIChjaGFubmVsLCBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kpKSB7Ci0gICAgaWYgKHY0bDJvYmplY3QtPmZyZXF1ZW5jeSAhPSAwKSB7Ci0gICAgICBnc3RfdHVuZXJfc2V0X2ZyZXF1ZW5jeSAodHVuZXIsIGNoYW5uZWwsIHY0bDJvYmplY3QtPmZyZXF1ZW5jeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHY0bDJvYmplY3QtPmZyZXF1ZW5jeSA9IGdzdF90dW5lcl9nZXRfZnJlcXVlbmN5ICh0dW5lciwgY2hhbm5lbCk7Ci0gICAgICBpZiAodjRsMm9iamVjdC0+ZnJlcXVlbmN5ID09IDApIHsKLSAgICAgICAgLyogZ3Vlc3MgKi8KLSAgICAgICAgZ3N0X3R1bmVyX3NldF9mcmVxdWVuY3kgKHR1bmVyLCBjaGFubmVsLCAxMDAwKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3Rfb3BlbiAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIGlmIChnc3RfdjRsMl9vcGVuICh2NGwyb2JqZWN0KSkKLSAgICBnc3RfdjRsMl9zZXRfZGVmYXVsdHMgKHY0bDJvYmplY3QpOwotICBlbHNlCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X29wZW5fc2hhcmVkIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0VjRsMk9iamVjdCAqIG90aGVyKQotewotICBnYm9vbGVhbiByZXQ7Ci0KLSAgcmV0ID0gZ3N0X3Y0bDJfZHVwICh2NGwyb2JqZWN0LCBvdGhlcik7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9jbG9zZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIGlmICghZ3N0X3Y0bDJfY2xvc2UgKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmdjRsMm9iamVjdC0+cHJvYmVkX2NhcHMsIE5VTEwpOwotCi0gIC8qIHJlc2V0IG91ciBjb3B5IG9mIHRoZSBkZXZpY2UgY2FwcyAqLwotICB2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyA9IDA7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPmZvcm1hdHMpIHsKLSAgICBnc3RfdjRsMl9vYmplY3RfY2xlYXJfZm9ybWF0X2xpc3QgKHY0bDJvYmplY3QpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjICoKLWdzdF92NGwyX29iamVjdF9nZXRfZm9ybWF0X2Zyb21fZm91cmNjIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBndWludDMyIGZvdXJjYykKLXsKLSAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10OwotICBHU0xpc3QgKndhbGs7Ci0KLSAgaWYgKGZvdXJjYyA9PSAwKQotICAgIHJldHVybiBOVUxMOwotCi0gIHdhbGsgPSBnc3RfdjRsMl9vYmplY3RfZ2V0X2Zvcm1hdF9saXN0ICh2NGwyb2JqZWN0KTsKLSAgd2hpbGUgKHdhbGspIHsKLSAgICBmbXQgPSAoc3RydWN0IHY0bDJfZm10ZGVzYyAqKSB3YWxrLT5kYXRhOwotICAgIGlmIChmbXQtPnBpeGVsZm9ybWF0ID09IGZvdXJjYykKLSAgICAgIHJldHVybiBmbXQ7Ci0gICAgLyogc3BlY2lhbCBjYXNlIGZvciBqcGVnICovCi0gICAgaWYgKGZtdC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX01KUEVHIHx8Ci0gICAgICAgIGZtdC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX0pQRUcgfHwKLSAgICAgICAgZm10LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfUEpQRykgewotICAgICAgaWYgKGZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfSlBFRyB8fCBmb3VyY2MgPT0gVjRMMl9QSVhfRk1UX01KUEVHIHx8Ci0gICAgICAgICAgZm91cmNjID09IFY0TDJfUElYX0ZNVF9QSlBHKSB7Ci0gICAgICAgIHJldHVybiBmbXQ7Ci0gICAgICB9Ci0gICAgfQotICAgIHdhbGsgPSBnX3NsaXN0X25leHQgKHdhbGspOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi0vKiBjb21wbGV0ZSBtYWRlIHVwIHJhbmtpbmcsIHRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBhcmUgbWVhbmluZ2xlc3MgKi8KLS8qIFRoZXNlIHJhbmtzIE1VU1QgYmUgWCBzdWNoIHRoYXQgWDw8MTUgZml0cyBvbiBhIHNpZ25lZCBpbnQgLSBzZWUKLSAgIHRoZSBjb21tZW50IGF0IHRoZSBlbmQgb2YgZ3N0X3Y0bDJfb2JqZWN0X2Zvcm1hdF9nZXRfcmFuay4gKi8KLSNkZWZpbmUgWVVWX0JBU0VfUkFOSyAgICAgMTAwMAotI2RlZmluZSBKUEVHX0JBU0VfUkFOSyAgICAgNTAwCi0jZGVmaW5lIERWX0JBU0VfUkFOSyAgICAgICAyMDAKLSNkZWZpbmUgUkdCX0JBU0VfUkFOSyAgICAgIDEwMAotI2RlZmluZSBZVVZfT0REX0JBU0VfUkFOSyAgIDUwCi0jZGVmaW5lIFJHQl9PRERfQkFTRV9SQU5LICAgMjUKLSNkZWZpbmUgQkFZRVJfQkFTRV9SQU5LICAgICAxNQotI2RlZmluZSBTOTEwX0JBU0VfUkFOSyAgICAgIDEwCi0jZGVmaW5lIEdSRVlfQkFTRV9SQU5LICAgICAgIDUKLSNkZWZpbmUgUFdDX0JBU0VfUkFOSyAgICAgICAgMQotCi1zdGF0aWMgZ2ludAotZ3N0X3Y0bDJfb2JqZWN0X2Zvcm1hdF9nZXRfcmFuayAoY29uc3Qgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQotewotICBndWludDMyIGZvdXJjYyA9IGZtdC0+cGl4ZWxmb3JtYXQ7Ci0gIGdib29sZWFuIGVtdWxhdGVkID0gKChmbXQtPmZsYWdzICYgVjRMMl9GTVRfRkxBR19FTVVMQVRFRCkgIT0gMCk7Ci0gIGdpbnQgcmFuayA9IDA7Ci0KLSAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9NSlBFRzoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9QSlBHOgotICAgICAgcmFuayA9IEpQRUdfQkFTRV9SQU5LOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfSlBFRzoKLSAgICAgIHJhbmsgPSBKUEVHX0JBU0VfUkFOSyArIDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9NUEVHOiAgICAvKiBNUEVHICAgICAgICAgICovCi0gICAgICByYW5rID0gSlBFR19CQVNFX1JBTksgKyAyOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0IzMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9YUkdCNTU1OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1WDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9YUkdCNTU1WDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTVYOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0JHUjY2NjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1WDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I0NDQ6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWTQ6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWTY6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWTEwOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1kxMjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZMTBCUEFDSzoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY1NTU6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNTY1OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjMyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTJNVF8xNlgxNjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjQyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0gyNjRfTVZDOgotICAgICAgcmFuayA9IFJHQl9PRERfQkFTRV9SQU5LOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9CR1IyNDoKLSAgICAgIHJhbmsgPSBSR0JfQkFTRV9SQU5LIC0gMTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQkdSMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9BUkdCMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFJHQjMyOgotICAgICAgcmFuayA9IFJHQl9CQVNFX1JBTks7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6ICAgIC8qICA4ICBHcmV5c2NhbGUgICAgICovCi0gICAgICByYW5rID0gR1JFWV9CQVNFX1JBTks7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTI6ICAgIC8qIDEyICBZL0NiQ3IgNDoyOjAgICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYxMk06ICAgLyogU2FtZSBhcyBOVjEyICAgICAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjEyTVQ6ICAvKiBOVjEyIDY0eDMyIHRpbGUgICAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMjE6ICAgIC8qIDEyICBZL0NyQ2IgNDoyOjAgICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYyMU06ICAgLyogU2FtZSBhcyBOVjIxICAgICAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZWVVWOiAgICAvKiAxNiAgWVVWIDQ6MjoyICAgICAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0hJMjQwOiAgIC8qICA4ICA4LWJpdCBjb2xvciAgICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYxNjogICAgLyogMTYgIFkvQ2JDciA0OjI6MiAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjE2TTogICAvKiBTYW1lIGFzIE5WMTYgICAgICAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WNjE6ICAgIC8qIDE2ICBZL0NyQ2IgNDoyOjIgICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlY2MU06ICAgLyogU2FtZSBhcyBOVjYxICAgICAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjI0OiAgICAvKiAyNCAgWS9DckNiIDQ6NDo0ICAqLwotICAgICAgcmFuayA9IFlVVl9PRERfQkFTRV9SQU5LOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVlU0MTA6ICAvKiBZVlU5LCAgOSBiaXRzIHBlciBwaXhlbCAqLwotICAgICAgcmFuayA9IFlVVl9CQVNFX1JBTksgKyAzOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDEwOiAgLyogWVVWOSwgIDkgYml0cyBwZXIgcGl4ZWwgKi8KLSAgICAgIHJhbmsgPSBZVVZfQkFTRV9SQU5LICsgMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDogIC8qIEk0MjAsIDEyIGJpdHMgcGVyIHBpeGVsICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwTToKLSAgICAgIHJhbmsgPSBZVVZfQkFTRV9SQU5LICsgNzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6ICAgIC8qIFlVWTIsIDE2IGJpdHMgcGVyIHBpeGVsICovCi0gICAgICByYW5rID0gWVVWX0JBU0VfUkFOSyArIDEwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVZVNDIwOiAgLyogWVYxMiwgMTIgYml0cyBwZXIgcGl4ZWwgKi8KLSAgICAgIHJhbmsgPSBZVVZfQkFTRV9SQU5LICsgNjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6ICAgIC8qIFVZVlksIDE2IGJpdHMgcGVyIHBpeGVsICovCi0gICAgICByYW5rID0gWVVWX0JBU0VfUkFOSyArIDk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY0NDQ6Ci0gICAgICByYW5rID0gWVVWX0JBU0VfUkFOSyArIDY7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZNDFQOiAgICAvKiBZNDFQLCAxMiBiaXRzIHBlciBwaXhlbCAqLwotICAgICAgcmFuayA9IFlVVl9CQVNFX1JBTksgKyA1OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDExUDogLyogWTQxQiwgMTIgYml0cyBwZXIgcGl4ZWwgKi8KLSAgICAgIHJhbmsgPSBZVVZfQkFTRV9SQU5LICsgNDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6IC8qIFk0MkIsIDE2IGJpdHMgcGVyIHBpeGVsICovCi0gICAgICByYW5rID0gWVVWX0JBU0VfUkFOSyArIDg7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0RWOgotICAgICAgcmFuayA9IERWX0JBU0VfUkFOSzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfV05WQTogICAgLyogV2lubm92IGh3IGNvbXByZXMgKi8KLSAgICAgIHJhbmsgPSAwOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHODoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6Ci0gICAgICByYW5rID0gQkFZRVJfQkFTRV9SQU5LOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9TTjlDMTBYOgotICAgICAgcmFuayA9IFM5MTBfQkFTRV9SQU5LOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9QV0MxOgotICAgICAgcmFuayA9IFBXQ19CQVNFX1JBTks7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9QV0MyOgotICAgICAgcmFuayA9IFBXQ19CQVNFX1JBTks7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByYW5rID0gMDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLyogQWxsIHJhbmtzIGFyZSBiZWxvdyAxPDwxNSBzbyBhIHNoaWZ0IGJ5IDE1Ci0gICAqIHdpbGwgYSkgbWFrZSBhbGwgbm9uLWVtdWxhdGVkIGZvcm1hdHMgbGFyZ2VyCi0gICAqIHRoYW4gZW11bGF0ZWQgYW5kIGIpIHdpbGwgbm90IG92ZXJmbG93Ci0gICAqLwotICBpZiAoIWVtdWxhdGVkKQotICAgIHJhbmsgPDw9IDE1OwotCi0gIHJldHVybiByYW5rOwotfQotCi0KLQotc3RhdGljIGdpbnQKLWZvcm1hdF9jbXBfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCi17Ci0gIGNvbnN0IHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZhID0gYTsKLSAgY29uc3Qgc3RydWN0IHY0bDJfZm10ZGVzYyAqZmIgPSBiOwotCi0gIGlmIChmYS0+cGl4ZWxmb3JtYXQgPT0gZmItPnBpeGVsZm9ybWF0KQotICAgIHJldHVybiAwOwotCi0gIHJldHVybiBnc3RfdjRsMl9vYmplY3RfZm9ybWF0X2dldF9yYW5rIChmYikgLQotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2Zvcm1hdF9nZXRfcmFuayAoZmEpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBnc3RfdjRsMl9vYmplY3RfZmlsbF9mb3JtYXRfbGlzdCgpOgotICogICBjcmVhdGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXRzCi0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9maWxsX2Zvcm1hdF9saXN0IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKLXsKLSAgZ2ludCBuOwotICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmb3JtYXQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImdldHRpbmcgc3JjIGZvcm1hdCBlbnVtZXJhdGlvbnMiKTsKLQotICAvKiBmb3JtYXQgZW51bWVyYXRpb24gKi8KLSAgZm9yIChuID0gMDs7IG4rKykgewotICAgIGZvcm1hdCA9IGdfbmV3MCAoc3RydWN0IHY0bDJfZm10ZGVzYywgMSk7Ci0KLSAgICBmb3JtYXQtPmluZGV4ID0gbjsKLSAgICBmb3JtYXQtPnR5cGUgPSB0eXBlOwotCi0gICAgaWYgKHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfRU5VTV9GTVQsIGZvcm1hdCkgPCAwKSB7Ci0gICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKSB7Ci0gICAgICAgIGdfZnJlZSAoZm9ybWF0KTsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGVudW1lcmF0aW9uICovCi0gICAgICB9IGVsc2UgewotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImluZGV4OiAgICAgICAldSIsIGZvcm1hdC0+aW5kZXgpOwotICAgIEdTVF9MT0dfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAidHlwZTogICAgICAgICVkIiwgZm9ybWF0LT50eXBlKTsKLSAgICBHU1RfTE9HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImZsYWdzOiAgICAgICAlMDh4IiwgZm9ybWF0LT5mbGFncyk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJkZXNjcmlwdGlvbjogJyVzJyIsCi0gICAgICAgIGZvcm1hdC0+ZGVzY3JpcHRpb24pOwotICAgIEdTVF9MT0dfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAicGl4ZWxmb3JtYXQ6ICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvcm1hdC0+cGl4ZWxmb3JtYXQpKTsKLQotICAgIC8qIHNvcnQgZm9ybWF0cyBhY2NvcmRpbmcgdG8gb3VyIHByZWZlcmVuY2U7ICB3ZSBkbyB0aGlzLCBiZWNhdXNlIGNhcHMKLSAgICAgKiBhcmUgcHJvYmVkIGluIHRoZSBvcmRlciB0aGUgZm9ybWF0cyBhcmUgaW4gdGhlIGxpc3QsIGFuZCB0aGUgb3JkZXIgb2YKLSAgICAgKiBmb3JtYXRzIGluIHRoZSBmaW5hbCBwcm9iZWQgY2FwcyBtYXR0ZXJzIGZvciB0aGluZ3MgbGlrZSBmaXhhdGlvbiAqLwotICAgIHY0bDJvYmplY3QtPmZvcm1hdHMgPSBnX3NsaXN0X2luc2VydF9zb3J0ZWQgKHY0bDJvYmplY3QtPmZvcm1hdHMsIGZvcm1hdCwKLSAgICAgICAgKEdDb21wYXJlRnVuYykgZm9ybWF0X2NtcF9mdW5jKTsKLSAgfQotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICB7Ci0gICAgR1NMaXN0ICpsOwotCi0gICAgR1NUX0lORk9fT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiZ290ICVkIGZvcm1hdChzKToiLCBuKTsKLSAgICBmb3IgKGwgPSB2NGwyb2JqZWN0LT5mb3JtYXRzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgICBmb3JtYXQgPSBsLT5kYXRhOwotCi0gICAgICBHU1RfSU5GT19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICAgIiAgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiVzIiwgR1NUX0ZPVVJDQ19BUkdTIChmb3JtYXQtPnBpeGVsZm9ybWF0KSwKLSAgICAgICAgICAoKGZvcm1hdC0+ZmxhZ3MgJiBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEKSkgPyAiIChlbXVsYXRlZCkiIDogIiIpOwotICAgIH0KLSAgfQotI2VuZGlmCi0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1mYWlsZWQ6Ci0gIHsKLSAgICBnX2ZyZWUgKGZvcm1hdCk7Ci0KLSAgICBpZiAoIUdTVF9JU19FTEVNRU5UICh2NGwyb2JqZWN0LT5lbGVtZW50KSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gZW51bWVyYXRlIHBvc3NpYmxlIHZpZGVvIGZvcm1hdHMgZGV2aWNlICclcycgY2FuIHdvcmsgIgotICAgICAgICAgICAgICAgICJ3aXRoIiksIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgKCJGYWlsZWQgdG8gZ2V0IG51bWJlciAlZCBpbiBwaXhlbGZvcm1hdCBlbnVtZXJhdGlvbiBmb3IgJXMuICglZCAtICVzKSIsCi0gICAgICAgICAgICBuLCB2NGwyb2JqZWN0LT52aWRlb2RldiwgZXJybm8sIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLS8qCi0gICogR2V0IHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBjYXB0dXJlIGZvcm1hdHMsIGEgbGlzdCBvZgotICAqIDxjb2RlPnN0cnVjdCB2NGwyX2ZtdGRlc2M8L2NvZGU+LgotICAqLwotc3RhdGljIEdTTGlzdCAqCi1nc3RfdjRsMl9vYmplY3RfZ2V0X2Zvcm1hdF9saXN0IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgaWYgKCF2NGwyb2JqZWN0LT5mb3JtYXRzKSB7Ci0KLSAgICAvKiBjaGVjayB1c3VhbCB3YXkgKi8KLSAgICBnc3RfdjRsMl9vYmplY3RfZmlsbF9mb3JtYXRfbGlzdCAodjRsMm9iamVjdCwgdjRsMm9iamVjdC0+dHlwZSk7Ci0KLSAgICAvKiBpZiBvdXIgZHJpdmVyIHN1cHBvcnRzIG11bHRpLXBsYW5hcgotICAgICAqIGFuZCBpZiBmb3JtYXRzIGFyZSBzdGlsbCBlbXB0eSB0aGVuIHdlIGNhbiB3b3JrYXJvdW5kIGRyaXZlciBidWcKLSAgICAgKiBieSBhbHNvIGxvb2tpbmcgdXAgZm9ybWF0cyBhcyBpZiBvdXIgZGV2aWNlIHdhcyBub3Qgc3VwcG9ydGluZwotICAgICAqIG11bHRpcGxhbmFyICovCi0gICAgaWYgKCF2NGwyb2JqZWN0LT5mb3JtYXRzKSB7Ci0gICAgICBzd2l0Y2ggKHY0bDJvYmplY3QtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOgotICAgICAgICAgIGdzdF92NGwyX29iamVjdF9maWxsX2Zvcm1hdF9saXN0ICh2NGwyb2JqZWN0LAotICAgICAgICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FOgotICAgICAgICAgIGdzdF92NGwyX29iamVjdF9maWxsX2Zvcm1hdF9saXN0ICh2NGwyb2JqZWN0LAotICAgICAgICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCk7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHY0bDJvYmplY3QtPmZvcm1hdHM7Ci19Ci0KLXN0YXRpYyBHc3RWaWRlb0Zvcm1hdAotZ3N0X3Y0bDJfb2JqZWN0X3Y0bDJmb3VyY2NfdG9fdmlkZW9fZm9ybWF0IChndWludDMyIGZvdXJjYykKLXsKLSAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotCi0gIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfR1JFWTogICAgLyogIDggIEdyZXlzY2FsZSAgICAgKi8KLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfR1JBWTg7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZMTY6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0dSQVkxNl9MRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1kxNl9CRToKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFJHQjU1NToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1JHQjE1OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFJHQjU1NVg6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1WDoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfQkdSMTU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1JHQjE2OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1JHQjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0JHUjI0OgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9CR1I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9YUkdCMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzI6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX3hSR0I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQkdSMzI6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0JHUng7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0JHUkE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9BUkdCMzI6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX0FSR0I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjEyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTJNOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9OVjEyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYxMk1UOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9OVjEyXzY0WjMyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYyMToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjIxTToKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfTlYyMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lWVTQxMDoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfWVZVOTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjQxMDoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfWVVWOTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjBNOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9JNDIwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfWVVZMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lWVTQyMDoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfWVYxMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1VZVlk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MTFQOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9ZNDFCOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfWTQyQjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX1lWWVU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjE2OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTZNOgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9OVjE2OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjYxTToKLSAgICAgIGZvcm1hdCA9IEdTVF9WSURFT19GT1JNQVRfTlY2MTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMjQ6Ci0gICAgICBmb3JtYXQgPSBHU1RfVklERU9fRk9STUFUX05WMjQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gZm9ybWF0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF92NGwyZm91cmNjX2lzX3JnYiAoZ3VpbnQzMiBmb3VyY2MpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIHN3aXRjaCAoZm91cmNjKSB7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFJHQjU1NToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I1NTU6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFJHQjU1NVg6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1WDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCMjQ6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQkdSMjQ6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFJHQjMyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjMyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9CR1IzMjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjMyOgotICAgICAgcmV0ID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RTdHJ1Y3R1cmUgKgotZ3N0X3Y0bDJfb2JqZWN0X3Y0bDJmb3VyY2NfdG9fYmFyZV9zdHJ1Y3QgKGd1aW50MzIgZm91cmNjKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IE5VTEw7Ci0KLSAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9NSlBFRzogICAvKiBNb3Rpb24tSlBFRyAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1BKUEc6ICAgIC8qIFByb2dyZXNzaXZlLUpQRUcgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9KUEVHOiAgICAvKiBKRklGIEpQRUcgKi8KLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgiaW1hZ2UvanBlZyIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTVBFRzE6Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTVBFRzI6Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL21wZWciLAotICAgICAgICAgICJtcGVndmVyc2lvbiIsIEdfVFlQRV9JTlQsIDIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTVBFRzQ6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWFZJRDoKLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8vbXBlZyIsCi0gICAgICAgICAgIm1wZWd2ZXJzaW9uIiwgR19UWVBFX0lOVCwgNCwgInN5c3RlbXN0cmVhbSIsCi0gICAgICAgICAgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0gyNjM6Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtaDI2MyIsCi0gICAgICAgICAgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAiaXR1IiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9IMjY0OiAgICAvKiBILjI2NCAqLwotICAgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2aWRlby94LWgyNjQiLAotICAgICAgICAgICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImJ5dGUtc3RyZWFtIiwgImFsaWdubWVudCIsCi0gICAgICAgICAgR19UWVBFX1NUUklORywgImF1IiwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9IMjY0X05PX1NDOgotICAgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJ2aWRlby94LWgyNjQiLAotICAgICAgICAgICJzdHJlYW0tZm9ybWF0IiwgR19UWVBFX1NUUklORywgImF2YyIsICJhbGlnbm1lbnQiLAotICAgICAgICAgIEdfVFlQRV9TVFJJTkcsICJhdSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0c6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfVkMxX0FOTkVYX0w6Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtd212IiwKLSAgICAgICAgICAid212dmVyc2lvbiIsIEdfVFlQRV9JTlQsIDMsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiV1ZDMSIsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfVlA4OgotICAgICAgc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJ2aWRlby94LXZwOCIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfR1JFWTogICAgLyogIDggIEdyZXlzY2FsZSAgICAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZMTY6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWTE2X0JFOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1hSR0I1NTU6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTU1OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1hSR0I1NTVYOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NVg6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0JHUjI0OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjMyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1hSR0IzMjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9BUkdCMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQkdSMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjEyOiAgICAvKiAxMiAgWS9DYkNyIDQ6MjowICAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTJNOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTJNVDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjIxOiAgICAvKiAxMiAgWS9DckNiIDQ6MjowICAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMjFNOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WMTY6ICAgIC8qIDE2ICBZL0NiQ3IgNDoyOjIgICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYxNk06Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlY2MTogICAgLyogMTYgIFkvQ3JDYiA0OjI6MiAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjYxTToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjI0OiAgICAvKiAyNCAgWS9DckNiIDQ6NDo0ICAqLwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lWVTQxMDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MTA6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOiAgLyogSTQyMC9JWVVWICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwTToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lWVTQyMDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVZZVToKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MTFQOnsKLSAgICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICAgIGZvcm1hdCA9IGdzdF92NGwyX29iamVjdF92NGwyZm91cmNjX3RvX3ZpZGVvX2Zvcm1hdCAoZm91cmNjKTsKLSAgICAgIGlmIChmb3JtYXQgIT0gR1NUX1ZJREVPX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldyAoInZpZGVvL3gtcmF3IiwKLSAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBnc3RfdmlkZW9fZm9ybWF0X3RvX3N0cmluZyAoZm9ybWF0KSwgTlVMTCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfRFY6Ci0gICAgICBzdHJ1Y3R1cmUgPQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8veC1kdiIsICJzeXN0ZW1zdHJlYW0iLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwKLSAgICAgICAgICBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX01QRUc6ICAgIC8qIE1QRUcgICAgICAgICAgKi8KLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8vbXBlZ3RzIiwKLSAgICAgICAgICAic3lzdGVtc3RyZWFtIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfV05WQTogICAgLyogV2lubm92IGh3IGNvbXByZXMgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzg6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCODoKLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgidmlkZW8veC1iYXllciIsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgICAgIGZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4ID8gImJnZ3IiIDoKLSAgICAgICAgICBmb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1NHQlJHOCA/ICJnYnJnIiA6Ci0gICAgICAgICAgZm91cmNjID09IFY0TDJfUElYX0ZNVF9TR1JCRzggPyAiZ3JiZyIgOgotICAgICAgICAgIC8qIGZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfU1JHR0I4ID8gKi8gInJnZ2IiLCBOVUxMKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1NOOUMxMFg6Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoInZpZGVvL3gtc29uaXgiKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1BXQzE6Ci0gICAgICBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSAoInZpZGVvL3gtcHdjMSIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUFdDMjoKLSAgICAgIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5ICgidmlkZW8veC1wd2MyIik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0IzMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfQkdSNjY2OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTVYOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfUkdCNDQ0OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lZVVY6ICAgIC8qIDE2ICBZVVYgNDoyOjIgICAgICovCi0gICAgY2FzZSBWNEwyX1BJWF9GTVRfSEkyNDA6ICAgLyogIDggIDgtYml0IGNvbG9yICAgKi8KLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZNDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZNjoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZMTA6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWTEyOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1kxMEJQQUNLOgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjQ0NDoKLSAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVY1NTU6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWNTY1OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX1k0MVA6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWMzI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYxMk1UXzE2WDE2OgotICAgIGNhc2UgVjRMMl9QSVhfRk1UX05WNDI6Ci0gICAgY2FzZSBWNEwyX1BJWF9GTVRfSDI2NF9NVkM6Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9ERUJVRyAoIlVuc3VwcG9ydGVkIGZvdXJjYyAweCUwOHggJSIgR1NUX0ZPVVJDQ19GT1JNQVQsCi0gICAgICAgICAgZm91cmNjLCBHU1RfRk9VUkNDX0FSR1MgKGZvdXJjYykpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gc3RydWN0dXJlOwotfQotCi1Hc3RTdHJ1Y3R1cmUgKgotZ3N0X3Y0bDJfb2JqZWN0X3Y0bDJmb3VyY2NfdG9fc3RydWN0dXJlIChndWludDMyIGZvdXJjYykKLXsKLSAgR3N0U3RydWN0dXJlICp0ZW1wbGF0ZTsKLSAgZ2ludCBpOwotCi0gIHRlbXBsYXRlID0gZ3N0X3Y0bDJfb2JqZWN0X3Y0bDJmb3VyY2NfdG9fYmFyZV9zdHJ1Y3QgKGZvdXJjYyk7Ci0KLSAgaWYgKHRlbXBsYXRlID09IE5VTEwpCi0gICAgZ290byBkb25lOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHU1RfVjRMMl9GT1JNQVRfQ09VTlQ7IGkrKykgewotICAgIGlmIChnc3RfdjRsMl9mb3JtYXRzW2ldLmZvcm1hdCAhPSBmb3VyY2MpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChnc3RfdjRsMl9mb3JtYXRzW2ldLmRpbWVuc2lvbnMpIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0ICh0ZW1wbGF0ZSwKLSAgICAgICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIEdTVF9WNEwyX01BWF9TSVpFLAotICAgICAgICAgICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDEsIEdTVF9WNEwyX01BWF9TSVpFLAotICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgR19NQVhJTlQsIDEsIE5VTEwpOwotICAgIH0KLSAgICBicmVhazsKLSAgfQotCi1kb25lOgotICByZXR1cm4gdGVtcGxhdGU7Ci19Ci0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9jYXBzX2hlbHBlciAoR3N0VjRMMkZvcm1hdEZsYWdzIGZsYWdzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQgaTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICBmb3IgKGkgPSAwOyBpIDwgR1NUX1Y0TDJfRk9STUFUX0NPVU5UOyBpKyspIHsKLQotICAgIGlmICgoZ3N0X3Y0bDJfZm9ybWF0c1tpXS5mbGFncyAmIGZsYWdzKSA9PSAwKQotICAgICAgY29udGludWU7Ci0KLSAgICBzdHJ1Y3R1cmUgPQotICAgICAgICBnc3RfdjRsMl9vYmplY3RfdjRsMmZvdXJjY190b19iYXJlX3N0cnVjdCAoZ3N0X3Y0bDJfZm9ybWF0c1tpXS5mb3JtYXQpOwotCi0gICAgaWYgKHN0cnVjdHVyZSkgewotICAgICAgR3N0U3RydWN0dXJlICphbHRfcyA9IE5VTEw7Ci0KLSAgICAgIGlmIChnc3RfdjRsMl9mb3JtYXRzW2ldLmRpbWVuc2lvbnMpIHsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHN0cnVjdHVyZSwKLSAgICAgICAgICAgICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMSwgR1NUX1Y0TDJfTUFYX1NJWkUsCi0gICAgICAgICAgICAiaGVpZ2h0IiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAxLCBHU1RfVjRMMl9NQVhfU0laRSwKLSAgICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSwgMCwgMSwgR19NQVhJTlQsIDEsIE5VTEwpOwotICAgICAgfQotCi0gICAgICBzd2l0Y2ggKGdzdF92NGwyX2Zvcm1hdHNbaV0uZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjMyOgotICAgICAgICAgIGFsdF9zID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChhbHRfcywgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJBUkdCIiwgTlVMTCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVjRMMl9QSVhfRk1UX0JHUjMyOgotICAgICAgICAgIGFsdF9zID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdHJ1Y3R1cmUpOwotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChhbHRfcywgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwgTlVMTCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMsIHN0cnVjdHVyZSk7Ci0KLSAgICAgIGlmIChhbHRfcykKLSAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoY2FwcywgYWx0X3MpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBnc3RfY2Fwc19zaW1wbGlmeSAoY2Fwcyk7Ci19Ci0KLUdzdENhcHMgKgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9hbGxfY2FwcyAodm9pZCkKLXsKLSAgc3RhdGljIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmNhcHMpKSB7Ci0gICAgR3N0Q2FwcyAqYWxsX2NhcHMgPSBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHNfaGVscGVyIChHU1RfVjRMMl9BTEwpOwotICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAoYWxsX2NhcHMsIEdTVF9NSU5JX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmY2FwcywgYWxsX2NhcHMpOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLUdzdENhcHMgKgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9yYXdfY2FwcyAodm9pZCkKLXsKLSAgc3RhdGljIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJmNhcHMpKSB7Ci0gICAgR3N0Q2FwcyAqcmF3X2NhcHMgPSBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHNfaGVscGVyIChHU1RfVjRMMl9SQVcpOwotICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAocmF3X2NhcHMsIEdTVF9NSU5JX09CSkVDVF9GTEFHX01BWV9CRV9MRUFLRUQpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmY2FwcywgcmF3X2NhcHMpOwotICB9Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLUdzdENhcHMgKgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9jb2RlY19jYXBzICh2b2lkKQotewotICBzdGF0aWMgR3N0Q2FwcyAqY2FwcyA9IE5VTEw7Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmY2FwcykpIHsKLSAgICBHc3RDYXBzICpjb2RlY19jYXBzID0gZ3N0X3Y0bDJfb2JqZWN0X2dldF9jYXBzX2hlbHBlciAoR1NUX1Y0TDJfQ09ERUMpOwotICAgIEdTVF9NSU5JX09CSkVDVF9GTEFHX1NFVCAoY29kZWNfY2FwcywgR1NUX01JTklfT0JKRUNUX0ZMQUdfTUFZX0JFX0xFQUtFRCk7Ci0gICAgZ19vbmNlX2luaXRfbGVhdmUgKCZjYXBzLCBjb2RlY19jYXBzKTsKLSAgfQotCi0gIHJldHVybiBjYXBzOwotfQotCi0vKiBjb2xsZWN0IGRhdGEgZm9yIHRoZSBnaXZlbiBjYXBzCi0gKiBAY2FwczogZ2l2ZW4gaW5wdXQgY2FwcwotICogQGZvcm1hdDogbG9jYXRpb24gZm9yIHRoZSB2NGwgZm9ybWF0Ci0gKiBAdy9AaDogbG9jYXRpb24gZm9yIHdpZHRoIGFuZCBoZWlnaHQKLSAqIEBmcHNfbi9AZnBzX2Q6IGxvY2F0aW9uIGZvciBmcmFtZXJhdGUKLSAqIEBzaXplOiBsb2NhdGlvbiBmb3IgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZnJhbWUgb3IgMCBpZiB1bmtub3duCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9jYXBzX2luZm8gKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCBHc3RDYXBzICogY2FwcywKLSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICoqZm9ybWF0LCBHc3RWaWRlb0luZm8gKiBpbmZvKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ3VpbnQzMiBmb3VyY2MgPSAwLCBmb3VyY2NfbmMgPSAwOwotICBjb25zdCBnY2hhciAqbWltZXR5cGU7Ci0gIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCA9IE5VTEw7Ci0KLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgbWltZXR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpOwotCi0gIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzIChpbmZvLCBjYXBzKSkKLSAgICBnb3RvIGludmFsaWRfZm9ybWF0OwotCi0gIGlmIChnX3N0cl9lcXVhbCAobWltZXR5cGUsICJ2aWRlby94LXJhdyIpKSB7Ci0gICAgc3dpdGNoIChHU1RfVklERU9fSU5GT19GT1JNQVQgKGluZm8pKSB7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfSTQyMDoKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQyMDsKLSAgICAgICAgZm91cmNjX25jID0gVjRMMl9QSVhfRk1UX1lVVjQyME07Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1lVWTI6Ci0gICAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9ZVVlWOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9VWVZZOgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfVVlWWTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVYxMjoKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1lWVTQyMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWTQxQjoKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVVjQxMVA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1k0MkI6Ci0gICAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjEyOgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYxMjsKLSAgICAgICAgZm91cmNjX25jID0gVjRMMl9QSVhfRk1UX05WMTJNOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjEyXzY0WjMyOgotICAgICAgICBmb3VyY2NfbmMgPSBWNEwyX1BJWF9GTVRfTlYxMk1UOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjIxOgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYyMTsKLSAgICAgICAgZm91cmNjX25jID0gVjRMMl9QSVhfRk1UX05WMjFNOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjE2OgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYxNjsKLSAgICAgICAgZm91cmNjX25jID0gVjRMMl9QSVhfRk1UX05WMTZNOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjYxOgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlY2MTsKLSAgICAgICAgZm91cmNjX25jID0gVjRMMl9QSVhfRk1UX05WNjFNOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9OVjI0OgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTlYyNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfWVZZVToKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1lWWVU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjE1OgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTU1OwotICAgICAgICBmb3VyY2NfbmMgPSBWNEwyX1BJWF9GTVRfWFJHQjU1NTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfUkdCMTY6Ci0gICAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0I1NjU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX1JHQjoKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjI0OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9CR1I6Ci0gICAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IyNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfeFJHQjoKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjMyOwotICAgICAgICBmb3VyY2NfbmMgPSBWNEwyX1BJWF9GTVRfWFJHQjMyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9BUkdCOgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCMzI7Ci0gICAgICAgIGZvdXJjY19uYyA9IFY0TDJfUElYX0ZNVF9BUkdCMzI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0JHUng6Ci0gICAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IzMjsKLSAgICAgICAgZm91cmNjX25jID0gVjRMMl9QSVhfRk1UX1hCR1IzMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfQkdSQToKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX0JHUjMyOwotICAgICAgICBmb3VyY2NfbmMgPSBWNEwyX1BJWF9GTVRfQUJHUjMyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0ZPUk1BVF9HUkFZODoKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX0dSRVk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fRk9STUFUX0dSQVkxNl9MRToKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1kxNjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19GT1JNQVRfR1JBWTE2X0JFOgotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfWTE2X0JFOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8vbXBlZ3RzIikpIHsKLSAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9NUEVHOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8veC1kdiIpKSB7Ci0gICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfRFY7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAobWltZXR5cGUsICJpbWFnZS9qcGVnIikpIHsKLSAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9KUEVHOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8vbXBlZyIpKSB7Ci0gICAgICBnaW50IHZlcnNpb247Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzdHJ1Y3R1cmUsICJtcGVndmVyc2lvbiIsICZ2ZXJzaW9uKSkgewotICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfTVBFRzQ7Ci0gICAgICAgICAgICBmb3VyY2NfbmMgPSBWNEwyX1BJWF9GTVRfWFZJRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8veC1oMjYzIikpIHsKLSAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9IMjYzOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8veC1oMjY0IikpIHsKLSAgICAgIGNvbnN0IGdjaGFyICpzdHJlYW1fZm9ybWF0ID0KLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHN0cnVjdHVyZSwgInN0cmVhbS1mb3JtYXQiKTsKLSAgICAgIGlmIChnX3N0cl9lcXVhbCAoc3RyZWFtX2Zvcm1hdCwgImF2YyIpKQotICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfSDI2NF9OT19TQzsKLSAgICAgIGVsc2UKLSAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX0gyNjQ7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAobWltZXR5cGUsICJ2aWRlby94LXZwOCIpKSB7Ci0gICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfVlA4OwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8veC1iYXllciIpKSB7Ci0gICAgICBjb25zdCBnY2hhciAqZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzdHJ1Y3R1cmUsICJmb3JtYXQiKTsKLSAgICAgIGlmIChmb3JtYXQpIHsKLSAgICAgICAgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGZvcm1hdCwgImJnZ3IiKSkKLSAgICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfU0JHR1I4OwotICAgICAgICBlbHNlIGlmICghZ19hc2NpaV9zdHJjYXNlY21wIChmb3JtYXQsICJnYnJnIikpCi0gICAgICAgICAgZm91cmNjID0gVjRMMl9QSVhfRk1UX1NHQlJHODsKLSAgICAgICAgZWxzZSBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcCAoZm9ybWF0LCAiZ3JiZyIpKQotICAgICAgICAgIGZvdXJjYyA9IFY0TDJfUElYX0ZNVF9TR1JCRzg7Ci0gICAgICAgIGVsc2UgaWYgKCFnX2FzY2lpX3N0cmNhc2VjbXAgKGZvcm1hdCwgInJnZ2IiKSkKLSAgICAgICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfU1JHR0I4OwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwgKG1pbWV0eXBlLCAidmlkZW8veC1zb25peCIpKSB7Ci0gICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfU045QzEwWDsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChtaW1ldHlwZSwgInZpZGVvL3gtcHdjMSIpKSB7Ci0gICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfUFdDMTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChtaW1ldHlwZSwgInZpZGVvL3gtcHdjMiIpKSB7Ci0gICAgICBmb3VyY2MgPSBWNEwyX1BJWF9GTVRfUFdDMjsKLSAgICB9Ci0gIH0KLQotCi0gIC8qIFByZWZlciB0aGUgbm9uLWNvbnRpZ3VvdXMgaWYgc3VwcG9ydGVkICovCi0gIHY0bDJvYmplY3QtPnByZWZlcmVkX25vbl9jb250aWd1b3VzID0gVFJVRTsKLQotICBpZiAoZm91cmNjX25jKQotICAgIGZtdCA9IGdzdF92NGwyX29iamVjdF9nZXRfZm9ybWF0X2Zyb21fZm91cmNjICh2NGwyb2JqZWN0LCBmb3VyY2NfbmMpOwotICBlbHNlIGlmIChmb3VyY2MgPT0gMCkKLSAgICBnb3RvIHVuaGFuZGxlZF9mb3JtYXQ7Ci0KLSAgaWYgKGZtdCA9PSBOVUxMKSB7Ci0gICAgZm10ID0gZ3N0X3Y0bDJfb2JqZWN0X2dldF9mb3JtYXRfZnJvbV9mb3VyY2MgKHY0bDJvYmplY3QsIGZvdXJjYyk7Ci0gICAgdjRsMm9iamVjdC0+cHJlZmVyZWRfbm9uX2NvbnRpZ3VvdXMgPSBGQUxTRTsKLSAgfQotCi0gIGlmIChmbXQgPT0gTlVMTCkKLSAgICBnb3RvIHVuc3VwcG9ydGVkX2Zvcm1hdDsKLQotICAqZm9ybWF0ID0gZm10OwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXVuaGFuZGxlZF9mb3JtYXQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LCAidW5oYW5kbGVkIGZvcm1hdCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5zdXBwb3J0ZWRfZm9ybWF0OgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdCwgInVuc3VwcG9ydGVkIGZvcm1hdCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9nZXRfbmVhcmVzdF9zaXplIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBndWludDMyIHBpeGVsZm9ybWF0LCBnaW50ICogd2lkdGgsIGdpbnQgKiBoZWlnaHQpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfb2JqZWN0X2FkZF9hc3BlY3RfcmF0aW8gKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCBHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBzdHJ1Y3QgdjRsMl9jcm9wY2FwIGNyb3BjYXA7Ci0gIGludCBudW0gPSAxLCBkZW4gPSAxOwotCi0gIGlmICghdjRsMm9iamVjdC0+a2VlcF9hc3BlY3QpCi0gICAgcmV0dXJuOwotCi0gIGlmICh2NGwyb2JqZWN0LT5wYXIpIHsKLSAgICBudW0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAodjRsMm9iamVjdC0+cGFyKTsKLSAgICBkZW4gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICh2NGwyb2JqZWN0LT5wYXIpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotCi0gIG1lbXNldCAoJmNyb3BjYXAsIDAsIHNpemVvZiAoY3JvcGNhcCkpOwotCi0gIGNyb3BjYXAudHlwZSA9IHY0bDJvYmplY3QtPnR5cGU7Ci0gIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0NST1BDQVAsICZjcm9wY2FwKSA8IDApCi0gICAgZ290byBjcm9wY2FwX2ZhaWxlZDsKLQotICBudW0gPSBjcm9wY2FwLnBpeGVsYXNwZWN0Lm51bWVyYXRvcjsKLSAgZGVuID0gY3JvcGNhcC5waXhlbGFzcGVjdC5kZW5vbWluYXRvcjsKLQotICAvKiBJZ25vcmUgUEFSIHRoYXQgYXJlIDAvMCAqLwotICBpZiAoZGVuID09IDApCi0gICAgcmV0dXJuOwotCi1kb25lOgotICBnc3Rfc3RydWN0dXJlX3NldCAocywgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBudW0sIGRlbiwKLSAgICAgIE5VTEwpOwotICByZXR1cm47Ci0KLWNyb3BjYXBfZmFpbGVkOgotICBpZiAoZXJybm8gIT0gRU5PVFRZKQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIkZhaWxlZCB0byBwcm9iZSBwaXhlbCBhc3BlY3QgcmF0aW8gd2l0aCBWSURJT0NfQ1JPUENBUDogJXMiLAotICAgICAgICBnX3N0cmVycm9yIChlcnJubykpOwotICBnb3RvIGRvbmU7Ci19Ci0KLS8qIHJldHVybnMgVFJVRSBpZiB0aGUgdmFsdWUgd2FzIGNoYW5nZWQgaW4gcGxhY2UsIG90aGVyd2lzZSBGQUxTRSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMnNyY192YWx1ZV9zaW1wbGlmeSAoR1ZhbHVlICogdmFsKQotewotICAvKiBzaW1wbGlmeSBsaXN0IG9mIG9uZSB2YWx1ZSB0byBvbmUgdmFsdWUgKi8KLSAgaWYgKEdTVF9WQUxVRV9IT0xEU19MSVNUICh2YWwpICYmIGdzdF92YWx1ZV9saXN0X2dldF9zaXplICh2YWwpID09IDEpIHsKLSAgICBjb25zdCBHVmFsdWUgKmxpc3RfdmFsOwotICAgIEdWYWx1ZSBuZXdfdmFsID0gR19WQUxVRV9JTklUOwotCi0gICAgbGlzdF92YWwgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHZhbCwgMCk7Ci0gICAgZ192YWx1ZV9pbml0ICgmbmV3X3ZhbCwgR19WQUxVRV9UWVBFIChsaXN0X3ZhbCkpOwotICAgIGdfdmFsdWVfY29weSAobGlzdF92YWwsICZuZXdfdmFsKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICh2YWwpOwotICAgICp2YWwgPSBuZXdfdmFsOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9nZXRfaW50ZXJsYWNlX21vZGUgKGVudW0gdjRsMl9maWVsZCBmaWVsZCwKLSAgICBHc3RWaWRlb0ludGVybGFjZU1vZGUgKiBpbnRlcmxhY2VfbW9kZSkKLXsKLSAgLyogTkI6IElmIHlvdSBhZGQgbmV3IHJldHVybiB2YWx1ZXMsIHBsZWFzZSBmaXggbW9kZV9zdHJpbmdzIGluCi0gICAqIGdzdF92NGwyX29iamVjdF9hZGRfaW50ZXJsYWNlX21vZGUgKi8KLSAgc3dpdGNoIChmaWVsZCkgewotICAgIGNhc2UgVjRMMl9GSUVMRF9BTlk6Ci0gICAgICBHU1RfRVJST1IKLSAgICAgICAgICAoIkRyaXZlciBidWcgZGV0ZWN0ZWQgLSBjaGVjayBkcml2ZXIgd2l0aCB2NGwyLWNvbXBsaWFuY2UgZnJvbSBodHRwOi8vZ2l0LmxpbnV4dHYub3JnL3Y0bC11dGlscy5naXRcbiIpOwotICAgICAgLyogZmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFY0TDJfRklFTERfTk9ORToKLSAgICAgICppbnRlcmxhY2VfbW9kZSA9IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9QUk9HUkVTU0lWRTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgotICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCOgotICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUOgotICAgICAgKmludGVybGFjZV9tb2RlID0gR1NUX1ZJREVPX0lOVEVSTEFDRV9NT0RFX0lOVEVSTEVBVkVEOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9FUlJPUiAoIlVua25vd24gZW51bSB2NGwyX2ZpZWxkICVkIiwgZmllbGQpOwotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9jb2xvcnNwYWNlIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCwKLSAgICBHc3RWaWRlb0NvbG9yaW1ldHJ5ICogY2luZm8pCi17Ci0gIGdib29sZWFuIGlzX3JnYiA9Ci0gICAgICBnc3RfdjRsMl9vYmplY3RfdjRsMmZvdXJjY19pc19yZ2IgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCk7Ci0gIGVudW0gdjRsMl9jb2xvcnNwYWNlIGNvbG9yc3BhY2U7Ci0gIGVudW0gdjRsMl9xdWFudGl6YXRpb24gcmFuZ2U7Ci0gIGVudW0gdjRsMl95Y2Jjcl9lbmNvZGluZyBtYXRyaXg7Ci0gIGVudW0gdjRsMl94ZmVyX2Z1bmMgdHJhbnNmZXI7Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgaWYgKFY0TDJfVFlQRV9JU19NVUxUSVBMQU5BUiAoZm10LT50eXBlKSkgewotICAgIGNvbG9yc3BhY2UgPSBmbXQtPmZtdC5waXhfbXAuY29sb3JzcGFjZTsKLSAgICByYW5nZSA9IGZtdC0+Zm10LnBpeF9tcC5xdWFudGl6YXRpb247Ci0gICAgbWF0cml4ID0gZm10LT5mbXQucGl4X21wLnljYmNyX2VuYzsKLSAgICB0cmFuc2ZlciA9IGZtdC0+Zm10LnBpeF9tcC54ZmVyX2Z1bmM7Ci0gIH0gZWxzZSB7Ci0gICAgY29sb3JzcGFjZSA9IGZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlOwotICAgIHJhbmdlID0gZm10LT5mbXQucGl4LnF1YW50aXphdGlvbjsKLSAgICBtYXRyaXggPSBmbXQtPmZtdC5waXgueWNiY3JfZW5jOwotICAgIHRyYW5zZmVyID0gZm10LT5mbXQucGl4LnhmZXJfZnVuYzsKLSAgfQotCi0gIC8qIEZpcnN0IHN0ZXAsIHNldCB0aGUgZGVmYXVsdHMgZm9yIGVhY2ggcHJpbWFyaWVzICovCi0gIHN3aXRjaCAoY29sb3JzcGFjZSkgewotICAgIGNhc2UgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTToKLSAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8xNl8yMzU7Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDYwMTsKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9CVDcwOTsKLSAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX1NNUFRFMTcwTTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9DT0xPUlNQQUNFX1JFQzcwOToKLSAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8xNl8yMzU7Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDcwOTsKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9CVDcwOTsKLSAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX0JUNzA5OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjoKLSAgICBjYXNlIFY0TDJfQ09MT1JTUEFDRV9KUEVHOgotICAgICAgY2luZm8tPnJhbmdlID0gR1NUX1ZJREVPX0NPTE9SX1JBTkdFXzBfMjU1OwotICAgICAgY2luZm8tPm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQ2MDE7Ci0gICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfU1JHQjsKLSAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX0JUNzA5OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX0NPTE9SU1BBQ0VfQURPQkVSR0I6Ci0gICAgICBjaW5mby0+cmFuZ2UgPSBHU1RfVklERU9fQ09MT1JfUkFOR0VfMTZfMjM1OwotICAgICAgY2luZm8tPm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQ2MDE7Ci0gICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfQURPQkVSR0I7Ci0gICAgICBjaW5mby0+cHJpbWFyaWVzID0gR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19BRE9CRVJHQjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9DT0xPUlNQQUNFX0JUMjAyMDoKLSAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8xNl8yMzU7Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDIwMjA7Ci0gICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfQlQ3MDk7Ci0gICAgICBjaW5mby0+cHJpbWFyaWVzID0gR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19CVDIwMjA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfQ09MT1JTUEFDRV9TTVBURTI0ME06Ci0gICAgICBjaW5mby0+cmFuZ2UgPSBHU1RfVklERU9fQ09MT1JfUkFOR0VfMTZfMjM1OwotICAgICAgY2luZm8tPm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfU01QVEUyNDBNOwotICAgICAgY2luZm8tPnRyYW5zZmVyID0gR1NUX1ZJREVPX1RSQU5TRkVSX1NNUFRFMjQwTTsKLSAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX1NNUFRFMjQwTTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTToKLSAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8xNl8yMzU7Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDYwMTsKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9CVDcwOTsKLSAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX0JUNDcwTTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkc6Ci0gICAgICBjaW5mby0+cmFuZ2UgPSBHU1RfVklERU9fQ09MT1JfUkFOR0VfMTZfMjM1OwotICAgICAgY2luZm8tPm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfQlQ2MDE7Ci0gICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfQlQ3MDk7Ci0gICAgICBjaW5mby0+cHJpbWFyaWVzID0gR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19CVDQ3MEJHOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX0NPTE9SU1BBQ0VfUkFXOgotICAgICAgLyogRXhwbGljaXRseSB1bmtub3duICovCi0gICAgICBjaW5mby0+cmFuZ2UgPSBHU1RfVklERU9fQ09MT1JfUkFOR0VfVU5LTk9XTjsKLSAgICAgIGNpbmZvLT5tYXRyaXggPSBHU1RfVklERU9fQ09MT1JfTUFUUklYX1VOS05PV047Ci0gICAgICBjaW5mby0+dHJhbnNmZXIgPSBHU1RfVklERU9fVFJBTlNGRVJfVU5LTk9XTjsKLSAgICAgIGNpbmZvLT5wcmltYXJpZXMgPSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX1VOS05PV047Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX0RFQlVHICgiVW5rbm93biBlbnVtIHY0bDJfY29sb3JzcGFjZSAlZCIsIGNvbG9yc3BhY2UpOwotICAgICAgcmV0ID0gRkFMU0U7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGlmICghcmV0KQotICAgIGdvdG8gZG9uZTsKLQotICAvKiBTZWNvbmQgc3RlcCwgYXBwbHkgYW55IGN1c3RvbSB2YXJpYXRpb24gKi8KLSAgc3dpdGNoIChyYW5nZSkgewotICAgIGNhc2UgVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRToKLSAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8wXzI1NTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9RVUFOVElaQVRJT05fTElNX1JBTkdFOgotICAgICAgY2luZm8tPnJhbmdlID0gR1NUX1ZJREVPX0NPTE9SX1JBTkdFXzE2XzIzNTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9RVUFOVElaQVRJT05fREVGQVVMVDoKLSAgICAgIC8qIHJlcGxpY2F0ZWQgVjRMMl9NQVBfUVVBTlRJWkFUSU9OX0RFRkFVTFQgbWFjcm8gYmVoYXZpb3IgKi8KLSAgICAgIGlmIChpc19yZ2IgJiYgY29sb3JzcGFjZSA9PSBWNEwyX0NPTE9SU1BBQ0VfQlQyMDIwKQotICAgICAgICBjaW5mby0+cmFuZ2UgPSBHU1RfVklERU9fQ09MT1JfUkFOR0VfMTZfMjM1OwotICAgICAgZWxzZSBpZiAoaXNfcmdiIHx8IG1hdHJpeCA9PSBWNEwyX1lDQkNSX0VOQ19YVjYwMQotICAgICAgICAgIHx8IG1hdHJpeCA9PSBWNEwyX1lDQkNSX0VOQ19YVjcwOQotICAgICAgICAgIHx8IGNvbG9yc3BhY2UgPT0gVjRMMl9DT0xPUlNQQUNFX0pQRUcpCi0gICAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV8wXzI1NTsKLSAgICAgIGVsc2UKLSAgICAgICAgY2luZm8tPnJhbmdlID0gR1NUX1ZJREVPX0NPTE9SX1JBTkdFXzE2XzIzNTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklORyAoIlVua25vd24gZW51bSB2NGwyX3F1YW50aXphdGlvbiB2YWx1ZSAlZCIsIHJhbmdlKTsKLSAgICAgIGNpbmZvLT5yYW5nZSA9IEdTVF9WSURFT19DT0xPUl9SQU5HRV9VTktOT1dOOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBzd2l0Y2ggKG1hdHJpeCkgewotICAgIGNhc2UgVjRMMl9ZQ0JDUl9FTkNfWFY2MDE6Ci0gICAgY2FzZSBWNEwyX1lDQkNSX0VOQ19TWUNDOgotICAgICAgR1NUX0ZJWE1FICgiWFY2MDEgYW5kIFNZQ0Mgbm90IGRlZmluZWQsIGFzc3VtaW5nIDYwMSIpOwotICAgICAgLyogZmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFY0TDJfWUNCQ1JfRU5DXzYwMToKLSAgICAgIGNpbmZvLT5tYXRyaXggPSBHU1RfVklERU9fQ09MT1JfTUFUUklYX0JUNjAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1lDQkNSX0VOQ19YVjcwOToKLSAgICAgIEdTVF9GSVhNRSAoIlhWNzA5IG5vdCBkZWZpbmVkLCBhc3N1bWluZyA3MDkiKTsKLSAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBWNEwyX1lDQkNSX0VOQ183MDk6Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDcwOTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9ZQ0JDUl9FTkNfQlQyMDIwX0NPTlNUX0xVTToKLSAgICAgIEdTVF9GSVhNRSAoIkJUMjAyMCB3aXRoIGNvbnN0YW50IGx1bW1hIGlzIG5vdCBkZWZpbmVkLCBhc3N1bWluZyBCVDIwMjAiKTsKLSAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBWNEwyX1lDQkNSX0VOQ19CVDIwMjA6Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDIwMjA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFY0TDJfWUNCQ1JfRU5DX1NNUFRFMjQwTToKLSAgICAgIGNpbmZvLT5tYXRyaXggPSBHU1RfVklERU9fQ09MT1JfTUFUUklYX1NNUFRFMjQwTTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9ZQ0JDUl9FTkNfREVGQVVMVDoKLSAgICAgIC8qIG5vdGhpbmcsIGp1c3QgdXNlIGRlZmF1bHRzIGZvciBjb2xvcnNwYWNlICovCi0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX1dBUk5JTkcgKCJVbmtub3duIGVudW0gdjRsMl95Y2Jjcl9lbmNvZGluZyB2YWx1ZSAlZCIsIG1hdHJpeCk7Ci0gICAgICBjaW5mby0+bWF0cml4ID0gR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9VTktOT1dOOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvKiBTZXQgaWRlbnRpdHkgbWF0cml4IGZvciBSJ0cnQicgZm9ybWF0cyB0byBhdm9pZCBjcmVhdGluZwotICAgKiBjb25mdXNpb24uIFRoaXMgdGhvdWdoIGlzIGNvc21ldGljIGFzIGl0J3Mgbm93IHByb3Blcmx5IGlnbm9yZWQgYnkKLSAgICogdGhlIHZpZGVvIGluZm8gQVBJIGFuZCB2aWRlb2NvbnZlcnQuICovCi0gIGlmIChpc19yZ2IpCi0gICAgY2luZm8tPm1hdHJpeCA9IEdTVF9WSURFT19DT0xPUl9NQVRSSVhfUkdCOwotCi0gIHN3aXRjaCAodHJhbnNmZXIpIHsKLSAgICBjYXNlIFY0TDJfWEZFUl9GVU5DXzcwOToKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9CVDcwOTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9YRkVSX0ZVTkNfU1JHQjoKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9TUkdCOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1hGRVJfRlVOQ19BRE9CRVJHQjoKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9BRE9CRVJHQjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9YRkVSX0ZVTkNfU01QVEUyNDBNOgotICAgICAgY2luZm8tPnRyYW5zZmVyID0gR1NUX1ZJREVPX1RSQU5TRkVSX1NNUFRFMjQwTTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9YRkVSX0ZVTkNfTk9ORToKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9HQU1NQTEwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX1hGRVJfRlVOQ19ERUZBVUxUOgotICAgICAgLyogbm90aGluZywganVzdCB1c2UgZGVmYXVsdHMgZm9yIGNvbG9yc3BhY2UgKi8KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHU1RfV0FSTklORyAoIlVua25vd24gZW51bSB2NGwyX3hmZXJfZnVuYyB2YWx1ZSAlZCIsIHRyYW5zZmVyKTsKLSAgICAgIGNpbmZvLT50cmFuc2ZlciA9IEdTVF9WSURFT19UUkFOU0ZFUl9VTktOT1dOOwotICAgICAgYnJlYWs7Ci0gIH0KLQotZG9uZToKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotZ3N0X3Y0bDJfb2JqZWN0X3RyeV9mbXQgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqdHJ5X2ZtdCkKLXsKLSAgaW50IGZkID0gdjRsMm9iamVjdC0+dmlkZW9fZmQ7Ci0gIHN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0gIGludCByOwotCi0gIG1lbWNweSAoJmZtdCwgdHJ5X2ZtdCwgc2l6ZW9mIChmbXQpKTsKLSAgciA9IHY0bDJfaW9jdGwgKGZkLCBWSURJT0NfVFJZX0ZNVCwgJmZtdCk7Ci0KLSAgaWYgKHIgPCAwICYmIGVycm5vID09IEVOT1RUWSkgewotICAgIC8qIFRoZSBkcml2ZXIgbWlnaHQgbm90IGltcGxlbWVudCBUUllfRk1ULCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgdHJ5Ci0gICAgICAgU19GTVQgdG8gcHJvYmUgKi8KLSAgICBpZiAoR1NUX1Y0TDJfSVNfQUNUSVZFICh2NGwyb2JqZWN0KSkKLSAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBtZW1jcHkgKCZmbXQsIHRyeV9mbXQsIHNpemVvZiAoZm10KSk7Ci0gICAgciA9IHY0bDJfaW9jdGwgKGZkLCBWSURJT0NfU19GTVQsICZmbXQpOwotICB9Ci0gIG1lbWNweSAodHJ5X2ZtdCwgJmZtdCwgc2l6ZW9mIChmbXQpKTsKLSAgcmV0dXJuIHI7Ci0KLWVycm9yOgotICBtZW1jcHkgKHRyeV9mbXQsICZmbXQsIHNpemVvZiAoZm10KSk7Ci0gIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICJVbmFibGUgdG8gdHJ5IGZvcm1hdDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICByZXR1cm4gcjsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfb2JqZWN0X2FkZF9pbnRlcmxhY2VfbW9kZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgR3N0U3RydWN0dXJlICogcywgZ3VpbnQzMiB3aWR0aCwgZ3VpbnQzMiBoZWlnaHQsIGd1aW50MzIgcGl4ZWxmb3JtYXQpCi17Ci0gIHN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0gIEdWYWx1ZSBpbnRlcmxhY2VfZm9ybWF0cyA9IHsgMCwgfTsKLSAgR3N0VmlkZW9JbnRlcmxhY2VNb2RlIGludGVybGFjZV9tb2RlLCBwcmV2ID0gLTE7Ci0KLSAgY29uc3QgZ2NoYXIgKm1vZGVfc3RyaW5nc1tdID0geyAicHJvZ3Jlc3NpdmUiLAotICAgICJpbnRlcmxlYXZlZCIsCi0gICAgIm1peGVkIgotICB9OwotCi0gIGlmICghZ19zdHJfZXF1YWwgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAidmlkZW8veC1yYXciKSkKLSAgICByZXR1cm47Ci0KLSAgaWYgKHY0bDJvYmplY3QtPm5ldmVyX2ludGVybGFjZWQpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImludGVybGFjZS1tb2RlIiwgR19UWVBFX1NUUklORywgInByb2dyZXNzaXZlIiwgTlVMTCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgZ192YWx1ZV9pbml0ICgmaW50ZXJsYWNlX2Zvcm1hdHMsIEdTVF9UWVBFX0xJU1QpOwotCi0gIC8qIFRyeSB0d2ljZSAtIG9uY2UgZm9yIE5PTkUsIG9uY2UgZm9yIElOVEVSTEFDRUQuICovCi0gIG1lbXNldCAoJmZtdCwgMCwgc2l6ZW9mIChmbXQpKTsKLSAgZm10LnR5cGUgPSB2NGwyb2JqZWN0LT50eXBlOwotICBmbXQuZm10LnBpeC53aWR0aCA9IHdpZHRoOwotICBmbXQuZm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7Ci0gIGZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7Ci0gIGZtdC5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotCi0gIGlmIChnc3RfdjRsMl9vYmplY3RfdHJ5X2ZtdCAodjRsMm9iamVjdCwgJmZtdCkgPT0gMCAmJgotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9pbnRlcmxhY2VfbW9kZSAoZm10LmZtdC5waXguZmllbGQsICZpbnRlcmxhY2VfbW9kZSkpIHsKLSAgICBHVmFsdWUgaW50ZXJsYWNlX2VudW0gPSB7IDAsIH07Ci0gICAgZ192YWx1ZV9pbml0ICgmaW50ZXJsYWNlX2VudW0sIEdfVFlQRV9TVFJJTkcpOwotICAgIGdfdmFsdWVfc2V0X3N0cmluZyAoJmludGVybGFjZV9lbnVtLCBtb2RlX3N0cmluZ3NbaW50ZXJsYWNlX21vZGVdKTsKLSAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfYW5kX3Rha2VfdmFsdWUgKCZpbnRlcmxhY2VfZm9ybWF0cywgJmludGVybGFjZV9lbnVtKTsKLSAgICBwcmV2ID0gaW50ZXJsYWNlX21vZGU7Ci0gIH0KLQotICBtZW1zZXQgKCZmbXQsIDAsIHNpemVvZiAoZm10KSk7Ci0gIGZtdC50eXBlID0gdjRsMm9iamVjdC0+dHlwZTsKLSAgZm10LmZtdC5waXgud2lkdGggPSB3aWR0aDsKLSAgZm10LmZtdC5waXguaGVpZ2h0ID0gaGVpZ2h0OwotICBmbXQuZm10LnBpeC5waXhlbGZvcm1hdCA9IHBpeGVsZm9ybWF0OwotICBmbXQuZm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQotICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X3RyeV9mbXQgKHY0bDJvYmplY3QsICZmbXQpID09IDAgJiYKLSAgICAgIGdzdF92NGwyX29iamVjdF9nZXRfaW50ZXJsYWNlX21vZGUgKGZtdC5mbXQucGl4LmZpZWxkLCAmaW50ZXJsYWNlX21vZGUpICYmCi0gICAgICBwcmV2ICE9IGludGVybGFjZV9tb2RlKSB7Ci0gICAgR1ZhbHVlIGludGVybGFjZV9lbnVtID0geyAwLCB9OwotICAgIGdfdmFsdWVfaW5pdCAoJmludGVybGFjZV9lbnVtLCBHX1RZUEVfU1RSSU5HKTsKLSAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKCZpbnRlcmxhY2VfZW51bSwgbW9kZV9zdHJpbmdzW2ludGVybGFjZV9tb2RlXSk7Ci0gICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX2FuZF90YWtlX3ZhbHVlICgmaW50ZXJsYWNlX2Zvcm1hdHMsICZpbnRlcmxhY2VfZW51bSk7Ci0gIH0KLQotICBpZiAoZ3N0X3Y0bDJzcmNfdmFsdWVfc2ltcGxpZnkgKCZpbnRlcmxhY2VfZm9ybWF0cykKLSAgICAgIHx8IGdzdF92YWx1ZV9saXN0X2dldF9zaXplICgmaW50ZXJsYWNlX2Zvcm1hdHMpID4gMCkKLSAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKHMsICJpbnRlcmxhY2UtbW9kZSIsICZpbnRlcmxhY2VfZm9ybWF0cyk7Ci0gIGVsc2UKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHY0bDJvYmplY3QsICJGYWlsZWQgdG8gZGV0ZXJtaW5lIGludGVybGFjZSBtb2RlIik7Ci0KLSAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfb2JqZWN0X2ZpbGxfY29sb3JpbWV0cnlfbGlzdCAoR1ZhbHVlICogbGlzdCwKLSAgICBHc3RWaWRlb0NvbG9yaW1ldHJ5ICogY2luZm8pCi17Ci0gIEdWYWx1ZSBjb2xvcmltZXRyeSA9IEdfVkFMVUVfSU5JVDsKLSAgZ3VpbnQgc2l6ZTsKLSAgZ3VpbnQgaTsKLSAgZ2Jvb2xlYW4gZm91bmQgPSBGQUxTRTsKLQotICBnX3ZhbHVlX2luaXQgKCZjb2xvcmltZXRyeSwgR19UWVBFX1NUUklORyk7Ci0gIGdfdmFsdWVfdGFrZV9zdHJpbmcgKCZjb2xvcmltZXRyeSwgZ3N0X3ZpZGVvX2NvbG9yaW1ldHJ5X3RvX3N0cmluZyAoY2luZm8pKTsKLQotICAvKiBvbmx5IGluc2VydCBpZiBubyBkdXBsaWNhdGUgKi8KLSAgc2l6ZSA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplIChsaXN0KTsKLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgIGNvbnN0IEdWYWx1ZSAqdG1wOwotCi0gICAgdG1wID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChsaXN0LCBpKTsKLSAgICBpZiAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZjb2xvcmltZXRyeSwgdG1wKSA9PSBHU1RfVkFMVUVfRVFVQUwpIHsKLSAgICAgIGZvdW5kID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghZm91bmQpCi0gICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX2FuZF90YWtlX3ZhbHVlIChsaXN0LCAmY29sb3JpbWV0cnkpOwotICBlbHNlCi0gICAgZ192YWx1ZV91bnNldCAoJmNvbG9yaW1ldHJ5KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX29iamVjdF9hZGRfY29sb3JzcGFjZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdFN0cnVjdHVyZSAqIHMsCi0gICAgZ3VpbnQzMiB3aWR0aCwgZ3VpbnQzMiBoZWlnaHQsIGd1aW50MzIgcGl4ZWxmb3JtYXQpCi17Ci0gIHN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0gIEdWYWx1ZSBsaXN0ID0gR19WQUxVRV9JTklUOwotICBHc3RWaWRlb0NvbG9yaW1ldHJ5IGNpbmZvOwotICBlbnVtIHY0bDJfY29sb3JzcGFjZSByZXFfY3NwYWNlOwotCi0gIG1lbXNldCAoJmZtdCwgMCwgc2l6ZW9mIChmbXQpKTsKLSAgZm10LnR5cGUgPSB2NGwyb2JqZWN0LT50eXBlOwotICBmbXQuZm10LnBpeC53aWR0aCA9IHdpZHRoOwotICBmbXQuZm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7Ci0gIGZtdC5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7Ci0KLSAgZ192YWx1ZV9pbml0ICgmbGlzdCwgR1NUX1RZUEVfTElTVCk7Ci0KLSAgLyogc3RlcCAxOiBnZXQgZGV2aWNlIGRlZmF1bHQgY29sb3JzcGFjZSBhbmQgaW5zZXJ0IGl0IGZpcnN0IGFzCi0gICAqIGl0IHNob3VsZCBiZSB0aGUgcHJlZmVycmVkIG9uZSAqLwotICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X3RyeV9mbXQgKHY0bDJvYmplY3QsICZmbXQpID09IDApIHsKLSAgICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X2dldF9jb2xvcnNwYWNlICgmZm10LCAmY2luZm8pKQotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2ZpbGxfY29sb3JpbWV0cnlfbGlzdCAoJmxpc3QsICZjaW5mbyk7Ci0gIH0KLQotICAvKiBzdGVwIDI6IHByb2JlIGFsbCBjb2xvcnNwYWNlIG90aGVyIHRoYW4gZGVmYXVsdAotICAgKiBXZSBkb24ndCBwcm9iZSBhbGwgY29sb3JzcGFjZSwgcmFuZ2UsIG1hdHJpeCBhbmQgdHJhbnNmZXIgY29tYmluYXRpb24gdG8KLSAgICogYXZvaWQgaW9jdGwgZmxvb2Rpbmcgd2hpY2ggY291bGQgZ3JlYXRseSBpbmNyZWFzZSBpbml0aWFsaXphdGlvbiB0aW1lCi0gICAqIHdpdGggbG93LXNwZWVkIGRldmljZXMgKFVWQy4uLikgKi8KLSAgZm9yIChyZXFfY3NwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLSAgICAgIHJlcV9jc3BhY2UgPD0gVjRMMl9DT0xPUlNQQUNFX1JBVzsgcmVxX2NzcGFjZSsrKSB7Ci0gICAgLyogVjRMMl9DT0xPUlNQQUNFX0JUODc4IGlzIGRlcHJlY2F0ZWQgYW5kIHNoYWxsIG5vdCBiZSB1c2VkLCBzbyBza2lwICovCi0gICAgaWYgKHJlcV9jc3BhY2UgPT0gVjRMMl9DT0xPUlNQQUNFX0JUODc4KQotICAgICAgY29udGludWU7Ci0KLSAgICBpZiAoVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSICh2NGwyb2JqZWN0LT50eXBlKSkKLSAgICAgIGZtdC5mbXQucGl4X21wLmNvbG9yc3BhY2UgPSByZXFfY3NwYWNlOwotICAgIGVsc2UKLSAgICAgIGZtdC5mbXQucGl4LmNvbG9yc3BhY2UgPSByZXFfY3NwYWNlOwotCi0gICAgaWYgKGdzdF92NGwyX29iamVjdF90cnlfZm10ICh2NGwyb2JqZWN0LCAmZm10KSA9PSAwKSB7Ci0gICAgICBlbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcnNwYWNlOwotCi0gICAgICBpZiAoVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSICh2NGwyb2JqZWN0LT50eXBlKSkKLSAgICAgICAgY29sb3JzcGFjZSA9IGZtdC5mbXQucGl4X21wLmNvbG9yc3BhY2U7Ci0gICAgICBlbHNlCi0gICAgICAgIGNvbG9yc3BhY2UgPSBmbXQuZm10LnBpeC5jb2xvcnNwYWNlOwotCi0gICAgICBpZiAoY29sb3JzcGFjZSA9PSByZXFfY3NwYWNlKSB7Ci0gICAgICAgIGlmIChnc3RfdjRsMl9vYmplY3RfZ2V0X2NvbG9yc3BhY2UgKCZmbXQsICZjaW5mbykpCi0gICAgICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2ZpbGxfY29sb3JpbWV0cnlfbGlzdCAoJmxpc3QsICZjaW5mbyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGdzdF92YWx1ZV9saXN0X2dldF9zaXplICgmbGlzdCkgPiAwKQotICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZSAocywgImNvbG9yaW1ldHJ5IiwgJmxpc3QpOwotICBlbHNlCi0gICAgZ192YWx1ZV91bnNldCAoJmxpc3QpOwotCi0gIHJldHVybjsKLX0KLQotLyogVGhlIGZyYW1lIGludGVydmFsIGVudW1lcmF0aW9uIGNvZGUgZmlyc3QgYXBwZWFyZWQgaW4gTGludXggMi42LjE5LiAqLwotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1nc3RfdjRsMl9vYmplY3RfcHJvYmVfY2Fwc19mb3JfZm9ybWF0X2FuZF9zaXplIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBndWludDMyIHBpeGVsZm9ybWF0LAotICAgIGd1aW50MzIgd2lkdGgsIGd1aW50MzIgaGVpZ2h0LCBjb25zdCBHc3RTdHJ1Y3R1cmUgKiB0ZW1wbGF0ZSkKLXsKLSAgZ2ludCBmZCA9IHY0bDJvYmplY3QtPnZpZGVvX2ZkOwotICBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSBpdmFsOwotICBndWludDMyIG51bSwgZGVub207Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR1ZhbHVlIHJhdGVzID0geyAwLCB9OwotCi0gIG1lbXNldCAoJml2YWwsIDAsIHNpemVvZiAoc3RydWN0IHY0bDJfZnJtaXZhbGVudW0pKTsKLSAgaXZhbC5pbmRleCA9IDA7Ci0gIGl2YWwucGl4ZWxfZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7Ci0gIGl2YWwud2lkdGggPSB3aWR0aDsKLSAgaXZhbC5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAiZ2V0IGZyYW1lIGludGVydmFsIGZvciAldXgldSwgJSIgR1NUX0ZPVVJDQ19GT1JNQVQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKHBpeGVsZm9ybWF0KSk7Ci0KLSAgLyoga2VlcCBpbiBtaW5kIHRoYXQgdjRsMiBnaXZlcyB1cyBmcmFtZSBpbnRlcnZhbHMgKGR1cmF0aW9ucyk7IHdlIGludmVydCB0aGUKLSAgICogZnJhY3Rpb24gdG8gZ2V0IGZyYW1lcmF0ZSAqLwotICBpZiAodjRsMl9pb2N0bCAoZmQsIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTLCAmaXZhbCkgPCAwKQotICAgIGdvdG8gZW51bV9mcmFtZWludGVydmFsc19mYWlsZWQ7Ci0KLSAgaWYgKGl2YWwudHlwZSA9PSBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURSkgewotICAgIEdWYWx1ZSByYXRlID0geyAwLCB9OwotCi0gICAgZ192YWx1ZV9pbml0ICgmcmF0ZXMsIEdTVF9UWVBFX0xJU1QpOwotICAgIGdfdmFsdWVfaW5pdCAoJnJhdGUsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLQotICAgIGRvIHsKLSAgICAgIG51bSA9IGl2YWwuZGlzY3JldGUubnVtZXJhdG9yOwotICAgICAgZGVub20gPSBpdmFsLmRpc2NyZXRlLmRlbm9taW5hdG9yOwotCi0gICAgICBpZiAobnVtID4gR19NQVhJTlQgfHwgZGVub20gPiBHX01BWElOVCkgewotICAgICAgICAvKiBsZXQgdXMgaG9wZSB3ZSBkb24ndCBnZXQgaGVyZS4uLiAqLwotICAgICAgICBudW0gPj49IDE7Ci0gICAgICAgIGRlbm9tID4+PSAxOwotICAgICAgfQotCi0gICAgICBHU1RfTE9HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImFkZGluZyBkaXNjcmV0ZSBmcmFtZXJhdGU6ICVkLyVkIiwKLSAgICAgICAgICBkZW5vbSwgbnVtKTsKLQotICAgICAgLyogc3dhcCB0byBnZXQgdGhlIGZyYW1lcmF0ZSAqLwotICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnJhdGUsIGRlbm9tLCBudW0pOwotICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmcmF0ZXMsICZyYXRlKTsKLQotICAgICAgaXZhbC5pbmRleCsrOwotICAgIH0gd2hpbGUgKHY0bDJfaW9jdGwgKGZkLCBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUywgJml2YWwpID49IDApOwotICB9IGVsc2UgaWYgKGl2YWwudHlwZSA9PSBWNEwyX0ZSTUlWQUxfVFlQRV9TVEVQV0lTRSkgewotICAgIEdWYWx1ZSBtaW4gPSB7IDAsIH07Ci0gICAgR1ZhbHVlIHN0ZXAgPSB7IDAsIH07Ci0gICAgR1ZhbHVlIG1heCA9IHsgMCwgfTsKLSAgICBnYm9vbGVhbiBhZGRlZCA9IEZBTFNFOwotICAgIGd1aW50MzIgbWlubnVtLCBtaW5kZW5vbTsKLSAgICBndWludDMyIG1heG51bSwgbWF4ZGVub207Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZyYXRlcywgR1NUX1RZUEVfTElTVCk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZtaW4sIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgICBnX3ZhbHVlX2luaXQgKCZzdGVwLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gICAgZ192YWx1ZV9pbml0ICgmbWF4LCBHU1RfVFlQRV9GUkFDVElPTik7Ci0KLSAgICAvKiBnZXQgdGhlIG1pbiAqLwotICAgIG1pbm51bSA9IGl2YWwuc3RlcHdpc2UubWluLm51bWVyYXRvcjsKLSAgICBtaW5kZW5vbSA9IGl2YWwuc3RlcHdpc2UubWluLmRlbm9taW5hdG9yOwotICAgIGlmIChtaW5udW0gPiBHX01BWElOVCB8fCBtaW5kZW5vbSA+IEdfTUFYSU5UKSB7Ci0gICAgICBtaW5udW0gPj49IDE7Ci0gICAgICBtaW5kZW5vbSA+Pj0gMTsKLSAgICB9Ci0gICAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJzdGVwd2lzZSBtaW4gZnJhbWUgaW50ZXJ2YWw6ICVkLyVkIiwKLSAgICAgICAgbWlubnVtLCBtaW5kZW5vbSk7Ci0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJm1pbiwgbWlubnVtLCBtaW5kZW5vbSk7Ci0KLSAgICAvKiBnZXQgdGhlIG1heCAqLwotICAgIG1heG51bSA9IGl2YWwuc3RlcHdpc2UubWF4Lm51bWVyYXRvcjsKLSAgICBtYXhkZW5vbSA9IGl2YWwuc3RlcHdpc2UubWF4LmRlbm9taW5hdG9yOwotICAgIGlmIChtYXhudW0gPiBHX01BWElOVCB8fCBtYXhkZW5vbSA+IEdfTUFYSU5UKSB7Ci0gICAgICBtYXhudW0gPj49IDE7Ci0gICAgICBtYXhkZW5vbSA+Pj0gMTsKLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInN0ZXB3aXNlIG1heCBmcmFtZSBpbnRlcnZhbDogJWQvJWQiLAotICAgICAgICBtYXhudW0sIG1heGRlbm9tKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmbWF4LCBtYXhudW0sIG1heGRlbm9tKTsKLQotICAgIC8qIGdldCB0aGUgc3RlcCAqLwotICAgIG51bSA9IGl2YWwuc3RlcHdpc2Uuc3RlcC5udW1lcmF0b3I7Ci0gICAgZGVub20gPSBpdmFsLnN0ZXB3aXNlLnN0ZXAuZGVub21pbmF0b3I7Ci0gICAgaWYgKG51bSA+IEdfTUFYSU5UIHx8IGRlbm9tID4gR19NQVhJTlQpIHsKLSAgICAgIG51bSA+Pj0gMTsKLSAgICAgIGRlbm9tID4+PSAxOwotICAgIH0KLQotICAgIGlmIChudW0gPT0gMCB8fCBkZW5vbSA9PSAwKSB7Ci0gICAgICAvKiBpbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIHdyb25nIGZyYWN0aW9uIG9yIG5vIHN0ZXAsIHNldCB0aGUgc3RlcCB0byBtYXgKLSAgICAgICAqIHNvIHRoYXQgd2Ugb25seSBhZGQgdGhlIG1pbiB2YWx1ZSBpbiB0aGUgbG9vcCBiZWxvdyAqLwotICAgICAgbnVtID0gbWF4bnVtOwotICAgICAgZGVub20gPSBtYXhkZW5vbTsKLSAgICB9Ci0KLSAgICAvKiBzaW5jZSB3ZSBvbmx5IGhhdmUgZ3N0X3ZhbHVlX2ZyYWN0aW9uX3N1YnRyYWN0IGFuZCBub3QgYWRkLCBuZWdhdGUgdGhlCi0gICAgICogbnVtZXJhdG9yICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJzdGVwd2lzZSBzdGVwIGZyYW1lIGludGVydmFsOiAlZC8lZCIsCi0gICAgICAgIG51bSwgZGVub20pOwotICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZzdGVwLCAtbnVtLCBkZW5vbSk7Ci0KLSAgICB3aGlsZSAoZ3N0X3ZhbHVlX2NvbXBhcmUgKCZtaW4sICZtYXgpICE9IEdTVF9WQUxVRV9HUkVBVEVSX1RIQU4pIHsKLSAgICAgIEdWYWx1ZSByYXRlID0geyAwLCB9OwotCi0gICAgICBudW0gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAoJm1pbik7Ci0gICAgICBkZW5vbSA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKCZtaW4pOwotICAgICAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJhZGRpbmcgc3RlcHdpc2UgZnJhbWVyYXRlOiAlZC8lZCIsCi0gICAgICAgICAgZGVub20sIG51bSk7Ci0KLSAgICAgIC8qIGludmVydCB0byBnZXQgdGhlIGZyYW1lcmF0ZSAqLwotICAgICAgZ192YWx1ZV9pbml0ICgmcmF0ZSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnJhdGUsIGRlbm9tLCBudW0pOwotICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmcmF0ZXMsICZyYXRlKTsKLSAgICAgIGFkZGVkID0gVFJVRTsKLQotICAgICAgLyogd2UncmUgYWN0dWFsbHkgYWRkaW5nIGJlY2F1c2Ugc3RlcCB3YXMgbmVnYXRlZCBhYm92ZS4gVGhpcyBpcyBiZWNhdXNlCi0gICAgICAgKiB0aGVyZSBpcyBubyBfYWRkIGZ1bmN0aW9uLi4uICovCi0gICAgICBpZiAoIWdzdF92YWx1ZV9mcmFjdGlvbl9zdWJ0cmFjdCAoJm1pbiwgJm1pbiwgJnN0ZXApKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImNvdWxkIG5vdCBzdGVwIGZyYWN0aW9uISIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFhZGRlZCkgewotICAgICAgLyogbm8gcmFuZ2Ugd2FzIGFkZGVkLCBsZWF2ZSB0aGUgZGVmYXVsdCByYW5nZSBmcm9tIHRoZSB0ZW1wbGF0ZSAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAgICJubyByYW5nZSBhZGRlZCwgbGVhdmluZyBkZWZhdWx0Iik7Ci0gICAgICBnX3ZhbHVlX3Vuc2V0ICgmcmF0ZXMpOwotICAgIH0KLSAgfSBlbHNlIGlmIChpdmFsLnR5cGUgPT0gVjRMMl9GUk1JVkFMX1RZUEVfQ09OVElOVU9VUykgewotICAgIGd1aW50MzIgbWF4bnVtLCBtYXhkZW5vbTsKLQotICAgIGdfdmFsdWVfaW5pdCAoJnJhdGVzLCBHU1RfVFlQRV9GUkFDVElPTl9SQU5HRSk7Ci0KLSAgICBudW0gPSBpdmFsLnN0ZXB3aXNlLm1pbi5udW1lcmF0b3I7Ci0gICAgZGVub20gPSBpdmFsLnN0ZXB3aXNlLm1pbi5kZW5vbWluYXRvcjsKLSAgICBpZiAobnVtID4gR19NQVhJTlQgfHwgZGVub20gPiBHX01BWElOVCkgewotICAgICAgbnVtID4+PSAxOwotICAgICAgZGVub20gPj49IDE7Ci0gICAgfQotCi0gICAgbWF4bnVtID0gaXZhbC5zdGVwd2lzZS5tYXgubnVtZXJhdG9yOwotICAgIG1heGRlbm9tID0gaXZhbC5zdGVwd2lzZS5tYXguZGVub21pbmF0b3I7Ci0gICAgaWYgKG1heG51bSA+IEdfTUFYSU5UIHx8IG1heGRlbm9tID4gR19NQVhJTlQpIHsKLSAgICAgIG1heG51bSA+Pj0gMTsKLSAgICAgIG1heGRlbm9tID4+PSAxOwotICAgIH0KLQotICAgIEdTVF9MT0dfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAiY29udGludW91cyBmcmFtZSBpbnRlcnZhbCAlZC8lZCB0byAlZC8lZCIsIG1heGRlbm9tLCBtYXhudW0sIGRlbm9tLAotICAgICAgICBudW0pOwotCi0gICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmcmF0ZXMsIG1heGRlbm9tLCBtYXhudW0sIGRlbm9tLCBudW0pOwotICB9IGVsc2UgewotICAgIGdvdG8gdW5rbm93bl90eXBlOwotICB9Ci0KLXJldHVybl9kYXRhOgotICBzID0gZ3N0X3N0cnVjdHVyZV9jb3B5ICh0ZW1wbGF0ZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCAoZ2ludCkgd2lkdGgsCi0gICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgKGdpbnQpIGhlaWdodCwgTlVMTCk7Ci0gIGdzdF92NGwyX29iamVjdF9hZGRfYXNwZWN0X3JhdGlvICh2NGwyb2JqZWN0LCBzKTsKLSAgZ3N0X3Y0bDJfb2JqZWN0X2FkZF9pbnRlcmxhY2VfbW9kZSAodjRsMm9iamVjdCwgcywgd2lkdGgsIGhlaWdodCwKLSAgICAgIHBpeGVsZm9ybWF0KTsKLSAgZ3N0X3Y0bDJfb2JqZWN0X2FkZF9jb2xvcnNwYWNlICh2NGwyb2JqZWN0LCBzLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbGZvcm1hdCk7Ci0KLSAgaWYgKEdfSVNfVkFMVUUgKCZyYXRlcykpIHsKLSAgICBnc3RfdjRsMnNyY192YWx1ZV9zaW1wbGlmeSAoJnJhdGVzKTsKLSAgICAvKiBvbmx5IGNoYW5nZSB0aGUgZnJhbWVyYXRlIG9uIHRoZSB0ZW1wbGF0ZSB3aGVuIHdlIGhhdmUgYSB2YWxpZCBwcm9iZWQgbmV3Ci0gICAgICogdmFsdWUgKi8KLSAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKHMsICJmcmFtZXJhdGUiLCAmcmF0ZXMpOwotICB9IGVsc2UgaWYgKHY0bDJvYmplY3QtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0gICAgICB2NGwyb2JqZWN0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKLSAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OX1JBTkdFLCAwLCAxLCBHX01BWElOVCwKLSAgICAgICAgMSwgTlVMTCk7Ci0gIH0KLSAgcmV0dXJuIHM7Ci0KLSAgLyogRVJST1JTICovCi1lbnVtX2ZyYW1laW50ZXJ2YWxzX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICJVbmFibGUgdG8gZW51bWVyYXRlIGludGVydmFscyBmb3IgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIkAldXgldSIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAocGl4ZWxmb3JtYXQpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBnb3RvIHJldHVybl9kYXRhOwotICB9Ci11bmtub3duX3R5cGU6Ci0gIHsKLSAgICAvKiBJIGRvbid0IHNlZSBob3cgdGhpcyBpcyBhY3R1YWxseSBhbiBlcnJvciwgd2UgaWdub3JlIHRoZSBmb3JtYXQgdGhlbiAqLwotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIlVua25vd24gZnJhbWUgaW50ZXJ2YWwgdHlwZSBhdCAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiQCV1eCV1OiAldSIsCi0gICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAocGl4ZWxmb3JtYXQpLCB3aWR0aCwgaGVpZ2h0LCBpdmFsLnR5cGUpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyBnaW50Ci1zb3J0X2J5X2ZyYW1lX3NpemUgKEdzdFN0cnVjdHVyZSAqIHMxLCBHc3RTdHJ1Y3R1cmUgKiBzMikKLXsKLSAgaW50IHcxLCBoMSwgdzIsIGgyOwotCi0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoczEsICJ3aWR0aCIsICZ3MSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoczEsICJoZWlnaHQiLCAmaDEpOwotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMyLCAid2lkdGgiLCAmdzIpOwotICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMyLCAiaGVpZ2h0IiwgJmgyKTsKLQotICAvKiBJIHRoaW5rIGl0J3Mgc2FmZSB0byBhc3N1bWUgdGhhdCB0aGlzIHdvbid0IG92ZXJmbG93IGZvciBhIHdoaWxlICovCi0gIHJldHVybiAoKHcyICogaDIpIC0gKHcxICogaDEpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX29iamVjdF91cGRhdGVfYW5kX2FwcGVuZCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgZ3VpbnQzMiBmb3JtYXQsIEdzdENhcHMgKiBjYXBzLCBHc3RTdHJ1Y3R1cmUgKiBzKQotewotICBHc3RTdHJ1Y3R1cmUgKmFsdF9zID0gTlVMTDsKLQotICAvKiBFbmNvZGVkIHN0cmVhbSBvbiBvdXRwdXQgYnVmZmVyIG5lZWQgdG8gYmUgcGFyc2VkICovCi0gIGlmICh2NGwyb2JqZWN0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUIHx8Ci0gICAgICB2NGwyb2JqZWN0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkgewotICAgIGdpbnQgaSA9IDA7Ci0KLSAgICBmb3IgKDsgaSA8IEdTVF9WNEwyX0ZPUk1BVF9DT1VOVDsgaSsrKSB7Ci0gICAgICBpZiAoZm9ybWF0ID09IGdzdF92NGwyX2Zvcm1hdHNbaV0uZm9ybWF0ICYmCi0gICAgICAgICAgZ3N0X3Y0bDJfZm9ybWF0c1tpXS5mbGFncyAmIEdTVF9WNEwyX0NPREVDICYmCi0gICAgICAgICAgIShnc3RfdjRsMl9mb3JtYXRzW2ldLmZsYWdzICYgR1NUX1Y0TDJfTk9fUEFSU0UpKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAicGFyc2VkIiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAodjRsMm9iamVjdC0+aGFzX2FscGhhX2NvbXBvbmVudCAmJgotICAgICAgKHY0bDJvYmplY3QtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0gICAgICAgICAgdjRsMm9iamVjdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSkgewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0IzMjoKLSAgICAgICAgYWx0X3MgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHMpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAoYWx0X3MsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiQVJHQiIsIE5VTEwpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVjRMMl9QSVhfRk1UX0JHUjMyOgotICAgICAgICBhbHRfcyA9IGdzdF9zdHJ1Y3R1cmVfY29weSAocyk7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChhbHRfcywgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JBIiwgTlVMTCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZSAoY2Fwcywgcyk7Ci0KLSAgaWYgKGFsdF9zKQotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKGNhcHMsIGFsdF9zKTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3Y0bDJfb2JqZWN0X3Byb2JlX2NhcHNfZm9yX2Zvcm1hdCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgZ3VpbnQzMiBwaXhlbGZvcm1hdCwgY29uc3QgR3N0U3RydWN0dXJlICogdGVtcGxhdGUpCi17Ci0gIEdzdENhcHMgKnJldCA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLSAgR3N0U3RydWN0dXJlICp0bXA7Ci0gIGdpbnQgZmQgPSB2NGwyb2JqZWN0LT52aWRlb19mZDsKLSAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gc2l6ZTsKLSAgR0xpc3QgKnJlc3VsdHMgPSBOVUxMOwotICBndWludDMyIHcsIGg7Ci0KLSAgaWYgKHBpeGVsZm9ybWF0ID09IEdTVF9NQUtFX0ZPVVJDQyAoJ00nLCAnUCcsICdFJywgJ0cnKSkgewotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKHJldCwgZ3N0X3N0cnVjdHVyZV9jb3B5ICh0ZW1wbGF0ZSkpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICBtZW1zZXQgKCZzaXplLCAwLCBzaXplb2YgKHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtKSk7Ci0gIHNpemUuaW5kZXggPSAwOwotICBzaXplLnBpeGVsX2Zvcm1hdCA9IHBpeGVsZm9ybWF0OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAiRW51bWVyYXRpbmcgZnJhbWUgc2l6ZXMgZm9yICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgR1NUX0ZPVVJDQ19BUkdTIChwaXhlbGZvcm1hdCkpOwotCi0gIGlmICh2NGwyX2lvY3RsIChmZCwgVklESU9DX0VOVU1fRlJBTUVTSVpFUywgJnNpemUpIDwgMCkKLSAgICBnb3RvIGVudW1fZnJhbWVzaXplc19mYWlsZWQ7Ci0KLSAgaWYgKHNpemUudHlwZSA9PSBWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURSkgewotICAgIGRvIHsKLSAgICAgIEdTVF9MT0dfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiZ290IGRpc2NyZXRlIGZyYW1lIHNpemUgJWR4JWQiLAotICAgICAgICAgIHNpemUuZGlzY3JldGUud2lkdGgsIHNpemUuZGlzY3JldGUuaGVpZ2h0KTsKLQotICAgICAgdyA9IE1JTiAoc2l6ZS5kaXNjcmV0ZS53aWR0aCwgR19NQVhJTlQpOwotICAgICAgaCA9IE1JTiAoc2l6ZS5kaXNjcmV0ZS5oZWlnaHQsIEdfTUFYSU5UKTsKLQotICAgICAgaWYgKHcgJiYgaCkgewotICAgICAgICB0bXAgPQotICAgICAgICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3Byb2JlX2NhcHNfZm9yX2Zvcm1hdF9hbmRfc2l6ZSAodjRsMm9iamVjdCwKLSAgICAgICAgICAgIHBpeGVsZm9ybWF0LCB3LCBoLCB0ZW1wbGF0ZSk7Ci0KLSAgICAgICAgaWYgKHRtcCkKLSAgICAgICAgICByZXN1bHRzID0gZ19saXN0X3ByZXBlbmQgKHJlc3VsdHMsIHRtcCk7Ci0gICAgICB9Ci0KLSAgICAgIHNpemUuaW5kZXgrKzsKLSAgICB9IHdoaWxlICh2NGwyX2lvY3RsIChmZCwgVklESU9DX0VOVU1fRlJBTUVTSVpFUywgJnNpemUpID49IDApOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICJkb25lIGl0ZXJhdGluZyBkaXNjcmV0ZSBmcmFtZSBzaXplcyIpOwotICB9IGVsc2UgaWYgKHNpemUudHlwZSA9PSBWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRSkgewotICAgIGd1aW50MzIgbWF4dywgbWF4aCwgc3RlcF93LCBzdGVwX2g7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAid2UgaGF2ZSBzdGVwd2lzZSBmcmFtZSBzaXplczoiKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAibWluIHdpZHRoOiAgICVkIiwKLSAgICAgICAgc2l6ZS5zdGVwd2lzZS5taW5fd2lkdGgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJtaW4gaGVpZ2h0OiAgJWQiLAotICAgICAgICBzaXplLnN0ZXB3aXNlLm1pbl9oZWlnaHQpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJtYXggd2lkdGg6ICAgJWQiLAotICAgICAgICBzaXplLnN0ZXB3aXNlLm1heF93aWR0aCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgIm1pbiBoZWlnaHQ6ICAlZCIsCi0gICAgICAgIHNpemUuc3RlcHdpc2UubWF4X2hlaWdodCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInN0ZXAgd2lkdGg6ICAlZCIsCi0gICAgICAgIHNpemUuc3RlcHdpc2Uuc3RlcF93aWR0aCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInN0ZXAgaGVpZ2h0OiAlZCIsCi0gICAgICAgIHNpemUuc3RlcHdpc2Uuc3RlcF9oZWlnaHQpOwotCi0gICAgdyA9IE1BWCAoc2l6ZS5zdGVwd2lzZS5taW5fd2lkdGgsIDEpOwotICAgIGggPSBNQVggKHNpemUuc3RlcHdpc2UubWluX2hlaWdodCwgMSk7Ci0gICAgbWF4dyA9IE1JTiAoc2l6ZS5zdGVwd2lzZS5tYXhfd2lkdGgsIEdfTUFYSU5UKTsKLSAgICBtYXhoID0gTUlOIChzaXplLnN0ZXB3aXNlLm1heF9oZWlnaHQsIEdfTUFYSU5UKTsKLQotICAgIHN0ZXBfdyA9IE1BWCAoc2l6ZS5zdGVwd2lzZS5zdGVwX3dpZHRoLCAxKTsKLSAgICBzdGVwX2ggPSBNQVggKHNpemUuc3RlcHdpc2Uuc3RlcF9oZWlnaHQsIDEpOwotCi0gICAgLyogRklYTUU6IGNoZWNrIGZvciBzYW5pdHkgYW5kIHRoYXQgbWluL21heCBhcmUgbXVsdGlwbGVzIG9mIHRoZSBzdGVwcyAqLwotCi0gICAgLyogd2Ugb25seSBxdWVyeSBkZXRhaWxzIGZvciB0aGUgbWF4IHdpZHRoL2hlaWdodCBzaW5jZSBpdCdzIGxpa2VseSB0aGUKLSAgICAgKiBtb3N0IHJlc3RyaWN0ZWQgaWYgdGhlcmUgYXJlIGFueSByZXNvbHV0aW9uLWRlcGVuZGVudCByZXN0cmljdGlvbnMgKi8KLSAgICB0bXAgPSBnc3RfdjRsMl9vYmplY3RfcHJvYmVfY2Fwc19mb3JfZm9ybWF0X2FuZF9zaXplICh2NGwyb2JqZWN0LAotICAgICAgICBwaXhlbGZvcm1hdCwgbWF4dywgbWF4aCwgdGVtcGxhdGUpOwotCi0gICAgaWYgKHRtcCkgewotICAgICAgR1ZhbHVlIHN0ZXBfcmFuZ2UgPSBHX1ZBTFVFX0lOSVQ7Ci0KLSAgICAgIGdfdmFsdWVfaW5pdCAoJnN0ZXBfcmFuZ2UsIEdTVF9UWVBFX0lOVF9SQU5HRSk7Ci0gICAgICBnc3RfdmFsdWVfc2V0X2ludF9yYW5nZV9zdGVwICgmc3RlcF9yYW5nZSwgdywgbWF4dywgc3RlcF93KTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICh0bXAsICJ3aWR0aCIsICZzdGVwX3JhbmdlKTsKLQotICAgICAgZ3N0X3ZhbHVlX3NldF9pbnRfcmFuZ2Vfc3RlcCAoJnN0ZXBfcmFuZ2UsIGgsIG1heGgsIHN0ZXBfaCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUgKHRtcCwgImhlaWdodCIsICZzdGVwX3JhbmdlKTsKLQotICAgICAgLyogbm8gcG9pbnQgdXNpbmcgdGhlIHJlc3VsdHMgbGlzdCBoZXJlLCBzaW5jZSB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdCAqLwotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3VwZGF0ZV9hbmRfYXBwZW5kICh2NGwyb2JqZWN0LCBwaXhlbGZvcm1hdCwgcmV0LCB0bXApOwotICAgIH0KLSAgfSBlbHNlIGlmIChzaXplLnR5cGUgPT0gVjRMMl9GUk1TSVpFX1RZUEVfQ09OVElOVU9VUykgewotICAgIGd1aW50MzIgbWF4dywgbWF4aDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJ3ZSBoYXZlIGNvbnRpbnVvdXMgZnJhbWUgc2l6ZXM6Iik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgIm1pbiB3aWR0aDogICAlZCIsCi0gICAgICAgIHNpemUuc3RlcHdpc2UubWluX3dpZHRoKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAibWluIGhlaWdodDogICVkIiwKLSAgICAgICAgc2l6ZS5zdGVwd2lzZS5taW5faGVpZ2h0KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAibWF4IHdpZHRoOiAgICVkIiwKLSAgICAgICAgc2l6ZS5zdGVwd2lzZS5tYXhfd2lkdGgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJtaW4gaGVpZ2h0OiAgJWQiLAotICAgICAgICBzaXplLnN0ZXB3aXNlLm1heF9oZWlnaHQpOwotCi0gICAgdyA9IE1BWCAoc2l6ZS5zdGVwd2lzZS5taW5fd2lkdGgsIDEpOwotICAgIGggPSBNQVggKHNpemUuc3RlcHdpc2UubWluX2hlaWdodCwgMSk7Ci0gICAgbWF4dyA9IE1JTiAoc2l6ZS5zdGVwd2lzZS5tYXhfd2lkdGgsIEdfTUFYSU5UKTsKLSAgICBtYXhoID0gTUlOIChzaXplLnN0ZXB3aXNlLm1heF9oZWlnaHQsIEdfTUFYSU5UKTsKLQotICAgIHRtcCA9Ci0gICAgICAgIGdzdF92NGwyX29iamVjdF9wcm9iZV9jYXBzX2Zvcl9mb3JtYXRfYW5kX3NpemUgKHY0bDJvYmplY3QsIHBpeGVsZm9ybWF0LAotICAgICAgICB3LCBoLCB0ZW1wbGF0ZSk7Ci0gICAgaWYgKHRtcCkgewotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHRtcCwgIndpZHRoIiwgR1NUX1RZUEVfSU5UX1JBTkdFLCAoZ2ludCkgdywKLSAgICAgICAgICAoZ2ludCkgbWF4dywgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgKGdpbnQpIGgsIChnaW50KSBtYXhoLAotICAgICAgICAgIE5VTEwpOwotCi0gICAgICAvKiBubyBwb2ludCB1c2luZyB0aGUgcmVzdWx0cyBsaXN0IGhlcmUsIHNpbmNlIHRoZXJlJ3Mgb25seSBvbmUgc3RydWN0ICovCi0gICAgICBnc3RfdjRsMl9vYmplY3RfdXBkYXRlX2FuZF9hcHBlbmQgKHY0bDJvYmplY3QsIHBpeGVsZm9ybWF0LCByZXQsIHRtcCk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGdvdG8gdW5rbm93bl90eXBlOwotICB9Ci0KLSAgLyogd2UgdXNlIGFuIGludGVybWVkaWFyeSBsaXN0IHRvIHN0b3JlIGFuZCB0aGVuIHNvcnQgdGhlIHJlc3VsdHMgb2YgdGhlCi0gICAqIHByb2JpbmcgYmVjYXVzZSB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3JkZXIgaW4gd2hpY2gKLSAgICogdGhlIGRyaXZlciB3aWxsIGdpdmUgdXMgdGhlIHNpemVzLCBidXQgd2Ugd2FudCB0aGUgZmluYWwgY2FwcyB0byBjb250YWluCi0gICAqIHRoZSByZXN1bHRzIHN0YXJ0aW5nIHdpdGggdGhlIGhpZ2hlc3QgcmVzb2x1dGlvbiBhbmQgaGF2aW5nIHRoZSBsb3dlc3QKLSAgICogcmVzb2x1dGlvbiBsYXN0LCBzaW5jZSBvcmRlciBpbiBjYXBzIG1hdHRlcnMgZm9yIHRoaW5ncyBsaWtlIGZpeGF0aW9uLiAqLwotICByZXN1bHRzID0gZ19saXN0X3NvcnQgKHJlc3VsdHMsIChHQ29tcGFyZUZ1bmMpIHNvcnRfYnlfZnJhbWVfc2l6ZSk7Ci0gIHdoaWxlIChyZXN1bHRzICE9IE5VTEwpIHsKLSAgICBnc3RfdjRsMl9vYmplY3RfdXBkYXRlX2FuZF9hcHBlbmQgKHY0bDJvYmplY3QsIHBpeGVsZm9ybWF0LCByZXQsCi0gICAgICAgIHJlc3VsdHMtPmRhdGEpOwotICAgIHJlc3VsdHMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKHJlc3VsdHMsIHJlc3VsdHMpOwotICB9Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChyZXQpKQotICAgIGdvdG8gZW51bV9mcmFtZXNpemVzX25vX3Jlc3VsdHM7Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUlMgKi8KLWVudW1fZnJhbWVzaXplc19mYWlsZWQ6Ci0gIHsKLSAgICAvKiBJIGRvbid0IHNlZSBob3cgdGhpcyBpcyBhY3R1YWxseSBhbiBlcnJvciAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICJGYWlsZWQgdG8gZW51bWVyYXRlIGZyYW1lIHNpemVzIGZvciBwaXhlbGZvcm1hdCAlIiBHU1RfRk9VUkNDX0ZPUk1BVAotICAgICAgICAiICglcykiLCBHU1RfRk9VUkNDX0FSR1MgKHBpeGVsZm9ybWF0KSwgZ19zdHJlcnJvciAoZXJybm8pKTsKLSAgICBnb3RvIGRlZmF1bHRfZnJhbWVfc2l6ZXM7Ci0gIH0KLWVudW1fZnJhbWVzaXplc19ub19yZXN1bHRzOgotICB7Ci0gICAgLyogaXQncyBwb3NzaWJsZSB0aGF0IFZJRElPQ19FTlVNX0ZSQU1FU0laRVMgaXMgZGVmaW5lZCBidXQgdGhlIGRyaXZlciBpbgotICAgICAqIHF1ZXN0aW9uIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydCBpdCB5ZXQgKi8KLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAiTm8gcmVzdWx0cyBmb3IgcGl4ZWxmb3JtYXQgJSIgR1NUX0ZPVVJDQ19GT1JNQVQKLSAgICAgICAgIiBlbnVtZXJhdGluZyBmcmFtZSBzaXplcywgdHJ5aW5nIGZhbGxiYWNrIiwKLSAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChwaXhlbGZvcm1hdCkpOwotICAgIGdvdG8gZGVmYXVsdF9mcmFtZV9zaXplczsKLSAgfQotdW5rbm93bl90eXBlOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAiVW5rbm93biBmcmFtZSBzaXplZW51bSB0eXBlIGZvciBwaXhlbGZvcm1hdCAlIiBHU1RfRk9VUkNDX0ZPUk1BVAotICAgICAgICAiOiAldSIsIEdTVF9GT1VSQ0NfQVJHUyAocGl4ZWxmb3JtYXQpLCBzaXplLnR5cGUpOwotICAgIGdvdG8gZGVmYXVsdF9mcmFtZV9zaXplczsKLSAgfQotCi1kZWZhdWx0X2ZyYW1lX3NpemVzOgotICB7Ci0gICAgZ2ludCBtaW5fdywgbWF4X3csIG1pbl9oLCBtYXhfaCwgZml4X251bSA9IDAsIGZpeF9kZW5vbSA9IDA7Ci0KLSAgICAvKiBUaGlzIGNvZGUgaXMgZm9yIExpbnV4IDwgMi42LjE5ICovCi0gICAgbWluX3cgPSBtaW5faCA9IDE7Ci0gICAgbWF4X3cgPSBtYXhfaCA9IEdTVF9WNEwyX01BWF9TSVpFOwotICAgIGlmICghZ3N0X3Y0bDJfb2JqZWN0X2dldF9uZWFyZXN0X3NpemUgKHY0bDJvYmplY3QsIHBpeGVsZm9ybWF0LCAmbWluX3csCi0gICAgICAgICAgICAmbWluX2gpKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICAgIkNvdWxkIG5vdCBwcm9iZSBtaW5pbXVtIGNhcHR1cmUgc2l6ZSBmb3IgcGl4ZWxmb3JtYXQgJSIKLSAgICAgICAgICBHU1RfRk9VUkNDX0ZPUk1BVCwgR1NUX0ZPVVJDQ19BUkdTIChwaXhlbGZvcm1hdCkpOwotICAgIH0KLSAgICBpZiAoIWdzdF92NGwyX29iamVjdF9nZXRfbmVhcmVzdF9zaXplICh2NGwyb2JqZWN0LCBwaXhlbGZvcm1hdCwgJm1heF93LAotICAgICAgICAgICAgJm1heF9oKSkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAgICJDb3VsZCBub3QgcHJvYmUgbWF4aW11bSBjYXB0dXJlIHNpemUgZm9yIHBpeGVsZm9ybWF0ICUiCi0gICAgICAgICAgR1NUX0ZPVVJDQ19GT1JNQVQsIEdTVF9GT1VSQ0NfQVJHUyAocGl4ZWxmb3JtYXQpKTsKLSAgICB9Ci0KLSAgICAvKiBTaW5jZSB3ZSBjYW4ndCBnZXQgZnJhbWVyYXRlIGRpcmVjdGx5LCB0cnkgdG8gdXNlIHRoZSBjdXJyZW50IG5vcm0gKi8KLSAgICBpZiAodjRsMm9iamVjdC0+dHZfbm9ybSAmJiB2NGwyb2JqZWN0LT5ub3JtcykgewotICAgICAgR0xpc3QgKm5vcm1zOwotICAgICAgR3N0VHVuZXJOb3JtICpub3JtID0gTlVMTDsKLSAgICAgIEdzdFR1bmVyTm9ybSAqY3VycmVudCA9Ci0gICAgICAgICAgZ3N0X3Y0bDJfdHVuZXJfZ2V0X25vcm1fYnlfc3RkX2lkICh2NGwyb2JqZWN0LCB2NGwyb2JqZWN0LT50dl9ub3JtKTsKLQotICAgICAgZm9yIChub3JtcyA9IHY0bDJvYmplY3QtPm5vcm1zOyBub3JtcyAhPSBOVUxMOyBub3JtcyA9IG5vcm1zLT5uZXh0KSB7Ci0gICAgICAgIG5vcm0gPSAoR3N0VHVuZXJOb3JtICopIG5vcm1zLT5kYXRhOwotICAgICAgICBpZiAoIXN0cmNtcCAobm9ybS0+bGFiZWwsIGN1cnJlbnQtPmxhYmVsKSkKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIC8qIElmIGl0J3MgcG9zc2libGUsIHNldCBmcmFtZXJhdGUgdG8gdGhhdCAoZGlzY3JldGUpIHZhbHVlICovCi0gICAgICBpZiAobm9ybSkgewotICAgICAgICBmaXhfbnVtID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKCZub3JtLT5mcmFtZXJhdGUpOwotICAgICAgICBmaXhfZGVub20gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICgmbm9ybS0+ZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0bXAgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKHRlbXBsYXRlKTsKLSAgICBpZiAoZml4X251bSkgewotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHRtcCwgImZyYW1lcmF0ZSIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBmaXhfbnVtLAotICAgICAgICAgIGZpeF9kZW5vbSwgTlVMTCk7Ci0gICAgfSBlbHNlIGlmICh2NGwyb2JqZWN0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotICAgICAgICB2NGwyb2JqZWN0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKLSAgICAgIC8qIGlmIG5vcm0gY2FuJ3QgYmUgdXNlZCwgY29weSB0aGUgdGVtcGxhdGUgZnJhbWVyYXRlICovCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAodG1wLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDAsIDEsCi0gICAgICAgICAgR19NQVhJTlQsIDEsIE5VTEwpOwotICAgIH0KLQotICAgIGlmIChtaW5fdyA9PSBtYXhfdykKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0ICh0bXAsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIG1heF93LCBOVUxMKTsKLSAgICBlbHNlCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAodG1wLCAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIG1pbl93LCBtYXhfdywgTlVMTCk7Ci0KLSAgICBpZiAobWluX2ggPT0gbWF4X2gpCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAodG1wLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgbWF4X2gsIE5VTEwpOwotICAgIGVsc2UKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0ICh0bXAsICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIG1pbl9oLCBtYXhfaCwgTlVMTCk7Ci0KLSAgICAvKiBXZSBjb3VsZCBjb25zaWRlciBzZXR0aW5nIGludGVybGFjZSBtb2RlIGZyb20gbWluIGFuZCBtYXguICovCi0gICAgZ3N0X3Y0bDJfb2JqZWN0X2FkZF9pbnRlcmxhY2VfbW9kZSAodjRsMm9iamVjdCwgdG1wLCBtYXhfdywgbWF4X2gsCi0gICAgICAgIHBpeGVsZm9ybWF0KTsKLSAgICBnc3RfdjRsMl9vYmplY3RfYWRkX2FzcGVjdF9yYXRpbyAodjRsMm9iamVjdCwgdG1wKTsKLSAgICAvKiBXZSBjb3VsZCBjb25zaWRlciB0byBjaGVjayBjb2xvcnNwYWNlIGZvciBtaW4gdG9vLCBpbiBjYXNlIGl0IGRlcGVuZHMgb24KLSAgICAgKiB0aGUgc2l6ZS4gQnV0IGluIHRoaXMgY2FzZSwgbWluIGFuZCBtYXggY291bGQgbm90IGJlIGVub3VnaCAqLwotICAgIGdzdF92NGwyX29iamVjdF9hZGRfY29sb3JzcGFjZSAodjRsMm9iamVjdCwgdG1wLCBtYXhfdywgbWF4X2gsIHBpeGVsZm9ybWF0KTsKLQotICAgIGdzdF92NGwyX29iamVjdF91cGRhdGVfYW5kX2FwcGVuZCAodjRsMm9iamVjdCwgcGl4ZWxmb3JtYXQsIHJldCwgdG1wKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X2dldF9uZWFyZXN0X3NpemUgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIGd1aW50MzIgcGl4ZWxmb3JtYXQsIGdpbnQgKiB3aWR0aCwgZ2ludCAqIGhlaWdodCkKLXsKLSAgc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0gIEdzdFZpZGVvSW50ZXJsYWNlTW9kZSBpbnRlcmxhY2VfbW9kZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAod2lkdGggIT0gTlVMTCwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoaGVpZ2h0ICE9IE5VTEwsIEZBTFNFKTsKLQotICBHU1RfTE9HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICJnZXR0aW5nIG5lYXJlc3Qgc2l6ZSB0byAlZHglZCB3aXRoIGZvcm1hdCAlIiBHU1RfRk9VUkNDX0ZPUk1BVCwKLSAgICAgICp3aWR0aCwgKmhlaWdodCwgR1NUX0ZPVVJDQ19BUkdTIChwaXhlbGZvcm1hdCkpOwotCi0gIG1lbXNldCAoJmZtdCwgMCwgc2l6ZW9mIChzdHJ1Y3QgdjRsMl9mb3JtYXQpKTsKLQotICAvKiBnZXQgc2l6ZSBkZWxpbWl0ZXJzICovCi0gIG1lbXNldCAoJmZtdCwgMCwgc2l6ZW9mIChmbXQpKTsKLSAgZm10LnR5cGUgPSB2NGwyb2JqZWN0LT50eXBlOwotICBmbXQuZm10LnBpeC53aWR0aCA9ICp3aWR0aDsKLSAgZm10LmZtdC5waXguaGVpZ2h0ID0gKmhlaWdodDsKLSAgZm10LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBwaXhlbGZvcm1hdDsKLSAgZm10LmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0FOWTsKLQotICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X3RyeV9mbXQgKHY0bDJvYmplY3QsICZmbXQpIDwgMCkKLSAgICBnb3RvIGVycm9yOwotCi0gIEdTVF9MT0dfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgImdvdCBuZWFyZXN0IHNpemUgJWR4JWQiLCBmbXQuZm10LnBpeC53aWR0aCwgZm10LmZtdC5waXguaGVpZ2h0KTsKLQotICAqd2lkdGggPSBmbXQuZm10LnBpeC53aWR0aDsKLSAgKmhlaWdodCA9IGZtdC5mbXQucGl4LmhlaWdodDsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9nZXRfaW50ZXJsYWNlX21vZGUgKGZtdC5mbXQucGl4LmZpZWxkLCAmaW50ZXJsYWNlX21vZGUpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAiVW5zdXBwb3J0ZWQgZmllbGQgdHlwZSBmb3IgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIkAldXgldTogJXUiLAotICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHBpeGVsZm9ybWF0KSwgKndpZHRoLCAqaGVpZ2h0LCBmbXQuZm10LnBpeC5maWVsZCk7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotCi0gIHJldCA9IFRSVUU7Ci0KLWVycm9yOgotICBpZiAoIXJldCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIlVuYWJsZSB0byB0cnkgZm9ybWF0OiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9zZXR1cF9wb29sIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFY0bDJJT01vZGUgbW9kZTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiaW5pdGlhbGl6aW5nIHRoZSAlcyBzeXN0ZW0iLAotICAgICAgVjRMMl9UWVBFX0lTX09VVFBVVCAodjRsMm9iamVjdC0+dHlwZSkgPyAib3V0cHV0IiA6ICJjYXB0dXJlIik7Ci0KLSAgR1NUX1Y0TDJfQ0hFQ0tfT1BFTiAodjRsMm9iamVjdCk7Ci0gIEdTVF9WNEwyX0NIRUNLX05PVF9BQ1RJVkUgKHY0bDJvYmplY3QpOwotCi0gIC8qIGZpbmQgdHJhbnNwb3J0ICovCi0gIG1vZGUgPSB2NGwyb2JqZWN0LT5yZXFfbW9kZTsKLQotICBpZiAodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJiBWNEwyX0NBUF9SRUFEV1JJVEUpIHsKLSAgICBpZiAodjRsMm9iamVjdC0+cmVxX21vZGUgPT0gR1NUX1Y0TDJfSU9fQVVUTykKLSAgICAgIG1vZGUgPSBHU1RfVjRMMl9JT19SVzsKLSAgfSBlbHNlIGlmICh2NGwyb2JqZWN0LT5yZXFfbW9kZSA9PSBHU1RfVjRMMl9JT19SVykKLSAgICBnb3RvIG1ldGhvZF9ub3Rfc3VwcG9ydGVkOwotCi0gIGlmICh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmIFY0TDJfQ0FQX1NUUkVBTUlORykgewotICAgIGlmICh2NGwyb2JqZWN0LT5yZXFfbW9kZSA9PSBHU1RfVjRMMl9JT19BVVRPKQotICAgICAgbW9kZSA9IEdTVF9WNEwyX0lPX01NQVA7Ci0gIH0gZWxzZSBpZiAodjRsMm9iamVjdC0+cmVxX21vZGUgPT0gR1NUX1Y0TDJfSU9fTU1BUCkKLSAgICBnb3RvIG1ldGhvZF9ub3Rfc3VwcG9ydGVkOwotCi0gIC8qIGlmIHN0aWxsIG5vIHRyYW5zcG9ydCBzZWxlY3RlZCwgZXJyb3Igb3V0ICovCi0gIGlmIChtb2RlID09IEdTVF9WNEwyX0lPX0FVVE8pCi0gICAgZ290byBub19zdXBwb3J0ZWRfY2FwdHVyZV9tZXRob2Q7Ci0KLSAgR1NUX0lORk9fT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiYWNjZXNzaW5nIGJ1ZmZlcnMgdmlhIG1vZGUgJWQiLCBtb2RlKTsKLSAgdjRsMm9iamVjdC0+bW9kZSA9IG1vZGU7Ci0KLSAgLyogSWYgbWluX2J1ZmZlcnMgaXMgbm90IHNldCwgdGhlIGRyaXZlciBlaXRoZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29udHJvbCBvcgotICAgICBpdCBoYXMgbm90IGJlZW4gYXNrZWQgeWV0IHZpYSBwcm9wb3NlX2FsbG9jYXRpb24vZGVjaWRlX2FsbG9jYXRpb24uICovCi0gIGlmICghdjRsMm9iamVjdC0+bWluX2J1ZmZlcnMpCi0gICAgZ3N0X3Y0bDJfZ2V0X2RyaXZlcl9taW5fYnVmZmVycyAodjRsMm9iamVjdCk7Ci0KLSAgLyogTWFwIHRoZSBidWZmZXJzICovCi0gIEdTVF9MT0dfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiaW5pdGlhdGluZyBidWZmZXIgcG9vbCIpOwotCi0gIGlmICghKHY0bDJvYmplY3QtPnBvb2wgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9uZXcgKHY0bDJvYmplY3QsIGNhcHMpKSkKLSAgICBnb3RvIGJ1ZmZlcl9wb29sX25ld19mYWlsZWQ7Ci0KLSAgR1NUX1Y0TDJfU0VUX0FDVElWRSAodjRsMm9iamVjdCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1idWZmZXJfcG9vbF9uZXdfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBSRUFELAotICAgICAgICAoXygiQ291bGQgbm90IG1hcCBidWZmZXJzIGZyb20gZGV2aWNlICclcyciKSwKLSAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgKCJGYWlsZWQgdG8gY3JlYXRlIGJ1ZmZlciBwb29sOiAlcyIsIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbWV0aG9kX25vdF9zdXBwb3J0ZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFJFQUQsCi0gICAgICAgIChfKCJUaGUgZHJpdmVyIG9mIGRldmljZSAnJXMnIGRvZXMgbm90IHN1cHBvcnQgdGhlIElPIG1ldGhvZCAlZCIpLAotICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYsIG1vZGUpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fc3VwcG9ydGVkX2NhcHR1cmVfbWV0aG9kOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBSRUFELAotICAgICAgICAoXygiVGhlIGRyaXZlciBvZiBkZXZpY2UgJyVzJyBkb2VzIG5vdCBzdXBwb3J0IGFueSBrbm93biBJTyAiCi0gICAgICAgICAgICAgICAgIm1ldGhvZC4iKSwgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCAoTlVMTCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfb2JqZWN0X3NldF9zdHJpZGUgKEdzdFZpZGVvSW5mbyAqIGluZm8sIEdzdFZpZGVvQWxpZ25tZW50ICogYWxpZ24sCi0gICAgZ2ludCBwbGFuZSwgZ2ludCBzdHJpZGUpCi17Ci0gIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqZmluZm8gPSBpbmZvLT5maW5mbzsKLQotICBpZiAoR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0lTX1RJTEVEIChmaW5mbykpIHsKLSAgICBnaW50IHhfdGlsZXMsIHlfdGlsZXMsIHdzLCBocywgdGlsZV9oZWlnaHQsIHBhZGRlZF9oZWlnaHQ7Ci0KLQotICAgIHdzID0gR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1RJTEVfV1MgKGZpbmZvKTsKLSAgICBocyA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19USUxFX0hTIChmaW5mbyk7Ci0gICAgdGlsZV9oZWlnaHQgPSAxIDw8IGhzOwotCi0gICAgcGFkZGVkX2hlaWdodCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGZpbmZvLCBwbGFuZSwKLSAgICAgICAgaW5mby0+aGVpZ2h0ICsgYWxpZ24tPnBhZGRpbmdfdG9wICsgYWxpZ24tPnBhZGRpbmdfYm90dG9tKTsKLSAgICBwYWRkZWRfaGVpZ2h0ID0gR1NUX1JPVU5EX1VQX04gKHBhZGRlZF9oZWlnaHQsIHRpbGVfaGVpZ2h0KTsKLQotICAgIHhfdGlsZXMgPSBzdHJpZGUgPj4gd3M7Ci0gICAgeV90aWxlcyA9IHBhZGRlZF9oZWlnaHQgPj4gaHM7Ci0gICAgaW5mby0+c3RyaWRlW3BsYW5lXSA9IEdTVF9WSURFT19USUxFX01BS0VfU1RSSURFICh4X3RpbGVzLCB5X3RpbGVzKTsKLSAgfSBlbHNlIHsKLSAgICBpbmZvLT5zdHJpZGVbcGxhbmVdID0gc3RyaWRlOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9vYmplY3RfZXh0cmFwb2xhdGVfaW5mbyAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgR3N0VmlkZW9JbmZvICogaW5mbywgR3N0VmlkZW9BbGlnbm1lbnQgKiBhbGlnbiwgZ2ludCBzdHJpZGUpCi17Ci0gIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqZmluZm8gPSBpbmZvLT5maW5mbzsKLSAgZ2ludCBpLCBlc3RyaWRlLCBwYWRkZWRfaGVpZ2h0OwotICBnc2l6ZSBvZmZzID0gMDsKLQotICBnX3JldHVybl9pZl9mYWlsICh2NGwyb2JqZWN0LT5uX3Y0bDJfcGxhbmVzID09IDEpOwotCi0gIHBhZGRlZF9oZWlnaHQgPSBpbmZvLT5oZWlnaHQgKyBhbGlnbi0+cGFkZGluZ190b3AgKyBhbGlnbi0+cGFkZGluZ19ib3R0b207Ci0KLSAgZm9yIChpID0gMDsgaSA8IGZpbmZvLT5uX3BsYW5lczsgaSsrKSB7Ci0gICAgZXN0cmlkZSA9IGdzdF92NGwyX29iamVjdF9leHRyYXBvbGF0ZV9zdHJpZGUgKGZpbmZvLCBpLCBzdHJpZGUpOwotCi0gICAgZ3N0X3Y0bDJfb2JqZWN0X3NldF9zdHJpZGUgKGluZm8sIGFsaWduLCBpLCBlc3RyaWRlKTsKLQotICAgIGluZm8tPm9mZnNldFtpXSA9IG9mZnM7Ci0gICAgb2ZmcyArPSBlc3RyaWRlICoKLSAgICAgICAgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX0hFSUdIVCAoZmluZm8sIGksIHBhZGRlZF9oZWlnaHQpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIkV4dHJhcG9sYXRlZCBmb3IgcGxhbmUgJWQgd2l0aCBiYXNlIHN0cmlkZSAlZDogIgotICAgICAgICAic3RyaWRlICVkLCBvZmZzZXQgJSIgR19HU0laRV9GT1JNQVQsIGksIHN0cmlkZSwgaW5mby0+c3RyaWRlW2ldLAotICAgICAgICBpbmZvLT5vZmZzZXRbaV0pOwotICB9Ci0KLSAgLyogVXBkYXRlIHRoZSBpbWFnZSBzaXplIGFjY29yZGluZyB0aGUgYW1vdW50IG9mIGRhdGEgd2UgYXJlIGdvaW5nIHRvCi0gICAqIHJlYWQvd3JpdGUuIFRoaXMgd29ya2Fyb3VuZCBidWdzIGluIGRyaXZlciB3aGVyZSB0aGUgc2l6ZWltYWdlIHByb3ZpZGVkCi0gICAqIGJ5IFRSWS9TX0ZNVCByZXByZXNlbnQgdGhlIGJ1ZmZlciBsZW5ndGggKG1heGltdW0gc2l6ZSkgcmF0aGVyIHRoZW4gdGhlIGV4cGVjdGVkCi0gICAqIGJ5dGVzdXNlZCAoYnVmZmVyIHNpemUpLiAqLwotICBpZiAob2ZmcyA8IGluZm8tPnNpemUpCi0gICAgaW5mby0+c2l6ZSA9IG9mZnM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl9vYmplY3Rfc2F2ZV9mb3JtYXQgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGRlc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0LAotICAgIEdzdFZpZGVvSW5mbyAqIGluZm8sIEdzdFZpZGVvQWxpZ25tZW50ICogYWxpZ24pCi17Ci0gIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqZmluZm8gPSBpbmZvLT5maW5mbzsKLSAgZ2Jvb2xlYW4gc3RhbmRhcmRfc3RyaWRlID0gVFJVRTsKLSAgZ2ludCBzdHJpZGUsIHBhZGRlZF93aWR0aCwgcGFkZGVkX2hlaWdodCwgaTsKLQotICBpZiAoR1NUX1ZJREVPX0lORk9fRk9STUFUIChpbmZvKSA9PSBHU1RfVklERU9fRk9STUFUX0VOQ09ERUQpIHsKLSAgICB2NGwyb2JqZWN0LT5uX3Y0bDJfcGxhbmVzID0gMTsKLSAgICBpbmZvLT5zaXplID0gZm9ybWF0LT5mbXQucGl4LnNpemVpbWFnZTsKLSAgICBnb3RvIHN0b3JlX2luZm87Ci0gIH0KLQotICAvKiBhZGp1c3QgcmlnaHQgcGFkZGluZyAqLwotICBpZiAoVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSICh2NGwyb2JqZWN0LT50eXBlKSkKLSAgICBzdHJpZGUgPSBmb3JtYXQtPmZtdC5waXhfbXAucGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZTsKLSAgZWxzZQotICAgIHN0cmlkZSA9IGZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7Ci0KLSAgcGFkZGVkX3dpZHRoID0gc3RyaWRlIC8gR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1BTVFJJREUgKGZpbmZvLCAwKTsKLQotICBpZiAocGFkZGVkX3dpZHRoIDwgZm9ybWF0LT5mbXQucGl4LndpZHRoKQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIkRyaXZlciBidWcgZGV0ZWN0ZWQsIHN0cmlkZSBpcyB0b28gc21hbGwgZm9yIHRoZSB3aWR0aCIpOwotCi0gIGFsaWduLT5wYWRkaW5nX3JpZ2h0ID0gcGFkZGVkX3dpZHRoIC0gaW5mby0+d2lkdGggLSBhbGlnbi0+cGFkZGluZ19sZWZ0OwotCi0gIC8qIGFkanVzdCBib3R0b20gcGFkZGluZyAqLwotICBwYWRkZWRfaGVpZ2h0ID0gZm9ybWF0LT5mbXQucGl4LmhlaWdodDsKLQotICBpZiAoR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0lTX1RJTEVEIChmaW5mbykpIHsKLSAgICBndWludCBocywgdGlsZV9oZWlnaHQ7Ci0KLSAgICBocyA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19USUxFX0hTIChmaW5mbyk7Ci0gICAgdGlsZV9oZWlnaHQgPSAxIDw8IGhzOwotCi0gICAgcGFkZGVkX2hlaWdodCA9IEdTVF9ST1VORF9VUF9OIChwYWRkZWRfaGVpZ2h0LCB0aWxlX2hlaWdodCk7Ci0gIH0KLQotICBhbGlnbi0+cGFkZGluZ19ib3R0b20gPSBwYWRkZWRfaGVpZ2h0IC0gaW5mby0+aGVpZ2h0IC0gYWxpZ24tPnBhZGRpbmdfdG9wOwotCi0gIC8qIHNldHVwIHRoZSBzdHJpZGVzIGFuZCBvZmZzZXQgKi8KLSAgaWYgKFY0TDJfVFlQRV9JU19NVUxUSVBMQU5BUiAodjRsMm9iamVjdC0+dHlwZSkpIHsKLSAgICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X21wID0gJmZvcm1hdC0+Zm10LnBpeF9tcDsKLQotICAgIC8qIGZpZ3VyZSBvdXQgdGhlIGZyYW1lIGxheW91dCAqLwotICAgIHY0bDJvYmplY3QtPm5fdjRsMl9wbGFuZXMgPSBNQVggKDEsIHBpeF9tcC0+bnVtX3BsYW5lcyk7Ci0gICAgaW5mby0+c2l6ZSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IHY0bDJvYmplY3QtPm5fdjRsMl9wbGFuZXM7IGkrKykgewotICAgICAgc3RyaWRlID0gcGl4X21wLT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lOwotCi0gICAgICBpZiAoaW5mby0+c3RyaWRlW2ldICE9IHN0cmlkZSkKLSAgICAgICAgc3RhbmRhcmRfc3RyaWRlID0gRkFMU0U7Ci0KLSAgICAgIGdzdF92NGwyX29iamVjdF9zZXRfc3RyaWRlIChpbmZvLCBhbGlnbiwgaSwgc3RyaWRlKTsKLSAgICAgIGluZm8tPm9mZnNldFtpXSA9IGluZm8tPnNpemU7Ci0gICAgICBpbmZvLT5zaXplICs9IHBpeF9tcC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZTsKLSAgICB9Ci0KLSAgICAvKiBFeHRyYXBvbGF0ZSBzdHJpZGUgaWYgcGxhbmFyIGZvcm1hdCBhcmUgYmVpbmcgc2V0IGluIDEgdjRsMiBwbGFuZSAqLwotICAgIGlmICh2NGwyb2JqZWN0LT5uX3Y0bDJfcGxhbmVzIDwgZmluZm8tPm5fcGxhbmVzKSB7Ci0gICAgICBzdHJpZGUgPSBmb3JtYXQtPmZtdC5waXhfbXAucGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZTsKLSAgICAgIGdzdF92NGwyX29iamVjdF9leHRyYXBvbGF0ZV9pbmZvICh2NGwyb2JqZWN0LCBpbmZvLCBhbGlnbiwgc3RyaWRlKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgLyogb25seSBvbmUgcGxhbmUgaW4gbm9uLU1QTEFORSBtb2RlICovCi0gICAgdjRsMm9iamVjdC0+bl92NGwyX3BsYW5lcyA9IDE7Ci0gICAgaW5mby0+c2l6ZSA9IGZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2U7Ci0gICAgc3RyaWRlID0gZm9ybWF0LT5mbXQucGl4LmJ5dGVzcGVybGluZTsKLQotICAgIGlmIChpbmZvLT5zdHJpZGVbMF0gIT0gc3RyaWRlKQotICAgICAgc3RhbmRhcmRfc3RyaWRlID0gRkFMU0U7Ci0KLSAgICBnc3RfdjRsMl9vYmplY3RfZXh0cmFwb2xhdGVfaW5mbyAodjRsMm9iamVjdCwgaW5mbywgYWxpZ24sIHN0cmlkZSk7Ci0gIH0KLQotICAvKiBhZGp1c3QgdGhlIG9mZnNldCB0byB0YWtlIGludG8gYWNjb3VudCBsZWZ0IGFuZCB0b3AgKi8KLSAgaWYgKEdTVF9WSURFT19GT1JNQVRfSU5GT19JU19USUxFRCAoZmluZm8pKSB7Ci0gICAgaWYgKChhbGlnbi0+cGFkZGluZ19sZWZ0ICsgYWxpZ24tPnBhZGRpbmdfdG9wKSA+IDApCi0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICAgIkxlZnQgYW5kIHRvcCBwYWRkaW5nIGlzIG5vdCBwZXJtaXR0ZWQgZm9yIHRpbGVkIGZvcm1hdHMiKTsKLSAgfSBlbHNlIHsKLSAgICBmb3IgKGkgPSAwOyBpIDwgZmluZm8tPm5fcGxhbmVzOyBpKyspIHsKLSAgICAgIGdpbnQgdmVkZ2UsIGhlZGdlOwotCi0gICAgICAvKiBGSVhNRSB3ZSBhc3N1bWUgcGxhbmUgYXMgY29tcG9uZW50IGFzIHRoaXMgaXMgdHJ1ZSBmb3IgYWxsIHN1cHBvcnRlZAotICAgICAgICogZm9ybWF0IHdlIHN1cHBvcnQuICovCi0KLSAgICAgIGhlZGdlID0gR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1NDQUxFX1dJRFRIIChmaW5mbywgaSwgYWxpZ24tPnBhZGRpbmdfbGVmdCk7Ci0gICAgICB2ZWRnZSA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9IRUlHSFQgKGZpbmZvLCBpLCBhbGlnbi0+cGFkZGluZ190b3ApOwotCi0gICAgICBpbmZvLT5vZmZzZXRbaV0gKz0gKHZlZGdlICogaW5mby0+c3RyaWRlW2ldKSArCi0gICAgICAgICAgKGhlZGdlICogR1NUX1ZJREVPX0lORk9fQ09NUF9QU1RSSURFIChpbmZvLCBpKSk7Ci0gICAgfQotICB9Ci0KLXN0b3JlX2luZm86Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJHb3Qgc2l6ZWltYWdlICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgaW5mby0+c2l6ZSk7Ci0KLSAgLyogdG8gYXZvaWQgY29waWVzIHdlIG5lZWQgdmlkZW8gbWV0YSBpZiB0b3Agb3IgbGVmdCBwYWRkaW5nICovCi0gIHY0bDJvYmplY3QtPm5lZWRfdmlkZW9fbWV0YSA9Ci0gICAgICAoKGFsaWduLT5wYWRkaW5nX3RvcCArIGFsaWduLT5wYWRkaW5nX2xlZnQpICE9IDApOwotCi0gIC8qIC4uLiBvciBpZiBzdHJpZGUgaXMgbm9uICJzdGFuZGFyZCIgKi8KLSAgaWYgKCFzdGFuZGFyZF9zdHJpZGUpCi0gICAgdjRsMm9iamVjdC0+bmVlZF92aWRlb19tZXRhID0gVFJVRTsKLQotICAvKiAuLi4gb3IgYWxzbyB2aWRlbyBtZXRhIGlmIHdlIHVzZSBtdWx0aXBsZSwgbm9uLWNvbnRpZ3VvdXMsIHBsYW5lcyAqLwotICBpZiAodjRsMm9iamVjdC0+bl92NGwyX3BsYW5lcyA+IDEpCi0gICAgdjRsMm9iamVjdC0+bmVlZF92aWRlb19tZXRhID0gVFJVRTsKLQotICB2NGwyb2JqZWN0LT5pbmZvID0gKmluZm87Ci0gIHY0bDJvYmplY3QtPmFsaWduID0gKmFsaWduOwotICB2NGwyb2JqZWN0LT5mb3JtYXQgPSAqZm9ybWF0OwotICB2NGwyb2JqZWN0LT5mbXRkZXNjID0gZm10ZGVzYzsKLQotICAvKiBpZiB3ZSBoYXZlIGEgZnJhbWVyYXRlIHByZS1jYWxjdWxhdGUgZHVyYXRpb24gKi8KLSAgaWYgKGluZm8tPmZwc19uID4gMCAmJiBpbmZvLT5mcHNfZCA+IDApIHsKLSAgICB2NGwyb2JqZWN0LT5kdXJhdGlvbiA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKEdTVF9TRUNPTkQsIGluZm8tPmZwc19kLAotICAgICAgICBpbmZvLT5mcHNfbik7Ci0gIH0gZWxzZSB7Ci0gICAgdjRsMm9iamVjdC0+ZHVyYXRpb24gPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICB9Ci19Ci0KLWdpbnQKLWdzdF92NGwyX29iamVjdF9leHRyYXBvbGF0ZV9zdHJpZGUgKGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqIGZpbmZvLAotICAgIGdpbnQgcGxhbmUsIGdpbnQgc3RyaWRlKQotewotICBnaW50IGVzdHJpZGU7Ci0KLSAgc3dpdGNoIChmaW5mby0+Zm9ybWF0KSB7Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMTI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMTJfNjRaMzI6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMjE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMTY6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WNjE6Ci0gICAgY2FzZSBHU1RfVklERU9fRk9STUFUX05WMjQ6Ci0gICAgICBlc3RyaWRlID0gKHBsYW5lID09IDAgPyAxIDogMikgKgotICAgICAgICAgIEdTVF9WSURFT19GT1JNQVRfSU5GT19TQ0FMRV9XSURUSCAoZmluZm8sIHBsYW5lLCBzdHJpZGUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGVzdHJpZGUgPSBHU1RfVklERU9fRk9STUFUX0lORk9fU0NBTEVfV0lEVEggKGZpbmZvLCBwbGFuZSwgc3RyaWRlKTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIGVzdHJpZGU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X3NldF9mb3JtYXRfZnVsbCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdENhcHMgKiBjYXBzLAotICAgIGdib29sZWFuIHRyeV9vbmx5LCBHc3RWNGwyRXJyb3IgKiBlcnJvcikKLXsKLSAgZ2ludCBmZCA9IHY0bDJvYmplY3QtPnZpZGVvX2ZkOwotICBzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHN0cmVhbXBhcm07Ci0gIGVudW0gdjRsMl9maWVsZCBmaWVsZDsKLSAgZ3VpbnQzMiBwaXhlbGZvcm1hdDsKLSAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZGVzYzsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0gIEdzdFZpZGVvQWxpZ25tZW50IGFsaWduOwotICBnaW50IHdpZHRoLCBoZWlnaHQsIGZwc19uLCBmcHNfZDsKLSAgZ2ludCBuX3Y0bF9wbGFuZXM7Ci0gIGdpbnQgaSA9IDA7Ci0gIGdib29sZWFuIGlzX21wbGFuZTsKLSAgZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3JzcGFjZSA9IDA7Ci0gIGVudW0gdjRsMl9xdWFudGl6YXRpb24gcmFuZ2UgPSAwOwotICBlbnVtIHY0bDJfeWNiY3JfZW5jb2RpbmcgbWF0cml4ID0gMDsKLSAgZW51bSB2NGwyX3hmZXJfZnVuYyB0cmFuc2ZlciA9IDA7Ci0KLSAgR1NUX1Y0TDJfQ0hFQ0tfT1BFTiAodjRsMm9iamVjdCk7Ci0gIGlmICghdHJ5X29ubHkpCi0gICAgR1NUX1Y0TDJfQ0hFQ0tfTk9UX0FDVElWRSAodjRsMm9iamVjdCk7Ci0KLSAgaXNfbXBsYW5lID0gVjRMMl9UWVBFX0lTX01VTFRJUExBTkFSICh2NGwyb2JqZWN0LT50eXBlKTsKLQotICBnc3RfdmlkZW9faW5mb19pbml0ICgmaW5mbyk7Ci0gIGdzdF92aWRlb19hbGlnbm1lbnRfcmVzZXQgKCZhbGlnbik7Ci0KLSAgaWYgKCFnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHNfaW5mbyAodjRsMm9iamVjdCwgY2FwcywgJmZtdGRlc2MsICZpbmZvKSkKLSAgICBnb3RvIGludmFsaWRfY2FwczsKLQotICBwaXhlbGZvcm1hdCA9IGZtdGRlc2MtPnBpeGVsZm9ybWF0OwotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIICgmaW5mbyk7Ci0gIGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCAoJmluZm8pOwotICBmcHNfbiA9IEdTVF9WSURFT19JTkZPX0ZQU19OICgmaW5mbyk7Ci0gIGZwc19kID0gR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZpbmZvKTsKLQotICAvKiBpZiBlbmNvZGVkIGZvcm1hdCAoR1NUX1ZJREVPX0lORk9fTl9QTEFORVMgcmV0dXJuIDApCi0gICAqIG9yIGlmIGNvbnRpZ3VvdXMgaXMgcHJlZmVyZWQgKi8KLSAgbl92NGxfcGxhbmVzID0gR1NUX1ZJREVPX0lORk9fTl9QTEFORVMgKCZpbmZvKTsKLSAgaWYgKCFuX3Y0bF9wbGFuZXMgfHwgIXY0bDJvYmplY3QtPnByZWZlcmVkX25vbl9jb250aWd1b3VzKQotICAgIG5fdjRsX3BsYW5lcyA9IDE7Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0lTX0lOVEVSTEFDRUQgKCZpbmZvKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJpbnRlcmxhY2VkIHZpZGVvIik7Ci0gICAgLyogaWRlYWxseSB3ZSB3b3VsZCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdHlwZXMgb2YgaW50ZXJsYWNlZCB2aWRlbwotICAgICAqIGJ1dCB0aGVyZSBpcyBub3Qgc3VmZmljaWVudCBpbmZvcm1hdGlvbiBpbiB0aGUgY2Fwcy4uCi0gICAgICovCi0gICAgZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInByb2dyZXNzaXZlIHZpZGVvIik7Ci0gICAgZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0gIH0KLQotICBpZiAoVjRMMl9UWVBFX0lTX09VVFBVVCAodjRsMm9iamVjdC0+dHlwZSkpIHsKLSAgICAvKiBXZSBmaXJzdCBwaWNrIHRoIG1haW4gY29sb3JzcGFjZSBmcm9tIHRoZSBwcmltYXJpZXMgKi8KLSAgICBzd2l0Y2ggKGluZm8uY29sb3JpbWV0cnkucHJpbWFyaWVzKSB7Ci0gICAgICBjYXNlIEdTVF9WSURFT19DT0xPUl9QUklNQVJJRVNfQlQ3MDk6Ci0gICAgICAgIC8qIFRoZXJlIGlzIHR3byBjb2xvcnNwYWNlcyB1c2luZyB0aGVzZSBwcmltYXJpZXMsIHVzZSB0aGUgcmFuZ2UgdG8KLSAgICAgICAgICogZGlmZmVyZW50aWF0ZSAqLwotICAgICAgICBpZiAoaW5mby5jb2xvcmltZXRyeS5yYW5nZSA9PSBHU1RfVklERU9fQ09MT1JfUkFOR0VfMTZfMjM1KQotICAgICAgICAgIGNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5OwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19CVDQ3ME06Ci0gICAgICAgIGNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19CVDQ3MEJHOgotICAgICAgICBjb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkc7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX1NNUFRFMTcwTToKLSAgICAgICAgY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fQ09MT1JfUFJJTUFSSUVTX1NNUFRFMjQwTToKLSAgICAgICAgY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTI0ME07Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdTVF9WSURFT19DT0xPUl9QUklNQVJJRVNfRklMTToKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0NPTE9SX1BSSU1BUklFU19VTktOT1dOOgotICAgICAgICAvKiBXZSBkb24ndCBrbm93LCB3ZSB3aWxsIGd1ZXNzICovCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAgICAgICAiVW5rbm93biBjb2xvcmltZXRyeSBwcmltYXJpZXMgJWQiLCBpbmZvLmNvbG9yaW1ldHJ5LnByaW1hcmllcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby5jb2xvcmltZXRyeS5yYW5nZSkgewotICAgICAgY2FzZSBHU1RfVklERU9fQ09MT1JfUkFOR0VfMF8yNTU6Ci0gICAgICAgIHJhbmdlID0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19DT0xPUl9SQU5HRV8xNl8yMzU6Ci0gICAgICAgIHJhbmdlID0gVjRMMl9RVUFOVElaQVRJT05fTElNX1JBTkdFOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0NPTE9SX1JBTkdFX1VOS05PV046Ci0gICAgICAgIC8qIFdlIGxldCB0aGUgZHJpdmVyIHBpY2sgYSBkZWZhdWx0IG9uZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgICAgICJVbmtub3duIGNvbG9yaW1ldHJ5IHJhbmdlICVkIiwgaW5mby5jb2xvcmltZXRyeS5yYW5nZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby5jb2xvcmltZXRyeS5tYXRyaXgpIHsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9SR0I6Ci0gICAgICAgIC8qIFVuc3BlY2lmaWVkLCBsZWF2ZSB0byBkZWZhdWx0ICovCi0gICAgICAgIGJyZWFrOwotICAgICAgICAvKiBGQ0MgaXMgYWJvdXQgdGhlIHNhbWUgYXMgQlQ2MDEgd2l0aCBsZXNzIGRpZ2l0ICovCi0gICAgICBjYXNlIEdTVF9WSURFT19DT0xPUl9NQVRSSVhfRkNDOgotICAgICAgY2FzZSBHU1RfVklERU9fQ09MT1JfTUFUUklYX0JUNjAxOgotICAgICAgICBtYXRyaXggPSBWNEwyX1lDQkNSX0VOQ182MDE7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fQ09MT1JfTUFUUklYX0JUNzA5OgotICAgICAgICBtYXRyaXggPSBWNEwyX1lDQkNSX0VOQ183MDk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHU1RfVklERU9fQ09MT1JfTUFUUklYX1NNUFRFMjQwTToKLSAgICAgICAgbWF0cml4ID0gVjRMMl9ZQ0JDUl9FTkNfU01QVEUyNDBNOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX0NPTE9SX01BVFJJWF9CVDIwMjA6Ci0gICAgICAgIG1hdHJpeCA9IFY0TDJfWUNCQ1JfRU5DX0JUMjAyMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19DT0xPUl9NQVRSSVhfVU5LTk9XTjoKLSAgICAgICAgLyogV2UgbGV0IHRoZSBkcml2ZXIgcGljayBhIGRlZmF1bHQgb25lICovCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAgICAgIlVua25vd24gY29sb3JpbWV0cnkgbWF0cml4ICVkIiwgaW5mby5jb2xvcmltZXRyeS5tYXRyaXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGluZm8uY29sb3JpbWV0cnkudHJhbnNmZXIpIHsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX1RSQU5TRkVSX0dBTU1BMTg6Ci0gICAgICBjYXNlIEdTVF9WSURFT19UUkFOU0ZFUl9HQU1NQTIwOgotICAgICAgY2FzZSBHU1RfVklERU9fVFJBTlNGRVJfR0FNTUEyMjoKLSAgICAgIGNhc2UgR1NUX1ZJREVPX1RSQU5TRkVSX0dBTU1BMjg6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgICAgICJHQU1NQSAxOCwgMjAsIDIyLCAyOCB0cmFuc2ZlciBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAgICAgY2FzZSBHU1RfVklERU9fVFJBTlNGRVJfR0FNTUExMDoKLSAgICAgICAgdHJhbnNmZXIgPSBWNEwyX1hGRVJfRlVOQ19OT05FOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX1RSQU5TRkVSX0JUNzA5OgotICAgICAgICB0cmFuc2ZlciA9IFY0TDJfWEZFUl9GVU5DXzcwOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19UUkFOU0ZFUl9TTVBURTI0ME06Ci0gICAgICAgIHRyYW5zZmVyID0gVjRMMl9YRkVSX0ZVTkNfU01QVEUyNDBNOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX1RSQU5TRkVSX1NSR0I6Ci0gICAgICAgIHRyYW5zZmVyID0gVjRMMl9YRkVSX0ZVTkNfU1JHQjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdTVF9WSURFT19UUkFOU0ZFUl9MT0cxMDA6Ci0gICAgICBjYXNlIEdTVF9WSURFT19UUkFOU0ZFUl9MT0czMTY6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgICAgICJMT0cgMTAwLCAzMTYgdHJhbnNmZXIgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgLyogRklYTUUgTm8ga25vd24gc2Vuc2libGUgZGVmYXVsdCwgbWF5YmUgQWRvYmVSR0IgPyAqLwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR1NUX1ZJREVPX1RSQU5TRkVSX1VOS05PV046Ci0gICAgICAgIC8qIFdlIGxldCB0aGUgZHJpdmVyIHBpY2sgYSBkZWZhdWx0IG9uZSAqLwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgICAgICJVbmtub3duIGNvbG9yaW1ldHJ5IHRyYW5mZXIgJWQiLCBpbmZvLmNvbG9yaW1ldHJ5LnRyYW5zZmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGNvbG9yc3BhY2UgPT0gMCkgewotICAgICAgLyogVHJ5IHRvIGd1ZXNzIGNvbG9yc3BhY2UgYWNjb3JkaW5nIHRvIHBpeGVsZm9ybWF0IGFuZCBzaXplICovCi0gICAgICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfWVVWICgmaW5mbykpIHsKLSAgICAgICAgLyogU0Qgc3RyZWFtcyBsaWtlbHkgdXNlIFNNUFRFMTcwTSBhbmQgSEQgc3RyZWFtcyBSRUM3MDkgKi8KLSAgICAgICAgaWYgKHdpZHRoIDw9IDcyMCAmJiBoZWlnaHQgPD0gNTc2KQotICAgICAgICAgIGNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotICAgICAgICBlbHNlCi0gICAgICAgICAgY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDk7Ci0gICAgICB9IGVsc2UgaWYgKEdTVF9WSURFT19JTkZPX0lTX1JHQiAoJmluZm8pKSB7Ci0gICAgICAgIGNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKLSAgICAgICAgdHJhbnNmZXIgPSBWNEwyX1hGRVJfRlVOQ19OT05FOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJEZXNpcmVkIGZvcm1hdCAlZHglZCwgZm9ybWF0ICIKLSAgICAgICIlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIHN0cmlkZTogJWQiLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgR1NUX0ZPVVJDQ19BUkdTIChwaXhlbGZvcm1hdCksIEdTVF9WSURFT19JTkZPX1BMQU5FX1NUUklERSAoJmluZm8sIDApKTsKLQotICBtZW1zZXQgKCZmb3JtYXQsIDB4MDAsIHNpemVvZiAoc3RydWN0IHY0bDJfZm9ybWF0KSk7Ci0gIGZvcm1hdC50eXBlID0gdjRsMm9iamVjdC0+dHlwZTsKLQotICBpZiAoaXNfbXBsYW5lKSB7Ci0gICAgZm9ybWF0LnR5cGUgPSB2NGwyb2JqZWN0LT50eXBlOwotICAgIGZvcm1hdC5mbXQucGl4X21wLnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7Ci0gICAgZm9ybWF0LmZtdC5waXhfbXAud2lkdGggPSB3aWR0aDsKLSAgICBmb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZm9ybWF0LmZtdC5waXhfbXAuZmllbGQgPSBmaWVsZDsKLSAgICBmb3JtYXQuZm10LnBpeF9tcC5udW1fcGxhbmVzID0gbl92NGxfcGxhbmVzOwotCi0gICAgLyogdHJ5IHRvIGFzayBvdXIgcHJlZmVyZWQgc3RyaWRlIGJ1dCBpdCdzIG5vdCBhIGZhaWx1cmUgaWYgbm90Ci0gICAgICogYWNjZXB0ZWQgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbl92NGxfcGxhbmVzOyBpKyspIHsKLSAgICAgIGdpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFICgmaW5mbywgaSk7Ci0KLSAgICAgIGlmIChHU1RfVklERU9fRk9STUFUX0lORk9fSVNfVElMRUQgKGluZm8uZmluZm8pKQotICAgICAgICBzdHJpZGUgPSBHU1RfVklERU9fVElMRV9YX1RJTEVTIChzdHJpZGUpIDw8Ci0gICAgICAgICAgICBHU1RfVklERU9fRk9STUFUX0lORk9fVElMRV9XUyAoaW5mby5maW5mbyk7Ci0KLSAgICAgIGZvcm1hdC5mbXQucGl4X21wLnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgPSBzdHJpZGU7Ci0gICAgfQotCi0gICAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfRU5DT0RFRCkKLSAgICAgIGZvcm1hdC5mbXQucGl4X21wLnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgPSBFTkNPREVEX0JVRkZFUl9TSVpFOwotICB9IGVsc2UgewotICAgIGdpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFICgmaW5mbywgMCk7Ci0KLSAgICBmb3JtYXQudHlwZSA9IHY0bDJvYmplY3QtPnR5cGU7Ci0gICAgZm9ybWF0LmZtdC5waXgud2lkdGggPSB3aWR0aDsKLSAgICBmb3JtYXQuZm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZm9ybWF0LmZtdC5waXgucGl4ZWxmb3JtYXQgPSBwaXhlbGZvcm1hdDsKLSAgICBmb3JtYXQuZm10LnBpeC5maWVsZCA9IGZpZWxkOwotCi0gICAgaWYgKEdTVF9WSURFT19GT1JNQVRfSU5GT19JU19USUxFRCAoaW5mby5maW5mbykpCi0gICAgICBzdHJpZGUgPSBHU1RfVklERU9fVElMRV9YX1RJTEVTIChzdHJpZGUpIDw8Ci0gICAgICAgICAgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1RJTEVfV1MgKGluZm8uZmluZm8pOwotCi0gICAgLyogdHJ5IHRvIGFzayBvdXIgcHJlZmVyZWQgc3RyaWRlICovCi0gICAgZm9ybWF0LmZtdC5waXguYnl0ZXNwZXJsaW5lID0gc3RyaWRlOwotCi0gICAgaWYgKEdTVF9WSURFT19JTkZPX0ZPUk1BVCAoJmluZm8pID09IEdTVF9WSURFT19GT1JNQVRfRU5DT0RFRCkKLSAgICAgIGZvcm1hdC5mbXQucGl4LnNpemVpbWFnZSA9IEVOQ09ERURfQlVGRkVSX1NJWkU7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiRGVzaXJlZCBmb3JtYXQgaXMgJWR4JWQsIGZvcm1hdCAiCi0gICAgICAiJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiwgbmIgcGxhbmVzICVkIiwgZm9ybWF0LmZtdC5waXgud2lkdGgsCi0gICAgICBmb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvcm1hdC5mbXQucGl4LnBpeGVsZm9ybWF0KSwKLSAgICAgIGlzX21wbGFuZSA/IGZvcm1hdC5mbXQucGl4X21wLm51bV9wbGFuZXMgOiAxKTsKLQotI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKLSAgaWYgKGlzX21wbGFuZSkgewotICAgIGZvciAoaSA9IDA7IGkgPCBmb3JtYXQuZm10LnBpeF9tcC5udW1fcGxhbmVzOyBpKyspCi0gICAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiICBzdHJpZGUgJWQiLAotICAgICAgICAgIGZvcm1hdC5mbXQucGl4X21wLnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICIgIHN0cmlkZSAlZCIsCi0gICAgICAgIGZvcm1hdC5mbXQucGl4LmJ5dGVzcGVybGluZSk7Ci0gIH0KLSNlbmRpZgotCi0gIGlmIChWNEwyX1RZUEVfSVNfT1VUUFVUICh2NGwyb2JqZWN0LT50eXBlKSkgewotICAgIGlmIChpc19tcGxhbmUpIHsKLSAgICAgIGZvcm1hdC5mbXQucGl4X21wLmNvbG9yc3BhY2UgPSBjb2xvcnNwYWNlOwotICAgICAgZm9ybWF0LmZtdC5waXhfbXAucXVhbnRpemF0aW9uID0gcmFuZ2U7Ci0gICAgICBmb3JtYXQuZm10LnBpeF9tcC55Y2Jjcl9lbmMgPSBtYXRyaXg7Ci0gICAgICBmb3JtYXQuZm10LnBpeF9tcC54ZmVyX2Z1bmMgPSB0cmFuc2ZlcjsKLSAgICB9IGVsc2UgewotICAgICAgZm9ybWF0LmZtdC5waXguY29sb3JzcGFjZSA9IGNvbG9yc3BhY2U7Ci0gICAgICBmb3JtYXQuZm10LnBpeC5xdWFudGl6YXRpb24gPSByYW5nZTsKLSAgICAgIGZvcm1hdC5mbXQucGl4LnljYmNyX2VuYyA9IG1hdHJpeDsKLSAgICAgIGZvcm1hdC5mbXQucGl4LnhmZXJfZnVuYyA9IHRyYW5zZmVyOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJEZXNpcmVkIGNvbG9yc3BhY2UgaXMgJWQ6JWQ6JWQ6JWQiLAotICAgICAgICBjb2xvcnNwYWNlLCByYW5nZSwgbWF0cml4LCB0cmFuc2Zlcik7Ci0gIH0KLQotICBpZiAodHJ5X29ubHkpIHsKLSAgICBpZiAodjRsMl9pb2N0bCAoZmQsIFZJRElPQ19UUllfRk1ULCAmZm9ybWF0KSA8IDApCi0gICAgICBnb3RvIHRyeV9mbXRfZmFpbGVkOwotICB9IGVsc2UgewotICAgIGlmICh2NGwyX2lvY3RsIChmZCwgVklESU9DX1NfRk1ULCAmZm9ybWF0KSA8IDApCi0gICAgICBnb3RvIHNldF9mbXRfZmFpbGVkOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgIkdvdCBmb3JtYXQgb2YgJWR4JWQsIGZvcm1hdCAiCi0gICAgICAiJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiwgbmIgcGxhbmVzICVkLCBjb2xvcnNwYWNlICVkIiwKLSAgICAgIGZvcm1hdC5mbXQucGl4LndpZHRoLCBmb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQsCi0gICAgICBHU1RfRk9VUkNDX0FSR1MgKGZvcm1hdC5mbXQucGl4LnBpeGVsZm9ybWF0KSwKLSAgICAgIGlzX21wbGFuZSA/IGZvcm1hdC5mbXQucGl4X21wLm51bV9wbGFuZXMgOiAxLAotICAgICAgaXNfbXBsYW5lID8gZm9ybWF0LmZtdC5waXhfbXAuY29sb3JzcGFjZSA6IGZvcm1hdC5mbXQucGl4LmNvbG9yc3BhY2UpOwotCi0jaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwotICBpZiAoaXNfbXBsYW5lKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IGZvcm1hdC5mbXQucGl4X21wLm51bV9wbGFuZXM7IGkrKykKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICIgIHN0cmlkZSAlZCwgc2l6ZWltYWdlICVkIiwKLSAgICAgICAgICBmb3JtYXQuZm10LnBpeF9tcC5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lLAotICAgICAgICAgIGZvcm1hdC5mbXQucGl4X21wLnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UpOwotICB9IGVsc2UgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICIgIHN0cmlkZSAlZCwgc2l6ZWltYWdlICVkIiwKLSAgICAgICAgZm9ybWF0LmZtdC5waXguYnl0ZXNwZXJsaW5lLCBmb3JtYXQuZm10LnBpeC5zaXplaW1hZ2UpOwotICB9Ci0jZW5kaWYKLQotICBpZiAoZm9ybWF0LmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gcGl4ZWxmb3JtYXQpCi0gICAgZ290byBpbnZhbGlkX3BpeGVsZm9ybWF0OwotCi0gIC8qIE9ubHkgbmVnb3RpYXRlIHNpemUgd2l0aCByYXcgZGF0YS4KLSAgICogRm9yIHNvbWUgY29kZWNzIHRoZSBkaW1lbnNpb25zIGFyZSAqbm90KiBpbiB0aGUgYml0c3RyZWFtLCBJSVJDIFZDMQotICAgKiBpbiBBU0YgbW9kZSBmb3IgZXhhbXBsZSwgdGhlcmUgaXMgYWxzbyBub3QgcmVhc29uIGZvciBhIGRyaXZlciB0bwotICAgKiBjaGFuZ2UgdGhlIHNpemUuICovCi0gIGlmIChpbmZvLmZpbmZvLT5mb3JtYXQgIT0gR1NUX1ZJREVPX0ZPUk1BVF9FTkNPREVEKSB7Ci0gICAgLyogV2UgY2FuIGNyb3AgbGFyZ2VyIGltYWdlcyAqLwotICAgIGlmIChmb3JtYXQuZm10LnBpeC53aWR0aCA8IHdpZHRoIHx8IGZvcm1hdC5mbXQucGl4LmhlaWdodCA8IGhlaWdodCkKLSAgICAgIGdvdG8gaW52YWxpZF9kaW1lbnNpb25zOwotCi0gICAgLyogTm90ZSwgdGhpcyB3aWxsIGJlIGFkanVzdGVkIGlmIHVwc3RyZWFtIGhhcyBub24tY2VudGVyZWQgY3JvcHBpbmcuICovCi0gICAgYWxpZ24ucGFkZGluZ190b3AgPSAwOwotICAgIGFsaWduLnBhZGRpbmdfYm90dG9tID0gZm9ybWF0LmZtdC5waXguaGVpZ2h0IC0gaGVpZ2h0OwotICAgIGFsaWduLnBhZGRpbmdfbGVmdCA9IDA7Ci0gICAgYWxpZ24ucGFkZGluZ19yaWdodCA9IGZvcm1hdC5mbXQucGl4LndpZHRoIC0gd2lkdGg7Ci0gIH0KLQotICBpZiAoaXNfbXBsYW5lICYmIGZvcm1hdC5mbXQucGl4X21wLm51bV9wbGFuZXMgIT0gbl92NGxfcGxhbmVzKQotICAgIGdvdG8gaW52YWxpZF9wbGFuZXM7Ci0KLSAgaWYgKHRyeV9vbmx5KSAgICAgICAgICAgICAgICAgLyogZ29vZCBlbm91Z2ggZm9yIHRyeWluZyBvbmx5ICovCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSAoJmluZm8pKSB7Ci0gICAgc3RydWN0IHY0bDJfY29udHJvbCBjdGwgPSB7IDAsIH07Ci0gICAgY3RsLmlkID0gVjRMMl9DSURfQUxQSEFfQ09NUE9ORU5UOwotICAgIGN0bC52YWx1ZSA9IDB4ZmY7Ci0KLSAgICBpZiAodjRsMl9pb2N0bCAoZmQsIFZJRElPQ19TX0NUUkwsICZjdGwpIDwgMCkKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgICAiRmFpbGVkIHRvIHNldCBhbHBoYSBjb21wb25lbnQgdmFsdWUiKTsKLSAgfQotCi0gIC8qIElzIHRoZXJlIGEgcmVhc29uIHdlIHJlcXVpcmUgdGhlIGNhbGxlciB0byBhbHdheXMgc3BlY2lmeSBhIGZyYW1lcmF0ZT8gKi8KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgIkRlc2lyZWQgZnJhbWVyYXRlOiAldS8ldSIsIGZwc19uLAotICAgICAgZnBzX2QpOwotCi0gIG1lbXNldCAoJnN0cmVhbXBhcm0sIDB4MDAsIHNpemVvZiAoc3RydWN0IHY0bDJfc3RyZWFtcGFybSkpOwotICBzdHJlYW1wYXJtLnR5cGUgPSB2NGwyb2JqZWN0LT50eXBlOwotCi0gIGlmICh2NGwyX2lvY3RsIChmZCwgVklESU9DX0dfUEFSTSwgJnN0cmVhbXBhcm0pIDwgMCkKLSAgICBnb3RvIGdldF9wYXJtX2ZhaWxlZDsKLQotICBHU1RfVklERU9fSU5GT19GUFNfTiAoJmluZm8pID0KLSAgICAgIHN0cmVhbXBhcm0ucGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvcjsKLSAgR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZpbmZvKSA9IHN0cmVhbXBhcm0ucGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3I7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCi0gICAgICB8fCB2NGwyb2JqZWN0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiR290IGZyYW1lcmF0ZTogJXUvJXUiLAotICAgICAgICBzdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IsCi0gICAgICAgIHN0cmVhbXBhcm0ucGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IpOwotCi0gICAgLyogV2UgdXNlZCB0byBza2lwIGZyYW1lIHJhdGUgc2V0dXAgaWYgdGhlIGNhbWVyYSB3YXMgYWxyZWFkeSBzZXR1cAotICAgICAqIHdpdGggdGhlIHJlcXVlc3RlZCBmcmFtZSByYXRlLiBUaGlzIGJyZWFrcyBzb21lIGNhbWVyYXMgdGhvdWdoLAotICAgICAqIGNhdXNpbmcgdGhlbSB0byBub3Qgb3V0cHV0IGRhdGEgKHNldmVyYWwgbW9kZWxzIG9mIFRoaW5rcGFkIGNhbWVyYXMKLSAgICAgKiBoYXZlIHRoaXMgcHJvYmxlbSBhdCBsZWFzdCkuCi0gICAgICogU28sIGRvbid0IHNraXAuICovCi0gICAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJTZXR0aW5nIGZyYW1lcmF0ZSB0byAldS8ldSIsIGZwc19uLAotICAgICAgICBmcHNfZCk7Ci0gICAgLyogV2Ugd2FudCB0byBjaGFuZ2UgdGhlIGZyYW1lIHJhdGUsIHNvIGNoZWNrIHdoZXRoZXIgd2UgY2FuLiBTb21lIGNoZWFwIFVTQgotICAgICAqIGNhbWVyYXMgZG9uJ3QgaGF2ZSB0aGUgY2FwYWJpbGl0eSAqLwotICAgIGlmICgoc3RyZWFtcGFybS5wYXJtLmNhcHR1cmUuY2FwYWJpbGl0eSAmIFY0TDJfQ0FQX1RJTUVQRVJGUkFNRSkgPT0gMCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgICAiTm90IHNldHRpbmcgZnJhbWVyYXRlIChub3Qgc3VwcG9ydGVkKSIpOwotICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIC8qIE5vdGU6IFY0TDIgd2FudHMgdGhlIGZyYW1lIGludGVydmFsLCB3ZSBoYXZlIHRoZSBmcmFtZSByYXRlICovCi0gICAgc3RyZWFtcGFybS5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IGZwc19kOwotICAgIHN0cmVhbXBhcm0ucGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IGZwc19uOwotCi0gICAgLyogc29tZSBjaGVhcCBVU0IgY2FtJ3Mgd29uJ3QgYWNjZXB0IGFueSBjaGFuZ2UgKi8KLSAgICBpZiAodjRsMl9pb2N0bCAoZmQsIFZJRElPQ19TX1BBUk0sICZzdHJlYW1wYXJtKSA8IDApCi0gICAgICBnb3RvIHNldF9wYXJtX2ZhaWxlZDsKLQotICAgIGlmIChzdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID4gMCAmJgotICAgICAgICBzdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPiAwKSB7Ci0gICAgICAvKiBnZXQgbmV3IHZhbHVlcyAqLwotICAgICAgZnBzX2QgPSBzdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yOwotICAgICAgZnBzX24gPSBzdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3I7Ci0KLSAgICAgIEdTVF9JTkZPX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgIlNldCBmcmFtZXJhdGUgdG8gJXUvJXUiLCBmcHNfbiwKLSAgICAgICAgICBmcHNfZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGZpeCB2NGwyIGNhcHR1cmUgZHJpdmVyIHRvIHByb3ZpZGUgZnJhbWVyYXRlIHZhbHVlcyAqLwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgICAgICJSZXVzZSBjYXBzIGZyYW1lcmF0ZSAldS8ldSAtIGZpeCB2NGwyIGNhcHR1cmUgZHJpdmVyIiwgZnBzX24sIGZwc19kKTsKLSAgICB9Ci0KLSAgICBHU1RfVklERU9fSU5GT19GUFNfTiAoJmluZm8pID0gZnBzX247Ci0gICAgR1NUX1ZJREVPX0lORk9fRlBTX0QgKCZpbmZvKSA9IGZwc19kOwotICB9Ci0KLWRvbmU6Ci0gIC8qIGFkZCBib29sZWFuIHJldHVybiwgc28gd2UgY2FuIGZhaWwgb24gZHJpdmVycyBidWdzICovCi0gIGdzdF92NGwyX29iamVjdF9zYXZlX2Zvcm1hdCAodjRsMm9iamVjdCwgZm10ZGVzYywgJmZvcm1hdCwgJmluZm8sICZhbGlnbik7Ci0KLSAgLyogbm93IGNvbmZpZ3VyZSB0aGUgcG9vbCAqLwotICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXR1cF9wb29sICh2NGwyb2JqZWN0LCBjYXBzKSkKLSAgICBnb3RvIHBvb2xfZmFpbGVkOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW52YWxpZF9jYXBzOgotICB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImNhbid0IHBhcnNlIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIGNhcHMpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdHJ5X2ZtdF9mYWlsZWQ6Ci0gIHsKLSAgICBpZiAoZXJybm8gPT0gRUJVU1kpIHsKLSAgICAgIEdTVF9WNEwyX0VSUk9SIChlcnJvciwgUkVTT1VSQ0UsIEJVU1ksCi0gICAgICAgICAgKF8oIkRldmljZSAnJXMnIGlzIGJ1c3kiKSwgdjRsMm9iamVjdC0+dmlkZW9kZXYpLAotICAgICAgICAgICgiQ2FsbCB0byBUUllfRk1UIGZhaWxlZCBmb3IgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBAICVkeCVkOiAlcyIsCi0gICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAocGl4ZWxmb3JtYXQpLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1zZXRfZm10X2ZhaWxlZDoKLSAgewotICAgIGlmIChlcnJubyA9PSBFQlVTWSkgewotICAgICAgR1NUX1Y0TDJfRVJST1IgKGVycm9yLCBSRVNPVVJDRSwgQlVTWSwKLSAgICAgICAgICAoXygiRGV2aWNlICclcycgaXMgYnVzeSIpLCB2NGwyb2JqZWN0LT52aWRlb2RldiksCi0gICAgICAgICAgKCJDYWxsIHRvIFNfRk1UIGZhaWxlZCBmb3IgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBAICVkeCVkOiAlcyIsCi0gICAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAocGl4ZWxmb3JtYXQpLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICBnX3N0cmVycm9yIChlcnJubykpKTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1Y0TDJfRVJST1IgKGVycm9yLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICAgKF8oIkRldmljZSAnJXMnIGNhbm5vdCBjYXB0dXJlIGF0ICVkeCVkIiksCi0gICAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2LCB3aWR0aCwgaGVpZ2h0KSwKLSAgICAgICAgICAoIkNhbGwgdG8gU19GTVQgZmFpbGVkIGZvciAlIiBHU1RfRk9VUkNDX0ZPUk1BVCAiIEAgJWR4JWQ6ICVzIiwKLSAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChwaXhlbGZvcm1hdCksIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgIGdfc3RyZXJyb3IgKGVycm5vKSkpOwotICAgIH0KLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLWludmFsaWRfZGltZW5zaW9uczoKLSAgewotICAgIGlmICghdHJ5X29ubHkpIHsKLSAgICAgIEdTVF9WNEwyX0VSUk9SIChlcnJvciwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAgIChfKCJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBhdCAlZHglZCIpLAotICAgICAgICAgICAgICB2NGwyb2JqZWN0LT52aWRlb2Rldiwgd2lkdGgsIGhlaWdodCksCi0gICAgICAgICAgKCJUcmllZCB0byBjYXB0dXJlIGF0ICVkeCVkLCBidXQgZGV2aWNlIHJldHVybmVkIHNpemUgJWR4JWQiLAotICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQuZm10LnBpeC53aWR0aCwgZm9ybWF0LmZtdC5waXguaGVpZ2h0KSk7Ci0gICAgfQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9waXhlbGZvcm1hdDoKLSAgewotICAgIGlmICghdHJ5X29ubHkpIHsKLSAgICAgIEdTVF9WNEwyX0VSUk9SIChlcnJvciwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAgIChfKCJEZXZpY2UgJyVzJyBjYW5ub3QgY2FwdHVyZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCIpLAotICAgICAgICAgICAgICB2NGwyb2JqZWN0LT52aWRlb2RldiksCi0gICAgICAgICAgKCJUcmllZCB0byBjYXB0dXJlIGluICUiIEdTVF9GT1VSQ0NfRk9STUFUCi0gICAgICAgICAgICAgICIsIGJ1dCBkZXZpY2UgcmV0dXJuZWQgZm9ybWF0IiAiICUiIEdTVF9GT1VSQ0NfRk9STUFULAotICAgICAgICAgICAgICBHU1RfRk9VUkNDX0FSR1MgKHBpeGVsZm9ybWF0KSwKLSAgICAgICAgICAgICAgR1NUX0ZPVVJDQ19BUkdTIChmb3JtYXQuZm10LnBpeC5waXhlbGZvcm1hdCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX3BsYW5lczoKLSAgewotICAgIGlmICghdHJ5X29ubHkpIHsKLSAgICAgIEdTVF9WNEwyX0VSUk9SIChlcnJvciwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAgIChfKCJEZXZpY2UgJyVzJyBkb2VzIHN1cHBvcnQgbm9uLWNvbnRpZ3VvdXMgcGxhbmVzIiksCi0gICAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgICAoIkRldmljZSB3YW50cyAlZCBwbGFuZXMiLCBmb3JtYXQuZm10LnBpeF9tcC5udW1fcGxhbmVzKSk7Ci0gICAgfQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotZ2V0X3Bhcm1fZmFpbGVkOgotICB7Ci0gICAgLyogaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgY2FsbCBpcyBub3Qgc3VwcG9ydGVkICovCi0gICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9UVFkpIHsKLSAgICAgIEdTVF9WNEwyX0VSUk9SIChlcnJvciwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAgIChfKCJDb3VsZCBub3QgZ2V0IHBhcmFtZXRlcnMgb24gZGV2aWNlICclcyciKSwKLSAgICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICB9Ci0gICAgZ290byBkb25lOwotICB9Ci1zZXRfcGFybV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfVjRMMl9FUlJPUiAoZXJyb3IsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIlZpZGVvIGRldmljZSBkaWQgbm90IGFjY2VwdCBuZXcgZnJhbWUgcmF0ZSBzZXR0aW5nLiIpKSwKLSAgICAgICAgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgZ290byBkb25lOwotICB9Ci1wb29sX2ZhaWxlZDoKLSAgewotICAgIC8qIHNldHVwX3Bvb2wgYWxyZWFkeSBzZW5kIHRoZSBlcnJvciAqLwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfb2JqZWN0X3NldF9mb3JtYXQgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCBHc3RDYXBzICogY2FwcywKLSAgICBHc3RWNGwyRXJyb3IgKiBlcnJvcikKLXsKLSAgcmV0dXJuIGdzdF92NGwyX29iamVjdF9zZXRfZm9ybWF0X2Z1bGwgKHY0bDJvYmplY3QsIGNhcHMsIEZBTFNFLCBlcnJvcik7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3RfdHJ5X2Zvcm1hdCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdENhcHMgKiBjYXBzLAotICAgIEdzdFY0bDJFcnJvciAqIGVycm9yKQotewotICByZXR1cm4gZ3N0X3Y0bDJfb2JqZWN0X3NldF9mb3JtYXRfZnVsbCAodjRsMm9iamVjdCwgY2FwcywgVFJVRSwgZXJyb3IpOwotfQotCi0vKioKLSAqIGdzdF92NGwyX29iamVjdF9hY3F1aXJlX2Zvcm1hdDoKLSAqIEB2NGwyb2JqZWN0IHRoZSBvYmplY3QKLSAqIEBpbmZvIGEgR3N0VmlkZW9JbmZvIHRvIGJlIGZpbGxlZAotICoKLSAqIEFjcXVpcmUgdGhlIGRyaXZlciBjaG9vc2VuIGZvcm1hdC4gVGhpcyBpcyB1c2VmdWwgaW4gZGVjb2RlciBvciBlbmNvZGVyIGVsZW1lbnRzIHdoZXJlCi0gKiB0aGUgb3V0cHV0IGZvcm1hdCBpcyBjaG9vc2VuIGJ5IHRoZSBIVy4KLSAqCi0gKiBSZXR1cm5zOiAlVFJVRSBvbiBzdWNjZXNzLCAlRkFMU0Ugb24gZmFpbHVyZS4KLSAqLwotZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9hY3F1aXJlX2Zvcm1hdCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdFZpZGVvSW5mbyAqIGluZm8pCi17Ci0gIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGRlc2M7Ci0gIHN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0gIHN0cnVjdCB2NGwyX2Nyb3AgY3JvcDsKLSAgc3RydWN0IHY0bDJfc2VsZWN0aW9uIHNlbDsKLSAgc3RydWN0IHY0bDJfcmVjdCAqciA9IE5VTEw7Ci0gIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgZ3VpbnQgd2lkdGgsIGhlaWdodDsKLSAgR3N0VmlkZW9BbGlnbm1lbnQgYWxpZ247Ci0KLSAgZ3N0X3ZpZGVvX2luZm9faW5pdCAoaW5mbyk7Ci0gIGdzdF92aWRlb19hbGlnbm1lbnRfcmVzZXQgKCZhbGlnbik7Ci0KLSAgbWVtc2V0ICgmZm10LCAweDAwLCBzaXplb2YgKHN0cnVjdCB2NGwyX2Zvcm1hdCkpOwotICBmbXQudHlwZSA9IHY0bDJvYmplY3QtPnR5cGU7Ci0gIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0dfRk1ULCAmZm10KSA8IDApCi0gICAgZ290byBnZXRfZm10X2ZhaWxlZDsKLQotICBmbXRkZXNjID0gZ3N0X3Y0bDJfb2JqZWN0X2dldF9mb3JtYXRfZnJvbV9mb3VyY2MgKHY0bDJvYmplY3QsCi0gICAgICBmbXQuZm10LnBpeC5waXhlbGZvcm1hdCk7Ci0gIGlmIChmbXRkZXNjID09IE5VTEwpCi0gICAgZ290byB1bnN1cHBvcnRlZF9mb3JtYXQ7Ci0KLSAgLyogTm8gbmVlZCB0byBjYXJlIGFib3V0IG1wbGFuZSwgdGhlIGZvdXIgZmlyc3QgcGFyYW1zIGFyZSB0aGUgc2FtZSAqLwotICBmb3JtYXQgPSBnc3RfdjRsMl9vYmplY3RfdjRsMmZvdXJjY190b192aWRlb19mb3JtYXQgKGZtdC5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQotICAvKiBmYWlscyBpZiB3ZSBkbyBubyB0cmFuc2xhdGUgdGhlIGZtdC5waXgucGl4ZWxmb3JtYXQgdG8gR3N0VmlkZW9Gb3JtYXQgKi8KLSAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX1VOS05PV04pCi0gICAgZ290byB1bnN1cHBvcnRlZF9mb3JtYXQ7Ci0KLSAgaWYgKGZtdC5mbXQucGl4LndpZHRoID09IDAgfHwgZm10LmZtdC5waXguaGVpZ2h0ID09IDApCi0gICAgZ290byBpbnZhbGlkX2RpbWVuc2lvbnM7Ci0KLSAgd2lkdGggPSBmbXQuZm10LnBpeC53aWR0aDsKLSAgaGVpZ2h0ID0gZm10LmZtdC5waXguaGVpZ2h0OwotCi0gIC8qIFVzZSB0aGUgZGVmYXVsdCBjb21wb3NlIHJlY3RhbmdsZSAqLwotICBtZW1zZXQgKCZzZWwsIDAsIHNpemVvZiAoc3RydWN0IHY0bDJfc2VsZWN0aW9uKSk7Ci0gIHNlbC50eXBlID0gdjRsMm9iamVjdC0+dHlwZTsKLSAgc2VsLnRhcmdldCA9IFY0TDJfU0VMX1RHVF9DT01QT1NFX0RFRkFVTFQ7Ci0gIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0dfU0VMRUNUSU9OLCAmc2VsKSA+PSAwKSB7Ci0gICAgciA9ICZzZWwucjsKLSAgfSBlbHNlIHsKLSAgICAvKiBGb3IgYW5jaWVudCBrZXJuZWxzLCBmYWxsIGJhY2sgdG8gR19DUk9QICovCi0gICAgbWVtc2V0ICgmY3JvcCwgMCwgc2l6ZW9mIChzdHJ1Y3QgdjRsMl9jcm9wKSk7Ci0gICAgY3JvcC50eXBlID0gdjRsMm9iamVjdC0+dHlwZTsKLSAgICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19HX0NST1AsICZjcm9wKSA+PSAwKQotICAgICAgciA9ICZjcm9wLmM7Ci0gIH0KLSAgaWYgKHIpIHsKLSAgICBhbGlnbi5wYWRkaW5nX2xlZnQgPSByLT5sZWZ0OwotICAgIGFsaWduLnBhZGRpbmdfdG9wID0gci0+dG9wOwotICAgIGFsaWduLnBhZGRpbmdfcmlnaHQgPSB3aWR0aCAtIHItPndpZHRoIC0gci0+bGVmdDsKLSAgICBhbGlnbi5wYWRkaW5nX2JvdHRvbSA9IGhlaWdodCAtIHItPmhlaWdodCAtIHItPnRvcDsKLSAgICB3aWR0aCA9IHItPndpZHRoOwotICAgIGhlaWdodCA9IHItPmhlaWdodDsKLSAgfQotCi0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKGluZm8sIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgc3dpdGNoIChmbXQuZm10LnBpeC5maWVsZCkgewotICAgIGNhc2UgVjRMMl9GSUVMRF9BTlk6Ci0gICAgY2FzZSBWNEwyX0ZJRUxEX05PTkU6Ci0gICAgICBpbmZvLT5pbnRlcmxhY2VfbW9kZSA9IEdTVF9WSURFT19JTlRFUkxBQ0VfTU9ERV9QUk9HUkVTU0lWRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgotICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX1RCOgotICAgIGNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEX0JUOgotICAgICAgaW5mby0+aW50ZXJsYWNlX21vZGUgPSBHU1RfVklERU9fSU5URVJMQUNFX01PREVfSU5URVJMRUFWRUQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ290byB1bnN1cHBvcnRlZF9maWVsZDsKLSAgfQotCi0gIGdzdF92NGwyX29iamVjdF9nZXRfY29sb3JzcGFjZSAoJmZtdCwgJmluZm8tPmNvbG9yaW1ldHJ5KTsKLQotICBnc3RfdjRsMl9vYmplY3Rfc2F2ZV9mb3JtYXQgKHY0bDJvYmplY3QsIGZtdGRlc2MsICZmbXQsIGluZm8sICZhbGlnbik7Ci0KLSAgLyogU2hhbGwgd2Ugc2V0dXAgdGhlIHBvb2wgPyAqLwotCi0gIHJldHVybiBUUlVFOwotCi1nZXRfZm10X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIlZpZGVvIGRldmljZSBkaWQgbm90IHByb3ZpZGUgb3V0cHV0IGZvcm1hdC4iKSksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotaW52YWxpZF9kaW1lbnNpb25zOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiVmlkZW8gZGV2aWNlIHJldHVybmVkIGludmFsaWQgZGltZW5zaW9ucy4iKSksCi0gICAgICAgICgiRXhwZWN0ZWQgbm9uIDAgZGltZW5zaW9ucywgZ290ICVkeCVkIiwgZm10LmZtdC5waXgud2lkdGgsCi0gICAgICAgICAgICBmbXQuZm10LnBpeC5oZWlnaHQpKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLXVuc3VwcG9ydGVkX2ZpZWxkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIGludGVybGFjaW5nIG1ldGhvZC4iKSksCi0gICAgICAgICgiVjRMMiBmaWVsZCB0eXBlICVkIG5vdCBzdXBwb3J0ZWQiLCBmbXQuZm10LnBpeC5maWVsZCkpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotdW5zdXBwb3J0ZWRfZm9ybWF0OgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIlZpZGVvIGRldmljZSB1c2VzIGFuIHVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC4iKSksCi0gICAgICAgICgiVjRMMiBmb3JtYXQgJSIgR1NUX0ZPVVJDQ19GT1JNQVQgIiBub3Qgc3VwcG9ydGVkIiwKLSAgICAgICAgICAgIEdTVF9GT1VSQ0NfQVJHUyAoZm10LmZtdC5waXgucGl4ZWxmb3JtYXQpKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3Rfc2V0X2Nyb3AgKEdzdFY0bDJPYmplY3QgKiBvYmopCi17Ci0gIHN0cnVjdCB2NGwyX2Nyb3AgY3JvcCA9IHsgMCB9OwotCi0gIGNyb3AudHlwZSA9IG9iai0+dHlwZTsKLSAgY3JvcC5jLmxlZnQgPSBvYmotPmFsaWduLnBhZGRpbmdfbGVmdDsKLSAgY3JvcC5jLnRvcCA9IG9iai0+YWxpZ24ucGFkZGluZ190b3A7Ci0gIGNyb3AuYy53aWR0aCA9IG9iai0+aW5mby53aWR0aDsKLSAgY3JvcC5jLmhlaWdodCA9IG9iai0+aW5mby5oZWlnaHQ7Ci0KLSAgaWYgKG9iai0+YWxpZ24ucGFkZGluZ19sZWZ0ICsgb2JqLT5hbGlnbi5wYWRkaW5nX3RvcCArCi0gICAgICBvYmotPmFsaWduLnBhZGRpbmdfcmlnaHQgKyBvYmotPmFsaWduLnBhZGRpbmdfYm90dG9tID09IDApIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChvYmotPmVsZW1lbnQsICJubyBjcm9wcGluZyBuZWVkZWQiKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwKLSAgICAgICJEZXNpcmVkIGNyb3BwaW5nIGxlZnQgJXUsIHRvcCAldSwgc2l6ZSAldXgldSIsIGNyb3AuYy5sZWZ0LCBjcm9wLmMudG9wLAotICAgICAgY3JvcC5jLndpZHRoLCBjcm9wLmMuaGVpZ2h0KTsKLQotICBpZiAodjRsMl9pb2N0bCAob2JqLT52aWRlb19mZCwgVklESU9DX1NfQ1JPUCwgJmNyb3ApIDwgMCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqLT5lbGVtZW50LCAiVklESU9DX1NfQ1JPUCBmYWlsZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBpZiAodjRsMl9pb2N0bCAob2JqLT52aWRlb19mZCwgVklESU9DX0dfQ1JPUCwgJmNyb3ApIDwgMCkgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob2JqLT5lbGVtZW50LCAiVklESU9DX0dfQ1JPUCBmYWlsZWQiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChvYmotPmVsZW1lbnQsCi0gICAgICAiR290IGNyb3BwaW5nIGxlZnQgJXUsIHRvcCAldSwgc2l6ZSAldXgldSIsIGNyb3AuYy5sZWZ0LCBjcm9wLmMudG9wLAotICAgICAgY3JvcC5jLndpZHRoLCBjcm9wLmMuaGVpZ2h0KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF9jYXBzX2VxdWFsIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotICBHc3RDYXBzICpvbGRjYXBzOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgaWYgKCF2NGwyb2JqZWN0LT5wb29sKQotICAgIHJldHVybiBGQUxTRTsKLQotICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAodjRsMm9iamVjdC0+cG9vbCk7Ci0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3BhcmFtcyAoY29uZmlnLCAmb2xkY2FwcywgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgcmV0ID0gb2xkY2FwcyAmJiBnc3RfY2Fwc19pc19lcXVhbCAoY2Fwcywgb2xkY2Fwcyk7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChjb25maWcpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3RfdW5sb2NrIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBHU1RfTE9HX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInN0YXJ0IGZsdXNoaW5nIik7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPnBvb2wgJiYgZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAodjRsMm9iamVjdC0+cG9vbCkpCi0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZyAodjRsMm9iamVjdC0+cG9vbCwgVFJVRSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX29iamVjdF91bmxvY2tfc3RvcCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIGdib29sZWFuIHJldCA9IFRSVUU7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJzdG9wIGZsdXNoaW5nIik7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPnBvb2wgJiYgZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAodjRsMm9iamVjdC0+cG9vbCkpCi0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9mbHVzaGluZyAodjRsMm9iamVjdC0+cG9vbCwgRkFMU0UpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3Rfc3RvcCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJzdG9wcGluZyIpOwotCi0gIGlmICghR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpCi0gICAgZ290byBkb25lOwotICBpZiAoIUdTVF9WNEwyX0lTX0FDVElWRSAodjRsMm9iamVjdCkpCi0gICAgZ290byBkb25lOwotCi0gIGlmICh2NGwyb2JqZWN0LT5wb29sKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImRlYWN0aXZhdGluZyBwb29sIik7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHY0bDJvYmplY3QtPnBvb2wsIEZBTFNFKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmICh2NGwyb2JqZWN0LT5wb29sKTsKLSAgICB2NGwyb2JqZWN0LT5wb29sID0gTlVMTDsKLSAgfQotCi0gIEdTVF9WNEwyX1NFVF9JTkFDVElWRSAodjRsMm9iamVjdCk7Ci0KLWRvbmU6Ci0gIHJldHVybiBUUlVFOwotfQotCi1Hc3RDYXBzICoKLWdzdF92NGwyX29iamVjdF9wcm9iZV9jYXBzIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0Q2FwcyAqcmV0OwotICBHU0xpc3QgKndhbGs7Ci0gIEdTTGlzdCAqZm9ybWF0czsKLQotICBmb3JtYXRzID0gZ3N0X3Y0bDJfb2JqZWN0X2dldF9mb3JtYXRfbGlzdCAodjRsMm9iamVjdCk7Ci0KLSAgcmV0ID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotCi0gIGZvciAod2FsayA9IGZvcm1hdHM7IHdhbGs7IHdhbGsgPSB3YWxrLT5uZXh0KSB7Ci0gICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm9ybWF0OwotICAgIEdzdFN0cnVjdHVyZSAqdGVtcGxhdGU7Ci0KLSAgICBmb3JtYXQgPSAoc3RydWN0IHY0bDJfZm10ZGVzYyAqKSB3YWxrLT5kYXRhOwotCi0gICAgdGVtcGxhdGUgPSBnc3RfdjRsMl9vYmplY3RfdjRsMmZvdXJjY190b19iYXJlX3N0cnVjdCAoZm9ybWF0LT5waXhlbGZvcm1hdCk7Ci0KLSAgICBpZiAodGVtcGxhdGUpIHsKLSAgICAgIEdzdENhcHMgKnRtcDsKLQotICAgICAgdG1wID0gZ3N0X3Y0bDJfb2JqZWN0X3Byb2JlX2NhcHNfZm9yX2Zvcm1hdCAodjRsMm9iamVjdCwKLSAgICAgICAgICBmb3JtYXQtPnBpeGVsZm9ybWF0LCB0ZW1wbGF0ZSk7Ci0gICAgICBpZiAodG1wKQotICAgICAgICBnc3RfY2Fwc19hcHBlbmQgKHJldCwgdG1wKTsKLQotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlICh0ZW1wbGF0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJ1bmtub3duIGZvcm1hdCAldSIsCi0gICAgICAgICAgZm9ybWF0LT5waXhlbGZvcm1hdCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIEdzdENhcHMgKnRtcDsKLQotICAgIHRtcCA9IHJldDsKLSAgICByZXQgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCByZXQsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1Hc3RDYXBzICoKLWdzdF92NGwyX29iamVjdF9nZXRfY2FwcyAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnJldDsKLQotICBpZiAodjRsMm9iamVjdC0+cHJvYmVkX2NhcHMgPT0gTlVMTCkKLSAgICB2NGwyb2JqZWN0LT5wcm9iZWRfY2FwcyA9IGdzdF92NGwyX29iamVjdF9wcm9iZV9jYXBzICh2NGwyb2JqZWN0LCBOVUxMKTsKLQotICBpZiAoZmlsdGVyKSB7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGZpbHRlciwgdjRsMm9iamVjdC0+cHJvYmVkX2NhcHMsCi0gICAgICAgIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0ID0gZ3N0X2NhcHNfcmVmICh2NGwyb2JqZWN0LT5wcm9iZWRfY2Fwcyk7Ci0gIH0KLQotICBHU1RfSU5GT19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJwcm9iZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIHJldCk7Ci0gIExPR19DQVBTICh2NGwyb2JqZWN0LT5lbGVtZW50LCByZXQpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3RfZGVjaWRlX2FsbG9jYXRpb24gKEdzdFY0bDJPYmplY3QgKiBvYmosIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdEJ1ZmZlclBvb2wgKnBvb2wgPSBOVUxMLCAqb3RoZXJfcG9vbCA9IE5VTEw7Ci0gIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotICBndWludCBzaXplLCBtaW4sIG1heCwgb3duX21pbiA9IDA7Ci0gIGdib29sZWFuIHVwZGF0ZTsKLSAgZ2Jvb2xlYW4gaGFzX3ZpZGVvX21ldGE7Ci0gIGdib29sZWFuIGNhbl9zaGFyZV9vd25fcG9vbCwgcHVzaGluZ19mcm9tX291cl9wb29sID0gRkFMU0U7Ci0gIEdzdEFsbG9jYXRvciAqYWxsb2NhdG9yID0gTlVMTDsKLSAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXMgPSB7IDAgfTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvYmotPmVsZW1lbnQsICJkZWNpZGUgYWxsb2NhdGlvbiIpOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChvYmotPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0gICAgICBvYmotPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSwgRkFMU0UpOwotCi0gIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uIChxdWVyeSwgJmNhcHMsIE5VTEwpOwotCi0gIGlmIChvYmotPnBvb2wgPT0gTlVMTCkgewotICAgIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3NldHVwX3Bvb2wgKG9iaiwgY2FwcykpCi0gICAgICBnb3RvIHBvb2xfZmFpbGVkOwotICB9Ci0KLSAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3BhcmFtcyAocXVlcnkpID4gMCkKLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCAwLCAmYWxsb2NhdG9yLCAmcGFyYW1zKTsKLQotICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcG9vbHMgKHF1ZXJ5KSA+IDApIHsKLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsICZwb29sLCAmc2l6ZSwgJm1pbiwgJm1heCk7Ci0gICAgdXBkYXRlID0gVFJVRTsKLSAgfSBlbHNlIHsKLSAgICBwb29sID0gTlVMTDsKLSAgICBtaW4gPSBtYXggPSAwOwotICAgIHNpemUgPSAwOwotICAgIHVwZGF0ZSA9IEZBTFNFOwotICB9Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAob2JqLT5lbGVtZW50LCAiYWxsb2NhdGlvbjogc2l6ZToldSBtaW46JXUgbWF4OiV1IHBvb2w6JSIKLSAgICAgIEdTVF9QVFJfRk9STUFULCBzaXplLCBtaW4sIG1heCwgcG9vbCk7Ci0KLSAgaGFzX3ZpZGVvX21ldGEgPQotICAgICAgZ3N0X3F1ZXJ5X2ZpbmRfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUsIE5VTEwpOwotCi0gIGNhbl9zaGFyZV9vd25fcG9vbCA9IChoYXNfdmlkZW9fbWV0YSB8fCAhb2JqLT5uZWVkX3ZpZGVvX21ldGEpOwotCi0gIGdzdF92NGwyX2dldF9kcml2ZXJfbWluX2J1ZmZlcnMgKG9iaik7Ci0gIC8qIFdlIGNhbid0IHNoYXJlIG91ciBvd24gcG9vbCwgaWYgaXQgZXhjZWVkIFY0TDIgY2FwYWNpdHkgKi8KLSAgaWYgKG1pbiArIG9iai0+bWluX2J1ZmZlcnMgKyAxID4gVklERU9fTUFYX0ZSQU1FKQotICAgIGNhbl9zaGFyZV9vd25fcG9vbCA9IEZBTFNFOwotCi0gIC8qIHNlbGVjdCBhIHBvb2wgKi8KLSAgc3dpdGNoIChvYmotPm1vZGUpIHsKLSAgICBjYXNlIEdTVF9WNEwyX0lPX1JXOgotICAgICAgaWYgKHBvb2wpIHsKLSAgICAgICAgLyogaW4gUkVBRC9XUklURSBtb2RlLCBwcmVmZXIgYSBkb3duc3RyZWFtIHBvb2wgYmVjYXVzZSBvdXIgb3duIHBvb2wKLSAgICAgICAgICogZG9lc24ndCBoZWxwIG11Y2gsIHdlIGhhdmUgdG8gd3JpdGUgdG8gaXQgYXMgd2VsbCAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChvYmotPmVsZW1lbnQsCi0gICAgICAgICAgICAicmVhZC93cml0ZSBtb2RlOiB1c2luZyBkb3duc3RyZWFtIHBvb2wiKTsKLSAgICAgICAgLyogdXNlIHRoZSBiaWdlc3Qgc2l6ZSwgd2hlbiB3ZSB1c2Ugb3VyIG93biBwb29sIHdlIGNhbid0IHJlYWxseSBkbyBhbnkKLSAgICAgICAgICogb3RoZXIgc2l6ZSB0aGFuIHdoYXQgdGhlIGhhcmR3YXJlIGdpdmVzIHVzIGJ1dCBmb3IgZG93bnN0cmVhbSBwb29scwotICAgICAgICAgKiB3ZSBjYW4gdHJ5ICovCi0gICAgICAgIHNpemUgPSBNQVggKHNpemUsIG9iai0+aW5mby5zaXplKTsKLSAgICAgIH0gZWxzZSBpZiAoY2FuX3NoYXJlX293bl9wb29sKSB7Ci0gICAgICAgIC8qIG5vIGRvd25zdHJlYW0gcG9vbCwgdXNlIG91ciBvd24gdGhlbiAqLwotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChvYmotPmVsZW1lbnQsCi0gICAgICAgICAgICAicmVhZC93cml0ZSBtb2RlOiBubyBkb3duc3RyZWFtIHBvb2wsIHVzaW5nIG91ciBvd24iKTsKLSAgICAgICAgcG9vbCA9IGdzdF9vYmplY3RfcmVmIChvYmotPnBvb2wpOwotICAgICAgICBzaXplID0gb2JqLT5pbmZvLnNpemU7Ci0gICAgICAgIHB1c2hpbmdfZnJvbV9vdXJfcG9vbCA9IFRSVUU7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX1Y0TDJfSU9fVVNFUlBUUjoKLSAgICBjYXNlIEdTVF9WNEwyX0lPX0RNQUJVRl9JTVBPUlQ6Ci0gICAgICAvKiBpbiBpbXBvcnRpbmcgbW9kZSwgcHJlZmVyIG91ciBvd24gcG9vbCwgYW5kIHBhc3MgdGhlIG90aGVyIHBvb2wgdG8KLSAgICAgICAqIG91ciBvd24sIHNvIGl0IGNhbiBzZXJ2ZSBpdHNlbGYgKi8KLSAgICAgIGlmIChwb29sID09IE5VTEwpCi0gICAgICAgIGdvdG8gbm9fZG93bnN0cmVhbV9wb29sOwotICAgICAgZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfc2V0X290aGVyX3Bvb2wgKEdTVF9WNEwyX0JVRkZFUl9QT09MIChvYmotPnBvb2wpLAotICAgICAgICAgIHBvb2wpOwotICAgICAgb3RoZXJfcG9vbCA9IHBvb2w7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgICAgIHBvb2wgPSBnc3Rfb2JqZWN0X3JlZiAob2JqLT5wb29sKTsKLSAgICAgIHNpemUgPSBvYmotPmluZm8uc2l6ZTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHU1RfVjRMMl9JT19NTUFQOgotICAgIGNhc2UgR1NUX1Y0TDJfSU9fRE1BQlVGOgotICAgICAgLyogaW4gc3RyZWFtaW5nIG1vZGUsIHByZWZlciBvdXIgb3duIHBvb2wgKi8KLSAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiB1c2UgaXQgLi4uICovCi0gICAgICBpZiAoY2FuX3NoYXJlX293bl9wb29sKSB7Ci0gICAgICAgIGlmIChwb29sKQotICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotICAgICAgICBwb29sID0gZ3N0X29iamVjdF9yZWYgKG9iai0+cG9vbCk7Ci0gICAgICAgIHNpemUgPSBvYmotPmluZm8uc2l6ZTsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAob2JqLT5lbGVtZW50LAotICAgICAgICAgICAgInN0cmVhbWluZyBtb2RlOiB1c2luZyBvdXIgb3duIHBvb2wgJSIgR1NUX1BUUl9GT1JNQVQsIHBvb2wpOwotICAgICAgICBwdXNoaW5nX2Zyb21fb3VyX3Bvb2wgPSBUUlVFOwotICAgICAgfSBlbHNlIGlmIChwb29sKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwKLSAgICAgICAgICAgICJzdHJlYW1pbmcgbW9kZTogY29weWluZyB0byBkb3duc3RyZWFtIHBvb2wgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgICBwb29sKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwKLSAgICAgICAgICAgICJzdHJlYW1pbmcgbW9kZTogbm8gdXNhYmxlIHBvb2wsIGNvcHlpbmcgdG8gZ2VuZXJpYyBwb29sIik7Ci0gICAgICAgIHNpemUgPSBNQVggKHNpemUsIG9iai0+aW5mby5zaXplKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1Y0TDJfSU9fQVVUTzoKLSAgICBkZWZhdWx0OgotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChvYmotPmVsZW1lbnQsICJ1bmhhbmRsZWQgbW9kZSIpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoc2l6ZSA9PSAwKQotICAgIGdvdG8gbm9fc2l6ZTsKLQotICAvKiBJZiBwdXNoaW5nIGZyb20gb3VyIG93biBwb29sLCBjb25maWd1cmUgaXQgd2l0aCBxdWVyaWVkIG1pbmltdW0sCi0gICAqIG90aGVyd2lzZSB1c2UgdGhlIG1pbmltdW0gcmVxdWlyZWQgKi8KLSAgaWYgKHB1c2hpbmdfZnJvbV9vdXJfcG9vbCkgewotICAgIC8qIFdoZW4gcHVzaGluZyBmcm9tIG91ciBvd24gcG9vbCwgd2UgbmVlZCB3aGF0IGRvd25zdHJlYW0gb25lLCB0byBiZSBhYmxlCi0gICAgICogdG8gZmlsbCB0aGUgcGlwZWxpbmUsIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGRlY29kZXIgYWNjb3JkaW5nIHRvIHRoZQotICAgICAqIGRyaXZlciBhbmQgMSBtb3JlLCBzbyB3ZSBkb24ndCBlbmR1cCB1cCB3aXRoIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSBvcgotICAgICAqIGhlbGQgYnkgdGhlIGRlY29kZXIuICovCi0gICAgb3duX21pbiA9IG1pbiArIG9iai0+bWluX2J1ZmZlcnMgKyAxOwotCi0gICAgLyogSWYgbm8gYWxsb2NhdGlvbiBwYXJhbWV0ZXJzIHdoZXJlIHByb3ZpZGVkLCBhbGxvdyBmb3IgYSBsaXR0bGUgbW9yZQotICAgICAqIGJ1ZmZlcnMgYW5kIGVuYWJsZSBjb3B5IHRocmVzaG9sZCAqLwotICAgIGlmICghdXBkYXRlKSB7Ci0gICAgICBvd25fbWluICs9IDM7Ci0gICAgICBnc3RfdjRsMl9idWZmZXJfcG9vbF9jb3B5X2F0X3RocmVzaG9sZCAoR1NUX1Y0TDJfQlVGRkVSX1BPT0wgKHBvb2wpLAotICAgICAgICAgIFRSVUUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBnc3RfdjRsMl9idWZmZXJfcG9vbF9jb3B5X2F0X3RocmVzaG9sZCAoR1NUX1Y0TDJfQlVGRkVSX1BPT0wgKHBvb2wpLAotICAgICAgICAgIEZBTFNFKTsKLSAgICB9Ci0KLSAgfSBlbHNlIHsKLSAgICAvKiBJbiB0aGlzIGNhc2Ugd2UnbGwgaGF2ZSB0byBjb25maWd1cmUgdHdvIGJ1ZmZlciBwb29sLiBGb3Igb3VyIGJ1ZmZlcgotICAgICAqIHBvb2wsIHdlJ2xsIG5lZWQgd2hhdCB0aGUgZHJpdmVyIG9uZSwgYW5kIG9uZSBtb3JlLCBzbyB3ZSBjYW4gZGVxdWV1ICovCi0gICAgb3duX21pbiA9IG9iai0+bWluX2J1ZmZlcnMgKyAxOwotICAgIG93bl9taW4gPSBNQVggKG93bl9taW4sIEdTVF9WNEwyX01JTl9CVUZGRVJTKTsKLQotICAgIC8qIGZvciB0aGUgZG93bnN0cmVhbSBwb29sLCB3ZSBrZWVwIHdoYXQgZG93bnN0cmVhbSB3YW50cywgdGhvdWdoIGVuc3VyZQotICAgICAqIGF0IGxlYXN0IGEgbWluaW11bSBpZiBkb3duc3RyZWFtIGRpZG4ndCBzdWdnZXN0IGFueXRoaW5nICh3ZSBhcmUKLSAgICAgKiBleHBlY3RpbmcgdGhlIGJhc2UgY2xhc3MgdG8gY3JlYXRlIGEgZGVmYXVsdCBvbmUgZm9yIHRoZSBjb250ZXh0KSAqLwotICAgIG1pbiA9IE1BWCAobWluLCBHU1RfVjRMMl9NSU5fQlVGRkVSUyk7Ci0KLSAgICAvKiBUbyBpbXBvcnQgd2UgbmVlZCB0aGUgb3RoZXIgcG9vbCB0byBob2xkIGF0IGxlYXN0IG93bl9taW4gKi8KLSAgICBpZiAob2JqLT5wb29sID09IHBvb2wpCi0gICAgICBtaW4gKz0gb3duX21pbjsKLSAgfQotCi0gIC8qIFJlcXVlc3QgYSBiaWdnZXIgbWF4LCBpZiBvbmUgd2FzIHN1Z2dlc3RlZCBidXQgaXQncyB0b28gc21hbGwgKi8KLSAgaWYgKG1heCAhPSAwKQotICAgIG1heCA9IE1BWCAobWluLCBtYXgpOwotCi0gIC8qIEZpcnN0IHN0ZXAsIGNvbmZpZ3VyZSBvdXIgb3duIHBvb2wgKi8KLSAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKG9iai0+cG9vbCk7Ci0KLSAgaWYgKG9iai0+bmVlZF92aWRlb19tZXRhIHx8IGhhc192aWRlb19tZXRhKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAob2JqLT5lbGVtZW50LCAiYWN0aXZhdGUgVmlkZW8gTWV0YSIpOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBjYXBzLCBzaXplLCBvd25fbWluLCAwKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChvYmotPmVsZW1lbnQsICJzZXR0aW5nIG93biBwb29sIGNvbmZpZyB0byAlIgotICAgICAgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7Ci0KLSAgLyogT3VyIHBvb2wgb2Z0ZW4gbmVlZCB0byBhZGp1c3QgdGhlIHZhbHVlICovCi0gIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKG9iai0+cG9vbCwgY29uZmlnKSkgewotICAgIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChvYmotPnBvb2wpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAob2JqLT5lbGVtZW50LCAib3duIHBvb2wgY29uZmlnIGNoYW5nZWQgdG8gJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7Ci0KLSAgICAvKiBvdXIgcG9vbCB3aWxsIGFkanVzdCB0aGUgbWF4aW11bSBidWZmZXIsIHdoaWNoIHdlIGFyZSBmaW5lIHdpdGggKi8KLSAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChvYmotPnBvb2wsIGNvbmZpZykpCi0gICAgICBnb3RvIGNvbmZpZ19mYWlsZWQ7Ci0gIH0KLQotICAvKiBOb3cgY29uZmlndXJlIHRoZSBvdGhlciBwb29sIGlmIGRpZmZlcmVudCAqLwotICBpZiAob2JqLT5wb29sICE9IHBvb2wpCi0gICAgb3RoZXJfcG9vbCA9IHBvb2w7Ci0KLSAgaWYgKG90aGVyX3Bvb2wpIHsKLSAgICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAob3RoZXJfcG9vbCk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfYWxsb2NhdG9yIChjb25maWcsIGFsbG9jYXRvciwgJnBhcmFtcyk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19zZXRfcGFyYW1zIChjb25maWcsIGNhcHMsIHNpemUsIG1pbiwgbWF4KTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwgInNldHRpbmcgb3RoZXIgcG9vbCBjb25maWcgdG8gJSIKLSAgICAgICAgR1NUX1BUUl9GT1JNQVQsIGNvbmZpZyk7Ci0KLSAgICAvKiBpZiBkb3duc3RyZWFtIHN1cHBvcnRzIHZpZGVvIG1ldGFkYXRhLCBhZGQgdGhpcyB0byB0aGUgcG9vbCBjb25maWcgKi8KLSAgICBpZiAoaGFzX3ZpZGVvX21ldGEpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwgImFjdGl2YXRlIFZpZGVvIE1ldGEiKTsKLSAgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICAgIEdTVF9CVUZGRVJfUE9PTF9PUFRJT05fVklERU9fTUVUQSk7Ci0gICAgfQotCi0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAob3RoZXJfcG9vbCwgY29uZmlnKSkgewotICAgICAgY29uZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcgKG90aGVyX3Bvb2wpOwotCi0gICAgICBpZiAoIWdzdF9idWZmZXJfcG9vbF9jb25maWdfdmFsaWRhdGVfcGFyYW1zIChjb25maWcsIGNhcHMsIHNpemUsIG1pbiwKLSAgICAgICAgICAgICAgbWF4KSkgewotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGNvbmZpZyk7Ci0gICAgICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKLSAgICAgIH0KLQotICAgICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAob3RoZXJfcG9vbCwgY29uZmlnKSkKLSAgICAgICAgZ290byBjb25maWdfZmFpbGVkOwotICAgIH0KLSAgfQotCi0gIGlmIChwb29sKSB7Ci0gICAgLyogRm9yIHNpbXBsaWNpdHksIHNpbXBseSByZWFkIGJhY2sgdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uLCBzbyBvdXIgYmFzZQotICAgICAqIGNsYXNzIGdldCB0aGUgcmlnaHQgaW5mb3JtYXRpb24gKi8KLSAgICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gICAgZ3N0X2J1ZmZlcl9wb29sX2NvbmZpZ19nZXRfcGFyYW1zIChjb25maWcsIE5VTEwsICZzaXplLCAmbWluLCAmbWF4KTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGNvbmZpZyk7Ci0gIH0KLQotICBpZiAodXBkYXRlKQotICAgIGdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsIHBvb2wsIHNpemUsIG1pbiwgbWF4KTsKLSAgZWxzZQotICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sIChxdWVyeSwgcG9vbCwgc2l6ZSwgbWluLCBtYXgpOwotCi0gIGlmIChhbGxvY2F0b3IpCi0gICAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKLQotICBpZiAocG9vbCkKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICByZXR1cm4gVFJVRTsKLQotcG9vbF9mYWlsZWQ6Ci0gIHsKLSAgICAvKiBzZXR1cF9wb29sIGFscmVhZHkgc2VuZCB0aGUgZXJyb3IgKi8KLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLWNvbmZpZ19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob2JqLT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gY29uZmlndXJlIGludGVybmFsIGJ1ZmZlciBwb29sLiIpKSwgKE5VTEwpKTsKLSAgICBnb3RvIGNsZWFudXA7Ci0gIH0KLW5vX3NpemU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAob2JqLT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJWaWRlbyBkZXZpY2UgZGlkIG5vdCBzdWdnZXN0IGFueSBidWZmZXIgc2l6ZS4iKSksIChOVUxMKSk7Ci0gICAgZ290byBjbGVhbnVwOwotICB9Ci1jbGVhbnVwOgotICB7Ci0gICAgaWYgKGFsbG9jYXRvcikKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGFsbG9jYXRvcik7Ci0KLSAgICBpZiAocG9vbCkKLSAgICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotbm9fZG93bnN0cmVhbV9wb29sOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKG9iai0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiTm8gZG93bnN0cmVhbSBwb29sIHRvIGltcG9ydCBmcm9tLiIpKSwKLSAgICAgICAgKCJXaGVuIGltcG9ydGluZyBETUFCVUYgb3IgVVNFUlBUUiwgd2UgbmVlZCBhIHBvb2wgdG8gaW1wb3J0IGZyb20iKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9vYmplY3RfcHJvcG9zZV9hbGxvY2F0aW9uIChHc3RWNGwyT2JqZWN0ICogb2JqLCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RCdWZmZXJQb29sICpwb29sOwotICAvKiB3ZSBuZWVkIGF0IGxlYXN0IDIgYnVmZmVycyB0byBvcGVyYXRlICovCi0gIGd1aW50IHNpemUsIG1pbiwgbWF4OwotICBHc3RDYXBzICpjYXBzOwotICBnYm9vbGVhbiBuZWVkX3Bvb2w7Ci0KLSAgLyogU2V0IGRlZmF1bHRzIGFsbG9jYXRpb24gcGFyYW1ldGVycyAqLwotICBzaXplID0gb2JqLT5pbmZvLnNpemU7Ci0gIG1pbiA9IEdTVF9WNEwyX01JTl9CVUZGRVJTOwotICBtYXggPSBWSURFT19NQVhfRlJBTUU7Ci0KLSAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24gKHF1ZXJ5LCAmY2FwcywgJm5lZWRfcG9vbCk7Ci0KLSAgaWYgKGNhcHMgPT0gTlVMTCkKLSAgICBnb3RvIG5vX2NhcHM7Ci0KLSAgaWYgKChwb29sID0gb2JqLT5wb29sKSkKLSAgICBnc3Rfb2JqZWN0X3JlZiAocG9vbCk7Ci0KLSAgaWYgKHBvb2wgIT0gTlVMTCkgewotICAgIEdzdENhcHMgKnBjYXBzOwotICAgIEdzdFN0cnVjdHVyZSAqY29uZmlnOwotCi0gICAgLyogd2UgaGFkIGEgcG9vbCwgY2hlY2sgY2FwcyAqLwotICAgIGNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX2dldF9wYXJhbXMgKGNvbmZpZywgJnBjYXBzLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwKLSAgICAgICAgIndlIGhhZCBhIHBvb2wgd2l0aCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBwY2Fwcyk7Ci0gICAgaWYgKCFnc3RfY2Fwc19pc19lcXVhbCAoY2FwcywgcGNhcHMpKSB7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGNvbmZpZyk7Ci0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgICAgIGdvdG8gZGlmZmVyZW50X2NhcHM7Ci0gICAgfQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoY29uZmlnKTsKLSAgfQotICBnc3RfdjRsMl9nZXRfZHJpdmVyX21pbl9idWZmZXJzIChvYmopOwotCi0gIG1pbiA9IE1BWCAob2JqLT5taW5fYnVmZmVycywgR1NUX1Y0TDJfTUlOX0JVRkZFUlMpOwotCi0gIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9wb29sIChxdWVyeSwgcG9vbCwgc2l6ZSwgbWluLCBtYXgpOwotCi0gIC8qIHdlIGFsc28gc3VwcG9ydCB2YXJpb3VzIG1ldGFkYXRhICovCi0gIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhIChxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUsIE5VTEwpOwotCi0gIGlmIChwb29sKQotICAgIGdzdF9vYmplY3RfdW5yZWYgKHBvb2wpOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotbm9fY2FwczoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKG9iai0+ZWxlbWVudCwgIm5vIGNhcHMgc3BlY2lmaWVkIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1kaWZmZXJlbnRfY2FwczoKLSAgewotICAgIC8qIGRpZmZlcmVudCBjYXBzLCB3ZSBjYW4ndCB1c2UgdGhpcyBwb29sICovCi0gICAgR1NUX0RFQlVHX09CSkVDVCAob2JqLT5lbGVtZW50LCAicG9vbCBoYXMgZGlmZmVyZW50IGNhcHMiKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJvYmplY3QuaCBiL3N5cy92NGwyL2dzdHY0bDJvYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmZjE2MS4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwyb2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgICAgICAgICAgICAyMDA2IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiBnc3R2NGwyb2JqZWN0Lmg6IGJhc2UgY2xhc3MgZm9yIFY0TDIgZWxlbWVudHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1Y0TDJfT0JKRUNUX0hfXwotI2RlZmluZSBfX0dTVF9WNEwyX09CSkVDVF9IX18KLQotI2luY2x1ZGUgImV4dC92aWRlb2RldjIuaCIKLSNpbmNsdWRlICJ2NGwyLXV0aWxzLmgiCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0cHVzaHNyYy5oPgotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyT2JqZWN0IEdzdFY0bDJPYmplY3Q7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMk9iamVjdENsYXNzSGVscGVyIEdzdFY0bDJPYmplY3RDbGFzc0hlbHBlcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyWHYgR3N0VjRsMlh2OwotCi0jaW5jbHVkZSA8Z3N0djRsMmJ1ZmZlcnBvb2wuaD4KLQotLyogc2l6ZSBvZiB2NGwyIGJ1ZmZlciBwb29sIGluIHN0cmVhbWluZyBjYXNlICovCi0jZGVmaW5lIEdTVF9WNEwyX01JTl9CVUZGRVJTIDIKLQotLyogbWF4IGZyYW1lIHdpZHRoL2hlaWdodCAqLwotI2RlZmluZSBHU1RfVjRMMl9NQVhfU0laRSAoMTw8MTUpIC8qIDJeMTUgPT0gMzI3NjggKi8KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1Y0TDJfSU9fTU9ERSAoZ3N0X3Y0bDJfaW9fbW9kZV9nZXRfdHlwZSAoKSkKLUdUeXBlIGdzdF92NGwyX2lvX21vZGVfZ2V0X3R5cGUgKHZvaWQpOwotCi0jZGVmaW5lIEdTVF9WNEwyX09CSkVDVChvYmopIChHc3RWNGwyT2JqZWN0ICopKG9iaikKLQotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1Y0TDJfSU9fQVVUTyAgICAgICAgICA9IDAsCi0gIEdTVF9WNEwyX0lPX1JXICAgICAgICAgICAgPSAxLAotICBHU1RfVjRMMl9JT19NTUFQICAgICAgICAgID0gMiwKLSAgR1NUX1Y0TDJfSU9fVVNFUlBUUiAgICAgICA9IDMsCi0gIEdTVF9WNEwyX0lPX0RNQUJVRiAgICAgICAgPSA0LAotICBHU1RfVjRMMl9JT19ETUFCVUZfSU1QT1JUID0gNQotfSBHc3RWNGwySU9Nb2RlOwotCi10eXBlZGVmIGdib29sZWFuICAoKkdzdFY0bDJHZXRJbk91dEZ1bmN0aW9uKSAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCBnaW50ICogaW5wdXQpOwotdHlwZWRlZiBnYm9vbGVhbiAgKCpHc3RWNGwyU2V0SW5PdXRGdW5jdGlvbikgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgZ2ludCBpbnB1dCk7Ci10eXBlZGVmIGdib29sZWFuICAoKkdzdFY0bDJVcGRhdGVGcHNGdW5jdGlvbikgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KTsKLQotI2RlZmluZSBHU1RfVjRMMl9XSURUSChvKSAgICAgICAgKEdTVF9WSURFT19JTkZPX1dJRFRIICgmKG8pLT5pbmZvKSkKLSNkZWZpbmUgR1NUX1Y0TDJfSEVJR0hUKG8pICAgICAgIChHU1RfVklERU9fSU5GT19IRUlHSFQgKCYobyktPmluZm8pKQotI2RlZmluZSBHU1RfVjRMMl9QSVhFTEZPUk1BVChvKSAgKChvKS0+Zm10ZGVzYy0+cGl4ZWxmb3JtYXQpCi0jZGVmaW5lIEdTVF9WNEwyX0ZQU19OKG8pICAgICAgICAoR1NUX1ZJREVPX0lORk9fRlBTX04gKCYobyktPmluZm8pKQotI2RlZmluZSBHU1RfVjRMMl9GUFNfRChvKSAgICAgICAgKEdTVF9WSURFT19JTkZPX0ZQU19EICgmKG8pLT5pbmZvKSkKLQotLyogc2ltcGxlIGNoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBpcyBvcGVuICovCi0jZGVmaW5lIEdTVF9WNEwyX0lTX09QRU4obykgICAgICAoKG8pLT52aWRlb19mZCA+IDApCi0KLS8qIGNoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBpcyAnYWN0aXZlJyAqLwotI2RlZmluZSBHU1RfVjRMMl9JU19BQ1RJVkUobykgICAgKChvKS0+YWN0aXZlKQotI2RlZmluZSBHU1RfVjRMMl9TRVRfQUNUSVZFKG8pICAgKChvKS0+YWN0aXZlID0gVFJVRSkKLSNkZWZpbmUgR1NUX1Y0TDJfU0VUX0lOQUNUSVZFKG8pICgobyktPmFjdGl2ZSA9IEZBTFNFKQotCi1zdHJ1Y3QgX0dzdFY0bDJPYmplY3QgewotICBHc3RFbGVtZW50ICogZWxlbWVudDsKLQotICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsgICAvKiBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICovCi0KLSAgLyogdGhlIHZpZGVvIGRldmljZSAqLwotICBjaGFyICp2aWRlb2RldjsKLQotICAvKiB0aGUgdmlkZW8tZGV2aWNlJ3MgZmlsZSBkZXNjcmlwdG9yICovCi0gIGdpbnQgdmlkZW9fZmQ7Ci0gIEdzdFY0bDJJT01vZGUgbW9kZTsKLQotICBnYm9vbGVhbiBhY3RpdmU7Ci0gIGdib29sZWFuIHN0cmVhbWluZzsKLQotICAvKiB0aGUgY3VycmVudCBmb3JtYXQgKi8KLSAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZGVzYzsKLSAgc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0gIEdzdFZpZGVvQWxpZ25tZW50IGFsaWduOwotCi0gIC8qIEZlYXR1cmVzICovCi0gIGdib29sZWFuIG5lZWRfdmlkZW9fbWV0YTsKLSAgZ2Jvb2xlYW4gaGFzX2FscGhhX2NvbXBvbmVudDsKLQotICAvKiBvbmx5IHVzZWQgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBNUExBTkUKLSAgICogbmIgcGxhbmVzIGlzIG1lYW5pbmcgb2YgdjRsMiBwbGFuZXMKLSAgICogdGhlIGdzdHJlYW1lciBlcXVpdmFsZW50IGlzIGdzdF9idWZmZXJfbl9tZW1vcnkKLSAgICovCi0gIGdpbnQgbl92NGwyX3BsYW5lczsKLQotICAvKiBXZSBjYWNoZSB0aGUgZnJhbWUgZHVyYXRpb24gaWYga25vd24gKi8KLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotCi0gIC8qIGlmIHRoZSBNUExBTkUgZGV2aWNlIHN1cHBvcnQgYm90aCBjb250aWd1b3VzIGFuZCBub24gY29udGlndW91cwotICAgKiBpdCBhbGxvd3MgdG8gc2VsZWN0IHdoaWNoIG9uZSB3ZSB3YW50LiBCdXQgd2UgcHJlZmVyZWRfbm9uX2NvbnRpZ3VvdXMKLSAgICogbm9uIGNvbnRpZ3VvdXMgbW9kZS4KLSAgICovCi0gIGdib29sZWFuIHByZWZlcmVkX25vbl9jb250aWd1b3VzOwotCi0gIC8qIFRoaXMgd2lsbCBiZSBzZXQgaWYgc3VwcG9ydGVkIGluIGRlY2lkZV9hbGxvY2F0aW9uLiBJdCBjYW4gYmUgdXNlZCB0bwotICAgKiBjYWxjdWxhdGUgdGhlIG1pbmltdW0gbGF0ZW5jeS4gKi8KLSAgZ3VpbnQzMiBtaW5fYnVmZmVyczsKLQotICAvKiBUaGlzIHdpbGwgYmUgc2V0IGlmIHN1cHBvcnRlZCBpbiBwcm9wb3NlIGFsbG9jYXRpb24uICovCi0gIGd1aW50MzIgbWluX2J1ZmZlcnNfZm9yX291dHB1dDsKLQotICAvKiB3YW50ZWQgbW9kZSAqLwotICBHc3RWNGwySU9Nb2RlIHJlcV9tb2RlOwotCi0gIC8qIG9wdGlvbmFsIHBvb2wgKi8KLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLQotICAvKiB0aGUgdmlkZW8gZGV2aWNlJ3MgY2FwYWJpbGl0aWVzICovCi0gIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgdmNhcDsKLSAgLyogb3BlbmVkIGRldmljZSBzcGVjaWZpYyBjYXBhYmlsaXRpZXMgKi8KLSAgZ3VpbnQzMiBkZXZpY2VfY2FwczsKLQotICAvKiB0aGUgdmlkZW8gZGV2aWNlJ3Mgd2luZG93IHByb3BlcnRpZXMgKi8KLSAgc3RydWN0IHY0bDJfd2luZG93IHZ3aW47Ci0KLSAgLyogc29tZSBtb3JlIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQgaW5wdXQncyBjYXBhYmlsaXRpZXMgKi8KLSAgc3RydWN0IHY0bDJfaW5wdXQgdmlucHV0OwotCi0gIC8qIGxpc3RzLi4uICovCi0gIEdTTGlzdCAqZm9ybWF0czsgICAgICAgICAgICAgIC8qIGxpc3Qgb2YgYXZhaWxhYmxlIGNhcHR1cmUgZm9ybWF0cyAqLwotICBHc3RDYXBzICpwcm9iZWRfY2FwczsKLQotICBHTGlzdCAqY29sb3JzOwotICBHTGlzdCAqbm9ybXM7Ci0gIEdMaXN0ICpjaGFubmVsczsKLSAgR0RhdGEgKmNvbnRyb2xzOwotCi0gIC8qIHByb3BlcnRpZXMgKi8KLSAgdjRsMl9zdGRfaWQgdHZfbm9ybTsKLSAgZ2NoYXIgKmNoYW5uZWw7Ci0gIGd1bG9uZyBmcmVxdWVuY3k7Ci0gIEdzdFN0cnVjdHVyZSAqZXh0cmFfY29udHJvbHM7Ci0gIGdib29sZWFuIGtlZXBfYXNwZWN0OwotICBHVmFsdWUgKnBhcjsKLQotICAvKiBYLW92ZXJsYXkgKi8KLSAgR3N0VjRsMlh2ICp4djsKLSAgZ3Vsb25nIHh3aW5kb3dfaWQ7Ci0KLSAgLyogZnVuY3MgKi8KLSAgR3N0VjRsMkdldEluT3V0RnVuY3Rpb24gIGdldF9pbl9vdXRfZnVuYzsKLSAgR3N0VjRsMlNldEluT3V0RnVuY3Rpb24gIHNldF9pbl9vdXRfZnVuYzsKLSAgR3N0VjRsMlVwZGF0ZUZwc0Z1bmN0aW9uIHVwZGF0ZV9mcHNfZnVuYzsKLQotICAvKiBRdWlya3MgKi8KLSAgLyogU2tpcHMgaW50ZXJsYWNpbmcgcHJvYmVzICovCi0gIGdib29sZWFuIG5ldmVyX2ludGVybGFjZWQ7Ci0gIC8qIEFsbG93IHRvIHNraXAgcmVhZGluZyBpbml0aWFsIGZvcm1hdCB0aHJvdWdoIEdfRk1ULiBTb21lIGRldmljZXMKLSAgICoganVzdCBmYWlscyBpZiB5b3UgZG9uJ3QgY2FsbCBTX0ZNVCBmaXJzdC4gKGV4OiBNMk0gZGVjb2RlcnMpICovCi0gIGdib29sZWFuIG5vX2luaXRpYWxfZm9ybWF0OwotfTsKLQotc3RydWN0IF9Hc3RWNGwyT2JqZWN0Q2xhc3NIZWxwZXIgewotICAvKiBwcm9iZWQgZGV2aWNlcyAqLwotICBHTGlzdCAqZGV2aWNlczsKLX07Ci0KLUdUeXBlIGdzdF92NGwyX29iamVjdF9nZXRfdHlwZSAodm9pZCk7Ci0KLSNkZWZpbmUgVjRMMl9TVERfT0JKRUNUX1BST1BTIFwKLSAgICBQUk9QX0RFVklDRSwgICAgICAgICAgICAgIFwKLSAgICBQUk9QX0RFVklDRV9OQU1FLCAgICAgICAgIFwKLSAgICBQUk9QX0RFVklDRV9GRCwgICAgICAgICAgIFwKLSAgICBQUk9QX0ZMQUdTLCAgICAgICAgICAgICAgIFwKLSAgICBQUk9QX0JSSUdIVE5FU1MsICAgICAgICAgIFwKLSAgICBQUk9QX0NPTlRSQVNULCAgICAgICAgICAgIFwKLSAgICBQUk9QX1NBVFVSQVRJT04sICAgICAgICAgIFwKLSAgICBQUk9QX0hVRSwgICAgICAgICAgICAgICAgIFwKLSAgICBQUk9QX1RWX05PUk0sICAgICAgICAgICAgIFwKLSAgICBQUk9QX0lPX01PREUsICAgICAgICAgICAgIFwKLSAgICBQUk9QX09VVFBVVF9JT19NT0RFLCAgICAgIFwKLSAgICBQUk9QX0NBUFRVUkVfSU9fTU9ERSwgICAgIFwKLSAgICBQUk9QX0VYVFJBX0NPTlRST0xTLCAgICAgIFwKLSAgICBQUk9QX1BJWEVMX0FTUEVDVF9SQVRJTywgIFwKLSAgICBQUk9QX0ZPUkNFX0FTUEVDVF9SQVRJTwotCi0vKiBjcmVhdGUvZGVzdHJveSAqLwotR3N0VjRsMk9iamVjdCogIGdzdF92NGwyX29iamVjdF9uZXcgICAgICAgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdjRsMl9idWZfdHlwZSAgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZGVmYXVsdF9kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VjRsMkdldEluT3V0RnVuY3Rpb24gZ2V0X2luX291dF9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFY0bDJTZXRJbk91dEZ1bmN0aW9uIHNldF9pbl9vdXRfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RWNGwyVXBkYXRlRnBzRnVuY3Rpb24gdXBkYXRlX2Zwc19mdW5jKTsKLQotdm9pZCAgICAgICAgICAgIGdzdF92NGwyX29iamVjdF9kZXN0cm95ICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KTsKLQotLyogcHJvcGVydGllcyAqLwotCi12b2lkICAgICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIgKEdPYmplY3RDbGFzcyAqIGdvYmplY3RfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBkZWZhdWx0X2RldmljZSk7Ci0KLXZvaWQgICAgICAgICBnc3RfdjRsMl9vYmplY3RfaW5zdGFsbF9tMm1fcHJvcGVydGllc19oZWxwZXIgKEdPYmplY3RDbGFzcyAqIGdvYmplY3RfY2xhc3MpOwotCi1nYm9vbGVhbiAgICAgZ3N0X3Y0bDJfb2JqZWN0X3NldF9wcm9wZXJ0eV9oZWxwZXIgICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwcm9wX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLWdib29sZWFuICAgICBnc3RfdjRsMl9vYmplY3RfZ2V0X3Byb3BlcnR5X2hlbHBlciAgICAgICAoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci0vKiBvcGVuL2Nsb3NlICovCi1nYm9vbGVhbiAgICAgZ3N0X3Y0bDJfb2JqZWN0X29wZW4gICAgICAgICAgICAoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCk7Ci1nYm9vbGVhbiAgICAgZ3N0X3Y0bDJfb2JqZWN0X29wZW5fc2hhcmVkICAgICAoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCwgR3N0VjRsMk9iamVjdCAqb3RoZXIpOwotZ2Jvb2xlYW4gICAgIGdzdF92NGwyX29iamVjdF9jbG9zZSAgICAgICAgICAgKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QpOwotCi0vKiBwcm9iaW5nICovCi0jaWYgMAotY29uc3QgR0xpc3QqIGdzdF92NGwyX3Byb2JlX2dldF9wcm9wZXJ0aWVzICAoR3N0UHJvcGVydHlQcm9iZSAqIHByb2JlKTsKLQotdm9pZCAgICAgICAgIGdzdF92NGwyX3Byb2JlX3Byb2JlX3Byb3BlcnR5ICAoR3N0UHJvcGVydHlQcm9iZSAqIHByb2JlLCBndWludCBwcm9wX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1BhcmFtU3BlYyAqIHBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKioga2xhc3NfZGV2aWNlcyk7Ci1nYm9vbGVhbiAgICAgZ3N0X3Y0bDJfcHJvYmVfbmVlZHNfcHJvYmUgICAgIChHc3RQcm9wZXJ0eVByb2JlICogcHJvYmUsIGd1aW50IHByb3BfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHUGFyYW1TcGVjICogcHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqKiBrbGFzc19kZXZpY2VzKTsKLUdWYWx1ZUFycmF5KiBnc3RfdjRsMl9wcm9iZV9nZXRfdmFsdWVzICAgICAgKEdzdFByb3BlcnR5UHJvYmUgKiBwcm9iZSwgZ3VpbnQgcHJvcF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdQYXJhbVNwZWMgKiBwc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaXN0ICoqIGtsYXNzX2RldmljZXMpOwotI2VuZGlmCi0KLUdzdENhcHMqICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9hbGxfY2FwcyAodm9pZCk7Ci0KLUdzdENhcHMqICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9yYXdfY2FwcyAodm9pZCk7Ci0KLUdzdENhcHMqICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9jb2RlY19jYXBzICh2b2lkKTsKLQotZ2ludCAgICAgICAgICBnc3RfdjRsMl9vYmplY3RfZXh0cmFwb2xhdGVfc3RyaWRlIChjb25zdCBHc3RWaWRlb0Zvcm1hdEluZm8gKiBmaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwbGFuZSwgZ2ludCBzdHJpZGUpOwotCi1nYm9vbGVhbiAgICAgIGdzdF92NGwyX29iamVjdF9zZXRfZm9ybWF0ICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdENhcHMgKiBjYXBzLCBHc3RWNGwyRXJyb3IgKmVycm9yKTsKLWdib29sZWFuICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3RyeV9mb3JtYXQgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0Q2FwcyAqIGNhcHMsIEdzdFY0bDJFcnJvciAqZXJyb3IpOwotCi1nYm9vbGVhbiAgICAgIGdzdF92NGwyX29iamVjdF9jYXBzX2VxdWFsICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdENhcHMgKiBjYXBzKTsKLQotZ2Jvb2xlYW4gICAgICBnc3RfdjRsMl9vYmplY3RfdW5sb2NrICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KTsKLWdib29sZWFuICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9ja19zdG9wIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCk7Ci0KLWdib29sZWFuICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3N0b3AgICAgICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCk7Ci0KLUdzdENhcHMgKiAgICAgZ3N0X3Y0bDJfb2JqZWN0X3Byb2JlX2NhcHMgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICogZmlsdGVyKTsKLUdzdENhcHMgKiAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9jYXBzICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RDYXBzICogZmlsdGVyKTsKLQotZ2Jvb2xlYW4gICAgICBnc3RfdjRsMl9vYmplY3RfYWNxdWlyZV9mb3JtYXQgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFZpZGVvSW5mbyAqIGluZm8pOwotCi1nYm9vbGVhbiAgICAgIGdzdF92NGwyX29iamVjdF9zZXRfY3JvcCAgICAoR3N0VjRsMk9iamVjdCAqIG9iaik7Ci0KLWdib29sZWFuICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2RlY2lkZV9hbGxvY2F0aW9uIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotZ2Jvb2xlYW4gICAgICBnc3RfdjRsMl9vYmplY3RfcHJvcG9zZV9hbGxvY2F0aW9uIChHc3RWNGwyT2JqZWN0ICogb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RRdWVyeSAqIHF1ZXJ5KTsKLQotR3N0U3RydWN0dXJlICogZ3N0X3Y0bDJfb2JqZWN0X3Y0bDJmb3VyY2NfdG9fc3RydWN0dXJlIChndWludDMyIGZvdXJjYyk7Ci0KLQotI2RlZmluZSBHU1RfSU1QTEVNRU5UX1Y0TDJfUFJPQkVfTUVUSE9EUyhUeXBlX0NsYXNzLCBpbnRlcmZhY2VfYXNfZnVuY3Rpb24pICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9wcm9iZV9wcm9iZV9wcm9wZXJ0eSAoR3N0UHJvcGVydHlQcm9iZSAqIHByb2JlLCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwcm9wX2lkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdQYXJhbVNwZWMgKiBwc3BlYykgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGVfQ2xhc3MgKnRoaXNfY2xhc3MgPSAoVHlwZV9DbGFzcyopIEdfT0JKRUNUX0dFVF9DTEFTUyAocHJvYmUpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3Y0bDJfcHJvYmVfcHJvYmVfcHJvcGVydHkgKHByb2JlLCBwcm9wX2lkLCBwc3BlYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoaXNfY2xhc3MtPnY0bDJfY2xhc3NfZGV2aWNlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3Byb2JlX25lZWRzX3Byb2JlIChHc3RQcm9wZXJ0eVByb2JlICogcHJvYmUsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHByb3BfaWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1BhcmFtU3BlYyAqIHBzcGVjKSAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZV9DbGFzcyAqdGhpc19jbGFzcyA9IChUeXBlX0NsYXNzKikgR19PQkpFQ1RfR0VUX0NMQVNTIChwcm9iZSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gZ3N0X3Y0bDJfcHJvYmVfbmVlZHNfcHJvYmUgKHByb2JlLCBwcm9wX2lkLCBwc3BlYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoaXNfY2xhc3MtPnY0bDJfY2xhc3NfZGV2aWNlcyk7ICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgR1ZhbHVlQXJyYXkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfcHJvYmVfZ2V0X3ZhbHVlcyAoR3N0UHJvcGVydHlQcm9iZSAqIHByb2JlLCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwcm9wX2lkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdQYXJhbVNwZWMgKiBwc3BlYykgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUeXBlX0NsYXNzICp0aGlzX2NsYXNzID0gKFR5cGVfQ2xhc3MqKSBHX09CSkVDVF9HRVRfQ0xBU1MgKHByb2JlKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBnc3RfdjRsMl9wcm9iZV9nZXRfdmFsdWVzIChwcm9iZSwgcHJvcF9pZCwgcHNwZWMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGlzX2NsYXNzLT52NGwyX2NsYXNzX2RldmljZXMpOyAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF9wcm9wZXJ0eV9wcm9iZV9pbnRlcmZhY2VfaW5pdCAoR3N0UHJvcGVydHlQcm9iZUludGVyZmFjZSAqIGlmYWNlKSBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPmdldF9wcm9wZXJ0aWVzID0gZ3N0X3Y0bDJfcHJvYmVfZ2V0X3Byb3BlcnRpZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZmFjZS0+cHJvYmVfcHJvcGVydHkgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3Byb2JlX3Byb2JlX3Byb3BlcnR5OyAgICAgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5uZWVkc19wcm9iZSA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfcHJvYmVfbmVlZHNfcHJvYmU7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPmdldF92YWx1ZXMgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3Byb2JlX2dldF92YWx1ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX19HU1RfVjRMMl9PQkpFQ1RfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9nc3R2NGwycmFkaW8uYyBiL3N5cy92NGwyL2dzdHY0bDJyYWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc0ZTdlLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJyYWRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNTgyICswLDAgQEAKLS8qIEdTdHJlYW1lciB2NGwyIHJhZGlvIHR1bmVyIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBbGV4ZXkgQ2hlcm5vdiA8NGVybm92QGdtYWlsLmNvbT4KLSAqCi0gKiBnc3R2NGwycmFkaW8uYyAtIFY0TDIgcmFkaW8gdHVuZXIgZWxlbWVudAotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qKgotICogU0VDVElPTjplbGVtZW50LXY0bDJyYWRpbwotICoKLSAqIHY0bDJyYWRpbyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHJhZGlvIGRldmljZQotICogYW5kIHRvIHR1bmUgaXQgdG8gZGlmZmVyZW50IHJhZGlvc3RhdGlvbnMuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2NGwycmFkaW8gZGV2aWNlPS9kZXYvcmFkaW8wIGZyZXF1ZW5jeT0xMDEyMDAwMDAKLSAqIGdzdC1sYXVuY2gtMS4wIGFsc2FzcmMgZGV2aWNlPWh3OjEgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYWxzYXNpbmsKLSAqIF18Ci0gKiBGaXJzdCBwaXBlbGluZSB0dW5lcyB0aGUgcmFkaW8gZGV2aWNlIC9kZXYvcmFkaW8wIHRvIHN0YXRpb24gMTAxLjIgTUh6LAotICogc2Vjb25kIHBpcGVsaW5lIGNvbm5lY3RzIGRpZ2l0YWwgYXVkaW8gb3V0IChodzoxKSB0byBkZWZhdWx0IHNvdW5kIGNhcmQuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi0jaW5jbHVkZSAiZ3N0djRsMnR1bmVyLmgiCi0jaW5jbHVkZSAiZ3N0djRsMnJhZGlvLmgiCi0jaW5jbHVkZSAidjRsMl9jYWxscy5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh2NGwycmFkaW9fZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgdjRsMnJhZGlvX2RlYnVnCi0KLSNkZWZpbmUgREVGQVVMVF9QUk9QX0RFVklDRSAiL2Rldi9yYWRpbzAiCi0jZGVmaW5lIE1JTl9GUkVRVUVOQ1kJCSA4NzUwMDAwMAotI2RlZmluZSBERUZBVUxUX0ZSRVFVRU5DWQkxMDAwMDAwMDAKLSNkZWZpbmUgTUFYX0ZSRVFVRU5DWQkJMTA4MDAwMDAwCi0KLWVudW0KLXsKLSAgQVJHXzAsCi0gIEFSR19ERVZJQ0UsCi0gIEFSR19GUkVRVUVOQ1kKLX07Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJyYWRpb19maWxsX2NoYW5uZWxfbGlzdCAoR3N0VjRsMlJhZGlvICogcmFkaW8pCi17Ci0gIGludCByZXM7Ci0gIHN0cnVjdCB2NGwyX3R1bmVyIHZ0dW47Ci0gIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgdmM7Ci0gIEdzdFY0bDJUdW5lckNoYW5uZWwgKnY0bDJjaGFubmVsOwotICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWw7Ci0KLSAgR3N0RWxlbWVudCAqZTsKLQotICBHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0OwotCi0gIGUgPSBHU1RfRUxFTUVOVCAocmFkaW8pOwotICB2NGwyb2JqZWN0ID0gcmFkaW8tPnY0bDJvYmplY3Q7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZSwgImdldHRpbmcgYXVkaW8gZW51bWVyYXRpb24iKTsKLSAgR1NUX1Y0TDJfQ0hFQ0tfT1BFTiAodjRsMm9iamVjdCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZSwgIiAgYXVkaW8gaW5wdXQiKTsKLQotICBtZW1zZXQgKCZ2YywgMCwgc2l6ZW9mICh2YykpOwotCi0gIHJlcyA9IHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfUVVFUllDQVAsICZ2Yyk7Ci0gIGlmIChyZXMgPCAwKQotICAgIGdvdG8gY2Fwc19mYWlsZWQ7Ci0KLSAgaWYgKHZjLmNhcGFiaWxpdGllcyAmIFY0TDJfQ0FQX0RFVklDRV9DQVBTKQotICAgIHY0bDJvYmplY3QtPmRldmljZV9jYXBzID0gdmMuZGV2aWNlX2NhcHM7Ci0gIGVsc2UKLSAgICB2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyA9IHZjLmNhcGFiaWxpdGllczsKLQotICBpZiAoISh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmIFY0TDJfQ0FQX1RVTkVSKSkKLSAgICBnb3RvIG5vdF9hX3R1bmVyOwotCi0gIC8qIGdldHRpbmcgYXVkaW8gaW5wdXQgKi8KLSAgbWVtc2V0ICgmdnR1biwgMCwgc2l6ZW9mICh2dHVuKSk7Ci0gIHZ0dW4uaW5kZXggPSAwOwotCi0gIHJlcyA9IHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfR19UVU5FUiwgJnZ0dW4pOwotICBpZiAocmVzIDwgMCkKLSAgICBnb3RvIHR1bmVyX2ZhaWxlZDsKLQotICBHU1RfTE9HX09CSkVDVCAoZSwgIiAgIGluZGV4OiAgICAgJWQiLCB2dHVuLmluZGV4KTsKLSAgR1NUX0xPR19PQkpFQ1QgKGUsICIgICBuYW1lOiAgICAgICclcyciLCB2dHVuLm5hbWUpOwotICBHU1RfTE9HX09CSkVDVCAoZSwgIiAgIHR5cGU6ICAgICAgJTAxNngiLCAoZ3VpbnQpIHZ0dW4udHlwZSk7Ci0gIEdTVF9MT0dfT0JKRUNUIChlLCAiICAgY2FwczogICAgICAlMDE2eCIsIChndWludCkgdnR1bi5jYXBhYmlsaXR5KTsKLSAgR1NUX0xPR19PQkpFQ1QgKGUsICIgICBybG93OiAgICAgICUwMTZ4IiwgKGd1aW50KSB2dHVuLnJhbmdlbG93KTsKLSAgR1NUX0xPR19PQkpFQ1QgKGUsICIgICByaGlnaDogICAgICUwMTZ4IiwgKGd1aW50KSB2dHVuLnJhbmdlaGlnaCk7Ci0gIEdTVF9MT0dfT0JKRUNUIChlLCAiICAgYXVkbW9kZTogICAlMDE2eCIsIChndWludCkgdnR1bi5hdWRtb2RlKTsKLQotICB2NGwyY2hhbm5lbCA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfVjRMMl9UVU5FUl9DSEFOTkVMLCBOVUxMKTsKLSAgY2hhbm5lbCA9IEdTVF9UVU5FUl9DSEFOTkVMICh2NGwyY2hhbm5lbCk7Ci0gIGNoYW5uZWwtPmxhYmVsID0gZ19zdHJkdXAgKChjb25zdCBnY2hhciAqKSB2dHVuLm5hbWUpOwotICBjaGFubmVsLT5mbGFncyA9IEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSB8IEdTVF9UVU5FUl9DSEFOTkVMX0FVRElPOwotICB2NGwyY2hhbm5lbC0+aW5kZXggPSAwOwotICB2NGwyY2hhbm5lbC0+dHVuZXIgPSAwOwotCi0gIGNoYW5uZWwtPmZyZXFfbXVsdGlwbGljYXRvciA9Ci0gICAgICA2Mi41ICogKCh2dHVuLmNhcGFiaWxpdHkgJiBWNEwyX1RVTkVSX0NBUF9MT1cpID8gMSA6IDEwMDApOwotICBjaGFubmVsLT5taW5fZnJlcXVlbmN5ID0gdnR1bi5yYW5nZWxvdyAqIGNoYW5uZWwtPmZyZXFfbXVsdGlwbGljYXRvcjsKLSAgY2hhbm5lbC0+bWF4X2ZyZXF1ZW5jeSA9IHZ0dW4ucmFuZ2VoaWdoICogY2hhbm5lbC0+ZnJlcV9tdWx0aXBsaWNhdG9yOwotICBjaGFubmVsLT5taW5fc2lnbmFsID0gMDsKLSAgY2hhbm5lbC0+bWF4X3NpZ25hbCA9IDB4ZmZmZjsKLQotICB2NGwyb2JqZWN0LT5jaGFubmVscyA9Ci0gICAgICBnX2xpc3RfcHJlcGVuZCAodjRsMm9iamVjdC0+Y2hhbm5lbHMsIChncG9pbnRlcikgY2hhbm5lbCk7Ci0KLSAgdjRsMm9iamVjdC0+Y2hhbm5lbHMgPSBnX2xpc3RfcmV2ZXJzZSAodjRsMm9iamVjdC0+Y2hhbm5lbHMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGUsICJkb25lIik7Ci0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdHVuZXJfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGUsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIkZhaWxlZCB0byBnZXQgc2V0dGluZ3Mgb2YgdHVuZXIgJWQgb24gZGV2aWNlICclcycuIiksCi0gICAgICAgICAgICB2dHVuLmluZGV4LCB2NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotY2Fwc19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZSwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnLiIpLAotICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLW5vdF9hX3R1bmVyOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKGUsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIkRldmljZSAnJXMnIGlzIG5vdCBhIHR1bmVyLiIpLAotICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMnJhZGlvX2dldF9pbnB1dCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIGdpbnQgKiBpbnB1dCkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInRyeWluZyB0byBnZXQgcmFkaW8gaW5wdXQiKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoIXY0bDJvYmplY3QtPmNoYW5uZWxzKQotICAgIGdvdG8gaW5wdXRfZmFpbGVkOwotCi0gICppbnB1dCA9IDA7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImlucHV0OiAlZCIsIDApOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW5wdXRfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRmFpbGVkIHRvIGdldCByYWRpbyBpbnB1dCBvbiBkZXZpY2UgJyVzJy4gIiksCi0gICAgICAgICAgICB2NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwycmFkaW9fc2V0X2lucHV0IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgZ2ludCBpbnB1dCkKLXsKLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInRyeWluZyB0byBzZXQgaW5wdXQgdG8gJWQiLCBpbnB1dCk7Ci0KLSAgaWYgKCFHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKCF2NGwyb2JqZWN0LT5jaGFubmVscykKLSAgICBnb3RvIGlucHV0X2ZhaWxlZDsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWlucHV0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIpLAotICAgICAgICAgICAgaW5wdXQsIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJyYWRpb19zZXRfbXV0ZV9vbiAoR3N0VjRsMlJhZGlvICogcmFkaW8sIGdib29sZWFuIG9uKQotewotICBnaW50IHJlczsKLSAgc3RydWN0IHY0bDJfY29udHJvbCB2Y3RybDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChyYWRpbywgInNldHRpbmcgY3VycmVudCB0dW5lciBtdXRlIHN0YXRlOiAlZCIsIG9uKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHJhZGlvLT52NGwyb2JqZWN0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgbWVtc2V0ICgmdmN0cmwsIDAsIHNpemVvZiAodmN0cmwpKTsKLSAgdmN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFOwotICB2Y3RybC52YWx1ZSA9IG9uOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHJhZGlvLCAicmFkaW8gZmQ6ICVkIiwgcmFkaW8tPnY0bDJvYmplY3QtPnZpZGVvX2ZkKTsKLQotICByZXMgPSBpb2N0bCAocmFkaW8tPnY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfU19DVFJMLCAmdmN0cmwpOwotICBHU1RfREVCVUdfT0JKRUNUIChyYWRpbywgIm11dGUgc3RhdGUgY2hhbmdlIHJlc3VsdDogJWQiLCByZXMpOwotICBpZiAocmVzIDwgMCkKLSAgICBnb3RvIGZyZXFfZmFpbGVkOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZnJlcV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HIChyYWRpbywgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRmFpbGVkIHRvIGNoYW5nZSBtdXRlIHN0YXRlIGZvciBkZXZpY2UgJyVzJy4iKSwKLSAgICAgICAgICAgIHJhZGlvLT52NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwycmFkaW9fc2V0X211dGUgKEdzdFY0bDJSYWRpbyAqIHJhZGlvKQotewotICByZXR1cm4gZ3N0X3Y0bDJyYWRpb19zZXRfbXV0ZV9vbiAocmFkaW8sIFRSVUUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwycmFkaW9fc2V0X3VubXV0ZSAoR3N0VjRsMlJhZGlvICogcmFkaW8pCi17Ci0gIHJldHVybiBnc3RfdjRsMnJhZGlvX3NldF9tdXRlX29uIChyYWRpbywgRkFMU0UpOwotfQotCi1HU1RfSU1QTEVNRU5UX1Y0TDJfVFVORVJfTUVUSE9EUyAoR3N0VjRsMlJhZGlvLCBnc3RfdjRsMnJhZGlvKTsKLQotc3RhdGljIHZvaWQgZ3N0X3Y0bDJyYWRpb191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLAotICAgIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJyYWRpb190dW5lcl9pbnRlcmZhY2VfcmVpbml0IChHc3RUdW5lckludGVyZmFjZSAqIGlmYWNlKQotewotICBnc3RfdjRsMnJhZGlvX3R1bmVyX2ludGVyZmFjZV9pbml0IChpZmFjZSk7Ci19Ci0KLSNkZWZpbmUgZ3N0X3Y0bDJyYWRpb19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoR3N0VjRsMlJhZGlvLCBnc3RfdjRsMnJhZGlvLCBHU1RfVFlQRV9FTEVNRU5ULAotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfVVJJX0hBTkRMRVIsCi0gICAgICAgIGdzdF92NGwycmFkaW9fdXJpX2hhbmRsZXJfaW5pdCk7Ci0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UVU5FUiwKLSAgICAgICAgZ3N0X3Y0bDJyYWRpb190dW5lcl9pbnRlcmZhY2VfcmVpbml0KSk7Ci0KLXN0YXRpYyB2b2lkIGdzdF92NGwycmFkaW9fc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3Y0bDJyYWRpb19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3RfdjRsMnJhZGlvX2ZpbmFsaXplIChHc3RWNGwyUmFkaW8gKiByYWRpbyk7Ci1zdGF0aWMgdm9pZCBnc3RfdjRsMnJhZGlvX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF92NGwycmFkaW9fY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotc3RhdGljIHZvaWQKLWdzdF92NGwycmFkaW9fY2xhc3NfaW5pdCAoR3N0VjRsMlJhZGlvQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmdzdGVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGVsZW1lbnRfY2xhc3MgPSAoR3N0RWxlbWVudENsYXNzICopIGtsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBnc3RfdjRsMnJhZGlvX2Rpc3Bvc2U7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gKEdPYmplY3RGaW5hbGl6ZUZ1bmMpIGdzdF92NGwycmFkaW9fZmluYWxpemU7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdzdF92NGwycmFkaW9fc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdjRsMnJhZGlvX2dldF9wcm9wZXJ0eTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBBUkdfREVWSUNFLAotICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZyAoImRldmljZSIsICJSYWRpbyBkZXZpY2UgbG9jYXRpb24iLAotICAgICAgICAgICJWaWRlbzRMaW51eDIgcmFkaW8gZGV2aWNlIGxvY2F0aW9uIiwKLSAgICAgICAgICBERUZBVUxUX1BST1BfREVWSUNFLCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIEFSR19GUkVRVUVOQ1ksCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiZnJlcXVlbmN5IiwgIlN0YXRpb24gZnJlcXVlbmN5IiwKLSAgICAgICAgICAiU3RhdGlvbiBmcmVxdWVuY3kgaW4gSHoiLAotICAgICAgICAgIE1JTl9GUkVRVUVOQ1ksIE1BWF9GUkVRVUVOQ1ksIERFRkFVTFRfRlJFUVVFTkNZLCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIGdzdGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJyYWRpb19jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGdzdGVsZW1lbnRfY2xhc3MsCi0gICAgICAiUmFkaW8gKHZpZGVvNGxpbnV4MikgVHVuZXIiLAotICAgICAgIlR1bmVyIiwKLSAgICAgICJDb250cm9scyBhIFZpZGVvNExpbnV4MiByYWRpbyBkZXZpY2UiLAotICAgICAgIkFsZXhleSBDaGVybm92IDw0ZXJub3ZAZ21haWwuY29tPiIpOwotCi0gIGtsYXNzLT52NGwyX2NsYXNzX2RldmljZXMgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2NGwycmFkaW9fZGVidWcsICJ2NGwycmFkaW8iLCAwLAotICAgICAgIlY0bDIgcmFkaW8gZWxlbWVudCIpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJyYWRpb19pbml0IChHc3RWNGwyUmFkaW8gKiBmaWx0ZXIpCi17Ci0gIGZpbHRlci0+djRsMm9iamVjdCA9IGdzdF92NGwyX29iamVjdF9uZXcgKEdTVF9FTEVNRU5UIChmaWx0ZXIpLAotICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLCBERUZBVUxUX1BST1BfREVWSUNFLAotICAgICAgZ3N0X3Y0bDJyYWRpb19nZXRfaW5wdXQsIGdzdF92NGwycmFkaW9fc2V0X2lucHV0LCBOVUxMKTsKLQotICBmaWx0ZXItPnY0bDJvYmplY3QtPmZyZXF1ZW5jeSA9IERFRkFVTFRfRlJFUVVFTkNZOwotICBnX2ZyZWUgKGZpbHRlci0+djRsMm9iamVjdC0+dmlkZW9kZXYpOwotICBmaWx0ZXItPnY0bDJvYmplY3QtPnZpZGVvZGV2ID0gZ19zdHJkdXAgKERFRkFVTFRfUFJPUF9ERVZJQ0UpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJyYWRpb19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RWNGwyUmFkaW8gKnJhZGlvID0gR1NUX1Y0TDJSQURJTyAob2JqZWN0KTsKLSAgZ3N0X3Y0bDJfY2xvc2UgKHJhZGlvLT52NGwyb2JqZWN0KTsKLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMnJhZGlvX2ZpbmFsaXplIChHc3RWNGwyUmFkaW8gKiByYWRpbykKLXsKLSAgZ3N0X3Y0bDJfb2JqZWN0X2Rlc3Ryb3kgKHJhZGlvLT52NGwyb2JqZWN0KTsKLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplICgoR09iamVjdCAqKSAocmFkaW8pKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMnJhZGlvX29wZW4gKEdzdFY0bDJSYWRpbyAqIHJhZGlvKQotewotICBHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0OwotCi0gIHY0bDJvYmplY3QgPSByYWRpby0+djRsMm9iamVjdDsKLSAgaWYgKGdzdF92NGwyX29wZW4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBnc3RfdjRsMnJhZGlvX2ZpbGxfY2hhbm5lbF9saXN0IChyYWRpbyk7Ci0gIGVsc2UKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMnJhZGlvX3NldF9kZWZhdWx0cyAoR3N0VjRsMlJhZGlvICogcmFkaW8pCi17Ci0gIEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3Q7Ci0gIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCA9IE5VTEw7Ci0gIEdzdFR1bmVyICp0dW5lcjsKLQotICB2NGwyb2JqZWN0ID0gcmFkaW8tPnY0bDJvYmplY3Q7Ci0KLSAgaWYgKCFHU1RfSVNfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpKQotICAgIHJldHVybjsKLQotICB0dW5lciA9IEdTVF9UVU5FUiAodjRsMm9iamVjdC0+ZWxlbWVudCk7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPmNoYW5uZWwpCi0gICAgY2hhbm5lbCA9IGdzdF90dW5lcl9maW5kX2NoYW5uZWxfYnlfbmFtZSAodHVuZXIsIHY0bDJvYmplY3QtPmNoYW5uZWwpOwotICBpZiAoY2hhbm5lbCkgewotICAgIGdzdF90dW5lcl9zZXRfY2hhbm5lbCAodHVuZXIsIGNoYW5uZWwpOwotICB9IGVsc2UgewotICAgIGNoYW5uZWwgPQotICAgICAgICBHU1RfVFVORVJfQ0hBTk5FTCAoZ3N0X3R1bmVyX2dldF9jaGFubmVsIChHU1RfVFVORVIKLSAgICAgICAgICAgICh2NGwyb2JqZWN0LT5lbGVtZW50KSkpOwotICAgIGlmIChjaGFubmVsKSB7Ci0gICAgICBnX2ZyZWUgKHY0bDJvYmplY3QtPmNoYW5uZWwpOwotICAgICAgdjRsMm9iamVjdC0+Y2hhbm5lbCA9IGdfc3RyZHVwIChjaGFubmVsLT5sYWJlbCk7Ci0gICAgICBnc3RfdHVuZXJfY2hhbm5lbF9jaGFuZ2VkICh0dW5lciwgY2hhbm5lbCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNoYW5uZWwKLSAgICAgICYmIEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHIChjaGFubmVsLCBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kpKSB7Ci0gICAgaWYgKHY0bDJvYmplY3QtPmZyZXF1ZW5jeSAhPSAwKSB7Ci0gICAgICBnc3RfdHVuZXJfc2V0X2ZyZXF1ZW5jeSAodHVuZXIsIGNoYW5uZWwsIHY0bDJvYmplY3QtPmZyZXF1ZW5jeSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHY0bDJvYmplY3QtPmZyZXF1ZW5jeSA9IGdzdF90dW5lcl9nZXRfZnJlcXVlbmN5ICh0dW5lciwgY2hhbm5lbCk7Ci0gICAgICBpZiAodjRsMm9iamVjdC0+ZnJlcXVlbmN5ID09IDApIHsKLSAgICAgICAgLyogZ3Vlc3MgKi8KLSAgICAgICAgZ3N0X3R1bmVyX3NldF9mcmVxdWVuY3kgKHR1bmVyLCBjaGFubmVsLCBNSU5fRlJFUVVFTkNZKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJyYWRpb19zdGFydCAoR3N0VjRsMlJhZGlvICogcmFkaW8pCi17Ci0gIGlmICghZ3N0X3Y0bDJyYWRpb19vcGVuIChyYWRpbykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGdzdF92NGwycmFkaW9fc2V0X2RlZmF1bHRzIChyYWRpbyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJyYWRpb19zdG9wIChHc3RWNGwyUmFkaW8gKiByYWRpbykKLXsKLSAgaWYgKCFnc3RfdjRsMl9vYmplY3RfY2xvc2UgKHJhZGlvLT52NGwyb2JqZWN0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3Y0bDJyYWRpb19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RWNGwyUmFkaW8gKnJhZGlvOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7Ci0KLSAgcmFkaW8gPSBHU1RfVjRMMlJBRElPIChlbGVtZW50KTsKLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6Ci0gICAgICAvKnN0YXJ0IHJhZGlvICovCi0gICAgICBpZiAoIWdzdF92NGwycmFkaW9fc3RhcnQgKHJhZGlvKSkKLSAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19QTEFZSU5HOgotICAgICAgLyp1bm11dGUgcmFkaW8gKi8KLSAgICAgIGlmICghZ3N0X3Y0bDJyYWRpb19zZXRfdW5tdXRlIChyYWRpbykpCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QTEFZSU5HX1RPX1BBVVNFRDoKLSAgICAgIC8qbXV0ZSByYWRpbyAqLwotICAgICAgaWYgKCFnc3RfdjRsMnJhZGlvX3NldF9tdXRlIChyYWRpbykpCi0gICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19OVUxMOgotICAgICAgLypzdG9wIHJhZGlvICovCi0gICAgICBpZiAoIWdzdF92NGwycmFkaW9fc3RvcCAocmFkaW8pKQotICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJyYWRpb19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCi0gICAgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VjRsMlJhZGlvICpyYWRpbyA9IEdTVF9WNEwyUkFESU8gKG9iamVjdCk7Ci0gIGdpbnQgZnJlcXVlbmN5OwotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIEFSR19ERVZJQ0U6Ci0gICAgICBnX2ZyZWUgKHJhZGlvLT52NGwyb2JqZWN0LT52aWRlb2Rldik7Ci0gICAgICByYWRpby0+djRsMm9iamVjdC0+dmlkZW9kZXYgPQotICAgICAgICAgIGdfc3RyZHVwICgoZ2NoYXIgKikgZ192YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBUkdfRlJFUVVFTkNZOgotICAgICAgZnJlcXVlbmN5ID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICBpZiAoZnJlcXVlbmN5ID49IE1JTl9GUkVRVUVOQ1kgJiYgZnJlcXVlbmN5IDw9IE1BWF9GUkVRVUVOQ1kpIHsKLSAgICAgICAgcmFkaW8tPnY0bDJvYmplY3QtPmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKLSAgICAgICAgZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSAocmFkaW8tPnY0bDJvYmplY3QsIDAsCi0gICAgICAgICAgICByYWRpby0+djRsMm9iamVjdC0+ZnJlcXVlbmN5KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwycmFkaW9fZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFY0bDJSYWRpbyAqcmFkaW8gPSBHU1RfVjRMMlJBRElPIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgQVJHX0RFVklDRToKLSAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHJhZGlvLT52NGwyb2JqZWN0LT52aWRlb2Rldik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFSR19GUkVRVUVOQ1k6Ci0gICAgICBpZiAoZ3N0X3Y0bDJfZ2V0X2ZyZXF1ZW5jeSAocmFkaW8tPnY0bDJvYmplY3QsCi0gICAgICAgICAgICAgIDAsICYocmFkaW8tPnY0bDJvYmplY3QtPmZyZXF1ZW5jeSkpKQotICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCByYWRpby0+djRsMm9iamVjdC0+ZnJlcXVlbmN5KTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotLyogR3N0VVJJSGFuZGxlciBpbnRlcmZhY2UgKi8KLXN0YXRpYyBHc3RVUklUeXBlCi1nc3RfdjRsMnJhZGlvX3VyaV9nZXRfdHlwZSAoR1R5cGUgdHlwZSkKLXsKLSAgcmV0dXJuIEdTVF9VUklfU1JDOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIgKmNvbnN0ICoKLWdzdF92NGwycmFkaW9fdXJpX2dldF9wcm90b2NvbHMgKEdUeXBlIHR5cGUpCi17Ci0gIHN0YXRpYyBjb25zdCBnY2hhciAqcHJvdG9jb2xzW10gPSB7ICJyYWRpbyIsIE5VTEwgfTsKLQotICByZXR1cm4gcHJvdG9jb2xzOwotfQotCi1zdGF0aWMgZ2NoYXIgKgotZ3N0X3Y0bDJyYWRpb191cmlfZ2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIpCi17Ci0gIEdzdFY0bDJSYWRpbyAqcmFkaW8gPSBHU1RfVjRMMlJBRElPIChoYW5kbGVyKTsKLQotICBpZiAocmFkaW8tPnY0bDJvYmplY3QtPnZpZGVvZGV2ICE9IE5VTEwpIHsKLSAgICBpZiAoZ3N0X3Y0bDJfZ2V0X2ZyZXF1ZW5jeSAocmFkaW8tPnY0bDJvYmplY3QsCi0gICAgICAgICAgICAwLCAmKHJhZGlvLT52NGwyb2JqZWN0LT5mcmVxdWVuY3kpKSkgewotICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZiAoInJhZGlvOi8vJTQuMWYiLAotICAgICAgICAgIHJhZGlvLT52NGwyb2JqZWN0LT5mcmVxdWVuY3kgLyAxZTYpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBnX3N0cmR1cCAoInJhZGlvOi8vIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJyYWRpb191cmlfc2V0X3VyaSAoR3N0VVJJSGFuZGxlciAqIGhhbmRsZXIsIGNvbnN0IGdjaGFyICogdXJpLAotICAgIEdFcnJvciAqKiBlcnJvcikKLXsKLSAgR3N0VjRsMlJhZGlvICpyYWRpbyA9IEdTVF9WNEwyUkFESU8gKGhhbmRsZXIpOwotICBnZG91YmxlIGRmcmVxOwotICBnaW50IGlmcmVxOwotICBjb25zdCBnY2hhciAqZnJlcTsKLSAgZ2NoYXIgKmVuZDsKLQotICBpZiAoc3RyY21wICh1cmksICJyYWRpbzovLyIpICE9IDApIHsKLSAgICBmcmVxID0gdXJpICsgODsKLQotICAgIGRmcmVxID0gZ19hc2NpaV9zdHJ0b2QgKGZyZXEsICZlbmQpOwotCi0gICAgaWYgKGVycm5vIHx8IHN0cmxlbiAoZW5kKSkKLSAgICAgIGdvdG8gdXJpX2ZhaWxlZDsKLQotICAgIGlmcmVxID0gZGZyZXEgKiAxZTY7Ci0gICAgZ19vYmplY3Rfc2V0IChyYWRpbywgImZyZXF1ZW5jeSIsIGlmcmVxLCBOVUxMKTsKLQotICB9IGVsc2UKLSAgICBnb3RvIHVyaV9mYWlsZWQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLXVyaV9mYWlsZWQ6Ci0gIGdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX0JBRF9SRUZFUkVOQ0UsCi0gICAgICAiQmFkIHJhZGlvIFVSSSwgY291bGQgbm90IHBhcnNlIGZyZXF1ZW5jeSIpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMnJhZGlvX3VyaV9oYW5kbGVyX2luaXQgKGdwb2ludGVyIGdfaWZhY2UsIGdwb2ludGVyIGlmYWNlX2RhdGEpCi17Ci0gIEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKmlmYWNlID0gKEdzdFVSSUhhbmRsZXJJbnRlcmZhY2UgKikgZ19pZmFjZTsKLQotICBpZmFjZS0+Z2V0X3R5cGUgPSBnc3RfdjRsMnJhZGlvX3VyaV9nZXRfdHlwZTsKLSAgaWZhY2UtPmdldF9wcm90b2NvbHMgPSBnc3RfdjRsMnJhZGlvX3VyaV9nZXRfcHJvdG9jb2xzOwotICBpZmFjZS0+Z2V0X3VyaSA9IGdzdF92NGwycmFkaW9fdXJpX2dldF91cmk7Ci0gIGlmYWNlLT5zZXRfdXJpID0gZ3N0X3Y0bDJyYWRpb191cmlfc2V0X3VyaTsKLX0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJyYWRpby5oIGIvc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZGE0ZmIuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnJhZGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBHU3RyZWFtZXIgdjRsMiByYWRpbyB0dW5lciBlbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQWxleGV5IENoZXJub3YgPDRlcm5vdkBnbWFpbC5jb20+Ci0gKgotICogZ3N0djRsMnJhZGlvLmggLSBWNEwyIHJhZGlvIHR1bmVyIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1Y0TDJSQURJT19IX18KLSNkZWZpbmUgX19HU1RfVjRMMlJBRElPX0hfXwotCi0jaW5jbHVkZSAiZ3N0djRsMm9iamVjdC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMlJBRElPIFwKLSAgKGdzdF92NGwycmFkaW9fZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1Y0TDJSQURJTyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1Y0TDJSQURJTyxHc3RWNGwyUmFkaW8pKQotI2RlZmluZSBHU1RfVjRMMlJBRElPX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1Y0TDJSQURJTyxHc3RWNGwyUmFkaW9DbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WNEwyUkFESU8ob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WNEwyUkFESU8pKQotI2RlZmluZSBHU1RfSVNfVjRMMlJBRElPX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1Y0TDJSQURJTykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyUmFkaW8gICAgICBHc3RWNGwyUmFkaW87Ci10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMlJhZGlvQ2xhc3MgR3N0VjRsMlJhZGlvQ2xhc3M7Ci0KLS8qKgotICogR3N0VjRsMlJhZGlvOgotICoKLSAqIE9wYXF1ZSB2aWRlbzRsaW51eDIgcmFkaW8gdHVuZXIgZWxlbWVudAotICovCi1zdHJ1Y3QgX0dzdFY0bDJSYWRpbwotewotICBHc3RFbGVtZW50IGVsZW1lbnQ7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0OwotfTsKLQotc3RydWN0IF9Hc3RWNGwyUmFkaW9DbGFzcwotewotICBHc3RFbGVtZW50Q2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIEdMaXN0ICp2NGwyX2NsYXNzX2RldmljZXM7Ci19OwotCi1HVHlwZSBnc3RfdjRsMnJhZGlvX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1Y0TDJSQURJT19IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJzaW5rLmMgYi9zeXMvdjRsMi9nc3R2NGwyc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWYzNGViLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMgLSBodHRwOi8vd3d3LnRpLmNvbS8KLSAqCi0gKiBEZXNjcmlwdGlvbjogVjRMMiBzaW5rIGVsZW1lbnQKLSAqICBDcmVhdGVkIG9uOiBKdWwgMiwgMjAwOQotICogICAgICBBdXRob3I6IFJvYiBDbGFyayA8cm9iQHRpLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC12NGwyc2luawotICoKLSAqIHY0bDJzaW5rIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdmlkZW8gdG8gdjRsMiBkZXZpY2VzIChzY3JlZW4gb3ZlcmxheXMKLSAqIHByb3ZpZGVkIGJ5IHRoZSBncmFwaGljcyBoYXJkd2FyZSwgdHYtb3V0LCBldGMpCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgbGF1bmNoIGxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISB2NGwyc2luayBkZXZpY2U9L2Rldi92aWRlbzEKLSAqIF18IFRoaXMgcGlwZWxpbmUgZGlzcGxheXMgYSB0ZXN0IHBhdHRlcm4gb24gL2Rldi92aWRlbzEKLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiB2aWRlb3Rlc3RzcmMgISBuYXZpZ2F0aW9udGVzdCAhIHY0bDJzaW5rCi0gKiBdfCBBIHBpcGVsaW5lIHRvIHRlc3QgbmF2aWdhdGlvbiBldmVudHMuCi0gKiBXaGlsZSBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIgb3ZlciB0aGUgdGVzdCBzaWduYWwgeW91IHdpbGwgc2VlIGEgYmxhY2sgYm94Ci0gKiBmb2xsb3dpbmcgdGhlIG1vdXNlIHBvaW50ZXIuIElmIHlvdSBwcmVzcyB0aGUgbW91c2UgYnV0dG9uIHNvbWV3aGVyZSBvbiB0aGUKLSAqIHZpZGVvIGFuZCByZWxlYXNlIGl0IHNvbWV3aGVyZSBlbHNlIGEgZ3JlZW4gYm94IHdpbGwgYXBwZWFyIHdoZXJlIHlvdSBwcmVzc2VkCi0gKiB0aGUgYnV0dG9uIGFuZCBhIHJlZCBvbmUgd2hlcmUgeW91IHJlbGVhc2VkIGl0LiAoVGhlIG5hdmlnYXRpb250ZXN0IGVsZW1lbnQKLSAqIGlzIHBhcnQgb2YgZ3N0LXBsdWdpbnMtZ29vZC4pIFlvdSBjYW4gb2JzZXJ2ZSBoZXJlIHRoYXQgZXZlbiBpZiB0aGUgaW1hZ2VzCi0gKiBhcmUgc2NhbGVkIHRocm91Z2ggaGFyZHdhcmUgdGhlIHBvaW50ZXIgY29vcmRpbmF0ZXMgYXJlIGNvbnZlcnRlZCBiYWNrIHRvIHRoZQotICogb3JpZ2luYWwgdmlkZW8gZnJhbWUgZ2VvbWV0cnkgc28gdGhhdCB0aGUgYm94IGNhbiBiZSBkcmF3biB0byB0aGUgY29ycmVjdAotICogcG9zaXRpb24uIFRoaXMgYWxzbyBoYW5kbGVzIGJvcmRlcnMgY29ycmVjdGx5LCBsaW1pdGluZyBjb29yZGluYXRlcyB0byB0aGUKLSAqIGltYWdlIGFyZWEKLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmgiCi0KLSNpbmNsdWRlICJnc3R2NGwyY29sb3JiYWxhbmNlLmgiCi0jaW5jbHVkZSAiZ3N0djRsMnR1bmVyLmgiCi0jaW5jbHVkZSAiZ3N0djRsMnZpZG9yaWVudC5oIgotCi0jaW5jbHVkZSAiZ3N0djRsMnNpbmsuaCIKLSNpbmNsdWRlICJnc3QvZ3N0LWkxOG4tcGx1Z2luLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotR1NUX0RFQlVHX0NBVEVHT1JZICh2NGwyc2lua19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB2NGwyc2lua19kZWJ1ZwotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9ERVZJQ0UgICAiL2Rldi92aWRlbzEiCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBWNEwyX1NURF9PQkpFQ1RfUFJPUFMsCi0gIFBST1BfT1ZFUkxBWV9UT1AsCi0gIFBST1BfT1ZFUkxBWV9MRUZULAotICBQUk9QX09WRVJMQVlfV0lEVEgsCi0gIFBST1BfT1ZFUkxBWV9IRUlHSFQsCi0gIFBST1BfQ1JPUF9UT1AsCi0gIFBST1BfQ1JPUF9MRUZULAotICBQUk9QX0NST1BfV0lEVEgsCi0gIFBST1BfQ1JPUF9IRUlHSFQsCi19OwotCi0KLUdTVF9JTVBMRU1FTlRfVjRMMl9DT0xPUl9CQUxBTkNFX01FVEhPRFMgKEdzdFY0bDJTaW5rLCBnc3RfdjRsMnNpbmspOwotR1NUX0lNUExFTUVOVF9WNEwyX1RVTkVSX01FVEhPRFMgKEdzdFY0bDJTaW5rLCBnc3RfdjRsMnNpbmspOwotR1NUX0lNUExFTUVOVF9WNEwyX1ZJRE9SSUVOVF9NRVRIT0RTIChHc3RWNGwyU2luaywgZ3N0X3Y0bDJzaW5rKTsKLQotI2RlZmluZSBnc3RfdjRsMnNpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKEdzdFY0bDJTaW5rLCBnc3RfdjRsMnNpbmssIEdTVF9UWVBFX1ZJREVPX1NJTkssCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UVU5FUiwgZ3N0X3Y0bDJzaW5rX3R1bmVyX2ludGVyZmFjZV9pbml0KTsKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX0NPTE9SX0JBTEFOQ0UsCi0gICAgICAgIGdzdF92NGwyc2lua19jb2xvcl9iYWxhbmNlX2ludGVyZmFjZV9pbml0KTsKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdTVF9UWVBFX1ZJREVPX09SSUVOVEFUSU9OLAotICAgICAgICBnc3RfdjRsMnNpbmtfdmlkZW9fb3JpZW50YXRpb25faW50ZXJmYWNlX2luaXQpKTsKLQotCi1zdGF0aWMgdm9pZCBnc3RfdjRsMnNpbmtfZmluYWxpemUgKEdzdFY0bDJTaW5rICogdjRsMnNpbmspOwotCi0vKiBHT2JqZWN0IG1ldGhvZHM6ICovCi1zdGF0aWMgdm9pZCBnc3RfdjRsMnNpbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3Y0bDJzaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKLSAgICBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKTsKLQotLyogR3N0RWxlbWVudCBtZXRob2RzOiAqLwotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdzdF92NGwyc2lua19jaGFuZ2Vfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pOwotCi0vKiBHc3RCYXNlU2luayBtZXRob2RzOiAqLwotc3RhdGljIGdib29sZWFuIGdzdF92NGwyc2lua19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdEJhc2VTaW5rICogYnNpbmssCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3Y0bDJzaW5rX2dldF9jYXBzIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RDYXBzICogZmlsdGVyKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdjRsMnNpbmtfc2V0X2NhcHMgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBHc3RGbG93UmV0dXJuIGdzdF92NGwyc2lua19zaG93X2ZyYW1lIChHc3RWaWRlb1NpbmsgKiBic2luaywKLSAgICBHc3RCdWZmZXIgKiBidWYpOwotc3RhdGljIGdib29sZWFuIGdzdF92NGwyc2lua191bmxvY2sgKEdzdEJhc2VTaW5rICogc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3Y0bDJzaW5rX3VubG9ja19zdG9wIChHc3RCYXNlU2luayAqIHNpbmspOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzaW5rX2NsYXNzX2luaXQgKEdzdFY0bDJTaW5rQ2xhc3MgKiBrbGFzcykKLXsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmJhc2VzaW5rX2NsYXNzOwotICBHc3RWaWRlb1NpbmtDbGFzcyAqdmlkZW9zaW5rX2NsYXNzOwotCi0gIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAoa2xhc3MpOwotICBlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLSAgYmFzZXNpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTIChrbGFzcyk7Ci0gIHZpZGVvc2lua19jbGFzcyA9IEdTVF9WSURFT19TSU5LX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSAoR09iamVjdEZpbmFsaXplRnVuYykgZ3N0X3Y0bDJzaW5rX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdjRsMnNpbmtfc2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBnc3RfdjRsMnNpbmtfZ2V0X3Byb3BlcnR5OwotCi0gIGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9IGdzdF92NGwyc2lua19jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIgKGdvYmplY3RfY2xhc3MsCi0gICAgICBERUZBVUxUX1BST1BfREVWSUNFKTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX09WRVJMQVlfVE9QLAotICAgICAgZ19wYXJhbV9zcGVjX2ludCAoIm92ZXJsYXktdG9wIiwgIk92ZXJsYXkgdG9wIiwKLSAgICAgICAgICAiVGhlIHRvcG1vc3QgKHkpIGNvb3JkaW5hdGUgb2YgdGhlIHZpZGVvIG92ZXJsYXk7IHRvcCBsZWZ0IGNvcm5lciBvZiBzY3JlZW4gaXMgMCwwIiwKLSAgICAgICAgICBHX01JTklOVCwgR19NQVhJTlQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX09WRVJMQVlfTEVGVCwKLSAgICAgIGdfcGFyYW1fc3BlY19pbnQgKCJvdmVybGF5LWxlZnQiLCAiT3ZlcmxheSBsZWZ0IiwKLSAgICAgICAgICAiVGhlIGxlZnRtb3N0ICh4KSBjb29yZGluYXRlIG9mIHRoZSB2aWRlbyBvdmVybGF5OyB0b3AgbGVmdCBjb3JuZXIgb2Ygc2NyZWVuIGlzIDAsMCIsCi0gICAgICAgICAgR19NSU5JTlQsIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9PVkVSTEFZX1dJRFRILAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJvdmVybGF5LXdpZHRoIiwgIk92ZXJsYXkgd2lkdGgiLAotICAgICAgICAgICJUaGUgd2lkdGggb2YgdGhlIHZpZGVvIG92ZXJsYXk7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSB3aWR0aCIsCi0gICAgICAgICAgMCwgR19NQVhVSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9PVkVSTEFZX0hFSUdIVCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgib3ZlcmxheS1oZWlnaHQiLCAiT3ZlcmxheSBoZWlnaHQiLAotICAgICAgICAgICJUaGUgaGVpZ2h0IG9mIHRoZSB2aWRlbyBvdmVybGF5OyBkZWZhdWx0IGlzIGVxdWFsIHRvIG5lZ290aWF0ZWQgaW1hZ2UgaGVpZ2h0IiwKLSAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ1JPUF9UT1AsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY3JvcC10b3AiLCAiQ3JvcCB0b3AiLAotICAgICAgICAgICJUaGUgdG9wbW9zdCAoeSkgY29vcmRpbmF0ZSBvZiB0aGUgdmlkZW8gY3JvcDsgdG9wIGxlZnQgY29ybmVyIG9mIGltYWdlIGlzIDAsMCIsCi0gICAgICAgICAgMHg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DUk9QX0xFRlQsCi0gICAgICBnX3BhcmFtX3NwZWNfaW50ICgiY3JvcC1sZWZ0IiwgIkNyb3AgbGVmdCIsCi0gICAgICAgICAgIlRoZSBsZWZ0bW9zdCAoeCkgY29vcmRpbmF0ZSBvZiB0aGUgdmlkZW8gY3JvcDsgdG9wIGxlZnQgY29ybmVyIG9mIGltYWdlIGlzIDAsMCIsCi0gICAgICAgICAgMHg4MDAwMDAwMCwgMHg3ZmZmZmZmZiwgMCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DUk9QX1dJRFRILAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJjcm9wLXdpZHRoIiwgIkNyb3Agd2lkdGgiLAotICAgICAgICAgICJUaGUgd2lkdGggb2YgdGhlIHZpZGVvIGNyb3A7IGRlZmF1bHQgaXMgZXF1YWwgdG8gbmVnb3RpYXRlZCBpbWFnZSB3aWR0aCIsCi0gICAgICAgICAgMCwgMHhmZmZmZmZmZiwgMCwgR19QQVJBTV9SRUFEV1JJVEUpKTsKLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DUk9QX0hFSUdIVCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgiY3JvcC1oZWlnaHQiLCAiQ3JvcCBoZWlnaHQiLAotICAgICAgICAgICJUaGUgaGVpZ2h0IG9mIHRoZSB2aWRlbyBjcm9wOyBkZWZhdWx0IGlzIGVxdWFsIHRvIG5lZ290aWF0ZWQgaW1hZ2UgaGVpZ2h0IiwKLSAgICAgICAgICAwLCAweGZmZmZmZmZmLCAwLCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsCi0gICAgICAiVmlkZW8gKHZpZGVvNGxpbnV4MikgU2luayIsICJTaW5rL1ZpZGVvIiwKLSAgICAgICJEaXNwbGF5cyBmcmFtZXMgb24gYSB2aWRlbzRsaW51eDIgZGV2aWNlIiwgIlJvYiBDbGFyayA8cm9iQHRpLmNvbT4sIik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsCi0gICAgICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9hbGxfY2FwcyAoKSkpOwotCi0gIGJhc2VzaW5rX2NsYXNzLT5nZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMnNpbmtfZ2V0X2NhcHMpOwotICBiYXNlc2lua19jbGFzcy0+c2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJzaW5rX3NldF9jYXBzKTsKLSAgYmFzZXNpbmtfY2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJzaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbik7Ci0gIGJhc2VzaW5rX2NsYXNzLT51bmxvY2sgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJzaW5rX3VubG9jayk7Ci0gIGJhc2VzaW5rX2NsYXNzLT51bmxvY2tfc3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMnNpbmtfdW5sb2NrX3N0b3ApOwotCi0gIHZpZGVvc2lua19jbGFzcy0+c2hvd19mcmFtZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMnNpbmtfc2hvd19mcmFtZSk7Ci0KLSAga2xhc3MtPnY0bDJfY2xhc3NfZGV2aWNlcyA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHY0bDJzaW5rX2RlYnVnLCAidjRsMnNpbmsiLCAwLCAiVjRMMiBzaW5rIGVsZW1lbnQiKTsKLQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzaW5rX2luaXQgKEdzdFY0bDJTaW5rICogdjRsMnNpbmspCi17Ci0gIHY0bDJzaW5rLT52NGwyb2JqZWN0ID0gZ3N0X3Y0bDJfb2JqZWN0X25ldyAoR1NUX0VMRU1FTlQgKHY0bDJzaW5rKSwKLSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVULCBERUZBVUxUX1BST1BfREVWSUNFLAotICAgICAgZ3N0X3Y0bDJfZ2V0X291dHB1dCwgZ3N0X3Y0bDJfc2V0X291dHB1dCwgTlVMTCk7Ci0KLSAgLyogc2FtZSBkZWZhdWx0IHZhbHVlIGZvciB2aWRlbyBvdXRwdXQgZGV2aWNlIGFzIGlzIHVzZWQgZm9yCi0gICAqIHY0bDJzcmMvY2FwdHVyZSBpcyBubyBnb29kLi4gIHNvIGxldHMgc2V0IGEgc2FuZXIgZGVmYXVsdAotICAgKiAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIG9uZSBjcmVhdGluZyB0aGUgdjRsMnNpbmsKLSAgICogYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIHJldHVybnMpCi0gICAqLwotICBnX29iamVjdF9zZXQgKHY0bDJzaW5rLCAiZGV2aWNlIiwgIi9kZXYvdmlkZW8xIiwgTlVMTCk7Ci0KLSAgdjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCA9IDA7Ci0gIHY0bDJzaW5rLT5jcm9wX2ZpZWxkc19zZXQgPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMnNpbmtfZmluYWxpemUgKEdzdFY0bDJTaW5rICogdjRsMnNpbmspCi17Ci0gIGdzdF92NGwyX29iamVjdF9kZXN0cm95ICh2NGwyc2luay0+djRsMm9iamVjdCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplICgoR09iamVjdCAqKSAodjRsMnNpbmspKTsKLX0KLQotCi0vKgotICogZmxhZ3MgdG8gaW5kaWNhdGUgd2hpY2ggb3ZlcmxheS9jcm9wIHByb3BlcnRpZXMgdGhlIHVzZXIgaGFzIHNldCAoYW5kCi0gKiB0aGVyZWZvcmUgd2hpY2ggb25lcyBzaG91bGQgb3ZlcnJpZGUgdGhlIGRlZmF1bHRzIGZyb20gdGhlIGRyaXZlcikKLSAqLwotZW51bQotewotICBSRUNUX1RPUF9TRVQgPSAweDAxLAotICBSRUNUX0xFRlRfU0VUID0gMHgwMiwKLSAgUkVDVF9XSURUSF9TRVQgPSAweDA0LAotICBSRUNUX0hFSUdIVF9TRVQgPSAweDA4Ci19OwotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzaW5rX3N5bmNfb3ZlcmxheV9maWVsZHMgKEdzdFY0bDJTaW5rICogdjRsMnNpbmspCi17Ci0gIGlmICghdjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCkKLSAgICByZXR1cm47Ci0KLSAgaWYgKEdTVF9WNEwyX0lTX09QRU4gKHY0bDJzaW5rLT52NGwyb2JqZWN0KSkgewotCi0gICAgZ2ludCBmZCA9IHY0bDJzaW5rLT52NGwyb2JqZWN0LT52aWRlb19mZDsKLSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OwotCi0gICAgbWVtc2V0ICgmZm9ybWF0LCAweDAwLCBzaXplb2YgKHN0cnVjdCB2NGwyX2Zvcm1hdCkpOwotICAgIGlmICh2NGwyc2luay0+djRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJiBWNEwyX0NBUF9WSURFT19PVVRQVVRfT1ZFUkxBWSkKLSAgICAgIGZvcm1hdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWTsKLSAgICBlbHNlCi0gICAgICBmb3JtYXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTsKLQotICAgIGlmICh2NGwyX2lvY3RsIChmZCwgVklESU9DX0dfRk1ULCAmZm9ybWF0KSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMnNpbmssICJWSURJT0NfR19GTVQgZmFpbGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMnNpbmssCi0gICAgICAgICJzZXR0aW5nIG92ZXJsYXk6IG92ZXJsYXlfZmllbGRzX3NldD0weCUwMngsIHRvcD0lZCwgbGVmdD0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCIsCi0gICAgICAgIHY0bDJzaW5rLT5vdmVybGF5X2ZpZWxkc19zZXQsCi0gICAgICAgIHY0bDJzaW5rLT5vdmVybGF5LnRvcCwgdjRsMnNpbmstPm92ZXJsYXkubGVmdCwKLSAgICAgICAgdjRsMnNpbmstPm92ZXJsYXkud2lkdGgsIHY0bDJzaW5rLT5vdmVybGF5LmhlaWdodCk7Ci0KLSAgICBpZiAodjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCAmIFJFQ1RfVE9QX1NFVCkKLSAgICAgIGZvcm1hdC5mbXQud2luLncudG9wID0gdjRsMnNpbmstPm92ZXJsYXkudG9wOwotICAgIGlmICh2NGwyc2luay0+b3ZlcmxheV9maWVsZHNfc2V0ICYgUkVDVF9MRUZUX1NFVCkKLSAgICAgIGZvcm1hdC5mbXQud2luLncubGVmdCA9IHY0bDJzaW5rLT5vdmVybGF5LmxlZnQ7Ci0gICAgaWYgKHY0bDJzaW5rLT5vdmVybGF5X2ZpZWxkc19zZXQgJiBSRUNUX1dJRFRIX1NFVCkKLSAgICAgIGZvcm1hdC5mbXQud2luLncud2lkdGggPSB2NGwyc2luay0+b3ZlcmxheS53aWR0aDsKLSAgICBpZiAodjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCAmIFJFQ1RfSEVJR0hUX1NFVCkKLSAgICAgIGZvcm1hdC5mbXQud2luLncuaGVpZ2h0ID0gdjRsMnNpbmstPm92ZXJsYXkuaGVpZ2h0OwotCi0gICAgaWYgKHY0bDJfaW9jdGwgKGZkLCBWSURJT0NfU19GTVQsICZmb3JtYXQpIDwgMCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyc2luaywgIlZJRElPQ19TX0ZNVCBmYWlsZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2NGwyc2luay0+b3ZlcmxheV9maWVsZHNfc2V0ID0gMDsKLSAgICB2NGwyc2luay0+b3ZlcmxheSA9IGZvcm1hdC5mbXQud2luLnc7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyc2lua19zeW5jX2Nyb3BfZmllbGRzIChHc3RWNGwyU2luayAqIHY0bDJzaW5rKQotewotICBpZiAoIXY0bDJzaW5rLT5jcm9wX2ZpZWxkc19zZXQpCi0gICAgcmV0dXJuOwotCi0gIGlmIChHU1RfVjRMMl9JU19PUEVOICh2NGwyc2luay0+djRsMm9iamVjdCkpIHsKLQotICAgIGdpbnQgZmQgPSB2NGwyc2luay0+djRsMm9iamVjdC0+dmlkZW9fZmQ7Ci0gICAgc3RydWN0IHY0bDJfY3JvcCBjcm9wOwotCi0gICAgbWVtc2V0ICgmY3JvcCwgMHgwMCwgc2l6ZW9mIChzdHJ1Y3QgdjRsMl9jcm9wKSk7Ci0gICAgY3JvcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0KLSAgICBpZiAodjRsMl9pb2N0bCAoZmQsIFZJRElPQ19HX0NST1AsICZjcm9wKSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMnNpbmssICJWSURJT0NfR19DUk9QIGZhaWxlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzaW5rLAotICAgICAgICAic2V0dGluZyBjcm9wOiBjcm9wX2ZpZWxkc19zZXQ9MHglMDJ4LCB0b3A9JWQsIGxlZnQ9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQiLAotICAgICAgICB2NGwyc2luay0+Y3JvcF9maWVsZHNfc2V0LAotICAgICAgICB2NGwyc2luay0+Y3JvcC50b3AsIHY0bDJzaW5rLT5jcm9wLmxlZnQsCi0gICAgICAgIHY0bDJzaW5rLT5jcm9wLndpZHRoLCB2NGwyc2luay0+Y3JvcC5oZWlnaHQpOwotCi0gICAgaWYgKHY0bDJzaW5rLT5jcm9wX2ZpZWxkc19zZXQgJiBSRUNUX1RPUF9TRVQpCi0gICAgICBjcm9wLmMudG9wID0gdjRsMnNpbmstPmNyb3AudG9wOwotICAgIGlmICh2NGwyc2luay0+Y3JvcF9maWVsZHNfc2V0ICYgUkVDVF9MRUZUX1NFVCkKLSAgICAgIGNyb3AuYy5sZWZ0ID0gdjRsMnNpbmstPmNyb3AubGVmdDsKLSAgICBpZiAodjRsMnNpbmstPmNyb3BfZmllbGRzX3NldCAmIFJFQ1RfV0lEVEhfU0VUKQotICAgICAgY3JvcC5jLndpZHRoID0gdjRsMnNpbmstPmNyb3Aud2lkdGg7Ci0gICAgaWYgKHY0bDJzaW5rLT5jcm9wX2ZpZWxkc19zZXQgJiBSRUNUX0hFSUdIVF9TRVQpCi0gICAgICBjcm9wLmMuaGVpZ2h0ID0gdjRsMnNpbmstPmNyb3AuaGVpZ2h0OwotCi0gICAgaWYgKHY0bDJfaW9jdGwgKGZkLCBWSURJT0NfU19DUk9QLCAmY3JvcCkgPCAwKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHY0bDJzaW5rLCAiVklESU9DX1NfQ1JPUCBmYWlsZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodjRsMl9pb2N0bCAoZmQsIFZJRElPQ19HX0NST1AsICZjcm9wKSA8IDApIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMnNpbmssICJWSURJT0NfR19DUk9QIGZhaWxlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHY0bDJzaW5rLT5jcm9wX2ZpZWxkc19zZXQgPSAwOwotICAgIHY0bDJzaW5rLT5jcm9wID0gY3JvcC5jOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VjRsMlNpbmsgKnY0bDJzaW5rID0gR1NUX1Y0TDJTSU5LIChvYmplY3QpOwotCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3NldF9wcm9wZXJ0eV9oZWxwZXIgKHY0bDJzaW5rLT52NGwyb2JqZWN0LAotICAgICAgICAgIHByb3BfaWQsIHZhbHVlLCBwc3BlYykpIHsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICAgIGNhc2UgUFJPUF9PVkVSTEFZX1RPUDoKLSAgICAgICAgdjRsMnNpbmstPm92ZXJsYXkudG9wID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7Ci0gICAgICAgIHY0bDJzaW5rLT5vdmVybGF5X2ZpZWxkc19zZXQgfD0gUkVDVF9UT1BfU0VUOwotICAgICAgICBnc3RfdjRsMnNpbmtfc3luY19vdmVybGF5X2ZpZWxkcyAodjRsMnNpbmspOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9PVkVSTEFZX0xFRlQ6Ci0gICAgICAgIHY0bDJzaW5rLT5vdmVybGF5LmxlZnQgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgICAgdjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCB8PSBSRUNUX0xFRlRfU0VUOwotICAgICAgICBnc3RfdjRsMnNpbmtfc3luY19vdmVybGF5X2ZpZWxkcyAodjRsMnNpbmspOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9PVkVSTEFZX1dJRFRIOgotICAgICAgICB2NGwyc2luay0+b3ZlcmxheS53aWR0aCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgICAgdjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCB8PSBSRUNUX1dJRFRIX1NFVDsKLSAgICAgICAgZ3N0X3Y0bDJzaW5rX3N5bmNfb3ZlcmxheV9maWVsZHMgKHY0bDJzaW5rKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFBST1BfT1ZFUkxBWV9IRUlHSFQ6Ci0gICAgICAgIHY0bDJzaW5rLT5vdmVybGF5LmhlaWdodCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgICAgdjRsMnNpbmstPm92ZXJsYXlfZmllbGRzX3NldCB8PSBSRUNUX0hFSUdIVF9TRVQ7Ci0gICAgICAgIGdzdF92NGwyc2lua19zeW5jX292ZXJsYXlfZmllbGRzICh2NGwyc2luayk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBQUk9QX0NST1BfVE9QOgotICAgICAgICB2NGwyc2luay0+Y3JvcC50b3AgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKLSAgICAgICAgdjRsMnNpbmstPmNyb3BfZmllbGRzX3NldCB8PSBSRUNUX1RPUF9TRVQ7Ci0gICAgICAgIGdzdF92NGwyc2lua19zeW5jX2Nyb3BfZmllbGRzICh2NGwyc2luayk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBQUk9QX0NST1BfTEVGVDoKLSAgICAgICAgdjRsMnNpbmstPmNyb3AubGVmdCA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOwotICAgICAgICB2NGwyc2luay0+Y3JvcF9maWVsZHNfc2V0IHw9IFJFQ1RfTEVGVF9TRVQ7Ci0gICAgICAgIGdzdF92NGwyc2lua19zeW5jX2Nyb3BfZmllbGRzICh2NGwyc2luayk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBQUk9QX0NST1BfV0lEVEg6Ci0gICAgICAgIHY0bDJzaW5rLT5jcm9wLndpZHRoID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgICB2NGwyc2luay0+Y3JvcF9maWVsZHNfc2V0IHw9IFJFQ1RfV0lEVEhfU0VUOwotICAgICAgICBnc3RfdjRsMnNpbmtfc3luY19jcm9wX2ZpZWxkcyAodjRsMnNpbmspOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9DUk9QX0hFSUdIVDoKLSAgICAgICAgdjRsMnNpbmstPmNyb3AuaGVpZ2h0ID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgICB2NGwyc2luay0+Y3JvcF9maWVsZHNfc2V0IHw9IFJFQ1RfSEVJR0hUX1NFVDsKLSAgICAgICAgZ3N0X3Y0bDJzaW5rX3N5bmNfY3JvcF9maWVsZHMgKHY0bDJzaW5rKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzaW5rX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWNGwyU2luayAqdjRsMnNpbmsgPSBHU1RfVjRMMlNJTksgKG9iamVjdCk7Ci0KLSAgaWYgKCFnc3RfdjRsMl9vYmplY3RfZ2V0X3Byb3BlcnR5X2hlbHBlciAodjRsMnNpbmstPnY0bDJvYmplY3QsCi0gICAgICAgICAgcHJvcF9pZCwgdmFsdWUsIHBzcGVjKSkgewotICAgIHN3aXRjaCAocHJvcF9pZCkgewotICAgICAgY2FzZSBQUk9QX09WRVJMQVlfVE9QOgotICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB2NGwyc2luay0+b3ZlcmxheS50b3ApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9PVkVSTEFZX0xFRlQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHY0bDJzaW5rLT5vdmVybGF5LmxlZnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9PVkVSTEFZX1dJRFRIOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgdjRsMnNpbmstPm92ZXJsYXkud2lkdGgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9PVkVSTEFZX0hFSUdIVDoKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHY0bDJzaW5rLT5vdmVybGF5LmhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBQUk9QX0NST1BfVE9QOgotICAgICAgICBnX3ZhbHVlX3NldF9pbnQgKHZhbHVlLCB2NGwyc2luay0+Y3JvcC50b3ApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9DUk9QX0xFRlQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHY0bDJzaW5rLT5jcm9wLmxlZnQpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9DUk9QX1dJRFRIOgotICAgICAgICBnX3ZhbHVlX3NldF91aW50ICh2YWx1ZSwgdjRsMnNpbmstPmNyb3Aud2lkdGgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUFJPUF9DUk9QX0hFSUdIVDoKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHY0bDJzaW5rLT5jcm9wLmhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3Y0bDJzaW5rX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsKLSAgR3N0VjRsMlNpbmsgKnY0bDJzaW5rID0gR1NUX1Y0TDJTSU5LIChlbGVtZW50KTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyc2luaywgIiVkIC0+ICVkIiwKLSAgICAgIEdTVF9TVEFURV9UUkFOU0lUSU9OX0NVUlJFTlQgKHRyYW5zaXRpb24pLAotICAgICAgR1NUX1NUQVRFX1RSQU5TSVRJT05fTkVYVCAodHJhbnNpdGlvbikpOwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgLyogb3BlbiB0aGUgZGV2aWNlICovCi0gICAgICBpZiAoIWdzdF92NGwyX29iamVjdF9vcGVuICh2NGwyc2luay0+djRsMm9iamVjdCkpCi0gICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgaWYgKCFnc3RfdjRsMl9vYmplY3Rfc3RvcCAodjRsMnNpbmstPnY0bDJvYmplY3QpKQotICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICAvKiB3ZSBuZWVkIHRvIGNhbGwgc3RvcCBoZXJlIHRvbyAqLwotICAgICAgaWYgKCFnc3RfdjRsMl9vYmplY3Rfc3RvcCAodjRsMnNpbmstPnY0bDJvYmplY3QpKQotICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgLyogY2xvc2UgdGhlIGRldmljZSAqLwotICAgICAgaWYgKCFnc3RfdjRsMl9vYmplY3RfY2xvc2UgKHY0bDJzaW5rLT52NGwyb2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3Y0bDJzaW5rX2dldF9jYXBzIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RWNGwyU2luayAqdjRsMnNpbmsgPSBHU1RfVjRMMlNJTksgKGJzaW5rKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJzaW5rLT52NGwyb2JqZWN0KSkgewotICAgIC8qIEZJWE1FOiBjb3B5PyAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzaW5rLCAiZGV2aWNlIGlzIG5vdCBvcGVuIik7Ci0gICAgcmV0dXJuIGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChHU1RfQkFTRV9TSU5LX1BBRCAodjRsMnNpbmspKTsKLSAgfQotCi0KLSAgcmV0dXJuIGdzdF92NGwyX29iamVjdF9nZXRfY2FwcyAodjRsMnNpbmstPnY0bDJvYmplY3QsIGZpbHRlcik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJzaW5rX3NldF9jYXBzIChHc3RCYXNlU2luayAqIGJzaW5rLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0VjRsMkVycm9yIGVycm9yID0gR1NUX1Y0TDJfRVJST1JfSU5JVDsKLSAgR3N0VjRsMlNpbmsgKnY0bDJzaW5rID0gR1NUX1Y0TDJTSU5LIChic2luayk7Ci0gIEdzdFY0bDJPYmplY3QgKm9iaiA9IHY0bDJzaW5rLT52NGwyb2JqZWN0OwotCi0gIExPR19DQVBTICh2NGwyc2luaywgY2Fwcyk7Ci0KLSAgaWYgKCFHU1RfVjRMMl9JU19PUEVOIChvYmopKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAodjRsMnNpbmssICJkZXZpY2UgaXMgbm90IG9wZW4iKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBtYWtlIHN1cmUgdGhlIGNhcHMgY2hhbmdlZCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgKi8KLSAgaWYgKGdzdF92NGwyX29iamVjdF9jYXBzX2VxdWFsIChvYmosIGNhcHMpKQotICAgIHJldHVybiBUUlVFOwotCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3N0b3AgKG9iaikpCi0gICAgZ290byBzdG9wX2ZhaWxlZDsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXRfZm9ybWF0IChvYmosIGNhcHMsICZlcnJvcikpCi0gICAgZ290byBpbnZhbGlkX2Zvcm1hdDsKLQotICBnc3RfdjRsMnNpbmtfc3luY19vdmVybGF5X2ZpZWxkcyAodjRsMnNpbmspOwotICBnc3RfdjRsMnNpbmtfc3luY19jcm9wX2ZpZWxkcyAodjRsMnNpbmspOwotCi0gIEdTVF9JTkZPX09CSkVDVCAodjRsMnNpbmssICJvdXRwdXR0aW5nIGJ1ZmZlcnMgdmlhIG1vZGUgJXUiLCBvYmotPm1vZGUpOwotCi0gIHY0bDJzaW5rLT52aWRlb193aWR0aCA9IEdTVF9WNEwyX1dJRFRIIChvYmopOwotICB2NGwyc2luay0+dmlkZW9faGVpZ2h0ID0gR1NUX1Y0TDJfSEVJR0hUIChvYmopOwotCi0gIC8qIFRPRE86IHZpZGVvc2luayB3aWR0aC9oZWlnaHQgc2hvdWxkIGJlIHNjYWxlZCBhY2NvcmRpbmcgdG8KLSAgICogcGl4ZWwtYXNwZWN0LXJhdGlvCi0gICAqLwotICBHU1RfVklERU9fU0lOS19XSURUSCAodjRsMnNpbmspID0gdjRsMnNpbmstPnZpZGVvX3dpZHRoOwotICBHU1RfVklERU9fU0lOS19IRUlHSFQgKHY0bDJzaW5rKSA9IHY0bDJzaW5rLT52aWRlb19oZWlnaHQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1zdG9wX2ZhaWxlZDoKLSAgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzaW5rLCAiZmFpbGVkIHRvIHN0b3Agc3RyZWFtaW5nIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci1pbnZhbGlkX2Zvcm1hdDoKLSAgewotICAgIC8qIGVycm9yIGFscmVhZHkgcG9zdGVkICovCi0gICAgZ3N0X3Y0bDJfZXJyb3IgKHY0bDJzaW5rLCAmZXJyb3IpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzaW5rLCAiY2FuJ3Qgc2V0IGZvcm1hdCIpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyc2lua19wcm9wb3NlX2FsbG9jYXRpb24gKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFY0bDJTaW5rICp2NGwyc2luayA9IEdTVF9WNEwyU0lOSyAoYnNpbmspOwotICBnYm9vbGVhbiBsYXN0X3NhbXBsZV9lbmFibGVkOwotCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3Byb3Bvc2VfYWxsb2NhdGlvbiAodjRsMnNpbmstPnY0bDJvYmplY3QsIHF1ZXJ5KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgZ19vYmplY3RfZ2V0IChic2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsICZsYXN0X3NhbXBsZV9lbmFibGVkLCBOVUxMKTsKLQotICBpZiAobGFzdF9zYW1wbGVfZW5hYmxlZCkgewotICAgIEdzdEJ1ZmZlclBvb2wgKnBvb2w7Ci0gICAgZ3VpbnQgc2l6ZSwgbWluLCBtYXg7Ci0KLSAgICBnc3RfcXVlcnlfcGFyc2VfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsICZwb29sLCAmc2l6ZSwgJm1pbiwgJm1heCk7Ci0KLSAgICAvKiB3ZSBuZWVkIDEgbW9yZSwgb3RoZXJ3aXNlIHdlJ2xsIHJ1biBvdXQgb2YgYnVmZmVycyBhdCBwcmVyb2xsICovCi0gICAgbWluKys7Ci0gICAgaWYgKG1heCA8IG1pbikKLSAgICAgIG1heCA9IG1pbjsKLQotICAgIGdzdF9xdWVyeV9zZXRfbnRoX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIDAsIHBvb2wsIHNpemUsIG1pbiwgbWF4KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKiBjYWxsZWQgYWZ0ZXIgQS9WIHN5bmMgdG8gcmVuZGVyIGZyYW1lICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJzaW5rX3Nob3dfZnJhbWUgKEdzdFZpZGVvU2luayAqIHZzaW5rLCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RWNGwyU2luayAqdjRsMnNpbmsgPSBHU1RfVjRMMlNJTksgKHZzaW5rKTsKLSAgR3N0VjRsMk9iamVjdCAqb2JqID0gdjRsMnNpbmstPnY0bDJvYmplY3Q7Ci0gIEdzdEJ1ZmZlclBvb2wgKmJwb29sID0gR1NUX0JVRkZFUl9QT09MIChvYmotPnBvb2wpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzaW5rLCAicmVuZGVyIGJ1ZmZlcjogJXAiLCBidWYpOwotCi0gIGlmIChHX1VOTElLRUxZIChvYmotPnBvb2wgPT0gTlVMTCkpCi0gICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdzdF9idWZmZXJfcG9vbF9pc19hY3RpdmUgKGJwb29sKSkpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZzsKLQotICAgIC8qIHRoaXMgcG9vbCB3YXMgbm90IGFjdGl2YXRlZCwgY29uZmlndXJlIGFuZCBhY3RpdmF0ZSAqLwotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzaW5rLCAiYWN0aXZhdGluZyBwb29sIik7Ci0KLSAgICBjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAoYnBvb2wpOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbiAoY29uZmlnLAotICAgICAgICBHU1RfQlVGRkVSX1BPT0xfT1BUSU9OX1ZJREVPX01FVEEpOwotICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChicG9vbCwgY29uZmlnKTsKLQotICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKGJwb29sLCBUUlVFKSkKLSAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbGVkOwotICB9Ci0KLSAgcmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcHJvY2VzcyAoR1NUX1Y0TDJfQlVGRkVSX1BPT0xfQ0FTVCAob2JqLT5wb29sKSwKLSAgICAgICZidWYpOwotCi0gIHJldHVybiByZXQ7Ci0KLSAgLyogRVJST1JTICovCi1ub3RfbmVnb3RpYXRlZDoKLSAgewotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHY0bDJzaW5rLCAibm90IG5lZ290aWF0ZWQiKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfTk9UX05FR09USUFURUQ7Ci0gIH0KLWFjdGl2YXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRmFpbGVkIHRvIGFsbG9jYXRlZCByZXF1aXJlZCBtZW1vcnkuIikpLAotICAgICAgICAoIkJ1ZmZlciBwb29sIGFjdGl2YXRpb24gZmFpbGVkIikpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyc2lua191bmxvY2sgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0VjRsMlNpbmsgKnY0bDJzaW5rID0gR1NUX1Y0TDJTSU5LIChzaW5rKTsKLSAgcmV0dXJuIGdzdF92NGwyX29iamVjdF91bmxvY2sgKHY0bDJzaW5rLT52NGwyb2JqZWN0KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMnNpbmtfdW5sb2NrX3N0b3AgKEdzdEJhc2VTaW5rICogc2luaykKLXsKLSAgR3N0VjRsMlNpbmsgKnY0bDJzaW5rID0gR1NUX1Y0TDJTSU5LIChzaW5rKTsKLSAgcmV0dXJuIGdzdF92NGwyX29iamVjdF91bmxvY2tfc3RvcCAodjRsMnNpbmstPnY0bDJvYmplY3QpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMnNpbmsuaCBiL3N5cy92NGwyL2dzdHY0bDJzaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNTEyOWYuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnNpbmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jIC0gaHR0cDovL3d3dy50aS5jb20vCi0gKgotICogRGVzY3JpcHRpb246IFY0TDIgc2luayBlbGVtZW50Ci0gKiAgQ3JlYXRlZCBvbjogSnVsIDIsIDIwMDkKLSAqICAgICAgQXV0aG9yOiBSb2IgQ2xhcmsgPHJvYkB0aS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVFY0TDJTSU5LX0hfXwotI2RlZmluZSBfX0dTVFY0TDJTSU5LX0hfXwotCi0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgotI2luY2x1ZGUgPGdzdHY0bDJvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3R2NGwyYnVmZmVycG9vbC5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh2NGwyc2lua19kZWJ1Zyk7Ci0KLQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIEdTVF9UWVBFX1Y0TDJTSU5LIFwKLSAgKGdzdF92NGwyc2lua19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVjRMMlNJTksob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR1NUX1RZUEVfVjRMMlNJTkssIEdzdFY0bDJTaW5rKSkKLSNkZWZpbmUgR1NUX1Y0TDJTSU5LX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBHU1RfVFlQRV9WNEwyU0lOSywgR3N0VjRsMlNpbmtDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WNEwyU0lOSyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHU1RfVFlQRV9WNEwyU0lOSykpCi0jZGVmaW5lIEdTVF9JU19WNEwyU0lOS19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgR1NUX1RZUEVfVjRMMlNJTkspKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMlNpbmsgR3N0VjRsMlNpbms7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMlNpbmtDbGFzcyBHc3RWNGwyU2lua0NsYXNzOwotCi0KLXN0cnVjdCBfR3N0VjRsMlNpbmsgewotICBHc3RWaWRlb1NpbmsgdmlkZW9zaW5rOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdDsKLQotICBnaW50IHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQ7ICAgICAgLyogb3JpZ2luYWwgKHVuc2NhbGVkKSB2aWRlbyB3L2ggKi8KLQotICAvKgotICAgKiBmaWVsZCB0byBzdG9yZSByZXF1ZXN0ZWQgb3ZlcmxheSBhbmQgY3JvcCB0b3AvbGVmdC93aWR0aC9oZWlnaHQgcHJvcHM6Ci0gICAqIG5vdGUsIGNvdWxkIG1heWJlIGJlIGNvbWJpbmVkIHdpdGggJ3Z3aW4nIGZpZWxkIGluIEdzdFY0bDJPYmplY3Q/Ci0gICAqLwotICBzdHJ1Y3QgdjRsMl9yZWN0IG92ZXJsYXksIGNyb3A7Ci0KLSAgLyoKLSAgICogYml0bWFzayB0byB0cmFjayB3aGljaCBvdmVybGF5IGFuZCBjcm9wIGZpZWxkcyB1c2VyIGhhcyByZXF1ZXN0ZWQgYnkKLSAgICogc2V0dGluZyBwcm9wZXJ0aWVzOgotICAgKi8KLSAgZ3VpbnQ4IG92ZXJsYXlfZmllbGRzX3NldCwgY3JvcF9maWVsZHNfc2V0OwotfTsKLQotc3RydWN0IF9Hc3RWNGwyU2lua0NsYXNzIHsKLSAgR3N0VmlkZW9TaW5rQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIEdMaXN0ICp2NGwyX2NsYXNzX2RldmljZXM7Ci19OwotCi1HVHlwZSBnc3RfdjRsMnNpbmtfZ2V0X3R5cGUodm9pZCk7Ci0KLUdfRU5EX0RFQ0xTCi0KLQotI2VuZGlmIC8qIF9fR1NUVjRMMlNJTktfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9nc3R2NGwyc3JjLmMgYi9zeXMvdjRsMi9nc3R2NGwyc3JjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNDk4MTQuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogZ3N0djRsMnNyYy5jOiBWaWRlbzRMaW51eDIgc291cmNlIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC12NGwyc3JjCi0gKgotICogdjRsMnNyYyBjYW4gYmUgdXNlZCB0byBjYXB0dXJlIHZpZGVvIGZyb20gdjRsMiBkZXZpY2VzLCBsaWtlIHdlYmNhbXMgYW5kIHR2Ci0gKiBjYXJkcy4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8dGl0bGU+RXhhbXBsZSBsYXVuY2ggbGluZXM8L3RpdGxlPgotICogfFsKLSAqIGdzdC1sYXVuY2gtMS4wIHY0bDJzcmMgISB4dmltYWdlc2luawotICogXXwgVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgdmlkZW8gY2FwdHVyZWQgZnJvbSAvZGV2L3ZpZGVvMCB0diBjYXJkIGFuZCBmb3IKLSAqIHdlYmNhbXMuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgdjRsMnNyYyAhIGpwZWdkZWMgISB4dmltYWdlc2luawotICogXXwgVGhpcyBwaXBlbGluZSBzaG93cyB0aGUgdmlkZW8gY2FwdHVyZWQgZnJvbSBhIHdlYmNhbSB0aGF0IGRlbGl2ZXJzIGpwZWcKLSAqIGltYWdlcy4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+Ci0KLSNpbmNsdWRlICJnc3R2NGwyc3JjLmgiCi0KLSNpbmNsdWRlICJnc3R2NGwyY29sb3JiYWxhbmNlLmgiCi0jaW5jbHVkZSAiZ3N0djRsMnR1bmVyLmgiCi0jaW5jbHVkZSAiZ3N0djRsMnZpZG9yaWVudC5oIgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi1HU1RfREVCVUdfQ0FURUdPUlkgKHY0bDJzcmNfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgdjRsMnNyY19kZWJ1ZwotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9ERVZJQ0UgICAiL2Rldi92aWRlbzAiCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBWNEwyX1NURF9PQkpFQ1RfUFJPUFMsCi0gIFBST1BfTEFTVAotfTsKLQotLyogc2lnbmFscyBhbmQgYXJncyAqLwotZW51bQotewotICBTSUdOQUxfUFJFX1NFVF9GT1JNQVQsCi0gIExBU1RfU0lHTkFMCi19OwotCi1zdGF0aWMgZ3VpbnQgZ3N0X3Y0bDJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotR1NUX0lNUExFTUVOVF9WNEwyX0NPTE9SX0JBTEFOQ0VfTUVUSE9EUyAoR3N0VjRsMlNyYywgZ3N0X3Y0bDJzcmMpOwotR1NUX0lNUExFTUVOVF9WNEwyX1RVTkVSX01FVEhPRFMgKEdzdFY0bDJTcmMsIGdzdF92NGwyc3JjKTsKLUdTVF9JTVBMRU1FTlRfVjRMMl9WSURPUklFTlRfTUVUSE9EUyAoR3N0VjRsMlNyYywgZ3N0X3Y0bDJzcmMpOwotCi1zdGF0aWMgdm9pZCBnc3RfdjRsMnNyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLAotICAgIGdwb2ludGVyIGlmYWNlX2RhdGEpOwotCi0jZGVmaW5lIGdzdF92NGwyc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKLUdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChHc3RWNGwyU3JjLCBnc3RfdjRsMnNyYywgR1NUX1RZUEVfUFVTSF9TUkMsCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9VUklfSEFORExFUiwgZ3N0X3Y0bDJzcmNfdXJpX2hhbmRsZXJfaW5pdCk7Ci0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9UVU5FUiwgZ3N0X3Y0bDJzcmNfdHVuZXJfaW50ZXJmYWNlX2luaXQpOwotICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR1NUX1RZUEVfQ09MT1JfQkFMQU5DRSwKLSAgICAgICAgZ3N0X3Y0bDJzcmNfY29sb3JfYmFsYW5jZV9pbnRlcmZhY2VfaW5pdCk7Ci0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHU1RfVFlQRV9WSURFT19PUklFTlRBVElPTiwKLSAgICAgICAgZ3N0X3Y0bDJzcmNfdmlkZW9fb3JpZW50YXRpb25faW50ZXJmYWNlX2luaXQpKTsKLQotc3RhdGljIHZvaWQgZ3N0X3Y0bDJzcmNfZmluYWxpemUgKEdzdFY0bDJTcmMgKiB2NGwyc3JjKTsKLQotLyogZWxlbWVudCBtZXRob2RzICovCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ3N0X3Y0bDJzcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKTsKLQotLyogYmFzZXNyYyBtZXRob2RzICovCi1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3Y0bDJzcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF92NGwyc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIHNyYyk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3Y0bDJzcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF92NGwyc3JjX3N0b3AgKEdzdEJhc2VTcmMgKiBzcmMpOwotc3RhdGljIGdib29sZWFuIGdzdF92NGwyc3JjX3NldF9jYXBzIChHc3RCYXNlU3JjICogc3JjLCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3Y0bDJzcmNfZ2V0X2NhcHMgKEdzdEJhc2VTcmMgKiBzcmMsIEdzdENhcHMgKiBmaWx0ZXIpOwotc3RhdGljIGdib29sZWFuIGdzdF92NGwyc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogYnNyYywgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3Y0bDJzcmNfZGVjaWRlX2FsbG9jYXRpb24gKEdzdEJhc2VTcmMgKiBzcmMsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSk7Ci1zdGF0aWMgR3N0Rmxvd1JldHVybiBnc3RfdjRsMnNyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBzcmMsIEdzdEJ1ZmZlciAqKiBvdXQpOwotc3RhdGljIEdzdENhcHMgKmdzdF92NGwyc3JjX2ZpeGF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIEdzdENhcHMgKiBjYXBzKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3RfdjRsMnNyY19uZWdvdGlhdGUgKEdzdEJhc2VTcmMgKiBiYXNlc3JjKTsKLQotc3RhdGljIHZvaWQgZ3N0X3Y0bDJzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotc3RhdGljIHZvaWQgZ3N0X3Y0bDJzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpOwotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzcmNfY2xhc3NfaW5pdCAoR3N0VjRsMlNyY0NsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzczsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHc3RCYXNlU3JjQ2xhc3MgKmJhc2VzcmNfY2xhc3M7Ci0gIEdzdFB1c2hTcmNDbGFzcyAqcHVzaHNyY19jbGFzczsKLQotICBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIGJhc2VzcmNfY2xhc3MgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKGtsYXNzKTsKLSAgcHVzaHNyY19jbGFzcyA9IEdTVF9QVVNIX1NSQ19DTEFTUyAoa2xhc3MpOwotCi0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gKEdPYmplY3RGaW5hbGl6ZUZ1bmMpIGdzdF92NGwyc3JjX2ZpbmFsaXplOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3RfdjRsMnNyY19zZXRfcHJvcGVydHk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdzdF92NGwyc3JjX2dldF9wcm9wZXJ0eTsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPSBnc3RfdjRsMnNyY19jaGFuZ2Vfc3RhdGU7Ci0KLSAgZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfcHJvcGVydGllc19oZWxwZXIgKGdvYmplY3RfY2xhc3MsCi0gICAgICBERUZBVUxUX1BST1BfREVWSUNFKTsKLQotICAvKioKLSAgICogR3N0VjRsMlNyYzo6cHJlcGFyZS1mb3JtYXQ6Ci0gICAqIEB2NGwyc3JjOiB0aGUgdjRsMnNyYyBpbnN0YW5jZQotICAgKiBAZmQ6IHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGN1cnJlbnQgZGV2aWNlCi0gICAqIEBjYXBzOiB0aGUgY2FwcyBvZiB0aGUgZm9ybWF0IGJlaW5nIHNldAotICAgKgotICAgKiBUaGlzIHNpZ25hbCBnZXRzIGVtaXR0ZWQgYmVmb3JlIGNhbGxpbmcgdGhlIHY0bDIgVklESU9DX1NfRk1UIGlvY3RsCi0gICAqIChzZXQgZm9ybWF0KS4gVGhpcyBhbGxvd3MgZm9yIGFueSBjdXN0b20gY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlIHRvCi0gICAqIGhhcHBlbiBwcmlvciB0byB0aGUgZm9ybWF0IGJlaW5nIHNldC4KLSAgICogVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciBVVkMgSDI2NCBlbmNvZGluZyBjYW1lcmFzIHdoaWNoIG5lZWQgdGhlIEgyNjQKLSAgICogUHJvYmUgJiBDb21taXQgdG8gaGFwcGVuIHByaW9yIHRvIHRoZSBub3JtYWwgUHJvYmUgJiBDb21taXQuCi0gICAqCi0gICAqIFNpbmNlOiAwLjEwLjMyCi0gICAqLwotICBnc3RfdjRsMl9zaWduYWxzW1NJR05BTF9QUkVfU0VUX0ZPUk1BVF0gPSBnX3NpZ25hbF9uZXcgKCJwcmVwYXJlLWZvcm1hdCIsCi0gICAgICBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAwLCBOVUxMLCBOVUxMLCBOVUxMLCBHX1RZUEVfTk9ORSwgMiwgR19UWVBFX0lOVCwgR1NUX1RZUEVfQ0FQUyk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJWaWRlbyAodmlkZW80bGludXgyKSBTb3VyY2UiLCAiU291cmNlL1ZpZGVvIiwKLSAgICAgICJSZWFkcyBmcmFtZXMgZnJvbSBhIFZpZGVvNExpbnV4MiBkZXZpY2UiLAotICAgICAgIkVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4sICIKLSAgICAgICJTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Iik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZQotICAgICAgKGVsZW1lbnRfY2xhc3MsCi0gICAgICBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNyYyIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX0FMV0FZUywKLSAgICAgICAgICBnc3RfdjRsMl9vYmplY3RfZ2V0X2FsbF9jYXBzICgpKSk7Ci0KLSAgYmFzZXNyY19jbGFzcy0+Z2V0X2NhcHMgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJzcmNfZ2V0X2NhcHMpOwotICBiYXNlc3JjX2NsYXNzLT5zZXRfY2FwcyA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMnNyY19zZXRfY2Fwcyk7Ci0gIGJhc2VzcmNfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyc3JjX3N0YXJ0KTsKLSAgYmFzZXNyY19jbGFzcy0+dW5sb2NrID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyc3JjX3VubG9jayk7Ci0gIGJhc2VzcmNfY2xhc3MtPnVubG9ja19zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyc3JjX3VubG9ja19zdG9wKTsKLSAgYmFzZXNyY19jbGFzcy0+c3RvcCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMnNyY19zdG9wKTsKLSAgYmFzZXNyY19jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJzcmNfcXVlcnkpOwotICBiYXNlc3JjX2NsYXNzLT5maXhhdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJzcmNfZml4YXRlKTsKLSAgYmFzZXNyY19jbGFzcy0+bmVnb3RpYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyc3JjX25lZ290aWF0ZSk7Ci0gIGJhc2VzcmNfY2xhc3MtPmRlY2lkZV9hbGxvY2F0aW9uID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMnNyY19kZWNpZGVfYWxsb2NhdGlvbik7Ci0KLSAgcHVzaHNyY19jbGFzcy0+Y3JlYXRlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyc3JjX2NyZWF0ZSk7Ci0KLSAga2xhc3MtPnY0bDJfY2xhc3NfZGV2aWNlcyA9IE5VTEw7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHY0bDJzcmNfZGVidWcsICJ2NGwyc3JjIiwgMCwgIlY0TDIgc291cmNlIGVsZW1lbnQiKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyc3JjX2luaXQgKEdzdFY0bDJTcmMgKiB2NGwyc3JjKQotewotICAvKiBmaXhtZTogZ2l2ZSBhbiB1cGRhdGVfZnBzX2Z1bmN0aW9uICovCi0gIHY0bDJzcmMtPnY0bDJvYmplY3QgPSBnc3RfdjRsMl9vYmplY3RfbmV3IChHU1RfRUxFTUVOVCAodjRsMnNyYyksCi0gICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIERFRkFVTFRfUFJPUF9ERVZJQ0UsCi0gICAgICBnc3RfdjRsMl9nZXRfaW5wdXQsIGdzdF92NGwyX3NldF9pbnB1dCwgTlVMTCk7Ci0KLSAgZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKEdTVF9CQVNFX1NSQyAodjRsMnNyYyksIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9iYXNlX3NyY19zZXRfbGl2ZSAoR1NUX0JBU0VfU1JDICh2NGwyc3JjKSwgVFJVRSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyc3JjX2ZpbmFsaXplIChHc3RWNGwyU3JjICogdjRsMnNyYykKLXsKLSAgZ3N0X3Y0bDJfb2JqZWN0X2Rlc3Ryb3kgKHY0bDJzcmMtPnY0bDJvYmplY3QpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAoKEdPYmplY3QgKikgKHY0bDJzcmMpKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFY0bDJTcmMgKnY0bDJzcmMgPSBHU1RfVjRMMlNSQyAob2JqZWN0KTsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXRfcHJvcGVydHlfaGVscGVyICh2NGwyc3JjLT52NGwyb2JqZWN0LAotICAgICAgICAgIHByb3BfaWQsIHZhbHVlLCBwc3BlYykpIHsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJzcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFY0bDJTcmMgKnY0bDJzcmMgPSBHU1RfVjRMMlNSQyAob2JqZWN0KTsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyICh2NGwyc3JjLT52NGwyb2JqZWN0LAotICAgICAgICAgIHByb3BfaWQsIHZhbHVlLCBwc3BlYykpIHsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotfQotCi0vKiB0aGlzIGZ1bmN0aW9uIGlzIGEgYml0IG9mIGEgbGFzdCByZXNvcnQgKi8KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92NGwyc3JjX2ZpeGF0ZSAoR3N0QmFzZVNyYyAqIGJhc2VzcmMsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJmaXhhdGluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplIChjYXBzKTsgKytpKSB7Ci0gICAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgaSk7Ci0KLSAgICAvKiBXZSBhcmUgZml4YXRpbmcgdG8gYSByZWFzb25hYmxlIDMyMHgyMDAgcmVzb2x1dGlvbgotICAgICAgIGFuZCB0aGUgbWF4aW11bSBmcmFtZXJhdGUgcmVzb2x1dGlvbiBmb3IgdGhhdCBzaXplICovCi0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzdHJ1Y3R1cmUsICJ3aWR0aCIpKQotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgMzIwKTsKLQotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCAiaGVpZ2h0IikpCi0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAoc3RydWN0dXJlLCAiaGVpZ2h0IiwgMjAwKTsKLQotICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAoc3RydWN0dXJlLCAiZnJhbWVyYXRlIikpCi0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLAotICAgICAgICAgIDEwMCwgMSk7Ci0KLSAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHN0cnVjdHVyZSwgImZvcm1hdCIpKQotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQgKHN0cnVjdHVyZSwgImZvcm1hdCIpOwotCi0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzdHJ1Y3R1cmUsICJpbnRlcmxhY2UtbW9kZSIpKQotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGQgKHN0cnVjdHVyZSwgImludGVybGFjZS1tb2RlIik7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiZml4YXRlZCBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICBjYXBzID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maXhhdGUgKGJhc2VzcmMsIGNhcHMpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJzcmNfbmVnb3RpYXRlIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0Q2FwcyAqdGhpc2NhcHM7Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotICBHc3RDYXBzICpwZWVyY2FwcyA9IE5VTEw7Ci0gIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwotCi0gIC8qIGZpcnN0IHNlZSB3aGF0IGlzIHBvc3NpYmxlIG9uIG91ciBzb3VyY2UgcGFkICovCi0gIHRoaXNjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChHU1RfQkFTRV9TUkNfUEFEIChiYXNlc3JjKSwgTlVMTCk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKGJhc2VzcmMsICJjYXBzIG9mIHNyYzogJSIgR1NUX1BUUl9GT1JNQVQsIHRoaXNjYXBzKTsKLSAgTE9HX0NBUFMgKGJhc2VzcmMsIHRoaXNjYXBzKTsKLQotICAvKiBub3RoaW5nIG9yIGFueXRoaW5nIGlzIGFsbG93ZWQsIHdlJ3JlIGRvbmUgKi8KLSAgaWYgKHRoaXNjYXBzID09IE5VTEwgfHwgZ3N0X2NhcHNfaXNfYW55ICh0aGlzY2FwcykpCi0gICAgZ290byBub19uZWdvX25lZWRlZDsKLQotICAvKiBnZXQgdGhlIHBlZXIgY2FwcyB3aXRob3V0IGEgZmlsdGVyIGFzIHdlJ2xsIGZpbHRlciBvdXJzZWx2ZXMgbGF0ZXIgb24gKi8KLSAgcGVlcmNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoR1NUX0JBU0VfU1JDX1BBRCAoYmFzZXNyYyksIE5VTEwpOwotICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAiY2FwcyBvZiBwZWVyOiAlIiBHU1RfUFRSX0ZPUk1BVCwgcGVlcmNhcHMpOwotICBMT0dfQ0FQUyAoYmFzZXNyYywgcGVlcmNhcHMpOwotCi0gIGlmIChwZWVyY2FwcyAmJiAhZ3N0X2NhcHNfaXNfYW55IChwZWVyY2FwcykpIHsKLSAgICBHc3RDYXBzICppY2FwcyA9IE5VTEw7Ci0KLSAgICAvKiBQcmVmZXIgdGhlIGZpcnN0IGNhcHMgd2UgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGF0IHRoZSBwZWVyIHByb3Bvc2VkICovCi0gICAgaWNhcHMgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAocGVlcmNhcHMsIHRoaXNjYXBzLAotICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImludGVyc2VjdDogJSIgR1NUX1BUUl9GT1JNQVQsIGljYXBzKTsKLSAgICBMT0dfQ0FQUyAoYmFzZXNyYywgaWNhcHMpOwotICAgIGlmIChpY2FwcykgewotICAgICAgLyogSWYgdGhlcmUgYXJlIG11bHRpcGxlIGludGVyc2VjdGlvbnMgcGljayB0aGUgb25lIHdpdGggdGhlIHNtYWxsZXN0Ci0gICAgICAgKiByZXNvbHV0aW9uIHN0cmljdGx5IGJpZ2dlciB0aGVuIHRoZSBmaXJzdCBwZWVyIGNhcHMgKi8KLSAgICAgIGlmIChnc3RfY2Fwc19nZXRfc2l6ZSAoaWNhcHMpID4gMSkgewotICAgICAgICBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChwZWVyY2FwcywgMCk7Ci0gICAgICAgIGludCBiZXN0ID0gMDsKLSAgICAgICAgaW50IHR3aWR0aCwgdGhlaWdodDsKLSAgICAgICAgaW50IHdpZHRoID0gR19NQVhJTlQsIGhlaWdodCA9IEdfTUFYSU5UOwotCi0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJ3aWR0aCIsICZ0d2lkdGgpCi0gICAgICAgICAgICAmJiBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJoZWlnaHQiLCAmdGhlaWdodCkpIHsKLSAgICAgICAgICBpbnQgaTsKLQotICAgICAgICAgIC8qIFdhbGsgdGhlIHN0cnVjdHVyZSBiYWNrd2FyZHMgdG8gZ2V0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUKLSAgICAgICAgICAgKiBzbWFsbGVzdCByZXNvbHV0aW9uIGJpZ2dlciAob3IgZXF1YWwgdG8pIHRoZSBwcmVmZXJyZWQgcmVzb2x1dGlvbikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICBmb3IgKGkgPSBnc3RfY2Fwc19nZXRfc2l6ZSAoaWNhcHMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIEdzdFN0cnVjdHVyZSAqaXMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChpY2FwcywgaSk7Ci0gICAgICAgICAgICBpbnQgdywgaDsKLQotICAgICAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoaXMsICJ3aWR0aCIsICZ3KQotICAgICAgICAgICAgICAgICYmIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoaXMsICJoZWlnaHQiLCAmaCkpIHsKLSAgICAgICAgICAgICAgaWYgKHcgPj0gdHdpZHRoICYmIHcgPD0gd2lkdGggJiYgaCA+PSB0aGVpZ2h0ICYmIGggPD0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgd2lkdGggPSB3OwotICAgICAgICAgICAgICAgIGhlaWdodCA9IGg7Ci0gICAgICAgICAgICAgICAgYmVzdCA9IGk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjYXBzID0gZ3N0X2NhcHNfY29weV9udGggKGljYXBzLCBiZXN0KTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKGljYXBzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhcHMgPSBpY2FwczsKLSAgICAgIH0KLSAgICB9Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRoaXNjYXBzKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBubyBwZWVyIG9yIHBlZXIgaGF2ZSBBTlkgY2Fwcywgd29yayB3aXRoIG91ciBvd24gY2FwcyB0aGVuICovCi0gICAgY2FwcyA9IHRoaXNjYXBzOwotICB9Ci0gIGlmIChwZWVyY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAocGVlcmNhcHMpOwotICBpZiAoY2FwcykgewotICAgIGNhcHMgPSBnc3RfY2Fwc190cnVuY2F0ZSAoY2Fwcyk7Ci0KLSAgICAvKiBub3cgZml4YXRlICovCi0gICAgaWYgKCFnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAgIGNhcHMgPSBnc3RfdjRsMnNyY19maXhhdGUgKGJhc2VzcmMsIGNhcHMpOwotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoYmFzZXNyYywgImZpeGF0ZWQgdG86ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLSAgICAgIExPR19DQVBTIChiYXNlc3JjLCBjYXBzKTsKLQotICAgICAgaWYgKGdzdF9jYXBzX2lzX2FueSAoY2FwcykpIHsKLSAgICAgICAgLyogaG1tLCBzdGlsbCBhbnl0aGluZywgc28gZWxlbWVudCBjYW4gZG8gYW55dGhpbmcgYW5kCi0gICAgICAgICAqIG5lZ28gaXMgbm90IG5lZWRlZCAqLwotICAgICAgICByZXN1bHQgPSBUUlVFOwotICAgICAgfSBlbHNlIGlmIChnc3RfY2Fwc19pc19maXhlZCAoY2FwcykpIHsKLSAgICAgICAgLyogeWF5LCBmaXhlZCBjYXBzLCB1c2UgdGhvc2UgdGhlbiAqLwotICAgICAgICByZXN1bHQgPSBnc3RfYmFzZV9zcmNfc2V0X2NhcHMgKGJhc2VzcmMsIGNhcHMpOwotICAgICAgfQotICAgIH0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLQotbm9fbmVnb19uZWVkZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUIChiYXNlc3JjLCAibm8gbmVnb3RpYXRpb24gbmVlZGVkIik7Ci0gICAgaWYgKHRoaXNjYXBzKQotICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRoaXNjYXBzKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfdjRsMnNyY19nZXRfY2FwcyAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0VjRsMlNyYyAqdjRsMnNyYzsKLSAgR3N0VjRsMk9iamVjdCAqb2JqOwotCi0gIHY0bDJzcmMgPSBHU1RfVjRMMlNSQyAoc3JjKTsKLSAgb2JqID0gdjRsMnNyYy0+djRsMm9iamVjdDsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKG9iaikpIHsKLSAgICByZXR1cm4gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKHY0bDJzcmMpKTsKLSAgfQotCi0gIHJldHVybiBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHMgKG9iaiwgZmlsdGVyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMnNyY19zZXRfZm9ybWF0IChHc3RWNGwyU3JjICogdjRsMnNyYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFY0bDJFcnJvciBlcnJvciA9IEdTVF9WNEwyX0VSUk9SX0lOSVQ7Ci0gIEdzdFY0bDJPYmplY3QgKm9iajsKLQotICBvYmogPSB2NGwyc3JjLT52NGwyb2JqZWN0OwotCi0gIGdfc2lnbmFsX2VtaXQgKHY0bDJzcmMsIGdzdF92NGwyX3NpZ25hbHNbU0lHTkFMX1BSRV9TRVRfRk9STUFUXSwgMCwKLSAgICAgIHY0bDJzcmMtPnY0bDJvYmplY3QtPnZpZGVvX2ZkLCBjYXBzKTsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXRfZm9ybWF0IChvYmosIGNhcHMsICZlcnJvcikpIHsKLSAgICBnc3RfdjRsMl9lcnJvciAodjRsMnNyYywgJmVycm9yKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMnNyY19zZXRfY2FwcyAoR3N0QmFzZVNyYyAqIHNyYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdFY0bDJTcmMgKnY0bDJzcmM7Ci0gIEdzdFY0bDJPYmplY3QgKm9iajsKLQotICB2NGwyc3JjID0gR1NUX1Y0TDJTUkMgKHNyYyk7Ci0gIG9iaiA9IHY0bDJzcmMtPnY0bDJvYmplY3Q7Ci0KLSAgLyogbWFrZSBzdXJlIHRoZSBjYXBzIGNoYW5nZWQgYmVmb3JlIGRvaW5nIGFueXRoaW5nICovCi0gIGlmIChnc3RfdjRsMl9vYmplY3RfY2Fwc19lcXVhbCAob2JqLCBjYXBzKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAoR1NUX1Y0TDJfSVNfQUNUSVZFIChvYmopKSB7Ci0gICAgR3N0VjRsMkVycm9yIGVycm9yID0gR1NUX1Y0TDJfRVJST1JfSU5JVDsKLSAgICAvKiBKdXN0IGNoZWNrIGlmIHRoZSBmb3JtYXQgaXMgYWNjZXB0YWJsZSwgb25jZSB3ZSBrbm93Ci0gICAgICogbm8gYnVmZmVycyBzaG91bGQgYmUgb3V0c3RhbmRpbmcgd2UgdHJ5IFNfRk1ULgotICAgICAqCi0gICAgICogQmFzZXNyYyB3aWxsIGRvIGFuIGFsbG9jYXRpb24gcXVlcnkgdGhhdAotICAgICAqIHNob3VsZCBpbmRpcmVjdGx5IHJlY2xhaW0gYnVmZmVycywgYWZ0ZXIgdGhhdCB3ZSBjYW4KLSAgICAgKiBzZXQgdGhlIGZvcm1hdCBhbmQgdGhlbiBjb25maWd1cmUgb3VyIHBvb2wgKi8KLSAgICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X3RyeV9mb3JtYXQgKG9iaiwgY2FwcywgJmVycm9yKSkgewotICAgICAgdjRsMnNyYy0+cmVuZWdvdGlhdGlvbl9hZGp1c3QgPSB2NGwyc3JjLT5vZmZzZXQgKyAxOwotICAgICAgdjRsMnNyYy0+cGVuZGluZ19zZXRfZm10ID0gVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgZ3N0X3Y0bDJfZXJyb3IgKHY0bDJzcmMsICZlcnJvcik7Ci0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIG1ha2Ugc3VyZSB3ZSBzdG9wIGNhcHR1cmluZyBhbmQgZGVhbGxvYyBidWZmZXJzICovCi0gICAgaWYgKCFnc3RfdjRsMl9vYmplY3Rfc3RvcCAob2JqKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIHJldHVybiBnc3RfdjRsMnNyY19zZXRfZm9ybWF0ICh2NGwyc3JjLCBjYXBzKTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyc3JjX2RlY2lkZV9hbGxvY2F0aW9uIChHc3RCYXNlU3JjICogYnNyYywgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0VjRsMlNyYyAqc3JjID0gR1NUX1Y0TDJTUkMgKGJzcmMpOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotCi0gIGlmIChzcmMtPnBlbmRpbmdfc2V0X2ZtdCkgewotICAgIEdzdENhcHMgKmNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKEdTVF9CQVNFX1NSQ19QQUQgKGJzcmMpKTsKLQotICAgIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3N0b3AgKHNyYy0+djRsMm9iamVjdCkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0ID0gZ3N0X3Y0bDJzcmNfc2V0X2Zvcm1hdCAoc3JjLCBjYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgc3JjLT5wZW5kaW5nX3NldF9mbXQgPSBGQUxTRTsKLSAgfSBlbHNlIGlmIChnc3RfYnVmZmVyX3Bvb2xfaXNfYWN0aXZlIChzcmMtPnY0bDJvYmplY3QtPnBvb2wpKSB7Ci0gICAgLyogVHJpY2sgYmFzZXNyYyBpbnRvIG5vdCBkZWFjdGl2YXRpbmcgdGhlIGFjdGl2ZSBwb29sLiBSZW5lZ290aWF0aW5nIGhlcmUKLSAgICAgKiB3b3VsZCBvdGhlcndpc2UgdHVybiBvZmYgYW5kIG9uIHRoZSBjYW1lcmEuICovCi0gICAgR3N0QWxsb2NhdG9yICphbGxvY2F0b3I7Ci0gICAgR3N0QWxsb2NhdGlvblBhcmFtcyBwYXJhbXM7Ci0gICAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLQotICAgIGdzdF9iYXNlX3NyY19nZXRfYWxsb2NhdG9yIChic3JjLCAmYWxsb2NhdG9yLCAmcGFyYW1zKTsKLSAgICBwb29sID0gZ3N0X2Jhc2Vfc3JjX2dldF9idWZmZXJfcG9vbCAoYnNyYyk7Ci0KLSAgICBpZiAoZ3N0X3F1ZXJ5X2dldF9uX2FsbG9jYXRpb25fcGFyYW1zIChxdWVyeSkpCi0gICAgICBnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3BhcmFtIChxdWVyeSwgMCwgYWxsb2NhdG9yLCAmcGFyYW1zKTsKLSAgICBlbHNlCi0gICAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcGFyYW0gKHF1ZXJ5LCBhbGxvY2F0b3IsICZwYXJhbXMpOwotCi0gICAgaWYgKGdzdF9xdWVyeV9nZXRfbl9hbGxvY2F0aW9uX3Bvb2xzIChxdWVyeSkpCi0gICAgICBnc3RfcXVlcnlfc2V0X250aF9hbGxvY2F0aW9uX3Bvb2wgKHF1ZXJ5LCAwLCBwb29sLAotICAgICAgICAgIHNyYy0+djRsMm9iamVjdC0+aW5mby5zaXplLCAxLCAwKTsKLSAgICBlbHNlCi0gICAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fcG9vbCAocXVlcnksIHBvb2wsIHNyYy0+djRsMm9iamVjdC0+aW5mby5zaXplLCAxLAotICAgICAgICAgIDApOwotCi0gICAgaWYgKHBvb2wpCi0gICAgICBnc3Rfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgICBpZiAoYWxsb2NhdG9yKQotICAgICAgZ3N0X29iamVjdF91bnJlZiAoYWxsb2NhdG9yKTsKLQotICAgIHJldHVybiBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRlY2lkZV9hbGxvY2F0aW9uIChic3JjLCBxdWVyeSk7Ci0gIH0KLQotICBpZiAocmV0KSB7Ci0gICAgcmV0ID0gZ3N0X3Y0bDJfb2JqZWN0X2RlY2lkZV9hbGxvY2F0aW9uIChzcmMtPnY0bDJvYmplY3QsIHF1ZXJ5KTsKLSAgICBpZiAocmV0KQotICAgICAgcmV0ID0gR1NUX0JBU0VfU1JDX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5kZWNpZGVfYWxsb2NhdGlvbiAoYnNyYywgcXVlcnkpOwotICB9Ci0KLSAgaWYgKHJldCkgewotICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHNyYy0+djRsMm9iamVjdC0+cG9vbCwgVFJVRSkpCi0gICAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLWFjdGl2YXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIkZhaWxlZCB0byBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuIikpLAotICAgICAgICAoIkJ1ZmZlciBwb29sIGFjdGl2YXRpb24gZmFpbGVkIikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyc3JjX3F1ZXJ5IChHc3RCYXNlU3JjICogYnNyYywgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0VjRsMlNyYyAqc3JjOwotICBHc3RWNGwyT2JqZWN0ICpvYmo7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotCi0gIHNyYyA9IEdTVF9WNEwyU1JDIChic3JjKTsKLSAgb2JqID0gc3JjLT52NGwyb2JqZWN0OwotCi0gIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUgKHF1ZXJ5KSkgewotICAgIGNhc2UgR1NUX1FVRVJZX0xBVEVOQ1k6ewotICAgICAgR3N0Q2xvY2tUaW1lIG1pbl9sYXRlbmN5LCBtYXhfbGF0ZW5jeTsKLSAgICAgIGd1aW50MzIgZnBzX24sIGZwc19kOwotICAgICAgZ3VpbnQgbnVtX2J1ZmZlcnMgPSAwOwotCi0gICAgICAvKiBkZXZpY2UgbXVzdCBiZSBvcGVuICovCi0gICAgICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKG9iaikpIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzcmMsCi0gICAgICAgICAgICAiQ2FuJ3QgZ2l2ZSBsYXRlbmN5IHNpbmNlIGRldmljZSBpc24ndCBvcGVuICEiKTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotCi0gICAgICBmcHNfbiA9IEdTVF9WNEwyX0ZQU19OIChvYmopOwotICAgICAgZnBzX2QgPSBHU1RfVjRMMl9GUFNfRCAob2JqKTsKLQotICAgICAgLyogd2UgbXVzdCBoYXZlIGEgZnJhbWVyYXRlICovCi0gICAgICBpZiAoZnBzX24gPD0gMCB8fCBmcHNfZCA8PSAwKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoc3JjLAotICAgICAgICAgICAgIkNhbid0IGdpdmUgbGF0ZW5jeSBzaW5jZSBmcmFtZXJhdGUgaXNuJ3QgZml4YXRlZCAhIik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgLyogbWluIGxhdGVuY3kgaXMgdGhlIHRpbWUgdG8gY2FwdHVyZSBvbmUgZnJhbWUgKi8KLSAgICAgIG1pbl9sYXRlbmN5ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwgZnBzX2QsIGZwc19uKTsKLQotICAgICAgLyogbWF4IGxhdGVuY3kgaXMgdG90YWwgZHVyYXRpb24gb2YgdGhlIGZyYW1lIGJ1ZmZlciAqLwotICAgICAgaWYgKG9iai0+cG9vbCAhPSBOVUxMKQotICAgICAgICBudW1fYnVmZmVycyA9IEdTVF9WNEwyX0JVRkZFUl9QT09MX0NBU1QgKG9iai0+cG9vbCktPm1heF9sYXRlbmN5OwotCi0gICAgICBpZiAobnVtX2J1ZmZlcnMgPT0gMCkKLSAgICAgICAgbWF4X2xhdGVuY3kgPSAtMTsKLSAgICAgIGVsc2UKLSAgICAgICAgbWF4X2xhdGVuY3kgPSBudW1fYnVmZmVycyAqIG1pbl9sYXRlbmN5OwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChic3JjLAotICAgICAgICAgICJyZXBvcnQgbGF0ZW5jeSBtaW4gJSIgR1NUX1RJTUVfRk9STUFUICIgbWF4ICUiIEdTVF9USU1FX0ZPUk1BVCwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChtaW5fbGF0ZW5jeSksIEdTVF9USU1FX0FSR1MgKG1heF9sYXRlbmN5KSk7Ci0KLSAgICAgIC8qIHdlIGFyZSBhbHdheXMgbGl2ZSwgdGhlIG1pbiBsYXRlbmN5IGlzIDEgZnJhbWUgYW5kIHRoZSBtYXggbGF0ZW5jeSBpcwotICAgICAgICogdGhlIGNvbXBsZXRlIGJ1ZmZlciBvZiBmcmFtZXMuICovCi0gICAgICBnc3RfcXVlcnlfc2V0X2xhdGVuY3kgKHF1ZXJ5LCBUUlVFLCBtaW5fbGF0ZW5jeSwgbWF4X2xhdGVuY3kpOwotCi0gICAgICByZXMgPSBUUlVFOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnF1ZXJ5IChic3JjLCBxdWVyeSk7Ci0gICAgICBicmVhazsKLSAgfQotCi1kb25lOgotCi0gIHJldHVybiByZXM7Ci19Ci0KLS8qIHN0YXJ0IGFuZCBzdG9wIGFyZSBub3Qgc3ltbWV0cmljIC0tIHN0YXJ0IHdpbGwgb3BlbiB0aGUgZGV2aWNlLCBidXQgbm90IHN0YXJ0Ci0gKiBjYXB0dXJlLiBpdCdzIHNldGNhcHMgdGhhdCB3aWxsIHN0YXJ0IGNhcHR1cmUsIHdoaWNoIGlzIGNhbGxlZCB2aWEgYmFzZXNyYydzCi0gKiBuZWdvdGlhdGUgbWV0aG9kLiBzdG9wIHdpbGwgYm90aCBzdG9wIGNhcHR1cmUgYW5kIGNsb3NlIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJzcmNfc3RhcnQgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdFY0bDJTcmMgKnY0bDJzcmMgPSBHU1RfVjRMMlNSQyAoc3JjKTsKLQotICB2NGwyc3JjLT5vZmZzZXQgPSAwOwotICB2NGwyc3JjLT5yZW5lZ290aWF0aW9uX2FkanVzdCA9IDA7Ci0KLSAgLyogYWN0aXZhdGUgc2V0dGluZ3MgZm9yIGZpcnN0IGZyYW1lICovCi0gIHY0bDJzcmMtPmN0cmxfdGltZSA9IDA7Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHNyYyksIHY0bDJzcmMtPmN0cmxfdGltZSk7Ci0KLSAgdjRsMnNyYy0+aGFzX2JhZF90aW1lc3RhbXAgPSBGQUxTRTsKLSAgdjRsMnNyYy0+bGFzdF90aW1lc3RhbXAgPSAwOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyc3JjX3VubG9jayAoR3N0QmFzZVNyYyAqIHNyYykKLXsKLSAgR3N0VjRsMlNyYyAqdjRsMnNyYyA9IEdTVF9WNEwyU1JDIChzcmMpOwotICByZXR1cm4gZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAodjRsMnNyYy0+djRsMm9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJzcmNfdW5sb2NrX3N0b3AgKEdzdEJhc2VTcmMgKiBzcmMpCi17Ci0gIEdzdFY0bDJTcmMgKnY0bDJzcmMgPSBHU1RfVjRMMlNSQyAoc3JjKTsKLQotICB2NGwyc3JjLT5sYXN0X3RpbWVzdGFtcCA9IDA7Ci0KLSAgcmV0dXJuIGdzdF92NGwyX29iamVjdF91bmxvY2tfc3RvcCAodjRsMnNyYy0+djRsMm9iamVjdCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJzcmNfc3RvcCAoR3N0QmFzZVNyYyAqIHNyYykKLXsKLSAgR3N0VjRsMlNyYyAqdjRsMnNyYyA9IEdTVF9WNEwyU1JDIChzcmMpOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSB2NGwyc3JjLT52NGwyb2JqZWN0OwotCi0gIGlmIChHU1RfVjRMMl9JU19BQ1RJVkUgKG9iaikpIHsKLSAgICBpZiAoIWdzdF92NGwyX29iamVjdF9zdG9wIChvYmopKQotICAgICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgdjRsMnNyYy0+cGVuZGluZ19zZXRfZm10ID0gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotZ3N0X3Y0bDJzcmNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwotICBHc3RWNGwyU3JjICp2NGwyc3JjID0gR1NUX1Y0TDJTUkMgKGVsZW1lbnQpOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSB2NGwyc3JjLT52NGwyb2JqZWN0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgLyogb3BlbiB0aGUgZGV2aWNlICovCi0gICAgICBpZiAoIWdzdF92NGwyX29iamVjdF9vcGVuIChvYmopKQotICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZSAoZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0KLSAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX05VTEw6Ci0gICAgICAvKiBjbG9zZSB0aGUgZGV2aWNlICovCi0gICAgICBpZiAoIWdzdF92NGwyX29iamVjdF9jbG9zZSAob2JqKSkKLSAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKLQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWdzdF92NGwyc3JjX2NyZWF0ZSAoR3N0UHVzaFNyYyAqIHNyYywgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgR3N0VjRsMlNyYyAqdjRsMnNyYyA9IEdTVF9WNEwyU1JDIChzcmMpOwotICBHc3RWNGwyT2JqZWN0ICpvYmogPSB2NGwyc3JjLT52NGwyb2JqZWN0OwotICBHc3RWNGwyQnVmZmVyUG9vbCAqcG9vbCA9IEdTVF9WNEwyX0JVRkZFUl9QT09MX0NBU1QgKG9iai0+cG9vbCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0OwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdENsb2NrVGltZSBhYnNfdGltZSwgYmFzZV90aW1lLCB0aW1lc3RhbXAsIGR1cmF0aW9uOwotICBHc3RDbG9ja1RpbWUgZGVsYXk7Ci0gIEdzdE1lc3NhZ2UgKnFvc19tc2c7Ci0KLSAgZG8gewotICAgIHJldCA9IEdTVF9CQVNFX1NSQ19DTEFTUyAocGFyZW50X2NsYXNzKS0+YWxsb2MgKEdTVF9CQVNFX1NSQyAoc3JjKSwgMCwKLSAgICAgICAgb2JqLT5pbmZvLnNpemUsIGJ1Zik7Ci0KLSAgICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICAgIGdvdG8gYWxsb2NfZmFpbGVkOwotCi0gICAgcmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcHJvY2VzcyAocG9vbCwgYnVmKTsKLQotICB9IHdoaWxlIChyZXQgPT0gR1NUX1Y0TDJfRkxPV19DT1JSVVBURURfQlVGRkVSKTsKLQotICBpZiAoR19VTkxJS0VMWSAocmV0ICE9IEdTVF9GTE9XX09LKSkKLSAgICBnb3RvIGVycm9yOwotCi0gIHRpbWVzdGFtcCA9IEdTVF9CVUZGRVJfVElNRVNUQU1QICgqYnVmKTsKLSAgZHVyYXRpb24gPSBvYmotPmR1cmF0aW9uOwotCi0gIC8qIHRpbWVzdGFtcHMsIExPQ0sgdG8gZ2V0IGNsb2NrIGFuZCBiYXNlIHRpbWUuICovCi0gIC8qIEZJWE1FOiBlbGVtZW50IGNsb2NrIGFuZCBiYXNlX3RpbWUgaXMgcmFyZWx5IGNoYW5naW5nICovCi0gIEdTVF9PQkpFQ1RfTE9DSyAodjRsMnNyYyk7Ci0gIGlmICgoY2xvY2sgPSBHU1RfRUxFTUVOVF9DTE9DSyAodjRsMnNyYykpKSB7Ci0gICAgLyogd2UgaGF2ZSBhIGNsb2NrLCBnZXQgYmFzZSB0aW1lIGFuZCByZWYgY2xvY2sgKi8KLSAgICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVCAodjRsMnNyYyktPmJhc2VfdGltZTsKLSAgICBnc3Rfb2JqZWN0X3JlZiAoY2xvY2spOwotICB9IGVsc2UgewotICAgIC8qIG5vIGNsb2NrLCBjYW4ndCBzZXQgdGltZXN0YW1wcyAqLwotICAgIGJhc2VfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLSAgR1NUX09CSkVDVF9VTkxPQ0sgKHY0bDJzcmMpOwotCi0gIC8qIHNhbXBsZSBwaXBlbGluZSBjbG9jayAqLwotICBpZiAoY2xvY2spIHsKLSAgICBhYnNfdGltZSA9IGdzdF9jbG9ja19nZXRfdGltZSAoY2xvY2spOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLSAgfSBlbHNlIHsKLSAgICBhYnNfdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIH0KLQotcmV0cnk6Ci0gIGlmICghdjRsMnNyYy0+aGFzX2JhZF90aW1lc3RhbXAgJiYgdGltZXN0YW1wICE9IEdTVF9DTE9DS19USU1FX05PTkUpIHsKLSAgICBzdHJ1Y3QgdGltZXNwZWMgbm93OwotICAgIEdzdENsb2NrVGltZSBnc3Rub3c7Ci0KLSAgICAvKiB2NGwyIHNwZWNzIHNheSB0byB1c2UgdGhlIHN5c3RlbSB0aW1lIGFsdGhvdWdoIG1hbnkgZHJpdmVycyBzd2l0Y2hlZCB0bwotICAgICAqIHRoZSBtb3JlIGRlc2lyYWJsZSBtb25vdG9uaWMgdGltZS4gV2UgZmlyc3QgdHJ5IHRvIHVzZSB0aGUgbW9ub3RvbmljIHRpbWUKLSAgICAgKiBhbmQgc2VlIGhvdyB0aGF0IGdvZXMgKi8KLSAgICBjbG9ja19nZXR0aW1lIChDTE9DS19NT05PVE9OSUMsICZub3cpOwotICAgIGdzdG5vdyA9IEdTVF9USU1FU1BFQ19UT19USU1FIChub3cpOwotCi0gICAgaWYgKHRpbWVzdGFtcCA+IGdzdG5vdyB8fCAoZ3N0bm93IC0gdGltZXN0YW1wKSA+ICgxMCAqIEdTVF9TRUNPTkQpKSB7Ci0gICAgICBHVGltZVZhbCBub3c7Ci0KLSAgICAgIC8qIHZlcnkgbGFyZ2UgZGlmZiwgZmFsbCBiYWNrIHRvIHN5c3RlbSB0aW1lICovCi0gICAgICBnX2dldF9jdXJyZW50X3RpbWUgKCZub3cpOwotICAgICAgZ3N0bm93ID0gR1NUX1RJTUVWQUxfVE9fVElNRSAobm93KTsKLSAgICB9Ci0KLSAgICAvKiBEZXRlY3QgYnVnZ3kgZHJpdmVycyBoZXJlLCBhbmQgc3RvcCB1c2luZyB0aGVpciB0aW1lc3RhbXAuIEZhaWxpbmcgYW55Ci0gICAgICogb2YgdGhlc2UgY29uZGl0aW9uIHdvdWxkIGltcGx5IGEgdmVyeSBidWdneSBkcml2ZXI6Ci0gICAgICogICAtIFRpbWVzdGFtcCBpbiB0aGUgZnV0dXJlCi0gICAgICogICAtIFRpbWVzdGFtcCBpcyBnb2luZyBiYWNrd2FyZCBjb21wYXJlIHRvIGxhc3Qgc2VlbiB0aW1lc3RhbXAKLSAgICAgKiAgIC0gVGltZXN0YW1wIGlzIGp1bXBpbmcgZm9yd2FyZCBmb3IgbGVzcyB0aGVuIGEgZnJhbWUgZHVyYXRpb24KLSAgICAgKiAgIC0gRGVsYXkgaXMgYmlnZ2VyIHRoZW4gdGhlIGFjdHVhbCB0aW1lc3RhbXAKLSAgICAgKiAqLwotICAgIGlmICh0aW1lc3RhbXAgPiBnc3Rub3cpIHsKLSAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMnNyYywKLSAgICAgICAgICAiVGltZXN0YW1wIGluIHRoZSBmdXR1cmUgZGV0ZWN0ZWQsIGlnbm9yaW5nIGRyaXZlciB0aW1lc3RhbXBzIik7Ci0gICAgICB2NGwyc3JjLT5oYXNfYmFkX3RpbWVzdGFtcCA9IFRSVUU7Ci0gICAgICBnb3RvIHJldHJ5OwotICAgIH0KLQotICAgIGlmICh2NGwyc3JjLT5sYXN0X3RpbWVzdGFtcCA+IHRpbWVzdGFtcCkgewotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyc3JjLAotICAgICAgICAgICJUaW1lc3RhbXAgZ29pbmcgYmFja3dhcmQsIGlnbm9yaW5nIGRyaXZlciB0aW1lc3RhbXBzIik7Ci0gICAgICB2NGwyc3JjLT5oYXNfYmFkX3RpbWVzdGFtcCA9IFRSVUU7Ci0gICAgICBnb3RvIHJldHJ5OwotICAgIH0KLQotICAgIGRlbGF5ID0gZ3N0bm93IC0gdGltZXN0YW1wOwotCi0gICAgaWYgKGRlbGF5ID4gdGltZXN0YW1wKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHY0bDJzcmMsCi0gICAgICAgICAgIlRpbWVzdGFtcCBkb2VzIG5vdCBjb3JyZWxhdGUgd2l0aCBhbnkgY2xvY2ssIGlnbm9yaW5nIGRyaXZlciB0aW1lc3RhbXBzIik7Ci0gICAgICB2NGwyc3JjLT5oYXNfYmFkX3RpbWVzdGFtcCA9IFRSVUU7Ci0gICAgICBnb3RvIHJldHJ5OwotICAgIH0KLQotICAgIC8qIFNhdmUgbGFzdCB0aW1lc3RhbXAgZm9yIHNhbml0eSBjaGVja3MgKi8KLSAgICB2NGwyc3JjLT5sYXN0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJzcmMsICJ0czogJSIgR1NUX1RJTUVfRk9STUFUICIgbm93ICUiIEdTVF9USU1FX0ZPUk1BVAotICAgICAgICAiIGRlbGF5ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodGltZXN0YW1wKSwKLSAgICAgICAgR1NUX1RJTUVfQVJHUyAoZ3N0bm93KSwgR1NUX1RJTUVfQVJHUyAoZGVsYXkpKTsKLSAgfSBlbHNlIHsKLSAgICAvKiB3ZSBhc3N1bWUgMSBmcmFtZSBsYXRlbmN5IG90aGVyd2lzZSAqLwotICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHVyYXRpb24pKQotICAgICAgZGVsYXkgPSBkdXJhdGlvbjsKLSAgICBlbHNlCi0gICAgICBkZWxheSA9IDA7Ci0gIH0KLQotICAvKiBzZXQgYnVmZmVyIG1ldGFkYXRhICovCi0KLSAgaWYgKEdfTElLRUxZIChhYnNfdGltZSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKSkgewotICAgIC8qIHRoZSB0aW1lIG5vdyBpcyB0aGUgdGltZSBvZiB0aGUgY2xvY2sgbWludXMgdGhlIGJhc2UgdGltZSAqLwotICAgIHRpbWVzdGFtcCA9IGFic190aW1lIC0gYmFzZV90aW1lOwotCi0gICAgLyogYWRqdXN0IGZvciBkZWxheSBpbiB0aGUgZGV2aWNlICovCi0gICAgaWYgKHRpbWVzdGFtcCA+IGRlbGF5KQotICAgICAgdGltZXN0YW1wIC09IGRlbGF5OwotICAgIGVsc2UKLSAgICAgIHRpbWVzdGFtcCA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgdGltZXN0YW1wID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgfQotCi0gIC8qIGFjdGl2YXRlIHNldHRpbmdzIGZvciBuZXh0IGZyYW1lICovCi0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAoZHVyYXRpb24pKSB7Ci0gICAgdjRsMnNyYy0+Y3RybF90aW1lICs9IGR1cmF0aW9uOwotICB9IGVsc2UgewotICAgIC8qIHRoaXMgaXMgbm90IHZlcnkgZ29vZCAoYXMgaXQgc2hvdWxkIGJlIHRoZSBuZXh0IHRpbWVzdGFtcCksCi0gICAgICogc3RpbGwgZ29vZCBlbm91Z2ggZm9yIGxpbmVhciBmYWRlcyAoYXMgbG9uZyBhcyBpdCBpcyBub3QgLTEpCi0gICAgICovCi0gICAgdjRsMnNyYy0+Y3RybF90aW1lID0gdGltZXN0YW1wOwotICB9Ci0gIGdzdF9vYmplY3Rfc3luY192YWx1ZXMgKEdTVF9PQkpFQ1QgKHNyYyksIHY0bDJzcmMtPmN0cmxfdGltZSk7Ci0KLSAgR1NUX0lORk9fT0JKRUNUIChzcmMsICJzeW5jIHRvICUiIEdTVF9USU1FX0ZPUk1BVCAiIG91dCB0cyAlIiBHU1RfVElNRV9GT1JNQVQsCi0gICAgICBHU1RfVElNRV9BUkdTICh2NGwyc3JjLT5jdHJsX3RpbWUpLCBHU1RfVElNRV9BUkdTICh0aW1lc3RhbXApKTsKLQotICAvKiB1c2UgZ2VuZXJhdGVkIG9mZnNldCB2YWx1ZXMgb25seSBpZiB0aGVyZSBhcmUgbm90IGFscmVhZHkgdmFsaWQgb25lcwotICAgKiBzZXQgYnkgdGhlIHY0bDIgZGV2aWNlICovCi0gIGlmICghR1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQgKCpidWYpCi0gICAgICB8fCAhR1NUX0JVRkZFUl9PRkZTRVRfRU5EX0lTX1ZBTElEICgqYnVmKSkgewotICAgIEdTVF9CVUZGRVJfT0ZGU0VUICgqYnVmKSA9IHY0bDJzcmMtPm9mZnNldCsrOwotICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoKmJ1ZikgPSB2NGwyc3JjLT5vZmZzZXQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogYWRqdXN0IHJhdyB2NGwyIGRldmljZSBzZXF1ZW5jZSwgd2lsbCByZXN0YXJ0IGF0IG51bGwgaW4gY2FzZSBvZiByZW5lZ290aWF0aW9uCi0gICAgICogKHN0cmVhbW9mZi9zdHJlYW1vbikgKi8KLSAgICBHU1RfQlVGRkVSX09GRlNFVCAoKmJ1ZikgKz0gdjRsMnNyYy0+cmVuZWdvdGlhdGlvbl9hZGp1c3Q7Ci0gICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EICgqYnVmKSArPSB2NGwyc3JjLT5yZW5lZ290aWF0aW9uX2FkanVzdDsKLSAgICAvKiBjaGVjayBmb3IgZnJhbWUgbG9zcyB3aXRoIGdpdmVuIChmcm9tIHY0bDIgZGV2aWNlKSBidWZmZXIgb2Zmc2V0ICovCi0gICAgaWYgKCh2NGwyc3JjLT5vZmZzZXQgIT0gMCkKLSAgICAgICAgJiYgKEdTVF9CVUZGRVJfT0ZGU0VUICgqYnVmKSAhPSAodjRsMnNyYy0+b2Zmc2V0ICsgMSkpKSB7Ci0gICAgICBndWludDY0IGxvc3RfZnJhbWVfY291bnQgPSBHU1RfQlVGRkVSX09GRlNFVCAoKmJ1ZikgLSB2NGwyc3JjLT5vZmZzZXQgLSAxOwotICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyc3JjLAotICAgICAgICAgICJsb3N0IGZyYW1lcyBkZXRlY3RlZDogY291bnQgPSAlIiBHX0dVSU5UNjRfRk9STUFUICIgLSB0czogJSIKLSAgICAgICAgICBHU1RfVElNRV9GT1JNQVQsIGxvc3RfZnJhbWVfY291bnQsIEdTVF9USU1FX0FSR1MgKHRpbWVzdGFtcCkpOwotCi0gICAgICBxb3NfbXNnID0gZ3N0X21lc3NhZ2VfbmV3X3FvcyAoR1NUX09CSkVDVF9DQVNUICh2NGwyc3JjKSwgVFJVRSwKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLCBHU1RfQ0xPQ0tfVElNRV9OT05FLCB0aW1lc3RhbXAsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQgKGR1cmF0aW9uKSA/IGxvc3RfZnJhbWVfY291bnQgKgotICAgICAgICAgIGR1cmF0aW9uIDogR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UgKEdTVF9FTEVNRU5UX0NBU1QgKHY0bDJzcmMpLCBxb3NfbXNnKTsKLQotICAgIH0KLSAgICB2NGwyc3JjLT5vZmZzZXQgPSBHU1RfQlVGRkVSX09GRlNFVCAoKmJ1Zik7Ci0gIH0KLQotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoKmJ1ZikgPSB0aW1lc3RhbXA7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKCpidWYpID0gZHVyYXRpb247Ci0KLSAgcmV0dXJuIHJldDsKLQotICAvKiBFUlJPUiAqLwotYWxsb2NfZmFpbGVkOgotICB7Ci0gICAgaWYgKHJldCAhPSBHU1RfRkxPV19GTFVTSElORykKLSAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzcmMsIFJFU09VUkNFLCBOT19TUEFDRV9MRUZULAotICAgICAgICAgICgiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIiksIChOVUxMKSk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotZXJyb3I6Ci0gIHsKLSAgICBnc3RfYnVmZmVyX3JlcGxhY2UgKGJ1ZiwgTlVMTCk7Ci0gICAgaWYgKHJldCA9PSBHU1RfVjRMMl9GTE9XX0xBU1RfQlVGRkVSKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc3JjLCBSRVNPVVJDRSwgRkFJTEVELAotICAgICAgICAgICgiRHJpdmVyIHJldHVybmVkIGEgYnVmZmVyIHdpdGggbm8gcGF5bG9hZCwgdGhpcyBtb3N0IGxpa2VseSAiCi0gICAgICAgICAgICAgICJpbmRpY2F0ZSBhIGJ1ZyBpbiB0aGUgZHJpdmVyLiIpLCAoTlVMTCkpOwotICAgICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgImVycm9yIHByb2Nlc3NpbmcgYnVmZmVyICVkICglcykiLCByZXQsCi0gICAgICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci19Ci0KLQotLyogR3N0VVJJSGFuZGxlciBpbnRlcmZhY2UgKi8KLXN0YXRpYyBHc3RVUklUeXBlCi1nc3RfdjRsMnNyY191cmlfZ2V0X3R5cGUgKEdUeXBlIHR5cGUpCi17Ci0gIHJldHVybiBHU1RfVVJJX1NSQzsKLX0KLQotc3RhdGljIGNvbnN0IGdjaGFyICpjb25zdCAqCi1nc3RfdjRsMnNyY191cmlfZ2V0X3Byb3RvY29scyAoR1R5cGUgdHlwZSkKLXsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpwcm90b2NvbHNbXSA9IHsgInY0bDIiLCBOVUxMIH07Ci0KLSAgcmV0dXJuIHByb3RvY29sczsKLX0KLQotc3RhdGljIGdjaGFyICoKLWdzdF92NGwyc3JjX3VyaV9nZXRfdXJpIChHc3RVUklIYW5kbGVyICogaGFuZGxlcikKLXsKLSAgR3N0VjRsMlNyYyAqdjRsMnNyYyA9IEdTVF9WNEwyU1JDIChoYW5kbGVyKTsKLQotICBpZiAodjRsMnNyYy0+djRsMm9iamVjdC0+dmlkZW9kZXYgIT0gTlVMTCkgewotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCJ2NGwyOi8vJXMiLCB2NGwyc3JjLT52NGwyb2JqZWN0LT52aWRlb2Rldik7Ci0gIH0KLQotICByZXR1cm4gZ19zdHJkdXAgKCJ2NGwyOi8vIik7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJzcmNfdXJpX3NldF91cmkgKEdzdFVSSUhhbmRsZXIgKiBoYW5kbGVyLCBjb25zdCBnY2hhciAqIHVyaSwKLSAgICBHRXJyb3IgKiogZXJyb3IpCi17Ci0gIEdzdFY0bDJTcmMgKnY0bDJzcmMgPSBHU1RfVjRMMlNSQyAoaGFuZGxlcik7Ci0gIGNvbnN0IGdjaGFyICpkZXZpY2UgPSBERUZBVUxUX1BST1BfREVWSUNFOwotCi0gIGlmIChzdHJjbXAgKHVyaSwgInY0bDI6Ly8iKSAhPSAwKSB7Ci0gICAgZGV2aWNlID0gdXJpICsgNzsKLSAgfQotICBnX29iamVjdF9zZXQgKHY0bDJzcmMsICJkZXZpY2UiLCBkZXZpY2UsIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMnNyY191cmlfaGFuZGxlcl9pbml0IChncG9pbnRlciBnX2lmYWNlLCBncG9pbnRlciBpZmFjZV9kYXRhKQotewotICBHc3RVUklIYW5kbGVySW50ZXJmYWNlICppZmFjZSA9IChHc3RVUklIYW5kbGVySW50ZXJmYWNlICopIGdfaWZhY2U7Ci0KLSAgaWZhY2UtPmdldF90eXBlID0gZ3N0X3Y0bDJzcmNfdXJpX2dldF90eXBlOwotICBpZmFjZS0+Z2V0X3Byb3RvY29scyA9IGdzdF92NGwyc3JjX3VyaV9nZXRfcHJvdG9jb2xzOwotICBpZmFjZS0+Z2V0X3VyaSA9IGdzdF92NGwyc3JjX3VyaV9nZXRfdXJpOwotICBpZmFjZS0+c2V0X3VyaSA9IGdzdF92NGwyc3JjX3VyaV9zZXRfdXJpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMnNyYy5oIGIvc3lzL3Y0bDIvZ3N0djRsMnNyYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MGEwZGQ2Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogZ3N0djRsMnNyYy5oOiBCVDh4OC9WNEwyIHNvdXJjZSBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WNEwyU1JDX0hfXwotI2RlZmluZSBfX0dTVF9WNEwyU1JDX0hfXwotCi0jaW5jbHVkZSA8Z3N0djRsMm9iamVjdC5oPgotI2luY2x1ZGUgPGdzdHY0bDJidWZmZXJwb29sLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHY0bDJzcmNfZGVidWcpOwotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMlNSQyBcCi0gIChnc3RfdjRsMnNyY19nZXRfdHlwZSgpKQotI2RlZmluZSBHU1RfVjRMMlNSQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1Y0TDJTUkMsR3N0VjRsMlNyYykpCi0jZGVmaW5lIEdTVF9WNEwyU1JDX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1Y0TDJTUkMsR3N0VjRsMlNyY0NsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJTUkMob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9WNEwyU1JDKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJTUkNfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksR1NUX1RZUEVfVjRMMlNSQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyU3JjIEdzdFY0bDJTcmM7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMlNyY0NsYXNzIEdzdFY0bDJTcmNDbGFzczsKLQotLyoqCi0gKiBHc3RWNGwyU3JjOgotICoKLSAqIE9wYXF1ZSBvYmplY3QuCi0gKi8KLXN0cnVjdCBfR3N0VjRsMlNyYwotewotICBHc3RQdXNoU3JjIHB1c2hzcmM7Ci0KLSAgLyo8IHByaXZhdGUgPiovCi0gIEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0OwotCi0gIGd1aW50NjQgb2Zmc2V0OwotCi0gIC8qIG9mZnNldCBhZGp1c3QgYWZ0ZXIgcmVuZWdvdGlhdGlvbiAqLwotICBndWludDY0IHJlbmVnb3RpYXRpb25fYWRqdXN0OwotCi0gIEdzdENsb2NrVGltZSBjdHJsX3RpbWU7Ci0KLSAgZ2Jvb2xlYW4gcGVuZGluZ19zZXRfZm10OwotCi0gIC8qIFRpbWVzdGFtcCBzYW5pdHkgY2hlY2sgKi8KLSAgR3N0Q2xvY2tUaW1lIGxhc3RfdGltZXN0YW1wOwotICBnYm9vbGVhbiBoYXNfYmFkX3RpbWVzdGFtcDsKLX07Ci0KLXN0cnVjdCBfR3N0VjRsMlNyY0NsYXNzCi17Ci0gIEdzdFB1c2hTcmNDbGFzcyBwYXJlbnRfY2xhc3M7Ci0KLSAgR0xpc3QgKnY0bDJfY2xhc3NfZGV2aWNlczsKLX07Ci0KLUdUeXBlIGdzdF92NGwyc3JjX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1Y0TDJTUkNfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmMgYi9zeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZThlZjUuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnRyYW5zZm9ybS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuCi0gKiAgICAgQXV0aG9yOiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3R2NGwydHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAidjRsMl9jYWxscy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC1pMThuLXBsdWdpbi5oPgotCi0jZGVmaW5lIERFRkFVTFRfUFJPUF9ERVZJQ0UgIi9kZXYvdmlkZW8xMCIKLQotI2RlZmluZSBWNEwyX1RSQU5TRk9STV9RVUFSSyBcCi0JZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoImdzdC12NGwyLXRyYW5zZm9ybS1pbmZvIikKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X3Y0bDJfdHJhbnNmb3JtX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF92NGwyX3RyYW5zZm9ybV9kZWJ1ZwotCi0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBWNEwyX1NURF9PQkpFQ1RfUFJPUFMKLX07Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdjaGFyICpkZXZpY2U7Ci0gIEdzdENhcHMgKnNpbmtfY2FwczsKLSAgR3N0Q2FwcyAqc3JjX2NhcHM7Ci19IEdzdFY0bDJUcmFuc2Zvcm1DRGF0YTsKLQotI2RlZmluZSBnc3RfdjRsMl90cmFuc2Zvcm1fcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfQUJTVFJBQ1RfVFlQRSAoR3N0VjRsMlRyYW5zZm9ybSwgZ3N0X3Y0bDJfdHJhbnNmb3JtLAotICAgIEdTVF9UWVBFX0JBU0VfVFJBTlNGT1JNKTsKLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3RyYW5zZm9ybV9zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VjRsMlRyYW5zZm9ybSAqc2VsZiA9IEdTVF9WNEwyX1RSQU5TRk9STSAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfT1VUUFVUX0lPX01PREU6Ci0gICAgICBnc3RfdjRsMl9vYmplY3Rfc2V0X3Byb3BlcnR5X2hlbHBlciAoc2VsZi0+djRsMm91dHB1dCwgcHJvcF9pZCwgdmFsdWUsCi0gICAgICAgICAgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBUFRVUkVfSU9fTU9ERToKLSAgICAgIGdzdF92NGwyX29iamVjdF9zZXRfcHJvcGVydHlfaGVscGVyIChzZWxmLT52NGwyY2FwdHVyZSwgcHJvcF9pZCwgdmFsdWUsCi0gICAgICAgICAgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIEJ5IGRlZmF1bHQsIG9ubHkgc2V0IG9uIG91dHB1dCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXRfcHJvcGVydHlfaGVscGVyIChzZWxmLT52NGwyb3V0cHV0LAotICAgICAgICAgICAgICBwcm9wX2lkLCB2YWx1ZSwgcHNwZWMpKSB7Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdHJhbnNmb3JtX2dldF9wcm9wZXJ0eSAoR09iamVjdCAqIG9iamVjdCwKLSAgICBndWludCBwcm9wX2lkLCBHVmFsdWUgKiB2YWx1ZSwgR1BhcmFtU3BlYyAqIHBzcGVjKQotewotICBHc3RWNGwyVHJhbnNmb3JtICpzZWxmID0gR1NUX1Y0TDJfVFJBTlNGT1JNIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9PVVRQVVRfSU9fTU9ERToKLSAgICAgIGdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyIChzZWxmLT52NGwyb3V0cHV0LCBwcm9wX2lkLCB2YWx1ZSwKLSAgICAgICAgICBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FQVFVSRV9JT19NT0RFOgotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9wcm9wZXJ0eV9oZWxwZXIgKHNlbGYtPnY0bDJjYXB0dXJlLCBwcm9wX2lkLCB2YWx1ZSwKLSAgICAgICAgICBwc3BlYyk7Ci0gICAgICBicmVhazsKLQotICAgICAgLyogQnkgZGVmYXVsdCByZWFkIGZyb20gb3V0cHV0ICovCi0gICAgZGVmYXVsdDoKLSAgICAgIGlmICghZ3N0X3Y0bDJfb2JqZWN0X2dldF9wcm9wZXJ0eV9oZWxwZXIgKHNlbGYtPnY0bDJvdXRwdXQsCi0gICAgICAgICAgICAgIHByb3BfaWQsIHZhbHVlLCBwc3BlYykpIHsKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfdHJhbnNmb3JtX29wZW4gKEdzdFY0bDJUcmFuc2Zvcm0gKiBzZWxmKQotewotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiT3BlbmluZyIpOwotCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X29wZW4gKHNlbGYtPnY0bDJvdXRwdXQpKQotICAgIGdvdG8gZmFpbHVyZTsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9vcGVuX3NoYXJlZCAoc2VsZi0+djRsMmNhcHR1cmUsIHNlbGYtPnY0bDJvdXRwdXQpKQotICAgIGdvdG8gZmFpbHVyZTsKLQotICBzZWxmLT5wcm9iZWRfc2lua2NhcHMgPSBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHMgKHNlbGYtPnY0bDJvdXRwdXQsCi0gICAgICBnc3RfdjRsMl9vYmplY3RfZ2V0X3Jhd19jYXBzICgpKTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfZW1wdHkgKHNlbGYtPnByb2JlZF9zaW5rY2FwcykpCi0gICAgZ290byBub19pbnB1dF9mb3JtYXQ7Ci0KLSAgc2VsZi0+cHJvYmVkX3NyY2NhcHMgPSBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHMgKHNlbGYtPnY0bDJjYXB0dXJlLAotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9yYXdfY2FwcyAoKSk7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChzZWxmLT5wcm9iZWRfc3JjY2FwcykpCi0gICAgZ290byBub19vdXRwdXRfZm9ybWF0OwotCi0gIHJldHVybiBUUlVFOwotCi1ub19pbnB1dF9mb3JtYXQ6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAoXygiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIpLAotICAgICAgICAgIHNlbGYtPnY0bDJvdXRwdXQtPnZpZGVvZGV2KSwgKE5VTEwpKTsKLSAgZ290byBmYWlsdXJlOwotCi0KLW5vX291dHB1dF9mb3JtYXQ6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAoXygiQ29udmVydGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQiKSwKLSAgICAgICAgICBzZWxmLT52NGwyb3V0cHV0LT52aWRlb2RldiksIChOVUxMKSk7Ci0gIGdvdG8gZmFpbHVyZTsKLQotZmFpbHVyZToKLSAgaWYgKEdTVF9WNEwyX0lTX09QRU4gKHNlbGYtPnY0bDJvdXRwdXQpKQotICAgIGdzdF92NGwyX29iamVjdF9jbG9zZSAoc2VsZi0+djRsMm91dHB1dCk7Ci0KLSAgaWYgKEdTVF9WNEwyX0lTX09QRU4gKHNlbGYtPnY0bDJjYXB0dXJlKSkKLSAgICBnc3RfdjRsMl9vYmplY3RfY2xvc2UgKHNlbGYtPnY0bDJjYXB0dXJlKTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmc2VsZi0+cHJvYmVkX3NyY2NhcHMsIE5VTEwpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmc2VsZi0+cHJvYmVkX3NpbmtjYXBzLCBOVUxMKTsKLQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl90cmFuc2Zvcm1fY2xvc2UgKEdzdFY0bDJUcmFuc2Zvcm0gKiBzZWxmKQotewotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiQ2xvc2luZyIpOwotCi0gIGdzdF92NGwyX29iamVjdF9jbG9zZSAoc2VsZi0+djRsMm91dHB1dCk7Ci0gIGdzdF92NGwyX29iamVjdF9jbG9zZSAoc2VsZi0+djRsMmNhcHR1cmUpOwotCi0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5wcm9iZWRfc3JjY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5wcm9iZWRfc2lua2NhcHMsIE5VTEwpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3RyYW5zZm9ybV9zdG9wIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKHRyYW5zKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiU3RvcCIpOwotCi0gIGdzdF92NGwyX29iamVjdF9zdG9wIChzZWxmLT52NGwyb3V0cHV0KTsKLSAgZ3N0X3Y0bDJfb2JqZWN0X3N0b3AgKHNlbGYtPnY0bDJjYXB0dXJlKTsKLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPmluY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5vdXRjYXBzLCBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl90cmFuc2Zvcm1fc2V0X2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0Q2FwcyAqIGluY2FwcywKLSAgICBHc3RDYXBzICogb3V0Y2FwcykKLXsKLSAgR3N0VjRsMkVycm9yIGVycm9yID0gR1NUX1Y0TDJfRVJST1JfSU5JVDsKLSAgR3N0VjRsMlRyYW5zZm9ybSAqc2VsZiA9IEdTVF9WNEwyX1RSQU5TRk9STSAodHJhbnMpOwotCi0gIGlmIChzZWxmLT5pbmNhcHMgJiYgc2VsZi0+b3V0Y2FwcykgewotICAgIGlmIChnc3RfY2Fwc19pc19lcXVhbCAoaW5jYXBzLCBzZWxmLT5pbmNhcHMpICYmCi0gICAgICAgIGdzdF9jYXBzX2lzX2VxdWFsIChvdXRjYXBzLCBzZWxmLT5vdXRjYXBzKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJDYXBzIGRpZCBub3QgY2hhbmdlZCIpOwotICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotICB9Ci0KLSAgLyogVE9ETyBBZGQgcmVuZWdvdGlhdGlvbiBzdXBwb3J0ICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsICghR1NUX1Y0TDJfSVNfQUNUSVZFIChzZWxmLT52NGwyb3V0cHV0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoIUdTVF9WNEwyX0lTX0FDVElWRSAoc2VsZi0+djRsMmNhcHR1cmUpLCBGQUxTRSk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPmluY2FwcywgaW5jYXBzKTsKLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPm91dGNhcHMsIG91dGNhcHMpOwotCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3NldF9mb3JtYXQgKHNlbGYtPnY0bDJvdXRwdXQsIGluY2FwcywgJmVycm9yKSkKLSAgICBnb3RvIGluY2Fwc19mYWlsZWQ7Ci0KLSAgaWYgKCFnc3RfdjRsMl9vYmplY3Rfc2V0X2Zvcm1hdCAoc2VsZi0+djRsMmNhcHR1cmUsIG91dGNhcHMsICZlcnJvcikpCi0gICAgZ290byBvdXRjYXBzX2ZhaWxlZDsKLQotICAvKiBGSVhNRSBpbXBsZW1lbnQgZmFsbGJhY2sgaWYgY3JvcCBub3Qgc3VwcG9ydGVkICovCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3NldF9jcm9wIChzZWxmLT52NGwyb3V0cHV0KSkKLSAgICBnb3RvIGZhaWxlZDsKLQotICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXRfY3JvcCAoc2VsZi0+djRsMmNhcHR1cmUpKQotICAgIGdvdG8gZmFpbGVkOwotCi0gIHJldHVybiBUUlVFOwotCi1pbmNhcHNfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAoc2VsZiwgImZhaWxlZCB0byBzZXQgaW5wdXQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgIGluY2Fwcyk7Ci0gICAgZ3N0X3Y0bDJfZXJyb3IgKHNlbGYsICZlcnJvcik7Ci0gICAgZ290byBmYWlsZWQ7Ci0gIH0KLW91dGNhcHNfZmFpbGVkOgotICB7Ci0gICAgZ3N0X3Y0bDJfb2JqZWN0X3N0b3AgKHNlbGYtPnY0bDJvdXRwdXQpOwotICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHNlbGYsICJmYWlsZWQgdG8gc2V0IG91dHB1dCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgICAgb3V0Y2Fwcyk7Ci0gICAgZ3N0X3Y0bDJfZXJyb3IgKHNlbGYsICZlcnJvcik7Ci0gICAgZ290byBmYWlsZWQ7Ci0gIH0KLWZhaWxlZDoKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3RyYW5zZm9ybV9xdWVyeSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RQYWREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKHRyYW5zKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOnsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKmNhcHMgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKLSAgICAgIEdzdFBhZCAqcGFkLCAqb3RoZXJwYWQ7Ci0KLSAgICAgIGdzdF9xdWVyeV9wYXJzZV9jYXBzIChxdWVyeSwgJmZpbHRlcik7Ci0KLSAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1NUX1BBRF9TUkMpIHsKLSAgICAgICAgcGFkID0gR1NUX0JBU0VfVFJBTlNGT1JNX1NSQ19QQUQgKHRyYW5zKTsKLSAgICAgICAgb3RoZXJwYWQgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fU0lOS19QQUQgKHRyYW5zKTsKLSAgICAgICAgaWYgKHNlbGYtPnByb2JlZF9zcmNjYXBzKQotICAgICAgICAgIGNhcHMgPSBnc3RfY2Fwc19yZWYgKHNlbGYtPnByb2JlZF9zcmNjYXBzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhZCA9IEdTVF9CQVNFX1RSQU5TRk9STV9TSU5LX1BBRCAodHJhbnMpOwotICAgICAgICBvdGhlcnBhZCA9IEdTVF9CQVNFX1RSQU5TRk9STV9TUkNfUEFEICh0cmFucyk7Ci0gICAgICAgIGlmIChzZWxmLT5wcm9iZWRfc2lua2NhcHMpCi0gICAgICAgICAgY2FwcyA9IGdzdF9jYXBzX3JlZiAoc2VsZi0+cHJvYmVkX3NpbmtjYXBzKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFjYXBzKQotICAgICAgICBjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHBhZCk7Ci0KLSAgICAgIGlmIChmaWx0ZXIpIHsKLSAgICAgICAgR3N0Q2FwcyAqdG1wID0gY2FwczsKLSAgICAgICAgY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdF9mdWxsIChmaWx0ZXIsIHRtcCwgR1NUX0NBUFNfSU5URVJTRUNUX0ZJUlNUKTsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgICB9Ci0KLSAgICAgIHJlc3VsdCA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChvdGhlcnBhZCwgY2Fwcyk7Ci0gICAgICByZXN1bHQgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChyZXN1bHQpOwotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChyZXN1bHQsIGNhcHMpOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUmV0dXJuaW5nICVzIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICAgICAgR1NUX1BBRF9OQU1FIChwYWQpLCByZXN1bHQpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgcmVzdWx0KTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+cXVlcnkgKHRyYW5zLCBkaXJlY3Rpb24sCi0gICAgICAgICAgcXVlcnkpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3RyYW5zZm9ybV9kZWNpZGVfYWxsb2NhdGlvbiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKHRyYW5zKTsKLSAgZ2Jvb2xlYW4gcmV0ID0gRkFMU0U7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImNhbGxlZCIpOwotCi0gIGlmIChnc3RfdjRsMl9vYmplY3RfZGVjaWRlX2FsbG9jYXRpb24gKHNlbGYtPnY0bDJjYXB0dXJlLCBxdWVyeSkpIHsKLSAgICBHc3RCdWZmZXJQb29sICpwb29sID0gR1NUX0JVRkZFUl9QT09MIChzZWxmLT52NGwyY2FwdHVyZS0+cG9vbCk7Ci0KLSAgICByZXQgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRlY2lkZV9hbGxvY2F0aW9uICh0cmFucywKLSAgICAgICAgcXVlcnkpOwotCi0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAocG9vbCwgVFJVRSkpCi0gICAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci0KLWFjdGl2YXRlX2ZhaWxlZDoKLSAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICgiZmFpbGVkIHRvIGFjdGl2YXRlIGJ1ZmZlcnBvb2wiKSwgKCJmYWlsZWQgdG8gYWN0aXZhdGUgYnVmZmVycG9vbCIpKTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfdHJhbnNmb3JtX3Byb3Bvc2VfYWxsb2NhdGlvbiAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFF1ZXJ5ICogZGVjaWRlX3F1ZXJ5LCBHc3RRdWVyeSAqIHF1ZXJ5KQotewotICBHc3RWNGwyVHJhbnNmb3JtICpzZWxmID0gR1NUX1Y0TDJfVFJBTlNGT1JNICh0cmFucyk7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJjYWxsZWQiKTsKLQotICBpZiAoZGVjaWRlX3F1ZXJ5ID09IE5VTEwpCi0gICAgcmV0ID0gVFJVRTsKLSAgZWxzZQotICAgIHJldCA9IGdzdF92NGwyX29iamVjdF9wcm9wb3NlX2FsbG9jYXRpb24gKHNlbGYtPnY0bDJvdXRwdXQsIHF1ZXJ5KTsKLQotICBpZiAocmV0KQotICAgIHJldCA9IEdTVF9CQVNFX1RSQU5TRk9STV9DTEFTUyAocGFyZW50X2NsYXNzKS0+cHJvcG9zZV9hbGxvY2F0aW9uICh0cmFucywKLSAgICAgICAgZGVjaWRlX3F1ZXJ5LCBxdWVyeSk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotLyogY29waWVzIHRoZSBnaXZlbiBjYXBzICovCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfdjRsMl90cmFuc2Zvcm1fY2Fwc19yZW1vdmVfZm9ybWF0X2luZm8gKEdzdENhcHMgKiBjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKnN0OwotICBHc3RDYXBzRmVhdHVyZXMgKmY7Ci0gIGdpbnQgaSwgbjsKLSAgR3N0Q2FwcyAqcmVzOwotCi0gIHJlcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICBuID0gZ3N0X2NhcHNfZ2V0X3NpemUgKGNhcHMpOwotICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgc3QgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKTsKLSAgICBmID0gZ3N0X2NhcHNfZ2V0X2ZlYXR1cmVzIChjYXBzLCBpKTsKLQotICAgIC8qIElmIHRoaXMgaXMgYWxyZWFkeSBleHByZXNzZWQgYnkgdGhlIGV4aXN0aW5nIGNhcHMKLSAgICAgKiBza2lwIHRoaXMgc3RydWN0dXJlICovCi0gICAgaWYgKGkgPiAwICYmIGdzdF9jYXBzX2lzX3N1YnNldF9zdHJ1Y3R1cmVfZnVsbCAocmVzLCBzdCwgZikpCi0gICAgICBjb250aW51ZTsKLQotICAgIHN0ID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChzdCk7Ci0gICAgLyogT25seSByZW1vdmUgZm9ybWF0IGluZm8gZm9yIHRoZSBjYXNlcyB3aGVuIHdlIGNhbiBhY3R1YWxseSBjb252ZXJ0ICovCi0gICAgaWYgKCFnc3RfY2Fwc19mZWF0dXJlc19pc19hbnkgKGYpCi0gICAgICAgICYmIGdzdF9jYXBzX2ZlYXR1cmVzX2lzX2VxdWFsIChmLAotICAgICAgICAgICAgR1NUX0NBUFNfRkVBVFVSRVNfTUVNT1JZX1NZU1RFTV9NRU1PUlkpKQotICAgICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGRzIChzdCwgImZvcm1hdCIsICJjb2xvcmltZXRyeSIsICJjaHJvbWEtc2l0ZSIsCi0gICAgICAgICAgIndpZHRoIiwgImhlaWdodCIsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBOVUxMKTsKLQotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmVfZnVsbCAocmVzLCBzdCwgZ3N0X2NhcHNfZmVhdHVyZXNfY29weSAoZikpOwotICB9Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotLyogVGhlIGNhcHMgY2FuIGJlIHRyYW5zZm9ybWVkIGludG8gYW55IG90aGVyIGNhcHMgd2l0aCBmb3JtYXQgaW5mbyByZW1vdmVkLgotICogSG93ZXZlciwgd2Ugc2hvdWxkIHByZWZlciBwYXNzdGhyb3VnaCwgc28gaWYgcGFzc3Rocm91Z2ggaXMgcG9zc2libGUsCi0gKiBwdXQgaXQgZmlyc3QgaW4gdGhlIGxpc3QuICovCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfdjRsMl90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMgKEdzdEJhc2VUcmFuc2Zvcm0gKiBidHJhbnMsCi0gICAgR3N0UGFkRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3N0Q2FwcyAqIGNhcHMsIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdENhcHMgKnRtcCwgKnRtcDI7Ci0gIEdzdENhcHMgKnJlc3VsdDsKLQotICAvKiBHZXQgYWxsIHBvc3NpYmxlIGNhcHMgdGhhdCB3ZSBjYW4gdHJhbnNmb3JtIHRvICovCi0gIHRtcCA9IGdzdF92NGwyX3RyYW5zZm9ybV9jYXBzX3JlbW92ZV9mb3JtYXRfaW5mbyAoY2Fwcyk7Ci0KLSAgaWYgKGZpbHRlcikgewotICAgIHRtcDIgPSBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCB0bXAsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHRtcCk7Ci0gICAgdG1wID0gdG1wMjsKLSAgfQotCi0gIHJlc3VsdCA9IHRtcDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChidHJhbnMsICJ0cmFuc2Zvcm1lZCAlIiBHU1RfUFRSX0ZPUk1BVCAiIGludG8gJSIKLSAgICAgIEdTVF9QVFJfRk9STUFULCBjYXBzLCByZXN1bHQpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF92NGwyX3RyYW5zZm9ybV9maXhhdGVfY2FwcyAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLAotICAgIEdzdFBhZERpcmVjdGlvbiBkaXJlY3Rpb24sIEdzdENhcHMgKiBjYXBzLCBHc3RDYXBzICogb3RoZXJjYXBzKQotewotICBHc3RTdHJ1Y3R1cmUgKmlucywgKm91dHM7Ci0gIGNvbnN0IEdWYWx1ZSAqZnJvbV9wYXIsICp0b19wYXI7Ci0gIEdWYWx1ZSBmcGFyID0geyAwLCB9LCB0cGFyID0gewotICAwLH07Ci0KLSAgb3RoZXJjYXBzID0gZ3N0X2NhcHNfdHJ1bmNhdGUgKG90aGVyY2Fwcyk7Ci0gIG90aGVyY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKG90aGVyY2Fwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJ0cnlpbmcgdG8gZml4YXRlIG90aGVyY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVAotICAgICAgIiBiYXNlZCBvbiBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMsIGNhcHMpOwotCi0gIGlucyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBvdXRzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAob3RoZXJjYXBzLCAwKTsKLQotICB7Ci0gICAgY29uc3QgZ2NoYXIgKmluX2Zvcm1hdDsKLQotICAgIGluX2Zvcm1hdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoaW5zLCAiZm9ybWF0Iik7Ci0gICAgaWYgKGluX2Zvcm1hdCkgewotICAgICAgLyogVHJ5IHRvIHNldCBvdXRwdXQgZm9ybWF0IGZvciBwYXNzIHRocm91Z2ggKi8KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX3N0cmluZyAob3V0cywgImZvcm1hdCIsIGluX2Zvcm1hdCk7Ci0gICAgfQotCi0gIH0KLQotICBmcm9tX3BhciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChpbnMsICJwaXhlbC1hc3BlY3QtcmF0aW8iKTsKLSAgdG9fcGFyID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iKTsKLQotICAvKiBJZiB3ZSdyZSBmaXhhdGluZyBmcm9tIHRoZSBzaW5rcGFkIHdlIGFsd2F5cyBzZXQgdGhlIFBBUiBhbmQKLSAgICogYXNzdW1lIHRoYXQgbWlzc2luZyBQQVIgb24gdGhlIHNpbmtwYWQgbWVhbnMgMS8xIGFuZAotICAgKiBtaXNzaW5nIFBBUiBvbiB0aGUgc3JjcGFkIG1lYW5zIHVuZGVmaW5lZAotICAgKi8KLSAgaWYgKGRpcmVjdGlvbiA9PSBHU1RfUEFEX1NJTkspIHsKLSAgICBpZiAoIWZyb21fcGFyKSB7Ci0gICAgICBnX3ZhbHVlX2luaXQgKCZmcGFyLCBHU1RfVFlQRV9GUkFDVElPTik7Ci0gICAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmZnBhciwgMSwgMSk7Ci0gICAgICBmcm9tX3BhciA9ICZmcGFyOwotICAgIH0KLSAgICBpZiAoIXRvX3BhcikgewotICAgICAgZ192YWx1ZV9pbml0ICgmdHBhciwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UpOwotICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbl9yYW5nZV9mdWxsICgmdHBhciwgMSwgR19NQVhJTlQsIEdfTUFYSU5ULCAxKTsKLSAgICAgIHRvX3BhciA9ICZ0cGFyOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBpZiAoIXRvX3BhcikgewotICAgICAgZ192YWx1ZV9pbml0ICgmdHBhciwgR1NUX1RZUEVfRlJBQ1RJT04pOwotICAgICAgZ3N0X3ZhbHVlX3NldF9mcmFjdGlvbiAoJnRwYXIsIDEsIDEpOwotICAgICAgdG9fcGFyID0gJnRwYXI7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDEsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgfQotICAgIGlmICghZnJvbV9wYXIpIHsKLSAgICAgIGdfdmFsdWVfaW5pdCAoJmZwYXIsIEdTVF9UWVBFX0ZSQUNUSU9OKTsKLSAgICAgIGdzdF92YWx1ZV9zZXRfZnJhY3Rpb24gKCZmcGFyLCAxLCAxKTsKLSAgICAgIGZyb21fcGFyID0gJmZwYXI7Ci0gICAgfQotICB9Ci0KLSAgLyogd2UgaGF2ZSBib3RoIFBBUiBidXQgdGhleSBtaWdodCBub3QgYmUgZml4YXRlZCAqLwotICB7Ci0gICAgZ2ludCBmcm9tX3csIGZyb21faCwgZnJvbV9wYXJfbiwgZnJvbV9wYXJfZCwgdG9fcGFyX24sIHRvX3Bhcl9kOwotICAgIGdpbnQgdyA9IDAsIGggPSAwOwotICAgIGdpbnQgZnJvbV9kYXJfbiwgZnJvbV9kYXJfZDsKLSAgICBnaW50IG51bSwgZGVuOwotCi0gICAgLyogZnJvbV9wYXIgc2hvdWxkIGJlIGZpeGVkICovCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF92YWx1ZV9pc19maXhlZCAoZnJvbV9wYXIpLCBvdGhlcmNhcHMpOwotCi0gICAgZnJvbV9wYXJfbiA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fbnVtZXJhdG9yIChmcm9tX3Bhcik7Ci0gICAgZnJvbV9wYXJfZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKGZyb21fcGFyKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoaW5zLCAid2lkdGgiLCAmZnJvbV93KTsKLSAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKGlucywgImhlaWdodCIsICZmcm9tX2gpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChvdXRzLCAid2lkdGgiLCAmdyk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChvdXRzLCAiaGVpZ2h0IiwgJmgpOwotCi0gICAgLyogaWYgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhbHJlYWR5IGZpeGVkLCB3ZSBjYW4ndCBkbyBhbnl0aGluZwotICAgICAqIGFib3V0IGl0IGFueW1vcmUgKi8KLSAgICBpZiAodyAmJiBoKSB7Ci0gICAgICBndWludCBuLCBkOwotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImRpbWVuc2lvbnMgYWxyZWFkeSBzZXQgdG8gJWR4JWQsIG5vdCBmaXhhdGluZyIsCi0gICAgICAgICAgdywgaCk7Ci0gICAgICBpZiAoIWdzdF92YWx1ZV9pc19maXhlZCAodG9fcGFyKSkgewotICAgICAgICBpZiAoZ3N0X3ZpZGVvX2NhbGN1bGF0ZV9kaXNwbGF5X3JhdGlvICgmbiwgJmQsIGZyb21fdywgZnJvbV9oLAotICAgICAgICAgICAgICAgIGZyb21fcGFyX24sIGZyb21fcGFyX2QsIHcsIGgpKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAodHJhbnMsICJmaXhhdGluZyB0b19wYXIgdG8gJWR4JWQiLCBuLCBkKTsKLSAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iKSkKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfZnJhY3Rpb24gKG91dHMsCi0gICAgICAgICAgICAgICAgInBpeGVsLWFzcGVjdC1yYXRpbyIsIG4sIGQpOwotICAgICAgICAgIGVsc2UgaWYgKG4gIT0gZCkKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICAgICAgICAgICAgbiwgZCwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICAvKiBDYWxjdWxhdGUgaW5wdXQgREFSICovCi0gICAgaWYgKCFnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAoZnJvbV93LCBmcm9tX2gsIGZyb21fcGFyX24sIGZyb21fcGFyX2QsCi0gICAgICAgICAgICAmZnJvbV9kYXJfbiwgJmZyb21fZGFyX2QpKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgKCJFcnJvciBjYWxjdWxhdGluZyB0aGUgb3V0cHV0IHNjYWxlZCBzaXplIC0gaW50ZWdlciBvdmVyZmxvdyIpKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIklucHV0IERBUiBpcyAlZC8lZCIsIGZyb21fZGFyX24sIGZyb21fZGFyX2QpOwotCi0gICAgLyogSWYgZWl0aGVyIHdpZHRoIG9yIGhlaWdodCBhcmUgZml4ZWQgdGhlcmUncyBub3QgbXVjaCB3ZQotICAgICAqIGNhbiBkbyBlaXRoZXIgZXhjZXB0IGNob29zaW5nIGEgaGVpZ2h0IG9yIHdpZHRoIGFuZCBQQVIKLSAgICAgKiB0aGF0IG1hdGNoZXMgdGhlIERBUiBhcyBnb29kIGFzIHBvc3NpYmxlCi0gICAgICovCi0gICAgaWYgKGgpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqdG1wOwotICAgICAgZ2ludCBzZXRfdywgc2V0X3Bhcl9uLCBzZXRfcGFyX2Q7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiaGVpZ2h0IGlzIGZpeGVkICglZCkiLCBoKTsKLQotICAgICAgLyogSWYgdGhlIFBBUiBpcyBmaXhlZCB0b28sIHRoZXJlJ3Mgbm90IG11Y2ggdG8gZG8KLSAgICAgICAqIGV4Y2VwdCBjaG9vc2luZyB0aGUgd2lkdGggdGhhdCBpcyBuZWFyZXN0IHRvIHRoZQotICAgICAgICogd2lkdGggd2l0aCB0aGUgc2FtZSBEQVIgKi8KLSAgICAgIGlmIChnc3RfdmFsdWVfaXNfZml4ZWQgKHRvX3BhcikpIHsKLSAgICAgICAgdG9fcGFyX24gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAodG9fcGFyKTsKLSAgICAgICAgdG9fcGFyX2QgPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX2Rlbm9taW5hdG9yICh0b19wYXIpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiUEFSIGlzIGZpeGVkICVkLyVkIiwgdG9fcGFyX24sIHRvX3Bhcl9kKTsKLQotICAgICAgICBpZiAoIWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5IChmcm9tX2Rhcl9uLCBmcm9tX2Rhcl9kLCB0b19wYXJfZCwKLSAgICAgICAgICAgICAgICB0b19wYXJfbiwgJm51bSwgJmRlbikpIHsKLSAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgICAgICgiRXJyb3IgY2FsY3VsYXRpbmcgdGhlIG91dHB1dCBzY2FsZWQgc2l6ZSAtIGludGVnZXIgb3ZlcmZsb3ciKSk7Ci0gICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0KLSAgICAgICAgdyA9IChndWludCkgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoaCwgbnVtLCBkZW4pOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAob3V0cywgIndpZHRoIiwgdyk7Ci0KLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotCi0gICAgICAvKiBUaGUgUEFSIGlzIG5vdCBmaXhlZCBhbmQgaXQncyBxdWl0ZSBsaWtlbHkgdGhhdCB3ZSBjYW4gc2V0Ci0gICAgICAgKiBhbiBhcmJpdHJhcnkgUEFSLiAqLwotCi0gICAgICAvKiBDaGVjayBpZiB3ZSBjYW4ga2VlcCB0aGUgaW5wdXQgd2lkdGggKi8KLSAgICAgIHRtcCA9IGdzdF9zdHJ1Y3R1cmVfY29weSAob3V0cyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAodG1wLCAid2lkdGgiLCBmcm9tX3cpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICh0bXAsICJ3aWR0aCIsICZzZXRfdyk7Ci0KLSAgICAgIC8qIE1pZ2h0IGhhdmUgZmFpbGVkIGJ1dCB0cnkgdG8ga2VlcCB0aGUgREFSIG5vbmV0aGVsZXNzIGJ5Ci0gICAgICAgKiBhZGp1c3RpbmcgdGhlIFBBUiAqLwotICAgICAgaWYgKCFnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAoZnJvbV9kYXJfbiwgZnJvbV9kYXJfZCwgaCwgc2V0X3csCi0gICAgICAgICAgICAgICZ0b19wYXJfbiwgJnRvX3Bhcl9kKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgICAoIkVycm9yIGNhbGN1bGF0aW5nIHRoZSBvdXRwdXQgc2NhbGVkIHNpemUgLSBpbnRlZ2VyIG92ZXJmbG93IikpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHRtcCk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAodG1wLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICh0bXAsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCB0b19wYXIpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAodG1wLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICB0b19wYXJfbiwgdG9fcGFyX2QpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKHRtcCwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICZzZXRfcGFyX24sCi0gICAgICAgICAgJnNldF9wYXJfZCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHRtcCk7Ci0KLSAgICAgIC8qIENoZWNrIGlmIHRoZSBhZGp1c3RlZCBQQVIgaXMgYWNjZXB0ZWQgKi8KLSAgICAgIGlmIChzZXRfcGFyX24gPT0gdG9fcGFyX24gJiYgc2V0X3Bhcl9kID09IHRvX3Bhcl9kKSB7Ci0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAob3V0cywgInBpeGVsLWFzcGVjdC1yYXRpbyIpIHx8Ci0gICAgICAgICAgICBzZXRfcGFyX24gIT0gc2V0X3Bhcl9kKQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZXRfdywKLSAgICAgICAgICAgICAgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLCBzZXRfcGFyX24sIHNldF9wYXJfZCwKLSAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgLyogT3RoZXJ3aXNlIHNjYWxlIHRoZSB3aWR0aCB0byB0aGUgbmV3IFBBUiBhbmQgY2hlY2sgaWYgdGhlCi0gICAgICAgKiBhZGp1c3RlZCB3aXRoIGlzIGFjY2VwdGVkLiBJZiBhbGwgdGhhdCBmYWlscyB3ZSBjYW4ndCBrZWVwCi0gICAgICAgKiB0aGUgREFSICovCi0gICAgICBpZiAoIWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5IChmcm9tX2Rhcl9uLCBmcm9tX2Rhcl9kLCBzZXRfcGFyX2QsCi0gICAgICAgICAgICAgIHNldF9wYXJfbiwgJm51bSwgJmRlbikpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHRyYW5zLCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAotICAgICAgICAgICAgKCJFcnJvciBjYWxjdWxhdGluZyB0aGUgb3V0cHV0IHNjYWxlZCBzaXplIC0gaW50ZWdlciBvdmVyZmxvdyIpKTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotCi0gICAgICB3ID0gKGd1aW50KSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChoLCBudW0sIGRlbik7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAob3V0cywgIndpZHRoIiwgdyk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iKSB8fAotICAgICAgICAgIHNldF9wYXJfbiAhPSBzZXRfcGFyX2QpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICAgICAgICBzZXRfcGFyX24sIHNldF9wYXJfZCwgTlVMTCk7Ci0KLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9IGVsc2UgaWYgKHcpIHsKLSAgICAgIEdzdFN0cnVjdHVyZSAqdG1wOwotICAgICAgZ2ludCBzZXRfaCwgc2V0X3Bhcl9uLCBzZXRfcGFyX2Q7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAid2lkdGggaXMgZml4ZWQgKCVkKSIsIHcpOwotCi0gICAgICAvKiBJZiB0aGUgUEFSIGlzIGZpeGVkIHRvbywgdGhlcmUncyBub3QgbXVjaCB0byBkbwotICAgICAgICogZXhjZXB0IGNob29zaW5nIHRoZSBoZWlnaHQgdGhhdCBpcyBuZWFyZXN0IHRvIHRoZQotICAgICAgICogaGVpZ2h0IHdpdGggdGhlIHNhbWUgREFSICovCi0gICAgICBpZiAoZ3N0X3ZhbHVlX2lzX2ZpeGVkICh0b19wYXIpKSB7Ci0gICAgICAgIHRvX3Bhcl9uID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKHRvX3Bhcik7Ci0gICAgICAgIHRvX3Bhcl9kID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAodG9fcGFyKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgIlBBUiBpcyBmaXhlZCAlZC8lZCIsIHRvX3Bhcl9uLCB0b19wYXJfZCk7Ci0KLSAgICAgICAgaWYgKCFnc3RfdXRpbF9mcmFjdGlvbl9tdWx0aXBseSAoZnJvbV9kYXJfbiwgZnJvbV9kYXJfZCwgdG9fcGFyX2QsCi0gICAgICAgICAgICAgICAgdG9fcGFyX24sICZudW0sICZkZW4pKSB7Ci0gICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHRyYW5zLCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAotICAgICAgICAgICAgICAoIkVycm9yIGNhbGN1bGF0aW5nIHRoZSBvdXRwdXQgc2NhbGVkIHNpemUgLSBpbnRlZ2VyIG92ZXJmbG93IikpOwotICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotCi0gICAgICAgIGggPSAoZ3VpbnQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHcsIGRlbiwgbnVtKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKG91dHMsICJoZWlnaHQiLCBoKTsKLQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFRoZSBQQVIgaXMgbm90IGZpeGVkIGFuZCBpdCdzIHF1aXRlIGxpa2VseSB0aGF0IHdlIGNhbiBzZXQKLSAgICAgICAqIGFuIGFyYml0cmFyeSBQQVIuICovCi0KLSAgICAgIC8qIENoZWNrIGlmIHdlIGNhbiBrZWVwIHRoZSBpbnB1dCBoZWlnaHQgKi8KLSAgICAgIHRtcCA9IGdzdF9zdHJ1Y3R1cmVfY29weSAob3V0cyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAodG1wLCAiaGVpZ2h0IiwgZnJvbV9oKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAodG1wLCAiaGVpZ2h0IiwgJnNldF9oKTsKLQotICAgICAgLyogTWlnaHQgaGF2ZSBmYWlsZWQgYnV0IHRyeSB0byBrZWVwIHRoZSBEQVIgbm9uZXRoZWxlc3MgYnkKLSAgICAgICAqIGFkanVzdGluZyB0aGUgUEFSICovCi0gICAgICBpZiAoIWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5IChmcm9tX2Rhcl9uLCBmcm9tX2Rhcl9kLCBzZXRfaCwgdywKLSAgICAgICAgICAgICAgJnRvX3Bhcl9uLCAmdG9fcGFyX2QpKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SICh0cmFucywgQ09SRSwgTkVHT1RJQVRJT04sIChOVUxMKSwKLSAgICAgICAgICAgICgiRXJyb3IgY2FsY3VsYXRpbmcgdGhlIG91dHB1dCBzY2FsZWQgc2l6ZSAtIGludGVnZXIgb3ZlcmZsb3ciKSk7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAodG1wKTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAodG1wLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICh0bXAsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCB0b19wYXIpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAodG1wLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICB0b19wYXJfbiwgdG9fcGFyX2QpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKHRtcCwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICZzZXRfcGFyX24sCi0gICAgICAgICAgJnNldF9wYXJfZCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHRtcCk7Ci0KLSAgICAgIC8qIENoZWNrIGlmIHRoZSBhZGp1c3RlZCBQQVIgaXMgYWNjZXB0ZWQgKi8KLSAgICAgIGlmIChzZXRfcGFyX24gPT0gdG9fcGFyX24gJiYgc2V0X3Bhcl9kID09IHRvX3Bhcl9kKSB7Ci0gICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAob3V0cywgInBpeGVsLWFzcGVjdC1yYXRpbyIpIHx8Ci0gICAgICAgICAgICBzZXRfcGFyX24gIT0gc2V0X3Bhcl9kKQotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgc2V0X2gsCi0gICAgICAgICAgICAgICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwgc2V0X3Bhcl9uLCBzZXRfcGFyX2QsCi0gICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIE90aGVyd2lzZSBzY2FsZSB0aGUgaGVpZ2h0IHRvIHRoZSBuZXcgUEFSIGFuZCBjaGVjayBpZiB0aGUKLSAgICAgICAqIGFkanVzdGVkIHdpdGggaXMgYWNjZXB0ZWQuIElmIGFsbCB0aGF0IGZhaWxzIHdlIGNhbid0IGtlZXAKLSAgICAgICAqIHRoZSBEQVIgKi8KLSAgICAgIGlmICghZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGZyb21fZGFyX24sIGZyb21fZGFyX2QsIHNldF9wYXJfZCwKLSAgICAgICAgICAgICAgc2V0X3Bhcl9uLCAmbnVtLCAmZGVuKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgICAoIkVycm9yIGNhbGN1bGF0aW5nIHRoZSBvdXRwdXQgc2NhbGVkIHNpemUgLSBpbnRlZ2VyIG92ZXJmbG93IikpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIGggPSAoZ3VpbnQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHcsIGRlbiwgbnVtKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50IChvdXRzLCAiaGVpZ2h0IiwgaCk7Ci0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iKSB8fAotICAgICAgICAgIHNldF9wYXJfbiAhPSBzZXRfcGFyX2QpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICAgICAgICBzZXRfcGFyX24sIHNldF9wYXJfZCwgTlVMTCk7Ci0KLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9IGVsc2UgaWYgKGdzdF92YWx1ZV9pc19maXhlZCAodG9fcGFyKSkgewotICAgICAgR3N0U3RydWN0dXJlICp0bXA7Ci0gICAgICBnaW50IHNldF9oLCBzZXRfdywgZl9oLCBmX3c7Ci0KLSAgICAgIHRvX3Bhcl9uID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9udW1lcmF0b3IgKHRvX3Bhcik7Ci0gICAgICB0b19wYXJfZCA9IGdzdF92YWx1ZV9nZXRfZnJhY3Rpb25fZGVub21pbmF0b3IgKHRvX3Bhcik7Ci0KLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHRyYW5zLCAiUEFSIGlzIGZpeGVkICVkLyVkIiwgdG9fcGFyX24sIHRvX3Bhcl9kKTsKLQotICAgICAgLyogQ2FsY3VsYXRlIHNjYWxlIGZhY3RvciBmb3IgdGhlIFBBUiBjaGFuZ2UgKi8KLSAgICAgIGlmICghZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGZyb21fZGFyX24sIGZyb21fZGFyX2QsIHRvX3Bhcl9kLAotICAgICAgICAgICAgICB0b19wYXJfbiwgJm51bSwgJmRlbikpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKHRyYW5zLCBDT1JFLCBORUdPVElBVElPTiwgKE5VTEwpLAotICAgICAgICAgICAgKCJFcnJvciBjYWxjdWxhdGluZyB0aGUgb3V0cHV0IHNjYWxlZCBzaXplIC0gaW50ZWdlciBvdmVyZmxvdyIpKTsKLSAgICAgICAgZ290byBkb25lOwotICAgICAgfQotCi0gICAgICAvKiBUcnkgdG8ga2VlcCB0aGUgaW5wdXQgaGVpZ2h0IChiZWNhdXNlIG9mIGludGVybGFjaW5nKSAqLwotICAgICAgdG1wID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChvdXRzKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50ICh0bXAsICJoZWlnaHQiLCBmcm9tX2gpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICh0bXAsICJoZWlnaHQiLCAmc2V0X2gpOwotCi0gICAgICAvKiBUaGlzIG1pZ2h0IGhhdmUgZmFpbGVkIGJ1dCB0cnkgdG8gc2NhbGUgdGhlIHdpZHRoCi0gICAgICAgKiB0byBrZWVwIHRoZSBEQVIgbm9uZXRoZWxlc3MgKi8KLSAgICAgIHcgPSAoZ3VpbnQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNldF9oLCBudW0sIGRlbik7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAodG1wLCAid2lkdGgiLCB3KTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAodG1wLCAid2lkdGgiLCAmc2V0X3cpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlICh0bXApOwotCi0gICAgICAvKiBXZSBrZXB0IHRoZSBEQVIgYW5kIHRoZSBoZWlnaHQgaXMgbmVhcmVzdCB0byB0aGUgb3JpZ2luYWwgaGVpZ2h0ICovCi0gICAgICBpZiAoc2V0X3cgPT0gdykgewotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAob3V0cywgIndpZHRoIiwgR19UWVBFX0lOVCwgc2V0X3csICJoZWlnaHQiLAotICAgICAgICAgICAgR19UWVBFX0lOVCwgc2V0X2gsIE5VTEwpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIGZfaCA9IHNldF9oOwotICAgICAgZl93ID0gc2V0X3c7Ci0KLSAgICAgIC8qIElmIHRoZSBmb3JtZXIgZmFpbGVkLCB0cnkgdG8ga2VlcCB0aGUgaW5wdXQgd2lkdGggYXQgbGVhc3QgKi8KLSAgICAgIHRtcCA9IGdzdF9zdHJ1Y3R1cmVfY29weSAob3V0cyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZpeGF0ZV9maWVsZF9uZWFyZXN0X2ludCAodG1wLCAid2lkdGgiLCBmcm9tX3cpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICh0bXAsICJ3aWR0aCIsICZzZXRfdyk7Ci0KLSAgICAgIC8qIFRoaXMgbWlnaHQgaGF2ZSBmYWlsZWQgYnV0IHRyeSB0byBzY2FsZSB0aGUgd2lkdGgKLSAgICAgICAqIHRvIGtlZXAgdGhlIERBUiBub25ldGhlbGVzcyAqLwotICAgICAgaCA9IChndWludCkgZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoc2V0X3csIGRlbiwgbnVtKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50ICh0bXAsICJoZWlnaHQiLCBoKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAodG1wLCAiaGVpZ2h0IiwgJnNldF9oKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAodG1wKTsKLQotICAgICAgLyogV2Uga2VwdCB0aGUgREFSIGFuZCB0aGUgd2lkdGggaXMgbmVhcmVzdCB0byB0aGUgb3JpZ2luYWwgd2lkdGggKi8KLSAgICAgIGlmIChzZXRfaCA9PSBoKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZXRfdywgImhlaWdodCIsCi0gICAgICAgICAgICBHX1RZUEVfSU5ULCBzZXRfaCwgTlVMTCk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgLyogSWYgYWxsIHRoaXMgZmFpbGVkLCBrZWVwIHRoZSBoZWlnaHQgdGhhdCB3YXMgbmVhcmVzdCB0byB0aGUgb3JpZ25hbAotICAgICAgICogaGVpZ2h0IGFuZCB0aGUgbmVhcmVzdCBwb3NzaWJsZSB3aWR0aC4gVGhpcyBjaGFuZ2VzIHRoZSBEQVIgYnV0Ci0gICAgICAgKiB0aGVyZSdzIG5vdCBtdWNoIGVsc2UgdG8gZG8gaGVyZS4KLSAgICAgICAqLwotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG91dHMsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGZfdywgImhlaWdodCIsIEdfVFlQRV9JTlQsCi0gICAgICAgICAgZl9oLCBOVUxMKTsKLSAgICAgIGdvdG8gZG9uZTsKLSAgICB9IGVsc2UgewotICAgICAgR3N0U3RydWN0dXJlICp0bXA7Ci0gICAgICBnaW50IHNldF9oLCBzZXRfdywgc2V0X3Bhcl9uLCBzZXRfcGFyX2QsIHRtcDI7Ci0KLSAgICAgIC8qIHdpZHRoLCBoZWlnaHQgYW5kIFBBUiBhcmUgbm90IGZpeGVkIGJ1dCBwYXNzdGhyb3VnaCBpcyBub3QgcG9zc2libGUgKi8KLQotICAgICAgLyogRmlyc3QgdHJ5IHRvIGtlZXAgdGhlIGhlaWdodCBhbmQgd2lkdGggYXMgZ29vZCBhcyBwb3NzaWJsZQotICAgICAgICogYW5kIHNjYWxlIFBBUiAqLwotICAgICAgdG1wID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChvdXRzKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50ICh0bXAsICJoZWlnaHQiLCBmcm9tX2gpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50ICh0bXAsICJoZWlnaHQiLCAmc2V0X2gpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHRtcCwgIndpZHRoIiwgZnJvbV93KTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAodG1wLCAid2lkdGgiLCAmc2V0X3cpOwotCi0gICAgICBpZiAoIWdzdF91dGlsX2ZyYWN0aW9uX211bHRpcGx5IChmcm9tX2Rhcl9uLCBmcm9tX2Rhcl9kLCBzZXRfaCwgc2V0X3csCi0gICAgICAgICAgICAgICZ0b19wYXJfbiwgJnRvX3Bhcl9kKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgICAoIkVycm9yIGNhbGN1bGF0aW5nIHRoZSBvdXRwdXQgc2NhbGVkIHNpemUgLSBpbnRlZ2VyIG92ZXJmbG93IikpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHRtcCk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2hhc19maWVsZCAodG1wLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikpCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlICh0bXAsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCB0b19wYXIpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAodG1wLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwKLSAgICAgICAgICB0b19wYXJfbiwgdG9fcGFyX2QpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24gKHRtcCwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICZzZXRfcGFyX24sCi0gICAgICAgICAgJnNldF9wYXJfZCk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHRtcCk7Ci0KLSAgICAgIGlmIChzZXRfcGFyX24gPT0gdG9fcGFyX24gJiYgc2V0X3Bhcl9kID09IHRvX3Bhcl9kKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZXRfdywgImhlaWdodCIsCi0gICAgICAgICAgICBHX1RZUEVfSU5ULCBzZXRfaCwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikgfHwKLSAgICAgICAgICAgIHNldF9wYXJfbiAhPSBzZXRfcGFyX2QpCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwKLSAgICAgICAgICAgICAgc2V0X3Bhcl9uLCBzZXRfcGFyX2QsIE5VTEwpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIE90aGVyd2lzZSB0cnkgdG8gc2NhbGUgd2lkdGggdG8ga2VlcCB0aGUgREFSIHdpdGggdGhlIHNldAotICAgICAgICogUEFSIGFuZCBoZWlnaHQgKi8KLSAgICAgIGlmICghZ3N0X3V0aWxfZnJhY3Rpb25fbXVsdGlwbHkgKGZyb21fZGFyX24sIGZyb21fZGFyX2QsIHNldF9wYXJfZCwKLSAgICAgICAgICAgICAgc2V0X3Bhcl9uLCAmbnVtLCAmZGVuKSkgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAodHJhbnMsIENPUkUsIE5FR09USUFUSU9OLCAoTlVMTCksCi0gICAgICAgICAgICAoIkVycm9yIGNhbGN1bGF0aW5nIHRoZSBvdXRwdXQgc2NhbGVkIHNpemUgLSBpbnRlZ2VyIG92ZXJmbG93IikpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIHcgPSAoZ3VpbnQpIGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQgKHNldF9oLCBudW0sIGRlbik7Ci0gICAgICB0bXAgPSBnc3Rfc3RydWN0dXJlX2NvcHkgKG91dHMpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9pbnQgKHRtcCwgIndpZHRoIiwgdyk7Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHRtcCwgIndpZHRoIiwgJnRtcDIpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlICh0bXApOwotCi0gICAgICBpZiAodG1wMiA9PSB3KSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCB0bXAyLCAiaGVpZ2h0IiwKLSAgICAgICAgICAgIEdfVFlQRV9JTlQsIHNldF9oLCBOVUxMKTsKLSAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikgfHwKLSAgICAgICAgICAgIHNldF9wYXJfbiAhPSBzZXRfcGFyX2QpCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwKLSAgICAgICAgICAgICAgc2V0X3Bhcl9uLCBzZXRfcGFyX2QsIE5VTEwpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIC4uLiBvciB0cnkgdGhlIHNhbWUgd2l0aCB0aGUgaGVpZ2h0ICovCi0gICAgICBoID0gKGd1aW50KSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzZXRfdywgZGVuLCBudW0pOwotICAgICAgdG1wID0gZ3N0X3N0cnVjdHVyZV9jb3B5IChvdXRzKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZml4YXRlX2ZpZWxkX25lYXJlc3RfaW50ICh0bXAsICJoZWlnaHQiLCBoKTsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAodG1wLCAiaGVpZ2h0IiwgJnRtcDIpOwotICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlICh0bXApOwotCi0gICAgICBpZiAodG1wMiA9PSBoKSB7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZXRfdywgImhlaWdodCIsCi0gICAgICAgICAgICBHX1RZUEVfSU5ULCB0bXAyLCBOVUxMKTsKLSAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikgfHwKLSAgICAgICAgICAgIHNldF9wYXJfbiAhPSBzZXRfcGFyX2QpCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG91dHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwKLSAgICAgICAgICAgICAgc2V0X3Bhcl9uLCBzZXRfcGFyX2QsIE5VTEwpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICB9Ci0KLSAgICAgIC8qIElmIGFsbCBmYWlscyB3ZSBjYW4ndCBrZWVwIHRoZSBEQVIgYW5kIHRha2UgdGhlIG5lYXJlc3QgdmFsdWVzCi0gICAgICAgKiBmb3IgZXZlcnl0aGluZyBmcm9tIHRoZSBmaXJzdCB0cnkgKi8KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChvdXRzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzZXRfdywgImhlaWdodCIsCi0gICAgICAgICAgR19UWVBFX0lOVCwgc2V0X2gsIE5VTEwpOwotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChvdXRzLCAicGl4ZWwtYXNwZWN0LXJhdGlvIikgfHwKLSAgICAgICAgICBzZXRfcGFyX24gIT0gc2V0X3Bhcl9kKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldCAob3V0cywgInBpeGVsLWFzcGVjdC1yYXRpbyIsIEdTVF9UWVBFX0ZSQUNUSU9OLAotICAgICAgICAgICAgc2V0X3Bhcl9uLCBzZXRfcGFyX2QsIE5VTEwpOwotICAgIH0KLSAgfQotCi1kb25lOgotICBHU1RfREVCVUdfT0JKRUNUICh0cmFucywgImZpeGF0ZWQgb3RoZXJjYXBzIHRvICUiIEdTVF9QVFJfRk9STUFULCBvdGhlcmNhcHMpOwotCi0gIGlmIChmcm9tX3BhciA9PSAmZnBhcikKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmZnBhcik7Ci0gIGlmICh0b19wYXIgPT0gJnRwYXIpCi0gICAgZ192YWx1ZV91bnNldCAoJnRwYXIpOwotCi0gIC8qIGZpeGF0ZSByZW1haW5pbmcgZmllbGRzICovCi0gIG90aGVyY2FwcyA9IGdzdF9jYXBzX2ZpeGF0ZSAob3RoZXJjYXBzKTsKLQotICBpZiAoZGlyZWN0aW9uID09IEdTVF9QQURfU0lOSykgewotICAgIGlmIChnc3RfY2Fwc19pc19zdWJzZXQgKGNhcHMsIG90aGVyY2FwcykpIHsKLSAgICAgIGdzdF9jYXBzX3JlcGxhY2UgKCZvdGhlcmNhcHMsIGNhcHMpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBvdGhlcmNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfdjRsMl90cmFuc2Zvcm1fcHJlcGFyZV9vdXRwdXRfYnVmZmVyIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsCi0gICAgR3N0QnVmZmVyICogaW5idWYsIEdzdEJ1ZmZlciAqKiBvdXRidWYpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKHRyYW5zKTsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbCA9IEdTVF9CVUZGRVJfUE9PTCAoc2VsZi0+djRsMm91dHB1dC0+cG9vbCk7Ci0gIEdzdEZsb3dSZXR1cm4gcmV0ID0gR1NUX0ZMT1dfT0s7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmNsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpOwotCi0gIGlmIChnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2ggKHRyYW5zKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJQYXNzdGhyb3VnaCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyIpOwotICAgICpvdXRidWYgPSBpbmJ1ZjsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgLyogRW5zdXJlIGlucHV0IGludGVybmFsIHBvb2wgaXMgYWN0aXZlICovCi0gIGlmICghZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAocG9vbCkpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKmNvbmZpZyA9IGdzdF9idWZmZXJfcG9vbF9nZXRfY29uZmlnIChwb29sKTsKLSAgICBnaW50IG1pbiA9IHNlbGYtPnY0bDJvdXRwdXQtPm1pbl9idWZmZXJzID09IDAgPyBHU1RfVjRMMl9NSU5fQlVGRkVSUyA6Ci0gICAgICAgIHNlbGYtPnY0bDJvdXRwdXQtPm1pbl9idWZmZXJzOwotICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3BhcmFtcyAoY29uZmlnLCBzZWxmLT5pbmNhcHMsCi0gICAgICAgIHNlbGYtPnY0bDJvdXRwdXQtPmluZm8uc2l6ZSwgbWluLCBtaW4pOwotCi0gICAgLyogVGhlcmUgaXMgbm8gcmVhc29uIHRvIHJlZnVzZSB0aGlzIGNvbmZpZyAqLwotICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9jb25maWcgKHBvb2wsIGNvbmZpZykpCi0gICAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLQotICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpKQotICAgICAgZ290byBhY3RpdmF0ZV9mYWlsZWQ7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUXVldWUgaW5wdXQgYnVmZmVyIik7Ci0gIHJldCA9IGdzdF92NGwyX2J1ZmZlcl9wb29sX3Byb2Nlc3MgKEdTVF9WNEwyX0JVRkZFUl9QT09MIChwb29sKSwgJmluYnVmKTsKLSAgaWYgKEdfVU5MSUtFTFkgKHJldCAhPSBHU1RfRkxPV19PSykpCi0gICAgZ290byBiZWFjaDsKLQotICBkbyB7Ci0gICAgcG9vbCA9IGdzdF9iYXNlX3RyYW5zZm9ybV9nZXRfYnVmZmVyX3Bvb2wgKHRyYW5zKTsKLQotICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpKQotICAgICAgZ290byBhY3RpdmF0ZV9mYWlsZWQ7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiRGVxdWV1ZSBvdXRwdXQgYnVmZmVyIik7Ci0gICAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCBvdXRidWYsIE5VTEwpOwotICAgIGdfb2JqZWN0X3VucmVmIChwb29sKTsKLQotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGFsbG9jX2ZhaWxlZDsKLQotICAgIHBvb2wgPSBzZWxmLT52NGwyY2FwdHVyZS0+cG9vbDsKLSAgICByZXQgPSBnc3RfdjRsMl9idWZmZXJfcG9vbF9wcm9jZXNzIChHU1RfVjRMMl9CVUZGRVJfUE9PTCAocG9vbCksIG91dGJ1Zik7Ci0KLSAgfSB3aGlsZSAocmV0ID09IEdTVF9WNEwyX0ZMT1dfQ09SUlVQVEVEX0JVRkZFUik7Ci0KLSAgaWYgKHJldCAhPSBHU1RfRkxPV19PSykgewotICAgIGdzdF9idWZmZXJfdW5yZWYgKCpvdXRidWYpOwotICAgICpvdXRidWYgPSBOVUxMOwotICB9Ci0KLSAgaWYgKGJjbGFzcy0+Y29weV9tZXRhZGF0YSkKLSAgICBpZiAoIWJjbGFzcy0+Y29weV9tZXRhZGF0YSAodHJhbnMsIGluYnVmLCAqb3V0YnVmKSkgewotICAgICAgLyogc29tZXRoaW5nIGZhaWxlZCwgcG9zdCBhIHdhcm5pbmcgKi8KLSAgICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHNlbGYsIFNUUkVBTSwgTk9UX0lNUExFTUVOVEVELAotICAgICAgICAgICgiY291bGQgbm90IGNvcHkgbWV0YWRhdGEiKSwgKE5VTEwpKTsKLSAgICB9Ci0KLWJlYWNoOgotICByZXR1cm4gcmV0OwotCi1hY3RpdmF0ZV9mYWlsZWQ6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAoImZhaWxlZCB0byBhY3RpdmF0ZSBidWZmZXJwb29sIiksICgiZmFpbGVkIHRvIGFjdGl2YXRlIGJ1ZmZlcnBvb2wiKSk7Ci0gIGdfb2JqZWN0X3VucmVmIChwb29sKTsKLSAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotCi1hbGxvY19mYWlsZWQ6Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJjb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyIGZyb20gcG9vbCIpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJfdHJhbnNmb3JtX3RyYW5zZm9ybSAoR3N0QmFzZVRyYW5zZm9ybSAqIHRyYW5zLCBHc3RCdWZmZXIgKiBpbmJ1ZiwKLSAgICBHc3RCdWZmZXIgKiBvdXRidWYpCi17Ci0gIC8qIE5vdGhpbmcgdG8gZG8gKi8KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3RyYW5zZm9ybV9zaW5rX2V2ZW50IChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEV2ZW50ICogZXZlbnQpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKHRyYW5zKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIC8qIE5vdGhpbmcgdG8gZmx1c2ggaW4gcGFzc3Rocm91Z2ggKi8KLSAgaWYgKGdzdF9iYXNlX3RyYW5zZm9ybV9pc19wYXNzdGhyb3VnaCAodHJhbnMpKQotICAgIHJldHVybiBHU1RfQkFTRV9UUkFOU0ZPUk1fQ0xBU1MgKHBhcmVudF9jbGFzcyktPnNpbmtfZXZlbnQgKHRyYW5zLCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZmx1c2ggc3RhcnQiKTsKLSAgICAgIGdzdF92NGwyX29iamVjdF91bmxvY2sgKHNlbGYtPnY0bDJvdXRwdXQpOwotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMmNhcHR1cmUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0ID0gR1NUX0JBU0VfVFJBTlNGT1JNX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50ICh0cmFucywgZXZlbnQpOwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUT1A6Ci0gICAgICAvKiBCdWZmZXIgc2hvdWxkIGJlIGJhY2sgbm93ICovCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZmx1c2ggc3RvcCIpOwotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9ja19zdG9wIChzZWxmLT52NGwyY2FwdHVyZSk7Ci0gICAgICBnc3RfdjRsMl9vYmplY3RfdW5sb2NrX3N0b3AgKHNlbGYtPnY0bDJvdXRwdXQpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfdjRsMl90cmFuc2Zvcm1fY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RWNGwyVHJhbnNmb3JtICpzZWxmID0gR1NUX1Y0TDJfVFJBTlNGT1JNIChlbGVtZW50KTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHN3aXRjaCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZOgotICAgICAgaWYgKCFnc3RfdjRsMl90cmFuc2Zvcm1fb3BlbiAoc2VsZikpCi0gICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMm91dHB1dCk7Ci0gICAgICBnc3RfdjRsMl9vYmplY3RfdW5sb2NrIChzZWxmLT52NGwyY2FwdHVyZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlIChlbGVtZW50LCB0cmFuc2l0aW9uKTsKLQotICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fTlVMTDoKLSAgICAgIGdzdF92NGwyX3RyYW5zZm9ybV9jbG9zZSAoc2VsZik7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdHJhbnNmb3JtX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKG9iamVjdCk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPnByb2JlZF9zaW5rY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZzZWxmLT5wcm9iZWRfc3JjY2FwcywgTlVMTCk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl90cmFuc2Zvcm1fZmluYWxpemUgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKG9iamVjdCk7Ci0KLSAgZ3N0X3Y0bDJfb2JqZWN0X2Rlc3Ryb3kgKHNlbGYtPnY0bDJjYXB0dXJlKTsKLSAgZ3N0X3Y0bDJfb2JqZWN0X2Rlc3Ryb3kgKHNlbGYtPnY0bDJvdXRwdXQpOwotCi0gIEdfT0JKRUNUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3RyYW5zZm9ybV9pbml0IChHc3RWNGwyVHJhbnNmb3JtICogc2VsZikKLXsKLSAgLyogVjRMMiBvYmplY3QgYXJlIGNyZWF0ZWQgaW4gc3ViaW5zdGFuY2VfaW5pdCAqLwotICAvKiBlbmFibGUgUW9TICovCi0gIGdzdF9iYXNlX3RyYW5zZm9ybV9zZXRfcW9zX2VuYWJsZWQgKEdTVF9CQVNFX1RSQU5TRk9STSAoc2VsZiksIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdHJhbnNmb3JtX3N1Ymluc3RhbmNlX2luaXQgKEdUeXBlSW5zdGFuY2UgKiBpbnN0YW5jZSwgZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0VjRsMlRyYW5zZm9ybUNsYXNzICprbGFzcyA9IEdTVF9WNEwyX1RSQU5TRk9STV9DTEFTUyAoZ19jbGFzcyk7Ci0gIEdzdFY0bDJUcmFuc2Zvcm0gKnNlbGYgPSBHU1RfVjRMMl9UUkFOU0ZPUk0gKGluc3RhbmNlKTsKLQotICBzZWxmLT52NGwyb3V0cHV0ID0gZ3N0X3Y0bDJfb2JqZWN0X25ldyAoR1NUX0VMRU1FTlQgKHNlbGYpLAotICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQsIGtsYXNzLT5kZWZhdWx0X2RldmljZSwKLSAgICAgIGdzdF92NGwyX2dldF9vdXRwdXQsIGdzdF92NGwyX3NldF9vdXRwdXQsIE5VTEwpOwotICBzZWxmLT52NGwyb3V0cHV0LT5ub19pbml0aWFsX2Zvcm1hdCA9IFRSVUU7Ci0gIHNlbGYtPnY0bDJvdXRwdXQtPmtlZXBfYXNwZWN0ID0gRkFMU0U7Ci0KLSAgc2VsZi0+djRsMmNhcHR1cmUgPSBnc3RfdjRsMl9vYmplY3RfbmV3IChHU1RfRUxFTUVOVCAoc2VsZiksCi0gICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsIGtsYXNzLT5kZWZhdWx0X2RldmljZSwKLSAgICAgIGdzdF92NGwyX2dldF9pbnB1dCwgZ3N0X3Y0bDJfc2V0X2lucHV0LCBOVUxMKTsKLSAgc2VsZi0+djRsMmNhcHR1cmUtPm5vX2luaXRpYWxfZm9ybWF0ID0gVFJVRTsKLSAgc2VsZi0+djRsMm91dHB1dC0+a2VlcF9hc3BlY3QgPSBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3RyYW5zZm9ybV9jbGFzc19pbml0IChHc3RWNGwyVHJhbnNmb3JtQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzOwotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqYmFzZV90cmFuc2Zvcm1fY2xhc3M7Ci0KLSAgZWxlbWVudF9jbGFzcyA9IChHc3RFbGVtZW50Q2xhc3MgKikga2xhc3M7Ci0gIGdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopIGtsYXNzOwotICBiYXNlX3RyYW5zZm9ybV9jbGFzcyA9IChHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF92NGwyX3RyYW5zZm9ybV9kZWJ1ZywgInY0bDJ0cmFuc2Zvcm0iLCAwLAotICAgICAgIlY0TDIgQ29udmVydGVyIik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJWNEwyIFZpZGVvIENvbnZlcnRlciIsCi0gICAgICAiRmlsdGVyL0NvbnZlcnRlci9WaWRlby9TY2FsZXIiLAotICAgICAgIlRyYW5zZm9ybSBzdHJlYW1zIHZpYSBWNEwyIEFQSSIsCi0gICAgICAiTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY29tPiIpOwotCi0gIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdHJhbnNmb3JtX2Rpc3Bvc2UpOwotICBnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl90cmFuc2Zvcm1fZmluYWxpemUpOwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9zZXRfcHJvcGVydHkpOwotICBnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9nZXRfcHJvcGVydHkpOwotCi0gIGJhc2VfdHJhbnNmb3JtX2NsYXNzLT5zdG9wID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9zdG9wKTsKLSAgYmFzZV90cmFuc2Zvcm1fY2xhc3MtPnNldF9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl90cmFuc2Zvcm1fc2V0X2NhcHMpOwotICBiYXNlX3RyYW5zZm9ybV9jbGFzcy0+cXVlcnkgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdHJhbnNmb3JtX3F1ZXJ5KTsKLSAgYmFzZV90cmFuc2Zvcm1fY2xhc3MtPnNpbmtfZXZlbnQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9zaW5rX2V2ZW50KTsKLSAgYmFzZV90cmFuc2Zvcm1fY2xhc3MtPmRlY2lkZV9hbGxvY2F0aW9uID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl90cmFuc2Zvcm1fZGVjaWRlX2FsbG9jYXRpb24pOwotICBiYXNlX3RyYW5zZm9ybV9jbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl90cmFuc2Zvcm1fcHJvcG9zZV9hbGxvY2F0aW9uKTsKLSAgYmFzZV90cmFuc2Zvcm1fY2xhc3MtPnRyYW5zZm9ybV9jYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl90cmFuc2Zvcm1fdHJhbnNmb3JtX2NhcHMpOwotICBiYXNlX3RyYW5zZm9ybV9jbGFzcy0+Zml4YXRlX2NhcHMgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9maXhhdGVfY2Fwcyk7Ci0gIGJhc2VfdHJhbnNmb3JtX2NsYXNzLT5wcmVwYXJlX291dHB1dF9idWZmZXIgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9wcmVwYXJlX291dHB1dF9idWZmZXIpOwotICBiYXNlX3RyYW5zZm9ybV9jbGFzcy0+dHJhbnNmb3JtID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl90cmFuc2Zvcm1fdHJhbnNmb3JtKTsKLQotICBiYXNlX3RyYW5zZm9ybV9jbGFzcy0+cGFzc3Rocm91Z2hfb25fc2FtZV9jYXBzID0gVFJVRTsKLQotICBlbGVtZW50X2NsYXNzLT5jaGFuZ2Vfc3RhdGUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3RyYW5zZm9ybV9jaGFuZ2Vfc3RhdGUpOwotCi0gIGdzdF92NGwyX29iamVjdF9pbnN0YWxsX20ybV9wcm9wZXJ0aWVzX2hlbHBlciAoZ29iamVjdF9jbGFzcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl90cmFuc2Zvcm1fc3ViY2xhc3NfaW5pdCAoZ3BvaW50ZXIgZ19jbGFzcywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0VjRsMlRyYW5zZm9ybUNsYXNzICprbGFzcyA9IEdTVF9WNEwyX1RSQU5TRk9STV9DTEFTUyAoZ19jbGFzcyk7Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChnX2NsYXNzKTsKLSAgR3N0VjRsMlRyYW5zZm9ybUNEYXRhICpjZGF0YSA9IGRhdGE7Ci0KLSAga2xhc3MtPmRlZmF1bHRfZGV2aWNlID0gY2RhdGEtPmRldmljZTsKLQotICAvKiBOb3RlOiBnc3RfcGFkX3RlbXBsYXRlX25ldygpIHRha2UgdGhlIGZsb2F0aW5nIHJlZiBmcm9tIHRoZSBjYXBzICovCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgIGNkYXRhLT5zaW5rX2NhcHMpKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgIGNkYXRhLT5zcmNfY2FwcykpOwotCi0gIGdfZnJlZSAoY2RhdGEpOwotfQotCi0vKiBQcm9iaW5nIGZ1bmN0aW9ucyAqLwotZ2Jvb2xlYW4KLWdzdF92NGwyX2lzX3RyYW5zZm9ybSAoR3N0Q2FwcyAqIHNpbmtfY2FwcywgR3N0Q2FwcyAqIHNyY19jYXBzKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfc3Vic2V0IChzaW5rX2NhcHMsIGdzdF92NGwyX29iamVjdF9nZXRfcmF3X2NhcHMgKCkpCi0gICAgICAmJiBnc3RfY2Fwc19pc19zdWJzZXQgKHNyY19jYXBzLCBnc3RfdjRsMl9vYmplY3RfZ2V0X3Jhd19jYXBzICgpKSkKLSAgICByZXQgPSBUUlVFOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl90cmFuc2Zvcm1fcmVnaXN0ZXIgKEdzdFBsdWdpbiAqIHBsdWdpbiwgY29uc3QgZ2NoYXIgKiBiYXNlbmFtZSwKLSAgICBjb25zdCBnY2hhciAqIGRldmljZV9wYXRoLCBHc3RDYXBzICogc2lua19jYXBzLCBHc3RDYXBzICogc3JjX2NhcHMpCi17Ci0gIEdUeXBlUXVlcnkgdHlwZV9xdWVyeTsKLSAgR1R5cGVJbmZvIHR5cGVfaW5mbyA9IHsgMCwgfTsKLSAgR1R5cGUgdHlwZSwgc3VidHlwZTsKLSAgZ2NoYXIgKnR5cGVfbmFtZTsKLSAgR3N0VjRsMlRyYW5zZm9ybUNEYXRhICpjZGF0YTsKLQotICBjZGF0YSA9IGdfbmV3MCAoR3N0VjRsMlRyYW5zZm9ybUNEYXRhLCAxKTsKLSAgY2RhdGEtPmRldmljZSA9IGdfc3RyZHVwIChkZXZpY2VfcGF0aCk7Ci0gIGNkYXRhLT5zaW5rX2NhcHMgPSBnc3RfY2Fwc19yZWYgKHNpbmtfY2Fwcyk7Ci0gIGNkYXRhLT5zcmNfY2FwcyA9IGdzdF9jYXBzX3JlZiAoc3JjX2NhcHMpOwotCi0gIHR5cGUgPSBnc3RfdjRsMl90cmFuc2Zvcm1fZ2V0X3R5cGUgKCk7Ci0gIGdfdHlwZV9xdWVyeSAodHlwZSwgJnR5cGVfcXVlcnkpOwotICBtZW1zZXQgKCZ0eXBlX2luZm8sIDAsIHNpemVvZiAodHlwZV9pbmZvKSk7Ci0gIHR5cGVfaW5mby5jbGFzc19zaXplID0gdHlwZV9xdWVyeS5jbGFzc19zaXplOwotICB0eXBlX2luZm8uaW5zdGFuY2Vfc2l6ZSA9IHR5cGVfcXVlcnkuaW5zdGFuY2Vfc2l6ZTsKLSAgdHlwZV9pbmZvLmNsYXNzX2luaXQgPSBnc3RfdjRsMl90cmFuc2Zvcm1fc3ViY2xhc3NfaW5pdDsKLSAgdHlwZV9pbmZvLmNsYXNzX2RhdGEgPSBjZGF0YTsKLSAgdHlwZV9pbmZvLmluc3RhbmNlX2luaXQgPSBnc3RfdjRsMl90cmFuc2Zvcm1fc3ViaW5zdGFuY2VfaW5pdDsKLQotICB0eXBlX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJ2NGwyJXNjb252ZXJ0IiwgYmFzZW5hbWUpOwotICBzdWJ0eXBlID0gZ190eXBlX3JlZ2lzdGVyX3N0YXRpYyAodHlwZSwgdHlwZV9uYW1lLCAmdHlwZV9pbmZvLCAwKTsKLQotICBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCB0eXBlX25hbWUsIEdTVF9SQU5LX05PTkUsIHN1YnR5cGUpOwotCi0gIGdfZnJlZSAodHlwZV9uYW1lKTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uaCBiL3N5cy92NGwyL2dzdHY0bDJ0cmFuc2Zvcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkNTZjMy4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwydHJhbnNmb3JtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuCi0gKiAgICAgQXV0aG9yOiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WNEwyX1RSQU5TRk9STV9IX18KLSNkZWZpbmUgX19HU1RfVjRMMl9UUkFOU0ZPUk1fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotCi0jaW5jbHVkZSA8Z3N0djRsMm9iamVjdC5oPgotI2luY2x1ZGUgPGdzdHY0bDJidWZmZXJwb29sLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4gKHY0bDJ0cmFuc2Zvcm1fZGVidWcpOwotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMl9UUkFOU0ZPUk0gXAotICAoZ3N0X3Y0bDJfdHJhbnNmb3JtX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WNEwyX1RSQU5TRk9STShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1Y0TDJfVFJBTlNGT1JNLEdzdFY0bDJUcmFuc2Zvcm0pKQotI2RlZmluZSBHU1RfVjRMMl9UUkFOU0ZPUk1fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfVjRMMl9UUkFOU0ZPUk0sR3N0VjRsMlRyYW5zZm9ybUNsYXNzKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJfVFJBTlNGT1JNKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksR1NUX1RZUEVfVjRMMl9UUkFOU0ZPUk0pKQotI2RlZmluZSBHU1RfSVNfVjRMMl9UUkFOU0ZPUk1fQ0xBU1Mob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1Y0TDJfVFJBTlNGT1JNKSkKLSNkZWZpbmUgR1NUX1Y0TDJfVFJBTlNGT1JNX0dFVF9DTEFTUyhpbnN0KSBcCi0gIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgoaW5zdCksR1NUX1RZUEVfVjRMMl9UUkFOU0ZPUk0sR3N0VjRsMlRyYW5zZm9ybUNsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJUcmFuc2Zvcm0gR3N0VjRsMlRyYW5zZm9ybTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyVHJhbnNmb3JtQ2xhc3MgR3N0VjRsMlRyYW5zZm9ybUNsYXNzOwotCi1zdHJ1Y3QgX0dzdFY0bDJUcmFuc2Zvcm0KLXsKLSAgR3N0QmFzZVRyYW5zZm9ybSBwYXJlbnQ7Ci0KLSAgLyogPCBwcml2YXRlID4gKi8KLSAgR3N0VjRsMk9iamVjdCAqIHY0bDJvdXRwdXQ7Ci0gIEdzdFY0bDJPYmplY3QgKiB2NGwyY2FwdHVyZTsKLQotICAvKiBwYWRzICovCi0gIEdzdENhcHMgKnByb2JlZF9zcmNjYXBzOwotICBHc3RDYXBzICpwcm9iZWRfc2lua2NhcHM7Ci0KLSAgLyogU2VsZWN0ZWQgY2FwcyAqLwotICBHc3RDYXBzICppbmNhcHM7Ci0gIEdzdENhcHMgKm91dGNhcHM7Ci19OwotCi1zdHJ1Y3QgX0dzdFY0bDJUcmFuc2Zvcm1DbGFzcwotewotICBHc3RCYXNlVHJhbnNmb3JtQ2xhc3MgcGFyZW50X2NsYXNzOwotICBnY2hhciAqZGVmYXVsdF9kZXZpY2U7Ci19OwotCi1HVHlwZSBnc3RfdjRsMl90cmFuc2Zvcm1fZ2V0X3R5cGUgKHZvaWQpOwotCi1nYm9vbGVhbiBnc3RfdjRsMl9pc190cmFuc2Zvcm0gICAgICAgKEdzdENhcHMgKiBzaW5rX2NhcHMsIEdzdENhcHMgKiBzcmNfY2Fwcyk7Ci1nYm9vbGVhbiBnc3RfdjRsMl90cmFuc2Zvcm1fcmVnaXN0ZXIgKEdzdFBsdWdpbiAqIHBsdWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmJhc2VuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZGV2aWNlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdENhcHMgKiBzaW5rX2NhcHMsIEdzdENhcHMgKiBzcmNfY2Fwcyk7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfX0dTVF9WNEwyX1RSQU5TRk9STV9IX18gKi8KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJ0dW5lci5jIGIvc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhODJlYjcuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogZ3N0djRsMnR1bmVyLmM6IHR1bmVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgVjRMMgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotI2luY2x1ZGUgImdzdHY0bDJ0dW5lci5oIgotI2luY2x1ZGUgImdzdHY0bDJvYmplY3QuaCIKLSNpbmNsdWRlICJ2NGwyX2NhbGxzLmgiCi0KLUdfREVGSU5FX1RZUEUgKEdzdFY0bDJUdW5lckNoYW5uZWwsIGdzdF92NGwyX3R1bmVyX2NoYW5uZWwsCi0gICAgR1NUX1RZUEVfVFVORVJfQ0hBTk5FTCk7Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFY0bDJUdW5lck5vcm0sIGdzdF92NGwyX3R1bmVyX25vcm0sIEdTVF9UWVBFX1RVTkVSX05PUk0pOwotCi0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl90dW5lcl9jaGFubmVsX2NsYXNzX2luaXQgKEdzdFY0bDJUdW5lckNoYW5uZWxDbGFzcyAqIGtsYXNzKQotewotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdHVuZXJfY2hhbm5lbF9pbml0IChHc3RWNGwyVHVuZXJDaGFubmVsICogY2hhbm5lbCkKLXsKLSAgY2hhbm5lbC0+aW5kZXggPSAoZ3VpbnQzMikgLSAxOwotICBjaGFubmVsLT50dW5lciA9IChndWludDMyKSAtIDE7Ci0gIGNoYW5uZWwtPmF1ZGlvID0gKGd1aW50MzIpIC0gMTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3R1bmVyX25vcm1fY2xhc3NfaW5pdCAoR3N0VjRsMlR1bmVyTm9ybUNsYXNzICoga2xhc3MpCi17Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl90dW5lcl9ub3JtX2luaXQgKEdzdFY0bDJUdW5lck5vcm0gKiBub3JtKQotewotICBub3JtLT5pbmRleCA9IDA7Ci19Ci0KLXN0YXRpYyBHX0dOVUNfVU5VU0VEIGdib29sZWFuCi1nc3RfdjRsMl90dW5lcl9jb250YWluc19jaGFubmVsIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBHc3RWNGwyVHVuZXJDaGFubmVsICogdjRsMmNoYW5uZWwpCi17Ci0gIGNvbnN0IEdMaXN0ICppdGVtOwotCi0gIGZvciAoaXRlbSA9IHY0bDJvYmplY3QtPmNoYW5uZWxzOyBpdGVtICE9IE5VTEw7IGl0ZW0gPSBpdGVtLT5uZXh0KQotICAgIGlmIChpdGVtLT5kYXRhID09IHY0bDJjaGFubmVsKQotICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1jb25zdCBHTGlzdCAqCi1nc3RfdjRsMl90dW5lcl9saXN0X2NoYW5uZWxzIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgcmV0dXJuIHY0bDJvYmplY3QtPmNoYW5uZWxzOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfdHVuZXJfc2V0X2NoYW5uZWwgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwpCi17Ci0gIEdzdFY0bDJUdW5lckNoYW5uZWwgKnY0bDJjaGFubmVsID0gR1NUX1Y0TDJfVFVORVJfQ0hBTk5FTCAoY2hhbm5lbCk7Ci0KLSAgLyogYXNzZXJ0IHRoYXQgd2UncmUgb3BlbmVkIGFuZCB0aGF0IHdlJ3JlIHVzaW5nIGEga25vd24gaXRlbSAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCksIEZBTFNFKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF92NGwyX3R1bmVyX2NvbnRhaW5zX2NoYW5uZWwgKHY0bDJvYmplY3QsCi0gICAgICAgICAgdjRsMmNoYW5uZWwpLCBGQUxTRSk7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPnNldF9pbl9vdXRfZnVuYyAodjRsMm9iamVjdCwgdjRsMmNoYW5uZWwtPmluZGV4KSkgewotICAgIGdzdF90dW5lcl9jaGFubmVsX2NoYW5nZWQgKEdTVF9UVU5FUiAodjRsMm9iamVjdC0+ZWxlbWVudCksIGNoYW5uZWwpOwotICAgIC8qIGNhbiBGUFMgY2hhbmdlIGhlcmU/ICovCi0gICAgcmV0dXJuIFRSVUU7Ci0gIH0KLQotICByZXR1cm4gRkFMU0U7Ci0KLX0KLQotR3N0VHVuZXJDaGFubmVsICoKLWdzdF92NGwyX3R1bmVyX2dldF9jaGFubmVsIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgR0xpc3QgKml0ZW07Ci0gIGdpbnQgY2hhbm5lbDsKLQotICAvKiBhc3NlcnQgdGhhdCB3ZSdyZSBvcGVuZWQgYW5kIHRoYXQgd2UncmUgdXNpbmcgYSBrbm93biBpdGVtICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSwgTlVMTCk7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPmdldF9pbl9vdXRfZnVuYyAodjRsMm9iamVjdCwgJmNoYW5uZWwpKSB7Ci0KLSAgICBmb3IgKGl0ZW0gPSB2NGwyb2JqZWN0LT5jaGFubmVsczsgaXRlbSAhPSBOVUxMOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgICAgaWYgKGNoYW5uZWwgPT0gR1NUX1Y0TDJfVFVORVJfQ0hBTk5FTCAoaXRlbS0+ZGF0YSktPmluZGV4KQotICAgICAgICByZXR1cm4gKEdzdFR1bmVyQ2hhbm5lbCAqKSBpdGVtLT5kYXRhOwotICAgIH0KLQotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBHX0dOVUNfVU5VU0VEIGdib29sZWFuCi1nc3RfdjRsMl90dW5lcl9jb250YWluc19ub3JtIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBHc3RWNGwyVHVuZXJOb3JtICogdjRsMm5vcm0pCi17Ci0gIGNvbnN0IEdMaXN0ICppdGVtOwotCi0gIGZvciAoaXRlbSA9IHY0bDJvYmplY3QtPm5vcm1zOyBpdGVtICE9IE5VTEw7IGl0ZW0gPSBpdGVtLT5uZXh0KQotICAgIGlmIChpdGVtLT5kYXRhID09IHY0bDJub3JtKQotICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1jb25zdCBHTGlzdCAqCi1nc3RfdjRsMl90dW5lcl9saXN0X25vcm1zIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgcmV0dXJuIHY0bDJvYmplY3QtPm5vcm1zOwotfQotCi12b2lkCi1nc3RfdjRsMl90dW5lcl9zZXRfbm9ybV9hbmRfbm90aWZ5IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBHc3RUdW5lck5vcm0gKiBub3JtKQotewotICBpZiAoZ3N0X3Y0bDJfdHVuZXJfc2V0X25vcm0gKHY0bDJvYmplY3QsIG5vcm0pKSB7Ci0jaWYgMAotICAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQpLCAibm9ybSIpOwotI2VuZGlmCi0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX3R1bmVyX3NldF9ub3JtIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0VHVuZXJOb3JtICogbm9ybSkKLXsKLSAgR3N0VjRsMlR1bmVyTm9ybSAqdjRsMm5vcm0gPSBHU1RfVjRMMl9UVU5FUl9OT1JNIChub3JtKTsKLQotICAvKiBhc3NlcnQgdGhhdCB3ZSdyZSBvcGVuZWQgYW5kIHRoYXQgd2UncmUgdXNpbmcgYSBrbm93biBpdGVtICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3Y0bDJfdHVuZXJfY29udGFpbnNfbm9ybSAodjRsMm9iamVjdCwgdjRsMm5vcm0pLAotICAgICAgRkFMU0UpOwotCi0gIGlmIChnc3RfdjRsMl9zZXRfbm9ybSAodjRsMm9iamVjdCwgdjRsMm5vcm0tPmluZGV4KSkgewotICAgIGdzdF90dW5lcl9ub3JtX2NoYW5nZWQgKEdTVF9UVU5FUiAodjRsMm9iamVjdC0+ZWxlbWVudCksIG5vcm0pOwotICAgIGlmICh2NGwyb2JqZWN0LT51cGRhdGVfZnBzX2Z1bmMpCi0gICAgICB2NGwyb2JqZWN0LT51cGRhdGVfZnBzX2Z1bmMgKHY0bDJvYmplY3QpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotCi19Ci0KLUdzdFR1bmVyTm9ybSAqCi1nc3RfdjRsMl90dW5lcl9nZXRfbm9ybSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIHY0bDJfc3RkX2lkIG5vcm07Ci0KLSAgLyogYXNzZXJ0IHRoYXQgd2UncmUgb3BlbmVkIGFuZCB0aGF0IHdlJ3JlIHVzaW5nIGEga25vd24gaXRlbSAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCksIE5VTEwpOwotCi0gIGdzdF92NGwyX2dldF9ub3JtICh2NGwyb2JqZWN0LCAmbm9ybSk7Ci0KLSAgcmV0dXJuIGdzdF92NGwyX3R1bmVyX2dldF9ub3JtX2J5X3N0ZF9pZCAodjRsMm9iamVjdCwgbm9ybSk7Ci19Ci0KLUdzdFR1bmVyTm9ybSAqCi1nc3RfdjRsMl90dW5lcl9nZXRfbm9ybV9ieV9zdGRfaWQgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCB2NGwyX3N0ZF9pZCBub3JtKQotewotICBHTGlzdCAqaXRlbTsKLQotICBmb3IgKGl0ZW0gPSB2NGwyb2JqZWN0LT5ub3JtczsgaXRlbSAhPSBOVUxMOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgIGlmIChub3JtICYgR1NUX1Y0TDJfVFVORVJfTk9STSAoaXRlbS0+ZGF0YSktPmluZGV4KQotICAgICAgcmV0dXJuIChHc3RUdW5lck5vcm0gKikgaXRlbS0+ZGF0YTsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi12NGwyX3N0ZF9pZAotZ3N0X3Y0bDJfdHVuZXJfZ2V0X3N0ZF9pZF9ieV9ub3JtIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBHc3RUdW5lck5vcm0gKiBub3JtKQotewotICBHTGlzdCAqaXRlbTsKLQotICBmb3IgKGl0ZW0gPSB2NGwyb2JqZWN0LT5ub3JtczsgaXRlbSAhPSBOVUxMOyBpdGVtID0gaXRlbS0+bmV4dCkgewotICAgIGlmIChub3JtID09IEdTVF9UVU5FUl9OT1JNIChpdGVtLT5kYXRhKSkKLSAgICAgIHJldHVybiBHU1RfVjRMMl9UVU5FUl9OT1JNIChpdGVtLT5kYXRhKS0+aW5kZXg7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotdm9pZAotZ3N0X3Y0bDJfdHVuZXJfc2V0X2ZyZXF1ZW5jeV9hbmRfbm90aWZ5IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsLCBndWxvbmcgZnJlcXVlbmN5KQotewotICBpZiAoZ3N0X3Y0bDJfdHVuZXJfc2V0X2ZyZXF1ZW5jeSAodjRsMm9iamVjdCwgY2hhbm5lbCwgZnJlcXVlbmN5KSkgewotI2lmIDAKLSAgICBnX29iamVjdF9ub3RpZnkgKEdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50KSwgImZyZXF1ZW5jeSIpOwotI2VuZGlmCi0gIH0KLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX3R1bmVyX3NldF9mcmVxdWVuY3kgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwsIGd1bG9uZyBmcmVxdWVuY3kpCi17Ci0gIEdzdFY0bDJUdW5lckNoYW5uZWwgKnY0bDJjaGFubmVsID0gR1NUX1Y0TDJfVFVORVJfQ0hBTk5FTCAoY2hhbm5lbCk7Ci0gIGdpbnQgY2hhbjsKLQotICAvKiBhc3NlcnQgdGhhdCB3ZSdyZSBvcGVuZWQgYW5kIHRoYXQgd2UncmUgdXNpbmcgYSBrbm93biBpdGVtICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1RVTkVSX0NIQU5ORUxfSEFTX0ZMQUcgKGNoYW5uZWwsCi0gICAgICAgICAgR1NUX1RVTkVSX0NIQU5ORUxfRlJFUVVFTkNZKSwgRkFMU0UpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoZ3N0X3Y0bDJfdHVuZXJfY29udGFpbnNfY2hhbm5lbCAodjRsMm9iamVjdCwKLSAgICAgICAgICB2NGwyY2hhbm5lbCksIEZBTFNFKTsKLQotICBpZiAodjRsMm9iamVjdC0+Z2V0X2luX291dF9mdW5jICh2NGwyb2JqZWN0LCAmY2hhbikpIHsKLSAgICBpZiAoY2hhbiA9PSBHU1RfVjRMMl9UVU5FUl9DSEFOTkVMIChjaGFubmVsKS0+aW5kZXggJiYKLSAgICAgICAgR1NUX1RVTkVSX0NIQU5ORUxfSEFTX0ZMQUcgKGNoYW5uZWwsIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSkpIHsKLSAgICAgIGlmIChnc3RfdjRsMl9zZXRfZnJlcXVlbmN5ICh2NGwyb2JqZWN0LCB2NGwyY2hhbm5lbC0+dHVuZXIsIGZyZXF1ZW5jeSkpIHsKLSAgICAgICAgZ3N0X3R1bmVyX2ZyZXF1ZW5jeV9jaGFuZ2VkIChHU1RfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpLCBjaGFubmVsLAotICAgICAgICAgICAgZnJlcXVlbmN5KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1ndWxvbmcKLWdzdF92NGwyX3R1bmVyX2dldF9mcmVxdWVuY3kgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwpCi17Ci0gIEdzdFY0bDJUdW5lckNoYW5uZWwgKnY0bDJjaGFubmVsID0gR1NUX1Y0TDJfVFVORVJfQ0hBTk5FTCAoY2hhbm5lbCk7Ci0gIGdpbnQgY2hhbjsKLSAgZ3Vsb25nIGZyZXF1ZW5jeSA9IDA7Ci0KLSAgLyogYXNzZXJ0IHRoYXQgd2UncmUgb3BlbmVkIGFuZCB0aGF0IHdlJ3JlIHVzaW5nIGEga25vd24gaXRlbSAqLwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1RVTkVSX0NIQU5ORUxfSEFTX0ZMQUcgKGNoYW5uZWwsCi0gICAgICAgICAgR1NUX1RVTkVSX0NIQU5ORUxfRlJFUVVFTkNZKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnc3RfdjRsMl90dW5lcl9jb250YWluc19jaGFubmVsICh2NGwyb2JqZWN0LAotICAgICAgICAgIHY0bDJjaGFubmVsKSwgMCk7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPmdldF9pbl9vdXRfZnVuYyAodjRsMm9iamVjdCwgJmNoYW4pKSB7Ci0gICAgaWYgKGNoYW4gPT0gR1NUX1Y0TDJfVFVORVJfQ0hBTk5FTCAoY2hhbm5lbCktPmluZGV4ICYmCi0gICAgICAgIEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHIChjaGFubmVsLCBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kpKSB7Ci0gICAgICBnc3RfdjRsMl9nZXRfZnJlcXVlbmN5ICh2NGwyb2JqZWN0LCB2NGwyY2hhbm5lbC0+dHVuZXIsICZmcmVxdWVuY3kpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBmcmVxdWVuY3k7Ci19Ci0KLWdpbnQKLWdzdF92NGwyX3R1bmVyX3NpZ25hbF9zdHJlbmd0aCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgR3N0VHVuZXJDaGFubmVsICogY2hhbm5lbCkKLXsKLSAgR3N0VjRsMlR1bmVyQ2hhbm5lbCAqdjRsMmNoYW5uZWwgPSBHU1RfVjRMMl9UVU5FUl9DSEFOTkVMIChjaGFubmVsKTsKLSAgZ2ludCBjaGFuOwotICBndWxvbmcgc2lnbmFsID0gMDsKLQotICAvKiBhc3NlcnQgdGhhdCB3ZSdyZSBvcGVuZWQgYW5kIHRoYXQgd2UncmUgdXNpbmcgYSBrbm93biBpdGVtICovCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfVFVORVJfQ0hBTk5FTF9IQVNfRkxBRyAoY2hhbm5lbCwKLSAgICAgICAgICBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kpLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdzdF92NGwyX3R1bmVyX2NvbnRhaW5zX2NoYW5uZWwgKHY0bDJvYmplY3QsCi0gICAgICAgICAgdjRsMmNoYW5uZWwpLCAwKTsKLQotICBpZiAodjRsMm9iamVjdC0+Z2V0X2luX291dF9mdW5jICh2NGwyb2JqZWN0LCAmY2hhbikpIHsKLSAgICBpZiAoY2hhbiA9PSBHU1RfVjRMMl9UVU5FUl9DSEFOTkVMIChjaGFubmVsKS0+aW5kZXggJiYKLSAgICAgICAgR1NUX1RVTkVSX0NIQU5ORUxfSEFTX0ZMQUcgKGNoYW5uZWwsIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSkpIHsKLSAgICAgIGdzdF92NGwyX3NpZ25hbF9zdHJlbmd0aCAodjRsMm9iamVjdCwgdjRsMmNoYW5uZWwtPnR1bmVyLCAmc2lnbmFsKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gc2lnbmFsOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMnR1bmVyLmggYi9zeXMvdjRsMi9nc3R2NGwydHVuZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjZmZjZC4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi9nc3R2NGwydHVuZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgICAgICAgICAgICAyMDA2IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiBnc3R2NGwydHVuZXIuaDogdHVuZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBWNEwyCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WNEwyX1RVTkVSX0hfXwotI2RlZmluZSBfX0dTVF9WNEwyX1RVTkVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAidHVuZXIuaCIKLSNpbmNsdWRlICJnc3R2NGwyb2JqZWN0LmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9WNEwyX1RVTkVSX0NIQU5ORUwgXAotICAoZ3N0X3Y0bDJfdHVuZXJfY2hhbm5lbF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1Y0TDJfVFVORVJfQ0hBTk5FTChvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVjRMMl9UVU5FUl9DSEFOTkVMLCBcCi0gICAgICAgICAgR3N0VjRsMlR1bmVyQ2hhbm5lbCkpCi0jZGVmaW5lIEdTVF9WNEwyX1RVTkVSX0NIQU5ORUxfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9WNEwyX1RVTkVSX0NIQU5ORUwsIFwKLSAgICAgICBHc3RWNGwyVHVuZXJDaGFubmVsQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVjRMMl9UVU5FUl9DSEFOTkVMKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9WNEwyX1RVTkVSX0NIQU5ORUwpKQotI2RlZmluZSBHU1RfSVNfVjRMMl9UVU5FUl9DSEFOTkVMX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVjRMMl9UVU5FUl9DSEFOTkVMKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJUdW5lckNoYW5uZWwgewotICBHc3RUdW5lckNoYW5uZWwgcGFyZW50OwotCi0gIGd1aW50MzIgICAgICAgICBpbmRleDsKLSAgZ3VpbnQzMiAgICAgICAgIHR1bmVyOwotICBndWludDMyICAgICAgICAgYXVkaW87Ci19IEdzdFY0bDJUdW5lckNoYW5uZWw7Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyVHVuZXJDaGFubmVsQ2xhc3MgewotICBHc3RUdW5lckNoYW5uZWxDbGFzcyBwYXJlbnQ7Ci19IEdzdFY0bDJUdW5lckNoYW5uZWxDbGFzczsKLQotI2RlZmluZSBHU1RfVFlQRV9WNEwyX1RVTkVSX05PUk0gXAotICAoZ3N0X3Y0bDJfdHVuZXJfbm9ybV9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1Y0TDJfVFVORVJfTk9STShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVjRMMl9UVU5FUl9OT1JNLCBcCi0gICAgICAgICAgR3N0VjRsMlR1bmVyTm9ybSkpCi0jZGVmaW5lIEdTVF9WNEwyX1RVTkVSX05PUk1fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9WNEwyX1RVTkVSX05PUk0sIFwKLSAgICAgICBHc3RWNGwyVHVuZXJOb3JtQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfVjRMMl9UVU5FUl9OT1JNKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9WNEwyX1RVTkVSX05PUk0pKQotI2RlZmluZSBHU1RfSVNfVjRMMl9UVU5FUl9OT1JNX0NMQVNTKGtsYXNzKSBcCi0gIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgR1NUX1RZUEVfVjRMMl9UVU5FUl9OT1JNKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJUdW5lck5vcm0gewotICBHc3RUdW5lck5vcm0gcGFyZW50OwotCi0gIHY0bDJfc3RkX2lkICBpbmRleDsKLX0gR3N0VjRsMlR1bmVyTm9ybTsKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJUdW5lck5vcm1DbGFzcyB7Ci0gIEdzdFR1bmVyTm9ybUNsYXNzIHBhcmVudDsKLX0gR3N0VjRsMlR1bmVyTm9ybUNsYXNzOwotCi1HVHlwZSBnc3RfdjRsMl90dW5lcl9jaGFubmVsX2dldF90eXBlICh2b2lkKTsKLUdUeXBlIGdzdF92NGwyX3R1bmVyX25vcm1fZ2V0X3R5cGUgKHZvaWQpOwotCi0vKiBjaGFubmVscyAqLwotY29uc3QgR0xpc3QqICAgICAgZ3N0X3Y0bDJfdHVuZXJfbGlzdF9jaGFubmVscyAgICAgICAgICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCk7Ci1Hc3RUdW5lckNoYW5uZWwqICBnc3RfdjRsMl90dW5lcl9nZXRfY2hhbm5lbCAgICAgICAgICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KTsKLWdib29sZWFuICAgICAgICAgIGdzdF92NGwyX3R1bmVyX3NldF9jaGFubmVsICAgICAgICAgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsKTsKLS8qIG5vcm1zICovCi1jb25zdCBHTGlzdCogICAgICBnc3RfdjRsMl90dW5lcl9saXN0X25vcm1zICAgICAgICAgICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KTsKLXZvaWQgICAgICAgICAgICAgIGdzdF92NGwyX3R1bmVyX3NldF9ub3JtX2FuZF9ub3RpZnkgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lck5vcm0gKiBub3JtKTsKLUdzdFR1bmVyTm9ybSogICAgIGdzdF92NGwyX3R1bmVyX2dldF9ub3JtICAgICAgICAgICAgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpOwotZ2Jvb2xlYW4gICAgICAgICAgZ3N0X3Y0bDJfdHVuZXJfc2V0X25vcm0gICAgICAgICAgICAgICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyTm9ybSAqIG5vcm0pOwotR3N0VHVuZXJOb3JtKiAgICAgZ3N0X3Y0bDJfdHVuZXJfZ2V0X25vcm1fYnlfc3RkX2lkICAgICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjRsMl9zdGRfaWQgbm9ybSk7Ci12NGwyX3N0ZF9pZCAgICAgICBnc3RfdjRsMl90dW5lcl9nZXRfc3RkX2lkX2J5X25vcm0gICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lck5vcm0gKiBub3JtKTsKLQotLyogZnJlcXVlbmN5ICovCi12b2lkICAgICAgICAgICAgICBnc3RfdjRsMl90dW5lcl9zZXRfZnJlcXVlbmN5X2FuZF9ub3RpZnkgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsLCAKLQkJCQkJCQkgICBndWxvbmcgZnJlcXVlbmN5KTsKLWdpbnQgICAgICAgICAgICAgIGdzdF92NGwyX3R1bmVyX3NpZ25hbF9zdHJlbmd0aCAgICAgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsKTsKLWd1bG9uZyAgICAgICAgICAgIGdzdF92NGwyX3R1bmVyX2dldF9mcmVxdWVuY3kgICAgICAgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsKTsKLWdib29sZWFuICAgICAgICAgIGdzdF92NGwyX3R1bmVyX3NldF9mcmVxdWVuY3kgICAgICAgICAgICAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwsIAotCQkJCQkJCSAgIGd1bG9uZyBmcmVxdWVuY3kpOwotCi0jZGVmaW5lIEdTVF9JTVBMRU1FTlRfVjRMMl9UVU5FUl9NRVRIT0RTKFR5cGUsIGludGVyZmFjZV9hc19mdW5jdGlvbikgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGNvbnN0IEdMaXN0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3R1bmVyX2xpc3RfY2hhbm5lbHMgKEdzdFR1bmVyICogbWl4ZXIpICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUeXBlICp0aGlzID0gKFR5cGUqKSBtaXhlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBnc3RfdjRsMl90dW5lcl9saXN0X2NoYW5uZWxzICh0aGlzLT52NGwyb2JqZWN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdHVuZXJfc2V0X2NoYW5uZWwgKEdzdFR1bmVyICogbWl4ZXIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHVuZXJDaGFubmVsICogY2hhbm5lbCkgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdjRsMl90dW5lcl9zZXRfY2hhbm5lbCAodGhpcy0+djRsMm9iamVjdCwgY2hhbm5lbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBHc3RUdW5lckNoYW5uZWwgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9nZXRfY2hhbm5lbCAoR3N0VHVuZXIgKiBtaXhlcikgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gZ3N0X3Y0bDJfdHVuZXJfZ2V0X2NoYW5uZWwgKHRoaXMtPnY0bDJvYmplY3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBjb25zdCBHTGlzdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9saXN0X25vcm1zIChHc3RUdW5lciAqIG1peGVyKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gZ3N0X3Y0bDJfdHVuZXJfbGlzdF9ub3JtcyAodGhpcy0+djRsMm9iamVjdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9zZXRfbm9ybV9hbmRfbm90aWZ5IChHc3RUdW5lciAqIG1peGVyLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyTm9ybSAqIG5vcm0pICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUeXBlICp0aGlzID0gKFR5cGUqKSBtaXhlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF92NGwyX3R1bmVyX3NldF9ub3JtX2FuZF9ub3RpZnkgKHRoaXMtPnY0bDJvYmplY3QsIG5vcm0pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIEdzdFR1bmVyTm9ybSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3R1bmVyX2dldF9ub3JtIChHc3RUdW5lciAqIG1peGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUeXBlICp0aGlzID0gKFR5cGUqKSBtaXhlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHJldHVybiBnc3RfdjRsMl90dW5lcl9nZXRfbm9ybSAodGhpcy0+djRsMm9iamVjdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdHVuZXJfc2V0X2ZyZXF1ZW5jeV9hbmRfbm90aWZ5IChHc3RUdW5lciAqIG1peGVyLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nIGZyZXF1ZW5jeSkgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBUeXBlICp0aGlzID0gKFR5cGUqKSBtaXhlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF92NGwyX3R1bmVyX3NldF9mcmVxdWVuY3lfYW5kX25vdGlmeSAodGhpcy0+djRsMm9iamVjdCwgY2hhbm5lbCwgZnJlcXVlbmN5KTsgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgZ3Vsb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdHVuZXJfZ2V0X2ZyZXF1ZW5jeSAoR3N0VHVuZXIgKiBtaXhlciwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsKSAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgVHlwZSAqdGhpcyA9IChUeXBlKikgbWl4ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICByZXR1cm4gZ3N0X3Y0bDJfdHVuZXJfZ2V0X2ZyZXF1ZW5jeSAodGhpcy0+djRsMm9iamVjdCwgY2hhbm5lbCk7ICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGdpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1pbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3R1bmVyX3NpZ25hbF9zdHJlbmd0aCAoR3N0VHVuZXIgKiBtaXhlciwgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsKSAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFR5cGUgKnRoaXMgPSAoVHlwZSopIG1peGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIGdzdF92NGwyX3R1bmVyX3NpZ25hbF9zdHJlbmd0aCAodGhpcy0+djRsMm9iamVjdCwgY2hhbm5lbCk7ICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9pbnRlcmZhY2VfaW5pdCAoR3N0VHVuZXJJbnRlcmZhY2UgKiBpZmFjZSkgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIC8qIGRlZmF1bHQgdmlydHVhbCBmdW5jdGlvbnMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPmxpc3RfY2hhbm5lbHMgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3R1bmVyX2xpc3RfY2hhbm5lbHM7ICAgICAgICAgICAgICAgXAotICBpZmFjZS0+c2V0X2NoYW5uZWwgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3R1bmVyX3NldF9jaGFubmVsOyAgICAgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5nZXRfY2hhbm5lbCA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdHVuZXJfZ2V0X2NoYW5uZWw7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZmFjZS0+bGlzdF9ub3JtcyA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdHVuZXJfbGlzdF9ub3JtczsgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5zZXRfbm9ybSA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdHVuZXJfc2V0X25vcm1fYW5kX25vdGlmeTsgICAgICAgICAgICAgIFwKLSAgaWZhY2UtPmdldF9ub3JtID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9nZXRfbm9ybTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmYWNlLT5zZXRfZnJlcXVlbmN5ID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9zZXRfZnJlcXVlbmN5X2FuZF9ub3RpZnk7ICAgIFwKLSAgaWZhY2UtPmdldF9mcmVxdWVuY3kgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3R1bmVyX2dldF9mcmVxdWVuY3k7ICAgICAgICAgICAgICAgXAotICBpZmFjZS0+c2lnbmFsX3N0cmVuZ3RoID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF90dW5lcl9zaWduYWxfc3RyZW5ndGg7ICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1Y0TDJfVFVORVJfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi9nc3R2NGwydmlkZW9kZWMuYyBiL3N5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTQ4YjY2Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuCi0gKiAgICAgQXV0aG9yOiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJnc3R2NGwydmlkZW9kZWMuaCIKLSNpbmNsdWRlICJ2NGwyX2NhbGxzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0LWkxOG4tcGx1Z2luLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF92NGwyX3ZpZGVvX2RlY19kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCBnc3RfdjRsMl92aWRlb19kZWNfZGVidWcKLQotc3RhdGljIGdib29sZWFuIGdzdF92NGwyX3ZpZGVvX2RlY19mbHVzaCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2Rlcik7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdjaGFyICpkZXZpY2U7Ci0gIEdzdENhcHMgKnNpbmtfY2FwczsKLSAgR3N0Q2FwcyAqc3JjX2NhcHM7Ci19IEdzdFY0bDJWaWRlb0RlY0NEYXRhOwotCi1lbnVtCi17Ci0gIFBST1BfMCwKLSAgVjRMMl9TVERfT0JKRUNUX1BST1BTCi19OwotCi0jZGVmaW5lIGdzdF92NGwyX3ZpZGVvX2RlY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9BQlNUUkFDVF9UWVBFIChHc3RWNGwyVmlkZW9EZWMsIGdzdF92NGwyX3ZpZGVvX2RlYywKLSAgICBHU1RfVFlQRV9WSURFT19ERUNPREVSKTsKLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3ZpZGVvX2RlY19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYykKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChvYmplY3QpOwotCi0gIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9PVVRQVVRfSU9fTU9ERToKLSAgICAgIGdzdF92NGwyX29iamVjdF9zZXRfcHJvcGVydHlfaGVscGVyIChzZWxmLT52NGwyb3V0cHV0LCBwcm9wX2lkLCB2YWx1ZSwKLSAgICAgICAgICBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfQ0FQVFVSRV9JT19NT0RFOgotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X3NldF9wcm9wZXJ0eV9oZWxwZXIgKHNlbGYtPnY0bDJjYXB0dXJlLCBwcm9wX2lkLCB2YWx1ZSwKLSAgICAgICAgICBwc3BlYyk7Ci0gICAgICBicmVhazsKLQotICAgICAgLyogQnkgZGVmYXVsdCwgb25seSBzZXQgb24gb3V0cHV0ICovCi0gICAgZGVmYXVsdDoKLSAgICAgIGlmICghZ3N0X3Y0bDJfb2JqZWN0X3NldF9wcm9wZXJ0eV9oZWxwZXIgKHNlbGYtPnY0bDJvdXRwdXQsCi0gICAgICAgICAgICAgIHByb3BfaWQsIHZhbHVlLCBwc3BlYykpIHsKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl92aWRlb19kZWNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LAotICAgIGd1aW50IHByb3BfaWQsIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFY0bDJWaWRlb0RlYyAqc2VsZiA9IEdTVF9WNEwyX1ZJREVPX0RFQyAob2JqZWN0KTsKLQotICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfT1VUUFVUX0lPX01PREU6Ci0gICAgICBnc3RfdjRsMl9vYmplY3RfZ2V0X3Byb3BlcnR5X2hlbHBlciAoc2VsZi0+djRsMm91dHB1dCwgcHJvcF9pZCwgdmFsdWUsCi0gICAgICAgICAgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0NBUFRVUkVfSU9fTU9ERToKLSAgICAgIGdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyIChzZWxmLT52NGwyY2FwdHVyZSwgcHJvcF9pZCwgdmFsdWUsCi0gICAgICAgICAgcHNwZWMpOwotICAgICAgYnJlYWs7Ci0KLSAgICAgIC8qIEJ5IGRlZmF1bHQgcmVhZCBmcm9tIG91dHB1dCAqLwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAoIWdzdF92NGwyX29iamVjdF9nZXRfcHJvcGVydHlfaGVscGVyIChzZWxmLT52NGwyb3V0cHV0LAotICAgICAgICAgICAgICBwcm9wX2lkLCB2YWx1ZSwgcHNwZWMpKSB7Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX2RlY19vcGVuIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBHc3RWNGwyVmlkZW9EZWMgKnNlbGYgPSBHU1RfVjRMMl9WSURFT19ERUMgKGRlY29kZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJPcGVuaW5nIik7Ci0KLSAgaWYgKCFnc3RfdjRsMl9vYmplY3Rfb3BlbiAoc2VsZi0+djRsMm91dHB1dCkpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIGlmICghZ3N0X3Y0bDJfb2JqZWN0X29wZW5fc2hhcmVkIChzZWxmLT52NGwyY2FwdHVyZSwgc2VsZi0+djRsMm91dHB1dCkpCi0gICAgZ290byBmYWlsdXJlOwotCi0gIHNlbGYtPnByb2JlZF9zaW5rY2FwcyA9IGdzdF92NGwyX29iamVjdF9nZXRfY2FwcyAoc2VsZi0+djRsMm91dHB1dCwKLSAgICAgIGdzdF92NGwyX29iamVjdF9nZXRfY29kZWNfY2FwcyAoKSk7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChzZWxmLT5wcm9iZWRfc2lua2NhcHMpKQotICAgIGdvdG8gbm9fZW5jb2RlZF9mb3JtYXQ7Ci0KLSAgc2VsZi0+cHJvYmVkX3NyY2NhcHMgPSBnc3RfdjRsMl9vYmplY3RfZ2V0X2NhcHMgKHNlbGYtPnY0bDJjYXB0dXJlLAotICAgICAgZ3N0X3Y0bDJfb2JqZWN0X2dldF9yYXdfY2FwcyAoKSk7Ci0KLSAgaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChzZWxmLT5wcm9iZWRfc3JjY2FwcykpCi0gICAgZ290byBub19yYXdfZm9ybWF0OwotCi0gIHJldHVybiBUUlVFOwotCi1ub19lbmNvZGVkX2Zvcm1hdDoKLSAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgIChfKCJFbmNvZGVyIG9uIGRldmljZSAlcyBoYXMgbm8gc3VwcG9ydGVkIGlucHV0IGZvcm1hdCIpLAotICAgICAgICAgIHNlbGYtPnY0bDJvdXRwdXQtPnZpZGVvZGV2KSwgKE5VTEwpKTsKLSAgZ290byBmYWlsdXJlOwotCi0KLW5vX3Jhd19mb3JtYXQ6Ci0gIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAoXygiRW5jb2RlciBvbiBkZXZpY2UgJXMgaGFzIG5vIHN1cHBvcnRlZCBvdXRwdXQgZm9ybWF0IiksCi0gICAgICAgICAgc2VsZi0+djRsMm91dHB1dC0+dmlkZW9kZXYpLCAoTlVMTCkpOwotICBnb3RvIGZhaWx1cmU7Ci0KLWZhaWx1cmU6Ci0gIGlmIChHU1RfVjRMMl9JU19PUEVOIChzZWxmLT52NGwyb3V0cHV0KSkKLSAgICBnc3RfdjRsMl9vYmplY3RfY2xvc2UgKHNlbGYtPnY0bDJvdXRwdXQpOwotCi0gIGlmIChHU1RfVjRMMl9JU19PUEVOIChzZWxmLT52NGwyY2FwdHVyZSkpCi0gICAgZ3N0X3Y0bDJfb2JqZWN0X2Nsb3NlIChzZWxmLT52NGwyY2FwdHVyZSk7Ci0KLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPnByb2JlZF9zcmNjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPnByb2JlZF9zaW5rY2FwcywgTlVMTCk7Ci0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX2RlY19jbG9zZSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlcikKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiQ2xvc2luZyIpOwotCi0gIGdzdF92NGwyX29iamVjdF9jbG9zZSAoc2VsZi0+djRsMm91dHB1dCk7Ci0gIGdzdF92NGwyX29iamVjdF9jbG9zZSAoc2VsZi0+djRsMmNhcHR1cmUpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmc2VsZi0+cHJvYmVkX3NyY2NhcHMsIE5VTEwpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmc2VsZi0+cHJvYmVkX3NpbmtjYXBzLCBOVUxMKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl92aWRlb19kZWNfc3RhcnQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIpCi17Ci0gIEdzdFY0bDJWaWRlb0RlYyAqc2VsZiA9IEdTVF9WNEwyX1ZJREVPX0RFQyAoZGVjb2Rlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlN0YXJ0aW5nIik7Ci0KLSAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMm91dHB1dCk7Ci0gIGdfYXRvbWljX2ludF9zZXQgKCZzZWxmLT5hY3RpdmUsIFRSVUUpOwotICBzZWxmLT5vdXRwdXRfZmxvdyA9IEdTVF9GTE9XX09LOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX2RlY19zdG9wIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBHc3RWNGwyVmlkZW9EZWMgKnNlbGYgPSBHU1RfVjRMMl9WSURFT19ERUMgKGRlY29kZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJTdG9wcGluZyIpOwotCi0gIGdzdF92NGwyX29iamVjdF91bmxvY2sgKHNlbGYtPnY0bDJvdXRwdXQpOwotICBnc3RfdjRsMl9vYmplY3RfdW5sb2NrIChzZWxmLT52NGwyY2FwdHVyZSk7Ci0KLSAgLyogV2FpdCBmb3IgY2FwdHVyZSB0aHJlYWQgdG8gc3RvcCAqLwotICBnc3RfcGFkX3N0b3BfdGFzayAoZGVjb2Rlci0+c3JjcGFkKTsKLQotICBHU1RfVklERU9fREVDT0RFUl9TVFJFQU1fTE9DSyAoZGVjb2Rlcik7Ci0gIHNlbGYtPm91dHB1dF9mbG93ID0gR1NUX0ZMT1dfT0s7Ci0gIEdTVF9WSURFT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlY29kZXIpOwotCi0gIC8qIFNob3VsZCBoYXZlIGJlZW4gZmx1c2hlZCBhbHJlYWR5ICovCi0gIGdfYXNzZXJ0IChnX2F0b21pY19pbnRfZ2V0ICgmc2VsZi0+YWN0aXZlKSA9PSBGQUxTRSk7Ci0gIGdfYXNzZXJ0IChnX2F0b21pY19pbnRfZ2V0ICgmc2VsZi0+cHJvY2Vzc2luZykgPT0gRkFMU0UpOwotCi0gIGdzdF92NGwyX29iamVjdF9zdG9wIChzZWxmLT52NGwyb3V0cHV0KTsKLSAgZ3N0X3Y0bDJfb2JqZWN0X3N0b3AgKHNlbGYtPnY0bDJjYXB0dXJlKTsKLQotICBpZiAoc2VsZi0+aW5wdXRfc3RhdGUpIHsKLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKHNlbGYtPmlucHV0X3N0YXRlKTsKLSAgICBzZWxmLT5pbnB1dF9zdGF0ZSA9IE5VTEw7Ci0gIH0KLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiU3RvcHBlZCIpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX2RlY19zZXRfZm9ybWF0IChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyLAotICAgIEdzdFZpZGVvQ29kZWNTdGF0ZSAqIHN0YXRlKQotewotICBHc3RWNGwyRXJyb3IgZXJyb3IgPSBHU1RfVjRMMl9FUlJPUl9JTklUOwotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3RWNGwyVmlkZW9EZWMgKnNlbGYgPSBHU1RfVjRMMl9WSURFT19ERUMgKGRlY29kZXIpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJTZXR0aW5nIGZvcm1hdDogJSIgR1NUX1BUUl9GT1JNQVQsIHN0YXRlLT5jYXBzKTsKLQotICBpZiAoc2VsZi0+aW5wdXRfc3RhdGUpIHsKLSAgICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X2NhcHNfZXF1YWwgKHNlbGYtPnY0bDJvdXRwdXQsIHN0YXRlLT5jYXBzKSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkNvbXBhdGlibGUgY2FwcyIpOwotICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBnc3RfdmlkZW9fY29kZWNfc3RhdGVfdW5yZWYgKHNlbGYtPmlucHV0X3N0YXRlKTsKLSAgICBzZWxmLT5pbnB1dF9zdGF0ZSA9IE5VTEw7Ci0KLSAgICAvKiBGSVhNRSB3ZSBwcm9iYWJseSBuZWVkIHRvIGRvIG1vcmUgd29yayBpZiBwb29scyBhcmUgYWN0aXZlICovCi0gIH0KLQotICByZXQgPSBnc3RfdjRsMl9vYmplY3Rfc2V0X2Zvcm1hdCAoc2VsZi0+djRsMm91dHB1dCwgc3RhdGUtPmNhcHMsICZlcnJvcik7Ci0KLSAgaWYgKHJldCkKLSAgICBzZWxmLT5pbnB1dF9zdGF0ZSA9IGdzdF92aWRlb19jb2RlY19zdGF0ZV9yZWYgKHN0YXRlKTsKLSAgZWxzZQotICAgIGdzdF92NGwyX2Vycm9yIChzZWxmLCAmZXJyb3IpOwotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX2RlY19mbHVzaCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlcikKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiRmx1c2hlZCIpOwotCi0gIC8qIEVuc3VyZSB0aGUgcHJvY2Vzc2luZyB0aHJlYWQgaGFzIHN0b3BwZWQgZm9yIHRoZSByZXZlcnNlIHBsYXliYWNrCi0gICAqIGRpc2NvdW50IGNhc2UgKi8KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZzZWxmLT5wcm9jZXNzaW5nKSkgewotICAgIEdTVF9WSURFT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlY29kZXIpOwotCi0gICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMm91dHB1dCk7Ci0gICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMmNhcHR1cmUpOwotICAgIGdzdF9wYWRfc3RvcF90YXNrIChkZWNvZGVyLT5zcmNwYWQpOwotICAgIEdTVF9WSURFT19ERUNPREVSX1NUUkVBTV9MT0NLIChkZWNvZGVyKTsKLSAgfQotCi0gIHNlbGYtPm91dHB1dF9mbG93ID0gR1NUX0ZMT1dfT0s7Ci0KLSAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9ja19zdG9wIChzZWxmLT52NGwyb3V0cHV0KTsKLSAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9ja19zdG9wIChzZWxmLT52NGwyY2FwdHVyZSk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fZGVjX25lZ290aWF0ZSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlcikKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLQotICAvKiBXZSBkb24ndCBhbGxvdyByZW5lZ290aWF0aW9uIHdpdGhvdXQgY2FyZWZ1bGwgZGlzYWJsaW5nIHRoZSBwb29sICovCi0gIGlmIChzZWxmLT52NGwyY2FwdHVyZS0+cG9vbCAmJgotICAgICAgZ3N0X2J1ZmZlcl9wb29sX2lzX2FjdGl2ZSAoR1NUX0JVRkZFUl9QT09MIChzZWxmLT52NGwyY2FwdHVyZS0+cG9vbCkpKQotICAgIHJldHVybiBUUlVFOwotCi0gIHJldHVybiBHU1RfVklERU9fREVDT0RFUl9DTEFTUyAocGFyZW50X2NsYXNzKS0+bmVnb3RpYXRlIChkZWNvZGVyKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl9kZWNvZGVyX2NtZCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIGd1aW50IGNtZCwgZ3VpbnQgZmxhZ3MpCi17Ci0gIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kIGRjbWQgPSB7IDAsIH07Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICJzZW5kaW5nIHY0bDIgZGVjb2RlciBjb21tYW5kICV1IHdpdGggZmxhZ3MgJXUiLCBjbWQsIGZsYWdzKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBkY21kLmNtZCA9IGNtZDsKLSAgZGNtZC5mbGFncyA9IGZsYWdzOwotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19ERUNPREVSX0NNRCwgJmRjbWQpIDwgMCkKLSAgICBnb3RvIGRjbWRfZmFpbGVkOwotCi0gIHJldHVybiBUUlVFOwotCi1kY21kX2ZhaWxlZDoKLSAgaWYgKGVycm5vID09IEVOT1RUWSkgewotICAgIEdTVF9JTkZPX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIkZhaWxlZCB0byBzZW5kIGRlY29kZXIgY29tbWFuZCAldSB3aXRoIGZsYWdzICV1IGZvciAnJXMnLiAoJXMpIiwKLSAgICAgICAgY21kLCBmbGFncywgdjRsMm9iamVjdC0+dmlkZW9kZXYsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX0VSUk9SX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwKLSAgICAgICAgIkZhaWxlZCB0byBzZW5kIGRlY29kZXIgY29tbWFuZCAldSB3aXRoIGZsYWdzICV1IGZvciAnJXMnLiAoJXMpIiwKLSAgICAgICAgY21kLCBmbGFncywgdjRsMm9iamVjdC0+dmlkZW9kZXYsIGdfc3RyZXJyb3IgKGVycm5vKSk7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJfdmlkZW9fZGVjX2ZpbmlzaCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlcikKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgaWYgKCFnX2F0b21pY19pbnRfZ2V0ICgmc2VsZi0+cHJvY2Vzc2luZykpCi0gICAgZ290byBkb25lOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJGaW5pc2hpbmcgZGVjb2RpbmciKTsKLQotICBHU1RfVklERU9fREVDT0RFUl9TVFJFQU1fVU5MT0NLIChkZWNvZGVyKTsKLQotICBpZiAoZ3N0X3Y0bDJfZGVjb2Rlcl9jbWQgKHNlbGYtPnY0bDJvdXRwdXQsIFY0TDJfREVDX0NNRF9TVE9QLCAwKSkgewotICAgIEdzdFRhc2sgKnRhc2sgPSBkZWNvZGVyLT5zcmNwYWQtPnRhc2s7Ci0KLSAgICAvKiBJZiB0aGUgZGVjb2RlciBzdG9wIGNvbW1hbmQgc3VjY2VlZGVkLCBqdXN0IHdhaXQgdW50aWwgcHJvY2Vzc2luZyBpcwotICAgICAqIGZpbmlzaGVkICovCi0gICAgR1NUX09CSkVDVF9MT0NLICh0YXNrKTsKLSAgICB3aGlsZSAoR1NUX1RBU0tfU1RBVEUgKHRhc2spID09IEdTVF9UQVNLX1NUQVJURUQpCi0gICAgICBHU1RfVEFTS19XQUlUICh0YXNrKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAodGFzayk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gIH0gZWxzZSB7Ci0gICAgLyogb3RoZXJ3aXNlIGtlZXAgcXVldWluZyBlbXB0eSBidWZmZXJzIHVudGlsIHRoZSBwcm9jZXNzaW5nIHRocmVhZCBoYXMKLSAgICAgKiBzdG9wcGVkLCBfcG9vbF9wcm9jZXNzKCkgd2lsbCByZXR1cm4gRkxVU0hJTkcgd2hlbiB0aGF0IGhhcHBlbmVkICovCi0gICAgd2hpbGUgKHJldCA9PSBHU1RfRkxPV19PSykgewotICAgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gICAgICByZXQgPQotICAgICAgICAgIGdzdF92NGwyX2J1ZmZlcl9wb29sX3Byb2Nlc3MgKEdTVF9WNEwyX0JVRkZFUl9QT09MIChzZWxmLT4KLSAgICAgICAgICAgICAgdjRsMm91dHB1dC0+cG9vbCksICZidWZmZXIpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgICB9Ci0gIH0KLQotICAvKiBhbmQgZW5zdXJlIHRoZSBwcm9jZXNzaW5nIHRocmVhZCBoYXMgc3RvcHBlZCBpbiBjYXNlIGFub3RoZXIgZXJyb3IKLSAgICogb2NjdXJlZC4gKi8KLSAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMmNhcHR1cmUpOwotICBnc3RfcGFkX3N0b3BfdGFzayAoZGVjb2Rlci0+c3JjcGFkKTsKLSAgR1NUX1ZJREVPX0RFQ09ERVJfU1RSRUFNX0xPQ0sgKGRlY29kZXIpOwotCi0gIGlmIChyZXQgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpCi0gICAgcmV0ID0gc2VsZi0+b3V0cHV0X2Zsb3c7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVjb2RlciwgIkRvbmUgZHJhaW5pbmcgYnVmZmVycyIpOwotCi1kb25lOgotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0VmlkZW9Db2RlY0ZyYW1lICoKLWdzdF92NGwyX3ZpZGVvX2RlY19nZXRfb2xkZXN0X2ZyYW1lIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBHc3RWaWRlb0NvZGVjRnJhbWUgKmZyYW1lID0gTlVMTDsKLSAgR0xpc3QgKmZyYW1lcywgKmw7Ci0gIGdpbnQgY291bnQgPSAwOwotCi0gIGZyYW1lcyA9IGdzdF92aWRlb19kZWNvZGVyX2dldF9mcmFtZXMgKGRlY29kZXIpOwotCi0gIGZvciAobCA9IGZyYW1lczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgewotICAgIEdzdFZpZGVvQ29kZWNGcmFtZSAqZiA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoIWZyYW1lIHx8IGZyYW1lLT5wdHMgPiBmLT5wdHMpCi0gICAgICBmcmFtZSA9IGY7Ci0KLSAgICBjb3VudCsrOwotICB9Ci0KLSAgaWYgKGZyYW1lKSB7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGRlY29kZXIsCi0gICAgICAgICJPbGRlc3QgZnJhbWUgaXMgJWQgJSIgR1NUX1RJTUVfRk9STUFUICIgYW5kICVkIGZyYW1lcyBsZWZ0IiwKLSAgICAgICAgZnJhbWUtPnN5c3RlbV9mcmFtZV9udW1iZXIsIEdTVF9USU1FX0FSR1MgKGZyYW1lLT5wdHMpLCBjb3VudCAtIDEpOwotICAgIGdzdF92aWRlb19jb2RlY19mcmFtZV9yZWYgKGZyYW1lKTsKLSAgfQotCi0gIGdfbGlzdF9mcmVlX2Z1bGwgKGZyYW1lcywgKEdEZXN0cm95Tm90aWZ5KSBnc3RfdmlkZW9fY29kZWNfZnJhbWVfdW5yZWYpOwotCi0gIHJldHVybiBmcmFtZTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3ZpZGVvX2RlY19sb29wIChHc3RWaWRlb0RlY29kZXIgKiBkZWNvZGVyKQotewotICBHc3RWNGwyVmlkZW9EZWMgKnNlbGYgPSBHU1RfVjRMMl9WSURFT19ERUMgKGRlY29kZXIpOwotICBHc3RWNGwyQnVmZmVyUG9vbCAqdjRsMl9wb29sID0gR1NUX1Y0TDJfQlVGRkVSX1BPT0wgKHNlbGYtPnY0bDJjYXB0dXJlLT5wb29sKTsKLSAgR3N0QnVmZmVyUG9vbCAqcG9vbDsKLSAgR3N0VmlkZW9Db2RlY0ZyYW1lICpmcmFtZTsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBOVUxMOwotICBHc3RGbG93UmV0dXJuIHJldDsKLQotICBHU1RfTE9HX09CSkVDVCAoZGVjb2RlciwgIkFsbG9jYXRlIG91dHB1dCBidWZmZXIiKTsKLQotICBkbyB7Ci0gICAgLyogV2UgY2Fubm90IHVzZSB0aGUgYmFzZSBjbGFzcyBhbGxvdGF0ZSBoZWxwZXIgc2luY2UgaXQgdGFraW5nIHRoZSBpbnRlcm5hbAotICAgICAqIHN0cmVhbSBsb2NrLiB3ZSBrbm93IHRoYXQgdGhlIGFjcXVpcmUgbWF5IG5lZWQgdG8gcG9sbCB1bnRpbCBtb3JlIGZyYW1lcwotICAgICAqIGNvbWVzIGluIGFuZCBob2xkaW5nIHRoaXMgbG9jayB3b3VsZCBwcmV2ZW50IHRoYXQuCi0gICAgICovCi0gICAgcG9vbCA9IGdzdF92aWRlb19kZWNvZGVyX2dldF9idWZmZXJfcG9vbCAoZGVjb2Rlcik7Ci0KLSAgICAvKiBQb29sIG1heSBiZSBOVUxMIGlmIHdlIHN0YXJ0ZWQgZ29pbmcgdG8gUkVBRFkgc3RhdGUgKi8KLSAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0gICAgICByZXQgPSBHU1RfRkxPV19GTFVTSElORzsKLSAgICAgIGdvdG8gYmVhY2g7Ci0gICAgfQotCi0gICAgcmV0ID0gZ3N0X2J1ZmZlcl9wb29sX2FjcXVpcmVfYnVmZmVyIChwb29sLCAmYnVmZmVyLCBOVUxMKTsKLSAgICBnX29iamVjdF91bnJlZiAocG9vbCk7Ci0KLSAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgICAgZ290byBiZWFjaDsKLQotICAgIEdTVF9MT0dfT0JKRUNUIChkZWNvZGVyLCAiUHJvY2VzcyBvdXRwdXQgYnVmZmVyIik7Ci0gICAgcmV0ID0gZ3N0X3Y0bDJfYnVmZmVyX3Bvb2xfcHJvY2VzcyAodjRsMl9wb29sLCAmYnVmZmVyKTsKLQotICB9IHdoaWxlIChyZXQgPT0gR1NUX1Y0TDJfRkxPV19DT1JSVVBURURfQlVGRkVSKTsKLQotICBpZiAocmV0ICE9IEdTVF9GTE9XX09LKQotICAgIGdvdG8gYmVhY2g7Ci0KLSAgZnJhbWUgPSBnc3RfdjRsMl92aWRlb19kZWNfZ2V0X29sZGVzdF9mcmFtZSAoZGVjb2Rlcik7Ci0KLSAgaWYgKGZyYW1lKSB7Ci0gICAgZnJhbWUtPm91dHB1dF9idWZmZXIgPSBidWZmZXI7Ci0gICAgYnVmZmVyID0gTlVMTDsKLSAgICByZXQgPSBnc3RfdmlkZW9fZGVjb2Rlcl9maW5pc2hfZnJhbWUgKGRlY29kZXIsIGZyYW1lKTsKLQotICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spCi0gICAgICBnb3RvIGJlYWNoOwotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZGVjb2RlciwgIkRlY29kZXIgaXMgcHJvZHVjaW5nIHRvbyBtYW55IGJ1ZmZlcnMiKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICB9Ci0KLSAgcmV0dXJuOwotCi1iZWFjaDoKLSAgR1NUX0RFQlVHX09CSkVDVCAoZGVjb2RlciwgIkxlYXZpbmcgb3V0cHV0IHRocmVhZDogJXMiLAotICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJldCkpOwotCi0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJmJ1ZmZlciwgTlVMTCk7Ci0gIHNlbGYtPm91dHB1dF9mbG93ID0gcmV0OwotICBnX2F0b21pY19pbnRfc2V0ICgmc2VsZi0+cHJvY2Vzc2luZywgRkFMU0UpOwotICBnc3RfdjRsMl9vYmplY3RfdW5sb2NrIChzZWxmLT52NGwyb3V0cHV0KTsKLSAgZ3N0X3BhZF9wYXVzZV90YXNrIChkZWNvZGVyLT5zcmNwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdmlkZW9fZGVjX2xvb3Bfc3RvcHBlZCAoR3N0VjRsMlZpZGVvRGVjICogc2VsZikKLXsKLSAgLyogV2hlbiBmbHVzaGluZywgZGVjb2RpbmcgdGhyZWFkIG1heSBuZXZlciBydW4gKi8KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZzZWxmLT5wcm9jZXNzaW5nKSkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJFYXJseSBzdG9wIG9mIGRlY29kaW5nIHRocmVhZCIpOwotICAgIHNlbGYtPm91dHB1dF9mbG93ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgZ19hdG9taWNfaW50X3NldCAoJnNlbGYtPnByb2Nlc3NpbmcsIEZBTFNFKTsKLSAgfQotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJEZWNvZGluZyB0YXNrIGRlc3Ryb3llZDogJXMiLAotICAgICAgZ3N0X2Zsb3dfZ2V0X25hbWUgKHNlbGYtPm91dHB1dF9mbG93KSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fcmVtb3ZlX3BhZGRpbmcgKEdzdENhcHNGZWF0dXJlcyAqIGZlYXR1cmVzLAotICAgIEdzdFN0cnVjdHVyZSAqIHN0cnVjdHVyZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RWNGwyVmlkZW9EZWMgKnNlbGYgPSBHU1RfVjRMMl9WSURFT19ERUMgKHVzZXJfZGF0YSk7Ci0gIEdzdFZpZGVvQWxpZ25tZW50ICphbGlnbiA9ICZzZWxmLT52NGwyY2FwdHVyZS0+YWxpZ247Ci0gIEdzdFZpZGVvSW5mbyAqaW5mbyA9ICZzZWxmLT52NGwyY2FwdHVyZS0+aW5mbzsKLSAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0KLSAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCkpCi0gICAgcmV0dXJuIFRSVUU7Ci0KLSAgaWYgKGFsaWduLT5wYWRkaW5nX2xlZnQgIT0gMCB8fCBhbGlnbi0+cGFkZGluZ190b3AgIT0gMCB8fAotICAgICAgd2lkdGggIT0gaW5mby0+d2lkdGggKyBhbGlnbi0+cGFkZGluZ19yaWdodCB8fAotICAgICAgaGVpZ2h0ICE9IGluZm8tPmhlaWdodCArIGFsaWduLT5wYWRkaW5nX2JvdHRvbSkKLSAgICByZXR1cm4gVFJVRTsKLQotICBnc3Rfc3RydWN0dXJlX3NldCAoc3RydWN0dXJlLAotICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgd2lkdGggLSBhbGlnbi0+cGFkZGluZ19yaWdodCwKLSAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQgLSBhbGlnbi0+cGFkZGluZ19ib3R0b20sIE5VTEwpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotZ3N0X3Y0bDJfdmlkZW9fZGVjX2hhbmRsZV9mcmFtZSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKLSAgICBHc3RWaWRlb0NvZGVjRnJhbWUgKiBmcmFtZSkKLXsKLSAgR3N0VjRsMkVycm9yIGVycm9yID0gR1NUX1Y0TDJfRVJST1JfSU5JVDsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLSAgR3N0Rmxvd1JldHVybiByZXQgPSBHU1RfRkxPV19PSzsKLSAgZ2Jvb2xlYW4gcHJvY2Vzc2VkID0gRkFMU0U7Ci0gIEdzdEJ1ZmZlciAqdG1wOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJIYW5kbGluZyBmcmFtZSAlZCIsIGZyYW1lLT5zeXN0ZW1fZnJhbWVfbnVtYmVyKTsKLQotICBpZiAoR19VTkxJS0VMWSAoIWdfYXRvbWljX2ludF9nZXQgKCZzZWxmLT5hY3RpdmUpKSkKLSAgICBnb3RvIGZsdXNoaW5nOwotCi0gIGlmIChHX1VOTElLRUxZICghR1NUX1Y0TDJfSVNfQUNUSVZFIChzZWxmLT52NGwyb3V0cHV0KSkpIHsKLSAgICBpZiAoIXNlbGYtPmlucHV0X3N0YXRlKQotICAgICAgZ290byBub3RfbmVnb3RpYXRlZDsKLSAgICBpZiAoIWdzdF92NGwyX29iamVjdF9zZXRfZm9ybWF0IChzZWxmLT52NGwyb3V0cHV0LCBzZWxmLT5pbnB1dF9zdGF0ZS0+Y2FwcywKLSAgICAgICAgICAgICZlcnJvcikpCi0gICAgICBnb3RvIG5vdF9uZWdvdGlhdGVkOwotICB9Ci0KLSAgaWYgKEdfVU5MSUtFTFkgKCFHU1RfVjRMMl9JU19BQ1RJVkUgKHNlbGYtPnY0bDJjYXB0dXJlKSkpIHsKLSAgICBHc3RCdWZmZXJQb29sICpwb29sID0gR1NUX0JVRkZFUl9QT09MIChzZWxmLT52NGwyb3V0cHV0LT5wb29sKTsKLSAgICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgICBHc3RWaWRlb0NvZGVjU3RhdGUgKm91dHB1dF9zdGF0ZTsKLSAgICBHc3RCdWZmZXIgKmNvZGVjX2RhdGE7Ci0gICAgR3N0Q2FwcyAqYWNxdWlyZWRfY2FwcywgKmF2YWlsYWJsZV9jYXBzLCAqY2FwcywgKmZpbHRlcjsKLSAgICBHc3RTdHJ1Y3R1cmUgKnN0OwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlNlbmRpbmcgaGVhZGVyIik7Ci0KLSAgICBjb2RlY19kYXRhID0gc2VsZi0+aW5wdXRfc3RhdGUtPmNvZGVjX2RhdGE7Ci0KLSAgICAvKiBXZSBhcmUgcnVubmluZyBpbiBieXRlLXN0cmVhbSBtb2RlLCBzbyB3ZSBkb24ndCBrbm93IHRoZSBoZWFkZXJzLCBidXQKLSAgICAgKiB3ZSBuZWVkIHRvIHNlbmQgc29tZXRoaW5nLCBvdGhlcndpc2UgdGhlIGRlY29kZXIgd2lsbCByZWZ1c2UgdG8KLSAgICAgKiBpbnRpYWxpemUuCi0gICAgICovCi0gICAgaWYgKGNvZGVjX2RhdGEpIHsKLSAgICAgIGdzdF9idWZmZXJfcmVmIChjb2RlY19kYXRhKTsKLSAgICB9IGVsc2UgewotICAgICAgY29kZWNfZGF0YSA9IGdzdF9idWZmZXJfcmVmIChmcmFtZS0+aW5wdXRfYnVmZmVyKTsKLSAgICAgIHByb2Nlc3NlZCA9IFRSVUU7Ci0gICAgfQotCi0gICAgLyogRW5zdXJlIGlucHV0IGludGVybmFsIHBvb2wgaXMgYWN0aXZlICovCi0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfaXNfYWN0aXZlIChwb29sKSkgewotICAgICAgR3N0U3RydWN0dXJlICpjb25maWcgPSBnc3RfYnVmZmVyX3Bvb2xfZ2V0X2NvbmZpZyAocG9vbCk7Ci0gICAgICBnc3RfYnVmZmVyX3Bvb2xfY29uZmlnX3NldF9wYXJhbXMgKGNvbmZpZywgc2VsZi0+aW5wdXRfc3RhdGUtPmNhcHMsCi0gICAgICAgICAgc2VsZi0+djRsMm91dHB1dC0+aW5mby5zaXplLCAyLCAyKTsKLQotICAgICAgLyogVGhlcmUgaXMgbm8gcmVhc29uIHRvIHJlZnVzZSB0aGlzIGNvbmZpZyAqLwotICAgICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2NvbmZpZyAocG9vbCwgY29uZmlnKSkKLSAgICAgICAgZ290byBhY3RpdmF0ZV9mYWlsZWQ7Ci0KLSAgICAgIGlmICghZ3N0X2J1ZmZlcl9wb29sX3NldF9hY3RpdmUgKHBvb2wsIFRSVUUpKQotICAgICAgICBnb3RvIGFjdGl2YXRlX2ZhaWxlZDsKLSAgICB9Ci0KLSAgICBHU1RfVklERU9fREVDT0RFUl9TVFJFQU1fVU5MT0NLIChkZWNvZGVyKTsKLSAgICByZXQgPQotICAgICAgICBnc3RfdjRsMl9idWZmZXJfcG9vbF9wcm9jZXNzIChHU1RfVjRMMl9CVUZGRVJfUE9PTCAoc2VsZi0+Ci0gICAgICAgICAgICB2NGwyb3V0cHV0LT5wb29sKSwgJmNvZGVjX2RhdGEpOwotICAgIEdTVF9WSURFT19ERUNPREVSX1NUUkVBTV9MT0NLIChkZWNvZGVyKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGNvZGVjX2RhdGEpOwotCi0gICAgLyogRm9yIGRlY29kZXJzIEdfRk1UIHJldHVybnMgY29kZWQgc2l6ZSwgR19TRUxFQ1RJT04gcmV0dXJucyB2aXNpYmxlIHNpemUKLSAgICAgKiBpbiB0aGUgY29tcG9zZSByZWN0YW5nbGUuIGdzdF92NGwyX29iamVjdF9hY3F1aXJlX2Zvcm1hdCgpIGNoZWNrcyBib3RoCi0gICAgICogYW5kIHJldHVybnMgdGhlIHZpc2libGUgc2l6ZSBhcyB3aXRoL2hlaWdodCBhbmQgdGhlIGNvZGVkIHNpemUgYXMKLSAgICAgKiBwYWRkaW5nLiAqLwotICAgIGlmICghZ3N0X3Y0bDJfb2JqZWN0X2FjcXVpcmVfZm9ybWF0IChzZWxmLT52NGwyY2FwdHVyZSwgJmluZm8pKQotICAgICAgZ290byBub3RfbmVnb3RpYXRlZDsKLQotICAgIC8qIENyZWF0ZSBjYXBzIGZyb20gdGhlIGFjcXVpcmVkIGZvcm1hdCwgcmVtb3ZlIHRoZSBmb3JtYXQgZmllbGQgKi8KLSAgICBhY3F1aXJlZF9jYXBzID0gZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcyAoJmluZm8pOwotICAgIHN0ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWNxdWlyZWRfY2FwcywgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHN0LCAiZm9ybWF0Iik7Ci0KLSAgICAvKiBQcm9iZSBjdXJyZW50bHkgYXZhaWxhYmxlIHBpeGVsIGZvcm1hdHMgKi8KLSAgICBhdmFpbGFibGVfY2FwcyA9IGdzdF92NGwyX29iamVjdF9wcm9iZV9jYXBzIChzZWxmLT52NGwyY2FwdHVyZSwgTlVMTCk7Ci0gICAgYXZhaWxhYmxlX2NhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChhdmFpbGFibGVfY2Fwcyk7Ci0KLSAgICAvKiBSZXBsYWNlIGNvZGVkIHNpemUgd2l0aCB2aXNpYmxlIHNpemUsIHdlIHdhbnQgdG8gbmVnb3RpYXRlIHZpc2libGUgc2l6ZQotICAgICAqIHdpdGggZG93bnN0cmVhbSwgbm90IGNvZGVkIHNpemUuICovCi0gICAgZ3N0X2NhcHNfbWFwX2luX3BsYWNlIChhdmFpbGFibGVfY2FwcywgZ3N0X3Y0bDJfdmlkZW9fcmVtb3ZlX3BhZGRpbmcsIHNlbGYpOwotCi0gICAgZmlsdGVyID0gZ3N0X2NhcHNfaW50ZXJzZWN0X2Z1bGwgKGF2YWlsYWJsZV9jYXBzLCBhY3F1aXJlZF9jYXBzLAotICAgICAgICBHU1RfQ0FQU19JTlRFUlNFQ1RfRklSU1QpOwotICAgIGdzdF9jYXBzX3VucmVmIChhY3F1aXJlZF9jYXBzKTsKLSAgICBnc3RfY2Fwc191bnJlZiAoYXZhaWxhYmxlX2NhcHMpOwotICAgIGNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoZGVjb2Rlci0+c3JjcGFkLCBmaWx0ZXIpOwotICAgIGdzdF9jYXBzX3VucmVmIChmaWx0ZXIpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlBvc3NpYmxlIGRlY29kZWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgIGlmIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgICAgIGdvdG8gbm90X25lZ290aWF0ZWQ7Ci0gICAgfQotCi0gICAgLyogRml4YXRlIHBpeGVsIGZvcm1hdCAqLwotICAgIGNhcHMgPSBnc3RfY2Fwc19maXhhdGUgKGNhcHMpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIkNob3NlbiBkZWNvZGVkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICAgIC8qIFRyeSB0byBzZXQgbmVnb3RpYXRlZCBmb3JtYXQsIG9uIHN1Y2Nlc3MgcmVwbGFjZSBhY3F1aXJlZCBmb3JtYXQgKi8KLSAgICBpZiAoZ3N0X3Y0bDJfb2JqZWN0X3NldF9mb3JtYXQgKHNlbGYtPnY0bDJjYXB0dXJlLCBjYXBzLCAmZXJyb3IpKQotICAgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2Fwcyk7Ci0gICAgZWxzZQotICAgICAgZ3N0X3Y0bDJfY2xlYXJfZXJyb3IgKCZlcnJvcik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gICAgb3V0cHV0X3N0YXRlID0gZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X291dHB1dF9zdGF0ZSAoZGVjb2RlciwKLSAgICAgICAgaW5mby5maW5mby0+Zm9ybWF0LCBpbmZvLndpZHRoLCBpbmZvLmhlaWdodCwgc2VsZi0+aW5wdXRfc3RhdGUpOwotCi0gICAgLyogQ29weSB0aGUgcmVzdCBvZiB0aGUgaW5mb3JtYXRpb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgaW4gdGhlIGZ1dHVyZSAqLwotICAgIG91dHB1dF9zdGF0ZS0+aW5mby5pbnRlcmxhY2VfbW9kZSA9IGluZm8uaW50ZXJsYWNlX21vZGU7Ci0gICAgZ3N0X3ZpZGVvX2NvZGVjX3N0YXRlX3VucmVmIChvdXRwdXRfc3RhdGUpOwotCi0gICAgaWYgKCFnc3RfdmlkZW9fZGVjb2Rlcl9uZWdvdGlhdGUgKGRlY29kZXIpKSB7Ci0gICAgICBpZiAoR1NUX1BBRF9JU19GTFVTSElORyAoZGVjb2Rlci0+c3JjcGFkKSkKLSAgICAgICAgZ290byBmbHVzaGluZzsKLSAgICAgIGVsc2UKLSAgICAgICAgZ290byBub3RfbmVnb3RpYXRlZDsKLSAgICB9Ci0KLSAgICAvKiBFbnN1cmUgb3VyIGludGVybmFsIHBvb2wgaXMgYWN0aXZhdGVkICovCi0gICAgaWYgKCFnc3RfYnVmZmVyX3Bvb2xfc2V0X2FjdGl2ZSAoR1NUX0JVRkZFUl9QT09MIChzZWxmLT52NGwyY2FwdHVyZS0+cG9vbCksCi0gICAgICAgICAgICBUUlVFKSkKLSAgICAgIGdvdG8gYWN0aXZhdGVfZmFpbGVkOwotICB9Ci0KLSAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZzZWxmLT5wcm9jZXNzaW5nKSA9PSBGQUxTRSkgewotICAgIC8qIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgcHJvY2Vzc2luZyB0aHJlYWQgc3RvcHBlZCBkdWUgdG8gYW4gZXJyb3IgKi8KLSAgICBpZiAoc2VsZi0+b3V0cHV0X2Zsb3cgIT0gR1NUX0ZMT1dfT0sgJiYKLSAgICAgICAgc2VsZi0+b3V0cHV0X2Zsb3cgIT0gR1NUX0ZMT1dfRkxVU0hJTkcpIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJQcm9jZXNzaW5nIGxvb3Agc3RvcHBlZCB3aXRoIGVycm9yLCBsZWF2aW5nIik7Ci0gICAgICByZXQgPSBzZWxmLT5vdXRwdXRfZmxvdzsKLSAgICAgIGdvdG8gZHJvcDsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiU3RhcnRpbmcgZGVjb2RpbmcgdGhyZWFkIik7Ci0KLSAgICAvKiBTdGFydCB0aGUgcHJvY2Vzc2luZyB0YXNrLCB3aGVuIGl0IHF1aXRzLCB0aGUgdGFzayB3aWxsIGRpc2FibGUgaW5wdXQKLSAgICAgKiBwcm9jZXNzaW5nIHRvIHVubG9jayBpbnB1dCBpZiBkcmFpbmluZywgb3IgcHJldmVudCBwb3RlbnRpYWwgYmxvY2sgKi8KLSAgICBnX2F0b21pY19pbnRfc2V0ICgmc2VsZi0+cHJvY2Vzc2luZywgVFJVRSk7Ci0gICAgaWYgKCFnc3RfcGFkX3N0YXJ0X3Rhc2sgKGRlY29kZXItPnNyY3BhZCwKLSAgICAgICAgICAgIChHc3RUYXNrRnVuY3Rpb24pIGdzdF92NGwyX3ZpZGVvX2RlY19sb29wLCBzZWxmLAotICAgICAgICAgICAgKEdEZXN0cm95Tm90aWZ5KSBnc3RfdjRsMl92aWRlb19kZWNfbG9vcF9zdG9wcGVkKSkKLSAgICAgIGdvdG8gc3RhcnRfdGFza19mYWlsZWQ7Ci0gIH0KLQotICBpZiAoIXByb2Nlc3NlZCkgewotICAgIEdTVF9WSURFT19ERUNPREVSX1NUUkVBTV9VTkxPQ0sgKGRlY29kZXIpOwotICAgIHJldCA9Ci0gICAgICAgIGdzdF92NGwyX2J1ZmZlcl9wb29sX3Byb2Nlc3MgKEdTVF9WNEwyX0JVRkZFUl9QT09MIChzZWxmLT52NGwyb3V0cHV0LT4KLSAgICAgICAgICAgIHBvb2wpLCAmZnJhbWUtPmlucHV0X2J1ZmZlcik7Ci0gICAgR1NUX1ZJREVPX0RFQ09ERVJfU1RSRUFNX0xPQ0sgKGRlY29kZXIpOwotCi0gICAgaWYgKHJldCA9PSBHU1RfRkxPV19GTFVTSElORykgewotICAgICAgaWYgKGdfYXRvbWljX2ludF9nZXQgKCZzZWxmLT5wcm9jZXNzaW5nKSA9PSBGQUxTRSkKLSAgICAgICAgcmV0ID0gc2VsZi0+b3V0cHV0X2Zsb3c7Ci0gICAgICBnb3RvIGRyb3A7Ci0gICAgfSBlbHNlIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0spIHsKLSAgICAgIGdvdG8gcHJvY2Vzc19mYWlsZWQ7Ci0gICAgfQotICB9Ci0KLSAgLyogTm8gbmVlZCB0byBrZWVwIGlucHV0IGFycm91bmQgKi8KLSAgdG1wID0gZnJhbWUtPmlucHV0X2J1ZmZlcjsKLSAgZnJhbWUtPmlucHV0X2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBnc3RfYnVmZmVyX2NvcHlfaW50byAoZnJhbWUtPmlucHV0X2J1ZmZlciwgdG1wLAotICAgICAgR1NUX0JVRkZFUl9DT1BZX0ZMQUdTIHwgR1NUX0JVRkZFUl9DT1BZX1RJTUVTVEFNUFMgfAotICAgICAgR1NUX0JVRkZFUl9DT1BZX01FVEEsIDAsIDApOwotICBnc3RfYnVmZmVyX3VucmVmICh0bXApOwotCi0gIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiAoZnJhbWUpOwotICByZXR1cm4gcmV0OwotCi0gIC8qIEVSUk9SUyAqLwotbm90X25lZ290aWF0ZWQ6Ci0gIHsKLSAgICBHU1RfRVJST1JfT0JKRUNUIChzZWxmLCAibm90IG5lZ290aWF0ZWQiKTsKLSAgICByZXQgPSBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRDsKLSAgICBnc3RfdjRsMl9lcnJvciAoc2VsZiwgJmVycm9yKTsKLSAgICBnb3RvIGRyb3A7Ci0gIH0KLWFjdGl2YXRlX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzZWxmLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiIpKSwKLSAgICAgICAgKCJCdWZmZXIgcG9vbCBhY3RpdmF0aW9uIGZhaWxlZCIpKTsKLSAgICByZXQgPSBHU1RfRkxPV19FUlJPUjsKLSAgICBnb3RvIGRyb3A7Ci0gIH0KLWZsdXNoaW5nOgotICB7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRkxVU0hJTkc7Ci0gICAgZ290byBkcm9wOwotICB9Ci0KLXN0YXJ0X3Rhc2tfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHNlbGYsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gc3RhcnQgZGVjb2RpbmcgdGhyZWFkLiIpKSwgKE5VTEwpKTsKLSAgICBnX2F0b21pY19pbnRfc2V0ICgmc2VsZi0+cHJvY2Vzc2luZywgRkFMU0UpOwotICAgIHJldCA9IEdTVF9GTE9XX0VSUk9SOwotICAgIGdvdG8gZHJvcDsKLSAgfQotcHJvY2Vzc19mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAoc2VsZiwgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKF8oIkZhaWxlZCB0byBwcm9jZXNzIGZyYW1lLiIpKSwKLSAgICAgICAgKCJNYXliZSBiZSBkdWUgdG8gbm90IGVub3VnaCBtZW1vcnkgb3IgZmFpbGluZyBkcml2ZXIiKSk7Ci0gICAgcmV0ID0gR1NUX0ZMT1dfRVJST1I7Ci0gICAgZ290byBkcm9wOwotICB9Ci1kcm9wOgotICB7Ci0gICAgZ3N0X3ZpZGVvX2RlY29kZXJfZHJvcF9mcmFtZSAoZGVjb2RlciwgZnJhbWUpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl92aWRlb19kZWNfZGVjaWRlX2FsbG9jYXRpb24gKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsCi0gICAgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLSAgR3N0Q2xvY2tUaW1lIGxhdGVuY3k7Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGlmIChnc3RfdjRsMl9vYmplY3RfZGVjaWRlX2FsbG9jYXRpb24gKHNlbGYtPnY0bDJjYXB0dXJlLCBxdWVyeSkpCi0gICAgcmV0ID0gR1NUX1ZJREVPX0RFQ09ERVJfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmRlY2lkZV9hbGxvY2F0aW9uIChkZWNvZGVyLAotICAgICAgICBxdWVyeSk7Ci0KLSAgbGF0ZW5jeSA9IHNlbGYtPnY0bDJjYXB0dXJlLT5taW5fYnVmZmVycyAqIHNlbGYtPnY0bDJjYXB0dXJlLT5kdXJhdGlvbjsKLSAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X2xhdGVuY3kgKGRlY29kZXIsIGxhdGVuY3ksIGxhdGVuY3kpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fZGVjX3NyY19xdWVyeSAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLQotICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFIChxdWVyeSkpIHsKLSAgICBjYXNlIEdTVF9RVUVSWV9DQVBTOnsKLSAgICAgIEdzdENhcHMgKmZpbHRlciwgKnJlc3VsdCA9IE5VTEw7Ci0gICAgICBHc3RQYWQgKnBhZCA9IEdTVF9WSURFT19ERUNPREVSX1NSQ19QQUQgKGRlY29kZXIpOwotCi0gICAgICBnc3RfcXVlcnlfcGFyc2VfY2FwcyAocXVlcnksICZmaWx0ZXIpOwotCi0gICAgICBpZiAoc2VsZi0+cHJvYmVkX3NyY2NhcHMpCi0gICAgICAgIHJlc3VsdCA9IGdzdF9jYXBzX3JlZiAoc2VsZi0+cHJvYmVkX3NyY2NhcHMpOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAocGFkKTsKLQotICAgICAgaWYgKGZpbHRlcikgewotICAgICAgICBHc3RDYXBzICp0bXAgPSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdCA9Ci0gICAgICAgICAgICBnc3RfY2Fwc19pbnRlcnNlY3RfZnVsbCAoZmlsdGVyLCB0bXAsIEdTVF9DQVBTX0lOVEVSU0VDVF9GSVJTVCk7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmICh0bXApOwotICAgICAgfQotCi0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiUmV0dXJuaW5nIHNyYyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCByZXN1bHQpOwotCi0gICAgICBnc3RfcXVlcnlfc2V0X2NhcHNfcmVzdWx0IChxdWVyeSwgcmVzdWx0KTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChyZXN1bHQpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldCA9IEdTVF9WSURFT19ERUNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zcmNfcXVlcnkgKGRlY29kZXIsIHF1ZXJ5KTsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3Y0bDJfdmlkZW9fZGVjX3NpbmtfZ2V0Y2FwcyAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwgR3N0Q2FwcyAqIGZpbHRlcikKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLSAgR3N0Q2FwcyAqcmVzdWx0OwotCi0gIHJlc3VsdCA9IGdzdF92aWRlb19kZWNvZGVyX3Byb3h5X2dldGNhcHMgKGRlY29kZXIsIHNlbGYtPnByb2JlZF9zaW5rY2FwcywKLSAgICAgIGZpbHRlcik7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIlJldHVybmluZyBzaW5rIGNhcHMgJSIgR1NUX1BUUl9GT1JNQVQsIHJlc3VsdCk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfdjRsMl92aWRlb19kZWNfc2lua19ldmVudCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChkZWNvZGVyKTsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0ZMVVNIX1NUQVJUOgotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgImZsdXNoIHN0YXJ0Iik7Ci0gICAgICBnc3RfdjRsMl9vYmplY3RfdW5sb2NrIChzZWxmLT52NGwyb3V0cHV0KTsKLSAgICAgIGdzdF92NGwyX29iamVjdF91bmxvY2sgKHNlbGYtPnY0bDJjYXB0dXJlKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldCA9IEdTVF9WSURFT19ERUNPREVSX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5zaW5rX2V2ZW50IChkZWNvZGVyLCBldmVudCk7Ci0KLSAgc3dpdGNoIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpKSB7Ci0gICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6Ci0gICAgICAvKiBUaGUgcHJvY2Vzc2luZyB0aHJlYWQgc2hvdWxkIHN0b3Agbm93LCB3YWl0IGZvciBpdCAqLwotICAgICAgZ3N0X3BhZF9zdG9wX3Rhc2sgKGRlY29kZXItPnNyY3BhZCk7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiZmx1c2ggc3RhcnQgZG9uZSIpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuCi1nc3RfdjRsMl92aWRlb19kZWNfY2hhbmdlX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQotewotICBHc3RWNGwyVmlkZW9EZWMgKnNlbGYgPSBHU1RfVjRMMl9WSURFT19ERUMgKGVsZW1lbnQpOwotICBHc3RWaWRlb0RlY29kZXIgKmRlY29kZXIgPSBHU1RfVklERU9fREVDT0RFUiAoZWxlbWVudCk7Ci0KLSAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFkpIHsKLSAgICBnX2F0b21pY19pbnRfc2V0ICgmc2VsZi0+YWN0aXZlLCBGQUxTRSk7Ci0gICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMm91dHB1dCk7Ci0gICAgZ3N0X3Y0bDJfb2JqZWN0X3VubG9jayAoc2VsZi0+djRsMmNhcHR1cmUpOwotICAgIGdzdF9wYWRfc3RvcF90YXNrIChkZWNvZGVyLT5zcmNwYWQpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9FTEVNRU5UX0NMQVNTIChwYXJlbnRfY2xhc3MpLT5jaGFuZ2Vfc3RhdGUgKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdmlkZW9fZGVjX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFY0bDJWaWRlb0RlYyAqc2VsZiA9IEdTVF9WNEwyX1ZJREVPX0RFQyAob2JqZWN0KTsKLQotICBnc3RfY2Fwc19yZXBsYWNlICgmc2VsZi0+cHJvYmVkX3NpbmtjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfcmVwbGFjZSAoJnNlbGYtPnByb2JlZF9zcmNjYXBzLCBOVUxMKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3ZpZGVvX2RlY19maW5hbGl6ZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChvYmplY3QpOwotCi0gIGdzdF92NGwyX29iamVjdF9kZXN0cm95IChzZWxmLT52NGwyY2FwdHVyZSk7Ci0gIGdzdF92NGwyX29iamVjdF9kZXN0cm95IChzZWxmLT52NGwyb3V0cHV0KTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdjRsMl92aWRlb19kZWNfaW5pdCAoR3N0VjRsMlZpZGVvRGVjICogc2VsZikKLXsKLSAgLyogVjRMMiBvYmplY3QgYXJlIGNyZWF0ZWQgaW4gc3ViaW5zdGFuY2VfaW5pdCAqLwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdmlkZW9fZGVjX3N1Ymluc3RhbmNlX2luaXQgKEdUeXBlSW5zdGFuY2UgKiBpbnN0YW5jZSwgZ3BvaW50ZXIgZ19jbGFzcykKLXsKLSAgR3N0VjRsMlZpZGVvRGVjQ2xhc3MgKmtsYXNzID0gR1NUX1Y0TDJfVklERU9fREVDX0NMQVNTIChnX2NsYXNzKTsKLSAgR3N0VjRsMlZpZGVvRGVjICpzZWxmID0gR1NUX1Y0TDJfVklERU9fREVDIChpbnN0YW5jZSk7Ci0gIEdzdFZpZGVvRGVjb2RlciAqZGVjb2RlciA9IEdTVF9WSURFT19ERUNPREVSIChpbnN0YW5jZSk7Ci0KLSAgZ3N0X3ZpZGVvX2RlY29kZXJfc2V0X3BhY2tldGl6ZWQgKGRlY29kZXIsIFRSVUUpOwotCi0gIHNlbGYtPnY0bDJvdXRwdXQgPSBnc3RfdjRsMl9vYmplY3RfbmV3IChHU1RfRUxFTUVOVCAoc2VsZiksCi0gICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCwga2xhc3MtPmRlZmF1bHRfZGV2aWNlLAotICAgICAgZ3N0X3Y0bDJfZ2V0X291dHB1dCwgZ3N0X3Y0bDJfc2V0X291dHB1dCwgTlVMTCk7Ci0gIHNlbGYtPnY0bDJvdXRwdXQtPm5vX2luaXRpYWxfZm9ybWF0ID0gVFJVRTsKLSAgc2VsZi0+djRsMm91dHB1dC0+a2VlcF9hc3BlY3QgPSBGQUxTRTsKLQotICBzZWxmLT52NGwyY2FwdHVyZSA9IGdzdF92NGwyX29iamVjdF9uZXcgKEdTVF9FTEVNRU5UIChzZWxmKSwKLSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwga2xhc3MtPmRlZmF1bHRfZGV2aWNlLAotICAgICAgZ3N0X3Y0bDJfZ2V0X2lucHV0LCBnc3RfdjRsMl9zZXRfaW5wdXQsIE5VTEwpOwotICBzZWxmLT52NGwyY2FwdHVyZS0+bm9faW5pdGlhbF9mb3JtYXQgPSBUUlVFOwotICBzZWxmLT52NGwyb3V0cHV0LT5rZWVwX2FzcGVjdCA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfdmlkZW9fZGVjX2NsYXNzX2luaXQgKEdzdFY0bDJWaWRlb0RlY0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZWxlbWVudF9jbGFzczsKLSAgR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzOwotICBHc3RWaWRlb0RlY29kZXJDbGFzcyAqdmlkZW9fZGVjb2Rlcl9jbGFzczsKLQotICBwYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNzKTsKLQotICBlbGVtZW50X2NsYXNzID0gKEdzdEVsZW1lbnRDbGFzcyAqKSBrbGFzczsKLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIHZpZGVvX2RlY29kZXJfY2xhc3MgPSAoR3N0VmlkZW9EZWNvZGVyQ2xhc3MgKikga2xhc3M7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGdzdF92NGwyX3ZpZGVvX2RlY19kZWJ1ZywgInY0bDJ2aWRlb2RlYyIsIDAsCi0gICAgICAiVjRMMiBWaWRlbyBEZWNvZGVyIik7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZWxlbWVudF9jbGFzcywKLSAgICAgICJWNEwyIFZpZGVvIERlY29kZXIiLAotICAgICAgIkNvZGVjL0RlY29kZXIvVmlkZW8iLAotICAgICAgIkRlY29kZSB2aWRlbyBzdHJlYW1zIHZpYSBWNEwyIEFQSSIsCi0gICAgICAiTmljb2xhcyBEdWZyZXNuZSA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+Iik7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl92aWRlb19kZWNfZGlzcG9zZSk7Ci0gIGdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19maW5hbGl6ZSk7Ci0gIGdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdmlkZW9fZGVjX3NldF9wcm9wZXJ0eSk7Ci0gIGdvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdmlkZW9fZGVjX2dldF9wcm9wZXJ0eSk7Ci0KLSAgdmlkZW9fZGVjb2Rlcl9jbGFzcy0+b3BlbiA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl92aWRlb19kZWNfb3Blbik7Ci0gIHZpZGVvX2RlY29kZXJfY2xhc3MtPmNsb3NlID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19jbG9zZSk7Ci0gIHZpZGVvX2RlY29kZXJfY2xhc3MtPnN0YXJ0ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19zdGFydCk7Ci0gIHZpZGVvX2RlY29kZXJfY2xhc3MtPnN0b3AgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdmlkZW9fZGVjX3N0b3ApOwotICB2aWRlb19kZWNvZGVyX2NsYXNzLT5maW5pc2ggPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdmlkZW9fZGVjX2ZpbmlzaCk7Ci0gIHZpZGVvX2RlY29kZXJfY2xhc3MtPmZsdXNoID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19mbHVzaCk7Ci0gIHZpZGVvX2RlY29kZXJfY2xhc3MtPnNldF9mb3JtYXQgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19zZXRfZm9ybWF0KTsKLSAgdmlkZW9fZGVjb2Rlcl9jbGFzcy0+bmVnb3RpYXRlID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl92aWRlb19kZWNfbmVnb3RpYXRlKTsKLSAgdmlkZW9fZGVjb2Rlcl9jbGFzcy0+ZGVjaWRlX2FsbG9jYXRpb24gPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19kZWNpZGVfYWxsb2NhdGlvbik7Ci0gIC8qIEZJWE1FIHByb3Bvc2VfYWxsb2NhdGlvbiBvciBub3QgPyAqLwotICB2aWRlb19kZWNvZGVyX2NsYXNzLT5oYW5kbGVfZnJhbWUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF92NGwyX3ZpZGVvX2RlY19oYW5kbGVfZnJhbWUpOwotICB2aWRlb19kZWNvZGVyX2NsYXNzLT5nZXRjYXBzID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl92aWRlb19kZWNfc2lua19nZXRjYXBzKTsKLSAgdmlkZW9fZGVjb2Rlcl9jbGFzcy0+c3JjX3F1ZXJ5ID0KLSAgICAgIEdTVF9ERUJVR19GVU5DUFRSIChnc3RfdjRsMl92aWRlb19kZWNfc3JjX3F1ZXJ5KTsKLSAgdmlkZW9fZGVjb2Rlcl9jbGFzcy0+c2lua19ldmVudCA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdmlkZW9fZGVjX3NpbmtfZXZlbnQpOwotCi0gIGVsZW1lbnRfY2xhc3MtPmNoYW5nZV9zdGF0ZSA9Ci0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3Y0bDJfdmlkZW9fZGVjX2NoYW5nZV9zdGF0ZSk7Ci0KLSAgZ3N0X3Y0bDJfb2JqZWN0X2luc3RhbGxfbTJtX3Byb3BlcnRpZXNfaGVscGVyIChnb2JqZWN0X2NsYXNzKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX3ZpZGVvX2RlY19zdWJjbGFzc19pbml0IChncG9pbnRlciBnX2NsYXNzLCBncG9pbnRlciBkYXRhKQotewotICBHc3RWNGwyVmlkZW9EZWNDbGFzcyAqa2xhc3MgPSBHU1RfVjRMMl9WSURFT19ERUNfQ0xBU1MgKGdfY2xhc3MpOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyAoZ19jbGFzcyk7Ci0gIEdzdFY0bDJWaWRlb0RlY0NEYXRhICpjZGF0YSA9IGRhdGE7Ci0KLSAga2xhc3MtPmRlZmF1bHRfZGV2aWNlID0gY2RhdGEtPmRldmljZTsKLQotICAvKiBOb3RlOiBnc3RfcGFkX3RlbXBsYXRlX25ldygpIHRha2UgdGhlIGZsb2F0aW5nIHJlZiBmcm9tIHRoZSBjYXBzICovCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUgKGVsZW1lbnRfY2xhc3MsCi0gICAgICBnc3RfcGFkX3RlbXBsYXRlX25ldyAoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgIGNkYXRhLT5zaW5rX2NhcHMpKTsKLSAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywKLSAgICAgIGdzdF9wYWRfdGVtcGxhdGVfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfQUxXQVlTLAotICAgICAgICAgIGNkYXRhLT5zcmNfY2FwcykpOwotCi0gIGdfZnJlZSAoY2RhdGEpOwotfQotCi0vKiBQcm9iaW5nIGZ1bmN0aW9ucyAqLwotZ2Jvb2xlYW4KLWdzdF92NGwyX2lzX3ZpZGVvX2RlYyAoR3N0Q2FwcyAqIHNpbmtfY2FwcywgR3N0Q2FwcyAqIHNyY19jYXBzKQotewotICBnYm9vbGVhbiByZXQgPSBGQUxTRTsKLQotICBpZiAoZ3N0X2NhcHNfaXNfc3Vic2V0IChzaW5rX2NhcHMsIGdzdF92NGwyX29iamVjdF9nZXRfY29kZWNfY2FwcyAoKSkKLSAgICAgICYmIGdzdF9jYXBzX2lzX3N1YnNldCAoc3JjX2NhcHMsIGdzdF92NGwyX29iamVjdF9nZXRfcmF3X2NhcHMgKCkpKQotICAgIHJldCA9IFRSVUU7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX2RlY19yZWdpc3RlciAoR3N0UGx1Z2luICogcGx1Z2luLCBjb25zdCBnY2hhciAqIGJhc2VuYW1lLAotICAgIGNvbnN0IGdjaGFyICogZGV2aWNlX3BhdGgsIEdzdENhcHMgKiBzaW5rX2NhcHMsIEdzdENhcHMgKiBzcmNfY2FwcykKLXsKLSAgR1R5cGVRdWVyeSB0eXBlX3F1ZXJ5OwotICBHVHlwZUluZm8gdHlwZV9pbmZvID0geyAwLCB9OwotICBHVHlwZSB0eXBlLCBzdWJ0eXBlOwotICBnY2hhciAqdHlwZV9uYW1lOwotICBHc3RWNGwyVmlkZW9EZWNDRGF0YSAqY2RhdGE7Ci0KLSAgY2RhdGEgPSBnX25ldzAgKEdzdFY0bDJWaWRlb0RlY0NEYXRhLCAxKTsKLSAgY2RhdGEtPmRldmljZSA9IGdfc3RyZHVwIChkZXZpY2VfcGF0aCk7Ci0gIGNkYXRhLT5zaW5rX2NhcHMgPSBnc3RfY2Fwc19yZWYgKHNpbmtfY2Fwcyk7Ci0gIGNkYXRhLT5zcmNfY2FwcyA9IGdzdF9jYXBzX3JlZiAoc3JjX2NhcHMpOwotCi0gIHR5cGUgPSBnc3RfdjRsMl92aWRlb19kZWNfZ2V0X3R5cGUgKCk7Ci0gIGdfdHlwZV9xdWVyeSAodHlwZSwgJnR5cGVfcXVlcnkpOwotICBtZW1zZXQgKCZ0eXBlX2luZm8sIDAsIHNpemVvZiAodHlwZV9pbmZvKSk7Ci0gIHR5cGVfaW5mby5jbGFzc19zaXplID0gdHlwZV9xdWVyeS5jbGFzc19zaXplOwotICB0eXBlX2luZm8uaW5zdGFuY2Vfc2l6ZSA9IHR5cGVfcXVlcnkuaW5zdGFuY2Vfc2l6ZTsKLSAgdHlwZV9pbmZvLmNsYXNzX2luaXQgPSBnc3RfdjRsMl92aWRlb19kZWNfc3ViY2xhc3NfaW5pdDsKLSAgdHlwZV9pbmZvLmNsYXNzX2RhdGEgPSBjZGF0YTsKLSAgdHlwZV9pbmZvLmluc3RhbmNlX2luaXQgPSBnc3RfdjRsMl92aWRlb19kZWNfc3ViaW5zdGFuY2VfaW5pdDsKLQotICB0eXBlX25hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJ2NGwyJXNkZWMiLCBiYXNlbmFtZSk7Ci0gIHN1YnR5cGUgPSBnX3R5cGVfcmVnaXN0ZXJfc3RhdGljICh0eXBlLCB0eXBlX25hbWUsICZ0eXBlX2luZm8sIDApOwotCi0gIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sIHR5cGVfbmFtZSwgR1NUX1JBTktfUFJJTUFSWSArIDEsIHN1YnR5cGUpOwotCi0gIGdfZnJlZSAodHlwZV9uYW1lKTsKLQotICByZXR1cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL2dzdHY0bDJ2aWRlb2RlYy5oIGIvc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYTNlODMuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnZpZGVvZGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuCi0gKiAgICAgQXV0aG9yOiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9WNEwyX1ZJREVPX0RFQ19IX18KLSNkZWZpbmUgX19HU1RfVjRMMl9WSURFT19ERUNfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KLQotI2luY2x1ZGUgPGdzdHY0bDJvYmplY3QuaD4KLSNpbmNsdWRlIDxnc3R2NGwyYnVmZmVycG9vbC5oPgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh2NGwydmlkZW9kZWNfZGVidWcpOwotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVjRMMl9WSURFT19ERUMgXAotICAoZ3N0X3Y0bDJfdmlkZW9fZGVjX2dldF90eXBlKCkpCi0jZGVmaW5lIEdTVF9WNEwyX1ZJREVPX0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLEdTVF9UWVBFX1Y0TDJfVklERU9fREVDLEdzdFY0bDJWaWRlb0RlYykpCi0jZGVmaW5lIEdTVF9WNEwyX1ZJREVPX0RFQ19DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSxHU1RfVFlQRV9WNEwyX1ZJREVPX0RFQyxHc3RWNGwyVmlkZW9EZWNDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19WNEwyX1ZJREVPX0RFQyhvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLEdTVF9UWVBFX1Y0TDJfVklERU9fREVDKSkKLSNkZWZpbmUgR1NUX0lTX1Y0TDJfVklERU9fREVDX0NMQVNTKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9WNEwyX1ZJREVPX0RFQykpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyVmlkZW9EZWMgR3N0VjRsMlZpZGVvRGVjOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFY0bDJWaWRlb0RlY0NsYXNzIEdzdFY0bDJWaWRlb0RlY0NsYXNzOwotCi1zdHJ1Y3QgX0dzdFY0bDJWaWRlb0RlYwotewotICBHc3RWaWRlb0RlY29kZXIgcGFyZW50OwotCi0gIC8qIDwgcHJpdmF0ZSA+ICovCi0gIEdzdFY0bDJPYmplY3QgKiB2NGwyb3V0cHV0OwotICBHc3RWNGwyT2JqZWN0ICogdjRsMmNhcHR1cmU7Ci0KLSAgLyogcGFkcyAqLwotICBHc3RDYXBzICpwcm9iZWRfc3JjY2FwczsKLSAgR3N0Q2FwcyAqcHJvYmVkX3NpbmtjYXBzOwotCi0gIC8qIFN0YXRlICovCi0gIEdzdFZpZGVvQ29kZWNTdGF0ZSAqaW5wdXRfc3RhdGU7Ci0gIGdib29sZWFuIGFjdGl2ZTsKLSAgZ2Jvb2xlYW4gcHJvY2Vzc2luZzsKLSAgR3N0Rmxvd1JldHVybiBvdXRwdXRfZmxvdzsKLX07Ci0KLXN0cnVjdCBfR3N0VjRsMlZpZGVvRGVjQ2xhc3MKLXsKLSAgR3N0VmlkZW9EZWNvZGVyQ2xhc3MgcGFyZW50X2NsYXNzOwotCi0gIGdjaGFyICpkZWZhdWx0X2RldmljZTsKLX07Ci0KLUdUeXBlIGdzdF92NGwyX3ZpZGVvX2RlY19nZXRfdHlwZSAodm9pZCk7Ci0KLWdib29sZWFuIGdzdF92NGwyX2lzX3ZpZGVvX2RlYyAgICAgICAoR3N0Q2FwcyAqIHNpbmtfY2FwcywgR3N0Q2FwcyAqIHNyY19jYXBzKTsKLWdib29sZWFuIGdzdF92NGwyX3ZpZGVvX2RlY19yZWdpc3RlciAoR3N0UGx1Z2luICogcGx1Z2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqYmFzZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpkZXZpY2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0Q2FwcyAqIHNpbmtfY2FwcywgR3N0Q2FwcyAqIHNyY19jYXBzKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1Y0TDJfVklERU9fREVDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvZ3N0djRsMnZpZG9yaWVudC5jIGIvc3lzL3Y0bDIvZ3N0djRsMnZpZG9yaWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2UxM2M0Li4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL2dzdHY0bDJ2aWRvcmllbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogZ3N0djRsMnZpZG9yaWVudC5jOiB2aWRlbyBvcmllbnRhdGlvbiBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZm9yIFY0TDIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlICJnc3R2NGwydmlkb3JpZW50LmgiCi0jaW5jbHVkZSAiZ3N0djRsMm9iamVjdC5oIgotI2luY2x1ZGUgInY0bDJfY2FsbHMuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAodjRsMnZvX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHY0bDJ2b19kZWJ1ZwotCi12b2lkCi1nc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9pbnRlcmZhY2VfaW5pdCAoR3N0VmlkZW9PcmllbnRhdGlvbkludGVyZmFjZSAqIGlmYWNlKQotewotICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCAodjRsMnZvX2RlYnVnLCAidjRsMnZvIiwgMCwKLSAgICAgICJWNEwyIFZpZGVvT3JpZW50YXRpb24gaW50ZXJmYWNlIGRlYnVnZ2luZyIpOwotfQotCi0KLWdib29sZWFuCi1nc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9nZXRfaGZsaXAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIGdib29sZWFuICogZmxpcCkKLXsKLQotICByZXR1cm4gZ3N0X3Y0bDJfZ2V0X2F0dHJpYnV0ZSAodjRsMm9iamVjdCwgVjRMMl9DSURfSEZMSVAsIGZsaXApOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fZ2V0X3ZmbGlwIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICBnYm9vbGVhbiAqIGZsaXApCi17Ci0gIHJldHVybiBnc3RfdjRsMl9nZXRfYXR0cmlidXRlICh2NGwyb2JqZWN0LCBWNEwyX0NJRF9WRkxJUCwgZmxpcCk7Ci19Ci0KLS8qIG5hbWVkIGhjZW50ZXIgYmVjYXVzZSBvZiBoaXN0b3JpY2FsIHY0bDIgbmFtaW5nICovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fZ2V0X2hjZW50ZXIgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIGdpbnQgKiBjZW50ZXIpCi17Ci0gIHJldHVybiBnc3RfdjRsMl9nZXRfYXR0cmlidXRlICh2NGwyb2JqZWN0LCBWNEwyX0NJRF9QQU5fUkVTRVQsIGNlbnRlcik7Ci19Ci0KLS8qIG5hbWVkIHZjZW50ZXIgYmVjYXVzZSBvZiBoaXN0b3JpY2FsIHY0bDIgbmFtaW5nICovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fZ2V0X3ZjZW50ZXIgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgIGdpbnQgKiBjZW50ZXIpCi17Ci0gIHJldHVybiBnc3RfdjRsMl9nZXRfYXR0cmlidXRlICh2NGwyb2JqZWN0LCBWNEwyX0NJRF9USUxUX1JFU0VULCBjZW50ZXIpOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fc2V0X2hmbGlwIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgZ2Jvb2xlYW4gZmxpcCkKLXsKLSAgcmV0dXJuIGdzdF92NGwyX3NldF9hdHRyaWJ1dGUgKHY0bDJvYmplY3QsIFY0TDJfQ0lEX0hGTElQLCBmbGlwKTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX3NldF92ZmxpcCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIGdib29sZWFuIGZsaXApCi17Ci0gIHJldHVybiBnc3RfdjRsMl9zZXRfYXR0cmlidXRlICh2NGwyb2JqZWN0LCBWNEwyX0NJRF9WRkxJUCwgZmxpcCk7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9zZXRfaGNlbnRlciAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIGdpbnQgY2VudGVyKQotewotICByZXR1cm4gZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSAodjRsMm9iamVjdCwgVjRMMl9DSURfUEFOX1JFU0VULCBjZW50ZXIpOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fc2V0X3ZjZW50ZXIgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCBnaW50IGNlbnRlcikKLXsKLSAgcmV0dXJuIGdzdF92NGwyX3NldF9hdHRyaWJ1dGUgKHY0bDJvYmplY3QsIFY0TDJfQ0lEX1RJTFRfUkVTRVQsIGNlbnRlcik7Ci19CmRpZmYgLS1naXQgYS9zeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmggYi9zeXMvdjRsMi9nc3R2NGwydmlkb3JpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiODg0NzguLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvZ3N0djRsMnZpZG9yaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogZ3N0djRsMnZpZG9yaWVudC5oOiB2aWRlbyBvcmllbnRhdGlvbiBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZm9yIFY0TDIKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1Y0TDJfVklET1JJRU5UX0hfXwotI2RlZmluZSBfX0dTVF9WNEwyX1ZJRE9SSUVOVF9IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW9vcmllbnRhdGlvbi5oPgotCi0jaW5jbHVkZSAiZ3N0djRsMm9iamVjdC5oIgotCi1HX0JFR0lOX0RFQ0xTCi0KLXZvaWQgICAgIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX2ludGVyZmFjZV9pbml0IChHc3RWaWRlb09yaWVudGF0aW9uSW50ZXJmYWNlICogaWZhY2UpOwotCi1nYm9vbGVhbiBnc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9nZXRfaGZsaXAgCShHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LCBnYm9vbGVhbiAqZmxpcCk7Ci1nYm9vbGVhbiBnc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9nZXRfdmZsaXAgCShHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LCBnYm9vbGVhbiAqZmxpcCk7Ci1nYm9vbGVhbiBnc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9nZXRfaGNlbnRlciAoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCwgZ2ludCAqY2VudGVyKTsKLWdib29sZWFuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX2dldF92Y2VudGVyIChHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LCBnaW50ICpjZW50ZXIpOwotCi1nYm9vbGVhbiBnc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9zZXRfaGZsaXAgCShHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LCBnYm9vbGVhbiBmbGlwKTsKLWdib29sZWFuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX3NldF92ZmxpcCAJKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsIGdib29sZWFuIGZsaXApOwotZ2Jvb2xlYW4gZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fc2V0X2hjZW50ZXIgKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsIGdpbnQgY2VudGVyKTsKLWdib29sZWFuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX3NldF92Y2VudGVyIChHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LCBnaW50IGNlbnRlcik7Ci0KLSNkZWZpbmUgR1NUX0lNUExFTUVOVF9WNEwyX1ZJRE9SSUVOVF9NRVRIT0RTKFR5cGUsIGludGVyZmFjZV9hc19mdW5jdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF92aWRlb19vcmllbnRhdGlvbl9nZXRfaGZsaXAgKEdzdFZpZGVvT3JpZW50YXRpb24gKnZvLCBnYm9vbGVhbiAqZmxpcCkgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVHlwZSAqdGhpcyA9IChUeXBlKikgdm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fZ2V0X2hmbGlwICh0aGlzLT52NGwyb2JqZWN0LCBmbGlwKTsJCSAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fZ2V0X3ZmbGlwIChHc3RWaWRlb09yaWVudGF0aW9uICp2bywgZ2Jvb2xlYW4gKmZsaXApICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFR5cGUgKnRoaXMgPSAoVHlwZSopIHZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX2dldF92ZmxpcCAodGhpcy0+djRsMm9iamVjdCwgZmxpcCk7CQkgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RhdGljIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3ZpZGVvX29yaWVudGF0aW9uX2dldF9oY2VudGVyIChHc3RWaWRlb09yaWVudGF0aW9uICp2bywgZ2ludCAqY2VudGVyKSAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBUeXBlICp0aGlzID0gKFR5cGUqKSB2bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBnc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9nZXRfaGNlbnRlciAodGhpcy0+djRsMm9iamVjdCwgY2VudGVyKTsJCSAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fZ2V0X3ZjZW50ZXIgKEdzdFZpZGVvT3JpZW50YXRpb24gKnZvLCBnaW50ICpjZW50ZXIpICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFR5cGUgKnRoaXMgPSAoVHlwZSopIHZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX2dldF92Y2VudGVyICh0aGlzLT52NGwyb2JqZWN0LCBjZW50ZXIpOwkJICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF92aWRlb19vcmllbnRhdGlvbl9zZXRfaGZsaXAgKEdzdFZpZGVvT3JpZW50YXRpb24gKnZvLCBnYm9vbGVhbiBmbGlwKSAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgVHlwZSAqdGhpcyA9IChUeXBlKikgdm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gZ3N0X3Y0bDJfdmlkZW9fb3JpZW50YXRpb25fc2V0X2hmbGlwICh0aGlzLT52NGwyb2JqZWN0LCBmbGlwKTsJCSAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fc2V0X3ZmbGlwIChHc3RWaWRlb09yaWVudGF0aW9uICp2bywgZ2Jvb2xlYW4gZmxpcCkgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFR5cGUgKnRoaXMgPSAoVHlwZSopIHZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX3NldF92ZmxpcCAodGhpcy0+djRsMm9iamVjdCwgZmxpcCk7CQkgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RhdGljIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3ZpZGVvX29yaWVudGF0aW9uX3NldF9oY2VudGVyIChHc3RWaWRlb09yaWVudGF0aW9uICp2bywgZ2ludCBjZW50ZXIpICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBUeXBlICp0aGlzID0gKFR5cGUqKSB2bzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBnc3RfdjRsMl92aWRlb19vcmllbnRhdGlvbl9zZXRfaGNlbnRlciAodGhpcy0+djRsMm9iamVjdCwgY2VudGVyKTsJCSAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fc2V0X3ZjZW50ZXIgKEdzdFZpZGVvT3JpZW50YXRpb24gKnZvLCBnaW50IGNlbnRlcikgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFR5cGUgKnRoaXMgPSAoVHlwZSopIHZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGdzdF92NGwyX3ZpZGVvX29yaWVudGF0aW9uX3NldF92Y2VudGVyICh0aGlzLT52NGwyb2JqZWN0LCBjZW50ZXIpOwkJICAgICAgICAgIFwKLSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF92aWRlb19vcmllbnRhdGlvbl9pbnRlcmZhY2VfaW5pdCAoR3N0VmlkZW9PcmllbnRhdGlvbkludGVyZmFjZSAqIGlmYWNlKSAgICAgICAgICBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBkZWZhdWx0IHZpcnR1YWwgZnVuY3Rpb25zICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmYWNlLT5nZXRfaGZsaXAgICA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fZ2V0X2hmbGlwOyAgICAgICAgICAgICAgICAgICBcCi0gICAgaWZhY2UtPmdldF92ZmxpcCAgID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF92aWRlb19vcmllbnRhdGlvbl9nZXRfdmZsaXA7ICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZmFjZS0+Z2V0X2hjZW50ZXIgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3ZpZGVvX29yaWVudGF0aW9uX2dldF9oY2VudGVyOyAgICAgICAgICAgICAgICAgXAotICAgIGlmYWNlLT5nZXRfdmNlbnRlciA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fZ2V0X3ZjZW50ZXI7ICAgICAgICAgICAgICAgICBcCi0gICAgaWZhY2UtPnNldF9oZmxpcCAgID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF92aWRlb19vcmllbnRhdGlvbl9zZXRfaGZsaXA7ICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZmFjZS0+c2V0X3ZmbGlwICAgPSBpbnRlcmZhY2VfYXNfZnVuY3Rpb24gIyMgX3ZpZGVvX29yaWVudGF0aW9uX3NldF92ZmxpcDsgICAgICAgICAgICAgICAgICAgXAotICAgIGlmYWNlLT5zZXRfaGNlbnRlciA9IGludGVyZmFjZV9hc19mdW5jdGlvbiAjIyBfdmlkZW9fb3JpZW50YXRpb25fc2V0X2hjZW50ZXI7ICAgICAgICAgICAgICAgICBcCi0gICAgaWZhY2UtPnNldF92Y2VudGVyID0gaW50ZXJmYWNlX2FzX2Z1bmN0aW9uICMjIF92aWRlb19vcmllbnRhdGlvbl9zZXRfdmNlbnRlcjsgICAgICAgICAgICAgICAgIFwKLSAgfQotCi1HX0VORF9ERUNMUwotI2VuZGlmIC8qIF9fR1NUX1Y0TDJfVklET1JJRU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvdHVuZXIuYyBiL3N5cy92NGwyL3R1bmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YjNmZTkuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvdHVuZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBACi0vKiBHU3RyZWFtZXIgVHVuZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogdHVuZXIuYzogdHVuZXIgZGVzaWduIHZpcnR1YWwgY2xhc3MgZnVuY3Rpb24gd3JhcHBlcnMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJ0dW5lci5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qKgotICogU0VDVElPTjpnc3R0dW5lcgotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBJbnRlcmZhY2UgZm9yIGVsZW1lbnRzIHByb3ZpZGluZyB0dW5lciBvcGVyYXRpb25zCi0gKiAKLSAqIDxyZWZzZWN0Mj4KLSAqIDxwYXJhPgotICogVGhlIEdzdFR1bmVyIGludGVyZmFjZSBpcyBwcm92aWRlZCBieSBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIGFiaWxpdHkgdG8KLSAqIHR1bmUgaW50byBtdWx0aXBsZSBpbnB1dCBzaWduYWxzLCBmb3IgZXhhbXBsZSBUViBvciByYWRpbyBjYXB0dXJlIGNhcmRzLgotICogPC9wYXJhPjxwYXJhPgotICogVGhlIGludGVycHJldGF0aW9uIG9mICd0dW5pbmcgaW50bycgYW4gaW5wdXQgc3RyZWFtIGRlcGVuZHMgb24gdGhlIGVsZW1lbnQKLSAqIGltcGxlbWVudGluZyB0aGUgaW50ZXJmYWNlLiBGb3IgdjRsc3JjLCBpdCBtaWdodCBpbXBseSBzZWxlY3Rpb24gb2YgYW4KLSAqIGlucHV0IHNvdXJjZSBhbmQvb3IgZnJlcXVlbmN5IHRvIGJlIGNvbmZpZ3VyZWQgb24gYSBUViBjYXJkLiBBbm90aGVyIAotICogR3N0VHVuZXIgaW1wbGVtZW50YXRpb24gbWlnaHQgYmUgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGFuIGFjdGl2ZSBpbnB1dCBwYWQKLSAqIGZyb20gbXVsdGlwbGUgaW5wdXQgcGFkcy4KLSAqIDwvcGFyYT48cGFyYT4KLSAqIFRoYXQgc2FpZCwgdGhlIEdzdFR1bmVyIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGJpYXNlZCB0b3dhcmQgdGhlCi0gKiBUViBjYXB0dXJlIHNjZW5hcmlvLgotICogPC9wYXJhPjxwYXJhPgotICogVGhlIGdlbmVyYWwgcGFyYW1ldGVycyBwcm92aWRlZCBhcmUgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgotICogPGl0ZW1pemVkbGlzdD4KLSAqIDxsaXN0aXRlbT5TZWxlY3Rpb24gb2YgYSBjdXJyZW50ICNHc3RUdW5lckNoYW5uZWwuIFRoZSBjdXJyZW50IGNoYW5uZWwKLSAqIHJlcHJlc2VudHMgdGhlIGlucHV0IHNvdXJjZSAoZS5nLiBDb21wb3NpdGUsIFMtVmlkZW8gZXRjIGZvciBUViBjYXB0dXJlKS4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+VGhlICNHc3RUdW5lck5vcm0gZm9yIHRoZSBjaGFubmVsLiBUaGUgbm9ybSBjaG9vc2VzIHRoZQotICogaW50ZXJwcmV0YXRpb24gb2YgdGhlIGluY29taW5nIHNpZ25hbCBmb3IgdGhlIGN1cnJlbnQgY2hhbm5lbC4gRm9yIGV4YW1wbGUsCi0gKiBQQUwgb3IgTlRTQywgb3IgbW9yZSBzcGVjaWZpYyB2YXJpYW50cyB0aGVyZS1vZi4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8bGlzdGl0ZW0+Q2hhbm5lbCBmcmVxdWVuY3kuIElmIHRoZSBjdXJyZW50IGNoYW5uZWwgaGFzIHRoZSBhYmlsaXR5IHRvIHR1bmUKLSAqIGJldHdlZW4gbXVsdGlwbGUgZnJlcXVlbmNpZXMgKGlmIGl0IGhhcyB0aGUgR1NUX1RVTkVSX0NIQU5ORUxfRlJFUVVFTkNZIGZsYWcpCi0gKiB0aGVuIHRoZSBmcmVxdWVuY3kgY2FuIGJlIGNoYW5nZWQvcmV0cmlldmVkIHZpYSB0aGUKLSAqIGdzdF90dW5lcl9zZXRfZnJlcXVlbmN5KCkgYW5kIGdzdF90dW5lcl9nZXRfZnJlcXVlbmN5KCkgbWV0aG9kcy4KLSAqIDwvbGlzdGl0ZW0+Ci0gKiA8L2l0ZW1pemVkbGlzdD4KLSAqIDwvcGFyYT4KLSAqIDxwYXJhPgotICogV2hlcmUgYXBwbGljYWJsZSwgdGhlIHNpZ25hbCBzdHJlbmd0aCBjYW4gYmUgcmV0cmlldmVkIGFuZC9vciBtb25pdG9yZWQKLSAqIHZpYSBhIHNpZ25hbC4KLSAqIDwvcGFyYT4KLSAqIDwvcmVmc2VjdDI+Ci0gKi8KLQotLyogRklYTUUgMC4xMTogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgQVBJIGZvciBzb21ldGltZXMtc3VwcG9ydGVkbmVzcwotICogKGFrYSBtYWtpbmcgdXAgZm9yIEdzdEltcGxlbWVudHNJbnRlcmZhY2UgcmVtb3ZhbCkgKi8KLQotLyogRklYTUUgMC4xMTogcmVwbGFjZSBzaWduYWxzIHdpdGggbWVzc2FnZXMgKCsgbWFrZSBBUEkgdGhyZWFkLXNhZmUpICovCi0KLWVudW0KLXsKLSAgTk9STV9DSEFOR0VELAotICBDSEFOTkVMX0NIQU5HRUQsCi0gIEZSRVFVRU5DWV9DSEFOR0VELAotICBTSUdOQUxfQ0hBTkdFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCBnc3RfdHVuZXJfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotR19ERUZJTkVfSU5URVJGQUNFIChHc3RUdW5lciwgZ3N0X3R1bmVyLCBHX1RZUEVfSU5WQUxJRCk7Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHVuZXJfZGVmYXVsdF9pbml0IChHc3RUdW5lckludGVyZmFjZSAqIGlmYWNlKQotewotICBzdGF0aWMgZ2Jvb2xlYW4gaW5pdGlhbGl6ZWQgPSBGQUxTRTsKLQotICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgLyoqCi0gICAgICogR3N0VHVuZXI6Om5vcm0tY2hhbmdlZDoKLSAgICAgKiBAdHVuZXI6IFRoZSBlbGVtZW50IHByb3ZpZGluZyB0aGUgR3N0VHVuZXIgaW50ZXJmYWNlCi0gICAgICogQG5vcm06IFRoZSBuZXcgY29uZmlndXJlZCBub3JtLgotICAgICAqCi0gICAgICogUmVwb3J0cyB0aGF0IHRoZSBjdXJyZW50ICNHc3RUdW5lck5vcm0gaGFzIGNoYW5nZWQuCi0gICAgICovCi0gICAgZ3N0X3R1bmVyX3NpZ25hbHNbTk9STV9DSEFOR0VEXSA9Ci0gICAgICAgIGdfc2lnbmFsX25ldyAoIm5vcm0tY2hhbmdlZCIsCi0gICAgICAgIEdTVF9UWVBFX1RVTkVSLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RUdW5lckludGVyZmFjZSwgbm9ybV9jaGFuZ2VkKSwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX1RVTkVSX05PUk0pOwotICAgIC8qKgotICAgICAqIEdzdFR1bmVyOjpjaGFubmVsLWNoYW5nZWQ6Ci0gICAgICogQHR1bmVyOiBUaGUgZWxlbWVudCBwcm92aWRpbmcgdGhlIEdzdFR1bmVyIGludGVyZmFjZQotICAgICAqIEBjaGFubmVsOiBUaGUgbmV3IGNvbmZpZ3VyZWQgY2hhbm5lbC4KLSAgICAgKgotICAgICAqIFJlcG9ydHMgdGhhdCB0aGUgY3VycmVudCAjR3N0VHVuZXJDaGFubmVsIGhhcyBjaGFuZ2VkLgotICAgICAqLwotICAgIGdzdF90dW5lcl9zaWduYWxzW0NIQU5ORUxfQ0hBTkdFRF0gPQotICAgICAgICBnX3NpZ25hbF9uZXcgKCJjaGFubmVsLWNoYW5nZWQiLAotICAgICAgICBHU1RfVFlQRV9UVU5FUiwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0VHVuZXJJbnRlcmZhY2UsIGNoYW5uZWxfY2hhbmdlZCksCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsIEdfVFlQRV9OT05FLCAxLAotICAgICAgICBHU1RfVFlQRV9UVU5FUl9DSEFOTkVMKTsKLSAgICAvKioKLSAgICAgKiBHc3RUdW5lcjo6ZnJlcXVlbmN5LWNoYW5nZWQ6Ci0gICAgICogQHR1bmVyOiBUaGUgZWxlbWVudCBwcm92aWRpbmcgdGhlIEdzdFR1bmVyIGludGVyZmFjZQotICAgICAqIEBmcmVxdWVuY3k6IFRoZSBuZXcgZnJlcXVlbmN5IChhbiB1bnNpZ25lZCBsb25nKQotICAgICAqCi0gICAgICogUmVwb3J0cyB0aGF0IHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBoYXMgY2hhbmdlZC4KLSAgICAgKi8KLSAgICBnc3RfdHVuZXJfc2lnbmFsc1tGUkVRVUVOQ1lfQ0hBTkdFRF0gPQotICAgICAgICBnX3NpZ25hbF9uZXcgKCJmcmVxdWVuY3ktY2hhbmdlZCIsCi0gICAgICAgIEdTVF9UWVBFX1RVTkVSLCBHX1NJR05BTF9SVU5fTEFTVCwKLSAgICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RUdW5lckludGVyZmFjZSwgZnJlcXVlbmN5X2NoYW5nZWQpLAotICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDIsIEdTVF9UWVBFX1RVTkVSX0NIQU5ORUwsCi0gICAgICAgIEdfVFlQRV9VTE9ORyk7Ci0gICAgLyoqCi0gICAgICogR3N0VHVuZXI6OnNpZ25hbC1jaGFuZ2VkOgotICAgICAqIEB0dW5lcjogVGhlIGVsZW1lbnQgcHJvdmlkaW5nIHRoZSBHc3RUdW5lciBpbnRlcmZhY2UKLSAgICAgKiBAY2hhbm5lbDogVGhlIGN1cnJlbnQgI0dzdFR1bmVyQ2hhbm5lbAotICAgICAqIEBzaWduYWw6IFRoZSBuZXcgc2lnbmFsIHN0cmVuZ3RoIChhbiBpbnRlZ2VyKQotICAgICAqCi0gICAgICogUmVwb3J0cyB0aGF0IHRoZSBzaWduYWwgc3RyZW5ndGggaGFzIGNoYW5nZWQuCi0gICAgICoKLSAgICAgKiBTZWUgQWxzbzogZ3N0X3R1bmVyX3NpZ25hbF9zdHJlbmd0aCgpCi0gICAgICovCi0gICAgZ3N0X3R1bmVyX3NpZ25hbHNbU0lHTkFMX0NIQU5HRURdID0KLSAgICAgICAgZ19zaWduYWxfbmV3ICgic2lnbmFsLWNoYW5nZWQiLAotICAgICAgICBHU1RfVFlQRV9UVU5FUiwgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICAgIEdfU1RSVUNUX09GRlNFVCAoR3N0VHVuZXJJbnRlcmZhY2UsIHNpZ25hbF9jaGFuZ2VkKSwKLSAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIEdfVFlQRV9OT05FLCAyLCBHU1RfVFlQRV9UVU5FUl9DSEFOTkVMLAotICAgICAgICBHX1RZUEVfSU5UKTsKLQotICAgIGluaXRpYWxpemVkID0gVFJVRTsKLSAgfQotCi0gIC8qIGRlZmF1bHQgdmlydHVhbCBmdW5jdGlvbnMgKi8KLSAgaWZhY2UtPmxpc3RfY2hhbm5lbHMgPSBOVUxMOwotICBpZmFjZS0+c2V0X2NoYW5uZWwgPSBOVUxMOwotICBpZmFjZS0+Z2V0X2NoYW5uZWwgPSBOVUxMOwotCi0gIGlmYWNlLT5saXN0X25vcm1zID0gTlVMTDsKLSAgaWZhY2UtPnNldF9ub3JtID0gTlVMTDsKLSAgaWZhY2UtPmdldF9ub3JtID0gTlVMTDsKLQotICBpZmFjZS0+c2V0X2ZyZXF1ZW5jeSA9IE5VTEw7Ci0gIGlmYWNlLT5nZXRfZnJlcXVlbmN5ID0gTlVMTDsKLSAgaWZhY2UtPnNpZ25hbF9zdHJlbmd0aCA9IE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX2xpc3RfY2hhbm5lbHM6Ci0gKiBAdHVuZXI6IHRoZSAjR3N0VHVuZXIgKGEgI0dzdEVsZW1lbnQpIHRvIGdldCB0aGUgY2hhbm5lbHMgZnJvbS4KLSAqCi0gKiBSZXRyaWV2ZSBhICNHTGlzdCBvZiAjR3N0VHVuZXJDaGFubmVscyBhdmFpbGFibGUKLSAqIChlLmcuICdjb21wb3NpdGUnLCAncy12aWRlbycsIC4uLikgZnJvbSB0aGUgZ2l2ZW4gdHVuZXIgb2JqZWN0LgotICoKLSAqIFJldHVybnM6IEEgbGlzdCBvZiBjaGFubmVscyBhdmFpbGFibGUgb24gdGhpcyB0dW5lci4gVGhlIGxpc3QgaXMKLSAqICAgICAgICAgIG93bmVkIGJ5IHRoZSBHc3RUdW5lciBhbmQgbXVzdCBub3QgYmUgZnJlZWQuCi0gKi8KLWNvbnN0IEdMaXN0ICoKLWdzdF90dW5lcl9saXN0X2NoYW5uZWxzIChHc3RUdW5lciAqIHR1bmVyKQotewotICBHc3RUdW5lckludGVyZmFjZSAqaWZhY2U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UVU5FUiAodHVuZXIpLCBOVUxMKTsKLQotICBpZmFjZSA9IEdTVF9UVU5FUl9HRVRfSU5URVJGQUNFICh0dW5lcik7Ci0gIGlmIChpZmFjZS0+bGlzdF9jaGFubmVscykgewotICAgIHJldHVybiBpZmFjZS0+bGlzdF9jaGFubmVscyAodHVuZXIpOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX3NldF9jaGFubmVsOgotICogQHR1bmVyOiB0aGUgI0dzdFR1bmVyIChhICNHc3RFbGVtZW50KSB0aGF0IG93bnMgdGhlIGNoYW5uZWwuCi0gKiBAY2hhbm5lbDogdGhlIGNoYW5uZWwgdG8gdHVuZSB0by4KLSAqCi0gKiBUdW5lcyB0aGUgb2JqZWN0IHRvIHRoZSBnaXZlbiBjaGFubmVsLCB3aGljaCBzaG91bGQgYmUgb25lIG9mIHRoZQotICogY2hhbm5lbHMgcmV0dXJuZWQgYnkgZ3N0X3R1bmVyX2xpc3RfY2hhbm5lbHMoKS4KLSAqLwotCi12b2lkCi1nc3RfdHVuZXJfc2V0X2NoYW5uZWwgKEdzdFR1bmVyICogdHVuZXIsIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwpCi17Ci0gIEdzdFR1bmVySW50ZXJmYWNlICppZmFjZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVFVORVIgKHR1bmVyKSk7Ci0KLSAgaWZhY2UgPSBHU1RfVFVORVJfR0VUX0lOVEVSRkFDRSAodHVuZXIpOwotICBpZiAoaWZhY2UtPnNldF9jaGFubmVsKSB7Ci0gICAgaWZhY2UtPnNldF9jaGFubmVsICh0dW5lciwgY2hhbm5lbCk7Ci0gIH0KLX0KLQotLyoqCi0gKiBnc3RfdHVuZXJfZ2V0X2NoYW5uZWw6Ci0gKiBAdHVuZXI6IHRoZSAjR3N0VHVuZXIgKGEgI0dzdEVsZW1lbnQpIHRvIGdldCB0aGUgY3VycmVudCBjaGFubmVsIGZyb20uCi0gKgotICogUmV0cmlldmUgdGhlIGN1cnJlbnQgY2hhbm5lbCBmcm9tIHRoZSB0dW5lci4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgY3VycmVudCBjaGFubmVsIG9mIHRoZSB0dW5lciBvYmplY3QuCi0gKi8KLQotR3N0VHVuZXJDaGFubmVsICoKLWdzdF90dW5lcl9nZXRfY2hhbm5lbCAoR3N0VHVuZXIgKiB0dW5lcikKLXsKLSAgR3N0VHVuZXJJbnRlcmZhY2UgKmlmYWNlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVFVORVIgKHR1bmVyKSwgTlVMTCk7Ci0KLSAgaWZhY2UgPSBHU1RfVFVORVJfR0VUX0lOVEVSRkFDRSAodHVuZXIpOwotICBpZiAoaWZhY2UtPmdldF9jaGFubmVsKSB7Ci0gICAgcmV0dXJuIGlmYWNlLT5nZXRfY2hhbm5lbCAodHVuZXIpOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX2xpc3Rfbm9ybXM6Ci0gKiBAdHVuZXI6IHRoZSAjR3N0VHVuZXIgKCphICNHc3RFbGVtZW50KSB0byBnZXQgdGhlIGxpc3Qgb2Ygbm9ybXMgZnJvbS4KLSAqCi0gKiBSZXRyaWV2ZSBhIEdMaXN0IG9mIGF2YWlsYWJsZSAjR3N0VHVuZXJOb3JtIHNldHRpbmdzIGZvciB0aGUgY3VycmVudGx5Ci0gKiB0dW5lZCBjaGFubmVsIG9uIHRoZSBnaXZlbiB0dW5lciBvYmplY3QuCi0gKgotICogUmV0dXJuczogQSBsaXN0IG9mIG5vcm1zIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBjaGFubmVsIGZvciB0aGlzCi0gKiAgICAgICAgICB0dW5lciBvYmplY3QuIFRoZSBsaXN0IGlzIG93bmVkIGJ5IHRoZSBHc3RUdW5lciBhbmQgbXVzdCBub3QKLSAqICAgICAgICAgIGJlIGZyZWVkLgotICovCi0KLWNvbnN0IEdMaXN0ICoKLWdzdF90dW5lcl9saXN0X25vcm1zIChHc3RUdW5lciAqIHR1bmVyKQotewotICBHc3RUdW5lckludGVyZmFjZSAqaWZhY2U7Ci0KLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19UVU5FUiAodHVuZXIpLCBOVUxMKTsKLQotICBpZmFjZSA9IEdTVF9UVU5FUl9HRVRfSU5URVJGQUNFICh0dW5lcik7Ci0gIGlmIChpZmFjZS0+bGlzdF9ub3JtcykgewotICAgIHJldHVybiBpZmFjZS0+bGlzdF9ub3JtcyAodHVuZXIpOwotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX3NldF9ub3JtOgotICogQHR1bmVyOiB0aGUgI0dzdFR1bmVyIChhICNHc3RFbGVtZW50KSB0byBzZXQgdGhlIG5vcm0gb24uCi0gKiBAbm9ybTogdGhlIG5vcm0gdG8gdXNlIGZvciB0aGUgY3VycmVudCBjaGFubmVsLgotICoKLSAqIENoYW5nZXMgdGhlIHZpZGVvIG5vcm0gb24gdGhpcyB0dW5lciB0byB0aGUgZ2l2ZW4gbm9ybSwgd2hpY2ggc2hvdWxkIGJlCi0gKiBvbmUgb2YgdGhlIG5vcm1zIHJldHVybmVkIGJ5IGdzdF90dW5lcl9saXN0X25vcm1zKCkuCi0gKi8KLQotdm9pZAotZ3N0X3R1bmVyX3NldF9ub3JtIChHc3RUdW5lciAqIHR1bmVyLCBHc3RUdW5lck5vcm0gKiBub3JtKQotewotICBHc3RUdW5lckludGVyZmFjZSAqaWZhY2U7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RVTkVSICh0dW5lcikpOwotCi0gIGlmYWNlID0gR1NUX1RVTkVSX0dFVF9JTlRFUkZBQ0UgKHR1bmVyKTsKLSAgaWYgKGlmYWNlLT5zZXRfbm9ybSkgewotICAgIGlmYWNlLT5zZXRfbm9ybSAodHVuZXIsIG5vcm0pOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX2dldF9ub3JtOgotICogQHR1bmVyOiB0aGUgI0dzdFR1bmVyIChhICNHc3RFbGVtZW50KSB0byBnZXQgdGhlIGN1cnJlbnQgbm9ybSBmcm9tLgotICoKLSAqIEdldCB0aGUgY3VycmVudCB2aWRlbyBub3JtIGZyb20gdGhlIGdpdmVuIHR1bmVyIG9iamVjdCBmb3IgdGhlCi0gKiBjdXJyZW50bHkgc2VsZWN0ZWQgY2hhbm5lbC4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgY3VycmVudCBub3JtLgotICovCi0KLUdzdFR1bmVyTm9ybSAqCi1nc3RfdHVuZXJfZ2V0X25vcm0gKEdzdFR1bmVyICogdHVuZXIpCi17Ci0gIEdzdFR1bmVySW50ZXJmYWNlICppZmFjZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RVTkVSICh0dW5lciksIE5VTEwpOwotCi0gIGlmYWNlID0gR1NUX1RVTkVSX0dFVF9JTlRFUkZBQ0UgKHR1bmVyKTsKLSAgaWYgKGlmYWNlLT5nZXRfbm9ybSkgewotICAgIHJldHVybiBpZmFjZS0+Z2V0X25vcm0gKHR1bmVyKTsKLSAgfQotCi0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF90dW5lcl9zZXRfZnJlcXVlbmN5OgotICogQHR1bmVyOiBUaGUgI0dzdFR1bmVyIChhICNHc3RFbGVtZW50KSB0aGF0IG93bnMgdGhlIGdpdmVuIGNoYW5uZWwuCi0gKiBAY2hhbm5lbDogVGhlICNHc3RUdW5lckNoYW5uZWwgdG8gc2V0IHRoZSBmcmVxdWVuY3kgb24uCi0gKiBAZnJlcXVlbmN5OiBUaGUgZnJlcXVlbmN5IHRvIHR1bmUgaW4gdG8uCi0gKgotICogU2V0cyBhIHR1bmluZyBmcmVxdWVuY3kgb24gdGhlIGdpdmVuIHR1bmVyL2NoYW5uZWwuIE5vdGUgdGhhdCB0aGlzCi0gKiByZXF1aXJlcyB0aGUgZ2l2ZW4gY2hhbm5lbCB0byBiZSBhICJ0dW5pbmciIGNoYW5uZWwsIHdoaWNoIGNhbiBiZQotICogY2hlY2tlZCB1c2luZyBHU1RfVFVORVJfQ0hBTk5FTF9IQVNfRkxBRyAoKSwgd2l0aCB0aGUgcHJvcGVyIGZsYWcKLSAqIGJlaW5nIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWS4KLSAqCi0gKiBUaGUgZnJlcXVlbmN5IGlzIGluIEh6LCB3aXRoIG1pbmltdW0gc3RlcHMgaW5kaWNhdGVkIGJ5IHRoZSAKLSAqIGZyZXF1ZW5jeV9tdWx0aXBsaWNhdG9yIHByb3ZpZGVkIGluIHRoZSAjR3N0VHVuZXJDaGFubmVsLiBUaGUKLSAqIHZhbGlkIHJhbmdlIGlzIHByb3ZpZGVkIGluIHRoZSBtaW5fZnJlcXVlbmN5IGFuZCBtYXhfZnJlcXVlbmN5IHByb3BlcnRpZXMKLSAqIG9mIHRoZSAjR3N0VHVuZXJDaGFubmVsLgotICovCi0KLXZvaWQKLWdzdF90dW5lcl9zZXRfZnJlcXVlbmN5IChHc3RUdW5lciAqIHR1bmVyLAotICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwsIGd1bG9uZyBmcmVxdWVuY3kpCi17Ci0gIEdzdFR1bmVySW50ZXJmYWNlICppZmFjZTsKLQotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVFVORVIgKHR1bmVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UVU5FUl9DSEFOTkVMIChjaGFubmVsKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHIChjaGFubmVsLAotICAgICAgICAgIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSkpOwotCi0gIGlmYWNlID0gR1NUX1RVTkVSX0dFVF9JTlRFUkZBQ0UgKHR1bmVyKTsKLSAgaWYgKGlmYWNlLT5zZXRfZnJlcXVlbmN5KSB7Ci0gICAgaWZhY2UtPnNldF9mcmVxdWVuY3kgKHR1bmVyLCBjaGFubmVsLCBmcmVxdWVuY3kpOwotICB9Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX2dldF9mcmVxdWVuY3k6Ci0gKiBAdHVuZXI6IFRoZSAjR3N0VHVuZXIgKGEgI0dzdEVsZW1lbnQpIHRoYXQgb3ducyB0aGUgZ2l2ZW4gY2hhbm5lbC4KLSAqIEBjaGFubmVsOiBUaGUgI0dzdFR1bmVyQ2hhbm5lbCB0byByZXRyaWV2ZSB0aGUgZnJlcXVlbmN5IGZyb20uCi0gKgotICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZnJlcXVlbmN5IGZyb20gdGhlIGdpdmVuIGNoYW5uZWwuIEFzIGZvcgotICogZ3N0X3R1bmVyX3NldF9mcmVxdWVuY3koKSwgdGhlICNHc3RUdW5lckNoYW5uZWwgbXVzdCBzdXBwb3J0IGZyZXF1ZW5jeQotICogb3BlcmF0aW9ucywgYXMgaW5kaWNhdGVkIGJ5IHRoZSBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kgZmxhZy4KLSAqCi0gKiBSZXR1cm5zOiBUaGUgY3VycmVudCBmcmVxdWVuY3ksIG9yIDAgb24gZXJyb3IuCi0gKi8KLQotZ3Vsb25nCi1nc3RfdHVuZXJfZ2V0X2ZyZXF1ZW5jeSAoR3N0VHVuZXIgKiB0dW5lciwgR3N0VHVuZXJDaGFubmVsICogY2hhbm5lbCkKLXsKLSAgR3N0VHVuZXJJbnRlcmZhY2UgKmlmYWNlOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVFVORVIgKHR1bmVyKSwgMCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVFVORVJfQ0hBTk5FTCAoY2hhbm5lbCksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX1RVTkVSX0NIQU5ORUxfSEFTX0ZMQUcgKGNoYW5uZWwsCi0gICAgICAgICAgR1NUX1RVTkVSX0NIQU5ORUxfRlJFUVVFTkNZKSwgMCk7Ci0KLSAgaWZhY2UgPSBHU1RfVFVORVJfR0VUX0lOVEVSRkFDRSAodHVuZXIpOwotCi0gIGlmIChpZmFjZS0+Z2V0X2ZyZXF1ZW5jeSkgewotICAgIHJldHVybiBpZmFjZS0+Z2V0X2ZyZXF1ZW5jeSAodHVuZXIsIGNoYW5uZWwpOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX3NpZ25hbF9zdHJlbmd0aDoKLSAqIEB0dW5lcjogdGhlICNHc3RUdW5lciAoYSAjR3N0RWxlbWVudCkgdGhhdCBvd25zIHRoZSBnaXZlbiBjaGFubmVsLgotICogQGNoYW5uZWw6IHRoZSAjR3N0VHVuZXJDaGFubmVsIHRvIGdldCB0aGUgc2lnbmFsIHN0cmVuZ3RoIGZyb20uCi0gKgotICogR2V0IHRoZSBzdHJlbmd0aCBvZiB0aGUgc2lnbmFsIG9uIHRoaXMgY2hhbm5lbC4gTm90ZSB0aGF0IHRoaXMKLSAqIHJlcXVpcmVzIHRoZSBjdXJyZW50IGNoYW5uZWwgdG8gYmUgYSAidHVuaW5nIiBjaGFubmVsLCBpLmUuIGEKLSAqIGNoYW5uZWwgb24gd2hpY2ggZnJlcXVlbmN5IGNhbiBiZSBzZXQuIFRoaXMgY2FuIGJlIGNoZWNrZWQgdXNpbmcKLSAqIEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHICgpLCBhbmQgdGhlIGFwcHJvcHJpYXRlIGZsYWcgdG8gY2hlY2sKLSAqIGZvciBpcyBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kuCi0gKgotICogVGhlIHZhbGlkIHJhbmdlIG9mIHRoZSBzaWduYWwgc3RyZW5ndGggaXMgaW5kaWNhdGVkIGluIHRoZSAKLSAqIG1pbl9zaWduYWwgYW5kIG1heF9zaWduYWwgcHJvcGVydGllcyBvZiB0aGUgI0dzdFR1bmVyQ2hhbm5lbC4KLSAqCi0gKiBSZXR1cm5zOiBTaWduYWwgc3RyZW5ndGgsIG9yIDAgb24gZXJyb3IuCi0gKi8KLWdpbnQKLWdzdF90dW5lcl9zaWduYWxfc3RyZW5ndGggKEdzdFR1bmVyICogdHVuZXIsIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwpCi17Ci0gIEdzdFR1bmVySW50ZXJmYWNlICppZmFjZTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RVTkVSICh0dW5lciksIDApOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RVTkVSX0NIQU5ORUwgKGNoYW5uZWwpLCAwKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHIChjaGFubmVsLAotICAgICAgICAgIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSksIDApOwotCi0gIGlmYWNlID0gR1NUX1RVTkVSX0dFVF9JTlRFUkZBQ0UgKHR1bmVyKTsKLSAgaWYgKGlmYWNlLT5zaWduYWxfc3RyZW5ndGgpIHsKLSAgICByZXR1cm4gaWZhY2UtPnNpZ25hbF9zdHJlbmd0aCAodHVuZXIsIGNoYW5uZWwpOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZ3N0X3R1bmVyX2ZpbmRfbm9ybV9ieV9uYW1lOgotICogQHR1bmVyOiBBICNHc3RUdW5lciBpbnN0YW5jZQotICogQG5vcm06IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgYSAjR3N0VHVuZXJOb3JtCi0gKiAKLSAqIExvb2sgdXAgYSAjR3N0VHVuZXJOb3JtIGJ5IG5hbWUuCi0gKgotICogUmV0dXJuczogQSAjR3N0VHVuZXJOb3JtLCBvciBOVUxMIGlmIG5vIG5vcm0gd2l0aCB0aGUgcHJvdmlkZWQgbmFtZQotICogaXMgYXZhaWxhYmxlLgotICovCi1Hc3RUdW5lck5vcm0gKgotZ3N0X3R1bmVyX2ZpbmRfbm9ybV9ieV9uYW1lIChHc3RUdW5lciAqIHR1bmVyLCBnY2hhciAqIG5vcm0pCi17Ci0gIEdMaXN0ICp3YWxrOwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfVFVORVIgKHR1bmVyKSwgTlVMTCk7Ci0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChub3JtICE9IE5VTEwsIE5VTEwpOwotCi0gIHdhbGsgPSAoR0xpc3QgKikgZ3N0X3R1bmVyX2xpc3Rfbm9ybXMgKHR1bmVyKTsKLSAgd2hpbGUgKHdhbGspIHsKLSAgICBpZiAoc3RyY21wIChHU1RfVFVORVJfTk9STSAod2Fsay0+ZGF0YSktPmxhYmVsLCBub3JtKSA9PSAwKQotICAgICAgcmV0dXJuIEdTVF9UVU5FUl9OT1JNICh3YWxrLT5kYXRhKTsKLSAgICB3YWxrID0gZ19saXN0X25leHQgKHdhbGspOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi0vKioKLSAqIGdzdF90dW5lcl9maW5kX2NoYW5uZWxfYnlfbmFtZToKLSAqIEB0dW5lcjogQSAjR3N0VHVuZXIgaW5zdGFuY2UKLSAqIEBjaGFubmVsOiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIGEgI0dzdFR1bmVyQ2hhbm5lbAotICogCi0gKiBMb29rIHVwIGEgI0dzdFR1bmVyQ2hhbm5lbCBieSBuYW1lLgotICoKLSAqIFJldHVybnM6IEEgI0dzdFR1bmVyQ2hhbm5lbCwgb3IgTlVMTCBpZiBubyBjaGFubmVsIHdpdGggdGhlIHByb3ZpZGVkIG5hbWUKLSAqIGlzIGF2YWlsYWJsZS4KLSAqLwotR3N0VHVuZXJDaGFubmVsICoKLWdzdF90dW5lcl9maW5kX2NoYW5uZWxfYnlfbmFtZSAoR3N0VHVuZXIgKiB0dW5lciwgZ2NoYXIgKiBjaGFubmVsKQotewotICBHTGlzdCAqd2FsazsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1RVTkVSICh0dW5lciksIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoY2hhbm5lbCAhPSBOVUxMLCBOVUxMKTsKLQotICB3YWxrID0gKEdMaXN0ICopIGdzdF90dW5lcl9saXN0X2NoYW5uZWxzICh0dW5lcik7Ci0gIHdoaWxlICh3YWxrKSB7Ci0gICAgaWYgKHN0cmNtcCAoR1NUX1RVTkVSX0NIQU5ORUwgKHdhbGstPmRhdGEpLT5sYWJlbCwgY2hhbm5lbCkgPT0gMCkKLSAgICAgIHJldHVybiBHU1RfVFVORVJfQ0hBTk5FTCAod2Fsay0+ZGF0YSk7Ci0gICAgd2FsayA9IGdfbGlzdF9uZXh0ICh3YWxrKTsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotLyoqCi0gKiBnc3RfdHVuZXJfY2hhbm5lbF9jaGFuZ2VkOgotICogQHR1bmVyOiBBICNHc3RUdW5lciBpbnN0YW5jZQotICogQGNoYW5uZWw6IEEgI0dzdFR1bmVyQ2hhbm5lbCBpbnN0YW5jZQotICoKLSAqIENhbGxlZCBieSBlbGVtZW50cyBpbXBsZW1lbnRpbmcgdGhlICNHc3RUdW5lciBpbnRlcmZhY2Ugd2hlbiB0aGUKLSAqIGN1cnJlbnQgY2hhbm5lbCBjaGFuZ2VzLiBGaXJlcyB0aGUgI0dzdFR1bmVyOjpjaGFubmVsLWNoYW5nZWQgc2lnbmFsLgotICovCi12b2lkCi1nc3RfdHVuZXJfY2hhbm5lbF9jaGFuZ2VkIChHc3RUdW5lciAqIHR1bmVyLCBHc3RUdW5lckNoYW5uZWwgKiBjaGFubmVsKQotewotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVFVORVIgKHR1bmVyKSk7Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UVU5FUl9DSEFOTkVMIChjaGFubmVsKSk7Ci0KLSAgZ19zaWduYWxfZW1pdCAoR19PQkpFQ1QgKHR1bmVyKSwKLSAgICAgIGdzdF90dW5lcl9zaWduYWxzW0NIQU5ORUxfQ0hBTkdFRF0sIDAsIGNoYW5uZWwpOwotfQotCi0vKioKLSAqIGdzdF90dW5lcl9ub3JtX2NoYW5nZWQ6Ci0gKiBAdHVuZXI6IEEgI0dzdFR1bmVyIGluc3RhbmNlCi0gKiBAbm9ybTogQSAjR3N0VHVuZXJOb3JtIGluc3RhbmNlCi0gKgotICogQ2FsbGVkIGJ5IGVsZW1lbnRzIGltcGxlbWVudGluZyB0aGUgI0dzdFR1bmVyIGludGVyZmFjZSB3aGVuIHRoZQotICogY3VycmVudCBub3JtIGNoYW5nZXMuIEZpcmVzIHRoZSAjR3N0VHVuZXI6Om5vcm0tY2hhbmdlZCBzaWduYWwuCi0gKiAKLSAqLwotdm9pZAotZ3N0X3R1bmVyX25vcm1fY2hhbmdlZCAoR3N0VHVuZXIgKiB0dW5lciwgR3N0VHVuZXJOb3JtICogbm9ybSkKLXsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RVTkVSICh0dW5lcikpOwotICBnX3JldHVybl9pZl9mYWlsIChHU1RfSVNfVFVORVJfTk9STSAobm9ybSkpOwotCi0gIGdfc2lnbmFsX2VtaXQgKEdfT0JKRUNUICh0dW5lciksIGdzdF90dW5lcl9zaWduYWxzW05PUk1fQ0hBTkdFRF0sIDAsIG5vcm0pOwotfQotCi0vKioKLSAqIGdzdF90dW5lcl9mcmVxdWVuY3lfY2hhbmdlZDoKLSAqIEB0dW5lcjogQSAjR3N0VHVuZXIgaW5zdGFuY2UKLSAqIEBjaGFubmVsOiBUaGUgY3VycmVudCAjR3N0VHVuZXJDaGFubmVsCi0gKiBAZnJlcXVlbmN5OiBUaGUgbmV3IGZyZXF1ZW5jeSBzZXR0aW5nCi0gKgotICogQ2FsbGVkIGJ5IGVsZW1lbnRzIGltcGxlbWVudGluZyB0aGUgI0dzdFR1bmVyIGludGVyZmFjZSB3aGVuIHRoZQotICogY29uZmlndXJlZCBmcmVxdWVuY3kgY2hhbmdlcy4gRmlyZXMgdGhlICNHc3RUdW5lcjo6ZnJlcXVlbmN5LWNoYW5nZWQKLSAqIHNpZ25hbCBvbiB0aGUgdHVuZXIsIGFuZCB0aGUgI0dzdFR1bmVyQ2hhbm5lbDo6ZnJlcXVlbmN5LWNoYW5nZWQgc2lnbmFsCi0gKiBvbiB0aGUgY2hhbm5lbC4KLSAqLwotdm9pZAotZ3N0X3R1bmVyX2ZyZXF1ZW5jeV9jaGFuZ2VkIChHc3RUdW5lciAqIHR1bmVyLAotICAgIEdzdFR1bmVyQ2hhbm5lbCAqIGNoYW5uZWwsIGd1bG9uZyBmcmVxdWVuY3kpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UVU5FUiAodHVuZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RVTkVSX0NIQU5ORUwgKGNoYW5uZWwpKTsKLQotICBnX3NpZ25hbF9lbWl0IChHX09CSkVDVCAodHVuZXIpLAotICAgICAgZ3N0X3R1bmVyX3NpZ25hbHNbRlJFUVVFTkNZX0NIQU5HRURdLCAwLCBjaGFubmVsLCBmcmVxdWVuY3kpOwotCi0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoR19PQkpFQ1QgKGNoYW5uZWwpLCAiZnJlcXVlbmN5X2NoYW5nZWQiLCBmcmVxdWVuY3kpOwotfQotCi0vKioKLSAqIGdzdF90dW5lcl9zaWduYWxfY2hhbmdlZDoKLSAqIEB0dW5lcjogQSAjR3N0VHVuZXIgaW5zdGFuY2UKLSAqIEBjaGFubmVsOiBUaGUgY3VycmVudCAjR3N0VHVuZXJDaGFubmVsCi0gKiBAc2lnbmFsOiBUaGUgbmV3IHNpZ25hbCBzdHJlbmd0aAotICoKLSAqIENhbGxlZCBieSBlbGVtZW50cyBpbXBsZW1lbnRpbmcgdGhlICNHc3RUdW5lciBpbnRlcmZhY2Ugd2hlbiB0aGUKLSAqIGluY29taW5nIHNpZ25hbCBzdHJlbmd0aCBjaGFuZ2VzLiBGaXJlcyB0aGUgI0dzdFR1bmVyOjpzaWduYWwtY2hhbmdlZAotICogc2lnbmFsIG9uIHRoZSB0dW5lciBhbmQgdGhlICNHc3RUdW5lckNoYW5uZWw6OnNpZ25hbC1jaGFuZ2VkIHNpZ25hbCBvbiAKLSAqIHRoZSBjaGFubmVsLgotICovCi12b2lkCi1nc3RfdHVuZXJfc2lnbmFsX2NoYW5nZWQgKEdzdFR1bmVyICogdHVuZXIsCi0gICAgR3N0VHVuZXJDaGFubmVsICogY2hhbm5lbCwgZ2ludCBzaWduYWwpCi17Ci0gIGdfcmV0dXJuX2lmX2ZhaWwgKEdTVF9JU19UVU5FUiAodHVuZXIpKTsKLSAgZ19yZXR1cm5faWZfZmFpbCAoR1NUX0lTX1RVTkVSX0NIQU5ORUwgKGNoYW5uZWwpKTsKLQotICBnX3NpZ25hbF9lbWl0IChHX09CSkVDVCAodHVuZXIpLAotICAgICAgZ3N0X3R1bmVyX3NpZ25hbHNbU0lHTkFMX0NIQU5HRURdLCAwLCBjaGFubmVsLCBzaWduYWwpOwotCi0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAoR19PQkpFQ1QgKGNoYW5uZWwpLCAic2lnbmFsX2NoYW5nZWQiLCBzaWduYWwpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvdHVuZXIuaCBiL3N5cy92NGwyL3R1bmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTdlNGIuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvdHVuZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKiBHU3RyZWFtZXIgVHVuZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogdHVuZXIuaDogdHVuZXIgaW50ZXJmYWNlIGRlc2lnbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfVFVORVJfSF9fCi0jZGVmaW5lIF9fR1NUX1RVTkVSX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jaW5jbHVkZSAidHVuZXJub3JtLmgiCi0jaW5jbHVkZSAidHVuZXJjaGFubmVsLmgiCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9UVU5FUiBcCi0gIChnc3RfdHVuZXJfZ2V0X3R5cGUgKCkpCi0jZGVmaW5lIEdTVF9UVU5FUihvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVFVORVIsIEdzdFR1bmVyKSkKLSNkZWZpbmUgR1NUX0lTX1RVTkVSKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9UVU5FUikpCi0jZGVmaW5lIEdTVF9UVU5FUl9HRVRfSU5URVJGQUNFKGluc3QpIFwKLSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfSU5URVJGQUNFICgoaW5zdCksIEdTVF9UWVBFX1RVTkVSLCBHc3RUdW5lckludGVyZmFjZSkpCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RUdW5lciBHc3RUdW5lcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RUdW5lckludGVyZmFjZSBHc3RUdW5lckludGVyZmFjZTsKLQotLyoqCi0gKiBHc3RUdW5lckludGVyZmFjZToKLSAqIEBpZmFjZTogdGhlIHBhcmVudCBpbnRlcmZhY2UKLSAqIEBsaXN0X2NoYW5uZWxzOiBsaXN0IGF2YWlsYWJsZSBjaGFubmVscwotICogQHNldF9jaGFubmVsOiBzZXQgdG8gYSBjaGFubmVsCi0gKiBAZ2V0X2NoYW5uZWw6IHJldHVybiB0aGUgY3VycmVudCBjaGFubmVsCi0gKiBAbGlzdF9ub3JtczogbGlzdCBhdmFpbGFibGUgbm9ybXMKLSAqIEBzZXRfbm9ybTogc2V0IGEgbm9ybQotICogQGdldF9ub3JtOiByZXR1cm4gdGhlIGN1cnJlbnQgbm9ybQotICogQHNldF9mcmVxdWVuY3k6IHNldCB0aGUgZnJlcXVlbmN5Ci0gKiBAZ2V0X2ZyZXF1ZW5jeTogcmV0dXJuIHRoZSBjdXJyZW50IGZyZXF1ZW5jeQotICogQHNpZ25hbF9zdHJlbmd0aDogZ2V0IHRoZSBzaWduYWwgc3RyZW5ndGgKLSAqIEBjaGFubmVsX2NoYW5nZWQ6IGRlZmF1bHQgaGFuZGxlciBmb3IgY2hhbm5lbCBjaGFuZ2VkIG5vdGlmaWNhdGlvbgotICogQG5vcm1fY2hhbmdlZDogZGVmYXVsdCBoYW5kbGVyIGZvciBub3JtIGNoYW5nZWQgbm90aWZpY2F0aW9uCi0gKiBAZnJlcXVlbmN5X2NoYW5nZWQ6IGRlZmF1bHQgaGFuZGxlciBmb3IgZnJlcXVlbmN5IGNoYW5nZWQgbm90aWZpY2F0aW9uCi0gKiBAc2lnbmFsX2NoYW5nZWQ6IGRlZmF1bHQgaGFuZGxlciBmb3Igc2lnbmFsLXN0cmVuZ3RoIGNoYW5nZWQgbm90aWZpY2F0aW9uCi0gKgotICogVHVuZXIgaW50ZXJmYWNlLgotICovCi1zdHJ1Y3QgX0dzdFR1bmVySW50ZXJmYWNlIHsKLSAgR1R5cGVJbnRlcmZhY2UgaWZhY2U7Ci0KLSAgLyogdmlydHVhbCBmdW5jdGlvbnMgKi8KLSAgY29uc3QgR0xpc3QgKiAoKiBsaXN0X2NoYW5uZWxzKSAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyKTsKLSAgdm9pZCAgICAgICAgICAoKiBzZXRfY2hhbm5lbCkgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCk7Ci0gIEdzdFR1bmVyQ2hhbm5lbCAqCi0gICAgICAgICAgICAgICAgKCogZ2V0X2NoYW5uZWwpICAgICAoR3N0VHVuZXIgICAgICAgICp0dW5lcik7Ci0KLSAgY29uc3QgR0xpc3QgKiAoKiBsaXN0X25vcm1zKSAgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyKTsKLSAgdm9pZCAgICAgICAgICAoKiBzZXRfbm9ybSkgICAgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyTm9ybSAgICAqbm9ybSk7Ci0gIEdzdFR1bmVyTm9ybSAqKCogZ2V0X25vcm0pICAgICAgICAoR3N0VHVuZXIgICAgICAgICp0dW5lcik7Ci0KLSAgdm9pZCAgICAgICAgICAoKiBzZXRfZnJlcXVlbmN5KSAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgICAgIGZyZXF1ZW5jeSk7Ci0gIGd1bG9uZyAgICAgICAgKCogZ2V0X2ZyZXF1ZW5jeSkgICAoR3N0VHVuZXIgICAgICAgICp0dW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwpOwotICBnaW50ICAgICAgICAgICgqIHNpZ25hbF9zdHJlbmd0aCkgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsKTsKLQotICAvKiBzaWduYWxzICovCi0gIHZvaWQgKCpjaGFubmVsX2NoYW5nZWQpICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCk7Ci0gIHZvaWQgKCpub3JtX2NoYW5nZWQpICAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyTm9ybSAgICAqbm9ybSk7Ci0gIHZvaWQgKCpmcmVxdWVuY3lfY2hhbmdlZCkgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICAgICBmcmVxdWVuY3kpOwotICB2b2lkICgqc2lnbmFsX2NoYW5nZWQpICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgc2lnbmFsKTsKLX07Ci0KLUdUeXBlICAgICAgICAgICBnc3RfdHVuZXJfZ2V0X3R5cGUgICAgICAgICAgICAgICh2b2lkKTsKLQotLyogdmlydHVhbCBjbGFzcyBmdW5jdGlvbiB3cmFwcGVycyAqLwotY29uc3QgR0xpc3QgKiAgIGdzdF90dW5lcl9saXN0X2NoYW5uZWxzICAgICAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIpOwotdm9pZCAgICAgICAgICAgIGdzdF90dW5lcl9zZXRfY2hhbm5lbCAgICAgICAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsKTsKLUdzdFR1bmVyQ2hhbm5lbCAqCi0gICAgICAgICAgICAgICAgZ3N0X3R1bmVyX2dldF9jaGFubmVsICAgICAgICAgICAoR3N0VHVuZXIgICAgICAgICp0dW5lcik7Ci0KLWNvbnN0IEdMaXN0ICogICBnc3RfdHVuZXJfbGlzdF9ub3JtcyAgICAgICAgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyKTsKLXZvaWQgICAgICAgICAgICBnc3RfdHVuZXJfc2V0X25vcm0gICAgICAgICAgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyTm9ybSAgICAqbm9ybSk7Ci1Hc3RUdW5lck5vcm0gKiAgZ3N0X3R1bmVyX2dldF9ub3JtICAgICAgICAgICAgICAoR3N0VHVuZXIgICAgICAgICp0dW5lcik7Ci0KLXZvaWQgICAgICAgICAgICBnc3RfdHVuZXJfc2V0X2ZyZXF1ZW5jeSAgICAgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgICAgICAgICAgIGZyZXF1ZW5jeSk7Ci1ndWxvbmcgICAgICAgICAgZ3N0X3R1bmVyX2dldF9mcmVxdWVuY3kgICAgICAgICAoR3N0VHVuZXIgICAgICAgICp0dW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwpOwotZ2ludCAgICAgICAgICAgIGdzdF90dW5lcl9zaWduYWxfc3RyZW5ndGggICAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsKTsKLQotLyogaGVscGVyIGZ1bmN0aW9ucyAqLwotR3N0VHVuZXJOb3JtICogIGdzdF90dW5lcl9maW5kX25vcm1fYnlfbmFtZSAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgICAgICAgICAgICpub3JtKTsKLUdzdFR1bmVyQ2hhbm5lbCAqZ3N0X3R1bmVyX2ZpbmRfY2hhbm5lbF9ieV9uYW1lIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICAgICAgICAgICAqY2hhbm5lbCk7Ci0KLS8qIHRyaWdnZXIgc2lnbmFscyAqLwotdm9pZCAgICAgICAgICAgIGdzdF90dW5lcl9jaGFubmVsX2NoYW5nZWQgICAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsKTsKLXZvaWQgICAgICAgICAgICBnc3RfdHVuZXJfbm9ybV9jaGFuZ2VkICAgICAgICAgIChHc3RUdW5lciAgICAgICAgKnR1bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdzdFR1bmVyTm9ybSAgICAqbm9ybSk7Ci12b2lkICAgICAgICAgICAgZ3N0X3R1bmVyX2ZyZXF1ZW5jeV9jaGFuZ2VkICAgICAoR3N0VHVuZXIgICAgICAgICp0dW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICAgICBmcmVxdWVuY3kpOwotdm9pZCAgICAgICAgICAgIGdzdF90dW5lcl9zaWduYWxfY2hhbmdlZCAgICAgICAgKEdzdFR1bmVyICAgICAgICAqdHVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgc2lnbmFsKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RVTkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvdHVuZXJjaGFubmVsLmMgYi9zeXMvdjRsMi90dW5lcmNoYW5uZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU0NTY5Ni4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi90dW5lcmNoYW5uZWwuYworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKiBHU3RyZWFtZXIgVHVuZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKgotICogdHVuZXJjaGFubmVsLmM6IHR1bmVyIGNoYW5uZWwgb2JqZWN0IGRlc2lnbgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgInR1bmVyY2hhbm5lbC5oIgotCi0vKioKLSAqIFNFQ1RJT046Z3N0dHVuZXJjaGFubmVsCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgY2hhbm5lbCBmcm9tIGFuIGVsZW1lbnQgaW1wbGVtZW50aW5nIHRoZSAjR3N0VHVuZXIKLSAqIGludGVyZmFjZS4KLSAqCi0gKiA8cmVmc2VjdDI+Ci0gKiA8cGFyYT5UaGUgI0dzdFR1bmVyQ2hhbm5lbCBvYmplY3QgaXMgcHJvdmlkZWQgYnkgYW4gZWxlbWVudCBpbXBsZW1lbnRpbmcKLSAqIHRoZSAjR3N0VHVuZXIgaW50ZXJmYWNlLgotICogPC9wYXJhPgotICogPHBhcmE+Ci0gKiBHc3RUdW5lckNoYW5uZWwgcHJvdmlkZXMgYSBuYW1lIGFuZCBmbGFncyB0byBkZXRlcm1pbmUgdGhlIHR5cGUgYW5kCi0gKiBjYXBhYmlsaXRpZXMgb2YgdGhlIGNoYW5uZWwuIElmIHRoZSBHU1RfVFVORVJfQ0hBTk5FTF9GUkVRVUVOQ1kgZmxhZyBpcwotICogc2V0LCB0aGVuIHRoZSBjaGFubmVsIGFsc28gaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0KLSAqIGZyZXF1ZW5jeSwgYW5kIHJhbmdlIG9mIHRoZSByZXBvcnRlZCBzaWduYWwgc3RyZW5ndGguCi0gKiA8L3BhcmE+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBTSUdOQUxfRlJFUVVFTkNZX0NIQU5HRUQsCi0gIFNJR05BTF9TSUdOQUxfQ0hBTkdFRCwKLSAgTEFTVF9TSUdOQUwKLX07Ci0KLUdfREVGSU5FX1RZUEUgKEdzdFR1bmVyQ2hhbm5lbCwgZ3N0X3R1bmVyX2NoYW5uZWwsIEdfVFlQRV9PQkpFQ1QpOwotCi1zdGF0aWMgdm9pZCBnc3RfdHVuZXJfY2hhbm5lbF9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKLQotc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHVuZXJfY2hhbm5lbF9jbGFzc19pbml0IChHc3RUdW5lckNoYW5uZWxDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKm9iamVjdF9rbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0KLSAgLyoqCi0gICAqIEdzdFR1bmVyQ2hhbm5lbDo6ZnJlcXVlbmN5LWNoYW5nZWQ6Ci0gICAqIEB0dW5lcmNoYW5uZWw6IFRoZSAjR3N0VHVuZXJDaGFubmVsCi0gICAqIEBmcmVxdWVuY3k6IFRoZSBuZXcgZnJlcXVlbmN5IChhbiB1bnNpZ25lZCBsb25nKQotICAgKgotICAgKiBSZXBvcnRzIHRoYXQgdGhlIGN1cnJlbnQgZnJlcXVlbmN5IGhhcyBjaGFuZ2VkLgotICAgKi8KLSAgc2lnbmFsc1tTSUdOQUxfRlJFUVVFTkNZX0NIQU5HRURdID0KLSAgICAgIGdfc2lnbmFsX25ldyAoImZyZXF1ZW5jeS1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1MgKGtsYXNzKSwKLSAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgR19TVFJVQ1RfT0ZGU0VUIChHc3RUdW5lckNoYW5uZWxDbGFzcywKLSAgICAgICAgICBmcmVxdWVuY3lfY2hhbmdlZCksCi0gICAgICBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUxPTkcsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUxPTkcpOwotICAvKioKLSAgICogR3N0VHVuZXJDaGFubmVsOjpzaWduYWwtY2hhbmdlZDoKLSAgICogQHR1bmVyY2hhbm5lbDogVGhlICNHc3RUdW5lckNoYW5uZWwKLSAgICogQHNpZ25hbDogVGhlIG5ldyBzaWduYWwgc3RyZW5ndGggKGFuIGludGVnZXIpCi0gICAqCi0gICAqIFJlcG9ydHMgdGhhdCB0aGUgc2lnbmFsIHN0cmVuZ3RoIGhhcyBjaGFuZ2VkLgotICAgKgotICAgKiBTZWUgQWxzbzogZ3N0X3R1bmVyX3NpZ25hbF9zdHJlbmd0aCgpCi0gICAqLwotICBzaWduYWxzW1NJR05BTF9TSUdOQUxfQ0hBTkdFRF0gPQotICAgICAgZ19zaWduYWxfbmV3ICgic2lnbmFsLWNoYW5nZWQiLCBHX1RZUEVfRlJPTV9DTEFTUyAoa2xhc3MpLAotICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCi0gICAgICBHX1NUUlVDVF9PRkZTRVQgKEdzdFR1bmVyQ2hhbm5lbENsYXNzLAotICAgICAgICAgIHNpZ25hbF9jaGFuZ2VkKSwKLSAgICAgIE5VTEwsIE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19JTlQsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfSU5UKTsKLQotICBvYmplY3Rfa2xhc3MtPmRpc3Bvc2UgPSBnc3RfdHVuZXJfY2hhbm5lbF9kaXNwb3NlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3R1bmVyX2NoYW5uZWxfaW5pdCAoR3N0VHVuZXJDaGFubmVsICogY2hhbm5lbCkKLXsKLSAgY2hhbm5lbC0+bGFiZWwgPSBOVUxMOwotICBjaGFubmVsLT5mbGFncyA9IDA7Ci0gIGNoYW5uZWwtPm1pbl9mcmVxdWVuY3kgPSBjaGFubmVsLT5tYXhfZnJlcXVlbmN5ID0gMDsKLSAgY2hhbm5lbC0+bWluX3NpZ25hbCA9IGNoYW5uZWwtPm1heF9zaWduYWwgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3R1bmVyX2NoYW5uZWxfZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsID0gR1NUX1RVTkVSX0NIQU5ORUwgKG9iamVjdCk7Ci0KLSAgaWYgKGNoYW5uZWwtPmxhYmVsKSB7Ci0gICAgZ19mcmVlIChjaGFubmVsLT5sYWJlbCk7Ci0gICAgY2hhbm5lbC0+bGFiZWwgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF90dW5lcl9jaGFubmVsX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9zeXMvdjRsMi90dW5lcmNoYW5uZWwuaCBiL3N5cy92NGwyL3R1bmVyY2hhbm5lbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgwYzczLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL3R1bmVyY2hhbm5lbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qIEdTdHJlYW1lciBUdW5lcgotICogQ29weXJpZ2h0IChDKSAyMDAzIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqCi0gKiB0dW5lcmNoYW5uZWwuaDogdHVuZXIgY2hhbm5lbCBvYmplY3QgZGVzaWduCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9UVU5FUl9DSEFOTkVMX0hfXwotI2RlZmluZSBfX0dTVF9UVU5FUl9DSEFOTkVMX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfVFVORVJfQ0hBTk5FTCBcCi0gIChnc3RfdHVuZXJfY2hhbm5lbF9nZXRfdHlwZSAoKSkKLSNkZWZpbmUgR1NUX1RVTkVSX0NIQU5ORUwob2JqKSBcCi0gIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIEdTVF9UWVBFX1RVTkVSX0NIQU5ORUwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWwpKQotI2RlZmluZSBHU1RfVFVORVJfQ0hBTk5FTF9DTEFTUyhrbGFzcykgXAotICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIEdTVF9UWVBFX1RVTkVSX0NIQU5ORUwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHc3RUdW5lckNoYW5uZWxDbGFzcykpCi0jZGVmaW5lIEdTVF9JU19UVU5FUl9DSEFOTkVMKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9UVU5FUl9DSEFOTkVMKSkKLSNkZWZpbmUgR1NUX0lTX1RVTkVSX0NIQU5ORUxfQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9UVU5FUl9DSEFOTkVMKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFR1bmVyQ2hhbm5lbCBHc3RUdW5lckNoYW5uZWw7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VHVuZXJDaGFubmVsQ2xhc3MgR3N0VHVuZXJDaGFubmVsQ2xhc3M7Ci0KLS8qKgotICogR3N0VHVuZXJDaGFubmVsRmxhZ3M6Ci0gKiBAR1NUX1RVTkVSX0NIQU5ORUxfSU5QVVQ6IFRoZSBjaGFubmVsIGlzIGZvciBpbnB1dAotICogQEdTVF9UVU5FUl9DSEFOTkVMX09VVFBVVDogVGhlIGNoYW5uZWwgaXMgZm9yIG91dHB1dAotICogQEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWTogVGhlIGNoYW5uZWwgaGFzIGEgZnJlcXVlbmN5IHNldHRpbmcKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzaWduYWwgc3RyZW5ndGguCi0gKiBAR1NUX1RVTkVSX0NIQU5ORUxfQVVESU86IFRoZSBjaGFubmVsIGNhcnJpZXMgYXVkaW8uCi0gKgotICogQW4gZW51bWVyYXRpb24gZm9yIGZsYWdzIGluZGljYXRpbmcgdGhlIGF2YWlsYWJsZSBjYXBhYmlsaXRpZXMKLSAqIG9mIGEgI0dzdFR1bmVyQ2hhbm5lbC4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLSAgR1NUX1RVTkVSX0NIQU5ORUxfSU5QVVQgICAgID0gKDE8PDApLAotICBHU1RfVFVORVJfQ0hBTk5FTF9PVVRQVVQgICAgPSAoMTw8MSksCi0gIEdTVF9UVU5FUl9DSEFOTkVMX0ZSRVFVRU5DWSA9ICgxPDwyKSwKLSAgR1NUX1RVTkVSX0NIQU5ORUxfQVVESU8gICAgID0gKDE8PDMpCi19IEdzdFR1bmVyQ2hhbm5lbEZsYWdzOwotCi0vKioKLSAqIEdTVF9UVU5FUl9DSEFOTkVMX0hBU19GTEFHOgotICogQGNoYW5uZWw6IEEgI0dzdFR1bmVyQ2hhbm5lbAotICogQGZsYWc6IFRoZSBmbGFnIHRvIGNoZWNrIGZvcgotICoKLSAqIE1hY3JvIHRvIGNoZWNrIGlmIHRoZSBnaXZlbiBmbGFnIGlzIHNldCBvbiBhIGNoYW5uZWwKLSAqLwotI2RlZmluZSBHU1RfVFVORVJfQ0hBTk5FTF9IQVNfRkxBRyhjaGFubmVsLCBmbGFnKSBcCi0gICgoY2hhbm5lbCktPmZsYWdzICYgZmxhZykKLQotLyoqCi0gKiBHc3RUdW5lckNoYW5uZWw6Ci0gKiBAbGFiZWw6IEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGlzIGNoYW5uZWwKLSAqIEBmbGFnczogQSBzZXQgb2YgI0dzdFR1bmVyQ2hhbm5lbEZsYWdzIGZvciB0aGlzIGNoYW5uZWwKLSAqIEBmcmVxX211bHRpcGxpY2F0b3I6IFRoZSBzdGVwIHNpemUgKGluIEh6KSBmb3IgdGhlIGZyZXF1ZW5jeSBzZXR0aW5nLgotICogQG1pbl9mcmVxdWVuY3k6IE1pbmltdW0gdmFsaWQgZnJlcXVlbmN5IHNldHRpbmcgKGluIEh6KS4KLSAqIEBtYXhfZnJlcXVlbmN5OiBNYXhpbXVtIHZhbGlkIGZyZXF1ZW5jeSBzZXR0aW5nIChpbiBIeikuCi0gKiBAbWluX3NpZ25hbDogTWluaW11bSByZXBvcnRlZCBzaWduYWwgc3RyZW5ndGggdmFsdWUuCi0gKiBAbWF4X3NpZ25hbDogTWF4aW11bSByZXBvcnRlZCBzaWduYWwgc3RyZW5ndGggdmFsdWUuCi0gKi8KLXN0cnVjdCBfR3N0VHVuZXJDaGFubmVsIHsKLSAgR09iamVjdCAgICAgICAgICAgICAgcGFyZW50OwotCi0gIC8qPCBwdWJsaWMgPiovCi0gIGdjaGFyICAgICAgICAgICAgICAgKmxhYmVsOwotICBHc3RUdW5lckNoYW5uZWxGbGFncyBmbGFnczsKLSAgZ2Zsb2F0ICAgICAgICAgICAgICAgZnJlcV9tdWx0aXBsaWNhdG9yOwotICBndWxvbmcgICAgICAgICAgICAgICBtaW5fZnJlcXVlbmN5OwotICBndWxvbmcgICAgICAgICAgICAgICBtYXhfZnJlcXVlbmN5OwotICBnaW50ICAgICAgICAgICAgICAgICBtaW5fc2lnbmFsOwotICBnaW50ICAgICAgICAgICAgICAgICBtYXhfc2lnbmFsOwotCi0gIC8qPCBwcml2YXRlID4qLwotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLXN0cnVjdCBfR3N0VHVuZXJDaGFubmVsQ2xhc3MgewotICBHT2JqZWN0Q2xhc3MgcGFyZW50OwotCi0gIC8qPCBwcml2YXRlID4qLwotICAvKiBzaWduYWxzICovCi0gIHZvaWQgKCpmcmVxdWVuY3lfY2hhbmdlZCkgKEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nICAgICAgICAgICBmcmVxdWVuY3kpOwotICB2b2lkICgqc2lnbmFsX2NoYW5nZWQpICAgIChHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgc2lnbmFsKTsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICAgICAgICBnc3RfdHVuZXJfY2hhbm5lbF9nZXRfdHlwZSAgICAgICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RVTkVSX0NIQU5ORUxfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi90dW5lcm5vcm0uYyBiL3N5cy92NGwyL3R1bmVybm9ybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzU3ZmZiLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL3R1bmVybm9ybS5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogR1N0cmVhbWVyIFR1bmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIHR1bmVybm9ybS5jOiB0dW5lciBub3JtIG9iamVjdCBkZXNpZ24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJ0dW5lcm5vcm0uaCIKLQotLyoqCi0gKiBTRUNUSU9OOmdzdHR1bmVybm9ybQotICogQHNob3J0X2Rlc2NyaXB0aW9uOiBFbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgZm9ybWF0KHMpCi0gKiBmb3IgYSAjR3N0VHVuZXJDaGFubmVsLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDxwYXJhPlRoZSAjR3N0VHVuZXJOb3JtIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGFuIGVsZW1lbnQgaW1wbGVtZW50aW5nIHRoZQotICogI0dzdFR1bmVyIGludGVyZmFjZSBhbmQgZW5jYXBzdWxhdGVzIHRoZSBzZWxlY3Rpb24gb2YgYSBjYXB0dXJlL291dHB1dCBmb3JtYXQKLSAqIGZvciBhIHNlbGVjdGVkICNHc3RUdW5lckNoYW5uZWwuCi0gKiA8L3BhcmE+Ci0gKiA8L3JlZnNlY3QyPgotICovCi0KLWVudW0KLXsKLSAgLyogRklMTCBNRSAqLwotICBMQVNUX1NJR05BTAotfTsKLQotR19ERUZJTkVfVFlQRSAoR3N0VHVuZXJOb3JtLCBnc3RfdHVuZXJfbm9ybSwgR19UWVBFX09CSkVDVCk7Ci0KLXN0YXRpYyB2b2lkIGdzdF90dW5lcl9ub3JtX2Rpc3Bvc2UgKEdPYmplY3QgKiBvYmplY3QpOwotCi0KLS8qc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07Ki8KLQotc3RhdGljIHZvaWQKLWdzdF90dW5lcl9ub3JtX2NsYXNzX2luaXQgKEdzdFR1bmVyTm9ybUNsYXNzICoga2xhc3MpCi17Ci0gIEdPYmplY3RDbGFzcyAqb2JqZWN0X2tsYXNzID0gKEdPYmplY3RDbGFzcyAqKSBrbGFzczsKLQotCi0gIG9iamVjdF9rbGFzcy0+ZGlzcG9zZSA9IGdzdF90dW5lcl9ub3JtX2Rpc3Bvc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfdHVuZXJfbm9ybV9pbml0IChHc3RUdW5lck5vcm0gKiBub3JtKQotewotICBub3JtLT5sYWJlbCA9IE5VTEw7Ci0gIGdfdmFsdWVfaW5pdCAoJm5vcm0tPmZyYW1lcmF0ZSwgR1NUX1RZUEVfRlJBQ1RJT04pOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3R1bmVyX25vcm1fZGlzcG9zZSAoR09iamVjdCAqIG9iamVjdCkKLXsKLSAgR3N0VHVuZXJOb3JtICpub3JtID0gR1NUX1RVTkVSX05PUk0gKG9iamVjdCk7Ci0KLSAgaWYgKG5vcm0tPmxhYmVsKSB7Ci0gICAgZ19mcmVlIChub3JtLT5sYWJlbCk7Ci0gICAgbm9ybS0+bGFiZWwgPSBOVUxMOwotICB9Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKGdzdF90dW5lcl9ub3JtX3BhcmVudF9jbGFzcyktPmRpc3Bvc2UgKG9iamVjdCk7Ci19CmRpZmYgLS1naXQgYS9zeXMvdjRsMi90dW5lcm5vcm0uaCBiL3N5cy92NGwyL3R1bmVybm9ybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGRhMjJjLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL3R1bmVybm9ybS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyogR1N0cmVhbWVyIFR1bmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICoKLSAqIHR1bmVybm9ybS5oOiB0dW5lciBub3JtIG9iamVjdCBkZXNpZ24KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1RVTkVSX05PUk1fSF9fCi0jZGVmaW5lIF9fR1NUX1RVTkVSX05PUk1fSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBHU1RfVFlQRV9UVU5FUl9OT1JNIFwKLSAgKGdzdF90dW5lcl9ub3JtX2dldF90eXBlICgpKQotI2RlZmluZSBHU1RfVFVORVJfTk9STShvYmopIFwKLSAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgR1NUX1RZUEVfVFVORVJfTk9STSwgR3N0VHVuZXJOb3JtKSkKLSNkZWZpbmUgR1NUX1RVTkVSX05PUk1fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBHU1RfVFlQRV9UVU5FUl9OT1JNLCBHc3RUdW5lck5vcm1DbGFzcykpCi0jZGVmaW5lIEdTVF9JU19UVU5FUl9OT1JNKG9iaikgXAotICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBHU1RfVFlQRV9UVU5FUl9OT1JNKSkKLSNkZWZpbmUgR1NUX0lTX1RVTkVSX05PUk1fQ0xBU1Moa2xhc3MpIFwKLSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBHU1RfVFlQRV9UVU5FUl9OT1JNKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFR1bmVyTm9ybSBHc3RUdW5lck5vcm07Ci10eXBlZGVmIHN0cnVjdCBfR3N0VHVuZXJOb3JtQ2xhc3MgR3N0VHVuZXJOb3JtQ2xhc3M7Ci0KLS8qKgotICogR3N0VHVuZXJOb3JtOgotICogQGxhYmVsOiBBIHN0cmluZyBjb250YWluaW5nIGEgZGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhlIG5vcm0KLSAqIEBmcmFtZXJhdGU6IEEgR1ZhbHVlIGNvbnRhaW5pbmcgdGhlIGZyYW1lcmF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBub3JtLAotICogICAgICAgICAgICAgaWYgYW55LiAoTWF5IGJlIHVuc2V0KS4KLSAqLwotc3RydWN0IF9Hc3RUdW5lck5vcm0gewotICBHT2JqZWN0IHBhcmVudDsKLQotICAvKjwgcHVibGljID4qLwotICBnY2hhciAgKmxhYmVsOwotICBHVmFsdWUgIGZyYW1lcmF0ZTsKLQotICAvKjwgcHJpdmF0ZSA+Ki8KLSAgZ3BvaW50ZXIgX2dzdF9yZXNlcnZlZFtHU1RfUEFERElOR107Ci19OwotCi1zdHJ1Y3QgX0dzdFR1bmVyTm9ybUNsYXNzIHsKLSAgR09iamVjdENsYXNzIHBhcmVudDsKLQotICBncG9pbnRlciBfZ3N0X3Jlc2VydmVkW0dTVF9QQURESU5HXTsKLX07Ci0KLUdUeXBlICAgICAgICAgICBnc3RfdHVuZXJfbm9ybV9nZXRfdHlwZSAgICAgICAgICh2b2lkKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1RVTkVSX05PUk1fSF9fICovCmRpZmYgLS1naXQgYS9zeXMvdjRsMi92NGwyLXV0aWxzLmMgYi9zeXMvdjRsMi92NGwyLXV0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MGM1ZGYuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvdjRsMi11dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQ29sbGFib3JhIEx0ZC4KLSAqICAgICBBdXRob3I6IE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJ2NGwyLXV0aWxzLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENvbW1vbiBkZXZpY2UgaXRlcmF0b3IgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIEhBVkVfR1VERVYKLSNpbmNsdWRlIDxndWRldi9ndWRldi5oPgotCi1zdHJ1Y3QgX0dzdFY0bDJHVWRldkl0ZXJhdG9yCi17Ci0gIEdzdFY0bDJJdGVyYXRvciBwYXJlbnQ7Ci0gIEdMaXN0ICpkZXZpY2VzOwotICBHVWRldkRldmljZSAqZGV2aWNlOwotICBHVWRldkNsaWVudCAqY2xpZW50OwotfTsKLQotR3N0VjRsMkl0ZXJhdG9yICoKLWdzdF92NGwyX2l0ZXJhdG9yX25ldyAodm9pZCkKLXsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpzdWJzeXN0ZW1zW10gPSB7ICJ2aWRlbzRsaW51eCIsIE5VTEwgfTsKLSAgc3RydWN0IF9Hc3RWNGwyR1VkZXZJdGVyYXRvciAqaXQ7Ci0KLSAgaXQgPSBnX3NsaWNlX25ldzAgKHN0cnVjdCBfR3N0VjRsMkdVZGV2SXRlcmF0b3IpOwotCi0gIGl0LT5jbGllbnQgPSBnX3VkZXZfY2xpZW50X25ldyAoc3Vic3lzdGVtcyk7Ci0gIGl0LT5kZXZpY2VzID0gZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0gKGl0LT5jbGllbnQsICJ2aWRlbzRsaW51eCIpOwotCi0gIHJldHVybiAoR3N0VjRsMkl0ZXJhdG9yICopIGl0OwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfaXRlcmF0b3JfbmV4dCAoR3N0VjRsMkl0ZXJhdG9yICogX2l0KQotewotICBzdHJ1Y3QgX0dzdFY0bDJHVWRldkl0ZXJhdG9yICppdCA9IChzdHJ1Y3QgX0dzdFY0bDJHVWRldkl0ZXJhdG9yICopIF9pdDsKLSAgY29uc3QgZ2NoYXIgKmRldmljZV9uYW1lOwotCi0gIGlmIChpdC0+ZGV2aWNlKQotICAgIGdfb2JqZWN0X3VucmVmIChpdC0+ZGV2aWNlKTsKLQotICBpdC0+ZGV2aWNlID0gTlVMTDsKLSAgaXQtPnBhcmVudC5kZXZpY2VfcGF0aCA9IE5VTEw7Ci0gIGl0LT5wYXJlbnQuZGV2aWNlX25hbWUgPSBOVUxMOwotCi0gIGlmIChpdC0+ZGV2aWNlcyA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpdC0+ZGV2aWNlID0gaXQtPmRldmljZXMtPmRhdGE7Ci0gIGl0LT5kZXZpY2VzID0gZ19saXN0X2RlbGV0ZV9saW5rIChpdC0+ZGV2aWNlcywgaXQtPmRldmljZXMpOwotCi0gIGRldmljZV9uYW1lID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKGl0LT5kZXZpY2UsICJJRF9WNExfUFJPRFVDVCIpOwotICBpZiAoIWRldmljZV9uYW1lKQotICAgIGRldmljZV9uYW1lID0gZ191ZGV2X2RldmljZV9nZXRfcHJvcGVydHkgKGl0LT5kZXZpY2UsICJJRF9NT0RFTF9FTkMiKTsKLSAgaWYgKCFkZXZpY2VfbmFtZSkKLSAgICBkZXZpY2VfbmFtZSA9IGdfdWRldl9kZXZpY2VfZ2V0X3Byb3BlcnR5IChpdC0+ZGV2aWNlLCAiSURfTU9ERUwiKTsKLQotICBpdC0+cGFyZW50LmRldmljZV9wYXRoID0gZ191ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUgKGl0LT5kZXZpY2UpOwotICBpdC0+cGFyZW50LmRldmljZV9uYW1lID0gZGV2aWNlX25hbWU7Ci0gIGl0LT5wYXJlbnQuc3lzX3BhdGggPSBnX3VkZXZfZGV2aWNlX2dldF9zeXNmc19wYXRoIChpdC0+ZGV2aWNlKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotdm9pZAotZ3N0X3Y0bDJfaXRlcmF0b3JfZnJlZSAoR3N0VjRsMkl0ZXJhdG9yICogX2l0KQotewotICBzdHJ1Y3QgX0dzdFY0bDJHVWRldkl0ZXJhdG9yICppdCA9IChzdHJ1Y3QgX0dzdFY0bDJHVWRldkl0ZXJhdG9yICopIF9pdDsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoaXQtPmRldmljZXMsIGdfb2JqZWN0X3VucmVmKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaXQtPmNsaWVudCk7Ci0gIGdfc2xpY2VfZnJlZSAoc3RydWN0IF9Hc3RWNGwyR1VkZXZJdGVyYXRvciwgaXQpOwotfQotCi0jZWxzZSAvKiBObyBHVURFViAqLwotCi1zdHJ1Y3QgX0dzdFY0bDJGc0l0ZXJhdG9yCi17Ci0gIEdzdFY0bDJJdGVyYXRvciBwYXJlbnQ7Ci0gIGdpbnQgYmFzZV9pZHg7Ci0gIGdpbnQgdmlkZW9faWR4OwotICBnY2hhciAqZGV2aWNlOwotfTsKLQotR3N0VjRsMkl0ZXJhdG9yICoKLWdzdF92NGwyX2l0ZXJhdG9yX25ldyAodm9pZCkKLXsKLSAgc3RydWN0IF9Hc3RWNGwyRnNJdGVyYXRvciAqaXQ7Ci0KLSAgaXQgPSBnX3NsaWNlX25ldzAgKHN0cnVjdCBfR3N0VjRsMkZzSXRlcmF0b3IpOwotICBpdC0+YmFzZV9pZHggPSAwOwotICBpdC0+dmlkZW9faWR4ID0gLTE7Ci0gIGl0LT5kZXZpY2UgPSBOVUxMOwotCi0gIHJldHVybiAoR3N0VjRsMkl0ZXJhdG9yICopIGl0OwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfaXRlcmF0b3JfbmV4dCAoR3N0VjRsMkl0ZXJhdG9yICogX2l0KQotewotICBzdHJ1Y3QgX0dzdFY0bDJGc0l0ZXJhdG9yICppdCA9IChzdHJ1Y3QgX0dzdFY0bDJGc0l0ZXJhdG9yICopIF9pdDsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICpkZXZfYmFzZVtdID0geyAiL2Rldi92aWRlbyIsICIvZGV2L3Y0bDIvdmlkZW8iLCBOVUxMIH07Ci0gIGdjaGFyICpkZXZpY2UgPSBOVUxMOwotCi0gIGdfZnJlZSAoKGdjaGFyICopIGl0LT5wYXJlbnQuZGV2aWNlX3BhdGgpOwotICBpdC0+cGFyZW50LmRldmljZV9wYXRoID0gTlVMTDsKLQotICB3aGlsZSAoZGV2aWNlID09IE5VTEwpIHsKLSAgICBpdC0+dmlkZW9faWR4Kys7Ci0KLSAgICBpZiAoaXQtPnZpZGVvX2lkeCA+PSA2NCkgewotICAgICAgaXQtPnZpZGVvX2lkeCA9IDA7Ci0gICAgICBpdC0+YmFzZV9pZHgrKzsKLSAgICB9Ci0KLSAgICBpZiAoZGV2X2Jhc2VbaXQtPmJhc2VfaWR4XSA9PSBOVUxMKSB7Ci0gICAgICBpdC0+dmlkZW9faWR4ID0gMDsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRldmljZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzJWQiLCBkZXZfYmFzZVtpdC0+YmFzZV9pZHhdLCBpdC0+dmlkZW9faWR4KTsKLQotICAgIGlmIChnX2ZpbGVfdGVzdCAoZGV2aWNlLCBHX0ZJTEVfVEVTVF9FWElTVFMpKSB7Ci0gICAgICBpdC0+cGFyZW50LmRldmljZV9wYXRoID0gZGV2aWNlOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZ19mcmVlIChkZXZpY2UpOwotICAgIGRldmljZSA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm4gaXQtPnBhcmVudC5kZXZpY2VfcGF0aCAhPSBOVUxMOwotfQotCi12b2lkCi1nc3RfdjRsMl9pdGVyYXRvcl9mcmVlIChHc3RWNGwySXRlcmF0b3IgKiBfaXQpCi17Ci0gIHN0cnVjdCBfR3N0VjRsMkZzSXRlcmF0b3IgKml0ID0gKHN0cnVjdCBfR3N0VjRsMkZzSXRlcmF0b3IgKikgX2l0OwotICBnX2ZyZWUgKChnY2hhciAqKSBpdC0+cGFyZW50LmRldmljZV9wYXRoKTsKLSAgZ19zbGljZV9mcmVlIChzdHJ1Y3QgX0dzdFY0bDJGc0l0ZXJhdG9yLCBpdCk7Ci19Ci0KLSNlbmRpZgotCi12b2lkCi1nc3RfdjRsMl9jbGVhcl9lcnJvciAoR3N0VjRsMkVycm9yICogdjRsMmVycikKLXsKLSAgaWYgKHY0bDJlcnIpIHsKLSAgICBnX2NsZWFyX2Vycm9yICgmdjRsMmVyci0+ZXJyb3IpOwotICAgIGdfZnJlZSAodjRsMmVyci0+ZGJnX21lc3NhZ2UpOwotICAgIHY0bDJlcnItPmRiZ19tZXNzYWdlID0gTlVMTDsKLSAgfQotfQotCi12b2lkCi1nc3RfdjRsMl9lcnJvciAoZ3BvaW50ZXIgZWxlbWVudCwgR3N0VjRsMkVycm9yICogdjRsMmVycikKLXsKLSAgR0Vycm9yICplcnJvcjsKLQotICBpZiAoIXY0bDJlcnIgfHwgIXY0bDJlcnItPmVycm9yKQotICAgIHJldHVybjsKLQotICBlcnJvciA9IHY0bDJlcnItPmVycm9yOwotCi0gIGlmIChlcnJvci0+bWVzc2FnZSkKLSAgICBHU1RfV0FSTklOR19PQkpFQ1QgKGVsZW1lbnQsICJlcnJvcjogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0KLSAgaWYgKHY0bDJlcnItPmRiZ19tZXNzYWdlKQotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAoZWxlbWVudCwgImVycm9yOiAlcyIsIHY0bDJlcnItPmRiZ19tZXNzYWdlKTsKLQotICBnc3RfZWxlbWVudF9tZXNzYWdlX2Z1bGwgKEdTVF9FTEVNRU5UIChlbGVtZW50KSwgR1NUX01FU1NBR0VfRVJST1IsCi0gICAgICBlcnJvci0+ZG9tYWluLCBlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UsIHY0bDJlcnItPmRiZ19tZXNzYWdlLAotICAgICAgdjRsMmVyci0+ZmlsZSwgdjRsMmVyci0+ZnVuYywgdjRsMmVyci0+bGluZSk7Ci0KLSAgZXJyb3ItPm1lc3NhZ2UgPSBOVUxMOwotICB2NGwyZXJyLT5kYmdfbWVzc2FnZSA9IE5VTEw7Ci0KLSAgZ3N0X3Y0bDJfY2xlYXJfZXJyb3IgKHY0bDJlcnIpOwotfQpkaWZmIC0tZ2l0IGEvc3lzL3Y0bDIvdjRsMi11dGlscy5oIGIvc3lzL3Y0bDIvdjRsMi11dGlscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmMwMDYyLi4wMDAwMDAwCi0tLSBhL3N5cy92NGwyL3Y0bDItdXRpbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQ29sbGFib3JhIEx0ZC4KLSAqICAgICBBdXRob3I6IE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIF9fVjRMMl9VVElMU19IX18KLSNkZWZpbmUgX19WNEwyX1VUSUxTX0hfXwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1Y0TDJfRVJST1JfSU5JVCB7IE5VTEwsIE5VTEwgfQotI2RlZmluZSBHU1RfVjRMMl9FUlJPUih2NGwyZXJyLGRvbWFpbixjb2RlLG1zZyxkYmcpIFwKLXtcCi0gIGlmICh2NGwyZXJyKSB7IFwKLSAgICBnY2hhciAqX21zZyA9IF9nc3RfZWxlbWVudF9lcnJvcl9wcmludGYgbXNnOyBcCi0gICAgdjRsMmVyci0+ZXJyb3IgPSBnX2Vycm9yX25ld19saXRlcmFsIChHU1RfIyNkb21haW4jI19FUlJPUiwgXAotICAgICAgICBHU1RfIyNkb21haW4jI19FUlJPUl8jI2NvZGUsIF9tc2cpOyBcCi0gICAgZ19mcmVlIChfbXNnKTsgXAotICAgIHY0bDJlcnItPmRiZ19tZXNzYWdlID0gX2dzdF9lbGVtZW50X2Vycm9yX3ByaW50ZiBkYmc7IFwKLSAgICB2NGwyZXJyLT5maWxlID0gX19GSUxFX187IFwKLSAgICB2NGwyZXJyLT5mdW5jID0gR1NUX0ZVTkNUSU9OOyBcCi0gICAgdjRsMmVyci0+bGluZSA9IF9fTElORV9fOyBcCi0gIH0gXAotfQotCi10eXBlZGVmIHN0cnVjdCBfR3N0VjRsMkl0ZXJhdG9yIEdzdFY0bDJJdGVyYXRvcjsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWNGwyRXJyb3IgR3N0VjRsMkVycm9yOwotCi1zdHJ1Y3QgX0dzdFY0bDJJdGVyYXRvcgotewotICAgIGNvbnN0IGdjaGFyICpkZXZpY2VfcGF0aDsKLSAgICBjb25zdCBnY2hhciAqZGV2aWNlX25hbWU7Ci0gICAgY29uc3QgZ2NoYXIgKnN5c19wYXRoOwotfTsKLQotc3RydWN0IF9Hc3RWNGwyRXJyb3IKLXsKLSAgICBHRXJyb3IgKmVycm9yOwotICAgIGdjaGFyICpkYmdfbWVzc2FnZTsKLSAgICBjb25zdCBnY2hhciAqZmlsZTsKLSAgICBjb25zdCBnY2hhciAqZnVuYzsKLSAgICBnaW50IGxpbmU7Ci19OwotCi1Hc3RWNGwySXRlcmF0b3IgKiAgZ3N0X3Y0bDJfaXRlcmF0b3JfbmV3ICh2b2lkKTsKLWdib29sZWFuICAgICAgICAgICBnc3RfdjRsMl9pdGVyYXRvcl9uZXh0IChHc3RWNGwySXRlcmF0b3IgKml0KTsKLXZvaWQgICAgICAgICAgICAgICBnc3RfdjRsMl9pdGVyYXRvcl9mcmVlIChHc3RWNGwySXRlcmF0b3IgKml0KTsKLQotY29uc3QgZ2NoYXIgKiAgICAgIGdzdF92NGwyX2l0ZXJhdG9yX2dldF9kZXZpY2VfcGF0aCAoR3N0VjRsMkl0ZXJhdG9yICppdCk7Ci1jb25zdCBnY2hhciAqICAgICAgZ3N0X3Y0bDJfaXRlcmF0b3JfZ2V0X2RldmljZV9uYW1lIChHc3RWNGwySXRlcmF0b3IgKml0KTsKLWNvbnN0IGdjaGFyICogICAgICBnc3RfdjRsMl9pdGVyYXRvcl9nZXRfc3lzX3BhdGggKEdzdFY0bDJJdGVyYXRvciAqaXQpOwotCi12b2lkICAgICAgICAgICAgICAgZ3N0X3Y0bDJfY2xlYXJfZXJyb3IgKEdzdFY0bDJFcnJvciAqZXJyb3IpOwotdm9pZCAgICAgICAgICAgICAgIGdzdF92NGwyX2Vycm9yIChncG9pbnRlciBlbGVtZW50LCBHc3RWNGwyRXJyb3IgKmVycm9yKTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fVjRMMl9VVElMU19IX18gKi8KLQotCmRpZmYgLS1naXQgYS9zeXMvdjRsMi92NGwyX2NhbGxzLmMgYi9zeXMvdjRsMi92NGwyX2NhbGxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTgxZmYuLjAwMDAwMDAKLS0tIGEvc3lzL3Y0bDIvdjRsMl9jYWxscy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgICAgICAgICAgICAyMDA2IEVkZ2FyZCBMaW1hIDxlZGdhcmQubGltYUBpbmR0Lm9yZy5icj4KLSAqCi0gKiB2NGwyX2NhbGxzLmMgLSBnZW5lcmljIFY0TDIgY2FsbHMgaGFuZGxpbmcKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lmZGVmIF9fc3VuCi0vKiBOZWVkZWQgb24gb2xkZXIgU29sYXJpcyBOZXZhZGEgYnVpbGRzICg3MiBhdCBsZWFzdCkgKi8KLSNpbmNsdWRlIDxzdHJvcHRzLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgotI2VuZGlmCi0jaW5jbHVkZSAidjRsMl9jYWxscy5oIgotI2luY2x1ZGUgImdzdHY0bDJ0dW5lci5oIgotI2lmIDAKLSNpbmNsdWRlICJnc3R2NGwyeG92ZXJsYXkuaCIKLSNlbmRpZgotI2luY2x1ZGUgImdzdHY0bDJjb2xvcmJhbGFuY2UuaCIKLQotI2luY2x1ZGUgImdzdHY0bDJzcmMuaCIKLSNpbmNsdWRlICJnc3R2NGwyc2luay5oIgotI2luY2x1ZGUgImdzdHY0bDJ2aWRlb2RlYy5oIgotCi0jaW5jbHVkZSAiZ3N0L2dzdC1pMThuLXBsdWdpbi5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOICh2NGwyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHY0bDJfZGVidWcKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfZ2V0X2NhcGFiaWxpdGllcygpOgotICogICBnZXQgdGhlIGRldmljZSdzIGNhcHR1cmluZyBjYXBhYmlsaXRpZXMKLSAqIHJldHVybiB2YWx1ZTogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWdib29sZWFuCi1nc3RfdjRsMl9nZXRfY2FwYWJpbGl0aWVzIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgR3N0RWxlbWVudCAqZTsKLQotICBlID0gdjRsMm9iamVjdC0+ZWxlbWVudDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlLCAiZ2V0dGluZyBjYXBhYmlsaXRpZXMiKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19RVUVSWUNBUCwgJnY0bDJvYmplY3QtPnZjYXApIDwgMCkKLSAgICBnb3RvIGNhcF9mYWlsZWQ7Ci0KLSAgaWYgKHY0bDJvYmplY3QtPnZjYXAuY2FwYWJpbGl0aWVzICYgVjRMMl9DQVBfREVWSUNFX0NBUFMpCi0gICAgdjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgPSB2NGwyb2JqZWN0LT52Y2FwLmRldmljZV9jYXBzOwotICBlbHNlCi0gICAgdjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgPSB2NGwyb2JqZWN0LT52Y2FwLmNhcGFiaWxpdGllczsKLQotICBHU1RfTE9HX09CSkVDVCAoZSwgImRyaXZlcjogICAgICAnJXMnIiwgdjRsMm9iamVjdC0+dmNhcC5kcml2ZXIpOwotICBHU1RfTE9HX09CSkVDVCAoZSwgImNhcmQ6ICAgICAgICAnJXMnIiwgdjRsMm9iamVjdC0+dmNhcC5jYXJkKTsKLSAgR1NUX0xPR19PQkpFQ1QgKGUsICJidXNfaW5mbzogICAgJyVzJyIsIHY0bDJvYmplY3QtPnZjYXAuYnVzX2luZm8pOwotICBHU1RfTE9HX09CSkVDVCAoZSwgInZlcnNpb246ICAgICAlMDh4IiwgdjRsMm9iamVjdC0+dmNhcC52ZXJzaW9uKTsKLSAgR1NUX0xPR19PQkpFQ1QgKGUsICJjYXBhYmlsaXRlczogJTA4eCIsIHY0bDJvYmplY3QtPmRldmljZV9jYXBzKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWNhcF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRXJyb3IgZ2V0dGluZyBjYXBhYmlsaXRpZXMgZm9yIGRldmljZSAnJXMnOiAiCi0gICAgICAgICAgICAgICAgIkl0IGlzbid0IGEgdjRsMiBkcml2ZXIuIENoZWNrIGlmIGl0IGlzIGEgdjRsMSBkcml2ZXIuIiksCi0gICAgICAgICAgICB2NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUaGUgdmlkZW80bGludXggY29tbWFuZCBsaW5lIHRvb2wgdjRsMi1jdHJsCi0gKiBub3JtYWxpc2VzIHRoZSBuYW1lcyBvZiB0aGUgY29udHJvbHMgcmVjZWl2ZWQgZnJvbQotICogdGhlIGtlcm5lbCBsaWtlOgotICoKLSAqICAgICAiRXhwb3N1cmUgKGFic29sdXRlKSIgLT4gImV4cG9zdXJlX2Fic29sdXRlIgotICoKLSAqIFdlIGZvbGxvdyB0aGVpciBsZWFkIGhlcmUuICBAbmFtZSBpcyBtb2RpZmllZAotICogaW4tcGxhY2UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLWdzdF92NGwyX25vcm1hbGlzZV9jb250cm9sX25hbWUgKGdjaGFyICogbmFtZSkKLXsKLSAgaW50IGksIGo7Ci0gIGZvciAoaSA9IDAsIGogPSAwOyBuYW1lW2pdOyArK2opIHsKLSAgICBpZiAoZ19hc2NpaV9pc2FsbnVtIChuYW1lW2pdKSkgewotICAgICAgaWYgKGkgPiAwICYmICFnX2FzY2lpX2lzYWxudW0gKG5hbWVbaiAtIDFdKSkKLSAgICAgICAgbmFtZVtpKytdID0gJ18nOwotICAgICAgbmFtZVtpKytdID0gZ19hc2NpaV90b2xvd2VyIChuYW1lW2pdKTsKLSAgICB9Ci0gIH0KLSAgbmFtZVtpKytdID0gJ1wwJzsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfZW1wdHlfbGlzdHMoKSBhbmQgZ3N0X3Y0bDJfZmlsbF9saXN0cygpOgotICogICBmaWxsL2VtcHR5IHRoZSBsaXN0cyBvZiBlbnVtZXJhdGlvbnMKLSAqIHJldHVybiB2YWx1ZTogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3Y0bDJfZmlsbF9saXN0cyAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIGdpbnQgbiwgbmV4dDsKLSAgc3RydWN0IHY0bDJfcXVlcnljdHJsIGNvbnRyb2wgPSB7IDAsIH07Ci0KLSAgR3N0RWxlbWVudCAqZTsKLQotICBlID0gdjRsMm9iamVjdC0+ZWxlbWVudDsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlLCAiZ2V0dGluZyBlbnVtZXJhdGlvbnMiKTsKLSAgR1NUX1Y0TDJfQ0hFQ0tfT1BFTiAodjRsMm9iamVjdCk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZSwgIiAgY2hhbm5lbHMiKTsKLSAgLyogYW5kIG5vdywgdGhlIGNoYW5uZWxzICovCi0gIGZvciAobiA9IDA7OyBuKyspIHsKLSAgICBzdHJ1Y3QgdjRsMl9pbnB1dCBpbnB1dDsKLSAgICBHc3RWNGwyVHVuZXJDaGFubmVsICp2NGwyY2hhbm5lbDsKLSAgICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWw7Ci0KLSAgICBtZW1zZXQgKCZpbnB1dCwgMCwgc2l6ZW9mIChpbnB1dCkpOwotCi0gICAgaW5wdXQuaW5kZXggPSBuOwotICAgIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0VOVU1JTlBVVCwgJmlucHV0KSA8IDApIHsKLSAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFRZKQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgZW51bWVyYXRpb24gKi8KLSAgICAgIGVsc2UgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZSwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAgICAgKF8oIkZhaWxlZCB0byBxdWVyeSBhdHRyaWJ1dGVzIG9mIGlucHV0ICVkIGluIGRldmljZSAlcyIpLAotICAgICAgICAgICAgICAgIG4sIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgICAgICgiRmFpbGVkIHRvIGdldCAlZCBpbiBpbnB1dCBlbnVtZXJhdGlvbiBmb3IgJXMuICglZCAtICVzKSIsCi0gICAgICAgICAgICAgICAgbiwgdjRsMm9iamVjdC0+dmlkZW9kZXYsIGVycm5vLCBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBHU1RfTE9HX09CSkVDVCAoZSwgIiAgIGluZGV4OiAgICAgJWQiLCBpbnB1dC5pbmRleCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QgKGUsICIgICBuYW1lOiAgICAgICclcyciLCBpbnB1dC5uYW1lKTsKLSAgICBHU1RfTE9HX09CSkVDVCAoZSwgIiAgIHR5cGU6ICAgICAgJTA4eCIsIGlucHV0LnR5cGUpOwotICAgIEdTVF9MT0dfT0JKRUNUIChlLCAiICAgYXVkaW9zZXQ6ICAlMDh4IiwgaW5wdXQuYXVkaW9zZXQpOwotICAgIEdTVF9MT0dfT0JKRUNUIChlLCAiICAgc3RkOiAgICAgICAlMDE2IiBHX0dJTlQ2NF9NT0RJRklFUiAieCIsCi0gICAgICAgIChndWludDY0KSBpbnB1dC5zdGQpOwotICAgIEdTVF9MT0dfT0JKRUNUIChlLCAiICAgc3RhdHVzOiAgICAlMDh4IiwgaW5wdXQuc3RhdHVzKTsKLQotICAgIHY0bDJjaGFubmVsID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9WNEwyX1RVTkVSX0NIQU5ORUwsIE5VTEwpOwotICAgIGNoYW5uZWwgPSBHU1RfVFVORVJfQ0hBTk5FTCAodjRsMmNoYW5uZWwpOwotICAgIGNoYW5uZWwtPmxhYmVsID0gZ19zdHJkdXAgKChjb25zdCBnY2hhciAqKSBpbnB1dC5uYW1lKTsKLSAgICBjaGFubmVsLT5mbGFncyA9IEdTVF9UVU5FUl9DSEFOTkVMX0lOUFVUOwotICAgIHY0bDJjaGFubmVsLT5pbmRleCA9IG47Ci0KLSAgICBpZiAoaW5wdXQudHlwZSA9PSBWNEwyX0lOUFVUX1RZUEVfVFVORVIpIHsKLSAgICAgIHN0cnVjdCB2NGwyX3R1bmVyIHZ0dW47Ci0KLSAgICAgIHY0bDJjaGFubmVsLT50dW5lciA9IGlucHV0LnR1bmVyOwotICAgICAgY2hhbm5lbC0+ZmxhZ3MgfD0gR1NUX1RVTkVSX0NIQU5ORUxfRlJFUVVFTkNZOwotCi0gICAgICB2dHVuLmluZGV4ID0gaW5wdXQudHVuZXI7Ci0gICAgICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19HX1RVTkVSLCAmdnR1bikgPCAwKSB7Ci0gICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChlLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICAgICAoXygiRmFpbGVkIHRvIGdldCBzZXR0aW5nIG9mIHR1bmVyICVkIG9uIGRldmljZSAnJXMnLiIpLAotICAgICAgICAgICAgICAgIGlucHV0LnR1bmVyLCB2NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICAgICAgICBnX29iamVjdF91bnJlZiAoR19PQkpFQ1QgKGNoYW5uZWwpKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgfQotCi0gICAgICBjaGFubmVsLT5mcmVxX211bHRpcGxpY2F0b3IgPQotICAgICAgICAgIDYyLjUgKiAoKHZ0dW4uY2FwYWJpbGl0eSAmIFY0TDJfVFVORVJfQ0FQX0xPVykgPyAxIDogMTAwMCk7Ci0gICAgICBjaGFubmVsLT5taW5fZnJlcXVlbmN5ID0gdnR1bi5yYW5nZWxvdyAqIGNoYW5uZWwtPmZyZXFfbXVsdGlwbGljYXRvcjsKLSAgICAgIGNoYW5uZWwtPm1heF9mcmVxdWVuY3kgPSB2dHVuLnJhbmdlaGlnaCAqIGNoYW5uZWwtPmZyZXFfbXVsdGlwbGljYXRvcjsKLSAgICAgIGNoYW5uZWwtPm1pbl9zaWduYWwgPSAwOwotICAgICAgY2hhbm5lbC0+bWF4X3NpZ25hbCA9IDB4ZmZmZjsKLSAgICB9Ci0gICAgaWYgKGlucHV0LmF1ZGlvc2V0KSB7Ci0gICAgICAvKiB3ZSB0YWtlIHRoZSBmaXJzdC4gV2UgZG9uJ3QgY2FyZSBmb3IKLSAgICAgICAqIHRoZSBvdGhlcnMgZm9yIG5vdyAqLwotICAgICAgd2hpbGUgKCEoaW5wdXQuYXVkaW9zZXQgJiAoMSA8PCB2NGwyY2hhbm5lbC0+YXVkaW8pKSkKLSAgICAgICAgdjRsMmNoYW5uZWwtPmF1ZGlvKys7Ci0gICAgICBjaGFubmVsLT5mbGFncyB8PSBHU1RfVFVORVJfQ0hBTk5FTF9BVURJTzsKLSAgICB9Ci0KLSAgICB2NGwyb2JqZWN0LT5jaGFubmVscyA9Ci0gICAgICAgIGdfbGlzdF9wcmVwZW5kICh2NGwyb2JqZWN0LT5jaGFubmVscywgKGdwb2ludGVyKSBjaGFubmVsKTsKLSAgfQotICB2NGwyb2JqZWN0LT5jaGFubmVscyA9IGdfbGlzdF9yZXZlcnNlICh2NGwyb2JqZWN0LT5jaGFubmVscyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZSwgIiAgbm9ybXMiKTsKLSAgLyogbm9ybXMuLi4gKi8KLSAgZm9yIChuID0gMDs7IG4rKykgewotICAgIHN0cnVjdCB2NGwyX3N0YW5kYXJkIHN0YW5kYXJkID0geyAwLCB9OwotICAgIEdzdFY0bDJUdW5lck5vcm0gKnY0bDJub3JtOwotCi0gICAgR3N0VHVuZXJOb3JtICpub3JtOwotCi0gICAgLyogZmlsbCBpbiBkZWZhdWx0cyAqLwotICAgIHN0YW5kYXJkLmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7Ci0gICAgc3RhbmRhcmQuZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAwOwotICAgIHN0YW5kYXJkLmluZGV4ID0gbjsKLQotICAgIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0VOVU1TVEQsICZzdGFuZGFyZCkgPCAwKSB7Ci0gICAgICBpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1RUWSkKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGVudW1lcmF0aW9uICovCi0jaWZkZWYgRU5PREFUQQotICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRU5PREFUQSkKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGVudW1lcmF0aW9uLCBhcyBvZiBMaW51eCAzLjctcmMxICovCi0jZW5kaWYKLSAgICAgIGVsc2UgewotICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZSwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAgICAgKF8oIkZhaWxlZCB0byBxdWVyeSBub3JtIG9uIGRldmljZSAnJXMnLiIpLAotICAgICAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgICAgICgiRmFpbGVkIHRvIGdldCBhdHRyaWJ1dGVzIGZvciBub3JtICVkIG9uIGRldmlkZSAnJXMnLiAoJWQgLSAlcykiLAotICAgICAgICAgICAgICAgIG4sIHY0bDJvYmplY3QtPnZpZGVvZGV2LCBlcnJubywgc3RyZXJyb3IgKGVycm5vKSkpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgIiAgICAnJXMnLCBmcHM6ICVkIC8gJWQiLAotICAgICAgICBzdGFuZGFyZC5uYW1lLCBzdGFuZGFyZC5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciwKLSAgICAgICAgc3RhbmRhcmQuZnJhbWVwZXJpb2QubnVtZXJhdG9yKTsKLQotICAgIHY0bDJub3JtID0gZ19vYmplY3RfbmV3IChHU1RfVFlQRV9WNEwyX1RVTkVSX05PUk0sIE5VTEwpOwotICAgIG5vcm0gPSBHU1RfVFVORVJfTk9STSAodjRsMm5vcm0pOwotICAgIG5vcm0tPmxhYmVsID0gZ19zdHJkdXAgKChjb25zdCBnY2hhciAqKSBzdGFuZGFyZC5uYW1lKTsKLSAgICBnc3RfdmFsdWVfc2V0X2ZyYWN0aW9uICgmbm9ybS0+ZnJhbWVyYXRlLAotICAgICAgICBzdGFuZGFyZC5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciwgc3RhbmRhcmQuZnJhbWVwZXJpb2QubnVtZXJhdG9yKTsKLSAgICB2NGwybm9ybS0+aW5kZXggPSBzdGFuZGFyZC5pZDsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJpbmRleD0lMDh4LCBsYWJlbD0lcyIsCi0gICAgICAgICh1bnNpZ25lZCBpbnQpIHY0bDJub3JtLT5pbmRleCwgbm9ybS0+bGFiZWwpOwotCi0gICAgdjRsMm9iamVjdC0+bm9ybXMgPSBnX2xpc3RfcHJlcGVuZCAodjRsMm9iamVjdC0+bm9ybXMsIChncG9pbnRlcikgbm9ybSk7Ci0gIH0KLSAgdjRsMm9iamVjdC0+bm9ybXMgPSBnX2xpc3RfcmV2ZXJzZSAodjRsMm9iamVjdC0+bm9ybXMpOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGUsICIgIGNvbnRyb2xzK21lbnVzIik7Ci0KLSAgLyogYW5kIGxhc3RseSwgY29udHJvbHMrbWVudXMgKGlmIGFwcHJvcHJpYXRlKSAqLwotICBuZXh0ID0gVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMOwotICBuID0gMDsKLSAgY29udHJvbC5pZCA9IG5leHQ7Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBHc3RWNGwyQ29sb3JCYWxhbmNlQ2hhbm5lbCAqdjRsMmNoYW5uZWw7Ci0gICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqY2hhbm5lbDsKLQotICAgIGlmICghbmV4dCkKLSAgICAgIG4rKzsKLQotICByZXRyeToKLSAgICAvKiB3aGVuIHdlIHJlYWNoZWQgdGhlIGxhc3Qgb2ZmaWNpYWwgQ0lELCBjb250aW51ZSB3aXRoIHByaXZhdGUgQ0lEcyAqLwotICAgIGlmIChuID09IFY0TDJfQ0lEX0xBU1RQMSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgImNoZWNraW5nIHByaXZhdGUgQ0lEcyIpOwotICAgICAgbiA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTsKLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgImNoZWNraW5nIGNvbnRyb2wgJTA4eCIsIG4pOwotCi0gICAgY29udHJvbC5pZCA9IG4gfCBuZXh0OwotICAgIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX1FVRVJZQ1RSTCwgJmNvbnRyb2wpIDwgMCkgewotICAgICAgaWYgKG5leHQpIHsKLSAgICAgICAgaWYgKG4gPiAwKSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgImNvbnRyb2xzIGZpbmlzaGVkIik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgIlY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgICAgIG5leHQgPSAwOwotICAgICAgICAgIG4gPSBWNEwyX0NJRF9CQVNFOwotICAgICAgICAgIGdvdG8gcmV0cnk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFRZIHx8IGVycm5vID09IEVJTyB8fCBlcnJubyA9PSBFTk9FTlQpIHsKLSAgICAgICAgaWYgKG4gPCBWNEwyX0NJRF9QUklWQVRFX0JBU0UpIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlLCAic2tpcHBpbmcgY29udHJvbCAlMDh4Iiwgbik7Ci0gICAgICAgICAgLyogY29udGludWUgc28gdGhhdCB3ZSBhbHNvIGNoZWNrIHByaXZhdGUgY29udHJvbHMgKi8KLSAgICAgICAgICBuID0gVjRMMl9DSURfUFJJVkFURV9CQVNFIC0gMTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlLCAiY29udHJvbHMgZmluaXNoZWQiKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChlLCAiRmFpbGVkIHF1ZXJ5aW5nIGNvbnRyb2wgJWQgb24gZGV2aWNlICclcycuICIKLSAgICAgICAgICAgICIoJWQgLSAlcykiLCBuLCB2NGwyb2JqZWN0LT52aWRlb2RldiwgZXJybm8sIHN0cmVycm9yIChlcnJubykpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLyogYm9ndXMgZHJpdmVyIG1pZ2h0IG1lc3Mgd2l0aCBpZCBpbiB1bmV4cGVjdGVkIHdheXMgKGUuZy4gc2V0IHRvIDApLCBzbwotICAgICAqIG1ha2Ugc3VyZSB0byBzaW1wbHkgdHJ5IGFsbCBpZiBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwgbm90IHN1cHBvcnRlZCAqLwotICAgIGlmIChuZXh0KQotICAgICAgbiA9IGNvbnRyb2wuaWQ7Ci0gICAgaWYgKGNvbnRyb2wuZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgInNraXBwaW5nIGRpc2FibGVkIGNvbnRyb2wiKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGlmIChjb250cm9sLnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUykgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAoZSwgInN0YXJ0aW5nIGNvbnRyb2wgY2xhc3MgJyVzJyIsIGNvbnRyb2wubmFtZSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGNvbnRyb2wudHlwZSkgewotICAgICAgY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgotICAgICAgY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgotICAgICAgY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgotICAgICAgY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSX01FTlU6Ci0gICAgICBjYXNlIFY0TDJfQ1RSTF9UWVBFX0JJVE1BU0s6Ci0gICAgICBjYXNlIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjp7Ci0gICAgICAgIGNvbnRyb2wubmFtZVszMV0gPSAnXDAnOwotICAgICAgICBnc3RfdjRsMl9ub3JtYWxpc2VfY29udHJvbF9uYW1lICgoZ2NoYXIgKikgY29udHJvbC5uYW1lKTsKLSAgICAgICAgZ19kYXRhbGlzdF9pZF9zZXRfZGF0YSAoJnY0bDJvYmplY3QtPmNvbnRyb2xzLAotICAgICAgICAgICAgZ19xdWFya19mcm9tX3N0cmluZyAoKGNvbnN0IGdjaGFyICopIGNvbnRyb2wubmFtZSksCi0gICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIgKG4pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlLAotICAgICAgICAgICAgIkNvbnRyb2wgdHlwZSBmb3IgJyVzJyBub3Qgc3VwcG9yZWQgZm9yIGV4dHJhIGNvbnRyb2xzLiIsCi0gICAgICAgICAgICBjb250cm9sLm5hbWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG4pIHsKLSAgICAgIGNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLSAgICAgIGNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0gICAgICBjYXNlIFY0TDJfQ0lEX0hVRToKLSAgICAgIGNhc2UgVjRMMl9DSURfQkxBQ0tfTEVWRUw6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKLSAgICAgIGNhc2UgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToKLSAgICAgIGNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKLSAgICAgIGNhc2UgVjRMMl9DSURfR0FNTUE6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotICAgICAgY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKLSAgICAgIGNhc2UgVjRMMl9DSURfR0FJTjoKLSAgICAgIGNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgotICAgICAgICAvKiB3ZSBvbmx5IGhhbmRsZSB0aGVzZSBmb3Igbm93ICh3aHk/KSAqLwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVjRMMl9DSURfSEZMSVA6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX1ZGTElQOgotICAgICAgY2FzZSBWNEwyX0NJRF9QQU5fUkVTRVQ6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6Ci0gICAgICAgIC8qIG5vdCBoYW5kbGVkIGhlcmUsIGhhbmRsZWQgYnkgVmlkZW9PcmllbnRhdGlvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgY29udHJvbC5pZCsrOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotICAgICAgY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotICAgICAgY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotICAgICAgY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0gICAgICBjYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotICAgICAgICAvKiBGSVhNRTogV2Ugc2hvdWxkIGltcGxlbWVudCBHc3RNaXhlciBpbnRlcmZhY2UgaW5zdGVhZCAqLwotICAgICAgICAvKiBidXQgbGV0J3Mgbm90IGJlIHBlZGFudGljIGFuZCBtYWtlIGVsZW1lbnQgbW9yZSB1c2VmdWwgZm9yIG5vdyAqLwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgVjRMMl9DSURfQUxQSEFfQ09NUE9ORU5UOgotICAgICAgICB2NGwyb2JqZWN0LT5oYXNfYWxwaGFfY29tcG9uZW50ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChlLAotICAgICAgICAgICAgIkNvbnRyb2xJRCAlcyAoJXgpIHVuaGFuZGxlZCwgRklYTUUiLCBjb250cm9sLm5hbWUsIG4pOwotICAgICAgICBjb250cm9sLmlkKys7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAobiAhPSBjb250cm9sLmlkKQotICAgICAgY29udGludWU7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChlLCAiQWRkaW5nIENvbnRyb2xJRCAlcyAoJXgpIiwgY29udHJvbC5uYW1lLCBuKTsKLSAgICB2NGwyY2hhbm5lbCA9IGdfb2JqZWN0X25ldyAoR1NUX1RZUEVfVjRMMl9DT0xPUl9CQUxBTkNFX0NIQU5ORUwsIE5VTEwpOwotICAgIGNoYW5uZWwgPSBHU1RfQ09MT1JfQkFMQU5DRV9DSEFOTkVMICh2NGwyY2hhbm5lbCk7Ci0gICAgY2hhbm5lbC0+bGFiZWwgPSBnX3N0cmR1cCAoKGNvbnN0IGdjaGFyICopIGNvbnRyb2wubmFtZSk7Ci0gICAgdjRsMmNoYW5uZWwtPmlkID0gbjsKLQotI2lmIDAKLSAgICAvKiBGSVhNRTogaXQgd2lsbCBiZSBuZWVkIGp1c3Qgd2hlbiBoYW5kbGluZyBwcml2YXRlIGNvbnRyb2xzCi0gICAgICooY3VycmVudGx5IG5vbmUgb2YgYmFzZSBjb250cm9scyBhcmUgb2YgdGhpcyB0eXBlKSAqLwotICAgIGlmIChjb250cm9sLnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkgewotICAgICAgc3RydWN0IHY0bDJfcXVlcnltZW51IG1lbnUsICptcHRyOwotCi0gICAgICBpbnQgaTsKLQotICAgICAgbWVudS5pZCA9IG47Ci0gICAgICBmb3IgKGkgPSAwOzsgaSsrKSB7Ci0gICAgICAgIG1lbnUuaW5kZXggPSBpOwotICAgICAgICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19RVUVSWU1FTlUsICZtZW51KSA8IDApIHsKLSAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKQotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBlbmQgb2YgZW51bWVyYXRpb24gKi8KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SIChlLCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgICAgICAgICAgKF8oIkZhaWxlZCBnZXR0aW5nIGNvbnRyb2xzIGF0dHJpYnV0ZXMgb24gZGV2aWNlICclcycuIiksCi0gICAgICAgICAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgICAgICAgICAoIkZhaWxlZCB0byBnZXQgJWQgaW4gbWVudSBlbnVtZXJhdGlvbiBmb3IgJXMuICglZCAtICVzKSIsCi0gICAgICAgICAgICAgICAgICAgIG4sIHY0bDJvYmplY3QtPnZpZGVvZGV2LCBlcnJubywgc3RyZXJyb3IgKGVycm5vKSkpOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtcHRyID0gZ19tYWxsb2MgKHNpemVvZiAobWVudSkpOwotICAgICAgICBtZW1jcHkgKG1wdHIsICZtZW51LCBzaXplb2YgKG1lbnUpKTsKLSAgICAgICAgbWVudXMgPSBnX2xpc3RfYXBwZW5kIChtZW51cywgbXB0cik7Ci0gICAgICB9Ci0gICAgfQotICAgIHY0bDJvYmplY3QtPm1lbnVzID0gZ19saXN0X2FwcGVuZCAodjRsMm9iamVjdC0+bWVudXMsIG1lbnVzKTsKLSNlbmRpZgotCi0gICAgc3dpdGNoIChjb250cm9sLnR5cGUpIHsKLSAgICAgIGNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKLSAgICAgICAgY2hhbm5lbC0+bWluX3ZhbHVlID0gY29udHJvbC5taW5pbXVtOwotICAgICAgICBjaGFubmVsLT5tYXhfdmFsdWUgPSBjb250cm9sLm1heGltdW07Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgotICAgICAgICBjaGFubmVsLT5taW5fdmFsdWUgPSBGQUxTRTsKLSAgICAgICAgY2hhbm5lbC0+bWF4X3ZhbHVlID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBGSVhNRSB3ZSBzaG91bGQgZmluZCBvdXQgaG93IHRvIGhhbmRsZSBWNEwyX0NUUkxfVFlQRV9CVVRUT04uCi0gICAgICAgICAgIEJVVFRPTiBjb250cm9scyBsaWtlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0UgY2FuIGp1c3QgYmUgc2V0ICgxKSBvcgotICAgICAgICAgICB1bnNldCAoMCksIGJ1dCBjYW4ndCBiZSBxdWVyaWVkICovCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGUsCi0gICAgICAgICAgICAiQ29udHJvbCB3aXRoIG5vbiBzdXBwb3J0ZWQgdHlwZSAlcyAoJXgpLCB0eXBlPSVkIiwKLSAgICAgICAgICAgIGNvbnRyb2wubmFtZSwgbiwgY29udHJvbC50eXBlKTsKLSAgICAgICAgY2hhbm5lbC0+bWluX3ZhbHVlID0gY2hhbm5lbC0+bWF4X3ZhbHVlID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgdjRsMm9iamVjdC0+Y29sb3JzID0KLSAgICAgICAgZ19saXN0X3ByZXBlbmQgKHY0bDJvYmplY3QtPmNvbG9ycywgKGdwb2ludGVyKSBjaGFubmVsKTsKLSAgfQotICB2NGwyb2JqZWN0LT5jb2xvcnMgPSBnX2xpc3RfcmV2ZXJzZSAodjRsMm9iamVjdC0+Y29sb3JzKTsKLQotICBHU1RfREVCVUdfT0JKRUNUIChlLCAiZG9uZSIpOwotICByZXR1cm4gVFJVRTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Y0bDJfZW1wdHlfbGlzdHMgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KQotewotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiZGVsZXRpbmcgZW51bWVyYXRpb25zIik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKHY0bDJvYmplY3QtPmNoYW5uZWxzLCAoR0Z1bmMpIGdfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKHY0bDJvYmplY3QtPmNoYW5uZWxzKTsKLSAgdjRsMm9iamVjdC0+Y2hhbm5lbHMgPSBOVUxMOwotCi0gIGdfbGlzdF9mb3JlYWNoICh2NGwyb2JqZWN0LT5ub3JtcywgKEdGdW5jKSBnX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlICh2NGwyb2JqZWN0LT5ub3Jtcyk7Ci0gIHY0bDJvYmplY3QtPm5vcm1zID0gTlVMTDsKLQotICBnX2xpc3RfZm9yZWFjaCAodjRsMm9iamVjdC0+Y29sb3JzLCAoR0Z1bmMpIGdfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKHY0bDJvYmplY3QtPmNvbG9ycyk7Ci0gIHY0bDJvYmplY3QtPmNvbG9ycyA9IE5VTEw7Ci0KLSAgZ19kYXRhbGlzdF9jbGVhciAoJnY0bDJvYmplY3QtPmNvbnRyb2xzKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF92NGwyX2FkanVzdF9idWZfdHlwZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QpCi17Ci0gIC8qIHdoZW4gY2FsbGluZyBnc3RfdjRsMl9vYmplY3RfbmV3IHRoZSB1c2VyIGRlY2lkZXMgdGhlIGluaXRpYWwgdHlwZQotICAgKiBzbyBhZGp1c3QgaXQgaWYgbXVsdGktcGxhbmFyIGlzIHN1cHBvcnRlZAotICAgKiB0aGUgZHJpdmVyIHNob3VsZCBtYWtlIGl0IGV4Y2x1c2l2ZS4gU28gdGhlIGRyaXZlciBzaG91bGQKLSAgICogbm90IHN1cHBvcnQgYm90aCBNUExBTkUgYW5kIG5vbi1QTEFORS4KLSAgICogQmVjYXVzZSBldmVuIHdoZW4gdXNpbmcgTVBMQU5FIGl0IHN0aWxsIHBvc3NpYmxlcyB0byB1c2UgaXQKLSAgICogaW4gYSBjb250aWd1b3VzIG1hbm5lci4gSW4gdGhpcyBjYXNlIHRoZSBmaXJzdCB2NGwyIHBsYW5lCi0gICAqIGNvbnRhaW5zIGFsbCB0aGUgZ3N0IHBsYW5lcy4KLSAgICovCi0gIHN3aXRjaCAodjRsMm9iamVjdC0+dHlwZSkgewotICAgIGNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0gICAgICBpZiAodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJgotICAgICAgICAgIChWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FIHwgVjRMMl9DQVBfVklERU9fTTJNX01QTEFORSkpIHsKLSAgICAgICAgR1NUX0RFQlVHICgiYWRqdXN0IHR5cGUgdG8gbXVsdGktcGxhbmFyIG91dHB1dCIpOwotICAgICAgICB2NGwyb2JqZWN0LT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0gICAgICBpZiAodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJgotICAgICAgICAgIChWNEwyX0NBUF9WSURFT19DQVBUVVJFX01QTEFORSB8IFY0TDJfQ0FQX1ZJREVPX00yTV9NUExBTkUpKSB7Ci0gICAgICAgIEdTVF9ERUJVRyAoImFkanVzdCB0eXBlIHRvIG11bHRpLXBsYW5hciBjYXB0dXJlIik7Ci0gICAgICAgIHY0bDJvYmplY3QtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGdzdF92NGwyX29wZW4oKToKLSAqICAgb3BlbiB0aGUgdmlkZW8gZGV2aWNlICh2NGwyb2JqZWN0LT52aWRlb2RldikKLSAqIHJldHVybiB2YWx1ZTogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWdib29sZWFuCi1nc3RfdjRsMl9vcGVuIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCkKLXsKLSAgc3RydWN0IHN0YXQgc3Q7Ci0gIGludCBsaWJ2NGwyX2ZkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJUcnlpbmcgdG8gb3BlbiBkZXZpY2UgJXMiLAotICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpOwotCi0gIEdTVF9WNEwyX0NIRUNLX05PVF9PUEVOICh2NGwyb2JqZWN0KTsKLSAgR1NUX1Y0TDJfQ0hFQ0tfTk9UX0FDVElWRSAodjRsMm9iamVjdCk7Ci0KLSAgLyogYmUgc3VyZSB3ZSBoYXZlIGEgZGV2aWNlICovCi0gIGlmICghdjRsMm9iamVjdC0+dmlkZW9kZXYpCi0gICAgdjRsMm9iamVjdC0+dmlkZW9kZXYgPSBnX3N0cmR1cCAoIi9kZXYvdmlkZW8iKTsKLQotICAvKiBjaGVjayBpZiBpdCBpcyBhIGRldmljZSAqLwotICBpZiAoc3RhdCAodjRsMm9iamVjdC0+dmlkZW9kZXYsICZzdCkgPT0gLTEpCi0gICAgZ290byBzdGF0X2ZhaWxlZDsKLQotICBpZiAoIVNfSVNDSFIgKHN0LnN0X21vZGUpKQotICAgIGdvdG8gbm9fZGV2aWNlOwotCi0gIC8qIG9wZW4gdGhlIGRldmljZSAqLwotICB2NGwyb2JqZWN0LT52aWRlb19mZCA9Ci0gICAgICBvcGVuICh2NGwyb2JqZWN0LT52aWRlb2RldiwgT19SRFdSIC8qIHwgT19OT05CTE9DSyAqLyApOwotCi0gIGlmICghR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpCi0gICAgZ290byBub3Rfb3BlbjsKLQotICBsaWJ2NGwyX2ZkID0gdjRsMl9mZF9vcGVuICh2NGwyb2JqZWN0LT52aWRlb19mZCwKLSAgICAgIFY0TDJfRU5BQkxFX0VOVU1fRk1UX0VNVUxBVElPTik7Ci0gIC8qIE5vdGUgdGhlIHY0bDJfeHh4IGZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgc28gdGhhdCBpZiB0aGV5IGdldCBwYXNzZWQgYW4KLSAgICAgdW5rbm93biBmZCwgdGhlIHdpbGwgYmVoYXZlIGV4YWN0bHkgYXMgdGhlaXIgcmVndWxhciB4eHggY291bnRlcnBhcnRzLCBzbwotICAgICBpZiB2NGwyX2ZkX29wZW4gZmFpbHMsIHdlIGNvbnRpbnVlIGFzIG5vcm1hbCAobWlzc2luZyB0aGUgbGlidjRsMiBjdXN0b20KLSAgICAgY2FtIGZvcm1hdCB0byBub3JtYWwgZm9ybWF0cyBjb252ZXJzaW9uKS4gQ2hhbmNlcyBhcmUgYmlnIHdlIHdpbGwgc3RpbGwKLSAgICAgZmFpbCB0aGVuIHRob3VnaCwgYXMgbm9ybWFsbHkgdjRsMl9mZF9vcGVuIG9ubHkgZmFpbHMgaWYgdGhlIGRldmljZSBpcyBub3QKLSAgICAgYSB2NGwyIGRldmljZS4gKi8KLSAgaWYgKGxpYnY0bDJfZmQgIT0gLTEpCi0gICAgdjRsMm9iamVjdC0+dmlkZW9fZmQgPSBsaWJ2NGwyX2ZkOwotCi0gIC8qIGdldCBjYXBhYmlsaXRpZXMsIGVycm9yIHdpbGwgYmUgcG9zdGVkICovCi0gIGlmICghZ3N0X3Y0bDJfZ2V0X2NhcGFiaWxpdGllcyAodjRsMm9iamVjdCkpCi0gICAgZ290byBlcnJvcjsKLQotICAvKiBkbyB3ZSBuZWVkIHRvIGJlIGEgY2FwdHVyZSBkZXZpY2U/ICovCi0gIGlmIChHU1RfSVNfVjRMMlNSQyAodjRsMm9iamVjdC0+ZWxlbWVudCkgJiYKLSAgICAgICEodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJiAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8Ci0gICAgICAgICAgICAgIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSkpCi0gICAgZ290byBub3RfY2FwdHVyZTsKLQotICBpZiAoR1NUX0lTX1Y0TDJTSU5LICh2NGwyb2JqZWN0LT5lbGVtZW50KSAmJgotICAgICAgISh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmIChWNEwyX0NBUF9WSURFT19PVVRQVVQgfAotICAgICAgICAgICAgICBWNEwyX0NBUF9WSURFT19PVVRQVVRfTVBMQU5FKSkpCi0gICAgZ290byBub3Rfb3V0cHV0OwotCi0gIGlmIChHU1RfSVNfVjRMMl9WSURFT19ERUMgKHY0bDJvYmplY3QtPmVsZW1lbnQpICYmCi0gICAgICAvKiBUb2RheSdzIE0yTSBkZXZpY2Ugb25seSBleHBvc2UgTTJNICovCi0gICAgICAhKCh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmIChWNEwyX0NBUF9WSURFT19NMk0gfAotICAgICAgICAgICAgICAgICAgVjRMMl9DQVBfVklERU9fTTJNX01QTEFORSkpIHx8Ci0gICAgICAgICAgLyogQnV0IGxlZ2FjeSBkcml2ZXIgbWF5IGV4cG9zZSBib3RoIENBUFRVUkUgYW5kIE9VVFBVVCAqLwotICAgICAgICAgICgodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJgotICAgICAgICAgICAgICAgICAgKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9WSURFT19DQVBUVVJFX01QTEFORSkpICYmCi0gICAgICAgICAgICAgICh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmCi0gICAgICAgICAgICAgICAgICAoVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfVklERU9fT1VUUFVUX01QTEFORSkpKSkpCi0gICAgZ290byBub3RfbTJtOwotCi0gIGdzdF92NGwyX2FkanVzdF9idWZfdHlwZSAodjRsMm9iamVjdCk7Ci0KLSAgLyogY3JlYXRlIGVudW1lcmF0aW9ucywgcG9zdHMgZXJyb3JzLiAqLwotICBpZiAoIWdzdF92NGwyX2ZpbGxfbGlzdHMgKHY0bDJvYmplY3QpKQotICAgIGdvdG8gZXJyb3I7Ci0KLSAgR1NUX0lORk9fT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LAotICAgICAgIk9wZW5lZCBkZXZpY2UgJyVzJyAoJXMpIHN1Y2Nlc3NmdWxseSIsCi0gICAgICB2NGwyb2JqZWN0LT52Y2FwLmNhcmQsIHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLQotICBpZiAodjRsMm9iamVjdC0+ZXh0cmFfY29udHJvbHMpCi0gICAgZ3N0X3Y0bDJfc2V0X2NvbnRyb2xzICh2NGwyb2JqZWN0LCB2NGwyb2JqZWN0LT5leHRyYV9jb250cm9scyk7Ci0KLSAgLyogVVZDIGRldmljZXMgYXJlIG5ldmVyIGludGVybGFjZWQsIGFuZCBkb2luZyBWSURJT0NfVFJZX0ZNVCBvbiB0aGVtCi0gICAqIGNhdXNlcyBleHBlbnNpdmUgYW5kIHNsb3cgVVNCIElPLCBzbyBkb24ndCBwcm9iZSB0aGVtIGZvciBpbnRlcmxhY2VkCi0gICAqLwotICBpZiAoIXN0cmNtcCAoKGNoYXIgKikgdjRsMm9iamVjdC0+dmNhcC5kcml2ZXIsICJ1dmN1c2IiKSkgewotICAgIHY0bDJvYmplY3QtPm5ldmVyX2ludGVybGFjZWQgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1zdGF0X2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAotICAgICAgICAoXygiQ2Fubm90IGlkZW50aWZ5IGRldmljZSAnJXMnLiIpLCB2NGwyb2JqZWN0LT52aWRlb2RldiksCi0gICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLW5vX2RldmljZToKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAotICAgICAgICAoXygiVGhpcyBpc24ndCBhIGRldmljZSAnJXMnLiIpLCB2NGwyb2JqZWN0LT52aWRlb2RldiksCi0gICAgICAgIEdTVF9FUlJPUl9TWVNURU0pOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLW5vdF9vcGVuOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBPUEVOX1JFQURfV1JJVEUsCi0gICAgICAgIChfKCJDb3VsZCBub3Qgb3BlbiBkZXZpY2UgJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4iKSwKLSAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotbm90X2NhcHR1cmU6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgKF8oIkRldmljZSAnJXMnIGlzIG5vdCBhIGNhcHR1cmUgZGV2aWNlLiIpLAotICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpLAotICAgICAgICAoIkNhcGFiaWxpdGllczogMHgleCIsIHY0bDJvYmplY3QtPmRldmljZV9jYXBzKSk7Ci0gICAgZ290byBlcnJvcjsKLSAgfQotbm90X291dHB1dDoKLSAgewotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgTk9UX0ZPVU5ELAotICAgICAgICAoXygiRGV2aWNlICclcycgaXMgbm90IGEgb3V0cHV0IGRldmljZS4iKSwKLSAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwKLSAgICAgICAgKCJDYXBhYmlsaXRpZXM6IDB4JXgiLCB2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcykpOwotICAgIGdvdG8gZXJyb3I7Ci0gIH0KLW5vdF9tMm06Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIE5PVF9GT1VORCwKLSAgICAgICAgKF8oIkRldmljZSAnJXMnIGlzIG5vdCBhIE0yTSBkZXZpY2UuIiksCi0gICAgICAgICAgICB2NGwyb2JqZWN0LT52aWRlb2RldiksCi0gICAgICAgICgiQ2FwYWJpbGl0aWVzOiAweCV4IiwgdjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMpKTsKLSAgICBnb3RvIGVycm9yOwotICB9Ci1lcnJvcjoKLSAgewotICAgIGlmIChHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkgewotICAgICAgLyogY2xvc2UgZGV2aWNlICovCi0gICAgICB2NGwyX2Nsb3NlICh2NGwyb2JqZWN0LT52aWRlb19mZCk7Ci0gICAgICB2NGwyb2JqZWN0LT52aWRlb19mZCA9IC0xOwotICAgIH0KLSAgICAvKiBlbXB0eSBsaXN0cyAqLwotICAgIGdzdF92NGwyX2VtcHR5X2xpc3RzICh2NGwyb2JqZWN0KTsKLQotICAgIHJldHVybiBGQUxTRTsKLSAgfQotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfZHVwIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgR3N0VjRsMk9iamVjdCAqIG90aGVyKQotewotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiVHJ5aW5nIHRvIGR1cCBkZXZpY2UgJXMiLAotICAgICAgb3RoZXItPnZpZGVvZGV2KTsKLQotICBHU1RfVjRMMl9DSEVDS19PUEVOIChvdGhlcik7Ci0gIEdTVF9WNEwyX0NIRUNLX05PVF9PUEVOICh2NGwyb2JqZWN0KTsKLSAgR1NUX1Y0TDJfQ0hFQ0tfTk9UX0FDVElWRSAob3RoZXIpOwotICBHU1RfVjRMMl9DSEVDS19OT1RfQUNUSVZFICh2NGwyb2JqZWN0KTsKLQotICB2NGwyb2JqZWN0LT52Y2FwID0gb3RoZXItPnZjYXA7Ci0gIHY0bDJvYmplY3QtPmRldmljZV9jYXBzID0gb3RoZXItPmRldmljZV9jYXBzOwotICBnc3RfdjRsMl9hZGp1c3RfYnVmX3R5cGUgKHY0bDJvYmplY3QpOwotCi0gIHY0bDJvYmplY3QtPnZpZGVvX2ZkID0gdjRsMl9kdXAgKG90aGVyLT52aWRlb19mZCk7Ci0gIGlmICghR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpCi0gICAgZ290byBub3Rfb3BlbjsKLQotICBnX2ZyZWUgKHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLSAgdjRsMm9iamVjdC0+dmlkZW9kZXYgPSBnX3N0cmR1cCAob3RoZXItPnZpZGVvZGV2KTsKLQotICBHU1RfSU5GT19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAiQ2xvbmVkIGRldmljZSAnJXMnICglcykgc3VjY2Vzc2Z1bGx5IiwKLSAgICAgIHY0bDJvYmplY3QtPnZjYXAuY2FyZCwgdjRsMm9iamVjdC0+dmlkZW9kZXYpOwotCi0gIHY0bDJvYmplY3QtPm5ldmVyX2ludGVybGFjZWQgPSBvdGhlci0+bmV2ZXJfaW50ZXJsYWNlZDsKLQotICByZXR1cm4gVFJVRTsKLQotbm90X29wZW46Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIE9QRU5fUkVBRF9XUklURSwKLSAgICAgICAgKF8oIkNvdWxkIG5vdCBkdXAgZGV2aWNlICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIiksCi0gICAgICAgICAgICB2NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfY2xvc2UoKToKLSAqICAgY2xvc2UgdGhlIHZpZGVvIGRldmljZSAodjRsMm9iamVjdC0+dmlkZW9fZmQpCi0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfY2xvc2UgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0KQotewotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiVHJ5aW5nIHRvIGNsb3NlICVzIiwKLSAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLQotICBHU1RfVjRMMl9DSEVDS19PUEVOICh2NGwyb2JqZWN0KTsKLSAgR1NUX1Y0TDJfQ0hFQ0tfTk9UX0FDVElWRSAodjRsMm9iamVjdCk7Ci0KLSAgLyogY2xvc2UgZGV2aWNlICovCi0gIHY0bDJfY2xvc2UgKHY0bDJvYmplY3QtPnZpZGVvX2ZkKTsKLSAgdjRsMm9iamVjdC0+dmlkZW9fZmQgPSAtMTsKLQotICAvKiBlbXB0eSBsaXN0cyAqLwotICBnc3RfdjRsMl9lbXB0eV9saXN0cyAodjRsMm9iamVjdCk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfZ2V0X25vcm0oKQotICogICBHZXQgdGhlIG5vcm0gb2YgdGhlIGN1cnJlbnQgZGV2aWNlCi0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfZ2V0X25vcm0gKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCB2NGwyX3N0ZF9pZCAqIG5vcm0pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJnZXR0aW5nIG5vcm0iKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19HX1NURCwgbm9ybSkgPCAwKQotICAgIGdvdG8gc3RkX2ZhaWxlZDsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXN0ZF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfREVCVUcgKCJGYWlsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IG5vcm0gZm9yIGRldmljZSAlcyIsCi0gICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBnc3RfdjRsMl9zZXRfbm9ybSgpCi0gKiAgIFNldCB0aGUgbm9ybSBvZiB0aGUgY3VycmVudCBkZXZpY2UKLSAqIHJldHVybiB2YWx1ZTogVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWdib29sZWFuCi1nc3RfdjRsMl9zZXRfbm9ybSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIHY0bDJfc3RkX2lkIG5vcm0pCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJ0cnlpbmcgdG8gc2V0IG5vcm0gdG8gIgotICAgICAgIiUiIEdfR0lOVDY0X01PRElGSUVSICJ4IiwgKGd1aW50NjQpIG5vcm0pOwotCi0gIGlmICghR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX1NfU1RELCAmbm9ybSkgPCAwKQotICAgIGdvdG8gc3RkX2ZhaWxlZDsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLXN0ZF9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gc2V0IG5vcm0gZm9yIGRldmljZSAnJXMnLiIpLAotICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfZ2V0X2ZyZXF1ZW5jeSgpOgotICogICBnZXQgdGhlIGN1cnJlbnQgZnJlcXVlbmN5Ci0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfZ2V0X2ZyZXF1ZW5jeSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgZ2ludCB0dW5lcm51bSwgZ3Vsb25nICogZnJlcXVlbmN5KQotewotICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZnJlcSA9IHsgMCwgfTsKLQotICBHc3RUdW5lckNoYW5uZWwgKmNoYW5uZWw7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImdldHRpbmcgY3VycmVudCB0dW5lciBmcmVxdWVuY3kiKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBjaGFubmVsID0gZ3N0X3R1bmVyX2dldF9jaGFubmVsIChHU1RfVFVORVIgKHY0bDJvYmplY3QtPmVsZW1lbnQpKTsKLQotICBmcmVxLnR1bmVyID0gdHVuZXJudW07Ci0gIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0dfRlJFUVVFTkNZLCAmZnJlcSkgPCAwKQotICAgIGdvdG8gZnJlcV9mYWlsZWQ7Ci0KLSAgKmZyZXF1ZW5jeSA9IGZyZXEuZnJlcXVlbmN5ICogY2hhbm5lbC0+ZnJlcV9tdWx0aXBsaWNhdG9yOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotZnJlcV9mYWlsZWQ6Ci0gIHsKLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgdHVuZXIgZnJlcXVlbmN5IGZvciBkZXZpY2UgJyVzJy4iKSwKLSAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSgpOgotICogICBzZXQgZnJlcXVlbmN5Ci0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfc2V0X2ZyZXF1ZW5jeSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgZ2ludCB0dW5lcm51bSwgZ3Vsb25nIGZyZXF1ZW5jeSkKLXsKLSAgc3RydWN0IHY0bDJfZnJlcXVlbmN5IGZyZXEgPSB7IDAsIH07Ci0KLSAgR3N0VHVuZXJDaGFubmVsICpjaGFubmVsOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsCi0gICAgICAic2V0dGluZyBjdXJyZW50IHR1bmVyIGZyZXF1ZW5jeSB0byAlbHUiLCBmcmVxdWVuY3kpOwotCi0gIGlmICghR1NUX1Y0TDJfSVNfT1BFTiAodjRsMm9iamVjdCkpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIGNoYW5uZWwgPSBnc3RfdHVuZXJfZ2V0X2NoYW5uZWwgKEdTVF9UVU5FUiAodjRsMm9iamVjdC0+ZWxlbWVudCkpOwotCi0gIGZyZXEudHVuZXIgPSB0dW5lcm51bTsKLSAgLyogZmlsbCBpbiB0eXBlIC0gaWdub3JlIGVycm9yICovCi0gICh2b2lkKSB2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX0dfRlJFUVVFTkNZLCAmZnJlcSk7Ci0gIGZyZXEuZnJlcXVlbmN5ID0gZnJlcXVlbmN5IC8gY2hhbm5lbC0+ZnJlcV9tdWx0aXBsaWNhdG9yOwotCi0gIGlmICh2NGwyX2lvY3RsICh2NGwyb2JqZWN0LT52aWRlb19mZCwgVklESU9DX1NfRlJFUVVFTkNZLCAmZnJlcSkgPCAwKQotICAgIGdvdG8gZnJlcV9mYWlsZWQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1mcmVxX2ZhaWxlZDoKLSAgewotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIkZhaWxlZCB0byBzZXQgY3VycmVudCB0dW5lciBmcmVxdWVuY3kgZm9yIGRldmljZSAnJXMnIHRvICVsdSBIei4iKSwKLSAgICAgICAgICAgIHY0bDJvYmplY3QtPnZpZGVvZGV2LCBmcmVxdWVuY3kpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfc2lnbmFsX3N0cmVuZ3RoKCk6Ci0gKiAgIGdldCB0aGUgc3RyZW5ndGggb2YgdGhlIHNpZ25hbCBvbiB0aGUgY3VycmVudCBpbnB1dAotICogcmV0dXJuIHZhbHVlOiBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG9uIGVycm9yCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZ2Jvb2xlYW4KLWdzdF92NGwyX3NpZ25hbF9zdHJlbmd0aCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgZ2ludCB0dW5lcm51bSwgZ3Vsb25nICogc2lnbmFsX3N0cmVuZ3RoKQotewotICBzdHJ1Y3QgdjRsMl90dW5lciB0dW5lciA9IHsgMCwgfTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAidHJ5aW5nIHRvIGdldCBzaWduYWwgc3RyZW5ndGgiKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICB0dW5lci5pbmRleCA9IHR1bmVybnVtOwotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19HX1RVTkVSLCAmdHVuZXIpIDwgMCkKLSAgICBnb3RvIHR1bmVyX2ZhaWxlZDsKLQotICAqc2lnbmFsX3N0cmVuZ3RoID0gdHVuZXIuc2lnbmFsOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotdHVuZXJfZmFpbGVkOgotICB7Ci0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRmFpbGVkIHRvIGdldCBzaWduYWwgc3RyZW5ndGggZm9yIGRldmljZSAnJXMnLiIpLAotICAgICAgICAgICAgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfZ2V0X2F0dHJpYnV0ZSgpOgotICogICB0cnkgdG8gZ2V0IHRoZSB2YWx1ZSBvZiBvbmUgc3BlY2lmaWMgYXR0cmlidXRlCi0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfZ2V0X2F0dHJpYnV0ZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgaW50IGF0dHJpYnV0ZV9udW0sIGludCAqdmFsdWUpCi17Ci0gIHN0cnVjdCB2NGwyX2NvbnRyb2wgY29udHJvbCA9IHsgMCwgfTsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAiZ2V0dGluZyB2YWx1ZSBvZiBhdHRyaWJ1dGUgJWQiLAotICAgICAgYXR0cmlidXRlX251bSk7Ci0KLSAgaWYgKCFHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgY29udHJvbC5pZCA9IGF0dHJpYnV0ZV9udW07Ci0KLSAgaWYgKHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfR19DVFJMLCAmY29udHJvbCkgPCAwKQotICAgIGdvdG8gY3RybF9mYWlsZWQ7Ci0KLSAgKnZhbHVlID0gY29udHJvbC52YWx1ZTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWN0cmxfZmFpbGVkOgotICB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LAotICAgICAgICBfKCJGYWlsZWQgdG8gZ2V0IHZhbHVlIGZvciBjb250cm9sICVkIG9uIGRldmljZSAnJXMnLiIpLAotICAgICAgICBhdHRyaWJ1dGVfbnVtLCB2NGwyb2JqZWN0LT52aWRlb2Rldik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSgpOgotICogICB0cnkgdG8gc2V0IHRoZSB2YWx1ZSBvZiBvbmUgc3BlY2lmaWMgYXR0cmlidXRlCi0gKiByZXR1cm4gdmFsdWU6IFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZXJyb3IKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1nYm9vbGVhbgotZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZSAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsCi0gICAgaW50IGF0dHJpYnV0ZV9udW0sIGNvbnN0IGludCB2YWx1ZSkKLXsKLSAgc3RydWN0IHY0bDJfY29udHJvbCBjb250cm9sID0geyAwLCB9OwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJzZXR0aW5nIHZhbHVlIG9mIGF0dHJpYnV0ZSAlZCB0byAlZCIsCi0gICAgICBhdHRyaWJ1dGVfbnVtLCB2YWx1ZSk7Ci0KLSAgaWYgKCFHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgY29udHJvbC5pZCA9IGF0dHJpYnV0ZV9udW07Ci0gIGNvbnRyb2wudmFsdWUgPSB2YWx1ZTsKLSAgaWYgKHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfU19DVFJMLCAmY29udHJvbCkgPCAwKQotICAgIGdvdG8gY3RybF9mYWlsZWQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1jdHJsX2ZhaWxlZDoKLSAgewotICAgIEdTVF9XQVJOSU5HX09CSkVDVCAodjRsMm9iamVjdCwKLSAgICAgICAgXygiRmFpbGVkIHRvIHNldCB2YWx1ZSAlZCBmb3IgY29udHJvbCAlZCBvbiBkZXZpY2UgJyVzJy4iKSwKLSAgICAgICAgdmFsdWUsIGF0dHJpYnV0ZV9udW0sIHY0bDJvYmplY3QtPnZpZGVvZGV2KTsKLSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1zZXRfY29udHJvbCAoR1F1YXJrIGZpZWxkX2lkLCBjb25zdCBHVmFsdWUgKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0ID0gdXNlcl9kYXRhOwotICBHUXVhcmsgbm9ybWFsaXNlZF9maWVsZF9pZDsKLSAgZ3BvaW50ZXIgKmQ7Ci0KLSAgLyogMzIgYnl0ZXMgaXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgYSBjb250cm9sIG5hbWUgYWNjb3JkaW5nIHRvIHY0bDIgKi8KLSAgZ2NoYXIgbmFtZVszMl07Ci0KLSAgLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IGluIHRoZSBwYXN0IEdTdHJlYW1lciB3b3VsZCBub3JtYWxpc2Ugc3RyaW5ncyBpbgotICAgICBhIHN1YnRseSBkaWZmZXJlbnQgd2F5IHRvIHY0bDItY3RsLiAgZS5nLiB0aGUga2VybmVsJ3MgIkZvY3VzIChhYnNvbHV0ZSkiCi0gICAgIHdvdWxkIGJlY29tZSAiZm9jdXNfX2Fic29sdXRlXyIgd2hlcmVhcyBub3cgaXQgYmVjb21lcyAiZm9jdXNfYWJzb2x1dGUiLgotICAgICBQbGVhc2UgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaW4gR1N0cmVhbWVyIDEuNSBmb3IgMS42ICovCi0gIHN0cm5jcHkgKG5hbWUsIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZF9pZCksIHNpemVvZiAobmFtZSkpOwotICBuYW1lWzMxXSA9ICdcMCc7Ci0gIGdzdF92NGwyX25vcm1hbGlzZV9jb250cm9sX25hbWUgKG5hbWUpOwotICBub3JtYWxpc2VkX2ZpZWxkX2lkID0gZ19xdWFya19mcm9tX3N0cmluZyAobmFtZSk7Ci0gIGlmIChub3JtYWxpc2VkX2ZpZWxkX2lkICE9IGZpZWxkX2lkKQotICAgIGdfd2FybmluZyAoIkluIEdTdHJlYW1lciAxLjQgdGhlIHdheSBWNEwyIGNvbnRyb2wgbmFtZXMgd2VyZSBub3JtYWxpc2VkICIKLSAgICAgICAgImNoYW5nZWQuICBJbnN0ZWFkIG9mIHNldHRpbmcgXCIlc1wiIHBsZWFzZSB1c2UgXCIlc1wiLiAgVGhlIGZvcm1lciBpcyAiCi0gICAgICAgICJkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBHU3RyZWFtZXIiLAotICAgICAgICBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpLCBuYW1lKTsKLSAgZmllbGRfaWQgPSBub3JtYWxpc2VkX2ZpZWxkX2lkOwotCi0gIGQgPSBnX2RhdGFsaXN0X2lkX2dldF9kYXRhICgmdjRsMm9iamVjdC0+Y29udHJvbHMsIGZpZWxkX2lkKTsKLSAgaWYgKCFkKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LAotICAgICAgICAiQ29udHJvbCAnJXMnIGRvZXMgbm90IGV4aXN0IG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0eXBlLiIsCi0gICAgICAgIGdfcXVhcmtfdG9fc3RyaW5nIChmaWVsZF9pZCkpOwotICAgIHJldHVybiBUUlVFOwotICB9Ci0gIGlmICghR19WQUxVRV9IT0xEUyAodmFsdWUsIEdfVFlQRV9JTlQpKSB7Ci0gICAgR1NUX1dBUk5JTkdfT0JKRUNUICh2NGwyb2JqZWN0LAotICAgICAgICAiJ2ludCcgdmFsdWUgZXhwZWN0ZWQgZm9yIGNvbnRyb2wgJyVzJy4iLCBnX3F1YXJrX3RvX3N0cmluZyAoZmllbGRfaWQpKTsKLSAgICByZXR1cm4gVFJVRTsKLSAgfQotICBnc3RfdjRsMl9zZXRfYXR0cmlidXRlICh2NGwyb2JqZWN0LCBHUE9JTlRFUl9UT19JTlQgKGQpLAotICAgICAgZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSkpOwotICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4KLWdzdF92NGwyX3NldF9jb250cm9scyAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIEdzdFN0cnVjdHVyZSAqIGNvbnRyb2xzKQotewotICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9mb3JlYWNoIChjb250cm9scywgc2V0X2NvbnRyb2wsIHY0bDJvYmplY3QpOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfZ2V0X2lucHV0IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgZ2ludCAqIGlucHV0KQotewotICBnaW50IG47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgInRyeWluZyB0byBnZXQgaW5wdXQiKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19HX0lOUFVULCAmbikgPCAwKQotICAgIGdvdG8gaW5wdXRfZmFpbGVkOwotCi0gICppbnB1dCA9IG47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgImlucHV0OiAlZCIsIG4pOwotCi0gIHJldHVybiBUUlVFOwotCi0gIC8qIEVSUk9SUyAqLwotaW5wdXRfZmFpbGVkOgotICBpZiAodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJiBWNEwyX0NBUF9UVU5FUikgewotICAgIC8qIG9ubHkgZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSBpZiBkcml2ZXIgYWN0dWFsbHkgY2xhaW1zIHRvIGhhdmUgdHVuZXIKLSAgICAgKiBzdXBwb3J0Ci0gICAgICovCi0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRmFpbGVkIHRvIGdldCBjdXJyZW50IGlucHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiKSwgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9zZXRfaW5wdXQgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LCBnaW50IGlucHV0KQotewotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAidHJ5aW5nIHRvIHNldCBpbnB1dCB0byAlZCIsIGlucHV0KTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19TX0lOUFVULCAmaW5wdXQpIDwgMCkKLSAgICBnb3RvIGlucHV0X2ZhaWxlZDsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLWlucHV0X2ZhaWxlZDoKLSAgaWYgKHY0bDJvYmplY3QtPmRldmljZV9jYXBzICYgVjRMMl9DQVBfVFVORVIpIHsKLSAgICAvKiBvbmx5IGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgZHJpdmVyIGFjdHVhbGx5IGNsYWltcyB0byBoYXZlIHR1bmVyCi0gICAgICogc3VwcG9ydAotICAgICAqLwotICAgIEdTVF9FTEVNRU5UX1dBUk5JTkcgKHY0bDJvYmplY3QtPmVsZW1lbnQsIFJFU09VUkNFLCBTRVRUSU5HUywKLSAgICAgICAgKF8oIkZhaWxlZCB0byBzZXQgaW5wdXQgJWQgb24gZGV2aWNlICVzLiIpLAotICAgICAgICAgICAgaW5wdXQsIHY0bDJvYmplY3QtPnZpZGVvZGV2KSwgR1NUX0VSUk9SX1NZU1RFTSk7Ci0gIH0KLSAgcmV0dXJuIEZBTFNFOwotfQotCi1nYm9vbGVhbgotZ3N0X3Y0bDJfZ2V0X291dHB1dCAoR3N0VjRsMk9iamVjdCAqIHY0bDJvYmplY3QsIGdpbnQgKiBvdXRwdXQpCi17Ci0gIGdpbnQgbjsKLQotICBHU1RfREVCVUdfT0JKRUNUICh2NGwyb2JqZWN0LT5lbGVtZW50LCAidHJ5aW5nIHRvIGdldCBvdXRwdXQiKTsKLQotICBpZiAoIUdTVF9WNEwyX0lTX09QRU4gKHY0bDJvYmplY3QpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAodjRsMl9pb2N0bCAodjRsMm9iamVjdC0+dmlkZW9fZmQsIFZJRElPQ19HX09VVFBVVCwgJm4pIDwgMCkKLSAgICBnb3RvIG91dHB1dF9mYWlsZWQ7Ci0KLSAgKm91dHB1dCA9IG47Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAodjRsMm9iamVjdC0+ZWxlbWVudCwgIm91dHB1dDogJWQiLCBuKTsKLQotICByZXR1cm4gVFJVRTsKLQotICAvKiBFUlJPUlMgKi8KLW91dHB1dF9mYWlsZWQ6Ci0gIGlmICh2NGwyb2JqZWN0LT5kZXZpY2VfY2FwcyAmIFY0TDJfQ0FQX1RVTkVSKSB7Ci0gICAgLyogb25seSBnaXZlIGEgd2FybmluZyBtZXNzYWdlIGlmIGRyaXZlciBhY3R1YWxseSBjbGFpbXMgdG8gaGF2ZSB0dW5lcgotICAgICAqIHN1cHBvcnQKLSAgICAgKi8KLSAgICBHU1RfRUxFTUVOVF9XQVJOSU5HICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCi0gICAgICAgIChfKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgb3V0cHV0IG9uIGRldmljZSAnJXMnLiBNYXkgYmUgaXQgaXMgYSByYWRpbyBkZXZpY2UiKSwgdjRsMm9iamVjdC0+dmlkZW9kZXYpLCBHU1RfRVJST1JfU1lTVEVNKTsKLSAgfQotICByZXR1cm4gRkFMU0U7Ci19Ci0KLWdib29sZWFuCi1nc3RfdjRsMl9zZXRfb3V0cHV0IChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwgZ2ludCBvdXRwdXQpCi17Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHY0bDJvYmplY3QtPmVsZW1lbnQsICJ0cnlpbmcgdG8gc2V0IG91dHB1dCB0byAlZCIsIG91dHB1dCk7Ci0KLSAgaWYgKCFHU1RfVjRMMl9JU19PUEVOICh2NGwyb2JqZWN0KSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgaWYgKHY0bDJfaW9jdGwgKHY0bDJvYmplY3QtPnZpZGVvX2ZkLCBWSURJT0NfU19PVVRQVVQsICZvdXRwdXQpIDwgMCkKLSAgICBnb3RvIG91dHB1dF9mYWlsZWQ7Ci0KLSAgcmV0dXJuIFRSVUU7Ci0KLSAgLyogRVJST1JTICovCi1vdXRwdXRfZmFpbGVkOgotICBpZiAodjRsMm9iamVjdC0+ZGV2aWNlX2NhcHMgJiBWNEwyX0NBUF9UVU5FUikgewotICAgIC8qIG9ubHkgZ2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSBpZiBkcml2ZXIgYWN0dWFsbHkgY2xhaW1zIHRvIGhhdmUgdHVuZXIKLSAgICAgKiBzdXBwb3J0Ci0gICAgICovCi0gICAgR1NUX0VMRU1FTlRfV0FSTklORyAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoXygiRmFpbGVkIHRvIHNldCBvdXRwdXQgJWQgb24gZGV2aWNlICVzLiIpLAotICAgICAgICAgICAgb3V0cHV0LCB2NGwyb2JqZWN0LT52aWRlb2RldiksIEdTVF9FUlJPUl9TWVNURU0pOwotICB9Ci0gIHJldHVybiBGQUxTRTsKLX0KZGlmZiAtLWdpdCBhL3N5cy92NGwyL3Y0bDJfY2FsbHMuaCBiL3N5cy92NGwyL3Y0bDJfY2FsbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQzN2ViZi4uMDAwMDAwMAotLS0gYS9zeXMvdjRsMi92NGwyX2NhbGxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgICAgICAgICAgICAgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkLmxpbWFAaW5kdC5vcmcuYnI+Ci0gKgotICogdjRsMl9jYWxscy5oIC0gZ2VuZXJpYyBWNEwyIGNhbGxzIGhhbmRsaW5nCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX1Y0TDJfQ0FMTFNfSF9fCi0jZGVmaW5lIF9fVjRMMl9DQUxMU19IX18KLQotI2luY2x1ZGUgImdzdHY0bDJvYmplY3QuaCIKLQotI2lmZGVmIEhBVkVfTElCVjRMMgotIyAgaW5jbHVkZSA8bGlidjRsMi5oPgotI2Vsc2UKLSMgIGluY2x1ZGUgImV4dC92aWRlb2RldjIuaCIKLSMgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgotIyAgaW5jbHVkZSA8c3lzL21tYW4uaD4KLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotIyAgZGVmaW5lIHY0bDJfZmRfb3BlbihmZCwgZmxhZ3MpIChmZCkKLSMgIGRlZmluZSB2NGwyX2Nsb3NlICAgIGNsb3NlCi0jICBkZWZpbmUgdjRsMl9kdXAgICAgICBkdXAKLSMgIGRlZmluZSB2NGwyX2lvY3RsICAgIGlvY3RsCi0jICBkZWZpbmUgdjRsMl9yZWFkICAgICByZWFkCi0jICBkZWZpbmUgdjRsMl9tbWFwICAgICBtbWFwCi0jICBkZWZpbmUgdjRsMl9tdW5tYXAgICBtdW5tYXAKLSNlbmRpZgotCi0jZGVmaW5lIEdTVF9WNEwyX0lTX09WRVJMQVkodjRsMm9iamVjdCkgXAotICAodjRsMm9iamVjdC0+dmNhcC5jYXBhYmlsaXRpZXMgJiBWNEwyX0NBUF9WSURFT19PVkVSTEFZKQotCi0vKiBjaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCB2NGx2NGwyb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gb3BlbigpJ2VkIG9yIG5vdCAqLwotI2RlZmluZSBHU1RfVjRMMl9DSEVDS19PUEVOKHY0bDJvYmplY3QpCQkJCVwKLSAgaWYgKCFHU1RfVjRMMl9JU19PUEVOKHY0bDJvYmplY3QpKQkJCQlcCi0gIHsJCQkJCQkJCVwKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLAlcCi0gICAgICAoXygiRGV2aWNlIGlzIG5vdCBvcGVuLiIpKSwgKE5VTEwpKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGQUxTRTsJCQkJCQlcCi0gIH0KLQotLyogY2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgdjRsdjRsMm9iamVjdCBpcyBjbG9zZSgpJ2VkIG9yIHdoZXRoZXIgaXQgaXMgc3RpbGwgb3BlbiAqLwotI2RlZmluZSBHU1RfVjRMMl9DSEVDS19OT1RfT1BFTih2NGwyb2JqZWN0KQkJCVwKLSAgaWYgKEdTVF9WNEwyX0lTX09QRU4odjRsMm9iamVjdCkpCQkJCVwKLSAgewkJCQkJCQkJXAotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsCVwKLSAgICAgIChfKCJEZXZpY2UgaXMgb3Blbi4iKSksIChOVUxMKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZBTFNFOwkJCQkJCVwKLSAgfQotCi0vKiBjaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCB2NGx2NGwyb2JqZWN0IGRvZXMgdmlkZW8gb3ZlcmxheSAqLwotI2RlZmluZSBHU1RfVjRMMl9DSEVDS19PVkVSTEFZKHY0bDJvYmplY3QpCQkJXAotICBpZiAoIUdTVF9WNEwyX0lTX09WRVJMQVkodjRsMm9iamVjdCkpCQkJCVwKLSAgewkJCQkJCQkJXAotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsIFwKLSAgICAgIChOVUxMKSwgKCJEZXZpY2UgY2Fubm90IGhhbmRsZSBvdmVybGF5IikpOyAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZBTFNFOwkJCQkJCVwKLSAgfQotCi0vKiBjaGVja3Mgd2hldGhlciB3ZSdyZSBpbiBjYXB0dXJlIG1vZGUgb3Igbm90ICovCi0jZGVmaW5lIEdTVF9WNEwyX0NIRUNLX0FDVElWRSh2NGwyb2JqZWN0KQkJCVwKLSAgaWYgKCFHU1RfVjRMMl9JU19BQ1RJVkUodjRsMm9iamVjdCkpCQkJCVwKLSAgewkJCQkJCQkJXAotICAgIEdTVF9FTEVNRU5UX0VSUk9SICh2NGwyb2JqZWN0LT5lbGVtZW50LCBSRVNPVVJDRSwgU0VUVElOR1MsIFwKLSAgICAgIChOVUxMKSwgKCJEZXZpY2UgaXMgbm90IGluIHN0cmVhbWluZyBtb2RlIikpOyAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIEZBTFNFOwkJCQkJCVwKLSAgfQotCi0vKiBjaGVja3Mgd2hldGhlciB3ZSdyZSBvdXQgb2YgY2FwdHVyZSBtb2RlIG9yIG5vdCAqLwotI2RlZmluZSBHU1RfVjRMMl9DSEVDS19OT1RfQUNUSVZFKHY0bDJvYmplY3QpCQkJXAotICBpZiAoR1NUX1Y0TDJfSVNfQUNUSVZFKHY0bDJvYmplY3QpKQkJCQlcCi0gIHsJCQkJCQkJCVwKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAodjRsMm9iamVjdC0+ZWxlbWVudCwgUkVTT1VSQ0UsIFNFVFRJTkdTLCBcCi0gICAgICAoTlVMTCksICgiRGV2aWNlIGlzIGluIHN0cmVhbWluZyBtb2RlIikpOyAgICAgICAgICAgICAgICAgXAotICAgIHJldHVybiBGQUxTRTsJCQkJCQlcCi0gIH0KLQotCi0vKiBvcGVuL2Nsb3NlIHRoZSBkZXZpY2UgKi8KLWdib29sZWFuCWdzdF92NGwyX29wZW4JCQkoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCk7Ci1nYm9vbGVhbglnc3RfdjRsMl9kdXAJCQkoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCwgR3N0VjRsMk9iamVjdCAqb3RoZXIpOwotZ2Jvb2xlYW4JZ3N0X3Y0bDJfY2xvc2UJCQkoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCk7Ci0KLS8qIG5vcm0vaW5wdXQvb3V0cHV0ICovCi1nYm9vbGVhbglnc3RfdjRsMl9nZXRfbm9ybQkJKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsCi0JCQkJCQkgdjRsMl9zdGRfaWQgICAgKm5vcm0pOwotZ2Jvb2xlYW4JZ3N0X3Y0bDJfc2V0X25vcm0JCShHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LAotCQkJCQkJIHY0bDJfc3RkX2lkICAgICBub3JtKTsKLWdib29sZWFuICAgICAgICBnc3RfdjRsMl9nZXRfaW5wdXQgICAgICAgICAgICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICogaW5wdXQpOwotZ2Jvb2xlYW4gICAgICAgIGdzdF92NGwyX3NldF9pbnB1dCAgICAgICAgICAgICAgKEdzdFY0bDJPYmplY3QgKiB2NGwyb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgaW5wdXQpOwotZ2Jvb2xlYW4JZ3N0X3Y0bDJfZ2V0X291dHB1dAkJKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsCi0JCQkJCQkgZ2ludCAgICAgICAgICAgKm91dHB1dCk7Ci1nYm9vbGVhbglnc3RfdjRsMl9zZXRfb3V0cHV0CQkoR3N0VjRsMk9iamVjdCAqdjRsMm9iamVjdCwKLQkJCQkJCSBnaW50ICAgICAgICAgICAgb3V0cHV0KTsKLQotLyogZnJlcXVlbmN5IGNvbnRyb2wgKi8KLWdib29sZWFuCWdzdF92NGwyX2dldF9mcmVxdWVuY3kJCShHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LAotCQkJCQkJIGdpbnQgICAgICAgICAgICB0dW5lcm51bSwKLQkJCQkJCSBndWxvbmcgICAgICAgICAqZnJlcXVlbmN5KTsKLWdib29sZWFuCWdzdF92NGwyX3NldF9mcmVxdWVuY3kJCShHc3RWNGwyT2JqZWN0ICp2NGwyb2JqZWN0LAotCQkJCQkJIGdpbnQgICAgICAgICAgICB0dW5lcm51bSwKLQkJCQkJIAkgZ3Vsb25nICAgICAgICAgIGZyZXF1ZW5jeSk7Ci1nYm9vbGVhbglnc3RfdjRsMl9zaWduYWxfc3RyZW5ndGgJKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsCi0JCQkJCQkgZ2ludCAgICAgICAgICAgIHR1bmVybnVtLAotCQkJCQkJIGd1bG9uZyAgICAgICAgICpzaWduYWwpOwotCi0vKiBhdHRyaWJ1dGUgY29udHJvbCAqLwotZ2Jvb2xlYW4JZ3N0X3Y0bDJfZ2V0X2F0dHJpYnV0ZQkJKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsCi0JCQkJCQkgaW50ICAgICAgICAgICAgIGF0dHJpYnV0ZSwKLQkJCQkJCSBpbnQgICAgICAgICAgICAqdmFsdWUpOwotZ2Jvb2xlYW4JZ3N0X3Y0bDJfc2V0X2F0dHJpYnV0ZQkJKEdzdFY0bDJPYmplY3QgKnY0bDJvYmplY3QsCi0JCQkJCQkgaW50ICAgICAgICAgICAgIGF0dHJpYnV0ZSwKLQkJCQkJCSBjb25zdCBpbnQgICAgICAgdmFsdWUpOwotCi1nYm9vbGVhbglnc3RfdjRsMl9zZXRfY29udHJvbHMJCShHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCwKLQkJCQkJCSBHc3RTdHJ1Y3R1cmUgKiBjb250cm9scyk7Ci0KLWdib29sZWFuICAgICAgICBnc3RfdjRsMl9nZXRfY2FwYWJpbGl0aWVzICAgICAgIChHc3RWNGwyT2JqZWN0ICogdjRsMm9iamVjdCk7Ci0KLQotI2RlZmluZSBMT0dfQ0FQUyhvYmosIGNhcHMpIEdTVF9ERUJVR19PQkpFQ1QgKG9iaiwgIiVzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgI2NhcHMsIGNhcHMpCi0KLSNlbmRpZiAvKiBfX1Y0TDJfQ0FMTFNfSF9fICovCmRpZmYgLS1naXQgYS9zeXMvd2F2ZWZvcm0vTWFrZWZpbGUuYW0gYi9zeXMvd2F2ZWZvcm0vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZGM3YzQuLjAwMDAwMDAKLS0tIGEvc3lzL3dhdmVmb3JtL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0d2F2ZWZvcm1zaW5rLmxhCi0KLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9TT1VSQ0VTID0gIGdzdHdhdmVmb3Jtc2luay5jIGdzdHdhdmVmb3JtcGx1Z2luLmMKLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0gICAgICAgICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpCi1saWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0gICAgICAgIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLSAgICAgICAgJChHU1RfQkFTRV9MSUJTKSBcCi0JJChHU1RfTElCUykgXAotCS1sd2lubW0KLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3R3YXZlZm9ybXNpbmsuaAotCmRpZmYgLS1naXQgYS9zeXMvd2F2ZWZvcm0vTWFrZWZpbGUuaW4gYi9zeXMvd2F2ZWZvcm0vTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNmU5ZDkuLjAwMDAwMDAKLS0tIGEvc3lzL3dhdmVmb3JtL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTI3ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHN5cy93YXZlZm9ybQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2xpYmdzdHdhdmVmb3Jtc2lua19sYV9PQkpFQ1RTID0gIFwKLQlsaWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1zaW5rLmxvIFwKLQlsaWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1wbHVnaW4ubG8KLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9PQkpFQ1RTID0gJChhbV9saWJnc3R3YXZlZm9ybXNpbmtfbGFfT0JKRUNUUykKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKGxpYmdzdHdhdmVmb3Jtc2lua19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxpYmdzdHdhdmVmb3Jtc2lua19sYV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChsaWJnc3R3YXZlZm9ybXNpbmtfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGxpYmdzdHdhdmVmb3Jtc2lua19sYV9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLUhFQURFUlMgPSAkKG5vaW5zdF9IRUFERVJTKQotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1wbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJnc3R3YXZlZm9ybXNpbmsubGEKLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9TT1VSQ0VTID0gZ3N0d2F2ZWZvcm1zaW5rLmMgZ3N0d2F2ZWZvcm1wbHVnaW4uYwotbGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpIFwKLSAgICAgICAgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLQotbGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0xJQkFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotICAgICAgICAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0gICAgICAgICQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0xJQlMpIFwKLQktbHdpbm1tCi0KLWxpYmdzdHdhdmVmb3Jtc2lua19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0d2F2ZWZvcm1zaW5rLmgKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHN5cy93YXZlZm9ybS9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSBzeXMvd2F2ZWZvcm0vTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R3YXZlZm9ybXNpbmsubGE6ICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX09CSkVDVFMpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R3YXZlZm9ybXNpbmtfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHdhdmVmb3Jtc2lua19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX09CSkVDVFMpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0d2F2ZWZvcm1zaW5rX2xhLWdzdHdhdmVmb3JtcGx1Z2luLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0d2F2ZWZvcm1zaW5rX2xhLWdzdHdhdmVmb3Jtc2luay5QbG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotbGliZ3N0d2F2ZWZvcm1zaW5rX2xhLWdzdHdhdmVmb3Jtc2luay5sbzogZ3N0d2F2ZWZvcm1zaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1zaW5rLmxvIC1NRCAtTVAgLU1GICQoREVQRElSKS9saWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1zaW5rLlRwbyAtYyAtbyBsaWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1zaW5rLmxvIGB0ZXN0IC1mICdnc3R3YXZlZm9ybXNpbmsuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2ZWZvcm1zaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xpYmdzdHdhdmVmb3Jtc2lua19sYS1nc3R3YXZlZm9ybXNpbmsuVHBvICQoREVQRElSKS9saWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1zaW5rLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dzdHdhdmVmb3Jtc2luay5jJyBvYmplY3Q9J2xpYmdzdHdhdmVmb3Jtc2lua19sYS1nc3R3YXZlZm9ybXNpbmsubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHdhdmVmb3Jtc2lua19sYS1nc3R3YXZlZm9ybXNpbmsubG8gYHRlc3QgLWYgJ2dzdHdhdmVmb3Jtc2luay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZlZm9ybXNpbmsuYwotCi1saWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1wbHVnaW4ubG86IGdzdHdhdmVmb3JtcGx1Z2luLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1wbHVnaW4ubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHdhdmVmb3Jtc2lua19sYS1nc3R3YXZlZm9ybXBsdWdpbi5UcG8gLWMgLW8gbGliZ3N0d2F2ZWZvcm1zaW5rX2xhLWdzdHdhdmVmb3JtcGx1Z2luLmxvIGB0ZXN0IC1mICdnc3R3YXZlZm9ybXBsdWdpbi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R3YXZlZm9ybXBsdWdpbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9saWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1wbHVnaW4uVHBvICQoREVQRElSKS9saWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1wbHVnaW4uUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0d2F2ZWZvcm1wbHVnaW4uYycgb2JqZWN0PSdsaWJnc3R3YXZlZm9ybXNpbmtfbGEtZ3N0d2F2ZWZvcm1wbHVnaW4ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R3YXZlZm9ybXNpbmtfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0d2F2ZWZvcm1zaW5rX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHdhdmVmb3Jtc2lua19sYS1nc3R3YXZlZm9ybXBsdWdpbi5sbyBgdGVzdCAtZiAnZ3N0d2F2ZWZvcm1wbHVnaW4uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ3N0d2F2ZWZvcm1wbHVnaW4uYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9zeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1wbHVnaW4uYyBiL3N5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXBsdWdpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDBjNGMyLi4wMDAwMDAwCi0tLSBhL3N5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXBsdWdpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0qIENvcHlyaWdodCAoQykgMjAwNSBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLSoKLSogZ3N0d2F2ZWZvcm1wbHVnaW4uYzoKLSoKLSogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKgotKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qCi0qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0qIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0qIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHdhdmVmb3Jtc2luay5oIgotCi1zdGF0aWMgZ2Jvb2xlYW4KLXBsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCi17Ci0gIGlmICghZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgIndhdmVmb3Jtc2luayIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgR1NUX1RZUEVfV0FWRUZPUk1fU0lOSykpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1HU1RfUExVR0lOX0RFRklORSAoR1NUX1ZFUlNJT05fTUFKT1IsCi0gICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgd2F2ZWZvcm0sCi0gICAgIldhdmVGb3JtIHdpbjMyIEFQSSBwbHVnaW4iLAotICAgIHBsdWdpbl9pbml0LCBWRVJTSU9OLCAiTEdQTCIsIEdTVF9QQUNLQUdFX05BTUUsIEdTVF9QQUNLQUdFX09SSUdJTikKZGlmZiAtLWdpdCBhL3N5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYyBiL3N5cy93YXZlZm9ybS9nc3R3YXZlZm9ybXNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3MGE1Zi4uMDAwMDAwMAotLS0gYS9zeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0qIENvcHlyaWdodCAoQykgMjAwNSBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLSoKLSogZ3N0d2F2ZWZvcm1zaW5rLmM6Ci0qCi0qIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0qIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSoKLSogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0qIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKgotKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0vKioKLSAqIFNFQ1RJT046ZWxlbWVudC13YXZlZm9ybXNpbmsKLSAqCi0gKiBUaGlzIGVsZW1lbnQgbGV0cyB5b3Ugb3V0cHV0IHNvdW5kIHVzaW5nIHRoZSBXaW5kb3dzIFdhdmVGb3JtIEFQSS4KLSAqCi0gKiBOb3RlIHRoYXQgeW91IHNob3VsZCBhbG1vc3QgYWx3YXlzIHVzZSBnZW5lcmljIGF1ZGlvIGNvbnZlcnNpb24gZWxlbWVudHMKLSAqIGxpa2UgYXVkaW9jb252ZXJ0IGFuZCBhdWRpb3Jlc2FtcGxlIGluIGZyb250IG9mIGFuIGF1ZGlvc2luayB0byBtYWtlIHN1cmUKLSAqIHlvdXIgcGlwZWxpbmUgd29ya3MgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMgKHRob3NlIGNvbnZlcnNpb24gZWxlbWVudHMgd2lsbAotICogYWN0IGluIHBhc3N0aHJvdWdoLW1vZGUgaWYgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkpLgotICoKLSAqIDxyZWZzZWN0Mj4KLSAqIDx0aXRsZT5FeGFtcGxlIHBpcGVsaW5lczwvdGl0bGU+Ci0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgYXVkaW90ZXN0c3JjICEgYXVkaW9jb252ZXJ0ICEgdm9sdW1lIHZvbHVtZT0wLjEgISB3YXZlZm9ybXNpbmsKLSAqIF18IHdpbGwgb3V0cHV0IGEgc2luZSB3YXZlIChjb250aW51b3VzIGJlZXAgc291bmQpIHRvIHlvdXIgc291bmQgY2FyZCAod2l0aAotICogYSB2ZXJ5IGxvdyB2b2x1bWUgYXMgcHJlY2F1dGlvbikuCi0gKiB8WwotICogZ3N0LWxhdW5jaC0xLjAgLXYgZmlsZXNyYyBsb2NhdGlvbj1tdXNpYy5vZ2cgISBkZWNvZGViaW4gISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgd2F2ZWZvcm1zaW5rCi0gKiBdfCB3aWxsIHBsYXkgYW4gT2dnL1ZvcmJpcyBhdWRpbyBmaWxlIGFuZCBvdXRwdXQgaXQuCi0gKiA8L3JlZnNlY3QyPgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgImdzdHdhdmVmb3Jtc2luay5oIgotCi1HU1RfREVCVUdfQ0FURUdPUllfU1RBVElDICh3YXZlZm9ybXNpbmtfZGVidWcpOwotCi1zdGF0aWMgdm9pZCBnc3Rfd2F2ZWZvcm1fc2lua19maW5hbGlzZSAoR09iamVjdCAqIG9iamVjdCk7Ci1zdGF0aWMgdm9pZCBnc3Rfd2F2ZWZvcm1fc2lua19zZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgdm9pZCBnc3Rfd2F2ZWZvcm1fc2lua19nZXRfcHJvcGVydHkgKEdPYmplY3QgKiBvYmplY3QsCi0gICAgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlICogdmFsdWUsIEdQYXJhbVNwZWMgKiBwc3BlYyk7Ci1zdGF0aWMgR3N0Q2FwcyAqZ3N0X3dhdmVmb3JtX3NpbmtfZ2V0Y2FwcyAoR3N0QmFzZVNpbmsgKiBic2luaywKLSAgICBHc3RDYXBzICogZmlsdGVyKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEdzdEF1ZGlvU2luayBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGdib29sZWFuIGdzdF93YXZlZm9ybV9zaW5rX3ByZXBhcmUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLAotICAgIEdzdEF1ZGlvUmluZ0J1ZmZlclNwZWMgKiBzcGVjKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2ZWZvcm1fc2lua191bnByZXBhcmUgKEdzdEF1ZGlvU2luayAqIGFzaW5rKTsKLXN0YXRpYyBnYm9vbGVhbiBnc3Rfd2F2ZWZvcm1fc2lua19vcGVuIChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci1zdGF0aWMgZ2Jvb2xlYW4gZ3N0X3dhdmVmb3JtX3NpbmtfY2xvc2UgKEdzdEF1ZGlvU2luayAqIGFzaW5rKTsKLXN0YXRpYyBnaW50IGdzdF93YXZlZm9ybV9zaW5rX3dyaXRlIChHc3RBdWRpb1NpbmsgKiBhc2luaywgZ3BvaW50ZXIgZGF0YSwKLSAgICBndWludCBsZW5ndGgpOwotc3RhdGljIGd1aW50IGdzdF93YXZlZm9ybV9zaW5rX2RlbGF5IChHc3RBdWRpb1NpbmsgKiBhc2luayk7Ci1zdGF0aWMgdm9pZCBnc3Rfd2F2ZWZvcm1fc2lua19yZXNldCAoR3N0QXVkaW9TaW5rICogYXNpbmspOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogVXRpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1Hc3RDYXBzICpnc3Rfd2F2ZWZvcm1fc2lua19jcmVhdGVfY2FwcyAoZ2ludCByYXRlLCBnaW50IGNoYW5uZWxzLAotICAgIGNvbnN0IGdjaGFyICogZm9ybWF0KTsKLVdBVkVIRFIgKmJ1ZmZlcnBvb2xfZ2V0X2J1ZmZlciAoR3N0V2F2ZUZvcm1TaW5rICogd2ZzaW5rLCBncG9pbnRlciBkYXRhLAotICAgIGd1aW50IGxlbmd0aCk7Ci12b2lkIENBTExCQUNLIHdhdmVPdXRQcm9jIChIV0FWRU9VVCBod28sIFVJTlQgdU1zZywgRFdPUkRfUFRSIGR3SW5zdGFuY2UsCi0gICAgRFdPUkRfUFRSIGR3UGFyYW0xLCBEV09SRF9QVFIgZHdQYXJhbTIpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgd2F2ZWZvcm1zaW5rX3NpbmtfZmFjdG9yeSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgeyAiIEdTVF9BVURJT19ORSAoUzE2KSAiLCBTOCB9LCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0sICIgImNoYW5uZWxzID0gKGludCkgWyAxLCAyIF0iKSk7Ci0KLSNkZWZpbmUgZ3N0X3dhdmVmb3JtX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcwotR19ERUZJTkVfVFlQRSAoR3N0V2F2ZUZvcm1TaW5rLCBnc3Rfd2F2ZWZvcm1fc2luaywgR1NUX1RZUEVfQVVESU9fU0lOSyk7Ci0KLXN0YXRpYyB2b2lkCi1nc3Rfd2F2ZWZvcm1fc2lua19jbGFzc19pbml0IChHc3RXYXZlRm9ybVNpbmtDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3M7Ci0gIEdzdEJhc2VTaW5rQ2xhc3MgKmdzdGJhc2VzaW5rX2NsYXNzOwotICBHc3RBdWRpb1NpbmtDbGFzcyAqZ3N0YXVkaW9zaW5rX2NsYXNzOwotICBHc3RFbGVtZW50Q2xhc3MgKmVsZW1lbnRfY2xhc3M7Ci0KLSAgZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKikga2xhc3M7Ci0gIGdzdGJhc2VzaW5rX2NsYXNzID0gKEdzdEJhc2VTaW5rQ2xhc3MgKikga2xhc3M7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcyA9IChHc3RBdWRpb1NpbmtDbGFzcyAqKSBrbGFzczsKLSAgZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0KLSAgcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChrbGFzcyk7Ci0KLSAgZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBnc3Rfd2F2ZWZvcm1fc2lua19maW5hbGlzZTsKLSAgZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3N0X3dhdmVmb3JtX3NpbmtfZ2V0X3Byb3BlcnR5OwotICBnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBnc3Rfd2F2ZWZvcm1fc2lua19zZXRfcHJvcGVydHk7Ci0KLSAgZ3N0YmFzZXNpbmtfY2xhc3MtPmdldF9jYXBzID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZlZm9ybV9zaW5rX2dldGNhcHMpOwotCi0gIGdzdGF1ZGlvc2lua19jbGFzcy0+cHJlcGFyZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2ZWZvcm1fc2lua19wcmVwYXJlKTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT51bnByZXBhcmUgPQotICAgICAgR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZlZm9ybV9zaW5rX3VucHJlcGFyZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+b3BlbiA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2ZWZvcm1fc2lua19vcGVuKTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5jbG9zZSA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2ZWZvcm1fc2lua19jbG9zZSk7Ci0gIGdzdGF1ZGlvc2lua19jbGFzcy0+d3JpdGUgPSBHU1RfREVCVUdfRlVOQ1BUUiAoZ3N0X3dhdmVmb3JtX3Npbmtfd3JpdGUpOwotICBnc3RhdWRpb3NpbmtfY2xhc3MtPmRlbGF5ID0gR1NUX0RFQlVHX0ZVTkNQVFIgKGdzdF93YXZlZm9ybV9zaW5rX2RlbGF5KTsKLSAgZ3N0YXVkaW9zaW5rX2NsYXNzLT5yZXNldCA9IEdTVF9ERUJVR19GVU5DUFRSIChnc3Rfd2F2ZWZvcm1fc2lua19yZXNldCk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKHdhdmVmb3Jtc2lua19kZWJ1ZywgIndhdmVmb3Jtc2luayIsIDAsCi0gICAgICAiV2F2ZWZvcm0gc2luayIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVsZW1lbnRfY2xhc3MsICJXYXZlRm9ybSBBdWRpbyBTaW5rIiwKLSAgICAgICJTaW5rL0F1ZGlvIiwKLSAgICAgICJPdXRwdXQgdG8gYSBzb3VuZCBjYXJkIHZpYSBXYXZlRm9ybSBBUEkiLAotICAgICAgIlNlYmFzdGllbiBNb3V0dGUgPHNlYmFzdGllbkBtb3V0dGUubmV0PiIpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlbGVtZW50X2NsYXNzLAotICAgICAgJndhdmVmb3Jtc2lua19zaW5rX2ZhY3RvcnkpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdmVmb3JtX3Npbmtfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIC8qIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKG9iamVjdCk7ICovCi0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdmVmb3JtX3NpbmtfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIC8qIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKG9iamVjdCk7ICovCi0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdmVmb3JtX3NpbmtfaW5pdCAoR3N0V2F2ZUZvcm1TaW5rICogd2ZzaW5rKQotewotICAvKiBpbml0aWFsaXplIG1lbWJlcnMgKi8KLSAgd2ZzaW5rLT5od2F2ZW91dCA9IE5VTEw7Ci0gIHdmc2luay0+Y2FjaGVkX2NhcHMgPSBOVUxMOwotICB3ZnNpbmstPndhdmVfYnVmZmVycyA9IE5VTEw7Ci0gIHdmc2luay0+d3JpdGVfYnVmZmVyID0gMDsKLSAgd2ZzaW5rLT5idWZmZXJfY291bnQgPSBCVUZGRVJfQ09VTlQ7Ci0gIHdmc2luay0+YnVmZmVyX3NpemUgPSBCVUZGRVJfU0laRTsKLSAgd2ZzaW5rLT5mcmVlX2J1ZmZlcnNfY291bnQgPSB3ZnNpbmstPmJ1ZmZlcl9jb3VudDsKLSAgd2ZzaW5rLT5ieXRlc19pbl9xdWV1ZSA9IDA7Ci0KLSAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiAoJndmc2luay0+Y3JpdGljX3dhdmUpOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdmVmb3JtX3NpbmtfZmluYWxpc2UgKEdPYmplY3QgKiBvYmplY3QpCi17Ci0gIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKG9iamVjdCk7Ci0KLSAgaWYgKHdmc2luay0+Y2FjaGVkX2NhcHMpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAod2ZzaW5rLT5jYWNoZWRfY2Fwcyk7Ci0gICAgd2ZzaW5rLT5jYWNoZWRfY2FwcyA9IE5VTEw7Ci0gIH0KLQotICBEZWxldGVDcml0aWNhbFNlY3Rpb24gKCZ3ZnNpbmstPmNyaXRpY193YXZlKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdzdF93YXZlZm9ybV9zaW5rX2dldGNhcHMgKEdzdEJhc2VTaW5rICogYnNpbmssIEdzdENhcHMgKiBmaWx0ZXIpCi17Ci0gIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKGJzaW5rKTsKLSAgTU1SRVNVTFQgbW1yZXN1bHQ7Ci0gIFdBVkVPVVRDQVBTIHdvY2FwczsKLSAgR3N0Q2FwcyAqY2FwcywgKmNhcHNfdGVtcDsKLQotICAvKiByZXR1cm4gdGhlIGNhY2hlZCBjYXBzIGlmIGFscmVhZHkgZGVmaW5lZCAqLwotICBpZiAod2ZzaW5rLT5jYWNoZWRfY2FwcykgewotICAgIHJldHVybiBnc3RfY2Fwc19yZWYgKHdmc2luay0+Y2FjaGVkX2NhcHMpOwotICB9Ci0KLSAgLyogZ2V0IHRoZSBkZWZhdWx0IGRldmljZSBjYXBzICovCi0gIG1tcmVzdWx0ID0gd2F2ZU91dEdldERldkNhcHMgKFdBVkVfTUFQUEVSLCAmd29jYXBzLCBzaXplb2YgKHdvY2FwcykpOwotICBpZiAobW1yZXN1bHQgIT0gTU1TWVNFUlJfTk9FUlJPUikgewotICAgIHdhdmVPdXRHZXRFcnJvclRleHQgKG1tcmVzdWx0LCB3ZnNpbmstPmVycm9yX3N0cmluZywgRVJST1JfTEVOR1RIIC0gMSk7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHdmc2luaywgUkVTT1VSQ0UsIFNFVFRJTkdTLAotICAgICAgICAoImdzdF93YXZlZm9ybV9zaW5rX2dldGNhcHM6IHdhdmVPdXRHZXREZXZDYXBzIGZhaWxlZCBlcnJvcj0+JXMiLAotICAgICAgICAgICAgd2ZzaW5rLT5lcnJvcl9zdHJpbmcpLCAoTlVMTCkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19lbXB0eSAoKTsKLQotICAvKiBjcmVhdGUgYSBjYXBzIGZvciBhbGwgd2F2ZSBmb3JtYXRzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIAotICAgICBzdGFydGluZyBieSB0aGUgYmVzdCBxdWFsaXR5IGZvcm1hdCAqLwotICBpZiAod29jYXBzLmR3Rm9ybWF0cyAmIFdBVkVfRk9STUFUXzk2UzE2KSB7Ci0gICAgY2Fwc190ZW1wID0gZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKDk2MDAwLCAyLCBHU1RfQVVESU9fTkUgKFMxNikpOwotICAgIGlmIChjYXBzX3RlbXApIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgY2Fwc190ZW1wKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHdvY2Fwcy5kd0Zvcm1hdHMgJiBXQVZFX0ZPUk1BVF85NlMwOCkgewotICAgIGNhcHNfdGVtcCA9IGdzdF93YXZlZm9ybV9zaW5rX2NyZWF0ZV9jYXBzICg5NjAwMCwgMiwgIlM4Iik7Ci0gICAgaWYgKGNhcHNfdGVtcCkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzLCBjYXBzX3RlbXApOwotICAgIH0KLSAgfQotICBpZiAod29jYXBzLmR3Rm9ybWF0cyAmIFdBVkVfRk9STUFUXzk2TTE2KSB7Ci0gICAgY2Fwc190ZW1wID0gZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKDk2MDAwLCAxLCBHU1RfQVVESU9fTkUgKFMxNikpOwotICAgIGlmIChjYXBzX3RlbXApIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgY2Fwc190ZW1wKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHdvY2Fwcy5kd0Zvcm1hdHMgJiBXQVZFX0ZPUk1BVF85Nk0wOCkgewotICAgIGNhcHNfdGVtcCA9IGdzdF93YXZlZm9ybV9zaW5rX2NyZWF0ZV9jYXBzICg5NjAwMCwgMSwgIlM4Iik7Ci0gICAgaWYgKGNhcHNfdGVtcCkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzLCBjYXBzX3RlbXApOwotICAgIH0KLSAgfQotICBpZiAod29jYXBzLmR3Rm9ybWF0cyAmIFdBVkVfRk9STUFUXzRTMTYpIHsKLSAgICBjYXBzX3RlbXAgPSBnc3Rfd2F2ZWZvcm1fc2lua19jcmVhdGVfY2FwcyAoNDQxMDAsIDIsIEdTVF9BVURJT19ORSAoUzE2KSk7Ci0gICAgaWYgKGNhcHNfdGVtcCkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzLCBjYXBzX3RlbXApOwotICAgIH0KLSAgfQotICBpZiAod29jYXBzLmR3Rm9ybWF0cyAmIFdBVkVfRk9STUFUXzRTMDgpIHsKLSAgICBjYXBzX3RlbXAgPSBnc3Rfd2F2ZWZvcm1fc2lua19jcmVhdGVfY2FwcyAoNDQxMDAsIDIsICJTOCIpOwotICAgIGlmIChjYXBzX3RlbXApIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgY2Fwc190ZW1wKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHdvY2Fwcy5kd0Zvcm1hdHMgJiBXQVZFX0ZPUk1BVF80TTE2KSB7Ci0gICAgY2Fwc190ZW1wID0gZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKDQ0MTAwLCAxLCBHU1RfQVVESU9fTkUgKFMxNikpOwotICAgIGlmIChjYXBzX3RlbXApIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgY2Fwc190ZW1wKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHdvY2Fwcy5kd0Zvcm1hdHMgJiBXQVZFX0ZPUk1BVF80TTA4KSB7Ci0gICAgY2Fwc190ZW1wID0gZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKDQ0MTAwLCAxLCAiUzgiKTsKLSAgICBpZiAoY2Fwc190ZW1wKSB7Ci0gICAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMsIGNhcHNfdGVtcCk7Ci0gICAgfQotICB9Ci0gIGlmICh3b2NhcHMuZHdGb3JtYXRzICYgV0FWRV9GT1JNQVRfMlMxNikgewotICAgIGNhcHNfdGVtcCA9IGdzdF93YXZlZm9ybV9zaW5rX2NyZWF0ZV9jYXBzICgyMjA1MCwgMiwgR1NUX0FVRElPX05FIChTMTYpKTsKLSAgICBpZiAoY2Fwc190ZW1wKSB7Ci0gICAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMsIGNhcHNfdGVtcCk7Ci0gICAgfQotICB9Ci0gIGlmICh3b2NhcHMuZHdGb3JtYXRzICYgV0FWRV9GT1JNQVRfMlMwOCkgewotICAgIGNhcHNfdGVtcCA9IGdzdF93YXZlZm9ybV9zaW5rX2NyZWF0ZV9jYXBzICgyMjA1MCwgMiwgIlM4Iik7Ci0gICAgaWYgKGNhcHNfdGVtcCkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzLCBjYXBzX3RlbXApOwotICAgIH0KLSAgfQotICBpZiAod29jYXBzLmR3Rm9ybWF0cyAmIFdBVkVfRk9STUFUXzJNMTYpIHsKLSAgICBjYXBzX3RlbXAgPSBnc3Rfd2F2ZWZvcm1fc2lua19jcmVhdGVfY2FwcyAoMjIwNTAsIDEsIEdTVF9BVURJT19ORSAoUzE2KSk7Ci0gICAgaWYgKGNhcHNfdGVtcCkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzLCBjYXBzX3RlbXApOwotICAgIH0KLSAgfQotICBpZiAod29jYXBzLmR3Rm9ybWF0cyAmIFdBVkVfRk9STUFUXzJNMDgpIHsKLSAgICBjYXBzX3RlbXAgPSBnc3Rfd2F2ZWZvcm1fc2lua19jcmVhdGVfY2FwcyAoMjIwNTAsIDEsICJTOCIpOwotICAgIGlmIChjYXBzX3RlbXApIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgY2Fwc190ZW1wKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHdvY2Fwcy5kd0Zvcm1hdHMgJiBXQVZFX0ZPUk1BVF8xUzE2KSB7Ci0gICAgY2Fwc190ZW1wID0gZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKDExMDI1LCAyLCBHU1RfQVVESU9fTkUgKFMxNikpOwotICAgIGlmIChjYXBzX3RlbXApIHsKLSAgICAgIGdzdF9jYXBzX2FwcGVuZCAoY2FwcywgY2Fwc190ZW1wKTsKLSAgICB9Ci0gIH0KLSAgaWYgKHdvY2Fwcy5kd0Zvcm1hdHMgJiBXQVZFX0ZPUk1BVF8xUzA4KSB7Ci0gICAgY2Fwc190ZW1wID0gZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKDExMDI1LCAyLCAiUzgiKTsKLSAgICBpZiAoY2Fwc190ZW1wKSB7Ci0gICAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMsIGNhcHNfdGVtcCk7Ci0gICAgfQotICB9Ci0gIGlmICh3b2NhcHMuZHdGb3JtYXRzICYgV0FWRV9GT1JNQVRfMU0xNikgewotICAgIGNhcHNfdGVtcCA9IGdzdF93YXZlZm9ybV9zaW5rX2NyZWF0ZV9jYXBzICgxMTAyNSwgMSwgR1NUX0FVRElPX05FIChTMTYpKTsKLSAgICBpZiAoY2Fwc190ZW1wKSB7Ci0gICAgICBnc3RfY2Fwc19hcHBlbmQgKGNhcHMsIGNhcHNfdGVtcCk7Ci0gICAgfQotICB9Ci0gIGlmICh3b2NhcHMuZHdGb3JtYXRzICYgV0FWRV9GT1JNQVRfMU0wOCkgewotICAgIGNhcHNfdGVtcCA9IGdzdF93YXZlZm9ybV9zaW5rX2NyZWF0ZV9jYXBzICgxMTAyNSwgMSwgIlM4Iik7Ci0gICAgaWYgKGNhcHNfdGVtcCkgewotICAgICAgZ3N0X2NhcHNfYXBwZW5kIChjYXBzLCBjYXBzX3RlbXApOwotICAgIH0KLSAgfQotCi0gIGlmIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpIHsKLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgY2FwcyA9IE5VTEw7Ci0gIH0gZWxzZSB7Ci0gICAgd2ZzaW5rLT5jYWNoZWRfY2FwcyA9IGdzdF9jYXBzX3JlZiAoY2Fwcyk7Ci0gIH0KLQotICBHU1RfQ0FUX0xPR19PQkpFQ1QgKHdhdmVmb3Jtc2lua19kZWJ1Zywgd2ZzaW5rLAotICAgICAgIlJldHVybmluZyBjYXBzICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2ZWZvcm1fc2lua19vcGVuIChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgLyogR3N0V2F2ZUZvcm1TaW5rICp3ZnNpbmsgPSBHU1RfV0FWRUZPUk1fU0lOSyAoYXNpbmspOyAqLwotCi0gIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSBhcyB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIG9wZW5lZCB3aXRoIHRoZSBmb3JtYXQgd2Ugd2lsbCB1c2UgKi8KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3Rfd2F2ZWZvcm1fc2lua19wcmVwYXJlIChHc3RBdWRpb1NpbmsgKiBhc2luaywgR3N0QXVkaW9SaW5nQnVmZmVyU3BlYyAqIHNwZWMpCi17Ci0gIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKGFzaW5rKTsKLSAgV0FWRUZPUk1BVEVYIHdmeDsKLSAgTU1SRVNVTFQgbW1yZXN1bHQ7Ci0gIGd1aW50IGluZGV4OwotCi0gIC8qIHNldHVwIHdhdmVmb3JtZXggc3RydXR1cmUgd2l0aCB0aGUgaW5wdXQgcmluZ2J1ZmZlciBzcGVjcyAqLwotICBtZW1zZXQgKCZ3ZngsIDAsIHNpemVvZiAod2Z4KSk7Ci0gIHdmeC5jYlNpemUgPSAwOwotICB3Zngud0Zvcm1hdFRhZyA9IFdBVkVfRk9STUFUX1BDTTsKLSAgd2Z4Lm5DaGFubmVscyA9IHNwZWMtPmluZm8uY2hhbm5lbHM7Ci0gIHdmeC5uU2FtcGxlc1BlclNlYyA9IHNwZWMtPmluZm8ucmF0ZTsKLSAgd2Z4LndCaXRzUGVyU2FtcGxlID0gKHNwZWMtPmluZm8uYnBmICogOCkgLyB3ZngubkNoYW5uZWxzOwotICB3ZngubkJsb2NrQWxpZ24gPSBzcGVjLT5pbmZvLmJwZjsKLSAgd2Z4Lm5BdmdCeXRlc1BlclNlYyA9IHdmeC5uU2FtcGxlc1BlclNlYyAqIHdmeC5uQmxvY2tBbGlnbjsKLQotICAvKiBzYXZlIGJ5dGVzIHBlciBzYW1wbGUgdG8gdXNlIGl0IGluIGRlbGF5ICovCi0gIHdmc2luay0+Ynl0ZXNfcGVyX3NhbXBsZSA9IHNwZWMtPmluZm8uYnBmOwotCi0gIC8qIG9wZW4gdGhlIGRlZmF1bHQgYXVkaW8gZGV2aWNlIHdpdGggdGhlIGdpdmVuIGNhcHMgKi8KLSAgbW1yZXN1bHQgPSB3YXZlT3V0T3BlbiAoJndmc2luay0+aHdhdmVvdXQsIFdBVkVfTUFQUEVSLAotICAgICAgJndmeCwgKERXT1JEX1BUUikgd2F2ZU91dFByb2MsIChEV09SRF9QVFIpIHdmc2luaywgQ0FMTEJBQ0tfRlVOQ1RJT04pOwotICBpZiAobW1yZXN1bHQgIT0gTU1TWVNFUlJfTk9FUlJPUikgewotICAgIHdhdmVPdXRHZXRFcnJvclRleHQgKG1tcmVzdWx0LCB3ZnNpbmstPmVycm9yX3N0cmluZywgRVJST1JfTEVOR1RIIC0gMSk7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHdmc2luaywgUkVTT1VSQ0UsIE9QRU5fV1JJVEUsCi0gICAgICAgICgiZ3N0X3dhdmVmb3JtX3NpbmtfcHJlcGFyZTogd2F2ZU91dE9wZW4gZmFpbGVkIGVycm9yPT4lcyIsCi0gICAgICAgICAgICB3ZnNpbmstPmVycm9yX3N0cmluZyksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogZXZhbHVhdGUgdGhlIGJ1ZmZlciBzaXplIGFuZCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgbmVlZGVkICovCi0gIHdmc2luay0+ZnJlZV9idWZmZXJzX2NvdW50ID0gd2ZzaW5rLT5idWZmZXJfY291bnQ7Ci0KLSAgLyogYWxsb2NhdGUgd2F2ZSBidWZmZXJzICovCi0gIHdmc2luay0+d2F2ZV9idWZmZXJzID0gKFdBVkVIRFIgKikgZ19uZXcwIChXQVZFSERSLCB3ZnNpbmstPmJ1ZmZlcl9jb3VudCk7Ci0gIGlmICghd2ZzaW5rLT53YXZlX2J1ZmZlcnMpIHsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAod2ZzaW5rLCBSRVNPVVJDRSwgT1BFTl9XUklURSwKLSAgICAgICAgKCJnc3Rfd2F2ZWZvcm1fc2lua19wcmVwYXJlOiBGYWlsZWQgdG8gYWxsb2NhdGUgd2F2ZSBidWZmZXIgaGVhZGVycyAoYnVmZmVyIGNvdW50PSVkKSIsCi0gICAgICAgICAgICB3ZnNpbmstPmJ1ZmZlcl9jb3VudCksIChOVUxMKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIG1lbXNldCAod2ZzaW5rLT53YXZlX2J1ZmZlcnMsIDAsIHNpemVvZiAoV0FWRUhEUikgKiB3ZnNpbmstPmJ1ZmZlcl9jb3VudCk7Ci0KLSAgLyogc2V0dXAgaGVhZGVycyAqLwotICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB3ZnNpbmstPmJ1ZmZlcl9jb3VudDsgaW5kZXgrKykgewotICAgIHdmc2luay0+d2F2ZV9idWZmZXJzW2luZGV4XS5kd0J1ZmZlckxlbmd0aCA9IHdmc2luay0+YnVmZmVyX3NpemU7Ci0gICAgd2ZzaW5rLT53YXZlX2J1ZmZlcnNbaW5kZXhdLmxwRGF0YSA9IGdfbmV3MCAoZ2NoYXIsIHdmc2luay0+YnVmZmVyX3NpemUpOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3dhdmVmb3JtX3NpbmtfdW5wcmVwYXJlIChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgR3N0V2F2ZUZvcm1TaW5rICp3ZnNpbmsgPSBHU1RfV0FWRUZPUk1fU0lOSyAoYXNpbmspOwotCi0gIC8qIGZyZWUgd2F2ZSBidWZmZXJzICovCi0gIGlmICh3ZnNpbmstPndhdmVfYnVmZmVycykgewotICAgIGd1aW50IGluZGV4OwotCi0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgd2ZzaW5rLT5idWZmZXJfY291bnQ7IGluZGV4KyspIHsKLSAgICAgIGlmICh3ZnNpbmstPndhdmVfYnVmZmVyc1tpbmRleF0uZHdGbGFncyAmIFdIRFJfUFJFUEFSRUQpIHsKLSAgICAgICAgTU1SRVNVTFQgbW1yZXN1bHQgPSB3YXZlT3V0VW5wcmVwYXJlSGVhZGVyICh3ZnNpbmstPmh3YXZlb3V0LAotICAgICAgICAgICAgJndmc2luay0+d2F2ZV9idWZmZXJzW2luZGV4XSwgc2l6ZW9mIChXQVZFSERSKSk7Ci0gICAgICAgIGlmIChtbXJlc3VsdCAhPSBNTVNZU0VSUl9OT0VSUk9SKSB7Ci0gICAgICAgICAgd2F2ZU91dEdldEVycm9yVGV4dCAobW1yZXN1bHQsIHdmc2luay0+ZXJyb3Jfc3RyaW5nLAotICAgICAgICAgICAgICBFUlJPUl9MRU5HVEggLSAxKTsKLSAgICAgICAgICBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUICh3YXZlZm9ybXNpbmtfZGVidWcsIHdmc2luaywKLSAgICAgICAgICAgICAgImdzdF93YXZlZm9ybV9zaW5rX3VucHJlcGFyZTogRXJyb3IgdW5wcmVwYXJpbmcgYnVmZmVyID0+ICVzIiwKLSAgICAgICAgICAgICAgd2ZzaW5rLT5lcnJvcl9zdHJpbmcpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnX2ZyZWUgKHdmc2luay0+d2F2ZV9idWZmZXJzW2luZGV4XS5scERhdGEpOwotICAgIH0KLSAgICBnX2ZyZWUgKHdmc2luay0+d2F2ZV9idWZmZXJzKTsKLSAgICB3ZnNpbmstPndhdmVfYnVmZmVycyA9IE5VTEw7Ci0gIH0KLQotICAvKiBjbG9zZSB3YXZlZm9ybS1hdWRpbyBvdXRwdXQgZGV2aWNlICovCi0gIGlmICh3ZnNpbmstPmh3YXZlb3V0KSB7Ci0gICAgd2F2ZU91dENsb3NlICh3ZnNpbmstPmh3YXZlb3V0KTsKLSAgICB3ZnNpbmstPmh3YXZlb3V0ID0gTlVMTDsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF93YXZlZm9ybV9zaW5rX2Nsb3NlIChHc3RBdWRpb1NpbmsgKiBhc2luaykKLXsKLSAgLyogR3N0V2F2ZUZvcm1TaW5rICp3ZnNpbmsgPSBHU1RfV0FWRUZPUk1fU0lOSyAoYXNpbmspOyAqLwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2ludAotZ3N0X3dhdmVmb3JtX3Npbmtfd3JpdGUgKEdzdEF1ZGlvU2luayAqIGFzaW5rLCBncG9pbnRlciBkYXRhLCBndWludCBsZW5ndGgpCi17Ci0gIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKGFzaW5rKTsKLSAgV0FWRUhEUiAqd2F2ZWhlYWRlcjsKLSAgTU1SRVNVTFQgbW1yZXN1bHQ7Ci0gIGd1aW50IGJ5dGVzX3RvX3dyaXRlID0gbGVuZ3RoOwotICBndWludCByZW1haW5pbmdfbGVuZ3RoID0gbGVuZ3RoOwotCi0gIHdmc2luay0+Ynl0ZXNfaW5fcXVldWUgKz0gbGVuZ3RoOwotCi0gIHdoaWxlIChyZW1haW5pbmdfbGVuZ3RoID4gMCkgewotICAgIGlmICh3ZnNpbmstPmZyZWVfYnVmZmVyc19jb3VudCA9PSAwKSB7Ci0gICAgICAvKiBubyBmcmVlIGJ1ZmZlciBhdmFpbGFibGUsIHdhaXQgZm9yIG9uZSAqLwotICAgICAgU2xlZXAgKDEwKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIGdldCB0aGUgY3VycmVudCB3cml0ZSBidWZmZXIgaGVhZGVyICovCi0gICAgd2F2ZWhlYWRlciA9ICZ3ZnNpbmstPndhdmVfYnVmZmVyc1t3ZnNpbmstPndyaXRlX2J1ZmZlcl07Ci0KLSAgICAvKiB1bnByZXBhcmUgdGhlIGhlYWRlciBpZiBuZWVkZWQgKi8KLSAgICBpZiAod2F2ZWhlYWRlci0+ZHdGbGFncyAmIFdIRFJfUFJFUEFSRUQpIHsKLSAgICAgIG1tcmVzdWx0ID0KLSAgICAgICAgICB3YXZlT3V0VW5wcmVwYXJlSGVhZGVyICh3ZnNpbmstPmh3YXZlb3V0LCB3YXZlaGVhZGVyLAotICAgICAgICAgIHNpemVvZiAoV0FWRUhEUikpOwotICAgICAgaWYgKG1tcmVzdWx0ICE9IE1NU1lTRVJSX05PRVJST1IpIHsKLSAgICAgICAgd2F2ZU91dEdldEVycm9yVGV4dCAobW1yZXN1bHQsIHdmc2luay0+ZXJyb3Jfc3RyaW5nLCBFUlJPUl9MRU5HVEggLSAxKTsKLSAgICAgICAgR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAod2F2ZWZvcm1zaW5rX2RlYnVnLCB3ZnNpbmssCi0gICAgICAgICAgICAiRXJyb3IgdW5wcmVwYXJpbmcgYnVmZmVyID0+ICVzIiwgd2ZzaW5rLT5lcnJvcl9zdHJpbmcpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICh3ZnNpbmstPmJ1ZmZlcl9zaXplIC0gd2F2ZWhlYWRlci0+ZHdVc2VyID49IHJlbWFpbmluZ19sZW5ndGgpCi0gICAgICBieXRlc190b193cml0ZSA9IHJlbWFpbmluZ19sZW5ndGg7Ci0gICAgZWxzZQotICAgICAgYnl0ZXNfdG9fd3JpdGUgPSB3ZnNpbmstPmJ1ZmZlcl9zaXplIC0gd2F2ZWhlYWRlci0+ZHdVc2VyOwotCi0gICAgbWVtY3B5ICh3YXZlaGVhZGVyLT5scERhdGEgKyB3YXZlaGVhZGVyLT5kd1VzZXIsIGRhdGEsIGJ5dGVzX3RvX3dyaXRlKTsKLSAgICB3YXZlaGVhZGVyLT5kd1VzZXIgKz0gYnl0ZXNfdG9fd3JpdGU7Ci0gICAgcmVtYWluaW5nX2xlbmd0aCAtPSBieXRlc190b193cml0ZTsKLSAgICBkYXRhID0gKGd1aW50OCAqKSBkYXRhICsgYnl0ZXNfdG9fd3JpdGU7Ci0KLSAgICBpZiAod2F2ZWhlYWRlci0+ZHdVc2VyID09IHdmc2luay0+YnVmZmVyX3NpemUpIHsKLSAgICAgIC8qIHdlIGhhdmUgZmlsbGVkIGEgYnVmZmVyLCBsZXQncyBwcmVwYXJlIGl0IGFuZCBuZXh0IHdyaXRlIGl0IHRvIHRoZSBkZXZpY2UgKi8KLSAgICAgIG1tcmVzdWx0ID0KLSAgICAgICAgICB3YXZlT3V0UHJlcGFyZUhlYWRlciAod2ZzaW5rLT5od2F2ZW91dCwgd2F2ZWhlYWRlciwgc2l6ZW9mIChXQVZFSERSKSk7Ci0gICAgICBpZiAobW1yZXN1bHQgIT0gTU1TWVNFUlJfTk9FUlJPUikgewotICAgICAgICB3YXZlT3V0R2V0RXJyb3JUZXh0IChtbXJlc3VsdCwgd2ZzaW5rLT5lcnJvcl9zdHJpbmcsIEVSUk9SX0xFTkdUSCAtIDEpOwotICAgICAgICBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUICh3YXZlZm9ybXNpbmtfZGVidWcsIHdmc2luaywKLSAgICAgICAgICAgICJnc3Rfd2F2ZWZvcm1fc2lua193cml0ZTogRXJyb3IgcHJlcGFyaW5nIGhlYWRlciA9PiAlcyIsCi0gICAgICAgICAgICB3ZnNpbmstPmVycm9yX3N0cmluZyk7Ci0gICAgICB9Ci0gICAgICBtbXJlc3VsdCA9IHdhdmVPdXRXcml0ZSAod2ZzaW5rLT5od2F2ZW91dCwgd2F2ZWhlYWRlciwgc2l6ZW9mIChXQVZFSERSKSk7Ci0gICAgICBpZiAobW1yZXN1bHQgIT0gTU1TWVNFUlJfTk9FUlJPUikgewotICAgICAgICB3YXZlT3V0R2V0RXJyb3JUZXh0IChtbXJlc3VsdCwgd2ZzaW5rLT5lcnJvcl9zdHJpbmcsIEVSUk9SX0xFTkdUSCAtIDEpOwotICAgICAgICBHU1RfQ0FUX1dBUk5JTkdfT0JKRUNUICh3YXZlZm9ybXNpbmtfZGVidWcsIHdmc2luaywKLSAgICAgICAgICAgICJnc3Rfd2F2ZWZvcm1fc2lua193cml0ZTogRXJyb3Igd3JpdHRpbmcgYnVmZmVyIHRvIHRoZSBkZXZpY2UgPT4gJXMiLAotICAgICAgICAgICAgd2ZzaW5rLT5lcnJvcl9zdHJpbmcpOwotICAgICAgfQotCi0gICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiAoJndmc2luay0+Y3JpdGljX3dhdmUpOwotICAgICAgd2ZzaW5rLT5mcmVlX2J1ZmZlcnNfY291bnQtLTsKLSAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uICgmd2ZzaW5rLT5jcml0aWNfd2F2ZSk7Ci0KLSAgICAgIHdmc2luay0+d3JpdGVfYnVmZmVyKys7Ci0gICAgICB3ZnNpbmstPndyaXRlX2J1ZmZlciAlPSB3ZnNpbmstPmJ1ZmZlcl9jb3VudDsKLSAgICAgIHdhdmVoZWFkZXItPmR3VXNlciA9IDA7Ci0gICAgICB3ZnNpbmstPmJ5dGVzX2luX3F1ZXVlID0gMDsKLSAgICAgIEdTVF9DQVRfTE9HX09CSkVDVCAod2F2ZWZvcm1zaW5rX2RlYnVnLCB3ZnNpbmssCi0gICAgICAgICAgImdzdF93YXZlZm9ybV9zaW5rX3dyaXRlOiBXcml0dGluZyBhIGJ1ZmZlciB0byB0aGUgZGV2aWNlIChmcmVlIGJ1ZmZlcnMgcmVtYWluaW5nPSVkLCB3cml0ZSBidWZmZXI9JWQpIiwKLSAgICAgICAgICB3ZnNpbmstPmZyZWVfYnVmZmVyc19jb3VudCwgd2ZzaW5rLT53cml0ZV9idWZmZXIpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBsZW5ndGg7Ci19Ci0KLXN0YXRpYyBndWludAotZ3N0X3dhdmVmb3JtX3NpbmtfZGVsYXkgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICAvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIGluIHF1ZXVlIChkZXZpY2UraW50ZXJuYWwgcXVldWUpICovCi0gIEdzdFdhdmVGb3JtU2luayAqd2ZzaW5rID0gR1NUX1dBVkVGT1JNX1NJTksgKGFzaW5rKTsKLSAgZ3VpbnQgYnl0ZXNfaW5fZGV2aWNlID0KLSAgICAgICh3ZnNpbmstPmJ1ZmZlcl9jb3VudCAtIHdmc2luay0+ZnJlZV9idWZmZXJzX2NvdW50KSAqIHdmc2luay0+YnVmZmVyX3NpemU7Ci0gIGd1aW50IGRlbGF5ID0KLSAgICAgIChieXRlc19pbl9kZXZpY2UgKyB3ZnNpbmstPmJ5dGVzX2luX3F1ZXVlKSAvIHdmc2luay0+Ynl0ZXNfcGVyX3NhbXBsZTsKLSAgcmV0dXJuIGRlbGF5OwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3dhdmVmb3JtX3NpbmtfcmVzZXQgKEdzdEF1ZGlvU2luayAqIGFzaW5rKQotewotICBHc3RXYXZlRm9ybVNpbmsgKndmc2luayA9IEdTVF9XQVZFRk9STV9TSU5LIChhc2luayk7Ci0gIE1NUkVTVUxUIG1tcmVzdWx0ID0gd2F2ZU91dFJlc2V0ICh3ZnNpbmstPmh3YXZlb3V0KTsKLQotICBpZiAobW1yZXN1bHQgIT0gTU1TWVNFUlJfTk9FUlJPUikgewotICAgIHdhdmVPdXRHZXRFcnJvclRleHQgKG1tcmVzdWx0LCB3ZnNpbmstPmVycm9yX3N0cmluZywgRVJST1JfTEVOR1RIIC0gMSk7Ci0gICAgR1NUX0NBVF9XQVJOSU5HX09CSkVDVCAod2F2ZWZvcm1zaW5rX2RlYnVnLCB3ZnNpbmssCi0gICAgICAgICJnc3Rfd2F2ZWZvcm1fc2lua19yZXNldDogRXJyb3IgcmVzZXRpbmcgd2F2ZWZvcm0tYXVkaW8gZGV2aWNlID0+ICVzIiwKLSAgICAgICAgd2ZzaW5rLT5lcnJvcl9zdHJpbmcpOwotICB9Ci19Ci0KLUdzdENhcHMgKgotZ3N0X3dhdmVmb3JtX3NpbmtfY3JlYXRlX2NhcHMgKGdpbnQgcmF0ZSwgZ2ludCBjaGFubmVscywgY29uc3QgZ2NoYXIgKiBmb3JtYXQpCi17Ci0gIEdzdENhcHMgKmNhcHMgPSBOVUxMOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIGZvcm1hdCwKLSAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAiaW50ZXJsZWF2ZWQiLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgY2hhbm5lbHMsICJyYXRlIiwgR19UWVBFX0lOVCwgcmF0ZSwgTlVMTCk7Ci0gIHJldHVybiBjYXBzOwotfQotCi12b2lkIENBTExCQUNLCi13YXZlT3V0UHJvYyAoSFdBVkVPVVQgaHdvLAotICAgIFVJTlQgdU1zZywgRFdPUkRfUFRSIGR3SW5zdGFuY2UsIERXT1JEX1BUUiBkd1BhcmFtMSwgRFdPUkRfUFRSIGR3UGFyYW0yKQotewotICBHc3RXYXZlRm9ybVNpbmsgKndmc2luayA9IChHc3RXYXZlRm9ybVNpbmsgKikgZHdJbnN0YW5jZTsKLQotICBpZiAodU1zZyA9PSBXT01fRE9ORSkgewotICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uICgmd2ZzaW5rLT5jcml0aWNfd2F2ZSk7Ci0gICAgd2ZzaW5rLT5mcmVlX2J1ZmZlcnNfY291bnQrKzsKLSAgICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiAoJndmc2luay0+Y3JpdGljX3dhdmUpOwotICB9Ci19CmRpZmYgLS1naXQgYS9zeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmggYi9zeXMvd2F2ZWZvcm0vZ3N0d2F2ZWZvcm1zaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MGRmYzMuLjAwMDAwMDAKLS0tIGEvc3lzL3dhdmVmb3JtL2dzdHdhdmVmb3Jtc2luay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAgMjAwNSBTZWJhc3RpZW4gTW91dHRlIDxzZWJhc3RpZW5AbW91dHRlLm5ldD4KLSAqCi0gKiBnc3R3YXZlZm9ybXNpbmsuaDogCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0dTVF9XQVZFRk9STVNJTktfSF9fCi0jZGVmaW5lIF9fR1NUX1dBVkVGT1JNU0lOS19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vZ3N0YXVkaW9zaW5rLmg+Ci0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8bW1zeXN0ZW0uaD4KLQotI2lmbmRlZiBXQVZFX0ZPUk1BVF85Nk0wOAotI2RlZmluZSBXQVZFX0ZPUk1BVF85Nk0wOCAgICAgICAweDAwMDAxMDAwICAgICAgIC8qIDk2ICAga0h6LCBNb25vLCAgIDgtYml0ICAqLwotI2VuZGlmCi0KLSNpZm5kZWYgV0FWRV9GT1JNQVRfOTZTMDgKLSNkZWZpbmUgV0FWRV9GT1JNQVRfOTZTMDggICAgICAgMHgwMDAwMjAwMCAgICAgICAvKiA5NiAgIGtIeiwgU3RlcmVvLCA4LWJpdCAgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFdBVkVfRk9STUFUXzk2TTE2Ci0jZGVmaW5lIFdBVkVfRk9STUFUXzk2TTE2ICAgICAgIDB4MDAwMDQwMDAgICAgICAgLyogOTYgICBrSHosIE1vbm8sICAgMTYtYml0ICovCi0jZW5kaWYKLQotI2lmbmRlZiBXQVZFX0ZPUk1BVF85NlMxNgotI2RlZmluZSBXQVZFX0ZPUk1BVF85NlMxNiAgICAgICAweDAwMDA4MDAwICAgICAgIC8qIDk2ICAga0h6LCBTdGVyZW8sIDE2LWJpdCAqLwotI2VuZGlmCi0KLSNkZWZpbmUgRVJST1JfTEVOR1RIIE1BWEVSUk9STEVOR1RIKzUwCi0jZGVmaW5lIEJVRkZFUl9DT1VOVCAyMAotI2RlZmluZSBCVUZGRVJfU0laRSA4MTkyCi0KLUdfQkVHSU5fREVDTFMKLSNkZWZpbmUgR1NUX1RZUEVfV0FWRUZPUk1fU0lOSyAgICAgICAgICAgICAgICAoZ3N0X3dhdmVmb3JtX3NpbmtfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1dBVkVGT1JNX1NJTksob2JqKSAgICAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfV0FWRUZPUk1fU0lOSyxHc3RXYXZlRm9ybVNpbmspKQotI2RlZmluZSBHU1RfV0FWRUZPUk1fU0lOS19DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLEdTVF9UWVBFX1dBVkVGT1JNX1NJTkssR3N0V2F2ZUZvcm1TaW5rQ2xhc3MpKQotI2RlZmluZSBHU1RfSVNfV0FWRUZPUk1fU0lOSyhvYmopICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9XQVZFRk9STV9TSU5LKSkKLSNkZWZpbmUgR1NUX0lTX1dBVkVGT1JNX1NJTktfQ0xBU1Moa2xhc3MpICAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSxHU1RfVFlQRV9XQVZFRk9STV9TSU5LKSkKLXR5cGVkZWYgc3RydWN0IF9Hc3RXYXZlRm9ybVNpbmsgR3N0V2F2ZUZvcm1TaW5rOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFdhdmVGb3JtU2lua0NsYXNzIEdzdFdhdmVGb3JtU2lua0NsYXNzOwotCi1zdHJ1Y3QgX0dzdFdhdmVGb3JtU2luawotewotICAvKiBwYXJlbnQgb2JqZWN0ICovCi0gIEdzdEF1ZGlvU2luayBzaW5rOwotCi0gIC8qIHN1cHBvcnRlZCBjYXBzICovCi0gIEdzdENhcHMgKmNhY2hlZF9jYXBzOwotICAKLSAgLyogaGFuZGxlIHRvIHRoZSB3YXZlZm9ybS1hdWRpbyBvdXRwdXQgZGV2aWNlICovCi0gIEhXQVZFT1VUIGh3YXZlb3V0OwotICAKLSAgLyogdGFibGUgb2YgYnVmZmVyIGhlYWRlcnMgKi8KLSAgV0FWRUhEUiAqd2F2ZV9idWZmZXJzOwotCi0gIC8qIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGluZyBhY2Nlc3MgdG8gdGhlIG51bWJlciBvZiBmcmVlIGJ1ZmZlcnMgKi8KLSAgQ1JJVElDQUxfU0VDVElPTiBjcml0aWNfd2F2ZTsKLQotICAvKiBudW1iZXIgb2YgZnJlZSBidWZmZXJzIGF2YWlsYWJsZSAqLwotICBndWludCBmcmVlX2J1ZmZlcnNfY291bnQ7Ci0gIAotICAvKiBjdXJyZW50IGZyZWUgYnVmZmVyIHdoZXJlIHlvdSBoYXZlIHRvIHdyaXRlIGluY29taW5nIGRhdGEgKi8KLSAgZ3VpbnQgd3JpdGVfYnVmZmVyOwotICAKLSAgLyogc2l6ZSBvZiBidWZmZXJzIHN0cmVhbWVkIHRvIHRoZSBkZXZpY2UgKi8KLSAgZ3VpbnQgYnVmZmVyX3NpemU7Ci0KLSAgLyogbnVtYmVyIG9mIGJ1ZmZlcnMgc3RyZWFtZWQgdG8gdGhlIGRldmljZSAqLwotICBndWludCBidWZmZXJfY291bnQ7Ci0KLSAgLyogdG90YWwgb2YgYnl0ZXMgaW4gcXVldWUgYmVmb3JlIHRoZXkgYXJlIHdyaXR0ZW4gdG8gdGhlIGRldmljZSAqLwotICBndWludCBieXRlc19pbl9xdWV1ZTsKLQotICAvKiBieXRlcyBwZXIgc2FtcGxlIGZyb20gc2V0Y2FwcyB1c2VkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIgc2FtcGxlcyByZXR1cm5lZCBieSBkZWxheSAqLwotICBndWludCBieXRlc19wZXJfc2FtcGxlOwotCi0gIC8qIHdhdmUgZm9ybSBlcnJvciBzdHJpbmcgKi8KLSAgZ2NoYXIgZXJyb3Jfc3RyaW5nW0VSUk9SX0xFTkdUSF07Ci19OwotCi1zdHJ1Y3QgX0dzdFdhdmVGb3JtU2lua0NsYXNzCi17Ci0gIEdzdEF1ZGlvU2lua0NsYXNzIHBhcmVudF9jbGFzczsKLX07Ci0KLUdUeXBlIGdzdF93YXZlZm9ybV9zaW5rX2dldF90eXBlICh2b2lkKTsKLQotR19FTkRfREVDTFMKLSNlbmRpZiAvKiBfX0dTVF9XQVZFRk9STVNJTktfSF9fICovCmRpZmYgLS1naXQgYS9zeXMveGltYWdlL01ha2VmaWxlLmFtIGIvc3lzL3hpbWFnZS9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY3MTc3NS4uMDAwMDAwMAotLS0gYS9zeXMveGltYWdlL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotcGx1Z2luX0xUTElCUkFSSUVTID0gbGliZ3N0eGltYWdlc3JjLmxhCi0KLWxpYmdzdHhpbWFnZXNyY19sYV9TT1VSQ0VTID0gZ3N0eGltYWdlc3JjLmMgeGltYWdldXRpbC5jCi1saWJnc3R4aW1hZ2VzcmNfbGFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgXAotCSQoR1NUX0NGTEFHUykgXAotCSQoWF9DRkxBR1MpICQoWEZJWEVTX0NGTEFHUykgJChYREFNQUdFX0NGTEFHUykKLWxpYmdzdHhpbWFnZXNyY19sYV9MSUJBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pIFwKLQkkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKFhfTElCUykgJChYU0hNX0xJQlMpICQoWEZJWEVTX0xJQlMpICQoWERBTUFHRV9MSUJTKSAKLWxpYmdzdHhpbWFnZXNyY19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R4aW1hZ2VzcmNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLQotbm9pbnN0X0hFQURFUlMgPSBnc3R4aW1hZ2VzcmMuaCB4aW1hZ2V1dGlsLmgKZGlmZiAtLWdpdCBhL3N5cy94aW1hZ2UvTWFrZWZpbGUuaW4gYi9zeXMveGltYWdlL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODk3N2M1Li4wMDAwMDAwCi0tLSBhL3N5cy94aW1hZ2UvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw5MjkgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotc3ViZGlyID0gc3lzL3hpbWFnZQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQobm9pbnN0X0hFQURFUlMpIFwKLQkkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIgPSB7IFwKLSAgdGVzdCAteiAiJCRmaWxlcyIgXAotICAgIHx8IHsgdGVzdCAhIC1kICIkJGRpciIgJiYgdGVzdCAhIC1mICIkJGRpciIgJiYgdGVzdCAhIC1yICIkJGRpciI7IH0gXAotICAgIHx8IHsgZWNobyAiICggY2QgJyQkZGlyJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKLSAgICAgICAgICQoYW1fX2NkKSAiJCRkaXIiICYmIHJtIC1mICQkZmlsZXM7IH07IFwKLSAgfQotYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBsdWdpbmRpcikiCi1MVExJQlJBUklFUyA9ICQocGx1Z2luX0xUTElCUkFSSUVTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWxpYmdzdHhpbWFnZXNyY19sYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotYW1fbGliZ3N0eGltYWdlc3JjX2xhX09CSkVDVFMgPSBsaWJnc3R4aW1hZ2VzcmNfbGEtZ3N0eGltYWdlc3JjLmxvIFwKLQlsaWJnc3R4aW1hZ2VzcmNfbGEteGltYWdldXRpbC5sbwotbGliZ3N0eGltYWdlc3JjX2xhX09CSkVDVFMgPSAkKGFtX2xpYmdzdHhpbWFnZXNyY19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotbGliZ3N0eGltYWdlc3JjX2xhX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQobGliZ3N0eGltYWdlc3JjX2xhX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rIFwKLQkkKENDTEQpICQobGliZ3N0eGltYWdlc3JjX2xhX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKGxpYmdzdHhpbWFnZXNyY19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJnc3R4aW1hZ2VzcmNfbGFfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQobGliZ3N0eGltYWdlc3JjX2xhX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotSEVBREVSUyA9ICQobm9pbnN0X0hFQURFUlMpCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLXBsdWdpbl9MVExJQlJBUklFUyA9IGxpYmdzdHhpbWFnZXNyYy5sYQotbGliZ3N0eGltYWdlc3JjX2xhX1NPVVJDRVMgPSBnc3R4aW1hZ2VzcmMuYyB4aW1hZ2V1dGlsLmMKLWxpYmdzdHhpbWFnZXNyY19sYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSBcCi0JJChHU1RfQ0ZMQUdTKSBcCi0JJChYX0NGTEFHUykgJChYRklYRVNfQ0ZMQUdTKSAkKFhEQU1BR0VfQ0ZMQUdTKQotCi1saWJnc3R4aW1hZ2VzcmNfbGFfTElCQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0JJChHU1RfQkFTRV9MSUJTKSBcCi0JJChYX0xJQlMpICQoWFNITV9MSUJTKSAkKFhGSVhFU19MSUJTKSAkKFhEQU1BR0VfTElCUykgCi0KLWxpYmdzdHhpbWFnZXNyY19sYV9MREZMQUdTID0gJChHU1RfUExVR0lOX0xERkxBR1MpCi1saWJnc3R4aW1hZ2VzcmNfbGFfTElCVE9PTEZMQUdTID0gJChHU1RfUExVR0lOX0xJQlRPT0xGTEFHUykKLW5vaW5zdF9IRUFERVJTID0gZ3N0eGltYWdlc3JjLmggeGltYWdldXRpbC5oCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBzeXMveGltYWdlL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHN5cy94aW1hZ2UvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVM6ICQocGx1Z2luX0xUTElCUkFSSUVTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCUBsaXN0PSckKHBsdWdpbl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHBsdWdpbmRpcikiIHx8IGxpc3Q9OyBcCi0JbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgbGlzdDI9IiQkbGlzdDIgJCRwIjsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWRvbmU7IFwKLQl0ZXN0IC16ICIkJGxpc3QyIiB8fCB7IFwKLQkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBsdWdpbmRpcikiIHx8IGV4aXQgMTsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChwbHVnaW5kaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChwbHVnaW5kaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGx1Z2luX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQocGx1Z2luZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChwbHVnaW5kaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQocGx1Z2luZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1wbHVnaW5MVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChwbHVnaW5fTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKHBsdWdpbl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChwbHVnaW5fTFRMSUJSQVJJRVMpJzsgXAotCWxvY3M9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBcCi0JICAgICAgc2VkICdzfF5bXi9dKiQkfC58OyBzfC9bXi9dKiQkfHw7IHN8JCR8L3NvX2xvY2F0aW9uc3wnIHwgXAotCSAgICAgIHNvcnQgLXVgOyBcCi0JdGVzdCAteiAiJCRsb2NzIiB8fCB7IFwKLQkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKLQkgIHJtIC1mICQke2xvY3N9OyBcCi0JfQotCi1saWJnc3R4aW1hZ2VzcmMubGE6ICQobGliZ3N0eGltYWdlc3JjX2xhX09CSkVDVFMpICQobGliZ3N0eGltYWdlc3JjX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJnc3R4aW1hZ2VzcmNfbGFfREVQRU5ERU5DSUVTKSAKLQkkKEFNX1ZfQ0NMRCkkKGxpYmdzdHhpbWFnZXNyY19sYV9MSU5LKSAtcnBhdGggJChwbHVnaW5kaXIpICQobGliZ3N0eGltYWdlc3JjX2xhX09CSkVDVFMpICQobGliZ3N0eGltYWdlc3JjX2xhX0xJQkFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGliZ3N0eGltYWdlc3JjX2xhLWdzdHhpbWFnZXNyYy5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2xpYmdzdHhpbWFnZXNyY19sYS14aW1hZ2V1dGlsLlBsb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1saWJnc3R4aW1hZ2VzcmNfbGEtZ3N0eGltYWdlc3JjLmxvOiBnc3R4aW1hZ2VzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHhpbWFnZXNyY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R4aW1hZ2VzcmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGxpYmdzdHhpbWFnZXNyY19sYS1nc3R4aW1hZ2VzcmMubG8gLU1EIC1NUCAtTUYgJChERVBESVIpL2xpYmdzdHhpbWFnZXNyY19sYS1nc3R4aW1hZ2VzcmMuVHBvIC1jIC1vIGxpYmdzdHhpbWFnZXNyY19sYS1nc3R4aW1hZ2VzcmMubG8gYHRlc3QgLWYgJ2dzdHhpbWFnZXNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bnc3R4aW1hZ2VzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0eGltYWdlc3JjX2xhLWdzdHhpbWFnZXNyYy5UcG8gJChERVBESVIpL2xpYmdzdHhpbWFnZXNyY19sYS1nc3R4aW1hZ2VzcmMuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ3N0eGltYWdlc3JjLmMnIG9iamVjdD0nbGliZ3N0eGltYWdlc3JjX2xhLWdzdHhpbWFnZXNyYy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKGxpYmdzdHhpbWFnZXNyY19sYV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJnc3R4aW1hZ2VzcmNfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gbGliZ3N0eGltYWdlc3JjX2xhLWdzdHhpbWFnZXNyYy5sbyBgdGVzdCAtZiAnZ3N0eGltYWdlc3JjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdzdHhpbWFnZXNyYy5jCi0KLWxpYmdzdHhpbWFnZXNyY19sYS14aW1hZ2V1dGlsLmxvOiB4aW1hZ2V1dGlsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R4aW1hZ2VzcmNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0eGltYWdlc3JjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsaWJnc3R4aW1hZ2VzcmNfbGEteGltYWdldXRpbC5sbyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGliZ3N0eGltYWdlc3JjX2xhLXhpbWFnZXV0aWwuVHBvIC1jIC1vIGxpYmdzdHhpbWFnZXNyY19sYS14aW1hZ2V1dGlsLmxvIGB0ZXN0IC1mICd4aW1hZ2V1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHhpbWFnZXV0aWwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvbGliZ3N0eGltYWdlc3JjX2xhLXhpbWFnZXV0aWwuVHBvICQoREVQRElSKS9saWJnc3R4aW1hZ2VzcmNfbGEteGltYWdldXRpbC5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd4aW1hZ2V1dGlsLmMnIG9iamVjdD0nbGliZ3N0eGltYWdlc3JjX2xhLXhpbWFnZXV0aWwubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChsaWJnc3R4aW1hZ2VzcmNfbGFfTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGliZ3N0eGltYWdlc3JjX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxpYmdzdHhpbWFnZXNyY19sYS14aW1hZ2V1dGlsLmxvIGB0ZXN0IC1mICd4aW1hZ2V1dGlsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHhpbWFnZXV0aWwuYwotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykgJChIRUFERVJTKQotaW5zdGFsbGRpcnM6Ci0JZm9yIGRpciBpbiAiJChERVNURElSKSQocGx1Z2luZGlyKSI7IGRvIFwKLQkgIHRlc3QgLXogIiQkZGlyIiB8fCAkKE1LRElSX1ApICIkJGRpciI7IFwKLQlkb25lCi1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06IHVuaW5zdGFsbC1wbHVnaW5MVExJQlJBUklFUwotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tcGx1Z2luTFRMSUJSQVJJRVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcGx1Z2luTFRMSUJSQVJJRVMgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCi0JcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLXBsdWdpbkxUTElCUkFSSUVTCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9zeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jIGIvc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhZDRlMi4uMDAwMDAwMAotLS0gYS9zeXMveGltYWdlL2dzdHhpbWFnZXNyYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFoZWVyIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyoqCi0gKiBTRUNUSU9OOmVsZW1lbnQteGltYWdlc3JjCi0gKgotICogVGhpcyBlbGVtZW50IGNhcHR1cmVzIHlvdXIgWCBEaXNwbGF5IGFuZCBjcmVhdGVzIHJhdyBSR0IgdmlkZW8uICBJdCB1c2VzCi0gKiB0aGUgWERhbWFnZSBleHRlbnNpb24gaWYgYXZhaWxhYmxlIHRvIG9ubHkgY2FwdHVyZSBhcmVhcyBvZiB0aGUgc2NyZWVuIHRoYXQKLSAqIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBmcmFtZS4gIEl0IHVzZXMgdGhlIFhGaXhlcyBleHRlbnNpb24gaWYKLSAqIGF2YWlsYWJsZSB0byBhbHNvIGNhcHR1cmUgeW91ciBtb3VzZSBwb2ludGVyLiAgQnkgZGVmYXVsdCBpdCB3aWxsIGZpeGF0ZSB0bwotICogMjUgZnJhbWVzIHBlciBzZWNvbmQuCi0gKgotICogPHJlZnNlY3QyPgotICogPHRpdGxlPkV4YW1wbGUgcGlwZWxpbmVzPC90aXRsZT4KLSAqIHxbCi0gKiBnc3QtbGF1bmNoLTEuMCB4aW1hZ2VzcmMgISB2aWRlby94LXJhdyxmcmFtZXJhdGU9NS8xICEgdmlkZW9jb252ZXJ0ICEgdGhlb3JhZW5jICEgb2dnbXV4ICEgZmlsZXNpbmsgbG9jYXRpb249ZGVza3RvcC5vZ2cKLSAqIF18IEVuY29kZXMgeW91ciBYIGRpc3BsYXkgdG8gYW4gT2dnIHRoZW9yYSB2aWRlbyBhdCA1IGZyYW1lcyBwZXIgc2Vjb25kLgotICogPC9yZWZzZWN0Mj4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0jaW5jbHVkZSAiZ3N0eGltYWdlc3JjLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPFgxMS9YbGliLmg+Ci0jaW5jbHVkZSA8WDExL1h1dGlsLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC1pMThuLXBsdWdpbi5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSAiZ3N0L2dsaWItY29tcGF0LXByaXZhdGUuaCIKLQotR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyAoZ3N0X2RlYnVnX3hpbWFnZV9zcmMpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgZ3N0X2RlYnVnX3hpbWFnZV9zcmMKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHQgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcsICIKLSAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWyAwLCBNQVggXSwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbIDEsIE1BWCBdLCAiICJoZWlnaHQgPSAoaW50KSBbIDEsIE1BWCBdLCAiCi0gICAgICAgICJwaXhlbC1hc3BlY3QtcmF0aW8gPSAoZnJhY3Rpb24pIFsgMCwgTUFYIF0iKSk7Ci0KLWVudW0KLXsKLSAgUFJPUF8wLAotICBQUk9QX0RJU1BMQVlfTkFNRSwKLSAgUFJPUF9TSE9XX1BPSU5URVIsCi0gIFBST1BfVVNFX0RBTUFHRSwKLSAgUFJPUF9TVEFSVFgsCi0gIFBST1BfU1RBUlRZLAotICBQUk9QX0VORFgsCi0gIFBST1BfRU5EWSwKLSAgUFJPUF9SRU1PVEUsCi0gIFBST1BfWElELAotICBQUk9QX1hOQU1FLAotfTsKLQotI2RlZmluZSBnc3RfeGltYWdlX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCi1HX0RFRklORV9UWVBFIChHc3RYSW1hZ2VTcmMsIGdzdF94aW1hZ2Vfc3JjLCBHU1RfVFlQRV9QVVNIX1NSQyk7Ci0KLXN0YXRpYyBHc3RDYXBzICpnc3RfeGltYWdlX3NyY19maXhhdGUgKEdzdEJhc2VTcmMgKiBic3JjLCBHc3RDYXBzICogY2Fwcyk7Ci1zdGF0aWMgdm9pZCBnc3RfeGltYWdlX3NyY19jbGVhcl9idWZwb29sIChHc3RYSW1hZ2VTcmMgKiB4aW1hZ2VzcmMpOwotCi0vKiBDYWxsZWQgd2hlbiBhIGJ1ZmZlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwaXBlbGluZSAqLwotc3RhdGljIGdib29sZWFuCi1nc3RfeGltYWdlX3NyY19yZXR1cm5fYnVmIChHc3RYSW1hZ2VTcmMgKiB4aW1hZ2VzcmMsIEdzdEJ1ZmZlciAqIHhpbWFnZSkKLXsKLSAgR3N0TWV0YVhJbWFnZSAqbWV0YSA9IEdTVF9NRVRBX1hJTUFHRV9HRVQgKHhpbWFnZSk7Ci0gIC8qIFRydWUgd2lsbCBtYWtlIGRpc3Bvc2UgZnJlZSB0aGUgYnVmZmVyLCB3aGlsZSBmYWxzZSB3aWxsIGtlZXAgaXQgKi8KLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICAvKiBJZiBvdXIgZ2VvbWV0cnkgY2hhbmdlZCB3ZSBjYW4ndCByZXVzZSB0aGF0IGltYWdlLiAqLwotICBpZiAoKG1ldGEtPndpZHRoICE9IHhpbWFnZXNyYy0+d2lkdGgpIHx8IChtZXRhLT5oZWlnaHQgIT0geGltYWdlc3JjLT5oZWlnaHQpKSB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVCAoeGltYWdlc3JjLAotICAgICAgICAiZGVzdHJveSBpbWFnZSAlcCBhcyBpdHMgc2l6ZSBjaGFuZ2VkICVkeCVkIHZzIGN1cnJlbnQgJWR4JWQiLAotICAgICAgICB4aW1hZ2UsIG1ldGEtPndpZHRoLCBtZXRhLT5oZWlnaHQsIHhpbWFnZXNyYy0+d2lkdGgsIHhpbWFnZXNyYy0+aGVpZ2h0KTsKLSAgICBnX211dGV4X2xvY2sgKCZ4aW1hZ2VzcmMtPnhfbG9jayk7Ci0gICAgZ3N0X3hpbWFnZXV0aWxfeGltYWdlX2Rlc3Ryb3kgKHhpbWFnZXNyYy0+eGNvbnRleHQsIHhpbWFnZSk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZ4aW1hZ2VzcmMtPnhfbG9jayk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogSW4gdGhhdCBjYXNlIHdlIGNhbiByZXVzZSB0aGUgaW1hZ2UgYW5kIGFkZCBpdCB0byBvdXIgaW1hZ2UgcG9vbC4gKi8KLSAgICBHU1RfTE9HX09CSkVDVCAoeGltYWdlc3JjLCAicmVjeWNsaW5nIGltYWdlICVwIGluIHBvb2wiLCB4aW1hZ2UpOwotICAgIC8qIG5lZWQgdG8gaW5jcmVtZW50IHRoZSByZWZjb3VudCBhZ2FpbiB0byByZWN5Y2xlICovCi0gICAgZ3N0X2J1ZmZlcl9yZWYgKHhpbWFnZSk7Ci0gICAgZ19tdXRleF9sb2NrICgmeGltYWdlc3JjLT5wb29sX2xvY2spOwotICAgIEdTVF9CVUZGRVJfRkxBR1MgKEdTVF9CVUZGRVIgKHhpbWFnZSkpID0gMDsgLyogY2xlYXIgb3V0IGFueSBmbGFncyBmcm9tIHRoZSBwcmV2aW91cyB1c2UgKi8KLSAgICB4aW1hZ2VzcmMtPmJ1ZmZlcl9wb29sID0gZ19zbGlzdF9wcmVwZW5kICh4aW1hZ2VzcmMtPmJ1ZmZlcl9wb29sLCB4aW1hZ2UpOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmeGltYWdlc3JjLT5wb29sX2xvY2spOwotICAgIHJldCA9IEZBTFNFOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIFdpbmRvdwotZ3N0X3hpbWFnZV9zcmNfZmluZF93aW5kb3cgKEdzdFhJbWFnZVNyYyAqIHNyYywgV2luZG93IHJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIFdpbmRvdyAqY2hpbGRyZW47Ci0gIFdpbmRvdyB3aW5kb3cgPSAwLCByb290X3JldHVybiwgcGFyZW50X3JldHVybjsKLSAgdW5zaWduZWQgaW50IG5jaGlsZHJlbjsKLSAgY2hhciAqdG1wbmFtZTsKLSAgaW50IG4sIHN0YXR1czsKLQotICBzdGF0dXMgPSBYRmV0Y2hOYW1lIChzcmMtPnhjb250ZXh0LT5kaXNwLCByb290LCAmdG1wbmFtZSk7Ci0gIGlmIChzdGF0dXMgJiYgIXN0cmNtcCAobmFtZSwgdG1wbmFtZSkpCi0gICAgcmV0dXJuIHJvb3Q7Ci0KLSAgc3RhdHVzID0KLSAgICAgIFhRdWVyeVRyZWUgKHNyYy0+eGNvbnRleHQtPmRpc3AsIHJvb3QsICZyb290X3JldHVybiwgJnBhcmVudF9yZXR1cm4sCi0gICAgICAmY2hpbGRyZW4sICZuY2hpbGRyZW4pOwotICBpZiAoIXN0YXR1cyB8fCAhY2hpbGRyZW4pCi0gICAgcmV0dXJuIChXaW5kb3cpIDA7Ci0KLSAgZm9yIChuID0gMDsgbiA8IG5jaGlsZHJlbjsgKytuKSB7Ci0gICAgd2luZG93ID0gZ3N0X3hpbWFnZV9zcmNfZmluZF93aW5kb3cgKHNyYywgY2hpbGRyZW5bbl0sIG5hbWUpOwotICAgIGlmICh3aW5kb3cgIT0gMCkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgWEZyZWUgKGNoaWxkcmVuKTsKLSAgcmV0dXJuIHdpbmRvdzsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfeGltYWdlX3NyY19vcGVuX2Rpc3BsYXkgKEdzdFhJbWFnZVNyYyAqIHMsIGNvbnN0IGdjaGFyICogbmFtZSkKLXsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdTVF9JU19YSU1BR0VfU1JDIChzKSwgRkFMU0UpOwotCi0gIGlmIChzLT54Y29udGV4dCAhPSBOVUxMKQotICAgIHJldHVybiBUUlVFOwotCi0gIGdfbXV0ZXhfbG9jayAoJnMtPnhfbG9jayk7Ci0gIHMtPnhjb250ZXh0ID0geGltYWdldXRpbF94Y29udGV4dF9nZXQgKEdTVF9FTEVNRU5UIChzKSwgbmFtZSk7Ci0gIGlmIChzLT54Y29udGV4dCA9PSBOVUxMKSB7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZzLT54X2xvY2spOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SIChzLCBSRVNPVVJDRSwgT1BFTl9SRUFELAotICAgICAgICAoIkNvdWxkIG5vdCBvcGVuIFggZGlzcGxheSBmb3IgcmVhZGluZyIpLAotICAgICAgICAoIk5VTEwgcmV0dXJuZWQgZnJvbSBnZXR0aW5nIHhjb250ZXh0IikpOwotICAgIHJldHVybiBGQUxTRTsKLSAgfQotICBzLT53aWR0aCA9IHMtPnhjb250ZXh0LT53aWR0aDsKLSAgcy0+aGVpZ2h0ID0gcy0+eGNvbnRleHQtPmhlaWdodDsKLQotICBzLT54d2luZG93ID0gcy0+eGNvbnRleHQtPnJvb3Q7Ci0gIGlmIChzLT54aWQgIT0gMCB8fCBzLT54bmFtZSkgewotICAgIGludCBzdGF0dXM7Ci0gICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgV2luZG93IHdpbmRvdzsKLSAgICBpbnQgeCwgeTsKLSAgICBXaW5kb3cgY2hpbGQ7Ci0gICAgQm9vbCBjb29yZF90cmFuc2xhdGVkOwotCi0gICAgaWYgKHMtPnhpZCAhPSAwKSB7Ci0gICAgICBzdGF0dXMgPSBYR2V0V2luZG93QXR0cmlidXRlcyAocy0+eGNvbnRleHQtPmRpc3AsIHMtPnhpZCwgJmF0dHJzKTsKLSAgICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocywgIkZvdW5kIHdpbmRvdyBYSUQgJSIgR19HVUlOVDY0X0ZPUk1BVCwgcy0+eGlkKTsKLSAgICAgICAgcy0+eHdpbmRvdyA9IHMtPnhpZDsKLSAgICAgICAgZ290byB3aW5kb3dfZm91bmQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHMsICJGYWlsZWQgdG8gZ2V0IHdpbmRvdyAlIiBHX0dVSU5UNjRfRk9STUFUCi0gICAgICAgICAgICAiIGF0dHJpYnV0ZXMiLCBzLT54aWQpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChzLT54bmFtZSkgewotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocywgIkxvb2tpbmcgZm9yIHdpbmRvdyAlcyIsIHMtPnhuYW1lKTsKLSAgICAgIHdpbmRvdyA9IGdzdF94aW1hZ2Vfc3JjX2ZpbmRfd2luZG93IChzLCBzLT54Y29udGV4dC0+cm9vdCwgcy0+eG5hbWUpOwotICAgICAgaWYgKHdpbmRvdyAhPSAwKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHMsICJGb3VuZCB3aW5kb3cgbmFtZWQgJXMsICIsIHMtPnhuYW1lKTsKLSAgICAgICAgc3RhdHVzID0gWEdldFdpbmRvd0F0dHJpYnV0ZXMgKHMtPnhjb250ZXh0LT5kaXNwLCB3aW5kb3csICZhdHRycyk7Ci0gICAgICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgICBzLT54d2luZG93ID0gd2luZG93OwotICAgICAgICAgIGdvdG8gd2luZG93X2ZvdW5kOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocywgIkZhaWxlZCB0byBnZXQgd2luZG93IGF0dHJpYnV0ZXMgZm9yICIKLSAgICAgICAgICAgICAgIndpbmRvdyBuYW1lZCAlcyIsIHMtPnhuYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIEdTVF9JTkZPX09CSkVDVCAocywgIlVzaW5nIHJvb3Qgd2luZG93Iik7Ci0gICAgZ290byB1c2Vfcm9vdF93aW5kb3c7Ci0KLSAgd2luZG93X2ZvdW5kOgotICAgIGdfYXNzZXJ0IChzLT54d2luZG93ICE9IDApOwotICAgIHMtPndpZHRoID0gYXR0cnMud2lkdGg7Ci0gICAgcy0+aGVpZ2h0ID0gYXR0cnMuaGVpZ2h0OwotCi0gICAgY29vcmRfdHJhbnNsYXRlZCA9IFhUcmFuc2xhdGVDb29yZGluYXRlcyAocy0+eGNvbnRleHQtPmRpc3AsIHMtPnh3aW5kb3csCi0gICAgICAgIHMtPnhjb250ZXh0LT5yb290LCAwLCAwLCAmeCwgJnksICZjaGlsZCk7Ci0gICAgaWYgKGNvb3JkX3RyYW5zbGF0ZWQpIHsKLSAgICAgIHMtPnggPSB4OwotICAgICAgcy0+eSA9IHk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHMtPnggPSAwOwotICAgICAgcy0+eSA9IDA7Ci0gICAgfQotCi0gICAgR1NUX0lORk9fT0JKRUNUIChzLCAiVXNpbmcgZGVmYXVsdCB3aW5kb3cgc2l6ZSBvZiAlZHglZCBhdCBsb2NhdGlvbiAlZCwlZCIsCi0gICAgICAgIHMtPndpZHRoLCBzLT5oZWlnaHQsIHMtPngsIHMtPnkpOwotICB9Ci11c2Vfcm9vdF93aW5kb3c6Ci0KLSNpZmRlZiBIQVZFX1hGSVhFUwotICAvKiBjaGVjayBpZiB4Zml4ZXMgc3VwcG9ydGVkICovCi0gIHsKLSAgICBpbnQgZXJyb3JfYmFzZTsKLQotICAgIGlmIChYRml4ZXNRdWVyeUV4dGVuc2lvbiAocy0+eGNvbnRleHQtPmRpc3AsICZzLT5maXhlc19ldmVudF9iYXNlLAotICAgICAgICAgICAgJmVycm9yX2Jhc2UpKSB7Ci0gICAgICBzLT5oYXZlX3hmaXhlcyA9IFRSVUU7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzLCAiWCBTZXJ2ZXIgc3VwcG9ydHMgWEZpeGVzIik7Ci0gICAgfSBlbHNlIHsKLQotICAgICAgR1NUX0RFQlVHX09CSkVDVCAocywgIlggU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgWEZpeGVzIik7Ci0gICAgfQotICB9Ci0KLSNpZmRlZiBIQVZFX1hEQU1BR0UKLSAgLyogY2hlY2sgaWYgeGRhbWFnZSBpcyBzdXBwb3J0ZWQgKi8KLSAgewotICAgIGludCBlcnJvcl9iYXNlOwotICAgIGxvbmcgZXZtYXNrID0gTm9FdmVudE1hc2s7Ci0KLSAgICBzLT5oYXZlX3hkYW1hZ2UgPSBGQUxTRTsKLSAgICBzLT5kYW1hZ2UgPSBOb25lOwotICAgIHMtPmRhbWFnZV9jb3B5X2djID0gTm9uZTsKLSAgICBzLT5kYW1hZ2VfcmVnaW9uID0gTm9uZTsKLQotICAgIGlmIChYRGFtYWdlUXVlcnlFeHRlbnNpb24gKHMtPnhjb250ZXh0LT5kaXNwLCAmcy0+ZGFtYWdlX2V2ZW50X2Jhc2UsCi0gICAgICAgICAgICAmZXJyb3JfYmFzZSkpIHsKLSAgICAgIHMtPmRhbWFnZSA9Ci0gICAgICAgICAgWERhbWFnZUNyZWF0ZSAocy0+eGNvbnRleHQtPmRpc3AsIHMtPnh3aW5kb3csIFhEYW1hZ2VSZXBvcnROb25FbXB0eSk7Ci0gICAgICBpZiAocy0+ZGFtYWdlICE9IE5vbmUpIHsKLSAgICAgICAgcy0+ZGFtYWdlX3JlZ2lvbiA9IFhGaXhlc0NyZWF0ZVJlZ2lvbiAocy0+eGNvbnRleHQtPmRpc3AsIE5VTEwsIDApOwotICAgICAgICBpZiAocy0+ZGFtYWdlX3JlZ2lvbiAhPSBOb25lKSB7Ci0gICAgICAgICAgWEdDVmFsdWVzIHZhbHVlczsKLQotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHMsICJVc2luZyBYRGFtYWdlIGV4dGVuc2lvbiIpOwotICAgICAgICAgIHZhbHVlcy5zdWJ3aW5kb3dfbW9kZSA9IEluY2x1ZGVJbmZlcmlvcnM7Ci0gICAgICAgICAgcy0+ZGFtYWdlX2NvcHlfZ2MgPSBYQ3JlYXRlR0MgKHMtPnhjb250ZXh0LT5kaXNwLAotICAgICAgICAgICAgICBzLT54d2luZG93LCBHQ1N1YndpbmRvd01vZGUsICZ2YWx1ZXMpOwotICAgICAgICAgIFhTZWxlY3RJbnB1dCAocy0+eGNvbnRleHQtPmRpc3AsIHMtPnh3aW5kb3csIGV2bWFzayk7Ci0KLSAgICAgICAgICBzLT5oYXZlX3hkYW1hZ2UgPSBUUlVFOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFhEYW1hZ2VEZXN0cm95IChzLT54Y29udGV4dC0+ZGlzcCwgcy0+ZGFtYWdlKTsKLSAgICAgICAgICBzLT5kYW1hZ2UgPSBOb25lOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocywgIkNvdWxkIG5vdCBhdHRhY2ggdG8gWERhbWFnZSIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUIChzLCAiWCBTZXJ2ZXIgZG9lcyBub3QgaGF2ZSBYRGFtYWdlIGV4dGVuc2lvbiIpOwotICAgIH0KLSAgfQotI2VuZGlmCi0jZW5kaWYKLQotICBnX211dGV4X3VubG9jayAoJnMtPnhfbG9jayk7Ci0KLSAgaWYgKHMtPnhjb250ZXh0ID09IE5VTEwpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF94aW1hZ2Vfc3JjX3N0YXJ0IChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0WEltYWdlU3JjICpzID0gR1NUX1hJTUFHRV9TUkMgKGJhc2VzcmMpOwotCi0gIHMtPmxhc3RfZnJhbWVfbm8gPSAtMTsKLSNpZmRlZiBIQVZFX1hEQU1BR0UKLSAgaWYgKHMtPmxhc3RfeGltYWdlKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAocy0+bGFzdF94aW1hZ2UpKTsKLSAgcy0+bGFzdF94aW1hZ2UgPSBOVUxMOwotI2VuZGlmCi0gIHJldHVybiBnc3RfeGltYWdlX3NyY19vcGVuX2Rpc3BsYXkgKHMsIHMtPmRpc3BsYXlfbmFtZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3hpbWFnZV9zcmNfc3RvcCAoR3N0QmFzZVNyYyAqIGJhc2VzcmMpCi17Ci0gIEdzdFhJbWFnZVNyYyAqc3JjID0gR1NUX1hJTUFHRV9TUkMgKGJhc2VzcmMpOwotCi0jaWZkZWYgSEFWRV9YREFNQUdFCi0gIGlmIChzcmMtPmxhc3RfeGltYWdlKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVJfQ0FTVCAoc3JjLT5sYXN0X3hpbWFnZSkpOwotICBzcmMtPmxhc3RfeGltYWdlID0gTlVMTDsKLSNlbmRpZgotCi0gIGdzdF94aW1hZ2Vfc3JjX2NsZWFyX2J1ZnBvb2wgKHNyYyk7Ci0KLSNpZmRlZiBIQVZFX1hGSVhFUwotICBpZiAoc3JjLT5jdXJzb3JfaW1hZ2UpCi0gICAgWEZyZWUgKHNyYy0+Y3Vyc29yX2ltYWdlKTsKLSAgc3JjLT5jdXJzb3JfaW1hZ2UgPSBOVUxMOwotI2VuZGlmCi0KLSAgaWYgKHNyYy0+eGNvbnRleHQpIHsKLSAgICBnX211dGV4X2xvY2sgKCZzcmMtPnhfbG9jayk7Ci0KLSNpZmRlZiBIQVZFX1hEQU1BR0UKLSAgICBpZiAoc3JjLT5kYW1hZ2VfY29weV9nYyAhPSBOb25lKSB7Ci0gICAgICBYRnJlZUdDIChzcmMtPnhjb250ZXh0LT5kaXNwLCBzcmMtPmRhbWFnZV9jb3B5X2djKTsKLSAgICAgIHNyYy0+ZGFtYWdlX2NvcHlfZ2MgPSBOb25lOwotICAgIH0KLSAgICBpZiAoc3JjLT5kYW1hZ2VfcmVnaW9uICE9IE5vbmUpIHsKLSAgICAgIFhGaXhlc0Rlc3Ryb3lSZWdpb24gKHNyYy0+eGNvbnRleHQtPmRpc3AsIHNyYy0+ZGFtYWdlX3JlZ2lvbik7Ci0gICAgICBzcmMtPmRhbWFnZV9yZWdpb24gPSBOb25lOwotICAgIH0KLSAgICBpZiAoc3JjLT5kYW1hZ2UgIT0gTm9uZSkgewotICAgICAgWERhbWFnZURlc3Ryb3kgKHNyYy0+eGNvbnRleHQtPmRpc3AsIHNyYy0+ZGFtYWdlKTsKLSAgICAgIHNyYy0+ZGFtYWdlID0gTm9uZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHhpbWFnZXV0aWxfeGNvbnRleHRfY2xlYXIgKHNyYy0+eGNvbnRleHQpOwotICAgIHNyYy0+eGNvbnRleHQgPSBOVUxMOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmc3JjLT54X2xvY2spOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZ3N0X3hpbWFnZV9zcmNfdW5sb2NrIChHc3RCYXNlU3JjICogYmFzZXNyYykKLXsKLSAgR3N0WEltYWdlU3JjICpzcmMgPSBHU1RfWElNQUdFX1NSQyAoYmFzZXNyYyk7Ci0KLSAgLyogQXdha2VuIHRoZSBjcmVhdGUoKSBmdW5jIGlmIGl0J3Mgd2FpdGluZyBvbiB0aGUgY2xvY2sgKi8KLSAgR1NUX09CSkVDVF9MT0NLIChzcmMpOwotICBpZiAoc3JjLT5jbG9ja19pZCkgewotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNyYywgIldha2luZyB1cCB3YWl0aW5nIGNsb2NrIik7Ci0gICAgZ3N0X2Nsb2NrX2lkX3Vuc2NoZWR1bGUgKHNyYy0+Y2xvY2tfaWQpOwotICB9Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzcmMpOwotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF94aW1hZ2Vfc3JjX3JlY2FsYyAoR3N0WEltYWdlU3JjICogc3JjKQotewotICBpZiAoIXNyYy0+eGNvbnRleHQpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIE1heWJlIGxhdGVyIHdlIGNhbiBjaGVjayB0aGUgZGlzcGxheSBoYXNuJ3QgY2hhbmdlZCBzaXplICovCi0gIC8qIFdlIGNvdWxkIHVzZSBYUXVlcnlQb2ludGVyIHRvIGdldCBvbmx5IHRoZSBjdXJyZW50IHdpbmRvdy4gKi8KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNpZmRlZiBIQVZFX1hGSVhFUwotc3RhdGljIGdib29sZWFuCi1nc3RfeGltYWdlX2lzX3BvaW50ZXJfaW5fcmVnaW9uIChHc3RYSW1hZ2VTcmMgKiBzcmMpCi17Ci0gIFdpbmRvdyB3aW5kb3dfcmV0dXJuZWQ7Ci0gIGludCByb290X3gsIHJvb3RfeTsKLSAgaW50IHdpbl94LCB3aW5feTsKLSAgdW5zaWduZWQgaW50IG1hc2tfcmV0dXJuOwotICBCb29sIG9uX3dpbmRvdzsKLQotICBvbl93aW5kb3cgPSBYUXVlcnlQb2ludGVyIChzcmMtPnhjb250ZXh0LT5kaXNwLCBzcmMtPnh3aW5kb3csCi0gICAgICAmd2luZG93X3JldHVybmVkLCAmd2luZG93X3JldHVybmVkLCAmcm9vdF94LCAmcm9vdF95LCAmd2luX3gsICZ3aW5feSwKLSAgICAgICZtYXNrX3JldHVybik7Ci0KLSAgcmV0dXJuIChvbl93aW5kb3cgJiYgKHdpbl94ID49IHNyYy0+c3RhcnR4KSAmJiAod2luX3kgPj0gc3JjLT5zdGFydHkpICYmCi0gICAgICAod2luX3ggPCBzcmMtPmVuZHgpICYmICh3aW5feSA8IHNyYy0+ZW5keSkpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1hGSVhFUwotc3RhdGljIHZvaWQKLWNvbXBvc2l0ZV9waXhlbCAoR3N0WENvbnRleHQgKiB4Y29udGV4dCwgZ3VjaGFyICogZGVzdCwgZ3VjaGFyICogc3JjKQotewotICBndWludDggciA9IHNyY1syXTsKLSAgZ3VpbnQ4IGcgPSBzcmNbMV07Ci0gIGd1aW50OCBiID0gc3JjWzBdOwotICBndWludDggYSA9IHNyY1szXTsKLSAgZ3VpbnQ4IGRyLCBkZywgZGI7Ci0gIGd1aW50MzIgY29sb3I7Ci0gIGdpbnQgcl9zaGlmdCwgcl9tYXgsIHJfc2hpZnRfb3V0OwotICBnaW50IGdfc2hpZnQsIGdfbWF4LCBnX3NoaWZ0X291dDsKLSAgZ2ludCBiX3NoaWZ0LCBiX21heCwgYl9zaGlmdF9vdXQ7Ci0KLSAgc3dpdGNoICh4Y29udGV4dC0+YnBwKSB7Ci0gICAgY2FzZSA4OgotICAgICAgY29sb3IgPSAqZGVzdDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTY6Ci0gICAgICBjb2xvciA9IEdVSU5UMTZfRlJPTV9MRSAoKihndWludDE2ICopIChkZXN0KSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDMyOgotICAgICAgY29sb3IgPSBHVUlOVDMyX0ZST01fTEUgKCooZ3VpbnQzMiAqKSAoZGVzdCkpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8qIFNob3VsZCBub3QgcmVhY2ggaGVyZSAqLwotICAgICAgZ19yZXR1cm5faWZfcmVhY2hlZCAoKTsKLSAgfQotCi0gIC8qIHBvc3NpYmxlIG9wdGltaXNhdGlvbjoKLSAgICogbW92ZSB0aGUgY29kZSB0aGF0IGZpbmRzIHNoaWZ0IGFuZCBtYXggaW4gdGhlIF9saW5rIGZ1bmN0aW9uICovCi0gIGZvciAocl9zaGlmdCA9IDA7ICEoeGNvbnRleHQtPnZpc3VhbC0+cmVkX21hc2sgJiAoMSA8PCByX3NoaWZ0KSk7IHJfc2hpZnQrKyk7Ci0gIGZvciAoZ19zaGlmdCA9IDA7ICEoeGNvbnRleHQtPnZpc3VhbC0+Z3JlZW5fbWFzayAmICgxIDw8IGdfc2hpZnQpKTsKLSAgICAgIGdfc2hpZnQrKyk7Ci0gIGZvciAoYl9zaGlmdCA9IDA7ICEoeGNvbnRleHQtPnZpc3VhbC0+Ymx1ZV9tYXNrICYgKDEgPDwgYl9zaGlmdCkpOyBiX3NoaWZ0KyspOwotCi0gIGZvciAocl9zaGlmdF9vdXQgPSAwOyAhKHhjb250ZXh0LT52aXN1YWwtPnJlZF9tYXNrICYgKDEgPDwgcl9zaGlmdF9vdXQpKTsKLSAgICAgIHJfc2hpZnRfb3V0KyspOwotICBmb3IgKGdfc2hpZnRfb3V0ID0gMDsgISh4Y29udGV4dC0+dmlzdWFsLT5ncmVlbl9tYXNrICYgKDEgPDwgZ19zaGlmdF9vdXQpKTsKLSAgICAgIGdfc2hpZnRfb3V0KyspOwotICBmb3IgKGJfc2hpZnRfb3V0ID0gMDsgISh4Y29udGV4dC0+dmlzdWFsLT5ibHVlX21hc2sgJiAoMSA8PCBiX3NoaWZ0X291dCkpOwotICAgICAgYl9zaGlmdF9vdXQrKyk7Ci0KLQotICByX21heCA9ICh4Y29udGV4dC0+dmlzdWFsLT5yZWRfbWFzayA+PiByX3NoaWZ0KTsKLSAgYl9tYXggPSAoeGNvbnRleHQtPnZpc3VhbC0+Ymx1ZV9tYXNrID4+IGJfc2hpZnQpOwotICBnX21heCA9ICh4Y29udGV4dC0+dmlzdWFsLT5ncmVlbl9tYXNrID4+IGdfc2hpZnQpOwotCi0jZGVmaW5lIFJHQlhYWF9SKHgpICAoKCh4KT4+cl9zaGlmdCkgJiAocl9tYXgpKQotI2RlZmluZSBSR0JYWFhfRyh4KSAgKCgoeCk+Pmdfc2hpZnQpICYgKGdfbWF4KSkKLSNkZWZpbmUgUkdCWFhYX0IoeCkgICgoKHgpPj5iX3NoaWZ0KSAmIChiX21heCkpCi0KLSAgZHIgPSAoUkdCWFhYX1IgKGNvbG9yKSAqIDI1NSkgLyByX21heDsKLSAgZGcgPSAoUkdCWFhYX0cgKGNvbG9yKSAqIDI1NSkgLyBnX21heDsKLSAgZGIgPSAoUkdCWFhYX0IgKGNvbG9yKSAqIDI1NSkgLyBiX21heDsKLQotICBkciA9IChyICogYSArICgweGZmIC0gYSkgKiBkcikgLyAweGZmOwotICBkZyA9IChnICogYSArICgweGZmIC0gYSkgKiBkZykgLyAweGZmOwotICBkYiA9IChiICogYSArICgweGZmIC0gYSkgKiBkYikgLyAweGZmOwotCi0gIGNvbG9yID0gKCgoZHIgKiByX21heCkgLyAyNTUpIDw8IHJfc2hpZnRfb3V0KSArCi0gICAgICAoKChkZyAqIGdfbWF4KSAvIDI1NSkgPDwgZ19zaGlmdF9vdXQpICsKLSAgICAgICgoKGRiICogYl9tYXgpIC8gMjU1KSA8PCBiX3NoaWZ0X291dCk7Ci0KLSAgc3dpdGNoICh4Y29udGV4dC0+YnBwKSB7Ci0gICAgY2FzZSA4OgotICAgICAgKmRlc3QgPSBjb2xvcjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTY6Ci0gICAgICAqKGd1aW50MTYgKikgKGRlc3QpID0gY29sb3I7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDMyOgotICAgICAgKihndWludDMyICopIChkZXN0KSA9IGNvbG9yOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfd2FybmluZyAoImJwcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCB4Y29udGV4dC0+YnBwKTsKLSAgfQotfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1hEQU1BR0UKLXN0YXRpYyB2b2lkCi1jb3B5X2J1ZmZlciAoR3N0QnVmZmVyICogZGVzdCwgR3N0QnVmZmVyICogc3JjKQotewotICBHc3RNYXBJbmZvIG1hcDsKLQotICBnc3RfYnVmZmVyX21hcCAoc3JjLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGRlc3QsIDAsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKHNyYywgJm1hcCk7Ci19Ci0jZW5kaWYKLQotLyogUmV0cmlldmUgYW4gWEltYWdlU3JjQnVmZmVyLCBwcmVmZXJhYmx5IGZyb20gb3VyCi0gKiBwb29sIG9mIGV4aXN0aW5nIGltYWdlcyBhbmQgcG9wdWxhdGUgaXQgZnJvbSB0aGUgd2luZG93ICovCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdzdF94aW1hZ2Vfc3JjX3hpbWFnZV9nZXQgKEdzdFhJbWFnZVNyYyAqIHhpbWFnZXNyYykKLXsKLSAgR3N0QnVmZmVyICp4aW1hZ2UgPSBOVUxMOwotICBHc3RNZXRhWEltYWdlICptZXRhOwotCi0gIGdfbXV0ZXhfbG9jayAoJnhpbWFnZXNyYy0+cG9vbF9sb2NrKTsKLSAgd2hpbGUgKHhpbWFnZXNyYy0+YnVmZmVyX3Bvb2wgIT0gTlVMTCkgewotICAgIHhpbWFnZSA9IHhpbWFnZXNyYy0+YnVmZmVyX3Bvb2wtPmRhdGE7Ci0KLSAgICBtZXRhID0gR1NUX01FVEFfWElNQUdFX0dFVCAoeGltYWdlKTsKLQotICAgIHhpbWFnZXNyYy0+YnVmZmVyX3Bvb2wgPSBnX3NsaXN0X2RlbGV0ZV9saW5rICh4aW1hZ2VzcmMtPmJ1ZmZlcl9wb29sLAotICAgICAgICB4aW1hZ2VzcmMtPmJ1ZmZlcl9wb29sKTsKLQotICAgIGlmICgobWV0YS0+d2lkdGggPT0geGltYWdlc3JjLT53aWR0aCkgfHwKLSAgICAgICAgKG1ldGEtPmhlaWdodCA9PSB4aW1hZ2VzcmMtPmhlaWdodCkpCi0gICAgICBicmVhazsKLQotICAgIGdzdF94aW1hZ2VfYnVmZmVyX2ZyZWUgKHhpbWFnZSk7Ci0gICAgeGltYWdlID0gTlVMTDsKLSAgfQotICBnX211dGV4X3VubG9jayAoJnhpbWFnZXNyYy0+cG9vbF9sb2NrKTsKLQotICBpZiAoeGltYWdlID09IE5VTEwpIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUICh4aW1hZ2VzcmMsICJjcmVhdGluZyBpbWFnZSAoJWR4JWQpIiwKLSAgICAgICAgeGltYWdlc3JjLT53aWR0aCwgeGltYWdlc3JjLT5oZWlnaHQpOwotCi0gICAgZ19tdXRleF9sb2NrICgmeGltYWdlc3JjLT54X2xvY2spOwotICAgIHhpbWFnZSA9IGdzdF94aW1hZ2V1dGlsX3hpbWFnZV9uZXcgKHhpbWFnZXNyYy0+eGNvbnRleHQsCi0gICAgICAgIEdTVF9FTEVNRU5UICh4aW1hZ2VzcmMpLCB4aW1hZ2VzcmMtPndpZHRoLCB4aW1hZ2VzcmMtPmhlaWdodCwKLSAgICAgICAgKEJ1ZmZlclJldHVybkZ1bmMpIChnc3RfeGltYWdlX3NyY19yZXR1cm5fYnVmKSk7Ci0gICAgaWYgKHhpbWFnZSA9PSBOVUxMKSB7Ci0gICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoeGltYWdlc3JjLCBSRVNPVVJDRSwgV1JJVEUsIChOVUxMKSwKLSAgICAgICAgICAoImNvdWxkIG5vdCBjcmVhdGUgYSAlZHglZCB4aW1hZ2UiLCB4aW1hZ2VzcmMtPndpZHRoLAotICAgICAgICAgICAgICB4aW1hZ2VzcmMtPmhlaWdodCkpOwotICAgICAgZ19tdXRleF91bmxvY2sgKCZ4aW1hZ2VzcmMtPnhfbG9jayk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBnX211dGV4X3VubG9jayAoJnhpbWFnZXNyYy0+eF9sb2NrKTsKLSAgfQotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHU1RfSVNfWElNQUdFX1NSQyAoeGltYWdlc3JjKSwgTlVMTCk7Ci0KLSAgbWV0YSA9IEdTVF9NRVRBX1hJTUFHRV9HRVQgKHhpbWFnZSk7Ci0KLSNpZmRlZiBIQVZFX1hEQU1BR0UKLSAgaWYgKHhpbWFnZXNyYy0+aGF2ZV94ZGFtYWdlICYmIHhpbWFnZXNyYy0+dXNlX2RhbWFnZSAmJgotICAgICAgeGltYWdlc3JjLT5sYXN0X3hpbWFnZSAhPSBOVUxMKSB7Ci0gICAgWEV2ZW50IGV2OwotICAgIGdib29sZWFuIGhhdmVfZGFtYWdlID0gRkFMU0U7Ci0KLSAgICAvKiBoYXZlX2ZyYW1lIGlzIFRSVUUgd2hlbiBlaXRoZXIgdGhlIGVudGlyZSBzY3JlZW4gaGFzIGJlZW4KLSAgICAgKiBncmFiYmVkIG9yIHdoZW4gdGhlIGxhc3QgaW1hZ2UgaGFzIGJlZW4gY29waWVkICovCi0gICAgZ2Jvb2xlYW4gaGF2ZV9mcmFtZSA9IEZBTFNFOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoeGltYWdlc3JjLCAiUmV0cmlldmluZyBzY3JlZW4gdXNpbmcgWERhbWFnZSIpOwotCi0gICAgZG8gewotICAgICAgWERhbWFnZU5vdGlmeUV2ZW50ICpkYW1hZ2VfZXYgPSAoWERhbWFnZU5vdGlmeUV2ZW50ICopICgmZXYpOwotCi0gICAgICBYTmV4dEV2ZW50ICh4aW1hZ2VzcmMtPnhjb250ZXh0LT5kaXNwLCAmZXYpOwotCi0gICAgICBpZiAoZXYudHlwZSA9PSB4aW1hZ2VzcmMtPmRhbWFnZV9ldmVudF9iYXNlICsgWERhbWFnZU5vdGlmeSAmJgotICAgICAgICAgIGRhbWFnZV9ldi0+bGV2ZWwgPT0gWERhbWFnZVJlcG9ydE5vbkVtcHR5KSB7Ci0KLSAgICAgICAgWERhbWFnZVN1YnRyYWN0ICh4aW1hZ2VzcmMtPnhjb250ZXh0LT5kaXNwLCB4aW1hZ2VzcmMtPmRhbWFnZSwgTm9uZSwKLSAgICAgICAgICAgIHhpbWFnZXNyYy0+ZGFtYWdlX3JlZ2lvbik7Ci0gICAgICAgIGhhdmVfZGFtYWdlID0gVFJVRTsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChYUGVuZGluZyAoeGltYWdlc3JjLT54Y29udGV4dC0+ZGlzcCkpOwotCi0gICAgaWYgKGhhdmVfZGFtYWdlKSB7Ci0gICAgICBYUmVjdGFuZ2xlICpyZWN0czsKLSAgICAgIGludCBucmVjdHM7Ci0KLSAgICAgIC8qIE5vdyBjb3B5IG91dCBhbGwgb2YgdGhlIGRhbWFnZWQgcmVjdGFuZ2xlcy4gKi8KLSAgICAgIHJlY3RzID0KLSAgICAgICAgICBYRml4ZXNGZXRjaFJlZ2lvbiAoeGltYWdlc3JjLT54Y29udGV4dC0+ZGlzcCwKLSAgICAgICAgICB4aW1hZ2VzcmMtPmRhbWFnZV9yZWdpb24sICZucmVjdHMpOwotICAgICAgaWYgKHJlY3RzICE9IE5VTEwpIHsKLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgaWYgKCFoYXZlX2ZyYW1lKSB7Ci0gICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHhpbWFnZXNyYywKLSAgICAgICAgICAgICAgIkNvcHlpbmcgZnJvbSBsYXN0IGZyYW1lIHhpbWFnZS0+c2l6ZTogJSIgR19HU0laRV9GT1JNQVQsCi0gICAgICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHhpbWFnZSkpOwotICAgICAgICAgIGNvcHlfYnVmZmVyICh4aW1hZ2UsIHhpbWFnZXNyYy0+bGFzdF94aW1hZ2UpOwotICAgICAgICAgIGhhdmVfZnJhbWUgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBucmVjdHM7IGkrKykgewotICAgICAgICAgIEdTVF9MT0dfT0JKRUNUICh4aW1hZ2VzcmMsCi0gICAgICAgICAgICAgICJEYW1hZ2VkIHN1Yi1yZWdpb24gQCAlZCwlZCBzaXplICVkeCVkIHJlcG9ydGVkIiwKLSAgICAgICAgICAgICAgcmVjdHNbaV0ueCwgcmVjdHNbaV0ueSwgcmVjdHNbaV0ud2lkdGgsIHJlY3RzW2ldLmhlaWdodCk7Ci0KLSAgICAgICAgICAvKiBpZiB3ZSBvbmx5IHdhbnQgYSBzbWFsbCBhcmVhLCBjbGlwIHRoaXMgZGFtYWdlIHJlZ2lvbiB0bwotICAgICAgICAgICAqIGFyZWEgd2Ugd2FudCAqLwotICAgICAgICAgIGlmICh4aW1hZ2VzcmMtPmVuZHggPiB4aW1hZ2VzcmMtPnN0YXJ0eCAmJgotICAgICAgICAgICAgICB4aW1hZ2VzcmMtPmVuZHkgPiB4aW1hZ2VzcmMtPnN0YXJ0eSkgewotICAgICAgICAgICAgLyogc2VlIGlmIGRhbWFnZSBhcmVhIGludGVyc2VjdHMgKi8KLSAgICAgICAgICAgIGlmIChyZWN0c1tpXS54ICsgcmVjdHNbaV0ud2lkdGggLSAxIDwgeGltYWdlc3JjLT5zdGFydHggfHwKLSAgICAgICAgICAgICAgICByZWN0c1tpXS54ID4geGltYWdlc3JjLT5lbmR4KSB7Ci0gICAgICAgICAgICAgIC8qIHRyaXZpYWwgcmVqZWN0ICovCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY3RzW2ldLnkgKyByZWN0c1tpXS5oZWlnaHQgLSAxIDwgeGltYWdlc3JjLT5zdGFydHkgfHwKLSAgICAgICAgICAgICAgICByZWN0c1tpXS55ID4geGltYWdlc3JjLT5lbmR5KSB7Ci0gICAgICAgICAgICAgIC8qIHRyaXZpYWwgcmVqZWN0ICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvKiBmaW5kIGludGVyc2VjdCByZWdpb24gKi8KLSAgICAgICAgICAgICAgaW50IHN0YXJ0eCwgc3RhcnR5LCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgICAgICAgICAgIHN0YXJ0eCA9IChyZWN0c1tpXS54IDwgeGltYWdlc3JjLT5zdGFydHgpID8geGltYWdlc3JjLT5zdGFydHggOgotICAgICAgICAgICAgICAgICAgcmVjdHNbaV0ueDsKLSAgICAgICAgICAgICAgc3RhcnR5ID0gKHJlY3RzW2ldLnkgPCB4aW1hZ2VzcmMtPnN0YXJ0eSkgPyB4aW1hZ2VzcmMtPnN0YXJ0eSA6Ci0gICAgICAgICAgICAgICAgICByZWN0c1tpXS55OwotICAgICAgICAgICAgICB3aWR0aCA9IChyZWN0c1tpXS54ICsgcmVjdHNbaV0ud2lkdGggLSAxIDwgeGltYWdlc3JjLT5lbmR4KSA/Ci0gICAgICAgICAgICAgICAgICByZWN0c1tpXS54ICsgcmVjdHNbaV0ud2lkdGggLSBzdGFydHggOgotICAgICAgICAgICAgICAgICAgeGltYWdlc3JjLT5lbmR4IC0gc3RhcnR4ICsgMTsKLSAgICAgICAgICAgICAgaGVpZ2h0ID0gKHJlY3RzW2ldLnkgKyByZWN0c1tpXS5oZWlnaHQgLSAxIDwgeGltYWdlc3JjLT5lbmR5KSA/Ci0gICAgICAgICAgICAgICAgICByZWN0c1tpXS55ICsgcmVjdHNbaV0uaGVpZ2h0IC0gc3RhcnR5IDogeGltYWdlc3JjLT5lbmR5IC0KLSAgICAgICAgICAgICAgICAgIHN0YXJ0eSArIDE7Ci0KLSAgICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHhpbWFnZXNyYywKLSAgICAgICAgICAgICAgICAgICJSZXRyaWV2aW5nIGRhbWFnZWQgc3ViLXJlZ2lvbiBAICVkLCVkIHNpemUgJWR4JWQgYXMgaW50ZXJzZWN0IHJlZ2lvbiIsCi0gICAgICAgICAgICAgICAgICBzdGFydHgsIHN0YXJ0eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgIFhHZXRTdWJJbWFnZSAoeGltYWdlc3JjLT54Y29udGV4dC0+ZGlzcCwgeGltYWdlc3JjLT54d2luZG93LAotICAgICAgICAgICAgICAgICAgc3RhcnR4LCBzdGFydHksIHdpZHRoLCBoZWlnaHQsIEFsbFBsYW5lcywgWlBpeG1hcCwKLSAgICAgICAgICAgICAgICAgIG1ldGEtPnhpbWFnZSwgc3RhcnR4IC0geGltYWdlc3JjLT5zdGFydHgsCi0gICAgICAgICAgICAgICAgICBzdGFydHkgLSB4aW1hZ2VzcmMtPnN0YXJ0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgR1NUX0xPR19PQkpFQ1QgKHhpbWFnZXNyYywKLSAgICAgICAgICAgICAgICAiUmV0cmlldmluZyBkYW1hZ2VkIHN1Yi1yZWdpb24gQCAlZCwlZCBzaXplICVkeCVkIiwKLSAgICAgICAgICAgICAgICByZWN0c1tpXS54LCByZWN0c1tpXS55LCByZWN0c1tpXS53aWR0aCwgcmVjdHNbaV0uaGVpZ2h0KTsKLQotICAgICAgICAgICAgWEdldFN1YkltYWdlICh4aW1hZ2VzcmMtPnhjb250ZXh0LT5kaXNwLCB4aW1hZ2VzcmMtPnh3aW5kb3csCi0gICAgICAgICAgICAgICAgcmVjdHNbaV0ueCwgcmVjdHNbaV0ueSwKLSAgICAgICAgICAgICAgICByZWN0c1tpXS53aWR0aCwgcmVjdHNbaV0uaGVpZ2h0LAotICAgICAgICAgICAgICAgIEFsbFBsYW5lcywgWlBpeG1hcCwgbWV0YS0+eGltYWdlLCByZWN0c1tpXS54LCByZWN0c1tpXS55KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgWEZyZWUgKHJlY3RzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFoYXZlX2ZyYW1lKSB7Ci0gICAgICBHU1RfTE9HX09CSkVDVCAoeGltYWdlc3JjLAotICAgICAgICAgICJDb3B5aW5nIGZyb20gbGFzdCBmcmFtZSB4aW1hZ2UtPnNpemU6ICUiIEdfR1NJWkVfRk9STUFULAotICAgICAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKHhpbWFnZSkpOwotICAgICAgY29weV9idWZmZXIgKHhpbWFnZSwgeGltYWdlc3JjLT5sYXN0X3hpbWFnZSk7Ci0gICAgfQotI2lmZGVmIEhBVkVfWEZJWEVTCi0gICAgLyogcmUtZ2V0IGFyZWEgd2hlcmUgbGFzdCBtb3VzZSBwb2ludGVyIHdhcyAgYnV0IG9ubHkgaWYgaW4gb3VyIGNsaXBwaW5nCi0gICAgICogYm91bmRzICovCi0gICAgaWYgKHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlKSB7Ci0gICAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0KLSAgICAgIHggPSB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+eCAtIHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT54aG90IC0KLSAgICAgICAgICB4aW1hZ2VzcmMtPng7Ci0gICAgICB5ID0geGltYWdlc3JjLT5jdXJzb3JfaW1hZ2UtPnkgLSB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+eWhvdCAtCi0gICAgICAgICAgeGltYWdlc3JjLT55OwotICAgICAgd2lkdGggPSB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+d2lkdGg7Ci0gICAgICBoZWlnaHQgPSB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+aGVpZ2h0OwotCi0gICAgICAvKiBib3VuZHMgY2hlY2tpbmcgKi8KLSAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgeCA9IDA7Ci0gICAgICBpZiAoeSA8IDApCi0gICAgICAgIHkgPSAwOwotICAgICAgaWYgKHggKyB3aWR0aCA+IHhpbWFnZXNyYy0+eGNvbnRleHQtPndpZHRoKQotICAgICAgICB3aWR0aCA9IHhpbWFnZXNyYy0+eGNvbnRleHQtPndpZHRoIC0geDsKLSAgICAgIGlmICh5ICsgaGVpZ2h0ID4geGltYWdlc3JjLT54Y29udGV4dC0+aGVpZ2h0KQotICAgICAgICBoZWlnaHQgPSB4aW1hZ2VzcmMtPnhjb250ZXh0LT5oZWlnaHQgLSB5OwotICAgICAgZ19hc3NlcnQgKHggPj0gMCk7Ci0gICAgICBnX2Fzc2VydCAoeSA+PSAwKTsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHhpbWFnZXNyYywKLSAgICAgICAgICAiQ3Vyc29yIHdhcyBhdCAoJWQsJWQpIHdpZHRoOiAlZCwgaGVpZ2h0OiAlZCBhbmQgb3VyIHJhbmdlIGlzOiAoJWQsJWQpIC0gKCVkLCVkKSIsCi0gICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgeGltYWdlc3JjLT5zdGFydHgsIHhpbWFnZXNyYy0+c3RhcnR5LAotICAgICAgICAgIHhpbWFnZXNyYy0+ZW5keCwgeGltYWdlc3JjLT5lbmR5KTsKLSAgICAgIC8qIG9ubHkgZ2V0IHdoZXJlIGN1cnNvciBsYXN0IHdhcywgaWYgaXQgaXMgaW4gb3VyIHJhbmdlICovCi0gICAgICBpZiAoeGltYWdlc3JjLT5lbmR4ID4geGltYWdlc3JjLT5zdGFydHggJiYKLSAgICAgICAgICB4aW1hZ2VzcmMtPmVuZHkgPiB4aW1hZ2VzcmMtPnN0YXJ0eSkgewotICAgICAgICAvKiBjaGVjayBib3VuZHMgKi8KLSAgICAgICAgaWYgKHggKyB3aWR0aCA8IHhpbWFnZXNyYy0+c3RhcnR4IHx8IHggPiB4aW1hZ2VzcmMtPmVuZHgpIHsKLSAgICAgICAgICAvKiB0cml2aWFsIHJlamVjdCAqLwotICAgICAgICB9IGVsc2UgaWYgKHkgKyBoZWlnaHQgPCB4aW1hZ2VzcmMtPnN0YXJ0eSB8fCB5ID4geGltYWdlc3JjLT5lbmR5KSB7Ci0gICAgICAgICAgLyogdHJpdmlhbCByZWplY3QgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBmaW5kIGludGVyc2VjdCByZWdpb24gKi8KLSAgICAgICAgICBpbnQgc3RhcnR4LCBzdGFydHksIGl3aWR0aCwgaWhlaWdodDsKLQotICAgICAgICAgIHN0YXJ0eCA9ICh4IDwgeGltYWdlc3JjLT5zdGFydHgpID8geGltYWdlc3JjLT5zdGFydHggOiB4OwotICAgICAgICAgIHN0YXJ0eSA9ICh5IDwgeGltYWdlc3JjLT5zdGFydHkpID8geGltYWdlc3JjLT5zdGFydHkgOiB5OwotICAgICAgICAgIGl3aWR0aCA9ICh4ICsgd2lkdGggPCB4aW1hZ2VzcmMtPmVuZHgpID8KLSAgICAgICAgICAgICAgeCArIHdpZHRoIC0gc3RhcnR4IDogeGltYWdlc3JjLT5lbmR4IC0gc3RhcnR4OwotICAgICAgICAgIGloZWlnaHQgPSAoeSArIGhlaWdodCA8IHhpbWFnZXNyYy0+ZW5keSkgPwotICAgICAgICAgICAgICB5ICsgaGVpZ2h0IC0gc3RhcnR5IDogeGltYWdlc3JjLT5lbmR5IC0gc3RhcnR5OwotICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHhpbWFnZXNyYywgIlJlbW92aW5nIGN1cnNvciBmcm9tICVkLCVkIiwgeCwgeSk7Ci0gICAgICAgICAgWEdldFN1YkltYWdlICh4aW1hZ2VzcmMtPnhjb250ZXh0LT5kaXNwLCB4aW1hZ2VzcmMtPnh3aW5kb3csCi0gICAgICAgICAgICAgIHN0YXJ0eCwgc3RhcnR5LCBpd2lkdGgsIGloZWlnaHQsIEFsbFBsYW5lcywgWlBpeG1hcCwKLSAgICAgICAgICAgICAgbWV0YS0+eGltYWdlLCBzdGFydHggLSB4aW1hZ2VzcmMtPnN0YXJ0eCwKLSAgICAgICAgICAgICAgc3RhcnR5IC0geGltYWdlc3JjLT5zdGFydHkpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHhpbWFnZXNyYywgIlJlbW92aW5nIGN1cnNvciBmcm9tICVkLCVkIiwgeCwgeSk7Ci0gICAgICAgIFhHZXRTdWJJbWFnZSAoeGltYWdlc3JjLT54Y29udGV4dC0+ZGlzcCwgeGltYWdlc3JjLT54d2luZG93LAotICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgQWxsUGxhbmVzLCBaUGl4bWFwLCBtZXRhLT54aW1hZ2UsIHgsIHkpOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0KLSAgfSBlbHNlIHsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9YU0hNCi0gICAgaWYgKHhpbWFnZXNyYy0+eGNvbnRleHQtPnVzZV94c2htKSB7Ci0gICAgICBHU1RfREVCVUdfT0JKRUNUICh4aW1hZ2VzcmMsICJSZXRyaWV2aW5nIHNjcmVlbiB1c2luZyBYU2htIik7Ci0gICAgICBYU2htR2V0SW1hZ2UgKHhpbWFnZXNyYy0+eGNvbnRleHQtPmRpc3AsIHhpbWFnZXNyYy0+eHdpbmRvdywKLSAgICAgICAgICBtZXRhLT54aW1hZ2UsIHhpbWFnZXNyYy0+c3RhcnR4LCB4aW1hZ2VzcmMtPnN0YXJ0eSwgQWxsUGxhbmVzKTsKLQotICAgIH0gZWxzZQotI2VuZGlmIC8qIEhBVkVfWFNITSAqLwotICAgIHsKLSAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHhpbWFnZXNyYywgIlJldHJpZXZpbmcgc2NyZWVuIHVzaW5nIFhHZXRJbWFnZSIpOwotICAgICAgaWYgKHhpbWFnZXNyYy0+cmVtb3RlKSB7Ci0gICAgICAgIFhHZXRTdWJJbWFnZSAoeGltYWdlc3JjLT54Y29udGV4dC0+ZGlzcCwgeGltYWdlc3JjLT54d2luZG93LAotICAgICAgICAgICAgeGltYWdlc3JjLT5zdGFydHgsIHhpbWFnZXNyYy0+c3RhcnR5LCB4aW1hZ2VzcmMtPndpZHRoLAotICAgICAgICAgICAgeGltYWdlc3JjLT5oZWlnaHQsIEFsbFBsYW5lcywgWlBpeG1hcCwgbWV0YS0+eGltYWdlLCAwLCAwKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1ldGEtPnhpbWFnZSA9Ci0gICAgICAgICAgICBYR2V0SW1hZ2UgKHhpbWFnZXNyYy0+eGNvbnRleHQtPmRpc3AsIHhpbWFnZXNyYy0+eHdpbmRvdywKLSAgICAgICAgICAgIHhpbWFnZXNyYy0+c3RhcnR4LCB4aW1hZ2VzcmMtPnN0YXJ0eSwgeGltYWdlc3JjLT53aWR0aCwKLSAgICAgICAgICAgIHhpbWFnZXNyYy0+aGVpZ2h0LCBBbGxQbGFuZXMsIFpQaXhtYXApOwotICAgICAgfQotICAgIH0KLSNpZmRlZiBIQVZFX1hEQU1BR0UKLSAgfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1hGSVhFUwotICBpZiAoeGltYWdlc3JjLT5zaG93X3BvaW50ZXIgJiYgeGltYWdlc3JjLT5oYXZlX3hmaXhlcwotICAgICAgJiYgZ3N0X3hpbWFnZV9pc19wb2ludGVyX2luX3JlZ2lvbiAoeGltYWdlc3JjKSkgewotCi0gICAgR1NUX0RFQlVHX09CSkVDVCAoeGltYWdlc3JjLCAiVXNpbmcgWEZpeGVzIHRvIGRyYXcgY3Vyc29yIik7Ci0gICAgLyogZ2V0IGN1cnNvciAqLwotICAgIGlmICh4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZSkKLSAgICAgIFhGcmVlICh4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZSk7Ci0gICAgeGltYWdlc3JjLT5jdXJzb3JfaW1hZ2UgPSBYRml4ZXNHZXRDdXJzb3JJbWFnZSAoeGltYWdlc3JjLT54Y29udGV4dC0+ZGlzcCk7Ci0gICAgaWYgKHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlICE9IE5VTEwpIHsKLSAgICAgIGludCBjeCwgY3ksIGksIGosIGNvdW50OwotICAgICAgaW50IHN0YXJ0eCwgc3RhcnR5LCBpd2lkdGgsIGloZWlnaHQ7Ci0gICAgICBnYm9vbGVhbiBjdXJzb3JfaW5faW1hZ2UgPSBUUlVFOwotCi0gICAgICBjeCA9IHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT54IC0geGltYWdlc3JjLT5jdXJzb3JfaW1hZ2UtPnhob3QgLQotICAgICAgICAgIHhpbWFnZXNyYy0+eDsKLSAgICAgIGN5ID0geGltYWdlc3JjLT5jdXJzb3JfaW1hZ2UtPnkgLSB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+eWhvdCAtCi0gICAgICAgICAgeGltYWdlc3JjLT55OwotICAgICAgY291bnQgPSB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+d2lkdGggKiB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+aGVpZ2h0OwotCi0gICAgICAvKiBvbmx5IGdldCB3aGVyZSBjdXJzb3IgbGFzdCB3YXMsIGlmIGl0IGlzIGluIG91ciByYW5nZSAqLwotICAgICAgaWYgKHhpbWFnZXNyYy0+ZW5keCA+IHhpbWFnZXNyYy0+c3RhcnR4ICYmCi0gICAgICAgICAgeGltYWdlc3JjLT5lbmR5ID4geGltYWdlc3JjLT5zdGFydHkpIHsKLSAgICAgICAgLyogY2hlY2sgYm91bmRzICovCi0gICAgICAgIGlmIChjeCArIHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT53aWR0aCA8IChpbnQpIHhpbWFnZXNyYy0+c3RhcnR4IHx8Ci0gICAgICAgICAgICBjeCA+IChpbnQpIHhpbWFnZXNyYy0+ZW5keCkgewotICAgICAgICAgIC8qIHRyaXZpYWwgcmVqZWN0ICovCi0gICAgICAgICAgY3Vyc29yX2luX2ltYWdlID0gRkFMU0U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3kgKyB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+aGVpZ2h0IDwKLSAgICAgICAgICAgIChpbnQpIHhpbWFnZXNyYy0+c3RhcnR5IHx8IGN5ID4gKGludCkgeGltYWdlc3JjLT5lbmR5KSB7Ci0gICAgICAgICAgLyogdHJpdmlhbCByZWplY3QgKi8KLSAgICAgICAgICBjdXJzb3JfaW5faW1hZ2UgPSBGQUxTRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBmaW5kIGludGVyc2VjdCByZWdpb24gKi8KLQotICAgICAgICAgIHN0YXJ0eCA9IChjeCA8IChpbnQpIHhpbWFnZXNyYy0+c3RhcnR4KSA/IHhpbWFnZXNyYy0+c3RhcnR4IDogY3g7Ci0gICAgICAgICAgc3RhcnR5ID0gKGN5IDwgKGludCkgeGltYWdlc3JjLT5zdGFydHkpID8geGltYWdlc3JjLT5zdGFydHkgOiBjeTsKLSAgICAgICAgICBpd2lkdGggPSAoY3ggKyB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+d2lkdGggPCB4aW1hZ2VzcmMtPmVuZHgpID8KLSAgICAgICAgICAgICAgY3ggKyB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+d2lkdGggLSBzdGFydHggOgotICAgICAgICAgICAgICB4aW1hZ2VzcmMtPmVuZHggLSBzdGFydHg7Ci0gICAgICAgICAgaWhlaWdodCA9Ci0gICAgICAgICAgICAgIChjeSArIHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT5oZWlnaHQgPAotICAgICAgICAgICAgICB4aW1hZ2VzcmMtPmVuZHkpID8gY3kgKyB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+aGVpZ2h0IC0KLSAgICAgICAgICAgICAgc3RhcnR5IDogeGltYWdlc3JjLT5lbmR5IC0gc3RhcnR5OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzdGFydHggPSBjeDsKLSAgICAgICAgc3RhcnR5ID0gY3k7Ci0gICAgICAgIGl3aWR0aCA9IHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT53aWR0aDsKLSAgICAgICAgaWhlaWdodCA9IHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT5oZWlnaHQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJzb3JfaW5faW1hZ2UpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoeGltYWdlc3JjLCAiQ3Vyc29yIGlzIGluIGltYWdlIHNvIHRyeWluZyB0byBkcmF3IGl0Iik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgIHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT5waXhlbHNbaV0gPQotICAgICAgICAgICAgICBHVUlOVF9UT19MRSAoeGltYWdlc3JjLT5jdXJzb3JfaW1hZ2UtPnBpeGVsc1tpXSk7Ci0gICAgICAgIC8qIGNvcHkgdGhvc2UgcGl4ZWxzIGFjcm9zcyAqLwotICAgICAgICBmb3IgKGogPSBzdGFydHk7Ci0gICAgICAgICAgICBqIDwgc3RhcnR5ICsgaWhlaWdodAotICAgICAgICAgICAgJiYgaiA8IHhpbWFnZXNyYy0+c3RhcnR5ICsgeGltYWdlc3JjLT5oZWlnaHQ7IGorKykgewotICAgICAgICAgIGZvciAoaSA9IHN0YXJ0eDsKLSAgICAgICAgICAgICAgaSA8IHN0YXJ0eCArIGl3aWR0aAotICAgICAgICAgICAgICAmJiBpIDwgeGltYWdlc3JjLT5zdGFydHggKyB4aW1hZ2VzcmMtPndpZHRoOyBpKyspIHsKLSAgICAgICAgICAgIGd1aW50OCAqc3JjLCAqZGVzdDsKLQotICAgICAgICAgICAgc3JjID0KLSAgICAgICAgICAgICAgICAoZ3VpbnQ4ICopICYgKHhpbWFnZXNyYy0+Y3Vyc29yX2ltYWdlLT5waXhlbHNbKChqIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeSkgKiB4aW1hZ2VzcmMtPmN1cnNvcl9pbWFnZS0+d2lkdGggKyAoaSAtIGN4KSldKTsKLSAgICAgICAgICAgIGRlc3QgPQotICAgICAgICAgICAgICAgIChndWludDggKikgJiAobWV0YS0+eGltYWdlLT5kYXRhWygoaiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGltYWdlc3JjLT5zdGFydHkpICogeGltYWdlc3JjLT53aWR0aCArIChpIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW1hZ2VzcmMtPnN0YXJ0eCkpICoKLSAgICAgICAgICAgICAgICAgICAgKHhpbWFnZXNyYy0+eGNvbnRleHQtPmJwcCAvIDgpXSk7Ci0KLSAgICAgICAgICAgIGNvbXBvc2l0ZV9waXhlbCAoeGltYWdlc3JjLT54Y29udGV4dCwgKGd1aW50OCAqKSBkZXN0LAotICAgICAgICAgICAgICAgIChndWludDggKikgc3JjKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSNlbmRpZgotI2lmZGVmIEhBVkVfWERBTUFHRQotICBpZiAoeGltYWdlc3JjLT5oYXZlX3hkYW1hZ2UgJiYgeGltYWdlc3JjLT51c2VfZGFtYWdlKSB7Ci0gICAgLyogbmVlZCB0byByZWYgeGltYWdlIHRvIHB1dCBpbiBsYXN0X3hpbWFnZSAqLwotICAgIGdzdF9idWZmZXJfcmVmICh4aW1hZ2UpOwotICAgIGlmICh4aW1hZ2VzcmMtPmxhc3RfeGltYWdlKSB7Ci0gICAgICBnc3RfYnVmZmVyX3VucmVmICh4aW1hZ2VzcmMtPmxhc3RfeGltYWdlKTsKLSAgICB9Ci0gICAgeGltYWdlc3JjLT5sYXN0X3hpbWFnZSA9IHhpbWFnZTsKLSAgICBHU1RfTE9HX09CSkVDVCAoeGltYWdlc3JjLCAicmVmZmluZyBjdXJyZW50IGJ1ZmZlciBmb3IgbGFzdF94aW1hZ2UiKTsKLSAgfQotI2VuZGlmCi0gIHJldHVybiB4aW1hZ2U7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1nc3RfeGltYWdlX3NyY19jcmVhdGUgKEdzdFB1c2hTcmMgKiBicywgR3N0QnVmZmVyICoqIGJ1ZikKLXsKLSAgR3N0WEltYWdlU3JjICpzID0gR1NUX1hJTUFHRV9TUkMgKGJzKTsKLSAgR3N0QnVmZmVyICppbWFnZTsKLSAgR3N0Q2xvY2tUaW1lIGJhc2VfdGltZTsKLSAgR3N0Q2xvY2tUaW1lIG5leHRfY2FwdHVyZV90czsKLSAgR3N0Q2xvY2tUaW1lIGR1cjsKLSAgZ2ludDY0IG5leHRfZnJhbWVfbm87Ci0KLSAgaWYgKCFnc3RfeGltYWdlX3NyY19yZWNhbGMgKHMpKSB7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IgKHMsIFJFU09VUkNFLCBGQUlMRUQsCi0gICAgICAgIChfKCJDaGFuZ2luZyByZXNvbHV0aW9uIGF0IHJ1bnRpbWUgaXMgbm90IHlldCBzdXBwb3J0ZWQuIikpLCAoTlVMTCkpOwotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLSAgfQotCi0gIGlmIChzLT5mcHNfbiA8PSAwIHx8IHMtPmZwc19kIDw9IDApCi0gICAgcmV0dXJuIEdTVF9GTE9XX05PVF9ORUdPVElBVEVEOyAgICAgLyogRlBTIG11c3QgYmUgPiAwICovCi0KLSAgLyogTm93LCB3ZSBtaWdodCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IG11bHRpcGxlIG9mIHRoZSBmcHMKLSAgICogYmVmb3JlIGNhcHR1cmluZyAqLwotCi0gIEdTVF9PQkpFQ1RfTE9DSyAocyk7Ci0gIGlmIChHU1RfRUxFTUVOVF9DTE9DSyAocykgPT0gTlVMTCkgewotICAgIEdTVF9PQkpFQ1RfVU5MT0NLIChzKTsKLSAgICBHU1RfRUxFTUVOVF9FUlJPUiAocywgUkVTT1VSQ0UsIEZBSUxFRCwKLSAgICAgICAgKF8oIkNhbm5vdCBvcGVyYXRlIHdpdGhvdXQgYSBjbG9jayIpKSwgKE5VTEwpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7Ci0gIH0KLQotICBiYXNlX3RpbWUgPSBHU1RfRUxFTUVOVF9DQVNUIChzKS0+YmFzZV90aW1lOwotICBuZXh0X2NhcHR1cmVfdHMgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9FTEVNRU5UX0NMT0NLIChzKSk7Ci0gIG5leHRfY2FwdHVyZV90cyAtPSBiYXNlX3RpbWU7Ci0KLSAgLyogRmlndXJlIG91dCB3aGljaCAnZnJhbWUgbnVtYmVyJyBwb3NpdGlvbiB3ZSdyZSBhdCwgYmFzZWQgb24gdGhlIGN1ciB0aW1lCi0gICAqIGFuZCBmcmFtZSByYXRlICovCi0gIG5leHRfZnJhbWVfbm8gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG5leHRfY2FwdHVyZV90cywKLSAgICAgIHMtPmZwc19uLCBHU1RfU0VDT05EICogcy0+ZnBzX2QpOwotICBpZiAobmV4dF9mcmFtZV9ubyA9PSBzLT5sYXN0X2ZyYW1lX25vKSB7Ci0gICAgR3N0Q2xvY2tJRCBpZDsKLSAgICBHc3RDbG9ja1JldHVybiByZXQ7Ci0KLSAgICAvKiBOZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyYW1lICovCi0gICAgbmV4dF9mcmFtZV9ubyArPSAxOwotCi0gICAgLyogRmlndXJlIG91dCB3aGF0IHRoZSBuZXh0IGZyYW1lIHRpbWUgaXMgKi8KLSAgICBuZXh0X2NhcHR1cmVfdHMgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKG5leHRfZnJhbWVfbm8sCi0gICAgICAgIHMtPmZwc19kICogR1NUX1NFQ09ORCwgcy0+ZnBzX24pOwotCi0gICAgaWQgPSBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChHU1RfRUxFTUVOVF9DTE9DSyAocyksCi0gICAgICAgIG5leHRfY2FwdHVyZV90cyArIGJhc2VfdGltZSk7Ci0gICAgcy0+Y2xvY2tfaWQgPSBpZDsKLQotICAgIC8qIHJlbGVhc2UgdGhlIG9iamVjdCBsb2NrIHdoaWxlIHdhaXRpbmcgKi8KLSAgICBHU1RfT0JKRUNUX1VOTE9DSyAocyk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUIChzLCAiV2FpdGluZyBmb3IgbmV4dCBmcmFtZSB0aW1lICUiIEdfR1VJTlQ2NF9GT1JNQVQsCi0gICAgICAgIG5leHRfY2FwdHVyZV90cyk7Ci0gICAgcmV0ID0gZ3N0X2Nsb2NrX2lkX3dhaXQgKGlkLCBOVUxMKTsKLSAgICBHU1RfT0JKRUNUX0xPQ0sgKHMpOwotCi0gICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0gICAgcy0+Y2xvY2tfaWQgPSBOVUxMOwotICAgIGlmIChyZXQgPT0gR1NUX0NMT0NLX1VOU0NIRURVTEVEKSB7Ci0gICAgICAvKiBHb3Qgd29rZW4gdXAgYnkgdGhlIHVubG9jayBmdW5jdGlvbiAqLwotICAgICAgR1NUX09CSkVDVF9VTkxPQ0sgKHMpOwotICAgICAgcmV0dXJuIEdTVF9GTE9XX0ZMVVNISU5HOwotICAgIH0KLSAgICAvKiBEdXJhdGlvbiBpcyBhIGNvbXBsZXRlIDEvZnBzIGZyYW1lIGR1cmF0aW9uICovCi0gICAgZHVyID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwgcy0+ZnBzX2QsIHMtPmZwc19uKTsKLSAgfSBlbHNlIHsKLSAgICBHc3RDbG9ja1RpbWUgbmV4dF9mcmFtZV90czsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QgKHMsICJObyBuZWVkIHRvIHdhaXQgZm9yIG5leHQgZnJhbWUgdGltZSAlIgotICAgICAgICBHX0dVSU5UNjRfRk9STUFUICIgbmV4dCBmcmFtZSA9ICUiIEdfR0lOVDY0X0ZPUk1BVCAiIHByZXYgPSAlIgotICAgICAgICBHX0dJTlQ2NF9GT1JNQVQsIG5leHRfY2FwdHVyZV90cywgbmV4dF9mcmFtZV9ubywgcy0+bGFzdF9mcmFtZV9ubyk7Ci0gICAgbmV4dF9mcmFtZV90cyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAobmV4dF9mcmFtZV9ubyArIDEsCi0gICAgICAgIHMtPmZwc19kICogR1NUX1NFQ09ORCwgcy0+ZnBzX24pOwotICAgIC8qIEZyYW1lIGR1cmF0aW9uIGlzIGZyb20gbm93IHVudGlsIHRoZSBuZXh0IGV4cGVjdGVkIGNhcHR1cmUgdGltZSAqLwotICAgIGR1ciA9IG5leHRfZnJhbWVfdHMgLSBuZXh0X2NhcHR1cmVfdHM7Ci0gIH0KLSAgcy0+bGFzdF9mcmFtZV9ubyA9IG5leHRfZnJhbWVfbm87Ci0gIEdTVF9PQkpFQ1RfVU5MT0NLIChzKTsKLQotICBpbWFnZSA9IGdzdF94aW1hZ2Vfc3JjX3hpbWFnZV9nZXQgKHMpOwotICBpZiAoIWltYWdlKQotICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKLQotICAqYnVmID0gaW1hZ2U7Ci0gIEdTVF9CVUZGRVJfRFRTICgqYnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfUFRTICgqYnVmKSA9IG5leHRfY2FwdHVyZV90czsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoKmJ1ZikgPSBkdXI7Ci0KLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3hpbWFnZV9zcmNfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFhJbWFnZVNyYyAqc3JjID0gR1NUX1hJTUFHRV9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RJU1BMQVlfTkFNRToKLQotICAgICAgZ19mcmVlIChzcmMtPmRpc3BsYXlfbmFtZSk7Ci0gICAgICBzcmMtPmRpc3BsYXlfbmFtZSA9IGdfc3RyZHVwIChnX3ZhbHVlX2dldF9zdHJpbmcgKHZhbHVlKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU0hPV19QT0lOVEVSOgotICAgICAgc3JjLT5zaG93X3BvaW50ZXIgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFX0RBTUFHRToKLSAgICAgIHNyYy0+dXNlX2RhbWFnZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4gKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVEFSVFg6Ci0gICAgICBzcmMtPnN0YXJ0eCA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9TVEFSVFk6Ci0gICAgICBzcmMtPnN0YXJ0eSA9IGdfdmFsdWVfZ2V0X3VpbnQgKHZhbHVlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkRYOgotICAgICAgc3JjLT5lbmR4ID0gZ192YWx1ZV9nZXRfdWludCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX0VORFk6Ci0gICAgICBzcmMtPmVuZHkgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfUkVNT1RFOgotICAgICAgc3JjLT5yZW1vdGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuICh2YWx1ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfWElEOgotICAgICAgaWYgKHNyYy0+eGNvbnRleHQgIT0gTlVMTCkgewotICAgICAgICBnX3dhcm5pbmcgKCJ4aW1hZ2VzcmMgd2luZG93IElEIG11c3QgYmUgc2V0IGJlZm9yZSBvcGVuaW5nIGRpc3BsYXkiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBzcmMtPnhpZCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1hOQU1FOgotICAgICAgaWYgKHNyYy0+eGNvbnRleHQgIT0gTlVMTCkgewotICAgICAgICBnX3dhcm5pbmcgKCJ4aW1hZ2VzcmMgd2luZG93IG5hbWUgbXVzdCBiZSBzZXQgYmVmb3JlIG9wZW5pbmcgZGlzcGxheSIpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGdfZnJlZSAoc3JjLT54bmFtZSk7Ci0gICAgICBzcmMtPnhuYW1lID0gZ19zdHJkdXAgKGdfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3hpbWFnZV9zcmNfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAotICAgIEdWYWx1ZSAqIHZhbHVlLCBHUGFyYW1TcGVjICogcHNwZWMpCi17Ci0gIEdzdFhJbWFnZVNyYyAqc3JjID0gR1NUX1hJTUFHRV9TUkMgKG9iamVjdCk7Ci0KLSAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX0RJU1BMQVlfTkFNRToKLSAgICAgIGlmIChzcmMtPnhjb250ZXh0KQotICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBEaXNwbGF5U3RyaW5nIChzcmMtPnhjb250ZXh0LT5kaXNwKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHNyYy0+ZGlzcGxheV9uYW1lKTsKLQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NIT1dfUE9JTlRFUjoKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnNob3dfcG9pbnRlcik7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfVVNFX0RBTUFHRToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnVzZV9kYW1hZ2UpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1NUQVJUWDoKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzcmMtPnN0YXJ0eCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfU1RBUlRZOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNyYy0+c3RhcnR5KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJPUF9FTkRYOgotICAgICAgZ192YWx1ZV9zZXRfdWludCAodmFsdWUsIHNyYy0+ZW5keCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfRU5EWToKLSAgICAgIGdfdmFsdWVfc2V0X3VpbnQgKHZhbHVlLCBzcmMtPmVuZHkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1JFTU9URToKLSAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4gKHZhbHVlLCBzcmMtPnJlbW90ZSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfWElEOgotICAgICAgZ192YWx1ZV9zZXRfdWludDY0ICh2YWx1ZSwgc3JjLT54aWQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQUk9QX1hOQU1FOgotICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nICh2YWx1ZSwgc3JjLT54bmFtZSk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfeGltYWdlX3NyY19jbGVhcl9idWZwb29sIChHc3RYSW1hZ2VTcmMgKiB4aW1hZ2VzcmMpCi17Ci0gIGdfbXV0ZXhfbG9jayAoJnhpbWFnZXNyYy0+cG9vbF9sb2NrKTsKLSAgd2hpbGUgKHhpbWFnZXNyYy0+YnVmZmVyX3Bvb2wgIT0gTlVMTCkgewotICAgIEdzdEJ1ZmZlciAqeGltYWdlID0geGltYWdlc3JjLT5idWZmZXJfcG9vbC0+ZGF0YTsKLQotICAgIGdzdF94aW1hZ2VfYnVmZmVyX2ZyZWUgKHhpbWFnZSk7Ci0KLSAgICB4aW1hZ2VzcmMtPmJ1ZmZlcl9wb29sID0gZ19zbGlzdF9kZWxldGVfbGluayAoeGltYWdlc3JjLT5idWZmZXJfcG9vbCwKLSAgICAgICAgeGltYWdlc3JjLT5idWZmZXJfcG9vbCk7Ci0gIH0KLSAgZ19tdXRleF91bmxvY2sgKCZ4aW1hZ2VzcmMtPnBvb2xfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfeGltYWdlX3NyY19kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KQotewotICAvKiBEcm9wIHJlZmVyZW5jZXMgaW4gdGhlIGJ1ZmZlcl9wb29sICovCi0gIGdzdF94aW1hZ2Vfc3JjX2NsZWFyX2J1ZnBvb2wgKEdTVF9YSU1BR0VfU1JDIChvYmplY3QpKTsKLQotICBHX09CSkVDVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+ZGlzcG9zZSAob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF94aW1hZ2Vfc3JjX2ZpbmFsaXplIChHT2JqZWN0ICogb2JqZWN0KQotewotICBHc3RYSW1hZ2VTcmMgKnNyYyA9IEdTVF9YSU1BR0VfU1JDIChvYmplY3QpOwotCi0gIGlmIChzcmMtPnhjb250ZXh0KQotICAgIHhpbWFnZXV0aWxfeGNvbnRleHRfY2xlYXIgKHNyYy0+eGNvbnRleHQpOwotCi0gIGdfZnJlZSAoc3JjLT54bmFtZSk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzcmMtPnBvb2xfbG9jayk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZzcmMtPnhfbG9jayk7Ci0KLSAgR19PQkpFQ1RfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwotfQotCi1zdGF0aWMgR3N0Q2FwcyAqCi1nc3RfeGltYWdlX3NyY19nZXRfY2FwcyAoR3N0QmFzZVNyYyAqIGJzLCBHc3RDYXBzICogZmlsdGVyKQotewotICBHc3RYSW1hZ2VTcmMgKnMgPSBHU1RfWElNQUdFX1NSQyAoYnMpOwotICBHc3RYQ29udGV4dCAqeGNvbnRleHQ7Ci0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICBndWludDMyIGFscGhhX21hc2s7Ci0KLSAgaWYgKCghcy0+eGNvbnRleHQpICYmICghZ3N0X3hpbWFnZV9zcmNfb3Blbl9kaXNwbGF5IChzLCBzLT5kaXNwbGF5X25hbWUpKSkKLSAgICByZXR1cm4gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKEdTVF9CQVNFX1NSQyAocyktPnNyY3BhZCk7Ci0KLSAgaWYgKCFnc3RfeGltYWdlX3NyY19yZWNhbGMgKHMpKQotICAgIHJldHVybiBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAoR1NUX0JBU0VfU1JDIChzKS0+c3JjcGFkKTsKLQotICB4Y29udGV4dCA9IHMtPnhjb250ZXh0OwotICB3aWR0aCA9IHMtPnhjb250ZXh0LT53aWR0aDsKLSAgaGVpZ2h0ID0gcy0+eGNvbnRleHQtPmhlaWdodDsKLSAgaWYgKHMtPnh3aW5kb3cgIT0gMCkgewotICAgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHJzOwotICAgIGludCBzdGF0dXMgPSBYR2V0V2luZG93QXR0cmlidXRlcyAocy0+eGNvbnRleHQtPmRpc3AsIHMtPnh3aW5kb3csICZhdHRycyk7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgd2lkdGggPSBhdHRycy53aWR0aDsKLSAgICAgIGhlaWdodCA9IGF0dHJzLmhlaWdodDsKLSAgICB9Ci0gIH0KLQotICAvKiBwcm9wZXJ0eSBjb21tZW50cyBzYXkgMCBtZWFucyByaWdodC9ib3R0b20sIG1lYW5zIHdlIGNhbid0IGNhcHR1cmUKLSAgICAgdGhlIHRvcCBsZWZ0IHBpeGVsIGFsb25lICovCi0gIGlmIChzLT5lbmR4ID09IDApCi0gICAgcy0+ZW5keCA9IHdpZHRoIC0gMTsKLSAgaWYgKHMtPmVuZHkgPT0gMCkKLSAgICBzLT5lbmR5ID0gaGVpZ2h0IC0gMTsKLQotICBpZiAocy0+ZW5keCA+PSBzLT5zdGFydHggJiYgcy0+ZW5keSA+PSBzLT5zdGFydHkpIHsKLSAgICAvKiB0aGlzIG1lYW5zIHVzZXIgaGFzIHB1dCBpbiB2YWx1ZXMgKi8KLSAgICBpZiAocy0+c3RhcnR4IDwgeGNvbnRleHQtPndpZHRoICYmIHMtPmVuZHggPCB4Y29udGV4dC0+d2lkdGggJiYKLSAgICAgICAgcy0+c3RhcnR5IDwgeGNvbnRleHQtPmhlaWdodCAmJiBzLT5lbmR5IDwgeGNvbnRleHQtPmhlaWdodCkgewotICAgICAgLyogdmFsdWVzIGFyZSBmaW5lICovCi0gICAgICBzLT53aWR0aCA9IHdpZHRoID0gcy0+ZW5keCAtIHMtPnN0YXJ0eCArIDE7Ci0gICAgICBzLT5oZWlnaHQgPSBoZWlnaHQgPSBzLT5lbmR5IC0gcy0+c3RhcnR5ICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgR1NUX1dBUk5JTkcKLSAgICAgICAgICAoIlVzZXIgcHV0IGluIGNvLW9yZGluYXRlcyBvdmVyc2hvb3RpbmcgdGhlIFggcmVzb2x1dGlvbiwgc2V0dGluZyB0byBmdWxsIHNjcmVlbiIpOwotICAgICAgcy0+c3RhcnR4ID0gMDsKLSAgICAgIHMtPnN0YXJ0eSA9IDA7Ci0gICAgICBzLT5lbmR4ID0gd2lkdGggLSAxOwotICAgICAgcy0+ZW5keSA9IGhlaWdodCAtIDE7Ci0gICAgfQotICB9IGVsc2UgewotICAgIEdTVF9XQVJOSU5HICgiVXNlciBwdXQgaW4gYm9ndXMgY28tb3JkaW5hdGVzLCBzZXR0aW5nIHRvIGZ1bGwgc2NyZWVuIik7Ci0gICAgcy0+c3RhcnR4ID0gMDsKLSAgICBzLT5zdGFydHkgPSAwOwotICAgIHMtPmVuZHggPSB3aWR0aCAtIDE7Ci0gICAgcy0+ZW5keSA9IGhlaWdodCAtIDE7Ci0gIH0KLSAgR1NUX0RFQlVHICgid2lkdGggPSAlZCwgaGVpZ2h0PSVkIiwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgLyogZXh0cmFwb2xhdGUgYWxwaGEgbWFzayAqLwotICBpZiAoeGNvbnRleHQtPmRlcHRoID09IDMyKSB7Ci0gICAgYWxwaGFfbWFzayA9IH4oeGNvbnRleHQtPnJfbWFza19vdXRwdXQKLSAgICAgICAgfCB4Y29udGV4dC0+Z19tYXNrX291dHB1dCB8IHhjb250ZXh0LT5iX21hc2tfb3V0cHV0KTsKLSAgfSBlbHNlIHsKLSAgICBhbHBoYV9tYXNrID0gMDsKLSAgfQotCi0gIGZvcm1hdCA9Ci0gICAgICBnc3RfdmlkZW9fZm9ybWF0X2Zyb21fbWFza3MgKHhjb250ZXh0LT5kZXB0aCwgeGNvbnRleHQtPmJwcCwKLSAgICAgIHhjb250ZXh0LT5lbmRpYW5uZXNzLCB4Y29udGV4dC0+cl9tYXNrX291dHB1dCwKLSAgICAgIHhjb250ZXh0LT5nX21hc2tfb3V0cHV0LCB4Y29udGV4dC0+Yl9tYXNrX291dHB1dCwgYWxwaGFfbWFzayk7Ci0KLSAgcmV0dXJuIGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgZ3N0X3ZpZGVvX2Zvcm1hdF90b19zdHJpbmcgKGZvcm1hdCksCi0gICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCB3aWR0aCwKLSAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBoZWlnaHQsCi0gICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT05fUkFOR0UsIDEsIEdfTUFYSU5ULCBHX01BWElOVCwgMSwKLSAgICAgICJwaXhlbC1hc3BlY3QtcmF0aW8iLCBHU1RfVFlQRV9GUkFDVElPTiwgeGNvbnRleHQtPnBhcl9uLAotICAgICAgeGNvbnRleHQtPnBhcl9kLCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfeGltYWdlX3NyY19zZXRfY2FwcyAoR3N0QmFzZVNyYyAqIGJzLCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0WEltYWdlU3JjICpzID0gR1NUX1hJTUFHRV9TUkMgKGJzKTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGNvbnN0IEdWYWx1ZSAqbmV3X2ZwczsKLQotICAvKiBJZiBub3QgeWV0IG9wZW5lZCwgZGlzYWxsb3cgc2V0Y2FwcyB1bnRpbCBsYXRlciAqLwotICBpZiAoIXMtPnhjb250ZXh0KQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBUaGUgb25seSB0aGluZyB0aGF0IGNhbiBjaGFuZ2UgaXMgdGhlIGZyYW1lcmF0ZSBkb3duc3RyZWFtIHdhbnRzICovCi0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICBuZXdfZnBzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgImZyYW1lcmF0ZSIpOwotICBpZiAoIW5ld19mcHMpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIFN0b3JlIHRoaXMgRlBTIGZvciB1c2Ugd2hlbiBnZW5lcmF0aW5nIGJ1ZmZlcnMgKi8KLSAgcy0+ZnBzX24gPSBnc3RfdmFsdWVfZ2V0X2ZyYWN0aW9uX251bWVyYXRvciAobmV3X2Zwcyk7Ci0gIHMtPmZwc19kID0gZ3N0X3ZhbHVlX2dldF9mcmFjdGlvbl9kZW5vbWluYXRvciAobmV3X2Zwcyk7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAocywgInBlZXIgd2FudHMgJWQvJWQgZnBzIiwgcy0+ZnBzX24sIHMtPmZwc19kKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdENhcHMgKgotZ3N0X3hpbWFnZV9zcmNfZml4YXRlIChHc3RCYXNlU3JjICogYnNyYywgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIGdpbnQgaTsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7ICsraSkgewotICAgIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIGkpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9maXhhdGVfZmllbGRfbmVhcmVzdF9mcmFjdGlvbiAoc3RydWN0dXJlLCAiZnJhbWVyYXRlIiwgMjUsIDEpOwotICB9Ci0gIGNhcHMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKHBhcmVudF9jbGFzcyktPmZpeGF0ZSAoYnNyYywgY2Fwcyk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nc3RfeGltYWdlX3NyY19jbGFzc19pbml0IChHc3RYSW1hZ2VTcmNDbGFzcyAqIGtsYXNzKQotewotICBHT2JqZWN0Q2xhc3MgKmdjID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0RWxlbWVudENsYXNzICplYyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIEdzdEJhc2VTcmNDbGFzcyAqYmMgPSBHU1RfQkFTRV9TUkNfQ0xBU1MgKGtsYXNzKTsKLSAgR3N0UHVzaFNyY0NsYXNzICpwdXNoX2NsYXNzID0gR1NUX1BVU0hfU1JDX0NMQVNTIChrbGFzcyk7Ci0KLSAgZ2MtPnNldF9wcm9wZXJ0eSA9IGdzdF94aW1hZ2Vfc3JjX3NldF9wcm9wZXJ0eTsKLSAgZ2MtPmdldF9wcm9wZXJ0eSA9IGdzdF94aW1hZ2Vfc3JjX2dldF9wcm9wZXJ0eTsKLSAgZ2MtPmRpc3Bvc2UgPSBnc3RfeGltYWdlX3NyY19kaXNwb3NlOwotICBnYy0+ZmluYWxpemUgPSBnc3RfeGltYWdlX3NyY19maW5hbGl6ZTsKLQotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnYywgUFJPUF9ESVNQTEFZX05BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgiZGlzcGxheS1uYW1lIiwgIkRpc3BsYXkiLCAiWCBEaXNwbGF5IE5hbWUiLAotICAgICAgICAgIE5VTEwsIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnYywgUFJPUF9TSE9XX1BPSU5URVIsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInNob3ctcG9pbnRlciIsICJTaG93IE1vdXNlIFBvaW50ZXIiLAotICAgICAgICAgICJTaG93IG1vdXNlIHBvaW50ZXIgKGlmIFhGaXhlcyBleHRlbnNpb24gZW5hYmxlZCkiLCBUUlVFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0WEltYWdlU3JjOnVzZS1kYW1hZ2U6Ci0gICAqCi0gICAqIFVzZSBYRGFtYWdlIChpZiB0aGUgWERhbWFnZSBleHRlbnNpb24gaXMgZW5hYmxlZCkKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdjLCBQUk9QX1VTRV9EQU1BR0UsCi0gICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbiAoInVzZS1kYW1hZ2UiLCAiVXNlIFhEYW1hZ2UiLAotICAgICAgICAgICJVc2UgWERhbWFnZSAoaWYgWERhbWFnZSBleHRlbnNpb24gZW5hYmxlZCkiLCBUUlVFLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotICAvKioKLSAgICogR3N0WEltYWdlU3JjOnN0YXJ0eDoKLSAgICoKLSAgICogWCBjb29yZGluYXRlIG9mIHRvcCBsZWZ0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkCi0gICAqICgwIGZvciB0b3AgbGVmdCBvZiBzY3JlZW4pCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnYywgUFJPUF9TVEFSVFgsCi0gICAgICBnX3BhcmFtX3NwZWNfdWludCAoInN0YXJ0eCIsICJTdGFydCBYIGNvLW9yZGluYXRlIiwKLSAgICAgICAgICAiWCBjb29yZGluYXRlIG9mIHRvcCBsZWZ0IGNvcm5lciBvZiBhcmVhIHRvIGJlIHJlY29yZGVkICgwIGZvciB0b3AgbGVmdCBvZiBzY3JlZW4pIiwKLSAgICAgICAgICAwLCBHX01BWElOVCwgMCwgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RYSW1hZ2VTcmM6c3RhcnR5OgotICAgKgotICAgKiBZIGNvb3JkaW5hdGUgb2YgdG9wIGxlZnQgY29ybmVyIG9mIGFyZWEgdG8gYmUgcmVjb3JkZWQKLSAgICogKDAgZm9yIHRvcCBsZWZ0IG9mIHNjcmVlbikKLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdjLCBQUk9QX1NUQVJUWSwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50ICgic3RhcnR5IiwgIlN0YXJ0IFkgY28tb3JkaW5hdGUiLAotICAgICAgICAgICJZIGNvb3JkaW5hdGUgb2YgdG9wIGxlZnQgY29ybmVyIG9mIGFyZWEgdG8gYmUgcmVjb3JkZWQgKDAgZm9yIHRvcCBsZWZ0IG9mIHNjcmVlbikiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSkpOwotICAvKioKLSAgICogR3N0WEltYWdlU3JjOmVuZHg6Ci0gICAqCi0gICAqIFggY29vcmRpbmF0ZSBvZiBib3R0b20gcmlnaHQgY29ybmVyIG9mIGFyZWEgdG8gYmUgcmVjb3JkZWQKLSAgICogKDAgZm9yIGJvdHRvbSByaWdodCBvZiBzY3JlZW4pCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnYywgUFJPUF9FTkRYLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJlbmR4IiwgIkVuZCBYIiwKLSAgICAgICAgICAiWCBjb29yZGluYXRlIG9mIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgYXJlYSB0byBiZSByZWNvcmRlZCAoMCBmb3IgYm90dG9tIHJpZ2h0IG9mIHNjcmVlbikiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSkpOwotICAvKioKLSAgICogR3N0WEltYWdlU3JjOmVuZHk6Ci0gICAqCi0gICAqIFkgY29vcmRpbmF0ZSBvZiBib3R0b20gcmlnaHQgY29ybmVyIG9mIGFyZWEgdG8gYmUgcmVjb3JkZWQKLSAgICogKDAgZm9yIGJvdHRvbSByaWdodCBvZiBzY3JlZW4pCi0gICAqLwotICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnYywgUFJPUF9FTkRZLAotICAgICAgZ19wYXJhbV9zcGVjX3VpbnQgKCJlbmR5IiwgIkVuZCBZIiwKLSAgICAgICAgICAiWSBjb29yZGluYXRlIG9mIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgYXJlYSB0byBiZSByZWNvcmRlZCAoMCBmb3IgYm90dG9tIHJpZ2h0IG9mIHNjcmVlbikiLAotICAgICAgICAgIDAsIEdfTUFYSU5ULCAwLCBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gIC8qKgotICAgKiBHc3RYSW1hZ2VTcmM6cmVtb3RlOgotICAgKgotICAgKiBXaGV0aGVyIHRoZSBYIGRpc3BsYXkgaXMgcmVtb3RlLiBUaGUgZWxlbWVudCB3aWxsIHRyeSB0byB1c2UgYWx0ZXJuYXRlIGNhbGxzCi0gICAqIGtub3duIHRvIHdvcmsgYmV0dGVyIHdpdGggcmVtb3RlIGRpc3BsYXlzLgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ2MsIFBST1BfUkVNT1RFLAotICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4gKCJyZW1vdGUiLCAiUmVtb3RlIGRpc3BheSIsCi0gICAgICAgICAgIldoZXRoZXIgdGhlIGRpc3BsYXkgaXMgcmVtb3RlIiwgRkFMU0UsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RYSW1hZ2VTcmM6eGlkOgotICAgKgotICAgKiBUaGUgWElEIG9mIHRoZSB3aW5kb3cgdG8gY2FwdHVyZS4gMCBmb3IgdGhlIHJvb3Qgd2luZG93IChkZWZhdWx0KS4KLSAgICovCi0gIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdjLCBQUk9QX1hJRCwKLSAgICAgIGdfcGFyYW1fc3BlY191aW50NjQgKCJ4aWQiLCAiV2luZG93IFhJRCIsCi0gICAgICAgICAgIldpbmRvdyBYSUQgdG8gY2FwdHVyZSBmcm9tIiwgMCwgR19NQVhVSU5UNjQsIDAsCi0gICAgICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSk7Ci0gIC8qKgotICAgKiBHc3RYSW1hZ2VTcmM6eG5hbWU6Ci0gICAqCi0gICAqIFRoZSBuYW1lIG9mIHRoZSB3aW5kb3cgdG8gY2FwdHVyZSwgaWYgYW55LgotICAgKi8KLSAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ2MsIFBST1BfWE5BTUUsCi0gICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nICgieG5hbWUiLCAiV2luZG93IG5hbWUiLAotICAgICAgICAgICJXaW5kb3cgbmFtZSB0byBjYXB0dXJlIGZyb20iLCBOVUxMLAotICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9TVEFUSUNfU1RSSU5HUykpOwotCi0gIGdzdF9lbGVtZW50X2NsYXNzX3NldF9zdGF0aWNfbWV0YWRhdGEgKGVjLCAiWGltYWdlIHZpZGVvIHNvdXJjZSIsCi0gICAgICAiU291cmNlL1ZpZGVvIiwKLSAgICAgICJDcmVhdGVzIGEgc2NyZWVuc2hvdCB2aWRlbyBzdHJlYW0iLAotICAgICAgIkx1dHogTXVlbGxlciA8bHV0ekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAiCi0gICAgICAiSmFuIFNjaG1pZHQgPHRoYXl0YW5AbWFkLnNjaWVudGlzdC5jb20+LCAiCi0gICAgICAiWmFoZWVyIE1lcmFsaSA8emFoZWVyYWJiYXMgYXQgbWVyYWxpIGRvdCBvcmc+Iik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChlYywgJnQpOwotCi0gIGJjLT5maXhhdGUgPSBnc3RfeGltYWdlX3NyY19maXhhdGU7Ci0gIGJjLT5nZXRfY2FwcyA9IGdzdF94aW1hZ2Vfc3JjX2dldF9jYXBzOwotICBiYy0+c2V0X2NhcHMgPSBnc3RfeGltYWdlX3NyY19zZXRfY2FwczsKLSAgYmMtPnN0YXJ0ID0gZ3N0X3hpbWFnZV9zcmNfc3RhcnQ7Ci0gIGJjLT5zdG9wID0gZ3N0X3hpbWFnZV9zcmNfc3RvcDsKLSAgYmMtPnVubG9jayA9IGdzdF94aW1hZ2Vfc3JjX3VubG9jazsKLSAgcHVzaF9jbGFzcy0+Y3JlYXRlID0gZ3N0X3hpbWFnZV9zcmNfY3JlYXRlOwotfQotCi1zdGF0aWMgdm9pZAotZ3N0X3hpbWFnZV9zcmNfaW5pdCAoR3N0WEltYWdlU3JjICogeGltYWdlc3JjKQotewotICBnc3RfYmFzZV9zcmNfc2V0X2Zvcm1hdCAoR1NUX0JBU0VfU1JDICh4aW1hZ2VzcmMpLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfYmFzZV9zcmNfc2V0X2xpdmUgKEdTVF9CQVNFX1NSQyAoeGltYWdlc3JjKSwgVFJVRSk7Ci0KLSAgZ19tdXRleF9pbml0ICgmeGltYWdlc3JjLT5wb29sX2xvY2spOwotICBnX211dGV4X2luaXQgKCZ4aW1hZ2VzcmMtPnhfbG9jayk7Ci0gIHhpbWFnZXNyYy0+c2hvd19wb2ludGVyID0gVFJVRTsKLSAgeGltYWdlc3JjLT51c2VfZGFtYWdlID0gVFJVRTsKLSAgeGltYWdlc3JjLT5zdGFydHggPSAwOwotICB4aW1hZ2VzcmMtPnN0YXJ0eSA9IDA7Ci0gIHhpbWFnZXNyYy0+ZW5keCA9IDA7Ci0gIHhpbWFnZXNyYy0+ZW5keSA9IDA7Ci0gIHhpbWFnZXNyYy0+cmVtb3RlID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgZ2Jvb2xlYW4gcmV0OwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUIChnc3RfZGVidWdfeGltYWdlX3NyYywgInhpbWFnZXNyYyIsIDAsCi0gICAgICAieGltYWdlc3JjIGVsZW1lbnQgZGVidWciKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAieGltYWdlc3JjIiwgR1NUX1JBTktfTk9ORSwKLSAgICAgIEdTVF9UWVBFX1hJTUFHRV9TUkMpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdTVF9QTFVHSU5fREVGSU5FIChHU1RfVkVSU0lPTl9NQUpPUiwKLSAgICBHU1RfVkVSU0lPTl9NSU5PUiwKLSAgICB4aW1hZ2VzcmMsCi0gICAgIlgxMSB2aWRlbyBpbnB1dCBwbHVnaW4gdXNpbmcgc3RhbmRhcmQgWGxpYiBjYWxscyIsCi0gICAgcGx1Z2luX2luaXQsIFZFUlNJT04sIEdTVF9MSUNFTlNFLCBHU1RfUEFDS0FHRV9OQU1FLCBHU1RfUEFDS0FHRV9PUklHSU4pOwpkaWZmIC0tZ2l0IGEvc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaCBiL3N5cy94aW1hZ2UvZ3N0eGltYWdlc3JjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MzQ0N2EuLjAwMDAwMDAKLS0tIGEvc3lzL3hpbWFnZS9nc3R4aW1hZ2VzcmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKiBzY3JlZW5zaG90c3JjOiBTY3JlZW5zaG90IHBsdWdpbiBmb3IgR1N0cmVhbWVyCi0gKiAKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19HU1RfWElNQUdFX1NSQ19IX18KLSNkZWZpbmUgX19HU1RfWElNQUdFX1NSQ19IX18KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RwdXNoc3JjLmg+Ci0jaW5jbHVkZSAieGltYWdldXRpbC5oIgotCi0jaWZkZWYgSEFWRV9YRklYRVMKLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy9YZml4ZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfWERBTUFHRQotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hkYW1hZ2UuaD4KLSNlbmRpZgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgR1NUX1RZUEVfWElNQUdFX1NSQyAoZ3N0X3hpbWFnZV9zcmNfZ2V0X3R5cGUoKSkKLSNkZWZpbmUgR1NUX1hJTUFHRV9TUkMob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksR1NUX1RZUEVfWElNQUdFX1NSQyxHc3RYSW1hZ2VTcmMpKQotI2RlZmluZSBHU1RfWElNQUdFX1NSQ19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksR1NUX1RZUEVfWElNQUdFX1NSQyxHc3RYSW1hZ2VTcmMpKQotI2RlZmluZSBHU1RfSVNfWElNQUdFX1NSQyhvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSxHU1RfVFlQRV9YSU1BR0VfU1JDKSkKLSNkZWZpbmUgR1NUX0lTX1hJTUFHRV9TUkNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLEdTVF9UWVBFX1hJTUFHRV9TUkMpKQotCi10eXBlZGVmIHN0cnVjdCBfR3N0WEltYWdlU3JjIEdzdFhJbWFnZVNyYzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RYSW1hZ2VTcmNDbGFzcyBHc3RYSW1hZ2VTcmNDbGFzczsKLQotR1R5cGUgZ3N0X3hpbWFnZV9zcmNfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKLQotc3RydWN0IF9Hc3RYSW1hZ2VTcmMKLXsKLSAgR3N0UHVzaFNyYyBwYXJlbnQ7Ci0KLSAgLyogSW5mb3JtYXRpb24gb24gZGlzcGxheSAqLwotICBHc3RYQ29udGV4dCAqeGNvbnRleHQ7Ci0gIGdpbnQgeDsKLSAgZ2ludCB5OwotICBnaW50IHdpZHRoOwotICBnaW50IGhlaWdodDsKLQotICBXaW5kb3cgeHdpbmRvdzsKLSAgZ2NoYXIgKmRpc3BsYXlfbmFtZTsKLQotICAvKiBXaW5kb3cgc2VsZWN0aW9uICovCi0gIGd1aW50NjQgeGlkOwotICBnY2hhciAqeG5hbWU7Ci0KLSAgLyogRGVzaXJlZCBvdXRwdXQgZnJhbWVyYXRlICovCi0gIGdpbnQgZnBzX247Ci0gIGdpbnQgZnBzX2Q7Ci0KLSAgLyogZm9yIGZyYW1lcmF0ZSBzeW5jICovCi0gIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gIGdpbnQ2NCBsYXN0X2ZyYW1lX25vOwotCi0gIC8qIFByb3RlY3QgWCBXaW5kb3dzIGNhbGxzICovCi0gIEdNdXRleCAgeF9sb2NrOwotCi0gIC8qIEdhdGhlcmVkIHBvb2wgb2YgZW1pdHRlZCBidWZmZXJzICovCi0gIEdNdXRleCAgcG9vbF9sb2NrOwotICBHU0xpc3QgKmJ1ZmZlcl9wb29sOwotCi0gIC8qIFhGaXhlcyBhbmQgWERhbWFnZSBzdXBwb3J0ICovCi0gIGdib29sZWFuIGhhdmVfeGZpeGVzOwotICBnYm9vbGVhbiBoYXZlX3hkYW1hZ2U7Ci0gIGdib29sZWFuIHNob3dfcG9pbnRlcjsKLSAgZ2Jvb2xlYW4gdXNlX2RhbWFnZTsKLQotICAvKiBjby1vcmRpbmF0ZXMgZm9yIHN0YXJ0IGFuZCBlbmQgKi8KLSAgZ3VpbnQgc3RhcnR4OwotICBndWludCBzdGFydHk7Ci0gIGd1aW50IGVuZHg7Ci0gIGd1aW50IGVuZHk7Ci0KLSAgLyogd2hldGhlciB0byB1c2UgcmVtb3RlIGZyaWVuZGx5IGNhbGxzICovCi0gIGdib29sZWFuIHJlbW90ZTsKLQotI2lmZGVmIEhBVkVfWEZJWEVTCi0gIGludCBmaXhlc19ldmVudF9iYXNlOwotICBYRml4ZXNDdXJzb3JJbWFnZSAqY3Vyc29yX2ltYWdlOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9YREFNQUdFCi0gIERhbWFnZSBkYW1hZ2U7Ci0gIGludCBkYW1hZ2VfZXZlbnRfYmFzZTsKLSAgWHNlcnZlclJlZ2lvbiBkYW1hZ2VfcmVnaW9uOwotICBHQyBkYW1hZ2VfY29weV9nYzsKLSAgR3N0QnVmZmVyICpsYXN0X3hpbWFnZTsKLSNlbmRpZgotfTsKLQotc3RydWN0IF9Hc3RYSW1hZ2VTcmNDbGFzcwotewotICBHc3RQdXNoU3JjQ2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9fR1NUX1hJTUFHRV9TUkNfSF9fICovCmRpZmYgLS1naXQgYS9zeXMveGltYWdlL3hpbWFnZXV0aWwuYyBiL3N5cy94aW1hZ2UveGltYWdldXRpbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2M5MzkyLi4wMDAwMDAwCi0tLSBhL3N5cy94aW1hZ2UveGltYWdldXRpbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gTHVjYSBPZ25pYmVuZSA8bHVvZ25pQHRpbi5pdD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJ4aW1hZ2V1dGlsLmgiCi0KLUdUeXBlCi1nc3RfbWV0YV94aW1hZ2VfYXBpX2dldF90eXBlICh2b2lkKQotewotICBzdGF0aWMgdm9sYXRpbGUgR1R5cGUgdHlwZTsKLSAgc3RhdGljIGNvbnN0IGdjaGFyICp0YWdzW10gPSB7ICJtZW1vcnkiLCBOVUxMIH07Ci0KLSAgaWYgKGdfb25jZV9pbml0X2VudGVyICgmdHlwZSkpIHsKLSAgICBHVHlwZSBfdHlwZSA9IGdzdF9tZXRhX2FwaV90eXBlX3JlZ2lzdGVyICgiR3N0TWV0YVhJbWFnZVNyY0FQSSIsIHRhZ3MpOwotICAgIGdfb25jZV9pbml0X2xlYXZlICgmdHlwZSwgX3R5cGUpOwotICB9Ci0gIHJldHVybiB0eXBlOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWdzdF9tZXRhX3hpbWFnZV9pbml0IChHc3RNZXRhICogbWV0YSwgZ3BvaW50ZXIgcGFyYW1zLCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIEdzdE1ldGFYSW1hZ2UgKmVtZXRhID0gKEdzdE1ldGFYSW1hZ2UgKikgbWV0YTsKLQotICBlbWV0YS0+cGFyZW50ID0gTlVMTDsKLSAgZW1ldGEtPnhpbWFnZSA9IE5VTEw7Ci0jaWZkZWYgSEFWRV9YU0hNCi0gIGVtZXRhLT5TSE1JbmZvLnNobWFkZHIgPSAoKHZvaWQgKikgLTEpOwotICBlbWV0YS0+U0hNSW5mby5zaG1pZCA9IC0xOwotICBlbWV0YS0+U0hNSW5mby5yZWFkT25seSA9IFRSVUU7Ci0jZW5kaWYKLSAgZW1ldGEtPndpZHRoID0gZW1ldGEtPmhlaWdodCA9IGVtZXRhLT5zaXplID0gMDsKLSAgZW1ldGEtPnJldHVybl9mdW5jID0gTlVMTDsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotY29uc3QgR3N0TWV0YUluZm8gKgotZ3N0X21ldGFfeGltYWdlX2dldF9pbmZvICh2b2lkKQotewotICBzdGF0aWMgY29uc3QgR3N0TWV0YUluZm8gKm1ldGFfeGltYWdlX2luZm8gPSBOVUxMOwotCi0gIGlmIChnX29uY2VfaW5pdF9lbnRlciAoJm1ldGFfeGltYWdlX2luZm8pKSB7Ci0gICAgY29uc3QgR3N0TWV0YUluZm8gKm1ldGEgPQotICAgICAgICBnc3RfbWV0YV9yZWdpc3RlciAoZ3N0X21ldGFfeGltYWdlX2FwaV9nZXRfdHlwZSAoKSwgIkdzdE1ldGFYSW1hZ2VTcmMiLAotICAgICAgICBzaXplb2YgKEdzdE1ldGFYSW1hZ2UpLCAoR3N0TWV0YUluaXRGdW5jdGlvbikgZ3N0X21ldGFfeGltYWdlX2luaXQsCi0gICAgICAgIChHc3RNZXRhRnJlZUZ1bmN0aW9uKSBOVUxMLCAoR3N0TWV0YVRyYW5zZm9ybUZ1bmN0aW9uKSBOVUxMKTsKLSAgICBnX29uY2VfaW5pdF9sZWF2ZSAoJm1ldGFfeGltYWdlX2luZm8sIG1ldGEpOwotICB9Ci0gIHJldHVybiBtZXRhX3hpbWFnZV9pbmZvOwotfQotCi0jaWZkZWYgSEFWRV9YU0hNCi1zdGF0aWMgZ2Jvb2xlYW4gZXJyb3JfY2F1Z2h0ID0gRkFMU0U7Ci0KLXN0YXRpYyBpbnQKLXhpbWFnZXV0aWxfaGFuZGxlX3hlcnJvciAoRGlzcGxheSAqIGRpc3BsYXksIFhFcnJvckV2ZW50ICogeGV2ZW50KQotewotICBjaGFyIGVycm9yX21zZ1sxMDI0XTsKLQotICBYR2V0RXJyb3JUZXh0IChkaXNwbGF5LCB4ZXZlbnQtPmVycm9yX2NvZGUsIGVycm9yX21zZywgMTAyNCk7Ci0gIEdTVF9ERUJVRyAoInhpbWFnZXV0aWwgZmFpbGVkIHRvIHVzZSBYU2htIGNhbGxzLiBlcnJvcjogJXMiLCBlcnJvcl9tc2cpOwotICBlcnJvcl9jYXVnaHQgPSBUUlVFOwotICByZXR1cm4gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhhdCBpdCBpcyBhY3R1YWxseSByZWFsbHkgcG9zc2libGUgdG8gY3JlYXRlIGFuIGltYWdlCi0gICB1c2luZyBYU2htICovCi1nYm9vbGVhbgoteGltYWdldXRpbF9jaGVja194c2htX2NhbGxzIChHc3RYQ29udGV4dCAqIHhjb250ZXh0KQotewotICBYSW1hZ2UgKnhpbWFnZTsKLSAgWFNobVNlZ21lbnRJbmZvIFNITUluZm87Ci0gIHNpemVfdCBzaXplOwotICBpbnQgKCpoYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKLSAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Ci0gIGdib29sZWFuIGRpZF9hdHRhY2ggPSBGQUxTRTsKLQotICBnX3JldHVybl92YWxfaWZfZmFpbCAoeGNvbnRleHQgIT0gTlVMTCwgRkFMU0UpOwotCi0gIC8qIFN5bmMgdG8gZW5zdXJlIGFueSBvbGRlciBlcnJvcnMgYXJlIGFscmVhZHkgcHJvY2Vzc2VkICovCi0gIFhTeW5jICh4Y29udGV4dC0+ZGlzcCwgRkFMU0UpOwotCi0gIC8qIFNldCBkZWZhdWx0cyBzbyB3ZSBkb24ndCBmcmVlIHRoZXNlIGxhdGVyIHVubmVjZXNzYXJpbHkgKi8KLSAgU0hNSW5mby5zaG1hZGRyID0gKCh2b2lkICopIC0xKTsKLSAgU0hNSW5mby5zaG1pZCA9IC0xOwotCi0gIC8qIFNldHRpbmcgYW4gZXJyb3IgaGFuZGxlciB0byBjYXRjaCBmYWlsdXJlICovCi0gIGVycm9yX2NhdWdodCA9IEZBTFNFOwotICBoYW5kbGVyID0gWFNldEVycm9ySGFuZGxlciAoeGltYWdldXRpbF9oYW5kbGVfeGVycm9yKTsKLQotICAvKiBUcnlpbmcgdG8gY3JlYXRlIGEgMXgxIHhpbWFnZSAqLwotICBHU1RfREVCVUcgKCJYU2htQ3JlYXRlSW1hZ2Ugb2YgMXgxIik7Ci0KLSAgeGltYWdlID0gWFNobUNyZWF0ZUltYWdlICh4Y29udGV4dC0+ZGlzcCwgeGNvbnRleHQtPnZpc3VhbCwKLSAgICAgIHhjb250ZXh0LT5kZXB0aCwgWlBpeG1hcCwgTlVMTCwgJlNITUluZm8sIDEsIDEpOwotCi0gIC8qIE1pZ2h0IGNhdXNlIGFuIGVycm9yLCBzeW5jIHRvIGVuc3VyZSBpdCBpcyBub3RpY2VkICovCi0gIFhTeW5jICh4Y29udGV4dC0+ZGlzcCwgRkFMU0UpOwotICBpZiAoIXhpbWFnZSB8fCBlcnJvcl9jYXVnaHQpIHsKLSAgICBHU1RfV0FSTklORyAoImNvdWxkIG5vdCBYU2htQ3JlYXRlSW1hZ2UgYSAxeDEgaW1hZ2UiKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0gIHNpemUgPSB4aW1hZ2UtPmhlaWdodCAqIHhpbWFnZS0+Ynl0ZXNfcGVyX2xpbmU7Ci0KLSAgU0hNSW5mby5zaG1pZCA9IHNobWdldCAoSVBDX1BSSVZBVEUsIHNpemUsIElQQ19DUkVBVCB8IDA3NzcpOwotICBpZiAoU0hNSW5mby5zaG1pZCA9PSAtMSkgewotICAgIEdTVF9XQVJOSU5HICgiY291bGQgbm90IGdldCBzaGFyZWQgbWVtb3J5IG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgICBzaXplKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgU0hNSW5mby5zaG1hZGRyID0gc2htYXQgKFNITUluZm8uc2htaWQsIDAsIDApOwotICBpZiAoU0hNSW5mby5zaG1hZGRyID09ICgodm9pZCAqKSAtMSkpIHsKLSAgICBHU1RfV0FSTklORyAoIkZhaWxlZCB0byBzaG1hdDogJXMiLCBnX3N0cmVycm9yIChlcnJubykpOwotICAgIGdvdG8gYmVhY2g7Ci0gIH0KLQotICAvKiBEZWxldGUgdGhlIFNITSBzZWdtZW50LiBJdCB3aWxsIGFjdHVhbGx5IGdvIGF3YXkgYXV0b21hdGljYWxseQotICAgKiB3aGVuIHdlIGRldGFjaCBub3cgKi8KLSAgc2htY3RsIChTSE1JbmZvLnNobWlkLCBJUENfUk1JRCwgMCk7Ci0KLSAgeGltYWdlLT5kYXRhID0gU0hNSW5mby5zaG1hZGRyOwotICBTSE1JbmZvLnJlYWRPbmx5ID0gRkFMU0U7Ci0KLSAgaWYgKFhTaG1BdHRhY2ggKHhjb250ZXh0LT5kaXNwLCAmU0hNSW5mbykgPT0gMCkgewotICAgIEdTVF9XQVJOSU5HICgiRmFpbGVkIHRvIFhTaG1BdHRhY2giKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgLyogU3luYyB0byBlbnN1cmUgd2Ugc2VlIGFueSBlcnJvcnMgd2UgY2F1c2VkICovCi0gIFhTeW5jICh4Y29udGV4dC0+ZGlzcCwgRkFMU0UpOwotCi0gIGlmICghZXJyb3JfY2F1Z2h0KSB7Ci0gICAgZGlkX2F0dGFjaCA9IFRSVUU7Ci0gICAgLyogc3RvcmUgd2hldGhlciB3ZSBzdWNjZWVkZWQgaW4gcmVzdWx0ICovCi0gICAgcmVzdWx0ID0gVFJVRTsKLSAgfQotYmVhY2g6Ci0gIC8qIFN5bmMgdG8gZW5zdXJlIHdlIHN3YWxsb3cgYW55IGVycm9ycyB3ZSBjYXVzZWQgYW5kIHJlc2V0IGVycm9yX2NhdWdodCAqLwotICBYU3luYyAoeGNvbnRleHQtPmRpc3AsIEZBTFNFKTsKLSAgZXJyb3JfY2F1Z2h0ID0gRkFMU0U7Ci0gIFhTZXRFcnJvckhhbmRsZXIgKGhhbmRsZXIpOwotCi0gIGlmIChkaWRfYXR0YWNoKSB7Ci0gICAgWFNobURldGFjaCAoeGNvbnRleHQtPmRpc3AsICZTSE1JbmZvKTsKLSAgICBYU3luYyAoeGNvbnRleHQtPmRpc3AsIEZBTFNFKTsKLSAgfQotICBpZiAoU0hNSW5mby5zaG1hZGRyICE9ICgodm9pZCAqKSAtMSkpCi0gICAgc2htZHQgKFNITUluZm8uc2htYWRkcik7Ci0gIGlmICh4aW1hZ2UpCi0gICAgWERlc3Ryb3lJbWFnZSAoeGltYWdlKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAvKiBIQVZFX1hTSE0gKi8KLQotLyogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBYIERpc3BsYXkgYW5kIGdsb2JhbCBpbmZvIGFib3V0IGl0LiBFdmVyeXRoaW5nIGlzCi0gICBzdG9yZWQgaW4gb3VyIG9iamVjdCBhbmQgd2lsbCBiZSBjbGVhbmVkIHdoZW4gdGhlIG9iamVjdCBpcyBkaXNwb3NlZC4gTm90ZQotICAgaGVyZSB0aGF0IGNhcHMgZm9yIHN1cHBvcnRlZCBmb3JtYXQgYXJlIGdlbmVyYXRlZCB3aXRob3V0IGFueSB3aW5kb3cgb3IKLSAgIGltYWdlIGNyZWF0aW9uICovCi1Hc3RYQ29udGV4dCAqCi14aW1hZ2V1dGlsX3hjb250ZXh0X2dldCAoR3N0RWxlbWVudCAqIHBhcmVudCwgY29uc3QgZ2NoYXIgKiBkaXNwbGF5X25hbWUpCi17Ci0gIEdzdFhDb250ZXh0ICp4Y29udGV4dCA9IE5VTEw7Ci0gIFhQaXhtYXBGb3JtYXRWYWx1ZXMgKnB4X2Zvcm1hdHMgPSBOVUxMOwotICBnaW50IG5iX2Zvcm1hdHMgPSAwLCBpOwotCi0gIHhjb250ZXh0ID0gZ19uZXcwIChHc3RYQ29udGV4dCwgMSk7Ci0KLSAgeGNvbnRleHQtPmRpc3AgPSBYT3BlbkRpc3BsYXkgKGRpc3BsYXlfbmFtZSk7Ci0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcmVudCwgIm9wZW5lZCBkaXNwbGF5ICVwIiwgeGNvbnRleHQtPmRpc3ApOwotICBpZiAoIXhjb250ZXh0LT5kaXNwKSB7Ci0gICAgZ19mcmVlICh4Y29udGV4dCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgeGNvbnRleHQtPnNjcmVlbiA9IERlZmF1bHRTY3JlZW5PZkRpc3BsYXkgKHhjb250ZXh0LT5kaXNwKTsKLSAgeGNvbnRleHQtPnZpc3VhbCA9IERlZmF1bHRWaXN1YWxPZlNjcmVlbiAoeGNvbnRleHQtPnNjcmVlbik7Ci0gIHhjb250ZXh0LT5yb290ID0gUm9vdFdpbmRvd09mU2NyZWVuICh4Y29udGV4dC0+c2NyZWVuKTsKLSAgeGNvbnRleHQtPndoaXRlID0gV2hpdGVQaXhlbE9mU2NyZWVuICh4Y29udGV4dC0+c2NyZWVuKTsKLSAgeGNvbnRleHQtPmJsYWNrID0gQmxhY2tQaXhlbE9mU2NyZWVuICh4Y29udGV4dC0+c2NyZWVuKTsKLSAgeGNvbnRleHQtPmRlcHRoID0gRGVmYXVsdERlcHRoT2ZTY3JlZW4gKHhjb250ZXh0LT5zY3JlZW4pOwotCi0gIHhjb250ZXh0LT53aWR0aCA9IFdpZHRoT2ZTY3JlZW4gKHhjb250ZXh0LT5zY3JlZW4pOwotICB4Y29udGV4dC0+aGVpZ2h0ID0gSGVpZ2h0T2ZTY3JlZW4gKHhjb250ZXh0LT5zY3JlZW4pOwotCi0gIHhjb250ZXh0LT53aWR0aG1tID0gV2lkdGhNTU9mU2NyZWVuICh4Y29udGV4dC0+c2NyZWVuKTsKLSAgeGNvbnRleHQtPmhlaWdodG1tID0gSGVpZ2h0TU1PZlNjcmVlbiAoeGNvbnRleHQtPnNjcmVlbik7Ci0KLSAgeGNvbnRleHQtPmNhcHMgPSBOVUxMOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKHBhcmVudCwgIlggcmVwb3J0cyAlZHglZCBwaXhlbHMgYW5kICVkIG1tIHggJWQgbW0iLAotICAgICAgeGNvbnRleHQtPndpZHRoLCB4Y29udGV4dC0+aGVpZ2h0LCB4Y29udGV4dC0+d2lkdGhtbSwgeGNvbnRleHQtPmhlaWdodG1tKTsKLSAgeGltYWdldXRpbF9jYWxjdWxhdGVfcGl4ZWxfYXNwZWN0X3JhdGlvICh4Y29udGV4dCk7Ci0KLSAgLyogV2UgZ2V0IHN1cHBvcnRlZCBwaXhtYXAgZm9ybWF0cyBhdCBzdXBwb3J0ZWQgZGVwdGggKi8KLSAgcHhfZm9ybWF0cyA9IFhMaXN0UGl4bWFwRm9ybWF0cyAoeGNvbnRleHQtPmRpc3AsICZuYl9mb3JtYXRzKTsKLQotICBpZiAoIXB4X2Zvcm1hdHMpIHsKLSAgICBYQ2xvc2VEaXNwbGF5ICh4Y29udGV4dC0+ZGlzcCk7Ci0gICAgZ19mcmVlICh4Y29udGV4dCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICAvKiBXZSBnZXQgYnBwIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gb3VyIHJ1bm5pbmcgZGVwdGggKi8KLSAgZm9yIChpID0gMDsgaSA8IG5iX2Zvcm1hdHM7IGkrKykgewotICAgIGlmIChweF9mb3JtYXRzW2ldLmRlcHRoID09IHhjb250ZXh0LT5kZXB0aCkKLSAgICAgIHhjb250ZXh0LT5icHAgPSBweF9mb3JtYXRzW2ldLmJpdHNfcGVyX3BpeGVsOwotICB9Ci0KLSAgWEZyZWUgKHB4X2Zvcm1hdHMpOwotCi0gIHhjb250ZXh0LT5lbmRpYW5uZXNzID0KLSAgICAgIChJbWFnZUJ5dGVPcmRlciAoeGNvbnRleHQtPmRpc3ApID09Ci0gICAgICBMU0JGaXJzdCkgPyBHX0xJVFRMRV9FTkRJQU4gOiBHX0JJR19FTkRJQU47Ci0KLSNpZmRlZiBIQVZFX1hTSE0KLSAgLyogU2VhcmNoIGZvciBYU2htIGV4dGVuc2lvbiBzdXBwb3J0ICovCi0gIGlmIChYU2htUXVlcnlFeHRlbnNpb24gKHhjb250ZXh0LT5kaXNwKSAmJgotICAgICAgeGltYWdldXRpbF9jaGVja194c2htX2NhbGxzICh4Y29udGV4dCkpIHsKLSAgICB4Y29udGV4dC0+dXNlX3hzaG0gPSBUUlVFOwotICAgIEdTVF9ERUJVRyAoInhpbWFnZXV0aWwgaXMgdXNpbmcgWFNobSBleHRlbnNpb24iKTsKLSAgfSBlbHNlIHsKLSAgICB4Y29udGV4dC0+dXNlX3hzaG0gPSBGQUxTRTsKLSAgICBHU1RfREVCVUcgKCJ4aW1hZ2V1dGlsIGlzIG5vdCB1c2luZyBYU2htIGV4dGVuc2lvbiIpOwotICB9Ci0jZW5kaWYgLyogSEFWRV9YU0hNICovCi0KLSAgLyogb3VyIGNhcHMgc3lzdGVtIGhhbmRsZXMgMjQvMzJicHAgUkdCIGFzIGJpZy1lbmRpYW4uICovCi0gIGlmICgoeGNvbnRleHQtPmJwcCA9PSAyNCB8fCB4Y29udGV4dC0+YnBwID09IDMyKSAmJgotICAgICAgeGNvbnRleHQtPmVuZGlhbm5lc3MgPT0gR19MSVRUTEVfRU5ESUFOKSB7Ci0gICAgeGNvbnRleHQtPmVuZGlhbm5lc3MgPSBHX0JJR19FTkRJQU47Ci0gICAgeGNvbnRleHQtPnJfbWFza19vdXRwdXQgPSBHVUlOVDMyX1RPX0JFICh4Y29udGV4dC0+dmlzdWFsLT5yZWRfbWFzayk7Ci0gICAgeGNvbnRleHQtPmdfbWFza19vdXRwdXQgPSBHVUlOVDMyX1RPX0JFICh4Y29udGV4dC0+dmlzdWFsLT5ncmVlbl9tYXNrKTsKLSAgICB4Y29udGV4dC0+Yl9tYXNrX291dHB1dCA9IEdVSU5UMzJfVE9fQkUgKHhjb250ZXh0LT52aXN1YWwtPmJsdWVfbWFzayk7Ci0gICAgaWYgKHhjb250ZXh0LT5icHAgPT0gMjQpIHsKLSAgICAgIHhjb250ZXh0LT5yX21hc2tfb3V0cHV0ID4+PSA4OwotICAgICAgeGNvbnRleHQtPmdfbWFza19vdXRwdXQgPj49IDg7Ci0gICAgICB4Y29udGV4dC0+Yl9tYXNrX291dHB1dCA+Pj0gODsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgeGNvbnRleHQtPnJfbWFza19vdXRwdXQgPSB4Y29udGV4dC0+dmlzdWFsLT5yZWRfbWFzazsKLSAgICB4Y29udGV4dC0+Z19tYXNrX291dHB1dCA9IHhjb250ZXh0LT52aXN1YWwtPmdyZWVuX21hc2s7Ci0gICAgeGNvbnRleHQtPmJfbWFza19vdXRwdXQgPSB4Y29udGV4dC0+dmlzdWFsLT5ibHVlX21hc2s7Ci0gIH0KLQotICByZXR1cm4geGNvbnRleHQ7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHRoZSBYIGNvbnRleHQuIENsb3NpbmcgdGhlIERpc3BsYXkgYW5kIHVucmVmaW5nIHRoZQotICAgY2FwcyBmb3Igc3VwcG9ydGVkIGZvcm1hdHMuICovCi12b2lkCi14aW1hZ2V1dGlsX3hjb250ZXh0X2NsZWFyIChHc3RYQ29udGV4dCAqIHhjb250ZXh0KQotewotICBnX3JldHVybl9pZl9mYWlsICh4Y29udGV4dCAhPSBOVUxMKTsKLQotICBpZiAoeGNvbnRleHQtPmNhcHMgIT0gTlVMTCkKLSAgICBnc3RfY2Fwc191bnJlZiAoeGNvbnRleHQtPmNhcHMpOwotCi0gIFhDbG9zZURpc3BsYXkgKHhjb250ZXh0LT5kaXNwKTsKLQotICBnX2ZyZWUgKHhjb250ZXh0KTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBwaXhlbCBhc3BlY3QgcmF0aW8gYmFzZWQgb24gdGhlIHByb3BlcnRpZXMKLSAqIGluIHRoZSB4Y29udGV4dCBzdHJ1Y3R1cmUgYW5kIHN0b3JlcyBpdCB0aGVyZS4gKi8KLXZvaWQKLXhpbWFnZXV0aWxfY2FsY3VsYXRlX3BpeGVsX2FzcGVjdF9yYXRpbyAoR3N0WENvbnRleHQgKiB4Y29udGV4dCkKLXsKLSAgZ2ludCBwYXJbXVsyXSA9IHsKLSAgICB7MSwgMX0sICAgICAgICAgICAgICAgICAgICAgLyogcmVndWxhciBzY3JlZW4gKi8KLSAgICB7MTYsIDE1fSwgICAgICAgICAgICAgICAgICAgLyogUEFMIFRWICovCi0gICAgezExLCAxMH0sICAgICAgICAgICAgICAgICAgIC8qIDUyNSBsaW5lIFJlYy42MDEgdmlkZW8gKi8KLSAgICB7NTQsIDU5fSAgICAgICAgICAgICAgICAgICAgLyogNjI1IGxpbmUgUmVjLjYwMSB2aWRlbyAqLwotICB9OwotICBnaW50IGk7Ci0gIGdpbnQgaW5kZXg7Ci0gIGdkb3VibGUgcmF0aW87Ci0gIGdkb3VibGUgZGVsdGE7Ci0KLSNkZWZpbmUgREVMVEEoaWR4KSAoQUJTIChyYXRpbyAtICgoZ2RvdWJsZSkgcGFyW2lkeF1bMF0gLyBwYXJbaWR4XVsxXSkpKQotCi0gIC8qIGZpcnN0IGNhbGN1bGF0ZSB0aGUgInJlYWwiIHJhdGlvIGJhc2VkIG9uIHRoZSBYIHZhbHVlczsKLSAgICogd2hpY2ggaXMgdGhlICJwaHlzaWNhbCIgdy9oIGRpdmlkZWQgYnkgdGhlIHcvaCBpbiBwaXhlbHMgb2YgdGhlIGRpc3BsYXkgKi8KLSAgcmF0aW8gPSAoZ2RvdWJsZSkgKHhjb250ZXh0LT53aWR0aG1tICogeGNvbnRleHQtPmhlaWdodCkKLSAgICAgIC8gKHhjb250ZXh0LT5oZWlnaHRtbSAqIHhjb250ZXh0LT53aWR0aCk7Ci0KLSAgLyogRGlyZWN0RkIncyBYIGluIDcyMHg1NzYgcmVwb3J0cyB0aGUgcGh5c2ljYWwgZGltZW5zaW9ucyB3cm9uZywgc28KLSAgICogb3ZlcnJpZGUgaGVyZSAqLwotICBpZiAoeGNvbnRleHQtPndpZHRoID09IDcyMCAmJiB4Y29udGV4dC0+aGVpZ2h0ID09IDU3NikgewotICAgIHJhdGlvID0gNC4wICogNTc2IC8gKDMuMCAqIDcyMCk7Ci0gIH0KLSAgR1NUX0RFQlVHICgiY2FsY3VsYXRlZCBwaXhlbCBhc3BlY3QgcmF0aW86ICVmIiwgcmF0aW8pOwotCi0gIC8qIG5vdyBmaW5kIHRoZSBvbmUgZnJvbSBwYXJbXVsyXSB3aXRoIHRoZSBsb3dlc3QgZGVsdGEgdG8gdGhlIHJlYWwgb25lICovCi0gIGRlbHRhID0gREVMVEEgKDApOwotICBpbmRleCA9IDA7Ci0KLSAgZm9yIChpID0gMTsgaSA8IHNpemVvZiAocGFyKSAvIChzaXplb2YgKGdpbnQpICogMik7ICsraSkgewotICAgIGdkb3VibGUgdGhpc19kZWx0YSA9IERFTFRBIChpKTsKLQotICAgIGlmICh0aGlzX2RlbHRhIDwgZGVsdGEpIHsKLSAgICAgIGluZGV4ID0gaTsKLSAgICAgIGRlbHRhID0gdGhpc19kZWx0YTsKLSAgICB9Ci0gIH0KLQotICBHU1RfREVCVUcgKCJEZWNpZGVkIG9uIGluZGV4ICVkICglZC8lZCkiLCBpbmRleCwKLSAgICAgIHBhcltpbmRleF1bMF0sIHBhcltpbmRleF1bMV0pOwotCi0gIHhjb250ZXh0LT5wYXJfbiA9IHBhcltpbmRleF1bMF07Ci0gIHhjb250ZXh0LT5wYXJfZCA9IHBhcltpbmRleF1bMV07Ci0gIEdTVF9ERUJVRyAoInNldCB4Y29udGV4dCBQQVIgdG8gJWQvJWRcbiIsIHhjb250ZXh0LT5wYXJfbiwgeGNvbnRleHQtPnBhcl9kKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1nc3RfeGltYWdlc3JjX2J1ZmZlcl9kaXNwb3NlIChHc3RCdWZmZXIgKiB4aW1hZ2UpCi17Ci0gIEdzdEVsZW1lbnQgKnBhcmVudDsKLSAgR3N0TWV0YVhJbWFnZSAqbWV0YTsKLSAgZ2Jvb2xlYW4gcmV0ID0gVFJVRTsKLQotICBtZXRhID0gR1NUX01FVEFfWElNQUdFX0dFVCAoeGltYWdlKTsKLQotICBwYXJlbnQgPSBtZXRhLT5wYXJlbnQ7Ci0gIGlmIChwYXJlbnQgPT0gTlVMTCkgewotICAgIGdfd2FybmluZyAoIlhJbWFnZVNyY0J1ZmZlci0+eGltYWdlc3JjID09IE5VTEwiKTsKLSAgICBnb3RvIGJlYWNoOwotICB9Ci0KLSAgaWYgKG1ldGEtPnJldHVybl9mdW5jKQotICAgIHJldCA9IG1ldGEtPnJldHVybl9mdW5jIChwYXJlbnQsIHhpbWFnZSk7Ci0KLWJlYWNoOgotICByZXR1cm4gcmV0OwotfQotCi12b2lkCi1nc3RfeGltYWdlX2J1ZmZlcl9mcmVlIChHc3RCdWZmZXIgKiB4aW1hZ2UpCi17Ci0gIEdzdE1ldGFYSW1hZ2UgKm1ldGE7Ci0KLSAgbWV0YSA9IEdTVF9NRVRBX1hJTUFHRV9HRVQgKHhpbWFnZSk7Ci0KLSAgLyogbWFrZSBzdXJlIGl0IGlzIG5vdCByZWN5Y2xlZCAqLwotICBtZXRhLT53aWR0aCA9IC0xOwotICBtZXRhLT5oZWlnaHQgPSAtMTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoeGltYWdlKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIEdzdFhJbWFnZVNyY0J1ZmZlciBjcmVhdGlvbiBkZXBlbmRpbmcgb24gWFNobSBhdmFpbGFiaWxpdHkgKi8KLUdzdEJ1ZmZlciAqCi1nc3RfeGltYWdldXRpbF94aW1hZ2VfbmV3IChHc3RYQ29udGV4dCAqIHhjb250ZXh0LAotICAgIEdzdEVsZW1lbnQgKiBwYXJlbnQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgQnVmZmVyUmV0dXJuRnVuYyByZXR1cm5fZnVuYykKLXsKLSAgR3N0QnVmZmVyICp4aW1hZ2UgPSBOVUxMOwotICBHc3RNZXRhWEltYWdlICptZXRhOwotICBnYm9vbGVhbiBzdWNjZWVkZWQgPSBGQUxTRTsKLQotICB4aW1hZ2UgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX01JTklfT0JKRUNUX0NBU1QgKHhpbWFnZSktPmRpc3Bvc2UgPQotICAgICAgKEdzdE1pbmlPYmplY3REaXNwb3NlRnVuY3Rpb24pIGdzdF94aW1hZ2VzcmNfYnVmZmVyX2Rpc3Bvc2U7Ci0KLSAgbWV0YSA9IEdTVF9NRVRBX1hJTUFHRV9BREQgKHhpbWFnZSk7Ci0gIG1ldGEtPndpZHRoID0gd2lkdGg7Ci0gIG1ldGEtPmhlaWdodCA9IGhlaWdodDsKLQotI2lmZGVmIEhBVkVfWFNITQotICBtZXRhLT5TSE1JbmZvLnNobWFkZHIgPSAoKHZvaWQgKikgLTEpOwotICBtZXRhLT5TSE1JbmZvLnNobWlkID0gLTE7Ci0KLSAgaWYgKHhjb250ZXh0LT51c2VfeHNobSkgewotICAgIG1ldGEtPnhpbWFnZSA9IFhTaG1DcmVhdGVJbWFnZSAoeGNvbnRleHQtPmRpc3AsCi0gICAgICAgIHhjb250ZXh0LT52aXN1YWwsIHhjb250ZXh0LT5kZXB0aCwKLSAgICAgICAgWlBpeG1hcCwgTlVMTCwgJm1ldGEtPlNITUluZm8sIG1ldGEtPndpZHRoLCBtZXRhLT5oZWlnaHQpOwotICAgIGlmICghbWV0YS0+eGltYWdlKSB7Ci0gICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcmVudCwKLSAgICAgICAgICAiY291bGQgbm90IFhTaG1DcmVhdGVJbWFnZSBhICVkeCVkIGltYWdlIiwgbWV0YS0+d2lkdGgsIG1ldGEtPmhlaWdodCk7Ci0KLSAgICAgIC8qIFJldHJ5IHdpdGhvdXQgWFNobSAqLwotICAgICAgeGNvbnRleHQtPnVzZV94c2htID0gRkFMU0U7Ci0gICAgICBnb3RvIG5vX3hzaG07Ci0gICAgfQotCi0gICAgLyogd2UgaGF2ZSB0byB1c2UgdGhlIHJldHVybmVkIGJ5dGVzX3Blcl9saW5lIGZvciBvdXIgc2htIHNpemUgKi8KLSAgICBtZXRhLT5zaXplID0gbWV0YS0+eGltYWdlLT5ieXRlc19wZXJfbGluZSAqIG1ldGEtPnhpbWFnZS0+aGVpZ2h0OwotICAgIG1ldGEtPlNITUluZm8uc2htaWQgPSBzaG1nZXQgKElQQ19QUklWQVRFLCBtZXRhLT5zaXplLCBJUENfQ1JFQVQgfCAwNzc3KTsKLSAgICBpZiAobWV0YS0+U0hNSW5mby5zaG1pZCA9PSAtMSkKLSAgICAgIGdvdG8gYmVhY2g7Ci0KLSAgICBtZXRhLT5TSE1JbmZvLnNobWFkZHIgPSBzaG1hdCAobWV0YS0+U0hNSW5mby5zaG1pZCwgMCwgMCk7Ci0gICAgaWYgKG1ldGEtPlNITUluZm8uc2htYWRkciA9PSAoKHZvaWQgKikgLTEpKQotICAgICAgZ290byBiZWFjaDsKLQotICAgIC8qIERlbGV0ZSB0aGUgU0hNIHNlZ21lbnQuIEl0IHdpbGwgYWN0dWFsbHkgZ28gYXdheSBhdXRvbWF0aWNhbGx5Ci0gICAgICogd2hlbiB3ZSBkZXRhY2ggbm93ICovCi0gICAgc2htY3RsIChtZXRhLT5TSE1JbmZvLnNobWlkLCBJUENfUk1JRCwgMCk7Ci0KLSAgICBtZXRhLT54aW1hZ2UtPmRhdGEgPSBtZXRhLT5TSE1JbmZvLnNobWFkZHI7Ci0gICAgbWV0YS0+U0hNSW5mby5yZWFkT25seSA9IEZBTFNFOwotCi0gICAgaWYgKFhTaG1BdHRhY2ggKHhjb250ZXh0LT5kaXNwLCAmbWV0YS0+U0hNSW5mbykgPT0gMCkKLSAgICAgIGdvdG8gYmVhY2g7Ci0KLSAgICBYU3luYyAoeGNvbnRleHQtPmRpc3AsIEZBTFNFKTsKLSAgfSBlbHNlCi0gIG5vX3hzaG06Ci0jZW5kaWYgLyogSEFWRV9YU0hNICovCi0gIHsKLSAgICBtZXRhLT54aW1hZ2UgPSBYQ3JlYXRlSW1hZ2UgKHhjb250ZXh0LT5kaXNwLAotICAgICAgICB4Y29udGV4dC0+dmlzdWFsLAotICAgICAgICB4Y29udGV4dC0+ZGVwdGgsCi0gICAgICAgIFpQaXhtYXAsIDAsIE5VTEwsIG1ldGEtPndpZHRoLCBtZXRhLT5oZWlnaHQsIHhjb250ZXh0LT5icHAsIDApOwotICAgIGlmICghbWV0YS0+eGltYWdlKQotICAgICAgZ290byBiZWFjaDsKLQotICAgIC8qIHdlIGhhdmUgdG8gdXNlIHRoZSByZXR1cm5lZCBieXRlc19wZXJfbGluZSBmb3Igb3VyIGltYWdlIHNpemUgKi8KLSAgICBtZXRhLT5zaXplID0gbWV0YS0+eGltYWdlLT5ieXRlc19wZXJfbGluZSAqIG1ldGEtPnhpbWFnZS0+aGVpZ2h0OwotICAgIG1ldGEtPnhpbWFnZS0+ZGF0YSA9IGdfbWFsbG9jIChtZXRhLT5zaXplKTsKLQotICAgIFhTeW5jICh4Y29udGV4dC0+ZGlzcCwgRkFMU0UpOwotICB9Ci0gIHN1Y2NlZWRlZCA9IFRSVUU7Ci0KLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5ICh4aW1hZ2UsCi0gICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkIChHU1RfTUVNT1JZX0ZMQUdfTk9fU0hBUkUsIG1ldGEtPnhpbWFnZS0+ZGF0YSwKLSAgICAgICAgICBtZXRhLT5zaXplLCAwLCBtZXRhLT5zaXplLCBOVUxMLCBOVUxMKSk7Ci0KLSAgLyogS2VlcCBhIHJlZiB0byBvdXIgc3JjICovCi0gIG1ldGEtPnBhcmVudCA9IGdzdF9vYmplY3RfcmVmIChwYXJlbnQpOwotICBtZXRhLT5yZXR1cm5fZnVuYyA9IHJldHVybl9mdW5jOwotYmVhY2g6Ci0gIGlmICghc3VjY2VlZGVkKSB7Ci0gICAgZ3N0X3hpbWFnZV9idWZmZXJfZnJlZSAoeGltYWdlKTsKLSAgICB4aW1hZ2UgPSBOVUxMOwotICB9Ci0KLSAgcmV0dXJuIHhpbWFnZTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhIEdzdFhJbWFnZUJ1ZmZlciBoYW5kbGluZyBYU2htIGF2YWlsYWJpbGl0eSAqLwotdm9pZAotZ3N0X3hpbWFnZXV0aWxfeGltYWdlX2Rlc3Ryb3kgKEdzdFhDb250ZXh0ICogeGNvbnRleHQsIEdzdEJ1ZmZlciAqIHhpbWFnZSkKLXsKLSAgR3N0TWV0YVhJbWFnZSAqbWV0YTsKLQotICBtZXRhID0gR1NUX01FVEFfWElNQUdFX0dFVCAoeGltYWdlKTsKLQotICAvKiBXZSBtaWdodCBoYXZlIHNvbWUgYnVmZmVycyBkZXN0cm95ZWQgYWZ0ZXIgY2hhbmdpbmcgc3RhdGUgdG8gTlVMTCAqLwotICBpZiAoIXhjb250ZXh0KQotICAgIGdvdG8gYmVhY2g7Ci0KLSAgZ19yZXR1cm5faWZfZmFpbCAoeGltYWdlICE9IE5VTEwpOwotCi0jaWZkZWYgSEFWRV9YU0hNCi0gIGlmICh4Y29udGV4dC0+dXNlX3hzaG0pIHsKLSAgICBpZiAobWV0YS0+U0hNSW5mby5zaG1hZGRyICE9ICgodm9pZCAqKSAtMSkpIHsKLSAgICAgIFhTaG1EZXRhY2ggKHhjb250ZXh0LT5kaXNwLCAmbWV0YS0+U0hNSW5mbyk7Ci0gICAgICBYU3luYyAoeGNvbnRleHQtPmRpc3AsIDApOwotICAgICAgc2htZHQgKG1ldGEtPlNITUluZm8uc2htYWRkcik7Ci0gICAgfQotICAgIGlmIChtZXRhLT54aW1hZ2UpCi0gICAgICBYRGVzdHJveUltYWdlIChtZXRhLT54aW1hZ2UpOwotCi0gIH0gZWxzZQotI2VuZGlmIC8qIEhBVkVfWFNITSAqLwotICB7Ci0gICAgaWYgKG1ldGEtPnhpbWFnZSkgewotICAgICAgWERlc3Ryb3lJbWFnZSAobWV0YS0+eGltYWdlKTsKLSAgICB9Ci0gIH0KLQotICBYU3luYyAoeGNvbnRleHQtPmRpc3AsIEZBTFNFKTsKLWJlYWNoOgotICBpZiAobWV0YS0+cGFyZW50KSB7Ci0gICAgLyogUmVsZWFzZSB0aGUgcmVmIHRvIG91ciBwYXJlbnQgKi8KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChtZXRhLT5wYXJlbnQpOwotICAgIG1ldGEtPnBhcmVudCA9IE5VTEw7Ci0gIH0KLQotICByZXR1cm47Ci19CmRpZmYgLS1naXQgYS9zeXMveGltYWdlL3hpbWFnZXV0aWwuaCBiL3N5cy94aW1hZ2UveGltYWdldXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDc2ODYxLi4wMDAwMDAwCi0tLSBhL3N5cy94aW1hZ2UveGltYWdldXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gTHVjYSBPZ25pYmVuZSA8bHVvZ25pQHRpbi5pdD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fR1NUX1hJTUFHRVVUSUxfSF9fCi0jZGVmaW5lIF9fR1NUX1hJTUFHRVVUSUxfSF9fCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpZmRlZiBIQVZFX1hTSE0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvaXBjLmg+Ci0jaW5jbHVkZSA8c3lzL3NobS5oPgotI2VuZGlmIC8qIEhBVkVfWFNITSAqLwotCi0jaW5jbHVkZSA8WDExL1hsaWIuaD4KLSNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KLQotI2lmZGVmIEhBVkVfWFNITQotI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hTaG0uaD4KLSNlbmRpZiAvKiBIQVZFX1hTSE0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotR19CRUdJTl9ERUNMUwotCi10eXBlZGVmIHN0cnVjdCBfR3N0WENvbnRleHQgR3N0WENvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0WFdpbmRvdyBHc3RYV2luZG93OwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFhJbWFnZSBHc3RYSW1hZ2U7Ci10eXBlZGVmIHN0cnVjdCBfR3N0TWV0YVhJbWFnZSBHc3RNZXRhWEltYWdlOwotCi0vKiBHbG9iYWwgWCBDb250ZXh0IHN0dWZmICovCi0vKioKLSAqIEdzdFhDb250ZXh0OgotICogQGRpc3A6IHRoZSBYMTEgRGlzcGxheSBvZiB0aGlzIGNvbnRleHQKLSAqIEBzY3JlZW46IHRoZSBkZWZhdWx0IFNjcmVlbiBvZiBEaXNwbGF5IEBkaXNwCi0gKiBAdmlzdWFsOiB0aGUgZGVmYXVsdCBWaXN1YWwgb2YgU2NyZWVuIEBzY3JlZW4KLSAqIEByb290OiB0aGUgcm9vdCBXaW5kb3cgb2YgRGlzcGxheSBAZGlzcAotICogQHdoaXRlOiB0aGUgdmFsdWUgb2YgYSB3aGl0ZSBwaXhlbCBvbiBTY3JlZW4gQHNjcmVlbgotICogQGJsYWNrOiB0aGUgdmFsdWUgb2YgYSBibGFjayBwaXhlbCBvbiBTY3JlZW4gQHNjcmVlbgotICogQGRlcHRoOiB0aGUgY29sb3IgZGVwdGggb2YgRGlzcGxheSBAZGlzcAotICogQGJwcDogdGhlIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBvbiBEaXNwbGF5IEBkaXNwCi0gKiBAZW5kaWFubmVzczogdGhlIGVuZGlhbm5lc3Mgb2YgaW1hZ2UgYnl0ZXMgb24gRGlzcGxheSBAZGlzcAotICogQHdpZHRoOiB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIERpc3BsYXkgQGRpc3AKLSAqIEBoZWlnaHQ6IHRoZSBoZWlnaHQgaW4gcGl4ZWxzIG9mIERpc3BsYXkgQGRpc3AKLSAqIEB3aWR0aG1tOiB0aGUgd2lkdGggaW4gbWlsbGltZXRlcnMgb2YgRGlzcGxheSBAZGlzcAotICogQGhlaWdodG1tOiB0aGUgaGVpZ2h0IGluIG1pbGxpbWV0ZXJzIG9mIERpc3BsYXkgQGRpc3AKLSAqIEBwYXJfbjogdGhlIHBpeGVsIGFzcGVjdCByYXRpbyBudW1lcmF0b3IgY2FsY3VsYXRlZCBmcm9tIEB3aWR0aCwgQHdpZHRobW0KLSAqIGFuZCBAaGVpZ2h0LAotICogQHBhcl9kOiB0aGUgcGl4ZWwgYXNwZWN0IHJhdGlvIGRlbnVtZXJhdG9yIGNhbGN1bGF0ZWQgZnJvbSBAd2lkdGgsIEB3aWR0aG1tCi0gKiBhbmQgQGhlaWdodCwKLSAqIEBoZWlnaHRtbSByYXRpbwotICogQHVzZV94c2htOiB1c2VkIHRvIGtub3duIHdldGhlciBvZiBub3QgWFNobSBleHRlbnNpb24gaXMgdXNhYmxlIG9yIG5vdCBldmVuCi0gKiBpZiB0aGUgRXh0ZW5zaW9uIGlzIHByZXNlbnQKLSAqIEBjYXBzOiB0aGUgI0dzdENhcHMgdGhhdCBEaXNwbGF5IEBkaXNwIGNhbiBhY2NlcHQKLSAqCi0gKiBTdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSB2YXJpb3VzIGluZm9ybWF0aW9ucyBjb2xsZWN0ZWQvY2FsY3VsYXRlZCBmb3IgYQotICogRGlzcGxheS4KLSAqLwotc3RydWN0IF9Hc3RYQ29udGV4dCB7Ci0gIERpc3BsYXkgKmRpc3A7Ci0KLSAgU2NyZWVuICpzY3JlZW47Ci0KLSAgVmlzdWFsICp2aXN1YWw7Ci0KLSAgV2luZG93IHJvb3Q7Ci0KLSAgZ3Vsb25nIHdoaXRlLCBibGFjazsKLQotICBnaW50IGRlcHRoOwotICBnaW50IGJwcDsKLSAgZ2ludCBlbmRpYW5uZXNzOwotCi0gIGdpbnQgd2lkdGgsIGhlaWdodDsKLSAgZ2ludCB3aWR0aG1tLCBoZWlnaHRtbTsKLQotICAvKiB0aGVzZSBhcmUgdGhlIG91dHB1dCBtYXNrcwotICAgKiBmb3IgYnVmZmVycyBmcm9tIHhpbWFnZXNyYwotICAgKiBhbmQgYXJlIGluIGJpZyBlbmRpYW4gKi8KLSAgZ3VpbnQzMiByX21hc2tfb3V0cHV0LCBnX21hc2tfb3V0cHV0LCBiX21hc2tfb3V0cHV0OwotCi0gIGd1aW50IHBhcl9uOyAgICAgICAgICAgICAgICAgIC8qIGNhbGN1bGF0ZWQgcGl4ZWwgYXNwZWN0IHJhdGlvIG51bWVyYXRvciAqLwotICBndWludCBwYXJfZDsgICAgICAgICAgICAgICAgICAvKiBjYWxjdWxhdGVkIHBpeGVsIGFzcGVjdCByYXRpbyBkZW51bWVyYXRvciAqLwotCi0gIGdib29sZWFuIHVzZV94c2htOwotCi0gIEdzdENhcHMgKmNhcHM7Ci19OwotCi0vKioKLSAqIEdzdFhXaW5kb3c6Ci0gKiBAd2luOiB0aGUgV2luZG93IElEIG9mIHRoaXMgWDExIHdpbmRvdwotICogQHdpZHRoOiB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIFdpbmRvdyBAd2luCi0gKiBAaGVpZ2h0OiB0aGUgaGVpZ2h0IGluIHBpeGVscyBvZiBXaW5kb3cgQHdpbgotICogQGludGVybmFsOiB1c2VkIHRvIHJlbWVtYmVyIGlmIFdpbmRvdyBAd2luIHdhcyBjcmVhdGVkIGludGVybmFsbHkgb3IgcGFzc2VkCi0gKiB0aHJvdWdoIHRoZSAjR3N0WE92ZXJsYXkgaW50ZXJmYWNlCi0gKiBAZ2M6IHRoZSBHcmFwaGljYWwgQ29udGV4dCBvZiBXaW5kb3cgQHdpbgotICoKLSAqIFN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIGluZm9ybWF0aW9ucyBhYm91dCBhIFdpbmRvdy4KLSAqLwotc3RydWN0IF9Hc3RYV2luZG93IHsKLSAgV2luZG93IHdpbjsKLSAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICBnYm9vbGVhbiBpbnRlcm5hbDsKLSAgR0MgZ2M7Ci19OwotCi1nYm9vbGVhbiB4aW1hZ2V1dGlsX2NoZWNrX3hzaG1fY2FsbHMgKEdzdFhDb250ZXh0ICogeGNvbnRleHQpOwotCi1Hc3RYQ29udGV4dCAqeGltYWdldXRpbF94Y29udGV4dF9nZXQgKEdzdEVsZW1lbnQgKnBhcmVudCwgCi0gICAgY29uc3QgZ2NoYXIgKmRpc3BsYXlfbmFtZSk7Ci12b2lkIHhpbWFnZXV0aWxfeGNvbnRleHRfY2xlYXIgKEdzdFhDb250ZXh0ICp4Y29udGV4dCk7Ci12b2lkIHhpbWFnZXV0aWxfY2FsY3VsYXRlX3BpeGVsX2FzcGVjdF9yYXRpbyAoR3N0WENvbnRleHQgKiB4Y29udGV4dCk7Ci0KLS8qIGN1c3RvbSB4aW1hZ2VzcmMgYnVmZmVyLCBjb3BpZWQgZnJvbSB4aW1hZ2VzaW5rICovCi0KLS8qIEJ1ZmZlclJldHVybkZ1bmMgaXMgY2FsbGVkIHdoZW4gYSBidWZmZXIgaXMgZmluYWxpc2VkICovCi10eXBlZGVmIGdib29sZWFuICgqQnVmZmVyUmV0dXJuRnVuYykgKEdzdEVsZW1lbnQgKnBhcmVudCwgR3N0QnVmZmVyICpidWYpOwotCi0vKioKLSAqIEdzdE1ldGFYSW1hZ2U6Ci0gKiBAcGFyZW50OiBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB3ZSBiZWxvbmcgdG8KLSAqIEB4aW1hZ2U6IHRoZSBYSW1hZ2Ugb2YgdGhpcyBidWZmZXIKLSAqIEB3aWR0aDogdGhlIHdpZHRoIGluIHBpeGVscyBvZiBYSW1hZ2UgQHhpbWFnZQotICogQGhlaWdodDogdGhlIGhlaWdodCBpbiBwaXhlbHMgb2YgWEltYWdlIEB4aW1hZ2UKLSAqIEBzaXplOiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBYSW1hZ2UgQHhpbWFnZQotICoKLSAqIEV4dHJhIGRhdGEgYXR0YWNoZWQgdG8gYnVmZmVycyBjb250YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYW4gWEltYWdlLgotICovCi1zdHJ1Y3QgX0dzdE1ldGFYSW1hZ2UgewotICBHc3RNZXRhIG1ldGE7Ci0KLSAgLyogUmVmZXJlbmNlIHRvIHRoZSB4aW1hZ2VzcmMgd2UgYmVsb25nIHRvICovCi0gIEdzdEVsZW1lbnQgKnBhcmVudDsKLQotICBYSW1hZ2UgKnhpbWFnZTsKLQotI2lmZGVmIEhBVkVfWFNITQotICBYU2htU2VnbWVudEluZm8gU0hNSW5mbzsKLSNlbmRpZiAvKiBIQVZFX1hTSE0gKi8KLQotICBnaW50IHdpZHRoLCBoZWlnaHQ7Ci0gIHNpemVfdCBzaXplOwotCi0gIEJ1ZmZlclJldHVybkZ1bmMgcmV0dXJuX2Z1bmM7Ci19OwotCi1HVHlwZSBnc3RfbWV0YV94aW1hZ2VfYXBpX2dldF90eXBlICh2b2lkKTsKLWNvbnN0IEdzdE1ldGFJbmZvICogZ3N0X21ldGFfeGltYWdlX2dldF9pbmZvICh2b2lkKTsKLSNkZWZpbmUgR1NUX01FVEFfWElNQUdFX0dFVChidWYpICgoR3N0TWV0YVhJbWFnZSAqKWdzdF9idWZmZXJfZ2V0X21ldGEoYnVmLGdzdF9tZXRhX3hpbWFnZV9hcGlfZ2V0X3R5cGUoKSkpCi0jZGVmaW5lIEdTVF9NRVRBX1hJTUFHRV9BREQoYnVmKSAoKEdzdE1ldGFYSW1hZ2UgKilnc3RfYnVmZmVyX2FkZF9tZXRhKGJ1Zixnc3RfbWV0YV94aW1hZ2VfZ2V0X2luZm8oKSxOVUxMKSkKLQotR3N0QnVmZmVyICpnc3RfeGltYWdldXRpbF94aW1hZ2VfbmV3IChHc3RYQ29udGV4dCAqeGNvbnRleHQsCi0gIEdzdEVsZW1lbnQgKnBhcmVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBCdWZmZXJSZXR1cm5GdW5jIHJldHVybl9mdW5jKTsKLQotdm9pZCBnc3RfeGltYWdldXRpbF94aW1hZ2VfZGVzdHJveSAoR3N0WENvbnRleHQgKnhjb250ZXh0LCAKLSAgR3N0QnVmZmVyICogeGltYWdlKTsKLSAgCi0vKiBDYWxsIHRvIG1hbnVhbGx5IHJlbGVhc2UgYSBidWZmZXIgKi8KLXZvaWQgZ3N0X3hpbWFnZV9idWZmZXJfZnJlZSAoR3N0QnVmZmVyICp4aW1hZ2UpOwotCi1HX0VORF9ERUNMUyAKLQotI2VuZGlmIC8qIF9fR1NUX1hJTUFHRVVUSUxfSF9fICovCmRpZmYgLS1naXQgYS90ZXN0LWRyaXZlciBiL3Rlc3QtZHJpdmVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4ZTU3NWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3QtZHJpdmVyCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgdGVzdC1kcml2ZXIgLSBiYXNpYyB0ZXN0c3VpdGUgZHJpdmVyIHNjcmlwdC4KLQotc2NyaXB0dmVyc2lvbj0yMDEzLTA3LTEzLjIyOyAjIFVUQwotCi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLSMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKLSMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bwotIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KLQotIyBNYWtlIHVuY29uZGl0aW9uYWwgZXhwYW5zaW9uIG9mIHVuZGVmaW5lZCB2YXJpYWJsZXMgYW4gZXJyb3IuICBUaGlzCi0jIGhlbHBzIGEgbG90IGluIHByZXZlbnRpbmcgdHlwby1yZWxhdGVkIGJ1Z3MuCi1zZXQgLXUKLQotdXNhZ2VfZXJyb3IgKCkKLXsKLSAgZWNobyAiJDA6ICQqIiA+JjIKLSAgcHJpbnRfdXNhZ2UgPiYyCi0gIGV4aXQgMgotfQotCi1wcmludF91c2FnZSAoKQotewotICBjYXQgPDxFTkQKLVVzYWdlOgotICB0ZXN0LWRyaXZlciAtLXRlc3QtbmFtZT1OQU1FIC0tbG9nLWZpbGU9UEFUSCAtLXRycy1maWxlPVBBVEgKLSAgICAgICAgICAgICAgWy0tZXhwZWN0LWZhaWx1cmU9e3llc3xub31dIFstLWNvbG9yLXRlc3RzPXt5ZXN8bm99XQotICAgICAgICAgICAgICBbLS1lbmFibGUtaGFyZC1lcnJvcnM9e3llc3xub31dIFstLV0KLSAgICAgICAgICAgICAgVEVTVC1TQ1JJUFQgW1RFU1QtU0NSSVBULUFSR1VNRU5UU10KLVRoZSAnLS10ZXN0LW5hbWUnLCAnLS1sb2ctZmlsZScgYW5kICctLXRycy1maWxlJyBvcHRpb25zIGFyZSBtYW5kYXRvcnkuCi1FTkQKLX0KLQotdGVzdF9uYW1lPSAjIFVzZWQgZm9yIHJlcG9ydGluZy4KLWxvZ19maWxlPSAgIyBXaGVyZSB0byBzYXZlIHRoZSBvdXRwdXQgb2YgdGhlIHRlc3Qgc2NyaXB0LgotdHJzX2ZpbGU9ICAjIFdoZXJlIHRvIHNhdmUgdGhlIG1ldGFkYXRhIG9mIHRoZSB0ZXN0IHJ1bi4KLWV4cGVjdF9mYWlsdXJlPW5vCi1jb2xvcl90ZXN0cz1ubwotZW5hYmxlX2hhcmRfZXJyb3JzPXllcwotd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLSAgY2FzZSAkMSBpbgotICAtLWhlbHApIHByaW50X3VzYWdlOyBleGl0ICQ/OzsKLSAgLS12ZXJzaW9uKSBlY2hvICJ0ZXN0LWRyaXZlciAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OwotICAtLXRlc3QtbmFtZSkgdGVzdF9uYW1lPSQyOyBzaGlmdDs7Ci0gIC0tbG9nLWZpbGUpIGxvZ19maWxlPSQyOyBzaGlmdDs7Ci0gIC0tdHJzLWZpbGUpIHRyc19maWxlPSQyOyBzaGlmdDs7Ci0gIC0tY29sb3ItdGVzdHMpIGNvbG9yX3Rlc3RzPSQyOyBzaGlmdDs7Ci0gIC0tZXhwZWN0LWZhaWx1cmUpIGV4cGVjdF9mYWlsdXJlPSQyOyBzaGlmdDs7Ci0gIC0tZW5hYmxlLWhhcmQtZXJyb3JzKSBlbmFibGVfaGFyZF9lcnJvcnM9JDI7IHNoaWZ0OzsKLSAgLS0pIHNoaWZ0OyBicmVhazs7Ci0gIC0qKSB1c2FnZV9lcnJvciAiaW52YWxpZCBvcHRpb246ICckMSciOzsKLSAgICopIGJyZWFrOzsKLSAgZXNhYwotICBzaGlmdAotZG9uZQotCi1taXNzaW5nX29wdHM9Ci10ZXN0IHgiJHRlc3RfbmFtZSIgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLXRlc3QtbmFtZSIKLXRlc3QgeCIkbG9nX2ZpbGUiICA9IHggJiYgbWlzc2luZ19vcHRzPSIkbWlzc2luZ19vcHRzIC0tbG9nLWZpbGUiCi10ZXN0IHgiJHRyc19maWxlIiAgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLXRycy1maWxlIgotaWYgdGVzdCB4IiRtaXNzaW5nX29wdHMiICE9IHg7IHRoZW4KLSAgdXNhZ2VfZXJyb3IgInRoZSBmb2xsb3dpbmcgbWFuZGF0b3J5IG9wdGlvbnMgYXJlIG1pc3Npbmc6JG1pc3Npbmdfb3B0cyIKLWZpCi0KLWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgdXNhZ2VfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQiCi1maQotCi1pZiB0ZXN0ICRjb2xvcl90ZXN0cyA9IHllczsgdGhlbgotICAjIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggJ2xpYi9hbS9jaGVjay5hbTokKGFtX190dHlfY29sb3JzKScuCi0gIHJlZD0nG1swOzMxbScgIyBSZWQuCi0gIGdybj0nG1swOzMybScgIyBHcmVlbi4KLSAgbGduPScbWzE7MzJtJyAjIExpZ2h0IGdyZWVuLgotICBibHU9JxtbMTszNG0nICMgQmx1ZS4KLSAgbWduPScbWzA7MzVtJyAjIE1hZ2VudGEuCi0gIHN0ZD0nG1ttJyAgICAgIyBObyBjb2xvci4KLWVsc2UKLSAgcmVkPSBncm49IGxnbj0gYmx1PSBtZ249IHN0ZD0KLWZpCi0KLWRvX2V4aXQ9J3JtIC1mICRsb2dfZmlsZSAkdHJzX2ZpbGU7IChleGl0ICRzdCk7IGV4aXQgJHN0JwotdHJhcCAic3Q9MTI5OyAkZG9fZXhpdCIgMQotdHJhcCAic3Q9MTMwOyAkZG9fZXhpdCIgMgotdHJhcCAic3Q9MTQxOyAkZG9fZXhpdCIgMTMKLXRyYXAgInN0PTE0MzsgJGRvX2V4aXQiIDE1Ci0KLSMgVGVzdCBzY3JpcHQgaXMgcnVuIGhlcmUuCi0iJEAiID4kbG9nX2ZpbGUgMj4mMQotZXN0YXR1cz0kPwotCi1pZiB0ZXN0ICRlbmFibGVfaGFyZF9lcnJvcnMgPSBubyAmJiB0ZXN0ICRlc3RhdHVzIC1lcSA5OTsgdGhlbgotICB0d2Vha2VkX2VzdGF0dXM9MQotZWxzZQotICB0d2Vha2VkX2VzdGF0dXM9JGVzdGF0dXMKLWZpCi0KLWNhc2UgJHR3ZWFrZWRfZXN0YXR1czokZXhwZWN0X2ZhaWx1cmUgaW4KLSAgMDp5ZXMpIGNvbD0kcmVkIHJlcz1YUEFTUyByZWNoZWNrPXllcyBnY29weT15ZXM7OwotICAwOiopICAgY29sPSRncm4gcmVzPVBBU1MgIHJlY2hlY2s9bm8gIGdjb3B5PW5vOzsKLSAgNzc6KikgIGNvbD0kYmx1IHJlcz1TS0lQICByZWNoZWNrPW5vICBnY29weT15ZXM7OwotICA5OToqKSAgY29sPSRtZ24gcmVzPUVSUk9SIHJlY2hlY2s9eWVzIGdjb3B5PXllczs7Ci0gICo6eWVzKSBjb2w9JGxnbiByZXM9WEZBSUwgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKLSAgKjoqKSAgIGNvbD0kcmVkIHJlcz1GQUlMICByZWNoZWNrPXllcyBnY29weT15ZXM7OwotZXNhYwotCi0jIFJlcG9ydCB0aGUgdGVzdCBvdXRjb21lIGFuZCBleGl0IHN0YXR1cyBpbiB0aGUgbG9ncywgc28gdGhhdCBvbmUgY2FuCi0jIGtub3cgd2hldGhlciB0aGUgdGVzdCBwYXNzZWQgb3IgZmFpbGVkIHNpbXBseSBieSBsb29raW5nIGF0IHRoZSAnLmxvZycKLSMgZmlsZSwgd2l0aG91dCB0aGUgbmVlZCBvZiBhbHNvIHBlYWtpbmcgaW50byB0aGUgY29ycmVzcG9uZGluZyAnLnRycycKLSMgZmlsZSAoYXV0b21ha2UgYnVnIzExODE0KS4KLWVjaG8gIiRyZXMgJHRlc3RfbmFtZSAoZXhpdCBzdGF0dXM6ICRlc3RhdHVzKSIgPj4kbG9nX2ZpbGUKLQotIyBSZXBvcnQgb3V0Y29tZSB0byBjb25zb2xlLgotZWNobyAiJHtjb2x9JHtyZXN9JHtzdGR9OiAkdGVzdF9uYW1lIgotCi0jIFJlZ2lzdGVyIHRoZSB0ZXN0IHJlc3VsdCwgYW5kIG90aGVyIHJlbGV2YW50IG1ldGFkYXRhLgotZWNobyAiOnRlc3QtcmVzdWx0OiAkcmVzIiA+ICR0cnNfZmlsZQotZWNobyAiOmdsb2JhbC10ZXN0LXJlc3VsdDogJHJlcyIgPj4gJHRyc19maWxlCi1lY2hvICI6cmVjaGVjazogJHJlY2hlY2siID4+ICR0cnNfZmlsZQotZWNobyAiOmNvcHktaW4tZ2xvYmFsLWxvZzogJGdjb3B5IiA+PiAkdHJzX2ZpbGUKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6IHNoZWxsLXNjcmlwdAotIyBzaC1pbmRlbnRhdGlvbjogMgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCi0jIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgotIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCi0jIEVuZDoKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTBlOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1pZiBIQVZFX0dTVF9DSEVDSwotU1VCRElSU19DSEVDSyA9IGNoZWNrIGZpbGVzCi1lbHNlCi1TVUJESVJTX0NIRUNLID0KLWVuZGlmCi0KLWlmIFVTRV9YCi1TVUJESVJTX0lDTEVTID0gaWNsZXMKLWVsc2UKLVNVQkRJUlNfSUNMRVMgPQotZW5kaWYKLQotaWYgQlVJTERfRVhBTVBMRVMKLVNVQkRJUl9FWEFNUExFUyA9IGV4YW1wbGVzCi1lbHNlCi1TVUJESVJfRVhBTVBMRVMgPQotZW5kaWYKLQotU1VCRElSUyA9ICQoU1VCRElSU19DSEVDSykgJChTVUJESVJTX0lDTEVTKSAkKFNVQkRJUl9FWEFNUExFUykKLQotRElTVF9TVUJESVJTID0gY2hlY2sgaWNsZXMgZXhhbXBsZXMgZmlsZXMKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuaW4gYi90ZXN0cy9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwNWYzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg2OCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHRlc3RzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLWFtX19yZWxhdGl2aXplID0gXAotICBkaXIwPWBwd2RgOyBcCi0gIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAotICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAotICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAotICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKLSAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAotICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKLSAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCi0gICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAotICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKLSAgICAgIGVsc2UgXAotICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKLSAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKLSAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAotICAgICAgICBmaTsgXAotICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAotICAgICAgZmk7IFwKLSAgICBmaTsgXAotICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAotICBkb25lOyBcCi0gIHJlbGRpcj0iJCRkaXIyIgotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ASEFWRV9HU1RfQ0hFQ0tfRkFMU0VAU1VCRElSU19DSEVDSyA9IAotQEhBVkVfR1NUX0NIRUNLX1RSVUVAU1VCRElSU19DSEVDSyA9IGNoZWNrIGZpbGVzCi1AVVNFX1hfRkFMU0VAU1VCRElSU19JQ0xFUyA9IAotQFVTRV9YX1RSVUVAU1VCRElSU19JQ0xFUyA9IGljbGVzCi1AQlVJTERfRVhBTVBMRVNfRkFMU0VAU1VCRElSX0VYQU1QTEVTID0gCi1AQlVJTERfRVhBTVBMRVNfVFJVRUBTVUJESVJfRVhBTVBMRVMgPSBleGFtcGxlcwotU1VCRElSUyA9ICQoU1VCRElSU19DSEVDSykgJChTVUJESVJTX0lDTEVTKSAkKFNVQkRJUl9FWEFNUExFUykKLURJU1RfU1VCRElSUyA9IGNoZWNrIGljbGVzIGV4YW1wbGVzIGZpbGVzCi1hbGw6IGFsbC1yZWN1cnNpdmUKLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgXAotCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svTWFrZWZpbGUuYW0gYi90ZXN0cy9jaGVjay9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0MGM3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDYyOCArMCwwIEBACi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL2NoZWNrLm1hawotCi1DSEVDS19SRUdJU1RSWSA9ICQodG9wX2J1aWxkZGlyKS90ZXN0cy9jaGVjay90ZXN0LXJlZ2lzdHJ5LnJlZwotVEVTVF9GSUxFU19ESVJFQ1RPUlkgPSAkKHRvcF9zcmNkaXIpL3Rlc3RzL2ZpbGVzCi0KLVJFR0lTVFJZX0VOVklST05NRU5UID0gXAotCUdTVF9SRUdJU1RSWV8xXzA9JChDSEVDS19SRUdJU1RSWSkKLQotQU1fVEVTVFNfRU5WSVJPTk1FTlQgKz0gXAotCSQoUkVHSVNUUllfRU5WSVJPTk1FTlQpCQkJCQlcCi0JR1NUX1BMVUdJTl9TWVNURU1fUEFUSF8xXzA9CQkJCVwKLQlHU1RfUExVR0lOX1BBVEhfMV8wPSQodG9wX2J1aWxkZGlyKS9nc3Q6JCh0b3BfYnVpbGRkaXIpL2V4dDokKHRvcF9idWlsZGRpcikvc3lzOiQoR1NUUEJfUExVR0lOU19ESVIpOiQoR1NUX1BMVUdJTlNfRElSKQkJCVwKLQlHU1RfUExVR0lOX0xPQURJTkdfV0hJVEVMSVNUPSJnc3RyZWFtZXJAJChHU1RfUExVR0lOU19ESVIpOmdzdC1wbHVnaW5zLWJhc2VAJChHU1RQQl9QTFVHSU5TX0RJUik6Z3N0LXBsdWdpbnMtZ29vZEAkKHRvcF9idWlsZGRpcikiCVwKLQlHU1RfU1RBVEVfSUdOT1JFX0VMRU1FTlRTPSJhYXNpbmsgYXV0b2F1ZGlvc3JjIGF1dG9hdWRpb3NpbmsgYXV0b3ZpZGVvc3JjIGF1dG92aWRlb3NpbmsgXAotCQljYWNhc2luayBjYWlyb3RleHRvdmVybGF5IFwKLQkJaGFsYXVkaW9zcmMgaGFsYXVkaW9zaW5rIGphY2thdWRpb3NyYyBqYWNrYXVkaW9zaW5rIFwKLQkJb3Nzc3JjIG9zc3Npbmsgb3N4YXVkaW9zaW5rIG9zeGF1ZGlvc3JjIG9zeHZpZGVvc3JjIG9zeHZpZGVvc2luayBcCi0JCXB1bHNlc2luayBwdWxzZXNyYyBwdWxzZW1peGVyIHY0bDJzcmMiIFwKLQlHU0VUVElOR1NfQkFDS0VORD0ibWVtb3J5IgotCi0jIGZha2UgZGV2aWNlIGRyaXZlcnM6IHdlIGNvdWxkIHJ1biBoYXJkd2FyZSBlbGVtZW50IHRlc3RzIGFnYWluc3QgZHVtbXkgZHJpdmVycwotIyB2NGwyOiB2aXZvIChwYXJ0IG9mIG5vcm1hbCBrZXJuZWwpCi0jICAgbW9kcHJvYmUgdml2bzsKLSMgICBnc3QtbGF1bmNoIHY0bDJzcmMgZGV2aWNlPSIvZGV2L3ZpZGVvMSIgISB4dmltYWdlc2luazsKLSMgICBybW1vZCB2aXZvCi0jCi0jIGFsc2E6IHNuZC1kdW1teSAocGFydCBvZiBub3JtYWwgYWxzYSwgbm90IHJlbW92YWJsZSkKLSMgICBtb2Rwcm9iZSBzbmQtZHVtbXk7Ci0jICAgZ3N0LWxhdW5jaCBhbHNhc3JjIGRldmljZT0iaHc6MiIgISBmYWtlc2luawotIyAgIGdzdC1sYXVuY2ggZmFrZXNyYyAhIGFsc2FzaW5rIGRldmljZT0iaHc6MiIKLSMKLSMgbmVlZCBhIHdheSB0byBmaWd1cmUgb3V0IHZhbHVlIGZvciB0aGUgZGV2aWNlIHByb3BlcnR5Ci0KLSMgdGhlIGNvcmUgZHVtcHMgb2Ygc29tZSBtYWNoaW5lcyBoYXZlIFBJRHMgYXBwZW5kZWQKLUNMRUFORklMRVMgPSBjb3JlLiogdGVzdC1yZWdpc3RyeS4qCi0KLWNsZWFuLWxvY2FsOiBjbGVhbi1sb2NhbC1jaGVjawotZGlzdGNsZWFuLWxvY2FsOiBkaXN0Y2xlYW4tbG9jYWwtb3JjCi0KLWlmIFVTRV9QTFVHSU5fQUxQSEEKLWNoZWNrX2FscGhhID0gXAotCWVsZW1lbnRzL2FscGhhY29sb3IgXAotCWVsZW1lbnRzL2FscGhhCi1lbHNlCi1jaGVja19hbHBoYSA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX0FVRElPRlgKLWNoZWNrX2F1ZGlvZnggPSBcCi0JZWxlbWVudHMvYXVkaW9hbXBsaWZ5IFwKLQllbGVtZW50cy9hdWRpb2NoZWJiYW5kIFwKLQllbGVtZW50cy9hdWRpb2NoZWJsaW1pdCBcCi0JZWxlbWVudHMvYXVkaW9keW5hbWljIFwKLQllbGVtZW50cy9hdWRpb2VjaG8gXAotCWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyIFwKLQllbGVtZW50cy9hdWRpb2lpcmZpbHRlciBcCi0JZWxlbWVudHMvYXVkaW9pbnZlcnQgXAotCWVsZW1lbnRzL2F1ZGlvcGFub3JhbWEgXAotCWVsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kIFwKLQllbGVtZW50cy9hdWRpb3dzaW5jbGltaXQKLWVsc2UKLWNoZWNrX2F1ZGlvZnggPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9BVURJT1BBUlNFUlMKLWNoZWNrX2F1ZGlvcGFyc2VycyA9IFwKLQllbGVtZW50cy9hYWNwYXJzZSBcCi0JZWxlbWVudHMvYWMzcGFyc2UgXAotCWVsZW1lbnRzL2FtcnBhcnNlIFwKLQllbGVtZW50cy9mbGFjcGFyc2UgXAotCWVsZW1lbnRzL21wZWdhdWRpb3BhcnNlIFwKLQllbGVtZW50cy93YXZwYWNrcGFyc2UKLWVsc2UKLWNoZWNrX2F1ZGlvcGFyc2VycyA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX0FVVE9ERVRFQ1QKLWNoZWNrX2F1dG9kZXRlY3QgPSBlbGVtZW50cy9hdXRvZGV0ZWN0Ci1lbHNlCi1jaGVja19hdXRvZGV0ZWN0ID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fQVZJCi1jaGVja19hdmkgPSBcCi0gIGVsZW1lbnRzL2F2aW11eCBcCi0gIGVsZW1lbnRzL2F2aXN1YnRpdGxlCi1lbHNlCi1jaGVja19hdmkgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9ERUJVR1VUSUxTCi1jaGVja19kZWJ1Z3V0aWxzID0gZWxlbWVudHMvY2Fwc3NldHRlcgotZWxzZQotY2hlY2tfZGVidWd1dGlscyA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX0RFSU5URVJMQUNFCi1jaGVja19kZWludGVybGFjZSA9IGVsZW1lbnRzL2RlaW50ZXJsYWNlCi1lbHNlCi1jaGVja19kZWludGVybGFjZSA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX0RUTUYKLWNoZWNrX2R0bWYgPSBlbGVtZW50cy9kdG1mCi1lbHNlCi1jaGVja19kdG1mID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fRUZGRUNUVgotY2hlY2tfZWZmZWN0diA9IHBpcGVsaW5lcy9lZmZlY3R2Ci1lbHNlCi1jaGVja19lZmZlY3R2ID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fRVFVQUxJWkVSCi1jaGVja19lcXVhbGl6ZXIgPSBlbGVtZW50cy9lcXVhbGl6ZXIKLWVsc2UKLWNoZWNrX2VxdWFsaXplciA9Ci1lbmRpZgotCi1pZiBVU0VfRkxBQwotY2hlY2tfZmxhYyA9IHBpcGVsaW5lcy9mbGFjZGVjCi1lbHNlCi1jaGVja19mbGFjID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fRkxWCi1jaGVja19mbHYgPSBcCi0gICAgICAgIGVsZW1lbnRzL2ZsdmRlbXV4IFwKLSAgICAgICAgZWxlbWVudHMvZmx2bXV4Ci1lbHNlCi1jaGVja19mbHYgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9JU09NUDQKLWNoZWNrX2lzb21wNCA9IFwKLQllbGVtZW50cy9xdG11eCBcCi0JZWxlbWVudHMvcXRkZW11eAotZWxzZQotY2hlY2tfaXNvbXA0ID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fTEFXCi1jaGVja19sYXcgPSBcCi0JZWxlbWVudHMvbXVsYXdkZWMgXAotCWVsZW1lbnRzL211bGF3ZW5jCi1lbHNlCi1jaGVja19sYXcgPQotZW5kaWYKLQotaWYgVVNFX0dES19QSVhCVUYKLWNoZWNrX2dka3BpeGJ1ZiA9IGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmsgZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheQotZWxzZQotY2hlY2tfZ2RrcGl4YnVmID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fSUNZREVNVVgKLWNoZWNrX2ljeWRlbXV4ID0gZWxlbWVudHMvaWN5ZGVtdXgKLWVsc2UKLWNoZWNrX2ljeWRlbXV4ID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fSUQzREVNVVgKLWNoZWNrX2lkM2RlbXV4ID0gZWxlbWVudHMvaWQzZGVtdXgKLWVsc2UKLWNoZWNrX2lkM2RlbXV4ID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fSU1BR0VGUkVFWkUKLWNoZWNrX2ltYWdlZnJlZXplID0gZWxlbWVudHMvaW1hZ2VmcmVlemUKLWVsc2UKLWNoZWNrX2ltYWdlZnJlZXplID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fSU5URVJMRUFWRQotY2hlY2tfaW50ZXJsZWF2ZSA9IFwKLSAgICAgICAgZWxlbWVudHMvZGVpbnRlcmxlYXZlIFwKLSAgICAgICAgZWxlbWVudHMvaW50ZXJsZWF2ZQotZWxzZQotY2hlY2tfaW50ZXJsZWF2ZSA9Ci1lbmRpZgotCi1pZiBVU0VfSlBFRwotY2hlY2tfanBlZyA9IFwKLSAgICAgICAgZWxlbWVudHMvanBlZ2RlYyBcCi0gICAgICAgIGVsZW1lbnRzL2pwZWdlbmMKLWVsc2UKLWNoZWNrX2pwZWcgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9MRVZFTAotY2hlY2tfbGV2ZWwgPSBlbGVtZW50cy9sZXZlbAotZWxzZQotY2hlY2tfbGV2ZWwgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9NQVRST1NLQQotY2hlY2tfbWF0cm9za2EgPSBcCi0JZWxlbWVudHMvbWF0cm9za2FkZW11eCBcCi0JZWxlbWVudHMvbWF0cm9za2FtdXggXAotCWVsZW1lbnRzL21hdHJvc2thcGFyc2UKLWVsc2UKLWNoZWNrX21hdHJvc2thID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fTVVMVElGSUxFCi1jaGVja19tdWx0aWZpbGUgPSBlbGVtZW50cy9tdWx0aWZpbGUgZWxlbWVudHMvc3BsaXRtdXgKLWVsc2UKLWNoZWNrX211bHRpZmlsZSA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX1JFUExBWUdBSU4KLWNoZWNrX3JlcGxheWdhaW4gPSBcCi0JZWxlbWVudHMvcmdhbmFseXNpcyBcCi0JZWxlbWVudHMvcmdsaW1pdGVyIFwKLQllbGVtZW50cy9yZ3ZvbHVtZQotZWxzZQotY2hlY2tfcmVwbGF5Z2FpbiA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX1JUUAotY2hlY2tfcnRwID0gXAotCWVsZW1lbnRzL3J0cC1wYXlsb2FkaW5nIFwKLQllbGVtZW50cy9ydHBoMjYxIFwKLQllbGVtZW50cy9ydHBoMjYzIFwKLQllbGVtZW50cy9ydHB2cDkKLWVsc2UKLWNoZWNrX3J0cCA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX1JUUE1BTkFHRVIKLWNoZWNrX3J0cG1hbmFnZXIgPSBcCi0JZWxlbWVudHMvcnRwYXV4IFwKLQllbGVtZW50cy9ydHBiaW4gXAotCWVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdCBcCi0JZWxlbWVudHMvcnRwY29sbGlzaW9uIFwKLQllbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIgXAotCWVsZW1lbnRzL3J0cG11eCBcCi0JZWxlbWVudHMvcnRwcnR4IFwKLQllbGVtZW50cy9ydHBzZXNzaW9uCi1lbHNlCi1jaGVja19ydHBtYW5hZ2VyID0KLWVuZGlmCi0KLWlmIFVTRV9TT1VQCi1jaGVja19zb3VwID0gZWxlbWVudHMvc291cGh0dHBzcmMKLWVsc2UKLWNoZWNrX3NvdXAgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9TUEVDVFJVTQotY2hlY2tfc3BlY3RydW0gPSBlbGVtZW50cy9zcGVjdHJ1bQotZWxzZQotY2hlY2tfc3BlY3RydW0gPQotZW5kaWYKLQotaWYgVVNFX1NVTkFVRElPCi1jaGVja19zdW5hdWRpbyA9IGVsZW1lbnRzL3N1bmF1ZGlvCi1lbHNlCi1jaGVja19zdW5hdWRpbyA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX1NIQVBFV0lQRQotY2hlY2tfc2hhcGV3aXBlID0gZWxlbWVudHMvc2hhcGV3aXBlCi1lbHNlCi1jaGVja19zaGFwZXdpcGUgPQotZW5kaWYKLQotaWYgVVNFX1RBR0xJQgotY2hlY2tfdGFnbGliID0gXAotCWVsZW1lbnRzL2lkM3YybXV4IFwKLQllbGVtZW50cy9hcGV2Mm11eAotZWxzZQotY2hlY2tfdGFnbGliID0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fVURQCi1jaGVja191ZHAgPSBcCi0gICAgICAgIGVsZW1lbnRzL3VkcHNpbmsgXAotICAgICAgICBlbGVtZW50cy91ZHBzcmMKLWVsc2UKLWNoZWNrX3VkcCA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX1ZJREVPQk9YCi1jaGVja192aWRlb2JveCA9IGVsZW1lbnRzL3ZpZGVvYm94Ci1lbHNlCi1jaGVja192aWRlb2JveCA9Ci1lbmRpZgotCi1pZiBVU0VfUExVR0lOX1ZJREVPQ1JPUAotY2hlY2tfdmlkZW9jcm9wID0gXAotCWVsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcCBcCi0JZWxlbWVudHMvdmlkZW9jcm9wCi1lbHNlCi1jaGVja192aWRlb2Nyb3AgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9WSURFT0ZJTFRFUgotY2hlY2tfdmlkZW9maWx0ZXIgPSBlbGVtZW50cy92aWRlb2ZpbHRlcgotZWxzZQotY2hlY2tfdmlkZW9maWx0ZXIgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9WSURFT01JWEVSCi1jaGVja192aWRlb21peGVyID0gZWxlbWVudHMvdmlkZW9taXhlcgotZWxzZQotY2hlY2tfdmlkZW9taXhlciA9Ci1lbmRpZgotCi1pZiBVU0VfVlBYCi1jaGVja192cHg9ZWxlbWVudHMvdnA4ZW5jIGVsZW1lbnRzL3ZwOGRlYyBlbGVtZW50cy92cDllbmMKLWVsc2UKLWNoZWNrX3ZweD0KLWVuZGlmCi0KLWlmIFVTRV9QTFVHSU5fV0FWRU5DCi1jaGVja193YXZlbmMgPSBwaXBlbGluZXMvd2F2ZW5jCi1lbHNlCi1jaGVja193YXZlbmMgPQotZW5kaWYKLQotaWYgVVNFX1dBVlBBQ0sKLWNoZWNrX3dhdnBhY2sgPSBcCi0gICAgICAgZWxlbWVudHMvd2F2cGFja2RlYyBcCi0gICAgICAgZWxlbWVudHMvd2F2cGFja2VuYyBcCi0gICAgICAgcGlwZWxpbmVzL3dhdnBhY2sKLWVsc2UKLWNoZWNrX3dhdnBhY2sgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9XQVZQQVJTRQotY2hlY2tfd2F2cGFyc2UgPSBlbGVtZW50cy93YXZwYXJzZQotZWxzZQotY2hlY2tfd2F2cGFyc2UgPQotZW5kaWYKLQotaWYgVVNFX1BMVUdJTl9ZNE0KLWNoZWNrX3k0bSA9IGVsZW1lbnRzL3k0bWVuYwotZWxzZQotY2hlY2tfeTRtID0KLWVuZGlmCi0KLWlmIEhBVkVfT1JDCi1jaGVja19vcmMgPSBvcmMvZGVpbnRlcmxhY2Ugb3JjL3ZpZGVvbWl4ZXIgb3JjL3ZpZGVvYm94Ci1lbHNlCi1jaGVja19vcmMgPQotZW5kaWYKLQotCi1jaGVja19QUk9HUkFNUyA9IFwKLQlnZW5lcmljL3N0YXRlcyBcCi0JcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMgXAotCXBpcGVsaW5lcy90YWdzY2hlY2tpbmcgXAotCSQoY2hlY2tfYWxwaGEpIFwKLQkkKGNoZWNrX2F1ZGlvZngpIFwKLQkkKGNoZWNrX2F1ZGlvcGFyc2VycykgXAotCSQoY2hlY2tfYXV0b2RldGVjdCkgXAotCSQoY2hlY2tfYXZpKSBcCi0JJChjaGVja19kZWJ1Z3V0aWxzKSBcCi0JJChjaGVja19kZWludGVybGFjZSkgXAotCSQoY2hlY2tfZHRtZikgXAotCSQoY2hlY2tfZWZmZWN0dikgXAotCSQoY2hlY2tfZXF1YWxpemVyKSBcCi0JJChjaGVja19mbGFjKSBcCi0JJChjaGVja19mbHYpIFwKLQkkKGNoZWNrX2dka3BpeGJ1ZikgXAotCSQoY2hlY2tfaXNvbXA0KSBcCi0JJChjaGVja19pY3lkZW11eCkgXAotCSQoY2hlY2tfaWQzZGVtdXgpIFwKLQkkKGNoZWNrX2ltYWdlZnJlZXplKSBcCi0JJChjaGVja19pbnRlcmxlYXZlKSBcCi0JJChjaGVja19qcGVnKSBcCi0JJChjaGVja19sYXcpIFwKLQkkKGNoZWNrX2xldmVsKSBcCi0JJChjaGVja19tYXRyb3NrYSkgXAotCSQoY2hlY2tfbXVsdGlmaWxlKSBcCi0JJChjaGVja19yZXBsYXlnYWluKSBcCi0JJChjaGVja19ydHApIFwKLQkkKGNoZWNrX3J0cG1hbmFnZXIpIFwKLQkkKGNoZWNrX3NoYXBld2lwZSkgXAotCSQoY2hlY2tfc291cCkgXAotCSQoY2hlY2tfc3BlY3RydW0pIFwKLQkkKGNoZWNrX3N1bmF1ZGlvKSBcCi0JJChjaGVja190YWdsaWIpIFwKLQkkKGNoZWNrX3VkcCkgXAotCSQoY2hlY2tfdmlkZW9ib3gpIFwKLQkkKGNoZWNrX3ZpZGVvY3JvcCkgXAotCSQoY2hlY2tfdmlkZW9maWx0ZXIpIFwKLQkkKGNoZWNrX3ZpZGVvbWl4ZXIpIFwKLQkkKGNoZWNrX3ZweCkgXAotCSQoY2hlY2tfd2F2ZW5jKSBcCi0JJChjaGVja193YXZwYWNrKSBcCi0JJChjaGVja193YXZwYXJzZSkgXAotCSQoY2hlY2tfeTRtKSBcCi0JJChjaGVja19vcmMpCi0KLVZBTEdSSU5EX1RPX0ZJWCA9IFwKLQllbGVtZW50cy9ydHAtcGF5bG9hZGluZwotCi1URVNUUyA9ICQoY2hlY2tfUFJPR1JBTVMpCi0KLUFNX0NGTEFHUyA9ICQoR1NUX09CSl9DRkxBR1MpICQoR1NUX0NIRUNLX0NGTEFHUykgJChDSEVDS19DRkxBR1MpIFwKLQkkKEdTVF9PUFRJT05fQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpIC1ER1NUX1RFU1RfRklMRVNfUEFUSD0iXCIkKFRFU1RfRklMRVNfRElSRUNUT1JZKVwiIiBcCi0JLURHU1RfQ0hFQ0tfVEVTVF9FTlZJUk9OTUVOVF9CRUFDT049IlwiR1NUX1BMVUdJTl9MT0FESU5HX1dISVRFTElTVFwiIiBcCi0JLVVHX0RJU0FCTEVfQVNTRVJUIC1VR19ESVNBQkxFX0NBU1RfQ0hFQ0tTICQoUFRIUkVBRF9DRkxBR1MpCi1MREFERCA9ICQoR1NUX09CSl9MSUJTKSAkKEdTVF9DSEVDS19MSUJTKSAkKENIRUNLX0xJQlMpCi0KLSMgdmFsZ3JpbmQgdGVzdGluZwotIyB2aWRlb2Nyb3AgZGlzYWJsZWQgc2luY2UgaXQgdGFrZXMgd2F5IHRvbyBsb25nIGluIHZhbGdyaW5kCi1WQUxHUklORF9URVNUU19ESVNBQkxFID0gXAotCWVsZW1lbnRzL3ZpZGVvY3JvcCBcCi0JJChWQUxHUklORF9UT19GSVgpCi0KLVNVUFBSRVNTSU9OUyA9ICQodG9wX3NyY2RpcikvY29tbW9uL2dzdC5zdXBwICQoc3JjZGlyKS9nc3QtcGx1Z2lucy1nb29kLnN1cHAKLQotIyBwYXJzZXIgdW5pdCB0ZXN0IGNvbnZlbmllbmNlIGxpYgotbm9pbnN0X0xUTElCUkFSSUVTID0gbGlicGFyc2VyLmxhCi1saWJwYXJzZXJfbGFfU09VUkNFUyA9IGVsZW1lbnRzL3BhcnNlci5jIGVsZW1lbnRzL3BhcnNlci5oCi1saWJwYXJzZXJfbGFfQ0ZMQUdTID0gXAotCS1JJCh0b3Bfc3JjZGlyKS90ZXN0cy9jaGVjayBcCi0JJChHU1RfQ0hFQ0tfQ0ZMQUdTKSAkKEdTVF9PUFRJT05fQ0ZMQUdTKSAtREdTVF9VU0VfVU5TVEFCTEVfQVBJCi0KLWVsZW1lbnRzX2FhY3BhcnNlX0xEQUREID0gbGlicGFyc2VyLmxhICQoTERBREQpCi0KLWVsZW1lbnRzX2FjM3BhcnNlX0xEQUREID0gbGlicGFyc2VyLmxhICQoTERBREQpCi0KLWVsZW1lbnRzX2FtcnBhcnNlX0xEQUREID0gbGlicGFyc2VyLmxhICQoTERBREQpCi0KLWVsZW1lbnRzX2ZsYWNwYXJzZV9MREFERCA9IGxpYnBhcnNlci5sYSAkKExEQUREKQotCi1lbGVtZW50c19mbHZkZW11eF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19mbHZkZW11eF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHRhZy0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfbXBlZ2F1ZGlvcGFyc2VfTERBREQgPSBsaWJwYXJzZXIubGEgJChMREFERCkKLQotZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi0KLWVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb2FtcGxpZnlfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfYXVkaW9jaGViYmFuZF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb2NoZWJiYW5kX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi0KLWVsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi0KLWVsZW1lbnRzX2F1ZGlvZHluYW1pY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb2R5bmFtaWNfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfYXVkaW9lY2hvX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvZWNob19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1lbGVtZW50c19hdWRpb2ludmVydF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb2ludmVydF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1lbGVtZW50c19hdWRpb3Bhbm9yYW1hX0xEQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpIFwKLQkkKEdTVF9DT05UUk9MTEVSX0xJQlMpICQoTERBREQpCi0KLWVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DT05UUk9MTEVSX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLQotZWxlbWVudHNfYXVkaW93c2luY2JhbmRfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfYXVkaW93c2luY2JhbmRfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1lbGVtZW50c19hdXRvZGV0ZWN0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdXRvZGV0ZWN0X0xEQUREID0gJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19lcXVhbGl6ZXJfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfZXF1YWxpemVyX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi0KLWVsZW1lbnRzX3JnYW5hbHlzaXNfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcmdhbmFseXNpc19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfcmdsaW1pdGVyX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3JnbGltaXRlcl9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfcmd2b2x1bWVfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcmd2b2x1bWVfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfc3BlY3RydW1fQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfc3BlY3RydW1fTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfYWxwaGFjb2xvcl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hbHBoYV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi0KLWVsZW1lbnRzX2RlaW50ZXJsYWNlX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2RlaW50ZXJsYWNlX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi0KLWVsZW1lbnRzX2R0bWZfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfZHRtZl9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19kZWludGVybGVhdmVfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfZGVpbnRlcmxlYXZlX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19pbnRlcmxlYXZlX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2ludGVybGVhdmVfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfbGV2ZWxfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfbGV2ZWxfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfaW1hZ2VmcmVlemVfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfaW1hZ2VmcmVlemVfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19qcGVnZGVjX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfanBlZ2RlY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGFwcC0kKEdTVF9BUElfVkVSU0lPTikgLWxnc3RwYnV0aWxzLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoR0lPX0xJQlMpICQoTERBREQpCi0KLWVsZW1lbnRzX2pwZWdlbmNfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfanBlZ2VuY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGFwcC0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19tYXRyb3NrYW11eF9MREFERCA9ICQoR1NUX0JBU0VfTElCUykgJChMREFERCkgJChMSUJNKQotCi1lbGVtZW50c19tdWxhd2RlY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotCi1lbGVtZW50c19tdWxhd2VuY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotCi1lbGVtZW50c19tdWx0aWZpbGVfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX211bHRpZmlsZV9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9MSUJTKSAkKExEQUREKSAkKExJQk0pCi0KLWVsZW1lbnRzX3F0bXV4X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19xdG11eF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotICAgICAgICAgICAgICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChHU1RfQ0hFQ0tfTElCUykKLQotZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgXAotCSQoV0FSTklOR19DRkxBR1MpICQoRVJST1JfQ0ZMQUdTKSAkKEdTVF9DSEVDS19DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLSAgICAgICAgICAgICAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgXAotICAgICAgICAgICAgICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChHU1RfQ0hFQ0tfTElCUykgJChMREFERCkKLWVsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9TT1VSQ0VTID0gZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMKLQotZWxlbWVudHNfcnRwaDI2MV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19ydHBoMjYxX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoTERBREQpCi0KLWVsZW1lbnRzX3J0cGgyNjNfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwaDI2M19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19ydHBtdXhfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwbXV4X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoTERBREQpCi0KLWVsZW1lbnRzX3NvdXBodHRwc3JjX0NGTEFHUyA9ICQoU09VUF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfc291cGh0dHBzcmNfTERBREQgPSAkKFNPVVBfTElCUykgJChMREFERCkKLQotZWxlbWVudHNfc3VuYXVkaW9fQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9DRkxBR1MpCi1lbGVtZW50c19zdW5hdWRpb19MREFERCA9IFwKLQkkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCSQoTERBREQpCi0KLWVsZW1lbnRzX3VkcHNyY19DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHSU9fQ0ZMQUdTKQotZWxlbWVudHNfdWRwc3JjX0xEQUREID0gJChMREFERCkgJChHSU9fTElCUykKLQotZWxlbWVudHNfdmlkZW9jcm9wX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX3ZpZGVvY3JvcF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotCi1lbGVtZW50c192aWRlb2ZpbHRlcl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c192aWRlb2ZpbHRlcl9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1lbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1lbGVtZW50c19ydHBydHhfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwcnR4X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1lbGVtZW50c19ydHBzZXNzaW9uX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3J0cHNlc3Npb25fTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgJChHU1RfTkVUX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdJT19MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19ydHBjb2xsaXNpb25fQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwY29sbGlzaW9uX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX05FVF9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChHSU9fTElCUykgJChMREFERCkKLQotZWxlbWVudHNfcnRwYXV4X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3J0cGF1eF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotIyBGSVhNRTogY29uZmlndXJlIHNob3VsZCBjaGVjayBmb3IgZ2RrLXBpeGJ1ZiBub3QgZ3RrCi0jIG9ubHkgbmVlZCB2aWRlby5oIGhlYWRlciwgbm90IHRoZSBsaWIKLWVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykgJChHREtfUElYQlVGX0NGTEFHUykKLWVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfTERBREQgPSBcCi0JJChMREFERCkgJChHREtfUElYQlVGX0xJQlMpCi0KLWVsZW1lbnRzX3ZpZGVvbWl4ZXJfTERBREQgPSAkKExEQUREKSAgJChHU1RfQkFTRV9MSUJTKQotZWxlbWVudHNfdmlkZW9taXhlcl9DRkxBR1MgPSAkKEdTVF9CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotCi1waXBlbGluZXNfZmxhY2RlY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1waXBlbGluZXNfZmxhY2RlY19MREFERCAgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotZWxlbWVudHNfdnA5ZW5jX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3ZwOWVuY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotCi1waXBlbGluZXNfd2F2ZW5jX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLXBpcGVsaW5lc193YXZlbmNfTERBREQgID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi0KLXBpcGVsaW5lc193YXZwYWNrX0xEQUREID0gJChMREFERCkgJChHU1RfQkFTRV9MSUJTKQotcGlwZWxpbmVzX3dhdnBhY2tfQ0ZMQUdTID0gJChHU1RfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLQotb3JjX2RlaW50ZXJsYWNlX0NGTEFHUyA9ICQoT1JDX0NGTEFHUykKLW9yY19kZWludGVybGFjZV9MREFERCA9ICQoT1JDX0xJQlMpIC1sb3JjLXRlc3QtMC40Ci1ub2Rpc3Rfb3JjX2RlaW50ZXJsYWNlX1NPVVJDRVMgPSBvcmMvZGVpbnRlcmxhY2UuYwotb3JjX3ZpZGVvbWl4ZXJfQ0ZMQUdTID0gJChPUkNfQ0ZMQUdTKQotb3JjX3ZpZGVvbWl4ZXJfTERBREQgPSAkKE9SQ19MSUJTKSAtbG9yYy10ZXN0LTAuNAotbm9kaXN0X29yY192aWRlb21peGVyX1NPVVJDRVMgPSBvcmMvdmlkZW9taXhlci5jCi1vcmNfdmlkZW9ib3hfQ0ZMQUdTID0gJChPUkNfQ0ZMQUdTKQotb3JjX3ZpZGVvYm94X0xEQUREID0gJChPUkNfTElCUykgLWxvcmMtdGVzdC0wLjQKLW5vZGlzdF9vcmNfdmlkZW9ib3hfU09VUkNFUyA9IG9yYy92aWRlb2JveC5jCi0KLW9yYy9kZWludGVybGFjZS5jOiAkKHRvcF9zcmNkaXIpL2dzdC9kZWludGVybGFjZS90dnRpbWUub3JjCi0JJChNS0RJUl9QKSBvcmMvCi0JJChPUkNDKSAtLXRlc3QgLW8gJEAgJDwKLQotb3JjL3ZpZGVvbWl4ZXIuYzogJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9taXhlci92aWRlb21peGVyb3JjLm9yYwotCSQoTUtESVJfUCkgb3JjLwotCSQoT1JDQykgLS10ZXN0IC1vICRAICQ8Ci0KLW9yYy92aWRlb2JveC5jOiAkKHRvcF9zcmNkaXIpL2dzdC92aWRlb2JveC9nc3R2aWRlb2JveG9yYy5vcmMKLQkkKE1LRElSX1ApIG9yYy8KLQkkKE9SQ0MpIC0tdGVzdCAtbyAkQCAkPAotCi1kaXN0Y2xlYW4tbG9jYWwtb3JjOgotCXJtIC1yZiBvcmMKLQotRVhUUkFfRElTVCA9IFwKLQlnc3QtcGx1Z2lucy1nb29kLnN1cHAJXAotCWVsZW1lbnRzL3F0ZGVtdXguaApkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svTWFrZWZpbGUuaW4gYi90ZXN0cy9jaGVjay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjYzk5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ3NTQgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLWNoZWNrX1BST0dSQU1TID0gZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCkgXAotCXBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzJChFWEVFWFQpIFwKLQlwaXBlbGluZXMvdGFnc2NoZWNraW5nJChFWEVFWFQpICQoYW1fX0VYRUVYVF8xKSBcCi0JJChhbV9fRVhFRVhUXzIpICQoYW1fX0VYRUVYVF8zKSAkKGFtX19FWEVFWFRfNCkgXAotCSQoYW1fX0VYRUVYVF81KSAkKGFtX19FWEVFWFRfNikgJChhbV9fRVhFRVhUXzcpIFwKLQkkKGFtX19FWEVFWFRfOCkgJChhbV9fRVhFRVhUXzkpICQoYW1fX0VYRUVYVF8xMCkgXAotCSQoYW1fX0VYRUVYVF8xMSkgJChhbV9fRVhFRVhUXzEyKSAkKGFtX19FWEVFWFRfMTMpIFwKLQkkKGFtX19FWEVFWFRfMTQpICQoYW1fX0VYRUVYVF8xNSkgJChhbV9fRVhFRVhUXzE2KSBcCi0JJChhbV9fRVhFRVhUXzE3KSAkKGFtX19FWEVFWFRfMTgpICQoYW1fX0VYRUVYVF8xOSkgXAotCSQoYW1fX0VYRUVYVF8yMCkgJChhbV9fRVhFRVhUXzIxKSAkKGFtX19FWEVFWFRfMjIpIFwKLQkkKGFtX19FWEVFWFRfMjMpICQoYW1fX0VYRUVYVF8yNCkgJChhbV9fRVhFRVhUXzI1KSBcCi0JJChhbV9fRVhFRVhUXzI2KSAkKGFtX19FWEVFWFRfMjcpICQoYW1fX0VYRUVYVF8yOCkgXAotCSQoYW1fX0VYRUVYVF8yOSkgJChhbV9fRVhFRVhUXzMwKSAkKGFtX19FWEVFWFRfMzEpIFwKLQkkKGFtX19FWEVFWFRfMzIpICQoYW1fX0VYRUVYVF8zMykgJChhbV9fRVhFRVhUXzM0KSBcCi0JJChhbV9fRVhFRVhUXzM1KSAkKGFtX19FWEVFWFRfMzYpICQoYW1fX0VYRUVYVF8zNykgXAotCSQoYW1fX0VYRUVYVF8zOCkgJChhbV9fRVhFRVhUXzM5KSAkKGFtX19FWEVFWFRfNDApIFwKLQkkKGFtX19FWEVFWFRfNDEpICQoYW1fX0VYRUVYVF80MikKLXN1YmRpciA9IHRlc3RzL2NoZWNrCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1MVExJQlJBUklFUyA9ICQobm9pbnN0X0xUTElCUkFSSUVTKQotbGlicGFyc2VyX2xhX0xJQkFERCA9Ci1hbV9fZGlyc3RhbXAgPSAkKGFtX19sZWFkaW5nX2RvdClkaXJzdGFtcAotYW1fbGlicGFyc2VyX2xhX09CSkVDVFMgPSBlbGVtZW50cy9saWJwYXJzZXJfbGEtcGFyc2VyLmxvCi1saWJwYXJzZXJfbGFfT0JKRUNUUyA9ICQoYW1fbGlicGFyc2VyX2xhX09CSkVDVFMpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1saWJwYXJzZXJfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQobGlicGFyc2VyX2xhX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUBVU0VfUExVR0lOX0FMUEhBX1RSVUVAYW1fX0VYRUVYVF8xID0gZWxlbWVudHMvYWxwaGFjb2xvciQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BTFBIQV9UUlVFQAllbGVtZW50cy9hbHBoYSQoRVhFRVhUKQotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQGFtX19FWEVFWFRfMiA9ICBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvYW1wbGlmeSQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvY2hlYmJhbmQkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQAllbGVtZW50cy9hdWRpb2NoZWJsaW1pdCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvZHluYW1pYyQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvZWNobyQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX0FVRElPRlhfVFJVRUAJZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQAllbGVtZW50cy9hdWRpb2ludmVydCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvcGFub3JhbWEkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQAllbGVtZW50cy9hdWRpb3dzaW5jYmFuZCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdCQoRVhFRVhUKQotQFVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX1RSVUVAYW1fX0VYRUVYVF8zID0gIFwKLUBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFQAllbGVtZW50cy9hYWNwYXJzZSQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9BVURJT1BBUlNFUlNfVFJVRUAJZWxlbWVudHMvYWMzcGFyc2UkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX1RSVUVACWVsZW1lbnRzL2FtcnBhcnNlJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFQAllbGVtZW50cy9mbGFjcGFyc2UkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX1RSVUVACWVsZW1lbnRzL21wZWdhdWRpb3BhcnNlJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFQAllbGVtZW50cy93YXZwYWNrcGFyc2UkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0FVVE9ERVRFQ1RfVFJVRUBhbV9fRVhFRVhUXzQgPSAgXAotQFVTRV9QTFVHSU5fQVVUT0RFVEVDVF9UUlVFQAllbGVtZW50cy9hdXRvZGV0ZWN0JChFWEVFWFQpCi1AVVNFX1BMVUdJTl9BVklfVFJVRUBhbV9fRVhFRVhUXzUgPSBlbGVtZW50cy9hdmltdXgkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fQVZJX1RSVUVACWVsZW1lbnRzL2F2aXN1YnRpdGxlJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9ERUJVR1VUSUxTX1RSVUVAYW1fX0VYRUVYVF82ID0gIFwKLUBVU0VfUExVR0lOX0RFQlVHVVRJTFNfVFJVRUAJZWxlbWVudHMvY2Fwc3NldHRlciQoRVhFRVhUKQotQFVTRV9QTFVHSU5fREVJTlRFUkxBQ0VfVFJVRUBhbV9fRVhFRVhUXzcgPSAgXAotQFVTRV9QTFVHSU5fREVJTlRFUkxBQ0VfVFJVRUAJZWxlbWVudHMvZGVpbnRlcmxhY2UkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0RUTUZfVFJVRUBhbV9fRVhFRVhUXzggPSBlbGVtZW50cy9kdG1mJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9FRkZFQ1RWX1RSVUVAYW1fX0VYRUVYVF85ID0gcGlwZWxpbmVzL2VmZmVjdHYkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0VRVUFMSVpFUl9UUlVFQGFtX19FWEVFWFRfMTAgPSAgXAotQFVTRV9QTFVHSU5fRVFVQUxJWkVSX1RSVUVACWVsZW1lbnRzL2VxdWFsaXplciQoRVhFRVhUKQotQFVTRV9GTEFDX1RSVUVAYW1fX0VYRUVYVF8xMSA9IHBpcGVsaW5lcy9mbGFjZGVjJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9GTFZfVFJVRUBhbV9fRVhFRVhUXzEyID0gZWxlbWVudHMvZmx2ZGVtdXgkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fRkxWX1RSVUVACWVsZW1lbnRzL2Zsdm11eCQoRVhFRVhUKQotQFVTRV9HREtfUElYQlVGX1RSVUVAYW1fX0VYRUVYVF8xMyA9IGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmskKEVYRUVYVCkgXAotQFVTRV9HREtfUElYQlVGX1RSVUVACWVsZW1lbnRzL2dka3BpeGJ1Zm92ZXJsYXkkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0lTT01QNF9UUlVFQGFtX19FWEVFWFRfMTQgPSBlbGVtZW50cy9xdG11eCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9JU09NUDRfVFJVRUAJZWxlbWVudHMvcXRkZW11eCQoRVhFRVhUKQotQFVTRV9QTFVHSU5fSUNZREVNVVhfVFJVRUBhbV9fRVhFRVhUXzE1ID0gZWxlbWVudHMvaWN5ZGVtdXgkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0lEM0RFTVVYX1RSVUVAYW1fX0VYRUVYVF8xNiA9IGVsZW1lbnRzL2lkM2RlbXV4JChFWEVFWFQpCi1AVVNFX1BMVUdJTl9JTUFHRUZSRUVaRV9UUlVFQGFtX19FWEVFWFRfMTcgPSAgXAotQFVTRV9QTFVHSU5fSU1BR0VGUkVFWkVfVFJVRUAJZWxlbWVudHMvaW1hZ2VmcmVlemUkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRUBhbV9fRVhFRVhUXzE4ID0gIFwKLUBVU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRUAJZWxlbWVudHMvZGVpbnRlcmxlYXZlJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRUAJZWxlbWVudHMvaW50ZXJsZWF2ZSQoRVhFRVhUKQotQFVTRV9KUEVHX1RSVUVAYW1fX0VYRUVYVF8xOSA9IGVsZW1lbnRzL2pwZWdkZWMkKEVYRUVYVCkgXAotQFVTRV9KUEVHX1RSVUVACWVsZW1lbnRzL2pwZWdlbmMkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0xBV19UUlVFQGFtX19FWEVFWFRfMjAgPSBlbGVtZW50cy9tdWxhd2RlYyQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9MQVdfVFJVRUAJZWxlbWVudHMvbXVsYXdlbmMkKEVYRUVYVCkKLUBVU0VfUExVR0lOX0xFVkVMX1RSVUVAYW1fX0VYRUVYVF8yMSA9IGVsZW1lbnRzL2xldmVsJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFQGFtX19FWEVFWFRfMjIgPSAgXAotQFVTRV9QTFVHSU5fTUFUUk9TS0FfVFJVRUAJZWxlbWVudHMvbWF0cm9za2FkZW11eCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFQAllbGVtZW50cy9tYXRyb3NrYW11eCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFQAllbGVtZW50cy9tYXRyb3NrYXBhcnNlJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9NVUxUSUZJTEVfVFJVRUBhbV9fRVhFRVhUXzIzID0gIFwKLUBVU0VfUExVR0lOX01VTFRJRklMRV9UUlVFQAllbGVtZW50cy9tdWx0aWZpbGUkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fTVVMVElGSUxFX1RSVUVACWVsZW1lbnRzL3NwbGl0bXV4JChFWEVFWFQpCi1AVVNFX1BMVUdJTl9SRVBMQVlHQUlOX1RSVUVAYW1fX0VYRUVYVF8yNCA9ICBcCi1AVVNFX1BMVUdJTl9SRVBMQVlHQUlOX1RSVUVACWVsZW1lbnRzL3JnYW5hbHlzaXMkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fUkVQTEFZR0FJTl9UUlVFQAllbGVtZW50cy9yZ2xpbWl0ZXIkKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fUkVQTEFZR0FJTl9UUlVFQAllbGVtZW50cy9yZ3ZvbHVtZSQoRVhFRVhUKQotQFVTRV9QTFVHSU5fUlRQX1RSVUVAYW1fX0VYRUVYVF8yNSA9IGVsZW1lbnRzL3J0cC1wYXlsb2FkaW5nJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUF9UUlVFQAllbGVtZW50cy9ydHBoMjYxJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUF9UUlVFQAllbGVtZW50cy9ydHBoMjYzJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUF9UUlVFQAllbGVtZW50cy9ydHB2cDkkKEVYRUVYVCkKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUBhbV9fRVhFRVhUXzI2ID0gZWxlbWVudHMvcnRwYXV4JChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwYmluJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0JChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwY29sbGlzaW9uJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyJChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwbXV4JChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwcnR4JChFWEVFWFQpIFwKLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfVFJVRUAJZWxlbWVudHMvcnRwc2Vzc2lvbiQoRVhFRVhUKQotQFVTRV9QTFVHSU5fU0hBUEVXSVBFX1RSVUVAYW1fX0VYRUVYVF8yNyA9ICBcCi1AVVNFX1BMVUdJTl9TSEFQRVdJUEVfVFJVRUAJZWxlbWVudHMvc2hhcGV3aXBlJChFWEVFWFQpCi1AVVNFX1NPVVBfVFJVRUBhbV9fRVhFRVhUXzI4ID0gZWxlbWVudHMvc291cGh0dHBzcmMkKEVYRUVYVCkKLUBVU0VfUExVR0lOX1NQRUNUUlVNX1RSVUVAYW1fX0VYRUVYVF8yOSA9IGVsZW1lbnRzL3NwZWN0cnVtJChFWEVFWFQpCi1AVVNFX1NVTkFVRElPX1RSVUVAYW1fX0VYRUVYVF8zMCA9IGVsZW1lbnRzL3N1bmF1ZGlvJChFWEVFWFQpCi1AVVNFX1RBR0xJQl9UUlVFQGFtX19FWEVFWFRfMzEgPSBlbGVtZW50cy9pZDN2Mm11eCQoRVhFRVhUKSBcCi1AVVNFX1RBR0xJQl9UUlVFQAllbGVtZW50cy9hcGV2Mm11eCQoRVhFRVhUKQotQFVTRV9QTFVHSU5fVURQX1RSVUVAYW1fX0VYRUVYVF8zMiA9IGVsZW1lbnRzL3VkcHNpbmskKEVYRUVYVCkgXAotQFVTRV9QTFVHSU5fVURQX1RSVUVACWVsZW1lbnRzL3VkcHNyYyQoRVhFRVhUKQotQFVTRV9QTFVHSU5fVklERU9CT1hfVFJVRUBhbV9fRVhFRVhUXzMzID0gZWxlbWVudHMvdmlkZW9ib3gkKEVYRUVYVCkKLUBVU0VfUExVR0lOX1ZJREVPQ1JPUF9UUlVFQGFtX19FWEVFWFRfMzQgPSAgXAotQFVTRV9QTFVHSU5fVklERU9DUk9QX1RSVUVACWVsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcCQoRVhFRVhUKSBcCi1AVVNFX1BMVUdJTl9WSURFT0NST1BfVFJVRUAJZWxlbWVudHMvdmlkZW9jcm9wJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9WSURFT0ZJTFRFUl9UUlVFQGFtX19FWEVFWFRfMzUgPSAgXAotQFVTRV9QTFVHSU5fVklERU9GSUxURVJfVFJVRUAJZWxlbWVudHMvdmlkZW9maWx0ZXIkKEVYRUVYVCkKLUBVU0VfUExVR0lOX1ZJREVPTUlYRVJfVFJVRUBhbV9fRVhFRVhUXzM2ID0gIFwKLUBVU0VfUExVR0lOX1ZJREVPTUlYRVJfVFJVRUAJZWxlbWVudHMvdmlkZW9taXhlciQoRVhFRVhUKQotQFVTRV9WUFhfVFJVRUBhbV9fRVhFRVhUXzM3ID0gZWxlbWVudHMvdnA4ZW5jJChFWEVFWFQpIFwKLUBVU0VfVlBYX1RSVUVACWVsZW1lbnRzL3ZwOGRlYyQoRVhFRVhUKSBcCi1AVVNFX1ZQWF9UUlVFQAllbGVtZW50cy92cDllbmMkKEVYRUVYVCkKLUBVU0VfUExVR0lOX1dBVkVOQ19UUlVFQGFtX19FWEVFWFRfMzggPSBwaXBlbGluZXMvd2F2ZW5jJChFWEVFWFQpCi1AVVNFX1dBVlBBQ0tfVFJVRUBhbV9fRVhFRVhUXzM5ID0gZWxlbWVudHMvd2F2cGFja2RlYyQoRVhFRVhUKSBcCi1AVVNFX1dBVlBBQ0tfVFJVRUAJZWxlbWVudHMvd2F2cGFja2VuYyQoRVhFRVhUKSBcCi1AVVNFX1dBVlBBQ0tfVFJVRUAJcGlwZWxpbmVzL3dhdnBhY2skKEVYRUVYVCkKLUBVU0VfUExVR0lOX1dBVlBBUlNFX1RSVUVAYW1fX0VYRUVYVF80MCA9IGVsZW1lbnRzL3dhdnBhcnNlJChFWEVFWFQpCi1AVVNFX1BMVUdJTl9ZNE1fVFJVRUBhbV9fRVhFRVhUXzQxID0gZWxlbWVudHMveTRtZW5jJChFWEVFWFQpCi1ASEFWRV9PUkNfVFJVRUBhbV9fRVhFRVhUXzQyID0gb3JjL2RlaW50ZXJsYWNlJChFWEVFWFQpIFwKLUBIQVZFX09SQ19UUlVFQAlvcmMvdmlkZW9taXhlciQoRVhFRVhUKSBvcmMvdmlkZW9ib3gkKEVYRUVYVCkKLWVsZW1lbnRzX2FhY3BhcnNlX1NPVVJDRVMgPSBlbGVtZW50cy9hYWNwYXJzZS5jCi1lbGVtZW50c19hYWNwYXJzZV9PQkpFQ1RTID0gZWxlbWVudHMvYWFjcGFyc2UuJChPQkpFWFQpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotYW1fX0RFUEVOREVOQ0lFU18yID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19hYWNwYXJzZV9ERVBFTkRFTkNJRVMgPSBsaWJwYXJzZXIubGEgJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19hYzNwYXJzZV9TT1VSQ0VTID0gZWxlbWVudHMvYWMzcGFyc2UuYwotZWxlbWVudHNfYWMzcGFyc2VfT0JKRUNUUyA9IGVsZW1lbnRzL2FjM3BhcnNlLiQoT0JKRVhUKQotZWxlbWVudHNfYWMzcGFyc2VfREVQRU5ERU5DSUVTID0gbGlicGFyc2VyLmxhICQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYWxwaGFfU09VUkNFUyA9IGVsZW1lbnRzL2FscGhhLmMKLWVsZW1lbnRzX2FscGhhX09CSkVDVFMgPSBlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS4kKE9CSkVYVCkKLWVsZW1lbnRzX2FscGhhX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2FscGhhX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfYWxwaGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2FscGhhX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCi0JJEAKLWVsZW1lbnRzX2FscGhhY29sb3JfU09VUkNFUyA9IGVsZW1lbnRzL2FscGhhY29sb3IuYwotZWxlbWVudHNfYWxwaGFjb2xvcl9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3IuJChPQkpFWFQpCi1lbGVtZW50c19hbHBoYWNvbG9yX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2FscGhhY29sb3JfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19hbHBoYWNvbG9yX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19hbHBoYWNvbG9yX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2FtcnBhcnNlX1NPVVJDRVMgPSBlbGVtZW50cy9hbXJwYXJzZS5jCi1lbGVtZW50c19hbXJwYXJzZV9PQkpFQ1RTID0gZWxlbWVudHMvYW1ycGFyc2UuJChPQkpFWFQpCi1lbGVtZW50c19hbXJwYXJzZV9ERVBFTkRFTkNJRVMgPSBsaWJwYXJzZXIubGEgJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19hcGV2Mm11eF9TT1VSQ0VTID0gZWxlbWVudHMvYXBldjJtdXguYwotZWxlbWVudHNfYXBldjJtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL2FwZXYybXV4LiQoT0JKRVhUKQotZWxlbWVudHNfYXBldjJtdXhfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfYXBldjJtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfU09VUkNFUyA9IGVsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jCi1lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wLWFzcGVjdHJhdGlvY3JvcC4kKE9CSkVYVCkKLWVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9TT1VSQ0VTID0gZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMKLWVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5LiQoT0JKRVhUKQotZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19hdWRpb2FtcGxpZnlfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdWRpb2NoZWJiYW5kX1NPVVJDRVMgPSBlbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMKLWVsZW1lbnRzX2F1ZGlvY2hlYmJhbmRfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXVkaW9jaGViYmFuZC1hdWRpb2NoZWJiYW5kLiQoT0JKRVhUKQotZWxlbWVudHNfYXVkaW9jaGViYmFuZF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYXVkaW9jaGViYmFuZF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfYXVkaW9jaGViYmFuZF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdWRpb2NoZWJsaW1pdF9TT1VSQ0VTID0gZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYwotZWxlbWVudHNfYXVkaW9jaGVibGltaXRfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXVkaW9jaGVibGltaXQtYXVkaW9jaGVibGltaXQuJChPQkpFWFQpCi1lbGVtZW50c19hdWRpb2NoZWJsaW1pdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYXVkaW9jaGVibGltaXRfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2F1ZGlvZHluYW1pY19TT1VSQ0VTID0gZWxlbWVudHMvYXVkaW9keW5hbWljLmMKLWVsZW1lbnRzX2F1ZGlvZHluYW1pY19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLiQoT0JKRVhUKQotZWxlbWVudHNfYXVkaW9keW5hbWljX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19hdWRpb2R5bmFtaWNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2F1ZGlvZHluYW1pY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdWRpb2VjaG9fU09VUkNFUyA9IGVsZW1lbnRzL2F1ZGlvZWNoby5jCi1lbGVtZW50c19hdWRpb2VjaG9fT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby4kKE9CSkVYVCkKLWVsZW1lbnRzX2F1ZGlvZWNob19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYXVkaW9lY2hvX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19hdWRpb2VjaG9fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfYXVkaW9maXJmaWx0ZXJfU09VUkNFUyA9IGVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyLmMKLWVsZW1lbnRzX2F1ZGlvZmlyZmlsdGVyX09CSkVDVFMgPSBlbGVtZW50cy9hdWRpb2ZpcmZpbHRlci4kKE9CSkVYVCkKLWVsZW1lbnRzX2F1ZGlvZmlyZmlsdGVyX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2F1ZGlvZmlyZmlsdGVyX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfYXVkaW9paXJmaWx0ZXJfU09VUkNFUyA9IGVsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmMKLWVsZW1lbnRzX2F1ZGlvaWlyZmlsdGVyX09CSkVDVFMgPSBlbGVtZW50cy9hdWRpb2lpcmZpbHRlci4kKE9CSkVYVCkKLWVsZW1lbnRzX2F1ZGlvaWlyZmlsdGVyX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2F1ZGlvaWlyZmlsdGVyX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfYXVkaW9pbnZlcnRfU09VUkNFUyA9IGVsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMKLWVsZW1lbnRzX2F1ZGlvaW52ZXJ0X09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvaW52ZXJ0LWF1ZGlvaW52ZXJ0LiQoT0JKRVhUKQotZWxlbWVudHNfYXVkaW9pbnZlcnRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX2F1ZGlvaW52ZXJ0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19hdWRpb2ludmVydF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdWRpb3Bhbm9yYW1hX1NPVVJDRVMgPSBlbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMKLWVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLiQoT0JKRVhUKQotZWxlbWVudHNfYXVkaW9wYW5vcmFtYV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYXVkaW9wYW5vcmFtYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfYXVkaW9wYW5vcmFtYV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdWRpb3dzaW5jYmFuZF9TT1VSQ0VTID0gZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYwotZWxlbWVudHNfYXVkaW93c2luY2JhbmRfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQuJChPQkpFWFQpCi1lbGVtZW50c19hdWRpb3dzaW5jYmFuZF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYXVkaW93c2luY2JhbmRfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9TT1VSQ0VTID0gZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMKLWVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19hdWRpb3dzaW5jbGltaXQtYXVkaW93c2luY2xpbWl0LiQoT0JKRVhUKQotZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19hdWRpb3dzaW5jbGltaXRfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdXRvZGV0ZWN0X1NPVVJDRVMgPSBlbGVtZW50cy9hdXRvZGV0ZWN0LmMKLWVsZW1lbnRzX2F1dG9kZXRlY3RfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0LiQoT0JKRVhUKQotZWxlbWVudHNfYXV0b2RldGVjdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfYXV0b2RldGVjdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfYXV0b2RldGVjdF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19hdmltdXhfU09VUkNFUyA9IGVsZW1lbnRzL2F2aW11eC5jCi1lbGVtZW50c19hdmltdXhfT0JKRUNUUyA9IGVsZW1lbnRzL2F2aW11eC4kKE9CSkVYVCkKLWVsZW1lbnRzX2F2aW11eF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19hdmltdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19hdmlzdWJ0aXRsZV9TT1VSQ0VTID0gZWxlbWVudHMvYXZpc3VidGl0bGUuYwotZWxlbWVudHNfYXZpc3VidGl0bGVfT0JKRUNUUyA9IGVsZW1lbnRzL2F2aXN1YnRpdGxlLiQoT0JKRVhUKQotZWxlbWVudHNfYXZpc3VidGl0bGVfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfYXZpc3VidGl0bGVfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19jYXBzc2V0dGVyX1NPVVJDRVMgPSBlbGVtZW50cy9jYXBzc2V0dGVyLmMKLWVsZW1lbnRzX2NhcHNzZXR0ZXJfT0JKRUNUUyA9IGVsZW1lbnRzL2NhcHNzZXR0ZXIuJChPQkpFWFQpCi1lbGVtZW50c19jYXBzc2V0dGVyX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX2NhcHNzZXR0ZXJfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19kZWludGVybGFjZV9TT1VSQ0VTID0gZWxlbWVudHMvZGVpbnRlcmxhY2UuYwotZWxlbWVudHNfZGVpbnRlcmxhY2VfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuJChPQkpFWFQpCi1lbGVtZW50c19kZWludGVybGFjZV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfZGVpbnRlcmxhY2VfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2RlaW50ZXJsYWNlX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2RlaW50ZXJsZWF2ZV9TT1VSQ0VTID0gZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMKLWVsZW1lbnRzX2RlaW50ZXJsZWF2ZV9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19kZWludGVybGVhdmUtZGVpbnRlcmxlYXZlLiQoT0JKRVhUKQotZWxlbWVudHNfZGVpbnRlcmxlYXZlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19kZWludGVybGVhdmVfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2RlaW50ZXJsZWF2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19kdG1mX1NPVVJDRVMgPSBlbGVtZW50cy9kdG1mLmMKLWVsZW1lbnRzX2R0bWZfT0JKRUNUUyA9IGVsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi4kKE9CSkVYVCkKLWVsZW1lbnRzX2R0bWZfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX2R0bWZfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoZWxlbWVudHNfZHRtZl9DRkxBR1MpIFwKLQkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19lcXVhbGl6ZXJfU09VUkNFUyA9IGVsZW1lbnRzL2VxdWFsaXplci5jCi1lbGVtZW50c19lcXVhbGl6ZXJfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci4kKE9CSkVYVCkKLWVsZW1lbnRzX2VxdWFsaXplcl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfZXF1YWxpemVyX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19lcXVhbGl6ZXJfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfZmxhY3BhcnNlX1NPVVJDRVMgPSBlbGVtZW50cy9mbGFjcGFyc2UuYwotZWxlbWVudHNfZmxhY3BhcnNlX09CSkVDVFMgPSBlbGVtZW50cy9mbGFjcGFyc2UuJChPQkpFWFQpCi1lbGVtZW50c19mbGFjcGFyc2VfREVQRU5ERU5DSUVTID0gbGlicGFyc2VyLmxhICQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfZmx2ZGVtdXhfU09VUkNFUyA9IGVsZW1lbnRzL2ZsdmRlbXV4LmMKLWVsZW1lbnRzX2ZsdmRlbXV4X09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX2ZsdmRlbXV4LWZsdmRlbXV4LiQoT0JKRVhUKQotZWxlbWVudHNfZmx2ZGVtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX2ZsdmRlbXV4X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19mbHZkZW11eF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c19mbHZtdXhfU09VUkNFUyA9IGVsZW1lbnRzL2Zsdm11eC5jCi1lbGVtZW50c19mbHZtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL2Zsdm11eC4kKE9CSkVYVCkKLWVsZW1lbnRzX2Zsdm11eF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19mbHZtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19nZGtwaXhidWZvdmVybGF5X1NPVVJDRVMgPSBlbGVtZW50cy9nZGtwaXhidWZvdmVybGF5LmMKLWVsZW1lbnRzX2dka3BpeGJ1Zm92ZXJsYXlfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheS4kKE9CSkVYVCkKLWVsZW1lbnRzX2dka3BpeGJ1Zm92ZXJsYXlfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfZ2RrcGl4YnVmb3ZlcmxheV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfU09VUkNFUyA9IGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYwotZWxlbWVudHNfZ2RrcGl4YnVmc2lua19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19nZGtwaXhidWZzaW5rLWdka3BpeGJ1ZnNpbmsuJChPQkpFWFQpCi1lbGVtZW50c19nZGtwaXhidWZzaW5rX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19nZGtwaXhidWZzaW5rX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19nZGtwaXhidWZzaW5rX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2ljeWRlbXV4X1NPVVJDRVMgPSBlbGVtZW50cy9pY3lkZW11eC5jCi1lbGVtZW50c19pY3lkZW11eF9PQkpFQ1RTID0gZWxlbWVudHMvaWN5ZGVtdXguJChPQkpFWFQpCi1lbGVtZW50c19pY3lkZW11eF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19pY3lkZW11eF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX2lkM2RlbXV4X1NPVVJDRVMgPSBlbGVtZW50cy9pZDNkZW11eC5jCi1lbGVtZW50c19pZDNkZW11eF9PQkpFQ1RTID0gZWxlbWVudHMvaWQzZGVtdXguJChPQkpFWFQpCi1lbGVtZW50c19pZDNkZW11eF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19pZDNkZW11eF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX2lkM3YybXV4X1NPVVJDRVMgPSBlbGVtZW50cy9pZDN2Mm11eC5jCi1lbGVtZW50c19pZDN2Mm11eF9PQkpFQ1RTID0gZWxlbWVudHMvaWQzdjJtdXguJChPQkpFWFQpCi1lbGVtZW50c19pZDN2Mm11eF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19pZDN2Mm11eF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX2ltYWdlZnJlZXplX1NPVVJDRVMgPSBlbGVtZW50cy9pbWFnZWZyZWV6ZS5jCi1lbGVtZW50c19pbWFnZWZyZWV6ZV9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19pbWFnZWZyZWV6ZS1pbWFnZWZyZWV6ZS4kKE9CSkVYVCkKLWVsZW1lbnRzX2ltYWdlZnJlZXplX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfaW1hZ2VmcmVlemVfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX2ltYWdlZnJlZXplX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2ludGVybGVhdmVfU09VUkNFUyA9IGVsZW1lbnRzL2ludGVybGVhdmUuYwotZWxlbWVudHNfaW50ZXJsZWF2ZV9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUuJChPQkpFWFQpCi1lbGVtZW50c19pbnRlcmxlYXZlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19pbnRlcmxlYXZlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19pbnRlcmxlYXZlX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX2pwZWdkZWNfU09VUkNFUyA9IGVsZW1lbnRzL2pwZWdkZWMuYwotZWxlbWVudHNfanBlZ2RlY19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMuJChPQkpFWFQpCi1lbGVtZW50c19qcGVnZGVjX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19qcGVnZGVjX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19qcGVnZGVjX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWVsZW1lbnRzX2pwZWdlbmNfU09VUkNFUyA9IGVsZW1lbnRzL2pwZWdlbmMuYwotZWxlbWVudHNfanBlZ2VuY19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19qcGVnZW5jLWpwZWdlbmMuJChPQkpFWFQpCi1lbGVtZW50c19qcGVnZW5jX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfanBlZ2VuY19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfanBlZ2VuY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c19sZXZlbF9TT1VSQ0VTID0gZWxlbWVudHMvbGV2ZWwuYwotZWxlbWVudHNfbGV2ZWxfT0JKRUNUUyA9IGVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLiQoT0JKRVhUKQotZWxlbWVudHNfbGV2ZWxfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX2xldmVsX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19sZXZlbF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gXAotCSRACi1lbGVtZW50c19tYXRyb3NrYWRlbXV4X1NPVVJDRVMgPSBlbGVtZW50cy9tYXRyb3NrYWRlbXV4LmMKLWVsZW1lbnRzX21hdHJvc2thZGVtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL21hdHJvc2thZGVtdXguJChPQkpFWFQpCi1lbGVtZW50c19tYXRyb3NrYWRlbXV4X0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX21hdHJvc2thZGVtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19tYXRyb3NrYW11eF9TT1VSQ0VTID0gZWxlbWVudHMvbWF0cm9za2FtdXguYwotZWxlbWVudHNfbWF0cm9za2FtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL21hdHJvc2thbXV4LiQoT0JKRVhUKQotZWxlbWVudHNfbWF0cm9za2FtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19tYXRyb3NrYXBhcnNlX1NPVVJDRVMgPSBlbGVtZW50cy9tYXRyb3NrYXBhcnNlLmMKLWVsZW1lbnRzX21hdHJvc2thcGFyc2VfT0JKRUNUUyA9IGVsZW1lbnRzL21hdHJvc2thcGFyc2UuJChPQkpFWFQpCi1lbGVtZW50c19tYXRyb3NrYXBhcnNlX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX21hdHJvc2thcGFyc2VfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19tcGVnYXVkaW9wYXJzZV9TT1VSQ0VTID0gZWxlbWVudHMvbXBlZ2F1ZGlvcGFyc2UuYwotZWxlbWVudHNfbXBlZ2F1ZGlvcGFyc2VfT0JKRUNUUyA9IGVsZW1lbnRzL21wZWdhdWRpb3BhcnNlLiQoT0JKRVhUKQotZWxlbWVudHNfbXBlZ2F1ZGlvcGFyc2VfREVQRU5ERU5DSUVTID0gbGlicGFyc2VyLmxhIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX211bGF3ZGVjX1NPVVJDRVMgPSBlbGVtZW50cy9tdWxhd2RlYy5jCi1lbGVtZW50c19tdWxhd2RlY19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19tdWxhd2RlYy1tdWxhd2RlYy4kKE9CSkVYVCkKLWVsZW1lbnRzX211bGF3ZGVjX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX211bGF3ZGVjX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfbXVsYXdkZWNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX211bGF3ZGVjX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWVsZW1lbnRzX211bGF3ZW5jX1NPVVJDRVMgPSBlbGVtZW50cy9tdWxhd2VuYy5jCi1lbGVtZW50c19tdWxhd2VuY19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19tdWxhd2VuYy1tdWxhd2VuYy4kKE9CSkVYVCkKLWVsZW1lbnRzX211bGF3ZW5jX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX211bGF3ZW5jX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfbXVsYXdlbmNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX211bGF3ZW5jX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWVsZW1lbnRzX211bHRpZmlsZV9TT1VSQ0VTID0gZWxlbWVudHMvbXVsdGlmaWxlLmMKLWVsZW1lbnRzX211bHRpZmlsZV9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19tdWx0aWZpbGUtbXVsdGlmaWxlLiQoT0JKRVhUKQotZWxlbWVudHNfbXVsdGlmaWxlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18yKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19tdWx0aWZpbGVfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX211bHRpZmlsZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19xdGRlbXV4X1NPVVJDRVMgPSBlbGVtZW50cy9xdGRlbXV4LmMKLWVsZW1lbnRzX3F0ZGVtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL3F0ZGVtdXguJChPQkpFWFQpCi1lbGVtZW50c19xdGRlbXV4X0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3F0ZGVtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19xdG11eF9TT1VSQ0VTID0gZWxlbWVudHMvcXRtdXguYwotZWxlbWVudHNfcXRtdXhfT0JKRUNUUyA9IGVsZW1lbnRzL2VsZW1lbnRzX3F0bXV4LXF0bXV4LiQoT0JKRVhUKQotZWxlbWVudHNfcXRtdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX3F0bXV4X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19xdG11eF9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gXAotCSRACi1lbGVtZW50c19yZ2FuYWx5c2lzX1NPVVJDRVMgPSBlbGVtZW50cy9yZ2FuYWx5c2lzLmMKLWVsZW1lbnRzX3JnYW5hbHlzaXNfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLiQoT0JKRVhUKQotZWxlbWVudHNfcmdhbmFseXNpc19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfcmdhbmFseXNpc19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfcmdhbmFseXNpc19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19yZ2xpbWl0ZXJfU09VUkNFUyA9IGVsZW1lbnRzL3JnbGltaXRlci5jCi1lbGVtZW50c19yZ2xpbWl0ZXJfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci4kKE9CSkVYVCkKLWVsZW1lbnRzX3JnbGltaXRlcl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfcmdsaW1pdGVyX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19yZ2xpbWl0ZXJfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfcmd2b2x1bWVfU09VUkNFUyA9IGVsZW1lbnRzL3Jndm9sdW1lLmMKLWVsZW1lbnRzX3Jndm9sdW1lX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX3Jndm9sdW1lLXJndm9sdW1lLiQoT0JKRVhUKQotZWxlbWVudHNfcmd2b2x1bWVfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3Jndm9sdW1lX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19yZ3ZvbHVtZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c19ydHBfcGF5bG9hZGluZ19TT1VSQ0VTID0gZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYwotZWxlbWVudHNfcnRwX3BheWxvYWRpbmdfT0JKRUNUUyA9IGVsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLiQoT0JKRVhUKQotZWxlbWVudHNfcnRwX3BheWxvYWRpbmdfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfcnRwX3BheWxvYWRpbmdfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c19ydHBhdXhfU09VUkNFUyA9IGVsZW1lbnRzL3J0cGF1eC5jCi1lbGVtZW50c19ydHBhdXhfT0JKRUNUUyA9IGVsZW1lbnRzL2VsZW1lbnRzX3J0cGF1eC1ydHBhdXguJChPQkpFWFQpCi1lbGVtZW50c19ydHBhdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3J0cGF1eF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfcnRwYXV4X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWVsZW1lbnRzX3J0cGJpbl9TT1VSQ0VTID0gZWxlbWVudHMvcnRwYmluLmMKLWVsZW1lbnRzX3J0cGJpbl9PQkpFQ1RTID0gZWxlbWVudHMvcnRwYmluLiQoT0JKRVhUKQotZWxlbWVudHNfcnRwYmluX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3J0cGJpbl9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWFtX2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9PQkpFQ1RTID0gZWxlbWVudHMvZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0LXJ0cGJpbl9idWZmZXJfbGlzdC4kKE9CSkVYVCkKLWVsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9PQkpFQ1RTID0gIFwKLQkkKGFtX2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9PQkpFQ1RTKQotZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfcnRwY29sbGlzaW9uX1NPVVJDRVMgPSBlbGVtZW50cy9ydHBjb2xsaXNpb24uYwotZWxlbWVudHNfcnRwY29sbGlzaW9uX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24uJChPQkpFWFQpCi1lbGVtZW50c19ydHBjb2xsaXNpb25fREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3J0cGNvbGxpc2lvbl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfcnRwY29sbGlzaW9uX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX3J0cGgyNjFfU09VUkNFUyA9IGVsZW1lbnRzL3J0cGgyNjEuYwotZWxlbWVudHNfcnRwaDI2MV9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19ydHBoMjYxLXJ0cGgyNjEuJChPQkpFWFQpCi1lbGVtZW50c19ydHBoMjYxX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfcnRwaDI2MV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfcnRwaDI2MV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c19ydHBoMjYzX1NPVVJDRVMgPSBlbGVtZW50cy9ydHBoMjYzLmMKLWVsZW1lbnRzX3J0cGgyNjNfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfcnRwaDI2My1ydHBoMjYzLiQoT0JKRVhUKQotZWxlbWVudHNfcnRwaDI2M19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3J0cGgyNjNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX3J0cGgyNjNfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX1NPVVJDRVMgPSBlbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYwotZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIuJChPQkpFWFQpCi1lbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX3J0cG11eF9TT1VSQ0VTID0gZWxlbWVudHMvcnRwbXV4LmMKLWVsZW1lbnRzX3J0cG11eF9PQkpFQ1RTID0gZWxlbWVudHMvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC4kKE9CSkVYVCkKLWVsZW1lbnRzX3J0cG11eF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3J0cG11eF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfcnRwbXV4X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWVsZW1lbnRzX3J0cHJ0eF9TT1VSQ0VTID0gZWxlbWVudHMvcnRwcnR4LmMKLWVsZW1lbnRzX3J0cHJ0eF9PQkpFQ1RTID0gZWxlbWVudHMvZWxlbWVudHNfcnRwcnR4LXJ0cHJ0eC4kKE9CSkVYVCkKLWVsZW1lbnRzX3J0cHJ0eF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfcnRwcnR4X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19ydHBydHhfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotZWxlbWVudHNfcnRwc2Vzc2lvbl9TT1VSQ0VTID0gZWxlbWVudHMvcnRwc2Vzc2lvbi5jCi1lbGVtZW50c19ydHBzZXNzaW9uX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX3J0cHNlc3Npb24tcnRwc2Vzc2lvbi4kKE9CSkVYVCkKLWVsZW1lbnRzX3J0cHNlc3Npb25fREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3J0cHNlc3Npb25fTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX3J0cHNlc3Npb25fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfcnRwdnA5X1NPVVJDRVMgPSBlbGVtZW50cy9ydHB2cDkuYwotZWxlbWVudHNfcnRwdnA5X09CSkVDVFMgPSBlbGVtZW50cy9ydHB2cDkuJChPQkpFWFQpCi1lbGVtZW50c19ydHB2cDlfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfcnRwdnA5X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfc2hhcGV3aXBlX1NPVVJDRVMgPSBlbGVtZW50cy9zaGFwZXdpcGUuYwotZWxlbWVudHNfc2hhcGV3aXBlX09CSkVDVFMgPSBlbGVtZW50cy9zaGFwZXdpcGUuJChPQkpFWFQpCi1lbGVtZW50c19zaGFwZXdpcGVfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfc2hhcGV3aXBlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfc291cGh0dHBzcmNfU09VUkNFUyA9IGVsZW1lbnRzL3NvdXBodHRwc3JjLmMKLWVsZW1lbnRzX3NvdXBodHRwc3JjX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX3NvdXBodHRwc3JjLXNvdXBodHRwc3JjLiQoT0JKRVhUKQotZWxlbWVudHNfc291cGh0dHBzcmNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3NvdXBodHRwc3JjX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChlbGVtZW50c19zb3VwaHR0cHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1lbGVtZW50c19zcGVjdHJ1bV9TT1VSQ0VTID0gZWxlbWVudHMvc3BlY3RydW0uYwotZWxlbWVudHNfc3BlY3RydW1fT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0uJChPQkpFWFQpCi1lbGVtZW50c19zcGVjdHJ1bV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18yKQotZWxlbWVudHNfc3BlY3RydW1fTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX3NwZWN0cnVtX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWVsZW1lbnRzX3NwbGl0bXV4X1NPVVJDRVMgPSBlbGVtZW50cy9zcGxpdG11eC5jCi1lbGVtZW50c19zcGxpdG11eF9PQkpFQ1RTID0gZWxlbWVudHMvc3BsaXRtdXguJChPQkpFWFQpCi1lbGVtZW50c19zcGxpdG11eF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19zcGxpdG11eF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX3N1bmF1ZGlvX1NPVVJDRVMgPSBlbGVtZW50cy9zdW5hdWRpby5jCi1lbGVtZW50c19zdW5hdWRpb19PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c19zdW5hdWRpby1zdW5hdWRpby4kKE9CSkVYVCkKLWVsZW1lbnRzX3N1bmF1ZGlvX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c19zdW5hdWRpb19MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfc3VuYXVkaW9fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotZWxlbWVudHNfdWRwc2lua19TT1VSQ0VTID0gZWxlbWVudHMvdWRwc2luay5jCi1lbGVtZW50c191ZHBzaW5rX09CSkVDVFMgPSBlbGVtZW50cy91ZHBzaW5rLiQoT0JKRVhUKQotZWxlbWVudHNfdWRwc2lua19MREFERCA9ICQoTERBREQpCi1lbGVtZW50c191ZHBzaW5rX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfdWRwc3JjX1NPVVJDRVMgPSBlbGVtZW50cy91ZHBzcmMuYwotZWxlbWVudHNfdWRwc3JjX09CSkVDVFMgPSBlbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLiQoT0JKRVhUKQotZWxlbWVudHNfdWRwc3JjX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18yKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c191ZHBzcmNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX3VkcHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c192aWRlb2JveF9TT1VSQ0VTID0gZWxlbWVudHMvdmlkZW9ib3guYwotZWxlbWVudHNfdmlkZW9ib3hfT0JKRUNUUyA9IGVsZW1lbnRzL3ZpZGVvYm94LiQoT0JKRVhUKQotZWxlbWVudHNfdmlkZW9ib3hfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfdmlkZW9ib3hfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c192aWRlb2Nyb3BfU09VUkNFUyA9IGVsZW1lbnRzL3ZpZGVvY3JvcC5jCi1lbGVtZW50c192aWRlb2Nyb3BfT0JKRUNUUyA9ICBcCi0JZWxlbWVudHMvZWxlbWVudHNfdmlkZW9jcm9wLXZpZGVvY3JvcC4kKE9CSkVYVCkKLWVsZW1lbnRzX3ZpZGVvY3JvcF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMikKLWVsZW1lbnRzX3ZpZGVvY3JvcF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfdmlkZW9jcm9wX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKLWVsZW1lbnRzX3ZpZGVvZmlsdGVyX1NPVVJDRVMgPSBlbGVtZW50cy92aWRlb2ZpbHRlci5jCi1lbGVtZW50c192aWRlb2ZpbHRlcl9PQkpFQ1RTID0gIFwKLQllbGVtZW50cy9lbGVtZW50c192aWRlb2ZpbHRlci12aWRlb2ZpbHRlci4kKE9CSkVYVCkKLWVsZW1lbnRzX3ZpZGVvZmlsdGVyX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c192aWRlb2ZpbHRlcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZWxlbWVudHNfdmlkZW9maWx0ZXJfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfdmlkZW9taXhlcl9TT1VSQ0VTID0gZWxlbWVudHMvdmlkZW9taXhlci5jCi1lbGVtZW50c192aWRlb21peGVyX09CSkVDVFMgPSAgXAotCWVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci4kKE9CSkVYVCkKLWVsZW1lbnRzX3ZpZGVvbWl4ZXJfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWVsZW1lbnRzX3ZpZGVvbWl4ZXJfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX3ZpZGVvbWl4ZXJfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotZWxlbWVudHNfdnA4ZGVjX1NPVVJDRVMgPSBlbGVtZW50cy92cDhkZWMuYwotZWxlbWVudHNfdnA4ZGVjX09CSkVDVFMgPSBlbGVtZW50cy92cDhkZWMuJChPQkpFWFQpCi1lbGVtZW50c192cDhkZWNfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfdnA4ZGVjX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfdnA4ZW5jX1NPVVJDRVMgPSBlbGVtZW50cy92cDhlbmMuYwotZWxlbWVudHNfdnA4ZW5jX09CSkVDVFMgPSBlbGVtZW50cy92cDhlbmMuJChPQkpFWFQpCi1lbGVtZW50c192cDhlbmNfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfdnA4ZW5jX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZWxlbWVudHNfdnA5ZW5jX1NPVVJDRVMgPSBlbGVtZW50cy92cDllbmMuYwotZWxlbWVudHNfdnA5ZW5jX09CSkVDVFMgPSBlbGVtZW50cy9lbGVtZW50c192cDllbmMtdnA5ZW5jLiQoT0JKRVhUKQotZWxlbWVudHNfdnA5ZW5jX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzIpCi1lbGVtZW50c192cDllbmNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGVsZW1lbnRzX3ZwOWVuY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1lbGVtZW50c193YXZwYWNrZGVjX1NPVVJDRVMgPSBlbGVtZW50cy93YXZwYWNrZGVjLmMKLWVsZW1lbnRzX3dhdnBhY2tkZWNfT0JKRUNUUyA9IGVsZW1lbnRzL3dhdnBhY2tkZWMuJChPQkpFWFQpCi1lbGVtZW50c193YXZwYWNrZGVjX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3dhdnBhY2tkZWNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c193YXZwYWNrZW5jX1NPVVJDRVMgPSBlbGVtZW50cy93YXZwYWNrZW5jLmMKLWVsZW1lbnRzX3dhdnBhY2tlbmNfT0JKRUNUUyA9IGVsZW1lbnRzL3dhdnBhY2tlbmMuJChPQkpFWFQpCi1lbGVtZW50c193YXZwYWNrZW5jX0xEQUREID0gJChMREFERCkKLWVsZW1lbnRzX3dhdnBhY2tlbmNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c193YXZwYWNrcGFyc2VfU09VUkNFUyA9IGVsZW1lbnRzL3dhdnBhY2twYXJzZS5jCi1lbGVtZW50c193YXZwYWNrcGFyc2VfT0JKRUNUUyA9IGVsZW1lbnRzL3dhdnBhY2twYXJzZS4kKE9CSkVYVCkKLWVsZW1lbnRzX3dhdnBhY2twYXJzZV9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c193YXZwYWNrcGFyc2VfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c193YXZwYXJzZV9TT1VSQ0VTID0gZWxlbWVudHMvd2F2cGFyc2UuYwotZWxlbWVudHNfd2F2cGFyc2VfT0JKRUNUUyA9IGVsZW1lbnRzL3dhdnBhcnNlLiQoT0JKRVhUKQotZWxlbWVudHNfd2F2cGFyc2VfTERBREQgPSAkKExEQUREKQotZWxlbWVudHNfd2F2cGFyc2VfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1lbGVtZW50c195NG1lbmNfU09VUkNFUyA9IGVsZW1lbnRzL3k0bWVuYy5jCi1lbGVtZW50c195NG1lbmNfT0JKRUNUUyA9IGVsZW1lbnRzL3k0bWVuYy4kKE9CSkVYVCkKLWVsZW1lbnRzX3k0bWVuY19MREFERCA9ICQoTERBREQpCi1lbGVtZW50c195NG1lbmNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1nZW5lcmljX3N0YXRlc19TT1VSQ0VTID0gZ2VuZXJpYy9zdGF0ZXMuYwotZ2VuZXJpY19zdGF0ZXNfT0JKRUNUUyA9IGdlbmVyaWMvc3RhdGVzLiQoT0JKRVhUKQotZ2VuZXJpY19zdGF0ZXNfTERBREQgPSAkKExEQUREKQotZ2VuZXJpY19zdGF0ZXNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1ub2Rpc3Rfb3JjX2RlaW50ZXJsYWNlX09CSkVDVFMgPSAgXAotCW9yYy9vcmNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuJChPQkpFWFQpCi1vcmNfZGVpbnRlcmxhY2VfT0JKRUNUUyA9ICQobm9kaXN0X29yY19kZWludGVybGFjZV9PQkpFQ1RTKQotb3JjX2RlaW50ZXJsYWNlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotb3JjX2RlaW50ZXJsYWNlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChvcmNfZGVpbnRlcmxhY2VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotbm9kaXN0X29yY192aWRlb2JveF9PQkpFQ1RTID0gb3JjL29yY192aWRlb2JveC12aWRlb2JveC4kKE9CSkVYVCkKLW9yY192aWRlb2JveF9PQkpFQ1RTID0gJChub2Rpc3Rfb3JjX3ZpZGVvYm94X09CSkVDVFMpCi1vcmNfdmlkZW9ib3hfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1vcmNfdmlkZW9ib3hfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQob3JjX3ZpZGVvYm94X0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLW5vZGlzdF9vcmNfdmlkZW9taXhlcl9PQkpFQ1RTID0gIFwKLQlvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci4kKE9CSkVYVCkKLW9yY192aWRlb21peGVyX09CSkVDVFMgPSAkKG5vZGlzdF9vcmNfdmlkZW9taXhlcl9PQkpFQ1RTKQotb3JjX3ZpZGVvbWl4ZXJfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1vcmNfdmlkZW9taXhlcl9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQob3JjX3ZpZGVvbWl4ZXJfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vIFwKLQkkQAotcGlwZWxpbmVzX2VmZmVjdHZfU09VUkNFUyA9IHBpcGVsaW5lcy9lZmZlY3R2LmMKLXBpcGVsaW5lc19lZmZlY3R2X09CSkVDVFMgPSBwaXBlbGluZXMvZWZmZWN0di4kKE9CSkVYVCkKLXBpcGVsaW5lc19lZmZlY3R2X0xEQUREID0gJChMREFERCkKLXBpcGVsaW5lc19lZmZlY3R2X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGlwZWxpbmVzX2ZsYWNkZWNfU09VUkNFUyA9IHBpcGVsaW5lcy9mbGFjZGVjLmMKLXBpcGVsaW5lc19mbGFjZGVjX09CSkVDVFMgPSAgXAotCXBpcGVsaW5lcy9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLiQoT0JKRVhUKQotcGlwZWxpbmVzX2ZsYWNkZWNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLXBpcGVsaW5lc19mbGFjZGVjX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChwaXBlbGluZXNfZmxhY2RlY19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1waXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19TT1VSQ0VTID0gIFwKLQlwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jCi1waXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19PQkpFQ1RTID0gIFwKLQlwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy4kKE9CSkVYVCkKLXBpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX0xEQUREID0gJChMREFERCkKLXBpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGlwZWxpbmVzX3RhZ3NjaGVja2luZ19TT1VSQ0VTID0gcGlwZWxpbmVzL3RhZ3NjaGVja2luZy5jCi1waXBlbGluZXNfdGFnc2NoZWNraW5nX09CSkVDVFMgPSBwaXBlbGluZXMvdGFnc2NoZWNraW5nLiQoT0JKRVhUKQotcGlwZWxpbmVzX3RhZ3NjaGVja2luZ19MREFERCA9ICQoTERBREQpCi1waXBlbGluZXNfdGFnc2NoZWNraW5nX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotcGlwZWxpbmVzX3dhdmVuY19TT1VSQ0VTID0gcGlwZWxpbmVzL3dhdmVuYy5jCi1waXBlbGluZXNfd2F2ZW5jX09CSkVDVFMgPSAgXAotCXBpcGVsaW5lcy9waXBlbGluZXNfd2F2ZW5jLXdhdmVuYy4kKE9CSkVYVCkKLXBpcGVsaW5lc193YXZlbmNfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMikKLXBpcGVsaW5lc193YXZlbmNfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKHBpcGVsaW5lc193YXZlbmNfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotcGlwZWxpbmVzX3dhdnBhY2tfU09VUkNFUyA9IHBpcGVsaW5lcy93YXZwYWNrLmMKLXBpcGVsaW5lc193YXZwYWNrX09CSkVDVFMgPSAgXAotCXBpcGVsaW5lcy9waXBlbGluZXNfd2F2cGFjay13YXZwYWNrLiQoT0JKRVhUKQotcGlwZWxpbmVzX3dhdnBhY2tfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzIpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXBpcGVsaW5lc193YXZwYWNrX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChwaXBlbGluZXNfd2F2cGFja19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChsaWJwYXJzZXJfbGFfU09VUkNFUykgZWxlbWVudHMvYWFjcGFyc2UuYyBcCi0JZWxlbWVudHMvYWMzcGFyc2UuYyBlbGVtZW50cy9hbHBoYS5jIGVsZW1lbnRzL2FscGhhY29sb3IuYyBcCi0JZWxlbWVudHMvYW1ycGFyc2UuYyBlbGVtZW50cy9hcGV2Mm11eC5jIFwKLQllbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYyBlbGVtZW50cy9hdWRpb2FtcGxpZnkuYyBcCi0JZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jIGVsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmMgXAotCWVsZW1lbnRzL2F1ZGlvZHluYW1pYy5jIGVsZW1lbnRzL2F1ZGlvZWNoby5jIFwKLQllbGVtZW50cy9hdWRpb2ZpcmZpbHRlci5jIGVsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmMgXAotCWVsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMgZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jIFwKLQllbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jIGVsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jIFwKLQllbGVtZW50cy9hdXRvZGV0ZWN0LmMgZWxlbWVudHMvYXZpbXV4LmMgZWxlbWVudHMvYXZpc3VidGl0bGUuYyBcCi0JZWxlbWVudHMvY2Fwc3NldHRlci5jIGVsZW1lbnRzL2RlaW50ZXJsYWNlLmMgXAotCWVsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jIGVsZW1lbnRzL2R0bWYuYyBlbGVtZW50cy9lcXVhbGl6ZXIuYyBcCi0JZWxlbWVudHMvZmxhY3BhcnNlLmMgZWxlbWVudHMvZmx2ZGVtdXguYyBlbGVtZW50cy9mbHZtdXguYyBcCi0JZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheS5jIGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYyBcCi0JZWxlbWVudHMvaWN5ZGVtdXguYyBlbGVtZW50cy9pZDNkZW11eC5jIGVsZW1lbnRzL2lkM3YybXV4LmMgXAotCWVsZW1lbnRzL2ltYWdlZnJlZXplLmMgZWxlbWVudHMvaW50ZXJsZWF2ZS5jIFwKLQllbGVtZW50cy9qcGVnZGVjLmMgZWxlbWVudHMvanBlZ2VuYy5jIGVsZW1lbnRzL2xldmVsLmMgXAotCWVsZW1lbnRzL21hdHJvc2thZGVtdXguYyBlbGVtZW50cy9tYXRyb3NrYW11eC5jIFwKLQllbGVtZW50cy9tYXRyb3NrYXBhcnNlLmMgZWxlbWVudHMvbXBlZ2F1ZGlvcGFyc2UuYyBcCi0JZWxlbWVudHMvbXVsYXdkZWMuYyBlbGVtZW50cy9tdWxhd2VuYy5jIGVsZW1lbnRzL211bHRpZmlsZS5jIFwKLQllbGVtZW50cy9xdGRlbXV4LmMgZWxlbWVudHMvcXRtdXguYyBlbGVtZW50cy9yZ2FuYWx5c2lzLmMgXAotCWVsZW1lbnRzL3JnbGltaXRlci5jIGVsZW1lbnRzL3Jndm9sdW1lLmMgXAotCWVsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmMgZWxlbWVudHMvcnRwYXV4LmMgZWxlbWVudHMvcnRwYmluLmMgXAotCSQoZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X1NPVVJDRVMpIGVsZW1lbnRzL3J0cGNvbGxpc2lvbi5jIFwKLQllbGVtZW50cy9ydHBoMjYxLmMgZWxlbWVudHMvcnRwaDI2My5jIFwKLQllbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYyBlbGVtZW50cy9ydHBtdXguYyBlbGVtZW50cy9ydHBydHguYyBcCi0JZWxlbWVudHMvcnRwc2Vzc2lvbi5jIGVsZW1lbnRzL3J0cHZwOS5jIGVsZW1lbnRzL3NoYXBld2lwZS5jIFwKLQllbGVtZW50cy9zb3VwaHR0cHNyYy5jIGVsZW1lbnRzL3NwZWN0cnVtLmMgZWxlbWVudHMvc3BsaXRtdXguYyBcCi0JZWxlbWVudHMvc3VuYXVkaW8uYyBlbGVtZW50cy91ZHBzaW5rLmMgZWxlbWVudHMvdWRwc3JjLmMgXAotCWVsZW1lbnRzL3ZpZGVvYm94LmMgZWxlbWVudHMvdmlkZW9jcm9wLmMgXAotCWVsZW1lbnRzL3ZpZGVvZmlsdGVyLmMgZWxlbWVudHMvdmlkZW9taXhlci5jIGVsZW1lbnRzL3ZwOGRlYy5jIFwKLQllbGVtZW50cy92cDhlbmMuYyBlbGVtZW50cy92cDllbmMuYyBlbGVtZW50cy93YXZwYWNrZGVjLmMgXAotCWVsZW1lbnRzL3dhdnBhY2tlbmMuYyBlbGVtZW50cy93YXZwYWNrcGFyc2UuYyBcCi0JZWxlbWVudHMvd2F2cGFyc2UuYyBlbGVtZW50cy95NG1lbmMuYyBnZW5lcmljL3N0YXRlcy5jIFwKLQkkKG5vZGlzdF9vcmNfZGVpbnRlcmxhY2VfU09VUkNFUykgXAotCSQobm9kaXN0X29yY192aWRlb2JveF9TT1VSQ0VTKSBcCi0JJChub2Rpc3Rfb3JjX3ZpZGVvbWl4ZXJfU09VUkNFUykgcGlwZWxpbmVzL2VmZmVjdHYuYyBcCi0JcGlwZWxpbmVzL2ZsYWNkZWMuYyBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jIFwKLQlwaXBlbGluZXMvdGFnc2NoZWNraW5nLmMgcGlwZWxpbmVzL3dhdmVuYy5jIFwKLQlwaXBlbGluZXMvd2F2cGFjay5jCi1ESVNUX1NPVVJDRVMgPSAkKGxpYnBhcnNlcl9sYV9TT1VSQ0VTKSBlbGVtZW50cy9hYWNwYXJzZS5jIFwKLQllbGVtZW50cy9hYzNwYXJzZS5jIGVsZW1lbnRzL2FscGhhLmMgZWxlbWVudHMvYWxwaGFjb2xvci5jIFwKLQllbGVtZW50cy9hbXJwYXJzZS5jIGVsZW1lbnRzL2FwZXYybXV4LmMgXAotCWVsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jIGVsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jIFwKLQllbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMgZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYyBcCi0JZWxlbWVudHMvYXVkaW9keW5hbWljLmMgZWxlbWVudHMvYXVkaW9lY2hvLmMgXAotCWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyLmMgZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIuYyBcCi0JZWxlbWVudHMvYXVkaW9pbnZlcnQuYyBlbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMgXAotCWVsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMgZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMgXAotCWVsZW1lbnRzL2F1dG9kZXRlY3QuYyBlbGVtZW50cy9hdmltdXguYyBlbGVtZW50cy9hdmlzdWJ0aXRsZS5jIFwKLQllbGVtZW50cy9jYXBzc2V0dGVyLmMgZWxlbWVudHMvZGVpbnRlcmxhY2UuYyBcCi0JZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMgZWxlbWVudHMvZHRtZi5jIGVsZW1lbnRzL2VxdWFsaXplci5jIFwKLQllbGVtZW50cy9mbGFjcGFyc2UuYyBlbGVtZW50cy9mbHZkZW11eC5jIGVsZW1lbnRzL2Zsdm11eC5jIFwKLQllbGVtZW50cy9nZGtwaXhidWZvdmVybGF5LmMgZWxlbWVudHMvZ2RrcGl4YnVmc2luay5jIFwKLQllbGVtZW50cy9pY3lkZW11eC5jIGVsZW1lbnRzL2lkM2RlbXV4LmMgZWxlbWVudHMvaWQzdjJtdXguYyBcCi0JZWxlbWVudHMvaW1hZ2VmcmVlemUuYyBlbGVtZW50cy9pbnRlcmxlYXZlLmMgXAotCWVsZW1lbnRzL2pwZWdkZWMuYyBlbGVtZW50cy9qcGVnZW5jLmMgZWxlbWVudHMvbGV2ZWwuYyBcCi0JZWxlbWVudHMvbWF0cm9za2FkZW11eC5jIGVsZW1lbnRzL21hdHJvc2thbXV4LmMgXAotCWVsZW1lbnRzL21hdHJvc2thcGFyc2UuYyBlbGVtZW50cy9tcGVnYXVkaW9wYXJzZS5jIFwKLQllbGVtZW50cy9tdWxhd2RlYy5jIGVsZW1lbnRzL211bGF3ZW5jLmMgZWxlbWVudHMvbXVsdGlmaWxlLmMgXAotCWVsZW1lbnRzL3F0ZGVtdXguYyBlbGVtZW50cy9xdG11eC5jIGVsZW1lbnRzL3JnYW5hbHlzaXMuYyBcCi0JZWxlbWVudHMvcmdsaW1pdGVyLmMgZWxlbWVudHMvcmd2b2x1bWUuYyBcCi0JZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuYyBlbGVtZW50cy9ydHBhdXguYyBlbGVtZW50cy9ydHBiaW4uYyBcCi0JJChlbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3RfU09VUkNFUykgZWxlbWVudHMvcnRwY29sbGlzaW9uLmMgXAotCWVsZW1lbnRzL3J0cGgyNjEuYyBlbGVtZW50cy9ydHBoMjYzLmMgXAotCWVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jIGVsZW1lbnRzL3J0cG11eC5jIGVsZW1lbnRzL3J0cHJ0eC5jIFwKLQllbGVtZW50cy9ydHBzZXNzaW9uLmMgZWxlbWVudHMvcnRwdnA5LmMgZWxlbWVudHMvc2hhcGV3aXBlLmMgXAotCWVsZW1lbnRzL3NvdXBodHRwc3JjLmMgZWxlbWVudHMvc3BlY3RydW0uYyBlbGVtZW50cy9zcGxpdG11eC5jIFwKLQllbGVtZW50cy9zdW5hdWRpby5jIGVsZW1lbnRzL3VkcHNpbmsuYyBlbGVtZW50cy91ZHBzcmMuYyBcCi0JZWxlbWVudHMvdmlkZW9ib3guYyBlbGVtZW50cy92aWRlb2Nyb3AuYyBcCi0JZWxlbWVudHMvdmlkZW9maWx0ZXIuYyBlbGVtZW50cy92aWRlb21peGVyLmMgZWxlbWVudHMvdnA4ZGVjLmMgXAotCWVsZW1lbnRzL3ZwOGVuYy5jIGVsZW1lbnRzL3ZwOWVuYy5jIGVsZW1lbnRzL3dhdnBhY2tkZWMuYyBcCi0JZWxlbWVudHMvd2F2cGFja2VuYy5jIGVsZW1lbnRzL3dhdnBhY2twYXJzZS5jIFwKLQllbGVtZW50cy93YXZwYXJzZS5jIGVsZW1lbnRzL3k0bWVuYy5jIGdlbmVyaWMvc3RhdGVzLmMgXAotCXBpcGVsaW5lcy9lZmZlY3R2LmMgcGlwZWxpbmVzL2ZsYWNkZWMuYyBcCi0JcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYyBwaXBlbGluZXMvdGFnc2NoZWNraW5nLmMgXAotCXBpcGVsaW5lcy93YXZlbmMuYyBwaXBlbGluZXMvd2F2cGFjay5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fdHR5X2NvbG9yc19kdW1teSA9IFwKLSAgbWduPSByZWQ9IGdybj0gbGduPSBibHU9IGJyZz0gc3RkPTsgXAotICBhbV9fY29sb3JfdGVzdHM9bm8KLWFtX190dHlfY29sb3JzID0geyBcCi0gICQoYW1fX3R0eV9jb2xvcnNfZHVtbXkpOyBcCi0gIGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYbm87IHRoZW4gXAotICAgIGFtX19jb2xvcl90ZXN0cz1ubzsgXAotICBlbGlmIHRlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgPSBYYWx3YXlzOyB0aGVuIFwKLSAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCi0gIGVsaWYgdGVzdCAiWCQkVEVSTSIgIT0gWGR1bWIgJiYgeyB0ZXN0IC10IDE7IH0gMj4vZGV2L251bGw7IHRoZW4gXAotICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKLSAgZmk7IFwKLSAgaWYgdGVzdCAkJGFtX19jb2xvcl90ZXN0cyA9IHllczsgdGhlbiBcCi0gICAgcmVkPScbWzA7MzFtJzsgXAotICAgIGdybj0nG1swOzMybSc7IFwKLSAgICBsZ249JxtbMTszMm0nOyBcCi0gICAgYmx1PScbWzE7MzRtJzsgXAotICAgIG1nbj0nG1swOzM1bSc7IFwKLSAgICBicmc9JxtbMW0nOyBcCi0gICAgc3RkPScbW20nOyBcCi0gIGZpOyBcCi19Ci1hbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKLWFtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCi0gICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKLSAgICAqKSBmPSQkcDs7IFwKLSAgZXNhYzsKLWFtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKLWFtX19pbnN0YWxsX21heCA9IDQwCi1hbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAotICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCi1hbV9fbm9iYXNlX3N0cmlwID0gXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKLWFtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKLSAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKLSAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKLSAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAotICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKLSAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKLSAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCi1hbV9fYmFzZV9saXN0ID0gXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAotICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCi1hbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCi0gIHRlc3QgLXogIiQkZmlsZXMiIFwKLSAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKLSAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0gICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCi0gIH0KLWFtX19yZWNoZWNrX3J4ID0gXlsgCV0qOnJlY2hlY2s6WyAJXSoKLWFtX19nbG9iYWxfdGVzdF9yZXN1bHRfcnggPSBeWyAJXSo6Z2xvYmFsLXRlc3QtcmVzdWx0OlsgCV0qCi1hbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4ID0gXlsgCV0qOmNvcHktaW4tZ2xvYmFsLWxvZzpbIAldKgotIyBBIGNvbW1hbmQgdGhhdCwgZ2l2ZW4gYSBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3QgbmFtZXMgb24gdGhlCi0jIHN0YW5kYXJkIGlucHV0LCBwcmludCB0aGUgbmFtZSBvZiB0aGUgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcmUtcnVuCi0jIHVwb24gIm1ha2UgcmVjaGVjayIuCi1hbV9fbGlzdF9yZWNoZWNrX3Rlc3RzID0gJChBV0spICd7IFwKLSAgcmVjaGVjayA9IDE7IFwKLSAgd2hpbGUgKChyYyA9IChnZXRsaW5lIGxpbmUgPCAoJCQwICIudHJzIikpKSAhPSAwKSBcCi0gICAgeyBcCi0gICAgICBpZiAocmMgPCAwKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgIGlmICgoZ2V0bGluZSBsaW5lMiA8ICgkJDAgIi5sb2ciKSkgPCAwKSBcCi0JICAgIHJlY2hlY2sgPSAwOyBcCi0gICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgfSBcCi0gICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW25OXVtPb10vKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgIHJlY2hlY2sgPSAwOyBcCi0gICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgfSBcCi0gICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW3lZXVtlRV1bc1NdLykgXAotICAgICAgICB7IFwKLSAgICAgICAgICBicmVhazsgXAotICAgICAgICB9IFwKLSAgICB9OyBcCi0gIGlmIChyZWNoZWNrKSBcCi0gICAgcHJpbnQgJCQwOyBcCi0gIGNsb3NlICgkJDAgIi50cnMiKTsgXAotICBjbG9zZSAoJCQwICIubG9nIik7IFwKLX0nCi0jIEEgY29tbWFuZCB0aGF0LCBnaXZlbiBhIG5ld2xpbmUtc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBuYW1lcyBvbiB0aGUKLSMgc3RhbmRhcmQgaW5wdXQsIGNyZWF0ZSB0aGUgZ2xvYmFsIGxvZyBmcm9tIHRoZWlyIC50cnMgYW5kIC5sb2cgZmlsZXMuCi1hbV9fY3JlYXRlX2dsb2JhbF9sb2cgPSAkKEFXSykgJyBcCi1mdW5jdGlvbiBmYXRhbChtc2cpIFwKLXsgXAotICBwcmludCAiZmF0YWw6IG1ha2luZyAkQDogIiBtc2cgfCAiY2F0ID4mMiI7IFwKLSAgZXhpdCAxOyBcCi19IFwKLWZ1bmN0aW9uIHJzdF9zZWN0aW9uKGhlYWRlcikgXAoteyBcCi0gIHByaW50IGhlYWRlcjsgXAotICBsZW4gPSBsZW5ndGgoaGVhZGVyKTsgXAotICBmb3IgKGkgPSAxOyBpIDw9IGxlbjsgaSA9IGkgKyAxKSBcCi0gICAgcHJpbnRmICI9IjsgXAotICBwcmludGYgIlxuXG4iOyBcCi19IFwKLXsgXAotICBjb3B5X2luX2dsb2JhbF9sb2cgPSAxOyBcCi0gIGdsb2JhbF90ZXN0X3Jlc3VsdCA9ICJSVU4iOyBcCi0gIHdoaWxlICgocmMgPSAoZ2V0bGluZSBsaW5lIDwgKCQkMCAiLnRycyIpKSkgIT0gMCkgXAotICAgIHsgXAotICAgICAgaWYgKHJjIDwgMCkgXAotICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi50cnMiKTsgXAotICAgICAgaWYgKGxpbmUgfiAvJChhbV9fZ2xvYmFsX3Rlc3RfcmVzdWx0X3J4KS8pIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgc3ViKCIkKGFtX19nbG9iYWxfdGVzdF9yZXN1bHRfcngpIiwgIiIsIGxpbmUpOyBcCi0gICAgICAgICAgc3ViKCJbIAldKiQkIiwgIiIsIGxpbmUpOyBcCi0gICAgICAgICAgZ2xvYmFsX3Rlc3RfcmVzdWx0ID0gbGluZTsgXAotICAgICAgICB9IFwKLSAgICAgIGVsc2UgaWYgKGxpbmUgfiAvJChhbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4KVtuTl1bb09dLykgXAotICAgICAgICBjb3B5X2luX2dsb2JhbF9sb2cgPSAwOyBcCi0gICAgfTsgXAotICBpZiAoY29weV9pbl9nbG9iYWxfbG9nKSBcCi0gICAgeyBcCi0gICAgICByc3Rfc2VjdGlvbihnbG9iYWxfdGVzdF9yZXN1bHQgIjogIiAkJDApOyBcCi0gICAgICB3aGlsZSAoKHJjID0gKGdldGxpbmUgbGluZSA8ICgkJDAgIi5sb2ciKSkpICE9IDApIFwKLSAgICAgIHsgXAotICAgICAgICBpZiAocmMgPCAwKSBcCi0gICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi5sb2ciKTsgXAotICAgICAgICBwcmludCBsaW5lOyBcCi0gICAgICB9OyBcCi0gICAgICBwcmludGYgIlxuIjsgXAotICAgIH07IFwKLSAgY2xvc2UgKCQkMCAiLnRycyIpOyBcCi0gIGNsb3NlICgkJDAgIi5sb2ciKTsgXAotfScKLSMgUmVzdHJ1Y3R1cmVkIFRleHQgdGl0bGUuCi1hbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KLSMgU29sYXJpcyAxMCAnbWFrZScsIGFuZCBzZXZlcmFsIG90aGVyIHRyYWRpdGlvbmFsICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMsCi0jIHBhc3MgIi1lIiB0byAkKFNIRUxMKSwgYW5kIFBPU0lYIDIwMDggZXZlbiByZXF1aXJlcyB0aGlzLiAgV29yayBhcm91bmQgaXQKLSMgYnkgZGlzYWJsaW5nIC1lICh1c2luZyB0aGUgWFNJIGV4dGVuc2lvbiAic2V0ICtlIikgaWYgaXQncyBzZXQuCi1hbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYwotIyBEZWZhdWx0IGZsYWdzIHBhc3NlZCB0byB0ZXN0IGRyaXZlcnMuCi1hbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKLSAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKLSAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAotICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKLSMgVG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBjb21tYW5kIHJ1bm5pbmcgdGhlIHRlc3QuICBDcmVhdGVzIHRoZQotIyBkaXJlY3RvcnkgZm9yIHRoZSBsb2cgaWYgbmVlZGVkLiAgU3RvcmVzIGluICRkaXIgdGhlIGRpcmVjdG9yeQotIyBjb250YWluaW5nICRmLCBpbiAkdHN0IHRoZSB0ZXN0LCBpbiAkbG9nIHRoZSBsb2cuICBFeGVjdXRlcyB0aGUKLSMgZGV2ZWxvcGVyLSBkZWZpbmVkIHRlc3Qgc2V0dXAgQU1fVEVTVFNfRU5WSVJPTk1FTlQgKGlmIGFueSksIGFuZAotIyBwYXNzZXMgVEVTVFNfRU5WSVJPTk1FTlQuICBTZXQgdXAgb3B0aW9ucyBmb3IgdGhlIHdyYXBwZXIgdGhhdAotIyB3aWxsIHJ1biB0aGUgdGVzdCBzY3JpcHRzIChvciB0aGVpciBhc3NvY2lhdGVkIExPR19DT01QSUxFUiwgaWYKLSMgdGh5IGhhdmUgb25lKS4KLWFtX19jaGVja19wcmUgPSBcCi0kKGFtX19zaF9lX3NldHVwKTsJCQkJCVwKLSQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKQkJCVwKLSQoYW1fX3R0eV9jb2xvcnMpOwkJCQkJXAotc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCi1jYXNlICIkQCIgaW4JCQkJCQlcCi0gICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7CVwKLSAgICAqKSBhbV9fb2Rpcj0uOzsgCQkJCQlcCi1lc2FjOwkJCQkJCQlcCi10ZXN0ICJ4JCRhbV9fb2RpciIgPSB4Ii4iIHx8IHRlc3QgLWQgIiQkYW1fX29kaXIiIAlcCi0gIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OwkJXAotaWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCi1lbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAotZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAotdHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKLWlmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCi0gIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCi1lbHNlCQkJCQkJCVwKLSAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCi1maTsgCQkJCQkJCVwKLWNhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluCQkJCVwKLSAgKltcIFwJXSQkZltcIFwJXSogfCAqW1wgXAldJCRkaXIkJGZbXCBcCV0qKSBcCi0gICAgYW1fX2V4cGVjdF9mYWlsdXJlPXllczs7CQkJCVwKLSAgKikJCQkJCQkJXAotICAgIGFtX19leHBlY3RfZmFpbHVyZT1ubzs7CQkJCVwKLWVzYWM7IAkJCQkJCQlcCi0kKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKFRFU1RTX0VOVklST05NRU5UKQotIyBBIHNoZWxsIGNvbW1hbmQgdG8gZ2V0IHRoZSBuYW1lcyBvZiB0aGUgdGVzdHMgc2NyaXB0cyB3aXRoIGFueSByZWdpc3RlcmVkCi0jIGV4dGVuc2lvbiByZW1vdmVkIChpLmUuLCBlcXVpdmFsZW50bHksIHRoZSBuYW1lcyBvZiB0aGUgdGVzdCBsb2dzLCB3aXRoCi0jIHRoZSAnLmxvZycgZXh0ZW5zaW9uIHJlbW92ZWQpLiAgVGhlIHJlc3VsdCBpcyBzYXZlZCBpbiB0aGUgc2hlbGwgdmFyaWFibGUKLSMgJyRiYXNlcycuICBUaGlzIGhvbm9ycyBydW50aW1lIG92ZXJyaWRpbmcgb2YgVEVTVFMgYW5kIFRFU1RfTE9HUy4gIFNhZGx5LAotIyB3ZSBjYW5ub3QgdXNlIHNvbWV0aGluZyBzaW1wbGVyLCBpbnZvbHZpbmcgZS5nLiwgIiQoVEVTVF9MT0dTOi5sb2c9KSIsCi0jIHNpbmNlIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbSB3aXRoIFZQQVRIIHJld3JpdGVzIGZvciBzdWZmaXgtbGVzcyB0ZXN0cy4KLSMgU2VlIGFsc28gJ3Rlc3QtaGFybmVzcy12cGF0aC1yZXdyaXRlLnNoJyBhbmQgJ3Rlc3QtdHJzLWJhc2ljLnNoJy4KLWFtX19zZXRfVEVTVFNfYmFzZXMgPSBcCi0gIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCi0gIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAotICBiYXNlcz1gZWNobyAkJGJhc2VzYAotUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9IGNoZWNrIHJlY2hlY2sKLVRFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKLVRFU1RfRVhURU5TSU9OUyA9IEBFWEVFWFRAIC50ZXN0Ci1MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgotTE9HX0NPTVBJTEUgPSAkKExPR19DT01QSUxFUikgJChBTV9MT0dfRkxBR1MpICQoTE9HX0ZMQUdTKQotYW1fX3NldF9iID0gXAotICBjYXNlICckQCcgaW4gXAotICAgICovKikgXAotICAgICAgY2FzZSAnJConIGluIFwKLSAgICAgICAgKi8qKSBiPSckKic7OyBcCi0gICAgICAgICAgKikgYj1gZWNobyAnJEAnIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCi0gICAgICAgZXNhYzs7IFwKLSAgICAqKSBcCi0gICAgICBiPSckKic7OyBcCi0gIGVzYWMKLWFtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKLWFtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMTpARVhFRVhUQC5sb2c9LmxvZykKLVRFU1RfTE9HUyA9ICQoYW1fX3Rlc3RfbG9nczI6LnRlc3QubG9nPS5sb2cpCi1URVNUX0xPR19EUklWRVIgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL3Rlc3QtZHJpdmVyCi1URVNUX0xPR19DT01QSUxFID0gJChURVNUX0xPR19DT01QSUxFUikgJChBTV9URVNUX0xPR19GTEFHUykgXAotCSQoVEVTVF9MT0dfRkxBR1MpCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9jb21tb24vY2hlY2subWFrIFwKLQkkKHRvcF9zcmNkaXIpL2RlcGNvbXAgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotQU1fVEVTVFNfRU5WSVJPTk1FTlQgPSBDS19ERUZBVUxUX1RJTUVPVVQ9MjAgJChSRUdJU1RSWV9FTlZJUk9OTUVOVCkgXAotCUdTVF9QTFVHSU5fU1lTVEVNX1BBVEhfMV8wPSBcCi0JR1NUX1BMVUdJTl9QQVRIXzFfMD0kKHRvcF9idWlsZGRpcikvZ3N0OiQodG9wX2J1aWxkZGlyKS9leHQ6JCh0b3BfYnVpbGRkaXIpL3N5czokKEdTVFBCX1BMVUdJTlNfRElSKTokKEdTVF9QTFVHSU5TX0RJUikgXAotCUdTVF9QTFVHSU5fTE9BRElOR19XSElURUxJU1Q9ImdzdHJlYW1lckAkKEdTVF9QTFVHSU5TX0RJUik6Z3N0LXBsdWdpbnMtYmFzZUAkKEdTVFBCX1BMVUdJTlNfRElSKTpnc3QtcGx1Z2lucy1nb29kQCQodG9wX2J1aWxkZGlyKSIgXAotCUdTVF9TVEFURV9JR05PUkVfRUxFTUVOVFM9ImFhc2luayBhdXRvYXVkaW9zcmMgYXV0b2F1ZGlvc2luayBcCi0JYXV0b3ZpZGVvc3JjIGF1dG92aWRlb3NpbmsgY2FjYXNpbmsgY2Fpcm90ZXh0b3ZlcmxheSBcCi0JaGFsYXVkaW9zcmMgaGFsYXVkaW9zaW5rIGphY2thdWRpb3NyYyBqYWNrYXVkaW9zaW5rIG9zc3NyYyBcCi0Jb3Nzc2luayBvc3hhdWRpb3Npbmsgb3N4YXVkaW9zcmMgb3N4dmlkZW9zcmMgb3N4dmlkZW9zaW5rIFwKLQlwdWxzZXNpbmsgcHVsc2VzcmMgcHVsc2VtaXhlciB2NGwyc3JjIiBcCi0JR1NFVFRJTkdTX0JBQ0tFTkQ9Im1lbW9yeSIKLQotIyBpbnNwZWN0IGV2ZXJ5IHBsdWdpbiBmZWF0dXJlCi1HU1RfSU5TUEVDVCA9ICQoR1NUX1RPT0xTX0RJUikvZ3N0LWluc3BlY3QtJChHU1RfQVBJX1ZFUlNJT04pCi1DSEVDS19SRUdJU1RSWSA9ICQodG9wX2J1aWxkZGlyKS90ZXN0cy9jaGVjay90ZXN0LXJlZ2lzdHJ5LnJlZwotVEVTVF9GSUxFU19ESVJFQ1RPUlkgPSAkKHRvcF9zcmNkaXIpL3Rlc3RzL2ZpbGVzCi1SRUdJU1RSWV9FTlZJUk9OTUVOVCA9IFwKLQlHU1RfUkVHSVNUUllfMV8wPSQoQ0hFQ0tfUkVHSVNUUlkpCi0KLQotIyBmYWtlIGRldmljZSBkcml2ZXJzOiB3ZSBjb3VsZCBydW4gaGFyZHdhcmUgZWxlbWVudCB0ZXN0cyBhZ2FpbnN0IGR1bW15IGRyaXZlcnMKLSMgdjRsMjogdml2byAocGFydCBvZiBub3JtYWwga2VybmVsKQotIyAgIG1vZHByb2JlIHZpdm87Ci0jICAgZ3N0LWxhdW5jaCB2NGwyc3JjIGRldmljZT0iL2Rldi92aWRlbzEiICEgeHZpbWFnZXNpbms7Ci0jICAgcm1tb2Qgdml2bwotIwotIyBhbHNhOiBzbmQtZHVtbXkgKHBhcnQgb2Ygbm9ybWFsIGFsc2EsIG5vdCByZW1vdmFibGUpCi0jICAgbW9kcHJvYmUgc25kLWR1bW15OwotIyAgIGdzdC1sYXVuY2ggYWxzYXNyYyBkZXZpY2U9Imh3OjIiICEgZmFrZXNpbmsKLSMgICBnc3QtbGF1bmNoIGZha2VzcmMgISBhbHNhc2luayBkZXZpY2U9Imh3OjIiCi0jCi0jIG5lZWQgYSB3YXkgdG8gZmlndXJlIG91dCB2YWx1ZSBmb3IgdGhlIGRldmljZSBwcm9wZXJ0eQotCi0jIHRoZSBjb3JlIGR1bXBzIG9mIHNvbWUgbWFjaGluZXMgaGF2ZSBQSURzIGFwcGVuZGVkCi1DTEVBTkZJTEVTID0gY29yZS4qIHRlc3QtcmVnaXN0cnkuKgotQFVTRV9QTFVHSU5fQUxQSEFfRkFMU0VAY2hlY2tfYWxwaGEgPSAKLUBVU0VfUExVR0lOX0FMUEhBX1RSVUVAY2hlY2tfYWxwaGEgPSBcCi1AVVNFX1BMVUdJTl9BTFBIQV9UUlVFQAllbGVtZW50cy9hbHBoYWNvbG9yIFwKLUBVU0VfUExVR0lOX0FMUEhBX1RSVUVACWVsZW1lbnRzL2FscGhhCi0KLUBVU0VfUExVR0lOX0FVRElPRlhfRkFMU0VAY2hlY2tfYXVkaW9meCA9IAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQGNoZWNrX2F1ZGlvZnggPSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvYW1wbGlmeSBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvY2hlYmJhbmQgXAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQAllbGVtZW50cy9hdWRpb2NoZWJsaW1pdCBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvZHluYW1pYyBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvZWNobyBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyIFwKLUBVU0VfUExVR0lOX0FVRElPRlhfVFJVRUAJZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIgXAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQAllbGVtZW50cy9hdWRpb2ludmVydCBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvcGFub3JhbWEgXAotQFVTRV9QTFVHSU5fQVVESU9GWF9UUlVFQAllbGVtZW50cy9hdWRpb3dzaW5jYmFuZCBcCi1AVVNFX1BMVUdJTl9BVURJT0ZYX1RSVUVACWVsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdAotCi1AVVNFX1BMVUdJTl9BVURJT1BBUlNFUlNfRkFMU0VAY2hlY2tfYXVkaW9wYXJzZXJzID0gCi1AVVNFX1BMVUdJTl9BVURJT1BBUlNFUlNfVFJVRUBjaGVja19hdWRpb3BhcnNlcnMgPSBcCi1AVVNFX1BMVUdJTl9BVURJT1BBUlNFUlNfVFJVRUAJZWxlbWVudHMvYWFjcGFyc2UgXAotQFVTRV9QTFVHSU5fQVVESU9QQVJTRVJTX1RSVUVACWVsZW1lbnRzL2FjM3BhcnNlIFwKLUBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFQAllbGVtZW50cy9hbXJwYXJzZSBcCi1AVVNFX1BMVUdJTl9BVURJT1BBUlNFUlNfVFJVRUAJZWxlbWVudHMvZmxhY3BhcnNlIFwKLUBVU0VfUExVR0lOX0FVRElPUEFSU0VSU19UUlVFQAllbGVtZW50cy9tcGVnYXVkaW9wYXJzZSBcCi1AVVNFX1BMVUdJTl9BVURJT1BBUlNFUlNfVFJVRUAJZWxlbWVudHMvd2F2cGFja3BhcnNlCi0KLUBVU0VfUExVR0lOX0FVVE9ERVRFQ1RfRkFMU0VAY2hlY2tfYXV0b2RldGVjdCA9IAotQFVTRV9QTFVHSU5fQVVUT0RFVEVDVF9UUlVFQGNoZWNrX2F1dG9kZXRlY3QgPSBlbGVtZW50cy9hdXRvZGV0ZWN0Ci1AVVNFX1BMVUdJTl9BVklfRkFMU0VAY2hlY2tfYXZpID0gCi1AVVNFX1BMVUdJTl9BVklfVFJVRUBjaGVja19hdmkgPSBcCi1AVVNFX1BMVUdJTl9BVklfVFJVRUAgIGVsZW1lbnRzL2F2aW11eCBcCi1AVVNFX1BMVUdJTl9BVklfVFJVRUAgIGVsZW1lbnRzL2F2aXN1YnRpdGxlCi0KLUBVU0VfUExVR0lOX0RFQlVHVVRJTFNfRkFMU0VAY2hlY2tfZGVidWd1dGlscyA9IAotQFVTRV9QTFVHSU5fREVCVUdVVElMU19UUlVFQGNoZWNrX2RlYnVndXRpbHMgPSBlbGVtZW50cy9jYXBzc2V0dGVyCi1AVVNFX1BMVUdJTl9ERUlOVEVSTEFDRV9GQUxTRUBjaGVja19kZWludGVybGFjZSA9IAotQFVTRV9QTFVHSU5fREVJTlRFUkxBQ0VfVFJVRUBjaGVja19kZWludGVybGFjZSA9IGVsZW1lbnRzL2RlaW50ZXJsYWNlCi1AVVNFX1BMVUdJTl9EVE1GX0ZBTFNFQGNoZWNrX2R0bWYgPSAKLUBVU0VfUExVR0lOX0RUTUZfVFJVRUBjaGVja19kdG1mID0gZWxlbWVudHMvZHRtZgotQFVTRV9QTFVHSU5fRUZGRUNUVl9GQUxTRUBjaGVja19lZmZlY3R2ID0gCi1AVVNFX1BMVUdJTl9FRkZFQ1RWX1RSVUVAY2hlY2tfZWZmZWN0diA9IHBpcGVsaW5lcy9lZmZlY3R2Ci1AVVNFX1BMVUdJTl9FUVVBTElaRVJfRkFMU0VAY2hlY2tfZXF1YWxpemVyID0gCi1AVVNFX1BMVUdJTl9FUVVBTElaRVJfVFJVRUBjaGVja19lcXVhbGl6ZXIgPSBlbGVtZW50cy9lcXVhbGl6ZXIKLUBVU0VfRkxBQ19GQUxTRUBjaGVja19mbGFjID0gCi1AVVNFX0ZMQUNfVFJVRUBjaGVja19mbGFjID0gcGlwZWxpbmVzL2ZsYWNkZWMKLUBVU0VfUExVR0lOX0ZMVl9GQUxTRUBjaGVja19mbHYgPSAKLUBVU0VfUExVR0lOX0ZMVl9UUlVFQGNoZWNrX2ZsdiA9IFwKLUBVU0VfUExVR0lOX0ZMVl9UUlVFQCAgICAgICAgZWxlbWVudHMvZmx2ZGVtdXggXAotQFVTRV9QTFVHSU5fRkxWX1RSVUVAICAgICAgICBlbGVtZW50cy9mbHZtdXgKLQotQFVTRV9QTFVHSU5fSVNPTVA0X0ZBTFNFQGNoZWNrX2lzb21wNCA9IAotQFVTRV9QTFVHSU5fSVNPTVA0X1RSVUVAY2hlY2tfaXNvbXA0ID0gXAotQFVTRV9QTFVHSU5fSVNPTVA0X1RSVUVACWVsZW1lbnRzL3F0bXV4IFwKLUBVU0VfUExVR0lOX0lTT01QNF9UUlVFQAllbGVtZW50cy9xdGRlbXV4Ci0KLUBVU0VfUExVR0lOX0xBV19GQUxTRUBjaGVja19sYXcgPSAKLUBVU0VfUExVR0lOX0xBV19UUlVFQGNoZWNrX2xhdyA9IFwKLUBVU0VfUExVR0lOX0xBV19UUlVFQAllbGVtZW50cy9tdWxhd2RlYyBcCi1AVVNFX1BMVUdJTl9MQVdfVFJVRUAJZWxlbWVudHMvbXVsYXdlbmMKLQotQFVTRV9HREtfUElYQlVGX0ZBTFNFQGNoZWNrX2dka3BpeGJ1ZiA9IAotQFVTRV9HREtfUElYQlVGX1RSVUVAY2hlY2tfZ2RrcGl4YnVmID0gZWxlbWVudHMvZ2RrcGl4YnVmc2luayBlbGVtZW50cy9nZGtwaXhidWZvdmVybGF5Ci1AVVNFX1BMVUdJTl9JQ1lERU1VWF9GQUxTRUBjaGVja19pY3lkZW11eCA9IAotQFVTRV9QTFVHSU5fSUNZREVNVVhfVFJVRUBjaGVja19pY3lkZW11eCA9IGVsZW1lbnRzL2ljeWRlbXV4Ci1AVVNFX1BMVUdJTl9JRDNERU1VWF9GQUxTRUBjaGVja19pZDNkZW11eCA9IAotQFVTRV9QTFVHSU5fSUQzREVNVVhfVFJVRUBjaGVja19pZDNkZW11eCA9IGVsZW1lbnRzL2lkM2RlbXV4Ci1AVVNFX1BMVUdJTl9JTUFHRUZSRUVaRV9GQUxTRUBjaGVja19pbWFnZWZyZWV6ZSA9IAotQFVTRV9QTFVHSU5fSU1BR0VGUkVFWkVfVFJVRUBjaGVja19pbWFnZWZyZWV6ZSA9IGVsZW1lbnRzL2ltYWdlZnJlZXplCi1AVVNFX1BMVUdJTl9JTlRFUkxFQVZFX0ZBTFNFQGNoZWNrX2ludGVybGVhdmUgPSAKLUBVU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRUBjaGVja19pbnRlcmxlYXZlID0gXAotQFVTRV9QTFVHSU5fSU5URVJMRUFWRV9UUlVFQCAgICAgICAgZWxlbWVudHMvZGVpbnRlcmxlYXZlIFwKLUBVU0VfUExVR0lOX0lOVEVSTEVBVkVfVFJVRUAgICAgICAgIGVsZW1lbnRzL2ludGVybGVhdmUKLQotQFVTRV9KUEVHX0ZBTFNFQGNoZWNrX2pwZWcgPSAKLUBVU0VfSlBFR19UUlVFQGNoZWNrX2pwZWcgPSBcCi1AVVNFX0pQRUdfVFJVRUAgICAgICAgIGVsZW1lbnRzL2pwZWdkZWMgXAotQFVTRV9KUEVHX1RSVUVAICAgICAgICBlbGVtZW50cy9qcGVnZW5jCi0KLUBVU0VfUExVR0lOX0xFVkVMX0ZBTFNFQGNoZWNrX2xldmVsID0gCi1AVVNFX1BMVUdJTl9MRVZFTF9UUlVFQGNoZWNrX2xldmVsID0gZWxlbWVudHMvbGV2ZWwKLUBVU0VfUExVR0lOX01BVFJPU0tBX0ZBTFNFQGNoZWNrX21hdHJvc2thID0gCi1AVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFQGNoZWNrX21hdHJvc2thID0gXAotQFVTRV9QTFVHSU5fTUFUUk9TS0FfVFJVRUAJZWxlbWVudHMvbWF0cm9za2FkZW11eCBcCi1AVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFQAllbGVtZW50cy9tYXRyb3NrYW11eCBcCi1AVVNFX1BMVUdJTl9NQVRST1NLQV9UUlVFQAllbGVtZW50cy9tYXRyb3NrYXBhcnNlCi0KLUBVU0VfUExVR0lOX01VTFRJRklMRV9GQUxTRUBjaGVja19tdWx0aWZpbGUgPSAKLUBVU0VfUExVR0lOX01VTFRJRklMRV9UUlVFQGNoZWNrX211bHRpZmlsZSA9IGVsZW1lbnRzL211bHRpZmlsZSBlbGVtZW50cy9zcGxpdG11eAotQFVTRV9QTFVHSU5fUkVQTEFZR0FJTl9GQUxTRUBjaGVja19yZXBsYXlnYWluID0gCi1AVVNFX1BMVUdJTl9SRVBMQVlHQUlOX1RSVUVAY2hlY2tfcmVwbGF5Z2FpbiA9IFwKLUBVU0VfUExVR0lOX1JFUExBWUdBSU5fVFJVRUAJZWxlbWVudHMvcmdhbmFseXNpcyBcCi1AVVNFX1BMVUdJTl9SRVBMQVlHQUlOX1RSVUVACWVsZW1lbnRzL3JnbGltaXRlciBcCi1AVVNFX1BMVUdJTl9SRVBMQVlHQUlOX1RSVUVACWVsZW1lbnRzL3Jndm9sdW1lCi0KLUBVU0VfUExVR0lOX1JUUF9GQUxTRUBjaGVja19ydHAgPSAKLUBVU0VfUExVR0lOX1JUUF9UUlVFQGNoZWNrX3J0cCA9IFwKLUBVU0VfUExVR0lOX1JUUF9UUlVFQAllbGVtZW50cy9ydHAtcGF5bG9hZGluZyBcCi1AVVNFX1BMVUdJTl9SVFBfVFJVRUAJZWxlbWVudHMvcnRwaDI2MSBcCi1AVVNFX1BMVUdJTl9SVFBfVFJVRUAJZWxlbWVudHMvcnRwaDI2MyBcCi1AVVNFX1BMVUdJTl9SVFBfVFJVRUAJZWxlbWVudHMvcnRwdnA5Ci0KLUBVU0VfUExVR0lOX1JUUE1BTkFHRVJfRkFMU0VAY2hlY2tfcnRwbWFuYWdlciA9IAotQFVTRV9QTFVHSU5fUlRQTUFOQUdFUl9UUlVFQGNoZWNrX3J0cG1hbmFnZXIgPSBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cGF1eCBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cGJpbiBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdCBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cGNvbGxpc2lvbiBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlciBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cG11eCBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cHJ0eCBcCi1AVVNFX1BMVUdJTl9SVFBNQU5BR0VSX1RSVUVACWVsZW1lbnRzL3J0cHNlc3Npb24KLQotQFVTRV9TT1VQX0ZBTFNFQGNoZWNrX3NvdXAgPSAKLUBVU0VfU09VUF9UUlVFQGNoZWNrX3NvdXAgPSBlbGVtZW50cy9zb3VwaHR0cHNyYwotQFVTRV9QTFVHSU5fU1BFQ1RSVU1fRkFMU0VAY2hlY2tfc3BlY3RydW0gPSAKLUBVU0VfUExVR0lOX1NQRUNUUlVNX1RSVUVAY2hlY2tfc3BlY3RydW0gPSBlbGVtZW50cy9zcGVjdHJ1bQotQFVTRV9TVU5BVURJT19GQUxTRUBjaGVja19zdW5hdWRpbyA9IAotQFVTRV9TVU5BVURJT19UUlVFQGNoZWNrX3N1bmF1ZGlvID0gZWxlbWVudHMvc3VuYXVkaW8KLUBVU0VfUExVR0lOX1NIQVBFV0lQRV9GQUxTRUBjaGVja19zaGFwZXdpcGUgPSAKLUBVU0VfUExVR0lOX1NIQVBFV0lQRV9UUlVFQGNoZWNrX3NoYXBld2lwZSA9IGVsZW1lbnRzL3NoYXBld2lwZQotQFVTRV9UQUdMSUJfRkFMU0VAY2hlY2tfdGFnbGliID0gCi1AVVNFX1RBR0xJQl9UUlVFQGNoZWNrX3RhZ2xpYiA9IFwKLUBVU0VfVEFHTElCX1RSVUVACWVsZW1lbnRzL2lkM3YybXV4IFwKLUBVU0VfVEFHTElCX1RSVUVACWVsZW1lbnRzL2FwZXYybXV4Ci0KLUBVU0VfUExVR0lOX1VEUF9GQUxTRUBjaGVja191ZHAgPSAKLUBVU0VfUExVR0lOX1VEUF9UUlVFQGNoZWNrX3VkcCA9IFwKLUBVU0VfUExVR0lOX1VEUF9UUlVFQCAgICAgICAgZWxlbWVudHMvdWRwc2luayBcCi1AVVNFX1BMVUdJTl9VRFBfVFJVRUAgICAgICAgIGVsZW1lbnRzL3VkcHNyYwotCi1AVVNFX1BMVUdJTl9WSURFT0JPWF9GQUxTRUBjaGVja192aWRlb2JveCA9IAotQFVTRV9QTFVHSU5fVklERU9CT1hfVFJVRUBjaGVja192aWRlb2JveCA9IGVsZW1lbnRzL3ZpZGVvYm94Ci1AVVNFX1BMVUdJTl9WSURFT0NST1BfRkFMU0VAY2hlY2tfdmlkZW9jcm9wID0gCi1AVVNFX1BMVUdJTl9WSURFT0NST1BfVFJVRUBjaGVja192aWRlb2Nyb3AgPSBcCi1AVVNFX1BMVUdJTl9WSURFT0NST1BfVFJVRUAJZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wIFwKLUBVU0VfUExVR0lOX1ZJREVPQ1JPUF9UUlVFQAllbGVtZW50cy92aWRlb2Nyb3AKLQotQFVTRV9QTFVHSU5fVklERU9GSUxURVJfRkFMU0VAY2hlY2tfdmlkZW9maWx0ZXIgPSAKLUBVU0VfUExVR0lOX1ZJREVPRklMVEVSX1RSVUVAY2hlY2tfdmlkZW9maWx0ZXIgPSBlbGVtZW50cy92aWRlb2ZpbHRlcgotQFVTRV9QTFVHSU5fVklERU9NSVhFUl9GQUxTRUBjaGVja192aWRlb21peGVyID0gCi1AVVNFX1BMVUdJTl9WSURFT01JWEVSX1RSVUVAY2hlY2tfdmlkZW9taXhlciA9IGVsZW1lbnRzL3ZpZGVvbWl4ZXIKLUBVU0VfVlBYX0ZBTFNFQGNoZWNrX3ZweCA9IAotQFVTRV9WUFhfVFJVRUBjaGVja192cHggPSBlbGVtZW50cy92cDhlbmMgZWxlbWVudHMvdnA4ZGVjIGVsZW1lbnRzL3ZwOWVuYwotQFVTRV9QTFVHSU5fV0FWRU5DX0ZBTFNFQGNoZWNrX3dhdmVuYyA9IAotQFVTRV9QTFVHSU5fV0FWRU5DX1RSVUVAY2hlY2tfd2F2ZW5jID0gcGlwZWxpbmVzL3dhdmVuYwotQFVTRV9XQVZQQUNLX0ZBTFNFQGNoZWNrX3dhdnBhY2sgPSAKLUBVU0VfV0FWUEFDS19UUlVFQGNoZWNrX3dhdnBhY2sgPSBcCi1AVVNFX1dBVlBBQ0tfVFJVRUAgICAgICAgZWxlbWVudHMvd2F2cGFja2RlYyBcCi1AVVNFX1dBVlBBQ0tfVFJVRUAgICAgICAgZWxlbWVudHMvd2F2cGFja2VuYyBcCi1AVVNFX1dBVlBBQ0tfVFJVRUAgICAgICAgcGlwZWxpbmVzL3dhdnBhY2sKLQotQFVTRV9QTFVHSU5fV0FWUEFSU0VfRkFMU0VAY2hlY2tfd2F2cGFyc2UgPSAKLUBVU0VfUExVR0lOX1dBVlBBUlNFX1RSVUVAY2hlY2tfd2F2cGFyc2UgPSBlbGVtZW50cy93YXZwYXJzZQotQFVTRV9QTFVHSU5fWTRNX0ZBTFNFQGNoZWNrX3k0bSA9IAotQFVTRV9QTFVHSU5fWTRNX1RSVUVAY2hlY2tfeTRtID0gZWxlbWVudHMveTRtZW5jCi1ASEFWRV9PUkNfRkFMU0VAY2hlY2tfb3JjID0gCi1ASEFWRV9PUkNfVFJVRUBjaGVja19vcmMgPSBvcmMvZGVpbnRlcmxhY2Ugb3JjL3ZpZGVvbWl4ZXIgb3JjL3ZpZGVvYm94Ci1WQUxHUklORF9UT19GSVggPSBcCi0JZWxlbWVudHMvcnRwLXBheWxvYWRpbmcKLQotVEVTVFMgPSAkKGNoZWNrX1BST0dSQU1TKQotQU1fQ0ZMQUdTID0gJChHU1RfT0JKX0NGTEFHUykgJChHU1RfQ0hFQ0tfQ0ZMQUdTKSAkKENIRUNLX0NGTEFHUykgXAotCSQoR1NUX09QVElPTl9DRkxBR1MpICQoR1NUX0NGTEFHUykgLURHU1RfVEVTVF9GSUxFU19QQVRIPSJcIiQoVEVTVF9GSUxFU19ESVJFQ1RPUlkpXCIiIFwKLQktREdTVF9DSEVDS19URVNUX0VOVklST05NRU5UX0JFQUNPTj0iXCJHU1RfUExVR0lOX0xPQURJTkdfV0hJVEVMSVNUXCIiIFwKLQktVUdfRElTQUJMRV9BU1NFUlQgLVVHX0RJU0FCTEVfQ0FTVF9DSEVDS1MgJChQVEhSRUFEX0NGTEFHUykKLQotTERBREQgPSAkKEdTVF9PQkpfTElCUykgJChHU1RfQ0hFQ0tfTElCUykgJChDSEVDS19MSUJTKQotCi0jIHZhbGdyaW5kIHRlc3RpbmcKLSMgdmlkZW9jcm9wIGRpc2FibGVkIHNpbmNlIGl0IHRha2VzIHdheSB0b28gbG9uZyBpbiB2YWxncmluZAotVkFMR1JJTkRfVEVTVFNfRElTQUJMRSA9IFwKLQllbGVtZW50cy92aWRlb2Nyb3AgXAotCSQoVkFMR1JJTkRfVE9fRklYKQotCi1TVVBQUkVTU0lPTlMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9nc3Quc3VwcCAkKHNyY2RpcikvZ3N0LXBsdWdpbnMtZ29vZC5zdXBwCi0KLSMgcGFyc2VyIHVuaXQgdGVzdCBjb252ZW5pZW5jZSBsaWIKLW5vaW5zdF9MVExJQlJBUklFUyA9IGxpYnBhcnNlci5sYQotbGlicGFyc2VyX2xhX1NPVVJDRVMgPSBlbGVtZW50cy9wYXJzZXIuYyBlbGVtZW50cy9wYXJzZXIuaAotbGlicGFyc2VyX2xhX0NGTEFHUyA9IFwKLQktSSQodG9wX3NyY2RpcikvdGVzdHMvY2hlY2sgXAotCSQoR1NUX0NIRUNLX0NGTEFHUykgJChHU1RfT1BUSU9OX0NGTEFHUykgLURHU1RfVVNFX1VOU1RBQkxFX0FQSQotCi1lbGVtZW50c19hYWNwYXJzZV9MREFERCA9IGxpYnBhcnNlci5sYSAkKExEQUREKQotZWxlbWVudHNfYWMzcGFyc2VfTERBREQgPSBsaWJwYXJzZXIubGEgJChMREFERCkKLWVsZW1lbnRzX2FtcnBhcnNlX0xEQUREID0gbGlicGFyc2VyLmxhICQoTERBREQpCi1lbGVtZW50c19mbGFjcGFyc2VfTERBREQgPSBsaWJwYXJzZXIubGEgJChMREFERCkKLWVsZW1lbnRzX2ZsdmRlbXV4X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2ZsdmRlbXV4X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dGFnLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfbXBlZ2F1ZGlvcGFyc2VfTERBREQgPSBsaWJwYXJzZXIubGEgJChMREFERCkKLWVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9MREFERCA9ICQoTERBREQpCi1lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfYXVkaW9jaGViYmFuZF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb2NoZWJiYW5kX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19hdWRpb2NoZWJsaW1pdF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb2NoZWJsaW1pdF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfYXVkaW9keW5hbWljX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvZHluYW1pY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfYXVkaW9lY2hvX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvZWNob19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfYXVkaW9pbnZlcnRfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfYXVkaW9pbnZlcnRfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfTERBREQgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgXAotCSQoR1NUX0NPTlRST0xMRVJfTElCUykgJChMREFERCkKLQotZWxlbWVudHNfYXVkaW9wYW5vcmFtYV9DRkxBR1MgPSBcCi0JJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NPTlRST0xMRVJfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotCi1lbGVtZW50c19hdWRpb3dzaW5jYmFuZF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19hdWRpb3dzaW5jYmFuZF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfYXV0b2RldGVjdF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfYXV0b2RldGVjdF9MREFERCA9ICQoR1NUX0JBU0VfTElCUykgJChMREFERCkKLWVsZW1lbnRzX2VxdWFsaXplcl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19lcXVhbGl6ZXJfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX3JnYW5hbHlzaXNfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcmdhbmFseXNpc19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfcmdsaW1pdGVyX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3JnbGltaXRlcl9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfcmd2b2x1bWVfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcmd2b2x1bWVfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX3NwZWN0cnVtX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3NwZWN0cnVtX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19hbHBoYWNvbG9yX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2FscGhhX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2RlaW50ZXJsYWNlX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2RlaW50ZXJsYWNlX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19kdG1mX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpIFwKLQkkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLQotZWxlbWVudHNfZHRtZl9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC1AR1NUX0FQSV9WRVJTSU9OQCBcCi0gICAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19kZWludGVybGVhdmVfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfZGVpbnRlcmxlYXZlX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19pbnRlcmxlYXZlX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2ludGVybGVhdmVfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhdWRpby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX2xldmVsX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2xldmVsX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19pbWFnZWZyZWV6ZV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19pbWFnZWZyZWV6ZV9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoTERBREQpCi1lbGVtZW50c19qcGVnZGVjX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdJT19DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfanBlZ2RlY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGFwcC0kKEdTVF9BUElfVkVSU0lPTikgLWxnc3RwYnV0aWxzLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9CQVNFX0xJQlMpICQoR0lPX0xJQlMpICQoTERBREQpCi1lbGVtZW50c19qcGVnZW5jX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX2pwZWdlbmNfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RhcHAtJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChMREFERCkKLWVsZW1lbnRzX21hdHJvc2thbXV4X0xEQUREID0gJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKSAkKExJQk0pCi1lbGVtZW50c19tdWxhd2RlY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfbXVsYXdlbmNfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX211bHRpZmlsZV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfbXVsdGlmaWxlX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0xJQlMpICQoTERBREQpICQoTElCTSkKLWVsZW1lbnRzX3F0bXV4X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19xdG11eF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHBidXRpbHMtQEdTVF9BUElfVkVSU0lPTkAgXAotICAgICAgICAgICAgICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChHU1RfQ0hFQ0tfTElCUykKLQotZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgXAotCSQoV0FSTklOR19DRkxBR1MpICQoRVJST1JfQ0ZMQUdTKSAkKEdTVF9DSEVDS19DRkxBR1MpICQoQU1fQ0ZMQUdTKQotCi1lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3RfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotICAgICAgICAgICAgIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSBcCi0gICAgICAgICAgICAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdTVF9DSEVDS19MSUJTKSAkKExEQUREKQotCi1lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3RfU09VUkNFUyA9IGVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jCi1lbGVtZW50c19ydHBoMjYxX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3J0cGgyNjFfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RydHAtJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0JBU0VfTElCUykgJChMREFERCkKLWVsZW1lbnRzX3J0cGgyNjNfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwaDI2M19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKQotZWxlbWVudHNfcnRwbXV4X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3J0cG11eF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChHU1RfQkFTRV9MSUJTKSAkKExEQUREKQotZWxlbWVudHNfc291cGh0dHBzcmNfQ0ZMQUdTID0gJChTT1VQX0NGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19zb3VwaHR0cHNyY19MREFERCA9ICQoU09VUF9MSUJTKSAkKExEQUREKQotZWxlbWVudHNfc3VuYXVkaW9fQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9DRkxBR1MpCi0KLWVsZW1lbnRzX3N1bmF1ZGlvX0xEQUREID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSBcCi0JJChMREFERCkKLQotZWxlbWVudHNfdWRwc3JjX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKEdJT19DRkxBR1MpCi1lbGVtZW50c191ZHBzcmNfTERBREQgPSAkKExEQUREKSAkKEdJT19MSUJTKQotZWxlbWVudHNfdmlkZW9jcm9wX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX3ZpZGVvY3JvcF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfdmlkZW9maWx0ZXJfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfdmlkZW9maWx0ZXJfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3R2aWRlby0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLWVsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlcl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RydHAtJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1lbGVtZW50c19ydHBydHhfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChDRkxBR1MpICQoQU1fQ0ZMQUdTKQotZWxlbWVudHNfcnRwcnR4X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfcnRwc2Vzc2lvbl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19ydHBzZXNzaW9uX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX05FVF9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChHSU9fTElCUykgJChMREFERCkKLWVsZW1lbnRzX3J0cGNvbGxpc2lvbl9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1lbGVtZW50c19ydHBjb2xsaXNpb25fTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgJChHU1RfTkVUX0xJQlMpIC1sZ3N0cnRwLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdJT19MSUJTKSAkKExEQUREKQotZWxlbWVudHNfcnRwYXV4X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3J0cGF1eF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHJ0cC0kKEdTVF9BUElfVkVSU0lPTikgJChMREFERCkKLQotIyBGSVhNRTogY29uZmlndXJlIHNob3VsZCBjaGVjayBmb3IgZ2RrLXBpeGJ1ZiBub3QgZ3RrCi0jIG9ubHkgbmVlZCB2aWRlby5oIGhlYWRlciwgbm90IHRoZSBsaWIKLWVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfQ0ZMQUdTID0gXAotCSQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykgJChHREtfUElYQlVGX0NGTEFHUykKLQotZWxlbWVudHNfZ2RrcGl4YnVmc2lua19MREFERCA9IFwKLQkkKExEQUREKSAkKEdES19QSVhCVUZfTElCUykKLQotZWxlbWVudHNfdmlkZW9taXhlcl9MREFERCA9ICQoTERBREQpICAkKEdTVF9CQVNFX0xJQlMpCi1lbGVtZW50c192aWRlb21peGVyX0NGTEFHUyA9ICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1waXBlbGluZXNfZmxhY2RlY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1waXBlbGluZXNfZmxhY2RlY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGF1ZGlvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotZWxlbWVudHNfdnA5ZW5jX0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0NGTEFHUykKLWVsZW1lbnRzX3ZwOWVuY19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKExEQUREKQotcGlwZWxpbmVzX3dhdmVuY19DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1waXBlbGluZXNfd2F2ZW5jX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0YXVkaW8tJChHU1RfQVBJX1ZFUlNJT04pICQoTERBREQpCi1waXBlbGluZXNfd2F2cGFja19MREFERCA9ICQoTERBREQpICQoR1NUX0JBU0VfTElCUykKLXBpcGVsaW5lc193YXZwYWNrX0NGTEFHUyA9ICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9DRkxBR1MpCi1vcmNfZGVpbnRlcmxhY2VfQ0ZMQUdTID0gJChPUkNfQ0ZMQUdTKQotb3JjX2RlaW50ZXJsYWNlX0xEQUREID0gJChPUkNfTElCUykgLWxvcmMtdGVzdC0wLjQKLW5vZGlzdF9vcmNfZGVpbnRlcmxhY2VfU09VUkNFUyA9IG9yYy9kZWludGVybGFjZS5jCi1vcmNfdmlkZW9taXhlcl9DRkxBR1MgPSAkKE9SQ19DRkxBR1MpCi1vcmNfdmlkZW9taXhlcl9MREFERCA9ICQoT1JDX0xJQlMpIC1sb3JjLXRlc3QtMC40Ci1ub2Rpc3Rfb3JjX3ZpZGVvbWl4ZXJfU09VUkNFUyA9IG9yYy92aWRlb21peGVyLmMKLW9yY192aWRlb2JveF9DRkxBR1MgPSAkKE9SQ19DRkxBR1MpCi1vcmNfdmlkZW9ib3hfTERBREQgPSAkKE9SQ19MSUJTKSAtbG9yYy10ZXN0LTAuNAotbm9kaXN0X29yY192aWRlb2JveF9TT1VSQ0VTID0gb3JjL3ZpZGVvYm94LmMKLUVYVFJBX0RJU1QgPSBcCi0JZ3N0LXBsdWdpbnMtZ29vZC5zdXBwCVwKLQllbGVtZW50cy9xdGRlbXV4LmgKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLmxvZyAubyAub2JqIC50ZXN0IC50ZXN0JChFWEVFWFQpIC50cnMKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vY2hlY2subWFrICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2NoZWNrL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2NoZWNrL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLSQodG9wX3NyY2RpcikvY29tbW9uL2NoZWNrLm1hayAkKGFtX19lbXB0eSk6Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVM6Ci0JLXRlc3QgLXogIiQobm9pbnN0X0xUTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTFRMSUJSQVJJRVMpCi0JQGxpc3Q9JyQobm9pbnN0X0xUTElCUkFSSUVTKSc7IFwKLQlsb2NzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgXAotCSAgICAgIHNlZCAnc3xeW14vXSokJHwufDsgc3wvW14vXSokJHx8OyBzfCQkfC9zb19sb2NhdGlvbnN8JyB8IFwKLQkgICAgICBzb3J0IC11YDsgXAotCXRlc3QgLXogIiQkbG9jcyIgfHwgeyBcCi0JICBlY2hvIHJtIC1mICQke2xvY3N9OyBcCi0JICBybSAtZiAkJHtsb2NzfTsgXAotCX0KLWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSBlbGVtZW50cwotCUA6ID4gZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi1lbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIGVsZW1lbnRzLyQoREVQRElSKQotCUA6ID4gZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotZWxlbWVudHMvbGlicGFyc2VyX2xhLXBhcnNlci5sbzogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWxpYnBhcnNlci5sYTogJChsaWJwYXJzZXJfbGFfT0JKRUNUUykgJChsaWJwYXJzZXJfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnBhcnNlcl9sYV9ERVBFTkRFTkNJRVMpIAotCSQoQU1fVl9DQ0xEKSQobGlicGFyc2VyX2xhX0xJTkspICAkKGxpYnBhcnNlcl9sYV9PQkpFQ1RTKSAkKGxpYnBhcnNlcl9sYV9MSUJBREQpICQoTElCUykKLQotY2xlYW4tY2hlY2tQUk9HUkFNUzoKLQlAbGlzdD0nJChjaGVja19QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLWVsZW1lbnRzL2FhY3BhcnNlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2FhY3BhcnNlJChFWEVFWFQpOiAkKGVsZW1lbnRzX2FhY3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfYWFjcGFyc2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2FhY3BhcnNlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2FhY3BhcnNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2FhY3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfYWFjcGFyc2VfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2FjM3BhcnNlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2FjM3BhcnNlJChFWEVFWFQpOiAkKGVsZW1lbnRzX2FjM3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfYWMzcGFyc2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2FjM3BhcnNlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2FjM3BhcnNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2FjM3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfYWMzcGFyc2VfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2FscGhhLWFscGhhLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2FscGhhJChFWEVFWFQpOiAkKGVsZW1lbnRzX2FscGhhX09CSkVDVFMpICQoZWxlbWVudHNfYWxwaGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2FscGhhX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2FscGhhJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19hbHBoYV9MSU5LKSAkKGVsZW1lbnRzX2FscGhhX09CSkVDVFMpICQoZWxlbWVudHNfYWxwaGFfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2FscGhhY29sb3ItYWxwaGFjb2xvci4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYWxwaGFjb2xvciQoRVhFRVhUKTogJChlbGVtZW50c19hbHBoYWNvbG9yX09CSkVDVFMpICQoZWxlbWVudHNfYWxwaGFjb2xvcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYWxwaGFjb2xvcl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9hbHBoYWNvbG9yJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19hbHBoYWNvbG9yX0xJTkspICQoZWxlbWVudHNfYWxwaGFjb2xvcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX2FscGhhY29sb3JfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2FtcnBhcnNlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2FtcnBhcnNlJChFWEVFWFQpOiAkKGVsZW1lbnRzX2FtcnBhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfYW1ycGFyc2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2FtcnBhcnNlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2FtcnBhcnNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2FtcnBhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfYW1ycGFyc2VfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2FwZXYybXV4LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2FwZXYybXV4JChFWEVFWFQpOiAkKGVsZW1lbnRzX2FwZXYybXV4X09CSkVDVFMpICQoZWxlbWVudHNfYXBldjJtdXhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2FwZXYybXV4X0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2FwZXYybXV4JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2FwZXYybXV4X09CSkVDVFMpICQoZWxlbWVudHNfYXBldjJtdXhfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcC1hc3BlY3RyYXRpb2Nyb3AuJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcCQoRVhFRVhUKTogJChlbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfT0JKRUNUUykgJChlbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9MSU5LKSAkKGVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW9hbXBsaWZ5LWF1ZGlvYW1wbGlmeS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYXVkaW9hbXBsaWZ5JChFWEVFWFQpOiAkKGVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F1ZGlvYW1wbGlmeSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0xJTkspICQoZWxlbWVudHNfYXVkaW9hbXBsaWZ5X09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQuJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2F1ZGlvY2hlYmJhbmQkKEVYRUVYVCk6ICQoZWxlbWVudHNfYXVkaW9jaGViYmFuZF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvY2hlYmJhbmRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmRfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvYXVkaW9jaGViYmFuZCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXVkaW9jaGViYmFuZF9MSU5LKSAkKGVsZW1lbnRzX2F1ZGlvY2hlYmJhbmRfT0JKRUNUUykgJChlbGVtZW50c19hdWRpb2NoZWJiYW5kX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYXVkaW9jaGVibGltaXQkKEVYRUVYVCk6ICQoZWxlbWVudHNfYXVkaW9jaGVibGltaXRfT0JKRUNUUykgJChlbGVtZW50c19hdWRpb2NoZWJsaW1pdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYXVkaW9jaGVibGltaXRfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvYXVkaW9jaGVibGltaXQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0X0xJTkspICQoZWxlbWVudHNfYXVkaW9jaGVibGltaXRfT0JKRUNUUykgJChlbGVtZW50c19hdWRpb2NoZWJsaW1pdF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW9keW5hbWljLWF1ZGlvZHluYW1pYy4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYXVkaW9keW5hbWljJChFWEVFWFQpOiAkKGVsZW1lbnRzX2F1ZGlvZHluYW1pY19PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvZHluYW1pY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYXVkaW9keW5hbWljX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F1ZGlvZHluYW1pYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXVkaW9keW5hbWljX0xJTkspICQoZWxlbWVudHNfYXVkaW9keW5hbWljX09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9keW5hbWljX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2VjaG8tYXVkaW9lY2hvLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9hdWRpb2VjaG8kKEVYRUVYVCk6ICQoZWxlbWVudHNfYXVkaW9lY2hvX09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9lY2hvX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19hdWRpb2VjaG9fREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvYXVkaW9lY2hvJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19hdWRpb2VjaG9fTElOSykgJChlbGVtZW50c19hdWRpb2VjaG9fT0JKRUNUUykgJChlbGVtZW50c19hdWRpb2VjaG9fTERBREQpICQoTElCUykKLWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyJChFWEVFWFQpOiAkKGVsZW1lbnRzX2F1ZGlvZmlyZmlsdGVyX09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9maXJmaWx0ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2F1ZGlvZmlyZmlsdGVyX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2F1ZGlvZmlyZmlsdGVyX09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9maXJmaWx0ZXJfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyJChFWEVFWFQpOiAkKGVsZW1lbnRzX2F1ZGlvaWlyZmlsdGVyX09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9paXJmaWx0ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2F1ZGlvaWlyZmlsdGVyX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2F1ZGlvaWlyZmlsdGVyX09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW9paXJmaWx0ZXJfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvaW52ZXJ0LWF1ZGlvaW52ZXJ0LiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9hdWRpb2ludmVydCQoRVhFRVhUKTogJChlbGVtZW50c19hdWRpb2ludmVydF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvaW52ZXJ0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19hdWRpb2ludmVydF9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9hdWRpb2ludmVydCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXVkaW9pbnZlcnRfTElOSykgJChlbGVtZW50c19hdWRpb2ludmVydF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvaW52ZXJ0X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb3Bhbm9yYW1hLWF1ZGlvcGFub3JhbWEuJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2F1ZGlvcGFub3JhbWEkKEVYRUVYVCk6ICQoZWxlbWVudHNfYXVkaW9wYW5vcmFtYV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2F1ZGlvcGFub3JhbWFfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvYXVkaW9wYW5vcmFtYSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXVkaW9wYW5vcmFtYV9MSU5LKSAkKGVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfT0JKRUNUUykgJChlbGVtZW50c19hdWRpb3Bhbm9yYW1hX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb3dzaW5jYmFuZC1hdWRpb3dzaW5jYmFuZC4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYXVkaW93c2luY2JhbmQkKEVYRUVYVCk6ICQoZWxlbWVudHNfYXVkaW93c2luY2JhbmRfT0JKRUNUUykgJChlbGVtZW50c19hdWRpb3dzaW5jYmFuZF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYXVkaW93c2luY2JhbmRfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvYXVkaW93c2luY2JhbmQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kX0xJTkspICQoZWxlbWVudHNfYXVkaW93c2luY2JhbmRfT0JKRUNUUykgJChlbGVtZW50c19hdWRpb3dzaW5jYmFuZF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYXVkaW93c2luY2xpbWl0JChFWEVFWFQpOiAkKGVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0xJTkspICQoZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X09CSkVDVFMpICQoZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19hdXRvZGV0ZWN0LWF1dG9kZXRlY3QuJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2F1dG9kZXRlY3QkKEVYRUVYVCk6ICQoZWxlbWVudHNfYXV0b2RldGVjdF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F1dG9kZXRlY3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2F1dG9kZXRlY3RfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvYXV0b2RldGVjdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfYXV0b2RldGVjdF9MSU5LKSAkKGVsZW1lbnRzX2F1dG9kZXRlY3RfT0JKRUNUUykgJChlbGVtZW50c19hdXRvZGV0ZWN0X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9hdmltdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvYXZpbXV4JChFWEVFWFQpOiAkKGVsZW1lbnRzX2F2aW11eF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2F2aW11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfYXZpbXV4X0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F2aW11eCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19hdmltdXhfT0JKRUNUUykgJChlbGVtZW50c19hdmltdXhfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2F2aXN1YnRpdGxlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2F2aXN1YnRpdGxlJChFWEVFWFQpOiAkKGVsZW1lbnRzX2F2aXN1YnRpdGxlX09CSkVDVFMpICQoZWxlbWVudHNfYXZpc3VidGl0bGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2F2aXN1YnRpdGxlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2F2aXN1YnRpdGxlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2F2aXN1YnRpdGxlX09CSkVDVFMpICQoZWxlbWVudHNfYXZpc3VidGl0bGVfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2NhcHNzZXR0ZXIuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvY2Fwc3NldHRlciQoRVhFRVhUKTogJChlbGVtZW50c19jYXBzc2V0dGVyX09CSkVDVFMpICQoZWxlbWVudHNfY2Fwc3NldHRlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfY2Fwc3NldHRlcl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9jYXBzc2V0dGVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX2NhcHNzZXR0ZXJfT0JKRUNUUykgJChlbGVtZW50c19jYXBzc2V0dGVyX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19kZWludGVybGFjZS1kZWludGVybGFjZS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvZGVpbnRlcmxhY2UkKEVYRUVYVCk6ICQoZWxlbWVudHNfZGVpbnRlcmxhY2VfT0JKRUNUUykgJChlbGVtZW50c19kZWludGVybGFjZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfZGVpbnRlcmxhY2VfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvZGVpbnRlcmxhY2UkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2RlaW50ZXJsYWNlX0xJTkspICQoZWxlbWVudHNfZGVpbnRlcmxhY2VfT0JKRUNUUykgJChlbGVtZW50c19kZWludGVybGFjZV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvZGVpbnRlcmxlYXZlJChFWEVFWFQpOiAkKGVsZW1lbnRzX2RlaW50ZXJsZWF2ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2RlaW50ZXJsZWF2ZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfZGVpbnRlcmxlYXZlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2RlaW50ZXJsZWF2ZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfZGVpbnRlcmxlYXZlX0xJTkspICQoZWxlbWVudHNfZGVpbnRlcmxlYXZlX09CSkVDVFMpICQoZWxlbWVudHNfZGVpbnRlcmxlYXZlX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19kdG1mLWR0bWYuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvZHRtZiQoRVhFRVhUKTogJChlbGVtZW50c19kdG1mX09CSkVDVFMpICQoZWxlbWVudHNfZHRtZl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfZHRtZl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9kdG1mJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19kdG1mX0xJTkspICQoZWxlbWVudHNfZHRtZl9PQkpFQ1RTKSAkKGVsZW1lbnRzX2R0bWZfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2VxdWFsaXplci1lcXVhbGl6ZXIuJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2VxdWFsaXplciQoRVhFRVhUKTogJChlbGVtZW50c19lcXVhbGl6ZXJfT0JKRUNUUykgJChlbGVtZW50c19lcXVhbGl6ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2VxdWFsaXplcl9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9lcXVhbGl6ZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2VxdWFsaXplcl9MSU5LKSAkKGVsZW1lbnRzX2VxdWFsaXplcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX2VxdWFsaXplcl9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZmxhY3BhcnNlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2ZsYWNwYXJzZSQoRVhFRVhUKTogJChlbGVtZW50c19mbGFjcGFyc2VfT0JKRUNUUykgJChlbGVtZW50c19mbGFjcGFyc2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2ZsYWNwYXJzZV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9mbGFjcGFyc2UkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZmxhY3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfZmxhY3BhcnNlX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19mbHZkZW11eC1mbHZkZW11eC4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvZmx2ZGVtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfZmx2ZGVtdXhfT0JKRUNUUykgJChlbGVtZW50c19mbHZkZW11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfZmx2ZGVtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvZmx2ZGVtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2ZsdmRlbXV4X0xJTkspICQoZWxlbWVudHNfZmx2ZGVtdXhfT0JKRUNUUykgJChlbGVtZW50c19mbHZkZW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZmx2bXV4LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2Zsdm11eCQoRVhFRVhUKTogJChlbGVtZW50c19mbHZtdXhfT0JKRUNUUykgJChlbGVtZW50c19mbHZtdXhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2Zsdm11eF9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9mbHZtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfZmx2bXV4X09CSkVDVFMpICQoZWxlbWVudHNfZmx2bXV4X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9nZGtwaXhidWZvdmVybGF5LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2dka3BpeGJ1Zm92ZXJsYXkkKEVYRUVYVCk6ICQoZWxlbWVudHNfZ2RrcGl4YnVmb3ZlcmxheV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2dka3BpeGJ1Zm92ZXJsYXlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2dka3BpeGJ1Zm92ZXJsYXlfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19nZGtwaXhidWZvdmVybGF5X09CSkVDVFMpICQoZWxlbWVudHNfZ2RrcGl4YnVmb3ZlcmxheV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9nZGtwaXhidWZzaW5rJChFWEVFWFQpOiAkKGVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfT0JKRUNUUykgJChlbGVtZW50c19nZGtwaXhidWZzaW5rX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19nZGtwaXhidWZzaW5rX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmskKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfTElOSykgJChlbGVtZW50c19nZGtwaXhidWZzaW5rX09CSkVDVFMpICQoZWxlbWVudHNfZ2RrcGl4YnVmc2lua19MREFERCkgJChMSUJTKQotZWxlbWVudHMvaWN5ZGVtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvaWN5ZGVtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfaWN5ZGVtdXhfT0JKRUNUUykgJChlbGVtZW50c19pY3lkZW11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfaWN5ZGVtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvaWN5ZGVtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfaWN5ZGVtdXhfT0JKRUNUUykgJChlbGVtZW50c19pY3lkZW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvaWQzZGVtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvaWQzZGVtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfaWQzZGVtdXhfT0JKRUNUUykgJChlbGVtZW50c19pZDNkZW11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfaWQzZGVtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvaWQzZGVtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfaWQzZGVtdXhfT0JKRUNUUykgJChlbGVtZW50c19pZDNkZW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvaWQzdjJtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvaWQzdjJtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfaWQzdjJtdXhfT0JKRUNUUykgJChlbGVtZW50c19pZDN2Mm11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfaWQzdjJtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvaWQzdjJtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfaWQzdjJtdXhfT0JKRUNUUykgJChlbGVtZW50c19pZDN2Mm11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUuJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2ltYWdlZnJlZXplJChFWEVFWFQpOiAkKGVsZW1lbnRzX2ltYWdlZnJlZXplX09CSkVDVFMpICQoZWxlbWVudHNfaW1hZ2VmcmVlemVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2ltYWdlZnJlZXplX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2ltYWdlZnJlZXplJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19pbWFnZWZyZWV6ZV9MSU5LKSAkKGVsZW1lbnRzX2ltYWdlZnJlZXplX09CSkVDVFMpICQoZWxlbWVudHNfaW1hZ2VmcmVlemVfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvaW50ZXJsZWF2ZSQoRVhFRVhUKTogJChlbGVtZW50c19pbnRlcmxlYXZlX09CSkVDVFMpICQoZWxlbWVudHNfaW50ZXJsZWF2ZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfaW50ZXJsZWF2ZV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9pbnRlcmxlYXZlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19pbnRlcmxlYXZlX0xJTkspICQoZWxlbWVudHNfaW50ZXJsZWF2ZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX2ludGVybGVhdmVfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX2pwZWdkZWMtanBlZ2RlYy4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9qcGVnZGVjJChFWEVFWFQpOiAkKGVsZW1lbnRzX2pwZWdkZWNfT0JKRUNUUykgJChlbGVtZW50c19qcGVnZGVjX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19qcGVnZGVjX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL2pwZWdkZWMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX2pwZWdkZWNfTElOSykgJChlbGVtZW50c19qcGVnZGVjX09CSkVDVFMpICQoZWxlbWVudHNfanBlZ2RlY19MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL2pwZWdlbmMkKEVYRUVYVCk6ICQoZWxlbWVudHNfanBlZ2VuY19PQkpFQ1RTKSAkKGVsZW1lbnRzX2pwZWdlbmNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX2pwZWdlbmNfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvanBlZ2VuYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfanBlZ2VuY19MSU5LKSAkKGVsZW1lbnRzX2pwZWdlbmNfT0JKRUNUUykgJChlbGVtZW50c19qcGVnZW5jX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19sZXZlbC1sZXZlbC4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9sZXZlbCQoRVhFRVhUKTogJChlbGVtZW50c19sZXZlbF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2xldmVsX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19sZXZlbF9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9sZXZlbCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfbGV2ZWxfTElOSykgJChlbGVtZW50c19sZXZlbF9PQkpFQ1RTKSAkKGVsZW1lbnRzX2xldmVsX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9tYXRyb3NrYWRlbXV4LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL21hdHJvc2thZGVtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfbWF0cm9za2FkZW11eF9PQkpFQ1RTKSAkKGVsZW1lbnRzX21hdHJvc2thZGVtdXhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX21hdHJvc2thZGVtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvbWF0cm9za2FkZW11eCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19tYXRyb3NrYWRlbXV4X09CSkVDVFMpICQoZWxlbWVudHNfbWF0cm9za2FkZW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvbWF0cm9za2FtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvbWF0cm9za2FtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfbWF0cm9za2FtdXhfT0JKRUNUUykgJChlbGVtZW50c19tYXRyb3NrYW11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfbWF0cm9za2FtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvbWF0cm9za2FtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfbWF0cm9za2FtdXhfT0JKRUNUUykgJChlbGVtZW50c19tYXRyb3NrYW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvbWF0cm9za2FwYXJzZS4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9tYXRyb3NrYXBhcnNlJChFWEVFWFQpOiAkKGVsZW1lbnRzX21hdHJvc2thcGFyc2VfT0JKRUNUUykgJChlbGVtZW50c19tYXRyb3NrYXBhcnNlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19tYXRyb3NrYXBhcnNlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL21hdHJvc2thcGFyc2UkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfbWF0cm9za2FwYXJzZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX21hdHJvc2thcGFyc2VfTERBREQpICQoTElCUykKLWVsZW1lbnRzL21wZWdhdWRpb3BhcnNlLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL21wZWdhdWRpb3BhcnNlJChFWEVFWFQpOiAkKGVsZW1lbnRzX21wZWdhdWRpb3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfbXBlZ2F1ZGlvcGFyc2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX21wZWdhdWRpb3BhcnNlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL21wZWdhdWRpb3BhcnNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX21wZWdhdWRpb3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfbXBlZ2F1ZGlvcGFyc2VfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9tdWxhd2RlYyQoRVhFRVhUKTogJChlbGVtZW50c19tdWxhd2RlY19PQkpFQ1RTKSAkKGVsZW1lbnRzX211bGF3ZGVjX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19tdWxhd2RlY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9tdWxhd2RlYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfbXVsYXdkZWNfTElOSykgJChlbGVtZW50c19tdWxhd2RlY19PQkpFQ1RTKSAkKGVsZW1lbnRzX211bGF3ZGVjX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19tdWxhd2VuYy1tdWxhd2VuYy4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvbXVsYXdlbmMkKEVYRUVYVCk6ICQoZWxlbWVudHNfbXVsYXdlbmNfT0JKRUNUUykgJChlbGVtZW50c19tdWxhd2VuY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfbXVsYXdlbmNfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvbXVsYXdlbmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX211bGF3ZW5jX0xJTkspICQoZWxlbWVudHNfbXVsYXdlbmNfT0JKRUNUUykgJChlbGVtZW50c19tdWxhd2VuY19MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvbXVsdGlmaWxlJChFWEVFWFQpOiAkKGVsZW1lbnRzX211bHRpZmlsZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX211bHRpZmlsZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfbXVsdGlmaWxlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL211bHRpZmlsZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfbXVsdGlmaWxlX0xJTkspICQoZWxlbWVudHNfbXVsdGlmaWxlX09CSkVDVFMpICQoZWxlbWVudHNfbXVsdGlmaWxlX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9xdGRlbXV4LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3F0ZGVtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfcXRkZW11eF9PQkpFQ1RTKSAkKGVsZW1lbnRzX3F0ZGVtdXhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3F0ZGVtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcXRkZW11eCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19xdGRlbXV4X09CSkVDVFMpICQoZWxlbWVudHNfcXRkZW11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcXRtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfcXRtdXhfT0JKRUNUUykgJChlbGVtZW50c19xdG11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcXRtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcXRtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3F0bXV4X0xJTkspICQoZWxlbWVudHNfcXRtdXhfT0JKRUNUUykgJChlbGVtZW50c19xdG11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9yZ2FuYWx5c2lzJChFWEVFWFQpOiAkKGVsZW1lbnRzX3JnYW5hbHlzaXNfT0JKRUNUUykgJChlbGVtZW50c19yZ2FuYWx5c2lzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19yZ2FuYWx5c2lzX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3JnYW5hbHlzaXMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3JnYW5hbHlzaXNfTElOSykgJChlbGVtZW50c19yZ2FuYWx5c2lzX09CSkVDVFMpICQoZWxlbWVudHNfcmdhbmFseXNpc19MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcmdsaW1pdGVyJChFWEVFWFQpOiAkKGVsZW1lbnRzX3JnbGltaXRlcl9PQkpFQ1RTKSAkKGVsZW1lbnRzX3JnbGltaXRlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcmdsaW1pdGVyX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3JnbGltaXRlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfcmdsaW1pdGVyX0xJTkspICQoZWxlbWVudHNfcmdsaW1pdGVyX09CSkVDVFMpICQoZWxlbWVudHNfcmdsaW1pdGVyX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19yZ3ZvbHVtZS1yZ3ZvbHVtZS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcmd2b2x1bWUkKEVYRUVYVCk6ICQoZWxlbWVudHNfcmd2b2x1bWVfT0JKRUNUUykgJChlbGVtZW50c19yZ3ZvbHVtZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcmd2b2x1bWVfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcmd2b2x1bWUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3Jndm9sdW1lX0xJTkspICQoZWxlbWVudHNfcmd2b2x1bWVfT0JKRUNUUykgJChlbGVtZW50c19yZ3ZvbHVtZV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvcnRwLXBheWxvYWRpbmcuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcnRwLXBheWxvYWRpbmckKEVYRUVYVCk6ICQoZWxlbWVudHNfcnRwX3BheWxvYWRpbmdfT0JKRUNUUykgJChlbGVtZW50c19ydHBfcGF5bG9hZGluZ19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcnRwX3BheWxvYWRpbmdfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcnRwLXBheWxvYWRpbmckKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfcnRwX3BheWxvYWRpbmdfT0JKRUNUUykgJChlbGVtZW50c19ydHBfcGF5bG9hZGluZ19MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcnRwYXV4LXJ0cGF1eC4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9ydHBhdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfcnRwYXV4X09CSkVDVFMpICQoZWxlbWVudHNfcnRwYXV4X0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19ydHBhdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcnRwYXV4JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19ydHBhdXhfTElOSykgJChlbGVtZW50c19ydHBhdXhfT0JKRUNUUykgJChlbGVtZW50c19ydHBhdXhfTERBREQpICQoTElCUykKLWVsZW1lbnRzL3J0cGJpbi4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9ydHBiaW4kKEVYRUVYVCk6ICQoZWxlbWVudHNfcnRwYmluX09CSkVDVFMpICQoZWxlbWVudHNfcnRwYmluX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19ydHBiaW5fREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcnRwYmluJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX3J0cGJpbl9PQkpFQ1RTKSAkKGVsZW1lbnRzX3J0cGJpbl9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0LXJ0cGJpbl9idWZmZXJfbGlzdC4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0JChFWEVFWFQpOiAkKGVsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9PQkpFQ1RTKSAkKGVsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0xJTkspICQoZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X09CSkVDVFMpICQoZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19ydHBjb2xsaXNpb24tcnRwY29sbGlzaW9uLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9ydHBjb2xsaXNpb24kKEVYRUVYVCk6ICQoZWxlbWVudHNfcnRwY29sbGlzaW9uX09CSkVDVFMpICQoZWxlbWVudHNfcnRwY29sbGlzaW9uX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19ydHBjb2xsaXNpb25fREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcnRwY29sbGlzaW9uJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19ydHBjb2xsaXNpb25fTElOSykgJChlbGVtZW50c19ydHBjb2xsaXNpb25fT0JKRUNUUykgJChlbGVtZW50c19ydHBjb2xsaXNpb25fTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9ydHBoMjYxJChFWEVFWFQpOiAkKGVsZW1lbnRzX3J0cGgyNjFfT0JKRUNUUykgJChlbGVtZW50c19ydHBoMjYxX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19ydHBoMjYxX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3J0cGgyNjEkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3J0cGgyNjFfTElOSykgJChlbGVtZW50c19ydHBoMjYxX09CSkVDVFMpICQoZWxlbWVudHNfcnRwaDI2MV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcnRwaDI2My1ydHBoMjYzLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3J0cGgyNjMkKEVYRUVYVCk6ICQoZWxlbWVudHNfcnRwaDI2M19PQkpFQ1RTKSAkKGVsZW1lbnRzX3J0cGgyNjNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3J0cGgyNjNfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcnRwaDI2MyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfcnRwaDI2M19MSU5LKSAkKGVsZW1lbnRzX3J0cGgyNjNfT0JKRUNUUykgJChlbGVtZW50c19ydHBoMjYzX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIkKEVYRUVYVCk6ICQoZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX09CSkVDVFMpICQoZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfTElOSykgJChlbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfT0JKRUNUUykgJChlbGVtZW50c19ydHBqaXR0ZXJidWZmZXJfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX3J0cG11eC1ydHBtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvcnRwbXV4JChFWEVFWFQpOiAkKGVsZW1lbnRzX3J0cG11eF9PQkpFQ1RTKSAkKGVsZW1lbnRzX3J0cG11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfcnRwbXV4X0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3J0cG11eCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfcnRwbXV4X0xJTkspICQoZWxlbWVudHNfcnRwbXV4X09CSkVDVFMpICQoZWxlbWVudHNfcnRwbXV4X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19ydHBydHgtcnRwcnR4LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3J0cHJ0eCQoRVhFRVhUKTogJChlbGVtZW50c19ydHBydHhfT0JKRUNUUykgJChlbGVtZW50c19ydHBydHhfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3J0cHJ0eF9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9ydHBydHgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3J0cHJ0eF9MSU5LKSAkKGVsZW1lbnRzX3J0cHJ0eF9PQkpFQ1RTKSAkKGVsZW1lbnRzX3J0cHJ0eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9ydHBzZXNzaW9uJChFWEVFWFQpOiAkKGVsZW1lbnRzX3J0cHNlc3Npb25fT0JKRUNUUykgJChlbGVtZW50c19ydHBzZXNzaW9uX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19ydHBzZXNzaW9uX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3J0cHNlc3Npb24kKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3J0cHNlc3Npb25fTElOSykgJChlbGVtZW50c19ydHBzZXNzaW9uX09CSkVDVFMpICQoZWxlbWVudHNfcnRwc2Vzc2lvbl9MREFERCkgJChMSUJTKQotZWxlbWVudHMvcnRwdnA5LiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3J0cHZwOSQoRVhFRVhUKTogJChlbGVtZW50c19ydHB2cDlfT0JKRUNUUykgJChlbGVtZW50c19ydHB2cDlfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3J0cHZwOV9ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9ydHB2cDkkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfcnRwdnA5X09CSkVDVFMpICQoZWxlbWVudHNfcnRwdnA5X0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9zaGFwZXdpcGUuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvc2hhcGV3aXBlJChFWEVFWFQpOiAkKGVsZW1lbnRzX3NoYXBld2lwZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX3NoYXBld2lwZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfc2hhcGV3aXBlX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3NoYXBld2lwZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c19zaGFwZXdpcGVfT0JKRUNUUykgJChlbGVtZW50c19zaGFwZXdpcGVfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX3NvdXBodHRwc3JjLXNvdXBodHRwc3JjLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy9zb3VwaHR0cHNyYyQoRVhFRVhUKTogJChlbGVtZW50c19zb3VwaHR0cHNyY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3NvdXBodHRwc3JjX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c19zb3VwaHR0cHNyY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy9zb3VwaHR0cHNyYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfc291cGh0dHBzcmNfTElOSykgJChlbGVtZW50c19zb3VwaHR0cHNyY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3NvdXBodHRwc3JjX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c19zcGVjdHJ1bS1zcGVjdHJ1bS4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvc3BlY3RydW0kKEVYRUVYVCk6ICQoZWxlbWVudHNfc3BlY3RydW1fT0JKRUNUUykgJChlbGVtZW50c19zcGVjdHJ1bV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfc3BlY3RydW1fREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvc3BlY3RydW0kKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3NwZWN0cnVtX0xJTkspICQoZWxlbWVudHNfc3BlY3RydW1fT0JKRUNUUykgJChlbGVtZW50c19zcGVjdHJ1bV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvc3BsaXRtdXguJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvc3BsaXRtdXgkKEVYRUVYVCk6ICQoZWxlbWVudHNfc3BsaXRtdXhfT0JKRUNUUykgJChlbGVtZW50c19zcGxpdG11eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfc3BsaXRtdXhfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvc3BsaXRtdXgkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfc3BsaXRtdXhfT0JKRUNUUykgJChlbGVtZW50c19zcGxpdG11eF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8uJChPQkpFWFQpOiAgXAotCWVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3N1bmF1ZGlvJChFWEVFWFQpOiAkKGVsZW1lbnRzX3N1bmF1ZGlvX09CSkVDVFMpICQoZWxlbWVudHNfc3VuYXVkaW9fREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3N1bmF1ZGlvX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3N1bmF1ZGlvJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChlbGVtZW50c19zdW5hdWRpb19MSU5LKSAkKGVsZW1lbnRzX3N1bmF1ZGlvX09CSkVDVFMpICQoZWxlbWVudHNfc3VuYXVkaW9fTERBREQpICQoTElCUykKLWVsZW1lbnRzL3VkcHNpbmsuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvdWRwc2luayQoRVhFRVhUKTogJChlbGVtZW50c191ZHBzaW5rX09CSkVDVFMpICQoZWxlbWVudHNfdWRwc2lua19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfdWRwc2lua19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy91ZHBzaW5rJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX3VkcHNpbmtfT0JKRUNUUykgJChlbGVtZW50c191ZHBzaW5rX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3VkcHNyYyQoRVhFRVhUKTogJChlbGVtZW50c191ZHBzcmNfT0JKRUNUUykgJChlbGVtZW50c191ZHBzcmNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3VkcHNyY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy91ZHBzcmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3VkcHNyY19MSU5LKSAkKGVsZW1lbnRzX3VkcHNyY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3VkcHNyY19MREFERCkgJChMSUJTKQotZWxlbWVudHMvdmlkZW9ib3guJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvdmlkZW9ib3gkKEVYRUVYVCk6ICQoZWxlbWVudHNfdmlkZW9ib3hfT0JKRUNUUykgJChlbGVtZW50c192aWRlb2JveF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfdmlkZW9ib3hfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvdmlkZW9ib3gkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfdmlkZW9ib3hfT0JKRUNUUykgJChlbGVtZW50c192aWRlb2JveF9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfdmlkZW9jcm9wLXZpZGVvY3JvcC4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvdmlkZW9jcm9wJChFWEVFWFQpOiAkKGVsZW1lbnRzX3ZpZGVvY3JvcF9PQkpFQ1RTKSAkKGVsZW1lbnRzX3ZpZGVvY3JvcF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfdmlkZW9jcm9wX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3ZpZGVvY3JvcCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfdmlkZW9jcm9wX0xJTkspICQoZWxlbWVudHNfdmlkZW9jcm9wX09CSkVDVFMpICQoZWxlbWVudHNfdmlkZW9jcm9wX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy9lbGVtZW50c192aWRlb2ZpbHRlci12aWRlb2ZpbHRlci4kKE9CSkVYVCk6ICBcCi0JZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIGVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvdmlkZW9maWx0ZXIkKEVYRUVYVCk6ICQoZWxlbWVudHNfdmlkZW9maWx0ZXJfT0JKRUNUUykgJChlbGVtZW50c192aWRlb2ZpbHRlcl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfdmlkZW9maWx0ZXJfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvdmlkZW9maWx0ZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3ZpZGVvZmlsdGVyX0xJTkspICQoZWxlbWVudHNfdmlkZW9maWx0ZXJfT0JKRUNUUykgJChlbGVtZW50c192aWRlb2ZpbHRlcl9MREFERCkgJChMSUJTKQotZWxlbWVudHMvZWxlbWVudHNfdmlkZW9taXhlci12aWRlb21peGVyLiQoT0JKRVhUKTogIFwKLQllbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy92aWRlb21peGVyJChFWEVFWFQpOiAkKGVsZW1lbnRzX3ZpZGVvbWl4ZXJfT0JKRUNUUykgJChlbGVtZW50c192aWRlb21peGVyX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c192aWRlb21peGVyX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3ZpZGVvbWl4ZXIkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGVsZW1lbnRzX3ZpZGVvbWl4ZXJfTElOSykgJChlbGVtZW50c192aWRlb21peGVyX09CSkVDVFMpICQoZWxlbWVudHNfdmlkZW9taXhlcl9MREFERCkgJChMSUJTKQotZWxlbWVudHMvdnA4ZGVjLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3ZwOGRlYyQoRVhFRVhUKTogJChlbGVtZW50c192cDhkZWNfT0JKRUNUUykgJChlbGVtZW50c192cDhkZWNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3ZwOGRlY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy92cDhkZWMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfdnA4ZGVjX09CSkVDVFMpICQoZWxlbWVudHNfdnA4ZGVjX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy92cDhlbmMuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvdnA4ZW5jJChFWEVFWFQpOiAkKGVsZW1lbnRzX3ZwOGVuY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3ZwOGVuY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfdnA4ZW5jX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3ZwOGVuYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c192cDhlbmNfT0JKRUNUUykgJChlbGVtZW50c192cDhlbmNfTERBREQpICQoTElCUykKLWVsZW1lbnRzL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvdnA5ZW5jJChFWEVFWFQpOiAkKGVsZW1lbnRzX3ZwOWVuY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3ZwOWVuY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfdnA5ZW5jX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3ZwOWVuYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZWxlbWVudHNfdnA5ZW5jX0xJTkspICQoZWxlbWVudHNfdnA5ZW5jX09CSkVDVFMpICQoZWxlbWVudHNfdnA5ZW5jX0xEQUREKSAkKExJQlMpCi1lbGVtZW50cy93YXZwYWNrZGVjLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3dhdnBhY2tkZWMkKEVYRUVYVCk6ICQoZWxlbWVudHNfd2F2cGFja2RlY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3dhdnBhY2tkZWNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3dhdnBhY2tkZWNfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvd2F2cGFja2RlYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChlbGVtZW50c193YXZwYWNrZGVjX09CSkVDVFMpICQoZWxlbWVudHNfd2F2cGFja2RlY19MREFERCkgJChMSUJTKQotZWxlbWVudHMvd2F2cGFja2VuYy4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy93YXZwYWNrZW5jJChFWEVFWFQpOiAkKGVsZW1lbnRzX3dhdnBhY2tlbmNfT0JKRUNUUykgJChlbGVtZW50c193YXZwYWNrZW5jX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c193YXZwYWNrZW5jX0RFUEVOREVOQ0lFUykgZWxlbWVudHMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGVsZW1lbnRzL3dhdnBhY2tlbmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfd2F2cGFja2VuY19PQkpFQ1RTKSAkKGVsZW1lbnRzX3dhdnBhY2tlbmNfTERBREQpICQoTElCUykKLWVsZW1lbnRzL3dhdnBhY2twYXJzZS4kKE9CSkVYVCk6IGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKSBcCi0JZWxlbWVudHMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1lbGVtZW50cy93YXZwYWNrcGFyc2UkKEVYRUVYVCk6ICQoZWxlbWVudHNfd2F2cGFja3BhcnNlX09CSkVDVFMpICQoZWxlbWVudHNfd2F2cGFja3BhcnNlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9lbGVtZW50c193YXZwYWNrcGFyc2VfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvd2F2cGFja3BhcnNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGVsZW1lbnRzX3dhdnBhY2twYXJzZV9PQkpFQ1RTKSAkKGVsZW1lbnRzX3dhdnBhY2twYXJzZV9MREFERCkgJChMSUJTKQotZWxlbWVudHMvd2F2cGFyc2UuJChPQkpFWFQpOiBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkgXAotCWVsZW1lbnRzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotZWxlbWVudHMvd2F2cGFyc2UkKEVYRUVYVCk6ICQoZWxlbWVudHNfd2F2cGFyc2VfT0JKRUNUUykgJChlbGVtZW50c193YXZwYXJzZV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfZWxlbWVudHNfd2F2cGFyc2VfREVQRU5ERU5DSUVTKSBlbGVtZW50cy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgZWxlbWVudHMvd2F2cGFyc2UkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfd2F2cGFyc2VfT0JKRUNUUykgJChlbGVtZW50c193YXZwYXJzZV9MREFERCkgJChMSUJTKQotZWxlbWVudHMveTRtZW5jLiQoT0JKRVhUKTogZWxlbWVudHMvJChhbV9fZGlyc3RhbXApIFwKLQllbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLWVsZW1lbnRzL3k0bWVuYyQoRVhFRVhUKTogJChlbGVtZW50c195NG1lbmNfT0JKRUNUUykgJChlbGVtZW50c195NG1lbmNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2VsZW1lbnRzX3k0bWVuY19ERVBFTkRFTkNJRVMpIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBlbGVtZW50cy95NG1lbmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZWxlbWVudHNfeTRtZW5jX09CSkVDVFMpICQoZWxlbWVudHNfeTRtZW5jX0xEQUREKSAkKExJQlMpCi1nZW5lcmljLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSBnZW5lcmljCi0JQDogPiBnZW5lcmljLyQoYW1fX2RpcnN0YW1wKQotZ2VuZXJpYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIGdlbmVyaWMvJChERVBESVIpCi0JQDogPiBnZW5lcmljLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLWdlbmVyaWMvc3RhdGVzLiQoT0JKRVhUKTogZ2VuZXJpYy8kKGFtX19kaXJzdGFtcCkgXAotCWdlbmVyaWMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1nZW5lcmljL3N0YXRlcyQoRVhFRVhUKTogJChnZW5lcmljX3N0YXRlc19PQkpFQ1RTKSAkKGdlbmVyaWNfc3RhdGVzX0RFUEVOREVOQ0lFUykgJChFWFRSQV9nZW5lcmljX3N0YXRlc19ERVBFTkRFTkNJRVMpIGdlbmVyaWMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIGdlbmVyaWMvc3RhdGVzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGdlbmVyaWNfc3RhdGVzX09CSkVDVFMpICQoZ2VuZXJpY19zdGF0ZXNfTERBREQpICQoTElCUykKLW9yYy8kKGFtX19kaXJzdGFtcCk6Ci0JQCQoTUtESVJfUCkgb3JjCi0JQDogPiBvcmMvJChhbV9fZGlyc3RhbXApCi1vcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKLQlAJChNS0RJUl9QKSBvcmMvJChERVBESVIpCi0JQDogPiBvcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotb3JjL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS4kKE9CSkVYVCk6IG9yYy8kKGFtX19kaXJzdGFtcCkgXAotCW9yYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLW9yYy9kZWludGVybGFjZSQoRVhFRVhUKTogJChvcmNfZGVpbnRlcmxhY2VfT0JKRUNUUykgJChvcmNfZGVpbnRlcmxhY2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX29yY19kZWludGVybGFjZV9ERVBFTkRFTkNJRVMpIG9yYy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgb3JjL2RlaW50ZXJsYWNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChvcmNfZGVpbnRlcmxhY2VfTElOSykgJChvcmNfZGVpbnRlcmxhY2VfT0JKRUNUUykgJChvcmNfZGVpbnRlcmxhY2VfTERBREQpICQoTElCUykKLW9yYy9vcmNfdmlkZW9ib3gtdmlkZW9ib3guJChPQkpFWFQpOiBvcmMvJChhbV9fZGlyc3RhbXApIFwKLQlvcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCi1vcmMvdmlkZW9ib3gkKEVYRUVYVCk6ICQob3JjX3ZpZGVvYm94X09CSkVDVFMpICQob3JjX3ZpZGVvYm94X0RFUEVOREVOQ0lFUykgJChFWFRSQV9vcmNfdmlkZW9ib3hfREVQRU5ERU5DSUVTKSBvcmMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIG9yYy92aWRlb2JveCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQob3JjX3ZpZGVvYm94X0xJTkspICQob3JjX3ZpZGVvYm94X09CSkVDVFMpICQob3JjX3ZpZGVvYm94X0xEQUREKSAkKExJQlMpCi1vcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci4kKE9CSkVYVCk6IG9yYy8kKGFtX19kaXJzdGFtcCkgXAotCW9yYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLW9yYy92aWRlb21peGVyJChFWEVFWFQpOiAkKG9yY192aWRlb21peGVyX09CSkVDVFMpICQob3JjX3ZpZGVvbWl4ZXJfREVQRU5ERU5DSUVTKSAkKEVYVFJBX29yY192aWRlb21peGVyX0RFUEVOREVOQ0lFUykgb3JjLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBvcmMvdmlkZW9taXhlciQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQob3JjX3ZpZGVvbWl4ZXJfTElOSykgJChvcmNfdmlkZW9taXhlcl9PQkpFQ1RTKSAkKG9yY192aWRlb21peGVyX0xEQUREKSAkKExJQlMpCi1waXBlbGluZXMvJChhbV9fZGlyc3RhbXApOgotCUAkKE1LRElSX1ApIHBpcGVsaW5lcwotCUA6ID4gcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKQotcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6Ci0JQCQoTUtESVJfUCkgcGlwZWxpbmVzLyQoREVQRElSKQotCUA6ID4gcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXBpcGVsaW5lcy9lZmZlY3R2LiQoT0JKRVhUKTogcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKSBcCi0JcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotcGlwZWxpbmVzL2VmZmVjdHYkKEVYRUVYVCk6ICQocGlwZWxpbmVzX2VmZmVjdHZfT0JKRUNUUykgJChwaXBlbGluZXNfZWZmZWN0dl9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGlwZWxpbmVzX2VmZmVjdHZfREVQRU5ERU5DSUVTKSBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHBpcGVsaW5lcy9lZmZlY3R2JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKHBpcGVsaW5lc19lZmZlY3R2X09CSkVDVFMpICQocGlwZWxpbmVzX2VmZmVjdHZfTERBREQpICQoTElCUykKLXBpcGVsaW5lcy9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLiQoT0JKRVhUKTogIFwKLQlwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApIHBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy9mbGFjZGVjJChFWEVFWFQpOiAkKHBpcGVsaW5lc19mbGFjZGVjX09CSkVDVFMpICQocGlwZWxpbmVzX2ZsYWNkZWNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc19mbGFjZGVjX0RFUEVOREVOQ0lFUykgcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBwaXBlbGluZXMvZmxhY2RlYyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQocGlwZWxpbmVzX2ZsYWNkZWNfTElOSykgJChwaXBlbGluZXNfZmxhY2RlY19PQkpFQ1RTKSAkKHBpcGVsaW5lc19mbGFjZGVjX0xEQUREKSAkKExJQlMpCi1waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy4kKE9CSkVYVCk6IHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkgXAotCXBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzJChFWEVFWFQpOiAkKHBpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX09CSkVDVFMpICQocGlwZWxpbmVzX3NpbXBsZV9sYXVuY2hfbGluZXNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX0RFUEVOREVOQ0lFUykgcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKQotCUBybSAtZiBwaXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwaXBlbGluZXNfc2ltcGxlX2xhdW5jaF9saW5lc19PQkpFQ1RTKSAkKHBpcGVsaW5lc19zaW1wbGVfbGF1bmNoX2xpbmVzX0xEQUREKSAkKExJQlMpCi1waXBlbGluZXMvdGFnc2NoZWNraW5nLiQoT0JKRVhUKTogcGlwZWxpbmVzLyQoYW1fX2RpcnN0YW1wKSBcCi0JcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotcGlwZWxpbmVzL3RhZ3NjaGVja2luZyQoRVhFRVhUKTogJChwaXBlbGluZXNfdGFnc2NoZWNraW5nX09CSkVDVFMpICQocGlwZWxpbmVzX3RhZ3NjaGVja2luZ19ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGlwZWxpbmVzX3RhZ3NjaGVja2luZ19ERVBFTkRFTkNJRVMpIHBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkKLQlAcm0gLWYgcGlwZWxpbmVzL3RhZ3NjaGVja2luZyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChwaXBlbGluZXNfdGFnc2NoZWNraW5nX09CSkVDVFMpICQocGlwZWxpbmVzX3RhZ3NjaGVja2luZ19MREFERCkgJChMSUJTKQotcGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLiQoT0JKRVhUKTogIFwKLQlwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApIHBpcGVsaW5lcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0KLXBpcGVsaW5lcy93YXZlbmMkKEVYRUVYVCk6ICQocGlwZWxpbmVzX3dhdmVuY19PQkpFQ1RTKSAkKHBpcGVsaW5lc193YXZlbmNfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3BpcGVsaW5lc193YXZlbmNfREVQRU5ERU5DSUVTKSBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHBpcGVsaW5lcy93YXZlbmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKHBpcGVsaW5lc193YXZlbmNfTElOSykgJChwaXBlbGluZXNfd2F2ZW5jX09CSkVDVFMpICQocGlwZWxpbmVzX3dhdmVuY19MREFERCkgJChMSUJTKQotcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2suJChPQkpFWFQpOiAgXAotCXBpcGVsaW5lcy8kKGFtX19kaXJzdGFtcCkgcGlwZWxpbmVzLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQotcGlwZWxpbmVzL3dhdnBhY2skKEVYRUVYVCk6ICQocGlwZWxpbmVzX3dhdnBhY2tfT0JKRUNUUykgJChwaXBlbGluZXNfd2F2cGFja19ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGlwZWxpbmVzX3dhdnBhY2tfREVQRU5ERU5DSUVTKSBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0JQHJtIC1mIHBpcGVsaW5lcy93YXZwYWNrJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChwaXBlbGluZXNfd2F2cGFja19MSU5LKSAkKHBpcGVsaW5lc193YXZwYWNrX09CSkVDVFMpICQocGlwZWxpbmVzX3dhdnBhY2tfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQktcm0gLWYgZWxlbWVudHMvKi4kKE9CSkVYVCkKLQktcm0gLWYgZWxlbWVudHMvKi5sbwotCS1ybSAtZiBnZW5lcmljLyouJChPQkpFWFQpCi0JLXJtIC1mIG9yYy8qLiQoT0JKRVhUKQotCS1ybSAtZiBwaXBlbGluZXMvKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9hYWNwYXJzZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2FjM3BhcnNlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvYW1ycGFyc2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9hcGV2Mm11eC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2F1ZGlvZmlyZmlsdGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvYXVkaW9paXJmaWx0ZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9hdmltdXguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9hdmlzdWJ0aXRsZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2NhcHNzZXR0ZXIuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYS1hbHBoYS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FscGhhY29sb3ItYWxwaGFjb2xvci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcC1hc3BlY3RyYXRpb2Nyb3AuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9jaGViYmFuZC1hdWRpb2NoZWJiYW5kLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9jaGVibGltaXQtYXVkaW9jaGVibGltaXQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvaW52ZXJ0LWF1ZGlvaW52ZXJ0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb3dzaW5jbGltaXQtYXVkaW93c2luY2xpbWl0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19kZWludGVybGVhdmUtZGVpbnRlcmxlYXZlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZHRtZi1kdG1mLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ZsdmRlbXV4LWZsdmRlbXV4LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZW5jLWpwZWdlbmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19sZXZlbC1sZXZlbC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdlbmMtbXVsYXdlbmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19tdWx0aWZpbGUtbXVsdGlmaWxlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcXRtdXgtcXRtdXguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ2FuYWx5c2lzLXJnYW5hbHlzaXMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ2xpbWl0ZXItcmdsaW1pdGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBhdXgtcnRwYXV4LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0LXJ0cGJpbl9idWZmZXJfbGlzdC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBoMjYxLXJ0cGgyNjEuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cHJ0eC1ydHBydHguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zb3VwaHR0cHNyYy1zb3VwaHR0cHNyYy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3NwZWN0cnVtLXNwZWN0cnVtLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8uUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c191ZHBzcmMtdWRwc3JjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9jcm9wLXZpZGVvY3JvcC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9taXhlci12aWRlb21peGVyLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdnA5ZW5jLXZwOWVuYy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2ZsYWNwYXJzZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2Zsdm11eC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2dka3BpeGJ1Zm92ZXJsYXkuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9pY3lkZW11eC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL2lkM2RlbXV4LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvaWQzdjJtdXguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9saWJwYXJzZXJfbGEtcGFyc2VyLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL21hdHJvc2thZGVtdXguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9tYXRyb3NrYW11eC5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL21hdHJvc2thcGFyc2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9tcGVnYXVkaW9wYXJzZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3F0ZGVtdXguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS9ydHAtcGF5bG9hZGluZy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3J0cGJpbi5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3J0cHZwOS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3NoYXBld2lwZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3NwbGl0bXV4LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvdWRwc2luay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3ZpZGVvYm94LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvdnA4ZGVjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvdnA4ZW5jLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBlbGVtZW50cy8kKERFUERJUikvd2F2cGFja2RlYy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3dhdnBhY2tlbmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS93YXZwYWNrcGFyc2UuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQGVsZW1lbnRzLyQoREVQRElSKS93YXZwYXJzZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZWxlbWVudHMvJChERVBESVIpL3k0bWVuYy5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAZ2VuZXJpYy8kKERFUERJUikvc3RhdGVzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBvcmMvJChERVBESVIpL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAb3JjLyQoREVQRElSKS9vcmNfdmlkZW9ib3gtdmlkZW9ib3guUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQG9yYy8kKERFUERJUikvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAcGlwZWxpbmVzLyQoREVQRElSKS9lZmZlY3R2LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBwaXBlbGluZXMvJChERVBESVIpL3BpcGVsaW5lc19mbGFjZGVjLWZsYWNkZWMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdnBhY2std2F2cGFjay5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAcGlwZWxpbmVzLyQoREVQRElSKS9zaW1wbGUtbGF1bmNoLWxpbmVzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBwaXBlbGluZXMvJChERVBESVIpL3RhZ3NjaGVja2luZy5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1lbGVtZW50cy9saWJwYXJzZXJfbGEtcGFyc2VyLmxvOiBlbGVtZW50cy9wYXJzZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBhcnNlcl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvbGlicGFyc2VyX2xhLXBhcnNlci5sbyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvbGlicGFyc2VyX2xhLXBhcnNlci5UcG8gLWMgLW8gZWxlbWVudHMvbGlicGFyc2VyX2xhLXBhcnNlci5sbyBgdGVzdCAtZiAnZWxlbWVudHMvcGFyc2VyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3BhcnNlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9saWJwYXJzZXJfbGEtcGFyc2VyLlRwbyBlbGVtZW50cy8kKERFUERJUikvbGlicGFyc2VyX2xhLXBhcnNlci5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9wYXJzZXIuYycgb2JqZWN0PSdlbGVtZW50cy9saWJwYXJzZXJfbGEtcGFyc2VyLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGFyc2VyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2xpYnBhcnNlcl9sYS1wYXJzZXIubG8gYHRlc3QgLWYgJ2VsZW1lbnRzL3BhcnNlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9wYXJzZXIuYwotCi1lbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vOiBlbGVtZW50cy9hbHBoYS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYWxwaGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2FscGhhLWFscGhhLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FscGhhLWFscGhhLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vIGB0ZXN0IC1mICdlbGVtZW50cy9hbHBoYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hbHBoYS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYS1hbHBoYS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FscGhhLWFscGhhLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYWxwaGEuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hbHBoYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vIGB0ZXN0IC1mICdlbGVtZW50cy9hbHBoYS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hbHBoYS5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2FscGhhLWFscGhhLm9iajogZWxlbWVudHMvYWxwaGEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2FscGhhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FscGhhLWFscGhhLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2FscGhhLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYWxwaGEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYWxwaGEuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYWxwaGEtYWxwaGEuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYS1hbHBoYS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2FscGhhLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYWxwaGEtYWxwaGEub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hbHBoYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hbHBoYS1hbHBoYS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2FscGhhLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYWxwaGEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYWxwaGEuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3IubzogZWxlbWVudHMvYWxwaGFjb2xvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYWxwaGFjb2xvcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYWxwaGFjb2xvci1hbHBoYWNvbG9yLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FscGhhY29sb3ItYWxwaGFjb2xvci5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYWxwaGFjb2xvci1hbHBoYWNvbG9yLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2FscGhhY29sb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYWxwaGFjb2xvci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3IuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3IuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hbHBoYWNvbG9yLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYWxwaGFjb2xvci1hbHBoYWNvbG9yLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2FscGhhY29sb3JfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYWxwaGFjb2xvci1hbHBoYWNvbG9yLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2FscGhhY29sb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYWxwaGFjb2xvci5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2FscGhhY29sb3ItYWxwaGFjb2xvci5vYmo6IGVsZW1lbnRzL2FscGhhY29sb3IuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2FscGhhY29sb3JfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2FscGhhY29sb3ItYWxwaGFjb2xvci5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FscGhhY29sb3ItYWxwaGFjb2xvci5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYWxwaGFjb2xvci1hbHBoYWNvbG9yLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYWxwaGFjb2xvci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2FscGhhY29sb3IuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYWxwaGFjb2xvci5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3IuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3IuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hbHBoYWNvbG9yLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYWxwaGFjb2xvci1hbHBoYWNvbG9yLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYWxwaGFjb2xvcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hbHBoYWNvbG9yLWFscGhhY29sb3Iub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hbHBoYWNvbG9yLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYWxwaGFjb2xvci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hbHBoYWNvbG9yLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wLWFzcGVjdHJhdGlvY3JvcC5vOiBlbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wLWFzcGVjdHJhdGlvY3JvcC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wLWFzcGVjdHJhdGlvY3JvcC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcC1hc3BlY3RyYXRpb2Nyb3AuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYwotCi1lbGVtZW50cy9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLm9iajogZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcC1hc3BlY3RyYXRpb2Nyb3Aub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hc3BlY3RyYXRpb2Nyb3AtYXNwZWN0cmF0aW9jcm9wLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wLWFzcGVjdHJhdGlvY3JvcC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2FzcGVjdHJhdGlvY3JvcC1hc3BlY3RyYXRpb2Nyb3Aub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hc3BlY3RyYXRpb2Nyb3BfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXNwZWN0cmF0aW9jcm9wLWFzcGVjdHJhdGlvY3JvcC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5Lm86IGVsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5Lm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9hbXBsaWZ5LWF1ZGlvYW1wbGlmeS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9hbXBsaWZ5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkub2JqOiBlbGVtZW50cy9hdWRpb2FtcGxpZnkuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYXVkaW9hbXBsaWZ5LWF1ZGlvYW1wbGlmeS5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2FtcGxpZnkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb2FtcGxpZnkuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvYW1wbGlmeS1hdWRpb2FtcGxpZnkuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYXVkaW9hbXBsaWZ5LWF1ZGlvYW1wbGlmeS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvYW1wbGlmeV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2FtcGxpZnktYXVkaW9hbXBsaWZ5Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmQtYXVkaW9jaGViYmFuZC5vOiBlbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2NoZWJiYW5kX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9jaGViYmFuZC1hdWRpb2NoZWJiYW5kLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmQtYXVkaW9jaGViYmFuZC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmQtYXVkaW9jaGViYmFuZC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9jaGViYmFuZF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMKLQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW9jaGViYmFuZC1hdWRpb2NoZWJiYW5kLm9iajogZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9jaGViYmFuZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYXVkaW9jaGViYmFuZC1hdWRpb2NoZWJiYW5kLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9jaGViYmFuZC1hdWRpb2NoZWJiYW5kLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYXVkaW9jaGViYmFuZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmQtYXVkaW9jaGViYmFuZC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmQtYXVkaW9jaGViYmFuZC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJiYW5kLWF1ZGlvY2hlYmJhbmQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2NoZWJiYW5kX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvY2hlYmJhbmQtYXVkaW9jaGViYmFuZC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vOiBlbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9jaGVibGltaXRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0LWF1ZGlvY2hlYmxpbWl0Lm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0LWF1ZGlvY2hlYmxpbWl0LlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0LWF1ZGlvY2hlYmxpbWl0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2NoZWJsaW1pdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0LWF1ZGlvY2hlYmxpbWl0Lm9iajogZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvY2hlYmxpbWl0LWF1ZGlvY2hlYmxpbWl0LlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9jaGVibGltaXQtYXVkaW9jaGVibGltaXQuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYXVkaW9jaGVibGltaXQtYXVkaW9jaGVibGltaXQub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2NoZWJsaW1pdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2NoZWJsaW1pdC1hdWRpb2NoZWJsaW1pdC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLm86IGVsZW1lbnRzL2F1ZGlvZHluYW1pYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9keW5hbWljX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9keW5hbWljLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvZHluYW1pYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9keW5hbWljLWF1ZGlvZHluYW1pYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9keW5hbWljX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9keW5hbWljLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvZHluYW1pYy5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMub2JqOiBlbGVtZW50cy9hdWRpb2R5bmFtaWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvZHluYW1pY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYXVkaW9keW5hbWljLWF1ZGlvZHluYW1pYy5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2R5bmFtaWMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb2R5bmFtaWMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW9keW5hbWljLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvZHluYW1pYy1hdWRpb2R5bmFtaWMuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW9keW5hbWljLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYXVkaW9keW5hbWljLWF1ZGlvZHluYW1pYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvZHluYW1pY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19hdWRpb2R5bmFtaWMtYXVkaW9keW5hbWljLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9keW5hbWljLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvYXVkaW9keW5hbWljLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1ZGlvZHluYW1pYy5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZWNoby1hdWRpb2VjaG8ubzogZWxlbWVudHMvYXVkaW9lY2hvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2VjaG9fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZWNoby1hdWRpb2VjaG8ubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2VjaG8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYXVkaW9lY2hvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvZWNoby1hdWRpb2VjaG8uVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2VjaG8tYXVkaW9lY2hvLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW9lY2hvLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2VjaG9fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2VjaG8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYXVkaW9lY2hvLmMKLQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5vYmo6IGVsZW1lbnRzL2F1ZGlvZWNoby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9lY2hvX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb2VjaG8tYXVkaW9lY2hvLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvZWNoby5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2F1ZGlvZWNoby5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hdWRpb2VjaG8uYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9lY2hvLWF1ZGlvZWNoby5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvZWNoby1hdWRpb2VjaG8uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hdWRpb2VjaG8uYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hdWRpb2VjaG8tYXVkaW9lY2hvLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9lY2hvX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvZWNoby1hdWRpb2VjaG8ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2VjaG8uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb2VjaG8uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW9lY2hvLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQubzogZWxlbWVudHMvYXVkaW9pbnZlcnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvaW52ZXJ0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb2ludmVydC1hdWRpb2ludmVydC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2ludmVydC1hdWRpb2ludmVydC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9pbnZlcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYXVkaW9pbnZlcnQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2ludmVydC1hdWRpb2ludmVydC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9pbnZlcnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQubyBgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9pbnZlcnQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYXVkaW9pbnZlcnQuYwotCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb2ludmVydC1hdWRpb2ludmVydC5vYmo6IGVsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb2ludmVydF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb2ludmVydC1hdWRpb2ludmVydC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2ludmVydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvaW52ZXJ0LWF1ZGlvaW52ZXJ0LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hdWRpb2ludmVydC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvaW52ZXJ0LWF1ZGlvaW52ZXJ0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW9pbnZlcnRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9pbnZlcnQtYXVkaW9pbnZlcnQub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb2ludmVydC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1ZGlvaW52ZXJ0LmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLm86IGVsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvcGFub3JhbWEtYXVkaW9wYW5vcmFtYS5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb3Bhbm9yYW1hLWF1ZGlvcGFub3JhbWEuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvcGFub3JhbWEtYXVkaW9wYW5vcmFtYS5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvcGFub3JhbWEtYXVkaW9wYW5vcmFtYS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb3Bhbm9yYW1hX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvcGFub3JhbWEtYXVkaW9wYW5vcmFtYS5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYwotCi1lbGVtZW50cy9lbGVtZW50c19hdWRpb3Bhbm9yYW1hLWF1ZGlvcGFub3JhbWEub2JqOiBlbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb3Bhbm9yYW1hX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb3Bhbm9yYW1hLWF1ZGlvcGFub3JhbWEub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb3Bhbm9yYW1hLWF1ZGlvcGFub3JhbWEuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvcGFub3JhbWEtYXVkaW9wYW5vcmFtYS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvcGFub3JhbWEtYXVkaW9wYW5vcmFtYS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvcGFub3JhbWFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW9wYW5vcmFtYS1hdWRpb3Bhbm9yYW1hLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm86IGVsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb3dzaW5jYmFuZF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMKLQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQub2JqOiBlbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW93c2luY2JhbmRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2JhbmQtYXVkaW93c2luY2JhbmQuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb3dzaW5jYmFuZC1hdWRpb3dzaW5jYmFuZC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hdWRpb3dzaW5jYmFuZC1hdWRpb3dzaW5jYmFuZC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNiYW5kLWF1ZGlvd3NpbmNiYW5kLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hdWRpb3dzaW5jYmFuZC5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdC1hdWRpb3dzaW5jbGltaXQubzogZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb3dzaW5jbGltaXRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdC1hdWRpb3dzaW5jbGltaXQubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdC1hdWRpb3dzaW5jbGltaXQuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdWRpb3dzaW5jbGltaXQtYXVkaW93c2luY2xpbWl0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdWRpb3dzaW5jbGltaXRfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMKLQotZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5vYmo6IGVsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdWRpb3dzaW5jbGltaXQtYXVkaW93c2luY2xpbWl0Lm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXVkaW93c2luY2xpbWl0LWF1ZGlvd3NpbmNsaW1pdC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdC1hdWRpb3dzaW5jbGltaXQuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19hdWRpb3dzaW5jbGltaXQtYXVkaW93c2luY2xpbWl0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfYXVkaW93c2luY2xpbWl0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1ZGlvd3NpbmNsaW1pdC1hdWRpb3dzaW5jbGltaXQub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0Lm86IGVsZW1lbnRzL2F1dG9kZXRlY3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1dG9kZXRlY3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2F1dG9kZXRlY3QtYXV0b2RldGVjdC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdXRvZGV0ZWN0LWF1dG9kZXRlY3QuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1dG9kZXRlY3QtYXV0b2RldGVjdC5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdXRvZGV0ZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1dG9kZXRlY3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXV0b2RldGVjdC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1dG9kZXRlY3QtYXV0b2RldGVjdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdXRvZGV0ZWN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1dG9kZXRlY3QtYXV0b2RldGVjdC5vIGB0ZXN0IC1mICdlbGVtZW50cy9hdXRvZGV0ZWN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2F1dG9kZXRlY3QuYwotCi1lbGVtZW50cy9lbGVtZW50c19hdXRvZGV0ZWN0LWF1dG9kZXRlY3Qub2JqOiBlbGVtZW50cy9hdXRvZGV0ZWN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19hdXRvZGV0ZWN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19hdXRvZGV0ZWN0LWF1dG9kZXRlY3Qub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19hdXRvZGV0ZWN0LWF1dG9kZXRlY3QuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2F1dG9kZXRlY3QtYXV0b2RldGVjdC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2F1dG9kZXRlY3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9hdXRvZGV0ZWN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2F1dG9kZXRlY3QuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvYXV0b2RldGVjdC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2F1dG9kZXRlY3QtYXV0b2RldGVjdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2F1dG9kZXRlY3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfYXV0b2RldGVjdC1hdXRvZGV0ZWN0Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvYXV0b2RldGVjdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2F1dG9kZXRlY3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvYXV0b2RldGVjdC5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm86IGVsZW1lbnRzL2RlaW50ZXJsYWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19kZWludGVybGFjZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2RlaW50ZXJsYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2RlaW50ZXJsYWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9kZWludGVybGFjZS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2RlaW50ZXJsYWNlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2RlaW50ZXJsYWNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2RlaW50ZXJsYWNlLmMKLQotZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2Uub2JqOiBlbGVtZW50cy9kZWludGVybGFjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZGVpbnRlcmxhY2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZGVpbnRlcmxhY2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9kZWludGVybGFjZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9kZWludGVybGFjZS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19kZWludGVybGFjZS1kZWludGVybGFjZS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZGVpbnRlcmxhY2UuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19kZWludGVybGFjZS1kZWludGVybGFjZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2RlaW50ZXJsYWNlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZGVpbnRlcmxhY2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9kZWludGVybGFjZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9kZWludGVybGFjZS5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsZWF2ZS1kZWludGVybGVhdmUubzogZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19kZWludGVybGVhdmVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsZWF2ZS1kZWludGVybGVhdmUubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5vIGB0ZXN0IC1mICdlbGVtZW50cy9kZWludGVybGVhdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2RlaW50ZXJsZWF2ZS1kZWludGVybGVhdmUuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19kZWludGVybGVhdmUtZGVpbnRlcmxlYXZlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19kZWludGVybGVhdmVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5vIGB0ZXN0IC1mICdlbGVtZW50cy9kZWludGVybGVhdmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMKLQotZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5vYmo6IGVsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZGVpbnRlcmxlYXZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19kZWludGVybGVhdmUtZGVpbnRlcmxlYXZlLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9kZWludGVybGVhdmUuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZGVpbnRlcmxlYXZlLWRlaW50ZXJsZWF2ZS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2RlaW50ZXJsZWF2ZS1kZWludGVybGVhdmUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9kZWludGVybGVhdmUuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19kZWludGVybGVhdmUtZGVpbnRlcmxlYXZlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZGVpbnRlcmxlYXZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2RlaW50ZXJsZWF2ZS1kZWludGVybGVhdmUub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9kZWludGVybGVhdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9kZWludGVybGVhdmUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfZHRtZi1kdG1mLm86IGVsZW1lbnRzL2R0bWYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2R0bWZfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19kdG1mLWR0bWYuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi5vIGB0ZXN0IC1mICdlbGVtZW50cy9kdG1mLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2R0bWYuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZHRtZi1kdG1mLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZHRtZi1kdG1mLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZHRtZi5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19kdG1mX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi5vIGB0ZXN0IC1mICdlbGVtZW50cy9kdG1mLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2R0bWYuYwotCi1lbGVtZW50cy9lbGVtZW50c19kdG1mLWR0bWYub2JqOiBlbGVtZW50cy9kdG1mLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19kdG1mX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19kdG1mLWR0bWYub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19kdG1mLWR0bWYuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2R0bWYuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9kdG1mLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2R0bWYuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZHRtZi1kdG1mLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZHRtZi1kdG1mLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZHRtZi5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2R0bWYtZHRtZi5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2R0bWZfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZHRtZi1kdG1mLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZHRtZi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2R0bWYuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvZHRtZi5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2VxdWFsaXplci1lcXVhbGl6ZXIubzogZWxlbWVudHMvZXF1YWxpemVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19lcXVhbGl6ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2VxdWFsaXplci1lcXVhbGl6ZXIubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5vIGB0ZXN0IC1mICdlbGVtZW50cy9lcXVhbGl6ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZXF1YWxpemVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2VxdWFsaXplci1lcXVhbGl6ZXIuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19lcXVhbGl6ZXItZXF1YWxpemVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZXF1YWxpemVyLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19lcXVhbGl6ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5vIGB0ZXN0IC1mICdlbGVtZW50cy9lcXVhbGl6ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZXF1YWxpemVyLmMKLQotZWxlbWVudHMvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5vYmo6IGVsZW1lbnRzL2VxdWFsaXplci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZXF1YWxpemVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19lcXVhbGl6ZXItZXF1YWxpemVyLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2VxdWFsaXplci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2VxdWFsaXplci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9lcXVhbGl6ZXIuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZXF1YWxpemVyLWVxdWFsaXplci5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2VxdWFsaXplci1lcXVhbGl6ZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9lcXVhbGl6ZXIuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19lcXVhbGl6ZXItZXF1YWxpemVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZXF1YWxpemVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2VxdWFsaXplci1lcXVhbGl6ZXIub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9lcXVhbGl6ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9lcXVhbGl6ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvZXF1YWxpemVyLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgubzogZWxlbWVudHMvZmx2ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ZsdmRlbXV4X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19mbHZkZW11eC1mbHZkZW11eC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19mbHZkZW11eC1mbHZkZW11eC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgubyBgdGVzdCAtZiAnZWxlbWVudHMvZmx2ZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmx2ZGVtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXguVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19mbHZkZW11eC1mbHZkZW11eC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2ZsdmRlbXV4LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZmx2ZGVtdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgubyBgdGVzdCAtZiAnZWxlbWVudHMvZmx2ZGVtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvZmx2ZGVtdXguYwotCi1lbGVtZW50cy9lbGVtZW50c19mbHZkZW11eC1mbHZkZW11eC5vYmo6IGVsZW1lbnRzL2ZsdmRlbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19mbHZkZW11eF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19mbHZkZW11eC1mbHZkZW11eC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mbHZkZW11eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2ZsdmRlbXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ZsdmRlbXV4LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ZsdmRlbXV4LWZsdmRlbXV4LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXguUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9mbHZkZW11eC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2ZsdmRlbXV4LWZsdmRlbXV4Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfZmx2ZGVtdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZmx2ZGVtdXgtZmx2ZGVtdXgub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9mbHZkZW11eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2ZsdmRlbXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ZsdmRlbXV4LmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLm86IGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2dka3BpeGJ1ZnNpbmstZ2RrcGl4YnVmc2luay5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19nZGtwaXhidWZzaW5rLWdka3BpeGJ1ZnNpbmsuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2dka3BpeGJ1ZnNpbmstZ2RrcGl4YnVmc2luay5vIGB0ZXN0IC1mICdlbGVtZW50cy9nZGtwaXhidWZzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZ2RrcGl4YnVmc2luay5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2dka3BpeGJ1ZnNpbmstZ2RrcGl4YnVmc2luay5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19nZGtwaXhidWZzaW5rX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2dka3BpeGJ1ZnNpbmstZ2RrcGl4YnVmc2luay5vIGB0ZXN0IC1mICdlbGVtZW50cy9nZGtwaXhidWZzaW5rLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYwotCi1lbGVtZW50cy9lbGVtZW50c19nZGtwaXhidWZzaW5rLWdka3BpeGJ1ZnNpbmsub2JqOiBlbGVtZW50cy9nZGtwaXhidWZzaW5rLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19nZGtwaXhidWZzaW5rX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19nZGtwaXhidWZzaW5rLWdka3BpeGJ1ZnNpbmsub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19nZGtwaXhidWZzaW5rLWdka3BpeGJ1ZnNpbmsuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2dka3BpeGJ1ZnNpbmstZ2RrcGl4YnVmc2luay5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9nZGtwaXhidWZzaW5rLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvZ2RrcGl4YnVmc2luay5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2dka3BpeGJ1ZnNpbmstZ2RrcGl4YnVmc2luay5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2dka3BpeGJ1ZnNpbmtfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfZ2RrcGl4YnVmc2luay1nZGtwaXhidWZzaW5rLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvZ2RrcGl4YnVmc2luay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvZ2RrcGl4YnVmc2luay5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm86IGVsZW1lbnRzL2ltYWdlZnJlZXplLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19pbWFnZWZyZWV6ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2ltYWdlZnJlZXplLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2ltYWdlZnJlZXplLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9pbWFnZWZyZWV6ZS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ltYWdlZnJlZXplX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2ltYWdlZnJlZXplLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2ltYWdlZnJlZXplLmMKLQotZWxlbWVudHMvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUub2JqOiBlbGVtZW50cy9pbWFnZWZyZWV6ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfaW1hZ2VmcmVlemVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfaW1hZ2VmcmVlemUtaW1hZ2VmcmVlemUuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvaW1hZ2VmcmVlemUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9pbWFnZWZyZWV6ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19pbWFnZWZyZWV6ZS1pbWFnZWZyZWV6ZS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvaW1hZ2VmcmVlemUuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19pbWFnZWZyZWV6ZS1pbWFnZWZyZWV6ZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2ltYWdlZnJlZXplX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ltYWdlZnJlZXplLWltYWdlZnJlZXplLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvaW1hZ2VmcmVlemUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9pbWFnZWZyZWV6ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS5vOiBlbGVtZW50cy9pbnRlcmxlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19pbnRlcmxlYXZlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfaW50ZXJsZWF2ZS1pbnRlcmxlYXZlLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUubyBgdGVzdCAtZiAnZWxlbWVudHMvaW50ZXJsZWF2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9pbnRlcmxlYXZlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2ludGVybGVhdmUuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfaW50ZXJsZWF2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUubyBgdGVzdCAtZiAnZWxlbWVudHMvaW50ZXJsZWF2ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9pbnRlcmxlYXZlLmMKLQotZWxlbWVudHMvZWxlbWVudHNfaW50ZXJsZWF2ZS1pbnRlcmxlYXZlLm9iajogZWxlbWVudHMvaW50ZXJsZWF2ZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfaW50ZXJsZWF2ZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfaW50ZXJsZWF2ZS1pbnRlcmxlYXZlLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfaW50ZXJsZWF2ZS1pbnRlcmxlYXZlLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9pbnRlcmxlYXZlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvaW50ZXJsZWF2ZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9pbnRlcmxlYXZlLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL2ludGVybGVhdmUuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19pbnRlcmxlYXZlLWludGVybGVhdmUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19pbnRlcmxlYXZlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2ludGVybGVhdmUtaW50ZXJsZWF2ZS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2ludGVybGVhdmUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9pbnRlcmxlYXZlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2ludGVybGVhdmUuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMubzogZWxlbWVudHMvanBlZ2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfanBlZ2RlY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfanBlZ2RlYy1qcGVnZGVjLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2pwZWdkZWMtanBlZ2RlYy5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfanBlZ2RlYy1qcGVnZGVjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2pwZWdkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvanBlZ2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9qcGVnZGVjLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfanBlZ2RlYy1qcGVnZGVjLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2pwZWdkZWNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfanBlZ2RlYy1qcGVnZGVjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2pwZWdkZWMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvanBlZ2RlYy5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2pwZWdkZWMtanBlZ2RlYy5vYmo6IGVsZW1lbnRzL2pwZWdkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2pwZWdkZWNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2pwZWdkZWMtanBlZ2RlYy5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2pwZWdkZWMtanBlZ2RlYy5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfanBlZ2RlYy1qcGVnZGVjLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvanBlZ2RlYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2pwZWdkZWMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvanBlZ2RlYy5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9qcGVnZGVjLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfanBlZ2RlYy1qcGVnZGVjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfanBlZ2RlY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19qcGVnZGVjLWpwZWdkZWMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9qcGVnZGVjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvanBlZ2RlYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9qcGVnZGVjLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLm86IGVsZW1lbnRzL2pwZWdlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2pwZWdlbmNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2pwZWdlbmMtanBlZ2VuYy5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZW5jLWpwZWdlbmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2pwZWdlbmMtanBlZ2VuYy5vIGB0ZXN0IC1mICdlbGVtZW50cy9qcGVnZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2pwZWdlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvanBlZ2VuYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2pwZWdlbmMtanBlZ2VuYy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19qcGVnZW5jX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2pwZWdlbmMtanBlZ2VuYy5vIGB0ZXN0IC1mICdlbGVtZW50cy9qcGVnZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2pwZWdlbmMuYwotCi1lbGVtZW50cy9lbGVtZW50c19qcGVnZW5jLWpwZWdlbmMub2JqOiBlbGVtZW50cy9qcGVnZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19qcGVnZW5jX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19qcGVnZW5jLWpwZWdlbmMub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19qcGVnZW5jLWpwZWdlbmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2pwZWdlbmMtanBlZ2VuYy5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL2pwZWdlbmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9qcGVnZW5jLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL2pwZWdlbmMuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvanBlZ2VuYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2pwZWdlbmMtanBlZ2VuYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2pwZWdlbmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfanBlZ2VuYy1qcGVnZW5jLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvanBlZ2VuYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL2pwZWdlbmMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvanBlZ2VuYy5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm86IGVsZW1lbnRzL2xldmVsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19sZXZlbF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfbGV2ZWwtbGV2ZWwubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbGV2ZWwtbGV2ZWwuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2xldmVsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2xldmVsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2xldmVsLWxldmVsLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbGV2ZWwtbGV2ZWwuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9sZXZlbC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2xldmVsX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL2xldmVsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL2xldmVsLmMKLQotZWxlbWVudHMvZWxlbWVudHNfbGV2ZWwtbGV2ZWwub2JqOiBlbGVtZW50cy9sZXZlbC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfbGV2ZWxfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbGV2ZWwtbGV2ZWwuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbGV2ZWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9sZXZlbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9sZXZlbC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19sZXZlbC1sZXZlbC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX2xldmVsLWxldmVsLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvbGV2ZWwuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19sZXZlbC1sZXZlbC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX2xldmVsX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX2xldmVsLWxldmVsLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbGV2ZWwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9sZXZlbC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9sZXZlbC5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm86IGVsZW1lbnRzL211bGF3ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19tdWxhd2RlY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfbXVsYXdkZWMtbXVsYXdkZWMubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdkZWMtbXVsYXdkZWMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL211bGF3ZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL211bGF3ZGVjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdkZWMtbXVsYXdkZWMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9tdWxhd2RlYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX211bGF3ZGVjX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL211bGF3ZGVjLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL211bGF3ZGVjLmMKLQotZWxlbWVudHMvZWxlbWVudHNfbXVsYXdkZWMtbXVsYXdkZWMub2JqOiBlbGVtZW50cy9tdWxhd2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfbXVsYXdkZWNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdkZWMtbXVsYXdkZWMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbXVsYXdkZWMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9tdWxhd2RlYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9tdWxhd2RlYy5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19tdWxhd2RlYy1tdWxhd2RlYy5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvbXVsYXdkZWMuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19tdWxhd2RlYy1tdWxhd2RlYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX211bGF3ZGVjX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZGVjLW11bGF3ZGVjLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbXVsYXdkZWMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9tdWxhd2RlYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9tdWxhd2RlYy5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm86IGVsZW1lbnRzL211bGF3ZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19tdWxhd2VuY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfbXVsYXdlbmMtbXVsYXdlbmMubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdlbmMtbXVsYXdlbmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL211bGF3ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL211bGF3ZW5jLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdlbmMtbXVsYXdlbmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9tdWxhd2VuYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX211bGF3ZW5jX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL211bGF3ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL211bGF3ZW5jLmMKLQotZWxlbWVudHMvZWxlbWVudHNfbXVsYXdlbmMtbXVsYXdlbmMub2JqOiBlbGVtZW50cy9tdWxhd2VuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfbXVsYXdlbmNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsYXdlbmMtbXVsYXdlbmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbXVsYXdlbmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9tdWxhd2VuYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9tdWxhd2VuYy5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19tdWxhd2VuYy1tdWxhd2VuYy5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvbXVsYXdlbmMuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19tdWxhd2VuYy1tdWxhd2VuYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX211bGF3ZW5jX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bGF3ZW5jLW11bGF3ZW5jLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvbXVsYXdlbmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9tdWxhd2VuYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9tdWxhd2VuYy5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX211bHRpZmlsZS1tdWx0aWZpbGUubzogZWxlbWVudHMvbXVsdGlmaWxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19tdWx0aWZpbGVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX211bHRpZmlsZS1tdWx0aWZpbGUubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5vIGB0ZXN0IC1mICdlbGVtZW50cy9tdWx0aWZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvbXVsdGlmaWxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bHRpZmlsZS1tdWx0aWZpbGUuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19tdWx0aWZpbGUtbXVsdGlmaWxlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvbXVsdGlmaWxlLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19tdWx0aWZpbGVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5vIGB0ZXN0IC1mICdlbGVtZW50cy9tdWx0aWZpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvbXVsdGlmaWxlLmMKLQotZWxlbWVudHMvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5vYmo6IGVsZW1lbnRzL211bHRpZmlsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfbXVsdGlmaWxlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19tdWx0aWZpbGUtbXVsdGlmaWxlLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL211bHRpZmlsZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL211bHRpZmlsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9tdWx0aWZpbGUuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfbXVsdGlmaWxlLW11bHRpZmlsZS5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX211bHRpZmlsZS1tdWx0aWZpbGUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9tdWx0aWZpbGUuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19tdWx0aWZpbGUtbXVsdGlmaWxlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfbXVsdGlmaWxlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX211bHRpZmlsZS1tdWx0aWZpbGUub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9tdWx0aWZpbGUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9tdWx0aWZpbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvbXVsdGlmaWxlLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgubzogZWxlbWVudHMvcXRtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3F0bXV4X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19xdG11eC1xdG11eC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19xdG11eC1xdG11eC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgubyBgdGVzdCAtZiAnZWxlbWVudHMvcXRtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcXRtdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcXRtdXgtcXRtdXguVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19xdG11eC1xdG11eC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3F0bXV4LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcXRtdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgubyBgdGVzdCAtZiAnZWxlbWVudHMvcXRtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcXRtdXguYwotCi1lbGVtZW50cy9lbGVtZW50c19xdG11eC1xdG11eC5vYmo6IGVsZW1lbnRzL3F0bXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19xdG11eF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19xdG11eC1xdG11eC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9xdG11eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3F0bXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3F0bXV4LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3F0bXV4LXF0bXV4LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcXRtdXgtcXRtdXguUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9xdG11eC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3F0bXV4LXF0bXV4Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcXRtdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcXRtdXgtcXRtdXgub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9xdG11eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3F0bXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3F0bXV4LmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLm86IGVsZW1lbnRzL3JnYW5hbHlzaXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3JnYW5hbHlzaXNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3JnYW5hbHlzaXMtcmdhbmFseXNpcy5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ2FuYWx5c2lzLXJnYW5hbHlzaXMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3JnYW5hbHlzaXMtcmdhbmFseXNpcy5vIGB0ZXN0IC1mICdlbGVtZW50cy9yZ2FuYWx5c2lzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3JnYW5hbHlzaXMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcmdhbmFseXNpcy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3JnYW5hbHlzaXMtcmdhbmFseXNpcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19yZ2FuYWx5c2lzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3JnYW5hbHlzaXMtcmdhbmFseXNpcy5vIGB0ZXN0IC1mICdlbGVtZW50cy9yZ2FuYWx5c2lzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3JnYW5hbHlzaXMuYwotCi1lbGVtZW50cy9lbGVtZW50c19yZ2FuYWx5c2lzLXJnYW5hbHlzaXMub2JqOiBlbGVtZW50cy9yZ2FuYWx5c2lzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19yZ2FuYWx5c2lzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19yZ2FuYWx5c2lzLXJnYW5hbHlzaXMub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ2FuYWx5c2lzLXJnYW5hbHlzaXMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3JnYW5hbHlzaXMtcmdhbmFseXNpcy5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3JnYW5hbHlzaXMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9yZ2FuYWx5c2lzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3JnYW5hbHlzaXMuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcmdhbmFseXNpcy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3JnYW5hbHlzaXMtcmdhbmFseXNpcy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3JnYW5hbHlzaXNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmdhbmFseXNpcy1yZ2FuYWx5c2lzLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcmdhbmFseXNpcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3JnYW5hbHlzaXMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcmdhbmFseXNpcy5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3JnbGltaXRlci1yZ2xpbWl0ZXIubzogZWxlbWVudHMvcmdsaW1pdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19yZ2xpbWl0ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3JnbGltaXRlci1yZ2xpbWl0ZXIubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5vIGB0ZXN0IC1mICdlbGVtZW50cy9yZ2xpbWl0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcmdsaW1pdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3JnbGltaXRlci1yZ2xpbWl0ZXIuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ2xpbWl0ZXItcmdsaW1pdGVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcmdsaW1pdGVyLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19yZ2xpbWl0ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5vIGB0ZXN0IC1mICdlbGVtZW50cy9yZ2xpbWl0ZXIuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcmdsaW1pdGVyLmMKLQotZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5vYmo6IGVsZW1lbnRzL3JnbGltaXRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcmdsaW1pdGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19yZ2xpbWl0ZXItcmdsaW1pdGVyLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3JnbGltaXRlci5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3JnbGltaXRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9yZ2xpbWl0ZXIuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmdsaW1pdGVyLXJnbGltaXRlci5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3JnbGltaXRlci1yZ2xpbWl0ZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9yZ2xpbWl0ZXIuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19yZ2xpbWl0ZXItcmdsaW1pdGVyLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcmdsaW1pdGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3JnbGltaXRlci1yZ2xpbWl0ZXIub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9yZ2xpbWl0ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9yZ2xpbWl0ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcmdsaW1pdGVyLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUubzogZWxlbWVudHMvcmd2b2x1bWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3Jndm9sdW1lX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19yZ3ZvbHVtZS1yZ3ZvbHVtZS5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ3ZvbHVtZS1yZ3ZvbHVtZS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUubyBgdGVzdCAtZiAnZWxlbWVudHMvcmd2b2x1bWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcmd2b2x1bWUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ3ZvbHVtZS1yZ3ZvbHVtZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3Jndm9sdW1lLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcmd2b2x1bWVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUubyBgdGVzdCAtZiAnZWxlbWVudHMvcmd2b2x1bWUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcmd2b2x1bWUuYwotCi1lbGVtZW50cy9lbGVtZW50c19yZ3ZvbHVtZS1yZ3ZvbHVtZS5vYmo6IGVsZW1lbnRzL3Jndm9sdW1lLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19yZ3ZvbHVtZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19yZ3ZvbHVtZS1yZ3ZvbHVtZS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9yZ3ZvbHVtZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3Jndm9sdW1lLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3Jndm9sdW1lLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3Jndm9sdW1lLXJndm9sdW1lLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9yZ3ZvbHVtZS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3Jndm9sdW1lLXJndm9sdW1lLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcmd2b2x1bWVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcmd2b2x1bWUtcmd2b2x1bWUub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9yZ3ZvbHVtZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3Jndm9sdW1lLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3Jndm9sdW1lLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfcnRwYXV4LXJ0cGF1eC5vOiBlbGVtZW50cy9ydHBhdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGF1eF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcnRwYXV4LXJ0cGF1eC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBhdXgtcnRwYXV4LlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBhdXgtcnRwYXV4Lm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3J0cGF1eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9ydHBhdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwYXV4LXJ0cGF1eC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGF1eC1ydHBhdXguUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9ydHBhdXguYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19ydHBhdXgtcnRwYXV4Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGF1eF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBhdXgtcnRwYXV4Lm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3J0cGF1eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9ydHBhdXguYwotCi1lbGVtZW50cy9lbGVtZW50c19ydHBhdXgtcnRwYXV4Lm9iajogZWxlbWVudHMvcnRwYXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBhdXhfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGF1eC1ydHBhdXgub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBhdXgtcnRwYXV4LlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBhdXgtcnRwYXV4Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcnRwYXV4LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcnRwYXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3J0cGF1eC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBhdXgtcnRwYXV4LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwYXV4LXJ0cGF1eC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3J0cGF1eC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3J0cGF1eC1ydHBhdXgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBhdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwYXV4LXJ0cGF1eC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3J0cGF1eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3J0cGF1eC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9ydHBhdXguYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3QtcnRwYmluX2J1ZmZlcl9saXN0Lm86IGVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3QtcnRwYmluX2J1ZmZlcl9saXN0Lm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3QuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3QubyBgdGVzdCAtZiAnZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3QtcnRwYmluX2J1ZmZlcl9saXN0LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0LXJ0cGJpbl9idWZmZXJfbGlzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3QubyBgdGVzdCAtZiAnZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3Qub2JqOiBlbGVtZW50cy9ydHBiaW5fYnVmZmVyX2xpc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0LXJ0cGJpbl9idWZmZXJfbGlzdC5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3QuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3Qub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9ydHBiaW5fYnVmZmVyX2xpc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9ydHBiaW5fYnVmZmVyX2xpc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdC1ydHBiaW5fYnVmZmVyX2xpc3QuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3QtcnRwYmluX2J1ZmZlcl9saXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcnRwYmluX2J1ZmZlcl9saXN0LXJ0cGJpbl9idWZmZXJfbGlzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGJpbl9idWZmZXJfbGlzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBiaW5fYnVmZmVyX2xpc3QtcnRwYmluX2J1ZmZlcl9saXN0Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24ubzogZWxlbWVudHMvcnRwY29sbGlzaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBjb2xsaXNpb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24ubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5vIGB0ZXN0IC1mICdlbGVtZW50cy9ydHBjb2xsaXNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcnRwY29sbGlzaW9uLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24uVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBjb2xsaXNpb24tcnRwY29sbGlzaW9uLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcnRwY29sbGlzaW9uLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBjb2xsaXNpb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5vIGB0ZXN0IC1mICdlbGVtZW50cy9ydHBjb2xsaXNpb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcnRwY29sbGlzaW9uLmMKLQotZWxlbWVudHMvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5vYmo6IGVsZW1lbnRzL3J0cGNvbGxpc2lvbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwY29sbGlzaW9uX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19ydHBjb2xsaXNpb24tcnRwY29sbGlzaW9uLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9ydHBjb2xsaXNpb24uYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwY29sbGlzaW9uLXJ0cGNvbGxpc2lvbi5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9ydHBjb2xsaXNpb24uYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19ydHBjb2xsaXNpb24tcnRwY29sbGlzaW9uLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwY29sbGlzaW9uX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGNvbGxpc2lvbi1ydHBjb2xsaXNpb24ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9ydHBjb2xsaXNpb24uYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9ydHBjb2xsaXNpb24uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcnRwY29sbGlzaW9uLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfcnRwaDI2MS1ydHBoMjYxLm86IGVsZW1lbnRzL3J0cGgyNjEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGgyNjFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBoMjYxLXJ0cGgyNjEuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS5vIGB0ZXN0IC1mICdlbGVtZW50cy9ydHBoMjYxLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3J0cGgyNjEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaDI2MS1ydHBoMjYxLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaDI2MS1ydHBoMjYxLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcnRwaDI2MS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBoMjYxX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS5vIGB0ZXN0IC1mICdlbGVtZW50cy9ydHBoMjYxLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3J0cGgyNjEuYwotCi1lbGVtZW50cy9lbGVtZW50c19ydHBoMjYxLXJ0cGgyNjEub2JqOiBlbGVtZW50cy9ydHBoMjYxLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBoMjYxX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19ydHBoMjYxLXJ0cGgyNjEub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBoMjYxLXJ0cGgyNjEuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3J0cGgyNjEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9ydHBoMjYxLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3J0cGgyNjEuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaDI2MS1ydHBoMjYxLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaDI2MS1ydHBoMjYxLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcnRwaDI2MS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjEtcnRwaDI2MS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGgyNjFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwaDI2MS1ydHBoMjYxLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcnRwaDI2MS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3J0cGgyNjEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcnRwaDI2MS5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjMtcnRwaDI2My5vOiBlbGVtZW50cy9ydHBoMjYzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBoMjYzX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaDI2My1ydHBoMjYzLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMubyBgdGVzdCAtZiAnZWxlbWVudHMvcnRwaDI2My5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9ydHBoMjYzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGgyNjMtcnRwaDI2My5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGgyNjMtcnRwaDI2My5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3J0cGgyNjMuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwaDI2M19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMubyBgdGVzdCAtZiAnZWxlbWVudHMvcnRwaDI2My5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9ydHBoMjYzLmMKLQotZWxlbWVudHMvZWxlbWVudHNfcnRwaDI2My1ydHBoMjYzLm9iajogZWxlbWVudHMvcnRwaDI2My5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwaDI2M19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcnRwaDI2My1ydHBoMjYzLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaDI2My1ydHBoMjYzLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9ydHBoMjYzLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcnRwaDI2My5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9ydHBoMjYzLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGgyNjMtcnRwaDI2My5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGgyNjMtcnRwaDI2My5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3J0cGgyNjMuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19ydHBoMjYzLXJ0cGgyNjMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBoMjYzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGgyNjMtcnRwaDI2My5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3J0cGgyNjMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9ydHBoMjYzLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3J0cGgyNjMuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLm86IGVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIubyBgdGVzdCAtZiAnZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyLXJ0cGppdHRlcmJ1ZmZlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIubyBgdGVzdCAtZiAnZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIub2JqOiBlbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyLXJ0cGppdHRlcmJ1ZmZlci5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9ydHBqaXR0ZXJidWZmZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlci1ydHBqaXR0ZXJidWZmZXIuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcnRwaml0dGVyYnVmZmVyLXJ0cGppdHRlcmJ1ZmZlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cGppdHRlcmJ1ZmZlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBqaXR0ZXJidWZmZXItcnRwaml0dGVyYnVmZmVyLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3J0cG11eC1ydHBtdXgubzogZWxlbWVudHMvcnRwbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBtdXhfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3J0cG11eC1ydHBtdXgubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5vIGB0ZXN0IC1mICdlbGVtZW50cy9ydHBtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcnRwbXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cG11eC1ydHBtdXguVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBtdXgtcnRwbXV4LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvcnRwbXV4LmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBtdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5vIGB0ZXN0IC1mICdlbGVtZW50cy9ydHBtdXguYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcnRwbXV4LmMKLQotZWxlbWVudHMvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5vYmo6IGVsZW1lbnRzL3J0cG11eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwbXV4X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19ydHBtdXgtcnRwbXV4Lm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3J0cG11eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3J0cG11eC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9ydHBtdXguYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwbXV4LXJ0cG11eC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cG11eC1ydHBtdXguUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9ydHBtdXguYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19ydHBtdXgtcnRwbXV4Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwbXV4X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3J0cG11eC1ydHBtdXgub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9ydHBtdXguYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy9ydHBtdXguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcnRwbXV4LmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfcnRwcnR4LXJ0cHJ0eC5vOiBlbGVtZW50cy9ydHBydHguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cHJ0eF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcnRwcnR4LXJ0cHJ0eC5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBydHgtcnRwcnR4LlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBydHgtcnRwcnR4Lm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3J0cHJ0eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9ydHBydHguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwcnR4LXJ0cHJ0eC5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cHJ0eC1ydHBydHguUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9ydHBydHguYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c19ydHBydHgtcnRwcnR4Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cHJ0eF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBydHgtcnRwcnR4Lm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3J0cHJ0eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy9ydHBydHguYwotCi1lbGVtZW50cy9lbGVtZW50c19ydHBydHgtcnRwcnR4Lm9iajogZWxlbWVudHMvcnRwcnR4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBydHhfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3J0cHJ0eC1ydHBydHgub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBydHgtcnRwcnR4LlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBydHgtcnRwcnR4Lm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcnRwcnR4LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcnRwcnR4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3J0cHJ0eC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBydHgtcnRwcnR4LlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfcnRwcnR4LXJ0cHJ0eC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3J0cHJ0eC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3J0cHJ0eC1ydHBydHgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19ydHBydHhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwcnR4LXJ0cHJ0eC5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3J0cHJ0eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3J0cHJ0eC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9ydHBydHguYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24ubzogZWxlbWVudHMvcnRwc2Vzc2lvbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwc2Vzc2lvbl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cHNlc3Npb24tcnRwc2Vzc2lvbi5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3J0cHNlc3Npb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcnRwc2Vzc2lvbi5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24uVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9ydHBzZXNzaW9uLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cHNlc3Npb25fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3J0cHNlc3Npb24uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvcnRwc2Vzc2lvbi5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3J0cHNlc3Npb24tcnRwc2Vzc2lvbi5vYmo6IGVsZW1lbnRzL3J0cHNlc3Npb24uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3J0cHNlc3Npb25fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3J0cHNlc3Npb24tcnRwc2Vzc2lvbi5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3J0cHNlc3Npb24tcnRwc2Vzc2lvbi5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvcnRwc2Vzc2lvbi5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3J0cHNlc3Npb24uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvcnRwc2Vzc2lvbi5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24uVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9ydHBzZXNzaW9uLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfcnRwc2Vzc2lvbi1ydHBzZXNzaW9uLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfcnRwc2Vzc2lvbl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c19ydHBzZXNzaW9uLXJ0cHNlc3Npb24ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9ydHBzZXNzaW9uLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvcnRwc2Vzc2lvbi5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy9ydHBzZXNzaW9uLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMubzogZWxlbWVudHMvc291cGh0dHBzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3NvdXBodHRwc3JjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19zb3VwaHR0cHNyYy1zb3VwaHR0cHNyYy5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zb3VwaHR0cHNyYy1zb3VwaHR0cHNyYy5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvc291cGh0dHBzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvc291cGh0dHBzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zb3VwaHR0cHNyYy1zb3VwaHR0cHNyYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3NvdXBodHRwc3JjLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfc291cGh0dHBzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMubyBgdGVzdCAtZiAnZWxlbWVudHMvc291cGh0dHBzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvc291cGh0dHBzcmMuYwotCi1lbGVtZW50cy9lbGVtZW50c19zb3VwaHR0cHNyYy1zb3VwaHR0cHNyYy5vYmo6IGVsZW1lbnRzL3NvdXBodHRwc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19zb3VwaHR0cHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zb3VwaHR0cHNyYy1zb3VwaHR0cHNyYy5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9zb3VwaHR0cHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3NvdXBodHRwc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3NvdXBodHRwc3JjLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3NvdXBodHRwc3JjLXNvdXBodHRwc3JjLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9zb3VwaHR0cHNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3NvdXBodHRwc3JjLXNvdXBodHRwc3JjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfc291cGh0dHBzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc291cGh0dHBzcmMtc291cGh0dHBzcmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9zb3VwaHR0cHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3NvdXBodHRwc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3NvdXBodHRwc3JjLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ubzogZWxlbWVudHMvc3BlY3RydW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3NwZWN0cnVtX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19zcGVjdHJ1bS1zcGVjdHJ1bS5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zcGVjdHJ1bS1zcGVjdHJ1bS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ubyBgdGVzdCAtZiAnZWxlbWVudHMvc3BlY3RydW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvc3BlY3RydW0uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0uVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zcGVjdHJ1bS1zcGVjdHJ1bS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3NwZWN0cnVtLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfc3BlY3RydW1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ubyBgdGVzdCAtZiAnZWxlbWVudHMvc3BlY3RydW0uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvc3BlY3RydW0uYwotCi1lbGVtZW50cy9lbGVtZW50c19zcGVjdHJ1bS1zcGVjdHJ1bS5vYmo6IGVsZW1lbnRzL3NwZWN0cnVtLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19zcGVjdHJ1bV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zcGVjdHJ1bS1zcGVjdHJ1bS5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9zcGVjdHJ1bS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3NwZWN0cnVtLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3NwZWN0cnVtLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3NwZWN0cnVtLXNwZWN0cnVtLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9zcGVjdHJ1bS5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3NwZWN0cnVtLXNwZWN0cnVtLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfc3BlY3RydW1fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3BlY3RydW0tc3BlY3RydW0ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9zcGVjdHJ1bS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3NwZWN0cnVtLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3NwZWN0cnVtLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ubzogZWxlbWVudHMvc3VuYXVkaW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3N1bmF1ZGlvX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c19zdW5hdWRpby1zdW5hdWRpby5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zdW5hdWRpby1zdW5hdWRpby5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ubyBgdGVzdCAtZiAnZWxlbWVudHMvc3VuYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvc3VuYXVkaW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8uVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zdW5hdWRpby1zdW5hdWRpby5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3N1bmF1ZGlvLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfc3VuYXVkaW9fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ubyBgdGVzdCAtZiAnZWxlbWVudHMvc3VuYXVkaW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZWxlbWVudHMvc3VuYXVkaW8uYwotCi1lbGVtZW50cy9lbGVtZW50c19zdW5hdWRpby1zdW5hdWRpby5vYmo6IGVsZW1lbnRzL3N1bmF1ZGlvLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c19zdW5hdWRpb19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c19zdW5hdWRpby1zdW5hdWRpby5UcG8gLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9zdW5hdWRpby5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3N1bmF1ZGlvLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3N1bmF1ZGlvLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3N1bmF1ZGlvLXN1bmF1ZGlvLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy9zdW5hdWRpby5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3N1bmF1ZGlvLXN1bmF1ZGlvLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfc3VuYXVkaW9fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfc3VuYXVkaW8tc3VuYXVkaW8ub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy9zdW5hdWRpby5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3N1bmF1ZGlvLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3N1bmF1ZGlvLmMnOyBmaWAKLQotZWxlbWVudHMvZWxlbWVudHNfdWRwc3JjLXVkcHNyYy5vOiBlbGVtZW50cy91ZHBzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3VkcHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfdWRwc3JjLXVkcHNyYy5vIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c191ZHBzcmMtdWRwc3JjLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3VkcHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy91ZHBzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdWRwc3JjLXVkcHNyYy5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3VkcHNyYy11ZHBzcmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy91ZHBzcmMuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3VkcHNyY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3VkcHNyYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy91ZHBzcmMuYwotCi1lbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLm9iajogZWxlbWVudHMvdWRwc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c191ZHBzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3VkcHNyYy11ZHBzcmMub2JqIC1NRCAtTVAgLU1GIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c191ZHBzcmMtdWRwc3JjLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c191ZHBzcmMtdWRwc3JjLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdWRwc3JjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvdWRwc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3VkcHNyYy5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c191ZHBzcmMtdWRwc3JjLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdWRwc3JjLXVkcHNyYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3VkcHNyYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3VkcHNyYy11ZHBzcmMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c191ZHBzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZWxlbWVudHMvZWxlbWVudHNfdWRwc3JjLXVkcHNyYy5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3VkcHNyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2VsZW1lbnRzL3VkcHNyYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy91ZHBzcmMuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c192aWRlb2Nyb3AtdmlkZW9jcm9wLm86IGVsZW1lbnRzL3ZpZGVvY3JvcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdmlkZW9jcm9wX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c192aWRlb2Nyb3AtdmlkZW9jcm9wLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3AuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3AubyBgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9jcm9wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZpZGVvY3JvcC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c192aWRlb2Nyb3AtdmlkZW9jcm9wLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9jcm9wLXZpZGVvY3JvcC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3ZpZGVvY3JvcC5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3AubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdmlkZW9jcm9wX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3AubyBgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9jcm9wLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZpZGVvY3JvcC5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3Aub2JqOiBlbGVtZW50cy92aWRlb2Nyb3AuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3ZpZGVvY3JvcF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfdmlkZW9jcm9wLXZpZGVvY3JvcC5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3AuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3Aub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy92aWRlb2Nyb3AuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92aWRlb2Nyb3AuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvdmlkZW9jcm9wLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvY3JvcC12aWRlb2Nyb3AuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c192aWRlb2Nyb3AtdmlkZW9jcm9wLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvdmlkZW9jcm9wLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfdmlkZW9jcm9wLXZpZGVvY3JvcC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3ZpZGVvY3JvcF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c192aWRlb2Nyb3AtdmlkZW9jcm9wLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9jcm9wLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvdmlkZW9jcm9wLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3ZpZGVvY3JvcC5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm86IGVsZW1lbnRzL3ZpZGVvZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c192aWRlb2ZpbHRlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfdmlkZW9maWx0ZXItdmlkZW9maWx0ZXIubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9maWx0ZXItdmlkZW9maWx0ZXIuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZpZGVvZmlsdGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9maWx0ZXItdmlkZW9maWx0ZXIuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdlbGVtZW50cy92aWRlb2ZpbHRlci5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3ZpZGVvZmlsdGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm8gYHRlc3QgLWYgJ2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZpZGVvZmlsdGVyLmMKLQotZWxlbWVudHMvZWxlbWVudHNfdmlkZW9maWx0ZXItdmlkZW9maWx0ZXIub2JqOiBlbGVtZW50cy92aWRlb2ZpbHRlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdmlkZW9maWx0ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9maWx0ZXItdmlkZW9maWx0ZXIuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9maWx0ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92aWRlb2ZpbHRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy92aWRlb2ZpbHRlci5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c192aWRlb2ZpbHRlci12aWRlb2ZpbHRlci5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvdmlkZW9maWx0ZXIuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c192aWRlb2ZpbHRlci12aWRlb2ZpbHRlci5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3ZpZGVvZmlsdGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvZmlsdGVyLXZpZGVvZmlsdGVyLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9maWx0ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92aWRlb2ZpbHRlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy92aWRlb2ZpbHRlci5jJzsgZmlgCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vOiBlbGVtZW50cy92aWRlb21peGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c192aWRlb21peGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c192aWRlb21peGVyLXZpZGVvbWl4ZXIubyAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9taXhlci12aWRlb21peGVyLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c192aWRlb21peGVyLXZpZGVvbWl4ZXIubyBgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9taXhlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy92aWRlb21peGVyLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c192aWRlb21peGVyLXZpZGVvbWl4ZXIubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdmlkZW9taXhlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c192aWRlb21peGVyLXZpZGVvbWl4ZXIubyBgdGVzdCAtZiAnZWxlbWVudHMvdmlkZW9taXhlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlbGVtZW50cy92aWRlb21peGVyLmMKLQotZWxlbWVudHMvZWxlbWVudHNfdmlkZW9taXhlci12aWRlb21peGVyLm9iajogZWxlbWVudHMvdmlkZW9taXhlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdmlkZW9taXhlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfdmlkZW9taXhlci12aWRlb21peGVyLm9iaiAtTUQgLU1QIC1NRiBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdmlkZW9taXhlci12aWRlb21peGVyLlRwbyAtYyAtbyBlbGVtZW50cy9lbGVtZW50c192aWRlb21peGVyLXZpZGVvbWl4ZXIub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy92aWRlb21peGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvdmlkZW9taXhlci5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9lbGVtZW50cy92aWRlb21peGVyLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5UcG8gZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYycgb2JqZWN0PSdlbGVtZW50cy9lbGVtZW50c192aWRlb21peGVyLXZpZGVvbWl4ZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlbGVtZW50c192aWRlb21peGVyX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vYmogYGlmIHRlc3QgLWYgJ2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92aWRlb21peGVyLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYyc7IGZpYAotCi1lbGVtZW50cy9lbGVtZW50c192cDllbmMtdnA5ZW5jLm86IGVsZW1lbnRzL3ZwOWVuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdnA5ZW5jX0NGTEFHUykgJChDRkxBR1MpIC1NVCBlbGVtZW50cy9lbGVtZW50c192cDllbmMtdnA5ZW5jLm8gLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMubyBgdGVzdCAtZiAnZWxlbWVudHMvdnA5ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZwOWVuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c192cDllbmMtdnA5ZW5jLlRwbyBlbGVtZW50cy8kKERFUERJUikvZWxlbWVudHNfdnA5ZW5jLXZwOWVuYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VsZW1lbnRzL3ZwOWVuYy5jJyBvYmplY3Q9J2VsZW1lbnRzL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZWxlbWVudHNfdnA5ZW5jX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMubyBgdGVzdCAtZiAnZWxlbWVudHMvdnA5ZW5jLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGVsZW1lbnRzL3ZwOWVuYy5jCi0KLWVsZW1lbnRzL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMub2JqOiBlbGVtZW50cy92cDllbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3ZwOWVuY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZWxlbWVudHMvZWxlbWVudHNfdnA5ZW5jLXZwOWVuYy5vYmogLU1EIC1NUCAtTUYgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMuVHBvIC1jIC1vIGVsZW1lbnRzL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMub2JqIGBpZiB0ZXN0IC1mICdlbGVtZW50cy92cDllbmMuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdlbGVtZW50cy92cDllbmMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZWxlbWVudHMvdnA5ZW5jLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgZWxlbWVudHMvJChERVBESVIpL2VsZW1lbnRzX3ZwOWVuYy12cDllbmMuVHBvIGVsZW1lbnRzLyQoREVQRElSKS9lbGVtZW50c192cDllbmMtdnA5ZW5jLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZWxlbWVudHMvdnA5ZW5jLmMnIG9iamVjdD0nZWxlbWVudHMvZWxlbWVudHNfdnA5ZW5jLXZwOWVuYy5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVsZW1lbnRzX3ZwOWVuY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlbGVtZW50cy9lbGVtZW50c192cDllbmMtdnA5ZW5jLm9iaiBgaWYgdGVzdCAtZiAnZWxlbWVudHMvdnA5ZW5jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZWxlbWVudHMvdnA5ZW5jLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2VsZW1lbnRzL3ZwOWVuYy5jJzsgZmlgCi0KLW9yYy9vcmNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2Uubzogb3JjL2RlaW50ZXJsYWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChvcmNfZGVpbnRlcmxhY2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG9yYy9vcmNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UubyAtTUQgLU1QIC1NRiBvcmMvJChERVBESVIpL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5UcG8gLWMgLW8gb3JjL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5vIGB0ZXN0IC1mICdvcmMvZGVpbnRlcmxhY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgb3JjL2RlaW50ZXJsYWNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgb3JjLyQoREVQRElSKS9vcmNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuVHBvIG9yYy8kKERFUERJUikvb3JjX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nb3JjL2RlaW50ZXJsYWNlLmMnIG9iamVjdD0nb3JjL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChvcmNfZGVpbnRlcmxhY2VfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gb3JjL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5vIGB0ZXN0IC1mICdvcmMvZGVpbnRlcmxhY2UuYycgfHwgZWNobyAnJChzcmNkaXIpLydgb3JjL2RlaW50ZXJsYWNlLmMKLQotb3JjL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5vYmo6IG9yYy9kZWludGVybGFjZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQob3JjX2RlaW50ZXJsYWNlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBvcmMvb3JjX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm9iaiAtTUQgLU1QIC1NRiBvcmMvJChERVBESVIpL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5UcG8gLWMgLW8gb3JjL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5vYmogYGlmIHRlc3QgLWYgJ29yYy9kZWludGVybGFjZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ29yYy9kZWludGVybGFjZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9vcmMvZGVpbnRlcmxhY2UuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBvcmMvJChERVBESVIpL29yY19kZWludGVybGFjZS1kZWludGVybGFjZS5UcG8gb3JjLyQoREVQRElSKS9vcmNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdvcmMvZGVpbnRlcmxhY2UuYycgb2JqZWN0PSdvcmMvb3JjX2RlaW50ZXJsYWNlLWRlaW50ZXJsYWNlLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQob3JjX2RlaW50ZXJsYWNlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIG9yYy9vcmNfZGVpbnRlcmxhY2UtZGVpbnRlcmxhY2Uub2JqIGBpZiB0ZXN0IC1mICdvcmMvZGVpbnRlcmxhY2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdvcmMvZGVpbnRlcmxhY2UuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvb3JjL2RlaW50ZXJsYWNlLmMnOyBmaWAKLQotb3JjL29yY192aWRlb2JveC12aWRlb2JveC5vOiBvcmMvdmlkZW9ib3guYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG9yY192aWRlb2JveF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgb3JjL29yY192aWRlb2JveC12aWRlb2JveC5vIC1NRCAtTVAgLU1GIG9yYy8kKERFUERJUikvb3JjX3ZpZGVvYm94LXZpZGVvYm94LlRwbyAtYyAtbyBvcmMvb3JjX3ZpZGVvYm94LXZpZGVvYm94Lm8gYHRlc3QgLWYgJ29yYy92aWRlb2JveC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BvcmMvdmlkZW9ib3guYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBvcmMvJChERVBESVIpL29yY192aWRlb2JveC12aWRlb2JveC5UcG8gb3JjLyQoREVQRElSKS9vcmNfdmlkZW9ib3gtdmlkZW9ib3guUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdvcmMvdmlkZW9ib3guYycgb2JqZWN0PSdvcmMvb3JjX3ZpZGVvYm94LXZpZGVvYm94Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG9yY192aWRlb2JveF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBvcmMvb3JjX3ZpZGVvYm94LXZpZGVvYm94Lm8gYHRlc3QgLWYgJ29yYy92aWRlb2JveC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BvcmMvdmlkZW9ib3guYwotCi1vcmMvb3JjX3ZpZGVvYm94LXZpZGVvYm94Lm9iajogb3JjL3ZpZGVvYm94LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChvcmNfdmlkZW9ib3hfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG9yYy9vcmNfdmlkZW9ib3gtdmlkZW9ib3gub2JqIC1NRCAtTVAgLU1GIG9yYy8kKERFUERJUikvb3JjX3ZpZGVvYm94LXZpZGVvYm94LlRwbyAtYyAtbyBvcmMvb3JjX3ZpZGVvYm94LXZpZGVvYm94Lm9iaiBgaWYgdGVzdCAtZiAnb3JjL3ZpZGVvYm94LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnb3JjL3ZpZGVvYm94LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL29yYy92aWRlb2JveC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIG9yYy8kKERFUERJUikvb3JjX3ZpZGVvYm94LXZpZGVvYm94LlRwbyBvcmMvJChERVBESVIpL29yY192aWRlb2JveC12aWRlb2JveC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J29yYy92aWRlb2JveC5jJyBvYmplY3Q9J29yYy9vcmNfdmlkZW9ib3gtdmlkZW9ib3gub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChvcmNfdmlkZW9ib3hfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gb3JjL29yY192aWRlb2JveC12aWRlb2JveC5vYmogYGlmIHRlc3QgLWYgJ29yYy92aWRlb2JveC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ29yYy92aWRlb2JveC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9vcmMvdmlkZW9ib3guYyc7IGZpYAotCi1vcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vOiBvcmMvdmlkZW9taXhlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQob3JjX3ZpZGVvbWl4ZXJfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIG9yYy9vcmNfdmlkZW9taXhlci12aWRlb21peGVyLm8gLU1EIC1NUCAtTUYgb3JjLyQoREVQRElSKS9vcmNfdmlkZW9taXhlci12aWRlb21peGVyLlRwbyAtYyAtbyBvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vIGB0ZXN0IC1mICdvcmMvdmlkZW9taXhlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BvcmMvdmlkZW9taXhlci5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIG9yYy8kKERFUERJUikvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5UcG8gb3JjLyQoREVQRElSKS9vcmNfdmlkZW9taXhlci12aWRlb21peGVyLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nb3JjL3ZpZGVvbWl4ZXIuYycgb2JqZWN0PSdvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChvcmNfdmlkZW9taXhlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vIGB0ZXN0IC1mICdvcmMvdmlkZW9taXhlci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BvcmMvdmlkZW9taXhlci5jCi0KLW9yYy9vcmNfdmlkZW9taXhlci12aWRlb21peGVyLm9iajogb3JjL3ZpZGVvbWl4ZXIuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKG9yY192aWRlb21peGVyX0NGTEFHUykgJChDRkxBR1MpIC1NVCBvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vYmogLU1EIC1NUCAtTUYgb3JjLyQoREVQRElSKS9vcmNfdmlkZW9taXhlci12aWRlb21peGVyLlRwbyAtYyAtbyBvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vYmogYGlmIHRlc3QgLWYgJ29yYy92aWRlb21peGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnb3JjL3ZpZGVvbWl4ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvb3JjL3ZpZGVvbWl4ZXIuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBvcmMvJChERVBESVIpL29yY192aWRlb21peGVyLXZpZGVvbWl4ZXIuVHBvIG9yYy8kKERFUERJUikvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J29yYy92aWRlb21peGVyLmMnIG9iamVjdD0nb3JjL29yY192aWRlb21peGVyLXZpZGVvbWl4ZXIub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChvcmNfdmlkZW9taXhlcl9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBvcmMvb3JjX3ZpZGVvbWl4ZXItdmlkZW9taXhlci5vYmogYGlmIHRlc3QgLWYgJ29yYy92aWRlb21peGVyLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnb3JjL3ZpZGVvbWl4ZXIuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvb3JjL3ZpZGVvbWl4ZXIuYyc7IGZpYAotCi1waXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vOiBwaXBlbGluZXMvZmxhY2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGlwZWxpbmVzX2ZsYWNkZWNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHBpcGVsaW5lcy9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLm8gLU1EIC1NUCAtTUYgcGlwZWxpbmVzLyQoREVQRElSKS9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLlRwbyAtYyAtbyBwaXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vIGB0ZXN0IC1mICdwaXBlbGluZXMvZmxhY2RlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwaXBlbGluZXMvZmxhY2RlYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5UcG8gcGlwZWxpbmVzLyQoREVQRElSKS9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncGlwZWxpbmVzL2ZsYWNkZWMuYycgb2JqZWN0PSdwaXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwaXBlbGluZXNfZmxhY2RlY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwaXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vIGB0ZXN0IC1mICdwaXBlbGluZXMvZmxhY2RlYy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BwaXBlbGluZXMvZmxhY2RlYy5jCi0KLXBpcGVsaW5lcy9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLm9iajogcGlwZWxpbmVzL2ZsYWNkZWMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBpcGVsaW5lc19mbGFjZGVjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwaXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vYmogLU1EIC1NUCAtTUYgcGlwZWxpbmVzLyQoREVQRElSKS9waXBlbGluZXNfZmxhY2RlYy1mbGFjZGVjLlRwbyAtYyAtbyBwaXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vYmogYGlmIHRlc3QgLWYgJ3BpcGVsaW5lcy9mbGFjZGVjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL2ZsYWNkZWMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGlwZWxpbmVzL2ZsYWNkZWMuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBwaXBlbGluZXMvJChERVBESVIpL3BpcGVsaW5lc19mbGFjZGVjLWZsYWNkZWMuVHBvIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3BpcGVsaW5lcy9mbGFjZGVjLmMnIG9iamVjdD0ncGlwZWxpbmVzL3BpcGVsaW5lc19mbGFjZGVjLWZsYWNkZWMub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwaXBlbGluZXNfZmxhY2RlY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwaXBlbGluZXMvcGlwZWxpbmVzX2ZsYWNkZWMtZmxhY2RlYy5vYmogYGlmIHRlc3QgLWYgJ3BpcGVsaW5lcy9mbGFjZGVjLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL2ZsYWNkZWMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGlwZWxpbmVzL2ZsYWNkZWMuYyc7IGZpYAotCi1waXBlbGluZXMvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMubzogcGlwZWxpbmVzL3dhdmVuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGlwZWxpbmVzX3dhdmVuY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLm8gLU1EIC1NUCAtTUYgcGlwZWxpbmVzLyQoREVQRElSKS9waXBlbGluZXNfd2F2ZW5jLXdhdmVuYy5UcG8gLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy93YXZlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3dhdmVuYy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMuVHBvIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwaXBlbGluZXMvd2F2ZW5jLmMnIG9iamVjdD0ncGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBpcGVsaW5lc193YXZlbmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLm8gYHRlc3QgLWYgJ3BpcGVsaW5lcy93YXZlbmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3dhdmVuYy5jCi0KLXBpcGVsaW5lcy9waXBlbGluZXNfd2F2ZW5jLXdhdmVuYy5vYmo6IHBpcGVsaW5lcy93YXZlbmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBpcGVsaW5lc193YXZlbmNfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHBpcGVsaW5lcy9waXBlbGluZXNfd2F2ZW5jLXdhdmVuYy5vYmogLU1EIC1NUCAtTUYgcGlwZWxpbmVzLyQoREVQRElSKS9waXBlbGluZXNfd2F2ZW5jLXdhdmVuYy5UcG8gLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLm9iaiBgaWYgdGVzdCAtZiAncGlwZWxpbmVzL3dhdmVuYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BpcGVsaW5lcy93YXZlbmMuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvcGlwZWxpbmVzL3dhdmVuYy5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMuVHBvIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwaXBlbGluZXMvd2F2ZW5jLmMnIG9iamVjdD0ncGlwZWxpbmVzL3BpcGVsaW5lc193YXZlbmMtd2F2ZW5jLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGlwZWxpbmVzX3dhdmVuY19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBwaXBlbGluZXMvcGlwZWxpbmVzX3dhdmVuYy13YXZlbmMub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvd2F2ZW5jLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAncGlwZWxpbmVzL3dhdmVuYy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9waXBlbGluZXMvd2F2ZW5jLmMnOyBmaWAKLQotcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2subzogcGlwZWxpbmVzL3dhdnBhY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBpcGVsaW5lc193YXZwYWNrX0NGTEFHUykgJChDRkxBR1MpIC1NVCBwaXBlbGluZXMvcGlwZWxpbmVzX3dhdnBhY2std2F2cGFjay5vIC1NRCAtTVAgLU1GIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdnBhY2std2F2cGFjay5UcG8gLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2subyBgdGVzdCAtZiAncGlwZWxpbmVzL3dhdnBhY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3dhdnBhY2suYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBwaXBlbGluZXMvJChERVBESVIpL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2suVHBvIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdnBhY2std2F2cGFjay5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3BpcGVsaW5lcy93YXZwYWNrLmMnIG9iamVjdD0ncGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2subycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGlwZWxpbmVzX3dhdnBhY2tfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2subyBgdGVzdCAtZiAncGlwZWxpbmVzL3dhdnBhY2suYycgfHwgZWNobyAnJChzcmNkaXIpLydgcGlwZWxpbmVzL3dhdnBhY2suYwotCi1waXBlbGluZXMvcGlwZWxpbmVzX3dhdnBhY2std2F2cGFjay5vYmo6IHBpcGVsaW5lcy93YXZwYWNrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwaXBlbGluZXNfd2F2cGFja19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2sub2JqIC1NRCAtTVAgLU1GIHBpcGVsaW5lcy8kKERFUERJUikvcGlwZWxpbmVzX3dhdnBhY2std2F2cGFjay5UcG8gLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2sub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvd2F2cGFjay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BpcGVsaW5lcy93YXZwYWNrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BpcGVsaW5lcy93YXZwYWNrLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgcGlwZWxpbmVzLyQoREVQRElSKS9waXBlbGluZXNfd2F2cGFjay13YXZwYWNrLlRwbyBwaXBlbGluZXMvJChERVBESVIpL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2suUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwaXBlbGluZXMvd2F2cGFjay5jJyBvYmplY3Q9J3BpcGVsaW5lcy9waXBlbGluZXNfd2F2cGFjay13YXZwYWNrLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGlwZWxpbmVzX3dhdnBhY2tfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gcGlwZWxpbmVzL3BpcGVsaW5lc193YXZwYWNrLXdhdnBhY2sub2JqIGBpZiB0ZXN0IC1mICdwaXBlbGluZXMvd2F2cGFjay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3BpcGVsaW5lcy93YXZwYWNrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3BpcGVsaW5lcy93YXZwYWNrLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQktcm0gLXJmIGVsZW1lbnRzLy5saWJzIGVsZW1lbnRzL19saWJzCi0JLXJtIC1yZiBnZW5lcmljLy5saWJzIGdlbmVyaWMvX2xpYnMKLQktcm0gLXJmIG9yYy8ubGlicyBvcmMvX2xpYnMKLQktcm0gLXJmIHBpcGVsaW5lcy8ubGlicyBwaXBlbGluZXMvX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLSMgUmVjb3ZlciBmcm9tIGRlbGV0ZWQgJy50cnMnIGZpbGU7IHRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0Ci0jICJybSAtZiBmb28ubG9nOyBtYWtlIGZvby50cnMiIHJlLXJ1biAnZm9vLnRlc3QnLCBhbmQgcmUtY3JlYXRlCi0jIGJvdGggJ2Zvby5sb2cnIGFuZCAnZm9vLnRycycuICBCcmVhayB0aGUgcmVjaXBlIGluIHR3byBzdWJzaGVsbHMKLSMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCAibWFrZSAtbiIuCi0ubG9nLnRyczoKLQlybSAtZiAkPCAkQAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQ8Ci0KLSMgTGVhZGluZyAnYW0tLWZub3JkJyBpcyB0aGVyZSB0byBlbnN1cmUgdGhlIGxpc3Qgb2YgdGFyZ2V0cyBkb2VzIG5vdAotIyBleHBhbmQgdG8gZW1wdHksIGFzIGNvdWxkIGhhcHBlbiBlLmcuIHdpdGggbWFrZSBjaGVjayBURVNUUz0nJy4KLWFtLS1mbm9yZCAkKFRFU1RfTE9HUykgJChURVNUX0xPR1M6LmxvZz0udHJzKTogJChhbV9fZm9yY2VfcmVjaGVjaykKLWFtLS1mb3JjZS1yZWNoZWNrOgotCUA6Ci0KLSQoVEVTVF9TVUlURV9MT0cpOiAkKFRFU1RfTE9HUykKLQlAJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAotCWFtX19mX29rICgpIHsgdGVzdCAtZiAiJCQxIiAmJiB0ZXN0IC1yICIkJDEiOyB9OyBcCi0JcmVkb19iYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gXAotCSAgICAgICAgICAgICAgYW1fX2Zfb2sgJCRpLnRycyAmJiBhbV9fZl9vayAkJGkubG9nIHx8IGVjaG8gJCRpOyBcCi0JICAgICAgICAgICAgZG9uZWA7IFwKLQlpZiB0ZXN0IC1uICIkJHJlZG9fYmFzZXMiOyB0aGVuIFwKLQkgIHJlZG9fbG9ncz1gZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCi0JICByZWRvX3Jlc3VsdHM9YGZvciBpIGluICQkcmVkb19iYXNlczsgZG8gZWNobyAkJGkudHJzOyBkb25lYDsgXAotCSAgaWYgJChhbV9fbWFrZV9kcnlydW4pOyB0aGVuIDo7IGVsc2UgXAotCSAgICBybSAtZiAkJHJlZG9fbG9ncyAmJiBybSAtZiAkJHJlZG9fcmVzdWx0cyB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZmk7IFwKLQlpZiB0ZXN0IC1uICIkJGFtX19yZW1ha2luZ19sb2dzIjsgdGhlbiBcCi0JICBlY2hvICJmYXRhbDogbWFraW5nICQoVEVTVF9TVUlURV9MT0cpOiBwb3NzaWJsZSBpbmZpbml0ZSIgXAotCSAgICAgICAicmVjdXJzaW9uIGRldGVjdGVkIiA+JjI7IFwKLQllbGlmIHRlc3QgLW4gIiQkcmVkb19sb2dzIjsgdGhlbiBcCi0JICBhbV9fcmVtYWtpbmdfbG9ncz15ZXMgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRyZWRvX2xvZ3M7IFwKLQlmaTsgXAotCWlmICQoYW1fX21ha2VfZHJ5cnVuKTsgdGhlbiA6OyBlbHNlIFwKLQkgIHN0PTA7ICBcCi0JICBlcnJtc2c9ImZhdGFsOiBtYWtpbmcgJChURVNUX1NVSVRFX0xPRyk6IGZhaWxlZCB0byBjcmVhdGUiOyBcCi0JICBmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIFwKLQkgICAgdGVzdCAtZiAkJGkudHJzICYmIHRlc3QgLXIgJCRpLnRycyBcCi0JICAgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkudHJzIiA+JjI7IHN0PTE7IH07IFwKLQkgICAgdGVzdCAtZiAkJGkubG9nICYmIHRlc3QgLXIgJCRpLmxvZyBcCi0JICAgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkubG9nIiA+JjI7IHN0PTE7IH07IFwKLQkgIGRvbmU7IFwKLQkgIHRlc3QgJCRzdCAtZXEgMCB8fCBleGl0IDE7IFwKLQlmaQotCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKLQl3cz0nWyAJXSc7IFwKLQlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCi0JdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAotCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKLQlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKLQl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAotCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCi0JaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAotCSAgc3VjY2Vzcz10cnVlOyBcCi0JZWxzZSBcCi0JICBzdWNjZXNzPWZhbHNlOyBcCi0JZmk7IFwKLQlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKLQlyZXN1bHRfY291bnQgKCkgXAotCXsgXAotCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAotCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAotCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCi0JICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKLQkgICAgZWxzZSBcCi0JICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCi0JICAgIGZpOyBcCi0JICAgIHNoaWZ0OyBcCi0JICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAotCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKLQkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCi0JICAgIGVsc2UgXAotCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCi0JICAgIGZpOyBcCi0JICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAotCX07IFwKLQljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCi0JeyBcCi0JICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKLQkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCi0JICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAotCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKLQkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCi0JICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAotCX07IFwKLQl7CQkJCQkJCQlcCi0JICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKLQkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCi0JICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCi0JICBlY2hvOwkJCQkJCQkJXAotCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCi0JICBlY2hvOwkJCQkJCQkJXAotCSAgZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGI7IGRvbmUJCQkJXAotCSAgICB8ICQoYW1fX2NyZWF0ZV9nbG9iYWxfbG9nKTsJCQkJCVwKLQl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXAgfHwgZXhpdCAxOwkJCQlcCi0JbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKLQlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCi0JICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAotCSBlbHNlCQkJCQkJCQlcCi0JICBjb2w9IiQkcmVkIjsJCQkJCQkJXAotCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKLQlmaTsJCQkJCQkJCVwKLQllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKLQllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKLQllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKLQljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCi0JZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKLQlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAotCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKLQkgIGlmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbgkJCVwKLQkgICAgZWNobyAiJCR7Y29sfVBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkkJHtzdGR9IjsJXAotCSAgZmk7CQkJCQkJCQlcCi0JICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCi0JZmk7CQkJCQkJCQlcCi0JJCRzdWNjZXNzIHx8IGV4aXQgMQotCi1jaGVjay1URVNUUzoKLQlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgICAgICAgICAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0Ci0JQGxpc3Q9JyQoUkVDSEVDS19MT0dTOi5sb2c9LnRycyknOyB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdAotCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKLQlAc2V0ICtlOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCi0JbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKLQl0cnNfbGlzdD1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGkudHJzOyBkb25lYDsgXAotCWxvZ19saXN0PWBlY2hvICQkbG9nX2xpc3RgOyB0cnNfbGlzdD1gZWNobyAkJHRyc19saXN0YDsgXAotCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKLQlleGl0ICQkPzsKLXJlY2hlY2s6IGFsbCAkKGNoZWNrX1BST0dSQU1TKQotCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKLQlAc2V0ICtlOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCi0JYmFzZXM9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpOyBkb25lIFwKLQkgICAgICAgICB8ICQoYW1fX2xpc3RfcmVjaGVja190ZXN0cylgIHx8IGV4aXQgMTsgXAotCWxvZ19saXN0PWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCi0JbG9nX2xpc3Q9YGVjaG8gJCRsb2dfbGlzdGA7IFwKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBcCi0JICAgICAgICBhbV9fZm9yY2VfcmVjaGVjaz1hbS0tZm9yY2UtcmVjaGVjayBcCi0JICAgICAgICBURVNUX0xPR1M9IiQkbG9nX2xpc3QiOyBcCi0JZXhpdCAkJD8KLWdlbmVyaWMvc3RhdGVzLmxvZzogZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCkKLQlAcD0nZ2VuZXJpYy9zdGF0ZXMkKEVYRUVYVCknOyBcCi0JYj0nZ2VuZXJpYy9zdGF0ZXMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy9zaW1wbGUtbGF1bmNoLWxpbmVzLmxvZzogcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCkKLQlAcD0ncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy90YWdzY2hlY2tpbmcubG9nOiBwaXBlbGluZXMvdGFnc2NoZWNraW5nJChFWEVFWFQpCi0JQHA9J3BpcGVsaW5lcy90YWdzY2hlY2tpbmckKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3RhZ3NjaGVja2luZyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYWxwaGFjb2xvci5sb2c6IGVsZW1lbnRzL2FscGhhY29sb3IkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYWxwaGFjb2xvciQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hbHBoYWNvbG9yJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9hbHBoYS5sb2c6IGVsZW1lbnRzL2FscGhhJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2FscGhhJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2FscGhhJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9hdWRpb2FtcGxpZnkubG9nOiBlbGVtZW50cy9hdWRpb2FtcGxpZnkkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXVkaW9hbXBsaWZ5JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2F1ZGlvYW1wbGlmeSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXVkaW9jaGViYmFuZC5sb2c6IGVsZW1lbnRzL2F1ZGlvY2hlYmJhbmQkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXVkaW9jaGViYmFuZCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hdWRpb2NoZWJiYW5kJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9hdWRpb2NoZWJsaW1pdC5sb2c6IGVsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9hdWRpb2R5bmFtaWMubG9nOiBlbGVtZW50cy9hdWRpb2R5bmFtaWMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXVkaW9keW5hbWljJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2F1ZGlvZHluYW1pYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXVkaW9lY2hvLmxvZzogZWxlbWVudHMvYXVkaW9lY2hvJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2F1ZGlvZWNobyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hdWRpb2VjaG8nOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2F1ZGlvZmlyZmlsdGVyLmxvZzogZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYXVkaW9maXJmaWx0ZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2F1ZGlvaWlyZmlsdGVyLmxvZzogZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYXVkaW9paXJmaWx0ZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2F1ZGlvaW52ZXJ0LmxvZzogZWxlbWVudHMvYXVkaW9pbnZlcnQkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXVkaW9pbnZlcnQkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYXVkaW9pbnZlcnQnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2F1ZGlvcGFub3JhbWEubG9nOiBlbGVtZW50cy9hdWRpb3Bhbm9yYW1hJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2F1ZGlvcGFub3JhbWEkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYXVkaW9wYW5vcmFtYSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXVkaW93c2luY2JhbmQubG9nOiBlbGVtZW50cy9hdWRpb3dzaW5jYmFuZCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9hdWRpb3dzaW5jYmFuZCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hdWRpb3dzaW5jYmFuZCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXVkaW93c2luY2xpbWl0LmxvZzogZWxlbWVudHMvYXVkaW93c2luY2xpbWl0JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hdWRpb3dzaW5jbGltaXQnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2FhY3BhcnNlLmxvZzogZWxlbWVudHMvYWFjcGFyc2UkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYWFjcGFyc2UkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYWFjcGFyc2UnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2FjM3BhcnNlLmxvZzogZWxlbWVudHMvYWMzcGFyc2UkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYWMzcGFyc2UkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYWMzcGFyc2UnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2FtcnBhcnNlLmxvZzogZWxlbWVudHMvYW1ycGFyc2UkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYW1ycGFyc2UkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvYW1ycGFyc2UnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2ZsYWNwYXJzZS5sb2c6IGVsZW1lbnRzL2ZsYWNwYXJzZSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9mbGFjcGFyc2UkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvZmxhY3BhcnNlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9tcGVnYXVkaW9wYXJzZS5sb2c6IGVsZW1lbnRzL21wZWdhdWRpb3BhcnNlJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL21wZWdhdWRpb3BhcnNlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL21wZWdhdWRpb3BhcnNlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy93YXZwYWNrcGFyc2UubG9nOiBlbGVtZW50cy93YXZwYWNrcGFyc2UkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvd2F2cGFja3BhcnNlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3dhdnBhY2twYXJzZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXV0b2RldGVjdC5sb2c6IGVsZW1lbnRzL2F1dG9kZXRlY3QkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXV0b2RldGVjdCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hdXRvZGV0ZWN0JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9hdmltdXgubG9nOiBlbGVtZW50cy9hdmltdXgkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvYXZpbXV4JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2F2aW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXZpc3VidGl0bGUubG9nOiBlbGVtZW50cy9hdmlzdWJ0aXRsZSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9hdmlzdWJ0aXRsZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hdmlzdWJ0aXRsZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvY2Fwc3NldHRlci5sb2c6IGVsZW1lbnRzL2NhcHNzZXR0ZXIkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvY2Fwc3NldHRlciQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9jYXBzc2V0dGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9kZWludGVybGFjZS5sb2c6IGVsZW1lbnRzL2RlaW50ZXJsYWNlJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2RlaW50ZXJsYWNlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2RlaW50ZXJsYWNlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9kdG1mLmxvZzogZWxlbWVudHMvZHRtZiQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9kdG1mJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2R0bWYnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy9lZmZlY3R2LmxvZzogcGlwZWxpbmVzL2VmZmVjdHYkKEVYRUVYVCkKLQlAcD0ncGlwZWxpbmVzL2VmZmVjdHYkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL2VmZmVjdHYnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2VxdWFsaXplci5sb2c6IGVsZW1lbnRzL2VxdWFsaXplciQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9lcXVhbGl6ZXIkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvZXF1YWxpemVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1waXBlbGluZXMvZmxhY2RlYy5sb2c6IHBpcGVsaW5lcy9mbGFjZGVjJChFWEVFWFQpCi0JQHA9J3BpcGVsaW5lcy9mbGFjZGVjJChFWEVFWFQpJzsgXAotCWI9J3BpcGVsaW5lcy9mbGFjZGVjJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9mbHZkZW11eC5sb2c6IGVsZW1lbnRzL2ZsdmRlbXV4JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2ZsdmRlbXV4JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2ZsdmRlbXV4JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9mbHZtdXgubG9nOiBlbGVtZW50cy9mbHZtdXgkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvZmx2bXV4JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2Zsdm11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvZ2RrcGl4YnVmc2luay5sb2c6IGVsZW1lbnRzL2dka3BpeGJ1ZnNpbmskKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvZ2RrcGl4YnVmc2luayQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9nZGtwaXhidWZzaW5rJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9nZGtwaXhidWZvdmVybGF5LmxvZzogZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9nZGtwaXhidWZvdmVybGF5JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2dka3BpeGJ1Zm92ZXJsYXknOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3F0bXV4LmxvZzogZWxlbWVudHMvcXRtdXgkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcXRtdXgkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvcXRtdXgnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3F0ZGVtdXgubG9nOiBlbGVtZW50cy9xdGRlbXV4JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3F0ZGVtdXgkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvcXRkZW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvaWN5ZGVtdXgubG9nOiBlbGVtZW50cy9pY3lkZW11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9pY3lkZW11eCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9pY3lkZW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvaWQzZGVtdXgubG9nOiBlbGVtZW50cy9pZDNkZW11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9pZDNkZW11eCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9pZDNkZW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvaW1hZ2VmcmVlemUubG9nOiBlbGVtZW50cy9pbWFnZWZyZWV6ZSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9pbWFnZWZyZWV6ZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9pbWFnZWZyZWV6ZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvZGVpbnRlcmxlYXZlLmxvZzogZWxlbWVudHMvZGVpbnRlcmxlYXZlJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2RlaW50ZXJsZWF2ZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9kZWludGVybGVhdmUnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2ludGVybGVhdmUubG9nOiBlbGVtZW50cy9pbnRlcmxlYXZlJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2ludGVybGVhdmUkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvaW50ZXJsZWF2ZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvanBlZ2RlYy5sb2c6IGVsZW1lbnRzL2pwZWdkZWMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvanBlZ2RlYyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9qcGVnZGVjJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9qcGVnZW5jLmxvZzogZWxlbWVudHMvanBlZ2VuYyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9qcGVnZW5jJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL2pwZWdlbmMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL211bGF3ZGVjLmxvZzogZWxlbWVudHMvbXVsYXdkZWMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvbXVsYXdkZWMkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvbXVsYXdkZWMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL211bGF3ZW5jLmxvZzogZWxlbWVudHMvbXVsYXdlbmMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvbXVsYXdlbmMkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvbXVsYXdlbmMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL2xldmVsLmxvZzogZWxlbWVudHMvbGV2ZWwkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvbGV2ZWwkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvbGV2ZWwnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL21hdHJvc2thZGVtdXgubG9nOiBlbGVtZW50cy9tYXRyb3NrYWRlbXV4JChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL21hdHJvc2thZGVtdXgkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvbWF0cm9za2FkZW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvbWF0cm9za2FtdXgubG9nOiBlbGVtZW50cy9tYXRyb3NrYW11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9tYXRyb3NrYW11eCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9tYXRyb3NrYW11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvbWF0cm9za2FwYXJzZS5sb2c6IGVsZW1lbnRzL21hdHJvc2thcGFyc2UkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvbWF0cm9za2FwYXJzZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9tYXRyb3NrYXBhcnNlJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9tdWx0aWZpbGUubG9nOiBlbGVtZW50cy9tdWx0aWZpbGUkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvbXVsdGlmaWxlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL211bHRpZmlsZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvc3BsaXRtdXgubG9nOiBlbGVtZW50cy9zcGxpdG11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9zcGxpdG11eCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9zcGxpdG11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcmdhbmFseXNpcy5sb2c6IGVsZW1lbnRzL3JnYW5hbHlzaXMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcmdhbmFseXNpcyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9yZ2FuYWx5c2lzJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9yZ2xpbWl0ZXIubG9nOiBlbGVtZW50cy9yZ2xpbWl0ZXIkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcmdsaW1pdGVyJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3JnbGltaXRlcic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcmd2b2x1bWUubG9nOiBlbGVtZW50cy9yZ3ZvbHVtZSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9yZ3ZvbHVtZSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9yZ3ZvbHVtZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcnRwLXBheWxvYWRpbmcubG9nOiBlbGVtZW50cy9ydHAtcGF5bG9hZGluZyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9ydHAtcGF5bG9hZGluZyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9ydHAtcGF5bG9hZGluZyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcnRwaDI2MS5sb2c6IGVsZW1lbnRzL3J0cGgyNjEkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcnRwaDI2MSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9ydHBoMjYxJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9ydHBoMjYzLmxvZzogZWxlbWVudHMvcnRwaDI2MyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9ydHBoMjYzJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3J0cGgyNjMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3J0cHZwOS5sb2c6IGVsZW1lbnRzL3J0cHZwOSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9ydHB2cDkkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvcnRwdnA5JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9ydHBhdXgubG9nOiBlbGVtZW50cy9ydHBhdXgkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcnRwYXV4JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3J0cGF1eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcnRwYmluLmxvZzogZWxlbWVudHMvcnRwYmluJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3J0cGJpbiQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9ydHBiaW4nOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdC5sb2c6IGVsZW1lbnRzL3J0cGJpbl9idWZmZXJfbGlzdCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9ydHBiaW5fYnVmZmVyX2xpc3QkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9ydHBjb2xsaXNpb24ubG9nOiBlbGVtZW50cy9ydHBjb2xsaXNpb24kKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcnRwY29sbGlzaW9uJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3J0cGNvbGxpc2lvbic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmxvZzogZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlciQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9ydHBqaXR0ZXJidWZmZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3J0cG11eC5sb2c6IGVsZW1lbnRzL3J0cG11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9ydHBtdXgkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvcnRwbXV4JzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9ydHBydHgubG9nOiBlbGVtZW50cy9ydHBydHgkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcnRwcnR4JChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3J0cHJ0eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvcnRwc2Vzc2lvbi5sb2c6IGVsZW1lbnRzL3J0cHNlc3Npb24kKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvcnRwc2Vzc2lvbiQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9ydHBzZXNzaW9uJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy9zaGFwZXdpcGUubG9nOiBlbGVtZW50cy9zaGFwZXdpcGUkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvc2hhcGV3aXBlJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3NoYXBld2lwZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvc291cGh0dHBzcmMubG9nOiBlbGVtZW50cy9zb3VwaHR0cHNyYyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9zb3VwaHR0cHNyYyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9zb3VwaHR0cHNyYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvc3BlY3RydW0ubG9nOiBlbGVtZW50cy9zcGVjdHJ1bSQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9zcGVjdHJ1bSQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9zcGVjdHJ1bSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvc3VuYXVkaW8ubG9nOiBlbGVtZW50cy9zdW5hdWRpbyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9zdW5hdWRpbyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9zdW5hdWRpbyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvaWQzdjJtdXgubG9nOiBlbGVtZW50cy9pZDN2Mm11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9pZDN2Mm11eCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9pZDN2Mm11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXBldjJtdXgubG9nOiBlbGVtZW50cy9hcGV2Mm11eCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy9hcGV2Mm11eCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hcGV2Mm11eCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvdWRwc2luay5sb2c6IGVsZW1lbnRzL3VkcHNpbmskKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvdWRwc2luayQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy91ZHBzaW5rJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy91ZHBzcmMubG9nOiBlbGVtZW50cy91ZHBzcmMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvdWRwc3JjJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3VkcHNyYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvdmlkZW9ib3gubG9nOiBlbGVtZW50cy92aWRlb2JveCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy92aWRlb2JveCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy92aWRlb2JveCc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wLmxvZzogZWxlbWVudHMvYXNwZWN0cmF0aW9jcm9wJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcCQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3ZpZGVvY3JvcC5sb2c6IGVsZW1lbnRzL3ZpZGVvY3JvcCQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy92aWRlb2Nyb3AkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvdmlkZW9jcm9wJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy92aWRlb2ZpbHRlci5sb2c6IGVsZW1lbnRzL3ZpZGVvZmlsdGVyJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3ZpZGVvZmlsdGVyJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3ZpZGVvZmlsdGVyJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy92aWRlb21peGVyLmxvZzogZWxlbWVudHMvdmlkZW9taXhlciQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy92aWRlb21peGVyJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3ZpZGVvbWl4ZXInOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3ZwOGVuYy5sb2c6IGVsZW1lbnRzL3ZwOGVuYyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy92cDhlbmMkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvdnA4ZW5jJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy92cDhkZWMubG9nOiBlbGVtZW50cy92cDhkZWMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvdnA4ZGVjJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3ZwOGRlYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvdnA5ZW5jLmxvZzogZWxlbWVudHMvdnA5ZW5jJChFWEVFWFQpCi0JQHA9J2VsZW1lbnRzL3ZwOWVuYyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy92cDllbmMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy93YXZlbmMubG9nOiBwaXBlbGluZXMvd2F2ZW5jJChFWEVFWFQpCi0JQHA9J3BpcGVsaW5lcy93YXZlbmMkKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3dhdmVuYyc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotZWxlbWVudHMvd2F2cGFja2RlYy5sb2c6IGVsZW1lbnRzL3dhdnBhY2tkZWMkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvd2F2cGFja2RlYyQoRVhFRVhUKSc7IFwKLQliPSdlbGVtZW50cy93YXZwYWNrZGVjJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1lbGVtZW50cy93YXZwYWNrZW5jLmxvZzogZWxlbWVudHMvd2F2cGFja2VuYyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy93YXZwYWNrZW5jJChFWEVFWFQpJzsgXAotCWI9J2VsZW1lbnRzL3dhdnBhY2tlbmMnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLXBpcGVsaW5lcy93YXZwYWNrLmxvZzogcGlwZWxpbmVzL3dhdnBhY2skKEVYRUVYVCkKLQlAcD0ncGlwZWxpbmVzL3dhdnBhY2skKEVYRUVYVCknOyBcCi0JYj0ncGlwZWxpbmVzL3dhdnBhY2snOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3dhdnBhcnNlLmxvZzogZWxlbWVudHMvd2F2cGFyc2UkKEVYRUVYVCkKLQlAcD0nZWxlbWVudHMvd2F2cGFyc2UkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMvd2F2cGFyc2UnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLWVsZW1lbnRzL3k0bWVuYy5sb2c6IGVsZW1lbnRzL3k0bWVuYyQoRVhFRVhUKQotCUBwPSdlbGVtZW50cy95NG1lbmMkKEVYRUVYVCknOyBcCi0JYj0nZWxlbWVudHMveTRtZW5jJzsgXAotCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCi0JLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCi0JJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKLQkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCi1vcmMvZGVpbnRlcmxhY2UubG9nOiBvcmMvZGVpbnRlcmxhY2UkKEVYRUVYVCkKLQlAcD0nb3JjL2RlaW50ZXJsYWNlJChFWEVFWFQpJzsgXAotCWI9J29yYy9kZWludGVybGFjZSc7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotb3JjL3ZpZGVvbWl4ZXIubG9nOiBvcmMvdmlkZW9taXhlciQoRVhFRVhUKQotCUBwPSdvcmMvdmlkZW9taXhlciQoRVhFRVhUKSc7IFwKLQliPSdvcmMvdmlkZW9taXhlcic7IFwKLQkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotb3JjL3ZpZGVvYm94LmxvZzogb3JjL3ZpZGVvYm94JChFWEVFWFQpCi0JQHA9J29yYy92aWRlb2JveCQoRVhFRVhUKSc7IFwKLQliPSdvcmMvdmlkZW9ib3gnOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLQktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKLQkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX0xPR19EUklWRVJfRkxBR1MpICQoTE9HX0RSSVZFUl9GTEFHUykgLS0gJChMT0dfQ09NUElMRSkgXAotCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLS50ZXN0LmxvZzoKLQlAcD0nJDwnOyBcCi0JJChhbV9fc2V0X2IpOyBcCi0JJChhbV9fY2hlY2tfcHJlKSAkKFRFU1RfTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAotCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAkKFRFU1RfTE9HX0RSSVZFUl9GTEFHUykgLS0gJChURVNUX0xPR19DT01QSUxFKSBcCi0JIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQotQGFtX19FWEVFWFRfVFJVRUAudGVzdCQoRVhFRVhUKS5sb2c6Ci1AYW1fX0VYRUVYVF9UUlVFQAlAcD0nJDwnOyBcCi1AYW1fX0VYRUVYVF9UUlVFQAkkKGFtX19zZXRfYik7IFwKLUBhbV9fRVhFRVhUX1RSVUVACSQoYW1fX2NoZWNrX3ByZSkgJChURVNUX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKLUBhbV9fRVhFRVhUX1RSVUVACS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAotQGFtX19FWEVFWFRfVFJVRUAJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9URVNUX0xPR19EUklWRVJfRkxBR1MpICQoVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKFRFU1RfTE9HX0NPTVBJTEUpIFwKLUBhbV9fRVhFRVhUX1RSVUVACSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChjaGVja19QUk9HUkFNUykKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1URVNUUwotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKFRFU1RfTE9HUykiIHx8IHJtIC1mICQoVEVTVF9MT0dTKQotCS10ZXN0IC16ICIkKFRFU1RfTE9HUzoubG9nPS50cnMpIiB8fCBybSAtZiAkKFRFU1RfTE9HUzoubG9nPS50cnMpCi0JLXRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQotCi1jbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCi0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCS1ybSAtZiBlbGVtZW50cy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi0JLXJtIC1mIGVsZW1lbnRzLyQoYW1fX2RpcnN0YW1wKQotCS1ybSAtZiBnZW5lcmljLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgZ2VuZXJpYy8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgb3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLQktcm0gLWYgb3JjLyQoYW1fX2RpcnN0YW1wKQotCS1ybSAtZiBwaXBlbGluZXMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQotCS1ybSAtZiBwaXBlbGluZXMvJChhbV9fZGlyc3RhbXApCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1jaGVja1BST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCi0JY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIGVsZW1lbnRzLyQoREVQRElSKSBnZW5lcmljLyQoREVQRElSKSBvcmMvJChERVBESVIpIHBpcGVsaW5lcy8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1sb2NhbCBkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIGVsZW1lbnRzLyQoREVQRElSKSBnZW5lcmljLyQoREVQRElSKSBvcmMvJChERVBESVIpIHBpcGVsaW5lcy8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1URVNUUyBjaGVjay1hbSBjbGVhbiBcCi0JY2xlYW4tY2hlY2tQUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgXAotCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCi0JZGlzdGNsZWFuLWxvY2FsIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gXAotCWluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCi0JaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCi0JaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKLQlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCi0JaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHJlY2hlY2sgdGFncyB0YWdzLWFtIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIGtlZXAgdGFyZ2V0IGFyb3VuZCwgc2luY2UgaXQncyByZWZlcmVuY2VkIGluIHRoZSBtb2R1bGVzJyBNYWtlZmlsZXMKLWNsZWFuLWxvY2FsLWNoZWNrOgotCUBlY2hvCi0KLSMgaGFuZ3Mgc3BlY3RhY3VsYXJseSBvbiBzb21lIG1hY2hpbmVzLCBzbyBsZXQncyBub3QgZG8gdGhpcyBieSBkZWZhdWx0IHlldAotQEhBVkVfVkFMR1JJTkRfVFJVRUBjaGVjay12YWxncmluZDoKLUBIQVZFX1ZBTEdSSU5EX1RSVUVACSQoTUFLRSkgdmFsZ3JpbmQKLUBIQVZFX1ZBTEdSSU5EX0ZBTFNFQGNoZWNrLXZhbGdyaW5kOgotQEhBVkVfVkFMR1JJTkRfRkFMU0VACUB0cnVlCi0KLUxPT1BTID89IDEwCi0KLSMgcnVuIGFueSBnaXZlbiB0ZXN0IGJ5IHJ1bm5pbmcgbWFrZSB0ZXN0LmNoZWNrCi0jIGlmIHRoZSB0ZXN0IGZhaWxzLCBydW4gaXQgYWdhaW4gYXQgYXQgbGVhc3QgZGVidWcgbGV2ZWwgMgotJS5jaGVjazogJQotCUAkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCSQqIHx8CQkJCQkJCVwKLQkkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCUdTVF9ERUJVRz0kJEdTVF9ERUJVRywqOjIJCQkJXAotCSQqCi0KLSMganVzdCBsaWtlICdjaGVjaycsIGJ1dCBkb24ndCBydW4gaXQgYWdhaW4gaWYgaXQgZmFpbHMgKHVzZWZ1bCBmb3IgZGVidWdnaW5nKQotJS5jaGVjay1ub3JlcGVhdDogJQotCUAkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCSQqCi0KLSMgcnVuIGFueSBnaXZlbiB0ZXN0IGluIGEgbG9vcAotJS50b3J0dXJlOiAlCi0JQGZvciBpIGluIGBzZXEgMSAkKExPT1BTKWA7IGRvCQkJCVwKLQkkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCSQqOyBkb25lCi0KLSMgcnVuIGFueSBnaXZlbiB0ZXN0IGluIGFuIGluZmluaXRlIGxvb3AKLSUuZm9yZXZlcjogJQotCUB3aGlsZSB0cnVlOyBkbwkJCQkJCVwKLQkkKEFNX1RFU1RTX0VOVklST05NRU5UKQkJCQkJXAotCSQqIHx8IGJyZWFrOyBkb25lCi0KLSMgdmFsZ3JpbmQgYW55IGdpdmVuIHRlc3QgYnkgcnVubmluZyBtYWtlIHRlc3QudmFsZ3JpbmQKLSUudmFsZ3JpbmQ6ICUKLQlAdmFsZ3JpbmRfbG9nPSQoc3Vic3QgLywtLCQqLXZhbGdyaW5kLmxvZyk7CQlcCi0JJChBTV9URVNUU19FTlZJUk9OTUVOVCkJCQkJCVwKLQlDS19ERUZBVUxUX1RJTUVPVVQ9MzYwCQkJCQlcCi0JR19TTElDRT1hbHdheXMtbWFsbG9jCQkJCQlcCi0JJChMSUJUT09MKSAtLW1vZGU9ZXhlY3V0ZQkJCQlcCi0JJChWQUxHUklORF9QQVRIKSAtcQkJCQkJXAotCSQoZm9yZWFjaCBzLCQoU1VQUFJFU1NJT05TKSwtLXN1cHByZXNzaW9ucz0kKHMpKQlcCi0JLS10b29sPW1lbWNoZWNrIC0tbGVhay1jaGVjaz1mdWxsIC0tdHJhY2UtY2hpbGRyZW49eWVzCVwKLQktLXNob3ctcG9zc2libHktbG9zdD1ubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQktLWxlYWstcmVzb2x1dGlvbj1oaWdoIC0tbnVtLWNhbGxlcnM9MjAJCQlcCi0JLi8kKiAyPiYxIHwgdGVlICQkdmFsZ3JpbmRfbG9nIDsJCQlcCi0JaWYgZ3JlcCAiXj09IiAkJHZhbGdyaW5kX2xvZyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCVwKLQkgICAgcm0gJCR2YWxncmluZF9sb2c7CQkJCQlcCi0JICAgIGV4aXQgMTsJCQkJCQlcCi0JZmkgOwkJCQkJCQlcCi0Jcm0gJCR2YWxncmluZF9sb2cKLQotIyB2YWxncmluZCBhbnkgZ2l2ZW4gdGVzdCBhbmQgZ2VuZXJhdGUgc3VwcHJlc3Npb25zIGZvciBpdAotJS52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zOiAlCi0JQCQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JQ0tfREVGQVVMVF9USU1FT1VUPTM2MAkJCQkJXAotCUdfU0xJQ0U9YWx3YXlzLW1hbGxvYwkJCQkJXAotCSQoTElCVE9PTCkgLS1tb2RlPWV4ZWN1dGUJCQkJXAotCSQoVkFMR1JJTkRfUEFUSCkgLXEgCQkJCQlcCi0JJChmb3JlYWNoIHMsJChTVVBQUkVTU0lPTlMpLC0tc3VwcHJlc3Npb25zPSQocykpCVwKLQktLXRvb2w9bWVtY2hlY2sgLS1sZWFrLWNoZWNrPWZ1bGwgLS10cmFjZS1jaGlsZHJlbj15ZXMJXAotCS0tc2hvdy1wb3NzaWJseS1sb3N0PW5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCS0tbGVhay1yZXNvbHV0aW9uPWhpZ2ggLS1udW0tY2FsbGVycz0yMAkJCVwKLQktLWdlbi1zdXBwcmVzc2lvbnM9YWxsCQkJCQlcCi0JLi8kKiAyPiYxIHwgdGVlIHN1cHByZXNzaW9ucy5sb2cKLQotIyB2YWxncmluZCB0b3J0dXJlIGFueSBnaXZlbiB0ZXN0Ci0lLnZhbGdyaW5kLXRvcnR1cmU6ICUKLQlAZm9yIGkgaW4gYHNlcSAxICQoTE9PUFMpYDsgZG8JCQkJXAotCQkkKE1BS0UpICQqLnZhbGdyaW5kIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUgYWZ0ZXIgJCRpIHJ1bnMiOyBleGl0IDEpIHx8CVwKLQkJZXhpdCAxOwkJCQkJCVwKLQlkb25lCi0JQGJhbm5lcj0iQWxsICQoTE9PUFMpIGxvb3BzIHBhc3NlZCI7CQkJXAotCWRhc2hlcz1gZWNobyAiJCRiYW5uZXIiIHwgc2VkIHMvLi89L2dgOwkJCVwKLQllY2hvICQkZGFzaGVzOyBlY2hvICQkYmFubmVyOyBlY2hvICQkZGFzaGVzCi0KLSMgdmFsZ3JpbmQgYW55IGdpdmVuIHRlc3QgdW50aWwgZmFpbHVyZSBieSBydW5uaW5nIG1ha2UgdGVzdC52YWxncmluZC1mb3JldmVyCi0lLnZhbGdyaW5kLWZvcmV2ZXI6ICUKLQlAd2hpbGUgJChNQUtFKSAkKi52YWxncmluZDsgZG8JCQkJXAotCSAgdHJ1ZTsgZG9uZQotCi0jIGdkYiBhbnkgZ2l2ZW4gdGVzdCBieSBydW5uaW5nIG1ha2UgdGVzdC5nZGIKLSUuZ2RiOiAlCi0JQCQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpCQkJCQlcCi0JQ0tfRk9SSz1ubwkJCQkJCVwKLQkkKExJQlRPT0wpIC0tbW9kZT1leGVjdXRlCQkJCVwKLQlnZGIgJCoKLQotJS5sY292LXJlc2V0OgotCSQoTUFLRSkgJCoubGNvdi1ydW4KLQkkKE1BS0UpICQqLmxjb3YtcmVwb3J0Ci0KLSUubGNvdjogJQotCSQoTUFLRSkgJCoubGNvdi1yZXNldAotCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQCUubGNvdi1jbGVhbjoKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACSQoTUFLRSkgLUMgJCh0b3BfYnVpbGRkaXIpIGxjb3YtY2xlYW4KLQotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAlLmxjb3YtcnVuOgotQEdTVF9HQ09WX0VOQUJMRURfVFJVRUAJJChNQUtFKSAkKi5sY292LWNsZWFuCi1AR1NUX0dDT1ZfRU5BQkxFRF9UUlVFQAkkKE1BS0UpICQqLmNoZWNrCi0KLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVAJS5sY292LXJlcG9ydDoKLUBHU1RfR0NPVl9FTkFCTEVEX1RSVUVACSQoTUFLRSkgLUMgJCh0b3BfYnVpbGRkaXIpIGxjb3YtcmVwb3J0Ci1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAlLmxjb3YtcnVuOgotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VACWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotCi1AR1NUX0dDT1ZfRU5BQkxFRF9GQUxTRUAlLmxjb3YtcmVwb3J0OgotQEdTVF9HQ09WX0VOQUJMRURfRkFMU0VACWVjaG8gIk5lZWQgdG8gcmVjb25maWd1cmUgd2l0aCAtLWVuYWJsZS1nY292IgotCi0jIHRvcnR1cmUgdGVzdHMKLXRvcnR1cmU6ICQoVEVTVFMpCi0JLXJtIHRlc3QtcmVnaXN0cnkuKgotCUBlY2hvICJUb3J0dXJpbmcgdGVzdHMgLi4uIgotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JCSQoTUFLRSkgY2hlY2sgfHwJCQkJXAotCQkoZWNobyAiRmFpbHVyZSBhZnRlciAkJGkgcnVucyI7IGV4aXQgMSkgfHwJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQlAYmFubmVyPSJBbGwgJChMT09QUykgbG9vcHMgcGFzc2VkIjsJCQlcCi0JZGFzaGVzPWBlY2hvICIkJGJhbm5lciIgfCBzZWQgcy8uLz0vZ2A7CQkJXAotCWVjaG8gJCRkYXNoZXM7IGVjaG8gJCRiYW5uZXI7IGVjaG8gJCRkYXNoZXMKLQotIyBmb3JldmVyIHRlc3RzCi1mb3JldmVyOiAkKFRFU1RTKQotCS1ybSB0ZXN0LXJlZ2lzdHJ5LioKLQlAZWNobyAiRm9yZXZlciB0ZXN0cyAuLi4iCi0JQHdoaWxlIHRydWU7IGRvCQkJCQkJXAotCQkkKE1BS0UpIGNoZWNrIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUiOyBleGl0IDEpIHx8CQkJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQotIyB2YWxncmluZCBhbGwgdGVzdHMKLXZhbGdyaW5kOiAkKFRFU1RTKQotCUBlY2hvICJWYWxncmluZGluZyB0ZXN0cyAuLi4iCi0JQGZhaWxlZD0wOyB2YWxncmluZF90YXJnZXRzPSIiOwkJCQkJXAotCWZvciB0IGluICQoZmlsdGVyLW91dCAkKFZBTEdSSU5EX1RFU1RTX0RJU0FCTEUpLCQoVEVTVFMpKTsgZG8JXAotCSAgdmFsZ3JpbmRfdGFyZ2V0cz0iJCR2YWxncmluZF90YXJnZXRzICQkdC52YWxncmluZCI7CQlcCi0JZG9uZTsJCQkJCQkJCVwKLQlpZiAhICQoTUFLRSkgJCR2YWxncmluZF90YXJnZXRzIDsgdGhlbgkJCQlcCi0JICBlY2hvICJTb21lIHRlc3RzIGhhZCBsZWFrcyBvciBlcnJvcnMgdW5kZXIgdmFsZ3JpbmQiOwkJXAotCSAgZmFsc2U7CQkJCQkJCVwKLQlmaQotCi0jIHZhbGdyaW5kIGFsbCB0ZXN0cyB1bnRpbCBmYWlsdXJlCi12YWxncmluZC1mb3JldmVyOiAkKFRFU1RTKQotCS1ybSB0ZXN0LXJlZ2lzdHJ5LioKLQlAZWNobyAiRm9yZXZlciB2YWxncmluZGluZyB0ZXN0cyAuLi4iCi0JQHdoaWxlIHRydWU7IGRvCQkJCQkJXAotCQkkKE1BS0UpIHZhbGdyaW5kIHx8CQkJCVwKLQkJKGVjaG8gIkZhaWx1cmUiOyBleGl0IDEpIHx8CQkJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQotIyB2YWxncmluZCB0b3J0dXJlIGFsbCB0ZXN0cwotdmFsZ3JpbmQtdG9ydHVyZTogJChURVNUUykKLQktcm0gdGVzdC1yZWdpc3RyeS4qCi0JQGVjaG8gIlRvcnR1cmluZyBhbmQgdmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUBmb3IgaSBpbiBgc2VxIDEgJChMT09QUylgOyBkbwkJCQlcCi0JCSQoTUFLRSkgdmFsZ3JpbmQgfHwJCQkJXAotCQkoZWNobyAiRmFpbHVyZSBhZnRlciAkJGkgcnVucyI7IGV4aXQgMSkgfHwJXAotCQlleGl0IDE7CQkJCQkJXAotCWRvbmUKLQlAYmFubmVyPSJBbGwgJChMT09QUykgbG9vcHMgcGFzc2VkIjsJCQlcCi0JZGFzaGVzPWBlY2hvICIkJGJhbm5lciIgfCBzZWQgcy8uLz0vZ2A7CQkJXAotCWVjaG8gJCRkYXNoZXM7IGVjaG8gJCRiYW5uZXI7IGVjaG8gJCRkYXNoZXMKLQotIyB2YWxncmluZCBhbGwgdGVzdHMgYW5kIGdlbmVyYXRlIHN1cHByZXNzaW9ucwotdmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9uczogJChURVNUUykKLQlAZWNobyAiVmFsZ3JpbmRpbmcgdGVzdHMgLi4uIgotCUBmYWlsZWQ9MDsJCQkJCQkJXAotCWZvciB0IGluICQoZmlsdGVyLW91dCAkKFZBTEdSSU5EX1RFU1RTX0RJU0FCTEUpLCQoVEVTVFMpKTsgZG8JXAotCQkkKE1BS0UpICQkdC52YWxncmluZC5nZW4tc3VwcHJlc3Npb25zOwkJCVwKLQkJaWYgdGVzdCAiJCQ/IiAtbmUgMDsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQllY2hvICJWYWxncmluZCBlcnJvciBmb3IgdGVzdCAkJHQiOwkJXAotCQkJZmFpbGVkPWBleHByICQkZmFpbGVkICsgMWA7CQkJXAotCQkJd2hpY2h0PSIkJHdoaWNodCAkJHQiOwkJCQlcCi0JCWZpOwkJCQkJCQlcCi0JZG9uZTsJCQkJCQkJCVwKLQlpZiB0ZXN0ICIkJGZhaWxlZCIgLW5lIDA7IHRoZW4JCQkJCVwKLQkJZWNobyAiJCRmYWlsZWQgdGVzdHMgaGFkIGxlYWtzIG9yIGVycm9ycyB1bmRlciB2YWxncmluZDoiOwlcCi0JCWVjaG8gIiQkd2hpY2h0IjsJCQkJCVwKLQkJZmFsc2U7CQkJCQkJCVwKLQlmaQotaW5zcGVjdDoKLQlAZWNobyAiSW5zcGVjdGluZyBmZWF0dXJlcyAuLi4iCi0JQGZvciBlIGluIGAkKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKEdTVF9JTlNQRUNUKSB8IGhlYWQgLW4gLTIgCVwKLQkgIHwgY3V0IC1kOiAtZjJgOwkJCQkJCVwKLQkgIGRvIGVjaG8gSW5zcGVjdGluZyAkJGU7CQkJCQlcCi0JICAgICAkKEdTVF9JTlNQRUNUKSAkJGUgPiAvZGV2L251bGwgMj4mMTsgZG9uZQotCi0jIGJ1aWxkIGFsbCB0ZXN0cwotYnVpbGQtY2hlY2tzOiAkKFRFU1RTKQotCi1oZWxwOgotCUBlY2hvCi0JQGVjaG8gIm1ha2UgY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgLS0gcnVuIGFsbCBjaGVja3MiCi0JQGVjaG8gIm1ha2UgdG9ydHVyZSAgICAgICAgICAgICAgICAgICAgICAgLS0gcnVuIGFsbCBjaGVja3MgJChMT09QUykgdGltZXMiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLmNoZWNrICAgICAgICAgICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayBvbmNlLCByZXBlYXQgd2l0aCBHU1RfREVCVUc9KjoyIGlmIGl0IGZhaWxzIgotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5jaGVjay1ub3JlcGVhdCAgIC0tIHJ1biB0aGUgZ2l2ZW4gY2hlY2sgb25jZSwgYnV0IGRvbid0IHJ1biBpdCBhZ2FpbiBpZiBpdCBmYWlscyIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkuZm9yZXZlciAgICAgICAgICAtLSBydW4gdGhlIGdpdmVuIGNoZWNrIGZvcmV2ZXIiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnRvcnR1cmUgICAgICAgICAgLS0gcnVuIHRoZSBnaXZlbiBjaGVjayAkKExPT1BTKSB0aW1lcyIKLQlAZWNobwotCUBlY2hvICJtYWtlIChkaXIpLyh0ZXN0KS5nZGIgICAgICAgICAgICAgIC0tIHN0YXJ0IHVwIGdkYiBmb3IgdGhlIGdpdmVuIHRlc3QiCi0JQGVjaG8KLQlAZWNobyAibWFrZSB2YWxncmluZCAgICAgICAgICAgICAgICAgICAgICAtLSB2YWxncmluZCBhbGwgdGVzdHMiCi0JQGVjaG8gIm1ha2UgdmFsZ3JpbmQtZm9yZXZlciAgICAgICAgICAgICAgLS0gdmFsZ3JpbmQgYWxsIHRlc3RzIGZvcmV2ZXIiCi0JQGVjaG8gIm1ha2UgdmFsZ3JpbmQtdG9ydHVyZSAgICAgICAgICAgICAgLS0gdmFsZ3JpbmQgYWxsIHRlc3RzICQoTE9PUFMpIHRpbWVzIgotCUBlY2hvICJtYWtlIHZhbGdyaW5kLmdlbi1zdXBwcmVzc2lvbnMgICAgIC0tIGdlbmVyYXRlIHN1cHByZXNzaW9ucyBmb3IgYWxsIHRlc3RzIgotCUBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzYXZlIHRvIHN1cHByZXNzaW9ucy5sb2ciCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kICAgICAgICAgLS0gdmFsZ3JpbmQgdGhlIGdpdmVuIHRlc3QiCi0JQGVjaG8gIm1ha2UgKGRpcikvKHRlc3QpLnZhbGdyaW5kLWZvcmV2ZXIgLS0gdmFsZ3JpbmQgdGhlIGdpdmVuIHRlc3QgZm9yZXZlciIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudmFsZ3JpbmQtdG9ydHVyZSAtLSB2YWxncmluZCB0aGUgZ2l2ZW4gdGVzdCAkKExPT1BTKSB0aW1lcyIKLQlAZWNobyAibWFrZSAoZGlyKS8odGVzdCkudmFsZ3JpbmQuZ2VuLXN1cHByZXNzaW9ucyAtLSBnZW5lcmF0ZSBzdXBwcmVzc2lvbnMiCi0JQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNhdmUgdG8gc3VwcHJlc3Npb25zLmxvZyIKLQlAZWNobyAibWFrZSBpbnNwZWN0ICAgICAgICAgICAgICAgICAgICAgICAtLSBpbnNwZWN0IGFsbCBwbHVnaW4gZmVhdHVyZXMiCi0JQGVjaG8gIm1ha2UgYnVpbGQtY2hlY2tzICAgICAgICAgICAgICAgICAgLS0gYnVpbGQgYWxsIGNoZWNrcyAoYnV0IGRvbid0IHJ1biB0aGVtKSIKLQlAZWNobwotCUBlY2hvCi0JQGVjaG8gIkFkZGl0aW9uYWxseSwgeW91IGNhbiB1c2UgdGhlIEdTVF9DSEVDS1MgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8iCi0JQGVjaG8gInNwZWNpZnkgd2hpY2ggdGVzdChzKSBzaG91bGQgYmUgcnVuLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIgotCUBlY2hvICJkZWJ1Z2dpbmcgYSBmYWlsdXJlIGluIG9uZSBwYXJ0aWN1bGFyIHRlc3QsIG9yIHdhbnQgdG8gcmVwcm9kdWNlIgotCUBlY2hvICJhIHJhY2UgY29uZGl0aW9uIGluIGEgc2luZ2xlIHRlc3QuIgotCUBlY2hvCi0JQGVjaG8gIkV4YW1wbGVzOiIKLQlAZWNobwotCUBlY2hvICIgIEdTVF9DSEVDS1M9dGVzdF90aGlzLHRlc3RfdGhhdCAgbWFrZSBlbGVtZW50L2Zvb2Jhci5jaGVjayIKLQlAZWNobyAiICBHU1RfQ0hFQ0tTPXRlc3RfbWFueV90aHJlYWRzICAgIG1ha2UgZWxlbWVudC9mb29iYXIuZm9yZXZlciIKLQlAZWNobwotCi1jbGVhbi1sb2NhbDogY2xlYW4tbG9jYWwtY2hlY2sKLWRpc3RjbGVhbi1sb2NhbDogZGlzdGNsZWFuLWxvY2FsLW9yYwotCi1vcmMvZGVpbnRlcmxhY2UuYzogJCh0b3Bfc3JjZGlyKS9nc3QvZGVpbnRlcmxhY2UvdHZ0aW1lLm9yYwotCSQoTUtESVJfUCkgb3JjLwotCSQoT1JDQykgLS10ZXN0IC1vICRAICQ8Ci0KLW9yYy92aWRlb21peGVyLmM6ICQodG9wX3NyY2RpcikvZ3N0L3ZpZGVvbWl4ZXIvdmlkZW9taXhlcm9yYy5vcmMKLQkkKE1LRElSX1ApIG9yYy8KLQkkKE9SQ0MpIC0tdGVzdCAtbyAkQCAkPAotCi1vcmMvdmlkZW9ib3guYzogJCh0b3Bfc3JjZGlyKS9nc3QvdmlkZW9ib3gvZ3N0dmlkZW9ib3hvcmMub3JjCi0JJChNS0RJUl9QKSBvcmMvCi0JJChPUkNDKSAtLXRlc3QgLW8gJEAgJDwKLQotZGlzdGNsZWFuLWxvY2FsLW9yYzoKLQlybSAtcmYgb3JjCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hYWNwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDIyODg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FhY3BhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgYWFjcGFyc2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSAicGFyc2VyLmgiCi0KLSNkZWZpbmUgU1JDX0NBUFNfQ0RBVEEgImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPShpbnQpNCwgZnJhbWVkPShib29sZWFuKWZhbHNlLCBjb2RlY19kYXRhPShidWZmZXIpMTE5MCIKLSNkZWZpbmUgU1JDX0NBUFNfVE1QTCAgImF1ZGlvL21wZWcsIGZyYW1lZD0oYm9vbGVhbilmYWxzZSwgbXBlZ3ZlcnNpb249KGludCl7Miw0fSIKLQotI2RlZmluZSBTSU5LX0NBUFMgXAotICAgICJhdWRpby9tcGVnLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZSIKLSNkZWZpbmUgU0lOS19DQVBTX01QRUcyIFwKLSAgICAiYXVkaW8vbXBlZywgZnJhbWVkPShib29sZWFuKXRydWUsIG1wZWd2ZXJzaW9uPTIsIHJhdGU9NDgwMDAsIGNoYW5uZWxzPTIiCi0jZGVmaW5lIFNJTktfQ0FQU19NUEVHNCBcCi0gICAgImF1ZGlvL21wZWcsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBtcGVndmVyc2lvbj00LCByYXRlPTk2MDAwLCBjaGFubmVscz0yIgotI2RlZmluZSBTSU5LX0NBUFNfVE1QTCAgImF1ZGlvL21wZWcsIGZyYW1lZD0oYm9vbGVhbil0cnVlLCBtcGVndmVyc2lvbj0oaW50KXsyLDR9IgotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNJTktfQ0FQU19UTVBMKQotICAgICk7Ci0KLUdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoU1JDX0NBUFNfVE1QTCkKLSAgICApOwotCi0vKiBzb21lIGRhdGEgKi8KLXN0YXRpYyBndWludDggYWRpZl9oZWFkZXJbXSA9IHsKLSAgJ0EnLCAnRCcsICdJJywgJ0YnCi19OwotCi1zdGF0aWMgZ3VpbnQ4IGFkdHNfZnJhbWVfbXBlZzJbXSA9IHsKLSAgMHhmZiwgMHhmOSwgMHg0YywgMHg4MCwgMHgwMSwgMHhmZiwgMHhmYywgMHgyMSwgMHgxMCwgMHhkMywgMHgyMCwgMHgwYywKLSAgMHgzMiwgMHgwMCwgMHhjNwotfTsKLQotc3RhdGljIGd1aW50OCBhZHRzX2ZyYW1lX21wZWc0W10gPSB7Ci0gIDB4ZmYsIDB4ZjEsIDB4NGMsIDB4ODAsIDB4MDEsIDB4ZmYsIDB4ZmMsIDB4MjEsIDB4MTAsIDB4ZDMsIDB4MjAsIDB4MGMsCi0gIDB4MzIsIDB4MDAsIDB4YzcKLX07Ci0KLXN0YXRpYyBndWludDggZ2FyYmFnZV9mcmFtZVtdID0gewotICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCi19OwotCi0vKgotICogVGVzdCBpZiB0aGUgcGFyc2VyIHB1c2hlcyBkYXRhIHdpdGggQURJRiBoZWFkZXIgcHJvcGVybHkgYW5kIGRldGVjdHMgdGhlCi0gKiBzdHJlYW0gdG8gTVBFRzQgcHJvcGVybHkuCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2FkaWZfbm9ybWFsKQotewotICBHc3RQYXJzZXJUZXN0IHB0ZXN0OwotCi0gIC8qIEFESUYgaGVhZGVyICovCi0gIGdzdF9wYXJzZXJfdGVzdF9pbml0ICgmcHRlc3QsIGFkaWZfaGVhZGVyLCBzaXplb2YgKGFkaWZfaGVhZGVyKSwgMSk7Ci0gIC8qIHdlbGwsIG5vIGdhcmJhZ2UsIGZvbGxvd2VkIGJ5IHJhbmRvbSBkYXRhICovCi0gIHB0ZXN0LnNlcmllc1syXS5zaXplID0gMTAwOwotICBwdGVzdC5zZXJpZXNbMl0ubnVtID0gMzsKLSAgLyogYW5kIHdlIGRvIG5vdCByZWFsbHkgZXhwZWN0IG91dHB1dCBmcmFtZXMgKi8KLSAgcHRlc3QuZnJhbWVkID0gRkFMU0U7Ci0gIC8qIENoZWNrIHRoYXQgdGhlIG5lZ290aWF0ZWQgY2FwcyBhcmUgYXMgZXhwZWN0ZWQgKi8KLSAgLyogRm9yIEFESUYgcGFyc2VyIGFzc3VtZXMgdGhhdCBkYXRhIGlzIGFsd2F5cyB2ZXJzaW9uIDQgKi8KLSAgcHRlc3Quc2lua19jYXBzID0KLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nIChTSU5LX0NBUFNfTVBFRzQgIiwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWFkaWYiKTsKLQotICBnc3RfcGFyc2VyX3Rlc3RfcnVuICgmcHRlc3QsIE5VTEwpOwotCi0gIGdzdF9jYXBzX3VucmVmIChwdGVzdC5zaW5rX2NhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfYWR0c19ub3JtYWwpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9ub3JtYWwgKGFkdHNfZnJhbWVfbXBlZzQsIHNpemVvZiAoYWR0c19mcmFtZV9tcGVnNCkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfYWR0c19kcmFpbl9zaW5nbGUpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9kcmFpbl9zaW5nbGUgKGFkdHNfZnJhbWVfbXBlZzQsIHNpemVvZiAoYWR0c19mcmFtZV9tcGVnNCkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfYWR0c19kcmFpbl9nYXJiYWdlKQotewotICBnc3RfcGFyc2VyX3Rlc3RfZHJhaW5fZ2FyYmFnZSAoYWR0c19mcmFtZV9tcGVnNCwgc2l6ZW9mIChhZHRzX2ZyYW1lX21wZWc0KSwKLSAgICAgIGdhcmJhZ2VfZnJhbWUsIHNpemVvZiAoZ2FyYmFnZV9mcmFtZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfYWR0c19zcGxpdCkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X3NwbGl0IChhZHRzX2ZyYW1lX21wZWc0LCBzaXplb2YgKGFkdHNfZnJhbWVfbXBlZzQpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2FkdHNfc2tpcF9nYXJiYWdlKQotewotICBnc3RfcGFyc2VyX3Rlc3Rfc2tpcF9nYXJiYWdlIChhZHRzX2ZyYW1lX21wZWc0LCBzaXplb2YgKGFkdHNfZnJhbWVfbXBlZzQpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0vKgotICogVGVzdCBpZiB0aGUgc3JjIGNhcHMgYXJlIHNldCBhY2NvcmRpbmcgdG8gc3RyZWFtIGZvcm1hdCAoTVBFRyB2ZXJzaW9uKS4KLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfYWR0c19kZXRlY3RfbXBlZ192ZXJzaW9uKQotewotICBnc3RfcGFyc2VyX3Rlc3Rfb3V0cHV0X2NhcHMgKGFkdHNfZnJhbWVfbXBlZzIsIHNpemVvZiAoYWR0c19mcmFtZV9tcGVnMiksCi0gICAgICBOVUxMLAotICAgICAgU0lOS19DQVBTX01QRUcyCi0gICAgICAiLCBzdHJlYW0tZm9ybWF0PShzdHJpbmcpYWR0cywgbGV2ZWw9KHN0cmluZykyLCBwcm9maWxlPShzdHJpbmcpbGMiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0jZGVmaW5lIHN0cnVjdHVyZV9nZXRfaW50KHMsZikgXAotICAgIChnX3ZhbHVlX2dldF9pbnQoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocyxmKSkpCi0jZGVmaW5lIGZhaWxfdW5sZXNzX3N0cnVjdHVyZV9maWVsZF9pbnRfZXF1YWxzKHMsZmllbGQsbnVtKSBcCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3RydWN0dXJlX2dldF9pbnQocyxmaWVsZCksIG51bSkKLS8qCi0gKiBUZXN0IGlmIHRoZSBwYXJzZXIgaGFuZGxlcyByYXcgc3RyZWFtIGFuZCBjb2RlY19kYXRhIGluZm8gcHJvcGVybHkuCi0gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2hhbmRsZV9jb2RlY19kYXRhKQotewotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIGNvbnN0IGdjaGFyICpzdHJlYW1fZm9ybWF0OwotCi0gIC8qIFB1c2ggcmFuZG9tIGRhdGEuIEl0IHNob3VsZCBnZXQgdGhyb3VnaCBzaW5jZSB0aGUgcGFyc2VyIHNob3VsZCBiZQotICAgKiBpbml0aWFsaXplZCBiZWNhdXNlIGl0IGdvdCBjb2RlY19kYXRhIGluIHRoZSBjYXBzICovCi0gIGNhcHMgPSBnc3RfcGFyc2VyX3Rlc3RfZ2V0X291dHB1dF9jYXBzIChOVUxMLCAxMDAsIFNSQ19DQVBTX0NEQVRBKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgbmVnb3RpYXRlZCBjYXBzIGFyZSBhcyBleHBlY3RlZCAqLwotICAvKiBXaGVuIGNvZGVjX2RhdGEgaXMgcHJlc2VudCwgcGFyc2VyIGFzc3VtZXMgdGhhdCBkYXRhIGlzIHZlcnNpb24gNCAqLwotICBHU1RfTE9HICgiYWFjIG91dHB1dCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby9tcGVnIikpOwotICBmYWlsX3VubGVzc19zdHJ1Y3R1cmVfZmllbGRfaW50X2VxdWFscyAocywgIm1wZWd2ZXJzaW9uIiwgNCk7Ci0gIGZhaWxfdW5sZXNzX3N0cnVjdHVyZV9maWVsZF9pbnRfZXF1YWxzIChzLCAiY2hhbm5lbHMiLCAyKTsKLSAgZmFpbF91bmxlc3Nfc3RydWN0dXJlX2ZpZWxkX2ludF9lcXVhbHMgKHMsICJyYXRlIiwgNDgwMDApOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHMsICJjb2RlY19kYXRhIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQgKHMsICJzdHJlYW0tZm9ybWF0IikpOwotICBzdHJlYW1fZm9ybWF0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nIChzLCAic3RyZWFtLWZvcm1hdCIpOwotICBmYWlsX3VubGVzcyAoc3RyY21wIChzdHJlYW1fZm9ybWF0LCAicmF3IikgPT0gMCk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX3Byb3h5X2NvbnN0cmFpbnRzKQotewotICBHc3RDYXBzICpjYXBzLCAqcmVzdWx0Y2FwczsKLSAgR3N0RWxlbWVudCAqcGFyc2UsICpmaWx0ZXI7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIHBhcnNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWFjcGFyc2UiLCBOVUxMKTsKLSAgZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpOwotCi0gIC8qIGNvbnN0cmFpbnQgb24gcmF0ZSBhbmQgdmVyc2lvbiAqLwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhdWRpby9tcGVnLG1wZWd2ZXJzaW9uPTIscmF0ZT00NDEwMCIpOwotICBnX29iamVjdF9zZXQgKGZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF9lbGVtZW50X2xpbmsgKHBhcnNlLCBmaWx0ZXIpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocGFyc2UsICJzaW5rIik7Ci0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHNpbmtwYWQsIE5VTEwpOwotICBHU1RfTE9HICgiY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChjYXBzKSA9PSAxKTsKLQotICAvKiBnZXRjYXBzIHNob3VsZCBwcm94eSB0aGUgcmF0ZSBjb25zdHJhaW50ICovCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby9tcGVnIikpOwotICBmYWlsX3VubGVzc19zdHJ1Y3R1cmVfZmllbGRfaW50X2VxdWFscyAocywgInJhdGUiLCA0NDEwMCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBzaG91bGQgYWNjZXB0IHdpdGhvdXQgdGhlIGNvbnN0cmFpbnQgKi8KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8vbXBlZyxtcGVndmVyc2lvbj0yIik7Ci0gIHJlc3VsdGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHNpbmtwYWQsIGNhcHMpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAocmVzdWx0Y2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAocmVzdWx0Y2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBzaG91bGQgbm90IGFjY2VwdCB3aXRoIGNvbmZsaWN0aW5nIHZlcnNpb24gKi8KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8vbXBlZyxtcGVndmVyc2lvbj00Iik7Ci0gIHJlc3VsdGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHNpbmtwYWQsIGNhcHMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZW1wdHkgKHJlc3VsdGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHJlc3VsdGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZmlsdGVyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFyc2UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1hYWNwYXJzZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhYWNwYXJzZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgLyogaW5pdCB0ZXN0IGNvbnRleHQgKi8KLSAgY3R4X2ZhY3RvcnkgPSAiYWFjcGFyc2UiOwotICBjdHhfc2lua190ZW1wbGF0ZSA9ICZzaW5rdGVtcGxhdGU7Ci0gIGN0eF9zcmNfdGVtcGxhdGUgPSAmc3JjdGVtcGxhdGU7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIC8qIEFESUYgdGVzdHMgKi8KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2FkaWZfbm9ybWFsKTsKLQotICAvKiBBRFRTIHRlc3RzICovCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9hZHRzX25vcm1hbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9hZHRzX2RyYWluX3NpbmdsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9hZHRzX2RyYWluX2dhcmJhZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfYWR0c19zcGxpdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9hZHRzX3NraXBfZ2FyYmFnZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9hZHRzX2RldGVjdF9tcGVnX3ZlcnNpb24pOwotCi0gIC8qIE90aGVyIHRlc3RzICovCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9oYW5kbGVfY29kZWNfZGF0YSk7Ci0KLSAgLyogY2FwcyB0ZXN0cyAqLwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfcHJveHlfY29uc3RyYWludHMpOwotCi0gIHJldHVybiBzOwotfQotCi0KLS8qCi0gKiBUT0RPOgotICogICAtIEJvdGggcHVzaC0gYW5kIHB1bGwtbW9kZXMgbmVlZCB0byBiZSB0ZXN0ZWQKLSAqICAgICAgKiBQdWxsLW1vZGUgJiBFT1MKLSAqLwotR1NUX0NIRUNLX01BSU4gKGFhY3BhcnNlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FjM3BhcnNlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hYzNwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmJlNTliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FjM3BhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgYWMzcGFyc2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSAicGFyc2VyLmgiCi0KLSNkZWZpbmUgU1JDX0NBUFNfVE1QTCAgICJhdWRpby94LWFjMywgZnJhbWVkPShib29sZWFuKWZhbHNlIgotI2RlZmluZSBTSU5LX0NBUFNfVE1QTCAgImF1ZGlvL3gtYWMzLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZSIKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTSU5LX0NBUFNfVE1QTCkKLSAgICApOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNSQ19DQVBTX1RNUEwpCi0gICAgKTsKLQotLyogc29tZSBkYXRhICovCi0KLXN0YXRpYyBndWludDggYWMzX2ZyYW1lWzUxMl0gPSB7Ci0gIDB4MGIsIDB4NzcsIDB4YjYsIDB4YTgsIDB4MTAsIDB4NDAsIDB4MmYsIDB4ODQsCi0gIDB4MjksIDB4Y2IsIDB4ZmUsIDB4NzUsIDB4N2MsIDB4ZjksIDB4ZjMsIDB4ZTcsCi0gIDB4Y2YsIDB4OWYsIDB4M2UsIDB4N2MsIDB4ZjksIDB4ZjMsIDB4ZTcsIDB4Y2YsCi0gIDB4OWYsIDB4M2UsIDB4N2MsIDB4ZjksIDB4ZjMsIDB4ZTcsIDB4Y2YsIDB4OWYsCi0gIDB4M2UsIDB4N2MsIDB4ZjksIDB4ZjMsIDB4ZTcsIDB4Y2YsIDB4OWYsIDB4M2UsCi0gIDB4N2MsIDB4ZjksIDB4ZjMsIDB4ZTcsIDB4Y2YsIDB4OWYsIDB4M2UsIDB4N2MsCi0gIDB4ZjksIDB4ZjMsIDB4ZTcsIDB4Y2YsIDB4OWYsIDB4M2UsIDB4N2MsIDB4ZjksCi0gIDB4ZjMsIDB4ZTcsIDB4Y2YsIDB4OWYsIDB4M2UsIDB4N2MsIDB4ZjksIDB4ZjMsCi0gIDB4ZTcsIDB4Y2YsIDB4OWYsIDB4M2UsIDB4N2MsIDB4ZjksIDB4ZjMsIDB4ZTcsCi0gIDB4Y2YsIDB4OWYsIDB4M2UsIDB4MzIsIDB4ZDMsIDB4ZmYsIDB4YzAsIDB4MDYsCi0gIDB4ZTksIDB4NDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4MDYsIDB4ZTksCi0gIDB4NDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4MDYsIDB4ZTksIDB4NDAsCi0gIDB4MDAsIDB4NmUsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi19OwotCi1zdGF0aWMgZ3VpbnQ4IGdhcmJhZ2VfZnJhbWVbXSA9IHsKLSAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgotfTsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9ub3JtYWwpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9ub3JtYWwgKGFjM19mcmFtZSwgc2l6ZW9mIChhYzNfZnJhbWUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2RyYWluX3NpbmdsZSkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X2RyYWluX3NpbmdsZSAoYWMzX2ZyYW1lLCBzaXplb2YgKGFjM19mcmFtZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfZHJhaW5fZ2FyYmFnZSkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X2RyYWluX2dhcmJhZ2UgKGFjM19mcmFtZSwgc2l6ZW9mIChhYzNfZnJhbWUpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9zcGxpdCkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X3NwbGl0IChhYzNfZnJhbWUsIHNpemVvZiAoYWMzX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9za2lwX2dhcmJhZ2UpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9za2lwX2dhcmJhZ2UgKGFjM19mcmFtZSwgc2l6ZW9mIChhYzNfZnJhbWUpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9kZXRlY3Rfc3RyZWFtKQotewotICBnc3RfcGFyc2VyX3Rlc3Rfb3V0cHV0X2NhcHMgKGFjM19mcmFtZSwgc2l6ZW9mIChhYzNfZnJhbWUpLAotICAgICAgTlVMTCwgU0lOS19DQVBTX1RNUEwgIixjaGFubmVscz0xLHJhdGU9NDgwMDAsYWxpZ25tZW50PWZyYW1lIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotYWMzcGFyc2Vfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiYWMzcGFyc2UiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIC8qIGluaXQgdGVzdCBjb250ZXh0ICovCi0gIGN0eF9mYWN0b3J5ID0gImFjM3BhcnNlIjsKLSAgY3R4X3NpbmtfdGVtcGxhdGUgPSAmc2lua3RlbXBsYXRlOwotICBjdHhfc3JjX3RlbXBsYXRlID0gJnNyY3RlbXBsYXRlOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2Vfbm9ybWFsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2RyYWluX3NpbmdsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9kcmFpbl9nYXJiYWdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX3NwbGl0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX3NraXBfZ2FyYmFnZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9kZXRlY3Rfc3RyZWFtKTsKLQotICByZXR1cm4gczsKLX0KLQotCi0vKgotICogVE9ETzoKLSAqICAgLSBCb3RoIHB1c2gtIGFuZCBwdWxsLW1vZGVzIG5lZWQgdG8gYmUgdGVzdGVkCi0gKiAgICAgICogUHVsbC1tb2RlICYgRU9TCi0gKi8KLUdTVF9DSEVDS19NQUlOIChhYzNwYXJzZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hbHBoYS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYWxwaGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwM2JjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hbHBoYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3QgZm9yIHRoZSBhbHBoYSBlbGVtZW50Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJhdmkgS2lyYW4gSyBOIDxyYXZpLmtpcmFuQHNhbXN1bmcuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotCi1Hc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJBWVVWIikpCi0gICAgKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEFZVVYsICIKLSAgICAgICAgICAgICJBUkdCLCBCR1JBLCBBQkdSLCBSR0JBLCBZNDQ0LCB4UkdCLCBCR1J4LCB4QkdSLCAiCi0gICAgICAgICAgICAiUkdCeCwgUkdCLCBCR1IsIFk0MkIsIFlVWTIsIFlWWVUsIFVZVlksIEk0MjAsIFlWMTIsIFk0MUIgfSAiKSkKLSAgICApOwotCi0KLXR5cGVkZWYgZW51bQotewotICBGSUxMX0dSRUVOLAotICBGSUxMX0JMVUUKLX0KLUZpbGxDb2xvcjsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfYWxwaGEgKHZvaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmFscGhhOwotCi0gIGFscGhhID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJhbHBoYSIpOwotICBzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoYWxwaGEsICZzcmN0ZW1wbGF0ZSk7Ci0gIHNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGFscGhhLCAmc2lua3RlbXBsYXRlKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGFscGhhOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9hbHBoYSAoR3N0RWxlbWVudCAqIGFscGhhKQotewotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGFscGhhKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChhbHBoYSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChhbHBoYSk7Ci19Ci0KLSNkZWZpbmUgV0lEVEggMwotI2RlZmluZSBIRUlHSFQgNAotCi1zdGF0aWMgR3N0Q2FwcyAqCi1jcmVhdGVfY2Fwc19yZ2JhMzIgKHZvaWQpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsCi0gICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBXSURUSCwKLSAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBIRUlHSFQsCi0gICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDAsIDEsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIlJHQkEiLCBOVUxMKTsKLQotICByZXR1cm4gY2FwczsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfYnVmZmVyX3JnYmEzMiAoRmlsbENvbG9yIGNvbG9yKQotewotICBndWludDggcmdiYTMyX2ltZ1tIRUlHSFQgKiBXSURUSCAqIDRdOwotICBndWludDMyICpyZ2JhMzIgPSAoZ3VpbnQzMiAqKSByZ2JhMzJfaW1nOwotCi0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQzMiByZ2JhX2NvbDsKLSAgaW50IGk7Ci0KLSAgaWYgKGNvbG9yID09IEZJTExfR1JFRU4pCi0gICAgcmdiYV9jb2wgPSAweGZmMDBmZjAwOyAgICAgIC8qIEdSRUVOICovCi0gIGVsc2UKLSAgICByZ2JhX2NvbCA9IDB4ZmZmZjAwMDA7ICAgICAgLyogQkxVRSAqLwotCi0gIGZvciAoaSA9IDA7IGkgPCBIRUlHSFQgKiBXSURUSDsgaSsrKQotICAgIHJnYmEzMltpXSA9IHJnYmFfY29sOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoSEVJR0hUICogV0lEVEggKiA0KTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXAuc2l6ZSwgc2l6ZW9mIChyZ2JhMzJfaW1nKSk7Ci0gIG1lbWNweSAobWFwLmRhdGEsIHJnYmEzMl9pbWcsIHNpemVvZiAocmdiYTMyX2ltZykpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jaHJvbWFrZXlpbmcpCi17Ci0gIEdzdEVsZW1lbnQgKmFscGhhOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RCdWZmZXIgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqaW5jYXBzOwotICBndWludDggKmF5dXY7Ci0gIGd1aW50IG91dGxlbmd0aDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGludCBpOwotCi0gIGluY2FwcyA9IGNyZWF0ZV9jYXBzX3JnYmEzMiAoKTsKLQotICBhbHBoYSA9IHNldHVwX2FscGhhICgpOwotCi0gIGdfb2JqZWN0X3NldCAoYWxwaGEsICJtZXRob2QiLCAxLCBOVUxMKTsgICAgICAvKiBDaHJvbWEta2V5aW5nIEdSRUVOICovCi0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhbHBoYSwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChzcmNwYWQsIGFscGhhLCBpbmNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgaW5idWZmZXIgPSBjcmVhdGVfYnVmZmVyX3JnYmEzMiAoRklMTF9HUkVFTik7Ci0gIEdTVF9ERUJVRyAoIkNyZWF0ZWQgYnVmZmVyIG9mICUiIEdfR1NJWkVfRk9STUFUICIgYnl0ZXMiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW5idWZmZXIpKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBpbmJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSk7Ci0gIG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YTsKLSAgZmFpbF9pZiAob3V0YnVmZmVyID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAob3V0YnVmZmVyKSk7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0YnVmZmVyLCAib3V0YnVmZmVyIiwgMSk7Ci0gIG91dGxlbmd0aCA9IFdJRFRIICogSEVJR0hUICogNDsgICAgICAgLyogb3V0cHV0IGlzIEFZVVYgKi8KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWFwLnNpemUsIG91dGxlbmd0aCk7Ci0KLSAgYXl1diA9IG1hcC5kYXRhOwotCi0gIC8qIGNoZWNrIGNocm9tYSBrZXlpbmcgR1JFRU4gKi8KLSAgZm9yIChpID0gMDsgaSA8IEhFSUdIVCAqIFdJRFRIOyBpICs9IDQpCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoYXl1dltpXSwgMHgwMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgb3V0YnVmZmVyKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmZmVyKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFscGhhLCBHU1RfU1RBVEVfTlVMTCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hbHBoYSAoYWxwaGEpOwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoaW5jYXBzLCAiaW5jYXBzIiwgMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOwotCi19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FscGhhKQotewotICBHc3RFbGVtZW50ICphbHBoYTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlcjsKLSAgR3N0QnVmZmVyICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmluY2FwczsKLSAgZ3VpbnQ4ICpheXV2OwotICBndWludCBvdXRsZW5ndGg7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBpbnQgaTsKLQotICBpbmNhcHMgPSBjcmVhdGVfY2Fwc19yZ2JhMzIgKCk7Ci0KLSAgYWxwaGEgPSBzZXR1cF9hbHBoYSAoKTsKLQotICBnX29iamVjdF9zZXQgKGFscGhhLCAiYWxwaGEiLCAwLjUsIE5VTEwpOyAgICAgLyogQWxwaGEgdmFsdWUgMC41ICovCi0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhbHBoYSwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChzcmNwYWQsIGFscGhhLCBpbmNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgaW5idWZmZXIgPSBjcmVhdGVfYnVmZmVyX3JnYmEzMiAoRklMTF9CTFVFKTsKLSAgR1NUX0RFQlVHICgiQ3JlYXRlZCBidWZmZXIgb2YgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsCi0gICAgICBnc3RfYnVmZmVyX2dldF9zaXplIChpbmJ1ZmZlcikpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IHJlZmVyZW5jZSAqLwotICBHU1RfREVCVUcgKCJwdXNoIGl0Iik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBpbmJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLSAgR1NUX0RFQlVHICgicHVzaGVkIGl0Iik7Ci0KLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEpOwotICBvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGE7Ci0gIGZhaWxfaWYgKG91dGJ1ZmZlciA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKG91dGJ1ZmZlcikpOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKG91dGJ1ZmZlciwgIm91dGJ1ZmZlciIsIDEpOwotICBvdXRsZW5ndGggPSBXSURUSCAqIEhFSUdIVCAqIDQ7ICAgICAgIC8qIG91dHB1dCBpcyBBWVVWICovCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hcC5zaXplLCBvdXRsZW5ndGgpOwotCi0gIGF5dXYgPSBtYXAuZGF0YTsKLQotICBmb3IgKGkgPSAwOyBpIDwgSEVJR0hUICogV0lEVEg7IGkgKz0gNCkKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChheXV2W2ldLCAweDdGKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIGJ1ZmZlcnMgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJzLCBvdXRidWZmZXIpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYWxwaGEsIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBHU1RfREVCVUcgKCJjbGVhbnVwIGFscGhhIik7Ci0gIGNsZWFudXBfYWxwaGEgKGFscGhhKTsKLSAgR1NUX0RFQlVHICgiY2xlYW51cCwgdW5yZWYgaW5jYXBzIik7Ci0gIEFTU0VSVF9DQVBTX1JFRkNPVU5UIChpbmNhcHMsICJpbmNhcHMiLCAxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7Ci0KLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1hbHBoYV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhbHBoYSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hbHBoYSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jaHJvbWFrZXlpbmcpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoYWxwaGEpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYWxwaGFjb2xvci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYWxwaGFjb2xvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTQ5NmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FscGhhY29sb3IuYworKysgL2Rldi9udWxsCkBAIC0xLDI4OCArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0IGZvciB0aGUgYWxwaGFjb2xvciBlbGVtZW50Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgiQVlVViIpKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChHU1RfVklERU9fQ0FQU19NQUtFICgieyBSR0JBLCBSR0IgfSIpKQotICAgICk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX2FscGhhY29sb3IgKHZvaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmFscGhhY29sb3I7Ci0KLSAgYWxwaGFjb2xvciA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiYWxwaGFjb2xvciIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChhbHBoYWNvbG9yLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGFscGhhY29sb3IsICZzaW5rdGVtcGxhdGUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGFscGhhY29sb3I7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX2FscGhhY29sb3IgKEdzdEVsZW1lbnQgKiBhbHBoYWNvbG9yKQotewotICBHU1RfREVCVUcgKCJjbGVhbmluZyB1cCIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGFscGhhY29sb3IpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGFscGhhY29sb3IpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoYWxwaGFjb2xvcik7Ci19Ci0KLSNkZWZpbmUgV0lEVEggMwotI2RlZmluZSBIRUlHSFQgNAotCi1zdGF0aWMgR3N0Q2FwcyAqCi1jcmVhdGVfY2Fwc19yZ2IyNCAodm9pZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmF3IiwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMsCi0gICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgNCwKLSAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMCwgMSwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiUkdCIiwgTlVMTCk7Ci0KLSAgcmV0dXJuIGNhcHM7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWNyZWF0ZV9jYXBzX3JnYmEzMiAodm9pZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmF3IiwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMsCi0gICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgNCwKLSAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMCwgMSwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiUkdCQSIsIE5VTEwpOwotCi0gIHJldHVybiBjYXBzOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWNyZWF0ZV9idWZmZXJfcmdiMjRfM3g0ICh2b2lkKQotewotICAvKiBzdHJpZGUgaXMgcm91bmRlZCB1cCB0byBtdWx0aXBsZSBvZiA0LCBzbyAzIGJ5dGVzIHBhZGRpbmcgZm9yIGVhY2ggcm93ICovCi0gIGNvbnN0IGd1aW50OCByZ2IyNF8zeDRfaW1nW0hFSUdIVCAqIEdTVF9ST1VORF9VUF80IChXSURUSCAqIDMpXSA9IHsKLSAgICAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi0gIH07Ci0gIGd1aW50IHJvd3N0cmlkZSA9IEdTVF9ST1VORF9VUF80IChXSURUSCAqIDMpOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0TWFwSW5mbyBpbmZvOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoSEVJR0hUICogcm93c3RyaWRlKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJmluZm8sIEdTVF9NQVBfUkVBRFdSSVRFKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoaW5mby5zaXplLCBzaXplb2YgKHJnYjI0XzN4NF9pbWcpKTsKLSAgbWVtY3B5IChpbmZvLmRhdGEsIHJnYjI0XzN4NF9pbWcsIHNpemVvZiAocmdiMjRfM3g0X2ltZykpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJmluZm8pOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotY3JlYXRlX2J1ZmZlcl9yZ2JhMzJfM3g0ICh2b2lkKQotewotICAvKiBzdHJpZGUgaXMgcm91bmRlZCB1cCB0byBtdWx0aXBsZSBvZiA0LCBzbyAzIGJ5dGVzIHBhZGRpbmcgZm9yIGVhY2ggcm93ICovCi0gIC8qIHNob3VsZCBiZTogIFJFRCAgICAgQkxVRSAgICBXSElURSAgICB3aGVyZSAnbm90aGluZycgaXMgZnVsbHkgdHJhbnNwYXJlbnQKLSAgICogICAgICAgICAgICAgR1JFRU4gICBSRUQgICAgIEJMVUUgICAgIGFuZCBhbGwgb3RoZXIgY29sb3VycyBhcmUgZnVsbHkKLSAgICogICAgICAgICAgICAgTk9USElORyBHUkVFTiAgIFJFRCAgICAgIG9wYXF1ZS4KLSAgICogICAgICAgICAgICAgQkxBQ0sgICBOT1RISU5HIEdSRUVOCi0gICAqLwotICBjb25zdCBndWludDggcmdiYTMyXzN4NF9pbWdbSEVJR0hUICogV0lEVEggKiA0XSA9IHsKLSAgICAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZmYsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweGZmCi0gIH07Ci0gIGd1aW50IHJvd3N0cmlkZSA9IFdJRFRIICogNDsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoSEVJR0hUICogcm93c3RyaWRlKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEV1JJVEUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXAuc2l6ZSwgc2l6ZW9mIChyZ2JhMzJfM3g0X2ltZykpOwotICBtZW1jcHkgKG1hcC5kYXRhLCByZ2JhMzJfM3g0X2ltZywgc2l6ZW9mIChyZ2JhMzJfM3g0X2ltZykpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmdiMjQpCi17Ci0gIEdzdEVsZW1lbnQgKmFscGhhY29sb3I7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXI7Ci0gIEdzdENhcHMgKmluY2FwczsKLQotICBpbmNhcHMgPSBjcmVhdGVfY2Fwc19yZ2IyNCAoKTsKLSAgYWxwaGFjb2xvciA9IHNldHVwX2FscGhhY29sb3IgKCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhbHBoYWNvbG9yLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhbHBoYWNvbG9yLCBpbmNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgaW5idWZmZXIgPSBjcmVhdGVfYnVmZmVyX3JnYjI0XzN4NCAoKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSByZWZlcmVuY2U7IHRoaXMgc2hvdWxkIGVycm9yIG91dCB3aXRoIGEgbm90LW5lZ290aWF0ZWQKLSAgICogZXJyb3IsIGFscGhhY29sb3Igc2hvdWxkIG9ubHkgYWNjZXB0IFJHQkEgY2Fwcywgbm90IGJ1dCBwbGFpbiBSR0IyNCBjYXBzICovCi0gIEdTVF9ERUJVRyAoInB1c2ggaXQiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpLAotICAgICAgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBHU1RfREVCVUcgKCJwdXNoZWQgaXQiKTsKLQotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhbHBoYWNvbG9yLCBHU1RfU1RBVEVfTlVMTCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgR1NUX0RFQlVHICgiY2xlYW51cCBhbHBoYWNvbG9yIik7Ci0gIGNsZWFudXBfYWxwaGFjb2xvciAoYWxwaGFjb2xvcik7Ci0gIEdTVF9ERUJVRyAoImNsZWFudXAsIHVucmVmIGluY2FwcyIpOwotICBBU1NFUlRfQ0FQU19SRUZDT1VOVCAoaW5jYXBzLCAiaW5jYXBzIiwgMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChpbmNhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHRoZXNlIG1hY3JvcyBhc3N1bWUgV0lEVEggYW5kIEhFSUdIVCBpcyBmaXhlZCB0byB3aGF0J3MgZGVmaW5lZCBhYm92ZSAqLwotI2RlZmluZSBmYWlsX3VubGVzc19heXV2X3BpeGVsX2hhc19hbHBoYShheXV2LHgseSxhKSBcCi0gICAgeyBcCi0gICAgICAgIGd1aW50OCAqcGl4ZWw7IFwKLSAgICAgICAgcGl4ZWwgPSAoKGd1aW50OCopKGF5dXYpICsgKChXSURUSCAqIDQpICogKHkpKSArICgoeCkgKiA0KSk7IFwKLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocGl4ZWxbMF0sIGEpOyBcCi0gICAgfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZ2JhMzIpCi17Ci0gIEdzdEVsZW1lbnQgKmFscGhhY29sb3I7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXI7Ci0gIEdzdEJ1ZmZlciAqb3V0YnVmZmVyOwotICBHc3RDYXBzICppbmNhcHM7Ci0gIGd1aW50OCAqYXl1djsKLSAgZ3VpbnQgb3V0bGVuZ3RoOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBpbmNhcHMgPSBjcmVhdGVfY2Fwc19yZ2JhMzIgKCk7Ci0gIGFscGhhY29sb3IgPSBzZXR1cF9hbHBoYWNvbG9yICgpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYWxwaGFjb2xvciwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYWxwaGFjb2xvciwgaW5jYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGluYnVmZmVyID0gY3JlYXRlX2J1ZmZlcl9yZ2JhMzJfM3g0ICgpOwotICBHU1RfREVCVUcgKCJDcmVhdGVkIGJ1ZmZlciBvZiAlIiBHX0dTSVpFX0ZPUk1BVCAiIGJ5dGVzIiwKLSAgICAgIGdzdF9idWZmZXJfZ2V0X3NpemUgKGluYnVmZmVyKSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgcmVmZXJlbmNlICovCi0gIEdTVF9ERUJVRyAoInB1c2ggaXQiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpLCBHU1RfRkxPV19PSyk7Ci0gIEdTVF9ERUJVRyAoInB1c2hlZCBpdCIpOwotCi0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLSAgb3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhOwotICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSIChvdXRidWZmZXIpKTsKLQotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChvdXRidWZmZXIsICJvdXRidWZmZXIiLCAxKTsKLSAgb3V0bGVuZ3RoID0gV0lEVEggKiBIRUlHSFQgKiA0OyAgICAgICAvKiBvdXRwdXQgaXMgQVlVViAqLwotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXAuc2l6ZSwgb3V0bGVuZ3RoKTsKLQotICBheXV2ID0gbWFwLmRhdGE7Ci0KLSAgLyogY2hlY2sgYWxwaGEgdmFsdWVzICgweDAwID0gdG90YWxseSB0cmFuc3BhcmVudCwgMHhmZiA9IHRvdGFsbHkgb3BhcXVlKSAqLwotICBmYWlsX3VubGVzc19heXV2X3BpeGVsX2hhc19hbHBoYSAoYXl1diwgMCwgMCwgMHhmZik7Ci0gIGZhaWxfdW5sZXNzX2F5dXZfcGl4ZWxfaGFzX2FscGhhIChheXV2LCAxLCAwLCAweGZmKTsKLSAgZmFpbF91bmxlc3NfYXl1dl9waXhlbF9oYXNfYWxwaGEgKGF5dXYsIDIsIDAsIDB4ZmYpOwotICBmYWlsX3VubGVzc19heXV2X3BpeGVsX2hhc19hbHBoYSAoYXl1diwgMCwgMSwgMHhmZik7Ci0gIGZhaWxfdW5sZXNzX2F5dXZfcGl4ZWxfaGFzX2FscGhhIChheXV2LCAxLCAxLCAweGZmKTsKLSAgZmFpbF91bmxlc3NfYXl1dl9waXhlbF9oYXNfYWxwaGEgKGF5dXYsIDIsIDEsIDB4ZmYpOwotICBmYWlsX3VubGVzc19heXV2X3BpeGVsX2hhc19hbHBoYSAoYXl1diwgMCwgMiwgMHgwMCk7Ci0gIGZhaWxfdW5sZXNzX2F5dXZfcGl4ZWxfaGFzX2FscGhhIChheXV2LCAxLCAyLCAweGZmKTsKLSAgZmFpbF91bmxlc3NfYXl1dl9waXhlbF9oYXNfYWxwaGEgKGF5dXYsIDIsIDIsIDB4ZmYpOwotICBmYWlsX3VubGVzc19heXV2X3BpeGVsX2hhc19hbHBoYSAoYXl1diwgMCwgMywgMHhmZik7Ci0gIGZhaWxfdW5sZXNzX2F5dXZfcGl4ZWxfaGFzX2FscGhhIChheXV2LCAxLCAzLCAweDAwKTsKLSAgZmFpbF91bmxlc3NfYXl1dl9waXhlbF9oYXNfYWxwaGEgKGF5dXYsIDIsIDMsIDB4ZmYpOwotCi0gIC8qIHdlIGRvbid0IGNoZWNrIHRoZSBZVVYgZGF0YSwgYmVjYXVzZSBhcHBhcmVudGx5IHJlc3VsdHMgZGlmZmVyIHNsaWdodGx5Ci0gICAqIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHJ1biBpbiB2YWxncmluZCBvciBub3QgKi8KLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIGJ1ZmZlcnMgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJzLCBvdXRidWZmZXIpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYWxwaGFjb2xvciwgR1NUX1NUQVRFX05VTEwpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiBjbGVhbnVwICovCi0gIEdTVF9ERUJVRyAoImNsZWFudXAgYWxwaGFjb2xvciIpOwotICBjbGVhbnVwX2FscGhhY29sb3IgKGFscGhhY29sb3IpOwotICBHU1RfREVCVUcgKCJjbGVhbnVwLCB1bnJlZiBpbmNhcHMiKTsKLSAgQVNTRVJUX0NBUFNfUkVGQ09VTlQgKGluY2FwcywgImluY2FwcyIsIDEpOwotICBnc3RfY2Fwc191bnJlZiAoaW5jYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1hbHBoYWNvbG9yX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImFscGhhY29sb3IiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmdiMjQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmdiYTMyKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGFscGhhY29sb3IpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYW1ycGFyc2UuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FtcnBhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0OWU5ZTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYW1ycGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBhbXJwYXJzZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBDb250YWN0OiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlICJwYXJzZXIuaCIKLQotI2RlZmluZSBTUkNfQ0FQU19OQiAgImF1ZGlvL3gtYW1yLW5iLXNoIgotI2RlZmluZSBTUkNfQ0FQU19XQiAgImF1ZGlvL3gtYW1yLXdiLXNoIgotI2RlZmluZSBTUkNfQ0FQU19BTlkgIkFOWSIKLQotI2RlZmluZSBTSU5LX0NBUFNfTkIgICJhdWRpby9BTVIsIHJhdGU9ODAwMCAsIGNoYW5uZWxzPTEiCi0jZGVmaW5lIFNJTktfQ0FQU19XQiAgImF1ZGlvL0FNUi1XQiwgcmF0ZT0xNjAwMCAsIGNoYW5uZWxzPTEiCi0jZGVmaW5lIFNJTktfQ0FQU19BTlkgIkFOWSIKLQotI2RlZmluZSBBTVJfRlJBTUVfRFVSQVRJT04gKEdTVF9TRUNPTkQvNTApCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGVfbmIgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNJTktfQ0FQU19OQikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlX3diID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTSU5LX0NBUFNfV0IpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlX25iID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoU1JDX0NBUFNfTkIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlX3diID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoU1JDX0NBUFNfV0IpCi0gICAgKTsKLQotc3RhdGljIEdzdENhcHMgKmlucHV0X2NhcHMgPSBOVUxMOwotCi0vKiBzb21lIGRhdGEgKi8KLQotc3RhdGljIGd1aW50OCBmcmFtZV9kYXRhX25iW10gPSB7Ci0gIDB4MGMsIDB4NTYsIDB4M2MsIDB4NTIsIDB4ZTAsIDB4NjEsIDB4YmMsIDB4NDUsCi0gIDB4MGYsIDB4OTgsIDB4MmUsIDB4MDEsIDB4NDIsIDB4MDIKLX07Ci0KLXN0YXRpYyBndWludDggZnJhbWVfZGF0YV93YltdID0gewotICAweDA4LCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LAotICAweDA3LCAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAotICAweDBmLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2Ci19OwotCi1zdGF0aWMgZ3VpbnQ4IGZyYW1lX2hkcl9uYltdID0gewotICAnIycsICchJywgJ0EnLCAnTScsICdSJywgJ1xuJwotfTsKLQotc3RhdGljIGd1aW50OCBmcmFtZV9oZHJfd2JbXSA9IHsKLSAgJyMnLCAnIScsICdBJywgJ00nLCAnUicsICctJywgJ1cnLCAnQicsICdcbicKLX07Ci0KLXN0YXRpYyBndWludDggZ2FyYmFnZV9mcmFtZVtdID0gewotICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCi19OwotCi1zdGF0aWMgdm9pZAotc2V0dXBfYW1ybmIgKHZvaWQpCi17Ci0gIGN0eF9mYWN0b3J5ID0gImFtcnBhcnNlIjsKLSAgY3R4X3NpbmtfdGVtcGxhdGUgPSAmc2lua3RlbXBsYXRlX25iOwotICBjdHhfc3JjX3RlbXBsYXRlID0gJnNyY3RlbXBsYXRlX25iOwotICBpbnB1dF9jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFNSQ19DQVBTX05CKTsKLSAgZ19hc3NlcnQgKGlucHV0X2NhcHMpOwotICBjdHhfaW5wdXRfY2FwcyA9IGlucHV0X2NhcHM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9hbXJ3YiAodm9pZCkKLXsKLSAgY3R4X2ZhY3RvcnkgPSAiYW1ycGFyc2UiOwotICBjdHhfc2lua190ZW1wbGF0ZSA9ICZzaW5rdGVtcGxhdGVfd2I7Ci0gIGN0eF9zcmNfdGVtcGxhdGUgPSAmc3JjdGVtcGxhdGVfd2I7Ci0gIGlucHV0X2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoU1JDX0NBUFNfV0IpOwotICBnX2Fzc2VydCAoaW5wdXRfY2Fwcyk7Ci0gIGN0eF9pbnB1dF9jYXBzID0gaW5wdXRfY2FwczsKLX0KLQotc3RhdGljIHZvaWQKLXRlYXJkb3duICh2b2lkKQotewotICBnc3RfY2Fwc191bnJlZiAoaW5wdXRfY2Fwcyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX25iX25vcm1hbCkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X25vcm1hbCAoZnJhbWVfZGF0YV9uYiwgc2l6ZW9mIChmcmFtZV9kYXRhX25iKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9uYl9kcmFpbl9zaW5nbGUpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9kcmFpbl9zaW5nbGUgKGZyYW1lX2RhdGFfbmIsIHNpemVvZiAoZnJhbWVfZGF0YV9uYikpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfbmJfZHJhaW5fZ2FyYmFnZSkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X2RyYWluX2dhcmJhZ2UgKGZyYW1lX2RhdGFfbmIsIHNpemVvZiAoZnJhbWVfZGF0YV9uYiksCi0gICAgICBnYXJiYWdlX2ZyYW1lLCBzaXplb2YgKGdhcmJhZ2VfZnJhbWUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX25iX3NwbGl0KQotewotICBnc3RfcGFyc2VyX3Rlc3Rfc3BsaXQgKGZyYW1lX2RhdGFfbmIsIHNpemVvZiAoZnJhbWVfZGF0YV9uYikpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfbmJfc2tpcF9nYXJiYWdlKQotewotICBnc3RfcGFyc2VyX3Rlc3Rfc2tpcF9nYXJiYWdlIChmcmFtZV9kYXRhX25iLCBzaXplb2YgKGZyYW1lX2RhdGFfbmIpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9uYl9kZXRlY3Rfc3RyZWFtKQotewotICBHc3RQYXJzZXJUZXN0IHB0ZXN0OwotICBHc3RDYXBzICpvbGRfY3R4X2NhcHM7Ci0KLSAgLyogbm8gaW5wdXQgY2Fwcywgb3ZlcnJpZGUgY3R4ICovCi0gIG9sZF9jdHhfY2FwcyA9IGN0eF9pbnB1dF9jYXBzOwotICBjdHhfaW5wdXRfY2FwcyA9IE5VTEw7Ci0KLSAgLyogQU1SLU5CIGhlYWRlciAqLwotICBnc3RfcGFyc2VyX3Rlc3RfaW5pdCAoJnB0ZXN0LCBmcmFtZV9oZHJfbmIsIHNpemVvZiAoZnJhbWVfaGRyX25iKSwgMSk7Ci0gIC8qIHdlbGwsIG5vIGdhcmJhZ2UsIGZvbGxvd2VkIGJ5IHJlYWwgZGF0YSAqLwotICBwdGVzdC5zZXJpZXNbMl0uZGF0YSA9IGZyYW1lX2RhdGFfbmI7Ci0gIHB0ZXN0LnNlcmllc1syXS5zaXplID0gc2l6ZW9mIChmcmFtZV9kYXRhX25iKTsKLSAgcHRlc3Quc2VyaWVzWzJdLm51bSA9IDEwOwotICAvKiBoZWFkZXIgZ2V0cyBkcm9wcGVkLCBzbyAuLi4gKi8KLSAgLyogYnVmZmVyIGNvdW50IHdpbGwgbm90IG1hdGNoICovCi0gIHB0ZXN0LmZyYW1lZCA9IEZBTFNFOwotICAvKiB0b3RhbCBzaXplIGEgYml0IGxlc3MgKi8KLSAgcHRlc3QuZHJvcHBlZCA9IHNpemVvZiAoZnJhbWVfaGRyX25iKTsKLQotICAvKiBDaGVjayB0aGF0IHRoZSBuZWdvdGlhdGVkIGNhcHMgYXJlIGFzIGV4cGVjdGVkICovCi0gIHB0ZXN0LnNpbmtfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChTSU5LX0NBUFNfTkIpOwotCi0gIGdzdF9wYXJzZXJfdGVzdF9ydW4gKCZwdGVzdCwgTlVMTCk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHB0ZXN0LnNpbmtfY2Fwcyk7Ci0KLSAgY3R4X2lucHV0X2NhcHMgPSBvbGRfY3R4X2NhcHM7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV93Yl9ub3JtYWwpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9ub3JtYWwgKGZyYW1lX2RhdGFfd2IsIHNpemVvZiAoZnJhbWVfZGF0YV93YikpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2Vfd2JfZHJhaW5fc2luZ2xlKQotewotICBnc3RfcGFyc2VyX3Rlc3RfZHJhaW5fc2luZ2xlIChmcmFtZV9kYXRhX3diLCBzaXplb2YgKGZyYW1lX2RhdGFfd2IpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX3diX2RyYWluX2dhcmJhZ2UpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9kcmFpbl9nYXJiYWdlIChmcmFtZV9kYXRhX3diLCBzaXplb2YgKGZyYW1lX2RhdGFfd2IpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV93Yl9zcGxpdCkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X3NwbGl0IChmcmFtZV9kYXRhX3diLCBzaXplb2YgKGZyYW1lX2RhdGFfd2IpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX3diX3NraXBfZ2FyYmFnZSkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X3NraXBfZ2FyYmFnZSAoZnJhbWVfZGF0YV93Yiwgc2l6ZW9mIChmcmFtZV9kYXRhX3diKSwKLSAgICAgIGdhcmJhZ2VfZnJhbWUsIHNpemVvZiAoZ2FyYmFnZV9mcmFtZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2Vfd2JfZGV0ZWN0X3N0cmVhbSkKLXsKLSAgR3N0UGFyc2VyVGVzdCBwdGVzdDsKLSAgR3N0Q2FwcyAqb2xkX2N0eF9jYXBzOwotCi0gIC8qIG5vIGlucHV0IGNhcHMsIG92ZXJyaWRlIGN0eCAqLwotICBvbGRfY3R4X2NhcHMgPSBjdHhfaW5wdXRfY2FwczsKLSAgY3R4X2lucHV0X2NhcHMgPSBOVUxMOwotCi0gIC8qIEFNUi1XQiBoZWFkZXIgKi8KLSAgZ3N0X3BhcnNlcl90ZXN0X2luaXQgKCZwdGVzdCwgZnJhbWVfaGRyX3diLCBzaXplb2YgKGZyYW1lX2hkcl93YiksIDEpOwotICAvKiB3ZWxsLCBubyBnYXJiYWdlLCBmb2xsb3dlZCBieSByZWFsIGRhdGEgKi8KLSAgcHRlc3Quc2VyaWVzWzJdLmRhdGEgPSBmcmFtZV9kYXRhX3diOwotICBwdGVzdC5zZXJpZXNbMl0uc2l6ZSA9IHNpemVvZiAoZnJhbWVfZGF0YV93Yik7Ci0gIHB0ZXN0LnNlcmllc1syXS5udW0gPSAxMDsKLSAgLyogaGVhZGVyIGdldHMgZHJvcHBlZCwgc28gLi4uICovCi0gIC8qIGJ1ZmZlciBjb3VudCB3aWxsIG5vdCBtYXRjaCAqLwotICBwdGVzdC5mcmFtZWQgPSBGQUxTRTsKLSAgLyogdG90YWwgc2l6ZSBhIGJpdCBsZXNzICovCi0gIHB0ZXN0LmRyb3BwZWQgPSBzaXplb2YgKGZyYW1lX2hkcl93Yik7Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgbmVnb3RpYXRlZCBjYXBzIGFyZSBhcyBleHBlY3RlZCAqLwotICBwdGVzdC5zaW5rX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoU0lOS19DQVBTX1dCKTsKLQotICBnc3RfcGFyc2VyX3Rlc3RfcnVuICgmcHRlc3QsIE5VTEwpOwotCi0gIGdzdF9jYXBzX3VucmVmIChwdGVzdC5zaW5rX2NhcHMpOwotCi0gIGN0eF9pbnB1dF9jYXBzID0gb2xkX2N0eF9jYXBzOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qCi0gKiBUT0RPOgotICogICAtIEJvdGggcHVzaC0gYW5kIHB1bGwtbW9kZXMgbmVlZCB0byBiZSB0ZXN0ZWQKLSAqICAgICAgKiBQdWxsLW1vZGUgJiBFT1MKLSAqLwotCi0jaWYgMAotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIGludCBuZjsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBTdWl0ZSAqcyA9IGFtcm5iX3BhcnNlX3N1aXRlICgpOwotICBTUnVubmVyICpzciA9IHNydW5uZXJfY3JlYXRlIChzKTsKLQotICBnc3RfY2hlY2tfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBpbml0IHRlc3QgY29udGV4dCAqLwotCi0gIHNydW5uZXJfcnVuX2FsbCAoc3IsIENLX05PUk1BTCk7Ci0gIG5mID0gc3J1bm5lcl9udGVzdHNfZmFpbGVkIChzcik7Ci0gIHNydW5uZXJfZnJlZSAoc3IpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgcyA9IGFtcndiX3BhcnNlX3N1aXRlICgpOwotICBzciA9IHNydW5uZXJfY3JlYXRlIChzKTsKLQotICBzcnVubmVyX3J1bl9hbGwgKHNyLCBDS19OT1JNQUwpOwotICBuZiArPSBzcnVubmVyX250ZXN0c19mYWlsZWQgKHNyKTsKLSAgc3J1bm5lcl9mcmVlIChzcik7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICByZXR1cm4gbmY7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFN1aXRlICoKLWFtcnBhcnNlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImFtcnBhcnNlIik7Ci0gIFRDYXNlICp0Y19jaGFpbjsKLQotICAvKiBBTVItTkIgdGVzdHMgKi8KLSAgdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJhbXJuYiIpOwotICB0Y2FzZV9hZGRfY2hlY2tlZF9maXh0dXJlICh0Y19jaGFpbiwgc2V0dXBfYW1ybmIsIHRlYXJkb3duKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX25iX25vcm1hbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9uYl9kcmFpbl9zaW5nbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfbmJfZHJhaW5fZ2FyYmFnZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9uYl9zcGxpdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9uYl9kZXRlY3Rfc3RyZWFtKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX25iX3NraXBfZ2FyYmFnZSk7Ci0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIC8qIEFNUi1XQiB0ZXN0cyAqLwotICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImFtcndiIik7Ci0gIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCBzZXR1cF9hbXJ3YiwgdGVhcmRvd24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2Vfd2Jfbm9ybWFsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX3diX2RyYWluX3NpbmdsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV93Yl9kcmFpbl9nYXJiYWdlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX3diX3NwbGl0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX3diX2RldGVjdF9zdHJlYW0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2Vfd2Jfc2tpcF9nYXJiYWdlKTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChhbXJwYXJzZSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FwZXYybXV4LmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hcGV2Mm11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjE5MDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FwZXYybXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciB0aGUgdGFnbGliLWJhc2VkIGFwZXYybXV4IGVsZW1lbnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBURVNUX0FSVElTVCAgICAgICAgICAgIkFyIFRcMzAzXDI1NXN0IgotI2RlZmluZSBURVNUX1RJVExFICAgICAgICAgICAgIk1cMzAzXDI3NGxsZXJtaWxjaCEiCi0jZGVmaW5lIFRFU1RfQUxCVU0gICAgICAgICAgICAiQm9vbSIKLSNkZWZpbmUgVEVTVF9EQVRFICAgICAgICAgICAgIGdfZGF0ZV9uZXdfZG15KDEsMSwyMDA2KQotI2RlZmluZSBURVNUX1RSQUNLX05VTUJFUiAgICAgNwotI2RlZmluZSBURVNUX1RSQUNLX0NPVU5UICAgICAgMTkKLSNkZWZpbmUgVEVTVF9UUkFDS19HQUlOICAgICAgIDEuNDUKLSNkZWZpbmUgVEVTVF9BTEJVTV9HQUlOICAgICAgIDAuNzgKLQotLyogZm9yIGR1bW15IG1wMyBmcmFtZSBzaXplZCBNUDNfRlJBTUVfU0laRSBieXRlcywKLSAqIHN0YXJ0OiBmZiBmYiBiMCA0NCAwMCAwMCAwOCAwMCAgMDAgNGIgMDAgMDAgMDAgMDAgMDAgMDAgKi8KLXN0YXRpYyBjb25zdCBndWludDggbXAzX2R1bW15aGRyW10gPSB7IDB4ZmYsIDB4ZmIsIDB4YjAsIDB4NDQsIDB4MDAsIDB4MDAsCi0gIDB4MDgsIDB4MDAsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAKLX07Ci0KLSNkZWZpbmUgTVAzX0ZSQU1FX1NJWkUgNjI2Ci0KLXN0YXRpYyBHc3RUYWdMaXN0ICoKLXRlc3RfdGFnbGliX2FwZXYybXV4X2NyZWF0ZV90YWdzIChndWludDMyIG1hc2spCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0KLSAgaWYgKG1hc2sgJiAoMSA8PCAwKSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19BUlRJU1QsIFRFU1RfQVJUSVNULCBOVUxMKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDEpKSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9LRUVQLAotICAgICAgICBHU1RfVEFHX1RJVExFLCBURVNUX1RJVExFLCBOVUxMKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDIpKSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9LRUVQLAotICAgICAgICBHU1RfVEFHX0FMQlVNLCBURVNUX0FMQlVNLCBOVUxMKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDMpKSB7Ci0gICAgR0RhdGUgKmRhdGU7Ci0KLSAgICBkYXRlID0gVEVTVF9EQVRFOwotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwgR1NUX1RBR19EQVRFLCBkYXRlLCBOVUxMKTsKLSAgICBnX2RhdGVfZnJlZSAoZGF0ZSk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA0KSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19UUkFDS19OVU1CRVIsIFRFU1RfVFJBQ0tfTlVNQkVSLCBOVUxMKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDUpKSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9LRUVQLAotICAgICAgICBHU1RfVEFHX1RSQUNLX0NPVU5ULCBURVNUX1RSQUNLX0NPVU5ULCBOVUxMKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDYpKSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9LRUVQLAotICAgICAgICBHU1RfVEFHX1RSQUNLX0dBSU4sIFRFU1RfVFJBQ0tfR0FJTiwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA3KSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19BTEJVTV9HQUlOLCBURVNUX0FMQlVNX0dBSU4sIE5VTEwpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgOCkpIHsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDkpKSB7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMCkpIHsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDExKSkgewotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMTIpKSB7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMykpIHsKLSAgfQotICByZXR1cm4gdGFnczsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfdGFnbGliX2FwZXYybXV4X2NoZWNrX3RhZ3MgKEdzdFRhZ0xpc3QgKiB0YWdzLCBndWludDMyIG1hc2spCi17Ci0gIGlmIChtYXNrICYgKDEgPDwgMCkpIHsKLSAgICBnY2hhciAqcyA9IE5VTEw7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfQVJUSVNULCAmcykpOwotICAgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAocywgVEVTVF9BUlRJU1QpKTsKLSAgICBnX2ZyZWUgKHMpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMSkpIHsKLSAgICBnY2hhciAqcyA9IE5VTEw7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZzKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChzLCBURVNUX1RJVExFKSk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDIpKSB7Ci0gICAgZ2NoYXIgKnMgPSBOVUxMOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX0FMQlVNLCAmcykpOwotICAgIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAocywgVEVTVF9BTEJVTSkpOwotICAgIGdfZnJlZSAocyk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAzKSkgewotICAgIEdEYXRlICpzaG91bGRiZSwgKmRhdGUgPSBOVUxMOwotCi0gICAgc2hvdWxkYmUgPSBURVNUX0RBVEU7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZGF0ZSAodGFncywgR1NUX1RBR19EQVRFLCAmZGF0ZSkpOwotICAgIGZhaWxfdW5sZXNzIChnX2RhdGVfY29tcGFyZSAoc2hvdWxkYmUsIGRhdGUpID09IDApOwotICAgIGdfZGF0ZV9mcmVlIChzaG91bGRiZSk7Ci0gICAgZ19kYXRlX2ZyZWUgKGRhdGUpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgNCkpIHsKLSAgICBndWludCBudW07Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX1RSQUNLX05VTUJFUiwgJm51bSkpOwotICAgIGZhaWxfdW5sZXNzIChudW0gPT0gVEVTVF9UUkFDS19OVU1CRVIpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgNSkpIHsKLSAgICBndWludCBjb3VudDsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHRhZ3MsIEdTVF9UQUdfVFJBQ0tfQ09VTlQsICZjb3VudCkpOwotICAgIGZhaWxfdW5sZXNzIChjb3VudCA9PSBURVNUX1RSQUNLX0NPVU5UKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDYpKSB7Ci0gICAgZ2RvdWJsZSBnYWluOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdzLCBHU1RfVEFHX1RSQUNLX0dBSU4sICZnYWluKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdhaW4gPT0gVEVTVF9UUkFDS19HQUlOKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDcpKSB7Ci0gICAgZ2RvdWJsZSBnYWluOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdzLCBHU1RfVEFHX0FMQlVNX0dBSU4sICZnYWluKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdhaW4gPT0gVEVTVF9BTEJVTV9HQUlOKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDgpKSB7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA5KSkgewotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMTApKSB7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMSkpIHsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDEyKSkgewotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMTMpKSB7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLWZpbGxfbXAzX2J1ZmZlciAoR3N0RWxlbWVudCAqIGZha2VzcmMsIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0UGFkICogcGFkLAotICAgIGd1aW50NjQgKiBwX29mZnNldCkKLXsKLSAgZ3NpemUgc2l6ZTsKLQotICBzaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKTsKLQotICBmYWlsX3VubGVzcyAoc2l6ZSA9PSBNUDNfRlJBTUVfU0laRSk7Ci0KLSAgR1NUX0xPRyAoImZpbGxpbmcgYnVmZmVyIHdpdGggZmFrZSBtcDMgZGF0YSwgb2Zmc2V0ID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwKLSAgICAgICpwX29mZnNldCk7Ci0KLSAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIG1wM19kdW1teWhkciwgc2l6ZW9mIChtcDNfZHVtbXloZHIpKTsKLQotI2lmIDAKLSAgLyogY2FuJ3QgdXNlIGdzdF9idWZmZXJfc2V0X2NhcHMoKSBoZXJlIGJlY2F1c2UgdGhlIG1ldGFkYXRhIGlzbid0IHdyaXRhYmxlCi0gICAqIGJlY2F1c2Ugb2YgdGhlIGV4dHJhIHJlZmNvdW50cyB0YWtlbiBieSB0aGUgc2lnbmFsIGVtaXNzaW9uIG1lY2hhbmlzbTsKLSAgICogd2Uga25vdyBpdCdzIGZpbmUgdG8gdXNlIEdTVF9CVUZGRVJfQ0FQUygpIGhlcmUgdGhvdWdoICovCi0gIEdTVF9CVUZGRVJfQ0FQUyAoYnVmKSA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby9tcGVnIiwgIm1wZWd2ZXJzaW9uIiwKLSAgICAgIEdfVFlQRV9JTlQsIDEsICJsYXllciIsIEdfVFlQRV9JTlQsIDMsIE5VTEwpOwotI2VuZGlmCi0KLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikgPSAqcF9vZmZzZXQ7Ci0gICpwX29mZnNldCArPSBzaXplOwotfQotCi1zdGF0aWMgdm9pZAotZ290X2J1ZmZlciAoR3N0RWxlbWVudCAqIGZha2VzaW5rLCBHc3RCdWZmZXIgKiBidWYsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiogcF9idWYpCi17Ci0gIGdpbnQ2NCBvZmY7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIG9mZiA9IEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgR1NUX0xPRyAoInNpemU9JSIgR19HU0laRV9GT1JNQVQgIiwgb2Zmc2V0PSUiIEdfR0lOVDY0X0ZPUk1BVCwgbWFwLnNpemUsIG9mZik7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfT0ZGU0VUX0lTX1ZBTElEIChidWYpKTsKLQotICBpZiAoKnBfYnVmID09IE5VTEwgfHwgKG9mZiArIG1hcC5zaXplKSA+IGdzdF9idWZmZXJfZ2V0X3NpemUgKCpwX2J1ZikpIHsKLSAgICBHc3RCdWZmZXIgKm5ld2J1ZjsKLQotICAgIC8qIG5vdCB2ZXJ5IGVsZWdhbnQsIGJ1dCB3aG8gY2FyZXMgKi8KLSAgICBuZXdidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG9mZiArIG1hcC5zaXplKTsKLSAgICBpZiAoKnBfYnVmKSB7Ci0gICAgICBHc3RNYXBJbmZvIHBtYXA7Ci0KLSAgICAgIGdzdF9idWZmZXJfbWFwICgqcF9idWYsICZwbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgZ3N0X2J1ZmZlcl9maWxsIChuZXdidWYsIDAsIHBtYXAuZGF0YSwgcG1hcC5zaXplKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKCpwX2J1ZiwgJnBtYXApOwotICAgIH0KLSAgICBnc3RfYnVmZmVyX2ZpbGwgKG5ld2J1Ziwgb2ZmLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICAgIGlmICgqcF9idWYpCi0gICAgICBnc3RfYnVmZmVyX3VucmVmICgqcF9idWYpOwotICAgICpwX2J1ZiA9IG5ld2J1ZjsKLSAgfSBlbHNlIHsKLSAgICBnc3RfYnVmZmVyX2ZpbGwgKCpwX2J1Ziwgb2ZmLCBtYXAuZGF0YSwgbWFwLnNpemUpOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3RhZ2xpYl9hcGV2Mm11eF9jaGVja19vdXRwdXRfYnVmZmVyIChHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludCBvZmY7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZ19hc3NlcnQgKG1hcC5zaXplICUgTVAzX0ZSQU1FX1NJWkUgPT0gMCk7Ci0KLSAgZm9yIChvZmYgPSAwOyBvZmYgPCBtYXAuc2l6ZTsgb2ZmICs9IE1QM19GUkFNRV9TSVpFKSB7Ci0gICAgZmFpbF91bmxlc3MgKG1lbWNtcCAobWFwLmRhdGEgKyBvZmYsIG1wM19kdW1teWhkciwKLSAgICAgICAgICAgIHNpemVvZiAobXAzX2R1bW15aGRyKSkgPT0gMCk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfdGFnbGliX2FwZXYybXV4X3dpdGhfdGFncyAoR3N0VGFnTGlzdCAqIHRhZ3MsIGd1aW50MzIgbWFzaykKLXsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3RUYWdMaXN0ICp0YWdzX3JlYWQgPSBOVUxMOwotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKmFwZXYybXV4LCAqYXBlZGVtdXgsICpmYWtlc3JjLCAqZmFrZXNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBndWludDY0IG9mZnNldDsKLSAgR3N0QnVmZmVyICpvdXRidWYgPSBOVUxMOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSAhPSBOVUxMKTsKLQotICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7Ci0gIGdfYXNzZXJ0IChmYWtlc3JjICE9IE5VTEwpOwotCi0gIGFwZXYybXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXBldjJtdXgiLCAiYXBldjJtdXgiKTsKLSAgZ19hc3NlcnQgKGFwZXYybXV4ICE9IE5VTEwpOwotCi0gIGFwZWRlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXBlZGVtdXgiLCAiYXBlZGVtdXgiKTsKLSAgZ19hc3NlcnQgKGFwZWRlbXV4ICE9IE5VTEwpOwotCi0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKLSAgZ19hc3NlcnQgKGZha2VzaW5rICE9IE5VTEwpOwotCi0gIC8qIHNldCB1cCBzaW5rICovCi0gIG91dGJ1ZiA9IE5VTEw7Ci0gIGdfb2JqZWN0X3NldCAoZmFrZXNpbmssICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoZmFrZXNpbmssICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoZ290X2J1ZmZlciksICZvdXRidWYpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGZha2VzcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBhcGV2Mm11eCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGFwZWRlbXV4KTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNpbmspOwotCi0gIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKEdTVF9UQUdfU0VUVEVSIChhcGV2Mm11eCksIHRhZ3MsCi0gICAgICBHU1RfVEFHX01FUkdFX0FQUEVORCk7Ci0KLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChmYWtlc3JjLCBhcGV2Mm11eCwgYXBlZGVtdXgsIGZha2VzaW5rLCBOVUxMKTsKLQotICAvKiBzZXQgdXAgc291cmNlICovCi0gIGdfb2JqZWN0X3NldCAoZmFrZXNyYywgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsICJjYW4tYWN0aXZhdGUtcHVsbCIsIEZBTFNFLAotICAgICAgImZpbGx0eXBlIiwgMiwgInNpemV0eXBlIiwgMiwgInNpemVtYXgiLCBNUDNfRlJBTUVfU0laRSwKLSAgICAgICJudW0tYnVmZmVycyIsIDE2LCBOVUxMKTsKLQotICBvZmZzZXQgPSAwOwotICBnX3NpZ25hbF9jb25uZWN0IChmYWtlc3JjLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKGZpbGxfbXAzX2J1ZmZlciksICZvZmZzZXQpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgLTEpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLQotICBHU1RfTE9HICgiV2FpdGluZyBmb3IgdGFnIC4uLiIpOwotICBtc2cgPQotICAgICAgZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1RBRyB8IEdTVF9NRVNTQUdFX0VPUyB8IEdTVF9NRVNTQUdFX0VSUk9SLAotICAgICAgLTEpOwotICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUikgewotICAgIEdFcnJvciAqZXJyOwotICAgIGdjaGFyICpkYmc7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCAmZGJnKTsKLSAgICBnX3ByaW50ZXJyICgiRVJST1IgZnJvbSBlbGVtZW50ICVzOiAlc1xuJXNcbiIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAobXNnLT5zcmMpLCBlcnItPm1lc3NhZ2UsIEdTVF9TVFJfTlVMTCAoZGJnKSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgIGdfZnJlZSAoZGJnKTsKLSAgfSBlbHNlIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUykgewotICAgIGdfcHJpbnRlcnIgKCJFT1MgbWVzc2FnZSwgYnV0IHdlcmUgd2FpdGluZyBmb3IgVEFHUyFcbiIpOwotICB9Ci0gIGZhaWxfdW5sZXNzIChtc2ctPnR5cGUgPT0gR1NUX01FU1NBR0VfVEFHKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1zZywgJnRhZ3NfcmVhZCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIEdTVF9MT0cgKCJHb3QgdGFnczogJSIgR1NUX1BUUl9GT1JNQVQsIHRhZ3NfcmVhZCk7Ci0gIHRlc3RfdGFnbGliX2FwZXYybXV4X2NoZWNrX3RhZ3MgKHRhZ3NfcmVhZCwgbWFzayk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnc19yZWFkKTsKLQotICBHU1RfTE9HICgiV2FpdGluZyBmb3IgRU9TIC4uLiIpOwotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICBHRXJyb3IgKmVycjsKLSAgICBnY2hhciAqZGJnOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgZ19wcmludGVyciAoIkVSUk9SIGZyb20gZWxlbWVudCAlczogJXNcbiVzXG4iLAotICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1zZy0+c3JjKSwgZXJyLT5tZXNzYWdlLCBHU1RfU1RSX05VTEwgKGRiZykpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICBnX2ZyZWUgKGRiZyk7Ci0gIH0KLSAgZmFpbF91bmxlc3MgKG1zZy0+dHlwZSA9PSBHU1RfTUVTU0FHRV9FT1MpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIEdTVF9MT0cgKCJHb3QgRU9TLCBzaHV0dGluZyBkb3duIC4uLiIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICB0ZXN0X3RhZ2xpYl9hcGV2Mm11eF9jaGVja19vdXRwdXRfYnVmZmVyIChvdXRidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOwotCi0gIEdTVF9MT0cgKCJEb25lIik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FwZXYybXV4KQotewotICBHc3RUYWdMaXN0ICp0YWdzOwotICBnaW50IGk7Ci0KLSAgZ19yYW5kb21fc2V0X3NlZWQgKDI0NzE2NjI5NSk7Ci0KLSAgLyogaW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2sgKi8KLSAgdGFncyA9IHRlc3RfdGFnbGliX2FwZXYybXV4X2NyZWF0ZV90YWdzICgweEZGRkZGRkZGKTsKLSAgdGVzdF90YWdsaWJfYXBldjJtdXhfY2hlY2tfdGFncyAodGFncywgMHhGRkZGRkZGRik7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0KLSAgLyogbm93IHRoZSByZWFsIHRlc3RzICovCi0gIGZvciAoaSA9IDA7IGkgPCA1MDsgKytpKSB7Ci0gICAgZ3VpbnQzMiBtYXNrOwotCi0gICAgbWFzayA9IGdfcmFuZG9tX2ludCAoKTsKLSAgICBHU1RfTE9HICgidGFnIG1hc2sgPSAlMDh4IChpPSVkKSIsIG1hc2ssIGkpOwotCi0gICAgaWYgKG1hc2sgPT0gMCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgLyogY3JlYXRlIHRhZ3MgKi8KLSAgICB0YWdzID0gdGVzdF90YWdsaWJfYXBldjJtdXhfY3JlYXRlX3RhZ3MgKG1hc2spOwotICAgIEdTVF9MT0cgKCJ0YWdzIGZvciBtYXNrICUwOHggPSAlIiBHU1RfUFRSX0ZPUk1BVCwgbWFzaywgdGFncyk7Ci0KLSAgICAvKiBkb3VibGUtY2hlY2sgZm9yIGludGVybmFsIGNvbnNpc3RlbmN5ICovCi0gICAgdGVzdF90YWdsaWJfYXBldjJtdXhfY2hlY2tfdGFncyAodGFncywgbWFzayk7Ci0KLSAgICAvKiB0ZXN0IHdpdGggcGlwZWxpbmUgKi8KLSAgICB0ZXN0X3RhZ2xpYl9hcGV2Mm11eF93aXRoX3RhZ3MgKHRhZ3MsIG1hc2spOwotCi0gICAgLyogZnJlZSB0YWdzICovCi0gICAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1hcGV2Mm11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhcGV2Mm11eCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hcGV2Mm11eCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChhcGV2Mm11eCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hc3BlY3RyYXRpb2Nyb3AuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q2ZmI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2FzcGVjdHJhdGlvY3JvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3QgZm9yIHRoZSBhc3BlY3RyYXRpb2Nyb3AgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2RlZmluZSBBU1BFQ1RfUkFUSU9fQ1JPUF9DQVBTICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR1NUX1ZJREVPX0NBUFNfTUFLRSAoInsgUkdCeCwgeFJHQiwgQkdSeCwgeEJHUiwgIiBcCi0gICAgICAiUkdCQSwgQVJHQiwgQkdSQSwgQUJHUiwgUkdCLCBCR1IsIEFZVVYsICIgICAgXAotICAgICAgIllVWTIsIFlWWVUsIFVZVlksIEdSQVk4LCBJNDIwLCBZVjEyLCBSR0IxNiwgIiBcCi0gICAgICAiUkdCMTUgfSIpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEFTUEVDVF9SQVRJT19DUk9QX0NBUFMpCi0gICAgKTsKLQotc3RhdGljIHZvaWQKLWNoZWNrX2FzcGVjdHJhdGlvY3JvcCAoY29uc3QgZ2NoYXIgKiBpbl9zdHJpbmcsIGNvbnN0IGdjaGFyICogb3V0X3N0cmluZywKLSAgICBnaW50IGluX3NpemUsIGdpbnQgb3V0X3NpemUsIGdpbnQgYXJfbiwgZ2ludCBhcl9kKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RQYWQgKnBhZF9wZWVyOwotICBHc3RQYWQgKnNpbmtfcGFkID0gTlVMTDsKLSAgR3N0UGFkICpzcmNfcGFkOwotICBHc3RCdWZmZXIgKm5ldzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyX291dDsKLSAgR3N0Q2FwcyAqaW5jYXBzOwotICBHc3RDYXBzICpvdXRjYXBzOwotCi0gIGluY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChpbl9zdHJpbmcpOwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKGluX3NpemUpOwotICBvdXRjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKG91dF9zdHJpbmcpOwotICBidWZmZXJfb3V0ID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChvdXRfc2l6ZSk7Ci0KLSAgLyogY2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gYnVmZmVycyB3YWl0aW5nICovCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0KLSAgLyogY3JlYXRlIHRoZSBlbGVtZW50ICovCi0gIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImFzcGVjdHJhdGlvY3JvcCIpOwotCi0gIC8qIHNldCB0aGUgcmVxdWVzdGVkIGFzcGVjdCByYXRpbyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgImFzcGVjdC1yYXRpbyIsIGFyX24sIGFyX2QsIE5VTEwpOwotCi0gIC8qIGNyZWF0ZSB0aGUgc3JjIHBhZCAqLwotICBzcmNfcGFkID0gZ3N0X3BhZF9uZXcgKE5VTEwsIEdTVF9QQURfU1JDKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNfcGFkLCBUUlVFKTsKLSAgR1NUX0RFQlVHICgic2V0dGluZyBjYXBzICVzICUiIEdTVF9QVFJfRk9STUFULCBpbl9zdHJpbmcsIGluY2Fwcyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKHNyY19wYWQsIGVsZW1lbnQsIGluY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBwYWRfcGVlciA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAic2luayIpOwotICBmYWlsX2lmIChwYWRfcGVlciA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjX3BhZCwgcGFkX3BlZXIpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgICJDb3VsZCBub3QgbGluayBzb3VyY2UgYW5kICVzIHNpbmsgcGFkcyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOwotCi0gIC8qIGNyZWF0ZSB0aGUgc2luayBwYWQgKi8KLSAgcGFkX3BlZXIgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgInNyYyIpOwotICBzaW5rX3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChwYWRfcGVlciwgc2lua19wYWQpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgICJDb3VsZCBub3QgbGluayBzaW5rIGFuZCAlcyBzb3VyY2UgcGFkcyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkX3BlZXIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoc2lua19wYWQsIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rX3BhZCwgVFJVRSk7Ci0KLSAgLyogY29uZmlndXJlIHRoZSBzaW5rIHBhZCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjX3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSywKLSAgICAgICJGYWlsZWQgdG8gcHVzaCBidWZmZXIiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0KLSAgLyogY2hlY2sgdGhlIHJlc3VsdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSk7Ci0gIG5ldyA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOwotICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgbmV3KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcl9vdXQpID09IGdzdF9idWZmZXJfZ2V0X3NpemUgKG5ldyksCi0gICAgICAic2l6ZSBvZiB0aGUgYnVmZmVycyBhcmUgbm90IHRoZSBzYW1lIik7Ci0gIHsKLSAgICBHc3RDYXBzICpzaW5rcGFkX2NhcHM7Ci0KLSAgICBzaW5rcGFkX2NhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHNpbmtfcGFkKTsKLQotICAgIGdzdF9jaGVja19jYXBzX2VxdWFsIChzaW5rcGFkX2NhcHMsIG91dGNhcHMpOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHNpbmtwYWRfY2Fwcyk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAobmV3KTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyX291dCk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGluY2Fwcyk7Ci0KLSAgLyogdGVhcmRvd24gdGhlIGVsZW1lbnQgYW5kIHBhZHMgKi8KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNfcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChlbGVtZW50KTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rX3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGVsZW1lbnQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZWxlbWVudCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vX2Nyb3BwaW5nKQotewotICBjaGVja19hc3BlY3RyYXRpb2Nyb3AKLSAgICAgICgidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlVWTIsIHdpZHRoPShpbnQpMzIwLCBoZWlnaHQ9KGludCkyNDAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlVWTIsIHdpZHRoPShpbnQpMzIwLCBoZWlnaHQ9KGludCkyNDAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSIsCi0gICAgICAxNTM2MDAsIDE1MzYwMCwgNCwgMyk7Ci0gIGNoZWNrX2FzcGVjdHJhdGlvY3JvcAotICAgICAgKCJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVVZMiwgd2lkdGg9KGludCkzMjAsIGhlaWdodD0oaW50KTMyMCwgZnJhbWVyYXRlPShmcmFjdGlvbikzMC8xLCBwaXhlbC1hc3BlY3QtcmF0aW89KGZyYWN0aW9uKTQvMyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlVWTIsIHdpZHRoPShpbnQpMzIwLCBoZWlnaHQ9KGludCkzMjAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSwgcGl4ZWwtYXNwZWN0LXJhdGlvPShmcmFjdGlvbik0LzMiLAotICAgICAgMjA0ODAwLCAyMDQ4MDAsIDQsIDMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1dG9jcm9wcGluZykKLXsKLSAgY2hlY2tfYXNwZWN0cmF0aW9jcm9wCi0gICAgICAoInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVVkyLCB3aWR0aD0oaW50KTMyMCwgaGVpZ2h0PShpbnQpMjQwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKTMwLzEsIHBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pNC8zIiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVVZMiwgd2lkdGg9KGludCkyNDAsIGhlaWdodD0oaW50KTI0MCwgZnJhbWVyYXRlPShmcmFjdGlvbikzMC8xLCBwaXhlbC1hc3BlY3QtcmF0aW89KGZyYWN0aW9uKTQvMyIsCi0gICAgICAxNTM2MDAsIDExNTIwMCwgNCwgMyk7Ci0KLSAgY2hlY2tfYXNwZWN0cmF0aW9jcm9wCi0gICAgICAoInZpZGVvL3gtcmF3LCBmb3JtYXQ9KHN0cmluZylZVVkyLCB3aWR0aD0oaW50KTMyMCwgaGVpZ2h0PShpbnQpMjQwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKTMwLzEsIHBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pMTYvOSIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKVlVWTIsIHdpZHRoPShpbnQpMTgwLCBoZWlnaHQ9KGludCkyNDAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSwgcGl4ZWwtYXNwZWN0LXJhdGlvPShmcmFjdGlvbikxNi85IiwKLSAgICAgIDE1MzYwMCwgODY0MDAsIDQsIDMpOwotCi0gIGNoZWNrX2FzcGVjdHJhdGlvY3JvcAotICAgICAgKCJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVVZMiwgd2lkdGg9KGludCkzMjAsIGhlaWdodD0oaW50KTI0MCwgZnJhbWVyYXRlPShmcmFjdGlvbikzMC8xLCBwaXhlbC1hc3BlY3QtcmF0aW89KGZyYWN0aW9uKTE2LzE1IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpWVVZMiwgd2lkdGg9KGludCkzMjAsIGhlaWdodD0oaW50KTE5MiwgZnJhbWVyYXRlPShmcmFjdGlvbikzMC8xLCBwaXhlbC1hc3BlY3QtcmF0aW89KGZyYWN0aW9uKTE2LzE1IiwKLSAgICAgIDE1MzYwMCwgMTIyODgwLCAxNiwgOSk7Ci0KLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotYXNwZWN0cmF0aW9jcm9wX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImFzcGVjdHJhdGlvY3JvcCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ub19jcm9wcGluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdXRvY3JvcHBpbmcpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoYXNwZWN0cmF0aW9jcm9wKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvYW1wbGlmeS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZTNjMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9hbXBsaWZ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBhdWRpb2FtcGxpZnkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIEdyZWF0bHkgYmFzZWQgb24gdGhlIGF1ZGlvcGFub3JhbWEgdW5pdCB0ZXN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotCi0jZGVmaW5lIEFNUExJRllfQ0FQU19TVFJJTkcgICAgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICAgICAgICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiAgICAgICAgICAgICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUoUzE2KQotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikpKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCAgTUFYIF0sICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoUzE2KSkpOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9hbXBsaWZ5ICh2b2lkKQotewotICBHc3RFbGVtZW50ICphbXBsaWZ5OwotCi0gIEdTVF9ERUJVRyAoInNldHVwX2FtcGxpZnkiKTsKLSAgYW1wbGlmeSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiYXVkaW9hbXBsaWZ5Iik7Ci0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKGFtcGxpZnksICZzcmN0ZW1wbGF0ZSk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoYW1wbGlmeSwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGFtcGxpZnk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX2FtcGxpZnkgKEdzdEVsZW1lbnQgKiBhbXBsaWZ5KQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2FtcGxpZnkiKTsKLQotICBnX2xpc3RfZm9yZWFjaCAoYnVmZmVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGFtcGxpZnkpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGFtcGxpZnkpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoYW1wbGlmeSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3Bhc3N0aHJvdWdoKQotewotICBHc3RFbGVtZW50ICphbXBsaWZ5OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bNl0gPSB7IDI0NTc2LCAtMTYzODQsIDI1NiwgLTEyOCwgMCwgLTI0NTc2IH07Ci0gIGdpbnQxNiByZXNbNl07Ci0KLSAgYW1wbGlmeSA9IHNldHVwX2FtcGxpZnkgKCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFtcGxpZnksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFNUExJRllfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYW1wbGlmeSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGluYnVmZmVyID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBpbiwgMTIsIDAsIDEyLAotICAgICAgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoaW5idWZmZXIsIDAsIGluLCAxMikgPT0gMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGJ1dCBpdCBlbmRzIHVwIGJlaW5nIGNvbGxlY3RlZCBvbiB0aGUgZ2xvYmFsIGJ1ZmZlciBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZXh0cmFjdCAob3V0YnVmZmVyLCAwLCByZXMsIDEyKSA9PSAxMik7Ci0gIEdTVF9JTkZPCi0gICAgICAoImV4cGVjdGVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkIHJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQiLAotICAgICAgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdLAotICAgICAgcmVzWzRdLCByZXNbNV0pOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgaW4sIDEyKSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYW1wbGlmeSAoYW1wbGlmeSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfemVybykKLXsKLSAgR3N0RWxlbWVudCAqYW1wbGlmeTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzZdID0geyAyNDU3NiwgLTE2Mzg0LCAyNTYsIC0xMjgsIDAsIC0yNDU3NiB9OwotICBnaW50MTYgb3V0WzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07Ci0gIGdpbnQxNiByZXNbNl07Ci0KLSAgYW1wbGlmeSA9IHNldHVwX2FtcGxpZnkgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGFtcGxpZnkpLCAiYW1wbGlmaWNhdGlvbiIsIDAuMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFtcGxpZnksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFNUExJRllfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYW1wbGlmeSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGluYnVmZmVyID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBpbiwgMTIsIDAsIDEyLAotICAgICAgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoaW5idWZmZXIsIDAsIGluLCAxMikgPT0gMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywgMTIpID09IDEyKTsKLSAgR1NUX0lORk8KLSAgICAgICgiZXhwZWN0ZWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgcmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIG91dFs0XSwgb3V0WzVdLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLAotICAgICAgcmVzWzNdLCByZXNbNF0sIHJlc1s1XSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAwLCBvdXQsIDEyKSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYW1wbGlmeSAoYW1wbGlmeSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMDUwX2NsaXApCi17Ci0gIEdzdEVsZW1lbnQgKmFtcGxpZnk7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdpbnQxNiBpbls2XSA9IHsgMjQ1NzYsIC0xNjM4NCwgMjU2LCAtMTI4LCAwLCAtMjQ1NzYgfTsKLSAgZ2ludDE2IG91dFs2XSA9IHsgMTIyODgsIC04MTkyLCAxMjgsIC02NCwgMCwgLTEyMjg4IH07Ci0gIGdpbnQxNiByZXNbNl07Ci0KLSAgYW1wbGlmeSA9IHNldHVwX2FtcGxpZnkgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGFtcGxpZnkpLCAiYW1wbGlmaWNhdGlvbiIsIDAuNSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFtcGxpZnksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFNUExJRllfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYW1wbGlmeSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGluYnVmZmVyID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBpbiwgMTIsIDAsIDEyLAotICAgICAgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoaW5idWZmZXIsIDAsIGluLCAxMikgPT0gMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywgMTIpID09IDEyKTsKLSAgR1NUX0lORk8KLSAgICAgICgiZXhwZWN0ZWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgcmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIG91dFs0XSwgb3V0WzVdLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLAotICAgICAgcmVzWzNdLCByZXNbNF0sIHJlc1s1XSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAwLCBvdXQsIDEyKSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYW1wbGlmeSAoYW1wbGlmeSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMjAwX2NsaXApCi17Ci0gIEdzdEVsZW1lbnQgKmFtcGxpZnk7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdpbnQxNiBpbls2XSA9IHsgMjQ1NzYsIC0xNjM4NCwgMjU2LCAtMTI4LCAwLCAtMjQ1NzYgfTsKLSAgZ2ludDE2IG91dFs2XSA9IHsgR19NQVhJTlQxNiwgLTMyNzY4LCA1MTIsIC0yNTYsIDAsIEdfTUlOSU5UMTYgfTsKLSAgZ2ludDE2IHJlc1s2XTsKLQotICBhbXBsaWZ5ID0gc2V0dXBfYW1wbGlmeSAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYW1wbGlmeSksICJhbXBsaWZpY2F0aW9uIiwgMi4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYW1wbGlmeSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQU1QTElGWV9DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhbXBsaWZ5LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaW5idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGluLCAxMiwgMCwgMTIsCi0gICAgICBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDEyKSA9PSAwKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dGJ1ZmZlciwgMCwgcmVzLCAxMikgPT0gMTIpOwotICBHU1RfSU5GTwotICAgICAgKCJleHBlY3RlZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCByZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkIiwKLSAgICAgIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSwgb3V0WzRdLCBvdXRbNV0sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sCi0gICAgICByZXNbM10sIHJlc1s0XSwgcmVzWzVdKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIG91dCwgMTIpID09IDApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hbXBsaWZ5IChhbXBsaWZ5KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8wNTBfd3JhcF9uZWdhdGl2ZSkKLXsKLSAgR3N0RWxlbWVudCAqYW1wbGlmeTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzZdID0geyAyNDU3NiwgLTE2Mzg0LCAyNTYsIC0xMjgsIDAsIC0yNDU3NiB9OwotICBnaW50MTYgb3V0WzZdID0geyAxMjI4OCwgLTgxOTIsIDEyOCwgLTY0LCAwLCAtMTIyODggfTsKLSAgZ2ludDE2IHJlc1s2XTsKLQotICBhbXBsaWZ5ID0gc2V0dXBfYW1wbGlmeSAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYW1wbGlmeSksICJhbXBsaWZpY2F0aW9uIiwgMC41LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYW1wbGlmeSksICJjbGlwcGluZy1tZXRob2QiLCAxLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYW1wbGlmeSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQU1QTElGWV9DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhbXBsaWZ5LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaW5idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGluLCAxMiwgMCwgMTIsCi0gICAgICBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDEyKSA9PSAwKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dGJ1ZmZlciwgMCwgcmVzLCAxMikgPT0gMTIpOwotICBHU1RfSU5GTwotICAgICAgKCJleHBlY3RlZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCByZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkIiwKLSAgICAgIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSwgb3V0WzRdLCBvdXRbNV0sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sCi0gICAgICByZXNbM10sIHJlc1s0XSwgcmVzWzVdKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIG91dCwgMTIpID09IDApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hbXBsaWZ5IChhbXBsaWZ5KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8yMDBfd3JhcF9uZWdhdGl2ZSkKLXsKLSAgR3N0RWxlbWVudCAqYW1wbGlmeTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzZdID0geyAyNDU3NiwgLTE2Mzg0LCAyNTYsIC0xMjgsIDAsIC0yNDU3NiB9OwotICBnaW50MTYgb3V0WzZdID0geyAtMTYzODQsIC0zMjc2OCwgNTEyLCAtMjU2LCAwLCAxNjM4NCB9OwotICBnaW50MTYgcmVzWzZdOwotCi0gIGFtcGxpZnkgPSBzZXR1cF9hbXBsaWZ5ICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhbXBsaWZ5KSwgImFtcGxpZmljYXRpb24iLCAyLjAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhbXBsaWZ5KSwgImNsaXBwaW5nLW1ldGhvZCIsIDEsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhbXBsaWZ5LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBTVBMSUZZX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGFtcGxpZnksIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBpbmJ1ZmZlciA9Ci0gICAgICBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwgaW4sIDEyLCAwLCAxMiwKLSAgICAgIE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgMTIpID09IDApOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZXh0cmFjdCAob3V0YnVmZmVyLCAwLCByZXMsIDEyKSA9PSAxMik7Ci0gIEdTVF9JTkZPCi0gICAgICAoImV4cGVjdGVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkIHJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQiLAotICAgICAgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdLCBvdXRbNF0sIG91dFs1XSwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwKLSAgICAgIHJlc1szXSwgcmVzWzRdLCByZXNbNV0pOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgb3V0LCAxMikgPT0gMCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2FtcGxpZnkgKGFtcGxpZnkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0XzA1MF93cmFwX3Bvc2l0aXZlKQotewotICBHc3RFbGVtZW50ICphbXBsaWZ5OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bNl0gPSB7IDI0NTc2LCAtMTYzODQsIDI1NiwgLTEyOCwgMCwgLTI0NTc2IH07Ci0gIGdpbnQxNiBvdXRbNl0gPSB7IDEyMjg4LCAtODE5MiwgMTI4LCAtNjQsIDAsIC0xMjI4OCB9OwotICBnaW50MTYgcmVzWzZdOwotCi0gIGFtcGxpZnkgPSBzZXR1cF9hbXBsaWZ5ICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhbXBsaWZ5KSwgImFtcGxpZmljYXRpb24iLCAwLjUsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhbXBsaWZ5KSwgImNsaXBwaW5nLW1ldGhvZCIsIDIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhbXBsaWZ5LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBTVBMSUZZX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGFtcGxpZnksIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBpbmJ1ZmZlciA9Ci0gICAgICBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwgaW4sIDEyLCAwLCAxMiwKLSAgICAgIE5VTEwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgMTIpID09IDApOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZXh0cmFjdCAob3V0YnVmZmVyLCAwLCByZXMsIDEyKSA9PSAxMik7Ci0gIEdTVF9JTkZPCi0gICAgICAoImV4cGVjdGVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkIHJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQiLAotICAgICAgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdLCBvdXRbNF0sIG91dFs1XSwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwKLSAgICAgIHJlc1szXSwgcmVzWzRdLCByZXNbNV0pOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgb3V0LCAxMikgPT0gMCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2FtcGxpZnkgKGFtcGxpZnkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0XzIwMF93cmFwX3Bvc2l0aXZlKQotewotICBHc3RFbGVtZW50ICphbXBsaWZ5OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bNl0gPSB7IDI0NTc2LCAtMTYzODQsIDI1NiwgLTEyOCwgMCwgLTI0NTc2IH07Ci0gIGdpbnQxNiBvdXRbNl0gPSB7IDE2MzgyLCAtMzI3NjgsIDUxMiwgLTI1NiwgMCwgLTE2Mzg0IH07Ci0gIGdpbnQxNiByZXNbNl07Ci0KLSAgYW1wbGlmeSA9IHNldHVwX2FtcGxpZnkgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGFtcGxpZnkpLCAiYW1wbGlmaWNhdGlvbiIsIDIuMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGFtcGxpZnkpLCAiY2xpcHBpbmctbWV0aG9kIiwgMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGFtcGxpZnksCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFNUExJRllfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYW1wbGlmeSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGluYnVmZmVyID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBpbiwgMTIsIDAsIDEyLAotICAgICAgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoaW5idWZmZXIsIDAsIGluLCAxMikgPT0gMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywgMTIpID09IDEyKTsKLSAgR1NUX0lORk8KLSAgICAgICgiZXhwZWN0ZWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgcmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIG91dFs0XSwgb3V0WzVdLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLAotICAgICAgcmVzWzNdLCByZXNbNF0sIHJlc1s1XSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAwLCBvdXQsIDEyKSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYW1wbGlmeSAoYW1wbGlmeSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWFtcGxpZnlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiYW1wbGlmeSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXNzdGhyb3VnaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF96ZXJvKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzA1MF9jbGlwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzIwMF9jbGlwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzA1MF93cmFwX25lZ2F0aXZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzIwMF93cmFwX25lZ2F0aXZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzA1MF93cmFwX3Bvc2l0aXZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzIwMF93cmFwX3Bvc2l0aXZlKTsKLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChhbXBsaWZ5KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmJhbmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYzNmUyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2NoZWJiYW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogYXVkaW9jaGViYmFuZC5jOiBVbml0IHRlc3QgZm9yIHRoZSBhdWRpb2NoZWJiYW5kIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotI2RlZmluZSBCVUZGRVJfQ0FQU19TVFJJTkdfMzIgICAgICAgICAgIFwKLSAgICAiYXVkaW8veC1yYXcsICIgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAsICIgICAgICAgICAgICAgIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FKEYzMikKLQotI2RlZmluZSBCVUZGRVJfQ0FQU19TVFJJTkdfNjQgICAgICAgICAgIFwKLSAgICAiYXVkaW8veC1yYXcsICIgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAsICIgICAgICAgICAgICAgIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FKEY2NCkKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgIgotICAgICAgICBHU1RfQVVESU9fTkUgKEYzMikgIiwgIiBHU1RfQVVESU9fTkUgKEY2NCkgIiB9IikpOwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIHsgIgotICAgICAgICBHU1RfQVVESU9fTkUgKEYzMikgIiwgIiBHU1RfQVVESU9fTkUgKEY2NCkgIiB9IikpOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9hdWRpb2NoZWJiYW5kICh2b2lkKQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX2F1ZGlvY2hlYmJhbmQiKTsKLSAgYXVkaW9jaGViYmFuZCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiYXVkaW9jaGViYmFuZCIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChhdWRpb2NoZWJiYW5kLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGF1ZGlvY2hlYmJhbmQsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBhdWRpb2NoZWJiYW5kOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9hdWRpb2NoZWJiYW5kIChHc3RFbGVtZW50ICogYXVkaW9jaGViYmFuZCkKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9hdWRpb2NoZWJiYW5kIik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChhdWRpb2NoZWJiYW5kKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChhdWRpb2NoZWJiYW5kKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIGVyYXNlZCB3aXRoIGJhbmRwYXNzIG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfMzJfYnBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCAwLjI1LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEwMjQuMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPD0gMC4xKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJiYW5kIChhdWRpb2NoZWJiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCBiYW5kIGNlbnRlciBpcyBwcmVzZXJ2ZWQgd2l0aCBiYW5kcGFzcyBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUxXzMyX2JwXzExMDI1aHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmJhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJiYW5kID0gc2V0dXBfYXVkaW9jaGViYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDI0ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSA0KSB7Ci0gICAgaW5baV0gPSAwLjA7Ci0gICAgaW5baSArIDFdID0gMS4wOwotICAgIGluW2kgKyAyXSA9IDAuMDsKLSAgICBpbltpICsgM10gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuNik7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIGVyYXNlZCB3aXRoIGJhbmRwYXNzIG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfMzJfYnBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ0eXBlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicmlwcGxlIiwgMC4yNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGViYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEwMjQgKiBzaXplb2YgKGdmbG9hdCksIE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBwcmVzZXJ2ZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfMzJfYnJfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDI0ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IGJhbmQgY2VudGVyIGlzIGVyYXNlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV8zMl9icl8xMTAyNWh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDI0ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSA0KSB7Ci0gICAgaW5baV0gPSAwLjA7Ci0gICAgaW5baSArIDFdID0gMS4wOwotICAgIGluW2kgKyAyXSA9IDAuMDsKLSAgICBpbltpICsgM10gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV8zMl9icl8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDI0ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IDAgaXMgZXJhc2VkIHdpdGggYmFuZHBhc3MgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV82NF9icF8waHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmJhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCAwLjI1LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgYmFuZCBjZW50ZXIgaXMgcHJlc2VydmVkIHdpdGggYmFuZHBhc3MgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV82NF9icF8xMTAyNWh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ0eXBlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicmlwcGxlIiwgMC4yNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGViYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDQpIHsKLSAgICBpbltpXSA9IDAuMDsKLSAgICBpbltpICsgMV0gPSAxLjA7Ci0gICAgaW5baSArIDJdID0gMC4wOwotICAgIGluW2kgKyAzXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuNik7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIGVyYXNlZCB3aXRoIGJhbmRwYXNzIG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfNjRfYnBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJiYW5kID0gc2V0dXBfYXVkaW9jaGViYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEwMjQuMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPD0gMC4xKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJiYW5kIChhdWRpb2NoZWJiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV82NF9icl8waHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmJhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEwMjQuMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPj0gMC45KTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJiYW5kIChhdWRpb2NoZWJiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCBiYW5kIGNlbnRlciBpcyBlcmFzZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfNjRfYnJfMTEwMjVoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJiYW5kID0gc2V0dXBfYXVkaW9jaGViYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRyZWplY3QgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ0eXBlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicmlwcGxlIiwgMC4yNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGViYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDQpIHsKLSAgICBpbltpXSA9IDAuMDsKLSAgICBpbltpICsgMV0gPSAxLjA7Ci0gICAgaW5baSArIDJdID0gMC4wOwotICAgIGluW2kgKyAzXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV82NF9icl8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHJlamVjdCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCAwLjI1LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkgKz0gMikgewotICAgIGluW2ldID0gMS4wOwotICAgIGluW2kgKyAxXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBlcmFzZWQgd2l0aCBiYW5kcGFzcyBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzMyX2JwXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ0eXBlIiwgMiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicmlwcGxlIiwgNDAuMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGViYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEwMjQgKiBzaXplb2YgKGdmbG9hdCksIE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgYmFuZCBjZW50ZXIgaXMgcHJlc2VydmVkIHdpdGggYmFuZHBhc3MgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMl8zMl9icF8xMTAyNWh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkgKz0gNCkgewotICAgIGluW2ldID0gMC4wOwotICAgIGluW2kgKyAxXSA9IDEuMDsKLSAgICBpbltpICsgMl0gPSAwLjA7Ci0gICAgaW5baSArIDNdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjYpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBlcmFzZWQgd2l0aCBiYW5kcGFzcyBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzMyX2JwXzIyMDUwaHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmJhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJiYW5kID0gc2V0dXBfYXVkaW9jaGViYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDQwLjAsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMDI0ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IDAgaXMgcHJlc2VydmVkIHdpdGggYmFuZHJlamVjdCBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzMyX2JyXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHJlamVjdCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEwMjQuMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPj0gMC45KTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJiYW5kIChhdWRpb2NoZWJiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCBiYW5kIGNlbnRlciBpcyBlcmFzZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfMzJfYnJfMTEwMjVoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHJlamVjdCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkgKz0gNCkgewotICAgIGluW2ldID0gMC4wOwotICAgIGluW2kgKyAxXSA9IDEuMDsKLSAgICBpbltpICsgMl0gPSAwLjA7Ci0gICAgaW5baSArIDNdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGViYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBwcmVzZXJ2ZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfMzJfYnJfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHJlamVjdCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkgKz0gMikgewotICAgIGluW2ldID0gMS4wOwotICAgIGluW2kgKyAxXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEwMjQuMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPj0gMC45KTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJiYW5kIChhdWRpb2NoZWJiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIGVyYXNlZCB3aXRoIGJhbmRwYXNzIG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfNjRfYnBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ0eXBlIiwgMiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicmlwcGxlIiwgNDAuMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGViYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IGJhbmQgY2VudGVyIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRwYXNzIG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfNjRfYnBfMTEwMjVoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJiYW5kID0gc2V0dXBfYXVkaW9jaGViYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDQwLjAsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSA0KSB7Ci0gICAgaW5baV0gPSAwLjA7Ci0gICAgaW5baSArIDFdID0gMS4wOwotICAgIGluW2kgKyAyXSA9IDAuMDsKLSAgICBpbltpICsgM10gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjYpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBlcmFzZWQgd2l0aCBiYW5kcGFzcyBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzY0X2JwXzIyMDUwaHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmJhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkgKz0gMikgewotICAgIGluW2ldID0gMS4wOwotICAgIGluW2kgKyAxXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBwcmVzZXJ2ZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfNjRfYnJfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmJhbmQgPSBzZXR1cF9hdWRpb2NoZWJiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHJlamVjdCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmJhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMDI0LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGViYmFuZCAoYXVkaW9jaGViYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgYmFuZCBjZW50ZXIgaXMgZXJhc2VkIHdpdGggYmFuZHJlamVjdCBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzY0X2JyXzExMDI1aHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmJhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGViYmFuZCA9IHNldHVwX2F1ZGlvY2hlYmJhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInJpcHBsZSIsIDQwLjAsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmJhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSA0KSB7Ci0gICAgaW5baV0gPSAwLjA7Ci0gICAgaW5baSArIDFdID0gMS4wOwotICAgIGluW2kgKyAyXSA9IDAuMDsKLSAgICBpbltpICsgM10gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBwcmVzZXJ2ZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfNjRfYnJfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGViYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJiYW5kID0gc2V0dXBfYXVkaW9jaGViYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRyZWplY3QgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGViYmFuZCksICJ0eXBlIiwgMiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAicmlwcGxlIiwgNDAuMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGViYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmJhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTAyNC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmJhbmQgKGF1ZGlvY2hlYmJhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1hdWRpb2NoZWJiYW5kX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImF1ZGlvY2hlYmJhbmQiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfMzJfYnBfMGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUxXzMyX2JwXzExMDI1aHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfMzJfYnBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV8zMl9icl8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfMzJfYnJfMTEwMjVoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV8zMl9icl8yMjA1MGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUxXzY0X2JwXzBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV82NF9icF8xMTAyNWh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUxXzY0X2JwXzIyMDUwaHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfNjRfYnJfMGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUxXzY0X2JyXzExMDI1aHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfNjRfYnJfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl8zMl9icF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfMzJfYnBfMTEwMjVoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl8zMl9icF8yMjA1MGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUyXzMyX2JyXzBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl8zMl9icl8xMTAyNWh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUyXzMyX2JyXzIyMDUwaHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfNjRfYnBfMGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3R5cGUyXzY0X2JwXzExMDI1aHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfNjRfYnBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl82NF9icl8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfNjRfYnJfMTEwMjVoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl82NF9icl8yMjA1MGh6KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGF1ZGlvY2hlYmJhbmQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvY2hlYmxpbWl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOWVhYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9jaGVibGltaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDEwODYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBhdWRpb2NoZWJsaW1pdC5jOiBVbml0IHRlc3QgZm9yIHRoZSBhdWRpb2NoZWJsaW1pdCBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLUdzdFBhZCAqbXlzcmNwYWQsICpteXNpbmtwYWQ7Ci0KLSNkZWZpbmUgQlVGRkVSX0NBUFNfU1RSSU5HXzMyICAgICAgICAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIDQ0MTAwLCAiICAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORShGMzIpCi0KLSNkZWZpbmUgQlVGRkVSX0NBUFNfU1RSSU5HXzY0ICAgICAgICAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIDQ0MTAwLCAiICAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORShGNjQpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgNDQxMDAsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7ICIKLSAgICAgICAgR1NUX0FVRElPX05FIChGMzIpICIsICIgR1NUX0FVRElPX05FIChGNjQpICIgfSIpKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgNDQxMDAsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7ICIKLSAgICAgICAgR1NUX0FVRElPX05FIChGMzIpICIsICIgR1NUX0FVRElPX05FIChGNjQpICIgfSIpKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfYXVkaW9jaGVibGltaXQgKHZvaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmxpbWl0OwotCi0gIEdTVF9ERUJVRyAoInNldHVwX2F1ZGlvY2hlYmxpbWl0Iik7Ci0gIGF1ZGlvY2hlYmxpbWl0ID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJhdWRpb2NoZWJsaW1pdCIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChhdWRpb2NoZWJsaW1pdCwgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChhdWRpb2NoZWJsaW1pdCwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGF1ZGlvY2hlYmxpbWl0OwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9hdWRpb2NoZWJsaW1pdCAoR3N0RWxlbWVudCAqIGF1ZGlvY2hlYmxpbWl0KQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2F1ZGlvY2hlYmxpbWl0Iik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChhdWRpb2NoZWJsaW1pdCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoYXVkaW9jaGVibGltaXQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoYXVkaW9jaGVibGltaXQpOwotfQotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIHByZXNlcnZlZCB3aXRoIGxvd3Bhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfMzJfbHBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmxpbWl0ID0gc2V0dXBfYXVkaW9jaGVibGltaXQgKCk7Ci0gIC8qIFNldCB0byBsb3dwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCAwLjI1LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTI4ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMjguMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPj0gMC45KTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJsaW1pdCAoYXVkaW9jaGVibGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBlcmFzZWQgd2l0aCBsb3dwYXNzIG1vZGUgYW5kIGEgY3V0b2ZmCi0gKiBhdCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUxXzMyX2xwXzIyMDUwaHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmxpbWl0OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGVibGltaXQgPSBzZXR1cF9hdWRpb2NoZWJsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGxvd3Bhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJ0eXBlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmxpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMjggKiBzaXplb2YgKGdmbG9hdCksIE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkgKz0gMikgewotICAgIGluW2ldID0gMS4wOwotICAgIGluW2kgKyAxXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmxpbWl0LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEyOC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmxpbWl0IChhdWRpb2NoZWJsaW1pdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBlcmFzZWQgd2l0aCBoaWdocGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV8zMl9ocF8waHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmxpbWl0OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGVibGltaXQgPSBzZXR1cF9hdWRpb2NoZWJsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGhpZ2hwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCAwLjI1LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTI4ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMjguMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPD0gMC4xKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJsaW1pdCAoYXVkaW9jaGVibGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBwcmVzZXJ2ZWQgd2l0aCBoaWdocGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV8zMl9ocF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmxpbWl0ID0gc2V0dXBfYXVkaW9jaGVibGltaXQgKCk7Ci0gIC8qIFNldCB0byBoaWdocGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInR5cGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicmlwcGxlIiwgMC4yNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGVibGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEyOCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGVibGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIHByZXNlcnZlZCB3aXRoIGxvd3Bhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTFfNjRfbHBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJsaW1pdCA9IHNldHVwX2F1ZGlvY2hlYmxpbWl0ICgpOwotICAvKiBTZXQgdG8gbG93cGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInR5cGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicmlwcGxlIiwgMC4yNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGVibGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEyOCAqIHNpemVvZiAoZ2RvdWJsZSksIE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgZXJhc2VkIHdpdGggbG93cGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV82NF9scF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJsaW1pdCA9IHNldHVwX2F1ZGlvY2hlYmxpbWl0ICgpOwotICAvKiBTZXQgdG8gbG93cGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInR5cGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicmlwcGxlIiwgMC4yNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGVibGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEyOCAqIHNpemVvZiAoZ2RvdWJsZSksIE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIGVyYXNlZCB3aXRoIGhpZ2hwYXNzIG1vZGUgYW5kIGEgY3V0b2ZmCi0gKiBhdCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUxXzY0X2hwXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGVibGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGVibGltaXQgPSBzZXR1cF9hdWRpb2NoZWJsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGhpZ2hwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCAwLjI1LCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTI4ICogc2l6ZW9mIChnZG91YmxlKSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmxpbWl0LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMjguMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPD0gMC4xKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJsaW1pdCAoYXVkaW9jaGVibGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBwcmVzZXJ2ZWQgd2l0aCBoaWdocGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMV82NF9ocF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJsaW1pdCA9IHNldHVwX2F1ZGlvY2hlYmxpbWl0ICgpOwotICAvKiBTZXQgdG8gaGlnaHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJ0eXBlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInJpcHBsZSIsIDAuMjUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmxpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMjggKiBzaXplb2YgKGdkb3VibGUpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGVibGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEyOC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmxpbWl0IChhdWRpb2NoZWJsaW1pdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBwcmVzZXJ2ZWQgd2l0aCBsb3dwYXNzIG1vZGUgYW5kIGEgY3V0b2ZmCi0gKiBhdCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzMyX2xwXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGVibGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJsaW1pdCA9IHNldHVwX2F1ZGlvY2hlYmxpbWl0ICgpOwotICAvKiBTZXQgdG8gbG93cGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicmlwcGxlIiwgNDAuMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGVibGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEyOCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGVibGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgZXJhc2VkIHdpdGggbG93cGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF90eXBlMl8zMl9scF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmxpbWl0ID0gc2V0dXBfYXVkaW9jaGVibGltaXQgKCk7Ci0gIC8qIFNldCB0byBsb3dwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMTI4ICogc2l6ZW9mIChnZmxvYXQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMjguMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPD0gMC4xKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJsaW1pdCAoYXVkaW9jaGVibGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IDAgaXMgZXJhc2VkIHdpdGggaGlnaHBhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfMzJfaHBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb2NoZWJsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmxpbWl0ID0gc2V0dXBfYXVkaW9jaGVibGltaXQgKCk7Ci0gIC8qIFNldCB0byBoaWdocGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInBvbGVzIiwgOCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInR5cGUiLCAyLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicmlwcGxlIiwgNDAuMCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW9jaGVibGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEyOCAqIHNpemVvZiAoZ2Zsb2F0KSwgTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChCVUZGRVJfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW9jaGVibGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgcHJlc2VydmVkIHdpdGggaGlnaHBhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfMzJfaHBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGVibGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBhdWRpb2NoZWJsaW1pdCA9IHNldHVwX2F1ZGlvY2hlYmxpbWl0ICgpOwotICAvKiBTZXQgdG8gaGlnaHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJ0eXBlIiwgMiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInJpcHBsZSIsIDQwLjAsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmxpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxMjggKiBzaXplb2YgKGdmbG9hdCksIE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkgKz0gMikgewotICAgIGluW2ldID0gMS4wOwotICAgIGluW2kgKyAxXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmxpbWl0LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIHJtcyA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gIHJtcyA9IHNxcnQgKHJtcyAvIDEyOC4wKTsKLSAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvY2hlYmxpbWl0IChhdWRpb2NoZWJsaW1pdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBwcmVzZXJ2ZWQgd2l0aCBsb3dwYXNzIG1vZGUgYW5kIGEgY3V0b2ZmCi0gKiBhdCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzY0X2xwXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGVibGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGVibGltaXQgPSBzZXR1cF9hdWRpb2NoZWJsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGxvd3Bhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJwb2xlcyIsIDgsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJ0eXBlIiwgMiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgInJpcHBsZSIsIDQwLjAsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvY2hlYmxpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTI4ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQlVGRkVSX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvY2hlYmxpbWl0LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXMgPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXMgPSBzcXJ0IChybXMgLyAxMjguMCk7Ci0gIGZhaWxfdW5sZXNzIChybXMgPj0gMC45KTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb2NoZWJsaW1pdCAoYXVkaW9jaGVibGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHJhdGUvMiBpcyBlcmFzZWQgd2l0aCBsb3dwYXNzIG1vZGUgYW5kIGEgY3V0b2ZmCi0gKiBhdCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzY0X2xwXzIyMDUwaHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY2hlYmxpbWl0OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGF1ZGlvY2hlYmxpbWl0ID0gc2V0dXBfYXVkaW9jaGVibGltaXQgKCk7Ci0gIC8qIFNldCB0byBsb3dwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEyOCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIGVyYXNlZCB3aXRoIGhpZ2hwYXNzIG1vZGUgYW5kIGEgY3V0b2ZmCi0gKiBhdCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R5cGUyXzY0X2hwXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGVibGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGVibGltaXQgPSBzZXR1cF9hdWRpb2NoZWJsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGhpZ2hwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEyOCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgcHJlc2VydmVkIHdpdGggaGlnaHBhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdHlwZTJfNjRfaHBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW9jaGVibGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgYXVkaW9jaGVibGltaXQgPSBzZXR1cF9hdWRpb2NoZWJsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGhpZ2hwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAicG9sZXMiLCA4LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW9jaGVibGltaXQpLCAidHlwZSIsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb2NoZWJsaW1pdCksICJyaXBwbGUiLCA0MC4wLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb2NoZWJsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvY2hlYmxpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEyOCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEJVRkZFUl9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb2NoZWJsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zID0gc3FydCAocm1zIC8gMTI4LjApOwotICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW9jaGVibGltaXQgKGF1ZGlvY2hlYmxpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1hdWRpb2NoZWJsaW1pdF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhdWRpb2NoZWJsaW1pdCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV8zMl9scF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfMzJfbHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV8zMl9ocF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfMzJfaHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV82NF9scF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfNjRfbHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMV82NF9ocF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTFfNjRfaHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl8zMl9scF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfMzJfbHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl8zMl9ocF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfMzJfaHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl82NF9scF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfNjRfbHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF90eXBlMl82NF9ocF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHlwZTJfNjRfaHBfMjIwNTBoeik7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoYXVkaW9jaGVibGltaXQpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9keW5hbWljLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2R5bmFtaWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4MmEwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2R5bmFtaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGF1ZGlvZHluYW1pYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogR3JlYXRseSBiYXNlZCBvbiB0aGUgYXVkaW9wYW5vcmFtYSB1bml0IHRlc3QKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1nYm9vbGVhbiBoYXZlX2VvcyA9IEZBTFNFOwotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0KLSNkZWZpbmUgRFlOQU1JQ19DQVBTX1NUUklORyAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIDQ0MTAwLCAiICAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORShTMTYpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgWyAxLCAgTUFYIF0sICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSIgR1NUX0FVRElPX05FIChTMTYpKSk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikpKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfZHluYW1pYyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqZHluYW1pYzsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9keW5hbWljIik7Ci0gIGR5bmFtaWMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImF1ZGlvZHluYW1pYyIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChkeW5hbWljLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGR5bmFtaWMsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBkeW5hbWljOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9keW5hbWljIChHc3RFbGVtZW50ICogZHluYW1pYykKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9keW5hbWljIik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChkeW5hbWljKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChkeW5hbWljKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGR5bmFtaWMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXNzdGhyb3VnaCkKLXsKLSAgR3N0RWxlbWVudCAqZHluYW1pYzsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzZdID0geyAyNDU3NiwgLTE2Mzg0LCAyNTYsIC0xMjgsIDAsIC0yNDU3NiB9OwotICBnaW50MTYgcmVzWzZdOwotCi0gIGR5bmFtaWMgPSBzZXR1cF9keW5hbWljICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkeW5hbWljLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGluLCAxMiwgMCwgMTIsCi0gICAgICBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDEyKSA9PSAwKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChEWU5BTUlDX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGR5bmFtaWMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYnV0IGl0IGVuZHMgdXAgYmVpbmcgY29sbGVjdGVkIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywgMTIpID09IDEyKTsKLSAgR1NUX0lORk8KLSAgICAgICgiZXhwZWN0ZWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgcmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBpblswXSwgaW5bMV0sIGluWzJdLCBpblszXSwgaW5bNF0sIGluWzVdLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10sCi0gICAgICByZXNbNF0sIHJlc1s1XSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAwLCBpbiwgMTIpID09IDApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9keW5hbWljIChkeW5hbWljKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb21wcmVzc19oYXJkXzUwXzUwKQotewotICBHc3RFbGVtZW50ICpkeW5hbWljOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bOF0gPSB7IC0zMDAwMCwgMjQ1NzYsIC0xNjM4NCwgMjU2LCAtMTI4LCAwLCAtMjQ1NzYsIDMwMDAwIH07Ci0gIGdpbnQxNiByZXNbOF07Ci0KLSAgZHluYW1pYyA9IHNldHVwX2R5bmFtaWMgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgImNoYXJhY3RlcmlzdGljcyIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgInJhdGlvIiwgMC41LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJ0aHJlc2hvbGQiLCAwLjUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkeW5hbWljLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDE2KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDE2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDE2KSA9PSAwKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChEWU5BTUlDX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGR5bmFtaWMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dGJ1ZmZlciwgMCwgcmVzLCAxNikgPT0gMTYpOwotCi0gIGZhaWxfdW5sZXNzIChyZXNbMF0gPiBpblswXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbMV0gPCBpblsxXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbMl0gPT0gaW5bMl0pOwotICBmYWlsX3VubGVzcyAocmVzWzNdID09IGluWzNdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s0XSA9PSBpbls0XSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbNV0gPT0gaW5bNV0pOwotICBmYWlsX3VubGVzcyAocmVzWzZdID4gaW5bNl0pOwotICBmYWlsX3VubGVzcyAocmVzWzddIDwgaW5bN10pOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9keW5hbWljIChkeW5hbWljKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb21wcmVzc19zb2Z0XzUwXzUwKQotewotICBHc3RFbGVtZW50ICpkeW5hbWljOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bOF0gPSB7IC0zMDAwMCwgMjQ1NzYsIC0xNjM4NCwgMjU2LCAtMTI4LCAwLCAtMjQ1NzYsIDMwMDAwIH07Ci0gIGdpbnQxNiByZXNbOF07Ci0KLSAgZHluYW1pYyA9IHNldHVwX2R5bmFtaWMgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgImNoYXJhY3RlcmlzdGljcyIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgInJhdGlvIiwgMC41LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJ0aHJlc2hvbGQiLCAwLjUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkeW5hbWljLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDE2KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDE2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDE2KSA9PSAwKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChEWU5BTUlDX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGR5bmFtaWMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dGJ1ZmZlciwgMCwgcmVzLCAxNikgPT0gMTYpOwotCi0gIGZhaWxfdW5sZXNzIChyZXNbMF0gPiBpblswXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbMV0gPCBpblsxXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbMl0gPT0gaW5bMl0pOwotICBmYWlsX3VubGVzcyAocmVzWzNdID09IGluWzNdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s0XSA9PSBpbls0XSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbNV0gPT0gaW5bNV0pOwotICBmYWlsX3VubGVzcyAocmVzWzZdID4gaW5bNl0pOwotICBmYWlsX3VubGVzcyAocmVzWzddIDwgaW5bN10pOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9keW5hbWljIChkeW5hbWljKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb21wcmVzc19oYXJkXzEwMF81MCkKLXsKLSAgR3N0RWxlbWVudCAqZHluYW1pYzsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzhdID0geyAtMzAwMDAsIDI0NTc2LCAtMTYzODQsIDI1NiwgLTEyOCwgMCwgLTI0NTc2LCAzMDAwMCB9OwotICBnaW50MTYgcmVzWzhdOwotCi0gIGR5bmFtaWMgPSBzZXR1cF9keW5hbWljICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJjaGFyYWN0ZXJpc3RpY3MiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJyYXRpbyIsIDAuNSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAidGhyZXNob2xkIiwgMS4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZHluYW1pYywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxNik7Ci0gIGdzdF9idWZmZXJfZmlsbCAoaW5idWZmZXIsIDAsIGluLCAxNik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoaW5idWZmZXIsIDAsIGluLCAxNikgPT0gMCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoRFlOQU1JQ19DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBkeW5hbWljLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywgMTYpID09IDE2KTsKLQotICBmYWlsX3VubGVzcyAocmVzWzBdID09IGluWzBdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1sxXSA9PSBpblsxXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbMl0gPT0gaW5bMl0pOwotICBmYWlsX3VubGVzcyAocmVzWzNdID09IGluWzNdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s0XSA9PSBpbls0XSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbNV0gPT0gaW5bNV0pOwotICBmYWlsX3VubGVzcyAocmVzWzZdID09IGluWzZdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s3XSA9PSBpbls3XSk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2R5bmFtaWMgKGR5bmFtaWMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXhwYW5kX2hhcmRfNTBfMjAwKQotewotICBHc3RFbGVtZW50ICpkeW5hbWljOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bOF0gPSB7IC0zMDAwMCwgMjQ1NzYsIC0xNjM4MywgMjU2LCAtMTI4LCAwLCAtMjQ1NzYsIDMwMDAwIH07Ci0gIGdpbnQxNiByZXNbOF07Ci0KLSAgZHluYW1pYyA9IHNldHVwX2R5bmFtaWMgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgImNoYXJhY3RlcmlzdGljcyIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgInJhdGlvIiwgMi4wLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJ0aHJlc2hvbGQiLCAwLjUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkeW5hbWljLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDE2KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDE2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDE2KSA9PSAwKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChEWU5BTUlDX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGR5bmFtaWMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dGJ1ZmZlciwgMCwgcmVzLCAxNikgPT0gMTYpOwotCi0gIGZhaWxfdW5sZXNzIChyZXNbMF0gPT0gaW5bMF0pOwotICBmYWlsX3VubGVzcyAocmVzWzFdID09IGluWzFdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1syXSA+IGluWzJdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1szXSA8IGluWzNdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s0XSA+IGluWzRdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s1XSA9PSBpbls1XSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbNl0gPT0gaW5bNl0pOwotICBmYWlsX3VubGVzcyAocmVzWzddID09IGluWzddKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZHluYW1pYyAoZHluYW1pYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXhwYW5kX3NvZnRfNTBfMjAwKQotewotICBHc3RFbGVtZW50ICpkeW5hbWljOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50MTYgaW5bOF0gPSB7IC0zMDAwMCwgMjQ1NzYsIC0xNjM4MywgMjU2LCAtMTI4LCAwLCAtMjQ1NzYsIDMwMDAwIH07Ci0gIGdpbnQxNiByZXNbOF07Ci0KLSAgZHluYW1pYyA9IHNldHVwX2R5bmFtaWMgKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgImNoYXJhY3RlcmlzdGljcyIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgInJhdGlvIiwgMi4wLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJ0aHJlc2hvbGQiLCAwLjUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkeW5hbWljLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDE2KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDE2KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIDE2KSA9PSAwKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChEWU5BTUlDX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGR5bmFtaWMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dGJ1ZmZlciwgMCwgcmVzLCAxNikgPT0gMTYpOwotCi0gIGZhaWxfdW5sZXNzIChyZXNbMF0gPT0gaW5bMF0pOwotICBmYWlsX3VubGVzcyAocmVzWzFdID09IGluWzFdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1syXSA+IGluWzJdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1szXSA8IGluWzNdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s0XSA+IGluWzRdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s1XSA9PSBpbls1XSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbNl0gPT0gaW5bNl0pOwotICBmYWlsX3VubGVzcyAocmVzWzddID09IGluWzddKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZHluYW1pYyAoZHluYW1pYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXhwYW5kX2hhcmRfMF8yMDApCi17Ci0gIEdzdEVsZW1lbnQgKmR5bmFtaWM7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdpbnQxNiBpbls4XSA9IHsgLTMwMDAwLCAyNDU3NiwgLTE2MzgzLCAyNTYsIC0xMjgsIDAsIC0yNDU3NiwgMzAwMDAgfTsKLSAgZ2ludDE2IHJlc1s4XTsKLQotICBkeW5hbWljID0gc2V0dXBfZHluYW1pYyAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZHluYW1pYyksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAiY2hhcmFjdGVyaXN0aWNzIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGR5bmFtaWMpLCAicmF0aW8iLCAyLjAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkeW5hbWljKSwgInRocmVzaG9sZCIsIDAuMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGR5bmFtaWMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTYpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGluYnVmZmVyLCAwLCBpbiwgMTYpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgMTYpID09IDApOwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKERZTkFNSUNfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgZHluYW1pYywgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZXh0cmFjdCAob3V0YnVmZmVyLCAwLCByZXMsIDE2KSA9PSAxNik7Ci0KLSAgZmFpbF91bmxlc3MgKHJlc1swXSA9PSBpblswXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbMV0gPT0gaW5bMV0pOwotICBmYWlsX3VubGVzcyAocmVzWzJdID09IGluWzJdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1szXSA9PSBpblszXSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbNF0gPT0gaW5bNF0pOwotICBmYWlsX3VubGVzcyAocmVzWzVdID09IGluWzVdKTsKLSAgZmFpbF91bmxlc3MgKHJlc1s2XSA9PSBpbls2XSk7Ci0gIGZhaWxfdW5sZXNzIChyZXNbN10gPT0gaW5bN10pOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9keW5hbWljIChkeW5hbWljKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZHluYW1pY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJkeW5hbWljIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Bhc3N0aHJvdWdoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbXByZXNzX2hhcmRfNTBfNTApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY29tcHJlc3Nfc29mdF81MF81MCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jb21wcmVzc19oYXJkXzEwMF81MCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9leHBhbmRfaGFyZF81MF8yMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZXhwYW5kX3NvZnRfNTBfMjAwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2V4cGFuZF9oYXJkXzBfMjAwKTsKLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChkeW5hbWljKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvZWNoby5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNWI3MTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9lY2hvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLQotZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotI2RlZmluZSBFQ0hPX0NBUFNfU1RSSU5HICAgIFwKLSAgICAiYXVkaW8veC1yYXcsICIgICAgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMiwgIiAgICAgICAgICAgICAgXAotICAgICJjaGFubmVsLW1hc2sgPSAoYml0bWFzaykgMywgIiAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIDEwMDAwMCwgIiAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORShGNjQpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXSwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7ICIKLSAgICAgICAgR1NUX0FVRElPX05FIChGMzIpICIsICIgR1NUX0FVRElPX05FIChGNjQpICIgfSIpKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSBbIDEsIDIgXSwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdLCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSB7ICIKLSAgICAgICAgR1NUX0FVRElPX05FIChGMzIpICIsICIgR1NUX0FVRElPX05FIChGNjQpICIgfSIpKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfZWNobyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqZWNobzsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9lY2hvIik7Ci0gIGVjaG8gPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImF1ZGlvZWNobyIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChlY2hvLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGVjaG8sICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBlY2hvOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9lY2hvIChHc3RFbGVtZW50ICogZWNobykKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9lY2hvIik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChlY2hvKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChlY2hvKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGVjaG8pOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXNzdGhyb3VnaCkKLXsKLSAgR3N0RWxlbWVudCAqZWNobzsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSBpbltdID0geyAxLjAsIC0xLjAsIDAuMCwgMC41LCAtMC41LCAwLjAgfTsKLSAgZ2RvdWJsZSByZXNbNl07Ci0KLSAgZWNobyA9IHNldHVwX2VjaG8gKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGVjaG8pLCAiZGVsYXkiLCAoR3N0Q2xvY2tUaW1lKSAxLCAiaW50ZW5zaXR5IiwgMC4wLAotICAgICAgImZlZWRiYWNrIiwgMC4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWNobywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoRUNIT19DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBlY2hvLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaW5idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGluLCBzaXplb2YgKGluKSwgMCwKLSAgICAgIHNpemVvZiAoaW4pLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIHNpemVvZiAoaW4pKSA9PSAwKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYnV0IGl0IGVuZHMgdXAgYmVpbmcgY29sbGVjdGVkIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywKLSAgICAgICAgICBzaXplb2YgKHJlcykpID09IHNpemVvZiAocmVzKSk7Ci0gIEdTVF9JTkZPCi0gICAgICAoImV4cGVjdGVkICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmIHJlYWwgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYiLAotICAgICAgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdLAotICAgICAgcmVzWzRdLCByZXNbNV0pOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgaW4sIHNpemVvZiAoaW4pKSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZWNobyAoZWNobyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZWNobykKLXsKLSAgR3N0RWxlbWVudCAqZWNobzsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSBpbltdID0geyAxLjAsIC0xLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCB9OwotICBnZG91YmxlIG91dFtdID0geyAxLjAsIC0xLjAsIDAuMCwgMC4wLCAxLjAsIC0xLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCB9OwotICBnZG91YmxlIHJlc1sxMF07Ci0KLSAgZWNobyA9IHNldHVwX2VjaG8gKCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGVjaG8pLCAiZGVsYXkiLCAoR3N0Q2xvY2tUaW1lKSAyMDAwMCwgImludGVuc2l0eSIsCi0gICAgICAxLjAsICJmZWVkYmFjayIsIDAuMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVjaG8sCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEVDSE9fQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgZWNobywgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGluYnVmZmVyID0KLSAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBpbiwgc2l6ZW9mIChpbiksIDAsCi0gICAgICBzaXplb2YgKGluKSwgTlVMTCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoaW5idWZmZXIsIDAsIGluLCBzaXplb2YgKGluKSkgPT0gMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGJ1dCBpdCBlbmRzIHVwIGJlaW5nIGNvbGxlY3RlZCBvbiB0aGUgZ2xvYmFsIGJ1ZmZlciBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZXh0cmFjdCAob3V0YnVmZmVyLCAwLCByZXMsCi0gICAgICAgICAgc2l6ZW9mIChyZXMpKSA9PSBzaXplb2YgKHJlcykpOwotICBHU1RfSU5GTwotICAgICAgKCJleHBlY3RlZCAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmIHJlYWwgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIG91dFs0XSwgb3V0WzVdLCBvdXRbNl0sIG91dFs3XSwgb3V0WzhdLAotICAgICAgb3V0WzldLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10sIHJlc1s0XSwgcmVzWzVdLCByZXNbNl0sIHJlc1s3XSwKLSAgICAgIHJlc1s4XSwgcmVzWzldKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIG91dCwgc2l6ZW9mIChvdXQpKSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZWNobyAoZWNobyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmVlZGJhY2spCi17Ci0gIEdzdEVsZW1lbnQgKmVjaG87Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgaW5bXSA9IHsgMS4wLCAtMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgfTsKLSAgZ2RvdWJsZSBvdXRbXSA9IHsgMS4wLCAtMS4wLCAwLjAsIDAuMCwgMS4wLCAtMS4wLCAwLjAsIDAuMCwgMS4wLCAtMS4wIH07Ci0gIGdkb3VibGUgcmVzWzEwXTsKLQotICBlY2hvID0gc2V0dXBfZWNobyAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWNobyksICJkZWxheSIsIChHc3RDbG9ja1RpbWUpIDIwMDAwLCAiaW50ZW5zaXR5IiwKLSAgICAgIDEuMCwgImZlZWRiYWNrIiwgMS4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWNobywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoRUNIT19DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBlY2hvLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaW5idWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksIGluLCBzaXplb2YgKGluKSwgMCwKLSAgICAgIHNpemVvZiAoaW4pLCBOVUxMLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbmJ1ZmZlciwgMCwgaW4sIHNpemVvZiAoaW4pKSA9PSAwKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYnV0IGl0IGVuZHMgdXAgYmVpbmcgY29sbGVjdGVkIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9leHRyYWN0IChvdXRidWZmZXIsIDAsIHJlcywKLSAgICAgICAgICBzaXplb2YgKHJlcykpID09IHNpemVvZiAocmVzKSk7Ci0gIEdTVF9JTkZPCi0gICAgICAoImV4cGVjdGVkICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgcmVhbCAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmICUrbGYgJStsZiAlK2xmIiwKLSAgICAgIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSwgb3V0WzRdLCBvdXRbNV0sIG91dFs2XSwgb3V0WzddLCBvdXRbOF0sCi0gICAgICBvdXRbOV0sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSwgcmVzWzRdLCByZXNbNV0sIHJlc1s2XSwgcmVzWzddLAotICAgICAgcmVzWzhdLCByZXNbOV0pOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgb3V0LCBzaXplb2YgKG91dCkpID09IDApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9lY2hvIChlY2hvKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotYXVkaW9lY2hvX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImF1ZGlvZWNobyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXNzdGhyb3VnaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lY2hvKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZlZWRiYWNrKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGF1ZGlvZWNobyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ZpcmZpbHRlci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9maXJmaWx0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiNDUyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ZpcmZpbHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKiBGSVhNRSAwLjExOiBzdXBwcmVzcyB3YXJuaW5ncyBmb3IgZGVwcmVjYXRlZCBBUEkgc3VjaCBhcyBHVmFsdWVBcnJheQotICogd2l0aCBuZXdlciBHTGliIHZlcnNpb25zICg+PSAyLjMxLjApICovCi0jZGVmaW5lIEdMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotc3RhdGljIGdib29sZWFuCi1vbl9tZXNzYWdlIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgdXNlcl9kYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgotICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgaGF2ZV9lb3MgPSBUUlVFOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3JhdGVfY2hhbmdlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdpbnQgcmF0ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHVmFsdWVBcnJheSAqdmE7Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotCi0gIGZhaWxfdW5sZXNzIChyYXRlID4gMCk7Ci0KLSAgdmEgPSBnX3ZhbHVlX2FycmF5X25ldyAoNik7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDEuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJrZXJuZWwiLCB2YSwgTlVMTCk7Ci0KLSAgZ192YWx1ZV9hcnJheV9mcmVlICh2YSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBoYXZlX2RhdGEgPSBGQUxTRTsKLQotc3RhdGljIHZvaWQKLW9uX2hhbmRvZmYgKEdzdEVsZW1lbnQgKiBvYmplY3QsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0UGFkICogcGFkLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKCFoYXZlX2RhdGEpIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBnZG91YmxlICpkYXRhOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBkYXRhID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgICBmYWlsX3VubGVzcyAobWFwLnNpemUgPiA1ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gICAgZmFpbF91bmxlc3MgKGRhdGFbMF0gPT0gMC4wKTsKLSAgICBmYWlsX3VubGVzcyAoZGF0YVsxXSA9PSAwLjApOwotICAgIGZhaWxfdW5sZXNzIChkYXRhWzJdID09IDAuMCk7Ci0gICAgZmFpbF91bmxlc3MgKGRhdGFbM10gPT0gMC4wKTsKLSAgICBmYWlsX3VubGVzcyAoZGF0YVs0XSA9PSAwLjApOwotICAgIGZhaWxfdW5sZXNzIChkYXRhWzVdICE9IDAuMCk7Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICAgIGhhdmVfZGF0YSA9IFRSVUU7Ci0gIH0KLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGlwZWxpbmUpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc3JjLCAqY2ZpbHRlciwgKmZpbHRlciwgKnNpbms7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdEJ1cyAqYnVzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0KLSAgaGF2ZV9kYXRhID0gRkFMU0U7Ci0gIGhhdmVfZW9zID0gRkFMU0U7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJudW0tYnVmZmVycyIsIDEwMDAsIE5VTEwpOwotCi0gIGNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChjZmlsdGVyICE9IE5VTEwpOwotI2lmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkY2NEJFIiwgTlVMTCk7Ci0jZWxzZQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiRjY0TEUiLCBOVUxMKTsKLSNlbmRpZgotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChjZmlsdGVyKSwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvZmlyZmlsdGVyIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChmaWx0ZXIgIT0gTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChmaWx0ZXIpLCAicmF0ZS1jaGFuZ2VkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKG9uX3JhdGVfY2hhbmdlZCksIE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHNpbmspLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKG9uX2hhbmRvZmYpLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgY2ZpbHRlciwgZmlsdGVyLCBzaW5rLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBjZmlsdGVyLCBmaWx0ZXIsIHNpbmssIE5VTEwpKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChvbl9tZXNzYWdlKSwgbG9vcCk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGZhaWxfdW5sZXNzIChoYXZlX2RhdGEpOwotICBmYWlsX3VubGVzcyAoaGF2ZV9lb3MpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVzKSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1hdWRpb2ZpcmZpbHRlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhdWRpb2ZpcmZpbHRlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9waXBlbGluZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChhdWRpb2ZpcmZpbHRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2lpcmZpbHRlci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9paXJmaWx0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYyYzlkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2lpcmZpbHRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKiBGSVhNRSAwLjExOiBzdXBwcmVzcyB3YXJuaW5ncyBmb3IgZGVwcmVjYXRlZCBBUEkgc3VjaCBhcyBHVmFsdWVBcnJheQotICogd2l0aCBuZXdlciBHTGliIHZlcnNpb25zICg+PSAyLjMxLjApICovCi0jZGVmaW5lIEdMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotc3RhdGljIGdib29sZWFuCi1vbl9tZXNzYWdlIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgdXNlcl9kYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgotICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgaGF2ZV9lb3MgPSBUUlVFOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3JhdGVfY2hhbmdlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdpbnQgcmF0ZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHVmFsdWVBcnJheSAqdmE7Ci0gIEdWYWx1ZSB2ID0geyAwLCB9OwotCi0gIGZhaWxfdW5sZXNzIChyYXRlID4gMCk7Ci0KLSAgdmEgPSBnX3ZhbHVlX2FycmF5X25ldyAoNik7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0RPVUJMRSk7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDAuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDEuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJiIiwgdmEsIE5VTEwpOwotCi0gIGdfdmFsdWVfYXJyYXlfZnJlZSAodmEpOwotCi0gIHZhID0gZ192YWx1ZV9hcnJheV9uZXcgKDYpOwotCi0gIGdfdmFsdWVfc2V0X2RvdWJsZSAoJnYsIDEuMCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJhIiwgdmEsIE5VTEwpOwotCi0gIGdfdmFsdWVfYXJyYXlfZnJlZSAodmEpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9kYXRhID0gRkFMU0U7Ci0KLXN0YXRpYyB2b2lkCi1vbl9oYW5kb2ZmIChHc3RFbGVtZW50ICogb2JqZWN0LCBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdFBhZCAqIHBhZCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmICghaGF2ZV9kYXRhKSB7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ2Zsb2F0ICpkYXRhOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCkpOwotICAgIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gICAgZmFpbF91bmxlc3MgKG1hcC5zaXplID4gNSAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICAgIGZhaWxfdW5sZXNzIChkYXRhWzBdID09IDAuMCk7Ci0gICAgZmFpbF91bmxlc3MgKGRhdGFbMV0gPT0gMC4wKTsKLSAgICBmYWlsX3VubGVzcyAoZGF0YVsyXSA9PSAwLjApOwotICAgIGZhaWxfdW5sZXNzIChkYXRhWzNdID09IDAuMCk7Ci0gICAgZmFpbF91bmxlc3MgKGRhdGFbNF0gPT0gMC4wKTsKLSAgICBmYWlsX3VubGVzcyAoZGF0YVs1XSAhPSAwLjApOwotCi0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgICBoYXZlX2RhdGEgPSBUUlVFOwotICB9Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BpcGVsaW5lKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKmZpbHRlciwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0KLSAgaGF2ZV9kYXRhID0gRkFMU0U7Ci0gIGhhdmVfZW9zID0gRkFMU0U7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNyYyksICJudW0tYnVmZmVycyIsIDEwMDAsIE5VTEwpOwotCi0gIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvaWlyZmlsdGVyIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChmaWx0ZXIgIT0gTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChmaWx0ZXIpLCAicmF0ZS1jaGFuZ2VkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKG9uX3JhdGVfY2hhbmdlZCksIE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHNpbmspLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKG9uX2hhbmRvZmYpLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgZmlsdGVyLCBzaW5rLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmaWx0ZXIsIHNpbmssIE5VTEwpKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChvbl9tZXNzYWdlKSwgbG9vcCk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGZhaWxfdW5sZXNzIChoYXZlX2RhdGEpOwotICBmYWlsX3VubGVzcyAoaGF2ZV9lb3MpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVzKSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1hdWRpb2lpcmZpbHRlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJhdWRpb2lpcmZpbHRlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9waXBlbGluZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChhdWRpb2lpcmZpbHRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ludmVydC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9pbnZlcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEyMWZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb2ludmVydC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgYXVkaW9pbnZlcnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIEdyZWF0bHkgYmFzZWQgb24gdGhlIGF1ZGlvcGFub3JhbWEgdW5pdCB0ZXN0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotCi0jZGVmaW5lIElOVkVSVF9DQVBTX1NUUklORyAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICJHU1RfQVVESU9fTkUoUzE2KSIsICIgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSA0NDEwMCIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoUzE2KSAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJyYXRlID0gKGludCkgWyAxLCAgTUFYIF0iKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgInJhdGUgPSAoaW50KSBbIDEsICBNQVggXSIpCi0gICAgKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfaW52ZXJ0ICh2b2lkKQotewotICBHc3RFbGVtZW50ICppbnZlcnQ7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfaW52ZXJ0Iik7Ci0gIGludmVydCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiYXVkaW9pbnZlcnQiKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoaW52ZXJ0LCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGludmVydCwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGludmVydDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfaW52ZXJ0IChHc3RFbGVtZW50ICogaW52ZXJ0KQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2ludmVydCIpOwotCi0gIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoaW52ZXJ0KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChpbnZlcnQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoaW52ZXJ0KTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFzc3Rocm91Z2gpCi17Ci0gIEdzdEVsZW1lbnQgKmludmVydDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzRdID0geyAxNjM4NCwgLTI1NiwgMTI4LCAtNTEyIH07Ci0gIGdpbnQxNiAqcmVzOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBpbnZlcnQgPSBzZXR1cF9pbnZlcnQgKCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGludmVydCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg4KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgOCkgPT0gMCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoSU5WRVJUX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGludmVydCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBidXQgaXQgZW5kcyB1cCBiZWluZyBjb2xsZWN0ZWQgb24gdGhlIGdsb2JhbCBidWZmZXIgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotCi0gIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnaW50MTYgKikgbWFwLmRhdGE7Ci0gIEdTVF9JTkZPICgiZXhwZWN0ZWQgJSs1ZCAlKzVkICUrNWQgJSs1ZCByZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLAotICAgICAgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIGluLCA4KSA9PSAwKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfaW52ZXJ0IChpbnZlcnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3plcm8pCi17Ci0gIEdzdEVsZW1lbnQgKmludmVydDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzRdID0geyAxNjM4NCwgLTI1NiwgMTI4LCAtNTEyIH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IDAsIDAsIDAsIDAgfTsKLSAgZ2ludDE2ICpyZXM7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGludmVydCA9IHNldHVwX2ludmVydCAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoaW52ZXJ0KSwgImRlZ3JlZSIsIDAuNSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGludmVydCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg4KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgOCkgPT0gMCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoSU5WRVJUX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGludmVydCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgR1NUX0lORk8gKCJleHBlY3RlZCAlKzVkICUrNWQgJSs1ZCAlKzVkIHJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIG91dCwgOCkgPT0gMCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2ludmVydCAoaW52ZXJ0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mdWxsX2ludmVyc2UpCi17Ci0gIEdzdEVsZW1lbnQgKmludmVydDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2ludDE2IGluWzRdID0geyAxNjM4NCwgLTI1NiwgMTI4LCAtNTEyIH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IC0xNjM4NSwgMjU1LCAtMTI5LCA1MTEgfTsKLSAgZ2ludDE2ICpyZXM7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGludmVydCA9IHNldHVwX2ludmVydCAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoaW52ZXJ0KSwgImRlZ3JlZSIsIDEuMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGludmVydCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg4KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgOCkgPT0gMCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoSU5WRVJUX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGludmVydCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgR1NUX0lORk8gKCJleHBlY3RlZCAlKzVkICUrNWQgJSs1ZCAlKzVkIHJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIG91dCwgOCkgPT0gMCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2ludmVydCAoaW52ZXJ0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8yNV9pbnZlcnNlKQotewotICBHc3RFbGVtZW50ICppbnZlcnQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdpbnQxNiBpbls0XSA9IHsgMTYzODQsIC0yNTYsIDEyOCwgLTUxMiB9OwotICBnaW50MTYgb3V0WzRdID0geyA4MTkxLCAtMTI4LCA2MywgLTI1NiB9OwotICBnaW50MTYgKnJlczsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgaW52ZXJ0ID0gc2V0dXBfaW52ZXJ0ICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChpbnZlcnQpLCAiZGVncmVlIiwgMC4yNSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGludmVydCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg4KTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgaW4sIDgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKGluYnVmZmVyLCAwLCBpbiwgOCkgPT0gMCk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoSU5WRVJUX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGludmVydCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgR1NUX0lORk8gKCJleHBlY3RlZCAlKzVkICUrNWQgJSs1ZCAlKzVkIHJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsCi0gICAgICBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10sIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIG91dCwgOCkgPT0gMCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2ludmVydCAoaW52ZXJ0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotaW52ZXJ0X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImludmVydCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXNzdGhyb3VnaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF96ZXJvKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Z1bGxfaW52ZXJzZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8yNV9pbnZlcnNlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGludmVydCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3Bhbm9yYW1hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NTcxMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW9wYW5vcmFtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsODE4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgYXVkaW9wYW5vcmFtYQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTdGVmYW4gS29zdCA8ZW5zb25pY0B1c2Vycy5zZi5uZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1nYm9vbGVhbiBoYXZlX2VvcyA9IEZBTFNFOwotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0KLSNkZWZpbmUgUEFOT1JBTUFfUzE2X01PTk9fQ0FQU19TVFJJTkcgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIDQ0MTAwLCAiICAgICAgICAgICAgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORShTMTYpCi0KLSNkZWZpbmUgUEFOT1JBTUFfUzE2X1NURVJFT19DQVBTX1NUUklORyBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDIsICIgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbC1tYXNrID0gKGJpdG1hc2spIDMsICIgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiAgICAgICAgICAgICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUoUzE2KQotCi0jZGVmaW5lIFBBTk9SQU1BX0YzMl9NT05PX0NBUFNfU1RSSU5HICAgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICAgICAgICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiAgICAgICAgICAgICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUoRjMyKQotCi0jZGVmaW5lIFBBTk9SQU1BX0YzMl9TVEVSRU9fQ0FQU19TVFJJTkcgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSAyLCAiICAgICAgICAgICAgICBcCi0gICAgImNoYW5uZWwtbWFzayA9IChiaXRtYXNrKSAzLCAiICAgICAgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAsICIgICAgICAgICAgICAgIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FKEYzMikKLQotI2RlZmluZSBQQU5PUkFNQV9XUk9OR19DQVBTX1NUUklORyAgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiY2hhbm5lbHMgPSAoaW50KSA1LCAiICAgICAgICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiAgICAgICAgICAgICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUoVTE2KQotCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGVbMl0gPSB7Ci0gIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgICBHU1RfUEFEX1NJTkssCi0gICAgICBHU1RfUEFEX0FMV0FZUywKLSAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICAgImNoYW5uZWxzID0gKGludCkgMiwgIgotICAgICAgICAgICJyYXRlID0gKGludCkgWyAxLCAgTUFYIF0sICIKLSAgICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikpCi0gICAgICApLAotICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgICAgR1NUX1BBRF9TSU5LLAotICAgICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAgICJjaGFubmVscyA9IChpbnQpIDIsICIKLSAgICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdLCAiCi0gICAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChGMzIpKQotICAgICAgKSwKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBtc3JjdGVtcGxhdGVbMl0gPSB7Ci0gIEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICAgIEdTVF9QQURfU1JDLAotICAgICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgICAicmF0ZSA9IChpbnQpIFsgMSwgIE1BWCBdLCAiCi0gICAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpKQotICAgICAgKSwKLSAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgICAgR1NUX1BBRF9TUkMsCi0gICAgICBHU1RfUEFEX0FMV0FZUywKLSAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIgotICAgICAgICAgICJyYXRlID0gKGludCkgWyAxLCAgTUFYIF0sICIKLSAgICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKEYzMikpCi0gICAgICApLAotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNzcmN0ZW1wbGF0ZVsyXSA9IHsKLSAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgICAgR1NUX1BBRF9TUkMsCi0gICAgICBHU1RfUEFEX0FMV0FZUywKLSAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICAgImNoYW5uZWxzID0gKGludCkgMiwgIgotICAgICAgICAgICJyYXRlID0gKGludCkgWyAxLCAgTUFYIF0sICIKLSAgICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikpCi0gICAgICApLAotICBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgICBHU1RfUEFEX1NSQywKLSAgICAgIEdTVF9QQURfQUxXQVlTLAotICAgICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAyLCAiCi0gICAgICAgICAgInJhdGUgPSAoaW50KSBbIDEsICBNQVggXSwgIgotICAgICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoRjMyKSkKLSAgICAgICksCi19OwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9wYW5vcmFtYSAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBzcmN0ZW1wbGF0ZSwgZ2ludCBmbXQsCi0gICAgY29uc3QgZ2NoYXIgKiBjYXBzX3N0cikKLXsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWE7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfcGFub3JhbWEiKTsKLSAgcGFub3JhbWEgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImF1ZGlvcGFub3JhbWEiKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAocGFub3JhbWEsICZzcmN0ZW1wbGF0ZVtmbXRdKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChwYW5vcmFtYSwgJnNpbmt0ZW1wbGF0ZVtmbXRdKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBpZiAoY2Fwc19zdHIpIHsKLSAgICBHc3RDYXBzICpjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHNfc3RyKTsKLSAgICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgcGFub3JhbWEsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0gIHJldHVybiBwYW5vcmFtYTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfcGFub3JhbWFfczE2X20gKGdpbnQgbWV0aG9kLCBnZmxvYXQgcGFuKQotewotICBHc3RFbGVtZW50ICpwYW5vcmFtYTsKLSAgcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYSAobXNyY3RlbXBsYXRlLCAwLCBQQU5PUkFNQV9TMTZfTU9OT19DQVBTX1NUUklORyk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBhbm9yYW1hKSwgIm1ldGhvZCIsIG1ldGhvZCwgInBhbm9yYW1hIiwgcGFuLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwYW5vcmFtYSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBHU1RfREVCVUcgKCJwYW5vcmFtYShtb25vKSByZWFkeSIpOwotCi0gIHJldHVybiBwYW5vcmFtYTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfcGFub3JhbWFfZjMyX20gKGdpbnQgbWV0aG9kLCBnZmxvYXQgcGFuKQotewotICBHc3RFbGVtZW50ICpwYW5vcmFtYTsKLSAgcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYSAobXNyY3RlbXBsYXRlLCAxLCBQQU5PUkFNQV9GMzJfTU9OT19DQVBTX1NUUklORyk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBhbm9yYW1hKSwgIm1ldGhvZCIsIG1ldGhvZCwgInBhbm9yYW1hIiwgcGFuLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwYW5vcmFtYSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBHU1RfREVCVUcgKCJwYW5vcmFtYShtb25vKSByZWFkeSIpOwotCi0gIHJldHVybiBwYW5vcmFtYTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfcGFub3JhbWFfczE2X3MgKGdpbnQgbWV0aG9kLCBnZmxvYXQgcGFuKQotewotICBHc3RFbGVtZW50ICpwYW5vcmFtYTsKLSAgcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYSAoc3NyY3RlbXBsYXRlLCAwLCBQQU5PUkFNQV9TMTZfU1RFUkVPX0NBUFNfU1RSSU5HKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocGFub3JhbWEpLCAibWV0aG9kIiwgbWV0aG9kLCAicGFub3JhbWEiLCBwYW4sIE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBhbm9yYW1hLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIEdTVF9ERUJVRyAoInBhbm9yYW1hKHN0ZXJlbykgcmVhZHkiKTsKLQotICByZXR1cm4gcGFub3JhbWE7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX3Bhbm9yYW1hX2YzMl9zIChnaW50IG1ldGhvZCwgZ2Zsb2F0IHBhbikKLXsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWE7Ci0gIHBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWEgKHNzcmN0ZW1wbGF0ZSwgMSwgUEFOT1JBTUFfRjMyX1NURVJFT19DQVBTX1NUUklORyk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBhbm9yYW1hKSwgIm1ldGhvZCIsIG1ldGhvZCwgInBhbm9yYW1hIiwgcGFuLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwYW5vcmFtYSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBHU1RfREVCVUcgKCJwYW5vcmFtYShzdGVyZW8pIHJlYWR5Iik7Ci0KLSAgcmV0dXJuIHBhbm9yYW1hOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9wYW5vcmFtYSAoR3N0RWxlbWVudCAqIHBhbm9yYW1hKQotewotICBHU1RfREVCVUcgKCJjbGVhbmluZyB1cCIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBhbm9yYW1hLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChwYW5vcmFtYSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAocGFub3JhbWEpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAocGFub3JhbWEpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLXNldHVwX2J1ZmZlciAoZ3BvaW50ZXIgZGF0YSwgZ3NpemUgc2l6ZSkKLXsKLSAgcmV0dXJuIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLCBkYXRhLCBzaXplLCAwLAotICAgICAgc2l6ZSwgTlVMTCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wYW5vcmFtYSAoZ3BvaW50ZXIgaW5fZGF0YSwgZ3NpemUgaW5fc2l6ZSwgZ3BvaW50ZXIgb3V0X2RhdGEsIGdzaXplIG91dF9zaXplKQotewotICBHc3RCdWZmZXIgKmluLCAqb3V0OwotCi0gIGluID0gc2V0dXBfYnVmZmVyIChpbl9kYXRhLCBpbl9zaXplKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dCA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2V4dHJhY3QgKG91dCwgMCwgb3V0X2RhdGEsIG91dF9zaXplKSA9PSBvdXRfc2l6ZSk7Ci19Ci0KLS8qIHRoZSB0ZXN0cyAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZWZfY291bnRzKQotewotICBHc3RFbGVtZW50ICpwYW5vcmFtYTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgZ2ludDE2IGluWzJdID0geyAxNjM4NCwgLTI1NiB9OwotCi0gIHBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWEgKG1zcmN0ZW1wbGF0ZSwgMCwgUEFOT1JBTUFfUzE2X01PTk9fQ0FQU19TVFJJTkcpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwYW5vcmFtYSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gc2V0dXBfYnVmZmVyIChpbiwgc2l6ZW9mIChpbikpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBidXQgaXQgZW5kcyB1cCBiZWluZyBjb2xsZWN0ZWQgb24gdGhlIGdsb2JhbCBidWZmZXIgbGlzdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX2lmIChpbmJ1ZmZlciA9PSBvdXRidWZmZXIpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGFub3JhbWEsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChwYW5vcmFtYSwgInBhbm9yYW1hIiwgMSk7Ci0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93cm9uZ19jYXBzKQotewotICBHc3RFbGVtZW50ICpwYW5vcmFtYTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlcjsKLSAgZ2ludDE2IGluWzJdID0geyAxNjM4NCwgLTI1NiB9OwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hIChtc3JjdGVtcGxhdGUsIDAsIE5VTEwpOwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwYW5vcmFtYSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGluYnVmZmVyID0gc2V0dXBfYnVmZmVyIChpbiwgc2l6ZW9mIChpbikpOwotICBnc3RfYnVmZmVyX3JlZiAoaW5idWZmZXIpOwotCi0gIC8qIHNldCBhIGJ1cyBoZXJlIHNvIHdlIGF2b2lkIGdldHRpbmcgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzICovCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHBhbm9yYW1hLCBidXMpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoUEFOT1JBTUFfV1JPTkdfQ0FQU19TVFJJTkcpOwotICAvKiB0aGlzIGFjdHVhbGx5IHN1Y2NlZWRzLCBiZWNhdXNlIHRoZSBjYXBzIGV2ZW50IGlzIHN0aWNreSAqLwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgcGFub3JhbWEsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGFuIGVycm9yIGJlY2F1c2UgaXQgY2FuJ3QgbmVnb3RpYXRlIHdpdGggd3JvbmcgY2FwcyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlciksCi0gICAgICBHU1RfRkxPV19OT1RfTkVHT1RJQVRFRCk7Ci0gIC8qIC4uLiBhbmQgdGhlIGJ1ZmZlciB3b3VsZCBoYXZlIGJlZW4gbG9zdCBpZiB3ZSBkaWRuJ3QgcmVmIGl0IG91cnNlbHZlcyAqLwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGluYnVmZmVyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDApOwotCi0gIC8qIHBhbm9yYW1hX3NldF9jYXBzIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCBzaW5jZSBiYXNldHJhbnNmb3JtIGNhdWdodAotICAgKiB0aGUgbmVnb3RpYXRpb24gcHJvYmxlbSAqLwotICBmYWlsX2lmICgobWVzc2FnZSA9IGdzdF9idXNfcG9wIChidXMpKSAhPSBOVUxMKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHBhbm9yYW1hLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVzKSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGFub3JhbWEsIEdTVF9TVEFURV9OVUxMKTsKLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHByb2Nlc3NpbmcgZm9yIG1ldGhvZD1wc3kgKi8KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfczE2X21vbm9fbWlkZGxlKQotewotICBnaW50MTYgaW5bMl0gPSB7IDE2Mzg0LCAtMjU2IH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IDgxOTIsIDgxOTIsIC0xMjgsIC0xMjggfTsKLSAgZ2ludDE2IHJlc1s0XTsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYV9zMTZfbSAoMCwgMC4wKTsKLQotICBkb19wYW5vcmFtYSAoaW4sIHNpemVvZiAoaW4pLCByZXMsIHNpemVvZiAocmVzKSk7Ci0KLSAgR1NUX0lORk8gKCJleHAuICUrNWQgJSs1ZCAlKzVkICUrNWQiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKHJlcywgb3V0LCBzaXplb2YgKHJlcykpID09IDApOwotCi0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zMTZfbW9ub19sZWZ0KQotewotICBnaW50MTYgaW5bMl0gPSB7IDE2Mzg0LCAtMjU2IH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IDE2Mzg0LCAwLCAtMjU2LCAwIH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X20gKDAsIC0xLjApOwotCi0gIGRvX3Bhbm9yYW1hIChpbiwgc2l6ZW9mIChpbiksIHJlcywgc2l6ZW9mIChyZXMpKTsKLQotICBHU1RfSU5GTyAoImV4cC4gJSs1ZCAlKzVkICUrNWQgJSs1ZCIsIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSk7Ci0gIEdTVF9JTkZPICgicmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAocmVzLCBvdXQsIHNpemVvZiAocmVzKSkgPT0gMCk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3MxNl9tb25vX3JpZ2h0KQotewotICBnaW50MTYgaW5bMl0gPSB7IDE2Mzg0LCAtMjU2IH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IDAsIDE2Mzg0LCAwLCAtMjU2IH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X20gKDAsIDEuMCk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIG91dCwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfczE2X3N0ZXJlb19taWRkbGUpCi17Ci0gIGdpbnQxNiBpbls0XSA9IHsgMTYzODQsIC0yNTYsIDgxOTIsIDEyOCB9OwotICBnaW50MTYgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX3MxNl9zICgwLCAwLjApOwotCi0gIGRvX3Bhbm9yYW1hIChpbiwgc2l6ZW9mIChpbiksIHJlcywgc2l6ZW9mIChyZXMpKTsKLQotICBHU1RfSU5GTyAoImV4cC4gJSs1ZCAlKzVkICUrNWQgJSs1ZCIsIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIGluLCBzaXplb2YgKHJlcykpID09IDApOwotCi0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zMTZfc3RlcmVvX2xlZnQpCi17Ci0gIGdpbnQxNiBpbls0XSA9IHsgMTYzODQsIC0yNTYsIDgxOTIsIDEyOCB9OwotICBnaW50MTYgb3V0WzRdID0geyAxNjM4NCAtIDI1NiwgMCwgODE5MiArIDEyOCwgMCB9OwotICBnaW50MTYgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX3MxNl9zICgwLCAtMS4wKTsKLQotICBkb19wYW5vcmFtYSAoaW4sIHNpemVvZiAoaW4pLCByZXMsIHNpemVvZiAocmVzKSk7Ci0KLSAgR1NUX0lORk8gKCJleHAuICUrNWQgJSs1ZCAlKzVkICUrNWQiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs1ZCAlKzVkICUrNWQgJSs1ZCIsIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGZhaWxfdW5sZXNzIChtZW1jbXAgKHJlcywgb3V0LCBzaXplb2YgKHJlcykpID09IDApOwotCi0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zMTZfc3RlcmVvX3JpZ2h0KQotewotICBnaW50MTYgaW5bNF0gPSB7IDE2Mzg0LCAtMjU2LCA4MTkyLCAxMjggfTsKLSAgZ2ludDE2IG91dFs0XSA9IHsgMCwgLTI1NiArIDE2Mzg0LCAwLCAxMjggKyA4MTkyIH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X3MgKDAsIDEuMCk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIG91dCwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZjMyX21vbm9fbWlkZGxlKQotewotICBnZmxvYXQgaW5bMl0gPSB7IDAuNSwgLTAuMiB9OwotICBnZmxvYXQgb3V0WzRdID0geyAwLjI1LCAwLjI1LCAtMC4xLCAtMC4xIH07Ci0gIGdmbG9hdCByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfZjMyX20gKDAsIDAuMCk7Ci0gIGdpbnQgaTsKLQotICBkb19wYW5vcmFtYSAoaW4sIHNpemVvZiAoaW4pLCByZXMsIHNpemVvZiAocmVzKSk7Ci0KLSAgR1NUX0lORk8gKCJleHAuICUrNC4yZiAlKzQuMmYgJSs0LjJmICUrNC4yZiIsIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSk7Ci0gIEdTVF9JTkZPICgicmVhbCAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgIGZhaWxfdW5sZXNzIChyZXNbaV0gPT0gb3V0W2ldLCAiZGlmZmVyZW5jZSBhdCBwb3M9JWQiLCBpKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZjMyX21vbm9fbGVmdCkKLXsKLSAgZ2Zsb2F0IGluWzJdID0geyAwLjUsIC0wLjIgfTsKLSAgZ2Zsb2F0IG91dFs0XSA9IHsgMC41LCAwLjAsIC0wLjIsIDAuMCB9OwotICBnZmxvYXQgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX2YzMl9tICgwLCAtMS4wKTsKLSAgZ2ludCBpOwotCi0gIGRvX3Bhbm9yYW1hIChpbiwgc2l6ZW9mIChpbiksIHJlcywgc2l6ZW9mIChyZXMpKTsKLQotICBHU1RfSU5GTyAoImV4cC4gJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNC4yZiAlKzQuMmYgJSs0LjJmICUrNC4yZiIsIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgZmFpbF91bmxlc3MgKHJlc1tpXSA9PSBvdXRbaV0sICJkaWZmZXJlbmNlIGF0IHBvcz0lZCIsIGkpOwotCi0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mMzJfbW9ub19yaWdodCkKLXsKLSAgZ2Zsb2F0IGluWzJdID0geyAwLjUsIC0wLjIgfTsKLSAgZ2Zsb2F0IG91dFs0XSA9IHsgMC4wLCAwLjUsIDAuMCwgLTAuMiB9OwotICBnZmxvYXQgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX2YzMl9tICgwLCAxLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBmYWlsX3VubGVzcyAocmVzW2ldID09IG91dFtpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2YzMl9zdGVyZW9fbWlkZGxlKQotewotICBnZmxvYXQgaW5bNF0gPSB7IDAuNSwgLTAuMiwgMC4yNSwgMC4xIH07Ci0gIGdmbG9hdCByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfZjMyX3MgKDAsIDAuMCk7Ci0gIGdpbnQgaTsKLQotICBkb19wYW5vcmFtYSAoaW4sIHNpemVvZiAoaW4pLCByZXMsIHNpemVvZiAocmVzKSk7Ci0KLSAgR1NUX0lORk8gKCJleHAuICUrNC4yZiAlKzQuMmYgJSs0LjJmICUrNC4yZiIsIGluWzBdLCBpblsxXSwgaW5bMl0sIGluWzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNC4yZiAlKzQuMmYgJSs0LjJmICUrNC4yZiIsIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgZmFpbF91bmxlc3MgKHJlc1tpXSA9PSBpbltpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2YzMl9zdGVyZW9fbGVmdCkKLXsKLSAgZ2Zsb2F0IGluWzRdID0geyAwLjUsIC0wLjIsIDAuMjUsIDAuMSB9OwotICBnZmxvYXQgb3V0WzRdID0geyAwLjUgLSAwLjIsIDAuMCwgMC4yNSArIDAuMSwgMC4wIH07Ci0gIGdmbG9hdCByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfZjMyX3MgKDAsIC0xLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBmYWlsX3VubGVzcyAocmVzW2ldID09IG91dFtpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2YzMl9zdGVyZW9fcmlnaHQpCi17Ci0gIGdmbG9hdCBpbls0XSA9IHsgMC41LCAtMC4yLCAwLjI1LCAwLjEgfTsKLSAgZ2Zsb2F0IG91dFs0XSA9IHsgMC4wLCAtMC4yICsgMC41LCAwLjAsIDAuMSArIDAuMjUgfTsKLSAgZ2Zsb2F0IHJlc1s0XTsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYV9mMzJfcyAoMCwgMS4wKTsKLSAgZ2ludCBpOwotCi0gIGRvX3Bhbm9yYW1hIChpbiwgc2l6ZW9mIChpbiksIHJlcywgc2l6ZW9mIChyZXMpKTsKLQotICBHU1RfSU5GTyAoImV4cC4gJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNC4yZiAlKzQuMmYgJSs0LjJmICUrNC4yZiIsIHJlc1swXSwgcmVzWzFdLCByZXNbMl0sIHJlc1szXSk7Ci0gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgZmFpbF91bmxlc3MgKHJlc1tpXSA9PSBvdXRbaV0sICJkaWZmZXJlbmNlIGF0IHBvcz0lZCIsIGkpOwotCi0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBwcm9jZXNzaW5nIGZvciBtZXRob2Q9c2ltcGxlICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3MxNl9tb25vX21pZGRsZV9zaW1wbGUpCi17Ci0gIGdpbnQxNiBpblsyXSA9IHsgMTYzODQsIC0yNTYgfTsKLSAgZ2ludDE2IG91dFs0XSA9IHsgMTYzODQsIDE2Mzg0LCAtMjU2LCAtMjU2IH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X20gKDEsIDAuMCk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIG91dCwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfczE2X21vbm9fbGVmdF9zaW1wbGUpCi17Ci0gIGdpbnQxNiBpblsyXSA9IHsgMTYzODQsIC0yNTYgfTsKLSAgZ2ludDE2IG91dFs0XSA9IHsgMTYzODQsIDAsIC0yNTYsIDAgfTsKLSAgZ2ludDE2IHJlc1s0XTsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYV9zMTZfbSAoMSwgLTEuMCk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIG91dCwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfczE2X21vbm9fcmlnaHRfc2ltcGxlKQotewotICBnaW50MTYgaW5bMl0gPSB7IDE2Mzg0LCAtMjU2IH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IDAsIDE2Mzg0LCAwLCAtMjU2IH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X20gKDEsIDEuMCk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIG91dCwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfczE2X3N0ZXJlb19taWRkbGVfc2ltcGxlKQotewotICBnaW50MTYgaW5bNF0gPSB7IDE2Mzg0LCAtMjU2LCA4MTkyLCAxMjggfTsKLSAgZ2ludDE2IHJlc1s0XTsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYV9zMTZfcyAoMSwgMC4wKTsKLQotICBkb19wYW5vcmFtYSAoaW4sIHNpemVvZiAoaW4pLCByZXMsIHNpemVvZiAocmVzKSk7Ci0KLSAgR1NUX0lORk8gKCJleHAuICUrNWQgJSs1ZCAlKzVkICUrNWQiLCBpblswXSwgaW5bMV0sIGluWzJdLCBpblszXSk7Ci0gIEdTVF9JTkZPICgicmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAocmVzLCBpbiwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfczE2X3N0ZXJlb19sZWZ0X3NpbXBsZSkKLXsKLSAgZ2ludDE2IGluWzRdID0geyAxNjM4NCwgLTI1NiwgODE5MiwgMTI4IH07Ci0gIGdpbnQxNiBvdXRbNF0gPSB7IDE2Mzg0LCAwLCA4MTkyLCAwIH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X3MgKDEsIC0xLjApOwotCi0gIGRvX3Bhbm9yYW1hIChpbiwgc2l6ZW9mIChpbiksIHJlcywgc2l6ZW9mIChyZXMpKTsKLQotICBHU1RfSU5GTyAoImV4cC4gJSs1ZCAlKzVkICUrNWQgJSs1ZCIsIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSk7Ci0gIEdTVF9JTkZPICgicmVhbCAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZmFpbF91bmxlc3MgKG1lbWNtcCAocmVzLCBvdXQsIHNpemVvZiAocmVzKSkgPT0gMCk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3MxNl9zdGVyZW9fcmlnaHRfc2ltcGxlKQotewotICBnaW50MTYgaW5bNF0gPSB7IDE2Mzg0LCAtMjU2LCA4MTkyLCAxMjggfTsKLSAgZ2ludDE2IG91dFs0XSA9IHsgMCwgLTI1NiwgMCwgMTI4IH07Ci0gIGdpbnQxNiByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfczE2X3MgKDEsIDEuMCk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzVkICUrNWQgJSs1ZCAlKzVkIiwgb3V0WzBdLCBvdXRbMV0sIG91dFsyXSwgb3V0WzNdKTsKLSAgR1NUX0lORk8gKCJyZWFsICUrNWQgJSs1ZCAlKzVkICUrNWQiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmYWlsX3VubGVzcyAobWVtY21wIChyZXMsIG91dCwgc2l6ZW9mIChyZXMpKSA9PSAwKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mMzJfbW9ub19taWRkbGVfc2ltcGxlKQotewotICBnZmxvYXQgaW5bMl0gPSB7IDAuNSwgLTAuMiB9OwotICBnZmxvYXQgb3V0WzRdID0geyAwLjUsIDAuNSwgLTAuMiwgLTAuMiB9OwotICBnZmxvYXQgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX2YzMl9tICgxLCAwLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBmYWlsX3VubGVzcyAocmVzW2ldID09IG91dFtpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2YzMl9tb25vX2xlZnRfc2ltcGxlKQotewotICBnZmxvYXQgaW5bMl0gPSB7IDAuNSwgLTAuMiB9OwotICBnZmxvYXQgb3V0WzRdID0geyAwLjUsIDAuMCwgLTAuMiwgMC4wIH07Ci0gIGdmbG9hdCByZXNbNF07Ci0gIEdzdEVsZW1lbnQgKnBhbm9yYW1hID0gc2V0dXBfcGFub3JhbWFfZjMyX20gKDEsIC0xLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBmYWlsX3VubGVzcyAocmVzW2ldID09IG91dFtpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2YzMl9tb25vX3JpZ2h0X3NpbXBsZSkKLXsKLSAgZ2Zsb2F0IGluWzJdID0geyAwLjUsIC0wLjIgfTsKLSAgZ2Zsb2F0IG91dFs0XSA9IHsgMC4wLCAwLjUsIDAuMCwgLTAuMiB9OwotICBnZmxvYXQgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX2YzMl9tICgxLCAxLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBmYWlsX3VubGVzcyAocmVzW2ldID09IG91dFtpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2YzMl9zdGVyZW9fbWlkZGxlX3NpbXBsZSkKLXsKLSAgZ2Zsb2F0IGluWzRdID0geyAwLjUsIC0wLjIsIDAuMjUsIDAuMSB9OwotICBnZmxvYXQgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX2YzMl9zICgxLCAwLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBpblswXSwgaW5bMV0sIGluWzJdLCBpblszXSk7Ci0gIEdTVF9JTkZPICgicmVhbCAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgIGZhaWxfdW5sZXNzIChyZXNbaV0gPT0gaW5baV0sICJkaWZmZXJlbmNlIGF0IHBvcz0lZCIsIGkpOwotCi0gIGNsZWFudXBfcGFub3JhbWEgKHBhbm9yYW1hKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mMzJfc3RlcmVvX2xlZnRfc2ltcGxlKQotewotICBnZmxvYXQgaW5bNF0gPSB7IDAuNSwgLTAuMiwgMC4yNSwgMC4xIH07Ci0gIGdmbG9hdCBvdXRbNF0gPSB7IDAuNSwgMC4wLCAwLjI1LCAwLjAgfTsKLSAgZ2Zsb2F0IHJlc1s0XTsKLSAgR3N0RWxlbWVudCAqcGFub3JhbWEgPSBzZXR1cF9wYW5vcmFtYV9mMzJfcyAoMSwgLTEuMCk7Ci0gIGdpbnQgaTsKLQotICBkb19wYW5vcmFtYSAoaW4sIHNpemVvZiAoaW4pLCByZXMsIHNpemVvZiAocmVzKSk7Ci0KLSAgR1NUX0lORk8gKCJleHAuICUrNC4yZiAlKzQuMmYgJSs0LjJmICUrNC4yZiIsIG91dFswXSwgb3V0WzFdLCBvdXRbMl0sIG91dFszXSk7Ci0gIEdTVF9JTkZPICgicmVhbCAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCByZXNbMF0sIHJlc1sxXSwgcmVzWzJdLCByZXNbM10pOwotICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgIGZhaWxfdW5sZXNzIChyZXNbaV0gPT0gb3V0W2ldLCAiZGlmZmVyZW5jZSBhdCBwb3M9JWQiLCBpKTsKLQotICBjbGVhbnVwX3Bhbm9yYW1hIChwYW5vcmFtYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZjMyX3N0ZXJlb19yaWdodF9zaW1wbGUpCi17Ci0gIGdmbG9hdCBpbls0XSA9IHsgMC41LCAtMC4yLCAwLjI1LCAwLjEgfTsKLSAgZ2Zsb2F0IG91dFs0XSA9IHsgMC4wLCAtMC4yLCAwLjAsIDAuMSB9OwotICBnZmxvYXQgcmVzWzRdOwotICBHc3RFbGVtZW50ICpwYW5vcmFtYSA9IHNldHVwX3Bhbm9yYW1hX2YzMl9zICgxLCAxLjApOwotICBnaW50IGk7Ci0KLSAgZG9fcGFub3JhbWEgKGluLCBzaXplb2YgKGluKSwgcmVzLCBzaXplb2YgKHJlcykpOwotCi0gIEdTVF9JTkZPICgiZXhwLiAlKzQuMmYgJSs0LjJmICUrNC4yZiAlKzQuMmYiLCBvdXRbMF0sIG91dFsxXSwgb3V0WzJdLCBvdXRbM10pOwotICBHU1RfSU5GTyAoInJlYWwgJSs0LjJmICUrNC4yZiAlKzQuMmYgJSs0LjJmIiwgcmVzWzBdLCByZXNbMV0sIHJlc1syXSwgcmVzWzNdKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICBmYWlsX3VubGVzcyAocmVzW2ldID09IG91dFtpXSwgImRpZmZlcmVuY2UgYXQgcG9zPSVkIiwgaSk7Ci0KLSAgY2xlYW51cF9wYW5vcmFtYSAocGFub3JhbWEpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLXBhbm9yYW1hX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInBhbm9yYW1hIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZl9jb3VudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd3JvbmdfY2Fwcyk7Ci0gIC8qIHByb2Nlc3NpbmcgZm9yIG1ldGhvZD1wc3kgKi8KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3MxNl9tb25vX21pZGRsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zMTZfbW9ub19sZWZ0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3MxNl9tb25vX3JpZ2h0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3MxNl9zdGVyZW9fbWlkZGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3MxNl9zdGVyZW9fbGVmdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zMTZfc3RlcmVvX3JpZ2h0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2YzMl9tb25vX21pZGRsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mMzJfbW9ub19sZWZ0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2YzMl9tb25vX3JpZ2h0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2YzMl9zdGVyZW9fbWlkZGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2YzMl9zdGVyZW9fbGVmdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mMzJfc3RlcmVvX3JpZ2h0KTsKLSAgLyogcHJvY2Vzc2luZyBmb3IgbWV0aG9kPXNpbXBsZSAqLwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfczE2X21vbm9fbWlkZGxlX3NpbXBsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zMTZfbW9ub19sZWZ0X3NpbXBsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zMTZfbW9ub19yaWdodF9zaW1wbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfczE2X3N0ZXJlb19taWRkbGVfc2ltcGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3MxNl9zdGVyZW9fbGVmdF9zaW1wbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfczE2X3N0ZXJlb19yaWdodF9zaW1wbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZjMyX21vbm9fbWlkZGxlX3NpbXBsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mMzJfbW9ub19sZWZ0X3NpbXBsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mMzJfbW9ub19yaWdodF9zaW1wbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZjMyX3N0ZXJlb19taWRkbGVfc2ltcGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2YzMl9zdGVyZW9fbGVmdF9zaW1wbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZjMyX3N0ZXJlb19yaWdodF9zaW1wbGUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocGFub3JhbWEpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNiYW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMzVhYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXVkaW93c2luY2JhbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDExMzcgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBhdWRpb3dzaW5jYmFuZC5jOiBVbml0IHRlc3QgZm9yIHRoZSBhdWRpb3dzaW5jYmFuZCBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLUdzdFBhZCAqbXlzcmNwYWQsICpteXNpbmtwYWQ7Ci0KLSNkZWZpbmUgQVVESU9fV1NJTkNfQkFORF9DQVBTX1NUUklOR18zMiAgICAgICAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoRjMyKSAiLCAiIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAiCi0KLSNkZWZpbmUgQVVESU9fV1NJTkNfQkFORF9DQVBTX1NUUklOR182NCAgICAgICAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoRjY0KSAiLCAiIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAiCi0KLSNkZWZpbmUgRk9STUFUUyAieyAiR1NUX0FVRElPX05FIChGMzIpIiwiR1NUX0FVRElPX05FIChGNjQpIiB9IgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUUyAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJyYXRlID0gKGludCkgNDQxMDAiKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUUyAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJyYXRlID0gKGludCkgNDQxMDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX2F1ZGlvd3NpbmNiYW5kICh2b2lkKQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9hdWRpb3dzaW5jYmFuZCIpOwotICBhdWRpb3dzaW5jYmFuZCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiYXVkaW93c2luY2JhbmQiKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoYXVkaW93c2luY2JhbmQsICZzcmN0ZW1wbGF0ZSk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoYXVkaW93c2luY2JhbmQsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBhdWRpb3dzaW5jYmFuZDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfYXVkaW93c2luY2JhbmQgKEdzdEVsZW1lbnQgKiBhdWRpb3dzaW5jYmFuZCkKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9hdWRpb3dzaW5jYmFuZCIpOwotCi0gIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoYXVkaW93c2luY2JhbmQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGF1ZGlvd3NpbmNiYW5kKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGF1ZGlvd3NpbmNiYW5kKTsKLX0KLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIGVyYXNlZCB3aXRoIGJhbmRwYXNzIG1vZGUgYW5kIGEgCi0gKiAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMzJfYnBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxlbmd0aCIsIDMxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb3dzaW5jYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdmbG9hdCkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLQotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0JBTkRfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2JhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLQotICBmb3IgKG5vZGUgPSBidWZmZXJzOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgIGdpbnQgYnVmZmVyX2xlbmd0aDsKLQotICAgIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGEpID09IE5VTEwpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICAgIGJ1ZmZlcl9sZW5ndGggPSBtYXAuc2l6ZSAvIHNpemVvZiAoZ2Zsb2F0KTsKLQotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0KLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNiYW5kIChhdWRpb3dzaW5jYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgdGhlIGJhbmQgY2VudGVyIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZQotICogYW5kIGEgMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0XzMyX2JwXzExMDI1aHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvd3NpbmNiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2JhbmQgPSBzZXR1cF9hdWRpb3dzaW5jYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgIm1vZGUiLCAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibGVuZ3RoIiwgMzEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDQpIHsKLSAgICBpbltpXSA9IDAuMDsKLSAgICBpbltpICsgMV0gPSAxLjA7Ci0gICAgaW5baSArIDJdID0gMC4wOwotICAgIGluW2kgKyAzXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fV1NJTkNfQkFORF9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZmxvYXQpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBmYWlsX3VubGVzcyAocm1zID49IDAuNCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIGVyYXNlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8zMl9icF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxlbmd0aCIsIDMxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb3dzaW5jYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdmbG9hdCkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19CQU5EX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdmbG9hdCk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGZhaWxfdW5sZXNzIChybXMgPD0gMC4zKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNiYW5kIChhdWRpb3dzaW5jYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8zMl9icl8waHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvd3NpbmNiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2JhbmQgPSBzZXR1cF9hdWRpb3dzaW5jYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRyZWplY3QgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsZW5ndGgiLCAzMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fV1NJTkNfQkFORF9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZmxvYXQpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHRoZSBiYW5kIGNlbnRlciBpcyBlcmFzZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUKLSAqIGFuZCBhIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8zMl9icl8xMTAyNWh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibGVuZ3RoIiwgMzEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkgKz0gNCkgewotICAgIGluW2ldID0gMC4wOwotICAgIGluW2kgKyAxXSA9IDEuMDsKLSAgICBpbltpICsgMl0gPSAwLjA7Ci0gICAgaW5baSArIDNdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19CQU5EX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdmbG9hdCk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGZhaWxfdW5sZXNzIChybXMgPD0gMC4zNSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8zMl9icl8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcmVqZWN0ICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibGVuZ3RoIiwgMzEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNiYW5kLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibG93ZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wIC0gMTAwMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgInVwcGVyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCArIDEwMDAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0JBTkRfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2JhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLQotICBmb3IgKG5vZGUgPSBidWZmZXJzOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgIGdpbnQgYnVmZmVyX2xlbmd0aDsKLQotICAgIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGEpID09IE5VTEwpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICByZXMgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICAgIGJ1ZmZlcl9sZW5ndGggPSBtYXAuc2l6ZSAvIHNpemVvZiAoZ2Zsb2F0KTsKLSAgICBybXMgPSAwLjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9sZW5ndGg7IGkrKykKLSAgICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gICAgcm1zID0gc3FydCAocm1zIC8gYnVmZmVyX2xlbmd0aCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW93c2luY2JhbmQgKGF1ZGlvd3NpbmNiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwgc2l6ZSBhcmUgaGFuZGxlZAotICogY29ycmVjdGx5IHdpdGhvdXQgYWNjZXNzaW5nIHdyb25nIG1lbW9yeSBhcmVhcyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMzJfc21hbGxfYnVmZmVyKQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbjsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxlbmd0aCIsIDEwMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSA0NDEwMCAvIDE2LjAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyA0NDEwMCAvIDE2LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjAgKiBzaXplb2YgKGdmbG9hdCkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fV1NJTkNfQkFORF9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotCi0KLQotCi0KLQotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgZXJhc2VkIHdpdGggYmFuZHBhc3MgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9icF8waHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvd3NpbmNiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxlbmd0aCIsIDMxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb3dzaW5jYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0JBTkRfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2JhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLQotICBmb3IgKG5vZGUgPSBidWZmZXJzOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgIGdpbnQgYnVmZmVyX2xlbmd0aDsKLQotICAgIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGEpID09IE5VTEwpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdkb3VibGUpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IHRoZSBiYW5kIGNlbnRlciBpcyBwcmVzZXJ2ZWQgd2l0aCBiYW5kcmVqZWN0IG1vZGUKLSAqIGFuZCBhIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9icF8xMTAyNWh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR0xpc3QgKm5vZGU7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBhdWRpb3dzaW5jYmFuZCA9IHNldHVwX2F1ZGlvd3NpbmNiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsZW5ndGgiLCAzMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSA0KSB7Ci0gICAgaW5baV0gPSAwLjA7Ci0gICAgaW5baSArIDFdID0gMS4wOwotICAgIGluW2kgKyAyXSA9IDAuMDsKLSAgICBpbltpICsgM10gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0JBTkRfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2JhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLQotICBmb3IgKG5vZGUgPSBidWZmZXJzOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgIGdpbnQgYnVmZmVyX2xlbmd0aDsKLQotICAgIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGEpID09IE5VTEwpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdkb3VibGUpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBmYWlsX3VubGVzcyAocm1zID49IDAuNCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIGVyYXNlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9icF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR0xpc3QgKm5vZGU7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBhdWRpb3dzaW5jYmFuZCA9IHNldHVwX2F1ZGlvd3NpbmNiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsZW5ndGgiLCAzMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19CQU5EX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZG91YmxlKTsKLSAgICBybXMgPSAwLjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9sZW5ndGg7IGkrKykKLSAgICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gICAgcm1zID0gc3FydCAocm1zIC8gYnVmZmVyX2xlbmd0aCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjMpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW93c2luY2JhbmQgKGF1ZGlvd3NpbmNiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgcHJlc2VydmVkIHdpdGggYmFuZHJlamVjdCBtb2RlIGFuZCBhIAotICogMjAwMEh6IGZyZXF1ZW5jeSBiYW5kIGFyb3VuZCByYXRlLzQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0XzY0X2JyXzBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW93c2luY2JhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2JhbmQgPSBzZXR1cF9hdWRpb3dzaW5jYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRyZWplY3QgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsZW5ndGgiLCAzMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19CQU5EX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZG91YmxlKTsKLSAgICBybXMgPSAwLjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9sZW5ndGg7IGkrKykKLSAgICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gICAgcm1zID0gc3FydCAocm1zIC8gYnVmZmVyX2xlbmd0aCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW93c2luY2JhbmQgKGF1ZGlvd3NpbmNiYW5kKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCB0aGUgYmFuZCBjZW50ZXIgaXMgZXJhc2VkIHdpdGggYmFuZHJlamVjdCBtb2RlCi0gKiBhbmQgYSAyMDAwSHogZnJlcXVlbmN5IGJhbmQgYXJvdW5kIHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfNjRfYnJfMTEwMjVoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW93c2luY2JhbmQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2JhbmQgPSBzZXR1cF9hdWRpb3dzaW5jYmFuZCAoKTsKLSAgLyogU2V0IHRvIGJhbmRyZWplY3QgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAibW9kZSIsIDEsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsZW5ndGgiLCAzMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSAxMDAwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2JhbmQpLCAidXBwZXItZnJlcXVlbmN5IiwKLSAgICAgIDQ0MTAwIC8gNC4wICsgMTAwMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDQpIHsKLSAgICBpbltpXSA9IDAuMDsKLSAgICBpbltpICsgMV0gPSAxLjA7Ci0gICAgaW5baSArIDJdID0gMC4wOwotICAgIGluW2kgKyAzXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fV1NJTkNfQkFORF9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jYmFuZCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICAgIGJ1ZmZlcl9sZW5ndGggPSBtYXAuc2l6ZSAvIHNpemVvZiAoZ2RvdWJsZSk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGZhaWxfdW5sZXNzIChybXMgPD0gMC4zNSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIHByZXNlcnZlZCB3aXRoIGJhbmRyZWplY3QgbW9kZSBhbmQgYSAKLSAqIDIwMDBIeiBmcmVxdWVuY3kgYmFuZCBhcm91bmQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9icl8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jYmFuZDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR0xpc3QgKm5vZGU7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBhdWRpb3dzaW5jYmFuZCA9IHNldHVwX2F1ZGlvd3NpbmNiYW5kICgpOwotICAvKiBTZXQgdG8gYmFuZHJlamVjdCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxlbmd0aCIsIDMxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb3dzaW5jYmFuZCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxvd2VyLWZyZXF1ZW5jeSIsCi0gICAgICA0NDEwMCAvIDQuMCAtIDEwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyAxMDAwLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEwMjQgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0JBTkRfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2JhbmQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLQotICBmb3IgKG5vZGUgPSBidWZmZXJzOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotICAgIGdpbnQgYnVmZmVyX2xlbmd0aDsKLQotICAgIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGEpID09IE5VTEwpOwotCi0gICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdkb3VibGUpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jYmFuZCAoYXVkaW93c2luY2JhbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCBzaXplIGFyZSBoYW5kbGVkCi0gKiBjb3JyZWN0bHkgd2l0aG91dCBhY2Nlc3Npbmcgd3JvbmcgbWVtb3J5IGFyZWFzICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9zbWFsbF9idWZmZXIpCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvd3NpbmNiYW5kOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbjsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNiYW5kID0gc2V0dXBfYXVkaW93c2luY2JhbmQgKCk7Ci0gIC8qIFNldCB0byBiYW5kcGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNiYW5kKSwgImxlbmd0aCIsIDEwMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2JhbmQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJsb3dlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgLSA0NDEwMCAvIDE2LjAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jYmFuZCksICJ1cHBlci1mcmVxdWVuY3kiLAotICAgICAgNDQxMDAgLyA0LjAgKyA0NDEwMCAvIDE2LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMjAgKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19CQU5EX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNiYW5kLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNiYW5kIChhdWRpb3dzaW5jYmFuZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWF1ZGlvd3NpbmNiYW5kX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImF1ZGlvd3NpbmNiYW5kIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzMyX2JwXzBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8zMl9icF8xMTAyNWh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzMyX2JwXzIyMDUwaHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfMzJfYnJfMGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzMyX2JyXzExMDI1aHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfMzJfYnJfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8zMl9zbWFsbF9idWZmZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfNjRfYnBfMGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzY0X2JwXzExMDI1aHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfNjRfYnBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF82NF9icl8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfNjRfYnJfMTEwMjVoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF82NF9icl8yMjA1MGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzY0X3NtYWxsX2J1ZmZlcik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChhdWRpb3dzaW5jYmFuZCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdWRpb3dzaW5jbGltaXQuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjYzY2Y5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1ZGlvd3NpbmNsaW1pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogYXVkaW93c2luY2xpbWl0LmM6IFVuaXQgdGVzdCBmb3IgdGhlIGF1ZGlvd3NpbmNsaW1pdCBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0jZGVmaW5lIEFVRElPX1dTSU5DX0xJTUlUX0NBUFNfU1RSSU5HXzMyICAgICAgICAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChGMzIpICIsICIgICBcCi0gICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgInJhdGUgPSAoaW50KSA0NDEwMCIKLQotI2RlZmluZSBBVURJT19XU0lOQ19MSU1JVF9DQVBTX1NUUklOR182NCAgICAgICAgICAgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORSAoRjY0KSAiLCAiICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgICAgICAgICAgICAgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAiCi0KLSNkZWZpbmUgRk9STUFUUyAieyAiR1NUX0FVRElPX05FIChGMzIpIiwiR1NUX0FVRElPX05FIChGNjQpIiB9IgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUUyAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJyYXRlID0gKGludCkgNDQxMDAiKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgRk9STUFUUyAiLCAiCi0gICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJyYXRlID0gKGludCkgNDQxMDAiKQotICAgICk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX2F1ZGlvd3NpbmNsaW1pdCAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW93c2luY2xpbWl0OwotCi0gIEdTVF9ERUJVRyAoInNldHVwX2F1ZGlvd3NpbmNsaW1pdCIpOwotICBhdWRpb3dzaW5jbGltaXQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImF1ZGlvd3NpbmNsaW1pdCIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChhdWRpb3dzaW5jbGltaXQsICZzcmN0ZW1wbGF0ZSk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoYXVkaW93c2luY2xpbWl0LCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICByZXR1cm4gYXVkaW93c2luY2xpbWl0OwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9hdWRpb3dzaW5jbGltaXQgKEdzdEVsZW1lbnQgKiBhdWRpb3dzaW5jbGltaXQpCi17Ci0gIEdTVF9ERUJVRyAoImNsZWFudXBfYXVkaW93c2luY2xpbWl0Iik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChhdWRpb3dzaW5jbGltaXQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGF1ZGlvd3NpbmNsaW1pdCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChhdWRpb3dzaW5jbGltaXQpOwotfQotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIHByZXNlcnZlZCB3aXRoIGxvd3Bhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMzJfbHBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jbGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW4sICpyZXMsIHJtczsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgR0xpc3QgKm5vZGU7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBhdWRpb3dzaW5jbGltaXQgPSBzZXR1cF9hdWRpb3dzaW5jbGltaXQgKCk7Ci0gIC8qIFNldCB0byBsb3dwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJsZW5ndGgiLCAyMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2xpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgLyogY3V0b2ZmID0gc2FtcGxpbmcgcmF0ZSAvIDQsIGRhdGEgPSAwICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMjggKiBzaXplb2YgKGdmbG9hdCkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0xJTUlUX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZmxvYXQpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotICAgIGZhaWxfdW5sZXNzIChybXMgPj0gMC45KTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jbGltaXQgKGF1ZGlvd3NpbmNsaW1pdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgcmF0ZS8yIGlzIGVyYXNlZCB3aXRoIGxvd3Bhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMzJfbHBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW93c2luY2xpbWl0OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2xpbWl0ID0gc2V0dXBfYXVkaW93c2luY2xpbWl0ICgpOwotICAvKiBTZXQgdG8gbG93cGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAibGVuZ3RoIiwgMjEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMjggKiBzaXplb2YgKGdmbG9hdCkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpICs9IDIpIHsKLSAgICBpbltpXSA9IDEuMDsKLSAgICBpbltpICsgMV0gPSAtMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0xJTUlUX0NBUFNfU1RSSU5HXzMyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZmxvYXQpOwotICAgIHJtcyA9IDAuMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2xlbmd0aDsgaSsrKQotICAgICAgcm1zICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgICBybXMgPSBzcXJ0IChybXMgLyBidWZmZXJfbGVuZ3RoKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotICAgIGZhaWxfdW5sZXNzIChybXMgPD0gMC4xKTsKLSAgfQotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9hdWRpb3dzaW5jbGltaXQgKGF1ZGlvd3NpbmNsaW1pdCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGVzdCBpZiBkYXRhIGNvbnRhaW5pbmcgb25seSBvbmUgZnJlcXVlbmN5IGNvbXBvbmVudAotICogYXQgMCBpcyBlcmFzZWQgd2l0aCBoaWdocGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF8zMl9ocF8waHopCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvd3NpbmNsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Zsb2F0ICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNsaW1pdCA9IHNldHVwX2F1ZGlvd3NpbmNsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGhpZ2hwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJsZW5ndGgiLCAyMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2xpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2xpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEyOCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLSAgICBpbltpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fV1NJTkNfTElNSVRfQ0FQU19TVFJJTkdfMzIpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2xpbWl0LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdmbG9hdCk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNsaW1pdCAoYXVkaW93c2luY2xpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgcHJlc2VydmVkIHdpdGggaGlnaHBhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMzJfaHBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW93c2luY2xpbWl0OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZmxvYXQgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2xpbWl0ID0gc2V0dXBfYXVkaW93c2luY2xpbWl0ICgpOwotICAvKiBTZXQgdG8gaGlnaHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2xpbWl0KSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2xpbWl0KSwgImxlbmd0aCIsIDIxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb3dzaW5jbGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTI4ICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19MSU1JVF9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jbGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgICBidWZmZXJfbGVuZ3RoID0gbWFwLnNpemUgLyBzaXplb2YgKGdmbG9hdCk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNsaW1pdCAoYXVkaW93c2luY2xpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBrZXJuZWwgc2l6ZSBhcmUgaGFuZGxlZAotICogY29ycmVjdGx5IHdpdGhvdXQgYWNjZXNzaW5nIHdyb25nIG1lbW9yeSBhcmVhcyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMzJfc21hbGxfYnVmZmVyKQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jbGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW47Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBhdWRpb3dzaW5jbGltaXQgPSBzZXR1cF9hdWRpb3dzaW5jbGltaXQgKCk7Ci0gIC8qIFNldCB0byBsb3dwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJsZW5ndGgiLCAxMDEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQotICAgIGluW2ldID0gMS4wOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19MSU1JVF9DQVBTX1NUUklOR18zMik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jbGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNsaW1pdCAoYXVkaW93c2luY2xpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCAwIGlzIHByZXNlcnZlZCB3aXRoIGxvd3Bhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfNjRfbHBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jbGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2xpbWl0ID0gc2V0dXBfYXVkaW93c2luY2xpbWl0ICgpOwotICAvKiBTZXQgdG8gbG93cGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAibGVuZ3RoIiwgMjEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIC8qIGN1dG9mZiA9IHNhbXBsaW5nIHJhdGUgLyA0LCBkYXRhID0gMCAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTI4ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0xJTUlUX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICAgIGJ1ZmZlcl9sZW5ndGggPSBtYXAuc2l6ZSAvIHNpemVvZiAoZ2RvdWJsZSk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA+PSAwLjkpOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNsaW1pdCAoYXVkaW93c2luY2xpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgZXJhc2VkIHdpdGggbG93cGFzcyBtb2RlIGFuZCBhIGN1dG9mZgotICogYXQgcmF0ZS80ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9scF8yMjA1MGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jbGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2xpbWl0ID0gc2V0dXBfYXVkaW93c2luY2xpbWl0ICgpOwotICAvKiBTZXQgdG8gbG93cGFzcyAqLwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAibW9kZSIsIDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAibGVuZ3RoIiwgMjEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMjggKiBzaXplb2YgKGdkb3VibGUpKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkgKz0gMikgewotICAgIGluW2ldID0gMS4wOwotICAgIGluW2kgKyAxXSA9IC0xLjA7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fV1NJTkNfTElNSVRfQ0FQU19TVFJJTkdfNjQpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgYXVkaW93c2luY2xpbWl0LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPj0gMSk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZG91YmxlKTsKLSAgICBybXMgPSAwLjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9sZW5ndGg7IGkrKykKLSAgICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gICAgcm1zID0gc3FydCAocm1zIC8gYnVmZmVyX2xlbmd0aCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgICBmYWlsX3VubGVzcyAocm1zIDw9IDAuMSk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW93c2luY2xpbWl0IChhdWRpb3dzaW5jbGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgZGF0YSBjb250YWluaW5nIG9ubHkgb25lIGZyZXF1ZW5jeSBjb21wb25lbnQKLSAqIGF0IDAgaXMgZXJhc2VkIHdpdGggaGlnaHBhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfNjRfaHBfMGh6KQotewotICBHc3RFbGVtZW50ICphdWRpb3dzaW5jbGltaXQ7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdkb3VibGUgKmluLCAqcmVzLCBybXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdMaXN0ICpub2RlOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgYXVkaW93c2luY2xpbWl0ID0gc2V0dXBfYXVkaW93c2luY2xpbWl0ICgpOwotICAvKiBTZXQgdG8gaGlnaHBhc3MgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2xpbWl0KSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2xpbWl0KSwgImxlbmd0aCIsIDIxLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdWRpb3dzaW5jbGltaXQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChhdWRpb3dzaW5jbGltaXQpLCAiY3V0b2ZmIiwgNDQxMDAgLyA0LjAsIE5VTEwpOwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTI4ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0xJTUlUX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotCi0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0gICAgZ2ludCBidWZmZXJfbGVuZ3RoOwotCi0gICAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICAgIGJ1ZmZlcl9sZW5ndGggPSBtYXAuc2l6ZSAvIHNpemVvZiAoZ2RvdWJsZSk7Ci0gICAgcm1zID0gMC4wOwotICAgIGZvciAoaSA9IDA7IGkgPCBidWZmZXJfbGVuZ3RoOyBpKyspCi0gICAgICBybXMgKz0gcmVzW2ldICogcmVzW2ldOwotICAgIHJtcyA9IHNxcnQgKHJtcyAvIGJ1ZmZlcl9sZW5ndGgpOwotICAgIGdzdF9idWZmZXJfdW5tYXAgKG91dGJ1ZmZlciwgJm1hcCk7Ci0gICAgZmFpbF91bmxlc3MgKHJtcyA8PSAwLjEpOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2F1ZGlvd3NpbmNsaW1pdCAoYXVkaW93c2luY2xpbWl0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0IGlmIGRhdGEgY29udGFpbmluZyBvbmx5IG9uZSBmcmVxdWVuY3kgY29tcG9uZW50Ci0gKiBhdCByYXRlLzIgaXMgcHJlc2VydmVkIHdpdGggaGlnaHBhc3MgbW9kZSBhbmQgYSBjdXRvZmYKLSAqIGF0IHJhdGUvNCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfNjRfaHBfMjIwNTBoeikKLXsKLSAgR3N0RWxlbWVudCAqYXVkaW93c2luY2xpbWl0OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zOwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGF1ZGlvd3NpbmNsaW1pdCA9IHNldHVwX2F1ZGlvd3NpbmNsaW1pdCAoKTsKLSAgLyogU2V0IHRvIGhpZ2hwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJtb2RlIiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJsZW5ndGgiLCAyMSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXVkaW93c2luY2xpbWl0LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW93c2luY2xpbWl0KSwgImN1dG9mZiIsIDQ0MTAwIC8gNC4wLCBOVUxMKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEyOCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDEyODsgaSArPSAyKSB7Ci0gICAgaW5baV0gPSAxLjA7Ci0gICAgaW5baSArIDFdID0gLTEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19XU0lOQ19MSU1JVF9DQVBTX1NUUklOR182NCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdWRpb3dzaW5jbGltaXQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA+PSAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0KLSAgZm9yIChub2RlID0gYnVmZmVyczsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBnaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KLSAgICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLQotICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gICAgYnVmZmVyX2xlbmd0aCA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZG91YmxlKTsKLSAgICBybXMgPSAwLjA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9sZW5ndGg7IGkrKykKLSAgICAgIHJtcyArPSByZXNbaV0gKiByZXNbaV07Ci0gICAgcm1zID0gc3FydCAocm1zIC8gYnVmZmVyX2xlbmd0aCk7Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgICBmYWlsX3VubGVzcyAocm1zID49IDAuOSk7Ci0gIH0KLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW93c2luY2xpbWl0IChhdWRpb3dzaW5jbGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFRlc3QgaWYgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGtlcm5lbCBzaXplIGFyZSBoYW5kbGVkCi0gKiBjb3JyZWN0bHkgd2l0aG91dCBhY2Nlc3Npbmcgd3JvbmcgbWVtb3J5IGFyZWFzICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF82NF9zbWFsbF9idWZmZXIpCi17Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvd3NpbmNsaW1pdDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW47Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBhdWRpb3dzaW5jbGltaXQgPSBzZXR1cF9hdWRpb3dzaW5jbGltaXQgKCk7Ci0gIC8qIFNldCB0byBsb3dwYXNzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJtb2RlIiwgMCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJsZW5ndGgiLCAxMDEsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF1ZGlvd3NpbmNsaW1pdCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGF1ZGlvd3NpbmNsaW1pdCksICJjdXRvZmYiLCA0NDEwMCAvIDQuMCwgTlVMTCk7Ci0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyMCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW4gPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCi0gICAgaW5baV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX1dTSU5DX0xJTUlUX0NBUFNfU1RSSU5HXzY0KTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF1ZGlvd3NpbmNsaW1pdCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID49IDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfYXVkaW93c2luY2xpbWl0IChhdWRpb3dzaW5jbGltaXQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1hdWRpb3dzaW5jbGltaXRfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiYXVkaW93c2luY2xpbWl0Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzMyX2xwXzBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8zMl9scF8yMjA1MGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzMyX2hwXzBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8zMl9ocF8yMjA1MGh6KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzMyX3NtYWxsX2J1ZmZlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF82NF9scF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfNjRfbHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF82NF9ocF8waHopOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfNjRfaHBfMjIwNTBoeik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF82NF9zbWFsbF9idWZmZXIpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoYXVkaW93c2luY2xpbWl0KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F1dG9kZXRlY3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIzNjk3Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdXRvZGV0ZWN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgdGhlIGF1dG9kZXRlY3QgZWxlbWVudHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNlc2luay5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0vKiBkdW1teSBzaW5rIGVsZW1lbnRzICovCi0KLSNkZWZpbmUgR1NUX1RZUEVfRkFLRV9BVURJT19TSU5LIChnc3RfZmFrZV9hdWRpb19zaW5rX2dldF90eXBlICgpKQotdHlwZWRlZiBHc3RCYXNlU2luayBHc3RGYWtlQXVkaW9TaW5rOwotdHlwZWRlZiBHc3RCYXNlU2lua0NsYXNzIEdzdEZha2VBdWRpb1NpbmtDbGFzczsKLUdUeXBlIGdzdF9mYWtlX2F1ZGlvX3NpbmtfZ2V0X3R5cGUgKHZvaWQpOwotR19ERUZJTkVfVFlQRSAoR3N0RmFrZUF1ZGlvU2luaywgZ3N0X2Zha2VfYXVkaW9fc2luaywgR1NUX1RZUEVfQkFTRV9TSU5LKTsKLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX2F1ZGlvX3NpbmtfY2xhc3NfaW5pdCAoR3N0RmFrZUF1ZGlvU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBwYWRfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgICAgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywKLSAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX0FVRElPX0NBUFNfTUFLRSAoR1NUX0FVRElPX0ZPUk1BVFNfQUxMKSAiOyAiKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkZha2UgQXVkaW8gU2luayIsCi0gICAgICAiU2luay9BdWRpbyIsICJBdWRpbyBzaW5rIGZha2UgZm9yIHRlc3RpbmciLCAiU3RlZmFuIFNhdWVyIik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmcGFkX3RlbXBsYXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX2F1ZGlvX3NpbmtfaW5pdCAoR3N0RmFrZUF1ZGlvU2luayAqIHNpbmspCi17Ci19Ci0KLSNkZWZpbmUgR1NUX1RZUEVfRkFLRV9WSURFT19TSU5LIChnc3RfZmFrZV92aWRlb19zaW5rX2dldF90eXBlICgpKQotdHlwZWRlZiBHc3RCYXNlU2luayBHc3RGYWtlVmlkZW9TaW5rOwotdHlwZWRlZiBHc3RCYXNlU2lua0NsYXNzIEdzdEZha2VWaWRlb1NpbmtDbGFzczsKLUdUeXBlIGdzdF9mYWtlX3ZpZGVvX3NpbmtfZ2V0X3R5cGUgKHZvaWQpOwotR19ERUZJTkVfVFlQRSAoR3N0RmFrZVZpZGVvU2luaywgZ3N0X2Zha2VfdmlkZW9fc2luaywgR1NUX1RZUEVfQkFTRV9TSU5LKTsKLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCAoR3N0RmFrZVZpZGVvU2lua0NsYXNzICoga2xhc3MpCi17Ci0gIEdzdEVsZW1lbnRDbGFzcyAqZ3N0ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTIChrbGFzcyk7Ci0gIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBwYWRfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgICAgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywKLSAgICAgIEdTVF9TVEFUSUNfQ0FQUyAoR1NUX1ZJREVPX0NBUFNfTUFLRSAoR1NUX1ZJREVPX0ZPUk1BVFNfQUxMKSAiOyAiKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X3N0YXRpY19tZXRhZGF0YSAoZ3N0ZWxlbWVudF9jbGFzcywgIkZha2UgVmlkZW8gU2luayIsCi0gICAgICAiU2luay9WaWRlbyIsICJWaWRlbyBzaW5rIGZha2UgZm9yIHRlc3RpbmciLCAiU3RlZmFuIFNhdWVyIik7Ci0gIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9zdGF0aWNfcGFkX3RlbXBsYXRlIChnc3RlbGVtZW50X2NsYXNzLCAmcGFkX3RlbXBsYXRlKTsKLX0KLQotc3RhdGljIHZvaWQKLWdzdF9mYWtlX3ZpZGVvX3NpbmtfaW5pdCAoR3N0RmFrZVZpZGVvU2luayAqIHNpbmspCi17Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotcGx1Z2luX2luaXQgKEdzdFBsdWdpbiAqIHBsdWdpbikKLXsKLSAgaWYgKCFnc3RfZWxlbWVudF9yZWdpc3RlciAocGx1Z2luLCAiZmFrZWF1ZGlvc2luayIsIEdfTUFYSU5ULAotICAgICAgICAgIEdTVF9UWVBFX0ZBS0VfQVVESU9fU0lOSykpCi0gICAgcmV0dXJuIEZBTFNFOwotICBpZiAoIWdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJmYWtldmlkZW9zaW5rIiwgR19NQVhJTlQsCi0gICAgICAgICAgR1NUX1RZUEVfRkFLRV9WSURFT19TSU5LKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0gIHJldHVybiBUUlVFOwotfQotCi0vKiB0ZXN0cyAqLwotCi1zdGF0aWMgdm9pZAotdGVzdF9wbHVnc19iZXN0IChHc3RFbGVtZW50ICogc2luaywgR1R5cGUgZXhwZWN0ZWQpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR0xpc3QgKmNoaWxkOwotCi0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1JFQURZKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsIE5VTEwpOwotCi0gIGNoaWxkID0gR1NUX0JJTl9DSElMRFJFTiAoc2luayk7Ci0gIGZhaWxfdW5sZXNzIChjaGlsZCAhPSBOVUxMLCAibm8gZWxlbWVudHMgcGx1Z2dlZCIpOwotICBja19hc3NlcnRfaW50X2VxIChnX2xpc3RfbGVuZ3RoIChjaGlsZCksIDEpOwotICBmYWlsX3VubGVzcyAoR19PQkpFQ1RfVFlQRSAoY2hpbGQpLCBleHBlY3RlZCk7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdXRvdmlkZW9zaW5rX3BsdWdzX2Jlc3QpCi17Ci0gIEdzdEVsZW1lbnQgKnNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvdmlkZW9zaW5rIiwgTlVMTCk7Ci0KLSAgdGVzdF9wbHVnc19iZXN0IChzaW5rLCBHU1RfVFlQRV9GQUtFX1ZJREVPX1NJTkspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1dG9hdWRpb3NpbmtfcGx1Z3NfYmVzdCkKLXsKLSAgR3N0RWxlbWVudCAqc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCBOVUxMKTsKLQotICB0ZXN0X3BsdWdzX2Jlc3QgKHNpbmssIEdTVF9UWVBFX0ZBS0VfQVVESU9fU0lOSyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXRlc3RfZ2hvc3RwYWRfZXJyb3JfY2FzZSAoR3N0Q2FwcyAqIGNhcHMsIEdzdEVsZW1lbnQgKiBzaW5rLAotICAgIGNvbnN0IGdjaGFyICogZmFrZV9zaW5rX25hbWUpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpmaWx0ZXIsICpmYWtlc2luazsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgTlVMTCk7Ci0gIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKGZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBmaWx0ZXIsIHNpbmssIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIGZpbHRlciksICJGYWlsZWQgdG8gbGluayBzcmMgdG8gZmlsdGVyIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChmaWx0ZXIsIHNpbmspLAotICAgICAgIkZhaWxlZCB0byBsaW5rIGZpbHRlciB0byBzaW5rIik7Ci0KLSAgLyogdGhpcyBzaG91bGQgZmFpbCwgdGhlcmUncyBubyBzdWNoIGZvcm1hdCAqLwotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgaWYgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgLyogbWFrZSBzdXJlIHdlIHdhaXQgZm9yIHRoZSBhY3R1YWwgc3VjY2Vzcy9mYWlsdXJlIHRvIGhhcHBlbiAqLwotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIHN0YXRlX3JldCA9Ci0gICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsICZzdGF0ZSwgJnN0YXRlLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgfQotICBmYWtlc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHNpbmspLCBmYWtlX3NpbmtfbmFtZSk7Ci0gIGlmIChmYWtlc2luayAhPSBOVUxMKSB7Ci0gICAgLyogbm8gcmVhbCBzaW5rIGF2YWlsYWJsZSAqLwotICAgIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgICAicGlwZWxpbmUgX3NldF9zdGF0ZSgpIHRvIFBBVVNFRCBmYWlsZWQiKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChmYWtlc2luayk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogYXV0b3ZpZGVvc2luayBjb250YWlucyBhIHJlYWwgdmlkZW8gc2luayAqLwotICAgIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAotICAgICAgICAicGlwZWxpbmUgX3NldF9zdGF0ZSgpIHRvIFBBVVNFRCBzdWNjZWVkZWQgYnV0IHNob3VsZCBoYXZlIGZhaWxlZCIpOwotCi0gICAgLyogc28sIHdlIGhpdCBhbiBlcnJvciBhbmQgdHJ5IHRvIHNodXQgZG93biB0aGUgcGlwZWxpbmU7IHRoaXMgc2hvdWxkbid0Ci0gICAgICogZGVhZGxvY2sgb3IgYmxvY2sgYW55d2hlcmUgd2hlbiBhdXRvdmlkZW9zaW5rIHJlc2V0cyB0aGUgZ2hvc3RwYWQKLSAgICAgKiB0YXJnZXRzIGV0Yy4gKi8KLSAgfQotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgIlN0YXRlIGNoYW5nZSBvbiBwaXBlbGluZSBmYWlsZWQiKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1dG92aWRlb3NpbmtfZ2hvc3RwYWRfZXJyb3JfY2FzZSkKLXsKLSAgR3N0RWxlbWVudCAqc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG92aWRlb3NpbmsiLCBOVUxMKTsKLSAgR3N0Q2FwcyAqY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLAotICAgICAgIkFCQ0QiLCBOVUxMKTsKLQotICB0ZXN0X2dob3N0cGFkX2Vycm9yX2Nhc2UgKGNhcHMsIHNpbmssICJmYWtlLXZpZGVvLXNpbmsiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdXRvYXVkaW9zaW5rX2dob3N0cGFkX2Vycm9yX2Nhc2UpCi17Ci0gIEdzdEVsZW1lbnQgKnNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvYXVkaW9zaW5rIiwgTlVMTCk7Ci0gIEdzdENhcHMgKmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywKLSAgICAgICJBQkNEIiwgTlVMTCk7Ci0KLSAgdGVzdF9naG9zdHBhZF9lcnJvcl9jYXNlIChjYXBzLCBzaW5rLCAiZmFrZS1hdWRpby1zaW5rIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWF1dG9kZXRlY3Rfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiYXV0b2RldGVjdCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgZ3N0X3BsdWdpbl9yZWdpc3Rlcl9zdGF0aWMgKEdTVF9WRVJTSU9OX01BSk9SLAotICAgICAgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgICAiYXV0b2RldGVjdC10ZXN0IiwKLSAgICAgICJhdXRvZGV0ZWN0IHRlc3QgZWxlbWVudHMiLAotICAgICAgcGx1Z2luX2luaXQsCi0gICAgICBWRVJTSU9OLCAiTEdQTCIsIFBBQ0tBR0UsIFBBQ0tBR0VfTkFNRSwKLSAgICAgICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZyIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXV0b3ZpZGVvc2lua19wbHVnc19iZXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F1dG9hdWRpb3NpbmtfcGx1Z3NfYmVzdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdXRvdmlkZW9zaW5rX2dob3N0cGFkX2Vycm9yX2Nhc2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXV0b2F1ZGlvc2lua19naG9zdHBhZF9lcnJvcl9jYXNlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGF1dG9kZXRlY3QpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvYXZpbXV4LmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJkMjdmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9hdmltdXguYworKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGF2aW11eAotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0jZGVmaW5lIEFVRElPX0NBUFNfU1RSSU5HICJhdWRpby94LWFjMywgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyYXRlID0gKGludCkgODAwMCIKLSNkZWZpbmUgVklERU9fQ0FQU19TVFJJTkcgInZpZGVvL21wZWcsIG1wZWd2ZXJzaW9uID0gKGludCkgNCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzdGVtc3RyZWFtID0gKGJvb2wpIGZhbHNlLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCA9IChpbnQpIDM4NCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0ID0gKGludCkgMjg4LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIDI1LzEiCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LW1zdmlkZW8iKSk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdmlkZW90ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFZJREVPX0NBUFNfU1RSSU5HKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNhdWRpb3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQVVESU9fQ0FQU19TVFJJTkcpKTsKLQotCi0vKiBzZXR1cCBhbmQgdGVhcmRvd24gbmVlZHMgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBtdXhlciAqLwotc3RhdGljIEdzdFBhZCAqCi1zZXR1cF9zcmNfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsYXRlLCBHc3RDYXBzICogY2FwcywgY29uc3QgZ2NoYXIgKiBzaW5rbmFtZSkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJzZXR0aW5nIHVwIHNlbmRpbmcgcGFkIik7Ci0gIC8qIHNlbmRpbmcgcGFkICovCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICh0ZW1wbGF0ZSwgInNyYyIpOwotICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSBzcmNwYWQiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMSk7Ci0KLSAgaWYgKCEoc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCBzaW5rbmFtZSkpKQotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIHNpbmtuYW1lKTsKLSAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzaW5rIHBhZCBmcm9tICVzIiwKLSAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgLyogcmVmZXJlbmNlcyBhcmUgb3duZWQgYnk6IDEpIHVzLCAyKSBhdmltdXgsIDMpIGNvbGxlY3QgcGFkcyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDMpOwotICBpZiAoY2FwcykKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZXRfY2FwcyAoc3JjcGFkLCBjYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLAotICAgICAgIkNvdWxkIG5vdCBsaW5rIHNvdXJjZSBhbmQgJXMgc2luayBwYWRzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsgICAvKiBiZWNhdXNlIHdlIGdvdCBpdCBoaWdoZXIgdXAgKi8KLQotICAvKiByZWZlcmVuY2VzIGFyZSBvd25lZCBieTogMSkgYXZpbXV4LCAyKSBjb2xsZWN0IHBhZHMgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAyKTsKLQotICByZXR1cm4gc3JjcGFkOwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd25fc3JjX3BhZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGNvbnN0IGdjaGFyICogc2lua25hbWUpCi17Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLSAgZ2NoYXIgKnBhZG5hbWU7Ci0KLSAgLyogY2xlYW4gdXAgZmxvYXRpbmcgc3JjIHBhZCAqLwotICBwYWRuYW1lID0gZ19zdHJkdXAgKHNpbmtuYW1lKTsKLSAgbWVtY3B5IChzdHJjaHIgKHBhZG5hbWUsICclJyksICIwIiwgMik7Ci0gIGlmICghKHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgcGFkbmFtZSkpKQotICAgIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGVsZW1lbnQsIHBhZG5hbWUpOwotICBnX2ZyZWUgKHBhZG5hbWUpOwotICAvKiBwYWQgcmVmcyBoZWxkIGJ5IDEpIGF2aW11eCAyKSBjb2xsZWN0cGFkcyBhbmQgMykgdXMgKHRocm91Z2ggX2dldCkgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAzKTsKLSAgc3JjcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoc2lua3BhZCk7Ci0KLSAgZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0KLSAgLyogYWZ0ZXIgdW5saW5raW5nLCBwYWQgcmVmcyBzdGlsbCBoZWxkIGJ5Ci0gICAqIDEpIGF2aW11eCBhbmQgMikgY29sbGVjdHBhZHMgYW5kIDMpIHVzICh0aHJvdWdoIF9nZXQpICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICAvKiBvbmUgbW9yZSByZWYgaXMgaGVsZCBieSBlbGVtZW50IGl0c2VsZiAqLwotCi0gIC8qIHBhZCByZWZzIGhlbGQgYnkgYm90aCBjcmVhdG9yIGFuZCB0aGlzIGZ1bmN0aW9uICh0aHJvdWdoIF9nZXRfcGVlcikgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfYXZpbXV4IChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHNyY3RlbXBsYXRlLCBjb25zdCBnY2hhciAqIHNpbmtuYW1lKQotewotICBHc3RFbGVtZW50ICphdmltdXg7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfYXZpbXV4Iik7Ci0gIGF2aW11eCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiYXZpbXV4Iik7Ci0gIG15c3JjcGFkID0gc2V0dXBfc3JjX3BhZCAoYXZpbXV4LCBzcmN0ZW1wbGF0ZSwgTlVMTCwgc2lua25hbWUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGF2aW11eCwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGF2aW11eDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfYXZpbXV4IChHc3RFbGVtZW50ICogYXZpbXV4LCBjb25zdCBnY2hhciAqIHNpbmtuYW1lKQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2F2aW11eCIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF2aW11eCwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgdGVhcmRvd25fc3JjX3BhZCAoYXZpbXV4LCBzaW5rbmFtZSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoYXZpbXV4KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGF2aW11eCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19hdmltdXhfcGFkIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHNyY3RlbXBsYXRlLAotICAgIGNvbnN0IGdjaGFyICogc3JjX2NhcHNfc3RyaW5nLCBjb25zdCBnY2hhciAqIGNodW5rX2lkLAotICAgIGNvbnN0IGdjaGFyICogc2lua25hbWUpCi17Ci0gIEdzdEVsZW1lbnQgKmF2aW11eDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgaW50IG51bV9idWZmZXJzOwotICBpbnQgaTsKLSAgZ3VpbnQ4IGRhdGEwWzRdID0gIlJJRkYiOwotICBndWludDggZGF0YTFbOF0gPSAiQVZJIExJU1QiOwotICBndWludDggZGF0YTJbOF0gPSAiaGRybGF2aWgiOwotICBndWludDggZGF0YTNbNF0gPSAiTElTVCI7Ci0gIGd1aW50OCBkYXRhNFs4XSA9ICJzdHJsc3RyaCI7Ci0gIGd1aW50OCBkYXRhNVs0XSA9ICJzdHJmIjsKLSAgZ3VpbnQ4IGRhdGE2WzRdID0gIkxJU1QiOwotICBndWludDggZGF0YTdbNF0gPSAibW92aSI7Ci0KLSAgYXZpbXV4ID0gc2V0dXBfYXZpbXV4IChzcmN0ZW1wbGF0ZSwgc2lua25hbWUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdmltdXgsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoc3JjX2NhcHNfc3RyaW5nKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGF2aW11eCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBudW1fYnVmZmVycyA9IGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpOwotICAvKiBhdCBsZWFzdCBleHBlY3QgYXZpIGhlYWRlciwgY2h1bmsgaGVhZGVyLCBjaHVuayBhbmQgcGFkZGluZyAqLwotICBmYWlsX3VubGVzcyAobnVtX2J1ZmZlcnMgPj0gNCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0gICAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dGJ1ZmZlcik7Ci0KLSAgICBzd2l0Y2ggKGkpIHsKLSAgICAgIGNhc2UgMDp7ICAgICAgICAgICAgICAgICAvKiBjaGVjayByaWZmIGhlYWRlciAqLwotICAgICAgICAvKiBhdmkgaGVhZGVyICovCi0gICAgICAgIEdzdE1hcEluZm8gbWFwOwotICAgICAgICBnc2l6ZSBzaXplOwotICAgICAgICBndWludDggKmRhdGE7Ci0KLSAgICAgICAgZ3N0X2J1ZmZlcl9tYXAgKG91dGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgZGF0YSA9IG1hcC5kYXRhOwotICAgICAgICBzaXplID0gbWFwLnNpemU7Ci0KLSAgICAgICAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgZGF0YTAsIHNpemVvZiAoZGF0YTApKSA9PSAwKTsKLSAgICAgICAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSArIDgsIGRhdGExLCBzaXplb2YgKGRhdGExKSkgPT0gMCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEgKyAyMCwgZGF0YTIsIHNpemVvZiAoZGF0YTIpKSA9PSAwKTsKLSAgICAgICAgLyogdmlkZW8gb3IgYXVkaW8gaGVhZGVyICovCi0gICAgICAgIGRhdGEgKz0gMzIgKyA1NjsKLSAgICAgICAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgZGF0YTMsIHNpemVvZiAoZGF0YTMpKSA9PSAwKTsKLSAgICAgICAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSArIDgsIGRhdGE0LCBzaXplb2YgKGRhdGE0KSkgPT0gMCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEgKyA3NiwgZGF0YTUsIHNpemVvZiAoZGF0YTUpKSA9PSAwKTsKLSAgICAgICAgLyogYXZpIGRhdGEgaGVhZGVyICovCi0gICAgICAgIGRhdGEgPSBtYXAuZGF0YTsKLSAgICAgICAgZGF0YSArPSBzaXplIC0gMTI7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEsIGRhdGE2LCBzaXplb2YgKGRhdGE2KSkgPT0gMCk7Ci0gICAgICAgIGRhdGEgKz0gODsKLSAgICAgICAgZmFpbF91bmxlc3MgKG1lbWNtcCAoZGF0YSwgZGF0YTcsIHNpemVvZiAoZGF0YTcpKSA9PSAwKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0YnVmZmVyLCAmbWFwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgLyogY2h1bmsgaGVhZGVyICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID09IDgpOwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgY2h1bmtfaWQsIDQpID09IDApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjoKLSAgICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dGJ1ZmZlcikgPT0gMSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgIC8qIGJ1ZmZlciB3ZSBwdXQgaW4sIG11c3QgYmUgcGFkZGVkIHRvIGV2ZW4gc2l6ZSAqLwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmZmVyKSA9PSAxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChvdXRidWZmZXIsICJvdXRidWZmZXIiLCAxKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotICAgIG91dGJ1ZmZlciA9IE5VTEw7Ci0gIH0KLQotICBjbGVhbnVwX2F2aW11eCAoYXZpbXV4LCBzaW5rbmFtZSk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmlkZW9fcGFkKQotewotICBjaGVja19hdmltdXhfcGFkICgmc3JjdmlkZW90ZW1wbGF0ZSwgVklERU9fQ0FQU19TVFJJTkcsICIwMGRiIiwgInZpZGVvXyV1Iik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdWRpb19wYWQpCi17Ci0gIGNoZWNrX2F2aW11eF9wYWQgKCZzcmNhdWRpb3RlbXBsYXRlLCBBVURJT19DQVBTX1NUUklORywgIjAwd2IiLCAiYXVkaW9fJXUiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1hdmltdXhfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiYXZpbXV4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZpZGVvX3BhZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdWRpb19wYWQpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoYXZpbXV4KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aXN1YnRpdGxlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9hdmlzdWJ0aXRsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjAwYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2F2aXN1YnRpdGxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBhdmlzdWJ0aXRsZQotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDc+IFRoaWpzIFZlcm1laXIgPHRoaWpzdmVybWVpckBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLS8qIEVsZW1lbnQtQ2hlY2tsaXN0LVZlcnNpb246IDUgKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1Hc3RQYWQgKm15c2lua3BhZDsKLUdzdFBhZCAqbXlzcmNwYWQ7Ci0KLWd1aW50OCBhdmlzdWJfdXRmXzhfd2l0aF9ib21bXSA9IHsKLSAgMHg0NywgMHg0MSwgMHg0MiwgMHgzMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywKLSAgMHgwMCwgMHg2YywgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4ZSwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHhlZiwgMHhiYiwgMHhiZiwgMHgzMSwgMHgwZCwgMHgwYSwgMHgzMCwKLSAgMHgzMCwgMHgzYSwgMHgzMCwgMHgzMCwgMHgzYSwgMHgzMCwgMHgzMCwgMHgyYywKLSAgMHgzMSwgMHgzMCwgMHgzMCwgMHgyMCwgMHgyZCwgMHgyZCwgMHgzZSwgMHgyMCwKLSAgMHgzMCwgMHgzMCwgMHgzYSwgMHgzMCwgMHgzMCwgMHgzYSwgMHgzMCwgMHgzMiwKLSAgMHgyYywgMHgzMCwgMHgzMCwgMHgzMCwgMHgwZCwgMHgwYSwgMHgzYywgMHg2MiwKLSAgMHgzZSwgMHg0MSwgMHg2ZSwgMHgyMCwgMHg1NSwgMHg1NCwgMHg0NiwgMHgzOCwKLSAgMHgyMCwgMHg1MywgMHg3NSwgMHg2MiwgMHg3NCwgMHg2OSwgMHg3NCwgMHg2YywKLSAgMHg2NSwgMHgyMCwgMHg3NywgMHg2OSwgMHg3NCwgMHg2OCwgMHgyMCwgMHg0MiwKLSAgMHg0ZiwgMHg0ZCwgMHgzYywgMHgyZiwgMHg2MiwgMHgzZSwgMHgwZCwgMHgwYSwKLSAgMHgwZCwgMHgwYSwgMHgzMiwgMHgwZCwgMHgwYSwgMHgzMCwgMHgzMCwgMHgzYSwKLSAgMHgzMCwgMHgzMCwgMHgzYSwgMHgzMCwgMHgzMiwgMHgyYywgMHgzMSwgMHgzMCwKLSAgMHgzMCwgMHgyMCwgMHgyZCwgMHgyZCwgMHgzZSwgMHgyMCwgMHgzMCwgMHgzMCwKLSAgMHgzYSwgMHgzMCwgMHgzMCwgMHgzYSwgMHgzMCwgMHgzNCwgMHgyYywgMHgzMCwKLSAgMHgzMCwgMHgzMCwgMHgwZCwgMHgwYSwgMHg1MywgMHg2ZiwgMHg2ZCwgMHg2NSwKLSAgMHg3NCwgMHg2OCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgyMCwgMHg2ZSwgMHg2ZiwKLSAgMHg2ZSwgMHg0MSwgMHg1MywgMHg0MywgMHg0OSwgMHg0OSwgMHgyMCwgMHgyZCwKLSAgMHgyMCwgMHhjMiwgMHhiNSwgMHhjMywgMHhiNiwgMHhjMywgMHhhNCwgMHhjMywKLSAgMHhiYywgMHhjMywgMHg5ZiwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYQotfTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtfdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXN1YnRpdGxlIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtc3VidGl0bGUtYXZpIikKLSAgICApOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9hdmlzdWJ0aXRsZSAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqYXZpc3VidGl0bGU7Ci0gIEdzdENhcHMgKnNyY2NhcHM7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfYXZpc3VidGl0bGUiKTsKLSAgYXZpc3VidGl0bGUgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImF2aXN1YnRpdGxlIik7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoYXZpc3VidGl0bGUsICZzaW5rX3RlbXBsYXRlKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoYXZpc3VidGl0bGUsICZzcmNfdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBzcmNjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtc3VidGl0bGUtYXZpIik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBhdmlzdWJ0aXRsZSwgc3JjY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotICByZXR1cm4gYXZpc3VidGl0bGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX2F2aXN1YnRpdGxlIChHc3RFbGVtZW50ICogYXZpc3VidGl0bGUpCi17Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChhdmlzdWJ0aXRsZSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChhdmlzdWJ0aXRsZSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChhdmlzdWJ0aXRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja193cm9uZ19idWZmZXIgKGd1aW50OCAqIGRhdGEsIGd1aW50IGxlbmd0aCkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgbGVuZ3RoLCAwKTsKLSAgR3N0RWxlbWVudCAqYXZpc3VidGl0bGUgPSBzZXR1cF9hdmlzdWJ0aXRsZSAoKTsKLQotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZmZlciwgMCwgZGF0YSwgbGVuZ3RoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYXZpc3VidGl0bGUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcik7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgImluYnVmZmVyIiwgMik7Ci0gIC8qIHB1c2ggdGhlIGJyb2tlbiBidWZmZXIgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfRVJST1IsCi0gICAgICAiYWNjZXB0ZWQgYSBicm9rZW4gYnVmZmVyIik7Ci0gIC8qIGNoZWNrIGlmIHdlIGhhdmUgdW5yZWZmZWQgdGhpcyBidWZmZXIgb24gZmFpbHVyZSAqLwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdmlzdWJ0aXRsZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0gIGNsZWFudXBfYXZpc3VidGl0bGUgKGF2aXN1YnRpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX2NvcnJlY3RfYnVmZmVyIChndWludDggKiBzcmNfZGF0YSwgZ3VpbnQgc3JjX3NpemUsIGd1aW50OCAqIGRzdF9kYXRhLAotICAgIGd1aW50IGRzdF9zaXplKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBzcmNfc2l6ZSwgMCk7Ci0gIEdzdEJ1ZmZlciAqbmV3QnVmZmVyOwotICBHc3RFbGVtZW50ICphdmlzdWJ0aXRsZSA9IHNldHVwX2F2aXN1YnRpdGxlICgpOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDAsICJCdWZmZXJzIGxpc3QgbmVlZHMgdG8gYmUgZW1wdHkiKTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChidWZmZXIsIDAsIHNyY19kYXRhLCBzcmNfc2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGF2aXN1YnRpdGxlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfVElNRSwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAyICogR1NUX1NFQ09ORCwgR1NUX1NFRUtfVFlQRV9TRVQsIDUgKiBHU1RfU0VDT05EKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGF2aXN1YnRpdGxlLCBldmVudCkgPT0gRkFMU0UsCi0gICAgICAiU2Vla2luZyBpcyBub3QgcG9zc2libGUgd2hlbiB0aGVyZSBpcyBubyBidWZmZXIgeWV0Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LLAotICAgICAgIm5vdCBhY2NlcHRlZCBhIGNvcnJlY3QgYnVmZmVyIik7Ci0gIC8qIHdlIGdhdmUgYXdheSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIsIGRvbid0IGFzc3VtZSBhbnl0aGluZyAqLwotICBidWZmZXIgPSBOVUxMOwotICAvKiBhIG5ldyBidWZmZXIgaXMgY3JlYXRlZCBpbiB0aGUgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSwKLSAgICAgICJObyBuZXcgYnVmZmVyIGluIHRoZSBidWZmZXJzIGxpc3QiKTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9USU1FLCBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDIgKiBHU1RfU0VDT05ELCBHU1RfU0VFS19UWVBFX1NFVCwgNSAqIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoYXZpc3VidGl0bGUsIGV2ZW50KSA9PSBUUlVFLAotICAgICAgInNlZWtpbmcgc2hvdWxkIGJlIHdvcmtpbmcgbm93Iik7Ci0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAyLAotICAgICAgIkFmdGVyIHNlZWtpbmcgd2UgbmVlZCBhbm90aGVyIGJ1ZmZlciBpbiB0aGUgYnVmZmVycyIpOwotICBuZXdCdWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG5ld0J1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxLCAiQnVmZmVycyBsaXN0IG5lZWRzIHRvIGJlIGVtcHR5Iik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChuZXdCdWZmZXIpID09IGRzdF9zaXplLAotICAgICAgInNpemUgb2YgdGhlIG5ldyBidWZmZXIgaXMgd3JvbmcgKCAlZCAhPSAlZCkiLAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAobmV3QnVmZmVyKSwgZHN0X3NpemUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG5ld0J1ZmZlciwgMCwgZHN0X2RhdGEsIGRzdF9zaXplKSA9PSAwLAotICAgICAgImRhdGEgb2YgdGhlIGJ1ZmZlciBpcyBub3QgY29ycmVjdCIpOwotICBnc3RfYnVmZmVyX3VucmVmIChuZXdCdWZmZXIpOwotICAvKiBmcmVlIHRoZSBidWZmZXIgZnJvbSBzZWVraW5nICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpKTsKLSAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIGJ1ZmZlcnMtPmRhdGEpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChhdmlzdWJ0aXRsZSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0gIGNsZWFudXBfYXZpc3VidGl0bGUgKGF2aXN1YnRpdGxlKTsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdmlzdWJ0aXRsZV9uZWdhdGl2ZSkKLXsKLSAgZ3VpbnQ4IHdyb25nX21hZ2ljW10gPQotICAgICAgeyAweDQ3LCAweDQxLCAweDQxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4MDAKLSAgfTsKLSAgZ3VpbnQ4IHdyb25nX2ZpeGVkX3dvcmRfMltdID0gewotICAgIDB4NDcsIDB4NDEsIDB4NDIsIDB4MzIsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MTAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywKLSAgICAweDAwLCAweDZjLCAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY4Ci0gIH07Ci0gIGd1aW50OCB3cm9uZ19sZW5ndGhfYWZ0ZXJfbmFtZVtdID0gewotICAgIDB4NDcsIDB4NDEsIDB4NDIsIDB4MzIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywKLSAgICAweDAwLCAweDZjLCAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY4Ci0gIH07Ci0gIGd1aW50OCB3cm9uZ19maXhlZF93b3JkXzRbXSA9IHsKLSAgICAweDQ3LCAweDQxLCAweDQyLCAweDMyLCAweDAwLCAweDAyLCAweDAwLCAweDEwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjcsCi0gICAgMHgwMCwgMHg2YywgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAxLCAweDhlLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4ZWYsIDB4YmIsIDB4YmYsIDB4MzEsIDB4MGQsIDB4MGEsIDB4MzAKLSAgfTsKLSAgZ3VpbnQ4IHdyb25nX3RvdGFsX2xlbmd0aFtdID0gewotICAgIDB4NDcsIDB4NDEsIDB4NDIsIDB4MzIsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MTAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywKLSAgICAweDAwLCAweDZjLCAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY4LAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4OGUsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHhlZiwgMHhiYiwgMHhiZiwgMHgzMSwgMHgwZCwgMHgwYSwgMHgzMAotICB9OwotICAvKiBzaXplIG9mIHRoZSBidWZmZXIgbXVzdCBiZSBsYXJnZXIgdGhhbiAxMSAqLwotICBjaGVja193cm9uZ19idWZmZXIgKGF2aXN1Yl91dGZfOF93aXRoX2JvbSwgMTEpOwotICAvKiBidWZmZXIgbXVzdCBzdGFydCB3aXRoICdHQUIyXDAnICovCi0gIGNoZWNrX3dyb25nX2J1ZmZlciAod3JvbmdfbWFnaWMsIDE0KTsKLSAgLyogbmV4dCB3b3JkIG11c3QgYmUgMiAqLwotICBjaGVja193cm9uZ19idWZmZXIgKHdyb25nX2ZpeGVkX3dvcmRfMiwgMjQpOwotICAvKiBsZW5ndGggbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lICsgMTcgKi8KLSAgY2hlY2tfd3JvbmdfYnVmZmVyICh3cm9uZ19sZW5ndGhfYWZ0ZXJfbmFtZSwgMjQpOwotICAvKiBuZXh0IHdvcmQgbXVzdCBiZSA0ICovCi0gIGNoZWNrX3dyb25nX2J1ZmZlciAod3JvbmdfZml4ZWRfd29yZF80LCAzNik7Ci0gIC8qIGNoZWNrIHdyb25nIHRvdGFsIGxlbmd0aCAqLwotICBjaGVja193cm9uZ19idWZmZXIgKHdyb25nX3RvdGFsX2xlbmd0aCwgMzYpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F2aXN1YnRpdGxlX3Bvc2l0aXZlKQotewotICBndWludDggYXZpc3ViX3V0Zl84X3dpdGhvdXRfYm9tW10gPSB7Ci0gICAgMHg0NywgMHg0MSwgMHg0MiwgMHgzMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDZlLCAweDAwLCAweDY3LAotICAgIDB4MDAsIDB4NmMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjgsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDMxLCAweDBkLCAweDBhLCAweDMwLAotICAgIDB4MzAsIDB4M2EsIDB4MzAsIDB4MzAsIDB4M2EsIDB4MzAsIDB4MzAsIDB4MmMsCi0gICAgMHgzMSwgMHgzMCwgMHgzMCwgMHgyMCwgMHgyZCwgMHgyZCwgMHgzZSwgMHgyMCwKLSAgICAweDMwLCAweDMwLCAweDNhLCAweDMwLCAweDMwLCAweDNhLCAweDMwLCAweDMyLAotICAgIDB4MmMsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MGQsIDB4MGEsIDB4M2MsIDB4NjIsCi0gICAgMHgzZSwgMHg0MSwgMHg2ZSwgMHgyMCwgMHg1NSwgMHg1NCwgMHg0NiwgMHgzOCwKLSAgICAweDIwLCAweDUzLCAweDc1LCAweDYyLCAweDc0LCAweDY5LCAweDc0LCAweDZjLAotICAgIDB4NjUsIDB4MjAsIDB4NzcsIDB4NjksIDB4NzQsIDB4NjgsIDB4MjAsIDB4NDIsCi0gICAgMHg0ZiwgMHg0ZCwgMHgzYywgMHgyZiwgMHg2MiwgMHgzZSwgMHgwZCwgMHgwYSwKLSAgICAweDBkLCAweDBhLCAweDMyLCAweDBkLCAweDBhLCAweDMwLCAweDMwLCAweDNhLAotICAgIDB4MzAsIDB4MzAsIDB4M2EsIDB4MzAsIDB4MzIsIDB4MmMsIDB4MzEsIDB4MzAsCi0gICAgMHgzMCwgMHgyMCwgMHgyZCwgMHgyZCwgMHgzZSwgMHgyMCwgMHgzMCwgMHgzMCwKLSAgICAweDNhLCAweDMwLCAweDMwLCAweDNhLCAweDMwLCAweDM0LCAweDJjLCAweDMwLAotICAgIDB4MzAsIDB4MzAsIDB4MGQsIDB4MGEsIDB4NTMsIDB4NmYsIDB4NmQsIDB4NjUsCi0gICAgMHg3NCwgMHg2OCwgMHg2OSwgMHg2ZSwgMHg2NywgMHgyMCwgMHg2ZSwgMHg2ZiwKLSAgICAweDZlLCAweDQxLCAweDUzLCAweDQzLCAweDQ5LCAweDQ5LCAweDIwLCAweDJkLAotICAgIDB4MjAsIDB4YzIsIDB4YjUsIDB4YzMsIDB4YjYsIDB4YzMsIDB4YTQsIDB4YzMsCi0gICAgMHhiYywgMHhjMywgMHg5ZiwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYQotICB9OwotICBjaGVja19jb3JyZWN0X2J1ZmZlciAoYXZpc3ViX3V0Zl84X3dpdGhfYm9tLCAxNzUsIGF2aXN1Yl91dGZfOF93aXRoX2JvbSArIDM2LAotICAgICAgMTM5KTsKLSAgY2hlY2tfY29ycmVjdF9idWZmZXIgKGF2aXN1Yl91dGZfOF93aXRob3V0X2JvbSwgMTcyLAotICAgICAgYXZpc3ViX3V0Zl84X3dpdGhvdXRfYm9tICsgMzMsIDEzOSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWF2aXN1YnRpdGxlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImF2aXN1YnRpdGxlIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F2aXN1YnRpdGxlX25lZ2F0aXZlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F2aXN1YnRpdGxlX3Bvc2l0aXZlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGF2aXN1YnRpdGxlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNzZXR0ZXIuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2NhcHNzZXR0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhYWQ0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9jYXBzc2V0dGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBjYXBzc2V0dGVyCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwOT4gTWFyayBOYXV3ZWxhZXJ0cyA8bW5hdXdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfY2Fwc3NldHRlciAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqY2Fwc3NldHRlcjsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9jYXBzc2V0dGVyIik7Ci0KLSAgY2Fwc3NldHRlciA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiY2Fwc3NldHRlciIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChjYXBzc2V0dGVyLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGNhcHNzZXR0ZXIsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBjYXBzc2V0dGVyOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9jYXBzc2V0dGVyIChHc3RFbGVtZW50ICogY2Fwc3NldHRlcikKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9jYXBzc2V0dGVyIik7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoY2Fwc3NldHRlcik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoY2Fwc3NldHRlcik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChjYXBzc2V0dGVyKTsKLX0KLQotc3RhdGljIHZvaWQKLXB1c2hfYW5kX3Rlc3QgKEdzdENhcHMgKiBwcm9wX2NhcHMsIGdib29sZWFuIGpvaW4sIGdib29sZWFuIHJlcGxhY2UsCi0gICAgR3N0Q2FwcyAqIGluX2NhcHMsIEdzdENhcHMgKiBvdXRfY2FwcykKLXsKLSAgR3N0RWxlbWVudCAqY2Fwc3NldHRlcjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdENhcHMgKmN1cnJlbnRfb3V0OwotCi0gIGNhcHNzZXR0ZXIgPSBzZXR1cF9jYXBzc2V0dGVyICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjYXBzc2V0dGVyLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChjYXBzc2V0dGVyLCAiam9pbiIsIGpvaW4sIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGNhcHNzZXR0ZXIsICJyZXBsYWNlIiwgcmVwbGFjZSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoY2Fwc3NldHRlciwgImNhcHMiLCBwcm9wX2NhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAocHJvcF9jYXBzKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChidWZmZXIsIDAsICJkYXRhIiwgNCk7Ci0KLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGNhcHNzZXR0ZXIsIGluX2NhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChpbl9jYXBzKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSywKLSAgICAgICJGYWlsZWQgcHVzaGluZyBidWZmZXIgdG8gY2Fwc3NldHRlciIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkgPT0gVFJVRSk7Ci0KLSAgLyogLi4uIGJ1dCBpdCBzaG91bGQgZW5kIHVwIGJlaW5nIGNvbGxlY3RlZCBvbiB0aGUgZ2xvYmFsIGJ1ZmZlciBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLSAgYnVmZmVyID0gZ19saXN0X2ZpcnN0IChidWZmZXJzKS0+ZGF0YTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0KLSAgY3VycmVudF9vdXQgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKG15c2lua3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAob3V0X2NhcHMsIGN1cnJlbnRfb3V0KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjdXJyZW50X291dCk7Ci0gIGdzdF9jYXBzX3VucmVmIChvdXRfY2Fwcyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2NhcHNzZXR0ZXIgKGNhcHNzZXR0ZXIpOwotfQotCi0jZGVmaW5lIFNSQ19XSURUSCAgIDgKLSNkZWZpbmUgU1JDX0hFSUdIVCAxMgotCi1zdGF0aWMgR3N0Q2FwcyAqCi1tYWtlX3NyY19jYXBzICh2b2lkKQotewotICByZXR1cm4gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtZm9vIiwgIndpZHRoIiwgR19UWVBFX0lOVCwgU1JDX1dJRFRILAotICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIFNSQ19IRUlHSFQsIE5VTEwpOwotfQotCi0vKiBkb24ndCB0cnkgdGhlc2UgY2FwcyBtdXRhdGlvbnMgYXQgaG9tZSwgZm9sa3MgKi8KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbl9qb2luX25fcmVwbGFjZSkKLXsKLSAgR3N0Q2FwcyAqaW5fY2FwcywgKnByb3BfY2FwcywgKm91dF9jYXBzOwotCi0gIGluX2NhcHMgPSBtYWtlX3NyY19jYXBzICgpOwotICBwcm9wX2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1iYXIiLAotICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMiAqIFNSQ19XSURUSCwgTlVMTCk7Ci0gIG91dF9jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtYmFyIiwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDIgKiBTUkNfV0lEVEgsCi0gICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgU1JDX0hFSUdIVCwgTlVMTCk7Ci0gIHB1c2hfYW5kX3Rlc3QgKHByb3BfY2FwcywgRkFMU0UsIEZBTFNFLCBpbl9jYXBzLCBvdXRfY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbl9qb2luX3JlcGxhY2UpCi17Ci0gIEdzdENhcHMgKmluX2NhcHMsICpwcm9wX2NhcHMsICpvdXRfY2FwczsKLQotICBpbl9jYXBzID0gbWFrZV9zcmNfY2FwcyAoKTsKLSAgcHJvcF9jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtYmFyIiwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDIgKiBTUkNfV0lEVEgsIE5VTEwpOwotICBvdXRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKHByb3BfY2Fwcyk7Ci0gIHB1c2hfYW5kX3Rlc3QgKHByb3BfY2FwcywgRkFMU0UsIFRSVUUsIGluX2NhcHMsIG91dF9jYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9qb2luX25fcmVwbGFjZV9uX21hdGNoKQotewotICBHc3RDYXBzICppbl9jYXBzLCAqcHJvcF9jYXBzLCAqb3V0X2NhcHM7Ci0KLSAgLyogbm9uIGpvaW5pbmcgY2FwcyAqLwotICBpbl9jYXBzID0gbWFrZV9zcmNfY2FwcyAoKTsKLSAgcHJvcF9jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtYmFyIiwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDIgKiBTUkNfV0lEVEgsIE5VTEwpOwotICBvdXRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGluX2NhcHMpOwotICBwdXNoX2FuZF90ZXN0IChwcm9wX2NhcHMsIFRSVUUsIEZBTFNFLCBpbl9jYXBzLCBvdXRfY2Fwcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfam9pbl9uX3JlcGxhY2VfbWF0Y2gpCi17Ci0gIEdzdENhcHMgKmluX2NhcHMsICpwcm9wX2NhcHMsICpvdXRfY2FwczsKLQotICAvKiBqb2luaW5nIGNhcHMgKi8KLSAgaW5fY2FwcyA9IG1ha2Vfc3JjX2NhcHMgKCk7Ci0gIHByb3BfY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWZvbyIsCi0gICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAyICogU1JDX1dJRFRILCBOVUxMKTsKLSAgb3V0X2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1mb28iLAotICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMiAqIFNSQ19XSURUSCwKLSAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCBTUkNfSEVJR0hULCBOVUxMKTsKLSAgcHVzaF9hbmRfdGVzdCAocHJvcF9jYXBzLCBUUlVFLCBGQUxTRSwgaW5fY2Fwcywgb3V0X2NhcHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2pvaW5fcmVwbGFjZV9uX21hdGNoKQotewotICBHc3RDYXBzICppbl9jYXBzLCAqcHJvcF9jYXBzLCAqb3V0X2NhcHM7Ci0KLSAgLyogbm9uIGpvaW5pbmcgY2FwcyAqLwotICBpbl9jYXBzID0gbWFrZV9zcmNfY2FwcyAoKTsKLSAgcHJvcF9jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtYmFyIiwKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDIgKiBTUkNfV0lEVEgsIE5VTEwpOwotICBvdXRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGluX2NhcHMpOwotICBwdXNoX2FuZF90ZXN0IChwcm9wX2NhcHMsIFRSVUUsIFRSVUUsIGluX2NhcHMsIG91dF9jYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9qb2luX3JlcGxhY2VfbWF0Y2gpCi17Ci0gIEdzdENhcHMgKmluX2NhcHMsICpwcm9wX2NhcHMsICpvdXRfY2FwczsKLQotICAvKiBqb2luaW5nIGNhcHMgKi8KLSAgaW5fY2FwcyA9IG1ha2Vfc3JjX2NhcHMgKCk7Ci0gIHByb3BfY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWZvbyIsCi0gICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAyICogU1JDX1dJRFRILCBOVUxMKTsKLSAgb3V0X2NhcHMgPSBnc3RfY2Fwc19jb3B5IChwcm9wX2NhcHMpOwotICBwdXNoX2FuZF90ZXN0IChwcm9wX2NhcHMsIFRSVUUsIFRSVUUsIGluX2NhcHMsIG91dF9jYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotY2Fwc3NldHRlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJjYXBzc2V0dGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25fam9pbl9uX3JlcGxhY2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbl9qb2luX3JlcGxhY2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfam9pbl9uX3JlcGxhY2Vfbl9tYXRjaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9qb2luX25fcmVwbGFjZV9tYXRjaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9qb2luX3JlcGxhY2Vfbl9tYXRjaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9qb2luX3JlcGxhY2VfbWF0Y2gpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoY2Fwc3NldHRlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGFjZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxhY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkYjFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9kZWludGVybGFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MiArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgdGhlIGRlaW50ZXJsYWNlIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotc3RhdGljIGdib29sZWFuCi1nc3RfY2Fwc19pc19pbnRlcmxhY2VkIChHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0VmlkZW9JbmZvIGluZm87Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2ZpeGVkIChjYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMgKCZpbmZvLCBjYXBzKSk7Ci0KLSAgcmV0dXJuIEdTVF9WSURFT19JTkZPX0lTX0lOVEVSTEFDRUQgKCZpbmZvKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY3JlYXRlX2FuZF91bnJlZikKLXsKLSAgR3N0RWxlbWVudCAqZGVpbnRlcmxhY2U7Ci0KLSAgZGVpbnRlcmxhY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWludGVybGFjZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZGVpbnRlcmxhY2UgIT0gTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZWludGVybGFjZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChkZWludGVybGFjZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBDQVBTX1ZJREVPX0NPTU1PTiBcCi0gICAgIndpZHRoPShpbnQpODAwLCBoZWlnaHQ9KGludCk2MDAsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMTUvMSIKLQotI2RlZmluZSBDQVBTX0lNQUdFX0NPTU1PTiBcCi0gICAgIndpZHRoPShpbnQpMzIwMCwgaGVpZ2h0PShpbnQpMzQwMCwgZnJhbWVyYXRlPShmcmFjdGlvbikwLzEiCi0KLSNkZWZpbmUgQ0FQU19ZVVkyIFwKLSAgICAidmlkZW8veC1yYXcsICIgXAotICAgIENBUFNfVklERU9fQ09NTU9OICIsICIgXAotICAgICJmb3JtYXQ9KHN0cmluZylZVVkyIgotCi0jZGVmaW5lIENBUFNfWVVZMl9JTlRFUkxBQ0VEIFwKLSAgICBDQVBTX1lVWTIgIiwgIiBcCi0gICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkIgotCi0jZGVmaW5lIENBUFNfWVZZVSBcCi0gICAgInZpZGVvL3gtcmF3LCAiIFwKLSAgICBDQVBTX1ZJREVPX0NPTU1PTiAiLCAiIFwKLSAgICAiZm9ybWF0PShzdHJpbmcpWVZZVSIKLQotI2RlZmluZSBDQVBTX1lWWVVfSU5URVJMQUNFRCBcCi0gICAgQ0FQU19ZVllVICIsICIgXAotICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIKLQotI2RlZmluZSBDQVBTX1lVWTJfSU1BR0UgXAotICAgICJ2aWRlby94LXJhdywgIiBcCi0gICAgQ0FQU19JTUFHRV9DT01NT04gIiwgIiBcCi0gICAgImZvcm1hdD0oc3RyaW5nKVlVWTIiCi0KLSNkZWZpbmUgQ0FQU19ZVVkyX0lOVEVSTEFDRURfSU1BR0UgXAotICAgIENBUFNfWVVZMl9JTUFHRSAiLCAiIFwKLSAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiCi0KLSNkZWZpbmUgQ0FQU19ZVllVX0lNQUdFIFwKLSAgICAidmlkZW8veC1yYXcsICIgXAotICAgIENBUFNfSU1BR0VfQ09NTU9OICIsICIgXAotICAgICJmb3JtYXQ9KHN0cmluZylZVllVIgotCi0jZGVmaW5lIENBUFNfWVZZVV9JTlRFUkxBQ0VEX0lNQUdFIFwKLSAgICBDQVBTX1lWWVVfSU1BR0UgIiwgIiBcCi0gICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkIgotCi1zdGF0aWMgR3N0RWxlbWVudCAqZGVpbnRlcmxhY2U7Ci1zdGF0aWMgR3N0UGFkICpzcmNwYWQ7Ci1zdGF0aWMgR3N0UGFkICpzaW5rcGFkOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0KLS8qIHNldHMgdXAgZGVpbnRlcmxhY2UgYW5kIHNob3J0Y3V0IHBvaW50ZXJzIHRvIGl0cyBwYWRzICovCi1zdGF0aWMgdm9pZAotc2V0dXBfZGVpbnRlcmxhY2UgKHZvaWQpCi17Ci0gIGRlaW50ZXJsYWNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZGVpbnRlcmxhY2UiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGRlaW50ZXJsYWNlICE9IE5VTEwpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZGVpbnRlcmxhY2UsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rcGFkICE9IE5VTEwpOwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZGVpbnRlcmxhY2UsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCAhPSBOVUxMKTsKLX0KLQotLyogc2V0cyB1cCBhIGJhc2ljIHRlc3QgcGlwZWxpbmUgY29udGFpbmluZzoKLSAqCi0gKiB2aWRlb3Rlc3RzcmMgISBjYXBzZmlsdGVyICEgZGVpbnRlcmxhY2UgISBmYWtlc2luawotICoKLSAqIFRoZSBwYXJhbWV0ZXJzIHNldCB0aGUgY2Fwc2ZpbHRlciBjYXBzIGFuZCB0aGUgbnVtLWJ1ZmZlcnMKLSAqIHByb3BlcnR5IG9mIHZpZGVvdGVzdHNyYwotICoKLSAqIEl0IGlzIHVzZWZ1bCBmb3IgYWRkaW5nIGJ1ZmZlciBwcm9iZXMgdG8gZGVpbnRlcmxhY2UgcGFkcwotICogYW5kIHZhbGlkYXRpbmcgaW5wdXRzL291dHB1dHMKLSAqLwotc3RhdGljIHZvaWQKLXNldHVwX3Rlc3RfcGlwZWxpbmUgKGdpbnQgbW9kZSwgR3N0Q2FwcyAqIGluZmlsdGVyY2FwcywgR3N0Q2FwcyAqIG91dGZpbHRlcmNhcHMsCi0gICAgZ2ludCBudW1idWZmZXJzKQotewotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdEVsZW1lbnQgKmluZmlsdGVyOwotICBHc3RFbGVtZW50ICpvdXRmaWx0ZXI7Ci0gIEdzdEVsZW1lbnQgKnNpbms7Ci0KLSAgc2V0dXBfZGVpbnRlcmxhY2UgKCk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgTlVMTCk7Ci0gIGluZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsICJpbmZpbHRlciIpOwotICBvdXRmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgIm91dGZpbHRlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotICBmYWlsX2lmIChpbmZpbHRlciA9PSBOVUxMKTsKLSAgZmFpbF9pZiAob3V0ZmlsdGVyID09IE5VTEwpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGluZmlsdGVyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBkZWludGVybGFjZSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgb3V0ZmlsdGVyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKSk7Ci0KLSAgLyogc2V0IHRoZSBwcm9wZXJ0aWVzICovCi0gIGdfb2JqZWN0X3NldCAoZGVpbnRlcmxhY2UsICJtb2RlIiwgbW9kZSwgTlVMTCk7Ci0gIGlmIChudW1idWZmZXJzID4gMCkKLSAgICBnX29iamVjdF9zZXQgKHNyYywgIm51bS1idWZmZXJzIiwgbnVtYnVmZmVycywgTlVMTCk7Ci0gIGlmIChpbmZpbHRlcmNhcHMpCi0gICAgZ19vYmplY3Rfc2V0IChpbmZpbHRlciwgImNhcHMiLCBpbmZpbHRlcmNhcHMsIE5VTEwpOwotICBpZiAob3V0ZmlsdGVyY2FwcykKLSAgICBnX29iamVjdF9zZXQgKG91dGZpbHRlciwgImNhcHMiLCBvdXRmaWx0ZXJjYXBzLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIGluZmlsdGVyLCBkZWludGVybGFjZSwgb3V0ZmlsdGVyLAotICAgICAgICAgIHNpbmssIE5VTEwpKTsKLSAgaWYgKGluZmlsdGVyY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAoaW5maWx0ZXJjYXBzKTsKLSAgaWYgKG91dGZpbHRlcmNhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKG91dGZpbHRlcmNhcHMpOwotfQotCi0vKgotICogQ2hlY2tzIGlmIDIgYnVmZmVycyBhcmUgZXF1YWwKLSAqCi0gKiBFcXVhbHMgbWVhbnMgc2FtZSBkYXRhCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotdGVzdF9idWZmZXJfZXF1YWxzIChHc3RCdWZmZXIgKiBidWZfYSwgR3N0QnVmZmVyICogYnVmX2IpCi17Ci0gIEdzdE1hcEluZm8gbTEsIG0yOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmX2EsICZtMSwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1Zl9iLCAmbTIsIEdTVF9NQVBfUkVBRCk7Ci0KLSAgaWYgKG0xLnNpemUgPT0gbTIuc2l6ZSkgewotICAgIHJlcyA9IG1lbWNtcCAobTEuZGF0YSwgbTIuZGF0YSwgbTEuc2l6ZSkgPT0gMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWZfYSwgJm0xKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmX2IsICZtMik7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1zaW5rcGFkX2VucXVldWVfYnVmZmVyIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdRdWV1ZSAqcXVldWUgPSAoR1F1ZXVlICopIGRhdGE7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUiAoaW5mbyk7Ci0KLSAgLyogZW5xdWV1ZSBhIGNvcHkgZm9yIGJlaW5nIGNvbXBhcmVkIGxhdGVyICovCi0gIGdfcXVldWVfcHVzaF90YWlsIChxdWV1ZSwgZ3N0X2J1ZmZlcl9jb3B5IChidWYpKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotLyoKLSAqIHBhZCBidWZmZXIgcHJvYmUgdGhhdCBjb21wYXJlcyB0aGUgYnVmZmVyIHdpdGggdGhlIHRvcCBvbmUKLSAqIGluIHRoZSBHUXVldWUgcGFzc2VkIGFzIHRoZSB1c2VyIGRhdGEKLSAqLwotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1zcmNwYWRfZGVxdWV1ZV9hbmRfY29tcGFyZV9idWZmZXIgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywKLSAgICBncG9pbnRlciBkYXRhKQotewotICBHUXVldWUgKnF1ZXVlID0gKEdRdWV1ZSAqKSBkYXRhOwotICBHc3RCdWZmZXIgKmJ1ZiA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIgKGluZm8pOwotICBHc3RCdWZmZXIgKnF1ZXVlX2J1ZjsKLQotICBxdWV1ZV9idWYgPSAoR3N0QnVmZmVyICopIGdfcXVldWVfcG9wX2hlYWQgKHF1ZXVlKTsKLSAgZmFpbF9pZiAocXVldWVfYnVmID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzICh0ZXN0X2J1ZmZlcl9lcXVhbHMgKGJ1ZiwgcXVldWVfYnVmKSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAocXVldWVfYnVmKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotLyoKLSAqIFV0aWxpdHkgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIGEgcGlwZWxpbmUgd2l0aCBkZWludGVybGFjZSBmb3IKLSAqIHZhbGlkYXRpbmcgdGhhdCBpdCBvcGVyYXRlcyBpbiBwYXNzdGhyb3VnaCBtb2RlIHdoZW4gcmVjZWl2aW5nCi0gKiBkYXRhIHdpdGggJ2luZmlsdGVyY2FwcycgYXMgdGhlIGlucHV0IGNhcHMgYW5kIG9wZXJhdGluZyBpbiAnbW9kZScgbW9kZQotICovCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2VfY2hlY2tfcGFzc3Rocm91Z2ggKGdpbnQgbW9kZSwgY29uc3QgZ2NoYXIgKiBpbmZpbHRlcmNhcHMpCi17Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR1F1ZXVlICpxdWV1ZTsKLSAgR3N0Q2FwcyAqaW5jYXBzID0gTlVMTDsKLQotICBpZiAoaW5maWx0ZXJjYXBzKQotICAgIGluY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChpbmZpbHRlcmNhcHMpOwotCi0gIHNldHVwX3Rlc3RfcGlwZWxpbmUgKG1vZGUsIGluY2FwcywgTlVMTCwgMjApOwotCi0gIHF1ZXVlID0gZ19xdWV1ZV9uZXcgKCk7Ci0KLSAgLyogc2V0IHVwIHByb2JlcyBmb3IgdGVzdGluZyAqLwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc2lua3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwgc2lua3BhZF9lbnF1ZXVlX2J1ZmZlciwKLSAgICAgIHF1ZXVlLCBOVUxMKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwKLSAgICAgIHNyY3BhZF9kZXF1ZXVlX2FuZF9jb21wYXJlX2J1ZmZlciwgcXVldWUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORykgIT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGVsaW5lKSwKLSAgICAgIEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7Ci0gICAgR1NUX0VSUk9SICgiRVJST1I6ICUiIEdTVF9QVFJfRk9STUFULCBtc2cpOwotICAgIGZhaWwgKCJVbmV4cGVjdGVkIGVycm9yIG1lc3NhZ2UiKTsKLSAgfQotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICAvKiBxdWV1ZSBzaG91bGQgYmUgZW1wdHkgKi8KLSAgZmFpbF91bmxlc3MgKGdfcXVldWVfaXNfZW1wdHkgKHF1ZXVlKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKSA9PQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ19xdWV1ZV9mcmVlIChxdWV1ZSk7Ci19Ci0KLS8qCi0gKiBTZXRzIHRoZSBjYXBzIG9uIGRlaW50ZXJsYWNlIHNpbmtwYWQgYW5kIHZhbGlkYXRlcyB0aGUKLSAqIGNhcHMgdGhhdCBpcyBzZXQgb24gdGhlIHNyY3BhZAotICovCi1zdGF0aWMgdm9pZAotZGVpbnRlcmxhY2Vfc2V0X2NhcHNfYW5kX2NoZWNrIChHc3RDYXBzICogaW5wdXQsIGdib29sZWFuIG11c3RfZGVpbnRlcmxhY2UpCi17Ci0gIEdzdENhcHMgKm90aGVyY2FwcyA9IE5VTEw7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2V0X2NhcHMgKHNpbmtwYWQsIGlucHV0KSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLQotICBnX29iamVjdF9nZXQgKHNyY3BhZCwgImNhcHMiLCAmb3RoZXJjYXBzLCBOVUxMKTsKLQotICBpZiAobXVzdF9kZWludGVybGFjZSkgewotICAgIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2ludGVybGFjZWQgKG90aGVyY2FwcykpOwotICB9IGVsc2UgewotICAgIEdzdFN0cnVjdHVyZSAqczsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19pbnRlcmxhY2VkIChpbnB1dCkgPT0KLSAgICAgICAgZ3N0X2NhcHNfaXNfaW50ZXJsYWNlZCAob3RoZXJjYXBzKSk7Ci0KLSAgICBvdGhlcmNhcHMgPSBnc3RfY2Fwc19tYWtlX3dyaXRhYmxlIChvdGhlcmNhcHMpOwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChvdGhlcmNhcHMsIDApOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAiaW50ZXJsYWNlLW1vZGUiKTsKLQotICAgIGlucHV0ID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoaW5wdXQpOwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChpbnB1dCwgMCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKHMsICJpbnRlcmxhY2UtbW9kZSIpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChpbnB1dCwgb3RoZXJjYXBzKSk7Ci0gIH0KLSAgZ3N0X2NhcHNfdW5yZWYgKGlucHV0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKG90aGVyY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChjb25zdCBnY2hhciAqIGlucHV0LAotICAgIGdib29sZWFuIG11c3RfZGVpbnRlcmxhY2UpCi17Ci0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX2FuZF9jaGVjayAoZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGlucHV0KSwKLSAgICAgIG11c3RfZGVpbnRlcmxhY2UpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tb2RlX2F1dG9fYWNjZXB0X2NhcHMpCi17Ci0gIHNldHVwX2RlaW50ZXJsYWNlICgpOwotCi0gIC8qIGF1dG8gbW9kZSAqLwotICBnX29iamVjdF9zZXQgKGRlaW50ZXJsYWNlLCAibW9kZSIsIDAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZWludGVybGFjZSwgR1NUX1NUQVRFX1BMQVlJTkcpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIHRyeSB0byBzZXQgbm9uIGludGVybGFjZWQgY2FwcyAqLwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lWWVUsIEZBTFNFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVVkyLCBGQUxTRSk7Ci0gIGRlaW50ZXJsYWNlX3NldF9zdHJpbmdfY2Fwc19hbmRfY2hlY2sgKENBUFNfWVZZVV9JTUFHRSwgRkFMU0UpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lVWTJfSU1BR0UsIEZBTFNFKTsKLQotICAvKiBub3cgdHJ5IHRvIHNldCBpbnRlcmxhY2VkIGNhcHMgKi8KLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVllVX0lOVEVSTEFDRUQsIFRSVUUpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lVWTJfSU5URVJMQUNFRCwgVFJVRSk7Ci0gIGRlaW50ZXJsYWNlX3NldF9zdHJpbmdfY2Fwc19hbmRfY2hlY2sgKENBUFNfWVZZVV9JTlRFUkxBQ0VEX0lNQUdFLCBUUlVFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVVkyX0lOVEVSTEFDRURfSU1BR0UsIFRSVUUpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsYWNlLCBHU1RfU1RBVEVfTlVMTCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRlaW50ZXJsYWNlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tb2RlX2ZvcmNlZF9hY2NlcHRfY2FwcykKLXsKLSAgc2V0dXBfZGVpbnRlcmxhY2UgKCk7Ci0KLSAgLyogZm9yY2VkIG1vZGUgKi8KLSAgZ19vYmplY3Rfc2V0IChkZWludGVybGFjZSwgIm1vZGUiLCAxLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZGVpbnRlcmxhY2UsIEdTVF9TVEFURV9QTEFZSU5HKSA9PQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiB0cnkgdG8gc2V0IG5vbiBpbnRlcmxhY2VkIGNhcHMgKi8KLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVllVLCBUUlVFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVVkyLCBUUlVFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVllVX0lNQUdFLCBUUlVFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVVkyX0lNQUdFLCBUUlVFKTsKLQotICAvKiBub3cgdHJ5IHRvIHNldCBpbnRlcmxhY2VkIGNhcHMgKi8KLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVllVX0lOVEVSTEFDRUQsIFRSVUUpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lVWTJfSU5URVJMQUNFRCwgVFJVRSk7Ci0gIGRlaW50ZXJsYWNlX3NldF9zdHJpbmdfY2Fwc19hbmRfY2hlY2sgKENBUFNfWVZZVV9JTlRFUkxBQ0VEX0lNQUdFLCBUUlVFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVVkyX0lOVEVSTEFDRURfSU1BR0UsIFRSVUUpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsYWNlLCBHU1RfU1RBVEVfTlVMTCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRlaW50ZXJsYWNlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tb2RlX2Rpc2FibGVkX2FjY2VwdF9jYXBzKQotewotICBzZXR1cF9kZWludGVybGFjZSAoKTsKLQotICAvKiBkaXNhYmxlZCBtb2RlICovCi0gIGdfb2JqZWN0X3NldCAoZGVpbnRlcmxhY2UsICJtb2RlIiwgMiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsYWNlLCBHU1RfU1RBVEVfUExBWUlORykgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogdHJ5IHRvIHNldCBub24gaW50ZXJsYWNlZCBjYXBzICovCi0gIGRlaW50ZXJsYWNlX3NldF9zdHJpbmdfY2Fwc19hbmRfY2hlY2sgKENBUFNfWVZZVSwgRkFMU0UpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lVWTIsIEZBTFNFKTsKLSAgZGVpbnRlcmxhY2Vfc2V0X3N0cmluZ19jYXBzX2FuZF9jaGVjayAoQ0FQU19ZVllVX0lNQUdFLCBGQUxTRSk7Ci0gIGRlaW50ZXJsYWNlX3NldF9zdHJpbmdfY2Fwc19hbmRfY2hlY2sgKENBUFNfWVVZMl9JTUFHRSwgRkFMU0UpOwotCi0gIC8qIG5vdyB0cnkgdG8gc2V0IGludGVybGFjZWQgY2FwcyAqLwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lWWVVfSU5URVJMQUNFRCwgRkFMU0UpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lVWTJfSU5URVJMQUNFRCwgRkFMU0UpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lWWVVfSU5URVJMQUNFRF9JTUFHRSwgRkFMU0UpOwotICBkZWludGVybGFjZV9zZXRfc3RyaW5nX2NhcHNfYW5kX2NoZWNrIChDQVBTX1lVWTJfSU5URVJMQUNFRF9JTUFHRSwgRkFMU0UpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsYWNlLCBHU1RfU1RBVEVfTlVMTCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGRlaW50ZXJsYWNlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tb2RlX2Rpc2FibGVkX3Bhc3N0aHJvdWdoKQotewotICAvKiAyIGlzIGRpc2FibGVkIG1vZGUgKi8KLSAgZGVpbnRlcmxhY2VfY2hlY2tfcGFzc3Rocm91Z2ggKDIsIENBUFNfWVVZMl9JTlRFUkxBQ0VEKTsKLSAgZGVpbnRlcmxhY2VfY2hlY2tfcGFzc3Rocm91Z2ggKDIsIENBUFNfWVZZVV9JTlRFUkxBQ0VEKTsKLSAgZGVpbnRlcmxhY2VfY2hlY2tfcGFzc3Rocm91Z2ggKDIsIENBUFNfWVVZMik7Ci0gIGRlaW50ZXJsYWNlX2NoZWNrX3Bhc3N0aHJvdWdoICgyLCBDQVBTX1lWWVUpOwotCi0gIGRlaW50ZXJsYWNlX2NoZWNrX3Bhc3N0aHJvdWdoICgyLCBDQVBTX1lVWTJfSU5URVJMQUNFRF9JTUFHRSk7Ci0gIGRlaW50ZXJsYWNlX2NoZWNrX3Bhc3N0aHJvdWdoICgyLCBDQVBTX1lWWVVfSU5URVJMQUNFRF9JTUFHRSk7Ci0gIGRlaW50ZXJsYWNlX2NoZWNrX3Bhc3N0aHJvdWdoICgyLCBDQVBTX1lVWTJfSU1BR0UpOwotICBkZWludGVybGFjZV9jaGVja19wYXNzdGhyb3VnaCAoMiwgQ0FQU19ZVllVX0lNQUdFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tb2RlX2F1dG9fZGVpbnRlcmxhY2VkX3Bhc3N0aHJvdWdoKQotewotICAvKiAwIGlzIGF1dG8gbW9kZSAqLwotICBkZWludGVybGFjZV9jaGVja19wYXNzdGhyb3VnaCAoMCwgQ0FQU19ZVVkyKTsKLSAgZGVpbnRlcmxhY2VfY2hlY2tfcGFzc3Rocm91Z2ggKDAsIENBUFNfWVZZVSk7Ci0gIGRlaW50ZXJsYWNlX2NoZWNrX3Bhc3N0aHJvdWdoICgwLCBDQVBTX1lVWTJfSU1BR0UpOwotICBkZWludGVybGFjZV9jaGVja19wYXNzdGhyb3VnaCAoMCwgQ0FQU19ZVllVX0lNQUdFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWNhdGNoX2NhcHNfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RDYXBzICoqb3V0Y2FwcyA9IHVzZXJfZGF0YTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGluZm8tPmRhdGEpID09IEdTVF9FVkVOVF9DQVBTKSB7Ci0gICAgZ19hc3NlcnQgKCpvdXRjYXBzID09IE5VTEwpOwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKEdTVF9FVkVOVCAoaW5mby0+ZGF0YSksIG91dGNhcHMpOwotICAgIGdzdF9jYXBzX3JlZiAoKm91dGNhcHMpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0IChnaW50IG1vZGUsIGdpbnQgZmllbGRzLAotICAgIGNvbnN0IGdjaGFyICogaW5wdXRfY2FwcywgY29uc3QgZ2NoYXIgKiBmaWx0ZXJfY2FwcywKLSAgICBjb25zdCBnY2hhciAqIG91dHB1dF9jYXBzKQotewotICBHc3RFbGVtZW50ICpkZWludGVybGFjZSwgKmNhcHNmaWx0ZXI7Ci0gIEdzdFBhZCAqc2lua3BhZCwgKnNyY3BhZDsKLSAgR3N0Q2FwcyAqY2FwcywgKm91dGNhcHNfYWN0dWFsID0gTlVMTDsKLSAgR3N0Q2FwcyAqb3V0Y2Fwc19leHBlY3RlZCA9IE5VTEw7Ci0KLSAgZGVpbnRlcmxhY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWludGVybGFjZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZGVpbnRlcmxhY2UgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoZGVpbnRlcmxhY2UsICJtb2RlIiwgbW9kZSwgImZpZWxkcyIsIGZpZWxkcywgTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChmaWx0ZXJfY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwpOwotICBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGNhcHNmaWx0ZXIsICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoZGVpbnRlcmxhY2UsIGNhcHNmaWx0ZXIpKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlaW50ZXJsYWNlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCk7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGNhcHNmaWx0ZXIsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKHNyY3BhZCk7Ci0KLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0RPV05TVFJFQU0sCi0gICAgICBjYXRjaF9jYXBzX2V2ZW50LCAmb3V0Y2Fwc19hY3R1YWwsIE5VTEwpOwotCi0gIGlmIChvdXRwdXRfY2FwcykgewotICAgIG91dGNhcHNfZXhwZWN0ZWQgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAob3V0cHV0X2NhcHMpOwotICAgIGZhaWxfdW5sZXNzIChvdXRjYXBzX2V4cGVjdGVkICE9IE5VTEwpOwotICB9Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZGVpbnRlcmxhY2UsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGNhcHNmaWx0ZXIsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChpbnB1dF9jYXBzKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBpZiAob3V0cHV0X2NhcHMpIHsKLSAgICBnY2hhciAqYWN0dWFsOwotCi0gICAgZmFpbF9pZiAob3V0Y2Fwc19hY3R1YWwgPT0gTlVMTCwgIkV4cGVjdGVkICVzLCBnb3Qgbm8gY2FwcyIsIG91dHB1dF9jYXBzKTsKLSAgICBhY3R1YWwgPSBnc3RfY2Fwc190b19zdHJpbmcgKG91dGNhcHNfYWN0dWFsKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKG91dGNhcHNfYWN0dWFsLCBvdXRjYXBzX2V4cGVjdGVkKSwKLSAgICAgICAgIkV4cGVjdGVkICVzLCBnb3QgJXMiLCBvdXRwdXRfY2FwcywgYWN0dWFsKTsKLSAgICBnX2ZyZWUgKGFjdHVhbCk7Ci0gIH0gZWxzZSB7Ci0gICAgZ2NoYXIgKmFjdHVhbDsKLQotICAgIGFjdHVhbCA9IGdzdF9jYXBzX3RvX3N0cmluZyAob3V0Y2Fwc19hY3R1YWwpOwotICAgIGZhaWxfaWYgKG91dGNhcHNfYWN0dWFsICE9IE5VTEwsICJFeHBlY3RlZCBuZWdvdGlhdGlvbiBmYWlsdXJlLCBnb3QgJXMiLAotICAgICAgICBhY3R1YWwpOwotICAgIGdfZnJlZSAoYWN0dWFsKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsYWNlLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjYXBzZmlsdGVyLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChkZWludGVybGFjZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNhcHNmaWx0ZXIpOwotCi0gIGlmIChvdXRjYXBzX2V4cGVjdGVkKQotICAgIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzX2V4cGVjdGVkKTsKLSAgaWYgKG91dGNhcHNfYWN0dWFsKQotICAgIGdzdF9jYXBzX3VucmVmIChvdXRjYXBzX2FjdHVhbCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21vZGVfZGlzYWJsZWRfZXhwZWN0ZWRfY2FwcykKLXsKLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMiwgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXciLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMiwgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXciLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMiwgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXciLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMiwgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXciLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMiwgMCwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3KEFOWSkiLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDAsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyhBTlkpIiwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgyLCAxLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcoQU5ZKSIsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMiwgMSwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3KEFOWSkiLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDIsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgyLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgyLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbW9kZV9pbnRlcmxhY2VkX2V4cGVjdGVkX2NhcHMpCi17Ci0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9NDAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9NDAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDAsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwgInZpZGVvL3gtcmF3KEFOWSkiLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgxLCAwLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsICJ2aWRlby94LXJhdyhBTlkpIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMSwgMSwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLCAidmlkZW8veC1yYXcoQU5ZKSIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDEsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwgInZpZGVvL3gtcmF3KEFOWSkiLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgxLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwgInZpZGVvL3gtcmF3IiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMSwgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsICJ2aWRlby94LXJhdyIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDEsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLCAidmlkZW8veC1yYXciLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgxLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwgInZpZGVvL3gtcmF3IiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMSwgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMSwgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMSwgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMSwgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwgTlVMTCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbW9kZV9hdXRvX2V4cGVjdGVkX2NhcHMpCi17Ci0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9NDAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDAsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyhBTlkpIiwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAwLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcoQU5ZKSIsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMCwgMSwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3KEFOWSkiLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDEsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyhBTlkpIiwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMCwgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMCwgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbW9kZV9hdXRvX3N0cmljdF9leHBlY3RlZF9jYXBzKQotewotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTQwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAxLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAwLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcoQU5ZKSIsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMywgMCwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLCAidmlkZW8veC1yYXcoQU5ZKSIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDEsCi0gICAgICAidmlkZW8veC1yYXcobWVtb3J5OlNvbWVNZW1vcnkpLCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdyhBTlkpIiwKLSAgICAgICJ2aWRlby94LXJhdyhtZW1vcnk6U29tZU1lbW9yeSksIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAxLAotICAgICAgInZpZGVvL3gtcmF3KG1lbW9yeTpTb21lTWVtb3J5KSwgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsICJ2aWRlby94LXJhdyhBTlkpIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMywgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXciLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9djIxMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMywgMCwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsICJ2aWRlby94LXJhdyIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3IiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PXYyMTAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLCAidmlkZW8veC1yYXciLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLCBOVUxMKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgzLCAwLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQiLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMywgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMywgMSwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPWludGVybGVhdmVkIiwKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDAsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsIE5VTEwpOwotCi0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDMsIDEsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD12MjEwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCIsIE5VTEwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZpZWxkc19hdXRvX2V4cGVjdGVkX2NhcHMpCi17Ci0gIGRlaW50ZXJsYWNlX3NldF9jYXBzX3dpdGhfZmlsdGVyX2FuZF9jaGVja19yZXN1bHQgKDAsIDMsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1pbnRlcmxlYXZlZCwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTIwLzEiLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT0yMC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMCwgMywKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9NDAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGZvcm1hdD1JNDIwLCB3aWR0aD0zMjAsIGhlaWdodD0yNDAsICIKLSAgICAgICJpbnRlcmxhY2UtbW9kZT1wcm9ncmVzc2l2ZSwgZnJhbWVyYXRlPTQwLzEiKTsKLQotICBkZWludGVybGFjZV9zZXRfY2Fwc193aXRoX2ZpbHRlcl9hbmRfY2hlY2tfcmVzdWx0ICgwLCAzLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9aW50ZXJsZWF2ZWQsIGZyYW1lcmF0ZT0yMC8xIiwKLSAgICAgICJ2aWRlby94LXJhdywgaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUiLAotICAgICAgInZpZGVvL3gtcmF3LCBmb3JtYXQ9STQyMCwgd2lkdGg9MzIwLCBoZWlnaHQ9MjQwLCAiCi0gICAgICAiaW50ZXJsYWNlLW1vZGU9cHJvZ3Jlc3NpdmUsIGZyYW1lcmF0ZT00MC8xIik7Ci0KLSAgZGVpbnRlcmxhY2Vfc2V0X2NhcHNfd2l0aF9maWx0ZXJfYW5kX2NoZWNrX3Jlc3VsdCAoMCwgMywKLSAgICAgICJ2aWRlby94LXJhdywgZm9ybWF0PUk0MjAsIHdpZHRoPTMyMCwgaGVpZ2h0PTI0MCwgIgotICAgICAgImludGVybGFjZS1tb2RlPWludGVybGVhdmVkLCBmcmFtZXJhdGU9MjAvMSIsCi0gICAgICAidmlkZW8veC1yYXcsIGludGVybGFjZS1tb2RlPXByb2dyZXNzaXZlLCBmcmFtZXJhdGU9MTUvMSIsIE5VTEwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotCi1zdGF0aWMgU3VpdGUgKgotZGVpbnRlcmxhY2Vfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZGVpbnRlcmxhY2UiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDE4MCk7Ci0KLSAgaWYgKCFnc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCAiZGVpbnRlcmxhY2UiLAotICAgICAgICAgIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiwgR1NUX1ZFUlNJT05fTUlDUk8pKSB7Ci0gICAgR1NUX0VSUk9SICgiRklYTUU6IHBvcnQgZGVpbnRlcmxhY2UgZWxlbWVudCIpOwotICAgIHJldHVybiBzOwotICB9Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NyZWF0ZV9hbmRfdW5yZWYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbW9kZV9hdXRvX2FjY2VwdF9jYXBzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21vZGVfZm9yY2VkX2FjY2VwdF9jYXBzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21vZGVfZGlzYWJsZWRfYWNjZXB0X2NhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbW9kZV9kaXNhYmxlZF9wYXNzdGhyb3VnaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tb2RlX2F1dG9fZGVpbnRlcmxhY2VkX3Bhc3N0aHJvdWdoKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbW9kZV9kaXNhYmxlZF9leHBlY3RlZF9jYXBzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21vZGVfaW50ZXJsYWNlZF9leHBlY3RlZF9jYXBzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21vZGVfYXV0b19leHBlY3RlZF9jYXBzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X21vZGVfYXV0b19zdHJpY3RfZXhwZWN0ZWRfY2Fwcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9maWVsZHNfYXV0b19leHBlY3RlZF9jYXBzKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGRlaW50ZXJsYWNlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2RlaW50ZXJsZWF2ZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNDYxMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZGVpbnRlcmxlYXZlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTcgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdHMgZm9yIHRoZSBpbnRlcmxlYXZlIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NyZWF0ZV9hbmRfdW5yZWYpCi17Ci0gIEdzdEVsZW1lbnQgKmRlaW50ZXJsZWF2ZTsKLQotICBkZWludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWludGVybGVhdmUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGRlaW50ZXJsZWF2ZSAhPSBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsZWF2ZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChkZWludGVybGVhdmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqKm15c2lua3BhZHM7Ci1zdGF0aWMgZ2ludCBuc2lua3BhZHM7Ci1zdGF0aWMgR3N0QnVzICpidXM7Ci1zdGF0aWMgR3N0RWxlbWVudCAqZGVpbnRlcmxlYXZlOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChGMzIpICIsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgbGF5b3V0ID0gKHN0cmluZykge2ludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWR9LCByYXRlID0gKGludCkgezMyMDAwLCA0ODAwMH0iKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKEYzMikgIiwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSB7IDIsIDMgfSwgbGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsIHJhdGUgPSAoaW50KSB7MzIwMDAsIDQ4MDAwfSIpKTsKLQotI2RlZmluZSBDQVBTXzMya2h6IFwKLSAgICAgICAgImF1ZGlvL3gtcmF3LCAiIFwKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICJHU1RfQVVESU9fTkUgKEYzMikgIiwgIiBcCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDIsIGxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiIFwKLSAgICAgICAgInJhdGUgPSAoaW50KSAzMjAwMCIKLQotI2RlZmluZSBDQVBTXzQ4a2h6IFwKLSAgICAgICAgImF1ZGlvL3gtcmF3LCAiIFwKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICJHU1RfQVVESU9fTkUgKEYzMikgIiwgIiBcCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDIsIGxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiIFwKLSAgICAgICAgInJhdGUgPSAoaW50KSA0ODAwMCIKLQotI2RlZmluZSBDQVBTXzQ4a2h6XzNDSCBcCi0gICAgICAgICJhdWRpby94LXJhdywgIiBcCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiR1NUX0FVRElPX05FIChGMzIpICIsICIgXAotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAzLCBsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gICAgICAgICJyYXRlID0gKGludCkgNDgwMDAiCi0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1kZWludGVybGVhdmVfY2hhaW5fZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgZ2ludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Zsb2F0ICppbmRhdGE7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9JU19CVUZGRVIgKGJ1ZmZlcikpOwotICBnc3RfYnVmZmVyX21hcCAoYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBpbmRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXAuc2l6ZSwgNDgwMDAgKiBzaXplb2YgKGdmbG9hdCkpOwotICBmYWlsX3VubGVzcyAoaW5kYXRhICE9IE5VTEwpOwotCi0gIGlmIChzdHJjbXAgKEdTVF9QQURfTkFNRSAocGFkKSwgInNpbmswIikgPT0gMCkgewotICAgIGZvciAoaSA9IDA7IGkgPCA0ODAwMDsgaSsrKQotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChpbmRhdGFbaV0sIC0xLjApOwotICB9IGVsc2UgaWYgKHN0cmNtcCAoR1NUX1BBRF9OQU1FIChwYWQpLCAic2luazEiKSA9PSAwKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ4MDAwOyBpKyspCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGluZGF0YVtpXSwgMS4wKTsKLSAgfSBlbHNlIHsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWZmZXIsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotc3RhdGljIHZvaWQKLWRlaW50ZXJsZWF2ZV9wYWRfYWRkZWQgKEdzdEVsZW1lbnQgKiBzcmMsIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ2NoYXIgKm5hbWU7Ci0gIGdpbnQgbGluayA9IEdQT0lOVEVSX1RPX0lOVCAoZGF0YSk7Ci0KLSAgaWYgKG5zaW5rcGFkcyA+PSBsaW5rKQotICAgIHJldHVybjsKLQotICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic2luayVkIiwgbnNpbmtwYWRzKTsKLQotICBteXNpbmtwYWRzW25zaW5rcGFkc10gPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsIG5hbWUpOwotICBnX2ZyZWUgKG5hbWUpOwotICBmYWlsX2lmIChteXNpbmtwYWRzW25zaW5rcGFkc10gPT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2lua3BhZHNbbnNpbmtwYWRzXSwgZGVpbnRlcmxlYXZlX2NoYWluX2Z1bmMpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChwYWQsIG15c2lua3BhZHNbbnNpbmtwYWRzXSkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWRzW25zaW5rcGFkc10sIFRSVUUpOwotICBuc2lua3BhZHMrKzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMl9jaGFubmVscykKLXsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqaW5idWY7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW5kYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ2NCBjaGFubmVsX21hc2sgPSAwOwotCi0gIG15c2lua3BhZHMgPSBnX25ldzAgKEdzdFBhZCAqLCAyKTsKLSAgbnNpbmtwYWRzID0gMDsKLQotICBkZWludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWludGVybGVhdmUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGRlaW50ZXJsZWF2ZSAhPSBOVUxMKTsKLQotICBteXNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKG15c3JjcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKENBUFNfNDhraHopOwotICBjaGFubmVsX21hc2sgfD0KLSAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVDsKLSAgY2hhbm5lbF9tYXNrIHw9Ci0gICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUOwotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgY2hhbm5lbF9tYXNrLAotICAgICAgTlVMTCk7Ci0KLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGRlaW50ZXJsZWF2ZSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlaW50ZXJsZWF2ZSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKG15c3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnX29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoZGVpbnRlcmxlYXZlLCAicGFkLWFkZGVkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRlaW50ZXJsZWF2ZV9wYWRfYWRkZWQpLCBHSU5UX1RPX1BPSU5URVIgKDIpKTsKLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZGVpbnRlcmxlYXZlLCBidXMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsZWF2ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBpbmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMiAqIDQ4MDAwICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgaW5idWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGluYnVmKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW5kYXRhID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDIgKiA0ODAwMDsgaSArPSAyKSB7Ci0gICAgaW5kYXRhW2ldID0gLTEuMDsKLSAgICBpbmRhdGFbaSArIDFdID0gMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWYpID09IEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZWludGVybGVhdmUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5zaW5rcGFkczsgaSsrKQotICAgIGdfb2JqZWN0X3VucmVmIChteXNpbmtwYWRzW2ldKTsKLSAgZ19mcmVlIChteXNpbmtwYWRzKTsKLSAgbXlzaW5rcGFkcyA9IE5VTEw7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGRlaW50ZXJsZWF2ZSk7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnX29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMl9jaGFubmVsc18xX2xpbmtlZCkKLXsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqaW5idWY7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdmbG9hdCAqaW5kYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ2NCBjaGFubmVsX21hc2sgPSAwOwotCi0gIG5zaW5rcGFkcyA9IDA7Ci0gIG15c2lua3BhZHMgPSBnX25ldzAgKEdzdFBhZCAqLCAyKTsKLQotICBkZWludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWludGVybGVhdmUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGRlaW50ZXJsZWF2ZSAhPSBOVUxMKTsKLQotICBteXNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKG15c3JjcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKENBUFNfNDhraHopOwotICBjaGFubmVsX21hc2sgfD0KLSAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVDsKLSAgY2hhbm5lbF9tYXNrIHw9Ci0gICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUOwotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgY2hhbm5lbF9tYXNrLAotICAgICAgTlVMTCk7Ci0KLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGRlaW50ZXJsZWF2ZSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlaW50ZXJsZWF2ZSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKG15c3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnX29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoZGVpbnRlcmxlYXZlLCAicGFkLWFkZGVkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRlaW50ZXJsZWF2ZV9wYWRfYWRkZWQpLCBHSU5UX1RPX1BPSU5URVIgKDEpKTsKLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZGVpbnRlcmxlYXZlLCBidXMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlaW50ZXJsZWF2ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBpbmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMiAqIDQ4MDAwICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgaW5idWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGluYnVmKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW5kYXRhID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDIgKiA0ODAwMDsgaSArPSAyKSB7Ci0gICAgaW5kYXRhW2ldID0gLTEuMDsKLSAgICBpbmRhdGFbaSArIDFdID0gMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWYpID09IEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZWludGVybGVhdmUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5zaW5rcGFkczsgaSsrKQotICAgIGdfb2JqZWN0X3VucmVmIChteXNpbmtwYWRzW2ldKTsKLSAgZ19mcmVlIChteXNpbmtwYWRzKTsKLSAgbXlzaW5rcGFkcyA9IE5VTEw7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGRlaW50ZXJsZWF2ZSk7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnX29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfMl9jaGFubmVsc19jYXBzX2NoYW5nZSkKLXsKLSAgR3N0UGFkICpzaW5rcGFkOwotICBHc3RDYXBzICpjYXBzLCAqY2FwczI7Ci0gIEdzdENhcHMgKnJldF9jYXBzOwotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqaW5idWY7Ci0gIGdmbG9hdCAqaW5kYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ3VpbnQ2NCBjaGFubmVsX21hc2s7Ci0KLSAgbnNpbmtwYWRzID0gMDsKLSAgbXlzaW5rcGFkcyA9IGdfbmV3MCAoR3N0UGFkICosIDIpOwotCi0gIGRlaW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImRlaW50ZXJsZWF2ZSIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZGVpbnRlcmxlYXZlICE9IE5VTEwpOwotCi0gIG15c3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAobXlzcmNwYWQgIT0gTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChDQVBTXzQ4a2h6KTsKLSAgY2hhbm5lbF9tYXNrID0gMDsKLSAgY2hhbm5lbF9tYXNrIHw9Ci0gICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ7Ci0gIGNoYW5uZWxfbWFzayB8PQotICAgICAgR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVDsKLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssIGNoYW5uZWxfbWFzaywKLSAgICAgIE5VTEwpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZGVpbnRlcmxlYXZlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAobXlzcmNwYWQsIHNpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICByZXRfY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChteXNyY3BhZCwgY2Fwcyk7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChyZXRfY2FwcykpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzIChteXNyY3BhZCwgY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAocmV0X2NhcHMpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgZGVpbnRlcmxlYXZlLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGRlaW50ZXJsZWF2ZSwgInBhZC1hZGRlZCIsCi0gICAgICBHX0NBTExCQUNLIChkZWludGVybGVhdmVfcGFkX2FkZGVkKSwgR0lOVF9UT19QT0lOVEVSICgyKSk7Ci0KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGRlaW50ZXJsZWF2ZSwgYnVzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZWludGVybGVhdmUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgaW5idWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIgKiA0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGluYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChpbmJ1Zik7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAyICogNDgwMDA7IGkgKz0gMikgewotICAgIGluZGF0YVtpXSA9IC0xLjA7Ci0gICAgaW5kYXRhW2kgKyAxXSA9IDEuMDsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZiwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQ0FQU18zMmtoeik7Ci0gIGNoYW5uZWxfbWFzayA9IDA7Ci0gIGNoYW5uZWxfbWFzayB8PQotICAgICAgR19HVUlOVDY0X0NPTlNUQU5UICgxKSA8PCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUOwotICBjaGFubmVsX21hc2sgfD0KLSAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ7Ci0gIGdzdF9jYXBzX3NldF9zaW1wbGUgKGNhcHMyLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgY2hhbm5lbF9tYXNrLAotICAgICAgTlVMTCk7Ci0gIHJldF9jYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKG15c3JjcGFkLCBjYXBzMik7Ci0gIGZhaWxfaWYgKGdzdF9jYXBzX2lzX2VtcHR5IChyZXRfY2FwcykpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wZWVyX3F1ZXJ5X2FjY2VwdF9jYXBzIChteXNyY3BhZCwgY2FwczIpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKHJldF9jYXBzKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzcmNwYWQsIGNhcHMyKTsKLQotICBpbmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMiAqIDQ4MDAwICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgaW5idWYgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKGluYnVmKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW5kYXRhID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDIgKiA0ODAwMDsgaSArPSAyKSB7Ci0gICAgaW5kYXRhW2ldID0gLTEuMDsKLSAgICBpbmRhdGFbaSArIDFdID0gMS4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLQotICAvKiBTaG91bGQgd29yayBmaW5lIGJlY2F1c2UgdGhlIGNhcHMgY2hhbmdlZCBpbiBhIGNvbXBhdGlibGUgd2F5ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0KLSAgY2FwczIgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQ0FQU180OGtoel8zQ0gpOwotICBjaGFubmVsX21hc2sgPSAwOwotICBjaGFubmVsX21hc2sgfD0KLSAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVDsKLSAgY2hhbm5lbF9tYXNrIHw9Ci0gICAgICBHX0dVSU5UNjRfQ09OU1RBTlQgKDEpIDw8IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUOwotICBjaGFubmVsX21hc2sgfD0KLSAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfQ0VOVEVSOwotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzMiwgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssIGNoYW5uZWxfbWFzaywKLSAgICAgIE5VTEwpOwotICByZXRfY2FwcyA9IGdzdF9wYWRfcGVlcl9xdWVyeV9jYXBzIChteXNyY3BhZCwgY2FwczIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZW1wdHkgKHJldF9jYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChyZXRfY2Fwcyk7Ci0gIGZhaWxfaWYgKGdzdF9wYWRfcGVlcl9xdWVyeV9hY2NlcHRfY2FwcyAobXlzcmNwYWQsIGNhcHMyKSk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKG15c3JjcGFkLCBjYXBzMik7Ci0KLSAgaW5idWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDMgKiA0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGluYnVmID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlIChpbmJ1Zik7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAzICogNDgwMDA7IGkgKz0gMykgewotICAgIGluZGF0YVtpXSA9IC0xLjA7Ci0gICAgaW5kYXRhW2kgKyAxXSA9IDEuMDsKLSAgICBpbmRhdGFbaSArIDJdID0gMC4wOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLQotICAvKiBTaG91bGQgYnJlYWsgYmVjYXVzZSB0aGUgY2FwcyBjaGFuZ2VkIGluIGFuIGluY29tcGF0aWJsZSB3YXkgKi8KLSAgZmFpbF9pZiAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWYpID09IEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkZWludGVybGVhdmUsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG5zaW5rcGFkczsgaSsrKQotICAgIGdfb2JqZWN0X3VucmVmIChteXNpbmtwYWRzW2ldKTsKLSAgZ19mcmVlIChteXNpbmtwYWRzKTsKLSAgbXlzaW5rcGFkcyA9IE5VTEw7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGRlaW50ZXJsZWF2ZSk7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnX29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0jZGVmaW5lIFNBTVBMRVNfUEVSX0JVRkZFUiAgMTAKLSNkZWZpbmUgTlVNX0NIQU5ORUxTICAgICAgICA4Ci0jZGVmaW5lIFNBTVBMRV9SQVRFICAgICAgICAgNDQxMDAKLQotc3RhdGljIGd1aW50IHBhZHNfY3JlYXRlZDsKLQotc3RhdGljIHZvaWQKLXNldF9jaGFubmVsX3Bvc2l0aW9ucyAoR3N0Q2FwcyAqIGNhcHMsIGludCBjaGFubmVscywKLSAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiAqIGNoYW5uZWxwb3NpdGlvbnMpCi17Ci0gIGludCBjOwotICBndWludDY0IGNoYW5uZWxfbWFzayA9IDA7Ci0KLSAgZm9yIChjID0gMDsgYyA8IGNoYW5uZWxzOyBjKyspCi0gICAgY2hhbm5lbF9tYXNrIHw9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgY2hhbm5lbHBvc2l0aW9uc1tjXTsKLQotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgY2hhbm5lbF9tYXNrLAotICAgICAgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcmNfaGFuZG9mZl9mbG9hdDMyXzhjaCAoR3N0RWxlbWVudCAqIHNyYywgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBnZmxvYXQgKmRhdGEsICpwOwotICBndWludCBzaXplLCBpLCBjOwotCi0gIHNpemUgPSBzaXplb2YgKGdmbG9hdCkgKiBTQU1QTEVTX1BFUl9CVUZGRVIgKiBOVU1fQ0hBTk5FTFM7Ci0gIGRhdGEgPSBwID0gKGdmbG9hdCAqKSBnX21hbGxvYyAoc2l6ZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IFNBTVBMRVNfUEVSX0JVRkZFUjsgKytpKSB7Ci0gICAgZm9yIChjID0gMDsgYyA8IE5VTV9DSEFOTkVMUzsgKytjKSB7Ci0gICAgICAqcCA9IChnZmxvYXQpICgoaSAqIE5VTV9DSEFOTkVMUykgKyBjKTsKLSAgICAgICsrcDsKLSAgICB9Ci0gIH0KLQotICBpZiAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSkgewotICAgIGdzdF9idWZmZXJfcmVwbGFjZV9tZW1vcnlfcmFuZ2UgKGJ1ZiwgMCwgLTEsCi0gICAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsIHNpemUsIDAsIHNpemUsIGRhdGEsIGdfZnJlZSkpOwotICB9IGVsc2UgewotICAgIGdzdF9idWZmZXJfaW5zZXJ0X21lbW9yeSAoYnVmLCAwLAotICAgICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkYXRhLCBzaXplLCAwLCBzaXplLCBkYXRhLCBnX2ZyZWUpKTsKLSAgfQotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IDA7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gMDsKLX0KLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1zcmNfZXZlbnRfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgZ3BvaW50ZXIgdXNlcmRhdGEpCi17Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGxheW91dFtOVU1fQ0hBTk5FTFNdOwotICBHc3RDYXBzICpjYXBzOwotICBndWludCBpOwotCi0gIGlmICgoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNKQotICAgICAgJiYgR1NUX0VWRU5UX1RZUEUgKGluZm8tPmRhdGEpID09IEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQpIHsKLSAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZSAocGFkLCBpbmZvLT5pZCk7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIEdTVF9BVURJT19ORSAoRjMyKSwKLSAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgTlVNX0NIQU5ORUxTLAotICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwKLSAgICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCBTQU1QTEVfUkFURSwgTlVMTCk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyArK2kpCi0gICAgICBsYXlvdXRbaV0gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUICsgaTsKLQotICAgIHNldF9jaGFubmVsX3Bvc2l0aW9ucyAoY2FwcywgTlVNX0NIQU5ORUxTLCBsYXlvdXQpOwotICAgIGdzdF9wYWRfc2V0X2NhcHMgKHBhZCwgY2Fwcyk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotZmxvYXRfYnVmZmVyX2NoZWNrX3Byb2JlIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sCi0gICAgZ3BvaW50ZXIgdXNlcmRhdGEpCi17Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnZmxvYXQgKmRhdGE7Ci0gIGd1aW50IHBhZG51bSwgbnVtcGFkczsKLSAgZ3VpbnQgbnVtLCBpOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uICpwb3M7Ci0gIGdpbnQgY2hhbm5lbHM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUiAoaW5mbyk7Ci0gIEdzdEF1ZGlvSW5mbyBhdWRpb19pbmZvOwotICBndWludCBwYWRfaWQgPSBHUE9JTlRFUl9UT19VSU5UICh1c2VyZGF0YSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3NjYW5mIChHU1RfUEFEX05BTUUgKHBhZCksICJzcmNfJXUiLCAmcGFkbnVtKSwgMSk7Ci0KLSAgbnVtcGFkcyA9IHBhZHNfY3JlYXRlZDsKLQotICAvKiBDaGVjayBjYXBzICovCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJjaGFubmVscyIsICZjaGFubmVscykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjaGFubmVscywgMSk7Ci0KLSAgZ3N0X2F1ZGlvX2luZm9faW5pdCAoJmF1ZGlvX2luZm8pOwotICBmYWlsX3VubGVzcyAoZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmYXVkaW9faW5mbywgY2FwcykpOwotCi0gIHBvcyA9IGF1ZGlvX2luZm8ucG9zaXRpb247Ci0gIGZhaWxfdW5sZXNzIChwb3MgIT0gTlVMTAotICAgICAgJiYgcG9zWzBdID09IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQgKyBwYWRfaWQpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIG51bSA9IG1hcC5zaXplIC8gc2l6ZW9mIChnZmxvYXQpOwotCi0gIC8qIENoZWNrIGJ1ZmZlciBjb250ZW50ICovCi0gIGZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewotICAgIGd1aW50IHZhbCwgcmVzdDsKLQotICAgIHZhbCA9IChndWludCkgZGF0YVtpXTsKLSAgICBHU1RfTE9HICgiJXNbJXVdOiAlOGYiLCBHU1RfUEFEX05BTUUgKHBhZCksIGksIGRhdGFbaV0pOwotICAgIC8qIGNhbid0IHVzZSB0aGUgbW9kdWxvIG9wZXJhdG9yIGluIHRoZSBhc3NlcnRpb24gc3RhdGVtZW50LCBzaW5jZSBkdWUgdG8KLSAgICAgKiB0aGUgd2F5IGl0IGdldHMgZXhwYW5kZWQgaXQgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwcmludGYgb3BlcmF0b3IKLSAgICAgKiBpbiB0aGUgZmFpbHVyZSBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBzZWdmYXVsdHMgKi8KLSAgICByZXN0ID0gdmFsICUgbnVtcGFkczsKLSAgICAvKiBjaGVjayB0aGF0IHRoZSBmaXJzdCBjaGFubmVsIGlzIG9uIHBhZCBzcmMwLCB0aGUgc2Vjb25kIG9uIHNyYzEgZXRjLiAqLwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJlc3QsIHBhZG51bSk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsgICAgICAvKiBkb24ndCBkcm9wIGRhdGEgKi8KLX0KLQotc3RhdGljIHZvaWQKLXBhZF9hZGRlZF9zZXR1cF9kYXRhX2NoZWNrX2Zsb2F0MzJfOGNoX2NiIChHc3RFbGVtZW50ICogZGVpbnRlcmxlYXZlLAotICAgIEdzdFBhZCAqIHBhZCwgR3N0RWxlbWVudCAqIHBpcGVsaW5lKQotewotICBHc3RFbGVtZW50ICpxdWV1ZSwgKnNpbms7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLQotICBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChxdWV1ZSAhPSBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBxdWV1ZSwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChxdWV1ZSwgInNyYyIsIHNpbmssICJzaW5rIiwKLSAgICAgIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic2luayIpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfbGluayAocGFkLCBzaW5rcGFkKSwgR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHBhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwgZmxvYXRfYnVmZmVyX2NoZWNrX3Byb2JlLAotICAgICAgR1VJTlRfVE9fUE9JTlRFUiAocGFkc19jcmVhdGVkKSwgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBHU1RfTE9HICgibmV3IHBhZDogJXMiLCBHU1RfUEFEX05BTUUgKHBhZCkpOwotICArK3BhZHNfY3JlYXRlZDsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotbWFrZV9mYWtlX3NyY184Y2hhbnNfZmxvYXQzMiAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBHc3RQYWQgKnBhZDsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlIGZha2VzcmMgZWxlbWVudCIpOwotCi0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChzcmMsICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoc3JjX2hhbmRvZmZfZmxvYXQzMl84Y2gpLCBOVUxMKTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLCBzcmNfZXZlbnRfcHJvYmUsCi0gICAgICBOVUxMLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICByZXR1cm4gc3JjOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF84X2NoYW5uZWxzX2Zsb2F0MzIpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc3JjLCAqZGVpbnRlcmxlYXZlOwotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgcGlwZWxpbmUgPSAoR3N0RWxlbWVudCAqKSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwsICJmYWlsZWQgdG8gY3JlYXRlIHBpcGVsaW5lIik7Ci0KLSAgc3JjID0gbWFrZV9mYWtlX3NyY184Y2hhbnNfZmxvYXQzMiAoKTsKLQotICBkZWludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJkZWludGVybGVhdmUiLCAiZGVpbnRlcmxlYXZlIik7Ci0gIGZhaWxfdW5sZXNzIChkZWludGVybGVhdmUgIT0gTlVMTCwgImZhaWxlZCB0byBjcmVhdGUgZGVpbnRlcmxlYXZlIGVsZW1lbnQiKTsKLSAgZ19vYmplY3Rfc2V0IChkZWludGVybGVhdmUsICJrZWVwLXBvc2l0aW9ucyIsIFRSVUUsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBkZWludGVybGVhdmUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIGRlaW50ZXJsZWF2ZSksCi0gICAgICAiZmFpbGVkIHRvIGxpbmsgc3JjIDw9PiBkZWludGVybGVhdmUiKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChkZWludGVybGVhdmUsICJwYWQtYWRkZWQiLAotICAgICAgR19DQUxMQkFDSyAocGFkX2FkZGVkX3NldHVwX2RhdGFfY2hlY2tfZmxvYXQzMl84Y2hfY2IpLCBwaXBlbGluZSk7Ci0KLSAgcGFkc19jcmVhdGVkID0gMDsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGVsaW5lKSwgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHBhZHNfY3JlYXRlZCwgTlVNX0NIQU5ORUxTKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZGVpbnRlcmxlYXZlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImRlaW50ZXJsZWF2ZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMTgwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NyZWF0ZV9hbmRfdW5yZWYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfMl9jaGFubmVscyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF8yX2NoYW5uZWxzXzFfbGlua2VkKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0XzJfY2hhbm5lbHNfY2Fwc19jaGFuZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfOF9jaGFubmVsc19mbG9hdDMyKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGRlaW50ZXJsZWF2ZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9kdG1mLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9kdG1mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYWUzNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZHRtZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg4ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgZHRtZiBlbGVtZW50cwotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQKLSAqICAgQGF1dGhvcjogT2xpdmllciBDcmV0ZSA8b2xpdmllci5jcmV0ZUBjb2xsYWJvcmEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotCi0vKiBJbmNsdWRlIHRoaXMgZnJvbSB0aGUgcGx1Z2luIHRvIGdldCB0aGUgZGVmaW5lcyAqLwotCi0jaW5jbHVkZSAiLi4vLi4vZ3N0L2R0bWYvZ3N0ZHRtZmNvbW1vbi5oIgotCi0jZGVmaW5lIEVORF9CSVQgKDE8PDcpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb19zaW5rX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3LCAiCi0gICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSBcIiIgR1NUX0FVRElPX05FIChTMTYpICJcIiwgIgotICAgICAgICAicmF0ZSA9ICIgR1NUX0FVRElPX1JBVEVfUkFOR0UgIiwgIiAiY2hhbm5lbHMgPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgcnRwX2R0bWZfc3JjX3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKSBcImF1ZGlvXCIsICIKLSAgICAgICAgInBheWxvYWQgPSAoaW50KSAiIEdTVF9SVFBfUEFZTE9BRF9EWU5BTUlDX1NUUklORyAiLCAiCi0gICAgICAgICJjbG9jay1yYXRlID0gKGludCkgWyAwLCBNQVggXSwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiVEVMRVBIT05FLUVWRU5UXCIiKQotICAgICk7Ci0KLQotc3RhdGljIHZvaWQKLWNoZWNrX2dldF9kdG1mX2V2ZW50X21lc3NhZ2UgKEdzdEJ1cyAqIGJ1cywgZ2ludCBudW1iZXIsIGdpbnQgdm9sdW1lKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBnYm9vbGVhbiBoYXZlX21lc3NhZ2UgPSBGQUxTRTsKLQotICB3aGlsZSAoIWhhdmVfbWVzc2FnZSAmJgotICAgICAgKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5UKSkgIT0gTlVMTCkgewotICAgIGlmIChnc3RfbWVzc2FnZV9oYXNfbmFtZSAobWVzc2FnZSwgImR0bWYtZXZlbnQiKSkgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gICAgICBnaW50IHN0eXBlLCBzbnVtYmVyLCBzbWV0aG9kLCBzdm9sdW1lOwotCi0gICAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXQgKHMsCi0gICAgICAgICAgICAgICJ0eXBlIiwgR19UWVBFX0lOVCwgJnN0eXBlLAotICAgICAgICAgICAgICAibnVtYmVyIiwgR19UWVBFX0lOVCwgJnNudW1iZXIsCi0gICAgICAgICAgICAgICJtZXRob2QiLCBHX1RZUEVfSU5ULCAmc21ldGhvZCwKLSAgICAgICAgICAgICAgInZvbHVtZSIsIEdfVFlQRV9JTlQsICZzdm9sdW1lLCBOVUxMKSk7Ci0KLSAgICAgIGZhaWxfdW5sZXNzIChzdHlwZSA9PSAxKTsKLSAgICAgIGZhaWxfdW5sZXNzIChzbWV0aG9kID09IDEpOwotICAgICAgZmFpbF91bmxlc3MgKHNudW1iZXIgPT0gbnVtYmVyKTsKLSAgICAgIGZhaWxfdW5sZXNzIChzdm9sdW1lID09IHZvbHVtZSk7Ci0gICAgICBoYXZlX21lc3NhZ2UgPSBUUlVFOwotICAgIH0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoaGF2ZV9tZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX25vX2R0bWZfZXZlbnRfbWVzc2FnZSAoR3N0QnVzICogYnVzKQotewotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBnYm9vbGVhbiBoYXZlX21lc3NhZ2UgPSBGQUxTRTsKLQotICB3aGlsZSAoIWhhdmVfbWVzc2FnZSAmJgotICAgICAgKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5UKSkgIT0gTlVMTCkgewotICAgIGlmIChnc3RfbWVzc2FnZV9oYXNfbmFtZSAobWVzc2FnZSwgImR0bWYtZXZlbnQiKSB8fAotICAgICAgICBnc3RfbWVzc2FnZV9oYXNfbmFtZSAobWVzc2FnZSwgImR0bWYtZXZlbnQtcHJvY2Vzc2VkIikgfHwKLSAgICAgICAgZ3N0X21lc3NhZ2VfaGFzX25hbWUgKG1lc3NhZ2UsICJkdG1mLWV2ZW50LWRyb3BwZWQiKSkgewotICAgICAgaGF2ZV9tZXNzYWdlID0gVFJVRTsKLSAgICB9Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICB9Ci0KLSAgZmFpbF91bmxlc3MgKCFoYXZlX21lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZAotY2hlY2tfYnVmZmVyc19kdXJhdGlvbiAoR3N0Q2xvY2tUaW1lIGV4cGVjdGVkX2R1cmF0aW9uKQotewotICBHc3RDbG9ja1RpbWUgZHVyYXRpb24gPSAwOwotCi0gIHdoaWxlIChidWZmZXJzKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBidWZmZXJzLT5kYXRhOwotCi0gICAgYnVmZmVycyA9IGdfbGlzdF9kZWxldGVfbGluayAoYnVmZmVycywgYnVmZmVycyk7Ci0KLSAgICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVVJBVElPTl9JU19WQUxJRCAoYnVmKSk7Ci0gICAgZHVyYXRpb24gKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci0KLSAgZmFpbF91bmxlc3MgKGR1cmF0aW9uID09IGV4cGVjdGVkX2R1cmF0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfcnRwX3BhY2tldCAoR3N0UGFkICogc3JjLCBndWludCB0aW1lc3RhbXAsIGdib29sZWFuIG1hcmtlciwgZ2Jvb2xlYW4gZW5kLAotICAgIGd1aW50IG51bWJlciwgZ3VpbnQgdm9sdW1lLCBndWludCBkdXJhdGlvbikKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdFJUUEJ1ZmZlciBydHBidWYgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBnY2hhciAqcGF5bG9hZDsKLSAgc3RhdGljIGd1aW50IHNlcW51bSA9IDE7Ci0KLSAgYnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlICg0LCAwLCAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1JFQURXUklURSwgJnJ0cGJ1ZikpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxICgmcnRwYnVmLCBzZXFudW0rKyk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF90aW1lc3RhbXAgKCZydHBidWYsIHRpbWVzdGFtcCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHBidWYsIG1hcmtlcik7Ci0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cGJ1Zik7Ci0gIHBheWxvYWRbMF0gPSBudW1iZXI7Ci0gIHBheWxvYWRbMV0gPSB2b2x1bWUgfCAoZW5kID8gRU5EX0JJVCA6IDApOwotICBHU1RfV1JJVEVfVUlOVDE2X0JFIChwYXlsb2FkICsgMiwgZHVyYXRpb24pOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cGJ1Zik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyYywgYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0cGR0bWZkZXBheSkKLXsKLSAgR3N0RWxlbWVudCAqZHRtZmRlcGF5OwotICBHc3RQYWQgKnNyYywgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RDYXBzICpjYXBzX2luOwotICBHc3RDYXBzICpleHBlY3RlZF9jYXBzX291dDsKLSAgR3N0Q2FwcyAqY2Fwc19vdXQ7Ci0KLSAgZHRtZmRlcGF5ID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJydHBkdG1mZGVwYXkiKTsKLSAgc2luayA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZHRtZmRlcGF5LCAmYXVkaW9fc2lua190ZW1wbGF0ZSk7Ci0gIHNyYyA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChkdG1mZGVwYXksICZydHBfZHRtZl9zcmNfdGVtcGxhdGUpOwotCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChkdG1mZGVwYXksIGJ1cyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGR0bWZkZXBheSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0KLSAgY2Fwc19pbiA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsICJURUxFUEhPTkUtRVZFTlQiLAotICAgICAgIm1lZGlhIiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwKLSAgICAgICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgMTAwMCwgInBheWxvYWQiLCBHX1RZUEVfSU5ULCA5OSwgTlVMTCk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKHNyYywgZHRtZmRlcGF5LCBjYXBzX2luLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwc19pbik7Ci0KLSAgY2Fwc19vdXQgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHNpbmspOwotICBleHBlY3RlZF9jYXBzX291dCA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgR1NUX0FVRElPX05FIChTMTYpLAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCAxMDAwLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsX2ZpeGVkIChjYXBzX291dCwgZXhwZWN0ZWRfY2Fwc19vdXQpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGV4cGVjdGVkX2NhcHNfb3V0KTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHNfb3V0KTsKLQotICAvKiBTaW5nbGUgcGFja2V0IERUTUYgKi8KLSAgc2VuZF9ydHBfcGFja2V0IChzcmMsIDIwMCwgVFJVRSwgVFJVRSwgMSwgNSwgMjUwKTsKLSAgY2hlY2tfZ2V0X2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzLCAxLCA1KTsKLSAgY2hlY2tfYnVmZmVyc19kdXJhdGlvbiAoMjUwICogR1NUX01TRUNPTkQpOwotCi0gIC8qIFR3byBwYWNrZXQgRFRNRiAqLwotICBzZW5kX3J0cF9wYWNrZXQgKHNyYywgODAwLCBUUlVFLCBGQUxTRSwgMSwgNSwgMjAwKTsKLSAgc2VuZF9ydHBfcGFja2V0IChzcmMsIDgwMCwgRkFMU0UsIFRSVUUsIDEsIDUsIDQwMCk7Ci0gIGNoZWNrX2J1ZmZlcnNfZHVyYXRpb24gKDQwMCAqIEdTVF9NU0VDT05EKTsKLSAgY2hlY2tfZ2V0X2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzLCAxLCA1KTsKLQotICAvKiBMb25nIERUTUYgKi8KLSAgc2VuZF9ydHBfcGFja2V0IChzcmMsIDMwMDAsIFRSVUUsIEZBTFNFLCAxLCA1LCAyMDApOwotICBjaGVja19nZXRfZHRtZl9ldmVudF9tZXNzYWdlIChidXMsIDEsIDUpOwotICBjaGVja19idWZmZXJzX2R1cmF0aW9uICgyMDAgKiBHU1RfTVNFQ09ORCk7Ci0gIHNlbmRfcnRwX3BhY2tldCAoc3JjLCAzMDAwLCBGQUxTRSwgRkFMU0UsIDEsIDUsIDQwMCk7Ci0gIGNoZWNrX25vX2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzKTsKLSAgY2hlY2tfYnVmZmVyc19kdXJhdGlvbiAoMjAwICogR1NUX01TRUNPTkQpOwotICBzZW5kX3J0cF9wYWNrZXQgKHNyYywgMzAwMCwgRkFMU0UsIEZBTFNFLCAxLCA1LCA2MDApOwotICBjaGVja19ub19kdG1mX2V2ZW50X21lc3NhZ2UgKGJ1cyk7Ci0gIGNoZWNrX2J1ZmZlcnNfZHVyYXRpb24gKDIwMCAqIEdTVF9NU0VDT05EKTsKLQotICAvKiBOZXcgd2l0aG91dCBlbmQgdG8gbGFzdCAqLwotICBzZW5kX3J0cF9wYWNrZXQgKHNyYywgNDAwMCwgVFJVRSwgVFJVRSwgMSwgNSwgMjUwKTsKLSAgY2hlY2tfZ2V0X2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzLCAxLCA1KTsKLSAgY2hlY2tfYnVmZmVyc19kdXJhdGlvbiAoMjUwICogR1NUX01TRUNPTkQpOwotCi0gIGNoZWNrX25vX2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMgPT0gTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGR0bWZkZXBheSwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZHRtZmRlcGF5KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGR0bWZkZXBheSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChkdG1mZGVwYXkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHJ0cF9kdG1mX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICAgIm1lZGlhID0gKHN0cmluZykgXCJhdWRpb1wiLCAiCi0gICAgICAgICJwYXlsb2FkID0gKGludCkgOTksICIKLSAgICAgICAgImNsb2NrLXJhdGUgPSAoaW50KSAxMDAwLCAiCi0gICAgICAgICJzZXFudW0tb2Zmc2V0ID0gKHVpbnQpIDMzMywgIgotICAgICAgICAidGltZXN0YW1wLW9mZnNldCA9ICh1aW50KSA2NjYsICIKLSAgICAgICAgInNzcmMgPSAodWludCkgOTk5LCAiCi0gICAgICAgICJtYXhwdGltZSA9ICh1aW50KSAyMCwgZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpIFwiVEVMRVBIT05FLUVWRU5UXCIiKQotICAgICk7Ci0KLUdzdEVsZW1lbnQgKmR0bWZzcmM7Ci1Hc3RQYWQgKnNpbms7Ci1Hc3RDbG9jayAqdGVzdGNsb2NrOwotR3N0QnVzICpidXM7Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19tZXNzYWdlX3N0cnVjdHVyZSAoR3N0U3RydWN0dXJlICogZXhwZWN0ZWRfcykKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgZ2Jvb2xlYW4gaGF2ZV9tZXNzYWdlID0gRkFMU0U7Ci0KLSAgd2hpbGUgKCFoYXZlX21lc3NhZ2UgJiYKLSAgICAgIChtZXNzYWdlID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSwKLSAgICAgICAgICAgICAgR1NUX01FU1NBR0VfRUxFTUVOVCkpICE9IE5VTEwpIHsKLSAgICBpZiAoZ3N0X21lc3NhZ2VfaGFzX25hbWUgKG1lc3NhZ2UsIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKGV4cGVjdGVkX3MpKSkgewotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0KLSAgICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChzLCBleHBlY3RlZF9zKSk7Ci0gICAgICBoYXZlX21lc3NhZ2UgPSBUUlVFOwotICAgIH0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoaGF2ZV9tZXNzYWdlKTsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGV4cGVjdGVkX3MpOwotfQotCi1zdGF0aWMgdm9pZAotY2hlY2tfcnRwX2J1ZmZlciAoR3N0Q2xvY2tUaW1lIHRzLCBHc3RDbG9ja1RpbWUgZHVyYXRpb24sIGdib29sZWFuIHN0YXJ0LAotICAgIGdib29sZWFuIGVuZCwgZ3VpbnQgcnRwdHMsIGd1aW50IHNzcmMsIGd1aW50IHZvbHVtZSwgZ3VpbnQgbnVtYmVyLAotICAgIGd1aW50IHJ0cGR1cmF0aW9uKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0UlRQQnVmZmVyIHJ0cGJ1ZmZlciA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0gIGdjaGFyICpwYXlsb2FkOwotCi0gIGdfbXV0ZXhfbG9jayAoJmNoZWNrX211dGV4KTsKLSAgd2hpbGUgKGJ1ZmZlcnMgPT0gTlVMTCkKLSAgICBnX2NvbmRfd2FpdCAoJmNoZWNrX2NvbmQsICZjaGVja19tdXRleCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmY2hlY2tfbXV0ZXgpOwotICBmYWlsX3VubGVzcyAoYnVmZmVycyAhPSBOVUxMKTsKLQotICBidWZmZXIgPSBidWZmZXJzLT5kYXRhOwotICBidWZmZXJzID0gZ19saXN0X2RlbGV0ZV9saW5rIChidWZmZXJzLCBidWZmZXJzKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPT0gdHMpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9PSBkdXJhdGlvbik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHBidWZmZXIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ydHBfYnVmZmVyX2dldF9tYXJrZXIgKCZydHBidWZmZXIpID09IHN0YXJ0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAgKCZydHBidWZmZXIpID09IHJ0cHRzKTsKLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwYnVmZmVyKTsKLQotICBmYWlsX3VubGVzcyAocGF5bG9hZFswXSA9PSBudW1iZXIpOwotICBmYWlsX3VubGVzcyAoKHBheWxvYWRbMV0gJiAweDdGKSA9PSB2b2x1bWUpOwotICBmYWlsX3VubGVzcyAoISAhKHBheWxvYWRbMV0gJiAweDgwKSA9PSBlbmQpOwotICBmYWlsX3VubGVzcyAoR1NUX1JFQURfVUlOVDE2X0JFIChwYXlsb2FkICsgMikgPT0gcnRwZHVyYXRpb24pOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLX0KLQotZ2ludCBtZXRob2Q7Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9ydHBkdG1mc3JjICh2b2lkKQotewotICB0ZXN0Y2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotCi0gIG1ldGhvZCA9IDE7Ci0gIGR0bWZzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInJ0cGR0bWZzcmMiKTsKLSAgc2luayA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZHRtZnNyYywgJnJ0cF9kdG1mX3NpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChkdG1mc3JjLCBidXMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIChkdG1mc3JjLCB0ZXN0Y2xvY2spKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkdG1mc3JjLCBHU1RfU1RBVEVfUExBWUlORykgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZWFyZG93bl9kdG1mc3JjICh2b2lkKQotewotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmssIEZBTFNFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZHRtZnNyYywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZHRtZnNyYyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChkdG1mc3JjKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZHRtZnNyY19pbnZhbGlkX2V2ZW50cykKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotCi0gIC8qIE1pc3Npbmcgc3RhcnQgKi8KLSAgcyA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiZHRtZi1ldmVudCIsCi0gICAgICAidHlwZSIsIEdfVFlQRV9JTlQsIDEsICJudW1iZXIiLCBHX1RZUEVfSU5ULCAzLAotICAgICAgIm1ldGhvZCIsIEdfVFlQRV9JTlQsIG1ldGhvZCwgInZvbHVtZSIsIEdfVFlQRV9JTlQsIDgsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzaW5rLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCBzKSkgPT0gRkFMU0UpOwotCi0gIC8qIE1pc3Npbmcgdm9sdW1lICovCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLCAibnVtYmVyIiwgR19UWVBFX0lOVCwgMywKLSAgICAgICJtZXRob2QiLCBHX1RZUEVfSU5ULCBtZXRob2QsICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc2luaywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgcykpID09IEZBTFNFKTsKLQotICAvKiBNaXNzaW5nIG51bWJlciAqLwotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJkdG1mLWV2ZW50IiwKLSAgICAgICJ0eXBlIiwgR19UWVBFX0lOVCwgMSwgIm1ldGhvZCIsIEdfVFlQRV9JTlQsIG1ldGhvZCwKLSAgICAgICJ2b2x1bWUiLCBHX1RZUEVfSU5ULCA4LCAic3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNpbmssCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sIHMpKSA9PSBGQUxTRSk7Ci0KLSAgLyogTWlzc2luZyB0eXBlICovCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgIm51bWJlciIsIEdfVFlQRV9JTlQsIDMsICJtZXRob2QiLCBHX1RZUEVfSU5ULCBtZXRob2QsCi0gICAgICAidm9sdW1lIiwgR19UWVBFX0lOVCwgOCwgInN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzaW5rLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLCBzKSkgPT0gRkFMU0UpOwotCi0gIC8qIFN0b3AgYmVmb3JlIHN0YXJ0ICovCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLCAibnVtYmVyIiwgR19UWVBFX0lOVCwgMywKLSAgICAgICJtZXRob2QiLCBHX1RZUEVfSU5ULCBtZXRob2QsICJ2b2x1bWUiLCBHX1RZUEVfSU5ULCA4LAotICAgICAgInN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIEZBTFNFLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc2luaywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwgcykpID09IEZBTFNFKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGR0bWZzcmMsIEdTVF9TVEFURV9OVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBkdG1mc3JjX21pbl9kdXJhdGlvbikKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RDbG9ja0lEIGlkOwotICBndWludCB0aW1lc3RhbXAgPSAwOwotICBHc3RDYXBzICpleHBlY3RlZF9jYXBzLCAqY2FwczsKLQotICAvKiBNaW5pbXVtIGR1cmF0aW9uIGR0bWYgKi8KLQotICBzID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJkdG1mLWV2ZW50IiwKLSAgICAgICJ0eXBlIiwgR19UWVBFX0lOVCwgMSwgIm51bWJlciIsIEdfVFlQRV9JTlQsIDMsCi0gICAgICAibWV0aG9kIiwgR19UWVBFX0lOVCwgMSwgInZvbHVtZSIsIEdfVFlQRV9JTlQsIDgsCi0gICAgICAic3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNpbmssCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAocykpKSk7Ci0gIGNoZWNrX25vX2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkIChHU1RfVEVTVF9DTE9DSyAodGVzdGNsb2NrKSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOwotICBpZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR1NUX1RFU1RfQ0xPQ0sgKHRlc3RjbG9jaykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Nsb2NrX2lkX2dldF90aW1lIChpZCkgPT0gMCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzLCAiZHRtZi1ldmVudC1wcm9jZXNzZWQiKTsKLSAgY2hlY2tfbWVzc2FnZV9zdHJ1Y3R1cmUgKHMpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLCAibWV0aG9kIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNpbmssCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAocykpKSk7Ci0KLSAgY2hlY2tfcnRwX2J1ZmZlciAoMCwgMjAgKiBHU1RfTVNFQ09ORCwgVFJVRSwgRkFMU0UsIDY2NiwgOTk5LCA4LCAzLCAyMCk7Ci0KLSAgZm9yICh0aW1lc3RhbXAgPSAyMDsgdGltZXN0YW1wIDwgTUlOX1BVTFNFX0RVUkFUSU9OICsgMjA7IHRpbWVzdGFtcCArPSAyMCkgewotICAgIGdzdF90ZXN0X2Nsb2NrX2FkdmFuY2VfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKHRlc3RjbG9jayksCi0gICAgICAgIDIwICogR1NUX01TRUNPTkQgKyAxKTsKLSAgICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKEdTVF9URVNUX0NMT0NLICh0ZXN0Y2xvY2spLCBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoYnVmZmVycyA9PSBOVUxMKTsKLSAgICBpZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR1NUX1RFU1RfQ0xPQ0sgKHRlc3RjbG9jaykpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKGlkKSA9PSB0aW1lc3RhbXAgKiBHU1RfTVNFQ09ORCk7Ci0gICAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgICBpZiAodGltZXN0YW1wIDwgTUlOX1BVTFNFX0RVUkFUSU9OKSB7Ci0gICAgICBjaGVja19ydHBfYnVmZmVyICh0aW1lc3RhbXAgKiBHU1RfTVNFQ09ORCwgMjAgKiBHU1RfTVNFQ09ORCwgRkFMU0UsCi0gICAgICAgICAgRkFMU0UsIDY2NiwgOTk5LCA4LCAzLCB0aW1lc3RhbXAgKyAyMCk7Ci0gICAgICBjaGVja19ub19kdG1mX2V2ZW50X21lc3NhZ2UgKGJ1cyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUgKHMsICJkdG1mLWV2ZW50LXByb2Nlc3NlZCIpOwotICAgICAgY2hlY2tfbWVzc2FnZV9zdHJ1Y3R1cmUgKHMpOwotICAgICAgY2hlY2tfcnRwX2J1ZmZlciAodGltZXN0YW1wICogR1NUX01TRUNPTkQsCi0gICAgICAgICAgKDIwICsgTUlOX0lOVEVSX0RJR0lUX0lOVEVSVkFMKSAqIEdTVF9NU0VDT05ELCBGQUxTRSwgVFJVRSwgNjY2LAotICAgICAgICAgIDk5OSwgOCwgMywgdGltZXN0YW1wICsgMjApOwotICAgIH0KLQotICAgIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOwotICB9Ci0KLQotICBmYWlsX3VubGVzcyAoZ3N0X3Rlc3RfY2xvY2tfcGVla19pZF9jb3VudCAoR1NUX1RFU1RfQ0xPQ0sgKHRlc3RjbG9jaykpID09IDApOwotCi0gIC8qIGNhcHMgY2hlY2sgKi8KLQotICBleHBlY3RlZF9jYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtcnRwIiwKLSAgICAgICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgIlRFTEVQSE9ORS1FVkVOVCIsCi0gICAgICAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAiYXVkaW8iLAotICAgICAgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCAxMDAwLCAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIDk5LAotICAgICAgInNlcW51bS1vZmZzZXQiLCBHX1RZUEVfVUlOVCwgMzMzLAotICAgICAgInRpbWVzdGFtcC1vZmZzZXQiLCBHX1RZUEVfVUlOVCwgNjY2LAotICAgICAgInNzcmMiLCBHX1RZUEVfVUlOVCwgOTk5LCAicHRpbWUiLCBHX1RZUEVfVUlOVCwgMjAsIE5VTEwpOwotICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzaW5rKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2Nhbl9pbnRlcnNlY3QgKGNhcHMsIGV4cGVjdGVkX2NhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoZXhwZWN0ZWRfY2Fwcyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkdG1mc3JjLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgY2hlY2tfbm9fZHRtZl9ldmVudF9tZXNzYWdlIChidXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb19kdG1mc3JjX3NpbmtfdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIFwiIiBHU1RfQVVESU9fTkUgKFMxNikgIlwiLCAiCi0gICAgICAgICJyYXRlID0gKGludCkgODAwMywgIiAiY2hhbm5lbHMgPSAoaW50KSAxIikKLSAgICApOwotc3RhdGljIHZvaWQKLXNldHVwX2R0bWZzcmMgKHZvaWQpCi17Ci0gIHRlc3RjbG9jayA9IGdzdF90ZXN0X2Nsb2NrX25ldyAoKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgbWV0aG9kID0gMjsKLSAgZHRtZnNyYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiZHRtZnNyYyIpOwotICBzaW5rID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChkdG1mc3JjLCAmYXVkaW9fZHRtZnNyY19zaW5rX3RlbXBsYXRlKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZHRtZnNyYywgYnVzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9jbG9jayAoZHRtZnNyYywgdGVzdGNsb2NrKSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZHRtZnNyYywgR1NUX1NUQVRFX1BMQVlJTkcpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotfQotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2R0bWZzcmNfbWluX2R1cmF0aW9uKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdENsb2NrSUQgaWQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAgPSAwOwotICBHc3RDYXBzICpleHBlY3RlZF9jYXBzLCAqY2FwczsKLSAgZ3VpbnQgaW50ZXJ2YWw7Ci0KLSAgZ19vYmplY3RfZ2V0IChkdG1mc3JjLCAiaW50ZXJ2YWwiLCAmaW50ZXJ2YWwsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW50ZXJ2YWwgPT0gNTApOwotCi0gIC8qIE1pbmltdW0gZHVyYXRpb24gZHRtZiAqLwotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKHRlc3RjbG9jayksIDApOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLCAibnVtYmVyIiwgR19UWVBFX0lOVCwgMywKLSAgICAgICJtZXRob2QiLCBHX1RZUEVfSU5ULCAyLCAidm9sdW1lIiwgR19UWVBFX0lOVCwgOCwKLSAgICAgICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc2luaywKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwKLSAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9jb3B5IChzKSkpKTsKLQotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKEdTVF9URVNUX0NMT0NLICh0ZXN0Y2xvY2spLCBOVUxMKTsKLSAgaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpID09IDApOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKLQotICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lIChzLCAiZHRtZi1ldmVudC1wcm9jZXNzZWQiKTsKLSAgY2hlY2tfbWVzc2FnZV9zdHJ1Y3R1cmUgKHMpOwotCi0gIHMgPSBnc3Rfc3RydWN0dXJlX25ldyAoImR0bWYtZXZlbnQiLAotICAgICAgInR5cGUiLCBHX1RZUEVfSU5ULCAxLCAibWV0aG9kIiwgR19UWVBFX0lOVCwgMiwKLSAgICAgICJzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBGQUxTRSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNpbmssCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19jdXN0b20gKEdTVF9FVkVOVF9DVVNUT01fVVBTVFJFQU0sCi0gICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAocykpKSk7Ci0KLSAgZm9yICh0aW1lc3RhbXAgPSBpbnRlcnZhbCAqIEdTVF9NU0VDT05EOwotICAgICAgdGltZXN0YW1wIDwgKE1JTl9QVUxTRV9EVVJBVElPTiArIE1JTl9JTlRFUl9ESUdJVF9JTlRFUlZBTCkgKgotICAgICAgR1NUX01TRUNPTkQ7IHRpbWVzdGFtcCArPSBHU1RfTVNFQ09ORCAqIGludGVydmFsKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkIChHU1RfVEVTVF9DTE9DSyAodGVzdGNsb2NrKSwgTlVMTCk7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lIChHU1RfVEVTVF9DTE9DSyAodGVzdGNsb2NrKSwKLSAgICAgICAgaW50ZXJ2YWwgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgICBpZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR1NUX1RFU1RfQ0xPQ0sgKHRlc3RjbG9jaykpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKGlkKSA9PSB0aW1lc3RhbXApOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICB9Ci0KLSAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZSAocywgImR0bWYtZXZlbnQtcHJvY2Vzc2VkIik7Ci0gIGNoZWNrX21lc3NhZ2Vfc3RydWN0dXJlIChzKTsKLQotICBjaGVja19idWZmZXJzX2R1cmF0aW9uICgoTUlOX1BVTFNFX0RVUkFUSU9OICsgTUlOX0lOVEVSX0RJR0lUX0lOVEVSVkFMKSAqCi0gICAgICBHU1RfTVNFQ09ORCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90ZXN0X2Nsb2NrX3BlZWtfaWRfY291bnQgKEdTVF9URVNUX0NMT0NLICh0ZXN0Y2xvY2spKSA9PSAwKTsKLQotICAvKiBjYXBzIGNoZWNrICovCi0KLSAgZXhwZWN0ZWRfY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgR1NUX0FVRElPX05FIChTMTYpLAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCA4MDAzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoc2luayk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19jYW5faW50ZXJzZWN0IChjYXBzLCBleHBlY3RlZF9jYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGV4cGVjdGVkX2NhcHMpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZHRtZnNyYywgR1NUX1NUQVRFX05VTEwpOwotCi0gIGNoZWNrX25vX2R0bWZfZXZlbnRfbWVzc2FnZSAoYnVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZHRtZl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJkdG1mIik7Ci0gIFRDYXNlICp0YzsKLQotICB0YyA9IHRjYXNlX2NyZWF0ZSAoInJ0cGR0bWZkZXBheSIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfcnRwZHRtZmRlcGF5KTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Yyk7Ci0KLSAgdGMgPSB0Y2FzZV9jcmVhdGUgKCJydHBkdG1mc3JjIik7Ci0gIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjLCBzZXR1cF9ydHBkdG1mc3JjLCB0ZWFyZG93bl9kdG1mc3JjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjLCB0ZXN0X2R0bWZzcmNfaW52YWxpZF9ldmVudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfcnRwZHRtZnNyY19taW5fZHVyYXRpb24pOwotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjKTsKLQotICB0YyA9IHRjYXNlX2NyZWF0ZSAoImR0bWZzcmMiKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGMsIHNldHVwX2R0bWZzcmMsIHRlYXJkb3duX2R0bWZzcmMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGMsIHRlc3RfZHRtZnNyY19pbnZhbGlkX2V2ZW50cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0YywgdGVzdF9kdG1mc3JjX21pbl9kdXJhdGlvbik7Ci0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGMpOwotCi0gIHJldHVybiBzOwotfQotCi0KLUdTVF9DSEVDS19NQUlOIChkdG1mKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2VxdWFsaXplci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZXF1YWxpemVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NjliZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZXF1YWxpemVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBlcXVhbGl6ZXIuYzogVW5pdCB0ZXN0IGZvciB0aGUgZXF1YWxpemVyIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2V0cmFuc2Zvcm0uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotI2RlZmluZSBFUVVBTElaRVJfQ0FQU19TVFJJTkcgICAgICAgICAgICAgICAgICAgICBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiZm9ybWF0ID0gKHN0cmluZykgIkdTVF9BVURJT19ORSAoRjY0KSAiLCAiICAgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgICAgICAgICAgICBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAicmF0ZSA9IChpbnQpIDQ4MDAwIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChGNjQpICIsICIKLSAgICAgICAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgInJhdGUgPSAoaW50KSA0ODAwMCIpCi0gICAgKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKEY2NCkgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAicmF0ZSA9IChpbnQpIDQ4MDAwIikKLSAgICApOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9lcXVhbGl6ZXIgKHZvaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmVxdWFsaXplcjsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9lcXVhbGl6ZXIiKTsKLSAgZXF1YWxpemVyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJlcXVhbGl6ZXItbmJhbmRzIik7Ci0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKGVxdWFsaXplciwgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChlcXVhbGl6ZXIsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBlcXVhbGl6ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX2VxdWFsaXplciAoR3N0RWxlbWVudCAqIGVxdWFsaXplcikKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9lcXVhbGl6ZXIiKTsKLQotICBnX2xpc3RfZm9yZWFjaCAoYnVmZmVycywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGVxdWFsaXplcik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZXF1YWxpemVyKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGVxdWFsaXplcik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VxdWFsaXplcl81YmFuZHNfcGFzc3Rocm91Z2gpCi17Ci0gIEdzdEVsZW1lbnQgKmVxdWFsaXplcjsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2RvdWJsZSAqaW4sICpyZXM7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZXF1YWxpemVyID0gc2V0dXBfZXF1YWxpemVyICgpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChlcXVhbGl6ZXIpLCAibnVtLWJhbmRzIiwgNSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAoR1NUX0NISUxEX1BST1hZCi0gICAgICAgICAgKGVxdWFsaXplcikpLCA1KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlcXVhbGl6ZXIsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIGluW2ldID0gZ19yYW5kb21fZG91YmxlX3JhbmdlICgtMS4wLCAxLjApOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChFUVVBTElaRVJfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgZXF1YWxpemVyLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0gIC8qIC4uLiBhbmQgcHV0cyBhIG5ldyBidWZmZXIgb24gdGhlIGdsb2JhbCBsaXN0ICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLQotICBnc3RfYnVmZmVyX21hcCAoR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSksICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIHJlcyA9IChnZG91YmxlICopIG1hcC5kYXRhOwotCi0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChpbltpXSwgcmVzW2ldKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSksICZtYXApOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9lcXVhbGl6ZXIgKGVxdWFsaXplcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXF1YWxpemVyXzViYW5kc19taW51c18yNCkKLXsKLSAgR3N0RWxlbWVudCAqZXF1YWxpemVyOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zX2luLCBybXNfb3V0OwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGVxdWFsaXplciA9IHNldHVwX2VxdWFsaXplciAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZXF1YWxpemVyKSwgIm51bS1iYW5kcyIsIDUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKEdTVF9DSElMRF9QUk9YWQotICAgICAgICAgIChlcXVhbGl6ZXIpKSwgNSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotICAgIEdPYmplY3QgKmJhbmQgPQotICAgICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHU1RfQ0hJTERfUFJPWFkgKGVxdWFsaXplciksIGkpOwotICAgIGZhaWxfdW5sZXNzIChiYW5kICE9IE5VTEwpOwotCi0gICAgZ19vYmplY3Rfc2V0IChiYW5kLCAiZ2FpbiIsIC0yNC4wLCBOVUxMKTsKLSAgICBnX29iamVjdF91bnJlZiAoYmFuZCk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlcXVhbGl6ZXIsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTAyNCAqIHNpemVvZiAoZ2RvdWJsZSkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbiA9IChnZG91YmxlICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIGluW2ldID0gZ19yYW5kb21fZG91YmxlX3JhbmdlICgtMS4wLCAxLjApOwotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0KLSAgcm1zX2luID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtc19pbiArPSBpbltpXSAqIGluW2ldOwotICBybXNfaW4gPSBzcXJ0IChybXNfaW4gLyAxMDI0KTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEVRVUFMSVpFUl9DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBlcXVhbGl6ZXIsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLSAgLyogLi4uIGFuZCBwdXRzIGEgbmV3IGJ1ZmZlciBvbiB0aGUgZ2xvYmFsIGxpc3QgKi8KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEpOwotCi0gIGdzdF9idWZmZXJfbWFwIChHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKSwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgcmVzID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0KLSAgcm1zX291dCA9IDAuMDsKLSAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykKLSAgICBybXNfb3V0ICs9IHJlc1tpXSAqIHJlc1tpXTsKLSAgcm1zX291dCA9IHNxcnQgKHJtc19vdXQgLyAxMDI0KTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSksICZtYXApOwotCi0gIGZhaWxfdW5sZXNzIChybXNfaW4gPiBybXNfb3V0KTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfZXF1YWxpemVyIChlcXVhbGl6ZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VxdWFsaXplcl81YmFuZHNfcGx1c18xMikKLXsKLSAgR3N0RWxlbWVudCAqZXF1YWxpemVyOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBnZG91YmxlICppbiwgKnJlcywgcm1zX2luLCBybXNfb3V0OwotICBnaW50IGk7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGVxdWFsaXplciA9IHNldHVwX2VxdWFsaXplciAoKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZXF1YWxpemVyKSwgIm51bS1iYW5kcyIsIDUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRyZW5fY291bnQgKEdTVF9DSElMRF9QUk9YWQotICAgICAgICAgIChlcXVhbGl6ZXIpKSwgNSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotICAgIEdPYmplY3QgKmJhbmQgPQotICAgICAgICBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHU1RfQ0hJTERfUFJPWFkgKGVxdWFsaXplciksIGkpOwotICAgIGZhaWxfdW5sZXNzIChiYW5kICE9IE5VTEwpOwotCi0gICAgZ19vYmplY3Rfc2V0IChiYW5kLCAiZ2FpbiIsIDEyLjAsIE5VTEwpOwotICAgIGdfb2JqZWN0X3VucmVmIChiYW5kKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVxdWFsaXplciwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDI0ICogc2l6ZW9mIChnZG91YmxlKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgaW5baV0gPSBnX3JhbmRvbV9kb3VibGVfcmFuZ2UgKC0xLjAsIDEuMCk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLQotICBybXNfaW4gPSAwLjA7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspCi0gICAgcm1zX2luICs9IGluW2ldICogaW5baV07Ci0gIHJtc19pbiA9IHNxcnQgKHJtc19pbiAvIDEwMjQpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoRVFVQUxJWkVSX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGVxdWFsaXplciwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICAvKiAuLi4gYW5kIHB1dHMgYSBuZXcgYnVmZmVyIG9uIHRoZSBnbG9iYWwgbGlzdCAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICByZXMgPSAoZ2RvdWJsZSAqKSBtYXAuZGF0YTsKLQotICBybXNfb3V0ID0gMC4wOwotICBmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrKQotICAgIHJtc19vdXQgKz0gcmVzW2ldICogcmVzW2ldOwotICBybXNfb3V0ID0gc3FydCAocm1zX291dCAvIDEwMjQpOwotICBnc3RfYnVmZmVyX3VubWFwIChHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKSwgJm1hcCk7Ci0KLSAgZmFpbF91bmxlc3MgKHJtc19pbiA8IHJtc19vdXQpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9lcXVhbGl6ZXIgKGVxdWFsaXplcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXF1YWxpemVyX2JhbmRfbnVtYmVyX2NoYW5naW5nKQotewotICBHc3RFbGVtZW50ICplcXVhbGl6ZXI7Ci0gIGdpbnQgaTsKLQotICBlcXVhbGl6ZXIgPSBzZXR1cF9lcXVhbGl6ZXIgKCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZXF1YWxpemVyKSwgIm51bS1iYW5kcyIsIDUsIE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkcmVuX2NvdW50IChHU1RfQ0hJTERfUFJPWFkKLSAgICAgICAgICAoZXF1YWxpemVyKSksIDUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICBHT2JqZWN0ICpiYW5kOwotCi0gICAgYmFuZCA9IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXggKEdTVF9DSElMRF9QUk9YWSAoZXF1YWxpemVyKSwgaSk7Ci0gICAgZmFpbF91bmxlc3MgKGJhbmQgIT0gTlVMTCk7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGJhbmQpOwotICB9Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZXF1YWxpemVyKSwgIm51bS1iYW5kcyIsIDEwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZHJlbl9jb3VudCAoR1NUX0NISUxEX1BST1hZCi0gICAgICAgICAgKGVxdWFsaXplcikpLCAxMCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICBHT2JqZWN0ICpiYW5kOwotCi0gICAgYmFuZCA9IGdzdF9jaGlsZF9wcm94eV9nZXRfY2hpbGRfYnlfaW5kZXggKEdTVF9DSElMRF9QUk9YWSAoZXF1YWxpemVyKSwgaSk7Ci0gICAgZmFpbF91bmxlc3MgKGJhbmQgIT0gTlVMTCk7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGJhbmQpOwotICB9Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2VxdWFsaXplciAoZXF1YWxpemVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lcXVhbGl6ZXJfcHJlc2V0cykKLXsKLSAgR3N0RWxlbWVudCAqZXExLCAqZXEyOwotICBnaW50IHR5cGU7Ci0gIGdkb3VibGUgZ2FpbiwgZnJlcTsKLQotICBlcTEgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImVxdWFsaXplci1uYmFuZHMiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZXExKSwgIm51bS1iYW5kcyIsIDMsIE5VTEwpOwotCi0gIC8qIHNldCBwcm9wZXJ0aWVzIHRvIG5vbi1kZWZhdWx0cyAqLwotICBnc3RfY2hpbGRfcHJveHlfc2V0ICgoR3N0Q2hpbGRQcm94eSAqKSBlcTEsCi0gICAgICAiYmFuZDA6OnR5cGUiLCAwLCAiYmFuZDA6OmdhaW4iLCAtMy4wLCAiYmFuZDA6OmZyZXEiLCAxMDAuMCwKLSAgICAgICJiYW5kMTo6dHlwZSIsIDEsICJiYW5kMTo6Z2FpbiIsICszLjAsICJiYW5kMTo6ZnJlcSIsIDEwMDAuMCwKLSAgICAgICJiYW5kMjo6dHlwZSIsIDIsICJiYW5kMjo6Z2FpbiIsICs5LjAsICJiYW5kMjo6ZnJlcSIsIDEwMDAwLjAsIE5VTEwpOwotCi0gIC8qIHNhdmUgcHJlc2V0ICovCi0gIGdzdF9wcmVzZXRfc2F2ZV9wcmVzZXQgKChHc3RQcmVzZXQgKikgZXExLCAiX3Rlc3RwcmVzZXRfIik7Ci0gIEdTVF9JTkZPX09CSkVDVCAoZXExLCAiUHJlc2V0IHNhdmVkIik7Ci0KLSAgZXEyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJlcXVhbGl6ZXItbmJhbmRzIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGVxMiksICJudW0tYmFuZHMiLCAzLCBOVUxMKTsKLQotICAvKiBsb2FkIHByZXNldCAqLwotICBnc3RfcHJlc2V0X2xvYWRfcHJlc2V0ICgoR3N0UHJlc2V0ICopIGVxMiwgIl90ZXN0cHJlc2V0XyIpOwotICBHU1RfSU5GT19PQkpFQ1QgKGVxMSwgIlByZXNldCBsb2FkZWQiKTsKLQotICAvKiBjb21wYXJlIHByb3BlcnRpZXMgKi8KLSAgZ3N0X2NoaWxkX3Byb3h5X2dldCAoKEdzdENoaWxkUHJveHkgKikgZXEyLAotICAgICAgImJhbmQwOjp0eXBlIiwgJnR5cGUsICJiYW5kMDo6Z2FpbiIsICZnYWluLCAiYmFuZDA6OmZyZXEiLCAmZnJlcSwgTlVMTCk7Ci0gIGNrX2Fzc2VydF9pbnRfZXEgKHR5cGUsIDApOwotICBmYWlsX3VubGVzcyAoZ2FpbiA9PSAtMy4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGZyZXEgPT0gMTAwLjAsIE5VTEwpOwotICBnc3RfY2hpbGRfcHJveHlfZ2V0ICgoR3N0Q2hpbGRQcm94eSAqKSBlcTIsCi0gICAgICAiYmFuZDE6OnR5cGUiLCAmdHlwZSwgImJhbmQxOjpnYWluIiwgJmdhaW4sICJiYW5kMTo6ZnJlcSIsICZmcmVxLCBOVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9lcSAodHlwZSwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnYWluID09ICszLjAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZnJlcSA9PSAxMDAwLjAsIE5VTEwpOwotICBnc3RfY2hpbGRfcHJveHlfZ2V0ICgoR3N0Q2hpbGRQcm94eSAqKSBlcTIsCi0gICAgICAiYmFuZDI6OnR5cGUiLCAmdHlwZSwgImJhbmQyOjpnYWluIiwgJmdhaW4sICJiYW5kMjo6ZnJlcSIsICZmcmVxLCBOVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9lcSAodHlwZSwgMik7Ci0gIGZhaWxfdW5sZXNzIChnYWluID09ICs5LjAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZnJlcSA9PSAxMDAwMC4wLCBOVUxMKTsKLQotICBnc3RfcHJlc2V0X2RlbGV0ZV9wcmVzZXQgKChHc3RQcmVzZXQgKikgZXExLCAiX3Rlc3RwcmVzZXRfIik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChlcTEpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZXEyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1lcXVhbGl6ZXJfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZXF1YWxpemVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VxdWFsaXplcl81YmFuZHNfcGFzc3Rocm91Z2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZXF1YWxpemVyXzViYW5kc19taW51c18yNCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lcXVhbGl6ZXJfNWJhbmRzX3BsdXNfMTIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZXF1YWxpemVyX2JhbmRfbnVtYmVyX2NoYW5naW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VxdWFsaXplcl9wcmVzZXRzKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGVxdWFsaXplcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9mbGFjcGFyc2UuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZsYWNwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmI2YzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZsYWNwYXJzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGZsYWNwYXJzZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBDb250YWN0OiBTdGVmYW4gS29zdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlICJwYXJzZXIuaCIKLQotI2RlZmluZSBTUkNfQ0FQU19UTVBMICAiYXVkaW8veC1mbGFjLCBmcmFtZWQ9KGJvb2xlYW4pZmFsc2UiCi0jZGVmaW5lIFNJTktfQ0FQU19UTVBMICAiYXVkaW8veC1mbGFjLCBmcmFtZWQ9KGJvb2xlYW4pdHJ1ZSIKLQotR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTSU5LX0NBUFNfVE1QTCkKLSAgICApOwotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNSQ19DQVBTX1RNUEwpCi0gICAgKTsKLQotLyogc29tZSBkYXRhICovCi1zdGF0aWMgZ3VpbnQ4IHN0cmVhbWluZm9faGVhZGVyW10gPSB7Ci0gIDB4N2YsIDB4NDYsIDB4NGMsIDB4NDEsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsCi0gIDB4MDIsIDB4NjYsIDB4NGMsIDB4NjEsIDB4NDMsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MjIsIDB4MTIsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4YzQsIDB4NDAsIDB4ZjAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBndWludDggY29tbWVudF9oZWFkZXJbXSA9IHsKLSAgMHg4NCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGd1aW50OCBmbGFjX2ZyYW1lW10gPSB7Ci0gIDB4ZmYsIDB4ZjgsIDB4YTksIDB4MDgsIDB4MDAsIDB4NTAsIDB4MTgsIDB4MDYsCi0gIDB4NmEsIDB4MGMsIDB4Y2UsIDB4MTMsIDB4MjQsIDB4MTksIDB4NjgsIDB4MDAsCi0gIDB4NDYsIDB4MjMsIDB4MDgsIDB4Y2EsIDB4Y2IsIDB4NTgsIDB4OWMsIDB4MjYsCi0gIDB4OTIsIDB4MzAsIDB4YTYsIDB4MjksIDB4OGEsIDB4Y2EsIDB4ZDEsIDB4MTgsCi0gIDB4YWUsIDB4MjYsIDB4NWMsIDB4OTAsIDB4NjAsIDB4YmYsIDB4MTEsIDB4YWQsCi0gIDB4NDMsIDB4MDIsIDB4MDYsIDB4MjYsIDB4YmQsIDB4MzUsIDB4ZGQsIDB4YTMsCi0gIDB4MTEsIDB4YTYsIDB4NGQsIDB4MTgsIDB4OGMsIDB4OWEsIDB4ZTQsIDB4NjIsCi0gIDB4ZDksIDB4MjMsIDB4MTEsIDB4OGIsIDB4Y2IsIDB4NTYsIDB4NTUsIDB4NDUsCi0gIDB4YzIsIDB4MTgsIDB4NTYsIDB4YTIsIDB4ZTIsIDB4ZTEsIDB4MTgsIDB4OTksCi0gIDB4NTQsIDB4OTgsIDB4NDYsIDB4NGQsIDB4MDgsIDB4NzAsIDB4OWEsIDB4NjQsCi0gIDB4YzQsIDB4MTgsIDB4NGYsIDB4MjcsIDB4NjQsIDB4MzEsIDB4NjYsIDB4MjcsCi0gIDB4NzksIDB4MTksIDB4M2MsIDB4OGMsIDB4OGMsIDB4YTMsIDB4NDQsIDB4MTgsCi0gIDB4MjMsIDB4ZDIsIDB4NmIsIDB4OGIsIDB4NjQsIDB4OGMsIDB4MjEsIDB4ODQsCi0gIDB4ZDYsIDB4MjMsIDB4MTMsIDB4MTMsIDB4MmQsIDB4NDQsIDB4Y2EsIDB4NWEsCi0gIDB4MjMsIDB4MDksIDB4OTMsIDB4MjUsIDB4MTgsIDB4MTAsIDB4NjEsIDB4MzgsCi0gIDB4YjQsIDB4NjAsIDB4OGYsIDB4MmMsIDB4OGQsIDB4MjYsIDB4YjQsIDB4YzksCi0gIDB4ZDksIDB4MTksIDB4MTksIDB4MzQsIDB4ZDcsIDB4MzEsIDB4MDYsIDB4MTAsCi0gIDB4YzQsIDB4MzAsIDB4ODMsIDB4MTcsIDB4ZTIsIDB4MGMsIDB4MmMsIDB4YzQsCi0gIDB4YzgsIDB4YzksIDB4M2MsIDB4NWUsIDB4OTMsIDB4MTEsIDB4OGEsIDB4NjIsCi0gIDB4NjQsIDB4OGMsIDB4MjYsIDB4MjMsIDB4MjIsIDB4MzAsIDB4OWEsIDB4NTgsCi0gIDB4ODYsIDB4MDQsIDB4MTgsIDB4NGMsIDB4YWIsIDB4MmIsIDB4MjYsIDB4NWMsCi0gIDB4NDYsIDB4ODgsIDB4Y2IsIDB4YjEsIDB4MGQsIDB4MjYsIDB4YmIsIDB4NWUsCi0gIDB4OGMsIDB4YTcsIDB4NjQsIDB4MzEsIDB4M2QsIDB4MzEsIDB4MDYsIDB4MjYsCi0gIDB4NDMsIDB4MTcsIDB4YTMsIDB4MDgsIDB4NjEsIDB4MDYsIDB4MTcsIDB4YzQsCi0gIDB4NjIsIDB4ZWMsIDB4NGQsIDB4NGIsIDB4MmUsIDB4MmQsIDB4NGEsIDB4OTQsCi0gIDB4YTQsIDB4YzIsIDB4MzEsIDB4NGMsIDB4NGMsIDB4MjAsIDB4YzAsIDB4ODMsCi0gIDB4MTQsIDB4OGMsIDB4MjcsIDB4OGIsIDB4MzEsIDB4MjMsIDB4MmYsIDB4MjMsCi0gIDB4MTEsIDB4OTEsIDB4OTQsIDB4NjUsIDB4MWEsIDB4MjAsIDB4YzIsIDB4MTgsCi0gIDB4ODYsIDB4NTEsIDB4ODgsIDB4NjIsIDB4N2MsIDB4NDMsIDB4MmUsIDB4YTMsCi0gIDB4MDQsIDB4MTgsIDB4OGMsIDB4MjAsIDB4YzIsIDB4ZjUsIDB4YWEsIDB4OTQsCi0gIDB4YzIsIDB4MzEsIDB4MzIsIDB4ZDIsIDB4YjIsIDB4YTIsIDB4MzAsIDB4YmEsCi0gIDB4MTAsIDB4YzIsIDB4YjUsIDB4ODksIDB4YTUsIDB4MTgsIDB4MTAsIDB4NjIsCi0gIDB4OWEsIDB4MTAsIDB4NjEsIDB4MTksIDB4NzIsIDB4NzEsIDB4MWEsIDB4YjksCi0gIDB4MGMsIDB4MjMsIDB4NDYsIDB4MTAsIDB4NjIsIDB4NzgsIDB4ODEsIDB4ODIsCi0gIDB4M2QsIDB4NzUsIDB4ZWEsIDB4NmIsIDB4NTEsIDB4OGIsIDB4NjEsIDB4MDYsCi0gIDB4MDgsIDB4NjIsIDB4MzIsIDB4NWUsIDB4ODQsIDB4MTgsIDB4MjcsIDB4MjUsCi0gIDB4YzIsIDB4NmEsIDB4NGIsIDB4NTEsIDB4MzEsIDB4MzQsIDB4NWUsIDB4MjksCi0gIDB4YTEsIDB4M2MsIDB4NGQsIDB4MjYsIDB4MjMsIDB4MTAsIDB4YzIsIDB4NmIsCi0gIDB4YjEsIDB4MGQsIDB4MTEsIDB4YWUsIDB4NDYsIDB4ODgsIDB4MzEsIDB4MzUsCi0gIDB4YjEsIDB4MDYsIDB4MDgsIDB4NzksIDB4N2UsIDB4NGYsIDB4NTMsIDB4MjMsCi0gIDB4MjksIDB4YTQsIDB4MzAsIDB4MjAsIDB4MzAsIDB4MjMsIDB4NWEsIDB4YjIsCi0gIDB4YzgsIDB4NjAsIDB4OWMsIDB4OTMsIDB4MTMsIDB4MTcsIDB4OTIsIDB4OTgsCi0gIDB4NDYsIDB4MTMsIDB4NTQsIDB4NTMsIDB4MDgsIDB4Y2IsIDB4MTMsIDB4YTEsCi0gIDB4MWEsIDB4ODksIDB4ZTUsIDB4NDYsIDB4MDgsIDB4MTgsIDB4MTAsIDB4MzAsCi0gIDB4OWQsIDB4NjgsIDB4YzIsIDB4MWMsIDB4NDYsIDB4NDYsIDB4YWUsIDB4NjIsCi0gIDB4MWEsIDB4NDYsIDB4NGUsIDB4NGQsIDB4MzQsIDB4OGMsIDB4YmQsIDB4MjYsCi0gIDB4YzAsIDB4NDAsIDB4NjIsIDB4YzksIDB4YTksIDB4MzEsIDB4NzQsIDB4YTgsCi0gIDB4OTksIDB4NTIsIDB4YjAsIDB4OGMsIDB4YTksIDB4MjksIDB4ODQsIDB4NjEsCi0gIDB4MTksIDB4NTQsIDB4NDMsIDB4MDIsIDB4MDYsIDB4MDQsIDB4MzIsIDB4ZTUsCi0gIDB4MTgsIDB4MjEsIDB4OTEsIDB4OGIsIDB4ZjIsIDB4Y2MsIDB4MTAsIDB4MzAsCi0gIDB4OGUsIDB4MjMsIDB4YzQsIDB4NzYsIDB4NDMsIDB4MDgsIDB4MzAsIDB4ODMsCi0gIDB4MDgsIDB4NjIsIDB4NmMsIDB4NGUsIDB4ZTIsIDB4MzUsIDB4OTYsIDB4ZDAsCi0gIDB4OGUsIDB4ODksIDB4OTcsIDB4NDIsIDB4MTgsIDB4OTEsIDB4ODQsIDB4NjEsCi0gIDB4M2MsIDB4MjYsIDB4YTUsIDB4MmMsIDB4NGUsIDB4MTcsIDB4OTQsIDB4YjgsCi0gIDB4YjUsIDB4YTQsIDB4Y2IsIDB4ODgsIDB4YzksIDB4ODQsIDB4MTgsIDB4YjksCi0gIDB4ODQsIDB4MTksIDB4MjMsIDB4MmQsIDB4YTQsIDB4NjQsIDB4NjIsIDB4MTgsCi0gIDB4ODYsIDB4NTMsIDB4OTMsIDB4Y2IsIDB4MzAsIDB4OGYsIDB4MmYsIDB4OTMsCi0gIDB4NTUsIDB4YzQsIDB4ZDcsIDB4MDgsIDB4NjIsIDB4YjgsIDB4NDYsIDB4ODQsCi0gIDB4NjgsIDB4YTMsIDB4MDIsIDB4YWYsIDB4MzMKLX07Ci0KLXN0YXRpYyBndWludDggZ2FyYmFnZV9mcmFtZVtdID0gewotICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCi19OwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2ZsYWNfbm9ybWFsKQotewotICBnc3RfcGFyc2VyX3Rlc3Rfbm9ybWFsIChmbGFjX2ZyYW1lLCBzaXplb2YgKGZsYWNfZnJhbWUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2ZsYWNfZHJhaW5fc2luZ2xlKQotewotICBnc3RfcGFyc2VyX3Rlc3RfZHJhaW5fc2luZ2xlIChmbGFjX2ZyYW1lLCBzaXplb2YgKGZsYWNfZnJhbWUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2ZsYWNfZHJhaW5fZ2FyYmFnZSkKLXsKLSAgLyogV2UgYWx3YXlzIG91dHB1dCB0aGUgYWZ0ZXIgZnJhbWUgZ2FyYmFnZSB0b28gYmVjYXVzZSB3ZQotICAgKiBoYXZlIG5vIHdheSBvZiBkZXRlY3RpbmcgaXQKLSAgICovCi0jaWYgMAotICBnc3RfcGFyc2VyX3Rlc3RfZHJhaW5fZ2FyYmFnZSAoZmxhY19mcmFtZSwgc2l6ZW9mIChmbGFjX2ZyYW1lKSwKLSAgICAgIGdhcmJhZ2VfZnJhbWUsIHNpemVvZiAoZ2FyYmFnZV9mcmFtZSkpOwotI2VuZGlmCi0gIGd1aW50OCBmcmFtZVtzaXplb2YgKGZsYWNfZnJhbWUpICsgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKV07Ci0KLSAgbWVtY3B5IChmcmFtZSwgZmxhY19mcmFtZSwgc2l6ZW9mIChmbGFjX2ZyYW1lKSk7Ci0gIG1lbWNweSAoZnJhbWUgKyBzaXplb2YgKGZsYWNfZnJhbWUpLCBnYXJiYWdlX2ZyYW1lLCBzaXplb2YgKGdhcmJhZ2VfZnJhbWUpKTsKLQotICBnc3RfcGFyc2VyX3Rlc3RfZHJhaW5fc2luZ2xlIChmcmFtZSwgc2l6ZW9mIChmcmFtZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfZmxhY19zcGxpdCkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X3NwbGl0IChmbGFjX2ZyYW1lLCBzaXplb2YgKGZsYWNfZnJhbWUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2ZsYWNfc2tpcF9nYXJiYWdlKQotewotICAvKiBXZSBhbHdheXMgaW5jbHVkZSB0aGUgZ2FyYmFnZSBpbnRvIHRoZSBmcmFtZSBiZWNhdXNlCi0gICAqIHdlIGhhdmUgbm8gZWFzeSB3YXkgZm9yIGZpbmRpbmcgdGhlIHJlYWwgZW5kIG9mIHRoZQotICAgKiBmcmFtZS4gVGhlIGRlY29kZXIgd2lsbCBsYXRlciBza2lwIHRoZSBnYXJiYWdlCi0gICAqLwotI2lmIDAKLSAgZ3N0X3BhcnNlcl90ZXN0X3NraXBfZ2FyYmFnZSAoZmxhY19mcmFtZSwgc2l6ZW9mIChmbGFjX2ZyYW1lKSwKLSAgICAgIGdhcmJhZ2VfZnJhbWUsIHNpemVvZiAoZ2FyYmFnZV9mcmFtZSkpOwotI2VuZGlmCi0gIGd1aW50OCBmcmFtZVtzaXplb2YgKGZsYWNfZnJhbWUpICsgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKV07Ci0KLSAgbWVtY3B5IChmcmFtZSwgZmxhY19mcmFtZSwgc2l6ZW9mIChmbGFjX2ZyYW1lKSk7Ci0gIG1lbWNweSAoZnJhbWUgKyBzaXplb2YgKGZsYWNfZnJhbWUpLCBnYXJiYWdlX2ZyYW1lLCBzaXplb2YgKGdhcmJhZ2VfZnJhbWUpKTsKLQotICBnc3RfcGFyc2VyX3Rlc3Rfbm9ybWFsIChmcmFtZSwgc2l6ZW9mIChmcmFtZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotI2RlZmluZSBzdHJ1Y3R1cmVfZ2V0X2ludChzLGYpIFwKLSAgICAoZ192YWx1ZV9nZXRfaW50KGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHMsZikpKQotI2RlZmluZSBmYWlsX3VubGVzc19zdHJ1Y3R1cmVfZmllbGRfaW50X2VxdWFscyhzLGZpZWxkLG51bSkgXAotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0cnVjdHVyZV9nZXRfaW50KHMsZmllbGQpLCBudW0pCi0vKgotICogVGVzdCBpZiB0aGUgcGFyc2VyIGhhbmRsZXMgcmF3IHN0cmVhbSBhbmQgY29kZWNfZGF0YSBpbmZvIHByb3Blcmx5LgotICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9mbGFjX2RldGVjdF9zdHJlYW0pCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgY29uc3QgR1ZhbHVlICpzdHJlYW1oZWFkZXI7Ci0gIEdBcnJheSAqYnVmYXJyOwotICBnaW50IGk7Ci0KLSAgLyogUHVzaCByYW5kb20gZGF0YS4gSXQgc2hvdWxkIGdldCB0aHJvdWdoIHNpbmNlIHRoZSBwYXJzZXIgc2hvdWxkIGJlCi0gICAqIGluaXRpYWxpemVkIGJlY2F1c2UgaXQgZ290IGNvZGVjX2RhdGEgaW4gdGhlIGNhcHMgKi8KLSAgY2FwcyA9IGdzdF9wYXJzZXJfdGVzdF9nZXRfb3V0cHV0X2NhcHMgKGZsYWNfZnJhbWUsIHNpemVvZiAoZmxhY19mcmFtZSksCi0gICAgICBTUkNfQ0FQU19UTVBMKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgbmVnb3RpYXRlZCBjYXBzIGFyZSBhcyBleHBlY3RlZCAqLwotICAvKiBXaGVuIGNvZGVjX2RhdGEgaXMgcHJlc2VudCwgcGFyc2VyIGFzc3VtZXMgdGhhdCBkYXRhIGlzIHZlcnNpb24gNCAqLwotICBHU1RfTE9HICgiZmxhYyBvdXRwdXQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXVkaW8veC1mbGFjIikpOwotICBmYWlsX3VubGVzc19zdHJ1Y3R1cmVfZmllbGRfaW50X2VxdWFscyAocywgImNoYW5uZWxzIiwgMSk7Ci0gIGZhaWxfdW5sZXNzX3N0cnVjdHVyZV9maWVsZF9pbnRfZXF1YWxzIChzLCAicmF0ZSIsIDQ0MTAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAic3RyZWFtaGVhZGVyIikpOwotICBzdHJlYW1oZWFkZXIgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInN0cmVhbWhlYWRlciIpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFIChzdHJlYW1oZWFkZXIpID09IEdTVF9UWVBFX0FSUkFZKTsKLSAgYnVmYXJyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKHN0cmVhbWhlYWRlcik7Ci0gIGZhaWxfdW5sZXNzIChidWZhcnItPmxlbiA9PSAyKTsKLSAgZm9yIChpID0gMDsgaSA8IGJ1ZmFyci0+bGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZjsKLSAgICBHVmFsdWUgKmJ1ZnZhbCA9ICZnX2FycmF5X2luZGV4IChidWZhcnIsIEdWYWx1ZSwgaSk7Ci0KLSAgICBmYWlsX3VubGVzcyAoR19WQUxVRV9UWVBFIChidWZ2YWwpID09IEdTVF9UWVBFX0JVRkZFUik7Ci0gICAgYnVmID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIgKGJ1ZnZhbCk7Ci0gICAgaWYgKGkgPT0gMCkgewotICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZikgPT0gc2l6ZW9mIChzdHJlYW1pbmZvX2hlYWRlcikpOwotICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChidWYsIDAsIHN0cmVhbWluZm9faGVhZGVyLAotICAgICAgICAgICAgICBzaXplb2YgKHN0cmVhbWluZm9faGVhZGVyKSkgPT0gMCk7Ci0gICAgfSBlbHNlIGlmIChpID09IDEpIHsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpID09IHNpemVvZiAoY29tbWVudF9oZWFkZXIpKTsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmLCAwLCBjb21tZW50X2hlYWRlciwKLSAgICAgICAgICAgICAgc2l6ZW9mIChjb21tZW50X2hlYWRlcikpID09IDApOwotICAgIH0KLSAgfQotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZmxhY3BhcnNlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImZsYWNwYXJzZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLQotICAvKiBpbml0IHRlc3QgY29udGV4dCAqLwotICBjdHhfZmFjdG9yeSA9ICJmbGFjcGFyc2UiOwotICBjdHhfc2lua190ZW1wbGF0ZSA9ICZzaW5rdGVtcGxhdGU7Ci0gIGN0eF9zcmNfdGVtcGxhdGUgPSAmc3JjdGVtcGxhdGU7Ci0gIGN0eF9kaXNjYXJkID0gMzsKLSAgY3R4X2hlYWRlcnNbMF0uZGF0YSA9IHN0cmVhbWluZm9faGVhZGVyOwotICBjdHhfaGVhZGVyc1swXS5zaXplID0gc2l6ZW9mIChzdHJlYW1pbmZvX2hlYWRlcik7Ci0gIGN0eF9oZWFkZXJzWzFdLmRhdGEgPSBjb21tZW50X2hlYWRlcjsKLSAgY3R4X2hlYWRlcnNbMV0uc2l6ZSA9IHNpemVvZiAoY29tbWVudF9oZWFkZXIpOwotCi0gIC8qIGN1c3RvbSBvZmZzZXRzLCBhbmQgdHMgYWx3YXlzIHJlcGVhdGVkbHkgMCAqLwotICBjdHhfbm9fbWV0YWRhdGEgPSBUUlVFOwotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2ZsYWNfbm9ybWFsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2ZsYWNfZHJhaW5fc2luZ2xlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2ZsYWNfZHJhaW5fZ2FyYmFnZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9mbGFjX3NwbGl0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX2ZsYWNfc2tpcF9nYXJiYWdlKTsKLQotICAvKiBPdGhlciB0ZXN0cyAqLwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfZmxhY19kZXRlY3Rfc3RyZWFtKTsKLQotICByZXR1cm4gczsKLX0KLQotCi0vKgotICogVE9ETzoKLSAqICAgLSBCb3RoIHB1c2gtIGFuZCBwdWxsLW1vZGVzIG5lZWQgdG8gYmUgdGVzdGVkCi0gKiAgICAgICogUHVsbC1tb2RlICYgRU9TCi0gKi8KLUdTVF9DSEVDS19NQUlOIChmbGFjcGFyc2UpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2ZGVtdXguYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ZsdmRlbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4OTU1YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2ZGVtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgZmx2ZGVtdXgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGltLVBoaWxpcHAgTcO8bGxlciAgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgSGF2YXJkIEdyYWZmICAgICAgICA8aGF2YXJkQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdGFnL3RhZy5oPgotCi1zdGF0aWMgdm9pZAotcGFkX2FkZGVkX2NiIChHc3RFbGVtZW50ICogZmx2ZGVtdXgsIEdzdFBhZCAqIHBhZCwgR3N0QmluICogcGlwZWxpbmUpCi17Ci0gIEdzdEVsZW1lbnQgKnNpbms7Ci0KLSAgc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKHBpcGVsaW5lLCAiZmFrZXNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKGZsdmRlbXV4LCBzaW5rKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywgR1NUX1NUQVRFX1BBVVNFRCk7Ci19Ci0KLXN0YXRpYyBHc3RCdXNTeW5jUmVwbHkKLWVycm9yX2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICBjb25zdCBnY2hhciAqZmlsZSA9IChjb25zdCBnY2hhciAqKSB1c2VyX2RhdGE7Ci0gICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgIGdjaGFyICpkYmcgPSBOVUxMOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgZ19lcnJvciAoIkVSUk9SIGZvciAlczogJXNcbiVzXG4iLCBmaWxlLCBlcnItPm1lc3NhZ2UsIGRiZyk7Ci0gIH0KLQotICByZXR1cm4gR1NUX0JVU19QQVNTOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZG9mZl9jYiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0UGFkICogcGFkLAotICAgIGdpbnQgKiBwX2NvdW50ZXIpCi17Ci0gICpwX2NvdW50ZXIgKz0gMTsKLSAgR1NUX0xPRyAoImNvdW50ZXIgPSAlZCIsICpwX2NvdW50ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvY2Vzc19maWxlIChjb25zdCBnY2hhciAqIGZpbGUsIGdib29sZWFuIHB1c2hfbW9kZSwgZ2ludCByZXBlYXQsCi0gICAgZ2ludCBudW1fYnVmZmVycykKLXsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2VwLCAqc2luaywgKmZsdmRlbXV4LCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBnY2hhciAqcGF0aDsKLSAgZ2ludCBjb3VudGVyOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBwaXBlbGluZSEiKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0KLSAgLyoga2lkcywgZG9uJ3QgdXNlIGEgc3luYyBoYW5kbGVyIGZvciB0aGlzIGF0IGhvbWUsIHJlYWxseTsgd2UgZG8gYmVjYXVzZQotICAgKiB3ZSBqdXN0IHdhbnQgdG8gYWJvcnQgYW5kIG5vdGhpbmcgZWxzZSAqLwotICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKGJ1cywgZXJyb3JfY2IsIChncG9pbnRlcikgZmlsZSwgTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsICJmaWxlc3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ2ZpbGVzcmMnIGVsZW1lbnQhIik7Ci0KLSAgaWYgKHB1c2hfbW9kZSkgewotICAgIHNlcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgInF1ZXVlIik7Ci0gICAgZmFpbF91bmxlc3MgKHNlcCAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAncXVldWUnIGVsZW1lbnQiKTsKLSAgfSBlbHNlIHsKLSAgICBzZXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJpZGVudGl0eSIpOwotICAgIGZhaWxfdW5sZXNzIChzZXAgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ2lkZW50aXR5JyBlbGVtZW50Iik7Ci0gIH0KLQotICBmbHZkZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZsdmRlbXV4IiwgImZsdmRlbXV4Iik7Ci0gIGZhaWxfdW5sZXNzIChmbHZkZW11eCAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAnZmx2ZGVtdXgnIGVsZW1lbnQhIik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgImZha2VzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdmYWtlc2luaycgZWxlbWVudCEiKTsKLQotICBnX29iamVjdF9zZXQgKHNpbmssICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLIChoYW5kb2ZmX2NiKSwgJmNvdW50ZXIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBzZXAsIGZsdmRlbXV4LCBzaW5rLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzZXApKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNlcCwgZmx2ZGVtdXgpKTsKLQotICAvKiBjYW4ndCBsaW5rIGZsdmRlbXV4IGFuZCBzaW5rIHlldCwgZG8gdGhhdCBsYXRlciAqLwotICBnX3NpZ25hbF9jb25uZWN0IChmbHZkZW11eCwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sgKHBhZF9hZGRlZF9jYiksIHBpcGVsaW5lKTsKLQotICBwYXRoID0gZ19idWlsZF9maWxlbmFtZSAoR1NUX1RFU1RfRklMRVNfUEFUSCwgZmlsZSwgTlVMTCk7Ci0gIEdTVF9MT0cgKCJwcm9jZXNzaW5nIGZpbGUgJyVzJyIsIHBhdGgpOwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgcGF0aCwgTlVMTCk7Ci0KLSAgZG8gewotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgICBHU1RfTE9HICgicmVwZWF0PSVkIiwgcmVwZWF0KTsKLQotICAgIGNvdW50ZXIgPSAwOwotCi0gICAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gICAgaWYgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgICBHU1RfTE9HICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggUEFVU0VEIHN0YXRlIik7Ci0gICAgICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGF0ZV9yZXQsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgfQotCi0gICAgR1NUX0xPRyAoIlBBVVNFRCwgbGV0J3MgcmVhZCBhbGwgb2YgaXQiKTsKLQotICAgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gICAgZmFpbF91bmxlc3MgKG1zZyAhPSBOVUxMLCAiRXhwZWN0ZWQgRU9TIG1lc3NhZ2Ugb24gYnVzISAoJXMpIiwgZmlsZSk7Ci0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICAgIGlmIChudW1fYnVmZmVycyA+PSAwKSB7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChjb3VudGVyLCBudW1fYnVmZmVycyk7Ci0gICAgfQotCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpLAotICAgICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gICAgLS1yZXBlYXQ7Ci0gIH0gd2hpbGUgKHJlcGVhdCA+IDApOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBnX2ZyZWUgKHBhdGgpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZXVzZV9wdWxsKQotewotICBwcm9jZXNzX2ZpbGUgKCJwY20xNnNpbmUuZmx2IiwgRkFMU0UsIDMsIDEyOSk7Ci0gIGdzdF90YXNrX2NsZWFudXBfYWxsICgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JldXNlX3B1c2gpCi17Ci0gIHByb2Nlc3NfZmlsZSAoInBjbTE2c2luZS5mbHYiLCBUUlVFLCAzLCAxMjkpOwotICBnc3RfdGFza19jbGVhbnVwX2FsbCAoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWNyZWF0ZV9idWZmZXIgKGd1aW50OCAqIGRhdGEsIGdzaXplIHNpemUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksCi0gICAgICBkYXRhLCBzaXplLCAwLCBzaXplLCBOVUxMLCBOVUxMKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mbHZkZW11eF9wYWRfYWRkZWQgKEdzdEVsZW1lbnQgKiBmbHZkZW11eCwgR3N0UGFkICogc3JjcGFkLCBHc3RIYXJuZXNzICogaCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgKHZvaWQpIGZsdmRlbXV4OwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9oYXJuZXNzX2FkZF9lbGVtZW50X3NyY19wYWQgKGgsIHNyY3BhZCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NwZWV4KQotewotICBndWludDggZmx2X2hlYWRlcjBbXSA9IHsKLSAgICAweDQ2LCAweDRjLCAweDU2LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLSAgfTsKLQotICBndWludDggZmx2X2hlYWRlcjFbXSA9IHsKLSAgICAweDEyLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MGEsIDB4NmYsIDB4NmUsCi0gICAgMHg0ZCwgMHg2NSwgMHg3NCwgMHg2MSwgMHg0NCwgMHg2MSwgMHg3NCwgMHg2MSwKLSAgICAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDYxLAotICAgIDB4NzUsIDB4NjQsIDB4NjksIDB4NmYsIDB4NjMsIDB4NmYsIDB4NjQsIDB4NjUsCi0gICAgMHg2MywgMHg2OSwgMHg2NCwgMHgwMCwgMHg0MCwgMHgyNiwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBmLCAweDZkLCAweDY1LAotICAgIDB4NzQsIDB4NjEsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4NjMsIDB4NzIsCi0gICAgMHg2NSwgMHg2MSwgMHg3NCwgMHg2ZiwgMHg3MiwgMHgwMiwgMHgwMCwgMHgxMywKLSAgICAweDQ3LCAweDUzLCAweDc0LCAweDcyLCAweDY1LCAweDYxLCAweDZkLCAweDY1LAotICAgIDB4NzIsIDB4MjAsIDB4NDYsIDB4NGMsIDB4NTYsIDB4MjAsIDB4NmQsIDB4NzUsCi0gICAgMHg3OCwgMHg2NSwgMHg3MiwgMHgwMCwgMHgwYywgMHg2MywgMHg3MiwgMHg2NSwKLSAgICAweDYxLCAweDc0LCAweDY5LCAweDZmLCAweDZlLCAweDY0LCAweDYxLCAweDc0LAotICAgIDB4NjUsIDB4MDIsIDB4MDAsIDB4MTgsIDB4NTcsIDB4NjUsIDB4NjQsIDB4MjAsCi0gICAgMHg1MywgMHg2NSwgMHg3MCwgMHgyMCwgMHgzMiwgMHgzMywgMHgyMCwgMHgzMSwKLSAgICAweDMwLCAweDNhLCAweDM0LCAweDM5LCAweDNhLCAweDM1LCAweDM2LCAweDIwLAotICAgIDB4MzIsIDB4MzAsIDB4MzEsIDB4MzUsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHg4NywKLSAgfTsKLQotICBndWludDggc3BlZXhfaGVhZGVyMFtdID0gewotICAgIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMiwgMHg1MywgMHg3MCwgMHg2NSwgMHg2NSwKLSAgICAweDc4LCAweDIwLCAweDIwLCAweDIwLCAweDMxLCAweDJlLCAweDMyLCAweDcyLAotICAgIDB4NjMsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4ODAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDQwLCAweDAxLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotICB9OwotCi0gIGd1aW50OCBzcGVleF9oZWFkZXIxW10gPSB7Ci0gICAgMHgwOCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4NDUsIDB4NmUsIDB4NjMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NjQsIDB4MjAsCi0gICAgMHg3NywgMHg2OSwgMHg3NCwgMHg2OCwgMHgyMCwgMHg0NywgMHg1MywgMHg3NCwKLSAgICAweDcyLCAweDY1LCAweDYxLCAweDZkLCAweDY1LCAweDcyLCAweDIwLCAweDUzLAotICAgIDB4NzAsIDB4NjUsIDB4NjUsIDB4NzgsIDB4NjUsIDB4NmUsIDB4NjMsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwKLSAgfTsKLQotICBndWludDggYnVmZmVyW10gPSB7Ci0gICAgMHgwOCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweGIyLCAweDM2LCAweDlkLCAweDFiLCAweDlhLAotICAgIDB4MjAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZTgsIDB4ZTgsIDB4ZTgsIDB4ZTgsCi0gICAgMHhlOCwgMHhlOCwgMHhlOCwgMHg4NCwgMHgwMCwgMHhiNCwgMHg3NCwgMHg3NCwKLSAgICAweDc0LCAweDc0LCAweDc0LCAweDc0LCAweDc0LCAweDQyLCAweDAwLCAweDVhLAotICAgIDB4M2EsIDB4M2EsIDB4M2EsIDB4M2EsIDB4M2EsIDB4M2EsIDB4M2EsIDB4MjEsCi0gICAgMHgwMCwgMHgyZCwgMHgxZCwgMHgxZCwgMHgxZCwgMHgxZCwgMHgxZCwgMHgxZCwKLSAgICAweDFkLCAweDFiLCAweDNiLCAweDYwLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAotICAgIDB4YWIsIDB4MGEsIDB4YmEsIDB4YmEsIDB4YmEsIDB4YmEsIDB4YjAsIDB4YWIsCi0gICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHgwYSwgMHhiYSwgMHhiYSwgMHhiYSwKLSAgICAweGJhLCAweGI3LCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotICB9OwotCi0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lcyAoImZsdmRlbXV4IiwgInNpbmsiLCBOVUxMKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgInZpZGVvL3gtZmx2Iik7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoaC0+ZWxlbWVudCwgInBhZC1hZGRlZCIsCi0gICAgICBHX0NBTExCQUNLIChmbHZkZW11eF9wYWRfYWRkZWQpLCBoKTsKLQotICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfYnVmZmVyIChmbHZfaGVhZGVyMCwgc2l6ZW9mIChmbHZfaGVhZGVyMCkpKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX2J1ZmZlciAoZmx2X2hlYWRlcjEsIHNpemVvZiAoZmx2X2hlYWRlcjEpKSk7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGNyZWF0ZV9idWZmZXIgKHNwZWV4X2hlYWRlcjAsIHNpemVvZiAoc3BlZXhfaGVhZGVyMCkpKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX2J1ZmZlciAoc3BlZXhfaGVhZGVyMSwgc2l6ZW9mIChzcGVleF9oZWFkZXIxKSkpOwotICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfYnVmZmVyIChidWZmZXIsIHNpemVvZiAoYnVmZmVyKSkpOwotCi0gIHsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgICBjb25zdCBHVmFsdWUgKnN0cmVhbWhlYWRlcjsKLSAgICBjb25zdCBHVmFsdWUgKmhlYWRlcjsKLSAgICBjb25zdCBHVmFsdWUgKnZvcmJpc2NvbW1lbnQ7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgR3N0VGFnTGlzdCAqbGlzdDsKLSAgICBnaW50IHJhdGU7Ci0gICAgZ2ludCBjaGFubmVsczsKLQotICAgIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKGgtPnNpbmtwYWQpOwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXVkaW8veC1zcGVleCIpKTsKLQotICAgIHN0cmVhbWhlYWRlciA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAic3RyZWFtaGVhZGVyIik7Ci0gICAgZmFpbF91bmxlc3MgKHN0cmVhbWhlYWRlciAhPSBOVUxMKTsKLSAgICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEUyAoc3RyZWFtaGVhZGVyLCBHU1RfVFlQRV9BUlJBWSkpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDIsIGdzdF92YWx1ZV9hcnJheV9nZXRfc2l6ZSAoc3RyZWFtaGVhZGVyKSk7Ci0KLSAgICBoZWFkZXIgPSBnc3RfdmFsdWVfYXJyYXlfZ2V0X3ZhbHVlIChzdHJlYW1oZWFkZXIsIDApOwotICAgIGZhaWxfdW5sZXNzIChoZWFkZXIgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFMgKGhlYWRlciwgR1NUX1RZUEVfQlVGRkVSKSk7Ci0gICAgYnVmID0gZ3N0X3ZhbHVlX2dldF9idWZmZXIgKGhlYWRlcik7Ci0KLSAgICB2b3JiaXNjb21tZW50ID0gZ3N0X3ZhbHVlX2FycmF5X2dldF92YWx1ZSAoc3RyZWFtaGVhZGVyLCAxKTsKLSAgICBmYWlsX3VubGVzcyAoaGVhZGVyICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTIChoZWFkZXIsIEdTVF9UWVBFX0JVRkZFUikpOwotICAgIGJ1ZiA9IGdzdF92YWx1ZV9nZXRfYnVmZmVyICh2b3JiaXNjb21tZW50KTsKLSAgICBsaXN0ID0gZ3N0X3RhZ19saXN0X2Zyb21fdm9yYmlzY29tbWVudF9idWZmZXIgKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGxpc3QgIT0gTlVMTCk7Ci0gICAgZ3N0X3RhZ19saXN0X3VucmVmIChsaXN0KTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgInJhdGUiLCAmcmF0ZSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMTYwMDAsIHJhdGUpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAiY2hhbm5lbHMiLCAmY2hhbm5lbHMpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDEsIGNoYW5uZWxzKTsKLQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIC8qIHdlIHNob3VsZCBoYXZlIGdvdHRlbiAyeCBzcGVleC1oZWFkZXJzLCBhbmQgb25lIGVuY29kZWQgYnVmZmVyICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDMsIGdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWUgKGgpKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hYWMpCi17Ci0gIGd1aW50OCBmbHZfaGVhZGVyW10gPSB7Ci0gICAgMHg0NiwgMHg0YywgMHg1NiwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmQsICAgICAvKiBzY3JpcHQgdGFnICovCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLSAgICAweDAwLCAweDBhLCAweDZmLCAweDZlLCAweDRkLCAweDY1LCAweDc0LCAweDYxLAotICAgIDB4NDQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4MDMsIDB4MDAsIDB4MDYsIDB4NTMsCi0gICAgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg3MiwgMHgwMiwgMHgwMCwgMHgxMSwKLSAgICAweDUwLCAweDY1LCAweDc4LCAweDY5LCAweDcwLCAweDIwLCAweDUyLCAweDU0LAotICAgIDB4NGQsIDB4NTAsIDB4MjAsIDB4NTMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsCi0gICAgMHg3MiwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwKLSAgfTsKLQotICBndWludDggYWFjX2hlYWRlcltdID0gewotICAgIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDQsICAgICAvKiBhdWRpbyB0YWcgKi8KLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFmLAotICAgIDB4MDAsIDB4MTMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGYsCi0gIH07Ci0KLSAgZ3VpbnQ4IGFhY19idWZmZXJbXSA9IHsKLSAgICAweDA4LCAweDAwLCAweDAxLCAweDU3LCAgICAgLyogYXVkaW8gdGFnICovCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwKLSAgICAweDAxLCAweDIxLCAweDIxLCAweDQ1LCAweDAwLCAweDE0LCAweDUwLCAweDAxLAotICAgIDB4NDYsIDB4ZjAsIDB4NGQsIDB4ZmIsIDB4MDEsIDB4M2MsIDB4MDgsIDB4NDAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDA3LCAweDBlLCAweDAwLCAweDBkLCAweGZmLCAweGUyLCAweDE0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gICAgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwgMHhiNCwKLSAgICAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LCAweGI0LAotICAgIDB4YjQsIDB4YjQsIDB4YjQsIDB4YmIsIDB4YzYsIDB4ODQsIDB4MjksIDB4NjksCi0gICAgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwKLSAgICAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LAotICAgIDB4NjksIDB4NjksIDB4NjksIDB4NjksIDB4NjksIDB4NjksIDB4NjksIDB4NjksCi0gICAgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwgMHg2OSwKLSAgICAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDY5LCAweDc4LCAweDAwLCAweDAwLAotICAgIDB4MDEsIDB4NjIKLSAgfTsKLQotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKCJmbHZkZW11eCIsICJzaW5rIiwgTlVMTCk7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGgsICJ2aWRlby94LWZsdiIpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGgtPmVsZW1lbnQsICJwYWQtYWRkZWQiLAotICAgICAgR19DQUxMQkFDSyAoZmx2ZGVtdXhfcGFkX2FkZGVkKSwgaCk7Ci0KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX2J1ZmZlciAoZmx2X2hlYWRlciwgc2l6ZW9mIChmbHZfaGVhZGVyKSkpOwotICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfYnVmZmVyIChhYWNfaGVhZGVyLCBzaXplb2YgKGFhY19oZWFkZXIpKSk7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGNyZWF0ZV9idWZmZXIgKGFhY19idWZmZXIsIHNpemVvZiAoYWFjX2J1ZmZlcikpKTsKLQotICB7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgZ2ludCBtcGVndmVyc2lvbjsKLSAgICBnYm9vbGVhbiBmcmFtZWQ7Ci0gICAgY29uc3QgZ2NoYXIgKnN0cmVhbV9mb3JtYXQ7Ci0gICAgZ2ludCByYXRlOwotICAgIGdpbnQgY2hhbm5lbHM7Ci0gICAgY29uc3QgR1ZhbHVlICpjb2RlY19kYXRhOwotCi0gICAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAoaC0+c2lua3BhZCk7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUgKHMsICJhdWRpby9tcGVnIikpOwotCi0gICAgZ3N0X3N0cnVjdHVyZV9nZXRfaW50IChzLCAibXBlZ3ZlcnNpb24iLCAmbXBlZ3ZlcnNpb24pOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDQsIG1wZWd2ZXJzaW9uKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Jvb2xlYW4gKHMsICJmcmFtZWQiLCAmZnJhbWVkKTsKLSAgICBmYWlsX3VubGVzcyAoZnJhbWVkID09IFRSVUUpOwotCi0gICAgc3RyZWFtX2Zvcm1hdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAocywgInN0cmVhbS1mb3JtYXQiKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICgicmF3Iiwgc3RyZWFtX2Zvcm1hdCk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHMsICJyYXRlIiwgJnJhdGUpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDI0MDAwLCByYXRlKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAocywgImNoYW5uZWxzIiwgJmNoYW5uZWxzKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgyLCBjaGFubmVscyk7Ci0KLSAgICBjb2RlY19kYXRhID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJjb2RlY19kYXRhIik7Ci0gICAgZmFpbF91bmxlc3MgKGNvZGVjX2RhdGEgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFMgKGNvZGVjX2RhdGEsIEdTVF9UWVBFX0JVRkZFUikpOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgLyogd2Ugc2hvdWxkIGhhdmUgZ290dGVuIG9uZSBlbmNvZGVkIGJ1ZmZlciAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgxLCBnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2gyNjQpCi17Ci0gIGd1aW50OCBmbHZfaGVhZGVyW10gPSB7Ci0gICAgMHg0NiwgMHg0YywgMHg1NiwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmQsICAgICAvKiBzY3JpcHQgdGFnICovCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLSAgICAweDAwLCAweDBhLCAweDZmLCAweDZlLCAweDRkLCAweDY1LCAweDc0LCAweDYxLAotICAgIDB4NDQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4MDMsIDB4MDAsIDB4MDYsIDB4NTMsCi0gICAgMHg2NSwgMHg3MiwgMHg3NiwgMHg2NSwgMHg3MiwgMHgwMiwgMHgwMCwgMHgxMSwKLSAgICAweDUwLCAweDY1LCAweDc4LCAweDY5LCAweDcwLCAweDIwLCAweDUyLCAweDU0LAotICAgIDB4NGQsIDB4NTAsIDB4MjAsIDB4NTMsIDB4NjUsIDB4NzIsIDB4NzYsIDB4NjUsCi0gICAgMHg3MiwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwKLSAgfTsKLQotICBndWludDggaDI2NF9wYWNrZXQwW10gPSB7Ci0gICAgMHgwOSwgMHgwMCwgMHgwMCwgMHgxZSwgICAgIC8qIHZpZGVvIHRhZyAqLwotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MiwgMHhjMCwgMHgxZSwKLSAgICAweGZmLCAweGUxLCAweDAwLCAweDBhLCAweDY3LCAweDQyLCAweGMwLCAweDFlLAotICAgIDB4OTUsIDB4YTAsIDB4MjgsIDB4MGIsIDB4ZGUsIDB4NTQsIDB4MDEsIDB4MDAsCi0gICAgMHgwNCwgMHg2OCwgMHhjZSwgMHgzYywgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDI5Ci0gIH07Ci0KLSAgZ3VpbnQ4IGgyNjRfcGFja2V0MVtdID0gewotICAgIDB4MDksIDB4MDAsIDB4MDAsIDB4MWIsICAgICAvKiB2aWRlbyB0YWcgKi8KLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI3LAotICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0gICAgMHg2NywgMHg0MiwgMHhjMCwgMHgxZSwgMHg5NSwgMHhhMCwgMHgyOCwgMHgwYiwKLSAgICAweGRlLCAweDU0LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDY4LCAweGNlLAotICAgIDB4M2MsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjYKLSAgfTsKLQotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKCJmbHZkZW11eCIsICJzaW5rIiwgTlVMTCk7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGgsICJ2aWRlby94LWZsdiIpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGgtPmVsZW1lbnQsICJwYWQtYWRkZWQiLAotICAgICAgR19DQUxMQkFDSyAoZmx2ZGVtdXhfcGFkX2FkZGVkKSwgaCk7Ci0KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX2J1ZmZlciAoZmx2X2hlYWRlciwgc2l6ZW9mIChmbHZfaGVhZGVyKSkpOwotICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfYnVmZmVyIChoMjY0X3BhY2tldDAsIHNpemVvZiAoaDI2NF9wYWNrZXQwKSkpOwotICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfYnVmZmVyIChoMjY0X3BhY2tldDEsIHNpemVvZiAoaDI2NF9wYWNrZXQxKSkpOwotCi0gIHsKLSAgICBHc3RDYXBzICpjYXBzOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczsKLSAgICBjb25zdCBnY2hhciAqc3RyZWFtX2Zvcm1hdDsKLSAgICBjb25zdCBHVmFsdWUgKmNvZGVjX2RhdGE7Ci0KLSAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChoLT5zaW5rcGFkKTsKLSAgICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZSAocywgInZpZGVvL3gtaDI2NCIpKTsKLQotICAgIHN0cmVhbV9mb3JtYXQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKHMsICJzdHJlYW0tZm9ybWF0Iik7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoImF2YyIsIHN0cmVhbV9mb3JtYXQpOwotCi0gICAgY29kZWNfZGF0YSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiY29kZWNfZGF0YSIpOwotICAgIGZhaWxfdW5sZXNzIChjb2RlY19kYXRhICE9IE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTIChjb2RlY19kYXRhLCBHU1RfVFlQRV9CVUZGRVIpKTsKLQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIC8qIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBvbmUgZW5jb2RlZCBidWZmZXIgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMSwgZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZSAoaCkpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1mbHZkZW11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmbHZkZW11eCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXVzZV9wdXNoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JldXNlX3B1bGwpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zcGVleCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hYWMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaDI2NCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChmbHZkZW11eCkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2Zsdm11eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZjliOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZmx2bXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDggKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdHMgZm9yIGZsdm11eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBIYXZhcmQgR3JhZmYgPGhhdmFyZEBwZXhpcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgRGF2aWQgQnVjaG1hbm4gPGRhdmlkQHBleGlwLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9WQUxHUklORAotIyBpbmNsdWRlIDx2YWxncmluZC92YWxncmluZC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0aGFybmVzcy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgR3N0QnVzU3luY1JlcGx5Ci1lcnJvcl9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7Ci0gICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgIGdjaGFyICpkYmcgPSBOVUxMOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgZ19lcnJvciAoIkVSUk9SOiAlc1xuJXNcbiIsIGVyci0+bWVzc2FnZSwgZGJnKTsKLSAgfQotCi0gIHJldHVybiBHU1RfQlVTX1BBU1M7Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kb2ZmX2NiIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsCi0gICAgZ2ludCAqIHBfY291bnRlcikKLXsKLSAgKnBfY291bnRlciArPSAxOwotICBHU1RfTE9HICgiY291bnRlciA9ICVkIiwgKnBfY291bnRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tdXhfcGNtX2F1ZGlvIChndWludCBudW1fYnVmZmVycywgZ3VpbnQgcmVwZWF0KQotewotICBHc3RFbGVtZW50ICpzcmMsICpzaW5rLCAqZmx2bXV4LCAqY29udiwgKnBpcGVsaW5lOwotICBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQ7Ci0gIGdpbnQgY291bnRlcjsKLQotICBHU1RfTE9HICgibnVtX2J1ZmZlcnMgPSAldSIsIG51bV9idWZmZXJzKTsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgcGlwZWxpbmUhIik7Ci0KLSAgLyoga2lkcywgZG9uJ3QgdXNlIGEgc3luYyBoYW5kbGVyIGZvciB0aGlzIGF0IGhvbWUsIHJlYWxseTsgd2UgZG8gYmVjYXVzZQotICAgKiB3ZSBqdXN0IHdhbnQgdG8gYWJvcnQgYW5kIG5vdGhpbmcgZWxzZSAqLwotICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIgKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBlcnJvcl9jYiwgTlVMTCwgTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgImF1ZGlvdGVzdHNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdhdWRpb3Rlc3RzcmMnIGVsZW1lbnQhIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIG51bV9idWZmZXJzLCBOVUxMKTsKLQotICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImF1ZGlvY29udmVydCIpOwotICBmYWlsX3VubGVzcyAoY29udiAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAnYXVkaW9jb252ZXJ0JyBlbGVtZW50ISIpOwotCi0gIGZsdm11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZsdm11eCIsICJmbHZtdXgiKTsKLSAgZmFpbF91bmxlc3MgKGZsdm11eCAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAnZmx2bXV4JyBlbGVtZW50ISIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQhIik7Ci0KLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHNpbmssICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoaGFuZG9mZl9jYiksICZjb3VudGVyKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgY29udiwgZmx2bXV4LCBzaW5rLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBjb252KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChmbHZtdXgsIHNpbmspKTsKLQotICAvKiBub3cgbGluayB0aGUgZWxlbWVudHMgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoZmx2bXV4LCAiYXVkaW8iKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQgIT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgYXVkaW8gcmVxdWVzdCBwYWQiKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY29udiwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwsICJDb3VsZCBub3QgZ2V0IGF1ZGlvY29udmVydCdzIHNvdXJjZSBwYWQiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCksIEdTVF9QQURfTElOS19PSyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgZG8gewotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgICBHU1RfTE9HICgicmVwZWF0PSVkIiwgcmVwZWF0KTsKLQotICAgIGNvdW50ZXIgPSAwOwotCi0gICAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gICAgaWYgKHN0YXRlX3JldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgICBHU1RfTE9HICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggUEFVU0VEIHN0YXRlIik7Ci0gICAgICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGF0ZV9yZXQsIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gICAgfQotCi0gICAgR1NUX0xPRyAoIlBBVVNFRCwgbGV0J3MgZG8gdGhlIHJlc3Qgb2YgaXQiKTsKLQotICAgIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICBtc2cgPSBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKLSAgICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwsICJFeHBlY3RlZCBFT1MgbWVzc2FnZSBvbiBidXMhIik7Ci0KLSAgICBHU1RfTE9HICgiRU9TIik7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgICAvKiBzaG91bGQgaGF2ZSBzb21lIG91dHB1dCAqLwotICAgIGZhaWxfdW5sZXNzIChjb3VudGVyID4gMik7Ci0KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCksCi0gICAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgICAvKiByZXBlYXQgPSB0ZXN0IHJlLXVzYWJpbGl0eSAqLwotICAgIC0tcmVwZWF0OwotICB9IHdoaWxlIChyZXBlYXQgPiAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2luZGV4X3dyaXRpbmcpCi17Ci0gIC8qIG5vdGU6IHRoZXJlJ3MgYSBtYWdpYyAxMjggdmFsdWUgaW4gZmx2bXV4IHdoZW4gZG9pbmcgaW5kZXggd3JpdGluZyAqLwotICBpZiAoKF9faV9fICUgMzMpID09IDEpCi0gICAgbXV4X3BjbV9hdWRpbyAoX19pX18sIDIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotY3JlYXRlX2J1ZmZlciAoZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSwKLSAgICBHc3RDbG9ja1RpbWUgdGltZXN0YW1wLCBHc3RDbG9ja1RpbWUgZHVyYXRpb24pCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksCi0gICAgICBkYXRhLCBzaXplLCAwLCBzaXplLCBOVUxMLCBOVUxMKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSB0aW1lc3RhbXA7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gdGltZXN0YW1wOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gZHVyYXRpb247Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gMDsKLSAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWYpID0gMDsKLSAgcmV0dXJuIGJ1ZjsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3BlZXhfc3RyZWFtYWJsZSkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1hcEluZm8gbWFwID0gR1NUX01BUF9JTkZPX0lOSVQ7Ci0KLSAgZ3VpbnQ4IGhlYWRlcjBbXSA9IHsKLSAgICAweDUzLCAweDcwLCAweDY1LCAweDY1LCAweDc4LCAweDIwLCAweDIwLCAweDIwLAotICAgIDB4MzEsIDB4MmUsIDB4MzIsIDB4NzIsIDB4NjMsIDB4MzEsIDB4MDAsIDB4MDAsCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4M2UsIDB4MDAsIDB4MDAsCi0gICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi0gIH07Ci0KLSAgZ3VpbnQ4IGhlYWRlcjFbXSA9IHsKLSAgICAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDZlLCAweDYzLCAweDZmLAotICAgIDB4NjQsIDB4NjUsIDB4NjQsIDB4MjAsIDB4NzcsIDB4NjksIDB4NzQsIDB4NjgsCi0gICAgMHgyMCwgMHg0NywgMHg1MywgMHg3NCwgMHg3MiwgMHg2NSwgMHg2MSwgMHg2ZCwKLSAgICAweDY1LCAweDcyLCAweDIwLCAweDUzLCAweDcwLCAweDY1LCAweDY1LCAweDc4LAotICAgIDB4NjUsIDB4NmUsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEKLSAgfTsKLQotICBndWludDggYnVmZmVyW10gPSB7Ci0gICAgMHgzNiwgMHg5ZCwgMHgxYiwgMHg5YSwgMHgyMCwgMHgwMCwgMHgwMSwgMHg2OCwKLSAgICAweGU4LCAweGU4LCAweGU4LCAweGU4LCAweGU4LCAweGU4LCAweGU4LCAweDg0LAotICAgIDB4MDAsIDB4YjQsIDB4NzQsIDB4NzQsIDB4NzQsIDB4NzQsIDB4NzQsIDB4NzQsCi0gICAgMHg3NCwgMHg0MiwgMHgwMCwgMHg1YSwgMHgzYSwgMHgzYSwgMHgzYSwgMHgzYSwKLSAgICAweDNhLCAweDNhLCAweDNhLCAweDIxLCAweDAwLCAweDJkLCAweDFkLCAweDFkLAotICAgIDB4MWQsIDB4MWQsIDB4MWQsIDB4MWQsIDB4MWQsIDB4MWIsIDB4M2IsIDB4NjAsCi0gICAgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHhhYiwgMHgwYSwgMHhiYSwgMHhiYSwKLSAgICAweGJhLCAweGJhLCAweGIwLCAweGFiLCAweGFiLCAweGFiLCAweGFiLCAweGFiLAotICAgIDB4MGEsIDB4YmEsIDB4YmEsIDB4YmEsIDB4YmEsIDB4YjcKLSAgfTsKLQotICBHc3RDYXBzICpjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtc3BlZXgiLAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCAxNjAwMCwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICBOVUxMKTsKLQotICBjb25zdCBHc3RDbG9ja1RpbWUgYmFzZV90aW1lID0gMTIzNDU2Nzg5OwotICBjb25zdCBHc3RDbG9ja1RpbWUgZHVyYXRpb25fbXMgPSAyMDsKLSAgY29uc3QgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25fbXMgKiBHU1RfTVNFQ09ORDsKLQotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKCJmbHZtdXgiLCAiYXVkaW8iLCAic3JjIik7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgY2Fwcyk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgInN0cmVhbWFibGUiLCAxLCBOVUxMKTsKLQotICAvKiBwdXNoIHNwZWV4IGhlYWRlcjAgKi8KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX2J1ZmZlciAoaGVhZGVyMCwgc2l6ZW9mIChoZWFkZXIwKSwgYmFzZV90aW1lLCAwKSk7Ci0KLSAgLyogcHVzaCBzcGVleCBoZWFkZXIxICovCi0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGNyZWF0ZV9idWZmZXIgKGhlYWRlcjEsIHNpemVvZiAoaGVhZGVyMSksIGJhc2VfdGltZSwgMCkpOwotCi0gIC8qIHB1c2ggc3BlZXggZGF0YSAqLwotICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfYnVmZmVyIChidWZmZXIsIHNpemVvZiAoYnVmZmVyKSwKLSAgICAgICAgICBiYXNlX3RpbWUsIGR1cmF0aW9uKSk7Ci0KLSAgLyogcHVzaCBzcGVleCBkYXRhIDIgKi8KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX2J1ZmZlciAoYnVmZmVyLCBzaXplb2YgKGJ1ZmZlciksCi0gICAgICAgICAgYmFzZV90aW1lICsgZHVyYXRpb24sIGR1cmF0aW9uKSk7Ci0KLSAgLyogcHVsbCBvdXQgc3RyZWFtLXN0YXJ0IGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIC8qIHB1bGwgb3V0IGNhcHMgZXZlbnQgKi8KLSAgZ3N0X2V2ZW50X3VucmVmIChnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKSk7Ci0KLSAgLyogcHVsbCBvdXQgc2VnbWVudCBldmVudCBhbmQgdmVyaWZ5IHdlIGFyZSB1c2luZyBHU1RfRk9STUFUX1RJTUUgKi8KLSAgewotICAgIEdzdEV2ZW50ICpldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICAgIGNvbnN0IEdzdFNlZ21lbnQgKnNlZ21lbnQ7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3NlZ21lbnQgKGV2ZW50LCAmc2VnbWVudCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZPUk1BVF9USU1FLCBzZWdtZW50LT5mb3JtYXQpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9Ci0KLSAgLyogcHVsbCBGTFYgaGVhZGVyIGJ1ZmZlciAqLwotICBidWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAvKiBwdWxsIE1ldGFkYXRhIGJ1ZmZlciAqLwotICBidWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAvKiBwdWxsIGhlYWRlcjAgKi8KLSAgYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGJhc2VfdGltZSwgR1NUX0JVRkZFUl9QVFMgKGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChiYXNlX3RpbWUsIEdTVF9CVUZGRVJfRFRTIChidWYpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgLyogMHgwOCBtZWFucyBpdCBpcyBhdWRpbyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgweDA4LCBtYXAuZGF0YVswXSk7Ci0gIC8qIHRpbWVzdGFtcCBzaG91bGQgYmUgc3RhcnRpbmcgZnJvbSAwICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDB4MDAsIG1hcC5kYXRhWzZdKTsKLSAgLyogMHhiMiBtZWFucyBTcGVleCwgMTYwMDBIeiwgTW9ubyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgweGIyLCBtYXAuZGF0YVsxMV0pOwotICAvKiB2ZXJpZnkgY29udGVudCBpcyBpbnRhY3QgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgbWVtY21wICgmbWFwLmRhdGFbMTJdLCBoZWFkZXIwLCBzaXplb2YgKGhlYWRlcjApKSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogcHVsbCBoZWFkZXIxICovCi0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChiYXNlX3RpbWUsIEdTVF9CVUZGRVJfUFRTIChidWYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoYmFzZV90aW1lLCBHU1RfQlVGRkVSX0RUUyAoYnVmKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKDAsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAvKiAweDA4IG1lYW5zIGl0IGlzIGF1ZGlvICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDB4MDgsIG1hcC5kYXRhWzBdKTsKLSAgLyogdGltZXN0YW1wIHNob3VsZCBiZSBzdGFydGluZyBmcm9tIDAgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMHgwMCwgbWFwLmRhdGFbNl0pOwotICAvKiAweGIyIG1lYW5zIFNwZWV4LCAxNjAwMEh6LCBNb25vICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDB4YjIsIG1hcC5kYXRhWzExXSk7Ci0gIC8qIHZlcmlmeSBjb250ZW50IGlzIGludGFjdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBtZW1jbXAgKCZtYXAuZGF0YVsxMl0sIGhlYWRlcjEsIHNpemVvZiAoaGVhZGVyMSkpKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAvKiBwdWxsIGRhdGEgKi8KLSAgYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGJhc2VfdGltZSwgR1NUX0JVRkZFUl9QVFMgKGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChiYXNlX3RpbWUsIEdTVF9CVUZGRVJfRFRTIChidWYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoZHVyYXRpb24sIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX09GRlNFVF9OT05FLCBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUsCi0gICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikpOwotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAvKiAweDA4IG1lYW5zIGl0IGlzIGF1ZGlvICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDB4MDgsIG1hcC5kYXRhWzBdKTsKLSAgLyogdGltZXN0YW1wIHNob3VsZCBiZSBzdGFydGluZyBmcm9tIDAgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMHgwMCwgbWFwLmRhdGFbNl0pOwotICAvKiAweGIyIG1lYW5zIFNwZWV4LCAxNjAwMEh6LCBNb25vICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDB4YjIsIG1hcC5kYXRhWzExXSk7Ci0gIC8qIHZlcmlmeSBjb250ZW50IGlzIGludGFjdCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBtZW1jbXAgKCZtYXAuZGF0YVsxMl0sIGJ1ZmZlciwgc2l6ZW9mIChidWZmZXIpKSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogcHVsbCBkYXRhICovCi0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChiYXNlX3RpbWUgKyBkdXJhdGlvbiwgR1NUX0JVRkZFUl9QVFMgKGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChiYXNlX3RpbWUgKyBkdXJhdGlvbiwgR1NUX0JVRkZFUl9EVFMgKGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChkdXJhdGlvbiwgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfT0ZGU0VUX05PTkUsIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9PRkZTRVRfTk9ORSwKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIC8qIDB4MDggbWVhbnMgaXQgaXMgYXVkaW8gKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMHgwOCwgbWFwLmRhdGFbMF0pOwotICAvKiB0aW1lc3RhbXAgc2hvdWxkIHJlZmxlY3QgdGhlIGR1cmF0aW9uX21zICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGR1cmF0aW9uX21zLCBtYXAuZGF0YVs2XSk7Ci0gIC8qIDB4YjIgbWVhbnMgU3BlZXgsIDE2MDAwSHosIE1vbm8gKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMHhiMiwgbWFwLmRhdGFbMTFdKTsKLSAgLyogdmVyaWZ5IGNvbnRlbnQgaXMgaW50YWN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIG1lbWNtcCAoJm1hcC5kYXRhWzEyXSwgYnVmZmVyLCBzaXplb2YgKGJ1ZmZlcikpKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWNoZWNrX2J1Zl90eXBlX3RpbWVzdGFtcCAoR3N0QnVmZmVyICogYnVmLCBnaW50IHBhY2tldF90eXBlLCBnaW50IHRpbWVzdGFtcCkKLXsKLSAgR3N0TWFwSW5mbyBtYXAgPSBHU1RfTUFQX0lORk9fSU5JVDsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocGFja2V0X3R5cGUsIG1hcC5kYXRhWzBdKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodGltZXN0YW1wLCBtYXAuZGF0YVs2XSk7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2luY3JlYXNpbmdfdGltZXN0YW1wX3doZW5fcHRzX25vbmUpCi17Ci0gIGNvbnN0IGdpbnQgQVVESU8gPSAweDA4OwotICBjb25zdCBnaW50IFZJREVPID0gMHgwOTsKLSAgZ2ludCB0aW1lc3RhbXAgPSAzOwotICBHc3RDbG9ja1RpbWUgYmFzZV90aW1lID0gNDIgKiBHU1RfU0VDT05EOwotICBHc3RQYWQgKmF1ZGlvX3NpbmssICp2aWRlb19zaW5rLCAqYXVkaW9fc3JjLCAqdmlkZW9fc3JjOwotICBHc3RIYXJuZXNzICpoLCAqYXVkaW8sICp2aWRlbywgKmF1ZGlvX3EsICp2aWRlb19xOwotICBHc3RDYXBzICphdWRpb19jYXBzLCAqdmlkZW9fY2FwczsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzICgiZmx2bXV4IiwgTlVMTCwgInNyYyIpOwotICBhdWRpbyA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGgtPmVsZW1lbnQsICJhdWRpbyIsIE5VTEwpOwotICB2aWRlbyA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGgtPmVsZW1lbnQsICJ2aWRlbyIsIE5VTEwpOwotICBhdWRpb19xID0gZ3N0X2hhcm5lc3NfbmV3ICgicXVldWUiKTsKLSAgdmlkZW9fcSA9IGdzdF9oYXJuZXNzX25ldyAoInF1ZXVlIik7Ci0KLSAgYXVkaW9fc2luayA9IEdTVF9QQURfUEVFUiAoYXVkaW8tPnNyY3BhZCk7Ci0gIHZpZGVvX3NpbmsgPSBHU1RfUEFEX1BFRVIgKHZpZGVvLT5zcmNwYWQpOwotICBhdWRpb19zcmMgPSBHU1RfUEFEX1BFRVIgKGF1ZGlvX3EtPnNpbmtwYWQpOwotICB2aWRlb19zcmMgPSBHU1RfUEFEX1BFRVIgKHZpZGVvX3EtPnNpbmtwYWQpOwotCi0gIGdzdF9wYWRfdW5saW5rIChhdWRpby0+c3JjcGFkLCBhdWRpb19zaW5rKTsKLSAgZ3N0X3BhZF91bmxpbmsgKHZpZGVvLT5zcmNwYWQsIHZpZGVvX3NpbmspOwotICBnc3RfcGFkX3VubGluayAoYXVkaW9fc3JjLCBhdWRpb19xLT5zaW5rcGFkKTsKLSAgZ3N0X3BhZF91bmxpbmsgKHZpZGVvX3NyYywgdmlkZW9fcS0+c2lua3BhZCk7Ci0gIGdzdF9wYWRfbGluayAoYXVkaW9fc3JjLCBhdWRpb19zaW5rKTsKLSAgZ3N0X3BhZF9saW5rICh2aWRlb19zcmMsIHZpZGVvX3NpbmspOwotCi0gIGF1ZGlvX2NhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1zcGVleCIsCi0gICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIDE2MDAwLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChhdWRpb19xLCBhdWRpb19jYXBzKTsKLSAgdmlkZW9fY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LWgyNjQiLAotICAgICAgInN0cmVhbS1mb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiYXZjIiwgTlVMTCk7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAodmlkZW9fcSwgdmlkZW9fY2Fwcyk7Ci0KLSAgLyogUHVzaCBhdWRpbyArIHZpZGVvICsgYXVkaW8gd2l0aCBpbmNyZWFzaW5nIERUUywgYnV0IFBUUyBmb3IgdmlkZW8gaXMKLSAgICogR1NUX0NMT0NLX1RJTUVfTk9ORQotICAgKi8KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gdGltZXN0YW1wICogR1NUX01TRUNPTkQgKyBiYXNlX3RpbWU7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gdGltZXN0YW1wICogR1NUX01TRUNPTkQgKyBiYXNlX3RpbWU7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGF1ZGlvX3EsIGJ1Zik7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gKHRpbWVzdGFtcCArIDEpICogR1NUX01TRUNPTkQgKyBiYXNlX3RpbWU7Ci0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAodmlkZW9fcSwgYnVmKTsKLQotICBidWYgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9EVFMgKGJ1ZikgPSAodGltZXN0YW1wICsgMikgKiBHU1RfTVNFQ09ORCArIGJhc2VfdGltZTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSAodGltZXN0YW1wICsgMikgKiBHU1RfTVNFQ09ORCArIGJhc2VfdGltZTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoYXVkaW9fcSwgYnVmKTsKLQotICAvKiBQdWxsIHR3byBtZXRhZGF0YSBwYWNrZXRzIG91dCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBDaGVjayB0aGF0IHdlIHJlY2VpdmUgdGhlIHBhY2tldHMgaW4gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIG9yZGVyIGFuZAotICAgKiB0aGF0IHRoZWlyIHRpbWVzdGFtcHMgYXJlIGNvcnJlY3QgKHNob3VsZCBzdGFydCBhdCAwKQotICAgKi8KLSAgYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGNoZWNrX2J1Zl90eXBlX3RpbWVzdGFtcCAoYnVmLCBBVURJTywgMCk7Ci0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBjaGVja19idWZfdHlwZV90aW1lc3RhbXAgKGJ1ZiwgVklERU8sIDEpOwotCi0gIC8qIHRlYXJkb3duICovCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGF1ZGlvKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKHZpZGVvKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGF1ZGlvX3EpOwotICBnc3RfaGFybmVzc190ZWFyZG93biAodmlkZW9fcSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWZsdm11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmbHZtdXgiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotICBnaW50IGxvb3AgPSA0OTk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSNpZmRlZiBIQVZFX1ZBTEdSSU5ECi0gIGlmIChSVU5OSU5HX09OX1ZBTEdSSU5EKSB7Ci0gICAgbG9vcCA9IDE0MDsKLSAgfQotI2VuZGlmCi0KLSAgdGNhc2VfYWRkX2xvb3BfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5kZXhfd3JpdGluZywgMSwgbG9vcCk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NwZWV4X3N0cmVhbWFibGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW5jcmVhc2luZ190aW1lc3RhbXBfd2hlbl9wdHNfbm9uZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChmbHZtdXgpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9nZGtwaXhidWZvdmVybGF5LmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9nZGtwaXhidWZvdmVybGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNDU1NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvZ2RrcGl4YnVmb3ZlcmxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgdGhlIGdka3BpeGJ1Zm92ZXJsYXkgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSAyMDE1IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBjb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfb3ZlcmxheSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpvdmVybGF5LCAqc2luazsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3RCdXMgKmJ1czsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNyYyAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOwotCi0gIG92ZXJsYXkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJnZGtwaXhidWZvdmVybGF5IiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChvdmVybGF5ICE9IE5VTEwpOwotCi0jZGVmaW5lIElNQUdFX1BBVEggR1NUX1RFU1RfRklMRVNfUEFUSCBHX0RJUl9TRVBBUkFUT1JfUyAiaW1hZ2UuanBnIgotICBnX29iamVjdF9zZXQgKG92ZXJsYXksICJsb2NhdGlvbiIsIElNQUdFX1BBVEgsIE5VTEwpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMKTsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgb3ZlcmxheSwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBvdmVybGF5LCBzaW5rLCBOVUxMKTsKLQotICAvKiBzdGFydCBwcmVyb2xsaW5nICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLQotICAvKiB3YWl0IGZvciBFT1MgKi8KLSAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWdka3BpeGJ1Zm92ZXJsYXlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiZ2RrcGl4YnVmb3ZlcmxheSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfb3ZlcmxheSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChnZGtwaXhidWZvdmVybGF5KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2dka3BpeGJ1ZnNpbmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4M2NjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9nZGtwaXhidWZzaW5rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3IgdGhlIGdka3BpeGJ1ZnNpbmsgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSAyMDA4IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotCi0jaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4YnVmLmg+Ci0KLSNkZWZpbmUgQ0FQU19SR0IgInZpZGVvL3gtcmF3LCBmb3JtYXQ9UkdCIgotI2RlZmluZSBDQVBTX1JHQkEgInZpZGVvL3gtcmF3LCBmb3JtYXQ9UkdCQSIKLSNkZWZpbmUgV3hIICIsd2lkdGg9KGludCkzMTksaGVpZ2h0PShpbnQpMjQxIgotCi0jZGVmaW5lIE5fQlVGRkVSUyA1Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKnBpcGU7Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0RWxlbWVudCAqZmlsdGVyOwotICBHc3RFbGVtZW50ICpzaW5rOwotfSBHc3RHZGtQaXhidWZTaW5rVGVzdENvbnRleHQ7Ci0KLXN0YXRpYyB2b2lkCi1nZGtwaXhidWZzaW5rX2luaXRfdGVzdF9jb250ZXh0IChHc3RHZGtQaXhidWZTaW5rVGVzdENvbnRleHQgKiBjdHgsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWx0ZXJfY2Fwc19zdHJpbmcsIGdpbnQgbnVtX2J1ZmZlcnMpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZmFpbF91bmxlc3MgKGN0eCAhPSBOVUxMKTsKLQotICBjdHgtPnBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKGN0eC0+cGlwZSAhPSBOVUxMKTsKLSAgY3R4LT5zcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPnNyYyAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSB2aWRlb3Rlc3RzcmMgZWxlbWVudCIpOwotICBjdHgtPmZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCAiZmlsdGVyIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPmZpbHRlciAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBjYXBzZmlsdGVyIGVsZW1lbnQiKTsKLSAgY3R4LT5zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZ2RrcGl4YnVmc2luayIsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPnNpbmsgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgZ2RrcGl4YnVmc2luayBlbGVtZW50Iik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChmaWx0ZXJfY2Fwc19zdHJpbmcpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChjdHgtPmZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGlmIChudW1fYnVmZmVycyA+IDApCi0gICAgZ19vYmplY3Rfc2V0IChjdHgtPnNyYywgIm51bS1idWZmZXJzIiwgbnVtX2J1ZmZlcnMsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYmluX2FkZCAoR1NUX0JJTiAoY3R4LT5waXBlKSwgY3R4LT5zcmMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9iaW5fYWRkIChHU1RfQklOIChjdHgtPnBpcGUpLCBjdHgtPmZpbHRlcikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGN0eC0+cGlwZSksIGN0eC0+c2luaykpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoY3R4LT5zcmMsIGN0eC0+ZmlsdGVyKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChjdHgtPmZpbHRlciwgY3R4LT5zaW5rKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nZGtwaXhidWZzaW5rX3Vuc2V0X3Rlc3RfY29udGV4dCAoR3N0R2RrUGl4YnVmU2lua1Rlc3RDb250ZXh0ICogY3R4KQotewotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN0eC0+cGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjdHgtPnBpcGUpOwotICBtZW1zZXQgKGN0eCwgMCwgc2l6ZW9mIChHc3RHZGtQaXhidWZTaW5rVGVzdENvbnRleHQpKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jaGVja19sYXN0X3BpeGJ1ZiAoR3N0R2RrUGl4YnVmU2lua1Rlc3RDb250ZXh0ICogY3R4LCBncG9pbnRlciBwaXhidWYpCi17Ci0gIGdwb2ludGVyIGxhc3RfcGIgPSBOVUxMOwotICBnYm9vbGVhbiByZXQ7Ci0KLSAgZ19vYmplY3RfZ2V0IChjdHgtPnNpbmssICJsYXN0LXBpeGJ1ZiIsICZsYXN0X3BiLCBOVUxMKTsKLQotICByZXQgPSAobGFzdF9wYiA9PSBwaXhidWYpOwotCi0gIGlmIChsYXN0X3BiKQotICAgIGdfb2JqZWN0X3VucmVmIChsYXN0X3BiKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBkb2Vzbid0IHJldHVybiBhIHJlZiB0byB0aGUgcGl4YnVmICovCi1zdGF0aWMgR2RrUGl4YnVmICoKLWNoZWNrX21lc3NhZ2VfcGl4YnVmIChHc3RNZXNzYWdlICogbXNnLCBjb25zdCBnY2hhciAqIG5hbWUsIGdpbnQgY2hhbm5lbHMsCi0gICAgZ2Jvb2xlYW4gaGFzX2FscGhhKQotewotICBHZGtQaXhidWYgKnBpeGJ1ZjsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtc2cpICE9IE5VTEwpOwotCi0gIHMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtc2cpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKSwgbmFtZSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkIChzLCAicGl4YnVmIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGRfdHlwZWQgKHMsICJwaXhlbC1hc3BlY3QtcmF0aW8iLAotICAgICAgICAgIEdTVF9UWVBFX0ZSQUNUSU9OKSk7Ci0gIHBpeGJ1ZiA9Ci0gICAgICBHREtfUElYQlVGIChnX3ZhbHVlX2dldF9vYmplY3QgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicGl4YnVmIikpKTsKLSAgZmFpbF91bmxlc3MgKEdES19JU19QSVhCVUYgKHBpeGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnZGtfcGl4YnVmX2dldF9uX2NoYW5uZWxzIChwaXhidWYpLCBjaGFubmVscyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdka19waXhidWZfZ2V0X2hhc19hbHBoYSAocGl4YnVmKSwgaGFzX2FscGhhKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ2RrX3BpeGJ1Zl9nZXRfd2lkdGggKHBpeGJ1ZiksIDMxOSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdka19waXhidWZfZ2V0X2hlaWdodCAocGl4YnVmKSwgMjQxKTsKLQotICByZXR1cm4gcGl4YnVmOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZ2IpCi17Ci0gIEdzdEdka1BpeGJ1ZlNpbmtUZXN0Q29udGV4dCBjdHg7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR2RrUGl4YnVmICpwaXhidWY7Ci0gIEdzdEJ1cyAqYnVzOwotICBnaW50IGk7Ci0KLSAgZ2RrcGl4YnVmc2lua19pbml0X3Rlc3RfY29udGV4dCAoJmN0eCwgQ0FQU19SR0IgV3hILCBOX0JVRkZFUlMpOwotCi0gIGZhaWxfdW5sZXNzIChjaGVja19sYXN0X3BpeGJ1ZiAoJmN0eCwgTlVMTCkpOwotCi0gIC8qIHN0YXJ0IHByZXJvbGxpbmcgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjdHgucGlwZSwgR1NUX1NUQVRFX1BBVVNFRCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICAvKiB3YWl0IHVudGlsIHByZXJvbGxlZCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGN0eC5waXBlLCBOVUxMLCBOVUxMLCAtMSksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGN0eC5waXBlKTsKLQotICAvKiBmaW5kIGVsZW1lbnQgbWVzc2FnZSBmcm9tIG91ciBnZGtwaXhidWZzaW5rLCBpZ25vcmUgZWxlbWVudCBtZXNzYWdlcyBmcm9tCi0gICAqIG90aGVyIGVsZW1lbWVudHMgKHdoaWNoIGp1c3Qgc2VlbXMgcHJ1ZGVudCB0byBkbywgd2UgZG9uJ3QgZXhwZWN0IGFueSkgKi8KLSAgd2hpbGUgKDEpIHsKLSAgICBtc2cgPSBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgICBmYWlsX2lmIChtc2cgPT0gTlVMTCwgIkV4cGVjdGVkIGVsZW1lbnQgbWVzc2FnZSBmcm9tIGdka3BpeGJ1ZnNpbmsiKTsKLQotICAgIGlmIChtc2ctPnNyYyA9PSBHU1RfT0JKRUNUIChjdHguc2luaykpCi0gICAgICBicmVhazsKLSAgfQotCi0gIHBpeGJ1ZiA9IGNoZWNrX21lc3NhZ2VfcGl4YnVmIChtc2csICJwcmVyb2xsLXBpeGJ1ZiIsIDMsIEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKGNoZWNrX2xhc3RfcGl4YnVmICgmY3R4LCBwaXhidWYpKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIHBpeGJ1ZiA9IE5VTEw7Ci0KLSAgLyogYW5kIGdvISAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN0eC5waXBlLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIC8qIFRoaXMgaXMgcmFjeSwgc3VwcG9zZWQgdG8gbWFrZSBzdXJlIGxvY2tpbmcgYW5kIHJlZmNvdW50aW5nIHdvcmtzIGF0Ci0gICAqIGxlYXN0IHRvIHNvbWUgZXh0ZW50ICovCi0gIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgZ3BvaW50ZXIgb2JqID0gTlVMTDsKLQotICAgIGdfb2JqZWN0X2dldCAoY3R4LnNpbmssICJsYXN0LXBpeGJ1ZiIsICZvYmosIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChvYmogPT0gTlVMTCB8fCBHREtfSVNfUElYQlVGIChvYmopKTsKLSAgICBpZiAob2JqKQotICAgICAgZ19vYmplY3RfdW5yZWYgKG9iaik7Ci0gIH0KLQotICAvKiB0aGVyZSBzaG91bGQgYmUgYXMgbWFueSBwaXhidWYgbWVzc2FnZXMgYXMgYnVmZmVycyAqLwotICBmb3IgKGkgPSAwOyBpIDwgTl9CVUZGRVJTOyArK2kpIHsKLSAgICAvKiBmaW5kIGVsZW1lbnQgbWVzc2FnZSBmcm9tIG91ciBnZGtwaXhidWZzaW5rLCBpZ25vcmUgZWxlbWVudCBtZXNzYWdlcyBmcm9tCi0gICAgICogb3RoZXIgZWxlbWVtZW50cyAod2hpY2gganVzdCBzZWVtcyBwcnVkZW50IHRvIGRvLCB3ZSBkb24ndCBleHBlY3QgYW55KSAqLwotICAgIHdoaWxlICgxKSB7Ci0gICAgICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoYnVzLCAtMSwgR1NUX01FU1NBR0VfRUxFTUVOVCk7Ci0gICAgICBmYWlsX2lmIChtc2cgPT0gTlVMTCwgIkV4cGVjdGVkIGVsZW1lbnQgbWVzc2FnZSBmcm9tIGdka3BpeGJ1ZnNpbmsiKTsKLSAgICAgIGlmIChtc2ctPnNyYyA9PSBHU1RfT0JKRUNUIChjdHguc2luaykpCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHBpeGJ1ZiA9IGNoZWNrX21lc3NhZ2VfcGl4YnVmIChtc2csICJwaXhidWYiLCAzLCBGQUxTRSk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIH0KLQotICAvKiBub3RlOiB3ZSBkb24ndCBob2xkIGEgcmVmIHRvIHBpeGJ1ZiBhbnkgbG9uZ2VyIGhlcmUsIGJ1dCBpdCBzaG91bGQgYmUgb2sgKi8KLSAgZmFpbF91bmxlc3MgKGNoZWNrX2xhc3RfcGl4YnVmICgmY3R4LCBwaXhidWYpKTsKLSAgcGl4YnVmID0gTlVMTDsKLQotICBnZGtwaXhidWZzaW5rX3Vuc2V0X3Rlc3RfY29udGV4dCAoJmN0eCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmdiYSkKLXsKLSAgR3N0R2RrUGl4YnVmU2lua1Rlc3RDb250ZXh0IGN0eDsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHZGtQaXhidWYgKnBpeGJ1ZjsKLSAgR3N0QnVzICpidXM7Ci0gIGdpbnQgaTsKLQotICBnZGtwaXhidWZzaW5rX2luaXRfdGVzdF9jb250ZXh0ICgmY3R4LCBDQVBTX1JHQkEgV3hILCBOX0JVRkZFUlMpOwotCi0gIGZhaWxfdW5sZXNzIChjaGVja19sYXN0X3BpeGJ1ZiAoJmN0eCwgTlVMTCkpOwotCi0gIC8qIHN0YXJ0IHByZXJvbGxpbmcgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjdHgucGlwZSwgR1NUX1NUQVRFX1BBVVNFRCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICAvKiB3YWl0IHVudGlsIHByZXJvbGxlZCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKGN0eC5waXBlLCBOVUxMLCBOVUxMLCAtMSksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGN0eC5waXBlKTsKLQotICAvKiBmaW5kIGVsZW1lbnQgbWVzc2FnZSBmcm9tIG91ciBnZGtwaXhidWZzaW5rLCBpZ25vcmUgZWxlbWVudCBtZXNzYWdlcyBmcm9tCi0gICAqIG90aGVyIGVsZW1lbWVudHMgKHdoaWNoIGp1c3Qgc2VlbXMgcHJ1ZGVudCB0byBkbywgd2UgZG9uJ3QgZXhwZWN0IGFueSkgKi8KLSAgd2hpbGUgKDEpIHsKLSAgICBtc2cgPSBnc3RfYnVzX3BvcF9maWx0ZXJlZCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgICBmYWlsX2lmIChtc2cgPT0gTlVMTCwgIkV4cGVjdGVkIGVsZW1lbnQgbWVzc2FnZSBmcm9tIGdka3BpeGJ1ZnNpbmsiKTsKLQotICAgIGlmIChtc2ctPnNyYyA9PSBHU1RfT0JKRUNUIChjdHguc2luaykpCi0gICAgICBicmVhazsKLSAgfQotCi0gIHBpeGJ1ZiA9IGNoZWNrX21lc3NhZ2VfcGl4YnVmIChtc2csICJwcmVyb2xsLXBpeGJ1ZiIsIDQsIFRSVUUpOwotICBmYWlsX3VubGVzcyAoY2hlY2tfbGFzdF9waXhidWYgKCZjdHgsIHBpeGJ1ZikpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgcGl4YnVmID0gTlVMTDsKLQotICAvKiBhbmQgZ28hICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY3R4LnBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogVGhpcyBpcyByYWN5LCBzdXBwb3NlZCB0byBtYWtlIHN1cmUgbG9ja2luZyBhbmQgcmVmY291bnRpbmcgd29ya3MgYXQKLSAgICogbGVhc3QgdG8gc29tZSBleHRlbnQgKi8KLSAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICBncG9pbnRlciBvYmogPSBOVUxMOwotCi0gICAgZ19vYmplY3RfZ2V0IChjdHguc2luaywgImxhc3QtcGl4YnVmIiwgJm9iaiwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKG9iaiA9PSBOVUxMIHx8IEdES19JU19QSVhCVUYgKG9iaikpOwotICAgIGlmIChvYmopCi0gICAgICBnX29iamVjdF91bnJlZiAob2JqKTsKLSAgfQotCi0gIC8qIHRoZXJlIHNob3VsZCBiZSBhcyBtYW55IHBpeGJ1ZiBtZXNzYWdlcyBhcyBidWZmZXJzICovCi0gIGZvciAoaSA9IDA7IGkgPCBOX0JVRkZFUlM7ICsraSkgewotICAgIC8qIGZpbmQgZWxlbWVudCBtZXNzYWdlIGZyb20gb3VyIGdka3BpeGJ1ZnNpbmssIGlnbm9yZSBlbGVtZW50IG1lc3NhZ2VzIGZyb20KLSAgICAgKiBvdGhlciBlbGVtZW1lbnRzICh3aGljaCBqdXN0IHNlZW1zIHBydWRlbnQgdG8gZG8sIHdlIGRvbid0IGV4cGVjdCBhbnkpICovCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgIG1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChidXMsIC0xLCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgICAgIGZhaWxfaWYgKG1zZyA9PSBOVUxMLCAiRXhwZWN0ZWQgZWxlbWVudCBtZXNzYWdlIGZyb20gZ2RrcGl4YnVmc2luayIpOwotICAgICAgaWYgKG1zZy0+c3JjID09IEdTVF9PQkpFQ1QgKGN0eC5zaW5rKSkKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcGl4YnVmID0gY2hlY2tfbWVzc2FnZV9waXhidWYgKG1zZywgInBpeGJ1ZiIsIDQsIFRSVUUpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICB9Ci0KLSAgLyogbm90ZTogd2UgZG9uJ3QgaG9sZCBhIHJlZiB0byBwaXhidWYgYW55IGxvbmdlciBoZXJlLCBidXQgaXQgc2hvdWxkIGJlIG9rICovCi0gIGZhaWxfdW5sZXNzIChjaGVja19sYXN0X3BpeGJ1ZiAoJmN0eCwgcGl4YnVmKSk7Ci0gIHBpeGJ1ZiA9IE5VTEw7Ci0KLSAgZ2RrcGl4YnVmc2lua191bnNldF90ZXN0X2NvbnRleHQgKCZjdHgpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1nZGtwaXhidWZzaW5rX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImdka3BpeGJ1ZnNpbmsiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmdiKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JnYmEpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZ2RrcGl4YnVmc2luayk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvaWN5ZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVlNDNiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9pY3lkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qCi0gKiBpY3lkZW11eC5jIC0gVGVzdCBpY3lkZW11eCBlbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBTbWl0aCA8bXNtaXRoQGZsdWVuZG8uY29tPgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLS8qIENodW5rIG9mIGRhdGE6IDggYnl0ZXMsIGZvbGxvd2VkIGJ5IGEgbWV0YWRhdGEtbGVuZ3RoIGJ5dGUgb2YgMiwgZm9sbG93ZWQgYnkKLSAqIHNvbWUgbWV0YWRhdGEgKDMyIGJ5dGVzKSwgdGhlbiBzb21lIG1vcmUgZGF0YS4KLSAqLwotI2RlZmluZSBURVNUX01FVEFEQVRBIFwKLSAgICAiVGVzdCBtZXRhZGF0YSIKLSNkZWZpbmUgSUNZX01FVEFEQVRBIFwKLSAgICAiU3RyZWFtVGl0bGU9JyIgVEVTVF9NRVRBREFUQSAiJztcMFwwXDBcMCIKLQotI2RlZmluZSBFTVBUWV9JQ1lfU1RSRUFNX1RJVExFX01FVEFEQVRBIFwKLSAgICAiU3RyZWFtVGl0bGU9Jyc7XDAiCi0KLSNkZWZpbmUgSUNZX0RBVEEgXAotICAgICJhYWFhYWFhYSIgXAotICAgICJceDAyIiBcCi0gICAgSUNZX01FVEFEQVRBIFwKLSAgICAiYmJiYmJiYmIiCi0KLSNkZWZpbmUgSUNZX0RBVEFfRU1QVFlfTUVUQURBVEEgXAotICAgIElDWV9EQVRBIFwKLSAgICAiXHgwMCIgXAotICAgICJkZGRkZGRkZCIgXAotICAgICJceDAxIiBcCi0gICAgRU1QVFlfSUNZX1NUUkVBTV9USVRMRV9NRVRBREFUQSBcCi0gICAgImNjY2NjY2NjIgotCi0jZGVmaW5lIElDWUNBUFMgImFwcGxpY2F0aW9uL3gtaWN5LCBtZXRhZGF0YS1pbnRlcnZhbCA9IChpbnQpOCIKLQotI2RlZmluZSBTUkNfQ0FQUyAiYXBwbGljYXRpb24veC1pY3ksIG1ldGFkYXRhLWludGVydmFsID0gKGludClbMCwgTUFYXSIKLSNkZWZpbmUgU0lOS19DQVBTICAiQU5ZIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTUkNfQ0FQUykKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTSU5LX0NBUFMpCi0gICAgKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKmljeWRlbXV4Owotc3RhdGljIEdzdEJ1cyAqYnVzOwotR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi1zdGF0aWMgR3N0U3RhdGljQ2FwcyB0eXBlZmluZF9jYXBzID0KLUdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gZmFrZV90eXBlZmluZF9jYXBzOyAgICAgLyogRkFMU0UgKi8KLQotc3RhdGljIHZvaWQKLXR5cGVmaW5kX3N1Y2NlZWQgKEdzdFR5cGVGaW5kICogdGYsIGdwb2ludGVyIHByaXZhdGUpCi17Ci0gIGlmIChmYWtlX3R5cGVmaW5kX2NhcHMpIHsKLSAgICBnc3RfdHlwZV9maW5kX3N1Z2dlc3QgKHRmLCBHU1RfVFlQRV9GSU5EX01BWElNVU0sCi0gICAgICAgIGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZ0eXBlZmluZF9jYXBzKSk7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi10ZXN0X2V2ZW50X2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBHU1RfTE9HX09CSkVDVCAocGFkLCAiJXMgZXZlbnQ6ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX0VWRU5UX1RZUEVfTkFNRSAoZXZlbnQpLCBldmVudCk7Ci0KLSAgLyogYSBzaW5rIHdvdWxkIHBvc3QgdGFnIGV2ZW50cyBhcyBtZXNzYWdlcywgc28gZG8gdGhlIHNhbWUgaGVyZSwKLSAgICogZXNwLiBzaW5jZSB3ZSdyZSBwb2xsaW5nIG9uIHRoZSBidXMgd2FpdGluZyBmb3IgVEFHIG1lc3NhZ2VzLi4gKi8KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1RBRykgewotICAgIEdzdFRhZ0xpc3QgKnRhZ2xpc3Q7Ci0KLSAgICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ2xpc3QpOwotCi0gICAgZ3N0X2J1c19wb3N0IChidXMsIGdzdF9tZXNzYWdlX25ld190YWcgKEdTVF9PQkpFQ1QgKHBhZCksCi0gICAgICAgICAgICBnc3RfdGFnX2xpc3RfY29weSAodGFnbGlzdCkpKTsKLSAgfQotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLWljeWRlbXV4X2ZvdW5kX3BhZCAoR3N0RWxlbWVudCAqIHNyYywgR3N0UGFkICogcGFkLCBncG9pbnRlciBkYXRhKQotewotICBHU1RfREVCVUcgKCJnb3QgbmV3IHBhZCAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFkKTsKLQotICAvKiBUdXJucyBvdXQgdGhhdCB0aGlzIGFzc2VydHMgYSByZWZjb3VudCB3aGljaCBpcyB3cm9uZyBmb3IgdGhpcwotICAgKiBjYXNlIChhZGRpbmcgdGhlIHBhZCBmcm9tIGEgcGFkLWFkZGVkIGNhbGxiYWNrKSwgc28ganVzdCBkbyB0aGUgc2FtZQotICAgKiB0aGluZyBpbmxpbmUuLi4gKi8KLSAgLyogc2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoaWN5ZGVtdXgsICZzaW5rdGVtcGxhdGUsIE5VTEwpOyAqLwotICBzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7Ci0gIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCwgIkNvdWxkbid0IGNyZWF0ZSBzaW5rcGFkIik7Ci0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChpY3lkZW11eCwgInNyYyIpOwotICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIkZhaWxlZCB0byBnZXQgc3JjcGFkIGZyb20gaWN5ZGVtdXgiKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfZXZlbnRfZnVuY3Rpb24gKHNpbmtwYWQsIHRlc3RfZXZlbnRfZnVuYyk7Ci0KLSAgR1NUX0RFQlVHICgiY2hlY2tpbmcgc3JjcGFkICVwIHJlZmNvdW50Iiwgc3JjcGFkKTsKLSAgLyogMSBmcm9tIGVsZW1lbnQsIDEgZnJvbSBzaWduYWwsIDEgZnJvbSB1cyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAzKTsKLQotICBHU1RfREVCVUcgKCJsaW5raW5nIHNyY3BhZCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgICJGYWlsZWQgdG8gbGluayBwYWRzIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotY3JlYXRlX2ljeWRlbXV4ICh2b2lkKQotewotICBpY3lkZW11eCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgiaWN5ZGVtdXgiKTsKLSAgc3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKGljeWRlbXV4LCAmc3JjdGVtcGxhdGUpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICBnX3NpZ25hbF9jb25uZWN0IChpY3lkZW11eCwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sgKGljeWRlbXV4X2ZvdW5kX3BhZCksCi0gICAgICBOVUxMKTsKLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoaWN5ZGVtdXgsIGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoaWN5ZGVtdXgsIEdTVF9TVEFURV9QTEFZSU5HKSAhPQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLCAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgcmV0dXJuIGljeWRlbXV4OwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9pY3lkZW11eCAodm9pZCkKLXsKLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGJ1cyA9IE5VTEw7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGljeWRlbXV4KTsKLSAgaWYgKHNpbmtwYWQpCi0gICAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChpY3lkZW11eCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChpY3lkZW11eCk7Ci0KLSAgc3JjcGFkID0gTlVMTDsKLSAgc2lua3BhZCA9IE5VTEw7Ci0gIGljeWRlbXV4ID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLXB1c2hfZGF0YSAoY29uc3QgZ3VpbnQ4ICogZGF0YSwgaW50IGxlbiwgZ2ludDY0IG9mZnNldCkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChsZW4pOwotCi0gIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyLCAwLCBkYXRhLCBsZW4pOwotCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpID0gb2Zmc2V0OwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0ssICJGYWlsZWQgcHVzaGluZyBidWZmZXI6ICVkIiwgcmVzKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVtdXgpCi17Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0gIGNvbnN0IEdWYWx1ZSAqdGFnX3ZhbDsKLSAgY29uc3QgZ2NoYXIgKnRhZzsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3R5cGVfZmluZF9yZWdpc3RlciAoTlVMTCwgInN1Y2Nlc3MiLCBHU1RfUkFOS19QUklNQVJZLAotICAgICAgICAgIHR5cGVmaW5kX3N1Y2NlZWQsIE5VTEwsIGdzdF9zdGF0aWNfY2Fwc19nZXQgKCZ0eXBlZmluZF9jYXBzKSwgTlVMTCwKLSAgICAgICAgICBOVUxMKSk7Ci0KLSAgZmFrZV90eXBlZmluZF9jYXBzID0gVFJVRTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKElDWUNBUFMpOwotCi0gIGNyZWF0ZV9pY3lkZW11eCAoKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAoc3JjcGFkLCBpY3lkZW11eCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBwdXNoX2RhdGEgKChndWludDggKikgSUNZX0RBVEEsIHNpemVvZiAoSUNZX0RBVEEpLCAtMSk7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9UQUcsIC0xKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgZ3N0X21lc3NhZ2VfcGFyc2VfdGFnIChtZXNzYWdlLCAmdGFncyk7Ci0gIGZhaWxfdW5sZXNzICh0YWdzICE9IE5VTEwpOwotCi0gIHRhZ192YWwgPSBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICh0YWdzLCBHU1RfVEFHX1RJVExFLCAwKTsKLSAgZmFpbF91bmxlc3MgKHRhZ192YWwgIT0gTlVMTCk7Ci0KLSAgdGFnID0gZ192YWx1ZV9nZXRfc3RyaW5nICh0YWdfdmFsKTsKLSAgZmFpbF91bmxlc3MgKHRhZyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChURVNUX01FVEFEQVRBLCAoY2hhciAqKSB0YWcpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGNsZWFudXBfaWN5ZGVtdXggKCk7Ci0KLSAgZmFrZV90eXBlZmluZF9jYXBzID0gRkFMU0U7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVtdXhfZW1wdHlfZGF0YSkKLXsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0VGFnTGlzdCAqdGFnczsKLSAgY29uc3QgR1ZhbHVlICp0YWdfdmFsOwotICBjb25zdCBnY2hhciAqdGFnOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdHlwZV9maW5kX3JlZ2lzdGVyIChOVUxMLCAic3VjY2VzcyIsIEdTVF9SQU5LX1BSSU1BUlksCi0gICAgICAgICAgdHlwZWZpbmRfc3VjY2VlZCwgTlVMTCwgZ3N0X3N0YXRpY19jYXBzX2dldCAoJnR5cGVmaW5kX2NhcHMpLCBOVUxMLAotICAgICAgICAgIE5VTEwpKTsKLQotICBmYWtlX3R5cGVmaW5kX2NhcHMgPSBUUlVFOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoSUNZQ0FQUyk7Ci0KLSAgY3JlYXRlX2ljeWRlbXV4ICgpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChzcmNwYWQsIGljeWRlbXV4LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIHB1c2hfZGF0YSAoKGd1aW50OCAqKSBJQ1lfREFUQV9FTVBUWV9NRVRBREFUQSwKLSAgICAgIHNpemVvZiAoSUNZX0RBVEFfRU1QVFlfTUVUQURBVEEpLCAtMSk7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9UQUcsIC0xKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0KLSAgZ3N0X21lc3NhZ2VfcGFyc2VfdGFnIChtZXNzYWdlLCAmdGFncyk7Ci0gIGZhaWxfdW5sZXNzICh0YWdzICE9IE5VTEwpOwotCi0gIHRhZ192YWwgPSBnc3RfdGFnX2xpc3RfZ2V0X3ZhbHVlX2luZGV4ICh0YWdzLCBHU1RfVEFHX1RJVExFLCAwKTsKLSAgZmFpbF91bmxlc3MgKHRhZ192YWwgIT0gTlVMTCk7Ci0KLSAgdGFnID0gZ192YWx1ZV9nZXRfc3RyaW5nICh0YWdfdmFsKTsKLSAgZmFpbF91bmxlc3MgKHRhZyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChURVNUX01FVEFEQVRBLCAoY2hhciAqKSB0YWcpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1RBRywgLTEpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1lc3NhZ2UsICZ0YWdzKTsKLSAgZmFpbF91bmxlc3MgKHRhZ3MgIT0gTlVMTCk7Ci0KLSAgdGFnX3ZhbCA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKHRhZ3MsIEdTVF9UQUdfVElUTEUsIDApOwotICBmYWlsX3VubGVzcyAodGFnX3ZhbCA9PSBOVUxMKTsKLQotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgLyogRW5zdXJlIHRoYXQgbm8gZnVydGhlciB0YWcgbWVzc2FnZXMgYXJlIHJlY2VpdmVkLCBpLmUuIHRoZSBlbXB0eSBJQ1kgdGFnCi0gICAqIGlzIHNraXBwZWQgKi8KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9UQUcsIDEwMDAwMDAwMCk7Ci0gIGZhaWxfdW5sZXNzIChtZXNzYWdlID09IE5VTEwpOwotCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFncyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjbGVhbnVwX2ljeWRlbXV4ICgpOwotCi0gIGZha2VfdHlwZWZpbmRfY2FwcyA9IEZBTFNFOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIHJ1biB0aGlzIHRlc3QgZmlyc3QgYmVmb3JlIHRoZSBjdXN0b20gdHlwZWZpbmQgZnVuY3Rpb24gaXMgc2V0IHVwICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9maXJzdF9idWZfb2Zmc2V0X3doZW5fbWVyZ2VkX2Zvcl90eXBlZmluZGluZykKLXsKLSAgY29uc3QgZ3VpbnQ4IGJ1ZjFbXSA9IHsgJ00nIH07Ci0gIGNvbnN0IGd1aW50OCBidWYyW10gPSB7ICdQJywgJysnLCAweGZmLCAweGZiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLSAgfTsKLSAgR3N0Q2FwcyAqaWN5X2NhcHM7Ci0gIEdzdFBhZCAqaWN5X3NyY3BhZDsKLQotICBmYWtlX3R5cGVmaW5kX2NhcHMgPSBGQUxTRTsKLQotICBjcmVhdGVfaWN5ZGVtdXggKCk7Ci0KLSAgaWN5X2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoSUNZQ0FQUyk7Ci0KLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAoc3JjcGFkLCBpY3lkZW11eCwgaWN5X2NhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgcHVzaF9kYXRhIChidWYxLCBHX05fRUxFTUVOVFMgKGJ1ZjEpLCAwKTsKLQotICAvKiBvbmUgYnl0ZSBpc24ndCByZWFsbHkgZW5vdWdoIGZvciB0eXBlZmluZGluZywgY2FuJ3QgaGF2ZSBhIHNyY3BhZCB5ZXQgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChpY3lkZW11eCwgInNyYyIpID09IE5VTEwpOwotCi0gIHB1c2hfZGF0YSAoYnVmMiwgR19OX0VMRU1FTlRTIChidWYyKSwgLTEpOwotCi0gIC8qIHNob3VsZCBoYXZlIGJlZW4gZW5vdWdoIHRvIGNyZWF0ZSBhIGF1ZGlvL3gtbXVzZXBhY2sgc291cmNlIHBhZCAuLiAqLwotICBpY3lfc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGljeWRlbXV4LCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChpY3lfc3JjcGFkICE9IE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpY3lfc3JjcGFkKTsKLQotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPiAwKTsKLQotICAvKiBmaXJzdCBidWZmZXIgc2hvdWxkIGhhdmUgb2Zmc2V0IDAgZXZlbiBhZnRlciBpdCB3YXMgbWVyZ2VkIHdpdGggMm5kIGJ1ZiAqLwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9PRkZTRVQgKEdTVF9CVUZGRVJfQ0FTVCAoYnVmZmVycy0+ZGF0YSkpID09IDApOwotCi0gIGdzdF9jYXBzX3VucmVmIChpY3lfY2Fwcyk7Ci0KLSAgY2xlYW51cF9pY3lkZW11eCAoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ub3RfbmVnb3RpYXRlZCkKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBjcmVhdGVfaWN5ZGVtdXggKCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMCk7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gMDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgYnVmKSwgR1NUX0ZMT1dfTk9UX05FR09USUFURUQpOwotICBidWYgPSBOVUxMOwotCi0gIGNsZWFudXBfaWN5ZGVtdXggKCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWljeWRlbXV4X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImljeWRlbXV4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlbXV4KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlbXV4X2VtcHR5X2RhdGEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmlyc3RfYnVmX29mZnNldF93aGVuX21lcmdlZF9mb3JfdHlwZWZpbmRpbmcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm90X25lZ290aWF0ZWQpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoaWN5ZGVtdXgpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdiNTI0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9pZDNkZW11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciBpZDNkZW11eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXR5cGVkZWYgdm9pZCAoQ2hlY2tUYWdzRnVuYykgKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdzLCBjb25zdCBnY2hhciAqIGZpbGUpOwotCi1zdGF0aWMgR3N0QnVzU3luY1JlcGx5Ci1lcnJvcl9jYiAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmZpbGUgPSAoY29uc3QgZ2NoYXIgKikgdXNlcl9kYXRhOwotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICBnY2hhciAqZGJnID0gTlVMTDsKLQotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkYmcpOwotICAgIGdfZXJyb3IgKCJFUlJPUiBmb3IgJXM6ICVzXG4lc1xuIiwgZmlsZSwgZXJyLT5tZXNzYWdlLCBkYmcpOwotICB9Ci0KLSAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLX0KLQotc3RhdGljIEdzdFRhZ0xpc3QgKgotcmVhZF90YWdzX2Zyb21fZmlsZSAoY29uc3QgZ2NoYXIgKiBmaWxlLCBnYm9vbGVhbiBwdXNoX21vZGUpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR3N0VGFnTGlzdCAqdGFncyA9IE5VTEw7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0RWxlbWVudCAqc3JjLCAqc2VwLCAqc2luaywgKmlkM2RlbXV4LCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBnY2hhciAqcGF0aDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgcGlwZWxpbmUhIik7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIC8qIGtpZHMsIGRvbid0IHVzZSBhIHN5bmMgaGFuZGxlciBmb3IgdGhpcyBhdCBob21lLCByZWFsbHk7IHdlIGRvIGJlY2F1c2UKLSAgICogd2UganVzdCB3YW50IHRvIGFib3J0IGFuZCBub3RoaW5nIGVsc2UgKi8KLSAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyIChidXMsIGVycm9yX2NiLCAoZ3BvaW50ZXIpIGZpbGUsIE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAiZmlsZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdmaWxlc3JjJyBlbGVtZW50ISIpOwotCi0gIGlmIChwdXNoX21vZGUpIHsKLSAgICBzZXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsICJxdWV1ZSIpOwotICAgIGZhaWxfdW5sZXNzIChzZXAgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ3F1ZXVlJyBlbGVtZW50Iik7Ci0gIH0gZWxzZSB7Ci0gICAgc2VwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCAiaWRlbnRpdHkiKTsKLSAgICBmYWlsX3VubGVzcyAoc2VwICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdpZGVudGl0eScgZWxlbWVudCIpOwotICB9Ci0KLSAgaWQzZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZDNkZW11eCIsICJpZDNkZW11eCIpOwotICBmYWlsX3VubGVzcyAoaWQzZGVtdXggIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ2lkM2RlbXV4JyBlbGVtZW50ISIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotICBmYWlsX3VubGVzcyAoc2luayAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAnZmFrZXNpbmsnIGVsZW1lbnQhIik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHNlcCwgaWQzZGVtdXgsIHNpbmssIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNlcCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc2VwLCBpZDNkZW11eCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoaWQzZGVtdXgsIHNpbmspKTsKLQotICBwYXRoID0gZ19idWlsZF9maWxlbmFtZSAoR1NUX1RFU1RfRklMRVNfUEFUSCwgZmlsZSwgTlVMTCk7Ci0gIEdTVF9MT0cgKCJyZWFkaW5nIGZpbGUgJyVzJyIsIHBhdGgpOwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgcGF0aCwgTlVMTCk7Ci0KLSAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBpZiAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpIHsKLSAgICBHU1RfTE9HICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggUEFVU0VEIHN0YXRlIik7Ci0gICAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgLTEpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlX3JldCwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgfQotCi0gIEdTVF9MT0cgKCJQQVVTRUQsIGxldCdzIHJldHJpZXZlIG91ciB0YWdzIik7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX1RBRywgLTEpOwotICBmYWlsX3VubGVzcyAobXNnICE9IE5VTEwsICJFeHBlY3RlZCBUQUcgbWVzc2FnZSBvbiBidXMhICglcykiLCBmaWxlKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1zZywgJnRhZ3MpOwotICBmYWlsX3VubGVzcyAodGFncyAhPSBOVUxMLCAiVEFHIG1lc3NhZ2UgZGlkIG5vdCBjb250YWluIHRhZ2xpc3QhICglcykiLCBmaWxlKTsKLQotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgZ19mcmVlIChwYXRoKTsKLQotICBHU1RfSU5GTyAoIiVzOiB0YWdzID0gJSIgR1NUX1BUUl9GT1JNQVQsIGZpbGUsIHRhZ3MpOwotICByZXR1cm4gdGFnczsKLX0KLQotc3RhdGljIHZvaWQKLXJ1bl9jaGVja19mb3JfZmlsZSAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSwgQ2hlY2tUYWdzRnVuYyAqIGNoZWNrX2Z1bmMpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ3M7Ci0KLSAgLyogZmlyc3QsIHB1bGwtYmFzZWQgKi8KLSAgdGFncyA9IHJlYWRfdGFnc19mcm9tX2ZpbGUgKGZpbGVuYW1lLCBGQUxTRSk7Ci0gIGZhaWxfdW5sZXNzICh0YWdzICE9IE5VTEwsICJGYWlsZWQgdG8gZXh0cmFjdCB0YWdzIGZyb20gJyVzJyIsIGZpbGVuYW1lKTsKLSAgY2hlY2tfZnVuYyAodGFncywgZmlsZW5hbWUpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotCi0gIC8qIEZJWE1FOiBuZWVkIHRvIGZpeCBpZDNkZW11eCBmb3Igc2hvcnQgY29udGVudCBpbiBwdXNoIG1vZGUgKi8KLSNpZiAwCi0gIC8qIG5vdyB0cnkgcHVzaC1iYXNlZCAqLwotICB0YWdzID0gcmVhZF90YWdzX2Zyb21fZmlsZSAoZmlsZW5hbWUsIFRSVUUpOwotICBmYWlsX3VubGVzcyAodGFncyAhPSBOVUxMLCAiRmFpbGVkIHRvIGV4dHJhY3QgdGFncyBmcm9tICclcyciLCBmaWxlbmFtZSk7Ci0gIGNoZWNrX2Z1bmMgKHRhZ3MsIGZpbGVuYW1lKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotY2hlY2tfZGF0ZV8xOTc3XzA2XzIzIChjb25zdCBHc3RUYWdMaXN0ICogdGFncywgY29uc3QgZ2NoYXIgKiBmaWxlKQotewotICBHc3REYXRlVGltZSAqZGF0ZSA9IE5VTEw7Ci0KLSAgZ3N0X3RhZ19saXN0X2dldF9kYXRlX3RpbWUgKHRhZ3MsIEdTVF9UQUdfREFURV9USU1FLCAmZGF0ZSk7Ci0gIGZhaWxfdW5sZXNzIChkYXRlICE9IE5VTEwsCi0gICAgICAiVGFncyBmcm9tICVzIHNob3VsZCBjb250YWluIGEgR1NUX1RBR19EQVRFX1RJTUUgdGFnIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9kYXRlX3RpbWVfZ2V0X3llYXIgKGRhdGUpLCAxOTc3KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfbW9udGggKGRhdGUpLCA2KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2RhdGVfdGltZV9nZXRfZGF5IChkYXRlKSwgMjMpOwotICBnc3RfZGF0ZV90aW1lX3VucmVmIChkYXRlKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdGRhdF90eWVyKQotewotICBydW5fY2hlY2tfZm9yX2ZpbGUgKCJpZDMtNDA3MzQ5LTEudGFnIiwgY2hlY2tfZGF0ZV8xOTc3XzA2XzIzKTsKLSAgcnVuX2NoZWNrX2Zvcl9maWxlICgiaWQzLTQwNzM0OS0yLnRhZyIsIGNoZWNrX2RhdGVfMTk3N18wNl8yMyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWNoZWNrX3djb3AgKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdzLCBjb25zdCBnY2hhciAqIGZpbGUpCi17Ci0gIGdjaGFyICpjb3B5cmlnaHQgPSBOVUxMOwotICBnY2hhciAqdXJpID0gTlVMTDsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfTElDRU5TRV9VUkksICZ1cmkpKTsKLSAgZmFpbF91bmxlc3MgKHVyaSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodXJpLAotICAgICAgImh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC8iKTsKLSAgZ19mcmVlICh1cmkpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19DT1BZUklHSFQsICZjb3B5cmlnaHQpKTsKLSAgZmFpbF91bmxlc3MgKGNvcHlyaWdodCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoY29weXJpZ2h0LAotICAgICAgIiBTdGVhZG1hbi4gTGljZW5zZWQgdG8gdGhlIHB1YmxpYyB1bmRlciBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvIHZlcmlmeSBhdCBodHRwOi8vdGVzdC5jb20iKTsKLSAgZ19mcmVlIChjb3B5cmlnaHQpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF93Y29wKQotewotICBydW5fY2hlY2tfZm9yX2ZpbGUgKCJpZDMtNDQ3MDAwLXdjb3AudGFnIiwgY2hlY2tfd2NvcCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWNoZWNrX3Vuc3luY192MjMgKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdzLCBjb25zdCBnY2hhciAqIGZpbGUpCi17Ci0gIGdjaGFyICphbGJ1bSA9IE5VTEw7Ci0gIGdjaGFyICp0aXRsZSA9IE5VTEw7Ci0gIGdjaGFyICphcnRpc3QgPSBOVUxMOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19USVRMRSwgJnRpdGxlKSk7Ci0gIGZhaWxfdW5sZXNzICh0aXRsZSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodGl0bGUsICJBUlRJU1QiKTsgIC8qIHNpYyAqLwotICBnX2ZyZWUgKHRpdGxlKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfQUxCVU0sICZhbGJ1bSkpOwotICBmYWlsX3VubGVzcyAoYWxidW0gIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGFsYnVtLCAiQWxidW0iKTsKLSAgZ19mcmVlIChhbGJ1bSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX0FSVElTVCwgJmFydGlzdCkpOwotICBmYWlsX3VubGVzcyAoYXJ0aXN0ICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhcnRpc3QsICLol53kuroiKTsKLSAgZ19mcmVlIChhcnRpc3QpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF91bnN5bmNfdjIzKQotewotICBydW5fY2hlY2tfZm9yX2ZpbGUgKCJpZDMtNTc3NDY4LXVuc3luY2VkLXRhZy50YWciLCBjaGVja191bnN5bmNfdjIzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotY2hlY2tfdW5zeW5jX3YyNCAoY29uc3QgR3N0VGFnTGlzdCAqIHRhZ3MsIGNvbnN0IGdjaGFyICogZmlsZSkKLXsKLSAgY29uc3QgR1ZhbHVlICp2YWw7Ci0gIEdzdFNhbXBsZSAqc2FtcGxlOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ2NoYXIgKmFsYnVtID0gTlVMTDsKLSAgZ2NoYXIgKnRpdGxlID0gTlVMTDsKLSAgZ2NoYXIgKmFydGlzdCA9IE5VTEw7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19USVRMRSwgJnRpdGxlKSk7Ci0gIGZhaWxfdW5sZXNzICh0aXRsZSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAodGl0bGUsICJTdGFybGlnaHQiKTsKLSAgZ19mcmVlICh0aXRsZSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfc3RyaW5nICh0YWdzLCBHU1RfVEFHX0FMQlVNLCAmYWxidW0pKTsKLSAgZmFpbF91bmxlc3MgKGFsYnVtICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChhbGJ1bSwgIkwnYWxidW1Sb2NrVm9sLjQgQ0QxIik7Ci0gIGdfZnJlZSAoYWxidW0pOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19BUlRJU1QsICZhcnRpc3QpKTsKLSAgZmFpbF91bmxlc3MgKGFydGlzdCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoYXJ0aXN0LCAiTXVzZSIpOwotICBnX2ZyZWUgKGFydGlzdCk7Ci0KLSAgdmFsID0gZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAodGFncywgR1NUX1RBR19JTUFHRSwgMCk7Ci0gIGZhaWxfdW5sZXNzICh2YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfU0FNUExFICh2YWwpKTsKLSAgc2FtcGxlID0gZ3N0X3ZhbHVlX2dldF9zYW1wbGUgKHZhbCk7Ci0gIGZhaWxfdW5sZXNzIChzYW1wbGUgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpICE9IE5VTEwpOwotICBidWYgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHNhbXBsZSk7Ci0gIGZhaWxfdW5sZXNzIChidWYgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hcC5zaXplLCAzODAyMik7Ci0gIC8qIGNoZWNrIGZvciBqcGVnIHN0YXJ0L2VuZCBtYXJrZXJzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hcC5kYXRhWzBdLCAweGZmKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWFwLmRhdGFbMV0sIDB4ZDgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXAuZGF0YVszODAyMF0sIDB4ZmYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChtYXAuZGF0YVszODAyMV0sIDB4ZDkpOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF91bnN5bmNfdjI0KQotewotICBydW5fY2hlY2tfZm9yX2ZpbGUgKCJpZDMtNTg4MTQ4LXVuc3luY2VkLXYyNC50YWciLCBjaGVja191bnN5bmNfdjI0KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotaWQzZGVtdXhfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiaWQzZGVtdXgiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdGRhdF90eWVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3djb3ApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdW5zeW5jX3YyMyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91bnN5bmNfdjI0KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGlkM2RlbXV4KQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2lkM3YybXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDdmMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvaWQzdjJtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDUyMSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHRoZSB0YWdsaWItYmFzZWQgaWQzdjJtdXggZWxlbWVudAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgVEVTVF9BUlRJU1QgICAgICAgICAgICJBciBUXDMwM1wyNTVzdCIKLSNkZWZpbmUgVEVTVF9USVRMRSAgICAgICAgICAgICJNXDMwM1wyNzRsbGVybWlsY2ghIgotI2RlZmluZSBURVNUX0FMQlVNICAgICAgICAgICAgIkJvb20iCi0jZGVmaW5lIFRFU1RfREFURSAgICAgICAgICAgICBnX2RhdGVfbmV3X2RteSgxLDEsMjAwNikKLSNkZWZpbmUgVEVTVF9UUkFDS19OVU1CRVIgICAgIDcKLSNkZWZpbmUgVEVTVF9UUkFDS19DT1VOVCAgICAgIDE5Ci0jZGVmaW5lIFRFU1RfVk9MVU1FX05VTUJFUiAgICAyCi0jZGVmaW5lIFRFU1RfVk9MVU1FX0NPVU5UICAgICAzCi0jZGVmaW5lIFRFU1RfVFJBQ0tfR0FJTiAgICAgIDEuNDUKLSNkZWZpbmUgVEVTVF9BTEJVTV9HQUlOICAgICAgMC43OAotI2RlZmluZSBURVNUX1RSQUNLX1BFQUsgICAgICAwLjgzCi0jZGVmaW5lIFRFU1RfQUxCVU1fUEVBSyAgICAgIDAuMTgKLSNkZWZpbmUgVEVTVF9CUE0gICAgICAgICAgICAgMTEzLjAKLQotLyogZm9yIGR1bW15IG1wMyBmcmFtZSBzaXplZCBNUDNfRlJBTUVfU0laRSBieXRlcywKLSAqIHN0YXJ0OiBmZiBmYiBiMCA0NCAwMCAwMCAwOCAwMCAgMDAgNGIgMDAgMDAgMDAgMDAgMDAgMDAgKi8KLXN0YXRpYyBjb25zdCBndWludDggbXAzX2R1bW15aGRyW10gPSB7IDB4ZmYsIDB4ZmIsIDB4YjAsIDB4NDQsIDB4MDAsIDB4MDAsCi0gIDB4MDgsIDB4MDAsIDB4NGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAKLX07Ci0KLSNkZWZpbmUgTVAzX0ZSQU1FX1NJWkUgNjI2Ci0KLS8qIHRoZSBwZWFrIGFuZCBnYWluIHZhbHVlcyBhcmUgc3RvcmVkIHByZXR0eSByb3VnaGx5LCBzbyBjaGVjayB0aGF0IHRoZXkncmUKLSAqIHdpdGhpbiAyJSBvZiB0aGUgZXhwZWN0ZWQgdmFsdWUuCi0gKi8KLSNkZWZpbmUgZmFpbF91bmxlc3Nfc29ydGFfZXF1YWxzX2Zsb2F0KGEsIGIpCQkJCVwKLUdfU1RNVF9TVEFSVCB7CQkJCQkJCQlcCi0gIGRvdWJsZSBmaXJzdCA9IGE7CQkJCQkJCVwKLSAgZG91YmxlIHNlY29uZCA9IGI7CQkJCQkJCVwKLSAgZmFpbF91bmxlc3MoZmFicyAoZmlyc3QgLSBzZWNvbmQpIDwgKDAuMDIgKiBmYWJzIChmaXJzdCkpLAkJXAotICAgICAgIiciICNhICInICglZykgaXMgbm90IGVxdWFsIHRvICciICNiICInICglZykiLCBmaXJzdCwgc2Vjb25kKTsJXAotfSBHX1NUTVRfRU5EOwotCi0KLXN0YXRpYyBHc3RUYWdMaXN0ICoKLXRlc3RfdGFnbGliX2lkM211eF9jcmVhdGVfdGFncyAoZ3VpbnQzMiBtYXNrKQotewotICBHc3RUYWdMaXN0ICp0YWdzOwotCi0gIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotCi0gIGlmIChtYXNrICYgKDEgPDwgMCkpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgIEdTVF9UQUdfQVJUSVNULCBURVNUX0FSVElTVCwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxKSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19USVRMRSwgVEVTVF9USVRMRSwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAyKSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19BTEJVTSwgVEVTVF9BTEJVTSwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAzKSkgewotICAgIEdEYXRlICpkYXRlOwotCi0gICAgZGF0ZSA9IFRFU1RfREFURTsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsIEdTVF9UQUdfREFURSwgZGF0ZSwgTlVMTCk7Ci0gICAgZ19kYXRlX2ZyZWUgKGRhdGUpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgNCkpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgIEdTVF9UQUdfVFJBQ0tfTlVNQkVSLCBURVNUX1RSQUNLX05VTUJFUiwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA1KSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19UUkFDS19DT1VOVCwgVEVTVF9UUkFDS19DT1VOVCwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA2KSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19BTEJVTV9WT0xVTUVfTlVNQkVSLCBURVNUX1ZPTFVNRV9OVU1CRVIsIE5VTEwpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgNykpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgIEdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5ULCBURVNUX1ZPTFVNRV9DT1VOVCwgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA4KSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCBURVNUX1RSQUNLX0dBSU4sIE5VTEwpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgOSkpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgVEVTVF9BTEJVTV9HQUlOLCBOVUxMKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDEwKSkgewotICAgIGdzdF90YWdfbGlzdF9hZGQgKHRhZ3MsIEdTVF9UQUdfTUVSR0VfS0VFUCwKLSAgICAgICAgR1NUX1RBR19UUkFDS19QRUFLLCBURVNUX1RSQUNLX1BFQUssIE5VTEwpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMTEpKSB7Ci0gICAgZ3N0X3RhZ19saXN0X2FkZCAodGFncywgR1NUX1RBR19NRVJHRV9LRUVQLAotICAgICAgICBHU1RfVEFHX0FMQlVNX1BFQUssIFRFU1RfQUxCVU1fUEVBSywgTlVMTCk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMikpIHsKLSAgICBnc3RfdGFnX2xpc3RfYWRkICh0YWdzLCBHU1RfVEFHX01FUkdFX0tFRVAsCi0gICAgICAgIEdTVF9UQUdfQkVBVFNfUEVSX01JTlVURSwgVEVTVF9CUE0sIE5VTEwpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMTMpKSB7Ci0gIH0KLSAgcmV0dXJuIHRhZ3M7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotdXRmOF9zdHJpbmdfaW5fYnVmIChHc3RCdWZmZXIgKiBidWYsIGNvbnN0IGdjaGFyICogcykKLXsKLSAgZ2ludCBpLCBsZW47Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGxlbiA9IHN0cmxlbiAocyk7Ci0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGZvciAoaSA9IDA7IGkgPCAobWFwLnNpemUgLSBsZW4pOyArK2kpIHsKLSAgICBpZiAobWVtY21wIChtYXAuZGF0YSArIGksIHMsIGxlbikgPT0gMCkgewotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfdGFnbGliX2lkM211eF9jaGVja190YWdfYnVmZmVyIChHc3RCdWZmZXIgKiBidWYsIGd1aW50MzIgbWFzaykKLXsKLSAgLyogbWFrZSBzdXJlIG91ciBVVEYtOCBzdHJpbmcgaGFzbid0IGJlZW4gcHV0IGludG8gdGhlIHRhZyBhcyBJU08tODg1OS0xICovCi0gIGlmIChtYXNrICYgKDEgPDwgMCkpIHsKLSAgICBmYWlsX3VubGVzcyAodXRmOF9zdHJpbmdfaW5fYnVmIChidWYsIFRFU1RfQVJUSVNUKSk7Ci0gIH0KLSAgLyogbWFrZSBzdXJlIG91ciBVVEYtOCBzdHJpbmcgaGFzbid0IGJlZW4gcHV0IGludG8gdGhlIHRhZyBhcyBJU08tODg1OS0xICovCi0gIGlmIChtYXNrICYgKDEgPDwgMSkpIHsKLSAgICBmYWlsX3VubGVzcyAodXRmOF9zdHJpbmdfaW5fYnVmIChidWYsIFRFU1RfVElUTEUpKTsKLSAgfQotICAvKiBtYWtlIHN1cmUgb3VyIFVURi04IHN0cmluZyBoYXNuJ3QgYmVlbiBwdXQgaW50byB0aGUgdGFnIGFzIElTTy04ODU5LTEgKi8KLSAgaWYgKG1hc2sgJiAoMSA8PCAyKSkgewotICAgIGZhaWxfdW5sZXNzICh1dGY4X3N0cmluZ19pbl9idWYgKGJ1ZiwgVEVTVF9BTEJVTSkpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3RhZ2xpYl9pZDNtdXhfY2hlY2tfdGFncyAoR3N0VGFnTGlzdCAqIHRhZ3MsIGd1aW50MzIgbWFzaykKLXsKLSAgaWYgKG1hc2sgJiAoMSA8PCAwKSkgewotICAgIGdjaGFyICpzID0gTlVMTDsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19BUlRJU1QsICZzKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChzLCBURVNUX0FSVElTVCkpOwotICAgIGdfZnJlZSAocyk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxKSkgewotICAgIGdjaGFyICpzID0gTlVMTDsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFncywgR1NUX1RBR19USVRMRSwgJnMpKTsKLSAgICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKHMsIFRFU1RfVElUTEUpKTsKLSAgICBnX2ZyZWUgKHMpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgMikpIHsKLSAgICBnY2hhciAqcyA9IE5VTEw7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ3MsIEdTVF9UQUdfQUxCVU0sICZzKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdfc3RyX2VxdWFsIChzLCBURVNUX0FMQlVNKSk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDMpKSB7Ci0gICAgR0RhdGUgKnNob3VsZGJlLCAqZGF0ZSA9IE5VTEw7Ci0KLSAgICBzaG91bGRiZSA9IFRFU1RfREFURTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kYXRlICh0YWdzLCBHU1RfVEFHX0RBVEUsICZkYXRlKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdfZGF0ZV9jb21wYXJlIChzaG91bGRiZSwgZGF0ZSkgPT0gMCk7Ci0gICAgZ19kYXRlX2ZyZWUgKHNob3VsZGJlKTsKLSAgICBnX2RhdGVfZnJlZSAoZGF0ZSk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA0KSkgewotICAgIGd1aW50IG51bTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHRhZ3MsIEdTVF9UQUdfVFJBQ0tfTlVNQkVSLCAmbnVtKSk7Ci0gICAgZmFpbF91bmxlc3MgKG51bSA9PSBURVNUX1RSQUNLX05VTUJFUik7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCA1KSkgewotICAgIGd1aW50IGNvdW50OwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfdWludCAodGFncywgR1NUX1RBR19UUkFDS19DT1VOVCwgJmNvdW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKGNvdW50ID09IFRFU1RfVFJBQ0tfQ09VTlQpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgNikpIHsKLSAgICBndWludCBudW07Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF91aW50ICh0YWdzLCBHU1RfVEFHX0FMQlVNX1ZPTFVNRV9OVU1CRVIsCi0gICAgICAgICAgICAmbnVtKSk7Ci0gICAgZmFpbF91bmxlc3MgKG51bSA9PSBURVNUX1ZPTFVNRV9OVU1CRVIpOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgNykpIHsKLSAgICBndWludCBjb3VudDsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHRhZ3MsIEdTVF9UQUdfQUxCVU1fVk9MVU1FX0NPVU5ULAotICAgICAgICAgICAgJmNvdW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKGNvdW50ID09IFRFU1RfVk9MVU1FX0NPVU5UKTsKLSAgfQotICBpZiAobWFzayAmICgxIDw8IDgpKSB7Ci0gICAgZ2RvdWJsZSBnYWluOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdzLCBHU1RfVEFHX1RSQUNLX0dBSU4sICZnYWluKSk7Ci0gICAgZmFpbF91bmxlc3Nfc29ydGFfZXF1YWxzX2Zsb2F0IChnYWluLCBURVNUX1RSQUNLX0dBSU4pOwotICB9Ci0gIGlmIChtYXNrICYgKDEgPDwgOSkpIHsKLSAgICBnZG91YmxlIGdhaW47Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ3MsIEdTVF9UQUdfQUxCVU1fR0FJTiwgJmdhaW4pKTsKLSAgICBmYWlsX3VubGVzc19zb3J0YV9lcXVhbHNfZmxvYXQgKGdhaW4sIFRFU1RfQUxCVU1fR0FJTik7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMCkpIHsKLSAgICBnZG91YmxlIHBlYWs7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ3MsIEdTVF9UQUdfVFJBQ0tfUEVBSywgJnBlYWspKTsKLSAgICBmYWlsX3VubGVzc19zb3J0YV9lcXVhbHNfZmxvYXQgKHBlYWssIFRFU1RfVFJBQ0tfUEVBSyk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMSkpIHsKLSAgICBnZG91YmxlIHBlYWs7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ3MsIEdTVF9UQUdfQUxCVU1fUEVBSywgJnBlYWspKTsKLSAgICBmYWlsX3VubGVzc19zb3J0YV9lcXVhbHNfZmxvYXQgKHBlYWssIFRFU1RfQUxCVU1fUEVBSyk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMikpIHsKLSAgICBnZG91YmxlIGJwbTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFncywgR1NUX1RBR19CRUFUU19QRVJfTUlOVVRFLAotICAgICAgICAgICAgJmJwbSkpOwotICAgIGZhaWxfdW5sZXNzX3NvcnRhX2VxdWFsc19mbG9hdCAoYnBtLCBURVNUX0JQTSk7Ci0gIH0KLSAgaWYgKG1hc2sgJiAoMSA8PCAxMykpIHsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotZmlsbF9tcDNfYnVmZmVyIChHc3RFbGVtZW50ICogZmFrZXNyYywgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsCi0gICAgZ3VpbnQ2NCAqIHBfb2Zmc2V0KQotewotICBnc2l6ZSBzaXplOwotCi0gIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gIGZhaWxfdW5sZXNzIChzaXplID09IE1QM19GUkFNRV9TSVpFKTsKLQotICBHU1RfTE9HICgiZmlsbGluZyBidWZmZXIgd2l0aCBmYWtlIG1wMyBkYXRhLCBvZmZzZXQgPSAlIiBHX0dVSU5UNjRfRk9STUFULAotICAgICAgKnBfb2Zmc2V0KTsKLQotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgbXAzX2R1bW15aGRyLCBzaXplb2YgKG1wM19kdW1teWhkcikpOwotCi0jaWYgMAotICAvKiBjYW4ndCB1c2UgZ3N0X2J1ZmZlcl9zZXRfY2FwcygpIGhlcmUgYmVjYXVzZSB0aGUgbWV0YWRhdGEgaXNuJ3Qgd3JpdGFibGUKLSAgICogYmVjYXVzZSBvZiB0aGUgZXh0cmEgcmVmY291bnRzIHRha2VuIGJ5IHRoZSBzaWduYWwgZW1pc3Npb24gbWVjaGFuaXNtOwotICAgKiB3ZSBrbm93IGl0J3MgZmluZSB0byB1c2UgR1NUX0JVRkZFUl9DQVBTKCkgaGVyZSB0aG91Z2ggKi8KLSAgR1NUX0JVRkZFUl9DQVBTIChidWYpID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLCAibXBlZ3ZlcnNpb24iLAotICAgICAgR19UWVBFX0lOVCwgMSwgImxheWVyIiwgR19UWVBFX0lOVCwgMywgTlVMTCk7Ci0jZW5kaWYKLQotICBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9ICpwX29mZnNldDsKLSAgKnBfb2Zmc2V0ICs9IHNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1nb3RfYnVmZmVyIChHc3RFbGVtZW50ICogZmFrZXNpbmssIEdzdEJ1ZmZlciAqIGJ1ZiwgR3N0UGFkICogcGFkLAotICAgIEdzdEJ1ZmZlciAqKiBwX2J1ZikKLXsKLSAgZ2ludDY0IG9mZjsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgb2ZmID0gR1NUX0JVRkZFUl9PRkZTRVQgKGJ1Zik7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLQotICBHU1RfTE9HICgic2l6ZT0lIiBHX0dTSVpFX0ZPUk1BVCAiLCBvZmZzZXQ9JSIgR19HSU5UNjRfRk9STUFULCBtYXAuc2l6ZSwgb2ZmKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9PRkZTRVRfSVNfVkFMSUQgKGJ1ZikpOwotCi0gIGlmICgqcF9idWYgPT0gTlVMTCB8fCAob2ZmICsgbWFwLnNpemUpID4gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoKnBfYnVmKSkgewotICAgIEdzdEJ1ZmZlciAqbmV3YnVmOwotCi0gICAgLyogbm90IHZlcnkgZWxlZ2FudCwgYnV0IHdobyBjYXJlcyAqLwotICAgIG5ld2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAob2ZmICsgbWFwLnNpemUpOwotICAgIGlmICgqcF9idWYpIHsKLSAgICAgIEdzdE1hcEluZm8gcG1hcDsKLQotICAgICAgZ3N0X2J1ZmZlcl9tYXAgKCpwX2J1ZiwgJnBtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICBnc3RfYnVmZmVyX2ZpbGwgKG5ld2J1ZiwgMCwgcG1hcC5kYXRhLCBwbWFwLnNpemUpOwotICAgICAgZ3N0X2J1ZmZlcl91bm1hcCAoKnBfYnVmLCAmcG1hcCk7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfZmlsbCAobmV3YnVmLCBvZmYsIG1hcC5kYXRhLCBtYXAuc2l6ZSk7Ci0KLSAgICBpZiAoKnBfYnVmKQotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoKnBfYnVmKTsKLSAgICAqcF9idWYgPSBuZXdidWY7Ci0gIH0gZWxzZSB7Ci0gICAgZ3N0X2J1ZmZlcl9maWxsICgqcF9idWYsIG9mZiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF90YWdsaWJfaWQzbXV4X2NoZWNrX291dHB1dF9idWZmZXIgKEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50IG9mZjsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBnX2Fzc2VydCAobWFwLnNpemUgJSBNUDNfRlJBTUVfU0laRSA9PSAwKTsKLQotICBmb3IgKG9mZiA9IDA7IG9mZiA8IG1hcC5zaXplOyBvZmYgKz0gTVAzX0ZSQU1FX1NJWkUpIHsKLSAgICBmYWlsX3VubGVzcyAobWVtY21wIChtYXAuZGF0YSArIG9mZiwgbXAzX2R1bW15aGRyLAotICAgICAgICAgICAgc2l6ZW9mIChtcDNfZHVtbXloZHIpKSA9PSAwKTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotfQotCi1zdGF0aWMgdm9pZAotaWRlbnRpdHlfY2IgKEdzdEVsZW1lbnQgKiBpZGVudGl0eSwgR3N0QnVmZmVyICogYnVmLCBHc3RCdWZmZXIgKiogcF90YWdidWYpCi17Ci0gIGlmICgqcF90YWdidWYgPT0gTlVMTCkgewotICAgICpwX3RhZ2J1ZiA9IGdzdF9idWZmZXJfcmVmIChidWYpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3RhZ2xpYl9pZDNtdXhfd2l0aF90YWdzIChHc3RUYWdMaXN0ICogdGFncywgZ3VpbnQzMiBtYXNrKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdFRhZ0xpc3QgKnRhZ3NfcmVhZCA9IE5VTEw7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqaWQzbXV4LCAqaWQzZGVtdXgsICpmYWtlc3JjLCAqaWRlbnRpdHksICpmYWtlc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIGd1aW50NjQgb2Zmc2V0OwotICBHc3RCdWZmZXIgKm91dGJ1ZiA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqdGFnYnVmID0gTlVMTDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzdWx0OwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSAhPSBOVUxMKTsKLQotICBmYWtlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJmYWtlc3JjIik7Ci0gIGdfYXNzZXJ0IChmYWtlc3JjICE9IE5VTEwpOwotCi0gIGlkM211eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkM3YybXV4IiwgImlkM3YybXV4Iik7Ci0gIGdfYXNzZXJ0IChpZDNtdXggIT0gTlVMTCk7Ci0KLSAgaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJpZGVudGl0eSIpOwotICBnX2Fzc2VydCAoaWRlbnRpdHkgIT0gTlVMTCk7Ci0KLSAgaWQzZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZDNkZW11eCIsICJpZDNkZW11eCIpOwotICBnX2Fzc2VydCAoaWQzZGVtdXggIT0gTlVMTCk7Ci0KLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJmYWtlc2luayIpOwotICBnX2Fzc2VydCAoZmFrZXNpbmsgIT0gTlVMTCk7Ci0KLSAgLyogc2V0IHVwIHNpbmsgKi8KLSAgb3V0YnVmID0gTlVMTDsKLSAgZ19vYmplY3Rfc2V0IChmYWtlc2luaywgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChmYWtlc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLIChnb3RfYnVmZmVyKSwgJm91dGJ1Zik7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZmFrZXNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGlkM211eCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGlkZW50aXR5KTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgaWQzZGVtdXgpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBmYWtlc2luayk7Ci0KLSAgZ3N0X3RhZ19zZXR0ZXJfbWVyZ2VfdGFncyAoR1NUX1RBR19TRVRURVIgKGlkM211eCksIHRhZ3MsCi0gICAgICBHU1RfVEFHX01FUkdFX0FQUEVORCk7Ci0KLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChmYWtlc3JjLCBpZDNtdXgsIGlkZW50aXR5LCBpZDNkZW11eCwgZmFrZXNpbmssIE5VTEwpOwotCi0gIC8qIHNldCB1cCBzb3VyY2UgKi8KLSAgZ19vYmplY3Rfc2V0IChmYWtlc3JjLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgImNhbi1hY3RpdmF0ZS1wdWxsIiwgRkFMU0UsCi0gICAgICAiZmlsbHR5cGUiLCAyLCAic2l6ZXR5cGUiLCAyLCAic2l6ZW1heCIsIE1QM19GUkFNRV9TSVpFLAotICAgICAgIm51bS1idWZmZXJzIiwgMTYsIE5VTEwpOwotCi0gIG9mZnNldCA9IDA7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGZha2VzcmMsICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoZmlsbF9tcDNfYnVmZmVyKSwgJm9mZnNldCk7Ci0KLSAgLyogc2V0IHVwIGlkZW50aXR5IHRvIGNhdGNoIHRhZyBidWZmZXIgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAoaWRlbnRpdHksICJoYW5kb2ZmIiwgR19DQUxMQkFDSyAoaWRlbnRpdHlfY2IpLCAmdGFnYnVmKTsKLQotICBHU1RfTE9HICgic2V0dGluZyBhbmQgZ2V0dGluZyBzdGF0ZSAuLi4iKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBzdGF0ZV9yZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgIlVuZXhwZWN0ZWQgcmVzdWx0IGZyb20gZ2V0X3N0YXRlKCkuIEV4cGVjdGVkIHN1Y2Nlc3MsIGdvdCAlZCIsCi0gICAgICBzdGF0ZV9yZXN1bHQpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0KLSAgR1NUX0xPRyAoIldhaXRpbmcgZm9yIHRhZyAuLi4iKTsKLSAgbXNnID0KLSAgICAgIGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9UQUcgfCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwKLSAgICAgIC0xKTsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICBHRXJyb3IgKmVycjsKLSAgICBnY2hhciAqZGJnOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgZ19wcmludGVyciAoIkVSUk9SIGZyb20gZWxlbWVudCAlczogJXNcbiVzXG4iLAotICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1zZy0+c3JjKSwgZXJyLT5tZXNzYWdlLCBHU1RfU1RSX05VTEwgKGRiZykpOwotICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICBnX2ZyZWUgKGRiZyk7Ci0gIH0gZWxzZSBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FT1MpIHsKLSAgICBnX3ByaW50ZXJyICgiRU9TIG1lc3NhZ2UsIGJ1dCB3ZXJlIHdhaXRpbmcgZm9yIFRBR1MhXG4iKTsKLSAgfQotICBmYWlsX3VubGVzcyAobXNnLT50eXBlID09IEdTVF9NRVNTQUdFX1RBRyk7Ci0KLSAgZ3N0X21lc3NhZ2VfcGFyc2VfdGFnIChtc2csICZ0YWdzX3JlYWQpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICBHU1RfTE9HICgiR290IHRhZ3M6ICUiIEdTVF9QVFJfRk9STUFULCB0YWdzX3JlYWQpOwotICB0ZXN0X3RhZ2xpYl9pZDNtdXhfY2hlY2tfdGFncyAodGFnc19yZWFkLCBtYXNrKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzX3JlYWQpOwotCi0gIGZhaWxfdW5sZXNzICh0YWdidWYgIT0gTlVMTCk7Ci0gIHRlc3RfdGFnbGliX2lkM211eF9jaGVja190YWdfYnVmZmVyICh0YWdidWYsIG1hc2spOwotICBnc3RfYnVmZmVyX3VucmVmICh0YWdidWYpOwotCi0gIEdTVF9MT0cgKCJXYWl0aW5nIGZvciBFT1MgLi4uIik7Ci0gIG1zZyA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUiwgLTEpOwotICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUikgewotICAgIEdFcnJvciAqZXJyOwotICAgIGdjaGFyICpkYmc7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCAmZGJnKTsKLSAgICBnX3ByaW50ZXJyICgiRVJST1IgZnJvbSBlbGVtZW50ICVzOiAlc1xuJXNcbiIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAobXNnLT5zcmMpLCBlcnItPm1lc3NhZ2UsIEdTVF9TVFJfTlVMTCAoZGJnKSk7Ci0gICAgZ19lcnJvcl9mcmVlIChlcnIpOwotICAgIGdfZnJlZSAoZGJnKTsKLSAgfQotICBmYWlsX3VubGVzcyAobXNnLT50eXBlID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgR1NUX0xPRyAoIkdvdCBFT1MsIHNodXR0aW5nIGRvd24gLi4uIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIHRlc3RfdGFnbGliX2lkM211eF9jaGVja19vdXRwdXRfYnVmZmVyIChvdXRidWYpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOwotCi0gIEdTVF9MT0cgKCJEb25lIik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2lkM3YybXV4KQotewotICBHc3RUYWdMaXN0ICp0YWdzOwotICBnaW50IGk7Ci0KLSAgZ19yYW5kb21fc2V0X3NlZWQgKDI0NzE2NjI5NSk7Ci0KLSAgLyogaW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2sgKi8KLSAgdGFncyA9IHRlc3RfdGFnbGliX2lkM211eF9jcmVhdGVfdGFncyAoMHhGRkZGRkZGRik7Ci0gIHRlc3RfdGFnbGliX2lkM211eF9jaGVja190YWdzICh0YWdzLCAweEZGRkZGRkZGKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdzKTsKLQotICAvKiBub3cgdGhlIHJlYWwgdGVzdHMgKi8KLSAgZm9yIChpID0gMDsgaSA8IDUwOyArK2kpIHsKLSAgICBndWludDMyIG1hc2s7Ci0KLSAgICBtYXNrID0gZ19yYW5kb21faW50ICgpOwotICAgIEdTVF9MT0cgKCJ0YWcgbWFzayA9ICUwOHggKGk9JWQpIiwgbWFzaywgaSk7Ci0KLSAgICBpZiAobWFzayA9PSAwKQotICAgICAgY29udGludWU7Ci0KLSAgICAvKiBjcmVhdGUgdGFncyAqLwotICAgIHRhZ3MgPSB0ZXN0X3RhZ2xpYl9pZDNtdXhfY3JlYXRlX3RhZ3MgKG1hc2spOwotICAgIEdTVF9MT0cgKCJ0YWdzIGZvciBtYXNrICUwOHggPSAlIiBHU1RfUFRSX0ZPUk1BVCwgbWFzaywgdGFncyk7Ci0KLSAgICAvKiBkb3VibGUtY2hlY2sgZm9yIGludGVybmFsIGNvbnNpc3RlbmN5ICovCi0gICAgdGVzdF90YWdsaWJfaWQzbXV4X2NoZWNrX3RhZ3MgKHRhZ3MsIG1hc2spOwotCi0gICAgLyogdGVzdCB3aXRoIHBpcGVsaW5lICovCi0gICAgdGVzdF90YWdsaWJfaWQzbXV4X3dpdGhfdGFncyAodGFncywgbWFzayk7Ci0KLSAgICAvKiBmcmVlIHRhZ3MgKi8KLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWlkM3YybXV4X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImlkM3YybXV4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2lkM3YybXV4KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGlkM3YybXV4KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ltYWdlZnJlZXplLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9pbWFnZWZyZWV6ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmVmZjM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2ltYWdlZnJlZXplLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ODYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+Ci0KLXN0YXRpYyBnYm9vbGVhbgotYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgZGF0YTsKLQotICBzd2l0Y2ggKG1lc3NhZ2UtPnR5cGUpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGlmIChtZXNzYWdlLT50eXBlID09IEdTVF9NRVNTQUdFX1dBUk5JTkcpCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICBlbHNlCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgZ19lcnJvciAoImVycm9yIGZyb20gJXM6ICVzICglcylcbiIsCi0gICAgICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSksIGdlcnJvci0+bWVzc2FnZSwKLSAgICAgICAgICBHU1RfU1RSX05VTEwgKGRlYnVnKSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9pbWFnZWZyZWV6ZSAoY29uc3QgR3N0Q2FwcyAqIGNhcHMxLCBjb25zdCBHc3RDYXBzICogY2FwczIsCi0gICAgR0NhbGxiYWNrIHNpbmtfaGFuZG9mZiwgZ3BvaW50ZXIgc2lua19oYW5kb2ZmX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICp2aWRlb3Rlc3RzcmMsICpjYXBzZmlsdGVyMSwgKmltYWdlZnJlZXplLCAqY2Fwc2ZpbHRlcjIsICpmYWtlc2luazsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0KLSAgdmlkZW90ZXN0c3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYyIpOwotICBmYWlsX3VubGVzcyAodmlkZW90ZXN0c3JjICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKHZpZGVvdGVzdHNyYywgIm51bS1idWZmZXJzIiwgMSwgTlVMTCk7Ci0KLSAgY2Fwc2ZpbHRlcjEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZpbHRlcjEiKTsKLSAgZmFpbF91bmxlc3MgKGNhcHNmaWx0ZXIxICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKGNhcHNmaWx0ZXIxLCAiY2FwcyIsIGNhcHMxLCBOVUxMKTsKLQotICBpbWFnZWZyZWV6ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImltYWdlZnJlZXplIiwgImZyZWV6ZSIpOwotICBmYWlsX3VubGVzcyAoaW1hZ2VmcmVlemUgIT0gTlVMTCk7Ci0KLSAgY2Fwc2ZpbHRlcjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZpbHRlcjIiKTsKLSAgZmFpbF91bmxlc3MgKGNhcHNmaWx0ZXIyICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKGNhcHNmaWx0ZXIyLCAiY2FwcyIsIGNhcHMyLCBOVUxMKTsKLQotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGZha2VzaW5rICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKGZha2VzaW5rLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOwotCi0gIGlmIChzaW5rX2hhbmRvZmYpCi0gICAgZ19zaWduYWxfY29ubmVjdCAoZmFrZXNpbmssICJoYW5kb2ZmIiwgc2lua19oYW5kb2ZmLCBzaW5rX2hhbmRvZmZfZGF0YSk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCB2aWRlb3Rlc3RzcmMsIGNhcHNmaWx0ZXIxLCBpbWFnZWZyZWV6ZSwKLSAgICAgIGNhcHNmaWx0ZXIyLCBmYWtlc2luaywgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAodmlkZW90ZXN0c3JjLCAic3JjIiwgY2Fwc2ZpbHRlcjEsCi0gICAgICAgICAgInNpbmsiKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX3BhZHMgKGNhcHNmaWx0ZXIxLCAic3JjIiwgaW1hZ2VmcmVlemUsICJzaW5rIikpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19wYWRzIChpbWFnZWZyZWV6ZSwgInNyYyIsIGNhcHNmaWx0ZXIyLCAic2luayIpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoY2Fwc2ZpbHRlcjIsICJzcmMiLCBmYWtlc2luaywgInNpbmsiKSk7Ci0KLSAgcmV0dXJuIHBpcGVsaW5lOwotfQotCi1zdGF0aWMgdm9pZAotc2lua19oYW5kb2ZmX2NiXzBfMSAoR3N0RWxlbWVudCAqIG9iamVjdCwgR3N0QnVmZmVyICogYnVmZmVyLCBHc3RQYWQgKiBwYWQsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCAqbl9idWZmZXJzID0gKGd1aW50ICopIHVzZXJfZGF0YTsKLQotICBpZiAoKm5fYnVmZmVycyA9PSBHX01BWFVJTlQpCi0gICAgcmV0dXJuOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpLCAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpLCAxKTsKLQotICAqbl9idWZmZXJzID0gKm5fYnVmZmVycyArIDE7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ltYWdlZnJlZXplXzBfMSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdENhcHMgKmNhcHMxLCAqY2FwczI7Ci0gIEdzdEJ1cyAqYnVzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIGd1aW50IG5fYnVmZmVycyA9IEdfTUFYVUlOVDsKLSAgZ3VpbnQgYnVzX3dhdGNoID0gMDsKLSAgR3N0VmlkZW9JbmZvIGkxLCBpMjsKLQotICBnc3RfdmlkZW9faW5mb19pbml0ICgmaTEpOwotICBnc3RfdmlkZW9faW5mb19zZXRfZm9ybWF0ICgmaTEsIEdTVF9WSURFT19GT1JNQVRfeFJHQiwgNjQwLCA0ODApOwotICBpMS5mcHNfbiA9IDI1OwotICBpMS5mcHNfZCA9IDE7Ci0gIGNhcHMxID0gZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcyAoJmkxKTsKLQotICBnc3RfdmlkZW9faW5mb19pbml0ICgmaTIpOwotICBnc3RfdmlkZW9faW5mb19zZXRfZm9ybWF0ICgmaTIsIEdTVF9WSURFT19GT1JNQVRfeFJHQiwgNjQwLCA0ODApOwotICBjYXBzMiA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMgKCZpMik7Ci0KLSAgcGlwZWxpbmUgPQotICAgICAgc2V0dXBfaW1hZ2VmcmVlemUgKGNhcHMxLCBjYXBzMiwgR19DQUxMQkFDSyAoc2lua19oYW5kb2ZmX2NiXzBfMSksCi0gICAgICAmbl9idWZmZXJzKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGxvb3AgIT0gTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwpOwotICBidXNfd2F0Y2ggPSBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfaGFuZGxlciwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgbl9idWZmZXJzID0gMDsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5fYnVmZmVycywgMSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXNpbmtfaGFuZG9mZl9jYl8yNV8xXzBtc180MDBtcyAoR3N0RWxlbWVudCAqIG9iamVjdCwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCAqbl9idWZmZXJzID0gKGd1aW50ICopIHVzZXJfZGF0YTsKLQotICBpZiAoKm5fYnVmZmVycyA9PSBHX01BWFVJTlQpCi0gICAgcmV0dXJuOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpLAotICAgICAgKm5fYnVmZmVycyAqIDQwICogR1NUX01TRUNPTkQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpLCA0MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlciksICpuX2J1ZmZlcnMpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlciksICpuX2J1ZmZlcnMgKyAxKTsKLQotICAqbl9idWZmZXJzID0gKm5fYnVmZmVycyArIDE7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ltYWdlZnJlZXplXzI1XzFfMG1zXzQwMG1zKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgZ3VpbnQgbl9idWZmZXJzID0gR19NQVhVSU5UOwotICBndWludCBidXNfd2F0Y2ggPSAwOwotICBHc3RWaWRlb0luZm8gaTEsIGkyOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMSk7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMSwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkxLmZwc19uID0gMjU7Ci0gIGkxLmZwc19kID0gMTsKLSAgY2FwczEgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTEpOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMik7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMiwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkyLmZwc19uID0gMjU7Ci0gIGkyLmZwc19kID0gMTsKLSAgY2FwczIgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTIpOwotCi0gIHBpcGVsaW5lID0KLSAgICAgIHNldHVwX2ltYWdlZnJlZXplIChjYXBzMSwgY2FwczIsCi0gICAgICBHX0NBTExCQUNLIChzaW5rX2hhbmRvZmZfY2JfMjVfMV8wbXNfNDAwbXMpLCAmbl9idWZmZXJzKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGxvb3AgIT0gTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwpOwotICBidXNfd2F0Y2ggPSBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfaGFuZGxlciwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZWVrIChwaXBlbGluZSwgMS4wLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgICAgR1NUX1NFRUtfRkxBR19GTFVTSCwgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfU0VULAotICAgICAgICAgIDQwMCAqIEdTVF9NU0VDT05EKSk7Ci0KLSAgbl9idWZmZXJzID0gMDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobl9idWZmZXJzLCAxMCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczEpOwotICBnc3RfY2Fwc191bnJlZiAoY2FwczIpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLXNpbmtfaGFuZG9mZl9jYl8yNV8xXzIwMG1zXzQwMG1zIChHc3RFbGVtZW50ICogb2JqZWN0LCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0UGFkICogcGFkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50ICpuX2J1ZmZlcnMgPSAoZ3VpbnQgKikgdXNlcl9kYXRhOwotCi0gIGlmICgqbl9idWZmZXJzID09IEdfTUFYVUlOVCkKLSAgICByZXR1cm47Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlciksCi0gICAgICAyMDAgKiBHU1RfTVNFQ09ORCArICpuX2J1ZmZlcnMgKiA0MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSwgNDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpLCA1ICsgKm5fYnVmZmVycyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSwKLSAgICAgIDUgKyAqbl9idWZmZXJzICsgMSk7Ci0KLSAgKm5fYnVmZmVycyA9ICpuX2J1ZmZlcnMgKyAxOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbWFnZWZyZWV6ZV8yNV8xXzIwMG1zXzQwMG1zKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgZ3VpbnQgbl9idWZmZXJzID0gR19NQVhVSU5UOwotICBndWludCBidXNfd2F0Y2ggPSAwOwotICBHc3RWaWRlb0luZm8gaTEsIGkyOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMSk7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMSwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkxLmZwc19uID0gMjU7Ci0gIGkxLmZwc19kID0gMTsKLSAgY2FwczEgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTEpOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMik7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMiwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkyLmZwc19uID0gMjU7Ci0gIGkyLmZwc19kID0gMTsKLSAgY2FwczIgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTIpOwotCi0gIHBpcGVsaW5lID0KLSAgICAgIHNldHVwX2ltYWdlZnJlZXplIChjYXBzMSwgY2FwczIsCi0gICAgICBHX0NBTExCQUNLIChzaW5rX2hhbmRvZmZfY2JfMjVfMV8yMDBtc180MDBtcyksICZuX2J1ZmZlcnMpOwotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIFRSVUUpOwotICBmYWlsX3VubGVzcyAobG9vcCAhPSBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCk7Ci0gIGJ1c193YXRjaCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19oYW5kbGVyLCBsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NlZWsgKHBpcGVsaW5lLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNILCBHU1RfU0VFS19UWVBFX1NFVCwgMjAwICogR1NUX01TRUNPTkQsCi0gICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDQwMCAqIEdTVF9NU0VDT05EKSk7Ci0KLSAgbl9idWZmZXJzID0gMDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobl9idWZmZXJzLCA1KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0gIGdfc291cmNlX3JlbW92ZSAoYnVzX3dhdGNoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotc2lua19oYW5kb2ZmX2NiXzI1XzFfNDAwbXNfMG1zIChHc3RFbGVtZW50ICogb2JqZWN0LCBHc3RCdWZmZXIgKiBidWZmZXIsCi0gICAgR3N0UGFkICogcGFkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGd1aW50ICpuX2J1ZmZlcnMgPSAoZ3VpbnQgKikgdXNlcl9kYXRhOwotCi0gIGlmICgqbl9idWZmZXJzID09IEdfTUFYVUlOVCkKLSAgICByZXR1cm47Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlciksCi0gICAgICA0MDAgKiBHU1RfTVNFQ09ORCAtICgqbl9idWZmZXJzICsgMSkgKiA0MCAqIEdTVF9NU0VDT05EKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSwgNDAgKiBHU1RfTVNFQ09ORCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpLCAxMCAtICgqbl9idWZmZXJzICsgMSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZmZlciksCi0gICAgICAxMCAtICgqbl9idWZmZXJzICsgMSkgKyAxKTsKLQotICAqbl9idWZmZXJzID0gKm5fYnVmZmVycyArIDE7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ltYWdlZnJlZXplXzI1XzFfNDAwbXNfMG1zKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgZ3VpbnQgbl9idWZmZXJzID0gR19NQVhVSU5UOwotICBndWludCBidXNfd2F0Y2ggPSAwOwotICBHc3RWaWRlb0luZm8gaTEsIGkyOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMSk7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMSwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkxLmZwc19uID0gMjU7Ci0gIGkxLmZwc19kID0gMTsKLSAgY2FwczEgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTEpOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMik7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMiwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkyLmZwc19uID0gMjU7Ci0gIGkyLmZwc19kID0gMTsKLSAgY2FwczIgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTIpOwotCi0gIHBpcGVsaW5lID0KLSAgICAgIHNldHVwX2ltYWdlZnJlZXplIChjYXBzMSwgY2FwczIsCi0gICAgICBHX0NBTExCQUNLIChzaW5rX2hhbmRvZmZfY2JfMjVfMV80MDBtc18wbXMpLCAmbl9idWZmZXJzKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGxvb3AgIT0gTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwpOwotICBidXNfd2F0Y2ggPSBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfaGFuZGxlciwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZWVrIChwaXBlbGluZSwgLTEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsIEdTVF9TRUVLX1RZUEVfU0VULCAwLCBHU1RfU0VFS19UWVBFX1NFVCwKLSAgICAgICAgICA0MDAgKiBHU1RfTVNFQ09ORCkpOwotCi0gIG5fYnVmZmVycyA9IDA7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5fYnVmZmVycywgMTApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgZ19zb3VyY2VfcmVtb3ZlIChidXNfd2F0Y2gpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1zaW5rX2hhbmRvZmZfY2JfMjVfMV8yMjBtc18zODBtcyAoR3N0RWxlbWVudCAqIG9iamVjdCwgR3N0QnVmZmVyICogYnVmZmVyLAotICAgIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBndWludCAqbl9idWZmZXJzID0gKGd1aW50ICopIHVzZXJfZGF0YTsKLQotICBpZiAoKm5fYnVmZmVycyA9PSBHX01BWFVJTlQpCi0gICAgcmV0dXJuOwotCi0gIGlmICgqbl9idWZmZXJzID09IDApIHsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSwKLSAgICAgICAgMjIwICogR1NUX01TRUNPTkQpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlciksIDIwICogR1NUX01TRUNPTkQpOwotICB9IGVsc2UgaWYgKCpuX2J1ZmZlcnMgPT0gNCkgewotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpLAotICAgICAgICAzNjAgKiBHU1RfTVNFQ09ORCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSwgMjAgKiBHU1RfTVNFQ09ORCk7Ci0gIH0gZWxzZSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlciksCi0gICAgICAgIDIwMCAqIEdTVF9NU0VDT05EICsgKm5fYnVmZmVycyAqIDQwICogR1NUX01TRUNPTkQpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlciksIDQwICogR1NUX01TRUNPTkQpOwotICB9Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlciksIDUgKyAqbl9idWZmZXJzKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9PRkZTRVRfRU5EIChidWZmZXIpLAotICAgICAgNSArICpuX2J1ZmZlcnMgKyAxKTsKLQotICAqbl9idWZmZXJzID0gKm5fYnVmZmVycyArIDE7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ltYWdlZnJlZXplXzI1XzFfMjIwbXNfMzgwbXMpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RDYXBzICpjYXBzMSwgKmNhcHMyOwotICBHc3RCdXMgKmJ1czsKLSAgR01haW5Mb29wICpsb29wOwotICBndWludCBuX2J1ZmZlcnMgPSBHX01BWFVJTlQ7Ci0gIGd1aW50IGJ1c193YXRjaCA9IDA7Ci0gIEdzdFZpZGVvSW5mbyBpMSwgaTI7Ci0KLSAgZ3N0X3ZpZGVvX2luZm9faW5pdCAoJmkxKTsKLSAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCAoJmkxLCBHU1RfVklERU9fRk9STUFUX3hSR0IsIDY0MCwgNDgwKTsKLSAgaTEuZnBzX24gPSAyNTsKLSAgaTEuZnBzX2QgPSAxOwotICBjYXBzMSA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMgKCZpMSk7Ci0KLSAgZ3N0X3ZpZGVvX2luZm9faW5pdCAoJmkyKTsKLSAgZ3N0X3ZpZGVvX2luZm9fc2V0X2Zvcm1hdCAoJmkyLCBHU1RfVklERU9fRk9STUFUX3hSR0IsIDY0MCwgNDgwKTsKLSAgaTIuZnBzX24gPSAyNTsKLSAgaTIuZnBzX2QgPSAxOwotICBjYXBzMiA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMgKCZpMik7Ci0KLSAgcGlwZWxpbmUgPQotICAgICAgc2V0dXBfaW1hZ2VmcmVlemUgKGNhcHMxLCBjYXBzMiwKLSAgICAgIEdfQ0FMTEJBQ0sgKHNpbmtfaGFuZG9mZl9jYl8yNV8xXzIyMG1zXzM4MG1zKSwgJm5fYnVmZmVycyk7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChsb29wICE9IE5VTEwpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMKTsKLSAgYnVzX3dhdGNoID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgYnVzX2hhbmRsZXIsIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2VlayAocGlwZWxpbmUsIDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0gsIEdTVF9TRUVLX1RZUEVfU0VULCAyMjAgKiBHU1RfTVNFQ09ORCwKLSAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMzgwICogR1NUX01TRUNPTkQpKTsKLQotICBuX2J1ZmZlcnMgPSAwOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChuX2J1ZmZlcnMsIDUpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMxKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMyKTsKLSAgZ19zb3VyY2VfcmVtb3ZlIChidXNfd2F0Y2gpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ltYWdlZnJlZXplX2VvcykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0Q2FwcyAqY2FwczEsICpjYXBzMjsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfVElNRTsKLSAgZ2ludDY0IHBvc2l0aW9uOwotICBndWludCBidXNfd2F0Y2ggPSAwOwotICBHc3RWaWRlb0luZm8gaTEsIGkyOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMSk7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMSwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkxLmZwc19uID0gMjU7Ci0gIGkxLmZwc19kID0gMTsKLSAgY2FwczEgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTEpOwotCi0gIGdzdF92aWRlb19pbmZvX2luaXQgKCZpMik7Ci0gIGdzdF92aWRlb19pbmZvX3NldF9mb3JtYXQgKCZpMiwgR1NUX1ZJREVPX0ZPUk1BVF94UkdCLCA2NDAsIDQ4MCk7Ci0gIGkyLmZwc19uID0gMjU7Ci0gIGkyLmZwc19kID0gMTsKLSAgY2FwczIgPSBnc3RfdmlkZW9faW5mb190b19jYXBzICgmaTIpOwotCi0gIHBpcGVsaW5lID0gc2V0dXBfaW1hZ2VmcmVlemUgKGNhcHMxLCBjYXBzMiwgTlVMTCwgTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAxMDAsIE5VTEwpOwotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIFRSVUUpOwotICBmYWlsX3VubGVzcyAobG9vcCAhPSBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCk7Ci0gIGJ1c193YXRjaCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19oYW5kbGVyLCBsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NlZWsgKHBpcGVsaW5lLCAxLjAsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICBHU1RfU0VFS19GTEFHX0ZMVVNILCBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9TRVQsCi0gICAgICAgICAgNDAwICogR1NUX01TRUNPTkQpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyksCi0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3F1ZXJ5X3Bvc2l0aW9uIChzcmMsIGZtdCwgJnBvc2l0aW9uKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKHBvc2l0aW9uLCA0MCAqIEdTVF9NU0VDT05EKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzMik7Ci0gIGdfc291cmNlX3JlbW92ZSAoYnVzX3dhdGNoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotaW1hZ2VmcmVlemVfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiaW1hZ2VmcmVlemUiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgibGluZWFyIik7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgMTIwcywgbm90IHRoZSBkZWZhdWx0IDMgKi8KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAxMjApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW1hZ2VmcmVlemVfMF8xKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ltYWdlZnJlZXplXzI1XzFfMG1zXzQwMG1zKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ltYWdlZnJlZXplXzI1XzFfMjAwbXNfNDAwbXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW1hZ2VmcmVlemVfMjVfMV80MDBtc18wbXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW1hZ2VmcmVlemVfMjVfMV8yMjBtc18zODBtcyk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ltYWdlZnJlZXplX2Vvcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChpbWFnZWZyZWV6ZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9pbnRlcmxlYXZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkOWQ1NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvaW50ZXJsZWF2ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODI2ICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3RzIGZvciB0aGUgaW50ZXJsZWF2ZSBlbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogRklYTUUgMC4xMTogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoPj0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfVkFMR1JJTkQKLSMgaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWVudW10eXBlcy5oPgotCi1zdGF0aWMgdm9pZAotZ3N0X2NoZWNrX3NldHVwX2V2ZW50c19pbnRlcmxlYXZlIChHc3RQYWQgKiBzcmNwYWQsIEdzdEVsZW1lbnQgKiBlbGVtZW50LAotICAgIEdzdENhcHMgKiBjYXBzLCBHc3RGb3JtYXQgZm9ybWF0LCBjb25zdCBnY2hhciAqIHN0cmVhbV9pZCkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBmb3JtYXQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwKLSAgICAgICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoc3RyZWFtX2lkKSkpOwotICBpZiAoY2FwcykKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jcmVhdGVfYW5kX3VucmVmKQotewotICBHc3RFbGVtZW50ICppbnRlcmxlYXZlOwotCi0gIGludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpbnRlcmxlYXZlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbnRlcmxlYXZlICE9IE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoaW50ZXJsZWF2ZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcmxlYXZlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZXF1ZXN0X3BhZHMpCi17Ci0gIEdzdEVsZW1lbnQgKmludGVybGVhdmU7Ci0gIEdzdFBhZCAqcGFkMSwgKnBhZDI7Ci0KLSAgaW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImludGVybGVhdmUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGludGVybGVhdmUgIT0gTlVMTCk7Ci0KLSAgcGFkMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoaW50ZXJsZWF2ZSwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHBhZDEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKEdTVF9PQkpFQ1RfTkFNRSAocGFkMSksICJzaW5rXzAiKTsKLQotICBwYWQyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAocGFkMiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX09CSkVDVF9OQU1FIChwYWQyKSwgInNpbmtfMSIpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsIHBhZDIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQyKTsKLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoaW50ZXJsZWF2ZSwgcGFkMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZDEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoaW50ZXJsZWF2ZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcmxlYXZlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0UGFkICoqbXlzcmNwYWRzLCAqbXlzaW5rcGFkOwotc3RhdGljIEdzdEJ1cyAqYnVzOwotc3RhdGljIEdzdEVsZW1lbnQgKmludGVybGVhdmU7Ci1zdGF0aWMgZ2ludCBoYXZlX2RhdGE7Ci1zdGF0aWMgZ2Zsb2F0IGlucHV0WzJdOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChGMzIpICIsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMiwgbGF5b3V0ID0gKHN0cmluZykge2ludGVybGVhdmVkLCBub24taW50ZXJsZWF2ZWR9LCByYXRlID0gKGludCkgNDgwMDAiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKEYzMikgIiwgIgotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCBsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgcmF0ZSA9IChpbnQpIDQ4MDAwIikpOwotCi0jZGVmaW5lIENBUFNfNDhraHogXAotICAgICAgICAiYXVkaW8veC1yYXcsICIgXAotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKEYzMikgIiwgIiBcCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsIGxheW91dCA9IChzdHJpbmcpIG5vbi1pbnRlcmxlYXZlZCwiIFwKLSAgICAgICAgInJhdGUgPSAoaW50KSA0ODAwMCIKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLWludGVybGVhdmVfY2hhaW5fZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdmbG9hdCAqb3V0ZGF0YTsKLSAgZ2ludCBpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSIChidWZmZXIpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZmZlciwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgb3V0ZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hcC5zaXplLCA0ODAwMCAqIDIgKiBzaXplb2YgKGdmbG9hdCkpOwotICBmYWlsX3VubGVzcyAob3V0ZGF0YSAhPSBOVUxMKTsKLQotI2lmZGVmIEhBVkVfVkFMR1JJTkQKLSAgaWYgKCEoUlVOTklOR19PTl9WQUxHUklORCkpCi0jZW5kaWYKLSAgICBmb3IgKGkgPSAwOyBpIDwgNDgwMDAgKiAyOyBpICs9IDIpIHsKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAob3V0ZGF0YVtpXSwgaW5wdXRbMF0pOwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2Zsb2F0IChvdXRkYXRhW2kgKyAxXSwgaW5wdXRbMV0pOwotICAgIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICBoYXZlX2RhdGErKzsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVybGVhdmVfMmNoKQotewotICBHc3RFbGVtZW50ICpxdWV1ZTsKLSAgR3N0UGFkICpzaW5rMCwgKnNpbmsxLCAqc3JjLCAqdG1wOwotICBHc3RDYXBzICpjYXBzOwotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqaW5idWY7Ci0gIGdmbG9hdCAqaW5kYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBteXNyY3BhZHMgPSBnX25ldzAgKEdzdFBhZCAqLCAyKTsKLQotICBoYXZlX2RhdGEgPSAwOwotCi0gIGludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpbnRlcmxlYXZlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbnRlcmxlYXZlICE9IE5VTEwpOwotCi0gIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCAicXVldWUiKTsKLSAgZmFpbF91bmxlc3MgKHF1ZXVlICE9IE5VTEwpOwotCi0gIHNpbmswID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoc2luazAgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKEdTVF9PQkpFQ1RfTkFNRSAoc2luazApLCAic2lua18wIik7Ci0KLSAgc2luazEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rMSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX09CSkVDVF9OQU1FIChzaW5rMSksICJzaW5rXzEiKTsKLQotICBteXNyY3BhZHNbMF0gPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjMCIpOwotICBmYWlsX3VubGVzcyAobXlzcmNwYWRzWzBdICE9IE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQ0FQU180OGtoeik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWRzWzBdLCBUUlVFKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50c19pbnRlcmxlYXZlIChteXNyY3BhZHNbMF0sIGludGVybGVhdmUsIGNhcHMsCi0gICAgICBHU1RfRk9STUFUX1RJTUUsICIwIik7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKG15c3JjcGFkc1swXSk7Ci0KLSAgbXlzcmNwYWRzWzFdID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYzEiKTsKLSAgZmFpbF91bmxlc3MgKG15c3JjcGFkc1sxXSAhPSBOVUxMKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkc1sxXSwgVFJVRSk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHNfaW50ZXJsZWF2ZSAobXlzcmNwYWRzWzFdLCBpbnRlcmxlYXZlLCBjYXBzLAotICAgICAgR1NUX0ZPUk1BVF9USU1FLCAiMSIpOwotICBnc3RfcGFkX3VzZV9maXhlZF9jYXBzIChteXNyY3BhZHNbMV0pOwotCi0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAobXlzcmNwYWRzWzBdLCB0bXApID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0bXAsIHNpbmswKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKG15c3JjcGFkc1sxXSwgc2luazEpID09IEdTVF9QQURfTElOS19PSyk7Ci0KLSAgbXlzaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChteXNpbmtwYWQgIT0gTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChteXNpbmtwYWQsIGludGVybGVhdmVfY2hhaW5fZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoaW50ZXJsZWF2ZSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmMsIG15c2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoaW50ZXJsZWF2ZSwgYnVzKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChpbnRlcmxlYXZlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdWV1ZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBpbnB1dFswXSA9IC0xLjA7Ci0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0ODAwMDsgaSsrKQotICAgIGluZGF0YVtpXSA9IC0xLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWRzWzBdLCBpbmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGlucHV0WzFdID0gMS4wOwotICBpbmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNDgwMDAgKiBzaXplb2YgKGdmbG9hdCkpOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBpbmRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgNDgwMDA7IGkrKykKLSAgICBpbmRhdGFbaV0gPSAxLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWRzWzFdLCBpbmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0ODAwMDsgaSsrKQotICAgIGluZGF0YVtpXSA9IC0xLjA7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmLCAmbWFwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWRzWzBdLCBpbmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0ODAwMDsgaSsrKQotICAgIGluZGF0YVtpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWYsICZtYXApOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZHNbMV0sIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGhhdmVfZGF0YSA9PSAyKTsKLQotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChpbnRlcmxlYXZlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZHNbMF0pOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZHNbMV0pOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNpbmtwYWQpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsIHNpbmswKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luazApOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCBzaW5rMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcmxlYXZlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZ19mcmVlIChteXNyY3BhZHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVybGVhdmVfMmNoXzFlb3MpCi17Ci0gIEdzdEVsZW1lbnQgKnF1ZXVlOwotICBHc3RQYWQgKnNpbmswLCAqc2luazEsICpzcmMsICp0bXA7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdpbnQgaTsKLSAgR3N0QnVmZmVyICppbmJ1ZjsKLSAgZ2Zsb2F0ICppbmRhdGE7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIG15c3JjcGFkcyA9IGdfbmV3MCAoR3N0UGFkICosIDIpOwotCi0gIGhhdmVfZGF0YSA9IDA7Ci0KLSAgaW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImludGVybGVhdmUiLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGludGVybGVhdmUgIT0gTlVMTCk7Ci0KLSAgcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsICJxdWV1ZSIpOwotICBmYWlsX3VubGVzcyAocXVldWUgIT0gTlVMTCk7Ci0KLSAgc2luazAgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rMCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX09CSkVDVF9OQU1FIChzaW5rMCksICJzaW5rXzAiKTsKLQotICBzaW5rMSA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoaW50ZXJsZWF2ZSwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsxICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfT0JKRUNUX05BTUUgKHNpbmsxKSwgInNpbmtfMSIpOwotCi0gIG15c3JjcGFkc1swXSA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMwIik7Ci0gIGZhaWxfdW5sZXNzIChteXNyY3BhZHNbMF0gIT0gTlVMTCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChDQVBTXzQ4a2h6KTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZHNbMF0sIFRSVUUpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzX2ludGVybGVhdmUgKG15c3JjcGFkc1swXSwgaW50ZXJsZWF2ZSwgY2FwcywKLSAgICAgIEdTVF9GT1JNQVRfVElNRSwgIjAiKTsKLSAgZ3N0X3BhZF91c2VfZml4ZWRfY2FwcyAobXlzcmNwYWRzWzBdKTsKLQotICBteXNyY3BhZHNbMV0gPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjMSIpOwotICBmYWlsX3VubGVzcyAobXlzcmNwYWRzWzFdICE9IE5VTEwpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWRzWzFdLCBUUlVFKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50c19pbnRlcmxlYXZlIChteXNyY3BhZHNbMV0sIGludGVybGVhdmUsIGNhcHMsCi0gICAgICBHU1RfRk9STUFUX1RJTUUsICIxIik7Ci0gIGdzdF9wYWRfdXNlX2ZpeGVkX2NhcHMgKG15c3JjcGFkc1sxXSk7Ci0KLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChteXNyY3BhZHNbMF0sIHRtcCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRtcCwgc2luazApID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAobXlzcmNwYWRzWzFdLCBzaW5rMSkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBteXNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmt0ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKG15c2lua3BhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKG15c2lua3BhZCwgaW50ZXJsZWF2ZV9jaGFpbl9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChpbnRlcmxlYXZlLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYywgbXlzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChpbnRlcmxlYXZlLCBidXMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGludGVybGVhdmUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF1ZXVlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGlucHV0WzBdID0gLTEuMDsKLSAgaW5idWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQ4MDAwICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgaW5kYXRhID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDQ4MDAwOyBpKyspCi0gICAgaW5kYXRhW2ldID0gLTEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWYsICZtYXApOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZHNbMF0sIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgaW5wdXRbMV0gPSAxLjA7Ci0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0ODAwMDsgaSsrKQotICAgIGluZGF0YVtpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWYsICZtYXApOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZHNbMV0sIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgaW5wdXRbMF0gPSAwLjA7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWRzWzBdLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0KLSAgaW5wdXRbMV0gPSAxLjA7Ci0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGluZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0ODAwMDsgaSsrKQotICAgIGluZGF0YVtpXSA9IDEuMDsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWYsICZtYXApOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZHNbMV0sIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGhhdmVfZGF0YSA9PSAyKTsKLQotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChpbnRlcmxlYXZlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXVldWUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZHNbMF0pOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNyY3BhZHNbMV0pOwotICBnc3Rfb2JqZWN0X3VucmVmIChteXNpbmtwYWQpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsIHNpbmswKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luazApOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCBzaW5rMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmsxKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcmxlYXZlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocXVldWUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZ19mcmVlIChteXNyY3BhZHMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1zcmNfaGFuZG9mZl9mbG9hdDMyIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0QnVmZmVyICogYnVmZmVyLCBHc3RQYWQgKiBwYWQsCi0gICAgZ2Jvb2xlYW4gaW50ZXJsZWF2ZWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2ludCBuID0gR1BPSU5URVJfVE9fSU5UICh1c2VyX2RhdGEpOwotICBnZmxvYXQgKmRhdGE7Ci0gIGdpbnQgaTsKLSAgZ3NpemUgc2l6ZTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ3VpbnQ2NCBtYXNrOwotICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3M7Ci0KLSAgc3dpdGNoIChuKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgICBwb3MgPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgcG9zID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcG9zID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fSU5WQUxJRDsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgbWFzayA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMSkgPDwgcG9zOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIEdTVF9BVURJT19ORSAoRjMyKSwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgaW50ZXJsZWF2ZWQgPyAiaW50ZXJsZWF2ZWQiIDogIm5vbi1pbnRlcmxlYXZlZCIsCi0gICAgICAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgbWFzaywgInJhdGUiLCBHX1RZUEVfSU5ULCA0ODAwMCwgTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfY2FwcyAocGFkLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHNpemUgPSA0ODAwMCAqIHNpemVvZiAoZ2Zsb2F0KTsKLSAgZGF0YSA9IGdfbWFsbG9jIChzaXplKTsKLSAgZm9yIChpID0gMDsgaSA8IDQ4MDAwOyBpKyspCi0gICAgZGF0YVtpXSA9IChuICUgMiA9PSAwKSA/IC0xLjAgOiAxLjA7Ci0KLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWZmZXIsIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRhdGEsCi0gICAgICAgICAgc2l6ZSwgMCwgc2l6ZSwgZGF0YSwgZ19mcmVlKSk7Ci0KLSAgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPSBHU1RfQlVGRkVSX09GRlNFVF9OT05FOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUX0VORCAoYnVmZmVyKSA9IEdTVF9CVUZGRVJfT0ZGU0VUX05PTkU7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBHU1RfU0VDT05EOwotfQotCi1zdGF0aWMgdm9pZAotc3JjX2hhbmRvZmZfZmxvYXQzMl9pbnRlcmxlYXZlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBHc3RQYWQgKiBwYWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgc3JjX2hhbmRvZmZfZmxvYXQzMiAoZWxlbWVudCwgYnVmZmVyLCBwYWQsIFRSVUUsIHVzZXJfZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zcmNfaGFuZG9mZl9mbG9hdDMyX25vbl9pbnRlcmxlYXZlZCAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwKLSAgICBHc3RQYWQgKiBwYWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgc3JjX2hhbmRvZmZfZmxvYXQzMiAoZWxlbWVudCwgYnVmZmVyLCBwYWQsIEZBTFNFLCB1c2VyX2RhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotc2lua19oYW5kb2ZmX2Zsb2F0MzIgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdFBhZCAqIHBhZCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdmbG9hdCAqZGF0YTsKLSAgR3N0Q2FwcyAqY2FwcywgKmNjYXBzOwotICBnaW50IG4gPSBHUE9JTlRFUl9UT19JTlQgKHVzZXJfZGF0YSk7Ci0gIGd1aW50NjQgbWFzazsKLQotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAoYnVmZmVyKSk7Ci0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hcC5zaXplLCA0ODAwMCAqIDIgKiBzaXplb2YgKGdmbG9hdCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpLCBHU1RfU0VDT05EKTsKLQotICBpZiAobiA9PSAwKSB7Ci0gICAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gcG9zWzJdID0KLSAgICAgICAgeyBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9OT05FIH07Ci0gICAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX21hc2sgKHBvcywgMiwgRkFMU0UsICZtYXNrKTsKLSAgfSBlbHNlIGlmIChuID09IDEpIHsKLSAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NbMl0gPSB7IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQsCi0gICAgICBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVAotICAgIH07Ci0gICAgZ3N0X2F1ZGlvX2NoYW5uZWxfcG9zaXRpb25zX3RvX21hc2sgKHBvcywgMiwgRkFMU0UsICZtYXNrKTsKLSAgfSBlbHNlIGlmIChuID09IDIpIHsKLSAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NbMl0gPSB7IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUiwKLSAgICAgIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfQ0VOVEVSCi0gICAgfTsKLSAgICBnc3RfYXVkaW9fY2hhbm5lbF9wb3NpdGlvbnNfdG9fbWFzayAocG9zLCAyLCBGQUxTRSwgJm1hc2spOwotICB9IGVsc2UgewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICB9Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgR1NUX0FVRElPX05FIChGMzIpLAotICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMiwgInJhdGUiLCBHX1RZUEVfSU5ULCA0ODAwMCwKLSAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAiaW50ZXJsZWF2ZWQiLAotICAgICAgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssIG1hc2ssIE5VTEwpOwotCi0gIGNjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGNhcHMsIGNjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotI2lmZGVmIEhBVkVfVkFMR1JJTkQKLSAgaWYgKCEoUlVOTklOR19PTl9WQUxHUklORCkpCi0jZW5kaWYKLSAgICBmb3IgKGkgPSAwOyBpIDwgNDgwMDAgKiAyOyBpICs9IDIpIHsKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19mbG9hdCAoZGF0YVtpXSwgLTEuMCk7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfZmxvYXQgKGRhdGFbaSArIDFdLCAxLjApOwotICAgIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICBoYXZlX2RhdGErKzsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfaW50ZXJsZWF2ZV8yY2hfcGlwZWxpbmUgKGdib29sZWFuIGludGVybGVhdmVkKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnF1ZXVlLCAqc3JjMSwgKnNyYzIsICppbnRlcmxlYXZlLCAqc2luazsKLSAgR3N0UGFkICpzaW5rcGFkMCwgKnNpbmtwYWQxLCAqdG1wLCAqdG1wMjsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICB2b2lkICpzcmNfaGFuZG9mZl9mbG9hdDMyID0KLSAgICAgIGludGVybGVhdmVkID8gJnNyY19oYW5kb2ZmX2Zsb2F0MzJfaW50ZXJsZWF2ZWQgOgotICAgICAgJnNyY19oYW5kb2ZmX2Zsb2F0MzJfbm9uX2ludGVybGVhdmVkOwotCi0gIGhhdmVfZGF0YSA9IDA7Ci0KLSAgcGlwZWxpbmUgPSAoR3N0RWxlbWVudCAqKSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwpOwotCi0gIHNyYzEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYzEiKTsKLSAgZmFpbF91bmxlc3MgKHNyYzEgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMSwgIm51bS1idWZmZXJzIiwgNCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMSwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzcmMxLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKHNyY19oYW5kb2ZmX2Zsb2F0MzIpLAotICAgICAgR0lOVF9UT19QT0lOVEVSICgwKSk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYzEpOwotCi0gIHNyYzIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYzIiKTsKLSAgZmFpbF91bmxlc3MgKHNyYzIgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMiwgIm51bS1idWZmZXJzIiwgNCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMiwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzcmMyLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKHNyY19oYW5kb2ZmX2Zsb2F0MzIpLAotICAgICAgR0lOVF9UT19QT0lOVEVSICgxKSk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYzIpOwotCi0gIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCAicXVldWUiKTsKLSAgZmFpbF91bmxlc3MgKHF1ZXVlICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBxdWV1ZSk7Ci0KLSAgaW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImludGVybGVhdmUiLCAiaW50ZXJsZWF2ZSIpOwotICBmYWlsX3VubGVzcyAoaW50ZXJsZWF2ZSAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgZ3N0X29iamVjdF9yZWYgKGludGVybGVhdmUpKTsKLQotICBzaW5rcGFkMCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoaW50ZXJsZWF2ZSwgInNpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmtwYWQwICE9IE5VTEwpOwotICB0bXAgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjMSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0bXAsIHNpbmtwYWQwKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotCi0gIHNpbmtwYWQxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZDEgIT0gTlVMTCk7Ci0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMyLCAic3JjIik7Ci0gIHRtcDIgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocXVldWUsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRtcCwgdG1wMikgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wMik7Ci0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0bXAsIHNpbmtwYWQxKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLIChzaW5rX2hhbmRvZmZfZmxvYXQzMiksCi0gICAgICBHSU5UX1RPX1BPSU5URVIgKDApKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc2luayk7Ci0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChpbnRlcmxlYXZlLCAic3JjIik7Ci0gIHRtcDIgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2luaywgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAodG1wLCB0bXAyKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXAyKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGVsaW5lKSwgR1NUX01FU1NBR0VfRU9TLCAtMSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGZhaWxfdW5sZXNzIChoYXZlX2RhdGEgPT0gNCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCBzaW5rcGFkMCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQwKTsKLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAoaW50ZXJsZWF2ZSwgc2lua3BhZDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGludGVybGVhdmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludGVybGVhdmVfMmNoX3BpcGVsaW5lX2ludGVybGVhdmVkKQotewotICB0ZXN0X2ludGVybGVhdmVfMmNoX3BpcGVsaW5lIChUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcmxlYXZlXzJjaF9waXBlbGluZV9ub25faW50ZXJsZWF2ZWQpCi17Ci0gIHRlc3RfaW50ZXJsZWF2ZV8yY2hfcGlwZWxpbmUgKEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcmxlYXZlXzJjaF9waXBlbGluZV9pbnB1dF9jaGFucG9zKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnF1ZXVlLCAqc3JjMSwgKnNyYzIsICppbnRlcmxlYXZlLCAqc2luazsKLSAgR3N0UGFkICpzaW5rcGFkMCwgKnNpbmtwYWQxLCAqdG1wLCAqdG1wMjsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIGhhdmVfZGF0YSA9IDA7Ci0KLSAgcGlwZWxpbmUgPSAoR3N0RWxlbWVudCAqKSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwpOwotCi0gIHNyYzEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYzEiKTsKLSAgZmFpbF91bmxlc3MgKHNyYzEgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMSwgIm51bS1idWZmZXJzIiwgNCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMSwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzcmMxLCAiaGFuZG9mZiIsCi0gICAgICBHX0NBTExCQUNLIChzcmNfaGFuZG9mZl9mbG9hdDMyX2ludGVybGVhdmVkKSwgR0lOVF9UT19QT0lOVEVSICgyKSk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYzEpOwotCi0gIHNyYzIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc3JjIiwgInNyYzIiKTsKLSAgZmFpbF91bmxlc3MgKHNyYzIgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMiwgIm51bS1idWZmZXJzIiwgNCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMiwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzcmMyLCAiaGFuZG9mZiIsCi0gICAgICBHX0NBTExCQUNLIChzcmNfaGFuZG9mZl9mbG9hdDMyX2ludGVybGVhdmVkKSwgR0lOVF9UT19QT0lOVEVSICgzKSk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHNyYzIpOwotCi0gIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCAicXVldWUiKTsKLSAgZmFpbF91bmxlc3MgKHF1ZXVlICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBxdWV1ZSk7Ci0KLSAgaW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImludGVybGVhdmUiLCAiaW50ZXJsZWF2ZSIpOwotICBmYWlsX3VubGVzcyAoaW50ZXJsZWF2ZSAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChpbnRlcmxlYXZlLCAiY2hhbm5lbC1wb3NpdGlvbnMtZnJvbS1pbnB1dCIsIFRSVUUsIE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBnc3Rfb2JqZWN0X3JlZiAoaW50ZXJsZWF2ZSkpOwotCi0gIHNpbmtwYWQwID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZDAgIT0gTlVMTCk7Ci0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMxLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRtcCwgc2lua3BhZDApID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0KLSAgc2lua3BhZDEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rcGFkMSAhPSBOVUxMKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYzIsICJzcmMiKTsKLSAgdG1wMiA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAodG1wLCB0bXAyKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXAyKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRtcCwgc2lua3BhZDEpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKHNpbmtfaGFuZG9mZl9mbG9hdDMyKSwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAoMSkpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGludGVybGVhdmUsICJzcmMiKTsKLSAgdG1wMiA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0bXAsIHRtcDIpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcDIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBtc2cgPSBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGhhdmVfZGF0YSA9PSA0KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsIHNpbmtwYWQwKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZDApOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCBzaW5rcGFkMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaW50ZXJsZWF2ZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcmxlYXZlXzJjaF9waXBlbGluZV9jdXN0b21fY2hhbnBvcykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpxdWV1ZSwgKnNyYzEsICpzcmMyLCAqaW50ZXJsZWF2ZSwgKnNpbms7Ci0gIEdzdFBhZCAqc2lua3BhZDAsICpzaW5rcGFkMSwgKnRtcCwgKnRtcDI7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR1ZhbHVlQXJyYXkgKmFycjsKLSAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLQotICBoYXZlX2RhdGEgPSAwOwotCi0gIHBpcGVsaW5lID0gKEdzdEVsZW1lbnQgKikgZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMKTsKLQotICBzcmMxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMxIik7Ci0gIGZhaWxfdW5sZXNzIChzcmMxICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYzEsICJudW0tYnVmZmVycyIsIDQsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYzEsICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc3JjMSwgImhhbmRvZmYiLAotICAgICAgR19DQUxMQkFDSyAoc3JjX2hhbmRvZmZfZmxvYXQzMl9pbnRlcmxlYXZlZCksIEdJTlRfVE9fUE9JTlRFUiAoMCkpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMxKTsKLQotICBzcmMyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsICJzcmMyIik7Ci0gIGZhaWxfdW5sZXNzIChzcmMyICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYzIsICJudW0tYnVmZmVycyIsIDQsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYzIsICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc3JjMiwgImhhbmRvZmYiLAotICAgICAgR19DQUxMQkFDSyAoc3JjX2hhbmRvZmZfZmxvYXQzMl9pbnRlcmxlYXZlZCksIEdJTlRfVE9fUE9JTlRFUiAoMSkpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMyKTsKLQotICBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgInF1ZXVlIik7Ci0gIGZhaWxfdW5sZXNzIChxdWV1ZSAhPSBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcXVldWUpOwotCi0gIGludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpbnRlcmxlYXZlIiwgImludGVybGVhdmUiKTsKLSAgZmFpbF91bmxlc3MgKGludGVybGVhdmUgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaW50ZXJsZWF2ZSwgImNoYW5uZWwtcG9zaXRpb25zLWZyb20taW5wdXQiLCBGQUxTRSwgTlVMTCk7Ci0gIGFyciA9IGdfdmFsdWVfYXJyYXlfbmV3ICgyKTsKLQotICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdTVF9UWVBFX0FVRElPX0NIQU5ORUxfUE9TSVRJT04pOwotICBnX3ZhbHVlX3NldF9lbnVtICgmdmFsLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9DRU5URVIpOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKCZ2YWwsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfQ0VOVEVSKTsKLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFyciwgJnZhbCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIGdfb2JqZWN0X3NldCAoaW50ZXJsZWF2ZSwgImNoYW5uZWwtcG9zaXRpb25zIiwgYXJyLCBOVUxMKTsKLSAgZ192YWx1ZV9hcnJheV9mcmVlIChhcnIpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBnc3Rfb2JqZWN0X3JlZiAoaW50ZXJsZWF2ZSkpOwotCi0gIHNpbmtwYWQwID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZDAgIT0gTlVMTCk7Ci0gIHRtcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMxLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRtcCwgc2lua3BhZDApID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0KLSAgc2lua3BhZDEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsICJzaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChzaW5rcGFkMSAhPSBOVUxMKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYzIsICJzcmMiKTsKLSAgdG1wMiA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChxdWV1ZSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAodG1wLCB0bXAyKSA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXApOwotICBnc3Rfb2JqZWN0X3VucmVmICh0bXAyKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF1ZXVlLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHRtcCwgc2lua3BhZDEpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAiaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKHNpbmtfaGFuZG9mZl9mbG9hdDMyKSwKLSAgICAgIEdJTlRfVE9fUE9JTlRFUiAoMikpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBzaW5rKTsKLSAgdG1wID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGludGVybGVhdmUsICJzcmMiKTsKLSAgdG1wMiA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rICh0bXAsIHRtcDIpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRtcDIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBtc2cgPSBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBHU1RfTUVTU0FHRV9FT1MsIC0xKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgZmFpbF91bmxlc3MgKGhhdmVfZGF0YSA9PSA0KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKGludGVybGVhdmUsIHNpbmtwYWQwKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZDApOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChpbnRlcmxlYXZlLCBzaW5rcGFkMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoaW50ZXJsZWF2ZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotaW50ZXJsZWF2ZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJpbnRlcmxlYXZlIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCAxODApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY3JlYXRlX2FuZF91bnJlZik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXF1ZXN0X3BhZHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJsZWF2ZV8yY2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJsZWF2ZV8yY2hfMWVvcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcmxlYXZlXzJjaF9waXBlbGluZV9pbnRlcmxlYXZlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcmxlYXZlXzJjaF9waXBlbGluZV9ub25faW50ZXJsZWF2ZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJsZWF2ZV8yY2hfcGlwZWxpbmVfaW5wdXRfY2hhbnBvcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnRlcmxlYXZlXzJjaF9waXBlbGluZV9jdXN0b21fY2hhbnBvcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChpbnRlcmxlYXZlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2pwZWdkZWMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2pwZWdkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZhYzUyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9qcGVnZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiB1bml0IHRlc3QgZm9yIGpwZWdkZWMKLSAqIENvcHlyaWdodCAoQykgPDIwMTA+IFRoaWFnbyBTYW50b3MgPHRoaWFnby5zb3VzYS5zYW50b3NAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IChDKSA8MjAxMj4gTWF0aGlhcyBIYXNzZWxtYW5uIDxtYXRoaWFzQG9wZW5pc211cy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgotI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2dzdGRpc2NvdmVyZXIuaD4KLQotLyogVmVyaWZ5IGpwZWdkZWMgaXMgd29ya2luZyB3aGVuIGV4cGxpY3RseSByZXF1ZXN0ZWQgYnkgYSBwaXBlbGluZS4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2pwZWdkZWNfZXhwbGljaXQpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc291cmNlLCAqZGVjLCAqc2luazsKLSAgR3N0U2FtcGxlICpzYW1wbGU7Ci0KLSAgLyogY29uc3RydWN0IGEgcGlwZWxpbmUgdGhhdCBleHBsaWNpdGx5IHVzZXMganBlZ2RlYyAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOwotICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc3JjIiwgTlVMTCk7Ci0gIGRlYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImpwZWdkZWMiLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImFwcHNpbmsiLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNvdXJjZSwgZGVjLCBzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChzb3VyY2UsIGRlYywgc2luaywgTlVMTCk7Ci0KLSAgLyogcG9pbnQgdGhhdCBwaXBlbGluZSB0byBvdXIgdGVzdCBpbWFnZSAqLwotICB7Ci0gICAgY2hhciAqZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChHU1RfVEVTVF9GSUxFU19QQVRILCAiaW1hZ2UuanBnIiwgTlVMTCk7Ci0gICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc291cmNlKSwgImxvY2F0aW9uIiwgZmlsZW5hbWUsIE5VTEwpOwotICAgIGdfZnJlZSAoZmlsZW5hbWUpOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIHNhbXBsZSA9IGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZSAoR1NUX0FQUF9TSU5LIChzaW5rKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfU0FNUExFIChzYW1wbGUpKTsKLQotICAvKiBkbyBzb21lIGJhc2ljIGNoZWNrcyB0byB2ZXJpZnkgaW1hZ2UgZGVjb2RpbmcgKi8KLSAgewotICAgIEdzdENhcHMgKmRlY29kZWQ7Ci0gICAgR3N0Q2FwcyAqZXhwZWN0ZWQ7Ci0KLSAgICBkZWNvZGVkID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyAoc2FtcGxlKTsKLSAgICBleHBlY3RlZCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsIHdpZHRoPTEyMCwgaGVpZ2h0PTE2MCIpOwotCi0gICAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2Fsd2F5c19jb21wYXRpYmxlIChkZWNvZGVkLCBleHBlY3RlZCkpOwotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGV4cGVjdGVkKTsKLSAgfQotICBnc3Rfc2FtcGxlX3VucmVmIChzYW1wbGUpOwotCi0gIC8qIHdhaXQgZm9yIEVPUyAqLwotICBzYW1wbGUgPSBnc3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUgKEdTVF9BUFBfU0lOSyAoc2luaykpOwotICBmYWlsX3VubGVzcyAoc2FtcGxlID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2FwcF9zaW5rX2lzX2VvcyAoR1NUX0FQUF9TSU5LIChzaW5rKSkpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIFZlcmlmeSBKUEVHIGRpc2NvdmVyeSBpcyB3b3JraW5nLiBSaWdodCBub3cganBlZ2RlYyB3b3VsZCBiZSB1c2VkLAotICogYnV0IEkgaGF2ZSBubyBpZGVhIGhvdyB0byBhY3R1YWxseSB2ZXJpZnkgdGhpcy4gKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2pwZWdkZWNfZGlzY292ZXIpCi17Ci0gIEdzdERpc2NvdmVyZXIgKmRpc2NvOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgY2hhciAqdXJpOwotICBHc3REaXNjb3ZlcmVySW5mbyAqaW5mbzsKLSAgR3N0RGlzY292ZXJlclZpZGVvSW5mbyAqdmlkZW87Ci0KLSAgZGlzY28gPSBnc3RfZGlzY292ZXJlcl9uZXcgKDUgKiBHU1RfU0VDT05ELCAmZXJyb3IpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfSVNfRElTQ09WRVJFUiAoZGlzY28pKTsKLSAgZmFpbF91bmxlc3MgKGVycm9yID09IE5VTEwsICIlcyIsIChlcnJvciA/IGVycm9yLT5tZXNzYWdlIDogIiIpKTsKLQotICB7Ci0gICAgR0ZpbGUgKnRlc3RkaXIgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChHU1RfVEVTVF9GSUxFU19QQVRIKTsKLSAgICBHRmlsZSAqdGVzdGZpbGUgPSBnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoICh0ZXN0ZGlyLCAiaW1hZ2UuanBnIik7Ci0gICAgdXJpID0gZ19maWxlX2dldF91cmkgKHRlc3RmaWxlKTsKLSAgICBnX29iamVjdF91bnJlZiAodGVzdGZpbGUpOwotICAgIGdfb2JqZWN0X3VucmVmICh0ZXN0ZGlyKTsKLSAgfQotCi0gIGluZm8gPSBnc3RfZGlzY292ZXJlcl9kaXNjb3Zlcl91cmkgKGRpc2NvLCB1cmksICZlcnJvcik7Ci0gIGZhaWxfdW5sZXNzIChHU1RfSVNfRElTQ09WRVJFUl9JTkZPIChpbmZvKSk7Ci0gIGZhaWxfdW5sZXNzIChlcnJvciA9PSBOVUxMLCAiJXM6ICVzIiwgdXJpLCAoZXJyb3IgPyBlcnJvci0+bWVzc2FnZSA6ICIiKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X2Rpc2NvdmVyZXJfaW5mb19nZXRfdXJpIChpbmZvKSwgdXJpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2Rpc2NvdmVyZXJfaW5mb19nZXRfcmVzdWx0IChpbmZvKSwKLSAgICAgIEdTVF9ESVNDT1ZFUkVSX09LKTsKLQotICB2aWRlbyA9Ci0gICAgICBHU1RfRElTQ09WRVJFUl9WSURFT19JTkZPIChnc3RfZGlzY292ZXJlcl9pbmZvX2dldF9zdHJlYW1faW5mbyAoaW5mbykpOwotICBmYWlsX3VubGVzcyAodmlkZW8gIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9kaXNjb3ZlcmVyX3ZpZGVvX2luZm9faXNfaW1hZ2UgKHZpZGVvKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9kaXNjb3ZlcmVyX3ZpZGVvX2luZm9fZ2V0X3dpZHRoICh2aWRlbyksIDEyMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9kaXNjb3ZlcmVyX3ZpZGVvX2luZm9fZ2V0X2hlaWdodCAodmlkZW8pLCAxNjApOwotCi0gIGdzdF9kaXNjb3ZlcmVyX2luZm9fdW5yZWYgKHZpZGVvKTsKLSAgZ3N0X2Rpc2NvdmVyZXJfaW5mb191bnJlZiAoaW5mbyk7Ci0gIGdfZnJlZSAodXJpKTsKLSAgZ19vYmplY3RfdW5yZWYgKGRpc2NvKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotanBlZ2RlY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJqcGVnZGVjIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2pwZWdkZWNfZXhwbGljaXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfanBlZ2RlY19kaXNjb3Zlcik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChqcGVnZGVjKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2pwZWdlbmMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL2pwZWdlbmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5MWE3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9qcGVnZW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBqcGVnZW5jCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gVGhpYWdvIFNhbnRvcyA8dGhpYWdvLnNvdXNhLnNhbnRvc0Bjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1zdGF0aWMgR3N0UGFkICpteXNpbmtwYWQ7Ci1zdGF0aWMgR3N0UGFkICpteXNyY3BhZDsKLQotI2RlZmluZSBKUEVHX0NBUFNfU1RSSU5HICJpbWFnZS9qcGVnIgotCi0jZGVmaW5lIEpQRUdfQ0FQU19SRVNUUklDVElWRSAiaW1hZ2UvanBlZywgIiBcCi0gICAgIndpZHRoID0gKGludCkgWzEwMCwgMjAwXSwgIiBcCi0gICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgMjUvMSwgIiBcCi0gICAgImV4dHJhcGFyYW1ldGVyID0gKHN0cmluZykgeyBhYmMsIGRlZiB9IgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUganBlZ19zaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEpQRUdfQ0FQU19TVFJJTkcpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGFueV9zaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGpwZWdfcmVzdHJpY3RpdmVfc2lua3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoSlBFR19DQVBTX1JFU1RSSUNUSVZFKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhbnlfc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTX0FOWSk7Ci0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfanBlZ2VuYyAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBzaW5rdGVtcGxhdGUpCi17Ci0gIEdzdEVsZW1lbnQgKmpwZWdlbmM7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfanBlZ2VuYyIpOwotICBqcGVnZW5jID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJqcGVnZW5jIik7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoanBlZ2VuYywgc2lua3RlbXBsYXRlKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoanBlZ2VuYywgJmFueV9zcmN0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgcmV0dXJuIGpwZWdlbmM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX2pwZWdlbmMgKEdzdEVsZW1lbnQgKiBqcGVnZW5jKQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2pwZWdlbmMiKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChqcGVnZW5jLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGpwZWdlbmMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoanBlZ2VuYyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChqcGVnZW5jKTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfdmlkZW9fYnVmZmVyIChHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKmNmOwotICBHc3RFbGVtZW50ICpzaW5rOwotICBHc3RTYW1wbGUgKnNhbXBsZTsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgcGlwZWxpbmUgPQotICAgICAgZ3N0X3BhcnNlX2xhdW5jaAotICAgICAgKCJ2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MSAhIGNhcHNmaWx0ZXIgbmFtZT1jZiAhIGFwcHNpbmsgbmFtZT1zaW5rIiwKLSAgICAgIE5VTEwpOwotICBnX2Fzc2VydCAocGlwZWxpbmUgIT0gTlVMTCk7Ci0KLSAgY2YgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJjZiIpOwotICBzaW5rID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic2luayIpOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGNmKSwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgc2FtcGxlID0gZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlIChHU1RfQVBQX1NJTksgKHNpbmspKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2luayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNmKTsKLQotICBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHNhbXBsZSk7Ci0gIGdzdF9idWZmZXJfcmVmIChidWZmZXIpOwotCi0gIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0KLSAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9qcGVnZW5jX2dldGNhcHMpCi17Ci0gIEdzdEVsZW1lbnQgKmpwZWdlbmM7Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgZnBzX247Ci0gIGdpbnQgZnBzX2Q7Ci0gIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0KLSAgLyogd2UgYXJlIGdvaW5nIHRvIGRvIHNvbWUgZ2V0IGNhcHMgdG8gY29uZmlybSBpdCBkb2Vzbid0IHJldHVybiBub24tc3Vic2V0Ci0gICAqIGNhcHMgKi8KLQotICBqcGVnZW5jID0gc2V0dXBfanBlZ2VuYyAoJmFueV9zaW5rdGVtcGxhdGUpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGpwZWdlbmMsICJzaW5rIik7Ci0gIC8qIHRoaXMgc2hvdWxkIGFzc2VydCBpZiBub24tc3Vic2V0ICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHNpbmtwYWQsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBjbGVhbnVwX2pwZWdlbmMgKGpwZWdlbmMpOwotCi0gIGpwZWdlbmMgPSBzZXR1cF9qcGVnZW5jICgmanBlZ19zaW5rdGVtcGxhdGUpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGpwZWdlbmMsICJzaW5rIik7Ci0gIC8qIHRoaXMgc2hvdWxkIGFzc2VydCBpZiBub24tc3Vic2V0ICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKHNpbmtwYWQsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBjbGVhbnVwX2pwZWdlbmMgKGpwZWdlbmMpOwotCi0gIC8qIG5vdyB1c2UgYSBtb3JlIHJlc3RyaWN0ZWQgb25lIGFuZCBjaGVjayB0aGUgcmVzdWx0aW5nIGNhcHMgKi8KLSAganBlZ2VuYyA9IHNldHVwX2pwZWdlbmMgKCZqcGVnX3Jlc3RyaWN0aXZlX3Npbmt0ZW1wbGF0ZSk7Ci0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoanBlZ2VuYywgInNpbmsiKTsKLSAgLyogdGhpcyBzaG91bGQgYXNzZXJ0IGlmIG5vbi1zdWJzZXQgKi8KLSAgY2FwcyA9IGdzdF9wYWRfcXVlcnlfY2FwcyAoc2lua3BhZCwgTlVMTCk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotCi0gIC8qIGNoZWNrIHRoZSB3aWR0aCAqLwotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJ3aWR0aCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluICh2YWx1ZSkgPT0gMTAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAodmFsdWUpID09IDIwMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAmZnBzX24sCi0gICAgICAgICAgJmZwc19kKSk7Ci0gIGZhaWxfdW5sZXNzIChmcHNfbiA9PSAyNSk7Ci0gIGZhaWxfdW5sZXNzIChmcHNfZCA9PSAxKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBjbGVhbnVwX2pwZWdlbmMgKGpwZWdlbmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfanBlZ2VuY19kaWZmZXJlbnRfY2FwcykKLXsKLSAgR3N0RWxlbWVudCAqanBlZ2VuYzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdENhcHMgKmFsbG93ZWRfY2FwczsKLQotICAvKiBub3cgdXNlIGEgbW9yZSByZXN0cmljdGVkIG9uZSBhbmQgY2hlY2sgdGhlIHJlc3VsdGluZyBjYXBzICovCi0gIGpwZWdlbmMgPSBzZXR1cF9qcGVnZW5jICgmYW55X3Npbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoanBlZ2VuYywgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIHB1c2ggZmlyc3QgYnVmZmVyIHdpdGggODAweDYwMCByZXNvbHV0aW9uICovCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8veC1yYXciLCAid2lkdGgiLCBHX1RZUEVfSU5ULAotICAgICAgODAwLCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgNjAwLCAiZnJhbWVyYXRlIiwKLSAgICAgIEdTVF9UWVBFX0ZSQUNUSU9OLCAxLCAxLCAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIkk0MjAiLCBOVUxMKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGpwZWdlbmMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzICgoYnVmZmVyID0gY3JlYXRlX3ZpZGVvX2J1ZmZlciAoY2FwcykpICE9IE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLQotICAvKiBjaGVjayB0aGUgYWxsb3dlZCBjYXBzIHRvIHNlZSBpZiBhIHNlY29uZCBidWZmZXIgd2l0aCBhIGRpZmZlcmVudAotICAgKiBjYXBzIGNvdWxkIGJlIG5lZ290aWF0ZWQgKi8KLSAgYWxsb3dlZF9jYXBzID0gZ3N0X3BhZF9nZXRfYWxsb3dlZF9jYXBzIChteXNyY3BhZCk7Ci0KLSAgLyogdGhlIGNhcHMgd2Ugd2FudCB0byBuZWdvdGlhdGUgdG8gKi8KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsICJ3aWR0aCIsIEdfVFlQRV9JTlQsCi0gICAgICA2NDAsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCA0ODAsICJmcmFtZXJhdGUiLAotICAgICAgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDEsICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiSTQyMCIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoYWxsb3dlZF9jYXBzLCBjYXBzKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChteXNyY3BhZCwgY2FwcykpOwotCi0gIC8qIHB1c2ggc2Vjb25kIGJ1ZmZlciB3aXRoIDY0MHg0ODAgcmVzb2x1dGlvbiAqLwotICBidWZmZXIgPSBjcmVhdGVfdmlkZW9fYnVmZmVyIChjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGFsbG93ZWRfY2Fwcyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoanBlZ2VuYywgR1NUX1NUQVRFX05VTEwpOwotICBjbGVhbnVwX2pwZWdlbmMgKGpwZWdlbmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1qcGVnZW5jX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImpwZWdlbmMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfanBlZ2VuY19nZXRjYXBzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2pwZWdlbmNfZGlmZmVyZW50X2NhcHMpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoanBlZ2VuYyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvbGV2ZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3ZWExNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9sZXZlbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgbGV2ZWwKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotLyogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoPj0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1zdGF0aWMgR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotI2RlZmluZSBMRVZFTF9DQVBTX1RFTVBMQVRFX1NUUklORyBcCi0gICJhdWRpby94LXJhdywgIiBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpIHsgIkdTVF9BVURJT19ORShTMTYpIiwgIkdTVF9BVURJT19ORShGMzIpIiB9LCAiIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgXAotICAgICJyYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiBcCi0gICAgImNoYW5uZWxzID0gKGludCkgWyAxLCA4IF0iCi0KLS8qIHdlIHVzZSByYXRlID0gMTAwMCBoZXJlIGZvciBlYXN5IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyAqLwotI2RlZmluZSBMRVZFTF9TMTZfQ0FQU19TVFJJTkcgXAotICAiYXVkaW8veC1yYXcsICIgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiR1NUX0FVRElPX05FKFMxNikiLCAiIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgXAotICAgICJyYXRlID0gKGludCkgMTAwMCwgIiBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMiwgIiAgXAotICAgICJjaGFubmVsLW1hc2sgPSAoYml0bWFzaykgMyIKLQotI2RlZmluZSBMRVZFTF9GMzJfQ0FQU19TVFJJTkcgXAotICAiYXVkaW8veC1yYXcsICIgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiR1NUX0FVRElPX05FKEYzMikiLCAiIFwKLSAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgXAotICAgICJyYXRlID0gKGludCkgMTAwMCwgIiBcCi0gICAgImNoYW5uZWxzID0gKGludCkgMiwgIiAgXAotICAgICJjaGFubmVsLW1hc2sgPSAoYml0bWFzaykgMyIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoTEVWRUxfQ0FQU19URU1QTEFURV9TVFJJTkcpCi0gICAgKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKExFVkVMX0NBUFNfVEVNUExBVEVfU1RSSU5HKQotICAgICk7Ci0KLS8qIHRha2VzIG92ZXIgcmVmZXJlbmNlIGZvciBvdXRjYXBzICovCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9sZXZlbCAoY29uc3QgZ2NoYXIgKiBjYXBzX3N0cikKLXsKLSAgR3N0RWxlbWVudCAqbGV2ZWw7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfbGV2ZWwiKTsKLSAgbGV2ZWwgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImxldmVsIik7Ci0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKGxldmVsLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGxldmVsLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGNhcHNfc3RyKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGxldmVsLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgcmV0dXJuIGxldmVsOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9sZXZlbCAoR3N0RWxlbWVudCAqIGxldmVsKQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2xldmVsIik7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAobGV2ZWwpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGxldmVsKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGxldmVsKTsKLX0KLQotLyogY3JlYXRlIGEgMC4xIHNlYyBidWZmZXIgc3RlcmVvIGJ1ZmZlciAqLwotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfczE2X2J1ZmZlciAoZ2ludDE2IHZhbF9sLCBnaW50MTYgdmFsX3IpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgyICogMTAwICogc2l6ZW9mIChnaW50MTYpKTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdpbnQgajsKLSAgZ2ludDE2ICpkYXRhOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgZm9yIChqID0gMDsgaiA8IDEwMDsgKytqKSB7Ci0gICAgKihkYXRhKyspID0gdmFsX2w7Ci0gICAgKihkYXRhKyspID0gdmFsX3I7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikgPSBHX0dVSU5UNjRfQ09OU1RBTlQgKDApOwotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWNyZWF0ZV9mMzJfYnVmZmVyIChnZmxvYXQgdmFsX2wsIGdmbG9hdCB2YWxfcikKLXsKLSAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDIgKiAxMDAgKiBzaXplb2YgKGdmbG9hdCkpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2ludCBqOwotICBnZmxvYXQgKmRhdGE7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGogPSAwOyBqIDwgMTAwOyArK2opIHsKLSAgICAqKGRhdGErKykgPSB2YWxfbDsKLSAgICAqKGRhdGErKykgPSB2YWxfcjsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gIHJldHVybiBidWY7Ci19Ci0KLS8qIHRlc3RzICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlZl9jb3VudHMpCi17Ci0gIEdzdEVsZW1lbnQgKmxldmVsOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICBsZXZlbCA9IHNldHVwX2xldmVsIChMRVZFTF9TMTZfQ0FQU19TVFJJTkcpOwotICBnX29iamVjdF9zZXQgKGxldmVsLCAicG9zdC1tZXNzYWdlcyIsIFRSVUUsCi0gICAgICAiaW50ZXJ2YWwiLCAoZ3VpbnQ2NCkgR1NUX1NFQ09ORCAvIDEwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobGV2ZWwsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgLyogY3JlYXRlIGEgYnVzIHRvIGdldCB0aGUgbGV2ZWwgbWVzc2FnZSBvbiAqLwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBidXMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAyKTsKLQotICAvKiBjcmVhdGUgYSBmYWtlIDAuMSBzZWMgYnVmZmVyIHdpdGggYSBoYWxmLWFtcGxpdHVkZSBibG9jayBzaWduYWwgKi8KLSAgaW5idWZmZXIgPSBjcmVhdGVfczE2X2J1ZmZlciAoMTY1MzYsIDE2NTM2KTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYnV0IGl0IGVuZHMgdXAgYmVpbmcgY29sbGVjdGVkIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QgKi8KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIC0xKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobWVzc2FnZSwgIm1lc3NhZ2UiLCAxKTsKLQotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gR1NUX09CSkVDVCAobGV2ZWwpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VMRU1FTlQpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIC8qIGZsdXNoIGN1cnJlbnQgbWVzc2FnZXMsYW5kIGZ1dHVyZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMgKi8KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0KLSAgLyogbWVzc2FnZSBoYXMgYSByZWYgdG8gdGhlIGVsZW1lbnQgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobGV2ZWwsICJsZXZlbCIsIDIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGxldmVsLCAibGV2ZWwiLCAxKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChsZXZlbCwgTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGxldmVsLCAibGV2ZWwiLCAxKTsKLSAgY2xlYW51cF9sZXZlbCAobGV2ZWwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2VfaXNfdmFsaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmxldmVsOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIEdzdENsb2NrVGltZSBlbmR0aW1lLCB0cywgZHVyYXRpb247Ci0KLSAgbGV2ZWwgPSBzZXR1cF9sZXZlbCAoTEVWRUxfUzE2X0NBUFNfU1RSSU5HKTsKLSAgZ19vYmplY3Rfc2V0IChsZXZlbCwgInBvc3QtbWVzc2FnZXMiLCBUUlVFLAotICAgICAgImludGVydmFsIiwgKGd1aW50NjQpIEdTVF9TRUNPTkQgLyAxMCwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobGV2ZWwsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgLyogY3JlYXRlIGEgYnVzIHRvIGdldCB0aGUgbGV2ZWwgbWVzc2FnZSBvbiAqLwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAobGV2ZWwsIGJ1cyk7Ci0KLSAgLyogY3JlYXRlIGEgZmFrZSAwLjEgc2VjIGJ1ZmZlciB3aXRoIGEgaGFsZi1hbXBsaXR1ZGUgYmxvY2sgc2lnbmFsIGFuZCBwdXNoICovCi0gIGluYnVmZmVyID0gY3JlYXRlX3MxNl9idWZmZXIgKDE2NTM2LCAxNjUzNik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRUxFTUVOVCwgLTEpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMKTsKLSAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSwgImxldmVsIik7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChzdHJ1Y3R1cmUsICJlbmR0aW1lIiwgJmVuZHRpbWUpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0cykpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoc3RydWN0dXJlLCAiZHVyYXRpb24iLCAmZHVyYXRpb24pKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICAvKiBmbHVzaCBjdXJyZW50IG1lc3NhZ2VzLGFuZCBmdXR1cmUgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzICovCi0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX05VTEwpOwotICBjbGVhbnVwX2xldmVsIChsZXZlbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaW50MTYpCi17Ci0gIEdzdEVsZW1lbnQgKmxldmVsOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgaSwgajsKLSAgY29uc3QgR1ZhbHVlICpsaXN0LCAqdmFsdWU7Ci0gIGdkb3VibGUgZEI7Ci0gIGNvbnN0IGdjaGFyICpmaWVsZHNbM10gPSB7ICJybXMiLCAicGVhayIsICJkZWNheSIgfTsKLQotICBsZXZlbCA9IHNldHVwX2xldmVsIChMRVZFTF9TMTZfQ0FQU19TVFJJTkcpOwotICBnX29iamVjdF9zZXQgKGxldmVsLCAicG9zdC1tZXNzYWdlcyIsIFRSVUUsCi0gICAgICAiaW50ZXJ2YWwiLCAoZ3VpbnQ2NCkgR1NUX1NFQ09ORCAvIDEwLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAvKiBjcmVhdGUgYSBidXMgdG8gZ2V0IHRoZSBsZXZlbCBtZXNzYWdlIG9uICovCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChsZXZlbCwgYnVzKTsKLQotICAvKiBjcmVhdGUgYSBmYWtlIDAuMSBzZWMgYnVmZmVyIHdpdGggYSBoYWxmLWFtcGxpdHVkZSBibG9jayBzaWduYWwgKi8KLSAgaW5idWZmZXIgPSBjcmVhdGVfczE2X2J1ZmZlciAoMTY1MzYsIDE2NTM2KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluYnVmZmVyID09IG91dGJ1ZmZlcik7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5ULCAtMSk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotCi0gIC8qIGJsb2NrIHdhdmUgb2YgaGFsZiBhbXBsaXR1ZGUgaGFzIC01Ljk0IGRCIGZvciBybXMsIHBlYWsgYW5kIGRlY2F5ICovCi0gIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgMzsgKytqKSB7Ci0gICAgICBHVmFsdWVBcnJheSAqYXJyOwotCi0gICAgICBsaXN0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRzW2pdKTsKLSAgICAgIGFyciA9IGdfdmFsdWVfZ2V0X2JveGVkIChsaXN0KTsKLSAgICAgIHZhbHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChhcnIsIGkpOwotICAgICAgZEIgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIiVzIGlzICVsZiIsIGZpZWxkc1tqXSwgZEIpOwotICAgICAgZmFpbF9pZiAoZEIgPCAtNi4xKTsKLSAgICAgIGZhaWxfaWYgKGRCID4gLTUuOSk7Ci0gICAgfQotICB9Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgLyogZmx1c2ggY3VycmVudCBtZXNzYWdlcyxhbmQgZnV0dXJlIHN0YXRlIGNoYW5nZSBtZXNzYWdlcyAqLwotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChsZXZlbCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobGV2ZWwsIEdTVF9TVEFURV9OVUxMKTsKLSAgY2xlYW51cF9sZXZlbCAobGV2ZWwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludDE2X3Bhbm5lZCkKLXsKLSAgR3N0RWxlbWVudCAqbGV2ZWw7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBpLCBqOwotICBjb25zdCBHVmFsdWUgKmxpc3QsICp2YWx1ZTsKLSAgZ2RvdWJsZSBkQjsKLSAgY29uc3QgZ2NoYXIgKmZpZWxkc1szXSA9IHsgInJtcyIsICJwZWFrIiwgImRlY2F5IiB9OwotCi0gIGxldmVsID0gc2V0dXBfbGV2ZWwgKExFVkVMX1MxNl9DQVBTX1NUUklORyk7Ci0gIGdfb2JqZWN0X3NldCAobGV2ZWwsICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwKLSAgICAgICJpbnRlcnZhbCIsIChndWludDY0KSBHU1RfU0VDT05EIC8gMzAsIE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGxldmVsLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIC8qIGNyZWF0ZSBhIGJ1cyB0byBnZXQgdGhlIGxldmVsIG1lc3NhZ2Ugb24gKi8KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBidXMpOwotCi0gIC8qIGNyZWF0ZSBhIGZha2UgMC4xIHNlYyBidWZmZXIgd2l0aCBhIGhhbGYtYW1wbGl0dWRlIGJsb2NrIHNpZ25hbCAqLwotICBpbmJ1ZmZlciA9IGNyZWF0ZV9zMTZfYnVmZmVyICgwLCAxNjUzNik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmJ1ZmZlciA9PSBvdXRidWZmZXIpOwotCi0gIC8qIGRvIG11bHRpcGxlIG1lc3NhZ2VzIHBlciBidWZmZXIsIHRvIHZlcmlmeSB0aGF0IHRoZSBpbm5lciBsb29wIGluIGxldmVsCi0gICAqIGFkdmFuY2VzIHRoZSByZWFkLWluZGV4IGNvcnJlY3RseSwgc2VlCi0gICAqIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQxNDQKLSAgICovCi0gIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICBHU1RfREVCVUcgKCJnZXQgbWVzc2FnZSBudW1iZXIgJWQiLCBpKTsKLSAgICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIC0xKTsKLSAgICBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLQotICAgIC8qIHNpbGVuY2UgaGFzIDAgZEIgZm9yIHJtcywgcGVhayBhbmQgZGVjYXkgKi8KLSAgICBmb3IgKGogPSAwOyBqIDwgMzsgKytqKSB7Ci0gICAgICBHVmFsdWVBcnJheSAqYXJyOwotCi0gICAgICBsaXN0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRzW2pdKTsKLSAgICAgIGFyciA9IGdfdmFsdWVfZ2V0X2JveGVkIChsaXN0KTsKLSAgICAgIHZhbHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChhcnIsIDApOwotICAgICAgZEIgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIiVzWzBdIGlzICVsZiIsIGZpZWxkc1tqXSwgZEIpOwotI2lmZGVmIEhBVkVfSVNJTkYKLSAgICAgIGZhaWxfdW5sZXNzIChpc2luZiAoZEIpKTsKLSNlbGlmIGRlZmluZWQgKEhBVkVfRlBDTEFTUykKLSAgICAgIGZhaWxfdW5sZXNzIChmcGNsYXNzIChkQikgPT0gRlBfTklORik7Ci0jZW5kaWYKLSAgICB9Ci0gICAgLyogYmxvY2sgd2F2ZSBvZiBoYWxmIGFtcGxpdHVkZSBoYXMgLTUuOTQgZEIgZm9yIHJtcywgcGVhayBhbmQgZGVjYXkgKi8KLSAgICBmb3IgKGogPSAwOyBqIDwgMzsgKytqKSB7Ci0gICAgICBHVmFsdWVBcnJheSAqYXJyOwotCi0gICAgICBsaXN0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgZmllbGRzW2pdKTsKLSAgICAgIGFyciA9IGdfdmFsdWVfZ2V0X2JveGVkIChsaXN0KTsKLSAgICAgIHZhbHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChhcnIsIDEpOwotICAgICAgZEIgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgIEdTVF9ERUJVRyAoIiVzWzFdIGlzICVsZiIsIGZpZWxkc1tqXSwgZEIpOwotICAgICAgZmFpbF9pZiAoZEIgPCAtNi4xKTsKLSAgICAgIGZhaWxfaWYgKGRCID4gLTUuOSk7Ci0gICAgfQotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgfQotCi0gIC8qIGNsZWFuIHVwICovCi0gIC8qIGZsdXNoIGN1cnJlbnQgbWVzc2FnZXMsYW5kIGZ1dHVyZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMgKi8KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX05VTEwpOwotICBjbGVhbnVwX2xldmVsIChsZXZlbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmxvYXQpCi17Ci0gIEdzdEVsZW1lbnQgKmxldmVsOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgaSwgajsKLSAgY29uc3QgR1ZhbHVlICpsaXN0LCAqdmFsdWU7Ci0gIGdkb3VibGUgZEI7Ci0gIGNvbnN0IGdjaGFyICpmaWVsZHNbM10gPSB7ICJybXMiLCAicGVhayIsICJkZWNheSIgfTsKLQotICBsZXZlbCA9IHNldHVwX2xldmVsIChMRVZFTF9GMzJfQ0FQU19TVFJJTkcpOwotICBnX29iamVjdF9zZXQgKGxldmVsLCAicG9zdC1tZXNzYWdlcyIsIFRSVUUsCi0gICAgICAiaW50ZXJ2YWwiLCAoZ3VpbnQ2NCkgR1NUX1NFQ09ORCAvIDEwLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAvKiBjcmVhdGUgYSBidXMgdG8gZ2V0IHRoZSBsZXZlbCBtZXNzYWdlIG9uICovCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChsZXZlbCwgYnVzKTsKLQotICAvKiBjcmVhdGUgYSBmYWtlIDAuMSBzZWMgYnVmZmVyIHdpdGggYSBoYWxmLWFtcGxpdHVkZSBibG9jayBzaWduYWwgKi8KLSAgaW5idWZmZXIgPSBjcmVhdGVfZjMyX2J1ZmZlciAoMC41LCAwLjUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIC0xKTsKLSAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0KLSAgLyogYmxvY2sgd2F2ZSBvZiBoYWxmIGFtcGxpdHVkZSBoYXMgLTUuOTQgZEIgZm9yIHJtcywgcGVhayBhbmQgZGVjYXkgKi8KLSAgZm9yIChpID0gMDsgaSA8IDI7ICsraSkgewotICAgIGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKLSAgICAgIEdWYWx1ZUFycmF5ICphcnI7Ci0KLSAgICAgIGxpc3QgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZHNbal0pOwotICAgICAgYXJyID0gZ192YWx1ZV9nZXRfYm94ZWQgKGxpc3QpOwotICAgICAgdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFyciwgaSk7Ci0gICAgICBkQiA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHICgiJXMgaXMgJWxmIiwgZmllbGRzW2pdLCBkQik7Ci0gICAgICBmYWlsX2lmIChkQiA8IC02LjEpOwotICAgICAgZmFpbF9pZiAoZEIgPiAtNS45KTsKLSAgICB9Ci0gIH0KLQotICAvKiBjbGVhbiB1cCAqLwotICAvKiBmbHVzaCBjdXJyZW50IG1lc3NhZ2VzLGFuZCBmdXR1cmUgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzICovCi0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX05VTEwpOwotICBjbGVhbnVwX2xldmVsIChsZXZlbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVzc2FnZV9vbl9lb3MpCi17Ci0gIEdzdEVsZW1lbnQgKmxldmVsOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgZ2ludCBpLCBqOwotICBjb25zdCBHVmFsdWUgKmxpc3QsICp2YWx1ZTsKLSAgZ2RvdWJsZSBkQjsKLQotICBsZXZlbCA9IHNldHVwX2xldmVsIChMRVZFTF9TMTZfQ0FQU19TVFJJTkcpOwotICBnX29iamVjdF9zZXQgKGxldmVsLCAicG9zdC1tZXNzYWdlcyIsIFRSVUUsCi0gICAgICAiaW50ZXJ2YWwiLCAoZ3VpbnQ2NCkgR1NUX1NFQ09ORCAvIDUsIE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGxldmVsLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIC8qIGNyZWF0ZSBhIGJ1cyB0byBnZXQgdGhlIGxldmVsIG1lc3NhZ2Ugb24gKi8KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBidXMpOwotCi0gIC8qIGNyZWF0ZSBhIGZha2UgMC4xIHNlYyBidWZmZXIgd2l0aCBhIGhhbGYtYW1wbGl0dWRlIGJsb2NrIHNpZ25hbCAqLwotICBpbmJ1ZmZlciA9IGNyZWF0ZV9zMTZfYnVmZmVyICgxNjUzNiwgMTY1MzYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIDApOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBldmVudCkgPT0gVFJVRSk7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5ULCAwKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpLCAibGV2ZWwiKTsKLQotICAvKiBibG9jayB3YXZlIG9mIGhhbGYgYW1wbGl0dWRlIGhhcyAtNS45NCBkQiBmb3Igcm1zLCBwZWFrIGFuZCBkZWNheSAqLwotICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgY29uc3QgZ2NoYXIgKmZpZWxkc1szXSA9IHsgInJtcyIsICJwZWFrIiwgImRlY2F5IiB9OwotICAgIGZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKLSAgICAgIEdWYWx1ZUFycmF5ICphcnI7Ci0KLSAgICAgIGxpc3QgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCBmaWVsZHNbal0pOwotICAgICAgYXJyID0gZ192YWx1ZV9nZXRfYm94ZWQgKGxpc3QpOwotICAgICAgdmFsdWUgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFyciwgaSk7Ci0gICAgICBkQiA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotICAgICAgR1NUX0RFQlVHICgiJXMgaXMgJWxmIiwgZmllbGRzW2pdLCBkQik7Ci0gICAgICBmYWlsX2lmIChkQiA8IC02LjEpOwotICAgICAgZmFpbF9pZiAoZEIgPiAtNS45KTsKLSAgICB9Ci0gIH0KLQotICAvKiBjbGVhbiB1cCAqLwotICAvKiBmbHVzaCBjdXJyZW50IG1lc3NhZ2VzLGFuZCBmdXR1cmUgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzICovCi0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX05VTEwpOwotICBjbGVhbnVwX2xldmVsIChsZXZlbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWVzc2FnZV9jb3VudCkKLXsKLSAgR3N0RWxlbWVudCAqbGV2ZWw7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gIGxldmVsID0gc2V0dXBfbGV2ZWwgKExFVkVMX1MxNl9DQVBTX1NUUklORyk7Ci0gIGdfb2JqZWN0X3NldCAobGV2ZWwsICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwKLSAgICAgICJpbnRlcnZhbCIsIChndWludDY0KSBHU1RfU0VDT05EIC8gMjAsIE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGxldmVsLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIC8qIGNyZWF0ZSBhIGJ1cyB0byBnZXQgdGhlIGxldmVsIG1lc3NhZ2Ugb24gKi8KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBidXMpOwotCi0gIC8qIGNyZWF0ZSBhIGZha2UgMC4xIHNlYyBidWZmZXIgd2l0aCBhIGhhbGYtYW1wbGl0dWRlIGJsb2NrIHNpZ25hbCAqLwotICBpbmJ1ZmZlciA9IGNyZWF0ZV9zMTZfYnVmZmVyICgxNjUzNiwgMTY1MzYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICAvKiB3ZSBzaG91bGQgZ2V0IHR3byBtZXNzYWdlcyBwZXIgYnVmZmVyICovCi0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRUxFTUVOVCwgLTEpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIC0xKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChsZXZlbCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobGV2ZWwsIEdTVF9TVEFURV9OVUxMKTsKLSAgY2xlYW51cF9sZXZlbCAobGV2ZWwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X21lc3NhZ2VfdGltZXN0YW1wcykKLXsKLSAgR3N0RWxlbWVudCAqbGV2ZWw7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgR3N0Q2xvY2tUaW1lIHRzMSwgZHVyMSwgdHMyOwotCi0gIGxldmVsID0gc2V0dXBfbGV2ZWwgKExFVkVMX1MxNl9DQVBTX1NUUklORyk7Ci0gIGdfb2JqZWN0X3NldCAobGV2ZWwsICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwKLSAgICAgICJpbnRlcnZhbCIsIChndWludDY0KSBHU1RfU0VDT05EIC8gMjAsIE5VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGxldmVsLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIC8qIGNyZWF0ZSBhIGJ1cyB0byBnZXQgdGhlIGxldmVsIG1lc3NhZ2Ugb24gKi8KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBidXMpOwotCi0gIC8qIGNyZWF0ZSBhIGZha2UgMC4xIHNlYyBidWZmZXIgd2l0aCBhIGhhbGYtYW1wbGl0dWRlIGJsb2NrIHNpZ25hbCAqLwotICBpbmJ1ZmZlciA9IGNyZWF0ZV9zMTZfYnVmZmVyICgxNjUzNiwgMTY1MzYpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICAvKiBjaGVjayB0aGF0IHRpbWVzdGFtcCArIGR1cmF0aW9uIGlzIGNvbnRpZ291cyB0byB0aGUgbmV4dCB0aW1lc3RhbXAgKi8KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5ULCAtMSk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICBnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChzdHJ1Y3R1cmUsICJ0aW1lc3RhbXAiLCAmdHMxKTsKLSAgZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoc3RydWN0dXJlLCAiZHVyYXRpb24iLCAmZHVyMSk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIC0xKTsKLSAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0czIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0ICh0czEgKyBkdXIxLCB0czIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKGxldmVsLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChsZXZlbCwgR1NUX1NUQVRFX05VTEwpOwotICBjbGVhbnVwX2xldmVsIChsZXZlbCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLWxldmVsX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImxldmVsIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZl9jb3VudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVzc2FnZV9pc192YWxpZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnQxNik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pbnQxNl9wYW5uZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmxvYXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVzc2FnZV9vbl9lb3MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbWVzc2FnZV9jb3VudCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tZXNzYWdlX3RpbWVzdGFtcHMpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAobGV2ZWwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FkZW11eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FkZW11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2MxMzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thZGVtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0IGZvciBtYXRyb3NrYWRlbXV4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLQotY29uc3QgZ2NoYXIgbWt2X3N1Yl9iYXNlNjRbXSA9Ci0gICAgIkdrWGZvd0VBQUFBQUFBQVVRb0tKYldGMGNtOXphMkVBUW9lQkFrS0ZnUUlZVTRCbkFRQUFBQUFBQWcwUlRadDBBUUFBQUFBQUFJeE4iCi0gICAgInV3RUFBQUFBQUFBU1U2dUVGVW1wWmxPc2lBQUFBQUFBQUFDWVRic0JBQUFBQUFBQUVsT3JoQlpVcm10VHJJZ0FBQUFBQUFBQkV1eWEiCi0gICAgIkFRQUFBQUFBQUJKVHE0UVFRNmR3VTZ5SS8vLy8vLy8vLy8vc21nRUFBQUFBQUFBU1U2dUVIRk83YTFPc2lQLy8vLy8vLy8vL1Ric0IiCi0gICAgIkFBQUFBQUFBRWxPcmhCSlV3MmRUcklnQUFBQUFBQUFCOXhWSnFXWUJBQUFBQUFBQWJuT2trRHlsUVpKbHJMemlRbzgrZ3NyWlZ0VXEiCi0gICAgIjE3R0REMEpBUkltSVFOR1VBQUFBQUFCTmdKOUhVM1J5WldGdFpYSWdjR3gxWjJsdUlIWmxjbk5wYjI0Z01TNDBMalVBVjBHWlIxTjAiCi0gICAgImNtVmhiV1Z5SUUxaGRISnZjMnRoSUcxMWVHVnlBRVJoaUFaZlUwcmNFd2dBRmxTdWF3RUFBQUFBQUFBMHJnRUFBQUFBQUFBcjE0RUIiCi0gICAgImc0RVJjOFdJb1dGOHBZbEVMaWRUYm9sVGRXSjBhWFJzWlFDR2pGTmZWRVZZVkM5VlZFWTRBQjlEdG5VQkFBQUFBQUFBbWVlQ0EraWciCi0gICAgIkFRQUFBQUFBQUEyYmdnZlFvWWVCQUFBQVptOXZvQUVBQUFBQUFBQVVtNElIMEtHT2dRdTRBRHhwUG1KaGNqd3ZhVDZnQVFBQUFBQUEiCi0gICAgIkFBMmJnZ2ZRb1llQkYzQUFZbUY2b0FFQUFBQUFBQUFPbTRJSDBLR0lnU2NRQUdiRHRnQ2dBUUFBQUFBQUFCV2JnZ2ZRb1krQk1zZ0EiCi0gICAgIlBHaytZbUZ5UEM5cFBnQ2dBUUFBQUFBQUFBNmJnZ2ZRb1lpQlBvQUFZdVI2QUJKVXcyY0JBQUFBQUFBQUNuTnpBUUFBQUFBQUFBQT0iOwotCi1zdGF0aWMgdm9pZAotcGFkX2FkZGVkX2NiIChHc3RFbGVtZW50ICogbWF0cm9za2FkZW11eCwgR3N0UGFkICogcGFkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSB1c2VyX2RhdGE7Ci0KLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgImdvdCBuZXcgc291cmNlIHBhZCIpOwotICBnc3RfaGFybmVzc19hZGRfZWxlbWVudF9zcmNfcGFkIChoLCBwYWQpOwotfQotCi1zdGF0aWMgdm9pZAotcHVsbF9hbmRfY2hlY2tfYnVmZmVyIChHc3RIYXJuZXNzICogaCwgR3N0Q2xvY2tUaW1lIHB0cywgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uLAotICAgIGNvbnN0IGdjaGFyICogb3V0cHV0KQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgR3N0QnVmZmVyICpidWY7Ci0KLSAgLyogd2FpdCBmb3IgYnVmZmVyICovCi0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotCi0gIC8qIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIDAtdGVybWluYXRvciBpbiB0aGVyZSAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKSk7Ci0gIEdTVF9NRU1EVU1QICgic3VidGl0bGUgYnVmZmVyIiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgZmFpbF91bmxlc3MgKG1hcC5zaXplID4gMCk7Ci0gIGZhaWxfdW5sZXNzIChtYXAuZGF0YVttYXAuc2l6ZSAtIDFdICE9ICdcMCcpOwotICBpZiAob3V0cHV0ICE9IE5VTEwgJiYgbWVtY21wIChtYXAuZGF0YSwgb3V0cHV0LCBtYXAuc2l6ZSkgIT0gMCkgewotICAgIGdfcHJpbnRlcnIgKCJHb3Q6XG4iKTsKLSAgICBnc3RfdXRpbF9kdW1wX21lbSAobWFwLmRhdGEsIG1hcC5zaXplKTs7Ci0gICAgZ19wcmludGVyciAoIldhbnRlZDpcbiIpOwotICAgIGdzdF91dGlsX2R1bXBfbWVtICgoZ3VpbnQ4ICopIG91dHB1dCwgc3RybGVuIChvdXRwdXQpKTsKLSAgICBnX2Vycm9yICgiRGlkIG5vdCBnZXQgb3V0cHV0IGV4cGVjdGVkLiIpOwotICB9Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKHB0cywgR1NUX0JVRkZFUl9QVFMgKGJ1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGR1cmF0aW9uLCBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdWJfdGVybWluYXRvcikKLXsKLSAgR3N0SGFybmVzcyAqaDsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1Y2hhciAqbWt2X2RhdGE7Ci0gIGdzaXplIG1rdl9zaXplOwotCi0gIGggPSBnc3RfaGFybmVzc19uZXdfd2l0aF9wYWRuYW1lcyAoIm1hdHJvc2thZGVtdXgiLCAic2luayIsIE5VTEwpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGgtPmVsZW1lbnQsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChwYWRfYWRkZWRfY2IpLCBoKTsKLQotICBta3ZfZGF0YSA9IGdfYmFzZTY0X2RlY29kZSAobWt2X3N1Yl9iYXNlNjQsICZta3Zfc2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChta3ZfZGF0YSAhPSBOVUxMKTsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAidmlkZW8veC1tYXRyb3NrYSIpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKG1rdl9kYXRhLCBta3Zfc2l6ZSk7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWYpID0gMDsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaGFybmVzc19wdXNoIChoLCBidWYpLCBHU1RfRkxPV19PSyk7Ci0gIGdzdF9oYXJuZXNzX3B1c2hfZXZlbnQgKGgsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLQotICBwdWxsX2FuZF9jaGVja19idWZmZXIgKGgsIDEgKiBHU1RfU0VDT05ELCAyICogR1NUX1NFQ09ORCwgImZvbyIpOwotICBwdWxsX2FuZF9jaGVja19idWZmZXIgKGgsIDQgKiBHU1RfU0VDT05ELCAyICogR1NUX1NFQ09ORCwgIjxpPmJhcjwvaT4iKTsKLSAgcHVsbF9hbmRfY2hlY2tfYnVmZmVyIChoLCA3ICogR1NUX1NFQ09ORCwgMiAqIEdTVF9TRUNPTkQsICJiYXoiKTsKLSAgcHVsbF9hbmRfY2hlY2tfYnVmZmVyIChoLCAxMSAqIEdTVF9TRUNPTkQsIDIgKiBHU1RfU0VDT05ELCAiZlwzMDNcMjY2Iik7Ci0gIHB1bGxfYW5kX2NoZWNrX2J1ZmZlciAoaCwgMTQgKiBHU1RfU0VDT05ELCAyICogR1NUX1NFQ09ORCwgIjxpPmJhcjwvaT4iKTsKLSAgLyogVGhlIGlucHV0IGlzIGludmFsaWQgVVRGLTggaGVyZSwgd2hhdCBoYXBwZW5zIG1pZ2h0IGRlcGVuZCBvbiBsb2NhbGUgKi8KLSAgcHVsbF9hbmRfY2hlY2tfYnVmZmVyIChoLCAxNyAqIEdTVF9TRUNPTkQsIDIgKiBHU1RfU0VDT05ELCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2hhcm5lc3NfdHJ5X3B1bGwgKGgpID09IE5VTEwpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotbWF0cm9za2FkZW11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJtYXRyb3NrYWRlbXV4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3N1Yl90ZXJtaW5hdG9yKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKG1hdHJvc2thZGVtdXgpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NWMyODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIG1hdHJvc2thbXV4Ci0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gTWljaGFsIEJlbmVzIDxtaWNoYWwuYmVuZXNAeGVyaXMuY3o+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0jZGVmaW5lIEFDM19DQVBTX1NUUklORyAiYXVkaW8veC1hYzMsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAicmF0ZSA9IChpbnQpIDgwMDAiCi0jZGVmaW5lIFZPUkJJU19DQVBTX1NUUklORyAiYXVkaW8veC12b3JiaXMsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmF0ZSA9IChpbnQpIDgwMDAsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmVhbWhlYWRlcj0oYnVmZmVyKTwxMCwgMjAyMCwgMzAzMDMwPiIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoInZpZGVvL3gtbWF0cm9za2E7IGF1ZGlvL3gtbWF0cm9za2EiKSk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3Jjdm9yYmlzdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChWT1JCSVNfQ0FQU19TVFJJTkcpKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY2FjM3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoQUMzX0NBUFNfU1RSSU5HKSk7Ci0KLQotc3RhdGljIEdzdFBhZCAqCi1zZXR1cF9zcmNfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0U3RhdGljUGFkVGVtcGxhdGUgKiB0ZW1wbGF0ZSkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIEdTVF9ERUJVR19PQkpFQ1QgKGVsZW1lbnQsICJzZXR0aW5nIHVwIHNlbmRpbmcgcGFkIik7Ci0gIC8qIHNlbmRpbmcgcGFkICovCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICh0ZW1wbGF0ZSwgInNyYyIpOwotICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBjcmVhdGUgYSBzcmNwYWQiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICBpZiAoIShzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsICJhdWRpb18ldSIpKSkKLSAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCAiYXVkaW9fJXUiKTsKLSAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGdldCBzaW5rIHBhZCBmcm9tICVzIiwKLSAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgLyogcmVmZXJlbmNlcyBhcmUgb3duZWQgYnk6IDEpIHVzLCAyKSBtYXRyb3NrYW11eCwgMykgY29sbGVjdCBwYWRzICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLAotICAgICAgIkNvdWxkIG5vdCBsaW5rIHNvdXJjZSBhbmQgJXMgc2luayBwYWRzIiwgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsgICAvKiBiZWNhdXNlIHdlIGdvdCBpdCBoaWdoZXIgdXAgKi8KLQotICAvKiByZWZlcmVuY2VzIGFyZSBvd25lZCBieTogMSkgbWF0cm9za2FtdXgsIDIpIGNvbGxlY3QgcGFkcyAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzaW5rcGFkLCAic2lua3BhZCIsIDIpOwotCi0gIHJldHVybiBzcmNwYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZWFyZG93bl9zcmNfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIC8qIGNsZWFuIHVwIGZsb2F0aW5nIHNyYyBwYWQgKi8KLSAgaWYgKCEoc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbGVtZW50LCAiYXVkaW9fMCIpKSkKLSAgICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChlbGVtZW50LCAiYXVkaW9fMCIpOwotICAvKiByZWZlcmVuY2VzIGFyZSBvd25lZCBieTogMSkgdXMsIDIpIG1hdHJvc2thbXV4LCAzKSBjb2xsZWN0IHBhZHMgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAzKTsKLSAgc3JjcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoc2lua3BhZCk7Ci0KLSAgZ3N0X3BhZF91bmxpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0KLSAgLyogcmVmZXJlbmNlcyBhcmUgb3duZWQgYnk6IDEpIHVzLCAyKSBtYXRyb3NrYW11eCwgMykgY29sbGVjdCBwYWRzICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICAvKiBvbmUgbW9yZSByZWYgaXMgaGVsZCBieSBlbGVtZW50IGl0c2VsZiAqLwotCi0gIC8qIHBhZCByZWZzIGhlbGQgYnkgYm90aCBjcmVhdG9yIGFuZCB0aGlzIGZ1bmN0aW9uICh0aHJvdWdoIF9nZXRfcGVlcikgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3JjcGFkLCAic3JjcGFkIiwgMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci19Ci0KLXN0YXRpYyBHc3RQYWQgKgotc2V0dXBfc2lua19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsYXRlKQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInNldHRpbmcgdXAgcmVjZWl2aW5nIHBhZCIpOwotICAvKiByZWNlaXZpbmcgcGFkICovCi0gIHNpbmtwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAodGVtcGxhdGUsICJzaW5rIik7Ci0KLSAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBhIHNpbmtwYWQiKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZWxlbWVudCwgInNyYyIpOwotICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCwgIkNvdWxkIG5vdCBnZXQgc291cmNlIHBhZCBmcm9tICVzIiwKLSAgICAgIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X3BhZF9zZXRfY2hhaW5fZnVuY3Rpb24gKHNpbmtwYWQsIGdzdF9jaGVja19jaGFpbl9mdW5jKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgICJDb3VsZCBub3QgbGluayAlcyBzb3VyY2UgYW5kIHNpbmsgcGFkcyIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsgICAgLyogYmVjYXVzZSB3ZSBnb3QgaXQgaGlnaGVyIHVwICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNyY3BhZCwgInNyY3BhZCIsIDIpOwotCi0gIHJldHVybiBzaW5rcGFkOwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd25fc2lua19wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgLyogY2xlYW4gdXAgZmxvYXRpbmcgc2luayBwYWQgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsICJzcmMiKTsKLSAgc2lua3BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHNyY3BhZCk7Ci0gIGdzdF9wYWRfdW5saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotCi0gIC8qIHBhZCByZWZzIGhlbGQgYnkgYm90aCBjcmVhdG9yIGFuZCB0aGlzIGZ1bmN0aW9uICh0aHJvdWdoIF9nZXRfcGFkKSAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgLyogb25lIG1vcmUgcmVmIGlzIGhlbGQgYnkgZWxlbWVudCBpdHNlbGYgKi8KLQotICAvKiBwYWQgcmVmcyBoZWxkIGJ5IGJvdGggY3JlYXRvciBhbmQgdGhpcyBmdW5jdGlvbiAodGhyb3VnaCBfZ2V0X3BlZXIpICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLX0KLQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9tYXRyb3NrYW11eCAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBzcmN0ZW1wbGF0ZSkKLXsKLSAgR3N0RWxlbWVudCAqbWF0cm9za2FtdXg7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfbWF0cm9za2FtdXgiKTsKLSAgbWF0cm9za2FtdXggPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoIm1hdHJvc2thbXV4Iik7Ci0gIGdfb2JqZWN0X3NldCAobWF0cm9za2FtdXgsICJ2ZXJzaW9uIiwgMSwgTlVMTCk7Ci0gIG15c3JjcGFkID0gc2V0dXBfc3JjX3BhZCAobWF0cm9za2FtdXgsIHNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gc2V0dXBfc2lua19wYWQgKG1hdHJvc2thbXV4LCAmc2lua3RlbXBsYXRlKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChtYXRyb3NrYW11eCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIHJldHVybiBtYXRyb3NrYW11eDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfbWF0cm9za2FtdXggKEdzdEVsZW1lbnQgKiBtYXRyb3NrYW11eCkKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9tYXRyb3NrYW11eCIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG1hdHJvc2thbXV4LCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgdGVhcmRvd25fc3JjX3BhZCAobWF0cm9za2FtdXgpOwotICB0ZWFyZG93bl9zaW5rX3BhZCAobWF0cm9za2FtdXgpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAobWF0cm9za2FtdXgpOwotfQotCi1zdGF0aWMgdm9pZAotY2hlY2tfYnVmZmVyX2RhdGEgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKLXsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcikgPT0gZGF0YV9zaXplKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChidWZmZXIsIDAsIGRhdGEsIGRhdGFfc2l6ZSkgPT0gMCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VibWxfaGVhZGVyKQotewotICBHc3RFbGVtZW50ICptYXRyb3NrYW11eDsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0QWRhcHRlciAqYWRhcHRlcjsKLSAgaW50IG51bV9idWZmZXJzOwotICBpbnQgaTsKLSAgZ2ludCBhdmFpbGFibGU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGd1aW50OCBkYXRhW10gPQotICAgICAgeyAweDFhLCAweDQ1LCAweGRmLCAweGEzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotICAgIDB4NDIsIDB4ODIsIDB4ODksIDB4NmQsIDB4NjEsIDB4NzQsIDB4NzIsIDB4NmYsIDB4NzMsIDB4NmIsIDB4NjEsIDB4MDAsCi0gICAgMHg0MiwgMHg4NywgMHg4MSwgMHgwMSwKLSAgICAweDQyLCAweDg1LCAweDgxLCAweDAxCi0gIH07Ci0KLSAgbWF0cm9za2FtdXggPSBzZXR1cF9tYXRyb3NrYW11eCAoJnNyY2FjM3RlbXBsYXRlKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKHNyY2FjM3RlbXBsYXRlLnN0YXRpY19jYXBzLnN0cmluZyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBtYXRyb3NrYW11eCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDEsIDApOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBudW1fYnVmZmVycyA9IGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpOwotICBmYWlsX3VubGVzcyAobnVtX2J1ZmZlcnMgPj0gMSwKLSAgICAgICJleHBlY3RlZCBhdCBsZWFzdCA1IGJ1ZmZlcnMsIGJ1dCBnb3Qgb25seSAlZCIsIG51bV9idWZmZXJzKTsKLQotICBhZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSkgewotICAgIG91dGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOwotICAgIGZhaWxfaWYgKG91dGJ1ZmZlciA9PSBOVUxMKTsKLSAgICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgb3V0YnVmZmVyKTsKLQotICAgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKG91dGJ1ZmZlciwgIm91dGJ1ZmZlciIsIDEpOwotCi0gICAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgb3V0YnVmZmVyKTsKLSAgfQotCi0gIGF2YWlsYWJsZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGZhaWxfdW5sZXNzIChhdmFpbGFibGUgPj0gc2l6ZW9mIChkYXRhKSk7Ci0gIG91dGJ1ZmZlciA9IGdzdF9hZGFwdGVyX3Rha2VfYnVmZmVyIChhZGFwdGVyLCBzaXplb2YgKGRhdGEpKTsKLSAgZ19vYmplY3RfdW5yZWYgKGFkYXB0ZXIpOwotCi0gIGNoZWNrX2J1ZmZlcl9kYXRhIChvdXRidWZmZXIsIGRhdGEsIHNpemVvZiAoZGF0YSkpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotCi0gIGNsZWFudXBfbWF0cm9za2FtdXggKG1hdHJvc2thbXV4KTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZvcmJpc19oZWFkZXIpCi17Ci0gIEdzdEVsZW1lbnQgKm1hdHJvc2thbXV4OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBpbnQgbnVtX2J1ZmZlcnM7Ci0gIGludCBpOwotICBnYm9vbGVhbiB2b3JiaXNfaGVhZGVyX2ZvdW5kID0gRkFMU0U7Ci0gIGd1aW50OCBkYXRhWzEyXSA9Ci0gICAgICB7IDB4NjMsIDB4YTIsIDB4ODksIDB4MDIsIDB4MDEsIDB4MDIsIDB4MTAsIDB4MjAsIDB4MjAsIDB4MzAsIDB4MzAsCi0gICAgMHgzMAotICB9OwotCi0gIG1hdHJvc2thbXV4ID0gc2V0dXBfbWF0cm9za2FtdXggKCZzcmN2b3JiaXN0ZW1wbGF0ZSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChWT1JCSVNfQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgbWF0cm9za2FtdXgsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCAxLCAwKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBudW1fYnVmZmVycyA9IGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fYnVmZmVyczsgKytpKSB7Ci0gICAgZ2ludCBqOwotICAgIGdzaXplIGJ1ZmZlcl9zaXplOwotCi0gICAgb3V0YnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7Ci0gICAgZmFpbF9pZiAob3V0YnVmZmVyID09IE5VTEwpOwotICAgIGJ1ZmZlcl9zaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmZmVyKTsKLSAgICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgb3V0YnVmZmVyKTsKLQotICAgIGlmICghdm9yYmlzX2hlYWRlcl9mb3VuZCAmJiBidWZmZXJfc2l6ZSA+PSBzaXplb2YgKGRhdGEpKSB7Ci0gICAgICBmb3IgKGogPSAwOyBqIDw9IGJ1ZmZlcl9zaXplIC0gc2l6ZW9mIChkYXRhKTsgaisrKSB7Ci0gICAgICAgIGlmIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCBqLCBkYXRhLCBzaXplb2YgKGRhdGEpKSA9PSAwKSB7Ci0gICAgICAgICAgdm9yYmlzX2hlYWRlcl9mb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChvdXRidWZmZXIsICJvdXRidWZmZXIiLCAxKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotICAgIG91dGJ1ZmZlciA9IE5VTEw7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAodm9yYmlzX2hlYWRlcl9mb3VuZCk7Ci0KLSAgY2xlYW51cF9tYXRyb3NrYW11eCAobWF0cm9za2FtdXgpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmxvY2tfZ3JvdXApCi17Ci0gIEdzdEVsZW1lbnQgKm1hdHJvc2thbXV4OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBndWludDggKmluZGF0YTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgaW50IG51bV9idWZmZXJzOwotICBpbnQgaTsKLSAgZ3VpbnQ4IGRhdGEwW10gPSB7IDB4YTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0gICAgMHhhMSwgMHg4NSwKLSAgICAweDgxLCAweDAwLCAweDAxLCAweDAwCi0gIH07Ci0gIGd1aW50OCBkYXRhMVtdID0geyAweDQyIH07Ci0KLSAgbWF0cm9za2FtdXggPSBzZXR1cF9tYXRyb3NrYW11eCAoJnNyY2FjM3RlbXBsYXRlKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFDM19DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBtYXRyb3NrYW11eCwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIEdlbmVyYXRlIHRoZSBoZWFkZXIgKi8KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMSwgMCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpLCBHU1RfRkxPV19PSyk7Ci0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0gICAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dGJ1ZmZlcik7Ci0KLSAgICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChvdXRidWZmZXIsICJvdXRidWZmZXIiLCAxKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotICAgIG91dGJ1ZmZlciA9IE5VTEw7Ci0gIH0KLQotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIC8qIE5vdyBwdXNoIGEgYnVmZmVyICovCi0gIGluZGF0YSA9IGdfbWFsbG9jICgxKTsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChpbmRhdGEsIDEpOwotICBpbmRhdGFbMF0gPSAweDQyOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMTAwMDAwMDsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBudW1fYnVmZmVycyA9IGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpOwotICBmYWlsX3VubGVzcyAobnVtX2J1ZmZlcnMgPj0gMik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0gICAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dGJ1ZmZlcik7Ci0KLSAgICBzd2l0Y2ggKGkpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgY2hlY2tfYnVmZmVyX2RhdGEgKG91dGJ1ZmZlciwgZGF0YTAsIHNpemVvZiAoZGF0YTApKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIGNoZWNrX2J1ZmZlcl9kYXRhIChvdXRidWZmZXIsIGRhdGExLCBzaXplb2YgKGRhdGExKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0YnVmZmVyLCAib3V0YnVmZmVyIiwgMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmZmVyKTsKLSAgICBvdXRidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBjbGVhbnVwX21hdHJvc2thbXV4IChtYXRyb3NrYW11eCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVzZXQpCi17Ci0gIEdzdEVsZW1lbnQgKm1hdHJvc2thbXV4OwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RCdWZmZXIgKm91dGJ1ZmZlcjsKLSAgaW50IG51bV9idWZmZXJzOwotICBpbnQgaTsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBtYXRyb3NrYW11eCA9IHNldHVwX21hdHJvc2thbXV4ICgmc3JjYWMzdGVtcGxhdGUpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoc3JjYWMzdGVtcGxhdGUuc3RhdGljX2NhcHMuc3RyaW5nKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIG1hdHJvc2thbXV4LCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMSwgMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0gIGZhaWxfdW5sZXNzIChudW1fYnVmZmVycyA+PSAxLAotICAgICAgImV4cGVjdGVkIGF0IGxlYXN0IDEgYnVmZmVyLCBidXQgZ290IG9ubHkgJWQiLCBudW1fYnVmZmVycyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobWF0cm9za2FtdXgsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG1hdHJvc2thbXV4LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgMSwgMCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0gIGZhaWxfdW5sZXNzIChudW1fYnVmZmVycyA+PSAyLAotICAgICAgImV4cGVjdGVkIGF0IGxlYXN0IDIgYnVmZmVycywgYnV0IGdvdCBvbmx5ICVkIiwgbnVtX2J1ZmZlcnMpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBudW1fYnVmZmVyczsgKytpKSB7Ci0gICAgb3V0YnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7Ci0gICAgZmFpbF9pZiAob3V0YnVmZmVyID09IE5VTEwpOwotICAgIGJ1ZmZlcnMgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJzLCBvdXRidWZmZXIpOwotCi0gICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0YnVmZmVyLCAib3V0YnVmZmVyIiwgMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmZmVyKTsKLSAgfQotCi0gIGNsZWFudXBfbWF0cm9za2FtdXggKG1hdHJvc2thbXV4KTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9saW5rX3dlYm1tdXhfd2VibV9zaW5rKQotewotICBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgd2VibV9zaW5rdGVtcGxhdGUgPQotICAgICAgR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICAgIEdTVF9QQURfU0lOSywKLSAgICAgIEdTVF9QQURfQUxXQVlTLAotICAgICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vd2VibTsgYXVkaW8vd2VibSIpKTsKLSAgR3N0RWxlbWVudCAqbXV4OwotCi0gIG11eCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgid2VibW11eCIpOwotICBteXNpbmtwYWQgPSBzZXR1cF9zaW5rX3BhZCAobXV4LCAmd2VibV9zaW5rdGVtcGxhdGUpOwotICBmYWlsX3VubGVzcyAobXlzaW5rcGFkICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG11eCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobXV4LCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgdGVhcmRvd25fc2lua19wYWQgKG11eCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChtdXgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1tYXRyb3NrYW11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJtYXRyb3NrYW11eCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lYm1sX2hlYWRlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92b3JiaXNfaGVhZGVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Jsb2NrX2dyb3VwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Jlc2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2xpbmtfd2VibW11eF93ZWJtX3NpbmspOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAobWF0cm9za2FtdXgpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FwYXJzZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvbWF0cm9za2FwYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2VmOGQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL21hdHJvc2thcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgbWF0cm9za2FwYXJzZQotICogQ29weXJpZ2h0IChDKSAyMDExIFRpbS1QaGlsaXBwIE3DvGxsZXIgIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIHZvaWQKLXJ1bl9jaGVja19mb3JfZmlsZSAoY29uc3QgZ2NoYXIgKiBmaWxlX25hbWUsIGdib29sZWFuIHB1c2hfbW9kZSkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OwotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNlcCwgKnNpbmssICptYXRyb3NrYXBhcnNlLCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBnY2hhciAqcGF0aDsKLQotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgcGlwZWxpbmUhIik7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCAiZmlsZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdmaWxlc3JjJyBlbGVtZW50ISIpOwotCi0gIGlmIChwdXNoX21vZGUpIHsKLSAgICBzZXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsICJxdWV1ZSIpOwotICAgIGZhaWxfdW5sZXNzIChzZXAgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ3F1ZXVlJyBlbGVtZW50Iik7Ci0gIH0gZWxzZSB7Ci0gICAgc2VwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCAiaWRlbnRpdHkiKTsKLSAgICBmYWlsX3VubGVzcyAoc2VwICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlICdpZGVudGl0eScgZWxlbWVudCIpOwotICB9Ci0KLSAgbWF0cm9za2FwYXJzZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm1hdHJvc2thcGFyc2UiLCAibWF0cm9za2FwYXJzZSIpOwotICBmYWlsX3VubGVzcyAobWF0cm9za2FwYXJzZSAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSBtYXRyb3NrYXBhcnNlIGVsZW1lbnQiKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAiZmFrZXNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKHNpbmsgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgJ2Zha2VzaW5rJyBlbGVtZW50ISIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBzZXAsIG1hdHJvc2thcGFyc2UsIHNpbmssIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChzcmMsIHNlcCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc2VwLCBtYXRyb3NrYXBhcnNlKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChtYXRyb3NrYXBhcnNlLCBzaW5rKSk7Ci0KLSAgcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9URVNUX0ZJTEVTX1BBVEgsIGZpbGVfbmFtZSwgTlVMTCk7Ci0gIEdTVF9MT0cgKCJyZWFkaW5nIGZpbGUgJyVzJyIsIHBhdGgpOwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgcGF0aCwgTlVMTCk7Ci0KLSAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBpZiAoc3RhdGVfcmV0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpIHsKLSAgICBHU1RfTE9HICgid2FpdGluZyBmb3IgcGlwZWxpbmUgdG8gcmVhY2ggUEFVU0VEIHN0YXRlIik7Ci0gICAgc3RhdGVfcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgLTEpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlX3JldCwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgfQotCi0gIEdTVF9MT0cgKCJQQVVTRUQsIGxldCdzIHBsYXkgYSBsaXR0bGUuLiIpOwotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICBHRXJyb3IgKmVycjsKLSAgICBnY2hhciAqZGJnOwotCi0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1zZyksIGVyciwgZGJnKTsKLSAgICBnX2Vycm9yICgiJXMgKCVzKSIsIGVyci0+bWVzc2FnZSwgZGJnKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZ19mcmVlIChkYmcpOwotICB9Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBnX2ZyZWUgKHBhdGgpOwotfQotCi0jaWYgMAotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfZmlsZV9wdWxsKQotewotICBydW5fY2hlY2tfZm9yX2ZpbGUgKCJwaW5rbm9pc2Utdm9yYmlzLm1rdiIsIFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0jZW5kaWYKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfZmlsZV9wdXNoKQotewotICBydW5fY2hlY2tfZm9yX2ZpbGUgKCJwaW5rbm9pc2Utdm9yYmlzLm1rdiIsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotbWF0cm9za2FwYXJzZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJtYXRyb3NrYXBhcnNlIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSNpZiAwCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9maWxlX3B1bGwpOwotI2VuZGlmCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9maWxlX3B1c2gpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAobWF0cm9za2FwYXJzZSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL21wZWdhdWRpb3BhcnNlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9tcGVnYXVkaW9wYXJzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTQ0ZTk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL21wZWdhdWRpb3BhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgYWFjcGFyc2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQ29udGFjdDogU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSAicGFyc2VyLmgiCi0KLSNkZWZpbmUgU1JDX0NBUFNfVE1QTCAgICJhdWRpby9tcGVnLCBwYXJzZWQ9KGJvb2xlYW4pZmFsc2UsIG1wZWd2ZXJzaW9uPShpbnQpMSIKLSNkZWZpbmUgU0lOS19DQVBTX1RNUEwgICJhdWRpby9tcGVnLCBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZSwgbXBlZ3ZlcnNpb249KGludCkxIgotCi1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNJTktfQ0FQU19UTVBMKQotICAgICk7Ci0KLUdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoU1JDX0NBUFNfVE1QTCkKLSAgICApOwotCi0vKiBzb21lIGRhdGEgKi8KLXN0YXRpYyBndWludDggbXAzX2ZyYW1lWzM4NF0gPSB7Ci0gIDB4ZmYsIDB4ZmIsIDB4OTQsIDB4YzQsIDB4ZmYsIDB4ODMsIDB4YzAsIDB4MDAsCi0gIDB4MDEsIDB4YTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsCi0gIDB4MzQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi19OwotCi1zdGF0aWMgZ3VpbnQ4IGdhcmJhZ2VfZnJhbWVbXSA9IHsKLSAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgotfTsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9ub3JtYWwpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9ub3JtYWwgKG1wM19mcmFtZSwgc2l6ZW9mIChtcDNfZnJhbWUpKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNlX2RyYWluX3NpbmdsZSkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X2RyYWluX3NpbmdsZSAobXAzX2ZyYW1lLCBzaXplb2YgKG1wM19mcmFtZSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfZHJhaW5fZ2FyYmFnZSkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X2RyYWluX2dhcmJhZ2UgKG1wM19mcmFtZSwgc2l6ZW9mIChtcDNfZnJhbWUpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9zcGxpdCkKLXsKLSAgZ3N0X3BhcnNlcl90ZXN0X3NwbGl0IChtcDNfZnJhbWUsIHNpemVvZiAobXAzX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXJzZV9za2lwX2dhcmJhZ2UpCi17Ci0gIGdzdF9wYXJzZXJfdGVzdF9za2lwX2dhcmJhZ2UgKG1wM19mcmFtZSwgc2l6ZW9mIChtcDNfZnJhbWUpLAotICAgICAgZ2FyYmFnZV9mcmFtZSwgc2l6ZW9mIChnYXJiYWdlX2ZyYW1lKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0jZGVmaW5lIHN0cnVjdHVyZV9nZXRfaW50KHMsZikgXAotICAgIChnX3ZhbHVlX2dldF9pbnQoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocyxmKSkpCi0jZGVmaW5lIGZhaWxfdW5sZXNzX3N0cnVjdHVyZV9maWVsZF9pbnRfZXF1YWxzKHMsZmllbGQsbnVtKSBcCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3RydWN0dXJlX2dldF9pbnQocyxmaWVsZCksIG51bSkKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2VfZGV0ZWN0X3N0cmVhbSkKLXsKLSAgR3N0U3RydWN0dXJlICpzOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfcGFyc2VyX3Rlc3RfZ2V0X291dHB1dF9jYXBzIChtcDNfZnJhbWUsIHNpemVvZiAobXAzX2ZyYW1lKSwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgR1NUX0xPRyAoIm1wZWdhdWRpbyBvdXRwdXQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lIChzLCAiYXVkaW8vbXBlZyIpKTsKLSAgZmFpbF91bmxlc3Nfc3RydWN0dXJlX2ZpZWxkX2ludF9lcXVhbHMgKHMsICJtcGVndmVyc2lvbiIsIDEpOwotICBmYWlsX3VubGVzc19zdHJ1Y3R1cmVfZmllbGRfaW50X2VxdWFscyAocywgImxheWVyIiwgMyk7Ci0gIGZhaWxfdW5sZXNzX3N0cnVjdHVyZV9maWVsZF9pbnRfZXF1YWxzIChzLCAiY2hhbm5lbHMiLCAxKTsKLSAgZmFpbF91bmxlc3Nfc3RydWN0dXJlX2ZpZWxkX2ludF9lcXVhbHMgKHMsICJyYXRlIiwgNDgwMDApOwotCi0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi1tcGVnYXVkaW9wYXJzZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJtcGVnYXVkaW9wYXJzZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLQotICAvKiBpbml0IHRlc3QgY29udGV4dCAqLwotICBjdHhfZmFjdG9yeSA9ICJtcGVnYXVkaW9wYXJzZSI7Ci0gIGN0eF9zaW5rX3RlbXBsYXRlID0gJnNpbmt0ZW1wbGF0ZTsKLSAgY3R4X3NyY190ZW1wbGF0ZSA9ICZzcmN0ZW1wbGF0ZTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BhcnNlX25vcm1hbCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9kcmFpbl9zaW5nbGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfZHJhaW5fZ2FyYmFnZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9zcGxpdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYXJzZV9za2lwX2dhcmJhZ2UpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2VfZGV0ZWN0X3N0cmVhbSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLQotLyoKLSAqIFRPRE86Ci0gKiAgIC0gQm90aCBwdXNoLSBhbmQgcHVsbC1tb2RlcyBuZWVkIHRvIGJlIHRlc3RlZAotICogICAgICAqIFB1bGwtbW9kZSAmIEVPUwotICovCi1HU1RfQ0hFQ0tfTUFJTiAobXBlZ2F1ZGlvcGFyc2UpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsYXdkZWMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNmYwMzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsYXdkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKiBHU3RyZWFtZXIgTXVsYXdEZWMgdW5pdCB0ZXN0cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIEdzdFBhZCAqbXlzcmNwYWQsICpteXNpbmtwYWQ7Ci1zdGF0aWMgR3N0RWxlbWVudCAqbXVsYXdkZWMgPSBOVUxMOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikgIiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIDgwMDAsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAibGF5b3V0ID0gKHN0cmluZylpbnRlcmxlYXZlZCIpCi0gICAgKTsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtbXVsYXcsIiAicmF0ZSA9IChpbnQpIDgwMDAsIiAiY2hhbm5lbHMgPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgdm9pZAotbXVsYXdkZWNfc2V0dXAgKHZvaWQpCi17Ci0gIEdzdENhcHMgKnNyY19jYXBzOwotCi0gIHNyY19jYXBzID0KLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1tdWxhdywiICJyYXRlID0gKGludCkgODAwMCwiCi0gICAgICAiY2hhbm5lbHMgPSAoaW50KSAxIik7Ci0KLSAgR1NUX0RFQlVHICgiJXMiLCBfX0ZVTkNUSU9OX18pOwotCi0gIG11bGF3ZGVjID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJtdWxhd2RlYyIpOwotCi0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKG11bGF3ZGVjLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKG11bGF3ZGVjLCAmc2lua3RlbXBsYXRlKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBtdWxhd2RlYywgc3JjX2NhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKHNyY19jYXBzKTsKLX0KLQotc3RhdGljIHZvaWQKLWJ1ZmZlcl91bnJlZiAodm9pZCAqYnVmZmVyLCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gIGdzdF9idWZmZXJfdW5yZWYgKEdTVF9CVUZGRVIgKGJ1ZmZlcikpOwotfQotCi1zdGF0aWMgdm9pZAotbXVsYXdkZWNfdGVhcmRvd24gKHZvaWQpCi17Ci0gIC8qIGZyZWUgZGVjb2RlZCBidWZmZXJzICovCi0gIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCBidWZmZXJfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKG11bGF3ZGVjKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChtdWxhd2RlYyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChtdWxhd2RlYyk7Ci0gIG11bGF3ZGVjID0gTlVMTDsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfb25lX2J1ZmZlcikKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGdpbnQgYnVmX3NpemUgPSA0MDk2OwotICBndWludDggKmRwOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG11bGF3ZGVjLCBHU1RfU1RBVEVfUExBWUlORykgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBjaGFuZ2Ugc3RhdGUgdG8gcGxheWluZyIpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBkcCA9IGdfbWFsbG9jMCAoYnVmX3NpemUpOwotICBnc3RfYnVmZmVyX2FwcGVuZF9tZW1vcnkgKGJ1ZmZlciwKLSAgICAgIGdzdF9tZW1vcnlfbmV3X3dyYXBwZWQgKDAsIGRwLCBidWZfc2l6ZSwgMCwgYnVmX3NpemUsIGRwLCBnX2ZyZWUpKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmZmVyLCAiYnVmZmVyIiwgMSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKEdTVF9CVUZGRVIgKGdfbGlzdF9maXJzdCAoYnVmZmVycyktPmRhdGEpKSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLW11bGF3ZGVjX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIm11bGF3ZGVjIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIm11bGF3ZGVjIik7Ci0KLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIG11bGF3ZGVjX3NldHVwLCBtdWxhd2RlY190ZWFyZG93bik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vbmVfYnVmZmVyKTsKLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChtdWxhd2RlYykKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZW5jLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9tdWxhd2VuYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTdmM2VlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL211bGF3ZW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyogR1N0cmVhbWVyIE11bGF3RW5jIHVuaXQgdGVzdHMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotc3RhdGljIEdzdEVsZW1lbnQgKm11bGF3ZW5jID0gTlVMTDsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtbXVsYXcsIiAicmF0ZSA9IChpbnQpIDgwMDAsIiAiY2hhbm5lbHMgPSAoaW50KSAxIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC1yYXcsIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUgKFMxNikgIiwgIgotICAgICAgICAicmF0ZSA9IChpbnQpIDgwMDAsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAibGF5b3V0ID0gKHN0cmluZylpbnRlcmxlYXZlZCIpCi0gICAgKTsKLQotc3RhdGljIHZvaWQKLW11bGF3ZW5jX3NldHVwICh2b2lkKQotewotICBHc3RDYXBzICpzcmNfY2FwczsKLQotICBzcmNfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsIgotICAgICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FIChTMTYpICIsICIKLSAgICAgICJyYXRlID0gKGludCkgODAwMCwgIgotICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAibGF5b3V0ID0gKHN0cmluZylpbnRlcmxlYXZlZCIpOwotCi0gIEdTVF9ERUJVRyAoIiVzIiwgX19GVU5DVElPTl9fKTsKLQotICBtdWxhd2VuYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgibXVsYXdlbmMiKTsKLQotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChtdWxhd2VuYywgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChtdWxhd2VuYywgJnNpbmt0ZW1wbGF0ZSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgbXVsYXdlbmMsIHNyY19jYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoc3JjX2NhcHMpOwotfQotCi1zdGF0aWMgdm9pZAotYnVmZmVyX3VucmVmICh2b2lkICpidWZmZXIsIHZvaWQgKnVzZXJfZGF0YSkKLXsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoR1NUX0JVRkZFUiAoYnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tdWxhd2VuY190ZWFyZG93biAodm9pZCkKLXsKLSAgLyogZnJlZSBlbmNvZGVkIGJ1ZmZlcnMgKi8KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIGJ1ZmZlcl91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAobXVsYXdlbmMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKG11bGF3ZW5jKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKG11bGF3ZW5jKTsKLSAgbXVsYXdlbmMgPSBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNoZWNrX2Zvcl9tYXhpbXVtX2JpdHJhdGUgKEdzdFBhZCAqIHBhZCwgR3N0RXZlbnQgKiogZXZlbnRwLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGdib29sZWFuICpmb3VuZF9tYXhpbXVtX2JpdHJhdGUgPSAoZ2Jvb2xlYW4gKikgdXNlcl9kYXRhOwotICBHc3RFdmVudCAqZXZlbnQgPSAqZXZlbnRwOwotCi0gIGlmIChldmVudC0+dHlwZSA9PSBHU1RfRVZFTlRfVEFHKSB7Ci0gICAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IE5VTEw7Ci0gICAgZ3VpbnQgdmFsdWUgPSAwOwotICAgIGdzdF9ldmVudF9wYXJzZV90YWcgKGV2ZW50LCAmdGFnbGlzdCk7Ci0KLSAgICBmYWlsX3VubGVzcyAodGFnbGlzdCAhPSBOVUxMKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHRhZ2xpc3QsIEdTVF9UQUdfTUFYSU1VTV9CSVRSQVRFLAotICAgICAgICAgICAgJnZhbHVlKSk7Ci0KLSAgICAvKiBiaXRyYXRlIG5lZWRzIHRvIGJlIGV4YWN0bHkgc2FtcGxlIHJhdGUgKiBjaGFubmVscyAqIDggKi8KLSAgICBmYWlsX3VubGVzcyAodmFsdWUgPT0gODAwMCAqIDEgKiA4KTsKLQotICAgICpmb3VuZF9tYXhpbXVtX2JpdHJhdGUgPSBUUlVFOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X29uZV9idWZmZXIpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBnaW50IGJ1Zl9zaXplID0gNDA5NjsKLSAgZ3VpbnQ4ICpkcDsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChtdWxhd2VuYywgR1NUX1NUQVRFX1BMQVlJTkcpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3QgY2hhbmdlIHN0YXRlIHRvIHBsYXlpbmciKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZHAgPSBnX21hbGxvYzAgKGJ1Zl9zaXplKTsKLSAgZ3N0X2J1ZmZlcl9hcHBlbmRfbWVtb3J5IChidWZmZXIsCi0gICAgICBnc3RfbWVtb3J5X25ld193cmFwcGVkICgwLCBkcCwgYnVmX3NpemUsIDAsIGJ1Zl9zaXplLCBkcCwgZ19mcmVlKSk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZmZlciwgImJ1ZmZlciIsIDEpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChHU1RfQlVGRkVSIChnX2xpc3RfZmlyc3QgKGJ1ZmZlcnMpLT5kYXRhKSkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3RhZ3MpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBnaW50IGJ1Zl9zaXplID0gNDA5NjsKLSAgZ3VpbnQ4ICpkcDsKLSAgZ2Jvb2xlYW4gZm91bmRfbWF4aW11bV9iaXRyYXRlID0gRkFMU0U7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAobXVsYXdlbmMsIEdTVF9TVEFURV9QTEFZSU5HKSA9PQotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IGNoYW5nZSBzdGF0ZSB0byBwbGF5aW5nIik7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcgKCk7Ci0gIGRwID0gZ19tYWxsb2MwIChidWZfc2l6ZSk7Ci0gIGdzdF9idWZmZXJfYXBwZW5kX21lbW9yeSAoYnVmZmVyLAotICAgICAgZ3N0X21lbW9yeV9uZXdfd3JhcHBlZCAoMCwgZHAsIGJ1Zl9zaXplLCAwLCBidWZfc2l6ZSwgZHAsIGdfZnJlZSkpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWZmZXIsICJidWZmZXIiLCAxKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGdzdF9wYWRfc3RpY2t5X2V2ZW50c19mb3JlYWNoIChteXNpbmtwYWQsIGNoZWNrX2Zvcl9tYXhpbXVtX2JpdHJhdGUsCi0gICAgICAmZm91bmRfbWF4aW11bV9iaXRyYXRlKTsKLSAgZmFpbF91bmxlc3MgKGZvdW5kX21heGltdW1fYml0cmF0ZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLW11bGF3ZW5jX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIm11bGF3ZW5jIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoIm11bGF3ZW5jIik7Ci0KLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIG11bGF3ZW5jX3NldHVwLCBtdWxhd2VuY190ZWFyZG93bik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vbmVfYnVmZmVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3RhZ3MpOwotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKG11bGF3ZW5jKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvbXVsdGlmaWxlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdhYmZmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9tdWx0aWZpbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDM5OSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0IGZvciBtdWx0aWZpbGUgcGx1Z2luCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1zdGF0aWMgR0xpc3QgKm1mc19tZXNzYWdlcyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkCi1tZnNfY2hlY2tfbmV4dF9tZXNzYWdlIChjb25zdCBnY2hhciAqIGZpbGVuYW1lKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0gIGNvbnN0IGdjaGFyICptc2dfZmlsZW5hbWU7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotCi0gIGZhaWxfdW5sZXNzIChtZnNfbWVzc2FnZXMgIT0gTlVMTCk7Ci0KLSAgbXNnID0gbWZzX21lc3NhZ2VzLT5kYXRhOwotICBtZnNfbWVzc2FnZXMgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKG1mc19tZXNzYWdlcywgbWZzX21lc3NhZ2VzKTsKLQotICBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtc2cpOwotCi0gIG1zZ19maWxlbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyAoc3RydWN0dXJlLCAiZmlsZW5hbWUiKTsKLQotICBmYWlsX3VubGVzcyAoc3RyY21wIChmaWxlbmFtZSwgbXNnX2ZpbGVuYW1lKSA9PSAwKTsKLQotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLX0KLQotc3RhdGljIHZvaWQKLXJ1bl9waXBlbGluZSAoR3N0RWxlbWVudCAqIHBpcGVsaW5lKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIC0xKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIHdoaWxlICgxKSB7Ci0gICAgbXNnID0KLSAgICAgICAgZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKGJ1cywgR1NUX0NMT0NLX1RJTUVfTk9ORSwKLSAgICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLQotICAgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gICAgaWYgKG1zZykgewotICAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCkgewotICAgICAgICBpZiAoZ3N0X21lc3NhZ2VfaGFzX25hbWUgKG1zZywgIkdzdE11bHRpRmlsZVNpbmsiKSkKLSAgICAgICAgICBtZnNfbWVzc2FnZXMgPSBnX2xpc3RfYXBwZW5kIChtZnNfbWVzc2FnZXMsIG1zZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICAgIH0KLSAgICBicmVhazsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbXVsdGlmaWxlc2lua19rZXlfZnJhbWUpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICptZnM7Ci0gIGludCBpOwotICBjb25zdCBnY2hhciAqdG1wZGlyOwotICBnY2hhciAqbXlfdG1wZGlyOwotICBnY2hhciAqdGVtcGxhdGU7Ci0gIGdjaGFyICptZnNfcGF0dGVybjsKLQotICB0bXBkaXIgPSBnX2dldF90bXBfZGlyICgpOwotICB0ZW1wbGF0ZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHRtcGRpciwgIm11bHRpZmlsZS10ZXN0LVhYWFhYWCIsIE5VTEwpOwotICBteV90bXBkaXIgPSBnX21rZHRlbXAgKHRlbXBsYXRlKTsKLSAgZmFpbF9pZiAobXlfdG1wZGlyID09IE5VTEwpOwotCi0gIHBpcGVsaW5lID0KLSAgICAgIGdzdF9wYXJzZV9sYXVuY2gKLSAgICAgICgidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwICEgdmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0zMjAsaGVpZ2h0PTI0MCAhIG11bHRpZmlsZXNpbmsgbmFtZT1tZnMiLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotICBtZnMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJtZnMiKTsKLSAgZmFpbF9pZiAobWZzID09IE5VTEwpOwotICBtZnNfcGF0dGVybiA9IGdfYnVpbGRfZmlsZW5hbWUgKG15X3RtcGRpciwgIiUwNWQiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAobWZzKSwgImxvY2F0aW9uIiwgbWZzX3BhdHRlcm4sICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwKLSAgICAgIE5VTEwpOwotICBnX29iamVjdF91bnJlZiAobWZzKTsKLSAgcnVuX3BpcGVsaW5lIChwaXBlbGluZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgIGNoYXIgKnM7Ci0KLSAgICBzID0gZ19zdHJkdXBfcHJpbnRmIChtZnNfcGF0dGVybiwgaSk7Ci0gICAgZmFpbF9pZiAoZ19yZW1vdmUgKHMpICE9IDApOwotCi0gICAgbWZzX2NoZWNrX25leHRfbWVzc2FnZSAocyk7Ci0KLSAgICBnX2ZyZWUgKHMpOwotICB9Ci0gIGZhaWxfaWYgKGdfcmVtb3ZlIChteV90bXBkaXIpICE9IDApOwotCi0gIGZhaWxfdW5sZXNzIChtZnNfbWVzc2FnZXMgPT0gTlVMTCk7Ci0gIGdfZnJlZSAobWZzX3BhdHRlcm4pOwotICBnX2ZyZWUgKG15X3RtcGRpcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbXVsdGlmaWxlc2lua19tYXhfZmlsZXMpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICptZnM7Ci0gIGludCBpOwotICBjb25zdCBnY2hhciAqdG1wZGlyOwotICBnY2hhciAqbXlfdG1wZGlyOwotICBnY2hhciAqdGVtcGxhdGU7Ci0gIGdjaGFyICptZnNfcGF0dGVybjsKLQotICB0bXBkaXIgPSBnX2dldF90bXBfZGlyICgpOwotICB0ZW1wbGF0ZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHRtcGRpciwgIm11bHRpZmlsZS10ZXN0LVhYWFhYWCIsIE5VTEwpOwotICBteV90bXBkaXIgPSBnX21rZHRlbXAgKHRlbXBsYXRlKTsKLSAgZmFpbF9pZiAobXlfdG1wZGlyID09IE5VTEwpOwotCi0gIHBpcGVsaW5lID0KLSAgICAgIGdzdF9wYXJzZV9sYXVuY2gKLSAgICAgICgidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwICEgdmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0zMjAsaGVpZ2h0PTI0MCAhIG11bHRpZmlsZXNpbmsgbmFtZT1tZnMiLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotICBtZnMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJtZnMiKTsKLSAgZmFpbF9pZiAobWZzID09IE5VTEwpOwotICBtZnNfcGF0dGVybiA9IGdfYnVpbGRfZmlsZW5hbWUgKG15X3RtcGRpciwgIiUwNWQiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAobWZzKSwgImxvY2F0aW9uIiwgbWZzX3BhdHRlcm4sICJtYXgtZmlsZXMiLCAzLCBOVUxMKTsKLSAgZ19vYmplY3RfdW5yZWYgKG1mcyk7Ci0gIHJ1bl9waXBlbGluZSAocGlwZWxpbmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotICAgIGNoYXIgKnM7Ci0KLSAgICBzID0gZ19zdHJkdXBfcHJpbnRmIChtZnNfcGF0dGVybiwgaSk7Ci0gICAgZmFpbF91bmxlc3MgKGdfcmVtb3ZlIChzKSAhPSAwKTsKLSAgICBnX2ZyZWUgKHMpOwotICB9Ci0gIGZvciAoaSA9IDc7IGkgPCAxMDsgaSsrKSB7Ci0gICAgY2hhciAqczsKLQotICAgIHMgPSBnX3N0cmR1cF9wcmludGYgKG1mc19wYXR0ZXJuLCBpKTsKLSAgICBmYWlsX2lmIChnX3JlbW92ZSAocykgIT0gMCk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotICBmYWlsX2lmIChnX3JlbW92ZSAobXlfdG1wZGlyKSAhPSAwKTsKLQotICBnX2ZyZWUgKG1mc19wYXR0ZXJuKTsKLSAgZ19mcmVlIChteV90bXBkaXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X211bHRpZmlsZXNpbmtfa2V5X3VuaXQpCi17Ci0gIEdzdEVsZW1lbnQgKm1mczsKLSAgaW50IGk7Ci0gIGNvbnN0IGdjaGFyICp0bXBkaXI7Ci0gIGdjaGFyICpteV90bXBkaXI7Ci0gIGdjaGFyICp0ZW1wbGF0ZTsKLSAgZ2NoYXIgKm1mc19wYXR0ZXJuOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0UGFkICpzaW5rOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIHRtcGRpciA9IGdfZ2V0X3RtcF9kaXIgKCk7Ci0gIHRlbXBsYXRlID0gZ19idWlsZF9maWxlbmFtZSAodG1wZGlyLCAibXVsdGlmaWxlLXRlc3QtWFhYWFhYIiwgTlVMTCk7Ci0gIG15X3RtcGRpciA9IGdfbWtkdGVtcCAodGVtcGxhdGUpOwotICBmYWlsX2lmIChteV90bXBkaXIgPT0gTlVMTCk7Ci0KLSAgbWZzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlmaWxlc2luayIsIE5VTEwpOwotICBmYWlsX2lmIChtZnMgPT0gTlVMTCk7Ci0gIG1mc19wYXR0ZXJuID0gZ19idWlsZF9maWxlbmFtZSAobXlfdG1wZGlyLCAiJTA1ZCIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChtZnMpLCAibG9jYXRpb24iLCBtZnNfcGF0dGVybiwgIm5leHQtZmlsZSIsIDMsCi0gICAgICAicG9zdC1tZXNzYWdlcyIsIFRSVUUsIE5VTEwpOwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAobWZzLCBidXMpOwotICBmYWlsX2lmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG1mcywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG1mcywgInNpbmsiKTsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmssIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2luaywgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNCk7Ci0KLSAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsICJmb28iLCA0KTsKLSAgZmFpbF9pZiAoZ3N0X3BhZF9jaGFpbiAoc2luaywgZ3N0X2J1ZmZlcl9jb3B5IChidWYpKSAhPSBHU1RfRkxPV19PSyk7Ci0KLSAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsICJiYXIiLCA0KTsKLSAgZmFpbF9pZiAoZ3N0X3BhZF9jaGFpbiAoc2luaywgZ3N0X2J1ZmZlcl9jb3B5IChidWYpKSAhPSBHU1RfRkxPV19PSyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2VuZF9ldmVudCAoc2luaywKLSAgICAgICAgICBnc3RfdmlkZW9fZXZlbnRfbmV3X2Rvd25zdHJlYW1fZm9yY2Vfa2V5X3VuaXQgKEdTVF9DTE9DS19USU1FX05PTkUsCi0gICAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEdTVF9DTE9DS19USU1FX05PTkUsIFRSVUUsIDEpKSk7Ci0KLSAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsICJiYXoiLCA0KTsKLSAgZmFpbF9pZiAoZ3N0X3BhZF9jaGFpbiAoc2luaywgYnVmKSAhPSBHU1RfRkxPV19PSyk7Ci0KLSAgZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChtZnMsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKG1mcywgTlVMTCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgIGNoYXIgKnM7Ci0gICAgR3N0TWVzc2FnZSAqbXNnOwotCi0gICAgcyA9IGdfc3RyZHVwX3ByaW50ZiAobWZzX3BhdHRlcm4sIGkpOwotICAgIGZhaWxfaWYgKGdfcmVtb3ZlIChzKSAhPSAwKTsKLQotICAgIG1zZyA9IGdzdF9idXNfcG9wX2ZpbHRlcmVkIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQpOwotICAgIGZhaWxfdW5sZXNzIChtc2cgIT0gTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9tZXNzYWdlX2hhc19uYW1lIChtc2csICJHc3RNdWx0aUZpbGVTaW5rIikpOwotICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKHMsCi0gICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcgKGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1zZyksCi0gICAgICAgICAgICAgICAgImZpbGVuYW1lIikpID09IDApOwotCi0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotICBmYWlsX2lmIChnX3JlbW92ZSAobXlfdG1wZGlyKSAhPSAwKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnX2ZyZWUgKG1mc19wYXR0ZXJuKTsKLSAgZ19mcmVlIChteV90bXBkaXIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAobWZzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdWx0aWZpbGVzcmMpCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICptZnM7Ci0gIGludCBpOwotICBjb25zdCBnY2hhciAqdG1wZGlyOwotICBnY2hhciAqbXlfdG1wZGlyOwotICBnY2hhciAqdGVtcGxhdGU7Ci0gIGdjaGFyICptZnNfcGF0dGVybjsKLQotICB0bXBkaXIgPSBnX2dldF90bXBfZGlyICgpOwotICB0ZW1wbGF0ZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHRtcGRpciwgIm11bHRpZmlsZS10ZXN0LVhYWFhYWCIsIE5VTEwpOwotICBteV90bXBkaXIgPSBnX21rZHRlbXAgKHRlbXBsYXRlKTsKLSAgZmFpbF9pZiAobXlfdG1wZGlyID09IE5VTEwpOwotCi0gIHBpcGVsaW5lID0KLSAgICAgIGdzdF9wYXJzZV9sYXVuY2gKLSAgICAgICgidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwICEgdmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0zMjAsaGVpZ2h0PTI0MCAhIG11bHRpZmlsZXNpbmsgbmFtZT1tZnMiLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotICBtZnMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJtZnMiKTsKLSAgZmFpbF9pZiAobWZzID09IE5VTEwpOwotICBtZnNfcGF0dGVybiA9IGdfYnVpbGRfZmlsZW5hbWUgKG15X3RtcGRpciwgIiUwNWQiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAobWZzKSwgImxvY2F0aW9uIiwgbWZzX3BhdHRlcm4sIE5VTEwpOwotICBnX2ZyZWUgKG1mc19wYXR0ZXJuKTsKLSAgZ19vYmplY3RfdW5yZWYgKG1mcyk7Ci0gIHJ1bl9waXBlbGluZSAocGlwZWxpbmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgcGlwZWxpbmUgPQotICAgICAgZ3N0X3BhcnNlX2xhdW5jaAotICAgICAgKCJtdWx0aWZpbGVzcmMgISB2aWRlby94LXJhdyxmb3JtYXQ9KHN0cmluZylJNDIwLHdpZHRoPTMyMCxoZWlnaHQ9MjQwLGZyYW1lcmF0ZT0xMC8xICEgZmFrZXNpbmsiLAotICAgICAgTlVMTCk7Ci0gIGZhaWxfaWYgKHBpcGVsaW5lID09IE5VTEwpOwotICBtZnMgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJtdWx0aWZpbGVzcmMwIik7Ci0gIGZhaWxfaWYgKG1mcyA9PSBOVUxMKTsKLSAgbWZzX3BhdHRlcm4gPSBnX2J1aWxkX2ZpbGVuYW1lIChteV90bXBkaXIsICIlMDVkIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKG1mcyksICJsb2NhdGlvbiIsIG1mc19wYXR0ZXJuLCBOVUxMKTsKLSAgZ19vYmplY3RfdW5yZWYgKG1mcyk7Ci0gIHJ1bl9waXBlbGluZSAocGlwZWxpbmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICBjaGFyICpzOwotCi0gICAgcyA9IGdfc3RyZHVwX3ByaW50ZiAobWZzX3BhdHRlcm4sIGkpOwotICAgIGZhaWxfaWYgKGdfcmVtb3ZlIChzKSAhPSAwKTsKLSAgICBnX2ZyZWUgKHMpOwotICB9Ci0gIGZhaWxfaWYgKGdfcmVtb3ZlIChteV90bXBkaXIpICE9IDApOwotCi0gIGdfZnJlZSAobWZzX3BhdHRlcm4pOwotICBnX2ZyZWUgKG15X3RtcGRpcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi0vKiBtYWtlIHN1cmUgc3RvcF9pbmRleCBpcyBob25vdXJlZCBldmVuIGlmIHRoZSBuZXh0IHRhcmdldCBmaWxlIGV4aXN0cyAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbXVsdGlmaWxlc3JjX3N0b3BfaW5kZXgpCi17Ci0gIEdzdEVsZW1lbnQgKnNyYzsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIGdjaGFyICpmbjsKLQotICBzcmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoIm11bHRpZmlsZXNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjICE9IE5VTEwpOwotCi0gIGZuID0gZ19idWlsZF9maWxlbmFtZSAoR1NUX1RFU1RfRklMRVNfUEFUSCwgImltYWdlLmpwZyIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgZm4sIE5VTEwpOwotICBnX2ZyZWUgKGZuKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgInN0b3AtaW5kZXgiLCA1LCBOVUxMKTsKLQotICBzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWUgKHNyYywgJnNpbmt0ZW1wbGF0ZSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc2lua3BhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rcGFkLCBUUlVFKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYywgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoc3JjLCBOVUxMLCBOVUxMLCAtMSk7Ci0KLSAgLyogYnVzeS1sb29wIGZvciBFT1MgKi8KLSAgZG8gewotICAgIGdfdXNsZWVwIChHX1VTRUNfUEVSX1NFQyAvIDEwKTsKLSAgICBldmVudCA9IGdzdF9wYWRfZ2V0X3N0aWNreV9ldmVudCAoc2lua3BhZCwgR1NUX0VWRU5UX0VPUywgMCk7Ci0gIH0gd2hpbGUgKGV2ZW50ID09IE5VTEwpOwotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICAvKiBSYW5nZSBhcHBlYXJzIHRvIGJlIFsgc3RhcnQsIHN0b3AgXSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgNSArIDEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3JjLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lIChzcmMsICJzcmMiKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHNyYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotbXVsdGlmaWxlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIm11bHRpZmlsZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211bHRpZmlsZXNpbmtfa2V5X2ZyYW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211bHRpZmlsZXNpbmtfbWF4X2ZpbGVzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211bHRpZmlsZXNpbmtfa2V5X3VuaXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbXVsdGlmaWxlc3JjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211bHRpZmlsZXNyY19zdG9wX2luZGV4KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKG11bHRpZmlsZSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9wYXJzZXIuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmZmZWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3BhcnNlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIChhdWRpbykgcGFyc2VyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgImVsZW1lbnRzL3BhcnNlci5oIgotCi0KLS8qIGNvbnRleHQgc3RhdGUgdmFyaWFibGVzICovCi1jb25zdCBnY2hhciAqY3R4X2ZhY3Rvcnk7Ci1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSAqY3R4X3NpbmtfdGVtcGxhdGU7Ci1Hc3RTdGF0aWNQYWRUZW1wbGF0ZSAqY3R4X3NyY190ZW1wbGF0ZTsKLUdzdENhcHMgKmN0eF9pbnB1dF9jYXBzOwotR3N0Q2FwcyAqY3R4X291dHB1dF9jYXBzOwotZ3VpbnQgY3R4X2Rpc2NhcmQgPSAwOwotZGF0YWJsb2IgY3R4X2hlYWRlcnNbTUFYX0hFQURFUlNdID0geyB7TlVMTCwgMH0sIH07Ci0KLWdib29sZWFuIGN0eF9ub19tZXRhZGF0YSA9IEZBTFNFOwotCi0vKiBoZWxwZXIgdmFyaWFibGVzICovCi1HTGlzdCAqY3VycmVudF9idWYgPSBOVUxMOwotCi1Hc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci1ndWludCBkYXRhb2Zmc2V0ID0gMDsKLUdzdENsb2NrVGltZSB0c19jb3VudGVyID0gMDsKLWdpbnQ2NCBvZmZzZXRfY291bnRlciA9IDA7Ci1ndWludCBidWZmZXJfY291bnRlciA9IDA7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50IGRpc2NhcmQ7Ci0gIGd1aW50IGJ1ZmZlcnNfYmVmb3JlX29mZnNldF9za2lwOwotICBndWludCBvZmZzZXRfc2tpcF9hbW91bnQ7Ci0gIGNvbnN0IGd1aW50OCAqZGF0YV90b192ZXJpZnk7Ci0gIGd1aW50IGRhdGFfdG9fdmVyaWZ5X3NpemU7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGdib29sZWFuIG5vX21ldGFkYXRhOwotfSBidWZmZXJfdmVyaWZ5X2RhdGFfczsKLQotLyogdGFrZXMgYSBjb3B5IG9mIHRoZSBwYXNzZWQgYnVmZmVyIGRhdGEgKi8KLXN0YXRpYyBHc3RCdWZmZXIgKgotYnVmZmVyX25ldyAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyX2RhdGEsIGd1aW50IHNpemUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7Ci0gIGlmIChidWZmZXJfZGF0YSkgewotICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyLCAwLCBidWZmZXJfZGF0YSwgc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgZ3VpbnQgaTsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLQotICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICAgIC8qIENyZWF0ZSBhIHJlY29nbml6YWJsZSBwYXR0ZXJuIChsb29wIDB4MDAgLT4gMHhmZikgaW4gdGhlIGRhdGEgYmxvY2sgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbWFwLnNpemU7IGkrKykgewotICAgICAgbWFwLmRhdGFbaV0gPSBpICUgMHgxMDA7Ci0gICAgfQotICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0gIH0KLQotICAvKiBnc3RfYnVmZmVyX3NldF9jYXBzIChidWZmZXIsIEdTVF9QQURfQ0FQUyAoc3JjcGFkKSk7ICovCi0gIEdTVF9CVUZGRVJfT0ZGU0VUIChidWZmZXIpID0gZGF0YW9mZnNldDsKLSAgZGF0YW9mZnNldCArPSBzaXplOwotICByZXR1cm4gYnVmZmVyOwotfQotCi0vKgotICogQWRkcyBidWZmZXIgc2l6ZXMgdG9nZXRoZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1idWZmZXJfY291bnRfc2l6ZSAodm9pZCAqYnVmZmVyLCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gIGd1aW50ICpzdW0gPSAoZ3VpbnQgKikgdXNlcl9kYXRhOwotICAqc3VtICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZmZlcik7Ci19Ci0KLS8qCi0gKiBWZXJpZnkgdGhhdCBnaXZlbiBidWZmZXIgY29udGFpbnMgcHJlZGVmaW5lZCBBRFRTIGZyYW1lLgotICovCi1zdGF0aWMgdm9pZAotYnVmZmVyX3ZlcmlmeV9kYXRhICh2b2lkICpidWZmZXIsIHZvaWQgKnVzZXJfZGF0YSkKLXsKLSAgYnVmZmVyX3ZlcmlmeV9kYXRhX3MgKnZkYXRhOwotCi0gIGlmICghdXNlcl9kYXRhKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgdmRhdGEgPSAoYnVmZmVyX3ZlcmlmeV9kYXRhX3MgKikgdXNlcl9kYXRhOwotCi0gIEdTVF9ERUJVRyAoImRpc2NhcmQ6ICVkIiwgdmRhdGEtPmRpc2NhcmQpOwotICBpZiAodmRhdGEtPmRpc2NhcmQpIHsKLSAgICBidWZmZXJfY291bnRlcisrOwotICAgIGlmIChidWZmZXJfY291bnRlciA9PSB2ZGF0YS0+ZGlzY2FyZCkgewotICAgICAgYnVmZmVyX2NvdW50ZXIgPSAwOwotICAgICAgdmRhdGEtPmRpc2NhcmQgPSAwOwotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmZmVyKSA9PSB2ZGF0YS0+ZGF0YV90b192ZXJpZnlfc2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmZmVyLCAwLCB2ZGF0YS0+ZGF0YV90b192ZXJpZnksCi0gICAgICAgICAgdmRhdGEtPmRhdGFfdG9fdmVyaWZ5X3NpemUpID09IDApOwotCi0gIGlmICh2ZGF0YS0+YnVmZmVyc19iZWZvcmVfb2Zmc2V0X3NraXApIHsKLSAgICAvKiBUaGlzIGlzIGZvciBza2lwcGluZyB0aGUgZ2FyYmFnZSBpbiBzb21lIHRlc3QgY2FzZXMgKi8KLSAgICBpZiAoYnVmZmVyX2NvdW50ZXIgPT0gdmRhdGEtPmJ1ZmZlcnNfYmVmb3JlX29mZnNldF9za2lwKSB7Ci0gICAgICBvZmZzZXRfY291bnRlciArPSB2ZGF0YS0+b2Zmc2V0X3NraXBfYW1vdW50OwotICAgIH0KLSAgfQotICBpZiAoIXZkYXRhLT5ub19tZXRhZGF0YSkgewotICAgIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9PSB0c19jb3VudGVyKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSAhPSAwKTsKLSAgICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPT0gb2Zmc2V0X2NvdW50ZXIpOwotICB9Ci0KLSAgdHNfY291bnRlciArPSBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpOwotICBvZmZzZXRfY291bnRlciArPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWZmZXIpOwotICBidWZmZXJfY291bnRlcisrOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9lbGVtZW50IChjb25zdCBnY2hhciAqIGZhY3RvcnksIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogc2lua190ZW1wbGF0ZSwKLSAgICBHc3RDYXBzICogc2lua19jYXBzLCBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHNyY190ZW1wbGF0ZSwKLSAgICBHc3RDYXBzICogc3JjX2NhcHMpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdzdEJ1cyAqYnVzOwotICBnY2hhciAqY2Fwc19zdHIgPSBOVUxMOwotCi0gIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoZmFjdG9yeSk7Ci0gIHNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChlbGVtZW50LCBzcmNfdGVtcGxhdGUpOwotICBpZiAoc2lua19jYXBzKSB7Ci0gICAgY2Fwc19zdHIgPSBnc3RfY2Fwc190b19zdHJpbmcgKHNpbmtfY2Fwcyk7Ci0gICAgc2lua190ZW1wbGF0ZS0+c3RhdGljX2NhcHMuc3RyaW5nID0gY2Fwc19zdHI7Ci0gIH0KLSAgc2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoZWxlbWVudCwgc2lua190ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAoc3JjcGFkLCBlbGVtZW50LCBzcmNfY2FwcywgR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGVsZW1lbnQsIGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIHRzX2NvdW50ZXIgPSBvZmZzZXRfY291bnRlciA9IGJ1ZmZlcl9jb3VudGVyID0gMDsKLSAgYnVmZmVycyA9IE5VTEw7Ci0gIGdfZnJlZSAoY2Fwc19zdHIpOwotICByZXR1cm4gZWxlbWVudDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfZWxlbWVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIEZyZWUgcGFyc2VkIGJ1ZmZlcnMgKi8KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLQotICBidXMgPSBHU1RfRUxFTUVOVF9CVVMgKGVsZW1lbnQpOwotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGVsZW1lbnQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGVsZW1lbnQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZWxlbWVudCk7Ci19Ci0KLS8qIGluaXRzIGEgc3RhbmRhcmQgdGVzdCAqLwotdm9pZAotZ3N0X3BhcnNlcl90ZXN0X2luaXQgKEdzdFBhcnNlclRlc3QgKiBwdGVzdCwgZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwKLSAgICBndWludCBudW0pCi17Ci0gIC8qIG5lZWQgdGhlc2UgKi8KLSAgZmFpbF91bmxlc3MgKGN0eF9mYWN0b3J5ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoY3R4X3NyY190ZW1wbGF0ZSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGN0eF9zaW5rX3RlbXBsYXRlICE9IE5VTEwpOwotCi0gIC8qIGJhc2ljcyAqLwotICBtZW1zZXQgKHB0ZXN0LCAwLCBzaXplb2YgKCpwdGVzdCkpOwotICBwdGVzdC0+ZmFjdG9yeSA9IGN0eF9mYWN0b3J5OwotICBwdGVzdC0+c2lua190ZW1wbGF0ZSA9IGN0eF9zaW5rX3RlbXBsYXRlOwotICBwdGVzdC0+c3JjX3RlbXBsYXRlID0gY3R4X3NyY190ZW1wbGF0ZTsKLSAgcHRlc3QtPmZyYW1lZCA9IFRSVUU7Ci0gIC8qIGNvdWxkIGJlIE5VTEwgaWYgbm90IHJlbGV2YW50L25lZWRlZCAqLwotICBwdGVzdC0+c3JjX2NhcHMgPSBjdHhfaW5wdXRfY2FwczsKLSAgcHRlc3QtPnNpbmtfY2FwcyA9IGN0eF9vdXRwdXRfY2FwczsKLSAgbWVtY3B5IChwdGVzdC0+aGVhZGVycywgY3R4X2hlYWRlcnMsIHNpemVvZiAocHRlc3QtPmhlYWRlcnMpKTsKLSAgcHRlc3QtPmRpc2NhcmQgPSBjdHhfZGlzY2FyZDsKLSAgLyogc29tZSBkYXRhIHRoYXQgcGxlYXNlcyBjYWxsZXIgKi8KLSAgcHRlc3QtPnNlcmllc1swXS5kYXRhID0gZGF0YTsKLSAgcHRlc3QtPnNlcmllc1swXS5zaXplID0gc2l6ZTsKLSAgcHRlc3QtPnNlcmllc1swXS5udW0gPSBudW07Ci0gIHB0ZXN0LT5zZXJpZXNbMF0uZnBiID0gMTsKLSAgcHRlc3QtPnNlcmllc1sxXS5mcGIgPSAxOwotICBwdGVzdC0+c2VyaWVzWzJdLmZwYiA9IDE7Ci0gIHB0ZXN0LT5ub19tZXRhZGF0YSA9IGN0eF9ub19tZXRhZGF0YTsKLX0KLQotLyoKLSAqIFRlc3QgaWYgdGhlIHBhcnNlciBwdXNoZXMgY2xlYW4gZGF0YSBwcm9wZXJseS4KLSAqLwotdm9pZAotZ3N0X3BhcnNlcl90ZXN0X3J1biAoR3N0UGFyc2VyVGVzdCAqIHRlc3QsIEdzdENhcHMgKiogb3V0X2NhcHMpCi17Ci0gIGJ1ZmZlcl92ZXJpZnlfZGF0YV9zIHZkYXRhID0geyAwLCAwLCAwLCBOVUxMLCAwLCBOVUxMLCBGQUxTRSB9OwotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RCdWZmZXIgKmJ1ZmZlciA9IE5VTEw7Ci0gIEdzdENhcHMgKnNyY19jYXBzOwotICBndWludCBpLCBqLCBrOwotICBndWludCBmcmFtZXMgPSAwLCBzaXplID0gMDsKLQotICBlbGVtZW50ID0gc2V0dXBfZWxlbWVudCAodGVzdC0+ZmFjdG9yeSwgdGVzdC0+c2lua190ZW1wbGF0ZSwgTlVMTCwKLSAgICAgIHRlc3QtPnNyY190ZW1wbGF0ZSwgdGVzdC0+c3JjX2NhcHMpOwotCi0gIC8qIHB1c2ggc29tZSBzZXR1cCBoZWFkZXJzICovCi0gIGZvciAoaiA9IDA7IGogPCBHX05fRUxFTUVOVFMgKHRlc3QtPmhlYWRlcnMpICYmIHRlc3QtPmhlYWRlcnNbal0uZGF0YTsgaisrKSB7Ci0gICAgYnVmZmVyID0gYnVmZmVyX25ldyAodGVzdC0+aGVhZGVyc1tqXS5kYXRhLCB0ZXN0LT5oZWFkZXJzW2pdLnNpemUpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWZmZXIpLCBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICBmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7Ci0gICAgZm9yIChpID0gMDsgaSA8IHRlc3QtPnNlcmllc1tqXS5udW07IGkrKykgewotICAgICAgLyogc2FuaXR5IGVuZm9yY2luZyAqLwotICAgICAgZm9yIChrID0gMDsgayA8IE1BWCAoMSwgdGVzdC0+c2VyaWVzW2pdLmZwYik7IGsrKykgewotICAgICAgICBpZiAoIWspCi0gICAgICAgICAgYnVmZmVyID0gYnVmZmVyX25ldyAodGVzdC0+c2VyaWVzW2pdLmRhdGEsIHRlc3QtPnNlcmllc1tqXS5zaXplKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGJ1ZmZlciwKLSAgICAgICAgICAgICAgYnVmZmVyX25ldyAodGVzdC0+c2VyaWVzW2pdLmRhdGEsIHRlc3QtPnNlcmllc1tqXS5zaXplKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWZmZXIpLCBHU1RfRkxPV19PSyk7Ci0gICAgICBpZiAoaiA9PSAwKQotICAgICAgICB2ZGF0YS5idWZmZXJzX2JlZm9yZV9vZmZzZXRfc2tpcCsrOwotICAgICAgZWxzZSBpZiAoaiA9PSAxKQotICAgICAgICB2ZGF0YS5vZmZzZXRfc2tpcF9hbW91bnQgKz0gdGVzdC0+c2VyaWVzW2pdLnNpemUgKiB0ZXN0LT5zZXJpZXNbal0uZnBiOwotICAgICAgaWYgKGogIT0gMSkgewotICAgICAgICBmcmFtZXMgKz0gdGVzdC0+c2VyaWVzW2pdLmZwYjsKLSAgICAgICAgc2l6ZSArPSB0ZXN0LT5zZXJpZXNbal0uc2l6ZSAqIHRlc3QtPnNlcmllc1tqXS5mcGI7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0KLSAgaWYgKEdfTElLRUxZICh0ZXN0LT5mcmFtZWQpKQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpIC0gdGVzdC0+ZGlzY2FyZCwgZnJhbWVzKTsKLQotICAvKiBpZiBhbGwgZnJhbWVzIGFyZSBpZGVudGljYWwsIGRvIGV4dGVuZGVkIHRlc3QsCi0gICAqIG90aGVyd2lzZSBvbmx5IHZlcmlmeSB0b3RhbCBkYXRhIHNpemUgKi8KLSAgaWYgKHRlc3QtPnNlcmllc1swXS5kYXRhICYmICghdGVzdC0+c2VyaWVzWzJdLnNpemUgfHwKLSAgICAgICAgICAodGVzdC0+c2VyaWVzWzBdLnNpemUgPT0gdGVzdC0+c2VyaWVzWzJdLnNpemUgJiYgdGVzdC0+c2VyaWVzWzJdLmRhdGEKLSAgICAgICAgICAgICAgJiYgIW1lbWNtcCAodGVzdC0+c2VyaWVzWzBdLmRhdGEsIHRlc3QtPnNlcmllc1syXS5kYXRhLAotICAgICAgICAgICAgICAgICAgdGVzdC0+c2VyaWVzWzBdLnNpemUpKSkpIHsKLSAgICB2ZGF0YS5kYXRhX3RvX3ZlcmlmeSA9IHRlc3QtPnNlcmllc1swXS5kYXRhOwotICAgIHZkYXRhLmRhdGFfdG9fdmVyaWZ5X3NpemUgPSB0ZXN0LT5zZXJpZXNbMF0uc2l6ZTsKLSAgICB2ZGF0YS5jYXBzID0gdGVzdC0+c2lua19jYXBzOwotICAgIHZkYXRhLmRpc2NhcmQgPSB0ZXN0LT5kaXNjYXJkOwotICAgIHZkYXRhLm5vX21ldGFkYXRhID0gdGVzdC0+bm9fbWV0YWRhdGE7Ci0gICAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIGJ1ZmZlcl92ZXJpZnlfZGF0YSwgJnZkYXRhKTsKLSAgfSBlbHNlIHsKLSAgICBndWludCBkYXRhc3VtID0gMDsKLQotICAgIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCBidWZmZXJfY291bnRfc2l6ZSwgJmRhdGFzdW0pOwotICAgIHNpemUgLT0gdGVzdC0+ZHJvcHBlZDsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhc3VtLCBzaXplKTsKLSAgfQotCi0gIHNyY19jYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChzaW5rcGFkKTsKLSAgR1NUX0xPRyAoIm91dHB1dCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgc3JjX2NhcHMpOwotCi0gIGlmICh0ZXN0LT5zaW5rX2NhcHMpIHsKLSAgICBHU1RfTE9HICgiJSIgR1NUX1BUUl9GT1JNQVQgIiA9ICUiIEdTVF9QVFJfRk9STUFUICIgPyIsIHNyY19jYXBzLAotICAgICAgICB0ZXN0LT5zaW5rX2NhcHMpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoc3JjX2NhcHMsIHRlc3QtPnNpbmtfY2FwcykpOwotICB9Ci0KLSAgaWYgKG91dF9jYXBzKQotICAgICpvdXRfY2FwcyA9IHNyY19jYXBzOwotICBlbHNlCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY19jYXBzKTsKLQotICBjbGVhbnVwX2VsZW1lbnQgKGVsZW1lbnQpOwotfQotCi0vKgotICogVGVzdCBpZiB0aGUgcGFyc2VyIHB1c2hlcyBjbGVhbiBkYXRhIHByb3Blcmx5LgotICovCi12b2lkCi1nc3RfcGFyc2VyX3Rlc3Rfbm9ybWFsIChndWludDggKiBkYXRhLCBndWludCBzaXplKQotewotICBHc3RQYXJzZXJUZXN0IHB0ZXN0OwotCi0gIGdzdF9wYXJzZXJfdGVzdF9pbml0ICgmcHRlc3QsIGRhdGEsIHNpemUsIDEwKTsKLSAgZ3N0X3BhcnNlcl90ZXN0X3J1biAoJnB0ZXN0LCBOVUxMKTsKLX0KLQotLyoKLSAqIFRlc3QgaWYgcGFyc2VyIGRyYWlucyBpdHMgYnVmZmVycyBwcm9wZXJseS4gRXZlbiBvbmUgc2luZ2xlIGZyYW1lCi0gKiBzaG91bGQgYmUgZHJhaW5lZCBhbmQgcHVzaGVkIGZvcndhcmQgd2hlbiBFT1Mgb2NjdXJzLiBUaGlzIHNpbmdsZSBmcmFtZQotICogY2FzZSBpcyBzcGVjaWFsLCBzaW5jZSBub3JtYWxseSB0aGUgcGFyc2VyIG5lZWRzIG1vcmUgZGF0YSB0byBiZSBzdXJlCi0gKiBhYm91dCBzdHJlYW0gZm9ybWF0LiBCdXQgaXQgc2hvdWxkIHN0aWxsIHB1c2ggdGhlIGZyYW1lIGZvcndhcmQgaW4gRU9TLgotICovCi12b2lkCi1nc3RfcGFyc2VyX3Rlc3RfZHJhaW5fc2luZ2xlIChndWludDggKiBkYXRhLCBndWludCBzaXplKQotewotICBHc3RQYXJzZXJUZXN0IHB0ZXN0OwotCi0gIGdzdF9wYXJzZXJfdGVzdF9pbml0ICgmcHRlc3QsIGRhdGEsIHNpemUsIDEpOwotICBnc3RfcGFyc2VyX3Rlc3RfcnVuICgmcHRlc3QsIE5VTEwpOwotfQotCi0vKgotICogTWFrZSBzdXJlIHRoYXQgcGFyc2VyIGRvZXMgbm90IGRyYWluIGdhcmJhZ2Ugd2hlbiBFT1Mgb2NjdXJzLgotICovCi12b2lkCi1nc3RfcGFyc2VyX3Rlc3RfZHJhaW5fZ2FyYmFnZSAoZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwgZ3VpbnQ4ICogZ2FyYmFnZSwKLSAgICBndWludCBnc2l6ZSkKLXsKLSAgR3N0UGFyc2VyVGVzdCBwdGVzdDsKLQotICAvKiBwcm92aWRlIGVub3VnaCBpbml0aWFsIGZyYW1lcyBzaW5jZSBpdCBtYXkgdGFrZSBzb21lIHBhcnNlcnMgc29tZQotICAgKiB0aW1lIHRvIGJlIGNvbnZpbmNlZCBvZiBwcm9wZXIgc3luYyAqLwotICBnc3RfcGFyc2VyX3Rlc3RfaW5pdCAoJnB0ZXN0LCBkYXRhLCBzaXplLCAxMCk7Ci0gIHB0ZXN0LnNlcmllc1sxXS5kYXRhID0gZ2FyYmFnZTsKLSAgcHRlc3Quc2VyaWVzWzFdLnNpemUgPSBnc2l6ZTsKLSAgcHRlc3Quc2VyaWVzWzFdLm51bSA9IDE7Ci0gIGdzdF9wYXJzZXJfdGVzdF9ydW4gKCZwdGVzdCwgTlVMTCk7Ci19Ci0KLS8qCi0gKiBUZXN0IGlmIHBhcnNlciBzcGxpdHMgYSBidWZmZXIgdGhhdCBjb250YWlucyB0d28gZnJhbWVzIGludG8gdHdvCi0gKiBzZXBhcmF0ZSBidWZmZXJzIHByb3Blcmx5LgotICovCi12b2lkCi1nc3RfcGFyc2VyX3Rlc3Rfc3BsaXQgKGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUpCi17Ci0gIEdzdFBhcnNlclRlc3QgcHRlc3Q7Ci0KLSAgZ3N0X3BhcnNlcl90ZXN0X2luaXQgKCZwdGVzdCwgZGF0YSwgc2l6ZSwgMTApOwotICBwdGVzdC5zZXJpZXNbMF0uZnBiID0gMjsKLSAgZ3N0X3BhcnNlcl90ZXN0X3J1biAoJnB0ZXN0LCBOVUxMKTsKLX0KLQotLyoKLSAqIFRlc3QgaWYgdGhlIHBhcnNlciBza2lwcyBnYXJiYWdlIGJldHdlZW4gZnJhbWVzIHByb3Blcmx5LgotICovCi12b2lkCi1nc3RfcGFyc2VyX3Rlc3Rfc2tpcF9nYXJiYWdlIChndWludDggKiBkYXRhLCBndWludCBzaXplLCBndWludDggKiBnYXJiYWdlLAotICAgIGd1aW50IGdzaXplKQotewotICBHc3RQYXJzZXJUZXN0IHB0ZXN0OwotCi0gIGdzdF9wYXJzZXJfdGVzdF9pbml0ICgmcHRlc3QsIGRhdGEsIHNpemUsIDEwKTsKLSAgcHRlc3Quc2VyaWVzWzFdLmRhdGEgPSBnYXJiYWdlOwotICBwdGVzdC5zZXJpZXNbMV0uc2l6ZSA9IGdzaXplOwotICBwdGVzdC5zZXJpZXNbMV0ubnVtID0gMTsKLSAgcHRlc3Quc2VyaWVzWzJdLmRhdGEgPSBkYXRhOwotICBwdGVzdC5zZXJpZXNbMl0uc2l6ZSA9IHNpemU7Ci0gIHB0ZXN0LnNlcmllc1syXS5udW0gPSAxMDsKLSAgZ3N0X3BhcnNlcl90ZXN0X3J1biAoJnB0ZXN0LCBOVUxMKTsKLX0KLQotLyoKLSAqIFRlc3QgaWYgdGhlIHNyYyBjYXBzIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHN0cmVhbSBmb3JtYXQuCi0gKi8KLXZvaWQKLWdzdF9wYXJzZXJfdGVzdF9vdXRwdXRfY2FwcyAoZ3VpbnQ4ICogZGF0YSwgZ3VpbnQgc2l6ZSwKLSAgICBjb25zdCBnY2hhciAqIGlucHV0X2NhcHMsIGNvbnN0IGdjaGFyICogb3V0cHV0X2NhcHMpCi17Ci0gIEdzdFBhcnNlclRlc3QgcHRlc3Q7Ci0KLSAgZ3N0X3BhcnNlcl90ZXN0X2luaXQgKCZwdGVzdCwgZGF0YSwgc2l6ZSwgMTApOwotICBpZiAoaW5wdXRfY2FwcykgewotICAgIHB0ZXN0LnNyY19jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKGlucHV0X2NhcHMpOwotICAgIGZhaWxfdW5sZXNzIChwdGVzdC5zcmNfY2FwcyAhPSBOVUxMKTsKLSAgfQotICBpZiAob3V0cHV0X2NhcHMpIHsKLSAgICBwdGVzdC5zaW5rX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAob3V0cHV0X2NhcHMpOwotICAgIGZhaWxfdW5sZXNzIChwdGVzdC5zaW5rX2NhcHMgIT0gTlVMTCk7Ci0gIH0KLSAgZ3N0X3BhcnNlcl90ZXN0X3J1biAoJnB0ZXN0LCBOVUxMKTsKLSAgaWYgKHB0ZXN0LnNpbmtfY2FwcykKLSAgICBnc3RfY2Fwc191bnJlZiAocHRlc3Quc2lua19jYXBzKTsKLSAgaWYgKHB0ZXN0LnNyY19jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChwdGVzdC5zcmNfY2Fwcyk7Ci19Ci0KLS8qCi0gKiBUZXN0IGlmIHRoZSBzcmMgY2FwcyBhcmUgc2V0IGFjY29yZGluZyB0byBzdHJlYW0gZm9ybWF0LgotICovCi1Hc3RDYXBzICoKLWdzdF9wYXJzZXJfdGVzdF9nZXRfb3V0cHV0X2NhcHMgKGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsCi0gICAgY29uc3QgZ2NoYXIgKiBpbnB1dF9jYXBzKQotewotICBHc3RQYXJzZXJUZXN0IHB0ZXN0OwotICBHc3RDYXBzICpvdXRfY2FwczsKLQotICBnc3RfcGFyc2VyX3Rlc3RfaW5pdCAoJnB0ZXN0LCBkYXRhLCBzaXplLCAxMCk7Ci0gIGlmIChpbnB1dF9jYXBzKSB7Ci0gICAgcHRlc3Quc3JjX2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoaW5wdXRfY2Fwcyk7Ci0gICAgZmFpbF91bmxlc3MgKHB0ZXN0LnNyY19jYXBzICE9IE5VTEwpOwotICB9Ci0gIGdzdF9wYXJzZXJfdGVzdF9ydW4gKCZwdGVzdCwgJm91dF9jYXBzKTsKLSAgaWYgKHB0ZXN0LnNyY19jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChwdGVzdC5zcmNfY2Fwcyk7Ci0KLSAgcmV0dXJuIG91dF9jYXBzOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcGFyc2VyLmggYi90ZXN0cy9jaGVjay9lbGVtZW50cy9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ4NjdjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIChhdWRpbykgcGFyc2VyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIENvbnRhY3Q6IFN0ZWZhbiBLb3N0IDxzdGVmYW4ua29zdEBub2tpYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jZGVmaW5lIE1BWF9IRUFERVJTIDEwCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBndWludDggICAgICpkYXRhOwotICAgIGd1aW50ICAgICAgIHNpemU7Ci19IGRhdGFibG9iOwotCi0vKiBjb250ZXh0IHN0YXRlIHZhcmlhYmxlczsgdG8gYmUgc2V0IGJ5IHRlc3QgdXNpbmcgdGhpcyBoZWxwZXIgKi8KLS8qIG1hbmRhdG9yeSAqLwotZXh0ZXJuIGNvbnN0IGdjaGFyICpjdHhfZmFjdG9yeTsKLWV4dGVybiBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqY3R4X3NpbmtfdGVtcGxhdGU7Ci1leHRlcm4gR3N0U3RhdGljUGFkVGVtcGxhdGUgKmN0eF9zcmNfdGVtcGxhdGU7Ci0vKiBvcHRpb25hbCAqLwotZXh0ZXJuIEdzdENhcHMgKmN0eF9pbnB1dF9jYXBzOwotZXh0ZXJuIEdzdENhcHMgKmN0eF9vdXRwdXRfY2FwczsKLWV4dGVybiBndWludCBjdHhfZGlzY2FyZDsKLWV4dGVybiBkYXRhYmxvYiBjdHhfaGVhZGVyc1tNQVhfSEVBREVSU107Ci1leHRlcm4gZ2Jvb2xlYW4gY3R4X25vX21ldGFkYXRhOwotCi0vKiBubyByZWZzIHRha2VuL2tlcHQsIGFsbCB1cCB0byBjYWxsZXIgKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGNvbnN0IGdjaGFyICAgICAgICAgICpmYWN0b3J5OwotICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqc2lua190ZW1wbGF0ZTsKLSAgR3N0U3RhdGljUGFkVGVtcGxhdGUgKnNyY190ZW1wbGF0ZTsKLSAgLyogY2FwcyB0aGF0IGdvIGludG8gZWxlbWVudCAqLwotICBHc3RDYXBzICAgICAgICAgICAgICAqc3JjX2NhcHM7Ci0gIC8qIG9wdGlvbmFsOiBvdXRwdXQgY2FwcyB0byB2ZXJpZnkgKi8KLSAgR3N0Q2FwcyAgICAgICAgICAgICAgKnNpbmtfY2FwczsKLSAgLyogaW5pdGlhbCBoZWFkZXJzICovCi0gIGRhdGFibG9iICAgICAgICAgICAgICBoZWFkZXJzW01BWF9IRUFERVJTXTsKLSAgLyogaW5pdGlhbCAoaGVhZGVyKSBvdXRwdXQgdG8gZm9yZWdvIGNoZWNraW5nICovCi0gIGd1aW50ICAgICAgICAgICAgICAgICBkaXNjYXJkOwotICAvKiBzZXJpZXMgb2YgYnVmZmVyczsgbWlkZGxlIHNlcmllcyBjb25zaWRlcmVkIGdhcmJhZ2UgKi8KLSAgc3RydWN0IHsKLSAgICAvKiBkYXRhIGFuZCBzaXplICovCi0gICAgZ3VpbnQ4ICAgICAqZGF0YTsKLSAgICBndWludCAgICAgIHNpemU7Ci0gICAgLyogbnVtIG9mIGZyYW1lcyB3aXRoIGFib3ZlIGRhdGEgcGVyIGJ1ZmZlciAqLwotICAgIGd1aW50ICAgICAgZnBiOwotICAgIC8qIG51bSBvZiBidWZmZXJzICovCi0gICAgZ3VpbnQgICAgICBudW07Ci0gIH0gc2VyaWVzWzNdOwotICAvKiBzaWdoLCB3ZWlyZCBjYXNlcyAqLwotICBnYm9vbGVhbiAgICAgICAgICAgICAgZnJhbWVkOwotICBndWludCAgICAgICAgICAgICAgICAgZHJvcHBlZDsKLSAgZ2Jvb2xlYW4gICAgICAgICAgICAgIG5vX21ldGFkYXRhOwotfSBHc3RQYXJzZXJUZXN0OwotCi12b2lkIGdzdF9wYXJzZXJfdGVzdF9pbml0IChHc3RQYXJzZXJUZXN0ICogcHRlc3QsIGd1aW50OCAqIGRhdGEsIGd1aW50IHNpemUsIGd1aW50IG51bSk7Ci0KLXZvaWQgZ3N0X3BhcnNlcl90ZXN0X3J1biAoR3N0UGFyc2VyVGVzdCAqIHRlc3QsIEdzdENhcHMgKiogb3V0X2NhcHMpOwotCi12b2lkIGdzdF9wYXJzZXJfdGVzdF9ub3JtYWwgKGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7Ci0KLXZvaWQgZ3N0X3BhcnNlcl90ZXN0X2RyYWluX3NpbmdsZSAoZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplKTsKLQotdm9pZCBnc3RfcGFyc2VyX3Rlc3RfZHJhaW5fZ2FyYmFnZSAoZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplLCBndWludDggKmdhcmJhZ2UsIGd1aW50IGdzaXplKTsKLQotdm9pZCBnc3RfcGFyc2VyX3Rlc3Rfc3BsaXQgKGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSk7Ci0KLXZvaWQgZ3N0X3BhcnNlcl90ZXN0X3NraXBfZ2FyYmFnZSAoZ3VpbnQ4ICpkYXRhLCBndWludCBzaXplLCBndWludDggKmdhcmJhZ2UsIGd1aW50IGdzaXplKTsKLQotdm9pZCBnc3RfcGFyc2VyX3Rlc3Rfb3V0cHV0X2NhcHMgKGd1aW50OCAqZGF0YSwgZ3VpbnQgc2l6ZSwgY29uc3QgZ2NoYXIgKiBpbnB1dF9jYXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICogb3V0cHV0X2NhcHMpOwotCi1Hc3RDYXBzICpnc3RfcGFyc2VyX3Rlc3RfZ2V0X291dHB1dF9jYXBzIChndWludDggKmRhdGEsIGd1aW50IHNpemUsIGNvbnN0IGdjaGFyICogaW5wdXRfY2Fwcyk7Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F0ZGVtdXguYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F0ZGVtdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiNjY5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9xdGRlbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBxdGRlbXV4Ci0gKgotICogQ29weXJpZ2h0IChDKSA8MjAxNj4gRWR3YXJkIEhlcnZleSA8ZWR3YXJkQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAicXRkZW11eC5oIgotCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RQYWQgKnNyY3BhZDsKLSAgZ3VpbnQgZXhwZWN0ZWRfc2l6ZTsKLSAgR3N0Q2xvY2tUaW1lIGV4cGVjdGVkX3RpbWU7Ci19IENvbW1vblRlc3REYXRhOwotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXF0ZGVtdXhfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywgQ29tbW9uVGVzdERhdGEgKiBkYXRhKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIgKGluZm8pOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIGRhdGEtPmV4cGVjdGVkX3NpemUpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX1BUUyAoYnVmKSwgZGF0YS0+ZXhwZWN0ZWRfdGltZSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIHJldHVybiBHU1RfUEFEX1BST0JFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1xdGRlbXV4X3BhZF9hZGRlZF9jYiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCwgQ29tbW9uVGVzdERhdGEgKiBkYXRhKQotewotICBkYXRhLT5zcmNwYWQgPSBwYWQ7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsCi0gICAgICAoR3N0UGFkUHJvYmVDYWxsYmFjaykgcXRkZW11eF9wcm9iZSwgZGF0YSwgTlVMTCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3F0ZGVtdXhfaW5wdXRfZ2FwKQotewotICBHc3RFbGVtZW50ICpxdGRlbXV4OwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIENvbW1vblRlc3REYXRhIGRhdGEgPSB7IDAsIH07Ci0gIEdzdEJ1ZmZlciAqaW5idWY7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBndWludCBpLCBvZmZzZXQ7Ci0gIEdzdENsb2NrVGltZSBwdHM7Ci0KLSAgLyogVGhlIGdvYWwgb2YgdGhpcyB0ZXN0IGlzIHRvIGNoZWNrIHRoYXQgcXRkZW11eCBjYW4gcHJvcGVybHkgaGFuZGxlCi0gICAqIGZyYWdtZW50ZWQgaW5wdXQgZnJvbSBkYXNoZGVtdXgsIHdpdGggZ2FwcyBpbiBpdC4KLSAgICoKLSAgICogSW5wdXQgc2VnbWVudCA6Ci0gICAqICAgLSBUSU1FCi0gICAqIElucHV0IGJ1ZmZlcnMgOgotICAgKiAgIC0gVGhlIG9mZnNldCBpcyBzZXQgb24gYnVmZmVycywgaXQgY29ycmVzcG9uZHMgdG8gdGhlIG9mZnNldAotICAgKiAgICAgd2l0aGluIHRoZSBjdXJyZW50IGZyYWdtZW50LgotICAgKiAgIC0gQnVmZmVyIG9mIHRoZSBiZWdpbm5pbmcgb2YgYSBmcmFnbWVudCBoYXMgdGhlIFBUUyBzZXQsIG90aGVycwotICAgKiAgICAgZG9uJ3QuCi0gICAqICAgLSBCeSBleHRlbnNpb24sIHRoZSBiZWdpbm5pbmcgb2YgYSBmcmFnbWVudCBhbHNvIGhhcyBhbiBvZmZzZXQKLSAgICogICAgIG9mIDAuCi0gICAqLwotCi0gIHF0ZGVtdXggPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdGRlbXV4IiwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXRkZW11eCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHF0ZGVtdXgsICJzaW5rIik7Ci0KLSAgLyogV2UnbGwgd2FudCB0byBrbm93IHdoZW4gdGhlIHNvdXJjZSBwYWQgaXMgYWRkZWQgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAocXRkZW11eCwgInBhZC1hZGRlZCIsIChHQ2FsbGJhY2spIHF0ZGVtdXhfcGFkX2FkZGVkX2NiLAotICAgICAgJmRhdGEpOwotCi0gIC8qIFNlbmQgdGhlIGluaXRpYWwgU1RSRUFNX1NUQVJUIGFuZCBzZWdtZW50IChUSU1FKSBldmVudCAqLwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgiVEVTVCIpOwotICBHU1RfREVCVUcgKCJQdXNoaW5nIHN0cmVhbS1zdGFydCBldmVudCIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9zZW5kX2V2ZW50IChzaW5rcGFkLCBldmVudCkgPT0gVFJVRSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBldmVudCA9IGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpOwotICBHU1RfREVCVUcgKCJQdXNoaW5nIHNlZ21lbnQgZXZlbnQiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpID09IFRSVUUpOwotCi0gIC8qIEZlZWQgdGhlIGluaXQgYnVmZmVyLCBzaG91bGQgY3JlYXRlIHRoZSBzb3VyY2UgcGFkICovCi0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChpbml0X21wNF9sZW4pOwotICBnc3RfYnVmZmVyX2ZpbGwgKGluYnVmLCAwLCBpbml0X21wNCwgaW5pdF9tcDRfbGVuKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGluYnVmKSA9IDA7Ci0gIEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1ZikgPSAwOwotICBHU1RfREVCVUcgKCJQdXNoaW5nIGhlYWRlciBidWZmZXIiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgLyogTm93IHNlbmQgdGhlIHRydW4gb2YgdGhlIGZpcnN0IGZyYWdtZW50ICovCi0gIGluYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzZWdfMV9tb29mX3NpemUpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGluYnVmLCAwLCBzZWdfMV9tNGYsIHNlZ18xX21vb2Zfc2l6ZSk7Ci0gIEdTVF9CVUZGRVJfUFRTIChpbmJ1ZikgPSAwOwotICBHU1RfQlVGRkVSX09GRlNFVCAoaW5idWYpID0gMDsKLSAgLyogV2UgYXJlIHNpbXVsYXRpbmcgdGhhdCB0aGlzIGZyYWdtZW50IGNhbiBoYXBwZW4gYXQgYW55IHBvaW50ICovCi0gIEdTVF9CVUZGRVJfRkxBR19TRVQgKGluYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCk7Ci0gIEdTVF9ERUJVRyAoIlB1c2hpbmcgdHJ1biBidWZmZXIiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfaWYgKGRhdGEuc3JjcGFkID09IE5VTEwpOwotCi0gIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gc2VuZCBzb21lIGJ1ZmZlcnMgd2l0aCBnYXBzICovCi0gIG9mZnNldCA9IHNlZ18xX3NhbXBsZV8wX29mZnNldDsKLSAgcHRzID0gMDsKLQotICBHU1RfREVCVUcgKCJQdXNoaW5nIGdhcCdlZCBidWZmZXJzIik7Ci0gIGZvciAoaSA9IDA7IGkgPCAxMjk7IGkrKykgewotICAgIC8qIExldCdzIHNlbmQgb25lIGV2ZXJ5IDMgKi8KLSAgICBpZiAoKGkgJSAzKSA9PSAwKSB7Ci0gICAgICBHU1RfREVCVUcgKCJQdXNoaW5nIGJ1ZmZlciAjJWQgb2Zmc2V0OiUiIEdfR1VJTlQzMl9GT1JNQVQsIGksIG9mZnNldCk7Ci0gICAgICBpbmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2VnXzFfc2FtcGxlX3NpemVzW2ldKTsKLSAgICAgIGdzdF9idWZmZXJfZmlsbCAoaW5idWYsIDAsIHNlZ18xX200ZiArIG9mZnNldCwgc2VnXzFfc2FtcGxlX3NpemVzW2ldKTsKLSAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUIChpbmJ1ZikgPSBvZmZzZXQ7Ci0gICAgICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChpbmJ1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotICAgICAgZGF0YS5leHBlY3RlZF90aW1lID0KLSAgICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKHB0cywgR1NUX1NFQ09ORCwgc2VnXzFfdGltZXNjYWxlKTsKLSAgICAgIGRhdGEuZXhwZWN0ZWRfc2l6ZSA9IHNlZ18xX3NhbXBsZV9zaXplc1tpXTsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBpbmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotICAgIH0KLSAgICAvKiBGaW5hbGx5IG1vdmUgb2Zmc2V0IGZvcndhcmQgKi8KLSAgICBvZmZzZXQgKz0gc2VnXzFfc2FtcGxlX3NpemVzW2ldOwotICAgIHB0cyArPSBzZWdfMV9zYW1wbGVfZHVyYXRpb247Ci0gIH0KLQotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdGRlbXV4LCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHF0ZGVtdXgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1xdGRlbXV4X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInF0ZGVtdXgiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcXRkZW11eF9pbnB1dF9nYXApOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocXRkZW11eCkKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F0ZGVtdXguaCBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F0ZGVtdXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0MjVmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9xdGRlbXV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjUxICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3IgcXRkZW11eAotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMTY+IEVkd2FyZCBIZXJ2ZXkgPGVkd2FyZEBjZW50cmljdWxhci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLS8qIEZyYWdtZW50cyB0YWtlbiBmcm9tIGh0dHA6Ly93d3cuYm9rLm5ldC9kYXNoL3RlYXJzX29mX3N0ZWVsL2NsZWFydGV4dC9zdHJlYW0ubXBkCi0gKgotICogQXVkaW8gc3RyZWFtIChhYWMpCi0gKiBIZWFkZXIgKyBmaXJzdCBmcmFnbWVudAotICovCi0KLS8qIGh0dHA6Ly93d3cuYm9rLm5ldC9kYXNoL3RlYXJzX29mX3N0ZWVsL2NsZWFydGV4dC9hdWRpby9lbi9pbml0Lm1wNCAqLwotc3RhdGljIGd1aW50OCBpbml0X21wNFtdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDY2LCAweDc0LCAweDc5LCAweDcwLCAweDY5LCAweDczLCAweDZmLCAweDZkLAotICAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDY5LCAweDczLCAweDZmLCAweDZkLCAweDY5LCAweDczLCAweDZmLCAweDMyLAotICAweDYxLCAweDc2LCAweDYzLCAweDMxLCAweDZkLCAweDcwLCAweDM0LCAweDMxLCAweDAwLCAweDAwLCAweDAyLCAweDUwLAotICAweDZkLCAweDZmLCAweDZmLCAweDc2LCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweDZkLCAweDc2LCAweDY4LCAweDY0LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAzLCAweGU4LCAweDAwLCAweDBiLCAweDMzLCAweGQ3LCAweDAwLCAweDAxLCAweDAwLCAweDAwLAotICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAxLCAweGE0LCAweDc0LCAweDcyLCAweDYxLCAweDZiLAotICAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDc0LCAweDZiLCAweDY4LCAweDY0LCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDMzLCAweGJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQwLAotICAweDZkLCAweDY0LCAweDY5LCAweDYxLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDZkLCAweDY0LCAweDY4LCAweDY0LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweGFjLCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGM3LCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDM1LCAweDY4LCAweDY0LCAweDZjLCAweDcyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLCAweDZmLCAweDc1LCAweDZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDY1LCAweDZlLCAweDc0LAotICAweDZmLCAweDM0LCAweDIwLCAweDUzLCAweDZmLCAweDc1LCAweDZlLCAweDY0LCAweDIwLCAweDQ4LCAweDYxLCAweDZlLAotICAweDY0LCAweDZjLCAweDY1LCAweDcyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDZkLCAweDY5LCAweDZlLAotICAweDY2LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDczLCAweDZkLCAweDY4LCAweDY0LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDY0LCAweDY5LCAweDZlLAotICAweDY2LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDY0LCAweDcyLCAweDY1LCAweDY2LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDc1LCAweDcyLCAweDZjLAotICAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDczLCAweDc0LCAweDYyLAotICAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDczLCAweDc0LCAweDczLCAweDY0LCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDZkLCAweDcwLCAweDM0LAotICAweDYxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweGFjLCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI3LCAweDY1LCAweDczLCAweDY0LAotICAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE5LCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDExLAotICAweDQwLCAweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGY0LCAweDAxLCAweDAwLCAweDAxLCAweGY0LAotICAweDAxLCAweDA1LCAweDAyLCAweDEyLCAweDEwLCAweDA2LCAweDAxLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotICAweDczLCAweDc0LCAweDczLCAweDdhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDczLCAweDc0LCAweDczLCAweDYzLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotICAweDczLCAweDc0LCAweDc0LCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDczLCAweDc0LCAweDYzLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDZkLCAweDc2LCAweDY1LCAweDc4LAotICAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDZkLCAweDY1LCAweDY4LCAweDY0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDBiLCAweDMzLCAweGQ3LCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDc0LCAweDcyLCAweDY1LCAweDc4LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1ndWludCBpbml0X21wNF9sZW4gPSA2MjQ7Ci0KLS8qIGh0dHA6Ly93d3cuYm9rLm5ldC9kYXNoL3RlYXJzX29mX3N0ZWVsL2NsZWFydGV4dC9hdWRpby9lbi9zZWctMS5tNGYgKi8KLXN0YXRpYyBjb25zdCBndWludDggc2VnXzFfbTRmW10gPSB7Ci0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4NjAsIDB4NmQsIDB4NmYsIDB4NmYsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0gIDB4NmQsIDB4NjYsIDB4NjgsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4NDgsIDB4NzQsIDB4NzIsIDB4NjEsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0gIDB4NzQsIDB4NjYsIDB4NjgsIDB4NjQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NzQsIDB4NjYsIDB4NjQsIDB4NzQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MWMsCi0gIDB4NzQsIDB4NzIsIDB4NzUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzMsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YjksCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OWEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2QsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjMsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTUsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTQsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmUsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODYsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWQsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODksCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2QsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OWUsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTMsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YmQsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OWYsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YmEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODEsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjUsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzUsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YWIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTcsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4M2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTMsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDYsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTgsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2IsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4M2EsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGQsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2MsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTcsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4YjQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmUsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NWUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4YTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NGIsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YWEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N2UsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4OWIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NmMsCi0gIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4NTksIDB4MDAsIDB4MDAsIDB4YmQsIDB4MzIsIDB4NmQsIDB4NjQsIDB4NjEsIDB4NzQsCi0gIDB4MjEsIDB4MTEsIDB4NDUsIDB4MDAsIDB4MTQsIDB4NTAsIDB4MDEsIDB4NDYsIDB4ZmYsIDB4ZjEsIDB4MGEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWQsIDB4ZTksIDB4ODIsIDB4MTQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YmMsIDB4MjEsCi0gIDB4MWEsIDB4OTMsIDB4YTksIDB4MDQsIDB4M2UsIDB4YTMsIDB4NTksIDB4NDEsIDB4NjcsIDB4YTYsIDB4MWMsIDB4MDIsCi0gIDB4ODEsIDB4NGEsIDB4M2QsIDB4M2UsIDB4NWQsIDB4MzAsIDB4MWYsIDB4NWIsIDB4NTksIDB4NDEsIDB4NDksIDB4ZGUsCi0gIDB4MjIsIDB4MWUsIDB4ODEsIDB4MGIsIDB4M2YsIDB4ZjYsIDB4ZmYsIDB4ZjEsIDB4MGEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsIDB4NWEsCi0gIDB4NWQsIDB4ZTYsIDB4YzIsIDB4MTQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsCi0gIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YjQsIDB4YmMsIDB4MjEsCi0gIDB4MWEsIDB4OTMsIDB4ODUsIDB4OWEsIDB4OTIsIDB4YzYsIDB4NDEsIDB4MzAsIDB4OTEsIDB4OGMsIDB4NDUsIDB4MDgsCi0gIDB4YTQsIDB4YzUsIDB4NDUsIDB4MjAsIDB4Y2MsIDB4ZDYsIDB4MjIsIDB4ODQsIDB4YTEsIDB4MDIsIDB4NTMsIDB4MWEsCi0gIDB4YzgsIDB4OWEsIDB4NTAsIDB4MjEsIDB4ODksIDB4ZmUsIDB4NzAsIDB4MjQsIDB4NzYsIDB4NjQsIDB4NWMsIDB4ZWUsCi0gIDB4MWUsIDB4NzYsIDB4MjAsIDB4MDMsIDB4OTAsIDB4NTIsIDB4ODgsIDB4MjAsIDB4YjgsIDB4ZjAsIDB4NTgsIDB4ZjAsCi0gIDB4MWYsIDB4ZDgsIDB4ZWIsIDB4MTQsIDB4OWIsIDB4MWYsIDB4ZGYsIDB4ZjEsIDB4ZTgsIDB4Y2UsIDB4YTgsIDB4ZjMsCi0gIDB4OTMsIDB4YTcsIDB4MzQsIDB4OWEsIDB4MjYsIDB4OTIsIDB4OWIsIDB4YjcsIDB4YmUsIDB4NDAsIDB4Y2IsIDB4ZjAsCi0gIDB4Y2MsIDB4OGYsIDB4MzYsIDB4OTgsIDB4NDgsIDB4MTgsIDB4ZTYsIDB4MTcsIDB4NjEsIDB4NTYsIDB4MjMsIDB4MGUsCi0gIDB4MzMsIDB4MmEsIDB4YzIsIDB4MzIsIDB4MDEsIDB4NTcsIDB4ZGIsIDB4NmUsIDB4MDUsIDB4MjIsIDB4NTYsIDB4Y2QsCi0gIDB4NjksIDB4OWIsIDB4YjYsIDB4MmUsIDB4MTIsIDB4YmYsIDB4NGEsIDB4NzYsIDB4MjQsIDB4NjAsIDB4YzAsIDB4ZTgsCi0gIDB4ZGQsIDB4MmIsIDB4NTcsIDB4NGQsIDB4MmUsIDB4ZDMsIDB4MTgsIDB4NGUsIDB4MTAsIDB4NjQsIDB4Y2IsIDB4YjYsCi0gIDB4NzQsIDB4YjAsIDB4OWIsIDB4ZDQsIDB4ZDksIDB4ODMsIDB4MTEsIDB4YjYsIDB4MTQsIDB4YjgsIDB4ZWUsIDB4YzAsCi0gIDB4ZGUsIDB4MzUsIDB4YzUsIDB4YjQsIDB4MWUsIDB4NTIsIDB4YTIsIDB4YTYsIDB4NzQsIDB4MDcsIDB4MjUsIDB4OWQsCi0gIDB4YTcsIDB4NTIsIDB4YTQsIDB4YzYsIDB4NDUsIDB4MDMsIDB4YWQsIDB4YjQsIDB4MDMsIDB4ZDQsIDB4MGIsIDB4YzYsCi0gIDB4MTIsIDB4NGIsIDB4ZGYsIDB4NWQsIDB4NjQsIDB4ZWEsIDB4ZWEsIDB4ZGEsIDB4ODQsIDB4MDAsIDB4NmYsIDB4NDYsCi0gIDB4ZTQsIDB4MzksIDB4MTYsIDB4ZjIsIDB4Y2EsIDB4OGYsIDB4ZDAsIDB4MjksIDB4MGQsIDB4ZWUsIDB4NDcsIDB4MzIsCi0gIDB4YmUsIDB4NTEsIDB4NmIsIDB4ZWYsIDB4NTksIDB4MTUsIDB4ZTUsIDB4MTMsIDB4MGIsIDB4NzcsIDB4OTIsIDB4MTUsCi0gIDB4N2YsIDB4MDQsIDB4NWQsIDB4ZWEsIDB4Y2EsIDB4YzAsIDB4NDAsIDB4MzksIDB4YTUsIDB4MTIsIDB4MTUsIDB4N2QsCi0gIDB4ZWEsIDB4MTIsIDB4ZTcsIDB4MjUsIDB4ZjIsIDB4OTQsIDB4YjEsIDB4MmUsIDB4N2QsIDB4NTcsIDB4ZGMsIDB4OTksCi0gIDB4YWUsIDB4YTIsIDB4ZWEsIDB4MzMsIDB4YmEsIDB4YTEsIDB4Y2IsIDB4YzEsIDB4NTQsIDB4M2IsIDB4MDYsIDB4ZTMsCi0gIDB4MzQsIDB4NTAsIDB4YmEsIDB4ODksIDB4ZWMsIDB4YWEsIDB4ZWMsIDB4NDcsIDB4ZTYsIDB4ZGMsIDB4M2IsIDB4ZmEsCi0gIDB4MWEsIDB4ZTEsIDB4ZTksIDB4YzcsIDB4NDYsIDB4NDAsIDB4MWMsIDB4YTEsIDB4ODksIDB4OTgsIDB4MjMsIDB4ODQsCi0gIDB4NmUsIDB4ZTgsIDB4YmEsIDB4OGMsIDB4Y2IsIDB4MDEsIDB4NDgsIDB4YTgsIDB4MjgsIDB4MTYsIDB4YTgsIDB4NmIsCi0gIDB4MjIsIDB4NjksIDB4NDAsIDB4ODYsIDB4MjAsIDB4NzksIDB4ODMsIDB4MjEsIDB4N2IsIDB4NmYsIDB4NmQsIDB4YjQsCi0gIDB4ZGEsIDB4NmUsIDB4MzEsIDB4MmEsIDB4MjYsIDB4MTIsIDB4YTUsIDB4YjcsIDB4NGEsIDB4OTEsIDB4MzAsIDB4NTUsCi0gIDB4YjQsIDB4ZTYsIDB4OTksIDB4NmEsIDB4YTYsIDB4MTIsIDB4MWYsIDB4NzIsIDB4ZGIsIDB4NjUsIDB4ZGMsIDB4YmUsCi0gIDB4MTcsIDB4MTUsIDB4NmIsIDB4YzAsIDB4OWUsIDB4NTUsIDB4MjAsIDB4OGMsIDB4ZjUsIDB4MjcsIDB4M2MsIDB4MDksCi0gIDB4NDIsIDB4Y2MsIDB4NzgsIDB4OGQsIDB4MjQsIDB4MzcsIDB4YjksIDB4NDUsIDB4ZGQsIDB4MTQsIDB4YTUsIDB4OTksCi0gIDB4ZGUsIDB4MTUsIDB4YTAsIDB4NWEsIDB4M2UsIDB4ZmUsIDB4OGMsIDB4ZDcsIDB4MmEsIDB4MTQsIDB4NTIsIDB4ZWYsCi0gIDB4NmUsIDB4ODcsIDB4OWMsIDB4MjIsIDB4OWQsIDB4MDgsIDB4NjUsIDB4NTksIDB4YjUsIDB4NjAsIDB4NzgsIDB4ZmQsCi0gIDB4YzMsIDB4MmUsIDB4NmEsIDB4ODgsIDB4MTMsIDB4YzIsIDB4NGYsIDB4NzIsIDB4NmMsIDB4OTIsIDB4MDIsIDB4NGMsCi0gIDB4ODgsIDB4ZDQsIDB4YzQsIDB4ODAsIDB4YzEsIDB4NDgsIDB4NTYsIDB4NGMsIDB4MzksIDB4OTgsIDB4NWQsIDB4OWQsCi0gIDB4MzEsIDB4MzUsIDB4ODEsIDB4NDcsIDB4NzIsIDB4NGQsIDB4ZTUsIDB4NzcsIDB4NTQsIDB4ZjgsIDB4ODgsIDB4ZTQsCi0gIDB4MDcsIDB4YWQsIDB4YTEsIDB4YTYsIDB4YTEsIDB4ZTksIDB4NjksIDB4MTYsIDB4YWQsIDB4MzMsIDB4ODgsIDB4ODYsCi0gIDB4ZWUsIDB4MTgsIDB4ZWEsIDB4MzcsIDB4Y2EsIDB4OGQsIDB4ZDgsIDB4NWYsIDB4OTUsIDB4MDQsIDB4YzMsIDB4NTUsCi0gIDB4NzYsIDB4NDUsIDB4ZjcsIDB4ZDUsIDB4OWMsIDB4MzIsIDB4NGUsIDB4ODAsIDB4ODAsIDB4ZDAsIDB4OWMsIDB4NDEsCi0gIDB4YTcsIDB4NTQsIDB4YmMsIDB4MzYsIDB4OTAsIDB4YjMsIDB4Y2YsIDB4YzAsIDB4NzAsIDB4NDYsIDB4NDUsIDB4MzQsCi0gIDB4Y2EsIDB4OTMsIDB4M2MsIDB4NmIsIDB4YTYsIDB4ZWQsIDB4NDAsIDB4OGEsIDB4OTgsIDB4MjksIDB4MTIsIDB4NzgsCi0gIDB4ZDksIDB4NmMsIDB4MzcsIDB4MDQsIDB4YWQsIDB4ZjMsIDB4MDksIDB4NmUsIDB4NmUsIDB4Y2UsIDB4ZTksIDB4MWMsCi0gIDB4MjksIDB4MDUsIDB4MDYsIDB4MDgsIDB4NjMsIDB4N2UsIDB4NDMsIDB4M2EsIDB4MmUsIDB4MmUsIDB4ZWYsIDB4ODUsCi0gIDB4YjcsIDB4ODksIDB4YzAsIDB4ZjUsIDB4ZjUsIDB4NzIsIDB4OTAsIDB4MWMsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDcsCi0gIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZWYsIDB4NjYsIDB4YTMsIDB4MzEsIDB4MTEsIDB4NmMsIDB4NDQsIDB4MTMsCi0gIDB4MTIsIDB4ODgsIDB4ZTEsIDB4MGUsIDB4MTgsIDB4ZTMsIDB4NzAsIDB4YTAsIDB4MTQsIDB4MmEsIDB4ZTksIDB4MjgsCi0gIDB4ODIsIDB4NDQsIDB4ZTQsIDB4NjgsIDB4MzgsIDB4MjEsIDB4MDgsIDB4MmMsIDB4YTQsIDB4ZDksIDB4MWUsIDB4YzQsCi0gIDB4NzksIDB4MjgsIDB4MTAsIDB4MmUsIDB4ZTQsIDB4NzgsIDB4NTIsIDB4MjQsIDB4MjEsIDB4MTEsIDB4ODMsIDB4ZjYsCi0gIDB4YmEsIDB4ZDUsIDB4YTgsIDB4ZTQsIDB4YmMsIDB4ZjEsIDB4M2MsIDB4NjUsIDB4MjUsIDB4N2EsIDB4YjQsIDB4NWMsCi0gIDB4ODksIDB4Y2UsIDB4MTQsIDB4YjIsIDB4OGUsIDB4OTMsIDB4NTIsIDB4ZjMsIDB4ODIsIDB4NGMsIDB4NGQsIDB4NDIsCi0gIDB4NjgsIDB4YjUsIDB4YzgsIDB4MTUsIDB4ZWEsIDB4ZDEsIDB4MWQsIDB4YTYsIDB4ZjMsIDB4ODMsIDB4ZjQsIDB4MWYsCi0gIDB4MTgsIDB4OTcsIDB4YjcsIDB4OTgsIDB4ZmQsIDB4OWMsIDB4MTMsIDB4NWMsIDB4OTAsIDB4ZTEsIDB4N2QsIDB4ODgsCi0gIDB4YWYsIDB4NGYsIDB4MTYsIDB4OGUsIDB4N2UsIDB4ZmUsIDB4OTksIDB4NzQsIDB4ODAsIDB4MjUsIDB4ZWEsIDB4OTYsCi0gIDB4MTMsIDB4MjAsIDB4M2QsIDB4ZGYsIDB4NzksIDB4M2UsIDB4OTMsIDB4ZGIsIDB4NzQsIDB4OWEsIDB4MTEsIDB4NGUsCi0gIDB4ZTksIDB4ZDgsIDB4NDAsIDB4MWEsIDB4MWMsIDB4MGMsIDB4MDQsIDB4NDQsIDB4OGUsIDB4MWUsIDB4ODYsIDB4MzQsCi0gIDB4NDIsIDB4NjgsIDB4NjgsIDB4MGUsIDB4ZjksIDB4YzIsIDB4MTIsIDB4NGIsIDB4MGUsIDB4NTcsIDB4MTAsIDB4ZDQsCi0gIDB4ODAsIDB4YzIsIDB4ZDAsIDB4ZTgsIDB4OGMsIDB4YzIsIDB4YjIsIDB4OTcsIDB4OTksIDB4ZGQsIDB4Y2QsIDB4MDgsCi0gIDB4YWEsIDB4NmIsIDB4NDYsIDB4YWIsIDB4NmMsIDB4YWYsIDB4OTcsIDB4NGIsIDB4NmYsIDB4OGIsIDB4NjIsIDB4ODEsCi0gIDB4MjUsIDB4ZWQsIDB4NDQsIDB4OTAsIDB4MmIsIDB4NzEsIDB4ZGIsIDB4MTIsIDB4NGMsIDB4NmQsIDB4MDgsIDB4YjUsCi0gIDB4OGIsIDB4NGIsIDB4MTIsIDB4OTIsIDB4MjgsIDB4ODMsIDB4YmIsIDB4YjQsIDB4NTQsIDB4MmQsIDB4MTcsIDB4YmMsCi0gIDB4MjUsIDB4NjcsIDB4YjUsIDB4ZjIsIDB4MDYsIDB4MjAsIDB4OGQsIDB4NDcsIDB4N2QsIDB4NWQsIDB4MjMsIDB4ODksCi0gIDB4YTgsIDB4OWQsIDB4OTQsIDB4NmUsIDB4M2MsIDB4YzksIDB4NDYsIDB4MTIsIDB4NjAsIDB4NDYsIDB4MmMsIDB4NGMsCi0gIDB4YjYsIDB4ZWIsIDB4NGIsIDB4NTEsIDB4ZjYsIDB4ZDIsIDB4NGQsIDB4N2MsIDB4N2QsIDB4MDcsIDB4NDksIDB4YjUsCi0gIDB4MzAsIDB4YzAsIDB4YzMsIDB4NTMsIDB4NjIsIDB4MWYsIDB4ZjQsIDB4YTIsIDB4YjYsIDB4NzYsIDB4ZDIsIDB4MzUsCi0gIDB4ZDEsIDB4YWEsIDB4YjEsIDB4ZjUsIDB4OWEsIDB4OGMsIDB4ODMsIDB4ZGUsIDB4NmMsIDB4YTksIDB4MzUsIDB4YmMsCi0gIDB4Y2YsIDB4MmQsIDB4YWQsIDB4MmIsIDB4ZjEsIDB4ZjcsIDB4NzksIDB4ZmYsIDB4NDgsIDB4MWYsIDB4YjEsIDB4ZmEsCi0gIDB4MGUsIDB4MmUsIDB4MDcsIDB4NTcsIDB4N2MsIDB4ZWQsIDB4NzYsIDB4NzAsIDB4ZjksIDB4N2EsIDB4ZmMsIDB4OWUsCi0gIDB4MTcsIDB4OWMsIDB4MDEsIDB4ZGIsIDB4ZDAsIDB4YzYsIDB4NDYsIDB4YjAsIDB4NTAsIDB4NmMsIDB4MTQsIDB4MWIsCi0gIDB4MGEsIDB4ODgsIDB4ZTEsIDB4YzAsIDB4YTksIDB4OWEsIDB4MzIsIDB4MmEsIDB4YWUsIDB4YWEsIDB4ZDUsIDB4NTAsCi0gIDB4NDYsIDB4NWMsIDB4YzIsIDB4MjUsIDB4NWIsIDB4MDUsIDB4NjcsIDB4ZDgsIDB4ZDcsIDB4Y2YsIDB4YTksIDB4NDksCi0gIDB4YTYsIDB4NmIsIDB4OTAsIDB4MmYsIDB4YjgsIDB4YTcsIDB4MTYsIDB4MWMsIDB4YWUsIDB4MDUsIDB4YmQsIDB4MTQsCi0gIDB4NmEsIDB4YjIsIDB4NjQsIDB4N2MsIDB4ZDgsIDB4MWEsIDB4ZmYsIDB4NjcsIDB4YzQsIDB4YjQsIDB4NGYsIDB4M2YsCi0gIDB4NDksIDB4ZTQsIDB4ZGMsIDB4MDIsIDB4NjgsIDB4OTAsIDB4MTUsIDB4NjIsIDB4ZGEsIDB4MTcsIDB4YWYsIDB4MjQsCi0gIDB4MTksIDB4YmIsIDB4OGMsIDB4NWQsIDB4MTgsIDB4N2MsIDB4OWQsIDB4NjMsIDB4ODUsIDB4ZmEsIDB4YWQsIDB4YmEsCi0gIDB4MTAsIDB4YjYsIDB4MDUsIDB4NjQsIDB4MDAsIDB4NGYsIDB4OGYsIDB4NWMsIDB4Y2QsIDB4YjgsIDB4NGEsIDB4ZDYsCi0gIDB4OGUsIDB4MmUsIDB4MDIsIDB4M2IsIDB4ZWUsIDB4ZTYsIDB4NDMsIDB4Y2EsIDB4Y2EsIDB4MjgsIDB4MmQsIDB4MjQsCi0gIDB4NDcsIDB4MTEsIDB4ZGEsIDB4MWEsIDB4MDMsIDB4ZGQsIDB4ZjIsIDB4YmQsIDB4M2IsIDB4ODksIDB4OGQsIDB4NTQsCi0gIDB4OGUsIDB4YjMsIDB4YjEsIDB4MjEsIDB4OGQsIDB4ZmEsIDB4YWQsIDB4YTYsIDB4NTgsIDB4NWQsIDB4MTMsIDB4MzksCi0gIDB4M2QsIDB4YzYsIDB4ZmUsIDB4ZDMsIDB4ZWMsIDB4ZjIsIDB4NTUsIDB4ZjksIDB4OWIsIDB4MjUsIDB4MjIsIDB4MDYsCi0gIDB4ODAsIDB4YmMsIDB4OTMsIDB4NzcsIDB4N2IsIDB4NDYsIDB4YjMsIDB4MzMsIDB4YTMsIDB4N2EsIDB4ZjIsIDB4ODMsCi0gIDB4YTQsIDB4MTcsIDB4MmIsIDB4MTQsIDB4NWEsIDB4NzQsIDB4YzQsIDB4NjIsIDB4ZjQsIDB4YmEsIDB4NzgsIDB4YTYsCi0gIDB4YjYsIDB4YmYsIDB4NjIsIDB4MDMsIDB4ZWQsIDB4YzIsIDB4NzUsIDB4YTcsIDB4YjcsIDB4OGMsIDB4OGYsIDB4MDIsCi0gIDB4MTQsIDB4NzEsIDB4ODEsIDB4YWEsIDB4YjcsIDB4YWEsIDB4YjAsIDB4NzksIDB4NGUsIDB4MWYsIDB4M2QsIDB4NDcsCi0gIDB4NTUsIDB4YWEsIDB4NDEsIDB4NDgsIDB4NDIsIDB4YzksIDB4NWIsIDB4ZWIsIDB4YmEsIDB4N2QsIDB4M2QsIDB4NGQsCi0gIDB4MzUsIDB4NzEsIDB4N2EsIDB4ZDYsIDB4NGUsIDB4MmMsIDB4YWYsIDB4MDQsIDB4NDMsIDB4YzgsIDB4NjMsIDB4MWUsCi0gIDB4ZjEsIDB4YTAsIDB4MWIsIDB4NTcsIDB4MDcsIDB4OTUsIDB4YTYsIDB4YzMsIDB4ZTMsIDB4MmUsIDB4YTYsIDB4NmUsCi0gIDB4NDEsIDB4NWEsIDB4YWUsIDB4M2MsIDB4Y2UsIDB4YjAsIDB4YmYsIDB4YTMsIDB4NzEsIDB4ZTgsIDB4YmUsIDB4ZjMsCi0gIDB4ZWYsIDB4N2QsIDB4NWYsIDB4MWYsIDB4YTMsIDB4YTMsIDB4YjQsIDB4ZjMsIDB4MDAsIDB4NzAsIDB4MjEsIDB4MWEsCi0gIDB4OTMsIDB4OWQsIDB4ODksIDB4OTAsIDB4OWEsIDB4NjEsIDB4NTAsIDB4ZGMsIDB4MjAsIDB4YTUsIDB4NDYsIDB4MTAsCi0gIDB4YzgsIDB4NGQsIDB4ZTgsIDB4MDUsIDB4NDAsIDB4NGIsIDB4YTAsIDB4MTIsIDB4OTksIDB4OGIsIDB4MjcsIDB4MDUsCi0gIDB4YzQsIDB4OTYsIDB4NWYsIDB4YzMsIDB4N2EsIDB4ODYsIDB4Y2MsIDB4ZWQsIDB4MjUsIDB4OGEsIDB4MmEsIDB4OTAsCi0gIDB4MWUsIDB4OTksIDB4ZDAsIDB4NDYsIDB4MmMsIDB4MWYsIDB4MmYsIDB4NTMsIDB4ZWMsIDB4N2QsIDB4MDMsIDB4ZDcsCi0gIDB4YzcsIDB4NmYsIDB4YzksIDB4NjQsIDB4MWMsIDB4OGEsIDB4ZmQsIDB4YjUsIDB4MmIsIDB4NjMsIDB4ODksIDB4ZjksCi0gIDB4M2UsIDB4MTYsIDB4YzAsIDB4YjAsIDB4YjcsIDB4YmMsIDB4M2IsIDB4YTQsIDB4ZGEsIDB4NmUsIDB4YWIsIDB4NDYsCi0gIDB4N2MsIDB4ZjcsIDB4OTIsIDB4NWYsIDB4ZjAsIDB4ZGEsIDB4ZTYsIDB4ZmMsIDB4NTYsIDB4MWEsIDB4MjQsIDB4ZjAsCi0gIDB4Y2EsIDB4ZjcsIDB4YTUsIDB4YTUsIDB4N2IsIDB4NzAsIDB4NzAsIDB4YWYsIDB4OGIsIDB4Y2QsIDB4MTgsIDB4ZWQsCi0gIDB4YzMsIDB4N2EsIDB4NGEsIDB4MjYsIDB4N2QsIDB4ZmIsIDB4MjIsIDB4OTQsIDB4OTIsIDB4ZDksIDB4Y2QsIDB4OTgsCi0gIDB4ZDMsIDB4M2EsIDB4MWUsIDB4NDMsIDB4NzQsIDB4MmIsIDB4ZmQsIDB4MDcsIDB4OGQsIDB4MmIsIDB4YWQsIDB4ZmUsCi0gIDB4ZTksIDB4YWUsIDB4YTQsIDB4MWQsIDB4YTEsIDB4MmYsIDB4YTcsIDB4YjMsIDB4NTksIDB4ZjQsIDB4NWMsIDB4NmUsCi0gIDB4M2UsIDB4ZjgsIDB4ODIsIDB4M2IsIDB4NDksIDB4ZWIsIDB4YTksIDB4ZjUsIDB4ZjcsIDB4YjcsIDB4ODMsIDB4MDUsCi0gIDB4YWUsIDB4NzUsIDB4NTQsIDB4MDEsIDB4NzEsIDB4ZDQsIDB4YTUsIDB4MDAsIDB4OGEsIDB4ODYsIDB4ODEsIDB4N2IsCi0gIDB4ZDAsIDB4MDcsIDB4NzcsIDB4YmEsIDB4NDQsIDB4YzQsIDB4OTQsIDB4M2UsIDB4NmYsIDB4NWQsIDB4MmEsIDB4NzUsCi0gIDB4MmEsIDB4NWIsIDB4MzksIDB4NGMsIDB4NjgsIDB4MzIsIDB4NjUsIDB4ODIsIDB4NmUsIDB4OWMsIDB4ZmYsIDB4MzUsCi0gIDB4ZDAsIDB4NzgsIDB4NzMsIDB4YjMsIDB4YjcsIDB4N2YsIDB4YTIsIDB4YzMsIDB4OTAsIDB4Y2MsIDB4ODMsIDB4OTAsCi0gIDB4NzgsIDB4NjksIDB4ZDUsIDB4ZjIsIDB4YmIsIDB4OWQsIDB4NzUsIDB4NGYsIDB4MWUsIDB4ZTMsIDB4YjAsIDB4N2IsCi0gIDB4ODAsIDB4ZWYsIDB4NjIsIDB4OTIsIDB4MzIsIDB4YWUsIDB4MDIsIDB4ZGEsIDB4OTIsIDB4OWMsIDB4NmIsIDB4MWIsCi0gIDB4N2YsIDB4MGUsIDB4YzcsIDB4NGEsIDB4YzMsIDB4NGYsIDB4NWIsIDB4MDgsIDB4ZDIsIDB4YWMsIDB4MjIsIDB4N2IsCi0gIDB4YTUsIDB4MTAsIDB4OTAsIDB4YTksIDB4NTUsIDB4MmIsIDB4ODYsIDB4ZmMsIDB4M2YsIDB4YzQsIDB4ZjksIDB4NWYsCi0gIDB4N2YsIDB4ZGUsIDB4NzIsIDB4YmYsIDB4OWYsIDB4ZGEsIDB4MDAsIDB4NzQsIDB4YjEsIDB4MzIsIDB4OTIsIDB4Y2MsCi0gIDB4NGEsIDB4MWMsIDB4ODQsIDB4MTAsIDB4ZTcsIDB4NDAsIDB4YTMsIDB4MmMsIDB4MDMsIDB4N2EsIDB4MDAsIDB4YjAsCi0gIDB4MmUsIDB4YTEsIDB4NjksIDB4M2EsIDB4NjksIDB4NmEsIDB4NTIsIDB4MDIsIDB4NDIsIDB4OWUsIDB4ZGEsIDB4NjcsCi0gIDB4ZjIsIDB4ZTIsIDB4MTEsIDB4M2QsIDB4MjcsIDB4NjUsIDB4MjEsIDB4NzAsIDB4NjEsIDB4OTIsIDB4ZmUsIDB4MzMsCi0gIDB4YzMsIDB4OWYsIDB4ODcsIDB4ODYsIDB4ZWYsIDB4MTIsIDB4MzUsIDB4YzgsIDB4NmIsIDB4MjEsIDB4ZGUsIDB4NzIsCi0gIDB4YjQsIDB4ZTQsIDB4ZmYsIDB4ODcsIDB4NTIsIDB4MmEsIDB4YTQsIDB4ODMsIDB4OTksIDB4ZDQsIDB4NmMsIDB4NWYsCi0gIDB4YWMsIDB4NjcsIDB4YjUsIDB4MjcsIDB4MmUsIDB4ZWQsIDB4NTgsIDB4MDgsIDB4MDAsIDB4YWYsIDB4YzAsIDB4NmIsCi0gIDB4OGEsIDB4ZDcsIDB4YjcsIDB4ODEsIDB4YmMsIDB4NWIsIDB4NGEsIDB4MjcsIDB4Y2UsIDB4MTUsIDB4NzAsIDB4YWMsCi0gIDB4OWYsIDB4ZjIsIDB4YmEsIDB4MzksIDB4ZDQsIDB4OWQsIDB4ZTcsIDB4YjgsIDB4YzQsIDB4ZDksIDB4MzcsIDB4NWUsCi0gIDB4OWIsIDB4YWEsIDB4ZjAsIDB4ZjYsIDB4NTEsIDB4OWIsIDB4NTAsIDB4ZjEsIDB4YjcsIDB4MjcsIDB4YmQsIDB4YTcsCi0gIDB4NzUsIDB4OWYsIDB4OTIsIDB4MTAsIDB4M2MsIDB4YTMsIDB4N2MsIDB4MzgsIDB4MmUsIDB4NWYsIDB4OTksIDB4ZmMsCi0gIDB4YmQsIDB4M2YsIDB4MDMsIDB4NWEsIDB4Y2QsIDB4ZDcsIDB4ZmUsIDB4YzAsIDB4M2UsIDB4MzYsIDB4OGQsIDB4NzMsCi0gIDB4ZGMsIDB4ZjYsIDB4ODIsIDB4MGQsIDB4NzIsIDB4NDIsIDB4YjQsIDB4ZDMsIDB4MzgsIDB4YmEsIDB4YTksIDB4MTYsCi0gIDB4MGMsIDB4OGMsIDB4YWYsIDB4OTUsIDB4MDIsIDB4YmIsIDB4ZTUsIDB4NTQsIDB4N2IsIDB4ZGMsIDB4NWQsIDB4YzksCi0gIDB4ZDQsIDB4ZGQsIDB4MTIsIDB4ZDYsIDB4YmEsIDB4ODksIDB4NmMsIDB4YjUsIDB4ZmIsIDB4NmYsIDB4OWMsIDB4YWIsCi0gIDB4MzgsIDB4N2UsIDB4ZGEsIDB4NTQsIDB4MWQsIDB4YmMsIDB4NjcsIDB4ZWIsIDB4ZjIsIDB4ZmQsIDB4YWQsIDB4NDQsCi0gIDB4ZDIsIDB4OWEsIDB4ODYsIDB4NmEsIDB4MGMsIDB4MzYsIDB4MDAsIDB4Y2QsIDB4MTgsIDB4ZWUsIDB4OTAsIDB4NWUsCi0gIDB4MDUsIDB4MzIsIDB4MGMsIDB4OWIsIDB4MzUsIDB4NzgsIDB4ODUsIDB4NjIsIDB4MjIsIDB4NjUsIDB4MDYsIDB4MTcsCi0gIDB4MDQsIDB4ZjAsIDB4ODksIDB4NzksIDB4ZDMsIDB4NDEsIDB4OWIsIDB4YzcsIDB4OWYsIDB4YmQsIDB4MmIsIDB4NjcsCi0gIDB4NzUsIDB4N2YsIDB4MDYsIDB4ZjksIDB4YTUsIDB4NmQsIDB4OWMsIDB4ZmYsIDB4MDcsIDB4YzMsIDB4ZTcsIDB4N2YsCi0gIDB4MWIsIDB4ZjMsIDB4MmQsIDB4MmYsIDB4YTcsIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OTMsIDB4YTUsIDB4MjEsCi0gIDB4OTAsIDB4ODUsIDB4MjIsIDB4YTIsIDB4NTgsIDB4NTAsIDB4NDEsIDB4MDksIDB4YWMsIDB4Y2QsIDB4NjQsIDB4NTQsCi0gIDB4MDIsIDB4YjEsIDB4N2IsIDB4MGIsIDB4NTAsIDB4NTIsIDB4YzgsIDB4OWYsIDB4YjAsIDB4OTgsIDB4M2YsIDB4ZDcsCi0gIDB4ZTMsIDB4NzksIDB4NzYsIDB4ZDEsIDB4OWIsIDB4ZGUsIDB4OTgsIDB4MzgsIDB4NjAsIDB4N2IsIDB4YTgsIDB4ZjEsCi0gIDB4MDksIDB4MTEsIDB4MzYsIDB4OGEsIDB4NGEsIDB4ZTIsIDB4YjMsIDB4YTUsIDB4MjksIDB4NzUsIDB4NjYsIDB4OTMsCi0gIDB4YzEsIDB4YTQsIDB4Y2QsIDB4NmQsIDB4MGMsIDB4ZDksIDB4MDIsIDB4MzUsIDB4NDMsIDB4ZjUsIDB4NjEsIDB4YjYsCi0gIDB4YTQsIDB4NzYsIDB4MjksIDB4MDYsIDB4NzEsIDB4NzAsIDB4OGYsIDB4YmYsIDB4ZTgsIDB4NzAsIDB4YzksIDB4OTUsCi0gIDB4OWUsIDB4ZmMsIDB4ZjgsIDB4YzIsIDB4MTMsIDB4ZTMsIDB4NDksIDB4OTUsIDB4NjEsIDB4MWIsIDB4NzksIDB4MjQsCi0gIDB4ZTAsIDB4NTgsIDB4ODAsIDB4OGEsIDB4ODAsIDB4ZDEsIDB4NTksIDB4YTcsIDB4OTEsIDB4MDIsIDB4MTEsIDB4ZDMsCi0gIDB4NWQsIDB4MmEsIDB4ODAsIDB4YWYsIDB4ZGYsIDB4OTAsIDB4ZTgsIDB4ZTQsIDB4YmMsIDB4NDcsIDB4YmQsIDB4MjgsCi0gIDB4ODIsIDB4MDIsIDB4ZDQsIDB4YmQsIDB4Y2UsIDB4YWQsIDB4MDgsIDB4ZjAsIDB4MGIsIDB4NGYsIDB4ZGMsIDB4MzksCi0gIDB4NTAsIDB4MTUsIDB4YjcsIDB4NmEsIDB4ZTUsIDB4NGYsIDB4OTQsIDB4N2UsIDB4N2EsIDB4NDEsIDB4ZDksIDB4ZTIsCi0gIDB4MWQsIDB4MmIsIDB4ZDcsIDB4ODAsIDB4Y2YsIDB4OGEsIDB4MjgsIDB4YmQsIDB4NmMsIDB4OTcsIDB4YzgsIDB4ZTMsCi0gIDB4NTYsIDB4N2UsIDB4YWIsIDB4YjYsIDB4MDksIDB4ZDcsIDB4YjYsIDB4OWIsIDB4ZTksIDB4Y2MsIDB4NTksIDB4NzMsCi0gIDB4OTUsIDB4NWUsIDB4YTQsIDB4MmQsIDB4ZWEsIDB4NzAsIDB4MTksIDB4ZGQsIDB4NjYsIDB4ODcsIDB4YTAsIDB4YWIsCi0gIDB4MWEsIDB4ZDEsIDB4MzksIDB4NzAsIDB4MjYsIDB4YjcsIDB4M2EsIDB4MjcsIDB4ODcsIDB4NzAsIDB4M2IsIDB4NzcsCi0gIDB4NDcsIDB4Y2EsIDB4OGUsIDB4MzgsIDB4YjgsIDB4OTUsIDB4YzcsIDB4YjYsIDB4OWIsIDB4OGEsIDB4MjYsIDB4NjgsCi0gIDB4OGYsIDB4YmIsIDB4ZGYsIDB4MTksIDB4MTgsIDB4YzgsIDB4NzcsIDB4Y2EsIDB4OTQsIDB4MmMsIDB4OTQsIDB4NmUsCi0gIDB4YTUsIDB4MzgsIDB4ZGUsIDB4ZDYsIDB4NmYsIDB4NzUsIDB4NWIsIDB4NTksIDB4YmIsIDB4ZDgsIDB4ZjUsIDB4NjksCi0gIDB4NTQsIDB4ZDAsIDB4ZDgsIDB4YzcsIDB4NTcsIDB4OGIsIDB4YjEsIDB4ZTcsIDB4NjcsIDB4YmQsIDB4ZjksIDB4MDMsCi0gIDB4YmEsIDB4NjAsIDB4OGEsIDB4ODcsIDB4ODIsIDB4YjgsIDB4NGUsIDB4MDAsIDB4MjksIDB4NTAsIDB4MDEsIDB4NTgsCi0gIDB4MjAsIDB4OTQsIDB4OTAsIDB4NTAsIDB4NWYsIDB4ZTcsIDB4ZmEsIDB4MmYsIDB4ZWIsIDB4ZGYsIDB4NTEsIDB4MDcsCi0gIDB4ZmUsIDB4YjcsIDB4ZDcsIDB4NzMsIDB4OTEsIDB4MWUsIDB4OGYsIDB4YTYsIDB4M2YsIDB4YjgsIDB4ZTksIDB4YTUsCi0gIDB4MzEsIDB4MWYsIDB4MGYsIDB4YzEsIDB4MWMsIDB4ZjIsIDB4NmYsIDB4ZjYsIDB4MjgsIDB4YjUsIDB4OGMsIDB4OWMsCi0gIDB4ODAsIDB4M2EsIDB4MWUsIDB4ODcsIDB4ZjYsIDB4N2UsIDB4MjEsIDB4NzUsIDB4ODAsIDB4NDMsIDB4YjQsIDB4MjgsCi0gIDB4ZmMsIDB4MDcsIDB4OGYsIDB4MTAsIDB4MDIsIDB4MDAsIDB4NDUsIDB4NmQsIDB4Y2QsIDB4N2UsIDB4MmIsIDB4YWQsCi0gIDB4Y2YsIDB4YjEsIDB4OTUsIDB4ZGQsIDB4ZTUsIDB4YjMsIDB4N2EsIDB4NGIsIDB4ZmYsIDB4Y2MsIDB4YTcsIDB4YWEsCi0gIDB4NTEsIDB4NGEsIDB4YWIsIDB4OWIsIDB4MWIsIDB4M2MsIDB4NmIsIDB4YTUsIDB4NTgsIDB4YjAsIDB4YWQsIDB4MmIsCi0gIDB4NjIsIDB4NmQsIDB4N2UsIDB4OTgsIDB4NDIsIDB4MWEsIDB4ODQsIDB4Y2YsIDB4ZjQsIDB4NzEsIDB4NTUsIDB4ODksCi0gIDB4NDgsIDB4YWIsIDB4ZWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MTAsIDB4NmEsIDB4OGQsIDB4ZTgsIDB4ZWQsIDB4MzksCi0gIDB4NzAsIDB4NjYsIDB4ZDQsIDB4MWIsIDB4Y2QsIDB4NzcsIDB4MzAsIDB4M2YsIDB4OWMsIDB4NzUsIDB4N2YsIDB4ZDYsCi0gIDB4ZmIsIDB4NjYsIDB4MjgsIDB4MTYsIDB4YmYsIDB4MWUsIDB4OGEsIDB4MmIsIDB4NDQsIDB4NDgsIDB4NTcsIDB4YTEsCi0gIDB4NjcsIDB4YmYsIDB4ODAsIDB4NzcsIDB4ZDcsIDB4MWMsIDB4NjMsIDB4OWQsIDB4NjEsIDB4MzAsIDB4ODYsIDB4OWQsCi0gIDB4MTgsIDB4NWYsIDB4MWMsIDB4ZjIsIDB4YzIsIDB4ZmQsIDB4MzQsIDB4YTEsIDB4OGQsIDB4MWEsIDB4ZmQsIDB4NTYsCi0gIDB4MTQsIDB4NjMsIDB4ODIsIDB4YTEsIDB4ZWQsIDB4NWMsIDB4ZDksIDB4NDUsIDB4MDUsIDB4ODYsIDB4Y2EsIDB4ODEsCi0gIDB4MWMsIDB4OWMsIDB4OGQsIDB4MWQsIDB4NjcsIDB4YmQsIDB4NTEsIDB4YTAsIDB4YTcsIDB4NjQsIDB4MGQsIDB4ZjksCi0gIDB4NDQsIDB4NmQsIDB4YTgsIDB4NjIsIDB4MjIsIDB4MzcsIDB4NTIsIDB4ZDIsIDB4ZDYsIDB4MzMsIDB4ZDIsIDB4YzUsCi0gIDB4ZDIsIDB4YjcsIDB4MzMsIDB4N2EsIDB4NzYsIDB4MzYsIDB4ZWUsIDB4MzcsIDB4NjMsIDB4OWYsIDB4MzMsIDB4MWYsCi0gIDB4MmUsIDB4YWYsIDB4YzYsIDB4ZWIsIDB4ZjcsIDB4NzYsIDB4NWUsIDB4MWYsIDB4MmYsIDB4OWIsIDB4Y2MsIDB4MDEsCi0gIDB4YzAsIDB4MjEsIDB4MWEsIDB4OTMsIDB4OTUsIDB4MTUsIDB4OTQsIDB4OGQsIDB4MjIsIDB4MjEsIDB4NjAsIDB4ODIsCi0gIDB4MTQsIDB4NmYsIDB4NWIsIDB4OGQsIDB4YzUsIDB4ZDMsIDB4NzYsIDB4YTUsIDB4MDAsIDB4MDIsIDB4MTEsIDB4NTEsCi0gIDB4ZjYsIDB4MWEsIDB4MDUsIDB4MGEsIDB4OTYsIDB4YjgsIDB4ZmIsIDB4M2IsIDB4ZjcsIDB4M2MsIDB4ZjksIDB4YjMsCi0gIDB4YzcsIDB4NGYsIDB4YmUsIDB4OWMsIDB4YjQsIDB4MmQsIDB4YmYsIDB4M2UsIDB4MzUsIDB4YzQsIDB4MGUsIDB4NTQsCi0gIDB4NjgsIDB4YjAsIDB4NjQsIDB4YzYsIDB4YTksIDB4Y2QsIDB4MGUsIDB4ZGEsIDB4MDksIDB4NTAsIDB4NTMsIDB4ZTYsCi0gIDB4NjcsIDB4Y2IsIDB4NDYsIDB4YmUsIDB4MmQsIDB4NDgsIDB4MmEsIDB4MDYsIDB4YjEsIDB4MWYsIDB4NjQsIDB4NDUsCi0gIDB4MjUsIDB4MjIsIDB4OGUsIDB4MjksIDB4Y2QsIDB4NjAsIDB4N2EsIDB4OGMsIDB4YjQsIDB4ZmEsIDB4ZTUsIDB4NTUsCi0gIDB4ODIsIDB4OTksIDB4MzcsIDB4YjEsIDB4YzIsIDB4MmIsIDB4YjksIDB4NDIsIDB4NTcsIDB4ZGUsIDB4OGIsIDB4ZGUsCi0gIDB4MWQsIDB4NjYsIDB4NWQsIDB4ZjUsIDB4ZTcsIDB4OTEsIDB4NzgsIDB4NjMsIDB4MzEsIDB4M2YsIDB4N2EsIDB4MmYsCi0gIDB4ZjUsIDB4YmQsIDB4NTYsIDB4ZjgsIDB4ZjYsIDB4OTksIDB4YmYsIDB4NWEsIDB4ZjAsIDB4MTUsIDB4YjYsIDB4YmMsCi0gIDB4NDcsIDB4YzksIDB4Y2UsIDB4ODQsIDB4NjUsIDB4NTcsIDB4NTcsIDB4N2EsIDB4OTQsIDB4NjQsIDB4M2IsIDB4MzEsCi0gIDB4NWQsIDB4ZDUsIDB4ODEsIDB4OWYsIDB4ODcsIDB4ZjIsIDB4NzksIDB4N2QsIDB4M2UsIDB4NzksIDB4ODUsIDB4ODQsCi0gIDB4OTMsIDB4ZDEsIDB4MmYsIDB4YzEsIDB4ZDEsIDB4ZmIsIDB4MGUsIDB4OGMsIDB4MGMsIDB4ZGQsIDB4OTEsIDB4NTcsCi0gIDB4ZjgsIDB4OGUsIDB4OGQsIDB4YWIsIDB4ZjQsIDB4NWQsIDB4MDMsIDB4YTMsIDB4NzcsIDB4MzksIDB4YjYsIDB4ZDYsCi0gIDB4ZTgsIDB4ODYsIDB4NDMsIDB4MTgsIDB4ZjAsIDB4YWQsIDB4NTAsIDB4MDEsIDB4OTcsIDB4YTIsIDB4ZGUsIDB4YzgsCi0gIDB4OTgsIDB4MGEsIDB4OGIsIDB4NmQsIDB4NDcsIDB4MTIsIDB4OTIsIDB4ZTIsIDB4OGUsIDB4YzEsIDB4Y2IsIDB4NmIsCi0gIDB4OGYsIDB4MDUsIDB4M2EsIDB4ODgsIDB4YjIsIDB4ZTgsIDB4NGYsIDB4NmEsIDB4ZDksIDB4MjAsIDB4ZjcsIDB4ZWUsCi0gIDB4M2UsIDB4MTUsIDB4NmIsIDB4YTMsIDB4YmQsIDB4OGQsIDB4YmYsIDB4MTQsIDB4ODIsIDB4OGQsIDB4YTYsIDB4YzYsCi0gIDB4ZTAsIDB4YmUsIDB4NTMsIDB4MWEsIDB4M2QsIDB4ZmMsIDB4OWYsIDB4NjcsIDB4OGEsIDB4MzksIDB4MDEsIDB4YzksCi0gIDB4OGEsIDB4OTEsIDB4MjMsIDB4MjIsIDB4MTgsIDB4NTAsIDB4MzcsIDB4MGIsIDB4MjIsIDB4YjIsIDB4NWQsIDB4MjksCi0gIDB4NTYsIDB4MTQsIDB4MmEsIDB4ODAsIDB4MTAsIDB4NDIsIDB4NTAsIDB4YzcsIDB4ZjIsIDB4NGUsIDB4NWIsIDB4ZTksCi0gIDB4Y2MsIDB4YWIsIDB4YzMsIDB4OWEsIDB4ZTksIDB4ZWUsIDB4MGIsIDB4OTMsIDB4NTksIDB4YzUsIDB4ZDgsIDB4NGQsCi0gIDB4NzIsIDB4ZGQsIDB4ODMsIDB4YjMsIDB4MGIsIDB4ZDcsIDB4ZGIsIDB4OWQsIDB4MWEsIDB4NzUsIDB4NmMsIDB4ZmMsCi0gIDB4MzksIDB4NzgsIDB4OGMsIDB4OTYsIDB4MzIsIDB4NjgsIDB4YzEsIDB4MGEsIDB4MDAsIDB4MjEsIDB4NzIsIDB4MTYsCi0gIDB4MDQsIDB4N2IsIDB4ZjYsIDB4NTUsIDB4NDYsIDB4ODUsIDB4NzgsIDB4MDYsIDB4ZDQsIDB4ODMsIDB4NTEsIDB4ZTMsCi0gIDB4YTQsIDB4ZGIsIDB4NTAsIDB4OTYsIDB4M2UsIDB4MTYsIDB4MGMsIDB4MTcsIDB4ZTAsIDB4OTQsIDB4ZGQsIDB4NjgsCi0gIDB4ZTEsIDB4ZjgsIDB4ZTEsIDB4ODcsIDB4OGYsIDB4MjIsIDB4YjMsIDB4NjUsIDB4NTcsIDB4YTksIDB4MGEsIDB4MjIsCi0gIDB4NWMsIDB4NjQsIDB4YzksIDB4YTMsIDB4YzksIDB4NmIsIDB4YjUsIDB4NjEsIDB4MzEsIDB4YjgsIDB4ZjAsIDB4NmEsCi0gIDB4MmEsIDB4YmQsIDB4MTMsIDB4MmYsIDB4ZTcsIDB4ZGQsIDB4MTgsIDB4MGMsIDB4NmEsIDB4OWYsIDB4NzEsIDB4NzksCi0gIDB4MDAsIDB4MTEsIDB4NTYsIDB4MzEsIDB4MGQsIDB4ZWUsIDB4YjYsIDB4MzQsIDB4ZDUsIDB4ODEsIDB4ZTMsIDB4ZTgsCi0gIDB4NWIsIDB4ZDgsIDB4MjAsIDB4MWIsIDB4M2QsIDB4ZTYsIDB4NTMsIDB4MWEsIDB4YTIsIDB4YjMsIDB4NDksIDB4NjUsCi0gIDB4MzUsIDB4OTUsIDB4OGYsIDB4NjQsIDB4YzEsIDB4NzIsIDB4ZWUsIDB4OWQsIDB4ZmYsIDB4M2EsIDB4MmQsIDB4ZGYsCi0gIDB4YjcsIDB4MTcsIDB4ZWIsIDB4ZGYsIDB4ODUsIDB4MGUsIDB4NzUsIDB4N2IsIDB4MTIsIDB4ZTUsIDB4ZTAsIDB4OWYsCi0gIDB4MTEsIDB4YTMsIDB4MTYsIDB4N2UsIDB4OWYsIDB4MWQsIDB4NzIsIDB4NDcsIDB4M2MsIDB4YWUsIDB4MDYsIDB4NDAsCi0gIDB4ODEsIDB4NjMsIDB4ODUsIDB4MDQsIDB4MGQsIDB4MWUsIDB4NGIsIDB4N2QsIDB4M2UsIDB4YTYsIDB4OWEsIDB4YzYsCi0gIDB4NDUsIDB4NWYsIDB4OTMsIDB4ZGUsIDB4ZjcsIDB4MGIsIDB4YzMsIDB4YWYsIDB4ZDEsIDB4NzgsIDB4N2UsIDB4ZTQsCi0gIDB4YWIsIDB4ZWEsIDB4ZjgsIDB4MTEsIDB4ZTEsIDB4NzYsIDB4ZGEsIDB4ZGUsIDB4ZDAsIDB4MDcsIDB4MjEsIDB4MWEsCi0gIDB4ODgsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZWQsIDB4NjUsIDB4YTMsIDB4NDEsIDB4NDksIDB4ZTgsCi0gIDB4NjgsIDB4MjMsIDB4ODUsIDB4MmEsIDB4Y2MsIDB4ZGUsIDB4YTQsIDB4MGEsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MTIsCi0gIDB4NTAsIDB4MzAsIDB4ZmYsIDB4NDYsIDB4OGMsIDB4NjYsIDB4ZDgsIDB4ZWIsIDB4ZTIsIDB4MjcsIDB4ZDEsIDB4NTksCi0gIDB4N2QsIDB4ZDcsIDB4YzYsIDB4MWQsIDB4MjYsIDB4NDMsIDB4MzQsIDB4Y2EsIDB4ZjAsIDB4MGEsIDB4ZWQsIDB4NzEsCi0gIDB4YmUsIDB4ODIsIDB4MDMsIDB4MTgsIDB4ZTIsIDB4ODgsIDB4YjQsIDB4ZDMsIDB4MmMsIDB4NjgsIDB4MWUsIDB4MmIsCi0gIDB4ZDQsIDB4YzYsIDB4ZTcsIDB4YjUsIDB4NjUsIDB4MDAsIDB4NjUsIDB4YmMsIDB4YjUsIDB4ODcsIDB4ZTUsIDB4ZjEsCi0gIDB4MTYsIDB4NzAsIDB4ZjQsIDB4MjUsIDB4ZjMsIDB4M2MsIDB4NDYsIDB4NzIsIDB4NGUsIDB4MGIsIDB4NzMsIDB4MTAsCi0gIDB4MjAsIDB4MTYsIDB4YzcsIDB4N2QsIDB4YmUsIDB4OTgsIDB4N2IsIDB4MWIsIDB4YTUsIDB4MjUsIDB4N2EsIDB4ZmEsCi0gIDB4NzcsIDB4ZTQsIDB4ODcsIDB4MjAsIDB4ZTksIDB4NGUsIDB4NDgsIDB4ZjEsIDB4M2IsIDB4NDIsIDB4Y2IsIDB4NTcsCi0gIDB4YzEsIDB4OGIsIDB4YTQsIDB4Y2MsIDB4YWIsIDB4YmEsIDB4N2YsIDB4NWUsIDB4ZmIsIDB4ODEsIDB4OTMsIDB4ZTQsCi0gIDB4YTgsIDB4YjUsIDB4YjAsIDB4Y2MsIDB4NGUsIDB4NWIsIDB4YTIsIDB4ZDcsIDB4YjcsIDB4MzgsIDB4MDYsIDB4OWEsCi0gIDB4NjQsIDB4OWQsIDB4ZmEsIDB4MTUsIDB4MzMsIDB4MWYsIDB4NDYsIDB4NTIsIDB4ZDEsIDB4MTEsIDB4MGEsIDB4MDIsCi0gIDB4YmUsIDB4NzQsIDB4YWQsIDB4M2EsIDB4MDIsIDB4NzgsIDB4MDUsIDB4ZmEsIDB4NWMsIDB4ZTQsIDB4YTcsIDB4OTcsCi0gIDB4NGIsIDB4MjYsIDB4MDEsIDB4MzMsIDB4MDksIDB4YTAsIDB4YzgsIDB4ZmUsIDB4YWMsIDB4YmEsIDB4OGUsIDB4NWIsCi0gIDB4ODMsIDB4MDMsIDB4YTEsIDB4NDYsIDB4ZjgsIDB4Y2MsIDB4MjksIDB4ZDEsIDB4Y2IsIDB4YjAsIDB4ODYsIDB4ZDAsCi0gIDB4YjgsIDB4NWYsIDB4NDYsIDB4ZWYsIDB4YTEsIDB4NDEsIDB4OGQsIDB4YWIsIDB4NTYsIDB4ODIsIDB4NDYsIDB4MmEsCi0gIDB4YTEsIDB4NDQsIDB4NDQsIDB4MGIsIDB4N2EsIDB4MTYsIDB4NTAsIDB4N2YsIDB4NTAsIDB4ZmIsIDB4MzMsIDB4ODQsCi0gIDB4ZmIsIDB4ZWUsIDB4OWUsIDB4OGMsIDB4ZjYsIDB4NDksIDB4ZjEsIDB4NTYsIDB4NGUsIDB4OTUsIDB4ODUsIDB4ODIsCi0gIDB4N2UsIDB4N2UsIDB4M2YsIDB4OTksIDB4ZTgsIDB4ZmQsIDB4MmYsIDB4NTcsIDB4NWMsIDB4YzAsIDB4MGYsIDB4M2UsCi0gIDB4YjYsIDB4MWEsIDB4M2MsIDB4OGEsIDB4ODMsIDB4NjEsIDB4NDAsIDB4OGMsIDB4M2IsIDB4YmEsIDB4YTksIDB4NGEsCi0gIDB4OTIsIDB4YmEsIDB4YzgsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MTUsIDB4NjgsIDB4ZTQsIDB4MzksIDB4MjcsIDB4MjcsCi0gIDB4NDQsIDB4YTgsIDB4YTAsIDB4MmEsIDB4MzYsIDB4YWEsIDB4MzksIDB4MWYsIDB4YjcsIDB4YWMsIDB4NTIsIDB4MDMsCi0gIDB4NDAsIDB4MTMsIDB4NjMsIDB4MWUsIDB4MmQsIDB4NDUsIDB4ODIsIDB4N2EsIDB4MjYsIDB4OGIsIDB4OWEsIDB4MDgsCi0gIDB4YTUsIDB4N2IsIDB4YjYsIDB4MzksIDB4NGUsIDB4OTYsIDB4NTYsIDB4YTgsIDB4NjUsIDB4MTMsIDB4ZjcsIDB4YzUsCi0gIDB4ZjQsIDB4NGEsIDB4MzgsIDB4YWQsIDB4NGQsIDB4MjQsIDB4OWQsIDB4NmYsIDB4NzMsIDB4MjMsIDB4NjEsIDB4NzQsCi0gIDB4ZGUsIDB4MGIsIDB4MmYsIDB4NWMsIDB4YjMsIDB4M2IsIDB4MzYsIDB4ZjYsIDB4ZGEsIDB4OWIsIDB4ZjMsIDB4ZTksCi0gIDB4ZjgsIDB4YWQsIDB4Y2UsIDB4NGUsIDB4YzUsIDB4YzksIDB4NjMsIDB4ZWMsIDB4ZDEsIDB4ZDIsIDB4ZGIsIDB4ZjEsCi0gIDB4YzIsIDB4ZTYsIDB4MTQsIDB4OWQsIDB4M2QsIDB4ZGEsIDB4NzgsIDB4NWEsIDB4MTksIDB4NmEsIDB4ZTQsIDB4ZWQsCi0gIDB4NjksIDB4ZjUsIDB4NWQsIDB4MWYsIDB4NTYsIDB4YmUsIDB4N2MsIDB4OTEsIDB4MjgsIDB4ZGUsIDB4MGYsIDB4NTQsCi0gIDB4ZjcsIDB4ZDAsIDB4NmEsIDB4MWEsIDB4MTEsIDB4MDIsIDB4MDYsIDB4ZTgsIDB4MTUsIDB4OGUsIDB4MjMsIDB4NGYsCi0gIDB4YzUsIDB4MzMsIDB4NTgsIDB4NmMsIDB4YTMsIDB4MjEsIDB4ODIsIDB4ODcsIDB4YzEsIDB4YzMsIDB4MmYsIDB4MWIsCi0gIDB4MTMsIDB4M2QsIDB4ODYsIDB4MmQsIDB4ZWMsIDB4ZTIsIDB4MzcsIDB4NjUsIDB4ZTksIDB4MmQsIDB4OTMsIDB4ZGMsCi0gIDB4NWQsIDB4M2IsIDB4N2IsIDB4OWEsIDB4ZjYsIDB4OTgsIDB4YzQsIDB4MjIsIDB4OWQsIDB4MjQsIDB4MTAsIDB4OTksCi0gIDB4OTMsIDB4MGQsIDB4NWEsIDB4NTEsIDB4ZjcsIDB4OTcsIDB4YjEsIDB4NjIsIDB4YTUsIDB4OGEsIDB4OTIsIDB4NTAsCi0gIDB4YjcsIDB4ZjcsIDB4YWYsIDB4MWUsIDB4NWYsIDB4ZGIsIDB4YmYsIDB4YjQsIDB4ZmMsIDB4YzgsIDB4NzAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjMsIDB4NjUsIDB4YTUsIDB4YTAsIDB4ODgsCi0gIDB4ZWEsIDB4NDQsIDB4MjEsIDB4MDksIDB4MDUsIDB4MDQsIDB4MTAsIDB4YjMsIDB4ODgsIDB4NmUsIDB4NTYsIDB4YTAsCi0gIDB4MDYsIDB4YzAsIDB4MDksIDB4NDIsIDB4NTUsIDB4YTUsIDB4N2IsIDB4ODksIDB4YjcsIDB4OGIsIDB4ZTEsIDB4ZDMsCi0gIDB4MjAsIDB4M2IsIDB4MTYsIDB4MGUsIDB4OTMsIDB4ZWYsIDB4N2IsIDB4YWEsIDB4ZTMsIDB4ZmEsIDB4OWYsIDB4Y2EsCi0gIDB4OTAsIDB4YzUsIDB4NmMsIDB4NWIsIDB4NmUsIDB4NGQsIDB4MGQsIDB4ZDcsIDB4NzYsIDB4YTQsIDB4NjksIDB4MjMsCi0gIDB4OTIsIDB4NTYsIDB4NjUsIDB4NGIsIDB4ZTksIDB4NmEsIDB4MGEsIDB4MzYsIDB4MjksIDB4NjUsIDB4ODcsIDB4Y2YsCi0gIDB4YmIsIDB4MDAsIDB4MDYsIDB4MGMsIDB4NGYsIDB4NTIsIDB4ZGUsIDB4ZjQsIDB4NGIsIDB4NjcsIDB4Y2IsIDB4MjUsCi0gIDB4ZmMsIDB4Y2QsIDB4YWUsIDB4YmIsIDB4MzcsIDB4MTksIDB4OTAsIDB4MmIsIDB4MDMsIDB4NjksIDB4NmYsIDB4YjIsCi0gIDB4YTEsIDB4MmMsIDB4NjMsIDB4MTEsIDB4MmQsIDB4ZWYsIDB4MjQsIDB4OWIsIDB4NjEsIDB4Y2EsIDB4MjQsIDB4ODgsCi0gIDB4ZDIsIDB4ZTQsIDB4ODMsIDB4NjEsIDB4NjIsIDB4YTYsIDB4NTMsIDB4MDMsIDB4NzUsIDB4MTIsIDB4YjcsIDB4MzAsCi0gIDB4ZWEsIDB4NGQsIDB4MmEsIDB4YTYsIDB4NzEsIDB4NjcsIDB4NmEsIDB4MjYsIDB4ODgsIDB4NmYsIDB4NDgsIDB4NzIsCi0gIDB4NGIsIDB4MjUsIDB4OGEsIDB4YzgsIDB4OWQsIDB4YzUsIDB4MGMsIDB4NWQsIDB4ZDUsIDB4ZDIsIDB4NmYsIDB4YzgsCi0gIDB4NzIsIDB4OTYsIDB4MWMsIDB4NGYsIDB4ZDYsIDB4YzksIDB4NTQsIDB4NjgsIDB4MmYsIDB4OTksIDB4MzMsIDB4OTksCi0gIDB4YjAsIDB4Y2IsIDB4YjIsIDB4MDIsIDB4MWEsIDB4ZjQsIDB4MGMsIDB4Y2UsIDB4ODgsIDB4ZWUsIDB4NmUsIDB4ZWYsCi0gIDB4NjUsIDB4ZTAsIDB4NDEsIDB4MDIsIDB4MmMsIDB4MDEsIDB4MzUsIDB4YTIsIDB4NjIsIDB4OWUsIDB4NGMsIDB4MzIsCi0gIDB4MjQsIDB4NDYsIDB4NjEsIDB4M2IsIDB4ZDYsIDB4ZjMsIDB4OGIsIDB4ODksIDB4NjQsIDB4NGIsIDB4ZjIsIDB4YTksCi0gIDB4MDAsIDB4ZjMsIDB4YTksIDB4M2QsIDB4YzYsIDB4MTksIDB4OWMsIDB4MjMsIDB4NGEsIDB4ZGYsIDB4YzEsIDB4NTUsCi0gIDB4NDYsIDB4ZDgsIDB4OWIsIDB4ZDgsIDB4MmYsIDB4ZGIsIDB4NDYsIDB4YmIsIDB4NGEsIDB4OTIsIDB4NzUsIDB4NDAsCi0gIDB4YTIsIDB4M2IsIDB4MmQsIDB4ZWIsIDB4NzIsIDB4MTcsIDB4ZGYsIDB4MTcsIDB4YzYsIDB4MjAsIDB4ZjEsIDB4ZWIsCi0gIDB4NDYsIDB4MTEsIDB4MTEsIDB4NzAsIDB4MzcsIDB4MGUsIDB4ZDUsIDB4MDEsIDB4NTMsIDB4OGEsIDB4ODMsIDB4NjUsCi0gIDB4NDUsIDB4MDAsIDB4NDAsIDB4OTAsIDB4MDQsIDB4YTcsIDB4OGQsIDB4MmYsIDB4ZmIsIDB4YmYsIDB4YWMsIDB4ZWMsCi0gIDB4NWEsIDB4MDEsIDB4MmMsIDB4ZDEsIDB4ZjksIDB4OWEsIDB4OGIsIDB4MjUsIDB4NGEsIDB4M2UsIDB4N2EsIDB4YmEsCi0gIDB4NzQsIDB4NzMsIDB4YjAsIDB4NGYsIDB4MDksIDB4ZTMsIDB4YjMsIDB4YTYsIDB4M2MsIDB4OGMsIDB4MzgsIDB4NGMsCi0gIDB4N2QsIDB4NDgsIDB4ZGMsIDB4MzIsIDB4MDUsIDB4ZWIsIDB4MjcsIDB4Y2MsIDB4YzYsIDB4MDMsIDB4Y2IsIDB4ODQsCi0gIDB4NTAsIDB4ZjMsIDB4NzUsIDB4ZTAsIDB4ZWEsIDB4MzQsIDB4ZDksIDB4NDEsIDB4MGIsIDB4OTEsIDB4OTQsIDB4ZDksCi0gIDB4ZTcsIDB4NTUsIDB4ZDMsIDB4NDYsIDB4MjksIDB4ODgsIDB4NmQsIDB4NzIsIDB4NTYsIDB4M2QsIDB4ZGMsIDB4M2EsCi0gIDB4MGIsIDB4OGEsIDB4OTgsIDB4NDUsIDB4YjUsIDB4MTcsIDB4NDUsIDB4MGQsIDB4NzMsIDB4ZTUsIDB4ZjUsIDB4MDIsCi0gIDB4OTEsIDB4NTgsIDB4NjIsIDB4ZDMsIDB4YzAsIDB4ZDQsIDB4ZTgsIDB4NWMsIDB4ZjQsIDB4MmEsIDB4ZTksIDB4ODksCi0gIDB4ZjMsIDB4NjgsIDB4OTUsIDB4Y2IsIDB4MTMsIDB4YTEsIDB4ZTQsIDB4Y2UsIDB4NzgsIDB4ODksIDB4MTIsIDB4NDcsCi0gIDB4ZmUsIDB4Y2YsIDB4YjEsIDB4NWYsIDB4ZjIsIDB4NTIsIDB4ZjgsIDB4ZGUsIDB4ZWYsIDB4ZDIsIDB4N2YsIDB4NzUsCi0gIDB4YjksIDB4ZjAsIDB4MDgsIDB4NDAsIDB4MzQsIDB4MGUsIDB4ZTQsIDB4ZjEsIDB4MWEsIDB4NDIsIDB4ODMsIDB4YmQsCi0gIDB4NWUsIDB4ZmMsIDB4NDksIDB4MzcsIDB4MTEsIDB4NDYsIDB4OWEsIDB4NmMsIDB4M2QsIDB4ZDIsIDB4OWEsIDB4MTcsCi0gIDB4OWEsIDB4NzMsIDB4NTcsIDB4YjYsIDB4ZjUsIDB4NTMsIDB4ODksIDB4NjcsIDB4YzIsIDB4YjIsIDB4NmEsIDB4ZjQsCi0gIDB4YWYsIDB4ZjAsIDB4MDgsIDB4YWUsIDB4ZDgsIDB4NmQsIDB4YWMsIDB4NzIsIDB4YWMsIDB4ZWYsIDB4ZTIsIDB4OGIsCi0gIDB4ZjMsIDB4NzksIDB4N2MsIDB4MWYsIDB4NTMsIDB4ZDYsIDB4ZmEsIDB4YmYsIDB4MTIsIDB4MDAsIDB4MzgsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZWQsIDB4NmQsIDB4NjEsIDB4YTEsIDB4ODksCi0gIDB4YWMsIDB4NDgsIDB4MTIsIDB4ODQsIDB4MDEsIDB4NTEsIDB4OTUsIDB4MmEsIDB4MDMsIDB4NzcsIDB4MDAsIDB4MDgsCi0gIDB4MjQsIDB4ZDgsIDB4OTMsIDB4YzEsIDB4MmEsIDB4ODgsIDB4OTEsIDB4NTQsIDB4NDIsIDB4MjgsIDB4NjQsIDB4ZTIsCi0gIDB4MTAsIDB4NGMsIDB4M2EsIDB4OGUsIDB4MjYsIDB4MDQsIDB4MWUsIDB4ZTgsIDB4YjMsIDB4YzIsIDB4M2UsIDB4MGUsCi0gIDB4N2UsIDB4NmQsIDB4ZmQsIDB4MWQsIDB4NmIsIDB4NGMsIDB4NjksIDB4ZWYsIDB4ZmUsIDB4NDYsIDB4NTMsIDB4N2MsCi0gIDB4M2EsIDB4ZDIsIDB4YzYsIDB4ZDQsIDB4YjgsIDB4MzgsIDB4NjEsIDB4MDYsIDB4YTMsIDB4NWUsIDB4N2UsIDB4MGEsCi0gIDB4MGIsIDB4ZDEsIDB4MzQsIDB4NWUsIDB4OTYsIDB4OGMsIDB4MjgsIDB4MTIsIDB4NWEsIDB4YzgsIDB4MjAsIDB4YTQsCi0gIDB4YzYsIDB4MmIsIDB4MDAsIDB4OGYsIDB4MjMsIDB4YjYsIDB4MDYsIDB4ZTcsIDB4ZTMsIDB4ODAsIDB4OTEsIDB4ODgsCi0gIDB4ZGYsIDB4MzAsIDB4YTUsIDB4OGQsIDB4OWEsIDB4NTUsIDB4ODIsIDB4ZjAsIDB4MzEsIDB4OGQsIDB4NDcsIDB4MGIsCi0gIDB4MTYsIDB4YmYsIDB4NDUsIDB4OTIsIDB4OTQsIDB4YzYsIDB4OTgsIDB4MjEsIDB4ZjMsIDB4ZDUsIDB4MDcsIDB4ZDksCi0gIDB4Y2MsIDB4NzEsIDB4ZTMsIDB4MjcsIDB4NWEsIDB4NWEsIDB4YjEsIDB4ZjEsIDB4ODEsIDB4ZmMsIDB4MmEsIDB4MDcsCi0gIDB4ZmQsIDB4NDUsIDB4ZjgsIDB4NjUsIDB4MzksIDB4OGUsIDB4ODgsIDB4NTQsIDB4ZmYsIDB4N2QsIDB4NzQsIDB4NDUsCi0gIDB4MGYsIDB4OGIsIDB4MzUsIDB4MjEsIDB4ZjQsIDB4NTksIDB4ZWQsIDB4ZmIsIDB4YTYsIDB4NzYsIDB4N2MsIDB4OGQsCi0gIDB4OTUsIDB4MTQsIDB4ZTksIDB4OTAsIDB4OGEsIDB4ZjMsIDB4NjgsIDB4MjcsIDB4ODAsIDB4MzUsIDB4MzAsIDB4YTIsCi0gIDB4NGMsIDB4OGMsIDB4MWEsIDB4MTAsIDB4ZWEsIDB4YzgsIDB4OGMsIDB4YzgsIDB4ZTUsIDB4YjYsIDB4MjIsIDB4MWUsCi0gIDB4ZTYsIDB4YjEsIDB4NGIsIDB4MTAsIDB4OWMsIDB4YTQsIDB4ZGYsIDB4Y2MsIDB4MDMsIDB4ZTAsIDB4ZDEsIDB4M2UsCi0gIDB4ZmIsIDB4NjUsIDB4M2QsIDB4MGQsIDB4MjAsIDB4NzgsIDB4OTUsIDB4MmUsIDB4OGMsIDB4ODMsIDB4MzIsIDB4ZWYsCi0gIDB4Y2QsIDB4ODMsIDB4MDksIDB4MTQsIDB4MjIsIDB4OTcsIDB4OGQsIDB4NGIsIDB4MjEsIDB4MWQsIDB4NmUsIDB4OGUsCi0gIDB4ZjMsIDB4MzUsIDB4MTMsIDB4YTEsIDB4NDYsIDB4OTUsIDB4ODYsIDB4N2YsIDB4N2YsIDB4ODcsIDB4MWYsIDB4NGUsCi0gIDB4NzMsIDB4MDAsIDB4MGYsIDB4M2UsIDB4YzUsIDB4MjksIDB4NDUsIDB4MDYsIDB4YzEsIDB4ODEsIDB4YjgsIDB4NzYsCi0gIDB4MDAsIDB4YTQsIDB4NTQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MzYsIDB4NzQsIDB4MzQsIDB4ZDYsIDB4YjQsCi0gIDB4YTIsIDB4MjgsIDB4MWYsIDB4NGMsIDB4ZGQsIDB4NzIsIDB4Y2UsIDB4YWUsIDB4YjAsIDB4NzQsIDB4NzYsIDB4ZWMsCi0gIDB4NmIsIDB4NTAsIDB4ZWYsIDB4YTUsIDB4OTksIDB4MTEsIDB4NjQsIDB4M2UsIDB4NGYsIDB4YWUsIDB4NzcsIDB4N2IsCi0gIDB4ZmQsIDB4ZjEsIDB4YmUsIDB4OWUsIDB4YTYsIDB4NjgsIDB4NGYsIDB4YjQsIDB4NGEsIDB4MmMsIDB4M2IsIDB4Y2YsCi0gIDB4MGQsIDB4ZDgsIDB4YTgsIDB4ZTIsIDB4ODgsIDB4ODMsIDB4MTQsIDB4NGIsIDB4MzAsIDB4YzYsIDB4OTcsIDB4N2IsCi0gIDB4NjIsIDB4YjgsIDB4MDMsIDB4MjEsIDB4NTgsIDB4NWQsIDB4NzMsIDB4OGIsIDB4NzEsIDB4MDEsIDB4YjUsIDB4NzYsCi0gIDB4MjMsIDB4ZTYsIDB4YmMsIDB4NzUsIDB4YWYsIDB4YTEsIDB4Y2UsIDB4MzcsIDB4ZWEsIDB4YmQsIDB4ZTEsIDB4NGMsCi0gIDB4ZjUsIDB4NDIsIDB4MGQsIDB4NzEsIDB4NWIsIDB4YzIsIDB4YzYsIDB4M2QsIDB4ZDksIDB4YzUsIDB4MWEsIDB4OTMsCi0gIDB4NzMsIDB4ZmQsIDB4OWYsIDB4ZDgsIDB4MzMsIDB4ZTIsIDB4MjUsIDB4MTAsIDB4N2IsIDB4YjQsIDB4YmQsIDB4NjAsCi0gIDB4ZjcsIDB4MTksIDB4MzEsIDB4Y2EsIDB4ODYsIDB4OTcsIDB4NzEsIDB4YWEsIDB4NmIsIDB4ODksIDB4NDUsIDB4ODUsCi0gIDB4OTYsIDB4ZDUsIDB4ZWQsIDB4NDEsIDB4MzAsIDB4ODAsIDB4YTIsIDB4NDIsIDB4ODgsIDB4YmIsIDB4YzksIDB4ZDUsCi0gIDB4ZWQsIDB4Y2IsIDB4NDgsIDB4NjQsIDB4NjAsIDB4NGUsIDB4YTYsIDB4ZmQsIDB4YTMsIDB4ZjIsIDB4ZjYsIDB4MTMsCi0gIDB4NzQsIDB4OGQsIDB4ZTcsIDB4NDEsIDB4NTEsIDB4OGYsIDB4NzUsIDB4OGQsIDB4YWYsIDB4ZDksIDB4MTYsIDB4YjEsCi0gIDB4YTcsIDB4NTcsIDB4YzAsIDB4ZmEsIDB4YjksIDB4ZjAsIDB4ZmMsIDB4ZmUsIDB4ZWIsIDB4OGQsIDB4YjQsIDB4MDMsCi0gIDB4MDcsIDB4MjEsIDB4MWEsIDB4OGMsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZWQsIDB4NmYsIDB4NjIsCi0gIDB4OGEsIDB4MTAsIDB4ODQsIDB4MzQsIDB4MTQsIDB4MTEsIDB4NDIsIDB4NjIsIDB4YWEsIDB4ZjMsIDB4ODEsIDB4ODgsCi0gIDB4MjgsIDB4NTAsIDB4MjAsIDB4MDQsIDB4OTEsIDB4ODMsIDB4MzIsIDB4MzEsIDB4MTEsIDB4MzAsIDB4MjgsIDB4NzgsCi0gIDB4ZGEsIDB4NGIsIDB4ZmEsIDB4YjYsIDB4NzEsIDB4ODksIDB4YTgsIDB4MWUsIDB4OTMsIDB4NjEsIDB4Y2QsIDB4OWMsCi0gIDB4NTMsIDB4NzIsIDB4NzMsIDB4NzksIDB4ZjYsIDB4MWYsIDB4MjQsIDB4NTgsIDB4ZjMsIDB4NWIsIDB4NjUsIDB4YTcsCi0gIDB4OWIsIDB4MjMsIDB4YzgsIDB4NzIsIDB4YjksIDB4OGUsIDB4ODgsIDB4MTEsIDB4NjUsIDB4NDcsIDB4YTcsIDB4OGYsCi0gIDB4ODgsIDB4NjgsIDB4ZjksIDB4MTUsIDB4YzQsIDB4OTUsIDB4MjYsIDB4Y2QsIDB4MGQsIDB4YTgsIDB4NWYsIDB4MTYsCi0gIDB4ZDgsIDB4ZWMsIDB4YzYsIDB4YTcsIDB4MzgsIDB4MGIsIDB4MGMsIDB4MGIsIDB4MjMsIDB4MGEsIDB4OWIsIDB4YTIsCi0gIDB4Y2YsIDB4YzcsIDB4MGQsIDB4M2QsIDB4MzcsIDB4OGYsIDB4N2EsIDB4N2QsIDB4NTcsIDB4ZDUsIDB4NTksIDB4MzYsCi0gIDB4NjIsIDB4ODQsIDB4YmEsIDB4ZGUsIDB4ZjIsIDB4NjQsIDB4NzcsIDB4ZTcsIDB4YTYsIDB4OTUsIDB4NGQsIDB4NzMsCi0gIDB4M2MsIDB4MDcsIDB4OWEsIDB4YjksIDB4ZTQsIDB4NjYsIDB4MjEsIDB4YzEsIDB4MWUsIDB4NzEsIDB4MTMsIDB4NjAsCi0gIDB4N2IsIDB4MjQsIDB4YWQsIDB4NGIsIDB4NjEsIDB4NDcsIDB4NDAsIDB4ZjQsIDB4ZWEsIDB4ZjIsIDB4YzYsIDB4Y2QsCi0gIDB4MDUsIDB4NWMsIDB4NDIsIDB4OWUsIDB4NmUsIDB4YmUsIDB4MWEsIDB4NGIsIDB4YWIsIDB4OTAsIDB4YjUsIDB4MjksCi0gIDB4ODcsIDB4NTEsIDB4OWUsIDB4NjksIDB4NzcsIDB4ZWQsIDB4NjgsIDB4MzIsIDB4YjYsIDB4YmUsIDB4YTMsIDB4OTMsCi0gIDB4OWEsIDB4NjcsIDB4YzIsIDB4ZDMsIDB4YzcsIDB4MTcsIDB4ODQsIDB4ZjAsIDB4NjEsIDB4ODgsIDB4NzQsIDB4ZDYsCi0gIDB4NTEsIDB4OTAsIDB4NWIsIDB4NDAsIDB4ODQsIDB4MzYsIDB4NjcsIDB4NDAsIDB4YTQsIDB4Y2YsIDB4NmUsIDB4ZGQsCi0gIDB4MzYsIDB4NWIsIDB4YTgsIDB4ZGUsIDB4YTQsIDB4NWMsIDB4ZmIsIDB4Y2YsIDB4ZjcsIDB4ZTUsIDB4MjYsIDB4ODQsCi0gIDB4NWQsIDB4NDYsIDB4YmEsIDB4NjQsIDB4OGQsIDB4ODMsIDB4MDAsIDB4YTksIDB4YmEsIDB4ZDIsIDB4ZDgsIDB4YmMsCi0gIDB4OGQsIDB4YzYsIDB4YmMsIDB4ZGQsIDB4YWQsIDB4NTksIDB4ZmIsIDB4NTIsIDB4N2YsIDB4ZWQsIDB4MjEsIDB4Y2QsCi0gIDB4ZGIsIDB4YjEsIDB4ZDksIDB4ZmMsIDB4ZmQsIDB4M2QsIDB4NzgsIDB4ZjksIDB4N2IsIDB4NzgsIDB4MDAsIDB4M2IsCi0gIDB4YjAsIDB4N2UsIDB4MjUsIDB4MTQsIDB4MTQsIDB4MTEsIDB4NDIsIDB4ZTYsIDB4MjksIDB4MjUsIDB4NTQsIDB4YWIsCi0gIDB4YWEsIDB4NTgsIDB4MzAsIDB4MDgsIDB4YTEsIDB4MTEsIDB4MTQsIDB4MjksIDB4YmQsIDB4ZTMsIDB4N2EsIDB4NWEsCi0gIDB4MTMsIDB4OTksIDB4YWYsIDB4MGUsIDB4YzcsIDB4M2EsIDB4NjksIDB4NDAsIDB4NjUsIDB4MDIsIDB4YjMsIDB4NDEsCi0gIDB4ZGEsIDB4YmYsIDB4NTEsIDB4YjksIDB4MjcsIDB4ZDAsIDB4YzAsIDB4MzAsIDB4NjcsIDB4MzAsIDB4MzgsIDB4YzgsCi0gIDB4MGYsIDB4MGEsIDB4MDQsIDB4M2MsIDB4OTUsIDB4MGYsIDB4OTEsIDB4OTYsIDB4MjgsIDB4N2UsIDB4NWYsIDB4NTQsCi0gIDB4NDksIDB4MTMsIDB4MjAsIDB4ZDMsIDB4ZDAsIDB4NDgsIDB4YmIsIDB4YWUsIDB4MTIsIDB4MDIsIDB4OTUsIDB4YTEsCi0gIDB4YzEsIDB4NWEsIDB4NjcsIDB4ZDksIDB4NGIsIDB4NzksIDB4NTAsIDB4MjgsIDB4NTMsIDB4YzksIDB4MDEsIDB4MGIsCi0gIDB4YWUsIDB4ZmIsIDB4ZjAsIDB4NWQsIDB4YTEsIDB4NjcsIDB4YTMsIDB4YzIsIDB4NDcsIDB4MzYsIDB4OWYsIDB4NzcsCi0gIDB4YTgsIDB4NDIsIDB4NGEsIDB4ZDQsIDB4ZWQsIDB4ZGMsIDB4NmQsIDB4MmMsIDB4NzAsIDB4YzgsIDB4MTksIDB4YzIsCi0gIDB4NDIsIDB4ZGUsIDB4MDQsIDB4ZDgsIDB4ODQsIDB4MTEsIDB4NzgsIDB4ZjEsIDB4ZGEsIDB4OWUsIDB4YmEsIDB4NGUsCi0gIDB4NDksIDB4Y2MsIDB4ODksIDB4MDAsIDB4ZGMsIDB4MzQsIDB4OGEsIDB4MTAsIDB4YTYsIDB4Y2EsIDB4MTIsIDB4MDUsCi0gIDB4NzEsIDB4NTgsIDB4NDQsIDB4ODgsIDB4NTMsIDB4NGYsIDB4YmYsIDB4OGUsIDB4ODEsIDB4YTMsIDB4MWEsIDB4NDYsCi0gIDB4YWEsIDB4ZmQsIDB4ZjEsIDB4ZDksIDB4YzgsIDB4MDQsIDB4OGQsIDB4NzYsIDB4NjksIDB4MWYsIDB4NzcsIDB4YTMsCi0gIDB4OWYsIDB4YmYsIDB4ZjAsIDB4ZjQsIDB4ZTYsIDB4NDAsIDB4MzgsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4M2YsCi0gIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4NmMsIDB4ODEsIDB4YTEsIDB4MGEsIDB4MDgsIDB4MjYsIDB4MTQsIDB4MDksCi0gIDB4NDIsIDB4ZDAsIDB4YjYsIDB4NWEsIDB4ZTYsIDB4ZjQsIDB4MDEsIDB4ODAsIDB4NDAsIDB4MmEsIDB4ZWEsIDB4ZTgsCi0gIDB4MmQsIDB4OGUsIDB4MmEsIDB4ZmEsIDB4YWUsIDB4MDEsIDB4MWIsIDB4MzYsIDB4YzMsIDB4ZWQsIDB4ZDYsIDB4NjUsCi0gIDB4NDAsIDB4YzIsIDB4YjksIDB4MjcsIDB4OGMsIDB4ZjIsIDB4MzYsIDB4NDksIDB4YzMsIDB4ZjUsIDB4YTYsIDB4MTksCi0gIDB4N2UsIDB4YjgsIDB4ZjQsIDB4ODUsIDB4MzEsIDB4MjMsIDB4OWYsIDB4N2UsIDB4MmYsIDB4YWEsIDB4ZTEsIDB4ZTEsCi0gIDB4MDcsIDB4NDAsIDB4NTIsIDB4ZDEsIDB4MjgsIDB4YzgsIDB4MDcsIDB4ZmUsIDB4YzYsIDB4NWMsIDB4N2YsIDB4MzQsCi0gIDB4NzAsIDB4YmEsIDB4NzQsIDB4ZWMsIDB4ODcsIDB4ZTEsIDB4ODksIDB4NzQsIDB4MDksIDB4OGYsIDB4ZTgsIDB4N2UsCi0gIDB4ZmEsIDB4ZmMsIDB4NGQsIDB4ZmMsIDB4NjYsIDB4MDIsIDB4ZjYsIDB4YjIsIDB4NjIsIDB4ODYsIDB4MzgsIDB4YzksCi0gIDB4OGMsIDB4MDMsIDB4MjMsIDB4MDIsIDB4NDgsIDB4MDQsIDB4MTIsIDB4NTYsIDB4MTIsIDB4NzQsIDB4MjAsIDB4ZDksCi0gIDB4MGUsIDB4YjMsIDB4YmQsIDB4NmEsIDB4MjksIDB4MDgsIDB4ZjEsIDB4ZjYsIDB4YzgsIDB4OWEsIDB4MjgsIDB4ZmMsCi0gIDB4ZGUsIDB4MTQsIDB4NjAsIDB4YmUsIDB4NjYsIDB4MzksIDB4NjQsIDB4NmEsIDB4MzgsIDB4ZGQsIDB4ZDEsIDB4MWUsCi0gIDB4YmEsIDB4ZDcsIDB4NmEsIDB4ZjEsIDB4N2EsIDB4YTksIDB4NWYsIDB4YjMsIDB4NmYsIDB4MzQsIDB4MmEsIDB4MmYsCi0gIDB4MjcsIDB4NzUsIDB4ZjAsIDB4ZWUsIDB4NjksIDB4MmMsIDB4YzgsIDB4ZmIsIDB4ZDIsIDB4MWEsIDB4ZjEsIDB4N2UsCi0gIDB4ZGEsIDB4ZjUsIDB4ZWIsIDB4MzAsIDB4ZTMsIDB4ZjksIDB4Y2MsIDB4MTMsIDB4OGEsIDB4YjUsIDB4Y2IsIDB4OWQsCi0gIDB4NGMsIDB4OTAsIDB4MmUsIDB4MzEsIDB4YjIsIDB4NjEsIDB4MmEsIDB4M2QsIDB4ZGQsIDB4OWMsIDB4ZmIsIDB4ZWIsCi0gIDB4YzYsIDB4ODEsIDB4YTEsIDB4YTksIDB4OTIsIDB4ZWIsIDB4NmMsIDB4OGMsIDB4YTksIDB4NmMsIDB4Y2UsIDB4YjksCi0gIDB4MmIsIDB4MDIsIDB4MTQsIDB4NDMsIDB4ODYsIDB4MjIsIDB4MjgsIDB4MTQsIDB4OWMsIDB4NDksIDB4NzksIDB4NzIsCi0gIDB4OWUsIDB4YjIsIDB4OTEsIDB4YTAsIDB4NGEsIDB4NjQsIDB4OWQsIDB4YmEsIDB4MjUsIDB4ZDYsIDB4N2EsIDB4YmQsCi0gIDB4MWYsIDB4OTcsIDB4Y2YsIDB4ZTEsIDB4YzgsIDB4MDEsIDB4ZTMsIDB4ZGEsIDB4YTYsIDB4MjgsIDB4YTAsIDB4YTAsCi0gIDB4NmUsIDB4MWQsIDB4ODAsIDB4NGEsIDB4ODgsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjAsIDB4NTYsIDB4OWUsCi0gIDB4ZWUsIDB4YzUsIDB4NTUsIDB4Y2QsIDB4MjksIDB4ODIsIDB4NTUsIDB4NzgsIDB4ZWQsIDB4ZDUsIDB4YjMsIDB4MjksCi0gIDB4MDksIDB4M2EsIDB4ZDcsIDB4MGMsIDB4MDYsIDB4NzIsIDB4MTUsIDB4MGYsIDB4OWUsIDB4MDgsIDB4YmMsIDB4ZTcsCi0gIDB4YjUsIDB4ZDMsIDB4NDYsIDB4ODQsIDB4NDIsIDB4NzMsIDB4YTIsIDB4ZGEsIDB4MzEsIDB4YTksIDB4MjcsIDB4NmYsCi0gIDB4NGIsIDB4ZjYsIDB4YjMsIDB4YWMsIDB4YzMsIDB4OWUsIDB4YjQsIDB4ZDUsIDB4ZjgsIDB4YmIsIDB4OWYsIDB4YmQsCi0gIDB4OTEsIDB4MjIsIDB4YjUsIDB4ZmQsIDB4YmEsIDB4OTEsIDB4YzEsIDB4NmUsIDB4YjAsIDB4ZDUsIDB4NzAsIDB4MzgsCi0gIDB4NjIsIDB4M2IsIDB4MDYsIDB4MjAsIDB4ZGMsIDB4NjIsIDB4Y2QsIDB4MWYsIDB4NjcsIDB4ZDksIDB4ZjEsIDB4ZjIsCi0gIDB4ZmEsIDB4MDAsIDB4YjIsIDB4MzEsIDB4MDIsIDB4MWYsIDB4M2UsIDB4ZGYsIDB4OTcsIDB4MjUsIDB4YTYsIDB4ZTEsCi0gIDB4NTEsIDB4YmEsIDB4MzcsIDB4NGMsIDB4MTIsIDB4MWQsIDB4NGMsIDB4M2EsIDB4YmUsIDB4NDEsIDB4YzQsIDB4M2IsCi0gIDB4MjQsIDB4OWYsIDB4NWYsIDB4ZjksIDB4YWEsIDB4N2IsIDB4ZGQsIDB4NWMsIDB4YTgsIDB4NDYsIDB4NzcsIDB4YTEsCi0gIDB4NGEsIDB4ZjQsIDB4MjQsIDB4ZDEsIDB4YWMsIDB4NDYsIDB4NGMsIDB4ZGIsIDB4ZWIsIDB4ODIsIDB4OTgsIDB4MzMsCi0gIDB4MzMsIDB4OGQsIDB4NjIsIDB4NDAsIDB4OTgsIDB4YzEsIDB4M2EsIDB4ZTMsIDB4MTEsIDB4YWMsIDB4MmUsIDB4OTcsCi0gIDB4NmYsIDB4NmQsIDB4OTEsIDB4YzYsIDB4YzgsIDB4NjIsIDB4OTcsIDB4MTksIDB4ODYsIDB4ZGQsIDB4N2IsIDB4OGQsCi0gIDB4YWYsIDB4YjMsIDB4ZGYsIDB4ZjAsIDB4ZjgsIDB4MWQsIDB4NDgsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsCi0gIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZjEsIDB4NmEsIDB4YTMsIDB4YTEsIDB4YzAsIDB4MjQsIDB4ODQsCi0gIDB4MjMsIDB4MDYsIDB4MDYsIDB4YTEsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsIDB4MTAsIDB4MTIsIDB4NTQsIDB4ZDgsCi0gIDB4YzAsIDB4YzUsIDB4ZjIsIDB4YTQsIDB4OGEsIDB4NzksIDB4NDAsIDB4ODQsIDB4NjMsIDB4YjgsIDB4OGEsIDB4MWIsCi0gIDB4ODQsIDB4MTEsIDB4MzEsIDB4NjcsIDB4NzgsIDB4MjQsIDB4OGEsIDB4MGMsIDB4YWEsIDB4MmMsIDB4ODYsIDB4MmIsCi0gIDB4NzAsIDB4MTQsIDB4YjUsIDB4ZTUsIDB4YjksIDB4YjAsIDB4OWIsIDB4MmEsIDB4NGYsIDB4MTYsIDB4OGQsIDB4OGYsCi0gIDB4ODAsIDB4YTgsIDB4ZTMsIDB4MGQsIDB4M2MsIDB4YWYsIDB4NjcsIDB4MGYsIDB4YWEsIDB4ZTQsIDB4OTIsIDB4MjQsCi0gIDB4MjgsIDB4ZmMsIDB4MGYsIDB4M2IsIDB4MmMsIDB4NzcsIDB4NTUsIDB4NzMsIDB4MjEsIDB4OGIsIDB4MmQsIDB4MDcsCi0gIDB4YzIsIDB4MDIsIDB4YTksIDB4N2UsIDB4NDcsIDB4ZWMsIDB4YjgsIDB4MjUsIDB4YzgsIDB4MjAsIDB4OGQsIDB4YjEsCi0gIDB4MjIsIDB4YzIsIDB4ZGEsIDB4OTMsIDB4NGQsIDB4M2EsIDB4Y2EsIDB4YmQsIDB4OGMsIDB4ZDMsIDB4MTQsIDB4ZWEsCi0gIDB4NGMsIDB4ZDMsIDB4MTYsIDB4MjYsIDB4NWMsIDB4YTgsIDB4NDEsIDB4OWIsIDB4YTUsIDB4MGMsIDB4NWIsIDB4ZDYsCi0gIDB4MDYsIDB4MmEsIDB4ZGEsIDB4NmIsIDB4YWQsIDB4NDYsIDB4NWEsIDB4NDQsIDB4NjYsIDB4NjAsIDB4NDAsIDB4MDAsCi0gIDB4M2MsIDB4NDEsIDB4ZDUsIDB4NDUsIDB4ZDYsIDB4NWMsIDB4NDgsIDB4ZjYsIDB4NWEsIDB4YzgsIDB4YTAsIDB4YTUsCi0gIDB4MTYsIDB4NDUsIDB4OTYsIDB4MzAsIDB4NDksIDB4MTAsIDB4ZDMsIDB4ZDMsIDB4ZDQsIDB4OTgsIDB4NGQsIDB4YjcsCi0gIDB4YTQsIDB4ODksIDB4OWEsIDB4ZGUsIDB4YjcsIDB4YzgsIDB4OGIsIDB4NjQsIDB4MGQsIDB4NTksIDB4ODEsIDB4MDQsCi0gIDB4NWUsIDB4ZWYsIDB4N2UsIDB4NjEsIDB4MTQsIDB4YzIsIDB4YjUsIDB4NzEsIDB4ZDEsIDB4MTYsIDB4NTQsIDB4OWEsCi0gIDB4NDgsIDB4OTcsIDB4Y2IsIDB4MjUsIDB4YmEsIDB4YmEsIDB4ZWEsIDB4YTYsIDB4ODIsIDB4NDUsIDB4MGUsIDB4MzgsCi0gIDB4NjIsIDB4NGMsIDB4ODYsIDB4ODIsIDB4ZWQsIDB4NTIsIDB4MmQsIDB4MTYsIDB4MTUsIDB4NmIsIDB4MzQsIDB4OTYsCi0gIDB4MTgsIDB4YjEsIDB4OGUsIDB4MDksIDB4NTgsIDB4ODgsIDB4NzgsIDB4YTQsIDB4OWEsIDB4ZDcsIDB4MmUsIDB4M2IsCi0gIDB4MzcsIDB4OTYsIDB4ODUsIDB4NTUsIDB4ZWUsIDB4ZWUsIDB4OGUsIDB4MWMsIDB4M2UsIDB4MWYsIDB4MWYsIDB4YTIsCi0gIDB4MDAsIDB4MWUsIDB4N2UsIDB4NjUsIDB4MjgsIDB4MjIsIDB4ODcsIDB4NjAsIDB4MGEsIDB4ODEsIDB4NTcsIDB4ODgsCi0gIDB4NTAsIDB4MDAsIDB4MmUsIDB4NTUsIDB4MDUsIDB4MjgsIDB4NjIsIDB4M2EsIDB4MGMsIDB4YzUsIDB4YWQsIDB4ZDMsCi0gIDB4MzgsIDB4NjcsIDB4YWUsIDB4MmQsIDB4YTYsIDB4MDAsIDB4MzEsIDB4OWUsIDB4YmMsIDB4NmEsIDB4MjQsIDB4MTQsCi0gIDB4YWUsIDB4YjEsIDB4NjQsIDB4ZWYsIDB4MzMsIDB4MTQsIDB4YTgsIDB4MGMsIDB4MjksIDB4MzMsIDB4MmQsIDB4MjAsCi0gIDB4YmUsIDB4NTAsIDB4MzMsIDB4NmQsIDB4NjcsIDB4MDMsIDB4YjIsIDB4MzcsIDB4NDIsIDB4OTIsIDB4MTcsIDB4NDksCi0gIDB4NDgsIDB4NGEsIDB4NTIsIDB4NDEsIDB4YWQsIDB4NGMsIDB4OWQsIDB4YjUsIDB4NzksIDB4ZGMsIDB4ODUsIDB4MDQsCi0gIDB4MzIsIDB4MGEsIDB4OGMsIDB4YTYsIDB4MzcsIDB4MzIsIDB4NzgsIDB4NzgsIDB4MTEsIDB4OGYsIDB4ZDQsIDB4YzEsCi0gIDB4OTksIDB4ZjYsIDB4NTksIDB4YTAsIDB4Y2QsIDB4MDYsIDB4YWYsIDB4N2YsIDB4ZjIsIDB4OWEsIDB4YzAsIDB4MzQsCi0gIDB4MjYsIDB4MDIsIDB4NmEsIDB4NjksIDB4ODEsIDB4MDIsIDB4NDAsIDB4ZjMsIDB4MDgsIDB4NjQsIDB4YTQsIDB4ZjQsCi0gIDB4ZmIsIDB4MzYsIDB4NGIsIDB4OTcsIDB4ZTIsIDB4YTcsIDB4ODEsIDB4YjksIDB4NDIsIDB4OTQsIDB4Y2EsIDB4NTIsCi0gIDB4NWUsIDB4NWQsIDB4MDcsIDB4MDEsIDB4NzMsIDB4NWMsIDB4ZGUsIDB4YzEsIDB4MjQsIDB4YWQsIDB4ZTEsIDB4NDUsCi0gIDB4MmMsIDB4MGYsIDB4YmYsIDB4MTksIDB4YzksIDB4MWQsIDB4MTIsIDB4NWEsIDB4NTIsIDB4ODgsIDB4YmYsIDB4NTcsCi0gIDB4MmYsIDB4OGYsIDB4NDYsIDB4YmUsIDB4ZjAsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ZmYsCi0gIDB4ZmYsIDB4ZmUsIDB4ZmQsIDB4NmIsIDB4YTIsIDB4MzEsIDB4MDUsIDB4NDQsIDB4NjQsIDB4MTMsIDB4MTEsIDB4NDIsCi0gIDB4MTAsIDB4ZTEsIDB4MjIsIDB4YTUsIDB4MmEsIDB4YTUsIDB4MDAsIDB4ODAsIDB4MjIsIDB4MjUsIDB4NjAsIDB4ZmEsCi0gIDB4MTIsIDB4MDEsIDB4MTUsIDB4ZjEsIDB4ZTMsIDB4YmYsIDB4YjksIDB4YzAsIDB4ODUsIDB4M2YsIDB4OWYsIDB4MjAsCi0gIDB4OGYsIDB4ZjIsIDB4NjcsIDB4YmEsIDB4Y2IsIDB4ZTEsIDB4MjMsIDB4ZmEsIDB4NmIsIDB4MzcsIDB4NmIsIDB4OWMsCi0gIDB4NmUsIDB4OGEsIDB4YTgsIDB4MDcsIDB4YTMsIDB4MzcsIDB4YWYsIDB4NzgsIDB4N2EsIDB4NmIsIDB4NTcsIDB4MTcsCi0gIDB4YjYsIDB4NDcsIDB4NzQsIDB4ODgsIDB4MTgsIDB4ZTcsIDB4ZjgsIDB4ZDUsIDB4MDYsIDB4OTksIDB4YzgsIDB4ZmMsCi0gIDB4ZmQsIDB4MzMsIDB4ODcsIDB4NzIsIDB4NmYsIDB4YjYsIDB4NTEsIDB4OTcsIDB4YmQsIDB4OGMsIDB4YWUsIDB4MzAsCi0gIDB4OTQsIDB4MzQsIDB4ZDEsIDB4MDIsIDB4M2IsIDB4YWIsIDB4M2UsIDB4ZWUsIDB4ZDMsIDB4ZmYsIDB4YjUsIDB4NzAsCi0gIDB4YzksIDB4MmMsIDB4YjYsIDB4ODUsIDB4OWIsIDB4NTcsIDB4OTEsIDB4MDAsIDB4MzAsIDB4ZDUsIDB4OGQsIDB4ODYsCi0gIDB4NGMsIDB4YjMsIDB4NzQsIDB4OGUsIDB4YzUsIDB4ZjQsIDB4NTYsIDB4YzYsIDB4OTUsIDB4MzMsIDB4NGUsIDB4MWIsCi0gIDB4NmMsIDB4MjMsIDB4Y2EsIDB4MjIsIDB4NzEsIDB4ODQsIDB4MGQsIDB4MDYsIDB4YmEsIDB4MjQsIDB4ZjUsIDB4NWIsCi0gIDB4MGMsIDB4ODEsIDB4NDQsIDB4MWIsIDB4NTUsIDB4MWQsIDB4ODQsIDB4OTQsIDB4YjcsIDB4ZTgsIDB4M2QsIDB4MjEsCi0gIDB4Y2QsIDB4YTcsIDB4ZmUsIDB4MGUsIDB4Y2EsIDB4NTgsIDB4YjAsIDB4YjMsIDB4ZGEsIDB4ZTQsIDB4YjEsIDB4ZWMsCi0gIDB4MGMsIDB4NTYsIDB4MjUsIDB4OWQsIDB4MmQsIDB4YmYsIDB4N2QsIDB4YzcsIDB4MDAsIDB4OGIsIDB4MTIsIDB4NWIsCi0gIDB4ZDMsIDB4ZjEsIDB4YzQsIDB4YjIsIDB4YjYsIDB4ODUsIDB4OWYsIDB4YzMsIDB4NDYsIDB4YWQsIDB4ZGYsIDB4NDksCi0gIDB4YmUsIDB4ZGIsIDB4YWUsIDB4OWMsIDB4OGIsIDB4YzMsIDB4MGYsIDB4MzYsIDB4ZjcsIDB4Y2IsIDB4YmIsIDB4MmEsCi0gIDB4N2MsIDB4OWUsIDB4YmYsIDB4ZjcsIDB4ZWYsIDB4OGUsIDB4YzIsIDB4NjgsIDB4ZjYsIDB4ZGEsIDB4NWEsIDB4NmEsCi0gIDB4YzUsIDB4MTEsIDB4NzUsIDB4MGUsIDB4N2IsIDB4YWUsIDB4ZjgsIDB4ZjYsIDB4NjEsIDB4ZDUsIDB4ZGQsIDB4ZGYsCi0gIDB4ZWMsIDB4ZmIsIDB4ZWIsIDB4YTIsIDB4NDAsIDB4MWUsIDB4N2UsIDB4NjQsIDB4ZDQsIDB4MTksIDB4OGEsIDB4MDgsCi0gIDB4ZTEsIDB4ZDgsIDB4MDAsIDB4YTgsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDEsIDB4YWQsIDB4MGMsIDB4ODksCi0gIDB4ODAsIDB4MmUsIDB4MzAsIDB4OGEsIDB4MDAsIDB4YmMsIDB4MjEsIDB4MDcsIDB4MGUsIDB4MDUsIDB4NWUsIDB4N2IsCi0gIDB4ZjUsIDB4OTUsIDB4NjksIDB4NWYsIDB4NmIsIDB4OGMsIDB4NDEsIDB4OWUsIDB4NDMsIDB4ODAsIDB4OTEsIDB4NzEsCi0gIDB4MDAsIDB4MzAsIDB4NzAsIDB4YzgsIDB4NjAsIDB4NWQsIDB4MmEsIDB4ODEsIDB4ZTgsIDB4YzEsIDB4YjAsIDB4ZWQsCi0gIDB4NTEsIDB4MWQsIDB4NzMsIDB4YWMsIDB4M2IsIDB4ZWEsIDB4YTUsIDB4ODMsIDB4NjUsIDB4NjUsIDB4ZjAsIDB4NmMsCi0gIDB4MjksIDB4ZjMsIDB4ZjcsIDB4OTYsIDB4ODksIDB4YTcsIDB4YWUsIDB4YTAsIDB4ZGMsIDB4NzEsIDB4NTMsIDB4NzIsCi0gIDB4M2EsIDB4MWMsIDB4ZWIsIDB4YjYsIDB4NTAsIDB4YzIsIDB4NmIsIDB4NGIsIDB4ZDMsIDB4MzcsIDB4MmYsIDB4YjgsCi0gIDB4YzIsIDB4YzksIDB4NDQsIDB4YmUsIDB4NDMsIDB4ZjAsIDB4MGUsIDB4ZTksIDB4MGEsIDB4YTEsIDB4MjQsIDB4NDIsCi0gIDB4ZWYsIDB4MjQsIDB4NzIsIDB4ZWUsIDB4YjgsIDB4OGUsIDB4YTAsIDB4MGMsIDB4NjUsIDB4ZDAsIDB4YWEsIDB4YmMsCi0gIDB4NTcsIDB4MWQsIDB4NzksIDB4NzIsIDB4MzAsIDB4MzUsIDB4ODIsIDB4YzIsIDB4N2QsIDB4OTQsIDB4YmUsIDB4MWUsCi0gIDB4NGQsIDB4M2IsIDB4MDAsIDB4MTAsIDB4Y2MsIDB4OGQsIDB4OTEsIDB4NGMsIDB4YTAsIDB4ZDQsIDB4ZmQsIDB4MzYsCi0gIDB4YzEsIDB4NzYsIDB4NWMsIDB4NTIsIDB4MjgsIDB4MzksIDB4N2MsIDB4YmYsIDB4ZjIsIDB4NzUsIDB4MWEsIDB4MWUsCi0gIDB4MjYsIDB4YzAsIDB4MGUsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4M2YsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmQsCi0gIDB4NmMsIDB4YTIsIDB4YTIsIDB4MDQsIDB4ZWEsIDB4NjYsIDB4MWEsIDB4ODQsIDB4MjEsIDB4NjcsIDB4MDAsIDB4YTUsCi0gIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjgsIDB4NzcsIDB4YmYsIDB4ZDksIDB4ZjksIDB4ZTcsIDB4ZDAsIDB4ZmYsIDB4ZDAsCi0gIDB4NDgsIDB4MDEsIDB4MjYsIDB4NDAsIDB4NTQsIDB4MDcsIDB4YzcsIDB4M2QsIDB4ZTEsIDB4ZGQsIDB4N2IsIDB4ZjcsCi0gIDB4ZWIsIDB4ZGEsIDB4ZWYsIDB4ODcsIDB4Y2YsIDB4NWIsIDB4NGIsIDB4NTcsIDB4YzksIDB4YTAsIDB4ZGUsIDB4MWQsCi0gIDB4ZGIsIDB4YjgsIDB4MzksIDB4MjcsIDB4ZmYsIDB4M2EsIDB4N2YsIDB4NzUsIDB4ZTgsIDB4MzIsIDB4ODAsIDB4MmEsCi0gIDB4YjgsIDB4ZGMsIDB4NjQsIDB4ODMsIDB4Y2EsIDB4NTMsIDB4NGUsIDB4N2YsIDB4M2IsIDB4N2MsIDB4NjEsIDB4ZjEsCi0gIDB4MmIsIDB4MTgsIDB4NjAsIDB4OTcsIDB4M2IsIDB4NzIsIDB4YjksIDB4MzcsIDB4MWMsIDB4MmQsIDB4ZTksIDB4OTksCi0gIDB4NmQsIDB4OTUsIDB4MjEsIDB4M2UsIDB4ZjgsIDB4ZTMsIDB4MDYsIDB4NzcsIDB4YjEsIDB4YWYsIDB4ZWQsIDB4YWEsCi0gIDB4ZDIsIDB4MDUsIDB4NjYsIDB4MTMsIDB4NTksIDB4YTksIDB4ZjAsIDB4YWEsIDB4Y2QsIDB4MTgsIDB4ZWEsIDB4OWUsCi0gIDB4MzIsIDB4YzcsIDB4Y2UsIDB4N2UsIDB4OTUsIDB4NzAsIDB4YzYsIDB4YjUsIDB4YTcsIDB4ZTksIDB4MDgsIDB4NTcsCi0gIDB4YjUsIDB4YmMsIDB4YjQsIDB4OTYsIDB4ZjEsIDB4MmYsIDB4MWUsIDB4MzgsIDB4YWQsIDB4YjMsIDB4NTYsIDB4MzcsCi0gIDB4MmQsIDB4ZDMsIDB4NmUsIDB4NWUsIDB4MTAsIDB4Y2UsIDB4MzYsIDB4ZWMsIDB4ODIsIDB4OGQsIDB4YzEsIDB4MGQsCi0gIDB4ZDUsIDB4YzksIDB4YmQsIDB4YWUsIDB4ZTgsIDB4YTMsIDB4MGEsIDB4MjQsIDB4YzQsIDB4ZTUsIDB4MzMsIDB4NTEsCi0gIDB4NDYsIDB4YzIsIDB4ZTMsIDB4OGUsIDB4ZGMsIDB4ZTgsIDB4NGUsIDB4MzMsIDB4MWIsIDB4MmEsIDB4ZjMsIDB4NTUsCi0gIDB4ZDUsIDB4N2QsIDB4YTIsIDB4ZWYsIDB4NTcsIDB4ZGQsIDB4ZTEsIDB4MjQsIDB4ODcsIDB4ZTEsIDB4ZTEsIDB4YTAsCi0gIDB4ZjksIDB4ZDksIDB4MTksIDB4ZTIsIDB4ZDYsIDB4MWQsIDB4ZDQsIDB4NmQsIDB4ZWYsIDB4MGEsIDB4ZjIsIDB4YmIsCi0gIDB4ZWYsIDB4ZjcsIDB4ZjQsIDB4YmMsIDB4ZjQsIDB4N2MsIDB4NTcsIDB4OGQsIDB4ZWQsIDB4MzUsIDB4OTYsIDB4ZmQsCi0gIDB4ZTcsIDB4MjcsIDB4YjIsIDB4NGUsIDB4NzMsIDB4NzIsIDB4ZWQsIDB4ZDcsIDB4ZWIsIDB4OGYsIDB4NWUsIDB4N2MsCi0gIDB4NzksIDB4MDAsIDB4M2MsIDB4ZmIsIDB4NTQsIDB4NjIsIDB4ZDIsIDB4M2EsIDB4MGEsIDB4MDYsIDB4YTEsIDB4ZGMsCi0gIDB4YTAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MjYsIDB4MGMsIDB4NTYsIDB4NWUsIDB4NTUsIDB4YjksCi0gIDB4YmMsIDB4NjQsIDB4NjIsIDB4OGQsIDB4NzQsIDB4YzEsIDB4YTcsIDB4YTIsIDB4MzksIDB4NTUsIDB4NmUsIDB4ZWMsCi0gIDB4YzMsIDB4M2IsIDB4YzcsIDB4ODQsIDB4NjcsIDB4NzUsIDB4NTcsIDB4YTQsIDB4NzYsIDB4OTMsIDB4ZmMsIDB4YjMsCi0gIDB4NzgsIDB4NjEsIDB4ODEsIDB4ZTMsIDB4Y2YsIDB4ZTMsIDB4NDQsIDB4ZGMsIDB4ZGMsIDB4NmYsIDB4YjUsIDB4OWEsCi0gIDB4MzksIDB4ZGQsIDB4ZDEsIDB4MDEsIDB4ZWEsIDB4ZWUsIDB4YWQsIDB4MTUsIDB4ODYsIDB4NDMsIDB4MzAsIDB4MzksCi0gIDB4MGEsIDB4NTIsIDB4OWMsIDB4N2QsIDB4MmMsIDB4ODYsIDB4YzMsIDB4ZDAsIDB4YjAsIDB4ODEsIDB4NGEsIDB4ZDIsCi0gIDB4YzUsIDB4MTgsIDB4ZGYsIDB4NTEsIDB4NTIsIDB4ODQsIDB4OWQsIDB4ZGUsIDB4MTUsIDB4NTEsIDB4MzEsIDB4NTQsCi0gIDB4MGYsIDB4MjksIDB4ZmMsIDB4ZGYsIDB4MGMsIDB4ZTcsIDB4ZDcsIDB4NDgsIDB4YjQsIDB4NTAsIDB4ZWQsIDB4Y2IsCi0gIDB4ZWUsIDB4ZGIsIDB4YzcsIDB4MTksIDB4YzIsIDB4NjQsIDB4YzEsIDB4ZGMsIDB4OTUsIDB4MDUsIDB4MWEsIDB4MmMsCi0gIDB4NTYsIDB4Y2QsIDB4MjAsIDB4ZjQsIDB4MGMsIDB4NWIsIDB4NTQsIDB4OGYsIDB4OTYsIDB4ODksIDB4OWQsIDB4NWIsCi0gIDB4MDAsIDB4MzAsIDB4OGMsIDB4MTcsIDB4ZDAsIDB4ODYsIDB4ZDIsIDB4NjIsIDB4NzYsIDB4NDIsIDB4MzksIDB4NzYsCi0gIDB4NTIsIDB4ZGEsIDB4YTIsIDB4ZDcsIDB4NWIsIDB4NzMsIDB4M2YsIDB4MWIsIDB4YTcsIDB4Y2IsIDB4MWYsIDB4NTcsCi0gIDB4M2UsIDB4NWQsIDB4MWMsIDB4MDAsIDB4MzgsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDMsIDB4ZmYsIDB4ZmYsCi0gIDB4ZmUsIDB4ZmQsIDB4NjgsIDB4YTQsIDB4MzAsIDB4OTAsIDB4NDQsIDB4ZDQsIDB4MmMsIDB4MGQsIDB4YzIsIDB4MDIsCi0gIDB4MTIsIDB4NGIsIDB4YTIsIDB4ODQsIDB4MDAsIDB4MDIsIDB4MjEsIDB4NDMsIDB4ZGIsIDB4NDgsIDB4YTQsIDB4ZDUsCi0gIDB4YmIsIDB4ODksIDB4MTEsIDB4NWYsIDB4YzQsIDB4ZTYsIDB4NzIsIDB4NDgsIDB4M2YsIDB4M2QsIDB4ZDQsIDB4YzUsCi0gIDB4ZTMsIDB4NjksIDB4OTQsIDB4NTAsIDB4ZmQsIDB4NWQsIDB4ZDksIDB4M2YsIDB4OTAsIDB4YTcsIDB4N2MsIDB4YWQsCi0gIDB4NTcsIDB4ZTMsIDB4NWEsIDB4NWQsIDB4YTgsIDB4ZWEsIDB4YWMsIDB4NzMsIDB4NjksIDB4MWQsIDB4MmUsIDB4Y2YsCi0gIDB4MzksIDB4NGQsIDB4YWIsIDB4YmYsIDB4MmIsIDB4OWUsIDB4NzAsIDB4NTcsIDB4OWEsIDB4ZDIsIDB4MGQsIDB4N2QsCi0gIDB4YWEsIDB4M2YsIDB4YWYsIDB4NDIsIDB4OGEsIDB4ZmIsIDB4MWMsIDB4ZWIsIDB4YmUsIDB4MjEsIDB4ZjgsIDB4MTEsCi0gIDB4NmQsIDB4YmEsIDB4MzgsIDB4OGMsIDB4YzMsIDB4M2EsIDB4NjYsIDB4NjksIDB4ZjYsIDB4NWIsIDB4ZWEsIDB4ZTgsCi0gIDB4YTUsIDB4ODcsIDB4OGUsIDB4ZGUsIDB4ZTIsIDB4NDgsIDB4MDcsIDB4ZTYsIDB4NGEsIDB4MDcsIDB4MDMsIDB4YTUsCi0gIDB4ODUsIDB4YzUsIDB4N2MsIDB4MDksIDB4MDEsIDB4OGMsIDB4NDAsIDB4ZTksIDB4MDcsIDB4NDQsIDB4OTcsIDB4YmMsCi0gIDB4NDEsIDB4MTEsIDB4OWQsIDB4ZGYsIDB4NDMsIDB4YTUsIDB4NjQsIDB4MDEsIDB4OWMsIDB4M2YsIDB4NmYsIDB4OTIsCi0gIDB4NTYsIDB4ZTcsIDB4MDAsIDB4ODcsIDB4MTYsIDB4MzcsIDB4MjAsIDB4YTIsIDB4YjEsIDB4ZTgsIDB4NGIsIDB4NzcsCi0gIDB4YTgsIDB4ODAsIDB4MzAsIDB4NmEsIDB4YmQsIDB4NTYsIDB4MDgsIDB4NDIsIDB4YmEsIDB4ZTksIDB4NzAsIDB4YTYsCi0gIDB4YTUsIDB4NjAsIDB4ZmUsIDB4NWQsIDB4ZWQsIDB4MjcsIDB4ZGEsIDB4YWIsIDB4ZDIsIDB4MjUsIDB4YTEsIDB4Y2IsCi0gIDB4NjEsIDB4NTMsIDB4NWIsIDB4MTUsIDB4ZjcsIDB4YmYsIDB4MjMsIDB4ZDEsIDB4Y2QsIDB4NDgsIDB4YTksIDB4MDAsCi0gIDB4NWEsIDB4NDYsIDB4ZGUsIDB4YjgsIDB4MjEsIDB4MTIsIDB4MjQsIDB4ZWQsIDB4MDgsIDB4NjQsIDB4MjQsIDB4NjMsCi0gIDB4MDIsIDB4NGQsIDB4ODUsIDB4NzQsIDB4MzcsIDB4YWYsIDB4YzEsIDB4YTcsIDB4NGUsIDB4MGQsIDB4NzUsIDB4ZWIsCi0gIDB4ZTUsIDB4NWQsIDB4MjksIDB4OGEsIDB4NzMsIDB4ZTUsIDB4MTMsIDB4MjEsIDB4OTgsIDB4ZTcsIDB4ZGUsIDB4YmQsCi0gIDB4ZDYsIDB4N2QsIDB4ZWMsIDB4MzgsIDB4ZGQsIDB4M2QsIDB4NGMsIDB4MDAsIDB4M2QsIDB4ZmMsIDB4NDksIDB4MjIsCi0gIDB4NTIsIDB4MjIsIDB4MGUsIDB4MDYsIDB4ZTEsIDB4ZDgsIDB4MDksIDB4NDMsIDB4MmQsIDB4NTYsIDB4MDIsIDB4ODEsCi0gIDB4MDMsIDB4MzUsIDB4MGEsIDB4MTMsIDB4MTAsIDB4ZGEsIDB4NWMsIDB4NjEsIDB4NWIsIDB4MWQsIDB4ODIsIDB4ODMsCi0gIDB4M2UsIDB4NjcsIDB4MTYsIDB4MDksIDB4OGIsIDB4MDAsIDB4ODIsIDB4YTcsIDB4M2YsIDB4NzcsIDB4ZWEsIDB4NzUsCi0gIDB4NzMsIDB4YTQsIDB4OGYsIDB4NmIsIDB4YTUsIDB4M2MsIDB4YjcsIDB4NDMsIDB4NDUsIDB4MWEsIDB4NWIsIDB4YmUsCi0gIDB4NTQsIDB4NGQsIDB4NDEsIDB4MTIsIDB4NzgsIDB4NmIsIDB4NTksIDB4NTUsIDB4MzMsIDB4MzEsIDB4NmQsIDB4MzEsCi0gIDB4YjYsIDB4OTksIDB4MmQsIDB4MjEsIDB4NjksIDB4ZTIsIDB4ZTMsIDB4ZDAsIDB4ZTcsIDB4M2QsIDB4ODEsIDB4ZDksCi0gIDB4ZTMsIDB4ZGUsIDB4YTUsIDB4ODYsIDB4NGQsIDB4MzEsIDB4ZGEsIDB4YzYsIDB4MWEsIDB4MTgsIDB4NzYsIDB4YjcsCi0gIDB4ZTIsIDB4N2EsIDB4MmYsIDB4MDUsIDB4ZjcsIDB4M2UsIDB4M2UsIDB4NGQsIDB4N2EsIDB4OWEsIDB4YmMsIDB4YmYsCi0gIDB4YjQsIDB4ZWEsIDB4M2UsIDB4YzMsIDB4ZmYsIDB4ZjksIDB4MGQsIDB4ZWEsIDB4MGYsIDB4MTMsIDB4MmUsIDB4ZDAsCi0gIDB4OWEsIDB4YjgsIDB4MWYsIDB4YWMsIDB4MGUsIDB4YTQsIDB4YjUsIDB4MTQsIDB4OTMsIDB4MTUsIDB4MDEsIDB4NDIsCi0gIDB4ZDUsIDB4YzYsIDB4NDIsIDB4MzUsIDB4YjYsIDB4MGIsIDB4YzgsIDB4ODAsIDB4YTgsIDB4NmQsIDB4YTQsIDB4ZGEsCi0gIDB4NWQsIDB4NWMsIDB4YWQsIDB4MTAsIDB4MzUsIDB4MmQsIDB4MDMsIDB4ZDcsIDB4N2EsIDB4NTksIDB4ZmIsIDB4ZGUsCi0gIDB4YWYsIDB4ZTIsIDB4YjcsIDB4ZmIsIDB4ZTksIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsCi0gIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4NmEsIDB4YTQsIDB4YTAsIDB4ODUsIDB4YzgsIDB4MjYsIDB4MGMsIDB4MGMsCi0gIDB4YzIsIDB4MDUsIDB4ZTUsIDB4ZTksIDB4MmUsIDB4YWIsIDB4NTQsIDB4MTgsIDB4MDAsIDB4MGIsIDB4MjUsIDB4NGUsCi0gIDB4NDUsIDB4NzgsIDB4NDAsIDB4YzQsIDB4Y2EsIDB4ZTMsIDB4MjEsIDB4MmMsIDB4YmIsIDB4ZWIsIDB4OWQsIDB4N2EsCi0gIDB4ZTYsIDB4ODMsIDB4MWUsIDB4OTMsIDB4ZjcsIDB4ZjIsIDB4MGYsIDB4MWIsIDB4MzcsIDB4YWMsIDB4OWQsIDB4MGQsCi0gIDB4YWQsIDB4YjcsIDB4NzMsIDB4YmYsIDB4YmYsIDB4ZmMsIDB4NmYsIDB4YTIsIDB4YjMsIDB4ZGUsIDB4YWIsIDB4ZjcsCi0gIDB4OGUsIDB4ZGYsIDB4NWUsIDB4ZDUsIDB4ZTUsIDB4NTUsIDB4OTksIDB4MjYsIDB4NTEsIDB4NGEsIDB4ZDQsIDB4OWYsCi0gIDB4Y2UsIDB4ZDYsIDB4MWIsIDB4ZGUsIDB4ZWYsIDB4MzQsIDB4MTIsIDB4NTQsIDB4OGMsIDB4NmEsIDB4MTYsIDB4NTAsCi0gIDB4ODQsIDB4NWMsIDB4YTAsIDB4YTQsIDB4ODMsIDB4YTksIDB4OGUsIDB4MjQsIDB4MjEsIDB4MGUsIDB4ZmUsIDB4ZDksCi0gIDB4YWMsIDB4NjcsIDB4YjAsIDB4MWQsIDB4MDksIDB4NWUsIDB4ZGQsIDB4M2MsIDB4ZjUsIDB4YzgsIDB4NTYsIDB4MzQsCi0gIDB4YmMsIDB4MmQsIDB4NDksIDB4YzQsIDB4YTksIDB4NDgsIDB4Y2QsIDB4M2IsIDB4MzAsIDB4YWQsIDB4M2MsIDB4OTIsCi0gIDB4NDIsIDB4MzYsIDB4YjAsIDB4YTQsIDB4NWQsIDB4YjgsIDB4NzIsIDB4OTUsIDB4ZDcsIDB4YmEsIDB4MzIsIDB4OTcsCi0gIDB4ODQsIDB4OTIsIDB4OTMsIDB4YTQsIDB4MGIsIDB4NDksIDB4NzksIDB4NWUsIDB4YzcsIDB4NzUsIDB4MjMsIDB4N2EsCi0gIDB4ZGEsIDB4NTksIDB4YTUsIDB4ZjMsIDB4OGMsIDB4M2IsIDB4OTksIDB4MTAsIDB4MTAsIDB4ZjYsIDB4NWMsIDB4N2YsCi0gIDB4MGEsIDB4ZWMsIDB4M2MsIDB4YmMsIDB4MWIsIDB4ZTQsIDB4YzUsIDB4MjEsIDB4MTksIDB4OTIsIDB4ZTUsIDB4NTEsCi0gIDB4NjksIDB4MmUsIDB4MWQsIDB4ZjksIDB4Y2MsIDB4NjUsIDB4YTYsIDB4MzMsIDB4M2YsIDB4NDQsIDB4NzQsIDB4YTgsCi0gIDB4MDcsIDB4MjIsIDB4ZDIsIDB4YWUsIDB4OTQsIDB4NTgsIDB4MmYsIDB4OTQsIDB4OGEsIDB4MGQsIDB4OTIsIDB4NzEsCi0gIDB4MjcsIDB4N2IsIDB4NWMsIDB4ODEsIDB4MjUsIDB4Y2YsIDB4YWYsIDB4YWEsIDB4MDQsIDB4NmMsIDB4MzIsIDB4OGYsCi0gIDB4ODIsIDB4NGQsIDB4MDYsIDB4MTIsIDB4YmIsIDB4MmQsIDB4ZGIsIDB4MWYsIDB4NGMsIDB4ZjMsIDB4OWYsIDB4ZDAsCi0gIDB4ZjIsIDB4ODEsIDB4ZWIsIDB4ZTYsIDB4NGYsIDB4MzEsIDB4YjAsIDB4ZTAsIDB4MmEsIDB4MWQsIDB4ODIsIDB4YTAsCi0gIDB4YTgsIDB4MmEsIDB4NDgsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ZDgsIDB4M2EsIDB4MzMsIDB4NTUsIDB4YjcsIDB4OWIsCi0gIDB4MmQsIDB4MGEsIDB4MTAsIDB4MjEsIDB4NjMsIDB4YzEsIDB4NzUsIDB4YjEsIDB4ZjksIDB4M2EsIDB4ZDcsIDB4ZTQsCi0gIDB4OTYsIDB4MDMsIDB4OTIsIDB4MTUsIDB4YjUsIDB4NjYsIDB4MzEsIDB4OWQsIDB4MmUsIDB4ZjMsIDB4MGIsIDB4NjIsCi0gIDB4NTEsIDB4MTQsIDB4MGEsIDB4NmMsIDB4YzksIDB4NjEsIDB4ZDYsIDB4MDcsIDB4ODgsIDB4NTYsIDB4ZjAsIDB4MDEsCi0gIDB4YTIsIDB4M2IsIDB4ODgsIDB4MWQsIDB4NGEsIDB4YWIsIDB4ZDEsIDB4YWIsIDB4MzYsIDB4YmYsIDB4ZGQsIDB4MWEsCi0gIDB4NTMsIDB4MTksIDB4ZmIsIDB4NTUsIDB4MjgsIDB4MWYsIDB4YWMsIDB4NjMsIDB4Y2QsIDB4MzQsIDB4NjgsIDB4NTYsCi0gIDB4MTUsIDB4OTcsIDB4YTEsIDB4ZWIsIDB4YmQsIDB4NDQsIDB4MTksIDB4NzcsIDB4NWQsIDB4MTMsIDB4OGMsIDB4NzYsCi0gIDB4ZDIsIDB4NzIsIDB4YTUsIDB4MzIsIDB4MTksIDB4NDksIDB4NzMsIDB4YmYsIDB4NTYsIDB4NzYsIDB4NjAsIDB4NjgsCi0gIDB4ZDgsIDB4ZTMsIDB4MzMsIDB4MTAsIDB4ZDMsIDB4ZWQsIDB4OTIsIDB4YTEsIDB4OTcsIDB4YjYsIDB4NGIsIDB4ZTksCi0gIDB4MzMsIDB4MGEsIDB4NmQsIDB4OTEsIDB4YzQsIDB4NGUsIDB4YjYsIDB4ZTksIDB4ZDMsIDB4ODksIDB4YzIsIDB4NmEsCi0gIDB4ZmMsIDB4NmEsIDB4MGMsIDB4MTEsIDB4MDksIDB4MjAsIDB4N2EsIDB4ZTcsIDB4ZWQsIDB4ZTcsIDB4Y2YsIDB4ZGIsCi0gIDB4YWYsIDB4ZjEsIDB4YTAsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gIDB4MDMsIDB4NmEsIDB4YTIsIDB4NTgsIDB4YTAsIDB4NjgsIDB4NDIsIDB4NmIsIDB4MGUsIDB4MDQsIDB4NjEsIDB4MTAsCi0gIDB4ZTgsIDB4MzQsIDB4YTQsIDB4YTksIDB4OTIsIDB4YTAsIDB4MDQsIDB4MGMsIDB4YjQsIDB4MzksIDB4MTksIDB4NzIsCi0gIDB4YjMsIDB4MzcsIDB4ZTEsIDB4NzIsIDB4NjAsIDB4ZmEsIDB4NTcsIDB4YTYsIDB4NjksIDB4N2QsIDB4ZDUsIDB4YWIsCi0gIDB4M2QsIDB4YzcsIDB4YzUsIDB4NzMsIDB4NGQsIDB4ZGUsIDB4YWYsIDB4YTgsIDB4NGUsIDB4ZWMsIDB4YTIsIDB4NGQsCi0gIDB4OGYsIDB4Y2IsIDB4ZTMsIDB4OTMsIDB4YjEsIDB4YWEsIDB4MDAsIDB4ZWIsIDB4MTgsIDB4OWQsIDB4MjUsIDB4N2YsCi0gIDB4NDgsIDB4ZmMsIDB4ZjUsIDB4M2UsIDB4NDYsIDB4MDEsIDB4YTIsIDB4ZGMsIDB4YzgsIDB4NmMsIDB4NmIsIDB4MmIsCi0gIDB4MmMsIDB4ZmUsIDB4MDcsIDB4ODYsIDB4YjUsIDB4ZDcsIDB4MjMsIDB4ZjIsIDB4MGUsIDB4NzYsIDB4ZmUsIDB4MTIsCi0gIDB4ZGIsIDB4YjcsIDB4NjcsIDB4MTUsIDB4ZTYsIDB4MDgsIDB4OTEsIDB4NWEsIDB4ZGEsIDB4OWUsIDB4NTksIDB4NzMsCi0gIDB4YTUsIDB4ODUsIDB4ZGYsIDB4NTUsIDB4ZTksIDB4OGIsIDB4ODAsIDB4YmYsIDB4ODcsIDB4NGYsIDB4MTYsIDB4YjMsCi0gIDB4MjMsIDB4Y2QsIDB4YTQsIDB4MzYsIDB4NTQsIDB4MjcsIDB4MTQsIDB4ZTgsIDB4M2QsIDB4OGMsIDB4MzUsIDB4YzIsCi0gIDB4YzUsIDB4NjIsIDB4MWYsIDB4NTEsIDB4ZDAsIDB4MmUsIDB4NTgsIDB4N2QsIDB4OWUsIDB4MTEsIDB4YWUsIDB4MTMsCi0gIDB4YjAsIDB4ZTAsIDB4MjUsIDB4MGIsIDB4MDMsIDB4ZTYsIDB4OTQsIDB4YWIsIDB4ZDEsIDB4NzMsIDB4ZjgsIDB4Y2IsCi0gIDB4ZjMsIDB4NGUsIDB4ZjUsIDB4YTksIDB4N2UsIDB4MWQsIDB4MTAsIDB4MjksIDB4NjUsIDB4OTAsIDB4MTcsIDB4NTQsCi0gIDB4ZGEsIDB4NzksIDB4OTUsIDB4OTksIDB4NjUsIDB4YzcsIDB4ZGIsIDB4NDUsIDB4M2UsIDB4OWYsIDB4OTcsIDB4NWEsCi0gIDB4MzEsIDB4ODYsIDB4Y2QsIDB4MTUsIDB4MWMsIDB4MDEsIDB4YjgsIDB4YzIsIDB4YTAsIDB4MWIsIDB4OTQsIDB4NGMsCi0gIDB4MzMsIDB4OTIsIDB4YmIsIDB4NjIsIDB4YjAsIDB4YTgsIDB4YjIsIDB4NzksIDB4ZWEsIDB4ODksIDB4ZjMsIDB4YzIsCi0gIDB4YWQsIDB4YmEsIDB4NzUsIDB4NjEsIDB4OWMsIDB4ZDMsIDB4MTMsIDB4NTUsIDB4ZmEsIDB4YzYsIDB4NmUsIDB4ZjUsCi0gIDB4MzgsIDB4YjMsIDB4NjcsIDB4YzIsIDB4ZDYsIDB4OGUsIDB4OWEsIDB4NDgsIDB4MTIsIDB4ZDYsIDB4MDgsIDB4ZTksCi0gIDB4YmUsIDB4YzAsIDB4ZTQsIDB4OTcsIDB4YzIsIDB4MTQsIDB4NDIsIDB4NGEsIDB4OTEsIDB4NjEsIDB4OGIsIDB4MTgsCi0gIDB4OGYsIDB4ZmEsIDB4Y2YsIDB4N2QsIDB4ZmYsIDB4NWIsIDB4ZWEsIDB4ZTAsIDB4ZjcsIDB4ZjMsIDB4MTksIDB4MzAsCi0gIDB4ZTAsIDB4MmUsIDB4MWQsIDB4ODAsIDB4MGEsIDB4NDIsIDB4YWEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4MzQsIDB4MGEsCi0gIDB4NWYsIDB4OTQsIDB4YTksIDB4MDYsIDB4ZTgsIDB4NTcsIDB4ZjQsIDB4MWUsIDB4NjQsIDB4NTAsIDB4Y2QsIDB4MmMsCi0gIDB4NzYsIDB4OTIsIDB4ZjEsIDB4NTEsIDB4NzQsIDB4ZjAsIDB4NmEsIDB4NTUsIDB4OWUsIDB4ZTQsIDB4OTEsIDB4ZDUsCi0gIDB4MmEsIDB4OTEsIDB4ZWQsIDB4NjgsIDB4OTAsIDB4MmIsIDB4MDUsIDB4YjIsIDB4NTUsIDB4YWEsIDB4MTMsIDB4NmIsCi0gIDB4OTIsIDB4YjgsIDB4ZTEsIDB4NTksIDB4ZTcsIDB4MjIsIDB4YmUsIDB4ZGUsIDB4NDUsIDB4ZTIsIDB4YzksIDB4ZjQsCi0gIDB4ODEsIDB4MGEsIDB4NGIsIDB4MzEsIDB4NDIsIDB4MjksIDB4MGYsIDB4ZTgsIDB4ODksIDB4MTQsIDB4OWEsIDB4MWUsCi0gIDB4YjAsIDB4YjcsIDB4ODgsIDB4YWUsIDB4NGUsIDB4YmYsIDB4NGQsIDB4MzQsIDB4NmYsIDB4YjIsIDB4ZjksIDB4NDQsCi0gIDB4MDIsIDB4ZWEsIDB4MTksIDB4YTgsIDB4ZDMsIDB4NjgsIDB4OTUsIDB4MWEsIDB4NmMsIDB4ZGUsIDB4YTAsIDB4MDAsCi0gIDB4NjIsIDB4MGQsIDB4N2EsIDB4MDMsIDB4YjcsIDB4NTMsIDB4MDYsIDB4MzEsIDB4MmYsIDB4MDIsIDB4NTcsIDB4MGYsCi0gIDB4OGYsIDB4MTMsIDB4NDksIDB4OTcsIDB4YTksIDB4YTksIDB4YzYsIDB4ZjAsIDB4YjMsIDB4ZTksIDB4ZWMsIDB4MjQsCi0gIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MWYsIDB4ZmYsIDB4ZmYsIDB4MDcsIDB4NmEsCi0gIDB4YTQsIDB4MzEsIDB4MTAsIDB4NDQsIDB4OTQsIDB4MmMsIDB4MGQsIDB4NDIsIDB4MDEsIDB4NWMsIDB4NGIsIDB4ZDUsCi0gIDB4MmUsIDB4YWUsIDB4YWYsIDB4MjEsIDB4NDAsIDB4MDIsIDB4NTIsIDB4ZDgsIDB4MzUsIDB4ZjcsIDB4YTcsIDB4ZjgsCi0gIDB4MTksIDB4MTQsIDB4MGYsIDB4ZWYsIDB4YjksIDB4NGUsIDB4ZTksIDB4MWQsIDB4YTYsIDB4MmUsIDB4ZmUsIDB4OTgsCi0gIDB4ZmQsIDB4MTMsIDB4YjgsIDB4MjIsIDB4YmEsIDB4YjksIDB4ZjksIDB4MWEsIDB4ZTIsIDB4NTEsIDB4NGUsIDB4NWIsCi0gIDB4ZWQsIDB4ZGIsIDB4OGYsIDB4NWIsIDB4YmMsIDB4ZjAsIDB4MzksIDB4ZTYsIDB4NzUsIDB4NGIsIDB4ZTgsIDB4MWUsCi0gIDB4ZjgsIDB4N2IsIDB4MmYsIDB4MjcsIDB4YjEsIDB4YzcsIDB4OTksIDB4YzcsIDB4ZmYsIDB4MWMsIDB4OGEsIDB4YzAsCi0gIDB4ZTksIDB4OWIsIDB4NTYsIDB4ZDQsIDB4MmEsIDB4NTcsIDB4N2IsIDB4MzQsIDB4ZmIsIDB4NjUsIDB4MDksIDB4MzQsCi0gIDB4YjUsIDB4OTUsIDB4N2QsIDB4MjAsIDB4OTYsIDB4MWQsIDB4NzEsIDB4YjIsIDB4NjgsIDB4NzEsIDB4YWUsIDB4YjYsCi0gIDB4NWIsIDB4MmMsIDB4MzEsIDB4YmEsIDB4MjUsIDB4NWMsIDB4MmMsIDB4ZjgsIDB4MjUsIDB4MDAsIDB4OTYsIDB4YTMsCi0gIDB4NDksIDB4MWEsIDB4MzksIDB4ZDMsIDB4YTEsIDB4MDcsIDB4NTIsIDB4ZDMsIDB4M2EsIDB4ZDYsIDB4YjEsIDB4NTQsCi0gIDB4ZTEsIDB4NzEsIDB4MjQsIDB4MDgsIDB4OTQsIDB4MTUsIDB4ZTIsIDB4N2MsIDB4MjYsIDB4YjUsIDB4YzYsIDB4MTMsCi0gIDB4MDksIDB4NTgsIDB4YzgsIDB4YjcsIDB4OGMsIDB4NDgsIDB4MDMsIDB4NmEsIDB4Y2MsIDB4ZDUsIDB4MTMsIDB4NDcsCi0gIDB4YzYsIDB4YjcsIDB4NzksIDB4NzAsIDB4NjIsIDB4NDEsIDB4MGEsIDB4YjEsIDB4ZDcsIDB4ZjAsIDB4OGIsIDB4ZTUsCi0gIDB4NmIsIDB4ZDAsIDB4YzksIDB4ZTEsIDB4NzMsIDB4OGMsIDB4NjcsIDB4MDYsIDB4NzUsIDB4MWMsIDB4MWQsIDB4YWMsCi0gIDB4YTIsIDB4YTksIDB4YTcsIDB4ZDMsIDB4YTcsIDB4MGMsIDB4MGQsIDB4ZWUsIDB4ODYsIDB4NWYsIDB4ZDMsIDB4OTUsCi0gIDB4NzgsIDB4YzEsIDB4YWUsIDB4MDAsIDB4MjMsIDB4NTMsIDB4OWQsIDB4OTgsIDB4MmMsIDB4ZGIsIDB4NjUsIDB4ODYsCi0gIDB4ZDAsIDB4MGIsIDB4NmUsIDB4NzAsIDB4YWIsIDB4YTcsIDB4ZDgsIDB4Y2EsIDB4NjUsIDB4ZDYsIDB4MzQsIDB4MjYsCi0gIDB4MjcsIDB4MjgsIDB4ZjUsIDB4NTUsIDB4M2EsIDB4MGEsIDB4NTgsIDB4NTIsIDB4MjgsIDB4NmQsIDB4MTUsIDB4ODQsCi0gIDB4ODcsIDB4MTAsIDB4OTUsIDB4ZmMsIDB4YTEsIDB4NjYsIDB4NGQsIDB4MmQsIDB4M2YsIDB4YWYsIDB4YWEsIDB4ZjEsCi0gIDB4ZjIsIDB4ZWUsIDB4ZmEsIDB4NjQsIDB4MDEsIDB4ZWYsIDB4ZWMsIDB4MmYsIDB4NjIsIDB4MjgsIDB4NzYsIDB4MDAsCi0gIDB4MDUsIDB4NDQsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDgsIDB4YWEsIDB4MDksIDB4ZWUsIDB4OTksIDB4ZmIsIDB4N2YsCi0gIDB4NjksIDB4OWEsIDB4NmMsIDB4ODIsIDB4NmQsIDB4NzQsIDB4MWQsIDB4ZTQsIDB4YjEsIDB4YzYsIDB4NDEsIDB4YTUsCi0gIDB4NmUsIDB4MDIsIDB4MTMsIDB4MjEsIDB4MmQsIDB4NTksIDB4YzQsIDB4ZjAsIDB4ZGEsIDB4ZDYsIDB4NDksIDB4ZTgsCi0gIDB4YWMsIDB4ZjYsIDB4YTcsIDB4ZWEsIDB4ZmQsIDB4NTksIDB4MzcsIDB4ZTAsIDB4MmIsIDB4ZTYsIDB4YmUsIDB4MTUsCi0gIDB4ZjksIDB4YmQsIDB4ZmYsIDB4YjUsIDB4ZTcsIDB4NmUsIDB4YTMsIDB4ZWUsIDB4YjksIDB4OWQsIDB4NmIsIDB4NWEsCi0gIDB4ZGYsIDB4YWQsIDB4YzAsIDB4MDAsIDB4OWEsIDB4OGUsIDB4NjgsIDB4ZDksIDB4ZWEsIDB4OTYsIDB4YzgsIDB4ZWUsCi0gIDB4YTEsIDB4MTMsIDB4YzYsIDB4YjQsIDB4YWUsIDB4YWIsIDB4ZjgsIDB4MzMsIDB4ZDcsIDB4MzQsIDB4ZmIsIDB4ZGUsCi0gIDB4OWEsIDB4NTgsIDB4MzcsIDB4MDIsIDB4ODgsIDB4ODAsIDB4MjgsIDB4NjgsIDB4M2EsIDB4ODcsIDB4OWUsIDB4NzAsCi0gIDB4ZTIsIDB4N2IsIDB4NjksIDB4YmUsIDB4ZTAsIDB4MDYsIDB4OGMsIDB4YmQsIDB4M2YsIDB4M2UsIDB4ZGMsIDB4ZjYsCi0gIDB4YzYsIDB4MjQsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gIDB4MDksIDB4NmYsIDB4ODIsIDB4MjEsIDB4NDUsIDB4ODgsIDB4MTYsIDB4MWMsIDB4MDUsIDB4NDIsIDB4MjIsIDB4NGMsCi0gIDB4M2QsIDB4OGIsIDB4ODIsIDB4NTAsIDB4YTUsIDB4MTAsIDB4MDQsIDB4OTUsIDB4MjYsIDB4MGIsIDB4ZjUsIDB4OTgsCi0gIDB4M2YsIDB4MWIsIDB4ZjEsIDB4NDIsIDB4NjAsIDB4MDUsIDB4NzYsIDB4NGYsIDB4MjYsIDB4ZTksIDB4YmQsIDB4MDksCi0gIDB4ZmYsIDB4ZmIsIDB4NzcsIDB4OTgsIDB4M2IsIDB4YzIsIDB4OTAsIDB4Y2EsIDB4NmUsIDB4OGIsIDB4YzIsIDB4MGQsCi0gIDB4YTIsIDB4MGUsIDB4ZjMsIDB4NmUsIDB4YmEsIDB4ZWQsIDB4N2UsIDB4NGEsIDB4Y2IsIDB4NTUsIDB4NTIsIDB4OGQsCi0gIDB4MjUsIDB4YmQsIDB4NTQsIDB4MWEsIDB4NWQsIDB4MmIsIDB4YTEsIDB4NTQsIDB4Y2IsIDB4NTQsIDB4YTIsIDB4NmEsCi0gIDB4YjMsIDB4NDIsIDB4M2EsIDB4ZGIsIDB4ZGYsIDB4NGEsIDB4NTYsIDB4ZDUsIDB4MGYsIDB4MzIsIDB4MDgsIDB4NzIsCi0gIDB4MmIsIDB4MmMsIDB4NDksIDB4NDYsIDB4MjYsIDB4ZTUsIDB4OTAsIDB4MjgsIDB4YWUsIDB4MDIsIDB4MWQsIDB4MjIsCi0gIDB4NTYsIDB4MzEsIDB4NDgsIDB4N2YsIDB4ZGMsIDB4YzgsIDB4NzYsIDB4YTcsIDB4NGIsIDB4YWYsIDB4MzYsIDB4YTEsCi0gIDB4MjIsIDB4ZTEsIDB4YWIsIDB4NTcsIDB4NzIsIDB4ZjUsIDB4NDYsIDB4YjIsIDB4NTYsIDB4NDUsIDB4MDAsIDB4MmUsCi0gIDB4YzcsIDB4N2QsIDB4OTQsIDB4NTIsIDB4NTMsIDB4OTQsIDB4ZWIsIDB4N2MsIDB4ZjQsIDB4NTUsIDB4NWMsIDB4YTcsCi0gIDB4YjksIDB4NTQsIDB4MGMsIDB4M2YsIDB4MGEsIDB4ZGUsIDB4OWUsIDB4OGIsIDB4ZGQsIDB4OTIsIDB4NzIsIDB4YWQsCi0gIDB4YTksIDB4OGYsIDB4NjUsIDB4MmQsIDB4ZDIsIDB4YWMsIDB4YTIsIDB4ZWEsIDB4NDIsIDB4OTUsIDB4OTYsIDB4NTUsCi0gIDB4MDMsIDB4ZDQsIDB4MzgsIDB4NDMsIDB4YTAsIDB4OGEsIDB4Y2QsIDB4OGEsIDB4YmIsIDB4ZTEsIDB4MzksIDB4YTAsCi0gIDB4YTYsIDB4OGQsIDB4NTEsIDB4NjMsIDB4NjksIDB4MmEsIDB4ODYsIDB4NTksIDB4YWUsIDB4OTcsIDB4ZjAsIDB4ZGQsCi0gIDB4NTYsIDB4NGYsIDB4NTMsIDB4MzEsIDB4ZTIsIDB4MDYsIDB4NWMsIDB4NmIsIDB4YTMsIDB4NjEsIDB4YzksIDB4YWMsCi0gIDB4NDIsIDB4ZGEsIDB4MmEsIDB4MjIsIDB4YjYsIDB4ODEsIDB4MmIsIDB4YmIsIDB4OWYsIDB4NTMsIDB4NTIsIDB4Y2EsCi0gIDB4NGQsIDB4MTEsIDB4YWEsIDB4YjMsIDB4NjMsIDB4ZTcsIDB4ZjUsIDB4NzQsIDB4ZDcsIDB4NjcsIDB4ZDUsIDB4OWUsCi0gIDB4MDAsIDB4MGYsIDB4NWYsIDB4MzMsIDB4ODEsIDB4MDksIDB4ODgsIDB4ZTEsIDB4ZDgsIDB4MDAsIDB4NTQsIDB4OTUsCi0gIDB4NTYsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MTAsIDB4MDMsIDB4NDAsIDB4YjksIDB4MjgsIDB4NjgsIDB4MGMsIDB4ZTAsCi0gIDB4YmMsIDB4NGIsIDB4ZmMsIDB4MWIsIDB4YTMsIDB4MjIsIDB4NGEsIDB4YWIsIDB4NjksIDB4MDUsIDB4MTMsIDB4NWUsCi0gIDB4NGUsIDB4ZDEsIDB4YjcsIDB4MTIsIDB4ZjIsIDB4MjgsIDB4ODIsIDB4ZDEsIDB4ODgsIDB4NTMsIDB4MWIsIDB4MGUsCi0gIDB4MGUsIDB4MWEsIDB4OTksIDB4YTcsIDB4YTgsIDB4MTEsIDB4OTcsIDB4MzgsIDB4MWEsIDB4M2QsIDB4NTQsIDB4ZTksCi0gIDB4M2IsIDB4NTgsIDB4ZWYsIDB4NDgsIDB4ZWEsIDB4ZDQsIDB4MDUsIDB4OWYsIDB4NTMsIDB4NmUsIDB4MTgsIDB4MjMsCi0gIDB4NTAsIDB4ODIsIDB4NDksIDB4NGIsIDB4MzIsIDB4MWIsIDB4ZWQsIDB4N2EsIDB4MDAsIDB4MmMsIDB4YmIsIDB4YTksCi0gIDB4YWUsIDB4YjcsIDB4NDYsIDB4YmUsIDB4ZDcsIDB4MzYsIDB4ZmQsIDB4NjAsIDB4MzQsIDB4ZmYsIDB4NTEsIDB4MmMsCi0gIDB4NzYsIDB4ZTAsIDB4MDksIDB4ZDgsIDB4YWIsIDB4NjgsIDB4YzIsIDB4ZGQsIDB4NDksIDB4ZDIsIDB4ZGIsIDB4YTYsCi0gIDB4NTQsIDB4YmEsIDB4OGEsIDB4YmEsIDB4YmEsIDB4ZmUsIDB4NGYsIDB4NTcsIDB4ZDcsIDB4YjgsIDB4YmEsIDB4M2UsCi0gIDB4NzAsIDB4MGUsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4MTEsIDB4NmYsCi0gIDB4YTEsIDB4YjEsIDB4MTAsIDB4NjIsIDB4YzYsIDB4MjAsIDB4ODUsIDB4YWQsIDB4ZTksIDB4NjcsIDB4YzAsIDB4YjUsCi0gIDB4MmQsIDB4YmIsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NDMsIDB4YjAsIDB4YzUsIDB4ZGYsIDB4ZDMsIDB4MWYsIDB4NjMsCi0gIDB4ZjEsIDB4NTIsIDB4MWIsIDB4MmYsIDB4MWYsIDB4ODIsIDB4ODMsIDB4MTUsIDB4MDgsIDB4MzIsIDB4ZjgsIDB4YWIsCi0gIDB4MWMsIDB4ZmQsIDB4NGYsIDB4Y2UsIDB4MzQsIDB4ODcsIDB4OGEsIDB4YzYsIDB4YjksIDB4MGUsIDB4MzcsIDB4ZjEsCi0gIDB4YTUsIDB4MzEsIDB4N2YsIDB4N2EsIDB4M2MsIDB4OWEsIDB4M2EsIDB4NTYsIDB4NjAsIDB4N2UsIDB4YWYsIDB4MTgsCi0gIDB4NzMsIDB4NmYsIDB4OTAsIDB4MzQsIDB4ZjUsIDB4OGUsIDB4NjMsIDB4OGYsIDB4MzUsIDB4ZGQsIDB4NzYsIDB4MTcsCi0gIDB4ZTIsIDB4OGQsIDB4NTEsIDB4OGMsIDB4OWYsIDB4NTgsIDB4YjMsIDB4MTksIDB4ODQsIDB4Y2EsIDB4OWMsIDB4YzksCi0gIDB4YmMsIDB4YzAsIDB4NTYsIDB4Y2EsIDB4MTIsIDB4NmYsIDB4OGMsIDB4ZWUsIDB4YTMsIDB4N2QsIDB4OTcsIDB4NDUsCi0gIDB4NTksIDB4MzIsIDB4OWEsIDB4YzUsIDB4MmYsIDB4NWIsIDB4MzksIDB4NTcsIDB4NDAsIDB4ZjcsIDB4YzEsIDB4ZmQsCi0gIDB4ZmQsIDB4MTMsIDB4MTksIDB4YjgsIDB4ZWUsIDB4OGEsIDB4YWIsIDB4ZDQsIDB4Y2MsIDB4NjMsIDB4YmQsIDB4MzgsCi0gIDB4ZWEsIDB4OGQsIDB4NzAsIDB4YTQsIDB4NDAsIDB4OGMsIDB4ZTEsIDB4ODksIDB4ZDQsIDB4NTAsIDB4MjMsIDB4N2MsCi0gIDB4ODgsIDB4OGMsIDB4ZTEsIDB4NjIsIDB4OGIsIDB4MmMsIDB4YjYsIDB4Y2EsIDB4NGQsIDB4ODEsIDB4ZjYsIDB4NjYsCi0gIDB4YjYsIDB4YWMsIDB4ZGIsIDB4ZTgsIDB4ZWYsIDB4YWEsIDB4ZmUsIDB4OGEsIDB4M2EsIDB4NzksIDB4NjIsIDB4ODYsCi0gIDB4NGEsIDB4ZmUsIDB4ZDksIDB4ZGQsIDB4ZWIsIDB4YzEsIDB4ZDksIDB4YTUsIDB4MDEsIDB4MDIsIDB4ODQsIDB4OTYsCi0gIDB4OGIsIDB4MTQsIDB4NDEsIDB4OWMsIDB4OWEsIDB4OGYsIDB4MjYsIDB4M2QsIDB4YWUsIDB4ZGMsIDB4YWMsIDB4ZWUsCi0gIDB4OGIsIDB4MTcsIDB4ZGUsIDB4YmYsIDB4YTksIDB4NGMsIDB4ZWMsIDB4YzMsIDB4ZGQsIDB4M2YsIDB4ZTAsIDB4MjQsCi0gIDB4OTcsIDB4NGMsIDB4YjEsIDB4MGIsIDB4NTMsIDB4NjIsIDB4ZmUsIDB4NWUsIDB4MTMsIDB4NDgsIDB4NDIsIDB4NzgsCi0gIDB4ZmMsIDB4YTcsIDB4OWYsIDB4Y2UsIDB4N2YsIDB4YmYsIDB4OWYsIDB4ZjMsIDB4YzgsIDB4MGYsIDB4NWYsIDB4NDQsCi0gIDB4MjAsIDB4YjEsIDB4MDQsIDB4YzIsIDB4ODAsIDB4YjgsIDB4NzYsIDB4MDAsIDB4MDUsIDB4MmYsIDB4MmUsIDB4YzAsCi0gIDB4NjAsIDB4MDIsIDB4ZWEsIDB4ZjAsIDB4NTgsIDB4NzUsIDB4N2UsIDB4YzMsIDB4NTQsIDB4ZDIsIDB4ODAsIDB4OWEsCi0gIDB4NzEsIDB4NjgsIDB4NzAsIDB4NTUsIDB4ZjgsIDB4NGMsIDB4ZjUsIDB4MzgsIDB4NWEsIDB4ZDIsIDB4YWUsIDB4NDgsCi0gIDB4ODUsIDB4MTYsIDB4YjcsIDB4NzksIDB4ZDEsIDB4NjksIDB4OTUsIDB4Y2EsIDB4MjEsIDB4MjMsIDB4NzQsIDB4NjIsCi0gIDB4YmMsIDB4ZjMsIDB4MjgsIDB4YTQsIDB4MzAsIDB4ZDAsIDB4YTcsIDB4ZDksIDB4ZmEsIDB4YzEsIDB4MDIsIDB4MzYsCi0gIDB4ZDcsIDB4N2IsIDB4N2MsIDB4OGIsIDB4NjEsIDB4YmYsIDB4YWEsIDB4ODAsIDB4YzAsIDB4YTcsIDB4ODEsIDB4MTcsCi0gIDB4N2MsIDB4YWEsIDB4MmEsIDB4ZDMsIDB4NWEsIDB4ZjksIDB4YzcsIDB4ODgsIDB4MjYsIDB4MDcsIDB4Y2EsIDB4ZjQsCi0gIDB4MGUsIDB4YWUsIDB4OTgsIDB4MjMsIDB4YjEsIDB4MzYsIDB4Y2UsIDB4M2UsIDB4Y2IsIDB4YmQsIDB4NWMsIDB4ZTUsCi0gIDB4MzMsIDB4MTMsIDB4ZDAsIDB4ZmEsIDB4ZGQsIDB4YzAsIDB4NmMsIDB4OTQsIDB4ODEsIDB4YjAsIDB4ZGIsIDB4ODQsCi0gIDB4NmEsIDB4OGMsIDB4NGQsIDB4OWMsIDB4ZDksIDB4MWIsIDB4NzAsIDB4OGYsIDB4MjcsIDB4MzYsIDB4NDEsIDB4MGEsCi0gIDB4YzksIDB4Y2EsIDB4ZDQsIDB4YmUsIDB4NTYsIDB4M2UsIDB4MjcsIDB4YzcsIDB4ZTAsIDB4ODAsIDB4MzgsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZmYsIDB4ZmYsIDB4MDUsIDB4NmEsIDB4YTIsIDB4NTgsIDB4NjgsCi0gIDB4OGMsIDB4NDIsIDB4MTEsIDB4OTQsIDB4ODgsIDB4ODQsIDB4NjEsIDB4NDAsIDB4NGMsIDB4MjAsIDB4MzgsIDB4MTcsCi0gIDB4NjAsIDB4MDEsIDB4NDQsIDB4NDAsIDB4MTIsIDB4YTcsIDB4NjMsIDB4MjYsIDB4MGIsIDB4MDUsIDB4OTUsIDB4ZjQsCi0gIDB4NzIsIDB4ZmMsIDB4MGEsIDB4OTAsIDB4NTUsIDB4ZDMsIDB4ZmYsIDB4ODIsIDB4NDksIDB4NjQsIDB4ODQsIDB4NWQsCi0gIDB4NDAsIDB4ZTgsIDB4Y2EsIDB4MTAsIDB4OTIsIDB4NzgsIDB4MzksIDB4OGIsIDB4YmYsIDB4YmIsIDB4NDcsIDB4M2MsCi0gIDB4ZmEsIDB4YmQsIDB4YmMsIDB4ZGEsIDB4MTgsIDB4YmQsIDB4ZDMsIDB4ZTUsIDB4NzYsIDB4MmEsIDB4MTcsIDB4ZGUsCi0gIDB4OGUsIDB4ZmYsIDB4ZGQsIDB4NTMsIDB4NmYsIDB4NWYsIDB4MGYsIDB4ZDIsIDB4NjMsIDB4NzIsIDB4NzAsIDB4ZDksCi0gIDB4MWUsIDB4OTcsIDB4YzQsIDB4MzEsIDB4M2EsIDB4NDQsIDB4NWQsIDB4MjcsIDB4ZjgsIDB4NjEsIDB4ZGYsIDB4YTYsCi0gIDB4ZTQsIDB4ZTEsIDB4MTYsIDB4MjcsIDB4MDUsIDB4ZjksIDB4NzEsIDB4YjAsIDB4NmMsIDB4MjYsIDB4OGEsIDB4MWMsCi0gIDB4YjQsIDB4NTksIDB4OWEsIDB4MzgsIDB4OTksIDB4MTUsIDB4YjMsIDB4MTIsIDB4NDYsIDB4MjgsIDB4NGEsIDB4OGEsCi0gIDB4MzUsIDB4ODUsIDB4YzEsIDB4N2MsIDB4ZTAsIDB4OGEsIDB4ZjUsIDB4NzIsIDB4ZjEsIDB4ZDgsIDB4N2EsIDB4ZDQsCi0gIDB4ZWEsIDB4ZDQsIDB4NTYsIDB4YTQsIDB4MTEsIDB4MjUsIDB4MWMsIDB4MjIsIDB4YjQsIDB4NGMsIDB4ZWQsIDB4ZmQsCi0gIDB4N2EsIDB4NWEsIDB4NzUsIDB4ZDUsIDB4YjksIDB4ZTMsIDB4YTksIDB4ODcsIDB4MjEsIDB4ODIsIDB4YTEsIDB4ZjEsCi0gIDB4MGIsIDB4NWYsIDB4NDAsIDB4MWQsIDB4ZmMsIDB4MmUsIDB4NDIsIDB4ZmMsIDB4MTgsIDB4YjgsIDB4ODksIDB4N2UsCi0gIDB4YWMsIDB4MzcsIDB4YmEsIDB4ZjAsIDB4ZTUsIDB4YWMsIDB4MmQsIDB4NTQsIDB4NTIsIDB4NDgsIDB4ODAsIDB4NzYsCi0gIDB4NDIsIDB4NDMsIDB4Y2UsIDB4OTQsIDB4MTMsIDB4MjMsIDB4ZGEsIDB4MzYsIDB4NjEsIDB4MjksIDB4ZTksIDB4ZjIsCi0gIDB4ZmQsIDB4N2QsIDB4ZGIsIDB4YWIsIDB4YzQsIDB4ZDcsIDB4NWYsIDB4NDAsIDB4NTIsIDB4MjYsIDB4Y2IsIDB4NjcsCi0gIDB4OGQsIDB4YzYsIDB4ZDgsIDB4ZDQsIDB4ZGMsIDB4ZjAsIDB4YTksIDB4MzcsIDB4ZDIsIDB4N2QsIDB4ZTYsIDB4NjIsCi0gIDB4NzYsIDB4ZGUsIDB4N2MsIDB4NDcsIDB4YjgsIDB4ZWEsIDB4MTYsIDB4NzEsIDB4MDUsIDB4ZmEsIDB4ZjgsIDB4MmIsCi0gIDB4MWIsIDB4YzAsIDB4NWIsIDB4MWIsIDB4OTgsIDB4ZjIsIDB4MzgsIDB4YmUsIDB4ZjQsIDB4ZjEsIDB4N2MsIDB4ODgsCi0gIDB4M2QsIDB4ZmQsIDB4YzUsIDB4YTgsIDB4MjYsIDB4MWIsIDB4ODcsIDB4NjAsIDB4MDAsIDB4MDQsIDB4NGEsIDB4NjgsCi0gIDB4NmMsIDB4MTYsIDB4MjIsIDB4ODAsIDB4MGYsIDB4MzQsIDB4NzcsIDB4Y2QsIDB4NzksIDB4ODksIDB4NzIsIDB4NDgsCi0gIDB4NDEsIDB4NzksIDB4NzIsIDB4MWEsIDB4OGMsIDB4NjIsIDB4OWIsIDB4YTUsIDB4ODUsIDB4MjYsIDB4ZDEsIDB4NjQsCi0gIDB4YzYsIDB4MzUsIDB4ZWEsIDB4OWQsIDB4NGIsIDB4NjIsIDB4MzUsIDB4YTUsIDB4OGYsIDB4MjMsIDB4ODIsIDB4MjcsCi0gIDB4ODgsIDB4NTQsIDB4OWEsIDB4OWYsIDB4YTIsIDB4ODQsIDB4MTQsIDB4OWIsIDB4YTMsIDB4NzQsIDB4NDIsIDB4ZjAsCi0gIDB4MWEsIDB4ZWQsIDB4OWEsIDB4YTIsIDB4OTMsIDB4OTAsIDB4ZjcsIDB4YTEsIDB4NWQsIDB4MTIsIDB4NjYsIDB4ZTcsCi0gIDB4ZjksIDB4NTksIDB4N2IsIDB4ZjIsIDB4Y2IsIDB4YzIsIDB4NjksIDB4ODEsIDB4MGYsIDB4ZjMsIDB4NzIsIDB4NjUsCi0gIDB4ZWQsIDB4MjEsIDB4MGYsIDB4ODAsIDB4ZWMsIDB4NDIsIDB4NWEsIDB4ZTcsIDB4OTYsIDB4YTIsIDB4YWYsIDB4YmMsCi0gIDB4MmYsIDB4YzcsIDB4MTUsIDB4MzMsIDB4YmYsIDB4M2MsIDB4ZTQsIDB4ZWIsIDB4ZDUsIDB4ZTQsIDB4ZWEsIDB4ZTksCi0gIDB4ZjksIDB4ZmEsIDB4ZWUsIDB4Y2IsIDB4NjgsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4ZmYsCi0gIDB4ZmYsIDB4ZmYsIDB4MDksIDB4NmYsIDB4YTIsIDB4MjEsIDB4NDksIDB4ODgsIDB4MjYsIDB4MWEsIDB4ODQsIDB4MGIsCi0gIDB4MWQsIDB4MmUsIDB4YTIsIDB4ZDMsIDB4OTksIDB4NTYsIDB4MDAsIDB4MGIsIDB4Y2QsIDB4NTMsIDB4MDcsIDB4MmIsCi0gIDB4OTIsIDB4MzAsIDB4MmUsIDB4YjIsIDB4NjMsIDB4YzIsIDB4NjQsIDB4MjEsIDB4MTIsIDB4M2IsIDB4ZWMsIDB4YzYsCi0gIDB4ZDQsIDB4NjAsIDB4ZTksIDB4MmYsIDB4ZjQsIDB4YzYsIDB4NTgsIDB4MjEsIDB4YjUsIDB4NmUsIDB4ZjcsIDB4Y2UsCi0gIDB4YzUsIDB4ZWEsIDB4OGUsIDB4Y2UsIDB4YzYsIDB4NGEsIDB4NjIsIDB4ZGMsIDB4NWEsIDB4MTMsIDB4ODMsIDB4MmYsCi0gIDB4OTAsIDB4NzgsIDB4YTcsIDB4NTcsIDB4ZTgsIDB4MWEsIDB4MjEsIDB4ZjEsIDB4YTQsIDB4MmYsIDB4OTYsIDB4MjIsCi0gIDB4OWIsIDB4NzQsIDB4ZmMsIDB4ZjcsIDB4ZjMsIDB4ZmIsIDB4MjIsIDB4NmQsIDB4YjksIDB4NjAsIDB4YTUsIDB4YWYsCi0gIDB4YjQsIDB4NzksIDB4YWYsIDB4NmIsIDB4ZTksIDB4MTYsIDB4ZTgsIDB4YTMsIDB4MWUsIDB4MWUsIDB4MmEsIDB4MGEsCi0gIDB4ZDMsIDB4NWEsIDB4OWIsIDB4MGUsIDB4MWEsIDB4Y2YsIDB4YjAsIDB4ZTYsIDB4NzEsIDB4YTEsIDB4OTAsIDB4NjQsCi0gIDB4ODgsIDB4MzksIDB4YjYsIDB4MzQsIDB4ZTQsIDB4ZmMsIDB4OTQsIDB4ZmEsIDB4OTEsIDB4MjMsIDB4MGIsIDB4NDAsCi0gIDB4Y2MsIDB4NTMsIDB4MTQsIDB4ZDksIDB4MDIsIDB4NTQsIDB4YTYsIDB4NDAsIDB4NjAsIDB4NGMsIDB4MzAsIDB4M2QsCi0gIDB4NmUsIDB4NWIsIDB4OWMsIDB4ZTEsIDB4NTksIDB4MTYsIDB4YTAsIDB4YjEsIDB4N2MsIDB4MjIsIDB4YjEsIDB4NTAsCi0gIDB4MWUsIDB4NDIsIDB4OTIsIDB4MDIsIDB4ZjAsIDB4OTgsIDB4ZDQsIDB4NzEsIDB4ZDAsIDB4OWMsIDB4YzksIDB4NTMsCi0gIDB4MTQsIDB4ZGYsIDB4ODEsIDB4ZmQsIDB4MDksIDB4ODksIDB4MTMsIDB4NDYsIDB4NGEsIDB4OTgsIDB4N2EsIDB4MmYsCi0gIDB4YmIsIDB4YzQsIDB4MDAsIDB4OWMsIDB4MjgsIDB4NDUsIDB4MTAsIDB4ODQsIDB4MzIsIDB4NzEsIDB4MjEsIDB4MDEsCi0gIDB4MjcsIDB4NTMsIDB4Y2YsIDB4MWEsIDB4ODMsIDB4YmQsIDB4OTQsIDB4N2YsIDB4ZjQsIDB4ZWUsIDB4YjksIDB4YjksCi0gIDB4ZjUsIDB4YzcsIDB4YTEsIDB4N2YsIDB4ZGYsIDB4ZjksIDB4NmYsIDB4Y2IsIDB4ODUsIDB4MWIsIDB4ZjIsIDB4MGUsCi0gIDB4MzQsIDB4NzQsIDB4YmEsIDB4Y2IsIDB4ZTgsIDB4YTYsIDB4NmUsIDB4ZDMsIDB4YzcsIDB4NTQsIDB4ODMsIDB4NjIsCi0gIDB4ODgsIDB4ZjcsIDB4YmQsIDB4OWQsIDB4OGQsIDB4M2IsIDB4NWIsIDB4ZGIsIDB4ODksIDB4NjgsIDB4YzcsIDB4ZDksCi0gIDB4YmUsIDB4YWYsIDB4ZTUsIDB4ZjAsIDB4YjAsIDB4MDMsIDB4ZDcsIDB4Y2MsIDB4ZTQsIDB4YzIsIDB4ODEsIDB4MjgsCi0gIDB4NzYsIDB4MDAsIDB4YTgsIDB4MDksIDB4NTAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4ZWEsIDB4ODUsIDB4OWIsIDB4OGQsCi0gIDB4NjgsIDB4YzcsIDB4OWIsIDB4OWEsIDB4YjQsIDB4OTcsIDB4Y2MsIDB4M2EsIDB4OWQsIDB4YjgsIDB4NDIsIDB4MzEsCi0gIDB4NWUsIDB4ODUsIDB4MzAsIDB4ZjEsIDB4NDAsIDB4MmMsIDB4YjQsIDB4NjcsIDB4OTgsIDB4MGIsIDB4ZDYsIDB4MGQsCi0gIDB4Y2MsIDB4NDYsIDB4NTgsIDB4YTYsIDB4Y2MsIDB4YmQsIDB4YzAsIDB4MzUsIDB4NjksIDB4NDQsIDB4MDUsIDB4MjMsCi0gIDB4YmYsIDB4ODksIDB4YTEsIDB4OGQsIDB4M2UsIDB4YWEsIDB4YjQsIDB4OWUsIDB4MWMsIDB4NGEsIDB4NmIsIDB4ZTUsCi0gIDB4ZjEsIDB4ZjgsIDB4YTUsIDB4ZTMsIDB4YWYsIDB4ZGIsIDB4ZTgsIDB4ZjUsIDB4MzAsIDB4NjgsIDB4NzIsIDB4MzUsCi0gIDB4YjYsIDB4MDAsIDB4MmUsIDB4NzcsIDB4ODIsIDB4OTUsIDB4ZDYsIDB4M2IsIDB4YWMsIDB4NWMsIDB4YzMsIDB4N2YsCi0gIDB4MDksIDB4M2MsIDB4YzksIDB4YmUsIDB4ODgsIDB4OWUsIDB4ZGEsIDB4NzcsIDB4NmIsIDB4ODAsIDB4YjcsIDB4YTUsCi0gIDB4MTYsIDB4MzQsIDB4NGIsIDB4YmEsIDB4MDUsIDB4ODYsIDB4MDksIDB4MDAsIDB4ZDksIDB4OTcsIDB4ZjgsIDB4ZjcsCi0gIDB4YzcsIDB4NjgsIDB4YTAsIDB4MDYsIDB4ZGUsIDB4OGMsIDB4ZWMsIDB4OTgsIDB4OGQsIDB4Y2EsIDB4ODAsIDB4ODQsCi0gIDB4NjQsIDB4NzMsIDB4ZmEsIDB4YmMsIDB4YmQsIDB4ZDUsIDB4ZTcsIDB4NWUsIDB4MDAsIDB4MWMsIDB4MjEsIDB4MWEsCi0gIDB4ODgsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZmYsIDB4ZmYsIDB4MGIsIDB4NmEsIDB4YTQsIDB4YjAsIDB4ZDAsIDB4NDIsCi0gIDB4YjQsIDB4MWIsIDB4MGQsIDB4YzIsIDB4MDgsIDB4NzksIDB4MGIsIDB4YTcsIDB4MDIsIDB4OTksIDB4NjAsIDB4MDAsCi0gIDB4OTEsIDB4NDEsIDB4NGMsIDB4ZDQsIDB4NDEsIDB4YzcsIDB4ODgsIDB4ZTUsIDB4NGEsIDB4YzAsIDB4NzYsIDB4MjAsCi0gIDB4YTUsIDB4ZjMsIDB4YzcsIDB4MzksIDB4NGEsIDB4NTQsIDB4MGQsIDB4YzksIDB4ZDksIDB4ZmQsIDB4OWIsIDB4NjEsCi0gIDB4NDQsIDB4MzQsIDB4YzQsIDB4YWUsIDB4Y2IsIDB4N2MsIDB4MDQsIDB4MGMsIDB4OTksIDB4NTgsIDB4OWYsIDB4NjAsCi0gIDB4NjMsIDB4ZWYsIDB4MmUsIDB4NTksIDB4ZjQsIDB4OGEsIDB4ZmUsIDB4MGYsIDB4ZGMsIDB4MTgsIDB4ZTksIDB4NGYsCi0gIDB4ZGIsIDB4NTIsIDB4NjgsIDB4MWIsIDB4MTcsIDB4Y2YsIDB4ZGUsIDB4NjYsIDB4YjUsIDB4NGIsIDB4OWEsIDB4ODcsCi0gIDB4ODQsIDB4YTMsIDB4YjEsIDB4ZDIsIDB4ZDQsIDB4NzcsIDB4MDksIDB4OGQsIDB4ODMsIDB4OGQsIDB4YjAsIDB4NjksCi0gIDB4NWIsIDB4NDgsIDB4YTksIDB4ODAsIDB4MTEsIDB4ZTIsIDB4OTksIDB4ZjksIDB4YzksIDB4MmUsIDB4MjgsIDB4OGMsCi0gIDB4NTksIDB4MGUsIDB4MmUsIDB4NzYsIDB4NGIsIDB4NDYsIDB4NWYsIDB4YTQsIDB4YWIsIDB4NzAsIDB4YTMsIDB4NGIsCi0gIDB4NzIsIDB4YWMsIDB4M2YsIDB4ZDYsIDB4NjUsIDB4MzQsIDB4YjIsIDB4NDUsIDB4ZDIsIDB4OWMsIDB4MTIsIDB4MDUsCi0gIDB4MjUsIDB4NmMsIDB4ZTgsIDB4OWQsIDB4NzMsIDB4YzUsIDB4ODEsIDB4NmYsIDB4ZDIsIDB4ODYsIDB4MWIsIDB4NjEsCi0gIDB4NjgsIDB4YTIsIDB4MzMsIDB4YTQsIDB4ZjAsIDB4ZGUsIDB4OGMsIDB4NTcsIDB4M2MsIDB4MTksIDB4ZmUsIDB4NTksCi0gIDB4MGMsIDB4OWUsIDB4M2UsIDB4NTQsIDB4ZGMsIDB4ODcsIDB4MGUsIDB4NTAsIDB4MmQsIDB4NjIsIDB4OTcsIDB4MWQsCi0gIDB4MDksIDB4ZjMsIDB4YmQsIDB4MmMsIDB4MTQsIDB4MWMsIDB4ZGQsIDB4ODcsIDB4NDcsIDB4ZGIsIDB4Y2EsIDB4ZTgsCi0gIDB4ZGEsIDB4MDAsIDB4YzcsIDB4M2QsIDB4Y2IsIDB4MzIsIDB4MDMsIDB4OGQsIDB4YjUsIDB4NGMsIDB4YWIsIDB4OTUsCi0gIDB4NDcsIDB4ZWQsIDB4ZWEsIDB4MDksIDB4N2YsIDB4MzIsIDB4MjYsIDB4MTQsIDB4Y2QsIDB4NjcsIDB4M2EsIDB4ZWMsCi0gIDB4YzMsIDB4YTksIDB4M2EsIDB4N2MsIDB4YmYsIDB4YjEsIDB4ZDEsIDB4NjUsIDB4ODUsIDB4NGYsIDB4ODUsIDB4MmEsCi0gIDB4MTgsIDB4MjAsIDB4ODcsIDB4M2UsIDB4NTcsIDB4YzQsIDB4ZTMsIDB4NjMsIDB4YWIsIDB4ZTEsIDB4Y2YsIDB4MzgsCi0gIDB4MDMsIDB4ZTcsIDB4ZGMsIDB4NWMsIDB4YzQsIDB4MDAsIDB4ZWMsIDB4MDAsIDB4MDIsIDB4MjgsIDB4OTYsIDB4MzIsCi0gIDB4Y2EsIDB4MDUsIDB4YTgsIDB4MjgsIDB4OGQsIDB4ZjYsIDB4NGEsIDB4ZDYsIDB4OTQsIDB4YTYsIDB4YTYsIDB4ZjgsCi0gIDB4NjgsIDB4OTIsIDB4MzEsIDB4ZjgsIDB4OGEsIDB4MDAsIDB4OWIsIDB4NTIsIDB4OTMsIDB4MTAsIDB4NDUsIDB4OTcsCi0gIDB4ZDAsIDB4OWQsIDB4ZTgsIDB4OTgsIDB4MjYsIDB4YWMsIDB4MTksIDB4MjEsIDB4NmMsIDB4YWUsIDB4ZGMsIDB4MWIsCi0gIDB4MmIsIDB4MTQsIDB4ZTEsIDB4NjYsIDB4OTQsIDB4NzUsIDB4MDUsIDB4NTIsIDB4MzIsIDB4ZTYsIDB4ZmIsIDB4ZDIsCi0gIDB4ZGYsIDB4OTAsIDB4NzIsIDB4YTAsIDB4NDMsIDB4NTIsIDB4YzgsIDB4MGUsIDB4YjQsIDB4MTEsIDB4NjUsIDB4OTQsCi0gIDB4ZmUsIDB4MWUsIDB4ZGEsIDB4YTEsIDB4Y2UsIDB4YjksIDB4N2IsIDB4MzksIDB4MTcsIDB4NWUsIDB4OTYsIDB4ZTgsCi0gIDB4NTcsIDB4ZDcsIDB4M2MsIDB4ZTgsIDB4ODIsIDB4MTQsIDB4ZTIsIDB4YzAsIDB4ZDYsIDB4ZjYsIDB4NzUsIDB4NTYsCi0gIDB4MjQsIDB4MTMsIDB4NjksIDB4ZjgsIDB4ODcsIDB4Y2UsIDB4NDcsIDB4ZGQsIDB4OWQsIDB4NWMsIDB4MjEsIDB4MWEsCi0gIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4NmEsIDB4YTQsIDB4YjEsIDB4ODUsIDB4MjQsCi0gIDB4MzYsIDB4MjIsIDB4ODQsIDB4NWEsIDB4ZWEsIDB4MmIsIDB4YTYsIDB4OTgsIDB4ZDQsIDB4MTAsIDB4YTAsIDB4MDAsCi0gIDB4OTAsIDB4YTEsIDB4MTAsIDB4MjIsIDB4YTAsIDB4N2MsIDB4OTEsIDB4MDYsIDB4OGIsIDB4NTMsIDB4NzIsIDB4NGYsCi0gIDB4YjAsIDB4NjUsIDB4NDIsIDB4NjQsIDB4MTAsIDB4ZmUsIDB4NGYsIDB4NzEsIDB4NGQsIDB4MzgsIDB4N2UsIDB4N2EsCi0gIDB4ZDksIDB4NWIsIDB4YjcsIDB4M2QsIDB4NTIsIDB4NzIsIDB4NzgsIDB4MjIsIDB4ZmUsIDB4YzcsIDB4ZGMsIDB4YWIsCi0gIDB4YjUsIDB4OGEsIDB4NzYsIDB4MzcsIDB4NWUsIDB4ZjIsIDB4YzMsIDB4ODMsIDB4YjAsIDB4NTMsIDB4ZjAsIDB4NWMsCi0gIDB4NzIsIDB4ZTUsIDB4NTYsIDB4ZjYsIDB4NWUsIDB4NWIsIDB4OTMsIDB4MzQsIDB4ZjMsIDB4OTYsIDB4OGUsIDB4ZTYsCi0gIDB4MzcsIDB4MTksIDB4NWQsIDB4MzEsIDB4MDAsIDB4MGQsIDB4MmIsIDB4ZDQsIDB4OWIsIDB4ZmIsIDB4Y2UsIDB4NzQsCi0gIDB4OTQsIDB4OTMsIDB4MjMsIDB4ZDIsIDB4NzcsIDB4NWYsIDB4NjgsIDB4MTAsIDB4YTksIDB4MWUsIDB4OTYsIDB4ZGQsCi0gIDB4YTMsIDB4NDUsIDB4MTgsIDB4Y2IsIDB4YzQsIDB4MTcsIDB4N2YsIDB4MmIsIDB4NDAsIDB4MmQsIDB4YmUsIDB4MzIsCi0gIDB4MmEsIDB4MWEsIDB4YzEsIDB4NDQsIDB4NTAsIDB4M2IsIDB4OTEsIDB4MDQsIDB4MTEsIDB4M2EsIDB4MzgsIDB4NjUsCi0gIDB4ZWEsIDB4OGIsIDB4OWMsIDB4MjcsIDB4MWUsIDB4MDYsIDB4YzUsIDB4NjIsIDB4YWQsIDB4OTQsIDB4YjQsIDB4MjcsCi0gIDB4NWQsIDB4MmEsIDB4NzksIDB4NTQsIDB4ZTcsIDB4NTMsIDB4MDgsIDB4MDUsIDB4NTUsIDB4NjgsIDB4NWEsIDB4ZmYsCi0gIDB4YTEsIDB4MjgsIDB4ZDMsIDB4NjMsIDB4YjQsIDB4YTIsIDB4YjUsIDB4N2MsIDB4MzAsIDB4MzksIDB4Y2MsIDB4YjYsCi0gIDB4MWUsIDB4NjcsIDB4M2MsIDB4YzksIDB4ODAsIDB4YWYsIDB4NTQsIDB4NTUsIDB4Y2MsIDB4ZDIsIDB4NDEsIDB4NGQsCi0gIDB4NWUsIDB4ZTYsIDB4YmEsIDB4YzYsIDB4MTYsIDB4NmMsIDB4ZTgsIDB4M2MsIDB4MjksIDB4OTksIDB4MzYsIDB4NTcsCi0gIDB4NjYsIDB4ZjIsIDB4MTksIDB4ZmYsIDB4MzgsIDB4ZjYsIDB4MmUsIDB4NzgsIDB4NTUsIDB4M2QsIDB4N2EsIDB4MjQsCi0gIDB4MTcsIDB4OWEsIDB4YWIsIDB4NWUsIDB4ZTAsIDB4ZWUsIDB4N2QsIDB4NTYsIDB4MGYsIDB4NTEsIDB4YTYsIDB4MWEsCi0gIDB4ZGMsIDB4ZWIsIDB4Y2IsIDB4NTQsIDB4ZjIsIDB4ZWQsIDB4ZjIsIDB4Y2YsIDB4YzMsIDB4M2UsIDB4OGYsIDB4ZmEsCi0gIDB4YmYsIDB4Y2MsIDB4MDEsIDB4ZWYsIDB4ZjIsIDB4MmIsIDB4NDEsIDB4MzAsIDB4Y2MsIDB4M2IsIDB4MDAsIDB4MDAsCi0gIDB4MTIsIDB4YTQsIDB4NTgsIDB4NTAsIDB4NGEsIDB4MmEsIDB4MDIsIDB4N2QsIDB4ZDksIDB4ZTMsIDB4OGYsIDB4NmYsCi0gIDB4NmIsIDB4NWYsIDB4ZmEsIDB4OTMsIDB4MTYsIDB4MTMsIDB4ZGIsIDB4MTIsIDB4MzUsIDB4ZmMsIDB4NTIsIDB4YjYsCi0gIDB4OTEsIDB4MDQsIDB4ZWIsIDB4MTAsIDB4YTQsIDB4ZmQsIDB4NjUsIDB4ZDcsIDB4NTMsIDB4OGYsIDB4MmEsIDB4ZTYsCi0gIDB4NGYsIDB4NDYsIDB4MGQsIDB4ZjEsIDB4ZWEsIDB4YjYsIDB4MDgsIDB4YmYsIDB4OTQsIDB4ZDIsIDB4YjAsIDB4YmIsCi0gIDB4MzgsIDB4NWMsIDB4N2QsIDB4Y2UsIDB4ODcsIDB4MzMsIDB4YzIsIDB4NDUsIDB4OGUsIDB4ZmUsIDB4OTEsIDB4MWYsCi0gIDB4ZmYsIDB4ZTUsIDB4YWUsIDB4NTQsIDB4MjIsIDB4ODgsIDB4ZWIsIDB4YjYsIDB4OTcsIDB4YjEsIDB4NDUsIDB4YzQsCi0gIDB4Y2UsIDB4Y2MsIDB4NTYsIDB4NjAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4YTAsIDB4NDAsIDB4MTEsIDB4OTAsIDB4ZjMsCi0gIDB4YzMsIDB4NTYsIDB4OWMsIDB4NGIsIDB4MGEsIDB4MzMsIDB4YjQsIDB4MzEsIDB4YWYsIDB4ZGYsIDB4OWYsIDB4ZDQsCi0gIDB4N2UsIDB4YmMsIDB4MzgsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MGYsCi0gIDB4NzAsIDB4YTEsIDB4YjEsIDB4NDgsIDB4NjIsIDB4NjQsIDB4MDgsIDB4OGQsIDB4ODUsIDB4MDIsIDB4NTAsIDB4ODIsCi0gIDB4NDcsIDB4OTIsIDB4ZDYsIDB4NDQsIDB4MDksIDB4YjAsIDB4MTAsIDB4MTYsIDB4OWIsIDB4MTIsIDB4NzAsIDB4YmMsCi0gIDB4NzIsIDB4Y2YsIDB4MDcsIDB4MjgsIDB4NTQsIDB4YTEsIDB4ZTcsIDB4NGMsIDB4YWEsIDB4YzcsIDB4ZGUsIDB4YzYsCi0gIDB4NjgsIDB4YmQsIDB4ZTcsIDB4YWQsIDB4MDMsIDB4YzMsIDB4YmEsIDB4YzUsIDB4ZGMsIDB4NDksIDB4NDAsIDB4ZjIsCi0gIDB4YmMsIDB4YTgsIDB4MGQsIDB4M2YsIDB4NTQsIDB4ZTYsIDB4OTksIDB4MjEsIDB4ZDMsIDB4OGEsIDB4NzcsIDB4OGUsCi0gIDB4OWQsIDB4OWMsIDB4MzEsIDB4ZDYsIDB4NjIsIDB4MzEsIDB4ZGQsIDB4MWYsIDB4NDgsIDB4ZDIsIDB4MzQsIDB4NzUsCi0gIDB4M2IsIDB4ODMsIDB4ZDksIDB4MmYsIDB4MTksIDB4MjIsIDB4OTMsIDB4ZGIsIDB4ZDYsIDB4MDUsIDB4OTUsIDB4MDMsCi0gIDB4MjcsIDB4ZDUsIDB4ODYsIDB4OGMsIDB4ZTYsIDB4NTcsIDB4NGQsIDB4ZTAsIDB4OTcsIDB4ZDIsIDB4NzEsIDB4ZGIsCi0gIDB4ZjcsIDB4ZDMsIDB4MDcsIDB4NDAsIDB4ZjYsIDB4NzYsIDB4M2QsIDB4ZmQsIDB4MWUsIDB4OGIsIDB4MjgsIDB4ZGEsCi0gIDB4NzUsIDB4ZDUsIDB4ZDgsIDB4YjgsIDB4NTksIDB4NTEsIDB4YjksIDB4ZmYsIDB4ZDgsIDB4ZTksIDB4MmMsIDB4NWMsCi0gIDB4NTksIDB4ZDksIDB4ZDcsIDB4ZGQsIDB4NjYsIDB4NWEsIDB4MmUsIDB4ZmQsIDB4YTYsIDB4YzQsIDB4ZDgsIDB4NWQsCi0gIDB4NmIsIDB4M2IsIDB4MGYsIDB4NGQsIDB4MmIsIDB4NjIsIDB4MDksIDB4NzIsIDB4ZjcsIDB4MWQsIDB4OTcsIDB4YWYsCi0gIDB4ZjQsIDB4NGUsIDB4NjQsIDB4YWMsIDB4YTIsIDB4ZjcsIDB4NmMsIDB4ZWMsIDB4ZGEsIDB4YWEsIDB4YWEsIDB4NGEsCi0gIDB4M2YsIDB4MTksIDB4ZGQsIDB4MWQsIDB4ZGMsIDB4ZGUsIDB4NmIsIDB4N2MsIDB4NmEsIDB4NDQsIDB4NGQsIDB4ZTMsCi0gIDB4OGEsIDB4NDMsIDB4NWYsIDB4ODMsIDB4Y2IsIDB4MmQsIDB4OGQsIDB4YjAsIDB4NmYsIDB4YzgsIDB4NTMsIDB4MmMsCi0gIDB4MjcsIDB4NmMsIDB4MjIsIDB4NmEsIDB4NDIsIDB4ODgsIDB4NDYsIDB4YTQsIDB4YzUsIDB4YzgsIDB4OGUsIDB4NzEsCi0gIDB4YzQsIDB4ZmIsIDB4NzgsIDB4ZDksIDB4NmMsIDB4OTIsIDB4N2IsIDB4ODcsIDB4NTYsIDB4ZGEsIDB4ZjIsIDB4YzEsCi0gIDB4ODYsIDB4NWEsIDB4MTEsIDB4YjEsIDB4MDYsIDB4NmQsIDB4NGIsIDB4ZTgsIDB4MWMsIDB4NmQsIDB4OTIsIDB4MmEsCi0gIDB4YmMsIDB4YWEsIDB4MTUsIDB4MzEsIDB4MjksIDB4NzgsIDB4ZDksIDB4ZDksIDB4NGYsIDB4M2EsIDB4YWUsIDB4NjMsCi0gIDB4ZTUsIDB4OWIsIDB4OTcsIDB4NjcsIDB4NTUsIDB4ZTMsIDB4ZTUsIDB4ZTEsIDB4YzgsIDB4MDEsIDB4ZWYsIDB4ZjAsCi0gIDB4MmMsIDB4NDEsIDB4MzAsIDB4ZDQsIDB4M2IsIDB4MDAsIDB4MDAsIDB4MjYsIDB4NDgsIDB4ODAsIDB4YTEsIDB4MDUsCi0gIDB4OWIsIDB4MWIsIDB4YjAsIDB4MDgsIDB4MmUsIDB4OWMsIDB4ZDQsIDB4NmEsIDB4MDQsIDB4YTQsIDB4YTIsIDB4ZjQsCi0gIDB4MDYsIDB4MmIsIDB4YWYsIDB4NDgsIDB4NGEsIDB4MjQsIDB4ZWUsIDB4OWMsIDB4ODcsIDB4MTUsIDB4NjgsIDB4NTUsCi0gIDB4MTIsIDB4ODUsIDB4NDUsIDB4NjYsIDB4ODUsIDB4MzgsIDB4ZWMsIDB4ZmIsIDB4ZWUsIDB4ZGIsIDB4YTgsIDB4ZjksCi0gIDB4MmUsIDB4YzYsIDB4N2IsIDB4MmQsIDB4YmUsIDB4ZGMsIDB4YTEsIDB4ZTksIDB4MDAsIDB4ZmIsIDB4OTEsIDB4MmYsCi0gIDB4ZDksIDB4MDEsIDB4NWYsIDB4MjgsIDB4YjEsIDB4YjcsIDB4YmYsIDB4NGQsIDB4YmQsIDB4N2QsIDB4MTIsIDB4YzUsCi0gIDB4YzYsIDB4ZWUsIDB4ZWEsIDB4M2EsIDB4NzgsIDB4NjMsIDB4YmEsIDB4ZTYsIDB4N2MsIDB4YjIsIDB4ZTMsIDB4ZDEsCi0gIDB4M2UsIDB4NDYsIDB4MTAsIDB4YmYsIDB4ZDcsIDB4NjMsIDB4OWYsIDB4NjcsIDB4N2IsIDB4YTcsIDB4ZjksIDB4ZjIsCi0gIDB4ZTUsIDB4NTUsIDB4N2YsIDB4MGQsIDB4YmYsIDB4MGUsIDB4NTEsIDB4OWUsIDB4ZGYsIDB4NTQsIDB4ZjQsIDB4NDAsCi0gIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4NzAsIDB4YTIsCi0gIDB4MzAsIDB4Y2QsIDB4YzgsIDB4MTgsIDB4MTksIDB4ODQsIDB4MTcsIDB4NzAsIDB4YjksIDB4YTIsIDB4ZTIsIDB4YTYsCi0gIDB4NWQsIDB4NTAsIDB4MDIsIDB4MDksIDB4MTMsIDB4OTEsIDB4ZjQsIDB4OGMsIDB4ZWMsIDB4MmEsIDB4MDAsIDB4MTgsCi0gIDB4MDQsIDB4MzIsIDB4MjMsIDB4MDUsIDB4YWMsIDB4MzIsIDB4NjMsIDB4OGYsIDB4YjMsIDB4YmIsIDB4NTksIDB4NWIsCi0gIDB4MjMsIDB4NmUsIDB4YmMsIDB4NTcsIDB4ZDcsIDB4MjYsIDB4MmQsIDB4NTUsIDB4NDcsIDB4ZDUsIDB4MTksIDB4MGMsCi0gIDB4YTgsIDB4MzgsIDB4YTIsIDB4MjIsIDB4ZWYsIDB4ZjYsIDB4Y2UsIDB4MjUsIDB4ZDAsIDB4YjYsIDB4NDYsIDB4ZmMsCi0gIDB4ZDMsIDB4NWEsIDB4NGYsIDB4MmQsIDB4ZTEsIDB4ZmIsIDB4NWUsIDB4MjMsIDB4NzEsIDB4NTUsIDB4NWYsIDB4ZjUsCi0gIDB4ZjMsIDB4MDgsIDB4YWMsIDB4NGMsIDB4ZTcsIDB4NGYsIDB4OWQsIDB4NmIsIDB4YzksIDB4ZWIsIDB4ZmIsIDB4NmQsCi0gIDB4NmYsIDB4MTcsIDB4NDEsIDB4MWEsIDB4YTQsIDB4NmIsIDB4OWIsIDB4MWMsIDB4ZGEsIDB4NGQsIDB4OWEsIDB4NGIsCi0gIDB4YTMsIDB4MmMsIDB4ODEsIDB4MTAsIDB4ODEsIDB4NDAsIDB4NjIsIDB4ODEsIDB4MTUsIDB4OTMsIDB4ZWIsIDB4YmQsCi0gIDB4ZTYsIDB4OTcsIDB4NzgsIDB4NDksIDB4YTUsIDB4NjgsIDB4MGYsIDB4MGIsIDB4MzYsIDB4MjcsIDB4OWUsIDB4YmIsCi0gIDB4N2IsIDB4YjgsIDB4ZTMsIDB4MmQsIDB4ODQsIDB4ODAsIDB4ZDgsIDB4OGIsIDB4MTQsIDB4NjksIDB4OTgsIDB4OGQsCi0gIDB4MTMsIDB4NjQsIDB4OWYsIDB4MTAsIDB4MWEsIDB4MmIsIDB4ZDYsIDB4MDgsIDB4NWQsIDB4NjQsIDB4OTEsIDB4NWQsCi0gIDB4MmUsIDB4MWMsIDB4ZjAsIDB4OWMsIDB4ZWUsIDB4YjUsIDB4NzMsIDB4NjYsIDB4ZjgsIDB4MzMsIDB4YTYsIDB4NDIsCi0gIDB4NTAsIDB4ZDIsIDB4YzIsIDB4YTEsIDB4MDUsIDB4MTUsIDB4ZDgsIDB4YzcsIDB4NDUsIDB4OTksIDB4YjgsIDB4YjUsCi0gIDB4YjIsIDB4ZjYsIDB4YmMsIDB4M2MsIDB4NWMsIDB4ODMsIDB4YmYsIDB4MDYsIDB4ZjQsIDB4NzYsIDB4YWYsIDB4YjEsCi0gIDB4ODEsIDB4ZWEsIDB4MDgsIDB4MDIsIDB4ZmMsIDB4MzYsIDB4MjQsIDB4M2QsIDB4M2QsIDB4MmIsIDB4M2IsIDB4ZDYsCi0gIDB4YjcsIDB4ZDAsIDB4MWIsIDB4NDMsIDB4MTIsIDB4NmMsIDB4NWYsIDB4N2MsIDB4YzksIDB4NTgsIDB4MzcsIDB4NDgsCi0gIDB4YjgsIDB4NTcsIDB4ODksIDB4NjEsIDB4MTYsIDB4NTUsIDB4NmQsIDB4NDksIDB4YTYsIDB4NjYsIDB4NTEsIDB4YjAsCi0gIDB4YzAsIDB4ZDUsIDB4M2MsIDB4YWQsIDB4OWYsIDB4Y2UsIDB4ZmMsIDB4YjcsIDB4YmEsIDB4MGYsIDB4N2YsIDB4ODEsCi0gIDB4NmIsIDB4MDYsIDB4MDYsIDB4YTEsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4ODUsIDB4NDAsIDB4YTAsIDB4ODQsIDB4ODYsCi0gIDB4YzQsIDB4MDAsIDB4YzIsIDB4ZGQsIDB4YzIsIDB4OTAsIDB4M2UsIDB4YTYsIDB4NTUsIDB4NDUsIDB4YmMsIDB4ZTUsCi0gIDB4OWEsIDB4ODAsIDB4OGEsIDB4OGIsIDB4OGIsIDB4YWQsIDB4YmQsIDB4OTYsIDB4YWEsIDB4MzMsIDB4YzksIDB4MzYsCi0gIDB4MmUsIDB4ZjEsIDB4OTEsIDB4OTQsIDB4YmMsIDB4ZmUsIDB4MGYsIDB4NmUsIDB4MWUsIDB4MTgsIDB4MWIsIDB4ODQsCi0gIDB4NjksIDB4YTAsIDB4YjQsIDB4YjEsIDB4OTgsIDB4NzAsIDB4NzgsIDB4NDIsIDB4NTgsIDB4MGIsIDB4OTQsIDB4ZGUsCi0gIDB4ZTMsIDB4NzMsIDB4OTQsIDB4YjQsIDB4Y2QsIDB4MzgsIDB4ZWUsIDB4NTAsIDB4MzQsIDB4NTEsIDB4YWIsIDB4NDIsCi0gIDB4YzksIDB4MmIsIDB4OTksIDB4YzYsIDB4ZmQsIDB4ZjEsIDB4OGQsIDB4NmMsIDB4YmMsIDB4NmQsIDB4NDksIDB4YWMsCi0gIDB4MWYsIDB4NTEsIDB4NmQsIDB4YjEsIDB4MTAsIDB4N2EsIDB4MWMsIDB4YmEsIDB4ODgsIDB4NzAsIDB4ODEsIDB4ODIsCi0gIDB4NWEsIDB4ODksIDB4OGEsIDB4MzAsIDB4ODIsIDB4NTQsIDB4OGYsIDB4NGYsIDB4N2QsIDB4ZWIsIDB4ZjEsIDB4ZWYsCi0gIDB4OWUsIDB4NDAsIDB4MWMsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MDcsCi0gIDB4NzMsIDB4NjIsIDB4OTgsIDB4NDksIDB4NjgsIDB4MjYsIDB4MTksIDB4ODQsIDB4MDYsIDB4OTksIDB4NmQsIDB4MDUsCi0gIDB4ZGIsIDB4MjAsIDB4MjAsIDB4MjgsIDB4NDQsIDB4YTAsIDB4ZTcsIDB4ZTIsIDB4NjIsIDB4YTcsIDB4ZjQsIDB4ZjIsCi0gIDB4MjEsIDB4MGUsIDB4NTcsIDB4MjUsIDB4YmMsIDB4ZGEsIDB4YzgsIDB4OTQsIDB4NTgsIDB4YmUsIDB4MDMsIDB4OTgsCi0gIDB4ZmUsIDB4OGYsIDB4YzEsIDB4MTUsIDB4ZmQsIDB4YTMsIDB4NDQsIDB4Y2MsIDB4NWUsIDB4ZTMsIDB4OGUsIDB4M2UsCi0gIDB4ZjgsIDB4YTEsIDB4NTAsIDB4ODMsIDB4YjEsIDB4ZWYsIDB4MmEsIDB4NmYsIDB4NjUsIDB4ODksIDB4NGYsIDB4OTksCi0gIDB4MzYsIDB4NWMsIDB4ZjIsIDB4NTQsIDB4NmEsIDB4ZGYsIDB4OTIsIDB4MjMsIDB4ZDYsIDB4ZmYsIDB4NGQsIDB4ZjMsCi0gIDB4OGMsIDB4NWUsIDB4M2UsIDB4OTgsIDB4NjYsIDB4MjgsIDB4MzQsIDB4NGEsIDB4NzIsIDB4OTcsIDB4MDgsIDB4MTQsCi0gIDB4YjgsIDB4Y2QsIDB4MTQsIDB4M2QsIDB4NDQsIDB4YjcsIDB4NmYsIDB4ODUsIDB4NzMsIDB4OTgsIDB4NzUsIDB4NDUsCi0gIDB4NzYsIDB4NjYsIDB4ZTMsIDB4MDksIDB4ODksIDB4YzUsIDB4MjEsIDB4ZjMsIDB4YmEsIDB4OTgsIDB4ZDYsIDB4ODQsCi0gIDB4ZjMsIDB4ZTMsIDB4OWQsIDB4MzEsIDB4YjMsIDB4OWMsIDB4YjYsIDB4YTgsIDB4NTAsIDB4OGMsIDB4NDUsIDB4OGQsCi0gIDB4M2YsIDB4NDYsIDB4ZGQsIDB4NDksIDB4NTYsIDB4NGUsIDB4YTQsIDB4MGQsIDB4YzYsIDB4MTcsIDB4MGUsIDB4YzYsCi0gIDB4ZmIsIDB4MjQsIDB4N2UsIDB4Y2IsIDB4N2MsIDB4MWEsIDB4OTQsIDB4MjAsIDB4NGYsIDB4NTcsIDB4MWEsIDB4YzUsCi0gIDB4YTYsIDB4MDAsIDB4YjksIDB4YjksIDB4ZmMsIDB4NTQsIDB4MGUsIDB4MTMsIDB4ZTAsIDB4NzUsIDB4OWIsIDB4MjIsCi0gIDB4NzksIDB4N2UsIDB4YmMsIDB4ODUsIDB4MWQsIDB4ZWEsIDB4YTcsIDB4YmYsIDB4ZDUsIDB4OGQsIDB4ZWMsIDB4YWMsCi0gIDB4ODIsIDB4YTksIDB4NGMsIDB4YTAsIDB4ZjMsIDB4MGMsIDB4NGYsIDB4M2IsIDB4ZTEsIDB4ZTYsIDB4MzEsIDB4ODMsCi0gIDB4NGUsIDB4NTUsIDB4YjEsIDB4MWUsIDB4OTMsIDB4ZDksIDB4ZTAsIDB4YTQsIDB4Y2UsIDB4OWUsIDB4YWYsIDB4MGIsCi0gIDB4NDUsIDB4YjcsIDB4NzAsIDB4N2EsIDB4NTUsIDB4MTIsIDB4MTQsIDB4ZGIsIDB4MTQsIDB4OTIsIDB4YTcsIDB4MTgsCi0gIDB4MWUsIDB4NjksIDB4N2MsIDB4OWIsIDB4MzIsIDB4MDAsIDB4M2YsIDB4N2YsIDB4NjYsIDB4YTksIDB4YjgsIDB4N2QsCi0gIDB4NjksIDB4ZDEsIDB4ZGYsIDB4NDYsIDB4OTUsIDB4ZDcsIDB4NDYsIDB4ZDksIDB4YWIsIDB4N2MsIDB4YmUsIDB4OWQsCi0gIDB4ZjksIDB4YjksIDB4ZjcsIDB4NzQsIDB4ODgsIDB4ZmYsIDB4ZDUsIDB4NDAsIDB4MWUsIDB4YmYsIDB4MDIsIDB4ZDYsCi0gIDB4MjIsIDB4ODcsIDB4NjAsIDB4MDEsIDB4MjgsIDB4MmEsIDB4NWQsIDB4MTAsIDB4MTQsIDB4MDgsIDB4OGMsIDB4MDAsCi0gIDB4MzQsIDB4NGMsIDB4NzMsIDB4YTQsIDB4ZmMsIDB4MzcsIDB4OTIsIDB4ODQsIDB4ZTAsIDB4Y2UsIDB4NzYsIDB4YTQsCi0gIDB4MzMsIDB4ZDYsIDB4ZjQsIDB4ZDAsIDB4OWYsIDB4OGEsIDB4YWEsIDB4ZWEsIDB4ODYsIDB4ODksIDB4MTYsIDB4YmMsCi0gIDB4MzQsIDB4NmIsIDB4MjMsIDB4MDksIDB4YTUsIDB4MmQsIDB4ZjMsIDB4YjcsIDB4ZjksIDB4NDcsIDB4MmEsIDB4ZGYsCi0gIDB4NWQsIDB4MzksIDB4NWMsIDB4MzAsIDB4NTMsIDB4MGEsIDB4NjksIDB4NWQsIDB4NGQsIDB4NjcsIDB4NzgsIDB4ZGEsCi0gIDB4M2UsIDB4NWQsIDB4NjYsIDB4OTQsIDB4OGEsIDB4NDMsIDB4NjAsIDB4MGIsIDB4OTgsIDB4Y2QsIDB4YWIsIDB4NTQsCi0gIDB4MDUsIDB4MDYsIDB4ODEsIDB4OGQsIDB4YjUsIDB4YTEsIDB4OTksIDB4YmMsIDB4OGQsIDB4YTEsIDB4NjQsIDB4ZDEsCi0gIDB4NzYsIDB4N2QsIDB4MjUsIDB4ZDMsIDB4NDcsIDB4YTIsIDB4Y2EsIDB4NjQsIDB4ZjIsIDB4NTEsIDB4ZDMsIDB4N2QsCi0gIDB4MzYsIDB4NzUsIDB4NjksIDB4OWIsIDB4YzEsIDB4NjIsIDB4MjMsIDB4MmMsIDB4NDMsIDB4ZGQsIDB4OWIsIDB4ZTksCi0gIDB4ZTgsIDB4ZGYsIDB4ZDIsIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZmYsCi0gIDB4ZmYsIDB4MTMsIDB4NmYsIDB4YTIsIDB4MzEsIDB4ODUsIDB4OGMsIDB4NDMsIDB4MDgsIDB4NjgsIDB4OWQsIDB4MTIsCi0gIDB4ZTMsIDB4MmUsIDB4Y2EsIDB4NWUsIDB4NWUsIDB4MDAsIDB4MDUsIDB4ZDUsIDB4ZTAsIDB4ZDYsIDB4NWYsIDB4NGMsCi0gIDB4YmIsIDB4YzYsIDB4NDAsIDB4NjUsIDB4ZmQsIDB4NTYsIDB4ZGYsIDB4ZmEsIDB4NzcsIDB4NWQsIDB4ZTAsIDB4MDAsCi0gIDB4ZDYsIDB4ZWMsIDB4NTMsIDB4YTAsIDB4MjcsIDB4OGQsIDB4ODMsIDB4YzMsIDB4ZjcsIDB4MWYsIDB4ZjUsIDB4NzksCi0gIDB4YzMsIDB4M2IsIDB4YjMsIDB4Y2IsIDB4NjYsIDB4ZjUsIDB4OWEsIDB4YmUsIDB4MDgsIDB4ODIsIDB4MzMsIDB4ODYsCi0gIDB4N2YsIDB4ZjUsIDB4MjQsIDB4OTMsIDB4OGUsIDB4NTYsIDB4ZTIsIDB4YjksIDB4ZjksIDB4MzIsIDB4NWEsIDB4ZWMsCi0gIDB4NTIsIDB4YzksIDB4ZjEsIDB4YzMsIDB4MWUsIDB4ODMsIDB4ZWQsIDB4NWUsIDB4MzUsIDB4YmUsIDB4ZWYsIDB4MDEsCi0gIDB4YTUsIDB4ZDUsIDB4MzksIDB4MGMsIDB4NzgsIDB4MzEsIDB4YTUsIDB4MDAsIDB4ZGYsIDB4YzUsIDB4NTksIDB4MWYsCi0gIDB4MGYsIDB4MTIsIDB4ZmMsIDB4YjMsIDB4NjksIDB4Y2UsIDB4YjcsIDB4MzAsIDB4YjEsIDB4MGYsIDB4OTEsIDB4OTMsCi0gIDB4MTYsIDB4NTMsIDB4NmEsIDB4ZTUsIDB4YjcsIDB4NzEsIDB4ZDgsIDB4MzUsIDB4OTYsIDB4OGIsIDB4YTgsIDB4MTEsCi0gIDB4M2IsIDB4ODEsIDB4MmUsIDB4YmMsIDB4YTEsIDB4MmMsIDB4ODksIDB4NTYsIDB4NWMsIDB4YjUsIDB4YTYsIDB4NzcsCi0gIDB4MjksIDB4N2IsIDB4YWMsIDB4MDgsIDB4OTYsIDB4ZjEsIDB4NDIsIDB4ZGMsIDB4NDUsIDB4MTYsIDB4ZjYsIDB4MWQsCi0gIDB4NWUsIDB4MjQsIDB4MTUsIDB4ZmQsIDB4MGMsIDB4NTksIDB4NDQsIDB4YTEsIDB4NmEsIDB4ZDUsIDB4ZDIsIDB4NTEsCi0gIDB4OGUsIDB4MzMsIDB4YTQsIDB4NDIsIDB4ZDYsIDB4NWQsIDB4ZDAsIDB4ZjIsIDB4OTQsIDB4ZmEsIDB4NGYsIDB4NzYsCi0gIDB4ZmUsIDB4MDMsIDB4ZGIsIDB4NDksIDB4NzgsIDB4N2EsIDB4YTIsIDB4OWIsIDB4YTMsIDB4MGQsIDB4YTQsIDB4YzUsCi0gIDB4NDMsIDB4YjIsIDB4YWEsIDB4NWIsIDB4MmQsIDB4YWQsIDB4NWYsIDB4MWIsIDB4YTUsIDB4NmMsIDB4YjUsIDB4ZDksCi0gIDB4MzAsIDB4ZDAsIDB4OTgsIDB4YzksIDB4OTAsIDB4Y2YsIDB4YTcsIDB4NGEsIDB4ODksIDB4OTEsIDB4OWIsIDB4MDQsCi0gIDB4MDUsIDB4MzYsIDB4ZGIsIDB4ODUsIDB4M2QsIDB4ZjcsIDB4NjcsIDB4ZTYsIDB4YzMsIDB4NmMsIDB4NzgsIDB4NjcsCi0gIDB4ZmYsIDB4ZmQsIDB4ZmQsIDB4NWIsIDB4ZTYsIDB4ZmYsIDB4NTAsIDB4MGYsIDB4OWYsIDB4OTMsIDB4NjMsIDB4MTAsCi0gIDB4YzMsIDB4YjAsIDB4MDAsIDB4MDIsIDB4YWEsIDB4ZTEsIDB4NjAsIDB4YTAsIDB4NDgsIDB4YWMsIDB4MDYsIDB4ZGUsCi0gIDB4MDIsIDB4MTksIDB4MzAsIDB4MTQsIDB4ZGIsIDB4NjQsIDB4YTIsIDB4ZjgsIDB4NjIsIDB4NmQsIDB4ZDYsIDB4MTIsCi0gIDB4MTIsIDB4NWMsIDB4YTksIDB4NzMsIDB4NzQsIDB4NTUsIDB4MmEsIDB4YzQsIDB4ZDUsIDB4YTMsIDB4NzIsIDB4YWQsCi0gIDB4ZDMsIDB4YjYsIDB4ZmEsIDB4NTAsIDB4NGIsIDB4ZDYsIDB4OGQsIDB4ZDcsIDB4NjgsIDB4MzIsIDB4ODUsIDB4YTksCi0gIDB4Y2QsIDB4NGYsIDB4NjEsIDB4MTAsIDB4MDAsIDB4MDIsIDB4M2MsIDB4ZDgsIDB4ZDksIDB4OTgsIDB4MjQsIDB4OWUsCi0gIDB4MDQsIDB4ZDQsIDB4NDEsIDB4MDEsIDB4MjQsIDB4ZmEsIDB4ZDAsIDB4NzYsIDB4ZWEsIDB4MzMsIDB4ZjAsIDB4ZWUsCi0gIDB4MTEsIDB4MDQsIDB4MjYsIDB4YTIsIDB4NDUsIDB4ZjMsIDB4MWEsIDB4YWEsIDB4ODgsIDB4YWEsIDB4OGEsIDB4ODIsCi0gIDB4NDQsIDB4N2MsIDB4ZjQsIDB4YzUsIDB4ZmQsIDB4NTMsIDB4ZjYsIDB4N2YsIDB4YTksIDB4ZWEsIDB4N2QsIDB4NWYsCi0gIDB4NmMsIDB4MzgsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDksIDB4NzMsCi0gIDB4NjMsIDB4MTIsIDB4MTAsIDB4OGMsIDB4MjgsIDB4MTIsIDB4ODQsIDB4MTYsIDB4NDUsIDB4ZTcsIDB4NGUsIDB4NWEsCi0gIDB4ZjMsIDB4NTksIDB4NWEsIDB4NTIsIDB4ODAsIDB4NTgsIDB4MjUsIDB4MDUsIDB4YTAsIDB4NmMsIDB4OTgsIDB4MWMsCi0gIDB4NTQsIDB4ODAsIDB4OTUsIDB4MjksIDB4MDAsIDB4ODMsIDB4ZGQsIDB4ODIsIDB4MWYsIDB4MWUsIDB4MWUsIDB4YzQsCi0gIDB4NDksIDB4MDQsIDB4OGEsIDB4ZDYsIDB4NTEsIDB4MzIsIDB4YzMsIDB4OTksIDB4NDcsIDB4YjUsIDB4YmQsIDB4OGIsCi0gIDB4MTAsIDB4ZDEsIDB4MWIsIDB4ZjcsIDB4MjAsIDB4MTIsIDB4NWEsIDB4MWYsIDB4MzMsIDB4NzUsIDB4YmUsIDB4YWEsCi0gIDB4ZGYsIDB4NzgsIDB4ODcsIDB4NTIsIDB4NDIsIDB4MjcsIDB4OWEsIDB4MWMsIDB4OGUsIDB4ZGQsIDB4ZjQsIDB4ZTEsCi0gIDB4ZTQsIDB4MmUsIDB4MjksIDB4MGUsIDB4NGEsIDB4ZDUsIDB4ZmUsIDB4ZTMsIDB4MDQsIDB4NTYsIDB4ODgsIDB4NjUsCi0gIDB4ZDMsIDB4NTcsIDB4M2EsIDB4ZDMsIDB4OGEsIDB4N2QsIDB4ZGQsIDB4MTQsIDB4YmYsIDB4YmYsIDB4MWEsIDB4ZGEsCi0gIDB4ZTIsIDB4ZmMsIDB4ZjMsIDB4NzEsIDB4YTksIDB4OWUsIDB4MjgsIDB4NTYsIDB4Y2EsIDB4MjUsIDB4NjIsIDB4OTUsCi0gIDB4OTAsIDB4OWQsIDB4M2EsIDB4NGIsIDB4ZTksIDB4NGMsIDB4ZTYsIDB4OGMsIDB4OTIsIDB4OWQsIDB4NGYsIDB4OGYsCi0gIDB4YmIsIDB4YzMsIDB4ZjQsIDB4MDksIDB4MmYsIDB4NGIsIDB4ZGQsIDB4MmEsIDB4ODYsIDB4YjksIDB4NDksIDB4NjgsCi0gIDB4NTIsIDB4MTEsIDB4NDIsIDB4MjcsIDB4OGUsIDB4NjAsIDB4NTUsIDB4MmMsIDB4YWIsIDB4MjUsIDB4MDAsIDB4OGUsCi0gIDB4YzEsIDB4MDUsIDB4YWQsIDB4MDgsIDB4MTMsIDB4ZGEsIDB4MTIsIDB4ODMsIDB4MjUsIDB4MTcsIDB4NjEsIDB4MDIsCi0gIDB4N2EsIDB4ZDQsIDB4MDcsIDB4NDEsIDB4YmEsIDB4MDAsIDB4MWEsIDB4YzEsIDB4OTIsIDB4MjAsIDB4OGEsIDB4MDQsCi0gIDB4NmEsIDB4NGMsIDB4NDMsIDB4MjEsIDB4YjgsIDB4OTIsIDB4MGQsIDB4ZDcsIDB4ZTEsIDB4YjQsIDB4YzUsIDB4MjQsCi0gIDB4YzcsIDB4YzAsIDB4OWQsIDB4OWEsIDB4OTksIDB4NTAsIDB4YTQsIDB4MzIsIDB4NDQsIDB4MzcsIDB4N2QsIDB4YjMsCi0gIDB4ZGMsIDB4NzEsIDB4YzcsIDB4OWMsIDB4YmUsIDB4NzIsIDB4MTAsIDB4OTQsIDB4ZjIsIDB4ZGMsIDB4OTcsIDB4NGQsCi0gIDB4MDAsIDB4YjYsIDB4NGEsIDB4ZDYsIDB4NGQsIDB4ODcsIDB4YjEsIDB4MDcsIDB4OTQsIDB4NGIsIDB4MmEsIDB4ZTEsCi0gIDB4ZTcsIDB4YTQsIDB4YTcsIDB4MTgsIDB4ZDksIDB4ZjIsIDB4NWEsIDB4ODUsIDB4YWIsIDB4NmEsIDB4NDMsIDB4MjksCi0gIDB4NjEsIDB4NGQsIDB4ODIsIDB4MjgsIDB4YTYsIDB4ODQsIDB4M2IsIDB4ZjIsIDB4OTcsIDB4NmMsIDB4MDksIDB4NTMsCi0gIDB4NjgsIDB4NWYsIDB4MDgsIDB4NDYsIDB4NTMsIDB4ZmUsIDB4ZjMsIDB4ZTksIDB4ZGYsIDB4ZDMsIDB4ZGYsIDB4ZjgsCi0gIDB4ODAsIDB4M2QsIDB4N2MsIDB4NTgsIDB4NDQsIDB4NzEsIDB4NGEsIDB4MDksIDB4ODcsIDB4MDEsIDB4NzAsIDB4ZWMsCi0gIDB4MDAsIDB4MmEsIDB4MjQsIDB4YTQsIDB4MDUsIDB4MDAsIDB4MmMsIDB4NDAsIDB4NjksIDB4NjgsIDB4OTYsIDB4MjMsCi0gIDB4MmUsIDB4NTcsIDB4NDIsIDB4MjIsIDB4ZDEsIDB4YzksIDB4YTQsIDB4M2IsIDB4ZTEsIDB4ODEsIDB4NzMsIDB4ZDYsCi0gIDB4MjIsIDB4NzMsIDB4OWMsIDB4MTIsIDB4MjksIDB4OTAsIDB4MzAsIDB4OGEsIDB4MTIsIDB4ZGUsIDB4NDQsIDB4NDQsCi0gIDB4ZTAsIDB4MjUsIDB4YTEsIDB4ZWQsIDB4NGQsIDB4NjcsIDB4YzYsIDB4OTMsIDB4Y2UsIDB4OGMsIDB4MDgsIDB4OTksCi0gIDB4YjQsIDB4NGQsIDB4M2EsIDB4NWEsIDB4ZmUsIDB4NTIsIDB4OTAsIDB4NWQsIDB4M2YsIDB4MWMsIDB4NTYsIDB4NjUsCi0gIDB4ZTcsIDB4YWYsIDB4OTEsIDB4MGEsIDB4ZTgsIDB4Y2IsIDB4OTMsIDB4ZTksIDB4M2IsIDB4NzIsIDB4NGEsIDB4NzYsCi0gIDB4ZDEsIDB4YTAsIDB4YmMsIDB4YjAsIDB4ZTUsIDB4MGEsIDB4NzcsIDB4MGMsIDB4MGMsIDB4ODgsIDB4MjYsIDB4YzIsCi0gIDB4YzQsIDB4OTIsIDB4YmQsIDB4ZDYsIDB4MTIsIDB4OTUsIDB4MzYsIDB4NGEsIDB4OTQsIDB4YzUsIDB4ZTgsIDB4ZjIsCi0gIDB4OGMsIDB4ZDcsIDB4Y2EsIDB4OTMsIDB4Y2YsIDB4NTQsIDB4OWQsIDB4NWQsIDB4YzIsIDB4NzQsIDB4ZWYsIDB4YmUsCi0gIDB4YmMsIDB4MmQsIDB4OWYsIDB4OWQsIDB4YjcsIDB4YzIsIDB4ZjMsIDB4ZGQsIDB4YWUsIDB4ZDIsIDB4NTAsIDB4NmUsCi0gIDB4MWMsIDB4MjgsIDB4Y2YsIDB4YzcsIDB4OGMsIDB4YzYsIDB4MTksIDB4ZjYsIDB4ZGEsIDB4OWEsIDB4YjYsIDB4YmMsCi0gIDB4MTcsIDB4MmIsIDB4YTgsIDB4ZjEsIDB4ZjYsIDB4NzEsIDB4ZjYsIDB4ODAsIDB4NzAsIDB4MjEsIDB4MWEsIDB4ODgsCi0gIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4MGIsIDB4NmYsIDB4YTEsIDB4ZDgsIDB4NTgsIDB4YTgsIDB4MjIsCi0gIDB4MmEsIDB4MTksIDB4ODUsIDB4MDIsIDB4NTAsIDB4ODAsIDB4MGYsIDB4NjUsIDB4OGQsIDB4MmEsIDB4NWQsIDB4NGMsCi0gIDB4MjAsIDB4MDAsIDB4OTMsIDB4NjMsIDB4MWYsIDB4ODQsIDB4OWMsIDB4NzEsIDB4MTEsIDB4NDUsIDB4MzIsIDB4MzAsCi0gIDB4NDcsIDB4NDUsIDB4MTAsIDB4OTgsIDB4NDksIDB4NWIsIDB4MzAsIDB4OTgsIDB4MDMsIDB4NmUsIDB4ODMsIDB4ZjMsCi0gIDB4ZDIsIDB4ZTgsIDB4YzgsIDB4MDQsIDB4MWEsIDB4OGUsIDB4NTYsIDB4MmYsIDB4MjcsIDB4NjEsIDB4OTAsIDB4N2UsCi0gIDB4NzcsIDB4ZWQsIDB4M2IsIDB4MTQsIDB4MTEsIDB4OWQsIDB4MzcsIDB4MDksIDB4YTYsIDB4MmYsIDB4NGMsIDB4ZmYsCi0gIDB4Y2IsIDB4ZDksIDB4ZDAsIDB4NzYsIDB4NTYsIDB4NDUsIDB4ZDYsIDB4OTUsIDB4NDQsIDB4M2EsIDB4OTksIDB4YzcsCi0gIDB4MzAsIDB4N2QsIDB4Y2YsIDB4MmMsIDB4OWUsIDB4OWMsIDB4Y2EsIDB4N2IsIDB4MmMsIDB4OTYsIDB4NGEsIDB4N2IsCi0gIDB4NmEsIDB4ODUsIDB4OTAsIDB4NmQsIDB4MDcsIDB4ZDEsIDB4YWQsIDB4ZmUsIDB4NjksIDB4MDQsIDB4OTUsIDB4YjUsCi0gIDB4YzcsIDB4ODIsIDB4YWMsIDB4YTYsIDB4MGYsIDB4MmMsIDB4YWYsIDB4OGIsIDB4ZmYsIDB4NWEsIDB4NzIsIDB4NTIsCi0gIDB4ZDQsIDB4YmIsIDB4ZjcsIDB4NzMsIDB4NmUsIDB4OTgsIDB4NTMsIDB4ZmQsIDB4NWIsIDB4YmIsIDB4ZWYsIDB4ODYsCi0gIDB4N2UsIDB4ZWEsIDB4ZjUsIDB4ZWMsIDB4ZjAsIDB4YTcsIDB4YTUsIDB4YTYsIDB4YjksIDB4NDQsIDB4ZGUsIDB4OWMsCi0gIDB4MDEsIDB4NmYsIDB4ZDMsIDB4NTksIDB4NTAsIDB4MjgsIDB4NjMsIDB4N2MsIDB4NTYsIDB4OTMsIDB4MTUsIDB4NmEsCi0gIDB4MjUsIDB4M2UsIDB4YWMsIDB4OGYsIDB4ZjAsIDB4MjEsIDB4NTYsIDB4YWIsIDB4MWIsIDB4MDksIDB4YTksIDB4ZDksCi0gIDB4ZDgsIDB4MmMsIDB4ZjYsIDB4NGYsIDB4ZmQsIDB4MTIsIDB4MzUsIDB4MTUsIDB4MWEsIDB4NjksIDB4YTcsIDB4OTYsCi0gIDB4NDMsIDB4MTUsIDB4YzgsIDB4NTEsIDB4ZTUsIDB4NDQsIDB4OTgsIDB4MmIsIDB4NjcsIDB4ZjEsIDB4MjYsIDB4NjQsCi0gIDB4ZmQsIDB4ZDksIDB4MWEsIDB4MzIsIDB4MzgsIDB4MWEsIDB4YjIsIDB4NTQsIDB4ZWIsIDB4OGQsIDB4MjYsIDB4MDMsCi0gIDB4ODgsIDB4ZDgsIDB4NjAsIDB4NmQsIDB4MDMsIDB4YzUsIDB4ZDAsIDB4Y2UsIDB4M2QsIDB4NjgsIDB4MzEsIDB4MGEsCi0gIDB4MGEsIDB4Y2MsIDB4ZjgsIDB4MzYsIDB4MTksIDB4Y2UsIDB4MDAsIDB4NTUsIDB4NDYsIDB4MTEsIDB4ODUsIDB4NzIsCi0gIDB4NGMsIDB4MjcsIDB4OTAsIDB4ZGQsIDB4ZDUsIDB4YmMsIDB4ZGIsIDB4YzMsIDB4M2QsIDB4YjQsIDB4NjMsIDB4NTYsCi0gIDB4ZTAsIDB4NTEsIDB4OWYsIDB4MjgsIDB4N2MsIDB4NDUsIDB4ZDYsIDB4ODUsIDB4ZTksIDB4ZjMsIDB4MjYsIDB4M2MsCi0gIDB4NzgsIDB4ZjEsIDB4NjksIDB4NmQsIDB4MjksIDB4NmYsIDB4ZGMsIDB4ZDcsIDB4ZGEsIDB4ZGQsIDB4NWYsIDB4OGIsCi0gIDB4OWYsIDB4OGYsIDB4OGYsIDB4MTgsIDB4ZGQsIDB4NWYsIDB4NGYsIDB4ZDksIDB4YWYsIDB4ZjksIDB4ZmIsIDB4M2UsCi0gIDB4NjAsIDB4MDgsIDB4MGYsIDB4YTAsIDB4YzksIDB4MDQsIDB4YzEsIDB4MTAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MWQsCi0gIDB4MjEsIDB4MzIsIDB4ZTgsIDB4MzAsIDB4NjUsIDB4ZjIsIDB4MDAsIDB4MjcsIDB4MGQsIDB4NWYsIDB4YTcsIDB4MDksCi0gIDB4MmYsIDB4ZjksIDB4ZWYsIDB4NDUsIDB4NmEsIDB4ZGUsIDB4MzIsIDB4ODgsIDB4MmEsIDB4MmMsIDB4YTQsIDB4MDksCi0gIDB4ODYsIDB4N2QsIDB4MTcsIDB4YzEsIDB4YzAsIDB4Y2UsIDB4MzQsIDB4MDUsIDB4ZDUsIDB4OGQsIDB4ZmUsIDB4NWYsCi0gIDB4ZTMsIDB4YjcsIDB4OGYsIDB4MTAsIDB4NTQsIDB4YmYsIDB4ZWUsIDB4OTYsIDB4ZDMsIDB4YjcsIDB4OWMsIDB4MWYsCi0gIDB4OWQsIDB4OWMsIDB4MDUsIDB4ZTMsIDB4MjgsIDB4YTksIDB4YjMsIDB4NjUsIDB4ZjEsIDB4ZjAsIDB4YjcsIDB4NGIsCi0gIDB4ZmIsIDB4NzQsIDB4YjEsIDB4NzcsIDB4NTksIDB4ZmQsIDB4ZWYsIDB4YWEsIDB4ZDYsIDB4MjYsIDB4NGIsIDB4YjIsCi0gIDB4MzEsIDB4ZmUsIDB4NmYsIDB4NzUsIDB4OWMsIDB4N2EsIDB4MjAsIDB4MTUsIDB4NzIsIDB4ODgsIDB4NWIsIDB4MjQsCi0gIDB4ZjcsIDB4M2QsIDB4NDQsIDB4MjAsIDB4MGYsIDB4ZDUsIDB4YzMsIDB4MWYsIDB4YjYsIDB4MDEsIDB4YzAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MTEsIDB4NzIsIDB4ODMsIDB4MjAsIDB4YzksCi0gIDB4NGMsIDB4NDUsIDB4MDgsIDB4MDMsIDB4MzUsIDB4ZjAsIDB4OTUsIDB4YTMsIDB4NDAsIDB4YTAsIDB4MDAsIDB4OTUsCi0gIDB4MjYsIDB4YzcsIDB4YmMsIDB4ZmUsIDB4Y2UsIDB4NzcsIDB4NjcsIDB4MTUsIDB4ZTcsIDB4NTEsIDB4ZDAsIDB4MjIsCi0gIDB4OTMsIDB4YzcsIDB4YTAsIDB4NTYsIDB4NjgsIDB4ZmMsIDB4N2QsIDB4NzksIDB4ZDEsIDB4NWUsIDB4ZTUsIDB4ZWYsCi0gIDB4N2YsIDB4M2UsIDB4YzUsIDB4YTEsIDB4YTEsIDB4ZmQsIDB4ZTEsIDB4OWYsIDB4OWUsIDB4MmYsIDB4ZjgsIDB4NDUsCi0gIDB4MjcsIDB4YjgsIDB4M2QsIDB4NzIsIDB4NDksIDB4ZmMsIDB4OTcsIDB4ZTMsIDB4NTMsIDB4ZjAsIDB4NzcsIDB4NGYsCi0gIDB4MjQsIDB4NTUsIDB4MTcsIDB4OWEsIDB4OWYsIDB4NjksIDB4Y2MsIDB4ODUsIDB4ODYsIDB4YmEsIDB4NjEsIDB4OTUsCi0gIDB4NWQsIDB4ODMsIDB4YTksIDB4YTksIDB4ODYsIDB4YWMsIDB4ZDMsIDB4OTEsIDB4ZTcsIDB4MzIsIDB4M2QsIDB4ZTQsCi0gIDB4YjQsIDB4ZjEsIDB4MTUsIDB4ZDMsIDB4NzIsIDB4ZmYsIDB4MGQsIDB4OTYsIDB4NGIsIDB4NWIsIDB4ZDMsIDB4NzcsCi0gIDB4YzksIDB4MjEsIDB4NTEsIDB4ZjIsIDB4NTMsIDB4MmQsIDB4MzksIDB4NDksIDB4YWQsIDB4MTksIDB4Y2UsIDB4NmUsCi0gIDB4ZWQsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MzAsIDB4Y2YsIDB4OTUsIDB4NGUsIDB4YWEsIDB4ZDYsIDB4Y2EsIDB4N2EsCi0gIDB4MDksIDB4MzcsIDB4N2UsIDB4MzQsIDB4NmYsIDB4OTksIDB4NWQsIDB4ZGEsIDB4NDUsIDB4MzUsIDB4NmQsIDB4N2QsCi0gIDB4OTIsIDB4NjgsIDB4ZDUsIDB4NzEsIDB4MmYsIDB4NTcsIDB4Y2UsIDB4MTMsIDB4NTIsIDB4YjgsIDB4MDMsIDB4Y2UsCi0gIDB4NjksIDB4NjQsIDB4ZWEsIDB4NmQsIDB4NmEsIDB4NTcsIDB4ZDAsIDB4ZTgsIDB4NGUsIDB4NjAsIDB4M2MsIDB4ODQsCi0gIDB4ZGMsIDB4YzMsIDB4MjIsIDB4NmEsIDB4M2QsIDB4MjAsIDB4NTIsIDB4ZmQsIDB4NjAsIDB4MjQsIDB4M2EsIDB4ZWUsCi0gIDB4YmYsIDB4YzAsIDB4YTYsIDB4MDMsIDB4NzcsIDB4YmEsIDB4NzIsIDB4NjQsIDB4NGQsIDB4YTQsIDB4ZGYsIDB4M2MsCi0gIDB4M2EsIDB4NzMsIDB4OTksIDB4NjMsIDB4NDEsIDB4ZTIsIDB4ZjYsIDB4ZjEsIDB4ZmIsIDB4MGUsIDB4ZGUsIDB4MmUsCi0gIDB4NmIsIDB4MzQsIDB4ZjEsIDB4ZDgsIDB4MzAsIDB4ZTIsIDB4NTMsIDB4NGEsIDB4YTAsIDB4NGUsIDB4NzksIDB4ZDAsCi0gIDB4OTAsIDB4ZjcsIDB4OWEsIDB4Y2MsIDB4NDMsIDB4OWUsIDB4MTYsIDB4MzQsIDB4ZTUsIDB4NTksIDB4NmYsIDB4ZDAsCi0gIDB4ZDgsIDB4MGQsIDB4YjYsIDB4OGUsIDB4MzYsIDB4NzYsIDB4NGEsIDB4OWMsIDB4NmMsIDB4MTgsIDB4YmQsIDB4YmQsCi0gIDB4M2UsIDB4NmQsIDB4Y2QsIDB4NDUsIDB4NWUsIDB4NmEsIDB4ZGEsIDB4YmMsIDB4NjYsIDB4MmUsIDB4YmMsIDB4N2YsCi0gIDB4MWUsIDB4M2IsIDB4ZTksIDB4ZDcsIDB4ZDksIDB4ZTAsIDB4MDAsIDB4ZjksIDB4ZmIsIDB4MTQsIDB4YTAsIDB4OTgsCi0gIDB4NmEsIDB4MWQsIDB4ODAsIDB4MDAsIDB4MjQsIDB4YTQsIDB4YTIsIDB4YjQsIDB4MzAsIDB4MDgsIDB4NjAsIDB4ODQsCi0gIDB4OTYsIDB4YWQsIDB4OGQsIDB4OGIsIDB4NTUsIDB4ZWQsIDB4YjksIDB4NWEsIDB4YTEsIDB4MGUsIDB4ZDAsIDB4ODAsCi0gIDB4MTAsIDB4NDEsIDB4MDEsIDB4Y2MsIDB4YWMsIDB4NzEsIDB4MTksIDB4ZWQsIDB4YmUsIDB4NWMsIDB4ZDEsIDB4YTYsCi0gIDB4MzIsIDB4OWEsIDB4YzUsIDB4YTYsIDB4OWMsIDB4YTUsIDB4NDIsIDB4OTksIDB4NjAsIDB4MTUsIDB4MzUsIDB4NzQsCi0gIDB4Y2YsIDB4MWUsIDB4NjQsIDB4MDksIDB4N2UsIDB4MzgsIDB4MmUsIDB4YTgsIDB4YTQsIDB4MGIsIDB4MmUsIDB4MDksCi0gIDB4NjgsIDB4OWYsIDB4NmMsIDB4ZjgsIDB4ZTMsIDB4ZDcsIDB4ZDUsIDB4MzQsIDB4OTAsIDB4NmEsIDB4MDksIDB4NWUsCi0gIDB4MDMsIDB4ZGYsIDB4YjYsIDB4YWIsIDB4YjAsIDB4YzEsIDB4Y2EsIDB4ZWEsIDB4ZTUsIDB4NTEsIDB4YWEsIDB4NzksCi0gIDB4ODAsIDB4NzQsIDB4NmUsIDB4Y2EsIDB4Y2MsIDB4YTYsIDB4ZjUsIDB4N2MsIDB4N2MsIDB4ZjMsIDB4ZWEsIDB4YzcsCi0gIDB4YmYsIDB4ODAsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MGYsCi0gIDB4NzAsIDB4YTIsIDB4MzEsIDB4MGQsIDB4MDQsIDB4NTYsIDB4MjEsIDB4ODQsIDB4MDIsIDB4M2EsIDB4NWUsIDB4ODEsCi0gIDB4YTUsIDB4NGEsIDB4YzAsIDB4NDAsIDB4MjIsIDB4MzYsIDB4MzksIDB4MTAsIDB4ODIsIDB4YTAsIDB4NmQsIDB4MmEsCi0gIDB4ZDAsIDB4ZDIsIDB4ZmIsIDB4NzAsIDB4NTgsIDB4NTcsIDB4NzIsIDB4YWIsIDB4MDYsIDB4ZmYsIDB4MWYsIDB4ZDQsCi0gIDB4M2IsIDB4M2EsIDB4YjUsIDB4MjEsIDB4NmEsIDB4M2MsIDB4NmYsIDB4NWUsIDB4MWQsIDB4ZDYsIDB4M2QsIDB4YzcsCi0gIDB4NjEsIDB4Y2MsIDB4YzgsIDB4ZDYsIDB4ZmMsIDB4YzcsIDB4ZTgsIDB4MzksIDB4YTcsIDB4YWEsIDB4N2EsIDB4MDIsCi0gIDB4NTMsIDB4MDQsIDB4OGIsIDB4OGIsIDB4YzQsIDB4NmUsIDB4NTYsIDB4ZGQsIDB4NzgsIDB4YWUsIDB4ZjksIDB4YTYsCi0gIDB4YWIsIDB4MTgsIDB4MzcsIDB4ODcsIDB4ODEsIDB4NmUsIDB4MDgsIDB4MWYsIDB4YmQsIDB4YWEsIDB4MTgsIDB4NzMsCi0gIDB4ZDAsIDB4MGIsIDB4MmMsIDB4M2QsIDB4YmUsIDB4MDAsIDB4ZDUsIDB4OTAsIDB4OGQsIDB4MTcsIDB4MDAsIDB4ZmMsCi0gIDB4ZjAsIDB4ODksIDB4NDksIDB4OTIsIDB4ZjMsIDB4Y2YsIDB4NzcsIDB4Y2EsIDB4YmQsIDB4OWIsIDB4MzcsIDB4MjMsCi0gIDB4Y2IsIDB4MzgsIDB4ZjksIDB4MTIsIDB4YTUsIDB4ZDMsIDB4ZjYsIDB4OWIsIDB4ZDksIDB4YTMsIDB4ZjEsIDB4ZGYsCi0gIDB4OGMsIDB4NTQsIDB4ZjgsIDB4ZDMsIDB4YzUsIDB4YWEsIDB4ZDUsIDB4MGQsIDB4NTcsIDB4NzYsIDB4M2QsIDB4YTIsCi0gIDB4NWMsIDB4Y2QsIDB4M2EsIDB4Y2MsIDB4YjgsIDB4NGUsIDB4NTEsIDB4ZDUsIDB4MjAsIDB4NDcsIDB4NDQsIDB4MDQsCi0gIDB4MjMsIDB4YjAsIDB4NzYsIDB4ZDEsIDB4OGQsIDB4YWIsIDB4M2EsIDB4NGQsIDB4MTUsIDB4YTksIDB4NzUsIDB4YzUsCi0gIDB4MDMsIDB4NTMsIDB4NmUsIDB4OTAsIDB4MzksIDB4NTAsIDB4OTgsIDB4NjcsIDB4MDAsIDB4ODksIDB4M2MsIDB4YzQsCi0gIDB4NjQsIDB4MzEsIDB4NzMsIDB4YjAsIDB4ZjUsIDB4MTgsIDB4N2EsIDB4MzgsIDB4YzQsIDB4YTMsIDB4ODYsIDB4NzgsCi0gIDB4YzMsIDB4NTgsIDB4YzQsIDB4ZWEsIDB4MDAsIDB4NjEsIDB4MzIsIDB4MTgsIDB4NjYsIDB4NDUsIDB4MjUsIDB4ZjQsCi0gIDB4ODIsIDB4ZjcsIDB4YWQsIDB4MjYsIDB4ZWUsIDB4ZGIsIDB4OWMsIDB4NmMsIDB4YzIsIDB4YTAsIDB4OGUsIDB4NTQsCi0gIDB4NWQsIDB4YWEsIDB4YTgsIDB4YjYsIDB4OWMsIDB4ZmIsIDB4YTUsIDB4YzMsIDB4ZGYsIDB4YmUsIDB4MGIsIDB4Y2MsCi0gIDB4NGEsIDB4NDcsIDB4NzcsIDB4ODcsIDB4NjYsIDB4ZTUsIDB4YzcsIDB4ZTMsIDB4ZmUsIDB4OTEsIDB4ZWEsIDB4ZGYsCi0gIDB4M2EsIDB4MGYsIDB4N2YsIDB4ODEsIDB4NjIsIDB4MDksIDB4ODYsIDB4YTEsIDB4ZDgsIDB4MjUsIDB4MDAsIDB4MTEsCi0gIDB4NTIsIDB4YWMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDUsIDB4MjAsIDB4NDUsIDB4MjcsIDB4MzIsIDB4MTAsIDB4NGYsCi0gIDB4ODAsIDB4MTMsIDB4OWEsIDB4MTMsIDB4YjMsIDB4NDgsIDB4NTYsIDB4NTMsIDB4NTYsIDB4MTEsIDB4NGIsIDB4NjUsCi0gIDB4YzIsIDB4MmIsIDB4YzQsIDB4NDYsIDB4OGIsIDB4ZmQsIDB4M2YsIDB4YzEsIDB4N2UsIDB4NjIsIDB4OGMsIDB4NzIsCi0gIDB4MDAsIDB4NzcsIDB4YjMsIDB4ZDksIDB4NDgsIDB4MjQsIDB4MjIsIDB4MDEsIDB4YjYsIDB4NzQsIDB4ZjIsIDB4ZWUsCi0gIDB4NDYsIDB4ODMsIDB4YmUsIDB4ZjMsIDB4NDAsIDB4MjIsIDB4NTAsIDB4OTEsIDB4ZGQsIDB4NmUsIDB4NDgsIDB4NTQsCi0gIDB4NDksIDB4NzAsIDB4NjMsIDB4ZjcsIDB4YTgsIDB4MjIsIDB4MTAsIDB4YWEsIDB4YmYsIDB4Y2EsIDB4MjAsIDB4NTgsCi0gIDB4NTcsIDB4OWYsIDB4N2MsIDB4ZDUsIDB4ZWQsIDB4ZTEsIDB4ZTgsIDB4YTYsIDB4ZjksIDB4MjcsIDB4NzYsIDB4Y2IsCi0gIDB4N2UsIDB4ZWUsIDB4ZmYsIDB4M2YsIDB4ZjEsIDB4OGMsIDB4ZmQsIDB4OWMsIDB4ZjgsIDB4MDAsIDB4NzAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4MTMsIDB4NzMsIDB4NjIsIDB4OTIsIDB4ZDAsCi0gIDB4NGMsIDB4MjgsIDB4MTEsIDB4ODQsIDB4MWMsIDB4MGIsIDB4NjksIDB4ZDAsIDB4NTksIDB4NDksIDB4ODAsIDB4ODAsCi0gIDB4NDIsIDB4NmMsIDB4NzksIDB4M2UsIDB4MDYsIDB4NWEsIDB4ODQsIDB4NDQsIDB4NjksIDB4OTcsIDB4N2IsIDB4N2IsCi0gIDB4OWMsIDB4OWEsIDB4NzIsIDB4NjYsIDB4MTQsIDB4MGIsIDB4ZTQsIDB4M2EsIDB4MTcsIDB4NjgsIDB4ZjAsIDB4NDksCi0gIDB4ZDQsIDB4M2UsIDB4ZmMsIDB4ZTcsIDB4MTAsIDB4OTAsIDB4NzYsIDB4MjUsIDB4YTQsIDB4NWUsIDB4NmMsIDB4OGEsCi0gIDB4ZWQsIDB4ZTEsIDB4NzIsIDB4MmYsIDB4YTQsIDB4YmUsIDB4MmUsIDB4OTAsIDB4NzUsIDB4OWIsIDB4ZmYsIDB4ODMsCi0gIDB4MzcsIDB4MmYsIDB4MzgsIDB4OTYsIDB4N2MsIDB4ZDgsIDB4OWUsIDB4MmQsIDB4NmEsIDB4NDIsIDB4ZjYsIDB4ODksCi0gIDB4NjAsIDB4MTcsIDB4OTcsIDB4NDIsIDB4NzUsIDB4NGUsIDB4NjksIDB4NzMsIDB4ZDMsIDB4ZWYsIDB4ZjcsIDB4YzgsCi0gIDB4Y2IsIDB4MzgsIDB4OWIsIDB4YjAsIDB4ZTMsIDB4ZTksIDB4MzYsIDB4NTMsIDB4N2UsIDB4YzQsIDB4MWQsIDB4ZTcsCi0gIDB4YjIsIDB4ZjMsIDB4MWQsIDB4NmQsIDB4YzcsIDB4NjQsIDB4NGYsIDB4N2UsIDB4OGYsIDB4MzEsIDB4ODYsIDB4OWUsCi0gIDB4NTksIDB4MTUsIDB4NDcsIDB4YzMsIDB4ZGMsIDB4M2UsIDB4N2IsIDB4ZTksIDB4YjYsIDB4NGIsIDB4YjksIDB4MWYsCi0gIDB4NmQsIDB4MjQsIDB4MmMsIDB4YzMsIDB4YTcsIDB4YzIsIDB4NDAsIDB4M2EsIDB4NTAsIDB4YjIsIDB4MDMsIDB4YzEsCi0gIDB4MjMsIDB4MDQsIDB4MmEsIDB4NTAsIDB4N2EsIDB4YmUsIDB4NzYsIDB4ODUsIDB4NDQsIDB4OTUsIDB4YzgsIDB4YzAsCi0gIDB4YWIsIDB4YzUsIDB4OGUsIDB4MWMsIDB4MWMsIDB4MTUsIDB4ZDQsIDB4ZjQsIDB4NDIsIDB4ZDEsIDB4ODQsIDB4ZTcsCi0gIDB4YzksIDB4YTUsIDB4N2YsIDB4YWQsIDB4M2QsIDB4NmIsIDB4MDEsIDB4NzYsIDB4MDMsIDB4OTQsIDB4YzgsIDB4ZWUsCi0gIDB4MTYsIDB4NmEsIDB4ZGQsIDB4MWUsIDB4MWIsIDB4MzcsIDB4NDIsIDB4OTQsIDB4MWQsIDB4ZmQsIDB4YWEsIDB4NjIsCi0gIDB4ZTEsIDB4Y2EsIDB4MmIsIDB4MjgsIDB4OWMsIDB4MTgsIDB4MmEsIDB4ZWEsIDB4NmMsIDB4NzIsIDB4NmIsIDB4ZWUsCi0gIDB4ODMsIDB4MjYsIDB4YTgsIDB4OGIsIDB4MGEsIDB4MTEsIDB4OTQsIDB4ODgsIDB4YTgsIDB4ZTAsIDB4MDAsIDB4ZjQsCi0gIDB4Y2YsIDB4YTUsIDB4NGEsIDB4ZTQsIDB4YmEsIDB4OTYsIDB4NWIsIDB4NTEsIDB4MjEsIDB4NzAsIDB4ZDIsIDB4OWQsCi0gIDB4NzIsIDB4MzcsIDB4OWQsIDB4ZTIsIDB4YzIsIDB4MzEsIDB4ZTYsIDB4OTgsIDB4NTIsIDB4NGEsIDB4M2EsIDB4MDgsCi0gIDB4OTIsIDB4MDMsIDB4YzUsIDB4OTIsIDB4ZDMsIDB4M2YsIDB4M2QsIDB4ZmQsIDB4N2YsIDB4YzQsIDB4N2YsIDB4ZjcsCi0gIDB4MDMsIDB4ZTcsIDB4ZDEsIDB4MDgsIDB4MjgsIDB4MjIsIDB4YTAsIDB4NjAsIDB4NmEsIDB4MWQsIDB4ODAsIDB4MDAsCi0gIDB4YTgsIDB4YWQsIDB4MDAsIDB4YzEsIDB4MDEsIDB4NjcsIDB4MjEsIDB4NmIsIDB4NDksIDB4NzcsIDB4OTUsIDB4OTcsCi0gIDB4NjUsIDB4MTUsIDB4YTksIDB4YTEsIDB4YmYsIDB4ODYsIDB4NTcsIDB4MmEsIDB4ODIsIDB4ZWUsIDB4MzMsIDB4YTIsCi0gIDB4ZDcsIDB4OTcsIDB4ZTAsIDB4OWUsIDB4YWIsIDB4YjAsIDB4NDYsIDB4YjUsIDB4YzgsIDB4MTMsIDB4NzEsIDB4MTMsCi0gIDB4MDMsIDB4NTQsIDB4ZjIsIDB4OTEsIDB4MjMsIDB4NDEsIDB4MWUsIDB4NzcsIDB4MmYsIDB4ZTksIDB4NTAsIDB4ODYsCi0gIDB4YzMsIDB4MTMsIDB4MWQsIDB4NTUsIDB4YTIsIDB4NTksIDB4NGUsIDB4OTUsIDB4YjEsIDB4NTQsIDB4ODYsIDB4MDMsCi0gIDB4MjYsIDB4OGMsIDB4MmIsIDB4ZTMsIDB4NTIsIDB4NTgsIDB4N2UsIDB4N2YsIDB4OTMsIDB4MWMsIDB4M2EsIDB4NTEsCi0gIDB4MWIsIDB4NjEsIDB4ZGMsIDB4ZjIsIDB4NzIsIDB4OTgsIDB4YTksIDB4YTksIDB4MDksIDB4ZDcsIDB4MjIsIDB4YzksCi0gIDB4ZjMsIDB4MzMsIDB4OTMsIDB4YzUsIDB4NTEsIDB4NTMsIDB4MDUsIDB4NDQsIDB4YmEsIDB4NzMsIDB4OTgsIDB4MDAsCi0gIDB4YWQsIDB4OGMsIDB4NjcsIDB4NDIsIDB4ZmMsIDB4OWEsIDB4YjQsIDB4OGEsIDB4NzQsIDB4OGQsIDB4ZjEsIDB4ODAsCi0gIDB4NGEsIDB4MmMsIDB4YjIsIDB4M2MsIDB4NjgsIDB4Y2QsIDB4ZDYsIDB4YjMsIDB4NWQsIDB4NzUsIDB4ZTcsIDB4MDAsCi0gIDB4MWMsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4MGQsIDB4NmYsIDB4YTIsCi0gIDB4NDEsIDB4MTgsIDB4NDgsIDB4MzEsIDB4NGIsIDB4MTEsIDB4YzIsIDB4MDAsIDB4YmIsIDB4NTgsIDB4ZTAsIDB4NDUsCi0gIDB4ZDYsIDB4MmYsIDB4MDgsIDB4MDQsIDB4MjYsIDB4MGIsIDB4NDAsIDB4MjQsIDB4NjQsIDB4ZDAsIDB4MjYsIDB4NjgsCi0gIDB4YTQsIDB4MmQsIDB4YzEsIDB4MjQsIDB4YzksIDB4ZTQsIDB4MDUsIDB4MjAsIDB4ODgsIDB4MDEsIDB4ZmIsIDB4YjksCi0gIDB4N2QsIDB4NTMsIDB4MzAsIDB4N2UsIDB4ZDksIDB4ZmIsIDB4ZTIsIDB4MDIsIDB4MDYsIDB4ZjIsIDB4ZjIsIDB4N2MsCi0gIDB4MTQsIDB4M2YsIDB4NWYsIDB4NDUsIDB4NzcsIDB4ODYsIDB4YzAsIDB4OTAsIDB4NzIsIDB4NGYsIDB4MzEsIDB4YzIsCi0gIDB4NzcsIDB4MWMsIDB4OTcsIDB4YjcsIDB4MjcsIDB4NDIsIDB4NzUsIDB4MWEsIDB4M2QsIDB4ZDksIDB4OTQsIDB4ZjEsCi0gIDB4YWYsIDB4ZTgsIDB4OWQsIDB4M2IsIDB4NGYsIDB4NTYsIDB4MDUsIDB4NzUsIDB4YjQsIDB4YzEsIDB4ZWUsIDB4ZmEsCi0gIDB4NDIsIDB4YmQsIDB4MWUsIDB4N2IsIDB4ZWMsIDB4MzksIDB4OTUsIDB4NDEsIDB4ZjMsIDB4MGYsIDB4NGQsIDB4NTcsCi0gIDB4NTMsIDB4NmEsIDB4ZDcsIDB4MmMsIDB4ZTAsIDB4MjEsIDB4MzAsIDB4ZDksIDB4NGYsIDB4OWMsIDB4YzcsIDB4YmUsCi0gIDB4NTksIDB4MDUsIDB4MDYsIDB4MDAsIDB4NDEsIDB4OTgsIDB4YzgsIDB4YTgsIDB4NDIsIDB4MDYsIDB4NTAsIDB4YWMsCi0gIDB4OTEsIDB4NTEsIDB4YjQsIDB4ZDIsIDB4NDQsIDB4M2QsIDB4Y2YsIDB4ZGQsIDB4ZTYsIDB4MGIsIDB4MGMsIDB4NDEsCi0gIDB4YWEsIDB4MzcsIDB4OTEsIDB4ZTAsIDB4MDksIDB4MTQsIDB4YzAsIDB4NWQsIDB4YjUsIDB4ZWIsIDB4Y2YsIDB4NjYsCi0gIDB4ZmEsIDB4MGQsIDB4OTEsIDB4ZjYsIDB4MTcsIDB4NjgsIDB4NGEsIDB4ODYsIDB4NDgsIDB4YTQsIDB4YjcsIDB4YjEsCi0gIDB4ODEsIDB4NjksIDB4MzIsIDB4ZjYsIDB4ZDksIDB4YmYsIDB4NDQsIDB4ZWMsIDB4MzMsIDB4YTEsIDB4YzksIDB4NGMsCi0gIDB4ZGQsIDB4YWYsIDB4MDQsIDB4ZTMsIDB4ZjYsIDB4ZTEsIDB4NTksIDB4YjksIDB4ZDcsIDB4MmMsIDB4MmYsIDB4YTMsCi0gIDB4NWQsIDB4YjMsIDB4YzgsIDB4OTYsIDB4MjUsIDB4NjQsIDB4YWMsIDB4NzgsIDB4NTMsIDB4ZTcsIDB4MmYsIDB4MTMsCi0gIDB4OGUsIDB4ZDYsIDB4ODAsIDB4NDcsIDB4NDAsIDB4OGEsIDB4NGUsIDB4NmEsIDB4ZDQsIDB4ZWMsIDB4ZWYsIDB4ZDgsCi0gIDB4YWYsIDB4OTUsIDB4OTYsIDB4MGQsIDB4NDUsIDB4MzUsIDB4ZTgsIDB4MDcsIDB4MGQsIDB4MjksIDB4NWUsIDB4ZTcsCi0gIDB4YWIsIDB4OGEsIDB4ODksIDB4M2QsIDB4YTIsIDB4YzEsIDB4NDgsIDB4YTYsIDB4MDMsIDB4OTUsIDB4MTIsIDB4MGUsCi0gIDB4NzksIDB4ZjAsIDB4YWIsIDB4ZjksIDB4ZGIsIDB4N2YsIDB4ZDcsIDB4YWEsIDB4ZWIsIDB4MzQsIDB4ZmEsIDB4N2MsCi0gIDB4YmEsIDB4N2EsIDB4ZDIsIDB4MDAsIDB4ZjksIDB4ZmMsIDB4MTQsIDB4YjEsIDB4MTQsIDB4M2IsIDB4MDAsIDB4MDEsCi0gIDB4MmEsIDB4NTQsIDB4YTEsIDB4MTMsIDB4NDUsIDB4NjAsIDB4NTksIDB4MzAsIDB4NmQsIDB4OGYsIDB4MzgsIDB4NTUsCi0gIDB4MzMsIDB4NjQsIDB4M2EsIDB4NDMsIDB4NWQsIDB4NmIsIDB4NjIsIDB4ZmYsIDB4NDgsIDB4YzYsIDB4MzQsIDB4NGYsCi0gIDB4ZTgsIDB4ZTcsIDB4ZjgsIDB4YzYsIDB4MjksIDB4NDAsIDB4NTIsIDB4YmIsIDB4OTQsIDB4MDEsIDB4MmIsIDB4OGYsCi0gIDB4ZjIsIDB4YWUsIDB4ZjIsIDB4NTIsIDB4OTcsIDB4ZGEsIDB4NTMsIDB4NDcsIDB4M2EsIDB4YjMsIDB4YzIsIDB4MzQsCi0gIDB4MTMsIDB4MGMsIDB4ZTAsIDB4NDEsIDB4NzIsIDB4ODAsIDB4NTEsIDB4ODIsIDB4Y2EsIDB4MzQsIDB4MmMsIDB4ZDUsCi0gIDB4ZDQsIDB4ZWIsIDB4NDcsIDB4NWIsIDB4NGEsIDB4NTcsIDB4OTQsIDB4ZGMsIDB4MjIsIDB4ODAsIDB4MjUsIDB4YTAsCi0gIDB4YTUsIDB4YzYsIDB4YTgsIDB4ZTEsIDB4ZmIsIDB4YjAsIDB4YjUsIDB4OWQsIDB4MzIsIDB4ZDksIDB4MzcsIDB4ZWIsCi0gIDB4YTYsIDB4M2YsIDB4MmQsIDB4ZmIsIDB4NzgsIDB4N2EsIDB4ZjcsIDB4MTgsIDB4ZTQsIDB4MDEsIDB4YzAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MTMsIDB4NzIsIDB4ODMsIDB4MjEsIDB4NDksCi0gIDB4MGMsIDB4NDUsIDB4MDgsIDB4MTMsIDB4NTAsIDB4ZTEsIDB4MTUsIDB4YzEsIDB4YTIsIDB4OTQsIDB4MDAsIDB4MTAsCi0gIDB4OWIsIDB4MTUsIDB4YTEsIDB4YzgsIDB4MTAsIDB4YmQsIDB4ZGEsIDB4NDIsIDB4OTAsIDB4ZTgsIDB4MDEsIDB4ZTMsCi0gIDB4YzIsIDB4ZjMsIDB4MzEsIDB4MjMsIDB4OGEsIDB4ZDEsIDB4MzcsIDB4ZDQsIDB4MzEsIDB4OWYsIDB4M2UsIDB4ZDgsCi0gIDB4YTQsIDB4MzMsIDB4NTcsIDB4YjAsIDB4ZmQsIDB4ZmQsIDB4NTAsIDB4ODAsIDB4YzksIDB4YWEsIDB4MjAsIDB4OWYsCi0gIDB4MDMsIDB4NGIsIDB4ZDksIDB4MzAsIDB4NGYsIDB4NGIsIDB4ZTMsIDB4NzksIDB4ZjgsIDB4YWUsIDB4NWQsIDB4MGYsCi0gIDB4MTIsIDB4Y2QsIDB4YWQsIDB4NzYsIDB4MWUsIDB4OTEsIDB4ODIsIDB4NTksIDB4NTQsIDB4MjEsIDB4YTcsIDB4MjcsCi0gIDB4MmMsIDB4MjQsIDB4NTcsIDB4MTMsIDB4OTEsIDB4MjQsIDB4OTcsIDB4NGEsIDB4YWEsIDB4MmEsIDB4YTUsIDB4ZTMsCi0gIDB4NzgsIDB4ZjksIDB4YjQsIDB4ZGYsIDB4NmYsIDB4NzcsIDB4OGYsIDB4ZmUsIDB4OGMsIDB4N2YsIDB4ZDcsIDB4M2IsCi0gIDB4YzQsIDB4NGQsIDB4MDIsIDB4YjMsIDB4NWIsIDB4MmMsIDB4YTIsIDB4ZjIsIDB4ZjgsIDB4NjQsIDB4ZDMsIDB4YjgsCi0gIDB4NmIsIDB4YjMsIDB4YTAsIDB4MTMsIDB4ZDgsIDB4NTEsIDB4M2QsIDB4YzIsIDB4MTIsIDB4YTIsIDB4ZDIsIDB4NzIsCi0gIDB4MzMsIDB4ZWUsIDB4NmIsIDB4MjAsIDB4MjksIDB4NjUsIDB4MDEsIDB4NDksIDB4M2EsIDB4MmUsIDB4YzgsIDB4MmUsCi0gIDB4MGQsIDB4MjksIDB4NWEsIDB4NmIsIDB4ZTgsIDB4ZDcsIDB4NTksIDB4YTMsIDB4NTUsIDB4ZGUsIDB4ZDUsIDB4ZDMsCi0gIDB4OTEsIDB4ODQsIDB4NzksIDB4NzIsIDB4NGEsIDB4NGUsIDB4MTEsIDB4MWQsIDB4YTIsIDB4OTAsIDB4Y2MsIDB4NTQsCi0gIDB4YzYsIDB4OTIsIDB4OTEsIDB4YjIsIDB4ZDMsIDB4YTgsIDB4YzMsIDB4YjIsIDB4MTQsIDB4OTgsIDB4YzMsIDB4NzQsCi0gIDB4ZWEsIDB4MzIsIDB4ZGYsIDB4OTMsIDB4ODAsIDB4OTEsIDB4NzUsIDB4NDIsIDB4ODQsIDB4YTUsIDB4NjksIDB4ZDQsCi0gIDB4MDEsIDB4NDYsIDB4MjgsIDB4YmIsIDB4ZjgsIDB4NTUsIDB4MjQsIDB4ZTMsIDB4OTgsIDB4ZWUsIDB4YzksIDB4YzYsCi0gIDB4ZjcsIDB4OWEsIDB4NmUsIDB4MDksIDB4OWQsIDB4ZTAsIDB4MmEsIDB4NTcsIDB4NWEsIDB4NmQsIDB4YmEsIDB4NzIsCi0gIDB4OTAsIDB4NjYsIDB4OGEsIDB4MmMsIDB4NzksIDB4YjIsIDB4NmEsIDB4ODYsIDB4MTEsIDB4MmMsIDB4YzEsIDB4ZjQsCi0gIDB4NDcsIDB4NmUsIDB4MGIsIDB4NzIsIDB4ZDksIDB4NmIsIDB4MDEsIDB4ZGEsIDB4ZTgsIDB4MDAsIDB4MTgsIDB4ZTcsCi0gIDB4ODMsIDB4NzksIDB4NWUsIDB4MzYsIDB4NDksIDB4NGUsIDB4MWYsIDB4ZDcsIDB4MWYsIDB4N2MsIDB4ZTMsIDB4N2MsCi0gIDB4N2EsIDB4NDAsIDB4MGYsIDB4N2YsIDB4YjEsIDB4NTIsIDB4MGEsIDB4MDQsIDB4ZTEsIDB4ZDgsIDB4MDAsIDB4MDksCi0gIDB4NDYsIDB4NWMsIDB4NTQsIDB4OTAsIDB4NTAsIDB4MGIsIDB4YTAsIDB4OGQsIDB4YWIsIDB4YTQsIDB4YzMsIDB4MzQsCi0gIDB4MTQsIDB4OTUsIDB4ZWIsIDB4ODYsIDB4ZmMsIDB4ZTYsIDB4YTQsIDB4NDQsIDB4MmEsIDB4YTIsIDB4ODIsIDB4YzksCi0gIDB4ZWMsIDB4MTksIDB4MzMsIDB4M2IsIDB4ZjAsIDB4ZmMsIDB4NWEsIDB4NWIsIDB4YjksIDB4NzksIDB4OWYsIDB4NWUsCi0gIDB4YjcsIDB4NzcsIDB4YzMsIDB4NGIsIDB4ZWEsIDB4MjksIDB4NjksIDB4NzEsIDB4OGYsIDB4MWEsIDB4ODgsIDB4N2MsCi0gIDB4NzMsIDB4M2QsIDB4NzYsIDB4NGUsIDB4ZjIsIDB4ODMsIDB4MzAsIDB4MTEsIDB4ZTEsIDB4NDksIDB4ZjYsIDB4N2QsCi0gIDB4MTUsIDB4MGUsIDB4OGYsIDB4NzAsIDB4YzEsIDB4ZGUsIDB4YzMsIDB4M2UsIDB4OTQsIDB4ZTgsIDB4NWQsIDB4MDAsCi0gIDB4ZGUsIDB4YmYsIDB4YmUsIDB4ZDEsIDB4YmMsIDB4NGQsIDB4MGMsIDB4NmIsIDB4OTgsIDB4MzksIDB4NDgsIDB4ZTEsCi0gIDB4NGUsIDB4MzQsIDB4NjEsIDB4NDIsIDB4ZjAsIDB4N2MsIDB4NGYsIDB4MWIsIDB4NGYsIDB4NTcsIDB4YzQsIDB4ZDEsCi0gIDB4ZDIsIDB4ZDgsIDB4MDEsIDB4YzAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4ZmYsCi0gIDB4MTEsIDB4NmYsIDB4YTIsIDB4YzEsIDB4MDgsIDB4YzgsIDB4NTEsIDB4MGIsIDB4MTIsIDB4MDIsIDB4YTEsIDB4MDAsCi0gIDB4OWEsIDB4NGQsIDB4NDUsIDB4YWYsIDB4MzgsIDB4YTQsIDB4YWEsIDB4NTUsIDB4ODAsIDB4MjUsIDB4NDksIDB4ODIsCi0gIDB4YTIsIDB4MDUsIDB4MDUsIDB4NTIsIDB4NmYsIDB4MjIsIDB4NzAsIDB4MTAsIDB4MjEsIDB4NjcsIDB4ZTQsIDB4OTAsCi0gIDB4ODcsIDB4MGUsIDB4OGIsIDB4NWYsIDB4NTksIDB4NmEsIDB4ZDksIDB4NzAsIDB4MWIsIDB4YzIsIDB4YTcsIDB4MWUsCi0gIDB4ZTIsIDB4ZTYsIDB4OGIsIDB4YWMsIDB4NWIsIDB4NGQsIDB4ZDYsIDB4NGQsIDB4MDYsIDB4YjQsIDB4Y2QsIDB4MTgsCi0gIDB4ZjIsIDB4ZWUsIDB4NzEsIDB4YzEsIDB4ODksIDB4MzUsIDB4OTIsIDB4MzMsIDB4ODYsIDB4NzMsIDB4NzMsIDB4YmIsCi0gIDB4NzYsIDB4M2EsIDB4MWMsIDB4YjksIDB4NzIsIDB4Y2QsIDB4MzUsIDB4MmUsIDB4ZTYsIDB4OTksIDB4NGQsIDB4ZWYsCi0gIDB4MmIsIDB4Y2YsIDB4OGUsIDB4ZGEsIDB4NjcsIDB4YjEsIDB4NjIsIDB4ZDUsIDB4YmIsIDB4MWQsIDB4NGQsIDB4NmQsCi0gIDB4OTYsIDB4YTEsIDB4YmMsIDB4ZDUsIDB4MzMsIDB4YjUsIDB4ZGIsIDB4NDMsIDB4YmEsIDB4YzMsIDB4OTAsIDB4ZTAsCi0gIDB4NTksIDB4OGEsIDB4NmEsIDB4ZTAsIDB4NDUsIDB4MjgsIDB4NTQsIDB4YTgsIDB4ZTMsIDB4MTQsIDB4NjgsIDB4OTIsCi0gIDB4YTYsIDB4NDcsIDB4MmEsIDB4MDYsIDB4ZWEsIDB4M2YsIDB4MmQsIDB4MWIsIDB4MGMsIDB4N2UsIDB4NjIsIDB4MTgsCi0gIDB4ZTIsIDB4M2IsIDB4NzAsIDB4MzMsIDB4MDgsIDB4ZDksIDB4MGQsIDB4NTAsIDB4YWIsIDB4YjMsIDB4MzMsIDB4Y2EsCi0gIDB4MjYsIDB4ZWYsIDB4ZjMsIDB4YzUsIDB4NzgsIDB4YTEsIDB4NjksIDB4ODAsIDB4OGUsIDB4N2EsIDB4OTAsIDB4YzAsCi0gIDB4OGMsIDB4MTgsIDB4NmUsIDB4OWUsIDB4NzUsIDB4M2EsIDB4YzQsIDB4MzEsIDB4YmIsIDB4MGQsIDB4OWUsIDB4ZDgsCi0gIDB4NTIsIDB4Y2IsIDB4ZjYsIDB4MWYsIDB4YzUsIDB4ODYsIDB4NGIsIDB4Y2YsIDB4MzgsIDB4ZTQsIDB4MTQsIDB4YjAsCi0gIDB4NjgsIDB4YmUsIDB4MGEsIDB4NjAsIDB4NDUsIDB4ZjEsIDB4MTAsIDB4YjAsIDB4YzksIDB4NzcsIDB4M2UsIDB4NjksCi0gIDB4NjgsIDB4MjAsIDB4MzgsIDB4YTYsIDB4NjMsIDB4YjMsIDB4MzIsIDB4MGQsIDB4YzcsIDB4NzYsIDB4NzIsIDB4NDAsCi0gIDB4MjcsIDB4MjIsIDB4NjcsIDB4MzEsIDB4YTQsIDB4MTEsIDB4YTksIDB4N2EsIDB4MmIsIDB4NDYsIDB4ZTYsIDB4ZWIsCi0gIDB4MmIsIDB4NGEsIDB4MzYsIDB4OTgsIDB4ZDIsIDB4ZDIsIDB4ZDgsIDB4MGQsIDB4OTUsIDB4NTQsIDB4MzYsIDB4M2MsCi0gIDB4MmYsIDB4ZWEsIDB4OTcsIDB4YjIsIDB4ODMsIDB4YjgsIDB4ZDUsIDB4ZTgsIDB4YzQsIDB4MjQsIDB4MzksIDB4N2IsCi0gIDB4MWUsIDB4ODgsIDB4OTMsIDB4YjIsIDB4MDYsIDB4NDUsIDB4Y2YsIDB4N2UsIDB4ZTUsIDB4OTksIDB4NTIsIDB4MjYsCi0gIDB4MzcsIDB4NmIsIDB4MTksIDB4ZWEsIDB4ZmEsIDB4NzksIDB4N2IsIDB4MmIsIDB4YTcsIDB4ZDksIDB4MDAsIDB4MGYsCi0gIDB4N2YsIDB4NDAsIDB4MGEsIDB4MTAsIDB4NTYsIDB4YTMsIDB4ODEsIDB4MzgsIDB4NzYsIDB4MDAsIDB4MDIsIDB4NTUsCi0gIDB4NDQsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjIsIDB4MjAsIDB4YzQsIDB4ZDAsIDB4NmEsIDB4NTAsIDB4M2QsIDB4YTIsCi0gIDB4NzAsIDB4ZmEsIDB4MzgsIDB4OGQsIDB4NzcsIDB4OTksIDB4OTgsIDB4MDAsIDB4NTUsIDB4ZjksIDB4ZjgsIDB4ZTcsCi0gIDB4NDIsIDB4OTAsIDB4MmIsIDB4OGQsIDB4Y2EsIDB4NmIsIDB4ZGQsIDB4M2EsIDB4Y2EsIDB4YmUsIDB4NjIsIDB4ZDQsCi0gIDB4MjQsIDB4NGUsIDB4OGYsIDB4YzUsIDB4ZmIsIDB4NTIsIDB4ZDAsIDB4ZGIsIDB4NzksIDB4ZWUsIDB4NjksIDB4YTYsCi0gIDB4ZWUsIDB4ZGQsIDB4OGIsIDB4NTQsIDB4ZWYsIDB4YzUsIDB4ZjgsIDB4ZWYsIDB4NDUsIDB4MTMsIDB4M2QsIDB4NmIsCi0gIDB4YTYsIDB4ZWUsIDB4M2IsIDB4MGIsIDB4MTEsIDB4OTgsIDB4YWIsIDB4OTQsIDB4NGMsIDB4NzcsIDB4YWIsIDB4YTIsCi0gIDB4YWYsIDB4MzcsIDB4NmUsIDB4ZGEsIDB4OTMsIDB4ZWQsIDB4ODEsIDB4YzcsIDB4Y2IsIDB4YWEsIDB4NzUsIDB4YWIsCi0gIDB4OGEsIDB4MjQsIDB4ODQsIDB4YzYsIDB4M2EsIDB4ZDYsIDB4YjcsIDB4MzksIDB4ZTgsIDB4MjUsIDB4ZTMsIDB4YjIsCi0gIDB4YzUsIDB4OWUsIDB4NWQsIDB4MTYsIDB4NjQsIDB4NjYsIDB4MzQsIDB4ZGQsIDB4NTQsIDB4ZDMsIDB4NWMsIDB4NDMsCi0gIDB4MmEsIDB4ZjcsIDB4MWIsIDB4OTMsIDB4ZjcsIDB4ZGMsIDB4OGQsIDB4MWUsIDB4YTcsIDB4OGIsIDB4MDAsIDB4MWMsCi0gIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4MTUsIDB4NmYsIDB4YTIsIDB4NDEsCi0gIDB4NTAsIDB4ODIsIDB4OTYsIDB4MjIsIDB4ODQsIDB4MWQsIDB4MDQsIDB4NzAsIDB4MmMsIDB4YmIsIDB4YWEsIDB4YmEsCi0gIDB4YTAsIDB4MTQsIDB4NWEsIDB4NmUsIDB4YzMsIDB4NzgsIDB4YzksIDB4ZTIsIDB4ZjAsIDB4ZmIsIDB4MzYsIDB4MzEsCi0gIDB4MTcsIDB4ODIsIDB4ZGUsIDB4MzEsIDB4MzksIDB4MDEsIDB4ZTEsIDB4NjAsIDB4ZDQsIDB4ODAsIDB4ZjQsIDB4MzksCi0gIDB4ZjgsIDB4MzQsIDB4MzIsIDB4YmIsIDB4MGUsIDB4Y2UsIDB4NDUsIDB4ZDQsIDB4MmUsIDB4NzYsIDB4ZjEsIDB4NDYsCi0gIDB4YWEsIDB4OTAsIDB4NTgsIDB4NzcsIDB4MzIsIDB4ZjQsIDB4NTYsIDB4NmEsIDB4YzksIDB4NzEsIDB4OGYsIDB4YTEsCi0gIDB4NDMsIDB4ZmMsIDB4MmMsIDB4ZjMsIDB4OTEsIDB4OTIsIDB4ZTUsIDB4MWEsIDB4MzIsIDB4MTEsIDB4NWYsIDB4YjEsCi0gIDB4ZGEsIDB4NDAsIDB4YTEsIDB4MDgsIDB4OTMsIDB4MmYsIDB4ZWYsIDB4ZGMsIDB4NjMsIDB4MjYsIDB4NDYsIDB4OTMsCi0gIDB4NWYsIDB4YjgsIDB4NWQsIDB4YmMsIDB4NTAsIDB4Y2MsIDB4N2UsIDB4MTksIDB4ZjUsIDB4NzcsIDB4MjMsIDB4NGMsCi0gIDB4OTgsIDB4YzIsIDB4MmYsIDB4MWEsIDB4ZjMsIDB4YzQsIDB4MjYsIDB4MWUsIDB4MGMsIDB4NmIsIDB4NzQsIDB4ODMsCi0gIDB4MTcsIDB4NDksIDB4MjUsIDB4MTEsIDB4M2MsIDB4MTcsIDB4OGQsIDB4NmMsIDB4OGQsIDB4ZTcsIDB4NmUsIDB4MjAsCi0gIDB4MzMsIDB4ZDQsIDB4MjIsIDB4M2QsIDB4MjQsIDB4YjgsIDB4ZWYsIDB4NDIsIDB4NTcsIDB4ZjUsIDB4OWYsIDB4MDcsCi0gIDB4OGIsIDB4OWMsIDB4MzUsIDB4NDMsIDB4ZGUsIDB4OWEsIDB4ODUsIDB4NDgsIDB4OTcsIDB4ODQsIDB4NjEsIDB4MjYsCi0gIDB4NGUsIDB4ZDUsIDB4Y2UsIDB4YmQsIDB4YTQsIDB4YTcsIDB4ODUsIDB4MDYsIDB4OTQsIDB4M2MsIDB4YzksIDB4YTMsCi0gIDB4NjIsIDB4M2UsIDB4NGEsIDB4ZmEsIDB4ZjIsIDB4NzYsIDB4NWUsIDB4NzcsIDB4MzIsIDB4ZmEsIDB4YWIsIDB4MDUsCi0gIDB4ZTYsIDB4ZTEsIDB4NzksIDB4ZmUsIDB4MzQsIDB4ODgsIDB4NjAsIDB4NjQsIDB4MTMsIDB4ZGEsIDB4NzUsIDB4MDgsCi0gIDB4NDksIDB4NmYsIDB4MTYsIDB4NDksIDB4NGEsIDB4NTksIDB4NjMsIDB4ZDksIDB4ZDgsIDB4ZDEsIDB4NGUsIDB4MTksCi0gIDB4OGMsIDB4ZDYsIDB4NjgsIDB4MDMsIDB4MGIsIDB4YTksIDB4NWEsIDB4OTMsIDB4YzMsIDB4NjgsIDB4YjUsIDB4MjQsCi0gIDB4MTcsIDB4YmEsIDB4ODIsIDB4NGEsIDB4NGUsIDB4MjAsIDB4YTgsIDB4ZjQsIDB4MDAsIDB4ZDgsIDB4NjgsIDB4MTQsCi0gIDB4YWMsIDB4NTMsIDB4ODQsIDB4NWEsIDB4OTEsIDB4NTMsIDB4NDQsIDB4YjEsIDB4M2UsIDB4N2EsIDB4YmEsIDB4YWIsCi0gIDB4YTcsIDB4ZGYsIDB4ZjEsIDB4MDAsIDB4M2UsIDB4N2YsIDB4MDUsIDB4MjgsIDB4MjYsIDB4MTIsIDB4ODcsIDB4NjAsCi0gIDB4MDAsIDB4MDIsIDB4NTIsIDB4MjksIDB4MmMsIDB4MTgsIDB4NDQsIDB4NTAsIDB4YzUsIDB4ODAsIDB4YjUsIDB4MzgsCi0gIDB4NTMsIDB4OTcsIDB4M2EsIDB4NWEsIDB4MzcsIDB4OWEsIDB4YjYsIDB4YzksIDB4NDcsIDB4NDgsIDB4YWIsIDB4ZmQsCi0gIDB4MjksIDB4OWUsIDB4YjYsIDB4NDUsIDB4YTksIDB4MGIsIDB4NTgsIDB4MmEsIDB4OWIsIDB4ZjAsIDB4NjAsIDB4MDAsCi0gIDB4OTksIDB4NmYsIDB4ZDksIDB4Y2YsIDB4N2EsIDB4YjAsIDB4N2MsIDB4Y2EsIDB4NWUsIDB4NDksIDB4NGYsIDB4YTQsCi0gIDB4ZDAsIDB4OWEsIDB4NTIsIDB4OGUsIDB4YWUsIDB4NDcsIDB4ZTksIDB4ZDIsIDB4NDksIDB4ZmMsIDB4NTgsIDB4ZDAsCi0gIDB4MTQsIDB4ZWQsIDB4NzgsIDB4MWEsIDB4NzcsIDB4NjMsIDB4MmYsIDB4MmQsIDB4YjQsIDB4NGYsIDB4NzYsIDB4YmIsCi0gIDB4YWMsIDB4ZWIsIDB4YjMsIDB4MDksIDB4YWMsIDB4OWYsIDB4MDUsIDB4YTIsIDB4ZGIsIDB4NmUsIDB4ZjUsIDB4ZjMsCi0gIDB4ZWMsIDB4ZjgsIDB4NmYsIDB4NjgsIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4ZmYsIDB4ZmYsIDB4MTEsIDB4NmYsIDB4YTQsIDB4YTAsIDB4YzksIDB4NGMsIDB4NDMsIDB4MDgsIDB4MDUsIDB4YjQsCi0gIDB4OTcsIDB4NmQsIDB4ZjUsIDB4NTEsIDB4NjksIDB4ODAsIDB4NGEsIDB4MDgsIDB4YTksIDB4YjEsIDB4NWEsIDB4MzQsCi0gIDB4ODEsIDB4MDAsIDB4NGMsIDB4YjEsIDB4NjUsIDB4MzksIDB4ZTQsIDB4NDgsIDB4MWEsIDB4MGMsIDB4MzMsIDB4MzQsCi0gIDB4NGYsIDB4YjEsIDB4N2QsIDB4ODEsIDB4ZDMsIDB4NjcsIDB4YTMsIDB4YjAsIDB4N2EsIDB4NGYsIDB4NTcsIDB4Y2EsCi0gIDB4ODMsIDB4ZGQsIDB4N2MsIDB4OTcsIDB4NDYsIDB4MTMsIDB4MjAsIDB4MjUsIDB4MTEsIDB4YmUsIDB4YjIsIDB4YjgsCi0gIDB4YjYsIDB4NzcsIDB4ZTUsIDB4YzQsIDB4YmMsIDB4YWYsIDB4MmQsIDB4ZTEsIDB4OTgsIDB4OWEsIDB4ZWYsIDB4ZWYsCi0gIDB4ZDcsIDB4YTUsIDB4OTcsIDB4YTUsIDB4NGYsIDB4MDYsIDB4YWMsIDB4NTAsIDB4YTksIDB4ZjgsIDB4MGIsIDB4MDcsCi0gIDB4YjYsIDB4NTUsIDB4MjAsIDB4ZjQsIDB4OTEsIDB4YWUsIDB4MjksIDB4ZjUsIDB4ZDgsIDB4ZWIsIDB4NGQsIDB4MWUsCi0gIDB4OTAsIDB4OTMsIDB4NDksIDB4ZTMsIDB4MDYsIDB4ZWUsIDB4OTUsIDB4M2IsIDB4NGUsIDB4YmEsIDB4ZjIsIDB4ODEsCi0gIDB4MGYsIDB4OGIsIDB4MTQsIDB4MDYsIDB4NzgsIDB4NjcsIDB4YTQsIDB4NzAsIDB4NjksIDB4NjIsIDB4Y2MsIDB4NTQsCi0gIDB4YTUsIDB4ZjEsIDB4YjMsIDB4YWIsIDB4OTksIDB4NmEsIDB4Y2QsIDB4MDMsIDB4OTEsIDB4YmEsIDB4NTIsIDB4ZjYsCi0gIDB4YWQsIDB4ZmMsIDB4NzYsIDB4NjYsIDB4MWUsIDB4YzMsIDB4ZmUsIDB4YWYsIDB4YTIsIDB4ZWUsIDB4NmEsIDB4MjMsCi0gIDB4NDgsIDB4NzAsIDB4M2YsIDB4NDUsIDB4MzcsIDB4NjUsIDB4ZTMsIDB4NDMsIDB4MTAsIDB4MGQsIDB4MTksIDB4ODYsCi0gIDB4NTgsIDB4YzksIDB4MzcsIDB4MTgsIDB4MGEsIDB4Y2QsIDB4YTUsIDB4MjUsIDB4OGEsIDB4ZDYsIDB4MDYsIDB4ZjMsCi0gIDB4MmMsIDB4MWMsIDB4YzAsIDB4ODEsIDB4ZGQsIDB4OTMsIDB4ODcsIDB4NTQsIDB4MTcsIDB4ZmQsIDB4YzksIDB4MzcsCi0gIDB4MDUsIDB4MjQsIDB4MTgsIDB4MjgsIDB4OTYsIDB4Y2MsIDB4ZTcsIDB4M2MsIDB4MDcsIDB4OTQsIDB4YzYsIDB4YjgsCi0gIDB4YzIsIDB4NWEsIDB4ZWUsIDB4NzcsIDB4ZTYsIDB4NTIsIDB4YTEsIDB4MjEsIDB4ZWQsIDB4MjcsIDB4ZjksIDB4M2UsCi0gIDB4NjcsIDB4NTYsIDB4YTMsIDB4MmEsIDB4MmIsIDB4OTQsIDB4NDUsIDB4MzksIDB4MGIsIDB4OWIsIDB4MzgsIDB4ZDcsCi0gIDB4NDAsIDB4ZDcsIDB4NWUsIDB4MGQsIDB4NTIsIDB4ZDEsIDB4MWMsIDB4NTYsIDB4NDUsIDB4MmEsIDB4ODIsIDB4YzksCi0gIDB4MjYsIDB4MjgsIDB4NjYsIDB4YjEsIDB4OGEsIDB4NmQsIDB4OWQsIDB4MTQsIDB4NjcsIDB4YjIsIDB4ODAsIDB4MjEsCi0gIDB4NzksIDB4ODMsIDB4ODIsIDB4ZWUsIDB4ZGUsIDB4ZGYsIDB4ZmYsIDB4N2IsIDB4ZmYsIDB4YjksIDB4ZjIsIDB4MjAsCi0gIDB4ZjksIDB4ZmIsIDB4MTUsIDB4MjAsIDB4NTgsIDB4NjYsIDB4MWQsIDB4ODAsIDB4OTQsIDB4MDAsIDB4MTUsIDB4NzUsCi0gIDB4MmEsIDB4MDAsIDB4MTIsIDB4NTYsIDB4MDIsIDB4NzUsIDB4YTEsIDB4MzYsIDB4ODcsIDB4MzIsIDB4MzEsIDB4NDgsCi0gIDB4OWEsIDB4YzMsIDB4MzIsIDB4ZjIsIDB4MGIsIDB4YzAsIDB4YTUsIDB4OWQsIDB4NzgsIDB4NjIsIDB4YWUsIDB4OGMsCi0gIDB4ZDcsIDB4NGEsIDB4ZWIsIDB4MTYsIDB4NmUsIDB4ZmQsIDB4NjUsIDB4MGUsIDB4NTYsIDB4YmMsIDB4NjUsIDB4MzgsCi0gIDB4ZjUsIDB4NmIsIDB4ZjEsIDB4YjcsIDB4ZDcsIDB4MGEsIDB4NTQsIDB4M2EsIDB4ZjMsIDB4YWEsIDB4NDQsIDB4NGYsCi0gIDB4MTksIDB4MDUsIDB4ZWMsIDB4ZTAsIDB4ZGQsIDB4ZDksIDB4Y2YsIDB4NTgsIDB4NjIsIDB4MWIsIDB4MGEsIDB4ZDgsCi0gIDB4YmEsIDB4YmMsIDB4NzgsIDB4ZjAsIDB4ZTEsIDB4NjIsIDB4ZTcsIDB4MmMsIDB4YmEsIDB4M2EsIDB4YTgsIDB4YTcsCi0gIDB4MzAsIDB4MDksIDB4NGIsIDB4YzEsIDB4MjYsIDB4NTAsIDB4OTIsIDB4Y2EsIDB4NDcsIDB4MWEsIDB4NjcsIDB4ZmYsCi0gIDB4YWMsIDB4ZmYsIDB4N2IsIDB4ZDEsIDB4YjYsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsCi0gIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MTcsIDB4NzMsIDB4ODIsIDB4YTAsIDB4NDksIDB4NmMsIDB4NTQsIDB4MDgsIDB4MGQsCi0gIDB4MmUsIDB4NWIsIDB4YTUsIDB4MzgsIDB4MmQsIDB4NGEsIDB4MDUsIDB4MDIsIDB4YzUsIDB4NTAsIDB4OTEsIDB4MmUsCi0gIDB4ZTgsIDB4N2QsIDB4NjMsIDB4OTUsIDB4MWEsIDB4NDEsIDB4NDgsIDB4ZjEsIDB4ZWIsIDB4ZTIsIDB4NjUsIDB4NGQsCi0gIDB4ODgsIDB4MmUsIDB4ZDQsIDB4ZDksIDB4MzksIDB4MDgsIDB4MmUsIDB4NGUsIDB4ZDksIDB4YzgsIDB4ZmYsIDB4NDcsCi0gIDB4ZTEsIDB4ZDksIDB4ODYsIDB4Y2MsIDB4MjUsIDB4MzksIDB4NTUsIDB4ZDIsIDB4M2IsIDB4ODIsIDB4OGQsIDB4NDMsCi0gIDB4ZTksIDB4ZTksIDB4YTQsIDB4ZTEsIDB4NmEsIDB4NDgsIDB4ZTYsIDB4OWMsIDB4NTgsIDB4ZDUsIDB4ZGMsIDB4NTEsCi0gIDB4YmQsIDB4ZmMsIDB4MzMsIDB4MmQsIDB4NGIsIDB4YWUsIDB4ZjYsIDB4MmYsIDB4YjQsIDB4ZWIsIDB4YmQsIDB4NzEsCi0gIDB4YjAsIDB4NzAsIDB4YTksIDB4MGEsIDB4YTgsIDB4Y2YsIDB4YjksIDB4ZWQsIDB4ZmMsIDB4ZTgsIDB4OGQsIDB4ZDUsCi0gIDB4OTYsIDB4ZTIsIDB4YjcsIDB4MzYsIDB4OWIsIDB4Y2QsIDB4ZDksIDB4ZWEsIDB4MTQsIDB4YTEsIDB4NWIsIDB4MDAsCi0gIDB4NWIsIDB4NjQsIDB4NmQsIDB4NzIsIDB4MGEsIDB4ZDMsIDB4NDgsIDB4YzQsIDB4YjcsIDB4YmIsIDB4Y2MsIDB4YmEsCi0gIDB4YWMsIDB4ZGEsIDB4MTcsIDB4ODksIDB4NGIsIDB4OTUsIDB4NTcsIDB4MDUsIDB4NjMsIDB4N2UsIDB4M2MsIDB4YWEsCi0gIDB4NzUsIDB4YjgsIDB4MTIsIDB4NDQsIDB4YmEsIDB4YzYsIDB4ZDksIDB4MzYsIDB4YjksIDB4ZmIsIDB4MTQsIDB4NzgsCi0gIDB4NGUsIDB4ODUsIDB4MmIsIDB4NzMsIDB4ZmMsIDB4ZjYsIDB4MjUsIDB4ZGUsIDB4NTIsIDB4N2IsIDB4NzUsIDB4NTEsCi0gIDB4YjUsIDB4M2YsIDB4ZWIsIDB4ZDQsIDB4MGUsIDB4ODgsIDB4MjIsIDB4NDIsIDB4MDEsIDB4ZTksIDB4ZDAsIDB4NTYsCi0gIDB4YTksIDB4MDksIDB4MzEsIDB4ODQsIDB4OWQsIDB4NjcsIDB4YmQsIDB4ODcsIDB4MDgsIDB4MzIsIDB4NTAsIDB4YjksCi0gIDB4YjEsIDB4MzgsIDB4MTAsIDB4MTAsIDB4ZWIsIDB4NzUsIDB4NDAsIDB4NDQsIDB4M2QsIDB4MjksIDB4ZmQsIDB4YjQsCi0gIDB4NmIsIDB4ZDUsIDB4N2EsIDB4NTUsIDB4MmMsIDB4ZTYsIDB4N2QsIDB4MTAsIDB4OWQsIDB4MGMsIDB4NGMsIDB4ZDAsCi0gIDB4NmIsIDB4MzIsIDB4ODYsIDB4NDAsIDB4MDUsIDB4YWEsIDB4ZDMsIDB4MTAsIDB4OTksIDB4ODIsIDB4MTgsIDB4MWIsCi0gIDB4YTksIDB4ZGYsIDB4MmIsIDB4MmEsIDB4MDQsIDB4ODksIDB4NDUsIDB4ZTYsIDB4MjMsIDB4NDIsIDB4OTIsIDB4YWUsCi0gIDB4YTQsIDB4YTYsIDB4NTMsIDB4YjgsIDB4ZTUsIDB4OTgsIDB4OGMsIDB4YjksIDB4ZGQsIDB4OWEsIDB4NjAsIDB4NDUsCi0gIDB4NmQsIDB4MDgsIDB4NTIsIDB4NjUsIDB4MjMsIDB4MTksIDB4OTYsIDB4ZWIsIDB4YjAsIDB4ZmYsIDB4ZTgsIDB4OWYsCi0gIDB4ZmUsIDB4NTEsIDB4YTcsIDB4NzcsIDB4NzcsIDB4Y2YsIDB4YzAsIDB4MDgsIDB4NTYsIDB4ODEsIDB4NjEsIDB4OTgsCi0gIDB4NzYsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MjUsIDB4ODAsIDB4YzIsIDB4NDQsIDB4YzEsIDB4ZjksIDB4NzcsIDB4YjYsCi0gIDB4YTYsIDB4ZjUsIDB4ZDEsIDB4ODYsIDB4ZTEsIDB4NTYsIDB4ODAsIDB4ZDAsIDB4YTIsIDB4YTgsIDB4MjcsIDB4ZjQsCi0gIDB4YWMsIDB4NWMsIDB4NDIsIDB4MzIsIDB4OGMsIDB4Y2EsIDB4N2EsIDB4MzMsIDB4ZWMsIDB4ZjMsIDB4NmMsIDB4ZDAsCi0gIDB4MmQsIDB4MzksIDB4Y2EsIDB4NjYsIDB4ODQsIDB4NDMsIDB4MWQsIDB4M2YsIDB4MDMsIDB4MmQsIDB4YzUsIDB4YTIsCi0gIDB4M2UsIDB4MzYsIDB4MmYsIDB4ZTgsIDB4YzMsIDB4MzcsIDB4MDQsIDB4ZTIsIDB4NzQsIDB4NTMsIDB4YWUsIDB4MmQsCi0gIDB4NGQsIDB4NTksIDB4NGIsIDB4NmMsIDB4YWQsIDB4MDksIDB4YTksIDB4MDIsIDB4ZmIsIDB4NWQsIDB4NTYsIDB4ZTEsCi0gIDB4NmMsIDB4NzcsIDB4ZTQsIDB4ZmQsIDB4OWQsIDB4MmMsIDB4YTMsIDB4YTIsIDB4MDIsIDB4ZTEsIDB4ZWIsIDB4ODAsCi0gIDB4NmUsIDB4NTMsIDB4NTMsIDB4ZjMsIDB4ZmIsIDB4YTcsIDB4ZmYsIDB4ZmEsIDB4ZmMsIDB4OWYsIDB4ZmIsIDB4MTAsCi0gIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MTUsIDB4NzMsIDB4ODIsCi0gIDB4YWEsIDB4MDgsIDB4YWMsIDB4NDMsIDB4MDgsIDB4MGIsIDB4YjMsIDB4NGIsIDB4ODksIDB4YzUsIDB4NDgsIDB4YWIsCi0gIDB4YWMsIDB4MDAsIDB4ODQsIDB4NGMsIDB4ZDgsIDB4MjYsIDB4MzgsIDB4MTcsIDB4NGMsIDB4MGIsIDB4YTQsIDB4MTYsCi0gIDB4ZTQsIDB4OWEsIDB4MjAsIDB4OWYsIDB4NjcsIDB4YzEsIDB4Y2YsIDB4NTEsIDB4OGIsIDB4YjIsIDB4YWUsIDB4ODIsCi0gIDB4N2EsIDB4OTYsIDB4NDYsIDB4YzQsIDB4NzgsIDB4N2UsIDB4MWYsIDB4MjgsIDB4ODcsIDB4OGMsIDB4YjcsIDB4YjQsCi0gIDB4YWUsIDB4M2YsIDB4YzQsIDB4MmQsIDB4NzQsIDB4ZTIsIDB4YjYsIDB4YzcsIDB4ZWMsIDB4N2UsIDB4NDgsIDB4OTgsCi0gIDB4NzgsIDB4YWYsIDB4NDYsIDB4MzgsIDB4ZDMsIDB4YTEsIDB4YWYsIDB4NWQsIDB4NzksIDB4OGUsIDB4M2IsIDB4OTEsCi0gIDB4MjgsIDB4NDUsIDB4MzcsIDB4NzYsIDB4M2UsIDB4OGIsIDB4YTMsIDB4MjksIDB4YzQsIDB4YWQsIDB4YTcsIDB4NmQsCi0gIDB4ZTQsIDB4ODksIDB4YjEsIDB4MTAsIDB4NjgsIDB4OWIsIDB4ZGQsIDB4YjMsIDB4Y2MsIDB4NjksIDB4ZmQsIDB4MGQsCi0gIDB4NGUsIDB4YjYsIDB4ZDksIDB4MGYsIDB4ZWYsIDB4NTksIDB4MmMsIDB4MzQsIDB4YjcsIDB4YTgsIDB4YjIsIDB4Y2UsCi0gIDB4NmQsIDB4Y2QsIDB4MGQsIDB4OTQsIDB4NTgsIDB4ZjgsIDB4YjcsIDB4OTUsIDB4Y2IsIDB4YmEsIDB4NTQsIDB4NTUsCi0gIDB4MjUsIDB4OWYsIDB4NTEsIDB4MjAsIDB4Y2QsIDB4ZDQsIDB4NzAsIDB4OGIsIDB4YzUsIDB4ZmQsIDB4NjQsIDB4YzQsCi0gIDB4NGUsIDB4ZDcsIDB4YTMsIDB4YjUsIDB4ZDksIDB4ZDcsIDB4YzIsIDB4NjUsIDB4MjksIDB4ZTEsIDB4NTksIDB4MWEsCi0gIDB4ZDksIDB4NjksIDB4YjIsIDB4MmUsIDB4NTgsIDB4NGIsIDB4MTcsIDB4NGMsIDB4MzcsIDB4NGIsIDB4NDYsIDB4ZDYsCi0gIDB4YWQsIDB4YWUsIDB4ODIsIDB4YzksIDB4NDAsIDB4NTIsIDB4OTcsIDB4NDgsIDB4NjQsIDB4OTUsIDB4OTUsIDB4NTAsCi0gIDB4MGQsIDB4NDIsIDB4MTgsIDB4NmUsIDB4YjEsIDB4NzgsIDB4NzMsIDB4MjQsIDB4Y2UsIDB4YjAsIDB4MTAsIDB4MGMsCi0gIDB4MTQsIDB4YzAsIDB4NWMsIDB4YWEsIDB4M2QsIDB4YjgsIDB4YWUsIDB4NTQsIDB4MTksIDB4NTMsIDB4NjcsIDB4ZWQsCi0gIDB4MWMsIDB4MjksIDB4MTcsIDB4OGMsIDB4NmQsIDB4MGMsIDB4OGEsIDB4MmQsIDB4MTIsIDB4MTQsIDB4M2MsIDB4YjIsCi0gIDB4YjEsIDB4MzMsIDB4OTUsIDB4NGEsIDB4MDgsIDB4YjYsIDB4ZDYsIDB4Y2UsIDB4ZTIsIDB4MTEsIDB4N2YsIDB4MGIsCi0gIDB4MTYsIDB4ODYsIDB4YzcsIDB4NWIsIDB4ZWEsIDB4YWYsIDB4MDUsIDB4ZmQsIDB4ZTUsIDB4NDksIDB4M2UsIDB4MTMsCi0gIDB4NGIsIDB4ZGUsIDB4YTksIDB4OTUsIDB4MGEsIDB4NzMsIDB4ZDIsIDB4MjcsIDB4MTIsIDB4NDcsIDB4MzcsIDB4YzAsCi0gIDB4ZTIsIDB4NWYsIDB4ZWIsIDB4MzYsIDB4M2UsIDB4MDUsIDB4YzEsIDB4ZjcsIDB4ZjAsIDB4MmIsIDB4MjEsIDB4YjAsCi0gIDB4Y2MsIDB4M2IsIDB4MDAsIDB4MDAsIDB4MmEsIDB4MGIsIDB4MDAsIDB4MDIsIDB4YjUsIDB4YzgsIDB4ZTEsIDB4MzksCi0gIDB4MzAsIDB4ZmIsIDB4OTEsIDB4ODUsIDB4OGIsIDB4YTMsIDB4YmUsIDB4OGUsIDB4ZjYsIDB4MjAsIDB4NzcsIDB4YTYsCi0gIDB4NzYsIDB4ZjIsIDB4NjIsIDB4NDIsIDB4MmQsIDB4NzYsIDB4OWQsIDB4ODAsIDB4NWUsIDB4YjAsIDB4NmYsIDB4ZDgsCi0gIDB4YmQsIDB4MmIsIDB4YzgsIDB4MGUsIDB4OTYsIDB4YmQsIDB4MDQsIDB4NjksIDB4ZjIsIDB4ZDQsIDB4OTAsIDB4ODIsCi0gIDB4MTcsIDB4OGIsIDB4ZWQsIDB4MzksIDB4MDUsIDB4ZmIsIDB4NmQsIDB4ZDIsIDB4ODEsIDB4ZDMsIDB4YjcsIDB4ZTEsCi0gIDB4YjUsIDB4MjksIDB4ODAsIDB4YzIsIDB4ZDksIDB4MjgsIDB4MmIsIDB4NTEsIDB4NDAsIDB4YWMsIDB4MjQsIDB4NTMsCi0gIDB4NzksIDB4YTAsIDB4ODksIDB4MjIsIDB4YTcsIDB4MzQsIDB4NTIsIDB4ZjAsIDB4ZDUsIDB4ZjcsIDB4Y2EsIDB4MjYsCi0gIDB4ZDYsIDB4ZmMsIDB4NjYsIDB4Y2IsIDB4ZjEsIDB4ZmEsIDB4YzIsIDB4ZWMsIDB4NzYsIDB4ZmUsIDB4ZTcsIDB4ZmEsCi0gIDB4MjAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4NmYsCi0gIDB4YTEsIDB4YzEsIDB4ZDAsIDB4NDQsIDB4NDUsIDB4MDksIDB4MTUsIDB4ODgsIDB4NjEsIDB4MDQsIDB4OTYsIDB4NzAsCi0gIDB4OTUsIDB4NzMsIDB4NTMsIDB4MzgsIDB4YWIsIDB4MTQsIDB4MDAsIDB4MTAsIDB4YzEsIDB4ODIsIDB4OTIsIDB4NWMsCi0gIDB4NzcsIDB4MzEsIDB4NzMsIDB4MDYsIDB4NGUsIDB4MTEsIDB4MTcsIDB4YjIsIDB4Y2YsIDB4MzcsIDB4ZTcsIDB4MzAsCi0gIDB4MzAsIDB4N2UsIDB4MDIsIDB4ZjUsIDB4ZTIsIDB4MzcsIDB4YmUsIDB4MzMsIDB4ZWQsIDB4M2YsIDB4MWEsIDB4YjUsCi0gIDB4YjIsIDB4NmEsIDB4NDAsIDB4NzksIDB4ODQsIDB4YmEsIDB4NGIsIDB4NmUsIDB4ZjMsIDB4ZGEsIDB4ZjYsIDB4MGIsCi0gIDB4NWUsIDB4YWYsIDB4Y2MsIDB4MzgsIDB4ZTEsIDB4YjgsIDB4ZWUsIDB4YWIsIDB4ZTAsIDB4MGYsIDB4ZTUsIDB4MmEsCi0gIDB4NGIsIDB4NDUsIDB4NGIsIDB4MjMsIDB4NTMsIDB4ODAsIDB4Y2UsIDB4OTksIDB4YWIsIDB4YmUsIDB4MjYsIDB4ZWEsCi0gIDB4MzksIDB4OGIsIDB4MzcsIDB4YmMsIDB4NmEsIDB4NGUsIDB4MWIsIDB4MjMsIDB4MDAsIDB4Y2YsIDB4NzYsIDB4NWYsCi0gIDB4MTQsIDB4NjYsIDB4ZWIsIDB4ZjgsIDB4MmYsIDB4ZWMsIDB4YzgsIDB4OWQsIDB4MjMsIDB4MGMsIDB4N2EsIDB4ZjIsCi0gIDB4ZDcsIDB4NmYsIDB4NDIsIDB4N2YsIDB4OGUsIDB4N2MsIDB4ZGIsIDB4MTgsIDB4OWUsIDB4MzYsIDB4YjIsIDB4MzgsCi0gIDB4YWUsIDB4NjcsIDB4MDAsIDB4NzQsIDB4MGIsIDB4NjQsIDB4OGMsIDB4ZDAsIDB4NjMsIDB4ZDEsIDB4MmUsIDB4NzUsCi0gIDB4YjksIDB4NDUsIDB4MDEsIDB4ZjgsIDB4ZTAsIDB4MzMsIDB4Y2IsIDB4MmUsIDB4OTMsIDB4NjMsIDB4YTEsIDB4MTQsCi0gIDB4ODksIDB4MTksIDB4M2UsIDB4YWYsIDB4MzYsIDB4YzMsIDB4ZjksIDB4MDIsIDB4ZjMsIDB4ZTAsIDB4OTUsIDB4NzcsCi0gIDB4YWIsIDB4OTksIDB4YTYsIDB4YzcsIDB4NTQsIDB4ZTAsIDB4NTgsIDB4YjgsIDB4YTAsIDB4ODMsIDB4MjIsIDB4ZDAsCi0gIDB4YTUsIDB4ODIsIDB4NWIsIDB4MjgsIDB4NDQsIDB4YWYsIDB4YTIsIDB4YzksIDB4ZmYsIDB4NTYsIDB4NzMsIDB4YTksCi0gIDB4MTQsIDB4Y2MsIDB4M2QsIDB4NDUsIDB4ODAsIDB4ZTMsIDB4YTQsIDB4NmQsIDB4MzYsIDB4MjYsIDB4MTcsIDB4YTgsCi0gIDB4MDUsIDB4NTIsIDB4YTMsIDB4ZjQsIDB4YTYsIDB4NzQsIDB4ZGMsIDB4YTUsIDB4MWMsIDB4NzQsIDB4ODMsIDB4MjAsCi0gIDB4MjEsIDB4MzMsIDB4OGEsIDB4MWUsIDB4MjAsIDB4MTYsIDB4MTksIDB4ODksIDB4MjYsIDB4MDUsIDB4Y2EsIDB4ZWIsCi0gIDB4NmMsIDB4NmQsIDB4NTIsIDB4ZjUsIDB4MWIsIDB4NWQsIDB4Y2YsIDB4YWEsIDB4NDgsIDB4OTYsIDB4OGIsIDB4MTIsCi0gIDB4NmEsIDB4ODAsIDB4YWUsIDB4ZWUsIDB4YjIsIDB4OTcsIDB4NTMsIDB4NjQsIDB4MTAsIDB4YzIsIDB4MWEsIDB4YzksCi0gIDB4OWEsIDB4YWMsIDB4ZmUsIDB4MTcsIDB4ZTAsIDB4M2EsIDB4OWUsIDB4ZTAsIDB4M2YsIDB4N2UsIDB4ODUsIDB4NjgsCi0gIDB4NDMsIDB4MGUsIDB4YzAsIDB4MDIsIDB4NTEsIDB4MmEsIDB4YTAsIDB4OTMsIDB4NDAsIDB4MjgsIDB4MzIsIDB4MDYsCi0gIDB4ZDYsIDB4ODUsIDB4YTksIDB4NDEsIDB4NDEsIDB4MjEsIDB4MWIsIDB4NTcsIDB4N2EsIDB4ZjIsIDB4OTAsIDB4YTMsCi0gIDB4M2EsIDB4OGQsIDB4NTEsIDB4YWIsIDB4NTIsIDB4YjAsIDB4NzgsIDB4MjksIDB4ZDgsIDB4NGUsIDB4ODcsIDB4NWMsCi0gIDB4OTgsIDB4NjksIDB4NTUsIDB4OTYsIDB4Y2QsIDB4NTgsIDB4OTYsIDB4MzMsIDB4MjksIDB4ZmIsIDB4MzcsIDB4ZDMsCi0gIDB4OTEsIDB4OGQsIDB4ZTIsIDB4YTYsIDB4ZjcsIDB4MWUsIDB4MjgsIDB4YjgsIDB4YTcsIDB4MWEsIDB4YjcsIDB4M2QsCi0gIDB4MjMsIDB4ZjcsIDB4ZWYsIDB4OGEsIDB4ODIsIDB4YzcsIDB4MTYsIDB4YzcsIDB4YzQsIDB4MTEsIDB4ZDQsIDB4MDYsCi0gIDB4NTMsIDB4ZGEsIDB4OTMsIDB4MmYsIDB4OWIsIDB4ZjYsIDB4NGEsIDB4NGUsIDB4MmMsIDB4MmYsIDB4NGIsIDB4ZTMsCi0gIDB4M2YsIDB4M2YsIDB4NTAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4M2YsIDB4ZmYsIDB4ZmYsCi0gIDB4MWQsIDB4NzMsIDB4ODIsIDB4YTAsIDB4YzksIDB4MjgsIDB4MjYsIDB4MWEsIDB4ODQsIDB4MmUsIDB4ZDMsIDB4YWIsCi0gIDB4MjEsIDB4MWMsIDB4MjUsIDB4ZDQsIDB4OWIsIDB4MDAsIDB4MDUsIDB4YWIsIDB4MDcsIDB4ZGMsIDB4YzksIDB4NDIsCi0gIDB4MmQsIDB4NDAsIDB4MWEsIDB4MDQsIDB4OTIsIDB4ZmEsIDB4MzksIDB4N2UsIDB4NTUsIDB4MTMsIDB4OGIsIDB4NDMsCi0gIDB4NTgsIDB4ODMsIDB4ZTEsIDB4ZDgsIDB4MjAsIDB4ZWMsIDB4MGYsIDB4ZDQsIDB4YzksIDB4NWQsIDB4MmIsIDB4ZDIsCi0gIDB4M2YsIDB4OTQsIDB4MjcsIDB4MzgsIDB4ZDksIDB4ZDUsIDB4MTIsIDB4MGUsIDB4YjcsIDB4ZWQsIDB4NWIsIDB4MjUsCi0gIDB4ZjUsIDB4YWIsIDB4YTIsIDB4NWIsIDB4YTMsIDB4YmQsIDB4YTMsIDB4MWMsIDB4ZTUsIDB4OTEsIDB4ZGIsIDB4ZjgsCi0gIDB4NWIsIDB4YjYsIDB4OGMsIDB4OWIsIDB4YTYsIDB4NTIsIDB4MzksIDB4YTMsIDB4OTYsIDB4MjgsIDB4NjQsIDB4YzUsCi0gIDB4NjUsIDB4NjgsIDB4MGQsIDB4NWEsIDB4MzIsIDB4MzAsIDB4YzksIDB4MzQsIDB4YzAsIDB4OGUsIDB4ODUsIDB4YWIsCi0gIDB4ZWUsIDB4ZTcsIDB4ZjAsIDB4YzgsIDB4OTEsIDB4YzcsIDB4MDMsIDB4NzksIDB4YmQsIDB4ZmIsIDB4M2IsIDB4NzIsCi0gIDB4YjgsIDB4ZDAsIDB4ZDIsIDB4NGYsIDB4ZGUsIDB4ZTksIDB4NWQsIDB4YzksIDB4YWEsIDB4N2QsIDB4YjksIDB4ODMsCi0gIDB4NWUsIDB4YTIsIDB4NTEsIDB4MTUsIDB4NmQsIDB4ZWEsIDB4NmIsIDB4YjIsIDB4M2IsIDB4YmUsIDB4YzYsIDB4YmYsCi0gIDB4NmIsIDB4NTQsIDB4ZDYsIDB4ZDMsIDB4MjIsIDB4NDgsIDB4MTEsIDB4ZDYsIDB4M2IsIDB4ZDYsIDB4MWEsIDB4ZWIsCi0gIDB4YmMsIDB4YzMsIDB4OWIsIDB4MDcsIDB4MDUsIDB4ZDMsIDB4Y2MsIDB4NzgsIDB4NjYsIDB4MzAsIDB4NWUsIDB4NmIsCi0gIDB4YzAsIDB4MTgsIDB4MTgsIDB4Y2QsIDB4ZGUsIDB4MjYsIDB4MWIsIDB4NTYsIDB4MTcsIDB4ZWUsIDB4MGYsIDB4MTksCi0gIDB4MWMsIDB4ZTcsIDB4YTUsIDB4Y2IsIDB4MTgsIDB4NDcsIDB4NjEsIDB4YjAsIDB4NjUsIDB4YmEsIDB4NGUsIDB4NGUsCi0gIDB4MjEsIDB4NWYsIDB4N2UsIDB4ZjIsIDB4NmUsIDB4YWYsIDB4MzAsIDB4MTMsIDB4MmYsIDB4OTAsIDB4ZWUsIDB4YjEsCi0gIDB4OTksIDB4Y2QsIDB4NmEsIDB4MGYsIDB4Y2UsIDB4MGQsIDB4ZDQsIDB4ODAsIDB4MTAsIDB4MDIsIDB4YWIsIDB4YzYsCi0gIDB4NTgsIDB4N2IsIDB4YmEsIDB4MzIsIDB4ODYsIDB4NzksIDB4MmMsIDB4NTUsIDB4ZjMsIDB4ZmUsIDB4OTksIDB4MDMsCi0gIDB4NzksIDB4N2EsIDB4NDgsIDB4NTcsIDB4N2MsIDB4YzcsIDB4YTAsIDB4NTIsIDB4ZWQsIDB4MmYsIDB4ODcsIDB4OWEsCi0gIDB4YzYsIDB4ZjMsIDB4MGQsIDB4YTUsIDB4MmMsIDB4ZDksIDB4YzksIDB4OWYsIDB4YjksIDB4ZmYsIDB4NTgsIDB4ODcsCi0gIDB4NjYsIDB4MjIsIDB4MjEsIDB4MzIsIDB4NDgsIDB4M2EsIDB4M2UsIDB4OWEsIDB4NjksIDB4OTUsIDB4YWUsIDB4ZDcsCi0gIDB4NWMsIDB4ZTMsIDB4OTcsIDB4NGYsIDB4NjgsIDB4MDEsIDB4ZWYsIDB4ZWEsIDB4ODMsIDB4MTYsIDB4YjEsIDB4MWMsCi0gIDB4M2IsIDB4MDAsIDB4MDAsIDB4YTgsIDB4YTAsIDB4MDAsIDB4MTAsIDB4OGEsIDB4MTcsIDB4YTMsIDB4NjIsIDB4Y2MsCi0gIDB4OGIsIDB4ZjIsIDB4NmQsIDB4MjcsIDB4YzksIDB4YzksIDB4NDAsIDB4MmYsIDB4MmIsIDB4MjcsIDB4YzgsIDB4YmEsCi0gIDB4MzIsIDB4OTAsIDB4MWIsIDB4OTYsIDB4OGEsIDB4ZDgsIDB4NmMsIDB4YTUsIDB4Y2EsIDB4MmYsIDB4N2EsIDB4NDQsCi0gIDB4MWQsIDB4OTMsIDB4OWEsIDB4NGEsIDB4OGQsIDB4MGQsIDB4NmUsIDB4NzEsIDB4OTIsIDB4YzUsIDB4M2MsIDB4MWEsCi0gIDB4ODksIDB4ZmEsIDB4YTEsIDB4MDgsIDB4ZGYsIDB4NzYsIDB4OGQsIDB4NTksIDB4YjQsIDB4N2QsIDB4ODMsIDB4MWEsCi0gIDB4MzksIDB4NmQsIDB4OWYsIDB4ZDcsIDB4YmIsIDB4ZjYsIDB4NDEsIDB4YTYsIDB4MDQsIDB4MjYsIDB4NzEsIDB4MzgsCi0gIDB4NWYsIDB4M2QsIDB4NDYsIDB4MzMsIDB4YjksIDB4M2MsIDB4YzIsIDB4NWIsIDB4MjAsIDB4Y2MsIDB4ZWMsIDB4ZmMsCi0gIDB4NTMsIDB4NWIsIDB4NTksIDB4YTgsIDB4YTYsIDB4YzcsIDB4YzksIDB4MjYsIDB4MmYsIDB4NzYsIDB4MGIsIDB4NDUsCi0gIDB4OTIsIDB4YzksIDB4ZmMsIDB4YTYsIDB4NDIsIDB4MTksIDB4NzQsIDB4YTYsIDB4MjUsIDB4M2UsIDB4ZTEsIDB4YmYsCi0gIDB4NjcsIDB4NmYsIDB4NmIsIDB4ZTgsIDB4NmIsIDB4NWIsIDB4NGUsIDB4MzMsIDB4ODAsIDB4MGUsIDB4MjEsIDB4MWEsCi0gIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4MTksIDB4NzMsIDB4ODIsIDB4MzAsIDB4ZDAsIDB4NjYsCi0gIDB4MjIsIDB4MzIsIDB4MDUsIDB4ODYsIDB4YTEsIDB4MDUsIDB4NjksIDB4NGIsIDB4ZjgsIDB4MTQsIDB4ZTEsIDB4NjgsCi0gIDB4MjgsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZmEsIDB4YjksIDB4ZmMsIDB4ZGMsIDB4ZWYsIDB4ZjksIDB4ZmMsIDB4MWQsCi0gIDB4YWQsIDB4NjQsIDB4YTEsIDB4MWIsIDB4YzAsIDB4MzYsIDB4NDUsIDB4MWYsIDB4NGQsIDB4Y2IsIDB4NjIsIDB4YTcsCi0gIDB4NzMsIDB4YTAsIDB4MmMsIDB4MWYsIDB4ODQsIDB4ZDUsIDB4OTQsIDB4ZWYsIDB4NzQsIDB4NmEsIDB4MWMsIDB4ZTUsCi0gIDB4Y2MsIDB4ZmIsIDB4MGMsIDB4NTksIDB4YjIsIDB4ZTgsIDB4MDUsIDB4MGEsIDB4MGEsIDB4ODksIDB4OWUsIDB4ODMsCi0gIDB4YjEsIDB4NjUsIDB4MzIsIDB4MjgsIDB4NTMsIDB4MWEsIDB4NDEsIDB4NDksIDB4YWIsIDB4YjgsIDB4YWMsIDB4NDUsCi0gIDB4Y2QsIDB4YmYsIDB4OTksIDB4YTYsIDB4MmMsIDB4YmQsIDB4NDgsIDB4ZTIsIDB4YzYsIDB4MjYsIDB4NWMsIDB4MDMsCi0gIDB4YjQsIDB4YTcsIDB4NzMsIDB4YjUsIDB4ZWUsIDB4Y2EsIDB4NmIsIDB4OWMsIDB4ZTEsIDB4NmMsIDB4NGEsIDB4OTMsCi0gIDB4NGEsIDB4ODIsIDB4OTMsIDB4YjIsIDB4NjYsIDB4ZDgsIDB4NjYsIDB4MGMsIDB4ODYsIDB4ZGUsIDB4NmIsIDB4MzcsCi0gIDB4MTcsIDB4NGUsIDB4OTQsIDB4NzEsIDB4YTcsIDB4MWUsIDB4ZWYsIDB4NTMsIDB4ODYsIDB4NjUsIDB4NGQsIDB4NTAsCi0gIDB4OTcsIDB4YWEsIDB4NmUsIDB4NGYsIDB4NWQsIDB4YmMsIDB4MWEsIDB4NzcsIDB4YjYsIDB4ZGEsIDB4MzEsIDB4NGEsCi0gIDB4MWQsIDB4YTcsIDB4OWUsIDB4ZDAsIDB4MjIsIDB4MzgsIDB4NTgsIDB4NjgsIDB4N2EsIDB4MDEsIDB4MTUsIDB4OTUsCi0gIDB4NWMsIDB4YzUsIDB4OWQsIDB4ZDIsIDB4YWUsIDB4ZGIsIDB4YjEsIDB4NTQsIDB4OWUsIDB4Y2IsIDB4MmUsIDB4MjMsCi0gIDB4YjUsIDB4OTYsIDB4ZDUsIDB4ZDIsIDB4NWEsIDB4OTEsIDB4ZWEsIDB4Y2YsIDB4MjMsIDB4NDYsIDB4ODUsIDB4ZWIsCi0gIDB4ZDEsIDB4YmMsIDB4NjcsIDB4YmYsIDB4MTQsIDB4N2EsIDB4OWYsIDB4YWMsIDB4YTUsIDB4MzEsIDB4ODAsIDB4M2UsCi0gIDB4MTAsIDB4N2MsIDB4NzYsIDB4MjEsIDB4ZTksIDB4NTUsIDB4MDIsIDB4MGQsIDB4MjIsIDB4ZDQsIDB4ODAsIDB4YWMsCi0gIDB4MDAsIDB4OGIsIDB4MWEsIDB4OTIsIDB4ODQsIDB4ZTEsIDB4YjUsIDB4MzksIDB4OGMsIDB4YzksIDB4NmYsIDB4MDAsCi0gIDB4N2YsIDB4NjEsIDB4YmUsIDB4YjYsIDB4MWMsIDB4YzIsIDB4MGQsIDB4ZjQsIDB4MDIsIDB4YWMsIDB4Y2MsIDB4MDAsCi0gIDB4NWMsIDB4MTgsIDB4MmEsIDB4NjAsIDB4NDIsIDB4N2IsIDB4MmMsIDB4MTEsIDB4YzcsIDB4ZjAsIDB4NDQsIDB4NTYsCi0gIDB4MzcsIDB4M2UsIDB4YTksIDB4ZjksIDB4NTEsIDB4YzMsIDB4NjYsIDB4YjksIDB4ODMsIDB4YjcsIDB4MWUsIDB4OWYsCi0gIDB4OWEsIDB4MjQsIDB4MDAsIDB4ZmIsIDB4ZmMsIDB4MTQsIDB4YTAsIDB4NTgsIDB4NjYsIDB4MWQsIDB4ODAsIDB4MDAsCi0gIDB4NTQsIDB4YTksIDB4MmEsIDB4NTQsIDB4OTksIDB4NjEsIDB4ODIsIDB4YzAsIDB4MmIsIDB4MWEsIDB4N2UsIDB4YmEsCi0gIDB4YTksIDB4N2IsIDB4NDQsIDB4NWQsIDB4MTUsIDB4MjEsIDB4YWUsIDB4NGIsIDB4NDEsIDB4MjUsIDB4YjQsIDB4NDgsCi0gIDB4NzAsIDB4ZTgsIDB4NzIsIDB4OTksIDB4N2IsIDB4MmEsIDB4NDEsIDB4NzIsIDB4NDksIDB4M2MsIDB4MzIsIDB4YjgsCi0gIDB4ODcsIDB4ODAsIDB4NWEsIDB4NDgsIDB4ZTMsIDB4MGMsIDB4NzQsIDB4YjcsIDB4ZjIsIDB4MDYsIDB4YzksIDB4NDQsCi0gIDB4M2QsIDB4MmMsIDB4ZDUsIDB4OGQsIDB4MDYsIDB4MzgsIDB4YzQsIDB4NTMsIDB4NDIsIDB4YTUsIDB4ZDcsIDB4ZGEsCi0gIDB4MmUsIDB4MTYsIDB4NDUsIDB4OGEsIDB4ZjIsIDB4YjAsIDB4ZDIsIDB4OTcsIDB4NjQsIDB4NjYsIDB4MTgsIDB4YTMsCi0gIDB4YzAsIDB4NmEsIDB4MDksIDB4YzMsIDB4ZWYsIDB4ZGQsIDB4NWMsIDB4M2MsIDB4ODAsIDB4ZTAsIDB4MjEsIDB4MWEsCi0gIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4NmYsIDB4YTQsIDB4YTEsIDB4MDksIDB4MmMsCi0gIDB4NDMsIDB4MDksIDB4MWMsIDB4ZjAsIDB4NTQsIDB4ZWEsIDB4NWEsIDB4ZDIsIDB4ZGEsIDB4NTQsIDB4OTQsIDB4MjgsCi0gIDB4MTAsIDB4MjUsIDB4NjAsIDB4ZGQsIDB4MzUsIDB4ODQsIDB4OWYsIDB4YmYsIDB4ZTIsIDB4ZDcsIDB4MzUsIDB4NTcsCi0gIDB4MmIsIDB4OWMsIDB4OGMsIDB4MzUsIDB4NWUsIDB4NTMsIDB4ZDQsIDB4YjIsIDB4MjIsIDB4MjAsIDB4MGUsIDB4MjksCi0gIDB4ZDUsIDB4NzUsIDB4YjgsIDB4ZmYsIDB4MDcsIDB4ZjAsIDB4YWYsIDB4N2MsIDB4MGQsIDB4YjMsIDB4Y2IsIDB4NWUsCi0gIDB4N2QsIDB4YzMsIDB4ZGEsIDB4NzMsIDB4ZTMsIDB4OTMsIDB4YzgsIDB4NzksIDB4YmYsIDB4ZDgsIDB4NjYsIDB4MjksCi0gIDB4MWEsIDB4ZmYsIDB4YTQsIDB4ZDIsIDB4YzcsIDB4ZDcsIDB4ZDcsIDB4ZTUsIDB4YWMsIDB4ZDUsIDB4YmQsIDB4ZTYsCi0gIDB4N2MsIDB4YWYsIDB4MTUsIDB4ZjcsIDB4OTMsIDB4YjcsIDB4MjgsIDB4MmUsIDB4Y2YsIDB4MDEsIDB4NDMsIDB4MjYsCi0gIDB4YTMsIDB4OGUsIDB4ZjAsIDB4MzgsIDB4YWEsIDB4ZGYsIDB4YzQsIDB4MjQsIDB4MWUsIDB4NzIsIDB4ZmQsIDB4OGIsCi0gIDB4MjUsIDB4MjAsIDB4ODEsIDB4N2YsIDB4M2EsIDB4YzIsIDB4YWYsIDB4MzIsIDB4MzAsIDB4YjEsIDB4MTMsIDB4OTMsCi0gIDB4NDksIDB4MWIsIDB4N2IsIDB4OGEsIDB4NjEsIDB4MGIsIDB4MjgsIDB4YTQsIDB4NDksIDB4MjIsIDB4MWQsIDB4YTQsCi0gIDB4M2QsIDB4NDgsIDB4ZDMsIDB4N2EsIDB4ZDMsIDB4MjAsIDB4YWYsIDB4ODQsIDB4MzMsIDB4YTAsIDB4MzcsIDB4OWYsCi0gIDB4NDQsIDB4NGUsIDB4YjMsIDB4ZDQsIDB4N2UsIDB4ZWQsIDB4NjIsIDB4OGIsIDB4YTksIDB4ZDAsIDB4N2YsIDB4YjcsCi0gIDB4YzgsIDB4YWYsIDB4YTAsIDB4YjYsIDB4YzksIDB4MDUsIDB4ZTAsIDB4NjksIDB4M2QsIDB4NDAsIDB4MGUsIDB4ODIsCi0gIDB4NDEsIDB4NTAsIDB4YzIsIDB4MzcsIDB4MDcsIDB4MzAsIDB4YTksIDB4ZmYsIDB4NDcsIDB4ZDYsIDB4NzUsIDB4MzMsCi0gIDB4ZjcsIDB4NjcsIDB4NWMsIDB4MzcsIDB4MTgsIDB4MGEsIDB4ZGUsIDB4ODQsIDB4OTksIDB4N2QsIDB4MjksIDB4MDgsCi0gIDB4MzMsIDB4YzAsIDB4Y2YsIDB4MDksIDB4YmYsIDB4M2EsIDB4MjIsIDB4M2IsIDB4NWEsIDB4ZjMsIDB4ZmEsIDB4MDMsCi0gIDB4ZGUsIDB4YzcsIDB4YTQsIDB4ZDUsIDB4M2YsIDB4MzQsIDB4YmQsIDB4NmEsIDB4ZmUsIDB4ZmUsIDB4YmIsIDB4MzUsCi0gIDB4MTAsIDB4NTgsIDB4MDQsIDB4MjUsIDB4MDAsIDB4MjIsIDB4Y2UsIDB4NmQsIDB4YjUsIDB4YzAsIDB4MjMsIDB4YmUsCi0gIDB4OTQsIDB4ZGYsIDB4YTgsIDB4MGEsIDB4Y2EsIDB4MTUsIDB4MmEsIDB4MjcsIDB4ZTcsIDB4ZGUsIDB4OTksIDB4NjEsCi0gIDB4MzEsIDB4MzUsIDB4ZTksIDB4ZGEsIDB4MTUsIDB4ZDgsIDB4ZjgsIDB4MzEsIDB4ZDgsIDB4NWMsIDB4ZjIsIDB4YzAsCi0gIDB4YjYsIDB4Y2IsIDB4MTgsIDB4ODYsIDB4MTksIDB4M2MsIDB4YTcsIDB4YzcsIDB4YmQsIDB4MDAsIDB4M2YsIDB4N2UsCi0gIDB4YzUsIDB4MDQsIDB4MzYsIDB4MTgsIDB4ODcsIDB4NjAsIDB4MDAsIDB4MDQsIDB4YTEsIDB4NmMsIDB4ZDAsIDB4MDEsCi0gIDB4MGUsIDB4NDIsIDB4M2QsIDB4NDAsIDB4NjYsIDB4OTUsIDB4ZDQsIDB4YjgsIDB4MTEsIDB4YjEsIDB4YmYsIDB4YmIsCi0gIDB4YTIsIDB4Y2MsIDB4MWMsIDB4YWIsIDB4ZDEsIDB4MmIsIDB4YTEsIDB4ZjMsIDB4MTMsIDB4MjIsIDB4Y2QsIDB4ZGIsCi0gIDB4MTQsIDB4NzcsIDB4NWQsIDB4N2QsIDB4OGUsIDB4ODEsIDB4N2YsIDB4NDEsIDB4YmMsIDB4NjEsIDB4ZTUsIDB4ZmUsCi0gIDB4MzksIDB4ZDcsIDB4Y2YsIDB4MGIsIDB4YmUsIDB4NGYsIDB4NzIsIDB4ZmEsIDB4OGYsIDB4ZjEsIDB4YmEsIDB4NTksCi0gIDB4ZGUsIDB4Y2EsIDB4YmMsIDB4YjMsIDB4MmIsIDB4N2EsIDB4YTcsIDB4OGEsIDB4YWQsIDB4OTIsIDB4NTQsIDB4NDgsCi0gIDB4NGIsIDB4YjcsIDB4ZjgsIDB4MzUsIDB4NzEsIDB4YWYsIDB4NjcsIDB4NzYsIDB4Y2MsIDB4MmYsIDB4N2IsIDB4M2IsCi0gIDB4YTcsIDB4MDcsIDB4MGQsIDB4OTQsIDB4NDksIDB4NWMsIDB4ZTksIDB4OGYsIDB4ZjMsIDB4YWUsIDB4MjcsIDB4ZmQsCi0gIDB4YmYsIDB4ODYsIDB4MTAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsCi0gIDB4MTksIDB4NmYsIDB4YTQsIDB4YjAsIDB4ODgsIDB4ZTgsIDB4NDYsIDB4MjEsIDB4ODQsIDB4MDQsIDB4YWYsIDB4MjYsCi0gIDB4NzAsIDB4YTksIDB4ZDMsIDB4YTUsIDB4NTQsIDB4NDAsIDB4YTEsIDB4MjksIDB4NmEsIDB4OWIsIDB4MTYsIDB4ODEsCi0gIDB4MmUsIDB4YTUsIDB4Y2IsIDB4ODEsIDB4MjAsIDB4OTQsIDB4ZTcsIDB4NjUsIDB4NWQsIDB4YzEsIDB4OWQsIDB4MTEsCi0gIDB4NzIsIDB4N2QsIDB4MTMsIDB4OWEsIDB4MjUsIDB4NjgsIDB4MGIsIDB4OTEsIDB4YjgsIDB4NzYsIDB4N2IsIDB4NjgsCi0gIDB4YjYsIDB4ZTksIDB4MTIsIDB4MDEsIDB4M2MsIDB4Y2UsIDB4M2UsIDB4MzUsIDB4YzUsIDB4N2MsIDB4OGIsIDB4NTUsCi0gIDB4ZDgsIDB4MWEsIDB4NDIsIDB4OTksIDB4ZTEsIDB4YjEsIDB4YzMsIDB4ODUsIDB4ZGYsIDB4MjAsIDB4ZGUsIDB4NjksCi0gIDB4NWMsIDB4YjEsIDB4ZDYsIDB4N2EsIDB4OTcsIDB4MDIsIDB4YWUsIDB4YzYsIDB4YzMsIDB4NGUsIDB4ZmQsIDB4YWMsCi0gIDB4NTksIDB4NGMsIDB4YzAsIDB4NjIsIDB4MzksIDB4NWUsIDB4ZGQsIDB4MjAsIDB4ZGUsIDB4ZGYsIDB4NWYsIDB4NjEsCi0gIDB4ZDUsIDB4ZDYsIDB4YmUsIDB4MWEsIDB4MTUsIDB4MmUsIDB4OGEsIDB4YzAsIDB4ZTksIDB4YTQsIDB4ZjgsIDB4YWMsCi0gIDB4OWEsIDB4NWEsIDB4OGQsIDB4NDIsIDB4M2IsIDB4MWUsIDB4ZDAsIDB4YzEsIDB4NWIsIDB4YTIsIDB4OTQsIDB4NWMsCi0gIDB4YWMsIDB4NTIsIDB4MmYsIDB4MzEsIDB4ODUsIDB4NGQsIDB4MTMsIDB4NDUsIDB4MDcsIDB4MzksIDB4OTQsIDB4ODQsCi0gIDB4MjYsIDB4OWQsIDB4ZmMsIDB4NjcsIDB4MTgsIDB4MWMsIDB4ZGEsIDB4NTIsIDB4NmIsIDB4ODksIDB4NWYsIDB4YTEsCi0gIDB4NTIsIDB4MGEsIDB4MmYsIDB4OWMsIDB4YTksIDB4NTUsIDB4NWQsIDB4ZmYsIDB4MjksIDB4NjAsIDB4MmIsIDB4MjgsCi0gIDB4ZjUsIDB4MmIsIDB4NjAsIDB4NzIsIDB4OWMsIDB4MjIsIDB4YWUsIDB4NmEsIDB4ZTgsIDB4YTEsIDB4ODIsIDB4YmEsCi0gIDB4MmIsIDB4NmIsIDB4ZmQsIDB4YzAsIDB4M2MsIDB4Y2EsIDB4OTQsIDB4YTEsIDB4ZjUsIDB4NzMsIDB4ZWYsIDB4ZWMsCi0gIDB4OGYsIDB4NTcsIDB4MjgsIDB4YmQsIDB4YWIsIDB4MGIsIDB4M2YsIDB4MzMsIDB4MDMsIDB4ZjcsIDB4NzgsIDB4MGMsCi0gIDB4YTEsIDB4MTUsIDB4YzQsIDB4MzEsIDB4NDYsIDB4ZDgsIDB4ODIsIDB4MmUsIDB4MWYsIDB4MGQsIDB4M2IsIDB4MWIsCi0gIDB4MmMsIDB4ZTMsIDB4NTEsIDB4ZjMsIDB4ZjUsIDB4ZGQsIDB4NzYsIDB4YzUsIDB4YTMsIDB4YWQsIDB4NjgsIDB4ZjksCi0gIDB4ODYsIDB4ZTgsIDB4MGEsIDB4YTQsIDB4MGIsIDB4ZTUsIDB4YTgsIDB4MWIsIDB4MzUsIDB4YTIsIDB4N2IsIDB4YWQsCi0gIDB4YWQsIDB4ODYsIDB4OTUsIDB4OWEsIDB4NTYsIDB4ZTEsIDB4ZDgsIDB4MTIsIDB4ZjMsIDB4ZWQsIDB4NGMsIDB4ZjQsCi0gIDB4NjEsIDB4NjUsIDB4MzYsIDB4MTgsIDB4MTUsIDB4ZDMsIDB4YWMsIDB4YjQsIDB4NDEsIDB4YWUsIDB4NDksIDB4NGYsCi0gIDB4ODUsIDB4MzcsIDB4MjYsIDB4NDMsIDB4NGQsIDB4OWUsIDB4NjksIDB4ZjIsIDB4ZmUsIDB4ZjUsIDB4ZDMsIDB4YmYsCi0gIDB4YzEsIDB4ZTUsIDB4ODEsIDB4ZmYsIDB4ZjQsIDB4MDMsIDB4MTQsIDB4MjAsIDB4NTgsIDB4NjYsIDB4MWQsIDB4ODAsCi0gIDB4MDAsIDB4MDksIDB4NDgsIDB4NzAsIDB4NjAsIDB4NDEsIDB4YjAsIDB4YmQsIDB4NTUsIDB4MmEsIDB4YjEsIDB4MjksCi0gIDB4N2EsIDB4YmYsIDB4Y2IsIDB4YmMsIDB4YWIsIDB4YjQsIDB4MGUsIDB4OGEsIDB4NTAsIDB4OTQsIDB4MzgsIDB4MGMsCi0gIDB4ZjAsIDB4YjEsIDB4N2MsIDB4MzIsIDB4ZGEsIDB4MDAsIDB4MjksIDB4YWQsIDB4NWUsIDB4NjIsIDB4NGIsIDB4NzUsCi0gIDB4OGUsIDB4NWQsIDB4NTIsIDB4ZjMsIDB4YjcsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MGYsIDB4NGEsIDB4YTgsIDB4NWMsCi0gIDB4YWEsIDB4MWEsIDB4YWMsIDB4MWIsIDB4ODUsIDB4MjcsIDB4NTksIDB4M2IsIDB4OGEsIDB4YWEsIDB4MDAsIDB4MzAsCi0gIDB4MjEsIDB4MzIsIDB4YWUsIDB4NTEsIDB4NGEsIDB4MDYsIDB4NGIsIDB4YTgsIDB4ZDAsIDB4ZjQsIDB4N2QsIDB4Y2YsCi0gIDB4YjksIDB4NjksIDB4ODcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4ZmYsIDB4MjUsCi0gIDB4NzMsIDB4ODMsIDB4MjEsIDB4NDgsIDB4ODgsIDB4NDYsIDB4MTksIDB4ODUsIDB4MDQsIDB4ZTksIDB4NjcsIDB4NGQsCi0gIDB4MGIsIDB4NWEsIDB4ZWEsIDB4NGMsIDB4ODAsIDB4MDUsIDB4NTksIDB4NDMsIDB4NGIsIDB4NjAsIDB4ZTAsIDB4ZjYsCi0gIDB4NGUsIDB4YjgsIDB4YWUsIDB4ODksIDB4ZjgsIDB4NGUsIDB4MjUsIDB4NTEsIDB4MTQsIDB4ZWMsIDB4NDYsIDB4OWYsCi0gIDB4YjgsIDB4NzcsIDB4YWQsIDB4OTQsIDB4NDksIDB4MDMsIDB4YjAsIDB4N2UsIDB4ZDEsIDB4ZDcsIDB4NWQsIDB4NDcsCi0gIDB4MjgsIDB4ODYsIDB4OTMsIDB4ZWYsIDB4ZDcsIDB4MGQsIDB4YjcsIDB4YTEsIDB4NzQsIDB4NmMsIDB4MTMsIDB4Y2UsCi0gIDB4MjQsIDB4MjcsIDB4ZjYsIDB4ZWMsIDB4NDUsIDB4MGUsIDB4YjAsIDB4NjIsIDB4NTEsIDB4OGYsIDB4YzEsIDB4NTAsCi0gIDB4YWIsIDB4ZGMsIDB4OTIsIDB4MDYsIDB4NDYsIDB4YzUsIDB4ZTEsIDB4ZjQsIDB4YWQsIDB4MzksIDB4NmQsIDB4ZTgsCi0gIDB4ZDUsIDB4MjgsIDB4MDUsIDB4ZjMsIDB4NDksIDB4YzEsIDB4NjMsIDB4MGEsIDB4ZmUsIDB4MjMsIDB4NzgsIDB4MjYsCi0gIDB4NWIsIDB4NmYsIDB4YTUsIDB4YTgsIDB4OTIsIDB4ZWMsIDB4NzQsIDB4ZTAsIDB4NDEsIDB4ZjYsIDB4YjUsIDB4MDksCi0gIDB4MjMsIDB4M2MsIDB4ZGQsIDB4MTcsIDB4OTksIDB4YTMsIDB4YWQsIDB4ZDMsIDB4NzUsIDB4MzgsIDB4NWIsIDB4ZTUsCi0gIDB4NzksIDB4ZGEsIDB4MGUsIDB4Y2IsIDB4MWEsIDB4Y2YsIDB4ZWIsIDB4OWYsIDB4MjQsIDB4NDUsIDB4YTUsIDB4YzUsCi0gIDB4NDUsIDB4ZTksIDB4MzksIDB4NjQsIDB4NWMsIDB4ZTUsIDB4MGQsIDB4ZTQsIDB4ODgsIDB4M2YsIDB4ZTUsIDB4MDAsCi0gIDB4MmMsIDB4ZmIsIDB4NDMsIDB4MTUsIDB4YTgsIDB4MDEsIDB4OGIsIDB4ZTUsIDB4NGEsIDB4ZTMsIDB4NzYsIDB4ZGYsCi0gIDB4MWYsIDB4ZTQsIDB4ZWEsIDB4ZGYsIDB4ODEsIDB4MDYsIDB4NjcsIDB4NjUsIDB4ODUsIDB4NGUsIDB4OWYsIDB4ZjAsCi0gIDB4ZWEsIDB4MzYsIDB4NGEsIDB4MDUsIDB4OTYsIDB4NzIsIDB4ZjMsIDB4NDksIDB4MmUsIDB4ZWQsIDB4M2YsIDB4MzYsCi0gIDB4ZDAsIDB4ZmUsIDB4ZjUsIDB4NjIsIDB4YjQsIDB4ZWYsIDB4NzQsIDB4N2YsIDB4YjcsIDB4NGEsIDB4OTIsIDB4MzUsCi0gIDB4NDcsIDB4ZmIsIDB4NGUsIDB4NDMsIDB4OTEsIDB4ZWMsIDB4YTgsIDB4ZjgsIDB4ZGMsIDB4YjcsIDB4ZDksIDB4NmQsCi0gIDB4M2EsIDB4MzcsIDB4MjcsIDB4N2YsIDB4NzgsIDB4MzksIDB4NjAsIDB4OWEsIDB4MjgsIDB4OTYsIDB4MjMsIDB4ZDgsCi0gIDB4YjIsIDB4OTYsIDB4MGEsIDB4ODAsIDB4MjgsIDB4NTIsIDB4NzAsIDB4M2UsIDB4NjYsIDB4MmQsIDB4ZDQsIDB4NjQsCi0gIDB4YTIsIDB4YmUsIDB4YjYsIDB4YTgsIDB4NWEsIDB4ZGQsIDB4MzgsIDB4NTUsIDB4OWIsIDB4ZWYsIDB4NDksIDB4MjcsCi0gIDB4ZWQsIDB4Y2QsIDB4YzksIDB4NTIsIDB4ODIsIDB4OGQsIDB4ODcsIDB4MTMsIDB4NzUsIDB4ZDUsIDB4NGQsIDB4MTcsCi0gIDB4NTEsIDB4MjYsIDB4NTMsIDB4ZTUsIDB4M2IsIDB4ZDEsIDB4MmYsIDB4ZDIsIDB4YmYsIDB4ZmQsIDB4YmYsIDB4ZGQsCi0gIDB4M2MsIDB4ZDAsIDB4N2QsIDB4ZmUsIDB4OGEsIDB4MTAsIDB4OGEsIDB4MWQsIDB4ODAsIDB4MDksIDB4NDEsIDB4MzEsCi0gIDB4NzgsIDB4ODksIDB4OTcsIDB4NjEsIDB4ODAsIDB4MDIsIDB4MzQsIDB4ZGIsIDB4YjMsIDB4NDMsIDB4MmEsIDB4MDksCi0gIDB4NTgsIDB4OGMsIDB4YzksIDB4MTUsIDB4YWQsIDB4MTYsIDB4MzEsIDB4MGYsIDB4NDEsIDB4NjgsIDB4MmEsIDB4MDIsCi0gIDB4YmEsIDB4NzgsIDB4NTUsIDB4YzIsIDB4NDksIDB4NTQsIDB4NDIsIDB4M2QsIDB4MmQsIDB4NzYsIDB4YzUsIDB4ZTYsCi0gIDB4MDgsIDB4MmMsIDB4YjIsIDB4NzEsIDB4NDMsIDB4YjEsIDB4ZmMsIDB4NzcsIDB4YWMsIDB4NmQsIDB4N2UsIDB4NGUsCi0gIDB4MTEsIDB4NTcsIDB4YzYsIDB4ZDQsIDB4ZGQsIDB4MjgsIDB4NTYsIDB4OTIsIDB4MDcsIDB4ZWMsIDB4ZWUsIDB4OGYsCi0gIDB4MGMsIDB4ZTUsIDB4MDIsIDB4MTEsIDB4OWQsIDB4Y2UsIDB4NjcsIDB4ZGQsIDB4Y2YsIDB4YWEsIDB4MDAsIDB4MWMsCi0gIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4MTksIDB4NmYsIDB4YTIsIDB4YzEsCi0gIDB4NTgsIDB4NjQsIDB4NDQsIDB4MzMsIDB4MGQsIDB4NDIsIDB4MDcsIDB4MWIsIDB4OTcsIDB4NjYsIDB4OTUsIDB4YzEsCi0gIDB4YWIsIDB4YTksIDB4MmEsIDB4MTQsIDB4MDAsIDB4OTUsIDB4MDMsIDB4M2YsIDB4ZDQsIDB4YzgsIDB4YjEsIDB4OWMsCi0gIDB4NGEsIDB4NWIsIDB4MzYsIDB4NjYsIDB4M2MsIDB4MjEsIDB4MDksIDB4ZTgsIDB4ZWQsIDB4OWUsIDB4YWMsIDB4ZDgsCi0gIDB4ZGEsIDB4OWIsIDB4NDUsIDB4ZDksIDB4N2UsIDB4MTYsIDB4Y2UsIDB4MGMsIDB4YjIsIDB4MTYsIDB4YzQsIDB4Y2EsCi0gIDB4MGIsIDB4MzAsIDB4MTksIDB4MTcsIDB4MzQsIDB4ZTUsIDB4ZWQsIDB4ZGYsIDB4N2MsIDB4NzYsIDB4NWYsIDB4MzQsCi0gIDB4NjYsIDB4YTgsIDB4OTQsIDB4MDEsIDB4NDIsIDB4ZTYsIDB4YTQsIDB4NmYsIDB4OWMsIDB4MmQsIDB4ZmMsIDB4OGYsCi0gIDB4ZTcsIDB4YTgsIDB4MTMsIDB4MmIsIDB4MjgsIDB4YzgsIDB4NzIsIDB4NjMsIDB4NjksIDB4YWIsIDB4YjksIDB4MGIsCi0gIDB4MjQsIDB4ZjYsIDB4N2QsIDB4NDMsIDB4MjEsIDB4ODQsIDB4YWUsIDB4NTQsIDB4MzUsIDB4NWMsIDB4ZmMsIDB4YzAsCi0gIDB4MWEsIDB4NzIsIDB4NTksIDB4NDgsIDB4OGMsIDB4ZDUsIDB4MzYsIDB4NTEsIDB4ZDAsIDB4OWQsIDB4NGMsIDB4NGYsCi0gIDB4NWEsIDB4ZGEsIDB4ZDUsIDB4NGIsIDB4NDUsIDB4NzUsIDB4MDEsIDB4MTEsIDB4MWEsIDB4NzgsIDB4ZWQsIDB4ZWQsCi0gIDB4M2IsIDB4YTUsIDB4YWIsIDB4ODEsIDB4NGIsIDB4NjIsIDB4ZmMsIDB4OGEsIDB4NWIsIDB4YWMsIDB4NDUsIDB4MGYsCi0gIDB4NDQsIDB4M2UsIDB4MzYsIDB4NGEsIDB4NGMsIDB4MDksIDB4MDgsIDB4Y2UsIDB4ZjcsIDB4ZWEsIDB4MWMsIDB4MmIsCi0gIDB4YjMsIDB4MjAsIDB4YTQsIDB4YzQsIDB4ZTUsIDB4YjUsIDB4NmQsIDB4OGIsIDB4MmEsIDB4YWMsIDB4YWMsIDB4MjUsCi0gIDB4NTMsIDB4M2IsIDB4MmMsIDB4OWEsIDB4ODgsIDB4Y2QsIDB4YzAsIDB4OGYsIDB4ZTMsIDB4NTMsIDB4ZjUsIDB4OTMsCi0gIDB4MDYsIDB4M2YsIDB4NjQsIDB4ZmQsIDB4NjQsIDB4NDUsIDB4YWUsIDB4N2YsIDB4ZDksIDB4MzYsIDB4YTMsIDB4ZjEsCi0gIDB4MWQsIDB4Y2UsIDB4YTcsIDB4M2IsIDB4YTEsIDB4NjUsIDB4ODMsIDB4ZjEsIDB4YzIsIDB4NDAsIDB4ZDAsIDB4YTcsCi0gIDB4MTAsIDB4ZTMsIDB4NmEsIDB4ODAsIDB4NDQsIDB4NzUsIDB4NDYsIDB4Y2EsIDB4MGYsIDB4M2UsIDB4NGEsIDB4NWIsCi0gIDB4MzIsIDB4YTYsIDB4NjIsIDB4MTAsIDB4NjUsIDB4NjAsIDB4NDcsIDB4MWMsIDB4OTQsIDB4Y2MsIDB4YTksIDB4NDMsCi0gIDB4OWIsIDB4YmUsIDB4YjEsIDB4YzYsIDB4NTUsIDB4MDksIDB4MzAsIDB4ZmMsIDB4M2UsIDB4MmMsIDB4ZGQsIDB4OTQsCi0gIDB4NWYsIDB4ZDUsIDB4NjYsIDB4MzgsIDB4NDIsIDB4ZDUsIDB4NDMsIDB4Y2UsIDB4MDIsIDB4ZjcsIDB4YjgsIDB4OTUsCi0gIDB4Y2UsIDB4ZjQsIDB4YzEsIDB4MGMsIDB4OGYsIDB4NmIsIDB4NWUsIDB4ODUsIDB4M2QsIDB4YjYsIDB4YzgsIDB4YjMsCi0gIDB4ZDIsIDB4YWQsIDB4NTcsIDB4ODQsIDB4YjksIDB4NzQsIDB4ZjUsIDB4ZjMsIDB4ZmIsIDB4MzgsIDB4ZWYsIDB4N2UsCi0gIDB4MDAsIDB4MTAsIDB4MWYsIDB4YzEsIDB4NGEsIDB4MDksIDB4NDcsIDB4YjAsIDB4MDAsIDB4OTQsIDB4MmEsIDB4ZTgsCi0gIDB4MjUsIDB4MWQsIDB4MTgsIDB4MDEsIDB4YjAsIDB4MDIsIDB4MzIsIDB4ZWEsIDB4OWUsIDB4NzcsIDB4ZTEsIDB4YWYsCi0gIDB4MjksIDB4M2MsIDB4NDIsIDB4OTQsIDB4YjQsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4NTIsIDB4ZTQsIDB4YjEsIDB4MmYsCi0gIDB4MTYsIDB4N2IsIDB4OTIsIDB4NjYsIDB4MjcsIDB4MjgsIDB4MmIsIDB4MTMsIDB4ODIsIDB4YjUsIDB4MjAsIDB4NTAsCi0gIDB4Y2QsIDB4YjksIDB4OTcsIDB4YWYsIDB4ZGMsIDB4MGIsIDB4NjMsIDB4YzQsIDB4Y2YsIDB4N2IsIDB4NDQsIDB4N2QsCi0gIDB4NzUsIDB4MzcsIDB4N2YsIDB4NzIsIDB4ZTYsIDB4ZWUsIDB4MjUsIDB4ZDgsIDB4YzUsIDB4MWIsIDB4ZDYsIDB4YmUsCi0gIDB4NTEsIDB4MGUsIDB4Y2UsIDB4YmIsIDB4OWUsIDB4OWQsIDB4NGQsIDB4NzMsIDB4OTgsIDB4OTgsIDB4ODAsIDB4MGUsCi0gIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MTUsIDB4NmYsIDB4YTIsIDB4NDEsCi0gIDB4YzgsIDB4YzgsIDB4MTEsIDB4MjMsIDB4MDUsIDB4MDQsIDB4YTIsIDB4MDAsIDB4MzgsIDB4M2EsIDB4ZGUsIDB4OTYsCi0gIDB4YmIsIDB4YTIsIDB4ZWEsIDB4ODAsIDB4MTUsIDB4NzgsIDB4OTgsIDB4MjQsIDB4ZjQsIDB4ZTQsIDB4ZWEsIDB4OTMsCi0gIDB4ZjQsIDB4ZGIsIDB4MWEsIDB4MTEsIDB4MTAsIDB4OWYsIDB4MmEsIDB4ODYsIDB4ODIsIDB4ODEsIDB4YmMsIDB4YmMsCi0gIDB4OTMsIDB4ZjgsIDB4OGUsIDB4Y2IsIDB4MTAsIDB4OWQsIDB4YTMsIDB4OTAsIDB4YzcsIDB4NDQsIDB4MWIsIDB4YmIsCi0gIDB4NzksIDB4OGIsIDB4MzgsIDB4OTMsIDB4MTgsIDB4N2IsIDB4MDIsIDB4ZDAsIDB4MGYsIDB4NTAsIDB4NGYsIDB4NTEsCi0gIDB4YzUsIDB4Y2IsIDB4YTksIDB4ZTIsIDB4ZmQsIDB4OTcsIDB4OWEsIDB4NjMsIDB4YWEsIDB4NDUsIDB4NTIsIDB4ZjMsCi0gIDB4YTYsIDB4ZTAsIDB4ZDcsIDB4YWYsIDB4MGUsIDB4OTYsIDB4MDYsIDB4ZWQsIDB4NGYsIDB4ZTksIDB4MWYsIDB4NDcsCi0gIDB4ODYsIDB4MTgsIDB4MjksIDB4Y2YsIDB4YWUsIDB4ZTMsIDB4YjksIDB4Y2QsIDB4MTcsIDB4YzcsIDB4YzEsIDB4NDYsCi0gIDB4NDcsIDB4NzIsIDB4MTUsIDB4NGUsIDB4ZGQsIDB4MjYsIDB4NzEsIDB4MTgsIDB4NDksIDB4MzIsIDB4YWMsIDB4YTUsCi0gIDB4ZTYsIDB4NDgsIDB4NjgsIDB4ZjgsIDB4OGMsIDB4YzUsIDB4YmIsIDB4ODUsIDB4OGEsIDB4ZjksIDB4N2IsIDB4MmUsCi0gIDB4MGIsIDB4Y2EsIDB4ZWQsIDB4NjIsIDB4NWEsIDB4ZTIsIDB4NzIsIDB4YTYsIDB4NTYsIDB4NWQsIDB4ZGQsIDB4NGMsCi0gIDB4ZGUsIDB4YmYsIDB4MWUsIDB4NWQsIDB4ODQsIDB4ZjQsIDB4YjMsIDB4MjcsIDB4MWMsIDB4YTIsIDB4MDUsIDB4MDMsCi0gIDB4OTQsIDB4MDUsIDB4MTYsIDB4ZDMsIDB4OGIsIDB4NGMsIDB4NjgsIDB4ODMsIDB4YjksIDB4MmEsIDB4MzksIDB4ZWIsCi0gIDB4ODQsIDB4YzgsIDB4Y2IsIDB4ODQsIDB4YmUsIDB4NGMsIDB4ZTYsIDB4NTksIDB4MDUsIDB4ZWQsIDB4YmIsIDB4YjMsCi0gIDB4NTksIDB4NWUsIDB4N2UsIDB4ZTcsIDB4ZGQsIDB4ZjksIDB4ZDAsIDB4ZGUsIDB4MzIsIDB4NTUsIDB4NDYsIDB4NDgsCi0gIDB4YzEsIDB4NGQsIDB4NDMsIDB4ZjIsIDB4ZTMsIDB4ZTgsIDB4NjUsIDB4OTEsIDB4YjcsIDB4NGYsIDB4NGQsIDB4MjcsCi0gIDB4M2EsIDB4NjMsIDB4ZDMsIDB4YzMsIDB4ZDMsIDB4MGUsIDB4YTgsIDB4YzIsIDB4ZWEsIDB4NjYsIDB4YTYsIDB4NmMsCi0gIDB4OWUsIDB4NWYsIDB4NmUsIDB4YzMsIDB4ODIsIDB4ODcsIDB4MjMsIDB4MjEsIDB4NjQsIDB4MzQsIDB4MTQsIDB4OTQsCi0gIDB4ZjUsIDB4YmEsIDB4YzksIDB4NjcsIDB4NGMsIDB4MzYsIDB4OWMsIDB4ZTQsIDB4NmIsIDB4YWYsIDB4NmUsIDB4ZTksCi0gIDB4NzQsIDB4ZjUsIDB4MjIsIDB4NzksIDB4YzUsIDB4ZmIsIDB4NDAsIDB4OTEsIDB4Y2EsIDB4ZmQsIDB4NTgsIDB4OWYsCi0gIDB4OGYsIDB4NDUsIDB4ZmEsIDB4NjAsIDB4ZDIsIDB4N2IsIDB4YWIsIDB4MWIsIDB4ZWQsIDB4ODAsIDB4MDgsIDB4MGYsCi0gIDB4ZDAsIDB4MDgsIDB4NTIsIDB4ODEsIDB4NjEsIDB4OTgsIDB4NzYsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4YzAsCi0gIDB4MjIsIDB4OTAsIDB4ZWMsIDB4MjgsIDB4MjMsIDB4OWEsIDB4NDEsIDB4NzksIDB4YzAsIDB4NDUsIDB4M2IsIDB4Y2MsCi0gIDB4MjEsIDB4MzUsIDB4OTksIDB4MGIsIDB4OWMsIDB4NTIsIDB4MGEsIDB4ZDIsIDB4MzYsIDB4ZjcsIDB4ZWQsIDB4Y2IsCi0gIDB4MWIsIDB4ODIsIDB4MTAsIDB4NGMsIDB4OTIsIDB4OTUsIDB4N2IsIDB4MjYsIDB4NzgsIDB4NDQsIDB4Y2UsIDB4Y2YsCi0gIDB4YjQsIDB4MTYsIDB4NjgsIDB4NmMsIDB4YWYsIDB4OTQsIDB4NDUsIDB4NjgsIDB4MTUsIDB4YTIsIDB4ZTYsIDB4YTIsCi0gIDB4Y2IsIDB4ZDgsIDB4MWUsIDB4NjQsIDB4YWYsIDB4NDIsIDB4NTQsIDB4OTMsIDB4ZTUsIDB4NTQsIDB4OWQsIDB4YzIsCi0gIDB4MDAsIDB4NzUsIDB4OWUsIDB4ZWEsIDB4OTIsIDB4MGYsIDB4YmEsIDB4NzcsIDB4ZGUsIDB4YzcsIDB4ZjQsIDB4ZTgsCi0gIDB4ODcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4MTcsIDB4NmYsIDB4YTQsCi0gIDB4YjAsIDB4OTAsIDB4ZTQsIDB4NDQsIDB4MTMsIDB4MDgsIDB4NDIsIDB4MDEsIDB4NjksIDB4N2MsIDB4MGQsIDB4MzMsCi0gIDB4NTcsIDB4NTEsIDB4MWMsIDB4ZTgsIDB4MDAsIDB4ODcsIDB4MjIsIDB4ZDUsIDB4MGQsIDB4YTYsIDB4ZjIsIDB4MDksCi0gIDB4NjUsIDB4NGYsIDB4MTgsIDB4OTgsIDB4MjAsIDB4MTIsIDB4OGYsIDB4MDIsIDB4YTIsIDB4OTMsIDB4NTksIDB4OTQsCi0gIDB4ODIsIDB4NDUsIDB4OTAsIDB4NWQsIDB4YzYsIDB4ZmMsIDB4OWQsIDB4ZTUsIDB4YjUsIDB4MDAsIDB4MjYsIDB4MjksCi0gIDB4NTAsIDB4MzUsIDB4NGUsIDB4MTcsIDB4ZDgsIDB4MGYsIDB4MWUsIDB4YWYsIDB4OWIsIDB4OWIsIDB4YmYsIDB4Y2YsCi0gIDB4OTIsIDB4YjYsIDB4NjYsIDB4OGUsIDB4ZGQsIDB4MzIsIDB4MzUsIDB4YzksIDB4OTgsIDB4MmUsIDB4M2EsIDB4YjYsCi0gIDB4YWEsIDB4OGQsIDB4MjQsIDB4MWQsIDB4ZDEsIDB4MmUsIDB4OTYsIDB4MjIsIDB4YjUsIDB4YzYsIDB4NjQsIDB4NzAsCi0gIDB4ZjksIDB4MzcsIDB4OWYsIDB4OGQsIDB4ZTQsIDB4MGYsIDB4YjgsIDB4YTYsIDB4YWYsIDB4ZjUsIDB4ODksIDB4MWUsCi0gIDB4MmUsIDB4M2EsIDB4YmUsIDB4NTMsIDB4NTYsIDB4MDEsIDB4ZDQsIDB4ODAsIDB4MTYsIDB4MDksIDB4NTAsIDB4Y2EsCi0gIDB4ZTksIDB4MDgsIDB4M2UsIDB4MDQsIDB4YzIsIDB4ODYsIDB4ZDQsIDB4ODAsIDB4NjksIDB4ZTYsIDB4ODgsIDB4ZGQsCi0gIDB4ZTAsIDB4N2IsIDB4YmMsIDB4NjAsIDB4MmMsIDB4ZTAsIDB4OGIsIDB4MzksIDB4N2IsIDB4ZDAsIDB4ZjEsIDB4ZjQsCi0gIDB4MjcsIDB4MTksIDB4MGMsIDB4YmQsIDB4MTgsIDB4OWQsIDB4MzgsIDB4MjEsIDB4ZGEsIDB4ZmQsIDB4ZjQsIDB4ZTIsCi0gIDB4ZWQsIDB4MGEsIDB4NzQsIDB4M2EsIDB4OGMsIDB4M2QsIDB4OTksIDB4ZTIsIDB4NWUsIDB4NzIsIDB4ZTAsIDB4MDIsCi0gIDB4YzYsIDB4NTMsIDB4NDksIDB4NTYsIDB4NjksIDB4YWYsIDB4MmYsIDB4MzQsIDB4YjMsIDB4NTUsIDB4OTUsIDB4ODcsCi0gIDB4NTYsIDB4MTAsIDB4ZTUsIDB4NTAsIDB4MmYsIDB4MmEsIDB4NGEsIDB4NzgsIDB4NzQsIDB4MzgsIDB4NWQsIDB4ZGIsCi0gIDB4NDcsIDB4NTgsIDB4YWMsIDB4YWUsIDB4NzksIDB4NTYsIDB4MWMsIDB4YzIsIDB4NmMsIDB4NmMsIDB4YTcsIDB4NGEsCi0gIDB4ZTQsIDB4NTMsIDB4ZTgsIDB4N2QsIDB4MzQsIDB4NTUsIDB4OWEsIDB4NjAsIDB4ODIsIDB4ZmUsIDB4NGMsIDB4NGYsCi0gIDB4NDQsIDB4MzksIDB4OGMsIDB4YzAsIDB4MWQsIDB4NmIsIDB4YzYsIDB4NTcsIDB4Y2MsIDB4NjMsIDB4MTcsIDB4MGQsCi0gIDB4MTksIDB4ZGEsIDB4NjcsIDB4YWQsIDB4MDYsIDB4N2UsIDB4NTMsIDB4ZTgsIDB4NTAsIDB4OGIsIDB4ZDEsIDB4ZWQsCi0gIDB4ZjQsIDB4NDAsIDB4MDcsIDB4YTYsIDB4ZDksIDB4MzAsIDB4MWIsIDB4ZWEsIDB4ZDksIDB4MjgsIDB4ZGMsIDB4M2MsCi0gIDB4MmEsIDB4OWUsIDB4ZDQsIDB4MTQsIDB4NTMsIDB4YzIsIDB4OGIsIDB4ZWMsIDB4MWIsIDB4YWUsIDB4YmIsIDB4NWYsCi0gIDB4NmYsIDB4OTYsIDB4MTAsIDB4N2YsIDB4ZmUsIDB4MGEsIDB4OTgsIDB4NjYsIDB4MWQsIDB4ODAsIDB4MDUsIDB4NDAsCi0gIDB4MmEsIDB4MmEsIDB4NGMsIDB4ZWEsIDB4YjAsIDB4MDYsIDB4YTksIDB4YzgsIDB4ZmIsIDB4YWIsIDB4ZmQsIDB4MzQsCi0gIDB4ZTUsIDB4ZDAsIDB4OTEsIDB4YjIsIDB4NGEsIDB4YWIsIDB4ZDgsIDB4NWEsIDB4MDgsIDB4YTcsIDB4NzIsIDB4ZjEsCi0gIDB4MjAsIDB4MDIsIDB4YzUsIDB4NWQsIDB4MDUsIDB4ZTAsIDB4YWUsIDB4ZDgsIDB4NWEsIDB4MjMsIDB4NDEsIDB4NjEsCi0gIDB4NjQsIDB4YjYsIDB4Y2EsIDB4NzgsIDB4ZmYsIDB4YTYsIDB4N2EsIDB4ZWQsIDB4YTAsIDB4YjYsIDB4NGQsIDB4NWEsCi0gIDB4NzcsIDB4ODUsIDB4ZDksIDB4NzcsIDB4ZTQsIDB4YjksIDB4ZTMsIDB4NjksIDB4MGMsIDB4NWIsIDB4NDQsIDB4ZDQsCi0gIDB4NGUsIDB4MDQsIDB4OTUsIDB4NWMsIDB4MzIsIDB4OWQsIDB4MGYsIDB4NzgsIDB4ZTQsIDB4MTksIDB4MDgsIDB4ZWIsCi0gIDB4YTYsIDB4YjUsIDB4MjEsIDB4ZjYsIDB4ZGQsIDB4MTIsIDB4MTgsIDB4NDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4ZmYsIDB4MWQsIDB4NmYsIDB4YTQsIDB4YjEsIDB4MTAsIDB4YTIsIDB4MzQsCi0gIDB4MTMsIDB4MGMsIDB4YzIsIDB4MDYsIDB4OTIsIDB4M2EsIDB4MGUsIDB4MjIsIDB4NTksIDB4NzQsIDB4MjgsIDB4MjgsCi0gIDB4YjQsIDB4MzYsIDB4MmEsIDB4MDgsIDB4NjQsIDB4NjAsIDB4ODIsIDB4MzksIDB4NzUsIDB4NjUsIDB4NzMsIDB4ZmMsCi0gIDB4MjcsIDB4MmMsIDB4NTYsIDB4ZTEsIDB4ZmUsIDB4ZGQsIDB4NTUsIDB4MGUsIDB4ZTYsIDB4N2UsIDB4NmIsIDB4NDcsCi0gIDB4ODQsIDB4NzYsIDB4NmQsIDB4NjAsIDB4MzksIDB4YjQsIDB4OTgsIDB4MDcsIDB4Y2UsIDB4MTcsIDB4MDUsIDB4YzksCi0gIDB4MTksIDB4ZTgsIDB4YWYsIDB4YzUsIDB4NmUsIDB4OWQsIDB4ODEsIDB4ZWMsIDB4M2MsIDB4YWQsIDB4OTYsIDB4NjQsCi0gIDB4N2MsIDB4ZTUsIDB4YzEsIDB4OWUsIDB4NzUsIDB4OGMsIDB4ZDksIDB4Y2MsIDB4ZDYsIDB4YTksIDB4MWYsIDB4MTksCi0gIDB4NjgsIDB4NGMsIDB4ZmIsIDB4NjMsIDB4YTUsIDB4ZDcsIDB4MzMsIDB4OGQsIDB4MTUsIDB4N2IsIDB4OTgsIDB4ZDAsCi0gIDB4YTQsIDB4YTgsIDB4NzMsIDB4NjcsIDB4ZjYsIDB4M2YsIDB4MjIsIDB4YTksIDB4MzUsIDB4MjMsIDB4MzcsIDB4ZjcsCi0gIDB4NmEsIDB4NmYsIDB4YjQsIDB4ZWQsIDB4ZDQsIDB4MjgsIDB4N2MsIDB4MTksIDB4MWQsIDB4MzMsIDB4ZjYsIDB4MTEsCi0gIDB4ZTYsIDB4MGQsIDB4OGEsIDB4ZGQsIDB4ZGQsIDB4YWIsIDB4OWMsIDB4M2EsIDB4YzksIDB4ZGEsIDB4OTQsIDB4OTUsCi0gIDB4NmQsIDB4NTMsIDB4ZjUsIDB4ZmIsIDB4NWEsIDB4NzMsIDB4OWQsIDB4NDgsIDB4MzYsIDB4NWEsIDB4MmMsIDB4ZjYsCi0gIDB4ZmEsIDB4MGEsIDB4ZWUsIDB4MzksIDB4OWYsIDB4MTQsIDB4OWQsIDB4ZWYsIDB4ZDMsIDB4ODAsIDB4NGYsIDB4MjQsCi0gIDB4MzksIDB4ZTMsIDB4M2MsIDB4MmEsIDB4ZDUsIDB4NzMsIDB4OTUsIDB4NjAsIDB4MDgsIDB4OTgsIDB4YWEsIDB4ZGQsCi0gIDB4NzgsIDB4OGIsIDB4M2QsIDB4MDYsIDB4YWYsIDB4YWUsIDB4NjUsIDB4YjYsIDB4YTUsIDB4ZjUsIDB4Y2UsIDB4MTIsCi0gIDB4OGIsIDB4MDcsIDB4YWQsIDB4NGYsIDB4MDgsIDB4MTMsIDB4NzQsIDB4OTcsIDB4NzEsIDB4MjYsIDB4ZjIsIDB4NTUsCi0gIDB4N2EsIDB4YWIsIDB4YWIsIDB4ODksIDB4NzUsIDB4MTgsIDB4MDAsIDB4NTEsIDB4ZTYsIDB4NzIsIDB4NjUsIDB4NzcsCi0gIDB4MTIsIDB4YmUsIDB4YjgsIDB4ZDksIDB4ZGMsIDB4NjYsIDB4NjAsIDB4ZTEsIDB4YTYsIDB4ZjIsIDB4M2MsIDB4ZWQsCi0gIDB4YjksIDB4MGMsIDB4NzAsIDB4MGYsIDB4OGYsIDB4ZmIsIDB4MWMsIDB4NDgsIDB4NDAsIDB4MjUsIDB4MGUsIDB4MzgsCi0gIDB4ZmQsIDB4YmYsIDB4Y2QsIDB4NGIsIDB4NDEsIDB4OWQsIDB4MzgsIDB4OTYsIDB4ODcsIDB4ZWMsIDB4ZjksIDB4NjAsCi0gIDB4ZTcsIDB4MzQsIDB4ZjQsIDB4NmYsIDB4MjAsIDB4MzUsIDB4NmIsIDB4MTksIDB4OWQsIDB4ODMsIDB4MGIsIDB4ODYsCi0gIDB4ZmEsIDB4MmUsIDB4MmYsIDB4NmEsIDB4Y2YsIDB4NGQsIDB4MWEsIDB4N2EsIDB4YjUsIDB4ZGIsIDB4YjMsIDB4OGIsCi0gIDB4NWQsIDB4ZDksIDB4YTcsIDB4ZmUsIDB4YTMsIDB4YjEsIDB4ZjksIDB4NGYsIDB4NTcsIDB4MDcsIDB4ZGYsIDB4ZTgsCi0gIDB4YTUsIDB4ODYsIDB4NjEsIDB4ZDgsIDB4MDAsIDB4MTUsIDB4MDIsIDB4YTUsIDB4MTIsIDB4MmMsIDB4YzEsIDB4MmEsCi0gIDB4YzAsIDB4ZTEsIDB4NWEsIDB4YTEsIDB4ZjksIDB4MWMsIDB4YmEsIDB4Y2UsIDB4OTcsIDB4ODcsIDB4MDAsIDB4OWQsCi0gIDB4NjUsIDB4M2IsIDB4MGQsIDB4Y2EsIDB4ZTEsIDB4MDUsIDB4MTMsIDB4YTAsIDB4MzMsIDB4MzEsIDB4OGIsIDB4NzMsCi0gIDB4MzAsIDB4NTksIDB4MWQsIDB4M2IsIDB4YTEsIDB4ZWIsIDB4ZjUsIDB4NTMsIDB4OWYsIDB4MzYsIDB4M2YsIDB4YWQsCi0gIDB4YTYsIDB4YWMsIDB4NzUsIDB4YjQsIDB4YWMsIDB4Y2IsIDB4M2UsIDB4NzksIDB4MzAsIDB4ZTAsIDB4MTgsIDB4YzQsCi0gIDB4YzksIDB4NjgsIDB4ZGIsIDB4N2MsIDB4YzgsIDB4MTUsIDB4MGYsIDB4MzksIDB4OWUsIDB4NDYsIDB4M2IsIDB4OTEsCi0gIDB4MmYsIDB4YWMsIDB4Y2UsIDB4Y2IsIDB4ZmEsIDB4NjgsIDB4YzUsIDB4YmIsIDB4OWYsIDB4ODYsIDB4ZmMsIDB4ZTcsCi0gIDB4MjAsIDB4MzgsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MTcsIDB4NzAsCi0gIDB4YTQsIDB4YTMsIDB4MTgsIDB4ODYsIDB4MTAsIDB4MGIsIDB4MzgsIDB4NjgsIDB4ZDUsIDB4M2EsIDB4NGEsIDB4NTUsCi0gIDB4NTgsIDB4MDIsIDB4OTYsIDB4NjAsIDB4MjQsIDB4MTAsIDB4MTIsIDB4OGMsIDB4YjIsIDB4NGEsIDB4MjksIDB4MmMsCi0gIDB4MWIsIDB4YzgsIDB4MjEsIDB4MzcsIDB4N2MsIDB4YmIsIDB4NDIsIDB4OGUsIDB4MDQsIDB4M2YsIDB4ZDMsIDB4N2UsCi0gIDB4OTMsIDB4OTgsIDB4NmIsIDB4NDAsIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4ZDQsIDB4M2IsIDB4OWUsIDB4OGIsIDB4MmQsCi0gIDB4ZDYsIDB4NzksIDB4NzAsIDB4YmQsIDB4YzUsIDB4ZTIsIDB4N2IsIDB4NjcsIDB4YmQsIDB4OWIsIDB4YjYsIDB4ZmMsCi0gIDB4MzUsIDB4OTcsIDB4NDksIDB4NDYsIDB4MWMsIDB4ZDUsIDB4YzcsIDB4ZDAsIDB4YWQsIDB4OTksIDB4MzksIDB4NzIsCi0gIDB4NDMsIDB4MmEsIDB4MjQsIDB4NTEsIDB4MmIsIDB4ZWQsIDB4ZGQsIDB4NmUsIDB4MzUsIDB4ZTEsIDB4YzUsIDB4N2QsCi0gIDB4YmIsIDB4YWIsIDB4NTYsIDB4YWIsIDB4YmIsIDB4NTcsIDB4OTMsIDB4OTcsIDB4NmQsIDB4MGUsIDB4YWYsIDB4OWIsCi0gIDB4YzksIDB4N2YsIDB4MmQsIDB4YTksIDB4OGUsIDB4OGMsIDB4NWMsIDB4M2UsIDB4YmUsIDB4ZTksIDB4NjIsIDB4Y2IsCi0gIDB4ODUsIDB4NmQsIDB4MjIsIDB4OTksIDB4MmIsIDB4M2MsIDB4ODksIDB4MzksIDB4OTQsIDB4MGQsIDB4NjIsIDB4NTQsCi0gIDB4MzQsIDB4NmEsIDB4NTgsIDB4ODYsIDB4YmIsIDB4NGYsIDB4N2QsIDB4ODcsIDB4N2MsIDB4NjMsIDB4NjUsIDB4NWYsCi0gIDB4OGMsIDB4OWMsIDB4OWYsIDB4ODcsIDB4M2EsIDB4NmMsIDB4MjgsIDB4MmQsIDB4Y2UsIDB4M2UsIDB4NTAsIDB4ZTcsCi0gIDB4MDQsIDB4ZTEsIDB4ZDQsIDB4Y2QsIDB4NDAsIDB4MTgsIDB4ODAsIDB4MGQsIDB4YTEsIDB4M2UsIDB4MGUsIDB4MTcsCi0gIDB4ZWQsIDB4NTUsIDB4MjMsIDB4ZTMsIDB4YTUsIDB4MzgsIDB4MGYsIDB4YWQsIDB4NjksIDB4NTcsIDB4YmUsIDB4ODMsCi0gIDB4NjgsIDB4NDAsIDB4OTYsIDB4Y2UsIDB4YjcsIDB4MDYsIDB4NjgsIDB4M2MsIDB4NzIsIDB4MWUsIDB4NTEsIDB4ZjMsCi0gIDB4OTEsIDB4NWEsIDB4ZDEsIDB4MzAsIDB4ZmEsIDB4ZTAsIDB4MmIsIDB4M2EsIDB4YzAsIDB4OGIsIDB4MGQsIDB4NzYsCi0gIDB4YTEsIDB4NjcsIDB4NTEsIDB4NTUsIDB4N2MsIDB4YmQsIDB4ZTIsIDB4NzgsIDB4OWMsIDB4OTAsIDB4NjUsIDB4MGIsCi0gIDB4N2EsIDB4YjUsIDB4MDIsIDB4MzAsIDB4NWUsIDB4ZGIsIDB4MzksIDB4OTUsIDB4ZWEsIDB4MzAsIDB4NzQsIDB4MjEsCi0gIDB4ZDksIDB4ZGUsIDB4YjAsIDB4MDMsIDB4MTMsIDB4ZDcsIDB4MTgsIDB4ZDEsIDB4MWMsIDB4YjksIDB4MGQsIDB4YTAsCi0gIDB4MDAsIDB4YWMsIDB4MDgsIDB4MTIsIDB4MjQsIDB4OTEsIDB4N2UsIDB4ODYsIDB4M2QsIDB4ZWQsIDB4MmMsIDB4NjEsCi0gIDB4M2EsIDB4NjIsIDB4MjAsIDB4MGYsIDB4MTIsIDB4OWIsIDB4ZTcsIDB4OTgsIDB4OWUsIDB4YzAsIDB4MzYsIDB4ZDcsCi0gIDB4NTMsIDB4N2YsIDB4OTMsIDB4NGMsIDB4NTcsIDB4ZGYsIDB4ZjUsIDB4OGIsIDB4YWMsIDB4OWIsIDB4MmEsIDB4YTgsCi0gIDB4NmEsIDB4MjYsIDB4OTIsIDB4M2MsIDB4MjUsIDB4ZmYsIDB4ZWQsIDB4M2IsIDB4NmYsIDB4ZDMsIDB4ZmYsIDB4ZWUsCi0gIDB4MDcsIDB4ZmYsIDB4ZDAsIDB4OTAsIDB4OGUsIDB4YzQsIDB4MTAsIDB4ZWMsIDB4MDAsIDB4MmEsIDB4NTIsIDB4MDksCi0gIDB4NDUsIDB4MzQsIDB4MDQsIDB4MTAsIDB4ZWMsIDB4MDEsIDB4NTUsIDB4Y2UsIDB4YTgsIDB4MjEsIDB4MzQsIDB4YTIsCi0gIDB4MDAsIDB4NzQsIDB4ODIsIDB4YzEsIDB4MGEsIDB4NDksIDB4YzgsIDB4NDQsIDB4MTYsIDB4N2MsIDB4MTIsIDB4ZTIsCi0gIDB4NDIsIDB4MTgsIDB4ZGMsIDB4NjksIDB4NzAsIDB4MDUsIDB4ODIsIDB4YWMsIDB4ZWEsIDB4M2EsIDB4OTMsIDB4ZDgsCi0gIDB4MWYsIDB4ZDMsIDB4ZDIsIDB4ZmUsIDB4YTksIDB4YTcsIDB4NmMsIDB4ZDIsIDB4MzMsIDB4ZjEsIDB4OGEsIDB4NjAsCi0gIDB4YjEsIDB4NjAsIDB4NjgsIDB4MDgsIDB4NGQsIDB4NTAsIDB4MzUsIDB4MDYsIDB4NzcsIDB4MGQsIDB4ZTMsIDB4OWMsCi0gIDB4YWQsIDB4MzQsIDB4NDUsIDB4YjMsIDB4MzMsIDB4MDUsIDB4MzQsIDB4MjYsIDB4MmEsIDB4ZWEsIDB4NTgsIDB4NGMsCi0gIDB4ZTUsIDB4NWQsIDB4MGEsIDB4NzcsIDB4MDUsIDB4ZWUsIDB4YjMsIDB4MjQsIDB4YmYsIDB4OGMsIDB4NjQsIDB4N2QsCi0gIDB4MDksIDB4MmEsIDB4NmEsIDB4YjMsIDB4Y2IsIDB4M2YsIDB4NWYsIDB4Y2IsIDB4ZGQsIDB4MDAsIDB4ZTAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZmYsIDB4MjEsIDB4NzMsIDB4ODIsIDB4YTIsIDB4YzQsCi0gIDB4MjgsIDB4MjYsIDB4MWEsIDB4ODQsIDB4MWMsIDB4MmMsIDB4YjcsIDB4MGEsIDB4NzEsIDB4NTIsIDB4ZWMsIDB4NTIsCi0gIDB4NDEsIDB4MTgsIDB4MTAsIDB4YzEsIDB4NWMsIDB4OGEsIDB4NjYsIDB4ODcsIDB4OTQsIDB4MzEsIDB4ZjgsIDB4NmQsCi0gIDB4YmMsIDB4MTgsIDB4ZGMsIDB4NGMsIDB4OTksIDB4YzcsIDB4ZGIsIDB4NWUsIDB4ZjMsIDB4NmYsIDB4ZTAsIDB4YTcsCi0gIDB4ZjIsIDB4NjksIDB4NjQsIDB4MTgsIDB4ZWYsIDB4MmIsIDB4MGIsIDB4NDMsIDB4N2UsIDB4MDgsIDB4OWEsIDB4MTksCi0gIDB4ZjksIDB4NGQsIDB4ZGQsIDB4Y2QsIDB4MTksIDB4MmUsIDB4ZTYsIDB4ODEsIDB4ZTIsIDB4ZmEsIDB4YWIsIDB4YjQsCi0gIDB4ZmMsIDB4MGIsIDB4YzgsIDB4YmEsIDB4ZTIsIDB4MGYsIDB4MTEsIDB4M2EsIDB4NWIsIDB4ZmIsIDB4Y2QsIDB4YTgsCi0gIDB4NTMsIDB4YjMsIDB4OTIsIDB4ZGMsIDB4NWMsIDB4NjgsIDB4ZDUsIDB4MTUsIDB4N2QsIDB4YzgsIDB4MWMsIDB4ODksCi0gIDB4NGUsIDB4ZDMsIDB4OTMsIDB4NzMsIDB4MDQsIDB4NDksIDB4MGIsIDB4OGUsIDB4OTAsIDB4ZDQsIDB4MDcsIDB4ZDIsCi0gIDB4YjksIDB4OGEsIDB4ZGEsIDB4NjAsIDB4MDQsIDB4MTYsIDB4MDYsIDB4ZWUsIDB4MDEsIDB4NTQsIDB4YmUsIDB4ZTYsCi0gIDB4OTUsIDB4YWIsIDB4NWQsIDB4MTgsIDB4MzQsIDB4MDQsIDB4OTksIDB4MWQsIDB4Y2MsIDB4Y2IsIDB4MTAsIDB4N2MsCi0gIDB4ZGMsIDB4NmQsIDB4OGYsIDB4ODMsIDB4Y2YsIDB4MGQsIDB4M2MsIDB4OGMsIDB4MDAsIDB4NDYsIDB4ZmEsIDB4ODEsCi0gIDB4MzUsIDB4NzUsIDB4YzMsIDB4ZjQsIDB4YzIsIDB4YTksIDB4MDYsIDB4NTMsIDB4ZDEsIDB4MTcsIDB4MTIsIDB4NDcsCi0gIDB4NWIsIDB4NTYsIDB4MGQsIDB4OTQsIDB4ZjMsIDB4N2UsIDB4MjUsIDB4NGUsIDB4NGYsIDB4ZjcsIDB4MzAsIDB4OWUsCi0gIDB4ZmYsIDB4OWUsIDB4MGUsIDB4ZjUsIDB4NWMsIDB4M2EsIDB4ODcsIDB4MjEsIDB4YmEsIDB4ZjYsIDB4YWEsIDB4NGIsCi0gIDB4M2EsIDB4YjgsIDB4MWUsIDB4YWYsIDB4MjYsIDB4YTAsIDB4MDMsIDB4NmIsIDB4N2UsIDB4ZTksIDB4NDQsIDB4ZmMsCi0gIDB4ZjAsIDB4MTYsIDB4NWQsIDB4NzgsIDB4ODMsIDB4NWIsIDB4N2QsIDB4MWIsIDB4OWQsIDB4ZjEsIDB4YjQsIDB4NzcsCi0gIDB4MDIsIDB4M2UsIDB4ZDAsIDB4MWEsIDB4YzQsIDB4MmIsIDB4OWEsIDB4OTAsIDB4ZTksIDB4ZGUsIDB4YTUsIDB4ZDAsCi0gIDB4ODgsIDB4ZDcsIDB4OWUsIDB4MmIsIDB4ZjIsIDB4OTYsIDB4ZDgsIDB4MmIsIDB4ZDUsIDB4OWEsIDB4MzEsIDB4YzMsCi0gIDB4ZjAsIDB4YjUsIDB4MTEsIDB4YTgsIDB4MTMsIDB4NGUsIDB4YWQsIDB4ODcsIDB4OTEsIDB4YjMsIDB4NjQsIDB4NmMsCi0gIDB4MGMsIDB4NmEsIDB4YTgsIDB4MGIsIDB4NTksIDB4NjAsIDB4ZDQsIDB4YzIsIDB4YWMsIDB4OGIsIDB4M2EsIDB4MjksCi0gIDB4NTgsIDB4MTgsIDB4ZGEsIDB4MDEsIDB4MjEsIDB4MjIsIDB4NTcsIDB4NWQsIDB4ZGIsIDB4NTEsIDB4YTAsIDB4NWUsCi0gIDB4NzMsIDB4YzcsIDB4MWMsIDB4MzksIDB4NzcsIDB4ZjYsIDB4MDAsIDB4MWYsIDB4N2YsIDB4ZTIsIDB4MTEsIDB4YTAsCi0gIDB4ZDgsIDB4NDYsIDB4MWQsIDB4ODAsIDB4MDQsIDB4YTIsIDB4YTIsIDB4YTIsIDB4YWUsIDB4YTUsIDB4NGEsIDB4NDksCi0gIDB4MTQsIDB4MmQsIDB4ODAsIDB4ODQsIDB4ZDUsIDB4NjQsIDB4OGYsIDB4MWIsIDB4YzgsIDB4NGIsIDB4ODUsIDB4ZDcsCi0gIDB4ZTEsIDB4MDYsIDB4ZWMsIDB4NmMsIDB4NTUsIDB4ZDgsIDB4OTAsIDB4MzEsIDB4MWMsIDB4ZWMsIDB4ZDQsIDB4NmYsCi0gIDB4OGUsIDB4ZTIsIDB4YzQsIDB4OWIsIDB4YWYsIDB4NDEsIDB4YTksIDB4Y2IsIDB4MmQsIDB4OTQsIDB4ZjksIDB4ZDQsCi0gIDB4YWEsIDB4MDYsIDB4ZGIsIDB4OTYsIDB4OWUsIDB4OGYsIDB4NDYsIDB4NTQsIDB4ZjIsIDB4ZWIsIDB4YWUsIDB4NjMsCi0gIDB4OWUsIDB4OWQsIDB4ZDIsIDB4NzYsIDB4NjEsIDB4MTQsIDB4MWIsIDB4ZTcsIDB4MjMsIDB4ZTMsIDB4Y2QsIDB4ZTQsCi0gIDB4NjIsIDB4ZjIsIDB4ZTEsIDB4YzAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4ZmYsCi0gIDB4MWYsIDB4NzMsIDB4ODMsIDB4MjMsIDB4NTgsIDB4NjYsIDB4MTAsIDB4NDcsIDB4MWQsIDB4ZDcsIDB4ZTAsIDB4ZWEsCi0gIDB4OTYsIDB4YWIsIDB4YjUsIDB4NWIsIDB4MmMsIDB4NGEsIDB4YzgsIDB4NGEsIDB4YmMsIDB4OTQsIDB4MzUsIDB4ZmUsCi0gIDB4NDEsIDB4MWMsIDB4OTgsIDB4NzksIDB4M2MsIDB4NTksIDB4MDksIDB4YTQsIDB4NGEsIDB4NGYsIDB4ZGEsIDB4ZDgsCi0gIDB4Y2IsIDB4YWQsIDB4ODcsIDB4ZjYsIDB4OWIsIDB4ZGIsIDB4YTcsIDB4ZWUsIDB4MTksIDB4MDcsIDB4OTgsIDB4M2UsCi0gIDB4YTEsIDB4OGUsIDB4ZTYsIDB4MWMsIDB4ZTIsIDB4ZTcsIDB4ZDcsIDB4ZDcsIDB4MGYsIDB4YTYsIDB4NzAsIDB4ZGMsCi0gIDB4NDcsIDB4YTgsIDB4ZWQsIDB4NjEsIDB4N2IsIDB4NmMsIDB4OGQsIDB4MTMsIDB4YTcsIDB4ZjYsIDB4MjYsIDB4MmYsCi0gIDB4ZjksIDB4Y2UsIDB4YTIsIDB4ZjEsIDB4YTksIDB4MzAsIDB4MzIsIDB4Y2MsIDB4NDksIDB4YTYsIDB4OGYsIDB4N2QsCi0gIDB4NzIsIDB4ZmIsIDB4ZmEsIDB4NmUsIDB4OGUsIDB4YmIsIDB4MGYsIDB4NTUsIDB4NTUsIDB4ZjIsIDB4MDQsIDB4NjIsCi0gIDB4YWIsIDB4YTEsIDB4ZTksIDB4ZTcsIDB4ZjIsIDB4ZDcsIDB4YTEsIDB4YTgsIDB4NDAsIDB4OWMsIDB4MjcsIDB4MjQsCi0gIDB4ZTUsIDB4NWMsIDB4ZDgsIDB4MTIsIDB4ZDcsIDB4YTAsIDB4NjcsIDB4OTEsIDB4YjksIDB4YjAsIDB4NDAsIDB4YmUsCi0gIDB4NGYsIDB4NDQsIDB4N2UsIDB4NDgsIDB4NDksIDB4ZWQsIDB4YmIsIDB4OWMsIDB4NzMsIDB4NGQsIDB4ZjEsIDB4NmQsCi0gIDB4NWEsIDB4ZDIsIDB4NTUsIDB4NjUsIDB4NmYsIDB4ZTksIDB4NTAsIDB4NDYsIDB4ZTIsIDB4NzQsIDB4NTcsIDB4YWMsCi0gIDB4OWQsIDB4MWUsIDB4MzIsIDB4NTcsIDB4ODcsIDB4MDksIDB4NjcsIDB4OGQsIDB4MzYsIDB4ZmEsIDB4OTMsIDB4MjksCi0gIDB4MzYsIDB4Y2YsIDB4MmIsIDB4ZWIsIDB4ZGIsIDB4OWYsIDB4YjMsIDB4YmUsIDB4ZTYsIDB4NzcsIDB4YzMsIDB4NzQsCi0gIDB4NTAsIDB4NDAsIDB4MzUsIDB4ZTIsIDB4YjIsIDB4OTQsIDB4ZjgsIDB4MjIsIDB4ZDQsIDB4NjksIDB4YWUsIDB4MzcsCi0gIDB4ZTQsIDB4MTcsIDB4NGYsIDB4NGEsIDB4NGUsIDB4MjUsIDB4ZGQsIDB4N2QsIDB4NzAsIDB4MTMsIDB4ZjgsIDB4YzEsCi0gIDB4YmYsIDB4MTAsIDB4ZjcsIDB4MWEsIDB4MmMsIDB4YzksIDB4YTMsIDB4NWUsIDB4ODMsIDB4MDEsIDB4NjcsIDB4MmYsCi0gIDB4ZGIsIDB4MmQsIDB4MjcsIDB4YjIsIDB4NzQsIDB4NzUsIDB4ZjIsIDB4NWMsIDB4MDAsIDB4OTEsIDB4ZjUsIDB4Y2MsCi0gIDB4NzEsIDB4ZDMsIDB4NDEsIDB4ZjMsIDB4ZTYsIDB4ZTMsIDB4YjMsIDB4YjEsIDB4NTEsIDB4ODQsIDB4ZTEsIDB4MzYsCi0gIDB4NTQsIDB4MGEsIDB4ZTgsIDB4ZGQsIDB4NzIsIDB4ZjQsIDB4NGQsIDB4NjgsIDB4ZDMsIDB4NTIsIDB4ZWIsIDB4OTQsCi0gIDB4YjAsIDB4NzQsIDB4MjMsIDB4YjQsIDB4MjgsIDB4NzgsIDB4OTEsIDB4YTIsIDB4NGMsIDB4NzEsIDB4YjMsIDB4MDksCi0gIDB4OTYsIDB4ODksIDB4ZjcsIDB4YTAsIDB4MTgsIDB4Y2EsIDB4MTIsIDB4MzUsIDB4ZjYsIDB4NTAsIDB4OTYsIDB4NjAsCi0gIDB4NzMsIDB4NTAsIDB4YjcsIDB4ZGMsIDB4ZjQsIDB4YmMsIDB4ZjIsIDB4ZDcsIDB4MzMsIDB4ZmQsIDB4YTgsIDB4ZTUsCi0gIDB4NGYsIDB4ZmYsIDB4MjcsIDB4MDcsIDB4NDIsIDB4ZjIsIDB4ZTAsIDB4ZjksIDB4ZmMsIDB4MTQsIDB4MjEsIDB4MTgsCi0gIDB4MmEsIDB4MWQsIDB4ODAsIDB4NTQsIDB4MGEsIDB4OTUsIDB4MDAsIDB4YmMsIDB4ODAsIDB4MDQsIDB4NDAsIDB4MTEsCi0gIDB4ZjEsIDB4MDAsIDB4MTUsIDB4MzIsIDB4NDUsIDB4NjIsIDB4NzAsIDB4YjUsIDB4MDgsIDB4ZWMsIDB4OTQsIDB4YWIsCi0gIDB4ZmIsIDB4NDIsIDB4OWQsIDB4ZTcsIDB4MTQsIDB4ZWUsIDB4YzEsIDB4MzQsIDB4ZjIsIDB4NWYsIDB4YzIsIDB4OWEsCi0gIDB4YmMsIDB4MmQsIDB4ZGUsIDB4MzgsIDB4YzcsIDB4YWMsIDB4NzIsIDB4OTcsIDB4YWUsIDB4NjcsIDB4ODUsIDB4YjUsCi0gIDB4ZTksIDB4MTUsIDB4YTEsIDB4MGYsIDB4YmEsIDB4YzcsIDB4YTIsIDB4NzEsIDB4ZmUsIDB4YTUsIDB4YWIsIDB4ZjksCi0gIDB4ZjgsIDB4MTUsIDB4MjksIDB4YmEsIDB4MGYsIDB4MWQsIDB4MWUsIDB4NDUsIDB4N2IsIDB4M2YsIDB4ODUsIDB4MTIsCi0gIDB4ZTMsIDB4NGEsIDB4NGIsIDB4MTAsIDB4YWIsIDB4OTQsIDB4ZDgsIDB4YzYsIDB4MmQsIDB4ZWYsIDB4ZTMsIDB4YWMsCi0gIDB4N2QsIDB4ZmQsIDB4NmUsIDB4MDAsIDB4MWMsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZmYsCi0gIDB4ZmYsIDB4MjEsIDB4NzMsIDB4YTMsIDB4MjMsIDB4OTgsIDB4NDYsIDB4MTAsIDB4MzQsIDB4ZDMsIDB4ODYsIDB4NmIsCi0gIDB4NGQsIDB4MWEsIDB4NTIsIDB4ZTYsIDB4NTQsIDB4MDgsIDB4YTQsIDB4MGMsIDB4MTMsIDB4ZTksIDB4NDgsIDB4MjQsCi0gIDB4ZjUsIDB4YTQsIDB4N2YsIDB4ZDIsIDB4ZTMsIDB4ZDIsIDB4ZmMsIDB4ODYsIDB4YjYsIDB4YjMsIDB4OTksIDB4ZmEsCi0gIDB4ZWMsIDB4NmQsIDB4MjUsIDB4YmMsIDB4MmUsIDB4NWMsIDB4NzEsIDB4ZjYsIDB4MmQsIDB4MWYsIDB4MTYsIDB4NGIsCi0gIDB4NDUsIDB4OWQsIDB4Y2YsIDB4YWUsIDB4YTYsIDB4NzMsIDB4NzksIDB4YzYsIDB4YjYsIDB4YzgsIDB4ZjAsIDB4MGIsCi0gIDB4MmIsIDB4YjAsIDB4MzksIDB4NWQsIDB4YjMsIDB4NGIsIDB4YjksIDB4NTUsIDB4MWMsIDB4OTgsIDB4Y2MsIDB4YzEsCi0gIDB4ZWEsIDB4MTIsIDB4YTMsIDB4YjUsIDB4MjIsIDB4ZGUsIDB4ZTYsIDB4ZDAsIDB4ZWUsIDB4MjYsIDB4YzQsIDB4ZTMsCi0gIDB4OWMsIDB4OWEsIDB4NWMsIDB4ZGEsIDB4ZjIsIDB4NmMsIDB4NTYsIDB4YzcsIDB4MzEsIDB4MWIsIDB4MGIsIDB4MmUsCi0gIDB4NzgsIDB4NjEsIDB4NTAsIDB4OTYsIDB4MzUsIDB4ZjMsIDB4ZjYsIDB4NzMsIDB4NzYsIDB4ZjAsIDB4NjYsIDB4MDQsCi0gIDB4Y2UsIDB4ZjIsIDB4NTEsIDB4NGQsIDB4OGMsIDB4NTAsIDB4NmEsIDB4YWEsIDB4YWUsIDB4MTQsIDB4YzgsIDB4Y2YsCi0gIDB4NTQsIDB4MzEsIDB4N2IsIDB4MDYsIDB4M2QsIDB4NmQsIDB4NjEsIDB4ZWMsIDB4N2YsIDB4MmEsIDB4N2QsIDB4NjcsCi0gIDB4MGQsIDB4OTUsIDB4NGUsIDB4MTksIDB4ODQsIDB4NTAsIDB4YjgsIDB4ZDIsIDB4YjUsIDB4OGYsIDB4ZjAsIDB4YjIsCi0gIDB4ZDksIDB4NGMsIDB4MjQsIDB4MjgsIDB4N2MsIDB4ZDAsIDB4MTAsIDB4YzMsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4ODUsCi0gIDB4MGEsIDB4NDksIDB4NTIsIDB4YWMsIDB4ZjcsIDB4M2EsIDB4MjMsIDB4ZTcsIDB4MjEsIDB4MTgsIDB4MmIsIDB4OTUsCi0gIDB4OTIsIDB4YmQsIDB4MDgsIDB4YTksIDB4ZDYsIDB4NDksIDB4N2QsIDB4NDMsIDB4ZjMsIDB4M2YsIDB4NGEsIDB4MjQsCi0gIDB4MDAsIDB4MTYsIDB4NTcsIDB4OGUsIDB4Y2YsIDB4YzgsIDB4MTQsIDB4NDUsIDB4MTUsIDB4YmEsIDB4MTcsIDB4NWYsCi0gIDB4NzgsIDB4ZDEsIDB4MWIsIDB4NjMsIDB4NDYsIDB4ZTUsIDB4ZDMsIDB4YzksIDB4NmEsIDB4NjAsIDB4OWQsIDB4YTMsCi0gIDB4YzIsIDB4ODcsIDB4ZWIsIDB4MmQsIDB4YTksIDB4YzcsIDB4OWQsIDB4ODMsIDB4ODYsIDB4ODYsIDB4YjUsIDB4YmUsCi0gIDB4NGMsIDB4MDgsIDB4ZDcsIDB4NzUsIDB4ZjQsIDB4M2MsIDB4MWUsIDB4MzUsIDB4ZmUsIDB4ZGMsIDB4NDcsIDB4NDQsCi0gIDB4NDQsIDB4NGMsIDB4MGUsIDB4NzIsIDB4OWQsIDB4YzYsIDB4ZTEsIDB4OGEsIDB4NWIsIDB4OGYsIDB4ZGUsIDB4MjgsCi0gIDB4NjksIDB4M2YsIDB4OTAsIDB4NzQsIDB4N2YsIDB4ODMsIDB4ZDIsIDB4MjgsIDB4MTIsIDB4NTIsIDB4MjEsIDB4OTUsCi0gIDB4ZWMsIDB4NzUsIDB4Y2QsIDB4ZGYsIDB4NWMsIDB4ZmMsIDB4MzAsIDB4YjEsIDB4MmIsIDB4ZGIsIDB4NDUsIDB4YzQsCi0gIDB4MjUsIDB4NjIsIDB4NzEsIDB4MWUsIDB4ODUsIDB4ZDIsIDB4YmYsIDB4NjMsIDB4OTYsIDB4MGYsIDB4YmYsIDB4OTEsCi0gIDB4NWEsIDB4MDksIDB4ODYsIDB4NjEsIDB4ZDgsIDB4MDAsIDB4MTQsIDB4MmQsIDB4NTIsIDB4ODAsIDB4NDAsIDB4NTUsCi0gIDB4YTYsIDB4YzMsIDB4ZjcsIDB4NTgsIDB4MGIsIDB4NmQsIDB4MjksIDB4N2EsIDB4OWEsIDB4YzEsIDB4YjksIDB4NTQsCi0gIDB4NTAsIDB4MDAsIDB4MTMsIDB4MGIsIDB4NmYsIDB4YmEsIDB4MTAsIDB4YjcsIDB4MmUsIDB4OTQsIDB4NWEsIDB4NzAsCi0gIDB4YmMsIDB4ZmMsIDB4YzMsIDB4ZjUsIDB4OWEsIDB4MzQsIDB4ODksIDB4MGQsIDB4Y2YsIDB4NGMsIDB4NzcsIDB4MTYsCi0gIDB4YWYsIDB4NzIsIDB4OTksIDB4ODgsIDB4NWYsIDB4MzcsIDB4OGIsIDB4OWEsIDB4NTQsIDB4MGIsIDB4YTgsIDB4OTgsCi0gIDB4ZTAsIDB4YTAsIDB4NWMsIDB4OTUsIDB4ZDQsIDB4Y2QsIDB4MTIsIDB4YTIsIDB4MzcsIDB4MDksIDB4MmIsIDB4NDEsCi0gIDB4NzYsIDB4YWQsIDB4MmMsIDB4YWUsIDB4MWMsIDB4OGIsIDB4MjgsIDB4Y2EsIDB4MmMsIDB4ZGQsIDB4NjcsIDB4MDksCi0gIDB4MmEsIDB4YmIsIDB4MDQsIDB4ZTAsIDB4YmQsIDB4ZjgsIDB4NzUsIDB4ZDksIDB4YzUsIDB4YjksIDB4ZDAsIDB4ZjQsCi0gIDB4NjEsIDB4YzAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZmYsIDB4MTksIDB4NmYsCi0gIDB4YTQsIDB4YjAsIDB4ZDEsIDB4MDIsIDB4MTQsIDB4MjMsIDB4MDQsIDB4YzIsIDB4MDIsIDB4NTMsIDB4Y2MsIDB4MGQsCi0gIDB4MjYsIDB4YTAsIDB4ODAsIDB4MGMsIDB4NDIsIDB4NGQsIDB4OGQsIDB4NzgsIDB4NDksIDB4NmIsIDB4OTQsIDB4MTIsCi0gIDB4NDIsIDB4ZDksIDB4MjUsIDB4MzksIDB4NzQsIDB4MWEsIDB4NDksIDB4M2MsIDB4MDQsIDB4NjMsIDB4ODQsIDB4OTgsCi0gIDB4ZGQsIDB4YzUsIDB4ZjksIDB4OGUsIDB4YzUsIDB4MjYsIDB4ODQsIDB4YTAsIDB4ODcsIDB4ZmEsIDB4MWQsIDB4MjcsCi0gIDB4YTQsIDB4YWUsIDB4M2YsIDB4ZDQsIDB4MWYsIDB4YzgsIDB4ZjksIDB4ZmIsIDB4ZWYsIDB4MzAsIDB4NWUsIDB4MGYsCi0gIDB4NTUsIDB4NzMsIDB4NGYsIDB4MzAsIDB4NjYsIDB4NDksIDB4MjcsIDB4NzQsIDB4NDMsIDB4OTksIDB4N2UsIDB4NmQsCi0gIDB4MzQsIDB4ZDMsIDB4NGYsIDB4NTAsIDB4ODYsIDB4YTQsIDB4MzMsIDB4MmUsIDB4MDIsIDB4YzUsIDB4YTQsIDB4OTgsCi0gIDB4ZmEsIDB4YmIsIDB4NWQsIDB4OGUsIDB4NGUsIDB4YzQsIDB4YzksIDB4M2YsIDB4NWEsIDB4YjksIDB4NDcsIDB4MTcsCi0gIDB4ZTcsIDB4NzUsIDB4NTYsIDB4YTYsIDB4YzAsIDB4NjQsIDB4YWUsIDB4M2QsIDB4NzIsIDB4ODksIDB4MTgsIDB4MGIsCi0gIDB4MzIsIDB4YTIsIDB4MDEsIDB4MzYsIDB4NjUsIDB4ZWUsIDB4ZTMsIDB4MzQsIDB4MTcsIDB4NDksIDB4YWEsIDB4YjcsCi0gIDB4ZjcsIDB4YzAsIDB4NWYsIDB4YTEsIDB4ODQsIDB4OGYsIDB4MzcsIDB4MWQsIDB4NzcsIDB4NTksIDB4NDgsIDB4YzYsCi0gIDB4OTYsIDB4YTMsIDB4MDgsIDB4OWMsIDB4ZGYsIDB4ZDMsIDB4YWYsIDB4ODUsIDB4NTcsIDB4MTQsIDB4YjAsIDB4OTQsCi0gIDB4MmUsIDB4ODIsIDB4Y2UsIDB4MGMsIDB4NmEsIDB4YTIsIDB4MjIsIDB4ZDQsIDB4NDcsIDB4MjcsIDB4M2EsIDB4NWIsCi0gIDB4MWEsIDB4ZTUsIDB4OTcsIDB4NjYsIDB4YTEsIDB4NWIsIDB4MDYsIDB4MDAsIDB4MjgsIDB4ZmQsIDB4YmIsIDB4OGUsCi0gIDB4NWMsIDB4ODAsIDB4MzAsIDB4NWEsIDB4N2IsIDB4YmQsIDB4ZmQsIDB4NDcsIDB4MmQsIDB4MDksIDB4OGEsIDB4YmYsCi0gIDB4NWQsIDB4ZDEsIDB4NzAsIDB4ZDcsIDB4NmQsIDB4NTMsIDB4NzMsIDB4MmMsIDB4MTUsIDB4Y2MsIDB4YjksIDB4NWEsCi0gIDB4NzMsIDB4YzEsIDB4ZjcsIDB4YmUsIDB4MmMsIDB4MTYsIDB4NWYsIDB4NDcsIDB4ZGMsIDB4YmYsIDB4YzIsIDB4ZGYsCi0gIDB4YTEsIDB4NzksIDB4NTksIDB4ZDMsIDB4M2IsIDB4MDksIDB4MDYsIDB4MjAsIDB4NDMsIDB4OGUsIDB4MTksIDB4YmQsCi0gIDB4YTAsIDB4OTcsIDB4YTEsIDB4MjMsIDB4MjksIDB4NTAsIDB4ZDcsIDB4YWQsIDB4OTYsIDB4MzEsIDB4NjQsIDB4Y2QsCi0gIDB4M2YsIDB4NjcsIDB4ZTksIDB4MTIsIDB4MDgsIDB4NjAsIDB4NTgsIDB4MDMsIDB4NGMsIDB4NmIsIDB4NzAsIDB4YzEsCi0gIDB4ZGUsIDB4YmUsIDB4MzcsIDB4YTQsIDB4MzIsIDB4NWUsIDB4Y2MsIDB4NGQsIDB4OWIsIDB4NTcsIDB4ZDUsIDB4MTMsCi0gIDB4ZWEsIDB4MzcsIDB4YjgsIDB4NzUsIDB4MTcsIDB4NTQsIDB4YjYsIDB4ZjgsIDB4NzUsIDB4M2YsIDB4ZmYsIDB4NTcsCi0gIDB4OWUsIDB4N2IsIDB4MjAsIDB4N2UsIDB4ZmYsIDB4ODgsIDB4NDQsIDB4NDMsIDB4NDAsIDB4YjAsIDB4ODQsIDB4M2IsCi0gIDB4MDAsIDB4MDAsIDB4OTQsIDB4NTIsIDB4MDIsIDB4NTQsIDB4YTQsIDB4MDgsIDB4YzAsIDB4MDAsIDB4YjIsIDB4YjQsCi0gIDB4NTAsIDB4ODMsIDB4YTcsIDB4YjgsIDB4YzYsIDB4ODgsIDB4MzMsIDB4NDYsIDB4ZWMsIDB4NDgsIDB4MmQsIDB4MmYsCi0gIDB4ZjIsIDB4YzEsIDB4MGYsIDB4ZDUsIDB4YzMsIDB4M2QsIDB4MTksIDB4YTksIDB4NzcsIDB4MzQsIDB4MGQsIDB4YzYsCi0gIDB4MjYsIDB4ODQsIDB4MjQsIDB4MzcsIDB4YzgsIDB4MGEsIDB4YzIsIDB4OTMsIDB4OWQsIDB4YTMsIDB4MmQsIDB4NmEsCi0gIDB4MTEsIDB4MzUsIDB4ODMsIDB4MTIsIDB4NDUsIDB4YWEsIDB4OTQsIDB4NjMsIDB4OTcsIDB4ZDMsIDB4MzcsIDB4NWMsCi0gIDB4MjEsIDB4YzAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MzEsIDB4NzIsCi0gIDB4ODQsIDB4MjMsIDB4MTgsIDB4NmEsIDB4MTYsIDB4YTIsIDB4ZWEsIDB4ZmEsIDB4M2QsIDB4OTEsIDB4OGUsIDB4OTUsCi0gIDB4NzIsIDB4NTQsIDB4ZDUsIDB4MDUsIDB4MjAsIDB4MDgsIDB4MTgsIDB4OWYsIDB4M2UsIDB4ZTgsIDB4YWQsIDB4MTcsCi0gIDB4ZWYsIDB4NmQsIDB4ZTAsIDB4N2MsIDB4YzQsIDB4MzcsIDB4MjUsIDB4NzMsIDB4Y2QsIDB4Y2QsIDB4OWIsIDB4MjMsCi0gIDB4MmIsIDB4ZGUsIDB4NzYsIDB4MjUsIDB4Y2QsIDB4MmQsIDB4MWEsIDB4NjIsIDB4ZWUsIDB4M2MsIDB4MmIsIDB4MWQsCi0gIDB4ZTUsIDB4YmUsIDB4MzUsIDB4ZDIsIDB4MzcsIDB4NDEsIDB4MmQsIDB4MzAsIDB4ZWUsIDB4MWUsIDB4YjYsIDB4YmQsCi0gIDB4NWYsIDB4OTQsIDB4OWQsIDB4ZjMsIDB4YjEsIDB4MzgsIDB4NjUsIDB4ZmUsIDB4NzMsIDB4Y2IsIDB4MWUsIDB4Y2IsCi0gIDB4N2EsIDB4YTYsIDB4NWIsIDB4NzIsIDB4YzksIDB4NjUsIDB4NjQsIDB4N2MsIDB4ZjEsIDB4YTQsIDB4ZjMsIDB4ZTYsCi0gIDB4MTUsIDB4NzEsIDB4MjgsIDB4ZDIsIDB4ZDEsIDB4ZWIsIDB4YzcsIDB4MDcsIDB4ZGMsIDB4YWMsIDB4NWQsIDB4Y2EsCi0gIDB4NzQsIDB4NmQsIDB4YTEsIDB4NzgsIDB4M2IsIDB4OTksIDB4ZDMsIDB4NzAsIDB4NTcsIDB4OGYsIDB4OGMsIDB4MjQsCi0gIDB4NmIsIDB4YzQsIDB4YzMsIDB4NDcsIDB4YjEsIDB4ZTIsIDB4YWYsIDB4OGQsIDB4MTYsIDB4YjYsIDB4NWUsIDB4NDYsCi0gIDB4ZWUsIDB4NWUsIDB4N2YsIDB4OTUsIDB4MzAsIDB4NzQsIDB4MmMsIDB4MzYsIDB4NGMsIDB4MWEsIDB4ZTEsIDB4MzcsCi0gIDB4ZGEsIDB4MDQsIDB4YmMsIDB4MmQsIDB4NDAsIDB4ZmEsIDB4Y2YsIDB4NDIsIDB4NjgsIDB4NTYsIDB4YjQsIDB4NWMsCi0gIDB4ODIsIDB4OTYsIDB4NjAsIDB4NGYsIDB4ZWYsIDB4N2QsIDB4ODMsIDB4MjgsIDB4Y2IsIDB4YjIsIDB4MDAsIDB4MmMsCi0gIDB4MGIsIDB4ZjMsIDB4ZTMsIDB4YzgsIDB4YjgsIDB4NWMsIDB4MzUsIDB4YmQsIDB4NzUsIDB4NmYsIDB4NmMsIDB4MDksCi0gIDB4MjMsIDB4NDUsIDB4ZWEsIDB4YTgsIDB4MDUsIDB4NGUsIDB4NDIsIDB4MGMsIDB4OTksIDB4MDAsIDB4NWYsIDB4MjEsCi0gIDB4MDgsIDB4YWYsIDB4OGIsIDB4OTcsIDB4MzEsIDB4ODQsIDB4MWIsIDB4YWYsIDB4ZWMsIDB4MzYsIDB4NzIsIDB4MWIsCi0gIDB4ZWYsIDB4ZjcsIDB4ODQsIDB4NGIsIDB4NDEsIDB4OTMsIDB4ODgsIDB4NjIsIDB4OGIsIDB4YzEsIDB4ZWYsIDB4YjEsCi0gIDB4OTYsIDB4ZGYsIDB4YzUsIDB4NzcsIDB4MzgsIDB4NmEsIDB4MGEsIDB4M2EsIDB4NzUsIDB4YmIsIDB4YjgsIDB4MWYsCi0gIDB4ODQsIDB4YjAsIDB4NjEsIDB4OWQsIDB4NjMsIDB4YjYsIDB4NDMsIDB4N2YsIDB4OWUsIDB4OGIsIDB4ZjUsIDB4ZGUsCi0gIDB4MTIsIDB4YjIsIDB4NDQsIDB4YTgsIDB4ODcsIDB4NzUsIDB4MjUsIDB4NzMsIDB4OGQsIDB4YWUsIDB4NzUsIDB4NGIsCi0gIDB4NzAsIDB4OTUsIDB4Y2IsIDB4MWEsIDB4NTYsIDB4YzUsIDB4NjYsIDB4MGEsIDB4YjQsIDB4ZDAsIDB4YmEsIDB4NTksCi0gIDB4ZTgsIDB4OWQsIDB4YWMsIDB4OGUsIDB4MzksIDB4NTksIDB4OWMsIDB4ZmQsIDB4NzYsIDB4OGEsIDB4ZDUsIDB4MzYsCi0gIDB4M2IsIDB4NTcsIDB4M2MsIDB4N2EsIDB4MzcsIDB4YzcsIDB4YmYsIDB4ZmQsIDB4MDAsIDB4MGYsIDB4OWYsIDB4ZjMsCi0gIDB4MjAsIDB4NTgsIDB4NmEsIDB4MWQsIDB4ODAsIDB4MGEsIDB4NDAsIDB4MDIsIDB4NjUsIDB4ZDAsIDB4OGEsIDB4OTUsCi0gIDB4MGEsIDB4MGEsIDB4MmYsIDB4ODUsIDB4YmQsIDB4NDgsIDB4NTgsIDB4MTUsIDB4MGEsIDB4Y2MsIDB4YzgsIDB4MjgsCi0gIDB4ODksIDB4YTcsIDB4MGUsIDB4MzAsIDB4ZDgsIDB4ZDMsIDB4NWEsIDB4NWQsIDB4NzcsIDB4NmQsIDB4MzUsIDB4ZDEsCi0gIDB4NDksIDB4MmQsIDB4NzYsIDB4MzUsIDB4NTUsIDB4YjQsIDB4MDYsIDB4YWEsIDB4NDYsIDB4MDQsIDB4OTgsIDB4OTYsCi0gIDB4MmIsIDB4NDksIDB4OTcsIDB4ZTUsIDB4YTQsIDB4NDcsIDB4ZGQsIDB4ZjIsIDB4ZTAsIDB4MDEsIDB4YzAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MWQsIDB4NzEsIDB4YTQsIDB4MzAsIDB4NTAsCi0gIDB4OGMsIDB4MTQsIDB4MzMsIDB4MTEsIDB4MDIsIDB4MDUsIDB4ZWIsIDB4NmUsIDB4OWEsIDB4YjEsIDB4MWQsIDB4MTUsCi0gIDB4YTMsIDB4MjYsIDB4NTgsIDB4MmEsIDB4Y2EsIDB4YmUsIDB4NDUsIDB4NjIsIDB4NjIsIDB4MTAsIDB4MjUsIDB4OTMsCi0gIDB4MzgsIDB4YmIsIDB4OGEsIDB4NTcsIDB4NmYsIDB4OWUsIDB4MTMsIDB4OTcsIDB4MzcsIDB4ZjEsIDB4NWQsIDB4ODUsCi0gIDB4OTAsIDB4OTksIDB4YWEsIDB4MzAsIDB4MjIsIDB4NzAsIDB4ODMsIDB4YWYsIDB4OTYsIDB4YjQsIDB4YzYsIDB4YTMsCi0gIDB4YzYsIDB4NTQsIDB4ODQsIDB4OWIsIDB4YWEsIDB4OGQsIDB4NDMsIDB4ZGUsIDB4ZGMsIDB4M2EsIDB4NGEsIDB4ZTQsCi0gIDB4YmUsIDB4YmQsIDB4OWMsIDB4N2EsIDB4Y2IsIDB4ZDgsIDB4M2MsIDB4ZTIsIDB4ZjAsIDB4OWIsIDB4MjEsIDB4ZmIsCi0gIDB4NDIsIDB4NDYsIDB4OTMsIDB4MGQsIDB4NDQsIDB4YmIsIDB4ODMsIDB4NTcsIDB4MDIsIDB4YzYsIDB4ZWUsIDB4YjksCi0gIDB4ZTUsIDB4YzUsIDB4OGEsIDB4ZDIsIDB4N2MsIDB4MzEsIDB4OGIsIDB4MDgsIDB4MzgsIDB4YjcsIDB4ZjksIDB4OGQsCi0gIDB4NDksIDB4MzcsIDB4NGYsIDB4YWUsIDB4YWIsIDB4OTQsIDB4NjIsIDB4YTgsIDB4YTAsIDB4MzIsIDB4ZWMsIDB4MTAsCi0gIDB4NmYsIDB4ZjksIDB4MmEsIDB4YzMsIDB4NDcsIDB4YzEsIDB4NzIsIDB4ZWUsIDB4MzksIDB4YTAsIDB4M2QsIDB4NTQsCi0gIDB4ZjIsIDB4NTcsIDB4MDAsIDB4MjQsIDB4MzAsIDB4NzksIDB4MjksIDB4NTcsIDB4MzYsIDB4MjUsIDB4ZDUsIDB4M2MsCi0gIDB4YzEsIDB4NDIsIDB4Y2QsIDB4NWEsIDB4MDQsIDB4OWQsIDB4NjYsIDB4Y2QsIDB4NjIsIDB4ZGEsIDB4MWQsIDB4MTksCi0gIDB4OTIsIDB4NjksIDB4NWQsIDB4NDAsIDB4YjYsIDB4NDAsIDB4OTAsIDB4NmQsIDB4NzcsIDB4OWIsIDB4NGUsIDB4YWIsCi0gIDB4MmMsIDB4NjYsIDB4MzgsIDB4ZmYsIDB4MDUsIDB4NDYsIDB4YWQsIDB4YmUsIDB4MWEsIDB4NDMsIDB4NmMsIDB4ZDcsCi0gIDB4ZjYsIDB4OGYsIDB4ZWIsIDB4OGYsIDB4YzcsIDB4NDcsIDB4NzQsIDB4MzEsIDB4MDEsIDB4ZDEsIDB4ZGEsIDB4NzYsCi0gIDB4YjQsIDB4N2QsIDB4MDYsIDB4NjksIDB4YjksIDB4ZTMsIDB4OWIsIDB4YTgsIDB4YjgsIDB4OTQsIDB4MzksIDB4NDAsCi0gIDB4M2YsIDB4NjUsIDB4NDksIDB4OGQsIDB4OGQsIDB4MzEsIDB4ZDYsIDB4ZDMsIDB4MzYsIDB4YzgsIDB4NWYsIDB4YzksCi0gIDB4YjYsIDB4Y2EsIDB4ODIsIDB4MzksIDB4NGYsIDB4NTksIDB4OWQsIDB4NTIsIDB4YjksIDB4OGYsIDB4Y2EsIDB4ZjcsCi0gIDB4NDUsIDB4ZGUsIDB4NmYsIDB4MDEsIDB4NTAsIDB4ZDUsIDB4MTUsIDB4NDEsIDB4MzMsIDB4YWUsIDB4NmUsIDB4MTgsCi0gIDB4MDEsIDB4NGEsIDB4NDgsIDB4MTcsIDB4NmYsIDB4ODgsIDB4MWEsIDB4YmUsIDB4YmYsIDB4NzgsIDB4ZGIsIDB4ZmMsCi0gIDB4MTYsIDB4MWMsIDB4ZjgsIDB4M2IsIDB4MzgsIDB4NjcsIDB4N2MsIDB4NDcsIDB4OTYsIDB4ODksIDB4NmUsIDB4ODUsCi0gIDB4MDksIDB4MmQsIDB4MTUsIDB4OTIsIDB4NjYsIDB4YzIsIDB4ZTgsIDB4N2IsIDB4NjIsIDB4MWQsIDB4Y2UsIDB4NjEsCi0gIDB4NjEsIDB4MzksIDB4ODAsIDB4YWYsIDB4YTQsIDB4YTcsIDB4MjksIDB4MGIsIDB4NTYsIDB4MmYsIDB4MTcsIDB4NjgsCi0gIDB4YzcsIDB4YzcsIDB4ZmEsIDB4ZjMsIDB4ZGQsIDB4ZGIsIDB4NmYsIDB4N2UsIDB4ZjksIDB4ZjEsIDB4MWYsIDB4YWQsCi0gIDB4N2QsIDB4ZDEsIDB4ZGQsIDB4ZGQsIDB4ZjMsIDB4ZjYsIDB4MjksIDB4NDEsIDB4MzAsIDB4ZDQsIDB4M2IsIDB4MDAsCi0gIDB4MGEsIDB4ODQsIDB4YzgsIDB4YTksIDB4NTEsIDB4NjAsIDB4MDgsIDB4NGEsIDB4MGEsIDB4N2QsIDB4YTMsIDB4ODUsCi0gIDB4MzIsIDB4NzMsIDB4ZmIsIDB4ZDIsIDB4MTUsIDB4YjUsIDB4OWQsIDB4NjIsIDB4MjUsIDB4NWMsIDB4MTMsIDB4YzgsCi0gIDB4ZmQsIDB4ZGEsIDB4YjgsIDB4MTAsIDB4OGUsIDB4NGMsIDB4ZDgsIDB4ZTgsIDB4YWQsIDB4YTEsIDB4M2EsIDB4YmMsCi0gIDB4MzcsIDB4NmUsIDB4YzksIDB4YzIsIDB4MDgsIDB4MTUsIDB4MjYsIDB4YzcsIDB4NzgsIDB4NGUsIDB4ZGUsIDB4OTMsCi0gIDB4ZDUsIDB4YTQsIDB4ODQsIDB4ODAsIDB4ZDAsIDB4YmEsIDB4MGMsIDB4ZGYsIDB4YTksIDB4ZGUsIDB4YjAsIDB4MTUsCi0gIDB4YjIsIDB4ZmQsIDB4YzYsIDB4MzQsIDB4ZDEsIDB4NDMsIDB4YzQsIDB4OTUsIDB4ODksIDB4ZDIsIDB4NDIsIDB4YjQsCi0gIDB4YWIsIDB4MjEsIDB4NTUsIDB4NzQsIDB4ZjUsIDB4ZTIsIDB4Y2UsIDB4NzMsIDB4NmIsIDB4OGMsIDB4YTYsIDB4MDAsCi0gIDB4MDEsIDB4OTgsIDB4ZDIsIDB4YzEsIDB4NzksIDB4ZTYsIDB4YTEsIDB4NGQsIDB4ZmUsIDB4ZmYsIDB4NjcsIDB4NDYsCi0gIDB4MzksIDB4NzAsIDB4ZWQsIDB4ODAsIDB4MGUsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsCi0gIDB4ZmYsIDB4MWQsIDB4NmMsIDB4YTYsIDB4MzAsIDB4ZDAsIDB4ZTQsIDB4MzQsIDB4MGIsIDB4MGMsIDB4YzIsIDB4MDEsCi0gIDB4YTUsIDB4ZGIsIDB4OGYsIDB4NTcsIDB4YWUsIDB4MWEsIDB4NDUsIDB4ZWUsIDB4ZjIsIDB4MTIsIDB4OTIsIDB4ODksCi0gIDB4MmEsIDB4NmMsIDB4NWEsIDB4NDYsIDB4MjQsIDB4ZDEsIDB4OTEsIDB4NGEsIDB4ZWMsIDB4NDIsIDB4NjUsIDB4NjUsCi0gIDB4NTAsIDB4YTgsIDB4OTksIDB4NDIsIDB4NGQsIDB4NTAsIDB4NzgsIDB4MWIsIDB4ZjcsIDB4YjUsIDB4M2UsIDB4YTMsCi0gIDB4YzUsIDB4N2EsIDB4YzIsIDB4YTMsIDB4MTcsIDB4NDQsIDB4NjQsIDB4MDAsIDB4YjksIDB4N2YsIDB4M2YsIDB4M2QsCi0gIDB4NDcsIDB4N2QsIDB4OTMsIDB4NTgsIDB4MGUsIDB4OTcsIDB4ZWEsIDB4MjgsIDB4ZGYsIDB4MTMsIDB4ZmYsIDB4YjUsCi0gIDB4OWYsIDB4ZDQsIDB4ZmUsIDB4N2UsIDB4OGIsIDB4Y2YsIDB4NzUsIDB4YWMsIDB4ZjUsIDB4YWMsIDB4OTcsIDB4YjAsCi0gIDB4NTQsIDB4MDksIDB4OWIsIDB4OTEsIDB4YjcsIDB4Y2YsIDB4NzQsIDB4ZGEsIDB4ZmUsIDB4MjMsIDB4MzcsIDB4ZDgsCi0gIDB4N2MsIDB4NmQsIDB4OWUsIDB4MWUsIDB4MDUsIDB4ZTYsIDB4MmYsIDB4MzgsIDB4ZDksIDB4NTksIDB4NDAsIDB4MjYsCi0gIDB4MjYsIDB4YjksIDB4MDMsIDB4ODEsIDB4YTcsIDB4ZDEsIDB4YzUsIDB4MjUsIDB4NWYsIDB4NGUsIDB4MmEsIDB4ZDAsCi0gIDB4MWQsIDB4ZDgsIDB4M2MsIDB4NzgsIDB4NWIsIDB4NzAsIDB4ZjgsIDB4ZjksIDB4ZTksIDB4ZTgsIDB4MmMsIDB4YWUsCi0gIDB4ZTUsIDB4NmUsIDB4NDksIDB4MTMsIDB4ZWQsIDB4ZmQsIDB4NTIsIDB4OWEsIDB4NDEsIDB4ZTAsIDB4ZDAsIDB4YjUsCi0gIDB4YjYsIDB4ZjIsIDB4MjUsIDB4ODIsIDB4MWMsIDB4ODIsIDB4ODMsIDB4MjUsIDB4OTgsIDB4MmEsIDB4ZTcsIDB4OGQsCi0gIDB4MDgsIDB4ZDAsIDB4MjQsIDB4OGMsIDB4MDQsIDB4YTUsIDB4NzQsIDB4NGEsIDB4ODQsIDB4NmIsIDB4ODIsIDB4MjcsCi0gIDB4ODQsIDB4ZWIsIDB4NDUsIDB4YjMsIDB4NzksIDB4NWMsIDB4N2UsIDB4NTgsIDB4NWMsIDB4NWUsIDB4MmYsIDB4MWMsCi0gIDB4NDUsIDB4ODAsIDB4MzUsIDB4N2UsIDB4MDQsIDB4MzEsIDB4ZWYsIDB4NjcsIDB4ODIsIDB4MzAsIDB4ZmMsIDB4YTUsCi0gIDB4YmMsIDB4ZWUsIDB4MmYsIDB4NDcsIDB4NjMsIDB4NDMsIDB4NmQsIDB4MzYsIDB4NGUsIDB4NTksIDB4YzAsIDB4MjEsCi0gIDB4ZTEsIDB4YmEsIDB4ODQsIDB4NzUsIDB4NmMsIDB4YTgsIDB4MjEsIDB4MjEsIDB4OTYsIDB4MjQsIDB4NzAsIDB4ZGUsCi0gIDB4NGYsIDB4YjgsIDB4MTAsIDB4ODQsIDB4MGMsIDB4MTcsIDB4ODcsIDB4MDksIDB4ODIsIDB4Y2UsIDB4OTksIDB4ZWUsCi0gIDB4ZWIsIDB4MjEsIDB4N2IsIDB4YTUsIDB4YWQsIDB4YTgsIDB4NjksIDB4OTYsIDB4ZjMsIDB4M2IsIDB4ZTcsIDB4NzksCi0gIDB4ODgsIDB4NzgsIDB4YjQsIDB4OGMsIDB4ZjMsIDB4NjMsIDB4MzQsIDB4ZTAsIDB4ZmIsIDB4MDMsIDB4NzMsIDB4MTgsCi0gIDB4YTEsIDB4NWMsIDB4ZDcsIDB4MTUsIDB4ZDIsIDB4ZjcsIDB4ODYsIDB4YmUsIDB4ZmUsIDB4ZGUsIDB4MTcsIDB4MTEsCi0gIDB4N2QsIDB4MWUsIDB4MWMsIDB4YmUsIDB4NzgsIDB4M2UsIDB4N2UsIDB4YzUsIDB4MjgsIDB4MzYsIDB4MTIsIDB4ODcsCi0gIDB4NjAsIDB4MDAsIDB4NTQsIDB4MTUsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MGQsIDB4OGIsIDB4ZDgsIDB4OTgsCi0gIDB4MGIsIDB4YTQsIDB4MjksIDB4NmEsIDB4MjIsIDB4YWEsIDB4ZTAsIDB4MDUsIDB4NmQsIDB4YWYsIDB4NzcsIDB4YmQsCi0gIDB4MTksIDB4ZjYsIDB4YmMsIDB4YTUsIDB4NWQsIDB4MmQsIDB4YjYsIDB4MGMsIDB4MzMsIDB4OWIsIDB4MTYsIDB4ZTcsCi0gIDB4MGEsIDB4ZjQsIDB4NWQsIDB4ZTcsIDB4YzIsIDB4NDUsIDB4MDQsIDB4Y2QsIDB4NTYsIDB4M2IsIDB4ZDcsIDB4MDMsCi0gIDB4NTksIDB4YzcsIDB4ZmQsIDB4OWEsIDB4NzQsIDB4M2YsIDB4N2QsIDB4NTcsIDB4ZjgsIDB4ODAsIDB4NmUsIDB4NzgsCi0gIDB4NGUsIDB4YzYsIDB4MzMsIDB4NmYsIDB4NWMsIDB4MjgsIDB4NWIsIDB4MjUsIDB4YjcsIDB4NGMsIDB4Y2QsIDB4MjAsCi0gIDB4Y2UsIDB4NjcsIDB4N2UsIDB4NTIsIDB4NTksIDB4MTQsIDB4ZDMsIDB4NmUsIDB4ZjgsIDB4NmQsIDB4YjksIDB4Y2YsCi0gIDB4N2YsIDB4YjcsIDB4YTcsIDB4ODAsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCi0gIDB4ZmYsIDB4MjEsIDB4NmYsIDB4YTMsIDB4YzAsIDB4ZDgsIDB4NjgsIDB4YTYsIDB4MWEsIDB4ODQsIDB4MTMsIDB4YzgsCi0gIDB4MjcsIDB4MTQsIDB4ZTEsIDB4NWEsIDB4OGEsIDB4ZDQsIDB4YTgsIDB4YzQsIDB4YzUsIDB4ODQsIDB4MzAsIDB4NmIsCi0gIDB4ZjIsIDB4NjEsIDB4OTUsIDB4ODMsIDB4YjYsIDB4ZGUsIDB4MjUsIDB4MGMsIDB4MGMsIDB4YTgsIDB4YWEsIDB4ODQsCi0gIDB4NGIsIDB4MWMsIDB4ZGYsIDB4Y2IsIDB4MzgsIDB4NTcsIDB4ZjcsIDB4MmMsIDB4MjIsIDB4MTEsIDB4ODcsIDB4ZjQsCi0gIDB4MDQsIDB4ZDQsIDB4YWUsIDB4ZTIsIDB4ZmIsIDB4MzYsIDB4MDAsIDB4ODksIDB4NjksIDB4MTcsIDB4ODUsIDB4MDgsCi0gIDB4MWUsIDB4NDksIDB4NDMsIDB4OTgsIDB4ZTcsIDB4YjksIDB4MWIsIDB4YTcsIDB4YWYsIDB4YjgsIDB4ZmEsIDB4NDQsCi0gIDB4NmIsIDB4YzIsIDB4MzUsIDB4ZmUsIDB4OGMsIDB4YjAsIDB4ZjgsIDB4NjUsIDB4MDAsIDB4YjgsIDB4NjYsIDB4NmYsCi0gIDB4ZDgsIDB4N2EsIDB4MDUsIDB4ZDMsIDB4YzYsIDB4NjMsIDB4ZGMsIDB4M2IsIDB4ODQsIDB4NzUsIDB4YWEsIDB4YTMsCi0gIDB4NWIsIDB4ZTgsIDB4NWEsIDB4ZTYsIDB4MzUsIDB4Y2YsIDB4ZjQsIDB4ZGUsIDB4ZDcsIDB4MWEsIDB4ODEsIDB4NmYsCi0gIDB4OTYsIDB4NGMsIDB4OWIsIDB4MTksIDB4NTIsIDB4YzUsIDB4M2EsIDB4OWIsIDB4MGMsIDB4ZjgsIDB4ZDEsIDB4YTIsCi0gIDB4YzcsIDB4MGMsIDB4MmMsIDB4OTUsIDB4ZGMsIDB4MjgsIDB4YWYsIDB4NjUsIDB4NjYsIDB4ZTgsIDB4MzQsIDB4MWUsCi0gIDB4MDIsIDB4OWYsIDB4NmEsIDB4MGEsIDB4NjAsIDB4NGUsIDB4OWUsIDB4MjYsIDB4YjMsIDB4MmIsIDB4NjcsIDB4NWMsCi0gIDB4MTksIDB4YjYsIDB4MDIsIDB4MDIsIDB4NGMsIDB4NjgsIDB4ZDMsIDB4MjQsIDB4ZjMsIDB4YzIsIDB4ODgsIDB4M2EsCi0gIDB4ODAsIDB4YmYsIDB4MGMsIDB4NjMsIDB4ODEsIDB4MDksIDB4NmYsIDB4YWEsIDB4YTIsIDB4M2EsIDB4YjQsIDB4NzQsCi0gIDB4ZWQsIDB4ODgsIDB4MGIsIDB4MDIsIDB4OWIsIDB4NzUsIDB4NWQsIDB4MmYsIDB4MzcsIDB4OGYsIDB4MzcsIDB4MDEsCi0gIDB4NzUsIDB4MmQsIDB4ZWIsIDB4NWEsIDB4ODYsIDB4YmIsIDB4YjgsIDB4ZmUsIDB4OWIsIDB4MTMsIDB4NjYsIDB4ZDIsCi0gIDB4NTIsIDB4MDQsIDB4MjYsIDB4NmMsIDB4OWQsIDB4MmIsIDB4MmYsIDB4YTksIDB4MDMsIDB4ZDEsIDB4YzcsIDB4MWIsCi0gIDB4MjMsIDB4NzgsIDB4MmIsIDB4ODgsIDB4NDksIDB4OTAsIDB4MDIsIDB4NDcsIDB4YmQsIDB4ZGIsIDB4Y2QsIDB4NWQsCi0gIDB4M2UsIDB4MjEsIDB4YzQsIDB4NDcsIDB4OTAsIDB4MWYsIDB4OTUsIDB4OTEsIDB4NTEsIDB4YTEsIDB4Y2QsIDB4ZjUsCi0gIDB4YzcsIDB4ODAsIDB4MDIsIDB4MDUsIDB4MTgsIDB4NmMsIDB4MTEsIDB4ZTcsIDB4NTgsIDB4YzQsIDB4MGQsIDB4MDcsCi0gIDB4ZWIsIDB4MGIsIDB4YWYsIDB4N2UsIDB4NmYsIDB4YzcsIDB4MDksIDB4OTUsIDB4NGEsIDB4ZjMsIDB4NmIsIDB4OGMsCi0gIDB4MDAsIDB4MDksIDB4M2IsIDB4YzYsIDB4NDYsIDB4NTAsIDB4OWQsIDB4YmQsIDB4NzEsIDB4ZDcsIDB4YmIsIDB4OGEsCi0gIDB4MDksIDB4NjMsIDB4NjcsIDB4NzcsIDB4NTAsIDB4ZTMsIDB4ZGYsIDB4ODUsIDB4MjUsIDB4MTIsIDB4NzQsIDB4NjMsCi0gIDB4MWMsIDB4ZmQsIDB4OWQsIDB4OTUsIDB4MDAsIDB4MGYsIDB4OWYsIDB4YzAsIDB4MjgsIDB4OTEsIDB4MDIsIDB4YzMsCi0gIDB4NTAsIDB4ZWMsIDB4YTksIDB4NTEsIDB4MjgsIDB4YTgsIDB4MDUsIDB4NDksIDB4NDksIDB4ODAsIDB4MjAsIDB4MzksCi0gIDB4NGMsIDB4ZGEsIDB4YzksIDB4YjUsIDB4NmEsIDB4OTQsIDB4N2YsIDB4M2EsIDB4NzIsIDB4YmIsIDB4OGQsIDB4NmIsCi0gIDB4Y2EsIDB4OGMsIDB4OTksIDB4YTcsIDB4ZTUsIDB4YzEsIDB4MzIsIDB4MDMsIDB4N2IsIDB4ZDYsIDB4OGMsIDB4M2MsCi0gIDB4Y2UsIDB4NGQsIDB4MjksIDB4ZWMsIDB4OWUsIDB4NjAsIDB4MTUsIDB4MTYsIDB4NjQsIDB4YmUsIDB4NDAsIDB4MDIsCi0gIDB4NjksIDB4NDUsIDB4ZTcsIDB4M2MsIDB4NmMsIDB4YmIsIDB4MmMsIDB4OTYsIDB4YzIsIDB4MTcsIDB4NjEsIDB4ZWEsCi0gIDB4YjUsIDB4MGYsIDB4ODQsIDB4OTEsIDB4NGQsIDB4YWQsIDB4MzcsIDB4ODcsIDB4NzMsIDB4OTYsIDB4ZjUsIDB4ZWMsCi0gIDB4OTAsIDB4MGUsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MWIsIDB4NmYsCi0gIDB4YTUsIDB4MzAsIDB4OTEsIDB4NmMsIDB4MzMsIDB4MDgsIDB4MDUsIDB4ZDksIDB4YzEsIDB4MWEsIDB4NmEsIDB4OTMsCi0gIDB4NTQsIDB4MDUsIDB4MTAsIDB4NDgsIDB4YzEsIDB4NTgsIDB4MWIsIDB4ZDcsIDB4YjIsIDB4MWQsIDB4MWMsIDB4N2EsCi0gIDB4ZGUsIDB4OTIsIDB4MjYsIDB4NDEsIDB4NzksIDB4MTUsIDB4MGYsIDB4NzQsIDB4ODAsIDB4OTAsIDB4NDksIDB4MjAsCi0gIDB4OTgsIDB4MmUsIDB4ZjUsIDB4ZDcsIDB4NDMsIDB4OTUsIDB4NGQsIDB4ZDQsIDB4N2YsIDB4ZTgsIDB4ZTMsIDB4ZGMsCi0gIDB4YTAsIDB4NGQsIDB4YTgsIDB4OTcsIDB4NTEsIDB4ZTcsIDB4N2YsIDB4YTQsIDB4ZmEsIDB4MGYsIDB4Y2YsIDB4YjgsCi0gIDB4ZjAsIDB4OTksIDB4MWYsIDB4OWMsIDB4YTksIDB4NWUsIDB4ZjMsIDB4ZWQsIDB4NWQsIDB4ZmMsIDB4ZTgsIDB4ZjksCi0gIDB4NWMsIDB4ZjUsIDB4YmYsIDB4MzEsIDB4MjksIDB4NTAsIDB4ZDEsIDB4NWMsIDB4MjcsIDB4NjEsIDB4ZmYsIDB4NzMsCi0gIDB4Y2YsIDB4ODIsIDB4ZGIsIDB4YjMsIDB4NmUsIDB4NmQsIDB4N2YsIDB4YjEsIDB4NmQsIDB4NGYsIDB4OGEsIDB4YjIsCi0gIDB4NTksIDB4MGQsIDB4NTMsIDB4ZTIsIDB4MzIsIDB4NGQsIDB4Y2QsIDB4OTgsIDB4YTMsIDB4YjgsIDB4ZDgsIDB4YjYsCi0gIDB4M2QsIDB4M2EsIDB4ZGIsIDB4MDgsIDB4MzAsIDB4YjIsIDB4NDAsIDB4YWEsIDB4MDQsIDB4ZmMsIDB4MzUsIDB4OWEsCi0gIDB4MTYsIDB4YTEsIDB4ODAsIDB4NDYsIDB4YTMsIDB4MWIsIDB4YjcsIDB4YWUsIDB4YTksIDB4ZDQsIDB4NWQsIDB4ZTYsCi0gIDB4ZDUsIDB4NTQsIDB4ZTksIDB4NjgsIDB4ZjUsIDB4ZTcsIDB4OTksIDB4NmEsIDB4ZDQsIDB4YmMsIDB4M2YsIDB4ZDEsCi0gIDB4YmMsIDB4NGMsIDB4NGQsIDB4M2UsIDB4ZjgsIDB4MDIsIDB4ZTUsIDB4OTcsIDB4MWYsIDB4ZjMsIDB4NWQsIDB4OTMsCi0gIDB4OTgsIDB4OWQsIDB4MzEsIDB4NmMsIDB4YTgsIDB4MzEsIDB4MmEsIDB4ZDcsIDB4NTAsIDB4ZDIsIDB4ZWIsIDB4MzgsCi0gIDB4NTQsIDB4NzUsIDB4NWUsIDB4ZjYsIDB4YzEsIDB4NzAsIDB4NTQsIDB4MjEsIDB4OTIsIDB4NTEsIDB4ZTUsIDB4NjYsCi0gIDB4YWMsIDB4NjMsIDB4M2UsIDB4OTAsIDB4YjQsIDB4ODYsIDB4NjUsIDB4ZWIsIDB4NDMsIDB4YzUsIDB4ZmYsIDB4N2EsCi0gIDB4MGMsIDB4MzcsIDB4MWMsIDB4ZjMsIDB4YjcsIDB4MjMsIDB4MmIsIDB4NTcsIDB4OWQsIDB4NWYsIDB4OGIsIDB4MTAsCi0gIDB4YTIsIDB4NDEsIDB4MjIsIDB4MDAsIDB4OTksIDB4MGMsIDB4NjIsIDB4MDYsIDB4M2UsIDB4NWIsIDB4ZTMsIDB4MzQsCi0gIDB4YTAsIDB4NWEsIDB4ZWMsIDB4MzgsIDB4MDQsIDB4NjEsIDB4MjYsIDB4N2QsIDB4OWQsIDB4ZmQsIDB4NjUsIDB4YmMsCi0gIDB4OWIsIDB4N2YsIDB4MWMsIDB4MGYsIDB4NGMsIDB4OWYsIDB4ZGYsIDB4NmEsIDB4YTAsIDB4NzUsIDB4MDYsIDB4NzcsCi0gIDB4MzMsIDB4YjcsIDB4NTYsIDB4NjQsIDB4ZGEsIDB4YWEsIDB4NWIsIDB4NjQsIDB4YWUsIDB4ZmUsIDB4ZjEsIDB4YWUsCi0gIDB4ZTcsIDB4NzcsIDB4YmIsIDB4MGQsIDB4ZTEsIDB4YTYsIDB4MjcsIDB4ZjIsIDB4M2MsIDB4YmUsIDB4MTMsIDB4ZWMsCi0gIDB4YTMsIDB4YTcsIDB4YTYsIDB4YjIsIDB4NTcsIDB4ZmUsIDB4YmEsIDB4ZjcsIDB4ZWEsIDB4ZWEsIDB4ZDksIDB4ZDUsCi0gIDB4NWQsIDB4ZDUsIDB4NzEsIDB4NWUsIDB4ZmQsIDB4NzksIDB4MGYsIDB4ZDMsIDB4N2MsIDB4OWYsIDB4ZGMsIDB4OWYsCi0gIDB4MDQsIDB4MWYsIDB4N2YsIDB4NjIsIDB4NzIsIDB4MWEsIDB4MDksIDB4ODQsIDB4YTEsIDB4ZTYsIDB4MGEsIDB4ODksCi0gIDB4NDIsIDB4YTAsIDB4MTUsIDB4MmEsIDB4MjAsIDB4MDgsIDB4MTAsIDB4MGYsIDB4MGMsIDB4NDAsIDB4MzcsIDB4MmUsCi0gIDB4MDAsIDB4ZWYsIDB4YTUsIDB4ZWEsIDB4YWMsIDB4YTcsIDB4MjIsIDB4YjUsIDB4MWEsIDB4NmIsIDB4YjYsIDB4NTAsCi0gIDB4OGUsIDB4ZWIsIDB4ZTAsIDB4ZDYsIDB4MmIsIDB4YTEsIDB4YTksIDB4ODIsIDB4M2IsIDB4ODQsIDB4YjUsIDB4YTQsCi0gIDB4YzIsIDB4NjAsIDB4NDcsIDB4ZjQsIDB4NzEsIDB4NzUsIDB4ZWUsIDB4OTAsIDB4N2UsIDB4ZmYsIDB4ZjAsIDB4MmUsCi0gIDB4OGMsIDB4ZjEsIDB4MjUsIDB4ZmUsIDB4MzAsIDB4OTEsIDB4YjYsIDB4OWMsIDB4YjMsIDB4NjYsIDB4YjgsIDB4MDMsCi0gIDB4YWEsIDB4YTQsIDB4OTMsIDB4MzcsIDB4NzcsIDB4MDIsIDB4ZGEsIDB4OGQsIDB4N2IsIDB4Y2UsIDB4YWIsIDB4M2IsCi0gIDB4NTcsIDB4ZGYsIDB4MjQsIDB4ZGUsIDB4MTQsIDB4YTgsIDB4MWUsIDB4Y2IsIDB4ZWEsIDB4OWQsIDB4ZjUsIDB4ZDMsCi0gIDB4OWUsIDB4YWYsIDB4OWYsIDB4YTcsIDB4YmIsIDB4ODAsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MjcsIDB4NmYsIDB4YTUsIDB4MzAsIDB4OTAsIDB4NmMsIDB4MTQsIDB4M2IsIDB4MGQsCi0gIDB4NDIsIDB4MDQsIDB4ZDUsIDB4YWMsIDB4ZjMsIDB4OTcsIDB4NWEsIDB4OWMsIDB4NWYsIDB4N2EsIDB4NmEsIDB4OTAsCi0gIDB4NTIsIDB4MjMsIDB4N2EsIDB4NjAsIDB4NGEsIDB4NDAsIDB4Y2EsIDB4YzYsIDB4YjksIDB4MzAsIDB4NTAsIDB4MTEsCi0gIDB4MmEsIDB4YmIsIDB4M2YsIDB4M2EsIDB4OTcsIDB4ZWMsIDB4ZGUsIDB4MjEsIDB4Y2QsIDB4MzUsIDB4NjcsIDB4ZTUsCi0gIDB4NjYsIDB4MGUsIDB4NmIsIDB4ZmEsIDB4N2MsIDB4ZjUsIDB4ZTAsIDB4YmEsIDB4MjIsIDB4NTQsIDB4MWUsIDB4ZWMsCi0gIDB4YWUsIDB4NDYsIDB4M2QsIDB4MzUsIDB4ZDYsIDB4NDksIDB4YjAsIDB4ODIsIDB4ZjQsIDB4YWMsIDB4M2EsIDB4OWIsCi0gIDB4YTcsIDB4MjMsIDB4ODksIDB4OGEsIDB4ZjksIDB4ZDEsIDB4NmQsIDB4YTksIDB4YjIsIDB4NTgsIDB4MmUsIDB4ODgsCi0gIDB4ZGEsIDB4MTEsIDB4YmIsIDB4M2IsIDB4ZTYsIDB4ZDcsIDB4M2QsIDB4NmUsIDB4YjgsIDB4MWYsIDB4YjUsIDB4YmUsCi0gIDB4YjUsIDB4ZDcsIDB4OWEsIDB4NjUsIDB4YjksIDB4MGUsIDB4ODcsIDB4NzYsIDB4ZmMsIDB4ZGEsIDB4ZjMsIDB4NjUsCi0gIDB4N2MsIDB4YWQsIDB4OWEsIDB4ZDEsIDB4YzMsIDB4YmMsIDB4NDMsIDB4M2MsIDB4NDcsIDB4NDksIDB4MGQsIDB4MjAsCi0gIDB4YjYsIDB4NDEsIDB4NzksIDB4MGUsIDB4ZjQsIDB4NzQsIDB4OTEsIDB4MmMsIDB4ZDUsIDB4MzIsIDB4OTksIDB4ZGIsCi0gIDB4NjYsIDB4OTUsIDB4MDMsIDB4NDcsIDB4NWEsIDB4ODIsIDB4YTUsIDB4ODMsIDB4MTQsIDB4NzQsIDB4NTcsIDB4MGIsCi0gIDB4M2UsIDB4NjgsIDB4NmIsIDB4NjUsIDB4NDEsIDB4ZGMsIDB4NDksIDB4YzUsIDB4N2UsIDB4OTQsIDB4MjEsIDB4NjMsCi0gIDB4ODUsIDB4NDIsIDB4NzIsIDB4OWMsIDB4OTUsIDB4MGMsIDB4YjYsIDB4ZDAsIDB4OTUsIDB4NDEsIDB4NTYsIDB4ZjEsCi0gIDB4ZDUsIDB4ZTksIDB4NzMsIDB4MWUsIDB4MjgsIDB4NzcsIDB4YTAsIDB4ZmUsIDB4ODEsIDB4MmIsIDB4ZTAsIDB4YmEsCi0gIDB4N2YsIDB4OGQsIDB4ODQsIDB4NzcsIDB4MTIsIDB4ZGEsIDB4NGQsIDB4MGUsIDB4YTgsIDB4MjcsIDB4YTUsIDB4YTksCi0gIDB4YTYsIDB4MDEsIDB4NWMsIDB4YTksIDB4M2QsIDB4YjMsIDB4MjUsIDB4NDcsIDB4MGEsIDB4MWIsIDB4ZWUsIDB4ZjEsCi0gIDB4NWEsIDB4Y2QsIDB4NGMsIDB4MjMsIDB4NWMsIDB4NDEsIDB4NDQsIDB4OTUsIDB4NjMsIDB4MDUsIDB4MzgsIDB4ZTcsCi0gIDB4NjcsIDB4Y2IsIDB4YjIsIDB4YzAsIDB4ZTYsIDB4YmIsIDB4YmMsIDB4YmUsIDB4ZmYsIDB4MTAsIDB4YjIsIDB4N2MsCi0gIDB4N2UsIDB4ZGIsIDB4ODUsIDB4MDAsIDB4MzYsIDB4YmQsIDB4YWYsIDB4NjcsIDB4YWQsIDB4ZmUsIDB4MjksIDB4ZmUsCi0gIDB4MjUsIDB4ZjYsIDB4OWQsIDB4NjMsIDB4NzcsIDB4NzksIDB4ZTUsIDB4N2YsIDB4YmEsIDB4N2QsIDB4NTUsIDB4ZjUsCi0gIDB4MGIsIDB4ZDQsIDB4NDMsIDB4ZWYsIDB4NTcsIDB4NDYsIDB4MjEsIDB4MGQsIDB4NzQsIDB4OWMsIDB4NjksIDB4ZDEsCi0gIDB4NWQsIDB4MzIsIDB4YWYsIDB4M2YsIDB4MjQsIDB4ZTUsIDB4MjUsIDB4MzcsIDB4MzEsIDB4ZTYsIDB4Y2MsIDB4YjEsCi0gIDB4NzQsIDB4ODIsIDB4ZDIsIDB4NjcsIDB4MzUsIDB4ZDQsIDB4YzEsIDB4OWIsIDB4NWMsIDB4NjgsIDB4YmEsIDB4ZGIsCi0gIDB4ZWYsIDB4OGIsIDB4NDUsIDB4ZDcsIDB4OGYsIDB4NDcsIDB4M2YsIDB4NmUsIDB4N2EsIDB4YTAsIDB4MDEsIDB4ZmIsCi0gIDB4ZjYsIDB4MmIsIDB4NjEsIDB4YTgsIDB4NzYsIDB4NTQsIDB4YTgsIDB4MTUsIDB4MmEsIDB4MjksIDB4MTMsIDB4MjUsCi0gIDB4MjUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4MDAsIDB4YWMsIDB4MTUsIDB4OTAsIDB4MDIsIDB4ODAsIDB4ODUsIDB4ODUsCi0gIDB4MDUsIDB4OWUsIDB4NzQsIDB4MGUsIDB4MDIsIDB4MDgsIDB4YTksIDB4MTgsIDB4YzUsIDB4NTQsIDB4ZDAsIDB4ODQsCi0gIDB4M2YsIDB4NWQsIDB4YjUsIDB4OTMsIDB4MWMsIDB4NTksIDB4ZDQsIDB4MGYsIDB4Y2UsIDB4M2MsIDB4ZGUsIDB4NDksCi0gIDB4NzgsIDB4NDEsIDB4YzksIDB4ZTQsIDB4NTksIDB4ZjMsIDB4YzAsIDB4MWEsIDB4MGQsIDB4MTIsIDB4ZGIsIDB4OGEsCi0gIDB4NGIsIDB4OTYsIDB4NzgsIDB4YjYsIDB4YjcsIDB4MTAsIDB4YjksIDB4MjksIDB4N2EsIDB4ZDQsIDB4MTEsIDB4OWEsCi0gIDB4YTEsIDB4OGEsIDB4NDksIDB4NmQsIDB4NDAsIDB4OWUsIDB4ZmIsIDB4NzEsIDB4ZWUsIDB4ZjgsIDB4NWYsIDB4MDgsCi0gIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MjMsIDB4NzEsCi0gIDB4YTEsIDB4YzEsIDB4NTIsIDB4MDIsIDB4MTAsIDB4MTIsIDB4ZTQsIDB4YjQsIDB4OWEsIDB4YjMsIDB4NDksIDB4NTcsCi0gIDB4MjksIDB4MzksIDB4ZTAsIDB4MzIsIDB4ZDQsIDB4OGUsIDB4NDcsIDB4OGMsIDB4ZTUsIDB4NzYsIDB4N2MsIDB4YWUsCi0gIDB4M2YsIDB4MmUsIDB4M2UsIDB4NDksIDB4MTYsIDB4MTIsIDB4ZGUsIDB4MjUsIDB4NjQsIDB4NGMsIDB4NDMsIDB4YTcsCi0gIDB4ZmUsIDB4YmYsIDB4NTEsIDB4MWIsIDB4YTQsIDB4MzYsIDB4Y2QsIDB4NGIsIDB4ZGQsIDB4YmMsIDB4MTMsIDB4NDcsCi0gIDB4ZmUsIDB4ZGYsIDB4NGMsIDB4YjEsIDB4NzIsIDB4YzcsIDB4MWEsIDB4NTMsIDB4MDEsIDB4ZDUsIDB4NDYsIDB4NzMsCi0gIDB4MDQsIDB4NGQsIDB4YjEsIDB4NTcsIDB4NjcsIDB4MWQsIDB4M2UsIDB4OTUsIDB4NmEsIDB4OGMsIDB4YjAsIDB4YmEsCi0gIDB4MTAsIDB4OTgsIDB4ZTUsIDB4ZjksIDB4MzEsIDB4MjIsIDB4NzIsIDB4NzEsIDB4MWEsIDB4N2IsIDB4ZWEsIDB4ZjksCi0gIDB4OWQsIDB4NjgsIDB4YzcsIDB4ZDYsIDB4ZjEsIDB4YTcsIDB4ZTMsIDB4YTksIDB4YmIsIDB4MGYsIDB4NTgsIDB4YjUsCi0gIDB4MGUsIDB4NmMsIDB4MDIsIDB4MTYsIDB4MzMsIDB4ZTAsIDB4OWMsIDB4NTYsIDB4OTQsIDB4ZjksIDB4ZDEsIDB4NzYsCi0gIDB4Y2EsIDB4MzUsIDB4ZDYsIDB4NmYsIDB4NjksIDB4NGIsIDB4YjMsIDB4OTksIDB4ODMsIDB4NjcsIDB4MmQsIDB4OWQsCi0gIDB4ZmUsIDB4MWYsIDB4ZTEsIDB4OTMsIDB4MmIsIDB4YjIsIDB4NmIsIDB4NmMsIDB4ZGQsIDB4MWIsIDB4MjcsIDB4Y2IsCi0gIDB4OTgsIDB4YzIsIDB4NzcsIDB4N2IsIDB4OTEsIDB4YTQsIDB4MTcsIDB4NDUsIDB4NjYsIDB4M2UsIDB4ZWYsIDB4ZGEsCi0gIDB4NmUsIDB4NDEsIDB4YmYsIDB4YjksIDB4M2MsIDB4NWIsIDB4MTAsIDB4ZDQsIDB4YjEsIDB4NjUsIDB4MzYsIDB4YjEsCi0gIDB4MGMsIDB4MDMsIDB4MmEsIDB4M2MsIDB4MGUsIDB4ZDcsIDB4N2IsIDB4NjEsIDB4YzUsIDB4N2MsIDB4NDgsIDB4MTIsCi0gIDB4MmQsIDB4ZjQsIDB4N2IsIDB4MTcsIDB4YzUsIDB4OGMsIDB4ZDIsIDB4ODAsIDB4ZGMsIDB4ZDAsIDB4NTAsIDB4MmYsCi0gIDB4NzEsIDB4NWEsIDB4NmEsIDB4M2YsIDB4ZDgsIDB4MjEsIDB4YmYsIDB4MDIsIDB4ZjMsIDB4N2UsIDB4ZjYsIDB4ZjgsCi0gIDB4YmMsIDB4YzQsIDB4MDUsIDB4ZTMsIDB4YjUsIDB4YjIsIDB4MjAsIDB4MTYsIDB4Y2YsIDB4MTgsIDB4NTksIDB4OWMsCi0gIDB4ZmYsIDB4MGQsIDB4NzYsIDB4NWMsIDB4MDYsIDB4NjcsIDB4NWMsIDB4YmIsIDB4ODMsIDB4ZDQsIDB4ZDksIDB4ODksCi0gIDB4OWIsIDB4MjAsIDB4ZmIsIDB4MjgsIDB4Y2UsIDB4YjUsIDB4MmYsIDB4ODksIDB4YzAsIDB4NTUsIDB4MjMsIDB4ZDcsCi0gIDB4OTgsIDB4NzYsIDB4NmIsIDB4NDgsIDB4MmMsIDB4M2MsIDB4MzQsIDB4ZjUsIDB4OTMsIDB4ODYsIDB4MDAsIDB4NzcsCi0gIDB4MzgsIDB4ZjEsIDB4MGYsIDB4OTYsIDB4YjcsIDB4MTIsIDB4YjUsIDB4OTYsIDB4OTcsIDB4ODMsIDB4NWQsIDB4NmQsCi0gIDB4OWEsIDB4MTIsIDB4NWUsIDB4ODQsIDB4Y2UsIDB4YjQsIDB4ZjksIDB4OWYsIDB4ZmYsIDB4NmYsIDB4ZGEsIDB4ZjAsCi0gIDB4YzgsIDB4MGYsIDB4ZmYsIDB4ZjMsIDB4MjEsIDB4MTQsIDB4M2IsIDB4NTQsIDB4YTgsIDB4YTQsIDB4NTQsIDB4OTksCi0gIDB4MjgsIDB4OGEsIDB4NDQsIDB4OTQsIDB4YzgsIDB4OTksIDB4NzMsIDB4MjUsIDB4NTgsIDB4MTAsIDB4M2QsIDB4YWYsCi0gIDB4MDYsIDB4MDAsIDB4OTIsIDB4NDksIDB4NjYsIDB4MzMsIDB4OTgsIDB4NDAsIDB4OWMsIDB4MTMsIDB4MWYsIDB4NTQsCi0gIDB4MzQsIDB4ZmQsIDB4MTksIDB4YjQsIDB4NjMsIDB4NzYsIDB4ZmUsIDB4ZDQsIDB4ZTcsIDB4NDIsIDB4ZDMsIDB4M2YsCi0gIDB4OTIsIDB4MDMsIDB4ZDMsIDB4N2EsIDB4ZTksIDB4OWYsIDB4NWUsIDB4NmIsIDB4OGMsIDB4ODAsIDB4NzAsIDB4MjEsCi0gIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MWYsIDB4NzAsIDB4YTIsIDB4NDEsIDB4NTgsCi0gIDB4NDgsIDB4ZDYsIDB4MDgsIDB4ODQsIDB4MDAsIDB4ZTMsIDB4NTYsIDB4NDQsIDB4YmIsIDB4YTgsIDB4OTcsIDB4NTAsCi0gIDB4MDAsIDB4YTksIDB4NTMsIDB4YjEsIDB4ODMsIDB4MjIsIDB4ZGQsIDB4MGUsIDB4NTYsIDB4MzUsIDB4MTUsIDB4NTgsCi0gIDB4ODEsIDB4NTUsIDB4ZTcsIDB4NDQsIDB4OTgsIDB4M2YsIDB4M2YsIDB4ZjksIDB4MmEsIDB4YzgsIDB4N2YsIDB4YTIsCi0gIDB4NGMsIDB4MDEsIDB4OTksIDB4MDEsIDB4OWEsIDB4ZmYsIDB4MTUsIDB4ZTYsIDB4YmMsIDB4NmQsIDB4MjAsIDB4NzMsCi0gIDB4MDIsIDB4M2MsIDB4Y2UsIDB4ZDIsIDB4MzQsIDB4YzEsIDB4YWQsIDB4MzQsIDB4NmYsIDB4ZmIsIDB4NWQsIDB4NDIsCi0gIDB4ZWIsIDB4NWUsIDB4NjUsIDB4ZTQsIDB4YzYsIDB4ZDQsIDB4ZjEsIDB4Y2YsIDB4YjMsIDB4ZGQsIDB4ZjIsIDB4ZmYsCi0gIDB4OTcsIDB4MGIsIDB4NTUsIDB4ZWMsIDB4YTgsIDB4MWIsIDB4YjMsIDB4ZWYsIDB4NGIsIDB4ZjQsIDB4YWQsIDB4MzcsCi0gIDB4NTEsIDB4OTMsIDB4YTgsIDB4ZjQsIDB4MWEsIDB4NWMsIDB4NTMsIDB4M2EsIDB4ODMsIDB4MGUsIDB4NTYsIDB4ZjEsCi0gIDB4OGUsIDB4NWUsIDB4ZmYsIDB4MjIsIDB4ZjAsIDB4ZmYsIDB4NWEsIDB4ZDMsIDB4NTAsIDB4M2QsIDB4NjIsIDB4OGIsCi0gIDB4MGEsIDB4MzMsIDB4MWEsIDB4MmUsIDB4OGEsIDB4MGYsIDB4ZDQsIDB4NjUsIDB4NDYsIDB4MmIsIDB4MmEsIDB4YmYsCi0gIDB4NWMsIDB4NWYsIDB4ZTMsIDB4NzEsIDB4NzQsIDB4NDQsIDB4NTksIDB4N2IsIDB4OTksIDB4NDEsIDB4ODksIDB4YTEsCi0gIDB4YzIsIDB4MDYsIDB4NTQsIDB4MTQsIDB4MmQsIDB4ZTEsIDB4NjQsIDB4ODcsIDB4ZWYsIDB4NDgsIDB4NzcsIDB4NDgsCi0gIDB4NzIsIDB4OTIsIDB4YjAsIDB4MzEsIDB4YmIsIDB4OGQsIDB4YTksIDB4MjAsIDB4MDYsIDB4YjQsIDB4OTIsIDB4NmQsCi0gIDB4MWQsIDB4MWYsIDB4MmMsIDB4MDYsIDB4ZDYsIDB4M2MsIDB4NDMsIDB4M2QsIDB4ZjMsIDB4ODgsIDB4ZmUsIDB4MTAsCi0gIDB4OGQsIDB4NmMsIDB4YzgsIDB4YzEsIDB4MjYsIDB4YWMsIDB4YjgsIDB4NDUsIDB4MWYsIDB4MTUsIDB4NDIsIDB4MjgsCi0gIDB4M2YsIDB4MGYsIDB4MWEsIDB4YjUsIDB4ZjEsIDB4ZTEsIDB4MGIsIDB4ZTgsIDB4YmUsIDB4NDgsIDB4ODYsIDB4MDIsCi0gIDB4NzYsIDB4NmYsIDB4Y2IsIDB4N2MsIDB4MmYsIDB4ZDUsIDB4ZjEsIDB4YWQsIDB4YmIsIDB4YTEsIDB4MDAsIDB4N2QsCi0gIDB4OWEsIDB4MTQsIDB4NmQsIDB4YzEsIDB4NGEsIDB4ZWYsIDB4YTcsIDB4N2IsIDB4YzgsIDB4NjgsIDB4OTcsIDB4MWYsCi0gIDB4NDUsIDB4YTEsIDB4NDQsIDB4NmMsIDB4MDUsIDB4M2UsIDB4ZDYsIDB4MmIsIDB4ZTcsIDB4NDQsIDB4OGQsIDB4NTcsCi0gIDB4ZDMsIDB4MWYsIDB4NmMsIDB4NmYsIDB4YjUsIDB4MTMsIDB4YTMsIDB4YjUsIDB4Y2YsIDB4ZTQsIDB4NGYsIDB4MWMsCi0gIDB4M2MsIDB4MTgsIDB4MzgsIDB4NzMsIDB4NDgsIDB4M2IsIDB4YTEsIDB4MjIsIDB4YzIsIDB4NzQsIDB4ZjcsIDB4NDAsCi0gIDB4ZDAsIDB4NWQsIDB4ZGQsIDB4NmYsIDB4YjEsIDB4Y2MsIDB4OGIsIDB4YTgsIDB4ZDIsIDB4ZDYsIDB4N2EsIDB4MWQsCi0gIDB4MWQsIDB4OTIsIDB4NWMsIDB4NGMsIDB4NTYsIDB4YzEsIDB4M2UsIDB4NGQsIDB4M2MsIDB4NWIsIDB4NWMsIDB4OWYsCi0gIDB4NWYsIDB4Y2YsIDB4NmQsIDB4YzEsIDB4ZmIsIDB4ZmUsIDB4NzQsIDB4MjYsIDB4ZDEsIDB4NTUsIDB4MmEsIDB4MmEsCi0gIDB4NTEsIDB4MDAsIDB4MTAsIDB4YTEsIDB4NTEsIDB4NTIsIDB4NDIsIDB4ODEsIDB4NmEsIDB4ZTMsIDB4YjcsIDB4ZmUsCi0gIDB4MzEsIDB4ZjcsIDB4MDEsIDB4M2YsIDB4MjIsIDB4MjAsIDB4NjAsIDB4NTIsIDB4OTksIDB4NzAsIDB4MDYsIDB4ODAsCi0gIDB4NDMsIDB4YWQsIDB4NmEsIDB4M2QsIDB4MzcsIDB4MWUsIDB4YzIsIDB4NDUsIDB4MTcsIDB4MGEsIDB4NjksIDB4ZGQsCi0gIDB4ZGYsIDB4MDcsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4MmIsIDB4NmYsCi0gIDB4YTUsIDB4MzAsIDB4NTAsIDB4OGMsIDB4NTQsIDB4MWIsIDB4MGQsIDB4NDIsIDB4MGUsIDB4MzUsIDB4NmQsIDB4MmQsCi0gIDB4NjksIDB4NzUsIDB4YTksIDB4NjMsIDB4NTUsIDB4NDIsIDB4MDMsIDB4MmQsIDB4NTcsIDB4NDMsIDB4YmYsIDB4NzAsCi0gIDB4NjIsIDB4NTIsIDB4YjUsIDB4OTIsIDB4YmUsIDB4ODMsIDB4ZjQsIDB4YjAsIDB4NDksIDB4NTAsIDB4M2MsIDB4YTksCi0gIDB4NzAsIDB4YTEsIDB4ZDgsIDB4MzUsIDB4ZWQsIDB4Y2IsIDB4ZGIsIDB4ZmUsIDB4MDUsIDB4ZTMsIDB4M2UsIDB4MTAsCi0gIDB4OTksIDB4MGIsIDB4MzIsIDB4MGYsIDB4NGIsIDB4ZmUsIDB4OGYsIDB4ZDIsIDB4NzgsIDB4YzcsIDB4NDgsIDB4ZTEsCi0gIDB4NGMsIDB4NWYsIDB4MTcsIDB4YWEsIDB4NzksIDB4OTcsIDB4ODMsIDB4YzYsIDB4OWQsIDB4MzEsIDB4YTQsIDB4YTMsCi0gIDB4MmEsIDB4NWIsIDB4YjksIDB4ZTUsIDB4YzQsIDB4YzgsIDB4MmUsIDB4NzAsIDB4NTIsIDB4ZDksIDB4MGUsIDB4Y2QsCi0gIDB4MjcsIDB4ZmUsIDB4M2UsIDB4NDgsIDB4NjcsIDB4N2EsIDB4NmQsIDB4NjIsIDB4YzIsIDB4YmYsIDB4NDUsIDB4ZWEsCi0gIDB4MTIsIDB4MGIsIDB4ZTMsIDB4NzQsIDB4NTAsIDB4ZDcsIDB4M2YsIDB4NDMsIDB4MDMsIDB4MGYsIDB4MzgsIDB4NDEsCi0gIDB4YjcsIDB4OWQsIDB4MWUsIDB4OWEsIDB4MTAsIDB4ODgsIDB4NGQsIDB4ZmIsIDB4OTUsIDB4MzQsIDB4YWUsIDB4NDIsCi0gIDB4NDEsIDB4NDgsIDB4NjcsIDB4M2MsIDB4NWQsIDB4MjgsIDB4MWQsIDB4NGYsIDB4M2UsIDB4YzUsIDB4NzAsIDB4YjAsCi0gIDB4ZjcsIDB4MmIsIDB4YTksIDB4NjYsIDB4MWQsIDB4YWEsIDB4MTIsIDB4MDIsIDB4YmMsIDB4NjQsIDB4ZWIsIDB4NmIsCi0gIDB4NjQsIDB4NDksIDB4OTIsIDB4NDYsIDB4MTMsIDB4NGQsIDB4NjUsIDB4ZGMsIDB4NTIsIDB4OWQsIDB4ODksIDB4NGMsCi0gIDB4NGIsIDB4NTYsIDB4MzMsIDB4ODQsIDB4ODMsIDB4MTMsIDB4ODksIDB4ZTIsIDB4NDAsIDB4NTksIDB4NGEsIDB4NDcsCi0gIDB4YmQsIDB4ZDAsIDB4ZDgsIDB4NzksIDB4ZTksIDB4ZTksIDB4ZmIsIDB4ZjcsIDB4YzAsIDB4NzYsIDB4ZWIsIDB4YjYsCi0gIDB4MGIsIDB4YWMsIDB4MjIsIDB4ODAsIDB4ZGQsIDB4NzQsIDB4YWUsIDB4NTQsIDB4NDYsIDB4NDMsIDB4NzMsIDB4MjMsCi0gIDB4ZDQsIDB4YzIsIDB4MGMsIDB4MDksIDB4N2MsIDB4OTEsIDB4NTEsIDB4MzMsIDB4ODMsIDB4OWUsIDB4MWMsIDB4NTQsCi0gIDB4ODYsIDB4NTMsIDB4MjksIDB4NmUsIDB4NDYsIDB4YmQsIDB4MDksIDB4NGEsIDB4NDQsIDB4NjYsIDB4OTYsIDB4YjAsCi0gIDB4YzEsIDB4YzYsIDB4MmQsIDB4M2EsIDB4ZDksIDB4ZTAsIDB4YjgsIDB4MmMsIDB4MDEsIDB4YTMsIDB4MDUsIDB4ODYsCi0gIDB4MTAsIDB4ZjEsIDB4N2EsIDB4NWIsIDB4NGQsIDB4ZjIsIDB4ZTQsIDB4NTEsIDB4N2QsIDB4N2IsIDB4NGMsIDB4MzYsCi0gIDB4ZTAsIDB4NjYsIDB4N2IsIDB4YjIsIDB4MzgsIDB4MTAsIDB4ZmMsIDB4MTksIDB4ZGUsIDB4NWEsIDB4NjYsIDB4OGYsCi0gIDB4YTYsIDB4NDQsIDB4NTIsIDB4ZTgsIDB4NzAsIDB4OWUsIDB4NzQsIDB4YWUsIDB4ZWIsIDB4OWMsIDB4YjksIDB4MDAsCi0gIDB4MDMsIDB4YjksIDB4NDUsIDB4NjIsIDB4NmQsIDB4MjAsIDB4YTksIDB4MDksIDB4NWYsIDB4M2UsIDB4MWQsIDB4ZmYsCi0gIDB4NWMsIDB4NjcsIDB4MmQsIDB4NTgsIDB4Y2YsIDB4OTQsIDB4YjMsIDB4NWYsIDB4N2YsIDB4YjcsIDB4ZWQsIDB4ZjQsCi0gIDB4YzcsIDB4ZDEsIDB4ZGIsIDB4ZGIsIDB4ZTAsIDB4MDAsIDB4ZmIsIDB4ZjgsIDB4MzYsIDB4MTAsIDB4OTgsIDB4NjYsCi0gIDB4MWQsIDB4OTQsIDB4ODQsIDB4YTUsIDB4NDUsIDB4NWUsIDB4NDIsIDB4OTIsIDB4ODAsIDB4NDAsIDB4MjIsIDB4NmMsCi0gIDB4NmQsIDB4NGYsIDB4MTQsIDB4OTAsIDB4OWQsIDB4NjEsIDB4MmQsIDB4ODAsIDB4MTIsIDB4ODIsIDB4ODQsIDB4MDIsCi0gIDB4ZjYsIDB4NDMsIDB4NTQsIDB4YmMsIDB4MzQsIDB4ZWYsIDB4NjYsIDB4MzgsIDB4ZjMsIDB4ZWQsIDB4MGQsIDB4OGMsCi0gIDB4NGUsIDB4YWUsIDB4ZjQsIDB4NjgsIDB4NDYsIDB4ZDgsIDB4MzYsIDB4MmYsIDB4YTksIDB4MzksIDB4ZDcsIDB4NzYsCi0gIDB4YjUsIDB4YjcsIDB4YjQsIDB4YjYsIDB4M2YsIDB4ZGMsIDB4NWIsIDB4NmUsIDB4NTMsIDB4NzQsIDB4ZWMsIDB4NjQsCi0gIDB4YjgsIDB4NTEsIDB4ZTksIDB4ODUsIDB4YTcsIDB4M2EsIDB4YWMsIDB4NDUsIDB4ZDUsIDB4NzIsIDB4NzgsIDB4MjksCi0gIDB4ZGUsIDB4N2YsIDB4NzksIDB4NGMsIDB4OGUsIDB4NDQsIDB4YmEsIDB4NWIsIDB4ODUsIDB4NGUsIDB4NjYsIDB4ZTYsCi0gIDB4NjAsIDB4ZDYsIDB4OTAsIDB4MjcsIDB4MWEsIDB4NmEsIDB4YTgsIDB4YjcsIDB4NjQsIDB4YzgsIDB4ZDMsIDB4NjUsCi0gIDB4Y2EsIDB4ODksIDB4NGYsIDB4ODMsIDB4Y2IsIDB4NWUsIDB4NzYsIDB4NGMsIDB4NTIsIDB4NjksIDB4ZmIsIDB4OGYsCi0gIDB4OWYsIDB4ZjQsIDB4ZGUsIDB4NDgsIDB4NzAsIDB4MjEsIDB4MWEsIDB4ODgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0gIDB4ZmYsIDB4MjMsIDB4NmYsIDB4YTUsIDB4MjIsIDB4MDgsIDB4NjgsIDB4NjAsIDB4NDMsIDB4YWMsIDB4YjcsIDB4MDEsCi0gIDB4YzIsIDB4ZDEsIDB4MmUsIDB4OTIsIDB4OTEsIDB4NDEsIDB4MjksIDB4MzAsIDB4NWEsIDB4NGEsIDB4OWQsIDB4ZDcsCi0gIDB4NzYsIDB4MjgsIDB4OTEsIDB4ZDMsIDB4NWMsIDB4NDMsIDB4YzcsIDB4YTcsIDB4OWYsIDB4NGYsIDB4NTgsIDB4MWEsCi0gIDB4ZDQsIDB4NDYsIDB4ZjcsIDB4OWUsIDB4ZWQsIDB4MjIsIDB4NjMsIDB4YTgsIDB4ZjMsIDB4YTQsIDB4MzQsIDB4MjcsCi0gIDB4NGQsIDB4ZDgsIDB4MWMsIDB4ODksIDB4Y2MsIDB4NWEsIDB4ODYsIDB4OGUsIDB4ZWQsIDB4ZGUsIDB4YjIsIDB4ODUsCi0gIDB4NTcsIDB4ZDUsIDB4NGMsIDB4NzMsIDB4NDYsIDB4ZjQsIDB4MWMsIDB4ZjYsIDB4ZWYsIDB4ODIsIDB4NjYsIDB4YmQsCi0gIDB4YTksIDB4NjQsIDB4NmMsIDB4ZmEsIDB4MjQsIDB4OWIsIDB4NjMsIDB4NzYsIDB4ZmYsIDB4MmEsIDB4YmYsIDB4ZGEsCi0gIDB4NmEsIDB4MGYsIDB4YjYsIDB4YjIsIDB4NWQsIDB4NDgsIDB4ZGYsIDB4MGQsIDB4ZDQsIDB4NjksIDB4ZTQsIDB4YjgsCi0gIDB4ZGIsIDB4NjksIDB4OGUsIDB4MGEsIDB4MzMsIDB4N2EsIDB4YTgsIDB4OGQsIDB4NWUsIDB4NzUsIDB4YTcsIDB4MDEsCi0gIDB4ODEsIDB4Y2EsIDB4NGMsIDB4NTUsIDB4ZDMsIDB4YTUsIDB4OTAsIDB4NjUsIDB4NWEsIDB4ZDMsIDB4MGQsIDB4NTQsCi0gIDB4ODUsIDB4NjIsIDB4YzEsIDB4MzMsIDB4ZDAsIDB4OTgsIDB4ODksIDB4ZmMsIDB4MzEsIDB4ODYsIDB4NjAsIDB4MzEsCi0gIDB4NWMsIDB4NTksIDB4MmUsIDB4MWEsIDB4NDIsIDB4MTgsIDB4MmMsIDB4MDMsIDB4OWEsIDB4Y2MsIDB4MTgsIDB4N2QsCi0gIDB4N2YsIDB4ZjUsIDB4YmUsIDB4NjUsIDB4OGYsIDB4YTIsIDB4OTMsIDB4NDksIDB4ZTgsIDB4YjYsIDB4MTUsIDB4ZWEsCi0gIDB4ZTcsIDB4YjUsIDB4OGIsIDB4N2UsIDB4NDEsIDB4M2YsIDB4MTQsIDB4ZjQsIDB4NzQsIDB4YzAsIDB4N2YsIDB4OTUsCi0gIDB4MWEsIDB4MGMsIDB4YmMsIDB4YzEsIDB4M2MsIDB4ZTAsIDB4OGQsIDB4NGIsIDB4NjcsIDB4NDAsIDB4OTgsIDB4MmIsCi0gIDB4OTYsIDB4ZTgsIDB4NzMsIDB4MGEsIDB4MDYsIDB4ZWMsIDB4MDIsIDB4ZmIsIDB4OWIsIDB4ODcsIDB4MDQsIDB4MDYsCi0gIDB4ZmQsIDB4NTMsIDB4NGIsIDB4ZjgsIDB4NWYsIDB4MDcsIDB4ZGQsIDB4ZDksIDB4YmIsIDB4NDksIDB4ZWEsIDB4ODUsCi0gIDB4YTAsIDB4ZjAsIDB4ZmUsIDB4MWQsIDB4MDMsIDB4YTYsIDB4ZTgsIDB4MDksIDB4YTMsIDB4MjUsIDB4NzcsIDB4MTksCi0gIDB4ZjEsIDB4YTAsIDB4ZmUsIDB4ODEsIDB4ODAsIDB4ODMsIDB4NWUsIDB4MjQsIDB4NzEsIDB4ZDksIDB4NjIsIDB4ZTUsCi0gIDB4MjAsIDB4MmEsIDB4ZTgsIDB4Y2UsIDB4OGYsIDB4ZjQsIDB4OGEsIDB4ZjgsIDB4NjYsIDB4ZjcsIDB4ZDEsIDB4ZWIsCi0gIDB4NjIsIDB4ZDQsIDB4MGEsIDB4ZTUsIDB4ZTMsIDB4N2QsIDB4OGEsIDB4YWQsIDB4ZWEsIDB4YWEsIDB4MWQsIDB4YTUsCi0gIDB4NDEsIDB4YzEsIDB4YTIsIDB4M2IsIDB4YzgsIDB4MzcsIDB4OGEsIDB4NTcsIDB4MTAsIDB4MWQsIDB4NzcsIDB4NzcsCi0gIDB4N2UsIDB4ZmYsIDB4ODgsIDB4NDgsIDB4ODIsIDB4NjEsIDB4MTgsIDB4NzksIDB4YmEsIDB4MDQsIDB4NTUsIDB4MjUsCi0gIDB4MjUsIDB4NDIsIDB4YTIsIDB4NTUsIDB4NDQsIDB4YTUsIDB4ODEsIDB4MDEsIDB4M2YsIDB4ZmQsIDB4NWQsIDB4NTIsCi0gIDB4YzksIDB4MDUsIDB4ZWYsIDB4MzUsIDB4OWQsIDB4MjgsIDB4OGMsIDB4YjksIDB4YTIsIDB4YTgsIDB4MDIsIDB4YWEsCi0gIDB4NjMsIDB4MjEsIDB4YWEsIDB4YTUsIDB4YTIsIDB4YWQsIDB4MGEsIDB4OWUsIDB4MGUsIDB4M2EsIDB4OWUsIDB4NjEsCi0gIDB4MjIsIDB4OTUsIDB4NDUsIDB4ODYsIDB4ZjMsIDB4ZGMsIDB4MTUsIDB4YjIsIDB4MDMsIDB4OTksIDB4OWQsIDB4ODQsCi0gIDB4MDQsIDB4NzQsIDB4ZDUsIDB4NDEsIDB4MGQsIDB4YTksIDB4ZTUsIDB4MzYsIDB4M2QsIDB4OWUsIDB4ZDAsIDB4NzAsCi0gIDB4MjEsIDB4MWEsIDB4OGYsIDB4ZmYsIDB4YzAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4NmYsIDB4YTQsIDB4YjEsCi0gIDB4MTEsIDB4NmMsIDB4MjUsIDB4MDgsIDB4MTUsIDB4NWQsIDB4MjUsIDB4Y2EsIDB4YWIsIDB4NWQsIDB4NzEsIDB4NjUsCi0gIDB4YTgsIDB4MjIsIDB4ODEsIDB4NTcsIDB4NTQsIDB4MjgsIDB4OTUsIDB4NzcsIDB4ODksIDB4MjUsIDB4MjgsIDB4OTIsCi0gIDB4NDYsIDB4NGMsIDB4MjQsIDB4MjAsIDB4OTEsIDB4NWQsIDB4ODMsIDB4ZTMsIDB4YjMsIDB4YmUsIDB4YmIsIDB4NjUsCi0gIDB4ZDYsIDB4NjEsIDB4ZmIsIDB4NWYsIDB4NjYsIDB4NTEsIDB4OWUsIDB4ZTcsIDB4NGQsIDB4M2YsIDB4YTUsIDB4YzAsCi0gIDB4N2YsIDB4NmUsIDB4OTAsIDB4Y2EsIDB4ODEsIDB4OGQsIDB4M2UsIDB4ZTEsIDB4NjEsIDB4ZTEsIDB4MWMsIDB4YTksCi0gIDB4MGQsIDB4ZjUsIDB4MDgsIDB4OTYsIDB4ODQsIDB4ZmEsIDB4ZDcsIDB4MTcsIDB4NjksIDB4MmMsIDB4MjcsIDB4NzgsCi0gIDB4YmEsIDB4ZTMsIDB4OWEsIDB4YzAsIDB4Y2YsIDB4ZmMsIDB4ZTcsIDB4MjEsIDB4YmEsIDB4ZjUsIDB4OWUsIDB4MzQsCi0gIDB4ZjUsIDB4YjUsIDB4ZjEsIDB4OTYsIDB4YjMsIDB4OWYsIDB4NmUsIDB4MDgsIDB4YTksIDB4MzgsIDB4NDEsIDB4N2EsCi0gIDB4ODMsIDB4ZjUsIDB4MmEsIDB4ZDgsIDB4NDksIDB4ZjIsIDB4ZjIsIDB4NTUsIDB4NTIsIDB4YWIsIDB4ZWEsIDB4NWYsCi0gIDB4OTUsIDB4MzEsIDB4NWYsIDB4NGUsIDB4NWQsIDB4MzYsIDB4MzIsIDB4YmQsIDB4OGYsIDB4YWUsIDB4NDUsIDB4MzgsCi0gIDB4NzUsIDB4YzksIDB4NTYsIDB4YTEsIDB4YjQsIDB4NTIsIDB4Y2UsIDB4NDcsIDB4YzEsIDB4NTcsIDB4ZGMsIDB4YTcsCi0gIDB4YjMsIDB4NjAsIDB4MWUsIDB4MWIsIDB4YzUsIDB4MGIsIDB4OTYsIDB4ZmQsIDB4MDUsIDB4YTIsIDB4Y2MsIDB4ZTUsCi0gIDB4ZGYsIDB4N2YsIDB4M2EsIDB4NTgsIDB4YjMsIDB4MTcsIDB4ODcsIDB4NTcsIDB4NTksIDB4NjEsIDB4ZDEsIDB4MjksCi0gIDB4NzAsIDB4MjQsIDB4YjUsIDB4ODEsIDB4YzAsIDB4NDEsIDB4NTUsIDB4YzgsIDB4M2EsIDB4ZDYsIDB4YjIsIDB4MGYsCi0gIDB4MzcsIDB4ZjMsIDB4YTEsIDB4ZTAsIDB4NzcsIDB4ZTAsIDB4MDksIDB4NTMsIDB4ODUsIDB4YjksIDB4MWUsIDB4ZTIsCi0gIDB4YmYsIDB4MzcsIDB4ZTcsIDB4NjQsIDB4NmEsIDB4ZWEsIDB4M2UsIDB4M2QsIDB4ZWYsIDB4ZmQsIDB4MWMsIDB4MTMsCi0gIDB4ZTgsIDB4MjIsIDB4YzIsIDB4ZjQsIDB4MDcsIDB4NDEsIDB4ZDQsIDB4YmEsIDB4ZTcsIDB4NTksIDB4NTQsIDB4NWIsCi0gIDB4NzQsIDB4ZDUsIDB4MDgsIDB4NmMsIDB4YmQsIDB4NTYsIDB4NTksIDB4NjcsIDB4YTksIDB4NjcsIDB4YTksIDB4MzEsCi0gIDB4ODEsIDB4ZGUsIDB4ZmMsIDB4MjEsIDB4NDUsIDB4NzUsIDB4NTgsIDB4YjUsIDB4NjMsIDB4N2UsIDB4ZTgsIDB4OGUsCi0gIDB4YzIsIDB4M2UsIDB4MzIsIDB4NTMsIDB4MTcsIDB4MTAsIDB4YWUsIDB4ZGEsIDB4ZGYsIDB4MWIsIDB4ZjYsIDB4M2MsCi0gIDB4NzYsIDB4YTcsIDB4NTAsIDB4NWYsIDB4ZDUsIDB4YTAsIDB4M2IsIDB4ODIsIDB4NGUsIDB4ZjYsIDB4ZmEsIDB4N2IsCi0gIDB4NGUsIDB4MTMsIDB4YTksIDB4Y2QsIDB4NzUsIDB4ZDQsIDB4NTEsIDB4OGIsIDB4MDMsIDB4ZWMsIDB4YzIsIDB4NTIsCi0gIDB4NDAsIDB4NzYsIDB4MTQsIDB4YTYsIDB4NTAsIDB4YTUsIDB4MDIsIDB4ZmIsIDB4NTEsIDB4M2EsIDB4N2QsIDB4NWYsCi0gIDB4M2MsIDB4ZjcsIDB4ZWMsIDB4MDAsIDB4OGMsIDB4YjIsIDB4NTIsIDB4YmMsIDB4YzgsIDB4NTMsIDB4NzMsIDB4MDgsCi0gIDB4YzIsIDB4MDEsIDB4YjQsIDB4ZjgsIDB4ZDMsIDB4OTgsIDB4OGMsIDB4YjgsIDB4NTgsIDB4MDAsIDB4MmIsIDB4NTQsCi0gIDB4MWIsIDB4MjcsIDB4NzQsIDB4N2MsIDB4MTQsIDB4N2QsIDB4YjgsIDB4ZjEsIDB4NGUsIDB4NjgsIDB4ZmEsIDB4Y2QsCi0gIDB4NzQsIDB4ODksIDB4MGMsIDB4NWUsIDB4ODEsIDB4NWMsIDB4Y2IsIDB4ZGQsIDB4MzksIDB4OTQsIDB4MTEsIDB4YzYsCi0gIDB4MDEsIDB4MzAsIDB4MTksIDB4ODgsIDB4NTcsIDB4MWEsIDB4YTMsIDB4NmEsIDB4YTYsIDB4YWQsIDB4MjUsIDB4OTIsCi0gIDB4YmYsIDB4ZjUsIDB4ZjMsIDB4ZmEsIDB4YjgsIDB4ZjMsIDB4MTMsIDB4ZjEsIDB4MmYsIDB4YzIsIDB4MDAsIDB4NzksCi0gIDB4ZDUsIDB4MzQsIDB4MDksIDB4OWIsIDB4YTAsIDB4YTUsIDB4MGMsIDB4ZGQsIDB4YjUsIDB4ZTksIDB4MmEsIDB4ZjYsCi0gIDB4OGUsIDB4NTksIDB4OTIsIDB4ODMsIDB4ODgsIDB4MDUsIDB4ZTksIDB4ODEsIDB4MGIsIDB4YTcsIDB4NTUsIDB4YzYsCi0gIDB4ZGQsIDB4ODksIDB4MGEsIDB4NGQsIDB4ZDksIDB4YzgsIDB4MmQsIDB4YjMsIDB4MzAsIDB4MDgsIDB4NTIsIDB4MDIsCi0gIDB4ODUsIDB4MTMsIDB4Y2IsIDB4YzUsIDB4MTIsIDB4MTMsIDB4ODcsIDB4NjIsIDB4MTAsIDB4NGUsIDB4YmEsIDB4NmEsCi0gIDB4YjgsIDB4YjEsIDB4ZDIsIDB4M2MsIDB4Y2MsIDB4ZWUsIDB4NjYsIDB4YTksIDB4ZGYsIDB4ZTksIDB4ZGEsIDB4ZmMsCi0gIDB4YTQsIDB4YjEsIDB4MTgsIDB4NmUsIDB4NTgsIDB4NDQsIDB4NmMsIDB4NjcsIDB4YTUsIDB4NTQsIDB4NDUsIDB4ZTksCi0gIDB4NTMsIDB4NGUsIDB4YTEsIDB4MzIsIDB4ODIsIDB4N2MsIDB4ZDcsIDB4ODMsIDB4ZWMsIDB4ZmEsIDB4OWIsIDB4NDEsCi0gIDB4YzAsIDB4MjEsIDB4MWEsIDB4OGYsIDB4ZjAsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWQsIDB4NmYsIDB4YTQsCi0gIDB4YjAsIDB4ZDEsIDB4YWMsIDB4MTcsIDB4MDgsIDB4MTIsIDB4YTgsIDB4ZjIsIDB4YjQsIDB4NzAsIDB4OTUsIDB4NmQsCi0gIDB4MjgsIDB4ODIsIDB4OTIsIDB4ODksIDB4NTAsIDB4MDksIDB4MDksIDB4NjQsIDB4OWMsIDB4ZGEsIDB4ODksIDB4ODQsCi0gIDB4MDIsIDB4MzIsIDB4NjEsIDB4YWIsIDB4NzcsIDB4ODYsIDB4YTQsIDB4NDksIDB4MGEsIDB4NmUsIDB4MjQsIDB4MjEsCi0gIDB4NzAsIDB4NWMsIDB4NGIsIDB4ZGIsIDB4M2YsIDB4M2YsIDB4ODQsIDB4ZjUsIDB4YWYsIDB4ZDQsIDB4M2IsIDB4MjIsCi0gIDB4OWYsIDB4ZjEsIDB4MGIsIDB4OTMsIDB4YzAsIDB4NzIsIDB4MzYsIDB4YmMsIDB4N2MsIDB4ZmQsIDB4YTMsIDB4OWIsCi0gIDB4ZDUsIDB4MjEsIDB4MTcsIDB4YWYsIDB4NWUsIDB4ZDIsIDB4NmQsIDB4ZGMsIDB4YjksIDB4MzEsIDB4M2MsIDB4NGMsCi0gIDB4N2MsIDB4OGYsIDB4NTgsIDB4MjYsIDB4YTgsIDB4NzAsIDB4NzYsIDB4MmYsIDB4MTYsIDB4YmQsIDB4OTMsIDB4N2IsCi0gIDB4MTYsIDB4YzEsIDB4NWQsIDB4NjIsIDB4ZTksIDB4YTQsIDB4OGUsIDB4ZjcsIDB4ODksIDB4NTUsIDB4YjIsIDB4YzAsCi0gIDB4OTIsIDB4YTYsIDB4YWIsIDB4MWEsIDB4YmUsIDB4MzEsIDB4ODAsIDB4ZTEsIDB4YWMsIDB4YjYsIDB4MGEsIDB4NjQsCi0gIDB4NzQsIDB4ZjUsIDB4N2IsIDB4MWIsIDB4YjYsIDB4ZjEsIDB4MjgsIDB4NzksIDB4YmUsIDB4OTcsIDB4MjQsIDB4ZmYsCi0gIDB4MjMsIDB4NTYsIDB4ZDEsIDB4M2UsIDB4MzgsIDB4ODcsIDB4NjMsIDB4MzUsIDB4ZDQsIDB4ZDUsIDB4MzUsIDB4YTUsCi0gIDB4NTUsIDB4YmIsIDB4NTYsIDB4NzEsIDB4NWUsIDB4ZmUsIDB4YjksIDB4MzgsIDB4NTEsIDB4MWMsIDB4YWYsIDB4MjcsCi0gIDB4MGMsIDB4Y2UsIDB4NjIsIDB4MzcsIDB4YTksIDB4YzIsIDB4MjQsIDB4NzMsIDB4OTQsIDB4ZTksIDB4NmMsIDB4ZWQsCi0gIDB4NGQsIDB4ZTAsIDB4MzEsIDB4NGYsIDB4NTMsIDB4ZGQsIDB4YWYsIDB4NDMsIDB4NTMsIDB4OTcsIDB4MGQsIDB4ZDUsCi0gIDB4MTIsIDB4ODMsIDB4N2UsIDB4OTksIDB4MzksIDB4OTYsIDB4MmUsIDB4NDksIDB4YTEsIDB4NWQsIDB4YWUsIDB4ZGMsCi0gIDB4MDYsIDB4M2MsIDB4NzcsIDB4ODIsIDB4ZTMsIDB4MDYsIDB4YjQsIDB4ODMsIDB4NTgsIDB4NmQsIDB4MWUsIDB4OTAsCi0gIDB4MWYsIDB4ZDAsIDB4Y2QsIDB4MjIsIDB4NDQsIDB4NzIsIDB4ZGIsIDB4N2QsIDB4ZjcsIDB4YWEsIDB4ZmEsIDB4ZmIsCi0gIDB4MGEsIDB4MDQsIDB4MjQsIDB4N2YsIDB4NWYsIDB4ZmUsIDB4MjEsIDB4M2QsIDB4MjYsIDB4NmYsIDB4YTksIDB4YTUsCi0gIDB4OGQsIDB4MWQsIDB4ZjcsIDB4YWEsIDB4OTAsIDB4ODAsIDB4YzQsIDB4MzksIDB4MDEsIDB4MTIsIDB4MzgsIDB4MTksCi0gIDB4ZDIsIDB4YzgsIDB4NjgsIDB4M2MsIDB4OGQsIDB4NzcsIDB4YTAsIDB4YmIsIDB4M2EsIDB4ZjMsIDB4MTYsIDB4MDMsCi0gIDB4N2QsIDB4Y2YsIDB4ZjgsIDB4NjcsIDB4ZDksIDB4ZGEsIDB4MDAsIDB4MzQsIDB4MTcsIDB4NDYsIDB4NzksIDB4Y2MsCi0gIDB4OWMsIDB4YWQsIDB4MTEsIDB4MmEsIDB4MDksIDB4MjcsIDB4YjAsIDB4YTUsIDB4NDcsIDB4NWUsIDB4MGYsIDB4MGEsCi0gIDB4ZWIsIDB4NzgsIDB4MWUsIDB4MGUsIDB4OGYsIDB4MzAsIDB4MDQsIDB4ODUsIDB4OWYsIDB4ZDIsIDB4YzcsIDB4MTIsCi0gIDB4ODAsIDB4ODUsIDB4MDgsIDB4MzEsIDB4MDgsIDB4MWUsIDB4ZGIsIDB4NGEsIDB4NDUsIDB4NjUsIDB4ZjUsIDB4NTYsCi0gIDB4MTYsIDB4MDksIDB4NDEsIDB4NmEsIDB4ZTQsIDB4NWIsIDB4NWIsIDB4M2IsIDB4ODIsIDB4NDMsIDB4M2UsIDB4N2UsCi0gIDB4M2YsIDB4ZTIsIDB4OGEsIDB4YzAsIDB4MGUsIDB4ZTYsIDB4NGYsIDB4YWQsIDB4NTMsIDB4YzgsIDB4ZGYsIDB4ZDksCi0gIDB4YWUsIDB4YmIsIDB4ZGQsIDB4ZjUsIDB4ZmYsIDB4Y2YsIDB4MTQsIDB4ZWQsIDB4Y2YsIDB4NzEsIDB4NWUsIDB4MWIsCi0gIDB4MjcsIDB4ZGQsIDB4YzYsIDB4ZjEsIDB4NTYsIDB4NDYsIDB4ODYsIDB4OTksIDB4ODYsIDB4YjgsIDB4OTEsIDB4ZTgsCi0gIDB4NTgsIDB4NjksIDB4ZGUsIDB4ODEsIDB4MTEsIDB4OTUsIDB4ZjIsIDB4NzgsIDB4N2UsIDB4MzAsIDB4ODcsIDB4YWEsCi0gIDB4YTksIDB4ZDcsIDB4OWMsIDB4NDUsIDB4OTksIDB4YTIsIDB4YjYsIDB4NDksIDB4YjYsIDB4NjksIDB4NjUsIDB4OTUsCi0gIDB4OTUsIDB4NDYsIDB4OTEsIDB4MjIsIDB4ZTksIDB4NjcsIDB4ZWYsIDB4MzksIDB4NjUsIDB4YjYsIDB4NTAsIDB4MTIsCi0gIDB4ZmQsIDB4YzAsIDB4MDQsIDB4NzcsIDB4ODksIDB4YTgsIDB4MzQsIDB4MmQsIDB4MjMsIDB4ZmEsIDB4ZjQsIDB4ZGYsCi0gIDB4YTcsIDB4ZmIsIDB4ZmQsIDB4OTksIDB4ZWEsIDB4NTEsIDB4MmYsIDB4ZjQsIDB4NDUsIDB4MWEsIDB4MTIsIDB4OWYsCi0gIDB4OTMsIDB4ODIsIDB4N2MsIDB4ZTQsIDB4MjQsIDB4ZGYsIDB4Y2IsIDB4ZjQsIDB4N2MsIDB4ZmQsIDB4ODMsIDB4NGYsCi0gIDB4NmYsIDB4MGQsIDB4ZDQsIDB4ZjAsIDB4NmEsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OGYsIDB4ZTAsIDB4MmYsIDB4N2YsCi0gIDB4ZmYsIDB4ZmYsIDB4MWQsIDB4NmYsIDB4YTIsIDB4YzEsIDB4NTIsIDB4MDYsIDB4MTAsIDB4MDYsIDB4OGQsIDB4MmEsCi0gIDB4ZWIsIDB4ODksIDB4NzUsIDB4NmIsIDB4NTUsIDB4NDIsIDB4NTQsIDB4NTAsIDB4NDUsIDB4MDIsIDB4MjIsIDB4NTksCi0gIDB4MzgsIDB4YTgsIDB4YzgsIDB4NDUsIDB4MjcsIDB4MmUsIDB4YmUsIDB4MDYsIDB4NTgsIDB4MzEsIDB4MDAsIDB4M2EsCi0gIDB4ZGQsIDB4OWYsIDB4NWEsIDB4OGUsIDB4NWMsIDB4MTYsIDB4MDQsIDB4MWMsIDB4MDgsIDB4N2QsIDB4NzMsIDB4ZmQsCi0gIDB4N2MsIDB4YWEsIDB4M2YsIDB4OWYsIDB4ZGEsIDB4YjgsIDB4NzEsIDB4MzEsIDB4OTcsIDB4ZjMsIDB4MmMsIDB4MGIsCi0gIDB4NjYsIDB4MTIsIDB4Y2IsIDB4ODYsIDB4ZDgsIDB4NWQsIDB4MDEsIDB4OGIsIDB4ZGEsIDB4YTEsIDB4OTgsIDB4MjQsCi0gIDB4MmQsIDB4YmQsIDB4OWYsIDB4MjQsIDB4NDksIDB4MmEsIDB4NmYsIDB4ZGQsIDB4NzIsIDB4YTgsIDB4NjcsIDB4ODgsCi0gIDB4MTUsIDB4NzMsIDB4MTMsIDB4YWMsIDB4M2QsIDB4ZTQsIDB4MWIsIDB4Y2YsIDB4YzAsIDB4NmIsIDB4ODQsIDB4YTIsCi0gIDB4NWYsIDB4MjcsIDB4M2UsIDB4ZjMsIDB4ZDYsIDB4MzksIDB4M2EsIDB4OGIsIDB4MDksIDB4M2QsIDB4MzgsIDB4ZTQsCi0gIDB4MjYsIDB4ODMsIDB4NzgsIDB4N2EsIDB4NWMsIDB4ZDEsIDB4YjgsIDB4ZDYsIDB4NjQsIDB4ZGMsIDB4ZDEsIDB4YmYsCi0gIDB4ZDYsIDB4MjAsIDB4NmUsIDB4ZDIsIDB4NDcsIDB4NDMsIDB4NGMsIDB4MzksIDB4MzgsIDB4MzQsIDB4NzQsIDB4NjMsCi0gIDB4ODcsIDB4ZjEsIDB4NmUsIDB4ZWEsIDB4ZDMsIDB4MGMsIDB4ZmIsIDB4NzEsIDB4NGUsIDB4MmMsIDB4MjQsIDB4MjgsCi0gIDB4NzAsIDB4YjIsIDB4YWYsIDB4ZDcsIDB4YTksIDB4NmYsIDB4NTQsIDB4MmUsIDB4MWIsIDB4Y2EsIDB4YjUsIDB4N2IsCi0gIDB4NmIsIDB4NWIsIDB4OTAsIDB4MTEsIDB4OTYsIDB4MjgsIDB4ZDQsIDB4NWUsIDB4ZGMsIDB4M2EsIDB4ZTYsIDB4NTQsCi0gIDB4MjMsIDB4MWYsIDB4MjEsIDB4OGMsIDB4MGMsIDB4OTcsIDB4YmEsIDB4YjAsIDB4ODQsIDB4M2MsIDB4OGEsIDB4ZGQsCi0gIDB4NWUsIDB4ZDQsIDB4ZDksIDB4MGYsIDB4MGUsIDB4OWEsIDB4YmIsIDB4ZTYsIDB4MmEsIDB4YjEsIDB4OTAsIDB4M2IsCi0gIDB4NDcsIDB4ZTgsIDB4ZjMsIDB4NDEsIDB4MGQsIDB4ZTMsIDB4NTYsIDB4NWQsIDB4OTQsIDB4NWIsIDB4ZDQsIDB4NDMsCi0gIDB4NzMsIDB4M2YsIDB4NzEsIDB4NzksIDB4ZGEsIDB4MWUsIDB4YWIsIDB4NmQsIDB4NjEsIDB4NTUsIDB4ZWMsIDB4NzYsCi0gIDB4NTQsIDB4NmEsIDB4YjcsIDB4NjMsIDB4NDEsIDB4M2QsIDB4MzAsIDB4NzIsIDB4ZjcsIDB4YTcsIDB4MDUsIDB4OGUsCi0gIDB4OTksIDB4OWEsIDB4YWQsIDB4NzEsIDB4MWQsIDB4MjUsIDB4YmYsIDB4ZDQsIDB4ODYsIDB4OTksIDB4NmUsIDB4NzAsCi0gIDB4MTAsIDB4MTUsIDB4MzcsIDB4NGIsIDB4ZDYsIDB4ZGQsIDB4MzUsIDB4ZjAsIDB4MjQsIDB4OWMsIDB4NWIsIDB4YjYsCi0gIDB4ZmUsIDB4ZmEsIDB4MDIsIDB4ZGMsIDB4ZDksIDB4ZjcsIDB4OWUsIDB4ZDYsIDB4MDAsIDB4OTMsIDB4YjMsIDB4ZjksCi0gIDB4YTgsIDB4NTAsIDB4NzQsIDB4MTgsIDB4ODQsIDB4MDQsIDB4MmEsIDB4NDEsIDB4ODgsIDB4NDMsIDB4NDYsIDB4NGEsCi0gIDB4Y2EsIDB4OWYsIDB4MTAsIDB4YjgsIDB4ZTAsIDB4NDEsIDB4MDMsIDB4NmIsIDB4MjUsIDB4MDksIDB4MTYsIDB4ZTcsCi0gIDB4OWIsIDB4YmQsIDB4YmUsIDB4MGUsIDB4ZGQsIDB4ODQsIDB4NjEsIDB4YjcsIDB4MmUsIDB4NTgsIDB4NzQsIDB4NDMsCi0gIDB4YmQsIDB4ZmMsIDB4NTUsIDB4ZDgsIDB4NzIsIDB4MTQsIDB4M2IsIDB4NWYsIDB4YWEsIDB4ZjMsIDB4ZDYsIDB4YTgsCi0gIDB4ZDUsIDB4NDAsIDB4MjEsIDB4Y2MsIDB4M2QsIDB4MjAsIDB4YmEsIDB4YzAsIDB4NGYsIDB4MWEsIDB4NTAsIDB4NGIsCi0gIDB4OTgsIDB4NWMsIDB4NTQsIDB4M2UsIDB4NzgsIDB4ZDEsIDB4Y2MsIDB4ZTgsIDB4MWEsIDB4ZGUsIDB4NjIsIDB4YjgsCi0gIDB4YjYsIDB4YzQsIDB4OGIsIDB4MDUsIDB4MzIsIDB4MWIsIDB4YzUsIDB4ZjksIDB4NDUsIDB4ZmIsIDB4OTIsIDB4NDksCi0gIDB4NjYsIDB4NGUsIDB4MTAsIDB4M2MsIDB4ZjgsIDB4NWEsIDB4YjIsIDB4YWMsIDB4YmEsIDB4YjQsIDB4MzcsIDB4ZDEsCi0gIDB4N2UsIDB4ZDMsIDB4MDAsIDB4ODQsIDB4YmMsIDB4ZmEsIDB4MzMsIDB4ODksIDB4N2UsIDB4NjgsIDB4OTYsIDB4MDAsCi0gIDB4NTcsIDB4ODMsIDB4ODEsIDB4ZDIsIDB4MTgsIDB4YmUsIDB4NzQsIDB4NGIsIDB4OGIsIDB4OGQsIDB4NmUsIDB4MDAsCi0gIDB4NDQsIDB4NjksIDB4NjIsIDB4YTYsIDB4M2QsIDB4YjksIDB4YjIsIDB4ZDAsIDB4NTAsIDB4ZDcsIDB4MTUsIDB4YzUsCi0gIDB4NzMsIDB4NzcsIDB4NzAsIDB4OTUsIDB4M2QsIDB4YTEsIDB4YjcsIDB4MDcsIDB4MWUsIDB4MzksIDB4YzQsIDB4ODQsCi0gIDB4MjAsIDB4ZjgsIDB4NmEsIDB4YjUsIDB4YmYsIDB4YWYsIDB4ZGMsIDB4MzgsIDB4MjEsIDB4MWEsIDB4OTQsIDB4NzUsCi0gIDB4YmUsIDB4OTIsIDB4YzEsIDB4NDQsIDB4MTEsIDB4MTAsIDB4YTAsIDB4NDcsIDB4MDQsIDB4MTcsIDB4MTMsIDB4NTUsCi0gIDB4NWEsIDB4OGMsIDB4ODQsIDB4MTQsIDB4ODAsIDB4YTEsIDB4NTksIDB4MGUsIDB4NjYsIDB4MWMsIDB4NDYsIDB4YTcsCi0gIDB4YWIsIDB4OWQsIDB4MjMsIDB4NjUsIDB4NjgsIDB4OTYsIDB4OGEsIDB4ZTgsIDB4MjAsIDB4ZDksIDB4ZTUsIDB4OWYsCi0gIDB4ZDUsIDB4ODMsIDB4OTYsIDB4OWYsIDB4Y2MsIDB4N2YsIDB4N2YsIDB4ZDksIDB4M2IsIDB4MjUsIDB4MmQsIDB4OWEsCi0gIDB4NjIsIDB4MTAsIDB4MDksIDB4OTgsIDB4ZTIsIDB4ZmQsIDB4YTUsIDB4YWQsIDB4M2EsIDB4MWIsIDB4YjgsIDB4ZTYsCi0gIDB4MWMsIDB4ZjksIDB4ZGYsIDB4ZjQsIDB4Y2EsIDB4NzQsIDB4ZDAsIDB4NmIsIDB4ZmQsIDB4YjAsIDB4ZjEsIDB4OGQsCi0gIDB4YTMsIDB4ZTUsIDB4NDAsIDB4M2YsIDB4YjQsIDB4M2UsIDB4OWIsIDB4MGYsIDB4NDEsIDB4MDcsIDB4YWMsIDB4ZDcsCi0gIDB4MzEsIDB4NTksIDB4NTUsIDB4NjQsIDB4YjksIDB4OWEsIDB4ODEsIDB4MWEsIDB4MjksIDB4NTUsIDB4ZjEsIDB4OGEsCi0gIDB4NWMsIDB4ZGIsIDB4MDYsIDB4OTIsIDB4OWQsIDB4NjgsIDB4ZDAsIDB4YWIsIDB4MTgsIDB4MTIsIDB4NjQsIDB4MTgsCi0gIDB4MzEsIDB4YTgsIDB4ZGYsIDB4MTQsIDB4OWIsIDB4MzYsIDB4NjAsIDB4M2IsIDB4YTIsIDB4Y2MsIDB4YTksIDB4ZjUsCi0gIDB4ZDksIDB4MGEsIDB4OWQsIDB4NWUsIDB4NDUsIDB4MzgsIDB4YTAsIDB4YmMsIDB4MWQsIDB4MDYsIDB4YTYsIDB4MWMsCi0gIDB4ZGYsIDB4YTksIDB4YmMsIDB4MzksIDB4ZDYsIDB4ZWUsIDB4MTcsIDB4OWEsIDB4MzAsIDB4NjIsIDB4ZWIsIDB4NWQsCi0gIDB4ZGIsIDB4ZDAsIDB4ODcsIDB4MmQsIDB4ZDksIDB4OWMsIDB4YzgsIDB4ZTEsIDB4MjcsIDB4NWEsIDB4MGUsIDB4MTIsCi0gIDB4MDksIDB4NmQsIDB4YjgsIDB4YTksIDB4YTAsIDB4OTAsIDB4YjIsIDB4MTUsIDB4YjUsIDB4YjIsIDB4N2IsIDB4Y2MsCi0gIDB4NjYsIDB4OTEsIDB4YjAsIDB4M2EsIDB4MjUsIDB4NTQsIDB4ODAsIDB4ZGEsIDB4ODQsIDB4ZDYsIDB4YjksIDB4YTksCi0gIDB4YmIsIDB4NzIsIDB4ZGEsIDB4NzQsIDB4NTUsIDB4ZWEsIDB4ZTcsIDB4NjMsIDB4MjcsIDB4NDIsIDB4YmMsIDB4MDMsCi0gIDB4OWYsIDB4NmEsIDB4NWUsIDB4ODMsIDB4MmIsIDB4NzUsIDB4MjQsIDB4YzksIDB4YzgsIDB4YWUsIDB4ZGUsIDB4NmUsCi0gIDB4OTcsIDB4MDcsIDB4MWIsIDB4YzgsIDB4ZTMsIDB4YjIsIDB4ZmUsIDB4NTEsIDB4MjUsIDB4OGMsIDB4MmQsIDB4ZWIsCi0gIDB4MWMsIDB4MTksIDB4NGIsIDB4ZmIsIDB4NTgsIDB4M2UsIDB4MWQsIDB4ZDQsIDB4NWEsIDB4ZDAsIDB4MTksIDB4MjUsCi0gIDB4OTAsIDB4M2QsIDB4NDQsIDB4OWQsIDB4ZDcsIDB4NmQsIDB4Y2QsIDB4OGMsIDB4M2YsIDB4NmYsIDB4YzgsIDB4YjgsCi0gIDB4N2YsIDB4ZWUsIDB4MTYsIDB4ZTQsIDB4OWEsIDB4OWQsIDB4N2EsIDB4NmEsIDB4YjMsIDB4YmIsIDB4YmMsIDB4OGQsCi0gIDB4OGUsIDB4OTksIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDQsIDB4ZTgsIDB4MzEsIDB4MDgsIDB4MTcsIDB4NzUsIDB4MzgsCi0gIDB4NDEsIDB4MjMsIDB4YTIsIDB4YTEsIDB4MDAsIDB4NDIsIDB4ODMsIDB4ZmEsIDB4OTQsIDB4NTAsIDB4ZTQsIDB4ZWUsCi0gIDB4MGQsIDB4YzcsIDB4ZDksIDB4MTYsIDB4NTcsIDB4YmUsIDB4OGIsIDB4ZGYsIDB4YjQsIDB4YWUsIDB4ZDAsIDB4YTAsCi0gIDB4YTcsIDB4ZDUsIDB4MTgsIDB4OWEsIDB4NDQsIDB4NGMsIDB4NTgsIDB4MWQsIDB4ZDQsIDB4YjQsIDB4MmQsIDB4MzksCi0gIDB4MzEsIDB4ZmEsIDB4OWQsIDB4MWEsIDB4N2EsIDB4YjQsIDB4OTgsIDB4Y2IsIDB4ZDksIDB4MjcsIDB4ZjIsIDB4YzQsCi0gIDB4YWMsIDB4NWYsIDB4NGMsIDB4NTEsIDB4NjMsIDB4YmYsIDB4NTYsIDB4MWEsIDB4ZTQsIDB4NzcsIDB4OGMsIDB4ZmMsCi0gIDB4YTEsIDB4NTcsIDB4YjYsIDB4NjgsIDB4NjYsIDB4ZWEsIDB4YjMsIDB4ZWEsIDB4NmEsIDB4Y2IsIDB4OGQsIDB4MmYsCi0gIDB4N2YsIDB4OGUsIDB4NDQsIDB4ZTAsIDB4MzIsIDB4NDAsIDB4OGMsIDB4NWEsIDB4MmEsIDB4MmQsIDB4ZTUsIDB4YjgsCi0gIDB4YzksIDB4MjEsIDB4MDksIDB4ZmIsIDB4Y2EsIDB4NzksIDB4MzQsIDB4NDcsIDB4YjAsIDB4OTAsIDB4OTQsIDB4NmYsCi0gIDB4ZGUsIDB4OTEsIDB4MTIsIDB4MWUsIDB4ZDUsIDB4MTUsIDB4ODIsIDB4NjksIDB4NGUsIDB4ZjAsIDB4NzAsIDB4MGEsCi0gIDB4Y2MsIDB4NDcsIDB4NTAsIDB4MDIsIDB4NGIsIDB4ZjgsIDB4YWUsIDB4ZjEsIDB4MTIsIDB4YzUsIDB4YzYsIDB4ZWUsCi0gIDB4NzMsIDB4MjEsIDB4MGQsIDB4M2UsIDB4YWYsIDB4MzMsIDB4NTksIDB4NDQsIDB4NWIsIDB4MzMsIDB4ZTcsIDB4ZGUsCi0gIDB4YzUsIDB4ZGQsIDB4MDUsIDB4ZmQsIDB4OWUsIDB4NWQsIDB4MWIsIDB4NTIsIDB4YmUsIDB4ZTksIDB4ZTIsIDB4ZTYsCi0gIDB4OTMsIDB4NDgsIDB4NzAsIDB4MjEsIDB4MWEsIDB4OTQsIDB4OTUsIDB4YmUsIDB4OGIsIDB4MDUsIDB4NDEsIDB4OTIsCi0gIDB4ZDgsIDB4NDYsIDB4MTAsIDB4NWYsIDB4NDEsIDB4NzAsIDB4NjgsIDB4ZTMsIDB4MTIsIDB4YzAsIDB4MDAsIDB4MmYsCi0gIDB4OTEsIDB4OTMsIDB4NDIsIDB4NDAsIDB4NDUsIDB4ZWUsIDB4ZDIsIDB4NmYsIDB4ODMsIDB4YjQsIDB4MmMsIDB4ZDEsCi0gIDB4MTAsIDB4MTAsIDB4ZmUsIDB4YzUsIDB4YTQsIDB4M2YsIDB4MWIsIDB4OTIsIDB4MzIsIDB4NTEsIDB4MjksIDB4MmEsCi0gIDB4YmEsIDB4NWQsIDB4ZmMsIDB4NWIsIDB4NDQsIDB4MTYsIDB4NmIsIDB4ZmYsIDB4MzcsIDB4MDMsIDB4MzMsIDB4ZWUsCi0gIDB4MzUsIDB4YzUsIDB4NzUsIDB4YWUsIDB4MTUsIDB4ZDIsIDB4MzAsIDB4ZDYsIDB4NWQsIDB4ZTAsIDB4ZTYsIDB4OGMsCi0gIDB4NzIsIDB4MmIsIDB4OTksIDB4NTQsIDB4NjYsIDB4YTksIDB4ZWIsIDB4NWYsIDB4Y2IsIDB4MDIsIDB4YzcsIDB4M2IsCi0gIDB4YTEsIDB4MWMsIDB4NGEsIDB4ODQsIDB4ZjYsIDB4ZmIsIDB4M2EsIDB4NGIsIDB4NzYsIDB4ODMsIDB4MmYsIDB4YTQsCi0gIDB4NjAsIDB4ODEsIDB4NDgsIDB4NDYsIDB4NzEsIDB4OTMsIDB4NzQsIDB4NTAsIDB4ZWMsIDB4YTksIDB4ZjgsIDB4ZTUsCi0gIDB4NTYsIDB4MDksIDB4YmIsIDB4N2EsIDB4OTQsIDB4YzAsIDB4OGMsIDB4ZjYsIDB4OTksIDB4N2MsIDB4ZDUsIDB4MzUsCi0gIDB4MDQsIDB4NDUsIDB4NDYsIDB4NDAsIDB4MzQsIDB4OTIsIDB4YzQsIDB4YTEsIDB4YzEsIDB4MzIsIDB4NjEsIDB4NTAsCi0gIDB4NjcsIDB4ZGUsIDB4YmMsIDB4ZGIsIDB4ZDIsIDB4ODUsIDB4MmUsIDB4MDEsIDB4NDIsIDB4YTMsIDB4MjksIDB4NzcsCi0gIDB4YzEsIDB4YTUsIDB4NDIsIDB4ZTQsIDB4ODQsIDB4ODQsIDB4NTUsIDB4MzgsIDB4MTAsIDB4ZGQsIDB4OTgsIDB4NmMsCi0gIDB4ZjUsIDB4YWUsIDB4ZjksIDB4ZTgsIDB4ODQsIDB4NzIsIDB4OWIsIDB4ZWMsIDB4YjksIDB4MWYsIDB4YTIsIDB4MDcsCi0gIDB4NDIsIDB4YTUsIDB4YmUsIDB4NzMsIDB4NjksIDB4N2IsIDB4MWMsIDB4ZDQsIDB4ZjcsIDB4MTksIDB4NGQsIDB4MmIsCi0gIDB4NjIsIDB4NGIsIDB4NDQsIDB4ZTYsIDB4YTUsIDB4NjYsIDB4YWIsIDB4ZmMsIDB4YWEsIDB4NjMsIDB4M2MsIDB4YjEsCi0gIDB4ZTIsIDB4NjIsIDB4YTQsIDB4ZDcsIDB4Y2IsIDB4MmUsIDB4ZTgsIDB4ODAsIDB4N2QsIDB4MGMsIDB4YjYsIDB4NjgsCi0gIDB4YzAsIDB4YzcsIDB4ZjQsIDB4ZmIsIDB4ODEsIDB4NjUsIDB4YjQsIDB4NmYsIDB4NTgsIDB4YjIsIDB4MTEsIDB4ZDgsCi0gIDB4N2YsIDB4NjMsIDB4ZGQsIDB4NTcsIDB4MTMsIDB4YjQsIDB4MjMsIDB4NTgsIDB4NDQsIDB4MzYsIDB4ODgsIDB4OTAsCi0gIDB4YWUsIDB4YzEsIDB4NGMsIDB4MGUsIDB4YzcsIDB4MTAsIDB4MjUsIDB4YzMsIDB4MDcsIDB4NjksIDB4MjUsIDB4MGMsCi0gIDB4OWMsIDB4N2MsIDB4ZGYsIDB4NzQsIDB4MjQsIDB4NmQsIDB4MTAsIDB4ZTEsIDB4OTIsIDB4MDQsIDB4NDIsIDB4MGEsCi0gIDB4OTAsIDB4ZTMsIDB4ODIsIDB4OTMsIDB4NGQsIDB4MzEsIDB4MDgsIDB4ZTMsIDB4OTQsIDB4MTAsIDB4YzUsIDB4ZTAsCi0gIDB4YTYsIDB4NzQsIDB4NDMsIDB4YTcsIDB4YmMsIDB4ZTcsIDB4OGMsIDB4NTUsIDB4ZDksIDB4OGUsIDB4ZWQsIDB4ODgsCi0gIDB4YWYsIDB4NmIsIDB4NTgsIDB4ODEsIDB4ZjIsIDB4ZGQsIDB4MmIsIDB4MTEsIDB4NjksIDB4ZDYsIDB4OTMsIDB4NmUsCi0gIDB4ZmMsIDB4ZGUsIDB4MWQsIDB4NGQsIDB4MWUsIDB4YWYsIDB4OTUsIDB4NDMsIDB4MzIsIDB4NGMsIDB4M2MsIDB4M2MsCi0gIDB4YWUsIDB4NWUsIDB4YmYsIDB4NWQsIDB4YWIsIDB4Y2IsIDB4ZmIsIDB4YTgsIDB4ZGQsIDB4YWYsIDB4MDQsIDB4NmMsCi0gIDB4YTUsIDB4NTQsIDB4YzIsIDB4OWUsIDB4OGQsIDB4MGUsIDB4ZWYsIDB4NTcsIDB4MmUsIDB4OGQsIDB4ZDksIDB4YjYsCi0gIDB4MTQsIDB4ZGIsIDB4NWIsIDB4MWEsIDB4MGYsIDB4NmUsIDB4NzUsIDB4YzgsIDB4OTksIDB4ZDQsIDB4MDgsIDB4YjQsCi0gIDB4NjIsIDB4YzAsIDB4NzYsIDB4MGIsIDB4NDEsIDB4NDcsIDB4MzMsIDB4NmYsIDB4NjcsIDB4Y2YsIDB4NTYsIDB4MzYsCi0gIDB4OGMsIDB4MzcsIDB4MDAsIDB4NTAsIDB4NGMsIDB4MDIsIDB4NWQsIDB4M2IsIDB4NjgsIDB4YzYsIDB4ZDYsIDB4MDQsCi0gIDB4MDAsIDB4MTYsIDB4OGMsIDB4OTgsIDB4NDMsIDB4M2QsIDB4YjgsIDB4ZjQsIDB4YWMsIDB4ODUsIDB4MjksIDB4MGIsCi0gIDB4YzQsIDB4OWEsIDB4ZTAsIDB4MjYsIDB4MzQsIDB4MWMsIDB4YjksIDB4N2IsIDB4YTYsIDB4NjIsIDB4YzksIDB4ZDUsCi0gIDB4ODIsIDB4N2YsIDB4M2QsIDB4M2UsIDB4MzgsIDB4NDYsIDB4MjIsIDB4ZGYsIDB4NmQsIDB4NmMsIDB4MGYsIDB4M2YsCi0gIDB4Y2MsIDB4M2QsIDB4NzUsIDB4N2YsIDB4MDQsIDB4OTAsIDB4OTYsIDB4YjksIDB4ZTQsIDB4M2IsIDB4YWQsIDB4MTAsCi0gIDB4NzAsIDB4MjEsIDB4MWEsIDB4OTQsIDB4YWQsIDB4YmUsIDB4OGMsIDB4YzQsIDB4MjIsIDB4OTgsIDB4ODksIDB4NDEsCi0gIDB4NWQsIDB4MWQsIDB4MGUsIDB4ODAsIDB4ZTEsIDB4NTYsIDB4MDAsIDB4MDAsIDB4MDYsIDB4YmUsIDB4YTksIDB4YzUsCi0gIDB4ZGQsIDB4YjQsIDB4MzksIDB4NjgsIDB4MjMsIDB4NTYsIDB4YTMsIDB4ZWYsIDB4M2MsIDB4ZmYsIDB4YmQsIDB4NzUsCi0gIDB4NmMsIDB4ZjgsIDB4YzgsIDB4MjcsIDB4ZTUsIDB4MjMsIDB4OWYsIDB4MjEsIDB4OGUsIDB4ZWMsIDB4ZDEsIDB4ZWUsCi0gIDB4NWQsIDB4ZWIsIDB4ZDIsIDB4NzgsIDB4NWQsIDB4OTcsIDB4ZDEsIDB4OTYsIDB4MTYsIDB4MjEsIDB4OTQsIDB4MWUsCi0gIDB4YjAsIDB4Y2EsIDB4YzAsIDB4MjIsIDB4ZTksIDB4MGYsIDB4MGMsIDB4YWEsIDB4YjIsIDB4YzQsIDB4YzEsIDB4YzcsCi0gIDB4OTEsIDB4YWMsIDB4YjIsIDB4OGIsIDB4MDYsIDB4OTQsIDB4ZTksIDB4MTcsIDB4YmYsIDB4MWEsIDB4OWIsIDB4OGMsCi0gIDB4MTksIDB4YWMsIDB4ZGUsIDB4YTksIDB4NjQsIDB4MjUsIDB4ZDksIDB4MjgsIDB4MTYsIDB4MzYsIDB4MmQsIDB4NDUsCi0gIDB4OTYsIDB4MTksIDB4ZWYsIDB4MGQsIDB4ZDAsIDB4NWUsIDB4OWUsIDB4MWYsIDB4NzQsIDB4YWQsIDB4MDEsIDB4OWQsCi0gIDB4MmEsIDB4OWEsIDB4YmIsIDB4ZTUsIDB4YjksIDB4ZTksIDB4ZWYsIDB4ZjcsIDB4YmIsIDB4ZDcsIDB4ZmMsIDB4M2YsCi0gIDB4ODcsIDB4MTcsIDB4ZDYsIDB4YmQsIDB4OTcsIDB4ZjIsIDB4ZWQsIDB4ZTcsIDB4OWMsIDB4ZjksIDB4M2MsIDB4YzUsCi0gIDB4OWEsIDB4MzgsIDB4MzksIDB4OWIsIDB4YWIsIDB4ZTQsIDB4MWEsIDB4NmMsIDB4Y2EsIDB4YmQsIDB4ODYsIDB4MzgsCi0gIDB4OTAsIDB4YzcsIDB4YzYsIDB4MTUsIDB4ZTAsIDB4OGYsIDB4MjQsIDB4OTMsIDB4NjksIDB4MDIsIDB4YmUsIDB4OTQsCi0gIDB4MjAsIDB4ZmIsIDB4ODMsIDB4ZTgsIDB4Y2MsIDB4NDcsIDB4ZTYsIDB4MmQsIDB4MmEsIDB4MjMsIDB4MDUsIDB4ODksCi0gIDB4NzYsIDB4NWEsIDB4MDksIDB4OTYsIDB4MmQsIDB4YTYsIDB4NWQsIDB4MjQsIDB4NmEsIDB4NWMsIDB4ODEsIDB4OGQsCi0gIDB4OTksIDB4NTQsIDB4OTEsIDB4ZDYsIDB4NjEsIDB4N2EsIDB4NjIsIDB4NjgsIDB4YzEsIDB4NjQsIDB4NTAsIDB4MGEsCi0gIDB4ZTUsIDB4MjMsIDB4M2UsIDB4YjQsIDB4NmYsIDB4MzMsIDB4M2EsIDB4ODAsIDB4MDAsIDB4NjAsIDB4MzAsIDB4NzYsCi0gIDB4ZGUsIDB4ZWYsIDB4NDQsIDB4YzAsIDB4NzMsIDB4YTksIDB4MzMsIDB4YmUsIDB4NjQsIDB4YTYsIDB4YWUsIDB4ODIsCi0gIDB4NmQsIDB4ODAsIDB4MDEsIDB4MWYsIDB4NjcsIDB4YTQsIDB4NDEsIDB4ZDQsIDB4NjMsIDB4MTAsIDB4MDIsIDB4NDksCi0gIDB4YTYsIDB4NWQsIDB4YjQsIDB4Y2IsIDB4NWEsIDB4NTIsIDB4MjAsIDB4YzEsIDB4OTYsIDB4MTcsIDB4MzUsIDB4OWUsCi0gIDB4MDYsIDB4NzUsIDB4OTEsIDB4MjYsIDB4NjEsIDB4ZmYsIDB4NzYsIDB4YzcsIDB4MGUsIDB4N2EsIDB4YjgsIDB4ZWEsCi0gIDB4NzAsIDB4MTMsIDB4MmIsIDB4YzksIDB4MjAsIDB4MzksIDB4M2MsIDB4M2UsIDB4NDUsIDB4OGMsIDB4YjAsIDB4YzIsCi0gIDB4ZDUsIDB4NGMsIDB4OGYsIDB4MDEsIDB4YTAsIDB4NGUsIDB4ZDgsIDB4ZjQsIDB4M2EsIDB4M2UsIDB4MWYsIDB4NWYsCi0gIDB4M2MsIDB4ODUsIDB4ZWYsIDB4ZjcsIDB4NWIsIDB4NWQsIDB4Y2YsIDB4NGYsIDB4ZDQsIDB4ZWEsIDB4ODksIDB4ZTcsCi0gIDB4YzMsIDB4NDUsIDB4MGYsIDB4YzIsIDB4YWUsIDB4NzIsIDB4OTgsIDB4NTYsIDB4M2MsIDB4ZmMsIDB4NzUsIDB4MGUsCi0gIDB4ZWYsIDB4NzYsIDB4Y2QsIDB4NTAsIDB4NTgsIDB4ZGEsIDB4ZmQsIDB4ZWMsIDB4M2IsIDB4NzUsIDB4NGQsIDB4ZTMsCi0gIDB4NGEsIDB4YjksIDB4NDQsIDB4NDIsIDB4NTgsIDB4Y2EsIDB4NjAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4ZTUsIDB4NzcsCi0gIDB4NGEsIDB4NWYsIDB4MmEsIDB4OTYsIDB4ODYsIDB4ZTMsIDB4MDEsIDB4MzIsIDB4MGUsIDB4NmIsIDB4ZGUsIDB4YzksCi0gIDB4MTUsIDB4MTUsIDB4NDUsIDB4NTQsIDB4MjYsIDB4MmUsIDB4NDUsIDB4NDAsIDB4NWUsIDB4Y2IsIDB4MjksIDB4ZDUsCi0gIDB4OTUsIDB4NGQsIDB4MmEsIDB4MDgsIDB4MjIsIDB4ZjksIDB4NWUsIDB4NzQsIDB4ZTgsIDB4ZTEsIDB4MjUsIDB4MjcsCi0gIDB4ZjAsIDB4NjIsIDB4OTUsIDB4OTMsIDB4NGEsIDB4MGEsIDB4MmMsIDB4MjYsIDB4YWMsIDB4ZDAsIDB4NjgsIDB4NjAsCi0gIDB4OTUsIDB4ZDksIDB4MWIsIDB4N2YsIDB4M2IsIDB4YWMsIDB4MGEsIDB4NzcsIDB4ZjAsIDB4MjEsIDB4ZTUsIDB4YzYsCi0gIDB4N2UsIDB4NWQsIDB4N2MsIDB4N2UsIDB4NzAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OGQsIDB4Y2YsIDB4OTAsIDB4MWYsCi0gIDB4ZmYsIDB4ZmYsIDB4MmQsIDB4NmYsIDB4ODIsIDB4MzEsIDB4NTAsIDB4NDYsIDB4YjIsIDB4MWEsIDB4MDQsIDB4NDIsCi0gIDB4MWUsIDB4NjMsIDB4OWIsIDB4YjYsIDB4YTIsIDB4YzksIDB4NjksIDB4YmUsIDB4MTAsIDB4MDQsIDB4YTEsIDB4MDAsCi0gIDB4MmEsIDB4NDksIDB4ZTEsIDB4NzQsIDB4N2EsIDB4ZjcsIDB4NzEsIDB4ZmQsIDB4MjUsIDB4YzUsIDB4ZjgsIDB4MzIsCi0gIDB4MDEsIDB4MTcsIDB4NjMsIDB4YWMsIDB4NDksIDB4YTQsIDB4YmUsIDB4ZTksIDB4ZDgsIDB4OWYsIDB4ZjMsIDB4ZjUsCi0gIDB4YTQsIDB4ZjUsIDB4ODksIDB4YjksIDB4NzIsIDB4ZTUsIDB4YjAsIDB4YzUsIDB4ODgsIDB4NjksIDB4MTksIDB4YzQsCi0gIDB4NDMsIDB4NTcsIDB4YzcsIDB4MzMsIDB4OGEsIDB4YTYsIDB4NzIsIDB4ZGEsIDB4YjYsIDB4MTUsIDB4OWMsIDB4YjMsCi0gIDB4N2MsIDB4YjAsIDB4NmMsIDB4MjYsIDB4MTAsIDB4ODYsIDB4NWUsIDB4NzUsIDB4NTYsIDB4YTMsIDB4ODAsIDB4NGIsCi0gIDB4YWYsIDB4Y2EsIDB4ZjksIDB4YTMsIDB4YzQsIDB4OWQsIDB4NmYsIDB4ZWMsIDB4NGUsIDB4NjgsIDB4NjgsIDB4NTgsCi0gIDB4YjksIDB4NDQsIDB4MzcsIDB4NmMsIDB4NzYsIDB4ODAsIDB4MDksIDB4ODQsIDB4YTEsIDB4N2MsIDB4YTMsIDB4MWQsCi0gIDB4ZjQsIDB4ZDYsIDB4ODMsIDB4ODUsIDB4ZDcsIDB4NzksIDB4MDQsIDB4NzMsIDB4ODIsIDB4MGQsIDB4MDgsIDB4YzYsCi0gIDB4OTgsIDB4MTUsIDB4YjIsIDB4ZjksIDB4OTQsIDB4NjMsIDB4MDcsIDB4YTUsIDB4NmUsIDB4MTksIDB4MzQsIDB4ZDcsCi0gIDB4NGMsIDB4YmUsIDB4OTEsIDB4NmIsIDB4Y2UsIDB4MzEsIDB4OWIsIDB4NWEsIDB4MTMsIDB4YzgsIDB4MTYsIDB4ODQsCi0gIDB4NmUsIDB4ZDEsIDB4ZDYsIDB4YjYsIDB4Y2QsIDB4YTMsIDB4M2IsIDB4YzgsIDB4ZGQsIDB4NjQsIDB4ZWYsIDB4ZjUsCi0gIDB4MDgsIDB4NzUsIDB4N2EsIDB4NTAsIDB4YjEsIDB4NzcsIDB4MmUsIDB4OTIsIDB4YzEsIDB4ZDgsIDB4YWEsIDB4ODMsCi0gIDB4MTQsIDB4MTEsIDB4ODgsIDB4NWIsIDB4NDIsIDB4NTcsIDB4NTIsIDB4NTIsIDB4ZjksIDB4YmEsIDB4YTgsIDB4MzEsCi0gIDB4ZWIsIDB4ODIsIDB4ODEsIDB4M2QsIDB4MjksIDB4MzcsIDB4N2QsIDB4MzgsIDB4NDgsIDB4YWIsIDB4MGQsIDB4YTMsCi0gIDB4NTAsIDB4MmIsIDB4MjgsIDB4Y2QsIDB4MjksIDB4ZmMsIDB4NDYsIDB4ZjMsIDB4MzksIDB4NjUsIDB4NTgsIDB4MjQsCi0gIDB4NmMsIDB4ZjQsIDB4NWIsIDB4MTUsIDB4MjEsIDB4MDQsIDB4MmUsIDB4MjIsIDB4MDAsIDB4NjgsIDB4ODAsIDB4ZDQsCi0gIDB4NWMsIDB4NjgsIDB4YjEsIDB4NDIsIDB4NjEsIDB4MDAsIDB4MzksIDB4YmEsIDB4ZWYsIDB4NGUsIDB4ZTIsIDB4ZWEsCi0gIDB4YmUsIDB4NjEsIDB4YzcsIDB4NWUsIDB4MjYsIDB4ZGUsIDB4ZTIsIDB4ODIsIDB4MmUsIDB4NDEsIDB4MjIsIDB4YTgsCi0gIDB4ODksIDB4OTMsIDB4ZTUsIDB4Y2UsIDB4ZWYsIDB4ZTksIDB4OTQsIDB4ZDAsIDB4ZDAsIDB4MzYsIDB4MDksIDB4NzYsCi0gIDB4MWUsIDB4ZDksIDB4OWQsIDB4ZWIsIDB4ZWMsIDB4NjcsIDB4ZDEsIDB4ZWIsIDB4OWMsIDB4YmIsIDB4OTIsIDB4MzYsCi0gIDB4M2YsIDB4YTIsIDB4NTMsIDB4NzEsIDB4MzQsIDB4ZTQsIDB4OGQsIDB4MmEsIDB4Y2MsIDB4ZWYsIDB4Y2YsIDB4YjksCi0gIDB4MjQsIDB4ZDYsIDB4Y2EsIDB4MWMsIDB4Y2YsIDB4ZWIsIDB4ZTUsIDB4NzAsIDB4MWYsIDB4NGUsIDB4ZDYsIDB4ZmQsCi0gIDB4NGQsIDB4YjAsIDB4NmUsIDB4YmEsIDB4MzQsIDB4ZjIsIDB4MzEsIDB4ZWYsIDB4MWIsIDB4MTQsIDB4MjYsIDB4OGEsCi0gIDB4M2QsIDB4Y2EsIDB4YWEsIDB4MjcsIDB4ZjcsIDB4ZjUsIDB4MDYsIDB4MWUsIDB4NGQsIDB4NjYsIDB4YWUsIDB4YzEsCi0gIDB4NDgsIDB4MDcsIDB4NGUsIDB4YjQsIDB4MzcsIDB4YzEsIDB4NDAsIDB4MzMsIDB4NTUsIDB4M2YsIDB4MTQsIDB4ZGQsCi0gIDB4MDIsIDB4OGIsIDB4MTMsIDB4OWIsIDB4OTQsIDB4NjAsIDB4MDQsIDB4M2MsIDB4MTUsIDB4YjgsIDB4OWQsIDB4NTAsCi0gIDB4OGYsIDB4MzEsIDB4N2IsIDB4MDUsIDB4YTMsIDB4NjgsIDB4MjksIDB4YWEsIDB4YmYsIDB4MzksIDB4N2QsIDB4ZWQsCi0gIDB4MjgsIDB4MTEsIDB4NGIsIDB4M2EsIDB4YTcsIDB4MGQsIDB4M2MsIDB4N2QsIDB4ZTMsIDB4N2EsIDB4NDgsIDB4YTYsCi0gIDB4MTYsIDB4YWEsIDB4ZTgsIDB4MjUsIDB4MTEsIDB4N2IsIDB4NWEsIDB4YWIsIDB4NGQsIDB4ZWQsIDB4MGMsIDB4NWUsCi0gIDB4NjcsIDB4NmUsIDB4MjgsIDB4ODQsIDB4ZjQsIDB4MmIsIDB4MTgsIDB4MzgsIDB4NTYsIDB4MjEsIDB4ZWEsIDB4MzQsCi0gIDB4MmQsIDB4NTYsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OGYsIDB4Y2UsIDB4MTgsIDB4MWYsIDB4ZmYsCi0gIDB4ZmYsIDB4MmQsIDB4NzAsIDB4ODEsIDB4YjEsIDB4ODgsIDB4ODIsIDB4YTMsIDB4MWIsIDB4NTgsIDB4YjgsIDB4ZDQsCi0gIDB4MmUsIDB4YjgsIDB4MTEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDUsIDB4MDcsIDB4MmYsIDB4YTksIDB4NzEsIDB4ZmYsCi0gIDB4ZDQsIDB4MzEsIDB4ZjgsIDB4ZjcsIDB4OWYsIDB4NDIsIDB4NzAsIDB4MGIsIDB4OWUsIDB4OTUsIDB4YTQsIDB4MzMsCi0gIDB4NDUsIDB4Y2IsIDB4ZGUsIDB4NzgsIDB4NGUsIDB4MTcsIDB4ZWMsIDB4YmMsIDB4ZGQsIDB4ZjgsIDB4OGUsIDB4M2YsCi0gIDB4YjIsIDB4ZTIsIDB4ZjAsIDB4ZjMsIDB4ZmIsIDB4NzcsIDB4MzQsIDB4YTIsIDB4YTQsIDB4NzEsIDB4OGYsIDB4YjYsCi0gIDB4MzksIDB4YzYsIDB4OTgsIDB4OTEsIDB4MWIsIDB4YWYsIDB4ZmUsIDB4N2IsIDB4OTcsIDB4NTAsIDB4ZTMsIDB4ZDAsCi0gIDB4YjAsIDB4NzgsIDB4M2IsIDB4MmIsIDB4Y2QsIDB4YzQsIDB4NWQsIDB4YWIsIDB4ZTQsIDB4ZTMsIDB4NTUsIDB4NWQsCi0gIDB4Y2EsIDB4ZTksIDB4NmMsIDB4ZTMsIDB4NDEsIDB4NzksIDB4ODksIDB4ZjYsIDB4NTQsIDB4MzIsIDB4YjMsIDB4YTQsCi0gIDB4NjAsIDB4N2IsIDB4ZTcsIDB4MzIsIDB4NzYsIDB4ZjIsIDB4ZDIsIDB4MjUsIDB4NTUsIDB4YTUsIDB4NjEsIDB4ZDQsCi0gIDB4OWEsIDB4ZTcsIDB4Y2EsIDB4NGMsIDB4ZDYsIDB4YTIsIDB4MDgsIDB4YmEsIDB4ZjgsIDB4OGEsIDB4MmIsIDB4YjAsCi0gIDB4YzQsIDB4MGEsIDB4NDgsIDB4ZTEsIDB4YjksIDB4NDQsIDB4NWMsIDB4ODEsIDB4OTAsIDB4YTQsIDB4MjAsIDB4MWQsCi0gIDB4NDcsIDB4MmIsIDB4MWMsIDB4Y2UsIDB4NjUsIDB4YTAsIDB4NjUsIDB4ZjgsIDB4Y2MsIDB4ZTEsIDB4NzcsIDB4OWUsCi0gIDB4NmIsIDB4MTIsIDB4YWYsIDB4YWQsIDB4YjksIDB4NDcsIDB4ZmUsIDB4Y2QsIDB4MzgsIDB4N2IsIDB4YTcsIDB4NjAsCi0gIDB4ODYsIDB4ZTQsIDB4YjcsIDB4NjYsIDB4OGMsIDB4NjAsIDB4OGEsIDB4NDgsIDB4YTEsIDB4OTYsIDB4NTMsIDB4YzgsCi0gIDB4MjcsIDB4YjcsIDB4ZGYsIDB4YTcsIDB4MGEsIDB4NWEsIDB4NTEsIDB4YTQsIDB4YTAsIDB4ZTEsIDB4NmUsIDB4NzEsCi0gIDB4NjMsIDB4YmQsIDB4YWIsIDB4NWYsIDB4ZWIsIDB4ZTEsIDB4YTAsIDB4OWEsIDB4NTgsIDB4YmIsIDB4MjgsIDB4NmUsCi0gIDB4MzQsIDB4MzYsIDB4ZWIsIDB4MzgsIDB4MDQsIDB4YjUsIDB4YmEsIDB4OTAsIDB4NjYsIDB4MTcsIDB4MjQsIDB4MWIsCi0gIDB4YmIsIDB4ZDEsIDB4NzYsIDB4ODUsIDB4OTYsIDB4YjYsIDB4YTEsIDB4NDQsIDB4YTUsIDB4MDAsIDB4MTQsIDB4NmMsCi0gIDB4MjYsIDB4MTcsIDB4NDcsIDB4MWIsIDB4YzEsIDB4ZjQsIDB4OTMsIDB4NWIsIDB4YWEsIDB4YTksIDB4ZmQsIDB4NDQsCi0gIDB4YWIsIDB4MWEsIDB4NWEsIDB4MjYsIDB4MjgsIDB4NzQsIDB4ZjMsIDB4YjgsIDB4NDcsIDB4NjQsIDB4MjIsIDB4MjcsCi0gIDB4YWYsIDB4NTgsIDB4ZTMsIDB4OGIsIDB4MDcsIDB4OWYsIDB4NTAsIDB4ZTQsIDB4OGUsIDB4ZTYsIDB4ZWQsIDB4ZTksCi0gIDB4MGQsIDB4N2YsIDB4ZGUsIDB4NWQsIDB4YWUsIDB4ZDksIDB4MDIsIDB4NjEsIDB4MTUsIDB4NWIsIDB4MzQsIDB4NmMsCi0gIDB4MjAsIDB4MmQsIDB4MzksIDB4MzUsIDB4NjksIDB4M2IsIDB4ZGUsIDB4ZTEsIDB4NjEsIDB4YzgsIDB4ZGMsIDB4YjAsCi0gIDB4NzUsIDB4MzcsIDB4ODIsIDB4NGEsIDB4ODIsIDB4ZGQsIDB4YTgsIDB4MzksIDB4ODUsIDB4NDcsIDB4ODAsIDB4NGIsCi0gIDB4NDgsIDB4YmUsIDB4ZGEsIDB4ZjQsIDB4YzUsIDB4NzksIDB4ODIsIDB4OTIsIDB4YmYsIDB4MGEsIDB4ODQsIDB4OWQsCi0gIDB4NjYsIDB4NTgsIDB4M2YsIDB4ZDYsIDB4YzAsIDB4ZTMsIDB4ZDcsIDB4ZTAsIDB4ZTEsIDB4MWMsIDB4NjYsIDB4MDgsCi0gIDB4ZDUsIDB4NDksIDB4OTQsIDB4NjksIDB4MDAsIDB4MmQsIDB4M2MsIDB4NjEsIDB4NjEsIDB4MjEsIDB4MTQsIDB4NGMsCi0gIDB4ZTksIDB4MmEsIDB4MWQsIDB4NGMsIDB4ZDcsIDB4ZDksIDB4MDcsIDB4ZDQsIDB4NDIsIDB4MDksIDB4YjUsIDB4NDcsCi0gIDB4YmEsIDB4NzcsIDB4ODYsIDB4NTIsIDB4YTIsIDB4YTgsIDB4NWUsIDB4YTUsIDB4NmIsIDB4NDAsIDB4NmEsIDB4NzMsCi0gIDB4NDcsIDB4MmUsIDB4MGMsIDB4MmIsIDB4NGIsIDB4ODcsIDB4YmYsIDB4NjUsIDB4MWYsIDB4ZDYsIDB4NDQsIDB4ZjcsCi0gIDB4MmIsIDB4NGUsIDB4OWYsIDB4NjksIDB4ZmYsIDB4MGMsIDB4NTcsIDB4MGUsIDB4MjEsIDB4MmEsIDB4OGYsIDB4ODcsCi0gIDB4NWQsIDB4M2IsIDB4ZmYsIDB4ZmYsIDB4MjUsIDB4NjcsIDB4YTYsIDB4NDAsIDB4ZDgsIDB4NjIsIDB4YjIsIDB4MjgsCi0gIDB4ODQsIDB4MTksIDB4YTUsIDB4YWYsIDB4M2EsIDB4NTUsIDB4NmEsIDB4MjIsIDB4YzgsIDB4MDQsIDB4YTEsIDB4MDAsCi0gIDB4MjEsIDB4ZDUsIDB4MDAsIDB4MzMsIDB4MDEsIDB4MjgsIDB4NDYsIDB4MjQsIDB4MTMsIDB4ZGQsIDB4NmUsIDB4OTcsCi0gIDB4NDksIDB4ZDAsIDB4OTYsIDB4MTMsIDB4NGQsIDB4MTksIDB4NGQsIDB4ZmIsIDB4OGUsIDB4NTAsIDB4YjUsIDB4NzQsCi0gIDB4NTksIDB4MGYsIDB4OTQsIDB4ZGUsIDB4ZGYsIDB4NmMsIDB4ZDgsIDB4OWUsIDB4NWIsIDB4YmIsIDB4NTQsIDB4ODEsCi0gIDB4MzQsIDB4ZjUsIDB4NjAsIDB4YjAsIDB4ZGIsIDB4NmYsIDB4ZWQsIDB4NzIsIDB4MzMsIDB4ZjksIDB4ZGYsIDB4ZjAsCi0gIDB4ZmIsIDB4ZTYsIDB4OGIsIDB4NjIsIDB4OGIsIDB4MmMsIDB4N2UsIDB4NzgsIDB4NGMsIDB4NmMsIDB4OGIsIDB4YTYsCi0gIDB4MTUsIDB4YjgsIDB4MDksIDB4ZjUsIDB4NzQsIDB4ZWUsIDB4YjMsIDB4NDAsIDB4OTQsIDB4OWYsIDB4NWQsIDB4MTEsCi0gIDB4MDMsIDB4N2MsIDB4NGYsIDB4MWQsIDB4YjIsIDB4YzksIDB4NjgsIDB4NGIsIDB4NWUsIDB4ZmUsIDB4MWQsIDB4MDAsCi0gIDB4ZTQsIDB4MTMsIDB4NzMsIDB4YWMsIDB4ZmIsIDB4ZTYsIDB4YmUsIDB4NzUsIDB4MTQsIDB4N2UsIDB4ZjIsIDB4OWMsCi0gIDB4ZTQsIDB4MDksIDB4ZTYsIDB4MTEsIDB4NGIsIDB4NjYsIDB4MzQsIDB4NGUsIDB4ZjAsIDB4ZmQsIDB4MjIsIDB4OGIsCi0gIDB4YTYsIDB4N2MsIDB4NjAsIDB4ZjUsIDB4YzIsIDB4NWQsIDB4YTYsIDB4ZTcsIDB4NmIsIDB4NGEsIDB4MzEsIDB4NDEsCi0gIDB4YTYsIDB4NmQsIDB4MzIsIDB4OTIsIDB4NDIsIDB4ZGYsIDB4M2IsIDB4ZDUsIDB4ZGEsIDB4NWQsIDB4YmQsIDB4YmMsCi0gIDB4ZTksIDB4YmQsIDB4MDksIDB4ODcsIDB4NmUsIDB4MjgsIDB4YjEsIDB4NTIsIDB4MTUsIDB4YjIsIDB4OTQsIDB4YTEsCi0gIDB4MjQsIDB4NDEsIDB4YmMsIDB4NWQsIDB4NWUsIDB4NmMsIDB4M2YsIDB4YTAsIDB4YzAsIDB4NGEsIDB4Y2IsIDB4OWMsCi0gIDB4NTMsIDB4N2MsIDB4OTIsIDB4NTMsIDB4ZTksIDB4MzEsIDB4YmUsIDB4N2YsIDB4ZTUsIDB4NDYsIDB4ZDgsIDB4OTEsCi0gIDB4NWIsIDB4NmEsIDB4ZWEsIDB4Y2IsIDB4M2YsIDB4MTEsIDB4ZTYsIDB4NmIsIDB4ZTAsIDB4MTIsIDB4ZjYsIDB4OGEsCi0gIDB4NjksIDB4OTgsIDB4MDQsIDB4MmQsIDB4MzMsIDB4NGUsIDB4ODgsIDB4YjUsIDB4ZDEsIDB4NmIsIDB4NGEsIDB4ZDIsCi0gIDB4MzQsIDB4MjgsIDB4OGQsIDB4ZDgsIDB4MDYsIDB4YWEsIDB4MDksIDB4YWYsIDB4YTAsIDB4NWEsIDB4N2MsIDB4OTAsCi0gIDB4YTksIDB4YmMsIDB4NzUsIDB4ZGQsIDB4YTYsIDB4OWMsIDB4MGMsIDB4ZTQsIDB4MjcsIDB4MGUsIDB4NWQsIDB4NWUsCi0gIDB4ODgsIDB4ZGYsIDB4MmEsIDB4ODksIDB4NWUsIDB4MjMsIDB4ZDQsIDB4OWQsIDB4YWEsIDB4OTcsIDB4YjcsIDB4ZTcsCi0gIDB4ZmMsIDB4ZmUsIDB4NzEsIDB4MWUsIDB4ZGUsIDB4NGUsIDB4MzIsIDB4Y2QsIDB4OGQsIDB4ZjQsIDB4NmYsIDB4MzcsCi0gIDB4NTcsIDB4OGMsIDB4MGEsIDB4YWEsIDB4ZWEsIDB4MTgsIDB4YTMsIDB4NzAsIDB4OGUsIDB4MTgsIDB4MTcsIDB4YzgsCi0gIDB4NDEsIDB4NGMsIDB4Y2MsIDB4YTgsIDB4NjgsIDB4MTQsIDB4YWIsIDB4Y2MsIDB4MDEsIDB4MzIsIDB4MzUsIDB4ZjEsCi0gIDB4ZjEsIDB4YmUsIDB4NjEsIDB4YTMsIDB4OGUsIDB4ODEsIDB4ZDMsIDB4YmIsIDB4NzYsIDB4ZWUsIDB4OWUsIDB4ZjMsCi0gIDB4NmUsIDB4MWMsIDB4NmQsIDB4ZjAsIDB4YzcsIDB4MTYsIDB4ZGIsIDB4M2MsIDB4NDAsIDB4NTIsIDB4MmIsIDB4Y2QsCi0gIDB4NDgsIDB4YjgsIDB4YTAsIDB4MzMsIDB4OWQsIDB4ODEsIDB4NDgsIDB4YjEsIDB4MjgsIDB4MTAsIDB4NTYsIDB4ZjcsCi0gIDB4MmYsIDB4MGIsIDB4ODAsIDB4NTIsIDB4MDksIDB4NDEsIDB4OTEsIDB4NjUsIDB4NmUsIDB4MDAsIDB4MGIsIDB4NGIsCi0gIDB4MWEsIDB4ZDksIDB4ZjEsIDB4NDEsIDB4NzQsIDB4NTQsIDB4YTcsIDB4OTEsIDB4YTcsIDB4ZGMsIDB4MWEsIDB4ZjUsCi0gIDB4YzksIDB4M2UsIDB4NDEsIDB4YzAsIDB4MjEsIDB4NGMsIDB4ZDgsIDB4ZmIsIDB4ZmYsIDB4NWYsIDB4ZmYsIDB4ZmYsCi0gIDB4MDAsIDB4YzYsIDB4ZGEsIDB4YTQsIDB4YzgsIDB4NzUsIDB4YjgsIDB4NjgsIDB4OGEsIDB4NWMsIDB4NDQsIDB4M2EsCi0gIDB4ZjAsIDB4ZTcsIDB4YjMsIDB4ODcsIDB4MDAsIDB4N2UsIDB4OGUsIDB4M2EsIDB4YjYsIDB4OTAsIDB4YWYsIDB4ZTEsCi0gIDB4ZDYsIDB4OWEsIDB4MTUsIDB4YTcsIDB4YjksIDB4YzEsIDB4NjEsIDB4NDIsIDB4ZDUsIDB4M2YsIDB4OTgsIDB4ZjIsCi0gIDB4MmYsIDB4YzAsIDB4NjUsIDB4NzAsIDB4ZmQsIDB4NzYsIDB4NmMsIDB4NmUsIDB4ZGQsIDB4ODYsIDB4YzcsIDB4N2MsCi0gIDB4NGYsIDB4OGQsIDB4MzYsIDB4ZjUsIDB4NmMsIDB4MGMsIDB4NTksIDB4MWEsIDB4YjIsIDB4MGYsIDB4NWYsIDB4MWUsCi0gIDB4MzksIDB4MjcsIDB4NWMsIDB4MDgsIDB4YWQsIDB4MzIsIDB4MjgsIDB4MTQsIDB4OTQsIDB4MGQsIDB4MWYsIDB4MzEsCi0gIDB4MDYsIDB4ZjgsIDB4MmUsIDB4ODYsIDB4MTksIDB4ZGQsIDB4MmYsIDB4NGYsIDB4YmEsIDB4NmQsIDB4MTUsIDB4YTYsCi0gIDB4MzgsIDB4MmEsIDB4OTQsIDB4ZWUsIDB4MmEsIDB4YWEsIDB4MGIsIDB4ZWEsIDB4NDIsIDB4YzAsIDB4OTksIDB4NmIsCi0gIDB4MTYsIDB4NzMsIDB4N2MsIDB4YWEsIDB4YTYsIDB4OTUsIDB4MmUsIDB4MmIsIDB4MDEsIDB4NGYsIDB4YWIsIDB4ZjcsCi0gIDB4YjUsIDB4OTEsIDB4NzgsIDB4NjIsIDB4YmMsIDB4OWUsIDB4YjMsIDB4ZDUsIDB4MjIsIDB4NjIsIDB4MDMsIDB4MzgsCi0gIDB4YTIsIDB4YjMsIDB4NjUsIDB4YzksIDB4MmMsIDB4OGEsIDB4Y2EsIDB4ODYsIDB4ODIsIDB4ZmMsIDB4ZTYsIDB4ZDIsCi0gIDB4NmMsIDB4MjIsIDB4N2UsIDB4NWIsIDB4NDYsIDB4MmUsIDB4N2MsIDB4ZjgsIDB4NWMsIDB4ZDcsIDB4NmIsIDB4NjYsCi0gIDB4OTksIDB4ODUsIDB4NmMsIDB4OWMsIDB4NWYsIDB4NjYsIDB4ZDcsIDB4MGYsIDB4OGMsIDB4NTksIDB4NWUsIDB4ZWUsCi0gIDB4NzMsIDB4NTcsIDB4MTIsIDB4YTEsIDB4Y2YsIDB4ZDYsIDB4OGUsIDB4ZjYsIDB4NWIsIDB4ZWEsIDB4ZDQsIDB4MjksCi0gIDB4ZjUsIDB4N2UsIDB4NTUsIDB4YTYsIDB4NTIsIDB4MDMsIDB4NmEsIDB4YzAsIDB4ZTksIDB4OGMsIDB4YzMsIDB4ZDcsCi0gIDB4NDksIDB4MWMsIDB4M2IsIDB4MGQsIDB4NDcsIDB4MDksIDB4OTAsIDB4OTYsIDB4ZGMsIDB4M2IsIDB4MTcsIDB4M2IsCi0gIDB4YjcsIDB4MDEsIDB4NDUsIDB4OTUsIDB4NTUsIDB4NjQsIDB4N2EsIDB4NDUsIDB4OTUsIDB4ZTcsIDB4OTMsIDB4N2MsCi0gIDB4MmUsIDB4MzIsIDB4YmMsIDB4YTQsIDB4MjYsIDB4ZWEsIDB4OWIsIDB4NmQsIDB4OGMsIDB4ZTAsIDB4ZWEsIDB4YzAsCi0gIDB4NTUsIDB4NzksIDB4YzUsIDB4NGUsIDB4ZjUsIDB4ODYsIDB4YjcsIDB4YjksIDB4M2YsIDB4YWYsIDB4MTgsIDB4YTIsCi0gIDB4YWMsIDB4YzQsIDB4NTIsIDB4M2EsIDB4Y2MsIDB4NTMsIDB4ZDcsIDB4MDcsIDB4OWIsIDB4YjUsIDB4OGMsIDB4YTQsCi0gIDB4ZjIsIDB4ZDMsIDB4NDYsIDB4M2YsIDB4YWIsIDB4YWUsIDB4MWYsIDB4NTQsIDB4NTIsIDB4ZmUsIDB4NDAsIDB4ZmEsCi0gIDB4YTYsIDB4ZGQsIDB4ODMsIDB4Y2EsIDB4NDEsIDB4MDEsIDB4NGEsIDB4NjUsIDB4NzIsIDB4ZTAsIDB4NDEsIDB4ZGIsCi0gIDB4YjQsIDB4YmUsIDB4YzcsIDB4ZmUsIDB4NmEsIDB4NTYsIDB4MjIsIDB4OTUsIDB4NzcsIDB4MWYsIDB4NjIsIDB4NDQsCi0gIDB4YzQsIDB4NmQsIDB4Y2EsIDB4NmMsIDB4MzIsIDB4NjAsIDB4YzMsIDB4NTYsIDB4NDAsIDB4MzUsIDB4YzQsIDB4NjAsCi0gIDB4YjcsIDB4ODIsIDB4ZjUsIDB4MDgsIDB4ZWEsIDB4MTIsIDB4MDQsIDB4NjIsIDB4MDksIDB4OWIsIDB4ZGMsIDB4ZDEsCi0gIDB4MzAsIDB4YTQsIDB4ZTUsIDB4NDEsIDB4M2EsIDB4ODIsIDB4YjQsIDB4MmYsIDB4MDEsIDB4MjgsIDB4YWMsIDB4YWUsCi0gIDB4NDMsIDB4ZDQsIDB4NWQsIDB4N2UsIDB4YzEsIDB4YTcsIDB4YTcsIDB4MmQsIDB4MzYsIDB4MDIsIDB4NDUsIDB4NTksCi0gIDB4NzYsIDB4NGUsIDB4ZDMsIDB4YjQsIDB4OTcsIDB4NjksIDB4NWQsIDB4ZDcsIDB4ZDMsIDB4ZDgsIDB4MDQsIDB4ZTIsCi0gIDB4MDgsIDB4OTYsIDB4ZjgsIDB4ZGMsIDB4MjEsIDB4MzYsIDB4OTIsIDB4YWEsIDB4ZjEsIDB4ZjEsIDB4ZTUsIDB4YzYsCi0gIDB4MDgsIDB4ZGQsIDB4YzEsIDB4ODYsIDB4OTgsIDB4ODAsIDB4NDUsIDB4MzAsIDB4YjIsIDB4MjEsIDB4NTksIDB4YzcsCi0gIDB4MjQsIDB4NmUsIDB4NWIsIDB4ZjEsIDB4MzEsIDB4NzUsIDB4YjMsIDB4MzksIDB4OWIsIDB4NTEsIDB4NjQsIDB4MTksCi0gIDB4NzksIDB4ZDQsIDB4MzYsIDB4ZDYsIDB4NWYsIDB4NjEsIDB4NmUsIDB4MGEsIDB4OGUsIDB4MDAsIDB4YTIsIDB4YjIsCi0gIDB4NjUsIDB4MTQsIDB4YjAsIDB4YjUsIDB4NDQsIDB4NDksIDB4MmYsIDB4NWEsIDB4NGUsIDB4ZjcsIDB4OGMsIDB4ZGEsCi0gIDB4NWYsIDB4MjksIDB4ODMsIDB4ODMsIDB4YTEsIDB4YmYsIDB4ZjEsIDB4YjUsIDB4MTgsIDB4NTEsIDB4YjgsIDB4ZTksCi0gIDB4NmEsIDB4MWEsIDB4MGEsIDB4ODAsIDB4ZWIsIDB4ZTIsIDB4MzAsIDB4ZWUsIDB4N2QsIDB4YjgsIDB4ZDEsIDB4OTMsCi0gIDB4ODQsIDB4M2IsIDB4MWMsIDB4ZGIsIDB4MzUsIDB4NmEsIDB4ZDcsIDB4MWUsIDB4YTMsIDB4ZWMsIDB4ZmYsIDB4MWQsCi0gIDB4YWIsIDB4MDcsIDB4MjEsIDB4NGMsIDB4NmMsIDB4YzAsIDB4MDAsIDB4YmYsIDB4YzAsIDB4MDQsIDB4MWYsIDB4YzYsCi0gIDB4ZGMsIDB4NDYsIDB4MzYsIDB4ZjEsIDB4ZWIsIDB4NTAsIDB4OGQsIDB4OGQsIDB4YjYsIDB4NTAsIDB4NmIsIDB4NDgsCi0gIDB4ZDcsIDB4OTEsIDB4OGYsIDB4ZGEsIDB4ZTksIDB4ZWQsIDB4NzksIDB4MmQsIDB4NmYsIDB4ZWIsIDB4YzYsIDB4YWQsCi0gIDB4NzcsIDB4ZDMsIDB4MzEsIDB4ZmIsIDB4NmEsIDB4OWYsIDB4MGUsIDB4MjcsIDB4MDAsIDB4MTAsIDB4MjEsIDB4NjQsCi0gIDB4ZTQsIDB4ZTYsIDB4MzUsIDB4MmQsIDB4M2QsIDB4ZGUsIDB4ODksIDB4OGUsIDB4YWUsIDB4ZDcsIDB4OTcsIDB4NWIsCi0gIDB4OTcsIDB4NTUsIDB4M2EsIDB4YmMsIDB4NzEsIDB4MzMsIDB4YzUsIDB4NzMsIDB4YWEsIDB4ZjUsIDB4YjcsIDB4MTksCi0gIDB4NDQsIDB4YjIsIDB4MDgsIDB4MzMsIDB4YzIsIDB4NTksIDB4ZTksIDB4MzMsIDB4OTMsIDB4MGIsIDB4ZWUsIDB4MTcsCi0gIDB4YTYsIDB4NzYsIDB4ZTAsIDB4NzEsIDB4ZTEsIDB4NjksIDB4MWYsIDB4ODIsIDB4NzAsIDB4YmEsIDB4YWUsIDB4YjIsCi0gIDB4ZjYsIDB4MTMsIDB4YjEsIDB4YWQsIDB4MjIsIDB4M2MsIDB4OWEsIDB4MGUsIDB4Y2EsIDB4N2MsIDB4MzQsIDB4ZDIsCi0gIDB4NDksIDB4ZTcsIDB4MGEsIDB4YjksIDB4NmYsIDB4NzAsIDB4NzcsIDB4M2UsIDB4ODUsIDB4M2EsIDB4NzksIDB4NjgsCi0gIDB4ZGYsIDB4MWQsIDB4ZmEsIDB4ZDAsIDB4MjAsIDB4NDksIDB4MTAsIDB4MjIsIDB4ZDQsIDB4ZWIsIDB4YjYsIDB4ZjcsCi0gIDB4YTAsIDB4OGUsIDB4OTEsIDB4MDIsIDB4ZjYsIDB4MmUsIDB4MDIsIDB4OGUsIDB4YjYsIDB4MmQsIDB4OGQsIDB4ZjMsCi0gIDB4ZjksIDB4NWEsIDB4YTIsIDB4ZTQsIDB4OWEsIDB4NWUsIDB4YWIsIDB4ZGMsIDB4MDYsIDB4ZDAsIDB4YTUsIDB4ZjMsCi0gIDB4YTMsIDB4MzIsIDB4N2YsIDB4OGEsIDB4NzAsIDB4NGUsIDB4NDEsIDB4NWQsIDB4ODMsIDB4NjcsIDB4YTYsIDB4NTcsCi0gIDB4ZTMsIDB4ZWYsIDB4MTYsIDB4MjUsIDB4ODYsIDB4OWIsIDB4YmEsIDB4NjgsIDB4YmYsIDB4MjgsIDB4ZDIsIDB4M2QsCi0gIDB4MjMsIDB4M2MsIDB4ZmEsIDB4MDIsIDB4ZTYsIDB4ZGUsIDB4Y2EsIDB4MDksIDB4ODcsIDB4MzIsIDB4ODIsIDB4MTMsCi0gIDB4M2YsIDB4YjAsIDB4ZjksIDB4ODUsIDB4OWUsIDB4NTIsIDB4M2IsIDB4OWIsIDB4ZDEsIDB4ZjMsIDB4NGUsIDB4NjUsCi0gIDB4MjgsIDB4ODksIDB4YzIsIDB4YmYsIDB4ZjcsIDB4NWYsIDB4ZDcsIDB4ZDIsIDB4NDksIDB4NWUsIDB4NjQsIDB4NTIsCi0gIDB4ZWIsIDB4OTAsIDB4NDMsIDB4MmUsIDB4YjEsIDB4MWQsIDB4NzQsIDB4OTgsIDB4YzIsIDB4OWMsIDB4NWQsIDB4ZjEsCi0gIDB4OTYsIDB4N2UsIDB4NGYsIDB4MzksIDB4ZTcsIDB4ZDksIDB4MWYsIDB4ZDAsIDB4OWMsIDB4NjksIDB4YTAsIDB4ZmMsCi0gIDB4OWQsIDB4MWYsIDB4ODIsIDB4ZDEsIDB4YTUsIDB4MDgsIDB4ODUsIDB4MjgsIDB4YTYsIDB4OTIsIDB4MjEsIDB4ZGIsCi0gIDB4OGIsIDB4ZTIsIDB4N2QsIDB4MDksIDB4Y2EsIDB4YTQsIDB4Y2MsIDB4OWEsIDB4ZTAsIDB4OTUsIDB4YzgsIDB4MzgsCi0gIDB4NzUsIDB4MjcsIDB4MGQsIDB4N2QsIDB4MmYsIDB4NTksIDB4YWYsIDB4Y2MsIDB4ZTMsIDB4MmIsIDB4NTcsIDB4NDQsCi0gIDB4MWEsIDB4YmUsIDB4M2EsIDB4MjUsIDB4NDksIDB4ZDEsIDB4NjgsIDB4MTcsIDB4MDgsIDB4ZGIsIDB4ZjYsIDB4NTEsCi0gIDB4YzksIDB4OGEsIDB4Y2IsIDB4MjQsIDB4ODAsIDB4MGYsIDB4YmMsIDB4OTIsIDB4OGQsIDB4MGUsIDB4ZWUsIDB4NmIsCi0gIDB4OGIsIDB4NTMsIDB4NGYsIDB4MjQsIDB4OTgsIDB4N2UsIDB4YTIsIDB4ZDIsIDB4MWUsIDB4YzAsIDB4ZjEsIDB4NzMsCi0gIDB4NDEsIDB4YTAsIDB4YWYsIDB4MjIsIDB4OGEsIDB4MjQsIDB4OTMsIDB4ZGIsIDB4YjYsIDB4Y2IsIDB4YjksIDB4MjAsCi0gIDB4YmQsIDB4ZWUsIDB4NDcsIDB4NmIsIDB4NjQsIDB4MDksIDB4NGYsIDB4MDUsIDB4ODEsIDB4NWIsIDB4MjAsIDB4MGEsCi0gIDB4YzEsIDB4MTQsIDB4YzUsIDB4YTAsIDB4NDAsIDB4MDYsIDB4MWQsIDB4Y2EsIDB4ZDgsIDB4ODQsIDB4MmEsIDB4MzAsCi0gIDB4ZDEsIDB4ZWIsIDB4MDcsIDB4MTYsIDB4MTEsIDB4Y2QsIDB4YTQsIDB4YzAsIDB4MjUsIDB4YzcsIDB4OTgsIDB4OWYsCi0gIDB4OTYsIDB4ODMsIDB4ZWUsIDB4OTMsIDB4MDgsIDB4N2IsIDB4M2YsIDB4ZTgsIDB4M2QsIDB4NjEsIDB4ZmIsIDB4NjUsCi0gIDB4YzMsIDB4NTksIDB4MDgsIDB4ZmEsIDB4MTYsIDB4M2IsIDB4MjMsIDB4MDAsIDB4ZjgsIDB4NTIsIDB4MDcsIDB4YWQsCi0gIDB4YWUsIDB4YTgsIDB4ODYsIDB4MGYsIDB4MzUsIDB4MGYsIDB4NDcsIDB4ZTIsIDB4YTgsIDB4ZWYsIDB4N2IsIDB4ZTgsCi0gIDB4ZjUsIDB4ZGMsIDB4ODUsIDB4ZjgsIDB4ZGEsIDB4ZjAsIDB4YTgsIDB4NDYsIDB4NzUsIDB4OTcsIDB4MDUsIDB4OGMsCi0gIDB4MDIsIDB4NjMsIDB4NTYsIDB4NGYsIDB4NTYsIDB4ZmIsIDB4MDgsIDB4OTAsIDB4MWUsIDB4MWEsIDB4YzQsIDB4ZGIsCi0gIDB4NGEsIDB4M2UsIDB4MWIsIDB4MzksIDB4YjksIDB4ZTIsIDB4NzEsIDB4MzUsIDB4NDEsIDB4YTAsIDB4ZDEsIDB4MzksCi0gIDB4NTgsIDB4ZTAsIDB4MjEsIDB4NGMsIDB4ZDksIDB4NDYsIDB4NWMsIDB4NDQsIDB4M2EsIDB4ZWEsIDB4MjEsIDB4YjcsCi0gIDB4MjksIDB4YTQsIDB4MDMsIDB4N2EsIDB4OTMsIDB4MjMsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YTMsIDB4ZjgsIDB4ZDMsCi0gIDB4OGUsIDB4MDEsIDB4N2QsIDB4N2YsIDB4MDEsIDB4YzQsIDB4NTQsIDB4N2UsIDB4NDcsIDB4YjEsIDB4NzMsIDB4NjIsCi0gIDB4MDUsIDB4MjksIDB4OTIsIDB4YzYsIDB4NTcsIDB4YTcsIDB4NjMsIDB4ZTAsIDB4Y2IsIDB4YzUsIDB4OTUsIDB4Y2IsCi0gIDB4OWUsIDB4M2YsIDB4NzQsIDB4NWIsIDB4ZmQsIDB4OGUsIDB4MmEsIDB4YTUsIDB4YzYsIDB4NjYsIDB4ZTgsIDB4ODksCi0gIDB4MGEsIDB4OWUsIDB4ODIsIDB4MzksIDB4MmYsIDB4YzMsIDB4MzAsIDB4YmIsIDB4ZTksIDB4MmQsIDB4OTcsIDB4YWEsCi0gIDB4MDcsIDB4OTksIDB4NzUsIDB4OWIsIDB4NDksIDB4ZDMsIDB4NDksIDB4NTIsIDB4ODUsIDB4ODYsIDB4NTQsIDB4OTUsCi0gIDB4ZGQsIDB4NjgsIDB4MDUsIDB4NTcsIDB4ODEsIDB4ZGEsIDB4MGUsIDB4ZTksIDB4YzEsIDB4YTUsIDB4ODQsIDB4MjIsCi0gIDB4ODgsIDB4ZjIsIDB4ZGQsIDB4MWYsIDB4YjcsIDB4NmMsIDB4ZjAsIDB4ZGIsIDB4ZTMsIDB4YzQsIDB4YTksIDB4YjksCi0gIDB4MmYsIDB4NzksIDB4OTMsIDB4MTAsIDB4YjQsIDB4NjQsIDB4ZjcsIDB4YTQsIDB4ZTcsIDB4YmYsIDB4ZjgsIDB4N2QsCi0gIDB4ZjksIDB4ZmIsIDB4YTYsIDB4ZDYsIDB4MzUsIDB4NDcsIDB4Y2QsIDB4NTUsIDB4NWIsIDB4NDMsIDB4OTMsIDB4OTYsCi0gIDB4MTMsIDB4NWYsIDB4ZWMsIDB4ODUsIDB4ODksIDB4MTgsIDB4YTcsIDB4N2UsIDB4MGIsIDB4YTgsIDB4YmYsIDB4NjgsCi0gIDB4NDgsIDB4MjEsIDB4OGMsIDB4ZGMsIDB4YmQsIDB4M2IsIDB4MmUsIDB4YjIsIDB4NTAsIDB4NDgsIDB4NDgsIDB4MGIsCi0gIDB4OWYsIDB4MTAsIDB4MjEsIDB4ZjIsIDB4NjUsIDB4MDAsIDB4MWQsIDB4YmMsIDB4NGUsIDB4NWEsIDB4NWYsIDB4YmIsCi0gIDB4MjIsIDB4MjMsIDB4ZjAsIDB4MDQsIDB4MDgsIDB4OWMsIDB4ZDEsIDB4MjAsIDB4NDEsIDB4MGEsIDB4ZWEsIDB4MDIsCi0gIDB4NDksIDB4Y2YsIDB4YWUsIDB4OTQsIDB4NjEsIDB4NGYsIDB4NTAsIDB4MDAsIDB4Y2QsIDB4OWYsIDB4ZjAsIDB4MDAsCi0gIDB4MDYsIDB4YWQsIDB4YzksIDB4ZjUsIDB4ZTUsIDB4OWQsIDB4YWUsIDB4NGMsIDB4ZWYsIDB4MjQsIDB4MTEsIDB4Y2EsCi0gIDB4YWQsIDB4MjYsIDB4NzQsIDB4Y2IsIDB4NmYsIDB4ZTUsIDB4Y2YsIDB4Y2YsIDB4ZTEsIDB4ZjUsIDB4YjAsIDB4YmQsCi0gIDB4NzYsIDB4NDcsIDB4NTAsIDB4ZjYsIDB4YWEsIDB4ZDgsIDB4ZTksIDB4NjEsIDB4ODksIDB4NTQsIDB4YTcsIDB4MTMsCi0gIDB4YTMsIDB4MDEsIDB4NjQsIDB4ZmIsIDB4ZGIsIDB4ZmQsIDB4ZDcsIDB4OTQsIDB4NTAsIDB4OGMsIDB4YjUsIDB4MDgsCi0gIDB4ZjksIDB4YmEsIDB4NDgsIDB4NmQsIDB4YTUsIDB4YTEsIDB4NjksIDB4ODcsIDB4NGQsIDB4MzgsIDB4MzQsIDB4YjIsCi0gIDB4YmYsIDB4NmQsIDB4MzgsIDB4YjUsIDB4YjQsIDB4OWEsIDB4ZmUsIDB4YzEsIDB4ZDMsIDB4ZDAsIDB4ODEsIDB4NGEsCi0gIDB4NjQsIDB4ZDcsIDB4ZjMsIDB4ZjksIDB4MzYsIDB4NzQsIDB4YmEsIDB4YWYsIDB4YTUsIDB4NTMsIDB4ZjYsIDB4NmEsCi0gIDB4NTYsIDB4MjksIDB4ZDMsIDB4ZDIsIDB4MDEsIDB4ZWQsIDB4NWIsIDB4MDgsIDB4NDMsIDB4MjksIDB4ZTYsIDB4NzQsCi0gIDB4NjgsIDB4ZDIsIDB4M2YsIDB4OWIsIDB4ZDEsIDB4N2UsIDB4MDcsIDB4YTIsIDB4ZjgsIDB4MjgsIDB4NjMsIDB4OTMsCi0gIDB4NTksIDB4N2EsIDB4ZGEsIDB4YjUsIDB4MDEsIDB4MzAsIDB4YjksIDB4NDEsIDB4NjQsIDB4MTMsIDB4YTUsIDB4NGIsCi0gIDB4MDQsIDB4MDIsIDB4MjUsIDB4NGEsIDB4NTEsIDB4ZmQsIDB4OGEsIDB4M2EsIDB4N2EsIDB4MWYsIDB4MzksIDB4YjcsCi0gIDB4ZDUsIDB4YjQsIDB4NDEsIDB4MDAsIDB4MGYsIDB4ZTMsIDB4ZWEsIDB4ZGIsIDB4NjEsIDB4ZjEsIDB4ZjYsIDB4N2YsCi0gIDB4YjQsIDB4YjUsIDB4MGEsIDB4ZGIsIDB4OGIsIDB4ZmQsIDB4ZjcsIDB4MWMsIDB4YmQsIDB4NTIsIDB4MjksIDB4YzQsCi0gIDB4NmMsIDB4YzUsIDB4ZDEsIDB4MzksIDB4NzcsIDB4OGQsIDB4YTUsIDB4NzAsIDB4ZWUsIDB4ZWEsIDB4YzgsIDB4MTIsCi0gIDB4YjAsIDB4MjksIDB4YTAsIDB4YmMsIDB4ZDMsIDB4NDYsIDB4ZTgsIDB4MDQsIDB4NGEsIDB4OWIsIDB4NjIsIDB4ZWYsCi0gIDB4OTIsIDB4ZTAsIDB4NDksIDB4MTUsIDB4MzMsIDB4ZTYsIDB4ZDEsIDB4ZjEsIDB4NWMsIDB4YjcsIDB4M2UsIDB4ODUsCi0gIDB4YjAsIDB4YzIsIDB4MGMsIDB4Y2IsIDB4ZTUsIDB4ZDIsIDB4MjIsIDB4NTgsIDB4MWMsIDB4MjEsIDB4NGMsIDB4NmQsCi0gIDB4NDksIDB4ZGYsIDB4MDgsIDB4YzUsIDB4NWQsIDB4ODIsIDB4ODgsIDB4NjUsIDB4YWEsIDB4NmMsIDB4NGEsIDB4MGEsCi0gIDB4YmEsIDB4OGMsIDB4NjIsIDB4ZjksIDB4N2QsIDB4NzAsIDB4NzQsIDB4M2YsIDB4NDksIDB4NGUsIDB4YmMsIDB4ZTksCi0gIDB4NTcsIDB4YmQsIDB4N2YsIDB4MDYsIDB4YjgsIDB4ZWEsIDB4MjUsIDB4ZDYsIDB4ZmQsIDB4MDYsIDB4YjQsIDB4NTgsCi0gIDB4M2IsIDB4NzMsIDB4NjMsIDB4ZGQsIDB4NjEsIDB4YjYsIDB4YTEsIDB4YmQsIDB4YWIsIDB4ZmMsIDB4MWQsIDB4YzUsCi0gIDB4YWEsIDB4YjIsIDB4NGIsIDB4NzUsIDB4ZWYsIDB4M2EsIDB4OGIsIDB4YWEsIDB4NWYsIDB4MjYsIDB4YjksIDB4OTUsCi0gIDB4YmYsIDB4MWIsIDB4NWEsIDB4ZGEsIDB4MWEsIDB4NzAsIDB4MjksIDB4MmQsIDB4ZWUsIDB4ODUsIDB4MTEsIDB4NTQsCi0gIDB4MDQsIDB4MjAsIDB4NDAsIDB4ZjQsIDB4NGUsIDB4ZDcsIDB4OWYsIDB4YzEsIDB4YzgsIDB4ZDAsIDB4MmMsIDB4ZjcsCi0gIDB4ZGQsIDB4ZDQsIDB4NmYsIDB4MTMsIDB4ZDYsIDB4N2UsIDB4NTIsIDB4NDUsIDB4YWMsIDB4YjAsIDB4NjMsIDB4ZWIsCi0gIDB4OTQsIDB4ODksIDB4NDEsIDB4NjIsIDB4ODcsIDB4NjQsIDB4YjEsIDB4NjgsIDB4Y2YsIDB4NTcsIDB4YjIsIDB4NmYsCi0gIDB4MTUsIDB4NmIsIDB4MjAsIDB4NjcsIDB4YzgsIDB4ZDksIDB4MzQsIDB4YTksIDB4M2YsIDB4NDcsIDB4NTUsIDB4ZjcsCi0gIDB4MTMsIDB4NjcsIDB4N2IsIDB4NzQsIDB4NTcsIDB4NDIsIDB4ZTMsIDB4NzUsIDB4ZGIsIDB4ZTQsIDB4ZDMsIDB4OTMsCi0gIDB4NTIsIDB4YzgsIDB4OTMsIDB4MjAsIDB4NTQsIDB4ODgsIDB4OTQsIDB4M2QsIDB4YmQsIDB4ZDksIDB4YmQsIDB4YWMsCi0gIDB4MzYsIDB4MDAsIDB4YWMsIDB4NGUsIDB4MTksIDB4Y2UsIDB4MWIsIDB4NGYsIDB4OWUsIDB4NzMsIDB4NjQsIDB4MTQsCi0gIDB4NTYsIDB4MjEsIDB4ZjksIDB4MmQsIDB4ZjksIDB4YzgsIDB4YmIsIDB4MzcsIDB4YWEsIDB4NzEsIDB4MTgsIDB4OWIsCi0gIDB4YWYsIDB4ZGQsIDB4YTMsIDB4ZmQsIDB4YmYsIDB4ODAsIDB4NjMsIDB4ZDIsIDB4NjEsIDB4YWUsIDB4YmYsIDB4M2IsCi0gIDB4NmIsIDB4ZjgsIDB4OGIsIDB4MzYsIDB4YTMsIDB4NTUsIDB4NWYsIDB4N2YsIDB4YmMsIDB4YWUsIDB4YWYsIDB4OTQsCi0gIDB4NTUsIDB4MjIsIDB4NTIsIDB4YjcsIDB4NWQsIDB4YzgsIDB4ZmIsIDB4NjgsIDB4YmUsIDB4NGUsIDB4MzUsIDB4MDcsCi0gIDB4NDksIDB4MjEsIDB4ODYsIDB4MDcsIDB4NjAsIDB4YWUsIDB4NDgsIDB4NzMsIDB4ZTIsIDB4ZmUsIDB4NzcsIDB4NzksCi0gIDB4ZDcsIDB4NTcsIDB4MWQsIDB4MjIsIDB4NzcsIDB4ZGIsIDB4NWMsIDB4OTUsIDB4MDAsIDB4YTQsIDB4OGIsIDB4YmEsCi0gIDB4MzcsIDB4ZjQsIDB4MmUsIDB4NmIsIDB4OTcsIDB4YTUsIDB4MmUsIDB4NjksIDB4MzEsIDB4YjYsIDB4MjIsIDB4ZjYsCi0gIDB4YzQsIDB4OWYsIDB4N2UsIDB4NTAsIDB4ZWIsIDB4YTUsIDB4YTksIDB4MTYsIDB4ZDcsIDB4M2UsIDB4NTksIDB4ZTQsCi0gIDB4NDQsIDB4OGIsIDB4YTQsIDB4MWMsIDB4OGEsIDB4YTgsIDB4M2MsIDB4ZDEsIDB4NWEsIDB4MzAsIDB4MTUsIDB4NDAsCi0gIDB4YzIsIDB4OGYsIDB4YzMsIDB4ZmIsIDB4ZDksIDB4ZDYsIDB4YmMsIDB4YjQsIDB4M2YsIDB4YTAsIDB4ZjMsIDB4ZWMsCi0gIDB4YjMsIDB4ZmIsIDB4NzAsIDB4N2YsIDB4MjEsIDB4YzAsIDB4N2UsIDB4NjksIDB4ZjQsIDB4ODgsIDB4YzAsIDB4ZWUsCi0gIDB4NmYsIDB4OTYsIDB4ZjMsIDB4N2IsIDB4NjMsIDB4MWEsIDB4MzcsIDB4NjEsIDB4YjcsIDB4YzAsIDB4NjUsIDB4YTQsCi0gIDB4YjAsIDB4N2MsIDB4OGUsIDB4MzQsIDB4NzQsIDB4NDMsIDB4ZGQsIDB4OTQsIDB4YjEsIDB4MDcsIDB4N2QsIDB4YmQsCi0gIDB4ZDEsIDB4OGEsIDB4MmMsIDB4MzUsIDB4ZjEsIDB4MGQsIDB4NzcsIDB4MDMsIDB4ZTksIDB4ZDIsIDB4NzIsIDB4YWEsCi0gIDB4MTQsIDB4Y2YsIDB4MzcsIDB4YzgsIDB4MTgsIDB4NWUsIDB4NTgsIDB4ODIsIDB4NTYsIDB4ODgsIDB4YTAsIDB4ZjAsCi0gIDB4MWUsIDB4ZDUsIDB4M2IsIDB4NDksIDB4YzgsIDB4YWIsIDB4NDQsIDB4ZjAsIDB4N2MsIDB4ZjcsIDB4YTcsIDB4NWUsCi0gIDB4YjUsIDB4MWQsIDB4YWEsIDB4ZjYsIDB4M2QsIDB4NGYsIDB4YTIsIDB4MWIsIDB4MTgsIDB4NjIsIDB4MjYsIDB4MzgsCi0gIDB4OTEsIDB4NzMsIDB4ZjAsIDB4ZDQsIDB4YTQsIDB4MDIsIDB4NzMsIDB4OTksIDB4NjgsIDB4MGIsIDB4ODQsIDB4YTYsCi0gIDB4MTUsIDB4YmMsIDB4NDEsIDB4NjQsIDB4MWMsIDB4YWMsIDB4ODYsIDB4YzUsIDB4YzMsIDB4MDcsIDB4MjEsIDB4NGMsCi0gIDB4MzcsIDB4NDcsIDB4NWQsIDB4NjQsIDB4NzYsIDB4ZTUsIDB4MzUsIDB4YjcsIDB4MjEsIDB4MzEsIDB4MzgsIDB4MDYsCi0gIDB4ZWMsIDB4MjMsIDB4YTQsIDB4NDgsIDB4YjUsIDB4YmEsIDB4ZmQsIDB4MjgsIDB4NDksIDB4OWEsIDB4NWIsIDB4ZTQsCi0gIDB4NTcsIDB4NWEsIDB4OWEsIDB4M2UsIDB4YzIsIDB4ZjUsIDB4N2EsIDB4OTQsIDB4ZTksIDB4YTUsIDB4YjEsIDB4OTQsCi0gIDB4OTEsIDB4NTIsIDB4NTgsIDB4M2YsIDB4YmIsIDB4YWMsIDB4MTYsIDB4NzAsIDB4OTYsIDB4ZGMsIDB4Y2EsIDB4MGYsCi0gIDB4YzUsIDB4NmYsIDB4MWEsIDB4NzIsIDB4MGIsIDB4YTIsIDB4NWQsIDB4MmUsIDB4MzYsIDB4ZjksIDB4NjcsIDB4ZmUsCi0gIDB4MDUsIDB4MGUsIDB4OWYsIDB4ZDMsIDB4ZjcsIDB4MWMsIDB4OGEsIDB4Y2QsIDB4ZGIsIDB4OGUsIDB4ODYsIDB4ZTgsCi0gIDB4Y2EsIDB4MzcsIDB4MGIsIDB4MjYsIDB4NjQsIDB4ZGEsIDB4MTQsIDB4MDgsIDB4YzcsIDB4NmQsIDB4OGYsIDB4MTcsCi0gIDB4YTEsIDB4YjUsIDB4MWIsIDB4MTcsIDB4ZjUsIDB4NzksIDB4YzYsIDB4NmYsIDB4YTcsIDB4YWUsIDB4YWEsIDB4ZTEsCi0gIDB4ZTcsIDB4MjAsIDB4ZWEsIDB4YWMsIDB4Y2YsIDB4NzcsIDB4Y2EsIDB4ZjUsIDB4ZTMsIDB4NTcsIDB4NzAsIDB4NDEsCi0gIDB4MDIsIDB4OWQsIDB4NGQsIDB4MDcsIDB4ZDMsIDB4MTgsIDB4YjcsIDB4MTksIDB4NWIsIDB4ZTAsIDB4ODksIDB4NTcsCi0gIDB4MDAsIDB4ZjMsIDB4YWUsIDB4ZjIsIDB4OTgsIDB4NjMsIDB4OWUsIDB4M2EsIDB4M2QsIDB4NjYsIDB4ZjksIDB4YjEsCi0gIDB4YzEsIDB4NTYsIDB4MTAsIDB4MTAsIDB4YWMsIDB4NjEsIDB4NjYsIDB4YmIsIDB4MGEsIDB4YTUsIDB4MGUsIDB4OWIsCi0gIDB4ZWEsIDB4YzUsIDB4N2EsIDB4ZDUsIDB4OTcsIDB4ZjgsIDB4M2IsIDB4OTksIDB4MTIsIDB4OWEsIDB4NmIsIDB4NmEsCi0gIDB4MDUsIDB4MzQsIDB4MDEsIDB4ZmMsIDB4MzIsIDB4NGIsIDB4YTgsIDB4NDIsIDB4NjgsIDB4ODAsIDB4M2YsIDB4NGYsCi0gIDB4YzIsIDB4OGMsIDB4NTAsIDB4Y2QsIDB4ZjcsIDB4ZTksIDB4YWEsIDB4NjksIDB4ZmMsIDB4NTMsIDB4YTUsIDB4N2QsCi0gIDB4MTYsIDB4Y2MsIDB4ZjEsIDB4M2YsIDB4MDUsIDB4OWMsIDB4MjgsIDB4N2MsIDB4NTcsIDB4MjYsIDB4ZWQsIDB4ZDksCi0gIDB4ODcsIDB4ZWEsIDB4M2IsIDB4MTIsIDB4YWYsIDB4NDksIDB4YjksIDB4ZjksIDB4ZTUsIDB4YzksIDB4YzMsIDB4ZmMsCi0gIDB4YzYsIDB4NTEsIDB4MGYsIDB4Y2MsIDB4NTQsIDB4YzMsIDB4ZTksIDB4ZWIsIDB4NTQsIDB4MzMsIDB4MTUsIDB4MDYsCi0gIDB4NTksIDB4ZjQsIDB4ZGMsIDB4NWQsIDB4ZDMsIDB4NWQsIDB4ZDMsIDB4ZTIsIDB4ODMsIDB4YTUsIDB4NWIsIDB4NDYsCi0gIDB4ZGEsIDB4M2MsIDB4NmYsIDB4NmYsIDB4YjEsIDB4OTMsIDB4OTMsIDB4NWEsIDB4MTIsIDB4OWYsIDB4MzgsIDB4NjQsCi0gIDB4YmYsIDB4MDYsIDB4MDQsIDB4NDIsIDB4NDksIDB4OTYsIDB4ZTcsIDB4MmIsIDB4ZTQsIDB4YTMsIDB4ZDUsIDB4NDcsCi0gIDB4NjQsIDB4YjUsIDB4ODAsIDB4ZDcsIDB4ZWEsIDB4N2UsIDB4NWQsIDB4OTgsIDB4MzYsIDB4MDAsIDB4MTQsIDB4MTcsCi0gIDB4MDIsIDB4M2UsIDB4MjAsIDB4NzMsIDB4MTAsIDB4MzksIDB4ODQsIDB4NjgsIDB4MzksIDB4ODIsIDB4NmMsIDB4MzgsCi0gIDB4MTIsIDB4NjYsIDB4NWQsIDB4ZjcsIDB4YzAsIDB4ZTQsIDB4M2YsIDB4ZWEsIDB4ZDIsIDB4ZDgsIDB4Y2EsIDB4NDgsCi0gIDB4YTksIDB4MmMsIDB4MWMsIDB4OWYsIDB4ZGIsIDB4NDcsIDB4NmMsIDB4OTAsIDB4ZGMsIDB4NGYsIDB4YTksIDB4ZGQsCi0gIDB4NTcsIDB4MTYsIDB4YjAsIDB4MmUsIDB4YmUsIDB4YWIsIDB4ZDEsIDB4YjEsIDB4ZGQsIDB4NzQsIDB4YWUsIDB4NWEsCi0gIDB4MTksIDB4MjAsIDB4NTEsIDB4YzQsIDB4YmEsIDB4ZGYsIDB4NmYsIDB4YTIsIDB4M2UsIDB4ZmYsIDB4MTYsIDB4YjYsCi0gIDB4Y2YsIDB4NzEsIDB4ZjAsIDB4ZWEsIDB4M2EsIDB4NDcsIDB4MWYsIDB4YWUsIDB4MWYsIDB4NjEsIDB4ZTksIDB4YTEsCi0gIDB4YzAsIDB4MjEsIDB4N2EsIDB4OTQsIDB4ZDUsIDB4NTUsIDB4ODgsIDB4MzEsIDB4NTEsIDB4MmEsIDB4NzAsIDB4ZDgsCi0gIDB4ZTUsIDB4NDcsIDB4MGIsIDB4NzUsIDB4MmEsIDB4ZDMsIDB4OGQsIDB4NDUsIDB4NTAsIDB4ZTAsIDB4ODUsIDB4YjIsCi0gIDB4NjYsIDB4NmUsIDB4MzksIDB4NmEsIDB4OTMsIDB4YmYsIDB4MTMsIDB4ZTMsIDB4ZWUsIDB4MzgsIDB4YmYsIDB4ZjgsCi0gIDB4YTQsIDB4YmMsIDB4NTYsIDB4YWQsIDB4OGIsIDB4ZjMsIDB4MmUsIDB4OWIsIDB4NjAsIDB4ZjYsIDB4Y2MsIDB4NmUsCi0gIDB4OGIsIDB4OGMsIDB4MDEsIDB4OTQsIDB4NGEsIDB4NTEsIDB4YjEsIDB4ZGIsIDB4NzUsIDB4NTcsIDB4ZWMsIDB4Y2IsCi0gIDB4ODQsIDB4ZGEsIDB4MzQsIDB4ZDMsIDB4N2MsIDB4ZTgsIDB4NTcsIDB4MTIsIDB4MTksIDB4OGIsIDB4ZTMsIDB4NWEsCi0gIDB4MzEsIDB4YTEsIDB4YmEsIDB4ZWUsIDB4N2QsIDB4NzMsIDB4ZTcsIDB4NzgsIDB4MzgsIDB4ZGYsIDB4N2UsIDB4ZjQsCi0gIDB4MGEsIDB4NWIsIDB4ZDIsIDB4ZmUsIDB4ZGQsIDB4ODcsIDB4YTksIDB4N2YsIDB4NTMsIDB4NjQsIDB4ZTUsIDB4MTMsCi0gIDB4YWMsIDB4OTIsIDB4ZGYsIDB4NDgsIDB4MmQsIDB4ZTQsIDB4OTIsIDB4YmQsIDB4M2MsIDB4YzksIDB4NjQsIDB4MjEsCi0gIDB4YTMsIDB4MzYsIDB4NTUsIDB4YTcsIDB4YjEsIDB4NjcsIDB4OWQsIDB4MzcsIDB4NjUsIDB4OTYsIDB4NWQsIDB4NTQsCi0gIDB4MjUsIDB4YmQsIDB4ZjksIDB4NGUsIDB4NzksIDB4ZDQsIDB4ZjcsIDB4MGMsIDB4YjUsIDB4YWMsIDB4ZjAsIDB4MjIsCi0gIDB4ZTIsIDB4MjcsIDB4NGYsIDB4NmYsIDB4ZDYsIDB4YjUsIDB4OTcsIDB4MmUsIDB4OTIsIDB4ZWUsIDB4OTQsIDB4MjQsCi0gIDB4MDUsIDB4MjYsIDB4YTQsIDB4ZTcsIDB4ZDMsIDB4NWYsIDB4MjAsIDB4ODUsIDB4ZTcsIDB4MzAsIDB4YzcsIDB4MzIsCi0gIDB4ZjIsIDB4NWQsIDB4N2EsIDB4NDYsIDB4ODUsIDB4YzcsIDB4MmEsIDB4ZDUsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTcsCi0gIDB4MGIsIDB4NDAsIDB4MjQsIDB4YTgsIDB4NmUsIDB4ZTUsIDB4NGEsIDB4MmUsIDB4NDgsIDB4ODUsIDB4MmYsIDB4OGUsCi0gIDB4NWIsIDB4NGEsIDB4YWYsIDB4YWQsIDB4ODMsIDB4ZTksIDB4Y2IsIDB4MDQsIDB4NzYsIDB4NjMsIDB4NmIsIDB4NDcsCi0gIDB4MTgsIDB4NGEsIDB4ZDksIDB4ZDgsIDB4ODAsIDB4N2EsIDB4MDgsIDB4MzAsIDB4NTYsIDB4MDAsIDB4MWYsIDB4YzksCi0gIDB4MDgsIDB4MGIsIDB4NjUsIDB4OGQsIDB4ZGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4YTksIDB4YzksIDB4YjcsIDB4NjQsCi0gIDB4ZTgsIDB4ZWQsIDB4MGEsIDB4ZmQsIDB4ZmEsIDB4NzUsIDB4ZmYsIDB4MGEsIDB4OWUsIDB4N2UsIDB4ZjksIDB4ZDcsCi0gIDB4MzIsIDB4ZDAsIDB4OWQsIDB4ZDgsIDB4OTYsIDB4NzQsIDB4NmUsIDB4YmUsIDB4YjksIDB4OTIsIDB4MDIsIDB4MzksCi0gIDB4MDEsIDB4N2QsIDB4NzksIDB4NTMsIDB4N2EsIDB4MjAsIDB4MTgsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4NDIsIDB4YjksCi0gIDB4YTMsIDB4OGYsIDB4MTgsIDB4MDksIDB4NWUsIDB4NGIsIDB4OGUsIDB4NzUsIDB4MTgsIDB4MmYsIDB4ZTksIDB4ODksCi0gIDB4YWUsIDB4YmMsIDB4ZWUsIDB4NWMsIDB4YTQsIDB4NDAsIDB4YmUsIDB4YTMsIDB4YTcsIDB4ZWYsIDB4MjksIDB4NGMsCi0gIDB4YzQsIDB4MGUsIDB4MjEsIDB4MWEsIDB4OTQsIDB4YWQsIDB4OTYsIDB4OTUsIDB4NjIsIDB4YTQsIDB4MTEsIDB4MDUsCi0gIDB4YTAsIDB4MzcsIDB4MTUsIDB4ODIsIDB4ODUsIDB4ZGUsIDB4YjUsIDB4NTYsIDB4ZDYsIDB4OGUsIDB4MmIsIDB4NmQsCi0gIDB4MDIsIDB4Y2IsIDB4NjQsIDB4OGIsIDB4YzcsIDB4YmEsIDB4NjIsIDB4ZGIsIDB4ZjgsIDB4NmYsIDB4NTUsIDB4ZDIsCi0gIDB4M2YsIDB4NmUsIDB4YzQsIDB4N2YsIDB4NWIsIDB4NjIsIDB4MDIsIDB4M2YsIDB4ZjcsIDB4ZmMsIDB4ZDMsIDB4OTQsCi0gIDB4YjcsIDB4NTUsIDB4NzUsIDB4NGIsIDB4OTYsIDB4NjYsIDB4NTQsIDB4YjgsIDB4OWIsIDB4NTgsIDB4ZGEsIDB4YWMsCi0gIDB4Y2YsIDB4Y2QsIDB4NTgsIDB4OTIsIDB4NmMsIDB4ZmMsIDB4NzcsIDB4MjksIDB4ZGUsIDB4NzgsIDB4OTgsIDB4NWMsCi0gIDB4YzIsIDB4ZGQsIDB4OTYsIDB4NzQsIDB4ZWMsIDB4MmQsIDB4YzcsIDB4OTgsIDB4YjQsIDB4NzcsIDB4MTUsIDB4Y2IsCi0gIDB4NDIsIDB4Y2IsIDB4NWYsIDB4NWYsIDB4OWQsIDB4ODUsIDB4Y2EsIDB4NWMsIDB4MzMsIDB4YmYsIDB4NjgsIDB4ZjYsCi0gIDB4ZWYsIDB4YTksIDB4ZTYsIDB4MGEsIDB4MzEsIDB4NTAsIDB4NWYsIDB4ZmYsIDB4M2QsIDB4MTcsIDB4OTAsIDB4NDgsCi0gIDB4YjEsIDB4ZWYsIDB4MTQsIDB4MzMsIDB4MTYsIDB4MGYsIDB4ZGQsIDB4NTksIDB4ZmUsIDB4NGEsIDB4MDIsIDB4YWUsCi0gIDB4ZmIsIDB4NzEsIDB4NDYsIDB4MTYsIDB4NDYsIDB4MzYsIDB4MzQsIDB4YzksIDB4OTIsIDB4NDEsIDB4MjQsIDB4OTMsCi0gIDB4OGUsIDB4MDQsIDB4MTQsIDB4NDcsIDB4NjIsIDB4MmEsIDB4NTksIDB4ZGMsIDB4NGQsIDB4YTUsIDB4OGEsIDB4YTIsCi0gIDB4YzUsIDB4NjUsIDB4MTEsIDB4ZTMsIDB4MTUsIDB4NmIsIDB4ODMsIDB4ZTEsIDB4NjcsIDB4NGUsIDB4ODcsIDB4N2QsCi0gIDB4YzQsIDB4M2QsIDB4ZDIsIDB4NTEsIDB4NWIsIDB4NmUsIDB4NWQsIDB4NjEsIDB4MDUsIDB4YTksIDB4M2UsIDB4OTAsCi0gIDB4MTEsIDB4MWEsIDB4MjYsIDB4YmQsIDB4MGIsIDB4OTIsIDB4OWUsIDB4MGIsIDB4NjUsIDB4MDIsIDB4OGEsIDB4YTgsCi0gIDB4NGEsIDB4NjUsIDB4ZDUsIDB4M2EsIDB4M2YsIDB4NmIsIDB4ZjcsIDB4MTQsIDB4OWQsIDB4MTIsIDB4YjQsIDB4ZTAsCi0gIDB4YWMsIDB4MGIsIDB4NDgsIDB4ZTEsIDB4YmEsIDB4NmUsIDB4ZDAsIDB4ODksIDB4NzMsIDB4YTUsIDB4YzksIDB4ZGUsCi0gIDB4MGMsIDB4YjIsIDB4ZjQsIDB4NjcsIDB4NzMsIDB4NmQsIDB4OGMsIDB4YzIsIDB4NGEsIDB4ZDYsIDB4MDcsIDB4YjAsCi0gIDB4ODIsIDB4ODUsIDB4YTcsIDB4MzYsIDB4YmEsIDB4MDcsIDB4ZjIsIDB4MGEsIDB4MDEsIDB4NmMsIDB4OTEsIDB4NzgsCi0gIDB4ZjcsIDB4NDgsIDB4NGMsIDB4M2IsIDB4MWIsIDB4MmYsIDB4Y2QsIDB4OWEsIDB4MmEsIDB4NDUsIDB4YzQsIDB4MWQsCi0gIDB4ZWYsIDB4ZmEsIDB4NjMsIDB4OWIsIDB4ZjAsIDB4NjAsIDB4MmMsIDB4Y2MsIDB4NmIsIDB4MjcsIDB4MmYsIDB4YzcsCi0gIDB4MWIsIDB4MDUsIDB4MWEsIDB4NWEsIDB4ODEsIDB4NDAsIDB4MjIsIDB4YmUsIDB4YjEsIDB4YmYsIDB4YzIsIDB4NjEsCi0gIDB4ZDgsIDB4MDAsIDB4YWEsIDB4YzMsIDB4MzEsIDB4OWUsIDB4ZTAsIDB4MDAsIDB4YmEsIDB4MDYsIDB4NWEsIDB4YTQsCi0gIDB4OGMsIDB4MGEsIDB4MTIsIDB4YjIsIDB4NTEsIDB4ZmMsIDB4OGIsIDB4Y2MsIDB4NGUsIDB4ODIsIDB4YTYsIDB4MDAsCi0gIDB4NDksIDB4NzAsIDB4M2QsIDB4YjksIDB4MGEsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OTQsIDB4YzUsIDB4YjIsCi0gIDB4OTQsIDB4YzQsIDB4NDEsIDB4MDksIDB4MDgsIDB4NDIsIDB4NTIsIDB4MTAsIDB4MDUsIDB4YjgsIDB4YTksIDB4MmYsCi0gIDB4ODEsIDB4ZTEsIDB4ODQsIDB4YWUsIDB4YjUsIDB4NzcsIDB4NzcsIDB4YWIsIDB4NDEsIDB4MjgsIDB4MGIsIDB4MWMsCi0gIDB4Y2QsIDB4YzcsIDB4YmQsIDB4YmMsIDB4NzIsIDB4NjAsIDB4ZmIsIDB4OWYsIDB4MzEsIDB4MmQsIDB4ZGMsIDB4YjIsCi0gIDB4MjMsIDB4ZWIsIDB4YTYsIDB4MmIsIDB4ZTQsIDB4ZDQsIDB4OWIsIDB4MTQsIDB4ZjYsIDB4MjYsIDB4YzMsIDB4ZTMsCi0gIDB4ZGQsIDB4ZWIsIDB4YjMsIDB4MjgsIDB4ZGIsIDB4NjcsIDB4YzQsIDB4YmIsIDB4NTYsIDB4NjQsIDB4MGUsIDB4NTksCi0gIDB4MTcsIDB4NjgsIDB4YWUsIDB4N2MsIDB4ZWQsIDB4ZGYsIDB4YjQsIDB4NjYsIDB4M2IsIDB4NmQsIDB4NmUsIDB4YTMsCi0gIDB4ZjIsIDB4ZjYsIDB4ZDgsIDB4NzcsIDB4OGQsIDB4YWIsIDB4YzksIDB4N2UsIDB4ZTMsIDB4OTQsIDB4ZjEsIDB4OGEsCi0gIDB4ODgsIDB4NWMsIDB4MWMsIDB4ODYsIDB4ZGYsIDB4ZjIsIDB4ZDQsIDB4MTksIDB4YmYsIDB4ZDQsIDB4MzYsIDB4YTAsCi0gIDB4YzUsIDB4YWQsIDB4NjEsIDB4NjEsIDB4Y2EsIDB4NmYsIDB4NTYsIDB4YjAsIDB4NzIsIDB4ZWEsIDB4YWUsIDB4YTksCi0gIDB4M2IsIDB4YWIsIDB4MTMsIDB4OTcsIDB4NTYsIDB4MmYsIDB4MGYsIDB4NTcsIDB4ZWYsIDB4ZTYsIDB4NDQsIDB4OWUsCi0gIDB4YzksIDB4ZjksIDB4Y2EsIDB4ZDcsIDB4NWQsIDB4YzksIDB4NjMsIDB4ZTUsIDB4ODcsIDB4ZGYsIDB4MGEsIDB4NTMsCi0gIDB4YTksIDB4ZWIsIDB4ZjksIDB4NWIsIDB4ZTYsIDB4OWYsIDB4NmEsIDB4YmEsIDB4ZTMsIDB4YTYsIDB4NzksIDB4NjAsCi0gIDB4NTYsIDB4MDgsIDB4MWQsIDB4MDMsIDB4NjgsIDB4YjEsIDB4M2QsIDB4MzYsIDB4NTcsIDB4NWUsIDB4ODUsIDB4MDIsCi0gIDB4NWEsIDB4NGEsIDB4ZDksIDB4ZjgsIDB4NjUsIDB4NjQsIDB4YjMsIDB4NzMsIDB4YzcsIDB4MjQsIDB4NGUsIDB4ZDIsCi0gIDB4MTMsIDB4MmQsIDB4MzMsIDB4M2UsIDB4NTQsIDB4NjUsIDB4Y2MsIDB4YjksIDB4NTIsIDB4Y2QsIDB4MmIsIDB4NTQsCi0gIDB4ZmIsIDB4ZDQsIDB4NzMsIDB4MWIsIDB4ZTQsIDB4OGUsIDB4MWMsIDB4YWQsIDB4NDAsIDB4NjgsIDB4OTQsIDB4ZWEsCi0gIDB4ODksIDB4MGEsIDB4ZmUsIDB4OTAsIDB4YWQsIDB4ZWYsIDB4NDUsIDB4M2UsIDB4MWIsIDB4ZGIsIDB4NWIsIDB4ZjcsCi0gIDB4OTQsIDB4ODQsIDB4ZWQsIDB4ZjcsIDB4NDIsIDB4ZDYsIDB4ZDIsIDB4NjIsIDB4MTIsIDB4M2YsIDB4ZGQsIDB4YjYsCi0gIDB4YzgsIDB4YTYsIDB4M2MsIDB4YTUsIDB4OWQsIDB4ODgsIDB4MDcsIDB4NzAsIDB4ODEsIDB4YzYsIDB4MDAsIDB4MzcsCi0gIDB4NmEsIDB4YWYsIDB4ZjIsIDB4ZDYsIDB4MGIsIDB4ZGEsIDB4ZDQsIDB4YzAsIDB4ZDEsIDB4NTEsIDB4Y2YsIDB4YTcsCi0gIDB4MzAsIDB4ZjEsIDB4NDcsIDB4YWYsIDB4ZjgsIDB4OTMsIDB4MDUsIDB4ZTcsIDB4ODcsIDB4ZTIsIDB4M2QsIDB4YTMsCi0gIDB4MGYsIDB4ODgsIDB4YjIsIDB4NTIsIDB4ZDEsIDB4MjAsIDB4YTYsIDB4MTIsIDB4MDcsIDB4NWIsIDB4ZWQsIDB4ZTIsCi0gIDB4ZDQsIDB4ZmEsIDB4ODAsIDB4MjksIDB4ZTUsIDB4YjYsIDB4N2IsIDB4M2EsIDB4NWEsIDB4Y2QsIDB4ODAsIDB4ODAsCi0gIDB4MDEsIDB4MTQsIDB4OTQsIDB4NGEsIDB4MjEsIDB4NjgsIDB4ZGUsIDB4OTAsIDB4ZGIsIDB4NGYsIDB4NTAsIDB4NDgsCi0gIDB4NDgsIDB4OTEsIDB4NTUsIDB4NjUsIDB4ZWYsIDB4MjEsIDB4YTEsIDB4ZWEsIDB4ZjIsIDB4MzEsIDB4YzUsIDB4NzEsCi0gIDB4YjUsIDB4ZTQsIDB4YzMsIDB4NDEsIDB4NGYsIDB4YTQsIDB4NWQsIDB4ODAsIDB4YjgsIDB4NTQsIDB4MWMsIDB4MjEsCi0gIDB4MWEsIDB4OTQsIDB4YjUsIDB4YTIsIDB4OWMsIDB4YzQsIDB4NDEsIDB4MTIsIDB4MDQsIDB4YzAsIDB4MTEsIDB4NTUsCi0gIDB4NTksIDB4NTEsIDB4NGQsIDB4NzUsIDB4YzYsIDB4YTksIDB4YzIsIDB4ZDYsIDB4MDEsIDB4NDAsIDB4NmIsIDB4YzksCi0gIDB4NDksIDB4YTQsIDB4MDIsIDB4M2EsIDB4N2UsIDB4YTMsIDB4MWQsIDB4MTIsIDB4OGYsIDB4ZjksIDB4N2QsIDB4YzQsCi0gIDB4M2QsIDB4ZjUsIDB4MzUsIDB4NDMsIDB4OGIsIDB4YjQsIDB4MWQsIDB4NzcsIDB4MWYsIDB4M2QsIDB4ZTUsIDB4NGIsCi0gIDB4M2IsIDB4NjYsIDB4MDgsIDB4YjcsIDB4ZGMsIDB4MTUsIDB4NTcsIDB4NmMsIDB4ZTQsIDB4ZjQsIDB4YWUsIDB4YTEsCi0gIDB4OWEsIDB4NTgsIDB4YjEsIDB4NzMsIDB4MDksIDB4ZWEsIDB4MDgsIDB4ZjQsIDB4N2EsIDB4Y2UsIDB4MjMsIDB4MzAsCi0gIDB4ZTcsIDB4ZmUsIDB4ODYsIDB4MzcsIDB4NjAsIDB4ZjMsIDB4YmUsIDB4ZjksIDB4YzQsIDB4NmEsIDB4NDYsIDB4MDEsCi0gIDB4OWUsIDB4ODIsIDB4MzcsIDB4MzksIDB4YzYsIDB4NzgsIDB4YmUsIDB4NTUsIDB4OWUsIDB4NjYsIDB4MDEsIDB4YmIsCi0gIDB4NGIsIDB4YzksIDB4NDcsIDB4NWIsIDB4YTgsIDB4NzQsIDB4ZmEsIDB4Y2IsIDB4MjUsIDB4MzgsIDB4MWEsIDB4MzcsCi0gIDB4OGIsIDB4M2UsIDB4OTgsIDB4NTgsIDB4NzYsIDB4OGQsIDB4OTcsIDB4MzEsIDB4ZWYsIDB4ZDMsIDB4OGYsIDB4ZGYsCi0gIDB4YjgsIDB4NmUsIDB4YTIsIDB4OTQsIDB4Y2MsIDB4ZWQsIDB4ZjgsIDB4ZTgsIDB4ZTksIDB4ODcsIDB4ZTgsIDB4NzIsCi0gIDB4ZWUsIDB4YmYsIDB4YzEsIDB4MjQsIDB4MTEsIDB4NGMsIDB4YTYsIDB4YWQsIDB4NmMsIDB4YmUsIDB4YzcsIDB4ODgsCi0gIDB4YTEsIDB4MjAsIDB4MDAsIDB4OGQsIDB4YjQsIDB4YzIsIDB4MjgsIDB4ZGQsIDB4ZWUsIDB4ZWMsIDB4MjMsIDB4NTIsCi0gIDB4NzIsIDB4MmYsIDB4YjUsIDB4NzUsIDB4NzksIDB4NTcsIDB4NGQsIDB4OTEsIDB4YTAsIDB4MWQsIDB4NjksIDB4YjAsCi0gIDB4ZjMsIDB4NjIsIDB4M2QsIDB4OWUsIDB4NDAsIDB4NDMsIDB4NGEsIDB4YWIsIDB4NjIsIDB4YmMsIDB4NWIsIDB4MzksCi0gIDB4MjIsIDB4OTksIDB4YzAsIDB4NzgsIDB4OWUsIDB4NGEsIDB4NjAsIDB4YjcsIDB4YzMsIDB4NGUsIDB4ZjQsIDB4MTgsCi0gIDB4NjEsIDB4ZGMsIDB4OGYsIDB4MTYsIDB4MzMsIDB4YTgsIDB4YzAsIDB4YWUsIDB4ODYsIDB4MTcsIDB4MmQsIDB4ODgsCi0gIDB4OWMsIDB4YmIsIDB4NGQsIDB4NWIsIDB4NDksIDB4YjMsIDB4ZjAsIDB4ZDQsIDB4NGUsIDB4OGEsIDB4MjUsIDB4NmMsCi0gIDB4ZTUsIDB4MTgsIDB4MzksIDB4MjEsIDB4YzEsIDB4YzcsIDB4NWQsIDB4NjYsIDB4MTMsIDB4MzQsIDB4OTQsIDB4MzAsCi0gIDB4MGQsIDB4YzIsIDB4MDMsIDB4MTAsIDB4ODAsIDB4YzQsIDB4MjAsIDB4MjEsIDB4NmEsIDB4NTgsIDB4MmUsIDB4OGEsCi0gIDB4NjMsIDB4ZWYsIDB4ZTcsIDB4ODIsIDB4ODUsIDB4OWIsIDB4ZDAsIDB4MjQsIDB4YzMsIDB4NzEsIDB4ODYsIDB4ZmQsCi0gIDB4ZWUsIDB4MzMsIDB4YzksIDB4ZTIsIDB4YjgsIDB4NjYsIDB4N2YsIDB4ZTEsIDB4ZmQsIDB4ZWUsIDB4YjcsIDB4ZGEsCi0gIDB4MWQsIDB4ZGYsIDB4ZDMsIDB4MDMsIDB4YTAsIDB4YmEsIDB4NWQsIDB4YzYsIDB4YmUsIDB4YjYsIDB4YWIsIDB4NmIsCi0gIDB4YmYsIDB4ODQsIDB4YTEsIDB4NWUsIDB4OTMsIDB4YmYsIDB4YWUsIDB4ZDEsIDB4NTksIDB4Y2EsIDB4ZGEsIDB4YmMsCi0gIDB4NjksIDB4YzAsIDB4NDMsIDB4ZjcsIDB4MDAsIDB4MDQsIDB4YjQsIDB4NDcsIDB4ODcsIDB4MzUsIDB4ODIsIDB4NzUsCi0gIDB4NTQsIDB4NDIsIDB4ZGMsIDB4YTIsIDB4MDksIDB4NDQsIDB4YjksIDB4OWUsIDB4NjAsIDB4MDYsIDB4MzcsIDB4NGIsCi0gIDB4YzYsIDB4NzMsIDB4YTEsIDB4NzIsIDB4Y2MsIDB4YzEsIDB4OTcsIDB4MzUsIDB4M2YsIDB4YmUsIDB4YWUsIDB4YjAsCi0gIDB4YTAsIDB4MDcsIDB4MjEsIDB4MmEsIDB4OTQsIDB4YWQsIDB4ZDksIDB4MDMsIDB4MDIsIDB4NjEsIDB4MjAsIDB4ODUsCi0gIDB4YTAsIDB4NDUsIDB4ZWMsIDB4YzUsIDB4NjIsIDB4ZWIsIDB4NWMsIDB4NjksIDB4NzcsIDB4MjAsIDB4YjEsIDB4ODMsCi0gIDB4NGQsIDB4ODYsIDB4YzcsIDB4YTgsIDB4NGIsIDB4NGQsIDB4NTksIDB4YWQsIDB4MjYsIDB4NzEsIDB4ZmUsIDB4NTIsCi0gIDB4YjgsIDB4NDcsIDB4OGYsIDB4ZTEsIDB4NzIsIDB4OTgsIDB4MjEsIDB4ZDcsIDB4NDgsIDB4YjgsIDB4Y2YsIDB4YzMsCi0gIDB4ZjgsIDB4ZmUsIDB4N2IsIDB4YzIsIDB4N2EsIDB4YzIsIDB4OTIsIDB4NjksIDB4ODEsIDB4ZTQsIDB4OWUsIDB4ZmUsCi0gIDB4ZGEsIDB4NzcsIDB4MGMsIDB4N2IsIDB4OTYsIDB4YjksIDB4MGYsIDB4NmEsIDB4ZTYsIDB4ODcsIDB4MTQsIDB4M2IsCi0gIDB4OGIsIDB4ZDYsIDB4ZmIsIDB4YTUsIDB4ZDEsIDB4OTgsIDB4MzQsIDB4NzQsIDB4NzMsIDB4ZTIsIDB4N2IsIDB4NDcsCi0gIDB4MmYsIDB4NjEsIDB4NTksIDB4YjksIDB4NTMsIDB4N2UsIDB4ZjYsIDB4YWYsIDB4ZDcsIDB4YTAsIDB4ZGQsIDB4MGIsCi0gIDB4NGUsIDB4NjAsIDB4YzMsIDB4YTcsIDB4YzgsIDB4ODgsIDB4MzMsIDB4NjcsIDB4NjcsIDB4NjUsIDB4YmMsIDB4YzEsCi0gIDB4NGIsIDB4ZTEsIDB4YmIsIDB4NDcsIDB4YTcsIDB4YWMsIDB4YWIsIDB4OGYsIDB4MWMsIDB4YzEsIDB4YWQsIDB4YmMsCi0gIDB4YTcsIDB4NGUsIDB4NWUsIDB4NTgsIDB4ZDQsIDB4MzksIDB4YWUsIDB4MDcsIDB4MTgsIDB4YzQsIDB4MTUsIDB4ZjQsCi0gIDB4MTIsIDB4OTIsIDB4ZjMsIDB4MzksIDB4ZGIsIDB4MGEsIDB4MTAsIDB4ODEsIDB4NTMsIDB4N2EsIDB4ZTIsIDB4YTgsCi0gIDB4ZDQsIDB4NmEsIDB4N2EsIDB4YmEsIDB4OTYsIDB4YmUsIDB4ZDYsIDB4MTAsIDB4YzAsIDB4NTUsIDB4Y2QsIDB4YWUsCi0gIDB4N2UsIDB4NjIsIDB4NmMsIDB4NzgsIDB4ZWUsIDB4ZWQsIDB4MTksIDB4OTgsIDB4ZTksIDB4YzQsIDB4MzAsIDB4NzAsCi0gIDB4MDMsIDB4YmQsIDB4YTgsIDB4MWIsIDB4ZWMsIDB4ZDksIDB4ZmYsIDB4YTgsIDB4MmQsIDB4ZDMsIDB4NDEsIDB4NzksCi0gIDB4MGQsIDB4N2MsIDB4ZTIsIDB4NmEsIDB4NDAsIDB4M2IsIDB4NTIsIDB4MjksIDB4NDIsIDB4NTQsIDB4NTQsIDB4ZGMsCi0gIDB4YWEsIDB4Y2YsIDB4ZGYsIDB4M2YsIDB4YWEsIDB4YjIsIDB4ODUsIDB4MTUsIDB4ZjMsIDB4NDIsIDB4M2MsIDB4NjIsCi0gIDB4YzgsIDB4MmMsIDB4NDUsIDB4MTgsIDB4MjYsIDB4NDgsIDB4MTcsIDB4NGQsIDB4NWIsIDB4MDQsIDB4ZjAsIDB4MTIsCi0gIDB4OWIsIDB4ZDgsIDB4NjcsIDB4ODUsIDB4ZDMsIDB4MTIsIDB4MjgsIDB4YTUsIDB4YWMsIDB4MDQsIDB4YTUsIDB4YTUsCi0gIDB4MDgsIDB4MDUsIDB4YTAsIDB4ODAsIDB4YzQsIDB4MjAsIDB4NjEsIDB4NTAsIDB4MGMsIDB4MDEsIDB4ODEsIDB4ZDcsCi0gIDB4ZWUsIDB4YTAsIDB4NWUsIDB4MDgsIDB4YmYsIDB4MzAsIDB4Y2YsIDB4NWQsIDB4NzMsIDB4Y2UsIDB4N2YsIDB4NzQsCi0gIDB4ZjQsIDB4Y2YsIDB4MjcsIDB4Y2UsIDB4NTEsIDB4YTcsIDB4ODEsIDB4ZjcsIDB4OTYsIDB4NWQsIDB4ZGIsIDB4YWQsCi0gIDB4MjgsIDB4ZDYsIDB4MDYsIDB4MDEsIDB4ZWUsIDB4MTAsIDB4OTEsIDB4MmYsIDB4YjAsIDB4ZGUsIDB4NDAsIDB4MDEsCi0gIDB4MTIsIDB4NzksIDB4YTQsIDB4YmIsIDB4OGIsIDB4YzUsIDB4NzAsIDB4ZGUsIDB4YjYsIDB4NGUsIDB4ZGMsIDB4MzMsCi0gIDB4OTIsIDB4NDEsIDB4ZTEsIDB4NDIsIDB4MjgsIDB4MmIsIDB4ODgsIDB4ODUsIDB4ZWEsIDB4NzAsIDB4MjYsIDB4ODYsCi0gIDB4ZjUsIDB4ODAsIDB4MTgsIDB4ZWYsIDB4MTAsIDB4YjgsIDB4MzMsIDB4MzUsIDB4NWIsIDB4MTAsIDB4MGUsIDB4MjEsCi0gIDB4NGMsIDB4YzcsIDB4NDcsIDB4NWQsIDB4NjIsIDB4M2EsIDB4ZTQsIDB4NDEsIDB4OTcsIDB4OWEsIDB4MWEsIDB4YmUsCi0gIDB4NWQsIDB4ODksIDB4NGMsIDB4YjksIDB4ZTcsIDB4NTYsIDB4MWYsIDB4YzAsIDB4NzksIDB4ZjIsIDB4MzIsIDB4ZmYsCi0gIDB4OGEsIDB4M2MsIDB4OWQsIDB4NGQsIDB4NjMsIDB4ZjYsIDB4NTIsIDB4ZmMsIDB4ZGUsIDB4OTUsIDB4YTIsIDB4MDUsCi0gIDB4MjUsIDB4NGUsIDB4YjgsIDB4YjMsIDB4ODUsIDB4ODMsIDB4MTcsIDB4ZmEsIDB4M2UsIDB4NTMsIDB4ZjYsIDB4NGIsCi0gIDB4ZTMsIDB4ODYsIDB4NTIsIDB4MzEsIDB4MGEsIDB4M2YsIDB4Y2YsIDB4MWYsIDB4YzcsIDB4ZjEsIDB4MGEsIDB4ODAsCi0gIDB4MTEsIDB4ZGMsIDB4YWEsIDB4NWEsIDB4NmYsIDB4MjIsIDB4NzgsIDB4NGEsIDB4YjYsIDB4NzQsIDB4MTcsIDB4ZDMsCi0gIDB4YTYsIDB4MjAsIDB4N2YsIDB4YjIsIDB4YTMsIDB4NTksIDB4ZTQsIDB4ZDMsIDB4NTQsIDB4YmMsIDB4ZTcsIDB4MWQsCi0gIDB4NTcsIDB4NzcsIDB4NGYsIDB4OTIsIDB4MWQsIDB4NmYsIDB4YzYsIDB4NWEsIDB4MjEsIDB4YmMsIDB4YjIsIDB4NzEsCi0gIDB4YTAsIDB4ODYsIDB4NDIsIDB4MzcsIDB4OWMsIDB4YTcsIDB4YjcsIDB4NjksIDB4MTksIDB4YmIsIDB4NDcsIDB4N2EsCi0gIDB4YzEsIDB4MDMsIDB4ZjMsIDB4MTYsIDB4NjEsIDB4M2QsIDB4NWUsIDB4YmQsIDB4YmUsIDB4YjIsIDB4NDcsIDB4ZTAsCi0gIDB4M2UsIDB4NjIsIDB4OWYsIDB4ZTEsIDB4OTUsIDB4NjgsIDB4MDMsIDB4ZDUsIDB4ZmIsIDB4N2IsIDB4NzYsIDB4ZGYsCi0gIDB4MDAsIDB4MTAsIDB4NzEsIDB4MjcsIDB4ZTIsIDB4OTgsIDB4ODksIDB4ZDUsIDB4ZGYsIDB4ZjYsIDB4YWYsIDB4ZTAsCi0gIDB4ZDksIDB4ZDEsIDB4NTksIDB4ZGMsIDB4NmEsIDB4OWQsIDB4Y2QsIDB4OWYsIDB4MjAsIDB4MmIsIDB4OTQsIDB4ZTksCi0gIDB4ZGIsIDB4MGYsIDB4NjEsIDB4MjUsIDB4YmMsIDB4NzMsIDB4OTEsIDB4MDAsIDB4MTYsIDB4ZGMsIDB4OTMsIDB4YzcsCi0gIDB4YTcsIDB4YTMsIDB4ZjYsIDB4YmEsIDB4ZGYsIDB4YTQsIDB4NzIsIDB4NDgsIDB4MTcsIDB4YWUsIDB4Y2QsIDB4ZmEsCi0gIDB4NGYsIDB4NzksIDB4ZjUsIDB4OWUsIDB4YjMsIDB4MWEsIDB4MzUsIDB4ZjAsIDB4N2YsIDB4MjcsIDB4OTIsIDB4N2IsCi0gIDB4YWEsIDB4YTAsIDB4MWUsIDB4ZWYsIDB4Y2EsIDB4YzEsIDB4YTksIDB4YzIsIDB4ZWUsIDB4ZjYsIDB4ZmEsIDB4OTEsCi0gIDB4ZjMsIDB4M2MsIDB4MDksIDB4ZjgsIDB4ZjYsIDB4NzAsIDB4MmMsIDB4MTgsIDB4ZGYsIDB4MDksIDB4YjksIDB4MzksCi0gIDB4YWEsIDB4OTksIDB4MzEsIDB4NGEsIDB4ZDEsIDB4MDYsIDB4ZmEsIDB4ZGYsIDB4YmQsIDB4ODEsIDB4MWIsIDB4NDAsCi0gIDB4N2IsIDB4MjksIDB4NzMsIDB4Y2EsIDB4OGIsIDB4MDksIDB4NTcsIDB4NzksIDB4YjksIDB4YmUsIDB4MzYsIDB4Y2QsCi0gIDB4MzcsIDB4MzMsIDB4NjgsIDB4YjQsIDB4MjMsIDB4OTQsIDB4NTksIDB4NWEsIDB4NzcsIDB4ZmQsIDB4ZTksIDB4MDQsCi0gIDB4OGEsIDB4YTgsIDB4MTQsIDB4NTksIDB4MGMsIDB4NjAsIDB4MTUsIDB4ODQsIDB4ZDUsIDB4ZGYsIDB4YWIsIDB4NTIsCi0gIDB4ZjEsIDB4ZWIsIDB4NDAsIDB4ZTAsIDB4NzUsIDB4M2EsIDB4M2QsIDB4NzcsIDB4NTcsIDB4ZTAsIDB4YzYsIDB4NTksCi0gIDB4NGUsIDB4YWUsIDB4ODgsIDB4MWYsIDB4ZWMsIDB4ZTUsIDB4ZjQsIDB4Y2MsIDB4MzAsIDB4YzgsIDB4MDIsIDB4NTgsCi0gIDB4YmUsIDB4OTEsIDB4NTAsIDB4MDQsIDB4OTUsIDB4MTQsIDB4NTAsIDB4NGYsIDB4MDIsIDB4YTQsIDB4ZTgsIDB4MzksCi0gIDB4OTgsIDB4MWMsIDB4ZDEsIDB4NjIsIDB4MDYsIDB4MDgsIDB4MjEsIDB4NDEsIDB4MDUsIDB4ZmMsIDB4M2QsIDB4YWQsCi0gIDB4NWYsIDB4ZDksIDB4Y2QsIDB4ODUsIDB4OTcsIDB4ZTUsIDB4MDIsIDB4OTIsIDB4YTMsIDB4MWMsIDB4YWYsIDB4M2EsCi0gIDB4ODAsIDB4ZGYsIDB4NzEsIDB4N2QsIDB4MjYsIDB4ZjUsIDB4ZGQsIDB4NjYsIDB4YTYsIDB4OTUsIDB4NmYsIDB4MGMsCi0gIDB4ODAsIDB4NjYsIDB4ZmMsIDB4MmYsIDB4NDcsIDB4M2MsIDB4NjgsIDB4YTgsIDB4ZTYsIDB4YTIsIDB4MjEsIDB4MzQsCi0gIDB4ODIsIDB4M2EsIDB4NzUsIDB4MDgsIDB4NGEsIDB4NzYsIDB4YzgsIDB4MTksIDB4MGYsIDB4YzgsIDB4MTUsIDB4MGIsCi0gIDB4M2IsIDB4N2YsIDB4NGEsIDB4ZjQsIDB4ZDksIDB4NmUsIDB4OWIsIDB4ZTIsIDB4NjYsIDB4NWYsIDB4OWEsIDB4ZTUsCi0gIDB4M2UsIDB4OGIsIDB4NzYsIDB4OTgsIDB4ZDMsIDB4NTQsIDB4NGEsIDB4MjQsIDB4NjEsIDB4M2UsIDB4NzEsIDB4YmEsCi0gIDB4MTEsIDB4MDUsIDB4OTgsIDB4MDcsIDB4MjEsIDB4N2EsIDB4OTQsIDB4YzUsIDB4ZGEsIDB4MDgsIDB4ODMsIDB4MTYsCi0gIDB4YjMsIDB4ODEsIDB4NGUsIDB4MTIsIDB4OWIsIDB4MDksIDB4YTIsIDB4ZmMsIDB4OGIsIDB4NDAsIDB4MDAsIDB4MGUsCi0gIDB4N2QsIDB4NjEsIDB4OWUsIDB4ZmEsIDB4NWIsIDB4MzQsIDB4ZmIsIDB4Y2IsIDB4OGYsIDB4OGQsIDB4MmQsIDB4NTAsCi0gIDB4NmMsIDB4MWMsIDB4NWIsIDB4Y2IsIDB4ZjksIDB4NGUsIDB4MmQsIDB4MGQsIDB4N2MsIDB4ZmEsIDB4MGYsIDB4ODIsCi0gIDB4ZWUsIDB4YmMsIDB4MjMsIDB4MzEsIDB4NjMsIDB4YTksIDB4MGMsIDB4ZTcsIDB4MzMsIDB4ZDIsIDB4M2MsIDB4NmQsCi0gIDB4ZDcsIDB4NTksIDB4OTMsIDB4ZTgsIDB4MzIsIDB4OGUsIDB4NzMsIDB4YzcsIDB4MzMsIDB4YzMsIDB4Y2UsIDB4ZTYsCi0gIDB4ZWMsIDB4M2IsIDB4MGIsIDB4NzMsIDB4NTUsIDB4MWUsIDB4ZjIsIDB4MWIsIDB4NjgsIDB4ODMsIDB4ZWEsIDB4MzUsCi0gIDB4YTgsIDB4ZmQsIDB4MzMsIDB4ZjAsIDB4ZGIsIDB4ODEsIDB4OGUsIDB4MDksIDB4YTEsIDB4YWMsIDB4MWQsIDB4OWYsCi0gIDB4NDQsIDB4OGIsIDB4NTEsIDB4YzgsIDB4MzksIDB4YjYsIDB4ZTcsIDB4ZWUsIDB4YmQsIDB4NDUsIDB4Y2MsIDB4ZjAsCi0gIDB4NWEsIDB4YTMsIDB4YTAsIDB4ZjYsIDB4NTUsIDB4NWYsIDB4OTEsIDB4YTcsIDB4YTksIDB4YzUsIDB4M2IsIDB4ZDgsCi0gIDB4YjEsIDB4YWUsIDB4Y2QsIDB4NWEsIDB4ODksIDB4MzgsIDB4OWYsIDB4NGEsIDB4MGMsIDB4ODQsIDB4MjQsIDB4OTUsCi0gIDB4YjksIDB4MTUsIDB4OTksIDB4YzksIDB4NWUsIDB4NjYsIDB4NTIsIDB4NzUsIDB4N2QsIDB4ZmMsIDB4NWUsIDB4MmIsCi0gIDB4MzgsIDB4ZGIsIDB4MWMsIDB4NmEsIDB4ODQsIDB4NjMsIDB4ZTgsIDB4NWIsIDB4OWQsIDB4MjMsIDB4MmQsIDB4ZjQsCi0gIDB4MDYsIDB4MjgsIDB4MDYsIDB4YjIsIDB4MjEsIDB4MDgsIDB4MTMsIDB4ODAsIDB4NzYsIDB4NWEsIDB4NmYsIDB4MGEsCi0gIDB4NWIsIDB4YzgsIDB4OWUsIDB4OTcsIDB4ODIsIDB4YmQsIDB4ZTcsIDB4MzMsIDB4ODEsIDB4YjUsIDB4NTQsIDB4MzcsCi0gIDB4YjIsIDB4NTEsIDB4ZjAsIDB4YzcsIDB4ODEsIDB4OTIsIDB4OTMsIDB4YmYsIDB4MTgsIDB4ZDIsIDB4YjMsIDB4YWYsCi0gIDB4NTYsIDB4NWIsIDB4ZTMsIDB4OTcsIDB4YjIsIDB4MWYsIDB4M2YsIDB4ZDYsIDB4YTksIDB4YzYsIDB4OTEsIDB4YjEsCi0gIDB4ZDIsIDB4MzcsIDB4YzMsIDB4YzYsIDB4MzYsIDB4ZTMsIDB4ZGQsIDB4Y2EsIDB4NzAsIDB4YWMsIDB4ZTksIDB4OWYsCi0gIDB4YTQsIDB4NjMsIDB4ZDksIDB4NmEsIDB4ZDIsIDB4ZmIsIDB4ZDMsIDB4MzQsIDB4ZGYsIDB4OTQsIDB4NjEsIDB4MWMsCi0gIDB4YWEsIDB4NTUsIDB4NGEsIDB4YjQsIDB4ZWEsIDB4ODQsIDB4MTEsIDB4NWQsIDB4ZmMsIDB4OWEsIDB4NmQsIDB4MTgsCi0gIDB4Y2EsIDB4MDcsIDB4ZjAsIDB4MDQsIDB4YWQsIDB4OWUsIDB4MDgsIDB4ODQsIDB4MTEsIDB4ZDgsIDB4OGUsIDB4YzEsCi0gIDB4OTAsIDB4YjEsIDB4ODAsIDB4MGYsIDB4ODYsIDB4OTYsIDB4NTgsIDB4MjEsIDB4NjAsIDB4MGUsIDB4ZWUsIDB4ODgsCi0gIDB4ZTYsIDB4NDEsIDB4MWQsIDB4M2EsIDB4N2IsIDB4OTEsIDB4YjksIDB4OWYsIDB4YjUsIDB4MTYsIDB4MjMsIDB4ZjIsCi0gIDB4OGEsIDB4MzcsIDB4YTQsIDB4NjgsIDB4MWIsIDB4YjEsIDB4YTYsIDB4MjgsIDB4NGIsIDB4NGUsIDB4NjAsIDB4MmMsCi0gIDB4ODksIDB4NjYsIDB4NTMsIDB4NGMsIDB4NTQsIDB4MGUsIDB4MWYsIDB4ZGYsIDB4OTksIDB4NjksIDB4ODYsIDB4NjUsCi0gIDB4YjksIDB4YjQsIDB4MmEsIDB4Y2EsIDB4NTEsIDB4NGEsIDB4MjgsIDB4MDAsIDB4NGYsIDB4NmEsIDB4NTEsIDB4MDYsCi0gIDB4ZjcsIDB4NDcsIDB4Y2EsIDB4NzQsIDB4OWUsIDB4YWYsIDB4ZDQsIDB4YjYsIDB4MjAsIDB4MjQsIDB4ZGQsIDB4ZjQsCi0gIDB4NGQsIDB4MTAsIDB4MDcsIDB4MTAsIDB4MmQsIDB4NTIsIDB4OGMsIDB4MGMsIDB4ZjUsIDB4MDAsIDB4MDIsIDB4N2MsCi0gIDB4NzYsIDB4ODksIDB4MDQsIDB4ZWUsIDB4MmQsIDB4MTAsIDB4NTgsIDB4OTAsIDB4NTEsIDB4NTIsIDB4ZTQsIDB4YjEsCi0gIDB4MTEsIDB4YWMsIDB4MTYsIDB4OGQsIDB4NTIsIDB4ODQsIDB4ZjEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MGQsIDB4ZTksCi0gIDB4NmQsIDB4MTAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OTQsIDB4ZDUsIDB4Y2UsIDB4OGIsIDB4NjEsIDB4ODEsIDB4MzAsCi0gIDB4ODgsIDB4NjgsIDB4NTEsIDB4MTksIDB4MDQsIDB4MDIsIDB4ODUsIDB4YTMsIDB4MmUsIDB4MGMsIDB4MTEsIDB4YWUsCi0gIDB4MmYsIDB4ODAsIDB4MmMsIDB4ODMsIDB4MWEsIDB4MmQsIDB4OTUsIDB4YTksIDB4NTIsIDB4MzgsIDB4MDAsIDB4NzQsCi0gIDB4OTcsIDB4ZGYsIDB4ZmQsIDB4ZmIsIDB4YTQsIDB4ZjcsIDB4NDYsIDB4ZWEsIDB4NzEsIDB4NzgsIDB4YjcsIDB4ZDQsCi0gIDB4YmEsIDB4MTMsIDB4NTEsIDB4NmQsIDB4MWIsIDB4YmMsIDB4NTUsIDB4ZWIsIDB4ZmYsIDB4NDIsIDB4M2EsIDB4MjksCi0gIDB4ZGIsIDB4ZGIsIDB4YTAsIDB4MjgsIDB4MzAsIDB4ZjgsIDB4MjUsIDB4NjYsIDB4NWYsIDB4YzAsIDB4NDcsIDB4ZGIsCi0gIDB4ZjcsIDB4MjIsIDB4MjksIDB4ZjMsIDB4NzYsIDB4NzksIDB4YmEsIDB4NDIsIDB4ZDMsIDB4ZDQsIDB4NWYsIDB4ZDYsCi0gIDB4NjcsIDB4ZjAsIDB4YWYsIDB4OWUsIDB4OWUsIDB4ZjksIDB4OTksIDB4ZjAsIDB4ZjgsIDB4MjgsIDB4YzgsIDB4MDAsCi0gIDB4ZjYsIDB4MDcsIDB4ZDIsIDB4N2UsIDB4NmIsIDB4YWQsIDB4NzMsIDB4MDMsIDB4ZWEsIDB4OTUsIDB4YjgsIDB4MjksCi0gIDB4ZjksIDB4MzQsIDB4OTEsIDB4Y2YsIDB4YjcsIDB4ZTUsIDB4ZTksIDB4N2MsIDB4NWEsIDB4MmYsIDB4MGIsIDB4YjcsCi0gIDB4YzcsIDB4ZDksIDB4NGEsIDB4YmIsIDB4NzksIDB4NTEsIDB4ZGIsIDB4MGUsIDB4NjcsIDB4OTUsIDB4N2EsIDB4NDYsCi0gIDB4N2QsIDB4NGIsIDB4OTgsIDB4MWEsIDB4ZjMsIDB4ZDksIDB4MzgsIDB4MWIsIDB4YjQsIDB4ZjUsIDB4NTgsIDB4ZmIsCi0gIDB4MGMsIDB4MDcsIDB4MDYsIDB4ZmIsIDB4OGUsIDB4OWQsIDB4YTAsIDB4ODYsIDB4YjgsIDB4ZDcsIDB4OWYsIDB4YjMsCi0gIDB4OWEsIDB4ODcsIDB4NmUsIDB4ZmQsIDB4NGYsIDB4NTIsIDB4ZTEsIDB4YWMsIDB4YjYsIDB4OWEsIDB4MjgsIDB4MWYsCi0gIDB4ZGQsIDB4YTgsIDB4ODMsIDB4NTEsIDB4ODcsIDB4ZWQsIDB4MTIsIDB4ZjAsIDB4M2QsIDB4ODYsIDB4NGEsIDB4NmIsCi0gIDB4OGMsIDB4NzEsIDB4MzUsIDB4ZGQsIDB4N2UsIDB4ZTMsIDB4YmYsIDB4YzEsIDB4OTQsIDB4MTYsIDB4YTIsIDB4ZTAsCi0gIDB4N2YsIDB4MzcsIDB4YjIsIDB4YjMsIDB4NjAsIDB4YjQsIDB4Y2QsIDB4MDMsIDB4ZTQsIDB4YTQsIDB4MjcsIDB4YTAsCi0gIDB4MTQsIDB4NWEsIDB4NzcsIDB4MzIsIDB4MTEsIDB4MTcsIDB4MzMsIDB4MmQsIDB4NjAsIDB4YWUsIDB4OGUsIDB4MGUsCi0gIDB4NDYsIDB4MWMsIDB4ZjksIDB4YTYsIDB4ODUsIDB4NjAsIDB4NzIsIDB4ZmQsIDB4YWMsIDB4MTAsIDB4NGIsIDB4YWUsCi0gIDB4ZDYsIDB4MDMsIDB4NDYsIDB4OWIsIDB4YjMsIDB4YjcsIDB4ZWYsIDB4YmEsIDB4NjUsIDB4ZmQsIDB4ZGEsIDB4ZWUsCi0gIDB4MTksIDB4MDMsIDB4NTcsIDB4NTksIDB4MmUsIDB4YzEsIDB4NmMsIDB4YWUsIDB4MGUsIDB4MzksIDB4ODEsIDB4MWMsCi0gIDB4YzQsIDB4ODUsIDB4ODIsIDB4NzcsIDB4YmMsIDB4ODQsIDB4NjgsIDB4OTgsIDB4ZGEsIDB4YjYsIDB4YjMsIDB4ZWIsCi0gIDB4MmEsIDB4NDAsIDB4ZTMsIDB4YjMsIDB4YzgsIDB4ZGMsIDB4MGMsIDB4YzAsIDB4MmMsIDB4MjgsIDB4M2UsIDB4M2IsCi0gIDB4N2YsIDB4YTcsIDB4ZGMsIDB4N2YsIDB4ZjcsIDB4ZWMsIDB4ZDksIDB4NjksIDB4YWIsIDB4YjIsIDB4NjIsIDB4OGUsCi0gIDB4YzgsIDB4MDEsIDB4YzgsIDB4ODAsIDB4NjIsIDB4MTYsIDB4MTksIDB4MGMsIDB4NDYsIDB4MDIsIDB4MTMsIDB4OTksCi0gIDB4NzAsIDB4MjAsIDB4MTcsIDB4ZWMsIDB4ZDAsIDB4ZDAsIDB4MWMsIDB4NjAsIDB4YjYsIDB4NTIsIDB4YTcsIDB4NDAsCi0gIDB4MDAsIDB4MTMsIDB4ZGUsIDB4YWIsIDB4N2YsIDB4OTksIDB4ODUsIDB4NDAsIDB4NmEsIDB4YjUsIDB4NDEsIDB4MjMsCi0gIDB4YjYsIDB4MDksIDB4ZjcsIDB4OTcsIDB4OTksIDB4MDQsIDB4YjMsIDB4OTksIDB4NzIsIDB4YmEsIDB4ODUsIDB4YTAsCi0gIDB4YTksIDB4OTksIDB4ODIsIDB4MDUsIDB4OTIsIDB4ODQsIDB4MDksIDB4NGEsIDB4MmEsIDB4YjEsIDB4YWYsIDB4Y2QsCi0gIDB4YmQsIDB4ZjcsIDB4NjYsIDB4OWMsIDB4MjYsIDB4ZTMsIDB4ZjMsIDB4MDcsIDB4NmYsIDB4M2YsIDB4MmYsIDB4ZTMsCi0gIDB4ZmMsIDB4ZmUsIDB4MzksIDB4ZjEsIDB4YzMsIDB4YWYsIDB4NjcsIDB4OTIsIDB4ZjksIDB4ZjAsIDB4ZDcsIDB4M2MsCi0gIDB4OGMsIDB4OGUsIDB4MmQsIDB4NmQsIDB4NTMsIDB4NTYsIDB4NzQsIDB4MDMsIDB4YjMsIDB4Y2QsIDB4NjUsIDB4ZTUsCi0gIDB4NmIsIDB4OGEsIDB4NGUsIDB4OWUsIDB4OGUsIDB4NzgsIDB4YzAsIDB4MjQsIDB4ZWMsIDB4OWEsIDB4YTYsIDB4MDEsCi0gIDB4NzUsIDB4NDEsIDB4OWEsIDB4M2IsIDB4M2UsIDB4M2MsIDB4MjQsIDB4ZDEsIDB4NjksIDB4MWUsIDB4Y2MsIDB4Y2MsCi0gIDB4MmYsIDB4OTQsIDB4MjUsIDB4YzEsIDB4NmYsIDB4OTUsIDB4OWIsIDB4NmMsIDB4MzMsIDB4MDAsIDB4NGEsIDB4YzAsCi0gIDB4Y2IsIDB4MmYsIDB4OGEsIDB4M2UsIDB4NTgsIDB4MDksIDB4MTUsIDB4NzksIDB4NDAsIDB4MWMsIDB4MjEsIDB4MWEsCi0gIDB4OTQsIDB4Y2QsIDB4OWUsIDB4OWUsIDB4YzMsIDB4NDEsIDB4MTIsIDB4MDQsIDB4ZTYsIDB4NDgsIDB4ZDMsIDB4MmMsCi0gIDB4NTMsIDB4NjMsIDB4OGIsIDB4ZTIsIDB4ZjQsIDB4OTYsIDB4NWEsIDB4MDAsIDB4NTgsIDB4NWYsIDB4NzgsIDB4YWMsCi0gIDB4MDcsIDB4OGEsIDB4ZjYsIDB4YjMsIDB4YWIsIDB4MGMsIDB4ZjAsIDB4MWUsIDB4ZjYsIDB4YmMsIDB4YWYsIDB4ZWIsCi0gIDB4NWMsIDB4YmQsIDB4NjUsIDB4ZjAsIDB4YjYsIDB4N2IsIDB4Y2EsIDB4YmUsIDB4OGUsIDB4YmIsIDB4MTMsIDB4N2QsCi0gIDB4YWYsIDB4MGUsIDB4Y2YsIDB4MzIsIDB4YWYsIDB4ZTYsIDB4ZjIsIDB4MGMsIDB4ZTksIDB4MzMsIDB4YjAsIDB4NzYsCi0gIDB4MDgsIDB4NWEsIDB4ZmYsIDB4OTcsIDB4NjYsIDB4ZGUsIDB4YzksIDB4NDUsIDB4YzYsIDB4ZjcsIDB4YWMsIDB4ODcsCi0gIDB4OTEsIDB4ZGYsIDB4ZmYsIDB4NzcsIDB4OWMsIDB4N2UsIDB4OTMsIDB4YWUsIDB4ZTQsIDB4ZTQsIDB4YjksIDB4MDUsCi0gIDB4NTcsIDB4N2IsIDB4ZjMsIDB4YjMsIDB4NWEsIDB4MjEsIDB4ZWYsIDB4NGQsIDB4YjEsIDB4MTQsIDB4OTcsIDB4MWIsCi0gIDB4OTksIDB4MzUsIDB4OWQsIDB4YjUsIDB4YTYsIDB4NmMsIDB4ZTEsIDB4NmQsIDB4MTksIDB4NTUsIDB4MGEsIDB4NDMsCi0gIDB4MGMsIDB4OGQsIDB4MjAsIDB4NGIsIDB4ZDcsIDB4MmMsIDB4NjQsIDB4MDIsIDB4NTQsIDB4NzcsIDB4NGIsIDB4NmYsCi0gIDB4NTUsIDB4NTEsIDB4NzcsIDB4YzAsIDB4ZmUsIDB4YmQsIDB4ZGUsIDB4ZmQsIDB4MmEsIDB4ZjYsIDB4Y2UsIDB4MDMsCi0gIDB4NzgsIDB4MWQsIDB4NzQsIDB4NTQsIDB4Y2UsIDB4MWEsIDB4NzksIDB4NzcsIDB4YTAsIDB4YTYsIDB4NzEsIDB4NWQsCi0gIDB4ZDEsIDB4ZTIsIDB4YTksIDB4N2QsIDB4MzEsIDB4NDgsIDB4MDAsIDB4MjUsIDB4MjIsIDB4NTAsIDB4NDYsIDB4NjMsCi0gIDB4NGQsIDB4MmQsIDB4NTksIDB4Y2UsIDB4NzAsIDB4YTUsIDB4ZDQsIDB4YjEsIDB4ODMsIDB4NzYsIDB4NzQsIDB4MTYsCi0gIDB4MjksIDB4NWYsIDB4NzAsIDB4MmYsIDB4ZTcsIDB4ZGIsIDB4YmEsIDB4ZTYsIDB4YzMsIDB4ZTEsIDB4NDYsIDB4YzAsCi0gIDB4YjksIDB4ZGEsIDB4M2YsIDB4N2QsIDB4OGIsIDB4ZjQsIDB4NjcsIDB4OGIsIDB4ZDYsIDB4ZjMsIDB4NjIsIDB4OGYsCi0gIDB4MTMsIDB4ZTcsIDB4ZjIsIDB4MDEsIDB4ZjIsIDB4OWYsIDB4YzcsIDB4OTQsIDB4NDEsIDB4NDYsIDB4NzcsIDB4Y2IsCi0gIDB4YjUsIDB4NjMsIDB4ZjMsIDB4ODcsIDB4ZTEsIDB4ZmQsIDB4NzIsIDB4NWIsIDB4NzUsIDB4NDIsIDB4NWEsIDB4OTQsCi0gIDB4ODUsIDB4MDEsIDB4YjgsIDB4ODYsIDB4MDgsIDB4MTAsIDB4MTAsIDB4OGQsIDB4NDEsIDB4YmUsIDB4YWEsIDB4NmQsCi0gIDB4NGIsIDB4NzAsIDB4NWIsIDB4NWEsIDB4YjUsIDB4ZGMsIDB4MDYsIDB4OTgsIDB4MTgsIDB4MWEsIDB4NDksIDB4YmYsCi0gIDB4ZWIsIDB4YTYsIDB4OGMsIDB4YjYsIDB4NmIsIDB4ZjAsIDB4NTcsIDB4MmMsIDB4MmYsIDB4ZWIsIDB4YmIsIDB4MmQsCi0gIDB4NTEsIDB4NDEsIDB4NjUsIDB4NGQsIDB4NmUsIDB4NmEsIDB4NGIsIDB4ZTMsIDB4YzIsIDB4OGMsIDB4YjQsIDB4ODEsCi0gIDB4NWMsIDB4MDIsIDB4NDUsIDB4MzcsIDB4ZTksIDB4ZmUsIDB4NGUsIDB4ODUsIDB4YjEsIDB4ODAsIDB4MjAsIDB4NWMsCi0gIDB4MDAsIDB4ODgsIDB4MjIsIDB4YTIsIDB4NDksIDB4NTAsIDB4MDIsIDB4ODIsIDB4YzIsIDB4ZTYsIDB4MWEsIDB4NDcsCi0gIDB4N2QsIDB4MjIsIDB4NTgsIDB4NWEsIDB4MWUsIDB4NWIsIDB4YTEsIDB4NTksIDB4MjcsIDB4OWUsIDB4ZjAsIDB4MDQsCi0gIDB4NDYsIDB4ODgsIDB4MDUsIDB4ZmEsIDB4NjcsIDB4OTgsIDB4MTUsIDB4NDMsIDB4NTEsIDB4MWYsIDB4NTgsIDB4NTYsCi0gIDB4NjcsIDB4Y2IsIDB4ZjgsIDB4ZjgsIDB4NDAsIDB4MDcsIDB4N2QsIDB4Y2EsIDB4NTYsIDB4MzksIDB4ODMsIDB4MDcsCi0gIDB4MjEsIDB4MWEsIDB4OTQsIDB4YWQsIDB4YzYsIDB4ODksIDB4MDcsIDB4NDcsIDB4MDAsIDB4MTYsIDB4MWIsIDB4YTQsCi0gIDB4ZTksIDB4YWQsIDB4NGMsIDB4ZWEsIDB4NDksIDB4NjAsIDB4YTQsIDB4MDUsIDB4YjIsIDB4NzcsIDB4MTIsIDB4NDcsCi0gIDB4ZWMsIDB4YmEsIDB4NDAsIDB4Y2IsIDB4ZjMsIDB4NzIsIDB4NmQsIDB4M2QsIDB4NmMsIDB4OWQsIDB4NmQsIDB4MmQsCi0gIDB4YjYsIDB4NGMsIDB4NTcsIDB4ZmIsIDB4ZTcsIDB4ODksIDB4YjcsIDB4NGEsIDB4ZjgsIDB4M2UsIDB4NTAsIDB4NjAsCi0gIDB4NzEsIDB4NjYsIDB4Y2IsIDB4ZjQsIDB4NDIsIDB4MzEsIDB4ZDAsIDB4MzEsIDB4MTcsIDB4ZWMsIDB4OGQsIDB4OTIsCi0gIDB4MjksIDB4NTgsIDB4YWUsIDB4N2MsIDB4OTAsIDB4YmMsIDB4ZWIsIDB4M2YsIDB4ZTksIDB4ZmQsIDB4NWIsIDB4ODQsCi0gIDB4YzAsIDB4MjgsIDB4NzEsIDB4NzAsIDB4YTcsIDB4YWIsIDB4YmUsIDB4ZDksIDB4ZDYsIDB4ZmQsIDB4NjMsIDB4ZTAsCi0gIDB4YjQsIDB4YzYsIDB4NWMsIDB4ZDUsIDB4NTgsIDB4OTYsIDB4MmYsIDB4YzUsIDB4MTcsIDB4ZjksIDB4OGUsIDB4MTYsCi0gIDB4MzIsIDB4YmYsIDB4ZDAsIDB4YmQsIDB4OGYsIDB4OTUsIDB4NTMsIDB4NzIsIDB4YTUsIDB4ZWYsIDB4ZmEsIDB4OGQsCi0gIDB4NWEsIDB4MzMsIDB4YTEsIDB4ZWQsIDB4M2EsIDB4NzYsIDB4NzksIDB4YmQsIDB4MGQsIDB4N2UsIDB4NTUsIDB4MTgsCi0gIDB4NzMsIDB4M2IsIDB4MmEsIDB4ZWMsIDB4NjAsIDB4ODUsIDB4MTIsIDB4MzcsIDB4ZTYsIDB4MGMsIDB4NzksIDB4NmYsCi0gIDB4MjYsIDB4Y2MsIDB4MmQsIDB4YzYsIDB4YTAsIDB4MzIsIDB4MGEsIDB4NGYsIDB4NzYsIDB4MzgsIDB4YjQsIDB4ZGYsCi0gIDB4NjEsIDB4NmYsIDB4YTUsIDB4MTEsIDB4MzEsIDB4ZDQsIDB4NDUsIDB4YzcsIDB4ODEsIDB4ODIsIDB4ZGIsIDB4NDAsCi0gIDB4ODQsIDB4ZGYsIDB4NDAsIDB4ODYsIDB4ZGYsIDB4MDAsIDB4MTMsIDB4MjgsIDB4ODAsIDB4YTYsIDB4ZjksIDB4MDYsCi0gIDB4MmMsIDB4NDgsIDB4MjIsIDB4ZDgsIDB4ODgsIDB4MDksIDB4NjgsIDB4MjQsIDB4ZWUsIDB4YzgsIDB4NTgsIDB4NjQsCi0gIDB4YjQsIDB4OTUsIDB4NWYsIDB4YzksIDB4MDIsIDB4YzcsIDB4M2MsIDB4MWMsIDB4NzYsIDB4M2MsIDB4YWEsIDB4MGEsCi0gIDB4NjUsIDB4NzUsIDB4MmIsIDB4Y2EsIDB4MDgsIDB4NGYsIDB4MWIsIDB4ZDIsIDB4Y2YsIDB4ZWEsIDB4Y2MsIDB4MGEsCi0gIDB4NWUsIDB4NmIsIDB4M2YsIDB4NTEsIDB4NWYsIDB4ZWYsIDB4MzcsIDB4Y2QsIDB4MjIsIDB4ZTQsIDB4MjAsIDB4ZWEsCi0gIDB4YWYsIDB4Y2QsIDB4MWMsIDB4ODEsIDB4YmIsIDB4NTAsIDB4OWMsIDB4YjcsIDB4OWIsIDB4NjIsIDB4OTAsIDB4OGQsCi0gIDB4NjAsIDB4NTgsIDB4MDUsIDB4ODYsIDB4NjEsIDB4OWEsIDB4MWIsIDB4MzAsIDB4NTYsIDB4YTYsIDB4NGUsIDB4ZDAsCi0gIDB4MTAsIDB4M2YsIDB4NmUsIDB4MGEsIDB4NjksIDB4NzIsIDB4YjMsIDB4ODUsIDB4ZWMsIDB4MmQsIDB4MzUsIDB4OTksCi0gIDB4MzEsIDB4ZmYsIDB4MjUsIDB4ODgsIDB4YjYsIDB4MzgsIDB4NDUsIDB4NTUsIDB4NTgsIDB4ZDUsIDB4NDUsIDB4NmUsCi0gIDB4NzEsIDB4MDAsIDB4YTAsIDB4YjUsIDB4OWUsIDB4NGEsIDB4N2UsIDB4YTMsIDB4YmIsIDB4YmMsIDB4YTUsIDB4OWQsCi0gIDB4OTAsIDB4MDMsIDB4NzIsIDB4ODAsIDB4NTAsIDB4YTIsIDB4NzQsIDB4MDgsIDB4MDgsIDB4NDYsIDB4MDEsIDB4NTIsCi0gIDB4YTgsIDB4ODUsIDB4YmQsIDB4OWMsIDB4NWEsIDB4ZTAsIDB4MDAsIDB4MjIsIDB4OWUsIDB4YjEsIDB4Y2MsIDB4YmMsCi0gIDB4NTcsIDB4ZDMsIDB4NTksIDB4NjMsIDB4YzcsIDB4YmMsIDB4NjMsIDB4NGMsIDB4ZTYsIDB4NWEsIDB4NzMsIDB4M2QsCi0gIDB4ZDYsIDB4MjAsIDB4NDksIDB4ZjUsIDB4NGIsIDB4MDQsIDB4NzAsIDB4YjAsIDB4YTgsIDB4NjMsIDB4NDYsIDB4YjQsCi0gIDB4YzgsIDB4MTAsIDB4OTIsIDB4MjEsIDB4MzgsIDB4MTgsIDB4ZDUsIDB4Y2UsIDB4M2YsIDB4MzcsIDB4YmQsIDB4YzUsCi0gIDB4MDksIDB4MDIsIDB4MDAsIDB4MjksIDB4MDQsIDB4OTYsIDB4ZTAsIDB4MzgsIDB4ODksIDB4NmYsIDB4ZmYsIDB4N2MsCi0gIDB4YjMsIDB4NGIsIDB4ZjIsIDB4MGEsIDB4ZjUsIDB4MzcsIDB4NzMsIDB4MDcsIDB4ZmEsIDB4NGMsIDB4Y2MsIDB4MzcsCi0gIDB4OTEsIDB4NjYsIDB4MGIsIDB4NWQsIDB4YjEsIDB4NTUsIDB4YjMsIDB4YTUsIDB4NmQsIDB4ZTcsIDB4Y2UsIDB4ODQsCi0gIDB4NmQsIDB4OGMsIDB4YzQsIDB4ZjEsIDB4YWMsIDB4NjQsIDB4NzIsIDB4ODUsIDB4MzEsIDB4ZTgsIDB4YmMsIDB4N2UsCi0gIDB4OTAsIDB4YmIsIDB4MDQsIDB4NjcsIDB4YTIsIDB4MGIsIDB4YmMsIDB4NzQsIDB4YTIsIDB4MDAsIDB4ZmIsIDB4NzksCi0gIDB4M2YsIDB4NWUsIDB4YmQsIDB4YjksIDB4M2UsIDB4ZTIsIDB4OWIsIDB4ZWUsIDB4OGUsIDB4ZTYsIDB4ZDIsIDB4OWMsCi0gIDB4ODgsIDB4YWUsIDB4YmYsIDB4NTAsIDB4YTUsIDB4YjksIDB4ZmEsIDB4ZjksIDB4NjksIDB4ZTksIDB4YjAsIDB4MzgsCi0gIDB4MjEsIDB4MWEsIDB4OTQsIDB4ZDUsIDB4OWUsIDB4YTYsIDB4YzMsIDB4NDQsIDB4MDksIDB4NTUsIDB4MjIsIDB4YTUsCi0gIDB4YjUsIDB4NTksIDB4NzksIDB4YzksIDB4MzUsIDB4YTYsIDB4YjgsIDB4OTQsIDB4OWEsIDB4YjksIDB4MmEsIDB4YWYsCi0gIDB4MDgsIDB4NTEsIDB4YWMsIDB4OWQsIDB4NDIsIDB4OTAsIDB4MGEsIDB4MDUsIDB4NTMsIDB4YzMsIDB4YWUsIDB4NmUsCi0gIDB4YmQsIDB4OTcsIDB4N2EsIDB4ZTEsIDB4ZmIsIDB4OTgsIDB4N2YsIDB4MGYsIDB4MjQsIDB4YzYsIDB4MTgsIDB4OTUsCi0gIDB4MjcsIDB4YTUsIDB4OTMsIDB4ZDcsIDB4ZmIsIDB4MTYsIDB4Y2UsIDB4ZDcsIDB4N2IsIDB4N2UsIDB4YWIsIDB4NjksCi0gIDB4MTksIDB4NWIsIDB4ZWQsIDB4NWUsIDB4YzEsIDB4NmUsIDB4YmQsIDB4NWMsIDB4YmMsIDB4ZGIsIDB4OTgsIDB4NTYsCi0gIDB4MjksIDB4ZGYsIDB4ZmIsIDB4YTcsIDB4YjIsIDB4NzgsIDB4MzQsIDB4ZGIsIDB4ZTUsIDB4ODYsIDB4MTcsIDB4MDUsCi0gIDB4ZWIsIDB4ZTgsIDB4ZjIsIDB4ZTksIDB4ZGMsIDB4ODUsIDB4NTAsIDB4MWEsIDB4ZWQsIDB4MWEsIDB4YjksIDB4MTYsCi0gIDB4YTIsIDB4NzYsIDB4NGYsIDB4NTEsIDB4ZjYsIDB4YmQsIDB4OGQsIDB4NWUsIDB4MTAsIDB4MWYsIDB4ZGIsIDB4ZDUsCi0gIDB4ZDUsIDB4YzcsIDB4YjIsIDB4YjIsIDB4NWUsIDB4MmUsIDB4MTYsIDB4MDUsIDB4MDUsIDB4NTQsIDB4ODgsIDB4NWEsCi0gIDB4YWMsIDB4MzQsIDB4NWQsIDB4MDgsIDB4NjIsIDB4MDcsIDB4NmIsIDB4ZGEsIDB4ZDAsIDB4ZTAsIDB4M2EsIDB4MDUsCi0gIDB4NTYsIDB4YTcsIDB4ZjksIDB4YmUsIDB4YjcsIDB4NTIsIDB4ZTMsIDB4OTksIDB4NjQsIDB4YWQsIDB4MGYsIDB4OTUsCi0gIDB4YzUsIDB4ZjUsIDB4NTYsIDB4NWEsIDB4YTcsIDB4NDIsIDB4YzgsIDB4ZGUsIDB4MzIsIDB4NTMsIDB4NmMsIDB4MjYsCi0gIDB4OWYsIDB4OWUsIDB4NWMsIDB4MjYsIDB4MDksIDB4NjgsIDB4MDYsIDB4ODcsIDB4OWEsIDB4NTAsIDB4ODIsIDB4MmEsCi0gIDB4YTUsIDB4OTIsIDB4MjgsIDB4MGIsIDB4ODUsIDB4MTYsIDB4ZTcsIDB4NGQsIDB4NzIsIDB4MWMsIDB4ZjcsIDB4NTAsCi0gIDB4ODcsIDB4MmUsIDB4NjUsIDB4NDUsIDB4ZDMsIDB4ZTQsIDB4ZDksIDB4YTksIDB4ODMsIDB4Y2QsIDB4MGIsIDB4Y2QsCi0gIDB4NzQsIDB4MDYsIDB4MDIsIDB4NTUsIDB4NWQsIDB4NzMsIDB4ZDAsIDB4YjYsIDB4OTIsIDB4ZTYsIDB4YjMsIDB4MWEsCi0gIDB4YWYsIDB4MGQsIDB4OTksIDB4ZTUsIDB4ZGMsIDB4NTcsIDB4YTcsIDB4ZWMsIDB4ZTQsIDB4MDYsIDB4Y2IsIDB4ZDksCi0gIDB4NzQsIDB4Y2EsIDB4N2EsIDB4ZWUsIDB4ODAsIDB4MGMsIDB4MWEsIDB4ZWMsIDB4ODgsIDB4ZmMsIDB4N2IsIDB4M2QsCi0gIDB4ZTYsIDB4MDYsIDB4ZTIsIDB4NWMsIDB4NTAsIDB4Y2EsIDB4YTQsIDB4Y2IsIDB4MTEsIDB4NmUsIDB4M2UsIDB4MjgsCi0gIDB4NjEsIDB4YjQsIDB4ZTEsIDB4OTIsIDB4ZTQsIDB4ZWUsIDB4OWIsIDB4ODgsIDB4MDEsIDB4NjgsIDB4M2YsIDB4MmIsCi0gIDB4NDUsIDB4NDAsIDB4M2QsIDB4MWEsIDB4YTEsIDB4NmIsIDB4ODAsIDB4OTYsIDB4YTMsIDB4YjIsIDB4MDAsIDB4NmEsCi0gIDB4MjEsIDB4MjMsIDB4MTAsIDB4NTIsIDB4MDIsIDB4MTEsIDB4YWIsIDB4MmUsIDB4NmYsIDB4NGMsIDB4YjEsIDB4NDEsCi0gIDB4ZTYsIDB4ZDIsIDB4NDMsIDB4Y2MsIDB4YTAsIDB4NTgsIDB4ZDYsIDB4NTgsIDB4OTEsIDB4MTcsIDB4MjQsIDB4MDAsCi0gIDB4M2EsIDB4MDUsIDB4NTMsIDB4YzMsIDB4YjMsIDB4NmUsIDB4MDcsIDB4N2QsIDB4ZjEsIDB4OWEsIDB4ZDYsIDB4MzAsCi0gIDB4ZTMsIDB4YmMsIDB4NWEsIDB4ZDgsIDB4NzgsIDB4OWEsIDB4ODMsIDB4MWMsIDB4ZjksIDB4M2IsIDB4MGUsIDB4Y2IsCi0gIDB4ZDgsIDB4YTAsIDB4NDQsIDB4NTIsIDB4MjcsIDB4MDMsIDB4NTQsIDB4YmQsIDB4NTcsIDB4MzcsIDB4NDIsIDB4ZjUsCi0gIDB4ZmEsIDB4ZjUsIDB4Y2EsIDB4NDAsIDB4N2UsIDB4MWMsIDB4ZjgsIDB4MGEsIDB4N2QsIDB4Y2YsIDB4ODksIDB4Y2IsCi0gIDB4YjYsIDB4ZjksIDB4OWUsIDB4YWUsIDB4YmIsIDB4NzAsIDB4YTcsIDB4OGYsIDB4NzQsIDB4YmQsIDB4NzEsIDB4ODUsCi0gIDB4OTMsIDB4NWIsIDB4ODMsIDB4MjUsIDB4NmIsIDB4NGEsIDB4M2IsIDB4YjIsIDB4M2EsIDB4OWEsIDB4MTAsIDB4YjIsCi0gIDB4M2EsIDB4YjQsIDB4MzgsIDB4MjEsIDB4MDksIDB4ODAsIDB4ZjksIDB4Y2UsIDB4NjEsIDB4NzQsIDB4Y2IsIDB4NzYsCi0gIDB4MGEsIDB4NDEsIDB4NDksIDB4YTMsIDB4YmIsIDB4MzUsIDB4ZmYsIDB4OGUsIDB4ZTksIDB4ZmIsIDB4ZWIsIDB4ODEsCi0gIDB4OTcsIDB4MWEsIDB4ODcsIDB4NGYsIDB4YTksIDB4ZDMsIDB4MDcsIDB4NGYsIDB4NzYsIDB4MWYsIDB4NDcsIDB4NGYsCi0gIDB4NzQsIDB4ODgsIDB4MjIsIDB4ZDUsIDB4MDEsIDB4OTQsIDB4MDAsIDB4MDUsIDB4N2YsIDB4ODgsIDB4MzgsIDB4MjEsCi0gIDB4MWEsIDB4OTQsIDB4YzUsIDB4Y2UsIDB4OGMsIDB4YzMsIDB4MjQsIDB4ODksIDB4NDAsIDB4MWEsIDB4Y2EsIDB4MTQsCi0gIDB4MTMsIDB4YTAsIDB4YmIsIDB4OTcsIDB4YWEsIDB4YTAsIDB4YjgsIDB4YTMsIDB4NTksIDB4NjIsIDB4OTIsIDB4MWMsCi0gIDB4NzMsIDB4YzcsIDB4MjgsIDB4MTEsIDB4MmMsIDB4YTYsIDB4NzgsIDB4YjcsIDB4YzUsIDB4NGQsIDB4YmUsIDB4YmUsCi0gIDB4ZDEsIDB4ZDgsIDB4YmUsIDB4MjUsIDB4ODMsIDB4OTgsIDB4ZjcsIDB4MjUsIDB4ZTksIDB4ODIsIDB4NjcsIDB4MWMsCi0gIDB4OTgsIDB4MGIsIDB4YjAsIDB4OWIsIDB4YjcsIDB4MmIsIDB4ODIsIDB4MzQsIDB4OGIsIDB4ZTcsIDB4MGEsIDB4YWIsCi0gIDB4ODYsIDB4NmQsIDB4ZDgsIDB4N2QsIDB4M2QsIDB4ZmYsIDB4NjksIDB4ZTYsIDB4ZjUsIDB4ZjAsIDB4MGQsIDB4MjUsCi0gIDB4NjUsIDB4YjQsIDB4ZTIsIDB4MzYsIDB4ZDYsIDB4YTMsIDB4YjAsIDB4NjEsIDB4ZDIsIDB4MzcsIDB4MzAsIDB4NTIsCi0gIDB4OGUsIDB4MTYsIDB4YmUsIDB4ZmIsIDB4NmMsIDB4ZWMsIDB4N2UsIDB4NGEsIDB4Y2EsIDB4NTksIDB4Y2MsIDB4Y2UsCi0gIDB4MjIsIDB4ZjksIDB4OGQsIDB4ZWUsIDB4MWIsIDB4NDgsIDB4M2UsIDB4MmYsIDB4YmEsIDB4OTYsIDB4MmYsIDB4MGMsCi0gIDB4NTgsIDB4YWIsIDB4MmEsIDB4MzUsIDB4ZGEsIDB4N2MsIDB4MmIsIDB4MTQsIDB4Y2MsIDB4ZDksIDB4MmIsIDB4N2QsCi0gIDB4MTEsIDB4NmUsIDB4Y2QsIDB4NzMsIDB4ODUsIDB4ZTUsIDB4ZWYsIDB4NzUsIDB4YTgsIDB4NjEsIDB4OGIsIDB4OWQsCi0gIDB4NjIsIDB4MTIsIDB4YWIsIDB4MTIsIDB4YmIsIDB4ZjksIDB4ZDcsIDB4ZDQsIDB4ZDEsIDB4ZDYsIDB4MmIsIDB4ZjgsCi0gIDB4YWIsIDB4YWIsIDB4MjYsIDB4M2QsIDB4YjIsIDB4YTUsIDB4YjUsIDB4NDIsIDB4MGEsIDB4NTQsIDB4YTYsIDB4NmEsCi0gIDB4M2UsIDB4MzIsIDB4MDYsIDB4ODcsIDB4NGEsIDB4OGUsIDB4ZTcsIDB4YTUsIDB4MDYsIDB4NzcsIDB4NTEsIDB4MWMsCi0gIDB4NjIsIDB4NTUsIDB4NzEsIDB4YTAsIDB4ZDksIDB4ZDQsIDB4NWQsIDB4NmEsIDB4YTEsIDB4MjksIDB4NTIsIDB4NzcsCi0gIDB4ZGIsIDB4ODYsIDB4N2MsIDB4NjksIDB4NjQsIDB4MzEsIDB4Y2YsIDB4NGIsIDB4MTQsIDB4NjYsIDB4MzYsIDB4MmIsCi0gIDB4NTksIDB4NzYsIDB4NjEsIDB4MjgsIDB4NDAsIDB4MDMsIDB4Y2UsIDB4YzAsIDB4OGUsIDB4OGMsIDB4NzIsIDB4YTMsCi0gIDB4MzgsIDB4MTMsIDB4MDYsIDB4MTAsIDB4YTIsIDB4MDgsIDB4NzksIDB4ODcsIDB4MzksIDB4ZjAsIDB4ZjUsIDB4NTgsCi0gIDB4NzksIDB4MGQsIDB4NzgsIDB4ZmQsIDB4Y2EsIDB4NjYsIDB4ZDMsIDB4MmIsIDB4NWMsIDB4ZTQsIDB4MTcsIDB4MWYsCi0gIDB4YmEsIDB4N2IsIDB4ZjgsIDB4OWMsIDB4MWYsIDB4MjEsIDB4MTIsIDB4MzcsIDB4ZjEsIDB4YmYsIDB4OTYsIDB4NGQsCi0gIDB4NzIsIDB4ZDcsIDB4ZjEsIDB4MWQsIDB4Y2EsIDB4Y2QsIDB4MTAsIDB4NGMsIDB4ZDIsIDB4NTAsIDB4YzAsIDB4MzQsCi0gIDB4MTAsIDB4NDQsIDB4NGEsIDB4YmEsIDB4NjYsIDB4ZTQsIDB4YjAsIDB4MGYsIDB4ZjEsIDB4MzQsIDB4OGQsIDB4NjUsCi0gIDB4OGEsIDB4NDgsIDB4NzEsIDB4Y2YsIDB4MWMsIDB4YTAsIDB4NDQsIDB4YjIsIDB4OTcsIDB4ZDYsIDB4MzgsIDB4ZjYsCi0gIDB4YjMsIDB4OGMsIDB4ZjIsIDB4NWUsIDB4YTYsIDB4ZGIsIDB4N2UsIDB4YmQsIDB4YmMsIDB4MzMsIDB4M2MsIDB4YjIsCi0gIDB4NDcsIDB4MWUsIDB4ZjYsIDB4M2MsIDB4NDAsIDB4MGMsIDB4M2MsIDB4MDIsIDB4ZDQsIDB4ZGYsIDB4M2YsIDB4ZmUsCi0gIDB4ZmIsIDB4YjgsIDB4ZmYsIDB4YTcsIDB4ODcsIDB4YWQsIDB4ZTAsIDB4MDAsIDB4MzYsIDB4ODAsIDB4OTYsIDB4ODAsCi0gIDB4MDAsIDB4NjksIDB4MGUsIDB4MjEsIDB4MmEsIDB4OTQsIDB4YjUsIDB4YTIsIDB4OGYsIDB4NjQsIDB4ODEsIDB4YjEsCi0gIDB4ODgsIDB4ODgsIDB4MjIsIDB4NDAsIDB4MGIsIDB4NjUsIDB4ZWYsIDB4NTIsIDB4ODUsIDB4Y2QsIDB4MzgsIDB4NjcsCi0gIDB4MTMsIDB4NDAsIDB4MDAsIDB4MGQsIDB4MjcsIDB4ZWEsIDB4MWQsIDB4NTcsIDB4YzksIDB4MDQsIDB4NTAsIDB4N2UsCi0gIDB4ZWIsIDB4YTcsIDB4NDksIDB4MDksIDB4MTMsIDB4ZjEsIDB4OWMsIDB4OWMsIDB4NTEsIDB4ZjYsIDB4NmYsIDB4NTgsCi0gIDB4ZTYsIDB4NmYsIDB4NzQsIDB4ZTIsIDB4YWEsIDB4ZjQsIDB4MWYsIDB4NWIsIDB4OTEsIDB4ZGIsIDB4MmEsIDB4MjEsCi0gIDB4NTgsIDB4ZDksIDB4ZWIsIDB4NTYsIDB4ZGMsIDB4ZGUsIDB4NDgsIDB4M2EsIDB4MDcsIDB4NTEsIDB4ZGEsIDB4MWUsCi0gIDB4ZmIsIDB4NTgsIDB4YmUsIDB4ZDIsIDB4MjQsIDB4NTQsIDB4ZWMsIDB4YWQsIDB4OWIsIDB4YzgsIDB4MmMsIDB4MmEsCi0gIDB4MzMsIDB4NDMsIDB4ZmEsIDB4YWIsIDB4ODcsIDB4MGEsIDB4YWEsIDB4YTIsIDB4NTYsIDB4MWIsIDB4ODIsIDB4ZmEsCi0gIDB4MzEsIDB4ZjEsIDB4ODQsIDB4ZWUsIDB4M2MsIDB4ZDQsIDB4OTcsIDB4Y2UsIDB4NjYsIDB4ZGIsIDB4ZGUsIDB4MmQsCi0gIDB4OWIsIDB4NGQsIDB4OWYsIDB4NmQsIDB4NzgsIDB4NTgsIDB4NGYsIDB4ZjMsIDB4MjMsIDB4NDgsIDB4ZDAsIDB4MDAsCi0gIDB4OTYsIDB4YWUsIDB4ZTUsIDB4YzAsIDB4YmYsIDB4OWYsIDB4YjAsIDB4ZGUsIDB4N2MsIDB4NTcsIDB4N2YsIDB4NzUsCi0gIDB4NWEsIDB4YTUsIDB4OTEsIDB4ZDIsIDB4ZjMsIDB4NTIsIDB4YWMsIDB4ZDAsIDB4ZTksIDB4YzcsIDB4MTcsIDB4N2IsCi0gIDB4MjYsIDB4MDcsIDB4MTIsIDB4YWUsIDB4YjksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGQsIDB4OGQsIDB4OTgsIDB4YzIsCi0gIDB4MGIsIDB4MDcsIDB4NjIsIDB4NzgsIDB4MTgsIDB4NDMsIDB4OWUsIDB4ZGQsIDB4Y2YsIDB4Y2QsIDB4ZTAsIDB4NDEsCi0gIDB4Y2YsIDB4MTksIDB4NDIsIDB4NDgsIDB4MzQsIDB4ZWEsIDB4YTksIDB4ZmYsIDB4MTksIDB4NTksIDB4ZjcsIDB4ODcsCi0gIDB4ZDIsIDB4MTEsIDB4NzgsIDB4NDcsIDB4YmEsIDB4NGQsIDB4ZWQsIDB4OTIsIDB4YTUsIDB4OTYsIDB4Y2UsIDB4ZmQsCi0gIDB4MzAsIDB4OGEsIDB4ZjYsIDB4MDQsIDB4YWUsIDB4NmYsIDB4ODYsIDB4NDUsIDB4ZTQsIDB4YjIsIDB4ZTcsIDB4ZmMsCi0gIDB4N2IsIDB4YzMsIDB4NjEsIDB4MDEsIDB4NjYsIDB4YjAsIDB4ZWQsIDB4ZGYsIDB4MmUsIDB4MGUsIDB4ZmMsIDB4MDAsCi0gIDB4YTQsIDB4NjMsIDB4NWMsIDB4MmIsIDB4YzcsIDB4NjEsIDB4MzAsIDB4MDIsIDB4ZjUsIDB4NjgsIDB4NzMsIDB4N2EsCi0gIDB4MWIsIDB4NmIsIDB4NmQsIDB4NzQsIDB4ZjcsIDB4ZmQsIDB4YjksIDB4NzUsIDB4OTcsIDB4YzYsIDB4NmYsIDB4YzMsCi0gIDB4YTAsIDB4MDAsIDB4MjUsIDB4MmMsIDB4ZDAsIDB4NjQsIDB4MTgsIDB4ZWMsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZGUsCi0gIDB4ZDAsIDB4NzQsIDB4NTgsIDB4MDgsIDB4YTAsIDB4NjEsIDB4ZmQsIDB4YzQsIDB4ODIsIDB4ZjUsIDB4ZGEsIDB4YmQsCi0gIDB4MDUsIDB4MDUsIDB4ZjgsIDB4NjcsIDB4ZjUsIDB4YjMsIDB4ZjQsIDB4YjksIDB4MzUsIDB4MWUsIDB4ZGYsIDB4YzUsCi0gIDB4YzUsIDB4NjcsIDB4YmQsIDB4NDEsIDB4MjcsIDB4NDksIDB4NmMsIDB4NDMsIDB4YWQsIDB4N2EsIDB4ZGMsIDB4ZmUsCi0gIDB4YTEsIDB4OWEsIDB4YWEsIDB4YmYsIDB4OWEsIDB4NTQsIDB4ZjIsIDB4N2UsIDB4MzEsIDB4ZDksIDB4YWUsIDB4ZjYsCi0gIDB4ZTMsIDB4MDgsIDB4YjAsIDB4MWUsIDB4NGYsIDB4MTYsIDB4ZGYsIDB4YmQsIDB4ZGUsIDB4ZTgsIDB4MDEsIDB4OTMsCi0gIDB4MDAsIDB4MDUsIDB4NDYsIDB4ZWUsIDB4MjEsIDB4MjgsIDB4MDAsIDB4NGEsIDB4OWQsIDB4MGMsIDB4MDgsIDB4NDAsCi0gIDB4MTEsIDB4NWMsIDB4NGEsIDB4NTUsIDB4ZGIsIDB4NmIsIDB4NzgsIDB4YjIsIDB4MTEsIDB4MjIsIDB4N2YsIDB4ZDAsCi0gIDB4MGMsIDB4MTksIDB4MTMsIDB4ZDEsIDB4YTksIDB4NzMsIDB4OGMsIDB4MzAsIDB4ZDIsIDB4YjUsIDB4OWYsIDB4MDgsCi0gIDB4OTQsIDB4ZmIsIDB4ZWQsIDB4ODYsIDB4ZDgsIDB4MTUsIDB4MjksIDB4MTMsIDB4YzksIDB4NzUsIDB4NDIsIDB4YzMsCi0gIDB4MmMsIDB4MGEsIDB4N2EsIDB4ZjAsIDB4MDcsIDB4MjEsIDB4NGMsIDB4Y2QsIDB4NDYsIDB4ZGQsIDB4NjIsIDB4M2EsCi0gIDB4ZWEsIDB4MzEsIDB4OTYsIDB4YWEsIDB4MjMsIDB4MTcsIDB4NzgsIDB4NzEsIDB4NmUsIDB4YjgsIDB4MjUsIDB4MWYsCi0gIDB4YzIsIDB4ZGQsIDB4M2EsIDB4MjEsIDB4ZmQsIDB4MjcsIDB4YjUsIDB4NzksIDB4ZDQsIDB4NDEsIDB4ZmMsIDB4NWQsCi0gIDB4OWUsIDB4NjksIDB4N2EsIDB4YjAsIDB4YTIsIDB4NDMsIDB4YzgsIDB4NmIsIDB4NzcsIDB4ZDgsIDB4ZTYsIDB4MjQsCi0gIDB4MjksIDB4NTYsIDB4OTEsIDB4OTEsIDB4NjEsIDB4ZWEsIDB4MzgsIDB4NGQsIDB4NWYsIDB4OWYsIDB4NjksIDB4ZjUsCi0gIDB4YTUsIDB4OWIsIDB4ODYsIDB4OTgsIDB4YTUsIDB4NTYsIDB4OGYsIDB4ZjMsIDB4MGIsIDB4ZWEsIDB4MmYsIDB4ZjIsCi0gIDB4ZWMsIDB4MmIsIDB4MWMsIDB4NDYsIDB4M2QsIDB4ZjUsIDB4ZjgsIDB4OWEsIDB4Y2IsIDB4NjMsIDB4Y2IsIDB4N2YsCi0gIDB4MDksIDB4N2UsIDB4M2QsIDB4OTUsIDB4MDIsIDB4MGMsIDB4ZGUsIDB4ZWIsIDB4OTQsIDB4MmUsIDB4OTQsIDB4NjgsCi0gIDB4YmQsIDB4M2EsIDB4ZjUsIDB4MjIsIDB4MDksIDB4NTksIDB4NDAsIDB4MzEsIDB4MGQsIDB4YTIsIDB4MDMsIDB4MDcsCi0gIDB4MGUsIDB4YzUsIDB4YmUsIDB4M2QsIDB4YjMsIDB4Y2IsIDB4MzIsIDB4ZGMsIDB4OGEsIDB4ZDUsIDB4OWEsIDB4ZGMsCi0gIDB4NWYsIDB4NzYsIDB4NzgsIDB4NGEsIDB4MjksIDB4NGMsIDB4OTYsIDB4ODMsIDB4ODIsIDB4ZWIsIDB4NDAsIDB4ZTAsCi0gIDB4YjEsIDB4NjksIDB4ZTQsIDB4OTgsIDB4ZGQsIDB4M2IsIDB4MTIsIDB4ODAsIDB4OGQsIDB4NjksIDB4MDIsIDB4NzksCi0gIDB4YWMsIDB4NDgsIDB4OWQsIDB4MzUsIDB4ZmYsIDB4N2UsIDB4ZmUsIDB4ZjcsIDB4ZWIsIDB4YWYsIDB4ZDIsIDB4NzEsCi0gIDB4M2MsIDB4YWUsIDB4MTMsIDB4YTIsIDB4YTksIDB4Y2EsIDB4YjYsIDB4ZWMsIDB4ZmUsIDB4YmQsIDB4MDIsIDB4ZmYsCi0gIDB4YjcsIDB4MmQsIDB4N2QsIDB4NDAsIDB4YjAsIDB4NGMsIDB4MWEsIDB4NGMsIDB4ZTIsIDB4ZWEsIDB4NjUsIDB4NjQsCi0gIDB4M2QsIDB4MmYsIDB4ZGUsIDB4ZmIsIDB4YTMsIDB4YmMsIDB4NjksIDB4NTYsIDB4YmIsIDB4ZDQsIDB4MzIsIDB4YmUsCi0gIDB4N2MsIDB4N2QsIDB4YjYsIDB4MzksIDB4MjMsIDB4MTcsIDB4YzksIDB4ZjIsIDB4NmIsIDB4YjQsIDB4YWEsIDB4YmMsCi0gIDB4MjksIDB4MzYsIDB4M2EsIDB4N2EsIDB4MjQsIDB4NTgsIDB4NWQsIDB4MDAsIDB4MTAsIDB4NWMsIDB4NDIsIDB4NjgsCi0gIDB4MjYsIDB4OGEsIDB4YjIsIDB4M2EsIDB4NTIsIDB4MjUsIDB4OTEsIDB4OWMsIDB4NmIsIDB4NGYsIDB4MGYsIDB4MjUsCi0gIDB4MmYsIDB4MmEsIDB4NWEsIDB4YzksIDB4NGQsIDB4MTgsIDB4YTMsIDB4M2IsIDB4MmMsIDB4NDcsIDB4ZGEsIDB4NjYsCi0gIDB4MzgsIDB4MGQsIDB4ZTEsIDB4ZDYsIDB4ZGEsIDB4MGQsIDB4YjMsIDB4NTAsIDB4NzgsIDB4NDUsIDB4ZjEsIDB4YzUsCi0gIDB4ZjAsIDB4M2YsIDB4YjIsIDB4OWYsIDB4NzEsIDB4YTYsIDB4OWYsIDB4ZDksIDB4YzMsIDB4YWQsIDB4NzEsIDB4NGIsCi0gIDB4M2YsIDB4NjEsIDB4ZWMsIDB4NzksIDB4MDEsIDB4MTUsIDB4ZjIsIDB4ZGQsIDB4ZmIsIDB4ZTksIDB4NTIsIDB4NzAsCi0gIDB4MzgsIDB4Y2QsIDB4ZmUsIDB4M2IsIDB4MDEsIDB4ZjYsIDB4YjAsIDB4ZTMsIDB4MjgsIDB4OGQsIDB4MjgsIDB4NjIsCi0gIDB4MDgsIDB4MzIsIDB4ZGUsIDB4NGEsIDB4YzgsIDB4OWMsIDB4MDUsIDB4MzMsIDB4OTEsIDB4NWQsIDB4MjQsIDB4NTQsCi0gIDB4NDYsIDB4MWUsIDB4NDYsIDB4ZTUsIDB4NmYsIDB4ZWYsIDB4ZDAsIDB4ZTIsIDB4NjksIDB4OWQsIDB4YTcsIDB4MjIsCi0gIDB4NmEsIDB4YTEsIDB4YmUsIDB4Y2IsIDB4ZTcsIDB4Y2MsIDB4M2YsIDB4ZWEsIDB4ZmMsIDB4OTcsIDB4MDgsIDB4N2UsCi0gIDB4MjcsIDB4ZDgsIDB4OGEsIDB4YTcsIDB4NGYsIDB4MWQsIDB4MmUsIDB4OTIsIDB4NDYsIDB4ZDMsIDB4OTAsIDB4Y2EsCi0gIDB4OTAsIDB4M2QsIDB4YzcsIDB4NDMsIDB4OTAsIDB4M2MsIDB4NzksIDB4MWUsIDB4NWYsIDB4YTMsIDB4NmUsIDB4OGIsCi0gIDB4MTIsIDB4YTIsIDB4OGMsIDB4ZGIsIDB4NmEsIDB4NWMsIDB4ZDMsIDB4NGMsIDB4YmEsIDB4MGQsIDB4NTgsIDB4MzksCi0gIDB4YzEsIDB4ODIsIDB4ODYsIDB4ZDQsIDB4ZGUsIDB4ZmQsIDB4YmQsIDB4MGMsIDB4ZjgsIDB4Y2MsIDB4NmQsIDB4MzgsCi0gIDB4ODUsIDB4MTEsIDB4NTksIDB4OWMsIDB4ZDIsIDB4OGQsIDB4MzYsIDB4MjUsIDB4ZTUsIDB4N2QsIDB4YzksIDB4NTQsCi0gIDB4MzcsIDB4NmIsIDB4OTQsIDB4YjgsIDB4NWEsIDB4Y2UsIDB4ODQsIDB4NmEsIDB4NWUsIDB4YjgsIDB4ZTksIDB4YTIsCi0gIDB4MzMsIDB4MTQsIDB4ZGEsIDB4ODAsIDB4NDQsIDB4YTQsIDB4ODAsIDB4YmEsIDB4NmIsIDB4ZGQsIDB4MGQsIDB4ZDcsCi0gIDB4NTUsIDB4OGEsIDB4MzEsIDB4NDIsIDB4MGMsIDB4ZmQsIDB4MGMsIDB4MDQsIDB4NzksIDB4Y2QsIDB4NWIsIDB4YTMsCi0gIDB4NDgsIDB4NjMsIDB4NjQsIDB4MzgsIDB4MjEsIDB4N2EsIDB4OGMsIDB4MDAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gIDB4MmQsIDB4NmQsIDB4YTQsIDB4YjAsIDB4YzgsIDB4ODIsIDB4ZDAsIDB4ODIsIDB4YTMsIDB4NTUsIDB4OTIsIDB4YjcsCi0gIDB4N2EsIDB4OWMsIDB4MWEsIDB4YWQsIDB4MDAsIDB4NDAsIDB4NTAsIDB4MTMsIDB4MTIsIDB4MzIsIDB4MWEsIDB4YjEsCi0gIDB4ZmEsIDB4NDgsIDB4MDUsIDB4ZGYsIDB4NWIsIDB4ZmEsIDB4ZjEsIDB4MjEsIDB4NDMsIDB4ZjcsIDB4NWEsIDB4ODksCi0gIDB4MTUsIDB4MTAsIDB4ZjcsIDB4ZDQsIDB4YWMsIDB4MGMsIDB4MzcsIDB4ZGMsIDB4MWYsIDB4MTIsIDB4NTYsIDB4YTYsCi0gIDB4OGMsIDB4ZmIsIDB4ZmQsIDB4YjcsIDB4NzAsIDB4YjcsIDB4ZGIsIDB4MzksIDB4ODksIDB4ZDksIDB4OTgsIDB4NWYsCi0gIDB4YmEsIDB4YzMsIDB4OTQsIDB4YjksIDB4OGYsIDB4ODgsIDB4YzEsIDB4ZjUsIDB4NmUsIDB4NDcsIDB4NTcsIDB4YWUsCi0gIDB4ZDcsIDB4ZTcsIDB4MzMsIDB4YmYsIDB4MTcsIDB4ZDcsIDB4NTgsIDB4N2UsIDB4OGEsIDB4NDcsIDB4Y2EsIDB4ZWQsCi0gIDB4MWQsIDB4ZTcsIDB4OGQsIDB4NjEsIDB4MzksIDB4ZTksIDB4NDUsIDB4MTgsIDB4NjksIDB4ZWYsIDB4NzEsIDB4YjYsCi0gIDB4ZjgsIDB4YjAsIDB4MTksIDB4N2YsIDB4MmMsIDB4ZWEsIDB4YjcsIDB4ODcsIDB4ZWUsIDB4MDMsIDB4MTcsIDB4ZTQsCi0gIDB4NDksIDB4ZGEsIDB4MzcsIDB4MmEsIDB4YzMsIDB4ZTUsIDB4NzcsIDB4MDcsIDB4NWQsIDB4NmUsIDB4ZDEsIDB4ZmMsCi0gIDB4NjIsIDB4ZWEsIDB4NDMsIDB4ZDksIDB4MGMsIDB4MDAsIDB4MmEsIDB4YWQsIDB4NDksIDB4NDUsIDB4ZWIsIDB4OTEsCi0gIDB4YTYsIDB4NTUsIDB4MjEsIDB4NDAsIDB4OTAsIDB4NGIsIDB4N2EsIDB4NGEsIDB4NjQsIDB4N2MsIDB4OTIsIDB4OTcsCi0gIDB4YzksIDB4OTQsIDB4ZTAsIDB4YWUsIDB4NzgsIDB4NDAsIDB4NWQsIDB4ZjAsIDB4OWQsIDB4NDUsIDB4N2UsIDB4NjksCi0gIDB4NDAsIDB4MTUsIDB4NjQsIDB4NzYsIDB4NWIsIDB4N2EsIDB4YjIsIDB4NDksIDB4NjUsIDB4YWUsIDB4NTYsIDB4YzEsCi0gIDB4MTEsIDB4OTksIDB4NjYsIDB4ZGQsIDB4ZDEsIDB4OTEsIDB4MzgsIDB4MDIsIDB4ZjYsIDB4MTUsIDB4ODQsIDB4ZTIsCi0gIDB4NDYsIDB4MTYsIDB4OGEsIDB4ODAsIDB4ZjUsIDB4MTEsIDB4Y2MsIDB4NGMsIDB4NTYsIDB4ZjAsIDB4YTIsIDB4NjMsCi0gIDB4OGQsIDB4NDEsIDB4MzcsIDB4NmMsIDB4ODIsIDB4MTAsIDB4YzAsIDB4MjgsIDB4NTEsIDB4OGEsIDB4MzAsIDB4MjYsCi0gIDB4OTEsIDB4NmUsIDB4ZGEsIDB4YWUsIDB4YWYsIDB4YzgsIDB4NWQsIDB4OGIsIDB4MDAsIDB4MDksIDB4YmUsIDB4MTcsCi0gIDB4ZWYsIDB4NzcsIDB4NDQsIDB4YTUsIDB4MGMsIDB4OGMsIDB4OTgsIDB4ODQsIDB4OWYsIDB4MmMsIDB4OTQsIDB4NjgsCi0gIDB4M2MsIDB4NzEsIDB4ZGQsIDB4NGYsIDB4ZmQsIDB4YTksIDB4NTAsIDB4NzUsIDB4MzEsIDB4N2QsIDB4MDcsIDB4ZDcsCi0gIDB4YjUsIDB4OGUsIDB4ZmMsIDB4ZTYsIDB4YWYsIDB4YTQsIDB4ZWMsIDB4Y2UsIDB4ZTIsIDB4OWIsIDB4NzcsIDB4YWUsCi0gIDB4YjIsIDB4ZTYsIDB4MmMsIDB4ZjMsIDB4YWQsIDB4NjQsIDB4OGIsIDB4NTYsIDB4MjUsIDB4NjAsIDB4MjcsIDB4MjYsCi0gIDB4YTUsIDB4ZmIsIDB4NjgsIDB4NjYsIDB4ZDYsIDB4YTksIDB4YTEsIDB4MTksIDB4YTMsIDB4NTEsIDB4OTUsIDB4OTUsCi0gIDB4Y2YsIDB4YjIsIDB4OTUsIDB4NmMsIDB4ODEsIDB4MWEsIDB4MmQsIDB4MzEsIDB4NGUsIDB4MmEsIDB4NmQsIDB4NDAsCi0gIDB4ZDAsIDB4YWYsIDB4MGIsIDB4ZDgsIDB4MWEsIDB4MjQsIDB4YjYsIDB4OTcsIDB4NTgsIDB4YjAsIDB4M2EsIDB4YzAsCi0gIDB4MTAsIDB4YWEsIDB4NzUsIDB4MjIsIDB4MTMsIDB4ODgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ZTUsIDB4MzYsIDB4ODEsCi0gIDB4MjgsIDB4NjEsIDB4NDIsIDB4MDEsIDB4YzEsIDB4MzAsIDB4YWYsIDB4NzIsIDB4ZjYsIDB4YzksIDB4YTYsIDB4ODAsCi0gIDB4ODIsIDB4ZjYsIDB4YTIsIDB4ODksIDB4NGMsIDB4OTYsIDB4YmIsIDB4NjcsIDB4NDAsIDB4MzQsIDB4YWQsIDB4ODIsCi0gIDB4MDEsIDB4ODcsIDB4MjQsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OTQsIDB4YjUsIDB4Y2UsIDB4OGEsIDB4YzIsCi0gIDB4MjMsIDB4MjAsIDB4NDgsIDB4NjgsIDB4MzIsIDB4MTksIDB4ODUsIDB4ZjQsIDB4NTEsIDB4MGEsIDB4NDUsIDB4YWYsCi0gIDB4ODQsIDB4YjgsIDB4NDAsIDB4MDEsIDB4ODMsIDB4NjAsIDB4ZGIsIDB4ODEsIDB4ZDAsIDB4ZDMsIDB4MWMsIDB4YWUsCi0gIDB4MjIsIDB4MzAsIDB4NTEsIDB4NTAsIDB4YzAsIDB4OTksIDB4MTcsIDB4MjYsIDB4OTcsIDB4ZTAsIDB4MjUsIDB4NjEsCi0gIDB4N2UsIDB4ZjQsIDB4OTgsIDB4OGIsIDB4NTIsIDB4YTMsIDB4OTIsIDB4YmUsIDB4NWEsIDB4NWIsIDB4MzcsIDB4ZGEsCi0gIDB4YjMsIDB4NjYsIDB4NjgsIDB4YmMsIDB4ZjMsIDB4MmQsIDB4MzcsIDB4N2IsIDB4ZmYsIDB4ZGEsIDB4N2IsIDB4ZTcsCi0gIDB4ZWIsIDB4MjYsIDB4MzgsIDB4N2UsIDB4NjksIDB4MmUsIDB4MWYsIDB4ZjgsIDB4NWQsIDB4MzEsIDB4NWYsIDB4ZjcsCi0gIDB4ZTcsIDB4NDksIDB4M2EsIDB4NzQsIDB4NWUsIDB4OWIsIDB4YzcsIDB4NTIsIDB4OTgsIDB4MmUsIDB4MWYsIDB4MTgsCi0gIDB4YTEsIDB4MGYsIDB4OWMsIDB4MmMsIDB4NzEsIDB4N2MsIDB4ZDcsIDB4NzUsIDB4ZDksIDB4MzYsIDB4OTgsIDB4YmEsCi0gIDB4ZDcsIDB4MTQsIDB4ZTYsIDB4ZmEsIDB4NDcsIDB4MWMsIDB4NjYsIDB4YWYsIDB4OTUsIDB4OTAsIDB4YjYsIDB4NmYsCi0gIDB4ZjQsIDB4YmQsIDB4N2QsIDB4MGYsIDB4YWEsIDB4ZTgsIDB4M2EsIDB4YWYsIDB4MzgsIDB4ZGEsIDB4Y2UsIDB4ZTgsCi0gIDB4YzIsIDB4YjIsIDB4ZjMsIDB4ZGEsIDB4NzYsIDB4YTUsIDB4NDMsIDB4ZDMsIDB4MGEsIDB4MjEsIDB4ODgsIDB4MzQsCi0gIDB4NDQsIDB4MDIsIDB4NmIsIDB4OTAsIDB4MTUsIDB4MjksIDB4NDksIDB4NzYsIDB4Y2MsIDB4ZmEsIDB4NjAsIDB4NjgsCi0gIDB4ODksIDB4ZmQsIDB4N2QsIDB4ZTMsIDB4YWQsIDB4YTAsIDB4YWQsIDB4ODUsIDB4YTIsIDB4MmIsIDB4YjIsIDB4NTIsCi0gIDB4MzQsIDB4NDIsIDB4NzgsIDB4YjksIDB4MzYsIDB4NGQsIDB4MDIsIDB4OTAsIDB4Y2UsIDB4YzMsIDB4OTUsIDB4YmQsCi0gIDB4NzksIDB4NzUsIDB4OWUsIDB4MWUsIDB4ZGQsIDB4OTQsIDB4NzIsIDB4ZDMsIDB4NjEsIDB4Y2EsIDB4ODEsIDB4ZTQsCi0gIDB4ZDksIDB4NzYsIDB4ZDYsIDB4ZDksIDB4ZDEsIDB4ZTQsIDB4NjgsIDB4ZDEsIDB4ZmEsIDB4MzQsIDB4NDksIDB4NmIsCi0gIDB4ZmQsIDB4YWUsIDB4NWEsIDB4OTQsIDB4ZDYsIDB4MzYsIDB4OTQsIDB4ZjQsIDB4MjAsIDB4MDYsIDB4NDAsIDB4M2UsCi0gIDB4NmUsIDB4NzUsIDB4ODUsIDB4OGMsIDB4YWQsIDB4YWEsIDB4YzQsIDB4MjYsIDB4MzMsIDB4ZDUsIDB4OWIsIDB4M2YsCi0gIDB4NTMsIDB4MDIsIDB4ZTksIDB4YjIsIDB4YzIsIDB4YWMsIDB4MDUsIDB4YTUsIDB4OGMsIDB4MzksIDB4NGIsIDB4OGEsCi0gIDB4OTMsIDB4ZDIsIDB4YzIsIDB4ZGYsIDB4MjQsIDB4OTIsIDB4MmMsIDB4MTIsIDB4NWUsIDB4MzUsIDB4NzYsIDB4ZmIsCi0gIDB4YTEsIDB4ZTUsIDB4NmMsIDB4MmUsIDB4OTYsIDB4YmEsIDB4MGUsIDB4YmIsIDB4MWQsIDB4ZGUsIDB4MDAsIDB4MTMsCi0gIDB4NTYsIDB4ODgsIDB4NDIsIDB4MTgsIDB4NWUsIDB4MDIsIDB4MTEsIDB4YmEsIDB4YTMsIDB4MzgsIDB4NjUsIDB4Y2EsCi0gIDB4YWIsIDB4NjAsIDB4ZTEsIDB4NzEsIDB4ZDMsIDB4ODQsIDB4MTUsIDB4MmEsIDB4YWUsIDB4ODAsIDB4YzMsIDB4OGMsCi0gIDB4ODIsIDB4NzQsIDB4ODcsIDB4ZTQsIDB4YjIsIDB4MTMsIDB4ZTcsIDB4ZTEsIDB4ZWIsIDB4N2UsIDB4OTIsIDB4Y2EsCi0gIDB4N2MsIDB4MDYsIDB4MTEsIDB4ZTksIDB4OTUsIDB4NTcsIDB4NTQsIDB4ZmMsIDB4YWYsIDB4NjMsIDB4YmYsIDB4MTMsCi0gIDB4YTEsIDB4ODYsIDB4ZWUsIDB4NmUsIDB4MTQsIDB4ZTAsIDB4OGEsIDB4YjIsIDB4MGMsIDB4OWQsIDB4ZDMsIDB4ZWQsCi0gIDB4MGMsIDB4ZjgsIDB4MTksIDB4NmUsIDB4MzEsIDB4OWYsIDB4MjAsIDB4MDIsIDB4M2QsIDB4ZDAsIDB4YjcsIDB4MzUsCi0gIDB4ZmMsIDB4ZjIsIDB4ZWYsIDB4MWMsIDB4YTgsIDB4MTIsIDB4NjksIDB4MWEsIDB4MmYsIDB4Y2YsIDB4MWYsIDB4YTgsCi0gIDB4YjgsIDB4NTQsIDB4YjAsIDB4NjksIDB4NDksIDB4MzEsIDB4NTMsIDB4OGYsIDB4YzQsIDB4ZTgsIDB4MDEsIDB4YjEsCi0gIDB4OTYsIDB4ZDAsIDB4ZDIsIDB4YzcsIDB4ZDAsIDB4ZGEsIDB4YjEsIDB4NTIsIDB4YjQsIDB4MDAsIDB4MjAsIDB4MzYsCi0gIDB4ZDUsIDB4MzksIDB4NDUsIDB4MjgsIDB4ODgsIDB4ZDYsIDB4ZTAsIDB4ODgsIDB4MGEsIDB4ZmIsIDB4YTMsIDB4YTgsCi0gIDB4MjUsIDB4MTEsIDB4NjQsIDB4MGEsIDB4NWMsIDB4MTQsIDB4NzAsIDB4MGUsIDB4MjEsIDB4MWEsIDB4OTQsIDB4YmQsCi0gIDB4ZDYsIDB4MDcsIDB4NDEsIDB4MjEsIDB4OGIsIDB4ODMsIDB4N2IsIDB4ZWEsIDB4ZWYsIDB4N2EsIDB4NTQsIDB4NjUsCi0gIDB4NzQsIDB4MjcsIDB4OTYsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MGMsIDB4ZTMsIDB4OTUsIDB4ODksIDB4ZmEsIDB4OWYsCi0gIDB4ZDYsIDB4ZjUsIDB4ZmYsIDB4NzcsIDB4OGUsIDB4YjUsIDB4MGUsIDB4MWQsIDB4MWUsIDB4YmQsIDB4ZTQsIDB4NGEsCi0gIDB4NzIsIDB4ZjIsIDB4ZGUsIDB4N2QsIDB4NjksIDB4MWQsIDB4NzEsIDB4OTYsIDB4YTcsIDB4YTcsIDB4YTcsIDB4YmMsCi0gIDB4NDUsIDB4ZDksIDB4ZDYsIDB4MTMsIDB4YzUsIDB4NTMsIDB4OTgsIDB4OTIsIDB4NjQsIDB4OTgsIDB4Y2YsIDB4N2YsCi0gIDB4YzYsIDB4ZWYsIDB4MWQsIDB4MTEsIDB4OTYsIDB4YTAsIDB4YmYsIDB4MGYsIDB4YTMsIDB4NWIsIDB4ZDEsIDB4MWQsCi0gIDB4YTksIDB4YTEsIDB4ZjksIDB4NWUsIDB4ZGEsIDB4ZmIsIDB4OGYsIDB4MzAsIDB4YjksIDB4NzMsIDB4OTQsIDB4ZGQsCi0gIDB4OWEsIDB4MzEsIDB4MWQsIDB4NmQsIDB4M2EsIDB4MTMsIDB4MzAsIDB4OTEsIDB4NWEsIDB4N2YsIDB4OWQsIDB4ZjUsCi0gIDB4NjQsIDB4NzYsIDB4MjQsIDB4MmEsIDB4MDMsIDB4YjAsIDB4YjEsIDB4NmIsIDB4MjUsIDB4M2MsIDB4NWYsIDB4NDAsCi0gIDB4OTgsIDB4MjYsIDB4ODcsIDB4MTcsIDB4YjQsIDB4MzEsIDB4ZjgsIDB4OTQsIDB4ZmMsIDB4YzksIDB4Y2EsIDB4NTksCi0gIDB4MzMsIDB4NTIsIDB4NjEsIDB4ODYsIDB4ZTIsIDB4YTksIDB4YjYsIDB4ZDIsIDB4MTQsIDB4NTIsIDB4OTcsIDB4YWEsCi0gIDB4MTYsIDB4NGUsIDB4MmQsIDB4NWUsIDB4ZjksIDB4NWEsIDB4ODMsIDB4NjQsIDB4MDEsIDB4YjAsIDB4ODIsIDB4NDMsCi0gIDB4NDYsIDB4ODIsIDB4NjMsIDB4NzgsIDB4ZjYsIDB4ZTcsIDB4ODEsIDB4MGUsIDB4NGIsIDB4MzEsIDB4ZDYsIDB4NzQsCi0gIDB4ZTgsIDB4ZjksIDB4ZjIsIDB4NmUsIDB4NjksIDB4OWYsIDB4MmEsIDB4ZDgsIDB4MGEsIDB4NDMsIDB4MzQsIDB4MzksCi0gIDB4YzMsIDB4NGIsIDB4YmEsIDB4OTgsIDB4NDgsIDB4NDIsIDB4NDksIDB4NDMsIDB4M2IsIDB4OTgsIDB4NDcsIDB4NmUsCi0gIDB4OTEsIDB4MzIsIDB4OTIsIDB4NDUsIDB4MjQsIDB4ZTQsIDB4YmQsIDB4YTYsIDB4YjksIDB4NjUsIDB4NTcsIDB4NTEsCi0gIDB4M2IsIDB4MmEsIDB4NGUsIDB4YzcsIDB4MGEsIDB4NzksIDB4MzQsIDB4MTUsIDB4YzcsIDB4YjEsIDB4YjcsIDB4OWIsCi0gIDB4OWEsIDB4MTQsIDB4NDcsIDB4NzAsIDB4NGMsIDB4NWEsIDB4MTgsIDB4ZTYsIDB4ODAsIDB4MTgsIDB4YzAsIDB4OTIsCi0gIDB4YTEsIDB4NDUsIDB4NWUsIDB4ZWMsIDB4ODcsIDB4NDksIDB4ZjgsIDB4MTYsIDB4MmQsIDB4YzgsIDB4MDQsIDB4NjIsCi0gIDB4ZTYsIDB4NzYsIDB4ZDMsIDB4NWMsIDB4MzYsIDB4NGQsIDB4MjYsIDB4ZTQsIDB4YTMsIDB4NmEsIDB4ZGUsIDB4NjksCi0gIDB4ZmMsIDB4OTcsIDB4ZDQsIDB4NzksIDB4ZTEsIDB4Y2EsIDB4YWEsIDB4YzMsIDB4ZDYsIDB4YjMsIDB4MzAsIDB4Y2UsCi0gIDB4YjgsIDB4ZDUsIDB4MDcsIDB4YmUsIDB4ODIsIDB4N2EsIDB4NjAsIDB4MjAsIDB4MzUsIDB4YzgsIDB4NmUsIDB4MWQsCi0gIDB4OGUsIDB4ZDcsIDB4ZGYsIDB4NWQsIDB4YjUsIDB4MTIsIDB4OTUsIDB4NzAsIDB4NjUsIDB4ZTUsIDB4MjksIDB4MzAsCi0gIDB4ODcsIDB4ZTIsIDB4ZWYsIDB4NTAsIDB4MDIsIDB4ZWIsIDB4YzYsIDB4ZjAsIDB4ZGUsIDB4MGIsIDB4M2YsIDB4ZGMsCi0gIDB4NjksIDB4MDgsIDB4NmUsIDB4YzAsIDB4MDAsIDB4ODQsIDB4YjIsIDB4NTYsIDB4NzUsIDB4ZGYsIDB4YTYsIDB4YjUsCi0gIDB4ODAsIDB4ZjEsIDB4M2QsIDB4ZGMsIDB4N2MsIDB4NzksIDB4MmIsIDB4NmEsIDB4ODAsIDB4MDcsIDB4YjgsIDB4MmEsCi0gIDB4MDksIDB4Y2IsIDB4NjMsIDB4MjgsIDB4ZGEsIDB4MDAsIDB4MTQsIDB4YzIsIDB4MDAsIDB4MzgsIDB4MjEsIDB4MWEsCi0gIDB4OTQsIDB4YTUsIDB4ZDIsIDB4MGEsIDB4ODEsIDB4MTgsIDB4MDIsIDB4YWEsIDB4MjYsIDB4OTUsIDB4ODgsIDB4MzgsCi0gIDB4NWQsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4YzQsIDB4Y2QsIDB4M2IsIDB4MjcsIDB4OGUsIDB4Y2QsCi0gIDB4NDksIDB4MzAsIDB4MGYsIDB4MWUsIDB4MTYsIDB4ZDMsIDB4NmYsIDB4MTIsIDB4ZTEsIDB4ZmUsIDB4MjUsIDB4YjksCi0gIDB4YmUsIDB4ZTcsIDB4NDAsIDB4MTEsIDB4MmIsIDB4ZWQsIDB4YTUsIDB4ZGIsIDB4NzMsIDB4ZDMsIDB4OTksIDB4YmUsCi0gIDB4MGQsIDB4YTMsIDB4N2QsIDB4NzEsIDB4NGEsIDB4ZDEsIDB4MTMsIDB4NWUsIDB4NWMsIDB4YTUsIDB4NjYsIDB4ZmEsCi0gIDB4ZjYsIDB4OTYsIDB4OWUsIDB4ZTAsIDB4NmYsIDB4N2QsIDB4YTUsIDB4OGUsIDB4ZjksIDB4MmYsIDB4YjUsIDB4MTgsCi0gIDB4MTIsIDB4NDEsIDB4YTQsIDB4M2UsIDB4ZWEsIDB4YzUsIDB4YTUsIDB4ZTEsIDB4NzQsIDB4N2YsIDB4ZDUsIDB4ZmMsCi0gIDB4MDcsIDB4ZDAsIDB4MjQsIDB4NTcsIDB4NWMsIDB4NjcsIDB4NTcsIDB4Y2QsIDB4OTgsIDB4YjYsIDB4YzMsIDB4ZDIsCi0gIDB4NjcsIDB4NjUsIDB4NDAsIDB4NTksIDB4NWMsIDB4MTksIDB4OGEsIDB4NzksIDB4NzcsIDB4NWMsIDB4ZmIsIDB4MWUsCi0gIDB4MzcsIDB4MzcsIDB4ZWIsIDB4NWYsIDB4YjIsIDB4OTYsIDB4MzQsIDB4OWYsIDB4NjUsIDB4ZmYsIDB4ZDAsIDB4ZWYsCi0gIDB4OGEsIDB4MjEsIDB4NGEsIDB4NWMsIDB4NzUsIDB4NDksIDB4NTksIDB4NzYsIDB4ZWIsIDB4MGQsIDB4MzcsIDB4ZTMsCi0gIDB4ZGQsIDB4ZWYsIDB4MTUsIDB4NmMsIDB4ODAsIDB4ZTgsIDB4ZDMsIDB4NjEsIDB4YzUsIDB4YWUsIDB4MGYsIDB4ZGYsCi0gIDB4ZDAsIDB4NDEsIDB4OGQsIDB4MzksIDB4YmUsIDB4OWMsIDB4MmQsIDB4N2QsIDB4OWIsIDB4MmYsIDB4MWQsIDB4MGEsCi0gIDB4ZDMsIDB4ZGUsIDB4OWQsIDB4YjksIDB4Y2IsIDB4N2UsIDB4OTksIDB4NWUsIDB4M2MsIDB4ZDEsIDB4MWIsIDB4NmQsCi0gIDB4NmEsIDB4OWMsIDB4ZDYsIDB4MDcsIDB4ZTcsIDB4NjMsIDB4NDUsIDB4ZjAsIDB4NTQsIDB4NzYsIDB4MmIsIDB4YmMsCi0gIDB4NjUsIDB4NGUsIDB4OTYsIDB4MmQsIDB4NDMsIDB4MzQsIDB4NTcsIDB4OWUsIDB4NzUsIDB4OTksIDB4MjQsIDB4YmQsCi0gIDB4ZWYsIDB4MzgsIDB4ZWYsIDB4NDIsIDB4MWYsIDB4NmUsIDB4YWMsIDB4MmQsIDB4ZGEsIDB4NmYsIDB4OWUsIDB4ZjAsCi0gIDB4YmQsIDB4ZDcsIDB4OGMsIDB4MzEsIDB4ZTEsIDB4N2MsIDB4MjYsIDB4MDEsIDB4MzMsIDB4NmIsIDB4NjEsIDB4YWEsCi0gIDB4ODAsIDB4NjIsIDB4ZDAsIDB4MTIsIDB4NTQsIDB4YjgsIDB4YjUsIDB4NGEsIDB4NmMsIDB4MWMsIDB4M2MsIDB4OWYsCi0gIDB4MDAsIDB4ZDMsIDB4MjgsIDB4MDgsIDB4MzYsIDB4NDUsIDB4YzQsIDB4ZTIsIDB4MTAsIDB4ZjgsIDB4YTMsIDB4ZTgsCi0gIDB4ZmMsIDB4NDMsIDB4MjMsIDB4ZDMsIDB4N2UsIDB4ZDksIDB4NzksIDB4MzEsIDB4YzcsIDB4OGQsIDB4YWQsIDB4YjYsCi0gIDB4NzIsIDB4YWEsIDB4YzksIDB4NjksIDB4ZjIsIDB4YWEsIDB4YzcsIDB4ODQsIDB4OTMsIDB4ZGIsIDB4YjMsIDB4ODksCi0gIDB4NTYsIDB4YzQsIDB4MzcsIDB4ZjEsIDB4ZjEsIDB4ZTQsIDB4ZDAsIDB4MGIsIDB4Y2QsIDB4NmUsIDB4MjgsIDB4MGEsCi0gIDB4NjcsIDB4NWIsIDB4ODksIDB4OTAsIDB4ZWUsIDB4YmMsIDB4NWUsIDB4NWEsIDB4ZGMsIDB4OTMsIDB4MTcsIDB4MjgsCi0gIDB4NTgsIDB4MGIsIDB4MWMsIDB4ZDksIDB4OTQsIDB4ZGMsIDB4ODksIDB4MzgsIDB4MjIsIDB4MDIsIDB4MTQsIDB4MWMsCi0gIDB4ZGIsIDB4Y2IsIDB4YzksIDB4MDksIDB4NDEsIDB4MTAsIDB4YmYsIDB4NWQsIDB4OTUsIDB4YTcsIDB4ZTcsIDB4NjUsCi0gIDB4OTIsIDB4ZDYsIDB4YTAsIDB4NTQsIDB4YWEsIDB4OTYsIDB4MmQsIDB4NjAsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MWEsCi0gIDB4ZTAsIDB4NzAsIDB4MjEsIDB4MWEsIDB4OTQsIDB4ZDUsIDB4Y2UsIDB4ODcsIDB4MDMsIDB4NDAsIDB4OTEsIDB4OTQsCi0gIDB4ODIsIDB4NjEsIDB4NWQsIDB4MTYsIDB4OWEsIDB4MTUsIDB4NDIsIDB4NWQsIDB4ZGQsIDB4YWQsIDB4MDAsIDB4NGMsCi0gIDB4MGIsIDB4MTIsIDB4NzgsIDB4YjYsIDB4MjYsIDB4ZTcsIDB4Y2EsIDB4ZTMsIDB4ZDAsIDB4MjYsIDB4M2MsIDB4YmYsCi0gIDB4YTksIDB4MzQsIDB4MzcsIDB4ZTQsIDB4MzMsIDB4ZWMsIDB4ODksIDB4NGQsIDB4M2IsIDB4NjIsIDB4MzQsIDB4ZjcsCi0gIDB4MjUsIDB4ZTYsIDB4ZGUsIDB4YzIsIDB4ZDIsIDB4MWQsIDB4OTMsIDB4ZjMsIDB4NTEsIDB4Y2YsIDB4OTUsIDB4NmMsCi0gIDB4OWUsIDB4OWIsIDB4ZmQsIDB4NWYsIDB4ODMsIDB4NmIsIDB4NmUsIDB4MjgsIDB4NmUsIDB4MzgsIDB4ZjgsIDB4OTUsCi0gIDB4N2YsIDB4NzIsIDB4YTksIDB4ZTYsIDB4YmUsIDB4ZGQsIDB4ZjEsIDB4OWMsIDB4NzcsIDB4ZDgsIDB4MTksIDB4MDAsCi0gIDB4M2MsIDB4YmQsIDB4NGIsIDB4NjUsIDB4NTAsIDB4N2UsIDB4ZDMsIDB4M2MsIDB4NmIsIDB4OWUsIDB4NjcsIDB4ZTIsCi0gIDB4ZGUsIDB4NzQsIDB4ZTYsIDB4OWQsIDB4NmQsIDB4ZTcsIDB4M2UsIDB4MjEsIDB4NTQsIDB4NWUsIDB4OWYsIDB4YTMsCi0gIDB4NjQsIDB4NmMsIDB4YWYsIDB4ZTEsIDB4ZGIsIDB4MGIsIDB4YjUsIDB4ZDksIDB4MzksIDB4YzQsIDB4OWYsIDB4MjksCi0gIDB4ZGIsIDB4ZjIsIDB4ZGIsIDB4ZTksIDB4MzgsIDB4YzgsIDB4ZWMsIDB4NGUsIDB4ZDIsIDB4NjUsIDB4ZDIsIDB4ZDMsCi0gIDB4NTEsIDB4ZTAsIDB4OWQsIDB4MjQsIDB4YzgsIDB4YzYsIDB4NDQsIDB4MDIsIDB4MjksIDB4OGUsIDB4MzgsIDB4ZWYsCi0gIDB4YjUsIDB4ODYsIDB4MWMsIDB4ZjAsIDB4OWUsIDB4N2EsIDB4NjQsIDB4MDAsIDB4OTEsIDB4MjMsIDB4ZjYsIDB4OTAsCi0gIDB4YWEsIDB4N2MsIDB4OTYsIDB4ZjYsIDB4MzEsIDB4NDUsIDB4ZWIsIDB4MWQsIDB4NGIsIDB4ZmIsIDB4ZTksIDB4NjYsCi0gIDB4M2MsIDB4Y2YsIDB4NDIsIDB4YTYsIDB4OTcsIDB4MzksIDB4OWIsIDB4NTgsIDB4NzksIDB4NjQsIDB4MWQsIDB4MDMsCi0gIDB4MjksIDB4NWIsIDB4NjgsIDB4ZWQsIDB4MTMsIDB4MjQsIDB4MWEsIDB4YTUsIDB4N2MsIDB4M2IsIDB4Y2MsIDB4YTMsCi0gIDB4YTMsIDB4MDgsIDB4NTMsIDB4NzMsIDB4NmIsIDB4MjgsIDB4NDYsIDB4YjcsIDB4OTIsIDB4NDksIDB4MzAsIDB4NjEsCi0gIDB4NjgsIDB4MjcsIDB4MzQsIDB4OTUsIDB4NDksIDB4MTksIDB4Y2EsIDB4MzYsIDB4ODgsIDB4YTUsIDB4MTAsIDB4MjEsCi0gIDB4MzgsIDB4ZTAsIDB4NTgsIDB4YzcsIDB4ZjYsIDB4OWIsIDB4ZTQsIDB4NzUsIDB4NjYsIDB4YTUsIDB4MWQsIDB4YWYsCi0gIDB4OGYsIDB4YWEsIDB4MDgsIDB4ZWMsIDB4YmUsIDB4MGYsIDB4MGQsIDB4M2MsIDB4YmYsIDB4ZWYsIDB4NmUsIDB4ODAsCi0gIDB4OTksIDB4YTcsIDB4MzAsIDB4OTAsIDB4YzIsIDB4MjAsIDB4MTAsIDB4YzEsIDB4NjgsIDB4ZGUsIDB4YTIsIDB4YjgsCi0gIDB4YjMsIDB4YzAsIDB4NjksIDB4ZDMsIDB4NWQsIDB4MGIsIDB4MDIsIDB4ODAsIDB4NzMsIDB4YmIsIDB4ZWUsIDB4ZTMsCi0gIDB4ZWQsIDB4NzUsIDB4ZTIsIDB4NmQsIDB4NTQsIDB4NzIsIDB4N2YsIDB4NTcsIDB4Y2UsIDB4MmYsIDB4MzYsIDB4ZjMsCi0gIDB4M2QsIDB4NTIsIDB4YTUsIDB4NGEsIDB4ZjEsIDB4NjMsIDB4MzMsIDB4OTcsIDB4ZDMsIDB4M2EsIDB4N2IsIDB4N2YsCi0gIDB4ZDgsIDB4YmUsIDB4ZjMsIDB4NzksIDB4ZTIsIDB4NzksIDB4NzcsIDB4MWEsIDB4ZDcsIDB4NjgsIDB4NmQsIDB4ZjYsCi0gIDB4NjIsIDB4OWIsIDB4ODUsIDB4NGIsIDB4MzMsIDB4MmMsIDB4MDIsIDB4NTAsIDB4MmYsIDB4ODQsIDB4ZDAsIDB4NTYsCi0gIDB4YmMsIDB4MjYsIDB4YTUsIDB4ZjAsIDB4OTIsIDB4NmQsIDB4NzQsIDB4NzgsIDB4ZDksIDB4NjUsIDB4MTksIDB4MjYsCi0gIDB4YjgsIDB4YTQsIDB4N2IsIDB4YWQsIDB4MTksIDB4MTAsIDB4OTgsIDB4MDQsIDB4YzAsIDB4NmEsIDB4MTUsIDB4NDMsCi0gIDB4ZjcsIDB4MDAsIDB4YTIsIDB4MmUsIDB4NzAsIDB4OWMsIDB4YTgsIDB4MGIsIDB4ZDIsIDB4MGIsIDB4OTUsIDB4MjEsCi0gIDB4MTQsIDB4NGIsIDB4YzEsIDB4NDgsIDB4NWYsIDB4OTIsIDB4N2EsIDB4NDIsIDB4NzIsIDB4YTIsIDB4YjAsIDB4N2EsCi0gIDB4MjYsIDB4MDIsIDB4OTEsIDB4ODAsIDB4MTksIDB4N2UsIDB4NjYsIDB4NDAsIDB4MzgsIDB4MjEsIDB4MWEsIDB4OTQsCi0gIDB4YjUsIDB4Y2UsIDB4ODYsIDB4YzMsIDB4NDIsIDB4MGIsIDB4NDgsIDB4MTcsIDB4MjIsIDB4YTgsIDB4MDksIDB4N2MsCi0gIDB4MmUsIDB4NjgsIDB4MDAsIDB4MDAsIDB4NjMsIDB4OGMsIDB4OTgsIDB4MmEsIDB4ZDQsIDB4Y2UsIDB4NmYsIDB4ZTgsCi0gIDB4ZTAsIDB4ZTgsIDB4YzEsIDB4ODMsIDB4NDAsIDB4OTksIDB4YmUsIDB4YjMsIDB4N2YsIDB4ZTIsIDB4YmEsIDB4YzQsCi0gIDB4MTEsIDB4N2YsIDB4Y2UsIDB4ZDgsIDB4NzQsIDB4NzcsIDB4YjQsIDB4ZWMsIDB4OGMsIDB4Y2QsIDB4OTgsIDB4ZTIsCi0gIDB4NWUsIDB4NWUsIDB4MWYsIDB4NTEsIDB4ZjAsIDB4NzUsIDB4NmUsIDB4YTgsIDB4ZDIsIDB4YWUsIDB4NDgsIDB4MjYsCi0gIDB4YmIsIDB4NTcsIDB4OWQsIDB4MDEsIDB4MzEsIDB4ZmQsIDB4NjcsIDB4MmUsIDB4ZmQsIDB4MjcsIDB4Y2MsIDB4OWMsCi0gIDB4NWQsIDB4ZmIsIDB4MzMsIDB4MjcsIDB4MTYsIDB4ZTksIDB4OWMsIDB4ODIsIDB4MWYsIDB4YjAsIDB4NzAsIDB4NGMsCi0gIDB4YTUsIDB4OTMsIDB4NDUsIDB4ZTEsIDB4NTYsIDB4OTYsIDB4YjgsIDB4M2IsIDB4ZjMsIDB4NjQsIDB4N2YsIDB4OWIsCi0gIDB4ZDIsIDB4ZmQsIDB4NjcsIDB4MzAsIDB4ZWMsIDB4MGYsIDB4OGEsIDB4YjksIDB4NGUsIDB4N2EsIDB4OGUsIDB4N2IsCi0gIDB4YzEsIDB4NzMsIDB4ZjksIDB4ZWUsIDB4NGYsIDB4NWQsIDB4ODIsIDB4ODcsIDB4YWIsIDB4YTksIDB4ZDcsIDB4MzEsCi0gIDB4ZjIsIDB4NTIsIDB4OTQsIDB4MjksIDB4OTcsIDB4MWIsIDB4YTgsIDB4MDIsIDB4MzksIDB4OTYsIDB4YWIsIDB4YTcsCi0gIDB4NTAsIDB4ZjAsIDB4N2YsIDB4NDcsIDB4ODcsIDB4OWYsIDB4YTgsIDB4N2YsIDB4MzQsIDB4YjIsIDB4YzIsIDB4MGYsCi0gIDB4MTcsIDB4ZjgsIDB4NGEsIDB4MTUsIDB4YjQsIDB4NjMsIDB4NDIsIDB4Y2UsIDB4ZWUsIDB4YTYsIDB4MjEsIDB4Y2IsCi0gIDB4MjEsIDB4NGYsIDB4MmQsIDB4YWMsIDB4YTYsIDB4YzgsIDB4ODYsIDB4NTYsIDB4NjcsIDB4ZTEsIDB4NzAsIDB4ZjEsCi0gIDB4YjIsIDB4OGYsIDB4ZjUsIDB4ZmUsIDB4NmMsIDB4NzAsIDB4ZjAsIDB4ZWQsIDB4Y2MsIDB4ZWUsIDB4MjUsIDB4OWEsCi0gIDB4NTgsIDB4N2IsIDB4YzIsIDB4ZDcsIDB4ODEsIDB4MzcsIDB4MzEsIDB4MWYsIDB4ZTMsIDB4YmEsIDB4NTEsIDB4NzEsCi0gIDB4YjUsIDB4MTQsIDB4OTYsIDB4ZGYsIDB4NTYsIDB4NjEsIDB4MjcsIDB4YjAsIDB4MGEsIDB4YjIsIDB4OGQsIDB4YjcsCi0gIDB4YzksIDB4NzQsIDB4NWIsIDB4YTUsIDB4NDksIDB4MmUsIDB4YTYsIDB4YmYsIDB4N2MsIDB4MjMsIDB4ZTgsIDB4YTcsCi0gIDB4ZjYsIDB4YTUsIDB4ZTMsIDB4YjYsIDB4MDEsIDB4MmYsIDB4NjgsIDB4ODMsIDB4ODEsIDB4MDQsIDB4NDgsIDB4MjEsCi0gIDB4MDgsIDB4MDgsIDB4NjAsIDB4YjIsIDB4MGMsIDB4OTIsIDB4YTAsIDB4N2IsIDB4NWIsIDB4OGUsIDB4MjgsIDB4YWIsCi0gIDB4MTgsIDB4MjAsIDB4MmEsIDB4YjAsIDB4NzAsIDB4ZDcsIDB4MTMsIDB4N2UsIDB4MzksIDB4YmUsIDB4M2IsIDB4MDYsCi0gIDB4NmYsIDB4ZWEsIDB4ZTMsIDB4ZjcsIDB4NDAsIDB4ZjgsIDB4Y2QsIDB4OTMsIDB4MTQsIDB4MWMsIDB4MzMsIDB4ZjcsCi0gIDB4MGEsIDB4ZDEsIDB4YTQsIDB4ZDYsIDB4Y2UsIDB4MTQsIDB4NmMsIDB4YjMsIDB4YjYsIDB4ZDUsIDB4ZWMsIDB4MDYsCi0gIDB4MjUsIDB4OWMsIDB4MjIsIDB4MjYsIDB4MjgsIDB4ODEsIDB4NjksIDB4ZmQsIDB4NDYsIDB4OGMsIDB4MDUsIDB4YWYsCi0gIDB4NWUsIDB4ODEsIDB4ZmMsIDB4YWEsIDB4ZWIsIDB4MjgsIDB4ODEsIDB4MTgsIDB4MzgsIDB4M2MsIDB4MzQsIDB4YzMsCi0gIDB4ZjksIDB4ZWMsIDB4MDIsIDB4ZDgsIDB4ODAsIDB4ODAsIDB4NTgsIDB4MDUsIDB4NGEsIDB4YTUsIDB4MDIsIDB4ZDAsCi0gIDB4NGMsIDB4OTQsIDB4MTIsIDB4NTYsIDB4YjYsIDB4ODIsIDB4MjAsIDB4MDEsIDB4MWIsIDB4NDAsIDB4NDIsIDB4NDEsCi0gIDB4NDEsIDB4MjMsIDB4ZjgsIDB4YmMsIDB4OTAsIDB4OTQsIDB4NmUsIDB4M2YsIDB4N2YsIDB4YWMsIDB4NmQsIDB4YTMsCi0gIDB4YzAsIDB4NWEsIDB4NzksIDB4MTUsIDB4MGUsIDB4MjEsIDB4MWEsIDB4OTQsIDB4ZGQsIDB4Y2UsIDB4ODksIDB4NjMsCi0gIDB4YTEsIDB4YTEsIDB4OTgsIDB4MjQsIDB4NjIsIDB4NGIsIDB4NTYsIDB4NzAsIDB4YjYsIDB4NDYsIDB4ZWMsIDB4ZDUsCi0gIDB4ZjQsIDB4ZTksIDB4YWIsIDB4OWIsIDB4YTAsIDB4OTMsIDB4MDAsIDB4MWMsIDB4MWUsIDB4YjMsIDB4ZTksIDB4YjYsCi0gIDB4ZTgsIDB4YjcsIDB4NDcsIDB4ZTcsIDB4ZmMsIDB4NGIsIDB4MGUsIDB4ZmEsIDB4ODUsIDB4MDYsIDB4MWEsIDB4ODAsCi0gIDB4M2EsIDB4ZmYsIDB4ZjEsIDB4N2YsIDB4NmIsIDB4NTgsIDB4ODgsIDB4Y2MsIDB4ZTAsIDB4NzEsIDB4NDEsIDB4ZTEsCi0gIDB4NTksIDB4N2EsIDB4ODgsIDB4MjcsIDB4YTcsIDB4ZjYsIDB4MDYsIDB4MDYsIDB4MGEsIDB4N2EsIDB4YzIsIDB4ZjcsCi0gIDB4NmMsIDB4MjYsIDB4NTAsIDB4MDcsIDB4YTMsIDB4ZmQsIDB4OTMsIDB4YTcsIDB4ZmYsIDB4M2QsIDB4ZjgsIDB4NWYsCi0gIDB4MWYsIDB4ZWUsIDB4OGMsIDB4ZDEsIDB4Y2MsIDB4ZjksIDB4ZmYsIDB4MjQsIDB4NjksIDB4YjksIDB4MTksIDB4NjQsCi0gIDB4ODksIDB4NDQsIDB4NDksIDB4MDEsIDB4YzAsIDB4NTEsIDB4ZjksIDB4N2YsIDB4NWMsIDB4ZjIsIDB4M2MsIDB4YzIsCi0gIDB4OGEsIDB4MWYsIDB4ZTYsIDB4NTksIDB4NzMsIDB4YWIsIDB4YjksIDB4YjIsIDB4MWIsIDB4YWIsIDB4YWUsIDB4N2IsCi0gIDB4YzcsIDB4ZTUsIDB4NjEsIDB4YjMsIDB4YmQsIDB4NDAsIDB4ZDIsIDB4OTQsIDB4OTgsIDB4OWUsIDB4ODUsIDB4NjUsCi0gIDB4NDcsIDB4ZTgsIDB4YTQsIDB4MzcsIDB4N2YsIDB4NjAsIDB4ZTUsIDB4ZmEsIDB4MGQsIDB4NWEsIDB4NzYsIDB4YmMsCi0gIDB4ZDYsIDB4MDgsIDB4YjksIDB4NGIsIDB4YWUsIDB4MzYsIDB4MmQsIDB4ZmEsIDB4ZWEsIDB4ODAsIDB4ZTgsIDB4OGUsCi0gIDB4ZTMsIDB4ZjQsIDB4MGQsIDB4NmYsIDB4ZmUsIDB4ZGQsIDB4NmQsIDB4ZmUsIDB4NWYsIDB4ZmYsIDB4YjIsIDB4YTgsCi0gIDB4YmYsIDB4NGQsIDB4NjgsIDB4ODcsIDB4OGUsIDB4MDMsIDB4YTYsIDB4ZmIsIDB4NTMsIDB4YzUsIDB4ZmEsIDB4YTMsCi0gIDB4YTAsIDB4YWEsIDB4NTAsIDB4N2UsIDB4ZGIsIDB4ZTAsIDB4N2EsIDB4NWIsIDB4ZjYsIDB4NzgsIDB4NjYsIDB4YzcsCi0gIDB4YTQsIDB4MzUsIDB4M2UsIDB4ODUsIDB4Y2QsIDB4NTksIDB4ODcsIDB4ZTMsIDB4YjMsIDB4NWMsIDB4MTYsIDB4MWQsCi0gIDB4YTUsIDB4ZWIsIDB4MWIsIDB4YWYsIDB4NmIsIDB4YjksIDB4OTYsIDB4NDYsIDB4ZDksIDB4YjEsIDB4ZTgsIDB4MWEsCi0gIDB4OWYsIDB4ZDIsIDB4ZWQsIDB4ZGIsIDB4NmQsIDB4N2EsIDB4YTMsIDB4NjQsIDB4YzUsIDB4ZGMsIDB4MjMsIDB4YTQsCi0gIDB4NmIsIDB4ZDMsIDB4NTIsIDB4MmIsIDB4NTAsIDB4ZTQsIDB4YzgsIDB4YzEsIDB4OTIsIDB4NTksIDB4MGUsIDB4NWMsCi0gIDB4MjEsIDB4Y2QsIDB4YWIsIDB4MmQsIDB4NTIsIDB4M2QsIDB4MmMsIDB4YWYsIDB4ZWMsIDB4YjUsIDB4ODgsIDB4ZGQsCi0gIDB4Y2UsIDB4MzIsIDB4ZjcsIDB4ODMsIDB4MWYsIDB4ZDIsIDB4OGEsIDB4ZDgsIDB4ZjIsIDB4MjMsIDB4YmMsIDB4ZDgsCi0gIDB4Y2YsIDB4OGMsIDB4YmMsIDB4YTksIDB4ODEsIDB4ZDEsIDB4MzQsIDB4OTcsIDB4ZDcsIDB4ZTIsIDB4ZDUsIDB4MDIsCi0gIDB4N2EsIDB4ZGYsIDB4NTksIDB4M2YsIDB4YTEsIDB4ODEsIDB4MGIsIDB4ZmQsIDB4NjYsIDB4OWEsIDB4Y2UsIDB4NzksCi0gIDB4MjksIDB4ZjIsIDB4NmIsIDB4YWUsIDB4Y2QsIDB4MTgsIDB4MzUsIDB4YjcsIDB4ZGMsIDB4ZmYsIDB4YWEsIDB4OGUsCi0gIDB4NjEsIDB4MjAsIDB4MTcsIDB4MWMsIDB4YmUsIDB4NDAsIDB4MDYsIDB4ODIsIDB4NDgsIDB4YmMsIDB4ZTEsIDB4YjMsCi0gIDB4ZDMsIDB4NDIsIDB4MDMsIDB4YWIsIDB4N2QsIDB4MjYsIDB4YmQsIDB4N2UsIDB4ZTMsIDB4NjksIDB4ZTcsIDB4ZGIsCi0gIDB4NTYsIDB4NzQsIDB4MDAsIDB4MDQsIDB4YzUsIDB4YjEsIDB4ODgsIDB4NjMsIDB4NDEsIDB4ODgsIDB4ODAsIDB4NjIsCi0gIDB4MTAsIDB4NDAsIDB4OTgsIDB4MjMsIDB4NzMsIDB4NTIsIDB4OTgsIDB4ODEsIDB4NmYsIDB4MmIsIDB4ZjYsIDB4NTgsCi0gIDB4MDUsIDB4OGQsIDB4ODMsIDB4NGEsIDB4ZjYsIDB4ZWQsIDB4ODUsIDB4MTksIDB4ZDMsIDB4NGUsIDB4YTgsIDB4ZGIsCi0gIDB4ZDIsIDB4ZmUsIDB4OTcsIDB4Y2UsIDB4OGMsIDB4MTEsIDB4YTMsIDB4ZTEsIDB4MGUsIDB4MTEsIDB4MjAsIDB4MjgsCi0gIDB4YjksIDB4ZTMsIDB4ZjksIDB4MWQsIDB4MjIsIDB4MmQsIDB4YzAsIDB4MGMsIDB4YTEsIDB4NzYsIDB4ZmMsIDB4NDIsCi0gIDB4NTgsIDB4NzIsIDB4ODYsIDB4ZDIsIDB4MjIsIDB4ZjAsIDB4YzQsIDB4N2YsIDB4NmYsIDB4ZGEsIDB4MDIsIDB4NWMsCi0gIDB4ZmUsIDB4NjYsIDB4MzMsIDB4NzAsIDB4ODksIDB4ZDcsIDB4ODgsIDB4MTksIDB4Y2IsIDB4MmMsIDB4OTUsIDB4NDQsCi0gIDB4ZjIsIDB4MDEsIDB4NGMsIDB4YmUsIDB4ZTUsIDB4YzUsIDB4NDUsIDB4MzYsIDB4YWMsIDB4MjgsIDB4NWYsIDB4ZWYsCi0gIDB4ODMsIDB4MmYsIDB4Y2YsIDB4YWYsIDB4ZWYsIDB4N2YsIDB4MTUsIDB4ZTUsIDB4NzAsIDB4ZTAsIDB4MjEsIDB4MWEsCi0gIDB4OTQsIDB4YjUsIDB4YWEsIDB4OTUsIDB4MDUsIDB4NDEsIDB4OGIsIDB4ODAsIDB4NTIsIDB4ZjAsIDB4YzUsIDB4NTQsCi0gIDB4NzksIDB4NGUsIDB4MzIsIDB4NWQsIDB4OWEsIDB4MTgsIDB4NjgsIDB4YTEsIDB4YWMsIDB4OWQsIDB4YTAsIDB4MTIsCi0gIDB4MGEsIDB4MDUsIDB4NjksIDB4ZTAsIDB4YWUsIDB4YTcsIDB4NTQsIDB4MjYsIDB4OTcsIDB4Y2QsIDB4ZmEsIDB4ZWQsCi0gIDB4OGQsIDB4NjksIDB4OWMsIDB4OTEsIDB4YzksIDB4MWEsIDB4NmQsIDB4Y2YsIDB4NjgsIDB4YTIsIDB4OGYsIDB4OTUsCi0gIDB4MGIsIDB4ZmIsIDB4ZWUsIDB4NGIsIDB4YjYsIDB4ZmMsIDB4OGIsIDB4NWIsIDB4YWIsIDB4NWUsIDB4OWMsIDB4NWQsCi0gIDB4YTUsIDB4M2MsIDB4M2EsIDB4YWIsIDB4NGUsIDB4NWUsIDB4YjcsIDB4OWUsIDB4ZDMsIDB4YjAsIDB4M2MsIDB4MWEsCi0gIDB4ZmMsIDB4NTAsIDB4ZWUsIDB4NTgsIDB4ZWYsIDB4MDksIDB4MjQsIDB4MGUsIDB4YTcsIDB4M2YsIDB4MmEsIDB4ZTMsCi0gIDB4YmQsIDB4NjksIDB4MTksIDB4YTUsIDB4YzEsIDB4MzYsIDB4NjUsIDB4YWQsIDB4MmUsIDB4Y2QsIDB4ZjAsIDB4YmEsCi0gIDB4OTMsIDB4ZWQsIDB4Y2YsIDB4MzksIDB4YzMsIDB4YjksIDB4NzIsIDB4ZTUsIDB4ZmYsIDB4NzUsIDB4ODEsIDB4ZDAsCi0gIDB4MzYsIDB4NmIsIDB4ZmMsIDB4OGYsIDB4MTYsIDB4NDYsIDB4YTUsIDB4YTgsIDB4ZDYsIDB4ZmEsIDB4N2MsIDB4YzUsCi0gIDB4MzAsIDB4NWEsIDB4Y2MsIDB4OTMsIDB4NGMsIDB4YTYsIDB4OTgsIDB4ODEsIDB4YjQsIDB4OTAsIDB4YzMsIDB4YzMsCi0gIDB4NGUsIDB4NTksIDB4NmQsIDB4YmUsIDB4YjMsIDB4YTYsIDB4ZjMsIDB4MTQsIDB4MjgsIDB4NGMsIDB4NDAsIDB4Y2UsCi0gIDB4ZDcsIDB4ZmYsIDB4YjcsIDB4M2YsIDB4NzAsIDB4YzUsIDB4YjYsIDB4NjUsIDB4NWUsIDB4YmQsIDB4OWEsIDB4NDAsCi0gIDB4YzUsIDB4YTEsIDB4ZWIsIDB4ODIsIDB4NGIsIDB4NjMsIDB4NzUsIDB4MDEsIDB4ZTAsIDB4OWEsIDB4ZDQsIDB4YTgsCi0gIDB4YWMsIDB4NDUsIDB4YWQsIDB4ZDksIDB4OTYsIDB4YTgsIDB4ZWMsIDB4ZDUsIDB4NGIsIDB4YTcsIDB4M2YsIDB4NTAsCi0gIDB4YTAsIDB4YTQsIDB4Y2IsIDB4ZDIsIDB4NjAsIDB4OTAsIDB4N2YsIDB4ZmIsIDB4NGYsIDB4OTAsIDB4ZDksIDB4NzAsCi0gIDB4NmIsIDB4ZDYsIDB4NTksIDB4NTMsIDB4ZGMsIDB4NmIsIDB4MGMsIDB4NGEsIDB4NDYsIDB4OGMsIDB4MjIsIDB4MzcsCi0gIDB4ODgsIDB4NGEsIDB4ZDksIDB4ZTgsIDB4ZTgsIDB4ODEsIDB4MTAsIDB4MTQsIDB4NDgsIDB4MDIsIDB4MTMsIDB4ODAsCi0gIDB4MTEsIDB4ZTEsIDB4ODAsIDB4ZjYsIDB4MzUsIDB4ZjgsIDB4YjMsIDB4MTcsIDB4NDEsIDB4YWMsIDB4OWQsIDB4YTAsCi0gIDB4MTIsIDB4MGEsIDB4MDUsIDB4NjgsIDB4ZmMsIDB4YmMsIDB4NGEsIDB4OGYsIDB4YmMsIDB4ZmUsIDB4ZjUsIDB4MWIsCi0gIDB4ZTIsIDB4N2EsIDB4M2YsIDB4Y2YsIDB4MTYsIDB4ZmIsIDB4MjMsIDB4YjMsIDB4NDksIDB4ODgsIDB4NzMsIDB4MjgsCi0gIDB4M2EsIDB4MzEsIDB4ZWYsIDB4MDksIDB4ODAsIDB4YmQsIDB4ZTMsIDB4YzIsIDB4YmIsIDB4YzQsIDB4ZDYsIDB4ZWUsCi0gIDB4M2IsIDB4ZWIsIDB4NGUsIDB4N2IsIDB4NmUsIDB4MTgsIDB4MzMsIDB4MjAsIDB4MTksIDB4MDQsIDB4YTUsIDB4ZGUsCi0gIDB4NjksIDB4OTAsIDB4ZDAsIDB4MzgsIDB4M2MsIDB4NGQsIDB4NTUsIDB4NGUsIDB4M2EsIDB4NjQsIDB4Y2YsIDB4YWUsCi0gIDB4ZDcsIDB4ZGEsIDB4MjAsIDB4NTEsIDB4ZGIsIDB4ZjYsIDB4MzgsIDB4NGYsIDB4ZTcsIDB4MGIsIDB4ZjIsIDB4MDksCi0gIDB4NWMsIDB4MGYsIDB4MDgsIDB4MDAsIDB4OGQsIDB4ZDQsIDB4OWQsIDB4YWUsIDB4NTYsIDB4ZTksIDB4MmIsIDB4MjAsCi0gIDB4MDYsIDB4NDYsIDB4MDAsIDB4MzEsIDB4YzAsIDB4MzQsIDB4MzIsIDB4YTUsIDB4NjEsIDB4N2EsIDB4NDUsIDB4OTMsCi0gIDB4MTAsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OTQsIDB4YzUsIDB4YmEsIDB4OTYsIDB4ODMsIDB4MTMsIDB4OTAsCi0gIDB4ODQsIDB4YTIsIDB4MjMsIDB4NzcsIDB4NmIsIDB4MzYsIDB4YzksIDB4MWUsIDB4NjUsIDB4YWEsIDB4ZWMsIDB4ODEsCi0gIDB4OWMsIDB4MDYsIDB4MDQsIDB4OWEsIDB4MDIsIDB4NDMsIDB4M2YsIDB4ZjAsIDB4N2QsIDB4MDcsIDB4ZmYsIDB4MmIsCi0gIDB4YTUsIDB4M2UsIDB4YjcsIDB4NmMsIDB4N2QsIDB4YmYsIDB4YjUsIDB4MmQsIDB4MjQsIDB4NWQsIDB4YzEsIDB4YmUsCi0gIDB4MmIsIDB4NTAsIDB4NjcsIDB4ZDQsIDB4ZmIsIDB4MjYsIDB4NDgsIDB4ZjMsIDB4YjUsIDB4YmUsIDB4ZWIsIDB4OTksCi0gIDB4ODEsIDB4YTUsIDB4ZTcsIDB4ZjEsIDB4Y2MsIDB4ZTEsIDB4ZmEsIDB4OTcsIDB4NGQsIDB4NTYsIDB4YzMsIDB4YzksCi0gIDB4N2UsIDB4ZWQsIDB4ZmYsIDB4OTQsIDB4NjEsIDB4MWUsIDB4NzEsIDB4ZmUsIDB4OGYsIDB4YjIsIDB4YjksIDB4MzQsCi0gIDB4ZGUsIDB4MjIsIDB4M2UsIDB4N2EsIDB4ZjcsIDB4NTMsIDB4ZWIsIDB4M2IsIDB4Y2YsIDB4YzIsIDB4ZmIsIDB4ZjcsCi0gIDB4NWEsIDB4ZjIsIDB4YWEsIDB4ODUsIDB4ZGQsIDB4NzksIDB4MzUsIDB4NWIsIDB4YWEsIDB4N2YsIDB4YmEsIDB4N2EsCi0gIDB4Y2QsIDB4NTYsIDB4MzcsIDB4N2QsIDB4NzcsIDB4NjUsIDB4YzYsIDB4ZTMsIDB4NmIsIDB4M2IsIDB4NmUsIDB4MjYsCi0gIDB4MzMsIDB4MjQsIDB4YTEsIDB4NGIsIDB4YjksIDB4ZGEsIDB4Y2QsIDB4YTYsIDB4MTQsIDB4NjIsIDB4OTcsIDB4MWUsCi0gIDB4ZTYsIDB4NWIsIDB4OTAsIDB4NTgsIDB4YjUsIDB4NmIsIDB4MTIsIDB4NjYsIDB4ZDgsIDB4YWMsIDB4NTQsIDB4NzAsCi0gIDB4NjYsIDB4NWEsIDB4ZDksIDB4NDksIDB4NmEsIDB4ZDUsIDB4NDksIDB4OTAsIDB4ODYsIDB4NjQsIDB4YTgsIDB4YWQsCi0gIDB4MTcsIDB4YzAsIDB4ODIsIDB4OTMsIDB4N2MsIDB4YWQsIDB4ODksIDB4YTgsIDB4NDEsIDB4NjgsIDB4NmIsIDB4YTMsCi0gIDB4YjcsIDB4YzEsIDB4NGQsIDB4MjYsIDB4NmIsIDB4MmYsIDB4YmQsIDB4NTQsIDB4ZGIsIDB4NzcsIDB4NDgsIDB4OWMsCi0gIDB4ZTYsIDB4NDIsIDB4NWYsIDB4YTksIDB4YjIsIDB4OWEsIDB4ZTIsIDB4MjUsIDB4NTgsIDB4NDYsIDB4YWIsIDB4OTQsCi0gIDB4NDUsIDB4N2QsIDB4NTEsIDB4YjQsIDB4MTQsIDB4NDgsIDB4ODksIDB4ZDYsIDB4NjUsIDB4MzQsIDB4ZTEsIDB4OWQsCi0gIDB4YTUsIDB4MjUsIDB4Y2EsIDB4MjgsIDB4OTksIDB4NTUsIDB4OWUsIDB4YTUsIDB4OGIsIDB4OTgsIDB4YTQsIDB4OWQsCi0gIDB4OGIsIDB4ZDEsIDB4OGEsIDB4MzMsIDB4OWEsIDB4MTEsIDB4NDEsIDB4NzIsIDB4ZDEsIDB4MDQsIDB4ZDUsIDB4YmMsCi0gIDB4ZDIsIDB4NDQsIDB4MTcsIDB4MDQsIDB4NmEsIDB4YWEsIDB4ZWQsIDB4NGEsIDB4NTQsIDB4NWIsIDB4ODEsIDB4YWUsCi0gIDB4MGUsIDB4MDAsIDB4MDEsIDB4NmMsIDB4YWQsIDB4NTgsIDB4MGUsIDB4NzgsIDB4MDAsIDB4YTMsIDB4OWMsIDB4MmEsCi0gIDB4MjIsIDB4YmYsIDB4NGUsIDB4YjgsIDB4ZGEsIDB4OTQsIDB4MmQsIDB4YmEsIDB4NGUsIDB4MjIsIDB4ZDMsIDB4ODcsCi0gIDB4ZmMsIDB4NmUsIDB4NTMsIDB4OTEsIDB4ZTEsIDB4NTQsIDB4N2MsIDB4NGUsIDB4ZTYsIDB4Y2MsIDB4ZGMsIDB4NDYsCi0gIDB4MzgsIDB4ZmUsIDB4MDQsIDB4YjAsIDB4MTYsIDB4Y2IsIDB4ZmUsIDB4NDUsIDB4MWQsIDB4Y2EsIDB4ZWMsIDB4OWIsCi0gIDB4ZWEsIDB4ZmYsIDB4MzgsIDB4ZTYsIDB4YzksIDB4ODEsIDB4YTksIDB4NTEsIDB4MjIsIDB4YTEsIDB4ZmQsIDB4OWYsCi0gIDB4YWIsIDB4ZTMsIDB4ZTYsIDB4ZDQsIDB4NzMsIDB4NzcsIDB4OWIsIDB4YmUsIDB4N2YsIDB4MGQsIDB4ZWQsIDB4YmYsCi0gIDB4OGYsIDB4NGQsIDB4YTgsIDB4MDAsIDB4ZjcsIDB4ODcsIDB4ZTMsIDB4ZTMsIDB4Y2YsIDB4NDAsIDB4NTgsIDB4MDAsCi0gIDB4MzEsIDB4MzksIDB4Y2IsIDB4MjYsIDB4NjcsIDB4N2QsIDB4Y2IsIDB4MjYsIDB4NjgsIDB4N2QsIDB4MTEsIDB4MWQsCi0gIDB4ZDQsIDB4NTUsIDB4NTIsIDB4YmIsIDB4MWUsIDB4MTcsIDB4ZDYsIDB4MDksIDB4ZGEsIDB4MWYsIDB4OGMsIDB4OTAsCi0gIDB4YjcsIDB4ZDcsIDB4YTcsIDB4NmEsIDB4ZDksIDB4NzEsIDB4OTEsIDB4NWUsIDB4OWUsIDB4MmIsIDB4ZjEsIDB4OWMsCi0gIDB4YTEsIDB4NGMsIDB4NzksIDB4NDAsIDB4M2MsIDB4NWEsIDB4OGIsIDB4NTQsIDB4YjEsIDB4NDAsIDB4MDAsIDB4ZWQsCi0gIDB4OWIsIDB4MmEsIDB4ODEsIDB4OWUsIDB4OWEsIDB4ZDMsIDB4NGEsIDB4MGMsIDB4ZjAsIDB4MGUsIDB4MjEsIDB4MWEsCi0gIDB4OGUsIDB4Y2EsIDB4MWYsIDB4ZmYsIDB4NmYsIDB4ZmYsIDB4MzUsIDB4NjUsIDB4YTgsIDB4NDEsIDB4OTAsIDB4YTQsCi0gIDB4NzEsIDB4MTgsIDB4MGEsIDB4NTUsIDB4MzMsIDB4NDIsIDB4YTUsIDB4ZGUsIDB4YWMsIDB4ZDcsIDB4MTUsIDB4YWEsCi0gIDB4YjAsIDB4MDAsIDB4ZDYsIDB4NDgsIDB4ODYsIDB4N2EsIDB4MDUsIDB4N2IsIDB4MjAsIDB4YmIsIDB4OGQsIDB4Y2EsCi0gIDB4ZTUsIDB4OGQsIDB4NmIsIDB4MTIsIDB4OTAsIDB4MDgsIDB4MDksIDB4OTQsIDB4YjgsIDB4ZjQsIDB4M2UsIDB4NzEsCi0gIDB4NmUsIDB4MjMsIDB4ZDUsIDB4MzksIDB4OGIsIDB4NzksIDB4NzYsIDB4Y2MsIDB4NjQsIDB4MWUsIDB4NmIsIDB4YWEsCi0gIDB4ZjQsIDB4YWEsIDB4ZTYsIDB4MjAsIDB4YTYsIDB4OGYsIDB4OTUsIDB4NjUsIDB4MGUsIDB4Y2QsIDB4MWMsIDB4NjgsCi0gIDB4MDksIDB4YWIsIDB4MjcsIDB4MmEsIDB4OWIsIDB4NWUsIDB4NjksIDB4YjgsIDB4ZTYsIDB4NWMsIDB4YjcsIDB4MmUsCi0gIDB4ODAsIDB4ODcsIDB4NGYsIDB4ZTMsIDB4NWMsIDB4NzEsIDB4ZGEsIDB4YTQsIDB4YTgsIDB4Y2IsIDB4YzMsIDB4ZDYsCi0gIDB4NzEsIDB4NWIsIDB4YzgsIDB4NjUsIDB4MmEsIDB4ODAsIDB4MmQsIDB4YmIsIDB4ZGQsIDB4NWQsIDB4NDQsIDB4NTIsCi0gIDB4MTksIDB4OWMsIDB4ZTMsIDB4NzYsIDB4NGQsIDB4NWQsIDB4NzEsIDB4MDQsIDB4MjAsIDB4NWEsIDB4ZDMsIDB4MmQsCi0gIDB4MDgsIDB4NDQsIDB4OGEsIDB4NDgsIDB4YjUsIDB4MjYsIDB4MzcsIDB4MTEsIDB4NmMsIDB4MmEsIDB4MWMsIDB4MTYsCi0gIDB4MzUsIDB4NTEsIDB4NzMsIDB4ODIsIDB4OTAsIDB4NDQsIDB4NjMsIDB4ODQsIDB4NDAsIDB4NmQsIDB4ODgsIDB4NTIsCi0gIDB4MjAsIDB4YjYsIDB4MTMsIDB4ODIsIDB4NGMsIDB4MGIsIDB4ODIsIDB4MTUsIDB4MjgsIDB4MjUsIDB4M2QsIDB4M2EsCi0gIDB4YTUsIDB4YWIsIDB4Y2QsIDB4NjgsIDB4NmUsIDB4YTYsIDB4ZWYsIDB4NTUsIDB4YjMsIDB4MzYsIDB4NzgsIDB4MzAsCi0gIDB4MmEsIDB4YmMsIDB4NzUsIDB4ZjYsIDB4OTEsIDB4MjcsIDB4M2QsIDB4NmMsIDB4ZDUsIDB4Y2IsIDB4MmMsIDB4NTUsCi0gIDB4NmEsIDB4ZGQsIDB4ZDYsIDB4NGQsIDB4ZGYsIDB4MTQsIDB4ZjIsIDB4MzcsIDB4OTUsIDB4NGYsIDB4NmYsIDB4MWMsCi0gIDB4ZmMsIDB4OGUsIDB4NDgsIDB4ODQsIDB4ZmIsIDB4MzgsIDB4ZDcsIDB4OWYsIDB4Y2UsIDB4MWMsIDB4NDAsIDB4NWYsCi0gIDB4ZWIsIDB4YWIsIDB4ZTQsIDB4ZTQsIDB4ZmYsIDB4Y2UsIDB4ZWUsIDB4ZTYsIDB4ZTYsIDB4ZDMsIDB4ZmMsIDB4OWMsCi0gIDB4ZTcsIDB4NWEsIDB4ZTgsIDB4NmMsIDB4ODcsIDB4MjEsIDB4YjMsIDB4NTksIDB4YzEsIDB4OGEsIDB4ZDUsIDB4OTIsCi0gIDB4MTYsIDB4NDgsIDB4NTksIDB4Y2MsIDB4ZjUsIDB4ZDUsIDB4OTcsIDB4NzUsIDB4MGYsIDB4ZmYsIDB4NzQsIDB4MzksCi0gIDB4NzAsIDB4MTEsIDB4ZmEsIDB4ODQsIDB4YzUsIDB4YWUsIDB4OGEsIDB4YzUsIDB4MjIsIDB4MDAsIDB4ODUsIDB4ZTMsCi0gIDB4NzQsIDB4NTYsIDB4YzIsIDB4ZDksIDB4NDksIDB4YWQsIDB4MzQsIDB4NzEsIDB4YWQsIDB4NTIsIDB4ZTIsIDB4MjIsCi0gIDB4MGIsIDB4NjUsIDB4MmYsIDB4N2YsIDB4ODIsIDB4MDcsIDB4NDYsIDB4NzEsIDB4NTUsIDB4MzgsIDB4MGUsIDB4Y2QsCi0gIDB4ZWIsIDB4MDgsIDB4M2YsIDB4M2EsIDB4NDYsIDB4MzgsIDB4MTgsIDB4MjYsIDB4NDQsIDB4N2QsIDB4NzMsIDB4ZmEsCi0gIDB4MWMsIDB4M2QsIDB4MjMsIDB4MDUsIDB4ODEsIDB4YzgsIDB4NTQsIDB4OWUsIDB4ZjMsIDB4OGUsIDB4MGUsIDB4MGUsCi0gIDB4YTMsIDB4MjAsIDB4YTAsIDB4ZmYsIDB4NDMsIDB4ODYsIDB4ZjgsIDB4OGQsIDB4Y2YsIDB4NjAsIDB4ODMsIDB4YjMsCi0gIDB4NjIsIDB4NTUsIDB4ODksIDB4ZjUsIDB4ZTMsIDB4MWUsIDB4MmYsIDB4ZTAsIDB4MTIsIDB4OTUsIDB4MjksIDB4N2MsCi0gIDB4NTEsIDB4NzIsIDB4MGMsIDB4ZTgsIDB4NDQsIDB4NTMsIDB4OWYsIDB4N2IsIDB4NTQsIDB4ODEsIDB4N2UsIDB4N2QsCi0gIDB4MDgsIDB4YTcsIDB4YmYsIDB4NzUsIDB4MzcsIDB4MzQsIDB4YmIsIDB4NjMsIDB4YWYsIDB4NmYsIDB4NTEsIDB4NmMsCi0gIDB4M2MsIDB4NWQsIDB4YzEsIDB4ZmUsIDB4MmEsIDB4MjUsIDB4MmEsIDB4N2YsIDB4NmMsIDB4M2QsIDB4NWQsIDB4YTMsCi0gIDB4MWIsIDB4MTAsIDB4NGMsIDB4YTUsIDB4YTgsIDB4YmQsIDB4Y2YsIDB4NGUsIDB4N2YsIDB4YzMsIDB4M2QsIDB4YWYsCi0gIDB4MmYsIDB4ZmEsIDB4MDUsIDB4MTEsIDB4MDAsIDB4Y2QsIDB4NGMsIDB4YzAsIDB4OTAsIDB4YTEsIDB4NzksIDB4YTcsCi0gIDB4MTEsIDB4NDEsIDB4NjksIDB4YTcsIDB4NmUsIDB4YmEsIDB4MTMsIDB4MDAsIDB4MGIsIDB4NmMsIDB4NTAsIDB4NGEsCi0gIDB4ZDUsIDB4MWIsIDB4NjAsIDB4MmMsIDB4MWMsIDB4MjEsIDB4MWEsIDB4OGQsIDB4MDgsIDB4NWYsIDB4MzQsIDB4MDcsCi0gIDB4ZmQsIDB4MzcsIDB4NTQsIDB4NjEsIDB4MGMsIDB4NDAsIDB4NmMsIDB4YWUsIDB4MGEsIDB4ODUsIDB4NTcsIDB4MzQsCi0gIDB4MWEsIDB4NWMsIDB4YjEsIDB4ZTYsIDB4ZGEsIDB4NWUsIDB4MTEsIDB4NWEsIDB4NWIsIDB4MmEsIDB4NDIsIDB4ZTAsCi0gIDB4NzAsIDB4N2YsIDB4N2IsIDB4NGUsIDB4YjMsIDB4ODcsIDB4YmQsIDB4N2UsIDB4ZWUsIDB4YzEsIDB4OTYsIDB4NjIsCi0gIDB4N2YsIDB4NTUsIDB4NTgsIDB4NWQsIDB4NmQsIDB4ZWMsIDB4MGYsIDB4M2UsIDB4ZDksIDB4MWYsIDB4MGUsIDB4NmIsCi0gIDB4MGYsIDB4MTgsIDB4ZTUsIDB4YWQsIDB4YWUsIDB4MzYsIDB4M2EsIDB4YjgsIDB4YmMsIDB4ZjUsIDB4Y2IsIDB4NWIsCi0gIDB4YmMsIDB4MWIsIDB4ODksIDB4MjksIDB4YTMsIDB4ZjgsIDB4YzUsIDB4MTgsIDB4NmIsIDB4ZDQsIDB4OWQsIDB4OTMsCi0gIDB4NWUsIDB4ZGEsIDB4YTIsIDB4YWUsIDB4ZTYsIDB4NWQsIDB4ZjMsIDB4NzYsIDB4NDYsIDB4YjYsIDB4MWIsIDB4MjcsCi0gIDB4MmIsIDB4NzUsIDB4N2EsIDB4MDQsIDB4YTMsIDB4MjMsIDB4MTQsIDB4YTQsIDB4YTMsIDB4NzgsIDB4YjcsIDB4MjMsCi0gIDB4ZjksIDB4ZDMsIDB4YjMsIDB4M2MsIDB4YWIsIDB4NjAsIDB4ODcsIDB4OWYsIDB4ZmQsIDB4NWEsIDB4MjYsIDB4YWUsCi0gIDB4YjMsIDB4NmYsIDB4YjksIDB4MTAsIDB4YjgsIDB4MDksIDB4YTgsIDB4NTQsIDB4MTMsIDB4YzUsIDB4NWEsIDB4NjIsCi0gIDB4YjQsIDB4NTcsIDB4MDIsIDB4NmMsIDB4MzIsIDB4MGIsIDB4NTIsIDB4MzIsIDB4OGMsIDB4MzQsIDB4MjksIDB4NjgsCi0gIDB4MzAsIDB4NWYsIDB4N2YsIDB4NTIsIDB4ZDIsIDB4OWQsIDB4ZTMsIDB4NjQsIDB4OWIsIDB4NjUsIDB4ODUsIDB4NzQsCi0gIDB4MTYsIDB4NDIsIDB4ZTEsIDB4NzAsIDB4MDksIDB4MjcsIDB4MzgsIDB4NmQsIDB4OWQsIDB4YjYsIDB4NDIsIDB4ODYsCi0gIDB4ODYsIDB4ZWIsIDB4MzEsIDB4YzYsIDB4NzIsIDB4ZDQsIDB4NjgsIDB4MGYsIDB4MjUsIDB4ODYsIDB4OWEsIDB4YjksCi0gIDB4NjgsIDB4YjAsIDB4MTYsIDB4NDQsIDB4NDYsIDB4ZTYsIDB4NjMsIDB4NzMsIDB4NGYsIDB4MWMsIDB4MTUsIDB4ZDksCi0gIDB4OGIsIDB4YjYsIDB4ZmYsIDB4MDcsIDB4Y2UsIDB4YWQsIDB4MGUsIDB4MzYsIDB4YzQsIDB4YzMsIDB4NGYsIDB4YTUsCi0gIDB4NWIsIDB4YmUsIDB4OGUsIDB4MzYsIDB4ZTgsIDB4NDAsIDB4ZTIsIDB4MWUsIDB4ZjEsIDB4MzksIDB4ZjIsIDB4MTQsCi0gIDB4MjAsIDB4ZjgsIDB4Y2YsIDB4ODYsIDB4ODEsIDB4NTMsIDB4Y2MsIDB4ODAsIDB4MGEsIDB4M2EsIDB4Y2EsIDB4NzEsCi0gIDB4MDYsIDB4MDksIDB4YTEsIDB4MDksIDB4MTUsIDB4MmEsIDB4OWYsIDB4NDAsIDB4OTIsIDB4MDEsIDB4YWEsIDB4MjYsCi0gIDB4YWIsIDB4OWQsIDB4MjUsIDB4ZTgsIDB4YmQsIDB4ODUsIDB4ZGMsIDB4NGYsIDB4ZjMsIDB4OGUsIDB4NDEsIDB4ZWYsCi0gIDB4MjMsIDB4MDIsIDB4OTYsIDB4YmEsIDB4Y2MsIDB4YTQsIDB4OWYsIDB4OWYsIDB4M2EsIDB4ZmIsIDB4NTgsIDB4ZGMsCi0gIDB4M2QsIDB4NTgsIDB4ZmYsIDB4Y2MsIDB4M2UsIDB4NWMsIDB4NjAsIDB4NGUsIDB4YzIsIDB4ZmYsIDB4ODQsIDB4ZTUsCi0gIDB4NWUsIDB4YTQsIDB4OGQsIDB4M2YsIDB4YmIsIDB4NjYsIDB4NmIsIDB4YzAsIDB4MjAsIDB4ZGEsIDB4NWUsIDB4NGMsCi0gIDB4ZDMsIDB4Y2YsIDB4YjIsIDB4NzQsIDB4MTMsIDB4MDQsIDB4YTcsIDB4MzEsIDB4YzksIDB4N2MsIDB4MzAsIDB4ZDMsCi0gIDB4MGEsIDB4MTQsIDB4YTUsIDB4YjEsIDB4OTIsIDB4M2MsIDB4MjUsIDB4MmUsIDB4OTgsIDB4NmQsIDB4MTQsIDB4NWUsCi0gIDB4M2MsIDB4M2UsIDB4NDAsIDB4MTYsIDB4MDIsIDB4NjAsIDB4MWMsIDB4MjEsIDB4MWEsIDB4OGYsIDB4ODAsIDB4MWUsCi0gIDB4MGMsIDB4MDAsIDB4NWYsIDB4M2YsIDB4NjcsIDB4YTcsIDB4YjAsIDB4YzYsIDB4MjQsIDB4OWMsIDB4MzEsIDB4MmEsCi0gIDB4YTgsIDB4NTIsIDB4NGUsIDB4OTIsIDB4ZDEsIDB4YWIsIDB4MzQsIDB4MTIsIDB4ODUsIDB4OTYsIDB4YzksIDB4OTIsCi0gIDB4YjAsIDB4M2MsIDB4ZTMsIDB4OWUsIDB4MzUsIDB4ZmUsIDB4OTQsIDB4ZjksIDB4ZWUsIDB4NmUsIDB4ODEsIDB4M2EsCi0gIDB4YmIsIDB4YmIsIDB4OTksIDB4MzEsIDB4M2MsIDB4M2IsIDB4OGMsIDB4MWEsIDB4ZjIsIDB4ZDEsIDB4YjMsIDB4ODksCi0gIDB4NTUsIDB4Y2EsIDB4OGQsIDB4ODIsIDB4N2QsIDB4YzIsIDB4MzIsIDB4ZTMsIDB4YWIsIDB4OGMsIDB4ZDcsIDB4NGEsCi0gIDB4YjcsIDB4NjQsIDB4NjAsIDB4YWUsIDB4ODksIDB4N2UsIDB4YWQsIDB4YjgsIDB4ZTQsIDB4MTUsIDB4ZWUsIDB4ZDcsCi0gIDB4OWUsIDB4M2YsIDB4MzksIDB4YzAsIDB4NDEsIDB4NjMsIDB4YjUsIDB4YjksIDB4MjksIDB4NzIsIDB4YjQsIDB4ZGIsCi0gIDB4MGEsIDB4ZmIsIDB4ZDQsIDB4ZTgsIDB4ZTQsIDB4YzgsIDB4NTUsIDB4YjcsIDB4ZGMsIDB4MTYsIDB4NjcsIDB4MDksCi0gIDB4MWQsIDB4M2IsIDB4N2MsIDB4NDMsIDB4NWIsIDB4MzAsIDB4NjIsIDB4NDcsIDB4MTksIDB4NDksIDB4MTEsIDB4ODcsCi0gIDB4MjQsIDB4OGQsIDB4NjgsIDB4ODMsIDB4YjQsIDB4NDgsIDB4OTIsIDB4MDUsIDB4ZDUsIDB4NzEsIDB4ZWUsIDB4YjEsCi0gIDB4YWIsIDB4YzcsIDB4Y2YsIDB4YjYsIDB4NzEsIDB4YTIsIDB4YmIsIDB4ZTIsIDB4NDUsIDB4YTYsIDB4MTIsIDB4NmMsCi0gIDB4MDksIDB4ZTQsIDB4OGEsIDB4ODksIDB4YTUsIDB4OGIsIDB4NzUsIDB4NDksIDB4MjgsIDB4OGMsIDB4NDAsIDB4NjAsCi0gIDB4OWEsIDB4MmIsIDB4NjgsIDB4MTYsIDB4NTAsIDB4ZDEsIDB4NGYsIDB4NDUsIDB4ZTEsIDB4MDEsIDB4MTgsIDB4OWIsCi0gIDB4ZTEsIDB4OGUsIDB4NTAsIDB4ZjUsIDB4MjgsIDB4ZTUsIDB4NDYsIDB4MWEsIDB4MTcsIDB4YmIsIDB4ZjEsIDB4YjIsCi0gIDB4ZjMsIDB4OGQsIDB4YTgsIDB4NGMsIDB4NGEsIDB4YzUsIDB4YTEsIDB4NDAsIDB4NTEsIDB4NzIsIDB4MWIsIDB4ZWIsCi0gIDB4NmEsIDB4ZjQsIDB4ODMsIDB4YzcsIDB4MDQsIDB4ODEsIDB4M2YsIDB4NmQsIDB4YTQsIDB4YjAsIDB4OTAsIDB4YzIsCi0gIDB4YzUsIDB4MjAsIDB4MDIsIDB4NTgsIDB4ZTQsIDB4YmQsIDB4N2QsIDB4NmYsIDB4NjUsIDB4OTIsIDB4ZTEsIDB4ZTcsCi0gIDB4N2MsIDB4MmUsIDB4ODIsIDB4NzQsIDB4NGQsIDB4ZjUsIDB4Y2IsIDB4OWUsIDB4NjIsIDB4ZDMsIDB4ODksIDB4ZTcsCi0gIDB4MDYsIDB4NTQsIDB4MmMsIDB4OGMsIDB4MDgsIDB4NWMsIDB4ODksIDB4OTksIDB4MzAsIDB4YTcsIDB4ZmYsIDB4MzMsCi0gIDB4ZjMsIDB4ZTYsIDB4ODEsIDB4NzQsIDB4OTcsIDB4OTksIDB4YWIsIDB4NzAsIDB4NjMsIDB4ZDAsIDB4NzMsIDB4MWYsCi0gIDB4ZWMsIDB4OTAsIDB4MTIsIDB4OWMsIDB4ZGYsIDB4OGEsIDB4ZjQsIDB4OWEsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTksCi0gIDB4MjUsIDB4Y2MsIDB4ZWEsIDB4NzcsIDB4YjYsIDB4MTQsIDB4MTMsIDB4ZWMsIDB4NzIsIDB4YzQsIDB4NjAsIDB4ODksCi0gIDB4MzAsIDB4NDIsIDB4ZTcsIDB4ODIsIDB4NTYsIDB4MzAsIDB4MTksIDB4ODMsIDB4MTUsIDB4ZjYsIDB4ZGUsIDB4NTUsCi0gIDB4MjAsIDB4ZjUsIDB4N2IsIDB4YzAsIDB4YTIsIDB4ZWUsIDB4MWUsIDB4MjksIDB4ZGIsIDB4ZTcsIDB4ODcsIDB4OTAsCi0gIDB4N2MsIDB4ZDgsIDB4YWIsIDB4ZWMsIDB4OTksIDB4NzQsIDB4MDQsIDB4YmUsIDB4MmMsIDB4MDgsIDB4OTUsIDB4MTAsCi0gIDB4MDAsIDB4OTgsIDB4ZTksIDB4MTgsIDB4MWMsIDB4NjMsIDB4MmUsIDB4MDYsIDB4MTcsIDB4NDMsIDB4YmUsIDB4YWQsCi0gIDB4MWUsIDB4N2IsIDB4YWYsIDB4NTAsIDB4YTAsIDB4YzAsIDB4YWUsIDB4OTYsIDB4YmQsIDB4NDgsIDB4MzIsIDB4YjMsCi0gIDB4YzEsIDB4NWMsIDB4YjksIDB4MjIsIDB4MzgsIDB4YTAsIDB4YWMsIDB4MTEsIDB4NTMsIDB4YTEsIDB4ZTIsIDB4MDIsCi0gIDB4YzUsIDB4NmIsIDB4MzYsIDB4YWEsIDB4YWMsIDB4NjAsIDB4ZDIsIDB4NDUsIDB4MTksIDB4NTcsIDB4M2UsIDB4OTcsCi0gIDB4MzIsIDB4NDcsIDB4ZGEsIDB4M2UsIDB4NzQsIDB4MTEsIDB4N2MsIDB4MjgsIDB4YmUsIDB4YzUsIDB4MzgsIDB4ZTksCi0gIDB4ZDQsIDB4OWYsIDB4ZjksIDB4YjUsIDB4NTEsIDB4NWMsIDB4MWIsIDB4NmEsIDB4OWIsIDB4MDUsIDB4NjUsIDB4OTcsCi0gIDB4NTYsIDB4MWQsIDB4ZjEsIDB4ZjYsIDB4NTMsIDB4NTgsIDB4NzcsIDB4MmMsIDB4YTIsIDB4NTAsIDB4YTksIDB4ZjAsCi0gIDB4YTMsIDB4ODcsIDB4M2YsIDB4NWUsIDB4ZGMsIDB4NDksIDB4ODEsIDB4YzAsIDB4MjEsIDB4MmEsIDB4OGUsIDB4ODAsCi0gIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWYsIDB4M2IsIDB4NjYsIDB4YTcsIDB4MzAsIDB4OTAsIDB4NjMsIDB4MTUsIDB4YzEsCi0gIDB4MzIsIDB4MTgsIDB4MGUsIDB4MTEsIDB4YWQsIDB4MzQsIDB4YjIsIDB4NTAsIDB4YjgsIDB4NmMsIDB4MGUsIDB4NDcsCi0gIDB4OWIsIDB4ZmUsIDB4MzcsIDB4YzUsIDB4NmQsIDB4MDAsIDB4MTMsIDB4MTgsIDB4MzEsIDB4YzQsIDB4YjgsIDB4MmMsCi0gIDB4MjMsIDB4NWQsIDB4NmQsIDB4MDgsIDB4NmYsIDB4NjUsIDB4YzIsIDB4ZDEsIDB4ZjAsIDB4NzksIDB4MDgsIDB4ZmMsCi0gIDB4ZWQsIDB4YmMsIDB4N2MsIDB4NzUsIDB4ODIsIDB4ODksIDB4NGMsIDB4NmMsIDB4OGQsIDB4NzAsIDB4MDksIDB4ZTcsCi0gIDB4ZTQsIDB4OTEsIDB4NTgsIDB4OTcsIDB4OWIsIDB4NjMsIDB4NjksIDB4YmIsIDB4NTIsIDB4ZGEsIDB4MGUsIDB4YzgsCi0gIDB4ZmEsIDB4NWMsIDB4ZWUsIDB4MTksIDB4MmMsIDB4MGEsIDB4NzUsIDB4YzEsIDB4YzMsIDB4MDAsIDB4NDQsIDB4NjQsCi0gIDB4NmMsIDB4YTksIDB4NzgsIDB4NGEsIDB4MWIsIDB4ZTQsIDB4YzQsIDB4YWYsIDB4MjMsIDB4MGMsIDB4YjIsIDB4YmEsCi0gIDB4ODQsIDB4NDYsIDB4ZTMsIDB4MDgsIDB4OTcsIDB4ODYsIDB4NTUsIDB4MTAsIDB4NzYsIDB4YzQsIDB4YzYsIDB4YjEsCi0gIDB4NDQsIDB4MzEsIDB4YmUsIDB4OGIsIDB4NDQsIDB4YWIsIDB4ZDcsIDB4OGEsIDB4OTUsIDB4YjYsIDB4NDUsIDB4NDUsCi0gIDB4MjksIDB4MDgsIDB4NTYsIDB4ZWUsIDB4MDgsIDB4MDUsIDB4NmYsIDB4OTAsIDB4ODgsIDB4MDQsIDB4ZTIsIDB4MDMsCi0gIDB4M2MsIDB4M2QsIDB4ZGMsIDB4NDgsIDB4NDgsIDB4MTIsIDB4MGEsIDB4YjMsIDB4NmIsIDB4NDQsIDB4OTIsIDB4ZDQsCi0gIDB4OWMsIDB4Y2UsIDB4OTgsIDB4MjcsIDB4ZTUsIDB4YTMsIDB4OTAsIDB4MzEsIDB4ZGIsIDB4NzgsIDB4ZDIsIDB4MjAsCi0gIDB4NmIsIDB4ZjgsIDB4YjYsIDB4NWYsIDB4NWYsIDB4NmEsIDB4NjYsIDB4ZDAsIDB4YjUsIDB4MDAsIDB4MTMsIDB4OTcsCi0gIDB4MDgsIDB4MzMsIDB4MGQsIDB4MGEsIDB4MmMsIDB4MmEsIDB4OTgsIDB4NjUsIDB4MmQsIDB4MTMsIDB4NWIsIDB4NGMsCi0gIDB4ZDcsIDB4MDYsIDB4NmEsIDB4YWMsIDB4MWEsIDB4MjcsIDB4OTgsIDB4ZDAsIDB4YTMsIDB4ZDgsIDB4NWMsIDB4YjYsCi0gIDB4MGUsIDB4MWMsIDB4ZjQsIDB4YjcsIDB4MTcsIDB4ZmIsIDB4YTUsIDB4MTIsIDB4OGUsIDB4MDcsIDB4M2IsIDB4M2UsCi0gIDB4NTIsIDB4MDYsIDB4M2QsIDB4MmUsIDB4MDQsIDB4MWUsIDB4OWEsIDB4YmMsIDB4MjMsIDB4MWMsIDB4MjcsIDB4YWUsCi0gIDB4NzYsIDB4MmQsIDB4NjQsIDB4MGMsIDB4ZjksIDB4NzUsIDB4MGUsIDB4OTksIDB4YTcsIDB4YWUsIDB4OTEsIDB4NmQsCi0gIDB4YmMsIDB4NTYsIDB4ZmEsIDB4NTAsIDB4ZTMsIDB4NTksIDB4OGIsIDB4NDMsIDB4NDYsIDB4YjksIDB4N2IsIDB4NTksCi0gIDB4ZjUsIDB4MzUsIDB4MmYsIDB4YTgsIDB4M2IsIDB4YWQsIDB4MzcsIDB4NzQsIDB4M2EsIDB4MjUsIDB4MzQsIDB4ZjcsCi0gIDB4NWEsIDB4MTQsIDB4ZjYsIDB4YjIsIDB4ZWQsIDB4YjEsIDB4MmMsIDB4MWEsIDB4ZWUsIDB4MjksIDB4YzgsIDB4ZmMsCi0gIDB4OWEsIDB4NGQsIDB4NjUsIDB4ZDUsIDB4MjksIDB4NTcsIDB4MDAsIDB4NjcsIDB4ODcsIDB4MzIsIDB4NmYsIDB4ZjYsCi0gIDB4NGEsIDB4ZGEsIDB4ODIsIDB4NWMsIDB4NmMsIDB4ZTksIDB4MTMsIDB4ZTgsIDB4MmYsIDB4MWQsIDB4MjUsIDB4Y2EsCi0gIDB4OWEsIDB4YzksIDB4MGQsIDB4NTksIDB4ODUsIDB4ZTYsIDB4YTYsIDB4OTQsIDB4YjIsIDB4YTYsIDB4OTksIDB4OGEsCi0gIDB4MmMsIDB4YWIsIDB4NjgsIDB4YzMsIDB4YjUsIDB4M2MsIDB4NmIsIDB4YWIsIDB4Y2MsIDB4ZTksIDB4ZjQsIDB4MjksCi0gIDB4MjgsIDB4ZTAsIDB4Y2EsIDB4YWIsIDB4NWYsIDB4M2EsIDB4NmYsIDB4YTUsIDB4Y2UsIDB4ZDUsIDB4ZjksIDB4Y2EsCi0gIDB4M2MsIDB4YmMsIDB4OTksIDB4YjEsIDB4N2QsIDB4MzUsIDB4ZDYsIDB4MWIsIDB4MDgsIDB4M2MsIDB4ZDIsIDB4ODIsCi0gIDB4YzMsIDB4MjAsIDB4ZTYsIDB4MGIsIDB4MGEsIDB4ZGEsIDB4ZjAsIDB4ZGEsIDB4ZmEsIDB4YzYsIDB4YTQsIDB4MmMsCi0gIDB4MDMsIDB4NjgsIDB4MGEsIDB4MGIsIDB4MGIsIDB4MDEsIDB4NDksIDB4ZDIsIDB4NGIsIDB4YzEsIDB4YTIsIDB4NzEsCi0gIDB4NWEsIDB4ZDgsIDB4MDAsIDB4NzAsIDB4MjEsIDB4NGMsIDB4MzYsIDB4ODAsIDB4MGMsIDB4YTAsIDB4ZGYsIDB4YmYsCi0gIDB4ZmYsIDB4Y2EsIDB4ZDUsIDB4NDQsIDB4MzYsIDB4YTMsIDB4MzMsIDB4YjcsIDB4MjEsIDB4MjIsIDB4MTYsIDB4MDYsCi0gIDB4ZWMsIDB4MjQsIDB4MjIsIDB4YzAsIDB4ODcsIDB4OWQsIDB4N2MsIDB4MTgsIDB4N2YsIDB4NzUsIDB4NGIsIDB4ZTgsCi0gIDB4ZmEsIDB4YzcsIDB4NWYsIDB4ZGQsIDB4MmEsIDB4NjksIDB4YTEsIDB4ZTAsIDB4MmUsIDB4YzAsIDB4N2MsIDB4ZWYsCi0gIDB4NzAsIDB4NWMsIDB4ZmMsIDB4YWEsIDB4YjcsIDB4YTIsIDB4NzAsIDB4MzIsIDB4ZmUsIDB4ZmQsIDB4OTAsIDB4M2MsCi0gIDB4YjksIDB4MTAsIDB4ODIsIDB4NTQsIDB4YjEsIDB4Y2MsIDB4NzYsIDB4NGQsIDB4YjksIDB4YzEsIDB4ZTYsIDB4MjgsCi0gIDB4NjcsIDB4YzYsIDB4ODYsIDB4OTUsIDB4M2IsIDB4ZmYsIDB4ZGMsIDB4OTEsIDB4NDMsIDB4OWUsIDB4NGQsIDB4M2UsCi0gIDB4YjMsIDB4ZTIsIDB4MTcsIDB4MmUsIDB4M2IsIDB4MmIsIDB4YzksIDB4MmUsIDB4MGMsIDB4ZTgsIDB4NmIsIDB4Y2YsCi0gIDB4ZWYsIDB4MmEsIDB4NGQsIDB4OWMsIDB4NDEsIDB4NTYsIDB4ZGEsIDB4YWIsIDB4ZTAsIDB4NWYsIDB4ZGQsIDB4OTksCi0gIDB4NDcsIDB4YWEsIDB4NzAsIDB4ZWYsIDB4NjIsIDB4OWQsIDB4ODgsIDB4OWYsIDB4MjcsIDB4OTEsIDB4ZDIsIDB4ZGQsCi0gIDB4OTgsIDB4YjQsIDB4N2EsIDB4MzgsIDB4ZjEsIDB4NTksIDB4NGUsIDB4M2IsIDB4ZGYsIDB4ZWEsIDB4Y2MsIDB4N2IsCi0gIDB4MGQsIDB4MWMsIDB4OTAsIDB4MDIsIDB4ZmIsIDB4ZmIsIDB4MzcsIDB4NDMsIDB4ZmQsIDB4NTUsIDB4MjgsIDB4MDIsCi0gIDB4YmYsIDB4MGUsIDB4NDUsIDB4MGIsIDB4MjcsIDB4ZDQsIDB4NzksIDB4YzAsIDB4YTYsIDB4NGYsIDB4ZWQsIDB4NmMsCi0gIDB4YjcsIDB4NDMsIDB4NWUsIDB4NjAsIDB4NjgsIDB4MWYsIDB4M2EsIDB4NWEsIDB4YzEsIDB4ZjksIDB4ZDgsIDB4YjUsCi0gIDB4OWMsIDB4N2QsIDB4MzUsIDB4YjUsIDB4YmIsIDB4N2IsIDB4MTcsIDB4ZWMsIDB4NGUsIDB4ZGYsIDB4ODYsIDB4ZjEsCi0gIDB4NWYsIDB4NDUsIDB4NDMsIDB4NWEsIDB4YmIsIDB4NGIsIDB4YTEsIDB4MTMsIDB4ZDEsIDB4NjAsIDB4NjAsIDB4ZGUsCi0gIDB4N2EsIDB4Y2QsIDB4YzAsIDB4ZGEsIDB4YmMsIDB4YTQsIDB4MzYsIDB4YzQsIDB4MTEsIDB4ODYsIDB4ZWEsIDB4NzgsCi0gIDB4NGMsIDB4NjcsIDB4OGYsIDB4MmUsIDB4MzUsIDB4MTEsIDB4YzQsIDB4ODgsIDB4ODIsIDB4NjQsIDB4YTQsIDB4MjIsCi0gIDB4ZDksIDB4YzksIDB4OWEsIDB4NjcsIDB4NzMsIDB4YTUsIDB4MjYsIDB4ZjUsIDB4M2IsIDB4MjYsIDB4YjUsIDB4MjQsCi0gIDB4MWYsIDB4NmYsIDB4NjQsIDB4YTMsIDB4YjgsIDB4NTAsIDB4OTgsIDB4MjUsIDB4ZWYsIDB4MGUsIDB4YmEsIDB4MDUsCi0gIDB4MTAsIDB4Y2IsIDB4NTQsIDB4OTAsIDB4OGMsIDB4MDcsIDB4NjYsIDB4OWIsIDB4MTEsIDB4MjEsIDB4ODQsIDB4OTYsCi0gIDB4M2MsIDB4YmUsIDB4M2YsIDB4YTAsIDB4NGUsIDB4MTcsIDB4YWUsIDB4YmYsIDB4YjUsIDB4MTUsIDB4N2EsIDB4NWYsCi0gIDB4NmEsIDB4YWIsIDB4MzQsIDB4ZDQsIDB4NzMsIDB4MDAsIDB4NzEsIDB4Y2MsIDB4ZjAsIDB4NjUsIDB4NDQsIDB4ZmIsCi0gIDB4YjMsIDB4ODcsIDB4NjksIDB4ZWUsIDB4OGYsIDB4NDgsIDB4OGIsIDB4MzIsIDB4NDIsIDB4MjksIDB4ZDEsIDB4MzUsCi0gIDB4NzUsIDB4YWEsIDB4YTcsIDB4YmIsIDB4NDIsIDB4YzIsIDB4ZTcsIDB4NGMsIDB4NDcsIDB4NzIsIDB4ODMsIDB4ZWEsCi0gIDB4MzYsIDB4Y2QsIDB4MDgsIDB4OTgsIDB4YWEsIDB4NzAsIDB4NzcsIDB4ZmEsIDB4Y2UsIDB4Y2UsIDB4YTksIDB4YzcsCi0gIDB4NzAsIDB4NTYsIDB4NTcsIDB4ZmMsIDB4YmIsIDB4ODgsIDB4OTIsIDB4NTcsIDB4NDIsIDB4YmEsIDB4YWEsIDB4MzIsCi0gIDB4NWMsIDB4N2UsIDB4OWQsIDB4YjgsIDB4MjgsIDB4YTEsIDB4M2EsIDB4M2UsIDB4MjIsIDB4YjIsIDB4MTUsIDB4YWQsCi0gIDB4MDUsIDB4MjIsIDB4YmUsIDB4NWUsIDB4ZmQsIDB4NWQsIDB4ZWEsIDB4YWYsIDB4MjUsIDB4NmQsIDB4MGQsIDB4OWQsCi0gIDB4MzEsIDB4ZGEsIDB4NzcsIDB4Y2MsIDB4MGUsIDB4YzAsIDB4NzksIDB4YzAsIDB4MGQsIDB4NTMsIDB4NDYsIDB4MTUsCi0gIDB4NzAsIDB4NzgsIDB4NWQsIDB4M2IsIDB4MTAsIDB4ZDYsIDB4NTQsIDB4NDgsIDB4YjksIDB4MjEsIDB4NzUsIDB4MWUsCi0gIDB4NzksIDB4YWYsIDB4OGEsIDB4MTksIDB4M2MsIDB4MGMsIDB4MzMsIDB4MmMsIDB4ZTUsIDB4NjgsIDB4MWEsIDB4ZTEsCi0gIDB4ZDUsIDB4NDMsIDB4NTYsIDB4YmIsIDB4NGIsIDB4NWMsIDB4MTksIDB4OGEsIDB4ZjAsIDB4MjEsIDB4N2EsIDB4OGQsCi0gIDB4ODgsIDB4MDUsIDB4M2YsIDB4NDEsIDB4YmYsIDB4MzksIDB4NjgsIDB4ODYsIDB4YTEsIDB4NDYsIDB4MDcsIDB4M2MsCi0gIDB4MTksIDB4OTIsIDB4MmEsIDB4MTQsIDB4Y2IsIDB4YmIsIDB4Y2QsIDB4MTIsIDB4YmEsIDB4OTcsIDB4ZDMsIDB4OTEsCi0gIDB4YTgsIDB4NDMsIDB4NTksIDB4NTIsIDB4YjgsIDB4M2YsIDB4ZjAsIDB4M2EsIDB4MDMsIDB4NTgsIDB4ZTgsIDB4NWYsCi0gIDB4ZDQsIDB4MmYsIDB4YmMsIDB4M2MsIDB4NDcsIDB4MGYsIDB4OTIsIDB4ZjMsIDB4MmYsIDB4MzcsIDB4ZTEsIDB4ZmEsCi0gIDB4ZWIsIDB4NDQsIDB4ZDIsIDB4ZDIsIDB4MmUsIDB4OTksIDB4NTcsIDB4NjcsIDB4NDksIDB4YmIsIDB4YzcsIDB4ZDUsCi0gIDB4MmIsIDB4ZjQsIDB4OGQsIDB4YjAsIDB4OTIsIDB4ZDYsIDB4MWMsIDB4MDksIDB4OGEsIDB4NDUsIDB4M2EsIDB4ZjYsCi0gIDB4NmUsIDB4NjAsIDB4ZDYsIDB4ZWYsIDB4Y2UsIDB4ZGUsIDB4NjcsIDB4ODgsIDB4M2MsIDB4MjEsIDB4ZGIsIDB4NjYsCi0gIDB4MDAsIDB4ODgsIDB4NWUsIDB4ODksIDB4MjIsIDB4ZWIsIDB4NjQsIDB4OWMsIDB4NDUsIDB4OTksIDB4NDgsIDB4MWMsCi0gIDB4YTQsIDB4MDIsIDB4MzgsIDB4ZWYsIDB4NDIsIDB4MDAsIDB4NzcsIDB4MWEsIDB4ZDQsIDB4OTcsIDB4YWYsIDB4N2IsCi0gIDB4MDAsIDB4ZjMsIDB4ZTksIDB4M2QsIDB4ZGUsIDB4MmIsIDB4NjksIDB4MDIsIDB4YmYsIDB4NmEsIDB4ZjAsIDB4NDksCi0gIDB4YjMsIDB4NWYsIDB4YmYsIDB4YzMsIDB4ZjgsIDB4MGQsIDB4MjAsIDB4ODEsIDB4MDksIDB4M2YsIDB4NWIsIDB4NGEsCi0gIDB4MjEsIDB4YTcsIDB4NTUsIDB4NjYsIDB4YmYsIDB4YWEsIDB4NzMsIDB4MDcsIDB4M2QsIDB4MjAsIDB4YmQsIDB4YTksCi0gIDB4YjUsIDB4YTYsIDB4ZmIsIDB4NDAsIDB4M2IsIDB4OGEsIDB4NzAsIDB4YmMsIDB4NjgsIDB4YmIsIDB4NDUsIDB4NGIsCi0gIDB4ZDgsIDB4ZGEsIDB4YjQsIDB4OTMsIDB4YjgsIDB4YTEsIDB4MzksIDB4OWMsIDB4ZTksIDB4NDQsIDB4MWIsIDB4YzAsCi0gIDB4MzksIDB4MjQsIDB4NGQsIDB4MmQsIDB4NzMsIDB4MGQsIDB4NWYsIDB4YzAsIDB4MTMsIDB4YjYsIDB4ZWEsIDB4M2EsCi0gIDB4MDQsIDB4NGEsIDB4ODcsIDB4MTQsIDB4MmMsIDB4ZWQsIDB4Y2YsIDB4MWIsIDB4OTIsIDB4MzcsIDB4YzIsIDB4YTIsCi0gIDB4ZTQsIDB4MTYsIDB4ZjYsIDB4MmUsIDB4MmYsIDB4NmIsIDB4OTcsIDB4MjgsIDB4MDcsIDB4NzAsIDB4NDEsIDB4ZTMsCi0gIDB4ZGIsIDB4OWUsIDB4MDksIDB4NzksIDB4YjgsIDB4YWQsIDB4MTMsIDB4ZTYsIDB4YWUsIDB4MzMsIDB4ZjQsIDB4NTQsCi0gIDB4ZjcsIDB4MDMsIDB4ODksIDB4MjUsIDB4NDIsIDB4MGYsIDB4ZmEsIDB4NDUsIDB4M2MsIDB4NWEsIDB4ZjIsIDB4NmEsCi0gIDB4OWUsIDB4ZjIsIDB4ZDQsIDB4MGEsIDB4ZjYsIDB4ZDMsIDB4MTEsIDB4OWUsIDB4NDIsIDB4MGYsIDB4NjIsIDB4ZDIsCi0gIDB4ZmUsIDB4NjksIDB4ZmEsIDB4N2UsIDB4NTcsIDB4ZTQsIDB4MmYsIDB4MTksIDB4YzYsIDB4M2YsIDB4NWQsIDB4YWIsCi0gIDB4ZGYsIDB4NTksIDB4ZjEsIDB4OTksIDB4N2IsIDB4ZGQsIDB4N2IsIDB4MDYsIDB4NWUsIDB4YmQsIDB4ZjIsIDB4YmYsCi0gIDB4MWUsIDB4YTUsIDB4ZWYsIDB4NjYsIDB4NWEsIDB4OTUsIDB4ZDQsIDB4NDIsIDB4MDEsIDB4M2IsIDB4NmMsIDB4ZDUsCi0gIDB4MGQsIDB4NTIsIDB4NGIsIDB4YTksIDB4YjMsIDB4NzgsIDB4OGYsIDB4NTEsIDB4YTIsIDB4MTksIDB4ZGEsIDB4NzgsCi0gIDB4YmQsIDB4NDAsIDB4NDEsIDB4YzQsIDB4YjcsIDB4ZjEsIDB4ZmUsIDB4ZjQsIDB4MzYsIDB4NTMsIDB4ZDcsIDB4MDgsCi0gIDB4ODgsIDB4ZDEsIDB4YWMsIDB4ZjcsIDB4YzAsIDB4ZGUsIDB4OGQsIDB4YjIsIDB4ODcsIDB4YzUsIDB4ODAsIDB4OWMsCi0gIDB4MzAsIDB4NWIsIDB4ZTAsIDB4MjUsIDB4YTEsIDB4MTYsIDB4YTEsIDB4MzEsIDB4NWEsIDB4NzksIDB4MmEsIDB4YmYsCi0gIDB4N2EsIDB4YTEsIDB4NDIsIDB4NGMsIDB4NjAsIDB4MTQsIDB4OWEsIDB4YWYsIDB4OTIsIDB4MmUsIDB4YTUsIDB4NGMsCi0gIDB4MzMsIDB4YWQsIDB4OGMsIDB4ZTMsIDB4YTcsIDB4YzAsIDB4NzcsIDB4MGYsIDB4NzksIDB4MTEsIDB4NTIsIDB4NjAsCi0gIDB4YTQsIDB4OGEsIDB4MGIsIDB4NGQsIDB4NjgsIDB4MGIsIDB4M2YsIDB4Y2UsIDB4YmYsIDB4NzcsIDB4NWYsIDB4MTMsCi0gIDB4NWYsIDB4NWMsIDB4ODIsIDB4NDQsIDB4YjksIDB4NWEsIDB4NGUsIDB4MTIsIDB4YjIsIDB4MjksIDB4NWEsIDB4YTAsCi0gIDB4NTIsIDB4ODMsIDB4NjEsIDB4NjAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OGYsIDB4ZjAsIDB4MDAsIDB4MWYsIDB4NjcsCi0gIDB4OGIsIDB4MzksIDB4NjksIDB4ODYsIDB4YTksIDB4NGQsIDB4ZTUsIDB4NTYsIDB4ODQsIDB4MmIsIDB4MDYsIDB4ZjUsCi0gIDB4YTEsIDB4MTEsIDB4NmIsIDB4OWUsIDB4ZDUsIDB4OTgsIDB4MjcsIDB4OWEsIDB4MDMsIDB4YjMsIDB4MGUsIDB4ODgsCi0gIDB4NDAsIDB4NzksIDB4NmUsIDB4ZTIsIDB4YjksIDB4OTcsIDB4NzksIDB4MmQsIDB4OGUsIDB4NjUsIDB4NmYsIDB4ZDUsCi0gIDB4ZjQsIDB4MDMsIDB4Y2MsIDB4MWIsIDB4NWEsIDB4YzYsIDB4YjYsIDB4NDYsIDB4YTMsIDB4NWQsIDB4NGEsIDB4Y2YsCi0gIDB4NjMsIDB4NTgsIDB4OGQsIDB4NzcsIDB4NDksIDB4MzUsIDB4ZTgsIDB4MjAsIDB4OTcsIDB4MjAsIDB4ODgsIDB4ZmIsCi0gIDB4YTYsIDB4OTMsIDB4ZGIsIDB4MjAsIDB4NWUsIDB4YWEsIDB4MjUsIDB4Y2MsIDB4NjksIDB4N2QsIDB4NWEsIDB4MDEsCi0gIDB4ZDIsIDB4MWEsIDB4MGQsIDB4YzEsIDB4MTQsIDB4YmYsIDB4NDksIDB4ZjIsIDB4YjQsIDB4NDMsIDB4NDIsIDB4YmUsCi0gIDB4MzEsIDB4MTQsIDB4YzQsIDB4YTksIDB4YWIsIDB4NGMsIDB4YTAsIDB4OWYsIDB4NDYsIDB4OGEsIDB4OWUsIDB4MzMsCi0gIDB4OGQsIDB4N2IsIDB4ZTksIDB4YTcsIDB4NDMsIDB4OGYsIDB4MjcsIDB4MTYsIDB4ZmIsIDB4NjEsIDB4ZDcsIDB4NTMsCi0gIDB4OGMsIDB4ZWIsIDB4MWQsIDB4MGYsIDB4MjgsIDB4ZDYsIDB4Y2YsIDB4M2UsIDB4OWMsIDB4ZmMsIDB4YWMsIDB4OWMsCi0gIDB4ZjMsIDB4YWQsIDB4ZTIsIDB4OWIsIDB4OWIsIDB4ZDksIDB4ZDcsIDB4ZDYsIDB4NmIsIDB4OTAsIDB4NTcsIDB4NDEsCi0gIDB4NGQsIDB4MzIsIDB4MDAsIDB4YmYsIDB4M2UsIDB4NDIsIDB4ODEsIDB4NTYsIDB4MzQsIDB4YjksIDB4NzksIDB4MmIsCi0gIDB4YjgsIDB4ZDAsIDB4ZDcsIDB4YzEsIDB4YjIsIDB4MmUsIDB4YmIsIDB4YjYsIDB4MjUsIDB4ODMsIDB4YmQsIDB4ZDgsCi0gIDB4NDYsIDB4MTcsIDB4OGQsIDB4Y2MsIDB4YTAsIDB4YjAsIDB4MmEsIDB4MDEsIDB4NDEsIDB4MTEsIDB4YTUsIDB4MTEsCi0gIDB4MTQsIDB4NGQsIDB4NzIsIDB4OTAsIDB4YzgsIDB4MDQsIDB4ZjQsIDB4MWUsIDB4Y2YsIDB4NDgsIDB4MTIsIDB4YTAsCi0gIDB4NDQsIDB4NDgsIDB4MTEsIDB4NWIsIDB4NGEsIDB4ZTcsIDB4ODMsIDB4ZDIsIDB4NGIsIDB4MTksIDB4NzYsIDB4NGUsCi0gIDB4MDMsIDB4NTcsIDB4NzQsIDB4ZDUsIDB4OTgsIDB4NzksIDB4ZDgsIDB4MTksIDB4MDgsIDB4MmIsIDB4ZmMsIDB4YmEsCi0gIDB4NTYsIDB4M2YsIDB4YWIsIDB4NzcsIDB4YTcsIDB4N2MsIDB4MTksIDB4ZmUsIDB4MTksIDB4MjgsIDB4MTEsIDB4YmMsCi0gIDB4NDcsIDB4MmQsIDB4ZmMsIDB4YWUsIDB4ODEsIDB4OTIsIDB4OWQsIDB4MzMsIDB4YzksIDB4ZjcsIDB4YzYsIDB4NTEsCi0gIDB4OWIsIDB4MzQsIDB4ZTcsIDB4N2MsIDB4NmEsIDB4ZTQsIDB4ZDksIDB4ZGYsIDB4NjcsIDB4YzAsIDB4MDEsIDB4YzUsCi0gIDB4YzQsIDB4OTYsIDB4MGEsIDB4OTEsIDB4YmUsIDB4YzcsIDB4ZTQsIDB4ZjQsIDB4OGUsIDB4YzcsIDB4MjcsIDB4YzMsCi0gIDB4NTksIDB4MmIsIDB4YjAsIDB4NzEsIDB4ZmEsIDB4YmUsIDB4NjUsIDB4NjQsIDB4YmIsIDB4Y2IsIDB4MzUsIDB4MmQsCi0gIDB4MzMsIDB4MWMsIDB4ZDIsIDB4MjYsIDB4ZjQsIDB4ZmEsIDB4ZDUsIDB4ODcsIDB4YTIsIDB4NTEsIDB4MWEsIDB4YTksCi0gIDB4YzcsIDB4Y2MsIDB4NTQsIDB4ODMsIDB4YjEsIDB4NmMsIDB4YzQsIDB4MDQsIDB4YWIsIDB4OWYsIDB4MDksIDB4ZmUsCi0gIDB4ODYsIDB4NTEsIDB4YmYsIDB4ZTUsIDB4ZDcsIDB4ZGQsIDB4MWUsIDB4MTQsIDB4ZmYsIDB4YWEsIDB4ZDIsIDB4ZDQsCi0gIDB4NTgsIDB4MDksIDB4ODQsIDB4OTMsIDB4ZjEsIDB4NmQsIDB4NzMsIDB4NWYsIDB4YWEsIDB4MzcsIDB4MTIsIDB4Y2EsCi0gIDB4MTYsIDB4OTQsIDB4MDAsIDB4MDYsIDB4N2YsIDB4ZGQsIDB4MGMsIDB4NmEsIDB4MGMsIDB4MTIsIDB4ZGIsIDB4YTYsCi0gIDB4Y2MsIDB4YjUsIDB4ZWYsIDB4MzQsIDB4NTMsIDB4OTIsIDB4NjUsIDB4NzksIDB4ZDcsIDB4MmQsIDB4NjAsIDB4MGMsCi0gIDB4ZjcsIDB4Y2IsIDB4MGMsIDB4MjAsIDB4MTMsIDB4ZTMsIDB4YWYsIDB4NmEsIDB4OWUsIDB4NGIsIDB4Y2YsIDB4ZGYsCi0gIDB4OTYsIDB4ZjIsIDB4ZDQsIDB4ODIsIDB4YmYsIDB4ZTYsIDB4ZmIsIDB4ODgsIDB4MTQsIDB4NDYsIDB4ZDUsIDB4OTQsCi0gIDB4N2MsIDB4OWQsIDB4ZDIsIDB4MTEsIDB4MDEsIDB4YzAsIDB4MjEsIDB4MWEsIDB4OTQsIDB4ZWQsIDB4YmEsIDB4OTgsCi0gIDB4YzMsIDB4MzIsIDB4YTAsIDB4ODQsIDB4Y2IsIDB4YTQsIDB4MjAsIDB4MmIsIDB4MmQsIDB4MWMsIDB4MTksIDB4YzEsCi0gIDB4NjIsIDB4ZTgsIDB4MjYsIDB4YWMsIDB4MDksIDB4YWQsIDB4NGEsIDB4MGQsIDB4ZDcsIDB4YWQsIDB4ZmUsIDB4YmYsCi0gIDB4MzUsIDB4OGYsIDB4YjUsIDB4NDcsIDB4NTIsIDB4NzksIDB4OTYsIDB4YWQsIDB4ZTMsIDB4YTYsIDB4ZTIsIDB4OGYsCi0gIDB4MzksIDB4ZmIsIDB4NmUsIDB4YzUsIDB4NzIsIDB4ZjYsIDB4MTQsIDB4ZDYsIDB4OTIsIDB4NzYsIDB4OWQsIDB4ODUsCi0gIDB4ZTYsIDB4ZDksIDB4YzQsIDB4ZTcsIDB4MDgsIDB4ZGIsIDB4NzUsIDB4YjcsIDB4MDMsIDB4NGEsIDB4MzUsIDB4ODMsCi0gIDB4NGUsIDB4NWYsIDB4MTgsIDB4ZjgsIDB4MTUsIDB4MGMsIDB4YmYsIDB4OTUsIDB4NGUsIDB4MzYsIDB4N2UsIDB4YWEsCi0gIDB4NjEsIDB4N2IsIDB4ZjMsIDB4ZTcsIDB4YzYsIDB4YzcsIDB4NTYsIDB4MzYsIDB4NGMsIDB4YjksIDB4ZWYsIDB4NzcsCi0gIDB4YmEsIDB4OTksIDB4NWMsIDB4OWUsIDB4YWMsIDB4ZjMsIDB4YmMsIDB4YTIsIDB4ZmIsIDB4ZDgsIDB4NTksIDB4NmMsCi0gIDB4NWEsIDB4MDUsIDB4NTIsIDB4YmYsIDB4MzMsIDB4NDgsIDB4ZDUsIDB4ZjMsIDB4OTcsIDB4ODYsIDB4ZmQsIDB4ZDcsCi0gIDB4MTUsIDB4NWIsIDB4ZTUsIDB4ZTYsIDB4MDQsIDB4MDQsIDB4ZjEsIDB4OGQsIDB4YTMsIDB4MTAsIDB4MDEsIDB4YmEsCi0gIDB4YTcsIDB4YTMsIDB4MWIsIDB4NGIsIDB4NmUsIDB4YWUsIDB4YWYsIDB4MmYsIDB4MDUsIDB4MDYsIDB4ZGYsIDB4MmIsCi0gIDB4ZDIsIDB4MWIsIDB4ODksIDB4YzksIDB4OGUsIDB4Y2EsIDB4MTksIDB4MmEsIDB4YWEsIDB4ZDIsIDB4NTgsIDB4NzcsCi0gIDB4NGIsIDB4MjMsIDB4NWIsIDB4MWMsIDB4NjEsIDB4MDQsIDB4N2EsIDB4ZTEsIDB4YmQsIDB4NDcsIDB4NzgsIDB4Y2QsCi0gIDB4OWMsIDB4ZjYsIDB4NTUsIDB4ZjUsIDB4YTYsIDB4YjYsIDB4NjAsIDB4OTIsIDB4MmUsIDB4MjYsIDB4MDgsIDB4MTUsCi0gIDB4ODMsIDB4MzAsIDB4MTYsIDB4NTAsIDB4MjEsIDB4NWMsIDB4MGYsIDB4ZmQsIDB4MDYsIDB4ZDUsIDB4MDgsIDB4ODAsCi0gIDB4MzQsIDB4NDQsIDB4ZDUsIDB4NTYsIDB4NzksIDB4YWEsIDB4ODIsIDB4MTYsIDB4NTcsIDB4NmIsIDB4M2UsIDB4M2MsCi0gIDB4ZmEsIDB4ZWMsIDB4NjAsIDB4YmYsIDB4MzYsIDB4MzksIDB4NzgsIDB4YzUsIDB4ZGMsIDB4ZGQsIDB4MjMsIDB4ZTksCi0gIDB4NjIsIDB4NzUsIDB4OTcsIDB4NzQsIDB4MGQsIDB4ZWIsIDB4ZTMsIDB4NjgsIDB4OTgsIDB4MmQsIDB4YzIsIDB4OTcsCi0gIDB4NWUsIDB4NjksIDB4NzIsIDB4ZDEsIDB4YjIsIDB4MzMsIDB4YTcsIDB4N2MsIDB4N2EsIDB4NTEsIDB4OTUsIDB4NDEsCi0gIDB4MzksIDB4NGQsIDB4YjEsIDB4NDEsIDB4YzEsIDB4MDQsIDB4MTAsIDB4MzgsIDB4ODQsIDB4MDQsIDB4MjEsIDB4MjUsCi0gIDB4ZDUsIDB4NDUsIDB4OTQsIDB4YTAsIDB4NDgsIDB4ZmYsIDB4NDAsIDB4MTcsIDB4YzgsIDB4NmEsIDB4NzMsIDB4ZmMsCi0gIDB4NWMsIDB4NzUsIDB4NGIsIDB4MzksIDB4NzksIDB4NTYsIDB4YWIsIDB4ZDQsIDB4M2QsIDB4OGIsIDB4YWQsIDB4NTgsCi0gIDB4YjEsIDB4ZDksIDB4ODMsIDB4ZjMsIDB4Y2MsIDB4ZTEsIDB4YjksIDB4YjYsIDB4NDUsIDB4YzUsIDB4ZGQsIDB4MzEsCi0gIDB4NjMsIDB4YzcsIDB4NGMsIDB4MWIsIDB4NjcsIDB4OTEsIDB4MmUsIDB4N2UsIDB4OWYsIDB4YTksIDB4NDUsIDB4MjMsCi0gIDB4ZjEsIDB4MWMsIDB4NzIsIDB4OWUsIDB4MjMsIDB4NmEsIDB4YzMsIDB4MTIsIDB4ODgsIDB4NzMsIDB4MjMsIDB4MzMsCi0gIDB4ZTAsIDB4ZDYsIDB4MDgsIDB4ODYsIDB4NDAsIDB4M2EsIDB4NGUsIDB4OGUsIDB4YzQsIDB4YmEsIDB4MzUsIDB4MjIsCi0gIDB4NzIsIDB4OWEsIDB4MmEsIDB4NTUsIDB4NTAsIDB4NTYsIDB4MDYsIDB4NDksIDB4MjEsIDB4MzcsIDB4MmEsIDB4MjUsCi0gIDB4ZjUsIDB4NjEsIDB4YzAsIDB4ZmQsIDB4OWUsIDB4ZWQsIDB4MTcsIDB4NWMsIDB4NTEsIDB4MWMsIDB4NjEsIDB4YzAsCi0gIDB4MjEsIDB4MWEsIDB4OTQsIDB4Y2QsIDB4YTIsIDB4ODksIDB4NjksIDB4YTIsIDB4YjAsIDB4ZDQsIDB4NDgsIDB4NjEsCi0gIDB4MjgsIDB4NjIsIDB4MzIsIDB4ZTQsIDB4NGEsIDB4NDEsIDB4YTIsIDB4MjUsIDB4NWQsIDB4YTAsIDB4Y2IsIDB4MmMsCi0gIDB4MGMsIDB4NGEsIDB4ODAsIDB4MjcsIDB4MDYsIDB4YzAsIDB4NDcsIDB4MDEsIDB4Y2MsIDB4NTUsIDB4MTAsIDB4N2QsCi0gIDB4NGEsIDB4ZWEsIDB4NjYsIDB4ODAsIDB4ZTksIDB4Y2EsIDB4ODEsIDB4NTQsIDB4ODksIDB4NjIsIDB4OTEsIDB4MmEsCi0gIDB4NGMsIDB4MmYsIDB4MDgsIDB4YWEsIDB4ZTUsIDB4MDUsIDB4MGUsIDB4NDYsIDB4NTMsIDB4NTQsIDB4NTcsIDB4MTksCi0gIDB4YjksIDB4NjUsIDB4NjEsIDB4NjQsIDB4YWQsIDB4NjEsIDB4MzgsIDB4NzAsIDB4ZWQsIDB4ZWQsIDB4OTUsIDB4MWIsCi0gIDB4NDcsIDB4ZjAsIDB4YzgsIDB4ZmIsIDB4MzcsIDB4M2IsIDB4YTYsIDB4MGEsIDB4OTQsIDB4NWQsIDB4OTcsIDB4MzQsCi0gIDB4OTQsIDB4YzEsIDB4ODQsIDB4Y2YsIDB4MWEsIDB4ZGQsIDB4YmEsIDB4OGUsIDB4YjAsIDB4MDQsIDB4MDMsIDB4NGIsCi0gIDB4ZDEsIDB4NGIsIDB4NzcsIDB4NWYsIDB4YjYsIDB4NTIsIDB4YmUsIDB4ZTgsIDB4OTAsIDB4ZTAsIDB4NzEsIDB4YmMsCi0gIDB4ODEsIDB4ODQsIDB4NjgsIDB4NWYsIDB4OTQsIDB4ZmMsIDB4NDcsIDB4ZTcsIDB4MzksIDB4YjMsIDB4NWEsIDB4NjYsCi0gIDB4NTUsIDB4MmIsIDB4NjYsIDB4YTMsIDB4YTUsIDB4NzIsIDB4N2EsIDB4MTIsIDB4ZTQsIDB4MjYsIDB4NWQsIDB4YTQsCi0gIDB4NGIsIDB4MzQsIDB4Y2EsIDB4YWEsIDB4MzcsIDB4YjQsIDB4YzIsIDB4OGMsIDB4ZDAsIDB4MGIsIDB4OWMsIDB4MTMsCi0gIDB4NGYsIDB4OGYsIDB4OWQsIDB4MWIsIDB4ZDEsIDB4M2IsIDB4MzcsIDB4MjMsIDB4YzcsIDB4YjAsIDB4NTUsIDB4OGMsCi0gIDB4OWUsIDB4NWUsIDB4ZWQsIDB4ODEsIDB4YmUsIDB4MGEsIDB4Y2QsIDB4NTAsIDB4NzksIDB4MmQsIDB4NWEsIDB4YzAsCi0gIDB4ZTAsIDB4ZDcsIDB4NjcsIDB4MTYsIDB4OTEsIDB4OTMsIDB4NGIsIDB4NTYsIDB4YTYsIDB4YjksIDB4ODAsIDB4NWUsCi0gIDB4MmEsIDB4YTAsIDB4MmMsIDB4MmIsIDB4NTcsIDB4MGIsIDB4NGEsIDB4NTEsIDB4OTEsIDB4MmQsIDB4NTMsIDB4OWUsCi0gIDB4NmMsIDB4NzIsIDB4ZjIsIDB4YmIsIDB4ZGUsIDB4ODAsIDB4MTAsIDB4MDEsIDB4NjAsIDB4M2IsIDB4MTYsIDB4M2IsCi0gIDB4NTUsIDB4NmIsIDB4YTgsIDB4YjIsIDB4MTYsIDB4ZWEsIDB4ODEsIDB4M2IsIDB4OTEsIDB4NGQsIDB4MWMsIDB4MGYsCi0gIDB4OTQsIDB4ZTYsIDB4ODEsIDB4ZDIsIDB4NTEsIDB4OTEsIDB4OWMsIDB4MWEsIDB4ZDUsIDB4MDgsIDB4ZDMsIDB4NzYsCi0gIDB4M2QsIDB4MDcsIDB4YmYsIDB4YWIsIDB4NWMsIDB4YjYsIDB4MjUsIDB4MjMsIDB4OTAsIDB4ZjQsIDB4MjMsIDB4NjQsCi0gIDB4OGQsIDB4MTAsIDB4OTIsIDB4MTcsIDB4OTAsIDB4MjMsIDB4MGIsIDB4NmIsIDB4ODgsIDB4NmEsIDB4YmQsIDB4ZjcsCi0gIDB4MGEsIDB4NDYsIDB4NjAsIDB4OTksIDB4YTcsIDB4YjEsIDB4MjgsIDB4NDgsIDB4MTAsIDB4YTEsIDB4MmIsIDB4N2EsCi0gIDB4NGEsIDB4OTYsIDB4ZGEsIDB4NTUsIDB4MTMsIDB4YWUsIDB4NDUsIDB4MTYsIDB4OTIsIDB4ZWEsIDB4ZDMsIDB4MDksCi0gIDB4NzIsIDB4YWYsIDB4NTAsIDB4NjgsIDB4ZWYsIDB4ZjIsIDB4NTgsIDB4MWQsIDB4ZWEsIDB4NjAsIDB4YjAsIDB4ODksCi0gIDB4OGIsIDB4NWQsIDB4NjMsIDB4MDksIDB4ZTIsIDB4ZDMsIDB4N2YsIDB4YjUsIDB4ZjEsIDB4ZjgsIDB4NzksIDB4MzMsCi0gIDB4N2EsIDB4MjMsIDB4MDYsIDB4MmIsIDB4MmMsIDB4YmQsIDB4NDcsIDB4NmQsIDB4OTIsIDB4MzUsIDB4MzEsIDB4NzQsCi0gIDB4OGEsIDB4NjksIDB4NzQsIDB4OTQsIDB4YzUsIDB4NjksIDB4MTAsIDB4NDQsIDB4ZDEsIDB4NzIsIDB4MzUsIDB4NjIsCi0gIDB4OTYsIDB4NmQsIDB4OWIsIDB4NzksIDB4ZmYsIDB4ZGIsIDB4ZmQsIDB4ZmYsIDB4ZGYsIDB4ZmUsIDB4NmYsIDB4Y2YsCi0gIDB4ZjEsIDB4ZmEsIDB4M2MsIDB4MzMsIDB4YjgsIDB4MzEsIDB4YzAsIDB4MjEsIDB4MWEsIDB4OGYsIDB4NzgsIDB4NGUsCi0gIDB4MGYsIDB4Y2YsIDB4ZmYsIDB4M2IsIDB4NGYsIDB4YjAsIDB4ZDEsIDB4MTgsIDB4YzQsIDB4MjEsIDB4NzIsIDB4MTksCi0gIDB4OWUsIDB4NzIsIDB4NjUsIDB4ZTUsIDB4NTUsIDB4OTIsIDB4YTIsIDB4ZTUsIDB4NDksIDB4NWEsIDB4NmIsIDB4YWQsCi0gIDB4ZTAsIDB4NjksIDB4ZDUsIDB4ODUsIDB4OTMsIDB4ZmUsIDB4MGYsIDB4ZjIsIDB4NzMsIDB4N2YsIDB4YTIsIDB4ZTksCi0gIDB4NWYsIDB4ZDAsIDB4ZmIsIDB4ZGYsIDB4ZmYsIDB4ZmEsIDB4MjksIDB4YWUsIDB4NDcsIDB4NWIsIDB4ODMsIDB4ZmUsCi0gIDB4YmMsIDB4MzIsIDB4ZjcsIDB4ZmEsIDB4NzcsIDB4OTYsIDB4YzcsIDB4YzksIDB4YmEsIDB4YjAsIDB4YTYsIDB4OTYsCi0gIDB4NTQsIDB4NmQsIDB4YWUsIDB4NmEsIDB4ZjUsIDB4MDYsIDB4NmUsIDB4MDUsIDB4YzUsIDB4NzQsIDB4NWIsIDB4ODgsCi0gIDB4ZDUsIDB4ZDgsIDB4ZWUsIDB4ZjAsIDB4NzUsIDB4ZTAsIDB4Y2MsIDB4MmUsIDB4MzEsIDB4MzUsIDB4NGQsIDB4MjYsCi0gIDB4NWIsIDB4NTAsIDB4YTAsIDB4ZDYsIDB4ZGUsIDB4ZWQsIDB4MmMsIDB4ZTUsIDB4NTUsIDB4ZWUsIDB4YTIsIDB4OTQsCi0gIDB4NjksIDB4NzcsIDB4YjksIDB4ODIsIDB4YWIsIDB4NjQsIDB4MmMsIDB4ZTYsIDB4ZDIsIDB4ZjIsIDB4NTAsIDB4MDcsCi0gIDB4NTMsIDB4MTQsIDB4M2MsIDB4Y2UsIDB4MGMsIDB4YWQsIDB4ODMsIDB4MDksIDB4YWMsIDB4OTMsIDB4ZjcsIDB4ZDcsCi0gIDB4ZjUsIDB4MmYsIDB4MGYsIDB4OGYsIDB4OWIsIDB4YmUsIDB4YzMsIDB4ZGEsIDB4OTEsIDB4NjAsIDB4MTQsIDB4MTIsCi0gIDB4OTgsIDB4ZmUsIDB4NjAsIDB4YmIsIDB4YzksIDB4MjgsIDB4NTMsIDB4NWIsIDB4NTcsIDB4Y2EsIDB4MzAsIDB4YzcsCi0gIDB4MWQsIDB4YjksIDB4NzQsIDB4MjMsIDB4MzksIDB4NzgsIDB4NDIsIDB4MDAsIDB4YTcsIDB4ZDMsIDB4NDEsIDB4NmIsCi0gIDB4ZmUsIDB4ZjIsIDB4OGUsIDB4NzcsIDB4MzgsIDB4NTAsIDB4NTgsIDB4MTAsIDB4ZTUsIDB4YWQsIDB4ZmIsIDB4YWEsCi0gIDB4ZWYsIDB4OTEsIDB4MzQsIDB4YjMsIDB4NTYsIDB4OTEsIDB4OTgsIDB4YWEsIDB4ZjYsIDB4OTAsIDB4MTEsIDB4MDAsCi0gIDB4MTQsIDB4NDQsIDB4MzEsIDB4NzIsIDB4ZGYsIDB4YjcsIDB4OTQsIDB4MTgsIDB4NmYsIDB4MDAsIDB4OTksIDB4YTQsCi0gIDB4NTksIDB4ZDgsIDB4NzYsIDB4NDQsIDB4MDgsIDB4MTAsIDB4ODIsIDB4MDEsIDB4NDAsIDB4OTAsIDB4ODAsIDB4MjQsCi0gIDB4MTAsIDB4MTAsIDB4OTgsIDB4NDYsIDB4NDYsIDB4MzcsIDB4N2MsIDB4ZDcsIDB4YjcsIDB4NjgsIDB4OGQsIDB4NTcsCi0gIDB4YzUsIDB4M2MsIDB4OWEsIDB4NjgsIDB4MTYsIDB4Y2UsIDB4OTksIDB4NzAsIDB4YzcsIDB4NmUsIDB4MTksIDB4MmQsCi0gIDB4ZTMsIDB4YmMsIDB4ZDcsIDB4YWMsIDB4OWUsIDB4MmUsIDB4YTIsIDB4YWYsIDB4NmMsIDB4YzEsIDB4NjEsIDB4M2YsCi0gIDB4MmYsIDB4ZjAsIDB4ZjYsIDB4MzgsIDB4M2UsIDB4YzcsIDB4OGIsIDB4ZDMsIDB4NzMsIDB4N2IsIDB4MmYsIDB4YWUsCi0gIDB4YzksIDB4ODAsIDB4ZjUsIDB4YzcsIDB4YzIsIDB4OTIsIDB4MDYsIDB4NDMsIDB4YTQsIDB4N2MsIDB4NTksIDB4MDgsCi0gIDB4NmQsIDB4YmUsIDB4N2IsIDB4YjIsIDB4YzgsIDB4MDAsIDB4MWYsIDB4MWMsIDB4YjYsIDB4YmMsIDB4ZjQsIDB4NmMsCi0gIDB4NDksIDB4ZjYsIDB4NzMsIDB4MGIsIDB4MzcsIDB4Y2MsIDB4MTksIDB4MjksIDB4NjMsIDB4YjEsIDB4ZGYsIDB4N2YsCi0gIDB4OTQsIDB4YzQsIDB4MzgsIDB4YzcsIDB4ZmYsIDB4NzIsIDB4YzAsIDB4MzUsIDB4ZDcsIDB4NjQsIDB4M2IsIDB4MTAsCi0gIDB4ZjQsIDB4YzQsIDB4NzMsIDB4Y2MsIDB4NzAsIDB4M2MsIDB4YzEsIDB4YzgsIDB4MjksIDB4Y2MsIDB4YzMsIDB4NDksCi0gIDB4YjksIDB4YjcsIDB4ZTYsIDB4MTEsIDB4YTMsIDB4ZTksIDB4YTUsIDB4ZWEsIDB4OGUsIDB4NWIsIDB4ZDksIDB4YmMsCi0gIDB4NzYsIDB4N2MsIDB4ZTMsIDB4NzAsIDB4NjIsIDB4MzMsIDB4ZWYsIDB4MDMsIDB4MTUsIDB4MGQsIDB4ZjcsIDB4NTcsCi0gIDB4NzAsIDB4MmIsIDB4ZDUsIDB4NzUsIDB4NDksIDB4MzAsIDB4MDgsIDB4NzgsIDB4ZGQsIDB4OTIsIDB4MjAsIDB4NWQsCi0gIDB4ZmEsIDB4YzYsIDB4ZTMsIDB4NmEsIDB4ZTIsIDB4NjAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4ZDcsIDB4YjUsIDB4YTgsCi0gIDB4YTQsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OGYsIDB4ZDAsIDB4MDcsIDB4MGEsIDB4MDAsIDB4MGYsIDB4NDMsCi0gIDB4NGIsIDB4ODMsIDB4ZDAsIDB4OTgsIDB4YzMsIDB4MDcsIDB4MGEsIDB4ZTcsIDB4NGIsIDB4OGEsIDB4NzIsIDB4YjgsCi0gIDB4NDYsIDB4ODUsIDB4NWQsIDB4YWQsIDB4ZTcsIDB4MTgsIDB4M2EsIDB4NzQsIDB4MGUsIDB4N2IsIDB4Y2QsIDB4NzMsCi0gIDB4NmYsIDB4MmMsIDB4ZjUsIDB4ZDIsIDB4NWQsIDB4NzcsIDB4ZTgsIDB4YmYsIDB4N2IsIDB4YzksIDB4ODUsIDB4ZGIsCi0gIDB4NmQsIDB4MjMsIDB4NzUsIDB4NDcsIDB4NTUsIDB4NWIsIDB4ODAsIDB4OTAsIDB4Y2IsIDB4NWQsIDB4ODUsIDB4NDgsCi0gIDB4ZGIsIDB4YzksIDB4OGQsIDB4NTUsIDB4YzcsIDB4NWQsIDB4YTMsIDB4YjcsIDB4YTUsIDB4ZTAsIDB4YzAsIDB4ZmMsCi0gIDB4ZWIsIDB4MDYsIDB4ZDEsIDB4ZWQsIDB4M2YsIDB4ZWQsIDB4MzYsIDB4ZGIsIDB4YWYsIDB4YmEsIDB4ZGYsIDB4NDMsCi0gIDB4ODcsIDB4YjksIDB4YzUsIDB4N2QsIDB4ZjQsIDB4MDcsIDB4MWQsIDB4YzcsIDB4NzksIDB4NGEsIDB4OWQsIDB4MjUsCi0gIDB4MTgsIDB4OGQsIDB4MWQsIDB4ZDcsIDB4YTcsIDB4M2QsIDB4OTIsIDB4MzcsIDB4NzUsIDB4MjAsIDB4OWEsIDB4ODUsCi0gIDB4ZDAsIDB4ZTksIDB4OTQsIDB4MDYsIDB4ZTQsIDB4YWMsIDB4ZTYsIDB4YWUsIDB4OTYsIDB4ZmQsIDB4NTUsIDB4NzcsCi0gIDB4ZjMsIDB4NzEsIDB4MGIsIDB4MWMsIDB4ZTQsIDB4M2EsIDB4MWUsIDB4ZGYsIDB4ZWUsIDB4YzYsIDB4ZDAsIDB4MjAsCi0gIDB4MWMsIDB4MWUsIDB4MGMsIDB4N2EsIDB4N2YsIDB4NmMsIDB4ZmIsIDB4YjMsIDB4ZjIsIDB4OWMsIDB4ZDQsIDB4YmQsCi0gIDB4ODUsIDB4OWYsIDB4Y2IsIDB4MmYsIDB4ZGIsIDB4ODEsIDB4MTAsIDB4OGQsIDB4ZDIsIDB4MDAsIDB4NGIsIDB4NDcsCi0gIDB4M2QsIDB4MmYsIDB4ZGUsIDB4M2QsIDB4M2EsIDB4ZGYsIDB4ODgsIDB4MTcsIDB4ODUsIDB4NjksIDB4ZTIsIDB4MzIsCi0gIDB4ZDcsIDB4ZmQsIDB4YjYsIDB4MTAsIDB4NTYsIDB4NzAsIDB4NDIsIDB4YWIsIDB4NDUsIDB4ZDIsIDB4ZGMsIDB4MDUsCi0gIDB4ZTYsIDB4MDAsIDB4N2MsIDB4YjQsIDB4MmYsIDB4NjYsIDB4ZGYsIDB4YmMsIDB4NWYsIDB4MmYsIDB4ZDcsIDB4ZmMsCi0gIDB4NDQsIDB4MDIsIDB4NmEsIDB4ZTEsIDB4NDYsIDB4ODEsIDB4YjEsIDB4NTAsIDB4YzIsIDB4NjEsIDB4YjcsIDB4NzYsCi0gIDB4YzksIDB4OGIsIDB4YzQsIDB4OGIsIDB4NWEsIDB4NmIsIDB4MjYsIDB4OTAsIDB4MDEsIDB4YWYsIDB4YTgsIDB4MTksCi0gIDB4MTMsIDB4NGEsIDB4YzAsIDB4YjEsIDB4MDEsIDB4MWQsIDB4NjcsIDB4ZTYsIDB4MzYsIDB4ZDYsIDB4NWYsIDB4ZDgsCi0gIDB4N2IsIDB4Y2UsIDB4OTIsIDB4NDUsIDB4YjcsIDB4MzIsIDB4ZGMsIDB4NjcsIDB4OWUsIDB4YWMsIDB4OTgsIDB4Y2QsCi0gIDB4OTcsIDB4YTIsIDB4ZDIsIDB4N2YsIDB4M2YsIDB4YjYsIDB4MjIsIDB4OGEsIDB4YjcsIDB4ZTYsIDB4ZTYsIDB4YWIsCi0gIDB4OGUsIDB4NjMsIDB4NGEsIDB4YWYsIDB4ZjYsIDB4YmYsIDB4MTMsIDB4YmMsIDB4ZTUsIDB4NDIsIDB4NmQsIDB4ZjgsCi0gIDB4ZGIsIDB4YTEsIDB4YmEsIDB4ODUsIDB4NDEsIDB4YWUsIDB4YjQsIDB4NDAsIDB4MjMsIDB4MDAsIDB4OGEsIDB4NjEsCi0gIDB4NDcsIDB4MTgsIDB4NzEsIDB4NDAsIDB4OWUsIDB4MjcsIDB4M2EsIDB4ZmQsIDB4NGYsIDB4NWQsIDB4YmMsIDB4ZWYsCi0gIDB4MWMsIDB4N2IsIDB4MDksIDB4YzYsIDB4YWUsIDB4NmYsIDB4OTgsIDB4YWEsIDB4YTMsIDB4MDEsIDB4ZjAsIDB4OWEsCi0gIDB4ODYsIDB4ODEsIDB4OTUsIDB4YjMsIDB4Y2EsIDB4ZDYsIDB4YjEsIDB4MjIsIDB4ODgsIDB4OTAsIDB4MjUsIDB4ZjYsCi0gIDB4NWIsIDB4MGEsIDB4NGIsIDB4NzEsIDB4NDAsIDB4MjEsIDB4YjUsIDB4NmMsIDB4ZDIsIDB4OTEsIDB4MjcsIDB4OGMsCi0gIDB4NDQsIDB4Y2UsIDB4NWEsIDB4NjQsIDB4ODEsIDB4NmQsIDB4MDYsIDB4MzAsIDB4MGEsIDB4ODEsIDB4OTQsIDB4MWYsCi0gIDB4NzgsIDB4NmMsIDB4N2UsIDB4ODEsIDB4M2YsIDB4ZjQsIDB4YjcsIDB4NTMsIDB4NTMsIDB4ZDMsIDB4MmMsIDB4OTcsCi0gIDB4OTQsIDB4YjYsIDB4MTUsIDB4ZTEsIDB4ODYsIDB4YmMsIDB4M2EsIDB4NWYsIDB4YzMsIDB4NmYsIDB4OGMsIDB4YWQsCi0gIDB4NjcsIDB4ZTMsIDB4OGIsIDB4NjksIDB4OWUsIDB4N2IsIDB4MWQsIDB4ZGEsIDB4MmMsIDB4MGEsIDB4MmMsIDB4YWIsCi0gIDB4Y2EsIDB4YWYsIDB4ZmQsIDB4ZjIsIDB4ZTMsIDB4ZjcsIDB4ZGQsIDB4MzQsIDB4YzMsIDB4NzYsIDB4ZDcsIDB4ZDUsCi0gIDB4ZGYsIDB4ZTMsIDB4OWQsIDB4YmIsIDB4ZTIsIDB4YzksIDB4MDIsIDB4M2QsIDB4ZGEsIDB4NTcsIDB4ZTgsIDB4ZDksCi0gIDB4NDMsIDB4NjQsIDB4ZjcsIDB4MmMsIDB4ZWMsIDB4NGUsIDB4N2QsIDB4OGMsIDB4YzIsIDB4ZWUsIDB4NTgsIDB4NjAsCi0gIDB4MzAsIDB4OWUsIDB4MDcsIDB4ZWEsIDB4MmQsIDB4YTcsIDB4MDksIDB4N2EsIDB4ZjEsIDB4YjUsIDB4NDgsIDB4NzAsCi0gIDB4NWQsIDB4YWIsIDB4NmEsIDB4NmQsIDB4NjEsIDB4YjcsIDB4ZmUsIDB4YzAsIDB4MDcsIDB4Y2UsIDB4MDEsIDB4ZjIsCi0gIDB4ZmQsIDB4NjIsIDB4ZjksIDB4YmYsIDB4YTAsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OGIsIDB4YzgsIDB4MDcsCi0gIDB4MGMsIDB4MDAsIDB4MDEsIDB4M2QsIDB4NjYsIDB4YTYsIDB4YTksIDB4MTgsIDB4NDMsIDB4MTUsIDB4NTYsIDB4ZjMsCi0gIDB4ZTgsIDB4MDYsIDB4ZTgsIDB4MTYsIDB4NDMsIDB4ODEsIDB4ZmEsIDB4ZjYsIDB4YTIsIDB4ZjQsIDB4NjgsIDB4MTYsCi0gIDB4YjYsIDB4NzYsIDB4MTUsIDB4ZjMsIDB4MzQsIDB4YzQsIDB4ZTEsIDB4NWUsIDB4NzgsIDB4YzMsIDB4MTAsIDB4OTksCi0gIDB4M2IsIDB4MGEsIDB4MTcsIDB4MjgsIDB4ZDUsIDB4MjAsIDB4ZTMsIDB4YjMsIDB4YTUsIDB4YzYsIDB4NGQsIDB4MWEsCi0gIDB4NGQsIDB4NGYsIDB4MWIsIDB4MDIsIDB4OTgsIDB4YjAsIDB4MzIsIDB4YzMsIDB4NjUsIDB4NjEsIDB4Y2MsIDB4M2EsCi0gIDB4Y2YsIDB4OTAsIDB4NmYsIDB4MmMsIDB4MDAsIDB4MzQsIDB4YTUsIDB4ZWIsIDB4YjQsIDB4YTMsIDB4ZjAsIDB4MzcsCi0gIDB4NDksIDB4MTksIDB4MjAsIDB4MmUsIDB4ZTcsIDB4NzgsIDB4MDYsIDB4MTYsIDB4MTAsIDB4MjcsIDB4MzUsIDB4NGEsCi0gIDB4ZjMsIDB4ODUsIDB4ZjIsIDB4NzcsIDB4NzQsIDB4YjMsIDB4NmYsIDB4YWYsIDB4MmMsIDB4Y2EsIDB4YzgsIDB4OTcsCi0gIDB4MTgsIDB4NGEsIDB4NjEsIDB4NWEsIDB4OWYsIDB4NTEsIDB4MjUsIDB4OTQsIDB4YTksIDB4YzUsIDB4NzIsIDB4YmUsCi0gIDB4MWEsIDB4ODMsIDB4MWUsIDB4N2MsIDB4ZDksIDB4OTEsIDB4YjUsIDB4YTIsIDB4NDcsIDB4MjEsIDB4ODYsIDB4NDksCi0gIDB4ZDgsIDB4MjcsIDB4OTUsIDB4MTAsIDB4MzgsIDB4OGUsIDB4MTgsIDB4OTgsIDB4ODIsIDB4ZjYsIDB4OGMsIDB4NzgsCi0gIDB4ZDQsIDB4YjIsIDB4YzgsIDB4ZWUsIDB4YTgsIDB4ODQsIDB4YmIsIDB4ZjYsIDB4ZDYsIDB4OWQsIDB4NjUsIDB4NDksCi0gIDB4ZjcsIDB4OWUsIDB4MTEsIDB4MjcsIDB4ODMsIDB4OTQsIDB4MTQsIDB4OTIsIDB4YjQsIDB4ODAsIDB4MDAsIDB4MDAsCi0gIDB4OTMsIDB4NTEsIDB4NTYsIDB4OGMsIDB4MGQsIDB4YWQsIDB4YmIsIDB4MDIsIDB4NmUsIDB4ZTAsIDB4YzMsIDB4ODIsCi0gIDB4MDAsIDB4NTAsIDB4YTQsIDB4MzEsIDB4NTAsIDB4OWUsIDB4MWMsIDB4ZDgsIDB4NGQsIDB4ZWEsIDB4YjIsIDB4ZDAsCi0gIDB4YmQsIDB4NjQsIDB4YjAsIDB4MjIsIDB4NjksIDB4ZDAsIDB4MWYsIDB4NmUsIDB4NDksIDB4MmIsIDB4NTQsIDB4YzcsCi0gIDB4OTgsIDB4ZGQsIDB4NmIsIDB4NGYsIDB4YWEsIDB4NjIsIDB4NTIsIDB4ODksIDB4ZjMsIDB4YjEsIDB4YTAsIDB4MzksCi0gIDB4YzgsIDB4NDUsIDB4NDUsIDB4YmQsIDB4NzIsIDB4YzUsIDB4MTAsIDB4YmQsIDB4YWQsIDB4YmEsIDB4NjMsIDB4YmEsCi0gIDB4YjAsIDB4NTEsIDB4NjcsIDB4OTksIDB4YjEsIDB4MzQsIDB4NzcsIDB4ZTQsIDB4YjYsIDB4NzgsIDB4MWMsIDB4MzUsCi0gIDB4MDgsIDB4ZmIsIDB4ZmEsIDB4MDEsIDB4NzIsIDB4NjEsIDB4OTUsIDB4MzgsIDB4M2MsIDB4NWIsIDB4YzAsIDB4MzQsCi0gIDB4MzYsIDB4ZGEsIDB4ZmUsIDB4NGIsIDB4ODgsIDB4ZGUsIDB4OTksIDB4NGEsIDB4NmQsIDB4MzAsIDB4MGEsIDB4OGQsCi0gIDB4NjUsIDB4M2YsIDB4N2UsIDB4YWEsIDB4NGYsIDB4NDMsIDB4MGMsIDB4MTgsIDB4YjAsIDB4NGMsIDB4MzIsIDB4ODQsCi0gIDB4NzIsIDB4NzMsIDB4ZjYsIDB4MDMsIDB4ZGMsIDB4ZjksIDB4MDgsIDB4YjIsIDB4MDMsIDB4MjIsIDB4Y2MsIDB4YTEsCi0gIDB4MDcsIDB4NjMsIDB4YjMsIDB4NDUsIDB4ODUsIDB4MzUsIDB4ZjEsIDB4M2YsIDB4YjEsIDB4YTEsIDB4NTAsIDB4NmIsCi0gIDB4NzUsIDB4MGYsIDB4MGEsIDB4MWEsIDB4ODgsIDB4OWYsIDB4NWIsIDB4NGQsIDB4ZGEsIDB4ZTIsIDB4MjIsIDB4NzUsCi0gIDB4Y2UsIDB4MDksIDB4ZGYsIDB4YWYsIDB4NDAsIDB4YjcsIDB4ZWYsIDB4NDcsIDB4NmEsIDB4NDgsIDB4NDMsIDB4N2UsCi0gIDB4YTcsIDB4MGEsIDB4ZDEsIDB4NTEsIDB4ZTMsIDB4YTUsIDB4YmMsIDB4OGIsIDB4MWIsIDB4OWYsIDB4ODIsIDB4ODUsCi0gIDB4ZDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4ODMsIDB4YTIsIDB4MzAsIDB4NzMsIDB4MDIsIDB4NDQsIDB4MDAsIDB4OGUsCi0gIDB4MmIsIDB4ZjEsIDB4YmMsIDB4Y2EsIDB4ODIsIDB4ZDgsIDB4NzYsIDB4YWQsIDB4MTEsIDB4NGYsIDB4NDUsIDB4ZjEsCi0gIDB4N2YsIDB4OGYsIDB4NDMsIDB4ZGMsIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OGIsIDB4YzAsIDB4MGYsIDB4OGYsCi0gIDB4NDEsIDB4Y2YsIDB4NDMsIDB4NTIsIDB4NjQsIDB4MTAsIDB4YzUsIDB4YWEsIDB4ZTMsIDB4MTYsIDB4MjUsIDB4MTUsCi0gIDB4MDYsIDB4NmEsIDB4YzIsIDB4Y2IsIDB4M2UsIDB4YjMsIDB4MDUsIDB4YmEsIDB4YzAsIDB4MDcsIDB4Y2MsIDB4YTgsCi0gIDB4MzIsIDB4M2MsIDB4MGUsIDB4ZmUsIDB4MzYsIDB4ZTMsIDB4ZDgsIDB4YjksIDB4NjIsIDB4NGYsIDB4NDEsIDB4YzIsCi0gIDB4NjAsIDB4OTcsIDB4OTksIDB4OTEsIDB4ZjQsIDB4MmUsIDB4MjcsIDB4YTAsIDB4Y2IsIDB4NDIsIDB4YTgsIDB4YzksCi0gIDB4ZDMsIDB4MzAsIDB4ZDksIDB4ZDMsIDB4Y2IsIDB4MzMsIDB4MDAsIDB4NTMsIDB4M2MsIDB4NjMsIDB4YzUsIDB4MjEsCi0gIDB4MGIsIDB4ZjgsIDB4M2IsIDB4ODAsIDB4NTYsIDB4NTksIDB4MDYsIDB4NzYsIDB4YWEsIDB4NDUsIDB4OTcsIDB4MDgsCi0gIDB4ZjYsIDB4NmQsIDB4ZmMsIDB4ODcsIDB4NmYsIDB4NmYsIDB4YTUsIDB4MWEsIDB4YWMsIDB4N2EsIDB4MmMsIDB4NzIsCi0gIDB4ZGQsIDB4NTQsIDB4N2EsIDB4NzEsIDB4ZDAsIDB4ZjgsIDB4NzgsIDB4Y2YsIDB4N2QsIDB4YWEsIDB4OTcsIDB4OWEsCi0gIDB4YzgsIDB4MDUsIDB4YmMsIDB4MGQsIDB4MTAsIDB4ZTYsIDB4MWEsIDB4ZWYsIDB4M2UsIDB4Y2YsIDB4YzUsIDB4YjMsCi0gIDB4ZGMsIDB4MzIsIDB4YmIsIDB4NjMsIDB4YzAsIDB4MDcsIDB4NDEsIDB4NGYsIDB4YzAsIDB4ZWYsIDB4MzgsIDB4NjksCi0gIDB4OGQsIDB4NTgsIDB4NzIsIDB4NmYsIDB4YzAsIDB4Y2EsIDB4MjQsIDB4MDMsIDB4ZTAsIDB4YTAsIDB4NDUsIDB4OTIsCi0gIDB4ZDQsIDB4NDksIDB4MjgsIDB4ZDgsIDB4MDAsIDB4MTYsIDB4NjEsIDB4OTQsIDB4MmMsIDB4Y2QsIDB4MjQsIDB4ZmYsCi0gIDB4OTQsIDB4ZmUsIDB4MzksIDB4YTUsIDB4NDIsIDB4MjMsIDB4ZTcsIDB4MmQsIDB4MTYsIDB4YjQsIDB4ZmYsIDB4NTUsCi0gIDB4NzcsIDB4ZmUsIDB4ZjcsIDB4YzEsIDB4YTYsIDB4OGUsIDB4MjYsIDB4ZjAsIDB4ODUsIDB4ZTgsIDB4MDAsIDB4MDUsCi0gIDB4YjksIDB4ZTQsIDB4MGUsIDB4M2UsIDB4MTEsIDB4ODAsIDB4NTIsIDB4ZTAsIDB4NGYsIDB4ZGMsIDB4MTAsIDB4OTAsCi0gIDB4MzEsIDB4MjIsIDB4MDQsIDB4NDYsIDB4NDIsIDB4MTQsIDB4OWEsIDB4NzMsIDB4OWEsIDB4MzcsIDB4NzQsIDB4NDMsCi0gIDB4NzcsIDB4YzUsIDB4MjAsIDB4ZTAsIDB4NTksIDB4M2EsIDB4MGQsIDB4NjgsIDB4MTUsIDB4MmQsIDB4YTcsIDB4YTQsCi0gIDB4NTksIDB4ZWMsIDB4NzUsIDB4YWEsIDB4NzMsIDB4NzgsIDB4MTcsIDB4ZGQsIDB4MzEsIDB4ZDcsIDB4YzYsIDB4ZTksCi0gIDB4MDksIDB4YmQsIDB4ZjQsIDB4NzksIDB4NjIsIDB4MWYsIDB4NzIsIDB4NGUsIDB4NmYsIDB4YmIsIDB4YTAsIDB4NTMsCi0gIDB4YzUsIDB4NGMsIDB4NjgsIDB4M2QsIDB4NmUsIDB4N2QsIDB4NTcsIDB4MjMsIDB4YzcsIDB4MzIsIDB4YjQsIDB4MzYsCi0gIDB4ZWMsIDB4MmYsIDB4MGEsIDB4ZjEsIDB4ZGEsIDB4NzMsIDB4OTksIDB4YmYsIDB4Y2QsIDB4MTksIDB4MzksIDB4OGMsCi0gIDB4NGMsIDB4MjAsIDB4YWUsIDB4ZjUsIDB4NDAsIDB4ODUsIDB4ZGEsIDB4MzIsIDB4YjcsIDB4ZjQsIDB4NjgsIDB4M2UsCi0gIDB4OTgsIDB4OTQsIDB4NGMsIDB4MTIsIDB4MWYsIDB4YTQsIDB4ZjYsIDB4MDQsIDB4NTcsIDB4NDcsIDB4MWIsIDB4Y2EsCi0gIDB4ZmEsIDB4YTgsIDB4OGQsIDB4OTgsIDB4NGMsIDB4OTksIDB4OTIsIDB4YzksIDB4OTIsIDB4MTAsIDB4MGIsIDB4MDksCi0gIDB4MGMsIDB4YWIsIDB4ZTksIDB4NzUsIDB4ZDcsIDB4OTQsIDB4ODEsIDB4YWMsIDB4NDUsIDB4ODcsIDB4ZjAsIDB4YzQsCi0gIDB4YWMsIDB4NzUsIDB4YjQsIDB4YzUsIDB4M2IsIDB4NDUsIDB4OGUsIDB4ZGMsIDB4OTQsIDB4ZTUsIDB4ZDIsIDB4NjUsCi0gIDB4YzMsIDB4ZTksIDB4ZWUsIDB4OWMsIDB4NDAsIDB4MjUsIDB4YjUsIDB4MTksIDB4MTIsIDB4NjgsIDB4ZDgsIDB4OWQsCi0gIDB4YTIsIDB4NDUsIDB4ODQsIDB4MjIsIDB4MTQsIDB4OGQsIDB4NDcsIDB4MjgsIDB4ZTksIDB4N2IsIDB4YWEsIDB4NmIsCi0gIDB4NWIsIDB4YzIsIDB4MzQsIDB4OGMsIDB4ZTAsIDB4NjAsIDB4MGEsIDB4OGMsIDB4NzcsIDB4MDcsIDB4MjEsIDB4MWEsCi0gIDB4OGYsIDB4ZDYsIDB4MWYsIDB4Y2YsIDB4ZTcsIDB4ZmIsIDB4MzcsIDB4NjYsIDB4YTUsIDB4NTgsIDB4NjgsIDB4NTAsCi0gIDB4NzQsIDB4MTEsIDB4YjksIDB4NGEsIDB4NzMsIDB4M2EsIDB4YWQsIDB4ZGQsIDB4YTksIDB4MGEsIDB4ZDUsIDB4NGIsCi0gIDB4NTUsIDB4YzIsIDB4MTcsIDB4ODMsIDB4NGUsIDB4YTAsIDB4NmEsIDB4ZmMsIDB4YmMsIDB4ZGEsIDB4ZTAsIDB4ZmUsCi0gIDB4OTcsIDB4ZDUsIDB4MTIsIDB4NjgsIDB4MWMsIDB4MWIsIDB4ZGYsIDB4OWQsIDB4MjEsIDB4MTgsIDB4N2QsIDB4YTUsCi0gIDB4NzUsIDB4YzQsIDB4NmEsIDB4MmEsIDB4MGEsIDB4NzgsIDB4NDMsIDB4MGQsIDB4ZDEsIDB4OTIsIDB4NDksIDB4MDAsCi0gIDB4YjEsIDB4OTQsIDB4NmUsIDB4YTAsIDB4NGEsIDB4NmQsIDB4ODQsIDB4OTQsIDB4OWIsIDB4ZmMsIDB4ZDMsIDB4NTMsCi0gIDB4YWYsIDB4MWMsIDB4ZjQsIDB4ZWUsIDB4MzIsIDB4ZTUsIDB4MmMsIDB4MDEsIDB4NDEsIDB4YzUsIDB4MTksIDB4YmIsCi0gIDB4ODAsIDB4YWIsIDB4ZGIsIDB4YjIsIDB4NWUsIDB4NzMsIDB4MGIsIDB4OTEsIDB4YjQsIDB4ODgsIDB4YzYsIDB4ZTEsCi0gIDB4NTksIDB4NzUsIDB4NzcsIDB4OWQsIDB4YjEsIDB4NzQsIDB4NGUsIDB4YWIsIDB4NjQsIDB4NmEsIDB4ZDEsIDB4MzcsCi0gIDB4YWQsIDB4OTAsIDB4YzMsIDB4OGIsIDB4MjgsIDB4NmMsIDB4MmEsIDB4OTAsIDB4OWQsIDB4YmMsIDB4NDIsIDB4OTQsCi0gIDB4MjAsIDB4YzAsIDB4YTQsIDB4YmMsIDB4NjksIDB4ZDAsIDB4OWUsIDB4OTUsIDB4ZmQsIDB4MWEsIDB4NjQsIDB4MjksCi0gIDB4ZWIsIDB4YTQsIDB4YzYsIDB4OGIsIDB4ZjEsIDB4NDMsIDB4MTAsIDB4NTAsIDB4MTEsIDB4NzksIDB4MDcsIDB4ZGYsCi0gIDB4ZmIsIDB4ZTcsIDB4NTMsIDB4N2IsIDB4NTgsIDB4MjYsIDB4NzMsIDB4MDgsIDB4NjMsIDB4YTcsIDB4MWUsIDB4NWUsCi0gIDB4ZTUsIDB4OTgsIDB4ZDUsIDB4OTcsIDB4YWYsIDB4ZGIsIDB4ZjYsIDB4MWMsIDB4YzAsIDB4MDAsIDB4MDUsIDB4NDYsCi0gIDB4ZGMsIDB4ZjAsIDB4NGUsIDB4ZmIsIDB4N2EsIDB4ODUsIDB4MTEsIDB4MDksIDB4MzksIDB4NzcsIDB4ODYsIDB4MDcsCi0gIDB4MTMsIDB4OGUsIDB4OWQsIDB4YWQsIDB4YTksIDB4NTIsIDB4MzUsIDB4NDAsIDB4MGEsIDB4MDAsIDB4MDMsIDB4MzQsCi0gIDB4NTIsIDB4YzYsIDB4NGYsIDB4MGIsIDB4YTMsIDB4NzIsIDB4ZjIsIDB4ZTEsIDB4MDAsIDB4NGQsIDB4ZGIsIDB4OTgsCi0gIDB4YTAsIDB4MTgsIDB4MTksIDB4MTAsIDB4NDYsIDB4ODEsIDB4MTEsIDB4ODAsIDB4YzQsIDB4NjAsIDB4MjUsIDB4NTMsCi0gIDB4OTUsIDB4YTgsIDB4NjgsIDB4YTYsIDB4NzQsIDB4OGQsIDB4MjEsIDB4N2EsIDB4MzQsIDB4ZDMsIDB4NDEsIDB4NGQsCi0gIDB4NDEsIDB4ZTUsIDB4YTUsIDB4YTYsIDB4MTksIDB4OGQsIDB4Y2UsIDB4NTAsIDB4MjUsIDB4M2YsIDB4NGUsIDB4YmIsCi0gIDB4YzgsIDB4ZGIsIDB4MmUsIDB4MGIsIDB4NGMsIDB4YWUsIDB4NTksIDB4MzUsIDB4NWEsIDB4NjEsIDB4YTcsIDB4NjcsCi0gIDB4NDAsIDB4ZmUsIDB4ZWQsIDB4YzQsIDB4M2QsIDB4ZGEsIDB4M2EsIDB4MGUsIDB4MWQsIDB4MjUsIDB4ZTIsIDB4MzksCi0gIDB4MzQsIDB4M2IsIDB4NGIsIDB4MGQsIDB4Y2MsIDB4M2UsIDB4OTMsIDB4YTUsIDB4ZmEsIDB4ZmMsIDB4M2EsIDB4NTEsCi0gIDB4NWMsIDB4OWIsIDB4MWUsIDB4YjUsIDB4YTksIDB4MDIsIDB4ZDAsIDB4NDIsIDB4YjIsIDB4Y2MsIDB4NWUsIDB4NzgsCi0gIDB4NDEsIDB4OWUsIDB4MDgsIDB4YzcsIDB4MGMsIDB4Y2YsIDB4ZTUsIDB4NDMsIDB4YmQsIDB4YTksIDB4ZDUsIDB4MDMsCi0gIDB4YTUsIDB4YjYsIDB4ZDEsIDB4OTQsIDB4MTgsIDB4MzAsIDB4MTgsIDB4Y2QsIDB4OWQsIDB4ZmMsIDB4ZjksIDB4M2UsCi0gIDB4MTYsIDB4YTYsIDB4OTQsIDB4ZDIsIDB4ZGEsIDB4NTgsIDB4MjAsIDB4NjIsIDB4ZTcsIDB4M2UsIDB4OGMsIDB4NjAsCi0gIDB4NjAsIDB4MjgsIDB4ODksIDB4MTMsIDB4MDUsIDB4ZWIsIDB4MjUsIDB4ZGIsIDB4NzYsIDB4YzQsIDB4YmEsIDB4MTIsCi0gIDB4ZjQsIDB4ZjksIDB4M2IsIDB4NWUsIDB4YmEsIDB4NjQsIDB4YjksIDB4YzYsIDB4Y2QsIDB4YjIsIDB4ZDUsIDB4ZTgsCi0gIDB4OTcsIDB4OTksIDB4MTIsIDB4NmYsIDB4MWYsIDB4ZTgsIDB4MDAsIDB4MDQsIDB4YjcsIDB4NjAsIDB4MGUsIDB4MjEsCi0gIDB4MWEsIDB4OTQsIDB4Y2QsIDB4YzYsIDB4OGYsIDB4MDMsIDB4NDEsIDB4OTksIDB4MTAsIDB4NjIsIDB4NTEsIDB4Y2UsCi0gIDB4ZDYsIDB4YjgsIDB4NzEsIDB4YzgsIDB4YjQsIDB4NWEsIDB4ZDIsIDB4MmMsIDB4YmMsIDB4MTYsIDB4ZTAsIDB4MGQsCi0gIDB4ZmIsIDB4ZjAsIDB4YmIsIDB4YWMsIDB4ODgsIDB4MDMsIDB4ZGUsIDB4YjUsIDB4ZjcsIDB4ZTEsIDB4YTAsIDB4MWIsCi0gIDB4YWUsIDB4ZjEsIDB4NWEsIDB4ZWQsIDB4ZGQsIDB4YmUsIDB4NzYsIDB4OWMsIDB4ZTIsIDB4ZTgsIDB4NjQsIDB4ZDksCi0gIDB4M2MsIDB4ZjUsIDB4YjAsIDB4ZWEsIDB4N2UsIDB4N2UsIDB4NGUsIDB4YjEsIDB4N2MsIDB4M2QsIDB4ZDUsIDB4M2UsCi0gIDB4MDIsIDB4NWUsIDB4OWQsIDB4Y2EsIDB4NWYsIDB4YTMsIDB4NWMsIDB4ODMsIDB4N2QsIDB4ZjMsIDB4MzMsIDB4MDMsCi0gIDB4NTYsIDB4ZjIsIDB4OWMsIDB4MGIsIDB4ZGMsIDB4NzEsIDB4MTUsIDB4N2MsIDB4ZGYsIDB4MDYsIDB4YTMsIDB4YmUsCi0gIDB4MGQsIDB4OGUsIDB4MTMsIDB4YTMsIDB4YjMsIDB4MmQsIDB4MzUsIDB4Y2QsIDB4NjcsIDB4NmEsIDB4ZWMsIDB4MzMsCi0gIDB4ZmIsIDB4ZWYsIDB4OTgsIDB4NTAsIDB4MTgsIDB4ZmIsIDB4MDQsIDB4YjEsIDB4NGMsIDB4ODAsIDB4YzQsIDB4ZGQsCi0gIDB4YTUsIDB4N2IsIDB4YWIsIDB4ODMsIDB4YjAsIDB4YzEsIDB4NDAsIDB4MWIsIDB4ZTksIDB4OGYsIDB4YjAsIDB4MzQsCi0gIDB4ZWEsIDB4MDksIDB4MDYsIDB4NTUsIDB4NGMsIDB4OTAsIDB4YWYsIDB4Y2MsIDB4NDQsIDB4ODgsIDB4NjAsIDB4NDQsCi0gIDB4YTAsIDB4YWQsIDB4OTgsIDB4OTQsIDB4OWUsIDB4OTksIDB4NDIsIDB4ZDcsIDB4ZTgsIDB4YmIsIDB4OGUsIDB4YmEsCi0gIDB4OGEsIDB4Y2UsIDB4ZTksIDB4ODEsIDB4NWEsIDB4ZDgsIDB4Y2QsIDB4Y2QsIDB4NjgsIDB4YWQsIDB4OWIsIDB4NmMsCi0gIDB4NTcsIDB4NWUsIDB4ODYsIDB4ZDEsIDB4MjUsIDB4M2MsIDB4MzYsIDB4YTAsIDB4MDMsIDB4ZDEsIDB4MTQsIDB4NTcsCi0gIDB4OTcsIDB4ODksIDB4ZDIsIDB4YTUsIDB4NzIsIDB4ZjgsIDB4MjcsIDB4ZDQsIDB4YmUsIDB4ZTcsIDB4ZTcsIDB4ZWIsCi0gIDB4NTcsIDB4NDMsIDB4ZjgsIDB4YmQsIDB4MWYsIDB4YjksIDB4YWIsIDB4MTEsIDB4MzAsIDB4NTgsIDB4ZTAsIDB4YTksCi0gIDB4NmIsIDB4NTYsIDB4YmQsIDB4NzQsIDB4ZmIsIDB4MTksIDB4ZjUsIDB4MzQsIDB4ZjksIDB4Y2QsIDB4YmUsIDB4OWYsCi0gIDB4OWIsIDB4MDMsIDB4NWEsIDB4NTcsIDB4OWQsIDB4YTMsIDB4YTAsIDB4YjAsIDB4YjUsIDB4YzgsIDB4NzgsIDB4ZDgsCi0gIDB4NWQsIDB4Y2UsIDB4NDMsIDB4N2UsIDB4Y2UsIDB4MzgsIDB4ODEsIDB4YjMsIDB4NzMsIDB4YWEsIDB4YTgsIDB4ZTEsCi0gIDB4MmMsIDB4MDQsIDB4ODUsIDB4NGQsIDB4NDIsIDB4ZjEsIDB4ODIsIDB4YTEsIDB4MjksIDB4ZWQsIDB4MGEsIDB4NmYsCi0gIDB4MGQsIDB4NTksIDB4OGMsIDB4ZDksIDB4ZDYsIDB4MDAsIDB4MjYsIDB4NjksIDB4MzYsIDB4NDgsIDB4MmEsIDB4OTQsCi0gIDB4MDYsIDB4NDEsIDB4MDEsIDB4ODgsIDB4ODAsIDB4YzIsIDB4NDYsIDB4ZTMsIDB4NmQsIDB4NjMsIDB4OGEsIDB4MjgsCi0gIDB4MDcsIDB4MGUsIDB4YmEsIDB4NzQsIDB4MDUsIDB4YmQsIDB4M2IsIDB4M2IsIDB4Y2UsIDB4ODMsIDB4NmUsIDB4OWIsCi0gIDB4ZmMsIDB4NTUsIDB4NjIsIDB4YjUsIDB4ZTYsIDB4ZmEsIDB4OGEsIDB4YjYsIDB4MWMsIDB4NzQsIDB4YjQsIDB4NzIsCi0gIDB4YzcsIDB4ZDMsIDB4NTYsIDB4ZTIsIDB4OWQsIDB4MTEsIDB4NzYsIDB4NWQsIDB4ZWEsIDB4YzcsIDB4MmQsIDB4YmUsCi0gIDB4MmEsIDB4MDYsIDB4YTYsIDB4NzEsIDB4NTQsIDB4ZTAsIDB4OWYsIDB4OGQsIDB4YzQsIDB4MzksIDB4YjYsIDB4OTQsCi0gIDB4MWQsIDB4ZjAsIDB4MjAsIDB4NzAsIDB4ZWMsIDB4NjMsIDB4OWQsIDB4NzUsIDB4NDAsIDB4NWMsIDB4MzEsIDB4NGUsCi0gIDB4NjQsIDB4YjIsIDB4ZDUsIDB4YTIsIDB4MzMsIDB4ODMsIDB4N2EsIDB4NGUsIDB4YTEsIDB4N2QsIDB4MzMsIDB4MTUsCi0gIDB4Y2IsIDB4ZmQsIDB4ZTMsIDB4ZTEsIDB4ZDUsIDB4YjAsIDB4NWUsIDB4ZDQsIDB4YTMsIDB4YTEsIDB4MWUsIDB4MzUsCi0gIDB4MDEsIDB4YmUsIDB4NmEsIDB4MTEsIDB4MjEsIDB4YzMsIDB4NTQsIDB4OGIsIDB4MGYsIDB4ZGYsIDB4YmEsIDB4YzUsCi0gIDB4MmQsIDB4MTQsIDB4MTMsIDB4MDAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OTQsIDB4ZGQsIDB4Y2EsIDB4MTIsIDB4ODMsCi0gIDB4MTEsIDB4MTEsIDB4MDQsIDB4YzQsIDB4NmMsIDB4ZGYsIDB4MTgsIDB4ZTksIDB4NTAsIDB4MTUsIDB4NzIsIDB4YTYsCi0gIDB4OWEsIDB4M2EsIDB4ZTQsIDB4YTMsIDB4NTAsIDB4MDYsIDB4YWEsIDB4OTgsIDB4NzEsIDB4N2YsIDB4YWUsIDB4NzMsCi0gIDB4MjcsIDB4NzksIDB4ZjcsIDB4NTYsIDB4YmQsIDB4YjQsIDB4NGMsIDB4NzYsIDB4MGQsIDB4NmUsIDB4MGYsIDB4OTQsCi0gIDB4OWUsIDB4MTgsIDB4MzcsIDB4M2IsIDB4YmIsIDB4NTUsIDB4YjksIDB4ZmQsIDB4MzYsIDB4ZjMsIDB4NWQsIDB4NzIsCi0gIDB4ZTQsIDB4MDgsIDB4NWIsIDB4MWEsIDB4N2IsIDB4ODUsIDB4OTAsIDB4MDQsIDB4MDgsIDB4ZTMsIDB4OTcsIDB4NWQsCi0gIDB4MWUsIDB4MWQsIDB4YTMsIDB4NjMsIDB4NTksIDB4ZTksIDB4NjIsIDB4MGUsIDB4ZmMsIDB4YzIsIDB4N2MsIDB4NjMsCi0gIDB4OTYsIDB4NWYsIDB4OTIsIDB4NWYsIDB4MGQsIDB4ZWMsIDB4ZWUsIDB4MzYsIDB4ZDksIDB4YjgsIDB4YmUsIDB4YTgsCi0gIDB4OGIsIDB4YWMsIDB4MzUsIDB4NzQsIDB4YTcsIDB4ZmIsIDB4ZmYsIDB4YmUsIDB4OWYsIDB4NzMsIDB4YmIsIDB4ZTksCi0gIDB4NmUsIDB4NmEsIDB4ZjQsIDB4Y2QsIDB4YjEsIDB4ZTQsIDB4OGQsIDB4ZDEsIDB4MjIsIDB4MmIsIDB4ZjAsIDB4MGUsCi0gIDB4YzMsIDB4OTMsIDB4MzcsIDB4MTAsIDB4YjIsIDB4N2UsIDB4MzUsIDB4MjYsIDB4ZGMsIDB4ZDksIDB4NzEsIDB4ZTYsCi0gIDB4OGMsIDB4YjAsIDB4YTYsIDB4MTQsIDB4YzEsIDB4MWEsIDB4MmMsIDB4YjQsIDB4MzYsIDB4ZjQsIDB4ZjUsIDB4ZDQsCi0gIDB4MzIsIDB4ZjAsIDB4NjEsIDB4NjMsIDB4NGYsIDB4YTAsIDB4N2EsIDB4NzIsIDB4MDgsIDB4YzgsIDB4MWQsIDB4N2EsCi0gIDB4NjUsIDB4YzcsIDB4ZGEsIDB4Y2IsIDB4NGEsIDB4M2MsIDB4ODIsIDB4NjQsIDB4MTgsIDB4NjUsIDB4YjksIDB4YzUsCi0gIDB4YWQsIDB4NWYsIDB4YmUsIDB4ZDgsIDB4YjQsIDB4MDEsIDB4NTksIDB4YmIsIDB4NmUsIDB4ZWIsIDB4ZWIsIDB4MWYsCi0gIDB4NGMsIDB4OWMsIDB4YmEsIDB4MTEsIDB4NjIsIDB4ZmYsIDB4M2EsIDB4MzgsIDB4MWUsIDB4NWMsIDB4OWQsIDB4ZDUsCi0gIDB4OGUsIDB4NzEsIDB4OWIsIDB4OWUsIDB4NjAsIDB4ZjQsIDB4YjEsIDB4NWMsIDB4OWUsIDB4ZWUsIDB4NzYsIDB4NTcsCi0gIDB4OTYsIDB4MjgsIDB4YjgsIDB4ODIsIDB4NjIsIDB4NTQsIDB4MDAsIDB4ZTYsIDB4OTAsIDB4ZmYsIDB4NWUsIDB4NjcsCi0gIDB4ZDQsIDB4OGMsIDB4NzUsIDB4MzMsIDB4YWIsIDB4YWEsIDB4NzAsIDB4YzgsIDB4MGIsIDB4ZGQsIDB4MDksIDB4NGYsCi0gIDB4MGQsIDB4OTIsIDB4MGMsIDB4ZTAsIDB4MjAsIDB4ZDYsIDB4NTksIDB4NzAsIDB4OTQsIDB4ZWMsIDB4MTMsIDB4ZDYsCi0gIDB4ZjcsIDB4MjMsIDB4MGMsIDB4ODIsIDB4MDIsIDB4MTEsIDB4MDAsIDB4YzQsIDB4MjAsIDB4NzEsIDB4MjIsIDB4NzUsCi0gIDB4OGMsIDB4NjUsIDB4YzIsIDB4NTAsIDB4MDksIDB4NzcsIDB4M2UsIDB4M2EsIDB4YWIsIDB4MDUsIDB4ZDEsIDB4ZmEsCi0gIDB4OWIsIDB4OTMsIDB4NDgsIDB4NzUsIDB4ZjcsIDB4ZjYsIDB4OTgsIDB4ZTcsIDB4M2IsIDB4MjgsIDB4YTksIDB4ZGMsCi0gIDB4MmYsIDB4ZjIsIDB4ZDQsIDB4YjksIDB4NjEsIDB4YTEsIDB4YzMsIDB4NDcsIDB4NWIsIDB4YzMsIDB4ZTUsIDB4NDYsCi0gIDB4ZDcsIDB4NDksIDB4NjQsIDB4ZjksIDB4YjYsIDB4NGIsIDB4MjgsIDB4NjYsIDB4MGUsIDB4YjQsIDB4NmUsIDB4ZTYsCi0gIDB4ZGYsIDB4ZjgsIDB4MGMsIDB4MjMsIDB4YjMsIDB4MTUsIDB4NDQsIDB4NTksIDB4ZTksIDB4ZWMsIDB4YmYsIDB4N2QsCi0gIDB4MmMsIDB4N2IsIDB4YzksIDB4OWYsIDB4MjYsIDB4NzcsIDB4MWQsIDB4MzMsIDB4NTEsIDB4NTQsIDB4MzAsIDB4ZTIsCi0gIDB4NGQsIDB4NDIsIDB4MjAsIDB4YjgsIDB4NTIsIDB4NmMsIDB4NGIsIDB4OGYsIDB4ZTgsIDB4YWUsIDB4YTAsIDB4MTIsCi0gIDB4MzAsIDB4YTUsIDB4MTIsIDB4NTIsIDB4MDEsIDB4OWMsIDB4ODksIDB4MjMsIDB4NmIsIDB4MjMsIDB4MTEsIDB4NjEsCi0gIDB4YzQsIDB4ZmMsIDB4NzMsIDB4YTgsIDB4OTQsIDB4MDAsIDB4MzgsIDB4MjEsIDB4MWEsIDB4OGQsIDB4MjQsIDB4MGYsCi0gIDB4ZmYsIDB4ODUsIDB4ZmYsIDB4MzcsIDB4NmIsIDB4YTIsIDB4NTgsIDB4NjgsIDB4YjAsIDB4NDYsIDB4MTgsIDB4YjgsCi0gIDB4NmYsIDB4MmQsIDB4YzUsIDB4MjQsIDB4ZGMsIDB4MTEsIDB4YzAsIDB4YTUsIDB4YjQsIDB4NzUsIDB4NTksIDB4YjEsCi0gIDB4ZDUsIDB4ODEsIDB4NjQsIDB4ZDMsIDB4ZmYsIDB4NWQsIDB4ZGQsIDB4MzksIDB4YTIsIDB4ODYsIDB4MDUsIDB4MjMsCi0gIDB4MGMsIDB4NzQsIDB4YzgsIDB4NGMsIDB4NzgsIDB4MTAsIDB4MjEsIDB4OTAsIDB4YzcsIDB4NDYsIDB4MjMsIDB4YTUsCi0gIDB4NWEsIDB4MTgsIDB4MWQsIDB4MDksIDB4ZDUsIDB4YjYsIDB4YTYsIDB4ZDEsIDB4MzYsIDB4MzQsIDB4MjgsIDB4NzEsCi0gIDB4ZWIsIDB4MWQsIDB4NWUsIDB4ZDQsIDB4MzIsIDB4ZDYsIDB4ZGEsIDB4ZDksIDB4M2MsIDB4ZjYsIDB4YzcsIDB4ODcsCi0gIDB4ZTQsIDB4OTYsIDB4NGUsIDB4Y2EsIDB4MjgsIDB4MGYsIDB4MWMsIDB4NzMsIDB4NTEsIDB4ZWIsIDB4ZjQsIDB4ZWIsCi0gIDB4MzYsIDB4NWIsIDB4NWMsIDB4ZGYsIDB4NDEsIDB4YWMsIDB4OTcsIDB4Y2IsIDB4M2EsIDB4NmQsIDB4NmIsIDB4NjMsCi0gIDB4MjIsIDB4MTUsIDB4M2YsIDB4YTMsIDB4MzMsIDB4ZDAsIDB4ZGYsIDB4MmEsIDB4OTUsIDB4MWQsIDB4NjUsIDB4YjUsCi0gIDB4ZWYsIDB4MGUsIDB4MjYsIDB4YWQsIDB4YjYsIDB4ZTgsIDB4NGQsIDB4YzcsIDB4YjgsIDB4OTksIDB4YTcsIDB4MTAsCi0gIDB4N2MsIDB4NjYsIDB4MTgsIDB4Y2EsIDB4NDMsIDB4ODgsIDB4ZjAsIDB4NjQsIDB4MTUsIDB4ODUsIDB4ODcsIDB4ZjQsCi0gIDB4ZWIsIDB4ODgsIDB4MmEsIDB4ZTIsIDB4YTYsIDB4NjUsIDB4YzEsIDB4ZDksIDB4OTMsIDB4ZmIsIDB4MWEsIDB4OGYsCi0gIDB4NjgsIDB4YzYsIDB4ZTYsIDB4YWUsIDB4YjEsIDB4NjksIDB4ZDYsIDB4ZDksIDB4OGUsIDB4ZDAsIDB4MjgsIDB4OTEsCi0gIDB4MjIsIDB4NDEsIDB4YTQsIDB4ZTEsIDB4NTcsIDB4MzQsIDB4NTUsIDB4OWUsIDB4MmYsIDB4NWMsIDB4YjAsIDB4ZjksCi0gIDB4NjMsIDB4OGYsIDB4NmMsIDB4NjEsIDB4NjEsIDB4MTgsIDB4NDMsIDB4ZDQsIDB4NGEsIDB4YTUsIDB4ZmMsIDB4MjIsCi0gIDB4MzQsIDB4ZmMsIDB4NzMsIDB4NmMsIDB4ZTcsIDB4YmIsIDB4YzksIDB4OTgsIDB4MzksIDB4MDgsIDB4MjcsIDB4OTIsCi0gIDB4YTgsIDB4Y2IsIDB4YjYsIDB4MGMsIDB4N2YsIDB4MzgsIDB4ZTAsIDB4NGEsIDB4M2EsIDB4MDksIDB4ODksIDB4NWEsCi0gIDB4YTAsIDB4OWEsIDB4YjUsIDB4MjYsIDB4YWEsIDB4MTIsIDB4YTEsIDB4MmEsIDB4NTgsIDB4MjEsIDB4YjYsIDB4YmUsCi0gIDB4M2IsIDB4MDIsIDB4NmUsIDB4ZGYsIDB4MDMsIDB4NjIsIDB4YTIsIDB4NDQsIDB4MjgsIDB4MTEsIDB4NDIsIDB4NjMsCi0gIDB4MDAsIDB4MjAsIDB4ODgsIDB4ZTEsIDB4NGIsIDB4NWEsIDB4NGQsIDB4MGIsIDB4MmUsIDB4NWUsIDB4MDUsIDB4MTQsCi0gIDB4ZGEsIDB4NDUsIDB4ZmUsIDB4YmEsIDB4NjIsIDB4YzMsIDB4ZjAsIDB4NzIsIDB4ZDAsIDB4MDEsIDB4ZjgsIDB4MDgsCi0gIDB4Y2IsIDB4NmUsIDB4ZGEsIDB4ODIsIDB4ODIsIDB4NjYsIDB4Y2EsIDB4OTAsIDB4MGYsIDB4YzYsIDB4YzcsIDB4NGQsCi0gIDB4ZDQsIDB4MDUsIDB4ZDksIDB4ZDIsIDB4MTQsIDB4YTAsIDB4NGIsIDB4NGUsIDB4MzYsIDB4MjcsIDB4MWQsIDB4ZmUsCi0gIDB4NTIsIDB4ZDMsIDB4NWQsIDB4YTYsIDB4NGYsIDB4MTgsIDB4ZmIsIDB4YzMsIDB4ODIsIDB4N2IsIDB4OGMsIDB4YmMsCi0gIDB4ZWUsIDB4OTEsIDB4ZDAsIDB4OWQsIDB4ZDMsIDB4YmUsIDB4YmQsIDB4ZTYsIDB4YjgsIDB4OGYsIDB4ZDQsIDB4YTMsCi0gIDB4OGUsIDB4N2MsIDB4NDMsIDB4MGYsIDB4NTQsIDB4MDEsIDB4OWYsIDB4ZWQsIDB4NDIsIDB4NGYsIDB4NzYsIDB4NzAsCi0gIDB4YjMsIDB4ZGEsIDB4NzIsIDB4ODUsIDB4MGIsIDB4MjEsIDB4MDIsIDB4ZjIsIDB4ZmEsIDB4NzQsIDB4MmYsIDB4OGUsCi0gIDB4OGQsIDB4MzYsIDB4ZjUsIDB4MjgsIDB4OTEsIDB4YTgsIDB4MjQsIDB4MWUsIDB4ZTcsIDB4YzQsIDB4YjYsIDB4NjQsCi0gIDB4NDEsIDB4MjQsIDB4N2QsIDB4N2MsIDB4NzMsIDB4MmMsIDB4OGQsIDB4MmEsIDB4MzgsIDB4MWYsIDB4MWYsIDB4NTksCi0gIDB4ZjAsIDB4NzUsIDB4NTgsIDB4OGQsIDB4NmUsIDB4MWMsIDB4OGYsIDB4NGUsIDB4NDcsIDB4YWEsIDB4NzgsIDB4YTQsCi0gIDB4NjcsIDB4MDMsIDB4YWUsIDB4YzEsIDB4OGQsIDB4NGEsIDB4NTEsIDB4YTQsIDB4YWYsIDB4NDUsIDB4MjQsIDB4YjUsCi0gIDB4MmIsIDB4ODEsIDB4ZjUsIDB4NDMsIDB4YzAsIDB4NDIsIDB4MzQsIDB4YjIsIDB4MWEsIDB4NDUsIDB4NzQsIDB4ODksCi0gIDB4YTcsIDB4ZGIsIDB4ODAsIDB4MGUsIDB4NDYsIDB4ZTcsIDB4NjAsIDB4YTUsIDB4NDQsIDB4MDMsIDB4NGMsIDB4ZjYsCi0gIDB4M2UsIDB4ZWYsIDB4Y2MsIDB4MDAsIDB4OTAsIDB4NWQsIDB4NDQsIDB4YzUsIDB4NDQsIDB4ZjYsIDB4ODMsIDB4ZTcsCi0gIDB4MGIsIDB4ZGYsIDB4MTMsIDB4M2QsIDB4ODAsIDB4NzAsIDB4MjEsIDB4MWEsIDB4OGYsIDB4ZjAsIDB4MDcsIDB4Y2YsCi0gIDB4MWUsIDB4ZmYsIDB4M2YsIDB4NjYsIDB4YTYsIDB4YjEsIDB4ODYsIDB4MjYsIDB4NTYsIDB4OTMsIDB4YWEsIDB4NTUsCi0gIDB4MjgsIDB4MDQsIDB4ODIsIDB4YmEsIDB4ZDUsIDB4ZGUsIDB4ZDAsIDB4OTcsIDB4YzAsIDB4NWIsIDB4MmEsIDB4NDksCi0gIDB4MjQsIDB4ZmYsIDB4YzEsIDB4M2IsIDB4YjYsIDB4MGMsIDB4NWIsIDB4MWMsIDB4YzIsIDB4YTEsIDB4YjksIDB4YTcsCi0gIDB4MzQsIDB4ZGIsIDB4YzcsIDB4NmUsIDB4NDksIDB4NzksIDB4ZDQsIDB4NmMsIDB4NmMsIDB4MGEsIDB4YjcsIDB4ZWIsCi0gIDB4NTUsIDB4NjIsIDB4N2EsIDB4ZDEsIDB4NTcsIDB4NDIsIDB4MWEsIDB4NDYsIDB4YWEsIDB4ZjcsIDB4ODEsIDB4NTUsCi0gIDB4Y2QsIDB4MTQsIDB4YTksIDB4MTQsIDB4Y2IsIDB4ZmEsIDB4NjUsIDB4MTYsIDB4NjUsIDB4ZTYsIDB4NjQsIDB4Y2UsCi0gIDB4OTEsIDB4NzcsIDB4NDUsIDB4ZWMsIDB4OWIsIDB4ZWMsIDB4MTcsIDB4NGIsIDB4YjgsIDB4MzEsIDB4NDksIDB4NWEsCi0gIDB4NTMsIDB4OGUsIDB4YWIsIDB4YzksIDB4NDksIDB4ZDcsIDB4MWMsIDB4OTMsIDB4ZjgsIDB4MWYsIDB4MjUsIDB4MTIsCi0gIDB4MzUsIDB4N2IsIDB4MzQsIDB4ODksIDB4NWYsIDB4OWYsIDB4MjcsIDB4NjEsIDB4MGEsIDB4ZGMsIDB4MmIsIDB4MDAsCi0gIDB4NzcsIDB4MDIsIDB4NjUsIDB4NjIsIDB4YTUsIDB4ZTgsIDB4YTMsIDB4YjcsIDB4MGQsIDB4ZmMsIDB4ZWUsIDB4YTYsCi0gIDB4NzksIDB4ODIsIDB4YzYsIDB4M2YsIDB4YTcsIDB4M2MsIDB4NTYsIDB4ZjAsIDB4ZDYsIDB4ODAsIDB4YzgsIDB4ZGQsCi0gIDB4NzEsIDB4MzMsIDB4MjMsIDB4NmIsIDB4ODIsIDB4ZDEsIDB4MDUsIDB4YzksIDB4ODQsIDB4ODAsIDB4MTMsIDB4ODUsCi0gIDB4ZDQsIDB4YTgsIDB4ODUsIDB4ODUsIDB4MjAsIDB4NmEsIDB4MjUsIDB4NzUsIDB4M2IsIDB4MWEsIDB4ZGQsIDB4ZTUsCi0gIDB4NGMsIDB4OTAsIDB4MmEsIDB4MGIsIDB4ODUsIDB4YWQsIDB4YjAsIDB4NTAsIDB4MmQsIDB4MjksIDB4YmMsIDB4MmIsCi0gIDB4NDUsIDB4YWYsIDB4N2QsIDB4M2MsIDB4MDAsIDB4OWMsIDB4YjgsIDB4OTksIDB4MTgsIDB4NDMsIDB4MzEsIDB4NTUsCi0gIDB4OTUsIDB4NGIsIDB4MDAsIDB4NDQsIDB4YjEsIDB4NjYsIDB4YmQsIDB4OTIsIDB4YWEsIDB4ZTQsIDB4OTcsIDB4NTAsCi0gIDB4M2QsIDB4NTUsIDB4YWUsIDB4NjgsIDB4NmUsIDB4ZGEsIDB4NmIsIDB4ZGQsIDB4YjUsIDB4ZTcsIDB4ZWUsIDB4N2IsCi0gIDB4MDMsIDB4NWQsIDB4MGEsIDB4OWEsIDB4MjUsIDB4OTIsIDB4ZTcsIDB4MmUsIDB4YzYsIDB4ZTQsIDB4YjgsIDB4NDgsCi0gIDB4MmIsIDB4OGIsIDB4YzksIDB4ZTUsIDB4YWEsIDB4MTIsIDB4MzMsIDB4MmQsIDB4MjEsIDB4NjMsIDB4NDIsIDB4NTQsCi0gIDB4NzcsIDB4NDEsIDB4N2IsIDB4ZDcsIDB4YTMsIDB4MjgsIDB4NjAsIDB4ZTEsIDB4OWMsIDB4YTgsIDB4YmQsIDB4YzEsCi0gIDB4ZGQsIDB4MjksIDB4ZGMsIDB4OTgsIDB4NTQsIDB4OGUsIDB4ODUsIDB4NmMsIDB4NDcsIDB4ODMsIDB4MzcsIDB4NzUsCi0gIDB4ZWIsIDB4ZWYsIDB4YzMsIDB4YTEsIDB4ZTMsIDB4ZjAsIDB4ZDAsIDB4NzgsIDB4ZWUsIDB4MzQsIDB4YjMsIDB4NjMsCi0gIDB4NTUsIDB4YjIsIDB4ZTIsIDB4MDAsIDB4NTIsIDB4NzAsIDB4NzUsIDB4ZDUsIDB4ZmYsIDB4YTEsIDB4MDAsIDB4MjMsCi0gIDB4MDAsIDB4ZDksIDB4N2MsIDB4YmUsIDB4Y2EsIDB4ZGEsIDB4OTMsIDB4MzIsIDB4YTgsIDB4ZDYsIDB4MmUsIDB4ODgsCi0gIDB4OWEsIDB4ZWIsIDB4MjcsIDB4NDAsIDB4YTAsIDB4N2IsIDB4NjQsIDB4MmQsIDB4MTIsIDB4MzMsIDB4YjMsIDB4ZDUsCi0gIDB4ZWQsIDB4ZWEsIDB4YzUsIDB4ZTgsIDB4N2IsIDB4MWEsIDB4NGMsIDB4MDIsIDB4MzUsIDB4YTQsIDB4ODAsIDB4YjUsCi0gIDB4ZDAsIDB4OTgsIDB4MTAsIDB4MmEsIDB4ZWIsIDB4NDIsIDB4OGIsIDB4YjcsIDB4MmEsIDB4NTIsIDB4NGQsIDB4MzAsCi0gIDB4MGUsIDB4MjEsIDB4MWEsIDB4OGYsIDB4YzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4ZmYsIDB4MzUsIDB4NmIsIDB4YTUsCi0gIDB4YjEsIDB4MDYsIDB4MDAsIDB4NDYsIDB4OTQsIDB4ZGEsIDB4MTcsIDB4OTcsIDB4YzUsIDB4YTMsIDB4MmUsIDB4ZGEsCi0gIDB4MDQsIDB4NDAsIDB4MWYsIDB4NzQsIDB4ZjQsIDB4NGUsIDB4MmUsIDB4ZjgsIDB4M2EsIDB4NTcsIDB4NTIsIDB4NzcsCi0gIDB4ZjUsIDB4YTQsIDB4NmEsIDB4OWMsIDB4NTIsIDB4YzksIDB4ZjgsIDB4MjcsIDB4ZTksIDB4YTcsIDB4OTYsIDB4MDcsCi0gIDB4ZmMsIDB4NDIsIDB4ZTcsIDB4NDIsIDB4NzMsIDB4M2YsIDB4NDUsIDB4NjksIDB4NWYsIDB4ZGUsIDB4ZWEsIDB4Y2QsCi0gIDB4ZWIsIDB4ZWEsIDB4YTksIDB4N2UsIDB4NzYsIDB4YzEsIDB4MmYsIDB4NTksIDB4NWMsIDB4ZmQsIDB4OWEsIDB4ZDUsCi0gIDB4YjAsIDB4NWMsIDB4MjcsIDB4YzEsIDB4NWMsIDB4NWIsIDB4MDksIDB4M2MsIDB4YjcsIDB4NmQsIDB4ZGEsIDB4NzMsCi0gIDB4ZmEsIDB4YzYsIDB4YzUsIDB4NjUsIDB4YzQsIDB4NjAsIDB4NzgsIDB4ZTYsIDB4MmEsIDB4M2UsIDB4NWQsIDB4YmEsCi0gIDB4YjQsIDB4NTQsIDB4MmIsIDB4MTgsIDB4MTgsIDB4ZDcsIDB4OTUsIDB4MjIsIDB4YTAsIDB4OWEsIDB4MzgsIDB4ZDQsCi0gIDB4MzIsIDB4YTQsIDB4MDksIDB4MzYsIDB4ZjMsIDB4MjIsIDB4ZTEsIDB4MDMsIDB4YzIsIDB4NDAsIDB4ODQsIDB4MTMsCi0gIDB4NDcsIDB4MzcsIDB4NjUsIDB4MzYsIDB4YWYsIDB4NzUsIDB4NWQsIDB4ZDgsIDB4N2IsIDB4NjYsIDB4ZmIsIDB4Y2QsCi0gIDB4OGUsIDB4M2EsIDB4M2EsIDB4ZTEsIDB4OGEsIDB4YjksIDB4MzAsIDB4MTksIDB4MDQsIDB4MDAsIDB4ZDIsIDB4OTgsCi0gIDB4NjksIDB4YTUsIDB4Y2IsIDB4YzIsIDB4ZjIsIDB4NmYsIDB4OGYsIDB4MjAsIDB4YmIsIDB4MTMsIDB4ZWQsIDB4ZTUsCi0gIDB4MGEsIDB4NzMsIDB4OTAsIDB4NGMsIDB4MTcsIDB4NTIsIDB4MmQsIDB4MzgsIDB4ODMsIDB4N2UsIDB4ZjgsIDB4ZDMsCi0gIDB4MTQsIDB4NzEsIDB4MTcsIDB4ODQsIDB4NmQsIDB4NmIsIDB4ZGUsIDB4MDIsIDB4MmYsIDB4MzQsIDB4MzcsIDB4NjYsCi0gIDB4OTMsIDB4OTEsIDB4MGEsIDB4MjcsIDB4MWUsIDB4MzgsIDB4NjIsIDB4ODQsIDB4NmMsIDB4YTAsIDB4NTIsIDB4ZDcsCi0gIDB4YTQsIDB4ZTIsIDB4OTQsIDB4Y2UsIDB4ODMsIDB4NjksIDB4YjYsIDB4MTgsIDB4MDIsIDB4NzYsIDB4ZTcsIDB4NDMsCi0gIDB4NjEsIDB4MTAsIDB4OTgsIDB4NDgsIDB4MTIsIDB4MzAsIDB4OWQsIDB4NjAsIDB4MDAsIDB4MjIsIDB4ZTYsIDB4NGYsCi0gIDB4MmIsIDB4NDMsIDB4NGEsIDB4M2EsIDB4YzIsIDB4ZTAsIDB4MzcsIDB4MTAsIDB4M2YsIDB4ZTQsIDB4MzYsIDB4YjgsCi0gIDB4NDQsIDB4NTMsIDB4YjEsIDB4ZjksIDB4NTMsIDB4NTEsIDB4ZDYsIDB4YTgsIDB4MjUsIDB4MDYsIDB4NzAsIDB4YmQsCi0gIDB4NTAsIDB4ZWMsIDB4ZGUsIDB4ZmIsIDB4YWYsIDB4ODAsIDB4Y2EsIDB4YzAsIDB4ZjMsIDB4OWMsIDB4ZDEsIDB4YzksCi0gIDB4MzMsIDB4MmQsIDB4MDIsIDB4NTIsIDB4ODMsIDB4YzUsIDB4N2IsIDB4NWEsIDB4NjcsIDB4NDMsIDB4ZjgsIDB4ZmYsCi0gIDB4NTIsIDB4MzYsIDB4YWMsIDB4ZDIsIDB4NjQsIDB4ZTEsIDB4OTIsIDB4MzgsIDB4N2EsIDB4YTIsIDB4ZWMsIDB4NWQsCi0gIDB4OGEsIDB4M2MsIDB4MDgsIDB4MmUsIDB4OGUsIDB4MzYsIDB4ZWMsIDB4OGUsIDB4NjIsIDB4NTEsIDB4ODIsIDB4ZTYsCi0gIDB4Y2UsIDB4NTMsIDB4ODgsIDB4ZGIsIDB4NzIsIDB4ZDAsIDB4M2EsIDB4N2IsIDB4OGIsIDB4ZGUsIDB4YmYsIDB4MWYsCi0gIDB4MGEsIDB4ODksIDB4MWMsIDB4YzUsIDB4YWIsIDB4YzgsIDB4YTUsIDB4NTksIDB4YmQsIDB4MWIsIDB4YjUsIDB4ZmMsCi0gIDB4YTksIDB4OTksIDB4MjMsIDB4ZjEsIDB4MTcsIDB4MmQsIDB4YmUsIDB4YzQsIDB4ZjUsIDB4OWMsIDB4NGQsIDB4ZTMsCi0gIDB4N2IsIDB4MmMsIDB4OWIsIDB4NjUsIDB4OGYsIDB4NWYsIDB4ZTMsIDB4MTMsIDB4OTAsIDB4MDgsIDB4YWQsIDB4MzgsCi0gIDB4YWQsIDB4ZDQsIDB4ZGUsIDB4NWIsIDB4YmQsIDB4ZjksIDB4MzIsIDB4N2MsIDB4MTMsIDB4ZWIsIDB4ZTYsIDB4ZTcsCi0gIDB4YjYsIDB4MWEsIDB4MjEsIDB4NjksIDB4YzYsIDB4MmYsIDB4MjQsIDB4NmIsIDB4MDgsIDB4MjksIDB4ZDEsIDB4NGMsCi0gIDB4MzQsIDB4ZDEsIDB4MzEsIDB4ODgsIDB4ODQsIDB4M2QsIDB4YTksIDB4ZjAsIDB4ZTksIDB4NTksIDB4YTEsIDB4MTksCi0gIDB4OTcsIDB4NGUsIDB4NzksIDB4Y2QsIDB4ZWIsIDB4Y2IsIDB4OWUsIDB4MjcsIDB4NGIsIDB4MjMsIDB4MzIsIDB4MjMsCi0gIDB4YTYsIDB4NmQsIDB4MDYsIDB4MDgsIDB4YjAsIDB4ZTgsIDB4NTMsIDB4ODIsIDB4NzAsIDB4YWEsIDB4MzIsIDB4MzksCi0gIDB4ODAsIDB4ZWYsIDB4MTYsIDB4ODIsIDB4ZGMsIDB4ZWUsIDB4N2YsIDB4NzAsIDB4NzAsIDB4NGEsIDB4ZDEsIDB4Y2IsCi0gIDB4NGUsIDB4OTQsIDB4MmEsIDB4NGIsIDB4MmEsIDB4NTcsIDB4MDUsIDB4NDUsIDB4NDYsIDB4MWMsIDB4NjcsIDB4MDIsCi0gIDB4MmYsIDB4ZDMsIDB4MTgsIDB4ZjIsIDB4OTIsIDB4MDMsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OGQsIDB4MDAsIDB4MDAsCi0gIDB4MGUsIDB4MDEsIDB4ZmYsIDB4MzcsIDB4NjQsIDB4YTcsIDB4YjIsIDB4NDgsIDB4NDIsIDB4NDQsIDB4MTAsIDB4OTgsCi0gIDB4MjQsIDB4ODMsIDB4MjUsIDB4NTgsIDB4YmIsIDB4YmEsIDB4YjQsIDB4MzQsIDB4YjgsIDB4MDAsIDB4NTgsIDB4NmMsCi0gIDB4ZWUsIDB4ZGYsIDB4ZmEsIDB4OGQsIDB4MTAsIDB4MmYsIDB4MWIsIDB4YzQsIDB4NDksIDB4ODAsIDB4YmEsIDB4ZWYsCi0gIDB4Y2UsIDB4ZGIsIDB4ZjgsIDB4N2QsIDB4M2IsIDB4MWIsIDB4NmEsIDB4Y2EsIDB4ZmQsIDB4OTIsIDB4NmIsIDB4NWYsCi0gIDB4MjUsIDB4YWIsIDB4NjIsIDB4ZjAsIDB4MjYsIDB4MTQsIDB4M2MsIDB4NDcsIDB4OTUsIDB4NDgsIDB4MzYsIDB4OGEsCi0gIDB4ODIsIDB4NzUsIDB4NGMsIDB4NmYsIDB4ODEsIDB4ZTYsIDB4YmQsIDB4MjMsIDB4MTcsIDB4MzMsIDB4MGYsIDB4NGMsCi0gIDB4ZmIsIDB4MjUsIDB4NWMsIDB4MjYsIDB4MWUsIDB4MmIsIDB4YTcsIDB4ODcsIDB4ZmMsIDB4OTQsIDB4Y2QsIDB4MmUsCi0gIDB4NDMsIDB4NjMsIDB4NDAsIDB4ZDAsIDB4ZjQsIDB4YWYsIDB4ZmUsIDB4MGYsIDB4ZTYsIDB4NGQsIDB4OGQsIDB4NjYsCi0gIDB4OWUsIDB4ZmMsIDB4NzMsIDB4YWUsIDB4ZWEsIDB4M2MsIDB4NjQsIDB4YTIsIDB4Y2EsIDB4YTcsIDB4NTEsIDB4YTYsCi0gIDB4YWUsIDB4YWIsIDB4MWYsIDB4NjYsIDB4NjEsIDB4NjAsIDB4ZGQsIDB4OWMsIDB4YmIsIDB4ZGIsIDB4YjMsIDB4MGYsCi0gIDB4OGYsIDB4NjcsIDB4N2QsIDB4M2MsIDB4MzgsIDB4YTIsIDB4NjcsIDB4MTIsIDB4ZWYsIDB4YmUsIDB4NDksIDB4ZjMsCi0gIDB4ODAsIDB4OGMsIDB4ZTEsIDB4OWQsIDB4OWQsIDB4MjUsIDB4NDAsIDB4MzcsIDB4OWQsIDB4NjEsIDB4NGEsIDB4OTksCi0gIDB4MjcsIDB4Y2UsIDB4MGMsIDB4ODAsIDB4NjAsIDB4ZjgsIDB4ZmUsIDB4ZGIsIDB4MWMsIDB4YWYsIDB4YTMsIDB4ZmIsCi0gIDB4MzQsIDB4ZTgsIDB4MDQsIDB4MGIsIDB4MjksIDB4ZjUsIDB4OGEsIDB4NzQsIDB4NDMsIDB4ODQsIDB4NjIsIDB4NTIsCi0gIDB4MzksIDB4ZjgsIDB4MDUsIDB4YTIsIDB4ZDYsIDB4NjEsIDB4ZDcsIDB4MTQsIDB4ODcsIDB4ZTgsIDB4ZTUsIDB4NTMsCi0gIDB4NDYsIDB4NWUsIDB4MWQsIDB4MjksIDB4MWIsIDB4NWUsIDB4YTUsIDB4NDQsIDB4OTYsIDB4ZWQsIDB4YTcsIDB4MzgsCi0gIDB4MjEsIDB4NDEsIDB4YjUsIDB4NDEsIDB4NmIsIDB4ZDgsIDB4MmEsIDB4NGQsIDB4NDAsIDB4YmYsIDB4OWYsIDB4ODksCi0gIDB4MmQsIDB4NjUsIDB4NmUsIDB4MTMsIDB4ZjYsIDB4ZmEsIDB4M2IsIDB4ODUsIDB4MGEsIDB4MmUsIDB4NzEsIDB4NGMsCi0gIDB4MDAsIDB4NjQsIDB4YjIsIDB4ZTUsIDB4M2YsIDB4MGIsIDB4ZjAsIDB4OGUsIDB4MDksIDB4YzEsIDB4NjAsIDB4MTEsCi0gIDB4MjksIDB4ZDUsIDB4M2EsIDB4NjUsIDB4NGMsIDB4ZTYsIDB4MmUsIDB4YTEsIDB4MjYsIDB4OTMsIDB4MGIsIDB4YjcsCi0gIDB4YzEsIDB4M2YsIDB4ODYsIDB4NmYsIDB4YTgsIDB4Y2MsIDB4NDksIDB4ODAsIDB4ZDEsIDB4NTAsIDB4YWEsIDB4ZWMsCi0gIDB4NWUsIDB4MmQsIDB4M2QsIDB4NzgsIDB4YzYsIDB4NGYsIDB4M2UsIDB4Y2MsIDB4YzgsIDB4YTQsIDB4MDAsIDB4Y2YsCi0gIDB4ZjksIDB4NzgsIDB4NzcsIDB4YzAsIDB4NDYsIDB4OGUsIDB4NDcsIDB4ZjYsIDB4OWUsIDB4ZjksIDB4OGQsIDB4NDYsCi0gIDB4YjcsIDB4ODcsIDB4Y2IsIDB4MTYsIDB4Y2YsIDB4MzUsIDB4ZWEsIDB4ZDUsIDB4N2IsIDB4MDcsIDB4NjQsIDB4YWUsCi0gIDB4NzAsIDB4MTgsIDB4ZGQsIDB4NTgsIDB4YmMsIDB4ZjIsIDB4ZjcsIDB4YTgsIDB4NDksIDB4MDcsIDB4MjYsIDB4OWMsCi0gIDB4Y2IsIDB4NDQsIDB4NWYsIDB4MTUsIDB4NzMsIDB4ZjEsIDB4YjYsIDB4Y2IsIDB4MDUsIDB4ZTksIDB4ZTYsIDB4YmUsCi0gIDB4NjAsIDB4ZGQsIDB4Y2UsIDB4ZDksIDB4MDcsIDB4NjUsIDB4ZDEsIDB4ZjQsIDB4YzksIDB4NjksIDB4MmEsIDB4NDIsCi0gIDB4OWIsIDB4ZjAsIDB4ZjQsIDB4ODksIDB4MTQsIDB4NDMsIDB4NTYsIDB4ZjYsIDB4ZDksIDB4MjMsIDB4NDYsIDB4YjIsCi0gIDB4ZjMsIDB4ODAsIDB4YTcsIDB4MmQsIDB4ODEsIDB4NzksIDB4OTIsIDB4NGMsIDB4ZjcsIDB4MTYsIDB4MzIsIDB4ZjEsCi0gIDB4YjYsIDB4MmQsIDB4N2IsIDB4MTMsIDB4OWYsIDB4ZGEsIDB4YWIsIDB4NWUsIDB4NDEsIDB4MzYsIDB4YjUsIDB4NTcsCi0gIDB4OGMsIDB4MTMsIDB4ZmYsIDB4ZGEsIDB4ZTcsIDB4N2EsIDB4NGEsIDB4ZDUsIDB4YWMsIDB4ZDAsIDB4NDAsIDB4YWIsCi0gIDB4ODgsIDB4YjQsIDB4MTEsIDB4MGUsIDB4MDAsIDB4MDEsIDB4NTIsIDB4NDUsIDB4MWYsIDB4YWQsIDB4ODIsIDB4NjUsCi0gIDB4MjksIDB4OWIsIDB4YzksIDB4ZWEsIDB4ZTQsIDB4OWIsIDB4OWQsIDB4NGUsIDB4NzQsIDB4MTEsIDB4NDQsIDB4MGUsCi0gIDB4MjEsIDB4MWEsIDB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MzEsIDB4NjgsIDB4YTIsIDB4YzEsCi0gIDB4ZDAsIDB4YTMsIDB4MTAsIDB4MDksIDB4NTYsIDB4NmYsIDB4NGIsIDB4MjUsIDB4NmEsIDB4MGQsIDB4NTgsIDB4Y2QsCi0gIDB4NWQsIDB4NTMsIDB4N2MsIDB4MzIsIDB4YzUsIDB4MDAsIDB4MDksIDB4MzQsIDB4N2IsIDB4ZTYsIDB4YTMsIDB4MWYsCi0gIDB4YzQsIDB4NGEsIDB4YzEsIDB4YmEsIDB4MTYsIDB4ZjEsIDB4ZmYsIDB4MmMsIDB4NzUsIDB4MzAsIDB4ZjAsIDB4NWUsCi0gIDB4NjgsIDB4Y2YsIDB4N2EsIDB4YTIsIDB4MjMsIDB4NjksIDB4NzEsIDB4NTksIDB4NWIsIDB4ZjcsIDB4ZjQsIDB4MzcsCi0gIDB4MDYsIDB4NzUsIDB4YzgsIDB4YTQsIDB4MmMsIDB4Y2YsIDB4Y2QsIDB4ZTQsIDB4NTksIDB4ZGMsIDB4Y2QsIDB4NTksCi0gIDB4YWUsIDB4MzQsIDB4N2MsIDB4MmMsIDB4MzYsIDB4YmIsIDB4OTQsIDB4YzEsIDB4ZGIsIDB4NzAsIDB4ZTYsIDB4ZjMsCi0gIDB4MDQsIDB4OWIsIDB4MDksIDB4NWUsIDB4OTQsIDB4YzksIDB4MmQsIDB4ZDksIDB4MjMsIDB4NzgsIDB4ZjcsIDB4OWEsCi0gIDB4NDksIDB4Y2QsIDB4YTIsIDB4OGQsIDB4ZjUsIDB4YWIsIDB4NWMsIDB4MjcsIDB4NWYsIDB4OGMsIDB4YWYsIDB4ZDMsCi0gIDB4NGYsIDB4OWEsIDB4MDAsIDB4Y2EsIDB4ZjUsIDB4NTUsIDB4NzksIDB4NzcsIDB4ODksIDB4ODAsIDB4YTksIDB4NDUsCi0gIDB4ZTksIDB4MDIsIDB4MDUsIDB4YzEsIDB4MDIsIDB4YjcsIDB4NTEsIDB4NDIsIDB4MTAsIDB4MDEsIDB4MmIsIDB4N2UsCi0gIDB4YTYsIDB4YTEsIDB4NDIsIDB4YTksIDB4OTYsIDB4OGMsIDB4YTcsIDB4MzIsIDB4NTEsIDB4NWIsIDB4NDAsIDB4MzksCi0gIDB4MDAsIDB4MDUsIDB4OTUsIDB4ZjMsIDB4NTYsIDB4N2QsIDB4NmEsIDB4YzcsIDB4ODEsIDB4Y2UsIDB4NWQsIDB4ODAsCi0gIDB4MDksIDB4ZDUsIDB4MjAsIDB4NGQsIDB4ZGQsIDB4ZDAsIDB4NGMsIDB4MTQsIDB4MjAsIDB4YjEsIDB4MmIsIDB4MjksCi0gIDB4OTcsIDB4MTQsIDB4OWMsIDB4ZjEsIDB4NmIsIDB4MGQsIDB4MzgsIDB4YjQsIDB4MGIsIDB4M2EsIDB4MDgsIDB4MGUsCi0gIDB4YzYsIDB4ZmMsIDB4MTYsIDB4NjMsIDB4ZjcsIDB4YTksIDB4OWMsIDB4OGEsIDB4N2YsIDB4MzEsIDB4ZDEsIDB4ZmYsCi0gIDB4NjUsIDB4YTksIDB4ODksIDB4YWMsIDB4MmQsIDB4ZDUsIDB4NGMsIDB4MzEsIDB4MWUsIDB4OTEsIDB4YzcsIDB4Y2IsCi0gIDB4YWEsIDB4YTQsIDB4OWEsIDB4Y2MsIDB4OTgsIDB4ZWYsIDB4NTQsIDB4OTMsIDB4MTAsIDB4NzAsIDB4MTMsIDB4NzAsCi0gIDB4MGQsIDB4OTEsIDB4NzcsIDB4OWIsIDB4YjgsIDB4ZjEsIDB4ZDcsIDB4MjYsIDB4N2YsIDB4ZjEsIDB4OTcsIDB4YWUsCi0gIDB4ZGIsIDB4NTcsIDB4ZGYsIDB4OGQsIDB4Y2EsIDB4YTAsIDB4ZTYsIDB4NmQsIDB4ZDEsIDB4YjIsIDB4YjEsIDB4NWMsCi0gIDB4NWYsIDB4MmMsIDB4M2IsIDB4YjUsIDB4YmUsIDB4YjEsIDB4ZDUsIDB4OTQsIDB4MTgsIDB4MzEsIDB4M2QsIDB4YWQsCi0gIDB4NGYsIDB4MzYsIDB4M2IsIDB4MjMsIDB4MTcsIDB4ZDAsIDB4YWMsIDB4ZTYsIDB4MjgsIDB4ZWUsIDB4ZTMsIDB4YzMsCi0gIDB4YTIsIDB4YjEsIDB4NGQsIDB4YjksIDB4MzcsIDB4ZTQsIDB4NTcsIDB4MzQsIDB4MzEsIDB4NTYsIDB4MjksIDB4ODksCi0gIDB4ZTcsIDB4ZDgsIDB4OGIsIDB4NjUsIDB4YjUsIDB4NzAsIDB4ZGIsIDB4MzgsIDB4NDYsIDB4NjUsIDB4NTksIDB4YzIsCi0gIDB4OTAsIDB4OGEsIDB4YmMsIDB4YzIsIDB4OGMsIDB4MzUsIDB4M2UsIDB4MGUsIDB4NWEsIDB4NjEsIDB4MWEsIDB4ZGIsCi0gIDB4MzAsIDB4YTIsIDB4NTAsIDB4NzcsIDB4M2IsIDB4NzUsIDB4MmEsIDB4MWIsIDB4YWEsIDB4ZjIsIDB4MzEsIDB4YmEsCi0gIDB4ODMsIDB4OTMsIDB4OGEsIDB4YmEsIDB4ODIsIDB4NGUsIDB4NmMsIDB4NTcsIDB4ODYsIDB4OTYsIDB4ZDksIDB4NTksCi0gIDB4YjIsIDB4YzcsIDB4NDUsIDB4ZDEsIDB4ZWIsIDB4NTEsIDB4MzksIDB4ZTYsIDB4YmQsIDB4ZGMsIDB4NzAsIDB4ZDMsCi0gIDB4YzIsIDB4MTcsIDB4YTUsIDB4MjksIDB4Y2YsIDB4MTksIDB4ZjEsIDB4ZjEsIDB4NjIsIDB4OGIsIDB4MjUsIDB4N2YsCi0gIDB4YmMsIDB4MGIsIDB4MjksIDB4NzgsIDB4YTEsIDB4ZjYsIDB4YzUsIDB4YjIsIDB4ZjcsIDB4NWYsIDB4Y2IsIDB4ODQsCi0gIDB4YjgsIDB4ZGMsIDB4MWIsIDB4NzMsIDB4NTgsIDB4MWEsIDB4MzMsIDB4NGMsIDB4YWEsIDB4NTUsIDB4MmMsIDB4YWUsCi0gIDB4NGEsIDB4MzIsIDB4MjUsIDB4MTksIDB4ODMsIDB4ODEsIDB4YTcsIDB4MmEsIDB4NDAsIDB4ZTAsIDB4MjEsIDB4MWEsCi0gIDB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZmYsIDB4M2YsIDB4NmEsIDB4ODQsIDB4YTAsIDB4ODYsIDB4YTksCi0gIDB4YjcsIDB4YzEsIDB4MTUsIDB4MmEsIDB4OTUsIDB4YTEsIDB4NWEsIDB4MzgsIDB4NjksIDB4YWIsIDB4YTMsIDB4MDMsCi0gIDB4ODAsIDB4MTksIDB4NmIsIDB4NzIsIDB4N2UsIDB4NjUsIDB4N2MsIDB4YjYsIDB4ZTMsIDB4ZTgsIDB4OWMsIDB4NjYsCi0gIDB4YmMsIDB4ZTEsIDB4NDEsIDB4NzMsIDB4ZWEsIDB4NDIsIDB4ZGMsIDB4NGYsIDB4ZGMsIDB4MzUsIDB4ZmQsIDB4NzMsCi0gIDB4Y2YsIDB4NDgsIDB4ZWIsIDB4ZmIsIDB4YjcsIDB4ZTAsIDB4MjIsIDB4OGIsIDB4N2YsIDB4OWIsIDB4NDAsIDB4ODksCi0gIDB4MzgsIDB4MDksIDB4NGYsIDB4ODYsIDB4MWIsIDB4MDIsIDB4OWYsIDB4MTcsIDB4ODgsIDB4OWIsIDB4MGQsIDB4YTUsCi0gIDB4ZTAsIDB4MzksIDB4MmIsIDB4YzYsIDB4MjIsIDB4NDUsIDB4NjIsIDB4MzcsIDB4ZTQsIDB4NDMsIDB4MmQsIDB4YjgsCi0gIDB4OGQsIDB4YzAsIDB4NmYsIDB4NWYsIDB4NmUsIDB4ZWMsIDB4N2MsIDB4YmIsIDB4OTQsIDB4MjAsIDB4OGIsIDB4YzksCi0gIDB4OWYsIDB4OTQsIDB4MmMsIDB4MTUsIDB4YWEsIDB4YjEsIDB4MDIsIDB4NjIsIDB4MjcsIDB4MTIsIDB4NzksIDB4ZTQsCi0gIDB4MDQsIDB4MDAsIDB4OWQsIDB4NjYsIDB4Y2IsIDB4N2EsIDB4ZmMsIDB4NWUsIDB4OTksIDB4YzQsIDB4NGMsIDB4NTksCi0gIDB4MTgsIDB4YTgsIDB4ODEsIDB4ZDgsIDB4NWIsIDB4YWEsIDB4ODAsIDB4MDAsIDB4NTUsIDB4NjQsIDB4ZjYsIDB4MDEsCi0gIDB4OTcsIDB4MjEsIDB4MGYsIDB4NmEsIDB4ZjksIDB4N2UsIDB4NzQsIDB4NTAsIDB4YzgsIDB4YjIsIDB4ZTAsIDB4MTQsCi0gIDB4MTYsIDB4ZmEsIDB4MzksIDB4MTQsIDB4NWUsIDB4OTAsIDB4MWQsIDB4YWQsIDB4MWMsIDB4MDEsIDB4YWQsIDB4ZmIsCi0gIDB4MjEsIDB4NzEsIDB4ZDEsIDB4NjgsIDB4OGEsIDB4MDcsIDB4YTYsIDB4NDIsIDB4M2MsIDB4MjQsIDB4NmQsIDB4NTUsCi0gIDB4MmYsIDB4N2YsIDB4NzIsIDB4ZjEsIDB4YWEsIDB4YzgsIDB4M2UsIDB4YmYsIDB4NDIsIDB4ODAsIDB4OTUsIDB4NzMsCi0gIDB4MzcsIDB4M2IsIDB4YTEsIDB4YzcsIDB4MDYsIDB4ZDcsIDB4N2MsIDB4YWQsIDB4ZWIsIDB4ZjksIDB4ZGMsIDB4N2QsCi0gIDB4ZjEsIDB4NDEsIDB4MDMsIDB4NDcsIDB4ZjcsIDB4ZjcsIDB4NGYsIDB4NzEsIDB4ZjcsIDB4ZTcsIDB4NzIsIDB4OWUsCi0gIDB4OTMsIDB4ZTUsIDB4OGMsIDB4OGQsIDB4YjcsIDB4MzcsIDB4M2QsIDB4ZTMsIDB4Y2YsIDB4M2MsIDB4YWIsIDB4MzMsCi0gIDB4MDcsIDB4YTgsIDB4ZjUsIDB4ZWUsIDB4MzgsIDB4Y2UsIDB4M2IsIDB4ZjksIDB4M2MsIDB4ZGEsIDB4NzMsIDB4ZTEsCi0gIDB4YjEsIDB4MmEsIDB4NmEsIDB4NTksIDB4N2IsIDB4MGMsIDB4YTIsIDB4NDAsIDB4MWEsIDB4YjUsIDB4YzUsIDB4YmQsCi0gIDB4YjIsIDB4N2YsIDB4NWQsIDB4MzYsIDB4ZTAsIDB4OWQsIDB4OGMsIDB4YWUsIDB4MGEsIDB4MzAsIDB4ZGMsIDB4YjYsCi0gIDB4MTcsIDB4NGUsIDB4ZjEsIDB4NmYsIDB4YTIsIDB4NTAsIDB4YWEsIDB4MjMsIDB4YTgsIDB4ZTAsIDB4NDcsIDB4MjcsCi0gIDB4MGQsIDB4ZWYsIDB4NDksIDB4NGYsIDB4ZGYsIDB4YjQsIDB4YzksIDB4ZDEsIDB4M2EsIDB4YmUsIDB4MTEsIDB4NDIsCi0gIDB4YTUsIDB4MzgsIDB4YWQsIDB4ZDYsIDB4ZDAsIDB4OGYsIDB4YTAsIDB4OTMsIDB4ODksIDB4MGUsIDB4ZmQsIDB4MTQsCi0gIDB4ZDgsIDB4ODYsIDB4MDgsIDB4ZjAsIDB4ODEsIDB4YmEsIDB4OTUsIDB4NTIsIDB4NmMsIDB4Y2MsIDB4OGEsIDB4MGIsCi0gIDB4ZGEsIDB4NjIsIDB4MTAsIDB4MDQsIDB4NTAsIDB4MmIsIDB4ZGEsIDB4ZTQsIDB4Y2UsIDB4NjIsIDB4MTIsIDB4YTQsCi0gIDB4MDAsIDB4ODMsIDB4NzIsIDB4ODEsIDB4MDIsIDB4OTYsIDB4YjIsIDB4YTksIDB4MjEsIDB4MTAsIDB4MDAsIDB4MzgsCi0gIDB4MjEsIDB4MWEsIDB4OGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4MzcsIDB4NjUsIDB4YTQsIDB4ZDgsCi0gIDB4ZTgsIDB4NmMsIDB4M2EsIDB4MTMsIDB4MDgsIDB4NWUsIDB4MGIsIDB4ZDUsIDB4NjQsIDB4YWEsIDB4ZDUsIDB4NTQsCi0gIDB4ZDEsIDB4MWEsIDB4NWMsIDB4MGIsIDB4MDEsIDB4MGUsIDB4MDIsIDB4NDcsIDB4ZWYsIDB4MGYsIDB4MjYsIDB4YzksCi0gIDB4YTAsIDB4YzEsIDB4ODEsIDB4MzYsIDB4NjUsIDB4NzMsIDB4NTIsIDB4ZDgsIDB4YWMsIDB4NDIsIDB4NWYsIDB4OGEsCi0gIDB4ZTYsIDB4M2IsIDB4NTcsIDB4ZWEsIDB4ZWYsIDB4MzgsIDB4NWIsIDB4MWQsIDB4NjIsIDB4MzMsIDB4NDUsIDB4MjYsCi0gIDB4OTUsIDB4YTMsIDB4YTUsIDB4OTksIDB4NzYsIDB4NGYsIDB4ZjcsIDB4N2YsIDB4OWIsIDB4ZTYsIDB4NTUsIDB4Y2EsCi0gIDB4MjksIDB4YmUsIDB4MGEsIDB4ZTEsIDB4OGMsIDB4MzEsIDB4YTAsIDB4MTIsIDB4MzQsIDB4NTgsIDB4NTYsIDB4MTcsCi0gIDB4YTQsIDB4ZjUsIDB4NjcsIDB4NjYsIDB4NjksIDB4MGMsIDB4NTUsIDB4MTUsIDB4OWYsIDB4OTgsIDB4NTIsIDB4ZTMsCi0gIDB4NmIsIDB4ZmMsIDB4M2QsIDB4MWQsIDB4ODYsIDB4ZDEsIDB4ODYsIDB4YzIsIDB4ZmQsIDB4ZjYsIDB4ZjMsIDB4MjAsCi0gIDB4YTQsIDB4OGEsIDB4MWIsIDB4MjUsIDB4ZjgsIDB4MmYsIDB4NzQsIDB4YWQsIDB4ZGIsIDB4YWUsIDB4ZTgsIDB4ODMsCi0gIDB4NWIsIDB4MWUsIDB4NzksIDB4ZGQsIDB4NWEsIDB4M2UsIDB4MzQsIDB4MjEsIDB4OWMsIDB4ZmIsIDB4NzIsIDB4YTAsCi0gIDB4MWYsIDB4MmMsIDB4MDUsIDB4ZDcsIDB4ZWMsIDB4ZjQsIDB4ZWEsIDB4YzgsIDB4NjAsIDB4OTAsIDB4YzYsIDB4OWMsCi0gIDB4YzQsIDB4YjksIDB4NTEsIDB4M2QsIDB4NzksIDB4ZDMsIDB4NmQsIDB4YjQsIDB4MjYsIDB4NzksIDB4ZDgsIDB4NDUsCi0gIDB4MDgsIDB4ODIsIDB4MTUsIDB4YjcsIDB4MzksIDB4NzIsIDB4NGMsIDB4MTgsIDB4OTMsIDB4YmMsIDB4NTIsIDB4MTIsCi0gIDB4NWEsIDB4MDUsIDB4MmQsIDB4MmIsIDB4Y2EsIDB4ZTEsIDB4MjIsIDB4ODQsIDB4YWYsIDB4NmIsIDB4MjUsIDB4NzEsCi0gIDB4OWEsIDB4NTcsIDB4NWQsIDB4YzcsIDB4ZDcsIDB4NzgsIDB4ZmYsIDB4NDUsIDB4NDgsIDB4ZDEsIDB4MjgsIDB4ZGEsCi0gIDB4NjksIDB4OTgsIDB4MDcsIDB4NTIsIDB4YTAsIDB4MDAsIDB4OGYsIDB4ZTUsIDB4N2IsIDB4ZWQsIDB4NmUsIDB4NjcsCi0gIDB4MDAsIDB4OWIsIDB4YjgsIDB4ZDEsIDB4NTgsIDB4YTIsIDB4ZjUsIDB4NDYsIDB4ZmMsIDB4MmUsIDB4ZDYsIDB4YWEsCi0gIDB4ZWIsIDB4MzQsIDB4MTcsIDB4NzcsIDB4MjIsIDB4MWEsIDB4YTMsIDB4YTIsIDB4Y2IsIDB4MDYsIDB4ZWMsIDB4ZjEsCi0gIDB4MTIsIDB4YjAsIDB4NmUsIDB4NjYsIDB4Y2UsIDB4ZDEsIDB4YTcsIDB4YTQsIDB4ZDIsIDB4NGMsIDB4MzQsIDB4YjcsCi0gIDB4MzIsIDB4NmEsIDB4N2QsIDB4NDcsIDB4ZDYsIDB4NWEsIDB4OTcsIDB4MDgsIDB4MjAsIDB4MzAsIDB4ZjQsIDB4ZDcsCi0gIDB4OWIsIDB4NGEsIDB4OTEsIDB4MzcsIDB4MDcsIDB4MTIsIDB4ZTYsIDB4MGUsIDB4NjIsIDB4ZjIsIDB4YmUsIDB4YjIsCi0gIDB4YWIsIDB4M2UsIDB4NmUsIDB4MDcsIDB4YzcsIDB4OWYsIDB4MTksIDB4ZWIsIDB4YzksIDB4N2MsIDB4OGYsIDB4NTIsCi0gIDB4YzgsIDB4OWMsIDB4YzMsIDB4OTksIDB4OWYsIDB4NzMsIDB4MTYsIDB4YTEsIDB4MmEsIDB4OWEsIDB4ZjgsIDB4NWEsCi0gIDB4NDcsIDB4YzMsIDB4MjAsIDB4MTcsIDB4YmIsIDB4MjcsIDB4NmEsIDB4NGYsIDB4ZTQsIDB4ZmMsIDB4YWMsIDB4NGQsCi0gIDB4YWYsIDB4YWEsIDB4YmYsIDB4ZjIsIDB4YzQsIDB4ZDIsIDB4MmEsIDB4YmMsIDB4NmIsIDB4N2UsIDB4OWYsIDB4NGQsCi0gIDB4OTYsIDB4ZTAsIDB4MGQsIDB4ZGMsIDB4YjEsIDB4Y2YsIDB4YjAsIDB4NzgsIDB4M2EsIDB4ZTMsIDB4NTYsIDB4OGUsCi0gIDB4OTEsIDB4MTMsIDB4ZDMsIDB4ZjYsIDB4NTksIDB4NjEsIDB4MDAsIDB4ZjgsIDB4NGIsIDB4YTQsIDB4NzIsIDB4Y2IsCi0gIDB4MjYsIDB4ZGIsIDB4NjYsIDB4NzQsIDB4NjUsIDB4ZDUsIDB4YTIsIDB4NzEsIDB4YjEsIDB4NDQsIDB4NjUsIDB4NDcsCi0gIDB4MDYsIDB4YzksIDB4NzMsIDB4MWIsIDB4YTIsIDB4OTYsIDB4MDMsIDB4YTQsIDB4NjAsIDB4YTAsIDB4ODgsIDB4ZGUsCi0gIDB4MzgsIDB4NzUsIDB4ZjYsIDB4ZjYsIDB4ZTUsIDB4ZDYsIDB4ZGEsIDB4ZTEsIDB4NWIsIDB4ZGEsIDB4OTcsIDB4MTAsCi0gIDB4NGYsIDB4YTYsIDB4NmMsIDB4MzEsIDB4ZGYsIDB4MmMsIDB4MWIsIDB4OTcsIDB4NTAsIDB4YjEsIDB4NzgsIDB4Y2QsCi0gIDB4YmEsIDB4ZmQsIDB4MTAsIDB4YTMsIDB4OTIsIDB4NDMsIDB4MWEsIDB4NjYsIDB4YTMsIDB4MjEsIDB4MTEsIDB4MTAsCi0gIDB4MmEsIDB4OGEsIDB4OTQsIDB4ZDAsIDB4MmQsIDB4ZDMsIDB4MTIsIDB4ZWIsIDB4ODAsIDB4OWMsIDB4NzcsIDB4MzgsCi0gIDB4YzEsIDB4MzAsIDB4MGUsIDB4MjEsIDB4MWEsIDB4OGUsIDB4ODAsIDB4MDQsIDB4MGYsIDB4MDEsIDB4YmYsIDB4MzMsCi0gIDB4NjcsIDB4YTMsIDB4ZDgsIDB4NjAsIDB4YTgsIDB4MzYsIDB4MTgsIDB4YzAsIDB4MTEsIDB4ZTIsIDB4NWMsIDB4YzYsCi0gIDB4YTUsIDB4NjIsIDB4ZTIsIDB4ZDEsIDB4NmIsIDB4ZDYsIDB4YTEsIDB4ODUsIDB4YzAsIDB4MWMsIDB4MTgsIDB4ODgsCi0gIDB4OTEsIDB4YTQsIDB4M2UsIDB4M2IsIDB4OWIsIDB4YjksIDB4ZDcsIDB4MjEsIDB4MDcsIDB4YmMsIDB4MzQsIDB4NDcsCi0gIDB4OGUsIDB4ZjYsIDB4NTYsIDB4OWQsIDB4ODQsIDB4NmMsIDB4ZmMsIDB4MWIsIDB4MTYsIDB4MDUsIDB4NzEsIDB4YWEsCi0gIDB4MTIsIDB4NTMsIDB4M2QsIDB4NWIsIDB4YzQsIDB4YTQsIDB4OWIsIDB4YmIsIDB4YjksIDB4ZDgsIDB4N2YsIDB4ZDAsCi0gIDB4NmMsIDB4OGQsIDB4OGIsIDB4ODQsIDB4ZGYsIDB4ZjMsIDB4ZTcsIDB4NWIsIDB4NjgsIDB4MzMsIDB4NGYsIDB4NDEsCi0gIDB4YWEsIDB4Y2EsIDB4YmYsIDB4NmYsIDB4YmMsIDB4OTUsIDB4MWMsIDB4MzcsIDB4YTIsIDB4ZDQsIDB4ZDAsIDB4Y2UsCi0gIDB4MjUsIDB4NTcsIDB4NDMsIDB4YjksIDB4NGYsIDB4NTMsIDB4YzUsIDB4OTMsIDB4MDQsIDB4ZTIsIDB4YmEsIDB4MzksCi0gIDB4NjgsIDB4ZDEsIDB4ZmUsIDB4MGEsIDB4YWEsIDB4YjMsIDB4YTgsIDB4ZDksIDB4MzAsIDB4YmQsIDB4OWEsIDB4NjcsCi0gIDB4MGIsIDB4NmMsIDB4MjksIDB4ZWYsIDB4MDgsIDB4NGQsIDB4NTEsIDB4ODIsIDB4OTMsIDB4MzIsIDB4Y2UsIDB4ODIsCi0gIDB4MDAsIDB4YTgsIDB4MDcsIDB4ODMsIDB4NzcsIDB4NmEsIDB4YzEsIDB4MjMsIDB4NTAsIDB4MGIsIDB4NDUsIDB4MjUsCi0gIDB4NjAsIDB4MWUsIDB4NjgsIDB4MDEsIDB4NzUsIDB4YTQsIDB4NGIsIDB4MzMsIDB4YWQsIDB4MWUsIDB4OWYsIDB4ZDAsCi0gIDB4MDEsIDB4NmUsIDB4YjEsIDB4YmMsIDB4MjcsIDB4NDQsIDB4NWIsIDB4YWUsIDB4MDgsIDB4ZGYsIDB4MzIsIDB4NGEsCi0gIDB4ZDIsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MzgsIDB4ZWUsIDB4MTMsIDB4YTYsIDB4OTksIDB4MmQsIDB4MWQsIDB4ODMsCi0gIDB4NzMsIDB4MTMsIDB4NzQsIDB4NmEsIDB4ZGQsIDB4YTgsIDB4MjYsIDB4ZWQsIDB4ZDQsIDB4ODQsIDB4MDgsIDB4MGMsCi0gIDB4NTQsIDB4NDEsIDB4MTIsIDB4OTksIDB4OGQsIDB4ODksIDB4MTYsIDB4YTksIDB4MTUsIDB4YzQsIDB4OGUsIDB4ODUsCi0gIDB4YjgsIDB4OTcsIDB4MGIsIDB4NGEsIDB4MGQsIDB4YzgsIDB4YzUsIDB4ZDksIDB4MWIsIDB4YjMsIDB4MmUsIDB4MzQsCi0gIDB4OGIsIDB4ZjMsIDB4NjcsIDB4YzcsIDB4ZDYsIDB4ODMsIDB4ZTEsIDB4ZGIsIDB4OWEsIDB4YjcsIDB4MjcsIDB4ZDQsCi0gIDB4NzQsIDB4NjMsIDB4ZTMsIDB4NzUsIDB4ZjYsIDB4NTQsIDB4Y2EsIDB4M2UsIDB4NjUsIDB4YTcsIDB4ZGQsIDB4OTgsCi0gIDB4NmQsIDB4YjUsIDB4OGEsIDB4NjEsIDB4YWYsIDB4ZWIsIDB4NmIsIDB4OWQsIDB4YTUsIDB4ZDAsIDB4ZjMsIDB4ZmUsCi0gIDB4ZDEsIDB4OGMsIDB4ZjcsIDB4ZTcsIDB4ZDksIDB4ZmQsIDB4MzIsIDB4Y2IsIDB4ZjYsIDB4NmIsIDB4NmUsIDB4ZDYsCi0gIDB4NjEsIDB4ZWQsIDB4YjYsIDB4MDEsIDB4NjksIDB4MWQsIDB4ZDEsIDB4ZjIsIDB4MWMsIDB4YzYsIDB4Y2EsIDB4YWYsCi0gIDB4MGQsIDB4MWQsIDB4YzYsIDB4YWUsIDB4NzgsIDB4ZjgsIDB4ZGMsIDB4M2YsIDB4MjksIDB4YzAsIDB4ZjksIDB4MTYsCi0gIDB4NzAsIDB4NWEsIDB4ZGMsIDB4M2YsIDB4NjMsIDB4YWMsIDB4YzAsIDB4ZDksIDB4OTcsIDB4NTcsIDB4ZjMsIDB4OGMsCi0gIDB4NGMsIDB4MTYsIDB4NzEsIDB4NDIsIDB4YjUsIDB4NTcsIDB4YzMsIDB4NzAsIDB4ODksIDB4NTIsIDB4ZTQsIDB4MTEsCi0gIDB4ZjUsIDB4NWUsIDB4ZmYsIDB4ODUsIDB4M2YsIDB4N2QsIDB4ZWIsIDB4YzcsIDB4MjYsIDB4YzksIDB4OTUsIDB4MTIsCi0gIDB4MmIsIDB4NGUsIDB4MzMsIDB4MjYsIDB4MDIsIDB4N2QsIDB4NDgsIDB4YmIsIDB4NjQsIDB4N2YsIDB4MWUsIDB4ZDYsCi0gIDB4MTQsIDB4ZTksIDB4NDAsIDB4OTQsIDB4OTIsIDB4NGEsIDB4NDUsIDB4ZWQsIDB4MjQsIDB4MzcsIDB4NzYsIDB4YjUsCi0gIDB4ZmUsIDB4YzgsIDB4YjksIDB4OTEsIDB4MTEsIDB4ZDMsIDB4NjgsIDB4NzQsIDB4NmMsIDB4NzMsIDB4ODgsIDB4NDYsCi0gIDB4NGEsIDB4NTAsIDB4OGEsIDB4ZjMsIDB4ODIsIDB4YzAsIDB4ZTAsIDB4MjEsIDB4MWEsIDB4OGUsIDB4MDAsIDB4OWUsCi0gIDB4MGYsIDB4MWYsIDB4ZmYsIDB4MzMsIDB4NjUsIDB4YTcsIDB4MzEsIDB4ODYsIDB4MjAsIDB4NTUsIDB4YTksIDB4Y2UsCi0gIDB4MzIsIDB4ZDksIDB4ZDEsIDB4NjgsIDB4NGIsIDB4ZjMsIDB4NzAsIDB4MDksIDB4NmIsIDB4MmQsIDB4OTQsIDB4MzgsCi0gIDB4MDIsIDB4NDcsIDB4MmUsIDB4NjQsIDB4OWQsIDB4MDEsIDB4ZjUsIDB4NmIsIDB4MWMsIDB4NzYsIDB4MzEsIDB4NDgsCi0gIDB4MzAsIDB4ZjksIDB4N2YsIDB4MWUsIDB4OWIsIDB4MDAsIDB4MGEsIDB4NDksIDB4YjQsIDB4ZjgsIDB4NmEsIDB4MDcsCi0gIDB4ZGEsIDB4YTUsIDB4NmUsIDB4MGUsIDB4ZjEsIDB4OWIsIDB4ZDUsIDB4OTcsIDB4ZWUsIDB4ODYsIDB4ZTIsIDB4OTYsCi0gIDB4MzUsIDB4ODYsIDB4MjEsIDB4YzAsIDB4NmUsIDB4NzgsIDB4NGYsIDB4MGQsIDB4MjEsIDB4NmEsIDB4NzQsIDB4Y2UsCi0gIDB4NzksIDB4YzAsIDB4ZGUsIDB4NjgsIDB4OGIsIDB4YWEsIDB4ZWEsIDB4ZjEsIDB4ZTIsIDB4OTQsIDB4MTgsIDB4YTgsCi0gIDB4M2IsIDB4NjUsIDB4NTgsIDB4MTAsIDB4Y2IsIDB4ZjgsIDB4N2UsIDB4MmEsIDB4MTMsIDB4YzUsIDB4ZjUsIDB4YTQsCi0gIDB4NjYsIDB4YTMsIDB4M2MsIDB4ZTYsIDB4YTIsIDB4MDQsIDB4ODQsIDB4MDQsIDB4YTgsIDB4NDgsIDB4NTcsIDB4YjgsCi0gIDB4NjQsIDB4YTcsIDB4MjYsIDB4NTYsIDB4ZTMsIDB4MjIsIDB4ZGMsIDB4MDAsIDB4YTUsIDB4MDAsIDB4N2YsIDB4N2EsCi0gIDB4ZGMsIDB4NDYsIDB4NTEsIDB4ODUsIDB4ZWMsIDB4NTYsIDB4NjUsIDB4NGQsIDB4YTcsIDB4ZDYsIDB4ZmYsIDB4ODcsCi0gIDB4ZWYsIDB4YTAsIDB4YjAsIDB4ODQsIDB4MDQsIDB4ZDUsIDB4MjYsIDB4NDYsIDB4NjksIDB4YjgsIDB4OWYsIDB4ZGMsCi0gIDB4Y2MsIDB4MjMsIDB4N2EsIDB4NDEsIDB4MmQsIDB4MjgsIDB4NTMsIDB4MzcsIDB4YzksIDB4OWUsIDB4OGEsIDB4MmQsCi0gIDB4MjQsIDB4YTAsIDB4NjksIDB4MmMsIDB4MjgsIDB4NDQsIDB4Y2EsIDB4MGEsIDB4MDIsIDB4MmMsIDB4ODgsIDB4NjUsCi0gIDB4ZGIsIDB4NDQsIDB4ZTQsIDB4YjAsIDB4NTIsIDB4NWIsIDB4YTksIDB4MGMsIDB4MTAsIDB4MjIsIDB4MDgsIDB4NWEsCi0gIDB4ZjYsIDB4M2MsIDB4NTAsIDB4NWUsIDB4ODEsIDB4MzQsIDB4MzUsIDB4ZTYsIDB4ZGEsIDB4ODUsIDB4OTAsIDB4ODAsCi0gIDB4NjAsIDB4MzEsIDB4NGQsIDB4ZjUsIDB4NWYsIDB4ZTIsIDB4MWQsIDB4ZWUsIDB4MGUsIDB4MzIsIDB4YzMsIDB4YmUsCi0gIDB4YTcsIDB4NzgsIDB4ZmEsIDB4NjQsIDB4Y2MsIDB4MTYsIDB4NTQsIDB4OWIsIDB4OGYsIDB4YTksIDB4ZjMsIDB4NGQsCi0gIDB4YjMsIDB4MTQsIDB4NTgsIDB4MzIsIDB4MWMsIDB4YzksIDB4MjksIDB4ZjMsIDB4ZGMsIDB4OTUsIDB4MDMsIDB4OTIsCi0gIDB4YjQsIDB4M2MsIDB4NWQsIDB4YmQsIDB4MTEsIDB4ZmIsIDB4MmIsIDB4NjIsIDB4YTEsIDB4NjYsIDB4YmMsIDB4YjgsCi0gIDB4NzEsIDB4MDIsIDB4ZTAsIDB4NjIsIDB4ODMsIDB4ODksIDB4YzgsIDB4ZDEsIDB4MTYsIDB4NTUsIDB4MGYsIDB4YjgsCi0gIDB4N2MsIDB4MDQsIDB4NmMsIDB4ZDcsIDB4YWUsIDB4MDIsIDB4M2UsIDB4YjIsIDB4OTMsIDB4YWYsIDB4MmYsIDB4Y2IsCi0gIDB4NGMsIDB4MzYsIDB4ODUsIDB4MzIsIDB4ZjEsIDB4MGMsIDB4YWMsIDB4YjAsIDB4NWEsIDB4ZDUsIDB4NWUsIDB4ODcsCi0gIDB4ZTAsIDB4ZTUsIDB4MjksIDB4NTYsIDB4YzUsIDB4YWIsIDB4YzIsIDB4NDMsIDB4ZjUsIDB4ODEsIDB4M2MsIDB4MDcsCi0gIDB4ODgsIDB4NDUsIDB4MDUsIDB4YjgsIDB4MTgsIDB4NjcsIDB4ZjAsIDB4ZmIsIDB4ZmUsIDB4YmUsIDB4NjAsIDB4OGEsCi0gIDB4MzUsIDB4NDQsIDB4NTEsIDB4YmMsIDB4NWQsIDB4NWEsIDB4NTQsIDB4OTgsIDB4OTgsIDB4MzksIDB4NGUsIDB4OTYsCi0gIDB4NWQsIDB4MjQsIDB4ZTcsIDB4MjMsIDB4MTUsIDB4NGEsIDB4YzIsIDB4NmEsIDB4MjQsIDB4NWIsIDB4NzQsIDB4ODAsCi0gIDB4ODAsIDB4MjIsIDB4MjMsIDB4MTQsIDB4OTcsIDB4NzksIDB4YmYsIDB4NTAsIDB4MDcsIDB4MjEsIDB4MWEsIDB4OGYsCi0gIDB4YzAsIDB4M2UsIDB4M2YsIDB4ZmUsIDB4ZmYsIDB4M2IsIDB4NjgsIDB4YTMsIDB4NTgsIDB4ZTAsIDB4ZWMsIDB4MjQsCi0gIDB4MTAsIDB4YjgsIDB4ZGYsIDB4MTUsIDB4MmUsIDB4NzcsIDB4YzIsIDB4MjksIDB4NGIsIDB4MmUsIDB4NGEsIDB4NTksCi0gIDB4MWMsIDB4MjMsIDB4MGUsIDB4MGIsIDB4MmQsIDB4OTQsIDB4YmMsIDB4MDAsIDB4OTcsIDB4MWMsIDB4ZTIsIDB4N2YsCi0gIDB4NDgsIDB4MWYsIDB4MjMsIDB4OTgsIDB4ZTQsIDB4OGYsIDB4NWIsIDB4NzIsIDB4NWIsIDB4NzIsIDB4MDMsIDB4N2IsCi0gIDB4NDcsIDB4MmQsIDB4NTMsIDB4YjQsIDB4ZGYsIDB4OTYsIDB4OTAsIDB4YmEsIDB4ZTUsIDB4MDEsIDB4NjIsIDB4ZDMsCi0gIDB4NWEsIDB4OTcsIDB4OTUsIDB4YWUsIDB4ZDMsIDB4MmEsIDB4NGIsIDB4NzUsIDB4M2IsIDB4MzksIDB4YTQsIDB4MzIsCi0gIDB4ZjUsIDB4YmMsIDB4ZTYsIDB4ZTcsIDB4Y2EsIDB4NGIsIDB4NTYsIDB4ZTAsIDB4M2IsIDB4NzcsIDB4NTIsIDB4YjgsCi0gIDB4ZTYsIDB4NjQsIDB4YTksIDB4NzgsIDB4ZGUsIDB4ODYsIDB4ODcsIDB4NGEsIDB4YzIsIDB4N2QsIDB4OGYsIDB4MjIsCi0gIDB4MzcsIDB4YmQsIDB4YjksIDB4NzcsIDB4ZWMsIDB4ZDcsIDB4NmYsIDB4NjUsIDB4ZDQsIDB4ZWMsIDB4ZDgsIDB4NTAsCi0gIDB4OTIsIDB4MjgsIDB4MTUsIDB4MzUsIDB4OTMsIDB4NmQsIDB4ZjksIDB4ZjUsIDB4ZDcsIDB4OTAsIDB4YjQsIDB4MjgsCi0gIDB4YzYsIDB4MjUsIDB4YzMsIDB4M2EsIDB4ZDksIDB4MjEsIDB4ZWIsIDB4NjksIDB4ZjcsIDB4ZWQsIDB4NzYsIDB4OTUsCi0gIDB4YjYsIDB4ZDMsIDB4ZGYsIDB4YzEsIDB4NGUsIDB4YjIsIDB4ZDMsIDB4NjAsIDB4NTEsIDB4NWQsIDB4MDAsIDB4NTcsCi0gIDB4NTUsIDB4OTcsIDB4MzYsIDB4NWEsIDB4ZDYsIDB4MjcsIDB4MjIsIDB4YTEsIDB4NTEsIDB4ODMsIDB4ZTEsIDB4YzksCi0gIDB4MDIsIDB4MGMsIDB4MDYsIDB4OTMsIDB4YzksIDB4MWQsIDB4ZTIsIDB4ZjUsIDB4OTAsIDB4MDIsIDB4NDQsIDB4MDAsCi0gIDB4OGQsIDB4YTUsIDB4ZjQsIDB4OWQsIDB4MzMsIDB4NjQsIDB4YzksIDB4YmUsIDB4MjIsIDB4YzEsIDB4NWIsIDB4ZjksCi0gIDB4NGMsIDB4MzEsIDB4NzcsIDB4ZGIsIDB4MTgsIDB4Y2QsIDB4MmIsIDB4OGEsIDB4YTAsIDB4MDUsIDB4M2IsIDB4MmEsCi0gIDB4MTcsIDB4MmEsIDB4MDUsIDB4ZTUsIDB4YmUsIDB4NTEsIDB4YWIsIDB4OWYsIDB4NDksIDB4NzQsIDB4NmEsIDB4YjgsCi0gIDB4NGUsIDB4NWEsIDB4YTgsIDB4NmMsIDB4NWEsIDB4MWEsIDB4MDQsIDB4MGMsIDB4MjMsIDB4MDEsIDB4YTAsIDB4NDAsCi0gIDB4NjIsIDB4NDIsIDB4OWIsIDB4NTIsIDB4ZDcsIDB4NGEsIDB4MzUsIDB4NzUsIDB4NmIsIDB4ZmMsIDB4MjIsIDB4ZWMsCi0gIDB4NWIsIDB4MjksIDB4NzgsIDB4MDEsIDB4MmUsIDB4MzksIDB4MTIsIDB4MjcsIDB4OGEsIDB4NzYsIDB4NDcsIDB4M2YsCi0gIDB4YWMsIDB4OTEsIDB4ZGMsIDB4NzAsIDB4ZWEsIDB4MzMsIDB4Y2EsIDB4MjYsIDB4NjAsIDB4ZTYsIDB4ZWUsIDB4OGEsCi0gIDB4NzYsIDB4YzksIDB4YTEsIDB4YTgsIDB4ODMsIDB4ZGUsIDB4NWMsIDB4YzMsIDB4NzEsIDB4ZGIsIDB4NTIsIDB4NmQsCi0gIDB4MmYsIDB4OWEsIDB4OGYsIDB4MGMsIDB4OTYsIDB4OTMsIDB4NTksIDB4ZDQsIDB4MzEsIDB4MWUsIDB4YTEsIDB4NzksCi0gIDB4NzMsIDB4MTQsIDB4Y2IsIDB4OTUsIDB4YzQsIDB4YWEsIDB4ZjcsIDB4OTQsIDB4ZDMsIDB4NTIsIDB4N2QsIDB4ZmUsCi0gIDB4OGYsIDB4NTAsIDB4ZjIsIDB4OGUsIDB4MzksIDB4OGMsIDB4YWMsIDB4NDAsIDB4NDAsIDB4OTIsIDB4ZWYsIDB4NzIsCi0gIDB4ZTgsIDB4MTksIDB4NzIsIDB4MzYsIDB4YjUsIDB4OGMsIDB4NmUsIDB4MzAsIDB4M2YsIDB4NzksIDB4ZWYsIDB4NDcsCi0gIDB4YjUsIDB4ZTUsIDB4YmYsIDB4NTcsIDB4ZjgsIDB4OTQsIDB4ODAsIDB4MTEsIDB4MTIsIDB4OWQsIDB4YTIsIDB4ZTQsCi0gIDB4YmYsIDB4ODQsIDB4YTMsIDB4ZWIsIDB4NjgsIDB4M2IsIDB4NGYsIDB4YWUsIDB4NTgsIDB4NzMsIDB4ZjUsIDB4NjMsCi0gIDB4MGMsIDB4NjAsIDB4MTEsIDB4OTQsIDB4NjAsIDB4MWMKLX07Ci0KLWd1aW50IHNlZ18xX200Zl9sZW4gPSA0OTU1NDsKLWd1aW50IHNlZ18xX21vb2Zfc2l6ZSA9IDExMjA7Ci1ndWludCBzZWdfMV9zYW1wbGVfMF9vZmZzZXQgPSAxMTI4OwotCi1zdGF0aWMgY29uc3QgZ3VpbnQgc2VnXzFfc2FtcGxlX3NpemVzW10gPSB7Ci0gIDM3MSwgMzcyLCA0NzcsIDUzMCwgNDg5LCA0NjIsIDQ0MSwgNDIxLCA0MjAsIDQxMCwgNDAyLCAzOTgsIDM4MSwgMzgxLCAzODYsCi0gIDM4NiwgMzY5LCAzNzAsIDM2MiwgMzQ2LCAzNTcsIDM1NSwgMzc2LCAzMzYsIDM0MSwgMzU4LCAzNTAsIDM2MiwgMzMzLCA0MTUsCi0gIDM4NiwgMzY0LCAzNDQsIDM4NiwgMzU4LCAzNjUsIDQwNCwgMzQyLCAzNjEsIDM2NiwgMzYxLCAzNTAsIDM5MCwgMzQ4LCAzNjYsCi0gIDM1OSwgMzU3LCAzNjAsIDM0OSwgMzU2LCAzNjUsIDM5MywgMzUzLCAzODUsIDM4MSwgMzQ4LCAzNDUsIDQxNCwgMzcyLCAzNjksCi0gIDQwMSwgMzkxLCAzMzMsIDMzOSwgNDIzLCAzNDMsIDQ0NSwgNDI1LCA0MjIsIDQxNSwgNDA2LCAzODksIDM5NSwgMzc1LCAzNTYsCi0gIDQ0MiwgNDMyLCAzOTEsIDM4NSwgMzM5LCAyNzcsIDI5MywgMzE2LCAzMjcsIDMwOSwgMzg5LCAzNTksIDQyNywgMzI2LCA0MjAsCi0gIDQwNywgMzE2LCAzNjIsIDQxOSwgMzQ5LCAzODcsIDMyNiwgMzI4LCAzNjcsIDM0NCwgNDI1LCAzMjksIDM3OSwgNDAzLCAzMTQsCi0gIDM5NywgMzY4LCAzODksIDM4MCwgMzczLCAzNDIsIDM0MywgMzY4LCA0MzYsIDM1OSwgMzUyLCAzNjEsIDM2NiwgMzUwLCA0MTksCi0gIDMzMSwgNDI2LCA0MDEsIDM4MiwgMzI2LCA0MTEsIDM2NCwgMzM4LCAzNDUKLX07Ci0KLS8qIGluIHRpbWVzY2FsZSAqLwotR3N0Q2xvY2tUaW1lIHNlZ18xX3NhbXBsZV9kdXJhdGlvbiA9IDEwMjQ7Ci1ndWludDMyIHNlZ18xX3RpbWVzY2FsZSA9IDQ0MTAwOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3F0bXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMjljNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcXRtdXguYworKysgL2Rldi9udWxsCkBAIC0xLDE2MTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBxdG11eAotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDg+IE1hcmsgTmF1d2VsYWVydHMgPG1uYXV3QHVzZXJzLnNmLm5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvcGJ1dGlscy9lbmNvZGluZy1wcm9maWxlLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0jZGVmaW5lIFZJREVPX1JBV19DQVBTX1NUUklORyAidmlkZW8veC1yYXciCi0KLSNkZWZpbmUgQVVESU9fQ0FQU19TVFJJTkcgImF1ZGlvL21wZWcsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgIm1wZWd2ZXJzaW9uID0gKGludCkgMSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAibGF5ZXIgPSAoaW50KSAzLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjaGFubmVscyA9IChpbnQpIDIsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgInJhdGUgPSAoaW50KSA0ODAwMCIKLQotI2RlZmluZSBBVURJT19BQUNfQ0FQU19TVFJJTkcgImF1ZGlvL21wZWcsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtcGVndmVyc2lvbj0oaW50KTQsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFubmVscz0oaW50KTEsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYXRlPShpbnQpNDQxMDAsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJlYW0tZm9ybWF0PShzdHJpbmcpcmF3LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGV2ZWw9KHN0cmluZykyLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZS1wcm9maWxlPShzdHJpbmcpbGMsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9maWxlPShzdHJpbmcpbGMsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlY19kYXRhPShidWZmZXIpMTIwOCIKLQotI2RlZmluZSBWSURFT19DQVBTX1NUUklORyAidmlkZW8vbXBlZywgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibXBlZ3ZlcnNpb24gPSAoaW50KSA0LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW1zdHJlYW0gPSAoYm9vbGVhbikgZmFsc2UsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoID0gKGludCkgMzg0LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQgPSAoaW50KSAyODgsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgMjUvMSIKLQotI2RlZmluZSBWSURFT19DQVBTX0gyNjRfU1RSSU5HICJ2aWRlby94LWgyNjQsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aD0oaW50KTMyMCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodD0oaW50KTI0MCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pMS8xLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29kZWNfZGF0YT0oYnVmZmVyKTAxNjQwMDE0ZmZlMTAwMTg2NzY0MDAxNGEiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNkOTQxNDFmYjAxMTAwMDAwMDMwMDE3NzM1OTQwMDBmMTQyOTk2MDAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEwMDA1NjhlYmVjYjIyYywgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmVhbS1mb3JtYXQ9KHN0cmluZylhdmMsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlnbm1lbnQ9KHN0cmluZylhdSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxldmVsPShzdHJpbmcpMiwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb2ZpbGU9KHN0cmluZyloaWdoIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8vcXVpY2t0aW1lIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdmlkZW90ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFZJREVPX0NBUFNfU1RSSU5HKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN2aWRlb2gyNjR0ZW1wbGF0ZSA9Ci1HU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChWSURFT19DQVBTX0gyNjRfU1RSSU5HKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN2aWRlb3Jhd3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFZJREVPX1JBV19DQVBTX1NUUklORykpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjYXVkaW90ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEFVRElPX0NBUFNfU1RSSU5HKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNhdWRpb2FhY3RlbXBsYXRlID0KLUdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKEFVRElPX0FBQ19DQVBTX1NUUklORykpOwotCi0vKiBzZXR1cCBhbmQgdGVhcmRvd24gbmVlZHMgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBtdXhlciAqLwotc3RhdGljIEdzdFBhZCAqCi1zZXR1cF9zcmNfcGFkIChHc3RFbGVtZW50ICogZWxlbWVudCwKLSAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHRlbXBsYXRlLCBjb25zdCBnY2hhciAqIHNpbmtuYW1lKQotewotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgR1NUX0RFQlVHX09CSkVDVCAoZWxlbWVudCwgInNldHRpbmcgdXAgc2VuZGluZyBwYWQiKTsKLSAgLyogc2VuZGluZyBwYWQgKi8KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKHRlbXBsYXRlLCAic3JjIik7Ci0gIGZhaWxfaWYgKHNyY3BhZCA9PSBOVUxMLCAiQ291bGQgbm90IGNyZWF0ZSBhIHNyY3BhZCIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAxKTsKLQotICBpZiAoIShzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIHNpbmtuYW1lKSkpCi0gICAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgc2lua25hbWUpOwotICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwsICJDb3VsZCBub3QgZ2V0IHNpbmsgcGFkIGZyb20gJXMiLAotICAgICAgR1NUX0VMRU1FTlRfTkFNRSAoZWxlbWVudCkpOwotICAvKiByZWZlcmVuY2VzIGFyZSBvd25lZCBieTogMSkgdXMsIDIpIHF0bXV4LCAzKSBjb2xsZWN0IHBhZHMgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCi0gICAgICAiQ291bGQgbm90IGxpbmsgc291cmNlIGFuZCAlcyBzaW5rIHBhZHMiLCBHU1RfRUxFTUVOVF9OQU1FIChlbGVtZW50KSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOyAgIC8qIGJlY2F1c2Ugd2UgZ290IGl0IGhpZ2hlciB1cCAqLwotCi0gIC8qIHJlZmVyZW5jZXMgYXJlIG93bmVkIGJ5OiAxKSBxdG11eCwgMikgY29sbGVjdCBwYWRzICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMik7Ci0KLSAgcmV0dXJuIHNyY3BhZDsKLX0KLQotc3RhdGljIHZvaWQKLXRlYXJkb3duX3NyY19wYWQgKEdzdFBhZCAqIHNyY3BhZCkKLXsKLSAgR3N0UGFkICpzaW5rcGFkOwotCi0gIC8qIGNsZWFuIHVwIGZsb2F0aW5nIHNyYyBwYWQgKi8KLSAgc2lua3BhZCA9IGdzdF9wYWRfZ2V0X3BlZXIgKHNyY3BhZCk7Ci0gIGZhaWxfaWYgKHNpbmtwYWQgPT0gTlVMTCk7Ci0gIC8qIHBhZCByZWZzIGhlbGQgYnkgMSkgcXRtdXggMikgY29sbGVjdHBhZHMgYW5kIDMpIHVzICh0aHJvdWdoIF9nZXRfcGVlcikgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc2lua3BhZCwgInNpbmtwYWQiLCAzKTsKLQotICBnc3RfcGFkX3VubGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLQotICAvKiBhZnRlciB1bmxpbmtpbmcsIHBhZCByZWZzIHN0aWxsIGhlbGQgYnkKLSAgICogMSkgcXRtdXggYW5kIDIpIGNvbGxlY3RwYWRzIGFuZCAzKSB1cyAodGhyb3VnaCBfZ2V0X3BlZXIpICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNpbmtwYWQsICJzaW5rcGFkIiwgMyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICAvKiBvbmUgbW9yZSByZWYgaXMgaGVsZCBieSBlbGVtZW50IGl0c2VsZiAqLwotCi0gIC8qIHBhZCByZWZzIGhlbGQgYnkgY3JlYXRvciAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcmNwYWQsICJzcmNwYWQiLCAxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLX0KLQotZ2Jvb2xlYW4gZG93bnN0cmVhbV9pc19zZWVrYWJsZTsKLXN0YXRpYyBnYm9vbGVhbgotcXRtdXhfc2lua3BhZF9xdWVyeSAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdFF1ZXJ5ICogcXVlcnkpCi17Ci0gIGdib29sZWFuIHJldCA9IEZBTFNFOwotCi0gIGlmIChHU1RfUVVFUllfVFlQRSAocXVlcnkpID09IEdTVF9RVUVSWV9TRUVLSU5HKSB7Ci0gICAgZ3N0X3F1ZXJ5X3NldF9zZWVraW5nIChxdWVyeSwgR1NUX0ZPUk1BVF9CWVRFUywgZG93bnN0cmVhbV9pc19zZWVrYWJsZSwgMCwKLSAgICAgICAgLTEpOwotICAgIHJldCA9IFRSVUU7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9xdG11eCAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBzcmN0ZW1wbGF0ZSwgY29uc3QgZ2NoYXIgKiBzaW5rbmFtZSwKLSAgICBnYm9vbGVhbiBzZWVrYWJsZSkKLXsKLSAgR3N0RWxlbWVudCAqcXRtdXg7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfcXRtdXgiKTsKLSAgcXRtdXggPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInF0bXV4Iik7Ci0gIG15c3JjcGFkID0gc2V0dXBfc3JjX3BhZCAocXRtdXgsIHNyY3RlbXBsYXRlLCBzaW5rbmFtZSk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAocXRtdXgsICZzaW5rdGVtcGxhdGUpOwotCi0gIGRvd25zdHJlYW1faXNfc2Vla2FibGUgPSBzZWVrYWJsZTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKG15c2lua3BhZCwgcXRtdXhfc2lua3BhZF9xdWVyeSk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICByZXR1cm4gcXRtdXg7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX3F0bXV4IChHc3RFbGVtZW50ICogcXRtdXgsIGNvbnN0IGdjaGFyICogc2lua25hbWUpCi17Ci0gIEdTVF9ERUJVRyAoImNsZWFudXBfcXRtdXgiKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdG11eCwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgdGVhcmRvd25fc3JjX3BhZCAobXlzcmNwYWQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKHF0bXV4KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHF0bXV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX3F0bXV4X3BhZCAoR3N0U3RhdGljUGFkVGVtcGxhdGUgKiBzcmN0ZW1wbGF0ZSwgY29uc3QgZ2NoYXIgKiBzaW5rbmFtZSwKLSAgICBndWludDMyIGR0c19tZXRob2QpCi17Ci0gIEdzdEVsZW1lbnQgKnF0bXV4OwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICBpbnQgbnVtX2J1ZmZlcnM7Ci0gIGludCBpOwotICBndWludDggZGF0YTBbMTJdID0gIlwwMDBcMDAwXDAwMFwwMjRmdHlwcXQgICI7Ci0gIGd1aW50OCBkYXRhMVsxNl0gPSAiXDAwMFwwMDBcMDAwXDAxMGZyZWVcMDAwXDAwMFwwMDBcMDAwbWRhdCI7Ci0gIGd1aW50OCBkYXRhMls0XSA9ICJtb292IjsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIHF0bXV4ID0gc2V0dXBfcXRtdXggKHNyY3RlbXBsYXRlLCBzaW5rbmFtZSwgVFJVRSk7Ci0gIGdfb2JqZWN0X3NldCAocXRtdXgsICJkdHMtbWV0aG9kIiwgZHRzX21ldGhvZCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF0bXV4LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAobXlzcmNwYWQpOwotICBnc3RfcGFkX3NldF9jYXBzIChteXNyY3BhZCwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEpOwotICBnc3RfYnVmZmVyX21lbXNldCAoaW5idWZmZXIsIDAsIDAsIDEpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoaW5idWZmZXIpID0gNDAgKiBHU1RfTVNFQ09ORDsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLQotICAvKiBzZW5kIGVvcyB0byBoYXZlIG1vb3Ygd3JpdHRlbiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpID09IFRSVUUpOwotCi0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0gIC8qIGF0IGxlYXN0IGV4cGVjdCBmdHlwLCBtZGF0IGhlYWRlciwgYnVmZmVyIGNodW5rIGFuZCBtb292ICovCi0gIGZhaWxfdW5sZXNzIChudW1fYnVmZmVycyA+PSA0KTsKLQotICAvKiBjbGVhbiB1cCBmaXJzdCB0byBjbGVhciBhbnkgcGVuZGluZyByZWZzIGluIHN0aWNreSBjYXBzICovCi0gIGNsZWFudXBfcXRtdXggKHF0bXV4LCBzaW5rbmFtZSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0gICAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dGJ1ZmZlcik7Ci0KLSAgICBzd2l0Y2ggKGkpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgIHsKLSAgICAgICAgLyogZnR5cCBoZWFkZXIgKi8KLSAgICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dGJ1ZmZlcikgPj0gMjApOwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgZGF0YTAsCi0gICAgICAgICAgICAgICAgc2l6ZW9mIChkYXRhMCkpID09IDApOwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMTYsIGRhdGEwICsgOCwgNCkgPT0gMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgIC8qIG1kYXQgaGVhZGVyICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID09IDE2KTsKLSAgICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChvdXRidWZmZXIsIDAsIGRhdGExLCBzaXplb2YgKGRhdGExKSkKLSAgICAgICAgICAgID09IDApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAvKiBidWZmZXIgd2UgcHV0IGluICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID09IDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAvKiBtb292ICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID4gOCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCA0LCBkYXRhMiwKLSAgICAgICAgICAgICAgICBzaXplb2YgKGRhdGEyKSkgPT0gMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0YnVmZmVyLCAib3V0YnVmZmVyIiwgMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmZmVyKTsKLSAgICBvdXRidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX3F0bXV4X3BhZF9mcmFnbWVudGVkIChHc3RTdGF0aWNQYWRUZW1wbGF0ZSAqIHNyY3RlbXBsYXRlLAotICAgIGNvbnN0IGdjaGFyICogc2lua25hbWUsIGd1aW50MzIgZHRzX21ldGhvZCwgZ2Jvb2xlYW4gc3RyZWFtYWJsZSkKLXsKLSAgR3N0RWxlbWVudCAqcXRtdXg7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGludCBudW1fYnVmZmVyczsKLSAgaW50IGk7Ci0gIGd1aW50OCBkYXRhMFsxMl0gPSAiXDAwMFwwMDBcMDAwXDAyNGZ0eXBxdCAgIjsKLSAgZ3VpbnQ4IGRhdGExWzRdID0gIm1kYXQiOwotICBndWludDggZGF0YTJbNF0gPSAibW9vdiI7Ci0gIGd1aW50OCBkYXRhM1s0XSA9ICJtb29mIjsKLSAgZ3VpbnQ4IGRhdGE0WzRdID0gIm1mcmEiOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0KLSAgcXRtdXggPSBzZXR1cF9xdG11eCAoc3JjdGVtcGxhdGUsIHNpbmtuYW1lLCAhc3RyZWFtYWJsZSk7Ci0gIGdfb2JqZWN0X3NldCAocXRtdXgsICJkdHMtbWV0aG9kIiwgZHRzX21ldGhvZCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocXRtdXgsICJmcmFnbWVudC1kdXJhdGlvbiIsIDIwMDAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHF0bXV4LCAic3RyZWFtYWJsZSIsIHN0cmVhbWFibGUsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdG11eCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICBjYXBzID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKG15c3JjcGFkKTsKLSAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzcmNwYWQsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgLyogZW5zdXJlIHNlZ21lbnQgKGZvcm1hdCkgcHJvcGVybHkgc2V0dXAgKi8KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGluYnVmZmVyLCAwLCAwLCAxKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGluYnVmZmVyKSA9IDQwICogR1NUX01TRUNPTkQ7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgLyogc2VuZCBlb3MgdG8gaGF2ZSBhbGwgd3JpdHRlbiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpID09IFRSVUUpOwotCi0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0gIC8qIGF0IGxlYXN0IGV4cGVjdCBmdHlwLCBtb292LCBtb29mLCBtZGF0IGhlYWRlciwgYnVmZmVyIGNodW5rCi0gICAqIGFuZCBvcHRpb25hbGx5IG1mcmEgKi8KLSAgZmFpbF91bmxlc3MgKG51bV9idWZmZXJzID49IDUpOwotCi0gIC8qIGNsZWFuIHVwIGZpcnN0IHRvIGNsZWFyIGFueSBwZW5kaW5nIHJlZnMgaW4gc3RpY2t5IGNhcHMgKi8KLSAgY2xlYW51cF9xdG11eCAocXRtdXgsIHNpbmtuYW1lKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSkgewotICAgIG91dGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOwotICAgIGZhaWxfaWYgKG91dGJ1ZmZlciA9PSBOVUxMKTsKLSAgICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgb3V0YnVmZmVyKTsKLQotICAgIHN3aXRjaCAoaSkgewotICAgICAgY2FzZSAwOgotICAgICAgewotICAgICAgICAvKiBmdHlwIGhlYWRlciAqLwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmZmVyKSA+PSAyMCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAwLCBkYXRhMCwKLSAgICAgICAgICAgICAgICBzaXplb2YgKGRhdGEwKSkgPT0gMCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAxNiwgZGF0YTAgKyA4LCA0KSA9PSAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgLyogbW9vdiAqLwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAob3V0YnVmZmVyKSA+IDgpOwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgNCwgZGF0YTIsCi0gICAgICAgICAgICAgICAgc2l6ZW9mIChkYXRhMikpID09IDApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAvKiBtb29mICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID4gOCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCA0LCBkYXRhMywKLSAgICAgICAgICAgICAgICBzaXplb2YgKGRhdGEzKSkgPT0gMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgIC8qIG1kYXQgaGVhZGVyICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID09IDgpOwotICAgICAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgNCwgZGF0YTEsCi0gICAgICAgICAgICAgICAgc2l6ZW9mIChkYXRhMSkpID09IDApOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAvKiBidWZmZXIgd2UgcHV0IGluICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID09IDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNTogICAgICAgICAgICAgICAgICAvKiBtZnJhICovCi0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2dldF9zaXplIChvdXRidWZmZXIpID4gOCk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCA0LCBkYXRhNCwKLSAgICAgICAgICAgICAgICBzaXplb2YgKGRhdGE0KSkgPT0gMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0YnVmZmVyLCAib3V0YnVmZmVyIiwgMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmZmVyKTsKLSAgICBvdXRidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLX0KLQotLyogZHRzLW1ldGhvZCBkZCAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92aWRlb19wYWRfZGQpCi17Ci0gIGNoZWNrX3F0bXV4X3BhZCAoJnNyY3ZpZGVvdGVtcGxhdGUsICJ2aWRlb18ldSIsIDApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1ZGlvX3BhZF9kZCkKLXsKLSAgY2hlY2tfcXRtdXhfcGFkICgmc3JjYXVkaW90ZW1wbGF0ZSwgImF1ZGlvXyV1IiwgMCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92aWRlb19wYWRfZnJhZ19kZCkKLXsKLSAgY2hlY2tfcXRtdXhfcGFkX2ZyYWdtZW50ZWQgKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCAwLCBGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXVkaW9fcGFkX2ZyYWdfZGQpCi17Ci0gIGNoZWNrX3F0bXV4X3BhZF9mcmFnbWVudGVkICgmc3JjYXVkaW90ZW1wbGF0ZSwgImF1ZGlvXyV1IiwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdmlkZW9fcGFkX2ZyYWdfZGRfc3RyZWFtYWJsZSkKLXsKLSAgY2hlY2tfcXRtdXhfcGFkX2ZyYWdtZW50ZWQgKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCAwLCBUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1ZGlvX3BhZF9mcmFnX2RkX3N0cmVhbWFibGUpCi17Ci0gIGNoZWNrX3F0bXV4X3BhZF9mcmFnbWVudGVkICgmc3JjYXVkaW90ZW1wbGF0ZSwgImF1ZGlvXyV1IiwgMCwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogZHRzLW1ldGhvZCByZW9yZGVyICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZpZGVvX3BhZF9yZW9yZGVyKQotewotICBjaGVja19xdG11eF9wYWQgKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCAxKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdWRpb19wYWRfcmVvcmRlcikKLXsKLSAgY2hlY2tfcXRtdXhfcGFkICgmc3JjYXVkaW90ZW1wbGF0ZSwgImF1ZGlvXyV1IiwgMSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92aWRlb19wYWRfZnJhZ19yZW9yZGVyKQotewotICBjaGVja19xdG11eF9wYWRfZnJhZ21lbnRlZCAoJnNyY3ZpZGVvdGVtcGxhdGUsICJ2aWRlb18ldSIsIDEsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdWRpb19wYWRfZnJhZ19yZW9yZGVyKQotewotICBjaGVja19xdG11eF9wYWRfZnJhZ21lbnRlZCAoJnNyY2F1ZGlvdGVtcGxhdGUsICJhdWRpb18ldSIsIDEsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZpZGVvX3BhZF9mcmFnX3Jlb3JkZXJfc3RyZWFtYWJsZSkKLXsKLSAgY2hlY2tfcXRtdXhfcGFkX2ZyYWdtZW50ZWQgKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCAxLCBUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1ZGlvX3BhZF9mcmFnX3Jlb3JkZXJfc3RyZWFtYWJsZSkKLXsKLSAgY2hlY2tfcXRtdXhfcGFkX2ZyYWdtZW50ZWQgKCZzcmNhdWRpb3RlbXBsYXRlLCAiYXVkaW9fJXUiLCAxLCBUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBkdHMtbWV0aG9kIGFzYyAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92aWRlb19wYWRfYXNjKQotewotICBjaGVja19xdG11eF9wYWQgKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCAyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hdWRpb19wYWRfYXNjKQotewotICBjaGVja19xdG11eF9wYWQgKCZzcmNhdWRpb3RlbXBsYXRlLCAiYXVkaW9fJXUiLCAyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZpZGVvX3BhZF9mcmFnX2FzYykKLXsKLSAgY2hlY2tfcXRtdXhfcGFkX2ZyYWdtZW50ZWQgKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCAyLCBGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXVkaW9fcGFkX2ZyYWdfYXNjKQotewotICBjaGVja19xdG11eF9wYWRfZnJhZ21lbnRlZCAoJnNyY2F1ZGlvdGVtcGxhdGUsICJhdWRpb18ldSIsIDIsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZpZGVvX3BhZF9mcmFnX2FzY19zdHJlYW1hYmxlKQotewotICBjaGVja19xdG11eF9wYWRfZnJhZ21lbnRlZCAoJnNyY3ZpZGVvdGVtcGxhdGUsICJ2aWRlb18ldSIsIDIsIFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXVkaW9fcGFkX2ZyYWdfYXNjX3N0cmVhbWFibGUpCi17Ci0gIGNoZWNrX3F0bXV4X3BhZF9mcmFnbWVudGVkICgmc3JjYXVkaW90ZW1wbGF0ZSwgImF1ZGlvXyV1IiwgMiwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmV1c2UpCi17Ci0gIEdzdEVsZW1lbnQgKnF0bXV4ID0gc2V0dXBfcXRtdXggKCZzcmN2aWRlb3RlbXBsYXRlLCAidmlkZW9fJXUiLCBUUlVFKTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXRtdXgsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChxdG11eCwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF0bXV4LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAobXlzcmNwYWQpOwotICBnc3RfcGFkX3NldF9jYXBzIChteXNyY3BhZCwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDEpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChpbmJ1ZmZlciwgMCwgMCwgMSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChpbmJ1ZmZlcikgPSA0MCAqIEdTVF9NU0VDT05EOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIHNlbmQgZW9zIHRvIGhhdmUgYWxsIHdyaXR0ZW4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSA9PSBUUlVFKTsKLQotICBjbGVhbnVwX3F0bXV4IChxdG11eCwgInZpZGVvXyV1Iik7Ci0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdEVuY29kaW5nQ29udGFpbmVyUHJvZmlsZSAqCi1jcmVhdGVfcXRtdXhfcHJvZmlsZSAoY29uc3QgZ2NoYXIgKiB2YXJpYW50KQotewotICBHc3RFbmNvZGluZ0NvbnRhaW5lclByb2ZpbGUgKmNwcm9mOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGlmICh2YXJpYW50ID09IE5VTEwpIHsKLSAgICBjYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSAoInZpZGVvL3F1aWNrdGltZSIpOwotICB9IGVsc2UgewotICAgIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgidmlkZW8vcXVpY2t0aW1lIiwKLSAgICAgICAgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCB2YXJpYW50LCBOVUxMKTsKLSAgfQotCi0gIGNwcm9mID0gZ3N0X2VuY29kaW5nX2NvbnRhaW5lcl9wcm9maWxlX25ldyAoIk5hbWUiLCAiYmxhaCIsIGNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgIlMxNkJFIiwKLSAgICAgICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDIsICJyYXRlIiwgR19UWVBFX0lOVCwgNDQxMDAsIE5VTEwpOwotICBnc3RfZW5jb2RpbmdfY29udGFpbmVyX3Byb2ZpbGVfYWRkX3Byb2ZpbGUgKGNwcm9mLAotICAgICAgR1NUX0VOQ09ESU5HX1BST0ZJTEUgKGdzdF9lbmNvZGluZ19hdWRpb19wcm9maWxlX25ldyAoY2FwcywgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgMSkpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBjcHJvZjsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZW5jb2RlYmluX3F0bXV4KQotewotICBHc3RFbmNvZGluZ0NvbnRhaW5lclByb2ZpbGUgKmNwcm9mOwotICBHc3RFbGVtZW50ICplbmM7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIGVuYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImVuY29kZWJpbiIsIE5VTEwpOwotICBpZiAoZW5jID09IE5VTEwpCi0gICAgcmV0dXJuOwotCi0gIC8qIE1ha2Ugc3VyZSBlbmNvZGViaW4gZmluZHMgYSBtdXhlciBmb3IgYSBwcm9maWxlIHdpdGggYSB2YXJpYW50IGZpZWxkIC4uICovCi0gIGNwcm9mID0gY3JlYXRlX3F0bXV4X3Byb2ZpbGUgKCJhcHBsZSIpOwotICBnX29iamVjdF9zZXQgKGVuYywgInByb2ZpbGUiLCBjcHJvZiwgTlVMTCk7Ci0gIGdzdF9lbmNvZGluZ19wcm9maWxlX3VucmVmIChjcHJvZik7Ci0KLSAgLyogc2hvdWxkIGhhdmUgY3JlYXRlZCBhIHBhZCBhZnRlciBzZXR0aW5nIHRoZSBwcm9maWxlICovCi0gIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChlbmMsICJhdWRpb18wIik7Ci0gIGZhaWxfdW5sZXNzIChwYWQgIT0gTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVuYyk7Ci0KLSAgLyogLi4uIGFuZCBmb3IgYSBwcm9maWxlIHdpdGhvdXQgYSB2YXJpYW50IGZpZWxkICovCi0gIGVuYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImVuY29kZWJpbiIsIE5VTEwpOwotICBjcHJvZiA9IGNyZWF0ZV9xdG11eF9wcm9maWxlIChOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChlbmMsICJwcm9maWxlIiwgY3Byb2YsIE5VTEwpOwotICBnc3RfZW5jb2RpbmdfcHJvZmlsZV91bnJlZiAoY3Byb2YpOwotCi0gIC8qIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBwYWQgYWZ0ZXIgc2V0dGluZyB0aGUgcHJvZmlsZSAqLwotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoZW5jLCAiYXVkaW9fMCIpOwotICBmYWlsX3VubGVzcyAocGFkICE9IE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChlbmMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEZha2UgbXAzIGVuY29kZXIgZm9yIHRlc3QgKi8KLXR5cGVkZWYgR3N0RWxlbWVudCBUZXN0TXAzRW5jOwotdHlwZWRlZiBHc3RFbGVtZW50Q2xhc3MgVGVzdE1wM0VuY0NsYXNzOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjX3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL21wZWcsIG1wZWd2ZXJzaW9uPTEsIGxheWVyPVsxLDNdIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua190ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImF1ZGlvL3gtcmF3IikKLSAgICApOwotCi1zdGF0aWMgR1R5cGUgdGVzdF9tcDNfZW5jX2dldF90eXBlICh2b2lkKTsKLXN0YXRpYyB2b2lkIHRlc3RfaW5wdXRfcHVzaF9zZWdtZW50X3N0YXJ0IChncG9pbnRlciB1c2VyX2RhdGEsCi0gICAgR3N0Q2xvY2tUaW1lIHN0YXJ0KTsKLQotR19ERUZJTkVfVFlQRSAoVGVzdE1wM0VuYywgdGVzdF9tcDNfZW5jLCBHU1RfVFlQRV9FTEVNRU5UKTsKLQotc3RhdGljIHZvaWQKLXRlc3RfbXAzX2VuY19jbGFzc19pbml0IChUZXN0TXAzRW5jQ2xhc3MgKiBrbGFzcykKLXsKLSAgR3N0RWxlbWVudENsYXNzICplbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1MgKGtsYXNzKTsKLQotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNpbmtfdGVtcGxhdGUpOwotICBnc3RfZWxlbWVudF9jbGFzc19hZGRfc3RhdGljX3BhZF90ZW1wbGF0ZSAoZWxlbWVudF9jbGFzcywgJnNyY190ZW1wbGF0ZSk7Ci0KLSAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhIChlbGVtZW50X2NsYXNzLCAiTVBFRzEgQXVkaW8gRW5jb2RlciIsCi0gICAgICAiQ29kZWMvRW5jb2Rlci9BdWRpbyIsICJQcmV0ZW5kcyB0byBlbmNvZGUgbXAzIiwgIkZvbyBCYXIgPGZvb0BiYXIuY29tPiIpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9tcDNfZW5jX2luaXQgKFRlc3RNcDNFbmMgKiBtcDNlbmMpCi17Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua190ZW1wbGF0ZSwgInNpbmsiKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAobXAzZW5jLCBwYWQpOwotCi0gIHBhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjX3RlbXBsYXRlLCAic3JjIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKG1wM2VuYywgcGFkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1wbHVnaW5faW5pdCAoR3N0UGx1Z2luICogcGx1Z2luKQotewotICByZXR1cm4gZ3N0X2VsZW1lbnRfcmVnaXN0ZXIgKHBsdWdpbiwgInRlc3RtcDNlbmMiLCBHU1RfUkFOS19OT05FLAotICAgICAgdGVzdF9tcDNfZW5jX2dldF90eXBlICgpKTsKLX0KLQotc3RhdGljIEdzdEVuY29kaW5nQ29udGFpbmVyUHJvZmlsZSAqCi1jcmVhdGVfbXA0bXV4X3Byb2ZpbGUgKHZvaWQpCi17Ci0gIEdzdEVuY29kaW5nQ29udGFpbmVyUHJvZmlsZSAqY3Byb2Y7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby9xdWlja3RpbWUiLAotICAgICAgInZhcmlhbnQiLCBHX1RZUEVfU1RSSU5HLCAiaXNvIiwgTlVMTCk7Ci0KLSAgY3Byb2YgPSBnc3RfZW5jb2RpbmdfY29udGFpbmVyX3Byb2ZpbGVfbmV3ICgiTmFtZSIsICJibGFoIiwgY2FwcywgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL21wZWciLCAibXBlZ3ZlcnNpb24iLCBHX1RZUEVfSU5ULCAxLAotICAgICAgImxheWVyIiwgR19UWVBFX0lOVCwgMywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMiwgInJhdGUiLCBHX1RZUEVfSU5ULAotICAgICAgNDQxMDAsIE5VTEwpOwotICBnc3RfZW5jb2RpbmdfY29udGFpbmVyX3Byb2ZpbGVfYWRkX3Byb2ZpbGUgKGNwcm9mLAotICAgICAgR1NUX0VOQ09ESU5HX1BST0ZJTEUgKGdzdF9lbmNvZGluZ19hdWRpb19wcm9maWxlX25ldyAoY2FwcywgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgMSkpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBjcHJvZjsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZW5jb2RlYmluX21wNG11eCkKLXsKLSAgR3N0RW5jb2RpbmdDb250YWluZXJQcm9maWxlICpjcHJvZjsKLSAgR3N0UGx1Z2luRmVhdHVyZSAqZmVhdHVyZTsKLSAgR3N0RWxlbWVudCAqZW5jLCAqbXV4OwotICBHc3RQYWQgKnBhZDsKLQotICAvKiBuZWVkIGEgZmFrZSBtcDMgZW5jb2RlciBiZWNhdXNlIG1wNCBvbmx5IGFjY2VwdHMgZW5jb2RlZCBmb3JtYXRzICovCi0gIGdzdF9wbHVnaW5fcmVnaXN0ZXJfc3RhdGljIChHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsCi0gICAgICAiZmFrZW1wM2VuYyIsICJmYWtlbXAzZW5jIiwgcGx1Z2luX2luaXQsIFZFUlNJT04sICJMR1BMIiwKLSAgICAgICJnc3QtcGx1Z2lucy1nb29kIiwgR1NUX1BBQ0tBR0VfTkFNRSwgR1NUX1BBQ0tBR0VfT1JJR0lOKTsKLQotICBmZWF0dXJlID0gZ3N0X3JlZ2lzdHJ5X2ZpbmRfZmVhdHVyZSAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgInRlc3RtcDNlbmMiLAotICAgICAgR1NUX1RZUEVfRUxFTUVOVF9GQUNUT1JZKTsKLSAgZ3N0X3BsdWdpbl9mZWF0dXJlX3NldF9yYW5rIChmZWF0dXJlLCBHU1RfUkFOS19QUklNQVJZICsgMTAwKTsKLQotICBlbmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJlbmNvZGViaW4iLCBOVUxMKTsKLSAgaWYgKGVuYyA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICAvKiBNYWtlIHN1cmUgZW5jb2RlYmluIGZpbmRzIG1wNG11eCBldmVuIHRob3VnaCBxdG11eCBvdXRwdXRzIGEgc3VwZXJzZXQgKi8KLSAgY3Byb2YgPSBjcmVhdGVfbXA0bXV4X3Byb2ZpbGUgKCk7Ci0gIGdfb2JqZWN0X3NldCAoZW5jLCAicHJvZmlsZSIsIGNwcm9mLCBOVUxMKTsKLSAgZ3N0X2VuY29kaW5nX3Byb2ZpbGVfdW5yZWYgKGNwcm9mKTsKLQotICAvKiBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgcGFkIGFmdGVyIHNldHRpbmcgdGhlIHByb2ZpbGUgKi8KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVuYywgImF1ZGlvXzAiKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICBtdXggPSBnc3RfYmluX2dldF9ieV9pbnRlcmZhY2UgKEdTVF9CSU4gKGVuYyksIEdTVF9UWVBFX1RBR19TRVRURVIpOwotICBmYWlsX3VubGVzcyAobXV4ICE9IE5VTEwpOwotICB7Ci0gICAgR3N0RWxlbWVudEZhY3RvcnkgKmYgPSBnc3RfZWxlbWVudF9nZXRfZmFjdG9yeSAobXV4KTsKLQotICAgIC8qIG1ha2Ugc3VyZSB3ZSBnb3QgbXA0bXV4IGZvciB2YXJpYW50PWlzbyAqLwotICAgIEdTVF9JTkZPICgibXV4ZXI6ICVzIiwgR19PQkpFQ1RfVFlQRV9OQU1FIChtdXgpKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfT0JKRUNUX05BTUUgKGYpLCAibXA0bXV4Iik7Ci0gIH0KLSAgZ3N0X29iamVjdF91bnJlZiAobXV4KTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZW5jKTsKLQotICBnc3RfcGx1Z2luX2ZlYXR1cmVfc2V0X3JhbmsgKGZlYXR1cmUsIEdTVF9SQU5LX05PTkUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChmZWF0dXJlKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLWV4dHJhY3RfdGFncyAoY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwgR3N0VGFnTGlzdCAqKiB0YWdsaXN0KQotewotICBnYm9vbGVhbiByZXQgPSBUUlVFOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RFbGVtZW50ICpwaXBlbGluZSA9Ci0gICAgICBnc3RfcGFyc2VfbGF1bmNoICgiZmlsZXNyYyBuYW1lPXNyYyAhIHF0ZGVtdXggISBmYWtlc2luayIsIE5VTEwpOwotCi0gIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgbG9jYXRpb24sIE5VTEwpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgaWYgKCp0YWdsaXN0ID09IE5VTEwpIHsKLSAgICAqdGFnbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIH0KLQotICB3aGlsZSAoMSkgewotICAgIEdzdE1lc3NhZ2UgKm1zZyA9IGdzdF9idXNfdGltZWRfcG9wX2ZpbHRlcmVkIChidXMsIEdTVF9DTE9DS19USU1FX05PTkUsCi0gICAgICAgIEdTVF9NRVNTQUdFX1RBRyB8IEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfRU9TKTsKLQotICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUykgewotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICAgIHJldCA9IEZBTFNFOwotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgICBicmVhazsKLSAgICB9IGVsc2UgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfVEFHKSB7Ci0gICAgICBHc3RUYWdMaXN0ICp0YWdzOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1zZywgJnRhZ3MpOwotICAgICAgZ3N0X3RhZ19saXN0X2luc2VydCAoKnRhZ2xpc3QsIHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSk7Ci0gICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ3MpOwotICAgIH0KLSAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9hdmVyYWdlX2JpdHJhdGVfY3VzdG9tIChjb25zdCBnY2hhciAqIGVsZW1lbnRuYW1lLAotICAgIEdzdFN0YXRpY1BhZFRlbXBsYXRlICogdG1wbCwgY29uc3QgZ2NoYXIgKiBzaW5rcGFkbmFtZSkKLXsKLSAgZ2NoYXIgKmxvY2F0aW9uOwotICBHc3RFbGVtZW50ICpxdG11eDsKLSAgR3N0RWxlbWVudCAqZmlsZXNpbms7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGludCBpOwotICBnaW50IGJ5dGVzW10gPSB7IDE2LCAyMiwgMTIgfTsKLSAgZ2ludDY0IGR1cmF0aW9uc1tdID0geyBHU1RfU0VDT05EICogMywgR1NUX1NFQ09ORCAqIDUsIEdTVF9TRUNPTkQgKiAyIH07Ci0gIGdpbnQ2NCB0b3RhbF9ieXRlcyA9IDA7Ci0gIEdzdENsb2NrVGltZSB0b3RhbF9kdXJhdGlvbiA9IDA7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBsb2NhdGlvbiA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzLyVzLSVkIiwgZ19nZXRfdG1wX2RpciAoKSwgInF0bXV4dGVzdCIsCi0gICAgICBnX3JhbmRvbV9pbnQgKCkpOwotICBHU1RfSU5GTyAoIlVzaW5nIGxvY2F0aW9uICVzIGZvciBiaXRyYXRlIHRlc3QiLCBsb2NhdGlvbik7Ci0gIHF0bXV4ID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKGVsZW1lbnRuYW1lKTsKLSAgZmlsZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmaWxlc2luayIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGZpbGVzaW5rLCAibG9jYXRpb24iLCBsb2NhdGlvbiwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHF0bXV4LCBmaWxlc2luayk7Ci0gIG15c3JjcGFkID0gc2V0dXBfc3JjX3BhZCAocXRtdXgsIHRtcGwsIHNpbmtwYWRuYW1lKTsKLSAgZmFpbF91bmxlc3MgKG15c3JjcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLQotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGZpbGVzaW5rLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsCi0gICAgICAiY291bGQgbm90IHNldCBmaWxlc2luayB0byBwbGF5aW5nIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF0bXV4LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9wYWRfdGVtcGxhdGVfY2FwcyAobXlzcmNwYWQpOwotICBnc3RfcGFkX3NldF9jYXBzIChteXNyY3BhZCwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICAvKiBlbnN1cmUgc2VnbWVudCAoZm9ybWF0KSBwcm9wZXJseSBzZXR1cCAqLwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChieXRlc1tpXSk7Ci0gICAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGluYnVmZmVyLCAwLCAwLCBieXRlc1tpXSk7Ci0gICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IHRvdGFsX2R1cmF0aW9uOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGluYnVmZmVyKSA9IChHc3RDbG9ja1RpbWUpIGR1cmF0aW9uc1tpXTsKLSAgICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgICB0b3RhbF9ieXRlcyArPSBnc3RfYnVmZmVyX2dldF9zaXplIChpbmJ1ZmZlcik7Ci0gICAgdG90YWxfZHVyYXRpb24gKz0gR1NUX0JVRkZFUl9EVVJBVElPTiAoaW5idWZmZXIpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICB9Ci0KLSAgLyogc2VuZCBlb3MgdG8gaGF2ZSBtb292IHdyaXR0ZW4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSA9PSBUUlVFKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHF0bXV4LCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsZXNpbmssIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3RfY2hlY2tfZHJvcF9idWZmZXJzICgpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIHRlYXJkb3duX3NyY19wYWQgKG15c3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZmlsZXNpbmspOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAocXRtdXgpOwotCi0gIC8qIGNoZWNrIHRoZSBiaXRyYXRlIHRhZyAqLwotICB7Ci0gICAgR3N0VGFnTGlzdCAqdGFnbGlzdCA9IE5VTEw7Ci0gICAgZ3VpbnQgYml0cmF0ZSA9IDA7Ci0gICAgZ3VpbnQgZXhwZWN0ZWQ7Ci0KLSAgICBmYWlsX3VubGVzcyAoZXh0cmFjdF90YWdzIChsb2NhdGlvbiwgJnRhZ2xpc3QpKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3VpbnQgKHRhZ2xpc3QsIEdTVF9UQUdfQklUUkFURSwgJmJpdHJhdGUpKTsKLQotICAgIGV4cGVjdGVkID0KLSAgICAgICAgKGd1aW50KSBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKChndWludDY0KSB0b3RhbF9ieXRlcywKLSAgICAgICAgKGd1aW50NjQpIDggKiBHU1RfU0VDT05ELCAoZ3VpbnQ2NCkgdG90YWxfZHVyYXRpb24pOwotICAgIGZhaWxfdW5sZXNzIChiaXRyYXRlID09IGV4cGVjdGVkKTsKLSAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ2xpc3QpOwotICB9Ci0KLSAgLyogZGVsZXRlIGZpbGUgKi8KLSAgZ191bmxpbmsgKGxvY2F0aW9uKTsKLSAgZ19mcmVlIChsb2NhdGlvbik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F2ZXJhZ2VfYml0cmF0ZSkKLXsKLSAgdGVzdF9hdmVyYWdlX2JpdHJhdGVfY3VzdG9tICgibXA0bXV4IiwgJnNyY2F1ZGlvYWFjdGVtcGxhdGUsICJhdWRpb18ldSIpOwotICB0ZXN0X2F2ZXJhZ2VfYml0cmF0ZV9jdXN0b20gKCJtcDRtdXgiLCAmc3JjdmlkZW9oMjY0dGVtcGxhdGUsICJ2aWRlb18ldSIpOwotCi0gIHRlc3RfYXZlcmFnZV9iaXRyYXRlX2N1c3RvbSAoInF0bXV4IiwgJnNyY2F1ZGlvYWFjdGVtcGxhdGUsICJhdWRpb18ldSIpOwotICB0ZXN0X2F2ZXJhZ2VfYml0cmF0ZV9jdXN0b20gKCJxdG11eCIsICZzcmN2aWRlb2gyNjR0ZW1wbGF0ZSwgInZpZGVvXyV1Iik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RydWN0IFRlc3RJbnB1dERhdGEKLXsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR0xpc3QgKmlucHV0OwotICBHVGhyZWFkICp0aHJlYWQ7Ci0KLSAgLyogV2hlbiBjb21wYXJpbmcgdHMsIHRoZSBpbnB1dCB3aWxsIGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGlzICovCi0gIGdpbnQ2NCB0c19vZmZzZXQ7Ci0gIC8qIER1ZSB0byBEVFMsIHRoZSBzZWdtZW50IHN0YXJ0IG1pZ2h0IGJlIHNoaWZ0ZWQgc28gdGhpcyBsaXN0Ci0gICAqIGlzIHVzZWQgdG8gdmVmaXR5IGVhY2ggcmVjZWl2ZWQgc2VnbWVudHMgKi8KLSAgR0xpc3QgKmV4cGVjdGVkX3NlZ21lbnRfc3RhcnQ7Ci0KLSAgR3N0Q2xvY2tUaW1lIGV4cGVjdGVkX2dhcF90czsKLSAgR3N0Q2xvY2tUaW1lIGV4cGVjdGVkX2dhcF9kdXJhdGlvbjsKLSAgZ2Jvb2xlYW4gZ2FwX3JlY2VpdmVkOwotCi0gIEdzdFBhZCAqc2lua3BhZDsKLQotICBHTGlzdCAqb3V0cHV0X2l0ZXI7Ci19OwotCi1zdGF0aWMgdm9pZAotdGVzdF9pbnB1dF9kYXRhX2luaXQgKHN0cnVjdCBUZXN0SW5wdXREYXRhICpkYXRhKQotewotICBkYXRhLT50c19vZmZzZXQgPSAwOwotICBkYXRhLT5leHBlY3RlZF9zZWdtZW50X3N0YXJ0ID0gTlVMTDsKLSAgZGF0YS0+ZXhwZWN0ZWRfZ2FwX3RzID0gMDsKLSAgZGF0YS0+ZXhwZWN0ZWRfZ2FwX2R1cmF0aW9uID0gMDsKLSAgZGF0YS0+Z2FwX3JlY2VpdmVkID0gRkFMU0U7Ci0gIGRhdGEtPnNyY3BhZCA9IE5VTEw7Ci0gIGRhdGEtPnNpbmtwYWQgPSBOVUxMOwotICBkYXRhLT5pbnB1dCA9IE5VTEw7Ci0gIGRhdGEtPnRocmVhZCA9IE5VTEw7Ci0KLSAgdGVzdF9pbnB1dF9wdXNoX3NlZ21lbnRfc3RhcnQgKGRhdGEsIDApOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9pbnB1dF9kYXRhX2NsZWFuIChzdHJ1Y3QgVGVzdElucHV0RGF0YSAqZGF0YSkKLXsKLSAgZ19saXN0X2ZyZWVfZnVsbCAoZGF0YS0+aW5wdXQsIChHRGVzdHJveU5vdGlmeSkgZ3N0X21pbmlfb2JqZWN0X3VucmVmKTsKLQotICBpZiAoZGF0YS0+c2lua3BhZCkgewotICAgIGdzdF9wYWRfc2V0X2FjdGl2ZSAoZGF0YS0+c2lua3BhZCwgRkFMU0UpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEtPnNpbmtwYWQpOwotICB9Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChkYXRhLT5zcmNwYWQsIEZBTFNFKTsKLSAgdGVhcmRvd25fc3JjX3BhZCAoZGF0YS0+c3JjcGFkKTsKLX0KLQotc3RhdGljIGdwb2ludGVyCi10ZXN0X2lucHV0X3B1c2hfZGF0YSAoZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBzdHJ1Y3QgVGVzdElucHV0RGF0YSAqZGF0YSA9IHVzZXJfZGF0YTsKLSAgR0xpc3QgKml0ZXI7Ci0gIEdzdEZsb3dSZXR1cm4gZmxvdzsKLQotICBmb3IgKGl0ZXIgPSBkYXRhLT5pbnB1dDsgaXRlcjsgaXRlciA9IGdfbGlzdF9uZXh0IChpdGVyKSkgewotICAgIGlmIChHU1RfSVNfQlVGRkVSIChpdGVyLT5kYXRhKSkgewotICAgICAgR1NUX0lORk8gKCJQdXNoaW5nIGJ1ZmZlciAlIiBHU1RfUFRSX0ZPUk1BVCAiIG9uIHBhZDogJXM6JXMiLCBpdGVyLT5kYXRhLAotICAgICAgICAgIEdTVF9ERUJVR19QQURfTkFNRSAoZGF0YS0+c3JjcGFkKSk7Ci0gICAgICBmbG93ID0KLSAgICAgICAgICBnc3RfcGFkX3B1c2ggKGRhdGEtPnNyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoKEdzdEJ1ZmZlciAqKSBpdGVyLT5kYXRhKSk7Ci0gICAgICBmYWlsX3VubGVzcyAoZmxvdyA9PSBHU1RfRkxPV19PSyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9JTkZPX09CSkVDVCAoZGF0YS0+c3JjcGFkLCAiUHVzaGluZyBldmVudDogJSIKLSAgICAgICAgICBHU1RfUFRSX0ZPUk1BVCwgaXRlci0+ZGF0YSk7Ci0gICAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChkYXRhLT5zcmNwYWQsCi0gICAgICAgICAgICAgIGdzdF9ldmVudF9yZWYgKChHc3RFdmVudCAqKSBpdGVyLT5kYXRhKSkgPT0gVFJVRSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9pbnB1dF9wdXNoX3NlZ21lbnRfc3RhcnQgKGdwb2ludGVyIHVzZXJfZGF0YSwgR3N0Q2xvY2tUaW1lIHN0YXJ0KQotewotICBzdHJ1Y3QgVGVzdElucHV0RGF0YSAqZGF0YSA9IHVzZXJfZGF0YTsKLSAgR3N0Q2xvY2tUaW1lICpzdGFydF9kYXRhID0gZ19tYWxsb2MgKHNpemVvZiAoR3N0Q2xvY2tUaW1lKSk7Ci0KLSAgKnN0YXJ0X2RhdGEgPSBzdGFydDsKLSAgZGF0YS0+ZXhwZWN0ZWRfc2VnbWVudF9zdGFydCA9IGdfbGlzdF9hcHBlbmQgKGRhdGEtPmV4cGVjdGVkX3NlZ21lbnRfc3RhcnQsCi0gICAgICBzdGFydF9kYXRhKTsKLX0KLQotc3RhdGljIEdzdENsb2NrVGltZQotdGVzdF9pbnB1dF9wb3Bfc2VnbWVudF9zdGFydCAoZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBzdHJ1Y3QgVGVzdElucHV0RGF0YSAqZGF0YSA9IHVzZXJfZGF0YTsKLSAgR3N0Q2xvY2tUaW1lIHN0YXJ0ID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR3N0Q2xvY2tUaW1lICpzdGFydF9kYXRhOwotCi0gIGlmIChkYXRhLT5leHBlY3RlZF9zZWdtZW50X3N0YXJ0KSB7Ci0gICAgc3RhcnRfZGF0YSA9IGRhdGEtPmV4cGVjdGVkX3NlZ21lbnRfc3RhcnQtPmRhdGE7Ci0gICAgZGF0YS0+ZXhwZWN0ZWRfc2VnbWVudF9zdGFydCA9Ci0gICAgICAgIGdfbGlzdF9kZWxldGVfbGluayAoZGF0YS0+ZXhwZWN0ZWRfc2VnbWVudF9zdGFydCwKLSAgICAgICAgZGF0YS0+ZXhwZWN0ZWRfc2VnbWVudF9zdGFydCk7Ci0gICAgc3RhcnQgPSAqc3RhcnRfZGF0YTsKLSAgICBnX2ZyZWUgKHN0YXJ0X2RhdGEpOwotICB9Ci0KLSAgcmV0dXJuIHN0YXJ0OwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWNyZWF0ZV9idWZmZXIgKEdzdENsb2NrVGltZSBwdHMsIEdzdENsb2NrVGltZSBkdHMsIEdzdENsb2NrVGltZSBkdXJhdGlvbiwKLSAgICBndWludCBieXRlcykKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50OCAqZGF0YTsKLQotICBkYXRhID0gZ19tYWxsb2MwIChieXRlcyk7Ci0gIGJ1ZiA9IGdzdF9idWZmZXJfbmV3X3dyYXBwZWQgKGRhdGEsIGJ5dGVzKTsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBwdHM7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gZHRzOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWYpID0gZHVyYXRpb247Ci0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1fdGVzdF9zaW5rX3BhZF9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgc3RydWN0IFRlc3RJbnB1dERhdGEgKnRlc3RfZGF0YSA9IGdfb2JqZWN0X2dldF9xZGF0YSAoR19PQkpFQ1QgKHBhZCksCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoInRlc3QtbXV4LXBhZCIpKTsKLSAgR3N0QnVmZmVyICpleHBlY3RlZF9idWZmZXI7Ci0KLSAgZmFpbF91bmxlc3MgKHRlc3RfZGF0YS0+b3V0cHV0X2l0ZXIpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX0JVRkZFUiAodGVzdF9kYXRhLT5vdXRwdXRfaXRlci0+ZGF0YSkpOwotICBleHBlY3RlZF9idWZmZXIgPSB0ZXN0X2RhdGEtPm91dHB1dF9pdGVyLT5kYXRhOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSA9PQotICAgICAgKEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEIChleHBlY3RlZF9idWZmZXIpID8KLSAgICAgICAgICBHU1RfQlVGRkVSX1BUUyAoZXhwZWN0ZWRfYnVmZmVyKSAtCi0gICAgICAgICAgdGVzdF9kYXRhLT50c19vZmZzZXQgOiBHU1RfQlVGRkVSX1BUUyAoZXhwZWN0ZWRfYnVmZmVyKSkpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcikgPT0KLSAgICAgIChHU1RfQlVGRkVSX0RUU19JU19WQUxJRCAoZXhwZWN0ZWRfYnVmZmVyKSA/Ci0gICAgICAgICAgR1NUX0JVRkZFUl9EVFMgKGV4cGVjdGVkX2J1ZmZlcikgLQotICAgICAgICAgIHRlc3RfZGF0YS0+dHNfb2Zmc2V0IDogR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcikpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPT0KLSAgICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGV4cGVjdGVkX2J1ZmZlcikpOwotCi0gIHRlc3RfZGF0YS0+b3V0cHV0X2l0ZXIgPSBnX2xpc3RfbmV4dCAodGVzdF9kYXRhLT5vdXRwdXRfaXRlcik7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1zdGF0aWMgdm9pZAotY29tcGFyZV9ldmVudCAoR3N0RXZlbnQgKiBldmVudCwgR3N0RXZlbnQgKiBleHBlY3RlZCkKLXsKLSAgZmFpbF91bmxlc3MgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX1RZUEUgKGV4cGVjdGVkKSk7Ci0gIHN3aXRjaCAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSkgewotICAgIGNhc2UgR1NUX0VWRU5UX0NBUFM6ewotICAgICAgR3N0Q2FwcyAqY2FwcywgKmV4cGVjdGVkX2NhcHM7Ci0KLSAgICAgIGdzdF9ldmVudF9wYXJzZV9jYXBzIChldmVudCwgJmNhcHMpOwotICAgICAgZ3N0X2V2ZW50X3BhcnNlX2NhcHMgKGV4cGVjdGVkLCAmZXhwZWN0ZWRfY2Fwcyk7Ci0gICAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfY2FuX2ludGVyc2VjdCAoY2FwcywgZXhwZWN0ZWRfY2FwcykpOwotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLV90ZXN0X3NpbmtfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgc3RydWN0IFRlc3RJbnB1dERhdGEgKnRlc3RfZGF0YSA9IGdfb2JqZWN0X2dldF9xZGF0YSAoR19PQkpFQ1QgKHBhZCksCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoInRlc3QtbXV4LXBhZCIpKTsKLQotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQ6Ci0gICAgY2FzZSBHU1RfRVZFTlRfQ0FQUzoKLSAgICBjYXNlIEdTVF9FVkVOVF9FT1M6Ci0gICAgICBmYWlsX3VubGVzcyAodGVzdF9kYXRhLT5vdXRwdXRfaXRlcik7Ci0gICAgICBmYWlsX3VubGVzcyAoR1NUX0lTX0VWRU5UICh0ZXN0X2RhdGEtPm91dHB1dF9pdGVyLT5kYXRhKSk7Ci0gICAgICBjb21wYXJlX2V2ZW50IChldmVudCwgdGVzdF9kYXRhLT5vdXRwdXRfaXRlci0+ZGF0YSk7Ci0gICAgICB0ZXN0X2RhdGEtPm91dHB1dF9pdGVyID0gZ19saXN0X25leHQgKHRlc3RfZGF0YS0+b3V0cHV0X2l0ZXIpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfRVZFTlRfU0VHTUVOVDp7Ci0gICAgICBjb25zdCBHc3RTZWdtZW50ICpzZWdtZW50OwotCi0gICAgICBmYWlsX3VubGVzcyAodGVzdF9kYXRhLT5vdXRwdXRfaXRlcik7Ci0gICAgICBmYWlsX3VubGVzcyAoR1NUX0lTX0VWRU5UICh0ZXN0X2RhdGEtPm91dHB1dF9pdGVyLT5kYXRhKSk7Ci0gICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzZWdtZW50KTsKLSAgICAgIGZhaWxfdW5sZXNzIChzZWdtZW50LT5zdGFydCA9PSB0ZXN0X2lucHV0X3BvcF9zZWdtZW50X3N0YXJ0ICh0ZXN0X2RhdGEpKTsKLSAgICAgIHRlc3RfZGF0YS0+b3V0cHV0X2l0ZXIgPSBnX2xpc3RfbmV4dCAodGVzdF9kYXRhLT5vdXRwdXRfaXRlcik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfRVZFTlRfR0FQOnsKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXA7Ci0gICAgICBHc3RDbG9ja1RpbWUgZHVyYXRpb247Ci0gICAgICBnc3RfZXZlbnRfcGFyc2VfZ2FwIChldmVudCwgJnRpbWVzdGFtcCwgJmR1cmF0aW9uKTsKLSAgICAgIGZhaWxfdW5sZXNzICh0aW1lc3RhbXAgPT0gdGVzdF9kYXRhLT5leHBlY3RlZF9nYXBfdHMpOwotICAgICAgZmFpbF91bmxlc3MgKGR1cmF0aW9uID09IHRlc3RfZGF0YS0+ZXhwZWN0ZWRfZ2FwX2R1cmF0aW9uKTsKLSAgICAgIHRlc3RfZGF0YS0+Z2FwX3JlY2VpdmVkID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9FVkVOVF9UQUc6Ci0gICAgICAvKiBpZ25vcmUgdGhpcyBldmVudCAqLwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEdTVF9FUlJPUl9PQkpFQ1QgKHBhZCwgIlVuZXhwZWN0ZWQgZXZlbnQ6ICUiIEdTVF9QVFJfRk9STUFULCBldmVudCk7Ci0gICAgICBmYWlsICgiVW5leHBlY3RlZCBldmVudCByZWNlaXZlZCAlcyIsIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSk7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLV90ZXN0X3BhZF9hZGRlZF9jYiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIEdzdFBhZCAqIHBhZCwgZ3BvaW50ZXIgdWRhdGEpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIHN0cnVjdCBUZXN0SW5wdXREYXRhICoqaW5wdXRzID0gdWRhdGE7Ci0gIGdpbnQgaSA9IC0xOwotICBjb25zdCBnY2hhciAqbmFtZTsKLSAgY29uc3QgZ2NoYXIgKnN0cm5hbWU7Ci0KLSAgY2FwcyA9IGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyAocGFkKTsKLSAgc3RybmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApKTsKLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHN0cm5hbWUsICJ2aWRlby8iKSkgewotICAgIGkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiB2aWRlbyBpcyAwLCBhdWRpbyBpcyAxICovCi0gICAgbmFtZSA9ICJ2aWRlb3NpbmsiOwotICB9IGVsc2UgewotICAgIGkgPSAxOwotICAgIG5hbWUgPSAiYXVkaW9zaW5rIjsKLSAgfQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3MgKGkgIT0gLTEpOwotICBmYWlsX3VubGVzcyAoaW5wdXRzW2ldLT5zaW5rcGFkID09IE5VTEwpOwotICBpbnB1dHNbaV0tPnNpbmtwYWQgPSBnc3RfcGFkX25ldyAobmFtZSwgR1NUX1BBRF9TSU5LKTsKLSAgaW5wdXRzW2ldLT5vdXRwdXRfaXRlciA9IGlucHV0c1tpXS0+aW5wdXQ7Ci0gIGdfb2JqZWN0X3NldF9xZGF0YSAoR19PQkpFQ1QgKGlucHV0c1tpXS0+c2lua3BhZCksCi0gICAgICBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyAoInRlc3QtbXV4LXBhZCIpLCBpbnB1dHNbaV0pOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoaW5wdXRzW2ldLT5zaW5rcGFkLCBfdGVzdF9zaW5rX3BhZF9jaGFpbik7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChpbnB1dHNbaV0tPnNpbmtwYWQsIF90ZXN0X3NpbmtfcGFkX2V2ZW50KTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChpbnB1dHNbaV0tPnNpbmtwYWQsIFRSVUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChwYWQsIGlucHV0c1tpXS0+c2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX291dHB1dCAoY29uc3QgZ2NoYXIgKiBsb2NhdGlvbiwgc3RydWN0IFRlc3RJbnB1dERhdGEgKmlucHV0MSwKLSAgICBzdHJ1Y3QgVGVzdElucHV0RGF0YSAqaW5wdXQyKQotewotICBHc3RFbGVtZW50ICpmaWxlc3JjOwotICBHc3RFbGVtZW50ICpkZW11eDsKLSAgc3RydWN0IFRlc3RJbnB1dERhdGEgKmlucHV0c1syXSA9IHsgaW5wdXQxLCBpbnB1dDIgfTsKLQotICBmaWxlc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNyYyIsIE5VTEwpOwotICBkZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF0ZGVtdXgiLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoZmlsZXNyYywgZGVtdXgpKTsKLQotICBnX29iamVjdF9zZXQgKGZpbGVzcmMsICJsb2NhdGlvbiIsIGxvY2F0aW9uLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoZGVtdXgsICJwYWQtYWRkZWQiLCAoR0NhbGxiYWNrKSBfdGVzdF9wYWRfYWRkZWRfY2IsIGlucHV0cyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZGVtdXgsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGZpbGVzcmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogRklYTUUgdXNlIGEgbWFpbiBsb29wICovCi0gIGdfdXNsZWVwICgyICogR19VU0VDX1BFUl9TRUMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRlbXV4LAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChmaWxlc3JjLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChmaWxlc3JjKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZGVtdXgpOwotfQotCi0vKiBNdXhlcyBhIGZpbGUgd2l0aCBxdG11eCB1c2luZyB0aGUgaW5wdXRzIHByb3ZpZGVkIGFuZAotICogdGhlbiB2ZXJpZmllcyB0aGF0IHRoZSBnZW5lcmF0ZWQgZmlsZSBjb3JyZXNwb25kcyB0byB0aGUKLSAqIGRhdGEgaW4gdGhlIGlucHV0cyAqLwotc3RhdGljIHZvaWQKLXJ1bl9tdXhpbmdfdGVzdCAoc3RydWN0IFRlc3RJbnB1dERhdGEgKmlucHV0MSwgc3RydWN0IFRlc3RJbnB1dERhdGEgKmlucHV0MikKLXsKLSAgZ2NoYXIgKmxvY2F0aW9uOwotICBHc3RFbGVtZW50ICpxdG11eDsKLSAgR3N0RWxlbWVudCAqZmlsZXNpbms7Ci0KLSAgbG9jYXRpb24gPSBnX3N0cmR1cF9wcmludGYgKCIlcy8lcy0lZCIsIGdfZ2V0X3RtcF9kaXIgKCksICJxdG11eHRlc3QiLAotICAgICAgZ19yYW5kb21faW50ICgpKTsKLSAgcXRtdXggPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInF0bXV4Iik7Ci0gIGZpbGVzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNpbmsiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChmaWxlc2luaywgImxvY2F0aW9uIiwgbG9jYXRpb24sIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rIChxdG11eCwgZmlsZXNpbmspOwotCi0gIGlucHV0MS0+c3JjcGFkID0gc2V0dXBfc3JjX3BhZCAocXRtdXgsICZzcmN2aWRlb3Jhd3RlbXBsYXRlLCAidmlkZW9fJXUiKTsKLSAgZmFpbF91bmxlc3MgKGlucHV0MS0+c3JjcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKGlucHV0MS0+c3JjcGFkLCBUUlVFKTsKLQotICBpbnB1dDItPnNyY3BhZCA9IHNldHVwX3NyY19wYWQgKHF0bXV4LCAmc3JjYXVkaW9hYWN0ZW1wbGF0ZSwgImF1ZGlvXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChpbnB1dDItPnNyY3BhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChpbnB1dDItPnNyY3BhZCwgVFJVRSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsZXNpbmssCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwKLSAgICAgICJjb3VsZCBub3Qgc2V0IGZpbGVzaW5rIHRvIHBsYXlpbmciKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXRtdXgsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBpbnB1dDEtPnRocmVhZCA9Ci0gICAgICBnX3RocmVhZF9uZXcgKCJ0ZXN0LXB1c2gtZGF0YS0xIiwgdGVzdF9pbnB1dF9wdXNoX2RhdGEsIGlucHV0MSk7Ci0gIGlucHV0Mi0+dGhyZWFkID0KLSAgICAgIGdfdGhyZWFkX25ldyAoInRlc3QtcHVzaC1kYXRhLTIiLCB0ZXN0X2lucHV0X3B1c2hfZGF0YSwgaW5wdXQyKTsKLQotICAvKiBGSVhNRSBzZXQgYSBtYWlubG9vcCBhbmQgd2FpdCBmb3IgRU9TICovCi0KLSAgZ190aHJlYWRfam9pbiAoaW5wdXQxLT50aHJlYWQpOwotICBnX3RocmVhZF9qb2luIChpbnB1dDItPnRocmVhZCk7Ci0gIGlucHV0MS0+dGhyZWFkID0gTlVMTDsKLSAgaW5wdXQyLT50aHJlYWQgPSBOVUxMOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocXRtdXgsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChmaWxlc2luaywgR1NUX1NUQVRFX05VTEwpOwotCi0gIGNoZWNrX291dHB1dCAobG9jYXRpb24sIGlucHV0MSwgaW5wdXQyKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChmaWxlc2luayk7Ci0gIHRlc3RfaW5wdXRfZGF0YV9jbGVhbiAoaW5wdXQxKTsKLSAgdGVzdF9pbnB1dF9kYXRhX2NsZWFuIChpbnB1dDIpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAocXRtdXgpOwotCi0gIC8qIGRlbGV0ZSBmaWxlICovCi0gIGdfdW5saW5rIChsb2NhdGlvbik7Ci0gIGdfZnJlZSAobG9jYXRpb24pOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdXhpbmcpCi17Ci0gIHN0cnVjdCBUZXN0SW5wdXREYXRhIGlucHV0MSwgaW5wdXQyOwotICBHc3RDYXBzICpjYXBzOwotCi0gIHRlc3RfaW5wdXRfZGF0YV9pbml0ICgmaW5wdXQxKTsKLSAgdGVzdF9pbnB1dF9kYXRhX2luaXQgKCZpbnB1dDIpOwotCi0gIC8qIENyZWF0ZSB0aGUgaW5wdXRzLCBhZnRlciBjYWxsaW5nIHRoZSBydW4gYmVsb3csIGFsbCB0aGlzIGRhdGEgaXMKLSAgICogdHJhbnNmZXJlZCB0byBpdCBhbmQgd2UgaGF2ZSBubyBuZWVkIHRvIGNsZWFuIHVwICovCi0gIGlucHV0MS5pbnB1dCA9IE5VTEw7Ci0gIGlucHV0MS5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdC0xIikpOwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgidmlkZW8veC1yYXcsIHdpZHRoPShpbnQpODAwLCBoZWlnaHQ9KGludCk2MDAsICIKLSAgICAgICJmcmFtZXJhdGU9KGZyYWN0aW9uKTEvMSwgZm9ybWF0PShzdHJpbmcpUkdCIik7Ci0gIGlucHV0MS5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmlucHV0MS5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZpbnB1dDEuc2VnbWVudCkpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgwLCBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgICAgIEdTVF9TRUNPTkQsIDgwMCAqIDYwMCAqIDMpKTsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoMSAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX1NFQ09ORCwgODAwICogNjAwICogMykpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgyICogR1NUX1NFQ09ORCwKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLCBHU1RfU0VDT05ELCA4MDAgKiA2MDAgKiAzKSk7Ci0gIGlucHV0MS5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIGlucHV0Mi5pbnB1dCA9IE5VTEw7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdC0yIikpOwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX0FBQ19DQVBTX1NUUklORyk7Ci0gIGlucHV0Mi5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmlucHV0Mi5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZpbnB1dDIuc2VnbWVudCkpOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBjcmVhdGVfYnVmZmVyICgwLCAwLCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDEgKiBHU1RfU0VDT05ELAotICAgICAgICAgIDEgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDIgKiBHU1RfU0VDT05ELAotICAgICAgICAgIDIgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0Mi5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIHJ1bl9tdXhpbmdfdGVzdCAoJmlucHV0MSwgJmlucHV0Mik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdXhpbmdfbm9uX3plcm9fc2VnbWVudCkKLXsKLSAgc3RydWN0IFRlc3RJbnB1dERhdGEgaW5wdXQxLCBpbnB1dDI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgdGVzdF9pbnB1dF9kYXRhX2luaXQgKCZpbnB1dDEpOwotICB0ZXN0X2lucHV0X2RhdGFfaW5pdCAoJmlucHV0Mik7Ci0KLSAgLyogQ3JlYXRlIHRoZSBpbnB1dHMsIGFmdGVyIGNhbGxpbmcgdGhlIHJ1biBiZWxvdywgYWxsIHRoaXMgZGF0YSBpcwotICAgKiB0cmFuc2ZlcmVkIHRvIGl0IGFuZCB3ZSBoYXZlIG5vIG5lZWQgdG8gY2xlYW4gdXAgKi8KLSAgaW5wdXQxLmlucHV0ID0gTlVMTDsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0LTEiKSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJ2aWRlby94LXJhdywgd2lkdGg9KGludCk4MDAsIGhlaWdodD0oaW50KTYwMCwgIgotICAgICAgImZyYW1lcmF0ZT0oZnJhY3Rpb24pMS8xLCBmb3JtYXQ9KHN0cmluZylSR0IiKTsKLSAgaW5wdXQxLmlucHV0ID0gZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmaW5wdXQxLnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGlucHV0MS5zZWdtZW50LnN0YXJ0ID0gMTAgKiBHU1RfU0VDT05EOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZpbnB1dDEuc2VnbWVudCkpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgxMCAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX1NFQ09ORCwgODAwICogNjAwICogMykpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgxMSAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX1NFQ09ORCwgODAwICogNjAwICogMykpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgxMiAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX1NFQ09ORCwgODAwICogNjAwICogMykpOwotICBpbnB1dDEuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgaW5wdXQxLnRzX29mZnNldCA9IEdTVF9TRUNPTkQgKiAxMDsKLQotICBpbnB1dDIuaW5wdXQgPSBOVUxMOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QtMiIpKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19BQUNfQ0FQU19TVFJJTkcpOwotICBpbnB1dDIuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZpbnB1dDIuc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgaW5wdXQyLnNlZ21lbnQuc3RhcnQgPSAxMCAqIEdTVF9TRUNPTkQ7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmlucHV0Mi5zZWdtZW50KSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDEwICogR1NUX1NFQ09ORCwKLSAgICAgICAgICAxMCAqIEdTVF9TRUNPTkQsIEdTVF9TRUNPTkQsIDQwOTYpKTsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoMTEgKiBHU1RfU0VDT05ELAotICAgICAgICAgIDExICogR1NUX1NFQ09ORCwgR1NUX1NFQ09ORCwgNDA5NikpOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBjcmVhdGVfYnVmZmVyICgxMiAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgMTIgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0Mi5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotICBpbnB1dDIudHNfb2Zmc2V0ID0gR1NUX1NFQ09ORCAqIDEwOwotCi0gIHJ1bl9tdXhpbmdfdGVzdCAoJmlucHV0MSwgJmlucHV0Mik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdXhpbmdfbm9uX3plcm9fc2VnbWVudF9kaWZmZXJlbnQpCi17Ci0gIHN0cnVjdCBUZXN0SW5wdXREYXRhIGlucHV0MSwgaW5wdXQyOwotICBHc3RDYXBzICpjYXBzOwotCi0gIHRlc3RfaW5wdXRfZGF0YV9pbml0ICgmaW5wdXQxKTsKLSAgdGVzdF9pbnB1dF9kYXRhX2luaXQgKCZpbnB1dDIpOwotCi0gIC8qIENyZWF0ZSB0aGUgaW5wdXRzLCBhZnRlciBjYWxsaW5nIHRoZSBydW4gYmVsb3csIGFsbCB0aGlzIGRhdGEgaXMKLSAgICogdHJhbnNmZXJlZCB0byBpdCBhbmQgd2UgaGF2ZSBubyBuZWVkIHRvIGNsZWFuIHVwICovCi0gIGlucHV0MS5pbnB1dCA9IE5VTEw7Ci0gIGlucHV0MS5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdC0xIikpOwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcKLSAgICAgICgidmlkZW8veC1yYXcsIHdpZHRoPShpbnQpODAwLCBoZWlnaHQ9KGludCk2MDAsICIKLSAgICAgICJmcmFtZXJhdGU9KGZyYWN0aW9uKTEvMSwgZm9ybWF0PShzdHJpbmcpUkdCIik7Ci0gIGlucHV0MS5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmlucHV0MS5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBpbnB1dDEuc2VnbWVudC5zdGFydCA9IDUgKiBHU1RfU0VDT05EOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZpbnB1dDEuc2VnbWVudCkpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICg1ICogR1NUX1NFQ09ORCwKLSAgICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLCBHU1RfU0VDT05ELCA4MDAgKiA2MDAgKiAzKSk7Ci0gIGlucHV0MS5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDYgKiBHU1RfU0VDT05ELAotICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEdTVF9TRUNPTkQsIDgwMCAqIDYwMCAqIDMpKTsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoNyAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX1NFQ09ORCwgODAwICogNjAwICogMykpOwotICBpbnB1dDEuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgaW5wdXQxLnRzX29mZnNldCA9IEdTVF9TRUNPTkQgKiA1OwotCi0gIGlucHV0Mi5pbnB1dCA9IE5VTEw7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdC0yIikpOwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX0FBQ19DQVBTX1NUUklORyk7Ci0gIGlucHV0Mi5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19jYXBzIChjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJmlucHV0Mi5zZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBpbnB1dDIuc2VnbWVudC5zdGFydCA9IDEwICogR1NUX1NFQ09ORDsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmaW5wdXQyLnNlZ21lbnQpKTsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoMTAgKiBHU1RfU0VDT05ELAotICAgICAgICAgIDEwICogR1NUX1NFQ09ORCwgR1NUX1NFQ09ORCwgNDA5NikpOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBjcmVhdGVfYnVmZmVyICgxMSAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgMTEgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDEyICogR1NUX1NFQ09ORCwKLSAgICAgICAgICAxMiAqIEdTVF9TRUNPTkQsIEdTVF9TRUNPTkQsIDQwOTYpKTsKLSAgaW5wdXQyLmlucHV0ID0gZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0gIGlucHV0Mi50c19vZmZzZXQgPSBHU1RfU0VDT05EICogMTA7Ci0KLSAgcnVuX211eGluZ190ZXN0ICgmaW5wdXQxLCAmaW5wdXQyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdXhpbmdfZHRzX291dHNpZGVfc2VnbWVudCkKLXsKLSAgc3RydWN0IFRlc3RJbnB1dERhdGEgaW5wdXQxLCBpbnB1dDI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgdGVzdF9pbnB1dF9kYXRhX2luaXQgKCZpbnB1dDEpOwotICB0ZXN0X2lucHV0X2RhdGFfaW5pdCAoJmlucHV0Mik7Ci0KLSAgLyogQ3JlYXRlIHRoZSBpbnB1dHMsIGFmdGVyIGNhbGxpbmcgdGhlIHJ1biBiZWxvdywgYWxsIHRoaXMgZGF0YSBpcwotICAgKiB0cmFuc2ZlcmVkIHRvIGl0IGFuZCB3ZSBoYXZlIG5vIG5lZWQgdG8gY2xlYW4gdXAgKi8KLSAgaW5wdXQxLmlucHV0ID0gTlVMTDsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0LTEiKSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJ2aWRlby94LWgyNjQsIHdpZHRoPShpbnQpODAwLCBoZWlnaHQ9KGludCk2MDAsICIKLSAgICAgICJmcmFtZXJhdGU9KGZyYWN0aW9uKTEvMSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgY29kZWNfZGF0YT0oYnVmZmVyKTAwMDAsIgotICAgICAgIiBhbGlnbm1lbnQ9KHN0cmluZylhdSwgbGV2ZWw9KGludCkyLCBwcm9maWxlPShzdHJpbmcpaGlnaCIpOwotICBpbnB1dDEuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZpbnB1dDEuc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgaW5wdXQxLnNlZ21lbnQuc3RhcnQgPSAxICogR1NUX1NFQ09ORDsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmaW5wdXQxLnNlZ21lbnQpKTsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoMSAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgMCwgR1NUX1NFQ09ORCwgNDA5NikpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgyICogR1NUX1NFQ09ORCwKLSAgICAgICAgICAxICogR1NUX1NFQ09ORCwgR1NUX1NFQ09ORCwgNDA5NikpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgzICogR1NUX1NFQ09ORCwKLSAgICAgICAgICAyICogR1NUX1NFQ09ORCwgR1NUX1NFQ09ORCwgNDA5NikpOwotICBpbnB1dDEuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgLyogRmlyc3QgRFRTIGlzIDAsIGZpcnN0IFBUUyBpcyAxcy4gVGhlIHNlZ21lbnQgc3RhcnQgYmVpbmcgMSwgdGhpcyBtZWFucwotICAgKiBydW5uaW5nIHRpbWUgLTFzIGFuZCAwLiBTbyB0aGUgb3V0cHV0IHNlZ21lbnQgc2hvdWxkIHN0YXJ0IGZyb20gMXMgdG8ga2VlcAotICAgKiB0aGUgc2FtZSBydW5uaW5nIHRpbWUgKi8KLSAgdGVzdF9pbnB1dF9wb3Bfc2VnbWVudF9zdGFydCAoJmlucHV0MSk7Ci0gIHRlc3RfaW5wdXRfcHVzaF9zZWdtZW50X3N0YXJ0ICgmaW5wdXQxLCBHU1RfU0VDT05EKTsKLQotICBpbnB1dDIuaW5wdXQgPSBOVUxMOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QtMiIpKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChBVURJT19BQUNfQ0FQU19TVFJJTkcpOwotICBpbnB1dDIuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZpbnB1dDIuc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmaW5wdXQyLnNlZ21lbnQpKTsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoMCwgMCwgR1NUX1NFQ09ORCwKLSAgICAgICAgICA0NDEwMCAqIDQgKiAyKSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKEdTVF9TRUNPTkQsIEdTVF9TRUNPTkQsCi0gICAgICAgICAgR1NUX1NFQ09ORCwgNDQxMDAgKiA0ICogMikpOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBjcmVhdGVfYnVmZmVyICgyICogR1NUX1NFQ09ORCwKLSAgICAgICAgICAyICogR1NUX1NFQ09ORCwgR1NUX1NFQ09ORCwgNDQxMDAgKiA0ICogMikpOwotICBpbnB1dDIuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLQotICBydW5fbXV4aW5nX3Rlc3QgKCZpbnB1dDEsICZpbnB1dDIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X211eGluZ19pbml0aWFsX2dhcCkKLXsKLSAgc3RydWN0IFRlc3RJbnB1dERhdGEgaW5wdXQxLCBpbnB1dDI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgdGVzdF9pbnB1dF9kYXRhX2luaXQgKCZpbnB1dDEpOwotICB0ZXN0X2lucHV0X2RhdGFfaW5pdCAoJmlucHV0Mik7Ci0KLSAgLyogQ3JlYXRlIHRoZSBpbnB1dHMsIGFmdGVyIGNhbGxpbmcgdGhlIHJ1biBiZWxvdywgYWxsIHRoaXMgZGF0YSBpcwotICAgKiB0cmFuc2ZlcmVkIHRvIGl0IGFuZCB3ZSBoYXZlIG5vIG5lZWQgdG8gY2xlYW4gdXAgKi8KLSAgaW5wdXQxLmlucHV0ID0gTlVMTDsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0LTEiKSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJ2aWRlby94LWgyNjQsIHdpZHRoPShpbnQpODAwLCBoZWlnaHQ9KGludCk2MDAsICIKLSAgICAgICJmcmFtZXJhdGU9KGZyYWN0aW9uKTEvMSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgY29kZWNfZGF0YT0oYnVmZmVyKTAwMDAsIgotICAgICAgIiBhbGlnbm1lbnQ9KHN0cmluZylhdSwgbGV2ZWw9KGludCkyLCBwcm9maWxlPShzdHJpbmcpaGlnaCIpOwotICBpbnB1dDEuaW5wdXQgPSBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZpbnB1dDEuc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgaW5wdXQxLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmaW5wdXQxLnNlZ21lbnQpKTsKLSAgLyogRHVwbGljYXRlIHRoZSBzZWdtZW50IHRvIHBsZWFzZSB0aGUgaGFybmVzcyAqLwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZpbnB1dDEuc2VnbWVudCkpOwotICBpbnB1dDEuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQxLmlucHV0LCBjcmVhdGVfYnVmZmVyICgxICogR1NUX1NFQ09ORCwKLSAgICAgICAgICAwLCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0MS5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDIgKiBHU1RfU0VDT05ELAotICAgICAgICAgIDEgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0MS5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDEuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDMgKiBHU1RfU0VDT05ELAotICAgICAgICAgIDIgKiBHU1RfU0VDT05ELCBHU1RfU0VDT05ELCA0MDk2KSk7Ci0gIGlucHV0MS5pbnB1dCA9IGdfbGlzdF9hcHBlbmQgKGlucHV0MS5pbnB1dCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpOwotCi0gIC8qIFdlIGV4cGVjdCBhIDFzIGdhcCBhdCB0aGUgc3RhcnQgKi8KLSAgaW5wdXQxLmV4cGVjdGVkX2dhcF9kdXJhdGlvbiA9IEdTVF9TRUNPTkQ7Ci0gIC8qIFRoZXJlIHdpbGwgYmUgdHdvIHNlZ21lbnRzLCBmaXJzdCBpcyAwLCBzbyBsZWF2ZSBpdCB0aGVyZSwgc2Vjb25kIHNob3VsZAotICAgKiBtYXRjaCB0aGUgZmlyc3QgQ1RUUyAoUFRTIC0gRFRTKSAqLwotICB0ZXN0X2lucHV0X3B1c2hfc2VnbWVudF9zdGFydCAoJmlucHV0MSwgR1NUX1NFQ09ORCk7Ci0KLSAgaW5wdXQyLmlucHV0ID0gTlVMTDsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0LTIiKSk7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoQVVESU9fQUFDX0NBUFNfU1RSSU5HKTsKLSAgaW5wdXQyLmlucHV0ID0gZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmaW5wdXQyLnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJmlucHV0Mi5zZWdtZW50KSk7Ci0gIGlucHV0Mi5pbnB1dCA9Ci0gICAgICBnX2xpc3RfYXBwZW5kIChpbnB1dDIuaW5wdXQsIGNyZWF0ZV9idWZmZXIgKDAsIDAsIEdTVF9TRUNPTkQsCi0gICAgICAgICAgNDQxMDAgKiA0ICogMikpOwotICBpbnB1dDIuaW5wdXQgPQotICAgICAgZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBjcmVhdGVfYnVmZmVyIChHU1RfU0VDT05ELCBHU1RfU0VDT05ELAotICAgICAgICAgIEdTVF9TRUNPTkQsIDQ0MTAwICogNCAqIDIpKTsKLSAgaW5wdXQyLmlucHV0ID0KLSAgICAgIGdfbGlzdF9hcHBlbmQgKGlucHV0Mi5pbnB1dCwgY3JlYXRlX2J1ZmZlciAoMiAqIEdTVF9TRUNPTkQsCi0gICAgICAgICAgMiAqIEdTVF9TRUNPTkQsIEdTVF9TRUNPTkQsIDQ0MTAwICogNCAqIDIpKTsKLSAgaW5wdXQyLmlucHV0ID0gZ19saXN0X2FwcGVuZCAoaW5wdXQyLmlucHV0LCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7Ci0KLSAgcnVuX211eGluZ190ZXN0ICgmaW5wdXQxLCAmaW5wdXQyKTsKLQotICBmYWlsX3VubGVzcyAoaW5wdXQxLmdhcF9yZWNlaXZlZCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXF0bXV4X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInF0bXV4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICAvKiBhdm9pZCBnbGliIHdhcm5pbmdzIHdoZW4gc2V0dGluZyBkZXByZWNhdGVkIGR0cy1tZXRob2QgcHJvcGVydHkgKi8KLSAgZ19zZXRlbnYgKCJHX0VOQUJMRV9ESUFHTk9TVElDIiwgIjAiLCBUUlVFKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZpZGVvX3BhZF9kZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdWRpb19wYWRfZGQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmlkZW9fcGFkX2ZyYWdfZGQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXVkaW9fcGFkX2ZyYWdfZGQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmlkZW9fcGFkX2ZyYWdfZGRfc3RyZWFtYWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdWRpb19wYWRfZnJhZ19kZF9zdHJlYW1hYmxlKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmlkZW9fcGFkX3Jlb3JkZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfYXVkaW9fcGFkX3Jlb3JkZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmlkZW9fcGFkX2ZyYWdfcmVvcmRlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdWRpb19wYWRfZnJhZ19yZW9yZGVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZpZGVvX3BhZF9mcmFnX3Jlb3JkZXJfc3RyZWFtYWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdWRpb19wYWRfZnJhZ19yZW9yZGVyX3N0cmVhbWFibGUpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92aWRlb19wYWRfYXNjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F1ZGlvX3BhZF9hc2MpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdmlkZW9fcGFkX2ZyYWdfYXNjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F1ZGlvX3BhZF9mcmFnX2FzYyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92aWRlb19wYWRfZnJhZ19hc2Nfc3RyZWFtYWJsZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdWRpb19wYWRfZnJhZ19hc2Nfc3RyZWFtYWJsZSk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F2ZXJhZ2VfYml0cmF0ZSk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JldXNlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VuY29kZWJpbl9xdG11eCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lbmNvZGViaW5fbXA0bXV4KTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbXV4aW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211eGluZ19ub25femVyb19zZWdtZW50KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211eGluZ19ub25femVyb19zZWdtZW50X2RpZmZlcmVudCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tdXhpbmdfZHRzX291dHNpZGVfc2VnbWVudCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tdXhpbmdfaW5pdGlhbF9nYXApOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocXRtdXgpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9yZ2FuYWx5c2lzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYmJiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcmdhbmFseXNpcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3OSArMCwwIEBACi0vKiBHU3RyZWFtZXIgUmVwbGF5R2FpbiBhbmFseXNpcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKgotICogcmdhbmFseXNpcy5jOiBVbml0IHRlc3QgZm9yIHRoZSByZ2FuYWx5c2lzIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0vKiBTb21lIHRoaW5ncyB0byBub3RlIGFib3V0IHRoZSBSTVMgd2luZG93IGxlbmd0aCBvZiB0aGUgYW5hbHlzaXMgYWxnb3JpdGhtIGFuZAotICogdGh1cyB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCBpbiB0aGUgZWxlbWVudDogUHJvY2Vzc2luZyBkaXZpZGVzIGlucHV0IGRhdGEKLSAqIGludG8gNTBtcyB3aW5kb3dzIGF0IHNvbWUgcG9pbnQuICBTb21lIGRldGFpbHMgYWJvdXQgdGhpcyB0aGF0IG5vcm1hbGx5IGRvCi0gKiBub3QgbWF0dGVyOgotICoKLSAqICAxLiBBdCB0aGUgZW5kIG9mIGEgc3RyZWFtLCB0aGUgcmVtYWluZGVyIG9mIGRhdGEgdGhhdCBkaWQgbm90IGZpbGwgdXAgdGhlCi0gKiAgICAgbGFzdCA1MG1zIHdpbmRvdyBpcyBzaW1wbHkgZGlzY2FyZGVkLgotICoKLSAqICAyLiBJZiB0aGUgc2FtcGxlIHJhdGUgY2hhbmdlcyBkdXJpbmcgYSBzdHJlYW0sIHRoZSBjdXJyZW50bHkgcnVubmluZyB3aW5kb3cKLSAqICAgICBpcyBkaXNjYXJkZWQgYW5kIHRoZSBlcXVhbCBsb3VkbmVzcyBmaWx0ZXIgZ2V0cyByZXNldCBhcyBpZiBhIG5ldyBzdHJlYW0KLSAqICAgICBzdGFydGVkLgotICoKLSAqICAzLiBGb3IgdGhlIGFsYnVtIGdhaW4sIGl0IGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0IHRvIHRoaW5rIG9mIG9idGFpbmluZyBpdAotICogICAgIGxpa2UgImFzIGlmIGFsbCB0aGUgdHJhY2tzIGFyZSBhbmFseXplZCBhcyBvbmUgdHJhY2siLiAgVGhlcmUgaXNuJ3QgYQotICogICAgIHNlcGFyYXRlIHdpbmRvdyBiZWluZyB0cmFja2VkIGZvciBhbGJ1bSBwcm9jZXNzaW5nLCBzbyBhdCBzdHJlYW0gKHRyYWNrKQotICogICAgIGVuZCwgdGhlIHJlbWFpbmluZyB1bmZpbGxlZCB3aW5kb3cgZG9lcyBub3QgY29udHJpYnV0ZSB0byB0aGUgYWxidW0gZ2FpbgotICogICAgIGVpdGhlci4KLSAqCi0gKiAgNC4gSWYgYSB3YXZlZm9ybSB3aXRoIGEgcmVzdWx0IGdhaW4gRyBpcyBjb25jYXRlbmF0ZWQgdG8gaXRzZWxmIGFuZCB0aGUKLSAqICAgICByZXN1bHQgcHJvY2Vzc2VkIGFzIGEgdHJhY2ssIHRoZSBnYWluIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBHIGlmIGFuZCBvbmx5Ci0gKiAgICAgaWYgdGhlIGR1cmF0aW9uIG9mIHRoZSBvcmlnaW5hbCB3YXZlZm9ybSBpcyBub3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZgotICogICAgIDUwbXMuICBJZiB0aGUgb3JpZ2luYWwgd2F2ZWZvcm0gZ2V0cyBwcm9jZXNzZWQgYXMgYSBzaW5nbGUgdHJhY2sgYW5kIHRoZW4KLSAqICAgICB0aGUgc2FtZSBkYXRhIGFnYWluIGFzIGEgc3Vic2VxdWVudCB0cmFjaywgdGhlIGFsYnVtIHJlc3VsdCBnYWluIHdpbGwKLSAqICAgICBhbHdheXMgbWF0Y2ggRyAodGhpcyBpcyBpbXBsaWVkIGJ5IDMuKS4KLSAqCi0gKiAgNS4gQSBzdHJlYW0gc2hvcnRlciB0aGFuIDUwbXMgY2Fubm90IGJlIGFuYWx5emVkLiAgQXQgODAwMCBhbmQgNDgwMDAgSHosCi0gKiAgICAgdGhpcyBjb3JyZXNwb25kcyB0byA0MDAgcmVzcC4gMjQwMCBmcmFtZXMuICBJZiBhIHN0cmVhbSBpcyBzaG9ydGVyIHRoYW4KLSAqICAgICA1MG1zLCB0aGUgZWxlbWVudCB3aWxsIG5vdCBnZW5lcmF0ZSB0YWdzIGF0IEVPUyAob25seSBpZiBhbiBhbGJ1bQotICogICAgIGZpbmlzaGVkLCBidXQgb25seSBhbGJ1bSB0YWdzIGFyZSBnZW5lcmF0ZWQgdGhlbikuICBUaGlzIGlzIG5vdCBhbgotICogICAgIGVycm9uZW91cyBjb25kaXRpb24sIHRoZSBlbGVtZW50IHNob3VsZCBiZWhhdmUgbm9ybWFsbHkuCi0gKgotICogVGhlIGxpbWl0YXRpb25zIG91dGxpbmVkIGluIDEuLTQuIGRvIG5vdCBhcHBseSB0byB0aGUgcGVhayB2YWx1ZXMuICBFdmVyeQotICogc2luZ2xlIHNhbXBsZSBpcyBhY2NvdW50ZWQgZm9yIHdoZW4gbG9va2luZyBmb3IgdGhlIHBlYWsuICBUaHVzIHRoZSBhbGJ1bQotICogcGVhayBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGFsbCB0cmFjayBwZWFrcy4KLSAqCi0gKiBJbiBub3JtYWwgZGF5LXRvLWRheSB1c2UsIHRoZXNlIGxpdHRsZSBmYWN0cyBhcmUgdW5saWtlbHkgdG8gYmUgcmVsZXZhbnQsIGJ1dAotICogdGhleSBoYXZlIHRvIGJlIGtlcHQgaW4gbWluZCBmb3Igd3JpdGluZyB0aGUgdGVzdHMgaGVyZS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nIHNyYyBhbmQKLSAqIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLCBnZXRfcGVlciwgYW5kCi0gKiB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotc3RhdGljIEdzdEJ1cyAqbXlidXM7Ci0KLS8qIE1hcHBpbmcgZnJvbSBzdXBwb3J0ZWQgc2FtcGxlIHJhdGVzIHRvIHRoZSBjb3JyZWN0IHJlc3VsdCBnYWluIGZvciB0aGUKLSAqIGZvbGxvd2luZyB0ZXN0IHdhdmVmb3JtOiAyMCAqIDUxMiBzYW1wbGVzIHdpdGggYSBxdWFydGVyLWZ1bGwgYW1wbGl0dWRlIG9mCi0gKiB0b2dnbGluZyBzaWduLCBjaGFuZ2luZyBldmVyeSA0OCBzYW1wbGVzIGFuZCBzdGFydGluZyB3aXRoIHRoZSBwb3NpdGl2ZQotICogdmFsdWUuCi0gKgotICogRXZlbiBpZiB3ZSB3b3VsZCBnZW5lcmF0ZSBhIHdhdmUgZGVzY3JpYmluZyBhIHNpZ25hbCB3aXRoIHRoZSBzYW1lIGZyZXF1ZW5jeQotICogYXQgZWFjaCBzYW1wbGluZyByYXRlLCB0aGUgcmVzdWx0cyB3b3VsZCB2YXJ5IChzbGlnaHRseSkuICBIZW5jZSB0aGUgc2ltcGxlCi0gKiBnZW5lcmF0aW9uIG1ldGhvZCwgc2luY2Ugd2UgY2Fubm90IHVzZSBhIGNvbnN0YW50IHZhbHVlIGFzIGV4cGVjdGVkIHJlc3VsdAotICogYW55d2F5cy4gIEZvciBhbGwgc2FtcGxlIHJhdGVzLCBjaGFuZ2luZyB0aGUgc2lnbiBldmVyeSA0OCBmcmFtZXMgZ2l2ZXMgYQotICogc2FuZSBmcmVxdWVuY3kuICBCdWZmZXJzIGNvbnRhaW5pbmcgZGF0YSB0aGF0IGZvcm1zIHN1Y2ggYSB3YXZlZm9ybSBpcwotICogY3JlYXRlZCB1c2luZyB0aGUgdGVzdF9idWZmZXJfc3F1YXJlX3tmbG9hdCxpbnQxNn1fe21vbm8sc3RlcmVvfSBmdW5jdGlvbnMKLSAqIGJlbG93LgotICoKLSAqIFRoZSByZXN1bHRzIGhhdmUgYmVlbiBjaGVja2VkIGFnYWluc3Qgd2hhdCB0aGUgbWV0YWZsYWMgYW5kIHdhdmVnYWluIHByb2dyYW1zCi0gKiBnZW5lcmF0ZSBmb3Igc3VjaCBhIHN0cmVhbS4gIElmIHlvdSB3YW50IHRvIHZlcmlmeSB0aGVzZSwgYmUgc3VyZSB0aGF0IHRoZQotICogbWV0YWZsYWMgcHJvZ3JhbSBkb2VzIG5vdCBwcm9kdWNlIGluY29ycmVjdCByZXN1bHRzIGluIHlvdXIgZW52aXJvbm1lbnQ6IEkKLSAqIGZvdW5kIGEgc3RyYW5nZSBidWcgaW4gdGhlIChkZWZhY3RvKSByZWZlcmVuY2UgY29kZSBmb3IgdGhlIGFuYWx5c2lzIHRoYXQKLSAqIHNvbWV0aW1lcyBsZWFkcyB0byBpbmNvcnJlY3QgUk1TIHdpbmRvdyBsZW5ndGhzLiAqLwotCi1zdHJ1Y3QgcmF0ZV90ZXN0Ci17Ci0gIGd1aW50IHNhbXBsZV9yYXRlOwotICBnZG91YmxlIGdhaW47Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJhdGVfdGVzdCBzdXBwb3J0ZWRfcmF0ZXNbXSA9IHsKLSAgezgwMDAsIC0wLjkxfSwKLSAgezExMDI1LCAtMi44MH0sCi0gIHsxMjAwMCwgLTMuMTN9LAotICB7MTYwMDAsIC00LjI2fSwKLSAgezIyMDUwLCAtNS42NH0sCi0gIHsyNDAwMCwgLTUuODd9LAotICB7MzIwMDAsIC02LjAzfSwKLSAgezQ0MTAwLCAtNi4yMH0sCi0gIHs0ODAwMCwgLTYuMTR9Ci19OwotCi0vKiBMb29rdXAgdGhlIGNvcnJlY3QgZ2FpbiBhZGp1c3RtZW50IHJlc3VsdCBpbiBhYm92ZSBhcnJheS4gKi8KLQotc3RhdGljIGdkb3VibGUKLWdldF9leHBlY3RlZF9nYWluIChndWludCBzYW1wbGVfcmF0ZSkKLXsKLSAgZ2ludCBpOwotCi0gIGZvciAoaSA9IEdfTl9FTEVNRU5UUyAoc3VwcG9ydGVkX3JhdGVzKTsgaS0tOykKLSAgICBpZiAoc3VwcG9ydGVkX3JhdGVzW2ldLnNhbXBsZV9yYXRlID09IHNhbXBsZV9yYXRlKQotICAgICAgcmV0dXJuIHN1cHBvcnRlZF9yYXRlc1tpXS5nYWluOwotICBnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoMC4wKTsKLX0KLQotI2RlZmluZSBTSUxFTkNFX0dBSU4gNjQuODIKLQotI2RlZmluZSBSRVBMQVlfR0FJTl9DQVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICJjaGFubmVscyA9IChpbnQpIHsgMSwgMiB9LCAiICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgInJhdGUgPSAoaW50KSB7IDgwMDAsIDExMDI1LCAxMjAwMCwgMTYwMDAsIDIyMDUwLCAiICAgXAotICAiMjQwMDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfSIKLQotI2RlZmluZSBSR19BTkFMWVNJU19DQVBTX1RFTVBMQVRFX1NUUklORyAgICAgIFwKLSAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICJmb3JtYXQgPSAoc3RyaW5nKSAiR1NUX0FVRElPX05FIChGMzIpICIsICIgXAotICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICAgICAgICAgIFwKLSAgUkVQTEFZX0dBSU5fQ0FQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICI7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiYXVkaW8veC1yYXcsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgImZvcm1hdCA9IChzdHJpbmcpICJHU1RfQVVESU9fTkUgKFMxNikgIiwgIiBcCi0gICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiAgICAgICAgICAgXAotICBSRVBMQVlfR0FJTl9DQVBTCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFJHX0FOQUxZU0lTX0NBUFNfVEVNUExBVEVfU1RSSU5HKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChSR19BTkFMWVNJU19DQVBTX1RFTVBMQVRFX1NUUklORykKLSAgICApOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLW15c2lua19ldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR1NUX0xPR19PQkpFQ1QgKHBhZCwgIiVzIGV2ZW50OiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9FVkVOVF9UWVBFX05BTUUgKGV2ZW50KSwgZXZlbnQpOwotCi0gIC8qIGEgc2luayB3b3VsZCBwb3N0IHRhZyBldmVudHMgYXMgbWVzc2FnZXMsIHNvIGRvIHRoZSBzYW1lIGhlcmUsCi0gICAqIGVzcC4gc2luY2Ugd2UncmUgcG9sbGluZyBvbiB0aGUgYnVzIHdhaXRpbmcgZm9yIFRBRyBtZXNzYWdlcy4uICovCi0gIGlmIChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9UQUcpIHsKLSAgICBHc3RUYWdMaXN0ICp0YWdsaXN0OwotCi0gICAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAoZXZlbnQsICZ0YWdsaXN0KTsKLQotICAgIGdzdF9idXNfcG9zdCAobXlidXMsIGdzdF9tZXNzYWdlX25ld190YWcgKEdTVF9PQkpFQ1QgKG15c2lua3BhZCksCi0gICAgICAgICAgICBnc3RfdGFnX2xpc3RfY29weSAodGFnbGlzdCkpKTsKLSAgfQotCi0gIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfcmdhbmFseXNpcyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqYW5hbHlzaXM7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX3JnYW5hbHlzaXMiKTsKLSAgYW5hbHlzaXMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInJnYW5hbHlzaXMiKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoYW5hbHlzaXMsICZzcmN0ZW1wbGF0ZSk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoYW5hbHlzaXMsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXlzaW5rcGFkLCBteXNpbmtfZXZlbnRfZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKGFuYWx5c2lzLCBidXMpOwotCi0gIG15YnVzID0gYnVzOyAgICAgICAgICAgICAgICAgIC8qIGtlZXAgcmVmICovCi0KLSAgcmV0dXJuIGFuYWx5c2lzOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9yZ2FuYWx5c2lzIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9yZ2FuYWx5c2lzIik7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChteWJ1cyk7Ci0gIG15YnVzID0gTlVMTDsKLQotICAvKiBUaGUgYnVzIG93bnMgcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudDogKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoZWxlbWVudCwgTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoZWxlbWVudCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAoZWxlbWVudCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChlbGVtZW50KTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9wbGF5aW5nX3N0YXRlIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgIkNvdWxkIG5vdCBzZXQgc3RhdGUgdG8gUExBWUlORyIpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9mbHVzaF9ldmVudHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHBhZCA9IG15c3JjcGFkOwotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdGFydCAoKSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMsICJmbHVzaC1zdGFydCBldmVuIG5vdCBoYW5kbGVkdCIpOwotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wIChUUlVFKSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMsICJmbHVzaC1zdG9wIGV2ZW50IG5vdCBoYW5kbGVkIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgcGFkID0gbXlzcmNwYWQ7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInRlc3QiKSk7Ci0gIGZhaWxfdW5sZXNzIChyZXMsICJTVFJFQU1fU1RBUlQgZXZlbnQgbm90IGhhbmRsZWQiKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfY2Fwc19ldmVudCAoY29uc3QgZ2NoYXIgKiBmb3JtYXQsIGdpbnQgc2FtcGxlX3JhdGUsIGdpbnQgY2hhbm5lbHMpCi17Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhdWRpby94LXJhdyIsCi0gICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklORywgZm9ybWF0LAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCBzYW1wbGVfcmF0ZSwgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgY2hhbm5lbHMsCi0gICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0gIGlmIChjaGFubmVscyA9PSAyKSB7Ci0gICAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoY2FwcywKLSAgICAgICAgImNoYW5uZWwtbWFzayIsIEdTVF9UWVBFX0JJVE1BU0ssCi0gICAgICAgIEdfR1VJTlQ2NF9DT05TVEFOVCAoMHgwMDAwMDAwMDAwMDAwMDAzKSwgTlVMTCk7Ci0gIH0KLSAgZ3N0X3BhZF9zZXRfY2FwcyAobXlzcmNwYWQsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX3NlZ21lbnRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0UGFkICpwYWQ7Ci0KLSAgcGFkID0gbXlzcmNwYWQ7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotICBmYWlsX3VubGVzcyAocmVzLCAiU0VHTUVOVCBldmVudCBub3QgaGFuZGxlZCIpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9lb3NfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RCdXMgKmJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGVsZW1lbnQpOwotICBHc3RQYWQgKnBhZCA9IG15c3JjcGFkOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKLSAgZmFpbF91bmxlc3MgKHJlcywgIkVPUyBldmVudCBub3QgaGFuZGxlZCIpOwotCi0gIC8qIFRoZXJlIGlzIG5vIHNpbmsgZWxlbWVudCwgc28gX3dlXyBwb3N0IHRoZSBFT1MgbWVzc2FnZSBvbiB0aGUgYnVzIGhlcmUuICBPZgotICAgKiBjb3Vyc2Ugd2UgZ2VuZXJhdGUgYW55IEVPUyBvdXJzZWx2ZXMsIGJ1dCB0aGlzIGFsbG93cyB1cyB0byBwb2xsIGZvciB0aGUKLSAgICogRU9TIG1lc3NhZ2UgaW4gcG9sbF9lb3MgaWYgd2UgZXhwZWN0IHRoZSBlbGVtZW50IHRvIF9ub3RfIGdlbmVyYXRlIGEgVEFHCi0gICAqIG1lc3NhZ2UuICBUaGF0J3MgYmV0dGVyIHRoYW4gd2FpdGluZyBmb3IgYSB0aW1lb3V0IHRvIGxhcHNlLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2J1c19wb3N0IChidXMsIGdzdF9tZXNzYWdlX25ld19lb3MgKE5VTEwpKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfdGFnX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0VGFnTGlzdCAqIHRhZ19saXN0KQotewotICBHc3RQYWQgKnBhZCA9IG15c3JjcGFkOwotICBHc3RFdmVudCAqZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpLAotICAgICAgIkNhbm5vdCBzZW5kIFRBRyBldmVudDogTm90IGhhbmRsZWQuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wb2xsX2VvcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdEJ1cyAqYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoZWxlbWVudCk7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9UQUcsIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMLCAiQ291bGQgbm90IHBvbGwgZm9yIEVPUyBtZXNzYWdlOiBUaW1lZCBvdXQiKTsKLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UtPnR5cGUgPT0gR1NUX01FU1NBR0VfRU9TLAotICAgICAgIkNvdWxkIG5vdCBwb2xsIGZvciBlb3MgbWVzc2FnZTogZ290IG1lc3NhZ2Ugb2YgdHlwZSAlcyBpbnN0ZWFkIiwKLSAgICAgIGdzdF9tZXNzYWdlX3R5cGVfZ2V0X25hbWUgKG1lc3NhZ2UtPnR5cGUpKTsKLQotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLXN0YXRpYyBHc3RUYWdMaXN0ICoKLXBvbGxfdGFnc19vbmx5IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0QnVzICpidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChlbGVtZW50KTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9UQUcsIEdTVF9TRUNPTkQpOwotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMLCAiQ291bGQgbm90IHBvbGwgZm9yIFRBRyBtZXNzYWdlOiBUaW1lZCBvdXQiKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV90YWcgKG1lc3NhZ2UsICZ0YWdfbGlzdCk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICByZXR1cm4gdGFnX2xpc3Q7Ci19Ci0KLS8qIFRoaXMgYWxzbyBwb2xscyBmb3IgRU9TIHNpbmNlIHRoZSBUQUcgbWVzc2FnZSBjb21lcyByaWdodCBiZWZvcmUgdGhlIGVuZCBvZgotICogc3RyZWFtcy4gKi8KLQotc3RhdGljIEdzdFRhZ0xpc3QgKgotcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0ID0gcG9sbF90YWdzX29ubHkgKGVsZW1lbnQpOwotCi0gIHBvbGxfZW9zIChlbGVtZW50KTsKLQotICByZXR1cm4gdGFnX2xpc3Q7Ci19Ci0KLSNkZWZpbmUgTUFUQ0hfUEVBSyhwMSwgcDIpICgocDEgPCBwMiArIDFlLTYpICYmIChwMiA8IHAxICsgMWUtNikpCi0jZGVmaW5lIE1BVENIX0dBSU4oZzEsIGcyKSAoKGcxIDwgZzIgKyAxZS0xMykgJiYgKGcyIDwgZzEgKyAxZS0xMykpCi0KLXN0YXRpYyB2b2lkCi1mYWlsX3VubGVzc190cmFja19nYWluIChjb25zdCBHc3RUYWdMaXN0ICogdGFnX2xpc3QsIGdkb3VibGUgZ2FpbikKLXsKLSAgZ2RvdWJsZSByZXN1bHQ7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwgR1NUX1RBR19UUkFDS19HQUlOLCAmcmVzdWx0KSwKLSAgICAgICJUYWcgbGlzdCBjb250YWlucyBubyB0cmFjayBnYWluIHZhbHVlIik7Ci0gIGZhaWxfdW5sZXNzIChNQVRDSF9HQUlOIChnYWluLCByZXN1bHQpLAotICAgICAgIlRyYWNrIGdhaW4gJSsuMmYgZG9lcyBub3QgbWF0Y2gsIGV4cGVjdGVkICUrLjJmIiwgcmVzdWx0LCBnYWluKTsKLX0KLQotc3RhdGljIHZvaWQKLWZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKGNvbnN0IEdzdFRhZ0xpc3QgKiB0YWdfbGlzdCwgZ2RvdWJsZSBwZWFrKQotewotICBnZG91YmxlIHJlc3VsdDsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX1RSQUNLX1BFQUssICZyZXN1bHQpLAotICAgICAgIlRhZyBsaXN0IGNvbnRhaW5zIG5vIHRyYWNrIHBlYWsgdmFsdWUiKTsKLSAgZmFpbF91bmxlc3MgKE1BVENIX1BFQUsgKHBlYWssIHJlc3VsdCksCi0gICAgICAiVHJhY2sgcGVhayAlZiBkb2VzIG5vdCBtYXRjaCwgZXhwZWN0ZWQgJWYiLCByZXN1bHQsIHBlYWspOwotfQotCi1zdGF0aWMgdm9pZAotZmFpbF91bmxlc3NfYWxidW1fZ2FpbiAoY29uc3QgR3N0VGFnTGlzdCAqIHRhZ19saXN0LCBnZG91YmxlIGdhaW4pCi17Ci0gIGdkb3VibGUgcmVzdWx0OwotCi0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsIEdTVF9UQUdfQUxCVU1fR0FJTiwgJnJlc3VsdCksCi0gICAgICAiVGFnIGxpc3QgY29udGFpbnMgbm8gYWxidW0gZ2FpbiB2YWx1ZSIpOwotICBmYWlsX3VubGVzcyAoTUFUQ0hfR0FJTiAocmVzdWx0LCBnYWluKSwKLSAgICAgICJBbGJ1bSBnYWluICUrLjJmIGRvZXMgbm90IG1hdGNoLCBleHBlY3RlZCAlKy4yZiIsIHJlc3VsdCwgZ2Fpbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mYWlsX3VubGVzc19hbGJ1bV9wZWFrIChjb25zdCBHc3RUYWdMaXN0ICogdGFnX2xpc3QsIGdkb3VibGUgcGVhaykKLXsKLSAgZ2RvdWJsZSByZXN1bHQ7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwgR1NUX1RBR19BTEJVTV9QRUFLLCAmcmVzdWx0KSwKLSAgICAgICJUYWcgbGlzdCBjb250YWlucyBubyBhbGJ1bSBwZWFrIHZhbHVlIik7Ci0gIGZhaWxfdW5sZXNzIChNQVRDSF9QRUFLIChwZWFrLCByZXN1bHQpLAotICAgICAgIkFsYnVtIHBlYWsgJWYgZG9lcyBub3QgbWF0Y2gsIGV4cGVjdGVkICVmIiwgcmVzdWx0LCBwZWFrKTsKLX0KLQotc3RhdGljIHZvaWQKLWZhaWxfaWZfdHJhY2tfdGFncyAoY29uc3QgR3N0VGFnTGlzdCAqIHRhZ19saXN0KQotewotICBnZG91YmxlIHJlc3VsdDsKLQotICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsIEdTVF9UQUdfVFJBQ0tfR0FJTiwgJnJlc3VsdCksCi0gICAgICAiVGFnIGxpc3QgY29udGFpbnMgdHJhY2sgZ2FpbiB2YWx1ZSAoYnV0IHNob3VsZCBub3QpIik7Ci0gIGZhaWxfaWYgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwgR1NUX1RBR19UUkFDS19QRUFLLCAmcmVzdWx0KSwKLSAgICAgICJUYWcgbGlzdCBjb250YWlucyB0cmFjayBwZWFrIHZhbHVlIChidXQgc2hvdWxkIG5vdCkiKTsKLX0KLQotc3RhdGljIHZvaWQKLWZhaWxfaWZfYWxidW1fdGFncyAoY29uc3QgR3N0VGFnTGlzdCAqIHRhZ19saXN0KQotewotICBnZG91YmxlIHJlc3VsdDsKLQotICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsIEdTVF9UQUdfQUxCVU1fR0FJTiwgJnJlc3VsdCksCi0gICAgICAiVGFnIGxpc3QgY29udGFpbnMgYWxidW0gZ2FpbiB2YWx1ZSAoYnV0IHNob3VsZCBub3QpIik7Ci0gIGZhaWxfaWYgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwgR1NUX1RBR19BTEJVTV9QRUFLLCAmcmVzdWx0KSwKLSAgICAgICJUYWcgbGlzdCBjb250YWlucyBhbGJ1bSBwZWFrIHZhbHVlIChidXQgc2hvdWxkIG5vdCkiKTsKLX0KLQotc3RhdGljIHZvaWQKLWZhaWxfdW5sZXNzX251bV90cmFja3MgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBndWludCBudW1fdHJhY2tzKQotewotICBndWludCBjdXJyZW50OwotCi0gIGdfb2JqZWN0X2dldCAoZWxlbWVudCwgIm51bS10cmFja3MiLCAmY3VycmVudCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChjdXJyZW50ID09IG51bV90cmFja3MsCi0gICAgICAibnVtLXRyYWNrcyBwcm9wZXJ0eSBoYXMgaW5jb3JyZWN0IHZhbHVlICV1LCBleHBlY3RlZCAldSIsCi0gICAgICBjdXJyZW50LCBudW1fdHJhY2tzKTsKLX0KLQotLyogRnVuY3Rpb25zIHRoYXQgY3JlYXRlIGJ1ZmZlcnMgd2l0aCBjb25zdGFudCBzYW1wbGUgdmFsdWVzLCBmb3IgcGVhawotICogdGVzdHMuICovCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotdGVzdF9idWZmZXJfY29uc3RfZmxvYXRfbW9ubyAoZ2ludCBzYW1wbGVfcmF0ZSwgZ3NpemUgbl9mcmFtZXMsIGdmbG9hdCB2YWx1ZSkKLXsKLSAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG5fZnJhbWVzICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdmbG9hdCAqZGF0YTsKLSAgZ2ludCBpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gbl9mcmFtZXM7IGktLTspCi0gICAgKmRhdGErKyA9IHZhbHVlOwotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDEpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotdGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvIChnaW50IHNhbXBsZV9yYXRlLCBnc2l6ZSBuX2ZyYW1lcywKLSAgICBnZmxvYXQgdmFsdWVfbCwgZ2Zsb2F0IHZhbHVlX3IpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuX2ZyYW1lcyAqIHNpemVvZiAoZ2Zsb2F0KSAqIDIpOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Zsb2F0ICpkYXRhOwotICBnaW50IGk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSBuX2ZyYW1lczsgaS0tOykgewotICAgICpkYXRhKysgPSB2YWx1ZV9sOwotICAgICpkYXRhKysgPSB2YWx1ZV9yOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi10ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9tb25vIChnaW50IHNhbXBsZV9yYXRlLCBnaW50IGRlcHRoLCBnc2l6ZSBuX2ZyYW1lcywKLSAgICBnaW50MTYgdmFsdWUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuX2ZyYW1lcyAqIHNpemVvZiAoZ2ludDE2KSk7Ci0gIGdpbnQxNiAqZGF0YTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdpbnQgaTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IChnaW50MTYgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IG5fZnJhbWVzOyBpLS07KQotICAgICpkYXRhKysgPSB2YWx1ZTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYsICJidWYiLCAxKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLXRlc3RfYnVmZmVyX2NvbnN0X2ludDE2X3N0ZXJlbyAoZ2ludCBzYW1wbGVfcmF0ZSwgZ2ludCBkZXB0aCwgZ3NpemUgbl9mcmFtZXMsCi0gICAgZ2ludDE2IHZhbHVlX2wsIGdpbnQxNiB2YWx1ZV9yKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobl9mcmFtZXMgKiBzaXplb2YgKGdpbnQxNikgKiAyKTsKLSAgZ2ludDE2ICpkYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2ludCBpOwotCi0gIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gKGdpbnQxNiAqKSBtYXAuZGF0YTsKLSAgZm9yIChpID0gbl9mcmFtZXM7IGktLTspIHsKLSAgICAqZGF0YSsrID0gdmFsdWVfbDsKLSAgICAqZGF0YSsrID0gdmFsdWVfcjsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDEpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLS8qIEZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSBkYXRhIGJ1ZmZlcnMgY29udGFpbmluZyBzcXVhcmUgc2lnbmFsCi0gKiB3YXZlZm9ybXMuICovCi0KLXN0YXRpYyBHc3RCdWZmZXIgKgotdGVzdF9idWZmZXJfc3F1YXJlX2Zsb2F0X21vbm8gKGdpbnQgKiBhY2N1bXVsYXRvciwgZ2ludCBzYW1wbGVfcmF0ZSwKLSAgICBnc2l6ZSBuX2ZyYW1lcywgZ2Zsb2F0IHZhbHVlKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAobl9mcmFtZXMgKiBzaXplb2YgKGdmbG9hdCkpOwotICBnZmxvYXQgKmRhdGE7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnaW50IGk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSBuX2ZyYW1lczsgaS0tOykgewotICAgICphY2N1bXVsYXRvciArPSAxOwotICAgICphY2N1bXVsYXRvciAlPSA5NjsKLQotICAgIGlmICgqYWNjdW11bGF0b3IgPCA0OCkKLSAgICAgICpkYXRhKysgPSB2YWx1ZTsKLSAgICBlbHNlCi0gICAgICAqZGF0YSsrID0gLXZhbHVlOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi10ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvIChnaW50ICogYWNjdW11bGF0b3IsIGdpbnQgc2FtcGxlX3JhdGUsCi0gICAgZ3NpemUgbl9mcmFtZXMsIGdmbG9hdCB2YWx1ZV9sLCBnZmxvYXQgdmFsdWVfcikKLXsKLSAgR3N0QnVmZmVyICpidWYgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKG5fZnJhbWVzICogc2l6ZW9mIChnZmxvYXQpICogMik7Ci0gIGdmbG9hdCAqZGF0YTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdpbnQgaTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IChnZmxvYXQgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IG5fZnJhbWVzOyBpLS07KSB7Ci0gICAgKmFjY3VtdWxhdG9yICs9IDE7Ci0gICAgKmFjY3VtdWxhdG9yICU9IDk2OwotCi0gICAgaWYgKCphY2N1bXVsYXRvciA8IDQ4KSB7Ci0gICAgICAqZGF0YSsrID0gdmFsdWVfbDsKLSAgICAgICpkYXRhKysgPSB2YWx1ZV9yOwotICAgIH0gZWxzZSB7Ci0gICAgICAqZGF0YSsrID0gLXZhbHVlX2w7Ci0gICAgICAqZGF0YSsrID0gLXZhbHVlX3I7Ci0gICAgfQotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi10ZXN0X2J1ZmZlcl9zcXVhcmVfaW50MTZfbW9ubyAoZ2ludCAqIGFjY3VtdWxhdG9yLCBnaW50IHNhbXBsZV9yYXRlLAotICAgIGdpbnQgZGVwdGgsIGdzaXplIG5fZnJhbWVzLCBnaW50MTYgdmFsdWUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuX2ZyYW1lcyAqIHNpemVvZiAoZ2ludDE2KSk7Ci0gIGdpbnQxNiAqZGF0YTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGdpbnQgaTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IChnaW50MTYgKikgbWFwLmRhdGE7Ci0gIGZvciAoaSA9IG5fZnJhbWVzOyBpLS07KSB7Ci0gICAgKmFjY3VtdWxhdG9yICs9IDE7Ci0gICAgKmFjY3VtdWxhdG9yICU9IDk2OwotCi0gICAgaWYgKCphY2N1bXVsYXRvciA8IDQ4KQotICAgICAgKmRhdGErKyA9IHZhbHVlOwotICAgIGVsc2UKLSAgICAgICpkYXRhKysgPSAtTUFYICh2YWx1ZSwgLTMyNzY3KTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDEpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotdGVzdF9idWZmZXJfc3F1YXJlX2ludDE2X3N0ZXJlbyAoZ2ludCAqIGFjY3VtdWxhdG9yLCBnaW50IHNhbXBsZV9yYXRlLAotICAgIGdpbnQgZGVwdGgsIGdzaXplIG5fZnJhbWVzLCBnaW50MTYgdmFsdWVfbCwgZ2ludDE2IHZhbHVlX3IpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChuX2ZyYW1lcyAqIHNpemVvZiAoZ2ludDE2KSAqIDIpOwotICBnaW50MTYgKmRhdGE7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBnaW50IGk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSAoZ2ludDE2ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSBuX2ZyYW1lczsgaS0tOykgewotICAgICphY2N1bXVsYXRvciArPSAxOwotICAgICphY2N1bXVsYXRvciAlPSA5NjsKLQotICAgIGlmICgqYWNjdW11bGF0b3IgPCA0OCkgewotICAgICAgKmRhdGErKyA9IHZhbHVlX2w7Ci0gICAgICAqZGF0YSsrID0gdmFsdWVfcjsKLSAgICB9IGVsc2UgewotICAgICAgKmRhdGErKyA9IC1NQVggKHZhbHVlX2wsIC0zMjc2Nyk7Ci0gICAgICAqZGF0YSsrID0gLU1BWCAodmFsdWVfciwgLTMyNzY3KTsKLSAgICB9Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYsICJidWYiLCAxKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgdm9pZAotcHVzaF9idWZmZXIgKEdzdEJ1ZmZlciAqIGJ1ZikKLXsKLSAgLyogZ3N0X3BhZF9wdXNoIHN0ZWFscyBhIHJlZmVyZW5jZS4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYsICJidWYiLCAxKTsKLX0KLQotLyoqKiBTdGFydCBvZiB0aGUgdGVzdHMuICoqKi8KLQotLyogVGhpcyB0ZXN0IGxvb2tzIHJlZHVuZGFudCwgYnV0IGVhcmx5IHZlcnNpb25zIG9mIHRoZSBlbGVtZW50Ci0gKiBjcmFzaGVkIHdoZW4gZG9pbmcsIHdlbGwsIG5vdGhpbmc6ICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vX2J1ZmZlcikKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0KLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vX2J1ZmZlcl9hbGJ1bV8xKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLQotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgLyogU2luZ2xlIHRyYWNrOiAqLwotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgcG9sbF9lb3MgKGVsZW1lbnQpOwotCi0gIC8qIEZpcnN0IGFsYnVtOiAqLwotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMywgTlVMTCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMik7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMSk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMCk7Ci0KLSAgLyogU2Vjb25kIGFsYnVtOiAqLwotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMiwgTlVMTCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMSk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMCk7Ci0KLSAgLyogU2luZ2xlIHRyYWNrOiAqLwotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgcG9sbF9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAwKTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vX2J1ZmZlcl9hbGJ1bV8yKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0gIGdpbnQgYWNjdW11bGF0b3IgPSAwOwotICBnaW50IGk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAibnVtLXRyYWNrcyIsIDMsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgLyogTm8gYnVmZmVyIGZvciB0aGUgZmlyc3QgdHJhY2suICovCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICAvKiBObyB0YWdzIHNob3VsZCBiZSBwb3N0ZWQsIHRoZXJlIHdhcyBub3RoaW5nIHRvIGFuYWx5emU6ICovCi0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMik7Ci0KLSAgLyogQSB0ZXN0IHdhdmVmb3JtIHdpdGgga25vd24gZ2FpbiByZXN1bHQgYXMgc2Vjb25kIHRyYWNrOiAqLwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIDQ0MTAwLCAxKTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9tb25vICgmYWNjdW11bGF0b3IsIDQ0MTAwLCA1MTIsCi0gICAgICAgICAgICAwLjI1KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgLTYuMjApOwotICAvKiBBbGJ1bSBpcyBub3QgZmluaXNoZWQgeWV0OiAqLwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDEpOwotCi0gIC8qIE5vIGJ1ZmZlciBmb3IgdGhlIGxhc3QgdHJhY2suICovCi0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfYWxidW1fcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc19hbGJ1bV9nYWluICh0YWdfbGlzdCwgLTYuMjApOwotICAvKiBObyB0cmFjayB0YWdzIHNob3VsZCBiZSBwb3N0ZWQsIGFzIHRoZXJlIHdhcyBubyBkYXRhIGZvciBpdDogKi8KLSAgZmFpbF9pZl90cmFja190YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAwKTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VtcHR5X2J1ZmZlcnMpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOwotCi0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLQotICAvKiBTaW5nbGUgdHJhY2s6ICovCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIDQ0MTAwLCAyKTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoNDQxMDAsIDAsIDAuMCwgMC4wKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgcG9sbF9lb3MgKGVsZW1lbnQpOwotCi0gIC8qIEZpcnN0IGFsYnVtOiAqLwotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMiwgTlVMTCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvICg0NDEwMCwgMCwgMC4wLCAwLjApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICBwb2xsX2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDEpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoNDQxMDAsIDAsIDAuMCwgMC4wKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgcG9sbF9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAwKTsKLQotICAvKiBTZWNvbmQgYWxidW0sIHdpdGggYSBzaW5nbGUgdHJhY2s6ICovCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgIm51bS10cmFja3MiLCAxLCBOVUxMKTsKLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvICg0NDEwMCwgMCwgMC4wLCAwLjApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICBwb2xsX2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDApOwotCi0gIC8qIFNpbmdsZSB0cmFjazogKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvICg0NDEwMCwgMCwgMC4wLCAwLjApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICBwb2xsX2VvcyAoZWxlbWVudCk7Ci0KLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBUZXN0cyBmb3IgY29ycmVjdG5lc3Mgb2YgdGhlIHBlYWsgdmFsdWVzLiAqLwotCi0vKiBGbG9hdCBwZWFrIHRlc3QuICBGb3Igc3RlcmVvLCBvbmUgY2hhbm5lbCBoYXMgdGhlIGNvbnN0YW50IHZhbHVlIG9mIC0xLjM2OSwKLSAqIHRoZSBvdGhlciBvbmUgMC4wLiAgVGhpcyB0ZXN0cyBtYW55IHRoaW5nczogVGhlIHJlc3VsdCBwZWFrIHZhbHVlIHNob3VsZAotICogb2NjdXIgb24gYW55IGNoYW5uZWwuICBUaGUgcGVhayBpcyBvZiBjb3Vyc2UgdGhlIGFic29sdXRlIGFtcGxpdHVkZSwgc28gMS4zNjkKLSAqIHNob3VsZCBiZSB0aGUgcmVzdWx0LiAgVGhpcyB3aWxsIGFsc28gZGV0ZWN0IGlmIHRoZSBjb2RlIHVzZXMgdGhlIGFic29sdXRlCi0gKiB2YWx1ZSBkdXJpbmcgdGhlIGNvbXBhcmlzb24uICBJZiBpdCBpcyBidWdneSBpdCB3aWxsIHJldHVybiAwLjAgc2luY2UgMC4wID4KLSAqIC0xLjM2OS4gIEZ1cnRoZXJtb3JlLCB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBwcm9ibGVtIHdpdGggaGVhZHJvb20KLSAqIChleGNlZWRpbmcgMGRCRlMpLiAgSW4gdGhlIHdpbGQgeW91IGdldCBmbG9hdCBzYW1wbGVzID4gMS4wIGZyb20gc3R1ZmYgbGlrZQotICogdm9yYmlzLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wZWFrX2Zsb2F0KQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChGMzIpLCA4MDAwLCAyKTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgNTEyLCAtMS4zNjksIDAuMCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAxLjM2OSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIC8qIFN3YXBwZWQgY2hhbm5lbHMuICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgNTEyLCAwLjAsIC0xLjM2OSkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAxLjM2OSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIC8qIE1vbm8uICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIDgwMDAsIDEpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfbW9ubyAoODAwMCwgNTEyLCAtMS4zNjkpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMS4zNjkpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BlYWtfaW50MTZfMTYpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLQotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgLyogSGFsZiBhbXBsaXR1ZGUuICovCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKFMxNiksIDgwMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfc3RlcmVvICg4MDAwLCAxNiwgNTEyLCAxIDw8IDE0LCAwKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuNSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIC8qIFN3YXBwZWQgY2hhbm5lbHMuICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKFMxNiksIDgwMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfc3RlcmVvICg4MDAwLCAxNiwgNTEyLCAwLCAxIDw8IDE0KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuNSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIC8qIE1vbm8uICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKFMxNiksIDgwMDAsIDEpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfbW9ubyAoODAwMCwgMTYsIDUxMiwgMSA8PCAxNCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjUpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICAvKiBIYWxmIGFtcGxpdHVkZSwgbmVnYXRpdmUgdmFyaWFudC4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9zdGVyZW8gKDgwMDAsIDE2LCA1MTIsIC0oMSA8PCAxNCksIDApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC41KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgLyogU3dhcHBlZCBjaGFubmVscy4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9zdGVyZW8gKDgwMDAsIDE2LCA1MTIsIDAsIC0oMSA8PCAxNCkpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC41KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgLyogTW9uby4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgODAwMCwgMSk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9tb25vICg4MDAwLCAxNiwgNTEyLCAtKDEgPDwgMTQpKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuNSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0KLSAgLyogTm93IGNoZWNrIGZvciBjb3JyZWN0IG5vcm1hbGl6YXRpb24gb2YgdGhlIHBlYWsgdmFsdWU6IFNhbXBsZQotICAgKiB2YWx1ZXMgb2YgdGhpcyBmb3JtYXQgcmFuZ2UgZnJvbSAtMzI3NjggdG8gMzI3NjcuICBTbyBmb3IgdGhlCi0gICAqIGhpZ2hlc3QgcG9zaXRpdmUgYW1wbGl0dWRlIHdlIGRvIG5vdCByZWFjaCAxLjAsIG9ubHkgZm9yCi0gICAqIC0zMjc2OCEgKi8KLQotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChTMTYpLCA4MDAwLCAyKTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2ludDE2X3N0ZXJlbyAoODAwMCwgMTYsIDUxMiwgMzI3NjcsIDApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMzI3NjcuIC8gMzI3NjguKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgLyogU3dhcHBlZCBjaGFubmVscy4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9zdGVyZW8gKDgwMDAsIDE2LCA1MTIsIDAsIDMyNzY3KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDMyNzY3LiAvIDMyNzY4Lik7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIC8qIE1vbm8uICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKFMxNiksIDgwMDAsIDEpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfbW9ubyAoODAwMCwgMTYsIDUxMiwgMzI3NjcpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMzI3NjcuIC8gMzI3NjguKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLQotICAvKiBOZWdhdGl2ZSB2YXJpYW50LCByZWFjaGluZyAxLjAuICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKFMxNiksIDgwMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfaW50MTZfc3RlcmVvICg4MDAwLCAxNiwgNTEyLCAtMzI3NjgsIDApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMS4wKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgLyogU3dhcHBlZCBjaGFubmVscy4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9pbnQxNl9zdGVyZW8gKDgwMDAsIDE2LCA1MTIsIDAsIC0zMjc2OCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAxLjApOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICAvKiBNb25vLiAqLwotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChTMTYpLCA4MDAwLCAxKTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2ludDE2X21vbm8gKDgwMDAsIDE2LCA1MTIsIC0zMjc2OCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAxLjApOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BlYWtfYWxidW0pCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMiwgTlVMTCk7Ci0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLQotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChGMzIpLCA4MDAwLCAyKTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgMTAyNCwgMS4wLCAwLjApKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMS4wKTsKLSAgZmFpbF9pZl9hbGJ1bV90YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAxKTsKLQotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9mbG9hdF9zdGVyZW8gKDgwMDAsIDEwMjQsIDAuMCwgMC41KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuNSk7Ci0gIGZhaWxfdW5sZXNzX2FsYnVtX3BlYWsgKHRhZ19saXN0LCAxLjApOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMCk7Ci0KLSAgLyogVHJ5IGEgc2Vjb25kIGFsYnVtOiAqLwotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMywgTlVMTCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvICg4MDAwLCAxMDI0LCAwLjQsIDAuNCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjQpOwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDIpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgMTAyNCwgMC40NSwgMC40NSkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjQ1KTsKLSAgZmFpbF9pZl9hbGJ1bV90YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAxKTsKLQotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9mbG9hdF9zdGVyZW8gKDgwMDAsIDEwMjQsIDAuMiwgMC4yKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMik7Ci0gIGZhaWxfdW5sZXNzX2FsYnVtX3BlYWsgKHRhZ19saXN0LCAwLjQ1KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDApOwotCi0gIC8qIEFuZCBub3cgYSBzaW5nbGUgdHJhY2ssIG5vdCBpbiBhbGJ1bSBtb2RlIChudW0tdHJhY2tzIGlzIDAKLSAgICogbm93KTogKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvICg4MDAwLCAxMDI0LCAwLjEsIDAuMSkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjEpOwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBTd2l0Y2hpbmcgZnJvbSB0cmFjayB0byBhbGJ1bSBtb2RlLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wZWFrX3RyYWNrX2FsYnVtKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIDgwMDAsIDEpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfbW9ubyAoODAwMCwgMTAyNCwgMS4wKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDEuMCk7Ci0gIGZhaWxfaWZfYWxidW1fdGFncyAodGFnX2xpc3QpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMSwgTlVMTCk7Ci0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X21vbm8gKDgwMDAsIDEwMjQsIDAuNSkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjUpOwotICBmYWlsX3VubGVzc19hbGJ1bV9wZWFrICh0YWdfbGlzdCwgMC41KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDApOwotCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogRGlzYWJsaW5nIGFsYnVtIHByb2Nlc3NpbmcgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGFsYnVtLiAgUHJvYmFibHkgYSByYXJlIGVkZ2UKLSAqIGNhc2UgYW5kIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHJlbHkgb24gdGhpcyB0byB3b3JrLiAgVGhleSBuZWVkIHRvIHNlbmQgdGhlCi0gKiBlbGVtZW50IHRvIHRoZSBSRUFEWSBzdGF0ZSB0byBjbGVhciB1cCBhZnRlciBhbiBhYm9ydGVkIGFsYnVtIGFueXdheSBzaW5jZQotICogdGhleSBtaWdodCBuZWVkIHRvIHByb2Nlc3MgYW5vdGhlciBhbGJ1bSBhZnRlcndhcmRzLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wZWFrX2FsYnVtX2Fib3J0X3RvX3RyYWNrKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAibnVtLXRyYWNrcyIsIDIsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9jb25zdF9mbG9hdF9zdGVyZW8gKDgwMDAsIDEwMjQsIDEuMCwgMC4wKSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDEuMCk7Ci0gIGZhaWxfaWZfYWxidW1fdGFncyAodGFnX2xpc3QpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAibnVtLXRyYWNrcyIsIDAsIE5VTEwpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgMTAyNCwgMC4wLCAwLjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC41KTsKLSAgZmFpbF9pZl9hbGJ1bV90YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2Fpbl9hbGJ1bSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnaW50IGFjY3VtdWxhdG9yOwotICBnaW50IGk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAibnVtLXRyYWNrcyIsIDMsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgLyogVGhlIHRocmVlIHRyYWNrcyBhcmUgY29uc3RydWN0ZWQgc3VjaCB0aGF0IGlmIGFueSBvZiB0aGVzZSBpcyBpbiBmYWN0Ci0gICAqIGlnbm9yZWQgZm9yIHRoZSBhbGJ1bSBnYWluLCB0aGUgYWxidW0gZ2FpbiB3aWxsIGRpZmZlci4gKi8KLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgNDQxMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBhY2N1bXVsYXRvciA9IDA7Ci0gIGZvciAoaSA9IDg7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9zdGVyZW8gKCZhY2N1bXVsYXRvciwgNDQxMDAsIDUxMiwKLSAgICAgICAgICAgIDAuNzUsIDAuNzUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC43NSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCAtMTUuNzApOwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBhY2N1bXVsYXRvciA9IDA7Ci0gIGZvciAoaSA9IDEyOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDQ0MTAwLCA1MTIsCi0gICAgICAgICAgICAwLjUsIDAuNSkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgLTEyLjIyKTsKLSAgZmFpbF9pZl9hbGJ1bV90YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgYWNjdW11bGF0b3IgPSAwOwotICBmb3IgKGkgPSAxODA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9zdGVyZW8gKCZhY2N1bXVsYXRvciwgNDQxMDAsIDUxMiwKLSAgICAgICAgICAgIDAuMjUsIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotCi0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjI1KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsIC02LjIwKTsKLSAgZmFpbF91bmxlc3NfYWxidW1fcGVhayAodGFnX2xpc3QsIDAuNzUpOwotICAvKiBTdHJhbmdlbHksIHdhdmVnYWluIHJlcG9ydHMgLTEyLjE3IGZvciB0aGUgYWxidW0sIGJ1dCB0aGUgZml4ZWQKLSAgICogbWV0YWZsYWMgYWdyZWVzIHRvIHVzLiAgQ291bGQgYmUgYSAzMjc2NyB2cy4gMzI3NjggaXNzdWUuICovCi0gIGZhaWxfdW5sZXNzX2FsYnVtX2dhaW4gKHRhZ19saXN0LCAtMTIuMTgpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIENoZWNrcyBlbnN1cmluZyB0aGF0IHRoZSAiZm9yY2VkIiBwcm9wZXJ0eSB3b3JrcyBhcyBhZHZlcnRpc2VkLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mb3JjZWQpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLSAgZ2ludCBhY2N1bXVsYXRvciA9IDA7Ci0gIGdpbnQgaTsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJmb3JjZWQiLCBGQUxTRSwgTlVMTCk7Ci0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLQotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChGMzIpLCA0NDEwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgLyogUHJvdmlkZWQgdmFsdWVzIGFyZSB0b3RhbGx5IGFyYml0cmFyeS4gKi8KLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgR1NUX1RBR19UUkFDS19QRUFLLCAxLjAsIEdTVF9UQUdfVFJBQ0tfR0FJTiwgMi4yMSwgTlVMTCk7Ci0gIHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCB0YWdfbGlzdCk7Ci0KLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoNDQxMDAsIDUxMiwgMC41LCAwLjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotCi0gIC8qIFRoaXMgZmFpbHMgaWYgYSB0YWcgbWVzc2FnZSBpcyBnZW5lcmF0ZWQ6ICovCi0gIC8qIFNhbWUgdmFsdWVzIGFzIGFib3ZlICovCi0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCAyLjIxKTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDEuMCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIC8qIE5vdyBiYWNrIHRvIGEgdHJhY2sgd2l0aG91dCB0YWdzLiAqLwotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDQ0MTAwLCA1MTIsCi0gICAgICAgICAgICAwLjI1LCAwLjI1KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgZ2V0X2V4cGVjdGVkX2dhaW4gKDQ0MTAwKSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogU2VuZGluZyB0cmFjayBnYWluIGFuZCBwZWFrIGluIHNlcGFyYXRlIHRhZyBsaXN0cy4gKi8KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9yY2VkX3NlcGFyYXRlKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0gIGdpbnQgYWNjdW11bGF0b3IgPSAwOwotICBnaW50IGk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiZm9yY2VkIiwgRkFMU0UsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgNDQxMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwgR1NUX1RBR19UUkFDS19HQUlOLCAyLjIxLAotICAgICAgTlVMTCk7Ci0gIHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCB0YWdfbGlzdCk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsIEdTVF9UQUdfVFJBQ0tfUEVBSywgMS4wLAotICAgICAgTlVMTCk7Ci0gIHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCB0YWdfbGlzdCk7Ci0KLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9zdGVyZW8gKCZhY2N1bXVsYXRvciwgNDQxMDAsIDUxMiwKLSAgICAgICAgICAgIDAuNSwgMC41KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLQotICAvKiBTYW1lIHZhbHVlcyBhcyBhYm92ZSAqLwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19vbmx5IChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsIDIuMjEpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMS4wKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgLyogTm93IGEgdHJhY2sgd2l0aG91dCB0YWdzLiAqLwotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIGFjY3VtdWxhdG9yID0gMDsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9zdGVyZW8gKCZhY2N1bXVsYXRvciwgNDQxMDAsIDUxMiwKLSAgICAgICAgICAgIDAuMjUsIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCBnZXRfZXhwZWN0ZWRfZ2FpbiAoNDQxMDApKTsKLSAgZmFpbF9pZl9hbGJ1bV90YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogQSBUQUcgZXZlbnQgaXMgc2VudCBfYWZ0ZXJfIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuICBJbiByZWFsCi0gKiBwaXBlbGluZXMsIHRoaXMgY291bGQgaGFwcGVuIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmdhbmFseXNpcyBlbGVtZW50IChieQotICogYWNjaWRlbnQpLiAgV2hpbGUgaXQgd291bGQgaGF2ZSBhbmFseXplZCBhbGwgdGhlIGRhdGEgcHJpb3IgdG8gcmVjZWl2aW5nIHRoZQotICogZXZlbnQsIEkgZXhwZWN0IGl0IHRvIG5vdCBwb3N0IGl0cyByZXN1bHRzIGlmIG5vdCBmb3JjZWQuICBUaGlzIHRlc3QgaXMKLSAqIGFsbW9zdCBlcXVpdmFsZW50IHRvIHRlc3RfZm9yY2VkLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mb3JjZWRfYWZ0ZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnaW50IGFjY3VtdWxhdG9yID0gMDsKLSAgZ2ludCBpOwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgImZvcmNlZCIsIEZBTFNFLCBOVUxMKTsKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIDgwMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBmb3IgKGkgPSAyMDsgaS0tOykKLSAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfY29uc3RfZmxvYXRfc3RlcmVvICg4MDAwLCA1MTIsIDAuNSwgMC41KSk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9BUFBFTkQsCi0gICAgICBHU1RfVEFHX1RSQUNLX1BFQUssIDEuMCwgR1NUX1RBR19UUkFDS19HQUlOLCAyLjIxLCBOVUxMKTsKLSAgc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIHRhZ19saXN0KTsKLQotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgLyogU2FtZSB2YWx1ZXMgYXMgYWJvdmUgKi8KLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsIDIuMjEpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMS4wKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICAvKiBOb3cgYmFjayB0byBhIG5vcm1hbCB0cmFjaywgdGhpcyBvbmUgaGFzIG5vIHRhZ3M6ICovCi0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDgwMDAsIDUxMiwgMC4yNSwKLSAgICAgICAgICAgIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCBnZXRfZXhwZWN0ZWRfZ2FpbiAoODAwMCkpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIExpa2UgdGVzdF9mb3JjZWQsIGJ1dCAqYW5hbHl6ZSogYW4gYWxidW0gYWZ0ZXJ3YXJkcy4gIFRoZSB0d28gdGVzdHMgZm9sbG93aW5nCi0gKiB0aGlzIG9uZSBjaGVjayB0aGUgKnNraXBwaW5nKiBvZiBhbGJ1bXMuICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZvcmNlZF9hbGJ1bSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnaW50IGFjY3VtdWxhdG9yOwotICBnaW50IGk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiZm9yY2VkIiwgRkFMU0UsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgNDQxMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIC8qIFByb3ZpZGVkIHZhbHVlcyBhcmUgdG90YWxseSBhcmJpdHJhcnkuICovCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgIEdTVF9UQUdfVFJBQ0tfUEVBSywgMS4wLCBHU1RfVEFHX1RSQUNLX0dBSU4sIDIuMjEsIE5VTEwpOwotICBzZW5kX3RhZ19ldmVudCAoZWxlbWVudCwgdGFnX2xpc3QpOwotCi0gIGFjY3VtdWxhdG9yID0gMDsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9zdGVyZW8gKCZhY2N1bXVsYXRvciwgNDQxMDAsIDUxMiwKLSAgICAgICAgICAgIDAuNSwgMC41KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLQotICAvKiBTYW1lIHZhbHVlcyBhcyBhYm92ZSAqLwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgMi4yMSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAxLjApOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICAvKiBOb3cgYW4gYWxidW0gd2l0aG91dCB0YWdzLiAqLwotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMiwgTlVMTCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBhY2N1bXVsYXRvciA9IDA7Ci0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDQ0MTAwLCA1MTIsCi0gICAgICAgICAgICAwLjI1LCAwLjI1KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgZ2V0X2V4cGVjdGVkX2dhaW4gKDQ0MTAwKSk7Ci0gIGZhaWxfaWZfYWxidW1fdGFncyAodGFnX2xpc3QpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMSk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBhY2N1bXVsYXRvciA9IDA7Ci0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDQ0MTAwLCA1MTIsCi0gICAgICAgICAgICAwLjI1LCAwLjI1KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgZ2V0X2V4cGVjdGVkX2dhaW4gKDQ0MTAwKSk7Ci0gIGZhaWxfdW5sZXNzX2FsYnVtX3BlYWsgKHRhZ19saXN0LCAwLjI1KTsKLSAgZmFpbF91bmxlc3NfYWxidW1fZ2FpbiAodGFnX2xpc3QsIGdldF9leHBlY3RlZF9nYWluICg0NDEwMCkpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMCk7Ci0KLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mb3JjZWRfYWxidW1fc2tpcCkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnaW50IGFjY3VtdWxhdG9yID0gMDsKLSAgZ2ludCBpOwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgImZvcmNlZCIsIEZBTFNFLCAibnVtLXRyYWNrcyIsIDIsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgLyogUHJvdmlkZWQgdmFsdWVzIGFyZSB0b3RhbGx5IGFyYml0cmFyeS4gKi8KLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfQVBQRU5ELAotICAgICAgR1NUX1RBR19UUkFDS19QRUFLLCAwLjc1LCBHU1RfVEFHX1RSQUNLX0dBSU4sIDIuMjEsCi0gICAgICBHU1RfVEFHX0FMQlVNX1BFQUssIDAuODAsIEdTVF9UQUdfQUxCVU1fR0FJTiwgLTAuMTEsIE5VTEwpOwotICBzZW5kX3RhZ19ldmVudCAoZWxlbWVudCwgdGFnX2xpc3QpOwotCi0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDgwMDAsIDUxMiwgMC4yNSwKLSAgICAgICAgICAgIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotCi0gIC8qIFNhbWUgdmFsdWVzIGFzIGFib3ZlICovCi0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCAyLjIxKTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuNzUpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAxKTsKLQotICAvKiBUaGlzIHRyYWNrIGhhcyBubyB0YWdzLCBidXQgbmVlZHMgdG8gYmUgc2tpcHBlZCBhbnl3YXlzIHNpbmNlIHdlCi0gICAqIGFyZSBpbiBhbGJ1bSBwcm9jZXNzaW5nIG1vZGUuICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgNTEyLCAwLjAsIDAuMCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHBvbGxfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfbnVtX3RyYWNrcyAoZWxlbWVudCwgMCk7Ci0KLSAgLyogTm9ybWFsIHRyYWNrIGFmdGVyIHRoZSBhbGJ1bS4gIE9mIGNvdXJzZSBub3QgdG8gYmUgc2tpcHBlZC4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBhY2N1bXVsYXRvciA9IDA7Ci0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDgwMDAsIDUxMiwgMC4yNSwKLSAgICAgICAgICAgIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCBnZXRfZXhwZWN0ZWRfZ2FpbiAoODAwMCkpOwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mb3JjZWRfYWxidW1fbm9fc2tpcCkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnaW50IGFjY3VtdWxhdG9yID0gMDsKLSAgZ2ludCBpOwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgImZvcmNlZCIsIEZBTFNFLCAibnVtLXRyYWNrcyIsIDIsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0KLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgODAwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDgwMDAsIDUxMiwgMC4yNSwKLSAgICAgICAgICAgIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCBnZXRfZXhwZWN0ZWRfZ2FpbiAoODAwMCkpOwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDEpOwotCi0gIC8qIFRoZSBzZWNvbmQgdHJhY2sgaGFzIGluZGVlZCBmdWxsIHRhZ3MsIGJ1dCBhbHRob3VnaCBiZWluZyBub3QgZm9yY2VkLCB0aGlzCi0gICAqIG9uZSBoYXMgdG8gYmUgcHJvY2Vzc2VkIGJlY2F1c2UgYWxidW0gcHJvY2Vzc2luZyBpcyBvbi4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIC8qIFByb3ZpZGVkIHZhbHVlcyBhcmUgdG90YWxseSBhcmJpdHJhcnkuICovCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgIEdTVF9UQUdfVFJBQ0tfUEVBSywgMC43NSwgR1NUX1RBR19UUkFDS19HQUlOLCAyLjIxLAotICAgICAgR1NUX1RBR19BTEJVTV9QRUFLLCAwLjgwLCBHU1RfVEFHX0FMQlVNX0dBSU4sIC0wLjExLCBOVUxMKTsKLSAgc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIHRhZ19saXN0KTsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgNTEyLCAwLjAsIDAuMCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgLyogdGhlIGZpcnN0IGJhdGNoIGZyb20gdGhlIHRhZ3MgKi8KLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3Nfb25seSAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjc1KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsIDIuMjEpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICAvKiB0aGUgc2Vjb25kIGZyb20gdGhlIHByb2Nlc3NpbmcgKi8KLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCBTSUxFTkNFX0dBSU4pOwotICAvKiBTZWNvbmQgdHJhY2sgd2FzIGp1c3Qgc2lsZW5jZSBzbyB0aGUgYWxidW0gcGVhayBlcXVhbHMgdGhlIGZpcnN0Ci0gICAqIHRyYWNrJ3MgcGVhay4gKi8KLSAgZmFpbF91bmxlc3NfYWxidW1fcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICAvKiBTdGF0aXN0aWNhbCBwcm9jZXNzaW5nIGxlYWRzIHRvIHRoZSBzZWNvbmQgdHJhY2sgYmVpbmcKLSAgICogaWdub3JlZCBmb3IgdGhlIGdhaW4gKGJlY2F1c2UgaXQgaXMgc28gc2hvcnQpOiAqLwotICBmYWlsX3VubGVzc19hbGJ1bV9nYWluICh0YWdfbGlzdCwgZ2V0X2V4cGVjdGVkX2dhaW4gKDgwMDApKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzX251bV90cmFja3MgKGVsZW1lbnQsIDApOwotCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9yY2VkX2Fib3J0X2FsYnVtX25vX3NraXApCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLSAgZ2ludCBhY2N1bXVsYXRvciA9IDA7Ci0gIGdpbnQgaTsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJmb3JjZWQiLCBGQUxTRSwgIm51bS10cmFja3MiLCAyLCBOVUxMKTsKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIDgwMDAsIDIpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotICBmb3IgKGkgPSAyMDsgaS0tOykKLSAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfc3F1YXJlX2Zsb2F0X3N0ZXJlbyAoJmFjY3VtdWxhdG9yLCA4MDAwLCA1MTIsIDAuMjUsCi0gICAgICAgICAgICAwLjI1KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgZ2V0X2V4cGVjdGVkX2dhaW4gKDgwMDApKTsKLSAgZmFpbF9pZl9hbGJ1bV90YWdzICh0YWdfbGlzdCk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICBmYWlsX3VubGVzc19udW1fdHJhY2tzIChlbGVtZW50LCAxKTsKLQotICAvKiBEaXNhYmxpbmcgYWxidW0gcHJvY2Vzc2luZyBiZWZvcmUgZW5kIG9mIGFsYnVtOiAqLwotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJudW0tdHJhY2tzIiwgMCwgTlVMTCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotCi0gIC8qIFByb2Nlc3NpbmcgYSB0cmFjayB0aGF0IGhhcyB0byBiZSBza2lwcGVkLiAqLwotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIC8qIFByb3ZpZGVkIHZhbHVlcyBhcmUgdG90YWxseSBhcmJpdHJhcnkuICovCi0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX0FQUEVORCwKLSAgICAgIEdTVF9UQUdfVFJBQ0tfUEVBSywgMC43NSwgR1NUX1RBR19UUkFDS19HQUlOLCAyLjIxLAotICAgICAgR1NUX1RBR19BTEJVTV9QRUFLLCAwLjgwLCBHU1RfVEFHX0FMQlVNX0dBSU4sIC0wLjExLCBOVUxMKTsKLSAgc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIHRhZ19saXN0KTsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX2NvbnN0X2Zsb2F0X3N0ZXJlbyAoODAwMCwgNTEyLCAwLjAsIDAuMCkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuNzUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgMi4yMSk7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVmZXJlbmNlX2xldmVsKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0gIGdkb3VibGUgcmVmX2xldmVsOwotICBnaW50IGFjY3VtdWxhdG9yID0gMDsKLSAgZ2ludCBpOwotCi0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLQotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChGMzIpLCA0NDEwMCwgMik7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0gIGZvciAoaSA9IDIwOyBpLS07KQotICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsIDQ0MTAwLCA1MTIsCi0gICAgICAgICAgICAwLjI1LCAwLjI1KSk7Ci0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOwotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgZ2V0X2V4cGVjdGVkX2dhaW4gKDQ0MTAwKSk7Ci0gIGZhaWxfaWZfYWxidW1fdGFncyAodGFnX2xpc3QpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCwKLSAgICAgICAgICAmcmVmX2xldmVsKSAmJiBNQVRDSF9HQUlOIChyZWZfbGV2ZWwsIDg5LiksCi0gICAgICAiSW5jb3JyZWN0IHJlZmVyZW5jZSBsZXZlbCB0YWciKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAicmVmZXJlbmNlLWxldmVsIiwgODMuLCAibnVtLXRyYWNrcyIsIDIsIE5VTEwpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgZm9yIChpID0gMjA7IGktLTspCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9mbG9hdF9zdGVyZW8gKCZhY2N1bXVsYXRvciwgNDQxMDAsIDUxMiwKLSAgICAgICAgICAgIDAuMjUsIDAuMjUpKTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCBnZXRfZXhwZWN0ZWRfZ2FpbiAoNDQxMDApIC0gNi4pOwotICBmYWlsX2lmX2FsYnVtX3RhZ3MgKHRhZ19saXN0KTsKLSAgZmFpbF91bmxlc3MgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwgR1NUX1RBR19SRUZFUkVOQ0VfTEVWRUwsCi0gICAgICAgICAgJnJlZl9sZXZlbCkgJiYgTUFUQ0hfR0FJTiAocmVmX2xldmVsLCA4My4pLAotICAgICAgIkluY29ycmVjdCByZWZlcmVuY2UgbGV2ZWwgdGFnIik7Ci0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgYWNjdW11bGF0b3IgPSAwOwotICBmb3IgKGkgPSAyMDsgaS0tOykKLSAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfc3F1YXJlX2Zsb2F0X3N0ZXJlbyAoJmFjY3VtdWxhdG9yLCA0NDEwMCwgNTEyLAotICAgICAgICAgICAgMC4yNSwgMC4yNSkpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7Ci0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjI1KTsKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsIGdldF9leHBlY3RlZF9nYWluICg0NDEwMCkgLSA2Lik7Ci0gIGZhaWxfdW5sZXNzX2FsYnVtX3BlYWsgKHRhZ19saXN0LCAwLjI1KTsKLSAgLyogV2UgcHJvdmlkZWQgdGhlIHNhbWUgd2F2ZWZvcm0gdHdpY2UsIHdpdGggYSByZXNldCBzZXBhcmF0aW5nCi0gICAqIHRoZW0uICBUaGVyZWZvcmUsIHRoZSBhbGJ1bSBnYWluIG1hdGNoZXMgdGhlIHRyYWNrIGdhaW4uICovCi0gIGZhaWxfdW5sZXNzX2FsYnVtX2dhaW4gKHRhZ19saXN0LCBnZXRfZXhwZWN0ZWRfZ2FpbiAoNDQxMDApIC0gNi4pOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCwKLSAgICAgICAgICAmcmVmX2xldmVsKSAmJiBNQVRDSF9HQUlOIChyZWZfbGV2ZWwsIDgzLiksCi0gICAgICAiSW5jb3JyZWN0IHJlZmVyZW5jZSBsZXZlbCB0YWciKTsKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7Ci0KLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9hbGxfZm9ybWF0cykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3JnYW5hbHlzaXMgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnaW50IGFjY3VtdWxhdG9yID0gMDsKLSAgZ2ludCBpLCBqOwotCi0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLSAgc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKGVsZW1lbnQpOwotICBmb3IgKGkgPSBHX05fRUxFTUVOVFMgKHN1cHBvcnRlZF9yYXRlcyk7IGktLTspIHsKLSAgICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gICAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIHN1cHBvcnRlZF9yYXRlc1tpXS5zYW1wbGVfcmF0ZSwgMik7Ci0gICAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLSAgICBhY2N1bXVsYXRvciA9IDA7Ci0gICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLSAgICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfc3RlcmVvICgmYWNjdW11bGF0b3IsCi0gICAgICAgICAgICAgIHN1cHBvcnRlZF9yYXRlc1tpXS5zYW1wbGVfcmF0ZSwgNTEyLCAwLjI1LCAwLjI1KSk7Ci0gICAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKEYzMiksIHN1cHBvcnRlZF9yYXRlc1tpXS5zYW1wbGVfcmF0ZSwgMSk7Ci0gICAgZm9yIChqID0gMDsgaiA8IDM7IGorKykKLSAgICAgIHB1c2hfYnVmZmVyICh0ZXN0X2J1ZmZlcl9zcXVhcmVfZmxvYXRfbW9ubyAoJmFjY3VtdWxhdG9yLAotICAgICAgICAgICAgICBzdXBwb3J0ZWRfcmF0ZXNbaV0uc2FtcGxlX3JhdGUsIDUxMiwgMC4yNSkpOwotICAgIHNlbmRfY2Fwc19ldmVudCAoR1NUX0FVRElPX05FIChTMTYpLCBzdXBwb3J0ZWRfcmF0ZXNbaV0uc2FtcGxlX3JhdGUsIDIpOwotICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspCi0gICAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfc3F1YXJlX2ludDE2X3N0ZXJlbyAoJmFjY3VtdWxhdG9yLAotICAgICAgICAgICAgICBzdXBwb3J0ZWRfcmF0ZXNbaV0uc2FtcGxlX3JhdGUsIDE2LCA1MTIsIDEgPDwgMTMsIDEgPDwgMTMpKTsKLSAgICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgc3VwcG9ydGVkX3JhdGVzW2ldLnNhbXBsZV9yYXRlLCAxKTsKLSAgICBmb3IgKGogPSAwOyBqIDwgMzsgaisrKQotICAgICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9pbnQxNl9tb25vICgmYWNjdW11bGF0b3IsCi0gICAgICAgICAgICAgIHN1cHBvcnRlZF9yYXRlc1tpXS5zYW1wbGVfcmF0ZSwgMTYsIDUxMiwgMSA8PCAxMykpOwotICAgIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLSAgICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOwotICAgIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjI1KTsKLSAgICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgc3VwcG9ydGVkX3JhdGVzW2ldLmdhaW4pOwotICAgIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOwotICB9Ci0KLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBDaGVja3MgZW5zdXJpbmcgYWxsIGFkdmVydGlzZWQgc3VwcG9ydGVkIHNhbXBsZSByYXRlcyBhcmUgcmVhbGx5Ci0gKiBhY2NlcHRlZCwgZm9yIGludGVnZXIgYW5kIGZsb2F0LCBtb25vIGFuZCBzdGVyZW8uICBUaGlzIGFsc28KLSAqIHZlcmlmaWVzIHRoYXQgdGhlIGNvcnJlY3QgZ2FpbiBpcyBjb21wdXRlZCBmb3IgYWxsIGZvcm1hdHMgKGV4Y2VwdAotICogb2RkIGJpdCBkZXB0aHMpLiAqLwotCi0jZGVmaW5lIE1BS0VfR0FJTl9URVNUX0ZMT0FUX01PTk8oc2FtcGxlX3JhdGUpICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfU1RBUlRfVEVTVCAodGVzdF9nYWluX2Zsb2F0X21vbm9fIyNzYW1wbGVfcmF0ZSkgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2ludCBhY2N1bXVsYXRvciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgc2FtcGxlX3JhdGUsIDEpOyAgICAgICAgICAgICAgIFwKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfc3F1YXJlX2Zsb2F0X21vbm8gKCZhY2N1bXVsYXRvciwgICAgICAgICBcCi0gICAgICAgICAgICBzYW1wbGVfcmF0ZSwgNTEyLCAwLjI1KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnZXRfZXhwZWN0ZWRfZ2FpbiAoc2FtcGxlX3JhdGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR1NUX0VORF9URVNUOwotCi0jZGVmaW5lIE1BS0VfR0FJTl9URVNUX0ZMT0FUX1NURVJFTyhzYW1wbGVfcmF0ZSkgICAgICAgICAgICAgICAgICAgICAgXAotICBHU1RfU1RBUlRfVEVTVCAodGVzdF9nYWluX2Zsb2F0X3N0ZXJlb18jI3NhbXBsZV9yYXRlKSAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2ludCBhY2N1bXVsYXRvciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoRjMyKSwgc2FtcGxlX3JhdGUsIDIpOyAgICAgICAgICAgICAgIFwKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfc3F1YXJlX2Zsb2F0X3N0ZXJlbyAoJmFjY3VtdWxhdG9yLCAgICAgICBcCi0gICAgICAgICAgICBzYW1wbGVfcmF0ZSwgNTEyLCAwLjI1LCAwLjI1KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGFnX2xpc3QgPSBwb2xsX3RhZ3NfZm9sbG93ZWRfYnlfZW9zIChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzc190cmFja19wZWFrICh0YWdfbGlzdCwgMC4yNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3NfdHJhY2tfZ2FpbiAodGFnX2xpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnZXRfZXhwZWN0ZWRfZ2FpbiAoc2FtcGxlX3JhdGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjbGVhbnVwX3JnYW5hbHlzaXMgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotR1NUX0VORF9URVNUOwotCi0jZGVmaW5lIE1BS0VfR0FJTl9URVNUX0lOVDE2X01PTk8oc2FtcGxlX3JhdGUsIGRlcHRoKSAgICAgICAgICAgICAgICAgXAotICBHU1RfU1RBUlRfVEVTVCAodGVzdF9nYWluX2ludDE2XyMjZGVwdGgjI19tb25vXyMjc2FtcGxlX3JhdGUpICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2FuYWx5c2lzICgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ2ludCBhY2N1bXVsYXRvciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzZW5kX2NhcHNfZXZlbnQgKEdTVF9BVURJT19ORSAoUzE2KSwgc2FtcGxlX3JhdGUsIDEpOyAgICAgICAgICAgICAgIFwKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwdXNoX2J1ZmZlciAodGVzdF9idWZmZXJfc3F1YXJlX2ludDE2X21vbm8gKCZhY2N1bXVsYXRvciwgICAgICAgICBcCi0gICAgICAgICAgICBzYW1wbGVfcmF0ZSwgZGVwdGgsIDUxMiwgMSA8PCAoMTMgKyBkZXB0aCAtIDE2KSkpOyAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRhZ19saXN0ID0gcG9sbF90YWdzX2ZvbGxvd2VkX2J5X2VvcyAoZWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZmFpbF91bmxlc3NfdHJhY2tfcGVhayAodGFnX2xpc3QsIDAuMjUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZhaWxfdW5sZXNzX3RyYWNrX2dhaW4gKHRhZ19saXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ2V0X2V4cGVjdGVkX2dhaW4gKHNhbXBsZV9yYXRlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZ3N0X3RhZ19saXN0X3VucmVmICh0YWdfbGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgY2xlYW51cF9yZ2FuYWx5c2lzIChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBNQUtFX0dBSU5fVEVTVF9JTlQxNl9TVEVSRU8oc2FtcGxlX3JhdGUsIGRlcHRoKSAgICAgICAgICAgICAgIFwKLSAgR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2Fpbl9pbnQxNl8jI2RlcHRoIyNfc3RlcmVvXyMjc2FtcGxlX3JhdGUpICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdhbmFseXNpcyAoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdpbnQgYWNjdW11bGF0b3IgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBnaW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc2VuZF9jYXBzX2V2ZW50IChHU1RfQVVESU9fTkUgKFMxNiksIHNhbXBsZV9yYXRlLCAyKTsgICAgICAgICAgICAgICBcCi0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcHVzaF9idWZmZXIgKHRlc3RfYnVmZmVyX3NxdWFyZV9pbnQxNl9zdGVyZW8gKCZhY2N1bXVsYXRvciwgICAgICAgXAotICAgICAgICAgICAgc2FtcGxlX3JhdGUsIGRlcHRoLCA1MTIsIDEgPDwgKDEzICsgZGVwdGggLSAxNiksICAgICAgICAgIFwKLSAgICAgICAgICAgIDEgPDwgKDEzICsgZGVwdGggLSAxNikpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB0YWdfbGlzdCA9IHBvbGxfdGFnc19mb2xsb3dlZF9ieV9lb3MgKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZhaWxfdW5sZXNzX3RyYWNrX3BlYWsgKHRhZ19saXN0LCAwLjI1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBmYWlsX3VubGVzc190cmFja19nYWluICh0YWdfbGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGdldF9leHBlY3RlZF9nYWluIChzYW1wbGVfcmF0ZSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGdzdF90YWdfbGlzdF91bnJlZiAodGFnX2xpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGNsZWFudXBfcmdhbmFseXNpcyAoZWxlbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1HU1RfRU5EX1RFU1Q7Ci0KLU1BS0VfR0FJTl9URVNUX0ZMT0FUX01PTk8gKDgwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoMTEwMjUpOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoMTIwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoMTYwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoMjIwNTApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoMjQwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoMzIwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoNDQxMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfTU9OTyAoNDgwMDApOwotCi1NQUtFX0dBSU5fVEVTVF9GTE9BVF9TVEVSRU8gKDgwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfU1RFUkVPICgxMTAyNSk7Ci1NQUtFX0dBSU5fVEVTVF9GTE9BVF9TVEVSRU8gKDEyMDAwKTsKLU1BS0VfR0FJTl9URVNUX0ZMT0FUX1NURVJFTyAoMTYwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfU1RFUkVPICgyMjA1MCk7Ci1NQUtFX0dBSU5fVEVTVF9GTE9BVF9TVEVSRU8gKDI0MDAwKTsKLU1BS0VfR0FJTl9URVNUX0ZMT0FUX1NURVJFTyAoMzIwMDApOwotTUFLRV9HQUlOX1RFU1RfRkxPQVRfU1RFUkVPICg0NDEwMCk7Ci1NQUtFX0dBSU5fVEVTVF9GTE9BVF9TVEVSRU8gKDQ4MDAwKTsKLQotTUFLRV9HQUlOX1RFU1RfSU5UMTZfTU9OTyAoODAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfTU9OTyAoMTEwMjUsIDE2KTsKLU1BS0VfR0FJTl9URVNUX0lOVDE2X01PTk8gKDEyMDAwLCAxNik7Ci1NQUtFX0dBSU5fVEVTVF9JTlQxNl9NT05PICgxNjAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfTU9OTyAoMjIwNTAsIDE2KTsKLU1BS0VfR0FJTl9URVNUX0lOVDE2X01PTk8gKDI0MDAwLCAxNik7Ci1NQUtFX0dBSU5fVEVTVF9JTlQxNl9NT05PICgzMjAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfTU9OTyAoNDQxMDAsIDE2KTsKLU1BS0VfR0FJTl9URVNUX0lOVDE2X01PTk8gKDQ4MDAwLCAxNik7Ci0KLU1BS0VfR0FJTl9URVNUX0lOVDE2X1NURVJFTyAoODAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICgxMTAyNSwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICgxMjAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICgxNjAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICgyMjA1MCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICgyNDAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICgzMjAwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICg0NDEwMCwgMTYpOwotTUFLRV9HQUlOX1RFU1RfSU5UMTZfU1RFUkVPICg0ODAwMCwgMTYpOwotCi1zdGF0aWMgU3VpdGUgKgotcmdhbmFseXNpc19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJyZ2FuYWx5c2lzIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfbm9fYnVmZmVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vX2J1ZmZlcl9hbGJ1bV8xKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vX2J1ZmZlcl9hbGJ1bV8yKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VtcHR5X2J1ZmZlcnMpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZWFrX2Zsb2F0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlYWtfaW50MTZfMTYpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wZWFrX2FsYnVtKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3BlYWtfdHJhY2tfYWxidW0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGVha19hbGJ1bV9hYm9ydF90b190cmFjayk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5fYWxidW0pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mb3JjZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZm9yY2VkX3NlcGFyYXRlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZvcmNlZF9hZnRlcl9kYXRhKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZvcmNlZF9hbGJ1bSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mb3JjZWRfYWxidW1fc2tpcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mb3JjZWRfYWxidW1fbm9fc2tpcCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mb3JjZWRfYWJvcnRfYWxidW1fbm9fc2tpcCk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZmVyZW5jZV9sZXZlbCk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FsbF9mb3JtYXRzKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9tb25vXzgwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9tb25vXzExMDI1KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5fZmxvYXRfbW9ub18xMjAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2Zsb2F0X21vbm9fMTYwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9tb25vXzIyMDUwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5fZmxvYXRfbW9ub18yNDAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2Zsb2F0X21vbm9fMzIwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9tb25vXzQ0MTAwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5fZmxvYXRfbW9ub180ODAwMCk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5fZmxvYXRfc3RlcmVvXzgwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fMTEwMjUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fMTIwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fMTYwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fMjIwNTApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fMjQwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fMzIwMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fNDQxMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9mbG9hdF9zdGVyZW9fNDgwMDApOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X21vbm9fODAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X21vbm9fMTEwMjUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9pbnQxNl8xNl9tb25vXzEyMDAwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5faW50MTZfMTZfbW9ub18xNjAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X21vbm9fMjIwNTApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9pbnQxNl8xNl9tb25vXzI0MDAwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dhaW5faW50MTZfMTZfbW9ub18zMjAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X21vbm9fNDQxMDApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9pbnQxNl8xNl9tb25vXzQ4MDAwKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2Fpbl9pbnQxNl8xNl9zdGVyZW9fODAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb18xMTAyNSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb18xMjAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb18xNjAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb18yMjA1MCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb18yNDAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb18zMjAwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb180NDEwMCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYWluX2ludDE2XzE2X3N0ZXJlb180ODAwMCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChyZ2FuYWx5c2lzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3JnbGltaXRlci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NjA2NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcmdsaW1pdGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyogR1N0cmVhbWVyIFJlcGxheUdhaW4gbGltaXRlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZW5lIFN0YWRsZXIgPG1haWxAcmVuZXN0YWRsZXIuZGU+Ci0gKgotICogcmdsaW1pdGVyLmM6IFVuaXQgdGVzdCBmb3IgdGhlIHJnbGltaXRlciBlbGVtZW50Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1zdGF0aWMgR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotI2RlZmluZSBSR19MSU1JVEVSX0NBUFNfVEVNUExBVEVfU1RSSU5HICAgICAgIFwKLSAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICJmb3JtYXQgPSAoc3RyaW5nKSAiR1NUX0FVRElPX05FIChGMzIpICIsICIgXAotICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgICAgICAgICAgIFwKLSAgImNoYW5uZWxzID0gKGludCkgWyAxLCBNQVggXSwgIiAgICAgICAgICAgICBcCi0gICJyYXRlID0gKGludCkgWyAxLCBNQVggXSIKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoUkdfTElNSVRFUl9DQVBTX1RFTVBMQVRFX1NUUklORykKLSAgICApOwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoUkdfTElNSVRFUl9DQVBTX1RFTVBMQVRFX1NUUklORykKLSAgICApOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9yZ2xpbWl0ZXIgKHZvaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfcmdsaW1pdGVyIik7Ci0gIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInJnbGltaXRlciIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChlbGVtZW50LCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGVsZW1lbnQsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBlbGVtZW50OwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9yZ2xpbWl0ZXIgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX3JnbGltaXRlciIpOwotCi0gIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKGVsZW1lbnQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGVsZW1lbnQpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoZWxlbWVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfcGxheWluZ19zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJDb3VsZCBub3Qgc2V0IHN0YXRlIHRvIFBMQVlJTkciKTsKLX0KLQotc3RhdGljIGNvbnN0IGdmbG9hdCB0ZXN0X2lucHV0W10gPSB7Ci0gIC0yLjAsIC0xLjAsIC0wLjc1LCAtMC41LCAtMC4yNSwgMC4wLCAwLjI1LCAwLjUsIDAuNzUsIDEuMCwgMi4wCi19OwotCi1zdGF0aWMgY29uc3QgZ2Zsb2F0IHRlc3Rfb3V0cHV0W10gPSB7Ci0gIC0wLjk5NzUyNzM3Njg0MzM2NTIzLCAgICAgICAgIC8qIC0yLjAgICovCi0gIC0wLjg4MDc5NzA3Nzk3Nzg4MjQzLCAgICAgICAgIC8qIC0xLjAgICovCi0gIC0wLjczMTA1ODU3ODYzMDAwNDksICAgICAgICAgIC8qIC0wLjc1ICovCi0gIC0wLjUsIC0wLjI1LCAwLjAsIDAuMjUsIDAuNSwKLSAgMC43MzEwNTg1Nzg2MzAwMDQ5LCAgICAgICAgICAgLyogMC43NSAqLwotICAwLjg4MDc5NzA3Nzk3Nzg4MjQzLCAgICAgICAgICAvKiAxLjAgICovCi0gIDAuOTk3NTI3Mzc2ODQzMzY1MjMsICAgICAgICAgIC8qIDIuMCAgKi8KLX07Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cF9ldmVudHMgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RDYXBzICpjYXBzOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgInJhdGUiLCBHX1RZUEVfSU5ULCA0NDEwMCwgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMSwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBHU1RfQVVESU9fTkUgKEYzMiksCi0gICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklORywgImludGVybGVhdmVkIiwgTlVMTCk7Ci0KLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXlzcmNwYWQsIGVsZW1lbnQsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfdGVzdF9idWZmZXIgKHZvaWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jIChzaXplb2YgKHRlc3RfaW5wdXQpKTsKLQotICBnc3RfYnVmZmVyX2ZpbGwgKGJ1ZiwgMCwgdGVzdF9pbnB1dCwgc2l6ZW9mICh0ZXN0X2lucHV0KSk7Ci0KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7Ci0KLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIHZvaWQKLXZlcmlmeV90ZXN0X2J1ZmZlciAoR3N0QnVmZmVyICogYnVmKQotewotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Zsb2F0ICpvdXRwdXQ7Ci0gIGdpbnQgaTsKLQotICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBvdXRwdXQgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmYWlsX3VubGVzcyAobWFwLnNpemUgPT0gc2l6ZW9mICh0ZXN0X291dHB1dCkpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMgKHRlc3RfaW5wdXQpOyBpKyspCi0gICAgZmFpbF91bmxlc3MgKEFCUyAob3V0cHV0W2ldIC0gdGVzdF9vdXRwdXRbaV0pIDwgMS5lLTYsCi0gICAgICAgICJJbmNvcnJlY3Qgb3V0cHV0IHZhbHVlICUuNmYgZm9yIGlucHV0ICUuMmYsIGV4cGVjdGVkICUuNmYiLAotICAgICAgICBvdXRwdXRbaV0sIHRlc3RfaW5wdXRbaV0sIHRlc3Rfb3V0cHV0W2ldKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotfQotCi0vKiBTdGFydCBvZiB0ZXN0cy4gKi8KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfbm9fYnVmZmVyKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdsaW1pdGVyICgpOwotCi0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLQotICBjbGVhbnVwX3JnbGltaXRlciAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGlzYWJsZWQpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2xpbWl0ZXIgKCk7Ci0gIEdzdEJ1ZmZlciAqYnVmLCAqb3V0X2J1ZjsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJlbmFibGVkIiwgRkFMU0UsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0gIHNldHVwX2V2ZW50cyAoZWxlbWVudCk7Ci0KLSAgYnVmID0gY3JlYXRlX3Rlc3RfYnVmZmVyICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLSAgb3V0X2J1ZiA9IGJ1ZmZlcnMtPmRhdGE7Ci0gIGZhaWxfaWYgKG91dF9idWYgPT0gTlVMTCk7Ci0gIGJ1ZmZlcnMgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJzLCBvdXRfYnVmKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0X2J1ZiwgIm91dF9idWYiLCAxKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBvdXRfYnVmKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0X2J1Zik7Ci0KLSAgY2xlYW51cF9yZ2xpbWl0ZXIgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xpbWl0aW5nKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmdsaW1pdGVyICgpOwotICBHc3RCdWZmZXIgKmJ1ZiwgKm91dF9idWY7Ci0KLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZXR1cF9ldmVudHMgKGVsZW1lbnQpOwotCi0gIC8qIE11dGFibGUgdmFyaWFudC4gKi8KLSAgYnVmID0gY3JlYXRlX3Rlc3RfYnVmZmVyICgpOwotICBHU1RfREVCVUcgKCJwdXNoIG11dGFibGUgYnVmZmVyIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWYpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDEpOwotICBvdXRfYnVmID0gYnVmZmVycy0+ZGF0YTsKLSAgZmFpbF9pZiAob3V0X2J1ZiA9PSBOVUxMKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0X2J1ZiwgIm91dF9idWYiLCAxKTsKLSAgdmVyaWZ5X3Rlc3RfYnVmZmVyIChvdXRfYnVmKTsKLQotICAvKiBJbW11dGFibGUgdmFyaWFudC4gKi8KLSAgYnVmID0gY3JlYXRlX3Rlc3RfYnVmZmVyICgpOwotICAvKiBFeHRyYSByZWY6ICovCi0gIGdzdF9idWZmZXJfcmVmIChidWYpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChidWYsICJidWYiLCAyKTsKLSAgR1NUX0RFQlVHICgicHVzaCBpbW11dGFibGUgYnVmZmVyIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWYpID09IEdTVF9GTE9XX09LKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoYnVmLCAiYnVmIiwgMSk7Ci0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAyKTsKLSAgb3V0X2J1ZiA9IGdfbGlzdF9sYXN0IChidWZmZXJzKS0+ZGF0YTsKLSAgZmFpbF9pZiAob3V0X2J1ZiA9PSBOVUxMKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0X2J1ZiwgIm91dF9idWYiLCAxKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBvdXRfYnVmKTsKLSAgLyogRHJvcCBvdXIgZXh0cmEgcmVmOiAqLwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB2ZXJpZnlfdGVzdF9idWZmZXIgKG91dF9idWYpOwotCi0gIGNsZWFudXBfcmdsaW1pdGVyIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9nYXApCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ2xpbWl0ZXIgKCk7Ci0gIEdzdEJ1ZmZlciAqYnVmLCAqb3V0X2J1ZjsKLSAgR3N0TWFwSW5mbyBtMSwgbTI7Ci0KLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZXR1cF9ldmVudHMgKGVsZW1lbnQpOwotCi0gIGJ1ZiA9IGNyZWF0ZV90ZXN0X2J1ZmZlciAoKTsKLSAgR1NUX0JVRkZFUl9GTEFHX1NFVCAoYnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSk7Ci0gIG91dF9idWYgPSBidWZmZXJzLT5kYXRhOwotICBmYWlsX2lmIChvdXRfYnVmID09IE5VTEwpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChvdXRfYnVmLCAib3V0X2J1ZiIsIDEpOwotCi0gIC8qIFZlcmlmeSB0aGF0IHRoZSBiYXNlY2xhc3MgZG9lcyBub3QgbGlmdCB0aGUgR0FQIGZsYWc6ICovCi0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChvdXRfYnVmLCBHU1RfQlVGRkVSX0ZMQUdfR0FQKSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dF9idWYsICZtMSwgR1NUX01BUF9SRUFEKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm0yLCBHU1RfTUFQX1JFQUQpOwotCi0gIGdfYXNzZXJ0IChtMS5zaXplID09IG0yLnNpemUpOwotICAvKiBXZSBjaGVhdGVkIGJ5IHBhc3NpbmcgYW4gaW5wdXQgYnVmZmVyIHdpdGggbm9uLXNpbGVuY2UgdGhhdCBoYXMgdGhlIEdBUAotICAgKiBmbGFnIHNldC4gIFRoZSBlbGVtZW50IGNhbm5vdCBrbm93IHRoYXQgaG93ZXZlciBhbmQgbXVzdCBoYXZlIHNraXBwZWQKLSAgICogYWRqdXN0aW5nIHRoZSBidWZmZXIgYmVjYXVzZSBvZiB0aGUgZmxhZywgd2hpY2ggd2UgY2FuIGVhc2lseSB2ZXJpZnk6ICovCi0gIGZhaWxfaWYgKG1lbWNtcCAobTEuZGF0YSwgbTIuZGF0YSwgbTEuc2l6ZSkgIT0gMCk7Ci0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0X2J1ZiwgJm0xKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbTIpOwotCi0gIGNsZWFudXBfcmdsaW1pdGVyIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcmdsaW1pdGVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInJnbGltaXRlciIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vX2J1ZmZlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kaXNhYmxlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9saW1pdGluZyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYXApOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocmdsaW1pdGVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9yZ3ZvbHVtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGFlOGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3Jndm9sdW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzggKzAsMCBAQAotLyogR1N0cmVhbWVyIFJlcGxheUdhaW4gdm9sdW1lIGFkanVzdG1lbnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVuZSBTdGFkbGVyIDxtYWlsQHJlbmVzdGFkbGVyLmRlPgotICoKLSAqIHJndm9sdW1lLmM6IFVuaXQgdGVzdCBmb3IgdGhlIHJndm9sdW1lIGVsZW1lbnQKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLXN0YXRpYyBHTGlzdCAqZXZlbnRzID0gTlVMTDsKLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcgc3JjIGFuZAotICogc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsIGdldF9wZWVyLCBhbmQKLSAqIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotc3RhdGljIEdzdFBhZCAqbXlzcmNwYWQsICpteXNpbmtwYWQ7Ci0KLSNkZWZpbmUgUkdfVk9MVU1FX0NBUFNfVEVNUExBVEVfU1RSSU5HICAgICAgICBcCi0gICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiZm9ybWF0ID0gKHN0cmluZykgIkdTVF9BVURJT19ORSAoRjMyKSAiLCAiIFwKLSAgImxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgICAgICAgICBcCi0gICJjaGFubmVscyA9IChpbnQpIFsgMSwgTUFYIF0sICIgICAgICAgICAgICAgXAotICAicmF0ZSA9IChpbnQpIFsgMSwgTUFYIF0iCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFJHX1ZPTFVNRV9DQVBTX1RFTVBMQVRFX1NUUklORykKLSAgICApOwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzcmMiLAotICAgIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoUkdfVk9MVU1FX0NBUFNfVEVNUExBVEVfU1RSSU5HKQotICAgICk7Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKnRlc3RfYnVmZmVyX25ldyAoZ2Zsb2F0IHZhbHVlKTsKLQotLyogZ3N0Y2hlY2sgc2V0cyB1cCBhIGNoYWluIGZ1bmN0aW9uIHRoYXQgYXBwZW5kcyBidWZmZXJzIHRvIGEgZ2xvYmFsIGxpc3QuCi0gKiBUaGlzIGlzIG91ciBlcXVpdmFsZW50IG9mIHRoYXQgZm9yIGV2ZW50IGhhbmRsaW5nLiAqLwotc3RhdGljIGdib29sZWFuCi1ldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR1NUX0RFQlVHICgicmVjZWl2ZWQgZXZlbnQgJXAgKCVzKSIsIGV2ZW50LCBHU1RfRVZFTlRfVFlQRV9OQU1FIChldmVudCkpOwotICBldmVudHMgPSBnX2xpc3RfYXBwZW5kIChldmVudHMsIGV2ZW50KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfcmd2b2x1bWUgKHZvaWQpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0KLSAgR1NUX0RFQlVHICgic2V0dXBfcmd2b2x1bWUiKTsKLSAgZWxlbWVudCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgicmd2b2x1bWUiKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoZWxlbWVudCwgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChlbGVtZW50LCAmc2lua3RlbXBsYXRlKTsKLQotICAvKiBDYXB0dXJlIGV2ZW50cywgdG8gdGVzdCB0YWcgZmlsdGVyaW5nIGJlaGF2aW9yOiAqLwotICBnc3RfcGFkX3NldF9ldmVudF9mdW5jdGlvbiAobXlzaW5rcGFkLCBldmVudF9mdW5jKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBlbGVtZW50OwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9lbXB0eV9idWZmZXIgKHZvaWQpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotCi0gIGJ1ZiA9IHRlc3RfYnVmZmVyX25ldyAoMC4wKTsKLSAgZ3N0X2J1ZmZlcl9yZXNpemUgKGJ1ZiwgMCwgMCk7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikgPSAwOwotICBHU1RfQlVGRkVSX09GRlNFVF9FTkQgKGJ1ZikgPSBHU1RfQlVGRkVSX09GRlNFVCAoYnVmKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLSAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMtPmRhdGEgPT0gYnVmKTsKLSAgZ3N0X21pbmlfb2JqZWN0X3VucmVmICgoR3N0TWluaU9iamVjdCAqKSBidWZmZXJzLT5kYXRhKTsKLSAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX3Jndm9sdW1lIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9yZ3ZvbHVtZSIpOwotCi0gIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGV2ZW50cywgKEdGdW5jKSBnc3RfbWluaV9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoZXZlbnRzKTsKLSAgZXZlbnRzID0gTlVMTDsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBGQUxTRSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChlbGVtZW50KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChlbGVtZW50KTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKGVsZW1lbnQpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X3BsYXlpbmdfc3RhdGUgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiQ291bGQgbm90IHNldCBzdGF0ZSB0byBQTEFZSU5HIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfbnVsbF9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQpCi17Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJDb3VsZCBub3Qgc2V0IHN0YXRlIHRvIE5VTEwiKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfZmx1c2hfZXZlbnRzIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RhcnQgKCkpOwotICBmYWlsX3VubGVzcyAocmVzLCAiZmx1c2gtc3RhcnQgZXZlbiBub3QgaGFuZGxlZCIpOwotCi0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotICBmYWlsX3VubGVzcyAocmVzLCAiZmx1c2gtc3RvcCBldmVudCBub3QgaGFuZGxlZCIpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9zdHJlYW1fc3RhcnRfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0IikpOwotICBmYWlsX3VubGVzcyAocmVzLCAiU1RSRUFNX1NUQVJUIGV2ZW50IG5vdCBoYW5kbGVkIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZW5kX2NhcHNfZXZlbnQgKEdzdEVsZW1lbnQgKiBlbGVtZW50KQotewotICBHc3RDYXBzICpjYXBzOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsIGZvcm1hdCA9ICIgR1NUX0FVRElPX05FIChGMzIpICIsICIKLSAgICAgICJsYXlvdXQgPSBpbnRlcmxlYXZlZCwgcmF0ZSA9IDgwMDAsIGNoYW5uZWxzID0gMSIpOwotICByZXMgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2NhcHMgKGNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKHJlcywgIkNBUFMgZXZlbnQgbm90IGhhbmRsZWQiKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1zdGF0aWMgdm9pZAotc2VuZF9zZWdtZW50X2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBnYm9vbGVhbiByZXM7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgZmFpbF91bmxlc3MgKHJlcywgIlNFR01FTlQgZXZlbnQgbm90IGhhbmRsZWQiKTsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfZW9zX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0RXZlbnQgKmV2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KSwKLSAgICAgICJQdXNoaW5nIEVPUyBldmVudCBmYWlsZWQiKTsKLX0KLQotc3RhdGljIEdzdEV2ZW50ICoKLXNlbmRfdGFnX2V2ZW50IChHc3RFbGVtZW50ICogZWxlbWVudCwgR3N0RXZlbnQgKiBldmVudCkKLXsKLSAgR0xpc3QgKmw7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotICBnZG91YmxlIGR1bW15OwotCi0gIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChldmVudC0+dHlwZSA9PSBHU1RfRVZFTlRfVEFHLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZXZlbnQpLAotICAgICAgIlB1c2hpbmcgdGFnIGV2ZW50IGZhaWxlZCIpOwotCi0gIGV2ZW50ID0gTlVMTDsKLQotICBmb3IgKGwgPSBnX2xpc3RfbGFzdCAoZXZlbnRzKTsgbDsgbCA9IGwtPnByZXYpIHsKLSAgICBpZiAoR1NUX0VWRU5UX1RZUEUgKGwtPmRhdGEpID09IEdTVF9FVkVOVF9UQUcpIHsKLSAgICAgIGV2ZW50ID0gbC0+ZGF0YTsKLSAgICAgIGV2ZW50cyA9IGdfbGlzdF9kZWxldGVfbGluayAoZXZlbnRzLCBsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8qIEV2ZW50IGdvdCBmaWx0ZXJlZCBvdXQgKi8KLSAgaWYgKGV2ZW50ID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7Ci0KLSAgZmFpbF91bmxlc3MgKGV2ZW50LT50eXBlID09IEdTVF9FVkVOVF9UQUcpOwotICBnc3RfZXZlbnRfcGFyc2VfdGFnIChldmVudCwgJnRhZ19saXN0KTsKLQotICAvKiBUaGUgZWxlbWVudCBpcyBzdXBwb3NlZCB0byBmaWx0ZXIgb3V0IFJlcGxheUdhaW4gcmVsYXRlZCB0YWdzLiAqLwotICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsIEdTVF9UQUdfVFJBQ0tfR0FJTiwgJmR1bW15KSwKLSAgICAgICJ0YWcgZXZlbnQgc3RpbGwgY29udGFpbnMgdHJhY2sgZ2FpbiB0YWciKTsKLSAgZmFpbF9pZiAoZ3N0X3RhZ19saXN0X2dldF9kb3VibGUgKHRhZ19saXN0LCBHU1RfVEFHX1RSQUNLX1BFQUssICZkdW1teSksCi0gICAgICAidGFnIGV2ZW50IHN0aWxsIGNvbnRhaW5zIHRyYWNrIHBlYWsgdGFnIik7Ci0gIGZhaWxfaWYgKGdzdF90YWdfbGlzdF9nZXRfZG91YmxlICh0YWdfbGlzdCwgR1NUX1RBR19BTEJVTV9HQUlOLCAmZHVtbXkpLAotICAgICAgInRhZyBldmVudCBzdGlsbCBjb250YWlucyBhbGJ1bSBnYWluIHRhZyIpOwotICBmYWlsX2lmIChnc3RfdGFnX2xpc3RfZ2V0X2RvdWJsZSAodGFnX2xpc3QsIEdTVF9UQUdfQUxCVU1fUEVBSywgJmR1bW15KSwKLSAgICAgICJ0YWcgZXZlbnQgc3RpbGwgY29udGFpbnMgYWxidW0gcGVhayB0YWciKTsKLQotICByZXR1cm4gZXZlbnQ7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotdGVzdF9idWZmZXJfbmV3IChnZmxvYXQgdmFsdWUpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgZ2Zsb2F0ICpkYXRhOwotICBnaW50IGk7Ci0KLSAgYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg4ICogc2l6ZW9mIChnZmxvYXQpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotICAgIGRhdGFbaV0gPSB2YWx1ZTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKLQotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGJ1ZiwgImJ1ZiIsIDEpOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLSNkZWZpbmUgTUFUQ0hfR0FJTihnMSwgZzIpICgoZzEgPCBnMiArIDFlLTYpICYmIChnMiA8IGcxICsgMWUtNikpCi0KLXN0YXRpYyB2b2lkCi1mYWlsX3VubGVzc190YXJnZXRfZ2FpbiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdkb3VibGUgZXhwZWN0ZWRfZ2FpbikKLXsKLSAgZ2RvdWJsZSBwcm9wX2dhaW47Ci0KLSAgZ19vYmplY3RfZ2V0IChlbGVtZW50LCAidGFyZ2V0LWdhaW4iLCAmcHJvcF9nYWluLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoTUFUQ0hfR0FJTiAocHJvcF9nYWluLCBleHBlY3RlZF9nYWluKSwKLSAgICAgICJUYXJnZXQgZ2FpbiBpcyAlLjJmIGRCLCBleHBlY3RlZCAlLjJmIGRCIiwgcHJvcF9nYWluLCBleHBlY3RlZF9nYWluKTsKLX0KLQotc3RhdGljIHZvaWQKLWZhaWxfdW5sZXNzX3Jlc3VsdF9nYWluIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ2RvdWJsZSBleHBlY3RlZF9nYWluKQotewotICBHc3RCdWZmZXIgKmlucHV0X2J1ZiwgKm91dHB1dF9idWY7Ci0gIGdmbG9hdCAqZGF0YTsKLSAgZ2Zsb2F0IGlucHV0X3NhbXBsZSwgb3V0cHV0X3NhbXBsZTsKLSAgZ2RvdWJsZSBnYWluLCBwcm9wX2dhaW47Ci0gIGdib29sZWFuIGlzX3Bhc3N0aHJvdWdoLCBleHBlY3RfcGFzc3Rocm91Z2g7Ci0gIGdpbnQgaTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgZmFpbF91bmxlc3MgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpID09IDApOwotCi0gIGlucHV0X3NhbXBsZSA9IDEuMDsKLSAgaW5wdXRfYnVmID0gdGVzdF9idWZmZXJfbmV3IChpbnB1dF9zYW1wbGUpOwotCi0gIC8qIFdlIGtlZXAgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIGRldGVjdCBwYXNzdGhyb3VnaCBtb2RlLiAqLwotICBnc3RfYnVmZmVyX3JlZiAoaW5wdXRfYnVmKTsKLSAgLyogUHVzaGluZyBzdGVhbHMgYSByZWZlcmVuY2UuICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbnB1dF9idWYpID09IEdTVF9GTE9XX09LKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5wdXRfYnVmKTsKLQotICAvKiBUaGUgb3V0cHV0IGJ1ZmZlciBlbmRzIHVwIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QuICovCi0gIGZhaWxfdW5sZXNzIChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLSAgb3V0cHV0X2J1ZiA9IGJ1ZmZlcnMtPmRhdGE7Ci0gIGZhaWxfaWYgKG91dHB1dF9idWYgPT0gTlVMTCk7Ci0KLSAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dHB1dF9idWYpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChvdXRwdXRfYnVmLCAib3V0cHV0X2J1ZiIsIDEpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dHB1dF9idWYpLAotICAgICAgOCAqIHNpemVvZiAoZ2Zsb2F0KSk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dHB1dF9idWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGEgPSAoZ2Zsb2F0ICopIG1hcC5kYXRhOwotCi0gIG91dHB1dF9zYW1wbGUgPSAqZGF0YTsKLSAgZmFpbF9pZiAob3V0cHV0X3NhbXBsZSA9PSAwLjAsICJGaXJzdCBvdXRwdXQgc2FtcGxlIGlzIHplcm8iKTsKLSAgZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewotICAgIGZhaWxfdW5sZXNzIChvdXRwdXRfc2FtcGxlID09IGRhdGFbaV0sICJPdXRwdXQgc2FtcGxlcyBub3QgdW5pZm9ybSIpOwotICB9OwotICBnc3RfYnVmZmVyX3VubWFwIChvdXRwdXRfYnVmLCAmbWFwKTsKLQotICBnYWluID0gMjAuICogbG9nMTAgKG91dHB1dF9zYW1wbGUgLyBpbnB1dF9zYW1wbGUpOwotICBmYWlsX3VubGVzcyAoTUFUQ0hfR0FJTiAoZ2FpbiwgZXhwZWN0ZWRfZ2FpbiksCi0gICAgICAiQXBwbGllZCBnYWluIGlzICUuMmYgZEIsIGV4cGVjdGVkICUuMmYgZEIiLCBnYWluLCBleHBlY3RlZF9nYWluKTsKLSAgZ19vYmplY3RfZ2V0IChlbGVtZW50LCAicmVzdWx0LWdhaW4iLCAmcHJvcF9nYWluLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKE1BVENIX0dBSU4gKHByb3BfZ2FpbiwgZXhwZWN0ZWRfZ2FpbiksCi0gICAgICAiUmVzdWx0IGdhaW4gaXMgJS4yZiBkQiwgZXhwZWN0ZWQgJS4yZiBkQiIsIHByb3BfZ2FpbiwgZXhwZWN0ZWRfZ2Fpbik7Ci0KLSAgaXNfcGFzc3Rocm91Z2ggPSAob3V0cHV0X2J1ZiA9PSBpbnB1dF9idWYpOwotICBleHBlY3RfcGFzc3Rocm91Z2ggPSBNQVRDSF9HQUlOIChleHBlY3RlZF9nYWluLCArMC4wMCk7Ci0gIGZhaWxfdW5sZXNzIChpc19wYXNzdGhyb3VnaCA9PSBleHBlY3RfcGFzc3Rocm91Z2gsCi0gICAgICBleHBlY3RfcGFzc3Rocm91Z2gKLSAgICAgID8gIkV4cGVjdGVkIG9wZXJhdGlvbiBpbiBwYXNzdGhyb3VnaCBtb2RlIgotICAgICAgOiAiSW5jb3JyZWN0IHBhc3N0aHJvdWdoIGJlaGF2aW91ciIpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKG91dHB1dF9idWYpOwotfQotCi1zdGF0aWMgdm9pZAotZmFpbF91bmxlc3NfZ2FpbiAoR3N0RWxlbWVudCAqIGVsZW1lbnQsIGdkb3VibGUgZXhwZWN0ZWRfZ2FpbikKLXsKLSAgZmFpbF91bmxlc3NfdGFyZ2V0X2dhaW4gKGVsZW1lbnQsIGV4cGVjdGVkX2dhaW4pOwotICBmYWlsX3VubGVzc19yZXN1bHRfZ2FpbiAoZWxlbWVudCwgZXhwZWN0ZWRfZ2Fpbik7Ci19Ci0KLS8qIFN0YXJ0IG9mIHRlc3RzLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ub19idWZmZXIpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ3ZvbHVtZSAoKTsKLQotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0gIHNldF9udWxsX3N0YXRlIChlbGVtZW50KTsKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgY2xlYW51cF9yZ3ZvbHVtZSAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZXZlbnRzKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmd2b2x1bWUgKCk7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0RXZlbnQgKm5ld19ldmVudDsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0gIGdjaGFyICphcnRpc3Q7Ci0KLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0KLSAgc2VuZF9lbXB0eV9idWZmZXIgKCk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCArNC45NSwgR1NUX1RBR19UUkFDS19QRUFLLCAwLjU5NDYzLAotICAgICAgR1NUX1RBR19BTEJVTV9HQUlOLCAtMS41NCwgR1NUX1RBR19BTEJVTV9QRUFLLCAwLjY5MzQxNSwKLSAgICAgIEdTVF9UQUdfQVJUSVNULCAiRm9vYmFyIiwgTlVMTCk7Ci0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld190YWcgKHRhZ19saXN0KTsKLSAgbmV3X2V2ZW50ID0gc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIGV2ZW50KTsKLSAgZ3N0X2V2ZW50X3BhcnNlX3RhZyAobmV3X2V2ZW50LCAmdGFnX2xpc3QpOwotICBmYWlsX3VubGVzcyAoZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcgKHRhZ19saXN0LCBHU1RfVEFHX0FSVElTVCwgJmFydGlzdCkpOwotICBmYWlsX3VubGVzcyAoZ19zdHJfZXF1YWwgKGFydGlzdCwgIkZvb2JhciIpKTsKLSAgZ19mcmVlIChhcnRpc3QpOwotICBnc3RfZXZlbnRfdW5yZWYgKG5ld19ldmVudCk7Ci0KLSAgLyogU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggYSBub24td3JpdGFibGUgZXZlbnQuICovCi0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCArNC45NSwgR1NUX1RBR19UUkFDS19QRUFLLCAwLjU5NDYzLAotICAgICAgR1NUX1RBR19BTEJVTV9HQUlOLCAtMS41NCwgR1NUX1RBR19BTEJVTV9QRUFLLCAwLjY5MzQxNSwKLSAgICAgIEdTVF9UQUdfQVJUSVNULCAiRm9vYmFyIiwgTlVMTCk7Ci0gIGdzdF90YWdfbGlzdF9yZWYgKHRhZ19saXN0KTsKLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpOwotICBuZXdfZXZlbnQgPSBzZW5kX3RhZ19ldmVudCAoZWxlbWVudCwgZXZlbnQpOwotCi0gIC8qIE1ha2Ugc3VyZSBvdXIgdGFncyB3ZXJlbid0IG1vZGlmaWVkIGluIHBsYWNlIHdoaWxlIHdlIHN0aWxsIGdvdCBhIHJlZiAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICg1LCBnc3RfdGFnX2xpc3Rfbl90YWdzICh0YWdfbGlzdCkpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRhZ19saXN0KTsKLQotICBnc3RfZXZlbnRfcGFyc2VfdGFnIChuZXdfZXZlbnQsICZ0YWdfbGlzdCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyAodGFnX2xpc3QsIEdTVF9UQUdfQVJUSVNULCAmYXJ0aXN0KSk7Ci0gIGZhaWxfdW5sZXNzIChnX3N0cl9lcXVhbCAoYXJ0aXN0LCAiRm9vYmFyIikpOwotICBnX2ZyZWUgKGFydGlzdCk7Ci0gIGdzdF9ldmVudF91bnJlZiAobmV3X2V2ZW50KTsKLQotICBjbGVhbnVwX3Jndm9sdW1lIChlbGVtZW50KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGUpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ3ZvbHVtZSAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiYWxidW0tbW9kZSIsIEZBTFNFLCAiaGVhZHJvb20iLCArMC4wMCwKLSAgICAgICJwcmUtYW1wIiwgLTYuMDAsICJmYWxsYmFjay1nYWluIiwgKzEuMjMsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLQotICBzZW5kX2VtcHR5X2J1ZmZlciAoKTsKLQotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX1RSQUNLX0dBSU4sIC0zLjQ1LCBHU1RfVEFHX1RSQUNLX1BFQUssIDEuMCwKLSAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgKzIuMDksIEdTVF9UQUdfQUxCVU1fUEVBSywgMS4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZ2FpbiAoZWxlbWVudCwgLTkuNDUpOyAgICAvKiBwcmUtYW1wICsgdHJhY2sgZ2FpbiAqLwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiYWxidW0tbW9kZSIsIFRSVUUsIE5VTEwpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLQotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX1RSQUNLX0dBSU4sIC0zLjQ1LCBHU1RfVEFHX1RSQUNLX1BFQUssIDEuMCwKLSAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgKzIuMDksIEdTVF9UQUdfQUxCVU1fUEVBSywgMS4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZ2FpbiAoZWxlbWVudCwgLTMuOTEpOyAgICAvKiBwcmUtYW1wICsgYWxidW0gZ2FpbiAqLwotCi0gIC8qIFN3aXRjaGluZyBiYWNrIHRvIHRyYWNrIG1vZGUgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmVhbTogKi8KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiYWxidW0tbW9kZSIsIEZBTFNFLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZ2FpbiAoZWxlbWVudCwgLTkuNDUpOyAgICAvKiBwcmUtYW1wICsgdHJhY2sgZ2FpbiAqLwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgY2xlYW51cF9yZ3ZvbHVtZSAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogSWYgdGhlcmUgYXJlIG5vIGdhaW4gdGFncyBhdCBhbGwsIHRoZSBmYWxsYmFjayBnYWluIGlzIHVzZWQuICovCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZhbGxiYWNrX2dhaW4pCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ3ZvbHVtZSAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgLyogRmlyc3Qgc29tZSB0cmFjayB3aGVyZSBmYWxsYmFjayBkb2VzIF9ub3RfIGFwcGx5LiAqLwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgImFsYnVtLW1vZGUiLCBGQUxTRSwgImhlYWRyb29tIiwgMTAuMDAsCi0gICAgICAicHJlLWFtcCIsIC02LjAwLCAiZmFsbGJhY2stZ2FpbiIsIC0zLjAwLCBOVUxMKTsKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0KLSAgc2VuZF9lbXB0eV9idWZmZXIgKCk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCArMy41LCBHU1RfVEFHX1RSQUNLX1BFQUssIDEuMCwKLSAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgLTAuNSwgR1NUX1RBR19BTEJVTV9QRUFLLCAxLjAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIGdzdF9ldmVudF9uZXdfdGFnICh0YWdfbGlzdCkpID09IE5VTEwpOwotICBmYWlsX3VubGVzc19nYWluIChlbGVtZW50LCAtMi41MCk7ICAgIC8qIHByZS1hbXAgKyB0cmFjayBnYWluICovCi0gIHNlbmRfZW9zX2V2ZW50IChlbGVtZW50KTsKLQotICAvKiBOb3cgYSB0cmFjayBjb21wbGV0ZWx5IG1pc3NpbmcgdGFncy4gKi8KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotCi0gIGZhaWxfdW5sZXNzX2dhaW4gKGVsZW1lbnQsIC05LjAwKTsgICAgLyogcHJlLWFtcCArIGZhbGxiYWNrLWdhaW4gKi8KLQotICAvKiBDaGFuZ2luZyB0aGUgZmFsbGJhY2sgZ2FpbiBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyZWFtLCBnb2luZyB0byBwYXNzLXRocm91Z2gKLSAgICogbW9kZTogKi8KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiZmFsbGJhY2stZ2FpbiIsICs2LjAwLCBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZ2FpbiAoZWxlbWVudCwgKzAuMDApOyAgICAvKiBwcmUtYW1wICsgZmFsbGJhY2stZ2FpbiAqLwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgLyogVmVyaWZ5IHRoYXQgcmVzdWx0IGdhaW4gaXMgc2V0IHRvICswLjAwIHdpdGggcHJlLWFtcCArIGZhbGxiYWNrLWdhaW4gPgotICAgKiArMC4wMCBhbmQgbm8gaGVhZHJvb20uICovCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJmYWxsYmFjay1nYWluIiwgKzEyLjAwLCAiaGVhZHJvb20iLCArMC4wMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX3RhcmdldF9nYWluIChlbGVtZW50LCArNi4wMCk7ICAgICAvKiBwcmUtYW1wICsgZmFsbGJhY2stZ2FpbiAqLwotICBmYWlsX3VubGVzc19yZXN1bHRfZ2FpbiAoZWxlbWVudCwgKzAuMDApOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgY2xlYW51cF9yZ3ZvbHVtZSAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogSWYgYWxidW0gZ2FpbiBpcyB0byBiZSBwcmVmZXJyZWQgYnV0IG5vdCBhdmFpbGFibGUsIHRoZSB0cmFjayBnYWluIGlzIHRvIGJlCi0gKiB0YWtlbiBpbnN0ZWFkLiAqLwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mYWxsYmFja190cmFjaykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudCA9IHNldHVwX3Jndm9sdW1lICgpOwotICBHc3RUYWdMaXN0ICp0YWdfbGlzdDsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJhbGJ1bS1tb2RlIiwgVFJVRSwgImhlYWRyb29tIiwgKzAuMDAsCi0gICAgICAicHJlLWFtcCIsIC02LjAwLCAiZmFsbGJhY2stZ2FpbiIsICsxLjIzLCBOVUxMKTsKLSAgc2V0X3BsYXlpbmdfc3RhdGUgKGVsZW1lbnQpOwotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0KLSAgc2VuZF9lbXB0eV9idWZmZXIgKCk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCArMi4xMSwgR1NUX1RBR19UUkFDS19QRUFLLCAxLjAsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIGdzdF9ldmVudF9uZXdfdGFnICh0YWdfbGlzdCkpID09IE5VTEwpOwotICBmYWlsX3VubGVzc19nYWluIChlbGVtZW50LCAtMy44OSk7ICAgIC8qIHByZS1hbXAgKyB0cmFjayBnYWluICovCi0KLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotCi0gIGNsZWFudXBfcmd2b2x1bWUgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIElmIHRyYWNrIGdhaW4gaXMgdG8gYmUgcHJlZmVycmVkIGJ1dCBub3QgYXZhaWxhYmxlLCB0aGUgYWxidW0gZ2FpbiBpcyB0byBiZQotICogdGFrZW4gaW5zdGVhZC4gKi8KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmFsbGJhY2tfYWxidW0pCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ3ZvbHVtZSAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiYWxidW0tbW9kZSIsIEZBTFNFLCAiaGVhZHJvb20iLCArMC4wMCwKLSAgICAgICJwcmUtYW1wIiwgLTYuMDAsICJmYWxsYmFjay1nYWluIiwgKzEuMjMsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLQotICBzZW5kX2VtcHR5X2J1ZmZlciAoKTsKLQotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX0FMQlVNX0dBSU4sICszLjczLCBHU1RfVEFHX0FMQlVNX1BFQUssIDEuMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzZW5kX3RhZ19ldmVudCAoZWxlbWVudCwgZ3N0X2V2ZW50X25ld190YWcgKHRhZ19saXN0KSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2dhaW4gKGVsZW1lbnQsIC0yLjI3KTsgICAgLyogcHJlLWFtcCArIGFsYnVtIGdhaW4gKi8KLQotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgY2xlYW51cF9yZ3ZvbHVtZSAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaGVhZHJvb20pCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQgPSBzZXR1cF9yZ3ZvbHVtZSAoKTsKLSAgR3N0VGFnTGlzdCAqdGFnX2xpc3Q7Ci0KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiYWxidW0tbW9kZSIsIEZBTFNFLCAiaGVhZHJvb20iLCArMC4wMCwKLSAgICAgICJwcmUtYW1wIiwgKzAuMDAsICJmYWxsYmFjay1nYWluIiwgKzEuMjMsIE5VTEwpOwotICBzZXRfcGxheWluZ19zdGF0ZSAoZWxlbWVudCk7Ci0gIHNlbmRfc3RyZWFtX3N0YXJ0X2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9jYXBzX2V2ZW50IChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLQotICBzZW5kX2VtcHR5X2J1ZmZlciAoKTsKLQotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX1RSQUNLX0dBSU4sICszLjUwLCBHU1RfVEFHX1RSQUNLX1BFQUssIDEuMCwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzZW5kX3RhZ19ldmVudCAoZWxlbWVudCwgZ3N0X2V2ZW50X25ld190YWcgKHRhZ19saXN0KSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX3RhcmdldF9nYWluIChlbGVtZW50LCArMy41MCk7ICAgICAvKiBwcmUtYW1wICsgdHJhY2sgZ2FpbiAqLwotICBmYWlsX3VubGVzc19yZXN1bHRfZ2FpbiAoZWxlbWVudCwgKzAuMDApOwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgc2VuZF9mbHVzaF9ldmVudHMgKGVsZW1lbnQpOwotICBzZW5kX3NlZ21lbnRfZXZlbnQgKGVsZW1lbnQpOwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgImhlYWRyb29tIiwgKzIuMDAsIE5VTEwpOwotICB0YWdfbGlzdCA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCk7Ci0gIGdzdF90YWdfbGlzdF9hZGQgKHRhZ19saXN0LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsCi0gICAgICBHU1RfVEFHX1RSQUNLX0dBSU4sICs5LjE4LCBHU1RfVEFHX1RSQUNLX1BFQUssIDAuNjg3MTQ5LCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfdGFyZ2V0X2dhaW4gKGVsZW1lbnQsICs5LjE4KTsgICAgIC8qIHByZS1hbXAgKyB0cmFjayBnYWluICovCi0gIC8qIFJlc3VsdCBpcyAyMC4gKiBsb2cxMCAoMS4gLyBwZWFrKSArIGhlYWRyb29tLiAqLwotICBmYWlsX3VubGVzc19yZXN1bHRfZ2FpbiAoZWxlbWVudCwgNS4yNTg5ODE2MjM4MzAzMzM1KTsKLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotCi0gIHNlbmRfZmx1c2hfZXZlbnRzIChlbGVtZW50KTsKLSAgc2VuZF9zZWdtZW50X2V2ZW50IChlbGVtZW50KTsKLQotICBnX29iamVjdF9zZXQgKGVsZW1lbnQsICJhbGJ1bS1tb2RlIiwgVFJVRSwgTlVMTCk7Ci0gIHRhZ19saXN0ID0gZ3N0X3RhZ19saXN0X25ld19lbXB0eSAoKTsKLSAgZ3N0X3RhZ19saXN0X2FkZCAodGFnX2xpc3QsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwKLSAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgKzUuNTAsIEdTVF9UQUdfQUxCVU1fUEVBSywgMS4wLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfdGFyZ2V0X2dhaW4gKGVsZW1lbnQsICs1LjUwKTsgICAgIC8qIHByZS1hbXAgKyBhbGJ1bSBnYWluICovCi0gIGZhaWxfdW5sZXNzX3Jlc3VsdF9nYWluIChlbGVtZW50LCArMi4wMCk7ICAgICAvKiBoZWFkcm9vbSAqLwotICBzZW5kX2Vvc19ldmVudCAoZWxlbWVudCk7Ci0KLSAgY2xlYW51cF9yZ3ZvbHVtZSAoZWxlbWVudCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVmZXJlbmNlX2xldmVsKQotewotICBHc3RFbGVtZW50ICplbGVtZW50ID0gc2V0dXBfcmd2b2x1bWUgKCk7Ci0gIEdzdFRhZ0xpc3QgKnRhZ19saXN0OwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwKLSAgICAgICJhbGJ1bS1tb2RlIiwgRkFMU0UsCi0gICAgICAiaGVhZHJvb20iLCArMC4wMCwgInByZS1hbXAiLCArMC4wMCwgImZhbGxiYWNrLWdhaW4iLCArMS4yMywgTlVMTCk7Ci0gIHNldF9wbGF5aW5nX3N0YXRlIChlbGVtZW50KTsKLQotICBzZW5kX3N0cmVhbV9zdGFydF9ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfY2Fwc19ldmVudCAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0KLSAgc2VuZF9lbXB0eV9idWZmZXIgKCk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCAwLjAwLCBHU1RfVEFHX1RSQUNLX1BFQUssIDAuMiwKLSAgICAgIEdTVF9UQUdfUkVGRVJFTkNFX0xFVkVMLCA4My4sIE5VTEwpOwotICBmYWlsX3VubGVzcyAoc2VuZF90YWdfZXZlbnQgKGVsZW1lbnQsIGdzdF9ldmVudF9uZXdfdGFnICh0YWdfbGlzdCkpID09IE5VTEwpOwotICAvKiBCZWNhdXNlIG91ciBhdXRob3JhdGl2ZSByZWZlcmVuY2UgaXMgODkgZEIsIHdlIGJ1bXAgaXQgdXAgYnkgKzYgZEIuICovCi0gIGZhaWxfdW5sZXNzX2dhaW4gKGVsZW1lbnQsICs2LjAwKTsgICAgLyogcHJlLWFtcCArIHRyYWNrIGdhaW4gKi8KLSAgc2VuZF9lb3NfZXZlbnQgKGVsZW1lbnQpOwotCi0gIGdfb2JqZWN0X3NldCAoZWxlbWVudCwgImFsYnVtLW1vZGUiLCBUUlVFLCBOVUxMKTsKLQotICAvKiBTYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBhbGJ1bSBnYWluLiAqLwotICBzZW5kX2ZsdXNoX2V2ZW50cyAoZWxlbWVudCk7Ci0gIHNlbmRfc2VnbWVudF9ldmVudCAoZWxlbWVudCk7Ci0KLSAgdGFnX2xpc3QgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5ICgpOwotICBnc3RfdGFnX2xpc3RfYWRkICh0YWdfbGlzdCwgR1NUX1RBR19NRVJHRV9SRVBMQUNFLAotICAgICAgR1NUX1RBR19UUkFDS19HQUlOLCAxLjIzLCBHU1RfVEFHX1RSQUNLX1BFQUssIDAuMSwKLSAgICAgIEdTVF9UQUdfQUxCVU1fR0FJTiwgMC4wMCwgR1NUX1RBR19BTEJVTV9QRUFLLCAwLjIsCi0gICAgICBHU1RfVEFHX1JFRkVSRU5DRV9MRVZFTCwgODMuLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKHNlbmRfdGFnX2V2ZW50IChlbGVtZW50LCBnc3RfZXZlbnRfbmV3X3RhZyAodGFnX2xpc3QpKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZ2FpbiAoZWxlbWVudCwgKzYuMDApOyAgICAvKiBwcmUtYW1wICsgYWxidW0gZ2FpbiAqLwotCi0gIGNsZWFudXBfcmd2b2x1bWUgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1yZ3ZvbHVtZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJyZ3ZvbHVtZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vX2J1ZmZlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ldmVudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc2ltcGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZhbGxiYWNrX2dhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFsbGJhY2tfdHJhY2spOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmFsbGJhY2tfYWxidW0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaGVhZHJvb20pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVmZXJlbmNlX2xldmVsKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHJndm9sdW1lKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHAtcGF5bG9hZGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTlmOWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cC1wYXlsb2FkaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzk0ICswLDAgQEAKLS8qIEdTdHJlYW1lciBSVFAgcGF5bG9hZGVyIHVuaXQgdGVzdHMKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1YnNpZGFyeSgtaWVzKQotICogICAgICAgICAgICAgICBjb250YWN0OiA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2RlZmluZSBSRUxFQVNFX0VMRU1FTlQoeCkgaWYoeCkge2dzdF9vYmplY3RfdW5yZWYoeCk7IHggPSBOVUxMO30KLQotI2RlZmluZSBMT09QX0NPVU5UIDEKLQotLyoKLSAqIFJUUCBwaXBlbGluZSBzdHJ1Y3R1cmUgdG8gc3RvcmUgdGhlIHJlcXVpcmVkIGVsZW1lbnRzLgotICovCi10eXBlZGVmIHN0cnVjdAotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqYXBwc3JjOwotICBHc3RFbGVtZW50ICpydHBwYXk7Ci0gIEdzdEVsZW1lbnQgKnJ0cGRlcGF5OwotICBHc3RFbGVtZW50ICpmYWtlc2luazsKLSAgY29uc3QgZ3VpbnQ4ICpmcmFtZV9kYXRhOwotICBpbnQgZnJhbWVfZGF0YV9zaXplOwotICBpbnQgZnJhbWVfY291bnQ7Ci0gIEdzdEV2ZW50ICpjdXN0b21fZXZlbnQ7Ci19IHJ0cF9waXBlbGluZTsKLQotLyoKLSAqIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBpbiB0aGUgY2hhaW4gbGlzdCBmdW5jdGlvbiB3aGVuIHVzaW5nIGJ1ZmZlciBsaXN0cwotICovCi1zdGF0aWMgZ3VpbnQgY2hhaW5fbGlzdF9ieXRlc19yZWNlaXZlZDsKLQotLyoKLSAqIENoYWluIGxpc3QgZnVuY3Rpb24gZm9yIHRlc3RpbmcgYnVmZmVyIGxpc3RzCi0gKi8KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1ydHBfcGlwZWxpbmVfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlckxpc3QgKiBsaXN0KQotewotICBndWludCBpLCBsZW47Ci0KLSAgZmFpbF9pZiAoIWxpc3QpOwotICAvKgotICAgKiBDb3VudCB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBpbiB0aGUgYnVmZmVyIGxpc3QuCi0gICAqLwotICBsZW4gPSBnc3RfYnVmZmVyX2xpc3RfbGVuZ3RoIChsaXN0KTsKLSAgR1NUX0xPRyAoImxpc3QgbGVuZ3RoICV1IiwgbGVuKTsKLQotICAvKiBMb29wIHRocm91Z2ggYWxsIGdyb3VwcyAqLwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKnBheWJ1ZjsKLSAgICBHc3RNZW1vcnkgKm1lbTsKLSAgICBnaW50IHNpemU7Ci0KLSAgICBwYXlidWYgPSBnc3RfYnVmZmVyX2xpc3RfZ2V0IChsaXN0LCBpKTsKLSAgICAvKiBvbmx5IGNvdW50IHJlYWwgZGF0YSB3aGljaCBpcyBleHBlY3RlZCBpbiBsYXN0IG1lbW9yeSBibG9jayAqLwotICAgIEdTVF9MT0cgKCJuX21lbW9yeSAlZCIsIGdzdF9idWZmZXJfbl9tZW1vcnkgKHBheWJ1ZikpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX25fbWVtb3J5IChwYXlidWYpID4gMSk7Ci0gICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5X3JhbmdlIChwYXlidWYsIGdzdF9idWZmZXJfbl9tZW1vcnkgKHBheWJ1ZikgLSAxLAotICAgICAgICAxKTsKLSAgICBzaXplID0gZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgTlVMTCk7Ci0gICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKLSAgICBjaGFpbl9saXN0X2J5dGVzX3JlY2VpdmVkICs9IHNpemU7Ci0gICAgR1NUX0xPRyAoInNpemUgJWQsIHRvdGFsICV1Iiwgc2l6ZSwgY2hhaW5fbGlzdF9ieXRlc19yZWNlaXZlZCk7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1ydHBfcGlwZWxpbmVfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdEJ1ZmZlckxpc3QgKmxpc3Q7Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXdfc2l6ZWQgKDEpOwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBidWYpOwotICByZXR1cm4gcnRwX3BpcGVsaW5lX2NoYWluX2xpc3QgKHBhZCwgcGFyZW50LCBsaXN0KTsKLX0KLQotLyoKLSAqIFJUUCBidXMgY2FsbGJhY2suCi0gKi8KLXN0YXRpYyBnYm9vbGVhbgotcnRwX2J1c19jYWxsYmFjayAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR01haW5Mb29wICptYWlubG9vcCA9IChHTWFpbkxvb3AgKikgZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICB7Ci0gICAgICBHRXJyb3IgKmVycjsKLQotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnY2hhciAqZWxlbWVudF9uYW1lOwotCi0gICAgICBlbGVtZW50X25hbWUgPSAobWVzc2FnZS0+c3JjKSA/IGdzdF9vYmplY3RfZ2V0X25hbWUgKG1lc3NhZ2UtPnNyYykgOiBOVUxMOwotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnIsICZkZWJ1Zyk7Ci0gICAgICBnX3ByaW50ICgiXG5FcnJvciBmcm9tIGVsZW1lbnQgJXM6ICVzXG4lc1xuXG4iLAotICAgICAgICAgIEdTVF9TVFJfTlVMTCAoZWxlbWVudF9uYW1lKSwgZXJyLT5tZXNzYWdlLCAoZGVidWcpID8gZGVidWcgOiAiIik7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgIGdfZnJlZSAoZWxlbWVudF9uYW1lKTsKLQotICAgICAgZmFpbF9pZiAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRVJST1IpOwotCi0gICAgICBnX21haW5fbG9vcF9xdWl0IChtYWlubG9vcCk7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICB7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChtYWlubG9vcCk7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgewotICAgIH0KLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBDcmVhdGVzIGEgUlRQIHBpcGVsaW5lIGZvciBvbmUgdGVzdC4KLSAqIEBwYXJhbSBmcmFtZV9kYXRhIFBvaW50ZXIgdG8gdGhlIGZyYW1lIGRhdGEgd2hpY2ggaXMgdXNlZCB0byBwYXNzIHRocnUgcGF5L2RlcGF5bG9hZGVycy4KLSAqIEBwYXJhbSBmcmFtZV9kYXRhX3NpemUgRnJhbWUgZGF0YSBzaXplIGluIGJ5dGVzLgotICogQHBhcmFtIGZyYW1lX2NvdW50IEZyYW1lIGNvdW50LgotICogQHBhcmFtIGZpbHRlcmNhcHMgQ2FwcyBmaWx0ZXJzLgotICogQHBhcmFtIHBheSBQYXlsb2FkZXIgbmFtZS4KLSAqIEBwYXJhbSBkZXBheSBEZXBheWxvYWRlciBuYW1lLgotICogQHJldHVybgotICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBSVFAgcGlwZWxpbmUuCi0gKiBUaGUgdXNlciBtdXN0IGZyZWUgdGhlIFJUUCBwaXBlbGluZSB3aGVuIGl0J3Mgbm90IHVzZWQgYW55bW9yZS4KLSAqLwotc3RhdGljIHJ0cF9waXBlbGluZSAqCi1ydHBfcGlwZWxpbmVfY3JlYXRlIChjb25zdCBndWludDggKiBmcmFtZV9kYXRhLCBpbnQgZnJhbWVfZGF0YV9zaXplLAotICAgIGludCBmcmFtZV9jb3VudCwgY29uc3QgY2hhciAqZmlsdGVyY2FwcywgY29uc3QgY2hhciAqcGF5LCBjb25zdCBjaGFyICpkZXBheSkKLXsKLSAgZ2NoYXIgKnBpcGVsaW5lX25hbWU7Ci0gIHJ0cF9waXBlbGluZSAqcDsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICAvKiBDaGVjayBwYXJhbWV0ZXJzLiAqLwotICBpZiAoIWZyYW1lX2RhdGEgfHwgIXBheSB8fCAhZGVwYXkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFJUUCBwaXBlbGluZS4gKi8KLSAgcCA9IChydHBfcGlwZWxpbmUgKikgbWFsbG9jIChzaXplb2YgKHJ0cF9waXBlbGluZSkpOwotCi0gIHAtPmZyYW1lX2RhdGEgPSBmcmFtZV9kYXRhOwotICBwLT5mcmFtZV9kYXRhX3NpemUgPSBmcmFtZV9kYXRhX3NpemU7Ci0gIHAtPmZyYW1lX2NvdW50ID0gZnJhbWVfY291bnQ7Ci0gIHAtPmN1c3RvbV9ldmVudCA9IE5VTEw7Ci0KLSAgLyogQ3JlYXRlIGVsZW1lbnRzLiAqLwotICBwaXBlbGluZV9uYW1lID0gZ19zdHJkdXBfcHJpbnRmICgiJXMtJXMtcGlwZWxpbmUiLCBwYXksIGRlcGF5KTsKLSAgcC0+cGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChwaXBlbGluZV9uYW1lKTsKLSAgZ19mcmVlIChwaXBlbGluZV9uYW1lKTsKLSAgcC0+YXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXBwc3JjIiwgTlVMTCk7Ci0gIHAtPnJ0cHBheSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAocGF5LCBOVUxMKTsKLSAgcC0+cnRwZGVwYXkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKGRlcGF5LCBOVUxMKTsKLSAgcC0+ZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotCi0gIC8qIE9uZSBvciBtb3JlIGVsZW1lbnRzIGFyZSBub3QgY3JlYXRlZCBzdWNjZXNzZnVsbHkgb3IgZmFpbGVkIHRvIGNyZWF0ZSBwPyAqLwotICBpZiAoIXAtPnBpcGVsaW5lIHx8ICFwLT5hcHBzcmMgfHwgIXAtPnJ0cHBheSB8fCAhcC0+cnRwZGVwYXkgfHwgIXAtPmZha2VzaW5rKSB7Ci0gICAgLyogUmVsZWFzZSBjcmVhdGVkIGVsZW1lbnRzLiAqLwotICAgIFJFTEVBU0VfRUxFTUVOVCAocC0+cGlwZWxpbmUpOwotICAgIFJFTEVBU0VfRUxFTUVOVCAocC0+YXBwc3JjKTsKLSAgICBSRUxFQVNFX0VMRU1FTlQgKHAtPnJ0cHBheSk7Ci0gICAgUkVMRUFTRV9FTEVNRU5UIChwLT5ydHBkZXBheSk7Ci0gICAgUkVMRUFTRV9FTEVNRU5UIChwLT5mYWtlc2luayk7Ci0KLSAgICAvKiBSZWxlYXNlIGFsbG9jYXRlZCBtZW1vcnkuICovCi0gICAgZnJlZSAocCk7Ci0KLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8qIFNldCBzcmMgcHJvcGVydGllcy4gKi8KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChmaWx0ZXJjYXBzKTsKLSAgZ19vYmplY3Rfc2V0IChwLT5hcHBzcmMsICJkby10aW1lc3RhbXAiLCBUUlVFLCAiY2FwcyIsIGNhcHMsCi0gICAgICAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIEFkZCBlbGVtZW50cyB0byB0aGUgcGlwZWxpbmUuICovCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwLT5waXBlbGluZSksIHAtPmFwcHNyYyk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwLT5waXBlbGluZSksIHAtPnJ0cHBheSk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwLT5waXBlbGluZSksIHAtPnJ0cGRlcGF5KTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHAtPnBpcGVsaW5lKSwgcC0+ZmFrZXNpbmspOwotCi0gIC8qIExpbmsgZWxlbWVudHMuICovCi0gIGdzdF9lbGVtZW50X2xpbmsgKHAtPmFwcHNyYywgcC0+cnRwcGF5KTsKLSAgZ3N0X2VsZW1lbnRfbGluayAocC0+cnRwcGF5LCBwLT5ydHBkZXBheSk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHAtPnJ0cGRlcGF5LCBwLT5mYWtlc2luayk7Ci0KLSAgcmV0dXJuIHA7Ci19Ci0KLS8qCi0gKiBEZXN0cm95cyB0aGUgUlRQIHBpcGVsaW5lLgotICogQHBhcmFtIHAgUG9pbnRlciB0byB0aGUgUlRQIHBpcGVsaW5lLgotICovCi1zdGF0aWMgdm9pZAotcnRwX3BpcGVsaW5lX2Rlc3Ryb3kgKHJ0cF9waXBlbGluZSAqIHApCi17Ci0gIC8qIENoZWNrIHBhcmFtZXRlcnMuICovCi0gIGlmIChwID09IE5VTEwpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBSZWxlYXNlIHBpcGVsaW5lLiAqLwotICBSRUxFQVNFX0VMRU1FTlQgKHAtPnBpcGVsaW5lKTsKLQotICAvKiBSZWxlYXNlIGFsbG9jYXRlZCBtZW1vcnkuICovCi0gIGZyZWUgKHApOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLXBheV9ldmVudF9wcm9iZV9jYiAoR3N0UGFkICogcGFkLCBHc3RQYWRQcm9iZUluZm8gKiBpbmZvLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIHJ0cF9waXBlbGluZSAqcCA9IChydHBfcGlwZWxpbmUgKikgdXNlcl9kYXRhOwotICBHc3RFdmVudCAqZXZlbnQgPSBHU1RfUEFEX1BST0JFX0lORk9fREFUQSAoaW5mbyk7Ci0KLSAgaWYgKEdTVF9FVkVOVF9UWVBFIChldmVudCkgPT0gR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNKSB7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzMCA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChwLT5jdXN0b21fZXZlbnQpOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqczEgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICAgIGlmIChnc3Rfc3RydWN0dXJlX2lzX2VxdWFsIChzMCwgczEpKSB7Ci0gICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9EUk9QOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotfQotCi1zdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4KLWRlcGF5X2V2ZW50X3Byb2JlX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgcnRwX3BpcGVsaW5lICpwID0gKHJ0cF9waXBlbGluZSAqKSB1c2VyX2RhdGE7Ci0gIEdzdEV2ZW50ICpldmVudCA9IEdTVF9QQURfUFJPQkVfSU5GT19EQVRBIChpbmZvKTsKLQotICBpZiAoR1NUX0VWRU5UX1RZUEUgKGV2ZW50KSA9PSBHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU0pIHsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMwID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKHAtPmN1c3RvbV9ldmVudCk7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzMSA9IGdzdF9ldmVudF9nZXRfc3RydWN0dXJlIChldmVudCk7Ci0gICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaXNfZXF1YWwgKHMwLCBzMSkpIHsKLSAgICAgIGdzdF9ldmVudF91bnJlZiAocC0+Y3VzdG9tX2V2ZW50KTsKLSAgICAgIHAtPmN1c3RvbV9ldmVudCA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci19Ci0KLS8qCi0gKiBSdW5zIHRoZSBSVFAgcGlwZWxpbmUuCi0gKiBAcGFyYW0gcCBQb2ludGVyIHRvIHRoZSBSVFAgcGlwZWxpbmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1ydHBfcGlwZWxpbmVfcnVuIChydHBfcGlwZWxpbmUgKiBwKQotewotICBHc3RGbG93UmV0dXJuIGZsb3dfcmV0OwotICBHTWFpbkxvb3AgKm1haW5sb29wID0gTlVMTDsKLSAgR3N0QnVzICpidXM7Ci0gIGdpbnQgaSwgajsKLQotICAvKiBDaGVjayBwYXJhbWV0ZXJzLiAqLwotICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogQ3JlYXRlIG1haW5sb29wLiAqLwotICBtYWlubG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBpZiAoIW1haW5sb29wKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogQWRkIGJ1cyBjYWxsYmFjay4gKi8KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocC0+cGlwZWxpbmUpKTsKLQotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBydHBfYnVzX2NhbGxiYWNrLCAoZ3BvaW50ZXIpIG1haW5sb29wKTsKLQotICAvKiBTZXQgcGlwZWxpbmUgdG8gUExBWUlORy4gKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwLT5waXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIFB1c2ggY3VzdG9tIGV2ZW50IGludG8gdGhlIHBpcGVsaW5lICovCi0gIGlmIChwLT5jdXN0b21fZXZlbnQpIHsKLSAgICBHc3RQYWQgKnNyY3BhZDsKLQotICAgIC8qIEluc3RhbGwgYSBwcm9iZSB0byBkcm9wIHRoZSBldmVudCBhZnRlciBpdCBiZWluZyBzZXJpYWxpemVkICovCi0gICAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHAtPnJ0cHBheSwgInNyYyIpOwotICAgIGdzdF9wYWRfYWRkX3Byb2JlIChzcmNwYWQsIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9ET1dOU1RSRUFNLAotICAgICAgICBwYXlfZXZlbnRfcHJvYmVfY2IsIHAsIE5VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgICAvKiBJbnN0YWxsIGEgcHJvYmUgdG8gdHJhY2UgdGhlIGRlc2VyaWFsaXplZCBldmVudCBhZnRlciBkZXBheWxvYWRpbmcgKi8KLSAgICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocC0+cnRwZGVwYXksICJzcmMiKTsKLSAgICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRE9XTlNUUkVBTSwKLSAgICAgICAgZGVwYXlfZXZlbnRfcHJvYmVfY2IsIHAsIE5VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gICAgLyogU2VuZCB0aGUgZXZlbnQgKi8KLSAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChwLT5hcHBzcmMsIGdzdF9ldmVudF9yZWYgKHAtPmN1c3RvbV9ldmVudCkpOwotICB9Ci0KLSAgLyogUHVzaCBkYXRhIGludG8gdGhlIHBpcGVsaW5lICovCi0gIGZvciAoaSA9IDA7IGkgPCBMT09QX0NPVU5UOyBpKyspIHsKLSAgICBjb25zdCBndWludDggKmRhdGEgPSBwLT5mcmFtZV9kYXRhOwotCi0gICAgZm9yIChqID0gMDsgaiA8IHAtPmZyYW1lX2NvdW50OyBqKyspIHsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmOwotCi0gICAgICBidWYgPQotICAgICAgICAgIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLAotICAgICAgICAgIChndWludDggKikgZGF0YSwgcC0+ZnJhbWVfZGF0YV9zaXplLCAwLCBwLT5mcmFtZV9kYXRhX3NpemUsIE5VTEwsCi0gICAgICAgICAgTlVMTCk7Ci0KLSAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAocC0+YXBwc3JjLCAicHVzaC1idWZmZXIiLCBidWYsICZmbG93X3JldCk7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChmbG93X3JldCwgR1NUX0ZMT1dfT0spOwotICAgICAgZGF0YSArPSBwLT5mcmFtZV9kYXRhX3NpemU7Ci0KLSAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gICAgfQotICB9Ci0KLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChwLT5hcHBzcmMsICJlbmQtb2Ytc3RyZWFtIiwgJmZsb3dfcmV0KTsKLQotICAvKiBSdW4gbWFpbmxvb3AuICovCi0gIGdfbWFpbl9sb29wX3J1biAobWFpbmxvb3ApOwotCi0gIC8qIFNldCBwaXBlbGluZSB0byBOVUxMLiAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHAtPnBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgLyogUmVsZWFzZSBtYWlubG9vcC4gKi8KLSAgZ19tYWluX2xvb3BfdW5yZWYgKG1haW5sb29wKTsKLQotICBnc3RfYnVzX3JlbW92ZV93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBmYWlsX2lmIChwLT5jdXN0b21fZXZlbnQpOwotfQotCi0vKgotICogRW5hYmxlcyBidWZmZXIgbGlzdHMgYW5kIGFkZHMgYSBjaGFpbl9saXN0X2Z1bmN0aW9uIHRvIHRoZSBkZXBheWxvYWRlci4KLSAqIEBwYXJhbSBwIFBvaW50ZXIgdG8gdGhlIFJUUCBwaXBlbGluZS4KLSAqLwotc3RhdGljIHZvaWQKLXJ0cF9waXBlbGluZV9lbmFibGVfbGlzdHMgKHJ0cF9waXBlbGluZSAqIHApCi17Ci0gIEdzdFBhZCAqcGFkOwotCi0gIC8qIEFkZCBjaGFpbiBsaXN0IGZ1bmN0aW9uIGZvciB0aGUgYnVmZmVyIGxpc3QgdGVzdHMgKi8KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHAtPnJ0cGRlcGF5LCAic2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9saXN0X2Z1bmN0aW9uIChwYWQsCi0gICAgICBHU1RfREVCVUdfRlVOQ1BUUiAocnRwX3BpcGVsaW5lX2NoYWluX2xpc3QpKTsKLSAgLyogLi4gdG8gc2F0aXNmeSB0aGlzIHNpbGx5IHRlc3QgY29kZSBpbiBjYXNlIHNvbWVvbmUgZGFyZXMgcHVzaCBhIGJ1ZmZlciAqLwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGFkLCBHU1RfREVCVUdfRlVOQ1BUUiAocnRwX3BpcGVsaW5lX2NoYWluKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19Ci0KLS8qCi0gKiBDcmVhdGVzIHRoZSBSVFAgcGlwZWxpbmUgYW5kIHJ1bnMgdGhlIHRlc3QgdXNpbmcgdGhlIHBpcGVsaW5lLgotICogQHBhcmFtIGZyYW1lX2RhdGEgUG9pbnRlciB0byB0aGUgZnJhbWUgZGF0YSB3aGljaCBpcyB1c2VkIHRvIHBhc3MgdGhydSBwYXkvZGVwYXlsb2FkZXJzLgotICogQHBhcmFtIGZyYW1lX2RhdGFfc2l6ZSBGcmFtZSBkYXRhIHNpemUgaW4gYnl0ZXMuCi0gKiBAcGFyYW0gZnJhbWVfY291bnQgRnJhbWUgY291bnQuCi0gKiBAcGFyYW0gZmlsdGVyY2FwcyBDYXBzIGZpbHRlcnMuCi0gKiBAcGFyYW0gcGF5IFBheWxvYWRlciBuYW1lLgotICogQHBhcmFtIGRlcGF5IERlcGF5bG9hZGVyIG5hbWUuCi0gKiBAYnl0ZXNfc2VudCBieXRlcyB0aGF0IHdpbGwgYmUgc2VudCwgdXNlZCB3aGVuIHRlc3RpbmcgYnVmZmVyIGxpc3RzCi0gKiBAbXR1X3NpemUgc2V0IG10dSBzaXplIHdoZW4gdGVzdGluZyBsaXN0cwotICogQHVzZV9saXN0cyBlbmFibGUgYnVmZmVyIGxpc3RzCi0gKi8KLXN0YXRpYyB2b2lkCi1ydHBfcGlwZWxpbmVfdGVzdCAoY29uc3QgZ3VpbnQ4ICogZnJhbWVfZGF0YSwgaW50IGZyYW1lX2RhdGFfc2l6ZSwKLSAgICBpbnQgZnJhbWVfY291bnQsIGNvbnN0IGNoYXIgKmZpbHRlcmNhcHMsIGNvbnN0IGNoYXIgKnBheSwgY29uc3QgY2hhciAqZGVwYXksCi0gICAgZ3VpbnQgYnl0ZXNfc2VudCwgZ3VpbnQgbXR1X3NpemUsIGdib29sZWFuIHVzZV9saXN0cykKLXsKLSAgLyogQ3JlYXRlIFJUUCBwaXBlbGluZS4gKi8KLSAgcnRwX3BpcGVsaW5lICpwID0KLSAgICAgIHJ0cF9waXBlbGluZV9jcmVhdGUgKGZyYW1lX2RhdGEsIGZyYW1lX2RhdGFfc2l6ZSwgZnJhbWVfY291bnQsIGZpbHRlcmNhcHMsCi0gICAgICBwYXksIGRlcGF5KTsKLQotICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogc2V0IG10dSBzaXplIGlmIG5lZWRlZCAqLwotICBpZiAobXR1X3NpemUgPiAwKSB7Ci0gICAgZ19vYmplY3Rfc2V0IChwLT5ydHBwYXksICJtdHUiLCBtdHVfc2l6ZSwgTlVMTCk7Ci0gIH0KLQotICBpZiAodXNlX2xpc3RzKSB7Ci0gICAgcnRwX3BpcGVsaW5lX2VuYWJsZV9saXN0cyAocCk7Ci0gICAgY2hhaW5fbGlzdF9ieXRlc19yZWNlaXZlZCA9IDA7Ci0gIH0KLQotICAvKiBSdW4gUlRQIHBpcGVsaW5lLiAqLwotICBydHBfcGlwZWxpbmVfcnVuIChwKTsKLQotICAvKiBEZXN0cm95IFJUUCBwaXBlbGluZS4gKi8KLSAgcnRwX3BpcGVsaW5lX2Rlc3Ryb3kgKHApOwotCi0gIGlmICh1c2VfbGlzdHMpIHsKLSAgICAvKiAnbmV4dCBOQUwnIGluZGljYXRvciBpcyA0IGJ5dGVzICovCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoY2hhaW5fbGlzdF9ieXRlc19yZWNlaXZlZCwgYnl0ZXNfc2VudCAqIExPT1BfQ09VTlQpOwotICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBndWludDggcnRwX2lsYmNfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2lsYmNfZnJhbWVfZGF0YV9zaXplID0gMjA7Ci0KLXN0YXRpYyBpbnQgcnRwX2lsYmNfZnJhbWVfY291bnQgPSAxOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2lsYmMpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaWxiY19mcmFtZV9kYXRhLCBydHBfaWxiY19mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfaWxiY19mcmFtZV9jb3VudCwgImF1ZGlvL3gtaUxCQyxtb2RlPTIwIiwgInJ0cGlsYmNwYXkiLAotICAgICAgInJ0cGlsYmNkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfZ3NtX2ZyYW1lX2RhdGFbXSA9Ci0gICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9nc21fZnJhbWVfZGF0YV9zaXplID0gMjA7Ci0KLXN0YXRpYyBpbnQgcnRwX2dzbV9mcmFtZV9jb3VudCA9IDE7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfZ3NtKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2dzbV9mcmFtZV9kYXRhLCBydHBfZ3NtX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9nc21fZnJhbWVfY291bnQsICJhdWRpby94LWdzbSxyYXRlPTgwMDAsY2hhbm5lbHM9MSIsICJydHBnc21wYXkiLAotICAgICAgInJ0cGdzbWRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9hbXJfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4M2MsIDB4MjQsIDB4MDMsIDB4YjMsIDB4NDgsIDB4MTAsIDB4NjgsIDB4NDYsIDB4NmMsIDB4ZWMsIDB4MDMsCi0gIDB4N2EsIDB4MzcsIDB4MTYsIDB4NDEsIDB4NDEsIDB4YzAsIDB4MDAsIDB4MGQsIDB4Y2QsIDB4MTIsIDB4ZWQsCi0gIDB4YWQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MGQsIDB4YTAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2Ftcl9mcmFtZV9kYXRhX3NpemUgPSAzMjsKLQotc3RhdGljIGludCBydHBfYW1yX2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9hbXIpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfYW1yX2ZyYW1lX2RhdGEsIHJ0cF9hbXJfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2Ftcl9mcmFtZV9jb3VudCwgImF1ZGlvL0FNUixjaGFubmVscz0xLHJhdGU9ODAwMCIsICJydHBhbXJwYXkiLAotICAgICAgInJ0cGFtcmRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9wY21hX2ZyYW1lX2RhdGFbXSA9Ci0gICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9wY21hX2ZyYW1lX2RhdGFfc2l6ZSA9IDIwOwotCi1zdGF0aWMgaW50IHJ0cF9wY21hX2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9wY21hKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX3BjbWFfZnJhbWVfZGF0YSwgcnRwX3BjbWFfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX3BjbWFfZnJhbWVfY291bnQsICJhdWRpby94LWFsYXcsY2hhbm5lbHM9MSxyYXRlPTgwMDAiLCAicnRwcGNtYXBheSIsCi0gICAgICAicnRwcGNtYWRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9wY211X2ZyYW1lX2RhdGFbXSA9Ci0gICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9wY211X2ZyYW1lX2RhdGFfc2l6ZSA9IDIwOwotCi1zdGF0aWMgaW50IHJ0cF9wY211X2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9wY211KQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX3BjbXVfZnJhbWVfZGF0YSwgcnRwX3BjbXVfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX3BjbXVfZnJhbWVfY291bnQsICJhdWRpby94LW11bGF3LGNoYW5uZWxzPTEscmF0ZT04MDAwIiwgInJ0cHBjbXVwYXkiLAotICAgICAgInJ0cHBjbXVkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfbXBhX2ZyYW1lX2RhdGFbXSA9Ci0gICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9tcGFfZnJhbWVfZGF0YV9zaXplID0gMjA7Ci0KLXN0YXRpYyBpbnQgcnRwX21wYV9mcmFtZV9jb3VudCA9IDE7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfbXBhKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX21wYV9mcmFtZV9kYXRhLCBydHBfbXBhX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9tcGFfZnJhbWVfY291bnQsICJhdWRpby9tcGVnLG1wZWd2ZXJzaW9uPTEiLCAicnRwbXBhcGF5IiwKLSAgICAgICJydHBtcGFkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9oMjYxX2ZyYW1lX2RhdGFbXSA9IHsKLSAgMHgwMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwgMHgwMCwKLSAgMHgxNSwgMHgxMCwKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2gyNjFfZnJhbWVfZGF0YV9zaXplID0gMTQ7Ci1zdGF0aWMgaW50IHJ0cF9oMjYxX2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9oMjYxKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjFfZnJhbWVfZGF0YSwgcnRwX2gyNjFfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2gyNjFfZnJhbWVfY291bnQsICJ2aWRlby94LWgyNjEiLCAicnRwaDI2MXBheSIsICJydHBoMjYxZGVwYXkiLAotICAgICAgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBjb25zdCBndWludDggcnRwX2gyNjNfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2gyNjNfZnJhbWVfZGF0YV9zaXplID0gMjA7Ci0KLXN0YXRpYyBpbnQgcnRwX2gyNjNfZnJhbWVfY291bnQgPSAxOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2gyNjMpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaDI2M19mcmFtZV9kYXRhLCBydHBfaDI2M19mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfaDI2M19mcmFtZV9jb3VudCwKLSAgICAgICJ2aWRlby94LWgyNjMsdmFyaWFudD0oc3RyaW5nKWl0dSxoMjYzdmVyc2lvbj1oMjYzIiwKLSAgICAgICJydHBoMjYzcGF5IiwgInJ0cGgyNjNkZXBheSIsIDAsIDAsIEZBTFNFKTsKLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9oMjYzX2ZyYW1lX2RhdGEsIHJ0cF9oMjYzX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9oMjYzX2ZyYW1lX2NvdW50LAotICAgICAgInZpZGVvL3gtaDI2Myx2YXJpYW50PShzdHJpbmcpaXR1LGgyNjN2ZXJzaW9uPWgyNjMsd2lkdGg9MTAsaGVpZ2h0PTIwIiwKLSAgICAgICJydHBoMjYzcGF5IiwgInJ0cGgyNjNkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfaDI2M3BfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2gyNjNwX2ZyYW1lX2RhdGFfc2l6ZSA9IDIwOwotCi1zdGF0aWMgaW50IHJ0cF9oMjYzcF9mcmFtZV9jb3VudCA9IDE7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfaDI2M3ApCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaDI2M3BfZnJhbWVfZGF0YSwgcnRwX2gyNjNwX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9oMjYzcF9mcmFtZV9jb3VudCwgInZpZGVvL3gtaDI2Myx2YXJpYW50PShzdHJpbmcpaXR1LCIKLSAgICAgICJoMjYzdmVyc2lvbj0oc3RyaW5nKWgyNjMiLCAicnRwaDI2M3BwYXkiLCAicnRwaDI2M3BkZXBheSIsIDAsIDAsIEZBTFNFKTsKLQotICAvKiBwYXlsb2FkZXIgc2hvdWxkIGFjY2VwdCBhbnkgaW5wdXQgdGhhdCBtYXRjaGVzIHRoZSB0ZW1wbGF0ZSBjYXBzCi0gICAqIGlmIHRoZXJlJ3MganVzdCBhIHVkcHNpbmsgb3IgZmFrZXNpbmsgZG93bnN0cmVhbSAqLwotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjNwX2ZyYW1lX2RhdGEsIHJ0cF9oMjYzcF9mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfaDI2M3BfZnJhbWVfY291bnQsICJ2aWRlby94LWgyNjMsdmFyaWFudD0oc3RyaW5nKWl0dSwiCi0gICAgICAiaDI2M3ZlcnNpb249KHN0cmluZyloMjYzIiwgInJ0cGgyNjNwcGF5IiwgImlkZW50aXR5IiwgMCwgMCwgRkFMU0UpOwotCi0gIC8qIGRlZmF1bHQgb3V0cHV0IG9mIGF2ZW5jX2gyNjNwICovCi0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaDI2M3BfZnJhbWVfZGF0YSwgcnRwX2gyNjNwX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9oMjYzcF9mcmFtZV9jb3VudCwgInZpZGVvL3gtaDI2Myx2YXJpYW50PShzdHJpbmcpaXR1LCIKLSAgICAgICJoMjYzdmVyc2lvbj0oc3RyaW5nKWgyNjNwLCBhbm5leC1mPShib29sZWFuKXRydWUsICIKLSAgICAgICJhbm5leC1qPShib29sZWFuKXRydWUsIGFubmV4LWk9KGJvb2xlYW4pdHJ1ZSwgYW5uZXgtdD0oYm9vbGVhbil0cnVlIiwKLSAgICAgICJydHBoMjYzcHBheSIsICJpZGVudGl0eSIsIDAsIDAsIEZBTFNFKTsKLQotICAvKiBwYXkgISBkZXBheSBzaG91bGQgYWxzbyB3b3JrIHdpdGggYW55IGlucHV0ICovCi0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaDI2M3BfZnJhbWVfZGF0YSwgcnRwX2gyNjNwX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9oMjYzcF9mcmFtZV9jb3VudCwgInZpZGVvL3gtaDI2Myx2YXJpYW50PShzdHJpbmcpaXR1LCIKLSAgICAgICJoMjYzdmVyc2lvbj0oc3RyaW5nKWgyNjNwLCBhbm5leC1mPShib29sZWFuKXRydWUsICIKLSAgICAgICJhbm5leC1qPShib29sZWFuKXRydWUsIGFubmV4LWk9KGJvb2xlYW4pdHJ1ZSwgYW5uZXgtdD0oYm9vbGVhbil0cnVlIiwKLSAgICAgICJydHBoMjYzcHBheSIsICJydHBoMjYzcGRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9oMjY0X2ZyYW1lX2RhdGFbXSA9Ci0gICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9oMjY0X2ZyYW1lX2RhdGFfc2l6ZSA9IDIwOwotCi1zdGF0aWMgaW50IHJ0cF9oMjY0X2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9oMjY0KQotewotICAvKiBGSVhNRSAwLjExOiBmdWxseSBzcGVjaWZ5IGgyNjQgY2FwcyAoYW5kIG1ha2UgcGF5bG9hZGVyIGNoZWNrKSAqLwotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjRfZnJhbWVfZGF0YSwgcnRwX2gyNjRfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2gyNjRfZnJhbWVfY291bnQsCi0gICAgICAidmlkZW8veC1oMjY0LHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSxhbGlnbm1lbnQ9KHN0cmluZyluYWwiLAotICAgICAgInJ0cGgyNjRwYXkiLCAicnRwaDI2NGRlcGF5IiwgMCwgMCwgRkFMU0UpOwotCi0gIC8qIGNvbmZpZy1pbnRlcnZhbCBwcm9wZXJ0eSB1c2VkIHRvIGJlIG9mIHVpbnQgdHlwZSwgd2FzIGNoYW5nZWQgdG8gaW50LAotICAgKiBtYWtlIHN1cmUgb2xkIEdWYWx1ZSBzdHVmZiBzdGlsbCB3b3JrcyAqLwotICB7Ci0gICAgR1ZhbHVlIHZhbCA9IEdfVkFMVUVfSU5JVDsKLSAgICBHc3RFbGVtZW50ICpydHBoMjY0cGF5OwotICAgIEdQYXJhbVNwZWMgKnBzcGVjOwotCi0KLSAgICBydHBoMjY0cGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwaDI2NHBheSIsIE5VTEwpOwotICAgIHBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoR19PQkpFQ1RfR0VUX0NMQVNTIChydHBoMjY0cGF5KSwKLSAgICAgICAgImNvbmZpZy1pbnRlcnZhbCIpOwotICAgIGZhaWxfdW5sZXNzIChwc3BlYy0+dmFsdWVfdHlwZSA9PSBHX1RZUEVfSU5UKTsKLSAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VSU5UKTsKLSAgICBnX3ZhbHVlX3NldF91aW50ICgmdmFsLCAxMCk7Ci0gICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAocnRwaDI2NHBheSksICJjb25maWctaW50ZXJ2YWwiLCAmdmFsKTsKLSAgICBnX3ZhbHVlX3NldF91aW50ICgmdmFsLCAwKTsKLSAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChydHBoMjY0cGF5KSwgImNvbmZpZy1pbnRlcnZhbCIsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDEwLCBnX3ZhbHVlX2dldF91aW50ICgmdmFsKSk7Ci0gICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocnRwaDI2NHBheSksICJjb25maWctaW50ZXJ2YWwiLCAtMSwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAocnRwaDI2NHBheSksICJjb25maWctaW50ZXJ2YWwiLCAmdmFsKTsKLSAgICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfdWludCAoJnZhbCkgPT0gR19NQVhVSU5UKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChydHBoMjY0cGF5KTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9oMjY0X2xpc3RfbHRfbXR1X2ZyYW1lX2RhdGFbXSA9Ci0gICAgLyogbm90IHBhY2tldGl6ZWQsIG5leHQgTkFMIHN0YXJ0cyB3aXRoIDAwMDEgKi8KLXsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwKLSAgMHhhZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMAotfTsKLQotc3RhdGljIGludCBydHBfaDI2NF9saXN0X2x0X210dV9mcmFtZV9kYXRhX3NpemUgPSAxNjsKLQotc3RhdGljIGludCBydHBfaDI2NF9saXN0X2x0X210dV9mcmFtZV9jb3VudCA9IDI7Ci0KLS8qIE5BTCA9IDQgYnl0ZXMgKi8KLS8qIGFsc28gMiBieXRlcyBGVS1BIGhlYWRlciBlYWNoIHRpbWUgKi8KLXN0YXRpYyBpbnQgcnRwX2gyNjRfbGlzdF9sdF9tdHVfYnl0ZXNfc2VudCA9IDIgKiAoMTYgLSA0KTsKLQotc3RhdGljIGludCBydHBfaDI2NF9saXN0X2x0X210dV9tdHVfc2l6ZSA9IDEwMjQ7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfaDI2NF9saXN0X2x0X210dSkKLXsKLSAgLyogRklYTUUgMC4xMTogZnVsbHkgc3BlY2lmeSBoMjY0IGNhcHMgKGFuZCBtYWtlIHBheWxvYWRlciBjaGVjaykgKi8KLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9oMjY0X2xpc3RfbHRfbXR1X2ZyYW1lX2RhdGEsCi0gICAgICBydHBfaDI2NF9saXN0X2x0X210dV9mcmFtZV9kYXRhX3NpemUsIHJ0cF9oMjY0X2xpc3RfbHRfbXR1X2ZyYW1lX2NvdW50LAotICAgICAgInZpZGVvL3gtaDI2NCxzdHJlYW0tZm9ybWF0PShzdHJpbmcpYnl0ZS1zdHJlYW0sYWxpZ25tZW50PShzdHJpbmcpbmFsIiwKLSAgICAgICJydHBoMjY0cGF5IiwgInJ0cGgyNjRkZXBheSIsCi0gICAgICBydHBfaDI2NF9saXN0X2x0X210dV9ieXRlc19zZW50LCBydHBfaDI2NF9saXN0X2x0X210dV9tdHVfc2l6ZSwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX2gyNjRfbGlzdF9sdF9tdHVfZnJhbWVfZGF0YV9hdmNbXSA9Ci0gICAgLyogcGFja2V0aXplZCBkYXRhICovCi17IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsCi0gIDB4YWQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGQsIDB4MDAKLX07Ci0KLS8qIE5BTCA9IDQgYnl0ZXMgKi8KLXN0YXRpYyBpbnQgcnRwX2gyNjRfbGlzdF9sdF9tdHVfYnl0ZXNfc2VudF9hdmMgPSAyICogKDE2IC0gMiAqIDQpOwotCi0vL3N0YXRpYyBpbnQgcnRwX2gyNjRfbGlzdF9sdF9tdHVfbXR1X3NpemUgPSAxMDI0OwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2gyNjRfbGlzdF9sdF9tdHVfYXZjKQotewotICAvKiBGSVhNRSAwLjExOiBmdWxseSBzcGVjaWZ5IGgyNjQgY2FwcyAoYW5kIG1ha2UgcGF5bG9hZGVyIGNoZWNrKSAqLwotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjRfbGlzdF9sdF9tdHVfZnJhbWVfZGF0YV9hdmMsCi0gICAgICBydHBfaDI2NF9saXN0X2x0X210dV9mcmFtZV9kYXRhX3NpemUsIHJ0cF9oMjY0X2xpc3RfbHRfbXR1X2ZyYW1lX2NvdW50LAotICAgICAgInZpZGVvL3gtaDI2NCxzdHJlYW0tZm9ybWF0PShzdHJpbmcpYXZjLGFsaWdubWVudD0oc3RyaW5nKWF1LCIKLSAgICAgICJjb2RlY19kYXRhPShidWZmZXIpMDE2NDAwMTRmZmUxMDAxODY3NjQwMDE0YWNkOTQxNDFmYjAxMTAwMDAwMDMwMDE3NzM1OTQwMDBmMTQyOTk2MDAxMDAwNTY4ZWJlY2IyMmMiLAotICAgICAgInJ0cGgyNjRwYXkiLCAicnRwaDI2NGRlcGF5IiwKLSAgICAgIHJ0cF9oMjY0X2xpc3RfbHRfbXR1X2J5dGVzX3NlbnRfYXZjLCBydHBfaDI2NF9saXN0X2x0X210dV9tdHVfc2l6ZSwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX2gyNjRfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YVtdID0KLSAgICAvKiBub3QgcGFja2V0aXplZCwgbmV4dCBOQUwgc3RhcnRzIHdpdGggMDAwMSAqLwoteyAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2ZyYW1lX2RhdGFfc2l6ZSA9IDY0OwotCi1zdGF0aWMgaW50IHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2ZyYW1lX2NvdW50ID0gMTsKLQotLyogTkFMID0gNCBieXRlcy4gV2hlbiBkYXRhIGRvZXMgbm90IGZpdCBpbnRvIDEgbXR1LCAxIGJ5dGUgd2lsbCBiZSBza2lwcGVkICovCi1zdGF0aWMgaW50IHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2J5dGVzX3NlbnQgPSAxICogKDY0IC0gNCkgLSAxOwotCi1zdGF0aWMgaW50IHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X210eV9zaXplID0gMjg7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfaDI2NF9saXN0X2d0X210dSkKLXsKLSAgLyogRklYTUUgMC4xMTogZnVsbHkgc3BlY2lmeSBoMjY0IGNhcHMgKGFuZCBtYWtlIHBheWxvYWRlciBjaGVjaykgKi8KLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2ZyYW1lX2RhdGEsCi0gICAgICBydHBfaDI2NF9saXN0X2d0X210dV9mcmFtZV9kYXRhX3NpemUsIHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2ZyYW1lX2NvdW50LAotICAgICAgInZpZGVvL3gtaDI2NCxzdHJlYW0tZm9ybWF0PShzdHJpbmcpYnl0ZS1zdHJlYW0sYWxpZ25tZW50PShzdHJpbmcpbmFsIiwKLSAgICAgICJydHBoMjY0cGF5IiwgInJ0cGgyNjRkZXBheSIsCi0gICAgICBydHBfaDI2NF9saXN0X2d0X210dV9ieXRlc19zZW50LCBydHBfaDI2NF9saXN0X2d0X210dV9tdHlfc2l6ZSwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX2gyNjRfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YV9hdmNbXSA9Ci0gICAgLyogcGFja2V0aXplZCBkYXRhICovCi17IDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLS8qIE5BTCA9IDQgYnl0ZXMuIFdoZW4gZGF0YSBkb2VzIG5vdCBmaXQgaW50byAxIG10dSwgMSBieXRlIHdpbGwgYmUgc2tpcHBlZCAqLwotc3RhdGljIGludCBydHBfaDI2NF9saXN0X2d0X210dV9ieXRlc19zZW50X2F2YyA9IDEgKiAoNjQgLSAyICogNCAtIDIgKiAxKTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2F2YykKLXsKLSAgLyogRklYTUUgMC4xMTogZnVsbHkgc3BlY2lmeSBoMjY0IGNhcHMgKGFuZCBtYWtlIHBheWxvYWRlciBjaGVjaykgKi8KLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9oMjY0X2xpc3RfZ3RfbXR1X2ZyYW1lX2RhdGFfYXZjLAotICAgICAgcnRwX2gyNjRfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YV9zaXplLCBydHBfaDI2NF9saXN0X2d0X210dV9mcmFtZV9jb3VudCwKLSAgICAgICJ2aWRlby94LWgyNjQsc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YyxhbGlnbm1lbnQ9KHN0cmluZylhdSwiCi0gICAgICAiY29kZWNfZGF0YT0oYnVmZmVyKTAxNjQwMDE0ZmZlMTAwMTg2NzY0MDAxNGFjZDk0MTQxZmIwMTEwMDAwMDAzMDAxNzczNTk0MDAwZjE0Mjk5NjAwMTAwMDU2OGViZWNiMjJjIiwKLSAgICAgICJydHBoMjY0cGF5IiwgInJ0cGgyNjRkZXBheSIsCi0gICAgICBydHBfaDI2NF9saXN0X2d0X210dV9ieXRlc19zZW50X2F2YywgcnRwX2gyNjRfbGlzdF9ndF9tdHVfbXR5X3NpemUsIFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBjb25zdCBndWludDggcnRwX2gyNjVfZnJhbWVfZGF0YVtdID0gewotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9oMjY1X2ZyYW1lX2RhdGFfc2l6ZSA9IDIwOwotCi1zdGF0aWMgaW50IHJ0cF9oMjY1X2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9oMjY1KQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjVfZnJhbWVfZGF0YSwgcnRwX2gyNjVfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2gyNjVfZnJhbWVfY291bnQsCi0gICAgICAidmlkZW8veC1oMjY1LHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSxhbGlnbm1lbnQ9KHN0cmluZyluYWwiLAotICAgICAgInJ0cGgyNjVwYXkiLCAicnRwaDI2NWRlcGF5IiwgMCwgMCwgRkFMU0UpOwotCi0gIC8qIGNvbmZpZy1pbnRlcnZhbCBwcm9wZXJ0eSB1c2VkIHRvIGJlIG9mIHVpbnQgdHlwZSwgd2FzIGNoYW5nZWQgdG8gaW50LAotICAgKiBtYWtlIHN1cmUgb2xkIEdWYWx1ZSBzdHVmZiBzdGlsbCB3b3JrcyAqLwotICB7Ci0gICAgR1ZhbHVlIHZhbCA9IEdfVkFMVUVfSU5JVDsKLSAgICBHc3RFbGVtZW50ICpydHBoMjY1cGF5OwotICAgIEdQYXJhbVNwZWMgKnBzcGVjOwotCi0KLSAgICBydHBoMjY1cGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwaDI2NXBheSIsIE5VTEwpOwotICAgIHBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eSAoR19PQkpFQ1RfR0VUX0NMQVNTIChydHBoMjY1cGF5KSwKLSAgICAgICAgImNvbmZpZy1pbnRlcnZhbCIpOwotICAgIGZhaWxfdW5sZXNzIChwc3BlYy0+dmFsdWVfdHlwZSA9PSBHX1RZUEVfSU5UKTsKLSAgICBnX3ZhbHVlX2luaXQgKCZ2YWwsIEdfVFlQRV9VSU5UKTsKLSAgICBnX3ZhbHVlX3NldF91aW50ICgmdmFsLCAxMCk7Ci0gICAgZ19vYmplY3Rfc2V0X3Byb3BlcnR5IChHX09CSkVDVCAocnRwaDI2NXBheSksICJjb25maWctaW50ZXJ2YWwiLCAmdmFsKTsKLSAgICBnX3ZhbHVlX3NldF91aW50ICgmdmFsLCAwKTsKLSAgICBnX29iamVjdF9nZXRfcHJvcGVydHkgKEdfT0JKRUNUIChydHBoMjY1cGF5KSwgImNvbmZpZy1pbnRlcnZhbCIsICZ2YWwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDEwLCBnX3ZhbHVlX2dldF91aW50ICgmdmFsKSk7Ci0gICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAocnRwaDI2NXBheSksICJjb25maWctaW50ZXJ2YWwiLCAtMSwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0X3Byb3BlcnR5IChHX09CSkVDVCAocnRwaDI2NXBheSksICJjb25maWctaW50ZXJ2YWwiLCAmdmFsKTsKLSAgICBmYWlsX3VubGVzcyAoZ192YWx1ZV9nZXRfdWludCAoJnZhbCkgPT0gR19NQVhVSU5UKTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmdmFsKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChydHBoMjY1cGF5KTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2ZyYW1lX2RhdGFbXSA9IHsKLSAgLyogbm90IHBhY2tldGl6ZWQsIG5leHQgTkFMVSBzdGFydHMgd2l0aCAweDAwMDAwMDAxICovCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2gyNjVfbGlzdF9sdF9tdHVfZnJhbWVfZGF0YV9zaXplID0gMTY7Ci0KLXN0YXRpYyBpbnQgcnRwX2gyNjVfbGlzdF9sdF9tdHVfZnJhbWVfY291bnQgPSAyOwotCi0vKiAzIGJ5dGVzIHN0YXJ0IGNvZGUgcHJlZml4ZWQgd2l0aCBvbmUgemVybyBieXRlLCBOQUxVIGhlYWRlciBpcyBpbiBwYXlsb2FkICovCi1zdGF0aWMgaW50IHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2J5dGVzX3NlbnQgPSAyICogKDE2IC0gMyAtIDEpOwotCi1zdGF0aWMgaW50IHJ0cF9oMjY1X2xpc3RfbHRfbXR1X210dV9zaXplID0gMTAyNDsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9oMjY1X2xpc3RfbHRfbXR1KQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjVfbGlzdF9sdF9tdHVfZnJhbWVfZGF0YSwKLSAgICAgIHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2ZyYW1lX2RhdGFfc2l6ZSwgcnRwX2gyNjVfbGlzdF9sdF9tdHVfZnJhbWVfY291bnQsCi0gICAgICAidmlkZW8veC1oMjY1LHN0cmVhbS1mb3JtYXQ9KHN0cmluZylieXRlLXN0cmVhbSxhbGlnbm1lbnQ9KHN0cmluZyluYWwiLAotICAgICAgInJ0cGgyNjVwYXkiLCAicnRwaDI2NWRlcGF5IiwgcnRwX2gyNjVfbGlzdF9sdF9tdHVfYnl0ZXNfc2VudCwKLSAgICAgIHJ0cF9oMjY1X2xpc3RfbHRfbXR1X210dV9zaXplLCBUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfaDI2NV9saXN0X2x0X210dV9mcmFtZV9kYXRhX2h2YzFbXSA9IHsKLSAgLyogcGFja2V0aXplZCBkYXRhICovCi0gIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi19OwotCi0vKiBsZW5ndGggc2l6ZSBpcyAzIGJ5dGVzICovCi1zdGF0aWMgaW50IHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2J5dGVzX3NlbnRfaHZjMSA9IDIgKiAoMTYgLSAyICogMyk7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2h2YzEpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaDI2NV9saXN0X2x0X210dV9mcmFtZV9kYXRhX2h2YzEsCi0gICAgICBydHBfaDI2NV9saXN0X2x0X210dV9mcmFtZV9kYXRhX3NpemUsIHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2ZyYW1lX2NvdW50LAotICAgICAgInZpZGVvL3gtaDI2NSxzdHJlYW0tZm9ybWF0PShzdHJpbmcpaHZjMSxhbGlnbm1lbnQ9KHN0cmluZylhdSwiCi0gICAgICAiY29kZWNfZGF0YT0oYnVmZmVyKTAxMDFjMDAwMDAwMDgwMDAwMDAwMDAwMDk5ZjAwMGZjZmRmOGY4MDAwMDAyMDNhMDAwMDEwIgotICAgICAgIjAxODQwMDEwYzAxZmZmZjAxYzAwMDAwMDMwMDgwMDAwMDAzMDAwMDAzMDA5OWFjMDkwMGExMDAwMTAwMzA0MjAxMDEwMWMwMCIKLSAgICAgICIwMDAwMzAwODAwMDAwMDMwMDAwMDMwMDk5YTAwYTA4MGYxZmUzNmJiYjUzNzc3MjVkNjAyZGMwNDA0MDQxMDAwMDAzMDAwMTAiCi0gICAgICAiMDAwMDMwMDBhMDgwMGEyMDAwMTAwMDc0NDAxYzE3MmIwMjI0MCIsCi0gICAgICAicnRwaDI2NXBheSIsICJydHBoMjY1ZGVwYXkiLCBydHBfaDI2NV9saXN0X2x0X210dV9ieXRlc19zZW50X2h2YzEsCi0gICAgICBydHBfaDI2NV9saXN0X2x0X210dV9tdHVfc2l6ZSwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX2gyNjVfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YVtdID0gewotICAvKiBub3QgcGFja2V0aXplZCwgbmV4dCBOQUwgc3RhcnRzIHdpdGggMHgwMDAwMDEgKi8KLSAgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgxMAotfTsKLQotc3RhdGljIGNvbnN0IGludCBydHBfaDI2NV9saXN0X2d0X210dV9mcmFtZV9kYXRhX3NpemUgPSA2MjsKLQotc3RhdGljIGNvbnN0IGludCBydHBfaDI2NV9saXN0X2d0X210dV9mcmFtZV9jb3VudCA9IDE7Ci0KLS8qIHN0YXJ0IGNvZGUgaXMgMyBieXRlcywgTkFMVSBoZWFkZXIgaXMgMiBieXRlcyAqLwotc3RhdGljIGludCBydHBfaDI2NV9saXN0X2d0X210dV9ieXRlc19zZW50ID0gMSAqICg2MiAtIDMgLSAyKTsKLQotc3RhdGljIGludCBydHBfaDI2NV9saXN0X2d0X210dV9tdHVfc2l6ZSA9IDI4OwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2gyNjVfbGlzdF9ndF9tdHUpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfaDI2NV9saXN0X2d0X210dV9mcmFtZV9kYXRhLAotICAgICAgcnRwX2gyNjVfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YV9zaXplLCBydHBfaDI2NV9saXN0X2d0X210dV9mcmFtZV9jb3VudCwKLSAgICAgICJ2aWRlby94LWgyNjUsc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWJ5dGUtc3RyZWFtLGFsaWdubWVudD0oc3RyaW5nKW5hbCIsCi0gICAgICAicnRwaDI2NXBheSIsICJydHBoMjY1ZGVwYXkiLCBydHBfaDI2NV9saXN0X2d0X210dV9ieXRlc19zZW50LAotICAgICAgcnRwX2gyNjVfbGlzdF9ndF9tdHVfbXR1X3NpemUsIFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9oMjY1X2xpc3RfZ3RfbXR1X2ZyYW1lX2RhdGFfaHZjMVtdID0gewotICAvKiBwYWNrZXRpemVkIGRhdGEgKi8KLSAgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotLyogbGVuZ3RoIHNpemUgaXMgMyBieXRlcywgTkFMVSBoZWFkZXIgaXMgMiBieXRlcyAqLwotc3RhdGljIGludCBydHBfaDI2NV9saXN0X2d0X210dV9ieXRlc19zZW50X2h2YzEgPSAxICogKDYyIC0gMiAqIDMgLSAyICogMik7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfaDI2NV9saXN0X2d0X210dV9odmMxKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2gyNjVfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YV9odmMxLAotICAgICAgcnRwX2gyNjVfbGlzdF9ndF9tdHVfZnJhbWVfZGF0YV9zaXplLCBydHBfaDI2NV9saXN0X2d0X210dV9mcmFtZV9jb3VudCwKLSAgICAgICJ2aWRlby94LWgyNjUsc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWh2YzEsYWxpZ25tZW50PShzdHJpbmcpYXUsIgotICAgICAgImNvZGVjX2RhdGE9KGJ1ZmZlcikwMTAxYzAwMDAwMDA4MDAwMDAwMDAwMDA5OWYwMDBmY2ZkZjhmODAwMDAwMjAzYTAwMDAxMCIKLSAgICAgICIwMTg0MDAxMGMwMWZmZmYwMWMwMDAwMDAzMDA4MDAwMDAwMzAwMDAwMzAwOTlhYzA5MDBhMTAwMDEwMDMwNDIwMTAxMDFjMDAiCi0gICAgICAiMDAwMDMwMDgwMDAwMDAzMDAwMDAzMDA5OWEwMGEwODBmMWZlMzZiYmI1Mzc3NzI1ZDYwMmRjMDQwNDA0MTAwMDAwMzAwMDEwIgotICAgICAgIjAwMDAzMDAwYTA4MDBhMjAwMDEwMDA3NDQwMWMxNzJiMDIyNDAiLAotICAgICAgInJ0cGgyNjVwYXkiLCAicnRwaDI2NWRlcGF5IiwgcnRwX2gyNjVfbGlzdF9ndF9tdHVfYnl0ZXNfc2VudF9odmMxLAotICAgICAgcnRwX2gyNjVfbGlzdF9ndF9tdHVfbXR1X3NpemUsIFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEtMViBkYXRhIGZyb20gRGF5X0ZsaWdodC5tcGcgKi8KLXN0YXRpYyBjb25zdCBndWludDggcnRwX0tMVl9mcmFtZV9kYXRhW10gPSB7Ci0gIDB4MDYsIDB4MGUsIDB4MmIsIDB4MzQsIDB4MDIsIDB4MGIsIDB4MDEsIDB4MDEsCi0gIDB4MGUsIDB4MDEsIDB4MDMsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4ODEsIDB4OTEsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDQsIDB4NmMsIDB4OGUsCi0gIDB4MjAsIDB4MDMsIDB4ODMsIDB4ODUsIDB4NDEsIDB4MDEsIDB4MDEsIDB4MDUsCi0gIDB4MDIsIDB4M2QsIDB4M2IsIDB4MDYsIDB4MDIsIDB4MTUsIDB4ODAsIDB4MDcsCi0gIDB4MDIsIDB4MDEsIDB4NTIsIDB4MGIsIDB4MDMsIDB4NDUsIDB4NGYsIDB4NGUsCi0gIDB4MGMsIDB4MGUsIDB4NDcsIDB4NjUsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NzQsCi0gIDB4NjksIDB4NjMsIDB4MjAsIDB4NTcsIDB4NDcsIDB4NTMsIDB4MzgsIDB4MzQsCi0gIDB4MGQsIDB4MDQsIDB4NGQsIDB4YzQsIDB4ZGMsIDB4YmIsIDB4MGUsIDB4MDQsCi0gIDB4YjEsIDB4YTgsIDB4NmMsIDB4ZmUsIDB4MGYsIDB4MDIsIDB4MWYsIDB4NGEsCi0gIDB4MTAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4MTEsIDB4MDIsIDB4MDAsIDB4NGIsCi0gIDB4MTIsIDB4MDQsIDB4MjAsIDB4YzgsIDB4ZDIsIDB4N2QsIDB4MTMsIDB4MDQsCi0gIDB4ZmMsIDB4ZGQsIDB4MDIsIDB4ZDgsIDB4MTQsIDB4MDQsIDB4ZmUsIDB4YjgsCi0gIDB4Y2IsIDB4NjEsIDB4MTUsIDB4MDQsIDB4MDAsIDB4OGYsIDB4M2UsIDB4NjEsCi0gIDB4MTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4YzksIDB4MTcsIDB4MDQsCi0gIDB4NGQsIDB4ZGQsIDB4OGMsIDB4MmEsIDB4MTgsIDB4MDQsIDB4YjEsIDB4YmUsCi0gIDB4OWUsIDB4ZjQsIDB4MTksIDB4MDIsIDB4MGIsIDB4ODUsIDB4MjgsIDB4MDQsCi0gIDB4NGQsIDB4ZGQsIDB4OGMsIDB4MmEsIDB4MjksIDB4MDQsIDB4YjEsIDB4YmUsCi0gIDB4OWUsIDB4ZjQsIDB4MmEsIDB4MDIsIDB4MGIsIDB4ODUsIDB4MzgsIDB4MDEsCi0gIDB4MmUsIDB4MzksIDB4MDQsIDB4MDAsIDB4OGQsIDB4ZDQsIDB4MjksIDB4MDEsCi0gIDB4MDIsIDB4MWMsIDB4NWYKLX07Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfa2x2KQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX0tMVl9mcmFtZV9kYXRhLCBHX05fRUxFTUVOVFMgKHJ0cF9LTFZfZnJhbWVfZGF0YSksIDEsCi0gICAgICAibWV0YS94LWtsdiwgcGFyc2VkPShib29sKXRydWUiLCAicnRwa2x2cGF5IiwgInJ0cGtsdmRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfa2x2X2ZyYWdtZW50ZWQpCi17Ci0gIC8qIGZvcmNlIHN1cGVyLXNtYWxsIG10dSBvZiA2MCB0byBmcmFnbWVudCBLTFYgdW5pdCAqLwotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX0tMVl9mcmFtZV9kYXRhLCBzaXplb2YgKHJ0cF9LTFZfZnJhbWVfZGF0YSksIDEsCi0gICAgICAibWV0YS94LWtsdiwgcGFyc2VkPShib29sKXRydWUiLCAicnRwa2x2cGF5IiwgInJ0cGtsdmRlcGF5IiwKLSAgICAgIHNpemVvZiAocnRwX0tMVl9mcmFtZV9kYXRhKSwgNjAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9MMTZfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX0wxNl9mcmFtZV9kYXRhX3NpemUgPSAyMDsKLQotc3RhdGljIGludCBydHBfTDE2X2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9MMTYpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfTDE2X2ZyYW1lX2RhdGEsIHJ0cF9MMTZfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX0wxNl9mcmFtZV9jb3VudCwKLSAgICAgICJhdWRpby94LXJhdyxmb3JtYXQ9UzE2QkUscmF0ZT0xLGNoYW5uZWxzPTEsbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQiLAotICAgICAgInJ0cEwxNnBheSIsICJydHBMMTZkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF9MMjRfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX0wyNF9mcmFtZV9kYXRhX3NpemUgPSAyNDsKLQotc3RhdGljIGludCBydHBfTDI0X2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9MMjQpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfTDI0X2ZyYW1lX2RhdGEsIHJ0cF9MMjRfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX0wyNF9mcmFtZV9jb3VudCwKLSAgICAgICJhdWRpby94LXJhdyxmb3JtYXQ9UzI0QkUscmF0ZT0xLGNoYW5uZWxzPTEsbGF5b3V0PShzdHJpbmcpaW50ZXJsZWF2ZWQiLAotICAgICAgInJ0cEwyNHBheSIsICJydHBMMjRkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfbXAydF9mcmFtZV9kYXRhW10gPQotICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGludCBydHBfbXAydF9mcmFtZV9kYXRhX3NpemUgPSAyMDsKLQotc3RhdGljIGludCBydHBfbXAydF9mcmFtZV9jb3VudCA9IDE7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfbXAydCkKLXsKLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9tcDJ0X2ZyYW1lX2RhdGEsIHJ0cF9tcDJ0X2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9tcDJ0X2ZyYW1lX2NvdW50LCAidmlkZW8vbXBlZ3RzLHBhY2tldHNpemU9MTg4LHN5c3RlbXN0cmVhbT10cnVlIiwKLSAgICAgICJydHBtcDJ0cGF5IiwgInJ0cG1wMnRkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfbXA0dl9mcmFtZV9kYXRhW10gPQotICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGludCBydHBfbXA0dl9mcmFtZV9kYXRhX3NpemUgPSAyMDsKLQotc3RhdGljIGludCBydHBfbXA0dl9mcmFtZV9jb3VudCA9IDE7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfbXA0dikKLXsKLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9tcDR2X2ZyYW1lX2RhdGEsIHJ0cF9tcDR2X2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9tcDR2X2ZyYW1lX2NvdW50LCAidmlkZW8vbXBlZyxtcGVndmVyc2lvbj00LHN5c3RlbXN0cmVhbT1mYWxzZSIsCi0gICAgICAicnRwbXA0dnBheSIsICJydHBtcDR2ZGVwYXkiLCAwLCAwLCBGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX21wNHZfbGlzdF9mcmFtZV9kYXRhW10gPQotICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGludCBydHBfbXA0dl9saXN0X2ZyYW1lX2RhdGFfc2l6ZSA9IDIwOwotCi1zdGF0aWMgaW50IHJ0cF9tcDR2X2xpc3RfZnJhbWVfY291bnQgPSAxOwotCi1zdGF0aWMgaW50IHJ0cF9tcDR2X2xpc3RfYnl0ZXNfc2VudCA9IDEgKiAyMDsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9tcDR2X2xpc3QpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfbXA0dl9saXN0X2ZyYW1lX2RhdGEsIHJ0cF9tcDR2X2xpc3RfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX21wNHZfbGlzdF9mcmFtZV9jb3VudCwKLSAgICAgICJ2aWRlby9tcGVnLG1wZWd2ZXJzaW9uPTQsc3lzdGVtc3RyZWFtPWZhbHNlLGNvZGVjX2RhdGE9KGJ1ZmZlcikwMDAwMDFiMDAxIiwKLSAgICAgICJydHBtcDR2cGF5IiwgInJ0cG1wNHZkZXBheSIsIHJ0cF9tcDR2X2xpc3RfYnl0ZXNfc2VudCwgMCwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX21wNGdfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX21wNGdfZnJhbWVfZGF0YV9zaXplID0gMjA7Ci0KLXN0YXRpYyBpbnQgcnRwX21wNGdfZnJhbWVfY291bnQgPSAxOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX21wNGcpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfbXA0Z19mcmFtZV9kYXRhLCBydHBfbXA0Z19mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfbXA0Z19mcmFtZV9jb3VudCwKLSAgICAgICJ2aWRlby9tcGVnLG1wZWd2ZXJzaW9uPTQsc3lzdGVtc3RyZWFtPWZhbHNlLGNvZGVjX2RhdGE9KGJ1ZmZlcikwMDAwMDFiMDAxIiwKLSAgICAgICJydHBtcDRncGF5IiwgInJ0cG1wNGdkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfdGhlb3JhX2ZyYW1lX2RhdGFbXSA9Ci0gICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF90aGVvcmFfZnJhbWVfZGF0YV9zaXplID0gMjA7Ci0KLXN0YXRpYyBpbnQgcnRwX3RoZW9yYV9mcmFtZV9jb3VudCA9IDE7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfdGhlb3JhKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX3RoZW9yYV9mcmFtZV9kYXRhLCBydHBfdGhlb3JhX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF90aGVvcmFfZnJhbWVfY291bnQsICJ2aWRlby94LXRoZW9yYSIsICJydHB0aGVvcmFwYXkiLAotICAgICAgInJ0cHRoZW9yYWRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci1zdGF0aWMgY29uc3QgZ3VpbnQ4IHJ0cF92b3JiaXNfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX3ZvcmJpc19mcmFtZV9kYXRhX3NpemUgPSAyMDsKLQotc3RhdGljIGludCBydHBfdm9yYmlzX2ZyYW1lX2NvdW50ID0gMTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF92b3JiaXMpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfdm9yYmlzX2ZyYW1lX2RhdGEsIHJ0cF92b3JiaXNfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX3ZvcmJpc19mcmFtZV9jb3VudCwgImF1ZGlvL3gtdm9yYmlzIiwgInJ0cHZvcmJpc3BheSIsCi0gICAgICAicnRwdm9yYmlzZGVwYXkiLCAwLCAwLCBGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLXN0YXRpYyBjb25zdCBndWludDggcnRwX2pwZWdfZnJhbWVfZGF0YVtdID0KLSAgICB7IC8qIFNPRiAqLyAweEZGLCAweEMwLCAweDAwLCAweDExLCAweDA4LCAweDAwLCAweDA4LCAweDAwLCAweDA4LAotICAweDAzLCAweDAwLCAweDIxLCAweDA4LCAweDAxLCAweDExLCAweDA4LCAweDAyLCAweDExLCAweDA4LAotICAvKiBEUVQgKi8gMHhGRiwgMHhEQiwgMHgwMCwgMHg0MywgMHgwOCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgLyogREFUQSAqLyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHJ0cF9qcGVnX2ZyYW1lX2RhdGFfc2l6ZSA9IHNpemVvZiAocnRwX2pwZWdfZnJhbWVfZGF0YSk7Ci0KLXN0YXRpYyBpbnQgcnRwX2pwZWdfZnJhbWVfY291bnQgPSAxOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2pwZWcpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfanBlZ19mcmFtZV9kYXRhLCBydHBfanBlZ19mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfanBlZ19mcmFtZV9jb3VudCwgInZpZGVvL3gtanBlZyxoZWlnaHQ9NjQwLHdpZHRoPTQ4MCIsICJydHBqcGVncGF5IiwKLSAgICAgICJydHBqcGVnZGVwYXkiLCAwLCAwLCBGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9qcGVnX3dpZHRoX2dyZWF0ZXJfdGhhbl8yMDQwKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2pwZWdfZnJhbWVfZGF0YSwgcnRwX2pwZWdfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2pwZWdfZnJhbWVfY291bnQsICJ2aWRlby94LWpwZWcsaGVpZ2h0PTIwNDgsd2lkdGg9NDgwIiwgInJ0cGpwZWdwYXkiLAotICAgICAgInJ0cGpwZWdkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2pwZWdfaGVpZ2h0X2dyZWF0ZXJfdGhhbl8yMDQwKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2pwZWdfZnJhbWVfZGF0YSwgcnRwX2pwZWdfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2pwZWdfZnJhbWVfY291bnQsICJ2aWRlby94LWpwZWcsaGVpZ2h0PTY0MCx3aWR0aD0yMDQ4IiwgInJ0cGpwZWdwYXkiLAotICAgICAgInJ0cGpwZWdkZXBheSIsIDAsIDAsIEZBTFNFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2pwZWdfd2lkdGhfYW5kX2hlaWdodF9ncmVhdGVyX3RoYW5fMjA0MCkKLXsKLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9qcGVnX2ZyYW1lX2RhdGEsIHJ0cF9qcGVnX2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9qcGVnX2ZyYW1lX2NvdW50LCAidmlkZW8veC1qcGVnLGhlaWdodD0yMDQ4LHdpZHRoPTIwNDgiLCAicnRwanBlZ3BheSIsCi0gICAgICAicnRwanBlZ2RlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBjb25zdCBndWludDggcnRwX2pwZWdfbGlzdF9mcmFtZV9kYXRhW10gPQotICAgIHsgLyogU09GICovIDB4RkYsIDB4QzAsIDB4MDAsIDB4MTEsIDB4MDgsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDgsCi0gIDB4MDMsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MDEsIDB4MTEsIDB4MDgsIDB4MDIsIDB4MTEsIDB4MDgsCi0gIC8qIERRVCAqLyAweEZGLCAweERCLCAweDAwLCAweDQzLCAweDA4LAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAvKiBEQVRBICovIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2pwZWdfbGlzdF9mcmFtZV9kYXRhX3NpemUgPSBzaXplb2YgKHJ0cF9qcGVnX2xpc3RfZnJhbWVfZGF0YSk7Ci0KLXN0YXRpYyBpbnQgcnRwX2pwZWdfbGlzdF9mcmFtZV9jb3VudCA9IDE7Ci0KLXN0YXRpYyBpbnQgcnRwX2pwZWdfbGlzdF9ieXRlc19zZW50ID0gMSAqIHNpemVvZiAocnRwX2pwZWdfbGlzdF9mcmFtZV9kYXRhKTsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9qcGVnX2xpc3QpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfanBlZ19saXN0X2ZyYW1lX2RhdGEsIHJ0cF9qcGVnX2xpc3RfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2pwZWdfbGlzdF9mcmFtZV9jb3VudCwgInZpZGVvL3gtanBlZyxoZWlnaHQ9NjQwLHdpZHRoPTQ4MCIsCi0gICAgICAicnRwanBlZ3BheSIsICJydHBqcGVnZGVwYXkiLCBydHBfanBlZ19saXN0X2J5dGVzX3NlbnQsIDAsIFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfanBlZ19saXN0X3dpZHRoX2dyZWF0ZXJfdGhhbl8yMDQwKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2pwZWdfbGlzdF9mcmFtZV9kYXRhLCBydHBfanBlZ19saXN0X2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9qcGVnX2xpc3RfZnJhbWVfY291bnQsICJ2aWRlby94LWpwZWcsaGVpZ2h0PTIwNDgsd2lkdGg9NDgwIiwKLSAgICAgICJydHBqcGVncGF5IiwgInJ0cGpwZWdkZXBheSIsIHJ0cF9qcGVnX2xpc3RfYnl0ZXNfc2VudCwgMCwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9qcGVnX2xpc3RfaGVpZ2h0X2dyZWF0ZXJfdGhhbl8yMDQwKQotewotICBydHBfcGlwZWxpbmVfdGVzdCAocnRwX2pwZWdfbGlzdF9mcmFtZV9kYXRhLCBydHBfanBlZ19saXN0X2ZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgIHJ0cF9qcGVnX2xpc3RfZnJhbWVfY291bnQsICJ2aWRlby94LWpwZWcsaGVpZ2h0PTY0MCx3aWR0aD0yMDQ4IiwKLSAgICAgICJydHBqcGVncGF5IiwgInJ0cGpwZWdkZXBheSIsIHJ0cF9qcGVnX2xpc3RfYnl0ZXNfc2VudCwgMCwgVFJVRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHJ0cF9qcGVnX2xpc3Rfd2lkdGhfYW5kX2hlaWdodF9ncmVhdGVyX3RoYW5fMjA0MCkKLXsKLSAgcnRwX3BpcGVsaW5lX3Rlc3QgKHJ0cF9qcGVnX2xpc3RfZnJhbWVfZGF0YSwgcnRwX2pwZWdfbGlzdF9mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfanBlZ19saXN0X2ZyYW1lX2NvdW50LCAidmlkZW8veC1qcGVnLGhlaWdodD0yMDQ4LHdpZHRoPTIwNDgiLAotICAgICAgInJ0cGpwZWdwYXkiLCAicnRwanBlZ2RlcGF5IiwgcnRwX2pwZWdfbGlzdF9ieXRlc19zZW50LCAwLCBUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotcnRwX2pwZWdfZG9fcGFja2V0X2xvc3MgKGdkb3VibGUgcHJvYiwgZ2ludCBudW1fZXhwZWN0ZWQpCi17Ci0gIEdzdEhhcm5lc3MgKmg7Ci0gIGdib29sZWFuIGVvcyA9IEZBTFNFOwotICBnY2hhciAqczsKLSAgZ3VpbnQgaSwgYnVmZmVyX2NvdW50OwotCi0gIHMgPSBnX3N0cmR1cF9wcmludGYgKCJ2aWRlb3Rlc3RzcmMgcGF0dGVybj1iYWxsIG51bS1idWZmZXJzPTEwMCAhICIKLSAgICAgICJqcGVnZW5jIHF1YWxpdHk9NTAgISBydHBqcGVncGF5ICEgaWRlbnRpdHkgZHJvcC1wcm9iYWJpbGl0eT0lZyAhICIKLSAgICAgICJydHBqcGVnZGVwYXkiLCBwcm9iKTsKLSAgR1NUX0lORk8gKCJydW5uaW5nIHBpcGVsaW5lICVzIiwgcyk7Ci0gIGggPSBnc3RfaGFybmVzc19uZXdfcGFyc2UgKHMpOwotICBnX2ZyZWUgKHMpOwotCi0gIGdzdF9oYXJuZXNzX3BsYXkgKGgpOwotCi0gIGRvIHsKLSAgICBHc3RFdmVudCAqZXZlbnQ7Ci0KLSAgICBldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICAgIGVvcyA9IChHU1RfRVZFTlRfVFlQRSAoZXZlbnQpID09IEdTVF9FVkVOVF9FT1MpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZXZlbnQpOwotICB9IHdoaWxlICghZW9zKTsKLQotICBidWZmZXJfY291bnQgPSBnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKTsKLSAgR1NUX0lORk8gKCJHb3QgJXUgYnVmZmVycyIsIGJ1ZmZlcl9jb3VudCk7Ci0KLSAgaWYgKG51bV9leHBlY3RlZCA+PSAwKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobnVtX2V4cGVjdGVkLCBidWZmZXJfY291bnQpOwotICB9Ci0KLSAgZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9jb3VudDsgKytpKSB7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgZ3VpbnQxNiBzb2ksIGVvaTsKLQotICAgIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICAgIGZhaWxfdW5sZXNzIChidWYgIT0gTlVMTCk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKSk7Ci0gICAgR1NUX01FTURVTVAgKCJqcGVnIGZyYW1lIiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICBmYWlsX3VubGVzcyAobWFwLnNpemUgPiA0KTsKLSAgICBzb2kgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKG1hcC5kYXRhKTsKLSAgICBmYWlsX3VubGVzcyAoc29pID09IDB4ZmZkOCwgImV4cGVjdGVkIEpQRUcgZnJhbWUgc3RhcnQgRkZEOCBub3QgJTAyWCIsIHNvaSk7Ci0gICAgZW9pID0gR1NUX1JFQURfVUlOVDE2X0JFIChtYXAuZGF0YSArIG1hcC5zaXplIC0gMik7Ci0gICAgZmFpbF91bmxlc3MgKGVvaSA9PSAweGZmZDksICJleHBlY3RlZCBKUEVHIGZyYW1lIGVuZCBGRkQ5IG5vdCAlMDJYIiwgZW9pKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUIChydHBfanBlZ19wYWNrZXRfbG9zcykKLXsKLSAgZ2RvdWJsZSBwcm9iYWJpbGl0aWVzW10gPSB7IDAuMCwgMC4wMDEsIDAuMDEsIDAuMSwgMC4yLCAwLjUsIDEuMCB9OwotICBnaW50IG51bV9leHBlY3RlZFtdID0geyAxMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCB9OwotCi0gIEdTVF9JTkZPICgiU3RhcnQgaXRlcmF0aW9uICVkIiwgX19pX18pOwotICBmYWlsX3VubGVzcyAoX19pX18gPCBHX05fRUxFTUVOVFMgKHByb2JhYmlsaXRpZXMpKTsKLSAgcnRwX2pwZWdfZG9fcGFja2V0X2xvc3MgKHByb2JhYmlsaXRpZXNbX19pX19dLCBudW1fZXhwZWN0ZWRbX19pX19dKTsKLSAgR1NUX0lORk8gKCJEb25lIHdpdGggaXRlcmF0aW9uICVkIiwgX19pX18pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBjb25zdCBndWludDggcnRwX2c3MjlfZnJhbWVfZGF0YVtdID0KLSAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgcnRwX2c3MjlfZnJhbWVfZGF0YV9zaXplID0gMjI7Ci0KLXN0YXRpYyBpbnQgcnRwX2c3MjlfZnJhbWVfY291bnQgPSAxOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2c3MjkpCi17Ci0gIHJ0cF9waXBlbGluZV90ZXN0IChydHBfZzcyOV9mcmFtZV9kYXRhLCBydHBfZzcyOV9mcmFtZV9kYXRhX3NpemUsCi0gICAgICBydHBfZzcyOV9mcmFtZV9jb3VudCwgImF1ZGlvL0c3MjkscmF0ZT04MDAwLGNoYW5uZWxzPTEiLCAicnRwZzcyOXBheSIsCi0gICAgICAicnRwZzcyOWRlcGF5IiwgMCwgMCwgRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBjb25zdCBndWludDggcnRwX2dzdF9mcmFtZV9kYXRhW10gPQotICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAotfTsKLQotc3RhdGljIGludCBydHBfZ3N0X2ZyYW1lX2RhdGFfc2l6ZSA9IDIyOwotCi1zdGF0aWMgaW50IHJ0cF9nc3RfZnJhbWVfY291bnQgPSAxOwotCi1HU1RfU1RBUlRfVEVTVCAocnRwX2dzdF9jdXN0b21fZXZlbnQpCi17Ci0gIC8qIENyZWF0ZSBSVFAgcGlwZWxpbmUuICovCi0gIHJ0cF9waXBlbGluZSAqcCA9Ci0gICAgICBydHBfcGlwZWxpbmVfY3JlYXRlIChydHBfZ3N0X2ZyYW1lX2RhdGEsIHJ0cF9nc3RfZnJhbWVfZGF0YV9zaXplLAotICAgICAgcnRwX2dzdF9mcmFtZV9jb3VudCwgImFwcGxpY2F0aW9uL3gtdGVzdCIsCi0gICAgICAicnRwZ3N0cGF5IiwgInJ0cGdzdGRlcGF5Iik7Ci0KLSAgaWYgKHAgPT0gTlVMTCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIHAtPmN1c3RvbV9ldmVudCA9Ci0gICAgICBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNLAotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJ0ZXN0IiwgImZvbyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpKTsKLQotICAvKiBSdW4gUlRQIHBpcGVsaW5lLiAqLwotICBydHBfcGlwZWxpbmVfcnVuIChwKTsKLQotICAvKiBEZXN0cm95IFJUUCBwaXBlbGluZS4gKi8KLSAgcnRwX3BpcGVsaW5lX2Rlc3Ryb3kgKHApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qCi0gKiBDcmVhdGVzIHRoZSB0ZXN0IHN1aXRlLgotICoKLSAqIFJldHVybnM6IHBvaW50ZXIgdG8gdGhlIHRlc3Qgc3VpdGUuCi0gKi8KLXN0YXRpYyBTdWl0ZSAqCi1ydHBfcGF5bG9hZGluZ19zdWl0ZSAodm9pZCkKLXsKLSAgR3N0UmVnaXN0cnkgKnJlZ2lzdHJ5ID0gZ3N0X3JlZ2lzdHJ5X2dldCAoKTsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJydHBfZGF0YV90ZXN0Iik7Ci0KLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgibGluZWFyIik7Ci0KLSAgLyogU2V0IHRpbWVvdXQgdG8gNjAgc2Vjb25kcy4gKi8KLSAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA2MCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2lsYmMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9nc20pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9hbXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9wY21hKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfcGNtdSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX21wYSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2gyNjEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9oMjYzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfaDI2M3ApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9oMjY0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfaDI2NF9saXN0X2x0X210dSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2gyNjRfbGlzdF9sdF9tdHVfYXZjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfaDI2NF9saXN0X2d0X210dSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2gyNjRfbGlzdF9ndF9tdHVfYXZjKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfaDI2NSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2gyNjVfbGlzdF9sdF9tdHUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9oMjY1X2xpc3RfbHRfbXR1X2h2YzEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9oMjY1X2xpc3RfZ3RfbXR1KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfaDI2NV9saXN0X2d0X210dV9odmMxKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfa2x2KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfa2x2X2ZyYWdtZW50ZWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9MMTYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9MMjQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9tcDJ0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfbXA0dik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX21wNHZfbGlzdCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX21wNGcpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF90aGVvcmEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF92b3JiaXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9qcGVnKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfanBlZ193aWR0aF9ncmVhdGVyX3RoYW5fMjA0MCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2pwZWdfaGVpZ2h0X2dyZWF0ZXJfdGhhbl8yMDQwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfanBlZ193aWR0aF9hbmRfaGVpZ2h0X2dyZWF0ZXJfdGhhbl8yMDQwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfanBlZ19saXN0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfanBlZ19saXN0X3dpZHRoX2dyZWF0ZXJfdGhhbl8yMDQwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCBydHBfanBlZ19saXN0X2hlaWdodF9ncmVhdGVyX3RoYW5fMjA0MCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2pwZWdfbGlzdF93aWR0aF9hbmRfaGVpZ2h0X2dyZWF0ZXJfdGhhbl8yMDQwKTsKLSAgaWYgKGdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKHJlZ2lzdHJ5LCAianBlZ2VuYyIsIDEsIDAsIDApCi0gICAgICAmJiBnc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uIChyZWdpc3RyeSwgInZpZGVvdGVzdHNyYyIsIDEsIDAsIDApKQotICAgIHRjYXNlX2FkZF9sb29wX3Rlc3QgKHRjX2NoYWluLCBydHBfanBlZ19wYWNrZXRfbG9zcywgMCwgNyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgcnRwX2c3MjkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHJ0cF9nc3RfY3VzdG9tX2V2ZW50KTsKLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBfcGF5bG9hZGluZykKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGF1eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNmUyNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKiAgIEBhdXRob3IgSnVsaWVuIElzb3JjZSA8anVsaWVuLmlzb3JjZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3Rjb25zaXN0ZW5jeWNoZWNrZXIuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotc3RhdGljIGdib29sZWFuIHNlbmRfcGlwZWxpbmVfZW9zID0gRkFMU0U7Ci1zdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZV9waXBlbGluZV9lb3MgPSBGQUxTRTsKLQotc3RhdGljIHZvaWQKLW1lc3NhZ2VfcmVjZWl2ZWQgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdFBpcGVsaW5lICogYmluKQotewotICBHU1RfSU5GTyAoImJ1cyBtZXNzYWdlIGZyb20gXCIlIiBHU1RfUFRSX0ZPUk1BVCAiXCI6ICUiIEdTVF9QVFJfRk9STUFULAotICAgICAgR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgbWVzc2FnZSk7Ci0KLSAgc3dpdGNoIChtZXNzYWdlLT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICBpZiAoIXN0cmNtcCAoInBpcGVsaW5lX3NlbmQiLAotICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpKSkKLSAgICAgICAgc2VuZF9waXBlbGluZV9lb3MgPSBUUlVFOwotICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoInBpcGVsaW5lX3JlY2VpdmUiLAotICAgICAgICAgICAgICBHU1RfT0JKRUNUX05BTUUgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpKSkKLSAgICAgICAgcmVjZWl2ZV9waXBlbGluZV9lb3MgPSBUUlVFOwotICAgICAgZWxzZQotICAgICAgICBmYWlsICgiVW5rbm93biBwaXBlbGluZTogJXMiLAotICAgICAgICAgICAgR1NUX09CSkVDVF9OQU1FIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICBmYWlsICgiRXJyb3IhIik7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGd1aW50IGNvdW50OwotICBndWludCBuYl9wYWNrZXRzOwotICBndWludCBkcm9wX2V2ZXJ5X25fcGFja2V0czsKLX0gUlRYU2VuZERhdGE7Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotcnRwcnR4c2VuZF9zcmNwYWRfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBhZFByb2JlUmV0dXJuIHJldCA9IEdTVF9QQURfUFJPQkVfT0s7Ci0KLSAgaWYgKGluZm8tPnR5cGUgPT0gKEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCkpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IEdTVF9CVUZGRVIgKGluZm8tPmRhdGEpOwotICAgIFJUWFNlbmREYXRhICpydHhkYXRhID0gKFJUWFNlbmREYXRhICopIHVzZXJfZGF0YTsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgICBndWludCBwYXlsb2FkX3R5cGUgPSAwOwotCi0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cCk7Ci0gICAgcGF5bG9hZF90eXBlID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfdHlwZSAoJnJ0cCk7Ci0KLSAgICAvKiBtYWluIHN0cmVhbSBwYWNrZXRzICovCi0gICAgaWYgKHBheWxvYWRfdHlwZSA9PSA5NikgewotICAgICAgLyogY291bnQgcGFja2V0cyBvZiB0aGUgbWFpbiBzdHJlYW0gKi8KLSAgICAgICsrcnR4ZGF0YS0+bmJfcGFja2V0czsKLSAgICAgIC8qIGRyb3Agc29tZSBwYWNrZXRzICovCi0gICAgICBpZiAocnR4ZGF0YS0+Y291bnQgPCBydHhkYXRhLT5kcm9wX2V2ZXJ5X25fcGFja2V0cykgewotICAgICAgICArK3J0eGRhdGEtPmNvdW50OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogZHJvcCBhIHBhY2tldCBldmVyeSAncnR4ZGF0YS0+Y291bnQnIHBhY2tldHMgKi8KLSAgICAgICAgcnR4ZGF0YS0+Y291bnQgPSAxOwotICAgICAgICByZXQgPSBHU1RfUEFEX1BST0JFX0RST1A7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIHJldHJhbnNtaXNzaW9uIHBhY2tldHMgKi8KLSAgICB9Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotb25fcnRwYmlucmVjZWl2ZV9wYWRfYWRkZWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBuZXdQYWQsCi0gICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqcnRwZGVwYXlsb2FkZXIgPSBHU1RfRUxFTUVOVCAoZGF0YSk7Ci0KLSAgZ2NoYXIgKnBhZE5hbWUgPSBnc3RfcGFkX2dldF9uYW1lIChuZXdQYWQpOwotICBpZiAoZ19zdHJfaGFzX3ByZWZpeCAocGFkTmFtZSwgInJlY3ZfcnRwX3NyY18iKSkgewotICAgIEdzdFBhZCAqc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydHBkZXBheWxvYWRlciwgInNpbmsiKTsKLSAgICBnc3RfcGFkX2xpbmsgKG5ld1BhZCwgc2lua3BhZCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0gIH0KLSAgZ19mcmVlIChwYWROYW1lKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1vbl90aW1lb3V0IChncG9pbnRlciBkYXRhKQotewotICBHc3RFdmVudCAqZW9zID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoR1NUX0VMRU1FTlQgKGRhdGEpLCBlb3MpKSB7Ci0gICAgR1NUX0VSUk9SICgiZmFpbGVkIHRvIHNlbmQgZW5kIG9mIHN0cmVhbSBldmVudCIpOwotICAgIGdzdF9ldmVudF91bnJlZiAoZW9zKTsKLSAgfQotCi0gIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotcmVxdWVzdF9hdXhfcmVjZWl2ZSAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgZ3VpbnQgc2Vzc2lkLCBHc3RFbGVtZW50ICogcmVjZWl2ZSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RQYWQgKnBhZDsKLQotICBHU1RfSU5GTyAoImNyZWF0aW5nIEFVWCByZWNlaXZlciIpOwotICBiaW4gPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCByZWNlaXZlKTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocmVjZWl2ZSwgInNyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3ICgic3JjXzAiLCBwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJlY2VpdmUsICJzaW5rIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rXzAiLCBwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICByZXR1cm4gYmluOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1yZXF1ZXN0X2F1eF9zZW5kIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIEdzdEVsZW1lbnQgKiBzZW5kKQotewotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdFBhZCAqcGFkOwotCi0gIEdTVF9JTkZPICgiY3JlYXRpbmcgQVVYIHNlbmRlciIpOwotICBiaW4gPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzZW5kKTsKLQotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc2VuZCwgInNyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3ICgic3JjXzAiLCBwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNlbmQsICJzaW5rIik7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgZ3N0X2dob3N0X3BhZF9uZXcgKCJzaW5rXzAiLCBwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICByZXR1cm4gYmluOwotfQotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NpbXBsZV9ydHBiaW5fYXV4KQotewotICBHc3RFbGVtZW50ICpiaW5zZW5kLCAqcnRwYmluc2VuZCwgKnNyYywgKmVuY29kZXIsICpydHBwYXlsb2FkZXIsCi0gICAgICAqcnRwcnR4c2VuZCwgKnNlbmRydHBfdWRwc2luaywgKnNlbmRydGNwX3VkcHNpbmssICpzZW5kcnRjcF91ZHBzcmM7Ci0gIEdzdEVsZW1lbnQgKmJpbnJlY2VpdmUsICpydHBiaW5yZWNlaXZlLCAqcmVjdnJ0cF91ZHBzcmMsICpyZWN2cnRjcF91ZHBzcmMsCi0gICAgICAqcmVjdnJ0Y3BfdWRwc2luaywgKnJ0cHJ0eHJlY2VpdmUsICpydHBkZXBheWxvYWRlciwgKmRlY29kZXIsICpjb252ZXJ0ZXIsCi0gICAgICAqc2luazsKLSAgR3N0QnVzICpidXNzZW5kOwotICBHc3RCdXMgKmJ1c3JlY2VpdmU7Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0Q2FwcyAqcnRwY2FwcyA9IE5VTEw7Ci0gIEdzdFN0cnVjdHVyZSAqcHRfbWFwOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXMgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gIEdzdFBhZCAqc3JjcGFkID0gTlVMTDsKLSAgZ3VpbnQgbmJfcnR4X3NlbmRfcGFja2V0cyA9IDA7Ci0gIGd1aW50IG5iX3J0eF9yZWN2X3BhY2tldHMgPSAwOwotICBSVFhTZW5kRGF0YSBzZW5kX3J0eGRhdGE7Ci0gIHNlbmRfcnR4ZGF0YS5jb3VudCA9IDE7Ci0gIHNlbmRfcnR4ZGF0YS5uYl9wYWNrZXRzID0gMDsKLSAgc2VuZF9ydHhkYXRhLmRyb3BfZXZlcnlfbl9wYWNrZXRzID0gMjU7Ci0KLSAgR1NUX0lORk8gKCJwcmVwYXJpbmcgdGVzdCIpOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIGJpbnNlbmQgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmVfc2VuZCIpOwotICBidXNzZW5kID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYmluc2VuZCk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXNzZW5kLCBHX1BSSU9SSVRZX0hJR0gpOwotCi0gIGJpbnJlY2VpdmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmVfcmVjZWl2ZSIpOwotICBidXNyZWNlaXZlID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYmlucmVjZWl2ZSk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXNyZWNlaXZlLCBHX1BSSU9SSVRZX0hJR0gpOwotCi0gIHJ0cGJpbnNlbmQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBiaW4iLCAicnRwYmluc2VuZCIpOwotICBnX29iamVjdF9zZXQgKHJ0cGJpbnNlbmQsICJsYXRlbmN5IiwgMjAwLCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCBOVUxMKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgInNyYyIpOwotICBlbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxhd2VuYyIsICJlbmNvZGVyIik7Ci0gIHJ0cHBheWxvYWRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHBjbWFwYXkiLCAicnRwcGF5bG9hZGVyIik7Ci0gIHJ0cHJ0eHNlbmQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBydHhzZW5kIiwgInJ0cHJ0eHNlbmQiKTsKLSAgc2VuZHJ0cF91ZHBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidWRwc2luayIsICJzZW5kcnRwX3VkcHNpbmsiKTsKLSAgZ19vYmplY3Rfc2V0IChzZW5kcnRwX3VkcHNpbmssICJob3N0IiwgIjEyNy4wLjAuMSIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNlbmRydHBfdWRwc2luaywgInBvcnQiLCA1MDA2LCBOVUxMKTsKLSAgc2VuZHJ0Y3BfdWRwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNpbmsiLCAic2VuZHJ0Y3BfdWRwc2luayIpOwotICBnX29iamVjdF9zZXQgKHNlbmRydGNwX3VkcHNpbmssICJob3N0IiwgIjEyNy4wLjAuMSIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNlbmRydGNwX3VkcHNpbmssICJwb3J0IiwgNTAwNywgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2VuZHJ0Y3BfdWRwc2luaywgInN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2VuZHJ0Y3BfdWRwc2luaywgImFzeW5jIiwgRkFMU0UsIE5VTEwpOwotICBzZW5kcnRjcF91ZHBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzcmMiLCAic2VuZHJ0Y3BfdWRwc3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc2VuZHJ0Y3BfdWRwc3JjLCAicG9ydCIsIDUwMDksIE5VTEwpOwotCi0gIHJ0cGJpbnJlY2VpdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBiaW4iLCAicnRwYmlucmVjZWl2ZSIpOwotICBnX29iamVjdF9zZXQgKHJ0cGJpbnJlY2VpdmUsICJsYXRlbmN5IiwgMjAwLCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCBOVUxMKTsKLSAgcmVjdnJ0cF91ZHBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzcmMiLCAicmVjdnJ0cF91ZHBzcmMiKTsKLSAgZ19vYmplY3Rfc2V0IChyZWN2cnRwX3VkcHNyYywgInBvcnQiLCA1MDA2LCBOVUxMKTsKLSAgcnRwY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJhcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKWF1ZGlvLGNsb2NrLXJhdGU9KGludCk4MDAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylQQ01BLHBheWxvYWQ9KGludCk5NiIpOwotICBnX29iamVjdF9zZXQgKHJlY3ZydHBfdWRwc3JjLCAiY2FwcyIsIHJ0cGNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc191bnJlZiAocnRwY2Fwcyk7Ci0gIHJlY3ZydGNwX3VkcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNyYyIsICJyZWN2cnRjcF91ZHBzcmMiKTsKLSAgZ19vYmplY3Rfc2V0IChyZWN2cnRjcF91ZHBzcmMsICJwb3J0IiwgNTAwNywgTlVMTCk7Ci0gIHJlY3ZydGNwX3VkcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzaW5rIiwgInJlY3ZydGNwX3VkcHNpbmsiKTsKLSAgZ19vYmplY3Rfc2V0IChyZWN2cnRjcF91ZHBzaW5rLCAiaG9zdCIsICIxMjcuMC4wLjEiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChyZWN2cnRjcF91ZHBzaW5rLCAicG9ydCIsIDUwMDksIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJlY3ZydGNwX3VkcHNpbmssICJzeW5jIiwgRkFMU0UsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJlY3ZydGNwX3VkcHNpbmssICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKLSAgcnRwcnR4cmVjZWl2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHJ0eHJlY2VpdmUiLCAicnRwcnR4cmVjZWl2ZSIpOwotICBydHBkZXBheWxvYWRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHBjbWFkZXBheSIsICJydHBkZXBheWxvYWRlciIpOwotICBkZWNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxhd2RlYyIsICJkZWNvZGVyIik7Ci0gIGNvbnZlcnRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgImNvbnZlcnRlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluc2VuZCksIHJ0cGJpbnNlbmQsIHNyYywgZW5jb2RlciwgcnRwcGF5bG9hZGVyLAotICAgICAgc2VuZHJ0cF91ZHBzaW5rLCBzZW5kcnRjcF91ZHBzaW5rLCBzZW5kcnRjcF91ZHBzcmMsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbnJlY2VpdmUpLCBydHBiaW5yZWNlaXZlLAotICAgICAgcmVjdnJ0cF91ZHBzcmMsIHJlY3ZydGNwX3VkcHNyYywgcmVjdnJ0Y3BfdWRwc2luaywKLSAgICAgIHJ0cGRlcGF5bG9hZGVyLCBkZWNvZGVyLCBjb252ZXJ0ZXIsIHNpbmssIE5VTEwpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbnJlY2VpdmUsICJwYWQtYWRkZWQiLAotICAgICAgR19DQUxMQkFDSyAob25fcnRwYmlucmVjZWl2ZV9wYWRfYWRkZWQpLCBydHBkZXBheWxvYWRlcik7Ci0KLSAgcHRfbWFwID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1wdC1tYXAiLAotICAgICAgIjk2IiwgR19UWVBFX1VJTlQsIDk5LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChydHBwYXlsb2FkZXIsICJwdCIsIDk2LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChydHBwYXlsb2FkZXIsICJzZXFudW0tb2Zmc2V0IiwgMSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocnRwcnR4c2VuZCwgInBheWxvYWQtdHlwZS1tYXAiLCBwdF9tYXAsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJ0cHJ0eHJlY2VpdmUsICJwYXlsb2FkLXR5cGUtbWFwIiwgcHRfbWFwLCBOVUxMKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwdF9tYXApOwotCi0gIC8qIHNldCBydHAgYXV4IHJlY2VpdmUgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAocnRwYmlucmVjZWl2ZSwgInJlcXVlc3QtYXV4LXJlY2VpdmVyIiwgKEdDYWxsYmFjaykKLSAgICAgIHJlcXVlc3RfYXV4X3JlY2VpdmUsIHJ0cHJ0eHJlY2VpdmUpOwotICAvKiBzZXQgcnRwIGF1eCBzZW5kICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbnNlbmQsICJyZXF1ZXN0LWF1eC1zZW5kZXIiLCAoR0NhbGxiYWNrKQotICAgICAgcmVxdWVzdF9hdXhfc2VuZCwgcnRwcnR4c2VuZCk7Ci0KLSAgLyogZ3N0LWxhdW5jaC0xLjAgcnRwYmluIG5hbWU9cnRwYmluIGF1ZGlvdGVzdHNyYyAhIGFtcm5iZW5jICEgcnRwYW1ycGF5ICEgXAotICAgKiBydHBiaW4uc2VuZF9ydHBfc2lua18xIHJ0cGJpbi5zZW5kX3J0cF9zcmNfMSAhIHVkcHNpbmsgaG9zdD0iMTI3LjAuMC4xIiBcCi0gICAqIHBvcnQ9NTAwMiBydHBiaW4uc2VuZF9ydGNwX3NyY18xICEgdWRwc2luayBob3N0PSIxMjcuMC4wLjEiIHBvcnQ9NTAwMyBcCi0gICAqIHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UgIHVkcHNyYyBwb3J0PTUwMDcgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMQotICAgKi8KLQotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChzcmMsIGVuY29kZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChlbmNvZGVyLCBydHBwYXlsb2FkZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHJ0cHBheWxvYWRlciwgInNyYyIsIHJ0cGJpbnNlbmQsCi0gICAgICAic2VuZF9ydHBfc2lua18wIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHJ0cGJpbnNlbmQsICJzZW5kX3J0cF9zcmNfMCIsIHNlbmRydHBfdWRwc2luaywKLSAgICAgICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHJ0cGJpbnNlbmQsICJzZW5kX3J0Y3Bfc3JjXzAiLAotICAgICAgc2VuZHJ0Y3BfdWRwc2luaywgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAoc2VuZHJ0Y3BfdWRwc3JjLCAic3JjIiwgcnRwYmluc2VuZCwKLSAgICAgICJyZWN2X3J0Y3Bfc2lua18wIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydHBiaW5zZW5kLCAic2VuZF9ydHBfc3JjXzAiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNyY3BhZCwKLSAgICAgIChHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0gpLAotICAgICAgKEdzdFBhZFByb2JlQ2FsbGJhY2spIHJ0cHJ0eHNlbmRfc3JjcGFkX3Byb2JlLCAmc2VuZF9ydHhkYXRhLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICAvKiBnc3QtbGF1bmNoLTEuMCBydHBiaW4gbmFtZT1ydHBiaW4gdWRwc3JjIGNhcHM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpYXVkaW8sIFwKLSAgICogY2xvY2stcmF0ZT0oaW50KTgwMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKUFNUixlbmNvZGluZy1wYXJhbXM9KHN0cmluZykxLG8KLSAgICogY3RldC1hbGlnbj0oc3RyaW5nKTEiIHBvcnQ9NTAwMiAhIHJ0cGJpbi5yZWN2X3J0cF9zaW5rXzEgcnRwYmluLiAhIHJ0cGFtcmRlcGF5ICEgXAotICAgKiBhbXJuYmRlYyAhIGZha2VzaW5rIHN5bmM9VHJ1ZSAgdWRwc3JjIHBvcnQ9NTAwMyAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18xIFwKLSAgICogcnRwYmluLnNlbmRfcnRjcF9zcmNfMSAhIHVkcHNpbmsgaG9zdD0iMTI3LjAuMC4xIiBwb3J0PTUwMDcgc3luYz1mYWxzZSBhc3luYz1mYWxzZQotICAgKi8KLQotICByZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHJlY3ZydHBfdWRwc3JjLCAic3JjIiwgcnRwYmlucmVjZWl2ZSwKLSAgICAgICJyZWN2X3J0cF9zaW5rXzAiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAocnRwZGVwYXlsb2FkZXIsICJzcmMiLCBkZWNvZGVyLCAic2luayIsCi0gICAgICBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKGRlY29kZXIsIGNvbnZlcnRlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAoY29udmVydGVyLCAic3JjIiwgc2luaywgInNpbmsiLAotICAgICAgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwgKHJlY3ZydGNwX3VkcHNyYywgInNyYyIsIHJ0cGJpbnJlY2VpdmUsCi0gICAgICAicmVjdl9ydGNwX3NpbmtfMCIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLSAgcmVzID0KLSAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChydHBiaW5yZWNlaXZlLCAic2VuZF9ydGNwX3NyY18wIiwKLSAgICAgIHJlY3ZydGNwX3VkcHNpbmssICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1c3NlbmQsICJtZXNzYWdlOjplcnJvciIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsCi0gICAgICBiaW5zZW5kKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzc2VuZCwgIm1lc3NhZ2U6Ondhcm5pbmciLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLAotICAgICAgYmluc2VuZCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1c3NlbmQsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLAotICAgICAgYmluc2VuZCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzcmVjZWl2ZSwgIm1lc3NhZ2U6OmVycm9yIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwKLSAgICAgIGJpbnJlY2VpdmUpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXNyZWNlaXZlLCAibWVzc2FnZTo6d2FybmluZyIsCi0gICAgICAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW5yZWNlaXZlKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzcmVjZWl2ZSwgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsCi0gICAgICBiaW5yZWNlaXZlKTsKLQotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbnJlY2VpdmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluc2VuZCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgZ190aW1lb3V0X2FkZCAoNTAwMCwgb25fdGltZW91dCwgYmluc2VuZCk7Ci0gIGdfdGltZW91dF9hZGQgKDUwMDAsIG9uX3RpbWVvdXQsIGJpbnJlY2VpdmUpOwotCi0gIEdTVF9JTkZPICgiZW50ZXIgbWFpbmxvb3AiKTsKLSAgd2hpbGUgKCFzZW5kX3BpcGVsaW5lX2VvcyAmJiAhcmVjZWl2ZV9waXBlbGluZV9lb3MpCi0gICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChOVUxMLCBUUlVFKTsKLSAgR1NUX0lORk8gKCJleGl0IG1haW5sb29wIik7Ci0KLSAgLyogY2hlY2sgdGhhdCBGQiBOQUNLIGlzIHdvcmtpbmcgKi8KLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocnRwcnR4c2VuZCksICJudW0tcnR4LXJlcXVlc3RzIiwgJm5iX3J0eF9zZW5kX3BhY2tldHMsCi0gICAgICBOVUxMKTsKLSAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAocnRwcnR4cmVjZWl2ZSksICJudW0tcnR4LXJlcXVlc3RzIiwKLSAgICAgICZuYl9ydHhfcmVjdl9wYWNrZXRzLCBOVUxMKTsKLQotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbnNlbmQsIEdTVF9TVEFURV9OVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmlucmVjZWl2ZSwgR1NUX1NUQVRFX05VTEwpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgR1NUX0lORk8gKCJuYl9ydHhfc2VuZF9wYWNrZXRzICVkIiwgbmJfcnR4X3NlbmRfcGFja2V0cyk7Ci0gIEdTVF9JTkZPICgibmJfcnR4X3JlY3ZfcGFja2V0cyAlZCIsIG5iX3J0eF9yZWN2X3BhY2tldHMpOwotICBmYWlsX2lmIChuYl9ydHhfc2VuZF9wYWNrZXRzIDwgMSk7Ci0gIGZhaWxfaWYgKG5iX3J0eF9yZWN2X3BhY2tldHMgPCAxKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCAoYnVzc2VuZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1c3NlbmQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW5zZW5kKTsKLQotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKGJ1c3JlY2VpdmUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXNyZWNlaXZlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmlucmVjZWl2ZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXJ0cGF1eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJydHBhdXgiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMTAwMDApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfcnRwYmluX2F1eCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBhdXgpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiYmZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDcxMiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGdzdHJ0cGJpbgotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDk+IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYWRzKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHc3RQYWQgKnBhZDsKLQotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwc2Vzc2lvbiIsIE5VTEwpOwotCi0gIHBhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAoZWxlbWVudCwgInJlY3ZfcnRjcF9zaW5rIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NsZWFudXBfc2VuZCkKLXsKLSAgR3N0RWxlbWVudCAqcnRwYmluOwotICBHc3RQYWQgKnJ0cF9zaW5rLCAqcnRwX3NyYywgKnJ0Y3Bfc3JjOwotICBHT2JqZWN0ICpzZXNzaW9uOwotICBnaW50IGNvdW50ID0gMjsKLQotICBydHBiaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBiaW4iLCAicnRwYmluIik7Ci0KLSAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAvKiByZXF1ZXN0IHNlc3Npb24gMCAqLwotICAgIHJ0cF9zaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJzZW5kX3J0cF9zaW5rXzAiKTsKLSAgICBmYWlsX3VubGVzcyAocnRwX3NpbmsgIT0gTlVMTCk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NpbmssICJydHBfc2luayIsIDIpOwotCi0gICAgLyogdGhpcyBzdGF0aWMgcGFkIHNob3VsZCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgbm93ICovCi0gICAgcnRwX3NyYyA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydHBiaW4sICJzZW5kX3J0cF9zcmNfMCIpOwotICAgIGZhaWxfdW5sZXNzIChydHBfc3JjICE9IE5VTEwpOwotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJ0cF9zcmMsICJydHBfc3JjIiwgMik7Ci0KLSAgICAvKiB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYW4gaW50ZXJuYWwgc2Vzc2lvbiAwIG5vdyAqLwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAocnRwYmluLCAiZ2V0LWludGVybmFsLXNlc3Npb24iLCAwLCAmc2Vzc2lvbik7Ci0gICAgZmFpbF91bmxlc3MgKHNlc3Npb24gIT0gTlVMTCk7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNlc3Npb24pOwotCi0gICAgLyogZ2V0IHRoZSBzZW5kIFJUQ1AgcGFkIHRvbyAqLwotICAgIHJ0Y3Bfc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJzZW5kX3J0Y3Bfc3JjXzAiKTsKLSAgICBmYWlsX3VubGVzcyAocnRjcF9zcmMgIT0gTlVMTCk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRjcF9zcmMsICJydGNwX3NyYyIsIDIpOwotCi0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luayk7Ci0gICAgLyogd2Ugc2hvdWxkIG9ubHkgaGF2ZSBvdXIgcmVmcyB0byB0aGUgcGFkcyBub3cgKi8KLSAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChydHBfc2luaywgInJ0cF9zaW5rIiwgMSk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NyYywgInJ0cF9zcmMiLCAxKTsKLSAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChydGNwX3NyYywgInJ0cF9zcmMiLCAyKTsKLQotICAgIC8qIHRoZSBvdGhlciBwYWQgc2hvdWxkIGJlIGdvbmUgbm93ICovCi0gICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydHBiaW4sICJzZW5kX3J0cF9zcmNfMCIpID09IE5VTEwpOwotCi0gICAgLyogaW50ZXJuYWwgc2Vzc2lvbiBzaG91bGQgc3RpbGwgYmUgdGhlcmUgKi8KLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHJ0cGJpbiwgImdldC1pbnRlcm5hbC1zZXNzaW9uIiwgMCwgJnNlc3Npb24pOwotICAgIGZhaWxfdW5sZXNzIChzZXNzaW9uICE9IE5VTEwpOwotICAgIGdfb2JqZWN0X3VucmVmIChzZXNzaW9uKTsKLQotICAgIC8qIHJlbGVhc2UgdGhlIFJUQ1AgcGFkICovCi0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydGNwX3NyYyk7Ci0gICAgLyogd2Ugc2hvdWxkIG9ubHkgaGF2ZSBvdXIgcmVmcyB0byB0aGUgcGFkcyBub3cgKi8KLSAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChydHBfc2luaywgInJ0cF9zaW5rIiwgMSk7Ci0gICAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NyYywgInJ0cF9zcmMiLCAxKTsKLSAgICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChydGNwX3NyYywgInJ0cF9zcmMiLCAxKTsKLQotICAgIC8qIHRoZSBzZXNzaW9uIHNob3VsZCBiZSBnb25lIG5vdyAqLwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAocnRwYmluLCAiZ2V0LWludGVybmFsLXNlc3Npb24iLCAwLCAmc2Vzc2lvbik7Ci0gICAgZmFpbF91bmxlc3MgKHNlc3Npb24gPT0gTlVMTCk7Ci0KLSAgICAvKiB1bnJlZiB0aGUgcmVxdWVzdCBwYWQgYW5kIHRoZSBzdGF0aWMgcGFkICovCi0gICAgZ3N0X29iamVjdF91bnJlZiAocnRwX3NpbmspOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJ0cF9zcmMpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHJ0Y3Bfc3JjKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQxNiBzZXFudW07Ci0gIGdib29sZWFuIHBhZF9hZGRlZDsKLSAgR3N0UGFkICpwYWQ7Ci0gIEdNdXRleCBsb2NrOwotICBHQ29uZCBjb25kOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdMaXN0ICpwYWRzOwotICBHc3RDYXBzICpjYXBzOwotfSBDbGVhbnVwRGF0YTsKLQotc3RhdGljIHZvaWQKLWluaXRfZGF0YSAoQ2xlYW51cERhdGEgKiBkYXRhKQotewotICBkYXRhLT5zZXFudW0gPSAxMDsKLSAgZGF0YS0+cGFkX2FkZGVkID0gRkFMU0U7Ci0gIGdfbXV0ZXhfaW5pdCAoJmRhdGEtPmxvY2spOwotICBnX2NvbmRfaW5pdCAoJmRhdGEtPmNvbmQpOwotICBkYXRhLT5wYWRzID0gTlVMTDsKLSAgZGF0YS0+Y2FwcyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbl9kYXRhIChDbGVhbnVwRGF0YSAqIGRhdGEpCi17Ci0gIGdfbGlzdF9mb3JlYWNoIChkYXRhLT5wYWRzLCAoR0Z1bmMpIGdzdF9vYmplY3RfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoZGF0YS0+cGFkcyk7Ci0gIGdfbXV0ZXhfY2xlYXIgKCZkYXRhLT5sb2NrKTsKLSAgZ19jb25kX2NsZWFyICgmZGF0YS0+Y29uZCk7Ci0gIGlmIChkYXRhLT5jYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChkYXRhLT5jYXBzKTsKLX0KLQotc3RhdGljIGd1aW50OCBydHBfcGFja2V0W10gPSB7IDB4ODAsIDB4NjAsIDB4OTQsIDB4YmMsIDB4OGYsIDB4MzcsIDB4NGUsIDB4YjgsCi0gIDB4NDQsIDB4YTgsIDB4ZjMsIDB4N2MsIDB4MDYsIDB4NmEsIDB4MGMsIDB4Y2UsCi0gIDB4MTMsIDB4MjUsIDB4MTksIDB4NjksIDB4MWYsIDB4OTMsIDB4MjUsIDB4OWQsCi0gIDB4MmIsIDB4ODIsIDB4MzEsIDB4M2IsIDB4MzYsIDB4YzEsIDB4M2MsIDB4MTMKLX07Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1jaGFpbl9ydHBfcGFja2V0IChHc3RQYWQgKiBwYWQsIENsZWFudXBEYXRhICogZGF0YSkKLXsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdE1hcEluZm8gbWFwOwotCi0gIGlmIChkYXRhLT5jYXBzID09IE5VTEwpIHsKLSAgICBkYXRhLT5jYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKCJhcHBsaWNhdGlvbi94LXJ0cCwiCi0gICAgICAgICJtZWRpYT0oc3RyaW5nKWF1ZGlvLCBjbG9jay1yYXRlPShpbnQpNDQxMDAsICIKLSAgICAgICAgImVuY29kaW5nLW5hbWU9KHN0cmluZylMMTYsIGVuY29kaW5nLXBhcmFtcz0oc3RyaW5nKTEsIGNoYW5uZWxzPShpbnQpMSIpOwotICAgIGRhdGEtPnNlcW51bSA9IDA7Ci0gIH0KLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKEdTVF9PQkpFQ1RfTkFNRSAocGFkKSkpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19jYXBzIChkYXRhLT5jYXBzKSk7Ci0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHBhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZW9mIChydHBfcGFja2V0KSk7Ci0gIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBtZW1jcHkgKG1hcC5kYXRhLCBydHBfcGFja2V0LCBzaXplb2YgKHJ0cF9wYWNrZXQpKTsKLQotICBtYXAuZGF0YVsyXSA9IChkYXRhLT5zZXFudW0gPj4gOCkgJiAweGZmOwotICBtYXAuZGF0YVszXSA9IGRhdGEtPnNlcW51bSAmIDB4ZmY7Ci0KLSAgZGF0YS0+c2VxbnVtKys7Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJm1hcCk7Ci0KLSAgcmVzID0gZ3N0X3BhZF9jaGFpbiAocGFkLCBidWZmZXIpOwotCi0gIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1kdW1teV9jaGFpbiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rX2ZhY3RvcnkgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpKTsKLQotCi1zdGF0aWMgR3N0UGFkICoKLW1ha2Vfc2lua3BhZCAoQ2xlYW51cERhdGEgKiBkYXRhKQotewotICBHc3RQYWQgKnBhZDsKLQotICBwYWQgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNpbmtfZmFjdG9yeSwgInNpbmsiKTsKLQotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAocGFkLCBkdW1teV9jaGFpbik7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAocGFkLCBUUlVFKTsKLQotICBkYXRhLT5wYWRzID0gZ19saXN0X3ByZXBlbmQgKGRhdGEtPnBhZHMsIHBhZCk7Ci0KLSAgcmV0dXJuIHBhZDsKLX0KLQotc3RhdGljIHZvaWQKLXBhZF9hZGRlZF9jYiAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgR3N0UGFkICogcGFkLCBDbGVhbnVwRGF0YSAqIGRhdGEpCi17Ci0gIEdzdFBhZCAqc2lua3BhZDsKLQotICBHU1RfREVCVUcgKCJwYWQgYWRkZWQgJXM6JXNcbiIsIEdTVF9ERUJVR19QQURfTkFNRSAocGFkKSk7Ci0KLSAgaWYgKEdTVF9QQURfSVNfU0lOSyAocGFkKSkKLSAgICByZXR1cm47Ci0KLSAgZmFpbF91bmxlc3MgKGRhdGEtPnBhZF9hZGRlZCA9PSBGQUxTRSk7Ci0KLSAgc2lua3BhZCA9IG1ha2Vfc2lua3BhZCAoZGF0YSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHBhZCwgc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LKTsKLQotICBnX211dGV4X2xvY2sgKCZkYXRhLT5sb2NrKTsKLSAgZGF0YS0+cGFkX2FkZGVkID0gVFJVRTsKLSAgZGF0YS0+cGFkID0gcGFkOwotICBnX2NvbmRfc2lnbmFsICgmZGF0YS0+Y29uZCk7Ci0gIGdfbXV0ZXhfdW5sb2NrICgmZGF0YS0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYWRfcmVtb3ZlZF9jYiAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgR3N0UGFkICogcGFkLCBDbGVhbnVwRGF0YSAqIGRhdGEpCi17Ci0gIEdTVF9ERUJVRyAoInBhZCByZW1vdmVkICVzOiVzXG4iLCBHU1RfREVCVUdfUEFEX05BTUUgKHBhZCkpOwotCi0gIGlmIChkYXRhLT5wYWQgIT0gcGFkKQotICAgIHJldHVybjsKLQotICBmYWlsX3VubGVzcyAoZGF0YS0+cGFkX2FkZGVkID09IFRSVUUpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmRhdGEtPmxvY2spOwotICBkYXRhLT5wYWRfYWRkZWQgPSBGQUxTRTsKLSAgZ19jb25kX3NpZ25hbCAoJmRhdGEtPmNvbmQpOwotICBnX211dGV4X3VubG9jayAoJmRhdGEtPmxvY2spOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jbGVhbnVwX3JlY3YpCi17Ci0gIEdzdEVsZW1lbnQgKnJ0cGJpbjsKLSAgR3N0UGFkICpydHBfc2luazsKLSAgQ2xlYW51cERhdGEgZGF0YTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgZ2ludCBjb3VudCA9IDI7Ci0KLSAgaW5pdF9kYXRhICgmZGF0YSk7Ci0KLSAgcnRwYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwYmluIiwgInJ0cGJpbiIpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInBhZC1hZGRlZCIsIChHQ2FsbGJhY2spIHBhZF9hZGRlZF9jYiwgJmRhdGEpOwotICBnX3NpZ25hbF9jb25uZWN0IChydHBiaW4sICJwYWQtcmVtb3ZlZCIsIChHQ2FsbGJhY2spIHBhZF9yZW1vdmVkX2NiLCAmZGF0YSk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChydHBiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgLyogcmVxdWVzdCBzZXNzaW9uIDAgKi8KLSAgICBydHBfc2luayA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwYmluLCAicmVjdl9ydHBfc2lua18wIik7Ci0gICAgZmFpbF91bmxlc3MgKHJ0cF9zaW5rICE9IE5VTEwpOwotICAgIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJ0cF9zaW5rLCAicnRwX3NpbmsiLCAyKTsKLQotICAgIC8qIG5vIHNvdXJjZXBhZHMgYXJlIGNyZWF0ZWQgeWV0ICovCi0gICAgZmFpbF91bmxlc3MgKHJ0cGJpbi0+bnVtc2lua3BhZHMgPT0gMSk7Ci0gICAgZmFpbF91bmxlc3MgKHJ0cGJpbi0+bnVtc3JjcGFkcyA9PSAwKTsKLQotICAgIHJlcyA9IGNoYWluX3J0cF9wYWNrZXQgKHJ0cF9zaW5rLCAmZGF0YSk7Ci0gICAgR1NUX0RFQlVHICgicmVzICVkLCAlc1xuIiwgcmVzLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgICByZXMgPSBjaGFpbl9ydHBfcGFja2V0IChydHBfc2luaywgJmRhdGEpOwotICAgIEdTVF9ERUJVRyAoInJlcyAlZCwgJXNcbiIsIHJlcywgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlcykpOwotICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotCi0gICAgLyogd2Ugd2FpdCBmb3IgdGhlIG5ldyBwYWQgdG8gYXBwZWFyIG5vdyAqLwotICAgIGdfbXV0ZXhfbG9jayAoJmRhdGEubG9jayk7Ci0gICAgd2hpbGUgKCFkYXRhLnBhZF9hZGRlZCkKLSAgICAgIGdfY29uZF93YWl0ICgmZGF0YS5jb25kLCAmZGF0YS5sb2NrKTsKLSAgICBnX211dGV4X3VubG9jayAoJmRhdGEubG9jayk7Ci0KLSAgICAvKiBzb3VyY2VwYWQgY3JlYXRlZCBub3cgKi8KLSAgICBmYWlsX3VubGVzcyAocnRwYmluLT5udW1zaW5rcGFkcyA9PSAxKTsKLSAgICBmYWlsX3VubGVzcyAocnRwYmluLT5udW1zcmNwYWRzID09IDEpOwotCi0gICAgLyogcmVtb3ZlIHRoZSBzZXNzaW9uICovCi0gICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luayk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAocnRwX3NpbmspOwotCi0gICAgLyogcGFkIHNob3VsZCBiZSBnb25lIG5vdyAqLwotICAgIGdfbXV0ZXhfbG9jayAoJmRhdGEubG9jayk7Ci0gICAgd2hpbGUgKGRhdGEucGFkX2FkZGVkKQotICAgICAgZ19jb25kX3dhaXQgKCZkYXRhLmNvbmQsICZkYXRhLmxvY2spOwotICAgIGdfbXV0ZXhfdW5sb2NrICgmZGF0YS5sb2NrKTsKLQotICAgIC8qIG5vdGhpbmcgbGVmdCBhbnltb3JlIG5vdyAqLwotICAgIGZhaWxfdW5sZXNzIChydHBiaW4tPm51bXNpbmtwYWRzID09IDApOwotICAgIGZhaWxfdW5sZXNzIChydHBiaW4tPm51bXNyY3BhZHMgPT0gMCk7Ci0gIH0KLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHJ0cGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocnRwYmluKTsKLQotICBjbGVhbl9kYXRhICgmZGF0YSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY2xlYW51cF9yZWN2MikKLXsKLSAgR3N0RWxlbWVudCAqcnRwYmluOwotICBHc3RQYWQgKnJ0cF9zaW5rOwotICBDbGVhbnVwRGF0YSBkYXRhOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdEZsb3dSZXR1cm4gcmVzOwotICBnaW50IGNvdW50ID0gMjsKLQotICBpbml0X2RhdGEgKCZkYXRhKTsKLQotICBydHBiaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBiaW4iLCAicnRwYmluIik7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAocnRwYmluLCAicGFkLWFkZGVkIiwgKEdDYWxsYmFjaykgcGFkX2FkZGVkX2NiLCAmZGF0YSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInBhZC1yZW1vdmVkIiwgKEdDYWxsYmFjaykgcGFkX3JlbW92ZWRfY2IsICZkYXRhKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHJ0cGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgLyogcmVxdWVzdCBzZXNzaW9uIDAgKi8KLSAgcnRwX3NpbmsgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgInJlY3ZfcnRwX3NpbmtfMCIpOwotICBmYWlsX3VubGVzcyAocnRwX3NpbmsgIT0gTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJ0cF9zaW5rLCAicnRwX3NpbmsiLCAyKTsKLQotICB3aGlsZSAoY291bnQtLSkgewotICAgIC8qIG5vIHNvdXJjZXBhZHMgYXJlIGNyZWF0ZWQgeWV0ICovCi0gICAgZmFpbF91bmxlc3MgKHJ0cGJpbi0+bnVtc2lua3BhZHMgPT0gMSk7Ci0gICAgZmFpbF91bmxlc3MgKHJ0cGJpbi0+bnVtc3JjcGFkcyA9PSAwKTsKLQotICAgIHJlcyA9IGNoYWluX3J0cF9wYWNrZXQgKHJ0cF9zaW5rLCAmZGF0YSk7Ci0gICAgR1NUX0RFQlVHICgicmVzICVkLCAlc1xuIiwgcmVzLCBnc3RfZmxvd19nZXRfbmFtZSAocmVzKSk7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgICByZXMgPSBjaGFpbl9ydHBfcGFja2V0IChydHBfc2luaywgJmRhdGEpOwotICAgIEdTVF9ERUJVRyAoInJlcyAlZCwgJXNcbiIsIHJlcywgZ3N0X2Zsb3dfZ2V0X25hbWUgKHJlcykpOwotICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0spOwotCi0gICAgLyogd2Ugd2FpdCBmb3IgdGhlIG5ldyBwYWQgdG8gYXBwZWFyIG5vdyAqLwotICAgIGdfbXV0ZXhfbG9jayAoJmRhdGEubG9jayk7Ci0gICAgd2hpbGUgKCFkYXRhLnBhZF9hZGRlZCkKLSAgICAgIGdfY29uZF93YWl0ICgmZGF0YS5jb25kLCAmZGF0YS5sb2NrKTsKLSAgICBnX211dGV4X3VubG9jayAoJmRhdGEubG9jayk7Ci0KLSAgICAvKiBzb3VyY2VwYWQgY3JlYXRlZCBub3cgKi8KLSAgICBmYWlsX3VubGVzcyAocnRwYmluLT5udW1zaW5rcGFkcyA9PSAxKTsKLSAgICBmYWlsX3VubGVzcyAocnRwYmluLT5udW1zcmNwYWRzID09IDEpOwotCi0gICAgLyogY2hhbmdlIHN0YXRlICovCi0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChydHBiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgICBmYWlsX3VubGVzcyAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgICAvKiBwYWQgc2hvdWxkIGJlIGdvbmUgbm93ICovCi0gICAgZ19tdXRleF9sb2NrICgmZGF0YS5sb2NrKTsKLSAgICB3aGlsZSAoZGF0YS5wYWRfYWRkZWQpCi0gICAgICBnX2NvbmRfd2FpdCAoJmRhdGEuY29uZCwgJmRhdGEubG9jayk7Ci0gICAgZ19tdXRleF91bmxvY2sgKCZkYXRhLmxvY2spOwotCi0gICAgLyogYmFjayB0byBwbGF5aW5nIGZvciB0aGUgbmV4dCByb3VuZCAqLwotICAgIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocnRwYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICB9Ci0KLSAgLyogcmVtb3ZlIHRoZSBzZXNzaW9uICovCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgcnRwX3NpbmspOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc2luayk7Ci0KLSAgLyogbm90aGluZyBsZWZ0IGFueW1vcmUgbm93ICovCi0gIGZhaWxfdW5sZXNzIChydHBiaW4tPm51bXNpbmtwYWRzID09IDApOwotICBmYWlsX3VubGVzcyAocnRwYmluLT5udW1zcmNwYWRzID09IDApOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocnRwYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChydHBiaW4pOwotCi0gIGNsZWFuX2RhdGEgKCZkYXRhKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9yZXF1ZXN0X3BhZF9ieV90ZW1wbGF0ZV9uYW1lKQotewotICBHc3RFbGVtZW50ICpydHBiaW47Ci0gIEdzdFBhZCAqcnRwX3NpbmsxLCAqcnRwX3NpbmsyLCAqcnRwX3NpbmszOwotCi0gIHJ0cGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cGJpbiIsICJydHBiaW4iKTsKLSAgcnRwX3NpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJyZWN2X3J0cF9zaW5rXyV1Iik7Ci0gIGZhaWxfdW5sZXNzIChydHBfc2luazEgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKEdTVF9QQURfTkFNRSAocnRwX3NpbmsxKSwgInJlY3ZfcnRwX3NpbmtfMCIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChydHBfc2luazEsICJydHBfc2luazEiLCAyKTsKLQotICBydHBfc2luazIgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgInJlY3ZfcnRwX3NpbmtfJXUiKTsKLSAgZmFpbF91bmxlc3MgKHJ0cF9zaW5rMiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX1BBRF9OQU1FIChydHBfc2luazIpLCAicmVjdl9ydHBfc2lua18xIik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJ0cF9zaW5rMiwgInJ0cF9zaW5rMiIsIDIpOwotCi0gIHJ0cF9zaW5rMyA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwYmluLCAicmVjdl9ydHBfc2lua18ldSIpOwotICBmYWlsX3VubGVzcyAocnRwX3NpbmszICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfUEFEX05BTUUgKHJ0cF9zaW5rMyksICJyZWN2X3J0cF9zaW5rXzIiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NpbmszLCAicnRwX3NpbmszIiwgMik7Ci0KLQotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChydHBiaW4sIHJ0cF9zaW5rMik7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgcnRwX3NpbmsxKTsKLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luazMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChydHBfc2luazMsICJydHBfc2luazMiLCAxKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NpbmsyLCAicnRwX3NpbmsyIiwgMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJ0cF9zaW5rMSwgInJ0cF9zaW5rIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cF9zaW5rMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cF9zaW5rMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cF9zaW5rMyk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocnRwYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1lbmNvZGVyX2NiIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIEdzdEVsZW1lbnQgKiBiaW4pCi17Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBmYWlsX3VubGVzcyAoc2Vzc2lkID09IDIpOwotCi0gIEdTVF9ERUJVRyAoIm1ha2luZyBlbmNvZGVyIik7Ci0gIHNpbmtwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKCJydHBfc2lua18yIiwgR1NUX1BBRF9TSU5LKTsKLSAgc3JjcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgicnRwX3NyY18yIiwgR1NUX1BBRF9TUkMpOwotCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgc2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgc3JjcGFkKTsKLQotICByZXR1cm4gZ3N0X29iamVjdF9yZWYgKGJpbik7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWVuY29kZXJfY2IyIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIEdzdEVsZW1lbnQgKiBiaW4pCi17Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICBmYWlsX3VubGVzcyAoc2Vzc2lkID09IDMpOwotCi0gIEdTVF9ERUJVRyAoIm1ha2luZyBlbmNvZGVyIik7Ci0gIHNpbmtwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKCJydHBfc2lua18zIiwgR1NUX1BBRF9TSU5LKTsKLSAgc3JjcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgicnRwX3NyY18zIiwgR1NUX1BBRF9TUkMpOwotCi0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgc2lua3BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgc3JjcGFkKTsKLQotICByZXR1cm4gZ3N0X29iamVjdF9yZWYgKGJpbik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VuY29kZXIpCi17Ci0gIEdzdEVsZW1lbnQgKnJ0cGJpbiwgKmJpbjsKLSAgR3N0UGFkICpydHBfc2luazEsICpydHBfc2luazI7Ci0gIGd1bG9uZyBpZDsKLQotICBiaW4gPSBnc3RfYmluX25ldyAoInJ0cGVuYyIpOwotCi0gIHJ0cGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cGJpbiIsICJydHBiaW4iKTsKLQotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInJlcXVlc3QtcnRwLWVuY29kZXIiLCAoR0NhbGxiYWNrKSBlbmNvZGVyX2NiLAotICAgICAgYmluKTsKLQotICBydHBfc2luazEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgInNlbmRfcnRwX3NpbmtfMiIpOwotICBmYWlsX3VubGVzcyAocnRwX3NpbmsxICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfUEFEX05BTUUgKHJ0cF9zaW5rMSksICJzZW5kX3J0cF9zaW5rXzIiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NpbmsxLCAicnRwX3NpbmsxIiwgMik7Ci0KLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChydHBiaW4sIGlkKTsKLQotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInJlcXVlc3QtcnRwLWVuY29kZXIiLCAoR0NhbGxiYWNrKSBlbmNvZGVyX2NiMiwKLSAgICAgIGJpbik7Ci0KLSAgcnRwX3NpbmsyID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJzZW5kX3J0cF9zaW5rXzMiKTsKLSAgZmFpbF91bmxlc3MgKHJ0cF9zaW5rMiAhPSBOVUxMKTsKLQotICAvKiByZW1vdmUgdGhlIHNlc3Npb24gKi8KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc2luazEpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgcnRwX3NpbmsyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRwX3NpbmsyKTsKLQotICAvKiBub3RoaW5nIGxlZnQgYW55bW9yZSBub3cgKi8KLSAgZmFpbF91bmxlc3MgKHJ0cGJpbi0+bnVtc2lua3BhZHMgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChydHBiaW4tPm51bXNyY3BhZHMgPT0gMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocnRwYmluKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1kZWNvZGVyX2NiIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoIm1ha2luZyBkZWNvZGVyIik7Ci0gIHNpbmtwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKCJydHBfc2luayIsIEdTVF9QQURfU0lOSyk7Ci0gIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInJ0cF9zcmMiLCBHU1RfUEFEX1NSQyk7Ci0KLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBzaW5rcGFkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBzcmNwYWQpOwotCi0gIHJldHVybiBiaW47Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RlY29kZXIpCi17Ci0gIEdzdEVsZW1lbnQgKnJ0cGJpbjsKLSAgR3N0UGFkICpydHBfc2luazEsICpydHBfc2luazI7Ci0gIGd1bG9uZyBpZDsKLQotCi0gIHJ0cGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cGJpbiIsICJydHBiaW4iKTsKLQotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInJlcXVlc3QtcnRwLWRlY29kZXIiLCAoR0NhbGxiYWNrKSBkZWNvZGVyX2NiLAotICAgICAgTlVMTCk7Ci0KLSAgcnRwX3NpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJyZWN2X3J0cF9zaW5rXzIiKTsKLSAgZmFpbF91bmxlc3MgKHJ0cF9zaW5rMSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX1BBRF9OQU1FIChydHBfc2luazEpLCAicmVjdl9ydHBfc2lua18yIik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHJ0cF9zaW5rMSwgInJ0cF9zaW5rMSIsIDIpOwotCi0gIHJ0cF9zaW5rMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwYmluLCAicmVjdl9ydHBfc2lua18zIik7Ci0gIGZhaWxfdW5sZXNzIChydHBfc2luazIgIT0gTlVMTCk7Ci0KLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChydHBiaW4sIGlkKTsKLQotICAvKiByZW1vdmUgdGhlIHNlc3Npb24gKi8KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc2luazEpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgcnRwX3NpbmsyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRwX3NpbmsyKTsKLQotICAvKiBub3RoaW5nIGxlZnQgYW55bW9yZSBub3cgKi8KLSAgZmFpbF91bmxlc3MgKHJ0cGJpbi0+bnVtc2lua3BhZHMgPT0gMCk7Ci0gIGZhaWxfdW5sZXNzIChydHBiaW4tPm51bXNyY3BhZHMgPT0gMCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocnRwYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1hdXhfc2VuZGVyX2NiIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoIm1ha2luZyBBVVggc2VuZGVyIik7Ci0gIHNpbmtwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKCJzaW5rXzIiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIHNpbmtwYWQpOwotCi0gIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInNyY18yIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIHNyY3BhZCk7Ci0gIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInNyY18xIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIHNyY3BhZCk7Ci0gIHNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInNyY18zIiwgR1NUX1BBRF9TUkMpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIHNyY3BhZCk7Ci0KLSAgcmV0dXJuIGJpbjsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYXV4X3NlbmRlcikKLXsKLSAgR3N0RWxlbWVudCAqcnRwYmluOwotICBHc3RQYWQgKnJ0cF9zaW5rMSwgKnJ0cF9zcmMsICpydGNwX3NyYzsKLSAgZ3Vsb25nIGlkOwotCi0gIHJ0cGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cGJpbiIsICJydHBiaW4iKTsKLQotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInJlcXVlc3QtYXV4LXNlbmRlciIsCi0gICAgICAoR0NhbGxiYWNrKSBhdXhfc2VuZGVyX2NiLCBOVUxMKTsKLQotICBydHBfc2luazEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgInNlbmRfcnRwX3NpbmtfMiIpOwotICBmYWlsX3VubGVzcyAocnRwX3NpbmsxICE9IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChHU1RfUEFEX05BTUUgKHJ0cF9zaW5rMSksICJzZW5kX3J0cF9zaW5rXzIiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAocnRwX3NpbmsxLCAicnRwX3NpbmsxIiwgMik7Ci0KLSAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChydHBiaW4sIGlkKTsKLQotICBydHBfc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0cGJpbiwgInNlbmRfcnRwX3NyY18yIik7Ci0gIGZhaWxfdW5sZXNzIChydHBfc3JjICE9IE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc3JjKTsKLQotICBydHBfc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0cGJpbiwgInNlbmRfcnRwX3NyY18xIik7Ci0gIGZhaWxfdW5sZXNzIChydHBfc3JjICE9IE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc3JjKTsKLQotICBydGNwX3NyYyA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwYmluLCAic2VuZF9ydGNwX3NyY18xIik7Ci0gIGZhaWxfdW5sZXNzIChydGNwX3NyYyAhPSBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydGNwX3NyYyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0Y3Bfc3JjKTsKLQotICBydHBfc3JjID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0cGJpbiwgInNlbmRfcnRwX3NyY18zIik7Ci0gIGZhaWxfdW5sZXNzIChydHBfc3JjICE9IE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc3JjKTsKLQotICAvKiByZW1vdmUgdGhlIHNlc3Npb24gKi8KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc2luazEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotYXV4X3JlY2VpdmVyX2NiIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0KLSAgYmluID0gZ3N0X2Jpbl9uZXcgKE5VTEwpOwotCi0gIEdTVF9ERUJVRyAoIm1ha2luZyBBVVggcmVjZWl2ZXIiKTsKLSAgc3JjcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgic3JjXzIiLCBHU1RfUEFEX1NSQyk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgc3JjcGFkKTsKLQotICBzaW5rcGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0ICgic2lua18yIiwgR1NUX1BBRF9TSU5LKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBzaW5rcGFkKTsKLSAgc2lua3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldCAoInNpbmtfMSIsIEdTVF9QQURfU0lOSyk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKGJpbiwgc2lua3BhZCk7Ci0gIHNpbmtwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXQgKCJzaW5rXzMiLCBHU1RfUEFEX1NJTkspOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIHNpbmtwYWQpOwotCi0gIHJldHVybiBiaW47Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2F1eF9yZWNlaXZlcikKLXsKLSAgR3N0RWxlbWVudCAqcnRwYmluOwotICBHc3RQYWQgKnJ0cF9zaW5rMSwgKnJ0cF9zaW5rMiwgKnJ0Y3Bfc2luazsKLSAgZ3Vsb25nIGlkOwotCi0gIHJ0cGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cGJpbiIsICJydHBiaW4iKTsKLQotICBpZCA9IGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgInJlcXVlc3QtYXV4LXJlY2VpdmVyIiwKLSAgICAgIChHQ2FsbGJhY2spIGF1eF9yZWNlaXZlcl9jYiwgTlVMTCk7Ci0KLSAgcnRwX3NpbmsxID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJyZWN2X3J0cF9zaW5rXzIiKTsKLSAgZmFpbF91bmxlc3MgKHJ0cF9zaW5rMSAhPSBOVUxMKTsKLQotICBydHBfc2luazIgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgInJlY3ZfcnRwX3NpbmtfMSIpOwotICBmYWlsX3VubGVzcyAocnRwX3NpbmsyICE9IE5VTEwpOwotCi0gIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAocnRwYmluLCBpZCk7Ci0KLSAgcnRjcF9zaW5rID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJyZWN2X3J0Y3Bfc2lua18xIik7Ci0gIGZhaWxfdW5sZXNzIChydGNwX3NpbmsgIT0gTlVMTCk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cGJpbiwgcnRjcF9zaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRjcF9zaW5rKTsKLQotICAvKiByZW1vdmUgdGhlIHNlc3Npb24gKi8KLSAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZCAocnRwYmluLCBydHBfc2luazEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydHBfc2luazEpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChydHBiaW4sIHJ0cF9zaW5rMik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cF9zaW5rMik7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocnRwYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcnRwYmluX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInJ0cGJpbiIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wYWRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NsZWFudXBfc2VuZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jbGVhbnVwX3JlY3YpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY2xlYW51cF9yZWN2Mik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9yZXF1ZXN0X3BhZF9ieV90ZW1wbGF0ZV9uYW1lKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VuY29kZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVjb2Rlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hdXhfc2VuZGVyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2F1eF9yZWNlaXZlcik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBiaW4pOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwYmluX2J1ZmZlcl9saXN0LmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW5fYnVmZmVyX2xpc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhNzc5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBiaW5fYnVmZmVyX2xpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBVbml0IHRlc3QgZm9yIGdzdHJ0cGJpbiBzZW5kaW5nIHJ0cCBwYWNrZXRzIHVzaW5nIEdzdEJ1ZmZlckxpc3QuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJhbmtvIFN1YmFzaWMgPGJyYW5rbyBkb3Qgc3ViYXNpYyBhdCBheGlzIGRvdCBjb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotCi0jaWYgMAotCi0vKiBUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IFJUUCBwYWNrZXRzIHNlbnQgYXMgYnVmZmVyIGxpc3RzIGFyZSBzZW50IHRocm91Z2gKLSAqIHRoZSBydHBiaW4gYXMgdGhleSBhcmUgc3VwcG9zZWQgdG8sIGFuZCBub3QgY29ycnVwdGVkIGluIGFueSB3YXkuCi0gKi8KLQotCi0jZGVmaW5lIFRFU1RfQ0FQUyBcCi0gICJhcHBsaWNhdGlvbi94LXJ0cCwgIiAgICAgICAgICAgICAgICBcCi0gICJtZWRpYT0oc3RyaW5nKXZpZGVvLCAiICAgICAgICAgICAgICBcCi0gICJjbG9jay1yYXRlPShpbnQpOTAwMDAsICIgICAgICAgICAgICBcCi0gICJlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2NCwgIiAgICAgICBcCi0gICJwcm9maWxlLWxldmVsLWlkPShzdHJpbmcpNGQ0MDE1LCAiICBcCi0gICJwYXlsb2FkPShpbnQpOTYsICIgICAgICAgICAgICAgICAgICBcCi0gICJzc3JjPShndWludCkyNjMzMjM3NDMyLCAiICAgICAgICAgICBcCi0gICJjbG9jay1iYXNlPShndWludCkxODY4MjY3MDE1LCAiICAgICBcCi0gICJzZXFudW0tYmFzZT0oZ3VpbnQpNTQyMjkiCi0KLQotLyogUlRQIGhlYWRlcnMgYW5kIHRoZSBmaXJzdCAyIGJ5dGVzIG9mIHRoZSBwYXlsb2FkIChGVSBpbmRpY2F0b3IgYW5kIEZVIGhlYWRlcikKLSAqLwotc3RhdGljIGNvbnN0IGd1aW50OCBydHBfaGVhZGVyWzJdWzE0XSA9IHsKLSAgezB4ODAsIDB4NjAsIDB4YmIsIDB4YjcsIDB4NWMsIDB4ZTksIDB4MDksCi0gICAgICAweDBkLCAweGY1LCAweDljLCAweDQzLCAweDU1LCAweDFjLCAweDg2fSwKLSAgezB4ODAsIDB4NjAsIDB4YmIsIDB4YjgsIDB4NWMsIDB4ZTksIDB4MDksCi0gICAgICAweDBkLCAweGY1LCAweDljLCAweDQzLCAweDU1LCAweDFjLCAweDQ2fQotfTsKLQotc3RhdGljIGNvbnN0IGd1aW50IHJ0cF9oZWFkZXJfbGVuW10gPSB7Ci0gIHNpemVvZiBydHBfaGVhZGVyWzBdLAotICBzaXplb2YgcnRwX2hlYWRlclsxXQotfTsKLQotc3RhdGljIEdzdEJ1ZmZlciAqaGVhZGVyX2J1ZmZlclsyXSA9IHsgTlVMTCwgTlVMTCB9OwotCi0KLS8qIFNvbWUgcGF5bG9hZC4KLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnBheWxvYWQgPQotICAgICIwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRiIKLSAgICAiMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYiCi0gICAgIjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGIgotICAgICIwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRiIKLSAgICAiMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYiCi0gICAgIjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1Njc4OUFCU0RFRjAxMjM0NTY3ODlBQlNERUYwMTIzNDU2Nzg5QUJTREVGIgotICAgICIwMTIzNDU2Nzg5QUJTREVGMDEyMzQ1NiI7Ci0KLXN0YXRpYyBjb25zdCBndWludCBwYXlsb2FkX29mZnNldFtdID0gewotICAwLCA0OTgKLX07Ci0KLXN0YXRpYyBjb25zdCBndWludCBwYXlsb2FkX2xlbltdID0gewotICA0OTgsIDUKLX07Ci0KLQotc3RhdGljIEdzdEJ1ZmZlciAqb3JpZ2luYWxfYnVmZmVyID0gTlVMTDsKLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKSk7Ci0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1fY3JlYXRlX29yaWdpbmFsX2J1ZmZlciAodm9pZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBpZiAob3JpZ2luYWxfYnVmZmVyICE9IE5VTEwpCi0gICAgcmV0dXJuIG9yaWdpbmFsX2J1ZmZlcjsKLQotICBvcmlnaW5hbF9idWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKG9yaWdpbmFsX2J1ZmZlciAhPSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX3NldF9kYXRhIChvcmlnaW5hbF9idWZmZXIsIChndWludDggKikgcGF5bG9hZCwgc3RybGVuIChwYXlsb2FkKSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChvcmlnaW5hbF9idWZmZXIpID0KLSAgICAgIGdzdF9jbG9ja19nZXRfaW50ZXJuYWxfdGltZSAoZ3N0X3N5c3RlbV9jbG9ja19vYnRhaW4gKCkpOwotCi0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoVEVTVF9DQVBTKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfc2V0X2NhcHMgKG9yaWdpbmFsX2J1ZmZlciwgY2Fwcyk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICByZXR1cm4gb3JpZ2luYWxfYnVmZmVyOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyTGlzdCAqCi1fY3JlYXRlX2J1ZmZlcl9saXN0ICh2b2lkKQotewotICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotICBHc3RCdWZmZXJMaXN0SXRlcmF0b3IgKml0OwotICBHc3RCdWZmZXIgKm9yaWdfYnVmZmVyOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLQotICBvcmlnX2J1ZmZlciA9IF9jcmVhdGVfb3JpZ2luYWxfYnVmZmVyICgpOwotICBmYWlsX2lmIChvcmlnX2J1ZmZlciA9PSBOVUxMKTsKLQotICBsaXN0ID0gZ3N0X2J1ZmZlcl9saXN0X25ldyAoKTsKLSAgZmFpbF9pZiAobGlzdCA9PSBOVUxMKTsKLQotICBpdCA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRlIChsaXN0KTsKLSAgZmFpbF9pZiAoaXQgPT0gTlVMTCk7Ci0KLSAgLyoqKiBGaXJzdCBncm91cCwgaS5lLiBmaXJzdCBwYWNrZXQuICoqLwotICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkX2dyb3VwIChpdCk7Ci0KLSAgLyogQ3JlYXRlIGJ1ZmZlciB3aXRoIFJUUCBoZWFkZXIgYW5kIGFkZCBpdCB0byB0aGUgMXN0IGdyb3VwICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3ICgpOwotICBHU1RfQlVGRkVSX01BTExPQ0RBVEEgKGJ1ZmZlcikgPSBnX21lbWR1cCAoJnJ0cF9oZWFkZXJbMF0sIHJ0cF9oZWFkZXJfbGVuWzBdKTsKLSAgR1NUX0JVRkZFUl9EQVRBIChidWZmZXIpID0gR1NUX0JVRkZFUl9NQUxMT0NEQVRBIChidWZmZXIpOwotICBHU1RfQlVGRkVSX1NJWkUgKGJ1ZmZlcikgPSBydHBfaGVhZGVyX2xlblswXTsKLSAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhIChidWZmZXIsIG9yaWdfYnVmZmVyLCBHU1RfQlVGRkVSX0NPUFlfQUxMKTsKLSAgaGVhZGVyX2J1ZmZlclswXSA9IGJ1ZmZlcjsKLSAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZCAoaXQsIGJ1ZmZlcik7Ci0KLSAgLyogQ3JlYXRlIHRoZSBwYXlsb2FkIGJ1ZmZlciBhbmQgYWRkIGl0IHRvIHRoZSAxc3QgZ3JvdXAKLSAgICovCi0gIGJ1ZmZlciA9Ci0gICAgICBnc3RfYnVmZmVyX2NyZWF0ZV9zdWIgKG9yaWdfYnVmZmVyLCBwYXlsb2FkX29mZnNldFswXSwgcGF5bG9hZF9sZW5bMF0pOwotICBmYWlsX2lmIChidWZmZXIgPT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9hZGQgKGl0LCBidWZmZXIpOwotCi0KLSAgLyoqKiAgU2Vjb25kIGdyb3VwLCBpLmUuIHNlY29uZCBwYWNrZXQuICoqKi8KLQotICAvKiBDcmVhdGUgYSBuZXcgZ3JvdXAgdG8gaG9sZCB0aGUgcnRwIGhlYWRlciBhbmQgdGhlIHBheWxvYWQgKi8KLSAgZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX2FkZF9ncm91cCAoaXQpOwotCi0gIC8qIENyZWF0ZSBidWZmZXIgd2l0aCBSVFAgaGVhZGVyIGFuZCBhZGQgaXQgdG8gdGhlIDJuZCBncm91cCAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ldyAoKTsKLSAgR1NUX0JVRkZFUl9NQUxMT0NEQVRBIChidWZmZXIpID0gZ19tZW1kdXAgKCZydHBfaGVhZGVyWzFdLCBydHBfaGVhZGVyX2xlblsxXSk7Ci0gIEdTVF9CVUZGRVJfREFUQSAoYnVmZmVyKSA9IEdTVF9CVUZGRVJfTUFMTE9DREFUQSAoYnVmZmVyKTsKLSAgR1NUX0JVRkZFUl9TSVpFIChidWZmZXIpID0gcnRwX2hlYWRlcl9sZW5bMV07Ci0gIGdzdF9idWZmZXJfY29weV9tZXRhZGF0YSAoYnVmZmVyLCBvcmlnX2J1ZmZlciwgR1NUX0JVRkZFUl9DT1BZX0FMTCk7Ci0gIGhlYWRlcl9idWZmZXJbMV0gPSBidWZmZXI7Ci0KLSAgLyogQWRkIHRoZSBydHAgaGVhZGVyIHRvIHRoZSBidWZmZXIgbGlzdCAqLwotICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkIChpdCwgYnVmZmVyKTsKLQotICAvKiBDcmVhdGUgdGhlIHBheWxvYWQgYnVmZmVyIGFuZCBhZGQgaXQgdG8gdGhlIDJkIGdyb3VwCi0gICAqLwotICBidWZmZXIgPQotICAgICAgZ3N0X2J1ZmZlcl9jcmVhdGVfc3ViIChvcmlnX2J1ZmZlciwgcGF5bG9hZF9vZmZzZXRbMV0sIHBheWxvYWRfbGVuWzFdKTsKLSAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOwotICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfYWRkIChpdCwgYnVmZmVyKTsKLQotICBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfZnJlZSAoaXQpOwotCi0gIHJldHVybiBsaXN0OwotfQotCi0KLXN0YXRpYyB2b2lkCi1fY2hlY2tfaGVhZGVyIChHc3RCdWZmZXIgKiBidWZmZXIsIGd1aW50IGluZGV4KQotewotICBndWludDggKmRhdGE7Ci0KLSAgZmFpbF9pZiAoYnVmZmVyID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5kZXggPCAyKTsKLQotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9TSVpFIChidWZmZXIpID09IHJ0cF9oZWFkZXJfbGVuW2luZGV4XSk7Ci0KLSAgLyogQ2FuJ3QgZG8gYSBtZW1jbXAoKSBvbiB0aGUgd2hvbGUgaGVhZGVyLCBjYXVzZSB0aGUgU1NSQyAoYnl0ZXMgOC0xMSkgd2lsbAotICAgKiBtb3N0IGxpa2VseSBiZSBjaGFuZ2VkIGluIGdzdHJ0cGJpbi4KLSAgICovCi0gIGZhaWxfdW5sZXNzICgoZGF0YSA9IEdTVF9CVUZGRVJfREFUQSAoYnVmZmVyKSkgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKCooZ3VpbnQ2NCAqKSBkYXRhLCAqKGd1aW50NjQgKikgcnRwX2hlYWRlcltpbmRleF0pOwotICBmYWlsX3VubGVzcyAoKihndWludDE2ICopIChkYXRhICsgMTIpID09Ci0gICAgICAqKGd1aW50MTYgKikgKHJ0cF9oZWFkZXJbaW5kZXhdICsgMTIpKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotX2NoZWNrX3BheWxvYWQgKEdzdEJ1ZmZlciAqIGJ1ZmZlciwgZ3VpbnQgaW5kZXgpCi17Ci0gIGZhaWxfaWYgKGJ1ZmZlciA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluZGV4IDwgMik7Ci0KLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfU0laRSAoYnVmZmVyKSA9PSBwYXlsb2FkX2xlbltpbmRleF0pOwotICBmYWlsX2lmIChHU1RfQlVGRkVSX0RBVEEgKGJ1ZmZlcikgIT0KLSAgICAgIChncG9pbnRlcikgKHBheWxvYWQgKyBwYXlsb2FkX29mZnNldFtpbmRleF0pKTsKLSAgZmFpbF9pZiAobWVtY21wIChHU1RfQlVGRkVSX0RBVEEgKGJ1ZmZlciksIHBheWxvYWQgKyBwYXlsb2FkX29mZnNldFtpbmRleF0sCi0gICAgICAgICAgcGF5bG9hZF9sZW5baW5kZXhdKSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLV9jaGVja19ncm91cCAoR3N0QnVmZmVyTGlzdEl0ZXJhdG9yICogaXQsIGd1aW50IGluZGV4LCBHc3RDYXBzICogY2FwcykKLXsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgZmFpbF91bmxlc3MgKGl0ICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25fYnVmZmVycyAoaXQpID09IDIpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoKGJ1ZmZlciA9IGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0IChpdCkpICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9PQotICAgICAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKG9yaWdpbmFsX2J1ZmZlcikpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoR1NUX0JVRkZFUl9DQVBTIChvcmlnaW5hbF9idWZmZXIpLAotICAgICAgICAgIEdTVF9CVUZGRVJfQ0FQUyAoYnVmZmVyKSkpOwotCi0gIF9jaGVja19oZWFkZXIgKGJ1ZmZlciwgaW5kZXgpOwotCi0gIGZhaWxfdW5sZXNzICgoYnVmZmVyID0gZ3N0X2J1ZmZlcl9saXN0X2l0ZXJhdG9yX25leHQgKGl0KSkgIT0gTlVMTCk7Ci0gIF9jaGVja19wYXlsb2FkIChidWZmZXIsIGluZGV4KTsKLX0KLQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotX3NpbmtfY2hhaW5fbGlzdCAoR3N0UGFkICogcGFkLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0QnVmZmVyTGlzdEl0ZXJhdG9yICppdDsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFRFU1RfQ0FQUyk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfSVNfQlVGRkVSX0xJU1QgKGxpc3QpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9uX2dyb3VwcyAobGlzdCkgPT0gMik7Ci0KLSAgaXQgPSBnc3RfYnVmZmVyX2xpc3RfaXRlcmF0ZSAobGlzdCk7Ci0gIGZhaWxfaWYgKGl0ID09IE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX2xpc3RfaXRlcmF0b3JfbmV4dF9ncm91cCAoaXQpKTsKLSAgX2NoZWNrX2dyb3VwIChpdCwgMCwgY2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9uZXh0X2dyb3VwIChpdCkpOwotICBfY2hlY2tfZ3JvdXAgKGl0LCAxLCBjYXBzKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9idWZmZXJfbGlzdF9pdGVyYXRvcl9mcmVlIChpdCk7Ci0KLSAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmIChsaXN0KTsKLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLQotc3RhdGljIHZvaWQKLV9zZXRfY2hhaW5fZnVuY3Rpb25zIChHc3RQYWQgKiBwYWQpCi17Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2xpc3RfZnVuY3Rpb24gKHBhZCwgX3NpbmtfY2hhaW5fbGlzdCk7Ci19Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYnVmZmVybGlzdCkKLXsKLSAgR3N0RWxlbWVudCAqcnRwYmluOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotCi0gIGxpc3QgPSBfY3JlYXRlX2J1ZmZlcl9saXN0ICgpOwotICBmYWlsX3VubGVzcyAobGlzdCAhPSBOVUxMKTsKLQotICBydHBiaW4gPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoImdzdHJ0cGJpbiIpOwotCi0gIHNyY3BhZCA9Ci0gICAgICBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lIChydHBiaW4sICZzcmN0ZW1wbGF0ZSwgInNlbmRfcnRwX3NpbmtfMCIpOwotICBmYWlsX2lmIChzcmNwYWQgPT0gTlVMTCk7Ci0gIHNpbmtwYWQgPQotICAgICAgZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWUgKHJ0cGJpbiwgJnNpbmt0ZW1wbGF0ZSwKLSAgICAgICJzZW5kX3J0cF9zcmNfMCIpOwotICBmYWlsX2lmIChzaW5rcGFkID09IE5VTEwpOwotCi0gIF9zZXRfY2hhaW5fZnVuY3Rpb25zIChzaW5rcGFkKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHJ0cGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2xpc3QgKHNyY3BhZCwgbGlzdCkgPT0gR1NUX0ZMT1dfT0spOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIEZBTFNFKTsKLQotICBnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgKHJ0cGJpbiwgInNlbmRfcnRwX3NyY18wIik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAocnRwYmluLCAic2VuZF9ydHBfc2lua18wIik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChydHBiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNlbmRpZgotCi0KLXN0YXRpYyBTdWl0ZSAqCi1idWZmZXJsaXN0X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoIkJ1ZmZlckxpc3QiKTsKLQotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgMzBzLiAqLwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDEwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSNpZiAwCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9idWZmZXJsaXN0KTsKLSNlbmRpZgotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoYnVmZmVybGlzdCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBjb2xsaXNpb24uYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmY2NjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGNvbGxpc2lvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogICBAYXV0aG9yIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvbmV0L2dzdG5ldGFkZHJlc3NtZXRhLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0Y3BidWZmZXIuaD4KLQotc3RhdGljIEdNYWluTG9vcCAqbWFpbl9sb29wOwotc3RhdGljIEdzdFBhZCAqc3JjcGFkOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydGNwIikKLSAgICApOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydGNwIikKLSAgICApOwotCi1zdGF0aWMgdm9pZAotbWVzc2FnZV9yZWNlaXZlZCAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgR3N0UGlwZWxpbmUgKiBiaW4pCi17Ci0gIEdTVF9JTkZPICgiYnVzIG1lc3NhZ2UgZnJvbSBcIiUiIEdTVF9QVFJfRk9STUFUICJcIjogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBtZXNzYWdlKTsKLQotICBzd2l0Y2ggKG1lc3NhZ2UtPnR5cGUpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIGdlcnJvciwgZGVidWcpOwotICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWNyZWF0ZV9ydGNwX2FwcCAoZ3VpbnQzMiBzc3JjLCBndWludCBjb3VudCkKLXsKLSAgR0luZXRBZGRyZXNzICppbmV0X2FkZHJfMDsKLSAgZ3VpbnQxNiBwb3J0ID0gNTY3OCArIGNvdW50OwotICBHU29ja2V0QWRkcmVzcyAqc29ja2V0X2FkZHJfMDsKLSAgR3N0QnVmZmVyICpydGNwX2J1ZmZlcjsKLSAgR3N0UlRDUFBhY2tldCAqcnRjcF9wYWNrZXQgPSBOVUxMOwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSBHU1RfUlRDUF9CVUZGRVJfSU5JVDsKLQotICBpbmV0X2FkZHJfMCA9IGdfaW5ldF9hZGRyZXNzX25ld19mcm9tX3N0cmluZyAoIjE5Mi4xNjguMS4xIik7Ci0gIHNvY2tldF9hZGRyXzAgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3IChpbmV0X2FkZHJfMCwgcG9ydCk7Ci0gIGdfb2JqZWN0X3VucmVmIChpbmV0X2FkZHJfMCk7Ci0KLSAgcnRjcF9idWZmZXIgPSBnc3RfcnRjcF9idWZmZXJfbmV3ICgxNDAwKTsKLSAgZ3N0X2J1ZmZlcl9hZGRfbmV0X2FkZHJlc3NfbWV0YSAocnRjcF9idWZmZXIsIHNvY2tldF9hZGRyXzApOwotICBnX29iamVjdF91bnJlZiAoc29ja2V0X2FkZHJfMCk7Ci0KLSAgLyogbmVlZCB0byBiZWdpbiB3aXRoIHJyICovCi0gIGdzdF9ydGNwX2J1ZmZlcl9tYXAgKHJ0Y3BfYnVmZmVyLCBHU1RfTUFQX1JFQURXUklURSwgJnJ0Y3ApOwotICBydGNwX3BhY2tldCA9IGdfc2xpY2VfbmV3MCAoR3N0UlRDUFBhY2tldCk7Ci0gIGdzdF9ydGNwX2J1ZmZlcl9hZGRfcGFja2V0ICgmcnRjcCwgR1NUX1JUQ1BfVFlQRV9SUiwgcnRjcF9wYWNrZXQpOwotICBnc3RfcnRjcF9wYWNrZXRfcnJfc2V0X3NzcmMgKHJ0Y3BfcGFja2V0LCBzc3JjKTsKLSAgZ19zbGljZV9mcmVlIChHc3RSVENQUGFja2V0LCBydGNwX3BhY2tldCk7Ci0KLSAgLyogdXNlZnVsIHRvIG1ha2UgdGhlIHJ0Y3AgYnVmZmVyIHZhbGlkICovCi0gIHJ0Y3BfcGFja2V0ID0gZ19zbGljZV9uZXcwIChHc3RSVENQUGFja2V0KTsKLSAgZ3N0X3J0Y3BfYnVmZmVyX2FkZF9wYWNrZXQgKCZydGNwLCBHU1RfUlRDUF9UWVBFX0FQUCwgcnRjcF9wYWNrZXQpOwotICBnX3NsaWNlX2ZyZWUgKEdzdFJUQ1BQYWNrZXQsIHJ0Y3BfcGFja2V0KTsKLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0KLSAgcmV0dXJuIHJ0Y3BfYnVmZmVyOwotfQotCi1zdGF0aWMgZ3VpbnQgbmJfc3NyY19jaGFuZ2VzOwotc3RhdGljIGd1aW50IHNzcmNfcHJldjsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ydHBzZXNzaW9uX3NpbmtwYWRfcHJvYmUgKEdzdFBhZCAqIHBhZCwgR3N0UGFkUHJvYmVJbmZvICogaW5mbywKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdFBhZFByb2JlUmV0dXJuIHJldCA9IEdTVF9QQURfUFJPQkVfT0s7Ci0KLSAgaWYgKGluZm8tPnR5cGUgPT0gKEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIgfCBHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCkpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IEdTVF9CVUZGRVIgKGluZm8tPmRhdGEpOwotICAgIEdzdFJUUEJ1ZmZlciBydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICAgIEdzdEJ1ZmZlciAqcnRjcF9idWZmZXIgPSAwOwotICAgIGd1aW50IHNzcmMgPSAwOwotCi0gICAgLyogcmV0cmlldmUgY3VycmVudCBzc3JjICovCi0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cCk7Ci0gICAgc3NyYyA9IGdzdF9ydHBfYnVmZmVyX2dldF9zc3JjICgmcnRwKTsKLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICAvKiBpZiBub3QgZmlyc3QgYnVmZmVyLCBjaGVjayB0aGF0IG91ciBzc3JjIGhhcyBjaGFuZ2VkICovCi0gICAgaWYgKHNzcmNfcHJldiAhPSAtMSAmJiBzc3JjICE9IHNzcmNfcHJldikKLSAgICAgICsrbmJfc3NyY19jaGFuZ2VzOwotCi0gICAgLyogdXBkYXRlIHByZXYgc3NyYyAqLwotICAgIHNzcmNfcHJldiA9IHNzcmM7Ci0KLSAgICAvKiBmZWludCBhIGNvbGxpc2lvbiBvbiByZWN2X3J0Y3Bfc2luayBwYWQgb2YgZ3N0cnRwc2Vzc2lvbgotICAgICAqIChub3RlIHRoYXQgYWZ0ZXIgYmVpbmcgbWFya2VkIGFzIGNvbGxpZWQgdGhlIHJ0cHNlc3Npb24gaWdub3JlcwotICAgICAqIGFsbCBub24gYnllIHBhY2tldHMpCi0gICAgICovCi0gICAgcnRjcF9idWZmZXIgPSBjcmVhdGVfcnRjcF9hcHAgKHNzcmMsIG5iX3NzcmNfY2hhbmdlcyk7Ci0KLSAgICAvKiBwdXNoIGNvbGxpZWQgcGFja2V0IG9uIHJlY3ZfcnRjcF9zaW5rICovCi0gICAgZ3N0X3BhZF9wdXNoIChzcmNwYWQsIHJ0Y3BfYnVmZmVyKTsKLSAgfQotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RGbG93UmV0dXJuCi1mYWtlX3VkcF9zaW5rX2NoYWluX2Z1bmMgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWZmZXIpCi17Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotLyogVGhpcyB0ZXN0IGJ1aWxkIHRoZSBwaXBlbGluZSBhdWRpb3Rlc3RzcmMgISBhbGF3ZW5jICEgcnRwcGNtYXBheSAhIFwKLSAqIHJ0cHNlc3Npb24gISBmYWtlc2luawotICogSXQgbWFudWFsbHkgcHVzaHMgYnVmZmVyIGludG8gcnRwc2Vzc2lvbiB3aXRoIHNhbWUgc3NyYyBidXQgZGlmZmVyZW50Ci0gKiBpcCBzbyB0aGF0IGNvbGxpc2lvbiBjYW4gYmUgZGV0ZWN0ZWQKLSAqIFRoZSB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBwYXlsb2FkZXIgY2hhbmdlIHRoZWlyIHNzcmMKLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbWFzdGVyX3NzcmNfY29sbGlzaW9uKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmMsICplbmNvZGVyLCAqcnRwcGF5bG9hZGVyLCAqcnRwc2Vzc2lvbiwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzID0gTlVMTDsKLSAgZ2Jvb2xlYW4gcmVzID0gRkFMU0U7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0UGFkICpzaW5rcGFkID0gTlVMTDsKLSAgR3N0UGFkICpydGNwX3NpbmtwYWQgPSBOVUxMOwotICBHc3RQYWQgKmZha2VfdWRwX3NpbmtwYWQgPSBOVUxMOwotICBHc3RQYWQgKnJ0Y3Bfc3JjcGFkID0gTlVMTDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwotCi0gIEdTVF9JTkZPICgicHJlcGFyaW5nIHRlc3QiKTsKLQotICBuYl9zc3JjX2NoYW5nZXMgPSAwOwotICBzc3JjX3ByZXYgPSAtMTsKLQotICAvKiBidWlsZCBwaXBlbGluZSAqLwotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYmluKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKGJ1cywgR19QUklPUklUWV9ISUdIKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCA1LCBOVUxMKTsKLSAgZW5jb2RlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImFsYXdlbmMiLCBOVUxMKTsKLSAgcnRwcGF5bG9hZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwcGNtYXBheSIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJ0cHBheWxvYWRlciwgInB0IiwgOCwgTlVMTCk7Ci0gIHJ0cHNlc3Npb24gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBzZXNzaW9uIiwgTlVMTCk7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgZW5jb2RlciwgcnRwcGF5bG9hZGVyLAotICAgICAgcnRwc2Vzc2lvbiwgc2luaywgTlVMTCk7Ci0KLSAgLyogbGluayBlbGVtZW50cyAqLwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChzcmMsIGVuY29kZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChlbmNvZGVyLCBydHBwYXlsb2FkZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAocnRwcGF5bG9hZGVyLCAic3JjIiwKLSAgICAgIHJ0cHNlc3Npb24sICJzZW5kX3J0cF9zaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAocnRwc2Vzc2lvbiwgInNlbmRfcnRwX3NyYyIsCi0gICAgICBzaW5rLCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICAvKiBhZGQgcHJvYmUgb24gcnRwc2Vzc2lvbiBzaW5rIHBhZCB0byBpbmR1Y2UgY29sbGlzaW9uICovCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocnRwc2Vzc2lvbiwgInNlbmRfcnRwX3NpbmsiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNpbmtwYWQsCi0gICAgICAoR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIKSwKLSAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBydHBzZXNzaW9uX3NpbmtwYWRfcHJvYmUsIE5VTEwsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiBzZXR1cCBydGNwIGxpbmsgKi8KLSAgc3JjcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzcmN0ZW1wbGF0ZSwgInNyYyIpOwotICBydGNwX3NpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cHNlc3Npb24sICJyZWN2X3J0Y3Bfc2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChzcmNwYWQsIHJ0Y3Bfc2lua3BhZCkgPT0gR1NUX1BBRF9MSU5LX09LLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRjcF9zaW5rcGFkKTsKLSAgcmVzID0gZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIFRSVUUpOwotICBmYWlsX2lmIChyZXMgPT0gRkFMU0UpOwotICByZXMgPQotICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsCi0gICAgICBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoIm15X3J0Y3Bfc3RyZWFtX2lkIikpOwotICBmYWlsX2lmIChyZXMgPT0gRkFMU0UpOwotICBnc3Rfc2VnbWVudF9pbml0ICgmc2VnbWVudCwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgcmVzID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZ21lbnQpKTsKLSAgZmFpbF9pZiAocmVzID09IEZBTFNFKTsKLQotICBmYWtlX3VkcF9zaW5rcGFkID0gZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZzaW5rdGVtcGxhdGUsICJzaW5rIik7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChmYWtlX3VkcF9zaW5rcGFkLCBmYWtlX3VkcF9zaW5rX2NoYWluX2Z1bmMpOwotICBydGNwX3NyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwc2Vzc2lvbiwgInNlbmRfcnRjcF9zcmMiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAocnRjcF9zcmNwYWQsIGZha2VfdWRwX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSywKLSAgICAgIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChydGNwX3NyY3BhZCk7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2FjdGl2ZSAoZmFrZV91ZHBfc2lua3BhZCwgVFJVRSk7Ci0gIGZhaWxfaWYgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgLyogY29ubmVjdCBtZXNzYWdlcyAqLwotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZXJyb3IiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjp3YXJuaW5nIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZW9zIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLQotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgR1NUX0lORk8gKCJydW5uaW5nIG1haW4gbG9vcCIpOwotICBnX21haW5fbG9vcF9ydW4gKG1haW5fbG9vcCk7Ci0KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZmFrZV91ZHBfc2lua3BhZCk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOwotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci0KLSAgLyogY2hlY2sgcmVzdWx0cyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChuYl9zc3JjX2NoYW5nZXMsIDQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBndWludCBzc3JjX2JlZm9yZTsKLXN0YXRpYyBndWludCBzc3JjX2FmdGVyOwotc3RhdGljIGd1aW50IHJ0eF9zc3JjX2JlZm9yZTsKLXN0YXRpYyBndWludCBydHhfc3NyY19hZnRlcjsKLQotc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuCi1ydHBzZXNzaW9uX3NpbmtwYWRfcHJvYmUyIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RQYWRQcm9iZVJldHVybiByZXQgPSBHU1RfUEFEX1BST0JFX09LOwotCi0gIGlmIChpbmZvLT50eXBlID09IChHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSIHwgR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0gpKSB7Ci0gICAgR3N0QnVmZmVyICpidWZmZXIgPSBHU1RfQlVGRkVSIChpbmZvLT5kYXRhKTsKLSAgICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgICBndWludCBwYXlsb2FkX3R5cGUgPSAwOwotCi0gICAgc3RhdGljIGdpbnQgaSA9IDA7Ci0KLSAgICAvKiByZXRyaWV2ZSBjdXJyZW50IHNzcmMgZm9yIHJldHJhbnNtaXNzaW9uIHN0cmVhbSBvbmx5ICovCi0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cCk7Ci0gICAgcGF5bG9hZF90eXBlID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfdHlwZSAoJnJ0cCk7Ci0gICAgaWYgKHBheWxvYWRfdHlwZSA9PSA5OSkgewotICAgICAgaWYgKGkgPCAzKQotICAgICAgICBydHhfc3NyY19iZWZvcmUgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoJnJ0cCk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJ0eF9zc3JjX2FmdGVyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZydHApOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBhc2sgdG8gcmV0cmFuc21pdCBldmVyeSBwYWNrZXQgKi8KLSAgICAgIEdzdEV2ZW50ICpldmVudCA9IGdzdF9ldmVudF9uZXdfY3VzdG9tIChHU1RfRVZFTlRfQ1VTVE9NX1VQU1RSRUFNLAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IiwKLSAgICAgICAgICAgICAgInNlcW51bSIsIEdfVFlQRV9VSU5ULCBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmcnRwKSwKLSAgICAgICAgICAgICAgInNzcmMiLCBHX1RZUEVfVUlOVCwgZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZydHApLAotICAgICAgICAgICAgICBOVUxMKSk7Ci0gICAgICBnc3RfcGFkX3B1c2hfZXZlbnQgKHBhZCwgZXZlbnQpOwotCi0gICAgICBpZiAoaSA8IDMpCi0gICAgICAgIHNzcmNfYmVmb3JlID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZydHApOwotICAgICAgZWxzZQotICAgICAgICBzc3JjX2FmdGVyID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZydHApOwotICAgIH0KLSAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0KLSAgICAvKiBmZWludCBhIGNvbGxpc2lvbiBvbiByZWN2X3J0Y3Bfc2luayBwYWQgb2YgZ3N0cnRwc2Vzc2lvbgotICAgICAqIChub3RlIHRoYXQgYWZ0ZXIgYmVpbmcgbWFya2VkIGFzIGNvbGxpZWQgdGhlIHJ0cHNlc3Npb24gaWdub3JlcwotICAgICAqIGFsbCBub24gYnllIHBhY2tldHMpCi0gICAgICovCi0gICAgaWYgKGkgPT0gMikgewotICAgICAgR3N0QnVmZmVyICpydGNwX2J1ZmZlciA9IGNyZWF0ZV9ydGNwX2FwcCAocnR4X3NzcmNfYmVmb3JlLCAwKTsKLQotICAgICAgLyogcHVzaCBjb2xsaWVkIHBhY2tldCBvbiByZWN2X3J0Y3Bfc2luayAqLwotICAgICAgZ3N0X3BhZF9wdXNoIChzcmNwYWQsIHJ0Y3BfYnVmZmVyKTsKLSAgICB9Ci0KLSAgICArK2k7Ci0gIH0KLQotICByZXR1cm4gcmV0OwotfQotCi0vKiBUaGlzIHRlc3QgYnVpbGQgdGhlIHBpcGVsaW5lIGF1ZGlvdGVzdHNyYyAhIGFsYXdlbmMgISBydHBwY21hcGF5ICEgXAotICogcnRwcnR4c2VuZCAhIHJ0cHNlc3Npb24gISBmYWtlc2luawotICogSXQgbWFudWFsbHkgcHVzaHMgYnVmZmVyIGludG8gcnRwc2Vzc2lvbiB3aXRoIHNhbWUgc3NyYyB0aGFuIHJ0eCBzdHJlYW0KLSAqIGJ1dCBkaWZmZXJlbnQgaXAgc28gdGhhdCBjb2xsaXNpb24gY2FuIGJlIGRldGVjdGVkCi0gKiBUaGUgdGVzdCBjaGVja3MgdGhhdCB0aGUgcnR4IGVsZW1lbnRzIGNoYW5nZXMgaXRzIHNzcmMgd2hlcmVhcwotICogdGhlIHBheWxvYWRlciBrZWVwcyBpdHMgbWFzdGVyIHNzcmMKLSAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcnR4X3NzcmNfY29sbGlzaW9uKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmMsICplbmNvZGVyLCAqcnRwcGF5bG9hZGVyLCAqcnRwcnR4c2VuZCwgKnJ0cHNlc3Npb24sCi0gICAgICAqc2luazsKLSAgR3N0QnVzICpidXMgPSBOVUxMOwotICBnYm9vbGVhbiByZXMgPSBGQUxTRTsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RQYWQgKnNpbmtwYWQgPSBOVUxMOwotICBHc3RQYWQgKnJ0Y3Bfc2lua3BhZCA9IE5VTEw7Ci0gIEdzdFBhZCAqZmFrZV91ZHBfc2lua3BhZCA9IE5VTEw7Ci0gIEdzdFBhZCAqcnRjcF9zcmNwYWQgPSBOVUxMOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXMgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7Ci0gIEdzdFN0cnVjdHVyZSAqcHRfbWFwOwotCi0gIEdTVF9JTkZPICgicHJlcGFyaW5nIHRlc3QiKTsKLQotICAvKiBidWlsZCBwaXBlbGluZSAqLwotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYmluKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKGJ1cywgR19QUklPUklUWV9ISUdIKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCA1LCBOVUxMKTsKLSAgZW5jb2RlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImFsYXdlbmMiLCBOVUxMKTsKLSAgcnRwcGF5bG9hZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwcGNtYXBheSIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJ0cHBheWxvYWRlciwgInB0IiwgOCwgTlVMTCk7Ci0gIHJ0cHJ0eHNlbmQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBydHhzZW5kIiwgTlVMTCk7Ci0gIHB0X21hcCA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtcHQtbWFwIiwKLSAgICAgICI4IiwgR19UWVBFX1VJTlQsIDk5LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChydHBydHhzZW5kLCAicGF5bG9hZC10eXBlLW1hcCIsIHB0X21hcCwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHRfbWFwKTsKLSAgcnRwc2Vzc2lvbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHNlc3Npb24iLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjLCBlbmNvZGVyLCBydHBwYXlsb2FkZXIsIHJ0cHJ0eHNlbmQsCi0gICAgICBydHBzZXNzaW9uLCBzaW5rLCBOVUxMKTsKLQotICAvKiBsaW5rIGVsZW1lbnRzICovCi0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHNyYywgZW5jb2Rlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKGVuY29kZXIsIHJ0cHBheWxvYWRlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHJ0cHBheWxvYWRlciwgcnRwcnR4c2VuZCk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsIChydHBydHhzZW5kLCAic3JjIiwKLSAgICAgIHJ0cHNlc3Npb24sICJzZW5kX3J0cF9zaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCAocnRwc2Vzc2lvbiwgInNlbmRfcnRwX3NyYyIsCi0gICAgICBzaW5rLCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICAvKiBhZGQgcHJvYmUgb24gcnRwc2Vzc2lvbiBzaW5rIHBhZCB0byBpbmR1Y2UgY29sbGlzaW9uICovCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocnRwc2Vzc2lvbiwgInNlbmRfcnRwX3NpbmsiKTsKLSAgZ3N0X3BhZF9hZGRfcHJvYmUgKHNpbmtwYWQsCi0gICAgICAoR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiB8IEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIKSwKLSAgICAgIChHc3RQYWRQcm9iZUNhbGxiYWNrKSBydHBzZXNzaW9uX3NpbmtwYWRfcHJvYmUyLCBOVUxMLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgLyogc2V0dXAgcnRjcCBsaW5rICovCi0gIHNyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc3JjdGVtcGxhdGUsICJzcmMiKTsKLSAgcnRjcF9zaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBzZXNzaW9uLCAicmVjdl9ydGNwX3NpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBydGNwX3NpbmtwYWQpID09IEdTVF9QQURfTElOS19PSywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0Y3Bfc2lua3BhZCk7Ci0gIHJlcyA9IGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLSAgZmFpbF9pZiAocmVzID09IEZBTFNFKTsKLSAgcmVzID0KLSAgICAgIGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLAotICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJteV9ydGNwX3N0cmVhbV9pZCIpKTsKLSAgZmFpbF9pZiAocmVzID09IEZBTFNFKTsKLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIHJlcyA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSk7Ci0gIGZhaWxfaWYgKHJlcyA9PSBGQUxTRSk7Ci0KLSAgZmFrZV91ZHBfc2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luayIpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAoZmFrZV91ZHBfc2lua3BhZCwgZmFrZV91ZHBfc2lua19jaGFpbl9mdW5jKTsKLSAgcnRjcF9zcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cHNlc3Npb24sICJzZW5kX3J0Y3Bfc3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHJ0Y3Bfc3JjcGFkLCBmYWtlX3VkcF9zaW5rcGFkKSA9PSBHU1RfUEFEX0xJTktfT0ssCi0gICAgICBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRjcF9zcmNwYWQpOwotICByZXMgPSBnc3RfcGFkX3NldF9hY3RpdmUgKGZha2VfdWRwX3NpbmtwYWQsIFRSVUUpOwotICBmYWlsX2lmIChyZXMgPT0gRkFMU0UpOwotCi0gIC8qIGNvbm5lY3QgbWVzc2FnZXMgKi8KLSAgbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVycm9yIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6d2FybmluZyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIEdTVF9JTkZPICgicnVubmluZyBtYWluIGxvb3AiKTsKLSAgZ19tYWluX2xvb3BfcnVuIChtYWluX2xvb3ApOwotCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGZha2VfdWRwX3NpbmtwYWQpOwotICBnX21haW5fbG9vcF91bnJlZiAobWFpbl9sb29wKTsKLSAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotCi0gIC8qIGNoZWNrIHJlc3VsdHMgKi8KLSAgZmFpbF9pZiAocnR4X3NzcmNfYmVmb3JlID09IHJ0eF9zc3JjX2FmdGVyKTsKLSAgZmFpbF9pZiAoc3NyY19iZWZvcmUgIT0gc3NyY19hZnRlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXJ0cGNvbGxpc2lvbl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJydHBjb2xsaXNpb24iKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMTApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tYXN0ZXJfc3NyY19jb2xsaXNpb24pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnR4X3NzcmNfY29sbGlzaW9uKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHJ0cGNvbGxpc2lvbik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBoMjYxLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBoMjYxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMzRkMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaDI2MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLSNpbmNsdWRlIDxnc3QvY2hlY2svY2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0aGFybmVzcy5oPgotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLSNkZWZpbmUgSDI2MV9SVFBfQ0FQU19TVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPXZpZGVvLGVuY29kaW5nLW5hbWU9SDI2MSxjbG9jay1yYXRlPTkwMDAwLHBheWxvYWQ9MzEiCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RSdHBIMjYxUGF5SGVhZGVyCi17Ci0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotICB1bnNpZ25lZCBpbnQgdjoxOyAgICAgICAgICAgICAvKiBNb3Rpb24gdmVjdG9yIGZsYWcgKi8KLSAgdW5zaWduZWQgaW50IGk6MTsgICAgICAgICAgICAgLyogSW50cmEgZW5jb2RlZCBkYXRhICovCi0gIHVuc2lnbmVkIGludCBlYml0OjM7ICAgICAgICAgIC8qIEVuZCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgc2JpdDozOyAgICAgICAgICAvKiBTdGFydCBwb3NpdGlvbiAqLwotCi0gIHVuc2lnbmVkIGludCBtYmFwMTo0OyAgICAgICAgIC8qIE1CIGFkZHJlc3MgcHJlZGljdG9yIC0gcGFydDEgKi8KLSAgdW5zaWduZWQgaW50IGdvYm46NDsgICAgICAgICAgLyogR09CIG51bWJlciAqLwotCi0gIHVuc2lnbmVkIGludCBobXZkMToyOyAgICAgICAgIC8qIEhvcml6b250YWwgbW90aW9uIHZlY3RvciBkYXRhIC0gcGFydDEgKi8KLSAgdW5zaWduZWQgaW50IHF1YW50OjU7ICAgICAgICAgLyogUXVhbnRpemVyICovCi0gIHVuc2lnbmVkIGludCBtYmFwMjoxOyAgICAgICAgIC8qIE1CIGFkZHJlc3MgcHJlZGljdG9yIC0gcGFydDIgKi8KLQotICB1bnNpZ25lZCBpbnQgdm12ZDo1OyAgICAgICAgICAvKiBIb3Jpem9udGFsIG1vdGlvbiB2ZWN0b3IgZGF0YSAtIHBhcnQxICovCi0gIHVuc2lnbmVkIGludCBobXZkMjozOyAgICAgICAgIC8qIFZlcnRpY2FsIG1vdGlvbiB2ZWN0b3IgZGF0YSAqLwotI2VsaWYgR19CWVRFX09SREVSID09IEdfQklHX0VORElBTgotICB1bnNpZ25lZCBpbnQgc2JpdDozOyAgICAgICAgICAvKiBTdGFydCBwb3NpdGlvbiAqLwotICB1bnNpZ25lZCBpbnQgZWJpdDozOyAgICAgICAgICAvKiBFbmQgcG9zaXRpb24gKi8KLSAgdW5zaWduZWQgaW50IGk6MTsgICAgICAgICAgICAgLyogSW50cmEgZW5jb2RlZCBkYXRhICovCi0gIHVuc2lnbmVkIGludCB2OjE7ICAgICAgICAgICAgIC8qIE1vdGlvbiB2ZWN0b3IgZmxhZyAqLwotCi0gIHVuc2lnbmVkIGludCBnb2JuOjQ7ICAgICAgICAgIC8qIEdPQiBudW1iZXIgKi8KLSAgdW5zaWduZWQgaW50IG1iYXAxOjQ7ICAgICAgICAgLyogTUIgYWRkcmVzcyBwcmVkaWN0b3IgLSBwYXJ0MSAqLwotCi0gIHVuc2lnbmVkIGludCBtYmFwMjoxOyAgICAgICAgIC8qIE1CIGFkZHJlc3MgcHJlZGljdG9yIC0gcGFydDIgKi8KLSAgdW5zaWduZWQgaW50IHF1YW50OjU7ICAgICAgICAgLyogUXVhbnRpemVyICovCi0gIHVuc2lnbmVkIGludCBobXZkMToyOyAgICAgICAgIC8qIEhvcml6b250YWwgbW90aW9uIHZlY3RvciBkYXRhIC0gcGFydDEgKi8KLQotICB1bnNpZ25lZCBpbnQgaG12ZDI6MzsgICAgICAgICAvKiBWZXJ0aWNhbCBtb3Rpb24gdmVjdG9yIGRhdGEgKi8KLSAgdW5zaWduZWQgaW50IHZtdmQ6NTsgICAgICAgICAgLyogSG9yaXpvbnRhbCBtb3Rpb24gdmVjdG9yIGRhdGEgLSBwYXJ0MSAqLwotI2Vsc2UKLSNlcnJvciAiR19CWVRFX09SREVSIHNob3VsZCBiZSBiaWcgb3IgbGl0dGxlIGVuZGlhbi4iCi0jZW5kaWYKLX0gR3N0UnRwSDI2MVBheUhlYWRlcjsKLQotI2RlZmluZSBHU1RfUlRQX0gyNjFfUEFZTE9BRF9IRUFERVJfTEVOIDQKLQotc3RhdGljIGd1aW50OCAqCi1jcmVhdGVfaDI2MV9wYXlsb2FkIChnaW50IHNiaXQsIGdpbnQgZWJpdCwgZ2ludCBwc2MsIGdzaXplIHNpemUpCi17Ci0gIEdzdFJ0cEgyNjFQYXlIZWFkZXIgaGVhZGVyOwotICBjb25zdCBnaW50IGhlYWRlcl9sZW4gPSA0OwotICBndWludDggKmRhdGEgPSBnX21hbGxvYzAgKHNpemUpOwotCi0gIG1lbXNldCAoJmhlYWRlciwgMHgwMCwgc2l6ZW9mIChoZWFkZXIpKTsKLQotICBoZWFkZXIuc2JpdCA9IHNiaXQ7Ci0gIGhlYWRlci5lYml0ID0gZWJpdDsKLQotICBtZW1zZXQgKGRhdGEsIDB4ZmYsIHNpemUpOwotICBtZW1jcHkgKGRhdGEsICZoZWFkZXIsIGhlYWRlcl9sZW4pOwotCi0gIGlmIChwc2MpIHsKLSAgICBndWludDMyIHdvcmQgPSAweDAwMDEwMGZmID4+IHNiaXQ7Ci0gICAgZGF0YVtoZWFkZXJfbGVuICsgMF0gPSAod29yZCA+PiAyNCkgJiAweGZmOwotICAgIGRhdGFbaGVhZGVyX2xlbiArIDFdID0gKHdvcmQgPj4gMTYpICYgMHhmZjsKLSAgICBkYXRhW2hlYWRlcl9sZW4gKyAyXSA9ICh3b3JkID4+IDgpICYgMHhmZjsKLSAgICBkYXRhW2hlYWRlcl9sZW4gKyAzXSA9ICh3b3JkID4+IDApICYgMHhmZjsKLSAgfQotCi0gIHJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWNyZWF0ZV9ydHBfY29weV9wYXlsb2FkIChjb25zdCBndWludDggKiBkYXRhLCBnc2l6ZSBzaXplLCBndWludCB0cywgZ3VpbnQxNiBzZXEsCi0gICAgZ2Jvb2xlYW4gbWFya2VyLCBndWludCBjc3JjcykKLXsKLSAgR3N0QnVmZmVyICpidWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKHNpemUsIDAsIGNzcmNzKTsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotCi0gIGdzdF9ydHBfYnVmZmVyX3NldF9zZXEgKCZydHAsIHNlcSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIG1hcmtlcik7Ci0gIG1lbWNweSAoZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApLCBkYXRhLCBzaXplKTsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9ICh0cykgKiAoR1NUX1NFQ09ORCAvIDMwKTsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IChHU1RfU0VDT05EIC8gMzApOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oMjYzZGVwYXlfZW1wdHlfcGF5bG9hZCkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGgyNjFkZXBheSIpOwotICBnaW50IHNiaXQgPSA0OwotICBnaW50IGViaXQgPSA0OwotICBnc2l6ZSBzaXplOwotICBndWludDggKnBheWxvYWQ7Ci0gIGd1aW50IHNlcSA9IDA7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgSDI2MV9SVFBfQ0FQU19TVFIpOwotCi0gIC8qIEZpcnN0IHNlbmQgYSBwcm9wZXIgcGFja2V0IHdpdGggcGljdHVyZSBzdGFydCBjb2RlICovCi0gIHNpemUgPSAxMDA7Ci0gIHBheWxvYWQgPSBjcmVhdGVfaDI2MV9wYXlsb2FkIChzYml0LCBlYml0LCBUUlVFLCBzaXplKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX3J0cF9jb3B5X3BheWxvYWQgKHBheWxvYWQsIHNpemUsIDAsIHNlcSsrLCBGQUxTRSwKLSAgICAgICAgICAwKSk7Ci0gIGdfZnJlZSAocGF5bG9hZCk7Ci0KLSAgLyogTm90IGEgY29tcGxldGUgZnJhbWUgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZCAoaCksIDApOwotCi0gIC8qIFNlY29uZCBidWZmZXIgaGFzIGludmFsaWQgZW1wdHkgcGF5bG9hZCAqLwotICBzaXplID0gR1NUX1JUUF9IMjYxX1BBWUxPQURfSEVBREVSX0xFTjsKLSAgcGF5bG9hZCA9IGNyZWF0ZV9oMjYxX3BheWxvYWQgKHNiaXQsIGViaXQsIEZBTFNFLCBzaXplKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX3J0cF9jb3B5X3BheWxvYWQgKHBheWxvYWQsIHNpemUsIDAsIHNlcSsrLCBUUlVFLAotICAgICAgICAgIDApKTsKLSAgZ19mcmVlIChwYXlsb2FkKTsKLQotICAvKiBJbnZhbGlkIHBheWxvYWQgc2hvdWxkIGJlIGRyb3BwZWQgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZCAoaCksIDApOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotcnRwaDI2MV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJydHBoMjYxIik7Ci0gIFRDYXNlICp0Y19jaGFpbjsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsICh0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImgyNjFkZXBheSIpKSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9oMjYzZGVwYXlfZW1wdHlfcGF5bG9hZCk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBoMjYxKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGgyNjMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGgyNjMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhjMDE5OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBoMjYzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFBleGlwIEFTCi0gKiAgIEBhdXRob3IgU3RpYW4gU2VsbmVzIDxzdGlhbkBwZXhpcC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9jaGVjay5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RoYXJuZXNzLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydHBidWZmZXIuaD4KLQotI2RlZmluZSBSVFBfSDI2M19DQVBTX1NUUihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAiYXBwbGljYXRpb24veC1ydHAsbWVkaWE9dmlkZW8sZW5jb2RpbmctbmFtZT1IMjYzLGNsb2NrLXJhdGU9OTAwMDAsIiAgXAotICAicGF5bG9hZD0iIEdfU1RSSU5HSUZZKHApCi0KLSNkZWZpbmUgSDI2M1BfUlRQX0NBUFNfU1RSKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPXZpZGVvLGVuY29kaW5nLW5hbWU9SDI2My0xOTk4LGNsb2NrLXJhdGU9OTAwMDAsIiBcCi0gICJwYXlsb2FkPSJHX1NUUklOR0lGWShwKQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWhhdmVfZWxlbWVudCAoY29uc3QgZ2NoYXIgKiBlbGVtZW50X25hbWUpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIGdib29sZWFuIHJldDsKLQotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChlbGVtZW50X25hbWUsIE5VTEwpOwotICByZXQgPSBlbGVtZW50ICE9IE5VTEw7Ci0KLSAgaWYgKGVsZW1lbnQpCi0gICAgZ3N0X29iamVjdF91bnJlZiAoZWxlbWVudCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfcnRwX2J1ZmZlciAoZ3VpbnQ4ICogZGF0YSwgZ3NpemUgc2l6ZSwgZ3VpbnQgdHMsIGdpbnQgc2VxbnVtKQotewotICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19jb3B5X2RhdGEgKGRhdGEsIHNpemUpOwotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLQotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9ICh0cykgKiAoR1NUX1NFQ09ORCAvIDMwKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9zZXEgKCZydHAsIHNlcW51bSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oMjYzZGVwYXlfc3RhcnRfcGFja2V0X3Rvb19zbWFsbF9tb2RlX2EpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBoMjYzZGVwYXkiKTsKLSAgZ3VpbnQ4IHBhY2tldFtdID0gewotICAgIDB4ODAsIDB4YTIsIDB4MTcsIDB4NjIsIDB4NTcsIDB4YmIsIDB4NDgsIDB4OTgsIDB4NGEsIDB4NTksIDB4ZTgsIDB4ZGMsCi0gICAgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMAotICB9OwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGgsIFJUUF9IMjYzX0NBUFNfU1RSICgzNCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGNyZWF0ZV9ydHBfYnVmZmVyIChwYWNrZXQsIHNpemVvZiAocGFja2V0KSwgMCwgMCkpKTsKLQotICAvKiBQYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQgYW5kIGRlcGF5bG9hZGVyIG5vdCBjcmFzaCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2gyNjNkZXBheV9zdGFydF9wYWNrZXRfdG9vX3NtYWxsX21vZGVfYikKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGgyNjNkZXBheSIpOwotICBndWludDggcGFja2V0W10gPSB7Ci0gICAgMHg4MCwgMHhhMiwgMHgxNywgMHg2MiwgMHg1NywgMHhiYiwgMHg0OCwgMHg5OCwgMHg0YSwgMHg1OSwgMHhlOCwgMHhkYywKLSAgICAweDgwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCi0gIH07Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgUlRQX0gyNjNfQ0FQU19TVFIgKDM0KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgY3JlYXRlX3J0cF9idWZmZXIgKHBhY2tldCwgc2l6ZW9mIChwYWNrZXQpLCAwLCAwKSkpOwotCi0gIC8qIFBhY2tldCBzaG91bGQgYmUgZHJvcHBlZCBhbmQgZGVwYXlsb2FkZXIgbm90IGNyYXNoICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfaDI2M2RlcGF5X3N0YXJ0X3BhY2tldF90b29fc21hbGxfbW9kZV9jKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaDI2M2RlcGF5Iik7Ci0gIGd1aW50OCBwYWNrZXRbXSA9IHsKLSAgICAweDgwLCAweGEyLCAweDE3LCAweDYyLCAweDU3LCAweGJiLCAweDQ4LCAweDk4LCAweDRhLCAweDU5LCAweGU4LCAweGRjLAotICAgIDB4YzAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKLSAgfTsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCBSVFBfSDI2M19DQVBTX1NUUiAoMzQpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBjcmVhdGVfcnRwX2J1ZmZlciAocGFja2V0LCBzaXplb2YgKHBhY2tldCksIDAsIDApKSk7Ci0KLSAgLyogUGFja2V0IHNob3VsZCBiZSBkcm9wcGVkIGFuZCBkZXBheWxvYWRlciBub3QgY3Jhc2ggKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZCAoaCkpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oMjYzcGF5X21vZGVfYl9zbm93KQotewotICAvKiBQYXlsb2FkaW5nIG9uZSBsYXJnZSBmcmFtZSAobGlrZSBzbm93KSBpcyBtb3JlIGxpa2VseSB0byB1c2UgbW9kZSBiIGFuZAotICAgKiB0cmlnZ2VyIGlzc3VlcyBpbiB2YWxncmluZCBzZWVuIHByZXZpb3VzbHkgbGlrZSBkb3VibGUgZnJlZSwgaW52YWxpZCByZWFkCi0gICAqIGV0Yy4gKi8KLSAgR3N0SGFybmVzcyAqaDsKLSAgZ3VpbnQgZnJhbWVzID0gMTsKLSAgZ3VpbnQgaTsKLQotICBpZiAoIWhhdmVfZWxlbWVudCAoImF2ZW5jX2gyNjMiKSkKLSAgICByZXR1cm47Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ld19wYXJzZQotICAgICAgKCJhdmVuY19oMjYzIHJ0cC1wYXlsb2FkLXNpemU9MSAhIHJ0cGgyNjNwYXkgbXR1PTEzNTAgIik7Ci0gIGdzdF9oYXJuZXNzX2FkZF9zcmNfcGFyc2UgKGgsCi0gICAgICAidmlkZW90ZXN0c3JjIHBhdHRlcm49c25vdyBpcy1saXZlPTEgISAiCi0gICAgICAiY2Fwc2ZpbHRlciBjYXBzPVwidmlkZW8veC1yYXcsZm9ybWF0PUk0MjAsd2lkdGg9MTc2LGhlaWdodD0xNDRcIiIsIFRSVUUpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykKLSAgICBnc3RfaGFybmVzc19wdXNoX2Zyb21fc3JjIChoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpID49IGZyYW1lcyk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkKCkgbWF5IHJldHVybiBhIGNvcHkgb2YgdGhlIHBheWxvYWQuIFRoaXMgdGVzdAotICogbWFrZXMgc3VyZSB0aGF0IHRoZSBydHBoMjYzcGRlcGF5IGFsc28gcHJvZHVjZXMgdGhlIGNvcnJlY3Qgb3V0cHV0IGluIHRoaXMKLSAqIGNhc2UuICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oMjYzcGRlcGF5X2ZyYWdtZW50ZWRfbWVtb3J5X25vbl93cml0YWJsZV9idWZmZXIpCi17Ci0gIEdzdEhhcm5lc3MgKmg7Ci0gIEdzdEJ1ZmZlciAqaGVhZGVyX2J1ZiwgKnBheWxvYWRfYnVmLCAqYnVmOwotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgZ3VpbnQ4IGhlYWRlcltdID0gewotICAgIDB4MDQsIDB4MDAKLSAgfTsKLSAgZ3VpbnQ4IHBheWxvYWRbXSA9IHsKLSAgICAweDgwLCAweDAyLCAweDFjLCAweGI4LCAweDAxLCAweDAwLCAweDExLCAweGUwLCAweDQ0LCAweGM0Ci0gIH07Ci0gIGd1aW50OCBmcmFtZVtdID0gewotICAgIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MWMsIDB4YjgsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ZTAsIDB4NDQsIDB4YzQKLSAgfTsKLQotICBoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaDI2M3BkZXBheSIpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAiYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPXZpZGVvLCAiCi0gICAgICAiY2xvY2stcmF0ZT05MDAwMCwgZW5jb2RpbmctbmFtZT1IMjYzLTE5OTgiKTsKLQotICAvKiBQYWNrZXQgd2l0aCBNPTEsIFA9MSAqLwotICBoZWFkZXJfYnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChzaXplb2YgKGhlYWRlciksIDAsIDApOwotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGhlYWRlcl9idWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLSAgbWVtY3B5IChnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCksIGhlYWRlciwgc2l6ZW9mIChoZWFkZXIpKTsKLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIHBheWxvYWRfYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemVvZiAocGF5bG9hZCksIE5VTEwpOwotICBnc3RfYnVmZmVyX2ZpbGwgKHBheWxvYWRfYnVmLCAwLCBwYXlsb2FkLCBzaXplb2YgKHBheWxvYWQpKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGhlYWRlcl9idWYsIHBheWxvYWRfYnVmKTsKLQotICBnc3RfaGFybmVzc19wdXNoIChoLCBnc3RfYnVmZmVyX3JlZiAoYnVmKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmLCAwLCBmcmFtZSwgc2l6ZW9mIChmcmFtZSkpID09IDApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCgpIG1heSByZXR1cm4gYSBjb3B5IG9mIHRoZSBwYXlsb2FkLiBUaGlzIHRlc3QKLSAqIG1ha2VzIHN1cmUgdGhhdCB0aGUgcnRwaDI2M3BkZXBheSBhbHNvIHByb2R1Y2VzIHRoZSBjb3JyZWN0IG91dHB1dCBpbiB0aGlzCi0gKiBjYXNlLiAqLwotR1NUX1NUQVJUX1RFU1QKLSAgICAodGVzdF9oMjYzcGRlcGF5X2ZyYWdtZW50ZWRfbWVtb3J5X25vbl93cml0YWJsZV9idWZmZXJfc3BsaXRfZnJhbWUpIHsKLSAgR3N0SGFybmVzcyAqaDsKLSAgR3N0QnVmZmVyICpoZWFkZXJfYnVmLCAqcGF5bG9hZF9idWYsICpidWY7Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBndWludDggaGVhZGVyW10gPSB7Ci0gICAgMHgwNCwgMHgwMAotICB9OwotICBndWludDggcGF5bG9hZFtdID0gewotICAgIDB4ODAsIDB4MDIsIDB4MWMsIDB4YjgsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ZTAsIDB4NDQsIDB4YzQKLSAgfTsKLSAgZ3VpbnQ4IGZyYW1lW10gPSB7Ci0gICAgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgxYywgMHhiOCwgMHgwMSwgMHgwMCwgMHgxMSwgMHhlMCwgMHg0NCwgMHhjNAotICB9OwotCi0gIGggPSBnc3RfaGFybmVzc19uZXcgKCJydHBoMjYzcGRlcGF5Iik7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGgsICJhcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9dmlkZW8sICIKLSAgICAgICJjbG9jay1yYXRlPTkwMDAwLCBlbmNvZGluZy1uYW1lPUgyNjMtMTk5OCIpOwotCi0gIC8qIEZpcnN0IHBhY2tldCwgTT0wLCBQPTEgKi8KLSAgaGVhZGVyX2J1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoc2l6ZW9mIChoZWFkZXIpLCAwLCAwKTsKLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChoZWFkZXJfYnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X21hcmtlciAoJnJ0cCwgRkFMU0UpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxICgmcnRwLCAwKTsKLSAgbWVtY3B5IChnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCksIGhlYWRlciwgc2l6ZW9mIChoZWFkZXIpKTsKLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIHBheWxvYWRfYnVmID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIHNpemVvZiAocGF5bG9hZCksIE5VTEwpOwotICBnc3RfYnVmZmVyX2ZpbGwgKHBheWxvYWRfYnVmLCAwLCBwYXlsb2FkLCBzaXplb2YgKHBheWxvYWQpKTsKLSAgYnVmID0gZ3N0X2J1ZmZlcl9hcHBlbmQgKGhlYWRlcl9idWYsIHBheWxvYWRfYnVmKTsKLQotICBnc3RfaGFybmVzc19wdXNoIChoLCBnc3RfYnVmZmVyX3JlZiAoYnVmKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpLCAwKTsKLQotICAvKiBTZWNvbmQgcGFja2V0LCBNPTEsIFA9MSAqLwotICBoZWFkZXJfYnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChzaXplb2YgKGhlYWRlciksIDAsIDApOwotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGhlYWRlcl9idWYsIEdTVF9NQVBfV1JJVEUsICZydHApOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfbWFya2VyICgmcnRwLCBUUlVFKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3NlcSAoJnJ0cCwgMSk7Ci0gIG1lbWNweSAoZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWQgKCZydHApLCBoZWFkZXIsIHNpemVvZiAoaGVhZGVyKSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICBwYXlsb2FkX2J1ZiA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBzaXplb2YgKHBheWxvYWQpLCBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKHBheWxvYWRfYnVmLCAwLCAwLCAxMCk7Ci0gIGJ1ZiA9IGdzdF9idWZmZXJfYXBwZW5kIChoZWFkZXJfYnVmLCBwYXlsb2FkX2J1Zik7Ci0KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZikpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSwgMSk7Ci0KLSAgYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAoYnVmLCAwLCBmcmFtZSwgc2l6ZW9mIChmcmFtZSkpID09IDApOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oMjYzcGRlcGF5X2RvbnRfcHVzaF9lbXB0eV9mcmFtZSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGgyNjNwZGVwYXkiKTsKLQotICAvKiBQYWNrZXQgdGhhdCBvbmx5IGNvbnRhaW5zIGhlYWRlciBpbmZvcm1hdGlvbiBhbmQgYW4gZXh0cmEgcGljdHVyZSBoZWFkZXIKLSAgICogKFBMRU4gPiAwKS4gUGFydGx5IGhhbmRjcmFmdGVkIHBhY2tldC4gT3JpZ2luYWxseSB0aGlzIHBhY2tldCBkaWQgbm90Ci0gICAqIGhhdmUgUD0xIChoZW5jZSBpdCB3YXMgbm90IHN0YXJ0IG9mIGEgcGljdHVyZSkuIFdpdGggYm90aCBQPTEgYW5kIE09MSB3ZQotICAgKiBvbmx5IG5lZWQgb25lIHBhY2tldCB0byByZXByb2R1Y2UgdGhlIGlzc3VlIHdoZXJlIHRyeWluZyB0byBwdXNoIGFuIGVtcHR5Ci0gICAqIGZyYW1lIHdoZW4gUExFTiBpcyBzZXQgKi8KLSAgZ3VpbnQ4IHBhY2tldFtdID0gewotICAgIDB4ODAsIDB4ZTgsIDB4YmMsIDB4YWEsIDB4MTQsIDB4MTIsIDB4MTYsIDB4NWMsIDB4YjgsIDB4NGUsIDB4MzksIDB4MDQsCi0gICAgMHgyNSwgMHgwMCwgMHg1NCwgMHgzOSwgMHhkMCwgMHgxMiwgMHgwNiwgMHg5ZSwgMHhiNSwgMHgwYSwgMHhmNSwgMHhlOCwKLSAgICAweDMyLCAweGViLCAweGQwLCAweDZiLCAweGQ2LCAweGEyLCAweGZhLCAweGQ0LCAweDNkLCAweGQ3LCAweGEwLCAweDJiLAotICAgIDB4MjQsIDB4OTcsIDB4YzMsIDB4YmYsIDB4YzAsIDB4YmIsIDB4ZDcsIDB4YTAsCi0gIH07Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgSDI2M1BfUlRQX0NBUFNfU1RSICgxMDApKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywgZ3N0X2hhcm5lc3NfcHVzaCAoaCwKLSAgICAgICAgICBjcmVhdGVfcnRwX2J1ZmZlciAocGFja2V0LCBzaXplb2YgKHBhY2tldCksIDAsIDApKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2hhcm5lc3NfYnVmZmVyc19yZWNlaXZlZCAoaCksIDApOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9oMjYzcHBheV9ub25fZml4ZWRfY2FwcykKLXsKLSAgR3N0SGFybmVzcyAqaDsKLSAgZ3VpbnQ4IGZyYW1lW10gPSB7Ci0gICAgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNiwgMHgxYywgMHhhOCwgMHgwMSwgMHgwNCwgMHg5MSwgMHhlMCwgMHgzNywgMHhmZiwKLSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICB9OwotCi0gIGggPSBnc3RfaGFybmVzc19uZXdfcGFyc2UgKCJydHBoMjYzcHBheSIpOwotCi0gIC8qIFNldCBub24tZml4ZWQgY2FwcyBhZnRlciBwYXlsb2FkZXIgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X2NhcHNfc3RyIChoLCAidmlkZW8veC1oMjYzLCB2YXJpYW50PShzdHJpbmcpaXR1IiwKLSAgICAgICJhcHBsaWNhdGlvbi94LXJ0cCwgY2xvY2stcmF0ZT1bMSwgTUFYXSIpOwotCi0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdzdF9idWZmZXJfbmV3X3dyYXBwZWRfZnVsbCAoR1NUX01FTU9SWV9GTEFHX1JFQURPTkxZLAotICAgICAgICAgIGZyYW1lLCBzaXplb2YgKGZyYW1lKSwgMCwgc2l6ZW9mIChmcmFtZSksIE5VTEwsIE5VTEwpKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgxLCBnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1ydHBoMjYzX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInJ0cGgyNjMiKTsKLSAgVENhc2UgKnRjX2NoYWluOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgKHRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiaDI2M2RlcGF5IikpKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2gyNjNkZXBheV9zdGFydF9wYWNrZXRfdG9vX3NtYWxsX21vZGVfYSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9oMjYzZGVwYXlfc3RhcnRfcGFja2V0X3Rvb19zbWFsbF9tb2RlX2IpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaDI2M2RlcGF5X3N0YXJ0X3BhY2tldF90b29fc21hbGxfbW9kZV9jKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsICh0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImgyNjNwYXkiKSkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaDI2M3BheV9tb2RlX2Jfc25vdyk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCAodGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJoMjYzcGRlcGF5IikpKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLAotICAgICAgdGVzdF9oMjYzcGRlcGF5X2ZyYWdtZW50ZWRfbWVtb3J5X25vbl93cml0YWJsZV9idWZmZXIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sCi0gICAgICB0ZXN0X2gyNjNwZGVwYXlfZnJhZ21lbnRlZF9tZW1vcnlfbm9uX3dyaXRhYmxlX2J1ZmZlcl9zcGxpdF9mcmFtZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9oMjYzcGRlcGF5X2RvbnRfcHVzaF9lbXB0eV9mcmFtZSk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCAodGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJoMjYzcHBheSIpKSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9oMjYzcHBheV9ub25fZml4ZWRfY2Fwcyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBoMjYzKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cGppdHRlcmJ1ZmZlci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NWZiMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwaml0dGVyYnVmZmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzc3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1YnNpZGFyeSgtaWVzKQotICogICAgICAgICAgICAgICBjb250YWN0OiA8c3RlZmFuLmtvc3RAbm9raWEuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIENpc2NvIFN5c3RlbXMsIEluYwotICogICAgICAgICAgICAgICBBdXRob3JzOiBLZWxsZXkgUm9nZXJzIDxrZWxyb0BjaXNjby5jb20+Ci0gKiAgICAgICAgICAgICAgIEhhdmFyZCBHcmFmZiA8aGdyYWZmQGNpc2NvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IFBleGlwIEFTCi0gKiAgICAgICAgICAgICAgIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXA+Ci0gKiAgICAgICAgICAgICAgIEhhdmFyZCBHcmFmZiA8aGF2YXJkQHBleGlwPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0dGVzdGNsb2NrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotLyogd2UgYWxzbyBoYXZlIGEgbGlzdCBvZiBzcmMgYnVmZmVycyAqLwotc3RhdGljIEdMaXN0ICppbmJ1ZmZlcnMgPSBOVUxMOwotc3RhdGljIGdpbnQgbnVtX2Ryb3BwZWQgPSAwOwotCi0jZGVmaW5lIFJUUF9DQVBTX1NUUklORyAgICBcCi0gICAgImFwcGxpY2F0aW9uL3gtcnRwLCAiICAgICAgICAgICAgICAgXAotICAgICJtZWRpYSA9IChzdHJpbmcpYXVkaW8sICIgICAgICAgICAgIFwKLSAgICAicGF5bG9hZCA9IChpbnQpIDAsICIgICAgICAgICAgICAgICBcCi0gICAgImNsb2NrLXJhdGUgPSAoaW50KSA4MDAwLCAiICAgICAgICAgXAotICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZylQQ01VIgotCi0jZGVmaW5lIFJUUF9GUkFNRV9TSVpFIDIwCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCIpCi0gICAgKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAiY2xvY2stcmF0ZSA9IChpbnQpIFsgMSwgMjE0NzQ4MzY0NyBdIikKLSAgICApOwotCi1zdGF0aWMgdm9pZAotYnVmZmVyX2Ryb3BwZWQgKGdwb2ludGVyIGRhdGEsIEdzdE1pbmlPYmplY3QgKiBvYmopCi17Ci0gIEdTVF9ERUJVRyAoImRyb3BwaW5nIGJ1ZmZlciAlcCIsIG9iaik7Ci0gIG51bV9kcm9wcGVkKys7Ci19Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX2ppdHRlcmJ1ZmZlciAoZ2ludCBudW1fYnVmZmVycykKLXsKLSAgR3N0RWxlbWVudCAqaml0dGVyYnVmZmVyOwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RDYXBzICpjYXBzOwotICAvKiBhIDIwIHNhbXBsZSBhdWRpbyBibG9jayAoMiw1IG1zKSBnZW5lcmF0ZWQgd2l0aAotICAgKiBnc3QtbGF1bmNoIGF1ZGlvdGVzdHNyYyB3YXZlPXNpbGVuY2UgYmxvY2tzaXplPTQwIG51bS1idWZmZXJzPTMgIQotICAgKiAgICAiYXVkaW8veC1yYXcsY2hhbm5lbHM9MSxyYXRlPTgwMDAiICEgbXVsYXdlbmMgISBydHBwY211cGF5ICEKLSAgICogICAgIGZha2VzaW5rIGR1bXA9MQotICAgKi8KLSAgZ3VpbnQ4IGluW10gPSB7Ci0gICAgLyogZmlyc3QgNCBieXRlcyBhcmUgcnRwLWhlYWRlciwgbmV4dCA0IGJ5dGVzIGFyZSB0aW1lc3RhbXAgKi8KLSAgICAweDgwLCAweDgwLCAweDFjLCAweDI0LCAweDQ2LCAweGNkLCAweGI3LCAweDExLCAweDNjLCAweDNhLCAweDdjLCAweDViLAotICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgotICB9OwotICBHc3RDbG9ja1RpbWUgdHMgPSBHX0dVSU5UNjRfQ09OU1RBTlQgKDApOwotICBHc3RDbG9ja1RpbWUgdHNvID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChSVFBfRlJBTUVfU0laRSwgR1NUX1NFQ09ORCwgODAwMCk7Ci0gIC8qZ3VpbnQgbGF0ZW5jeSA9IEdTVF9USU1FX0FTX01TRUNPTkRTIChudW1fYnVmZmVycyAqIHRzbyk7ICovCi0gIGdpbnQgaTsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9qaXR0ZXJidWZmZXIiKTsKLSAgaml0dGVyYnVmZmVyID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgLyogd2UgbmVlZCBhIGNsb2NrIGhlcmUgKi8KLSAgY2xvY2sgPSBnc3Rfc3lzdGVtX2Nsb2NrX29idGFpbiAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIChqaXR0ZXJidWZmZXIsIGNsb2NrKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoY2xvY2spOwotICAvKiBzZXR1cCBsYXRlbmN5ICovCi0gIC8qIGxhdGVuY3kgd291bGQgYmUgNyBmb3IgMyBidWZmZXJzIGhlcmUsIGRlZmF1bHQgaXMgMjAwCi0gICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGppdHRlcmJ1ZmZlciksICJsYXRlbmN5IiwgbGF0ZW5jeSwgTlVMTCk7Ci0gICAgIEdTVF9JTkZPX09CSkVDVCAoaml0dGVyYnVmZmVyLCAic2V0IGxhdGVuY3kgdG8gJXUgbXMiLCBsYXRlbmN5KTsKLSAgICovCi0KLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoaml0dGVyYnVmZmVyLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKGppdHRlcmJ1ZmZlciwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgLyogY3JlYXRlIG4gYnVmZmVycyAqLwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFJUUF9DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBqaXR0ZXJidWZmZXIsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7IGkrKykgewotICAgIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZW9mIChpbikpOwotICAgIGdzdF9idWZmZXJfZmlsbCAoYnVmZmVyLCAwLCBpbiwgc2l6ZW9mIChpbikpOwotICAgIEdTVF9CVUZGRVJfRFRTIChidWZmZXIpID0gdHM7Ci0gICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgPSB0czsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gdHNvOwotICAgIGdzdF9taW5pX29iamVjdF93ZWFrX3JlZiAoR1NUX01JTklfT0JKRUNUIChidWZmZXIpLCBidWZmZXJfZHJvcHBlZCwgTlVMTCk7Ci0gICAgR1NUX0RFQlVHICgiY3JlYXRlZCBidWZmZXI6ICVwIiwgYnVmZmVyKTsKLQotICAgIGlmICghaSkKLSAgICAgIEdTVF9CVUZGRVJfRkxBR19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpOwotCi0gICAgaW5idWZmZXJzID0gZ19saXN0X2FwcGVuZCAoaW5idWZmZXJzLCBidWZmZXIpOwotCi0gICAgLyogaGFja2lzaCB3YXkgdG8gdXBkYXRlIHRoZSBydHAgaGVhZGVyICovCi0gICAgaW5bMV0gPSAweDAwOwotICAgIGluWzNdKys7ICAgICAgICAgICAgICAgICAgICAvKiBzZXFudW1iZXIgKi8KLSAgICBpbls3XSArPSBSVFBfRlJBTUVfU0laRTsgICAgLyogaW5jLiB0aW1lc3RhbXAgd2l0aCBmcmFtZXNpemUgKi8KLSAgICB0cyArPSB0c287Ci0gIH0KLSAgbnVtX2Ryb3BwZWQgPSAwOwotCi0gIHJldHVybiBqaXR0ZXJidWZmZXI7Ci19Ci0KLXN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybgotc3RhcnRfaml0dGVyYnVmZmVyIChHc3RFbGVtZW50ICogaml0dGVyYnVmZmVyKQotewotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0gIEdzdENsb2NrVGltZSBub3c7Ci0gIEdzdENsb2NrICpjbG9jazsKLQotICBjbG9jayA9IGdzdF9lbGVtZW50X2dldF9jbG9jayAoaml0dGVyYnVmZmVyKTsKLSAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYmFzZV90aW1lIChqaXR0ZXJidWZmZXIsIG5vdyk7Ci0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoaml0dGVyYnVmZmVyLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfaml0dGVyYnVmZmVyIChHc3RFbGVtZW50ICogaml0dGVyYnVmZmVyKQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX2ppdHRlcmJ1ZmZlciIpOwotCi0gIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9taW5pX29iamVjdF91bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ19saXN0X2ZyZWUgKGluYnVmZmVycyk7Ci0gIGluYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoaml0dGVyYnVmZmVyKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChqaXR0ZXJidWZmZXIpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoaml0dGVyYnVmZmVyKTsKLX0KLQotc3RhdGljIHZvaWQKLWNoZWNrX2ppdHRlcmJ1ZmZlcl9yZXN1bHRzIChHc3RFbGVtZW50ICogaml0dGVyYnVmZmVyLCBnaW50IG51bV9idWZmZXJzKQotewotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR0xpc3QgKm5vZGU7Ci0gIEdzdENsb2NrVGltZSB0cyA9IEdfR1VJTlQ2NF9DT05TVEFOVCAoMCk7Ci0gIEdzdENsb2NrVGltZSB0c28gPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKFJUUF9GUkFNRV9TSVpFLCBHU1RfU0VDT05ELCA4MDAwKTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGd1aW50MTYgcHJldl9zbiA9IDAsIGN1cl9zbjsKLSAgZ3VpbnQzMiBwcmV2X3RzID0gMCwgY3VyX3RzOwotCi0gIC8qIHNsZWVwIGZvciB0d2ljZSB0aGUgbGF0ZW5jeSAqLwotICBnX3VzbGVlcCAoNDAwICogMTAwMCk7Ci0KLSAgR1NUX0lORk8gKCJvZiAlZCBidWZmZXIgJWQvJWQgcmVjZWl2ZWQvZHJvcHBlZCIsIG51bV9idWZmZXJzLAotICAgICAgZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIG51bV9kcm9wcGVkKTsKLSAgLyogaWYgdGhpcyBmYWlscywgbm90IGFsbCBidWZmZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpICsgbnVtX2Ryb3BwZWQpLCBudW1fYnVmZmVycyk7Ci0KLSAgLyogY2hlY2sgdGhlIGJ1ZmZlciBsaXN0ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCBudW1fYnVmZmVycyk7Ci0gIGZvciAobm9kZSA9IGJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSkpIHsKLSAgICBmYWlsX2lmICgoYnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBub2RlLT5kYXRhKSA9PSBOVUxMKTsKLSAgICBmYWlsX2lmIChHU1RfQlVGRkVSX1BUUyAoYnVmZmVyKSAhPSB0cyk7Ci0gICAgZmFpbF9pZiAoR1NUX0JVRkZFUl9EVFMgKGJ1ZmZlcikgIT0gdHMpOwotICAgIGdzdF9idWZmZXJfbWFwIChidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgY3VyX3NuID0gKChndWludDE2KSBtYXAuZGF0YVsyXSA8PCA4KSB8IG1hcC5kYXRhWzNdOwotICAgIGN1cl90cyA9ICgoZ3VpbnQzMikgbWFwLmRhdGFbNF0gPDwgMjQpIHwgKChndWludDMyKSBtYXAuZGF0YVs1XSA8PCAxNikgfAotICAgICAgICAoKGd1aW50MzIpIG1hcC5kYXRhWzZdIDw8IDgpIHwgbWFwLmRhdGFbN107Ci0gICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmZmVyLCAmbWFwKTsKLQotICAgIGlmIChub2RlICE9IGJ1ZmZlcnMpIHsKLSAgICAgIGZhaWxfdW5sZXNzIChjdXJfc24gPiBwcmV2X3NuKTsKLSAgICAgIGZhaWxfdW5sZXNzIChjdXJfdHMgPiBwcmV2X3RzKTsKLQotICAgICAgcHJldl9zbiA9IGN1cl9zbjsKLSAgICAgIHByZXZfdHMgPSBjdXJfdHM7Ci0gICAgfQotICAgIHRzICs9IHRzbzsKLSAgfQotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wdXNoX2ZvcndhcmRfc2VxKQotewotICBHc3RFbGVtZW50ICpqaXR0ZXJidWZmZXI7Ci0gIGNvbnN0IGd1aW50IG51bV9idWZmZXJzID0gMzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdMaXN0ICpub2RlOwotCi0gIGppdHRlcmJ1ZmZlciA9IHNldHVwX2ppdHRlcmJ1ZmZlciAobnVtX2J1ZmZlcnMpOwotICBmYWlsX3VubGVzcyAoc3RhcnRfaml0dGVyYnVmZmVyIChqaXR0ZXJidWZmZXIpCi0gICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICAvKiBwdXNoIGJ1ZmZlcnM6IDAsMSwyLCAqLwotICBmb3IgKG5vZGUgPSBpbmJ1ZmZlcnM7IG5vZGU7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSkpIHsKLSAgICBidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGE7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICB9Ci0KLSAgLyogY2hlY2sgdGhlIGJ1ZmZlciBsaXN0ICovCi0gIGNoZWNrX2ppdHRlcmJ1ZmZlcl9yZXN1bHRzIChqaXR0ZXJidWZmZXIsIG51bV9idWZmZXJzKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfaml0dGVyYnVmZmVyIChqaXR0ZXJidWZmZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3B1c2hfYmFja3dhcmRfc2VxKQotewotICBHc3RFbGVtZW50ICpqaXR0ZXJidWZmZXI7Ci0gIGNvbnN0IGd1aW50IG51bV9idWZmZXJzID0gNDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdMaXN0ICpub2RlOwotCi0gIGppdHRlcmJ1ZmZlciA9IHNldHVwX2ppdHRlcmJ1ZmZlciAobnVtX2J1ZmZlcnMpOwotICBmYWlsX3VubGVzcyAoc3RhcnRfaml0dGVyYnVmZmVyIChqaXR0ZXJidWZmZXIpCi0gICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICAvKiBwdXNoIGJ1ZmZlcnM6IDAsMywyLDEgKi8KLSAgYnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBpbmJ1ZmZlcnMtPmRhdGE7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgZm9yIChub2RlID0gZ19saXN0X2xhc3QgKGluYnVmZmVycyk7IG5vZGUgIT0gaW5idWZmZXJzOwotICAgICAgbm9kZSA9IGdfbGlzdF9wcmV2aW91cyAobm9kZSkpIHsKLSAgICBidWZmZXIgPSAoR3N0QnVmZmVyICopIG5vZGUtPmRhdGE7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICB9Ci0KLSAgLyogY2hlY2sgdGhlIGJ1ZmZlciBsaXN0ICovCi0gIGNoZWNrX2ppdHRlcmJ1ZmZlcl9yZXN1bHRzIChqaXR0ZXJidWZmZXIsIG51bV9idWZmZXJzKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGNsZWFudXBfaml0dGVyYnVmZmVyIChqaXR0ZXJidWZmZXIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3B1c2hfdW5vcmRlcmVkKQotewotICBHc3RFbGVtZW50ICpqaXR0ZXJidWZmZXI7Ci0gIGNvbnN0IGd1aW50IG51bV9idWZmZXJzID0gNDsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0KLSAgaml0dGVyYnVmZmVyID0gc2V0dXBfaml0dGVyYnVmZmVyIChudW1fYnVmZmVycyk7Ci0gIGZhaWxfdW5sZXNzIChzdGFydF9qaXR0ZXJidWZmZXIgKGppdHRlcmJ1ZmZlcikKLSAgICAgID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIC8qIHB1c2ggYnVmZmVyczsgMCwyLDEsMyAqLwotICBidWZmZXIgPSAoR3N0QnVmZmVyICopIGluYnVmZmVycy0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICBidWZmZXIgPSBnX2xpc3RfbnRoX2RhdGEgKGluYnVmZmVycywgMik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgYnVmZmVyID0gZ19saXN0X250aF9kYXRhIChpbmJ1ZmZlcnMsIDEpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGJ1ZmZlciA9IGdfbGlzdF9udGhfZGF0YSAoaW5idWZmZXJzLCAzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIGNoZWNrIHRoZSBidWZmZXIgbGlzdCAqLwotICBjaGVja19qaXR0ZXJidWZmZXJfcmVzdWx0cyAoaml0dGVyYnVmZmVyLCBudW1fYnVmZmVycyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2ppdHRlcmJ1ZmZlciAoaml0dGVyYnVmZmVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9iYXNldGltZSkKLXsKLSAgR3N0RWxlbWVudCAqaml0dGVyYnVmZmVyOwotICBjb25zdCBndWludCBudW1fYnVmZmVycyA9IDM7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHTGlzdCAqbm9kZTsKLSAgR3N0Q2xvY2tUaW1lIHRzbyA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoUlRQX0ZSQU1FX1NJWkUsIEdTVF9TRUNPTkQsIDgwMDApOwotCi0gIGppdHRlcmJ1ZmZlciA9IHNldHVwX2ppdHRlcmJ1ZmZlciAobnVtX2J1ZmZlcnMpOwotICBmYWlsX3VubGVzcyAoc3RhcnRfaml0dGVyYnVmZmVyIChqaXR0ZXJidWZmZXIpCi0gICAgICA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICAvKiBwdXNoIGJ1ZmZlcnM6IDIsMSwwICovCi0gIGZvciAobm9kZSA9IGdfbGlzdF9sYXN0IChpbmJ1ZmZlcnMpOyBub2RlOyBub2RlID0gZ19saXN0X3ByZXZpb3VzIChub2RlKSkgewotICAgIGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICAvKiBzbGVlcCBmb3IgdHdpY2UgdGhlIGxhdGVuY3kgKi8KLSAgZ191c2xlZXAgKDQwMCAqIDEwMDApOwotCi0gIC8qIGlmIHRoaXMgZmFpbHMsIG5vdCBhbGwgYnVmZmVycyBoYXZlIGJlZW4gcHJvY2Vzc2VkICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSArIG51bV9kcm9wcGVkKSwgbnVtX2J1ZmZlcnMpOwotCi0gIGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRFRTIChidWZmZXIpICE9IChudW1fYnVmZmVycyAqIHRzbykpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcikgIT0gKG51bV9idWZmZXJzICogdHNvKSk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBjbGVhbnVwX2ppdHRlcmJ1ZmZlciAoaml0dGVyYnVmZmVyKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0Q2FwcyAqCi1yZXF1ZXN0X3B0X21hcCAoR3N0RWxlbWVudCAqIGppdHRlcmJ1ZmZlciwgZ3VpbnQgcHQpCi17Ci0gIGZhaWxfdW5sZXNzIChwdCA9PSAwKTsKLQotICByZXR1cm4gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFJUUF9DQVBTX1NUUklORyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NsZWFyX3B0X21hcCkKLXsKLSAgR3N0RWxlbWVudCAqaml0dGVyYnVmZmVyOwotICBjb25zdCBndWludCBudW1fYnVmZmVycyA9IDEwOwotICBnaW50IGk7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHTGlzdCAqbm9kZTsKLQotICBqaXR0ZXJidWZmZXIgPSBzZXR1cF9qaXR0ZXJidWZmZXIgKG51bV9idWZmZXJzKTsKLSAgZmFpbF91bmxlc3MgKHN0YXJ0X2ppdHRlcmJ1ZmZlciAoaml0dGVyYnVmZmVyKQotICAgICAgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoaml0dGVyYnVmZmVyLCAicmVxdWVzdC1wdC1tYXAiLCAoR0NhbGxiYWNrKQotICAgICAgcmVxdWVzdF9wdF9tYXAsIE5VTEwpOwotCi0gIC8qIHB1c2ggYnVmZmVyczogMCwxLDIsICovCi0gIGZvciAobm9kZSA9IGluYnVmZmVycywgaSA9IDA7IG5vZGUgJiYgaSA8IDM7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSksIGkrKykgewotICAgIGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICBnX3VzbGVlcCAoNDAwICogMTAwMCk7Ci0KLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChqaXR0ZXJidWZmZXIsICJjbGVhci1wdC1tYXAiLCBOVUxMKTsKLQotICBmb3IgKDsgbm9kZSAmJiBpIDwgMTA7IG5vZGUgPSBnX2xpc3RfbmV4dCAobm9kZSksIGkrKykgewotICAgIGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgbm9kZS0+ZGF0YTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICAvKiBjaGVjayB0aGUgYnVmZmVyIGxpc3QgKi8KLSAgY2hlY2tfaml0dGVyYnVmZmVyX3Jlc3VsdHMgKGppdHRlcmJ1ZmZlciwgbnVtX2J1ZmZlcnMpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgY2xlYW51cF9qaXR0ZXJidWZmZXIgKGppdHRlcmJ1ZmZlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBQQ01VX0JVRl9DTE9DS19SQVRFIDgwMDAKLSNkZWZpbmUgUENNVV9CVUZfUFQgMAotI2RlZmluZSBQQ01VX0JVRl9TU1JDIDB4MDFCQURCQUQKLSNkZWZpbmUgUENNVV9CVUZfTVMgIDIwCi0jZGVmaW5lIFBDTVVfQlVGX0RVUkFUSU9OIChQQ01VX0JVRl9NUyAqIEdTVF9NU0VDT05EKQotI2RlZmluZSBQQ01VX0JVRl9TSVpFICg2NDAwMCAqIFBDTVVfQlVGX01TIC8gMTAwMCkKLSNkZWZpbmUgUENNVV9SVFBfVFNfRFVSQVRJT04gKFBDTVVfQlVGX0NMT0NLX1JBVEUgKiBQQ01VX0JVRl9NUyAvIDEwMDApCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKmppdHRlcl9idWZmZXI7Ci0gIEdzdFBhZCAqdGVzdF9zaW5rX3BhZCwgKnRlc3Rfc3JjX3BhZDsKLSAgR3N0Q2xvY2sgKmNsb2NrOwotICBHQXN5bmNRdWV1ZSAqYnVmX3F1ZXVlOwotICBHQXN5bmNRdWV1ZSAqc2lua19ldmVudF9xdWV1ZTsKLSAgR0FzeW5jUXVldWUgKnNyY19ldmVudF9xdWV1ZTsKLSAgZ2ludCBsb3N0X2V2ZW50X2NvdW50OwotICBnaW50IHJ0eF9ldmVudF9jb3VudDsKLX0gVGVzdERhdGE7Ci0KLXN0YXRpYyBHc3RDYXBzICoKLWdlbmVyYXRlX2NhcHMgKHZvaWQpCi17Ci0gIHJldHVybiBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXBwbGljYXRpb24veC1ydHAiLAotICAgICAgIm1lZGlhIiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwKLSAgICAgICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgUENNVV9CVUZfQ0xPQ0tfUkFURSwKLSAgICAgICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgIlBDTVUiLAotICAgICAgInBheWxvYWQiLCBHX1RZUEVfSU5ULCBQQ01VX0JVRl9QVCwKLSAgICAgICJzc3JjIiwgR19UWVBFX1VJTlQsIFBDTVVfQlVGX1NTUkMsIE5VTEwpOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKEdzdENsb2NrVGltZSBnc3RfdHMsCi0gICAgZ2Jvb2xlYW4gbWFya2VyX2JpdCwgZ3VpbnQgc2VxX251bSwgZ3VpbnQzMiBydHBfdHMpCi17Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBndWludDggKnBheWxvYWQ7Ci0gIGd1aW50IGk7Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotCi0gIGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoUENNVV9CVUZfU0laRSwgMCwgMCk7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gZ3N0X3RzOwotICBHU1RfQlVGRkVSX1BUUyAoYnVmKSA9IGdzdF90czsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9SRUFEV1JJVEUsICZydHApOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfcGF5bG9hZF90eXBlICgmcnRwLCBQQ01VX0JVRl9QVCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9tYXJrZXIgKCZydHAsIG1hcmtlcl9iaXQpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxICgmcnRwLCBzZXFfbnVtKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3RpbWVzdGFtcCAoJnJ0cCwgcnRwX3RzKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3NzcmMgKCZydHAsIFBDTVVfQlVGX1NTUkMpOwotCi0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBQQ01VX0JVRl9TSVpFOyBpKyspCi0gICAgcGF5bG9hZFtpXSA9IDB4ZmY7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGd1aW50IHNlcV9udW0pCi17Ci0gIHJldHVybiBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsIChzZXFfbnVtICogUENNVV9CVUZfRFVSQVRJT04sCi0gICAgICBUUlVFLCBzZXFfbnVtLCBzZXFfbnVtICogUENNVV9SVFBfVFNfRFVSQVRJT04pOwotfQotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdlbmVyYXRlX3Rlc3RfYnVmZmVyX3J0eCAoR3N0Q2xvY2tUaW1lIGR0cywgZ3VpbnQgc2VxX251bSkKLXsKLSAgR3N0QnVmZmVyICpidWZmZXIgPSBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsIChkdHMsIFRSVUUsIHNlcV9udW0sCi0gICAgICBzZXFfbnVtICogUENNVV9SVFBfVFNfRFVSQVRJT04pOwotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChidWZmZXIsIEdTVF9SVFBfQlVGRkVSX0ZMQUdfUkVUUkFOU01JU1NJT04pOwotICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgZ2ludAotZ2V0X3J0cF9zZXFfbnVtIChHc3RCdWZmZXIgKiBidWYpCi17Ci0gIEdzdFJUUEJ1ZmZlciBydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBnaW50IHNlcTsKLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRCwgJnJ0cCk7Ci0gIHNlcSA9IGdzdF9ydHBfYnVmZmVyX2dldF9zZXEgKCZydHApOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cCk7Ci0gIHJldHVybiBzZXE7Ci19Ci0KLXN0YXRpYyB2b2lkCi12ZXJpZnlfbG9zdF9ldmVudCAoR3N0RXZlbnQgKiBldmVudCwgZ3VpbnQxNiBleHBlY3RlZF9zZXFudW0sCi0gICAgR3N0Q2xvY2tUaW1lIGV4cGVjdGVkX3RpbWVzdGFtcCwgR3N0Q2xvY2tUaW1lIGV4cGVjdGVkX2R1cmF0aW9uKQotewotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAoZXZlbnQpOwotICBjb25zdCBHVmFsdWUgKnZhbHVlOwotICBndWludDMyIHNlcW51bTsKLSAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcDsKLSAgR3N0Q2xvY2tUaW1lIGR1cmF0aW9uOwotCi0gIGZhaWxfdW5sZXNzIChldmVudCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzZXFudW0iLCAmc2VxbnVtKSk7Ci0KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInRpbWVzdGFtcCIpOwotICBnX2Fzc2VydCAodmFsdWUgJiYgR19WQUxVRV9IT0xEU19VSU5UNjQgKHZhbHVlKSk7Ci0gIHRpbWVzdGFtcCA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJkdXJhdGlvbiIpOwotICBmYWlsX3VubGVzcyAodmFsdWUgJiYgR19WQUxVRV9IT0xEU19VSU5UNjQgKHZhbHVlKSk7Ci0gIGR1cmF0aW9uID0gZ192YWx1ZV9nZXRfdWludDY0ICh2YWx1ZSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXhwZWN0ZWRfc2VxbnVtLCBzZXFudW0pOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChleHBlY3RlZF90aW1lc3RhbXAsIHRpbWVzdGFtcCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGV4cGVjdGVkX2R1cmF0aW9uLCBkdXJhdGlvbik7Ci0KLSAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi12ZXJpZnlfcnR4X2V2ZW50IChHc3RFdmVudCAqIGV2ZW50LCBndWludDMyIGV4cGVjdGVkX3NlcW51bSwKLSAgICBHc3RDbG9ja1RpbWUgZXhwZWN0ZWRfdGltZXN0YW1wLCBndWludCBleHBlY3RlZF9kZWxheSwKLSAgICBHc3RDbG9ja1RpbWUgZXhwZWN0ZWRfc3BhY2luZykKLXsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X2V2ZW50X2dldF9zdHJ1Y3R1cmUgKGV2ZW50KTsKLSAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLSAgZ3VpbnQzMiBzZXFudW07Ci0gIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIHNwYWNpbmc7Ci0gIGd1aW50IGRlbGF5OwotCi0gIGZhaWxfdW5sZXNzIChldmVudCk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF91aW50IChzLCAic2VxbnVtIiwgJnNlcW51bSkpOwotCi0gIHZhbHVlID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJydW5uaW5nLXRpbWUiKTsKLSAgZmFpbF91bmxlc3MgKHZhbHVlICYmIEdfVkFMVUVfSE9MRFNfVUlOVDY0ICh2YWx1ZSkpOwotICB0aW1lc3RhbXAgPSBnX3ZhbHVlX2dldF91aW50NjQgKHZhbHVlKTsKLQotICB2YWx1ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZGVsYXkiKTsKLSAgZmFpbF91bmxlc3MgKHZhbHVlICYmIEdfVkFMVUVfSE9MRFNfVUlOVCAodmFsdWUpKTsKLSAgZGVsYXkgPSBnX3ZhbHVlX2dldF91aW50ICh2YWx1ZSk7Ci0KLSAgdmFsdWUgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgInBhY2tldC1zcGFjaW5nIik7Ci0gIGZhaWxfdW5sZXNzICh2YWx1ZSAmJiBHX1ZBTFVFX0hPTERTX1VJTlQ2NCAodmFsdWUpKTsKLSAgc3BhY2luZyA9IGdfdmFsdWVfZ2V0X3VpbnQ2NCAodmFsdWUpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGV4cGVjdGVkX3NlcW51bSwgc2VxbnVtKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZXhwZWN0ZWRfdGltZXN0YW1wLCB0aW1lc3RhbXApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChleHBlY3RlZF9kZWxheSwgZGVsYXkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChleHBlY3RlZF9zcGFjaW5nLCBzcGFjaW5nKTsKLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLX0KLQotc3RhdGljIGdib29sZWFuCi12ZXJpZnlfamJfc3RhdHMgKEdzdEVsZW1lbnQgKiBqYiwgR3N0U3RydWN0dXJlICogZXhwZWN0ZWQpCi17Ci0gIGdib29sZWFuIHJldDsKLSAgR3N0U3RydWN0dXJlICphY3R1YWw7Ci0gIGdfb2JqZWN0X2dldCAoamIsICJzdGF0cyIsICZhY3R1YWwsIE5VTEwpOwotCi0gIHJldCA9IGdzdF9zdHJ1Y3R1cmVfaXNfc3Vic2V0IChhY3R1YWwsIGV4cGVjdGVkKTsKLQotICBpZiAoIXJldCkgewotICAgIGdjaGFyICplX3N0ciA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChleHBlY3RlZCk7Ci0gICAgZ2NoYXIgKmFfc3RyID0gZ3N0X3N0cnVjdHVyZV90b19zdHJpbmcgKGFjdHVhbCk7Ci0gICAgZmFpbF91bmxlc3MgKHJldCwgIiVzIGlzIG5vdCBhIHN1YnNldCBvZiAlcyIsIGVfc3RyLCBhX3N0cik7Ci0gICAgZ19mcmVlIChlX3N0cik7Ci0gICAgZ19mcmVlIChhX3N0cik7Ci0gIH0KLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKGV4cGVjdGVkKTsKLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChhY3R1YWwpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X29ubHlfb25lX2xvc3RfZXZlbnRfb25fbGFyZ2VfZ2FwcykKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgR3N0Q2xvY2tJRCBpZCwgdGVzdF9pZDsKLSAgR3N0QnVmZmVyICpvdXRfYnVmOwotICBHc3RFdmVudCAqb3V0X2V2ZW50OwotICBnaW50IGpiX2xhdGVuY3lfbXMgPSAyMDA7Ci0gIGdpbnQgbnVtX2xvc3RfZXZlbnRzID0gamJfbGF0ZW5jeV9tcyAvIFBDTVVfQlVGX01TOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotICAvKiBOZWVkIHRvIHNldCBtYXgtbWlzb3JkZXItdGltZSBhbmQgbWF4LWRyb3BvdXQtdGltZSB0byAwIHNvIHRoZQotICAgKiBqaXR0ZXJidWZmZXIgZG9lcyBub3QgYmFzZSB0aGVtIG9uIHBhY2tldCByYXRlIGNhbGN1bGF0aW9ucy4KLSAgICogSWYgaXQgZG9lcywgb3V0IGdhcCBpcyBiaWcgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgYSBuZXcgc3RyZWFtIGFuZAotICAgKiB3ZSB3YWl0IGZvciBhIGZldyBjb25zZWN1dGl2ZSBwYWNrZXRzIGp1c3QgdG8gYmUgc3VyZQotICAgKi8KLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tbG9zdCIsIFRSVUUsICJsYXRlbmN5IiwgamJfbGF0ZW5jeV9tcywKLSAgICAgICJtYXgtbWlzb3JkZXItdGltZSIsIDAsICJtYXgtZHJvcG91dC10aW1lIiwgMCwgTlVMTCk7Ci0KLSAgLyogcHVzaCB0aGUgZmlyc3QgYnVmZmVyIGluICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDApKSk7Ci0KLSAgLyogd2FpdCBmb3IgdGhlIGZpcnN0IGJ1ZmZlciB0byBiZSBzeW5jZWQgdG8gdGltZXN0YW1wICsgbGF0ZW5jeSAqLwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RjbG9jaywgJmlkKTsKLQotICAvKiBpbmNyZWFzZSB0aGUgdGltZSB0byB0aW1lc3RhbXAgKyBsYXRlbmN5IGFuZCByZWxlYXNlIHRoZSB3YWl0ICovCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIGpiX2xhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORCk7Ci0gIHRlc3RfaWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKHRlc3RjbG9jayk7Ci0gIGZhaWxfdW5sZXNzIChpZCA9PSB0ZXN0X2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmICh0ZXN0X2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgLyogY2hlY2sgZm9yIHRoZSBidWZmZXIgY29taW5nIG91dCB0aGF0IHdhcyBwdXNoZWQgaW4gKi8KLSAgb3V0X2J1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICgwLCBHU1RfQlVGRkVSX0RUUyAob3V0X2J1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICgwLCBHU1RfQlVGRkVSX1BUUyAob3V0X2J1ZikpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLQotICAvKiBtb3ZlIHRpbWUgYWhlYWQgdG8ganVzdCBiZWZvcmUgMTAgc2Vjb25kcyAqLwotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAodGVzdGNsb2NrLCAxMCAqIEdTVF9TRUNPTkQgLSAxKTsKLQotICAvKiBjaGVjayB0aGF0IHdlIGhhdmUgbm8gcGVuZGluZyB3YWl0cyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfdGVzdF9jbG9ja19wZWVrX2lkX2NvdW50ICh0ZXN0Y2xvY2spKTsKLQotICAvKiBhIGJ1ZmZlciBub3cgYXJyaXZlcyBwZXJmZWN0bHkgb24gdGltZSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICg1MDApKSk7Ci0KLSAgLyogcmVsZWFzZSB0aGUgd2FpdCwgYWR2YW5jaW5nIHRoZSBjbG9jayB0byAxMCBzZWMgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0KLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQotICAgIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIC8qIHdlIHNob3VsZCBub3cgcmVjZWl2ZSBhIHBhY2tldC1sb3N0LWV2ZW50IGZvciBidWZmZXJzIDEgdGhyb3VnaCA0ODkgLi4uICovCi0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCAxLCAxICogUENNVV9CVUZfRFVSQVRJT04sCi0gICAgICBQQ01VX0JVRl9EVVJBVElPTiAqIDQ4OSk7Ci0KLSAgLyogLi4uIGFzIHdlbGwgYXMgNDkwIChzaW5jZSBhdCAxMCBzZWMgNDkwIGlzIHRvbyBsYXRlKSAqLwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgNDkwLCA0OTAgKiBQQ01VX0JVRl9EVVJBVElPTiwKLSAgICAgIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiB3ZSBnZXQgYXMgbWFueSBsb3N0IGV2ZW50cyBhcyB0aGUgdGhlIG51bWJlciBvZiAqCi0gICAqIGJ1ZmZlcnMgdGhlIGppdHRlcmJ1ZmZlciBpcyBhYmxlIHRvIHdhaXQgZm9yICovCi0gIGZvciAoaW50IGkgPSAxOyBpIDwgbnVtX2xvc3RfZXZlbnRzOyBpKyspIHsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpKTsKLSAgICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCA0OTAgKyBpLCAoNDkwICsgaSkgKiBQQ01VX0JVRl9EVVJBVElPTiwKLSAgICAgICAgUENNVV9CVUZfRFVSQVRJT04pOwotICB9Ci0KLSAgLyogYW5kIHRoZW4gdGhlIGJ1ZmZlciBpcyByZWxlYXNlZCAqLwotICBvdXRfYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX0ZMQUdfSVNfU0VUIChvdXRfYnVmLCBHU1RfQlVGRkVSX0ZMQUdfRElTQ09OVCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICg1MDAsIGdldF9ydHBfc2VxX251bSAob3V0X2J1ZikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICgxMCAqIEdTVF9TRUNPTkQsIEdTVF9CVUZGRVJfRFRTIChvdXRfYnVmKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKDEwICogR1NUX1NFQ09ORCwgR1NUX0JVRkZFUl9QVFMgKG91dF9idWYpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0X2J1Zik7Ci0KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSA0OTksIE5VTEwpKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGVzdGNsb2NrKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3R3b19sb3N0X29uZV9hcnJpdmVzX2luX3RpbWUpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0VGVzdENsb2NrICp0ZXN0Y2xvY2s7Ci0gIEdzdENsb2NrSUQgaWQ7Ci0gIEdzdEJ1ZmZlciAqb3V0X2J1ZjsKLSAgR3N0RXZlbnQgKm91dF9ldmVudDsKLSAgZ2ludCBqYl9sYXRlbmN5X21zID0gMTAwOyAgICAgLyogRklYTUU6IHNldHRpbmcgdGhpcyB0byAxMCBwcm9kdWNlcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0cmFuZ2UgcmVzdWx0ICgzMG1zIGxvc3QgZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmaW5kIG91dCB3aHkhICovCi0gIEdzdENsb2NrVGltZSBidWZmZXJfdGltZTsKLSAgZ2ludCBiOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1sb3N0IiwgVFJVRSwgImxhdGVuY3kiLCBqYl9sYXRlbmN5X21zLCBOVUxMKTsKLQotICAvKiBwdXNoIHRoZSBmaXJzdCBidWZmZXIgdGhyb3VnaCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwKSkpOwotICBmYWlsX3VubGVzcyAoZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotCi0gIC8qIHB1c2ggc29tZSBidWZmZXJzIGFycml2aW5nIGluIHBlcmZlY3QgdGltZSEgKi8KLSAgZm9yIChiID0gMTsgYiA8IDM7IGIrKykgewotICAgIGJ1ZmZlcl90aW1lID0gYiAqIFBDTVVfQlVGX0RVUkFUSU9OOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoYikpKTsKLQotICAgIC8qIGNoZWNrIGZvciB0aGUgYnVmZmVyIGNvbWluZyBvdXQgdGhhdCB3YXMgcHVzaGVkIGluICovCi0gICAgb3V0X2J1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGJ1ZmZlcl90aW1lLCBHU1RfQlVGRkVSX0RUUyAob3V0X2J1ZikpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGJ1ZmZlcl90aW1lLCBHU1RfQlVGRkVSX1BUUyAob3V0X2J1ZikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dF9idWYpOwotICB9Ci0KLSAgLyogaG9wIG92ZXIgMiBwYWNrZXRzIGFuZCBtYWtlIGFub3RoZXIgb25lIChnYXAgb2YgMikgKi8KLSAgYiA9IDU7Ci0gIGJ1ZmZlcl90aW1lID0gYiAqIFBDTVVfQlVGX0RVUkFUSU9OOwotICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoYikpOwotCi0gIC8qIHZlcmlmeSB0aGF0IHRoZSBqaXR0ZXJidWZmZXIgbm93IHdhaXQgZm9yIHRoZSBsYXRlc3QgbW9tZW50IGl0IGNhbiBwdXNoICovCi0gIC8qIHRoZSBmaXJzdCBsb3N0IGJ1ZmZlciAoYnVmZmVyIDMpIG91dCBvbgotICAgKiAoYnVmZmVyLXRpbWVzdGFtcCAoNjApICsgbGF0ZW5jeSAoMTAwKSA9IDE2MCkgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0Y2xvY2ssICZpZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKDMgKiBQQ01VX0JVRl9EVVJBVElPTiArCi0gICAgICBqYl9sYXRlbmN5X21zICogR1NUX01TRUNPTkQsIGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgLyogbGV0IHRoZSB0aW1lIGV4cGlyZS4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpKTsKLQotICAvKiBkcm9wIEdzdEV2ZW50U3RyZWFtU3RhcnQgJiBHc3RFdmVudENhcHMgJiBHc3RFdmVudFNlZ21lbnQgKi8KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgZ3N0X2V2ZW50X3VucmVmIChnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKSk7Ci0KLSAgLyogd2Ugc2hvdWxkIG5vdyByZWNlaXZlIGEgcGFja2V0LWxvc3QtZXZlbnQgZm9yIGJ1ZmZlciAzICovCi0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCAzLCAzICogUENNVV9CVUZfRFVSQVRJT04sIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiBidWZmZXIgNCBub3cgYXJyaXZlcyBqdXN0IGluIHRpbWUgKHRpbWUgaXMgNzAsIGJ1ZmZlciA0IGV4cGlyZXMgYXQgOTApICovCi0gIGIgPSA0OwotICBidWZmZXJfdGltZSA9IGIgKiBQQ01VX0JVRl9EVVJBVElPTjsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoYikpKTsKLQotICAvKiB2ZXJpZnkgdGhhdCBidWZmZXIgNCBtYWRlIGl0IHRocm91Z2ghICovCi0gIG91dF9idWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKG91dF9idWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDQsIGdldF9ydHBfc2VxX251bSAob3V0X2J1ZikpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLQotICAvKiBhbmQgc2VlIHRoYXQgYnVmZmVyIDUgbm93IGFycml2ZXMgaW4gYSBub3JtYWwgZmFzaGlvbiAqLwotICBvdXRfYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzICghR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAob3V0X2J1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoNSwgZ2V0X3J0cF9zZXFfbnVtIChvdXRfYnVmKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dF9idWYpOwotCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSA1LAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbGF0ZV9wYWNrZXRzX3N0aWxsX21ha2VzX2xvc3RfZXZlbnRzKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RCdWZmZXIgKm91dF9idWY7Ci0gIEdzdEV2ZW50ICpvdXRfZXZlbnQ7Ci0gIGdpbnQgamJfbGF0ZW5jeV9tcyA9IDEwMDsKLSAgR3N0Q2xvY2tUaW1lIGJ1ZmZlcl90aW1lOwotICBnaW50IGI7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgdGVzdGNsb2NrID0gZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jayAoaCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLWxvc3QiLCBUUlVFLCAibGF0ZW5jeSIsIGpiX2xhdGVuY3lfbXMsIE5VTEwpOwotCi0gIC8qIGFkdmFuY2UgdGhlIGNsb2NrIHdpdGggMTAgc2Vjb25kcyAqLwotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAodGVzdGNsb2NrLCAxMCAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIHB1c2ggdGhlIGZpcnN0IGJ1ZmZlciB0aHJvdWdoICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1c2hfYW5kX3B1bGwgKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwKSkpOwotCi0gIC8qIHB1c2ggc29tZSBidWZmZXJzIGFycml2aW5nIGluIHBlcmZlY3QgdGltZSEgKi8KLSAgZm9yIChiID0gMTsgYiA8IDM7IGIrKykgewotICAgIGJ1ZmZlcl90aW1lID0gYiAqIFBDTVVfQlVGX0RVUkFUSU9OOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoYikpKTsKLQotICAgIC8qIGNoZWNrIGZvciB0aGUgYnVmZmVyIGNvbWluZyBvdXQgdGhhdCB3YXMgcHVzaGVkIGluICovCi0gICAgb3V0X2J1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGJ1ZmZlcl90aW1lLCBHU1RfQlVGRkVSX0RUUyAob3V0X2J1ZikpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGJ1ZmZlcl90aW1lLCBHU1RfQlVGRkVSX1BUUyAob3V0X2J1ZikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dF9idWYpOwotICB9Ci0KLSAgLyogaG9wIG92ZXIgMiBwYWNrZXRzIGFuZCBtYWtlIGFub3RoZXIgb25lIChnYXAgb2YgMikgKi8KLSAgYiA9IDU7Ci0gIGJ1ZmZlcl90aW1lID0gYiAqIFBDTVVfQlVGX0RVUkFUSU9OOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyIChiKSkpOwotCi0gIC8qIGRyb3AgR3N0RXZlbnRTdHJlYW1TdGFydCAmIEdzdEV2ZW50Q2FwcyAmIEdzdEV2ZW50U2VnbWVudCAqLwotICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAvKiB3ZSBzaG91bGQgbm93IHJlY2VpdmUgcGFja2V0LWxvc3QtZXZlbnRzIGZvciBidWZmZXIgMyBhbmQgNCAqLwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgMywgMyAqIFBDTVVfQlVGX0RVUkFUSU9OLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCA0LCA0ICogUENNVV9CVUZfRFVSQVRJT04sIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiB2ZXJpZnkgdGhhdCBidWZmZXIgNSBtYWRlIGl0IHRocm91Z2ghICovCi0gIG91dF9idWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKG91dF9idWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDUsIGdldF9ydHBfc2VxX251bSAob3V0X2J1ZikpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLQotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgNCwKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDIsIE5VTEwpKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGVzdGNsb2NrKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfbnVtX2xhdGVfd2hlbl9jb25zaWRlcmVkX2xvc3RfYXJyaXZlcykKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBnYm9vbGVhbiBkb19sb3N0ID0gX19pX18gIT0gMDsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1sb3N0IiwgZG9fbG9zdCwgImxhdGVuY3kiLCAxMDAsIE5VTEwpOwotCi0gIC8qIHB1c2ggdGhlIGZpcnN0IGJ1ZmZlciB0aHJvdWdoICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDApKSk7Ci0gIC8qIHN5bmMgb24gdGhlIGZpcnN0IHBhY2tldCAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0KLSAgLyogZ2FwIG9mIDEgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMikpKTsKLQotICAvKiBjcmFuayB0byBvdXRwdXQgbG9zdC1ldmVudCAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0KLSAgaWYgKGRvX2xvc3QpIHsKLSAgICAvKiBkcm9wIEdzdEV2ZW50U3RyZWFtU3RhcnQgJiBHc3RFdmVudENhcHMgJiBHc3RFdmVudFNlZ21lbnQgKi8KLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAgIC8qIHdlIHNob3VsZCBub3cgcmVjZWl2ZSBwYWNrZXQtbG9zdC1ldmVudHMgZm9yIGJ1ZmZlciAxICovCi0gICAgdmVyaWZ5X2xvc3RfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpLAotICAgICAgICAxLCAxICogUENNVV9CVUZfRFVSQVRJT04sIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgfQotCi0gIC8qIHB1bGwgb3V0IGJ1ZmZlcnMgdG8gZW5zdXJlIGRldGVybWluaXNtICovCi0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotCi0gIC8qIHdlIGhhdmUgb25lIGxvc3QgcGFja2V0IGluIHRoZSBzdGF0cyAqLwotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMiwKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJudW0tbGF0ZSIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLCBOVUxMKSkpOwotCi0gIC8qIGJ1ZmZlciAxIG5vdyBhcnJpdmVzICh0b28gbGF0ZSkgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMSkpKTsKLQotICAvKiBhbmQgdGhpcyBpbmNyZW1lbnRzIG51bS1sYXRlICovCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAyLAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgIm51bS1sYXRlIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsIE5VTEwpKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvc3RfZXZlbnRfdXNlc19wdHMpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0RXZlbnQgKm91dF9ldmVudDsKLSAgR3N0Q2xvY2tUaW1lIG5vdzsKLSAgZ2ludCBqYl9sYXRlbmN5X21zID0gMTAwOwotICBnaW50IGk7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tbG9zdCIsIFRSVUUsICJsYXRlbmN5IiwgamJfbGF0ZW5jeV9tcywgTlVMTCk7Ci0KLSAgLyogcHVzaCB0aGUgZmlyc3QgYnVmZmVyIHRocm91Z2ggKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBwdXNoIHNvbWUgYnVmZmVycyBhcnJpdmluZyBpbiBwZXJmZWN0IHRpbWUhICovCi0gIGZvciAoaSA9IDE7IGkgPD0gMjsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyIChpKSkpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLSAgfQotCi0gIC8qIGhvcCBvdmVyIDEgcGFja2V0cyAoc2VxbnVtIDMpIGFuZCBtYWtlIGFub3RoZXIgb25lIChnYXAgb2YgMSksIGJ1dCBkdWUgdG8KLSAgICAgbmV0d29yayBkZWxheXMsIHRoaXMgcGFja2V0cyBpcyBhbHNvIGdyb3NzbHkgbGF0ZSAqLwotICBpID0gNDsKLQotICAvKiBhZHZhbmNlIHRoZSBjbG9jayB0byB0aGUgbGF0ZXN0IHBvc3NpYmxlIHRpbWUgYnVmZmVyIDQgY291bGQgYXJyaXZlICovCi0gIG5vdyA9IGkgKiBQQ01VX0JVRl9EVVJBVElPTiArIGpiX2xhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORDsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgKGgsIG5vdyk7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKG5vdywgRkFMU0UsIGksIGkgKiBQQ01VX1JUUF9UU19EVVJBVElPTikpOwotCi0gIC8qIGRyb3AgR3N0RXZlbnRTdHJlYW1TdGFydCAmIEdzdEV2ZW50Q2FwcyAmIEdzdEV2ZW50U2VnbWVudCAqLwotICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAvKiB3ZSBzaG91bGQgbm93IGhhdmUgcmVjZWl2ZWQgYSBwYWNrZXQtbG9zdC1ldmVudCBmb3IgYnVmZmVyIDMgKi8KLSAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCk7Ci0gIHZlcmlmeV9sb3N0X2V2ZW50IChvdXRfZXZlbnQsIDMsIDMgKiBQQ01VX0JVRl9EVVJBVElPTiwgUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIC8qIGFuZCBwdWxsIG91dCBwYWNrZXQgNCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tcHVzaGVkIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDQsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAxLCBOVUxMKSkpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9sb3N0X2V2ZW50X3dpdGhfYmFja3dhcmRzX3J0cHRpbWUpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0RXZlbnQgKm91dF9ldmVudDsKLSAgZ2ludCBqYl9sYXRlbmN5X21zID0gMTAwOwotICBnaW50IGk7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tbG9zdCIsIFRSVUUsICJsYXRlbmN5IiwgamJfbGF0ZW5jeV9tcywgTlVMTCk7Ci0KLSAgLyogcHVzaCB0aGUgZmlyc3QgYnVmZmVyIHRocm91Z2ggKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBwdXNoIHNvbWUgYnVmZmVycyBhcnJpdmluZyBpbiBwZXJmZWN0IHRpbWUhICovCi0gIGZvciAoaSA9IDE7IGkgPD0gMjsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyIChpKSkpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLSAgfQotCi0gIC8qCi0gICAgIEZvciB2aWRlbyB1c2luZyBCLWZyYW1lcywgYW4gZXhwZWN0ZWQgc2VxdWVuY2UKLSAgICAgY291bGQgYmUgbGlrZSB0aGlzOgotICAgICAoSSA9IEktZnJhbWUsIFAgPSBQLWZyYW1lLCBCID0gQi1mcmFtZSkKLSAgICAgICAgICAgICAgIF9fXyAgIF9fXyAgIF9fXyAgIF9fXyAgIF9fXwotICAgICAgICAgIC4uLiB8IDMgfCB8IDQgfCB8IDUgfCB8IDYgfCB8IDcgfAotICAgICAgICAgICAgICAg4oCT4oCT4oCTICAg4oCT4oCT4oCTICAg4oCT4oCT4oCTICAg4oCT4oCT4oCTICAg4oCT4oCT4oCTCi0gICAgcnRwdGltZTogICAzKEkpICA1KFApICA1KFApICA0KEIpICA2KFApCi1hcnJpdmFsKGR0cyk6ICAzICAgICA1ICAgICA1ICAgICA1ICAgICA2Ci0KLSAgICAgTm90aWNlIGhlcmUgdGhhdCBwYWNrZXQgNiAodGhlIEIgZnJhbWUpIG1ha2UKLSAgICAgdGhlIHJ0cHRpbWUgZ28gYmFja3dhcmRzLgotCi0gICAgIEJ1dCB3ZSBnZXQgdGhpczoKLSAgICAgICAgICAgICAgIF9fXyAgIF9fXyAgIF8gXyAgIF9fXyAgIF9fXwotICAgICAgICAgIC4uLiB8IDMgfCB8IDQgfCB8ICAgfCB8IDYgfCB8IDcgfAotICAgICAgICAgICAgICAg4oCT4oCT4oCTICAg4oCT4oCT4oCTICAgLSAtICAg4oCT4oCT4oCTICAg4oCT4oCT4oCTCi0gICAgIHJ0cHRpbWU6ICAzKEkpICA1KFApICAgICAgICA0KEIpICA2KFApCi1hcnJpdmFsKGR0cyk6ICAzICAgICA1ICAgICAgICAgICA1ICAgICA2Ci0KLSAgKi8KLQotICAvKiBzZXFudW0gMyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgzKSkpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgIC8qIHNlcW51bSA0LCBhcnJpdmluZyBhdCB0aW1lIDUgd2l0aCBydHB0aW1lIDUgKi8KLSAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKAotICAgICAgNSAqIFBDTVVfQlVGX0RVUkFUSU9OLCBGQUxTRSwgNCwgNSAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBzZXFudW0gNiwgYXJyaXZpbmcgYXQgdGltZSA1IHdpdGggcnRwdGltZSA0LAotICAgICBtYWtpbmcgYSBnYXAgZm9yIG1pc3Npbmcgc2VxbnVtIDUgKi8KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoCi0gICAgICA1ICogUENNVV9CVUZfRFVSQVRJT04sIEZBTFNFLCA2LCA0ICogUENNVV9SVFBfVFNfRFVSQVRJT04pKTsKLQotICAvKiBzZXFudW0gNywgYXJyaXZpbmcgYXQgdGltZSA2IHdpdGggcnRwdGltZSA2ICovCi0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKAotICAgICAgNiAqIFBDTVVfQlVGX0RVUkFUSU9OLCBGQUxTRSwgNywgNiAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSk7Ci0KLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQotICAgIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIC8qIHdlIHNob3VsZCBub3cgaGF2ZSByZWNlaXZlZCBhIHBhY2tldC1sb3N0LWV2ZW50IGZvciBzZXFudW0gNSwKLSAgICAgd2l0aCB0aW1lIDUgYW5kIDAgZHVyYXRpb24gKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgNSwgNSAqIFBDTVVfQlVGX0RVUkFUSU9OLCAwKTsKLQotICAvKiBhbmQgcHVsbCBvdXQgNiBhbmQgNyAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgNywKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsIE5VTEwpKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2FsbF9wYWNrZXRzX2FyZV90aW1lc3RhbXBlZF96ZXJvKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RCdWZmZXIgKm91dF9idWY7Ci0gIEdzdEV2ZW50ICpvdXRfZXZlbnQ7Ci0gIGdpbnQgamJfbGF0ZW5jeV9tcyA9IDEwMDsKLSAgZ2ludCBiOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1sb3N0IiwgVFJVRSwgImxhdGVuY3kiLCBqYl9sYXRlbmN5X21zLCBOVUxMKTsKLQotICAvKiBhZHZhbmNlIHRoZSBjbG9jayB3aXRoIDEwIHNlY29uZHMgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgMTAgKiBHU1RfU0VDT05EKTsKLQotICAvKiBwdXNoIHRoZSBmaXJzdCBidWZmZXIgdGhyb3VnaCAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdXNoX2FuZF9wdWxsIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCkpKTsKLQotICAvKiBwdXNoIHNvbWUgYnVmZmVycyBpbiwgYWxsIHRpbWVzdGFtcGVkIDAgKi8KLSAgZm9yIChiID0gMTsgYiA8IDM7IGIrKykgewotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoMCAqIEdTVF9NU0VDT05ELCBUUlVFLCBiLCAwKSkpOwotCi0gICAgLyogY2hlY2sgZm9yIHRoZSBidWZmZXIgY29taW5nIG91dCB0aGF0IHdhcyBwdXNoZWQgaW4gKi8KLSAgICBvdXRfYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoMCwgR1NUX0JVRkZFUl9EVFMgKG91dF9idWYpKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICgwLCBHU1RfQlVGRkVSX1BUUyAob3V0X2J1ZikpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dF9idWYpOwotICB9Ci0KLSAgLyogaG9wIG92ZXIgMiBwYWNrZXRzIGFuZCBtYWtlIGFub3RoZXIgb25lIChnYXAgb2YgMikgKi8KLSAgYiA9IDU7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwKLSAgICAgICAgICBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsICgwICogR1NUX01TRUNPTkQsIFRSVUUsIGIsIDApKSk7Ci0KLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQotICAgIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIC8qIHdlIHNob3VsZCBub3cgcmVjZWl2ZSBwYWNrZXQtbG9zdC1ldmVudHMgZm9yIGJ1ZmZlciAzIGFuZCA0ICovCi0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCAzLCAwLCAwKTsKLSAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCk7Ci0gIHZlcmlmeV9sb3N0X2V2ZW50IChvdXRfZXZlbnQsIDQsIDAsIDApOwotCi0gIC8qIHZlcmlmeSB0aGF0IGJ1ZmZlciA1IG1hZGUgaXQgdGhyb3VnaCEgKi8KLSAgb3V0X2J1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAob3V0X2J1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoNSwgZ2V0X3J0cF9zZXFfbnVtIChvdXRfYnVmKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dF9idWYpOwotCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSA0LAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMiwgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcmVvcmRlcl9vZl9ub25fZXF1aWRpc3RhbnRfcGFja2V0cykKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgZ2ludCBsYXRlbmN5X21zID0gNTsKLSAgR3N0Q2xvY2tJRCBwZW5kaW5nX2lkOwotICBHc3RDbG9ja1RpbWUgdGltZTsKLSAgZ2ludCBzZXEsIGZyYW1lOwotICBnaW50IG51bV9pbml0X2ZyYW1lcyA9IDE7Ci0gIGNvbnN0IEdzdENsb2NrVGltZSBmcmFtZV9kdXIgPSBQQ01VX0JVRl9EVVJBVElPTjsKLSAgY29uc3QgZ3VpbnQzMiBmcmFtZV9ydHBfdHNfZHVyID0gUENNVV9SVFBfVFNfRFVSQVRJT047Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgdGVzdGNsb2NrID0gZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jayAoaCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLWxvc3QiLCBUUlVFLCAibGF0ZW5jeSIsIGxhdGVuY3lfbXMsIE5VTEwpOwotCi0gIGZvciAoZnJhbWUgPSAwLCBzZXEgPSAwOyBmcmFtZSA8IG51bV9pbml0X2ZyYW1lczsgZnJhbWUrKywgc2VxICs9IDIpIHsKLSAgICAvKiBQdXNoIGEgY291cGxlIG9mIHBhY2tldHMgd2l0aCBpZGVudGljYWwgdGltZXN0YW1wLCB0eXBpY2FsIGZvciBhIHZpZGVvCi0gICAgICogc3RyZWFtIHdoZXJlIG9uZSBmcmFtZSBnZW5lcmF0ZXMgbXVsdGlwbGUgcGFja2V0cy4gKi8KLSAgICBnc3RfaGFybmVzc19zZXRfdGltZSAoaCwgZnJhbWUgKiBmcmFtZV9kdXIpOwotICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKGZyYW1lICogZnJhbWVfZHVyLCBGQUxTRSwKLSAgICAgICAgICAgIHNlcSwgZnJhbWUgKiBmcmFtZV9ydHBfdHNfZHVyKSk7Ci0gICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoZnJhbWUgKiBmcmFtZV9kdXIsIFRSVUUsCi0gICAgICAgICAgICBzZXEgKyAxLCBmcmFtZSAqIGZyYW1lX3J0cF90c19kdXIpKTsKLQotICAgIGlmIChmcmFtZSA9PSAwKQotICAgICAgLyogZGVhZGxpbmUgZm9yIGJ1ZmZlciAwIGV4cGlyZXMgKi8KLSAgICAgIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIH0KLQotICAvKiBGaW5hbGx5IHB1c2ggdGhlIGxhc3QgZnJhbWUgcmVvcmRlcmVkICovCi0gIGdzdF9oYXJuZXNzX3NldF90aW1lIChoLCBmcmFtZSAqIGZyYW1lX2R1cik7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKGZyYW1lICogZnJhbWVfZHVyLCBUUlVFLAotICAgICAgICAgIHNlcSArIDEsIGZyYW1lICogZnJhbWVfcnRwX3RzX2R1cikpOwotCi0gIC8qIENoZWNrIHRoZSBzY2hlZHVsZWQgbG9zdCB0aW1lci4gVGhlIGV4cGVjdGVkIGFycml2YWwgb2YgdGhpcyBwYWNrZXQKLSAgICogc2hvdWxkIGJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGxhc3QgcGFja2V0IHJlY2VpdmVkIHNpbmNlIHdlCi0gICAqIGRvbid0IGtub3cgd2V0aGVyIHRoZSBtaXNzaW5nIHBhY2tldCBiZWxvbmdlZCB0byB0aGlzIG9yIHByZXZpb3VzCi0gICAqIGZyYW1lLiAqLwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RjbG9jaywgJnBlbmRpbmdfaWQpOwotICB0aW1lID0gZ3N0X2Nsb2NrX2lkX2dldF90aW1lIChwZW5kaW5nX2lkKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0ICh0aW1lLCBmcmFtZSAqIGZyYW1lX2R1ciArIGxhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAocGVuZGluZ19pZCk7Ci0KLSAgLyogQW5kIHRoZW4gbWlzc2luZyBwYWNrZXQgYXJyaXZlcyBqdXN0IGluIHRpbWUgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgKGgsIHRpbWUgLSAxKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAodGltZSAtIDEsIEZBTFNFLCBzZXEsCi0gICAgICAgICAgZnJhbWUgKiBmcmFtZV9ydHBfdHNfZHVyKSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGVzdGNsb2NrKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvc3NfZXF1aWRpc3RhbnRfc3BhY2luZ193aXRoX3BhcmFtZXRlcl9wYWNrZXRzKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdpbnQgbGF0ZW5jeV9tcyA9IDU7Ci0gIGdpbnQgc2VxLCBmcmFtZTsKLSAgZ2ludCBudW1faW5pdF9mcmFtZXMgPSAxMDsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tbG9zdCIsIFRSVUUsICJsYXRlbmN5IiwgbGF0ZW5jeV9tcywgTlVMTCk7Ci0KLSAgLyogZHJvcCBzdHJlYW0tc3RhcnQsIGNhcHMsIHNlZ21lbnQgKi8KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgZ3N0X2V2ZW50X3VucmVmIChnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKSk7Ci0KLSAgZm9yIChmcmFtZSA9IDAsIHNlcSA9IDA7IGZyYW1lIDwgbnVtX2luaXRfZnJhbWVzOyBmcmFtZSsrLCBzZXErKykgewotICAgIGdzdF9oYXJuZXNzX3NldF90aW1lIChoLCBmcmFtZSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsIChmcmFtZSAqIFBDTVVfQlVGX0RVUkFUSU9OLAotICAgICAgICAgICAgVFJVRSwgc2VxLCBmcmFtZSAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSk7Ci0KLSAgICBpZiAoZnJhbWUgPT0gMCkKLSAgICAgIC8qIGRlYWRsaW5lIGZvciBidWZmZXIgMCBleHBpcmVzICovCi0gICAgICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIH0KLQotICAvKiBQdXNoIHRocmVlIHBhY2tldHMgd2l0aCBzYW1lIHJ0cHRpbWUsIHNpbXVsYXRpbmcgcGFyYW1ldGVyIHBhY2tldHMgKwotICAgKiBmcmFtZS4gVGhpcyBzaG91bGQgbm90IGRpc2FibGUgZXF1aWRpc3RhbnQgbW9kZSBhcyBpdCBpcyBjb21tb24gZm9yCi0gICAqIGNlcnRhaW4gYXVkaW8gY29kZWNzLiAqLwotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICBnc3RfaGFybmVzc19zZXRfdGltZSAoaCwgZnJhbWUgKiBQQ01VX0JVRl9EVVJBVElPTik7Ci0gICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoZnJhbWUgKiBQQ01VX0JVRl9EVVJBVElPTiwKLSAgICAgICAgICAgIGkgPT0gMiwgc2VxKyssIGZyYW1lICogUENNVV9SVFBfVFNfRFVSQVRJT04pKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIH0KLSAgZnJhbWUrKzsKLQotICAvKiBGaW5hbGx5IHB1c2ggdGhlIGxhc3QgcGFja2V0IGludHJvZHVjaW5nIGEgZ2FwICovCi0gIGdzdF9oYXJuZXNzX3NldF90aW1lIChoLCBmcmFtZSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoZnJhbWUgKiBQQ01VX0JVRl9EVVJBVElPTiwKLSAgICAgICAgICBUUlVFLCBzZXEgKyAxLCBmcmFtZSAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSk7Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgbG9zdCBldmVudCBoYXMgYmVlbiBnZW5lcmF0ZWQgYXNzdW1pbmcgZXF1aWRpc3RhbnQKLSAgICogc3BhY2luZy4gKi8KLSAgZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKGV2ZW50LCBzZXEsCi0gICAgICBmcmFtZSAqIFBDTVVfQlVGX0RVUkFUSU9OIC0gUENNVV9CVUZfRFVSQVRJT04gLyAyLCBQQ01VX0JVRl9EVVJBVElPTiAvIDIpOwotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgdm9pZAotZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWVfYW5kX3Byb2Nlc3MgKEdzdFRlc3RDbG9jayAqIHRlc3RjbG9jaywKLSAgICBHc3RDbG9ja1RpbWUgdGltZSkKLXsKLSAgR3N0Q2xvY2tJRCBpZCwgdGlkOwotICBnc3RfdGVzdF9jbG9ja193YWl0X2Zvcl9uZXh0X3BlbmRpbmdfaWQgKHRlc3RjbG9jaywgJmlkKTsKLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgdGltZSk7Ci0gIHRpZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAodGVzdGNsb2NrKTsKLSAgZ19hc3NlcnQgKHRpZCA9PSBpZCk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAodGlkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0eF9leHBlY3RlZF9uZXh0KQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RCdWZmZXIgKm91dF9idWY7Ci0gIEdzdEV2ZW50ICpvdXRfZXZlbnQ7Ci0gIGdpbnQgamJfbGF0ZW5jeV9tcyA9IDIwMDsKLSAgY29uc3QgR3N0Q2xvY2tUaW1lIHJ0eF9yZXRyeV90aW1lb3V0ID0gNDAgKiBHU1RfTVNFQ09ORDsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLQotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1sb3N0IiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLXJldHJhbnNtaXNzaW9uIiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImxhdGVuY3kiLCBqYl9sYXRlbmN5X21zLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAicnR4LXJldHJ5LXBlcmlvZCIsIDEyMCwgTlVMTCk7Ci0KLSAgLyogcHVzaCB0aGUgZmlyc3QgYnVmZmVyIGluICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDApKSk7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgKGgsIDIwICogR1NUX01TRUNPTkQpOwotICBnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0cyAoaCwgMSwgNjApOwotCi0gIC8qIHB1dCBzZWNvbmQgYnVmZmVyLCB0aGUgaml0dGVyYnVmZmVyIHNob3VsZCBub3cga25vdyB0aGF0IHRoZSBwYWNrZXQKLSAgICogc3BhY2luZyBpcyAyMG1zIGFuZCBzaG91bGQgYXNrIGZvciByZXRyYW5zbWlzc2lvbiBvZiBzZXFudW0gMiBpbgotICAgKiAyMG1zKzEwbXMgYmVjYXVzZSAyKmppdHRlcj09MCBhbmQgMC41KnBhY2tldF9zcGFjaW5nPT0xMG1zICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDEpKSk7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWVfYW5kX3Byb2Nlc3MgKHRlc3RjbG9jaywgNTAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogZHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQotICAgIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpOwotICB2ZXJpZnlfcnR4X2V2ZW50IChvdXRfZXZlbnQsIDIsIHJ0eF9yZXRyeV90aW1lb3V0LCAxMCwgUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIC8qIG5vdyB3ZSB3YWl0IGZvciB0aGUgbmV4dCB0aW1lb3V0LCBhbGwgZm9sbG93aW5nIHRpbWVvdXRzIDQwbXMgaW4gdGhlCi0gICAqIGZ1dHVyZSBiZWNhdXNlIHRoaXMgaXMgcnR4LXJldHJ5LXRpbWVvdXQgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWVfYW5kX3Byb2Nlc3MgKHRlc3RjbG9jaywgOTAgKiBHU1RfTVNFQ09ORCk7Ci0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpOwotICB2ZXJpZnlfcnR4X2V2ZW50IChvdXRfZXZlbnQsIDIsIHJ0eF9yZXRyeV90aW1lb3V0LCA1MCwgUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lX2FuZF9wcm9jZXNzICh0ZXN0Y2xvY2ssIDEzMCAqIEdTVF9NU0VDT05EKTsKLSAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKG91dF9ldmVudCwgMiwgcnR4X3JldHJ5X3RpbWVvdXQsIDkwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWVfYW5kX3Byb2Nlc3MgKHRlc3RjbG9jaywgMjAwICogR1NUX01TRUNPTkQpOwotICBvdXRfYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIGdldF9ydHBfc2VxX251bSAob3V0X2J1ZikpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLQotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZV9hbmRfcHJvY2VzcyAodGVzdGNsb2NrLCAyNDAgKiBHU1RfTVNFQ09ORCk7Ci0gIC8qIHdlIHNob3VsZCBub3cgcmVjZWl2ZSBhIHBhY2tldC1sb3N0LWV2ZW50IGZvciBidWZmZXIgMiAqLwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgMiwgNDAgKiBHU1RfTVNFQ09ORCwgUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfdHdvX21pc3NpbmcpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0VGVzdENsb2NrICp0ZXN0Y2xvY2s7Ci0gIGdpbnQgbGF0ZW5jeV9tcyA9IDIwMDsKLSAgZ2ludCBydHhfZGVsYXlfbXM7Ci0gIEdzdENsb2NrVGltZSBsYXN0X3J0eF9yZXF1ZXN0LCBub3c7Ci0KLSAgdGVzdGNsb2NrID0gZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jayAoaCk7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLXJldHJhbnNtaXNzaW9uIiwgVFJVRSwgImxhdGVuY3kiLCBsYXRlbmN5X21zLAotICAgICAgTlVMTCk7Ci0KLSAgZm9yIChnaW50IGkgPSAwOyBpIDw9IGxhdGVuY3lfbXMgLyBQQ01VX0JVRl9NUzsgaSsrKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgaSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkpKSk7Ci0gICAgZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgKGgsIDEsIDYwKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXRlbmN5X21zICogR1NUX01TRUNPTkQsCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSkpOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8PSBsYXRlbmN5X21zIC8gUENNVV9CVUZfTVM7IGkrKykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogZHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLQotICAvKgotICAgICBUaGUgZXhwZWN0ZWQgc2VxdWVuY2Ugb2YgYnVmZmVycyBpcyB0aGlzOgotICAgICBfX19fICAgX19fXyAgIF9fX18gICBfX19fCi0gICAgIC4uLiB8IDEwIHwgfCAxMSB8IHwgMTIgfCB8IDEzIHwKLSAgICAg4oCT4oCT4oCT4oCTICAg4oCT4oCT4oCT4oCTICAg4oCT4oCT4oCT4oCTICAg4oCT4oCT4oCT4oCTCi0gICAgIDIwMG1zICAyMjBtcyAgMjQwbXMgIDI2MG1zCi0KLSAgICAgQnV0IGluc3RlYWQgd2UgZ2V0IHRoaXM6Ci0gICAgIF9fX18gICAgXyBfICAgIF8gXyAgIF9fX18KLSAgICAgLi4uIHwgMTAgfCAgfCAgIHwgIHwgICB8IHwgMTMgfAotICAgICDigJPigJPigJPigJMgICAgLSAtICAgIC0gLSAgIOKAk+KAk+KAk+KAkwotICAgICAyMDBtcyAgICAgICAgICAgICAgICAyNjBtcwotCi0gICAgIE5vdyBpdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBuZXh0IHRoaW5nIHRoYXQgaGFwcGVucyBpcyB0aGF0Ci0gICAgIHRoZSBSVFggdGltZW91dCBmb3IgcGFja2V0IDExIHdpbGwgaGFwcGVuIGF0IHRpbWUgMjMwbXMsIHNvIHdlIGNyYW5rCi0gICAgIHRoZSB0aW1lciB0aHJlYWQgdG8gYWR2YW5jZSB0aGUgdGltZSB0byB0aGlzOiAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIHJ0eF9kZWxheV9tcyA9IFBDTVVfQlVGX01TIC8gMjsKLSAgdmVyaWZ5X3J0eF9ldmVudCAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCksCi0gICAgICAxMSwgMTEgKiBQQ01VX0JVRl9EVVJBVElPTiwgcnR4X2RlbGF5X21zLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIGxhc3RfcnR4X3JlcXVlc3QgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAobGFzdF9ydHhfcmVxdWVzdCwKLSAgICAgIDExICogUENNVV9CVUZfRFVSQVRJT04gKyBydHhfZGVsYXlfbXMgKiBHU1RfTVNFQ09ORCk7Ci0gIGdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzIChoLCAxLCA2MCk7Ci0KLSAgLyogVGhlIG5leHQgc2NoZWR1bGVkIFJUWCBmb3IgcGFja2V0IDExIGlzIG5vdyBhdCAyMzAgKyA0MCA9IDI3MG1zLAotICAgICBzbyB0aGUgbmV4dCB0aGluZyB0aGF0IGhhcHBlbnMgaXMgdGhhdCBidWZmZXIgMTMgYXJyaXZlcyBpbiBwZXJmZWN0IHRpbWU6ICovCi0gIG5vdyA9IDEzICogUENNVV9CVUZfRFVSQVRJT047Ci0gIGdzdF9oYXJuZXNzX3NldF90aW1lIChoLCBub3cpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsCi0gICAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAobm93LCBUUlVFLCAxMywKLSAgICAgICAgICAgICAgMTMgKiBQQ01VX1JUUF9UU19EVVJBVElPTikpKTsKLQotICAvKgotCi0gICAgIFRoaXMgd2lsbCBlc3RpbWF0ZSB0aGUgZHRzIG9uIHRoZSB0d28gbWlzc2luZyBwYWNrZXRzIHRvOgotICAgICBfX19fICAgX19fXwotICAgICAuLi4gfCAxMSB8IHwgMTIgfCAuLi4KLSAgICAg4oCT4oCT4oCT4oCTICAg4oCT4oCT4oCT4oCTCi0gICAgIDIyMG1zICAyNDBtcwotCi0gICAgIEFuZCBnaXZlbiB0aGVpciByZWd1bGFyIGludGVyc3BhY2luZyBvZiAyMG1zLCBpdCB3aWxsIHNjaGVkdWxlIHR3byBSVFgKLSAgICAgdGltZXJzIGZvciB0aGVtIGxpa2Ugc286Ci0KLSAgICAgX19fXyAgIF9fX18KLSAgICAgLi4uIHwgMTEgfCB8IDEyIHwgLi4uCi0gICAgIOKAk+KAk+KAk+KAkyAgIOKAk+KAk+KAk+KAkwotICAgICAyMzBtcyAgMjUwbXMKLQotICAgICBUaGVyZSBhcmUgaG93ZXZlciB0d28gcHJvYmxlbXMsIHBhY2tldCAxMSB3ZSBoYXZlIGFscmVhZHkgc2VudCBvbmUgUlRYIGZvcgotICAgICBhbmQgaXRzIHRpbWVvdXQgaXMgY3VycmVudGx5IGF0IDI3MG1zLCBzbyB3ZSBzaG91bGQgbm90IHRhbXBlciB3aXRoIHRoYXQsCi0gICAgIGFuZCBhcyBmb3IgcGFja2V0IDEyLCAyNTBtcyBoYXMgYWxyZWFkeSBleHBpcmVkLCBzbyB3ZSBub3cgZXhwZWN0IHRvIHNlZQotICAgICBhbiBydHgtZXZlbnQgYmVpbmcgc2VudCBmb3IgcGFja2V0IDEyIGltbWVkaWF0ZWx5OiAqLwotICB2ZXJpZnlfcnR4X2V2ZW50IChnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSwKLSAgICAgIDEyLCAxMiAqIFBDTVVfQlVGX0RVUkFUSU9OLCBydHhfZGVsYXlfbXMsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiBhbmQgYW5vdGhlciBjcmFuayB3aWxsIHNlZSB0aGUgc2Vjb25kIFJUWCBldmVudCBiZWluZyBzZW50IGZvciBwYWNrZXQgMTEgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBydHhfZGVsYXlfbXMgKz0gNDA7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpLAotICAgICAgMTEsIDExICogUENNVV9CVUZfRFVSQVRJT04sIHJ0eF9kZWxheV9tcywgUENNVV9CVUZfRFVSQVRJT04pOwotICBsYXN0X3J0eF9yZXF1ZXN0ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChHU1RfQ0xPQ0sgKHRlc3RjbG9jaykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGxhc3RfcnR4X3JlcXVlc3QsCi0gICAgICAxMSAqIFBDTVVfQlVGX0RVUkFUSU9OICsgcnR4X2RlbGF5X21zICogR1NUX01TRUNPTkQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfcGFja2V0X2RlbGF5KQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RCdWZmZXIgKmluX2J1ZiwgKm91dF9idWY7Ci0gIEdzdEV2ZW50ICpvdXRfZXZlbnQ7Ci0gIGdpbnQgamJfbGF0ZW5jeV9tcyA9IDIwMDsKLSAgZ2ludCBpOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotCi0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLWxvc3QiLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAibGF0ZW5jeSIsIGpiX2xhdGVuY3lfbXMsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJydHgtcmV0cnktcGVyaW9kIiwgMTIwLCBOVUxMKTsKLQotICAvKiBwdXNoIHRoZSBmaXJzdCBidWZmZXIgaW4gKi8KLSAgaW5fYnVmID0gZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDApOwotICBHU1RfQlVGRkVSX0ZMQUdfU0VUIChpbl9idWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKTsKLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgaW5fYnVmKTsKLQotICAvKiBwdXQgc2Vjb25kIGJ1ZmZlciwgdGhlIGppdHRlcmJ1ZmZlciBzaG91bGQgbm93IGtub3cgdGhhdCB0aGUgcGFja2V0Ci0gICAqIHNwYWNpbmcgaXMgMjBtcyBhbmQgc2hvdWxkIGFzayBmb3IgcmV0cmFuc21pc3Npb24gb2Ygc2VxbnVtIDIgaW4KLSAgICogMjBtcysxMG1zIGJlY2F1c2UgMipqaXR0ZXI9PTAgYW5kIDAuNSpwYWNrZXRfc3BhY2luZz09MTBtcyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgxKSkpOwotCi0gIC8qIHB1c2ggYnVmZmVyIDgsIDIgLT4gNyBhcmUgbWlzc2luZyBub3cuIG5vdGUgdGhhdCB0aGUgcnRwIHRpbWUgaXMgdGhlIHNhbWUKLSAgICogYXMgcGFja2V0IDEgYmVjYXVzZSBpdCB3YXMgcGFydCBvZiBhIGZyYWdtZW50ZWQgcGF5bG9hZC4gVGhpcyBtZWFucyB0aGF0Ci0gICAqIHRoZSBlc3RpbWF0ZSBmb3IgMiBjb3VsZCBiZSByZWZpbmVkIG5vdyB0byAyMG1zLiBhbHNvIHBhY2tldCAyLCAzIGFuZCA0Ci0gICAqIGFyZSBleGNlZWRpbmcgdGhlIG1heCBhbGxvd2VkIHJlb3JkZXIgZGlzdGFuY2UgYW5kIHNob3VsZCByZXF1ZXN0IGEKLSAgICogcmV0cmFuc21pc3Npb24gcmlnaHQgYXdheSAqLwotICBnc3RfaGFybmVzc19zZXRfdGltZSAoaCwgMSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsICgxICogUENNVV9CVUZfRFVSQVRJT04sIFRSVUUsIDgsCi0gICAgICAgICAgICAgIDEgKiBQQ01VX1JUUF9UU19EVVJBVElPTikpKTsKLQotICAvKiBkcm9wIHJlY29uZmlndXJlIGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCkpOwotICAvKiBkcm9wIEdzdEV2ZW50U3RyZWFtU3RhcnQgJiBHc3RFdmVudENhcHMgJiBHc3RFdmVudFNlZ21lbnQgKi8KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgZ3N0X2V2ZW50X3VucmVmIChnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKSk7Ci0KLSAgLyogd2Ugc2hvdWxkIG5vdyByZWNlaXZlIHJldHJhbnNtaXNzaW9uIHJlcXVlc3RzIGZvciAyIC0+IDUgKi8KLSAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKG91dF9ldmVudCwgMiwgMjAgKiBHU1RfTVNFQ09ORCwgMTAsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICBmb3IgKGkgPSAzOyBpIDwgNTsgaSsrKSB7Ci0gICAgR1NUX0RFQlVHICgicG9wcGluZyAlZCIsIGkpOwotICAgIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpOwotICAgIHZlcmlmeV9ydHhfZXZlbnQgKG91dF9ldmVudCwgaSwgMjAgKiBHU1RfTVNFQ09ORCwgMTAsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgfQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKGgpKTsKLQotICAvKiBwdXNoIDksIHRoaXMgc2hvdWxkIGltbWVkaWF0ZWx5IHJlcXVlc3QgcmV0cmFuc21pc3Npb24gb2YgNSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKDEgKiBQQ01VX0JVRl9EVVJBVElPTiwgVFJVRSwgOSwKLSAgICAgICAgICAgICAgMSAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSkpOwotCi0gIC8qIHdlIHNob3VsZCBub3cgcmVjZWl2ZSByZXRyYW5zbWlzc2lvbiByZXF1ZXN0cyBmb3IgNSAqLwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKTsKLSAgdmVyaWZ5X3J0eF9ldmVudCAob3V0X2V2ZW50LCA1LCAyMCAqIEdTVF9NU0VDT05ELCAxMCwgUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIC8qIHdhaXQgZm9yIHRpbWVvdXQgZm9yIHJ0eCA2IC0+IDcgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWVfYW5kX3Byb2Nlc3MgKHRlc3RjbG9jaywgNjAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgZm9yIChpID0gNjsgaSA8IDg7IGkrKykgewotICAgIEdTVF9ERUJVRyAoInBvcHBpbmcgJWQiLCBpKTsKLSAgICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKTsKLSAgICB2ZXJpZnlfcnR4X2V2ZW50IChvdXRfZXZlbnQsIGksIDIwICogR1NUX01TRUNPTkQsIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIH0KLQotICAvKiBjaHVybiB0aHJvdWdoIDcgc3luY190aW1lcyB1bnRpbCB0aGUgbmV3IGJ1ZmZlciBnZXRzIHB1c2hlZCBvdXQgKi8KLSAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLSAgICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0KLSAgLyogdmVyaWZ5IHRoYXQgYnVmZmVyIDAgYW5kIDEgbWFkZSBpdCB0aHJvdWdoISAqLwotICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgb3V0X2J1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICAgIGlmIChpID09IDApCi0gICAgICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAob3V0X2J1ZiwgR1NUX0JVRkZFUl9GTEFHX0RJU0NPTlQpKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChpLCBnZXRfcnRwX3NlcV9udW0gKG91dF9idWYpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLSAgfQotCi0gIGZvciAoaSA9IDI7IGkgPCA4OyBpKyspIHsKLSAgICBHU1RfREVCVUcgKCJwb3BwaW5nIGxvc3QgZXZlbnQgJWQiLCBpKTsKLSAgICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCBpLCAyMCAqIEdTVF9NU0VDT05ELCAwKTsKLSAgfQotCi0gIC8qIHZlcmlmeSB0aGF0IGJ1ZmZlciA4IG1hZGUgaXQgdGhyb3VnaCEgKi8KLSAgZm9yIChpID0gODsgaSA8IDEwOyBpKyspIHsKLSAgICBHU1RfREVCVUcgKCJwb3BwaW5nIGJ1ZmZlciAlZCIsIGkpOwotICAgIG91dF9idWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgICBpZiAoaSA9PSA4KQotICAgICAgZ19hc3NlcnQgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKG91dF9idWYsIEdTVF9CVUZGRVJfRkxBR19ESVNDT05UKSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoaSwgZ2V0X3J0cF9zZXFfbnVtIChvdXRfYnVmKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0X2J1Zik7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJwb3BwaW5nIGxvc3QgZXZlbnQgMTAiKTsKLSAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCk7Ci0gIHZlcmlmeV9sb3N0X2V2ZW50IChvdXRfZXZlbnQsIDEwLCA0MCAqIEdTVF9NU0VDT05ELCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfZXZlbnRzX2luX3F1ZXVlIChoKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDE1LCBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKGgpKTsKLQotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDcsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMjEsCi0gICAgICAgICAgICAgICJydHgtc3VjY2Vzcy1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAicnR4LXJ0dCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLCBOVUxMKSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfYnVmZmVyX2Fycml2ZXNfanVzdF9pbl90aW1lKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBnaW50IGxhdGVuY3lfbXMgPSA1ICogUENNVV9CVUZfTVM7Ci0gIGdpbnQgbnVtX2luaXRfYnVmZmVycyA9IGxhdGVuY3lfbXMgLyBQQ01VX0JVRl9NUyArIDE7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RDbG9ja1RpbWUgbm93LCBsYXN0X3J0eF9yZXF1ZXN0OwotCi0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1yZXRyYW5zbWlzc2lvbiIsIFRSVUUsICJsYXRlbmN5IiwgbGF0ZW5jeV9tcywKLSAgICAgICJydHgtbWF4LXJldHJpZXMiLCAxLCBOVUxMKTsKLQotICAvKiBQdXNoL3B1bGwgYnVmZmVycyBhbmQgYWR2YW5jZSB0aW1lIHBhc3QgYnVmZmVyIDAncyB0aW1lb3V0IChpbiBvcmRlciB0bwotICAgKiBzaW1wbGlmeSB0aGUgdGVzdCkgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgaSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkpKSk7Ci0gICAgZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgKGgsIDEsIDYwKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXRlbmN5X21zICogR1NUX01TRUNPTkQsCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSkpOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9pbml0X2J1ZmZlcnM7IGkrKykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogZHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLQotICAvKiBDcmFuayBjbG9jayB0byBzZW5kIHJldHJhbnNtaXNzaW9uIGV2ZW50cyByZXF1ZXN0aW5nIHNlcW51bSA2IHdoaWNoIGhhcwotICAgKiBub3QgYXJyaXZlZCB5ZXQuICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgdmVyaWZ5X3J0eF9ldmVudCAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCksCi0gICAgICA2LCA2ICogUENNVV9CVUZfRFVSQVRJT04sIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgbGFzdF9ydHhfcmVxdWVzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXN0X3J0eF9yZXF1ZXN0LCAxMzAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogc2VxbnVtIDYgYXJyaXZlcyBqdXN0IGJlZm9yZSBpdCB0aW1lcyBvdXQgYW5kIGlzIGNvbnNpZGVyZWQgbG9zdCAqLwotICBub3cgPSAyMDAgKiBHU1RfTVNFQ09ORDsKLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgbm93KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssIGdzdF9oYXJuZXNzX3B1c2ggKGgsCi0gICAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXJfcnR4IChub3csIDYpKSk7Ci0gIGJ1ZmZlciA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICg2LCBnZXRfcnRwX3NlcV9udW0gKGJ1ZmZlcikpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSBudW1faW5pdF9idWZmZXJzICsgMSwKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgInJ0eC1zdWNjZXNzLWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJydHgtcGVyLXBhY2tldCIsIEdfVFlQRV9ET1VCTEUsIDEuMCwKLSAgICAgICAgICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgKG5vdyAtIGxhc3RfcnR4X3JlcXVlc3QpLAotICAgICAgICAgICAgICBOVUxMKSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfYnVmZmVyX2Fycml2ZXNfdG9vX2xhdGUpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0VGVzdENsb2NrICp0ZXN0Y2xvY2s7Ci0gIGdpbnQgbGF0ZW5jeV9tcyA9IDUgKiBQQ01VX0JVRl9NUzsKLSAgZ2ludCBudW1faW5pdF9idWZmZXJzID0gbGF0ZW5jeV9tcyAvIFBDTVVfQlVGX01TICsgMTsKLSAgR3N0Q2xvY2tUaW1lIG5vdywgbGFzdF9ydHhfcmVxdWVzdDsKLQotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCAibGF0ZW5jeSIsIGxhdGVuY3lfbXMsCi0gICAgICAiZG8tbG9zdCIsIFRSVUUsICJydHgtbWF4LXJldHJpZXMiLCAxLCBOVUxMKTsKLQotICAvKiBQdXNoL3B1bGwgYnVmZmVycyBhbmQgYWR2YW5jZSB0aW1lIHBhc3QgYnVmZmVyIDAncyB0aW1lb3V0IChpbiBvcmRlciB0bwotICAgKiBzaW1wbGlmeSB0aGUgdGVzdCkgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgaSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkpKSk7Ci0gICAgZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgKGgsIDEsIDYwKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXRlbmN5X21zICogR1NUX01TRUNPTkQsCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSkpOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9pbml0X2J1ZmZlcnM7IGkrKykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogZHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAvKiBDcmFuayBjbG9jayB0byBzZW5kIHJldHJhbnNtaXNzaW9uIGV2ZW50cyByZXF1ZXN0aW5nIHNlcW51bSA2IHdoaWNoIGhhcwotICAgKiBub3QgYXJyaXZlZCB5ZXQuICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgdmVyaWZ5X3J0eF9ldmVudCAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCksCi0gICAgICA2LCA2ICogUENNVV9CVUZfRFVSQVRJT04sIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgbGFzdF9ydHhfcmVxdWVzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXN0X3J0eF9yZXF1ZXN0LCAxMzAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogc2VxbnVtIDYgaXMgY29uc2lkZXJlZCBsb3N0ICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpLCA2LAotICAgICAgNiAqIFBDTVVfQlVGX0RVUkFUSU9OLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgLyogc2VxbnVtIDYgYXJyaXZlcyB0b28gbGF0ZSAqLwotICBub3cgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX3J0eCAobm93LCA2KSkpOwotCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSBudW1faW5pdF9idWZmZXJzLAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgIm51bS1sYXRlIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJudW0tZHVwbGljYXRlcyIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJydHgtc3VjY2Vzcy1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAicnR4LXBlci1wYWNrZXQiLCBHX1RZUEVfRE9VQkxFLCAxLjAsCi0gICAgICAgICAgICAgICJydHgtcnR0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIChub3cgLSBsYXN0X3J0eF9yZXF1ZXN0KSwKLSAgICAgICAgICAgICAgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcnR4X29yaWdpbmFsX2J1ZmZlcl9kb2VzX25vdF91cGRhdGVfcnR4X3N0YXRzKQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBnaW50IGxhdGVuY3lfbXMgPSA1ICogUENNVV9CVUZfTVM7Ci0gIGdpbnQgbnVtX2luaXRfYnVmZmVycyA9IGxhdGVuY3lfbXMgLyBQQ01VX0JVRl9NUyArIDE7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBHc3RDbG9ja1RpbWUgbm93LCBsYXN0X3J0eF9yZXF1ZXN0OwotCi0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1yZXRyYW5zbWlzc2lvbiIsIFRSVUUsICJsYXRlbmN5IiwgbGF0ZW5jeV9tcywKLSAgICAgICJydHgtbWF4LXJldHJpZXMiLCAxLCBOVUxMKTsKLQotICAvKiBQdXNoL3B1bGwgYnVmZmVycyBhbmQgYWR2YW5jZSB0aW1lIHBhc3QgYnVmZmVyIDAncyB0aW1lb3V0IChpbiBvcmRlciB0bwotICAgKiBzaW1wbGlmeSB0aGUgdGVzdCkgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgaSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkpKSk7Ci0gICAgZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgKGgsIDEsIDYwKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXRlbmN5X21zICogR1NUX01TRUNPTkQsCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSkpOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9pbml0X2J1ZmZlcnM7IGkrKykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogZHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLQotICAvKiBDcmFuayBjbG9jayB0byBzZW5kIHJldHJhbnNtaXNzaW9uIGV2ZW50cyByZXF1ZXN0aW5nIHNlcW51bSA2IHdoaWNoIGhhcwotICAgKiBub3QgYXJyaXZlZCB5ZXQuICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgdmVyaWZ5X3J0eF9ldmVudCAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCksCi0gICAgICA2LCA2ICogUENNVV9CVUZfRFVSQVRJT04sIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgbGFzdF9ydHhfcmVxdWVzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXN0X3J0eF9yZXF1ZXN0LCAxMzAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogT1JJR0lOQUwgc2VxbnVtIDYgYXJyaXZlcyBqdXN0IGJlZm9yZSBpdCB0aW1lcyBvdXQgYW5kIGlzIGNvbnNpZGVyZWQKLSAgICogbG9zdC4gKi8KLSAgbm93ID0gMjAwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIG5vdyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKG5vdywgVFJVRSwgNiwgNiAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSkpOwotICBidWZmZXIgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoNiwgZ2V0X3J0cF9zZXFfbnVtIChidWZmZXIpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLQotICAvKiBkdWUgdG8gdGhlIGFkdmFuY2UgaW4gdGltZSwgd2Ugd2lsbCBub3cgYWxzbyBoYXZlIHNlbnQKLSAgICAgYW4gcnR4LXJlcXVlc3QgZm9yIDcgKi8KLSAgdmVyaWZ5X3J0eF9ldmVudCAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCksCi0gICAgICA3LCA3ICogUENNVV9CVUZfRFVSQVRJT04sIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgLyogVGhlIG9yaWdpbmFsIGJ1ZmZlciBkb2VzIG5vdCBjb3VudCBpbiB0aGUgUlRYIHN0YXRzLiAqLwotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgbnVtX2luaXRfYnVmZmVycyArIDEsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAibnVtLWxhdGUiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgIm51bS1kdXBsaWNhdGVzIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMiwKLSAgICAgICAgICAgICAgInJ0eC1zdWNjZXNzLWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtcGVyLXBhY2tldCIsIEdfVFlQRV9ET1VCTEUsIDAuMCwKLSAgICAgICAgICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwgTlVMTCkpKTsKLQotICAvKiBOb3cgdGhlIHJldHJhbnNtaXR0ZWQgcGFja2V0IGFycml2ZXMgYW5kIHN0YXRzIHNob3VsZCBiZSB1cGRhdGVkLiBOb3RlCi0gICAqIHRoYXQgdGhlIGJ1ZmZlciBhcnJpdmVzIGluIHRpbWUgYW5kIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBsYXRlLCBidXQKLSAgICogYSBkdXBsaWNhdGUuICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX3J0eCAobm93LCA2KSkpOwotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgbnVtX2luaXRfYnVmZmVycyArIDEsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAibnVtLWxhdGUiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgIm51bS1kdXBsaWNhdGVzIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMiwKLSAgICAgICAgICAgICAgInJ0eC1zdWNjZXNzLWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtcGVyLXBhY2tldCIsIEdfVFlQRV9ET1VCTEUsIDEuMCwKLSAgICAgICAgICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgKG5vdyAtIGxhc3RfcnR4X3JlcXVlc3QpLAotICAgICAgICAgICAgICBOVUxMKSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfZHVwbGljYXRlX3BhY2tldF91cGRhdGVzX3J0eF9zdGF0cykKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgZ2ludCBsYXRlbmN5X21zID0gNSAqIFBDTVVfQlVGX01TOwotICBnaW50IG51bV9pbml0X2J1ZmZlcnMgPSBsYXRlbmN5X21zIC8gUENNVV9CVUZfTVMgKyAxOwotICBHc3RDbG9ja1RpbWUgbm93LCBydHhfcmVxdWVzdF82LCBydHhfcmVxdWVzdF83OwotICBnaW50IHJ0eF9kZWxheV9tczsKLQotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCAibGF0ZW5jeSIsIGxhdGVuY3lfbXMsCi0gICAgICBOVUxMKTsKLQotICAvKiBQdXNoL3B1bGwgYnVmZmVycyBhbmQgYWR2YW5jZSB0aW1lIHBhc3QgYnVmZmVyIDAncyB0aW1lb3V0IChpbiBvcmRlciB0bwotICAgKiBzaW1wbGlmeSB0aGUgdGVzdCkgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgaSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkpKSk7Ci0gICAgZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgKGgsIDEsIDYwKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXRlbmN5X21zICogR1NUX01TRUNPTkQsCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSkpOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9pbml0X2J1ZmZlcnM7IGkrKykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogRHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLQotICAvKiBQdXNoIHBhY2tldCA4IHNvIHRoYXQgNiBhbmQgNyBpcyBtaXNzaW5nICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDgpKSk7Ci0KLSAgLyogV2FpdCBmb3IgTkFDS3Mgb24gNiBhbmQgNyAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIHJ0eF9kZWxheV9tcyA9IDEwOwotICB2ZXJpZnlfcnR4X2V2ZW50IChnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSwKLSAgICAgIDYsIDYgKiBQQ01VX0JVRl9EVVJBVElPTiwgcnR4X2RlbGF5X21zLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIHJ0eF9yZXF1ZXN0XzYgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAocnR4X3JlcXVlc3RfNiwKLSAgICAgIDYgKiBQQ01VX0JVRl9EVVJBVElPTiArIHJ0eF9kZWxheV9tcyAqIEdTVF9NU0VDT05EKTsKLQotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpLAotICAgICAgNywgNyAqIFBDTVVfQlVGX0RVUkFUSU9OLCBydHhfZGVsYXlfbXMsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgcnR4X3JlcXVlc3RfNyA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChydHhfcmVxdWVzdF83LAotICAgICAgNyAqIFBDTVVfQlVGX0RVUkFUSU9OICsgcnR4X2RlbGF5X21zICogR1NUX01TRUNPTkQpOwotCi0gIC8qIE9yaWdpbmFsIHBhY2tldCA3IGFycml2ZXMgKi8KLSAgbm93ID0gMTUwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIG5vdyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX2Z1bGwgKG5vdywgVFJVRSwgNywgNyAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSkpOwotCi0gIC8qIFdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIHBhY2tldCA2LCBzbyA3IHNob3VsZCBub3QgYmUgcHVzaGVkICovCi0gIGdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzIChoLCAxLCA2MCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWUgKGgpLCAwKTsKLQotICAvKiBUaGUgb3JpZ2luYWwgYnVmZmVyIGRvZXMgbm90IGNvdW50IGluIHRoZSBSVFggc3RhdHMuICovCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgIm51bS1sYXRlIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJudW0tZHVwbGljYXRlcyIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDIsCi0gICAgICAgICAgICAgICJydHgtc3VjY2Vzcy1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAicnR4LXBlci1wYWNrZXQiLCBHX1RZUEVfRE9VQkxFLCAwLjAsCi0gICAgICAgICAgICAgICJydHgtcnR0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsIE5VTEwpKSk7Ci0KLSAgLyogUHVzaCBSVFggcGFja2V0IDcuIFNob3VsZCBiZSBkcm9wcGVkIGFzIGR1cGxpY2F0ZSBidXQgdXBkYXRlIFJUWCBzdGF0cy4gKi8KLSAgbm93ID0gMTYwICogR1NUX01TRUNPTkQ7Ci0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIG5vdyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX3J0eCAobm93LCA3KSkpOwotICBnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0cyAoaCwgMSwgNjApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChoKSwgMCk7Ci0KLSAgLyogQ2hlY2sgUlRYIHN0YXRzIHdpdGggdXBkYXRlZCBudW0tZHVwbGljYXRlcyBhbmQgcnR4LXJ0dCBmaWVsZHMgKi8KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tcHVzaGVkIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIG51bV9pbml0X2J1ZmZlcnMsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAibnVtLWxhdGUiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgIm51bS1kdXBsaWNhdGVzIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMiwKLSAgICAgICAgICAgICAgInJ0eC1zdWNjZXNzLWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtcGVyLXBhY2tldCIsIEdfVFlQRV9ET1VCTEUsIDEuMCwKLSAgICAgICAgICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgKG5vdyAtIHJ0eF9yZXF1ZXN0XzcpLAotICAgICAgICAgICAgICBOVUxMKSkpOwotCi0gIC8qIFJUWCBwYWNrZXQgNiBhcnJpdmVzLCBib3RoIDYsIDcgYW5kIDggaXMgcmVhZHkgdG8gYmUgcHVsbGVkICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLCBnc3RfaGFybmVzc19wdXNoIChoLAotICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyX3J0eCAobm93LCA2KSkpOwotCi0gIGZvciAoZ2ludCBpID0gNjsgaSA8PSA4OyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGksIGdldF9ydHBfc2VxX251bSAoYnVmKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotCi0gIC8qIFJUWCBzdGF0cyBpcyB1cGRhdGVkIHdpdGggc3VjY2VzcyBjb3VudCBpbmNyZWFzZWQuICovCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSBudW1faW5pdF9idWZmZXJzICsgMywKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJudW0tbGF0ZSIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAibnVtLWR1cGxpY2F0ZXMiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgInJ0eC1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAyLAotICAgICAgICAgICAgICAicnR4LXN1Y2Nlc3MtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgInJ0eC1wZXItcGFja2V0IiwgR19UWVBFX0RPVUJMRSwgMS4wLAotICAgICAgICAgICAgICAicnR4LXJ0dCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KQotICAgICAgICAgICAgICAvKiBVc2UgdGhlIHJ0eC1ydHQgZm9ybXVsYS4gQ2FuIGJlIHN1YmplY3QgdG8gY2hhbmdlIHRob3VnaC4gKi8KLSAgICAgICAgICAgICAgKChub3cgLSBydHhfcmVxdWVzdF82KSArIDQ3ICogKG5vdyAtIHJ0eF9yZXF1ZXN0XzcpKSAvIDQ4LAotICAgICAgICAgICAgICBOVUxMKSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfYnVmZmVyX2Fycml2ZXNfYWZ0ZXJfbG9zdF91cGRhdGVzX3J0eF9zdGF0cykKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgZ2ludCBsYXRlbmN5X21zID0gNSAqIFBDTVVfQlVGX01TOwotICBnaW50IG51bV9pbml0X2J1ZmZlcnMgPSBsYXRlbmN5X21zIC8gUENNVV9CVUZfTVMgKyAxOwotICBHc3RDbG9ja1RpbWUgbm93LCBsYXN0X3J0eF9yZXF1ZXN0OwotCi0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1yZXRyYW5zbWlzc2lvbiIsIFRSVUUsICJsYXRlbmN5IiwgbGF0ZW5jeV9tcywKLSAgICAgICJkby1sb3N0IiwgVFJVRSwgInJ0eC1tYXgtcmV0cmllcyIsIDEsIE5VTEwpOwotCi0gIC8qIFB1c2gvcHVsbCBidWZmZXJzIGFuZCBhZHZhbmNlIHRpbWUgcGFzdCBidWZmZXIgMCdzIHRpbWVvdXQgKGluIG9yZGVyIHRvCi0gICAqIHNpbXBsaWZ5IHRoZSB0ZXN0KSAqLwotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1faW5pdF9idWZmZXJzOyBpKyspIHsKLSAgICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAodGVzdGNsb2NrLCBpICogUENNVV9CVUZfRFVSQVRJT04pOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoaSkpKTsKLSAgICBnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0cyAoaCwgMSwgNjApOwotICB9Ci0KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGxhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORCwKLSAgICAgIGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKSk7Ci0KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBkcm9wIHJlY29uZmlndXJlIGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCkpOwotICAvKiBkcm9wIEdzdEV2ZW50U3RyZWFtU3RhcnQgJiBHc3RFdmVudENhcHMgJiBHc3RFdmVudFNlZ21lbnQgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgMzsgaSsrKQotICAgIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIC8qIENyYW5rIGNsb2NrIHRvIHNlbmQgcmV0cmFuc21pc3Npb24gZXZlbnRzIHJlcXVlc3Rpbmcgc2VxbnVtIDYgd2hpY2ggaGFzCi0gICAqIG5vdCBhcnJpdmVkIHlldC4gKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICB2ZXJpZnlfcnR4X2V2ZW50IChnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSwKLSAgICAgIDYsIDYgKiBQQ01VX0JVRl9EVVJBVElPTiwgMTAsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICBsYXN0X3J0eF9yZXF1ZXN0ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChHU1RfQ0xPQ0sgKHRlc3RjbG9jaykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGxhc3RfcnR4X3JlcXVlc3QsIDEzMCAqIEdTVF9NU0VDT05EKTsKLQotICAvKiBzZXFudW0gNiBpcyBjb25zaWRlcmVkIGxvc3QgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCksIDYsCi0gICAgICA2ICogUENNVV9CVUZfRFVSQVRJT04sIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiBzZXFudW0gNiBhcnJpdmVzIHRvbyBsYXRlICovCi0gIG5vdyA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssIGdzdF9oYXJuZXNzX3B1c2ggKGgsCi0gICAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXJfcnR4IChub3csIDYpKSk7Ci0KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tcHVzaGVkIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIG51bV9pbml0X2J1ZmZlcnMsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAxLAotICAgICAgICAgICAgICAibnVtLWxhdGUiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgIm51bS1kdXBsaWNhdGVzIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwKLSAgICAgICAgICAgICAgInJ0eC1zdWNjZXNzLWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtcGVyLXBhY2tldCIsIEdfVFlQRV9ET1VCTEUsIDEuMCwKLSAgICAgICAgICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgKG5vdyAtIGxhc3RfcnR4X3JlcXVlc3QpLAotICAgICAgICAgICAgICBOVUxMKSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfcnR0X2xhcmdlcl90aGFuX3JldHJ5X3RpbWVvdXQpCi17Ci0gIC8qIFdoZW4gUlRUIGlzIGxhcmdlciB0aGFuIHJldHJ5IHBlcmlvZCB3ZSB3aWxsIHNlbmQgdHdvIG9yIG1vcmUgcmVxdWVzdHMKLSAgICogYmVmb3JlIHJlY2VpdmluZyBhbnkgcmV0cmFuc21pc3Npb24gcGFja2V0cyAqLwotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBnaW50IGxhdGVuY3lfbXMgPSAxMDA7Ci0gIGdpbnQgbnVtX2luaXRfYnVmZmVycyA9IGxhdGVuY3lfbXMgLyBQQ01VX0JVRl9NUyArIDE7Ci0gIGdpbnQgcnR4X3JldHJ5X3RpbWVvdXRfbXMgPSAyMDsKLSAgZ2ludCBydHhfZGVsYXlfbXMgPSAxMDsKLSAgZ2ludCBydHQgPSBydHhfcmV0cnlfdGltZW91dF9tcyAqIEdTVF9NU0VDT05EICsgMTsKLSAgR3N0Q2xvY2tUaW1lIG5vdywgZmlyc3RfcmVxdWVzdCwgc2Vjb25kX3JlcXVlc3Q7Ci0KLSAgdGVzdGNsb2NrID0gZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jayAoaCk7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLXJldHJhbnNtaXNzaW9uIiwgVFJVRSwgImxhdGVuY3kiLCBsYXRlbmN5X21zLAotICAgICAgInJ0eC1yZXRyeS10aW1lb3V0IiwgcnR4X3JldHJ5X3RpbWVvdXRfbXMsIE5VTEwpOwotCi0gIC8qIFB1c2gvcHVsbCBidWZmZXJzIGFuZCBhZHZhbmNlIHRpbWUgcGFzdCBidWZmZXIgMCdzIHRpbWVvdXQgKGluIG9yZGVyIHRvCi0gICAqIHNpbXBsaWZ5IHRoZSB0ZXN0KSAqLwotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1faW5pdF9idWZmZXJzOyBpKyspIHsKLSAgICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAodGVzdGNsb2NrLCBpICogUENNVV9CVUZfRFVSQVRJT04pOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoaSkpKTsKLSAgICBnc3RfaGFybmVzc193YWl0X2Zvcl9jbG9ja19pZF93YWl0cyAoaCwgMSwgNjApOwotICB9Ci0KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKGxhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORCwKLSAgICAgIGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKSk7Ci0KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKQotICAgIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBEcm9wIHJlY29uZmlndXJlIGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCkpOwotCi0gIC8qIFdhaXQgZm9yIGZpcnN0IE5BQ0sgb24gNiAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpLAotICAgICAgNiwgNiAqIFBDTVVfQlVGX0RVUkFUSU9OLCBydHhfZGVsYXlfbXMsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgZmlyc3RfcmVxdWVzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChmaXJzdF9yZXF1ZXN0LAotICAgICAgNiAqIFBDTVVfQlVGX0RVUkFUSU9OICsgcnR4X2RlbGF5X21zICogR1NUX01TRUNPTkQpOwotCi0gIC8qIFBhY2tldCA3IGFycml2ZXMgaW4gdGltZSAoc28gdGhhdCB3ZSBhdm9pZCBpdHMgRVhQRUNURUQgdGltZXJzIHRvCi0gICAqIGludGVyZmVyIHdpdGggb3VyIHRlc3QpICovCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIDcgKiBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDcpKSk7Ci0KLSAgLyogU2ltdWxhdGluZyBSVFQgPiBydHgtcmV0cnktdGltZW91dCwgd2Ugc2VuZCBhIG5ldyBOQUNLIGJlZm9yZSByZWNlaXZpbmcKLSAgICogdGhlIFJUWCBwYWNrZXQuIFdhaXQgZm9yIHNlY29uZCBOQUNLIG9uIDYgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBydHhfZGVsYXlfbXMgKz0gcnR4X3JldHJ5X3RpbWVvdXRfbXM7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpLAotICAgICAgNiwgNiAqIFBDTVVfQlVGX0RVUkFUSU9OLCBydHhfZGVsYXlfbXMsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgc2Vjb25kX3JlcXVlc3QgPSBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoc2Vjb25kX3JlcXVlc3QsCi0gICAgICA2ICogUENNVV9CVUZfRFVSQVRJT04gKyBydHhfZGVsYXlfbXMgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogVGhlIGZpcnN0IHJldHJhbnNtaXR0ZWQgcGFja2V0IGFycml2ZXMgKi8KLSAgbm93ID0gZmlyc3RfcmVxdWVzdCArIHJ0dDsKLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgbm93KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssIGdzdF9oYXJuZXNzX3B1c2ggKGgsCi0gICAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXJfcnR4IChub3csIDYpKSk7Ci0KLSAgLyogUHVsbCBwYWNrZXQgNiBhbmQgNyAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBTdGF0cyBzaG91bGQgYmUgdXBkYXRlZC4gTm90ZSB0aGF0IFJUVCBpcyBub3QgdXBkYXRlZCBzaW5jZSB3ZSBjYW5ub3QgYmUKLSAgICogc3VyZSB3aGV0aGVyIHRoZSBSVFggcGFja2V0IGlzIGluIHJlc3BvbnNlIHRvIHRoZSBmaXJzdCBvciBzZWNvbmQgTkFDSy4gKi8KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tcHVzaGVkIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIG51bV9pbml0X2J1ZmZlcnMgKyAyLAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgIm51bS1sYXRlIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJudW0tZHVwbGljYXRlcyIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLAotICAgICAgICAgICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDIsCi0gICAgICAgICAgICAgICJydHgtc3VjY2Vzcy1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAxLAotICAgICAgICAgICAgICAicnR4LXBlci1wYWNrZXQiLCBHX1RZUEVfRE9VQkxFLCAyLjAsCi0gICAgICAgICAgICAgICJydHgtcnR0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsIE5VTEwpKSk7Ci0KLSAgLyogUGFja2V0IDggYXJyaXZlcyBpbiB0aW1lICovCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIDggKiBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDgpKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiBOb3cgdGhlIHNlY29uZCByZXRyYW5zbWl0dGVkIHBhY2tldCBhcnJpdmVzICovCi0gIG5vdyA9IHNlY29uZF9yZXF1ZXN0ICsgcnR0OwotICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAodGVzdGNsb2NrLCBub3cpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywgZ3N0X2hhcm5lc3NfcHVzaCAoaCwKLSAgICAgICAgICBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9ydHggKG5vdywgNikpKTsKLQotICAvKiBUaGUgc3RhdHMgaXMgdXBkYXRlZCB3aXRoIHRoZSBjb3JyZWN0IFJUVC4gKi8KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tcHVzaGVkIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIG51bV9pbml0X2J1ZmZlcnMgKyAzLAotICAgICAgICAgICAgICAibnVtLWxvc3QiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgIm51bS1sYXRlIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJudW0tZHVwbGljYXRlcyIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAxLAotICAgICAgICAgICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDIsCi0gICAgICAgICAgICAgICJydHgtc3VjY2Vzcy1jb3VudCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAxLAotICAgICAgICAgICAgICAicnR4LXBlci1wYWNrZXQiLCBHX1RZUEVfRE9VQkxFLCAyLjAsCi0gICAgICAgICAgICAgICJydHgtcnR0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIHJ0dCwgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcnR4X25vX3JlcXVlc3RfaWZfdGltZV9wYXN0X3JldHJ5X3BlcmlvZCkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBjb25zdCBnaW50IGxhdGVuY3lfbXMgPSAyMDA7Ci0gIGNvbnN0IGdpbnQgcmV0cnlfcGVyaW9kX21zID0gMTIwOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgR3N0Q2xvY2tJRCBwZW5kaW5nX2lkLCBwcm9jZXNzZWRfaWQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdpbnQgaTsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLQotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJkby1sb3N0IiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLXJldHJhbnNtaXNzaW9uIiwgVFJVRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImxhdGVuY3kiLCBsYXRlbmN5X21zLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAicnR4LXJldHJ5LXBlcmlvZCIsIHJldHJ5X3BlcmlvZF9tcywgTlVMTCk7Ci0KLSAgLyogcHVzaCB0aGUgZmlyc3QgY291cGxlIG9mIGJ1ZmZlcnMgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCkpKTsKLQotICBnc3RfaGFybmVzc19zZXRfdGltZSAoaCwgMSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMSkpKTsKLQotICAvKiBkcm9wIHJlY29uZmlndXJlIGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCkpOwotICAvKiBkcm9wIEdzdEV2ZW50U3RyZWFtU3RhcnQgJiBHc3RFdmVudENhcHMgJiBHc3RFdmVudFNlZ21lbnQgKi8KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAvKiBXYWl0IGZvciB0aGUgZmlyc3QgRVhQRUNURUQgdGltZXIgdG8gYmUgc2NoZWR1bGVkICovCi0gIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAodGVzdGNsb2NrLCAmcGVuZGluZ19pZCk7Ci0gIHRpbWUgPSBnc3RfY2xvY2tfaWRfZ2V0X3RpbWUgKHBlbmRpbmdfaWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKHRpbWUsIDIgKiBQQ01VX0JVRl9EVVJBVElPTiArIDEwICogR1NUX01TRUNPTkQpOwotCi0gIC8qIExldCB0aGUgZmlyc3QgRVhQRUNURUQgdGltZXIgdGltZSBvdXQgYW5kIGJlIHNlbnQuIEhvd2V2ZXIsIHNldCB0aGUgJ25vdycKLSAgICogdGltZSB0byBiZSBwYXN0IHRoZSByZXRyeS1wZXJpb2Qgc2ltdWxhdGluZyB0aGF0IHRoZSBqaXR0ZXJidWZmZXIgaGFzIHRvbwotICAgKiBtdWNoIHRvIGRvIGFuZCBpcyBub3QgYWJsZSB0byBwcm9jZXNzIGFsbCB0aW1lcnMgaW4gcmVhbC10aW1lLiBJbiB0aGlzCi0gICAqIGNhc2UgdGhlIGppdHRlcmJ1ZmZlciBzaG91bGQgbm90IHNjaGVkdWxlIGEgbmV3IEVYUEVDVEVEIHRpbWVyIGFzIHRoYXQKLSAgICogd291bGQganVzdCBtYWtlIG1hdHRlcnMgd29yc2UgKG1vcmUgdW5uZWNlc3NhcnkgcHJvY2Vzc2luZyBvZiBhIHJlcXVlc3QKLSAgICogdGhhdCBpcyBhbHJlYWR5IHRvbyBsYXRlIHRvIGJlIHZhbHVhYmxlKS4gSW4gcHJhY3RpY2UgdGhpcyB0eXBpY2FsbHkKLSAgICogaGFwcGVucyBmb3IgaGlnaCBsb3NzIG5ldHdvcmtzIHdpdGggbG93IFJUVC4gKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywKLSAgICAgIDIgKiBQQ01VX0JVRl9EVVJBVElPTiArIHJldHJ5X3BlcmlvZF9tcyAqIEdTVF9NU0VDT05EICsgMSk7Ci0gIHByb2Nlc3NlZF9pZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAodGVzdGNsb2NrKTsKLSAgZmFpbF91bmxlc3MgKHBlbmRpbmdfaWQgPT0gcHJvY2Vzc2VkX2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwZW5kaW5nX2lkKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChwcm9jZXNzZWRfaWQpOwotCi0gIC8qIFZlcmlmeSB0aGUgZXZlbnQuIEl0IGNvdWxkIGJlIGFyZ3VlZCB0aGF0IHRoaXMgcmVxdWVzdCBpcyBhbHJlYWR5IHRvbwotICAgKiBsYXRlIGFuZCB1bm5lY2Vzc2FyeS4gSG93ZXZlciwgaW4gb3JkZXIgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlIChmb3Igbm93KQotICAgKiB3ZSBqdXN0IGtlZXAgdGhlIGFscmVhZHkgc2NlaGR1bGVkIEVYUEVDVEVEIHRpbWVyLCBidXQgcmVmcmFpbiBmcm9tCi0gICAqIHNjaGVkdWxlZCBhbm90aGVyIEVYUEVDVEVEIHRpbWVyICovCi0gIGV2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGV2ZW50LCAyLCAyICogUENNVV9CVUZfRFVSQVRJT04sIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgLyogImNyYW5rIiB0byByZWFjaCB0aGUgREVBRExJTkUgZm9yIHBhY2tldCAwICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX2luX3F1ZXVlIChoKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIGdzdF9oYXJuZXNzX2V2ZW50c19pbl9xdWV1ZSAoaCkpOwotCi0gIC8qICJjcmFuayIgdG8gdGltZSBvdXQgdGhlIExPU1QgZXZlbnQgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAoZXZlbnQsIDIsIDIgKiBQQ01VX0JVRl9EVVJBVElPTiwgUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfc2FtZV9kZWxheV9hbmRfcmV0cnlfdGltZW91dCkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgZ2ludCBsYXRlbmN5X21zID0gNSAqIFBDTVVfQlVGX01TOwotICBnaW50IG51bV9pbml0X2J1ZmZlcnMgPSBsYXRlbmN5X21zIC8gUENNVV9CVUZfTVMgKyAxOwotICBHc3RDbG9ja1RpbWUgbGFzdF9ydHhfcmVxdWVzdDsKLQotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCAibGF0ZW5jeSIsIGxhdGVuY3lfbXMsCi0gICAgICAicnR4LW1heC1yZXRyaWVzIiwgMywgInJ0eC1kZWxheSIsIDIwLCAicnR4LXJldHJ5LXRpbWVvdXQiLCAyMCwgTlVMTCk7Ci0KLSAgLyogUHVzaC9wdWxsIGJ1ZmZlcnMgYW5kIGFkdmFuY2UgdGltZSBwYXN0IGJ1ZmZlciAwJ3MgdGltZW91dCAoaW4gb3JkZXIgdG8KLSAgICogc2ltcGxpZnkgdGhlIHRlc3QpICovCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9pbml0X2J1ZmZlcnM7IGkrKykgewotICAgIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lICh0ZXN0Y2xvY2ssIGkgKiBQQ01VX0JVRl9EVVJBVElPTik7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyIChpKSkpOwotICAgIGdzdF9oYXJuZXNzX3dhaXRfZm9yX2Nsb2NrX2lkX3dhaXRzIChoLCAxLCA2MCk7Ci0gIH0KLQotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAobGF0ZW5jeV9tcyAqIEdTVF9NU0VDT05ELAotICAgICAgZ3N0X2Nsb2NrX2dldF90aW1lIChHU1RfQ0xPQ0sgKHRlc3RjbG9jaykpKTsKLQotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1faW5pdF9idWZmZXJzOyBpKyspCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotCi0gIC8qIGRyb3AgcmVjb25maWd1cmUgZXZlbnQgKi8KLSAgZ3N0X2V2ZW50X3VucmVmIChnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSk7Ci0KLSAgLyogQ3JhbmsgY2xvY2sgdG8gc2VuZCByZXRyYW5zbWlzc2lvbiBldmVudHMgcmVxdWVzdGluZyBzZXFudW0gNiB3aGljaCBoYXMKLSAgICogbm90IGFycml2ZWQgeWV0LiAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpLAotICAgICAgNiwgNiAqIFBDTVVfQlVGX0RVUkFUSU9OLCAyMCwgUENNVV9CVUZfRFVSQVRJT04pOwotICAvKiBmaXJzdCBydHggZm9yIHNlcW51bSA2IHNob3VsZCBhcnJpdmUgYXQgMTQwbXMgKi8KLSAgbGFzdF9ydHhfcmVxdWVzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXN0X3J0eF9yZXF1ZXN0LCAxNDAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogdmVyaWZ5IHdlIGhhdmUgcHVsbGVkIG91dCBhbGwgcnR4LWV2ZW50cyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKGgpKTsKLQotICAvKiBub3cgY3JhbmsgdG8gZ2V0IHRoZSBzZWNvbmQgYXR0ZW1wdCBhdCBzZXFudW0gNiAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpLAotICAgICAgNiwgNiAqIFBDTVVfQlVGX0RVUkFUSU9OLCA0MCwgUENNVV9CVUZfRFVSQVRJT04pOwotICAvKiBzZWNvbmQgcnR4IGZvciBzZXFudW0gNiBzaG91bGQgYXJyaXZlIGF0IDE0MCArIDIwbXMgKi8KLSAgbGFzdF9ydHhfcmVxdWVzdCA9IGdzdF9jbG9ja19nZXRfdGltZSAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXN0X3J0eF9yZXF1ZXN0LCAxNjAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogdmVyaWZ5IHdlIGhhdmUgcHVsbGVkIG91dCBhbGwgcnR4LWV2ZW50cyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKGgpKTsKLQotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgbnVtX2luaXRfYnVmZmVycywKLSAgICAgICAgICAgICAgIm51bS1sb3N0IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDAsCi0gICAgICAgICAgICAgICJydHgtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMiwgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfd2l0aF9iYWNrd2FyZHNfcnRwdGltZSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RFdmVudCAqZXZlbnQ7Ci0gIGdpbnQgamJfbGF0ZW5jeV9tcyA9IDQwOwotICBnaW50IGk7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LAotICAgICAgImRvLXJldHJhbnNtaXNzaW9uIiwgVFJVRSwKLSAgICAgICJsYXRlbmN5IiwgamJfbGF0ZW5jeV9tcywKLSAgICAgIE5VTEwpOwotCi0gIC8qIHB1c2ggdGhlIGZpcnN0IGJ1ZmZlciB0aHJvdWdoICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDApKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCkpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogcHVzaCBzb21lIGJ1ZmZlcnMgYXJyaXZpbmcgaW4gcGVyZmVjdCB0aW1lISAqLwotICBmb3IgKGkgPSAxOyBpIDw9IDI7IGkrKykgewotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoaSkpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0gIH0KLQotICAvKgotICAgICBGb3IgdmlkZW8gdXNpbmcgQi1mcmFtZXMsIGFuIGV4cGVjdGVkIHNlcXVlbmNlCi0gICAgIGNvdWxkIGJlIGxpa2UgdGhpczoKLSAgICAgKEkgPSBJLWZyYW1lLCBQID0gUC1mcmFtZSwgQiA9IEItZnJhbWUpCi0gICAgICAgICAgICAgICBfX18gICBfX18gICBfX18KLSAgICAgICAgICAuLi4gfCAzIHwgfCA0IHwgfCA1IHwKLSAgICAgICAgICAgICAgIOKAk+KAk+KAkyAgIOKAk+KAk+KAkyAgIOKAk+KAk+KAkwotICAgIHJ0cHRpbWU6ICAgMyhJKSAgNShQKSAgNChCKQotYXJyaXZhbChkdHMpOiAgMyAgICAgNSAgICAgNQotCi0gICAgIE5vdGljZSBoZXJlIHRoYXQgcGFja2V0IDUgKHRoZSBCIGZyYW1lKSBtYWtlCi0gICAgIHRoZSBydHB0aW1lIGdvIGJhY2t3YXJkcy4KLSAgKi8KLQotICAvKiBzZXFudW0gMywgYXJyaXZpbmcgYXQgdGltZSAzIHdpdGggcnRwdGltZSAzICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDMpKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAgLyogc2VxbnVtIDQsIGFycml2aW5nIGF0IHRpbWUgNSB3aXRoIHJ0cHRpbWUgNSAqLwotICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoCi0gICAgICA1ICogUENNVV9CVUZfRFVSQVRJT04sIEZBTFNFLCA0LCA1ICogUENNVV9SVFBfVFNfRFVSQVRJT04pKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaCkpOwotCi0gIC8qIHNlcW51bSA1LCBhcnJpdmluZyBhdCB0aW1lIDUgd2l0aCBydHB0aW1lIDQgKi8KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAoCi0gICAgICA1ICogUENNVV9CVUZfRFVSQVRJT04sIEZBTFNFLCA1LCA0ICogUENNVV9SVFBfVFNfRFVSQVRJT04pKTsKLQotICAvKiBkcm9wIHJlY29uZmlndXJlIGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCkpOwotCi0gIC8qIGNyYW5rIHRvIHRpbWUtb3V0IHRoZSBydHgtcmVxdWVzdCBmb3Igc2VxbnVtIDYsIHRoZSBwb2ludCBoZXJlCi0gICAgIGJlaW5nIHRoYXQgdGhlIGJhY2t3YXJkcyBydHB0aW1lIGRpZCBub3QgbWVzcyB1cCB0aGUgdGltZW91dCBmb3IKLSAgICAgdGhlIHJ0eCBldmVudCAqLwotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIGV2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCk7Ci0gIHZlcmlmeV9ydHhfZXZlbnQgKGV2ZW50LCA2LCA1ICogUENNVV9CVUZfRFVSQVRJT04gKyAxNSAqIEdTVF9NU0VDT05ELAotICAgICAgMTcsIDM1ICogR1NUX01TRUNPTkQpOwotCi0gIGZhaWxfdW5sZXNzICh2ZXJpZnlfamJfc3RhdHMgKGgtPmVsZW1lbnQsCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1qaXR0ZXJidWZmZXItc3RhdHMiLAotICAgICAgICAgICAgICAibnVtLXB1c2hlZCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSA2LAotICAgICAgICAgICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDEsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAwLCBOVUxMKSkpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHhfdGltZXJfcmV1c2UpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0VGVzdENsb2NrICp0ZXN0Y2xvY2s7Ci0gIGdpbnQgbGF0ZW5jeV9tcyA9IDUgKiBQQ01VX0JVRl9NUzsKLSAgZ2ludCBudW1faW5pdF9idWZmZXJzID0gbGF0ZW5jeV9tcyAvIFBDTVVfQlVGX01TICsgMTsKLQotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCAibGF0ZW5jeSIsIGxhdGVuY3lfbXMsCi0gICAgICAiZG8tbG9zdCIsIFRSVUUsICJydHgtbWF4LXJldHJpZXMiLCAxLCBOVUxMKTsKLQotICAvKiBQdXNoL3B1bGwgYnVmZmVycyBhbmQgYWR2YW5jZSB0aW1lIHBhc3QgYnVmZmVyIDAncyB0aW1lb3V0IChpbiBvcmRlciB0bwotICAgKiBzaW1wbGlmeSB0aGUgdGVzdCkgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtX2luaXRfYnVmZmVyczsgaSsrKSB7Ci0gICAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKHRlc3RjbG9jaywgaSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkpKSk7Ci0gICAgZ3N0X2hhcm5lc3Nfd2FpdF9mb3JfY2xvY2tfaWRfd2FpdHMgKGgsIDEsIDYwKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChsYXRlbmN5X21zICogR1NUX01TRUNPTkQsCi0gICAgICBnc3RfY2xvY2tfZ2V0X3RpbWUgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSkpOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9pbml0X2J1ZmZlcnM7IGkrKykKLSAgICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogZHJvcCByZWNvbmZpZ3VyZSBldmVudCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpKTsKLQotICAvKiBjcmFuayB0byB0aW1lb3V0IHRoZSBvbmx5IHJ0eC1yZXF1ZXN0LCBhbmQgdGhlIHRpbWVyIHdpbGwKLSAgICogbm93IHJlc2NoZWR1bGUgYXMgYSBsb3N0LXRpbWVyIGludGVybmFsbHkgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICB2ZXJpZnlfcnR4X2V2ZW50IChnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSwKLSAgICAgIDYsIDYgKiBQQ01VX0JVRl9EVVJBVElPTiwgMTAsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiBidXQgbm93IGJ1ZmZlciA2IGFycml2ZXMsIGFuZCB0aGlzIHNob3VsZCBub3cgcmV1c2UgdGhlIGxvc3QtdGltZXIKLSAgICogZm9yIDYsIGFzIGFuIGV4cGVjdGVkLXRpbWVyIGZvciA3ICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDYpKSk7Ci0KLSAgLyogbm93IGNyYW5rIHRvIHRpbWVvdXQgdGhlIGV4cGVjdGVkLXRpbWVyIGZvciA3IGFuZCB2ZXJpZnkgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICB2ZXJpZnlfcnR4X2V2ZW50IChnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSwKLSAgICAgIDcsIDcgKiBQQ01VX0JVRl9EVVJBVElPTiwgMTAsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2FwX2V4Y2VlZHNfbGF0ZW5jeSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cGppdHRlcmJ1ZmZlciIpOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jazsKLSAgY29uc3QgZ2ludCBqYl9sYXRlbmN5X21zID0gMjAwOwotCi0gIGdpbnQgaTsKLSAgR3N0RXZlbnQgKm91dF9ldmVudDsKLSAgR3N0QnVmZmVyICpvdXRfYnVmOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0gIHRlc3RjbG9jayA9IGdzdF9oYXJuZXNzX2dldF90ZXN0Y2xvY2sgKGgpOwotCi0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLWxvc3QiLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAiZG8tcmV0cmFuc21pc3Npb24iLCBUUlVFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAibGF0ZW5jeSIsIGpiX2xhdGVuY3lfbXMsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJydHgtcmV0cnktcGVyaW9kIiwgMTIwLCBOVUxMKTsKLQotICAvKiBwdXNoIHRoZSBmaXJzdCBidWZmZXIgaW4gKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCkpKTsKLQotICBnc3RfaGFybmVzc19zZXRfdGltZSAoaCwgMSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMSkpKTsKLQotICAvKiBkcm9wIHJlY29uZmlndXJlIGV2ZW50ICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaCkpOwotICAvKiBkcm9wIEdzdEV2ZW50U3RyZWFtU3RhcnQgJiBHc3RFdmVudENhcHMgJiBHc3RFdmVudFNlZ21lbnQgKi8KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAvKiAgQWxsb3cgc2VxbnVtIDIgdG8gYmUgZGVjbGFyZWQgbG9zdCAqLwotICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICAgIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGgpOwotICAgIHZlcmlmeV9ydHhfZXZlbnQgKG91dF9ldmVudCwKLSAgICAgICAgMiwgMiAqIFBDTVVfQlVGX0RVUkFUSU9OLCAxMCArIDQwICogaSwgUENNVV9CVUZfRFVSQVRJT04pOwotICB9Ci0KLSAgLyogYnVmZmVyIDAgJiAxICovCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgIG91dF9idWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChpLCBnZXRfcnRwX3NlcV9udW0gKG91dF9idWYpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLSAgfQotCi0gIC8qIGxvc3QgZXZlbnQgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgMiwgMiAqIFBDTVVfQlVGX0RVUkFUSU9OLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgLyogIE5vdyBkYXRhIGNvbWVzIGluIGFnYWluLCBhICJidWxrIiBsb3N0IHBhY2tldCBpcyBjcmVhdGVkIGZvciAzIC0+IDUgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMTYpKSk7Ci0KLSAgLyogTWFudWFsbHkgY2hlY2sgdGhlIGZpcnN0IHJ0eCBldmVudCAqLwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKTsKLSAgdmVyaWZ5X3J0eF9ldmVudCAob3V0X2V2ZW50LCA2LCA2ICogUENNVV9CVUZfRFVSQVRJT04sIDEwLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIC8qIEdvIHRocm91Z2h0IHRoZSByZXN0IG9mIHJ0eCBldmVudHMuIEEgYml0IG1vcmUgcmVsYXhlZCBzaW5jZSBvcmRlciBpcwotICAgKiBwYXJ0bHkgYW4gaW1wbGVudGF0aW9uIGRldGFpbC4gKi8KLSAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgZ3VpbnQgc2VxbnVtLCByZXRyeTsKLQotICAgIGZhaWxfdW5sZXNzIChvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKSk7Ci0gICAgZmFpbF91bmxlc3MgKHMgPSBnc3RfZXZlbnRfZ2V0X3N0cnVjdHVyZSAob3V0X2V2ZW50KSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJzZXFudW0iLCAmc2VxbnVtKSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQgKHMsICJyZXRyeSIsICZyZXRyeSkpOwotICAgIGZhaWxfdW5sZXNzIChzZXFudW0gPj0gNiAmJiBzZXFudW0gPD0gMTIpOwotCi0gICAgdmVyaWZ5X3J0eF9ldmVudCAob3V0X2V2ZW50LCBzZXFudW0sIHNlcW51bSAqIFBDTVVfQlVGX0RVUkFUSU9OLAotICAgICAgICAxMCArIHJldHJ5ICogNDAsIFBDTVVfQlVGX0RVUkFUSU9OKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIGdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZSAoaCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc19ldmVudHNfaW5fcXVldWUgKGgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZSAoaCkpOwotCi0gIGZvciAoaSA9IDg7IGkgPCAxNjsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyIChpKSkpOwotICB9Ci0KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgMywgMyAqIFBDTVVfQlVGX0RVUkFUSU9OLAotICAgICAgMyAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICBnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCk7Ci0gIG91dF9ldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAob3V0X2V2ZW50LCA2LCA2ICogUENNVV9CVUZfRFVSQVRJT04sCi0gICAgICAxICogUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCk7Ci0gIHZlcmlmeV9sb3N0X2V2ZW50IChvdXRfZXZlbnQsIDcsIDcgKiBQQ01VX0JVRl9EVVJBVElPTiwKLSAgICAgIDEgKiBQQ01VX0JVRl9EVVJBVElPTik7Ci0KLSAgLyogOCAqLwotICBmb3IgKGkgPSA4OyBpIDw9IDE2OyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKm91dF9idWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgICBHU1RfREVCVUcgKCJwb3AgJWQiLCBpKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChpLCBnZXRfcnRwX3NlcV9udW0gKG91dF9idWYpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLSAgfQotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIGdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZSAoaCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc19ldmVudHNfaW5fcXVldWUgKGgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZSAoaCkpOwotCi0gIC8qIHJ0eCB4IDMgKi8KLSAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgIGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKTsKLSAgICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX3Vwc3RyZWFtX2V2ZW50IChoKTsKLSAgICB2ZXJpZnlfcnR4X2V2ZW50IChvdXRfZXZlbnQsCi0gICAgICAgIDE3LCAxNyAqIFBDTVVfQlVGX0RVUkFUSU9OLCAxMCArIDQwICogaSwgUENNVV9CVUZfRFVSQVRJT04pOwotICB9Ci0KLSAgLyogbG9zdCBldmVudCBmb3IgMTcgKi8KLSAgZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpOwotICBvdXRfZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgMTcsIDE3ICogUENNVV9CVUZfRFVSQVRJT04sIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgwLCBnc3RfaGFybmVzc191cHN0cmVhbV9ldmVudHNfaW5fcXVldWUgKGgpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMCwgZ3N0X2hhcm5lc3NfZXZlbnRzX2luX3F1ZXVlIChoKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDAsIGdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWUgKGgpKTsKLQotICBmYWlsX3VubGVzcyAodmVyaWZ5X2piX3N0YXRzIChoLT5lbGVtZW50LAotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtaml0dGVyYnVmZmVyLXN0YXRzIiwKLSAgICAgICAgICAgICAgIm51bS1wdXNoZWQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMTEsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSA3LAotICAgICAgICAgICAgICAicnR4LWNvdW50IiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDE5LAotICAgICAgICAgICAgICAicnR4LXN1Y2Nlc3MtY291bnQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwKLSAgICAgICAgICAgICAgInJ0eC1ydHQiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMCwgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVhZGxpbmVfdHNfb2Zmc2V0KQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RDbG9ja0lEIGlkOwotICBjb25zdCBnaW50IGpiX2xhdGVuY3lfbXMgPSAxMDsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICB0ZXN0Y2xvY2sgPSBnc3RfaGFybmVzc19nZXRfdGVzdGNsb2NrIChoKTsKLQotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJsYXRlbmN5IiwgamJfbGF0ZW5jeV9tcywgTlVMTCk7Ci0KLSAgLyogcHVzaCB0aGUgZmlyc3QgYnVmZmVyIGluICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDApKSk7Ci0KLSAgLyogd2FpdF9uZXh0X3RpbWVvdXQoKSBzeW5jcyBvbiB0aGUgZGVhZGxpbmUgdGltZXIgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0Y2xvY2ssICZpZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKGpiX2xhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORCwKLSAgICAgIGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgLyogYWRkIHRzLW9mZnNldCB3aGlsZSB3YWl0aW5nICovCi0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgInRzLW9mZnNldCIsIDIwICogR1NUX01TRUNPTkQsIE5VTEwpOwotCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lX2FuZF9wcm9jZXNzICh0ZXN0Y2xvY2ssIGpiX2xhdGVuY3lfbXMgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgLyogd2FpdF9uZXh0X3RpbWVvdXQoKSBzeW5jcyBvbiB0aGUgbmV3IGRlYWRsaW5lIHRpbWVyICovCi0gIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAodGVzdGNsb2NrLCAmaWQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0ICgoMjAgKyBqYl9sYXRlbmN5X21zKSAqIEdTVF9NU0VDT05ELAotICAgICAgZ3N0X2Nsb2NrX2lkX2dldF90aW1lIChpZCkpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKLQotICAvKiBub3cgbWFrZSBkZWFkbGluZSB0aW1lciB0aW1lb3V0ICovCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lX2FuZF9wcm9jZXNzICh0ZXN0Y2xvY2ssCi0gICAgICAoMjAgKyBqYl9sYXRlbmN5X21zKSAqIEdTVF9NU0VDT05EKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAodGVzdGNsb2NrKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dhcF9sYXJnZXJfdGhhbl9sYXRlbmN5KQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwaml0dGVyYnVmZmVyIik7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrOwotICBHc3RFdmVudCAqb3V0X2V2ZW50OwotICBnaW50IGpiX2xhdGVuY3lfbXMgPSAxMDA7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgdGVzdGNsb2NrID0gZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jayAoaCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLWxvc3QiLCBUUlVFLCAibGF0ZW5jeSIsIGpiX2xhdGVuY3lfbXMsIE5VTEwpOwotCi0gIC8qIHB1c2ggZmlyc3QgYnVmZmVyIHRocm91Z2ggKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCkpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGgpKTsKLQotICAvKiB3ZSBoYXZlIDEwMG1zIGxhdGVuY3ksIHNvIGRyb3AgNiBwYWNrZXRzICgxMjBtcykgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X3RpbWUgKGgsIDcgKiBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKDcpKSk7Ci0KLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQotICAgIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCkpOwotCi0gIC8qIFBhY2tldCAxIGFuZCAyIGFyZSBhbHJlYWR5IGxvc3QgYXQgdGhpcyBwb2ludCAqLwotICBmb3IgKGdpbnQgaSA9IDE7IGkgPD0gMjsgaSsrKSB7Ci0gICAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCk7Ci0gICAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgaSwgaSAqIFBDTVVfQlVGX0RVUkFUSU9OLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIH0KLQotICAvKiBQYWNrZXRzIDMtNiBoYXZlIHRvIGJlIHRpbWVkIG91dCAqLwotICBmb3IgKGdpbnQgaSA9IDM7IGkgPD0gNjsgaSsrKSB7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0gICAgb3V0X2V2ZW50ID0gZ3N0X2hhcm5lc3NfcHVsbF9ldmVudCAoaCk7Ci0gICAgdmVyaWZ5X2xvc3RfZXZlbnQgKG91dF9ldmVudCwgaSwgaSAqIFBDTVVfQlVGX0RVUkFUSU9OLCBQQ01VX0JVRl9EVVJBVElPTik7Ci0gIH0KLQotICAvKiBhbmQgZmluYWxseSBwdWxsIG91dCBidWZmZXIgNyAqLwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSA2LCBOVUxMKSkpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wdXNoX2JpZ19nYXApCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGNvbnN0IGdpbnQgbnVtX2NvbnNlY3V0aXZlID0gNTsKLSAgZ2ludCBpOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2FwcyAoaCwgZ2VuZXJhdGVfY2FwcyAoKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9jb25zZWN1dGl2ZTsgaSsrKQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMTAwMCArIGkpKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9jb25zZWN1dGl2ZTsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgxMDAwICsgaSwgZ2V0X3J0cF9zZXFfbnVtIChidWYpKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOwotICB9Ci0KLSAgLyogUHVzaCBtb3JlIHBhY2tldHMgZnJvbSBhIGRpZmZlcmVudCBzZXF1ZW5jZSBudW1iZXIgZG9tYWluCi0gICAqIHRvIHRyaWdnZXIgImJpZyBnYXAiIGxvZ2ljLiAqLwotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NvbnNlY3V0aXZlOyBpKyspCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgyMDAwMCArIGkpKSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2NyYW5rX3NpbmdsZV9jbG9ja193YWl0IChoKSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9jb25zZWN1dGl2ZTsgaSsrKSB7Ci0gICAgR3N0QnVmZmVyICpidWYgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgyMDAwMCArIGksIGdldF9ydHBfc2VxX251bSAoYnVmKSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotCi0gIC8qIEZpbmFsIGJ1ZmZlciBzaG91bGQgYmUgcHVzaGVkIHN0cmFpZ2h0IHRocm91Z2ggKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMjAwMDAgKyBudW1fY29uc2VjdXRpdmUpKSk7Ci0gIGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgyMDAwMCArIG51bV9jb25zZWN1dGl2ZSwgZ2V0X3J0cF9zZXFfbnVtIChidWYpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQgc2VxbnVtX29mZnNldDsKLSAgZ3VpbnQgbGF0ZV9idWZmZXI7Ci19IFRlc3RMYXRlQXJyaXZhbElucHV0OwotCi1zdGF0aWMgY29uc3QgVGVzdExhdGVBcnJpdmFsSW5wdXQKLSAgICB0ZXN0X2NvbnNpZGVyZWRfbG9zdF9wYWNrZXRfaW5fbGFyZ2VfZ2FwX2Fycml2ZXNfaW5wdXRbXSA9IHsKLSAgezAsIDF9LCB7MCwgMn0sIHs2NTUzNSwgMX0sIHs2NTUzNSwgMn0sIHs2NTUzNCwgMX0sIHs2NTUzNCwgMn0KLX07Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvbnNpZGVyZWRfbG9zdF9wYWNrZXRfaW5fbGFyZ2VfZ2FwX2Fycml2ZXMpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgR3N0VGVzdENsb2NrICp0ZXN0Y2xvY2s7Ci0gIEdzdENsb2NrSUQgaWQ7Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBnaW50IGpiX2xhdGVuY3lfbXMgPSAyMDsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBjb25zdCBUZXN0TGF0ZUFycml2YWxJbnB1dCAqdGVzdF9pbnB1dCA9Ci0gICAgICAmdGVzdF9jb25zaWRlcmVkX2xvc3RfcGFja2V0X2luX2xhcmdlX2dhcF9hcnJpdmVzX2lucHV0W19faV9fXTsKLSAgZ3VpbnQgc2VxX29mZnNldCA9IHRlc3RfaW5wdXQtPnNlcW51bV9vZmZzZXQ7Ci0gIGd1aW50IGxhdGVfYnVmZmVyID0gdGVzdF9pbnB1dC0+bGF0ZV9idWZmZXI7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzIChoLCBnZW5lcmF0ZV9jYXBzICgpKTsKLSAgdGVzdGNsb2NrID0gZ3N0X2hhcm5lc3NfZ2V0X3Rlc3RjbG9jayAoaCk7Ci0gIGdfb2JqZWN0X3NldCAoaC0+ZWxlbWVudCwgImRvLWxvc3QiLCBUUlVFLCAibGF0ZW5jeSIsIGpiX2xhdGVuY3lfbXMsIE5VTEwpOwotCi0gIC8qIGZpcnN0IHB1c2ggYnVmZmVyIDAgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsICgwICogUENNVV9CVUZfRFVSQVRJT04sCi0gICAgICAgICAgICAgIFRSVUUsIDAgKyBzZXFfb2Zmc2V0LCAwICogUENNVV9SVFBfVFNfRFVSQVRJT04pKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCkpOwotICBnc3RfYnVmZmVyX3VucmVmIChnc3RfaGFybmVzc19wdWxsIChoKSk7Ci0KLSAgLyogZHJvcCBHc3RFdmVudFN0cmVhbVN0YXJ0ICYgR3N0RXZlbnRDYXBzICYgR3N0RXZlbnRTZWdtZW50ICovCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IDM7IGkrKykKLSAgICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpKTsKLQotICAvKiBob3Agb3ZlciAzIHBhY2tldHMsIGFuZCBwdXNoIGJ1ZmZlciA0IChnYXAgb2YgMykgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0ZMT1dfT0ssCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsICg0ICogUENNVV9CVUZfRFVSQVRJT04sCi0gICAgICAgICAgICAgIFRSVUUsIDQgKyBzZXFfb2Zmc2V0LCA0ICogUENNVV9SVFBfVFNfRFVSQVRJT04pKSk7Ci0KLSAgLyogdGhlIGppdHRlcmJ1ZmZlciBzaG91bGQgYmUgd2FpdGluZyBmb3IgdGhlIHRpbWVvdXQgb2YgYSAibGFyZ2UgZ2FwIHRpbWVyIgotICAgKiBmb3IgYnVmZmVyIDEgYW5kIDIgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkICh0ZXN0Y2xvY2ssICZpZCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKDEgKiBQQ01VX0JVRl9EVVJBVElPTiArCi0gICAgICBqYl9sYXRlbmN5X21zICogR1NUX01TRUNPTkQsIGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpKTsKLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgLyogbm93IGJ1ZmZlciAxIHNuZWFrcyBpbiBiZWZvcmUgdGhlIGxvc3QgZXZlbnQgZm9yIGJ1ZmZlciAxIGFuZCAyIGlzCi0gICAqIHByb2Nlc3NlZCAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgsCi0gICAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXJfZnVsbCAobGF0ZV9idWZmZXIgKiBQQ01VX0JVRl9EVVJBVElPTiwgVFJVRSwKLSAgICAgICAgICAgICAgbGF0ZV9idWZmZXIgKyBzZXFfb2Zmc2V0LCBsYXRlX2J1ZmZlciAqIFBDTVVfUlRQX1RTX0RVUkFUSU9OKSkpOwotCi0gIC8qIHRpbWUgb3V0IGZvciBsb3N0IHBhY2tldHMgMSBhbmQgMiAob25lIGV2ZW50LCBkb3VibGUgZHVyYXRpb24pICovCi0gIGZhaWxfdW5sZXNzIChnc3RfaGFybmVzc19jcmFua19zaW5nbGVfY2xvY2tfd2FpdCAoaCkpOwotICBldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfZXZlbnQgKGgpOwotICB2ZXJpZnlfbG9zdF9ldmVudCAoZXZlbnQsIDEgKyBzZXFfb2Zmc2V0LCAxICogUENNVV9CVUZfRFVSQVRJT04sCi0gICAgICAyICogUENNVV9CVUZfRFVSQVRJT04pOwotCi0gIC8qIHRpbWUgb3V0IGZvciBsb3N0IHBhY2tldHMgMyAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2hhcm5lc3NfY3Jhbmtfc2luZ2xlX2Nsb2NrX3dhaXQgKGgpKTsKLSAgZXZlbnQgPSBnc3RfaGFybmVzc19wdWxsX2V2ZW50IChoKTsKLSAgdmVyaWZ5X2xvc3RfZXZlbnQgKGV2ZW50LCAzICsgc2VxX29mZnNldCwgMyAqIFBDTVVfQlVGX0RVUkFUSU9OLAotICAgICAgMSAqIFBDTVVfQlVGX0RVUkFUSU9OKTsKLQotICAvKiBidWZmZXIgNCBpcyBwdXNoZWQgYXMgbm9ybWFsICovCi0gIGJ1ZmZlciA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgoNCArIHNlcV9vZmZzZXQpICYgMHhmZmZmLCBnZXRfcnRwX3NlcV9udW0gKGJ1ZmZlcikpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIC8qIHdlIGhhdmUgbG9zdCAzLCBhbmQgb25lIG9mIHRoZW0gYXJyaXZlZCBldmVudHVhbGx5LCBidXQgdG9vIGxhdGUgKi8KLSAgZmFpbF91bmxlc3MgKHZlcmlmeV9qYl9zdGF0cyAoaC0+ZWxlbWVudCwKLSAgICAgICAgICBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLWppdHRlcmJ1ZmZlci1zdGF0cyIsCi0gICAgICAgICAgICAgICJudW0tcHVzaGVkIiwgR19UWVBFX1VJTlQ2NCwgKGd1aW50NjQpIDIsCi0gICAgICAgICAgICAgICJudW0tbG9zdCIsIEdfVFlQRV9VSU5UNjQsIChndWludDY0KSAzLAotICAgICAgICAgICAgICAibnVtLWxhdGUiLCBHX1RZUEVfVUlOVDY0LCAoZ3VpbnQ2NCkgMSwgTlVMTCkpKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmICh0ZXN0Y2xvY2spOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGVyZm9ybWFuY2UpCi17Ci0gIEdzdEhhcm5lc3MgKmggPQotICAgICAgZ3N0X2hhcm5lc3NfbmV3X3BhcnNlCi0gICAgICAoInJ0cGppdHRlcmJ1ZmZlciBkby1sb3N0PTEgZG8tcmV0cmFuc21pc3Npb249MSBsYXRlbmN5PTEwMDAiKTsKLSAgR1RpbWVyICp0aW1lciA9IGdfdGltZXJfbmV3ICgpOwotICBjb25zdCBnZG91YmxlIHRlc3RfZHVyYXRpb24gPSAyLjA7Ci0gIGd1aW50IGJ1ZmZlcnNfcHVzaGVkID0gMDsKLSAgZ3VpbnQgYnVmZmVyc19yZWNlaXZlZDsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHMgKGgsIGdlbmVyYXRlX2NhcHMgKCkpOwotICBnc3RfaGFybmVzc191c2Vfc3lzdGVtY2xvY2sgKGgpOwotCi0gIHdoaWxlIChnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKSA8IHRlc3RfZHVyYXRpb24pIHsKLSAgICAvKiBTaW11bGF0ZSAxbXMgcGFja2V0cyAqLwotICAgIGd1aW50IG4gPSBidWZmZXJzX3B1c2hlZCAqIDI7ICAgICAgIC8vIGV2ZXJ5IHBhY2tldCBhbHNvIHByb2R1Y2VzIGEgZ2FwCi0gICAgZ3VpbnQxNiBzZXFudW0gPSBuICYgMHhmZmZmOwotICAgIGd1aW50MzIgcnRwX3RzID0gbiAqIDg7Ci0gICAgR3N0Q2xvY2tUaW1lIGR0cyA9IG4gKiBHU1RfTVNFQ09ORDsKLSAgICBnc3RfaGFybmVzc19wdXNoIChoLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlcl9mdWxsIChkdHMsIFRSVUUsIHNlcW51bSwgcnRwX3RzKSk7Ci0gICAgYnVmZmVyc19wdXNoZWQrKzsKLSAgICBnX3VzbGVlcCAoR19VU0VDX1BFUl9TRUMgLyAxMDAwMCk7Ci0gIH0KLSAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci0KLSAgYnVmZmVyc19yZWNlaXZlZCA9IGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpOwotICBHU1RfSU5GTyAoIlB1c2hlZCAlZCwgcmVjZWl2ZWQgJWQgKCUuMWYlJSkiLCBidWZmZXJzX3B1c2hlZCwgYnVmZmVyc19yZWNlaXZlZCwKLSAgICAgIDEwMC4wICogYnVmZmVyc19yZWNlaXZlZCAvIGJ1ZmZlcnNfcHVzaGVkKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXJ0cGppdHRlcmJ1ZmZlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJydHBqaXR0ZXJidWZmZXIiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcHVzaF9mb3J3YXJkX3NlcSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wdXNoX2JhY2t3YXJkX3NlcSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wdXNoX3Vub3JkZXJlZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYXNldGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jbGVhcl9wdF9tYXApOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vbmx5X29uZV9sb3N0X2V2ZW50X29uX2xhcmdlX2dhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdHdvX2xvc3Rfb25lX2Fycml2ZXNfaW5fdGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sYXRlX3BhY2tldHNfc3RpbGxfbWFrZXNfbG9zdF9ldmVudHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfbG9zdF9ldmVudF91c2VzX3B0cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb3N0X2V2ZW50X3dpdGhfYmFja3dhcmRzX3J0cHRpbWUpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9hbGxfcGFja2V0c19hcmVfdGltZXN0YW1wZWRfemVybyk7Ci0gIHRjYXNlX2FkZF9sb29wX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X251bV9sYXRlX3doZW5fY29uc2lkZXJlZF9sb3N0X2Fycml2ZXMsIDAsCi0gICAgICAyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3Jlb3JkZXJfb2Zfbm9uX2VxdWlkaXN0YW50X3BhY2tldHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sCi0gICAgICB0ZXN0X2xvc3NfZXF1aWRpc3RhbnRfc3BhY2luZ193aXRoX3BhcmFtZXRlcl9wYWNrZXRzKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnR4X2V4cGVjdGVkX25leHQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnR4X3R3b19taXNzaW5nKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0eF9wYWNrZXRfZGVsYXkpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnR4X2J1ZmZlcl9hcnJpdmVzX2p1c3RfaW5fdGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhfYnVmZmVyX2Fycml2ZXNfdG9vX2xhdGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnR4X29yaWdpbmFsX2J1ZmZlcl9kb2VzX25vdF91cGRhdGVfcnR4X3N0YXRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0eF9kdXBsaWNhdGVfcGFja2V0X3VwZGF0ZXNfcnR4X3N0YXRzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLAotICAgICAgdGVzdF9ydHhfYnVmZmVyX2Fycml2ZXNfYWZ0ZXJfbG9zdF91cGRhdGVzX3J0eF9zdGF0cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhfcnR0X2xhcmdlcl90aGFuX3JldHJ5X3RpbWVvdXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnR4X25vX3JlcXVlc3RfaWZfdGltZV9wYXN0X3JldHJ5X3BlcmlvZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhfc2FtZV9kZWxheV9hbmRfcmV0cnlfdGltZW91dCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhfd2l0aF9iYWNrd2FyZHNfcnRwdGltZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhfdGltZXJfcmV1c2UpOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYXBfZXhjZWVkc19sYXRlbmN5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlYWRsaW5lX3RzX29mZnNldCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nYXBfbGFyZ2VyX3RoYW5fbGF0ZW5jeSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wdXNoX2JpZ19nYXApOwotCi0gIHRjYXNlX2FkZF9sb29wX3Rlc3QgKHRjX2NoYWluLAotICAgICAgdGVzdF9jb25zaWRlcmVkX2xvc3RfcGFja2V0X2luX2xhcmdlX2dhcF9hcnJpdmVzLCAwLAotICAgICAgR19OX0VMRU1FTlRTICh0ZXN0X2NvbnNpZGVyZWRfbG9zdF9wYWNrZXRfaW5fbGFyZ2VfZ2FwX2Fycml2ZXNfaW5wdXQpKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGVyZm9ybWFuY2UpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocnRwaml0dGVyYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cG11eC5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlMDM4ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwbXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTIgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciBydHBtdXggZWxlbWVudHMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBDb2xsYWJvcmEgTHRkLgotICogIEBhdXRob3I6IE9saXZpZXIgQ3JldGUgPG9saXZpZXIuY3JldGVAY29sbGFib3JhLmNvLnVrPgotICogQ29weXJpZ2h0IDIwMDkgTm9raWEgQ29ycC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQUyAoImFwcGxpY2F0aW9uL3gtcnRwIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXBwbGljYXRpb24veC1ydHAiKSk7Ci0KLXR5cGVkZWYgdm9pZCAoKmNoZWNrX2NiKSAoR3N0UGFkICogcGFkLCBpbnQgaSk7Ci0KLXN0YXRpYyBnYm9vbGVhbgotcXVlcnlfZnVuYyAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBub3BhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKLXsKLSAgc3dpdGNoIChHU1RfUVVFUllfVFlQRSAocXVlcnkpKSB7Ci0gICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKLSAgICB7Ci0gICAgICBHc3RDYXBzICoqY2FwcyA9IGdfb2JqZWN0X2dldF9kYXRhIChHX09CSkVDVCAocGFkKSwgImNhcHMiKTsKLQotICAgICAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCAmJiAqY2FwcyAhPSBOVUxMKTsKLSAgICAgIGdzdF9xdWVyeV9zZXRfY2Fwc19yZXN1bHQgKHF1ZXJ5LCAqY2Fwcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfUVVFUllfQUNDRVBUX0NBUFM6Ci0gICAgICBnc3RfcXVlcnlfc2V0X2FjY2VwdF9jYXBzX3Jlc3VsdCAocXVlcnksIFRSVUUpOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXJlbW92ZV9zc3JjX2Zyb21fY2FwcyAoR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENhcHMgKmNvcHkgPSBnc3RfY2Fwc19jb3B5IChjYXBzKTsKLSAgR3N0U3RydWN0dXJlICpzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY29weSwgMCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChzLCAic3NyYyIpOwotICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1ldmVudF9mdW5jIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIG5vcGFyZW50LCBHc3RFdmVudCAqIGV2ZW50KQotewotICBzd2l0Y2ggKEdTVF9FVkVOVF9UWVBFIChldmVudCkpIHsKLSAgICBjYXNlIEdTVF9FVkVOVF9DQVBTOgotICAgIHsKLSAgICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgICBHc3RDYXBzICoqY2FwczIgPSBnX29iamVjdF9nZXRfZGF0YSAoR19PQkpFQ1QgKHBhZCksICJjYXBzIik7Ci0gICAgICBHc3RDYXBzICpjYXBzX25vX3NzcmM7Ci0gICAgICBHc3RDYXBzICpjYXBzMl9ub19zc3JjOwotCi0gICAgICBnc3RfZXZlbnRfcGFyc2VfY2FwcyAoZXZlbnQsICZjYXBzKTsKLSAgICAgIGNhcHNfbm9fc3NyYyA9IHJlbW92ZV9zc3JjX2Zyb21fY2FwcyAoY2Fwcyk7Ci0gICAgICBjYXBzMl9ub19zc3JjID0gcmVtb3ZlX3NzcmNfZnJvbV9jYXBzICgqY2FwczIpOwotCi0gICAgICBmYWlsX3VubGVzcyAoY2FwczIgIT0gTlVMTCAmJiAqY2FwczIgIT0gTlVMTCk7Ci0gICAgICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZml4ZWQgKGNhcHMpKTsKLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19maXhlZCAoKmNhcHMyKSk7Ci0KLSAgICAgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbF9maXhlZCAoY2Fwc19ub19zc3JjLCBjYXBzMl9ub19zc3JjKSk7Ci0gICAgICBnc3RfY2Fwc191bnJlZiAoY2Fwc19ub19zc3JjKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChjYXBzMl9ub19zc3JjKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICBnc3RfZXZlbnRfdW5yZWYgKGV2ZW50KTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfYmFzaWMgKGNvbnN0IGdjaGFyICogZWxlbV9uYW1lLCBjb25zdCBnY2hhciAqIHNpbmsyLCBpbnQgY291bnQsCi0gICAgY2hlY2tfY2IgY2IpCi17Ci0gIEdzdEVsZW1lbnQgKnJ0cG11eCA9IE5VTEw7Ci0gIEdzdFBhZCAqcmVxcGFkMSA9IE5VTEw7Ci0gIEdzdFBhZCAqcmVxcGFkMiA9IE5VTEw7Ci0gIEdzdFBhZCAqc3JjMSA9IE5VTEw7Ci0gIEdzdFBhZCAqc3JjMiA9IE5VTEw7Ci0gIEdzdFBhZCAqc2luayA9IE5VTEw7Ci0gIEdzdEJ1ZmZlciAqaW5idWYgPSBOVUxMOwotICBHc3RDYXBzICpzcmMxY2FwcyA9IE5VTEw7Ci0gIEdzdENhcHMgKnNyYzJjYXBzID0gTlVMTDsKLSAgR3N0Q2FwcyAqc2lua2NhcHMgPSBOVUxMOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIGludCBpOwotCi0gIHJ0cG11eCA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50IChlbGVtX25hbWUpOwotCi0gIHJlcXBhZDEgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKHJ0cG11eCwgInNpbmtfMSIpOwotICBmYWlsX3VubGVzcyAocmVxcGFkMSAhPSBOVUxMKTsKLSAgcmVxcGFkMiA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwbXV4LCBzaW5rMik7Ci0gIGZhaWxfdW5sZXNzIChyZXFwYWQyICE9IE5VTEwpOwotICBzaW5rID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkX2J5X25hbWUgKHJ0cG11eCwgJnNpbmt0ZW1wbGF0ZSwgInNyYyIpOwotCi0gIHNyYzEgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjIik7Ci0gIHNyYzIgPSBnc3RfcGFkX25ld19mcm9tX3N0YXRpY190ZW1wbGF0ZSAoJnNyY3RlbXBsYXRlLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYzEsIHJlcXBhZDEpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKHNyYzIsIHJlcXBhZDIpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9wYWRfc2V0X3F1ZXJ5X2Z1bmN0aW9uIChzcmMxLCBxdWVyeV9mdW5jKTsKLSAgZ3N0X3BhZF9zZXRfcXVlcnlfZnVuY3Rpb24gKHNyYzIsIHF1ZXJ5X2Z1bmMpOwotICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlvbiAoc2luaywgcXVlcnlfZnVuYyk7Ci0gIGdzdF9wYWRfc2V0X2V2ZW50X2Z1bmN0aW9uIChzaW5rLCBldmVudF9mdW5jKTsKLSAgZ19vYmplY3Rfc2V0X2RhdGEgKEdfT0JKRUNUIChzcmMxKSwgImNhcHMiLCAmc3JjMWNhcHMpOwotICBnX29iamVjdF9zZXRfZGF0YSAoR19PQkpFQ1QgKHNyYzIpLCAiY2FwcyIsICZzcmMyY2Fwcyk7Ci0gIGdfb2JqZWN0X3NldF9kYXRhIChHX09CSkVDVCAoc2luayksICJjYXBzIiwgJnNpbmtjYXBzKTsKLQotICBzcmMxY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIDEsICJzc3JjIiwgR19UWVBFX1VJTlQsIDExLCBOVUxMKTsKLSAgc3JjMmNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXBwbGljYXRpb24veC1ydHAiLAotICAgICAgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCAyLCAic3NyYyIsIEdfVFlQRV9VSU5ULCAxMiwgTlVMTCk7Ci0gIHNpbmtjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImFwcGxpY2F0aW9uL3gtcnRwIiwKLSAgICAgICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgMywgInNzcmMiLCBHX1RZUEVfVUlOVCwgMTMsIE5VTEwpOwotCi0gIGNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoc3JjMSwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZ3N0X2NhcHNfc2V0X3NpbXBsZSAoc3JjMmNhcHMsICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgMywgTlVMTCk7Ci0gIGNhcHMgPSBnc3RfcGFkX3BlZXJfcXVlcnlfY2FwcyAoc3JjMSwgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnX29iamVjdF9zZXQgKHJ0cG11eCwgInNlcW51bS1vZmZzZXQiLCAxMDAsICJ0aW1lc3RhbXAtb2Zmc2V0IiwgMTAwMCwKLSAgICAgICJzc3JjIiwgNTUsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHJ0cG11eCwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMxLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmMyLCBUUlVFKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMxLAotICAgICAgICAgIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgic3RyZWFtMSIpKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyYzIsCi0gICAgICAgICAgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJzdHJlYW0yIikpKTsKLQotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChzaW5rY2FwcywKLSAgICAgICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgOTgsICJzZXFudW0tb2Zmc2V0IiwgR19UWVBFX1VJTlQsIDEwMCwKLSAgICAgICJ0aW1lc3RhbXAtb2Zmc2V0IiwgR19UWVBFX1VJTlQsIDEwMDAsICJzc3JjIiwgR19UWVBFX1VJTlQsIDY2LCBOVUxMKTsKLSAgY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIDk4LCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIDMsCi0gICAgICAic2VxbnVtLW9mZnNldCIsIEdfVFlQRV9VSU5ULCA1NiwgInRpbWVzdGFtcC1vZmZzZXQiLCBHX1RZUEVfVUlOVCwgNTcsCi0gICAgICAic3NyYyIsIEdfVFlQRV9VSU5ULCA2NiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChzcmMxLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBjYXBzID0gZ3N0X3BhZF9wZWVyX3F1ZXJ5X2NhcHMgKHNpbmssIE5VTEwpOwotICBmYWlsX2lmIChnc3RfY2Fwc19pc19lbXB0eSAoY2FwcykpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBzZWdtZW50LnN0YXJ0ID0gMTAwMDAwOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmMxLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWdtZW50KSkpOwotICBzZWdtZW50LnN0YXJ0ID0gMDsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjMiwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotCi0gIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgR3N0UlRQQnVmZmVyIHJ0cGJ1ZmZlciA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0KLSAgICBpbmJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoMTAsIDAsIDApOwotICAgIEdTVF9CVUZGRVJfUFRTIChpbmJ1ZikgPSBpICogMTAwMCArIDEwMDAwMDsKLSAgICBHU1RfQlVGRkVSX0RVUkFUSU9OIChpbmJ1ZikgPSAxMDAwOwotCi0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChpbmJ1ZiwgR1NUX01BUF9XUklURSwgJnJ0cGJ1ZmZlcik7Ci0KLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfdmVyc2lvbiAoJnJ0cGJ1ZmZlciwgMik7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJnJ0cGJ1ZmZlciwgOTgpOwotICAgIGdzdF9ydHBfYnVmZmVyX3NldF9zc3JjICgmcnRwYnVmZmVyLCA0NCk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3RpbWVzdGFtcCAoJnJ0cGJ1ZmZlciwgMjAwICsgaSk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3NlcSAoJnJ0cGJ1ZmZlciwgMjAwMCArIGkpOwotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmMxLCBpbmJ1ZikgPT0gR1NUX0ZMT1dfT0spOwotCi0gICAgaWYgKGJ1ZmZlcnMpCi0gICAgICBmYWlsX3VubGVzcyAoR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcnMtPmRhdGEpID09IGkgKiAxMDAwLCAiJWxsZCIsCi0gICAgICAgICAgR1NUX0JVRkZFUl9QVFMgKGJ1ZmZlcnMtPmRhdGEpKTsKLQotICAgIGNiIChzcmMyLCBpKTsKLQotICAgIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9idWZmZXJfdW5yZWYsIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgICBidWZmZXJzID0gTlVMTDsKLSAgfQotCi0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzaW5rLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjMSwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyYzIsIEZBTFNFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocnRwbXV4LAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fcGFkX2J5X25hbWUgKHJ0cG11eCwgInNyYyIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChyZXFwYWQxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocmVxcGFkMik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAocnRwbXV4LCAic2lua18xIik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAocnRwbXV4LCBzaW5rMik7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cG11eCwgcmVxcGFkMSk7Ci0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHJ0cG11eCwgcmVxcGFkMik7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmc3JjMWNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmc3JjMmNhcHMsIE5VTEwpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmc2lua2NhcHMsIE5VTEwpOwotCi0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChydHBtdXgpOwotfQotCi1zdGF0aWMgdm9pZAotYmFzaWNfY2hlY2tfY2IgKEdzdFBhZCAqIHBhZCwgaW50IGkpCi17Ci0gIEdzdFJUUEJ1ZmZlciBydHBidWZmZXIgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBmYWlsX3VubGVzcyAoYnVmZmVycyAmJiBnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSA9PSAxKTsKLQotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZmZlcnMtPmRhdGEsIEdTVF9NQVBfUkVBRCwgJnJ0cGJ1ZmZlcik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDY2LCBnc3RfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoJnJ0cGJ1ZmZlcikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50NjQgKDIwMCAtIDU3ICsgMTAwMCArIGksCi0gICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0YW1wICgmcnRwYnVmZmVyKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDEwMCArIDEgKyBpLCBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmcnRwYnVmZmVyKSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBtdXhfYmFzaWMpCi17Ci0gIHRlc3RfYmFzaWMgKCJydHBtdXgiLCAic2lua18yIiwgMTAsIGJhc2ljX2NoZWNrX2NiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBkdG1mbXV4X2Jhc2ljKQotewotICB0ZXN0X2Jhc2ljICgicnRwZHRtZm11eCIsICJzaW5rXzIiLCAxMCwgYmFzaWNfY2hlY2tfY2IpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1sb2NrX2NoZWNrX2NiIChHc3RQYWQgKiBwYWQsIGludCBpKQotewotICBHc3RCdWZmZXIgKmluYnVmOwotCi0gIGlmIChpICUgMikgewotICAgIGZhaWxfdW5sZXNzIChidWZmZXJzID09IE5VTEwpOwotICB9IGVsc2UgewotICAgIEdzdFJUUEJ1ZmZlciBydHBidWZmZXIgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotCi0gICAgZmFpbF91bmxlc3MgKGJ1ZmZlcnMgJiYgZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gMSk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWZmZXJzLT5kYXRhLCBHU1RfTUFQX1JFQUQsICZydHBidWZmZXIpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDY2LCBnc3RfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoJnJ0cGJ1ZmZlcikpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQ2NCAoMjAwIC0gNTcgKyAxMDAwICsgaSwKLSAgICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAoJnJ0cGJ1ZmZlcikpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDEwMCArIDEgKyBpLCBnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmcnRwYnVmZmVyKSk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHBidWZmZXIpOwotCi0gICAgaW5idWYgPSBnc3RfcnRwX2J1ZmZlcl9uZXdfYWxsb2NhdGUgKDEwLCAwLCAwKTsKLSAgICBHU1RfQlVGRkVSX1BUUyAoaW5idWYpID0gaSAqIDEwMDAgKyA1MDA7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoaW5idWYpID0gMTAwMDsKLSAgICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGluYnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwYnVmZmVyKTsKLSAgICBnc3RfcnRwX2J1ZmZlcl9zZXRfdmVyc2lvbiAoJnJ0cGJ1ZmZlciwgMik7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJnJ0cGJ1ZmZlciwgOTgpOwotICAgIGdzdF9ydHBfYnVmZmVyX3NldF9zc3JjICgmcnRwYnVmZmVyLCA0NCk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3RpbWVzdGFtcCAoJnJ0cGJ1ZmZlciwgMjAwICsgaSk7Ci0gICAgZ3N0X3J0cF9idWZmZXJfc2V0X3NlcSAoJnJ0cGJ1ZmZlciwgMjAwMCArIGkpOwotICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmZmVyKTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChwYWQsIGluYnVmKSA9PSBHU1RfRkxPV19PSyk7Ci0KLQotICAgIGdfbGlzdF9mb3JlYWNoIChidWZmZXJzLCAoR0Z1bmMpIGdzdF9idWZmZXJfdW5yZWYsIE5VTEwpOwotICAgIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgICBidWZmZXJzID0gTlVMTDsKLSAgfQotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBkdG1mbXV4X2xvY2spCi17Ci0gIHRlc3RfYmFzaWMgKCJydHBkdG1mbXV4IiwgInByaW9yaXR5X3NpbmtfMiIsIDEwLCBsb2NrX2NoZWNrX2NiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgR3N0QnVmZmVyICoKLWdlbmVyYXRlX3Rlc3RfYnVmZmVyIChndWludCBzZXFfbnVtLCBndWludCBzc3JjKQotewotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgZ3VpbnQ4ICpwYXlsb2FkOwotICBndWludCBpOwotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgZ3NpemUgc2l6ZSA9IDEwOwotCi0gIGJ1ZiA9IGdzdF9ydHBfYnVmZmVyX25ld19hbGxvY2F0ZSAoc2l6ZSwgMCwgMCk7Ci0gIEdTVF9CVUZGRVJfRFRTIChidWYpID0gR1NUX01TRUNPTkQgKiAyMCAqIHNlcV9udW07Ci0gIEdTVF9CVUZGRVJfUFRTIChidWYpID0gR1NUX01TRUNPTkQgKiAyMCAqIHNlcV9udW07Ci0KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRwKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJnJ0cCwgMCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9zZXEgKCZydHAsIHNlcV9udW0pOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfdGltZXN0YW1wICgmcnRwLCAxNjAgKiBzZXFfbnVtKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3NzcmMgKCZydHAsIHNzcmMpOwotCi0gIHBheWxvYWQgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cCk7Ci0gIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgcGF5bG9hZFtpXSA9IDB4ZmY7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotCi0gIHJldHVybiBidWY7Ci19Ci0KLXN0YXRpYyBndWludDMyCi1fcnRwX2J1ZmZlcl9nZXRfc3NyYyAoR3N0QnVmZmVyICogYnVmKQotewotICBHc3RSVFBCdWZmZXIgcnRwID0gR1NUX1JUUF9CVUZGRVJfSU5JVDsKLSAgZ3VpbnQzMiByZXQ7Ci0gIGdfYXNzZXJ0IChnc3RfcnRwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9SRUFELCAmcnRwKSk7Ci0gIHJldCA9IGdzdF9ydHBfYnVmZmVyX2dldF9zc3JjICgmcnRwKTsKLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHApOwotICByZXR1cm4gcmV0OwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBtdXhfc3NyY19wcm9wZXJ0eSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzICgicnRwbXV4IiwgTlVMTCwgInNyYyIpOwotICBHc3RIYXJuZXNzICpoMCA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGgtPmVsZW1lbnQsICJzaW5rXzAiLCBOVUxMKTsKLSAgR3N0SGFybmVzcyAqaDEgPSBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IChoLT5lbGVtZW50LCAic2lua18xIiwgTlVMTCk7Ci0gIEdzdEJ1ZmZlciAqYnVmMDsKLSAgR3N0QnVmZmVyICpidWYxOwotCi0gIC8qIHNldCBzc3JjIHRvIDExMTExMSAqLwotICBnX29iamVjdF9zZXQgKGgtPmVsZW1lbnQsICJzc3JjIiwgMTExMTExLCBOVUxMKTsKLQotICAvKiBib3RoIHNpbmtwYWRzIGhhdmUgdGhlaXIgb3duIGlkZWEgb2Ygd2hhdCB0aGUgc3NyYyBzaG91bGQgYmUgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaDAsICJhcHBsaWNhdGlvbi94LXJ0cCwgc3NyYz0odWludCkyMjIyMjIiKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaDEsICJhcHBsaWNhdGlvbi94LXJ0cCwgc3NyYz0odWludCkzMzMzMzMiKTsKLQotICAvKiBwdXNoIG9uIGJvdGggc2lua3BhZHMgd2l0aCBkaWZmZXJlbnQgc3NyYyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgwLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCwgMjIyMjIyKSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgxLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCwgMzMzMzMzKSkpOwotCi0gIGJ1ZjAgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgYnVmMSA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotCi0gIC8qIHdlIGV4cGVjdCB0aGUgc3NyYyB0byBiZSB3aGF0IHdlIHNwZWNpZmllZCBpbiB0aGUgcHJvcGVydHkgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMTExMTExLCBfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoYnVmMCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgxMTExMTEsIF9ydHBfYnVmZmVyX2dldF9zc3JjIChidWYxKSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoMCk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoMSk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBtdXhfc3NyY19wcm9wZXJ0eV9ub3Rfc2V0KQotewotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKCJydHBtdXgiLCBOVUxMLCAic3JjIik7Ci0gIEdzdEhhcm5lc3MgKmgwID0gZ3N0X2hhcm5lc3NfbmV3X3dpdGhfZWxlbWVudCAoaC0+ZWxlbWVudCwgInNpbmtfMCIsIE5VTEwpOwotICBHc3RIYXJuZXNzICpoMSA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGgtPmVsZW1lbnQsICJzaW5rXzEiLCBOVUxMKTsKLSAgR3N0QnVmZmVyICpidWYwOwotICBHc3RCdWZmZXIgKmJ1ZjE7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaDAsICJhcHBsaWNhdGlvbi94LXJ0cCwgc3NyYz0odWludCkyMjIyMjIiKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaDEsICJhcHBsaWNhdGlvbi94LXJ0cCwgc3NyYz0odWludCkzMzMzMzMiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgwLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCwgMjIyMjIyKSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgxLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCwgMzMzMzMzKSkpOwotCi0gIGJ1ZjAgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgYnVmMSA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotCi0gIC8qIHdlIGV4cGVjdCB0aGUgc3NyYyB0byBiZSB0aGUgZmlyc3Qgc3NyYyB0aGF0IGNhbWUgaW4gKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoMjIyMjIyLCBfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoYnVmMCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgyMjIyMjIsIF9ydHBfYnVmZmVyX2dldF9zc3JjIChidWYxKSk7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOwotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoMCk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoMSk7Ci0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9ydHBtdXhfc3NyY19kb3duc3RyZWFtX2Nhbl9vdmVycnVsZSkKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzICgicnRwbXV4IiwgTlVMTCwgInNyYyIpOwotICBHc3RIYXJuZXNzICpoMCA9IGdzdF9oYXJuZXNzX25ld193aXRoX2VsZW1lbnQgKGgtPmVsZW1lbnQsICJzaW5rXzAiLCBOVUxMKTsKLSAgR3N0SGFybmVzcyAqaDEgPSBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IChoLT5lbGVtZW50LCAic2lua18xIiwgTlVMTCk7Ci0gIEdzdEJ1ZmZlciAqYnVmMDsKLSAgR3N0QnVmZmVyICpidWYxOwotCi0gIC8qIGRvd25zdHJlYW0gaXMgc3BlY2lmeWluZyA0NDQ0NDQgYXMgc3NyYyAqLwotICBnc3RfaGFybmVzc19zZXRfc2lua19jYXBzX3N0ciAoaCwgImFwcGxpY2F0aW9uL3gtcnRwLCBzc3JjPSh1aW50KTQ0NDQ0NCIpOwotCi0gIC8qIHJ0cG11eCBzc3JjIGlzIHNldCB0byAxMTExMTEgKi8KLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LCAic3NyYyIsIDExMTExMSwgTlVMTCk7Ci0KLSAgLyogd2hpbGUgdXBzdHJlYW0gc3NyYyBpcyAyMjIyMjIgYW5kIDMzMzMzMyAqLwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoMCwgImFwcGxpY2F0aW9uL3gtcnRwLCBzc3JjPSh1aW50KTIyMjIyMiIpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoMSwgImFwcGxpY2F0aW9uL3gtcnRwLCBzc3JjPSh1aW50KTMzMzMzMyIpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaDAsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwLCAyMjIyMjIpKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaDEsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwLCAzMzMzMzMpKSk7Ci0KLSAgYnVmMCA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBidWYxID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0KLSAgLyogd2UgZXhwZWN0IHRoZSBzc3JjIHRvIGJlIGRvd25zdHJlYW0gc3NyYyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICg0NDQ0NDQsIF9ydHBfYnVmZmVyX2dldF9zc3JjIChidWYwKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDQ0NDQ0NCwgX3J0cF9idWZmZXJfZ2V0X3NzcmMgKGJ1ZjEpKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChidWYwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgwKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgxKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0cG11eF9zc3JjX2Rvd25zdHJlYW1fZHluYW1pYykKLXsKLSAgR3N0SGFybmVzcyAqaCA9IGdzdF9oYXJuZXNzX25ld19wYXJzZSAoInJ0cG11eCAhIGNhcHNmaWx0ZXIiKTsKLSAgR3N0RWxlbWVudCAqcnRwbXV4ID0gZ3N0X2hhcm5lc3NfZmluZF9lbGVtZW50IChoLCAicnRwbXV4Iik7Ci0gIEdzdEVsZW1lbnQgKmNhcHNmaWx0ZXIgPSBnc3RfaGFybmVzc19maW5kX2VsZW1lbnQgKGgsICJjYXBzZmlsdGVyIik7Ci0KLSAgR3N0SGFybmVzcyAqaDAgPSBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IChydHBtdXgsICJzaW5rXzAiLCBOVUxMKTsKLSAgR3N0SGFybmVzcyAqaDEgPSBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IChydHBtdXgsICJzaW5rXzEiLCBOVUxMKTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0QnVmZmVyICpidWYwOwotICBHc3RCdWZmZXIgKmJ1ZjE7Ci0KLSAgZ3N0X2hhcm5lc3NfcGxheSAoaCk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXBwbGljYXRpb24veC1ydHAsIHNzcmM9KHVpbnQpNDQ0NDQ0Iik7Ci0gIGdfb2JqZWN0X3NldCAoY2Fwc2ZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIHdoaWxlIHVwc3RyZWFtIHNzcmMgaXMgMjIyMjIyIGFuZCAzMzMzMzMgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaDAsICJhcHBsaWNhdGlvbi94LXJ0cCwgc3NyYz0odWludCkyMjIyMjIiKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaDEsICJhcHBsaWNhdGlvbi94LXJ0cCwgc3NyYz0odWludCkzMzMzMzMiKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgwLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCwgMjIyMjIyKSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfRkxPV19PSywKLSAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGgxLCBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoMCwgMzMzMzMzKSkpOwotCi0gIC8qIHdlIGV4cGVjdCB0aGUgc3NyYyB0byBiZSBkb3duc3RyZWFtIHNzcmMgKDQ0NDQ0NCkgKi8KLSAgYnVmMCA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBidWYxID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDQ0NDQ0NCwgX3J0cF9idWZmZXJfZ2V0X3NzcmMgKGJ1ZjApKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoNDQ0NDQ0LCBfcnRwX2J1ZmZlcl9nZXRfc3NyYyAoYnVmMSkpOwotICBnc3RfYnVmZmVyX3VucmVmIChidWYwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXBwbGljYXRpb24veC1ydHAsIHNzcmM9KHVpbnQpNTU1NTU1Iik7Ci0gIGdfb2JqZWN0X3NldCAoY2Fwc2ZpbHRlciwgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaDAsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwLCAyMjIyMjIpKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaDEsIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwLCAzMzMzMzMpKSk7Ci0KLSAgLyogd2UgZXhwZWN0IHRoZSBzc3JjIHRvIGJlIHRoZSBuZXcgZG93bnN0cmVhbSBzc3JjICg1NTU1NTUpICovCi0gIGJ1ZjAgPSBnc3RfaGFybmVzc19wdWxsIChoKTsKLSAgYnVmMSA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICg1NTU1NTUsIF9ydHBfYnVmZmVyX2dldF9zc3JjIChidWYwKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDU1NTU1NSwgX3J0cF9idWZmZXJfZ2V0X3NzcmMgKGJ1ZjEpKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmMCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZjEpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cG11eCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNhcHNmaWx0ZXIpOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaDApOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaDEpOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXJ0cG11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJydHBtdXgiKTsKLSAgVENhc2UgKnRjX2NoYWluOwotCi0gIHRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgicnRwbXV4X2Jhc2ljIik7Ci0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnRwbXV4X2Jhc2ljKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0cG11eF9zc3JjX3Byb3BlcnR5KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0cG11eF9zc3JjX3Byb3BlcnR5X25vdF9zZXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnRwbXV4X3NzcmNfZG93bnN0cmVhbV9jYW5fb3ZlcnJ1bGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnRwbXV4X3NzcmNfZG93bnN0cmVhbV9keW5hbWljKTsKLQotICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInJ0cGR0bWZtdXhfYmFzaWMiKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0cGR0bWZtdXhfYmFzaWMpOwotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInJ0cGR0bWZtdXhfbG9jayIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcnRwZHRtZm11eF9sb2NrKTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBtdXgpCmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHBydHguYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWExYWM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHJ0eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgotICogICBAYXV0aG9yIEp1bGllbiBJc29yY2UgPGp1bGllbi5pc29yY2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL2dzdHJ0cGJ1ZmZlci5oPgotCi0jZGVmaW5lIHZlcmlmeV9idWYoYnVmLCBpc19ydHgsIGV4cGVjdGVkX3NzcmMsIGV4cHRlZF9wdCwgZXhwZWN0ZWRfc2VxbnVtKSAgICAgICBcCi0gIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR3N0UlRQQnVmZmVyIF9ydHAgPSBHU1RfUlRQX0JVRkZFUl9JTklUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZmFpbF91bmxlc3MgKGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1JFQUQsICZfcnRwKSk7ICAgICAgICAgICAgICAgICBcCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZfcnRwKSwgZXhwZWN0ZWRfc3NyYyk7ICAgICBcCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfdHlwZSAoJl9ydHApLCBleHB0ZWRfcHQpOyBcCi0gICAgaWYgKCEoaXNfcnR4KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmX3J0cCksIGV4cGVjdGVkX3NlcW51bSk7ICBcCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfUkVBRF9VSU5UMTZfQkUgKGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICAgICBcCi0gICAgICAgICAgICAgICgmX3J0cCkpLCBleHBlY3RlZF9zZXFudW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZfcnRwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gR19TVE1UX0VORAotCi0jZGVmaW5lIHB1bGxfYW5kX3ZlcmlmeShoLCBpc19ydHgsIGV4cGVjdGVkX3NzcmMsIGV4cHRlZF9wdCwgZXhwZWN0ZWRfc2VxbnVtKSBcCi0gIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR3N0QnVmZmVyICpfYnVmID0gZ3N0X2hhcm5lc3NfcHVsbCAoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdmVyaWZ5X2J1ZiAoX2J1ZiwgaXNfcnR4LCBleHBlY3RlZF9zc3JjLCBleHB0ZWRfcHQsIGV4cGVjdGVkX3NlcW51bSk7ICAgICBcCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoX2J1Zik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gR19TVE1UX0VORAotCi0jZGVmaW5lIHB1c2hfcHVsbF9hbmRfdmVyaWZ5KGgsIGJ1ZiwgaXNfcnR4LCBleHBlY3RlZF9zc3JjLCBleHB0ZWRfcHQsIGV4cGVjdGVkX3NlcW51bSkgXAotICBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnc3RfaGFybmVzc19wdXNoIChoLCBidWYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcHVsbF9hbmRfdmVyaWZ5IChoLCBpc19ydHgsIGV4cGVjdGVkX3NzcmMsIGV4cHRlZF9wdCwgZXhwZWN0ZWRfc2VxbnVtKTsgICAgICAgICAgICAgXAotICB9IEdfU1RNVF9FTkQKLQotc3RhdGljIEdzdEV2ZW50ICoKLWNyZWF0ZV9ydHhfZXZlbnQgKGd1aW50MzIgc3NyYywgZ3VpbnQ4IHBheWxvYWRfdHlwZSwgZ3VpbnQxNiBzZXFudW0pCi17Ci0gIHJldHVybiBnc3RfZXZlbnRfbmV3X2N1c3RvbSAoR1NUX0VWRU5UX0NVU1RPTV9VUFNUUkVBTSwKLSAgICAgIGdzdF9zdHJ1Y3R1cmVfbmV3ICgiR3N0UlRQUmV0cmFuc21pc3Npb25SZXF1ZXN0IiwKLSAgICAgICAgICAic2VxbnVtIiwgR19UWVBFX1VJTlQsIHNlcW51bSwKLSAgICAgICAgICAic3NyYyIsIEdfVFlQRV9VSU5ULCBzc3JjLAotICAgICAgICAgICJwYXlsb2FkLXR5cGUiLCBHX1RZUEVfVUlOVCwgcGF5bG9hZF90eXBlLCBOVUxMKSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb21wYXJlX3J0cF9wYWNrZXRzIChHc3RCdWZmZXIgKiBhLCBHc3RCdWZmZXIgKiBiKQotewotICBHc3RSVFBCdWZmZXIgcnRwX2EgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBHc3RSVFBCdWZmZXIgcnRwX2IgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYSwgR1NUX01BUF9SRUFELCAmcnRwX2EpOwotICBnc3RfcnRwX2J1ZmZlcl9tYXAgKGIsIEdTVF9NQVBfUkVBRCwgJnJ0cF9iKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcnRwX2J1ZmZlcl9nZXRfaGVhZGVyX2xlbiAoJnJ0cF9hKSwKLSAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF9oZWFkZXJfbGVuICgmcnRwX2IpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3J0cF9idWZmZXJfZ2V0X3ZlcnNpb24gKCZydHBfYSksCi0gICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfdmVyc2lvbiAoJnJ0cF9iKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ydHBfYnVmZmVyX2dldF9zc3JjICgmcnRwX2EpLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3NzcmMgKCZydHBfYikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcnRwX2J1ZmZlcl9nZXRfc2VxICgmcnRwX2EpLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3NlcSAoJnJ0cF9iKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ydHBfYnVmZmVyX2dldF9jc3JjX2NvdW50ICgmcnRwX2EpLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X2NzcmNfY291bnQgKCZydHBfYikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcnRwX2J1ZmZlcl9nZXRfbWFya2VyICgmcnRwX2EpLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X21hcmtlciAoJnJ0cF9iKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkX3R5cGUgKCZydHBfYSksCi0gICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF90eXBlICgmcnRwX2IpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCAoJnJ0cF9hKSwKLSAgICAgIGdzdF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAgKCZydHBfYikpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcnRwX2J1ZmZlcl9nZXRfZXh0ZW5zaW9uICgmcnRwX2EpLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X2V4dGVuc2lvbiAoJnJ0cF9iKSk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuICgmcnRwX2EpLAotICAgICAgZ3N0X3J0cF9idWZmZXJfZ2V0X3BheWxvYWRfbGVuICgmcnRwX2IpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWVtY21wIChnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cF9hKSwKLSAgICAgICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cF9iKSwKLSAgICAgICAgICBnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZF9sZW4gKCZydHBfYSkpLCAwKTsKLQotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cF9hKTsKLSAgZ3N0X3J0cF9idWZmZXJfdW5tYXAgKCZydHBfYik7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotY3JlYXRlX3J0cF9idWZmZXIgKGd1aW50MzIgc3NyYywgZ3VpbnQ4IHBheWxvYWRfdHlwZSwgZ3VpbnQxNiBzZXFudW0pCi17Ci0gIEdzdFJUUEJ1ZmZlciBydHBidWYgPSBHU1RfUlRQX0JVRkZFUl9JTklUOwotICBndWludCBwYXlsb2FkX3NpemUgPSAyOTsKLSAgZ3VpbnQ2NCB0aW1lc3RhbXAgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50IChzZXFudW0sIDkwMDAwLCAzMCk7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChwYXlsb2FkX3NpemUsIDAsIDApOwotCi0gIGdzdF9ydHBfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1dSSVRFLCAmcnRwYnVmKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3NzcmMgKCZydHBidWYsIHNzcmMpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfcGF5bG9hZF90eXBlICgmcnRwYnVmLCBwYXlsb2FkX3R5cGUpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc2VxICgmcnRwYnVmLCBzZXFudW0pOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfdGltZXN0YW1wICgmcnRwYnVmLCAoZ3VpbnQzMikgdGltZXN0YW1wKTsKLSAgbWVtc2V0IChnc3RfcnRwX2J1ZmZlcl9nZXRfcGF5bG9hZCAoJnJ0cGJ1ZiksIDB4MjksIHBheWxvYWRfc2l6ZSk7Ci0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwYnVmKTsKLSAgcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1jcmVhdGVfcnRwX2J1ZmZlcl93aXRoX3RpbWVzdGFtcCAoZ3VpbnQzMiBzc3JjLCBndWludDggcGF5bG9hZF90eXBlLAotICAgIGd1aW50MTYgc2VxbnVtLCBndWludDMyIHRpbWVzdGFtcCkKLXsKLSAgR3N0UlRQQnVmZmVyIHJ0cGJ1ZiA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0gIEdzdEJ1ZmZlciAqYnVmID0gY3JlYXRlX3J0cF9idWZmZXIgKHNzcmMsIHBheWxvYWRfdHlwZSwgc2VxbnVtKTsKLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfV1JJVEUsICZydHBidWYpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfdGltZXN0YW1wICgmcnRwYnVmLCB0aW1lc3RhbXApOwotICBnc3RfcnRwX2J1ZmZlcl91bm1hcCAoJnJ0cGJ1Zik7Ci0gIHJldHVybiBidWY7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0eHNlbmRfcnR4cmVjZWl2ZSkKLXsKLSAgY29uc3QgZ3VpbnQgcGFja2V0c19udW0gPSA1OwotICBndWludCBtYXN0ZXJfc3NyYyA9IDEyMzQ1Njc7Ci0gIGd1aW50IG1hc3Rlcl9wdCA9IDk2OwotICBndWludCBydHhfcHQgPSA5OTsKLSAgR3N0U3RydWN0dXJlICpwdF9tYXA7Ci0gIEdzdEJ1ZmZlciAqaW5idWZzWzVdOwotICBHc3RIYXJuZXNzICpocmVjdiA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cHJ0eHJlY2VpdmUiKTsKLSAgR3N0SGFybmVzcyAqaHNlbmQgPSBnc3RfaGFybmVzc19uZXcgKCJydHBydHhzZW5kIik7Ci0KLSAgcHRfbWFwID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1wdC1tYXAiLAotICAgICAgIjk2IiwgR19UWVBFX1VJTlQsIHJ0eF9wdCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaHJlY3YtPmVsZW1lbnQsICJwYXlsb2FkLXR5cGUtbWFwIiwgcHRfbWFwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoc2VuZC0+ZWxlbWVudCwgInBheWxvYWQtdHlwZS1tYXAiLCBwdF9tYXAsIE5VTEwpOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGhzZW5kLCAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICJtZWRpYSA9IChzdHJpbmcpdmlkZW8sIHBheWxvYWQgPSAoaW50KTk2LCAiCi0gICAgICAic3NyYyA9ICh1aW50KTEyMzQ1NjcsIGNsb2NrLXJhdGUgPSAoaW50KTkwMDAwLCAiCi0gICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpUkFXIik7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGhyZWN2LCAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICJtZWRpYSA9IChzdHJpbmcpdmlkZW8sIHBheWxvYWQgPSAoaW50KTk2LCAiCi0gICAgICAic3NyYyA9ICh1aW50KTEyMzQ1NjcsIGNsb2NrLXJhdGUgPSAoaW50KTkwMDAwLCAiCi0gICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpUkFXIik7Ci0KLSAgLyogUHVzaCAncGFja2V0c19udW0nIHBhY2tldHMgdGhyb3VnaCBydHhzZW5kIHRvIHJ0eHJlY2VpdmUgKi8KLSAgZm9yIChnaW50IGkgPSAwOyBpIDwgcGFja2V0c19udW07ICsraSkgewotICAgIGluYnVmc1tpXSA9IGNyZWF0ZV9ydHBfYnVmZmVyIChtYXN0ZXJfc3NyYywgbWFzdGVyX3B0LCAxMDAgKyBpKTsKLSAgICBnc3RfaGFybmVzc19wdXNoIChoc2VuZCwgZ3N0X2J1ZmZlcl9yZWYgKGluYnVmc1tpXSkpOwotICAgIGdzdF9oYXJuZXNzX3B1c2ggKGhyZWN2LCBnc3RfaGFybmVzc19wdWxsIChoc2VuZCkpOwotICAgIHB1bGxfYW5kX3ZlcmlmeSAoaHJlY3YsIEZBTFNFLCBtYXN0ZXJfc3NyYywgbWFzdGVyX3B0LCAxMDAgKyBpKTsKLSAgfQotCi0gIC8qIEdldHRpbmcgcmlkIG9mIHJlY29uZmlndXJlIGV2ZW50LiBQcmVwYXJhdGlvbiBiZWZvcmUgdGhlIG5leHQgc3RlcCAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGhyZWN2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZSAoaHJlY3YpLCAwKTsKLQotICAvKiBQdXNoICdwYWNrZXRzX251bScgUlRYIGV2ZW50cyB0aHJvdWdoIHJ0eHJlY2VpdmUgdG8gcnR4c2VuZC4KLSAgICAgUHVzaCBSVFggcGFja2V0cyBmcm9tIHJ0eHNlbmQgdG8gcnR4cmVjZWl2ZSBhbmQKLSAgICAgY2hlY2sgdGhhdCB0aGUgcGFja2V0IHByb2R1Y2VkIG91dCBvZiBSVFggcGFja2V0IGlzIHRoZSBzYW1lCi0gICAgIGFzIGFuIG9yaWdpbmFsIHBhY2tldCAqLwotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBwYWNrZXRzX251bTsgKytpKSB7Ci0gICAgR3N0QnVmZmVyICpvdXRidWY7Ci0gICAgZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAoaHJlY3YsCi0gICAgICAgIGNyZWF0ZV9ydHhfZXZlbnQgKG1hc3Rlcl9zc3JjLCBtYXN0ZXJfcHQsIDEwMCArIGkpKTsKLSAgICBnc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50IChoc2VuZCwKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaHJlY3YpKTsKLSAgICBnc3RfaGFybmVzc19wdXNoIChocmVjdiwgZ3N0X2hhcm5lc3NfcHVsbCAoaHNlbmQpKTsKLQotICAgIG91dGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGhyZWN2KTsKLSAgICBjb21wYXJlX3J0cF9wYWNrZXRzIChpbmJ1ZnNbaV0sIG91dGJ1Zik7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWZzW2ldKTsKLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWYpOwotICB9Ci0KLSAgLyogQ2hlY2sgUlRYIHN0YXRzICovCi0gIHsKLSAgICBndWludCBydHhfcmVxdWVzdHM7Ci0gICAgZ3VpbnQgcnR4X3BhY2tldHM7Ci0gICAgZ3VpbnQgcnR4X2Fzc29jX3BhY2tldHM7Ci0gICAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoaHNlbmQtPmVsZW1lbnQpLAotICAgICAgICAibnVtLXJ0eC1yZXF1ZXN0cyIsICZydHhfcmVxdWVzdHMsCi0gICAgICAgICJudW0tcnR4LXBhY2tldHMiLCAmcnR4X3BhY2tldHMsIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJ0eF9wYWNrZXRzLCBwYWNrZXRzX251bSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocnR4X3JlcXVlc3RzLCBwYWNrZXRzX251bSk7Ci0KLSAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChocmVjdi0+ZWxlbWVudCksCi0gICAgICAgICJudW0tcnR4LXJlcXVlc3RzIiwgJnJ0eF9yZXF1ZXN0cywKLSAgICAgICAgIm51bS1ydHgtcGFja2V0cyIsICZydHhfcGFja2V0cywKLSAgICAgICAgIm51bS1ydHgtYXNzb2MtcGFja2V0cyIsICZydHhfYXNzb2NfcGFja2V0cywgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocnR4X3BhY2tldHMsIHBhY2tldHNfbnVtKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChydHhfcmVxdWVzdHMsIHBhY2tldHNfbnVtKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChydHhfYXNzb2NfcGFja2V0cywgcGFja2V0c19udW0pOwotICB9Ci0KLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwdF9tYXApOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaHJlY3YpOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaHNlbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0eHNlbmRfcnR4cmVjZWl2ZV93aXRoX3BhY2tldF9sb3NzKQotewotICBndWludCBwYWNrZXRzX251bSA9IDIwOwotICBndWludCBtYXN0ZXJfc3NyYyA9IDEyMzQ1Njc7Ci0gIGd1aW50IG1hc3Rlcl9wdCA9IDk2OwotICBndWludCBydHhfcHQgPSA5OTsKLSAgZ3VpbnQgc2VxbnVtID0gMTAwOwotICBndWludCBleHBlY3RlZF9ydHhfcGFja2V0cyA9IDA7Ci0gIEdzdFN0cnVjdHVyZSAqcHRfbWFwOwotICBHc3RIYXJuZXNzICpocmVjdiA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cHJ0eHJlY2VpdmUiKTsKLSAgR3N0SGFybmVzcyAqaHNlbmQgPSBnc3RfaGFybmVzc19uZXcgKCJydHBydHhzZW5kIik7Ci0KLSAgcHRfbWFwID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1wdC1tYXAiLAotICAgICAgIjk2IiwgR19UWVBFX1VJTlQsIHJ0eF9wdCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaHJlY3YtPmVsZW1lbnQsICJwYXlsb2FkLXR5cGUtbWFwIiwgcHRfbWFwLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChoc2VuZC0+ZWxlbWVudCwgInBheWxvYWQtdHlwZS1tYXAiLCBwdF9tYXAsIE5VTEwpOwotCi0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGhzZW5kLCAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICJtZWRpYSA9IChzdHJpbmcpdmlkZW8sIHBheWxvYWQgPSAoaW50KTk2LCAiCi0gICAgICAic3NyYyA9ICh1aW50KTEyMzQ1NjcsIGNsb2NrLXJhdGUgPSAoaW50KTkwMDAwLCAiCi0gICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpUkFXIik7Ci0gIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKGhyZWN2LCAiYXBwbGljYXRpb24veC1ydHAsICIKLSAgICAgICJtZWRpYSA9IChzdHJpbmcpdmlkZW8sIHBheWxvYWQgPSAoaW50KTk2LCAiCi0gICAgICAic3NyYyA9ICh1aW50KTEyMzQ1NjcsIGNsb2NrLXJhdGUgPSAoaW50KTkwMDAwLCAiCi0gICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpUkFXIik7Ci0KLSAgLyogR2V0dGluZyByaWQgb2YgcmVjb25maWd1cmUgZXZlbnQuIE1ha2luZyBzdXJlIHRoZXJlIGlzIG5vIHVwc3RyZWFtCi0gICAgIGV2ZW50cyBpbiB0aGUgcXVldWUuIFByZXBhcmF0aW9uIHN0ZXAgYmVmb3JlIHRoZSB0ZXN0LiAqLwotICBnc3RfZXZlbnRfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGhyZWN2KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9oYXJuZXNzX3Vwc3RyZWFtX2V2ZW50c19pbl9xdWV1ZSAoaHJlY3YpLCAwKTsKLQotICAvKiBQdXNoICdwYWNrZXRzX251bScgcGFja2V0cyB0aHJvdWdoIHJ0eHNlbmQgdG8gcnR4cmVjZWl2ZSBsb29zaW5nIGV2ZXJ5Ci0gICAgICdkcm9wX2V2ZXJ5X25fcGFja2V0cycgcGFja2V0LiBXaGVuIHdlIGxvb3NlIHRoZSBwYWNrZXQgd2Ugc2VuZCBSVFggZXZlbnQKLSAgICAgdGhyb3VnaCBydHhyZWNlaXZlIHRvIHJ0eHNlbmQsIGFuZCB2ZXJpZnkgdGhlIHBhY2tldCB3YXMgcmV0cmFuc21pdHRlZCAqLwotICBmb3IgKGdpbnQgZHJvcF9udGhfcGFja2V0ID0gMjsgZHJvcF9udGhfcGFja2V0IDwgMTA7ICsrZHJvcF9udGhfcGFja2V0KSB7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgcGFja2V0c19udW07ICsraSwgKytzZXFudW0pIHsKLSAgICAgIEdzdEJ1ZmZlciAqb3V0YnVmOwotICAgICAgR3N0QnVmZmVyICppbmJ1ZiA9IGNyZWF0ZV9ydHBfYnVmZmVyIChtYXN0ZXJfc3NyYywgbWFzdGVyX3B0LCBzZXFudW0pOwotICAgICAgZ2Jvb2xlYW4gZHJvcF90aGlzX3BhY2tldCA9ICgoaSArIDEpICUgZHJvcF9udGhfcGFja2V0KSA9PSAwOwotCi0gICAgICBnc3RfaGFybmVzc19wdXNoIChoc2VuZCwgZ3N0X2J1ZmZlcl9yZWYgKGluYnVmKSk7Ci0gICAgICBpZiAoZHJvcF90aGlzX3BhY2tldCkgewotICAgICAgICAvKiBEcm9wcGluZyBvcmlnaW5hbCBwYWNrZXQgKi8KLSAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbCAoaHNlbmQpKTsKLSAgICAgICAgLyogUmVxdWVzdGluZyByZXRyYW5zbWlzc2lvbiAqLwotICAgICAgICBnc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50IChocmVjdiwKLSAgICAgICAgICAgIGNyZWF0ZV9ydHhfZXZlbnQgKG1hc3Rlcl9zc3JjLCBtYXN0ZXJfcHQsIHNlcW51bSkpOwotICAgICAgICBnc3RfaGFybmVzc19wdXNoX3Vwc3RyZWFtX2V2ZW50IChoc2VuZCwKLSAgICAgICAgICAgIGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGhyZWN2KSk7Ci0gICAgICAgIC8qIFB1c2hpbmcgUlRYIHBhY2tldCB0byBydHhyZWNlaXZlICovCi0gICAgICAgIGdzdF9oYXJuZXNzX3B1c2ggKGhyZWN2LCBnc3RfaGFybmVzc19wdWxsIChoc2VuZCkpOwotICAgICAgICArK2V4cGVjdGVkX3J0eF9wYWNrZXRzOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoaHJlY3YsIGdzdF9oYXJuZXNzX3B1bGwgKGhzZW5kKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIFdlIG1ha2luZyBzdXJlIGV2ZXJ5IGJ1ZmZlciB3ZSBwdWxsIGlzIHRoZSBzYW1lIGFzIG9yaWdpbmFsIGlucHV0Ci0gICAgICAgICBidWZmZXIgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGhyZWN2KTsKLSAgICAgIGNvbXBhcmVfcnRwX3BhY2tldHMgKGluYnVmLCBvdXRidWYpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWYpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLQotICAgICAgLyoKLSAgICAgICAgIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgcGFja2V0cyBpbiB0aGUgaGFybmVzcyBxdWV1ZSBieSB0aGlzIHBvaW50LiBJdAotICAgICAgICAgbWVhbnMgcnR4c2VuZCBkaWRuJ3Qgc2VuZCBtb3JlIHBhY2tldHMgdGhhbiBSVFggZXZlbnRzIGFuZCBydHhyZWNlaXZlCi0gICAgICAgICBkaWRuJ3QgcHJvZHVjZSBtb3JlIHRoYW4gb25lIHBhY2tldCBwZXIgUlRYIHBhY2tldC4KLSAgICAgICAqLwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZSAoaHNlbmQpLCAwKTsKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9oYXJuZXNzX2J1ZmZlcnNfaW5fcXVldWUgKGhyZWN2KSwgMCk7Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgUlRYIHN0YXRzICovCi0gIHsKLSAgICBndWludCBydHhfcmVxdWVzdHM7Ci0gICAgZ3VpbnQgcnR4X3BhY2tldHM7Ci0gICAgZ3VpbnQgcnR4X2Fzc29jX3BhY2tldHM7Ci0gICAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoaHNlbmQtPmVsZW1lbnQpLAotICAgICAgICAibnVtLXJ0eC1yZXF1ZXN0cyIsICZydHhfcmVxdWVzdHMsCi0gICAgICAgICJudW0tcnR4LXBhY2tldHMiLCAmcnR4X3BhY2tldHMsIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJ0eF9wYWNrZXRzLCBleHBlY3RlZF9ydHhfcGFja2V0cyk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocnR4X3JlcXVlc3RzLCBleHBlY3RlZF9ydHhfcGFja2V0cyk7Ci0KLSAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChocmVjdi0+ZWxlbWVudCksCi0gICAgICAgICJudW0tcnR4LXJlcXVlc3RzIiwgJnJ0eF9yZXF1ZXN0cywKLSAgICAgICAgIm51bS1ydHgtcGFja2V0cyIsICZydHhfcGFja2V0cywKLSAgICAgICAgIm51bS1ydHgtYXNzb2MtcGFja2V0cyIsICZydHhfYXNzb2NfcGFja2V0cywgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocnR4X3BhY2tldHMsIGV4cGVjdGVkX3J0eF9wYWNrZXRzKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChydHhfcmVxdWVzdHMsIGV4cGVjdGVkX3J0eF9wYWNrZXRzKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChydHhfYXNzb2NfcGFja2V0cywgZXhwZWN0ZWRfcnR4X3BhY2tldHMpOwotICB9Ci0KLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwdF9tYXApOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaHJlY3YpOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaHNlbmQpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEhhcm5lc3MgKmg7Ci0gIGd1aW50IG1hc3Rlcl9zc3JjOwotICBndWludCBtYXN0ZXJfcHQ7Ci0gIGd1aW50IHJ0eF9zc3JjOwotICBndWludCBydHhfcHQ7Ci0gIGd1aW50IHNlcW51bTsKLSAgZ3VpbnQgZXhwZWN0ZWRfcnR4X3BhY2tldHM7Ci19IFJ0eFNlbmRlcjsKLQotc3RhdGljIEdzdFN0cnVjdHVyZSAqCi1jcmVhdGVfcnR4c2VuZGVycyAoUnR4U2VuZGVyICogc2VuZGVycywgZ3VpbnQgc2VuZGVyc19udW0pCi17Ci0gIEdzdFN0cnVjdHVyZSAqcmVjdl9wdF9tYXAgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkgKCJhcHBsaWNhdGlvbi94LXJ0cC1wdC1tYXAiKTsKLQotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBzZW5kZXJzX251bTsgKytpKSB7Ci0gICAgZ2NoYXIgKm1hc3Rlcl9wdF9zdHI7Ci0gICAgZ2NoYXIgKm1hc3Rlcl9jYXBzX3N0cjsKLSAgICBHc3RTdHJ1Y3R1cmUgKnNlbmRfcHRfbWFwOwotCi0gICAgc2VuZGVyc1tpXS5oID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwcnR4c2VuZCIpOwotICAgIHNlbmRlcnNbaV0ubWFzdGVyX3NzcmMgPSAxMjM0NTY3ICsgaTsKLSAgICBzZW5kZXJzW2ldLnJ0eF9zc3JjID0gNzY1NDMyMSArIGk7Ci0gICAgc2VuZGVyc1tpXS5tYXN0ZXJfcHQgPSA4MCArIGk7Ci0gICAgc2VuZGVyc1tpXS5ydHhfcHQgPSAyMCArIGk7Ci0gICAgc2VuZGVyc1tpXS5zZXFudW0gPSBpICogMTAwMDsKLSAgICBzZW5kZXJzW2ldLmV4cGVjdGVkX3J0eF9wYWNrZXRzID0gMDsKLQotICAgIG1hc3Rlcl9wdF9zdHIgPSBnX3N0cmR1cF9wcmludGYgKCIldSIsIHNlbmRlcnNbaV0ubWFzdGVyX3B0KTsKLSAgICBtYXN0ZXJfY2Fwc19zdHIgPSBnX3N0cmR1cF9wcmludGYgKCJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgICAibWVkaWEgPSAoc3RyaW5nKXZpZGVvLCBwYXlsb2FkID0gKGludCkldSwgIgotICAgICAgICAic3NyYyA9ICh1aW50KSV1LCBjbG9jay1yYXRlID0gKGludCk5MDAwMCwgIgotICAgICAgICAiZW5jb2RpbmctbmFtZSA9IChzdHJpbmcpUkFXIiwKLSAgICAgICAgc2VuZGVyc1tpXS5tYXN0ZXJfcHQsIHNlbmRlcnNbaV0ubWFzdGVyX3NzcmMpOwotCi0gICAgc2VuZF9wdF9tYXAgPSBnc3Rfc3RydWN0dXJlX25ldyAoImFwcGxpY2F0aW9uL3gtcnRwLXB0LW1hcCIsCi0gICAgICAgIG1hc3Rlcl9wdF9zdHIsIEdfVFlQRV9VSU5ULCBzZW5kZXJzW2ldLnJ0eF9wdCwgTlVMTCk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHJlY3ZfcHRfbWFwLAotICAgICAgICBtYXN0ZXJfcHRfc3RyLCBHX1RZUEVfVUlOVCwgc2VuZGVyc1tpXS5ydHhfcHQsIE5VTEwpOwotCi0gICAgZ19vYmplY3Rfc2V0IChzZW5kZXJzW2ldLmgtPmVsZW1lbnQsICJwYXlsb2FkLXR5cGUtbWFwIiwgc2VuZF9wdF9tYXAsIE5VTEwpOwotICAgIGdzdF9oYXJuZXNzX3NldF9zcmNfY2Fwc19zdHIgKHNlbmRlcnNbaV0uaCwgbWFzdGVyX2NhcHNfc3RyKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc2VuZF9wdF9tYXApOwotICAgIGdfZnJlZSAobWFzdGVyX3B0X3N0cik7Ci0gICAgZ19mcmVlIChtYXN0ZXJfY2Fwc19zdHIpOwotICB9Ci0gIHJldHVybiByZWN2X3B0X21hcDsKLX0KLQotc3RhdGljIGd1aW50Ci1jaGVja19ydHhzZW5kZXJzX3N0YXRzX2FuZF90ZWFyZG93biAoUnR4U2VuZGVyICogc2VuZGVycywgZ3VpbnQgc2VuZGVyc19udW0pCi17Ci0gIGd1aW50IHRvdGFsX3Bha2V0c19udW0gPSAwOwotICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBzZW5kZXJzX251bTsgKytpKSB7Ci0gICAgZ3VpbnQgcnR4X3JlcXVlc3RzOwotICAgIGd1aW50IHJ0eF9wYWNrZXRzOwotICAgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKHNlbmRlcnNbaV0uaC0+ZWxlbWVudCksCi0gICAgICAgICJudW0tcnR4LXJlcXVlc3RzIiwgJnJ0eF9yZXF1ZXN0cywKLSAgICAgICAgIm51bS1ydHgtcGFja2V0cyIsICZydHhfcGFja2V0cywgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocnR4X3BhY2tldHMsIHNlbmRlcnNbaV0uZXhwZWN0ZWRfcnR4X3BhY2tldHMpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJ0eF9yZXF1ZXN0cywgc2VuZGVyc1tpXS5leHBlY3RlZF9ydHhfcGFja2V0cyk7Ci0gICAgdG90YWxfcGFrZXRzX251bSArPSBydHhfcGFja2V0czsKLQotICAgIGdzdF9oYXJuZXNzX3RlYXJkb3duIChzZW5kZXJzW2ldLmgpOwotICB9Ci0gIHJldHVybiB0b3RhbF9wYWtldHNfbnVtOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdWx0aV9ydHhzZW5kX3J0eHJlY2VpdmVfd2l0aF9wYWNrZXRfbG9zcykKLXsKLSAgZ3VpbnQgc2VuZGVyc19udW0gPSA1OwotICBndWludCBwYWNrZXRzX251bSA9IDEwOwotICBndWludCB0b3RhbF9wYWtldHNfbnVtID0gc2VuZGVyc19udW0gKiBwYWNrZXRzX251bTsKLSAgZ3VpbnQgdG90YWxfZHJvcHBlZF9wYWNrZXRzID0gMDsKLSAgUnR4U2VuZGVyIHNlbmRlcnNbNV07Ci0gIEdzdFN0cnVjdHVyZSAqcHRfbWFwOwotICBHc3RIYXJuZXNzICpocmVjdiA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cHJ0eHJlY2VpdmUiKTsKLQotICBwdF9tYXAgPSBjcmVhdGVfcnR4c2VuZGVycyAoc2VuZGVycywgNSk7Ci0gIGdfb2JqZWN0X3NldCAoaHJlY3YtPmVsZW1lbnQsICJwYXlsb2FkLXR5cGUtbWFwIiwgcHRfbWFwLCBOVUxMKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaHJlY3YsICJhcHBsaWNhdGlvbi94LXJ0cCwgIgotICAgICAgIm1lZGlhID0gKHN0cmluZyl2aWRlbywgcGF5bG9hZCA9IChpbnQpODAsICIKLSAgICAgICJzc3JjID0gKHVpbnQpMTIzNDU2NywgY2xvY2stcmF0ZSA9IChpbnQpOTAwMDAsICIKLSAgICAgICJlbmNvZGluZy1uYW1lID0gKHN0cmluZylSQVciKTsKLQotICAvKiBHZXR0aW5nIHJpZCBvZiByZWNvbmZpZ3VyZSBldmVudC4gTWFraW5nIHN1cmUgdGhlcmUgaXMgbm8gdXBzdHJlYW0KLSAgICAgZXZlbnRzIGluIHRoZSBxdWV1ZS4gUHJlcGFyYXRpb24gc3RlcCBiZWZvcmUgdGhlIHRlc3QuICovCi0gIGdzdF9ldmVudF91bnJlZiAoZ3N0X2hhcm5lc3NfcHVsbF91cHN0cmVhbV9ldmVudCAoaHJlY3YpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2hhcm5lc3NfdXBzdHJlYW1fZXZlbnRzX2luX3F1ZXVlIChocmVjdiksIDApOwotCi0gIC8qIFdlIGFyZSBnb2luZyB0byBwdXNoIHRoZSAxc3QgcGFja2V0IGZyb20gdGhlIDFzdCBzZW5kZXIsIDJuZCBmcm9tIHRoZSAybmQsCi0gICAgIDNyZCBmcm9tIHRoZSAzcmQsIGV0Yy4gdW50aWwgYWxsIHRoZSBzZW5kZXJzIHdpbGwgcHVzaCAncGFja2V0c19udW0nIHBhY2tldHMuCi0gICAgIFdlIHdpbGwgZHJvcCBldmVyeSAnZHJvcF9udGhfcGFja2V0JyBwYWNrZXQgYW5kIHJlcXVlc3QgaXRzIHJldHJhbnNtaXNzaW9uCi0gICAgIGZyb20gYWxsIHRoZSBzZW5kZXJzLiBCZWNhdXNlIG9ubHkgb25lIG9mIHRoZW0gY2FuIHByb2R1Y2UgUlRYIHBhY2tldC4KLSAgICAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbGwgb3RoZXIgc2VuZGVycyB3aWxsIGlnbm9yZSB0aGUgUlRYIGV2ZW50IHRoZXkKLSAgICAgY2FuJ3QgYWN0IHVwb24uCi0gICAqLwotICBmb3IgKGdpbnQgZHJvcF9udGhfcGFja2V0ID0gMjsgZHJvcF9udGhfcGFja2V0IDwgNTsgKytkcm9wX250aF9wYWNrZXQpIHsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCB0b3RhbF9wYWtldHNfbnVtOyArK2kpIHsKLSAgICAgIFJ0eFNlbmRlciAqc2VuZGVyID0gJnNlbmRlcnNbaSAlIHNlbmRlcnNfbnVtXTsKLSAgICAgIGdib29sZWFuIGRyb3BfdGhpc19wYWNrZXQgPSAoKGkgKyAxKSAlIGRyb3BfbnRoX3BhY2tldCkgPT0gMDsKLSAgICAgIEdzdEJ1ZmZlciAqb3V0YnVmLCAqaW5idWY7Ci0gICAgICBpbmJ1ZiA9Ci0gICAgICAgICAgY3JlYXRlX3J0cF9idWZmZXIgKHNlbmRlci0+bWFzdGVyX3NzcmMsIHNlbmRlci0+bWFzdGVyX3B0LAotICAgICAgICAgIHNlbmRlci0+c2VxbnVtKTsKLQotICAgICAgZ3N0X2hhcm5lc3NfcHVzaCAoc2VuZGVyLT5oLCBnc3RfYnVmZmVyX3JlZiAoaW5idWYpKTsKLSAgICAgIGlmIChkcm9wX3RoaXNfcGFja2V0KSB7Ci0gICAgICAgIEdzdEV2ZW50ICpydHhldmVudDsKLSAgICAgICAgLyogRHJvcHBpbmcgb3JpZ2luYWwgcGFja2V0ICovCi0gICAgICAgIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKHNlbmRlci0+aCkpOwotCi0gICAgICAgIC8qIFB1c2hpbmcgUlRYIGV2ZW50IHRocm91Z2ggcnR4cmVjZWl2ZSB0byBhbGwgdGhlIHNlbmRlcnMgKi8KLSAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAoaHJlY3YsCi0gICAgICAgICAgICBjcmVhdGVfcnR4X2V2ZW50IChzZW5kZXItPm1hc3Rlcl9zc3JjLCBzZW5kZXItPm1hc3Rlcl9wdCwKLSAgICAgICAgICAgICAgICBzZW5kZXItPnNlcW51bSkpOwotICAgICAgICBydHhldmVudCA9IGdzdF9oYXJuZXNzX3B1bGxfdXBzdHJlYW1fZXZlbnQgKGhyZWN2KTsKLQotICAgICAgICAvKiAuLi4gdG8gYWxsIHRoZSBzZW5kZXJzICovCi0gICAgICAgIGZvciAoZ2ludCBqID0gMDsgaiA8IHNlbmRlcnNfbnVtOyArK2opCi0gICAgICAgICAgZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAoc2VuZGVyc1tqXS5oLAotICAgICAgICAgICAgICBnc3RfZXZlbnRfcmVmIChydHhldmVudCkpOwotICAgICAgICBnc3RfZXZlbnRfdW5yZWYgKHJ0eGV2ZW50KTsKLQotICAgICAgICAvKiBQdXNoaW5nIFJUWCBwYWNrZXQgdG8gcnR4cmVjZWl2ZSAqLwotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChocmVjdiwgZ3N0X2hhcm5lc3NfcHVsbCAoc2VuZGVyLT5oKSk7Ci0gICAgICAgICsrc2VuZGVyLT5leHBlY3RlZF9ydHhfcGFja2V0czsKLSAgICAgICAgKyt0b3RhbF9kcm9wcGVkX3BhY2tldHM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnc3RfaGFybmVzc19wdXNoIChocmVjdiwgZ3N0X2hhcm5lc3NfcHVsbCAoc2VuZGVyLT5oKSk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIEl0IHNob3VsZCBub3QgbWF0dGVyIHdoZXRoZXIgdGhlIGJ1ZmZlciB3YXMgZHJvcHBlZCAoYW5kIHJldHJhbnNtaXR0ZWQpCi0gICAgICAgICBvciBpdCB3ZW50IHN0cmFpZ2h0IHRocm91Z2ggcnR4c2VuZCB0byBydHhyZWNlaXZlLiBXZSBzaG91bGQgYWx3YXlzIHB1bGwKLSAgICAgICAgIHRoZSBzYW1lIGJ1ZmZlciB0aGF0IHdhcyBwdXNoZWQgKi8KLSAgICAgIG91dGJ1ZiA9IGdzdF9oYXJuZXNzX3B1bGwgKGhyZWN2KTsKLSAgICAgIGNvbXBhcmVfcnRwX3BhY2tldHMgKGluYnVmLCBvdXRidWYpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5idWYpOwotICAgICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKLQotICAgICAgLyoKLSAgICAgICAgIFdlIHNob3VsZCBub3QgaGF2ZSBhbnkgcGFja2V0cyBpbiB0aGUgaGFybmVzcyBxdWV1ZSBieSB0aGlzIHBvaW50LiBJdAotICAgICAgICAgbWVhbnMgb3VyIHNlbmRlcnMgZGlkbid0IHByb2R1Y2UgdGhlIHBhY2tldHMgZm9yIHRoZSB1bmtub3duIFJUWCBldmVudC4KLSAgICAgICAqLwotICAgICAgZm9yIChnaW50IGogPSAwOyBqIDwgc2VuZGVyc19udW07ICsraikKLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2hhcm5lc3NfYnVmZmVyc19pbl9xdWV1ZSAoc2VuZGVyc1tqXS5oKSwgMCk7Ci0KLSAgICAgICsrc2VuZGVyLT5zZXFudW07Ci0gICAgfQotICB9Ci0KLSAgLyogQ2hlY2sgUlRYIHN0YXRzICovCi0gIHsKLSAgICBndWludCB0b3RhbF9ydHhfcGFja2V0czsKLSAgICBndWludCBydHhfcmVxdWVzdHM7Ci0gICAgZ3VpbnQgcnR4X3BhY2tldHM7Ci0gICAgZ3VpbnQgcnR4X2Fzc29jX3BhY2tldHM7Ci0KLSAgICB0b3RhbF9ydHhfcGFja2V0cyA9Ci0gICAgICAgIGNoZWNrX3J0eHNlbmRlcnNfc3RhdHNfYW5kX3RlYXJkb3duIChzZW5kZXJzLCBzZW5kZXJzX251bSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodG90YWxfcnR4X3BhY2tldHMsIHRvdGFsX2Ryb3BwZWRfcGFja2V0cyk7Ci0KLSAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChocmVjdi0+ZWxlbWVudCksCi0gICAgICAgICJudW0tcnR4LXJlcXVlc3RzIiwgJnJ0eF9yZXF1ZXN0cywKLSAgICAgICAgIm51bS1ydHgtcGFja2V0cyIsICZydHhfcGFja2V0cywKLSAgICAgICAgIm51bS1ydHgtYXNzb2MtcGFja2V0cyIsICZydHhfYXNzb2NfcGFja2V0cywgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocnR4X3BhY2tldHMsIHRvdGFsX3J0eF9wYWNrZXRzKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChydHhfcmVxdWVzdHMsIHRvdGFsX3J0eF9wYWNrZXRzKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChydHhfYXNzb2NfcGFja2V0cywgdG90YWxfcnR4X3BhY2tldHMpOwotICB9Ci0KLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChwdF9tYXApOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaHJlY3YpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3J0eHNlbmRlcl9wYWNrZXRfcmV0ZW50aW9uIChnYm9vbGVhbiB0ZXN0X3dpdGhfdGltZSkKLXsKLSAgZ3VpbnQgbWFzdGVyX3NzcmMgPSAxMjM0NTY3OwotICBndWludCBtYXN0ZXJfcHQgPSA5NjsKLSAgZ3VpbnQgcnR4X3NzcmMgPSA3NjU0MzIxOwotICBndWludCBydHhfcHQgPSA5OTsKLSAgZ2ludCBudW1fYnVmZmVycyA9IHRlc3Rfd2l0aF90aW1lID8gMzAgOiAxMDsKLSAgZ2ludCBoYWxmX2J1ZmZlcnMgPSBudW1fYnVmZmVycyAvIDI7Ci0gIGd1aW50IHRpbWVzdGFtcF9kZWx0YSA9IDkwMDAwIC8gMzA7Ci0gIGd1aW50IHRpbWVzdGFtcCA9IEdfTUFYVUlOVDMyIC0gaGFsZl9idWZmZXJzICogdGltZXN0YW1wX2RlbHRhOwotICBHc3RIYXJuZXNzICpoOwotICBHc3RTdHJ1Y3R1cmUgKnB0X21hcCA9IGdzdF9zdHJ1Y3R1cmVfbmV3ICgiYXBwbGljYXRpb24veC1ydHAtcHQtbWFwIiwKLSAgICAgICI5NiIsIEdfVFlQRV9VSU5ULCBydHhfcHQsIE5VTEwpOwotICBHc3RTdHJ1Y3R1cmUgKnNzcmNfbWFwID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1zc3JjLW1hcCIsCi0gICAgICAiMTIzNDU2NyIsIEdfVFlQRV9VSU5ULCBydHhfc3NyYywgTlVMTCk7Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ldyAoInJ0cHJ0eHNlbmQiKTsKLQotICAvKiBJbiBib3RoIGNhc2VzIHdlIHdhbnQgdGhlIHJ0eHNlbmQgcXVldWUgdG8gc3RvcmUgJ2hhbGZfYnVmZmVycycKLSAgICAgYW1vdW50IG9mIGJ1ZmZlcnMgYXQgbW9zdC4gSW4gbWF4LXNpemUtcGFja2V0cyBtb2RlLCBpdCdzIHRyaXZpYWwuCi0gICAgIEluIG1heC1zaXplLXRpbWUgbW9kZSwgd2Ugc3BlY2lmeSBhbG1vc3QgaGFsZiBhIHNlY29uZCwgd2hpY2ggaXMKLSAgICAgdGhlIGVxdWl2YWxlbnQgb2YgMTUgZnJhbWVzIGluIGEgMzBmcHMgdmlkZW8gc3RyZWFtLgotICAgKi8KLSAgZ19vYmplY3Rfc2V0IChoLT5lbGVtZW50LAotICAgICAgIm1heC1zaXplLXBhY2tldHMiLCB0ZXN0X3dpdGhfdGltZSA/IDAgOiBoYWxmX2J1ZmZlcnMsCi0gICAgICAibWF4LXNpemUtdGltZSIsIHRlc3Rfd2l0aF90aW1lID8gNDk5IDogMCwKLSAgICAgICJwYXlsb2FkLXR5cGUtbWFwIiwgcHRfbWFwLCAic3NyYy1tYXAiLCBzc3JjX21hcCwgTlVMTCk7Ci0KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgImFwcGxpY2F0aW9uL3gtcnRwLCAiCi0gICAgICAibWVkaWEgPSAoc3RyaW5nKXZpZGVvLCBwYXlsb2FkID0gKGludCk5NiwgIgotICAgICAgInNzcmMgPSAodWludCkxMjM0NTY3LCBjbG9jay1yYXRlID0gKGludCk5MDAwMCwgIgotICAgICAgImVuY29kaW5nLW5hbWUgPSAoc3RyaW5nKVJBVyIpOwotCi0gIC8qIE5vdyBwdXNoIGFsbCBidWZmZXJzIGFuZCByZXF1ZXN0IHJldHJhbnNtaXNzaW9uIGV2ZXJ5IHRpbWUgZm9yIGFsbCBvZiB0aGVtICovCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2ksIHRpbWVzdGFtcCArPSB0aW1lc3RhbXBfZGVsdGEpIHsKLSAgICAvKiBSZXF1ZXN0IHRvIHJldHJhbnNtaXQgYWxsIHRoZSBwcmV2aW91cyBvbmVzICovCi0gICAgZm9yIChnaW50IGogPSAwOyBqIDwgaTsgKytqKSB7Ci0gICAgICBndWludCBydHhfc2VxbnVtID0gMHgxMDAgKyBqOwotICAgICAgZ3N0X2hhcm5lc3NfcHVzaF91cHN0cmVhbV9ldmVudCAoaCwKLSAgICAgICAgICBjcmVhdGVfcnR4X2V2ZW50IChtYXN0ZXJfc3NyYywgbWFzdGVyX3B0LCBydHhfc2VxbnVtKSk7Ci0KLSAgICAgIC8qIFB1bGwgb25seSB0aGUgb25lcyBzdXBwb3NlZCB0byBiZSByZXRyYW5zbWl0ZWQgKi8KLSAgICAgIGlmIChqID49IGkgLSBoYWxmX2J1ZmZlcnMpCi0gICAgICAgIHB1bGxfYW5kX3ZlcmlmeSAoaCwgVFJVRSwgcnR4X3NzcmMsIHJ0eF9wdCwgcnR4X3NlcW51bSk7Ci0gICAgfQotICAgIC8qIENoZWNrIHRoZXJlIG5vIGV4dHJhIGJ1ZmZlcnMgaW4gdGhlIGhhcm5lc3MgcXVldWUgKi8KLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaGFybmVzc19idWZmZXJzX2luX3F1ZXVlIChoKSwgMCk7Ci0KLSAgICAvKiBXZSBjcmVhdGUgUlRQIGJ1ZmZlcnMgd2l0aCB0aW1lc3RhbXBzIHRoYXQgd2lsbCBldmVudHVhbHkgd3JhcCBhcm91bmQgMAotICAgICAgIHRvIGJlIHN1cmUsIHJ0cHJ0eHNlbmQgY2FuIGhhbmRsZSBpdCBwcm9wZXJseSAqLwotICAgIHB1c2hfcHVsbF9hbmRfdmVyaWZ5IChoLAotICAgICAgICBjcmVhdGVfcnRwX2J1ZmZlcl93aXRoX3RpbWVzdGFtcCAobWFzdGVyX3NzcmMsIG1hc3Rlcl9wdCwgMHgxMDAgKyBpLAotICAgICAgICAgICAgdGltZXN0YW1wKSwgRkFMU0UsIG1hc3Rlcl9zc3JjLCBtYXN0ZXJfcHQsIDB4MTAwICsgaSk7Ci0gIH0KLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHB0X21hcCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAoc3NyY19tYXApOwotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0eHNlbmRlcl9tYXhfc2l6ZV9wYWNrZXRzKQotewotICB0ZXN0X3J0eHNlbmRlcl9wYWNrZXRfcmV0ZW50aW9uIChGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcnR4c2VuZGVyX21heF9zaXplX3RpbWUpCi17Ci0gIHRlc3RfcnR4c2VuZGVyX3BhY2tldF9yZXRlbnRpb24gKFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1ydHBydHhfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicnRwcnR4Iik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDEyMCk7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0eHNlbmRfcnR4cmVjZWl2ZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhzZW5kX3J0eHJlY2VpdmVfd2l0aF9wYWNrZXRfbG9zcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tdWx0aV9ydHhzZW5kX3J0eHJlY2VpdmVfd2l0aF9wYWNrZXRfbG9zcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhzZW5kZXJfbWF4X3NpemVfcGFja2V0cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9ydHhzZW5kZXJfbWF4X3NpemVfdGltZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChydHBydHgpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwc2Vzc2lvbi5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvcnRwc2Vzc2lvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGQyMTg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHNlc3Npb24uYworKysgL2Rldi9udWxsCkBAIC0xLDgzMCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIGdzdHJ0cHNlc3Npb24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0aGFybmVzcy5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3R0ZXN0Y2xvY2suaD4KLQotI2luY2x1ZGUgPGdzdC9ydHAvZ3N0cnRwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L3J0cC9nc3RydGNwYnVmZmVyLmg+Ci0jaW5jbHVkZSA8Z3N0L25ldC9nc3RuZXRhZGRyZXNzbWV0YS5oPgotCi1zdGF0aWMgY29uc3QgZ3VpbnQgcGF5bG9hZF9zaXplID0gMTYwOwotc3RhdGljIGNvbnN0IGd1aW50IGNsb2NrX3JhdGUgPSA4MDAwOwotc3RhdGljIGNvbnN0IGd1aW50IHBheWxvYWRfdHlwZSA9IDA7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKnNlc3Npb247Ci0gIEdzdFBhZCAqc3JjLCAqcnRjcF9zaW5rLCAqcnRwc3JjOwotICBHc3RDbG9jayAqY2xvY2s7Ci0gIEdBc3luY1F1ZXVlICpydGNwX3F1ZXVlOwotfSBUZXN0RGF0YTsKLQotc3RhdGljIEdzdENhcHMgKgotZ2VuZXJhdGVfY2FwcyAodm9pZCkKLXsKLSAgcmV0dXJuIGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrX3JhdGUsCi0gICAgICAicGF5bG9hZC10eXBlIiwgR19UWVBFX0lOVCwgcGF5bG9hZF90eXBlLCBOVUxMKTsKLX0KLQotc3RhdGljIEdzdEJ1ZmZlciAqCi1nZW5lcmF0ZV90ZXN0X2J1ZmZlciAoR3N0Q2xvY2tUaW1lIGdzdF90cywKLSAgICBnYm9vbGVhbiBtYXJrZXJfYml0LCBndWludCBzZXFfbnVtLCBndWludDMyIHJ0cF90cywgZ3VpbnQgc3NyYykKLXsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIGd1aW50OCAqcGF5bG9hZDsKLSAgZ3VpbnQgaTsKLSAgR3N0UlRQQnVmZmVyIHJ0cCA9IEdTVF9SVFBfQlVGRkVSX0lOSVQ7Ci0KLSAgYnVmID0gZ3N0X3J0cF9idWZmZXJfbmV3X2FsbG9jYXRlIChwYXlsb2FkX3NpemUsIDAsIDApOwotICBHU1RfQlVGRkVSX0RUUyAoYnVmKSA9IGdzdF90czsKLSAgR1NUX0JVRkZFUl9QVFMgKGJ1ZikgPSBnc3RfdHM7Ci0KLSAgZ3N0X3J0cF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRwKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X3BheWxvYWRfdHlwZSAoJnJ0cCwgcGF5bG9hZF90eXBlKTsKLSAgZ3N0X3J0cF9idWZmZXJfc2V0X21hcmtlciAoJnJ0cCwgbWFya2VyX2JpdCk7Ci0gIGdzdF9ydHBfYnVmZmVyX3NldF9zZXEgKCZydHAsIHNlcV9udW0pOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfdGltZXN0YW1wICgmcnRwLCBydHBfdHMpOwotICBnc3RfcnRwX2J1ZmZlcl9zZXRfc3NyYyAoJnJ0cCwgc3NyYyk7Ci0KLSAgcGF5bG9hZCA9IGdzdF9ydHBfYnVmZmVyX2dldF9wYXlsb2FkICgmcnRwKTsKLSAgZm9yIChpID0gMDsgaSA8IHBheWxvYWRfc2l6ZTsgaSsrKQotICAgIHBheWxvYWRbaV0gPSAweGZmOwotCi0gIGdzdF9ydHBfYnVmZmVyX3VubWFwICgmcnRwKTsKLQotICByZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdGVzdF9zaW5rX3BhZF9jaGFpbl9jYiAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsIEdzdEJ1ZmZlciAqIGJ1ZmZlcikKLXsKLSAgVGVzdERhdGEgKmRhdGEgPSBnc3RfcGFkX2dldF9lbGVtZW50X3ByaXZhdGUgKHBhZCk7Ci0gIGdfYXN5bmNfcXVldWVfcHVzaCAoZGF0YS0+cnRjcF9xdWV1ZSwgYnVmZmVyKTsKLSAgR1NUX0RFQlVHICgiY2hhaW5lZCIpOwotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXB0X21hcF9yZXF1ZXN0ZWQgKEdzdEVsZW1lbnQgKiBlbGVtZW4sIGd1aW50IHB0LCBncG9pbnRlciBkYXRhKQotewotICByZXR1cm4gZ2VuZXJhdGVfY2FwcyAoKTsKLX0KLQotc3RhdGljIHZvaWQKLWRlc3Ryb3lfdGVzdGhhcm5lc3MgKFRlc3REYXRhICogZGF0YSkKLXsKLSAgZ19hc3NlcnRfY21waW50IChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGRhdGEtPnNlc3Npb24sIEdTVF9TVEFURV9OVUxMKSwKLSAgICAgID09LCBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotICBnc3Rfb2JqZWN0X3VucmVmIChkYXRhLT5zZXNzaW9uKTsKLSAgZGF0YS0+c2Vzc2lvbiA9IE5VTEw7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZGF0YS0+c3JjKTsKLSAgZGF0YS0+c3JjID0gTlVMTDsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChkYXRhLT5ydGNwX3NpbmspOwotICBkYXRhLT5ydGNwX3NpbmsgPSBOVUxMOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGRhdGEtPnJ0cHNyYyk7Ci0gIGRhdGEtPnJ0cHNyYyA9IE5VTEw7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoZGF0YS0+Y2xvY2spOwotICBkYXRhLT5jbG9jayA9IE5VTEw7Ci0KLSAgZ19hc3luY19xdWV1ZV91bnJlZiAoZGF0YS0+cnRjcF9xdWV1ZSk7Ci0gIGRhdGEtPnJ0Y3BfcXVldWUgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotc2V0dXBfdGVzdGhhcm5lc3MgKFRlc3REYXRhICogZGF0YSwgZ2Jvb2xlYW4gc2Vzc2lvbl9hc19zZW5kZXIpCi17Ci0gIEdzdFBhZCAqcnRwX3NpbmtfcGFkLCAqcnRjcF9zcmNfcGFkLCAqcnRwX3NyY19wYWQ7Ci0gIEdzdFNlZ21lbnQgc2VnOwotICBHc3RNaW5pT2JqZWN0ICpvYmo7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgZGF0YS0+Y2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIEdTVF9ERUJVRyAoIlNldHRpbmcgZGVmYXVsdCBzeXN0ZW0gY2xvY2sgdG8gdGVzdCBjbG9jayIpOwotICBnc3Rfc3lzdGVtX2Nsb2NrX3NldF9kZWZhdWx0IChkYXRhLT5jbG9jayk7Ci0gIGdfYXNzZXJ0IChkYXRhLT5jbG9jayk7Ci0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lIChHU1RfVEVTVF9DTE9DSyAoZGF0YS0+Y2xvY2spLCAwKTsKLQotICBkYXRhLT5zZXNzaW9uID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwc2Vzc2lvbiIsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChkYXRhLT5zZXNzaW9uLCAicmVxdWVzdC1wdC1tYXAiLAotICAgICAgKEdDYWxsYmFjaykgcHRfbWFwX3JlcXVlc3RlZCwgZGF0YSk7Ci0gIGdfYXNzZXJ0IChkYXRhLT5zZXNzaW9uKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2Nsb2NrIChkYXRhLT5zZXNzaW9uLCBkYXRhLT5jbG9jayk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChkYXRhLT5zZXNzaW9uLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSwgIT0sIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgZGF0YS0+cnRjcF9xdWV1ZSA9Ci0gICAgICBnX2FzeW5jX3F1ZXVlX25ld19mdWxsICgoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9taW5pX29iamVjdF91bnJlZik7Ci0KLSAgLyogbGluayBpbiB0aGUgdGVzdCBzb3VyY2UtcGFkICovCi0gIGRhdGEtPnNyYyA9IGdzdF9wYWRfbmV3ICgic3JjIiwgR1NUX1BBRF9TUkMpOwotICBnX2Fzc2VydCAoZGF0YS0+c3JjKTsKLSAgcnRwX3NpbmtfcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChkYXRhLT5zZXNzaW9uLAotICAgICAgc2Vzc2lvbl9hc19zZW5kZXIgPyAic2VuZF9ydHBfc2luayIgOiAicmVjdl9ydHBfc2luayIpOwotICBnX2Fzc2VydCAocnRwX3NpbmtfcGFkKTsKLSAgZ19hc3NlcnRfY21waW50IChnc3RfcGFkX2xpbmsgKGRhdGEtPnNyYywgcnRwX3NpbmtfcGFkKSwgPT0sIEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0cF9zaW5rX3BhZCk7Ci0KLSAgZGF0YS0+cnRwc3JjID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZ19hc3NlcnQgKGRhdGEtPnJ0cHNyYyk7Ci0gIHJ0cF9zcmNfcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRhdGEtPnNlc3Npb24sCi0gICAgICBzZXNzaW9uX2FzX3NlbmRlciA/ICJzZW5kX3J0cF9zcmMiIDogInJlY3ZfcnRwX3NyYyIpOwotICBnX2Fzc2VydCAocnRwX3NyY19wYWQpOwotICBnX2Fzc2VydF9jbXBpbnQgKGdzdF9wYWRfbGluayAocnRwX3NyY19wYWQsIGRhdGEtPnJ0cHNyYyksID09LAotICAgICAgR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocnRwX3NyY19wYWQpOwotCi0gIC8qIGxpbmsgaW4gdGhlIHRlc3Qgc2luay1wYWQgKi8KLSAgZGF0YS0+cnRjcF9zaW5rID0gZ3N0X3BhZF9uZXcgKCJzaW5rIiwgR1NUX1BBRF9TSU5LKTsKLSAgZ19hc3NlcnQgKGRhdGEtPnJ0Y3Bfc2luayk7Ci0gIGdzdF9wYWRfc2V0X2VsZW1lbnRfcHJpdmF0ZSAoZGF0YS0+cnRjcF9zaW5rLCBkYXRhKTsKLSAgY2FwcyA9IGdlbmVyYXRlX2NhcHMgKCk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKGRhdGEtPnJ0Y3Bfc2luaywgY2Fwcyk7Ci0gIGdzdF9wYWRfc2V0X2NoYWluX2Z1bmN0aW9uIChkYXRhLT5ydGNwX3NpbmssIHRlc3Rfc2lua19wYWRfY2hhaW5fY2IpOwotICBydGNwX3NyY19wYWQgPSBnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQgKGRhdGEtPnNlc3Npb24sICJzZW5kX3J0Y3Bfc3JjIik7Ci0gIGdfYXNzZXJ0IChydGNwX3NyY19wYWQpOwotICBnX2Fzc2VydF9jbXBpbnQgKGdzdF9wYWRfbGluayAocnRjcF9zcmNfcGFkLCBkYXRhLT5ydGNwX3NpbmspLCA9PSwKLSAgICAgIEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHJ0Y3Bfc3JjX3BhZCk7Ci0KLSAgZ19hc3NlcnQgKGdzdF9wYWRfc2V0X2FjdGl2ZSAoZGF0YS0+c3JjLCBUUlVFKSk7Ci0gIGdfYXNzZXJ0IChnc3RfcGFkX3NldF9hY3RpdmUgKGRhdGEtPnJ0Y3Bfc2luaywgVFJVRSkpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWcsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoZGF0YS0+c3JjLCBnc3RfZXZlbnRfbmV3X3N0cmVhbV9zdGFydCAoInN0cmVhbTAiKSk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKGRhdGEtPnNyYywgY2Fwcyk7Ci0gIGdzdF9wYWRfcHVzaF9ldmVudCAoZGF0YS0+c3JjLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWcpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHdoaWxlICgob2JqID0gZ19hc3luY19xdWV1ZV90cnlfcG9wIChkYXRhLT5ydGNwX3F1ZXVlKSkpCi0gICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmIChvYmopOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdWx0aXBsZV9zc3JjX3JyKQotewotICBUZXN0RGF0YSBkYXRhOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0Q2xvY2tJRCBpZCwgdGlkOwotICBHc3RCdWZmZXIgKmluX2J1ZiwgKm91dF9idWY7Ci0gIEdzdFJUQ1BCdWZmZXIgcnRjcCA9IEdTVF9SVENQX0JVRkZFUl9JTklUOwotICBHc3RSVENQUGFja2V0IHJ0Y3BfcGFja2V0OwotICBpbnQgaTsKLSAgZ3VpbnQzMiBzc3JjLCBleHRoaWdoZXN0c2VxLCBqaXR0ZXIsIGxzciwgZGxzcjsKLSAgZ2ludDMyIHBhY2tldHNsb3N0OwotICBndWludDggZnJhY3Rpb25sb3N0OwotCi0gIHNldHVwX3Rlc3RoYXJuZXNzICgmZGF0YSwgRkFMU0UpOwotCi0gIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksIDEwICogR1NUX01TRUNPTkQpOwotCi0gIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICBHU1RfREVCVUcgKCJQdXNoICVpIiwgaSk7Ci0gICAgaW5fYnVmID0KLSAgICAgICAgZ2VuZXJhdGVfdGVzdF9idWZmZXIgKGkgKiAyMCAqIEdTVF9NU0VDT05ELCBGQUxTRSwgaSwgaSAqIDIwLAotICAgICAgICAweDAxQkFEQkFEKTsKLSAgICByZXMgPSBnc3RfcGFkX3B1c2ggKGRhdGEuc3JjLCBpbl9idWYpOwotICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gR1NUX0ZMT1dfT0sgfHwgcmVzID09IEdTVF9GTE9XX0ZMVVNISU5HKTsKLQotCi0gICAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksICZpZCk7Ci0gICAgdGlkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jaykpOwotICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICAgIGlmICh0aWQpCi0gICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKHRpZCk7Ci0KLSAgICBpbl9idWYgPQotICAgICAgICBnZW5lcmF0ZV90ZXN0X2J1ZmZlciAoaSAqIDIwICogR1NUX01TRUNPTkQsIEZBTFNFLCBpLCBpICogMjAsCi0gICAgICAgIDB4REVBREJFRUYpOwotICAgIHJlcyA9IGdzdF9wYWRfcHVzaCAoZGF0YS5zcmMsIGluX2J1Zik7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyB8fCByZXMgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotCi0gICAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksICZpZCk7Ci0gICAgdGlkID0gZ3N0X3Rlc3RfY2xvY2tfcHJvY2Vzc19uZXh0X2Nsb2NrX2lkIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jaykpOwotICAgIEdTVF9ERUJVRyAoInB1c2hlZCAlaSIsIGkpOwotICAgIGdzdF90ZXN0X2Nsb2NrX3NldF90aW1lIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksCi0gICAgICAgIGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpKTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGlkKTsKLSAgICBpZiAodGlkKQotICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmICh0aWQpOwotICB9Ci0KLSAgb3V0X2J1ZiA9IGdfYXN5bmNfcXVldWVfdHJ5X3BvcCAoZGF0YS5ydGNwX3F1ZXVlKTsKLSAgaWYgKG91dF9idWYpCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0X2J1Zik7Ci0KLSAgZ3N0X3Rlc3RfY2xvY2tfc2V0X3RpbWUgKEdTVF9URVNUX0NMT0NLIChkYXRhLmNsb2NrKSwKLSAgICAgIGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpICsgKDUgKiBHU1RfU0VDT05EKSk7Ci0gIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEuY2xvY2spLCAmaWQpOwotICB0aWQgPSBnc3RfdGVzdF9jbG9ja19wcm9jZXNzX25leHRfY2xvY2tfaWQgKEdTVF9URVNUX0NMT0NLIChkYXRhLmNsb2NrKSk7Ci0gIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICBnc3RfY2xvY2tfaWRfdW5yZWYgKHRpZCk7Ci0KLSAgb3V0X2J1ZiA9IGdfYXN5bmNfcXVldWVfcG9wIChkYXRhLnJ0Y3BfcXVldWUpOwotICBnX2Fzc2VydCAob3V0X2J1ZiAhPSBOVUxMKTsKLSAgZ19hc3NlcnQgKGdzdF9ydGNwX2J1ZmZlcl92YWxpZGF0ZSAob3V0X2J1ZikpOwotICBnc3RfcnRjcF9idWZmZXJfbWFwIChvdXRfYnVmLCBHU1RfTUFQX1JFQUQsICZydGNwKTsKLSAgZ19hc3NlcnQgKGdzdF9ydGNwX2J1ZmZlcl9nZXRfZmlyc3RfcGFja2V0ICgmcnRjcCwgJnJ0Y3BfcGFja2V0KSk7Ci0gIGdfYXNzZXJ0IChnc3RfcnRjcF9wYWNrZXRfZ2V0X3R5cGUgKCZydGNwX3BhY2tldCkgPT0gR1NUX1JUQ1BfVFlQRV9SUik7Ci0gIGdfYXNzZXJ0X2NtcGludCAoZ3N0X3J0Y3BfcGFja2V0X2dldF9yYl9jb3VudCAoJnJ0Y3BfcGFja2V0KSwgPT0sIDIpOwotCi0gIGdzdF9ydGNwX3BhY2tldF9nZXRfcmIgKCZydGNwX3BhY2tldCwgMCwgJnNzcmMsICZmcmFjdGlvbmxvc3QsICZwYWNrZXRzbG9zdCwKLSAgICAgICZleHRoaWdoZXN0c2VxLCAmaml0dGVyLCAmbHNyLCAmZGxzcik7Ci0KLSAgZ19hc3NlcnRfY21waW50IChzc3JjLCA9PSwgMHgwMUJBREJBRCk7Ci0KLSAgZ3N0X3J0Y3BfcGFja2V0X2dldF9yYiAoJnJ0Y3BfcGFja2V0LCAxLCAmc3NyYywgJmZyYWN0aW9ubG9zdCwgJnBhY2tldHNsb3N0LAotICAgICAgJmV4dGhpZ2hlc3RzZXEsICZqaXR0ZXIsICZsc3IsICZkbHNyKTsKLSAgZ19hc3NlcnRfY21waW50IChzc3JjLCA9PSwgMHhERUFEQkVFRik7Ci0gIGdzdF9ydGNwX2J1ZmZlcl91bm1hcCAoJnJ0Y3ApOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRfYnVmKTsKLQotICBkZXN0cm95X3Rlc3RoYXJuZXNzICgmZGF0YSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogVGhpcyB2ZXJpZmllcyB0aGF0IHJ0cHNlc3Npb24gd2lsbCBjb3JyZWN0bHkgcGxhY2UgUkJzIHJvdW5kLXJvYmluCi0gKiBhY3Jvc3MgbXVsdGlwbGUgU1JzIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IHNlbmRlcnMgdGhhdCB0aGVpciBSQnMKLSAqIGRvIG5vdCBmaXQgaW4gb25lIFNSICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9tdWx0aXBsZV9zZW5kZXJzX3JvdW5kcm9iaW5fcmJzKQotewotICBUZXN0RGF0YSBkYXRhOwotICBHc3RGbG93UmV0dXJuIHJlczsKLSAgR3N0Q2xvY2tJRCBpZCwgdGlkOwotICBHc3RCdWZmZXIgKmJ1ZjsKLSAgR3N0UlRDUEJ1ZmZlciBydGNwID0gR1NUX1JUQ1BfQlVGRkVSX0lOSVQ7Ci0gIEdzdFJUQ1BQYWNrZXQgcnRjcF9wYWNrZXQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lOwotICBnaW50IHF1ZXVlX2xlbmd0aDsKLSAgZ2ludCBpLCBqLCBrOwotICBndWludDMyIHNzcmM7Ci0gIEdIYXNoVGFibGUgKnNyX3NzcmNzLCAqcmJfc3NyY3MsICp0bXBfc2V0OwotCi0gIHNldHVwX3Rlc3RoYXJuZXNzICgmZGF0YSwgVFJVRSk7Ci0KLSAgLyogb25seSB0aGUgUlRDUCB0aHJlYWQgd2FpdHMgb24gdGhlIGNsb2NrICovCi0gIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEuY2xvY2spLCAmaWQpOwotCi0gIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsgICAgIC8qIGN5Y2xlcyBiZXR3ZWVuIFNSIHJlcG9ydHMgKi8KLSAgICBmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7ICAgLyogcGFja2V0cyBwZXIgc3NyYyAqLwotICAgICAgZ2ludCBzZXEgPSAoaSAqIDUpICsgajsKLSAgICAgIEdTVF9ERUJVRyAoIlB1c2ggJWkiLCBzZXEpOwotCi0gICAgICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKEdTVF9URVNUX0NMT0NLIChkYXRhLmNsb2NrKSwKLSAgICAgICAgICAyMDAgKiBHU1RfTVNFQ09ORCk7Ci0KLSAgICAgIGZvciAoayA9IDA7IGsgPCAzNTsgaysrKSB7ICAgICAgICAvKiBudW1iZXIgb2Ygc3NyY3MgKi8KLSAgICAgICAgYnVmID0KLSAgICAgICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyIChzZXEgKiAyMDAgKiBHU1RfTVNFQ09ORCwgRkFMU0UsIHNlcSwKLSAgICAgICAgICAgIHNlcSAqIDIwMCwgMTAwMDAgKyBrKTsKLSAgICAgICAgcmVzID0gZ3N0X3BhZF9wdXNoIChkYXRhLnNyYywgYnVmKTsKLSAgICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBHU1RfRkxPV19PSyB8fCByZXMgPT0gR1NUX0ZMT1dfRkxVU0hJTkcpOwotICAgICAgfQotCi0gICAgICBHU1RfREVCVUcgKCJwdXNoZWQgJWkiLCBzZXEpOwotICAgIH0KLQotICAgIHF1ZXVlX2xlbmd0aCA9IGdfYXN5bmNfcXVldWVfbGVuZ3RoIChkYXRhLnJ0Y3BfcXVldWUpOwotCi0gICAgZG8gewotICAgICAgLyogY3JhbmsgdGhlIFJUQ1AgcGFkIHRocmVhZCAqLwotICAgICAgdGltZSA9IGdzdF9jbG9ja19pZF9nZXRfdGltZSAoaWQpOwotICAgICAgR1NUX0RFQlVHICgiQWR2YW5jaW5nIHRpbWUgdG8gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTICh0aW1lKSk7Ci0gICAgICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEuY2xvY2spLCB0aW1lKTsKLSAgICAgIHRpZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEuY2xvY2spKTsKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19wb2ludGVyICh0aWQsIGlkKTsKLSAgICAgIGdzdF9jbG9ja19pZF91bnJlZiAoaWQpOwotICAgICAgZ3N0X2Nsb2NrX2lkX3VucmVmICh0aWQpOwotCi0gICAgICAvKiB3YWl0IGZvciB0aGUgUlRDUCBwYWQgdGhyZWFkIHRvIG91dHB1dCBpdHMgZGF0YQotICAgICAgICogYW5kIHN0YXJ0IHdhaXRpbmcgb24gdGhlIG5leHQgdGltZW91dCAqLwotICAgICAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksCi0gICAgICAgICAgJmlkKTsKLQotICAgICAgLyogYW5kIHJldHJ5IGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIG5ldyBSVENQIHBhY2tldHMgb3V0LAotICAgICAgICogYmVjYXVzZSB0aGUgUlRDUCB0aHJlYWQgbWF5IHJhbmRvbWx5IGRlY2lkZSB0byByZXNjaGVkdWxlCi0gICAgICAgKiB0aGUgUlRDUCB0aW1lb3V0IGZvciBsYXRlciAqLwotICAgIH0gd2hpbGUgKGdfYXN5bmNfcXVldWVfbGVuZ3RoIChkYXRhLnJ0Y3BfcXVldWUpID09IHF1ZXVlX2xlbmd0aCk7Ci0KLSAgICBHU1RfREVCVUcgKCJSVENQIHRpbWVvdXQgcHJvY2Vzc2VkIik7Ci0gIH0KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgc3Jfc3NyY3MgPSBnX2hhc2hfdGFibGVfbmV3IChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCk7Ci0gIHJiX3NzcmNzID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCwgTlVMTCwKLSAgICAgIChHRGVzdHJveU5vdGlmeSkgZ19oYXNoX3RhYmxlX3VucmVmKTsKLQotICAvKiB2ZXJpZnkgdGhlIHJ0Y3AgcGFja2V0cyAqLwotICBmb3IgKGkgPSAwOyBpIDwgMiAqIDM1OyBpKyspIHsKLSAgICBndWludCBleHBlY3RlZF9yYl9jb3VudCA9IChpIDwgMzUpID8gR1NUX1JUQ1BfTUFYX1JCX0NPVU5UIDoKLSAgICAgICAgKDM1IC0gR1NUX1JUQ1BfTUFYX1JCX0NPVU5UIC0gMSk7Ci0KLSAgICBHU1RfREVCVUcgKCJwb3AgJWQiLCBpKTsKLQotICAgIGJ1ZiA9IGdfYXN5bmNfcXVldWVfcG9wIChkYXRhLnJ0Y3BfcXVldWUpOwotICAgIGdfYXNzZXJ0IChidWYgIT0gTlVMTCk7Ci0gICAgZ19hc3NlcnQgKGdzdF9ydGNwX2J1ZmZlcl92YWxpZGF0ZSAoYnVmKSk7Ci0KLSAgICBnc3RfcnRjcF9idWZmZXJfbWFwIChidWYsIEdTVF9NQVBfUkVBRCwgJnJ0Y3ApOwotICAgIGdfYXNzZXJ0IChnc3RfcnRjcF9idWZmZXJfZ2V0X2ZpcnN0X3BhY2tldCAoJnJ0Y3AsICZydGNwX3BhY2tldCkpOwotICAgIGdfYXNzZXJ0X2NtcGludCAoZ3N0X3J0Y3BfcGFja2V0X2dldF90eXBlICgmcnRjcF9wYWNrZXQpLCA9PSwKLSAgICAgICAgR1NUX1JUQ1BfVFlQRV9TUik7Ci0KLSAgICBnc3RfcnRjcF9wYWNrZXRfc3JfZ2V0X3NlbmRlcl9pbmZvICgmcnRjcF9wYWNrZXQsICZzc3JjLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsID49LCAxMDAwMCk7Ci0gICAgZ19hc3NlcnRfY21waW50IChzc3JjLCA8PSwgMTAwMzUpOwotICAgIGdfaGFzaF90YWJsZV9hZGQgKHNyX3NzcmNzLCBHVUlOVF9UT19QT0lOVEVSIChzc3JjKSk7Ci0KLSAgICAvKiBpbnNwZWN0IHRoZSBSQnMgKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQgKGdzdF9ydGNwX3BhY2tldF9nZXRfcmJfY291bnQgKCZydGNwX3BhY2tldCksID09LAotICAgICAgICBleHBlY3RlZF9yYl9jb3VudCk7Ci0KLSAgICBpZiAoaSA8IDM1KSB7Ci0gICAgICB0bXBfc2V0ID0gZ19oYXNoX3RhYmxlX25ldyAoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOwotICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAocmJfc3NyY3MsIEdVSU5UX1RPX1BPSU5URVIgKHNzcmMpLCB0bXBfc2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgdG1wX3NldCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKHJiX3NzcmNzLCBHVUlOVF9UT19QT0lOVEVSIChzc3JjKSk7Ci0gICAgICBnX2Fzc2VydCAodG1wX3NldCk7Ci0gICAgfQotCi0gICAgZm9yIChqID0gMDsgaiA8IGV4cGVjdGVkX3JiX2NvdW50OyBqKyspIHsKLSAgICAgIGdzdF9ydGNwX3BhY2tldF9nZXRfcmIgKCZydGNwX3BhY2tldCwgaiwgJnNzcmMsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsID49LCAxMDAwMCk7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsIDw9LCAxMDAzNSk7Ci0gICAgICBnX2hhc2hfdGFibGVfYWRkICh0bXBfc2V0LCBHVUlOVF9UT19QT0lOVEVSIChzc3JjKSk7Ci0gICAgfQotCi0gICAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLQotICAgIC8qIGN5Y2xlIGRvbmUsIHZlcmlmeSBhbGwgc3NyY3MgaGF2ZSBpc3N1ZWQgU1IgcmVwb3J0cyAqLwotICAgIGlmICgoaSArIDEpID09IDM1IHx8IChpICsgMSkgPT0gKDIgKiAzNSkpIHsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAoZ19oYXNoX3RhYmxlX3NpemUgKHNyX3NzcmNzKSwgPT0sIDM1KTsKLSAgICAgIGdfaGFzaF90YWJsZV9yZW1vdmVfYWxsIChzcl9zc3Jjcyk7Ci0gICAgfQotICB9Ci0KLSAgLyogbm93IHZlcmlmeSBhbGwgb3RoZXIgc3NyY3MgaGF2ZSBiZWVuIHJlcG9ydGVkIG9uIGVhY2ggc3NyYydzIFNSICovCi0gIGdfYXNzZXJ0X2NtcGludCAoZ19oYXNoX3RhYmxlX3NpemUgKHJiX3NzcmNzKSwgPT0sIDM1KTsKLSAgZm9yIChpID0gMTAwMDA7IGkgPCAxMDAzNTsgaSsrKSB7Ci0gICAgdG1wX3NldCA9IGdfaGFzaF90YWJsZV9sb29rdXAgKHJiX3NzcmNzLCBHVUlOVF9UT19QT0lOVEVSIChpKSk7Ci0gICAgZ19hc3NlcnQgKHRtcF9zZXQpOwotICAgIC8qIFNSIGNvbnRhaW5zIFJCcyBmb3IgZWFjaCBvdGhlciBzc3JjIGV4Y2VwdCB0aGUgc3NyYyBvZiB0aGUgU1IgKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQgKGdfaGFzaF90YWJsZV9zaXplICh0bXBfc2V0KSwgPT0sIDM0KTsKLSAgICBnX2Fzc2VydCAoIWdfaGFzaF90YWJsZV9jb250YWlucyAodG1wX3NldCwgR1VJTlRfVE9fUE9JTlRFUiAoaSkpKTsKLSAgfQotCi0gIGdfaGFzaF90YWJsZV91bnJlZiAoc3Jfc3NyY3MpOwotICBnX2hhc2hfdGFibGVfdW5yZWYgKHJiX3NzcmNzKTsKLQotICBkZXN0cm95X3Rlc3RoYXJuZXNzICgmZGF0YSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWNyYW5rX3J0Y3BfdGhyZWFkIChUZXN0RGF0YSAqIGRhdGEsIEdzdENsb2NrVGltZSAqIHRpbWUsIEdzdENsb2NrSUQgKiBpZCkKLXsKLSAgZ2ludCBxdWV1ZV9sZW5ndGg7Ci0gIEdzdENsb2NrSUQgKnRpZDsKLQotICBxdWV1ZV9sZW5ndGggPSBnX2FzeW5jX3F1ZXVlX2xlbmd0aCAoZGF0YS0+cnRjcF9xdWV1ZSk7Ci0gIGRvIHsKLSAgICAqdGltZSA9IGdzdF9jbG9ja19pZF9nZXRfdGltZSAoKmlkKTsKLSAgICBHU1RfREVCVUcgKCJBZHZhbmNpbmcgdGltZSB0byAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKCp0aW1lKSk7Ci0gICAgaWYgKCp0aW1lID4gZ3N0X2Nsb2NrX2dldF90aW1lIChkYXRhLT5jbG9jaykpCi0gICAgICBnc3RfdGVzdF9jbG9ja19zZXRfdGltZSAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEtPmNsb2NrKSwgKnRpbWUpOwotICAgIHRpZCA9IGdzdF90ZXN0X2Nsb2NrX3Byb2Nlc3NfbmV4dF9jbG9ja19pZCAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEtPmNsb2NrKSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3BvaW50ZXIgKHRpZCwgKmlkKTsKLQotICAgIGdzdF9jbG9ja19pZF91bnJlZiAodGlkKTsKLSAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKCppZCk7Ci0gICAgKmlkID0gTlVMTDsKLQotICAgIC8qIHdhaXQgZm9yIHRoZSBSVENQIHBhZCB0aHJlYWQgdG8gb3V0cHV0IGl0cyBkYXRhCi0gICAgICogYW5kIHN0YXJ0IHdhaXRpbmcgb24gdGhlIG5leHQgdGltZW91dCAqLwotICAgIGdzdF90ZXN0X2Nsb2NrX3dhaXRfZm9yX25leHRfcGVuZGluZ19pZCAoR1NUX1RFU1RfQ0xPQ0sgKGRhdGEtPmNsb2NrKSwgaWQpOwotCi0gICAgLyogYW5kIHJldHJ5IGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIG5ldyBSVENQIHBhY2tldHMgb3V0LAotICAgICAqIGJlY2F1c2UgdGhlIFJUQ1AgdGhyZWFkIG1heSByYW5kb21seSBkZWNpZGUgdG8gcmVzY2hlZHVsZQotICAgICAqIHRoZSBSVENQIHRpbWVvdXQgZm9yIGxhdGVyICovCi0gIH0gd2hpbGUgKGdfYXN5bmNfcXVldWVfbGVuZ3RoIChkYXRhLT5ydGNwX3F1ZXVlKSA9PSBxdWV1ZV9sZW5ndGgpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnRlcm5hbF9zb3VyY2VzX3RpbWVvdXQpCi17Ci0gIFRlc3REYXRhIGRhdGE7Ci0gIEdzdENsb2NrSUQgaWQ7Ci0gIEdzdENsb2NrVGltZSB0aW1lOwotICBHT2JqZWN0ICppbnRlcm5hbF9zZXNzaW9uOwotICBndWludCBpbnRlcm5hbF9zc3JjOwotICBndWludDMyIHNzcmM7Ci0gIEdzdEJ1ZmZlciAqYnVmOwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSBHU1RfUlRDUF9CVUZGRVJfSU5JVDsKLSAgR3N0UlRDUFBhY2tldCBydGNwX3BhY2tldDsKLSAgR3N0Rmxvd1JldHVybiByZXM7Ci0gIGdpbnQgaSwgajsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBzZXR1cF90ZXN0aGFybmVzcyAoJmRhdGEsIFRSVUUpOwotICBnX29iamVjdF9nZXQgKGRhdGEuc2Vzc2lvbiwgImludGVybmFsLXNlc3Npb24iLCAmaW50ZXJuYWxfc2Vzc2lvbiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoaW50ZXJuYWxfc2Vzc2lvbiwgImludGVybmFsLXNzcmMiLCAweERFQURCRUVGLCBOVUxMKTsKLQotICAvKiBvbmx5IHRoZSBSVENQIHRocmVhZCB3YWl0cyBvbiB0aGUgY2xvY2sgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfd2FpdF9mb3JfbmV4dF9wZW5kaW5nX2lkIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksICZpZCk7Ci0KLSAgLyogY3JhbmsgdGhlIFJUQ1AgcGFkIHRocmVhZCB1bnRpbCBpdCBjcmVhdGVzIGEgUlIgZm9yIGl0cyBpbnRlcm5hbC1zc3JjCi0gICAqIHNvdXJjZSwgc2luY2Ugd2UgaGF2ZSBub3QgcHVzaGVkIGFueSBSVFAgcGFja2V0cyBhbmQgaXQgZG9lc24ndCBoYXZlCi0gICAqIGFueSBvdGhlciBzb3VyY2UgYXZhaWxhYmxlICovCi0gIGNyYW5rX3J0Y3BfdGhyZWFkICgmZGF0YSwgJnRpbWUsICZpZCk7Ci0KLSAgZ19vYmplY3RfZ2V0IChpbnRlcm5hbF9zZXNzaW9uLCAiaW50ZXJuYWwtc3NyYyIsICZpbnRlcm5hbF9zc3JjLCBOVUxMKTsKLSAgZ19hc3NlcnRfY21waW50IChpbnRlcm5hbF9zc3JjLCA9PSwgMHhERUFEQkVFRik7Ci0KLSAgLyogdmVyaWZ5IHRoYXQgcnRwc2Vzc2lvbiBoYXMgc2VudCBSUiBmb3IgYW4gaW50ZXJuYWxseS1jcmVhdGVkCi0gICAqIFJUUFNvdXJjZSB0aGF0IGlzIHVzaW5nIHRoZSBpbnRlcm5hbC1zc3JjICovCi0gIGJ1ZiA9IGdfYXN5bmNfcXVldWVfcG9wIChkYXRhLnJ0Y3BfcXVldWUpOwotICBnX2Fzc2VydCAoYnVmICE9IE5VTEwpOwotICBnX2Fzc2VydCAoZ3N0X3J0Y3BfYnVmZmVyX3ZhbGlkYXRlIChidWYpKTsKLSAgZ3N0X3J0Y3BfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1JFQUQsICZydGNwKTsKLSAgZ19hc3NlcnQgKGdzdF9ydGNwX2J1ZmZlcl9nZXRfZmlyc3RfcGFja2V0ICgmcnRjcCwgJnJ0Y3BfcGFja2V0KSk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoZ3N0X3J0Y3BfcGFja2V0X2dldF90eXBlICgmcnRjcF9wYWNrZXQpLCA9PSwKLSAgICAgIEdTVF9SVENQX1RZUEVfUlIpOwotICBzc3JjID0gZ3N0X3J0Y3BfcGFja2V0X3JyX2dldF9zc3JjICgmcnRjcF9wYWNrZXQpOwotICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsID09LCBpbnRlcm5hbF9zc3JjKTsKLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0KLSAgLyogb2ssIG5vdyBsZXQncyBwdXNoIHNvbWUgUlRQIHBhY2tldHMgKi8KLSAgY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXBwbGljYXRpb24veC1ydHAiLCAic3NyYyIsIEdfVFlQRV9VSU5ULCAweDAxQkFEQkFELAotICAgICAgTlVMTCk7Ci0gIGdzdF9wYWRfc2V0X2NhcHMgKGRhdGEuc3JjLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKLSAgICBnc3RfdGVzdF9jbG9ja19hZHZhbmNlX3RpbWUgKEdTVF9URVNUX0NMT0NLIChkYXRhLmNsb2NrKSwKLSAgICAgICAgMjAwICogR1NUX01TRUNPTkQpOwotICAgIGJ1ZiA9Ci0gICAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICh0aW1lICsgaSAqIDIwMCAqIEdTVF9NU0VDT05ELCBGQUxTRSwgaSwgaSAqIDIwMCwKLSAgICAgICAgMHgwMUJBREJBRCk7Ci0gICAgcmVzID0gZ3N0X3BhZF9wdXNoIChkYXRhLnNyYywgYnVmKTsKLSAgICBmYWlsX3VubGVzcyAocmVzID09IEdTVF9GTE9XX09LIHx8IHJlcyA9PSBHU1RfRkxPV19GTFVTSElORyk7Ci0gIH0KLQotICAvKiBpbnRlcm5hbCBzc3JjIG11c3QgaGF2ZSBjaGFuZ2VkIGFscmVhZHkgKi8KLSAgZ19vYmplY3RfZ2V0IChpbnRlcm5hbF9zZXNzaW9uLCAiaW50ZXJuYWwtc3NyYyIsICZpbnRlcm5hbF9zc3JjLCBOVUxMKTsKLSAgZ19hc3NlcnRfY21waW50IChzc3JjLCAhPSwgaW50ZXJuYWxfc3NyYyk7Ci0gIGdfYXNzZXJ0X2NtcGludCAoaW50ZXJuYWxfc3NyYywgPT0sIDB4MDFCQURCQUQpOwotCi0gIC8qIHdhaXQgZm9yIFNSICovCi0gIGNyYW5rX3J0Y3BfdGhyZWFkICgmZGF0YSwgJnRpbWUsICZpZCk7Ci0KLSAgLyogdmVyaWZ5IFNSIGFuZCBSUiAqLwotICBqID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotICAgIGJ1ZiA9IGdfYXN5bmNfcXVldWVfcG9wIChkYXRhLnJ0Y3BfcXVldWUpOwotICAgIGdfYXNzZXJ0IChidWYgIT0gTlVMTCk7Ci0gICAgZ19hc3NlcnQgKGdzdF9ydGNwX2J1ZmZlcl92YWxpZGF0ZSAoYnVmKSk7Ci0gICAgZ3N0X3J0Y3BfYnVmZmVyX21hcCAoYnVmLCBHU1RfTUFQX1JFQUQsICZydGNwKTsKLSAgICBnX2Fzc2VydCAoZ3N0X3J0Y3BfYnVmZmVyX2dldF9maXJzdF9wYWNrZXQgKCZydGNwLCAmcnRjcF9wYWNrZXQpKTsKLSAgICBpZiAoZ3N0X3J0Y3BfcGFja2V0X2dldF90eXBlICgmcnRjcF9wYWNrZXQpID09IEdTVF9SVENQX1RZUEVfU1IpIHsKLSAgICAgIGdzdF9ydGNwX3BhY2tldF9zcl9nZXRfc2VuZGVyX2luZm8gKCZydGNwX3BhY2tldCwgJnNzcmMsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsID09LCBpbnRlcm5hbF9zc3JjKTsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAoc3NyYywgPT0sIDB4MDFCQURCQUQpOwotICAgICAgaiB8PSAweDE7Ci0gICAgfSBlbHNlIGlmIChnc3RfcnRjcF9wYWNrZXRfZ2V0X3R5cGUgKCZydGNwX3BhY2tldCkgPT0gR1NUX1JUQ1BfVFlQRV9SUikgewotICAgICAgc3NyYyA9IGdzdF9ydGNwX3BhY2tldF9ycl9nZXRfc3NyYyAoJnJ0Y3BfcGFja2V0KTsKLSAgICAgIGdfYXNzZXJ0X2NtcGludCAoc3NyYywgIT0sIGludGVybmFsX3NzcmMpOwotICAgICAgZ19hc3NlcnRfY21waW50IChzc3JjLCA9PSwgMHhERUFEQkVFRik7Ci0gICAgICBqIHw9IDB4MjsKLSAgICB9Ci0gICAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgfQotICBnX2Fzc2VydF9jbXBpbnQgKGosID09LCAweDMpOyAvKiB2ZXJpZnkgd2UgZ290IGJvdGggU1IgYW5kIFJSICovCi0KLSAgLyogZ28gMzAgc2Vjb25kcyBpbiB0aGUgZnV0dXJlIGFuZCBvYnNlcnZlIGJvdGggc291cmNlcyB0aW1pbmcgb3V0OgotICAgKiAweERFQURCRUVGIC0+IEJZRSwgMHgwMUJBREJBRCAtPiBiZWNvbWVzIHJlY2VpdmVyIG9ubHkgKi8KLSAgZ3N0X3Rlc3RfY2xvY2tfYWR2YW5jZV90aW1lIChHU1RfVEVTVF9DTE9DSyAoZGF0YS5jbG9jayksIDMwICogR1NUX1NFQ09ORCk7Ci0gIGNyYW5rX3J0Y3BfdGhyZWFkICgmZGF0YSwgJnRpbWUsICZpZCk7Ci0KLSAgLyogdmVyaWZ5IEJZRSBhbmQgUlIgKi8KLSAgaiA9IDA7Ci0gIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICBidWYgPSBnX2FzeW5jX3F1ZXVlX3BvcCAoZGF0YS5ydGNwX3F1ZXVlKTsKLSAgICBnX2Fzc2VydCAoYnVmICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0IChnc3RfcnRjcF9idWZmZXJfdmFsaWRhdGUgKGJ1ZikpOwotICAgIGdzdF9ydGNwX2J1ZmZlcl9tYXAgKGJ1ZiwgR1NUX01BUF9SRUFELCAmcnRjcCk7Ci0KLSAgICBnX2Fzc2VydCAoZ3N0X3J0Y3BfYnVmZmVyX2dldF9maXJzdF9wYWNrZXQgKCZydGNwLCAmcnRjcF9wYWNrZXQpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQgKGdzdF9ydGNwX3BhY2tldF9nZXRfdHlwZSAoJnJ0Y3BfcGFja2V0KSwgPT0sCi0gICAgICAgIEdTVF9SVENQX1RZUEVfUlIpOwotICAgIHNzcmMgPSBnc3RfcnRjcF9wYWNrZXRfcnJfZ2V0X3NzcmMgKCZydGNwX3BhY2tldCk7Ci0gICAgaWYgKHNzcmMgPT0gMHgwMUJBREJBRCkgewotICAgICAgaiB8PSAweDE7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsID09LCBpbnRlcm5hbF9zc3JjKTsKLSAgICAgIC8qIDIgPT4gUlIsIFNERVMuIFRoZXJlIGlzIG5vIEJZRSBoZXJlICovCi0gICAgICBnX2Fzc2VydF9jbXBpbnQgKGdzdF9ydGNwX2J1ZmZlcl9nZXRfcGFja2V0X2NvdW50ICgmcnRjcCksID09LCAyKTsKLSAgICB9IGVsc2UgaWYgKHNzcmMgPT0gMHhERUFEQkVFRikgewotICAgICAgaiB8PSAweDI7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKHNzcmMsICE9LCBpbnRlcm5hbF9zc3JjKTsKLSAgICAgIC8qIDMgPT4gUlIsIFNERVMsIEJZRSAqLwotICAgICAgZ19hc3NlcnRfY21waW50IChnc3RfcnRjcF9idWZmZXJfZ2V0X3BhY2tldF9jb3VudCAoJnJ0Y3ApLCA9PSwgMyk7Ci0gICAgICBnX2Fzc2VydCAoZ3N0X3J0Y3BfcGFja2V0X21vdmVfdG9fbmV4dCAoJnJ0Y3BfcGFja2V0KSk7Ci0gICAgICBnX2Fzc2VydCAoZ3N0X3J0Y3BfcGFja2V0X21vdmVfdG9fbmV4dCAoJnJ0Y3BfcGFja2V0KSk7Ci0gICAgICBnX2Fzc2VydF9jbXBpbnQgKGdzdF9ydGNwX3BhY2tldF9nZXRfdHlwZSAoJnJ0Y3BfcGFja2V0KSwgPT0sCi0gICAgICAgICAgR1NUX1JUQ1BfVFlQRV9CWUUpOwotICAgIH0KLQotICAgIGdzdF9ydGNwX2J1ZmZlcl91bm1hcCAoJnJ0Y3ApOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKGJ1Zik7Ci0gIH0KLSAgZ19hc3NlcnRfY21waW50IChqLCA9PSwgMHgzKTsgLyogdmVyaWZ5IHdlIGdvdCBib3RoIEJZRSBhbmQgUlIgKi8KLSAgZ3N0X2Nsb2NrX2lkX3VucmVmIChpZCk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKGludGVybmFsX3Nlc3Npb24pOwotICBkZXN0cm95X3Rlc3RoYXJuZXNzICgmZGF0YSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgZ3VpbnQ4IHN1YnR5cGU7Ci0gIGd1aW50MzIgc3NyYzsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdzdEJ1ZmZlciAqZGF0YTsKLX0gUlRDUEFwcFJlc3VsdDsKLQotc3RhdGljIHZvaWQKLW9uX2FwcF9ydGNwX2NiIChHT2JqZWN0ICogc2Vzc2lvbiwgZ3VpbnQgc3VidHlwZSwgZ3VpbnQgc3NyYywKLSAgICBjb25zdCBnY2hhciAqIG5hbWUsIEdzdEJ1ZmZlciAqIGRhdGEsIFJUQ1BBcHBSZXN1bHQgKiByZXN1bHQpCi17Ci0gIHJlc3VsdC0+c3VidHlwZSA9IHN1YnR5cGU7Ci0gIHJlc3VsdC0+c3NyYyA9IHNzcmM7Ci0gIHJlc3VsdC0+bmFtZSA9IGdfc3RyZHVwIChuYW1lKTsKLSAgcmVzdWx0LT5kYXRhID0gZGF0YSA/IGdzdF9idWZmZXJfcmVmIChkYXRhKSA6IE5VTEw7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlY2VpdmVfcnRjcF9hcHBfcGFja2V0KQotewotICBHc3RIYXJuZXNzICpoOwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0UlRDUEJ1ZmZlciBydGNwID0gR1NUX1JUQ1BfQlVGRkVSX0lOSVQ7Ci0gIEdzdFJUQ1BQYWNrZXQgcGFja2V0OwotICBSVENQQXBwUmVzdWx0IHJlc3VsdCA9IHsgMCB9OwotICBHc3RFbGVtZW50ICppbnRlcm5hbF9zZXNzaW9uOwotICBndWludDggZGF0YVtdID0geyAweDExLCAweDIyLCAweDMzLCAweDQ0IH07Ci0KLSAgaCA9IGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzICgicnRwc2Vzc2lvbiIsICJyZWN2X3J0Y3Bfc2luayIsIE5VTEwpOwotICBnX29iamVjdF9nZXQgKGgtPmVsZW1lbnQsICJpbnRlcm5hbC1zZXNzaW9uIiwgJmludGVybmFsX3Nlc3Npb24sIE5VTEwpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGludGVybmFsX3Nlc3Npb24sICJvbi1hcHAtcnRjcCIsCi0gICAgICBHX0NBTExCQUNLIChvbl9hcHBfcnRjcF9jYiksICZyZXN1bHQpOwotCi0gIC8qIFB1c2ggQVBQIGJ1ZmZlciB3aXRoIG5vIGRhdGEgKi8KLSAgYnVmZmVyID0gZ3N0X3J0Y3BfYnVmZmVyX25ldyAoMTAwMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcnRjcF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRjcCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3J0Y3BfYnVmZmVyX2FkZF9wYWNrZXQgKCZydGNwLCBHU1RfUlRDUF9UWVBFX0FQUCwgJnBhY2tldCkpOwotICBnc3RfcnRjcF9wYWNrZXRfYXBwX3NldF9zdWJ0eXBlICgmcGFja2V0LCAyMSk7Ci0gIGdzdF9ydGNwX3BhY2tldF9hcHBfc2V0X3NzcmMgKCZwYWNrZXQsIDB4MTExMTExMTEpOwotICBnc3RfcnRjcF9wYWNrZXRfYXBwX3NldF9uYW1lICgmcGFja2V0LCAiVGVzdCIpOwotICBnc3RfcnRjcF9idWZmZXJfdW5tYXAgKCZydGNwKTsKLQotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCAiYXBwbGljYXRpb24veC1ydGNwIik7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9oYXJuZXNzX3B1c2ggKGgsIGJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXN1bHQuc3VidHlwZSwgMjEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChyZXN1bHQuc3NyYywgMHgxMTExMTExMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKHJlc3VsdC5uYW1lLCAiVGVzdCIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfcG9pbnRlciAocmVzdWx0LmRhdGEsIE5VTEwpOwotCi0gIGdfZnJlZSAocmVzdWx0Lm5hbWUpOwotCi0gIC8qIFB1c2ggQVBQIGJ1ZmZlciB3aXRoIGRhdGEgKi8KLSAgbWVtc2V0ICgmcmVzdWx0LCAwLCBzaXplb2YgKHJlc3VsdCkpOwotICBidWZmZXIgPSBnc3RfcnRjcF9idWZmZXJfbmV3ICgxMDAwKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9ydGNwX2J1ZmZlcl9tYXAgKGJ1ZmZlciwgR1NUX01BUF9SRUFEV1JJVEUsICZydGNwKSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcnRjcF9idWZmZXJfYWRkX3BhY2tldCAoJnJ0Y3AsIEdTVF9SVENQX1RZUEVfQVBQLCAmcGFja2V0KSk7Ci0gIGdzdF9ydGNwX3BhY2tldF9hcHBfc2V0X3N1YnR5cGUgKCZwYWNrZXQsIDIyKTsKLSAgZ3N0X3J0Y3BfcGFja2V0X2FwcF9zZXRfc3NyYyAoJnBhY2tldCwgMHgyMjIyMjIyMik7Ci0gIGdzdF9ydGNwX3BhY2tldF9hcHBfc2V0X25hbWUgKCZwYWNrZXQsICJUZXN0Iik7Ci0gIGdzdF9ydGNwX3BhY2tldF9hcHBfc2V0X2RhdGFfbGVuZ3RoICgmcGFja2V0LCBzaXplb2YgKGRhdGEpIC8gNCk7Ci0gIG1lbWNweSAoZ3N0X3J0Y3BfcGFja2V0X2FwcF9nZXRfZGF0YSAoJnBhY2tldCksIGRhdGEsIHNpemVvZiAoZGF0YSkpOwotICBnc3RfcnRjcF9idWZmZXJfdW5tYXAgKCZydGNwKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaGFybmVzc19wdXNoIChoLCBidWZmZXIpLCBHU1RfRkxPV19PSyk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmVzdWx0LnN1YnR5cGUsIDIyKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAocmVzdWx0LnNzcmMsIDB4MjIyMjIyMjIpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nIChyZXN1bHQubmFtZSwgIlRlc3QiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChyZXN1bHQuZGF0YSwgMCwgZGF0YSwgc2l6ZW9mIChkYXRhKSkgPT0gMCk7Ci0KLSAgZ19mcmVlIChyZXN1bHQubmFtZSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKHJlc3VsdC5kYXRhKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChpbnRlcm5hbF9zZXNzaW9uKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1zdGF0c190ZXN0X2NiIChHT2JqZWN0ICogb2JqZWN0LCBHUGFyYW1TcGVjICogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgZ3VpbnQgbnVtX3NvdXJjZXMgPSAwOwotICBnYm9vbGVhbiAqY2JfY2FsbGVkID0gZGF0YTsKLSAgZ19hc3NlcnQgKCpjYl9jYWxsZWQgPT0gRkFMU0UpOwotICAqY2JfY2FsbGVkID0gVFJVRTsKLQotICAvKiBXZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBydHBzZXNzaW9uIHByb3BlcnR5Ci0gICAgIHdpdGhvdXQgaW50cm9kdWNpbmcgdGhlIGRlYWRsb2NrICovCi0gIGdfb2JqZWN0X2dldCAob2JqZWN0LCAibnVtLXNvdXJjZXMiLCAmbnVtX3NvdXJjZXMsIE5VTEwpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kb250X2xvY2tfb25fc3RhdHMpCi17Ci0gIEdzdEhhcm5lc3MgKmhfcnRjcDsKLSAgR3N0SGFybmVzcyAqaF9zZW5kOwotICBHc3RDbG9jayAqY2xvY2sgPSBnc3RfdGVzdF9jbG9ja19uZXcgKCk7Ci0gIEdzdFRlc3RDbG9jayAqdGVzdGNsb2NrID0gR1NUX1RFU1RfQ0xPQ0sgKGNsb2NrKTsKLSAgZ2Jvb2xlYW4gY2JfY2FsbGVkID0gRkFMU0U7Ci0KLSAgLyogdXNlIHRlc3RjbG9jayBhcyB0aGUgc3lzdGVtY2xvY2sgdG8gY2FwdHVyZSB0aGUgcnRjcCB0aHJlYWQgd2FpdHMgKi8KLSAgZ3N0X3N5c3RlbV9jbG9ja19zZXRfZGVmYXVsdCAoR1NUX0NMT0NLICh0ZXN0Y2xvY2spKTsKLQotICBoX3J0Y3AgPQotICAgICAgZ3N0X2hhcm5lc3NfbmV3X3dpdGhfcGFkbmFtZXMgKCJydHBzZXNzaW9uIiwgInJlY3ZfcnRjcF9zaW5rIiwKLSAgICAgICJzZW5kX3J0Y3Bfc3JjIik7Ci0gIGhfc2VuZCA9Ci0gICAgICBnc3RfaGFybmVzc19uZXdfd2l0aF9lbGVtZW50IChoX3J0Y3AtPmVsZW1lbnQsICJzZW5kX3J0cF9zaW5rIiwKLSAgICAgICJzZW5kX3J0cF9zcmMiKTsKLQotICAvKiBjb25uZWN0IHRvIHRoZSBzdGF0cy1yZXBvcnRpbmcgKi8KLSAgZ19zaWduYWxfY29ubmVjdCAoaF9ydGNwLT5lbGVtZW50LCAibm90aWZ5OjpzdGF0cyIsCi0gICAgICBHX0NBTExCQUNLIChzdGF0c190ZXN0X2NiKSwgJmNiX2NhbGxlZCk7Ci0KLSAgLyogImNyYW5rIiBhbmQgY2hlY2sgdGhlIHN0YXRzICovCi0gIGdfYXNzZXJ0IChnc3RfdGVzdF9jbG9ja19jcmFuayAodGVzdGNsb2NrKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGhfcnRjcCkpOwotICBmYWlsX3VubGVzcyAoY2JfY2FsbGVkKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaF9zZW5kKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGhfcnRjcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGNsb2NrKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgdm9pZAotc3VzcGljaW91c19ieWVfY2IgKEdPYmplY3QgKiBvYmplY3QsIEdQYXJhbVNwZWMgKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICBHVmFsdWVBcnJheSAqc3RhdHNfYXJyOwotICBHc3RTdHJ1Y3R1cmUgKnN0YXRzLCAqaW50ZXJuYWxfc3RhdHM7Ci0gIGdib29sZWFuICpjYl9jYWxsZWQgPSBkYXRhOwotICBnYm9vbGVhbiBpbnRlcm5hbCA9IEZBTFNFLCBzZW50X2J5ZSA9IFRSVUU7Ci0gIGd1aW50IHNzcmMgPSAwOwotICBndWludCBpOwotCi0gIGdfYXNzZXJ0ICgqY2JfY2FsbGVkID09IEZBTFNFKTsKLSAgKmNiX2NhbGxlZCA9IFRSVUU7Ci0KLSAgZ19vYmplY3RfZ2V0IChvYmplY3QsICJzdGF0cyIsICZzdGF0cywgTlVMTCk7Ci0gIHN0YXRzX2FyciA9Ci0gICAgICBnX3ZhbHVlX2dldF9ib3hlZCAoZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0YXRzLCAic291cmNlLXN0YXRzIikpOwotICBnX2Fzc2VydCAoc3RhdHNfYXJyICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoc3RhdHNfYXJyLT5uX3ZhbHVlcyA+PSAxKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgc3RhdHNfYXJyLT5uX3ZhbHVlczsgaSsrKSB7Ci0gICAgaW50ZXJuYWxfc3RhdHMgPSBnX3ZhbHVlX2dldF9ib3hlZCAoZ192YWx1ZV9hcnJheV9nZXRfbnRoIChzdGF0c19hcnIsIGkpKTsKLSAgICBnX2Fzc2VydCAoaW50ZXJuYWxfc3RhdHMgIT0gTlVMTCk7Ci0KLSAgICBnc3Rfc3RydWN0dXJlX2dldCAoaW50ZXJuYWxfc3RhdHMsCi0gICAgICAgICJzc3JjIiwgR19UWVBFX1VJTlQsICZzc3JjLAotICAgICAgICAiaW50ZXJuYWwiLCBHX1RZUEVfQk9PTEVBTiwgJmludGVybmFsLAotICAgICAgICAicmVjZWl2ZWQtYnllIiwgR19UWVBFX0JPT0xFQU4sICZzZW50X2J5ZSwgTlVMTCk7Ci0KLSAgICBpZiAoc3NyYyA9PSAweERFQURCRUVGKSB7Ci0gICAgICBmYWlsX3VubGVzcyAoaW50ZXJuYWwpOwotICAgICAgZmFpbF91bmxlc3MgKCFzZW50X2J5ZSk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoc3NyYywgMHhERUFEQkVFRik7Ci0KLSAgZ3N0X3N0cnVjdHVyZV9mcmVlIChzdGF0cyk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotY3JlYXRlX2J5ZV9ydGNwIChndWludDMyIHNzcmMpCi17Ci0gIEdzdFJUQ1BQYWNrZXQgcGFja2V0OwotICBHc3RSVENQQnVmZmVyIHJ0Y3AgPSBHU1RfUlRDUF9CVUZGRVJfSU5JVDsKLSAgR1NvY2tldEFkZHJlc3MgKnNhZGRyOwotICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGdzdF9ydGNwX2J1ZmZlcl9uZXcgKDEwMDApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcnRjcF9idWZmZXJfbWFwIChidWZmZXIsIEdTVF9NQVBfUkVBRFdSSVRFLCAmcnRjcCkpOwotICBmYWlsX3VubGVzcyAoZ3N0X3J0Y3BfYnVmZmVyX2FkZF9wYWNrZXQgKCZydGNwLCBHU1RfUlRDUF9UWVBFX0JZRSwgJnBhY2tldCkpOwotICBnc3RfcnRjcF9wYWNrZXRfYnllX2FkZF9zc3JjICgmcGFja2V0LCBzc3JjKTsKLSAgZ3N0X3J0Y3BfYnVmZmVyX3VubWFwICgmcnRjcCk7Ci0KLSAgLyogTmVlZCB0byBhZGQgbWV0YSB0byB0cmlnZ2VyIGNvbGxpc2lvbiBkZXRlY3Rpb24gKi8KLSAgc2FkZHIgPSBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3X2Zyb21fc3RyaW5nICgiMTI3LjAuMC4xIiwgMzQ5MCk7Ci0gIGdzdF9idWZmZXJfYWRkX25ldF9hZGRyZXNzX21ldGEgKGJ1ZmZlciwgc2FkZHIpOwotICBnX29iamVjdF91bnJlZiAoc2FkZHIpOwotICByZXR1cm4gYnVmZmVyOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pZ25vcmVfc3VzcGljaW91c19ieWUpCi17Ci0gIEdzdEhhcm5lc3MgKmhfcnRjcCA9IE5VTEw7Ci0gIEdzdEhhcm5lc3MgKmhfc2VuZCA9IE5VTEw7Ci0gIGdib29sZWFuIGNiX2NhbGxlZCA9IEZBTFNFOwotICBHc3RUZXN0Q2xvY2sgKnRlc3RjbG9jayA9IEdTVF9URVNUX0NMT0NLIChnc3RfdGVzdF9jbG9ja19uZXcgKCkpOwotCi0gIC8qIHVzZSB0ZXN0Y2xvY2sgYXMgdGhlIHN5c3RlbWNsb2NrIHRvIGNhcHR1cmUgdGhlIHJ0Y3AgdGhyZWFkIHdhaXRzICovCi0gIGdzdF9zeXN0ZW1fY2xvY2tfc2V0X2RlZmF1bHQgKEdTVF9DTE9DSyAodGVzdGNsb2NrKSk7Ci0KLSAgaF9ydGNwID0KLSAgICAgIGdzdF9oYXJuZXNzX25ld193aXRoX3BhZG5hbWVzICgicnRwc2Vzc2lvbiIsICJyZWN2X3J0Y3Bfc2luayIsCi0gICAgICAic2VuZF9ydGNwX3NyYyIpOwotICBoX3NlbmQgPQotICAgICAgZ3N0X2hhcm5lc3NfbmV3X3dpdGhfZWxlbWVudCAoaF9ydGNwLT5lbGVtZW50LCAic2VuZF9ydHBfc2luayIsCi0gICAgICAic2VuZF9ydHBfc3JjIik7Ci0KLSAgLyogY29ubmVjdCB0byB0aGUgc3RhdHMtcmVwb3J0aW5nICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGhfcnRjcC0+ZWxlbWVudCwgIm5vdGlmeTo6c3RhdHMiLAotICAgICAgR19DQUxMQkFDSyAoc3VzcGljaW91c19ieWVfY2IpLCAmY2JfY2FsbGVkKTsKLQotICAvKiBQdXNoIFJUUCBidWZmZXIgbWFraW5nIG91ciBpbnRlcm5hbCBTU1JDPTB4REVBREJFRUYgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaF9zZW5kLAotICAgICAgImFwcGxpY2F0aW9uL3gtcnRwLHNzcmM9KHVpbnQpMHhERUFEQkVFRiwiCi0gICAgICAiY2xvY2stcmF0ZT05MDAwMCxzZXFudW0tb2Zmc2V0PSh1aW50KTEyMzQ1Iik7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGhfc2VuZCwKLSAgICAgIGdlbmVyYXRlX3Rlc3RfYnVmZmVyICgwLCBGQUxTRSwgMTIzNDUsIDAsIDB4REVBREJFRUYpKTsKLQotICAvKiBQdXNoIEJZRSBSVENQIHdpdGggaW50ZXJuYWwgU1NSQyAoMHhERUFEQkVFRikgKi8KLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaF9ydGNwLCAiYXBwbGljYXRpb24veC1ydGNwIik7Ci0gIGdzdF9oYXJuZXNzX3B1c2ggKGhfcnRjcCwgY3JlYXRlX2J5ZV9ydGNwICgweERFQURCRUVGKSk7Ci0KLSAgLyogImNyYW5rIiBhbmQgY2hlY2sgdGhlIHN0YXRzICovCi0gIGdfYXNzZXJ0IChnc3RfdGVzdF9jbG9ja19jcmFuayAodGVzdGNsb2NrKSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdzdF9oYXJuZXNzX3B1bGwgKGhfcnRjcCkpOwotICBmYWlsX3VubGVzcyAoY2JfY2FsbGVkKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaF9zZW5kKTsKLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGhfcnRjcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRlc3RjbG9jayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXJ0cHNlc3Npb25fc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicnRwc2Vzc2lvbiIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9tdWx0aXBsZV9zc3JjX3JyKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X211bHRpcGxlX3NlbmRlcnNfcm91bmRyb2Jpbl9yYnMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50ZXJuYWxfc291cmNlc190aW1lb3V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlY2VpdmVfcnRjcF9hcHBfcGFja2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RvbnRfbG9ja19vbl9zdGF0cyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9pZ25vcmVfc3VzcGljaW91c19ieWUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocnRwc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy9ydHB2cDkuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHZwOS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjMwNjllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3J0cHZwOS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBQZXhpcCBBUwotICogICBAYXV0aG9yIFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svY2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0aGFybmVzcy5oPgotCi0jZGVmaW5lIFJUUF9WUDlfQ0FQU19TVFIgXAotICAiYXBwbGljYXRpb24veC1ydHAsbWVkaWE9dmlkZW8sZW5jb2RpbmctbmFtZT1WUDksY2xvY2stcmF0ZT05MDAwMCxwYXlsb2FkPTk2IgotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RlcGF5X2ZsZXhpYmxlX21vZGUpCi17Ci0gIC8qIGItYml0LCBlLWJpdCwgZi1iaXQgYW5kIG1hcmtlciBiaXQgc2V0ICovCi0gIC8qIEZpcnN0IHBhY2tldCBvZiBmaXJzdCBmcmFtZSwgaGFuZGNyYWZ0ZWQgdG8gYWxzbyBzZXQgdGhlIGUtYml0IGFuZCBtYXJrZXIKLSAgICogYml0IGluIGFkZGl0aW9uIHRvIGNoYW5naW5nIHRoZSBzZXFudW0gKi8KLSAgZ3VpbnQ4IGludHJhW10gPSB7Ci0gICAgMHg4MCwgMHhmNCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhiNSwgMHhiZSwgMHgzMiwgMHhiMSwgMHgwMSwgMHg2NCwgMHhkMSwKLSAgICAweGJjLCAweDk4LCAweGJmLCAweDAwLCAweDgzLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDc3LCAweGYwLCAweDQzLAotICAgIDB4NzEsIDB4ZDgsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4NjYsIDB4ODAsIDB4NjAsIDB4MGUsIDB4ZjAsIDB4NWYsIDB4ZmQsCi0gIH07Ci0gIC8qIGItYml0LCBlLWJpdCwgcC1iaXQsIGYtYml0IGFuZCBtYXJrZXIgYml0IHNldCAqLwotICAvKiBGaXJzdCBwYWNrZXQgb2Ygc2Vjb25kIGZyYW1lLCBoYW5kY3JhZnRlZCB0byBhbHNvIHNldCB0aGUgZS1iaXQgYW5kCi0gICAqIG1hcmtlciBiaXQgaW4gYWRkaXRpb24gdG8gY2hhbmdpbmcgdGhlIHNlcW51bSAqLwotICBndWludDggaW50ZXJbXSA9IHsKLSAgICAweDgwLCAweGY0LCAweDAwLCAweDAxLCAweDQ5LCAweGI2LCAweDAyLCAweGMwLCAweGIxLCAweDAxLCAweDY0LCAweGQxLAotICAgIDB4ZmMsIDB4OTgsIDB4YzAsIDB4MDAsIDB4MDIsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDksIDB4M2YsIDB4MWMsIDB4MTIsCi0gICAgMHgwZSwgMHgwYywgMHhkMCwgMHgxYiwgMHhhNywgMHg4MCwgMHg4MCwgMHhiMCwgMHgxOCwgMHgwZiwgMHhkYSwgMHgxMSwKLSAgfTsKLQotICBHc3RIYXJuZXNzICpoID0gZ3N0X2hhcm5lc3NfbmV3ICgicnRwdnA5ZGVwYXkiKTsKLSAgZ3N0X2hhcm5lc3Nfc2V0X3NyY19jYXBzX3N0ciAoaCwgUlRQX1ZQOV9DQVBTX1NUUik7Ci0KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksCi0gICAgICAgICAgaW50cmEsIHNpemVvZiAoaW50cmEpLCAwLCBzaXplb2YgKGludHJhKSwgTlVMTCwgTlVMTCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgxLCBnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfcHVzaCAoaCwgZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZF9mdWxsIChHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFksCi0gICAgICAgICAgaW50ZXIsIHNpemVvZiAoaW50ZXIpLCAwLCBzaXplb2YgKGludGVyKSwgTlVMTCwgTlVMTCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgyLCBnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSk7Ci0KLSAgZ3N0X2hhcm5lc3NfdGVhcmRvd24gKGgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RlcGF5X25vbl9mbGV4aWJsZV9tb2RlKQotewotICAvKiBiLWJpdCwgZS1iaXQgYW5kICBtYXJrZXIgYml0IHNldC4gZi1iaXQgTk9UIHNldCAqLwotICAvKiBGaXJzdCBwYWNrZXQgb2YgZmlyc3QgZnJhbWUsIGhhbmRjcmFmdGVkIHRvIGFsc28gc2V0IHRoZSBlLWJpdCBhbmQgbWFya2VyCi0gICAqIGJpdCBpbiBhZGRpdGlvbiB0byBjaGFuZ2luZyB0aGUgc2VxbnVtICovCi0gIGd1aW50OCBpbnRyYVtdID0gewotICAgIDB4ODAsIDB4ZjQsIDB4MDAsIDB4MDAsIDB4NDksIDB4ODgsIDB4ZDksIDB4ZjgsIDB4YTAsIDB4NmMsIDB4NjUsIDB4NmMsCi0gICAgMHg4YywgMHg5OCwgMHhjMCwgMHg4NywgMHgwMSwgMHgwMiwgMHg0OSwgMHgzZiwgMHgxYywgMHgxMiwgMHgwZSwgMHgwYywKLSAgICAweGQwLCAweDFiLCAweGI5LCAweDgwLCAweDgwLCAweGIwLCAweDE4LCAweDBmLCAweGE2LCAweDRkLCAweDAxLCAweGE1Ci0gIH07Ci0gIC8qIGItYml0LCBlLWJpdCwgcC1iaXQgIGFuZCBtYXJrZXIgYml0IHNldC4gZi1iaXQgTk9UIHNldCAqLwotICAvKiBGaXJzdCBwYWNrZXQgb2Ygc2Vjb25kIGZyYW1lLCBoYW5kY3JhZnRlZCB0byBhbHNvIHNldCB0aGUgZS1iaXQgYW5kCi0gICAqIG1hcmtlciBiaXQgaW4gYWRkaXRpb24gdG8gY2hhbmdpbmcgdGhlIHNlcW51bSAqLwotICBndWludDggaW50ZXJbXSA9IHsKLSAgICAweDgwLCAweGY0LCAweDAwLCAweDAxLCAweDQ5LCAweDg4LCAweGU1LCAweDM4LCAweGEwLCAweDZjLCAweDY1LCAweDZjLAotICAgIDB4Y2MsIDB4OTgsIDB4YzEsIDB4ODcsIDB4MDEsIDB4MDIsIDB4NDksIDB4M2YsIDB4MWMsIDB4MTIsIDB4MGUsIDB4MGMsCi0gICAgMHhkMCwgMHgxYiwgMHg5NywgMHg4MCwgMHg4MCwgMHhiMCwgMHgxOCwgMHgwZiwgMHg4YSwgMHg5ZiwgMHgwMSwgMHhiYwotICB9OwotCi0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXcgKCJydHB2cDlkZXBheSIpOwotICBnc3RfaGFybmVzc19zZXRfc3JjX2NhcHNfc3RyIChoLCBSVFBfVlA5X0NBUFNfU1RSKTsKLQotICBnc3RfaGFybmVzc19wdXNoIChoLCBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgICAgICBpbnRyYSwgc2l6ZW9mIChpbnRyYSksIDAsIHNpemVvZiAoaW50cmEpLCBOVUxMLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDEsIGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpKTsKLQotICBnc3RfaGFybmVzc19wdXNoIChoLCBnc3RfYnVmZmVyX25ld193cmFwcGVkX2Z1bGwgKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSwKLSAgICAgICAgICBpbnRlciwgc2l6ZW9mIChpbnRlciksIDAsIHNpemVvZiAoaW50ZXIpLCBOVUxMLCBOVUxMKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKDIsIGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpKTsKLQotICBnc3RfaGFybmVzc190ZWFyZG93biAoaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi0KLXN0YXRpYyBTdWl0ZSAqCi1ydHB2cDlfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgicnRwdnA5Iik7Ci0gIFRDYXNlICp0Y19jaGFpbjsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsICh0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoInZwOWRlcGF5IikpKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlcGF5X2ZsZXhpYmxlX21vZGUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVwYXlfbm9uX2ZsZXhpYmxlX21vZGUpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAocnRwdnA5KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NoYXBld2lwZS5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvc2hhcGV3aXBlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTAwODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvc2hhcGV3aXBlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFNlYmFzdGlhbiBEcsO2Z2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1nYm9vbGVhbiBoYXZlX2VvcyA9IEZBTFNFOwotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15dmlkZW9zcmNwYWQsICpteW1hc2tzcmNwYWQsICpteXNpbmtwYWQ7Ci0KLQotI2RlZmluZSBTSEFQRVdJUEVfVklERU9fQ0FQU19TVFJJTkcgICAgXAotICAgICJ2aWRlby94LXJhdywgIiBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpQVlVViwgIiBcCi0gICAgIndpZHRoID0gNDAwLCAiIFwKLSAgICAiaGVpZ2h0ID0gNDAwLCAiIFwKLSAgICAiZnJhbWVyYXRlID0gMC8xIgotCi0jZGVmaW5lIFNIQVBFV0lQRV9NQVNLX0NBUFNfU1RSSU5HICAgIFwKLSAgICAidmlkZW8veC1yYXcsICIgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKUdSQVk4LCAiIFwKLSAgICAid2lkdGggPSA0MDAsICIgXAotICAgICJoZWlnaHQgPSA0MDAsICIgXAotICAgICJmcmFtZXJhdGUgPSAwLzEiCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNIQVBFV0lQRV9WSURFT19DQVBTX1NUUklORykKLSAgICApOwotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvc3JjdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJ2aWRlb3NyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTSEFQRVdJUEVfVklERU9fQ0FQU19TVFJJTkcpCi0gICAgKTsKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBtYXNrc3JjdGVtcGxhdGUgPQotR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJtYXNrc3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNIQVBFV0lQRV9NQVNLX0NBUFNfU1RSSU5HKQotICAgICk7Ci0KLQotc3RhdGljIEdzdEJ1ZmZlciAqb3V0cHV0ID0gTlVMTDsKLQotc3RhdGljIEdzdEZsb3dSZXR1cm4KLW9uX2NoYWluIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0QnVmZmVyICogYnVmZmVyKQotewotICBnX3JldHVybl92YWxfaWZfZmFpbCAob3V0cHV0ID09IE5VTEwsIEdTVF9GTE9XX0VSUk9SKTsKLQotICBvdXRwdXQgPSBidWZmZXI7Ci0gIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ2VuZXJhbCkKLXsKLSAgR3N0RWxlbWVudCAqc2hhcGV3aXBlLCAqdmlkZW9zcmMsICptYXNrc3JjLCAqc2luaywgKmJpbjsKLSAgR3N0UGFkICpwOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RCdWZmZXIgKm1hc2ssICppbnB1dDsKLSAgZ3VpbnQgaSwgajsKLSAgZ3VpbnQ4ICpkYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICBiaW4gPSBnc3RfYmluX25ldyAoIm15c2hhcGV3aXBlIik7Ci0gIHZpZGVvc3JjID0gZ3N0X2Jpbl9uZXcgKCJteXZpZGVvc3JjIik7Ci0gIG1hc2tzcmMgPSBnc3RfYmluX25ldyAoIm15bWFza3NyYyIpOwotICBzaW5rID0gZ3N0X2Jpbl9uZXcgKCJteXNpbmsiKTsKLSAgc2hhcGV3aXBlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgic2hhcGV3aXBlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzaGFwZXdpcGUgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHZpZGVvc3JjLCBtYXNrc3JjLCBzaGFwZXdpcGUsIHNpbmssIE5VTEwpOwotCi0gIG15dmlkZW9zcmNwYWQgPQotICAgICAgZ3N0X3BhZF9uZXdfZnJvbV9zdGF0aWNfdGVtcGxhdGUgKCZ2aWRlb3NyY3RlbXBsYXRlLCAidmlkZW9zcmMiKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAodmlkZW9zcmMsIG15dmlkZW9zcmNwYWQpOwotCi0gIG15bWFza3NyY3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmbWFza3NyY3RlbXBsYXRlLCAibWFza3NyYyIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChtYXNrc3JjLCBteW1hc2tzcmNwYWQpOwotCi0gIG15c2lua3BhZCA9IGdzdF9wYWRfbmV3X2Zyb21fc3RhdGljX3RlbXBsYXRlICgmc2lua3RlbXBsYXRlLCAic2luayIpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChzaW5rLCBteXNpbmtwYWQpOwotICBnc3RfcGFkX3NldF9jaGFpbl9mdW5jdGlvbiAobXlzaW5rcGFkLCBvbl9jaGFpbik7Ci0KLSAgcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaGFwZXdpcGUsICJ2aWRlb19zaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX2xpbmsgKG15dmlkZW9zcmNwYWQsIHApID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHApOwotICBwID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNoYXBld2lwZSwgIm1hc2tfc2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChteW1hc2tzcmNwYWQsIHApID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHApOwotICBwID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNoYXBld2lwZSwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9saW5rIChwLCBteXNpbmtwYWQpID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFNIQVBFV0lQRV9NQVNLX0NBUFNfU1RSSU5HKTsKLSAgZ3N0X2NoZWNrX3NldHVwX2V2ZW50cyAobXltYXNrc3JjcGFkLCBtYXNrc3JjLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChTSEFQRVdJUEVfVklERU9fQ0FQU19TVFJJTkcpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXZpZGVvc3JjcGFkLCB2aWRlb3NyYywgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIG1hc2sgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDQwMCAqIDQwMCk7Ci0gIGdzdF9idWZmZXJfbWFwIChtYXNrLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgNDAwOyBqKyspIHsKLSAgICAgIGlmIChpIDwgMTAwICYmIGogPCAxMDApCi0gICAgICAgIGRhdGFbMF0gPSAwOwotICAgICAgZWxzZSBpZiAoaSA8IDIwMCAmJiBqIDwgMjAwKQotICAgICAgICBkYXRhWzBdID0gODU7Ci0gICAgICBlbHNlIGlmIChpIDwgMzAwICYmIGogPCAzMDApCi0gICAgICAgIGRhdGFbMF0gPSAxNzA7Ci0gICAgICBlbHNlCi0gICAgICAgIGRhdGFbMF0gPSAyNTQ7Ci0gICAgICBkYXRhKys7Ci0gICAgfQotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG1hc2ssICZtYXApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15bWFza3NyY3BhZCwgbWFzaykgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGlucHV0ID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICg0MDAgKiA0MDAgKiA0KTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGlucHV0LCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgNDAwOyBqKyspIHsKLSAgICAgIC8qIFRoaXMgaXMgZ3JlZW4gKi8KLSAgICAgIGRhdGFbMF0gPSAyNTU7ICAgICAgICAgICAgLyogQSAqLwotICAgICAgZGF0YVsxXSA9IDE3MzsgICAgICAgICAgICAvKiBZICovCi0gICAgICBkYXRhWzJdID0gNDI7ICAgICAgICAgICAgIC8qIFUgKi8KLSAgICAgIGRhdGFbM10gPSAyNjsgICAgICAgICAgICAgLyogViAqLwotICAgICAgZGF0YSArPSA0OwotICAgIH0KLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbnB1dCwgJm1hcCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2hhcGV3aXBlKSwgInBvc2l0aW9uIiwgMC4wLCBOVUxMKTsKLSAgb3V0cHV0ID0gTlVMTDsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXl2aWRlb3NyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoaW5wdXQpKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChvdXRwdXQgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChvdXRwdXQsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0MDA7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCA0MDA7IGorKykgewotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVswXSwgMjU1KTsgICAgLyogQSAqLwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVsxXSwgMTczKTsgICAgLyogWSAqLwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVsyXSwgNDIpOyAgICAgLyogVSAqLwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVszXSwgMjYpOyAgICAgLyogViAqLwotICAgICAgZGF0YSArPSA0OwotICAgIH0KLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRwdXQsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRwdXQpOwotICBvdXRwdXQgPSBOVUxMOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNoYXBld2lwZSksICJwb3NpdGlvbiIsIDAuMSwgTlVMTCk7Ci0gIG91dHB1dCA9IE5VTEw7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15dmlkZW9zcmNwYWQsCi0gICAgICAgICAgZ3N0X2J1ZmZlcl9yZWYgKGlucHV0KSkgPT0gR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAob3V0cHV0ICE9IE5VTEwpOwotICBnc3RfYnVmZmVyX21hcCAob3V0cHV0LCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICBkYXRhID0gbWFwLmRhdGE7Ci0gIGZvciAoaSA9IDA7IGkgPCA0MDA7IGkrKykgewotICAgIGZvciAoaiA9IDA7IGogPCA0MDA7IGorKykgewotICAgICAgaWYgKGkgPCAxMDAgJiYgaiA8IDEwMCkgewotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzBdLCAwKTsgICAgLyogQSAqLwotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzFdLCAxNzMpOyAgLyogWSAqLwotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzJdLCA0Mik7ICAgLyogVSAqLwotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzNdLCAyNik7ICAgLyogViAqLwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVswXSwgMjU1KTsgIC8qIEEgKi8KLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVsxXSwgMTczKTsgIC8qIFkgKi8KLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVsyXSwgNDIpOyAgIC8qIFUgKi8KLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVszXSwgMjYpOyAgIC8qIFYgKi8KLSAgICAgIH0KLSAgICAgIGRhdGEgKz0gNDsKLSAgICB9Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0cHV0LCAmbWFwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0cHV0KTsKLSAgb3V0cHV0ID0gTlVMTDsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaGFwZXdpcGUpLCAicG9zaXRpb24iLCAwLjM0LCBOVUxMKTsKLSAgb3V0cHV0ID0gTlVMTDsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXl2aWRlb3NyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoaW5wdXQpKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChvdXRwdXQgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChvdXRwdXQsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDQwMDsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IDQwMDsgaisrKSB7Ci0gICAgICBpZiAoaSA8IDIwMCAmJiBqIDwgMjAwKSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMF0sIDApOyAgICAvKiBBICovCi0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMV0sIDE3Myk7ICAvKiBZICovCi0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMl0sIDQyKTsgICAvKiBVICovCi0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbM10sIDI2KTsgICAvKiBWICovCi0gICAgICB9IGVsc2UgewotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzBdLCAyNTUpOyAgLyogQSAqLwotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzFdLCAxNzMpOyAgLyogWSAqLwotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzJdLCA0Mik7ICAgLyogVSAqLwotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzNdLCAyNik7ICAgLyogViAqLwotICAgICAgfQotICAgICAgZGF0YSArPSA0OwotICAgIH0KLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRwdXQsICZtYXApOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRwdXQpOwotICBvdXRwdXQgPSBOVUxMOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNoYXBld2lwZSksICJwb3NpdGlvbiIsIDAuNjcsIE5VTEwpOwotICBvdXRwdXQgPSBOVUxMOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXZpZGVvc3JjcGFkLAotICAgICAgICAgIGdzdF9idWZmZXJfcmVmIChpbnB1dCkpID09IEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKG91dHB1dCAhPSBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dHB1dCwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZGF0YSA9IG1hcC5kYXRhOwotICBmb3IgKGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKLSAgICBmb3IgKGogPSAwOyBqIDwgNDAwOyBqKyspIHsKLSAgICAgIGlmIChpIDwgMzAwICYmIGogPCAzMDApIHsKLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVswXSwgMCk7ICAgIC8qIEEgKi8KLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVsxXSwgMTczKTsgIC8qIFkgKi8KLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVsyXSwgNDIpOyAgIC8qIFUgKi8KLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YVszXSwgMjYpOyAgIC8qIFYgKi8KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMF0sIDI1NSk7ICAvKiBBICovCi0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMV0sIDE3Myk7ICAvKiBZICovCi0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMl0sIDQyKTsgICAvKiBVICovCi0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbM10sIDI2KTsgICAvKiBWICovCi0gICAgICB9Ci0gICAgICBkYXRhICs9IDQ7Ci0gICAgfQotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dHB1dCwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dHB1dCk7Ci0gIG91dHB1dCA9IE5VTEw7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2hhcGV3aXBlKSwgInBvc2l0aW9uIiwgMS4wLCBOVUxMKTsKLSAgb3V0cHV0ID0gTlVMTDsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXl2aWRlb3NyY3BhZCwKLSAgICAgICAgICBnc3RfYnVmZmVyX3JlZiAoaW5wdXQpKSA9PSBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChvdXRwdXQgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfbWFwIChvdXRwdXQsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gIGRhdGEgPSBtYXAuZGF0YTsKLSAgZm9yIChpID0gMDsgaSA8IDQwMDsgaSsrKSB7Ci0gICAgZm9yIChqID0gMDsgaiA8IDQwMDsgaisrKSB7Ci0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzBdLCAwKTsgICAgICAvKiBBICovCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzFdLCAxNzMpOyAgICAvKiBZICovCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzJdLCA0Mik7ICAgICAvKiBVICovCi0gICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChkYXRhWzNdLCAyNik7ICAgICAvKiBWICovCi0gICAgICBkYXRhICs9IDQ7Ci0gICAgfQotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKG91dHB1dCwgJm1hcCk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dHB1dCk7Ci0gIG91dHB1dCA9IE5VTEw7Ci0KLSAgZ3N0X2J1ZmZlcl91bnJlZiAoaW5wdXQpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBwID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNoYXBld2lwZSwgInZpZGVvX3NpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfdW5saW5rIChteXZpZGVvc3JjcGFkLCBwKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHApOwotICBwID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNoYXBld2lwZSwgIm1hc2tfc2luayIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF91bmxpbmsgKG15bWFza3NyY3BhZCwgcCkpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwKTsKLSAgcCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaGFwZXdpcGUsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfdW5saW5rIChwLCBteXNpbmtwYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotc2hhcGV3aXBlX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInNoYXBld2lwZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMTgwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dlbmVyYWwpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoc2hhcGV3aXBlKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9zb3VwaHR0cHNyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjIzMWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NvdXBodHRwc3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdHMgZm9yIHRoZSBzb3VwaHR0cHNyYyBlbGVtZW50Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4IFdvdXRlciBDbG9ldGVucyA8d291dGVyQG1pbmQuYmU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMywgWGltaWFuLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgotCi0jZGVmaW5lIFNPVVBfVkVSU0lPTl9NSU5fUkVRVUlSRUQgKFNPVVBfVkVSU0lPTl8yXzQwKQotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0jaWYgIWRlZmluZWQoU09VUF9NSU5PUl9WRVJTSU9OKSB8fCBTT1VQX01JTk9SX1ZFUlNJT04gPCA0NAotI2RlZmluZSBTb3VwU3RhdHVzIFNvdXBLbm93blN0YXR1c0NvZGUKLSNlbmRpZgotCi0KLWdib29sZWFuIHJlZGlyZWN0ID0gVFJVRTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKipjb29raWVzID0gTlVMTDsKLQotLyogVmFyaWFibGVzIGZvciBhdXRoZW50aWNhdGlvbiB0ZXN0cyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfaWQgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfcHcgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIgKmdvb2RfdXNlciA9ICJnb29kX3VzZXIiOwotc3RhdGljIGNvbnN0IGNoYXIgKmJhZF91c2VyID0gImJhZF91c2VyIjsKLXN0YXRpYyBjb25zdCBjaGFyICpnb29kX3B3ID0gImdvb2RfcHciOwotc3RhdGljIGNvbnN0IGNoYXIgKmJhZF9wdyA9ICJiYWRfcHciOwotc3RhdGljIGNvbnN0IGNoYXIgKnJlYWxtID0gIlNPVVBIVFRQU1JDX1JFQUxNIjsKLXN0YXRpYyBjb25zdCBjaGFyICpiYXNpY19hdXRoX3BhdGggPSAiL2Jhc2ljX2F1dGgiOwotc3RhdGljIGNvbnN0IGNoYXIgKmRpZ2VzdF9hdXRoX3BhdGggPSAiL2RpZ2VzdF9hdXRoIjsKLQotc3RhdGljIGd1aW50IGdldF9wb3J0X2Zyb21fc2VydmVyIChTb3VwU2VydmVyICogc2VydmVyKTsKLXN0YXRpYyBTb3VwU2VydmVyICpydW5fc2VydmVyIChnYm9vbGVhbiB1c2VfaHR0cHMpOwotCi1zdGF0aWMgdm9pZAotaGFuZG9mZl9jYiAoR3N0RWxlbWVudCAqIGZha2VzaW5rLCBHc3RCdWZmZXIgKiBidWYsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RCdWZmZXIgKiogcF9vdXRidWYpCi17Ci0gIEdTVF9MT0cgKCJoYW5kb2ZmLCBidWYgPSAlcCIsIGJ1Zik7Ci0gIGlmICgqcF9vdXRidWYgPT0gTlVMTCkKLSAgICAqcF9vdXRidWYgPSBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1iYXNpY19hdXRoX2NiIChTb3VwQXV0aERvbWFpbiAqIGRvbWFpbiwgU291cE1lc3NhZ2UgKiBtc2csCi0gICAgY29uc3QgY2hhciAqdXNlcm5hbWUsIGNvbnN0IGNoYXIgKnBhc3N3b3JkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIC8qIFRoZXJlIGlzIG9ubHkgb25lIGdvb2QgbG9naW4gZm9yIHRlc3RpbmcgKi8KLSAgcmV0dXJuIChzdHJjbXAgKHVzZXJuYW1lLCBnb29kX3VzZXIpID09IDApCi0gICAgICAmJiAoc3RyY21wIChwYXNzd29yZCwgZ29vZF9wdykgPT0gMCk7Ci19Ci0KLQotc3RhdGljIGNoYXIgKgotZGlnZXN0X2F1dGhfY2IgKFNvdXBBdXRoRG9tYWluICogZG9tYWluLCBTb3VwTWVzc2FnZSAqIG1zZywKLSAgICBjb25zdCBjaGFyICp1c2VybmFtZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICAvKiBUaGVyZSBpcyBvbmx5IG9uZSBnb29kIGxvZ2luIGZvciB0ZXN0aW5nICovCi0gIGlmIChzdHJjbXAgKHVzZXJuYW1lLCBnb29kX3VzZXIpID09IDApCi0gICAgcmV0dXJuIHNvdXBfYXV0aF9kb21haW5fZGlnZXN0X2VuY29kZV9wYXNzd29yZCAoZ29vZF91c2VyLCByZWFsbSwgZ29vZF9wdyk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLXJ1bl90ZXN0IChnYm9vbGVhbiB1c2VfaHR0cHMsIGNvbnN0IGdjaGFyICogcGF0aCwgZ2ludCBleHBlY3RlZCkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RFbGVtZW50ICpwaXBlLCAqc3JjLCAqc2luazsKLSAgR3N0QnVmZmVyICpidWYgPSBOVUxMOwotICBHc3RNZXNzYWdlICptc2c7Ci0gIGdjaGFyICp1cmw7Ci0gIGdib29sZWFuIHJlcyA9IEZBTFNFOwotICBTb3VwU2VydmVyICpzZXJ2ZXI7Ci0gIGd1aW50IHBvcnQ7Ci0KLSAgc2VydmVyID0gcnVuX3NlcnZlciAodXNlX2h0dHBzKTsKLSAgaWYgKHNlcnZlciA9PSBOVUxMKSB7Ci0gICAgZ19wcmludCAoIkZhaWxlZCB0byBzdGFydCB1cCAlcyBzZXJ2ZXIiLCB1c2VfaHR0cHMgPyAiSFRUUFMiIDogIkhUVFAiKTsKLSAgICAvKiBza2lwIHRoaXMgdGVzdCAqLwotICAgIHJldHVybiBUUlVFOwotICB9Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInNvdXBodHRwc3JjIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlKSwgc3JjKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykpOwotCi0gIHBvcnQgPSBnZXRfcG9ydF9mcm9tX3NlcnZlciAoc2VydmVyKTsKLSAgdXJsID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6Ly8xMjcuMC4wLjE6JXUlcyIsCi0gICAgICB1c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiLCBwb3J0LCBwYXRoKTsKLSAgZmFpbF91bmxlc3MgKHVybCAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJsb2NhdGlvbiIsIHVybCwgTlVMTCk7Ci0gIGdfZnJlZSAodXJsKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImF1dG9tYXRpYy1yZWRpcmVjdCIsIHJlZGlyZWN0LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzcmMsICJzc2wtY2EtZmlsZSIsIEdTVF9URVNUX0ZJTEVTX1BBVEggIi90ZXN0LWNlcnQucGVtIiwgTlVMTCk7Ci0gIGlmIChjb29raWVzICE9IE5VTEwpCi0gICAgZ19vYmplY3Rfc2V0IChzcmMsICJjb29raWVzIiwgY29va2llcywgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc2luaywgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChzaW5rLCAicHJlcm9sbC1oYW5kb2ZmIiwgR19DQUxMQkFDSyAoaGFuZG9mZl9jYiksICZidWYpOwotCi0gIGlmICh1c2VyX2lkICE9IE5VTEwpCi0gICAgZ19vYmplY3Rfc2V0IChzcmMsICJ1c2VyLWlkIiwgdXNlcl9pZCwgTlVMTCk7Ci0gIGlmICh1c2VyX3B3ICE9IE5VTEwpCi0gICAgZ19vYmplY3Rfc2V0IChzcmMsICJ1c2VyLXB3IiwgdXNlcl9wdywgTlVMTCk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgR1NUX0RFQlVHICgiZmFpbGVkIHRvIHN0YXJ0IHVwIHNvdXAgaHR0cCBzcmMsIHJldCA9ICVkIiwgcmV0KTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAotICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpIHsKLSAgICBnY2hhciAqZGVidWcgPSBOVUxMOwotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICBnaW50IHJjID0gLTE7Ci0KLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCAmZGVidWcpOwotICAgIEdTVF9JTkZPICgiZXJyb3I6ICVzIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeCAoZXJyLT5tZXNzYWdlLCAiTm90IEZvdW5kIikpCi0gICAgICByYyA9IDQwNDsKLSAgICBlbHNlIGlmIChnX3N0cl9oYXNfc3VmZml4IChlcnItPm1lc3NhZ2UsICJGb3JiaWRkZW4iKSkKLSAgICAgIHJjID0gNDAzOwotICAgIGVsc2UgaWYgKGdfc3RyX2hhc19zdWZmaXggKGVyci0+bWVzc2FnZSwgIlVuYXV0aG9yaXplZCIpKQotICAgICAgcmMgPSA0MDE7Ci0gICAgZWxzZSBpZiAoZ19zdHJfaGFzX3N1ZmZpeCAoZXJyLT5tZXNzYWdlLCAiRm91bmQiKSkKLSAgICAgIHJjID0gMzAyOwotICAgIEdTVF9JTkZPICgiZGVidWc6ICVzIiwgZGVidWcpOwotICAgIC8qIHNob3VsZCBub3QndmUgZ290dGVuIGFueSBvdXRwdXQgaW4gY2FzZSBvZiBhIDQweCBlcnJvci4gV2FpdCBhIGJpdAotICAgICAqIHRvIGdpdmUgdGhlIHN0cmVhbWluZyB0aHJlYWQgYSBjaGFuY2UgdG8gcHVzaCBvdXQgYSBidWZmZXIgYW5kIHRyaWdnZXIKLSAgICAgKiBvdXIgY2FsbGJhY2sgYmVmb3JlIHNodXR0aW5nIGRvd24gdGhlIHBpcGVsaW5lICovCi0gICAgZ191c2xlZXAgKEdfVVNFQ19QRVJfU0VDIC8gMik7Ci0gICAgZmFpbF91bmxlc3MgKGJ1ZiA9PSBOVUxMKTsKLSAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgR1NUX0RFQlVHICgiR290IEhUVFAgZXJyb3IgJXUsIGV4cGVjdGVkICV1IiwgcmMsIGV4cGVjdGVkKTsKLSAgICByZXMgPSAocmMgPT0gZXhwZWN0ZWQpOwotICAgIGdvdG8gZG9uZTsKLSAgfQotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLQotICAvKiBkb24ndCB3YWl0IGZvciBtb3JlIHRoYW4gMTAgc2Vjb25kcyAqLwotICByZXQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGUsIE5VTEwsIE5VTEwsIDEwICogR1NUX1NFQ09ORCk7Ci0gIEdTVF9MT0cgKCJyZXQgPSAldSIsIHJldCk7Ci0KLSAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgLyogd2Ugd2FudCB0byB0ZXN0IHRoZSBidWZmZXIgb2Zmc2V0LCBub3RoaW5nIGVsc2U7IGlmIHRoZXJlJ3MgYSBmYWlsdXJlCi0gICAgICogaXQgbWlnaHQgYmUgZm9yIGxvdHMgb2YgcmVhc29ucyAobm8gbmV0d29yayBjb25uZWN0aW9uLCB3aGF0ZXZlciksIHdlJ3JlCi0gICAgICogbm90IGludGVyZXN0ZWQgaW4gdGhvc2UgKi8KLSAgICBHU1RfREVCVUcgKCJkaWRuJ3QgbWFuYWdlIHRvIGdldCBkYXRhIHdpdGhpbiAxMCBzZWNvbmRzLCBza2lwcGluZyB0ZXN0Iik7Ci0gICAgcmVzID0gVFJVRTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICBHU1RfREVCVUcgKCJidWZmZXIgb2Zmc2V0ID0gJSIgR19HVUlOVDY0X0ZPUk1BVCwgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZikpOwotCi0gIC8qIGZpcnN0IGJ1ZmZlciBzaG91bGQgaGF2ZSBhIDAgb2Zmc2V0ICovCi0gIGZhaWxfdW5sZXNzIChHU1RfQlVGRkVSX09GRlNFVCAoYnVmKSA9PSAwKTsKLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgcmVzID0gKGV4cGVjdGVkID09IDApOwotCi1kb25lOgotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2VydmVyKTsKLSAgcmV0dXJuIHJlczsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZmlyc3RfYnVmZmVyX2hhc19vZmZzZXQpCi17Ci0gIGZhaWxfdW5sZXNzIChydW5fdGVzdCAoRkFMU0UsICIvIiwgMCkpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X25vdF9mb3VuZCkKLXsKLSAgZmFpbF91bmxlc3MgKHJ1bl90ZXN0IChGQUxTRSwgIi80MDQiLCA0MDQpKTsKLSAgZmFpbF91bmxlc3MgKHJ1bl90ZXN0IChGQUxTRSwgIi80MDQtd2l0aC1kYXRhIiwgNDA0KSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZm9yYmlkZGVuKQotewotICBmYWlsX3VubGVzcyAocnVuX3Rlc3QgKEZBTFNFLCAiLzQwMyIsIDQwMykpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlZGlyZWN0X25vKQotewotICByZWRpcmVjdCA9IEZBTFNFOwotICBmYWlsX3VubGVzcyAocnVuX3Rlc3QgKEZBTFNFLCAiLzMwMiIsIDMwMikpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlZGlyZWN0X3llcykKLXsKLSAgcmVkaXJlY3QgPSBUUlVFOwotICBmYWlsX3VubGVzcyAocnVuX3Rlc3QgKEZBTFNFLCAiLzMwMiIsIDApKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9odHRwcykKLXsKLSAgZmFpbF91bmxlc3MgKHJ1bl90ZXN0IChUUlVFLCAiLyIsIDApKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jb29raWVzKQotewotICBzdGF0aWMgY29uc3QgY2hhciAqYmlzY290dGlbXSA9IHsgImRlbGFjcmU9eXVtbWllIiwgImtvZWtqZT1sdSIsIE5VTEwgfTsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIGNvb2tpZXMgPSBiaXNjb3R0aTsKLSAgcmVzID0gcnVuX3Rlc3QgKEZBTFNFLCAiLyIsIDApOwotICBjb29raWVzID0gTlVMTDsKLSAgZmFpbF91bmxlc3MgKHJlcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZ29vZF91c2VyX2Jhc2ljX2F1dGgpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICB1c2VyX2lkID0gZ29vZF91c2VyOwotICB1c2VyX3B3ID0gZ29vZF9wdzsKLSAgcmVzID0gcnVuX3Rlc3QgKEZBTFNFLCBiYXNpY19hdXRoX3BhdGgsIDApOwotICBHU1RfREVCVUcgKCJCYXNpYyBBdXRoIHVzZXIgJXMgcGFzc3dvcmQgJXMgcmVzID0gJWQiLCB1c2VyX2lkLCB1c2VyX3B3LCByZXMpOwotICB1c2VyX2lkID0gdXNlcl9wdyA9IE5VTEw7Ci0gIGZhaWxfdW5sZXNzIChyZXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2JhZF91c2VyX2Jhc2ljX2F1dGgpCi17Ci0gIGdib29sZWFuIHJlczsKLQotICB1c2VyX2lkID0gYmFkX3VzZXI7Ci0gIHVzZXJfcHcgPSBnb29kX3B3OwotICByZXMgPSBydW5fdGVzdCAoRkFMU0UsIGJhc2ljX2F1dGhfcGF0aCwgNDAxKTsKLSAgR1NUX0RFQlVHICgiQmFzaWMgQXV0aCB1c2VyICVzIHBhc3N3b3JkICVzIHJlcyA9ICVkIiwgdXNlcl9pZCwgdXNlcl9wdywgcmVzKTsKLSAgdXNlcl9pZCA9IHVzZXJfcHcgPSBOVUxMOwotICBmYWlsX3VubGVzcyAocmVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9iYWRfcGFzc3dvcmRfYmFzaWNfYXV0aCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHVzZXJfaWQgPSBnb29kX3VzZXI7Ci0gIHVzZXJfcHcgPSBiYWRfcHc7Ci0gIHJlcyA9IHJ1bl90ZXN0IChGQUxTRSwgYmFzaWNfYXV0aF9wYXRoLCA0MDEpOwotICBHU1RfREVCVUcgKCJCYXNpYyBBdXRoIHVzZXIgJXMgcGFzc3dvcmQgJXMgcmVzID0gJWQiLCB1c2VyX2lkLCB1c2VyX3B3LCByZXMpOwotICB1c2VyX2lkID0gdXNlcl9wdyA9IE5VTEw7Ci0gIGZhaWxfdW5sZXNzIChyZXMpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dvb2RfdXNlcl9kaWdlc3RfYXV0aCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHVzZXJfaWQgPSBnb29kX3VzZXI7Ci0gIHVzZXJfcHcgPSBnb29kX3B3OwotICByZXMgPSBydW5fdGVzdCAoRkFMU0UsIGRpZ2VzdF9hdXRoX3BhdGgsIDApOwotICBHU1RfREVCVUcgKCJEaWdlc3QgQXV0aCB1c2VyICVzIHBhc3N3b3JkICVzIHJlcyA9ICVkIiwgdXNlcl9pZCwgdXNlcl9wdywgcmVzKTsKLSAgdXNlcl9pZCA9IHVzZXJfcHcgPSBOVUxMOwotICBmYWlsX3VubGVzcyAocmVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9iYWRfdXNlcl9kaWdlc3RfYXV0aCkKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotCi0gIHVzZXJfaWQgPSBiYWRfdXNlcjsKLSAgdXNlcl9wdyA9IGdvb2RfcHc7Ci0gIHJlcyA9IHJ1bl90ZXN0IChGQUxTRSwgZGlnZXN0X2F1dGhfcGF0aCwgNDAxKTsKLSAgR1NUX0RFQlVHICgiRGlnZXN0IEF1dGggdXNlciAlcyBwYXNzd29yZCAlcyByZXMgPSAlZCIsIHVzZXJfaWQsIHVzZXJfcHcsIHJlcyk7Ci0gIHVzZXJfaWQgPSB1c2VyX3B3ID0gTlVMTDsKLSAgZmFpbF91bmxlc3MgKHJlcyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYmFkX3Bhc3N3b3JkX2RpZ2VzdF9hdXRoKQotewotICBnYm9vbGVhbiByZXM7Ci0KLSAgdXNlcl9pZCA9IGdvb2RfdXNlcjsKLSAgdXNlcl9wdyA9IGJhZF9wdzsKLSAgcmVzID0gcnVuX3Rlc3QgKEZBTFNFLCBkaWdlc3RfYXV0aF9wYXRoLCA0MDEpOwotICBHU1RfREVCVUcgKCJEaWdlc3QgQXV0aCB1c2VyICVzIHBhc3N3b3JkICVzIHJlcyA9ICVkIiwgdXNlcl9pZCwgdXNlcl9wdywgcmVzKTsKLSAgdXNlcl9pZCA9IHVzZXJfcHcgPSBOVUxMOwotICBmYWlsX3VubGVzcyAocmVzKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ2Jvb2xlYW4gaWN5X2NhcHMgPSBGQUxTRTsKLQotc3RhdGljIHZvaWQKLWdvdF9idWZmZXIgKEdzdEVsZW1lbnQgKiBmYWtlc2luaywgR3N0QnVmZmVyICogYnVmLCBHc3RQYWQgKiBwYWQsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgLyogQ2FwcyBjYW4gYmUgYW55dGhpbmcgaWYgd2UgZG9uJ3QgZXhjZXB0IGljeSBjYXBzICovCi0gIGlmICghaWN5X2NhcHMpCi0gICAgcmV0dXJuOwotCi0gIC8qIE90aGVyd2lzZSB0aGV5IF9tdXN0XyBiZSAiYXBwbGljYXRpb24veC1pY3kiICovCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHBhZCk7Ci0gIGZhaWxfdW5sZXNzIChjYXBzICE9IE5VTEwpOwotICBzID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpLCAiYXBwbGljYXRpb24veC1pY3kiKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pY3lfc3RyZWFtKQotewotICBHc3RFbGVtZW50ICpwaXBlLCAqc3JjLCAqc2luazsKLQotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgcGlwZSA9IGdzdF9waXBlbGluZV9uZXcgKE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInNvdXBodHRwc3JjIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzcmMgIT0gTlVMTCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChzaW5rICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgImhhbmRvZmYiLCBHX0NBTExCQUNLIChnb3RfYnVmZmVyKSwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBzcmMpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZSksIHNpbmspOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoc3JjLCBzaW5rKSk7Ci0KLSAgLyogUmFkaW9ub215IEhvdDQwTXVzaWMgc2hvdXRjYXN0IHN0cmVhbSAqLwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwKLSAgICAgICJodHRwOi8vc3RyZWFtaW5nLnJhZGlvbm9teS5jb206ODAvSG90NDBNdXNpYyIsIE5VTEwpOwotCi0gIC8qIEVPUyBhZnRlciB0aGUgZmlyc3QgYnVmZmVyICovCi0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKLSAgaWN5X2NhcHMgPSBUUlVFOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgbXNnID0gZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLAotICAgICAgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIEdTVF9ERUJVRyAoInN1Y2Nlc3MsIHdlJ3JlIGRvbmUgaGVyZSIpOwotICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgTlVMTCk7Ci0gICAgICBHU1RfSU5GTyAoIkVycm9yIHdpdGggSUNZIG1wMyBzaG91dGNhc3Qgc3RyZWFtOiAlcyIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIGljeV9jYXBzID0gRkFMU0U7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1zb3VwaHR0cHNyY19zdWl0ZSAodm9pZCkKLXsKLSAgVENhc2UgKnRjX2NoYWluLCAqdGNfaW50ZXJuZXQ7Ci0gIFN1aXRlICpzOwotCi0gIC8qIHdlIGRvbid0IHN1cHBvcnQgZXhjZXB0aW9ucyBmcm9tIHRoZSBwcm94eSwgc28ganVzdCB1bnNldCB0aGUgZW52aXJvbm1lbnQKLSAgICogdmFyaWFibGUgLSBpbiBjYXNlIGl0J3Mgc2V0IGluIHRoZSB0ZXN0IGVudmlyb25tZW50IGl0IHdvdWxkIG90aGVyd2lzZQotICAgKiBwcmV2ZW50IHVzIGZyb20gY29ubmVjdGluZyB0byBsb2NhbGhvc3QgKGxpa2UgamVua2lucy5xYS51YnVudHUuY29tKSAqLwotICBnX3Vuc2V0ZW52ICgiaHR0cF9wcm94eSIpOwotCi0gIHMgPSBzdWl0ZV9jcmVhdGUgKCJzb3VwaHR0cHNyYyIpOwotICB0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLSAgdGNfaW50ZXJuZXQgPSB0Y2FzZV9jcmVhdGUgKCJpbnRlcm5ldCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmlyc3RfYnVmZmVyX2hhc19vZmZzZXQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVkaXJlY3RfeWVzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JlZGlyZWN0X25vKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X25vdF9mb3VuZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mb3JiaWRkZW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY29va2llcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9nb29kX3VzZXJfYmFzaWNfYXV0aCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYWRfdXNlcl9iYXNpY19hdXRoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2JhZF9wYXNzd29yZF9iYXNpY19hdXRoKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dvb2RfdXNlcl9kaWdlc3RfYXV0aCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYWRfdXNlcl9kaWdlc3RfYXV0aCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9iYWRfcGFzc3dvcmRfZGlnZXN0X2F1dGgpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaHR0cHMpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfaW50ZXJuZXQpOwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfaW50ZXJuZXQsIDI1MCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19pbnRlcm5ldCwgdGVzdF9pY3lfc3RyZWFtKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHNvdXBodHRwc3JjKTsKLQotc3RhdGljIHZvaWQKLWRvX2dldCAoU291cE1lc3NhZ2UgKiBtc2csIGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0gIGdib29sZWFuIHNlbmRfZXJyb3JfZG9jID0gRkFMU0U7Ci0gIGNoYXIgKnVyaTsKLQotICBpbnQgYnVmbGVuID0gNDA5NjsKLQotICBTb3VwU3RhdHVzIHN0YXR1cyA9IFNPVVBfU1RBVFVTX09LOwotCi0gIHVyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyAoc291cF9tZXNzYWdlX2dldF91cmkgKG1zZyksIEZBTFNFKTsKLSAgR1NUX0RFQlVHICgicmVxdWVzdDogXCIlc1wiIiwgdXJpKTsKLQotICBpZiAoIXN0cmNtcCAocGF0aCwgIi8zMDEiKSkKLSAgICBzdGF0dXMgPSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWTsKLSAgZWxzZSBpZiAoIXN0cmNtcCAocGF0aCwgIi8zMDIiKSkKLSAgICBzdGF0dXMgPSBTT1VQX1NUQVRVU19NT1ZFRF9URU1QT1JBUklMWTsKLSAgZWxzZSBpZiAoIXN0cmNtcCAocGF0aCwgIi8zMDciKSkKLSAgICBzdGF0dXMgPSBTT1VQX1NUQVRVU19URU1QT1JBUllfUkVESVJFQ1Q7Ci0gIGVsc2UgaWYgKCFzdHJjbXAgKHBhdGgsICIvNDAzIikpCi0gICAgc3RhdHVzID0gU09VUF9TVEFUVVNfRk9SQklEREVOOwotICBlbHNlIGlmICghc3RyY21wIChwYXRoLCAiLzQwNCIpKQotICAgIHN0YXR1cyA9IFNPVVBfU1RBVFVTX05PVF9GT1VORDsKLSAgZWxzZSBpZiAoIXN0cmNtcCAocGF0aCwgIi80MDQtd2l0aC1kYXRhIikpIHsKLSAgICBzdGF0dXMgPSBTT1VQX1NUQVRVU19OT1RfRk9VTkQ7Ci0gICAgc2VuZF9lcnJvcl9kb2MgPSBUUlVFOwotICB9Ci0KLSAgaWYgKFNPVVBfU1RBVFVTX0lTX1JFRElSRUNUSU9OIChzdGF0dXMpKSB7Ci0gICAgY2hhciAqcmVkaXJfdXJpOwotCi0gICAgcmVkaXJfdXJpID0gZ19zdHJkdXBfcHJpbnRmICgiJXMtcmVkaXJlY3RlZCIsIHVyaSk7Ci0gICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsIHJlZGlyX3VyaSk7Ci0gICAgZ19mcmVlIChyZWRpcl91cmkpOwotICB9Ci0gIGlmIChzdGF0dXMgIT0gKFNvdXBTdGF0dXMpIFNPVVBfU1RBVFVTX09LICYmICFzZW5kX2Vycm9yX2RvYykKLSAgICBnb3RvIGxlYXZlOwotCi0gIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICBjaGFyICpidWY7Ci0KLSAgICBidWYgPSBnX21hbGxvYyAoYnVmbGVuKTsKLSAgICBtZW1zZXQgKGJ1ZiwgMCwgYnVmbGVuKTsKLSAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwKLSAgICAgICAgYnVmLCBidWZsZW4pOwotICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEICovCi0KLSAgICBjaGFyICpsZW5ndGg7Ci0KLSAgICAvKiBXZSBjb3VsZCBqdXN0IHVzZSB0aGUgc2FtZSBjb2RlIGZvciBib3RoIEdFVCBhbmQKLSAgICAgKiBIRUFELiBCdXQgd2UnbGwgb3B0aW1pemUgYW5kIGF2b2lkIHRoZSBleHRyYQotICAgICAqIG1hbGxvYy4KLSAgICAgKi8KLSAgICBsZW5ndGggPSBnX3N0cmR1cF9wcmludGYgKCIlbHUiLCAoZ3Vsb25nKSBidWZsZW4pOwotICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAotICAgICAgICAiQ29udGVudC1MZW5ndGgiLCBsZW5ndGgpOwotICAgIGdfZnJlZSAobGVuZ3RoKTsKLSAgfQotCi1sZWF2ZToKLSAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1zZywgc3RhdHVzKTsKLSAgZ19mcmVlICh1cmkpOwotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfaGVhZGVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR1NUX0RFQlVHICgiaGVhZGVyOiAlczogJXMiLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2ZXIgKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlICogbXNnLAotICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKiBxdWVyeSwKLSAgICBTb3VwQ2xpZW50Q29udGV4dCAqIGNvbnRleHQsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdTVF9ERUJVRyAoIiVzICVzIEhUVFAvMS4lZCIsIG1zZy0+bWV0aG9kLCBwYXRoLAotICAgICAgc291cF9tZXNzYWdlX2dldF9odHRwX3ZlcnNpb24gKG1zZykpOwotICBzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoIChtc2ctPnJlcXVlc3RfaGVhZGVycywgcHJpbnRfaGVhZGVyLCBOVUxMKTsKLSAgaWYgKG1zZy0+cmVxdWVzdF9ib2R5LT5sZW5ndGgpCi0gICAgR1NUX0RFQlVHICgiJXMiLCBtc2ctPnJlcXVlc3RfYm9keS0+ZGF0YSk7Ci0KLSAgaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0dFVCB8fCBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEKQotICAgIGRvX2dldCAobXNnLCBwYXRoKTsKLSAgZWxzZQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0KLSAgR1NUX0RFQlVHICgiICAtPiAlZCAlcyIsIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+cmVhc29uX3BocmFzZSk7Ci19Ci0KLXN0YXRpYyBndWludAotZ2V0X3BvcnRfZnJvbV9zZXJ2ZXIgKFNvdXBTZXJ2ZXIgKiBzZXJ2ZXIpCi17Ci0gIEdTTGlzdCAqdXJpczsKLSAgZ3VpbnQgcG9ydDsKLQotICB1cmlzID0gc291cF9zZXJ2ZXJfZ2V0X3VyaXMgKHNlcnZlcik7Ci0gIGdfYXNzZXJ0IChnX3NsaXN0X2xlbmd0aCAodXJpcykgPT0gMSk7Ci0gIHBvcnQgPSBzb3VwX3VyaV9nZXRfcG9ydCAodXJpcy0+ZGF0YSk7Ci0gIGdfc2xpc3RfZnJlZV9mdWxsICh1cmlzLCAoR0Rlc3Ryb3lOb3RpZnkpIHNvdXBfdXJpX2ZyZWUpOwotCi0gIHJldHVybiBwb3J0OwotfQotCi1zdGF0aWMgU291cFNlcnZlciAqCi1ydW5fc2VydmVyIChnYm9vbGVhbiB1c2VfaHR0cHMpCi17Ci0gIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKLSAgU291cFNlcnZlckxpc3Rlbk9wdGlvbnMgbGlzdGVuX2ZsYWdzOwotICBndWludCBwb3J0OwotCi0KLSAgaWYgKHVzZV9odHRwcykgewotICAgIGNvbnN0IGNoYXIgKnNzbF9jZXJ0X2ZpbGUgPSBHU1RfVEVTVF9GSUxFU19QQVRIICIvdGVzdC1jZXJ0LnBlbSI7Ci0gICAgY29uc3QgY2hhciAqc3NsX2tleV9maWxlID0gR1NUX1RFU1RfRklMRVNfUEFUSCAiL3Rlc3Qta2V5LnBlbSI7Ci0gICAgR1Rsc0JhY2tlbmQgKmJhY2tlbmQgPSBnX3Rsc19iYWNrZW5kX2dldF9kZWZhdWx0ICgpOwotCi0gICAgaWYgKGJhY2tlbmQgPT0gTlVMTCB8fCAhZ190bHNfYmFja2VuZF9zdXBwb3J0c190bHMgKGJhY2tlbmQpKSB7Ci0gICAgICBHU1RfSU5GTyAoIk5vIFRMUyBzdXBwb3J0Iik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcgKFNPVVBfU0VSVkVSX1NTTF9DRVJUX0ZJTEUsIHNzbF9jZXJ0X2ZpbGUsCi0gICAgICAgIFNPVVBfU0VSVkVSX1NTTF9LRVlfRklMRSwgc3NsX2tleV9maWxlLCBOVUxMKTsKLSAgICBsaXN0ZW5fZmxhZ3MgPSBTT1VQX1NFUlZFUl9MSVNURU5fSFRUUFM7Ci0gIH0gZWxzZSB7Ci0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3IChOVUxMLCBOVUxMKTsKLSAgICBsaXN0ZW5fZmxhZ3MgPSAwOwotICB9Ci0KLSAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIgKHNlcnZlciwgTlVMTCwgc2VydmVyX2NhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICB7Ci0gICAgU291cEF1dGhEb21haW4gKmRvbWFpbjsKLQotICAgIGRvbWFpbiA9IHNvdXBfYXV0aF9kb21haW5fYmFzaWNfbmV3IChTT1VQX0FVVEhfRE9NQUlOX1JFQUxNLCByZWFsbSwKLSAgICAgICAgU09VUF9BVVRIX0RPTUFJTl9CQVNJQ19BVVRIX0NBTExCQUNLLCBiYXNpY19hdXRoX2NiLAotICAgICAgICBTT1VQX0FVVEhfRE9NQUlOX0FERF9QQVRILCBiYXNpY19hdXRoX3BhdGgsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX2FkZF9hdXRoX2RvbWFpbiAoc2VydmVyLCBkb21haW4pOwotICAgIGdfb2JqZWN0X3VucmVmIChkb21haW4pOwotCi0gICAgZG9tYWluID0gc291cF9hdXRoX2RvbWFpbl9kaWdlc3RfbmV3IChTT1VQX0FVVEhfRE9NQUlOX1JFQUxNLCByZWFsbSwKLSAgICAgICAgU09VUF9BVVRIX0RPTUFJTl9ESUdFU1RfQVVUSF9DQUxMQkFDSywgZGlnZXN0X2F1dGhfY2IsCi0gICAgICAgIFNPVVBfQVVUSF9ET01BSU5fQUREX1BBVEgsIGRpZ2VzdF9hdXRoX3BhdGgsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX2FkZF9hdXRoX2RvbWFpbiAoc2VydmVyLCBkb21haW4pOwotICAgIGdfb2JqZWN0X3VucmVmIChkb21haW4pOwotICB9Ci0KLSAgewotICAgIEdTb2NrZXRBZGRyZXNzICphZGRyZXNzOwotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLQotICAgIGFkZHJlc3MgPQotICAgICAgICBnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3X2Zyb21fc3RyaW5nICgiMC4wLjAuMCIsCi0gICAgICAgIFNPVVBfQUREUkVTU19BTllfUE9SVCk7Ci0gICAgc291cF9zZXJ2ZXJfbGlzdGVuIChzZXJ2ZXIsIGFkZHJlc3MsIGxpc3Rlbl9mbGFncywgJmVycik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGFkZHJlc3MpOwotCi0gICAgaWYgKGVycikgewotICAgICAgR1NUX0VSUk9SICgiRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlcjogJXMiLAotICAgICAgICAgIHVzZV9odHRwcyA/ICJIVFRQUyIgOiAiSFRUUCIsIGVyci0+bWVzc2FnZSk7Ci0gICAgICBnX29iamVjdF91bnJlZiAoc2VydmVyKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgfQotCi0gIHBvcnQgPSBnZXRfcG9ydF9mcm9tX3NlcnZlciAoc2VydmVyKTsKLSAgR1NUX0RFQlVHICgiJXMgc2VydmVyIGxpc3RlbmluZyBvbiBwb3J0ICV1IiwgdXNlX2h0dHBzID8gIkhUVFBTIiA6ICJIVFRQIiwKLSAgICAgIHBvcnQpOwotCi0gIC8qIGNoZWNrIGlmIHdlIGNhbiBjb25uZWN0IHRvIG91ciBsb2NhbCBodHRwIHNlcnZlciAqLwotICB7Ci0gICAgR1NvY2tldENvbm5lY3Rpb24gKmNvbm47Ci0gICAgR1NvY2tldENsaWVudCAqY2xpZW50OwotCi0gICAgY2xpZW50ID0gZ19zb2NrZXRfY2xpZW50X25ldyAoKTsKLSAgICBnX3NvY2tldF9jbGllbnRfc2V0X3RpbWVvdXQgKGNsaWVudCwgMik7Ci0gICAgY29ubiA9Ci0gICAgICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3QgKGNsaWVudCwgIjEyNy4wLjAuMSIsIHBvcnQsIE5VTEwsIE5VTEwpOwotICAgIGlmIChjb25uID09IE5VTEwpIHsKLSAgICAgIEdTVF9JTkZPICgiQ291bGRuJ3QgY29ubmVjdCB0byAxMjcuMC4wLjE6JXUiLCBwb3J0KTsKLSAgICAgIGdfb2JqZWN0X3VucmVmIChjbGllbnQpOwotICAgICAgZ19vYmplY3RfdW5yZWYgKHNlcnZlcik7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZiAoY29ubik7Ci0gICAgZ19vYmplY3RfdW5yZWYgKGNsaWVudCk7Ci0gIH0KLQotICByZXR1cm4gc2VydmVyOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NwZWN0cnVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5N2JlMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvc3BlY3RydW0uYworKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHNwZWN0cnVtCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNz4gU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1nYm9vbGVhbiBoYXZlX2VvcyA9IEZBTFNFOwotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1Hc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0jZGVmaW5lIFNQRUNUX0NBUFNfVEVNUExBVEVfU1RSSU5HIFwKLSAgICAiYXVkaW8veC1yYXcsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiByYXRlID0gKGludCkgWyAxLCBNQVggXSwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgY2hhbm5lbHMgPSAoaW50KSBbIDEsIE1BWCBdLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGxheW91dCA9IChzdHJpbmcpIGludGVybGVhdmVkLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBmb3JtYXQgPSAoc3RyaW5nKSB7ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9BVURJT19ORShTMTYpICIsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBHU1RfQVVESU9fTkUoUzMyKSAiLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgR1NUX0FVRElPX05FKEYzMikgIiwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEdTVF9BVURJT19ORShGNjQpICIgfSIKLQotI2RlZmluZSBTUEVDVF9DQVBTX1NUUklOR19TMTYgXAotICAiYXVkaW8veC1yYXcsICIgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAsICIgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FKFMxNikKLQotI2RlZmluZSBTUEVDVF9DQVBTX1NUUklOR19TMzIgXAotICAiYXVkaW8veC1yYXcsICIgXAotICAgICJyYXRlID0gKGludCkgNDQxMDAsICIgXAotICAgICJjaGFubmVscyA9IChpbnQpIDEsICIgXAotICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gICAgImZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0FVRElPX05FKFMzMikKLQotI2RlZmluZSBTUEVDVF9DQVBTX1NUUklOR19GMzIgXAotICAgICJhdWRpby94LXJhdywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIHJhdGUgPSAoaW50KSA0NDEwMCwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBjaGFubmVscyA9IChpbnQpIDEsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgbGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIgXAotICAgICIgZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfQVVESU9fTkUoRjMyKQotCi0jZGVmaW5lIFNQRUNUX0NBUFNfU1RSSU5HX0Y2NCBcCi0gICAgImF1ZGlvL3gtcmF3LCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICIgcmF0ZSA9IChpbnQpIDQ0MTAwLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAiIGNoYW5uZWxzID0gKGludCkgMSwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIiBsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gICAgIiBmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9BVURJT19ORShGNjQpCi0KLSNkZWZpbmUgU1BFQ1RfQkFORFMgMjU2Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFNQRUNUX0NBUFNfVEVNUExBVEVfU1RSSU5HKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChTUEVDVF9DQVBTX1RFTVBMQVRFX1NUUklORykKLSAgICApOwotCi0vKiB0YWtlcyBvdmVyIHJlZmVyZW5jZSBmb3Igb3V0Y2FwcyAqLwotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfc3BlY3RydW0gKGNvbnN0IGdjaGFyICogY2Fwc19zdHIpCi17Ci0gIEdzdEVsZW1lbnQgKnNwZWN0cnVtOwotICBHc3RDYXBzICpjYXBzOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX3NwZWN0cnVtIik7Ci0gIHNwZWN0cnVtID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJzcGVjdHJ1bSIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChzcGVjdHJ1bSwgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChzcGVjdHJ1bSwgJnNpbmt0ZW1wbGF0ZSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgVFJVRSk7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChjYXBzX3N0cik7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCBzcGVjdHJ1bSwgY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJldHVybiBzcGVjdHJ1bTsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfc3BlY3RydW0gKEdzdEVsZW1lbnQgKiBzcGVjdHJ1bSkKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF9zcGVjdHJ1bSIpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHNwZWN0cnVtKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkIChzcGVjdHJ1bSk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChzcGVjdHJ1bSk7Ci0KLSAgZ19saXN0X2ZvcmVhY2ggKGJ1ZmZlcnMsIChHRnVuYykgZ3N0X21pbmlfb2JqZWN0X3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9pbnQxNikKLXsKLSAgR3N0RWxlbWVudCAqc3BlY3RydW07Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RNZXNzYWdlICptZXNzYWdlOwotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnN0cnVjdHVyZTsKLSAgaW50IGksIGo7Ci0gIGdpbnQxNiAqZGF0YTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGNvbnN0IEdWYWx1ZSAqbGlzdCwgKnZhbHVlOwotICBHc3RDbG9ja1RpbWUgZW5kdGltZTsKLSAgZ2Zsb2F0IGxldmVsOwotCi0gIHNwZWN0cnVtID0gc2V0dXBfc3BlY3RydW0gKFNQRUNUX0NBUFNfU1RSSU5HX1MxNik7Ci0gIGdfb2JqZWN0X3NldCAoc3BlY3RydW0sICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwgImludGVydmFsIiwgR1NUX1NFQ09ORCAvIDEwMCwKLSAgICAgICJiYW5kcyIsIFNQRUNUX0JBTkRTLCAidGhyZXNob2xkIiwgLTgwLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcGVjdHJ1bSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIC8qIGNyZWF0ZSBhIDEgc2VjIGJ1ZmZlciB3aXRoIGFuIDExMDI1IEh6IHNpbmUgd2F2ZSAqLwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCA0NDEwMCAqIHNpemVvZiAoZ2ludDE2KSwgMCk7Ci0gIGdzdF9idWZmZXJfbWFwIChpbmJ1ZmZlciwgJm1hcCwgR1NUX01BUF9XUklURSk7Ci0gIGRhdGEgPSAoZ2ludDE2ICopIG1hcC5kYXRhOwotICBmb3IgKGogPSAwOyBqIDwgNDQxMDA7IGogKz0gNCkgewotICAgICpkYXRhID0gMDsKLSAgICArK2RhdGE7Ci0gICAgKmRhdGEgPSAzMjc2NzsKLSAgICArK2RhdGE7Ci0gICAgKmRhdGEgPSAwOwotICAgICsrZGF0YTsKLSAgICAqZGF0YSA9IC0zMjc2NzsKLSAgICArK2RhdGE7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogY3JlYXRlIGEgYnVzIHRvIGdldCB0aGUgc3BlY3RydW0gbWVzc2FnZSBvbiAqLwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKHNwZWN0cnVtLCBidXMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAyKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGJ1dCBpdCBlbmRzIHVwIGJlaW5nIGNvbGxlY3RlZCBvbiB0aGUgZ2xvYmFsIGJ1ZmZlciBsaXN0ICovCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluYnVmZmVyID09IG91dGJ1ZmZlcik7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5ULCAtMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKG1lc3NhZ2UsICJtZXNzYWdlIiwgMSk7Ci0KLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IEdTVF9PQkpFQ1QgKHNwZWN0cnVtKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoKGNoYXIgKikgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSwKLSAgICAgICJzcGVjdHJ1bSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoc3RydWN0dXJlLCAiZW5kdGltZSIsICZlbmR0aW1lKSk7Ci0KLSAgbGlzdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJtYWduaXR1ZGUiKTsKLSAgZm9yIChpID0gMDsgaSA8IFNQRUNUX0JBTkRTOyArK2kpIHsKLSAgICB2YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAobGlzdCwgaSk7Ci0gICAgbGV2ZWwgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgIEdTVF9ERUJVRyAoImJhbmRbJTNkXSBpcyAlLjJmIiwgaSwgbGV2ZWwpOwotICAgIC8qIE9ubHkgdGhlIGJhbmRzIGluIHRoZSBtaWRkbGUgc2hvdWxkIGhhdmUgYSBsZXZlbCBhYm92ZSA2MCAqLwotICAgIGZhaWxfaWYgKChpID09IFNQRUNUX0JBTkRTIC8gMiB8fCBpID09IFNQRUNUX0JBTkRTIC8gMiAtIDEpCi0gICAgICAgICYmIGxldmVsIDwgLTIwLjApOwotICAgIGZhaWxfaWYgKChpICE9IFNQRUNUX0JBTkRTIC8gMiAmJiBpICE9IFNQRUNUX0JBTkRTIC8gMiAtIDEpCi0gICAgICAgICYmIGxldmVsID4gLTIwLjApOwotICB9Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmJ1ZmZlciA9PSBvdXRidWZmZXIpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIC8qIGZsdXNoIGN1cnJlbnQgbWVzc2FnZXMsYW5kIGZ1dHVyZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMgKi8KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0KLSAgLyogbWVzc2FnZSBoYXMgYSByZWYgdG8gdGhlIGVsZW1lbnQgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3BlY3RydW0sICJzcGVjdHJ1bSIsIDIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNwZWN0cnVtLCAic3BlY3RydW0iLCAxKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChzcGVjdHJ1bSwgTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcGVjdHJ1bSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNwZWN0cnVtLCAic3BlY3RydW0iLCAxKTsKLSAgY2xlYW51cF9zcGVjdHJ1bSAoc3BlY3RydW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ludDMyKQotewotICBHc3RFbGVtZW50ICpzcGVjdHJ1bTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBpbnQgaSwgajsKLSAgZ2ludDMyICpkYXRhOwotICBHc3RNYXBJbmZvIG1hcDsKLSAgY29uc3QgR1ZhbHVlICpsaXN0LCAqdmFsdWU7Ci0gIEdzdENsb2NrVGltZSBlbmR0aW1lOwotICBnZmxvYXQgbGV2ZWw7Ci0KLSAgc3BlY3RydW0gPSBzZXR1cF9zcGVjdHJ1bSAoU1BFQ1RfQ0FQU19TVFJJTkdfUzMyKTsKLSAgZ19vYmplY3Rfc2V0IChzcGVjdHJ1bSwgInBvc3QtbWVzc2FnZXMiLCBUUlVFLCAiaW50ZXJ2YWwiLCBHU1RfU0VDT05EIC8gMTAwLAotICAgICAgImJhbmRzIiwgU1BFQ1RfQkFORFMsICJ0aHJlc2hvbGQiLCAtODAsIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNwZWN0cnVtLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgLyogY3JlYXRlIGEgMSBzZWMgYnVmZmVyIHdpdGggYW4gMTEwMjUgSHogc2luZSB3YXZlICovCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIDQ0MTAwICogc2l6ZW9mIChnaW50MzIpLCAwKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKGluYnVmZmVyLCAmbWFwLCBHU1RfTUFQX1dSSVRFKTsKLSAgZGF0YSA9IChnaW50MzIgKikgbWFwLmRhdGE7Ci0gIGZvciAoaiA9IDA7IGogPCA0NDEwMDsgaiArPSA0KSB7Ci0gICAgKmRhdGEgPSAwOwotICAgICsrZGF0YTsKLSAgICAqZGF0YSA9IDIxNDc0ODM2NDc7Ci0gICAgKytkYXRhOwotICAgICpkYXRhID0gMDsKLSAgICArK2RhdGE7Ci0gICAgKmRhdGEgPSAtMjE0NzQ4MzY0NzsKLSAgICArK2RhdGE7Ci0gIH0KLSAgZ3N0X2J1ZmZlcl91bm1hcCAoaW5idWZmZXIsICZtYXApOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgLyogY3JlYXRlIGEgYnVzIHRvIGdldCB0aGUgc3BlY3RydW0gbWVzc2FnZSBvbiAqLwotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKHNwZWN0cnVtLCBidXMpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAyKTsKLQotICAvKiBwdXNoaW5nIGdpdmVzIGF3YXkgbXkgcmVmZXJlbmNlIC4uLiAqLwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpID09IEdTVF9GTE9XX09LKTsKLSAgLyogLi4uIGJ1dCBpdCBlbmRzIHVwIGJlaW5nIGNvbGxlY3RlZCBvbiB0aGUgZ2xvYmFsIGJ1ZmZlciBsaXN0ICovCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluYnVmZmVyID09IG91dGJ1ZmZlcik7Ci0KLSAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9FTEVNRU5ULCAtMSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKG1lc3NhZ2UsICJtZXNzYWdlIiwgMSk7Ci0KLSAgZmFpbF91bmxlc3MgKG1lc3NhZ2UgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpID09IEdTVF9PQkpFQ1QgKHNwZWN0cnVtKSk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKTsKLSAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gIGZhaWxfaWYgKHN0cnVjdHVyZSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoKGNoYXIgKikgZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKSwKLSAgICAgICJzcGVjdHJ1bSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAoc3RydWN0dXJlLCAiZW5kdGltZSIsICZlbmR0aW1lKSk7Ci0KLSAgbGlzdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJtYWduaXR1ZGUiKTsKLSAgZm9yIChpID0gMDsgaSA8IFNQRUNUX0JBTkRTOyArK2kpIHsKLSAgICB2YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAobGlzdCwgaSk7Ci0gICAgbGV2ZWwgPSBnX3ZhbHVlX2dldF9mbG9hdCAodmFsdWUpOwotICAgIEdTVF9ERUJVRyAoImJhbmRbJTNkXSBpcyAlLjJmIiwgaSwgbGV2ZWwpOwotICAgIC8qIE9ubHkgdGhlIGJhbmRzIGluIHRoZSBtaWRkbGUgc2hvdWxkIGhhdmUgYSBsZXZlbCBhYm92ZSA2MCAqLwotICAgIGZhaWxfaWYgKChpID09IFNQRUNUX0JBTkRTIC8gMiB8fCBpID09IFNQRUNUX0JBTkRTIC8gMiAtIDEpCi0gICAgICAgICYmIGxldmVsIDwgLTIwLjApOwotICAgIGZhaWxfaWYgKChpICE9IFNQRUNUX0JBTkRTIC8gMiAmJiBpICE9IFNQRUNUX0JBTkRTIC8gMiAtIDEpCi0gICAgICAgICYmIGxldmVsID4gLTIwLjApOwotICB9Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmJ1ZmZlciA9PSBvdXRidWZmZXIpOwotCi0gIC8qIGNsZWFuIHVwICovCi0gIC8qIGZsdXNoIGN1cnJlbnQgbWVzc2FnZXMsYW5kIGZ1dHVyZSBzdGF0ZSBjaGFuZ2UgbWVzc2FnZXMgKi8KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0KLSAgLyogbWVzc2FnZSBoYXMgYSByZWYgdG8gdGhlIGVsZW1lbnQgKi8KLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3BlY3RydW0sICJzcGVjdHJ1bSIsIDIpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNwZWN0cnVtLCAic3BlY3RydW0iLCAxKTsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzIChzcGVjdHJ1bSwgTlVMTCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDEpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcGVjdHJ1bSwKLSAgICAgICAgICBHU1RfU1RBVEVfTlVMTCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLCAiY291bGQgbm90IHNldCB0byBudWxsIik7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNwZWN0cnVtLCAic3BlY3RydW0iLCAxKTsKLSAgY2xlYW51cF9zcGVjdHJ1bSAoc3BlY3RydW0pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Zsb2F0MzIpCi17Ci0gIEdzdEVsZW1lbnQgKnNwZWN0cnVtOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGludCBpLCBqOwotICBnZmxvYXQgKmRhdGE7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBjb25zdCBHVmFsdWUgKmxpc3QsICp2YWx1ZTsKLSAgR3N0Q2xvY2tUaW1lIGVuZHRpbWU7Ci0gIGdmbG9hdCBsZXZlbDsKLQotICBzcGVjdHJ1bSA9IHNldHVwX3NwZWN0cnVtIChTUEVDVF9DQVBTX1NUUklOR19GMzIpOwotICBnX29iamVjdF9zZXQgKHNwZWN0cnVtLCAicG9zdC1tZXNzYWdlcyIsIFRSVUUsICJpbnRlcnZhbCIsIEdTVF9TRUNPTkQgLyAxMDAsCi0gICAgICAiYmFuZHMiLCBTUEVDVF9CQU5EUywgInRocmVzaG9sZCIsIC04MCwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3BlY3RydW0sCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICAvKiBjcmVhdGUgYSAxIHNlYyBidWZmZXIgd2l0aCBhbiAxMTAyNSBIeiBzaW5lIHdhdmUgKi8KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbGxvY2F0ZSAoTlVMTCwgNDQxMDAgKiBzaXplb2YgKGdmbG9hdCksIDApOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gKGdmbG9hdCAqKSBtYXAuZGF0YTsKLSAgZm9yIChqID0gMDsgaiA8IDQ0MTAwOyBqICs9IDQpIHsKLSAgICAqZGF0YSA9IDAuMDsKLSAgICArK2RhdGE7Ci0gICAgKmRhdGEgPSAxLjA7Ci0gICAgKytkYXRhOwotICAgICpkYXRhID0gMC4wOwotICAgICsrZGF0YTsKLSAgICAqZGF0YSA9IC0xLjA7Ci0gICAgKytkYXRhOwotICB9Ci0gIGdzdF9idWZmZXJfdW5tYXAgKGluYnVmZmVyLCAmbWFwKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotCi0gIC8qIGNyZWF0ZSBhIGJ1cyB0byBnZXQgdGhlIHNwZWN0cnVtIG1lc3NhZ2Ugb24gKi8KLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDEpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChzcGVjdHJ1bSwgYnVzKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMik7Ci0KLSAgLyogcHVzaGluZyBnaXZlcyBhd2F5IG15IHJlZmVyZW5jZSAuLi4gKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIC8qIC4uLiBidXQgaXQgZW5kcyB1cCBiZWluZyBjb2xsZWN0ZWQgb24gdGhlIGdsb2JhbCBidWZmZXIgbGlzdCAqLwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpLCAxKTsKLSAgZmFpbF9pZiAoKG91dGJ1ZmZlciA9IChHc3RCdWZmZXIgKikgYnVmZmVycy0+ZGF0YSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbmJ1ZmZlciA9PSBvdXRidWZmZXIpOwotCi0gIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRUxFTUVOVCwgLTEpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChtZXNzYWdlLCAibWVzc2FnZSIsIDEpOwotCi0gIGZhaWxfdW5sZXNzIChtZXNzYWdlICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSA9PSBHU1RfT0JKRUNUIChzcGVjdHJ1bSkpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCk7Ci0gIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICBmYWlsX2lmIChzdHJ1Y3R1cmUgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19zdHJpbmcgKChjaGFyICopIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHN0cnVjdHVyZSksCi0gICAgICAic3BlY3RydW0iKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKHN0cnVjdHVyZSwgImVuZHRpbWUiLCAmZW5kdGltZSkpOwotCi0gIGxpc3QgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoc3RydWN0dXJlLCAibWFnbml0dWRlIik7Ci0gIGZvciAoaSA9IDA7IGkgPCBTUEVDVF9CQU5EUzsgKytpKSB7Ci0gICAgdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKGxpc3QsIGkpOwotICAgIGxldmVsID0gZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICBHU1RfREVCVUcgKCJiYW5kWyUzZF0gaXMgJS4yZiIsIGksIGxldmVsKTsKLSAgICAvKiBPbmx5IHRoZSBiYW5kcyBpbiB0aGUgbWlkZGxlIHNob3VsZCBoYXZlIGEgbGV2ZWwgYWJvdmUgNjAgKi8KLSAgICBmYWlsX2lmICgoaSA9PSBTUEVDVF9CQU5EUyAvIDIgfHwgaSA9PSBTUEVDVF9CQU5EUyAvIDIgLSAxKQotICAgICAgICAmJiBsZXZlbCA8IC0yMC4wKTsKLSAgICBmYWlsX2lmICgoaSAhPSBTUEVDVF9CQU5EUyAvIDIgJiYgaSAhPSBTUEVDVF9CQU5EUyAvIDIgLSAxKQotICAgICAgICAmJiBsZXZlbCA+IC0yMC4wKTsKLSAgfQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICAvKiBmbHVzaCBjdXJyZW50IG1lc3NhZ2VzLGFuZCBmdXR1cmUgc3RhdGUgY2hhbmdlIG1lc3NhZ2VzICovCi0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotCi0gIC8qIG1lc3NhZ2UgaGFzIGEgcmVmIHRvIHRoZSBlbGVtZW50ICovCi0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKHNwZWN0cnVtLCAic3BlY3RydW0iLCAyKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcGVjdHJ1bSwgInNwZWN0cnVtIiwgMSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoc3BlY3RydW0sIE5VTEwpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc3BlY3RydW0sCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywgImNvdWxkIG5vdCBzZXQgdG8gbnVsbCIpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcGVjdHJ1bSwgInNwZWN0cnVtIiwgMSk7Ci0gIGNsZWFudXBfc3BlY3RydW0gKHNwZWN0cnVtKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9mbG9hdDY0KQotewotICBHc3RFbGVtZW50ICpzcGVjdHJ1bTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0gIGNvbnN0IEdzdFN0cnVjdHVyZSAqc3RydWN0dXJlOwotICBpbnQgaSwgajsKLSAgZ2RvdWJsZSAqZGF0YTsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0gIGNvbnN0IEdWYWx1ZSAqbGlzdCwgKnZhbHVlOwotICBHc3RDbG9ja1RpbWUgZW5kdGltZTsKLSAgZ2Zsb2F0IGxldmVsOwotCi0gIHNwZWN0cnVtID0gc2V0dXBfc3BlY3RydW0gKFNQRUNUX0NBUFNfU1RSSU5HX0Y2NCk7Ci0gIGdfb2JqZWN0X3NldCAoc3BlY3RydW0sICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwgImludGVydmFsIiwgR1NUX1NFQ09ORCAvIDEwMCwKLSAgICAgICJiYW5kcyIsIFNQRUNUX0JBTkRTLCAidGhyZXNob2xkIiwgLTgwLCBOVUxMKTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzcGVjdHJ1bSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIC8qIGNyZWF0ZSBhIDEgc2VjIGJ1ZmZlciB3aXRoIGFuIDExMDI1IEh6IHNpbmUgd2F2ZSAqLwotICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCA0NDEwMCAqIHNpemVvZiAoZ2RvdWJsZSksIDApOwotICBnc3RfYnVmZmVyX21hcCAoaW5idWZmZXIsICZtYXAsIEdTVF9NQVBfV1JJVEUpOwotICBkYXRhID0gKGdkb3VibGUgKikgbWFwLmRhdGE7Ci0gIGZvciAoaiA9IDA7IGogPCA0NDEwMDsgaiArPSA0KSB7Ci0gICAgKmRhdGEgPSAwLjA7Ci0gICAgKytkYXRhOwotICAgICpkYXRhID0gMS4wOwotICAgICsrZGF0YTsKLSAgICAqZGF0YSA9IDAuMDsKLSAgICArK2RhdGE7Ci0gICAgKmRhdGEgPSAtMS4wOwotICAgICsrZGF0YTsKLSAgfQotICBnc3RfYnVmZmVyX3VubWFwIChpbmJ1ZmZlciwgJm1hcCk7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLQotICAvKiBjcmVhdGUgYSBidXMgdG8gZ2V0IHRoZSBzcGVjdHJ1bSBtZXNzYWdlIG9uICovCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChidXMsICJidXMiLCAxKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAoc3BlY3RydW0sIGJ1cyk7Ci0gIEFTU0VSVF9PQkpFQ1RfUkVGQ09VTlQgKGJ1cywgImJ1cyIsIDIpOwotCi0gIC8qIHB1c2hpbmcgZ2l2ZXMgYXdheSBteSByZWZlcmVuY2UgLi4uICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotICAvKiAuLi4gYnV0IGl0IGVuZHMgdXAgYmVpbmcgY29sbGVjdGVkIG9uIHRoZSBnbG9iYWwgYnVmZmVyIGxpc3QgKi8KLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGZhaWxfaWYgKChvdXRidWZmZXIgPSAoR3N0QnVmZmVyICopIGJ1ZmZlcnMtPmRhdGEpID09IE5VTEwpOwotICBmYWlsX3VubGVzcyAoaW5idWZmZXIgPT0gb3V0YnVmZmVyKTsKLQotICBtZXNzYWdlID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VMRU1FTlQsIC0xKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAobWVzc2FnZSwgIm1lc3NhZ2UiLCAxKTsKLQotICBmYWlsX3VubGVzcyAobWVzc2FnZSAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkgPT0gR1NUX09CSkVDVCAoc3BlY3RydW0pKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX0VMRU1FTlQpOwotICBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLSAgZmFpbF9pZiAoc3RydWN0dXJlID09IE5VTEwpOwotICBmYWlsX3VubGVzc19lcXVhbHNfc3RyaW5nICgoY2hhciAqKSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzdHJ1Y3R1cmUpLAotICAgICAgInNwZWN0cnVtIik7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChzdHJ1Y3R1cmUsICJlbmR0aW1lIiwgJmVuZHRpbWUpKTsKLQotICBsaXN0ID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHN0cnVjdHVyZSwgIm1hZ25pdHVkZSIpOwotICBmb3IgKGkgPSAwOyBpIDwgU1BFQ1RfQkFORFM7ICsraSkgewotICAgIHZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChsaXN0LCBpKTsKLSAgICBsZXZlbCA9IGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgR1NUX0RFQlVHICgiYmFuZFslM2RdIGlzICUuMmYiLCBpLCBsZXZlbCk7Ci0gICAgLyogT25seSB0aGUgYmFuZHMgaW4gdGhlIG1pZGRsZSBzaG91bGQgaGF2ZSBhIGxldmVsIGFib3ZlIDYwICovCi0gICAgZmFpbF9pZiAoKGkgPT0gU1BFQ1RfQkFORFMgLyAyIHx8IGkgPT0gU1BFQ1RfQkFORFMgLyAyIC0gMSkKLSAgICAgICAgJiYgbGV2ZWwgPCAtMjAuMCk7Ci0gICAgZmFpbF9pZiAoKGkgIT0gU1BFQ1RfQkFORFMgLyAyICYmIGkgIT0gU1BFQ1RfQkFORFMgLyAyIC0gMSkKLSAgICAgICAgJiYgbGV2ZWwgPiAtMjAuMCk7Ci0gIH0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDEpOwotICBmYWlsX2lmICgob3V0YnVmZmVyID0gKEdzdEJ1ZmZlciAqKSBidWZmZXJzLT5kYXRhKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGluYnVmZmVyID09IG91dGJ1ZmZlcik7Ci0KLSAgLyogY2xlYW4gdXAgKi8KLSAgLyogZmx1c2ggY3VycmVudCBtZXNzYWdlcyxhbmQgZnV0dXJlIHN0YXRlIGNoYW5nZSBtZXNzYWdlcyAqLwotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLQotICAvKiBtZXNzYWdlIGhhcyBhIHJlZiB0byB0aGUgZWxlbWVudCAqLwotICBBU1NFUlRfT0JKRUNUX1JFRkNPVU5UIChzcGVjdHJ1bSwgInNwZWN0cnVtIiwgMik7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3BlY3RydW0sICJzcGVjdHJ1bSIsIDEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHNwZWN0cnVtLCBOVUxMKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoYnVzLCAiYnVzIiwgMSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNwZWN0cnVtLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsICJjb3VsZCBub3Qgc2V0IHRvIG51bGwiKTsKLSAgQVNTRVJUX09CSkVDVF9SRUZDT1VOVCAoc3BlY3RydW0sICJzcGVjdHJ1bSIsIDEpOwotICBjbGVhbnVwX3NwZWN0cnVtIChzcGVjdHJ1bSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotc3BlY3RydW1fc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgic3BlY3RydW0iKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50MTYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfaW50MzIpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZmxvYXQzMik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9mbG9hdDY0KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHNwZWN0cnVtKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NwbGl0bXV4LmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9zcGxpdG11eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjQ4OTZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3NwbGl0bXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyogR1N0cmVhbWVyIHVuaXQgdGVzdCBmb3Igc3BsaXRtdXhzcmMvc2luayBlbGVtZW50cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBKYW4gU2NobWlkdCA8amFuQGNlbnRyaWN1bGFyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyAgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotZ2NoYXIgKnRtcGRpciA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkCi10ZW1wZGlyX3NldHVwICh2b2lkKQotewotICBjb25zdCBnY2hhciAqc3lzdG1wID0gZ19nZXRfdG1wX2RpciAoKTsKLSAgdG1wZGlyID0gZ19idWlsZF9maWxlbmFtZSAoc3lzdG1wLCAic3BsaXRtdXgtdGVzdC1YWFhYWFgiLCBOVUxMKTsKLSAgLyogUmV3cml0ZXMgdG1wZGlyIHRlbXBsYXRlIGlucHV0OiAqLwotICB0bXBkaXIgPSBnX21rZHRlbXAgKHRtcGRpcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZW1wZGlyX2NsZWFudXAgKHZvaWQpCi17Ci0gIEdEaXIgKmQ7Ci0gIGNvbnN0IGdjaGFyICpmOwotCi0gIGZhaWxfaWYgKHRtcGRpciA9PSBOVUxMKTsKLQotICBkID0gZ19kaXJfb3BlbiAodG1wZGlyLCAwLCBOVUxMKTsKLSAgZmFpbF9pZiAoZCA9PSBOVUxMKTsKLQotICB3aGlsZSAoKGYgPSBnX2Rpcl9yZWFkX25hbWUgKGQpKSAhPSBOVUxMKSB7Ci0gICAgZ2NoYXIgKmZuYW1lID0gZ19idWlsZF9maWxlbmFtZSAodG1wZGlyLCBmLCBOVUxMKTsKLSAgICBmYWlsX2lmIChnX3JlbW92ZSAoZm5hbWUpICE9IDAsICJGYWlsZWQgdG8gcmVtb3ZlIHRtcCBmaWxlICVzIiwgZm5hbWUpOwotICAgIGdfZnJlZSAoZm5hbWUpOwotICB9Ci0gIGdfZGlyX2Nsb3NlIChkKTsKLQotICBmYWlsX2lmIChnX3JlbW92ZSAodG1wZGlyKSAhPSAwLCAiRmFpbGVkIHRvIGRlbGV0ZSB0bXBkaXIgJXMiLCB0bXBkaXIpOwotCi0gIGdfZnJlZSAodG1wZGlyKTsKLSAgdG1wZGlyID0gTlVMTDsKLX0KLQotc3RhdGljIGd1aW50Ci1jb3VudF9maWxlcyAoY29uc3QgZ2NoYXIgKiB0YXJnZXQpCi17Ci0gIEdEaXIgKmQ7Ci0gIGNvbnN0IGdjaGFyICpmOwotICBndWludCByZXQgPSAwOwotCi0gIGQgPSBnX2Rpcl9vcGVuICh0YXJnZXQsIDAsIE5VTEwpOwotICBmYWlsX2lmIChkID09IE5VTEwpOwotCi0gIHdoaWxlICgoZiA9IGdfZGlyX3JlYWRfbmFtZSAoZCkpICE9IE5VTEwpCi0gICAgcmV0Kys7Ci0gIGdfZGlyX2Nsb3NlIChkKTsKLQotICByZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBHc3RNZXNzYWdlICoKLXJ1bl9waXBlbGluZSAoR3N0RWxlbWVudCAqIHBpcGVsaW5lKQotewotICBHc3RCdXMgKmJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UIChwaXBlbGluZSkpOwotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBtc2cgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IsIC0xKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgcmV0dXJuIG1zZzsKLX0KLQotc3RhdGljIHZvaWQKLWR1bXBfZXJyb3IgKEdzdE1lc3NhZ2UgKiBtc2cpCi17Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgZ2NoYXIgKmRiZ19pbmZvOwotCi0gIGZhaWxfdW5sZXNzIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VSUk9SKTsKLQotICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobXNnLCAmZXJyLCAmZGJnX2luZm8pOwotCi0gIGdfcHJpbnRlcnIgKCJFUlJPUiBmcm9tIGVsZW1lbnQgJXM6ICVzXG4iLAotICAgICAgR1NUX09CSkVDVF9OQU1FIChtc2ctPnNyYyksIGVyci0+bWVzc2FnZSk7Ci0gIGdfcHJpbnRlcnIgKCJEZWJ1Z2dpbmcgaW5mbzogJXNcbiIsIChkYmdfaW5mbykgPyBkYmdfaW5mbyA6ICJub25lIik7Ci0gIGdfZXJyb3JfZnJlZSAoZXJyKTsKLSAgZ19mcmVlIChkYmdfaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3BsYXliYWNrIChjb25zdCBnY2hhciAqIGluX3BhdHRlcm4pCi17Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKmZha2VzaW5rOwotICBnY2hhciAqdXJpOwotCi0gIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGxheWJpbiIsIE5VTEwpOwotICBmYWlsX2lmIChwaXBlbGluZSA9PSBOVUxMKTsKLQotICBmYWtlc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgTlVMTCk7Ci0gIGZhaWxfaWYgKGZha2VzaW5rID09IE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChwaXBlbGluZSksICJ2aWRlby1zaW5rIiwgZmFrZXNpbmssIE5VTEwpOwotCi0gIHVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoInNwbGl0bXV4Oi8vJXMiLCBpbl9wYXR0ZXJuKTsKLQotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChwaXBlbGluZSksICJ1cmkiLCB1cmksIE5VTEwpOwotICBnX2ZyZWUgKHVyaSk7Ci0KLSAgbXNnID0gcnVuX3BpcGVsaW5lIChwaXBlbGluZSk7Ci0KLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpCi0gICAgZHVtcF9lcnJvciAobXNnKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3Rfc3BsaXRtdXhzcmMpCi17Ci0gIGdjaGFyICppbl9wYXR0ZXJuID0KLSAgICAgIGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9URVNUX0ZJTEVTX1BBVEgsICJzcGxpdHZpZGVvKi5vZ2ciLCBOVUxMKTsKLSAgdGVzdF9wbGF5YmFjayAoaW5fcGF0dGVybik7Ci0gIGdfZnJlZSAoaW5fcGF0dGVybik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdjaGFyICoqCi1zcmNfZm9ybWF0X2xvY2F0aW9uX2NiIChHc3RFbGVtZW50ICogc3BsaXRtdXhzcmMsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZ2NoYXIgKipyZXN1bHQgPSBnX21hbGxvYzBfbiAoNCwgc2l6ZW9mIChnY2hhciAqKSk7Ci0gIHJlc3VsdFswXSA9IGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9URVNUX0ZJTEVTX1BBVEgsICJzcGxpdHZpZGVvMDAub2dnIiwgTlVMTCk7Ci0gIHJlc3VsdFsxXSA9IGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9URVNUX0ZJTEVTX1BBVEgsICJzcGxpdHZpZGVvMDEub2dnIiwgTlVMTCk7Ci0gIHJlc3VsdFsyXSA9IGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9URVNUX0ZJTEVTX1BBVEgsICJzcGxpdHZpZGVvMDIub2dnIiwgTlVMTCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NwbGl0bXV4c3JjX2Zvcm1hdF9sb2NhdGlvbikKLXsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc3JjOwotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLQotICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKCJzcGxpdG11eHNyYyBuYW1lPXNwbGl0c3JjICEgZGVjb2RlYmluICIKLSAgICAgICIhIGZha2VzaW5rIiwgJmVycm9yKTsKLSAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKLSAgZmFpbF9pZiAocGlwZWxpbmUgPT0gTlVMTCk7Ci0KLSAgc3JjID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic3BsaXRzcmMiKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc3JjLCAiZm9ybWF0LWxvY2F0aW9uIiwKLSAgICAgIChHQ2FsbGJhY2spIHNyY19mb3JtYXRfbG9jYXRpb25fY2IsIE5VTEwpOwotICBnX29iamVjdF91bnJlZiAoc3JjKTsKLQotICBtc2cgPSBydW5fcGlwZWxpbmUgKHBpcGVsaW5lKTsKLQotICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUikKLSAgICBkdW1wX2Vycm9yIChtc2cpOwotICBmYWlsX3VubGVzcyAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FT1MpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobXNnKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NwbGl0bXV4c2luaykKLXsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc2luazsKLSAgR3N0UGFkICpzcGxpdG11eF9zaW5rX3BhZDsKLSAgR3N0UGFkICplbmNfc3JjX3BhZDsKLSAgZ2NoYXIgKmRlc3RfcGF0dGVybjsKLSAgZ3VpbnQgY291bnQ7Ci0gIGdjaGFyICppbl9wYXR0ZXJuOwotCi0gIC8qIFRoaXMgcGlwZWxpbmUgaGFzIGEgc21hbGwgdGltZSBjdXRvZmYgLSBpdCBzaG91bGQgc3RhcnQgYSBuZXcgZmlsZQotICAgKiBldmVyeSBHT1AsIGllIDEgc2Vjb25kICovCi0gIHBpcGVsaW5lID0KLSAgICAgIGdzdF9wYXJzZV9sYXVuY2gKLSAgICAgICgidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTE1ICEgdmlkZW8veC1yYXcsd2lkdGg9ODAsaGVpZ2h0PTY0LGZyYW1lcmF0ZT01LzEgISB2aWRlb2NvbnZlcnQgISIKLSAgICAgICIgcXVldWUgISB0aGVvcmFlbmMga2V5ZnJhbWUtZm9yY2U9NSAhIHNwbGl0bXV4c2luayBuYW1lPXNwbGl0c2luayAiCi0gICAgICAiIG1heC1zaXplLXRpbWU9MTAwMDAwMCBtYXgtc2l6ZS1ieXRlcz0xMDAwMDAwIG11eGVyPW9nZ211eCIsIE5VTEwpOwotICBmYWlsX2lmIChwaXBlbGluZSA9PSBOVUxMKTsKLSAgc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNwbGl0c2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotICBkZXN0X3BhdHRlcm4gPSBnX2J1aWxkX2ZpbGVuYW1lICh0bXBkaXIsICJvdXQlMDVkLm9nZyIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzaW5rKSwgImxvY2F0aW9uIiwgZGVzdF9wYXR0ZXJuLCBOVUxMKTsKLSAgZ19mcmVlIChkZXN0X3BhdHRlcm4pOwotICBnX29iamVjdF91bnJlZiAoc2luayk7Ci0KLSAgbXNnID0gcnVuX3BpcGVsaW5lIChwaXBlbGluZSk7Ci0KLSAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpCi0gICAgZHVtcF9lcnJvciAobXNnKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRU9TKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0KLSAgLyogdW5saW5rIG1hbnVhbGx5IGFuZCByZWxhc2UgcmVxdWVzdCBwYWQgdG8gZW5zdXJlIHRoYXQgd2UgKmNhbiogZG8gdGhhdAotICAgKiAtIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTM2MjIgKi8KLSAgc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNwbGl0c2luayIpOwotICBmYWlsX2lmIChzaW5rID09IE5VTEwpOwotICBzcGxpdG11eF9zaW5rX3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAidmlkZW8iKTsKLSAgZmFpbF9pZiAoc3BsaXRtdXhfc2lua19wYWQgPT0gTlVMTCk7Ci0gIGVuY19zcmNfcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoc3BsaXRtdXhfc2lua19wYWQpOwotICBmYWlsX2lmIChlbmNfc3JjX3BhZCA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfdW5saW5rIChlbmNfc3JjX3BhZCwgc3BsaXRtdXhfc2lua19wYWQpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZW5jX3NyY19wYWQpOwotICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkIChzaW5rLCBzcGxpdG11eF9zaW5rX3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNwbGl0bXV4X3NpbmtfcGFkKTsKLSAgLyogYXQgdGhpcyBwb2ludCB0aGUgcGFkIG11c3QgYmUgcmVsZWFhc2VkIC0gdHJ5IHRvIGZpbmQgaXQgYWdhaW4gdG8gdmVyaWZ5ICovCi0gIHNwbGl0bXV4X3NpbmtfcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNpbmssICJ2aWRlbyIpOwotICBmYWlsX2lmIChzcGxpdG11eF9zaW5rX3BhZCAhPSBOVUxMKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNpbmspOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBjb3VudCA9IGNvdW50X2ZpbGVzICh0bXBkaXIpOwotICBmYWlsX3VubGVzcyAoY291bnQgPT0gMywgIkV4cGVjdGVkIDMgb3V0cHV0IGZpbGVzLCBnb3QgJWQiLCBjb3VudCk7Ci0KLSAgaW5fcGF0dGVybiA9IGdfYnVpbGRfZmlsZW5hbWUgKHRtcGRpciwgIm91dCoub2dnIiwgTlVMTCk7Ci0gIHRlc3RfcGxheWJhY2sgKGluX3BhdHRlcm4pOwotICBnX2ZyZWUgKGluX3BhdHRlcm4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLS8qIEZvciB2ZXJpZnlpbmcgYnVnIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI4OTMgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3NwbGl0bXV4c2lua19yZXVzZV9zaW1wbGUpCi17Ci0gIEdzdEVsZW1lbnQgKnNpbms7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzcGxpdG11eHNpbmsiLCBOVUxMKTsKLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChzaW5rLCAidmlkZW8iKTsKLSAgZmFpbF91bmxlc3MgKHBhZCAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAibG9jYXRpb24iLCAiL2Rldi9udWxsIiwgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoc2luaywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssCi0gICAgICAgICAgR1NUX1NUQVRFX05VTEwpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNpbmssCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzaW5rLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHNpbmssIHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1zcGxpdG11eF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJzcGxpdG11eCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0gIFRDYXNlICp0Y19jaGFpbl9iYXNpYyA9IHRjYXNlX2NyZWF0ZSAoImJhc2ljIik7Ci0gIGdib29sZWFuIGhhdmVfdGhlb3JhLCBoYXZlX29nZzsKLQotICAvKiB3ZSBhc3N1bWUgdGhhdCBpZiBlbmNvZGVyL211eGVyIGFyZSB0aGVyZSwgZGVjb2Rlci9kZW11eGVyIHdpbGwgYmUgYSB3ZWxsICovCi0gIGhhdmVfdGhlb3JhID0gZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwKLSAgICAgICJ0aGVvcmFlbmMiLCBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIDApOwotICBoYXZlX29nZyA9IGdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKGdzdF9yZWdpc3RyeV9nZXQgKCksCi0gICAgICAib2dnbXV4IiwgR1NUX1ZFUlNJT05fTUFKT1IsIEdTVF9WRVJTSU9OX01JTk9SLCAwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbl9iYXNpYyk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluX2Jhc2ljLCB0ZXN0X3NwbGl0bXV4c2lua19yZXVzZV9zaW1wbGUpOwotCi0gIGlmIChoYXZlX3RoZW9yYSAmJiBoYXZlX29nZykgewotICAgIHRjYXNlX2FkZF9jaGVja2VkX2ZpeHR1cmUgKHRjX2NoYWluLCB0ZW1wZGlyX3NldHVwLCB0ZW1wZGlyX2NsZWFudXApOwotCi0gICAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NwbGl0bXV4c3JjKTsKLSAgICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3BsaXRtdXhzcmNfZm9ybWF0X2xvY2F0aW9uKTsKLSAgICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3BsaXRtdXhzaW5rKTsKLSAgfSBlbHNlIHsKLSAgICBHU1RfSU5GTyAoIlNraXBwaW5nIHRlc3RzLCBtaXNzaW5nIHBsdWdpbnM6IHRoZW9yYSBhbmQvb3Igb2dnIik7Ci0gIH0KLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHNwbGl0bXV4KTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3N1bmF1ZGlvLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy9zdW5hdWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRlN2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3N1bmF1ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKiBHU3RyZWFtZXIgdW5pdCB0ZXN0cyBmb3IgdGhlIHN1biBhdWRpbyBlbGVtZW50cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyICA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvcHJvcGVydHlwcm9iZS5oPgotI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL21peGVyLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdW5fYXVkaW9fbWl4ZXJfdHJhY2spCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JldDsKLSAgR3N0RWxlbWVudCAqbWl4ZXI7Ci0gIEdMaXN0ICp0cmFja3MsICpsOwotCi0gIG1peGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgic3VuYXVkaW9taXhlciIsICJzdW5hdWRpb21peGVyIik7Ci0gIGZhaWxfdW5sZXNzIChtaXhlciAhPSBOVUxMLCAiRmFpbGVkIHRvIGNyZWF0ZSAnc3VuYXVkaW9taXhlcicgZWxlbWVudCEiKTsKLQotICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKG1peGVyLCBHU1RfU1RBVEVfUkVBRFkpOwotICBpZiAoc3RhdGVfcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykgewotICAgIGdzdF9vYmplY3RfdW5yZWYgKG1peGVyKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBHU1RfTE9HICgib3BlbmVkIHN1bmF1ZGlvbWl4ZXIiKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9JU19NSVhFUiAobWl4ZXIpLCAiaXMgbm90IGEgR3N0TWl4ZXI/ISIpOwotCi0gIHRyYWNrcyA9IChHTGlzdCAqKSBnc3RfbWl4ZXJfbGlzdF90cmFja3MgKEdTVF9NSVhFUiAobWl4ZXIpKTsKLSAgZm9yIChsID0gdHJhY2tzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR09iamVjdENsYXNzICprbGFzczsKLSAgICBHc3RNaXhlclRyYWNrICp0cmFjazsKLSAgICBnY2hhciAqdWxhYmVsID0gTlVMTCwgKmxhYmVsID0gTlVMTDsKLQotICAgIHRyYWNrID0gR1NUX01JWEVSX1RSQUNLIChsLT5kYXRhKTsKLQotICAgIGdfb2JqZWN0X2dldCAodHJhY2ssICJsYWJlbCIsICZsYWJlbCwgTlVMTCk7Ci0gICAgZmFpbF91bmxlc3MgKGxhYmVsID09IE5VTEwgfHwgZ191dGY4X3ZhbGlkYXRlIChsYWJlbCwgLTEsIE5VTEwpKTsKLQotICAgIC8qIEZJWE1FOiByZW1vdmUgdGhpcyBjaGVjayBvbmNlIHdlIGRlcGVuZCBvbiAtYmFzZSA+PSAwLjEwLjEyLjEgKi8KLSAgICBrbGFzcyA9IEdfT0JKRUNUX0dFVF9DTEFTUyAodHJhY2spOwotICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5IChrbGFzcywgInVudHJhbnNsYXRlZC1sYWJlbCIpKSB7Ci0gICAgICBnX29iamVjdF9nZXQgKHRyYWNrLCAidW50cmFuc2xhdGVkLWxhYmVsIiwgJnVsYWJlbCwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKHVsYWJlbCAhPSBOVUxMKSB7Ci0gICAgICBnY2hhciAqcDsKLQotICAgICAgZm9yIChwID0gdWxhYmVsOyBwICE9IE5VTEwgJiYgKnAgIT0gJ1wwJzsgKytwKSB7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChnX2FzY2lpX2lzcHJpbnQgKCpwKSwKLSAgICAgICAgICAgICJ1bnRyYW5zbGF0ZWQgbGFiZWwgJyVzJyBub3QgcHJpbnRhYmxlIEFTQ0lJIiwgdWxhYmVsKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgR1NUX0RFQlVHICgiJXM6ICVzIiwgR1NUX1NUUl9OVUxMICh1bGFiZWwpLCBHU1RfU1RSX05VTEwgKGxhYmVsKSk7Ci0gICAgZ19mcmVlIChsYWJlbCk7Ci0gICAgZ19mcmVlICh1bGFiZWwpOwotICB9Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChtaXhlciwgR1NUX1NUQVRFX05VTEwpLAotICAgICAgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChtaXhlcik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotc3VuYXVkaW9fc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgic3VuYXVkaW8iKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfc3VuX2F1ZGlvX21peGVyX3RyYWNrKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHN1bmF1ZGlvKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdWRwc2luay5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvdWRwc2luay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTkzOGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3VkcHNpbmsuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKiBHU3RyZWFtZXIgUlRQIHBheWxvYWRlciB1bml0IHRlc3RzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXhpcyBDb21tdW5pY2F0aW9ucyA8ZGV2LWdzdHJlYW1lckBheGlzLmNvbT4KLSAqIEBhdXRob3IgT2dueWFuIFRvbmNoZXYgPG9nbnlhbkBheGlzLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGJhc2VzaW5rLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotI2RlZmluZSBSVFBfSEVBREVSX1NJWkUgMTIKLSNkZWZpbmUgUlRQX1BBWUxPQURfU0laRSAxMDI0Ci0KLS8qCi0gKiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgaW4gdGhlIHJlbmRlciBmdW5jdGlvbiB3aGVuIHVzaW5nIGJ1ZmZlciBsaXN0cwotICovCi1zdGF0aWMgZ3VpbnQgcmVuZGVyX2xpc3RfYnl0ZXNfcmVjZWl2ZWQ7Ci0KLS8qCi0gKiBSZW5kZXIgZnVuY3Rpb24gZm9yIHRlc3RpbmcgdWRwc2luayB3aXRoIGJ1ZmZlciBsaXN0cwotICovCi1zdGF0aWMgR3N0Rmxvd1JldHVybgotdWRwc2lua19yZW5kZXJfbGlzdCAoR3N0QmFzZVNpbmsgKiBzaW5rLCBHc3RCdWZmZXJMaXN0ICogbGlzdCkKLXsKLSAgZ3VpbnQgaSwgbnVtOwotCi0gIG51bSA9IGdzdF9idWZmZXJfbGlzdF9sZW5ndGggKGxpc3QpOwotICBmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZiA9IGdzdF9idWZmZXJfbGlzdF9nZXQgKGxpc3QsIGkpOwotICAgIGdzaXplIHNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplIChidWYpOwotCi0gICAgR1NUX0RFQlVHICgicmVuZGVyZWQgJSIgR19HU0laRV9GT1JNQVQgIiBieXRlcyIsIHNpemUpOwotICAgIHJlbmRlcl9saXN0X2J5dGVzX3JlY2VpdmVkICs9IHNpemU7Ci0gIH0KLQotICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZXRfcmVuZGVyX2xpc3RfZnVuY3Rpb24gKEdzdEVsZW1lbnQgKiBic2luaykKLXsKLSAgR3N0QmFzZVNpbmtDbGFzcyAqYnNjbGFzczsKLQotICBic2NsYXNzID0gR1NUX0JBU0VfU0lOS19HRVRfQ0xBU1MgKChHc3RCYXNlU2luayAqKSBic2luayk7Ci0KLSAgLyogQWRkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgYnVmZmVyIGxpc3QgdGVzdHMgKi8KLSAgYnNjbGFzcy0+cmVuZGVyX2xpc3QgPSB1ZHBzaW5rX3JlbmRlcl9saXN0OwotfQotCi1zdGF0aWMgR3N0QnVmZmVyTGlzdCAqCi1jcmVhdGVfYnVmZmVyX2xpc3QgKGd1aW50ICogZGF0YV9zaXplKQotewotICBHc3RCdWZmZXJMaXN0ICpsaXN0OwotICBHc3RCdWZmZXIgKnJ0cF9idWZmZXI7Ci0gIEdzdEJ1ZmZlciAqZGF0YV9idWZmZXI7Ci0KLSAgbGlzdCA9IGdzdF9idWZmZXJfbGlzdF9uZXcgKCk7Ci0KLSAgLyoqKiBGaXJzdCBncm91cCwgaS5lLiBmaXJzdCBwYWNrZXQuICoqLwotCi0gIC8qIENyZWF0ZSB0aGUgUlRQIGhlYWRlciBidWZmZXIgKi8KLSAgcnRwX2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBSVFBfSEVBREVSX1NJWkUsIE5VTEwpOwotICBnc3RfYnVmZmVyX21lbXNldCAocnRwX2J1ZmZlciwgMCwgMCwgUlRQX0hFQURFUl9TSVpFKTsKLQotICAvKiBDcmVhdGUgdGhlIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSBwYXlsb2FkICovCi0gIGRhdGFfYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIFJUUF9QQVlMT0FEX1NJWkUsIE5VTEwpOwotICBnc3RfYnVmZmVyX21lbXNldCAoZGF0YV9idWZmZXIsIDAsIDAsIFJUUF9QQVlMT0FEX1NJWkUpOwotCi0gIC8qIENyZWF0ZSBhIG5ldyBncm91cCB0byBob2xkIHRoZSBydHAgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCAqLwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBnc3RfYnVmZmVyX2FwcGVuZCAocnRwX2J1ZmZlciwgZGF0YV9idWZmZXIpKTsKLQotICAvKioqICBTZWNvbmQgZ3JvdXAsIGkuZS4gc2Vjb25kIHBhY2tldC4gKioqLwotCi0gIC8qIENyZWF0ZSB0aGUgUlRQIGhlYWRlciBidWZmZXIgKi8KLSAgcnRwX2J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FsbG9jYXRlIChOVUxMLCBSVFBfSEVBREVSX1NJWkUsIE5VTEwpOwotICBnc3RfYnVmZmVyX21lbXNldCAocnRwX2J1ZmZlciwgMCwgMCwgUlRQX0hFQURFUl9TSVpFKTsKLQotICAvKiBDcmVhdGUgdGhlIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSBwYXlsb2FkICovCi0gIGRhdGFfYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYWxsb2NhdGUgKE5VTEwsIFJUUF9QQVlMT0FEX1NJWkUsIE5VTEwpOwotICBnc3RfYnVmZmVyX21lbXNldCAoZGF0YV9idWZmZXIsIDAsIDAsIFJUUF9QQVlMT0FEX1NJWkUpOwotCi0gIC8qIENyZWF0ZSBhIG5ldyBncm91cCB0byBob2xkIHRoZSBydHAgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCAqLwotICBnc3RfYnVmZmVyX2xpc3RfYWRkIChsaXN0LCBnc3RfYnVmZmVyX2FwcGVuZCAocnRwX2J1ZmZlciwgZGF0YV9idWZmZXIpKTsKLQotICAvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIGRhdGEgKi8KLSAgKmRhdGFfc2l6ZSA9IDIgKiBSVFBfSEVBREVSX1NJWkUgKyAyICogUlRQX1BBWUxPQURfU0laRTsKLQotICByZXR1cm4gbGlzdDsKLX0KLQotc3RhdGljIHZvaWQKLXVkcHNpbmtfdGVzdCAoZ2Jvb2xlYW4gdXNlX2J1ZmZlcl9saXN0cykKLXsKLSAgR3N0U2VnbWVudCBzZWdtZW50OwotICBHc3RFbGVtZW50ICp1ZHBzaW5rOwotICBHc3RQYWQgKnNyY3BhZDsKLSAgR3N0QnVmZmVyTGlzdCAqbGlzdDsKLSAgZ3VpbnQgZGF0YV9zaXplOwotCi0gIGxpc3QgPSBjcmVhdGVfYnVmZmVyX2xpc3QgKCZkYXRhX3NpemUpOwotCi0gIHVkcHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInVkcHNpbmsiKTsKLSAgaWYgKHVzZV9idWZmZXJfbGlzdHMpCi0gICAgc2V0X3JlbmRlcl9saXN0X2Z1bmN0aW9uICh1ZHBzaW5rKTsKLQotICBzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZF9ieV9uYW1lICh1ZHBzaW5rLCAmc3JjdGVtcGxhdGUsICJzaW5rIik7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh1ZHBzaW5rLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBUUlVFKTsKLQotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJoZXkgdGhlcmUhIikpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaF9saXN0IChzcmNwYWQsIGxpc3QpLCBHU1RfRkxPV19PSyk7Ci0KLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lICh1ZHBzaW5rLCAic2luayIpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAodWRwc2luayk7Ci0KLSAgaWYgKHVzZV9idWZmZXJfbGlzdHMpCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZGF0YV9zaXplLCByZW5kZXJfbGlzdF9ieXRlc19yZWNlaXZlZCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VkcHNpbmspCi17Ci0gIHVkcHNpbmtfdGVzdCAoRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdWRwc2lua19idWZmZXJsaXN0KQotewotICB1ZHBzaW5rX3Rlc3QgKFRSVUUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VkcHNpbmtfY2xpZW50X2FkZF9yZW1vdmUpCi17Ci0gIEdzdEVsZW1lbnQgKnVkcHNpbms7Ci0KLSAgLyogTm90ZToga2VlcCBpbiBtaW5kIHRoYXQgdGhlc2UgYXJlIGluIGFkZGl0aW9uIHRvIHRoZSBjbGllbnQgYWRkZWQgYnkKLSAgICogdGhlIGhvc3QvcG9ydCBwcm9wZXJ0aWVzIChieSBkZWZhdWx0ICdsb2NhbGhvc3Q6NTAwNCcgKi8KLQotICB1ZHBzaW5rID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ1ZHBzaW5rIik7Ci0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAodWRwc2luaywgInJlbW92ZSIsICJsb2NhbGhvc3QiLCA1MDA0LCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodWRwc2luayk7Ci0KLSAgdWRwc2luayA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgidWRwc2luayIpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJhZGQiLCAiMTI3LjAuMC4xIiwgNTU1NCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHVkcHNpbmspOwotCi0gIHVkcHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInVkcHNpbmsiKTsKLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lICh1ZHBzaW5rLCAiYWRkIiwgIjEyNy4wLjAuMSIsIDU1NTQsIE5VTEwpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJhZGQiLCAiMTI3LjAuMC4xIiwgNTU1NCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHVkcHNpbmspOwotCi0gIHVkcHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInVkcHNpbmsiKTsKLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lICh1ZHBzaW5rLCAiYWRkIiwgIjEyNy4wLjAuMSIsIDU1NTQsIE5VTEwpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJyZW1vdmUiLCAiMTI3LjAuMC4xIiwgNTU1NCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHVkcHNpbmspOwotCi0gIHVkcHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInVkcHNpbmsiKTsKLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lICh1ZHBzaW5rLCAiYWRkIiwgIjEyNy4wLjAuMSIsIDU1NTQsIE5VTEwpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJyZW1vdmUiLCAiMTI3LjAuMC4xIiwgNTU1NSwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHVkcHNpbmspOwotCi0gIHVkcHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInVkcHNpbmsiKTsKLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lICh1ZHBzaW5rLCAiYWRkIiwgIjEyNy4wLjAuMSIsIDU1NTQsIE5VTEwpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJhZGQiLCAiMTI3LjAuMC4xIiwgNTU1NSwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHVkcHNpbmspOwotCi0gIHVkcHNpbmsgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInVkcHNpbmsiKTsKLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lICh1ZHBzaW5rLCAiYWRkIiwgIjEyNy4wLjAuMSIsIDU1NTQsIE5VTEwpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJhZGQiLCAiMTAuMi4wLjEiLCA1NTU0LCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodWRwc2luayk7Ci0KLSAgdWRwc2luayA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgidWRwc2luayIpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJhZGQiLCAiMTI3LjAuMC4xIiwgNTU1NCwgTlVMTCk7Ci0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAodWRwc2luaywgImFkZCIsICIxMC4yLjAuMSIsIDU1NTQsIE5VTEwpOwotICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHVkcHNpbmssICJyZW1vdmUiLCAiMTI3LjAuMC4xIiwgNTU1NCwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHVkcHNpbmspOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi11ZHBzaW5rX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInVkcHNpbmtfdGVzdCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJsaW5lYXIiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdWRwc2luayk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91ZHBzaW5rX2J1ZmZlcmxpc3QpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdWRwc2lua19jbGllbnRfYWRkX3JlbW92ZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh1ZHBzaW5rKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdWRwc3JjLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzcmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3MDVlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy91ZHBzcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKiBHU3RyZWFtZXIgVURQIHNvdXJjZSB1bml0IHRlc3RzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIG5ldD4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmt0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic2luayIsCi0gICAgR1NUX1BBRF9TSU5LLAotICAgIEdTVF9QQURfQUxXQVlTLAotICAgIEdTVF9TVEFUSUNfQ0FQU19BTlkpOwotCi1zdGF0aWMgZ2Jvb2xlYW4KLXVkcHNyY19zZXR1cCAoR3N0RWxlbWVudCAqKiB1ZHBzcmMsIEdTb2NrZXQgKiogc29ja2V0LAotICAgIEdzdFBhZCAqKiBzaW5rcGFkLCBHU29ja2V0QWRkcmVzcyAqKiBzYSkKLXsKLSAgR0luZXRBZGRyZXNzICppYTsKLSAgaW50IHBvcnQgPSAwOwotICBnY2hhciAqczsKLQotICAqdWRwc3JjID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ1ZHBzcmMiKTsKLSAgZmFpbF91bmxlc3MgKCp1ZHBzcmMgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoKnVkcHNyYywgInBvcnQiLCAwLCBOVUxMKTsKLQotICAqc2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZF9ieV9uYW1lICgqdWRwc3JjLCAmc2lua3RlbXBsYXRlLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzICgqc2lua3BhZCAhPSBOVUxMKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlICgqc2lua3BhZCwgVFJVRSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICgqdWRwc3JjLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfb2JqZWN0X2dldCAoKnVkcHNyYywgInBvcnQiLCAmcG9ydCwgTlVMTCk7Ci0gIEdTVF9JTkZPICgidWRwc3JjIHBvcnQgPSAlZCIsIHBvcnQpOwotCi0gICpzb2NrZXQgPSBnX3NvY2tldF9uZXcgKEdfU09DS0VUX0ZBTUlMWV9JUFY0LCBHX1NPQ0tFVF9UWVBFX0RBVEFHUkFNLAotICAgICAgR19TT0NLRVRfUFJPVE9DT0xfVURQLCBOVUxMKTsKLQotICBpZiAoKnNvY2tldCA9PSBOVUxMKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJDb3VsZCBub3QgY3JlYXRlIElQdjQgVURQIHNvY2tldCBmb3IgdW5pdCB0ZXN0Iik7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWEgPSBnX2luZXRfYWRkcmVzc19uZXdfbG9vcGJhY2sgKEdfU09DS0VUX0ZBTUlMWV9JUFY0KTsKLSAgcyA9IGdfaW5ldF9hZGRyZXNzX3RvX3N0cmluZyAoaWEpOwotICBHU1RfTE9HICgiaW5ldCBhZGRyZXNzICVzIiwgcyk7Ci0gIGdfZnJlZSAocyk7Ci0gICpzYSA9IGdfaW5ldF9zb2NrZXRfYWRkcmVzc19uZXcgKGlhLCBwb3J0KTsKLSAgZ19vYmplY3RfdW5yZWYgKGlhKTsKLQotICByZXR1cm4gVFJVRTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdWRwc3JjX2VtcHR5X3BhY2tldCkKLXsKLSAgR1NvY2tldEFkZHJlc3MgKnNhID0gTlVMTDsKLSAgR3N0RWxlbWVudCAqdWRwc3JjID0gTlVMTDsKLSAgR1NvY2tldCAqc29ja2V0ID0gTlVMTDsKLSAgR3N0UGFkICpzaW5rcGFkID0gTlVMTDsKLQotICBpZiAoIXVkcHNyY19zZXR1cCAoJnVkcHNyYywgJnNvY2tldCwgJnNpbmtwYWQsICZzYSkpCi0gICAgZ290byBub19zb2NrZXQ7Ci0KLSAgaWYgKGdfc29ja2V0X3NlbmRfdG8gKHNvY2tldCwgc2EsICJIZUxMMCIsIDAsIE5VTEwsIE5VTEwpID09IDApIHsKLSAgICBHU1RfSU5GTyAoInNlbnQgMCBieXRlcyIpOwotICAgIGlmIChnX3NvY2tldF9zZW5kX3RvIChzb2NrZXQsIHNhLCAiSGVMTDAiLCA2LCBOVUxMLCBOVUxMKSA9PSA2KSB7Ci0gICAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICAgIEdzdEJ1ZmZlciAqYnVmOwotICAgICAgZ3VpbnQgbGVuOwotCi0gICAgICBHU1RfSU5GTyAoInNlbnQgNiBieXRlcyIpOwotCi0gICAgICBnX211dGV4X2xvY2sgKCZjaGVja19tdXRleCk7Ci0gICAgICBkbyB7Ci0gICAgICAgIGdfY29uZF93YWl0ICgmY2hlY2tfY29uZCwgJmNoZWNrX211dGV4KTsKLSAgICAgICAgbGVuID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0gICAgICAgIEdTVF9JTkZPICgiJXUgYnVmZmVycyIsIGxlbik7Ci0gICAgICB9IHdoaWxlIChsZW4gPCAxKTsKLQotICAgICAgLyogd2FpdCBhIGJpdCBtb3JlIGZvciBhIHNlY29uZCBidWZmZXIgKi8KLSAgICAgIGlmIChsZW4gPCAyKSB7Ci0gICAgICAgIGdfY29uZF93YWl0X3VudGlsICgmY2hlY2tfY29uZCwgJmNoZWNrX211dGV4LAotICAgICAgICAgICAgZ19nZXRfbW9ub3RvbmljX3RpbWUgKCkgKyBHX1RJTUVfU1BBTl9TRUNPTkQgLyAxMDApOwotCi0gICAgICAgIGxlbiA9IGdfbGlzdF9sZW5ndGggKGJ1ZmZlcnMpOwotICAgICAgICBHU1RfSU5GTyAoIiV1IGJ1ZmZlcnMiLCBsZW4pOwotICAgICAgfQotCi0gICAgICBmYWlsX3VubGVzcyAobGVuID09IDEgfHwgbGVuID09IDIpOwotCi0gICAgICAvKiBsYXN0IGJ1ZmZlciBzaG91bGQgYmUgb3VyIEhlTEwwIHN0cmluZyAqLwotICAgICAgYnVmID0gR1NUX0JVRkZFUiAoZ19saXN0X250aF9kYXRhIChidWZmZXJzLCBsZW4gLSAxKSk7Ci0gICAgICBnc3RfYnVmZmVyX21hcCAoYnVmLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWFwLnNpemUsIDYpOwotICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoKGdjaGFyICopIG1hcC5kYXRhLCAiSGVMTDAiKTsKLSAgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgICAgIC8qIGlmIHRoZXJlJ3MgYW5vdGhlciBidWZmZXIsIGl0IHNob3VsZCBiZSAwIGJ5dGVzICovCi0gICAgICBpZiAobGVuID09IDIpIHsKLSAgICAgICAgYnVmID0gR1NUX0JVRkZFUiAoZ19saXN0X250aF9kYXRhIChidWZmZXJzLCAwKSk7Ci0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIDApOwotICAgICAgfQotICAgICAgZ19tdXRleF91bmxvY2sgKCZjaGVja19tdXRleCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEdTVF9XQVJOSU5HICgic2VuZF90byg2IGJ5dGVzKSBmYWlsZWQiKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJzZW5kX3RvKDAgYnl0ZXMpIGZhaWxlZCIpOwotICB9Ci0KLW5vX3NvY2tldDoKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHVkcHNyYywgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9wYWRfYnlfbmFtZSAodWRwc3JjLCAic3JjIik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50ICh1ZHBzcmMpOwotCi0gIGdfb2JqZWN0X3VucmVmIChzb2NrZXQpOwotICBnX29iamVjdF91bnJlZiAoc2EpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VkcHNyYykKLXsKLSAgR1NvY2tldEFkZHJlc3MgKnNhID0gTlVMTDsKLSAgR3N0RWxlbWVudCAqdWRwc3JjID0gTlVMTDsKLSAgR1NvY2tldCAqc29ja2V0ID0gTlVMTDsKLSAgR3N0UGFkICpzaW5rcGFkID0gTlVMTDsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1lbW9yeSAqbWVtOwotICBnY2hhciBkYXRhWzQ4MDAwXTsKLSAgZ3NpemUgbWF4X3NpemU7Ci0gIGludCBpLCBsZW47Ci0KLSAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoZGF0YSk7ICsraSkKLSAgICBkYXRhW2ldID0gaSAmIDB4ZmY7Ci0KLSAgaWYgKCF1ZHBzcmNfc2V0dXAgKCZ1ZHBzcmMsICZzb2NrZXQsICZzaW5rcGFkLCAmc2EpKQotICAgIGdvdG8gbm9fc29ja2V0OwotCi0gIGlmIChnX3NvY2tldF9zZW5kX3RvIChzb2NrZXQsIHNhLCBkYXRhLCA0ODAwMCwgTlVMTCwgTlVMTCkgIT0gNDgwMDApCi0gICAgZ290byBzZW5kX2ZhaWx1cmU7Ci0KLSAgaWYgKGdfc29ja2V0X3NlbmRfdG8gKHNvY2tldCwgc2EsIGRhdGEsIDIxMDAwLCBOVUxMLCBOVUxMKSAhPSAyMTAwMCkKLSAgICBnb3RvIHNlbmRfZmFpbHVyZTsKLQotICBpZiAoZ19zb2NrZXRfc2VuZF90byAoc29ja2V0LCBzYSwgZGF0YSwgNTAwLCBOVUxMLCBOVUxMKSAhPSA1MDApCi0gICAgZ290byBzZW5kX2ZhaWx1cmU7Ci0KLSAgaWYgKGdfc29ja2V0X3NlbmRfdG8gKHNvY2tldCwgc2EsIGRhdGEsIDE2MDAsIE5VTEwsIE5VTEwpICE9IDE2MDApCi0gICAgZ290byBzZW5kX2ZhaWx1cmU7Ci0KLSAgaWYgKGdfc29ja2V0X3NlbmRfdG8gKHNvY2tldCwgc2EsIGRhdGEsIDE2MDAsIE5VTEwsIE5VTEwpICE9IDE0MDApCi0gICAgZ290byBzZW5kX2ZhaWx1cmU7Ci0KLSAgR1NUX0lORk8gKCJzZW50IHNvbWUgcGFja2V0cyIpOwotCi0gIGdfbXV0ZXhfbG9jayAoJmNoZWNrX211dGV4KTsKLSAgZG8gewotICAgIGdfY29uZF93YWl0ICgmY2hlY2tfY29uZCwgJmNoZWNrX211dGV4KTsKLSAgICBsZW4gPSBnX2xpc3RfbGVuZ3RoIChidWZmZXJzKTsKLSAgICBHU1RfSU5GTyAoIiV1IGJ1ZmZlcnMiLCBsZW4pOwotICB9IHdoaWxlIChsZW4gPCA1KTsKLQotICAvKiBjaGVjayB0aGF0IGxhcmdlIHBhY2tldHMgYXJlIG1hZGUgdXAgb2YgbXVsdGlwbGUgbWVtb3J5IGNodW5rcyBhbmQgdGhhdAotICAgKiB0aGUgZmlyc3Qgb25lIGlzIGZhaXJseSBzbWFsbCAqLwotICBidWYgPSBHU1RfQlVGRkVSIChnX2xpc3RfbnRoX2RhdGEgKGJ1ZmZlcnMsIDApKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSwgNDgwMDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpLCAyKTsKLSAgbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSAoYnVmLCAwKTsKLSAgZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgJm1heF9zaXplKTsKLSAgZmFpbF91bmxlc3MgKG1heF9zaXplIDw9IDIwMDApOwotCi0gIGJ1ZiA9IEdTVF9CVUZGRVIgKGdfbGlzdF9udGhfZGF0YSAoYnVmZmVycywgMSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpLCAyMTAwMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZiksIDIpOwotICBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5IChidWYsIDApOwotICBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCBOVUxMLCAmbWF4X3NpemUpOwotICBmYWlsX3VubGVzcyAobWF4X3NpemUgPD0gMjAwMCk7Ci0KLSAgYnVmID0gR1NUX0JVRkZFUiAoZ19saXN0X250aF9kYXRhIChidWZmZXJzLCAyKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIDUwMCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfbl9tZW1vcnkgKGJ1ZiksIDEpOwotICBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5IChidWYsIDApOwotICBnc3RfbWVtb3J5X2dldF9zaXplcyAobWVtLCBOVUxMLCAmbWF4X3NpemUpOwotICBmYWlsX3VubGVzcyAobWF4X3NpemUgPD0gMjAwMCk7Ci0KLSAgYnVmID0gR1NUX0JVRkZFUiAoZ19saXN0X250aF9kYXRhIChidWZmZXJzLCAzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9idWZmZXJfZ2V0X3NpemUgKGJ1ZiksIDE2MDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX25fbWVtb3J5IChidWYpLCAyKTsKLSAgbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeSAoYnVmLCAwKTsKLSAgZ3N0X21lbW9yeV9nZXRfc2l6ZXMgKG1lbSwgTlVMTCwgJm1heF9zaXplKTsKLSAgZmFpbF91bmxlc3MgKG1heF9zaXplIDw9IDIwMDApOwotCi0gIGJ1ZiA9IEdTVF9CVUZGRVIgKGdfbGlzdF9udGhfZGF0YSAoYnVmZmVycywgNCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYnVmZmVyX2dldF9zaXplIChidWYpLCAxNDAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9uX21lbW9yeSAoYnVmKSwgMSk7Ci0gIG1lbSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkgKGJ1ZiwgMCk7Ci0gIGdzdF9tZW1vcnlfZ2V0X3NpemVzIChtZW0sIE5VTEwsICZtYXhfc2l6ZSk7Ci0gIGZhaWxfdW5sZXNzIChtYXhfc2l6ZSA8PSAyMDAwKTsKLQotICBnX2xpc3RfZm9yZWFjaCAoYnVmZmVycywgKEdGdW5jKSBnc3RfYnVmZmVyX3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGJ1ZmZlcnMpOwotICBidWZmZXJzID0gTlVMTDsKLQotbm9fc29ja2V0Ogotc2VuZF9mYWlsdXJlOgotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAodWRwc3JjLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3BhZF9ieV9uYW1lICh1ZHBzcmMsICJzcmMiKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHVkcHNyYyk7Ci0KLSAgZ19vYmplY3RfdW5yZWYgKHNvY2tldCk7Ci0gIGdfb2JqZWN0X3VucmVmIChzYSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXVkcHNyY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ1ZHBzcmMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgidWRwc3JjIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF91ZHBzcmNfZW1wdHlfcGFja2V0KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VkcHNyYyk7Ci0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAodWRwc3JjKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9ib3guYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvYm94LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkMjY1MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9ib3guYworKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIHVuaXQgdGVzdCBmb3IgdGhlIHZpZGVvYm94IGVsZW1lbnQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmF2aSBLaXJhbiBLIE4gPHJhdmkua2lyYW5Ac2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0JveFRlc3RDb250ZXh0Ci17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdEVsZW1lbnQgKmZpbHRlcjsKLSAgR3N0RWxlbWVudCAqYm94OwotICBHc3RFbGVtZW50ICpmaWx0ZXIyOwotICBHc3RFbGVtZW50ICpzaW5rOwotfSBHc3RWaWRlb0JveFRlc3RDb250ZXh0OwotCi10eXBlZGVmIHN0cnVjdCBfRm9ybWF0Q29udmVyc2lvbgotewotICBjb25zdCBnY2hhciAqaW5fY2FwczsKLSAgY29uc3QgZ2NoYXIgKm91dF9jYXBzOwotICBnYm9vbGVhbiBleHBlY3RlZF9yZXN1bHQ7Ci19IEZvcm1hdENvbnZlcnNpb247Ci0KLQotLyoKLSAqIFVwZGF0ZSB0aGlzIHRhYmxlIGFzIGFuZCB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIHN1cHBvcnRlZChvciB1bnN1cHBvcnRlZCkgaW4gdmlkZW9ib3gKLSAqLwotc3RhdGljIGNvbnN0IEZvcm1hdENvbnZlcnNpb24gY29udmVyc2lvbl90YWJsZVtdID0gewotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17UkdCQX0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtBWVVWfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17QVlVVn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtSR0JBfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17STQyMH0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtBWVVWfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17QVlVVn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtJNDIwfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17STQyMH0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtZVjEyfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17WVYxMn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtBWVVWfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17WVYxMn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtJNDIwfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17QVlVVn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtZVjEyfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17QVlVVn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXt4UkdCfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17eFJHQn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXt4UkdCfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17eFJHQn0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtBWVVWfSIsIFRSVUV9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17R1JBWTh9IiwgInZpZGVvL3gtcmF3LGZvcm1hdD17R1JBWTE2X0xFfSIsIEZBTFNFfSwKLSAgeyJ2aWRlby94LXJhdyxmb3JtYXQ9e0dSQVk4fSIsICJ2aWRlby94LXJhdyxmb3JtYXQ9e0dSQVkxNl9CRX0iLCBGQUxTRX0sCi0gIHsidmlkZW8veC1yYXcsZm9ybWF0PXtZNDQ0fSIsICJ2aWRlby94LXJhdyxmb3JtYXQ9e1k0MkJ9IiwgRkFMU0V9LAotICB7InZpZGVvL3gtcmF3LGZvcm1hdD17WTQ0NH0iLCAidmlkZW8veC1yYXcsZm9ybWF0PXtZNDFCfSIsIEZBTFNFfSwKLSAgeyJ2aWRlby94LXJhdyxmb3JtYXQ9e1k0MkJ9IiwgInZpZGVvL3gtcmF3LGZvcm1hdD17WTQxQn0iLCBGQUxTRX0KLX07Ci0KLQotc3RhdGljIGdib29sZWFuCi1idXNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSBkYXRhOwotCi0gIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOnsKLSAgICAgIEdTVF9MT0cgKCJFT1MgZXZlbnQgcmVjZWl2ZWQiKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgIGdfZXJyb3IgKCJFcnJvciBmcm9tICVzOiAlcyAoJXMpXG4iLAotICAgICAgICAgIEdTVF9FTEVNRU5UX05BTUUgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpLCBnZXJyb3ItPm1lc3NhZ2UsCi0gICAgICAgICAgR1NUX1NUUl9OVUxMIChkZWJ1ZykpOwotICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgZ19mcmVlIChkZWJ1Zyk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi12aWRlb2JveF90ZXN0X2luaXRfY29udGV4dCAoR3N0VmlkZW9Cb3hUZXN0Q29udGV4dCAqIGN0eCkKLXsKLSAgZmFpbF91bmxlc3MgKGN0eCAhPSBOVUxMKTsKLQotICBjdHgtPnBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPnBpcGVsaW5lICE9IE5VTEwpOwotICBjdHgtPnNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKGN0eC0+c3JjICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIHZpZGVvdGVzdHNyYyBlbGVtZW50Iik7Ci0gIGN0eC0+ZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsICJmaWx0ZXIiKTsKLSAgZmFpbF91bmxlc3MgKGN0eC0+ZmlsdGVyICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGNhcHNmaWx0ZXIgZWxlbWVudCIpOwotICBjdHgtPmJveCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvYm94IiwgImJveCIpOwotICBmYWlsX3VubGVzcyAoY3R4LT5ib3ggIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgdmlkZW9ib3ggZWxlbWVudCIpOwotICBjdHgtPmZpbHRlcjIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZpbHRlcjIiKTsKLSAgZmFpbF91bmxlc3MgKGN0eC0+ZmlsdGVyMiAhPSBOVUxMLAotICAgICAgIkZhaWxlZCB0byBjcmVhdGUgc2Vjb25kIGNhcHNmaWx0ZXIgZWxlbWVudCIpOwotICBjdHgtPnNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPnNpbmsgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgZmFrZXNpbmsgZWxlbWVudCIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGN0eC0+cGlwZWxpbmUpLCBjdHgtPnNyYywgY3R4LT5maWx0ZXIsCi0gICAgICBjdHgtPmJveCwgY3R4LT5maWx0ZXIyLCBjdHgtPnNpbmssIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19tYW55IChjdHgtPnNyYywgY3R4LT5maWx0ZXIsIGN0eC0+Ym94LAotICAgICAgICAgIGN0eC0+ZmlsdGVyMiwgY3R4LT5zaW5rLCBOVUxMKSA9PSBUUlVFLCAiQ2FuIG5vdCBsaW5rIGVsZW1lbnRzIik7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY3R4LT5waXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUkVBRFkpICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwKLSAgICAgICJjb3VsZG4ndCBzZXQgcGlwZWxpbmUgdG8gUkVBRFkgc3RhdGUiKTsKLQotICBHU1RfTE9HICgidmlkZW9ib3ggY29udGV4dCBpbml0ZWQiKTsKLX0KLQotc3RhdGljIHZvaWQKLXZpZGVvYm94X3Rlc3RfZGVpbml0X2NvbnRleHQgKEdzdFZpZGVvQm94VGVzdENvbnRleHQgKiBjdHgpCi17Ci0gIEdTVF9MT0cgKCJkZWluaXRpbmcgdmlkZW9ib3ggY29udGV4dCIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY3R4LT5waXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjdHgtPnBpcGVsaW5lKTsKLSAgbWVtc2V0IChjdHgsIDB4MDAsIHNpemVvZiAoR3N0VmlkZW9Cb3hUZXN0Q29udGV4dCkpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jYXBzX3RyYW5zZm9ybSkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OwotICBHc3RWaWRlb0JveFRlc3RDb250ZXh0IGN0eDsKLSAgZ3VpbnQgY29udmVyc2lvbnNfdGVzdF9zaXplOwotICBndWludCBpdHI7Ci0gIGdib29sZWFuIGxpbmtfcmVzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIHZpZGVvYm94X3Rlc3RfaW5pdF9jb250ZXh0ICgmY3R4KTsKLSAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChjdHguc3JjKSwgIm51bS1idWZmZXJzIiwgIjEiKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGxvb3AgIT0gTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoY3R4LnBpcGVsaW5lKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMKTsKLQotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfaGFuZGxlciwgbG9vcCk7Ci0KLSAgY29udmVyc2lvbnNfdGVzdF9zaXplID0gR19OX0VMRU1FTlRTIChjb252ZXJzaW9uX3RhYmxlKTsKLSAgZm9yIChpdHIgPSAwOyBpdHIgPCBjb252ZXJzaW9uc190ZXN0X3NpemU7IGl0cisrKSB7Ci0gICAgZ3N0X2VsZW1lbnRfdW5saW5rX21hbnkgKGN0eC5zcmMsIGN0eC5maWx0ZXIsIGN0eC5ib3gsIGN0eC5maWx0ZXIyLAotICAgICAgICBjdHguc2luaywgTlVMTCk7Ci0gICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChjdHguZmlsdGVyKSwgImNhcHMiLAotICAgICAgICBjb252ZXJzaW9uX3RhYmxlW2l0cl0uaW5fY2Fwcyk7Ci0gICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcgKEdfT0JKRUNUIChjdHguZmlsdGVyMiksICJjYXBzIiwKLSAgICAgICAgY29udmVyc2lvbl90YWJsZVtpdHJdLm91dF9jYXBzKTsKLQotICAgIC8qIExpbmsgd2l0aCBuZXcgaW5wdXQgYW5kIG91dHB1dCBmb3JtYXQgZnJvbSBjb252ZXJzaW9uIHRhYmxlICovCi0gICAgbGlua19yZXMgPQotICAgICAgICBnc3RfZWxlbWVudF9saW5rX21hbnkgKGN0eC5zcmMsIGN0eC5maWx0ZXIsIGN0eC5ib3gsIGN0eC5maWx0ZXIyLAotICAgICAgICBjdHguc2luaywgTlVMTCk7Ci0KLSAgICAvKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGZvcm1hdCBjb252ZXJzaW9uIGlzIHN1cHBvcnRlZCBvciBub3QgYnkgdmlkZW9ib3ggKi8KLSAgICBmYWlsX3VubGVzcyAobGlua19yZXMgPT0gY29udmVyc2lvbl90YWJsZVtpdHJdLmV4cGVjdGVkX3Jlc3VsdCwKLSAgICAgICAgInZpZGVvYm94IGNhbiBub3QgY29udmVydCBmcm9tICclcycnIHRvICclcyciLAotICAgICAgICBjb252ZXJzaW9uX3RhYmxlW2l0cl0uaW5fY2FwcywgY29udmVyc2lvbl90YWJsZVtpdHJdLm91dF9jYXBzKTsKLQotICAgIGlmIChsaW5rX3JlcyA9PSBGQUxTRSkgewotICAgICAgR1NUX0xPRyAoImVsZW1lbnRzIGxpbmtpbmcgZmFpbGVkIik7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN0eC5waXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAotICAgICAgICAiY291bGRuJ3Qgc2V0IHBpcGVsaW5lIHRvIFBMQVlJTkcgc3RhdGUiKTsKLQotICAgIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgICBzdGF0ZV9yZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN0eC5waXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBmYWlsX3VubGVzcyAoc3RhdGVfcmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwKLSAgICAgICAgImNvdWxkbid0IHNldCBwaXBlbGluZSB0byBSRUFEWSBzdGF0ZSIpOwotICB9Ci0KLSAgZ3N0X2J1c19yZW1vdmVfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICB2aWRlb2JveF90ZXN0X2RlaW5pdF9jb250ZXh0ICgmY3R4KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi12aWRlb2JveF9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ2aWRlb2JveCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jYXBzX3RyYW5zZm9ybSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh2aWRlb2JveCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy92aWRlb2Nyb3AuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTc2ZTVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvY3JvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsODE5ICswLDAgQEAKLS8qIEdTdHJlYW1lciB1bml0IHRlc3QgZm9yIHRoZSB2aWRlb2Nyb3AgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2lmZGVmIEhBVkVfVkFMR1JJTkQKLSMgaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvYmFzZS9nc3RiYXNldHJhbnNmb3JtLmg+Ci0KLS8qIHJldHVybiBhIGxpc3Qgb2YgY2FwcyB3aGVyZSB3ZSBvbmx5IG5lZWQgdG8gc2V0Ci0gKiB3aWR0aCBhbmQgaGVpZ2h0IHRvIGdldCBmaXhlZCBjYXBzICovCi1zdGF0aWMgR0xpc3QgKgotdmlkZW9fY3JvcF9nZXRfdGVzdF9jYXBzIChHc3RFbGVtZW50ICogdmlkZW9jcm9wKQotewotICBHc3RDYXBzICp0ZW1wbCwgKmFsbG93ZWRfY2FwczsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdMaXN0ICpsaXN0ID0gTlVMTDsKLSAgZ3VpbnQgaTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodmlkZW9jcm9wLCAic3JjIik7Ci0gIGZhaWxfdW5sZXNzIChzcmNwYWQgIT0gTlVMTCk7Ci0gIHRlbXBsID0gZ3N0X3BhZF9nZXRfcGFkX3RlbXBsYXRlX2NhcHMgKHNyY3BhZCk7Ci0gIGZhaWxfdW5sZXNzICh0ZW1wbCAhPSBOVUxMKTsKLQotICBhbGxvd2VkX2NhcHMgPSBnc3RfY2Fwc19ub3JtYWxpemUgKHRlbXBsKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3NpemUgKGFsbG93ZWRfY2Fwcyk7ICsraSkgewotICAgIEdzdFN0cnVjdHVyZSAqbmV3X3N0cnVjdHVyZTsKLSAgICBHc3RDYXBzICpzaW5nbGVfY2FwczsKLQotICAgIHNpbmdsZV9jYXBzID0gZ3N0X2NhcHNfbmV3X2VtcHR5ICgpOwotICAgIG5ld19zdHJ1Y3R1cmUgPQotICAgICAgICBnc3Rfc3RydWN0dXJlX2NvcHkgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFsbG93ZWRfY2FwcywgaSkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChuZXdfc3RydWN0dXJlLCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sCi0gICAgICAgIDEsIDEsIE5VTEwpOwotICAgIGdzdF9zdHJ1Y3R1cmVfcmVtb3ZlX2ZpZWxkIChuZXdfc3RydWN0dXJlLCAid2lkdGgiKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAobmV3X3N0cnVjdHVyZSwgImhlaWdodCIpOwotICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUgKHNpbmdsZV9jYXBzLCBuZXdfc3RydWN0dXJlKTsKLQotICAgIEdTVF9ERUJVRyAoImhhdmUgY2FwcyAlIiBHU1RfUFRSX0ZPUk1BVCwgc2luZ2xlX2NhcHMpOwotICAgIC8qIHNob3VsZCBiZSBmaXhlZCB3aXRob3V0IHdpZHRoL2hlaWdodCAqLwotICAgIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19maXhlZCAoc2luZ2xlX2NhcHMpKTsKLQotICAgIGxpc3QgPSBnX2xpc3RfcHJlcGVuZCAobGlzdCwgc2luZ2xlX2NhcHMpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGFsbG93ZWRfY2Fwcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3VuaXRfc2l6ZXMpCi17Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqY3NwX2tsYXNzLCAqdmNyb3Bfa2xhc3M7Ci0gIEdzdEVsZW1lbnQgKnZpZGVvY3JvcCwgKmNzcDsKLSAgR0xpc3QgKmNhcHNfbGlzdCwgKmw7Ci0KLSAgdmlkZW9jcm9wID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jcm9wIiwgInZpZGVvY3JvcCIpOwotICBmYWlsX3VubGVzcyAodmlkZW9jcm9wICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIHZpZGVvY3JvcCBlbGVtZW50Iik7Ci0gIHZjcm9wX2tsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAodmlkZW9jcm9wKTsKLQotICBjc3AgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb2NvbnZlcnQiLCAiY3NwIik7Ci0gIGZhaWxfdW5sZXNzIChjc3AgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgdmlkZW9jb252ZXJ0IGVsZW1lbnQiKTsKLSAgY3NwX2tsYXNzID0gR1NUX0JBU0VfVFJBTlNGT1JNX0dFVF9DTEFTUyAoY3NwKTsKLQotICBjYXBzX2xpc3QgPSB2aWRlb19jcm9wX2dldF90ZXN0X2NhcHMgKHZpZGVvY3JvcCk7Ci0KLSAgZm9yIChsID0gY2Fwc19saXN0OyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgY29uc3Qgc3RydWN0Ci0gICAgewotICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICAgIH0gc2l6ZXNfdG9fdHJ5W10gPSB7Ci0gICAgICB7Ci0gICAgICAxNjAsIDEyMH0sIHsKLSAgICAgIDE2MSwgMTIwfSwgewotICAgICAgMTYwLCAxMjF9LCB7Ci0gICAgICAxNjEsIDEyMX0sIHsKLSAgICAgIDE1OSwgMTIwfSwgewotICAgICAgMTYwLCAxMTl9LCB7Ci0gICAgICAxNTksIDExOX0sIHsKLSAgICAgIDE1OSwgMTIxfQotICAgIH07Ci0gICAgR3N0U3RydWN0dXJlICpzOwotICAgIEdzdENhcHMgKmNhcHM7Ci0gICAgZ2ludCBpOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKEdTVF9DQVBTIChsLT5kYXRhKSk7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICAgIGZhaWxfdW5sZXNzIChzICE9IE5VTEwpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc2l6ZXNfdG9fdHJ5KTsgKytpKSB7Ci0gICAgICBnY2hhciAqY2Fwc19zdHI7Ci0gICAgICBnc2l6ZSBjc3Bfc2l6ZSA9IDA7Ci0gICAgICBnc2l6ZSB2Y19zaXplID0gMDsKLQotICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQgKHMsICJ3aWR0aCIsIEdfVFlQRV9JTlQsIHNpemVzX3RvX3RyeVtpXS53aWR0aCwKLSAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgc2l6ZXNfdG9fdHJ5W2ldLmhlaWdodCwgTlVMTCk7Ci0KLSAgICAgIGNhcHNfc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKLSAgICAgIEdTVF9JTkZPICgiVGVzdGluZyB1bml0IHNpemUgZm9yICVzIiwgY2Fwc19zdHIpOwotCi0gICAgICAvKiBza2lwIGlmIHZpZGVvY29udmVydCBkb2Vzbid0IHN1cHBvcnQgdGhlc2UgY2FwcwotICAgICAgICogKG9ubHkgd29ya3Mgd2l0aCBnc3QtcGx1Z2lucy1iYXNlIDAuMTAuOS4xIG9yIGxhdGVyKSAqLwotICAgICAgaWYgKCFjc3Bfa2xhc3MtPmdldF91bml0X3NpemUgKChHc3RCYXNlVHJhbnNmb3JtICopIGNzcCwgY2FwcywgJmNzcF9zaXplKSkgewotICAgICAgICBHU1RfSU5GTyAoInZpZGVvY29udmVydCBkb2VzIG5vdCBzdXBwb3J0IGZvcm1hdCAlcyIsIGNhcHNfc3RyKTsKLSAgICAgICAgZ19mcmVlIChjYXBzX3N0cik7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBmYWlsX3VubGVzcyAodmNyb3Bfa2xhc3MtPmdldF91bml0X3NpemUgKChHc3RCYXNlVHJhbnNmb3JtICopIHZpZGVvY3JvcCwKLSAgICAgICAgICAgICAgY2FwcywgJnZjX3NpemUpKTsKLQotICAgICAgZmFpbF91bmxlc3MgKHZjX3NpemUgPT0gY3NwX3NpemUsCi0gICAgICAgICAgInZpZGVvY3JvcCBhbmQgdmlkZW9jb252ZXJ0IHJldHVybiBkaWZmZXJlbnQgdW5pdCBzaXplcyBmb3IgIgotICAgICAgICAgICJjYXBzICVzOiB2Y19zaXplPSVkLCBjc3Bfc2l6ZT0lZCIsIGNhcHNfc3RyLCB2Y19zaXplLCBjc3Bfc2l6ZSk7Ci0KLSAgICAgIGdfZnJlZSAoY2Fwc19zdHIpOwotICAgIH0KLQotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotCi0gIGdfbGlzdF9mb3JlYWNoIChjYXBzX2xpc3QsIChHRnVuYykgZ3N0X2NhcHNfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoY2Fwc19saXN0KTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChjc3ApOwotICBnc3Rfb2JqZWN0X3VucmVmICh2aWRlb2Nyb3ApOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdEVsZW1lbnQgKmZpbHRlcjsKLSAgR3N0RWxlbWVudCAqY3JvcDsKLSAgR3N0RWxlbWVudCAqZmlsdGVyMjsKLSAgR3N0RWxlbWVudCAqc2luazsKLSAgR3N0QnVmZmVyICpsYXN0X2J1ZjsKLSAgR3N0Q2FwcyAqbGFzdF9jYXBzOwotfSBHc3RWaWRlb0Nyb3BUZXN0Q29udGV4dDsKLQotc3RhdGljIHZvaWQKLWhhbmRvZmZfY2IgKEdzdEVsZW1lbnQgKiBzaW5rLCBHc3RCdWZmZXIgKiBidWYsIEdzdFBhZCAqIHBhZCwKLSAgICBHc3RWaWRlb0Nyb3BUZXN0Q29udGV4dCAqIGN0eCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZjdHgtPmxhc3RfYnVmLCBidWYpOwotICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpOwotICBnc3RfY2Fwc19yZXBsYWNlICgmY3R4LT5sYXN0X2NhcHMsIGNhcHMpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi12aWRlb2Nyb3BfdGVzdF9jcm9wcGluZ19pbml0X2NvbnRleHQgKEdzdFZpZGVvQ3JvcFRlc3RDb250ZXh0ICogY3R4KQotewotICBmYWlsX3VubGVzcyAoY3R4ICE9IE5VTEwpOwotCi0gIGN0eC0+cGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKGN0eC0+cGlwZWxpbmUgIT0gTlVMTCk7Ci0gIGN0eC0+c3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYyIpOwotICBmYWlsX3VubGVzcyAoY3R4LT5zcmMgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgdmlkZW90ZXN0c3JjIGVsZW1lbnQiKTsKLSAgY3R4LT5maWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYXBzZmlsdGVyIiwgImZpbHRlciIpOwotICBmYWlsX3VubGVzcyAoY3R4LT5maWx0ZXIgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgY2Fwc2ZpbHRlciBlbGVtZW50Iik7Ci0gIGN0eC0+Y3JvcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvY3JvcCIsICJjcm9wIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPmNyb3AgIT0gTlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgdmlkZW9jcm9wIGVsZW1lbnQiKTsKLSAgY3R4LT5maWx0ZXIyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsICJmaWx0ZXIyIik7Ci0gIGZhaWxfdW5sZXNzIChjdHgtPmZpbHRlcjIgIT0gTlVMTCwKLSAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHNlY29uZCBjYXBzZmlsdGVyIGVsZW1lbnQiKTsKLSAgY3R4LT5zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBmYWlsX3VubGVzcyAoY3R4LT5zaW5rICE9IE5VTEwsICJGYWlsZWQgdG8gY3JlYXRlIGZha2VzaW5rIGVsZW1lbnQiKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChjdHgtPnBpcGVsaW5lKSwgY3R4LT5zcmMsIGN0eC0+ZmlsdGVyLAotICAgICAgY3R4LT5jcm9wLCBjdHgtPmZpbHRlcjIsIGN0eC0+c2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoY3R4LT5zcmMsIGN0eC0+ZmlsdGVyLCBjdHgtPmNyb3AsIGN0eC0+ZmlsdGVyMiwKLSAgICAgIGN0eC0+c2luaywgTlVMTCk7Ci0KLSAgLyogc2V0IHBhdHRlcm4gdG8gJ3JlZCcgLSBmb3Igb3VyIHB1cnBvc2VzIGl0IGRvZXNuJ3QgbWF0dGVyIGFueXdheSAqLwotICBnX29iamVjdF9zZXQgKGN0eC0+c3JjLCAicGF0dGVybiIsIDQsIE5VTEwpOwotCi0gIGdfb2JqZWN0X3NldCAoY3R4LT5zaW5rLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGN0eC0+c2luaywgInByZXJvbGwtaGFuZG9mZiIsIEdfQ0FMTEJBQ0sgKGhhbmRvZmZfY2IpLCBjdHgpOwotCi0gIGN0eC0+bGFzdF9idWYgPSBOVUxMOwotICBjdHgtPmxhc3RfY2FwcyA9IE5VTEw7Ci0KLSAgR1NUX0xPRyAoImNvbnRleHQgaW5pdGVkIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi12aWRlb2Nyb3BfdGVzdF9jcm9wcGluZ19kZWluaXRfY29udGV4dCAoR3N0VmlkZW9Dcm9wVGVzdENvbnRleHQgKiBjdHgpCi17Ci0gIEdTVF9MT0cgKCJkZWluaXRpbmcgY29udGV4dCIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY3R4LT5waXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChjdHgtPnBpcGVsaW5lKTsKLSAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmY3R4LT5sYXN0X2J1ZiwgTlVMTCk7Ci0gIGdzdF9jYXBzX3JlcGxhY2UgKCZjdHgtPmxhc3RfY2FwcywgTlVMTCk7Ci0gIG1lbXNldCAoY3R4LCAweDAwLCBzaXplb2YgKEdzdFZpZGVvQ3JvcFRlc3RDb250ZXh0KSk7Ci19Ci0KLXR5cGVkZWYgdm9pZCAoKkdzdFZpZGVvQ3JvcFRlc3RCdWZmZXJGdW5jKSAoR3N0QnVmZmVyICogYnVmZmVyLCBHc3RDYXBzICogY2Fwcyk7Ci0KLXN0YXRpYyB2b2lkCi12aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoR3N0VmlkZW9Dcm9wVGVzdENvbnRleHQgKiBjdHgsIEdzdENhcHMgKiBpbl9jYXBzLAotICAgIEdzdENhcHMgKiBvdXRfY2FwcywgZ2ludCBsZWZ0LCBnaW50IHJpZ2h0LCBnaW50IHRvcCwgZ2ludCBib3R0b20sCi0gICAgR3N0VmlkZW9Dcm9wVGVzdEJ1ZmZlckZ1bmMgZnVuYykKLXsKLSAgR1NUX0xPRyAoImxydGIgPSAlMDN1ICUwM3UgJTAzdSAlMDN1LCBpbl9jYXBzID0gJSIgR1NUX1BUUl9GT1JNQVQKLSAgICAgICIsIG91dF9jYXBzID0gJSIgR1NUX1BUUl9GT1JNQVQsIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgaW5fY2FwcywKLSAgICAgIG91dF9jYXBzKTsKLQotICBnX29iamVjdF9zZXQgKGN0eC0+ZmlsdGVyLCAiY2FwcyIsIGluX2NhcHMsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKGN0eC0+ZmlsdGVyMiwgImNhcHMiLCBvdXRfY2FwcywgTlVMTCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjdHgtPmNyb3AsICJsZWZ0IiwgbGVmdCwgInJpZ2h0IiwgcmlnaHQsICJ0b3AiLCB0b3AsCi0gICAgICAiYm90dG9tIiwgYm90dG9tLCBOVUxMKTsKLQotICAvKiB0aGlzIHdpbGwgZmFpbCBpZiB2aWRlb3Rlc3RzcmMgZG9lc24ndCBzdXBwb3J0IG91ciBmb3JtYXQ7IHdlIG5lZWQKLSAgICogdmlkZW90ZXN0c3JjIGZyb20gLWJhc2UgQ1ZTIDAuMTAuOS4xIHdpdGggUkdCQSBhbmQgQVlVViBzdXBwb3J0ICovCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGN0eC0+cGlwZWxpbmUsCi0gICAgICAgICAgR1NUX1NUQVRFX1BBVVNFRCkgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoY3R4LT5waXBlbGluZSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAtMSkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBpZiAoZnVuYyAhPSBOVUxMKSB7Ci0gICAgZnVuYyAoY3R4LT5sYXN0X2J1ZiwgY3R4LT5sYXN0X2NhcHMpOwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChjdHgtPnBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja18xeDFfYnVmZmVyIChHc3RCdWZmZXIgKiBidWYsIEdzdENhcHMgKiBjYXBzKQotewotICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKLSAgLyogdGhlIGV4YWN0IHZhbHVlcyB3ZSBjaGVjayBmb3IgY29tZSBmcm9tIHZpZGVvdGVzdHNyYyAqLwotICBzdGF0aWMgY29uc3QgZ3VpbnQgeXV2X3ZhbHVlc1tdID0geyA4MSwgOTAsIDI0MCwgMjU1IH07Ci0gIHN0YXRpYyBjb25zdCBndWludCByZ2JfdmFsdWVzW10gPSB7IDB4ZmYsIDAsIDAsIDI1NSB9OwotICBzdGF0aWMgY29uc3QgZ3VpbnQgZ3JheThfdmFsdWVzW10gPSB7IDB4NTEgfTsKLSAgc3RhdGljIGNvbnN0IGd1aW50IGdyYXkxNl92YWx1ZXNbXSA9IHsgMHg1MTUxIH07Ci0gIGNvbnN0IGd1aW50ICp2YWx1ZXM7Ci0gIGd1aW50IGk7Ci0gIGNvbnN0IEdzdFZpZGVvRm9ybWF0SW5mbyAqZmluZm87Ci0KLSAgZmFpbF91bmxlc3MgKGJ1ZiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGNhcHMgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcyAoJmluZm8sIGNhcHMpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJmluZm8sIGJ1ZiwgR1NUX01BUF9SRUFEKSk7Ci0KLSAgZmluZm8gPSBpbmZvLmZpbmZvOwotCi0gIGlmIChHU1RfVklERU9fSU5GT19JU19ZVVYgKCZpbmZvKSkKLSAgICB2YWx1ZXMgPSB5dXZfdmFsdWVzOwotICBlbHNlIGlmIChHU1RfVklERU9fSU5GT19JU19HUkFZICgmaW5mbykpCi0gICAgaWYgKEdTVF9WSURFT19GT1JNQVRfSU5GT19CSVRTIChmaW5mbykgPT0gOCkKLSAgICAgIHZhbHVlcyA9IGdyYXk4X3ZhbHVlczsKLSAgICBlbHNlCi0gICAgICB2YWx1ZXMgPSBncmF5MTZfdmFsdWVzOwotICBlbHNlCi0gICAgdmFsdWVzID0gcmdiX3ZhbHVlczsKLQotICBHU1RfTUVNRFVNUCAoImJ1ZmZlciIsIEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBICgmZnJhbWUsIDApLCA4KTsKLQotICBmb3IgKGkgPSAwOyBpIDwgR1NUX1ZJREVPX0ZSQU1FX05fQ09NUE9ORU5UUyAoJmZyYW1lKTsgaSsrKSB7Ci0gICAgZ3VpbnQ4ICpkYXRhID0gR1NUX1ZJREVPX0ZSQU1FX0NPTVBfREFUQSAoJmZyYW1lLCBpKTsKLQotICAgIEdTVF9ERUJVRyAoIlc6ICVkIiwgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX1dfU1VCIChmaW5mbywgaSkpOwotICAgIEdTVF9ERUJVRyAoIkg6ICVkIiwgR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0hfU1VCIChmaW5mbywgaSkpOwotCi0gICAgaWYgKEdTVF9WSURFT19GT1JNQVRfSU5GT19XX1NVQiAoZmluZm8sCi0gICAgICAgICAgICBpKSA+PSBHU1RfVklERU9fRlJBTUVfV0lEVEggKCZmcmFtZSkpCi0gICAgICBjb250aW51ZTsKLSAgICBpZiAoR1NUX1ZJREVPX0ZPUk1BVF9JTkZPX0hfU1VCIChmaW5mbywKLSAgICAgICAgICAgIGkpID49IEdTVF9WSURFT19GUkFNRV9IRUlHSFQgKCZmcmFtZSkpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChHU1RfVklERU9fRk9STUFUX0lORk9fQklUUyAoZmluZm8pID09IDgpIHsKLSAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGRhdGFbMF0sIHZhbHVlc1tpXSk7Ci0gICAgfSBlbHNlIGlmIChHU1RfVklERU9fRk9STUFUX0lORk9fQklUUyAoZmluZm8pID09IDE2KSB7Ci0gICAgICBndWludDE2IHBpeGVscywgdmFsOwotICAgICAgZ2ludCBkZXB0aDsKLQotICAgICAgaWYgKEdTVF9WSURFT19GT1JNQVRfSU5GT19JU19MRSAoZmluZm8pKQotICAgICAgICBwaXhlbHMgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKGRhdGEpOwotICAgICAgZWxzZQotICAgICAgICBwaXhlbHMgPSBHU1RfUkVBRF9VSU5UMTZfQkUgKGRhdGEpOwotCi0gICAgICBkZXB0aCA9IEdTVF9WSURFT19GT1JNQVRfSU5GT19ERVBUSCAoZmluZm8sIGkpOwotICAgICAgdmFsID0gcGl4ZWxzID4+IEdTVF9WSURFT19GT1JNQVRfSU5GT19TSElGVCAoZmluZm8sIGkpOwotICAgICAgdmFsID0gdmFsICYgKCgxIDw8IGRlcHRoKSAtIDEpOwotCi0gICAgICBHU1RfREVCVUcgKCJ2YWwgJTA4eCAlZCA6ICVkIiwgcGl4ZWxzLCBpLCB2YWwpOwotICAgICAgaWYgKGRlcHRoIDw9IDgpIHsKLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsLCB2YWx1ZXNbaV0gPj4gKDggLSBkZXB0aCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAodmFsLCB2YWx1ZXNbaV0gPj4gKDE2IC0gZGVwdGgpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgIH0KLSAgfQotCi0gIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmZyYW1lKTsKLQotICAvKgotICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50ICgocGl4ZWwgJiBybWFzaykgPj4gcnNoaWZ0LCAweGZmKTsKLSAgICAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoKHBpeGVsICYgZ21hc2spID4+IGdzaGlmdCwgMHgwMCk7Ci0gICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKChwaXhlbCAmIGJtYXNrKSA+PiBic2hpZnQsIDB4MDApOwotICAgKi8KLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfY3JvcF90b18xeDEpCi17Ci0gIEdzdFZpZGVvQ3JvcFRlc3RDb250ZXh0IGN0eDsKLSAgR0xpc3QgKmNhcHNfbGlzdCwgKm5vZGU7Ci0KLSAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmdfaW5pdF9jb250ZXh0ICgmY3R4KTsKLQotICBjYXBzX2xpc3QgPSB2aWRlb19jcm9wX2dldF90ZXN0X2NhcHMgKGN0eC5jcm9wKTsKLQotICBmb3IgKG5vZGUgPSBjYXBzX2xpc3Q7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IG5vZGUtPm5leHQpIHsKLSAgICBHc3RTdHJ1Y3R1cmUgKnM7Ci0gICAgR3N0Q2FwcyAqY2FwczsKLQotICAgIGNhcHMgPSBnc3RfY2Fwc19jb3B5IChHU1RfQ0FQUyAobm9kZS0+ZGF0YSkpOwotICAgIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgICBmYWlsX3VubGVzcyAocyAhPSBOVUxMKTsKLQotICAgIEdTVF9JTkZPICgidGVzdGluZyBmb3JtYXQ6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKLQotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCAxNjAsCi0gICAgICAgICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAxNjAsIE5VTEwpOwotCi0gICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGNhcHMsIE5VTEwsIDE1OSwgMCwgMTU5LCAwLAotICAgICAgICBjaGVja18xeDFfYnVmZmVyKTsKLSAgICAvKiBjb21tZW50ZWQgb3V0IGJlY2F1c2UgdGhleSBkb24ndCByZWFsbHkgYWRkIGFueXRoaW5nIHVzZWZ1bCBjaGVjay13aXNlOgotICAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBjYXBzLCBOVUxMLCAwLCAxNTksIDAsIDE1OSwgY2hlY2tfMXgxX2J1ZmZlcik7Ci0gICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGNhcHMsIE5VTEwsIDE1OSwgMCwgMCwgMTU5LCBjaGVja18xeDFfYnVmZmVyKTsKLSAgICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgY2FwcywgTlVMTCwgMCwgMTU5LCAxNTksIDAsIGNoZWNrXzF4MV9idWZmZXIpOwotICAgICAqLwotICAgIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgfQotICBnX2xpc3RfZm9yZWFjaCAoY2Fwc19saXN0LCAoR0Z1bmMpIGdzdF9jYXBzX3VucmVmLCBOVUxMKTsKLSAgZ19saXN0X2ZyZWUgKGNhcHNfbGlzdCk7Ci0KLSAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmdfZGVpbml0X2NvbnRleHQgKCZjdHgpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2Nyb3BwaW5nKQotewotICBHc3RWaWRlb0Nyb3BUZXN0Q29udGV4dCBjdHg7Ci0gIHN0cnVjdAotICB7Ci0gICAgZ2ludCB3aWR0aCwgaGVpZ2h0OwotICB9IHNpemVzX3RvX3RyeVtdID0gewotICAgIHsKLSAgICAxNjAsIDE2MH0sIHsKLSAgICAxNjEsIDE2MH0sIHsKLSAgICAxNjAsIDE2MX0sIHsKLSAgICAxNjEsIDE2MX0sIHsKLSAgICAxNTksIDE2MH0sIHsKLSAgICAxNjAsIDE1OX0sIHsKLSAgICAxNTksIDE1OX0sIHsKLSAgICAxNTksIDE2MX0KLSAgfTsKLSAgR0xpc3QgKmNhcHNfbGlzdCwgKm5vZGU7Ci0gIGdpbnQgaTsKLQotICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZ19pbml0X2NvbnRleHQgKCZjdHgpOwotCi0gIGNhcHNfbGlzdCA9IHZpZGVvX2Nyb3BfZ2V0X3Rlc3RfY2FwcyAoY3R4LmNyb3ApOwotICBub2RlID0gZ19saXN0X250aCAoY2Fwc19saXN0LCBfX2lfXyk7Ci0KLSAgaWYgKG5vZGUgIT0gTlVMTCkgewotICAgIEdzdFN0cnVjdHVyZSAqczsKLSAgICBHc3RDYXBzICpjYXBzOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX2NvcHkgKEdTVF9DQVBTIChub2RlLT5kYXRhKSk7Ci0gICAgcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGNhcHMsIDApOwotICAgIGZhaWxfdW5sZXNzIChzICE9IE5VTEwpOwotCi0gICAgR1NUX0lORk8gKCJ0ZXN0aW5nIGZvcm1hdDogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IEdfTl9FTEVNRU5UUyAoc2l6ZXNfdG9fdHJ5KTsgKytpKSB7Ci0gICAgICBHc3RDYXBzICppbl9jYXBzLCAqb3V0X2NhcHM7Ci0KLSAgICAgIEdTVF9JTkZPICgiIC0gJWQgeCAlZCIsIHNpemVzX3RvX3RyeVtpXS53aWR0aCwgc2l6ZXNfdG9fdHJ5W2ldLmhlaWdodCk7Ci0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0IChzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCBzaXplc190b190cnlbaV0ud2lkdGgsCi0gICAgICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIHNpemVzX3RvX3RyeVtpXS5oZWlnaHQsIE5VTEwpOwotICAgICAgaW5fY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotCi0gICAgICBnc3Rfc3RydWN0dXJlX3NldCAocywgIndpZHRoIiwgR19UWVBFX0lOVCwgMSwgImhlaWdodCIsIEdfVFlQRV9JTlQsIDEsCi0gICAgICAgICAgTlVMTCk7Ci0gICAgICBvdXRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKGNhcHMpOwotCi0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMCwgMCwgMCwgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMSwgMCwgMCwgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMCwgMSwgMCwgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMCwgMCwgMSwgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMCwgMCwgMCwgMSwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgNjMsIDAsIDAsIDAsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIE5VTEwsIDAsIDYzLCAwLCAwLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAwLCAwLCA2MywgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMCwgMCwgMCwgNjMsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIE5VTEwsIDYzLCAwLCAwLCAxLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAwLCA2MywgMSwgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgMCwgMSwgNjMsIDAsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIE5VTEwsIDEsIDAsIDAsIDYzLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAwLCAwLCAwLCAwLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAzMiwgMCwgMCwgMTI4LCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAwLCAzMiwgMTI4LCAwLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAwLCAxMjgsIDMyLCAwLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAxMjgsIDAsIDAsIDMyLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCAxLCAxLCAxLCAxLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBOVUxMLCA2MywgNjMsIDYzLCA2MywgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2FwcywgTlVMTCwgNjQsIDY0LCA2NCwgNjQsIE5VTEwpOwotCi0gICAgICAvKiBEeW5hbWljIGNyb3BwaW5nICovCi0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2Fwcywgb3V0X2NhcHMsIC0xLCAtMSwgLTEsIC0xLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBvdXRfY2FwcywgMCwgLTEsIC0xLCAtMSwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2Fwcywgb3V0X2NhcHMsIC0xLCAwLCAtMSwgLTEsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIG91dF9jYXBzLCAtMSwgLTEsIDAsIC0xLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBvdXRfY2FwcywgLTEsIC0xLCAtMSwgMCwgTlVMTCk7Ci0gICAgICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZyAoJmN0eCwgaW5fY2Fwcywgb3V0X2NhcHMsIDEwLCAtMSwgMTAsIC0xLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBvdXRfY2FwcywgLTEsIDEwLCAtMSwgMTAsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIG91dF9jYXBzLAotICAgICAgICAgIHNpemVzX3RvX3RyeVtpXS53aWR0aCAtIDEsIC0xLCAtMSwgLTEsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIG91dF9jYXBzLCAtMSwKLSAgICAgICAgICBzaXplc190b190cnlbaV0ud2lkdGggLSAxLCAtMSwgLTEsIE5VTEwpOwotICAgICAgdmlkZW9jcm9wX3Rlc3RfY3JvcHBpbmcgKCZjdHgsIGluX2NhcHMsIG91dF9jYXBzLCAtMSwgLTEsCi0gICAgICAgICAgc2l6ZXNfdG9fdHJ5W2ldLmhlaWdodCAtIDEsIC0xLCBOVUxMKTsKLSAgICAgIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nICgmY3R4LCBpbl9jYXBzLCBvdXRfY2FwcywgLTEsIC0xLCAtMSwKLSAgICAgICAgICBzaXplc190b190cnlbaV0uaGVpZ2h0IC0gMSwgTlVMTCk7Ci0KLSAgICAgIGdzdF9jYXBzX3VucmVmIChpbl9jYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChvdXRfY2Fwcyk7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9IGVsc2UgewotICAgIEdTVF9JTkZPICgibm8gY2FwcyAjJWQiLCBfX2lfXyk7Ci0gIH0KLSAgZ19saXN0X2ZvcmVhY2ggKGNhcHNfbGlzdCwgKEdGdW5jKSBnc3RfY2Fwc191bnJlZiwgTlVMTCk7Ci0gIGdfbGlzdF9mcmVlIChjYXBzX2xpc3QpOwotCi0gIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nX2RlaW5pdF9jb250ZXh0ICgmY3R4KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotYnVmZmVyX3Byb2JlX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdEJ1ZmZlciAqKnBfYnVmID0gZGF0YTsKLSAgR3N0QnVmZmVyICpidWYgPSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSIChpbmZvKTsKLQotICBnc3RfYnVmZmVyX3JlcGxhY2UgKHBfYnVmLCBidWYpOwotCi0gIHJldHVybiBHU1RfUEFEX1BST0JFX09LOyAgICAgIC8qIGtlZXAgZGF0YSAqLwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wYXNzdGhyb3VnaCkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmV0OwotICBHc3RWaWRlb0Nyb3BUZXN0Q29udGV4dCBjdHg7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RCdWZmZXIgKmdlbl9idWYgPSBOVUxMOyAgICAvKiBidWZmZXIgZ2VuZXJhdGVkIGJ5IHZpZGVvdGVzdHNyYyAqLwotCi0gIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nX2luaXRfY29udGV4dCAoJmN0eCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjdHguc3JjLCAibnVtLWJ1ZmZlcnMiLCAxLCBOVUxMKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY3R4LnNyYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAoc3JjcGFkICE9IE5VTEwpOwotICBnc3RfcGFkX2FkZF9wcm9iZSAoc3JjcGFkLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCBidWZmZXJfcHJvYmVfY2IsCi0gICAgICAmZ2VuX2J1ZiwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChjdHguY3JvcCwgImxlZnQiLCAwLCAicmlnaHQiLCAwLCAidG9wIiwgMCwgImJvdHRvbSIsIDAsIE5VTEwpOwotCi0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY3R4LnBpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZmFpbF91bmxlc3MgKHN0YXRlX3JldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsCi0gICAgICAiY291bGRuJ3Qgc2V0IHBpcGVsaW5lIHRvIFBBVVNFRCBzdGF0ZSIpOwotCi0gIHN0YXRlX3JldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAoY3R4LnBpcGVsaW5lLCBOVUxMLCBOVUxMLCAtMSk7Ci0gIGZhaWxfdW5sZXNzIChzdGF0ZV9yZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgInBpcGVsaW5lIGZhaWxlZCB0byBnbyB0byBQQVVTRUQgc3RhdGUiKTsKLQotICBmYWlsX3VubGVzcyAoZ2VuX2J1ZiAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGN0eC5sYXN0X2J1ZiAhPSBOVUxMKTsKLQotICAvKiBwYXNzIHRocm91Z2ggc2hvdWxkIGRvIG5vdGhpbmcgKi8KLSAgZmFpbF91bmxlc3MgKGdlbl9idWYgPT0gY3R4Lmxhc3RfYnVmKTsKLQotICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZ19kZWluaXRfY29udGV4dCAoJmN0eCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX01JTklfT0JKRUNUX1JFRkNPVU5UX1ZBTFVFIChnZW5fYnVmKSwgMSk7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKGdlbl9idWYpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBnaW50Ci1ub3Rnc3RfdmFsdWVfbGlzdF9nZXRfbnRoX2ludCAoY29uc3QgR1ZhbHVlICogbGlzdF92YWwsIGd1aW50IG4pCi17Ci0gIGNvbnN0IEdWYWx1ZSAqdjsKLQotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKGxpc3RfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzIChuIDwgZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUgKGxpc3RfdmFsKSk7Ci0KLSAgdiA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAobGlzdF92YWwsIG4pOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQgKHYpKTsKLSAgcmV0dXJuIGdfdmFsdWVfZ2V0X2ludCAodik7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NhcHNfdHJhbnNmb3JtKQotewotICBHc3RWaWRlb0Nyb3BUZXN0Q29udGV4dCBjdHg7Ci0gIEdzdEJhc2VUcmFuc2Zvcm1DbGFzcyAqa2xhc3M7Ci0gIEdzdEJhc2VUcmFuc2Zvcm0gKmNyb3A7Ci0gIGNvbnN0IEdWYWx1ZSAqd192YWw7Ci0gIGNvbnN0IEdWYWx1ZSAqaF92YWw7Ci0gIEdzdENhcHMgKmNhcHMsICphZGpfY2FwczsKLQotICB2aWRlb2Nyb3BfdGVzdF9jcm9wcGluZ19pbml0X2NvbnRleHQgKCZjdHgpOwotCi0gIGNyb3AgPSBHU1RfQkFTRV9UUkFOU0ZPUk0gKGN0eC5jcm9wKTsKLSAga2xhc3MgPSBHU1RfQkFTRV9UUkFOU0ZPUk1fR0VUX0NMQVNTIChjdHguY3JvcCk7Ci0gIGZhaWxfdW5sZXNzIChrbGFzcyAhPSBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoInZpZGVvL3gtcmF3IiwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAiSTQyMCIsCi0gICAgICAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDEsIDEsCi0gICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAyMDAsICJoZWlnaHQiLCBHX1RZUEVfSU5ULCAxMDAsIE5VTEwpOwotCi0gIC8qIGJ5IGRlZmF1bHQsIGl0IHNob3VsZCBiZSBubyBjcm9wcGluZyBhbmQgaGVuY2UgcGFzc3Rocm91Z2ggKi8KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU1JDLCBjYXBzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGFkal9jYXBzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfaXNfZXF1YWwgKGFkal9jYXBzLCBjYXBzKSk7Ci0gIGdzdF9jYXBzX3VucmVmIChhZGpfY2Fwcyk7Ci0KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU0lOSywgY2FwcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhZGpfY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChhZGpfY2FwcywgY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoYWRqX2NhcHMpOwotCi0gIC8qIG1ha2Ugc3VyZSB0aGF0J3Mgc3RpbGwgdHJ1ZSBhZnRlciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGJhY2sgYW5kIGZvcnRoICovCi0gIGdfb2JqZWN0X3NldCAoY3R4LmNyb3AsICJsZWZ0IiwgMSwgInJpZ2h0IiwgMywgInRvcCIsIDUsICJib3R0b20iLCA3LCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChjdHguY3JvcCwgImxlZnQiLCAwLCAicmlnaHQiLCAwLCAidG9wIiwgMCwgImJvdHRvbSIsIDAsIE5VTEwpOwotCi0gIGFkal9jYXBzID0ga2xhc3MtPnRyYW5zZm9ybV9jYXBzIChjcm9wLCBHU1RfUEFEX1NSQywgY2FwcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhZGpfY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2lzX2VxdWFsIChhZGpfY2FwcywgY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoYWRqX2NhcHMpOwotCi0gIGFkal9jYXBzID0ga2xhc3MtPnRyYW5zZm9ybV9jYXBzIChjcm9wLCBHU1RfUEFEX1NJTkssIGNhcHMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYWRqX2NhcHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19pc19lcXVhbCAoYWRqX2NhcHMsIGNhcHMpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICAvKiBub3cgY2hlY2sgYWRqdXN0bWVudHMgbWFkZSAuLi4gKi8KLSAgZ19vYmplY3Rfc2V0IChjdHguY3JvcCwgImxlZnQiLCAxLCAicmlnaHQiLCAzLCAidG9wIiwgNSwgImJvdHRvbSIsIDcsIE5VTEwpOwotCi0gIC8qID09PT09PT09PSAoMSkgZml4ZWQgdmFsdWUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLSAgLyogc2luayA9PiBzb3VyY2UsIHNvdXJjZSBtdXN0IGJlIGJpZ2dlciBpZiB3ZSBjcm9wIHN0dWZmIG9mZiAqLwotICBhZGpfY2FwcyA9IGtsYXNzLT50cmFuc2Zvcm1fY2FwcyAoY3JvcCwgR1NUX1BBRF9TUkMsIGNhcHMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYWRqX2NhcHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYWRqX2NhcHMpID09IDEpOwotICB3X3ZhbCA9Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWRqX2NhcHMsIDApLCAid2lkdGgiKTsKLSAgZmFpbF91bmxlc3MgKHdfdmFsICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQgKHdfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2ludCAod192YWwpLCAyMDAgKyAoMSArIDMpKTsKLSAgaF92YWwgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFkal9jYXBzLCAwKSwgImhlaWdodCIpOwotICBmYWlsX3VubGVzcyAoaF92YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHX1ZBTFVFX0hPTERTX0lOVCAoaF92YWwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ192YWx1ZV9nZXRfaW50IChoX3ZhbCksIDEwMCArICg1ICsgNykpOwotICBnc3RfY2Fwc191bnJlZiAoYWRqX2NhcHMpOwotCi0gIC8qIHNvdXJjZSA9PiBzaW5rIGJlY29tZXMgc21hbGxlciAqLwotICBhZGpfY2FwcyA9IGtsYXNzLT50cmFuc2Zvcm1fY2FwcyAoY3JvcCwgR1NUX1BBRF9TSU5LLCBjYXBzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGFkal9jYXBzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGFkal9jYXBzKSA9PSAxKTsKLSAgd192YWwgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFkal9jYXBzLCAwKSwgIndpZHRoIik7Ci0gIGZhaWxfdW5sZXNzICh3X3ZhbCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdfVkFMVUVfSE9MRFNfSU5UICh3X3ZhbCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX3ZhbHVlX2dldF9pbnQgKHdfdmFsKSwgMjAwIC0gKDEgKyAzKSk7Ci0gIGhfdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChhZGpfY2FwcywgMCksICJoZWlnaHQiKTsKLSAgZmFpbF91bmxlc3MgKGhfdmFsICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR19WQUxVRV9IT0xEU19JTlQgKGhfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdfdmFsdWVfZ2V0X2ludCAoaF92YWwpLCAxMDAgLSAoNSArIDcpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICAvKiA9PT09PT09PT0gKDIpIHJhbmdlIChzaW1wbGUgYWRqdXN0bWVudCkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIGdzdF9zdHJ1Y3R1cmVfc2V0IChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKSwKLSAgICAgICJ3aWR0aCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMTAwMCwgMjAwMCwKLSAgICAgICJoZWlnaHQiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDMwMDAsIDQwMDAsIE5VTEwpOwotCi0gIC8qIHNpbmsgPT4gc291cmNlLCBzb3VyY2UgbXVzdCBiZSBiaWdnZXIgaWYgd2UgY3JvcCBzdHVmZiBvZmYgKi8KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU1JDLCBjYXBzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGFkal9jYXBzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGFkal9jYXBzKSA9PSAxKTsKLSAgd192YWwgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFkal9jYXBzLCAwKSwgIndpZHRoIik7Ci0gIGZhaWxfdW5sZXNzICh3X3ZhbCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHdfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAod192YWwpLCAxMDAwICsgKDEgKyAzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAod192YWwpLCAyMDAwICsgKDEgKyAzKSk7Ci0gIGhfdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChhZGpfY2FwcywgMCksICJoZWlnaHQiKTsKLSAgZmFpbF91bmxlc3MgKGhfdmFsICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoaF92YWwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluIChoX3ZhbCksIDMwMDAgKyAoNSArIDcpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChoX3ZhbCksIDQwMDAgKyAoNSArIDcpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICAvKiBzb3VyY2UgPT4gc2luayBiZWNvbWVzIHNtYWxsZXIgKi8KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU0lOSywgY2FwcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhZGpfY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChhZGpfY2FwcykgPT0gMSk7Ci0gIHdfdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChhZGpfY2FwcywgMCksICJ3aWR0aCIpOwotICBmYWlsX3VubGVzcyAod192YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh3X3ZhbCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHdfdmFsKSwgMTAwMCAtICgxICsgMykpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9tYXggKHdfdmFsKSwgMjAwMCAtICgxICsgMykpOwotICBoX3ZhbCA9Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWRqX2NhcHMsIDApLCAiaGVpZ2h0Iik7Ci0gIGZhaWxfdW5sZXNzIChoX3ZhbCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKGhfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAoaF92YWwpLCAzMDAwIC0gKDUgKyA3KSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoaF92YWwpLCA0MDAwIC0gKDUgKyA3KSk7Ci0gIGdzdF9jYXBzX3VucmVmIChhZGpfY2Fwcyk7Ci0KLSAgLyogPT09PT09PT09ICgzKSByYW5nZSAoYWRqdXN0bWVudCBhdCBib3VuZGFyeSkgPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotICBnc3Rfc3RydWN0dXJlX3NldCAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCksCi0gICAgICAid2lkdGgiLCBHU1RfVFlQRV9JTlRfUkFOR0UsIDIsIEdfTUFYSU5ULAotICAgICAgImhlaWdodCIsIEdTVF9UWVBFX0lOVF9SQU5HRSwgMiwgR19NQVhJTlQsIE5VTEwpOwotCi0gIC8qIHNpbmsgPT4gc291cmNlLCBzb3VyY2UgbXVzdCBiZSBiaWdnZXIgaWYgd2UgY3JvcCBzdHVmZiBvZmYgKi8KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU1JDLCBjYXBzLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGFkal9jYXBzICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoZ3N0X2NhcHNfZ2V0X3NpemUgKGFkal9jYXBzKSA9PSAxKTsKLSAgd192YWwgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFkal9jYXBzLCAwKSwgIndpZHRoIik7Ci0gIGZhaWxfdW5sZXNzICh3X3ZhbCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19JTlRfUkFOR0UgKHdfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21pbiAod192YWwpLCAyICsgKDEgKyAzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAod192YWwpLCBHX01BWElOVCk7Ci0gIGhfdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChhZGpfY2FwcywgMCksICJoZWlnaHQiKTsKLSAgZmFpbF91bmxlc3MgKGhfdmFsICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0lOVF9SQU5HRSAoaF92YWwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWluIChoX3ZhbCksIDIgKyAoNSArIDcpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3ZhbHVlX2dldF9pbnRfcmFuZ2VfbWF4IChoX3ZhbCksIEdfTUFYSU5UKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICAvKiBzb3VyY2UgPT4gc2luayBiZWNvbWVzIHNtYWxsZXIgKi8KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU0lOSywgY2FwcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhZGpfY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChhZGpfY2FwcykgPT0gMSk7Ci0gIHdfdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChhZGpfY2FwcywgMCksICJ3aWR0aCIpOwotICBmYWlsX3VubGVzcyAod192YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFICh3X3ZhbCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKHdfdmFsKSwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAod192YWwpLAotICAgICAgR19NQVhJTlQgLSAoMSArIDMpKTsKLSAgaF92YWwgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFkal9jYXBzLCAwKSwgImhlaWdodCIpOwotICBmYWlsX3VubGVzcyAoaF92YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfSU5UX1JBTkdFIChoX3ZhbCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfdmFsdWVfZ2V0X2ludF9yYW5nZV9taW4gKGhfdmFsKSwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF92YWx1ZV9nZXRfaW50X3JhbmdlX21heCAoaF92YWwpLAotICAgICAgR19NQVhJTlQgLSAoNSArIDcpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICAvKiA9PT09PT09PT0gKDQpIGxpc3Qgb2YgdmFsdWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0gIHsKLSAgICBHVmFsdWUgbGlzdCA9IHsgMCwgfTsKLSAgICBHVmFsdWUgaXZhbCA9IHsgMCwgfTsKLQotICAgIGdfdmFsdWVfaW5pdCAoJml2YWwsIEdfVFlQRV9JTlQpOwotICAgIGdfdmFsdWVfaW5pdCAoJmxpc3QsIEdTVF9UWVBFX0xJU1QpOwotICAgIGdfdmFsdWVfc2V0X2ludCAoJml2YWwsIDIpOwotICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSAoJmxpc3QsICZpdmFsKTsKLSAgICBnX3ZhbHVlX3NldF9pbnQgKCZpdmFsLCBHX01BWElOVCk7Ci0gICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJml2YWwpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKSwgIndpZHRoIiwgJmxpc3QpOwotICAgIGdfdmFsdWVfdW5zZXQgKCZsaXN0KTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmaXZhbCk7Ci0KLSAgICBnX3ZhbHVlX2luaXQgKCZpdmFsLCBHX1RZUEVfSU5UKTsKLSAgICBnX3ZhbHVlX2luaXQgKCZsaXN0LCBHU1RfVFlQRV9MSVNUKTsKLSAgICBnX3ZhbHVlX3NldF9pbnQgKCZpdmFsLCA1KTsKLSAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUgKCZsaXN0LCAmaXZhbCk7Ci0gICAgZ192YWx1ZV9zZXRfaW50ICgmaXZhbCwgMTAwMCk7Ci0gICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlICgmbGlzdCwgJml2YWwpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKSwgImhlaWdodCIsICZsaXN0KTsKLSAgICBnX3ZhbHVlX3Vuc2V0ICgmbGlzdCk7Ci0gICAgZ192YWx1ZV91bnNldCAoJml2YWwpOwotICB9Ci0KLSAgLyogc2luayA9PiBzb3VyY2UsIHNvdXJjZSBtdXN0IGJlIGJpZ2dlciBpZiB3ZSBjcm9wIHN0dWZmIG9mZiAqLwotICBhZGpfY2FwcyA9IGtsYXNzLT50cmFuc2Zvcm1fY2FwcyAoY3JvcCwgR1NUX1BBRF9TUkMsIGNhcHMsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoYWRqX2NhcHMgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfY2Fwc19nZXRfc2l6ZSAoYWRqX2NhcHMpID09IDEpOwotICB3X3ZhbCA9Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWRqX2NhcHMsIDApLCAid2lkdGgiKTsKLSAgZmFpbF91bmxlc3MgKHdfdmFsICE9IE5VTEwpOwotICBmYWlsX3VubGVzcyAoR1NUX1ZBTFVFX0hPTERTX0xJU1QgKHdfdmFsKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5vdGdzdF92YWx1ZV9saXN0X2dldF9udGhfaW50ICh3X3ZhbCwgMCksCi0gICAgICAyICsgKDEgKyAzKSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5vdGdzdF92YWx1ZV9saXN0X2dldF9udGhfaW50ICh3X3ZhbCwgMSksIEdfTUFYSU5UKTsKLSAgaF92YWwgPQotICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFkal9jYXBzLCAwKSwgImhlaWdodCIpOwotICBmYWlsX3VubGVzcyAoaF92YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfTElTVCAoaF92YWwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobm90Z3N0X3ZhbHVlX2xpc3RfZ2V0X250aF9pbnQgKGhfdmFsLCAwKSwKLSAgICAgIDUgKyAoNSArIDcpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobm90Z3N0X3ZhbHVlX2xpc3RfZ2V0X250aF9pbnQgKGhfdmFsLCAxKSwKLSAgICAgIDEwMDAgKyAoNSArIDcpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICAvKiBzb3VyY2UgPT4gc2luayBiZWNvbWVzIHNtYWxsZXIgKi8KLSAgYWRqX2NhcHMgPSBrbGFzcy0+dHJhbnNmb3JtX2NhcHMgKGNyb3AsIEdTVF9QQURfU0lOSywgY2FwcywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChhZGpfY2FwcyAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9jYXBzX2dldF9zaXplIChhZGpfY2FwcykgPT0gMSk7Ci0gIHdfdmFsID0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChhZGpfY2FwcywgMCksICJ3aWR0aCIpOwotICBmYWlsX3VubGVzcyAod192YWwgIT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChHU1RfVkFMVUVfSE9MRFNfTElTVCAod192YWwpKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobm90Z3N0X3ZhbHVlX2xpc3RfZ2V0X250aF9pbnQgKHdfdmFsLCAwKSwgMSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG5vdGdzdF92YWx1ZV9saXN0X2dldF9udGhfaW50ICh3X3ZhbCwgMSksCi0gICAgICBHX01BWElOVCAtICgxICsgMykpOwotICBoX3ZhbCA9Ci0gICAgICBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWRqX2NhcHMsIDApLCAiaGVpZ2h0Iik7Ci0gIGZhaWxfdW5sZXNzIChoX3ZhbCAhPSBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9WQUxVRV9IT0xEU19MSVNUIChoX3ZhbCkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChub3Rnc3RfdmFsdWVfbGlzdF9nZXRfbnRoX2ludCAoaF92YWwsIDApLCAxKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobm90Z3N0X3ZhbHVlX2xpc3RfZ2V0X250aF9pbnQgKGhfdmFsLCAxKSwKLSAgICAgIDEwMDAgLSAoNSArIDcpKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGFkal9jYXBzKTsKLQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIHZpZGVvY3JvcF90ZXN0X2Nyb3BwaW5nX2RlaW5pdF9jb250ZXh0ICgmY3R4KTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotdmlkZW9jcm9wX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInZpZGVvY3JvcCIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSNpZmRlZiBIQVZFX1ZBTEdSSU5ECi0gIGlmIChSVU5OSU5HX09OX1ZBTEdSSU5EKSB7Ci0gICAgLyogb3VyIHRlc3RzIHRha2UgcXVpdGUgYSBsb25nIHRpbWUsIHNvIGluY3JlYXNlCi0gICAgICogdGltZW91dCAofjI1IG1pbnV0ZXMgb24gbXkgMS42R0h6IEFNRCBLNykgKi8KLSAgICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDMwICogNjApOwotICB9IGVsc2UKLSNlbmRpZgotICB7Ci0gICAgLyogaW5jcmVhc2UgdGltZW91dCwgdGhlc2UgdGVzdHMgdGFrZSBhIGxvbmcgdGltZSAoNjAgc2VjcyBoZXJlKSAqLwotICAgIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgMiAqIDYwKTsKLSAgfQotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY3JvcF90b18xeDEpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfY2Fwc190cmFuc2Zvcm0pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFzc3Rocm91Z2gpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfdW5pdF9zaXplcyk7Ci0gIHRjYXNlX2FkZF9sb29wX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2Nyb3BwaW5nLCAwLCAyNSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh2aWRlb2Nyb3ApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvZmlsdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYzAyZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9maWx0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHZpZGVvZmlsdGVyIGVsZW1lbnRzCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNj4gTWFyayBOYXV3ZWxhZXJ0cyA8bWFuYXV3QHNreW5ldC5iZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotZ2Jvb2xlYW4gaGF2ZV9lb3MgPSBGQUxTRTsKLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLQotI2RlZmluZSBWSURFT19DQVBTX1RFTVBMQVRFX1NUUklORyBcCi0gIEdTVF9WSURFT19DQVBTX01BS0UgKCJ7IEk0MjAsIEFZVVYsIFlVWTIsIFVZVlksIFlWWVUsIHhSR0IgfSIpCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFZJREVPX0NBUFNfVEVNUExBVEVfU1RSSU5HKQotICAgICk7Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChWSURFT19DQVBTX1RFTVBMQVRFX1NUUklORykKLSAgICApOwotCi0vKiB0YWtlcyBvdmVyIHJlZmVyZW5jZSBmb3Igb3V0Y2FwcyAqLwotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfZmlsdGVyIChjb25zdCBnY2hhciAqIG5hbWUsIGNvbnN0IGdjaGFyICogcHJvcCwgdmFfbGlzdCB2YXJfYXJncykKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLQotICBHU1RfREVCVUcgKCJzZXR1cF9lbGVtZW50Iik7Ci0gIGVsZW1lbnQgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAobmFtZSk7Ci0gIGdfb2JqZWN0X3NldF92YWxpc3QgKEdfT0JKRUNUIChlbGVtZW50KSwgcHJvcCwgdmFyX2FyZ3MpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkIChlbGVtZW50LCAmc3JjdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChlbGVtZW50LCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIHJldHVybiBlbGVtZW50OwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF9maWx0ZXIgKEdzdEVsZW1lbnQgKiBmaWx0ZXIpCi17Ci0gIEdTVF9ERUJVRyAoImNsZWFudXBfZWxlbWVudCIpOwotCi0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChmaWx0ZXIpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGZpbHRlcik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChmaWx0ZXIpOwotfQotCi1zdGF0aWMgdm9pZAotY2hlY2tfZmlsdGVyX2NhcHMgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0RXZlbnQgKiBldmVudCwgR3N0Q2FwcyAqIGNhcHMsCi0gICAgZ2ludCBzaXplLCBnaW50IG51bV9idWZmZXJzLCBjb25zdCBnY2hhciAqIHByb3AsIHZhX2xpc3QgdmFyYXJncykKLXsKLSAgR3N0RWxlbWVudCAqZmlsdGVyOwotICBHc3RCdWZmZXIgKmluYnVmZmVyLCAqb3V0YnVmZmVyOwotICBnaW50IGk7Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLQotICBmaWx0ZXIgPSBzZXR1cF9maWx0ZXIgKG5hbWUsIHByb3AsIHZhcmFyZ3MpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChmaWx0ZXIsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgZmlsdGVyLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIC8qIGVuc3VyZSBzZWdtZW50IChmb3JtYXQpIHByb3Blcmx5IHNldHVwICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpKTsKLQotICBpZiAoZXZlbnQpCi0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGV2ZW50KSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBpbmJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoc2l6ZSk7Ci0gICAgLyogbWFrZXMgdmFsZ3JpbmQncyBtZW1jaGVjayBoYXBwaWVyICovCi0gICAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGluYnVmZmVyLCAwLCAwLCBzaXplKTsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLSAgICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gICAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPT0gbnVtX2J1ZmZlcnMpOwotCi0gIC8qIGNsZWFuIHVwIGJ1ZmZlcnMgKi8KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0KLSAgICBzd2l0Y2ggKGkpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgICAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfZ2V0X3NpemUgKG91dGJ1ZmZlcikgPT0gc2l6ZSk7Ci0gICAgICAgIC8qIG5vIGNoZWNrIG9uIGZpbHRlciBvcGVyYXRpb24gaXRzZWxmICovCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGJ1ZmZlcnMgPSBnX2xpc3RfcmVtb3ZlIChidWZmZXJzLCBvdXRidWZmZXIpOwotCi0gICAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAob3V0YnVmZmVyLCAib3V0YnVmZmVyIiwgMSk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmZmVyKTsKLSAgICBvdXRidWZmZXIgPSBOVUxMOwotICB9Ci0KLSAgY2xlYW51cF9maWx0ZXIgKGZpbHRlcik7Ci0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19maWx0ZXJfdmFyYXJncyAoY29uc3QgZ2NoYXIgKiBuYW1lLCBHc3RFdmVudCAqIGV2ZW50LCBnaW50IG51bV9idWZmZXJzLAotICAgIGNvbnN0IGdjaGFyICogcHJvcCwgdmFfbGlzdCB2YXJhcmdzKQotewotICBzdGF0aWMgY29uc3Qgc3RydWN0Ci0gIHsKLSAgICBjb25zdCBpbnQgd2lkdGgsIGhlaWdodDsKLSAgfSByZXNvbHV0aW9uc1tdID0geyB7Ci0gIDM4NCwgMjg4fSwgewotICAzODUsIDI4OX0sIHsKLSAgMzg1LCAzODV9fTsKLSAgZ2ludCBpLCBuLCByOwotICBnaW50IHNpemU7Ci0gIEdzdENhcHMgKmFsbGNhcHMsICp0ZW1wbCA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChWSURFT19DQVBTX1RFTVBMQVRFX1NUUklORyk7Ci0KLSAgYWxsY2FwcyA9IGdzdF9jYXBzX25vcm1hbGl6ZSAodGVtcGwpOwotCi0gIG4gPSBnc3RfY2Fwc19nZXRfc2l6ZSAoYWxsY2Fwcyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKGFsbGNhcHMsIGkpOwotICAgIEdzdENhcHMgKmNhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0KLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChjYXBzLCBnc3Rfc3RydWN0dXJlX2NvcHkgKHMpKTsKLQotICAgIC8qIHRyeSB2YXJpb3VzIHJlc29sdXRpb25zICovCi0gICAgZm9yIChyID0gMDsgciA8IEdfTl9FTEVNRU5UUyAocmVzb2x1dGlvbnMpOyArK3IpIHsKLSAgICAgIEdzdFZpZGVvSW5mbyBpbmZvOwotICAgICAgdmFfbGlzdCBhcmdzX2NwOwotCi0gICAgICBjYXBzID0gZ3N0X2NhcHNfbWFrZV93cml0YWJsZSAoY2Fwcyk7Ci0gICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlIChjYXBzLCAid2lkdGgiLCBHX1RZUEVfSU5ULCByZXNvbHV0aW9uc1tyXS53aWR0aCwKLSAgICAgICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgcmVzb2x1dGlvbnNbcl0uaGVpZ2h0LAotICAgICAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgMjUsIDEsIE5VTEwpOwotCi0gICAgICBHU1RfREVCVUcgKCJUZXN0aW5nIHdpdGggY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwotICAgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2Fwcyk7Ci0gICAgICBzaXplID0gR1NUX1ZJREVPX0lORk9fU0laRSAoJmluZm8pOwotCi0gICAgICBpZiAoZXZlbnQpCi0gICAgICAgIGdzdF9ldmVudF9yZWYgKGV2ZW50KTsKLQotICAgICAgdmFfY29weSAoYXJnc19jcCwgdmFyYXJncyk7Ci0gICAgICBjaGVja19maWx0ZXJfY2FwcyAobmFtZSwgZXZlbnQsIGNhcHMsIHNpemUsIG51bV9idWZmZXJzLCBwcm9wLCBhcmdzX2NwKTsKLSAgICAgIHZhX2VuZCAoYXJnc19jcCk7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICB9Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGFsbGNhcHMpOwotICBpZiAoZXZlbnQpCi0gICAgZ3N0X2V2ZW50X3VucmVmIChldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jaGVja19maWx0ZXIgKGNvbnN0IGdjaGFyICogbmFtZSwgZ2ludCBudW1fYnVmZmVycywgY29uc3QgZ2NoYXIgKiBwcm9wLCAuLi4pCi17Ci0gIHZhX2xpc3QgdmFyYXJnczsKLSAgdmFfc3RhcnQgKHZhcmFyZ3MsIHByb3ApOwotICBjaGVja19maWx0ZXJfdmFyYXJncyAobmFtZSwgTlVMTCwgbnVtX2J1ZmZlcnMsIHByb3AsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1zdGF0aWMgdm9pZAotY2hlY2tfZmlsdGVyX3dpdGhfZXZlbnQgKGNvbnN0IGdjaGFyICogbmFtZSwgR3N0RXZlbnQgKiBldmVudCwKLSAgICBnaW50IG51bV9idWZmZXJzLCBjb25zdCBnY2hhciAqIHByb3AsIC4uLikKLXsKLSAgdmFfbGlzdCB2YXJhcmdzOwotICB2YV9zdGFydCAodmFyYXJncywgcHJvcCk7Ci0gIGNoZWNrX2ZpbHRlcl92YXJhcmdzIChuYW1lLCBldmVudCwgbnVtX2J1ZmZlcnMsIHByb3AsIHZhcmFyZ3MpOwotICB2YV9lbmQgKHZhcmFyZ3MpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92aWRlb2JhbGFuY2UpCi17Ci0gIGNoZWNrX2ZpbHRlciAoInZpZGVvYmFsYW5jZSIsIDIsIE5VTEwpOwotICBjaGVja19maWx0ZXIgKCJ2aWRlb2JhbGFuY2UiLCAyLCAic2F0dXJhdGlvbiIsIDAuNSwgImh1ZSIsIDAuOCwgTlVMTCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF92aWRlb2ZsaXApCi17Ci0gIEdzdEV2ZW50ICpldmVudDsKLQotICAvKiB0aGVzZSB3ZSBjYW4gaGFuZGxlIHdpdGggdGhlIGNhcHMgKi8KLSAgY2hlY2tfZmlsdGVyICgidmlkZW9mbGlwIiwgMiwgIm1ldGhvZCIsIDAsIE5VTEwpOwotICBjaGVja19maWx0ZXIgKCJ2aWRlb2ZsaXAiLCAyLCAibWV0aG9kIiwgMiwgTlVMTCk7Ci0gIGNoZWNrX2ZpbHRlciAoInZpZGVvZmxpcCIsIDIsICJtZXRob2QiLCA0LCBOVUxMKTsKLSAgY2hlY2tfZmlsdGVyICgidmlkZW9mbGlwIiwgMiwgIm1ldGhvZCIsIDUsIE5VTEwpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9uZXdfZW1wdHkgKCkpOwotICBjaGVja19maWx0ZXJfd2l0aF9ldmVudCAoInZpZGVvZmxpcCIsIGV2ZW50LCAyLCAibWV0aG9kIiwgOCwgTlVMTCk7Ci0KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X25ldyAoR1NUX1RBR19JTUFHRV9PUklFTlRBVElPTiwKLSAgICAgICAgICAicm90YXRlLTE4MCIsIE5VTEwpKTsKLSAgY2hlY2tfZmlsdGVyX3dpdGhfZXZlbnQgKCJ2aWRlb2ZsaXAiLCBldmVudCwgMiwgIm1ldGhvZCIsIDgsIE5VTEwpOwotCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9uZXcgKEdTVF9UQUdfSU1BR0VfT1JJRU5UQVRJT04sCi0gICAgICAgICAgImludmFsaWQiLCBOVUxMKSk7Ci0gIGNoZWNrX2ZpbHRlcl93aXRoX2V2ZW50ICgidmlkZW9mbGlwIiwgZXZlbnQsIDIsICJtZXRob2QiLCA4LCBOVUxMKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9nYW1tYSkKLXsKLSAgY2hlY2tfZmlsdGVyICgiZ2FtbWEiLCAyLCBOVUxMKTsKLSAgY2hlY2tfZmlsdGVyICgiZ2FtbWEiLCAyLCAiZ2FtbWEiLCAyLjAsIE5VTEwpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLXZpZGVvZmlsdGVyX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInZpZGVvZmlsdGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZpZGVvYmFsYW5jZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92aWRlb2ZsaXApOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZ2FtbWEpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAodmlkZW9maWx0ZXIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9taXhlci5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvdmlkZW9taXhlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjhkMWZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZpZGVvbWl4ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciB2aWRlbWl4ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA1PiBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDwyMDEzPiBUaGliYXVsdCBTYXVuaWVyIDx0aGliYXVsdC5zYXVuaWVyQGNvbGxhYm9yYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfVkFMR1JJTkQKLSMgaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y29uc2lzdGVuY3ljaGVja2VyLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YmFzZXNyYy5oPgotCi0jZGVmaW5lIFZJREVPX0NBUFNfU1RSSU5HICAgICAgICAgICAgICAgXAotICAgICJ2aWRlby94LXJhdywgIiAgICAgICAgICAgICAgICAgXAotICAgICJ3aWR0aCA9IChpbnQpIDMyMCwgIiAgICAgICAgICAgICAgIFwKLSAgICAiaGVpZ2h0ID0gKGludCkgMjQwLCAiICAgICAgICAgICAgICBcCi0gICAgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgMjUvMSAsICIgICAgXAotICAgICJmb3JtYXQgPSAoc3RyaW5nKSBJNDIwIgotCi1zdGF0aWMgR01haW5Mb29wICptYWluX2xvb3A7Ci0KLS8qIG1ha2Ugc3VyZSBkb3duc3RyZWFtIGdldHMgYSBDQVBTIGV2ZW50IGJlZm9yZSBidWZmZXJzIGFyZSBzZW50ICovCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9jYXBzKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKnZpZGVvbWl4ZXIsICpzaW5rOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXM7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdFBhZCAqcGFkOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYzEiKTsKLSAgdmlkZW9taXhlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvbWl4ZXIiLCAidmlkZW9taXhlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgdmlkZW9taXhlciwgc2luaywgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCB2aWRlb21peGVyLCBzaW5rLCBOVUxMKSk7Ci0KLSAgLyogcHJlcGFyZSBwbGF5aW5nICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpOwotCi0gIC8qIHdhaXQgZm9yIHByZXJvbGwgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICAvKiBjaGVjayBjYXBzIG9uIGZha2VzaW5rICovCi0gIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzIChwYWQpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwYWQpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyB2b2lkCi1tZXNzYWdlX3JlY2VpdmVkIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBHc3RQaXBlbGluZSAqIGJpbikKLXsKLSAgR1NUX0lORk8gKCJidXMgbWVzc2FnZSBmcm9tIFwiJSIgR1NUX1BUUl9GT1JNQVQgIlwiOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIG1lc3NhZ2UpOwotCi0gIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzp7Ci0gICAgICBHRXJyb3IgKmdlcnJvcjsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgIEdFcnJvciAqZ2Vycm9yOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLQotc3RhdGljIEdzdEZvcm1hdCBmb3JtYXQgPSBHU1RfRk9STUFUX1VOREVGSU5FRDsKLXN0YXRpYyBnaW50NjQgcG9zaXRpb24gPSAtMTsKLQotc3RhdGljIHZvaWQKLXRlc3RfZXZlbnRfbWVzc2FnZV9yZWNlaXZlZCAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwKLSAgICBHc3RQaXBlbGluZSAqIGJpbikKLXsKLSAgR1NUX0lORk8gKCJidXMgbWVzc2FnZSBmcm9tIFwiJSIgR1NUX1BUUl9GT1JNQVQgIlwiOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIG1lc3NhZ2UpOwotCi0gIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FOgotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc2VnbWVudF9kb25lIChtZXNzYWdlLCAmZm9ybWF0LCAmcG9zaXRpb24pOwotICAgICAgR1NUX0lORk8gKCJyZWNlaXZlZCBzZWdtZW50X2RvbmUgOiAlIiBHX0dJTlQ2NF9GT1JNQVQsIHBvc2l0aW9uKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKG1haW5fbG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2V2ZW50KQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmMxLCAqc3JjMiwgKnZpZGVvbWl4ZXIsICpzaW5rOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0RXZlbnQgKnNlZWtfZXZlbnQ7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JlczsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RQYWQgKnNyY3BhZCwgKnNpbmtwYWQ7Ci0gIEdzdFN0cmVhbUNvbnNpc3RlbmN5ICpjaGtfMSwgKmNoa18yLCAqY2hrXzM7Ci0KLSAgR1NUX0lORk8gKCJwcmVwYXJpbmcgdGVzdCIpOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChiaW4pOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAoYnVzLCBHX1BSSU9SSVRZX0hJR0gpOwotCi0gIHNyYzEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjMSIpOwotICBzcmMyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYzIiKTsKLSAgdmlkZW9taXhlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvbWl4ZXIiLCAidmlkZW9taXhlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzcmMxLCBzcmMyLCB2aWRlb21peGVyLCBzaW5rLCBOVUxMKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChzcmMxLCB2aWRlb21peGVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLSAgcmVzID0gZ3N0X2VsZW1lbnRfbGluayAoc3JjMiwgdmlkZW9taXhlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHZpZGVvbWl4ZXIsIHNpbmspOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICh2aWRlb21peGVyLCAic3JjIik7Ci0gIGNoa18zID0gZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3IChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIC8qIGNyZWF0ZSBjb25zaXN0ZW5jeSBjaGVja2VycyBmb3IgdGhlIHBhZHMgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYzEsICJzcmMiKTsKLSAgY2hrXzEgPSBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgKHNyY3BhZCk7Ci0gIHNpbmtwYWQgPSBnc3RfcGFkX2dldF9wZWVyIChzcmNwYWQpOwotICBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9hZGRfcGFkIChjaGtfMywgc2lua3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMyLCAic3JjIik7Ci0gIGNoa18yID0gZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfbmV3IChzcmNwYWQpOwotICBzaW5rcGFkID0gZ3N0X3BhZF9nZXRfcGVlciAoc3JjcGFkKTsKLSAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfYWRkX3BhZCAoY2hrXzMsIHNpbmtwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICBzZWVrX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgIEdTVF9TRUVLX0ZMQUdfU0VHTUVOVCB8IEdTVF9TRUVLX0ZMQUdfRkxVU0gsCi0gICAgICBHU1RfU0VFS19UWVBFX1NFVCwgKEdzdENsb2NrVGltZSkgMCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAyICogR1NUX1NFQ09ORCk7Ci0KLSAgZm9ybWF0ID0gR1NUX0ZPUk1BVF9VTkRFRklORUQ7Ci0gIHBvc2l0aW9uID0gLTE7Ci0KLSAgbWFpbl9sb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OnNlZ21lbnQtZG9uZSIsCi0gICAgICAoR0NhbGxiYWNrKSB0ZXN0X2V2ZW50X21lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVycm9yIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6d2FybmluZyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0KLSAgR1NUX0lORk8gKCJzdGFydGluZyB0ZXN0Iik7Ci0KLSAgLyogcHJlcGFyZSBwbGF5aW5nICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIC8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChiaW4sIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoYmluLCBzZWVrX2V2ZW50KTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICAvKiBydW4gcGlwZWxpbmUgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIEdTVF9JTkZPICgicnVubmluZyBtYWluIGxvb3AiKTsKLSAgZ19tYWluX2xvb3BfcnVuIChtYWluX2xvb3ApOwotCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBja19hc3NlcnRfaW50X2VxIChwb3NpdGlvbiwgMiAqIEdTVF9TRUNPTkQpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ19tYWluX2xvb3BfdW5yZWYgKG1haW5fbG9vcCk7Ci0gIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUgKGNoa18xKTsKLSAgZ3N0X2NvbnNpc3RlbmN5X2NoZWNrZXJfZnJlZSAoY2hrXzIpOwotICBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9mcmVlIChjaGtfMyk7Ci0gIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgZ3VpbnQgcGxheV9jb3VudCA9IDA7Ci1zdGF0aWMgR3N0RXZlbnQgKnBsYXlfc2Vla19ldmVudCA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3BsYXlfdHdpY2VfbWVzc2FnZV9yZWNlaXZlZCAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwKLSAgICBHc3RQaXBlbGluZSAqIGJpbikKLXsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXM7Ci0KLSAgR1NUX0lORk8gKCJidXMgbWVzc2FnZSBmcm9tIFwiJSIgR1NUX1BUUl9GT1JNQVQgIlwiOiAlIiBHU1RfUFRSX0ZPUk1BVCwKLSAgICAgIEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSksIG1lc3NhZ2UpOwotCi0gIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FOgotICAgICAgcGxheV9jb3VudCsrOwotICAgICAgaWYgKHBsYXlfY291bnQgPT0gMSkgewotICAgICAgICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICAgICAgLyogcHJlcGFyZSBwbGF5aW5nIGFnYWluICovCi0gICAgICAgIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKGJpbiksIEdTVF9TVEFURV9QQVVTRUQpOwotICAgICAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICAgICAgLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLwotICAgICAgICBzdGF0ZV9yZXMgPQotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotICAgICAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICAgICAgcmVzID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCAoR1NUX0VMRU1FTlQgKGJpbiksCi0gICAgICAgICAgICBnc3RfZXZlbnRfcmVmIChwbGF5X3NlZWtfZXZlbnQpKTsKLSAgICAgICAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICAgICAgICBzdGF0ZV9yZXMgPQotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX21haW5fbG9vcF9xdWl0IChtYWluX2xvb3ApOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkICgpOwotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wbGF5X3R3aWNlKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmMxLCAqc3JjMiwgKnZpZGVvbWl4ZXIsICpzaW5rOwotICBHc3RCdXMgKmJ1czsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZV9yZXM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RTdHJlYW1Db25zaXN0ZW5jeSAqY29uc2lzdDsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXMsIEdfUFJJT1JJVFlfSElHSCk7Ci0KLSAgc3JjMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMxIik7Ci0gIHNyYzIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjMiIpOwotICB2aWRlb21peGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9taXhlciIsICJ2aWRlb21peGVyIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYzEsIHNyYzIsIHZpZGVvbWl4ZXIsIHNpbmssIE5VTEwpOwotCi0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHNyYzEsIHZpZGVvbWl4ZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChzcmMyLCB2aWRlb21peGVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLSAgcmVzID0gZ3N0X2VsZW1lbnRfbGluayAodmlkZW9taXhlciwgc2luayk7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHZpZGVvbWl4ZXIsICJzcmMiKTsKLSAgY29uc2lzdCA9IGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX25ldyAoc3JjcGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICBwbGF5X3NlZWtfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX1NFRUtfRkxBR19TRUdNRU5UIHwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAwLAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIChHc3RDbG9ja1RpbWUpIDIgKiBHU1RfU0VDT05EKTsKLQotICBwbGF5X2NvdW50ID0gMDsKLQotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6c2VnbWVudC1kb25lIiwKLSAgICAgIChHQ2FsbGJhY2spIHRlc3RfcGxheV90d2ljZV9tZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplcnJvciIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6Ondhcm5pbmciLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgdGVzdCIpOwotCi0gIC8qIHByZXBhcmUgcGxheWluZyAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCi0gIHN0YXRlX3JlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChiaW4sIGdzdF9ldmVudF9yZWYgKHBsYXlfc2Vla19ldmVudCkpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIEdTVF9JTkZPICgic2Vla2VkIik7Ci0KLSAgLyogcnVuIHBpcGVsaW5lICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBnX21haW5fbG9vcF9ydW4gKG1haW5fbG9vcCk7Ci0KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIGNrX2Fzc2VydF9pbnRfZXEgKHBsYXlfY291bnQsIDIpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ19tYWluX2xvb3BfdW5yZWYgKG1haW5fbG9vcCk7Ci0gIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUgKGNvbnNpc3QpOwotICBnc3RfZXZlbnRfdW5yZWYgKHBsYXlfc2Vla19ldmVudCk7Ci0gIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9wbGF5X3R3aWNlX3RoZW5fYWRkX2FuZF9wbGF5X2FnYWluKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmMxLCAqc3JjMiwgKnNyYzMsICp2aWRlb21peGVyLCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzOwotICBnaW50IGk7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBHc3RTdHJlYW1Db25zaXN0ZW5jeSAqY29uc2lzdDsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXMsIEdfUFJJT1JJVFlfSElHSCk7Ci0KLSAgc3JjMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMxIik7Ci0gIHNyYzIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjMiIpOwotICB2aWRlb21peGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9taXhlciIsICJ2aWRlb21peGVyIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYzEsIHNyYzIsIHZpZGVvbWl4ZXIsIHNpbmssIE5VTEwpOwotCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkICh2aWRlb21peGVyLCAic3JjIik7Ci0gIGNvbnNpc3QgPSBnc3RfY29uc2lzdGVuY3lfY2hlY2tlcl9uZXcgKHNyY3BhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfbGluayAoc3JjMSwgdmlkZW9taXhlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHNyYzIsIHZpZGVvbWl4ZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rICh2aWRlb21peGVyLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICBwbGF5X3NlZWtfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX1NFRUtfRkxBR19TRUdNRU5UIHwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAwLAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIChHc3RDbG9ja1RpbWUpIDIgKiBHU1RfU0VDT05EKTsKLQotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6c2VnbWVudC1kb25lIiwKLSAgICAgIChHQ2FsbGJhY2spIHRlc3RfcGxheV90d2ljZV9tZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplcnJvciIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6Ondhcm5pbmciLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotCi0gIC8qIHJ1biBpdCB0d2ljZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgcGxheV9jb3VudCA9IDA7Ci0KLSAgICBHU1RfSU5GTyAoInN0YXJ0aW5nIHRlc3QtbG9vcCAlZCIsIGkpOwotCi0gICAgLyogcHJlcGFyZSBwbGF5aW5nICovCi0gICAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAgIC8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLSAgICBzdGF0ZV9yZXMgPQotICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICByZXMgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChiaW4sIGdzdF9ldmVudF9yZWYgKHBsYXlfc2Vla19ldmVudCkpOwotICAgIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0KLSAgICBHU1RfSU5GTyAoInNlZWtlZCIpOwotCi0gICAgLyogcnVuIHBpcGVsaW5lICovCi0gICAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4gKG1haW5fbG9vcCk7Ci0KLSAgICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgICBja19hc3NlcnRfaW50X2VxIChwbGF5X2NvdW50LCAyKTsKLQotICAgIC8qIHBsdWcgYW5vdGhlciBzb3VyY2UgKi8KLSAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICBzcmMzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYzMiKTsKLSAgICAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChiaW4pLCBzcmMzKTsKLQotICAgICAgcmVzID0gZ3N0X2VsZW1lbnRfbGluayAoc3JjMywgdmlkZW9taXhlcik7Ci0gICAgICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICAgIH0KLQotICAgIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX3Jlc2V0IChjb25zaXN0KTsKLSAgfQotCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOwotICBnc3RfZXZlbnRfdW5yZWYgKHBsYXlfc2Vla19ldmVudCk7Ci0gIGdzdF9jb25zaXN0ZW5jeV9jaGVja2VyX2ZyZWUgKGNvbnNpc3QpOwotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotLyogY2hlY2sgaWYgYWRkaW5nIHBhZHMgd29yayBhcyBleHBlY3RlZCAqLwotR1NUX1NUQVJUX1RFU1QgKHRlc3RfYWRkX3BhZCkKLXsKLSAgR3N0RWxlbWVudCAqYmluLCAqc3JjMSwgKnNyYzIsICp2aWRlb21peGVyLCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFBhZCAqc3JjcGFkOwotICBnYm9vbGVhbiByZXM7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlX3JlczsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXMsIEdfUFJJT1JJVFlfSElHSCk7Ci0KLSAgc3JjMSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMxIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjMSwgIm51bS1idWZmZXJzIiwgNCwgTlVMTCk7Ci0gIHNyYzIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjMiIpOwotICAvKiBvbmUgYnVmZmVyIGxlc3MsIHdlIGNvbm5lY3Qgd2l0aCAxIGJ1ZmZlciBvZiBkZWxheSAqLwotICBnX29iamVjdF9zZXQgKHNyYzIsICJudW0tYnVmZmVycyIsIDMsIE5VTEwpOwotICB2aWRlb21peGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9taXhlciIsICJ2aWRlb21peGVyIik7Ci0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYzEsIHZpZGVvbWl4ZXIsIHNpbmssIE5VTEwpOwotCi0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHNyYzEsIHZpZGVvbWl4ZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotICByZXMgPSBnc3RfZWxlbWVudF9saW5rICh2aWRlb21peGVyLCBzaW5rKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodmlkZW9taXhlciwgInNyYyIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIG1haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjpzZWdtZW50LWRvbmUiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLAotICAgICAgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZXJyb3IiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjp3YXJuaW5nIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZW9zIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLQotICBHU1RfSU5GTyAoInN0YXJ0aW5nIHRlc3QiKTsKLQotICAvKiBwcmVwYXJlIHBsYXlpbmcgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QQVVTRUQpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLwotICBzdGF0ZV9yZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgLyogYWRkIG90aGVyIGVsZW1lbnQgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjMiwgTlVMTCk7Ci0KLSAgLyogbm93IGxpbmsgdGhlIHNlY29uZCBlbGVtZW50ICovCi0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHNyYzIsIHZpZGVvbWl4ZXIpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIC8qIHNldCB0byBQQVVTRUQgYXMgd2VsbCAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHNyYzIsIEdTVF9TVEFURV9QQVVTRUQpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgLyogbm93IHBsYXkgYWxsICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICBnX21haW5fbG9vcF9ydW4gKG1haW5fbG9vcCk7Ci0KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIC8qIGNsZWFudXAgKi8KLSAgZ19tYWluX2xvb3BfdW5yZWYgKG1haW5fbG9vcCk7Ci0gIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0vKiBjaGVjayBpZiByZW1vdmluZyBwYWRzIHdvcmsgYXMgZXhwZWN0ZWQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3JlbW92ZV9wYWQpCi17Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKnNyYywgKnZpZGVvbWl4ZXIsICpzaW5rOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0UGFkICpwYWQsICpzcmNwYWQ7Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzOwotCi0gIEdTVF9JTkZPICgicHJlcGFyaW5nIHRlc3QiKTsKLQotICAvKiBidWlsZCBwaXBlbGluZSAqLwotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoYmluKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoX2Z1bGwgKGJ1cywgR19QUklPUklUWV9ISUdIKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCA0LCBOVUxMKTsKLSAgdmlkZW9taXhlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvbWl4ZXIiLCAidmlkZW9taXhlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzcmMsIHZpZGVvbWl4ZXIsIHNpbmssIE5VTEwpOwotCi0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHNyYywgdmlkZW9taXhlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHZpZGVvbWl4ZXIsIHNpbmspOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIC8qIGNyZWF0ZSBhbiB1bmNvbm5lY3RlZCBzaW5rcGFkIGluIHZpZGVvbWl4ZXIgKi8KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkICh2aWRlb21peGVyLCAic2lua18ldSIpOwotICBmYWlsX2lmIChwYWQgPT0gTlVMTCwgTlVMTCk7Ci0KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHZpZGVvbWl4ZXIsICJzcmMiKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc3JjcGFkKTsKLQotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6c2VnbWVudC1kb25lIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwKLSAgICAgIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVycm9yIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6d2FybmluZyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OmVvcyIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0KLSAgR1NUX0lORk8gKCJzdGFydGluZyB0ZXN0Iik7Ci0KLSAgLyogcHJlcGFyZSBwbGF5aW5nLCB0aGlzIHdpbGwgbm90IHByZXJvbGwgYXMgdmlkZW9taXhlciBpcyB3YWl0aW5nCi0gICAqIG9uIHRoZSB1bmNvbm5lY3RlZCBzaW5rcGFkLiAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiB3YWl0IGZvciBjb21wbGV0aW9uIGZvciBvbmUgc2Vjb25kLCB3aWxsIHJldHVybiBBU1lOQyAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLCBHU1RfU0VDT05EKTsKLSAgY2tfYXNzZXJ0X2ludF9lcSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICAvKiBnZXQgcmlkIG9mIHRoZSBwYWQgbm93LCB2aWRlb21peGVyIHNob3VsZCBzdG9wIHdhaXRpbmcgb24gaXQgYW5kCi0gICAqIGNvbnRpbnVlIHRoZSBwcmVyb2xsICovCi0gIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQgKHZpZGVvbWl4ZXIsIHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgLyogd2FpdCBmb3IgY29tcGxldGlvbiwgc2hvdWxkIHdvcmsgbm93ICovCi0gIHN0YXRlX3JlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiBub3cgcGxheSBhbGwgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgY2tfYXNzZXJ0X2ludF9uZSAoc3RhdGVfcmVzLCBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobWFpbl9sb29wKTsKLQotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnX21haW5fbG9vcF91bnJlZiAobWFpbl9sb29wKTsKLSAgZ3N0X2J1c19yZW1vdmVfc2lnbmFsX3dhdGNoIChidXMpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHX09CSkVDVCAoYnVzKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdfT0JKRUNUIChiaW4pKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBHc3RCdWZmZXIgKmhhbmRvZmZfYnVmZmVyID0gTlVMTDsKLXN0YXRpYyB2b2lkCi1oYW5kb2ZmX2J1ZmZlcl9jYiAoR3N0RWxlbWVudCAqIGZha2VzaW5rLCBHc3RCdWZmZXIgKiBidWZmZXIsIEdzdFBhZCAqIHBhZCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdTVF9ERUJVRyAoImdvdCBidWZmZXIgJXAiLCBidWZmZXIpOwotICBnc3RfYnVmZmVyX3JlcGxhY2UgKCZoYW5kb2ZmX2J1ZmZlciwgYnVmZmVyKTsKLX0KLQotLyogY2hlY2sgaWYgY2xpcHBpbmcgd29ya3MgYXMgZXhwZWN0ZWQgKi8KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NsaXApCi17Ci0gIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgR3N0RWxlbWVudCAqYmluLCAqdmlkZW9taXhlciwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RQYWQgKnNpbmtwYWQ7Ci0gIGdib29sZWFuIHJlczsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzOwotICBHc3RGbG93UmV0dXJuIHJldDsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RCdWZmZXIgKmJ1ZmZlcjsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsIChidXMsIEdfUFJJT1JJVFlfSElHSCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZXJyb3IiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjp3YXJuaW5nIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZW9zIiwgKEdDYWxsYmFjaykgbWVzc2FnZV9yZWNlaXZlZCwgYmluKTsKLQotICAvKiBqdXN0IGFuIHZpZGVvbWl4ZXIgYW5kIGEgZmFrZXNpbmsgKi8KLSAgdmlkZW9taXhlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvbWl4ZXIiLCAidmlkZW9taXhlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJzaWduYWwtaGFuZG9mZnMiLCBUUlVFLCBOVUxMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoc2luaywgImhhbmRvZmYiLCAoR0NhbGxiYWNrKSBoYW5kb2ZmX2J1ZmZlcl9jYiwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHZpZGVvbWl4ZXIsIHNpbmssIE5VTEwpOwotCi0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHZpZGVvbWl4ZXIsIHNpbmspOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIC8qIHNldCB0byBwbGF5aW5nICovCi0gIHN0YXRlX3JlcyA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiBjcmVhdGUgYW4gdW5jb25uZWN0ZWQgc2lua3BhZCBpbiB2aWRlb21peGVyLCBzaG91bGQgYWxzbyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlCi0gICAqIHRoZSBwYWQgKi8KLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAodmlkZW9taXhlciwgInNpbmtfJXUiKTsKLSAgZmFpbF9pZiAoc2lua3BhZCA9PSBOVUxMLCBOVUxMKTsKLQotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQsIGdzdF9ldmVudF9uZXdfc3RyZWFtX3N0YXJ0ICgidGVzdCIpKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFZJREVPX0NBUFNfU1RSSU5HKTsKLQotICBnc3RfcGFkX3NldF9jYXBzIChzaW5rcGFkLCBjYXBzKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIHNlbmQgc2VnbWVudCB0byB2aWRlb21peGVyICovCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotICBzZWdtZW50LnN0YXJ0ID0gR1NUX1NFQ09ORDsKLSAgc2VnbWVudC5zdG9wID0gMiAqIEdTVF9TRUNPTkQ7Ci0gIHNlZ21lbnQudGltZSA9IDA7Ci0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZCwgZXZlbnQpOwotCi0gIC8qIHNob3VsZCBiZSBjbGlwcGVkIGFuZCBvayAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDExNTIwMCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDI1MCAqIEdTVF9NU0VDT05EOwotICBHU1RfREVCVUcgKCJwdXNoaW5nIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7Ci0gIHJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gIGNrX2Fzc2VydF9pbnRfZXEgKHJldCwgR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoaGFuZG9mZl9idWZmZXIgPT0gTlVMTCk7Ci0KLSAgLyogc2hvdWxkIGJlIHBhcnRpYWxseSBjbGlwcGVkICovCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMTE1MjAwKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSA5MDAgKiBHU1RfTVNFQ09ORDsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IDI1MCAqIEdTVF9NU0VDT05EOwotICBHU1RfREVCVUcgKCJwdXNoaW5nIGJ1ZmZlciAlcCIsIGJ1ZmZlcik7Ci0gIHJldCA9IGdzdF9wYWRfY2hhaW4gKHNpbmtwYWQsIGJ1ZmZlcik7Ci0gIGNrX2Fzc2VydF9pbnRfZXEgKHJldCwgR1NUX0ZMT1dfT0spOwotICBmYWlsX3VubGVzcyAoaGFuZG9mZl9idWZmZXIgIT0gTlVMTCk7Ci0gIGdzdF9idWZmZXJfcmVwbGFjZSAoJmhhbmRvZmZfYnVmZmVyLCBOVUxMKTsKLQotICAvKiBzaG91bGQgbm90IGJlIGNsaXBwZWQgKi8KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMTUyMDApOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IDEgKiBHU1RfU0VDT05EOwotICBHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpID0gMjUwICogR1NUX01TRUNPTkQ7Ci0gIEdTVF9ERUJVRyAoInB1c2hpbmcgYnVmZmVyICVwIiwgYnVmZmVyKTsKLSAgcmV0ID0gZ3N0X3BhZF9jaGFpbiAoc2lua3BhZCwgYnVmZmVyKTsKLSAgY2tfYXNzZXJ0X2ludF9lcSAocmV0LCBHU1RfRkxPV19PSyk7Ci0gIGZhaWxfdW5sZXNzIChoYW5kb2ZmX2J1ZmZlciAhPSBOVUxMKTsKLSAgZ3N0X2J1ZmZlcl9yZXBsYWNlICgmaGFuZG9mZl9idWZmZXIsIE5VTEwpOwotCi0gIC8qIHNob3VsZCBiZSBjbGlwcGVkIGFuZCBvayAqLwotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDExNTIwMCk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gMiAqIEdTVF9TRUNPTkQ7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSAyNTAgKiBHU1RfTVNFQ09ORDsKLSAgR1NUX0RFQlVHICgicHVzaGluZyBidWZmZXIgJXAiLCBidWZmZXIpOwotICByZXQgPSBnc3RfcGFkX2NoYWluIChzaW5rcGFkLCBidWZmZXIpOwotICBja19hc3NlcnRfaW50X2VxIChyZXQsIEdTVF9GTE9XX09LKTsKLSAgZmFpbF91bmxlc3MgKGhhbmRvZmZfYnVmZmVyID09IE5VTEwpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZHVyYXRpb25faXNfbWF4KQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmNbM10sICp2aWRlb21peGVyLCAqc2luazsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzOwotICBHc3RGb3JtYXQgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICBnYm9vbGVhbiByZXM7Ci0gIGdpbnQ2NCBkdXJhdGlvbjsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgLyogMyBzb3VyY2VzLCBhbiB2aWRlb21peGVyIGFuZCBhIGZha2VzaW5rICovCi0gIHNyY1swXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsIE5VTEwpOwotICBzcmNbMV0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCBOVUxMKTsKLSAgc3JjWzJdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgTlVMTCk7Ci0gIHZpZGVvbWl4ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb21peGVyIiwgInZpZGVvbWl4ZXIiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjWzBdLCBzcmNbMV0sIHNyY1syXSwgdmlkZW9taXhlciwgc2luaywKLSAgICAgIE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1swXSwgdmlkZW9taXhlcik7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1sxXSwgdmlkZW9taXhlcik7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1syXSwgdmlkZW9taXhlcik7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHZpZGVvbWl4ZXIsIHNpbmspOwotCi0gIC8qIGlya3MsIGR1cmF0aW9uIGlzIHJlc2V0IG9uIGJhc2VzcmMgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmVzICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgTlVMTCk7Ci0KLSAgLyogc2V0IGR1cmF0aW9ucyBvbiBzcmMgKi8KLSAgR1NUX0JBU0VfU1JDIChzcmNbMF0pLT5zZWdtZW50LmR1cmF0aW9uID0gMTAwMDsKLSAgR1NUX0JBU0VfU1JDIChzcmNbMV0pLT5zZWdtZW50LmR1cmF0aW9uID0gMzAwMDsKLSAgR1NUX0JBU0VfU1JDIChzcmNbMl0pLT5zZWdtZW50LmR1cmF0aW9uID0gMjAwMDsKLQotICAvKiBzZXQgdG8gcGxheWluZyAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmVzICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgTlVMTCk7Ci0KLSAgLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLwotICBzdGF0ZV9yZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmVzICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgTlVMTCk7Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKEdTVF9FTEVNRU5UIChiaW4pLCBmb3JtYXQsICZkdXJhdGlvbik7Ci0gIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOwotCi0gIGNrX2Fzc2VydF9pbnRfZXEgKGR1cmF0aW9uLCAzMDAwKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2R1cmF0aW9uX3Vua25vd25fb3ZlcnJpZGVzKQotewotICBHc3RFbGVtZW50ICpiaW4sICpzcmNbM10sICp2aWRlb21peGVyLCAqc2luazsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzOwotICBHc3RGb3JtYXQgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICBnYm9vbGVhbiByZXM7Ci0gIGdpbnQ2NCBkdXJhdGlvbjsKLQotICBHU1RfSU5GTyAoInByZXBhcmluZyB0ZXN0Iik7Ci0KLSAgLyogYnVpbGQgcGlwZWxpbmUgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgLyogMyBzb3VyY2VzLCBhbiB2aWRlb21peGVyIGFuZCBhIGZha2VzaW5rICovCi0gIHNyY1swXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsIE5VTEwpOwotICBzcmNbMV0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCBOVUxMKTsKLSAgc3JjWzJdID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgTlVMTCk7Ci0gIHZpZGVvbWl4ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb21peGVyIiwgInZpZGVvbWl4ZXIiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjWzBdLCBzcmNbMV0sIHNyY1syXSwgdmlkZW9taXhlciwgc2luaywKLSAgICAgIE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1swXSwgdmlkZW9taXhlcik7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1sxXSwgdmlkZW9taXhlcik7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHNyY1syXSwgdmlkZW9taXhlcik7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKHZpZGVvbWl4ZXIsIHNpbmspOwotCi0gIC8qIGlya3MsIGR1cmF0aW9uIGlzIHJlc2V0IG9uIGJhc2VzcmMgKi8KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QQVVTRUQpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmVzICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgTlVMTCk7Ci0KLSAgLyogc2V0IGR1cmF0aW9ucyBvbiBzcmMgKi8KLSAgR1NUX0JBU0VfU1JDIChzcmNbMF0pLT5zZWdtZW50LmR1cmF0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgR1NUX0JBU0VfU1JDIChzcmNbMV0pLT5zZWdtZW50LmR1cmF0aW9uID0gMzAwMDsKLSAgR1NUX0JBU0VfU1JDIChzcmNbMl0pLT5zZWdtZW50LmR1cmF0aW9uID0gMjAwMDsKLQotICAvKiBzZXQgdG8gcGxheWluZyAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmVzICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgTlVMTCk7Ci0KLSAgLyogd2FpdCBmb3IgY29tcGxldGlvbiAqLwotICBzdGF0ZV9yZXMgPQotICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChHU1RfRUxFTUVOVCAoYmluKSwgTlVMTCwgTlVMTCwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpOwotICBmYWlsX3VubGVzcyAoc3RhdGVfcmVzICE9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgTlVMTCk7Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKEdTVF9FTEVNRU5UIChiaW4pLCBmb3JtYXQsICZkdXJhdGlvbik7Ci0gIGZhaWxfdW5sZXNzIChyZXMsIE5VTEwpOwotCi0gIGNrX2Fzc2VydF9pbnRfZXEgKGR1cmF0aW9uLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIGdib29sZWFuIGxvb3BlZCA9IEZBTFNFOwotCi1zdGF0aWMgdm9pZAotbG9vcF9zZWdtZW50X2RvbmUgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIEdzdEVsZW1lbnQgKiBiaW4pCi17Ci0gIEdTVF9JTkZPICgiYnVzIG1lc3NhZ2UgZnJvbSBcIiUiIEdTVF9QVFJfRk9STUFUICJcIjogJSIgR1NUX1BUUl9GT1JNQVQsCi0gICAgICBHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBtZXNzYWdlKTsKLQotICBpZiAobG9vcGVkKSB7Ci0gICAgZ19tYWluX2xvb3BfcXVpdCAobWFpbl9sb29wKTsKLSAgfSBlbHNlIHsKLSAgICBHc3RFdmVudCAqc2Vla19ldmVudDsKLSAgICBnYm9vbGVhbiByZXM7Ci0KLSAgICBzZWVrX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgR1NUX1NFRUtfRkxBR19TRUdNRU5ULAotICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgKEdzdENsb2NrVGltZSkgMCwKLSAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIChHc3RDbG9ja1RpbWUpIDEgKiBHU1RfU0VDT05EKTsKLQotICAgIHJlcyA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGJpbiwgc2Vla19ldmVudCk7Ci0gICAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLSAgICBsb29wZWQgPSBUUlVFOwotICB9Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2xvb3ApCi17Ci0gIEdzdEVsZW1lbnQgKmJpbiwgKnNyYzEsICpzcmMyLCAqdmlkZW9taXhlciwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RFdmVudCAqc2Vla19ldmVudDsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVfcmVzOwotICBnYm9vbGVhbiByZXM7Ci0KLSAgR1NUX0lORk8gKCJwcmVwYXJpbmcgdGVzdCIpOwotCi0gIC8qIGJ1aWxkIHBpcGVsaW5lICovCi0gIGJpbiA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChiaW4pOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbCAoYnVzLCBHX1BSSU9SSVRZX0hJR0gpOwotCi0gIHNyYzEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic3JjMSIpOwotICBzcmMyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYzIiKTsKLSAgdmlkZW9taXhlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvbWl4ZXIiLCAidmlkZW9taXhlciIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChiaW4pLCBzcmMxLCBzcmMyLCB2aWRlb21peGVyLCBzaW5rLCBOVUxMKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9saW5rIChzcmMxLCB2aWRlb21peGVyKTsKLSAgZmFpbF91bmxlc3MgKHJlcyA9PSBUUlVFLCBOVUxMKTsKLSAgcmVzID0gZ3N0X2VsZW1lbnRfbGluayAoc3JjMiwgdmlkZW9taXhlcik7Ci0gIGZhaWxfdW5sZXNzIChyZXMgPT0gVFJVRSwgTlVMTCk7Ci0gIHJlcyA9IGdzdF9lbGVtZW50X2xpbmsgKHZpZGVvbWl4ZXIsIHNpbmspOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIHNlZWtfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgR1NUX1NFRUtfRkxBR19TRUdNRU5UIHwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAoR3N0Q2xvY2tUaW1lKSAwLCBHU1RfU0VFS19UWVBFX1NFVCwKLSAgICAgIChHc3RDbG9ja1RpbWUpIDIgKiBHU1RfU0VDT05EKTsKLQotICBtYWluX2xvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6c2VnbWVudC1kb25lIiwKLSAgICAgIChHQ2FsbGJhY2spIGxvb3Bfc2VnbWVudF9kb25lLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplcnJvciIsIChHQ2FsbGJhY2spIG1lc3NhZ2VfcmVjZWl2ZWQsIGJpbik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6Ondhcm5pbmciLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjplb3MiLCAoR0NhbGxiYWNrKSBtZXNzYWdlX3JlY2VpdmVkLCBiaW4pOwotCi0gIEdTVF9JTkZPICgic3RhcnRpbmcgdGVzdCIpOwotCi0gIC8qIHByZXBhcmUgcGxheWluZyAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICAvKiB3YWl0IGZvciBjb21wbGV0aW9uICovCi0gIHN0YXRlX3JlcyA9Ci0gICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChiaW4pLCBOVUxMLCBOVUxMLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGNrX2Fzc2VydF9pbnRfbmUgKHN0YXRlX3JlcywgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKTsKLQotICByZXMgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChiaW4sIHNlZWtfZXZlbnQpOwotICBmYWlsX3VubGVzcyAocmVzID09IFRSVUUsIE5VTEwpOwotCi0gIC8qIHJ1biBwaXBlbGluZSAqLwotICBzdGF0ZV9yZXMgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBja19hc3NlcnRfaW50X25lIChzdGF0ZV9yZXMsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgR1NUX0lORk8gKCJydW5uaW5nIG1haW4gbG9vcCIpOwotICBnX21haW5fbG9vcF9ydW4gKG1haW5fbG9vcCk7Ci0KLSAgc3RhdGVfcmVzID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLQotICAvKiBjbGVhbnVwICovCi0gIGdfbWFpbl9sb29wX3VucmVmIChtYWluX2xvb3ApOwotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2lmIDAKLUdTVF9TVEFSVF9URVNUICh0ZXN0X2ZsdXNoX3N0YXJ0X2ZsdXNoX3N0b3ApCi17Ci0gIEdzdFBhZFRlbXBsYXRlICpzaW5rX3RlbXBsYXRlOwotICBHc3RQYWQgKnRtcHBhZCwgKnNpbmtwYWQxLCAqc2lua3BhZDIsICp2aWRlb21peGVyX3NyYzsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMxLCAqc3JjMiwgKnZpZGVvbWl4ZXIsICpzaW5rOwotCi0gIEdTVF9JTkZPICgicHJlcGFyaW5nIHRlc3QiKTsKLQotICAvKiBidWlsZCBwaXBlbGluZSAqLwotICBwaXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcgKCJwaXBlbGluZSIpOwotICBzcmMxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInNyYzEiKTsKLSAgc3JjMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvdGVzdHNyYyIsICJzcmMyIik7Ci0gIHZpZGVvbWl4ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb21peGVyIiwgInZpZGVvbWl4ZXIiKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMxLCBzcmMyLCB2aWRlb21peGVyLCBzaW5rLCBOVUxMKTsKLQotICBzaW5rX3RlbXBsYXRlID0KLSAgICAgIGdzdF9lbGVtZW50X2NsYXNzX2dldF9wYWRfdGVtcGxhdGUgKEdTVF9FTEVNRU5UX0dFVF9DTEFTUyAodmlkZW9taXhlciksCi0gICAgICAic2lua18ldSIpOwotICBmYWlsX3VubGVzcyAoR1NUX0lTX1BBRF9URU1QTEFURSAoc2lua190ZW1wbGF0ZSkpOwotICBzaW5rcGFkMSA9IGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICh2aWRlb21peGVyLCBzaW5rX3RlbXBsYXRlLCBOVUxMLCBOVUxMKTsKLSAgdG1wcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYzEsICJzcmMiKTsKLSAgZ3N0X3BhZF9saW5rICh0bXBwYWQsIHNpbmtwYWQxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wcGFkKTsKLQotICBzaW5rcGFkMiA9IGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkICh2aWRlb21peGVyLCBzaW5rX3RlbXBsYXRlLCBOVUxMLCBOVUxMKTsKLSAgdG1wcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHNyYzIsICJzcmMiKTsKLSAgZ3N0X3BhZF9saW5rICh0bXBwYWQsIHNpbmtwYWQyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodG1wcGFkKTsKLQotICBnc3RfZWxlbWVudF9saW5rICh2aWRlb21peGVyLCBzaW5rKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLAotICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyk7Ci0KLSAgdmlkZW9taXhlcl9zcmMgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodmlkZW9taXhlciwgInNyYyIpOwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0ZMVVNISU5HICh2aWRlb21peGVyX3NyYykpOwotICBnc3RfcGFkX3NlbmRfZXZlbnQgKHNpbmtwYWQxLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0ICgpKTsKLSAgZmFpbF91bmxlc3MgKEdTVF9QQURfSVNfRkxVU0hJTkcgKHZpZGVvbWl4ZXJfc3JjKSk7Ci0gIGdzdF9wYWRfc2VuZF9ldmVudCAoc2lua3BhZDEsIGdzdF9ldmVudF9uZXdfZmx1c2hfc3RvcCAoVFJVRSkpOwotICBmYWlsX2lmIChHU1RfUEFEX0lTX0ZMVVNISU5HICh2aWRlb21peGVyX3NyYykpOwotICBnc3Rfb2JqZWN0X3VucmVmICh2aWRlb21peGVyX3NyYyk7Ci0KLSAgLyogY2xlYW51cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQxKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZDIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLSNlbmRpZgotCi1zdGF0aWMgU3VpdGUgKgotdmlkZW9taXhlcl9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ2aWRlb21peGVyIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NhcHMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZXZlbnQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGxheV90d2ljZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9wbGF5X3R3aWNlX3RoZW5fYWRkX2FuZF9wbGF5X2FnYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FkZF9wYWQpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmVtb3ZlX3BhZCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9jbGlwKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2R1cmF0aW9uX2lzX21heCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kdXJhdGlvbl91bmtub3duX292ZXJyaWRlcyk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9sb29wKTsKLSAgLyogVGhpcyB0ZXN0IGlzIHJhY3kgYW5kIG9jY2FzaW9uYWxseSBmYWlscyBpbiBpbnRlcmVzdGluZyB3YXlzCi0gICAqIGp1c3QgbGlrZSB0aGUgY29ycmVzcG9uZGluZyBhZGRlciB0ZXN0IGRvZXMvZGlkLCBzZWUKLSAgICogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTcwODg5MQotICAgKiBJdCdzIHVubGlrZWx5IHRoYXQgaXQgd2lsbCBldmVyIGJlIGZpeGVkIGZvciB2aWRlb21peGVyL2NvbGxlY3RwYWRzLAotICAgKiBhcyBpdCB3b3JrcyBmaW5lIHdpdGggY29tcG9zaXRvciAqLwotI2lmIDAKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2ZsdXNoX3N0YXJ0X2ZsdXNoX3N0b3ApOwotI2VuZGlmCi0KLSAgLyogVXNlIGEgbG9uZ2VyIHRpbWVvdXQgKi8KLSNpZmRlZiBIQVZFX1ZBTEdSSU5ECi0gIGlmIChSVU5OSU5HX09OX1ZBTEdSSU5EKSB7Ci0gICAgdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA1ICogNjApOwotICB9IGVsc2UKLSNlbmRpZgotICB7Ci0gICAgLyogdGhpcyBpcyBzaG9ydGVyIHRoYW4gdGhlIGRlZmF1bHQgNjAgc2Vjb25kcz8hICh0cG0pICovCi0gICAgLyogdGNhc2Vfc2V0X3RpbWVvdXQgKHRjX2NoYWluLCA2KTsgKi8KLSAgfQotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAodmlkZW9taXhlcik7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy92cDhkZWMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOGRlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWJkNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOGRlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgSTQyMCwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbMSwgTUFYXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWzEsIE1BWF0sICIgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWzAsIE1BWF0iKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJ2aWRlby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgSTQyMCwgIgotICAgICAgICAid2lkdGggPSAoaW50KSBbMSwgTUFYXSwgIgotICAgICAgICAiaGVpZ2h0ID0gKGludCkgWzEsIE1BWF0sICIgImZyYW1lcmF0ZSA9IChmcmFjdGlvbikgWzAsIE1BWF0iKSk7Ci0KLXN0YXRpYyBHc3RQYWQgKnNpbmtwYWQsICpzcmNwYWQ7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX3ZwOGRlYyAoY29uc3QgZ2NoYXIgKiBzcmNfY2Fwc19zdHIpCi17Ci0gIEdzdEVsZW1lbnQgKmJpbjsKLSAgR3N0RWxlbWVudCAqdnA4ZW5jLCAqdnA4ZGVjOwotICBHc3RDYXBzICpzcmNjYXBzID0gTlVMTDsKLSAgR3N0QnVzICpidXM7Ci0gIEdzdFBhZCAqZ2hvc3RwYWQsICp0YXJnZXRwYWQ7Ci0KLSAgaWYgKHNyY19jYXBzX3N0cikgewotICAgIHNyY2NhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZyAoc3JjX2NhcHNfc3RyKTsKLSAgICBmYWlsX3VubGVzcyAoc3JjY2FwcyAhPSBOVUxMKTsKLSAgfQotCi0gIGJpbiA9IGdzdF9iaW5fbmV3ICgiYmluIik7Ci0KLSAgdnA4ZW5jID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ2cDhlbmMiKTsKLSAgZmFpbF91bmxlc3MgKHZwOGVuYyAhPSBOVUxMKTsKLSAgdnA4ZGVjID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ2cDhkZWMiKTsKLSAgZmFpbF91bmxlc3MgKHZwOGRlYyAhPSBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHZwOGVuYywgIm5hbWUiLCAiZW5jb2RlciIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHZwOGRlYywgIm5hbWUiLCAiZGVjb2RlciIsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHZwOGVuYywgdnA4ZGVjLCBOVUxMKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfcGFkcyAodnA4ZW5jLCAic3JjIiwgdnA4ZGVjLCAic2luayIpKTsKLQotICB0YXJnZXRwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodnA4ZW5jLCAic2luayIpOwotICBmYWlsX3VubGVzcyAodGFyZ2V0cGFkICE9IE5VTEwpOwotICBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHRhcmdldHBhZCk7Ci0gIGZhaWxfdW5sZXNzIChnaG9zdHBhZCAhPSBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnaG9zdHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHRhcmdldHBhZCk7Ci0KLSAgdGFyZ2V0cGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHZwOGRlYywgInNyYyIpOwotICBmYWlsX3VubGVzcyAodGFyZ2V0cGFkICE9IE5VTEwpOwotICBnaG9zdHBhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic3JjIiwgdGFyZ2V0cGFkKTsKLSAgZmFpbF91bmxlc3MgKGdob3N0cGFkICE9IE5VTEwpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdob3N0cGFkKTsKLSAgZ3N0X29iamVjdF91bnJlZiAodGFyZ2V0cGFkKTsKLQotICBzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAoYmluLCAmc3JjdGVtcGxhdGUpOwotICBzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkIChiaW4sICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgVFJVRSk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKHNyY3BhZCwgYmluLCBzcmNjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGJ1cyA9IGdzdF9idXNfbmV3ICgpOwotICBnc3RfZWxlbWVudF9zZXRfYnVzIChiaW4sIGJ1cyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaWYgKHNyY2NhcHMpCi0gICAgZ3N0X2NhcHNfdW5yZWYgKHNyY2NhcHMpOwotCi0gIGJ1ZmZlcnMgPSBOVUxMOwotICByZXR1cm4gYmluOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF92cDhkZWMgKEdzdEVsZW1lbnQgKiBiaW4pCi17Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIC8qIEZyZWUgcGFyc2VkIGJ1ZmZlcnMgKi8KLSAgZ3N0X2NoZWNrX2Ryb3BfYnVmZmVycyAoKTsKLQotICBidXMgPSBHU1RfRUxFTUVOVF9CVVMgKGJpbik7Ci0gIGdzdF9idXNfc2V0X2ZsdXNoaW5nIChidXMsIFRSVUUpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc3JjcGFkLCBGQUxTRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAoc2lua3BhZCwgRkFMU0UpOwotCi0gIGdzdF9jaGVja190ZWFyZG93bl9zcmNfcGFkIChiaW4pOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKGJpbik7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9lbGVtZW50IChiaW4pOwotfQotCi1zdGF0aWMgdm9pZAotX2dzdF92cDhfdGVzdF9jaGVja19vdXRwdXRfY2FwcyAoZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsIGdpbnQgZnBzX24sCi0gICAgZ2ludCBmcHNfZCkKLXsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0gIGdpbnQgY2Fwc193LCBjYXBzX2gsIGNhcHNfZnBzbiwgY2Fwc19mcHNkOwotCi0gIGNhcHMgPSBnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMgKHNpbmtwYWQpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMKTsKLSAgc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoY2FwcywgMCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludCAoc3RydWN0dXJlLCAid2lkdGgiLCAmY2Fwc193KSk7Ci0gIGZhaWxfdW5sZXNzIChnc3Rfc3RydWN0dXJlX2dldF9pbnQgKHN0cnVjdHVyZSwgImhlaWdodCIsICZjYXBzX2gpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uIChzdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCAmY2Fwc19mcHNuLAotICAgICAgICAgICZjYXBzX2Zwc2QpKTsKLQotICBmYWlsX3VubGVzcyAod2lkdGggPT0gY2Fwc193KTsKLSAgZmFpbF91bmxlc3MgKGhlaWdodCA9PSBjYXBzX2gpOwotICBmYWlsX3VubGVzcyAoZnBzX24gPT0gY2Fwc19mcHNuKTsKLSAgZmFpbF91bmxlc3MgKGZwc19kID09IGNhcHNfZnBzZCk7Ci0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWNvZGVfc2ltcGxlKQotewotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdEJ1ZmZlciAqYnVmZmVyOwotICBnaW50IGk7Ci0gIEdMaXN0ICpsOwotICBHc3RTZWdtZW50IHNlZzsKLQotICBiaW4gPQotICAgICAgc2V0dXBfdnA4ZGVjCi0gICAgICAoInZpZGVvL3gtcmF3LGZvcm1hdD0oc3RyaW5nKUk0MjAsd2lkdGg9KGludCkzMjAsaGVpZ2h0PShpbnQpMjQwLGZyYW1lcmF0ZT0oZnJhY3Rpb24pMjUvMSIpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWcsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIHNlZy5zdG9wID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlICgyMCwgR1NUX1NFQ09ORCwgMjUpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfc2VnbWVudCAoJnNlZykpKTsKLQotICBidWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKDMyMCAqIDI0MCArIDIgKiAxNjAgKiAxMjApOwotICBnc3RfYnVmZmVyX21lbXNldCAoYnVmZmVyLCAwLCAwLCAtMSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKLSAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmZmVyKSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoaSwgR1NUX1NFQ09ORCwgMjUpOwotICAgIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKDEsIEdTVF9TRUNPTkQsIDI1KTsKLSAgICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKSA9PSBHU1RfRkxPV19PSyk7Ci0gIH0KLQotICBnc3RfYnVmZmVyX3VucmVmIChidWZmZXIpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19lb3MgKCkpKTsKLQotICAvKiBBbGwgYnVmZmVycyBtdXN0IGJlIHRoZXJlIG5vdyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMjApOwotCi0gIGZvciAobCA9IGJ1ZmZlcnMsIGkgPSAwOyBsOyBsID0gbC0+bmV4dCwgaSsrKSB7Ci0gICAgYnVmZmVyID0gbC0+ZGF0YTsKLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpLAotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGksIEdTVF9TRUNPTkQsIDI1KSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSwKLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlICgxLCBHU1RfU0VDT05ELCAyNSkpOwotICB9Ci0KLSAgY2xlYW51cF92cDhkZWMgKGJpbik7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWNvZGVfY2Fwc19jaGFuZ2UpCi17Ci0gIEdzdEVsZW1lbnQgKmJpbjsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIEdzdFNlZ21lbnQgc2VnOwotICBHc3RFbGVtZW50ICplbmNvZGVyOwotICBHc3RDYXBzICpjYXBzOwotCi0gIGJpbiA9Ci0gICAgICBzZXR1cF92cDhkZWMKLSAgICAgICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0oaW50KTMyMCxoZWlnaHQ9KGludCkyNDAsZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xIik7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWcpKSk7Ci0KLSAgYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgzMjAgKiAyNDAgKyAyICogMTYwICogMTIwKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGJ1ZmZlciwgMCwgMCwgLTEpOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlICgwLCBHU1RfU0VDT05ELCAyNSk7Ci0gIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZmZlcikgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKDEsIEdTVF9TRUNPTkQsIDI1KTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAoc3JjcGFkLCBidWZmZXIpID09IEdTVF9GTE9XX09LKTsKLQotICAvKiBhdCB0aGlzIHBvaW50LCB0aGUgb3V0cHV0IGNhcHMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBpbnB1dCAqLwotICBfZ3N0X3ZwOF90ZXN0X2NoZWNrX291dHB1dF9jYXBzICgzMjAsIDI0MCwgMjUsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGJ1ZmZlcnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIC8qIG5vdyBjaGFuZ2UgdGhlIGNhcHMgKi8KLSAgZW5jb2RlciA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKGJpbiksICJlbmNvZGVyIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZW5jb2RlciwgR1NUX1NUQVRFX05VTEwpOwotICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50IChlbmNvZGVyKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoZW5jb2Rlcik7Ci0gIGNhcHMgPSBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJ2aWRlby94LXJhdyxmb3JtYXQ9KHN0cmluZylJNDIwLHdpZHRoPShpbnQpNjQsIgotICAgICAgImhlaWdodD0oaW50KTMyLGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSIpOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdzdF9ldmVudF9uZXdfY2FwcyAoY2FwcykpKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQgKCZzZWcpKSk7Ci0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoNjQgKiAzMiArIDIgKiAzMiAqIDE2KTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGJ1ZmZlciwgMCwgMCwgLTEpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlcikgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKDAsIEdTVF9TRUNPTkQsIDMwKTsKLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMSwgR1NUX1NFQ09ORCwgMzApOwotICBmYWlsX3VubGVzcyAoZ3N0X3BhZF9wdXNoIChzcmNwYWQsIGJ1ZmZlcikgPT0gR1NUX0ZMT1dfT0spOwotCi0gIC8qIGF0IHRoaXMgcG9pbnQsIHRoZSBvdXRwdXQgY2FwcyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGlucHV0ICovCi0gIF9nc3RfdnA4X3Rlc3RfY2hlY2tfb3V0cHV0X2NhcHMgKDY0LCAzMiwgMzAsIDEpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnX2xpc3RfbGVuZ3RoIChidWZmZXJzKSwgMSk7Ci0gIGdfbGlzdF9mcmVlX2Z1bGwgKGJ1ZmZlcnMsIChHRGVzdHJveU5vdGlmeSkgZ3N0X2J1ZmZlcl91bnJlZik7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIGNsZWFudXBfdnA4ZGVjIChiaW4pOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLXZwOGRlY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ2cDhkZWMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZWNvZGVfc2ltcGxlKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlY29kZV9jYXBzX2NoYW5nZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh2cDhkZWMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvdnA4ZW5jLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy92cDhlbmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiMWQ5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy92cDhlbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2ViYXN0aWFuIERyw7ZnZSA8c2ViYXN0aWFuLmRyb2VnZUBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC12cDgsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWzEsIE1BWF0sICIKLSAgICAgICAgImhlaWdodCA9IChpbnQpIFsxLCBNQVhdLCAiICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFswLCBNQVhdIikpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgidmlkZW8veC1yYXcsICIKLSAgICAgICAgImZvcm1hdCA9IChzdHJpbmcpIEk0MjAsICIKLSAgICAgICAgIndpZHRoID0gKGludCkgWzEsIE1BWF0sICIKLSAgICAgICAgImhlaWdodCA9IChpbnQpIFsxLCBNQVhdLCAiICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIFswLCBNQVhdIikpOwotCi1zdGF0aWMgR3N0UGFkICpzaW5rcGFkLCAqc3JjcGFkOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF92cDhlbmMgKGNvbnN0IGdjaGFyICogc3JjX2NhcHNfc3RyKQotewotICBHc3RFbGVtZW50ICp2cDhlbmM7Ci0gIEdzdENhcHMgKnNyY2NhcHMgPSBOVUxMOwotICBHc3RCdXMgKmJ1czsKLQotICBpZiAoc3JjX2NhcHNfc3RyKSB7Ci0gICAgc3JjY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChzcmNfY2Fwc19zdHIpOwotICAgIGZhaWxfdW5sZXNzIChzcmNjYXBzICE9IE5VTEwpOwotICB9Ci0KLSAgdnA4ZW5jID0gZ3N0X2NoZWNrX3NldHVwX2VsZW1lbnQgKCJ2cDhlbmMiKTsKLSAgZmFpbF91bmxlc3MgKHZwOGVuYyAhPSBOVUxMKTsKLSAgc3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKHZwOGVuYywgJnNyY3RlbXBsYXRlKTsKLSAgc2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAodnA4ZW5jLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChzcmNwYWQsIFRSVUUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIFRSVUUpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChzcmNwYWQsIHZwOGVuYywgc3JjY2FwcywgR1NUX0ZPUk1BVF9USU1FKTsKLQotICBidXMgPSBnc3RfYnVzX25ldyAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAodnA4ZW5jLCBidXMpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHZwOGVuYywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgIT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIGlmIChzcmNjYXBzKQotICAgIGdzdF9jYXBzX3VucmVmIChzcmNjYXBzKTsKLQotICBidWZmZXJzID0gTlVMTDsKLSAgcmV0dXJuIHZwOGVuYzsKLX0KLQotc3RhdGljIHZvaWQKLWNsZWFudXBfdnA4ZW5jIChHc3RFbGVtZW50ICogdnA4ZW5jKQotewotICBHc3RCdXMgKmJ1czsKLQotICAvKiBGcmVlIHBhcnNlZCBidWZmZXJzICovCi0gIGdzdF9jaGVja19kcm9wX2J1ZmZlcnMgKCk7Ci0KLSAgYnVzID0gR1NUX0VMRU1FTlRfQlVTICh2cDhlbmMpOwotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKHNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHZwOGVuYyk7Ci0gIGdzdF9jaGVja190ZWFyZG93bl9zaW5rX3BhZCAodnA4ZW5jKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX2VsZW1lbnQgKHZwOGVuYyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VuY29kZV9zaW1wbGUpCi17Ci0gIEdzdEVsZW1lbnQgKnZwOGVuYzsKLSAgR3N0QnVmZmVyICpidWZmZXI7Ci0gIGdpbnQgaTsKLSAgR0xpc3QgKmw7Ci0gIEdzdENhcHMgKm91dGNhcHM7Ci0gIEdzdFNlZ21lbnQgc2VnOwotCi0gIHZwOGVuYyA9Ci0gICAgICBzZXR1cF92cDhlbmMKLSAgICAgICgidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpSTQyMCx3aWR0aD0oaW50KTMyMCxoZWlnaHQ9KGludCkyNDAsZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xIik7Ci0KLSAgZ19vYmplY3Rfc2V0ICh2cDhlbmMsICJsYWctaW4tZnJhbWVzIiwgNSwgTlVMTCk7Ci0KLSAgZ3N0X3NlZ21lbnRfaW5pdCAoJnNlZywgR1NUX0ZPUk1BVF9USU1FKTsKLSAgc2VnLnN0b3AgPSBnc3RfdXRpbF91aW50NjRfc2NhbGUgKDIwLCBHU1RfU0VDT05ELCAyNSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnKSkpOwotCi0gIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyAoMzIwICogMjQwICsgMiAqIDE2MCAqIDEyMCk7Ci0gIGdzdF9idWZmZXJfbWVtc2V0IChidWZmZXIsIDAsIDAsIC0xKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlIChpLCBHU1RfU0VDT05ELCAyNSk7Ci0gICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoMSwgR1NUX1NFQ09ORCwgMjUpOwotICAgIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2ggKHNyY3BhZCwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpID09IEdTVF9GTE9XX09LKTsKLSAgfQotCi0gIGdzdF9idWZmZXJfdW5yZWYgKGJ1ZmZlcik7Ci0KLSAgLyogT25seSA1IGJ1ZmZlcnMgYXJlIGFsbG93ZWQgdG8gYmUgcXVldWVkIG5vdyAqLwotICBmYWlsX3VubGVzcyAoZ19saXN0X2xlbmd0aCAoYnVmZmVycykgPiAxNSk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotCi0KLSAgLyogQWxsIGJ1ZmZlcnMgbXVzdCBiZSB0aGVyZSBub3cgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ19saXN0X2xlbmd0aCAoYnVmZmVycyksIDIwKTsKLQotICBvdXRjYXBzID0KLSAgICAgIGdzdF9jYXBzX2Zyb21fc3RyaW5nCi0gICAgICAoInZpZGVvL3gtdnA4LHdpZHRoPShpbnQpMzIwLGhlaWdodD0oaW50KTI0MCxmcmFtZXJhdGU9KGZyYWN0aW9uKTI1LzEiKTsKLQotICBmb3IgKGwgPSBidWZmZXJzLCBpID0gMDsgbDsgbCA9IGwtPm5leHQsIGkrKykgewotICAgIGJ1ZmZlciA9IGwtPmRhdGE7Ci0KLSAgICBpZiAoaSA9PSAwKQotICAgICAgZmFpbF9pZiAoR1NUX0JVRkZFUl9GTEFHX0lTX1NFVCAoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVMVEFfVU5JVCkpOwotCi0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZmZlciksCi0gICAgICAgIGdzdF91dGlsX3VpbnQ2NF9zY2FsZSAoaSwgR1NUX1NFQ09ORCwgMjUpKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfdWludDY0IChHU1RfQlVGRkVSX0RVUkFUSU9OIChidWZmZXIpLAotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKDEsIEdTVF9TRUNPTkQsIDI1KSk7Ci0gIH0KLQotICBnc3RfY2Fwc191bnJlZiAob3V0Y2Fwcyk7Ci0KLSAgY2xlYW51cF92cDhlbmMgKHZwOGVuYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXZwOGVuY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ2cDhlbmMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotCi0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9lbmNvZGVfc2ltcGxlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHZwOGVuYyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9lbGVtZW50cy92cDllbmMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOWVuYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmJjOTdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3ZwOWVuYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE2IFN0aWFuIFNlbG5lcyA8c3RpYW5AcGV4aXAuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGhhcm5lc3MuaD4KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZW5jb2RlX2xhZ19pbl9mcmFtZXMpCi17Ci0gIEdzdEhhcm5lc3MgKmggPSBnc3RfaGFybmVzc19uZXdfcGFyc2UgKCJ2cDllbmMgbGFnLWluLWZyYW1lcz01IGNwdS11c2VkPTggIgotICAgICAgImRlYWRsaW5lPTEiKTsKLSAgZ3N0X2hhcm5lc3NfYWRkX3NyY19wYXJzZSAoaCwgInZpZGVvdGVzdHNyYyBpcy1saXZlPXRydWUgcGF0dGVybj1ibGFjayAhICIKLSAgICAgICJjYXBzZmlsdGVyIGNhcHM9XCJ2aWRlby94LXJhdyx3aWR0aD0zMjAsaGVpZ2h0PTI0MCxmcmFtZXJhdGU9MjUvMVwiIiwKLSAgICAgIFRSVUUpOwotCi0gIC8qIFB1c2ggMjAgYnVmZmVycyBpbnRvIHRoZSBlbmNvZGVyICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9GTE9XX09LLAotICAgICAgZ3N0X2hhcm5lc3Nfc3JjX2NyYW5rX2FuZF9wdXNoX21hbnkgKGgsIDIwLCAyMCkpOwotCi0gIC8qIE9ubHkgNSBidWZmZXJzIGFyZSBhbGxvd2VkIHRvIGJlIHF1ZXVlZCBub3cgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9oYXJuZXNzX2J1ZmZlcnNfcmVjZWl2ZWQgKGgpID4gMTUpOwotCi0gIC8qIEVPUyB3aWxsIGNhdXNlIHRoZSByZW1haW5pbmcgYnVmZmVycyB0byBiZSBkcmFpbmVkICovCi0gIGZhaWxfdW5sZXNzIChnc3RfaGFybmVzc19wdXNoX2V2ZW50IChoLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfaGFybmVzc19idWZmZXJzX3JlY2VpdmVkIChoKSwgMjApOwotCi0gIGZvciAoZ2ludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKLSAgICBHc3RCdWZmZXIgKmJ1ZmZlciA9IGdzdF9oYXJuZXNzX3B1bGwgKGgpOwotCi0gICAgaWYgKGkgPT0gMCkKLSAgICAgIGZhaWxfaWYgKEdTVF9CVUZGRVJfRkxBR19JU19TRVQgKGJ1ZmZlciwgR1NUX0JVRkZFUl9GTEFHX0RFTFRBX1VOSVQpKTsKLQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc191aW50NjQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWZmZXIpLAotICAgICAgICBnc3RfdXRpbF91aW50NjRfc2NhbGUgKGksIEdTVF9TRUNPTkQsIDI1KSk7Ci0gICAgZmFpbF91bmxlc3NfZXF1YWxzX3VpbnQ2NCAoR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmZmVyKSwKLSAgICAgICAgZ3N0X3V0aWxfdWludDY0X3NjYWxlICgxLCBHU1RfU0VDT05ELCAyNSkpOwotCi0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKLSAgfQotCi0gIGdzdF9oYXJuZXNzX3RlYXJkb3duIChoKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLXN0YXRpYyBTdWl0ZSAqCi12cDllbmNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgidnA5ZW5jIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLQotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZW5jb2RlX2xhZ19pbl9mcmFtZXMpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAodnA5ZW5jKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tkZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNlZDA1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrZGVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKgotICogdW5pdCB0ZXN0IGZvciB3YXZwYWNrZGVjCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotLyogRm9yIGVhc2Ugb2YgcHJvZ3JhbW1pbmcgd2UgdXNlIGdsb2JhbHMgdG8ga2VlcCByZWZzIGZvciBvdXIgZmxvYXRpbmcKLSAqIHNyYyBhbmQgc2luayBwYWRzIHdlIGNyZWF0ZTsgb3RoZXJ3aXNlIHdlIGFsd2F5cyBoYXZlIHRvIGRvIGdldF9wYWQsCi0gKiBnZXRfcGVlciwgYW5kIHRoZW4gcmVtb3ZlIHJlZmVyZW5jZXMgaW4gZXZlcnkgdGVzdCBmdW5jdGlvbiAqLwotc3RhdGljIEdzdFBhZCAqbXlzcmNwYWQsICpteXNpbmtwYWQ7Ci0KLSNpZiBHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOCi0jZGVmaW5lIEFVRElPX0ZPUk1BVCAiUzE2QkUiCi0jZWxzZQotI2RlZmluZSBBVURJT19GT1JNQVQgIlMxNkxFIgotI2VuZGlmCi0KLWd1aW50OCB0ZXN0X2ZyYW1lW10gPSB7Ci0gIDB4NzcsIDB4NzYsIDB4NzAsIDB4NkIsICAgICAgIC8qICJ3dnBrIiAqLwotICAweDJFLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiBja1NpemUgKi8KLSAgMHgwNCwgMHgwNCwgICAgICAgICAgICAgICAgICAgLyogdmVyc2lvbiAqLwotICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmFja19ubyAqLwotICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRleF9ubyAqLwotICAweDAwLCAweDY0LCAweDAwLCAweDAwLCAgICAgICAvKiB0b3RhbF9zYW1wbGVzICovCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgIC8qIGJsb2NrX2luZGV4ICovCi0gIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsICAgICAgIC8qIGJsb2NrX3NhbXBsZXMgKi8KLSAgMHgwNSwgMHgxOCwgMHg4MCwgMHgwNCwgICAgICAgLyogZmxhZ3MgKi8KLSAgMHhGRiwgMHhBRiwgMHg4MCwgMHg2MCwgICAgICAgLyogY3JjICovCi0gIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsICAgICAgIC8qIGRhdGEgKi8KLSAgMHgwNCwgMHgwMCwgMHgwNSwgMHgwMywKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHg4QSwgMHgwMiwKLSAgMHgwMCwgMHgwMCwgMHhGRiwgMHg3RiwKLSAgMHgwMCwgMHhFNCwKLX07Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBBVURJT19GT1JNQVQgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAicmF0ZSA9IChpbnQpIDQ0MTAwIikKLSAgICApOwotCi0jZGVmaW5lIFdBVlBBQ0tfQ0FQUyAiYXVkaW8veC13YXZwYWNrLCAiIFwKLSAgICAgICAgImRlcHRoID0gKGludCkgMTYsICIgXAotICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiICJyYXRlID0gKGludCkgNDQxMDAsICIgImZyYW1lZCA9IChib29sZWFuKSB0cnVlIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChXQVZQQUNLX0NBUFMpCi0gICAgKTsKLQotc3RhdGljIEdzdEVsZW1lbnQgKgotc2V0dXBfd2F2cGFja2RlYyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqd2F2cGFja2RlYzsKLSAgR3N0Q2FwcyAqY2FwczsKLQotICBHU1RfREVCVUcgKCJzZXR1cF93YXZwYWNrZGVjIik7Ci0gIHdhdnBhY2tkZWMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoIndhdnBhY2tkZWMiKTsKLSAgbXlzcmNwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc3JjX3BhZCAod2F2cGFja2RlYywgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkICh3YXZwYWNrZGVjLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFdBVlBBQ0tfQ0FQUyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCB3YXZwYWNrZGVjLCBjYXBzLCBHU1RfRk9STUFUX1RJTUUpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAod2F2cGFja2RlYywKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTLAotICAgICAgImNvdWxkIG5vdCBzZXQgdG8gcGxheWluZyIpOwotCi0gIHJldHVybiB3YXZwYWNrZGVjOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF93YXZwYWNrZGVjIChHc3RFbGVtZW50ICogd2F2cGFja2RlYykKLXsKLSAgR1NUX0RFQlVHICgiY2xlYW51cF93YXZwYWNrZGVjIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAod2F2cGFja2RlYywgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHdhdnBhY2tkZWMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKHdhdnBhY2tkZWMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAod2F2cGFja2RlYyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2RlY29kZV9mcmFtZSkKLXsKLSAgR3N0RWxlbWVudCAqd2F2cGFja2RlYzsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgR3N0QnVzICpidXM7Ci0gIGludCBpOwotICBHc3RNYXBJbmZvIG1hcDsKLQotICB3YXZwYWNrZGVjID0gc2V0dXBfd2F2cGFja2RlYyAoKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAodGVzdF9mcmFtZSkpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGluYnVmZmVyLCAwLCB0ZXN0X2ZyYW1lLCBzaXplb2YgKHRlc3RfZnJhbWUpKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzICh3YXZwYWNrZGVjLCBidXMpOwotCi0gIC8qIHNob3VsZCBkZWNvZGUgdGhlIGJ1ZmZlciB3aXRob3V0IHByb2JsZW1zICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSwgR1NUX0ZMT1dfT0spOwotCi0gIG91dGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOwotCi0gIGZhaWxfaWYgKG91dGJ1ZmZlciA9PSBOVUxMKTsKLQotICBnc3RfYnVmZmVyX21hcCAob3V0YnVmZmVyLCAmbWFwLCBHU1RfTUFQX1JFQUQpOwotCi0gIC8qIHVuY29tcHJlc3NlZCBkYXRhIHNob3VsZCBiZSAxMDI0MDAgYnl0ZXMgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAobWFwLnNpemUsIDUxMjAwKTsKLQotICAvKiBhbmQgYWxsIGJ5dGVzIG11c3QgYmUgMCwgaS5lLiBzaWxlbmNlICovCi0gIGZvciAoaSA9IDA7IGkgPCA1MTIwMDsgaSsrKQotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG1hcC5kYXRhW2ldLCAwKTsKLQotICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotCi0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKG91dGJ1ZmZlciwgIm91dGJ1ZmZlciIsIDEpOwotICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotICBvdXRidWZmZXIgPSBOVUxMOwotCi0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0gIGdzdF9lbGVtZW50X3NldF9idXMgKHdhdnBhY2tkZWMsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLSAgY2xlYW51cF93YXZwYWNrZGVjICh3YXZwYWNrZGVjKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWNvZGVfZnJhbWVfd2l0aF9icm9rZW5faGVhZGVyKQotewotICBHc3RFbGVtZW50ICp3YXZwYWNrZGVjOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICB3YXZwYWNrZGVjID0gc2V0dXBfd2F2cGFja2RlYyAoKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAodGVzdF9mcmFtZSkpOwotICBnc3RfYnVmZmVyX2ZpbGwgKGluYnVmZmVyLCAwLCB0ZXN0X2ZyYW1lLCBzaXplb2YgKHRlc3RfZnJhbWUpKTsKLSAgLyogYnJlYWsgaGVhZGVyICovCi0gIGdzdF9idWZmZXJfbWVtc2V0IChpbmJ1ZmZlciwgMiwgJ2UnLCAxKTsKLSAgQVNTRVJUX0JVRkZFUl9SRUZDT1VOVCAoaW5idWZmZXIsICJpbmJ1ZmZlciIsIDEpOwotICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoaW5idWZmZXIpID0gMDsKLQotICBnc3RfZWxlbWVudF9zZXRfYnVzICh3YXZwYWNrZGVjLCBidXMpOwotCi0gIC8qIHNob3VsZCBmYWlsIGdyYWNlZnVsbHkgKi8KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X3BhZF9wdXNoIChteXNyY3BhZCwgaW5idWZmZXIpLCBHU1RfRkxPV19FUlJPUik7Ci0KLSAgZmFpbF9pZiAoKG1lc3NhZ2UgPSBnc3RfYnVzX3BvcCAoYnVzKSkgPT0gTlVMTCk7Ci0gIGZhaWxfdW5sZXNzX21lc3NhZ2VfZXJyb3IgKG1lc3NhZ2UsIFNUUkVBTSwgREVDT0RFKTsKLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHdhdnBhY2tkZWMsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLSAgY2xlYW51cF93YXZwYWNrZGVjICh3YXZwYWNrZGVjKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWNvZGVfZnJhbWVfd2l0aF9pbmNvbXBsZXRlX2ZyYW1lKQotewotICBHc3RFbGVtZW50ICp3YXZwYWNrZGVjOwotICBHc3RCdWZmZXIgKmluYnVmZmVyOwotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLQotICB3YXZwYWNrZGVjID0gc2V0dXBfd2F2cGFja2RlYyAoKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAodGVzdF9mcmFtZSkgLSAyKTsKLSAgZ3N0X2J1ZmZlcl9maWxsIChpbmJ1ZmZlciwgMCwgdGVzdF9mcmFtZSwgc2l6ZW9mICh0ZXN0X2ZyYW1lKSAtIDIpOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotCi0gIGdzdF9lbGVtZW50X3NldF9idXMgKHdhdnBhY2tkZWMsIGJ1cyk7Ci0KLSAgLyogc2hvdWxkIGZhaWwgZ3JhY2VmdWxseSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlciksIEdTVF9GTE9XX0VSUk9SKTsKLQotICBmYWlsX2lmICgobWVzc2FnZSA9IGdzdF9idXNfcG9wIChidXMpKSA9PSBOVUxMKTsKLSAgZmFpbF91bmxlc3NfbWVzc2FnZV9lcnJvciAobWVzc2FnZSwgU1RSRUFNLCBERUNPREUpOwotICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0KLQotICBnc3RfZWxlbWVudF9zZXRfYnVzICh3YXZwYWNrZGVjLCBOVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoYnVzKSk7Ci0gIGNsZWFudXBfd2F2cGFja2RlYyAod2F2cGFja2RlYyk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXdhdnBhY2tkZWNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgid2F2cGFja2RlYyIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgc3VpdGVfYWRkX3RjYXNlIChzLCB0Y19jaGFpbik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZWNvZGVfZnJhbWUpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGVjb2RlX2ZyYW1lX3dpdGhfYnJva2VuX2hlYWRlcik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZWNvZGVfZnJhbWVfd2l0aF9pbmNvbXBsZXRlX2ZyYW1lKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHdhdnBhY2tkZWMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jIGIvdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja2VuYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjJlZWE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhY2tlbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHdhdnBhY2tlbmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ViYXN0aWFuIERyw7ZnZSA8c2xvbW9AY2lyY3VsYXItY2hhb3Mub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotCi0vKiBGb3IgZWFzZSBvZiBwcm9ncmFtbWluZyB3ZSB1c2UgZ2xvYmFscyB0byBrZWVwIHJlZnMgZm9yIG91ciBmbG9hdGluZwotICogc3JjIGFuZCBzaW5rIHBhZHMgd2UgY3JlYXRlOyBvdGhlcndpc2Ugd2UgYWx3YXlzIGhhdmUgdG8gZG8gZ2V0X3BhZCwKLSAqIGdldF9wZWVyLCBhbmQgdGhlbiByZW1vdmUgcmVmZXJlbmNlcyBpbiBldmVyeSB0ZXN0IGZ1bmN0aW9uICovCi1zdGF0aWMgR3N0UGFkICpteXNyY3BhZCwgKm15c2lua3BhZDsKLXN0YXRpYyBHc3RCdXMgKmJ1czsKLQotI2lmIEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4KLSNkZWZpbmUgQVVESU9fRk9STUFUICJTMzJCRSIKLSNlbHNlCi0jZGVmaW5lIEFVRElPX0ZPUk1BVCAiUzMyTEUiCi0jZW5kaWYKLQotI2RlZmluZSBSQVdfQ0FQU19TVFJJTkcgImF1ZGlvL3gtcmF3LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgPSAoc3RyaW5nKSAiIEFVRElPX0ZPUk1BVCAiLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsYXlvdXQgPSAoc3RyaW5nKSBpbnRlcmxlYXZlZCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hhbm5lbHMgPSAoaW50KSAxLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyYXRlID0gKGludCkgNDQxMDAiCi0KLSNkZWZpbmUgV0FWUEFDS19DQVBTX1NUUklORyAiYXVkaW8veC13YXZwYWNrLCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwdGggPSAoaW50KSAzMiwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyYW1lZCA9IChib29sZWFuKSB0cnVlIgotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC13YXZwYWNrLCAiCi0gICAgICAgICJkZXB0aCA9IChpbnQpIDMyLCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiAiZnJhbWVkID0gKGJvb2xlYW4pIHRydWUiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXJhdywgIgotICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgIiBBVURJT19GT1JNQVQgIiwgIgotICAgICAgICAibGF5b3V0ID0gKHN0cmluZykgaW50ZXJsZWF2ZWQsICIKLSAgICAgICAgImNoYW5uZWxzID0gKGludCkgMSwgIiAicmF0ZSA9IChpbnQpIDQ0MTAwIikpOwotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF93YXZwYWNrZW5jICh2b2lkKQotewotICBHc3RFbGVtZW50ICp3YXZwYWNrZW5jOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX3dhdnBhY2tlbmMiKTsKLSAgd2F2cGFja2VuYyA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgid2F2cGFja2VuYyIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkICh3YXZwYWNrZW5jLCAmc3JjdGVtcGxhdGUpOwotICBteXNpbmtwYWQgPSBnc3RfY2hlY2tfc2V0dXBfc2lua19wYWQgKHdhdnBhY2tlbmMsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHdhdnBhY2tlbmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLSAgYnVzID0gZ3N0X2J1c19uZXcgKCk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zdHJlYW1fc3RhcnQgKCJ0ZXN0LXNpbGVuY2UiKSk7Ci0KLSAgcmV0dXJuIHdhdnBhY2tlbmM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jbGVhbnVwX3dhdnBhY2tlbmMgKEdzdEVsZW1lbnQgKiB3YXZwYWNrZW5jKQotewotICBHU1RfREVCVUcgKCJjbGVhbnVwX3dhdnBhY2tlbmMiKTsKLQotICBnc3RfYnVzX3NldF9mbHVzaGluZyAoYnVzLCBUUlVFKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAod2F2cGFja2VuYywgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1cykpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAod2F2cGFja2VuYywgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzcmNwYWQsIEZBTFNFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIEZBTFNFKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NyY19wYWQgKHdhdnBhY2tlbmMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc2lua19wYWQgKHdhdnBhY2tlbmMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAod2F2cGFja2VuYyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VuY29kZV9zaWxlbmNlKQotewotICBHc3RTZWdtZW50IHNlZ21lbnQ7Ci0gIEdzdEVsZW1lbnQgKndhdnBhY2tlbmM7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIEdzdEV2ZW50ICplb3MgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKLSAgaW50IGksIG51bV9idWZmZXJzOwotCi0gIHdhdnBhY2tlbmMgPSBzZXR1cF93YXZwYWNrZW5jICgpOwotCi0gIGdzdF9zZWdtZW50X2luaXQgKCZzZWdtZW50LCBHU1RfRk9STUFUX1RJTUUpOwotCi0gIGluYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jICgxMDAwKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGluYnVmZmVyLCAwLCAwLCAxMDAwKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKFJBV19DQVBTX1NUUklORyk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3NldF9jYXBzIChteXNyY3BhZCwgY2FwcykpOwotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0KLSAgZ3N0X3BhZF9wdXNoX2V2ZW50IChteXNyY3BhZCwgZ3N0X2V2ZW50X25ld19zZWdtZW50ICgmc2VnbWVudCkpOwotCi0gIEdTVF9CVUZGRVJfVElNRVNUQU1QIChpbmJ1ZmZlcikgPSAwOwotICBBU1NFUlRfQlVGRkVSX1JFRkNPVU5UIChpbmJ1ZmZlciwgImluYnVmZmVyIiwgMSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X2J1cyAod2F2cGFja2VuYywgYnVzKTsKLQotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICBmYWlsX2lmIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBlb3MpICE9IFRSVUUpOwotCi0gIC8qIGNoZWNrIGZpcnN0IGJ1ZmZlciAqLwotICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLQotICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKG91dGJ1ZmZlciksIDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWZmZXIpLCA1NjY4OTM0KTsKLQotICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgInd2cGsiLCA0KSA9PSAwLAotICAgICAgIkZhaWxlZCB0byBlbmNvZGUgdG8gdmFsaWQgV2F2cGFjayBmcmFtZXMiKTsKLQotICAvKiBmcmVlIGFsbCBidWZmZXJzICovCi0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0KLSAgICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgb3V0YnVmZmVyKTsKLQotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1ZmZlcik7Ci0gICAgb3V0YnVmZmVyID0gTlVMTDsKLSAgfQotCi0gIGdfbGlzdF9mcmVlIChidWZmZXJzKTsKLSAgYnVmZmVycyA9IE5VTEw7Ci0KLSAgY2xlYW51cF93YXZwYWNrZW5jICh3YXZwYWNrZW5jKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotd2F2cGFja2VuY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ3YXZwYWNrZW5jIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VuY29kZV9zaWxlbmNlKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHdhdnBhY2tlbmMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFja3BhcnNlLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrcGFyc2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM2NGRlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy93YXZwYWNrcGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHdhdnBhY2twYXJzZQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNiBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0vKiBXYXZwYWNrIGZpbGUgd2l0aCAyIGZyYW1lcyBvZiBzaWxlbmNlICovCi1ndWludDggdGVzdF9maWxlW10gPSB7Ci0gIDB4NzcsIDB4NzYsIDB4NzAsIDB4NkIsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgIC8qIGZpcnN0IGZyYW1lICovCi0gIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzgsIDB4MDAsIDB4MDAsICAgICAgIC8qIGluY2x1ZGUgUklGRiBoZWFkZXIgKi8KLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwKLSAgMHgwNSwgMHgxOCwgMHg4MCwgMHgwNCwgMHhGRiwgMHhBRiwgMHg4MCwgMHg2MCwKLSAgMHgyMSwgMHgxNiwgMHg1MiwgMHg0OSwgMHg0NiwgMHg0NiwgMHgyNCwgMHg5MCwKLSAgMHgwMSwgMHgwMCwgMHg1NywgMHg0MSwgMHg1NiwgMHg0NSwgMHg2NiwgMHg2RCwKLSAgMHg3NCwgMHgyMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwKLSAgMHgwMSwgMHgwMCwgMHg0NCwgMHhBQywgMHgwMCwgMHgwMCwgMHg4OCwgMHg1OCwKLSAgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2NCwgMHg2MSwKLSAgMHg3NCwgMHg2MSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwKLSAgMHgwMywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwNSwgMHgwMywgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHgwMiwgMHgwMCwgMHgwMCwKLSAgMHgwMCwgMHgwMCwgMHg4QSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhGRiwgMHg3RiwKLSAgMHgwMCwgMHhFNCwKLSAgMHg3NywgMHg3NiwgMHg3MCwgMHg2QiwgMHgyRSwgMHgwMCwgMHgwMCwgMHgwMCwgICAgICAgLyogc2Vjb25kIGZyYW1lICovCi0gIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsCi0gIDB4MDUsIDB4MTgsIDB4ODAsIDB4MDQsIDB4RkYsIDB4QUYsIDB4ODAsIDB4NjAsCi0gIDB4MDIsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDUsIDB4MDMsCi0gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OEEsIDB4MDIsCi0gIDB4MDAsIDB4MDAsIDB4RkYsIDB4N0YsIDB4MDAsIDB4RTQsCi19OwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUgKCJzaW5rIiwKLSAgICBHU1RfUEFEX1NJTkssCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTICgiYXVkaW8veC13YXZwYWNrLCAiCi0gICAgICAgICJkZXB0aCA9IChpbnQpIDE2LCAiCi0gICAgICAgICJjaGFubmVscyA9IChpbnQpIDEsICIKLSAgICAgICAgInJhdGUgPSAoaW50KSA0NDEwMCwgIiAiZnJhbWVkID0gKGJvb2xlYW4pIFRSVUUiKSk7Ci0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmN0ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFICgic3JjIiwKLSAgICBHU1RfUEFEX1NSQywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKCJhdWRpby94LXdhdnBhY2siKSk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX3dhdnBhY2twYXJzZSAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqd2F2cGFja3BhcnNlOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX3dhdnBhY2twYXJzZSIpOwotCi0gIHdhdnBhY2twYXJzZSA9IGdzdF9jaGVja19zZXR1cF9lbGVtZW50ICgid2F2cGFja3BhcnNlIik7Ci0gIG15c3JjcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NyY19wYWQgKHdhdnBhY2twYXJzZSwgJnNyY3RlbXBsYXRlKTsKLSAgbXlzaW5rcGFkID0gZ3N0X2NoZWNrX3NldHVwX3NpbmtfcGFkICh3YXZwYWNrcGFyc2UsICZzaW5rdGVtcGxhdGUpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c3JjcGFkLCBUUlVFKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNpbmtwYWQsIFRSVUUpOwotICBnc3RfY2hlY2tfc2V0dXBfZXZlbnRzIChteXNyY3BhZCwgd2F2cGFja3BhcnNlLCBOVUxMLCBHU1RfRk9STUFUX0JZVEVTKTsKLQotICByZXR1cm4gd2F2cGFja3BhcnNlOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF93YXZwYWNrcGFyc2UgKEdzdEVsZW1lbnQgKiB3YXZwYWNrcGFyc2UpCi17Ci0gIEdTVF9ERUJVRyAoImNsZWFudXBfd2F2cGFja3BhcnNlIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAod2F2cGFja3BhcnNlLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAod2F2cGFja3BhcnNlKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkICh3YXZwYWNrcGFyc2UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAod2F2cGFja3BhcnNlKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfcGFyc2luZ192YWxpZF9mcmFtZXMpCi17Ci0gIEdzdEVsZW1lbnQgKndhdnBhY2twYXJzZTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgaW50IGksIG51bV9idWZmZXJzOwotICBHc3RGb3JtYXQgZm9ybWF0ID0gR1NUX0ZPUk1BVF9USU1FOwotICBnaW50NjQgcG9zOwotCi0gIHdhdnBhY2twYXJzZSA9IHNldHVwX3dhdnBhY2twYXJzZSAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAod2F2cGFja3BhcnNlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAodGVzdF9maWxlKSk7Ci0gIGdzdF9idWZmZXJfZmlsbCAoaW5idWZmZXIsIDAsIHRlc3RfZmlsZSwgc2l6ZW9mICh0ZXN0X2ZpbGUpKTsKLQotICAvKiBzaG91bGQgZGVjb2RlIHRoZSBidWZmZXIgd2l0aG91dCBwcm9ibGVtcyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfcGFkX3B1c2ggKG15c3JjcGFkLCBpbmJ1ZmZlciksIEdTVF9GTE9XX09LKTsKLQotICAvKiBpbmZvcm0gb2Ygbm8gZnVydGhlciBkYXRhICovCi0gIGZhaWxfdW5sZXNzIChnc3RfcGFkX3B1c2hfZXZlbnQgKG15c3JjcGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSkpOwotCi0gIG51bV9idWZmZXJzID0gZ19saXN0X2xlbmd0aCAoYnVmZmVycyk7Ci0gIC8qIHNob3VsZCBnZXQgMiBidWZmZXJzLCBlYWNoIG9uZSBjb21wbGV0ZSB3YXZwYWNrIGZyYW1lICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKG51bV9idWZmZXJzLCAyKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZmZlcnM7ICsraSkgewotICAgIG91dGJ1ZmZlciA9IEdTVF9CVUZGRVIgKGJ1ZmZlcnMtPmRhdGEpOwotICAgIGZhaWxfaWYgKG91dGJ1ZmZlciA9PSBOVUxMKTsKLQotICAgIGZhaWxfdW5sZXNzIChnc3RfYnVmZmVyX21lbWNtcCAob3V0YnVmZmVyLCAwLCAid3ZwayIsIDQpID09IDAsCi0gICAgICAgICJCdWZmZXIgY29udGFpbnMgbm8gV2F2cGFjayBmcmFtZSIpOwotICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9CVUZGRVJfRFVSQVRJT04gKG91dGJ1ZmZlciksIDU4MDQ5ODg2Nik7Ci0KLSAgICBzd2l0Y2ggKGkpIHsKLSAgICAgIGNhc2UgMDp7Ci0gICAgICAgIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9CVUZGRVJfVElNRVNUQU1QIChvdXRidWZmZXIpLCAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIDE6ewotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmZmVyKSwgNTgwNDk4ODY2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dGJ1ZmZlcik7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotICAgIG91dGJ1ZmZlciA9IE5VTEw7Ci0gIH0KLQotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKHdhdnBhY2twYXJzZSwgZm9ybWF0LCAmcG9zKSwKLSAgICAgICJQb3NpdGlvbiBxdWVyeSBmYWlsZWQiKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludDY0IChwb3MsIDU4MDQ5ODg2NiAqIDIpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHdhdnBhY2twYXJzZSwgZm9ybWF0LCBOVUxMKSwKLSAgICAgICJEdXJhdGlvbiBxdWVyeSBmYWlsZWQiKTsKLQotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIGNsZWFudXBfd2F2cGFja3BhcnNlICh3YXZwYWNrcGFyc2UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3BhcnNpbmdfaW52YWxpZF9maXJzdF9oZWFkZXIpCi17Ci0gIEdzdEVsZW1lbnQgKndhdnBhY2twYXJzZTsKLSAgR3N0QnVmZmVyICppbmJ1ZmZlciwgKm91dGJ1ZmZlcjsKLSAgaW50IGksIG51bV9idWZmZXJzOwotCi0gIHdhdnBhY2twYXJzZSA9IHNldHVwX3dhdnBhY2twYXJzZSAoKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NldF9zdGF0ZSAod2F2cGFja3BhcnNlLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MsCi0gICAgICAiY291bGQgbm90IHNldCB0byBwbGF5aW5nIik7Ci0KLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemVvZiAodGVzdF9maWxlKSk7Ci0gIGdzdF9idWZmZXJfZmlsbCAoaW5idWZmZXIsIDAsIHRlc3RfZmlsZSwgc2l6ZW9mICh0ZXN0X2ZpbGUpKTsKLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGluYnVmZmVyLCAwLCAnaycsIDEpOwotCi0gIC8qIHNob3VsZCBkZWNvZGUgdGhlIGJ1ZmZlciB3aXRob3V0IHByb2JsZW1zICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSwgR1NUX0ZMT1dfT0spOwotCi0gIC8qIGluZm9ybSBvZiBubyBmdXJ0aGVyIGRhdGEgKi8KLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaF9ldmVudCAobXlzcmNwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKSk7Ci0KLSAgbnVtX2J1ZmZlcnMgPSBnX2xpc3RfbGVuZ3RoIChidWZmZXJzKTsKLQotICAvKiBzaG91bGQgZ2V0IDEgYnVmZmVycywgdGhlIHNlY29uZCBub24tYnJva2VuIG9uZSAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChudW1fYnVmZmVycywgMSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBvdXRidWZmZXIgPSBHU1RfQlVGRkVSIChidWZmZXJzLT5kYXRhKTsKLSAgICBmYWlsX2lmIChvdXRidWZmZXIgPT0gTlVMTCk7Ci0KLSAgICBmYWlsX3VubGVzcyAoZ3N0X2J1ZmZlcl9tZW1jbXAgKG91dGJ1ZmZlciwgMCwgInd2cGsiLCA0KSA9PSAwLAotICAgICAgICAiQnVmZmVyIGNvbnRhaW5zIG5vIFdhdnBhY2sgZnJhbWUiKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfQlVGRkVSX0RVUkFUSU9OIChvdXRidWZmZXIpLCA1ODA0OTg4NjYpOwotCi0gICAgc3dpdGNoIChpKSB7Ci0gICAgICBjYXNlIDA6ewotICAgICAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfQlVGRkVSX1RJTUVTVEFNUCAob3V0YnVmZmVyKSwgNTgwNDk4ODY2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgYnVmZmVycyA9IGdfbGlzdF9yZW1vdmUgKGJ1ZmZlcnMsIG91dGJ1ZmZlcik7Ci0KLSAgICBnc3RfYnVmZmVyX3VucmVmIChvdXRidWZmZXIpOwotICAgIG91dGJ1ZmZlciA9IE5VTEw7Ci0gIH0KLQotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotCi0gIGNsZWFudXBfd2F2cGFja3BhcnNlICh3YXZwYWNrcGFyc2UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLQotc3RhdGljIFN1aXRlICoKLXdhdnBhY2twYXJzZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ3YXZwYWNrcGFyc2UiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2luZ192YWxpZF9mcmFtZXMpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcGFyc2luZ19pbnZhbGlkX2ZpcnN0X2hlYWRlcik7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh3YXZwYWNrcGFyc2UpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFyc2UuYyBiL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3dhdnBhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjOTExMDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZWxlbWVudHMvd2F2cGFyc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKiBHU3RyZWFtZXIgV2F2UGFyc2UgdW5pdCB0ZXN0cwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2RlZmluZSBTSU1QTEVfV0FWX1BBVEggR1NUX1RFU1RfRklMRVNfUEFUSCBHX0RJUl9TRVBBUkFUT1JfUyAiYXVkaW90ZXN0c3JjLndhdiIKLQotc3RhdGljIHZvaWQKLWRvX3Rlc3Rfc2ltcGxlX2ZpbGUgKEdzdFBhZE1vZGUgbW9kZSkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqc3JjLCAqcSA9IE5VTEw7Ci0gIEdzdEVsZW1lbnQgKndhdnBhcnNlOwotICBHc3RFbGVtZW50ICpmYWtlc2luazsKLSAgR3N0TWVzc2FnZSAqbXNnOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInRlc3RwaXBlIik7Ci0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZpbGVzcmMiLCBOVUxMKTsKLSAgZmFpbF9pZiAoc3JjID09IE5VTEwpOwotICBpZiAobW9kZSA9PSBHU1RfUEFEX01PREVfUFVTSCkKLSAgICBxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLSAgd2F2cGFyc2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ3YXZwYXJzZSIsIE5VTEwpOwotICBmYWlsX2lmICh3YXZwYXJzZSA9PSBOVUxMKTsKLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX2lmIChmYWtlc2luayA9PSBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIHNyYywgd2F2cGFyc2UsIGZha2VzaW5rLCBxLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgU0lNUExFX1dBVl9QQVRILCBOVUxMKTsKLQotICBpZiAobW9kZSA9PSBHU1RfUEFEX01PREVfUFVTSCkKLSAgICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIHEsIHdhdnBhcnNlLCBmYWtlc2luaywgTlVMTCkpOwotICBlbHNlCi0gICAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCB3YXZwYXJzZSwgZmFrZXNpbmssIE5VTEwpKTsKLQotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJldCwgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQyk7Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJldCwgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTKTsKLQotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoR1NUX0VMRU1FTlRfQlVTIChwaXBlbGluZSksCi0gICAgICBHU1RfQ0xPQ0tfVElNRV9OT05FLCBHU1RfTUVTU0FHRV9FT1MgfCBHU1RfTUVTU0FHRV9FUlJPUik7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX3N0cmluZyAoR1NUX01FU1NBR0VfVFlQRV9OQU1FIChtc2cpLCAiZW9zIik7Ci0KLSAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1zZyk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfZmlsZV9wdWxsKQotewotICBkb190ZXN0X3NpbXBsZV9maWxlIChUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zaW1wbGVfZmlsZV9wdXNoKQotewotICBkb190ZXN0X3NpbXBsZV9maWxlIChGQUxTRSk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIHZvaWQKLWRvX3Rlc3RfZW1wdHlfZmlsZSAoZ2Jvb2xlYW4gY2FuX2FjdGl2YXRlX3B1bGwpCi17Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDEsIHJldDI7Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lOwotICBHc3RFbGVtZW50ICpzcmM7Ci0gIEdzdEVsZW1lbnQgKndhdnBhcnNlOwotICBHc3RFbGVtZW50ICpmYWtlc2luazsKLQotICAvKiBQdWxsIG1vZGUgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgidGVzdHBpcGUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNyYyIsIE5VTEwpOwotICBmYWlsX2lmIChzcmMgPT0gTlVMTCk7Ci0gIHdhdnBhcnNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgid2F2cGFyc2UiLCBOVUxMKTsKLSAgZmFpbF9pZiAod2F2cGFyc2UgPT0gTlVMTCk7Ci0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZmFpbF9pZiAoZmFrZXNpbmsgPT0gTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHdhdnBhcnNlLCBmYWtlc2luaywgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCAwLCAiY2FuLWFjdGl2YXRlLXB1bGwiLCBjYW5fYWN0aXZhdGVfcHVsbCwKLSAgICAgIE5VTEwpOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rX21hbnkgKHNyYywgd2F2cGFyc2UsIGZha2VzaW5rLCBOVUxMKSk7Ci0KLSAgcmV0MSA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgaWYgKHJldDEgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykKLSAgICByZXQyID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgTlVMTCwgTlVMTCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7Ci0gIGVsc2UKLSAgICByZXQyID0gcmV0MTsKLQotICAvKiBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXJyb3Igb24gdGhlIGJ1cywgbm8gb3V0cHV0IHRvIGZha2VzaW5rICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHJldDIsIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2VtcHR5X2ZpbGVfcHVsbCkKLXsKLSAgZG9fdGVzdF9lbXB0eV9maWxlIChUUlVFKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbXB0eV9maWxlX3B1c2gpCi17Ci0gIGRvX3Rlc3RfZW1wdHlfZmlsZSAoRkFMU0UpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi13YXZwYXJzZV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ3YXZwYXJzZSIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJ3YXZwYXJzZSIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZW1wdHlfZmlsZV9wdWxsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VtcHR5X2ZpbGVfcHVzaCk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zaW1wbGVfZmlsZV9wdWxsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NpbXBsZV9maWxlX3B1c2gpOwotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHdhdnBhcnNlKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZWxlbWVudHMveTRtZW5jLmMgYi90ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZiZGIyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9lbGVtZW50cy95NG1lbmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHk0bWVuYwotICoKLSAqIENvcHlyaWdodCAoQykgPDIwMDY+IE1hcmsgTmF1d2VsYWVydHMgPG1hbmF1d0Bza3luZXQuYmU+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLS8qIEZvciBlYXNlIG9mIHByb2dyYW1taW5nIHdlIHVzZSBnbG9iYWxzIHRvIGtlZXAgcmVmcyBmb3Igb3VyIGZsb2F0aW5nCi0gKiBzcmMgYW5kIHNpbmsgcGFkcyB3ZSBjcmVhdGU7IG90aGVyd2lzZSB3ZSBhbHdheXMgaGF2ZSB0byBkbyBnZXRfcGFkLAotICogZ2V0X3BlZXIsIGFuZCB0aGVuIHJlbW92ZSByZWZlcmVuY2VzIGluIGV2ZXJ5IHRlc3QgZnVuY3Rpb24gKi8KLXN0YXRpYyBHc3RQYWQgKm15c3JjcGFkLCAqbXlzaW5rcGFkOwotCi0jZGVmaW5lIFZJREVPX0NBUFNfU1RSSU5HICJ2aWRlby94LXJhdywgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0ID0gKHN0cmluZykgSTQyMCwgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCA9IChpbnQpIDM4NCwgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0ID0gKGludCkgMjg4LCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZXJhdGUgPSAoZnJhY3Rpb24pIDI1LzEsICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpeGVsLWFzcGVjdC1yYXRpbyA9IChmcmFjdGlvbikgMS8xIgotCi0jZGVmaW5lIFk0TV9DQVBTX1NUUklORyAiYXBwbGljYXRpb24veC15dXY0bXBlZywgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAieTRtdmVyc2lvbiA9IChpbnQpIDIiCi0KLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNpbmsiLAotICAgIEdTVF9QQURfU0lOSywKLSAgICBHU1RfUEFEX0FMV0FZUywKLSAgICBHU1RfU1RBVElDX0NBUFMgKFk0TV9DQVBTX1NUUklORykpOwotCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSAoInNyYyIsCi0gICAgR1NUX1BBRF9TUkMsCi0gICAgR1NUX1BBRF9BTFdBWVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTIChWSURFT19DQVBTX1NUUklORykpOwotCi0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLXNldHVwX3k0bWVuYyAodm9pZCkKLXsKLSAgR3N0RWxlbWVudCAqeTRtZW5jOwotCi0gIEdTVF9ERUJVRyAoInNldHVwX3k0bWVuYyIpOwotICB5NG1lbmMgPSBnc3RfY2hlY2tfc2V0dXBfZWxlbWVudCAoInk0bWVuYyIpOwotICBteXNyY3BhZCA9IGdzdF9jaGVja19zZXR1cF9zcmNfcGFkICh5NG1lbmMsICZzcmN0ZW1wbGF0ZSk7Ci0gIG15c2lua3BhZCA9IGdzdF9jaGVja19zZXR1cF9zaW5rX3BhZCAoeTRtZW5jLCAmc2lua3RlbXBsYXRlKTsKLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgVFJVRSk7Ci0gIGdzdF9wYWRfc2V0X2FjdGl2ZSAobXlzaW5rcGFkLCBUUlVFKTsKLQotICByZXR1cm4geTRtZW5jOwotfQotCi1zdGF0aWMgdm9pZAotY2xlYW51cF95NG1lbmMgKEdzdEVsZW1lbnQgKiB5NG1lbmMpCi17Ci0gIEdTVF9ERUJVRyAoImNsZWFudXBfeTRtZW5jIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoeTRtZW5jLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X3BhZF9zZXRfYWN0aXZlIChteXNyY3BhZCwgRkFMU0UpOwotICBnc3RfcGFkX3NldF9hY3RpdmUgKG15c2lua3BhZCwgRkFMU0UpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fc3JjX3BhZCAoeTRtZW5jKTsKLSAgZ3N0X2NoZWNrX3RlYXJkb3duX3NpbmtfcGFkICh5NG1lbmMpOwotICBnc3RfY2hlY2tfdGVhcmRvd25fZWxlbWVudCAoeTRtZW5jKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfeTRtKQotewotICBHc3RFbGVtZW50ICp5NG1lbmM7Ci0gIEdzdEJ1ZmZlciAqaW5idWZmZXIsICpvdXRidWZmZXI7Ci0gIEdzdENhcHMgKmNhcHM7Ci0gIGludCBpLCBudW1fYnVmZmVycywgc2l6ZTsKLSAgY29uc3QgZ2NoYXIgKmRhdGEwID0gIllVVjRNUEVHMiBXMzg0IEgyODggSXAgRjI1OjEgQTE6MVxuIjsKLSAgY29uc3QgZ2NoYXIgKmRhdGExID0gIllVVjRNUEVHMiBDNDIwIFczODQgSDI4OCBJcCBGMjU6MSBBMToxXG4iOwotICBjb25zdCBnY2hhciAqZGF0YTIgPSAiRlJBTUVcbiI7Ci0KLSAgeTRtZW5jID0gc2V0dXBfeTRtZW5jICgpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlICh5NG1lbmMsCi0gICAgICAgICAgR1NUX1NUQVRFX1BMQVlJTkcpID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUywKLSAgICAgICJjb3VsZCBub3Qgc2V0IHRvIHBsYXlpbmciKTsKLQotICAvKiBjb3JyZXNwb25kcyB0byBJNDIwIGJ1ZmZlciBmb3IgdGhlIHNpemUgbWVudGlvbmVkIGluIHRoZSBjYXBzICovCi0gIHNpemUgPSAzODQgKiAyODggKiAzIC8gMjsKLSAgaW5idWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MgKHNpemUpOwotICAvKiBtYWtlcyB2YWxncmluZCdzIG1lbWNoZWNrIGhhcHBpZXIgKi8KLSAgZ3N0X2J1ZmZlcl9tZW1zZXQgKGluYnVmZmVyLCAwLCAwLCBzaXplKTsKLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChWSURFT19DQVBTX1NUUklORyk7Ci0gIGdzdF9jaGVja19zZXR1cF9ldmVudHMgKG15c3JjcGFkLCB5NG1lbmMsIGNhcHMsIEdTVF9GT1JNQVRfVElNRSk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLSAgR1NUX0JVRkZFUl9USU1FU1RBTVAgKGluYnVmZmVyKSA9IDA7Ci0gIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKGluYnVmZmVyLCAiaW5idWZmZXIiLCAxKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9wYWRfcHVzaCAobXlzcmNwYWQsIGluYnVmZmVyKSA9PSBHU1RfRkxPV19PSyk7Ci0KLSAgbnVtX2J1ZmZlcnMgPSBnX2xpc3RfbGVuZ3RoIChidWZmZXJzKTsKLSAgZmFpbF91bmxlc3MgKG51bV9idWZmZXJzID09IDEpOwotCi0gIC8qIGNsZWFuIHVwIGJ1ZmZlcnMgKi8KLSAgZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyArK2kpIHsKLSAgICBHc3RNYXBJbmZvIG1hcDsKLSAgICBnY2hhciAqZGF0YTsKLSAgICBnc2l6ZSBvdXRzaXplOwotCi0gICAgb3V0YnVmZmVyID0gR1NUX0JVRkZFUiAoYnVmZmVycy0+ZGF0YSk7Ci0gICAgZmFpbF9pZiAob3V0YnVmZmVyID09IE5VTEwpOwotCi0gICAgc3dpdGNoIChpKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgIGdzdF9idWZmZXJfbWFwIChvdXRidWZmZXIsICZtYXAsIEdTVF9NQVBfUkVBRCk7Ci0gICAgICAgIG91dHNpemUgPSBtYXAuc2l6ZTsKLSAgICAgICAgZGF0YSA9IChnY2hhciAqKSBtYXAuZGF0YTsKLQotICAgICAgICBmYWlsX3VubGVzcyAob3V0c2l6ZSA+IHNpemUpOwotICAgICAgICBmYWlsX3VubGVzcyAobWVtY21wIChkYXRhLCBkYXRhMCwgc3RybGVuIChkYXRhMCkpID09IDAgfHwKLSAgICAgICAgICAgIG1lbWNtcCAoZGF0YSwgZGF0YTEsIHN0cmxlbiAoZGF0YTEpKSA9PSAwKTsKLSAgICAgICAgLyogc28gd2Uga25vdyB0aGVyZSBpcyBhIG5ld2xpbmUgKi8KLSAgICAgICAgZGF0YSA9IHN0cmNociAoZGF0YSwgJ1xuJyk7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChkYXRhICE9IE5VTEwpOwotICAgICAgICBkYXRhKys7Ci0gICAgICAgIGZhaWxfdW5sZXNzIChtZW1jbXAgKGRhdGEyLCBkYXRhLCBzdHJsZW4gKGRhdGEyKSkgPT0gMCk7Ci0gICAgICAgIGRhdGEgKz0gc3RybGVuIChkYXRhMik7Ci0gICAgICAgIC8qIHJlbWFpbmRlciBtdXN0IGJlIGZyYW1lIGRhdGEgKi8KLSAgICAgICAgZmFpbF91bmxlc3MgKGRhdGEgLSAoZ2NoYXIgKikgbWFwLmRhdGEgKyBzaXplID09IG91dHNpemUpOwotICAgICAgICBnc3RfYnVmZmVyX3VubWFwIChvdXRidWZmZXIsICZtYXApOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBidWZmZXJzID0gZ19saXN0X3JlbW92ZSAoYnVmZmVycywgb3V0YnVmZmVyKTsKLQotICAgIEFTU0VSVF9CVUZGRVJfUkVGQ09VTlQgKG91dGJ1ZmZlciwgIm91dGJ1ZmZlciIsIDEpOwotICAgIGdzdF9idWZmZXJfdW5yZWYgKG91dGJ1ZmZlcik7Ci0gICAgb3V0YnVmZmVyID0gTlVMTDsKLSAgfQotCi0gIGNsZWFudXBfeTRtZW5jICh5NG1lbmMpOwotICBnX2xpc3RfZnJlZSAoYnVmZmVycyk7Ci0gIGJ1ZmZlcnMgPSBOVUxMOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi15NG1lbmNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgieTRtZW5jIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3k0bSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh5NG1lbmMpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYyBiL3Rlc3RzL2NoZWNrL2dlbmVyaWMvc3RhdGVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNzJlNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ2VuZXJpYy9zdGF0ZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiB1bml0IHRlc3QgZm9yIHN0YXRlIGNoYW5nZXMgb24gYWxsIGVsZW1lbnRzCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAwNT4gVGhvbWFzIFZhbmRlciBTdGljaGVsZSA8dGhvbWFzIGF0IGFwZXN0YWFydCBkb3Qgb3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jICBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotc3RhdGljIEdMaXN0ICplbGVtZW50cyA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkCi1zZXR1cCAodm9pZCkKLXsKLSAgR0xpc3QgKmZlYXR1cmVzLCAqZjsKLSAgR0xpc3QgKnBsdWdpbnMsICpwOwotICBnY2hhciAqKmlnbm9yZWxpc3QgPSBOVUxMOwotICBjb25zdCBnY2hhciAqU1RBVEVfSUdOT1JFX0VMRU1FTlRTID0gTlVMTDsKLSAgR3N0UmVnaXN0cnkgKmRlZjsKLQotICBHU1RfREVCVUcgKCJnZXR0aW5nIGVsZW1lbnRzIGZvciBwYWNrYWdlICVzIiwgUEFDS0FHRSk7Ci0gIFNUQVRFX0lHTk9SRV9FTEVNRU5UUyA9IGdfZ2V0ZW52ICgiR1NUX1NUQVRFX0lHTk9SRV9FTEVNRU5UUyIpOwotICBpZiAoIWdfZ2V0ZW52ICgiR1NUX05PX1NUQVRFX0lHTk9SRV9FTEVNRU5UUyIpICYmIFNUQVRFX0lHTk9SRV9FTEVNRU5UUykgewotICAgIEdTVF9ERUJVRyAoIldpbGwgaWdub3JlIGVsZW1lbnQgZmFjdG9yaWVzOiAnJXMnIiwgU1RBVEVfSUdOT1JFX0VMRU1FTlRTKTsKLSAgICBpZ25vcmVsaXN0ID0gZ19zdHJzcGxpdCAoU1RBVEVfSUdOT1JFX0VMRU1FTlRTLCAiICIsIDApOwotICB9Ci0KLSAgZGVmID0gZ3N0X3JlZ2lzdHJ5X2dldCAoKTsKLQotICBwbHVnaW5zID0gZ3N0X3JlZ2lzdHJ5X2dldF9wbHVnaW5fbGlzdCAoZGVmKTsKLQotICBmb3IgKHAgPSBwbHVnaW5zOyBwOyBwID0gcC0+bmV4dCkgewotICAgIEdzdFBsdWdpbiAqcGx1Z2luID0gcC0+ZGF0YTsKLQotICAgIGlmIChzdHJjbXAgKGdzdF9wbHVnaW5fZ2V0X3NvdXJjZSAocGx1Z2luKSwgUEFDS0FHRSkgIT0gMCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgZmVhdHVyZXMgPQotICAgICAgICBnc3RfcmVnaXN0cnlfZ2V0X2ZlYXR1cmVfbGlzdF9ieV9wbHVnaW4gKGRlZiwKLSAgICAgICAgZ3N0X3BsdWdpbl9nZXRfbmFtZSAocGx1Z2luKSk7Ci0KLSAgICBmb3IgKGYgPSBmZWF0dXJlczsgZjsgZiA9IGYtPm5leHQpIHsKLSAgICAgIEdzdFBsdWdpbkZlYXR1cmUgKmZlYXR1cmUgPSBmLT5kYXRhOwotICAgICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBnc3RfcGx1Z2luX2ZlYXR1cmVfZ2V0X25hbWUgKGZlYXR1cmUpOwotICAgICAgZ2Jvb2xlYW4gaWdub3JlID0gRkFMU0U7Ci0KLSAgICAgIGlmICghR1NUX0lTX0VMRU1FTlRfRkFDVE9SWSAoZmVhdHVyZSkpCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBpZiAoaWdub3JlbGlzdCkgewotICAgICAgICBnY2hhciAqKnM7Ci0KLSAgICAgICAgZm9yIChzID0gaWdub3JlbGlzdDsgcyAmJiAqczsgKytzKSB7Ci0gICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXggKG5hbWUsICpzKSkgewotICAgICAgICAgICAgR1NUX0RFQlVHICgiaWdub3JpbmcgZWxlbWVudCAlcyIsIG5hbWUpOwotICAgICAgICAgICAgaWdub3JlID0gVFJVRTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlnbm9yZSkKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgR1NUX0RFQlVHICgiYWRkaW5nIGVsZW1lbnQgJXMiLCBuYW1lKTsKLSAgICAgIGVsZW1lbnRzID0gZ19saXN0X3ByZXBlbmQgKGVsZW1lbnRzLCAoZ3BvaW50ZXIpIGdfc3RyZHVwIChuYW1lKSk7Ci0gICAgfQotICAgIGdzdF9wbHVnaW5fZmVhdHVyZV9saXN0X2ZyZWUgKGZlYXR1cmVzKTsKLSAgfQotICBnc3RfcGx1Z2luX2xpc3RfZnJlZSAocGx1Z2lucyk7Ci0gIGdfc3RyZnJlZXYgKGlnbm9yZWxpc3QpOwotfQotCi1zdGF0aWMgdm9pZAotdGVhcmRvd24gKHZvaWQpCi17Ci0gIEdMaXN0ICplOwotCi0gIGZvciAoZSA9IGVsZW1lbnRzOyBlOyBlID0gZS0+bmV4dCkgewotICAgIGdfZnJlZSAoZS0+ZGF0YSk7Ci0gIH0KLSAgZ19saXN0X2ZyZWUgKGVsZW1lbnRzKTsKLSAgZWxlbWVudHMgPSBOVUxMOwotfQotCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZXNfdXBfYW5kX2Rvd25fc2VxKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBHTGlzdCAqZTsKLQotICBmb3IgKGUgPSBlbGVtZW50czsgZTsgZSA9IGUtPm5leHQpIHsKLSAgICBjb25zdCBnY2hhciAqbmFtZSA9IGUtPmRhdGE7Ci0KLSAgICBHU1RfSU5GTyAoInRlc3RpbmcgZWxlbWVudCAlcyIsIG5hbWUpOwotICAgIGVsZW1lbnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKG5hbWUsIG5hbWUpOwotICAgIGZhaWxfaWYgKGVsZW1lbnQgPT0gTlVMTCwgIkNvdWxkIG5vdCBtYWtlIGVsZW1lbnQgZnJvbSBmYWN0b3J5ICVzIiwgbmFtZSk7Ci0KLSAgICBpZiAoR1NUX0lTX1BJUEVMSU5FIChlbGVtZW50KSkgewotICAgICAgR1NUX0RFQlVHICgiZWxlbWVudCAlcyBpcyBhIHBpcGVsaW5lIiwgbmFtZSk7Ci0gICAgfQotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChlbGVtZW50KSk7Ci0gIH0KLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX3NlcSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLSAgR0xpc3QgKmU7Ci0KLSAgZm9yIChlID0gZWxlbWVudHM7IGU7IGUgPSBlLT5uZXh0KSB7Ci0gICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBlLT5kYXRhOwotCi0gICAgR1NUX0lORk8gKCJ0ZXN0aW5nIGVsZW1lbnQgJXMiLCBuYW1lKTsKLSAgICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChuYW1lLCBuYW1lKTsKLSAgICBmYWlsX2lmIChlbGVtZW50ID09IE5VTEwsICJDb3VsZCBub3QgbWFrZSBlbGVtZW50IGZyb20gZmFjdG9yeSAlcyIsIG5hbWUpOwotCi0gICAgaWYgKEdTVF9JU19QSVBFTElORSAoZWxlbWVudCkpIHsKLSAgICAgIEdTVF9ERUJVRyAoImVsZW1lbnQgJXMgaXMgYSBwaXBlbGluZSIsIG5hbWUpOwotICAgIH0KLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUkVBRFkpOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGVsZW1lbnQpKTsKLSAgfQotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3N0YXRlX2NoYW5nZXNfZG93bl9zZXEpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdMaXN0ICplOwotCi0gIGZvciAoZSA9IGVsZW1lbnRzOyBlOyBlID0gZS0+bmV4dCkgewotICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZS0+ZGF0YTsKLQotICAgIEdTVF9JTkZPICgidGVzdGluZyBlbGVtZW50ICVzIiwgbmFtZSk7Ci0gICAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAobmFtZSwgbmFtZSk7Ci0gICAgZmFpbF9pZiAoZWxlbWVudCA9PSBOVUxMLCAiQ291bGQgbm90IG1ha2UgZWxlbWVudCBmcm9tIGZhY3RvcnkgJXMiLCBuYW1lKTsKLQotICAgIGlmIChHU1RfSVNfUElQRUxJTkUgKGVsZW1lbnQpKSB7Ci0gICAgICBHU1RfREVCVUcgKCJlbGVtZW50ICVzIGlzIGEgcGlwZWxpbmUiLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoZWxlbWVudCkpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotCi1zdGF0aWMgU3VpdGUgKgotc3RhdGVzX3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoInN0YXRlc19nb29kIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX2NoZWNrZWRfZml4dHVyZSAodGNfY2hhaW4sIHNldHVwLCB0ZWFyZG93bik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX2FuZF9kb3duX3NlcSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX3VwX3NlcSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdGF0ZV9jaGFuZ2VzX2Rvd25fc2VxKTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHN0YXRlcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9nc3QtcGx1Z2lucy1nb29kLnN1cHAgYi90ZXN0cy9jaGVjay9nc3QtcGx1Z2lucy1nb29kLnN1cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4Njc5NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svZ3N0LXBsdWdpbnMtZ29vZC5zdXBwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLXsKLSAgIDxzZXZlcmFsIHZhbGdyaW5kIHdhcm5pbmdzIGFzIGZvdW5kIHdpdGggbGlianBlZyA2YiBvbiBEZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBmdW46anBlZ19maW5pc2hfZGVjb21wcmVzcwotfQotCi17Ci0gICA8c2V2ZXJhbCB2YWxncmluZCB3YXJuaW5ncyBhcyBmb3VuZCB3aXRoIGxpYmpwZWcgNmIgb24gRGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgZnVuOmpwZWdfY29uc3VtZV9pbnB1dAotICAgZnVuOmpwZWdfcmVhZF9oZWFkZXIKLX0KLQotewotICAgPHNldmVyYWwgdmFsZ3JpbmQgd2FybmluZ3MgYXMgZm91bmQgd2l0aCBsaWJqcGVnIDZiIG9uIERlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpqcGVnX2ZpbGxfYml0X2J1ZmZlcgotICAgZnVuOmpwZWdfaHVmZl9kZWNvZGUKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIGZ1bjpqcGVnX3JlYWRfcmF3X2RhdGEKLX0KLQotewotICAgPHNldmVyYWwgdmFsZ3JpbmQgd2FybmluZ3MgYXMgZm91bmQgd2l0aCBsaWJqcGVnIDZiIG9uIERlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIGZ1bjpqcGVnX2ZpbGxfYml0X2J1ZmZlcgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgZnVuOmpwZWdfcmVhZF9yYXdfZGF0YQotfQotCi17Ci0gICA8c2V2ZXJhbCB2YWxncmluZCB3YXJuaW5ncyBhcyBmb3VuZCB3aXRoIGxpYmpwZWcgNmIgb24gRGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgZnVuOmpwZWdfY29uc3VtZV9pbnB1dAotICAgZnVuOmpwZWdfcmVhZF9oZWFkZXIKLX0KLQotewotICAgPHNldmVyYWwgdmFsZ3JpbmQgd2FybmluZ3MgYXMgZm91bmQgd2l0aCBsaWJqcGVnIDZiIG9uIERlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIGZ1bjpqcGVnX2ZpbmlzaF9jb21wcmVzcwotfQotCi17Ci0gICA8c2V2ZXJhbCB2YWxncmluZCB3YXJuaW5ncyBhcyBmb3VuZCB3aXRoIGxpYmpwZWcgNmIgb24gRGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgZnVuOmpwZWdfZmluaXNoX2NvbXByZXNzCi19Ci0KLXsKLSAgIDxzZXZlcmFsIHZhbGdyaW5kIHdhcm5pbmdzIGFzIGZvdW5kIHdpdGggbGlianBlZyA2YiBvbiBEZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBmdW46anBlZ19maW5pc2hfY29tcHJlc3MKLX0KLQotewotICAgPHNldmVyYWwgdmFsZ3JpbmQgd2FybmluZ3MgYXMgZm91bmQgd2l0aCBsaWJqcGVnIDZiIG9uIERlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIGZ1bjpqcGVnX3dyaXRlX3Jhd19kYXRhCi19Ci0KLXsKLSAgIDxzZXZlcmFsIHZhbGdyaW5kIHdhcm5pbmdzIGFzIGZvdW5kIHdpdGggbGlianBlZyA2YiBvbiBEZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBmdW46anBlZ193cml0ZV9yYXdfZGF0YQotfQotCi17Ci0gICA8c2V2ZXJhbCB2YWxncmluZCB3YXJuaW5ncyBhcyBmb3VuZCB3aXRoIGxpYmpwZWcgNmIgb24gRGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgZnVuOmpwZWdfd3JpdGVfcmF3X2RhdGEKLX0KLQotewotICAgPHNldmVyYWwgdmFsZ3JpbmQgd2FybmluZ3MgYXMgZm91bmQgd2l0aCBsaWJqcGVnIDZiIG9uIERlYmlhbj4KLSAgIE1lbWNoZWNrOkNvbmQKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIG9iajovdXNyL2xpYi9saWJqcGVnLnNvLioKLSAgIGZ1bjpqcGVnX3dyaXRlX3Jhd19kYXRhCi19Ci0KLXsKLSAgIDxzZXZlcmFsIHZhbGdyaW5kIHdhcm5pbmdzIGFzIGZvdW5kIHdpdGggbGlianBlZyA2YiBvbiBEZWJpYW4+Ci0gICBNZW1jaGVjazpDb25kCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBvYmo6L3Vzci9saWIvbGlianBlZy5zby4qCi0gICBmdW46amluaXRfY29tcHJlc3NfbWFzdGVyCi0gICBmdW46anBlZ19zdGFydF9jb21wcmVzcwotfQotCi17Ci0gICA8c2V2ZXJhbCB2YWxncmluZCB3YXJuaW5ncyBhcyBmb3VuZCB3aXRoIGxpYmpwZWcgNmIgb24gRGViaWFuPgotICAgTWVtY2hlY2s6Q29uZAotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgb2JqOi91c3IvbGliL2xpYmpwZWcuc28uKgotICAgZnVuOmppbml0X2NvbXByZXNzX21hc3RlcgotICAgZnVuOmpwZWdfc3RhcnRfY29tcHJlc3MKLX0KLQotewotICAgPHdlbGwga25vd24gemxpYiBidWc+Ci0gICBNZW1jaGVjazpDb25kCi0gICBmdW46aW5mbGF0ZVJlc2V0MgotICAgZnVuOmluZmxhdGVJbml0Ml8KLSAgIGZ1bjpwbmdfY3JlYXRlX3JlYWRfc3RydWN0XzIKLSAgIGZ1bjpwbmdfY3JlYXRlX3JlYWRfc3RydWN0Ci19Ci0KLXsKLSAgIDxhcHBhcmVudCBzdHJ0b2QgYnVnIHdoZW4gdHJ5aW5nIHRvIHBhcnNlICJpbmZpbml0eSIgZnJvbSAiaW50ZXJsZWF2ZWQiPgotICAgTWVtY2hlY2s6QWRkcjgKLSAgIGZ1bjpfX0dJX19fc3RybmNhc2VjbXBfbAotICAgZnVuOl9fX19zdHJ0b2RfbF9pbnRlcm5hbAotICAgZnVuOmdzdF92YWx1ZV9kZXNlcmlhbGl6ZV9kb3VibGUKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2VmZmVjdHYuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9lZmZlY3R2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNDgwNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2VmZmVjdHYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA5PiBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgZ2Jvb2xlYW4gZW9zOwotfSBPbk1lc3NhZ2VVc2VyRGF0YTsKLQotc3RhdGljIHZvaWQKLW9uX21lc3NhZ2VfY2IgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgT25NZXNzYWdlVXNlckRhdGEgKmQgPSB1c2VyX2RhdGE7Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQgKCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGQtPmxvb3ApOwotICAgICAgZC0+ZW9zID0gVFJVRTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotcnVuX3Rlc3QgKGNvbnN0IGdjaGFyICogcGlwZWxpbmVfc3RyaW5nKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgT25NZXNzYWdlVXNlckRhdGEgb211ZCA9IHsgTlVMTCwgfTsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIEdTVF9ERUJVRyAoIlRlc3RpbmcgcGlwZWxpbmUgJyVzJyIsIHBpcGVsaW5lX3N0cmluZyk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlbGluZV9zdHJpbmcsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHBpcGVsaW5lKSwgImFzeW5jLWhhbmRsaW5nIiwgVFJVRSwgTlVMTCk7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotCi0gIG9tdWQubG9vcCA9IGxvb3A7Ci0gIG9tdWQuZW9zID0gRkFMU0U7Ci0KLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZSIsIChHQ2FsbGJhY2spIG9uX21lc3NhZ2VfY2IsICZvbXVkKTsKLQotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZmFpbF91bmxlc3MgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MKLSAgICAgIHx8IHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKTsKLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAotICAgICAgICAgIEdTVF9TVEFURV9OVUxMKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpOwotCi0gIGZhaWxfdW5sZXNzIChvbXVkLmVvcyA9PSBUUlVFKTsKLQotICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotfQotCi0jZGVmaW5lIENSRUFURV9URVNUKGVsZW1lbnQpIFwKLUdTVF9TVEFSVF9URVNUICh0ZXN0XyMjZWxlbWVudCkgXAoteyBcCi0gIGdjaGFyICpwaXBlbGluZTsgXAotICBcCi0gIHBpcGVsaW5lID0gZ19zdHJkdXBfcHJpbnRmICgidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMCAhICIgXAotICAgICAgInZpZGVvY29udmVydCAhICIgXAotICAgICAgIiAlcyAhICIgXAotICAgICAgIiBmYWtlc2luayIsICNlbGVtZW50KTsgXAotICBcCi0gIHJ1bl90ZXN0IChwaXBlbGluZSk7IFwKLSAgZ19mcmVlIChwaXBlbGluZSk7IFwKLX0gXAotXAotR1NUX0VORF9URVNUOwotCi1DUkVBVEVfVEVTVCAoYWdpbmd0dik7Ci1DUkVBVEVfVEVTVCAoZGljZXR2KTsKLUNSRUFURV9URVNUIChlZGdldHYpOwotQ1JFQVRFX1RFU1QgKG9wdHYpOwotQ1JFQVRFX1RFU1QgKHF1YXJrdHYpOwotQ1JFQVRFX1RFU1QgKHJhZGlvYWN0dik7Ci1DUkVBVEVfVEVTVCAocmV2dHYpOwotQ1JFQVRFX1RFU1QgKHJpcHBsZXR2KTsKLUNSRUFURV9URVNUIChzaGFnYWRlbGljdHYpOwotQ1JFQVRFX1RFU1QgKHN0cmVha3R2KTsKLUNSRUFURV9URVNUICh2ZXJ0aWdvdHYpOwotQ1JFQVRFX1RFU1QgKHdhcnB0dik7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1lZmZlY3R2X3N1aXRlICh2b2lkKQotewotICBTdWl0ZSAqcyA9IHN1aXRlX2NyZWF0ZSAoImVmZmVjdHYiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgiZ2VuZXJhbCIpOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDE4MCk7Ci0KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2FnaW5ndHYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZGljZXR2KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VkZ2V0dik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9vcHR2KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3F1YXJrdHYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfcmFkaW9hY3R2KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JldnR2KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3JpcHBsZXR2KTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3NoYWdhZGVsaWN0dik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9zdHJlYWt0dik7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF92ZXJ0aWdvdHYpOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3Rfd2FycHR2KTsKLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKGVmZmVjdHYpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2ZsYWNkZWMuYyBiL3Rlc3RzL2NoZWNrL3BpcGVsaW5lcy9mbGFjZGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MWQ3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL2ZsYWNkZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGdzdC9jaGVjay9nc3RjaGVjay5oPgotI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0KLXN0YXRpYyBndWludDE2Ci1fZ2V0X2ZpcnN0X3NhbXBsZSAoR3N0U2FtcGxlICogc2FtcGxlKQotewotICBHc3RBdWRpb0luZm8gaW5mbzsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdE1hcEluZm8gbWFwOwotICBndWludDE2IHJlczsKLQotICBmYWlsX3VubGVzcyAoc2FtcGxlICE9IE5VTEwsICJOVUxMIHNhbXBsZSIpOwotCi0gIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzIChzYW1wbGUpOwotICBmYWlsX3VubGVzcyAoY2FwcyAhPSBOVUxMLCAic2FtcGxlIHdpdGhvdXQgY2FwcyIpOwotCi0gIGJ1ZiA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoc2FtcGxlKTsKLSAgR1NUX0RFQlVHICgiYnVmZmVyIHdpdGggc2l6ZT0lIiBHX0dTSVpFX0ZPUk1BVCAiLCBjYXBzPSUiIEdTVF9QVFJfRk9STUFULAotICAgICAgZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoYnVmKSwgY2Fwcyk7Ci0KLSAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgLyogbG9nIGJ1ZmZlciBkZXRhaWxzICovCi0gIEdTVF9NRU1EVU1QICgiYnVmZmVyIGRhdGEgZnJvbSBkZWNvZGVyIiwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLQotICAvKiBtYWtlIHN1cmUgaXQncyB0aGUgZm9ybWF0IHdlIGV4cGVjdCAqLwotICBmYWlsX3VubGVzcyAoZ3N0X2F1ZGlvX2luZm9fZnJvbV9jYXBzICgmaW5mbywgY2FwcykpOwotCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKEdTVF9BVURJT19JTkZPX1dJRFRIICgmaW5mbyksIDE2KTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0FVRElPX0lORk9fREVQVEggKCZpbmZvKSwgMTYpOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChHU1RfQVVESU9fSU5GT19SQVRFICgmaW5mbyksIDQ0MTAwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoR1NUX0FVRElPX0lORk9fQ0hBTk5FTFMgKCZpbmZvKSwgMSk7Ci0KLSAgaWYgKEdTVF9BVURJT19JTkZPX0lTX0xJVFRMRV9FTkRJQU4gKCZpbmZvKSkKLSAgICByZXMgPSBHU1RfUkVBRF9VSU5UMTZfTEUgKG1hcC5kYXRhKTsKLSAgZWxzZQotICAgIHJlcyA9IEdTVF9SRUFEX1VJTlQxNl9CRSAobWFwLmRhdGEpOwotCi0gIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZiwgJm1hcCk7Ci0KLSAgcmV0dXJuIHJlczsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVjb2RlKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqYXBwc2luazsKLSAgR3N0U2FtcGxlICpzYW1wbGUgPSBOVUxMOwotICBndWludDE2IGZpcnN0X3NhbXBsZSA9IDA7Ci0gIGd1aW50IHNpemUgPSAwOwotICBnY2hhciAqcGF0aCA9Ci0gICAgICBnX2J1aWxkX2ZpbGVuYW1lIChHU1RfVEVTVF9GSUxFU19QQVRILCAiYXVkaW90ZXN0c3JjLmZsYWMiLCBOVUxMKTsKLSAgZ2NoYXIgKnBpcGVfZGVzYyA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYKLSAgICAgICgiZmlsZXNyYyBsb2NhdGlvbj1cIiVzXCIgISBmbGFjcGFyc2UgISBmbGFjZGVjICEgYXBwc2luayBuYW1lPXNpbmsiLAotICAgICAgcGF0aCk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlX2Rlc2MsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0KLSAgZ19mcmVlIChwYXRoKTsKLSAgZ19mcmVlIChwaXBlX2Rlc2MpOwotCi0gIGFwcHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChhcHBzaW5rICE9IE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBkbyB7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChhcHBzaW5rLCAicHVsbC1zYW1wbGUiLCAmc2FtcGxlKTsKLSAgICBpZiAoc2FtcGxlID09IE5VTEwpCi0gICAgICBicmVhazsKLSAgICBpZiAoZmlyc3Rfc2FtcGxlID09IDApCi0gICAgICBmaXJzdF9zYW1wbGUgPSBfZ2V0X2ZpcnN0X3NhbXBsZSAoc2FtcGxlKTsKLQotICAgIHNpemUgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzYW1wbGUpKTsKLQotICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0gICAgc2FtcGxlID0gTlVMTDsKLSAgfQotICB3aGlsZSAoVFJVRSk7Ci0KLSAgLyogYXVkaW90ZXN0c3JjIHdpdGggc2FtcGxlc3BlcmJ1ZmZlciAxMDI0IGFuZCAxMCBudW0tYnVmZmVycyAqLwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChzaXplLCAyMDQ4MCk7Ci0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKGZpcnN0X3NhbXBsZSwgMHgwNjZhKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfb2JqZWN0X3VucmVmIChhcHBzaW5rKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9kZWNvZGVfc2Vla19mdWxsKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqYXBwc2luazsKLSAgR3N0RXZlbnQgKmV2ZW50OwotICBHc3RTYW1wbGUgKnNhbXBsZSA9IE5VTEw7Ci0gIGd1aW50MTYgZmlyc3Rfc2FtcGxlID0gMDsKLSAgZ3VpbnQgc2l6ZSA9IDA7Ci0gIGdjaGFyICpwYXRoID0KLSAgICAgIGdfYnVpbGRfZmlsZW5hbWUgKEdTVF9URVNUX0ZJTEVTX1BBVEgsICJhdWRpb3Rlc3RzcmMuZmxhYyIsIE5VTEwpOwotICBnY2hhciAqcGlwZV9kZXNjID0KLSAgICAgIGdfc3RyZHVwX3ByaW50ZgotICAgICAgKCJmaWxlc3JjIGxvY2F0aW9uPVwiJXNcIiAhIGZsYWNwYXJzZSAhIGZsYWNkZWMgISBhcHBzaW5rIG5hbWU9c2luayIsCi0gICAgICBwYXRoKTsKLQotICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHBpcGVfZGVzYywgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMKTsKLQotICBnX2ZyZWUgKHBpcGVfZGVzYyk7Ci0gIGdfZnJlZSAocGF0aCk7Ci0KLSAgYXBwc2luayA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNpbmsiKTsKLSAgZmFpbF91bmxlc3MgKGFwcHNpbmsgIT0gTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIEdTVF9DTE9DS19USU1FX05PTkUpOwotCi0gIC8qIGRvIGEgc2VlayB0aGF0IHNob3VsZCBnaXZlIHVzIHRoZSBjb21wbGV0ZSBvdXRwdXQgKi8KLSAgZXZlbnQgPSBnc3RfZXZlbnRfbmV3X3NlZWsgKDEuMCwgR1NUX0ZPUk1BVF9ERUZBVUxULCBHU1RfU0VFS19GTEFHX0ZMVVNILAotICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIDAsIEdTVF9TRUVLX1RZUEVfU0VULCAyMDQ4MCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9zZW5kX2V2ZW50IChhcHBzaW5rLCBldmVudCkpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBkbyB7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChhcHBzaW5rLCAicHVsbC1zYW1wbGUiLCAmc2FtcGxlKTsKLSAgICBpZiAoc2FtcGxlID09IE5VTEwpCi0gICAgICBicmVhazsKLSAgICBpZiAoZmlyc3Rfc2FtcGxlID09IDApCi0gICAgICBmaXJzdF9zYW1wbGUgPSBfZ2V0X2ZpcnN0X3NhbXBsZSAoc2FtcGxlKTsKLSAgICBzaXplICs9IGdzdF9idWZmZXJfZ2V0X3NpemUgKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlciAoc2FtcGxlKSk7Ci0KLSAgICBnc3Rfc2FtcGxlX3VucmVmIChzYW1wbGUpOwotICAgIHNhbXBsZSA9IE5VTEw7Ci0gIH0KLSAgd2hpbGUgKFRSVUUpOwotCi0gIC8qIGZpbGUgd2FzIGdlbmVyYXRlZCB3aXRoIGF1ZGlvdGVzdHNyYwotICAgKiB3aXRoIDEwMjQgc2FtcGxlc3BlcmJ1ZmZlciBhbmQgMTAgbnVtLWJ1ZmZlcnMgaW4gMTYgYml0IGF1ZGlvICovCi0gIGZhaWxfdW5sZXNzX2VxdWFsc19pbnQgKHNpemUsIDIwNDgwKTsKLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZmlyc3Rfc2FtcGxlLCAweDA2NmEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX29iamVjdF91bnJlZiAoYXBwc2luayk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZGVjb2RlX3NlZWtfcGFydGlhbCkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKmFwcHNpbms7Ci0gIEdzdEV2ZW50ICpldmVudDsKLSAgR3N0U2FtcGxlICpzYW1wbGUgPSBOVUxMOwotICBndWludCBzaXplID0gMDsKLSAgZ3VpbnQxNiBmaXJzdF9zYW1wbGUgPSAwOwotICBnY2hhciAqcGF0aCA9Ci0gICAgICBnX2J1aWxkX2ZpbGVuYW1lIChHU1RfVEVTVF9GSUxFU19QQVRILCAiYXVkaW90ZXN0c3JjLmZsYWMiLCBOVUxMKTsKLSAgZ2NoYXIgKnBpcGVfZGVzYyA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYKLSAgICAgICgiZmlsZXNyYyBsb2NhdGlvbj1cIiVzXCIgISBmbGFjcGFyc2UgISBmbGFjZGVjICEgYXBwc2luayBuYW1lPXNpbmsiLAotICAgICAgcGF0aCk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlX2Rlc2MsIE5VTEwpOwotICBmYWlsX3VubGVzcyAocGlwZWxpbmUgIT0gTlVMTCk7Ci0KLSAgZ19mcmVlIChwYXRoKTsKLSAgZ19mcmVlIChwaXBlX2Rlc2MpOwotCi0gIGFwcHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChhcHBzaW5rICE9IE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwotICBnc3RfZWxlbWVudF9nZXRfc3RhdGUgKHBpcGVsaW5lLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLQotICAvKiBkbyBhIHBhcnRpYWwgc2VlayB0byBnZXQgdGhlIGZpcnN0IDEwMjQgc2FtcGxlcyBvciAyMDQ4IGJ5dGVzICovCi0gIGV2ZW50ID0gZ3N0X2V2ZW50X25ld19zZWVrICgxLjAsIEdTVF9GT1JNQVRfREVGQVVMVCwgR1NUX1NFRUtfRkxBR19GTFVTSCwKLSAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCAwLCBHU1RfU0VFS19UWVBFX1NFVCwgMTAyNCk7Ci0gIEdTVF9ERUJVRyAoInNlZWtpbmciKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X3NlbmRfZXZlbnQgKGFwcHNpbmssIGV2ZW50KSk7Ci0gIEdTVF9ERUJVRyAoInNlZWtlZCIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBkbyB7Ci0gICAgR1NUX0RFQlVHICgicHVsbGluZyBzYW1wbGUiKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKGFwcHNpbmssICJwdWxsLXNhbXBsZSIsICZzYW1wbGUpOwotICAgIEdTVF9ERUJVRyAoInB1bGxlZCBzYW1wbGUgJXAiLCBzYW1wbGUpOwotICAgIGlmIChzYW1wbGUgPT0gTlVMTCkKLSAgICAgIGJyZWFrOwotICAgIGlmIChmaXJzdF9zYW1wbGUgPT0gMCkgewotICAgICAgZmlyc3Rfc2FtcGxlID0gX2dldF9maXJzdF9zYW1wbGUgKHNhbXBsZSk7Ci0gICAgfQotICAgIHNpemUgKz0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzYW1wbGUpKTsKLQotICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0gICAgc2FtcGxlID0gTlVMTDsKLSAgfQotICB3aGlsZSAoVFJVRSk7Ci0KLSAgLyogYWxsb3cgZm9yIHNhbXBsZSByb3VuZC11cCBjbGlwcGluZyBlZmZlY3QgKi8KLSAgZmFpbF91bmxlc3MgKHNpemUgPT0gMjA0OCB8fCBzaXplID09IDIwNTApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChmaXJzdF9zYW1wbGUsIDB4MDY2YSk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfb2JqZWN0X3VucmVmIChhcHBzaW5rKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi1zdGF0aWMgU3VpdGUgKgotZmxhY2RlY19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJmbGFjZGVjIik7Ci0KLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgibGluZWFyIik7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgNjBzLCBub3QgdGhlIGRlZmF1bHQgMyAqLwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlY29kZSk7Ci0gIHRjYXNlX2FkZF90ZXN0ICh0Y19jaGFpbiwgdGVzdF9kZWNvZGVfc2Vla19mdWxsKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2RlY29kZV9zZWVrX3BhcnRpYWwpOwotCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoZmxhY2RlYyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3NpbXBsZS1sYXVuY2gtbGluZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ4MzUxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9waXBlbGluZXMvc2ltcGxlLWxhdW5jaC1saW5lcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFuZHkgV2luZ28gPHdpbmdvQHBvYm94LmNvbT4KLSAqCi0gKiBzaW1wbGVfbGF1bmNoX2xpbmVzLmM6IFVuaXQgdGVzdCBmb3Igc2ltcGxlIHBpcGVsaW5lcwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLQotI2lmbmRlZiBHU1RfRElTQUJMRV9QQVJTRQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9waXBlbGluZSAoY29uc3QgZ2NoYXIgKiBwaXBlX2Rlc2NyKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLQotICBwaXBlbGluZSA9IGdzdF9wYXJzZV9sYXVuY2ggKHBpcGVfZGVzY3IsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSksIE5VTEwpOwotICByZXR1cm4gcGlwZWxpbmU7Ci19Ci0KLS8qIAotICogcnVuX3BpcGVsaW5lOgotICogQHBpcGU6IHRoZSBwaXBlbGluZSB0byBydW4KLSAqIEBkZXNjOiB0aGUgZGVzY3JpcHRpb24gZm9yIHVzZSBpbiBtZXNzYWdlcwotICogQGV2ZW50czogaXMgYSBtYXNrIG9mIGV4cGVjdGVkIGV2ZW50cwotICogQHRldmVudDogaXMgdGhlIGV4cGVjdGVkIHRlcm1pbmFsIGV2ZW50LgotICoKLSAqIHRoZSBwb2xsIGNhbGwgd2lsbCB0aW1lIG91dCBhZnRlciBoYWxmIGEgc2Vjb25kLgotICovCi1zdGF0aWMgdm9pZAotcnVuX3BpcGVsaW5lIChHc3RFbGVtZW50ICogcGlwZSwgY29uc3QgZ2NoYXIgKiBkZXNjciwKLSAgICBHc3RNZXNzYWdlVHlwZSBldmVudHMsIEdzdE1lc3NhZ2VUeXBlIHRldmVudCwgR3N0U3RhdGUgdGFyZ2V0X3N0YXRlKQotewotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZTsKLSAgR3N0TWVzc2FnZVR5cGUgcmV2ZW50OwotICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQ7Ci0KLSAgZ19hc3NlcnQgKHBpcGUpOwotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlKTsKLSAgZ19hc3NlcnQgKGJ1cyk7Ci0KLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCB0YXJnZXRfc3RhdGUpID09Ci0gICAgICBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUsICJDb3VsZCBub3Qgc2V0IHBpcGVsaW5lICVzIHRvIHBsYXlpbmciLCBkZXNjcik7Ci0gIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZSwgTlVMTCwgTlVMTCwgMTAgKiBHU1RfU0VDT05EKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DKSB7Ci0gICAgZ19jcml0aWNhbCAoIlBpcGVsaW5lICclcycgZmFpbGVkIHRvIGdvIHRvIFBBVVNFRCBmYXN0IGVub3VnaCIsIGRlc2NyKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0gZWxzZSBpZiAoKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MpCi0gICAgICAmJiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTCkpIHsKLSAgICBnX2NyaXRpY2FsICgiUGlwZWxpbmUgJyVzJyBmYWlsZWQgdG8gZ28gaW50byBQQVVTRUQgc3RhdGUgKCVzKSIsIGRlc2NyLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2VfcmV0dXJuX2dldF9uYW1lIChyZXQpKTsKLSAgICBnb3RvIGRvbmU7Ci0gIH0KLQotICB3aGlsZSAoMSkgewotICAgIG1lc3NhZ2UgPSBnc3RfYnVzX3BvbGwgKGJ1cywgR1NUX01FU1NBR0VfQU5ZLCBHU1RfU0VDT05EIC8gMik7Ci0KLSAgICAvKiBhbHdheXMgaGF2ZSB0byBwb3AgdGhlIG1lc3NhZ2UgYmVmb3JlIGdldHRpbmcgYmFjayBpbnRvIHBvbGwgKi8KLSAgICBpZiAobWVzc2FnZSkgewotICAgICAgcmV2ZW50ID0gR1NUX01FU1NBR0VfVFlQRSAobWVzc2FnZSk7Ci0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldmVudCA9IEdTVF9NRVNTQUdFX1VOS05PV047Ci0gICAgfQotCi0gICAgaWYgKHJldmVudCA9PSB0ZXZlbnQpIHsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAocmV2ZW50ID09IEdTVF9NRVNTQUdFX1VOS05PV04pIHsKLSAgICAgIGdfY3JpdGljYWwgKCJVbmV4cGVjdGVkIHRpbWVvdXQgaW4gZ3N0X2J1c19wb2xsLCBsb29raW5nIGZvciAlZDogJXMiLAotICAgICAgICAgIHRldmVudCwgZGVzY3IpOwotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChyZXZlbnQgJiBldmVudHMpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBnX2NyaXRpY2FsCi0gICAgICAgICgiVW5leHBlY3RlZCBtZXNzYWdlIHJlY2VpdmVkIG9mIHR5cGUgJWQsICclcycsIGxvb2tpbmcgZm9yICVkOiAlcyIsCi0gICAgICAgIHJldmVudCwgZ3N0X21lc3NhZ2VfdHlwZV9nZXRfbmFtZSAocmV2ZW50KSwgdGV2ZW50LCBkZXNjcik7Ci0gIH0KLQotZG9uZToKLSAgZmFpbF9pZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfTlVMTCkgPT0KLSAgICAgIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSwgIkNvdWxkIG5vdCBzZXQgcGlwZWxpbmUgJXMgdG8gTlVMTCIsIGRlc2NyKTsKLSAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlLCBOVUxMLCBOVUxMLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci0KLSAgZ3N0X2J1c19zZXRfZmx1c2hpbmcgKGJ1cywgVFJVRSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3J0cF9wYXlsb2FkZXJzKQotewotICBjb25zdCBnY2hhciAqczsKLQotICAvKiBGSVhNRTogZ29pbmcgdG8gcGxheWluZyB3b3VsZCBiZSBuaWNlLCBidXQgdGhldCBsZWFkcyB0byBsb3Qgb2YgZmFpbHVyZSAqLwotICBHc3RTdGF0ZSB0YXJnZXRfc3RhdGUgPSBHU1RfU1RBVEVfUEFVU0VEOwotCi0gIC8qIHdlIHVzZSBpcy1saXZlIGhlcmUgdG8gYXZvaWQgcHJlcm9sbCAqLwotI2RlZmluZSBQSVBFTElORV9TVFJJTkcoYnVmY291bnQsIGJ1ZnNpemUsIHBsLCBkcGwpICJmYWtlc3JjIGlzLWxpdmU9dHJ1ZSBudW0tYnVmZmVycz0iIGJ1ZmNvdW50ICIgZmlsbHR5cGU9MiBzaXpldHlwZT0yIHNpemVtYXg9IiBidWZzaXplICIgISAiIHBsICIgISAiIGRwbCAiICEgZmFrZXNpbmsiCi0jZGVmaW5lIERFRkFVTFRfQlVGQ09VTlQgIjUiCi0jZGVmaW5lIERFRkFVTFRfQlVGU0laRSAiMTYiCi0KLSAgcyA9IFBJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgREVGQVVMVF9CVUZTSVpFLCAicnRwaWxiY3BheSIsCi0gICAgICAicnRwaWxiY2RlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCBERUZBVUxUX0JVRlNJWkUsICJydHBnc21wYXkiLAotICAgICAgInJ0cGdzbWRlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICAvKiBUaGlzIG9uZSBuZWVkcyBhIGJpdCBkaWZmZXJlbnQgYnVmZmVyIHNpemUgdGhhbiBvdGhlcnMgb3IgaXQgZG9lc24ndCB3b3JrLiAqLwotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCAiNTIiLCAicnRwYW1ycGF5IiwgInJ0cGFtcmRlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCBERUZBVUxUX0JVRlNJWkUsICJydHBwY21hcGF5IiwKLSAgICAgICJydHBwY21hZGVwYXkiKTsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9BTlkgJiB+KEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfV0FSTklORyksCi0gICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotCi0gIHMgPSBQSVBFTElORV9TVFJJTkcgKERFRkFVTFRfQlVGQ09VTlQsIERFRkFVTFRfQlVGU0laRSwgInJ0cHBjbXVwYXkiLAotICAgICAgInJ0cHBjbXVkZXBheSIpOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX0FOWSAmIH4oR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9XQVJOSU5HKSwKLSAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04sIHRhcmdldF9zdGF0ZSk7Ci0KLSAgcyA9IFBJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgREVGQVVMVF9CVUZTSVpFLCAicnRwbXBhcGF5IiwKLSAgICAgICJydHBtcGFkZXBheSIpOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX0FOWSAmIH4oR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9XQVJOSU5HKSwKLSAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04sIHRhcmdldF9zdGF0ZSk7Ci0KLSAgcyA9IFBJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgREVGQVVMVF9CVUZTSVpFLCAicnRwaDI2M3BwYXkiLAotICAgICAgInJ0cGgyNjNwZGVwYXkiKTsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9BTlkgJiB+KEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfV0FSTklORyksCi0gICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotCi0gIHMgPSBQSVBFTElORV9TVFJJTkcgKERFRkFVTFRfQlVGQ09VTlQsIERFRkFVTFRfQlVGU0laRSwgInJ0cGgyNjNwYXkiLAotICAgICAgInJ0cGgyNjNkZXBheSIpOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX0FOWSAmIH4oR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9XQVJOSU5HKSwKLSAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04sIHRhcmdldF9zdGF0ZSk7Ci0KLSAgcyA9IFBJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgREVGQVVMVF9CVUZTSVpFLCAicnRwaDI2NHBheSIsCi0gICAgICAicnRwaDI2NGRlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCBERUZBVUxUX0JVRlNJWkUsICJydHBMMTZwYXkiLAotICAgICAgInJ0cEwxNmRlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCBERUZBVUxUX0JVRlNJWkUsICJydHBtcDJ0cGF5IiwKLSAgICAgICJydHBtcDJ0ZGVwYXkiKTsKLSAgcnVuX3BpcGVsaW5lIChzZXR1cF9waXBlbGluZSAocyksIHMsCi0gICAgICBHU1RfTUVTU0FHRV9BTlkgJiB+KEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfV0FSTklORyksCi0gICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotCi0gIHMgPSBQSVBFTElORV9TVFJJTkcgKERFRkFVTFRfQlVGQ09VTlQsIERFRkFVTFRfQlVGU0laRSwgInJ0cG1wNHZwYXkiLAotICAgICAgInJ0cG1wNHZkZXBheSIpOwotICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgIEdTVF9NRVNTQUdFX0FOWSAmIH4oR1NUX01FU1NBR0VfRVJST1IgfCBHU1RfTUVTU0FHRV9XQVJOSU5HKSwKLSAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04sIHRhcmdldF9zdGF0ZSk7Ci0KLSAgcyA9IFBJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgREVGQVVMVF9CVUZTSVpFLCAicnRwbXA0Z3BheSIsCi0gICAgICAicnRwbXA0Z2RlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICAvKiBDYW5ub3QgYmUgdGVzdGVkIHdpdGggZmFrZXNyYyBiZWNvdXNlIHNwZWV4IHBheWxvYWRlciByZXF1aXJlcyBhIHZhbGlkIGhlYWRlcj8hICovCi0gIC8qCi0gICAgIHMgPSBQSVBFTElORV9TVFJJTkcoREVGQVVMVF9CVUZDT1VOVCwgREVGQVVMVF9CVUZTSVpFLCAicnRwc3BlZXhwYXkiLCAicnRwc3BlZXhkZXBheSIpOwotICAgICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotICAgKi8KLQotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCBERUZBVUxUX0JVRlNJWkUsICJydHB0aGVvcmFwYXkiLAotICAgICAgInJ0cHRoZW9yYWRlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotICBzID0gUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCBERUZBVUxUX0JVRlNJWkUsICJydHB2b3JiaXNwYXkiLAotICAgICAgInJ0cHZvcmJpc2RlcGF5Iik7Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgdGFyZ2V0X3N0YXRlKTsKLQotI2RlZmluZSBKMktfVEVTVF9GSUxFX1BBVEggR1NUX1RFU1RfRklMRVNfUEFUSCBHX0RJUl9TRVBBUkFUT1JfUyAiZ3JhZGllbnQuajJrIgotI2RlZmluZSBKMktDQVBTICJpbWFnZS94LWpwYyxzYW1wbGluZz1ZQ2JDci00OjI6MCx3aWR0aD03MjAsaGVpZ2h0PTU3NixwaXhlbC1hc3BlY3QtcmF0aW89MS8xLGZyYW1lcmF0ZT0zMC8xIgotICB7Ci0gICAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmM7Ci0gICAgR3N0Rmxvd1JldHVybiBmbG93ID0gR1NUX0ZMT1dfT0s7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgZ2NoYXIgKmRhdGE7Ci0gICAgZ3NpemUgbGVuOwotCi0gICAgcyA9ICJhcHBzcmMgY2Fwcz0iIEoyS0NBUFMgIiBuYW1lPXNyYyAhIHJ0cGoya3BheSAhIHJ0cGoya2RlcGF5ICEgZmFrZXNpbmsiOwotCi0gICAgZmFpbF91bmxlc3MgKGdfZmlsZV9nZXRfY29udGVudHMgKEoyS19URVNUX0ZJTEVfUEFUSCwgJmRhdGEsICZsZW4sIE5VTEwpKTsKLSAgICBidWYgPSBnc3RfYnVmZmVyX25ld193cmFwcGVkIChkYXRhLCBsZW4pOwotICAgIHBpcGVsaW5lID0gc2V0dXBfcGlwZWxpbmUgKHMpOwotICAgIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNyYyIpOwotICAgIGdfb2JqZWN0X3NldCAoc3JjLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCBOVUxMKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHNyYywgInB1c2gtYnVmZmVyIiwgYnVmLCAmZmxvdyk7Ci0gICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKLSAgICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChmbG93LCBHU1RfRkxPV19PSyk7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChzcmMsICJlbmQtb2Ytc3RyZWFtIiwgJmZsb3cpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gICAgcnVuX3BpcGVsaW5lIChwaXBlbGluZSwgcywKLSAgICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotICB9Ci0KLSAgLypzID0gRkFLRVNSQyAiICEgISBydHBhYzNkZXBheSAhICIgRkFLRVNJTksgKi8KLSAgLypzID0gRkFLRVNSQyAiICEgISBhc3Rlcmlza2gyNjMgISAiIEZBS0VTSU5LOyAqLwotICAvKnMgPSBGQUtFU1JDICIgISAhIHJ0cG1wdmRlcGF5ICEgIiBGQUtFU0lOSzsgKi8KLSAgLypzID0gRkFLRVNSQyAiICEgISBydHBtcDRhZGVwYXkgISAiIEZBS0VTSU5LOyAqLwotICAvKnMgPSBGQUtFU1JDICIgISAhIHJ0cHN2M3ZkZXBheSAhICIgRkFLRVNJTks7ICovCi19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIGdib29sZWFuCi1oYXZlX2VsZW1lbnRzIChjb25zdCBnY2hhciAqIGVsZW1lbnQxLCBjb25zdCBnY2hhciAqIGVsZW1lbnQyKQotewotICByZXR1cm4gZ3N0X3JlZ2lzdHJ5X2NoZWNrX2ZlYXR1cmVfdmVyc2lvbiAoZ3N0X3JlZ2lzdHJ5X2dldCAoKSwgZWxlbWVudDEsCi0gICAgICBHU1RfVkVSU0lPTl9NQUpPUiwgR1NUX1ZFUlNJT05fTUlOT1IsIDApICYmCi0gICAgICBnc3RfcmVnaXN0cnlfY2hlY2tfZmVhdHVyZV92ZXJzaW9uIChnc3RfcmVnaXN0cnlfZ2V0ICgpLCBlbGVtZW50MiwKLSAgICAgIEdTVF9WRVJTSU9OX01BSk9SLCBHU1RfVkVSU0lPTl9NSU5PUiwgMCk7Ci19Ci0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZpZGVvX2VuY29kZXJzX2RlY29kZXJzKQotewotICBjb25zdCBnY2hhciAqczsKLSAgR3N0U3RhdGUgdGFyZ2V0X3N0YXRlID0gR1NUX1NUQVRFX1BMQVlJTkc7Ci0KLSAgLyogbm8gaXMtbGl2ZSBvbiB0aGUgc291cmNlIGJlY2F1c2Ugd2UgYWN0dWFsbHkgd2FudCB0byBwcmVyb2xsIHNpbmNlCi0gICAqIHJ1bl9waXBlbGluZSBvbmx5IGdvZXMgaW50byBQQVVTRUQgKi8KLSNkZWZpbmUgRU5DX0RFQ19QSVBFTElORV9TVFJJTkcoYnVmY291bnQsIGVuYywgZGVjKSAidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPSIgYnVmY291bnQgIiAhICIgZW5jICIgISAiIGRlYyAiICEgZmFrZXNpbmsiCi0jZGVmaW5lIERFRkFVTFRfQlVGQ09VTlQgIjUiCi0KLSAgaWYgKGhhdmVfZWxlbWVudHMgKCJqcGVnZW5jIiwgImpwZWdkZWMiKSkgewotICAgIHMgPSBFTkNfREVDX1BJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgImpwZWdlbmMiLCAianBlZ2RlYyIpOwotICAgIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKHMpLCBzLAotICAgICAgICBHU1RfTUVTU0FHRV9BTlkgJiB+KEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfV0FSTklORyksCi0gICAgICAgIEdTVF9NRVNTQUdFX1VOS05PV04sIHRhcmdldF9zdGF0ZSk7Ci0gIH0KLQotICBpZiAoaGF2ZV9lbGVtZW50cyAoInBuZ2VuYyIsICJwbmdkZWMiKSkgewotICAgIHMgPSBFTkNfREVDX1BJUEVMSU5FX1NUUklORyAoREVGQVVMVF9CVUZDT1VOVCwgInBuZ2VuYyIsICJwbmdkZWMiKTsKLSAgICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotICB9Ci0KLSAgaWYgKGhhdmVfZWxlbWVudHMgKCJzbW9rZWVuYyIsICJzbW9rZWRlYyIpKSB7Ci0gICAgcyA9IEVOQ19ERUNfUElQRUxJTkVfU1RSSU5HIChERUZBVUxUX0JVRkNPVU5ULCAic21va2VlbmMiLCAic21va2VkZWMiKTsKLSAgICBydW5fcGlwZWxpbmUgKHNldHVwX3BpcGVsaW5lIChzKSwgcywKLSAgICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgICBHU1RfTUVTU0FHRV9VTktOT1dOLCB0YXJnZXRfc3RhdGUpOwotICB9Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotI2RlZmluZSBWSURFT01JWEVSX1BJUEVMSU5FIFwKLSAgICAidmlkZW9taXhlciBuYW1lPW1peCAgYmFja2dyb3VuZD10cmFuc3BhcmVudCAhIGZha2VzaW5rICIgXAotICAgICJ2aWRlb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9NTAgISAiIFwKLSAgICAiICB2aWRlby94LXJhdyxmb3JtYXQ9UkdCQSwgd2lkdGg9MjAwLGhlaWdodD0yMDAsZnJhbWVyYXRlPTEwLzEgICEgIiBcCi0gICAgIiAgdmlkZW9jb252ZXJ0ICEgbWl4LnNpbmtfMSAiIFwKLSAgICAidmlkZW90ZXN0c3JjIG51bS1idWZmZXJzPTUwIHBhdHRlcm49c21wdGUgISAiIFwKLSAgICAiICB2aWRlby94LXJhdyxmb3JtYXQ9UkdCQSwgd2lkdGg9NzIwLGhlaWdodD00ODAsZnJhbWVyYXRlPTEwLzEgICEgIiBcCi0gICAgIiAgdmlkZW9jb252ZXJ0ICEgbWl4LnNpbmtfMCAiCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X3ZpZGVvbWl4ZXIpCi17Ci0gIHJ1bl9waXBlbGluZSAoc2V0dXBfcGlwZWxpbmUgKFZJREVPTUlYRVJfUElQRUxJTkUpLCBWSURFT01JWEVSX1BJUEVMSU5FLAotICAgICAgR1NUX01FU1NBR0VfQU5ZICYgfihHU1RfTUVTU0FHRV9FUlJPUiB8IEdTVF9NRVNTQUdFX1dBUk5JTkcpLAotICAgICAgR1NUX01FU1NBR0VfVU5LTk9XTiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNlbmRpZiAvKiAjaWZuZGVmIEdTVF9ESVNBQkxFX1BBUlNFICovCi1zdGF0aWMgU3VpdGUgKgotc2ltcGxlX2xhdW5jaF9saW5lc19zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJQaXBlbGluZXMiKTsKLSAgVENhc2UgKnRjX2NoYWluID0gdGNhc2VfY3JlYXRlICgibGluZWFyIik7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgNjBzLCBub3QgdGhlIGRlZmF1bHQgMyAqLwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSNpZm5kZWYgR1NUX0RJU0FCTEVfUEFSU0UKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3J0cF9wYXlsb2FkZXJzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZpZGVvX2VuY29kZXJzX2RlY29kZXJzKTsKLSAgLyogRklYTUU6IHZlcnkgcmFyZWx5IGZhaWxzLCBtYXliZSBiZWNhdXNlIG9mIG5lZ290aWF0aW9uIGlzc3Vlcz8gKi8KLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3ZpZGVvbWl4ZXIpOwotI2VuZGlmCi0gIHJldHVybiBzOwotfQotCi1HU1RfQ0hFQ0tfTUFJTiAoc2ltcGxlX2xhdW5jaF9saW5lcyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmMgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvdGFnc2NoZWNraW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYzcyYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3RhZ3NjaGVja2luZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uLiAoY29udGFjdCA8c3RlZmFuLmtvc3RAbm9raWEuY29tPikKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGlhZ28gU2FudG9zIDx0aGlhZ28uc291c2Euc2FudG9zQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0KLXN0YXRpYyBHc3RUYWdMaXN0ICpyZWNlaXZlZF90YWdzID0gTlVMTDsKLQotc3RhdGljIGdib29sZWFuCi1idXNfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gKEdNYWluTG9vcCAqKSBkYXRhOwotCi0gIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRU9TOgotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICBHRXJyb3IgKmdlcnJvcjsKLQotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfVEFHOnsKLSAgICAgIGlmIChyZWNlaXZlZF90YWdzID09IE5VTEwpIHsKLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfdGFnIChtZXNzYWdlLCAmcmVjZWl2ZWRfdGFncyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBHc3RUYWdMaXN0ICp0bCA9IE5VTEwsICpudGwgPSBOVUxMOwotCi0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RhZyAobWVzc2FnZSwgJnRsKTsKLSAgICAgICAgaWYgKHRsKSB7Ci0gICAgICAgICAgbnRsID0gZ3N0X3RhZ19saXN0X21lcmdlIChyZWNlaXZlZF90YWdzLCB0bCwgR1NUX1RBR19NRVJHRV9QUkVQRU5EKTsKLSAgICAgICAgICBpZiAobnRsKSB7Ci0gICAgICAgICAgICBHU1RfTE9HICgidGFnbGlzdHMgbWVyZ2VkOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbnRsKTsKLSAgICAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZiAocmVjZWl2ZWRfdGFncyk7Ci0gICAgICAgICAgICByZWNlaXZlZF90YWdzID0gbnRsOwotICAgICAgICAgIH0KLSAgICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYgKHRsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0vKgotICogQ3JlYXRlcyBhIHBpcGVsaW5lIGluIHRoZSBmb3JtOgotICogZmFrZXNyYyBudW0tYnVmZmVycz0xICEgY2FwcyAhIG11eGVyICEgZmlsZXNpbmsgbG9jYXRpb249ZmlsZQotICoKLSAqIEFuZCBzZXRzIHRoZSB0YWdzIGluIHRhZ19zdHIgaW50byB0aGUgbXV4ZXIgdmlhIHRhZ3NldHRlci4KLSAqLwotc3RhdGljIHZvaWQKLXRlc3RfbXV4X3RhZ3MgKGNvbnN0IGdjaGFyICogdGFnX3N0ciwgY29uc3QgZ2NoYXIgKiBjYXBzLAotICAgIGNvbnN0IGdjaGFyICogbXV4ZXIsIGNvbnN0IGdjaGFyICogZmlsZSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0gIEdzdFRhZ0xpc3QgKnNlbnRfdGFnczsKLSAgR3N0RWxlbWVudCAqbXV4OwotICBHc3RUYWdTZXR0ZXIgKnNldHRlcjsKLSAgZ2NoYXIgKmxhdW5jaF9zdHI7Ci0gIGd1aW50IGJ1c193YXRjaCA9IDA7Ci0KLSAgR1NUX0RFQlVHICgidGVzdGluZyB4bXAgbXV4aW5nIG9uIDogJXMiLCBtdXhlcik7Ci0KLSAgbGF1bmNoX3N0ciA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYgKCJmYWtlc3JjIG51bS1idWZmZXJzPTEgZm9ybWF0PXRpbWUgZGF0YXJhdGU9MTAwICEgIgotICAgICAgIiVzICEgJXMgbmFtZT1tdXggISBmaWxlc2luayBsb2NhdGlvbj0lcyBuYW1lPXNpbmsiLCBjYXBzLCBtdXhlciwgZmlsZSk7Ci0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAobGF1bmNoX3N0ciwgTlVMTCk7Ci0gIGdfZnJlZSAobGF1bmNoX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChwaXBlbGluZSAhPSBOVUxMKTsKLQotICBtdXggPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJtdXgiKTsKLSAgZmFpbF91bmxlc3MgKG11eCAhPSBOVUxMKTsKLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBUUlVFKTsKLSAgZmFpbF91bmxlc3MgKGxvb3AgIT0gTlVMTCk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAocGlwZWxpbmUpOwotICBmYWlsX3VubGVzcyAoYnVzICE9IE5VTEwpOwotICBidXNfd2F0Y2ggPSBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBidXNfaGFuZGxlciwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1JFQURZKTsKLQotICBzZXR0ZXIgPSBHU1RfVEFHX1NFVFRFUiAobXV4KTsKLSAgZmFpbF91bmxlc3MgKHNldHRlciAhPSBOVUxMKTsKLSAgc2VudF90YWdzID0gZ3N0X3RhZ19saXN0X25ld19mcm9tX3N0cmluZyAodGFnX3N0cik7Ci0gIGZhaWxfdW5sZXNzIChzZW50X3RhZ3MgIT0gTlVMTCk7Ci0gIGdzdF90YWdfc2V0dGVyX21lcmdlX3RhZ3MgKHNldHRlciwgc2VudF90YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UpOwotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHNlbnRfdGFncyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdfb2JqZWN0X3VucmVmIChtdXgpOwotICBnX29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaCk7Ci19Ci0KLS8qCi0gKiBNYWtlcyBhIHBpcGVsaW5lIGluIHRoZSBmb3JtOgotICogZmlsZXNyYyBsb2NhdGlvbj1maWxlICEgZGVtdXhlciAhIGZha2VzaW5rCi0gKgotICogQW5kIGdldHMgdGhlIHRhZ3MgdGhhdCBhcmUgcG9zdGVkIG9uIHRoZSBidXMgdG8gY29tcGFyZQotICogd2l0aCB0aGUgdGFncyBpbiAndGFnX3N0cicKLSAqLwotc3RhdGljIHZvaWQKLXRlc3RfZGVtdXhfdGFncyAoY29uc3QgZ2NoYXIgKiB0YWdfc3RyLCBjb25zdCBnY2hhciAqIGRlbXV4ZXIsCi0gICAgY29uc3QgZ2NoYXIgKiBmaWxlKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0VGFnTGlzdCAqc2VudF90YWdzOwotICBnaW50IGksIGosIGssIG5fcmVjdiwgbl9zZW50OwotICBjb25zdCBnY2hhciAqbmFtZV9zZW50LCAqbmFtZV9yZWN2OwotICBjb25zdCBHVmFsdWUgKnZhbHVlX3NlbnQsICp2YWx1ZV9yZWN2OwotICBnYm9vbGVhbiBmb3VuZDsKLSAgZ2ludCBjb21wYXJpc29uOwotICBHc3RFbGVtZW50ICpkZW11eDsKLSAgZ2NoYXIgKmxhdW5jaF9zdHI7Ci0gIGd1aW50IGJ1c193YXRjaCA9IDA7Ci0KLSAgR1NUX0RFQlVHICgidGVzdGluZyB0YWdzIDogJXMiLCB0YWdfc3RyKTsKLQotICBpZiAocmVjZWl2ZWRfdGFncykgewotICAgIGdzdF90YWdfbGlzdF91bnJlZiAocmVjZWl2ZWRfdGFncyk7Ci0gICAgcmVjZWl2ZWRfdGFncyA9IE5VTEw7Ci0gIH0KLQotICBsYXVuY2hfc3RyID0gZ19zdHJkdXBfcHJpbnRmICgiZmlsZXNyYyBsb2NhdGlvbj0lcyAhICVzIG5hbWU9ZGVtdXggISAiCi0gICAgICAiZmFrZXNpbmsiLCBmaWxlLCBkZW11eGVyKTsKLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChsYXVuY2hfc3RyLCBOVUxMKTsKLSAgZ19mcmVlIChsYXVuY2hfc3RyKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwpOwotCi0gIGRlbXV4ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAiZGVtdXgiKTsKLSAgZmFpbF91bmxlc3MgKGRlbXV4ICE9IE5VTEwpOwotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIFRSVUUpOwotICBmYWlsX3VubGVzcyAobG9vcCAhPSBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCk7Ci0gIGJ1c193YXRjaCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19oYW5kbGVyLCBsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBzZW50X3RhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2Zyb21fc3RyaW5nICh0YWdfc3RyKTsKLSAgZmFpbF91bmxlc3MgKHNlbnRfdGFncyAhPSBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgR1NUX0RFQlVHICgibWFpbmxvb3AgZG9uZSA6ICVwIiwgcmVjZWl2ZWRfdGFncyk7Ci0KLSAgLyogdmVyaWZ5IHRhZ3MgKi8KLSAgZmFpbF91bmxlc3MgKHJlY2VpdmVkX3RhZ3MgIT0gTlVMTCk7Ci0gIG5fcmVjdiA9IGdzdF90YWdfbGlzdF9uX3RhZ3MgKHJlY2VpdmVkX3RhZ3MpOwotICBuX3NlbnQgPSBnc3RfdGFnX2xpc3Rfbl90YWdzIChzZW50X3RhZ3MpOwotICBmYWlsX3VubGVzcyAobl9yZWN2ID49IG5fc2VudCk7Ci0gIC8qIEZJWE1FOiBjb21wYXJlIHRhZ2xpdHMgdmFsdWVzICovCi0gIGZvciAoaSA9IDA7IGkgPCBuX3NlbnQ7IGkrKykgewotICAgIG5hbWVfc2VudCA9IGdzdF90YWdfbGlzdF9udGhfdGFnX25hbWUgKHNlbnRfdGFncywgaSk7Ci0KLSAgICBmb3VuZCA9IEZBTFNFOwotICAgIGZvciAoaiA9IDA7IGogPCBuX3JlY3Y7IGorKykgewotICAgICAgbmFtZV9yZWN2ID0gZ3N0X3RhZ19saXN0X250aF90YWdfbmFtZSAocmVjZWl2ZWRfdGFncywgaik7Ci0KLSAgICAgIGlmICghc3RyY21wIChuYW1lX3NlbnQsIG5hbWVfcmVjdikpIHsKLSAgICAgICAgZ3VpbnQgc2VudF9sZW4sIHJlY3ZfbGVuOwotCi0gICAgICAgIHNlbnRfbGVuID0gZ3N0X3RhZ19saXN0X2dldF90YWdfc2l6ZSAoc2VudF90YWdzLCBuYW1lX3NlbnQpOwotICAgICAgICByZWN2X2xlbiA9IGdzdF90YWdfbGlzdF9nZXRfdGFnX3NpemUgKHJlY2VpdmVkX3RhZ3MsIG5hbWVfcmVjdik7Ci0KLSAgICAgICAgZmFpbF91bmxlc3MgKHNlbnRfbGVuID09IHJlY3ZfbGVuLAotICAgICAgICAgICAgInRhZyBpdGVtICVzIGhhcyBiZWVuIHJlY2VpdmVkIHdpdGggZGlmZmVyZW50IHNpemUiLCBuYW1lX3NlbnQpOwotCi0gICAgICAgIGZvciAoayA9IDA7IGsgPCBzZW50X2xlbjsgaysrKSB7Ci0gICAgICAgICAgdmFsdWVfc2VudCA9IGdzdF90YWdfbGlzdF9nZXRfdmFsdWVfaW5kZXggKHNlbnRfdGFncywgbmFtZV9zZW50LCBrKTsKLSAgICAgICAgICB2YWx1ZV9yZWN2ID0KLSAgICAgICAgICAgICAgZ3N0X3RhZ19saXN0X2dldF92YWx1ZV9pbmRleCAocmVjZWl2ZWRfdGFncywgbmFtZV9yZWN2LCBrKTsKLQotICAgICAgICAgIGNvbXBhcmlzb24gPSBnc3RfdmFsdWVfY29tcGFyZSAodmFsdWVfc2VudCwgdmFsdWVfcmVjdik7Ci0gICAgICAgICAgaWYgKGNvbXBhcmlzb24gIT0gR1NUX1ZBTFVFX0VRVUFMKSB7Ci0gICAgICAgICAgICBnY2hhciAqdnMgPSBnX3N0cmR1cF92YWx1ZV9jb250ZW50cyAodmFsdWVfc2VudCk7Ci0gICAgICAgICAgICBnY2hhciAqdnIgPSBnX3N0cmR1cF92YWx1ZV9jb250ZW50cyAodmFsdWVfcmVjdik7Ci0gICAgICAgICAgICBHU1RfREVCVUcgKCJzZW50ID0gJXM6JyVzJywgcmVjdiA9ICVzOiclcyciLAotICAgICAgICAgICAgICAgIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZV9zZW50KSwgdnMsCi0gICAgICAgICAgICAgICAgR19WQUxVRV9UWVBFX05BTUUgKHZhbHVlX3JlY3YpLCB2cik7Ci0gICAgICAgICAgICBnX2ZyZWUgKHZzKTsKLSAgICAgICAgICAgIGdfZnJlZSAodnIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBmYWlsX3VubGVzcyAoY29tcGFyaXNvbiA9PSBHU1RfVkFMVUVfRVFVQUwsCi0gICAgICAgICAgICAgICJ0YWcgaXRlbSAlcyBoYXMgYmVlbiByZWNlaXZlZCB3aXRoIGRpZmZlcmVudCB0eXBlIG9yIHZhbHVlIiwKLSAgICAgICAgICAgICAgbmFtZV9zZW50KTsKLSAgICAgICAgICBmb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZmFpbF91bmxlc3MgKGZvdW5kLCAidGFnIGl0ZW0gJXMgaXMgbG9zdCIsIG5hbWVfc2VudCk7Ci0gIH0KLQotICBnc3RfdGFnX2xpc3RfdW5yZWYgKHJlY2VpdmVkX3RhZ3MpOwotICByZWNlaXZlZF90YWdzID0gTlVMTDsKLSAgZ3N0X3RhZ19saXN0X3VucmVmIChzZW50X3RhZ3MpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdfb2JqZWN0X3VucmVmIChkZW11eCk7Ci0gIGdfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfc291cmNlX3JlbW92ZSAoYnVzX3dhdGNoKTsKLX0KLQotLyoKLSAqIFRlc3RzIGlmIHRoZSBtdXhlci9kZW11eGVyIHBhaXIgY2FuIHNlcmlhbGl6ZSB0aGUgdGFncyBpbiAndGFnX3N0cicKLSAqIHRvIGEgZmlsZSBhbmQgcmVjb3ZlciB0aGVtIGNvcnJlY3RseS4KLSAqCi0gKiAnY2FwcycgYXJlIHVzZWQgdG8gYXNzdXJlIHRoZSBtdXhlciBhY2NlcHRzIHRoZSBmYWtlIGJ1ZmZlciBmYWtlc3JjCi0gKiB3aWxsIHNlbmQgdG8gaXQuCi0gKi8KLXN0YXRpYyB2b2lkCi10ZXN0X3RhZ3MgKGNvbnN0IGdjaGFyICogdGFnX3N0ciwgY29uc3QgZ2NoYXIgKiBjYXBzLCBjb25zdCBnY2hhciAqIG11eGVyLAotICAgIGNvbnN0IGdjaGFyICogZGVtdXhlcikKLXsKLSAgZ2NoYXIgKnRtcGZpbGU7Ci0gIGdjaGFyICp0bXA7Ci0KLSAgdG1wID0gZ19zdHJkdXBfcHJpbnRmICgiJXMlZCIsICJnc3QtY2hlY2steG1wLXRlc3QtIiwgZ19yYW5kb21faW50ICgpKTsKLSAgdG1wZmlsZSA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksIHRtcCwgTlVMTCk7Ci0gIGdfZnJlZSAodG1wKTsKLQotICBHU1RfREVCVUcgKCJ0ZXN0aW5nIHRhZ3MgOiAlcyIsIHRhZ19zdHIpOwotICB0ZXN0X211eF90YWdzICh0YWdfc3RyLCBjYXBzLCBtdXhlciwgdG1wZmlsZSk7Ci0gIHRlc3RfZGVtdXhfdGFncyAodGFnX3N0ciwgZGVtdXhlciwgdG1wZmlsZSk7Ci0gIGdfZnJlZSAodG1wZmlsZSk7Ci19Ci0KLSNkZWZpbmUgSDI2NF9DQVBTICJ2aWRlby94LWgyNjQsIHdpZHRoPShpbnQpMzIwLCBoZWlnaHQ9KGludCkyNDAsIiBcCi0gICAgICAgICAgICAgICAgICAiIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMzAvMSwgY29kZWNfZGF0YT0oYnVmZmVyKSIgXAotICAgICAgICAgICAgICAgICAgIjAxNDAxNTkyZmZlMTAwMTc2NzRkNDAxNTkyNTQwYTBmZDgwODgwMDAwMDAzMDAiIFwKLSAgICAgICAgICAgICAgICAgICI4MDAwMDAxZTQ3OGIxNzUwMDEwMDA0NjhlZTNjODAsICJcCi0gICAgICAgICAgICAgICAgICAic3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2YywgYWxpZ25tZW50PShzdHJpbmcpYXUiCi0KLSNkZWZpbmUgQ09NTU9OX1RBR1MgXAotICAgICJ0YWdsaXN0LHRpdGxlPXRlc3RfdGl0bGUsIiAgICBcCi0gICAgImFydGlzdD10ZXN0X2FydGlzdCwiICAgICAgICAgIFwKLSAgICAia2V5d29yZHM9XCJrZXkxLGtleTJcIiwiICAgICAgXAotICAgICJkZXNjcmlwdGlvbj10ZXN0X2Rlc2MiCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2NvbW1vbl90YWdzKQotewotICBpZiAoIWdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKGdzdF9yZWdpc3RyeV9nZXQgKCksICJxdGRlbXV4IiwgMCwKLSAgICAgICAgICAxMCwgMjMpKSB7Ci0gICAgR1NUX0lORk8gKCJTa2lwcGluZyB0ZXN0LCBxdGRlbXV4IGVpdGhlciBub3QgYXZhaWxhYmxlIG9yIHRvbyBvbGQiKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgdGVzdF90YWdzIChDT01NT05fVEFHUywgSDI2NF9DQVBTLCAicXRtdXgiLCAicXRkZW11eCIpOwotICB0ZXN0X3RhZ3MgKENPTU1PTl9UQUdTLCBIMjY0X0NBUFMsICJtcDRtdXgiLCAicXRkZW11eCIpOwotICB0ZXN0X3RhZ3MgKENPTU1PTl9UQUdTLCBIMjY0X0NBUFMsICIzZ3BwbXV4IiwgInF0ZGVtdXgiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0jZGVmaW5lIEdFT19MT0NBVElPTl9UQUdTIFwKLSAgICAidGFnbGlzdCxnZW8tbG9jYXRpb24tY291bnRyeT1CcmF6aWwsIiAgICBcCi0gICAgICAiZ2VvLWxvY2F0aW9uLWNpdHk9XCJDYW1waW5hIEdyYW5kZVwiLCIgXAotICAgICAgImdlby1sb2NhdGlvbi1zdWJsb2NhdGlvbj1Cb2RvY29uZ28sIiAgIFwKLSAgICAgICJnZW8tbG9jYXRpb24tbGF0aXR1ZGU9LTEyLjEyNSwiICAgICAgICBcCi0gICAgICAiZ2VvLWxvY2F0aW9uLWxvbmdpdHVkZT01Ni43NSwiICAgICAgICAgXAotICAgICAgImdlby1sb2NhdGlvbi1lbGV2YXRpb249MzI3LjUiCi0KLUdTVF9TVEFSVF9URVNUICh0ZXN0X2dlb19sb2NhdGlvbl90YWdzKQotewotICBpZiAoIWdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKGdzdF9yZWdpc3RyeV9nZXQgKCksICJxdGRlbXV4IiwgMCwKLSAgICAgICAgICAxMCwgMjMpKSB7Ci0gICAgR1NUX0lORk8gKCJTa2lwcGluZyB0ZXN0LCBxdGRlbXV4IGVpdGhlciBub3QgYXZhaWxhYmxlIG9yIHRvbyBvbGQiKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgdGVzdF90YWdzIChHRU9fTE9DQVRJT05fVEFHUywgSDI2NF9DQVBTLCAicXRtdXgiLCAicXRkZW11eCIpOwotICB0ZXN0X3RhZ3MgKEdFT19MT0NBVElPTl9UQUdTLCBIMjY0X0NBUFMsICJtcDRtdXgiLCAicXRkZW11eCIpOwotICB0ZXN0X3RhZ3MgKEdFT19MT0NBVElPTl9UQUdTLCBIMjY0X0NBUFMsICIzZ3BwbXV4IiwgInF0ZGVtdXgiKTsKLX0KLQotR1NUX0VORF9URVNUOwotCi0KLSNkZWZpbmUgVVNFUl9UQUdTIFwKLSAgICAidGFnbGlzdCx1c2VyLXJhdGluZz0odWludCk4NSIKLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfdXNlcl90YWdzKQotewotICBpZiAoIWdzdF9yZWdpc3RyeV9jaGVja19mZWF0dXJlX3ZlcnNpb24gKGdzdF9yZWdpc3RyeV9nZXQgKCksICJxdGRlbXV4IiwgMCwKLSAgICAgICAgICAxMCwgMjMpKSB7Ci0gICAgR1NUX0lORk8gKCJTa2lwcGluZyB0ZXN0LCBxdGRlbXV4IGVpdGhlciBub3QgYXZhaWxhYmxlIG9yIHRvbyBvbGQiKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICB0ZXN0X3RhZ3MgKFVTRVJfVEFHUywgSDI2NF9DQVBTLCAicXRtdXgiLCAicXRkZW11eCIpOwotICB0ZXN0X3RhZ3MgKFVTRVJfVEFHUywgSDI2NF9DQVBTLCAibXA0bXV4IiwgInF0ZGVtdXgiKTsKLSAgdGVzdF90YWdzIChVU0VSX1RBR1MsIEgyNjRfQ0FQUywgIjNncHBtdXgiLCAicXRkZW11eCIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLXN0YXRpYyBTdWl0ZSAqCi1tZXRhZGF0YV9zdWl0ZSAodm9pZCkKLXsKLSAgU3VpdGUgKnMgPSBzdWl0ZV9jcmVhdGUgKCJ0YWdzY2hlY2tpbmciKTsKLQotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJnZW5lcmFsIik7Ci0KLSAgLyogdGltZSBvdXQgYWZ0ZXIgNjBzLCBub3QgdGhlIGRlZmF1bHQgMyAqLwotICB0Y2FzZV9zZXRfdGltZW91dCAodGNfY2hhaW4sIDYwKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2NvbW1vbl90YWdzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2dlb19sb2NhdGlvbl90YWdzKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X3VzZXJfdGFncyk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOIChtZXRhZGF0YSk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2ZW5jLmMgYi90ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2ZW5jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MDJlYTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdmVuYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIHVuaXQgdGVzdCBmb3Igd2F2ZW5jCi0gKgotICogQ29weXJpZ2h0IChDKSA8MjAxMD4gU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxnc3QvY2hlY2svZ3N0Y2hlY2suaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8tZW51bXR5cGVzLmg+Ci0KLXN0YXRpYyBnYm9vbGVhbgotYnVzX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdNYWluTG9vcCAqbG9vcCA9IChHTWFpbkxvb3AgKikgZGF0YTsKLQotICBzd2l0Y2ggKG1lc3NhZ2UtPnR5cGUpIHsKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgR0Vycm9yICpnZXJyb3I7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZ2Vycm9yLCAmZGVidWcpOwotICAgICAgZ3N0X29iamVjdF9kZWZhdWx0X2Vycm9yIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpLCBnZXJyb3IsIGRlYnVnKTsKLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgIGdfZXJyb3JfZnJlZSAoZ2Vycm9yKTsKLSAgICAgIGdfZnJlZSAoZGVidWcpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qCi0gKiBnc3QtbGF1bmNoLTEuMCBcCi0gKiBhdWRpb3Rlc3RzcmMgZnJlcT00NDAgbnVtLWJ1ZmZlcnM9MTAwICEgaW50ZXJsZWF2ZSBuYW1lPWkgISBhdWRpb2NvbnZlcnQgISB3YXZlbmMgISBmaWxlc2luayBsb2NhdGlvbj0vdG1wL21jLndhdiBcCi0gKiBhdWRpb3Rlc3RzcmMgZnJlcT04ODAgbnVtLWJ1ZmZlcnM9MTAwICEgaS4KLSAqIC4uLgotICoKLSAqIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2RldmljZS9hdWRpby9tdWx0aWNoYXVkLm1zcHgKLSAqLwotCi1zdGF0aWMgdm9pZAotbWFrZV9uX2NoYW5uZWxfd2F2IChjb25zdCBnaW50IGNoYW5uZWxzLCBjb25zdCBHVmFsdWVBcnJheSAqIGFycikKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKiphdWRpb3Rlc3RzcmMsICppbnRlcmxlYXZlLCAqd2F2ZW5jLCAqY29udiwgKmZha2VzaW5rOwotICBHc3RCdXMgKmJ1czsKLSAgR01haW5Mb29wICpsb29wOwotICBndWludCBpOwotICBndWludCBidXNfd2F0Y2ggPSAwOwotCi0gIGF1ZGlvdGVzdHNyYyA9IGdfbmV3MCAoR3N0RWxlbWVudCAqLCBjaGFubmVscyk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwpOwotCi0gIGludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpbnRlcmxlYXZlIiwgTlVMTCk7Ci0gIGZhaWxfdW5sZXNzIChpbnRlcmxlYXZlICE9IE5VTEwpOwotICBnX29iamVjdF9zZXQgKGludGVybGVhdmUsICJjaGFubmVsLXBvc2l0aW9ucyIsIGFyciwgTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGludGVybGVhdmUpOwotCi0gIGlmIChHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOKSB7Ci0gICAgLyogd2UncmUgbm90IGhlcmUgdG8gdGVzdCBvcmM7IGF1ZGlvY29udmVydCBtaXNiZWhhdmVzIG9uIHBwYzMyICovCi0gICAgZ19zZXRlbnYgKCJPUkNfQ09ERSIsICJiYWNrdXAiLCAxKTsKLSAgICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgTlVMTCk7Ci0gIH0gZWxzZSB7Ci0gICAgY29udiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgTlVMTCk7Ci0gIH0KLSAgZmFpbF91bmxlc3MgKGNvbnYgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGNvbnYpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoaW50ZXJsZWF2ZSwgY29udikpOwotCi0gIHdhdmVuYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIndhdmVuYyIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAod2F2ZW5jICE9IE5VTEwpOwotICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCB3YXZlbmMpOwotICBmYWlsX3VubGVzcyAoZ3N0X2VsZW1lbnRfbGluayAoY29udiwgd2F2ZW5jKSk7Ci0KLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsIE5VTEwpOwotICBmYWlsX3VubGVzcyAoZmFrZXNpbmsgIT0gTlVMTCk7Ci0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIGZha2VzaW5rKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmsgKHdhdmVuYywgZmFrZXNpbmspKTsKLQotICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbHM7IGkrKykgewotICAgIGF1ZGlvdGVzdHNyY1tpXSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsIE5VTEwpOwotICAgIGZhaWxfdW5sZXNzIChhdWRpb3Rlc3RzcmNbaV0gIT0gTlVMTCk7Ci0gICAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW90ZXN0c3JjW2ldKSwgIndhdmUiLCAwLCAiZnJlcSIsCi0gICAgICAgIDQ0MC4wICogKGkgKyAxKSwgIm51bS1idWZmZXJzIiwgMTAwLCBOVUxMKTsKLSAgICBnc3RfYmluX2FkZCAoR1NUX0JJTiAocGlwZWxpbmUpLCBhdWRpb3Rlc3RzcmNbaV0pOwotICAgIGZhaWxfdW5sZXNzIChnc3RfZWxlbWVudF9saW5rIChhdWRpb3Rlc3RzcmNbaV0sIGludGVybGVhdmUpKTsKLSAgfQotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIFRSVUUpOwotICBmYWlsX3VubGVzcyAobG9vcCAhPSBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIGZhaWxfdW5sZXNzIChidXMgIT0gTlVMTCk7Ci0gIGJ1c193YXRjaCA9IGdzdF9idXNfYWRkX3dhdGNoIChidXMsIGJ1c19oYW5kbGVyLCBsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfZnJlZSAoYXVkaW90ZXN0c3JjKTsKLQotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdfc291cmNlX3JlbW92ZSAoYnVzX3dhdGNoKTsKLX0KLQotR1NUX1NUQVJUX1RFU1QgKHRlc3RfZW5jb2RlX3N0ZXJlbykKLXsKLSAgR1ZhbHVlQXJyYXkgKmFycjsKLSAgR1ZhbHVlIHZhbCA9IHsgMCwgfTsKLQotICBhcnIgPSBnX3ZhbHVlX2FycmF5X25ldyAoMik7Ci0gIGdfdmFsdWVfaW5pdCAoJnZhbCwgR1NUX1RZUEVfQVVESU9fQ0hBTk5FTF9QT1NJVElPTik7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKCZ2YWwsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQpOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKCZ2YWwsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUKTsKLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFyciwgJnZhbCk7Ci0gIGdfdmFsdWVfdW5zZXQgKCZ2YWwpOwotCi0gIG1ha2Vfbl9jaGFubmVsX3dhdiAoMiwgYXJyKTsKLSAgZ192YWx1ZV9hcnJheV9mcmVlIChhcnIpOwotfQotCi1HU1RfRU5EX1RFU1Q7Ci0KLSNpZiAwCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbmNvZGVfbXVsdGljaGFubmVsKQotewotICBHVmFsdWVBcnJheSAqYXJyOwotICBHVmFsdWUgdmFsID0geyAwLCB9OwotCi0gIGFyciA9IGdfdmFsdWVfYXJyYXlfbmV3ICg2KTsKLSAgZ192YWx1ZV9pbml0ICgmdmFsLCBHU1RfVFlQRV9BVURJT19DSEFOTkVMX1BPU0lUSU9OKTsKLSAgZ192YWx1ZV9zZXRfZW51bSAoJnZhbCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVGVCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kIChhcnIsICZ2YWwpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgZ192YWx1ZV9zZXRfZW51bSAoJnZhbCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQpOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKCZ2YWwsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0NFTlRFUik7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kIChhcnIsICZ2YWwpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdmFsKTsKLSAgZ192YWx1ZV9zZXRfZW51bSAoJnZhbCwgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFKTsKLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKGFyciwgJnZhbCk7Ci0gIGdfdmFsdWVfcmVzZXQgKCZ2YWwpOwotICBnX3ZhbHVlX3NldF9lbnVtICgmdmFsLCBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQpOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdmFsKTsKLSAgZ192YWx1ZV9yZXNldCAoJnZhbCk7Ci0gIGdfdmFsdWVfc2V0X2VudW0gKCZ2YWwsIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQpOwotICBnX3ZhbHVlX2FycmF5X2FwcGVuZCAoYXJyLCAmdmFsKTsKLSAgZ192YWx1ZV91bnNldCAoJnZhbCk7Ci0KLSAgbWFrZV9uX2NoYW5uZWxfd2F2ICg2KTsKLX0KLQotR1NUX0VORF9URVNUOwotI2VuZGlmCi0KLXN0YXRpYyBTdWl0ZSAqCi13YXZlbmNfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgid2F2ZW5jIik7Ci0gIFRDYXNlICp0Y19jaGFpbiA9IHRjYXNlX2NyZWF0ZSAoImdlbmVyYWwiKTsKLQotICBzdWl0ZV9hZGRfdGNhc2UgKHMsIHRjX2NoYWluKTsKLSAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VuY29kZV9zdGVyZW8pOwotICAvKiBGSVhNRTogaW1wcm92ZSB3YXZlbmMKLSAgICAgdGNhc2VfYWRkX3Rlc3QgKHRjX2NoYWluLCB0ZXN0X2VuY29kZV9tdWx0aWNoYW5uZWwpOwotICAgKi8KLQotICByZXR1cm4gczsKLX0KLQotR1NUX0NIRUNLX01BSU4gKHdhdmVuYyk7CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2cGFjay5jIGIvdGVzdHMvY2hlY2svcGlwZWxpbmVzL3dhdnBhY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUwODdiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9jaGVjay9waXBlbGluZXMvd2F2cGFjay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA4IFNlYmFzdGlhbiBEcsO2Z2UgPHNsb21vQGNpcmN1bGFyLWNoYW9zLm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2NoZWNrL2dzdGNoZWNrLmg+Ci0jaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0YWRhcHRlci5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4KLWJ1c19oYW5kbGVyIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIGRhdGE7Ci0KLSAgc3dpdGNoIChtZXNzYWdlLT50eXBlKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklORzoKLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOnsKLSAgICAgIEdFcnJvciAqZ2Vycm9yOwotICAgICAgZ2NoYXIgKmRlYnVnOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmdlcnJvciwgJmRlYnVnKTsKLSAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7Ci0gICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICBnX2Vycm9yX2ZyZWUgKGdlcnJvcik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRUxFTUVOVDoKLSAgICB7Ci0gICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLQotICAgICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKTsKLQotICAgICAgZmFpbF91bmxlc3MgKHN0cmNtcCAobmFtZSwgImltcGVyZmVjdC10aW1lc3RhbXAiKSAhPSAwKTsKLSAgICAgIGZhaWxfdW5sZXNzIChzdHJjbXAgKG5hbWUsICJpbXBlcmZlY3Qtb2Zmc2V0IikgIT0gMCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBoYWRfZmlyc3RfYnVmZmVyID0gRkFMU0U7Ci0KLXN0YXRpYyB2b2lkCi1pZGVudGl0eV9oYW5kb2ZmIChHc3RFbGVtZW50ICogb2JqZWN0LCBHc3RCdWZmZXIgKiBidWZmZXIsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlciA9IEdTVF9BREFQVEVSICh1c2VyX2RhdGEpOwotCi0gIGdzdF9hZGFwdGVyX3B1c2ggKGFkYXB0ZXIsIGdzdF9idWZmZXJfcmVmIChidWZmZXIpKTsKLX0KLQotc3RhdGljIHZvaWQKLWZha2VzaW5rX2hhbmRvZmYgKEdzdEVsZW1lbnQgKiBvYmplY3QsIEdzdEJ1ZmZlciAqIGJ1ZmZlciwgR3N0UGFkICogcGFkLAotICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0QWRhcHRlciAqYWRhcHRlciA9IEdTVF9BREFQVEVSICh1c2VyX2RhdGEpOwotCi0gIC8qIERvbid0IGFsbG93IHRoZSBzZWNvbmQgYnVmZmVyIHdpdGggb2Zmc2V0PTAgYXMgaXQncyB0aGUgZGVjb2RlZAotICAgKiByZXdyaXRlIG9mIHRoZSBmaXJzdAotICAgKi8KLSAgaWYgKGhhZF9maXJzdF9idWZmZXIgPT0gRkFMU0UgJiYgR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPT0gMCkKLSAgICBoYWRfZmlyc3RfYnVmZmVyID0gVFJVRTsKLSAgZWxzZSBpZiAoR1NUX0JVRkZFUl9PRkZTRVQgKGJ1ZmZlcikgPT0gMCkKLSAgICByZXR1cm47Ci0KLSAgZ3N0X2FkYXB0ZXJfcHVzaCAoYWRhcHRlciwgZ3N0X2J1ZmZlcl9yZWYgKGJ1ZmZlcikpOwotfQotCi1HU1RfU1RBUlRfVEVTVCAodGVzdF9lbmNvZGVfZGVjb2RlKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0RWxlbWVudCAqYXVkaW90ZXN0c3JjLCAqaWRlbnRpdHkxLCAqd2F2cGFja2VuYywgKmlkZW50aXR5MiwgKndhdnBhY2tkZWMsCi0gICAgICAqaWRlbnRpdHkzLCAqZmFrZXNpbms7Ci0gIEdzdEFkYXB0ZXIgKnNyY2FkYXB0ZXIsICpzaW5rYWRhcHRlcjsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0QnVmZmVyICppbiwgKm91dDsKLSAgZ3VpbnQgYnVzX3dhdGNoID0gMDsKLSAgR3N0TWFwSW5mbyBtYXA7Ci0KLSAgc3JjYWRhcHRlciA9IGdzdF9hZGFwdGVyX25ldyAoKTsKLSAgZmFpbF91bmxlc3MgKHNyY2FkYXB0ZXIgIT0gTlVMTCk7Ci0gIHNpbmthZGFwdGVyID0gZ3N0X2FkYXB0ZXJfbmV3ICgpOwotICBmYWlsX3VubGVzcyAoc2lua2FkYXB0ZXIgIT0gTlVMTCk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgZmFpbF91bmxlc3MgKHBpcGVsaW5lICE9IE5VTEwpOwotCi0gIGF1ZGlvdGVzdHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsICJzcmMiKTsKLSAgZmFpbF91bmxlc3MgKGF1ZGlvdGVzdHNyYyAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoYXVkaW90ZXN0c3JjKSwgIndhdmUiLCAwLCAiZnJlcSIsIDQ0MC4wLAotICAgICAgIm51bS1idWZmZXJzIiwgMjAwLCBOVUxMKTsKLQotICBpZGVudGl0eTEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJpZGVudGl0eTEiKTsKLSAgZmFpbF91bmxlc3MgKGlkZW50aXR5MSAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoaWRlbnRpdHkxKSwgInNpZ25hbC1oYW5kb2ZmcyIsIFRSVUUsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoaWRlbnRpdHkxKSwgImhhbmRvZmYiLAotICAgICAgR19DQUxMQkFDSyAoaWRlbnRpdHlfaGFuZG9mZiksIHNyY2FkYXB0ZXIpOwotCi0gIHdhdnBhY2tlbmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ3YXZwYWNrZW5jIiwgImVuYyIpOwotICBmYWlsX3VubGVzcyAod2F2cGFja2VuYyAhPSBOVUxMKTsKLQotICBpZGVudGl0eTIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsICJpZGVudGl0eTIiKTsKLSAgZmFpbF91bmxlc3MgKGlkZW50aXR5MiAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoaWRlbnRpdHkyKSwgImNoZWNrLWltcGVyZmVjdC10aW1lc3RhbXAiLCBUUlVFLAotICAgICAgImNoZWNrLWltcGVyZmVjdC1vZmZzZXQiLCBUUlVFLCBOVUxMKTsKLQotICB3YXZwYWNrZGVjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgid2F2cGFja2RlYyIsICJkZWMiKTsKLSAgZmFpbF91bmxlc3MgKHdhdnBhY2tkZWMgIT0gTlVMTCk7Ci0KLSAgaWRlbnRpdHkzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCAiaWRlbnRpdHkzIik7Ci0gIGZhaWxfdW5sZXNzIChpZGVudGl0eTMgIT0gTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGlkZW50aXR5MyksICJjaGVjay1pbXBlcmZlY3QtdGltZXN0YW1wIiwgVFJVRSwKLSAgICAgICJjaGVjay1pbXBlcmZlY3Qtb2Zmc2V0IiwgVFJVRSwgTlVMTCk7Ci0KLSAgZmFrZXNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJmYWtlc2luayIsICJzaW5rIik7Ci0gIGZhaWxfdW5sZXNzIChmYWtlc2luayAhPSBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZmFrZXNpbmspLCAic2lnbmFsLWhhbmRvZmZzIiwgVFJVRSwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChmYWtlc2luayksICJoYW5kb2ZmIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGZha2VzaW5rX2hhbmRvZmYpLCBzaW5rYWRhcHRlcik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBhdWRpb3Rlc3RzcmMsIGlkZW50aXR5MSwgd2F2cGFja2VuYywKLSAgICAgIGlkZW50aXR5Miwgd2F2cGFja2RlYywgaWRlbnRpdHkzLCBmYWtlc2luaywgTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGdzdF9lbGVtZW50X2xpbmtfbWFueSAoYXVkaW90ZXN0c3JjLCBpZGVudGl0eTEsIHdhdnBhY2tlbmMsCi0gICAgICAgICAgaWRlbnRpdHkyLCB3YXZwYWNrZGVjLCBpZGVudGl0eTMsIGZha2VzaW5rLCBOVUxMKSk7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChsb29wICE9IE5VTEwpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKHBpcGVsaW5lKTsKLSAgZmFpbF91bmxlc3MgKGJ1cyAhPSBOVUxMKTsKLSAgYnVzX3dhdGNoID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgYnVzX2hhbmRsZXIsIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIGhhZF9maXJzdF9idWZmZXIgPSBGQUxTRTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3MgKGhhZF9maXJzdF9idWZmZXIgPT0gVFJVRSk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNyY2FkYXB0ZXIpID4gMCk7Ci0gIGZhaWxfdW5sZXNzIChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNpbmthZGFwdGVyKSA+IDApOwotICBmYWlsX3VubGVzc19lcXVhbHNfaW50IChnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNyY2FkYXB0ZXIpLAotICAgICAgZ3N0X2FkYXB0ZXJfYXZhaWxhYmxlIChzaW5rYWRhcHRlcikpOwotCi0gIGluID0gZ3N0X2FkYXB0ZXJfdGFrZV9idWZmZXIgKHNyY2FkYXB0ZXIsIGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoc3JjYWRhcHRlcikpOwotICBmYWlsX3VubGVzcyAoaW4gIT0gTlVMTCk7Ci0gIG91dCA9Ci0gICAgICBnc3RfYWRhcHRlcl90YWtlX2J1ZmZlciAoc2lua2FkYXB0ZXIsCi0gICAgICBnc3RfYWRhcHRlcl9hdmFpbGFibGUgKHNpbmthZGFwdGVyKSk7Ci0gIGZhaWxfdW5sZXNzIChvdXQgIT0gTlVMTCk7Ci0KLSAgZmFpbF91bmxlc3NfZXF1YWxzX2ludCAoZ3N0X2J1ZmZlcl9nZXRfc2l6ZSAoaW4pLCBnc3RfYnVmZmVyX2dldF9zaXplIChvdXQpKTsKLSAgZ3N0X2J1ZmZlcl9tYXAgKG91dCwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgZmFpbF91bmxlc3MgKGdzdF9idWZmZXJfbWVtY21wIChpbiwgMCwgbWFwLmRhdGEsIG1hcC5zaXplKSA9PSAwKTsKLSAgZ3N0X2J1ZmZlcl91bm1hcCAob3V0LCAmbWFwKTsKLQotICBnc3RfYnVmZmVyX3VucmVmIChpbik7Ci0gIGdzdF9idWZmZXJfdW5yZWYgKG91dCk7Ci0gIGdfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ19vYmplY3RfdW5yZWYgKHNyY2FkYXB0ZXIpOwotICBnX29iamVjdF91bnJlZiAoc2lua2FkYXB0ZXIpOwotICBnX3NvdXJjZV9yZW1vdmUgKGJ1c193YXRjaCk7Ci19Ci0KLUdTVF9FTkRfVEVTVDsKLQotc3RhdGljIFN1aXRlICoKLXdhdnBhY2tfc3VpdGUgKHZvaWQpCi17Ci0gIFN1aXRlICpzID0gc3VpdGVfY3JlYXRlICgiV2F2cGFjayIpOwotICBUQ2FzZSAqdGNfY2hhaW4gPSB0Y2FzZV9jcmVhdGUgKCJsaW5lYXIiKTsKLQotICAvKiB0aW1lIG91dCBhZnRlciA2MHMsIG5vdCB0aGUgZGVmYXVsdCAzICovCi0gIHRjYXNlX3NldF90aW1lb3V0ICh0Y19jaGFpbiwgNjApOwotCi0gIHN1aXRlX2FkZF90Y2FzZSAocywgdGNfY2hhaW4pOwotICB0Y2FzZV9hZGRfdGVzdCAodGNfY2hhaW4sIHRlc3RfZW5jb2RlX2RlY29kZSk7Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLUdTVF9DSEVDS19NQUlOICh3YXZwYWNrKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MTNhNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1pZiBVU0VfSkFDSwotSkFDS19ESVI9amFjawotZWxzZQotSkFDS19ESVI9Ci1lbmRpZgotCi1pZiBVU0VfQ0FJUk8KLUNBSVJPX0RJUj1jYWlybwotZWxzZQotQ0FJUk9fRElSPQotZW5kaWYKLQotU1VCRElSUyA9IGF1ZGlvZnggZXF1YWxpemVyICQoSkFDS19ESVIpIGxldmVsIHB1bHNlIFwKLQlydHAgc2hhcGV3aXBlIHNwZWN0cnVtIHY0bDIgJChDQUlST19ESVIpCi0KLURJU1RfU1VCRElSUyA9IGF1ZGlvZnggZXF1YWxpemVyIGphY2sgbGV2ZWwgcHVsc2UgXAotCXJ0cCBzaGFwZXdpcGUgc3BlY3RydW0gdjRsMiBjYWlybwotCi1pbmNsdWRlICQodG9wX3NyY2RpcikvY29tbW9uL3BhcmFsbGVsLXN1YmRpcnMubWFrCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDI2ZGIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODg2ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jIGluY2x1ZGUgdGhpcyBhdCB0aGUgZW5kIG9mICRNT0RVTEUvZXh0L01ha2VmaWxlLmFtIHRvIGZvcmNlIG1ha2UgdG8KLSMgYnVpbGQgc3ViZGlyZWN0b3JpZXMgaW4gcGFyYWxsZWwgd2hlbiBtYWtlIC1qTiBpcyB1c2VkLiBXZSB3aWxsIGVuZCB1cAotIyBkZXNjZW5kaW5nIGludG8gYWxsIHN1YmRpcmVjdG9yaWVzIGEgc2Vjb25kIHRpbWUsIGJ1dCBvbmx5IGFmdGVyIHRoZSBmaXJzdAotIyAocGFyYWxsZWwpIHJ1biBoYXMgZmluaXNoZWQsIHNvIGl0IHNob3VsZCBnbyByaWdodCB0aHJvdWdoIHRoZSBzZWNvbmQgdGltZS4KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLVNPVVJDRVMgPQotRElTVF9TT1VSQ0VTID0KLVJFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAotCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMgPSBtb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlCVwKLSAgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAotICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCi0gICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKLSAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKLQlkaXN0ZGlyCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1hbV9fcmVsYXRpdml6ZSA9IFwKLSAgZGlyMD1gcHdkYDsgXAotICBzZWRfZmlyc3Q9J3MsXlwoW14vXSpcKS8uKiQkLFwxLCc7IFwKLSAgc2VkX3Jlc3Q9J3MsXlteL10qLyosLCc7IFwKLSAgc2VkX2xhc3Q9J3MsXi4qL1woW14vXSpcKSQkLFwxLCc7IFwKLSAgc2VkX2J1dGxhc3Q9J3MsLypbXi9dKiQkLCwnOyBcCi0gIHdoaWxlIHRlc3QgLW4gIiQkZGlyMSI7IGRvIFwKLSAgICBmaXJzdD1gZWNobyAiJCRkaXIxIiB8IHNlZCAtZSAiJCRzZWRfZmlyc3QiYDsgXAotICAgIGlmIHRlc3QgIiQkZmlyc3QiICE9ICIuIjsgdGhlbiBcCi0gICAgICBpZiB0ZXN0ICIkJGZpcnN0IiA9ICIuLiI7IHRoZW4gXAotICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9sYXN0ImAvIiQkZGlyMiI7IFwKLSAgICAgICAgZGlyMD1gZWNobyAiJCRkaXIwIiB8IHNlZCAtZSAiJCRzZWRfYnV0bGFzdCJgOyBcCi0gICAgICBlbHNlIFwKLSAgICAgICAgZmlyc3QyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCi0gICAgICAgIGlmIHRlc3QgIiQkZmlyc3QyIiA9ICIkJGZpcnN0IjsgdGhlbiBcCi0gICAgICAgICAgZGlyMj1gZWNobyAiJCRkaXIyIiB8IHNlZCAtZSAiJCRzZWRfcmVzdCJgOyBcCi0gICAgICAgIGVsc2UgXAotICAgICAgICAgIGRpcjI9Ii4uLyQkZGlyMiI7IFwKLSAgICAgICAgZmk7IFwKLSAgICAgICAgZGlyMD0iJCRkaXIwIi8iJCRmaXJzdCI7IFwKLSAgICAgIGZpOyBcCi0gICAgZmk7IFwKLSAgICBkaXIxPWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKLSAgZG9uZTsgXAotICByZWxkaXI9IiQkZGlyMiIKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotQFVTRV9KQUNLX0ZBTFNFQEpBQ0tfRElSID0gCi1AVVNFX0pBQ0tfVFJVRUBKQUNLX0RJUiA9IGphY2sKLUBVU0VfQ0FJUk9fRkFMU0VAQ0FJUk9fRElSID0gCi1AVVNFX0NBSVJPX1RSVUVAQ0FJUk9fRElSID0gY2Fpcm8KLVNVQkRJUlMgPSBhdWRpb2Z4IGVxdWFsaXplciAkKEpBQ0tfRElSKSBsZXZlbCBwdWxzZSBcCi0JcnRwIHNoYXBld2lwZSBzcGVjdHJ1bSB2NGwyICQoQ0FJUk9fRElSKQotCi1ESVNUX1NVQkRJUlMgPSBhdWRpb2Z4IGVxdWFsaXplciBqYWNrIGxldmVsIHB1bHNlIFwKLQlydHAgc2hhcGV3aXBlIHNwZWN0cnVtIHY0bDIgY2Fpcm8KLQotYWxsOiBhbGwtcmVjdXJzaXZlCi0KLS5TVUZGSVhFUzoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotJCh0b3Bfc3JjZGlyKS9jb21tb24vcGFyYWxsZWwtc3ViZGlycy5tYWsgJChhbV9fZW1wdHkpOgotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLSMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCi0jIGludG8gdGhlbSBhbmQgcnVuICdtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KLSMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgJ21ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKLSMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwotIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKLSMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6Ci0JQGZhaWw9OyBcCi0JaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKLQkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAotCWVsc2UgXAotCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZpOyBcCi0JZG90X3NlZW49bm87IFwKLQl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCi0JY2FzZSAiJEAiIGluIFwKLQkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKLQkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKLQllc2FjOyBcCi0JZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCi0JICAgIGRvdF9zZWVuPXllczsgXAotCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAotCSAgZWxzZSBcCi0JICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCi0JICBmaTsgXAotCSAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAotCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKLQlkb25lOyBcCi0JaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCi0JZmk7IHRlc3QgLXogIiQkZmFpbCIKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtcmVjdXJzaXZlCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PS47IFwKLQllbHNlIFwKLQkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAotCSAgZW1wdHlfZml4PTsgXAotCWZpOyBcCi0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAotCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtcmVjdXJzaXZlCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUKLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLQlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCi0JICAgICQoYW1fX21ha2VfZHJ5cnVuKSBcCi0JICAgICAgfHwgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJHN1YmRpciIgXAotCSAgICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJChkaXN0ZGlyKS8kJHN1YmRpciI7IFwKLQkgICAgJChhbV9fcmVsYXRpdml6ZSk7IFwKLQkgICAgbmV3X2Rpc3RkaXI9JCRyZWxkaXI7IFwKLQkgICAgZGlyMT0kJHN1YmRpcjsgZGlyMj0iJCh0b3BfZGlzdGRpcikiOyBcCi0JICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCi0JICAgIG5ld190b3BfZGlzdGRpcj0kJHJlbGRpcjsgXAotCSAgICBlY2hvICIgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXFwiOyBcCi0JICAgIGVjaG8gIiAgICAgYW1fX3JlbW92ZV9kaXN0ZGlyPTogYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogYW1fX3NraXBfbW9kZV9maXg9OiBkaXN0ZGlyKSI7IFwKLQkgICAgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiBcCi0JICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAotCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkbmV3X3RvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJG5ld19kaXN0ZGlyIiBcCi0JCWFtX19yZW1vdmVfZGlzdGRpcj06IFwKLQkJYW1fX3NraXBfbGVuZ3RoX2NoZWNrPTogXAotCQlhbV9fc2tpcF9tb2RlX2ZpeD06IFwKLQkgICAgICAgIGRpc3RkaXIpIFwKLQkgICAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQotaW5zdGFsbGRpcnMtYW06Ci1pbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKLXVuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tcmVjdXJzaXZlCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLXJlY3Vyc2l2ZQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtcmVjdXJzaXZlCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tcmVjdXJzaXZlCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1yZWN1cnNpdmUKLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLXJlY3Vyc2l2ZQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1yZWN1cnNpdmUKLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtcmVjdXJzaXZlCi0KLXBkZi1hbToKLQotcHM6IHBzLXJlY3Vyc2l2ZQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgXAotCWNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKLQlwcyBwcy1hbSB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotLlBIT05ZOiBpbmRlcGVuZGVudC1zdWJkaXJzICQoU1VCRElSUykKLQotaW5kZXBlbmRlbnQtc3ViZGlyczogJChTVUJESVJTKQotCi0kKFNVQkRJUlMpOgotCSQoTUFLRSkgLUMgJEAKLQotYWxsLXJlY3Vyc2l2ZTogaW5kZXBlbmRlbnQtc3ViZGlycwotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNjNDJjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotbm9pbnN0X1BST0dSQU1TID0gZmlyZmlsdGVyLWV4YW1wbGUgaWlyZmlsdGVyLWV4YW1wbGUKLQotIyBGSVhNRSAwLjExOiBpZ25vcmUgR1ZhbHVlQXJyYXkgd2FybmluZ3MgZm9yIG5vdyB1bnRpbCB0aGlzIGlzIHNvcnRlZAotRVJST1JfQ0ZMQUdTPQotCi1maXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpCi1maXJmaWx0ZXJfZXhhbXBsZV9MREFERCA9ICQoR1NUX0xJQlMpICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGZmdC1AR1NUX0FQSV9WRVJTSU9OQCAkKExJQk0pCi0KLWlpcmZpbHRlcl9leGFtcGxlX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLWlpcmZpbHRlcl9leGFtcGxlX0xEQUREID0gJChHU1RfTElCUykgJChMSUJNKQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL2F1ZGlvZngvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMmMwYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg4NiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gZmlyZmlsdGVyLWV4YW1wbGUkKEVYRUVYVCkgXAotCWlpcmZpbHRlci1leGFtcGxlJChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9hdWRpb2Z4Ci1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotZmlyZmlsdGVyX2V4YW1wbGVfU09VUkNFUyA9IGZpcmZpbHRlci1leGFtcGxlLmMKLWZpcmZpbHRlcl9leGFtcGxlX09CSkVDVFMgPSAgXAotCWZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLiQoT0JKRVhUKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWZpcmZpbHRlcl9leGFtcGxlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotZmlyZmlsdGVyX2V4YW1wbGVfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGZpcmZpbHRlcl9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSBcCi0JLW8gJEAKLWlpcmZpbHRlcl9leGFtcGxlX1NPVVJDRVMgPSBpaXJmaWx0ZXItZXhhbXBsZS5jCi1paXJmaWx0ZXJfZXhhbXBsZV9PQkpFQ1RTID0gIFwKLQlpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS4kKE9CSkVYVCkKLWlpcmZpbHRlcl9leGFtcGxlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1paXJmaWx0ZXJfZXhhbXBsZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoaWlyZmlsdGVyX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9IGZpcmZpbHRlci1leGFtcGxlLmMgaWlyZmlsdGVyLWV4YW1wbGUuYwotRElTVF9TT1VSQ0VTID0gZmlyZmlsdGVyLWV4YW1wbGUuYyBpaXJmaWx0ZXItZXhhbXBsZS5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLQotIyBGSVhNRSAwLjExOiBpZ25vcmUgR1ZhbHVlQXJyYXkgd2FybmluZ3MgZm9yIG5vdyB1bnRpbCB0aGlzIGlzIHNvcnRlZAotRVJST1JfQ0ZMQUdTID0gCi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1maXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpCi1maXJmaWx0ZXJfZXhhbXBsZV9MREFERCA9ICQoR1NUX0xJQlMpICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGZmdC1AR1NUX0FQSV9WRVJTSU9OQCAkKExJQk0pCi1paXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpCi1paXJmaWx0ZXJfZXhhbXBsZV9MREFERCA9ICQoR1NUX0xJQlMpICQoTElCTSkKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2F1ZGlvZngvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1maXJmaWx0ZXItZXhhbXBsZSQoRVhFRVhUKTogJChmaXJmaWx0ZXJfZXhhbXBsZV9PQkpFQ1RTKSAkKGZpcmZpbHRlcl9leGFtcGxlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9maXJmaWx0ZXJfZXhhbXBsZV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBmaXJmaWx0ZXItZXhhbXBsZSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZmlyZmlsdGVyX2V4YW1wbGVfTElOSykgJChmaXJmaWx0ZXJfZXhhbXBsZV9PQkpFQ1RTKSAkKGZpcmZpbHRlcl9leGFtcGxlX0xEQUREKSAkKExJQlMpCi0KLWlpcmZpbHRlci1leGFtcGxlJChFWEVFWFQpOiAkKGlpcmZpbHRlcl9leGFtcGxlX09CSkVDVFMpICQoaWlyZmlsdGVyX2V4YW1wbGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2lpcmZpbHRlcl9leGFtcGxlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGlpcmZpbHRlci1leGFtcGxlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChpaXJmaWx0ZXJfZXhhbXBsZV9MSU5LKSAkKGlpcmZpbHRlcl9leGFtcGxlX09CSkVDVFMpICQoaWlyZmlsdGVyX2V4YW1wbGVfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9paXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1maXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vOiBmaXJmaWx0ZXItZXhhbXBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZmlyZmlsdGVyX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2ZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLlRwbyAtYyAtbyBmaXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vIGB0ZXN0IC1mICdmaXJmaWx0ZXItZXhhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXJmaWx0ZXItZXhhbXBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9maXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5UcG8gJChERVBESVIpL2ZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZmlyZmlsdGVyLWV4YW1wbGUuYycgb2JqZWN0PSdmaXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmaXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmaXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vIGB0ZXN0IC1mICdmaXJmaWx0ZXItZXhhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BmaXJmaWx0ZXItZXhhbXBsZS5jCi0KLWZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLm9iajogZmlyZmlsdGVyLWV4YW1wbGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGZpcmZpbHRlcl9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBmaXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2ZpcmZpbHRlcl9leGFtcGxlLWZpcmZpbHRlci1leGFtcGxlLlRwbyAtYyAtbyBmaXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vYmogYGlmIHRlc3QgLWYgJ2ZpcmZpbHRlci1leGFtcGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyZmlsdGVyLWV4YW1wbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyZmlsdGVyLWV4YW1wbGUuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZmlyZmlsdGVyX2V4YW1wbGUtZmlyZmlsdGVyLWV4YW1wbGUuVHBvICQoREVQRElSKS9maXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2ZpcmZpbHRlci1leGFtcGxlLmMnIG9iamVjdD0nZmlyZmlsdGVyX2V4YW1wbGUtZmlyZmlsdGVyLWV4YW1wbGUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChmaXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBmaXJmaWx0ZXJfZXhhbXBsZS1maXJmaWx0ZXItZXhhbXBsZS5vYmogYGlmIHRlc3QgLWYgJ2ZpcmZpbHRlci1leGFtcGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZmlyZmlsdGVyLWV4YW1wbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZmlyZmlsdGVyLWV4YW1wbGUuYyc7IGZpYAotCi1paXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vOiBpaXJmaWx0ZXItZXhhbXBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoaWlyZmlsdGVyX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGlpcmZpbHRlcl9leGFtcGxlLWlpcmZpbHRlci1leGFtcGxlLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2lpcmZpbHRlcl9leGFtcGxlLWlpcmZpbHRlci1leGFtcGxlLlRwbyAtYyAtbyBpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vIGB0ZXN0IC1mICdpaXJmaWx0ZXItZXhhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpaXJmaWx0ZXItZXhhbXBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9paXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5UcG8gJChERVBESVIpL2lpcmZpbHRlcl9leGFtcGxlLWlpcmZpbHRlci1leGFtcGxlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0naWlyZmlsdGVyLWV4YW1wbGUuYycgb2JqZWN0PSdpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChpaXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vIGB0ZXN0IC1mICdpaXJmaWx0ZXItZXhhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BpaXJmaWx0ZXItZXhhbXBsZS5jCi0KLWlpcmZpbHRlcl9leGFtcGxlLWlpcmZpbHRlci1leGFtcGxlLm9iajogaWlyZmlsdGVyLWV4YW1wbGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGlpcmZpbHRlcl9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2lpcmZpbHRlcl9leGFtcGxlLWlpcmZpbHRlci1leGFtcGxlLlRwbyAtYyAtbyBpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vYmogYGlmIHRlc3QgLWYgJ2lpcmZpbHRlci1leGFtcGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaWlyZmlsdGVyLWV4YW1wbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaWlyZmlsdGVyLWV4YW1wbGUuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvaWlyZmlsdGVyX2V4YW1wbGUtaWlyZmlsdGVyLWV4YW1wbGUuVHBvICQoREVQRElSKS9paXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2lpcmZpbHRlci1leGFtcGxlLmMnIG9iamVjdD0naWlyZmlsdGVyX2V4YW1wbGUtaWlyZmlsdGVyLWV4YW1wbGUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChpaXJmaWx0ZXJfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBpaXJmaWx0ZXJfZXhhbXBsZS1paXJmaWx0ZXItZXhhbXBsZS5vYmogYGlmIHRlc3QgLWYgJ2lpcmZpbHRlci1leGFtcGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnaWlyZmlsdGVyLWV4YW1wbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvaWlyZmlsdGVyLWV4YW1wbGUuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L2ZpcmZpbHRlci1leGFtcGxlLmMgYi90ZXN0cy9leGFtcGxlcy9hdWRpb2Z4L2ZpcmZpbHRlci1leGFtcGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYTZjZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9maXJmaWx0ZXItZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFNlYmFzdGlhbiBEcm9lZ2UgPHNlYmFzdGlhbi5kcm9lZ2VAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIFRoaXMgc21hbGwgc2FtcGxlIGFwcGxpY2F0aW9uIGNyZWF0ZXMgYSBiYW5kcGFzcyBGSVIgZmlsdGVyCi0gKiBieSB0cmFuc2Zvcm1pbmcgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSB0byB0aGUgZmlsdGVyIGtlcm5lbC4KLSAqLwotCi0vKiBGSVhNRSAwLjExOiBzdXBwcmVzcyB3YXJuaW5ncyBmb3IgZGVwcmVjYXRlZCBBUEkgc3VjaCBhcyBHVmFsdWVBcnJheQotICogd2l0aCBuZXdlciBHTGliIHZlcnNpb25zICg+PSAyLjMxLjApICovCi0jZGVmaW5lIEdMSUJfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9mZnQvZ3N0ZmZ0ZjY0Lmg+Ci0KLXN0YXRpYyBnYm9vbGVhbgotb25fbWVzc2FnZSAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIHVzZXJfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgIGdfZXJyb3IgKCJHb3QgRVJST1IiKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgICAgZ193YXJuaW5nICgiR290IFdBUk5JTkciKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotb25fcmF0ZV9jaGFuZ2VkIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ2ludCByYXRlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdWYWx1ZUFycmF5ICp2YTsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIEdzdEZGVEY2NCAqZmZ0OwotICBHc3RGRlRGNjRDb21wbGV4IGZyZXF1ZW5jeV9yZXNwb25zZVsxN107Ci0gIGdkb3VibGUgdG1wWzMyXTsKLSAgZ2RvdWJsZSBmaWx0ZXJfa2VybmVsWzMyXTsKLSAgZ3VpbnQgaTsKLQotICAvKiBDcmVhdGUgdGhlIGZyZXF1ZW5jeSByZXNwb25zZTogemVybyBvdXRzaWRlCi0gICAqIGEgc21hbGwgZnJlcXVlbmN5IGJhbmQgKi8KLSAgZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKLSAgICBpZiAoaSA8IDUgfHwgaSA+IDExKQotICAgICAgZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLnIgPSAwLjA7Ci0gICAgZWxzZQotICAgICAgZnJlcXVlbmN5X3Jlc3BvbnNlW2ldLnIgPSAxLjA7Ci0KLSAgICBmcmVxdWVuY3lfcmVzcG9uc2VbaV0uaSA9IDAuMDsKLSAgfQotCi0gIC8qIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBGVCBvZiB0aGUgZnJlcXVlbmN5IHJlc3BvbnNlICovCi0gIGZmdCA9IGdzdF9mZnRfZjY0X25ldyAoMzIsIFRSVUUpOwotICBnc3RfZmZ0X2Y2NF9pbnZlcnNlX2ZmdCAoZmZ0LCBmcmVxdWVuY3lfcmVzcG9uc2UsIHRtcCk7Ci0gIGdzdF9mZnRfZjY0X2ZyZWUgKGZmdCk7Ci0KLSAgLyogU2hpZnQgdGhlIGludmVyc2UgRlQgb2YgdGhlIGZyZXF1ZW5jeSByZXNwb25zZSBieSAxNiwKLSAgICogaS5lLiB0aGUgaGFsZiBvZiB0aGUga2VybmVsIGxlbmd0aCB0byBnZXQgdGhlCi0gICAqIGltcHVsc2UgcmVzcG9uc2UuIFNlZSBodHRwOi8vd3d3LmRzcGd1aWRlLmNvbS9jaDE3LzEuaHRtCi0gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgKi8KLSAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0gICAgZmlsdGVyX2tlcm5lbFtpXSA9IHRtcFsoaSArIDE2KSAlIDMyXTsKLQotICAvKiBBcHBseSB0aGUgaGFtbWluZyB3aW5kb3cgdG8gdGhlIGltcHVsc2UgcmVzcG9uc2UgdG8gZ2V0Ci0gICAqIGEgYmV0dGVyIHJlc3VsdCB0aGFuIGdpdmVuIGZyb20gdGhlIHJlY3Rhbmd1bGFyIHdpbmRvdwotICAgKi8KLSAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCi0gICAgZmlsdGVyX2tlcm5lbFtpXSAqPSAoMC41NCAtIDAuNDYgKiBjb3MgKDIgKiBHX1BJICogaSAvIDMyKSk7Ci0KLSAgdmEgPSBnX3ZhbHVlX2FycmF5X25ldyAoMSk7Ci0KLSAgZ192YWx1ZV9pbml0ICgmdiwgR19UWVBFX0RPVUJMRSk7Ci0gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0gICAgZ192YWx1ZV9zZXRfZG91YmxlICgmdiwgZmlsdGVyX2tlcm5lbFtpXSk7Ci0gICAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKHZhLCAmdik7Ci0gICAgZ192YWx1ZV9yZXNldCAoJnYpOwotICB9Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGVsZW1lbnQpLCAia2VybmVsIiwgdmEsIE5VTEwpOwotICAvKiBMYXRlbmN5IGlzIDEvMiBvZiB0aGUga2VybmVsIGxlbmd0aCBmb3IgdGhpcyBtZXRob2Qgb2YKLSAgICogY2FsY3VsYXRpbmcgYSBmaWx0ZXIga2VybmVsIGZyb20gdGhlIGZyZXF1ZW5jeSByZXNwb25zZQotICAgKi8KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJsYXRlbmN5IiwgKGdpbnQ2NCkgKDMyIC8gMiksIE5VTEwpOwotICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHZhKTsKLX0KLQotZ2ludAotbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqIGFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpmaWx0ZXIsICpjb252LCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLQotICBnc3RfaW5pdCAoTlVMTCwgTlVMTCk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwaXBlbGluZSIsIE5VTEwpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAid2F2ZSIsIDUsIE5VTEwpOwotCi0gIGZpbHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvZmlyZmlsdGVyIiwgTlVMTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChmaWx0ZXIpLCAicmF0ZS1jaGFuZ2VkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKG9uX3JhdGVfY2hhbmdlZCksIE5VTEwpOwotCi0gIGNvbnYgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXV0b2F1ZGlvc2luayIsIE5VTEwpOwotICBnX3JldHVybl92YWxfaWZfZmFpbCAoc2luayAhPSBOVUxMLCAtMSk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGZpbHRlciwgY29udiwgc2luaywgTlVMTCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIGZpbHRlciwgY29udiwgc2luaywgTlVMTCkpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudHMiKTsKLSAgICByZXR1cm4gLTI7Ci0gIH0KLQotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChvbl9tZXNzYWdlKSwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1cykpOwotCi0gIGlmIChnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLAotICAgICAgICAgIEdTVF9TVEFURV9QTEFZSU5HKSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGdvIGludG8gUExBWUlORyBzdGF0ZSIpOwotICAgIHJldHVybiAtMzsKLSAgfQotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9paXJmaWx0ZXItZXhhbXBsZS5jIGIvdGVzdHMvZXhhbXBsZXMvYXVkaW9meC9paXJmaWx0ZXItZXhhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzU1M2Y5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2F1ZGlvZngvaWlyZmlsdGVyLWV4YW1wbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHJvZWdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0vKiBUaGlzIHNtYWxsIHNhbXBsZSBhcHBsaWNhdGlvbiBjcmVhdGVzIGEgbG93cGFzcyBJSVIgZmlsdGVyCi0gKiBhbmQgYXBwbGllcyBpdCB0byB3aGl0ZSBub2lzZS4KLSAqIFNlZSBodHRwOi8vd3d3LmRzcGd1aWRlLmNvbS9jaDE5LzIuaHRtIGZvciBhIGRlc2NyaXB0aW9uCi0gKiBvZiB0aGUgSUlSIGZpbHRlciB0aGF0IGlzIHVzZWQuCi0gKi8KLQotLyogRklYTUUgMC4xMTogc3VwcHJlc3Mgd2FybmluZ3MgZm9yIGRlcHJlY2F0ZWQgQVBJIHN1Y2ggYXMgR1ZhbHVlQXJyYXkKLSAqIHdpdGggbmV3ZXIgR0xpYiB2ZXJzaW9ucyAoPj0gMi4zMS4wKSAqLwotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotLyogQ3V0b2ZmIG9mIDQwMDAgSHogKi8KLSNkZWZpbmUgQ1VUT0ZGICg0MDAwLjApCi0KLXN0YXRpYyBnYm9vbGVhbgotb25fbWVzc2FnZSAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIHVzZXJfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgIGdfZXJyb3IgKCJHb3QgRVJST1IiKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgICAgZ193YXJuaW5nICgiR290IFdBUk5JTkciKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZAotb25fcmF0ZV9jaGFuZ2VkIChHc3RFbGVtZW50ICogZWxlbWVudCwgZ2ludCByYXRlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdWYWx1ZUFycmF5ICp2YTsKLSAgR1ZhbHVlIHYgPSB7IDAsIH07Ci0gIGdkb3VibGUgeDsKLQotICBpZiAocmF0ZSAvIDIuMCA+IENVVE9GRikKLSAgICB4ID0gZXhwICgtMi4wICogR19QSSAqIChDVVRPRkYgLyByYXRlKSk7Ci0gIGVsc2UKLSAgICB4ID0gMC4wOwotCi0gIHZhID0gZ192YWx1ZV9hcnJheV9uZXcgKDEpOwotCi0gIGdfdmFsdWVfaW5pdCAoJnYsIEdfVFlQRV9ET1VCTEUpOwotICBnX3ZhbHVlX3NldF9kb3VibGUgKCZ2LCAxLjAgLSB4KTsKLSAgZ192YWx1ZV9hcnJheV9hcHBlbmQgKHZhLCAmdik7Ci0gIGdfdmFsdWVfcmVzZXQgKCZ2KTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoZWxlbWVudCksICJhIiwgdmEsIE5VTEwpOwotICBnX3ZhbHVlX2FycmF5X2ZyZWUgKHZhKTsKLQotICB2YSA9IGdfdmFsdWVfYXJyYXlfbmV3ICgxKTsKLSAgZ192YWx1ZV9zZXRfZG91YmxlICgmdiwgeCk7Ci0gIGdfdmFsdWVfYXJyYXlfYXBwZW5kICh2YSwgJnYpOwotICBnX3ZhbHVlX3Jlc2V0ICgmdik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGVsZW1lbnQpLCAiYiIsIHZhLCBOVUxMKTsKLSAgZ192YWx1ZV9hcnJheV9mcmVlICh2YSk7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiBhcmd2W10pCi17Ci0gIEdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc3JjLCAqZmlsdGVyLCAqY29udiwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0KLSAgZ3N0X2luaXQgKE5VTEwsIE5VTEwpOwotCi0gIHBpcGVsaW5lID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicGlwZWxpbmUiLCBOVUxMKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Rlc3RzcmMiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgIndhdmUiLCA1LCBOVUxMKTsKLQotICBmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2lpcmZpbHRlciIsIE5VTEwpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoZmlsdGVyKSwgInJhdGUtY2hhbmdlZCIsCi0gICAgICBHX0NBTExCQUNLIChvbl9yYXRlX2NoYW5nZWQpLCBOVUxMKTsKLQotICBjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgTlVMTCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCBOVUxMKTsKLSAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNpbmsgIT0gTlVMTCwgLTEpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBmaWx0ZXIsIGNvbnYsIHNpbmssIE5VTEwpOwotICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBmaWx0ZXIsIGNvbnYsIHNpbmssIE5VTEwpKSB7Ci0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIGVsZW1lbnRzIik7Ci0gICAgcmV0dXJuIC0yOwotICB9Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlIiwgR19DQUxMQkFDSyAob25fbWVzc2FnZSksIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLQotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBnbyBpbnRvIFBMQVlJTkcgc3RhdGUiKTsKLSAgICByZXR1cm4gLTM7Ci0gIH0KLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODMzY2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IGNhaXJvX292ZXJsYXkKLQotY2Fpcm9fb3ZlcmxheV9TT1VSQ0VTID0gY2Fpcm9fb3ZlcmxheS5jCi1jYWlyb19vdmVybGF5X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChDQUlST19DRkxBR1MpCi1jYWlyb19vdmVybGF5X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pICQoR1NUX0xJQlMpICQoQ0FJUk9fTElCUykKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2NhaXJvL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOWQ4OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvY2Fpcm8vTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NTIgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IGNhaXJvX292ZXJsYXkkKEVYRUVYVCkKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzL2NhaXJvCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fY2Fpcm9fb3ZlcmxheV9PQkpFQ1RTID0gY2Fpcm9fb3ZlcmxheS1jYWlyb19vdmVybGF5LiQoT0JKRVhUKQotY2Fpcm9fb3ZlcmxheV9PQkpFQ1RTID0gJChhbV9jYWlyb19vdmVybGF5X09CSkVDVFMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotY2Fpcm9fb3ZlcmxheV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWNhaXJvX292ZXJsYXlfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoY2Fpcm9fb3ZlcmxheV9DRkxBR1MpIFwKLQkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChjYWlyb19vdmVybGF5X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGNhaXJvX292ZXJsYXlfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1hbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQotIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAotIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCi0jICpub3QqIHByZXNlcnZlZC4KLWFtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAotICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCi0gIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0gIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAotJwotIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAotIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCi0jIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgotYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKLSAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLSAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLSAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKLUVUQUdTID0gZXRhZ3MKLUNUQUdTID0gY3RhZ3MKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLURJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCi1BQUxJQl9DRkxBR1MgPSBAQUFMSUJfQ0ZMQUdTQAotQUFMSUJfQ09ORklHID0gQEFBTElCX0NPTkZJR0AKLUFBTElCX0xJQlMgPSBAQUFMSUJfTElCU0AKLUFDTE9DQUwgPSBAQUNMT0NBTEAKLUFDTE9DQUxfQU1GTEFHUyA9IEBBQ0xPQ0FMX0FNRkxBR1NACi1BTVRBUiA9IEBBTVRBUkAKLUFNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAotQVIgPSBAQVJACi1BUyA9IEBBU0AKLUFVVE9DT05GID0gQEFVVE9DT05GQAotQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAotQVVUT01BS0UgPSBAQVVUT01BS0VACi1BV0sgPSBAQVdLQAotQloyX0xJQlMgPSBAQloyX0xJQlNACi1DQUlST19DRkxBR1MgPSBAQ0FJUk9fQ0ZMQUdTQAotQ0FJUk9fTElCUyA9IEBDQUlST19MSUJTQAotQ0MgPSBAQ0NACi1DQ0FTID0gQENDQVNACi1DQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKLUNDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACi1DQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAotQ0ZMQUdTID0gQENGTEFHU0AKLUNQUCA9IEBDUFBACi1DUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGQVVMVF9BVURJT1NJTksgPSBAREVGQVVMVF9BVURJT1NJTktACi1ERUZBVUxUX0FVRElPU1JDID0gQERFRkFVTFRfQVVESU9TUkNACi1ERUZBVUxUX1ZJREVPU0lOSyA9IEBERUZBVUxUX1ZJREVPU0lOS0AKLURFRkFVTFRfVklERU9TUkMgPSBAREVGQVVMVF9WSURFT1NSQ0AKLURFRkFVTFRfVklTVUFMSVpFUiA9IEBERUZBVUxUX1ZJU1VBTElaRVJACi1ERUZTID0gQERFRlNACi1ERVBESVIgPSBAREVQRElSQAotREVQUkVDQVRFRF9DRkxBR1MgPSBAREVQUkVDQVRFRF9DRkxBR1NACi1ESVJFQ1RTT1VORF9DRkxBR1MgPSBARElSRUNUU09VTkRfQ0ZMQUdTQAotRElSRUNUU09VTkRfTERGTEFHUyA9IEBESVJFQ1RTT1VORF9MREZMQUdTQAotRElSRUNUU09VTkRfTElCUyA9IEBESVJFQ1RTT1VORF9MSUJTQAotRExMVE9PTCA9IEBETExUT09MQAotRFNZTVVUSUwgPSBARFNZTVVUSUxACi1EVU1QQklOID0gQERVTVBCSU5ACi1EVjEzOTRfQ0ZMQUdTID0gQERWMTM5NF9DRkxBR1NACi1EVjEzOTRfTElCUyA9IEBEVjEzOTRfTElCU0AKLUVDSE9fQyA9IEBFQ0hPX0NACi1FQ0hPX04gPSBARUNIT19OQAotRUNIT19UID0gQEVDSE9fVEAKLUVHUkVQID0gQEVHUkVQQAotRVJST1JfQ0ZMQUdTID0gQEVSUk9SX0NGTEFHU0AKLUVSUk9SX0NYWEZMQUdTID0gQEVSUk9SX0NYWEZMQUdTQAotRVJST1JfT0JKQ0ZMQUdTID0gQEVSUk9SX09CSkNGTEFHU0AKLUVYRUVYVCA9IEBFWEVFWFRACi1GRkxBR1MgPSBARkZMQUdTQAotRkdSRVAgPSBARkdSRVBACi1GTEFDX0NGTEFHUyA9IEBGTEFDX0NGTEFHU0AKLUZMQUNfTElCUyA9IEBGTEFDX0xJQlNACi1HQ09WID0gQEdDT1ZACi1HQ09WX0NGTEFHUyA9IEBHQ09WX0NGTEFHU0AKLUdDT1ZfTElCUyA9IEBHQ09WX0xJQlNACi1HREtfUElYQlVGX0NGTEFHUyA9IEBHREtfUElYQlVGX0NGTEFHU0AKLUdES19QSVhCVUZfTElCUyA9IEBHREtfUElYQlVGX0xJQlNACi1HRVRURVhUX01BQ1JPX1ZFUlNJT04gPSBAR0VUVEVYVF9NQUNST19WRVJTSU9OQAotR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAKLUdJT19DRkxBR1MgPSBAR0lPX0NGTEFHU0AKLUdJT19MREZMQUdTID0gQEdJT19MREZMQUdTQAotR0lPX0xJQlMgPSBAR0lPX0xJQlNACi1HTElCX0NGTEFHUyA9IEBHTElCX0NGTEFHU0AKLUdMSUJfRVhUUkFfQ0ZMQUdTID0gQEdMSUJfRVhUUkFfQ0ZMQUdTQAotR0xJQl9HRU5NQVJTSEFMID0gQEdMSUJfR0VOTUFSU0hBTEAKLUdMSUJfTElCUyA9IEBHTElCX0xJQlNACi1HTElCX01LRU5VTVMgPSBAR0xJQl9NS0VOVU1TQAotR0xJQl9QUkVGSVggPSBAR0xJQl9QUkVGSVhACi1HTElCX1JFUSA9IEBHTElCX1JFUUAKLUdNU0dGTVQgPSBAR01TR0ZNVEAKLUdNU0dGTVRfMDE1ID0gQEdNU0dGTVRfMDE1QAotR1JFUCA9IEBHUkVQQAotR1NUUEJfUExVR0lOU19ESVIgPSBAR1NUUEJfUExVR0lOU19ESVJACi1HU1RQQl9QUkVGSVggPSBAR1NUUEJfUFJFRklYQAotR1NUX0FHRSA9IEBHU1RfQUdFQAotR1NUX0FMTF9MREZMQUdTID0gQEdTVF9BTExfTERGTEFHU0AKLUdTVF9BUElfVkVSU0lPTiA9IEBHU1RfQVBJX1ZFUlNJT05ACi1HU1RfQkFTRV9DRkxBR1MgPSBAR1NUX0JBU0VfQ0ZMQUdTQAotR1NUX0JBU0VfTElCUyA9IEBHU1RfQkFTRV9MSUJTQAotR1NUX0NGTEFHUyA9IEBHU1RfQ0ZMQUdTQAotR1NUX0NIRUNLX0NGTEFHUyA9IEBHU1RfQ0hFQ0tfQ0ZMQUdTQAotR1NUX0NIRUNLX0xJQlMgPSBAR1NUX0NIRUNLX0xJQlNACi1HU1RfQ09OVFJPTExFUl9DRkxBR1MgPSBAR1NUX0NPTlRST0xMRVJfQ0ZMQUdTQAotR1NUX0NPTlRST0xMRVJfTElCUyA9IEBHU1RfQ09OVFJPTExFUl9MSUJTQAotR1NUX0NVUlJFTlQgPSBAR1NUX0NVUlJFTlRACi1HU1RfQ1hYRkxBR1MgPSBAR1NUX0NYWEZMQUdTQAotR1NUX0xFVkVMX0RFRkFVTFQgPSBAR1NUX0xFVkVMX0RFRkFVTFRACi1HU1RfTElCUyA9IEBHU1RfTElCU0AKLUdTVF9MSUJWRVJTSU9OID0gQEdTVF9MSUJWRVJTSU9OQAotR1NUX0xJQ0VOU0UgPSBAR1NUX0xJQ0VOU0VACi1HU1RfTFRfTERGTEFHUyA9IEBHU1RfTFRfTERGTEFHU0AKLUdTVF9ORVRfQ0ZMQUdTID0gQEdTVF9ORVRfQ0ZMQUdTQAotR1NUX05FVF9MSUJTID0gQEdTVF9ORVRfTElCU0AKLUdTVF9PQkpDRkxBR1MgPSBAR1NUX09CSkNGTEFHU0AKLUdTVF9PUFRJT05fQ0ZMQUdTID0gQEdTVF9PUFRJT05fQ0ZMQUdTQAotR1NUX09QVElPTl9DWFhGTEFHUyA9IEBHU1RfT1BUSU9OX0NYWEZMQUdTQAotR1NUX09QVElPTl9PQkpDRkxBR1MgPSBAR1NUX09QVElPTl9PQkpDRkxBR1NACi1HU1RfUEFDS0FHRV9OQU1FID0gQEdTVF9QQUNLQUdFX05BTUVACi1HU1RfUEFDS0FHRV9PUklHSU4gPSBAR1NUX1BBQ0tBR0VfT1JJR0lOQAotR1NUX1BLR19DT05GSUdfUEFUSCA9IEBHU1RfUEtHX0NPTkZJR19QQVRIQAotR1NUX1BMVUdJTlNfQUxMID0gQEdTVF9QTFVHSU5TX0FMTEAKLUdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTID0gQEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTQAotR1NUX1BMVUdJTlNfQkFTRV9ESVIgPSBAR1NUX1BMVUdJTlNfQkFTRV9ESVJACi1HU1RfUExVR0lOU19CQVNFX0xJQlMgPSBAR1NUX1BMVUdJTlNfQkFTRV9MSUJTQAotR1NUX1BMVUdJTlNfRElSID0gQEdTVF9QTFVHSU5TX0RJUkAKLUdTVF9QTFVHSU5TX05PTlBPUlRFRCA9IEBHU1RfUExVR0lOU19OT05QT1JURURACi1HU1RfUExVR0lOU19TRUxFQ1RFRCA9IEBHU1RfUExVR0lOU19TRUxFQ1RFREAKLUdTVF9QTFVHSU5fTERGTEFHUyA9IEBHU1RfUExVR0lOX0xERkxBR1NACi1HU1RfUExVR0lOX0xJQlRPT0xGTEFHUyA9IEBHU1RfUExVR0lOX0xJQlRPT0xGTEFHU0AKLUdTVF9QUkVGSVggPSBAR1NUX1BSRUZJWEAKLUdTVF9SRVZJU0lPTiA9IEBHU1RfUkVWSVNJT05ACi1HU1RfVE9PTFNfRElSID0gQEdTVF9UT09MU19ESVJACi1HVEtET0NfQ0hFQ0sgPSBAR1RLRE9DX0NIRUNLQAotR1RLRE9DX0RFUFNfQ0ZMQUdTID0gQEdUS0RPQ19ERVBTX0NGTEFHU0AKLUdUS0RPQ19ERVBTX0xJQlMgPSBAR1RLRE9DX0RFUFNfTElCU0AKLUdUS0RPQ19NS1BERiA9IEBHVEtET0NfTUtQREZACi1HVEtET0NfUkVCQVNFID0gQEdUS0RPQ19SRUJBU0VACi1HVEtfQ0ZMQUdTID0gQEdUS19DRkxBR1NACi1HVEtfTElCUyA9IEBHVEtfTElCU0AKLUdUS19YMTFfQ0ZMQUdTID0gQEdUS19YMTFfQ0ZMQUdTQAotR1RLX1gxMV9MSUJTID0gQEdUS19YMTFfTElCU0AKLUdVREVWX0NGTEFHUyA9IEBHVURFVl9DRkxBR1NACi1HVURFVl9MSUJTID0gQEdVREVWX0xJQlNACi1IQVZFX0FWQzEzOTQgPSBASEFWRV9BVkMxMzk0QAotSEFWRV9DWFggPSBASEFWRV9DWFhACi1IQVZFX0RJUkVDVFNPVU5EID0gQEhBVkVfRElSRUNUU09VTkRACi1IQVZFX1JPTTEzOTQgPSBASEFWRV9ST00xMzk0QAotSEFWRV9aTElCID0gQEhBVkVfWkxJQkAKLUhUTUxfRElSID0gQEhUTUxfRElSQAotSU5TVEFMTCA9IEBJTlNUQUxMQAotSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKLUlOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACi1JTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACi1JTlRMTElCUyA9IEBJTlRMTElCU0AKLUlOVExfTUFDT1NYX0xJQlMgPSBASU5UTF9NQUNPU1hfTElCU0AKLUpBQ0tfMF8xMjBfMV9DRkxBR1MgPSBASkFDS18wXzEyMF8xX0NGTEFHU0AKLUpBQ0tfMF8xMjBfMV9MSUJTID0gQEpBQ0tfMF8xMjBfMV9MSUJTQAotSkFDS18xXzlfN19DRkxBR1MgPSBASkFDS18xXzlfN19DRkxBR1NACi1KQUNLXzFfOV83X0xJQlMgPSBASkFDS18xXzlfN19MSUJTQAotSkFDS19DRkxBR1MgPSBASkFDS19DRkxBR1NACi1KQUNLX0xJQlMgPSBASkFDS19MSUJTQAotSlBFR19MSUJTID0gQEpQRUdfTElCU0AKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCQ0FDQV9DRkxBR1MgPSBATElCQ0FDQV9DRkxBR1NACi1MSUJDQUNBX0xJQlMgPSBATElCQ0FDQV9MSUJTQAotTElCRFZfQ0ZMQUdTID0gQExJQkRWX0NGTEFHU0AKLUxJQkRWX0xJQlMgPSBATElCRFZfTElCU0AKLUxJQklDT05WID0gQExJQklDT05WQAotTElCSUVDNjE4ODNfQ0ZMQUdTID0gQExJQklFQzYxODgzX0NGTEFHU0AKLUxJQklFQzYxODgzX0xJQlMgPSBATElCSUVDNjE4ODNfTElCU0AKLUxJQklOVEwgPSBATElCSU5UTEAKLUxJQk0gPSBATElCTUAKLUxJQk9CSlMgPSBATElCT0JKU0AKLUxJQlBOR19DRkxBR1MgPSBATElCUE5HX0NGTEFHU0AKLUxJQlBOR19MSUJTID0gQExJQlBOR19MSUJTQAotTElCUlQgPSBATElCUlRACi1MSUJTID0gQExJQlNACi1MSUJUT09MID0gQExJQlRPT0xACi1MSUJWNEwyX0NGTEFHUyA9IEBMSUJWNEwyX0NGTEFHU0AKLUxJQlY0TDJfTElCUyA9IEBMSUJWNEwyX0xJQlNACi1MSVBPID0gQExJUE9ACi1MTl9TID0gQExOX1NACi1MT0NBTEVESVIgPSBATE9DQUxFRElSQAotTFRMSUJJQ09OViA9IEBMVExJQklDT05WQAotTFRMSUJJTlRMID0gQExUTElCSU5UTEAKLUxUTElCT0JKUyA9IEBMVExJQk9CSlNACi1MVF9TWVNfTElCUkFSWV9QQVRIID0gQExUX1NZU19MSUJSQVJZX1BBVEhACi1NQUlOVCA9IEBNQUlOVEAKLU1BS0VJTkZPID0gQE1BS0VJTkZPQAotTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTVNHRk1UID0gQE1TR0ZNVEAKLU1TR0ZNVF8wMTUgPSBATVNHRk1UXzAxNUAKLU1TR01FUkdFID0gQE1TR01FUkdFQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKQyA9IEBPQkpDQAotT0JKQ0RFUE1PREUgPSBAT0JKQ0RFUE1PREVACi1PQkpDRkxBR1MgPSBAT0JKQ0ZMQUdTQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9SQ0MgPSBAT1JDQ0AKLU9SQ0NfRkxBR1MgPSBAT1JDQ19GTEFHU0AKLU9SQ19DRkxBR1MgPSBAT1JDX0NGTEFHU0AKLU9SQ19MSUJTID0gQE9SQ19MSUJTQAotT1RPT0wgPSBAT1RPT0xACi1PVE9PTDY0ID0gQE9UT09MNjRACi1QQUNLQUdFID0gQFBBQ0tBR0VACi1QQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKLVBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACi1QQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKLVBBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACi1QQUNLQUdFX1VSTCA9IEBQQUNLQUdFX1VSTEAKLVBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACi1QQUNLQUdFX1ZFUlNJT05fTUFKT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01BSk9SQAotUEFDS0FHRV9WRVJTSU9OX01JQ1JPID0gQFBBQ0tBR0VfVkVSU0lPTl9NSUNST0AKLVBBQ0tBR0VfVkVSU0lPTl9NSU5PUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUlOT1JACi1QQUNLQUdFX1ZFUlNJT05fTkFOTyA9IEBQQUNLQUdFX1ZFUlNJT05fTkFOT0AKLVBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFID0gQFBBQ0tBR0VfVkVSU0lPTl9SRUxFQVNFQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1QS0dfQ09ORklHID0gQFBLR19DT05GSUdACi1QTFVHSU5ESVIgPSBAUExVR0lORElSQAotUE9TVUIgPSBAUE9TVUJACi1QUk9GSUxFX0NGTEFHUyA9IEBQUk9GSUxFX0NGTEFHU0AKLVBUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKLVBUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAotUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKLVBVTFNFX0NGTEFHUyA9IEBQVUxTRV9DRkxBR1NACi1QVUxTRV9MSUJTID0gQFBVTFNFX0xJQlNACi1QWVRIT04gPSBAUFlUSE9OQAotUFlUSE9OX0VYRUNfUFJFRklYID0gQFBZVEhPTl9FWEVDX1BSRUZJWEAKLVBZVEhPTl9QTEFURk9STSA9IEBQWVRIT05fUExBVEZPUk1ACi1QWVRIT05fUFJFRklYID0gQFBZVEhPTl9QUkVGSVhACi1QWVRIT05fVkVSU0lPTiA9IEBQWVRIT05fVkVSU0lPTkAKLVJBTkxJQiA9IEBSQU5MSUJACi1SQVcxMzk0X0NGTEFHUyA9IEBSQVcxMzk0X0NGTEFHU0AKLVJBVzEzOTRfTElCUyA9IEBSQVcxMzk0X0xJQlNACi1TRUQgPSBAU0VEQAotU0VUX01BS0UgPSBAU0VUX01BS0VACi1TSEVMTCA9IEBTSEVMTEAKLVNIT1VUMl9DRkxBR1MgPSBAU0hPVVQyX0NGTEFHU0AKLVNIT1VUMl9MSUJTID0gQFNIT1VUMl9MSUJTQAotU09VUF9DRkxBR1MgPSBAU09VUF9DRkxBR1NACi1TT1VQX0xJQlMgPSBAU09VUF9MSUJTQAotU1BFRVhfQ0ZMQUdTID0gQFNQRUVYX0NGTEFHU0AKLVNQRUVYX0xJQlMgPSBAU1BFRVhfTElCU0AKLVNUUklQID0gQFNUUklQQAotVEFHTElCX0NGTEFHUyA9IEBUQUdMSUJfQ0ZMQUdTQAotVEFHTElCX0NYWEZMQUdTID0gQFRBR0xJQl9DWFhGTEFHU0AKLVRBR0xJQl9MSUJTID0gQFRBR0xJQl9MSUJTQAotVVNFX05MUyA9IEBVU0VfTkxTQAotVkFMR1JJTkRfQ0ZMQUdTID0gQFZBTEdSSU5EX0NGTEFHU0AKLVZBTEdSSU5EX0xJQlMgPSBAVkFMR1JJTkRfTElCU0AKLVZBTEdSSU5EX1BBVEggPSBAVkFMR1JJTkRfUEFUSEAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLVZQWF8xMzBfQ0ZMQUdTID0gQFZQWF8xMzBfQ0ZMQUdTQAotVlBYXzEzMF9MSUJTID0gQFZQWF8xMzBfTElCU0AKLVZQWF8xNDBfQ0ZMQUdTID0gQFZQWF8xNDBfQ0ZMQUdTQAotVlBYXzE0MF9MSUJTID0gQFZQWF8xNDBfTElCU0AKLVZQWF9DRkxBR1MgPSBAVlBYX0NGTEFHU0AKLVZQWF9MSUJTID0gQFZQWF9MSUJTQAotV0FSTklOR19DRkxBR1MgPSBAV0FSTklOR19DRkxBR1NACi1XQVJOSU5HX0NYWEZMQUdTID0gQFdBUk5JTkdfQ1hYRkxBR1NACi1XQVJOSU5HX09CSkNGTEFHUyA9IEBXQVJOSU5HX09CSkNGTEFHU0AKLVdBVlBBQ0tfQ0ZMQUdTID0gQFdBVlBBQ0tfQ0ZMQUdTQAotV0FWUEFDS19MSUJTID0gQFdBVlBBQ0tfTElCU0AKLVhEQU1BR0VfQ0ZMQUdTID0gQFhEQU1BR0VfQ0ZMQUdTQAotWERBTUFHRV9MSUJTID0gQFhEQU1BR0VfTElCU0AKLVhFWFRfQ0ZMQUdTID0gQFhFWFRfQ0ZMQUdTQAotWEVYVF9MSUJTID0gQFhFWFRfTElCU0AKLVhGSVhFU19DRkxBR1MgPSBAWEZJWEVTX0NGTEFHU0AKLVhGSVhFU19MSUJTID0gQFhGSVhFU19MSUJTQAotWEdFVFRFWFQgPSBAWEdFVFRFWFRACi1YR0VUVEVYVF8wMTUgPSBAWEdFVFRFWFRfMDE1QAotWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyA9IEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQAotWFNITV9DRkxBR1MgPSBAWFNITV9DRkxBR1NACi1YU0hNX0xJQlMgPSBAWFNITV9MSUJTQAotWF9DRkxBR1MgPSBAWF9DRkxBR1NACi1YX0xJQlMgPSBAWF9MSUJTQAotWkxJQl9MSUJTID0gQFpMSUJfTElCU0AKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAotYWNfY3RfT0JKQyA9IEBhY19jdF9PQkpDQAotYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACi1hbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAotYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKLWFtX190YXIgPSBAYW1fX3RhckAKLWFtX191bnRhciA9IEBhbV9fdW50YXJACi1heF9wdGhyZWFkX2NvbmZpZyA9IEBheF9wdGhyZWFkX2NvbmZpZ0AKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wa2dweWV4ZWNkaXIgPSBAcGtncHlleGVjZGlyQAotcGtncHl0aG9uZGlyID0gQHBrZ3B5dGhvbmRpckAKLXBsdWdpbmRpciA9IEBwbHVnaW5kaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1weWV4ZWNkaXIgPSBAcHlleGVjZGlyQAotcHl0aG9uZGlyID0gQHB5dGhvbmRpckAKLXJ1bnN0YXRlZGlyID0gQHJ1bnN0YXRlZGlyQAotc2JpbmRpciA9IEBzYmluZGlyQAotc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACi1zcmNkaXIgPSBAc3JjZGlyQAotc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAotdGFyZ2V0ID0gQHRhcmdldEAKLXRhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACi10YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACi10YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAotdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAotdG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAotdG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKLXRvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKLWNhaXJvX292ZXJsYXlfU09VUkNFUyA9IGNhaXJvX292ZXJsYXkuYwotY2Fpcm9fb3ZlcmxheV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoQ0FJUk9fQ0ZMQUdTKQotY2Fpcm9fb3ZlcmxheV9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKSAkKEdTVF9MSUJTKSAkKENBSVJPX0xJQlMpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9jYWlyby9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9jYWlyby9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1jYWlyb19vdmVybGF5JChFWEVFWFQpOiAkKGNhaXJvX292ZXJsYXlfT0JKRUNUUykgJChjYWlyb19vdmVybGF5X0RFUEVOREVOQ0lFUykgJChFWFRSQV9jYWlyb19vdmVybGF5X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGNhaXJvX292ZXJsYXkkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGNhaXJvX292ZXJsYXlfTElOSykgJChjYWlyb19vdmVybGF5X09CSkVDVFMpICQoY2Fpcm9fb3ZlcmxheV9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2Fpcm9fb3ZlcmxheS1jYWlyb19vdmVybGF5LlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWNhaXJvX292ZXJsYXktY2Fpcm9fb3ZlcmxheS5vOiBjYWlyb19vdmVybGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjYWlyb19vdmVybGF5X0NGTEFHUykgJChDRkxBR1MpIC1NVCBjYWlyb19vdmVybGF5LWNhaXJvX292ZXJsYXkubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2Fpcm9fb3ZlcmxheS1jYWlyb19vdmVybGF5LlRwbyAtYyAtbyBjYWlyb19vdmVybGF5LWNhaXJvX292ZXJsYXkubyBgdGVzdCAtZiAnY2Fpcm9fb3ZlcmxheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjYWlyb19vdmVybGF5LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NhaXJvX292ZXJsYXktY2Fpcm9fb3ZlcmxheS5UcG8gJChERVBESVIpL2NhaXJvX292ZXJsYXktY2Fpcm9fb3ZlcmxheS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NhaXJvX292ZXJsYXkuYycgb2JqZWN0PSdjYWlyb19vdmVybGF5LWNhaXJvX292ZXJsYXkubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2Fpcm9fb3ZlcmxheV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjYWlyb19vdmVybGF5LWNhaXJvX292ZXJsYXkubyBgdGVzdCAtZiAnY2Fpcm9fb3ZlcmxheS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjYWlyb19vdmVybGF5LmMKLQotY2Fpcm9fb3ZlcmxheS1jYWlyb19vdmVybGF5Lm9iajogY2Fpcm9fb3ZlcmxheS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2Fpcm9fb3ZlcmxheV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2Fpcm9fb3ZlcmxheS1jYWlyb19vdmVybGF5Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY2Fpcm9fb3ZlcmxheS1jYWlyb19vdmVybGF5LlRwbyAtYyAtbyBjYWlyb19vdmVybGF5LWNhaXJvX292ZXJsYXkub2JqIGBpZiB0ZXN0IC1mICdjYWlyb19vdmVybGF5LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2Fpcm9fb3ZlcmxheS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jYWlyb19vdmVybGF5LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NhaXJvX292ZXJsYXktY2Fpcm9fb3ZlcmxheS5UcG8gJChERVBESVIpL2NhaXJvX292ZXJsYXktY2Fpcm9fb3ZlcmxheS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NhaXJvX292ZXJsYXkuYycgb2JqZWN0PSdjYWlyb19vdmVybGF5LWNhaXJvX292ZXJsYXkub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjYWlyb19vdmVybGF5X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNhaXJvX292ZXJsYXktY2Fpcm9fb3ZlcmxheS5vYmogYGlmIHRlc3QgLWYgJ2NhaXJvX292ZXJsYXkuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjYWlyb19vdmVybGF5LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NhaXJvX292ZXJsYXkuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9jYWlyby9jYWlyb19vdmVybGF5LmMgYi90ZXN0cy9leGFtcGxlcy9jYWlyby9jYWlyb19vdmVybGF5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllOWY3MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvY2Fpcm8vY2Fpcm9fb3ZlcmxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDExIEpvbiBOb3JkYnkgPGpvbm9ub3JAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBFeGFtcGxlIHNob3dpbmcgdXNhZ2Ugb2YgdGhlIGNhaXJvb3ZlcmxheSBlbGVtZW50Ci0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8tZ29iamVjdC5oPgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotCi0KLXN0YXRpYyBnYm9vbGVhbgotb25fbWVzc2FnZSAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIHVzZXJfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZXJyLCAmZGVidWcpOwotICAgICAgZ19jcml0aWNhbCAoIkdvdCBFUlJPUjogJXMgKCVzKSIsIGVyci0+bWVzc2FnZSwgR1NUX1NUUl9OVUxMIChkZWJ1ZykpOwotICAgICAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOnsKLSAgICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICAgIGdjaGFyICpkZWJ1ZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyAobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKLSAgICAgIGdfd2FybmluZyAoIkdvdCBXQVJOSU5HOiAlcyAoJXMpIiwgZXJyLT5tZXNzYWdlLCBHU1RfU1RSX05VTEwgKGRlYnVnKSk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIERhdGFzdHJ1Y3R1cmUgdG8gc2hhcmUgdGhlIHN0YXRlIHdlIGFyZSBpbnRlcmVzdGVkIGluIGJldHdlZW4KLSAqIHByZXBhcmUgYW5kIHJlbmRlciBmdW5jdGlvbi4gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGdib29sZWFuIHZhbGlkOwotICBHc3RWaWRlb0luZm8gdmluZm87Ci19IENhaXJvT3ZlcmxheVN0YXRlOwotCi0vKiBTdG9yZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgY2FwcyB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluLiAqLwotc3RhdGljIHZvaWQKLXByZXBhcmVfb3ZlcmxheSAoR3N0RWxlbWVudCAqIG92ZXJsYXksIEdzdENhcHMgKiBjYXBzLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIENhaXJvT3ZlcmxheVN0YXRlICpzdGF0ZSA9IChDYWlyb092ZXJsYXlTdGF0ZSAqKSB1c2VyX2RhdGE7Ci0KLSAgc3RhdGUtPnZhbGlkID0gZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzICgmc3RhdGUtPnZpbmZvLCBjYXBzKTsKLX0KLQotLyogRHJhdyB0aGUgb3ZlcmxheS4gCi0gKiBUaGlzIGZ1bmN0aW9uIGRyYXdzIGEgY3V0ZSAiYmVhdGluZyIgaGVhcnQuICovCi1zdGF0aWMgdm9pZAotZHJhd19vdmVybGF5IChHc3RFbGVtZW50ICogb3ZlcmxheSwgY2Fpcm9fdCAqIGNyLCBndWludDY0IHRpbWVzdGFtcCwKLSAgICBndWludDY0IGR1cmF0aW9uLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIENhaXJvT3ZlcmxheVN0YXRlICpzID0gKENhaXJvT3ZlcmxheVN0YXRlICopIHVzZXJfZGF0YTsKLSAgZG91YmxlIHNjYWxlOwotICBpbnQgd2lkdGgsIGhlaWdodDsKLQotICBpZiAoIXMtPnZhbGlkKQotICAgIHJldHVybjsKLQotICB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIICgmcy0+dmluZm8pOwotICBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQgKCZzLT52aW5mbyk7Ci0KLSAgc2NhbGUgPSAyICogKCgodGltZXN0YW1wIC8gKGludCkgMWU3KSAlIDcwKSArIDMwKSAvIDEwMC4wOwotICBjYWlyb190cmFuc2xhdGUgKGNyLCB3aWR0aCAvIDIsIChoZWlnaHQgLyAyKSAtIDMwKTsKLQotICAvKiBGSVhNRTogdGhpcyBhc3N1bWVzIGEgcGl4ZWwtYXNwZWN0LXJhdGlvIG9mIDEvMSAqLwotICBjYWlyb19zY2FsZSAoY3IsIHNjYWxlLCBzY2FsZSk7Ci0KLSAgY2Fpcm9fbW92ZV90byAoY3IsIDAsIDApOwotICBjYWlyb19jdXJ2ZV90byAoY3IsIDAsIC0zMCwgLTUwLCAtMzAsIC01MCwgMCk7Ci0gIGNhaXJvX2N1cnZlX3RvIChjciwgLTUwLCAzMCwgMCwgMzUsIDAsIDYwKTsKLSAgY2Fpcm9fY3VydmVfdG8gKGNyLCAwLCAzNSwgNTAsIDMwLCA1MCwgMCk7Ci0gIGNhaXJvX2N1cnZlX3RvIChjciwgNTAsIC0zMCwgMCwgLTMwLCAwLCAwKTsKLSAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhIChjciwgMC45LCAwLjAsIDAuMSwgMC43KTsKLSAgY2Fpcm9fZmlsbCAoY3IpOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1zZXR1cF9nc3RfcGlwZWxpbmUgKENhaXJvT3ZlcmxheVN0YXRlICogb3ZlcmxheV9zdGF0ZSkKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKmNhaXJvX292ZXJsYXk7Ci0gIEdzdEVsZW1lbnQgKnNvdXJjZSwgKmFkYXB0b3IxLCAqYWRhcHRvcjIsICpzaW5rOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoImNhaXJvLW92ZXJsYXktZXhhbXBsZSIpOwotCi0gIC8qIEFkYXB0b3JzIG5lZWRlZCBiZWNhdXNlIGNhaXJvb3ZlcmxheSBvbmx5IHN1cHBvcnRzIEFSR0IgZGF0YSAqLwotICBzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb3Rlc3RzcmMiLCAic291cmNlIik7Ci0gIGFkYXB0b3IxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgImFkYXB0b3IxIik7Ci0gIGNhaXJvX292ZXJsYXkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJjYWlyb292ZXJsYXkiLCAib3ZlcmxheSIpOwotICBhZGFwdG9yMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvY29udmVydCIsICJhZGFwdG9yMiIpOwotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieGltYWdlc2luayIsICJzaW5rIik7Ci0gIGlmIChzaW5rID09IE5VTEwpCi0gICAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG92aWRlb3NpbmsiLCAic2luayIpOwotCi0gIC8qIElmIGZhaWxpbmcsIHRoZSBlbGVtZW50IGNvdWxkIG5vdCBiZSBjcmVhdGVkICovCi0gIGdfYXNzZXJ0IChjYWlyb19vdmVybGF5KTsKLQotICAvKiBIb29rIHVwIHRoZSBuZWNjZXNhcnkgc2lnbmFscyBmb3IgY2Fpcm9vdmVybGF5ICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGNhaXJvX292ZXJsYXksICJkcmF3IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGRyYXdfb3ZlcmxheSksIG92ZXJsYXlfc3RhdGUpOwotICBnX3NpZ25hbF9jb25uZWN0IChjYWlyb19vdmVybGF5LCAiY2Fwcy1jaGFuZ2VkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKHByZXBhcmVfb3ZlcmxheSksIG92ZXJsYXlfc3RhdGUpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc291cmNlLCBhZGFwdG9yMSwKLSAgICAgIGNhaXJvX292ZXJsYXksIGFkYXB0b3IyLCBzaW5rLCBOVUxMKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFueSAoc291cmNlLCBhZGFwdG9yMSwKLSAgICAgICAgICBjYWlyb19vdmVybGF5LCBhZGFwdG9yMiwgc2luaywgTlVMTCkpIHsKLSAgICBnX3dhcm5pbmcgKCJGYWlsZWQgdG8gbGluayBlbGVtZW50cyEiKTsKLSAgfQotCi0gIHJldHVybiBwaXBlbGluZTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEJ1cyAqYnVzOwotICBDYWlyb092ZXJsYXlTdGF0ZSAqb3ZlcmxheV9zdGF0ZTsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIC8qIGFsbG9jYXRlIG9uIGhlYXAgZm9yIHBlZGFnb2dpY2FsIHJlYXNvbnMsIG1ha2VzIGNvZGUgZWFzaWVyIHRvIHRyYW5zZmVyICovCi0gIG92ZXJsYXlfc3RhdGUgPSBnX25ldzAgKENhaXJvT3ZlcmxheVN0YXRlLCAxKTsKLQotICBwaXBlbGluZSA9IHNldHVwX2dzdF9waXBlbGluZSAob3ZlcmxheV9zdGF0ZSk7Ci0KLSAgYnVzID0gZ3N0X3BpcGVsaW5lX2dldF9idXMgKEdTVF9QSVBFTElORSAocGlwZWxpbmUpKTsKLSAgZ3N0X2J1c19hZGRfc2lnbmFsX3dhdGNoIChidXMpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYnVzKSwgIm1lc3NhZ2UiLCBHX0NBTExCQUNLIChvbl9tZXNzYWdlKSwgbG9vcCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJ1cykpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICBnX2ZyZWUgKG92ZXJsYXlfc3RhdGUpOwotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZS5hbSBiL3Rlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZS5hbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdmMmIyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWlmIEhBVkVfR1RLCi1ub2luc3RfUFJPR1JBTVMgPSBkZW1vCi1lbmRpZgotCi1kZW1vX1NPVVJDRVMgPSBkZW1vLmMKLWRlbW9fQ0ZMQUdTICA9ICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpICQoR1RLX0NGTEFHUykKLWRlbW9fTERBREQgPSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoR1RLX0xJQlMpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2ZTliNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NTIgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLUBIQVZFX0dUS19UUlVFQG5vaW5zdF9QUk9HUkFNUyA9IGRlbW8kKEVYRUVYVCkKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplcgotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLWFtX2RlbW9fT0JKRUNUUyA9IGRlbW8tZGVtby4kKE9CSkVYVCkKLWRlbW9fT0JKRUNUUyA9ICQoYW1fZGVtb19PQkpFQ1RTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLWRlbW9fREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1kZW1vX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGRlbW9fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQoZGVtb19TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChkZW1vX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1kZW1vX1NPVVJDRVMgPSBkZW1vLmMKLWRlbW9fQ0ZMQUdTID0gJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotZGVtb19MREFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChHVEtfTElCUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9lcXVhbGl6ZXIvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWNsZWFuLW5vaW5zdFBST0dSQU1TOgotCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLQotZGVtbyQoRVhFRVhUKTogJChkZW1vX09CSkVDVFMpICQoZGVtb19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZGVtb19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBkZW1vJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChkZW1vX0xJTkspICQoZGVtb19PQkpFQ1RTKSAkKGRlbW9fTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlbW8tZGVtby5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1kZW1vLWRlbW8ubzogZGVtby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZGVtb19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZGVtby1kZW1vLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2RlbW8tZGVtby5UcG8gLWMgLW8gZGVtby1kZW1vLm8gYHRlc3QgLWYgJ2RlbW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVtby5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kZW1vLWRlbW8uVHBvICQoREVQRElSKS9kZW1vLWRlbW8uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkZW1vLmMnIG9iamVjdD0nZGVtby1kZW1vLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRlbW9fQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZGVtby1kZW1vLm8gYHRlc3QgLWYgJ2RlbW8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVtby5jCi0KLWRlbW8tZGVtby5vYmo6IGRlbW8uYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRlbW9fQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGRlbW8tZGVtby5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2RlbW8tZGVtby5UcG8gLWMgLW8gZGVtby1kZW1vLm9iaiBgaWYgdGVzdCAtZiAnZGVtby5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RlbW8uYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZGVtby5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9kZW1vLWRlbW8uVHBvICQoREVQRElSKS9kZW1vLWRlbW8uUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkZW1vLmMnIG9iamVjdD0nZGVtby1kZW1vLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZGVtb19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBkZW1vLWRlbW8ub2JqIGBpZiB0ZXN0IC1mICdkZW1vLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZGVtby5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9kZW1vLmMnOyBmaWAKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IHRhZ3MtYW0KLVRBR1M6IHRhZ3MKLQotdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCXNldCB4OyBcCi0JaGVyZT1gcHdkYDsgXAotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IGN0YWdzLWFtCi0KLUNUQUdTOiBjdGFncwotY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCi0JICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHVuaXF1ZQotCi1HVEFHUzoKLQloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQotCi1jc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKLQljYXNlICIkKHNyY2RpcikiIGluIFwKLQkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKLQkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCi0JZXNhYzsgXAotCWZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBcCi0JICAgIGVjaG8gIiQoc3ViZGlyKS8kJGkiOyBcCi0JICBlbHNlIFwKLQkgICAgZWNobyAiJCRzZGlyLyQkaSI7IFwKLQkgIGZpOyBcCi0JZG9uZSA+PiAkKHRvcF9idWlsZGRpcikvY3Njb3BlLmZpbGVzCi0KLWRpc3RjbGVhbi10YWdzOgotCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCi0KLWRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JbGlzdD0nJChESVNURklMRVMpJzsgXAotCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKLQkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCi0JICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAotCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKLQkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKLQkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKLQkJCSAgIHNvcnQgLXVgIDs7IFwKLQllc2FjOyBcCi0JZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCi0JICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCi0JICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAotCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAotCSAgICB8fCBleGl0IDE7IFwKLQkgIGZpOyBcCi0JZG9uZQotY2hlY2stYW06IGFsbC1hbQotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL2RlbW8uYyBiL3Rlc3RzL2V4YW1wbGVzL2VxdWFsaXplci9kZW1vLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMDAwZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvZXF1YWxpemVyL2RlbW8uYworKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBTZWJhc3RpYW4gRHLDtmdlIDxzbG9tb0BjaXJjdWxhci1jaGFvcy5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotLyogVE9ETzogV2UgdXNlIGdka19jYWlyb19jcmVhdGUoKSBhbmQgb3RoZXJzLCB3aGljaCBhcmUgZGVwcmVjYXRlZCAqLwotI2RlZmluZSBHREtfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLSNkZWZpbmUgTkJBTkRTIDEwCi0KLXN0YXRpYyBHdGtXaWRnZXQgKmRyYXdpbmdhcmVhID0gTlVMTDsKLXN0YXRpYyBndWludCBzcGVjdF9oZWlnaHQgPSAxMjg7Ci1zdGF0aWMgZ3VpbnQgc3BlY3RfYmFuZHMgPSAyNTY7Ci1zdGF0aWMgZ2Zsb2F0IGhlaWdodF9zY2FsZSA9IDIuMDsKLQotc3RhdGljIHZvaWQKLW9uX3dpbmRvd19kZXN0cm95IChHT2JqZWN0ICogb2JqZWN0LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGRyYXdpbmdhcmVhID0gTlVMTDsKLSAgZ3RrX21haW5fcXVpdCAoKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1vbl9jb25maWd1cmVfZXZlbnQgKEd0a1dpZGdldCAqIHdpZGdldCwgR2RrRXZlbnRDb25maWd1cmUgKiBldmVudCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdEVsZW1lbnQgKnNwZWN0cnVtID0gR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSk7Ci0KLSAgLypHU1RfSU5GTyAoIiVkIHggJWQiLCBldmVudC0+d2lkdGgsIGV2ZW50LT5oZWlnaHQpOyAqLwotICBzcGVjdF9oZWlnaHQgPSBldmVudC0+aGVpZ2h0OwotICBoZWlnaHRfc2NhbGUgPSBldmVudC0+aGVpZ2h0IC8gNjQuMDsKLSAgc3BlY3RfYmFuZHMgPSBldmVudC0+d2lkdGg7Ci0KLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3BlY3RydW0pLCAiYmFuZHMiLCBzcGVjdF9iYW5kcywgTlVMTCk7Ci0gIHJldHVybiBGQUxTRTsKLX0KLQotLyogY29udHJvbCBnYWlucyAqLwotc3RhdGljIHZvaWQKLW9uX2dhaW5fY2hhbmdlZCAoR3RrUmFuZ2UgKiByYW5nZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RPYmplY3QgKmJhbmQgPSBHU1RfT0JKRUNUICh1c2VyX2RhdGEpOwotICBnZG91YmxlIHZhbHVlID0gZ3RrX3JhbmdlX2dldF92YWx1ZSAocmFuZ2UpOwotCi0gIGdfb2JqZWN0X3NldCAoYmFuZCwgImdhaW4iLCB2YWx1ZSwgTlVMTCk7Ci19Ci0KLS8qIGNvbnRyb2wgYmFuZHdpZHRocyAqLwotc3RhdGljIHZvaWQKLW9uX2JhbmR3aWR0aF9jaGFuZ2VkIChHdGtSYW5nZSAqIHJhbmdlLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIEdzdE9iamVjdCAqYmFuZCA9IEdTVF9PQkpFQ1QgKHVzZXJfZGF0YSk7Ci0gIGdkb3VibGUgdmFsdWUgPSBndGtfcmFuZ2VfZ2V0X3ZhbHVlIChyYW5nZSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChiYW5kLCAiYmFuZHdpZHRoIiwgdmFsdWUsIE5VTEwpOwotfQotCi0vKiBjb250cm9sIGZyZXF1ZW5jeSAqLwotc3RhdGljIHZvaWQKLW9uX2ZyZXFfY2hhbmdlZCAoR3RrUmFuZ2UgKiByYW5nZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RPYmplY3QgKmJhbmQgPSBHU1RfT0JKRUNUICh1c2VyX2RhdGEpOwotICBnZG91YmxlIHZhbHVlID0gZ3RrX3JhbmdlX2dldF92YWx1ZSAocmFuZ2UpOwotCi0gIC8qIGhib3ggKi8KLSAgR3RrV2lkZ2V0ICpwYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQgKEdUS19XSURHRVQgKHJhbmdlKSk7Ci0KLSAgLyogZnJhbWUgKi8KLSAgR3RrV2lkZ2V0ICpwYXJlbnRfcGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfcGFyZW50IChwYXJlbnQpOwotICBnY2hhciAqbGFiZWwgPSBnX3N0cmR1cF9wcmludGYgKCIlZCBIeiIsIChpbnQpICh2YWx1ZSArIDAuNSkpOwotCi0gIGd0a19mcmFtZV9zZXRfbGFiZWwgKEdUS19GUkFNRSAocGFyZW50X3BhcmVudCksIGxhYmVsKTsKLSAgZ19mcmVlIChsYWJlbCk7Ci0KLSAgZ19vYmplY3Rfc2V0IChiYW5kLCAiZnJlcSIsIHZhbHVlLCBOVUxMKTsKLX0KLQotLyogZHJhdyBmcmVxdWVuY3kgc3BlY3RydW0gYXMgYSBidW5jaCBvZiBiYXJzICovCi1zdGF0aWMgdm9pZAotZHJhd19zcGVjdHJ1bSAoZ2Zsb2F0ICogZGF0YSkKLXsKLSAgZ2ludCBpOwotICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgc3BlY3RfYmFuZHMsIHNwZWN0X2hlaWdodCB9OwotICBjYWlyb190ICpjcjsKLQotICBpZiAoIWRyYXdpbmdhcmVhKQotICAgIHJldHVybjsKLQotICBnZGtfd2luZG93X2JlZ2luX3BhaW50X3JlY3QgKGd0a193aWRnZXRfZ2V0X3dpbmRvdyAoZHJhd2luZ2FyZWEpLCAmcmVjdCk7Ci0gIGNyID0gZ2RrX2NhaXJvX2NyZWF0ZSAoZ3RrX3dpZGdldF9nZXRfd2luZG93IChkcmF3aW5nYXJlYSkpOwotCi0gIGNhaXJvX3NldF9zb3VyY2VfcmdiIChjciwgMCwgMCwgMCk7Ci0gIGNhaXJvX3JlY3RhbmdsZSAoY3IsIDAsIDAsIHNwZWN0X2JhbmRzLCBzcGVjdF9oZWlnaHQpOwotICBjYWlyb19maWxsIChjcik7Ci0gIGZvciAoaSA9IDA7IGkgPCBzcGVjdF9iYW5kczsgaSsrKSB7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IgKGNyLCAxLCAxLCAxKTsKLSAgICBjYWlyb19yZWN0YW5nbGUgKGNyLCBpLCAtZGF0YVtpXSwgMSwgc3BlY3RfaGVpZ2h0ICsgZGF0YVtpXSk7Ci0gICAgY2Fpcm9fZmlsbCAoY3IpOwotICB9Ci0gIGNhaXJvX2Rlc3Ryb3kgKGNyKTsKLQotICBnZGtfd2luZG93X2VuZF9wYWludCAoZ3RrX3dpZGdldF9nZXRfd2luZG93IChkcmF3aW5nYXJlYSkpOwotfQotCi1zdGF0aWMgdm9pZAotZHluYW1pY19saW5rIChHc3RQYWRUZW1wbGF0ZSAqIHRlbXBsLCBHc3RQYWQgKiBuZXdwYWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0UGFkICp0YXJnZXQgPSBHU1RfUEFEICh1c2VyX2RhdGEpOwotCi0gIGdzdF9wYWRfbGluayAobmV3cGFkLCB0YXJnZXQpOwotICBnc3Rfb2JqZWN0X3VucmVmICh0YXJnZXQpOwotfQotCi0vKiByZWNlaXZlIHNwZWN0cmFsIGRhdGEgZnJvbSBlbGVtZW50IG1lc3NhZ2UgKi8KLXN0YXRpYyBnYm9vbGVhbgotbWVzc2FnZV9oYW5kbGVyIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBpZiAobWVzc2FnZS0+dHlwZSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKTsKLQotICAgIGlmIChzdHJjbXAgKG5hbWUsICJzcGVjdHJ1bSIpID09IDApIHsKLSAgICAgIGdmbG9hdCAqc3BlY3QgPSBnX25ldyAoZ2Zsb2F0LCBzcGVjdF9iYW5kcyk7Ci0gICAgICBjb25zdCBHVmFsdWUgKmxpc3Q7Ci0gICAgICBjb25zdCBHVmFsdWUgKnZhbHVlOwotICAgICAgZ3VpbnQgaTsKLQotICAgICAgbGlzdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAibWFnbml0dWRlIik7Ci0gICAgICBmb3IgKGkgPSAwOyBpIDwgc3BlY3RfYmFuZHM7ICsraSkgewotICAgICAgICB2YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZSAobGlzdCwgaSk7Ci0gICAgICAgIHNwZWN0W2ldID0gaGVpZ2h0X3NjYWxlICogZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIGRyYXdfc3BlY3RydW0gKHNwZWN0KTsKLSAgICAgIGdfZnJlZSAoc3BlY3QpOwotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdEVsZW1lbnQgKmRlY29kZWJpbiwgKmRlY2NvbnZlcnQ7Ci0gIEdzdEVsZW1lbnQgKmNhcHNmaWx0ZXIsICplcXVhbGl6ZXIsICpzcGVjdHJ1bSwgKnNpbmtjb252ZXJ0LCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0QnVzICpidXM7Ci0gIEd0a1dpZGdldCAqYXBwd2luZG93LCAqdmJveCwgKmhib3gsICpzY2FsZTsKLSAgaW50IGksIG51bV9iYW5kcyA9IE5CQU5EUzsKLQotICBHT3B0aW9uRW50cnkgb3B0aW9uc1tdID0gewotICAgIHsiYmFuZHMiLCAnYicsIDAsIEdfT1BUSU9OX0FSR19JTlQsICZudW1fYmFuZHMsCi0gICAgICAgICJOdW1iZXIgb2YgYmFuZHMiLCBOVUxMfSwKLSAgICB7TlVMTH0KLSAgfTsKLSAgR09wdGlvbkNvbnRleHQgKmN0eDsKLSAgR0Vycm9yICplcnIgPSBOVUxMOwotCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiLSBkZW1vIG9mIGF1ZGlvIGVxdWFsaXplciIpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgb3B0aW9ucywgTlVMTCk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBndGtfZ2V0X29wdGlvbl9ncm91cCAoVFJVRSkpOwotCi0gIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7Ci0gICAgZ19wcmludCAoIkVycm9yIGluaXRpYWxpemluZzogJXNcbiIsIGVyci0+bWVzc2FnZSk7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGV4aXQgKDEpOwotICB9Ci0gIGdfb3B0aW9uX2NvbnRleHRfZnJlZSAoY3R4KTsKLQotICBpZiAoYXJnYyA8IDIpIHsKLSAgICBnX3ByaW50ICgiVXNhZ2U6ICVzIDx1cmkgdG8gcGxheT5cbiIsIGFyZ3ZbMF0pOwotICAgIGdfcHJpbnQgKCIgICAgRm9yIG9wdGlvbmFsIGFyZ3VtZW50czogLS1oZWxwXG4iKTsKLSAgICBleGl0ICgtMSk7Ci0gIH0KLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLSAgZ3RrX2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoImJpbiIpOwotCi0gIC8qIFVyaSBkZWNvZGluZyAqLwotICBkZWNvZGViaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1cmlkZWNvZGViaW4iLCAiZGVjb2RlciIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChkZWNvZGViaW4pLCAidXJpIiwgYXJndlsxXSwgTlVMTCk7Ci0KLSAgLyogRm9yY2UgZmxvYXQzMiBzYW1wbGVzICovCi0gIGRlY2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb2NvbnZlcnQiLCAiZGVjY29udmVydCIpOwotICBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsICJjYXBzZmlsdGVyIik7Ci0gIGNhcHMgPQotICAgICAgZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJGMzJMRSIsCi0gICAgICBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChjYXBzZmlsdGVyLCAiY2FwcyIsIGNhcHMsIE5VTEwpOwotCi0gIGVxdWFsaXplciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImVxdWFsaXplci1uYmFuZHMiLCAiZXF1YWxpemVyIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGVxdWFsaXplciksICJudW0tYmFuZHMiLCBudW1fYmFuZHMsIE5VTEwpOwotCi0gIHNwZWN0cnVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgic3BlY3RydW0iLCAic3BlY3RydW0iKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3BlY3RydW0pLCAiYmFuZHMiLCBzcGVjdF9iYW5kcywgInRocmVzaG9sZCIsIC04MCwKLSAgICAgICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwgImludGVydmFsIiwgNTAwICogR1NUX01TRUNPTkQsIE5VTEwpOwotCi0gIHNpbmtjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgInNpbmtjb252ZXJ0Iik7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1dG9hdWRpb3NpbmsiLCAic2luayIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIGRlY29kZWJpbiwgZGVjY29udmVydCwgY2Fwc2ZpbHRlciwgZXF1YWxpemVyLAotICAgICAgc3BlY3RydW0sIHNpbmtjb252ZXJ0LCBzaW5rLCBOVUxMKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkgKGRlY2NvbnZlcnQsIGNhcHNmaWx0ZXIsIGVxdWFsaXplciwgc3BlY3RydW0sCi0gICAgICAgICAgc2lua2NvbnZlcnQsIHNpbmssIE5VTEwpKSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiY2FuJ3QgbGluayBlbGVtZW50c1xuIik7Ci0gICAgZXhpdCAoMSk7Ci0gIH0KLQotICAvKiBIYW5kbGUgZHluYW1pYyBwYWRzICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChkZWNvZGViaW4pLCAicGFkLWFkZGVkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGR5bmFtaWNfbGluayksIGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChkZWNjb252ZXJ0LAotICAgICAgICAgICJzaW5rIikpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG1lc3NhZ2VfaGFuZGxlciwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgYXBwd2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICBndGtfd2luZG93X3NldF90aXRsZSAoR1RLX1dJTkRPVyAoYXBwd2luZG93KSwgIkVxdWFsaXplciBEZW1vIik7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChhcHB3aW5kb3cpLCAiZGVzdHJveSIsCi0gICAgICBHX0NBTExCQUNLIChvbl93aW5kb3dfZGVzdHJveSksIE5VTEwpOwotICB2Ym94ID0gZ3RrX2JveF9uZXcgKEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7Ci0KLSAgZHJhd2luZ2FyZWEgPSBndGtfZHJhd2luZ19hcmVhX25ldyAoKTsKLSAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0IChkcmF3aW5nYXJlYSwgc3BlY3RfYmFuZHMsIHNwZWN0X2hlaWdodCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChkcmF3aW5nYXJlYSksICJjb25maWd1cmUtZXZlbnQiLAotICAgICAgR19DQUxMQkFDSyAob25fY29uZmlndXJlX2V2ZW50KSwgKGdwb2ludGVyKSBzcGVjdHJ1bSk7Ci0gIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJveCksIGRyYXdpbmdhcmVhLCBUUlVFLCBUUlVFLCAwKTsKLQotICBoYm94ID0gZ3RrX2JveF9uZXcgKEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAyMCk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bV9iYW5kczsgaSsrKSB7Ci0gICAgR09iamVjdCAqYmFuZDsKLSAgICBnZG91YmxlIGZyZXE7Ci0gICAgZ2RvdWJsZSBidzsKLSAgICBnZG91YmxlIGdhaW47Ci0gICAgZ2NoYXIgKmxhYmVsOwotICAgIEd0a1dpZGdldCAqZnJhbWUsICpzY2FsZXNfaGJveDsKLQotICAgIGJhbmQgPSBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHU1RfQ0hJTERfUFJPWFkgKGVxdWFsaXplciksIGkpOwotICAgIGdfYXNzZXJ0IChiYW5kICE9IE5VTEwpOwotICAgIGdfb2JqZWN0X2dldCAoYmFuZCwgImZyZXEiLCAmZnJlcSwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0IChiYW5kLCAiYmFuZHdpZHRoIiwgJmJ3LCBOVUxMKTsKLSAgICBnX29iamVjdF9nZXQgKGJhbmQsICJnYWluIiwgJmdhaW4sIE5VTEwpOwotCi0gICAgbGFiZWwgPSBnX3N0cmR1cF9wcmludGYgKCIlZCBIeiIsIChpbnQpIChmcmVxICsgMC41KSk7Ci0gICAgZnJhbWUgPSBndGtfZnJhbWVfbmV3IChsYWJlbCk7Ci0gICAgZ19mcmVlIChsYWJlbCk7Ci0KLSAgICBzY2FsZXNfaGJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgNik7Ci0KLSAgICAvKiBDcmVhdGUgZ2FpbiBzY2FsZSAqLwotICAgIHNjYWxlID0gZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsCi0gICAgICAgIC0yNC4wLCAxMi4wLCAwLjUpOwotICAgIGd0a19zY2FsZV9zZXRfZHJhd192YWx1ZSAoR1RLX1NDQUxFIChzY2FsZSksIFRSVUUpOwotICAgIGd0a19zY2FsZV9zZXRfdmFsdWVfcG9zIChHVEtfU0NBTEUgKHNjYWxlKSwgR1RLX1BPU19UT1ApOwotICAgIGd0a19yYW5nZV9zZXRfdmFsdWUgKEdUS19SQU5HRSAoc2NhbGUpLCBnYWluKTsKLSAgICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QgKHNjYWxlLCAzNSwgMTUwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoc2NhbGUpLCAidmFsdWUtY2hhbmdlZCIsCi0gICAgICAgIEdfQ0FMTEJBQ0sgKG9uX2dhaW5fY2hhbmdlZCksIChncG9pbnRlcikgYmFuZCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChzY2FsZXNfaGJveCksIHNjYWxlLCBGQUxTRSwgRkFMU0UsIDApOwotCi0gICAgLyogQ3JlYXRlIGJhbmR3aWR0aCBzY2FsZSAqLwotICAgIHNjYWxlID0gZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsCi0gICAgICAgIDAuMCwgMjAwMDAuMCwgNS4wKTsKLSAgICBndGtfc2NhbGVfc2V0X2RyYXdfdmFsdWUgKEdUS19TQ0FMRSAoc2NhbGUpLCBUUlVFKTsKLSAgICBndGtfc2NhbGVfc2V0X3ZhbHVlX3BvcyAoR1RLX1NDQUxFIChzY2FsZSksIEdUS19QT1NfVE9QKTsKLSAgICBndGtfcmFuZ2Vfc2V0X3ZhbHVlIChHVEtfUkFOR0UgKHNjYWxlKSwgYncpOwotICAgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdCAoc2NhbGUsIDQ1LCAxNTApOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChzY2FsZSksICJ2YWx1ZS1jaGFuZ2VkIiwKLSAgICAgICAgR19DQUxMQkFDSyAob25fYmFuZHdpZHRoX2NoYW5nZWQpLCAoZ3BvaW50ZXIpIGJhbmQpOwotICAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAoc2NhbGVzX2hib3gpLCBzY2FsZSwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICAvKiBDcmVhdGUgZnJlcXVlbmN5IHNjYWxlICovCi0gICAgc2NhbGUgPSBndGtfc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwKLSAgICAgICAgMjAuMCwgMjAwMDAuMCwgNS4wKTsKLSAgICBndGtfc2NhbGVfc2V0X2RyYXdfdmFsdWUgKEdUS19TQ0FMRSAoc2NhbGUpLCBUUlVFKTsKLSAgICBndGtfc2NhbGVfc2V0X3ZhbHVlX3BvcyAoR1RLX1NDQUxFIChzY2FsZSksIEdUS19QT1NfVE9QKTsKLSAgICBndGtfcmFuZ2Vfc2V0X3ZhbHVlIChHVEtfUkFOR0UgKHNjYWxlKSwgZnJlcSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0IChzY2FsZSwgNDUsIDE1MCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHNjYWxlKSwgInZhbHVlLWNoYW5nZWQiLAotICAgICAgICBHX0NBTExCQUNLIChvbl9mcmVxX2NoYW5nZWQpLCAoZ3BvaW50ZXIpIGJhbmQpOwotICAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAoc2NhbGVzX2hib3gpLCBzY2FsZSwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoZnJhbWUpLCBzY2FsZXNfaGJveCk7Ci0KLSAgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGhib3gpLCBmcmFtZSwgVFJVRSwgVFJVRSwgMCk7Ci0gIH0KLQotICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKHZib3gpLCBoYm94LCBUUlVFLCBUUlVFLCAwKTsKLQotICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYXBwd2luZG93KSwgdmJveCk7Ci0gIGd0a193aWRnZXRfc2hvd19hbGwgKGFwcHdpbmRvdyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgZ3RrX21haW4gKCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2phY2svTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDYxY2JkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL2phY2svTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1pZiBIQVZFX0dUSwotR1RLX0VYQU1QTEVTPWphY2tfY2xpZW50Ci1lbHNlCi1HVEtfRVhBTVBMRVM9Ci1lbmRpZgotCi1ub2luc3RfUFJPR1JBTVMgPSAkKEdUS19FWEFNUExFUykKLQotamFja19jbGllbnRfU09VUkNFUyA9IGphY2tfY2xpZW50LmMKLWphY2tfY2xpZW50X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKSAkKEpBQ0tfQ0ZMQUdTKQotamFja19jbGllbnRfTERGTEFHUyA9ICQoR1NUX0xJQlMpICQoR1RLX0xJQlMpICQoSkFDS19MSUJTKQotCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvamFjay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4YjFlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODUzICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1ub2luc3RfUFJPR1JBTVMgPSAkKGFtX19FWEVFWFRfMSkKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzL2phY2sKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLUBIQVZFX0dUS19UUlVFQGFtX19FWEVFWFRfMSA9IGphY2tfY2xpZW50JChFWEVFWFQpCi1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1famFja19jbGllbnRfT0JKRUNUUyA9IGphY2tfY2xpZW50LWphY2tfY2xpZW50LiQoT0JKRVhUKQotamFja19jbGllbnRfT0JKRUNUUyA9ICQoYW1famFja19jbGllbnRfT0JKRUNUUykKLWphY2tfY2xpZW50X0xEQUREID0gJChMREFERCkKLUFNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWFtX192X2x0XzEgPSAKLWphY2tfY2xpZW50X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGphY2tfY2xpZW50X0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKGphY2tfY2xpZW50X0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGphY2tfY2xpZW50X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGphY2tfY2xpZW50X1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ASEFWRV9HVEtfRkFMU0VAR1RLX0VYQU1QTEVTID0gCi1ASEFWRV9HVEtfVFJVRUBHVEtfRVhBTVBMRVMgPSBqYWNrX2NsaWVudAotamFja19jbGllbnRfU09VUkNFUyA9IGphY2tfY2xpZW50LmMKLWphY2tfY2xpZW50X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKSAkKEpBQ0tfQ0ZMQUdTKQotamFja19jbGllbnRfTERGTEFHUyA9ICQoR1NUX0xJQlMpICQoR1RLX0xJQlMpICQoSkFDS19MSUJTKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvamFjay9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9qYWNrL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWphY2tfY2xpZW50JChFWEVFWFQpOiAkKGphY2tfY2xpZW50X09CSkVDVFMpICQoamFja19jbGllbnRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2phY2tfY2xpZW50X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGphY2tfY2xpZW50JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChqYWNrX2NsaWVudF9MSU5LKSAkKGphY2tfY2xpZW50X09CSkVDVFMpICQoamFja19jbGllbnRfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2phY2tfY2xpZW50LWphY2tfY2xpZW50LlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWphY2tfY2xpZW50LWphY2tfY2xpZW50Lm86IGphY2tfY2xpZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChqYWNrX2NsaWVudF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgamFja19jbGllbnQtamFja19jbGllbnQubyAtTUQgLU1QIC1NRiAkKERFUERJUikvamFja19jbGllbnQtamFja19jbGllbnQuVHBvIC1jIC1vIGphY2tfY2xpZW50LWphY2tfY2xpZW50Lm8gYHRlc3QgLWYgJ2phY2tfY2xpZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGphY2tfY2xpZW50LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2phY2tfY2xpZW50LWphY2tfY2xpZW50LlRwbyAkKERFUERJUikvamFja19jbGllbnQtamFja19jbGllbnQuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdqYWNrX2NsaWVudC5jJyBvYmplY3Q9J2phY2tfY2xpZW50LWphY2tfY2xpZW50Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGphY2tfY2xpZW50X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGphY2tfY2xpZW50LWphY2tfY2xpZW50Lm8gYHRlc3QgLWYgJ2phY2tfY2xpZW50LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGphY2tfY2xpZW50LmMKLQotamFja19jbGllbnQtamFja19jbGllbnQub2JqOiBqYWNrX2NsaWVudC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoamFja19jbGllbnRfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGphY2tfY2xpZW50LWphY2tfY2xpZW50Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvamFja19jbGllbnQtamFja19jbGllbnQuVHBvIC1jIC1vIGphY2tfY2xpZW50LWphY2tfY2xpZW50Lm9iaiBgaWYgdGVzdCAtZiAnamFja19jbGllbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdqYWNrX2NsaWVudC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9qYWNrX2NsaWVudC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9qYWNrX2NsaWVudC1qYWNrX2NsaWVudC5UcG8gJChERVBESVIpL2phY2tfY2xpZW50LWphY2tfY2xpZW50LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0namFja19jbGllbnQuYycgb2JqZWN0PSdqYWNrX2NsaWVudC1qYWNrX2NsaWVudC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGphY2tfY2xpZW50X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGphY2tfY2xpZW50LWphY2tfY2xpZW50Lm9iaiBgaWYgdGVzdCAtZiAnamFja19jbGllbnQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdqYWNrX2NsaWVudC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9qYWNrX2NsaWVudC5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2phY2svamFja19jbGllbnQuYyBiL3Rlc3RzL2V4YW1wbGVzL2phY2svamFja19jbGllbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5Y2VkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9qYWNrL2phY2tfY2xpZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBUaGlzIGFwcCBkZW1vbnN0cmF0ZXMgdGhlIGNyZWF0aW9uIGFuZCB1c2Ugb2YgYSBqYWNrIGNsaWVudCBpbiBjb25qdW5jdGlvbgotICogd2l0aCB0aGUgamFjayBwbHVnaW5zLiBUaGlzIHdheSwgYW4gYXBwbGljYXRpb24gY2FuIGNvbnRyb2wgdGhlIGphY2sgY2xpZW50Ci0gKiBkaXJlY3RseS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxqYWNrL2phY2suaD4KLQotc3RhdGljIGdib29sZWFuCi1xdWl0X2NiIChncG9pbnRlciBkYXRhKQotewotICBndGtfbWFpbl9xdWl0ICgpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBqYWNrX2NsaWVudF90ICpzcmNfY2xpZW50LCAqc2lua19jbGllbnQ7Ci0gIGphY2tfc3RhdHVzX3Qgc3RhdHVzOwotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKnNpbms7Ci0gIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHJldDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiBjcmVhdGUgamFjayBjbGllbnRzICovCi0gIHNyY19jbGllbnQgPSBqYWNrX2NsaWVudF9vcGVuICgic3JjX2NsaWVudCIsIEphY2tOb1N0YXJ0U2VydmVyLCAmc3RhdHVzKTsKLSAgaWYgKHNyY19jbGllbnQgPT0gTlVMTCkgewotICAgIGlmIChzdGF0dXMgJiBKYWNrU2VydmVyRmFpbGVkKQotICAgICAgZ19wcmludCAoIkpBQ0sgc2VydmVyIG5vdCBydW5uaW5nXG4iKTsKLSAgICBlbHNlCi0gICAgICBnX3ByaW50ICgiamFja19jbGllbnRfb3BlbigpIGZhaWxlZCwgc3RhdHVzID0gMHglMi4weFxuIiwgc3RhdHVzKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHNpbmtfY2xpZW50ID0gamFja19jbGllbnRfb3BlbiAoInNpbmtfY2xpZW50IiwgSmFja05vU3RhcnRTZXJ2ZXIsICZzdGF0dXMpOwotICBpZiAoc2lua19jbGllbnQgPT0gTlVMTCkgewotICAgIGlmIChzdGF0dXMgJiBKYWNrU2VydmVyRmFpbGVkKQotICAgICAgZ19wcmludCAoIkpBQ0sgc2VydmVyIG5vdCBydW5uaW5nXG4iKTsKLSAgICBlbHNlCi0gICAgICBnX3ByaW50ICgiamFja19jbGllbnRfb3BlbigpIGZhaWxlZCwgc3RhdHVzID0gMHglMi4weFxuIiwgc3RhdHVzKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIC8qIGNyZWF0ZSBnc3QgZWxlbWVudHMgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgibXlfcGlwZWxpbmUiKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJqYWNrYXVkaW9zcmMiLCBOVUxMKTsKLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImphY2thdWRpb3NpbmsiLCBOVUxMKTsKLQotICBnX29iamVjdF9zZXQgKHNyYywgImNsaWVudCIsIHNyY19jbGllbnQsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJjbGllbnQiLCBzaW5rX2NsaWVudCwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHNpbmssIE5VTEwpOwotCi0gIC8qIGxpbmsgZXZlcnl0aGluZyB0b2dldGhlciAqLwotICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKHNyYywgc2luaykpIHsKLSAgICBnX3ByaW50ICgiRmFpbGVkIHRvIGxpbmsgZWxlbWVudHMhXG4iKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIC8qIHJ1biAqLwotICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0gICAgZ19wcmludCAoIkZhaWxlZCB0byBzdGFydCB1cCBwaXBlbGluZSFcbiIpOwotICAgIHJldHVybiAxOwotICB9Ci0KLSAgLyogcXVpdCBhZnRlciA1IHNlY29uZHMgKi8KLSAgZ190aW1lb3V0X2FkZF9zZWNvbmRzICg1LCAoR1NvdXJjZUZ1bmMpIHF1aXRfY2IsIE5VTEwpOwotICBndGtfbWFpbiAoKTsKLQotICAvKiBjbGVhbiB1cCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL2xldmVsL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Y2E3MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IGxldmVsLWV4YW1wbGUKLWxldmVsX2V4YW1wbGVfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotbGV2ZWxfZXhhbXBsZV9MREFERCA9ICQoR1NUX0xJQlMpICQoTElCTSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvbGV2ZWwvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9sZXZlbC9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE3ZTdiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9sZXZlbC9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDg1MSArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gbGV2ZWwtZXhhbXBsZSQoRVhFRVhUKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvbGV2ZWwKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLVBST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCi1sZXZlbF9leGFtcGxlX1NPVVJDRVMgPSBsZXZlbC1leGFtcGxlLmMKLWxldmVsX2V4YW1wbGVfT0JKRUNUUyA9IGxldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS4kKE9CSkVYVCkKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1sZXZlbF9leGFtcGxlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1sZXZlbF9leGFtcGxlX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGxldmVsX2V4YW1wbGVfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9IGxldmVsLWV4YW1wbGUuYwotRElTVF9TT1VSQ0VTID0gbGV2ZWwtZXhhbXBsZS5jCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1sZXZlbF9leGFtcGxlX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLWxldmVsX2V4YW1wbGVfTERBREQgPSAkKEdTVF9MSUJTKSAkKExJQk0pCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9sZXZlbC9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9sZXZlbC9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1sZXZlbC1leGFtcGxlJChFWEVFWFQpOiAkKGxldmVsX2V4YW1wbGVfT0JKRUNUUykgJChsZXZlbF9leGFtcGxlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9sZXZlbF9leGFtcGxlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGxldmVsLWV4YW1wbGUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGxldmVsX2V4YW1wbGVfTElOSykgJChsZXZlbF9leGFtcGxlX09CSkVDVFMpICQobGV2ZWxfZXhhbXBsZV9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbGV2ZWxfZXhhbXBsZS1sZXZlbC1leGFtcGxlLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWxldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS5vOiBsZXZlbC1leGFtcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsZXZlbF9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBsZXZlbF9leGFtcGxlLWxldmVsLWV4YW1wbGUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvbGV2ZWxfZXhhbXBsZS1sZXZlbC1leGFtcGxlLlRwbyAtYyAtbyBsZXZlbF9leGFtcGxlLWxldmVsLWV4YW1wbGUubyBgdGVzdCAtZiAnbGV2ZWwtZXhhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsZXZlbC1leGFtcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS5UcG8gJChERVBESVIpL2xldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2xldmVsLWV4YW1wbGUuYycgb2JqZWN0PSdsZXZlbF9leGFtcGxlLWxldmVsLWV4YW1wbGUubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGV2ZWxfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBsZXZlbF9leGFtcGxlLWxldmVsLWV4YW1wbGUubyBgdGVzdCAtZiAnbGV2ZWwtZXhhbXBsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BsZXZlbC1leGFtcGxlLmMKLQotbGV2ZWxfZXhhbXBsZS1sZXZlbC1leGFtcGxlLm9iajogbGV2ZWwtZXhhbXBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGV2ZWxfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgbGV2ZWxfZXhhbXBsZS1sZXZlbC1leGFtcGxlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvbGV2ZWxfZXhhbXBsZS1sZXZlbC1leGFtcGxlLlRwbyAtYyAtbyBsZXZlbF9leGFtcGxlLWxldmVsLWV4YW1wbGUub2JqIGBpZiB0ZXN0IC1mICdsZXZlbC1leGFtcGxlLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnbGV2ZWwtZXhhbXBsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9sZXZlbC1leGFtcGxlLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2xldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS5UcG8gJChERVBESVIpL2xldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2xldmVsLWV4YW1wbGUuYycgb2JqZWN0PSdsZXZlbF9leGFtcGxlLWxldmVsLWV4YW1wbGUub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsZXZlbF9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGxldmVsX2V4YW1wbGUtbGV2ZWwtZXhhbXBsZS5vYmogYGlmIHRlc3QgLWYgJ2xldmVsLWV4YW1wbGUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdsZXZlbC1leGFtcGxlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2xldmVsLWV4YW1wbGUuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmMgYi90ZXN0cy9leGFtcGxlcy9sZXZlbC9sZXZlbC1leGFtcGxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NTMxNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvbGV2ZWwvbGV2ZWwtZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUKLSAqICAgICAgICAgICBUaG9tYXMgVmFuZGVyIFN0aWNoZWxlIDx0aG9tYXMgYXQgYXBlc3RhYXJ0IGRvdCBvcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2RlZmluZSBHTElCX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIGdib29sZWFuCi1tZXNzYWdlX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0KLSAgaWYgKG1lc3NhZ2UtPnR5cGUgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyk7Ci0KLSAgICBpZiAoc3RyY21wIChuYW1lLCAibGV2ZWwiKSA9PSAwKSB7Ci0gICAgICBnaW50IGNoYW5uZWxzOwotICAgICAgR3N0Q2xvY2tUaW1lIGVuZHRpbWU7Ci0gICAgICBnZG91YmxlIHJtc19kQiwgcGVha19kQiwgZGVjYXlfZEI7Ci0gICAgICBnZG91YmxlIHJtczsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqYXJyYXlfdmFsOwotICAgICAgY29uc3QgR1ZhbHVlICp2YWx1ZTsKLSAgICAgIEdWYWx1ZUFycmF5ICpybXNfYXJyLCAqcGVha19hcnIsICpkZWNheV9hcnI7Ci0gICAgICBnaW50IGk7Ci0KLSAgICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgImVuZHRpbWUiLCAmZW5kdGltZSkpCi0gICAgICAgIGdfd2FybmluZyAoIkNvdWxkIG5vdCBwYXJzZSBlbmR0aW1lIik7Ci0KLSAgICAgIC8qIHRoZSB2YWx1ZXMgYXJlIHBhY2tlZCBpbnRvIEdWYWx1ZUFycmF5cyB3aXRoIHRoZSB2YWx1ZSBwZXIgY2hhbm5lbCAqLwotICAgICAgYXJyYXlfdmFsID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJybXMiKTsKLSAgICAgIHJtc19hcnIgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKGFycmF5X3ZhbCk7Ci0KLSAgICAgIGFycmF5X3ZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAicGVhayIpOwotICAgICAgcGVha19hcnIgPSAoR1ZhbHVlQXJyYXkgKikgZ192YWx1ZV9nZXRfYm94ZWQgKGFycmF5X3ZhbCk7Ci0KLSAgICAgIGFycmF5X3ZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAiZGVjYXkiKTsKLSAgICAgIGRlY2F5X2FyciA9IChHVmFsdWVBcnJheSAqKSBnX3ZhbHVlX2dldF9ib3hlZCAoYXJyYXlfdmFsKTsKLQotICAgICAgLyogd2UgY2FuIGdldCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGFzIHRoZSBsZW5ndGggb2YgYW55IG9mIHRoZSB2YWx1ZQotICAgICAgICogYXJyYXlzICovCi0gICAgICBjaGFubmVscyA9IHJtc19hcnItPm5fdmFsdWVzOwotICAgICAgZ19wcmludCAoImVuZHRpbWU6ICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBjaGFubmVsczogJWRcbiIsCi0gICAgICAgICAgR1NUX1RJTUVfQVJHUyAoZW5kdGltZSksIGNoYW5uZWxzKTsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGFubmVsczsgKytpKSB7Ci0KLSAgICAgICAgZ19wcmludCAoImNoYW5uZWwgJWRcbiIsIGkpOwotICAgICAgICB2YWx1ZSA9IGdfdmFsdWVfYXJyYXlfZ2V0X250aCAocm1zX2FyciwgaSk7Ci0gICAgICAgIHJtc19kQiA9IGdfdmFsdWVfZ2V0X2RvdWJsZSAodmFsdWUpOwotCi0gICAgICAgIHZhbHVlID0gZ192YWx1ZV9hcnJheV9nZXRfbnRoIChwZWFrX2FyciwgaSk7Ci0gICAgICAgIHBlYWtfZEIgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLQotICAgICAgICB2YWx1ZSA9IGdfdmFsdWVfYXJyYXlfZ2V0X250aCAoZGVjYXlfYXJyLCBpKTsKLSAgICAgICAgZGVjYXlfZEIgPSBnX3ZhbHVlX2dldF9kb3VibGUgKHZhbHVlKTsKLSAgICAgICAgZ19wcmludCAoIiAgICBSTVM6ICVmIGRCLCBwZWFrOiAlZiBkQiwgZGVjYXk6ICVmIGRCXG4iLAotICAgICAgICAgICAgcm1zX2RCLCBwZWFrX2RCLCBkZWNheV9kQik7Ci0KLSAgICAgICAgLyogY29udmVydGluZyBmcm9tIGRCIHRvIG5vcm1hbCBnaXZlcyB1cyBhIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgKi8KLSAgICAgICAgcm1zID0gcG93ICgxMCwgcm1zX2RCIC8gMjApOwotICAgICAgICBnX3ByaW50ICgiICAgIG5vcm1hbGl6ZWQgcm1zIHZhbHVlOiAlZlxuIiwgcm1zKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLyogd2UgaGFuZGxlZCB0aGUgbWVzc2FnZSB3ZSB3YW50LCBhbmQgaWdub3JlZCB0aGUgb25lcyB3ZSBkaWRuJ3Qgd2FudC4KLSAgICogc28gdGhlIGNvcmUgY2FuIHVucmVmIHRoZSBtZXNzYWdlIGZvciB1cyAqLwotICByZXR1cm4gVFJVRTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICphdWRpb3Rlc3RzcmMsICphdWRpb2NvbnZlcnQsICpsZXZlbCwgKmZha2VzaW5rOwotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0QnVzICpidXM7Ci0gIGd1aW50IHdhdGNoX2lkOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgiYXVkaW8veC1yYXcsY2hhbm5lbHM9MiIpOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSk7Ci0gIGF1ZGlvdGVzdHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsIE5VTEwpOwotICBnX2Fzc2VydCAoYXVkaW90ZXN0c3JjKTsKLSAgYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChhdWRpb2NvbnZlcnQpOwotICBsZXZlbCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImxldmVsIiwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChsZXZlbCk7Ci0gIGZha2VzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCBOVUxMKTsKLSAgZ19hc3NlcnQgKGZha2VzaW5rKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGF1ZGlvdGVzdHNyYywgYXVkaW9jb252ZXJ0LCBsZXZlbCwKLSAgICAgIGZha2VzaW5rLCBOVUxMKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChhdWRpb3Rlc3RzcmMsIGF1ZGlvY29udmVydCkpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIGF1ZGlvdGVzdHNyYyBhbmQgYXVkaW9jb252ZXJ0Iik7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAoYXVkaW9jb252ZXJ0LCBsZXZlbCwgY2FwcykpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIGF1ZGlvY29udmVydCBhbmQgbGV2ZWwiKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChsZXZlbCwgZmFrZXNpbmspKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBsZXZlbCBhbmQgZmFrZXNpbmsiKTsKLQotICAvKiBtYWtlIHN1cmUgd2UnbGwgZ2V0IG1lc3NhZ2VzICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGxldmVsKSwgInBvc3QtbWVzc2FnZXMiLCBUUlVFLCBOVUxMKTsKLSAgLyogcnVuIHN5bmNlZCBhbmQgbm90IGFzIGZhc3QgYXMgd2UgY2FuICovCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKGZha2VzaW5rKSwgInN5bmMiLCBUUlVFLCBOVUxMKTsKLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChwaXBlbGluZSk7Ci0gIHdhdGNoX2lkID0gZ3N0X2J1c19hZGRfd2F0Y2ggKGJ1cywgbWVzc2FnZV9oYW5kbGVyLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogd2UgbmVlZCB0byBydW4gYSBHTGliIG1haW4gbG9vcCB0byBnZXQgdGhlIG1lc3NhZ2VzICovCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnX3NvdXJjZV9yZW1vdmUgKHdhdGNoX2lkKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlLmFtIGIvdGVzdHMvZXhhbXBsZXMvcHVsc2UvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OTY4Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcHVsc2UvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IHB1bHNlCi1wdWxzZV9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotcHVsc2VfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlLmluIGIvdGVzdHMvZXhhbXBsZXMvcHVsc2UvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNDdkMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcHVsc2UvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NTEgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IHB1bHNlJChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9wdWxzZQotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLXB1bHNlX1NPVVJDRVMgPSBwdWxzZS5jCi1wdWxzZV9PQkpFQ1RTID0gcHVsc2UtcHVsc2UuJChPQkpFWFQpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotcHVsc2VfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1wdWxzZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChwdWxzZV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gcHVsc2UuYwotRElTVF9TT1VSQ0VTID0gcHVsc2UuYwotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotcHVsc2VfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykKLXB1bHNlX0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3B1bHNlL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLXB1bHNlJChFWEVFWFQpOiAkKHB1bHNlX09CSkVDVFMpICQocHVsc2VfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3B1bHNlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHB1bHNlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChwdWxzZV9MSU5LKSAkKHB1bHNlX09CSkVDVFMpICQocHVsc2VfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3B1bHNlLXB1bHNlLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLXB1bHNlLXB1bHNlLm86IHB1bHNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwdWxzZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgcHVsc2UtcHVsc2UubyAtTUQgLU1QIC1NRiAkKERFUERJUikvcHVsc2UtcHVsc2UuVHBvIC1jIC1vIHB1bHNlLXB1bHNlLm8gYHRlc3QgLWYgJ3B1bHNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1bHNlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3B1bHNlLXB1bHNlLlRwbyAkKERFUERJUikvcHVsc2UtcHVsc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdwdWxzZS5jJyBvYmplY3Q9J3B1bHNlLXB1bHNlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHB1bHNlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHB1bHNlLXB1bHNlLm8gYHRlc3QgLWYgJ3B1bHNlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHB1bHNlLmMKLQotcHVsc2UtcHVsc2Uub2JqOiBwdWxzZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocHVsc2VfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHB1bHNlLXB1bHNlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvcHVsc2UtcHVsc2UuVHBvIC1jIC1vIHB1bHNlLXB1bHNlLm9iaiBgaWYgdGVzdCAtZiAncHVsc2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwdWxzZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wdWxzZS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9wdWxzZS1wdWxzZS5UcG8gJChERVBESVIpL3B1bHNlLXB1bHNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ncHVsc2UuYycgb2JqZWN0PSdwdWxzZS1wdWxzZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHB1bHNlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHB1bHNlLXB1bHNlLm9iaiBgaWYgdGVzdCAtZiAncHVsc2UuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdwdWxzZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9wdWxzZS5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3B1bHNlL3B1bHNlLmMgYi90ZXN0cy9leGFtcGxlcy9wdWxzZS9wdWxzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzUyNDRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3B1bHNlL3B1bHNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnMgYXQgZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpZiAwCi0jaW5jbHVkZSA8Z3N0L2ludGVyZmFjZXMvcHJvcGVydHlwcm9iZS5oPgotCi1zdGF0aWMgdm9pZAotdGVzdF9lbGVtZW50IChjb25zdCBnY2hhciAqIG5hbWUpCi17Ci0gIEdzdEVsZW1lbnQgKmVsZW1lbnQ7Ci0gIEdzdFByb3BlcnR5UHJvYmUgKnByb2JlID0gTlVMTDsKLSAgY29uc3QgR1BhcmFtU3BlYyAqcHNwZWMgPSBOVUxMOwotICBHVmFsdWVBcnJheSAqYXJyYXkgPSBOVUxMOwotICBndWludCBpOwotCi0gIGdfcHJpbnQgKCJ0ZXN0aW5nIGVsZW1lbnQgJXNcbiIsIG5hbWUpOwotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChuYW1lLCBOVUxMKTsKLSAgZ19hc3NlcnQgKGVsZW1lbnQpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLSAgcHJvYmUgPSBHU1RfUFJPUEVSVFlfUFJPQkUgKGVsZW1lbnQpOwotICBwc3BlYyA9IGdzdF9wcm9wZXJ0eV9wcm9iZV9nZXRfcHJvcGVydHkgKHByb2JlLCAiZGV2aWNlIik7Ci0KLSAgYXJyYXkgPSBnc3RfcHJvcGVydHlfcHJvYmVfcHJvYmVfYW5kX2dldF92YWx1ZXMgKHByb2JlLCBwc3BlYyk7Ci0gIGdfYXNzZXJ0IChhcnJheSk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IGFycmF5LT5uX3ZhbHVlczsgaSsrKSB7Ci0gICAgR1ZhbHVlICpkZXZpY2UgPSBOVUxMOwotICAgIGdjaGFyICpuYW1lID0gTlVMTDsKLQotICAgIGRldmljZSA9IGdfdmFsdWVfYXJyYXlfZ2V0X250aCAoYXJyYXksIGkpOwotICAgIGdfb2JqZWN0X3NldF9wcm9wZXJ0eSAoR19PQkpFQ1QgKGVsZW1lbnQpLCAiZGV2aWNlIiwgZGV2aWNlKTsKLSAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChlbGVtZW50KSwgImRldmljZS1uYW1lIiwgJm5hbWUsIE5VTEwpOwotCi0gICAgZ19wcmludCAoImRldmljZTogJXMgKCVzKVxuIiwgZ192YWx1ZV9nZXRfc3RyaW5nIChkZXZpY2UpLAotICAgICAgICBHU1RfU1RSX05VTEwgKG5hbWUpKTsKLSAgfQotICBnX3ZhbHVlX2FycmF5X2ZyZWUgKGFycmF5KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoR1NUX09CSkVDVCAoZWxlbWVudCkpOwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSNpZiAwCi0gIHRlc3RfZWxlbWVudCAoInB1bHNlc2luayIpOwotICB0ZXN0X2VsZW1lbnQgKCJwdWxzZXNyYyIpOwotI2VuZGlmCi0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwYWIyYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcnRwL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotbm9pbnN0X1BST0dSQU1TID0gc2VydmVyLWFsc2FzcmMtUENNQSBjbGllbnQtUENNQSBcCi0JY2xpZW50LXJ0cGF1eCBzZXJ2ZXItcnRwYXV4Ci0KLSMgRklYTUUgMC4xMTogaWdub3JlIEdWYWx1ZUFycmF5IHdhcm5pbmdzIGZvciBub3cgdW50aWwgdGhpcyBpcyBzb3J0ZWQKLUVSUk9SX0NGTEFHUz0KLQotc2VydmVyX3J0cGF1eF9TT1VSQ0VTID0gc2VydmVyLXJ0cGF1eC5jCi1zZXJ2ZXJfcnRwYXV4X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLXNlcnZlcl9ydHBhdXhfTERBREQgPSAkKEdTVF9MSUJTKQotCi1jbGllbnRfcnRwYXV4X1NPVVJDRVMgPSBjbGllbnQtcnRwYXV4LmMKLWNsaWVudF9ydHBhdXhfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKQotY2xpZW50X3J0cGF1eF9MREFERCA9ICQoR1NUX0xJQlMpCi0KLXNlcnZlcl9hbHNhc3JjX1BDTUFfU09VUkNFUyA9IHNlcnZlci1hbHNhc3JjLVBDTUEuYwotc2VydmVyX2Fsc2FzcmNfUENNQV9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpCi1zZXJ2ZXJfYWxzYXNyY19QQ01BX0xEQUREID0gJChHU1RfTElCUykgJChMSUJNKQotCi1jbGllbnRfUENNQV9TT1VSQ0VTID0gY2xpZW50LVBDTUEuYwotY2xpZW50X1BDTUFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotY2xpZW50X1BDTUFfTERBREQgPSAkKEdTVF9MSUJTKSAkKExJQk0pCi0KLW5vaW5zdF9TQ1JJUFRTPWNsaWVudC1IMjYzcC1BTVIuc2ggXAotICAgICAgICAgICAgICAgY2xpZW50LUgyNjNwLVBDTUEuc2ggXAotICAgICAgICAgICAgICAgY2xpZW50LUgyNjQtUENNQS5zaCBcCi0gICAgICAgICAgICAgICBjbGllbnQtVlA4LU9QVVMuc2ggXAotICAgICAgICAgICAgICAgY2xpZW50LVBDTUEuc2ggXAotICAgICAgICAgICAgICAgc2VydmVyLWFsc2FzcmMtUENNQS5zaCBcCi0gICAgICAgICAgICAgICBzZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaCBcCi0gICAgICAgICAgICAgICBzZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaCBcCi0gICAgICAgICAgICAgICBzZXJ2ZXItVlRTLUgyNjNwLUFUUy1QQ01BLnNoIFwKLSAgICAgICAgICAgICAgIHNlcnZlci1WVFMtVlA4LUFUUy1PUFVTLnNoCi0KLUVYVFJBX0RJU1Q9ICQobm9pbnN0X1NDUklQVFMpIFwKLQkgICAgY2xpZW50LUgyNjNwLVBDTUEuc2RwIFwKLSAgICAgICAgICAgIGNsaWVudC1IMjY0LVBDTUEuc2RwCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZjQxMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcnRwL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTYwICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IHNlcnZlci1hbHNhc3JjLVBDTUEkKEVYRUVYVCkgY2xpZW50LVBDTUEkKEVYRUVYVCkgXAotCWNsaWVudC1ydHBhdXgkKEVYRUVYVCkgc2VydmVyLXJ0cGF1eCQoRVhFRVhUKQotc3ViZGlyID0gdGVzdHMvZXhhbXBsZXMvcnRwCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fY2xpZW50X1BDTUFfT0JKRUNUUyA9IGNsaWVudF9QQ01BLWNsaWVudC1QQ01BLiQoT0JKRVhUKQotY2xpZW50X1BDTUFfT0JKRUNUUyA9ICQoYW1fY2xpZW50X1BDTUFfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1jbGllbnRfUENNQV9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1jbGllbnRfUENNQV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChjbGllbnRfUENNQV9DRkxBR1MpIFwKLQkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1hbV9jbGllbnRfcnRwYXV4X09CSkVDVFMgPSBjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXguJChPQkpFWFQpCi1jbGllbnRfcnRwYXV4X09CSkVDVFMgPSAkKGFtX2NsaWVudF9ydHBhdXhfT0JKRUNUUykKLWNsaWVudF9ydHBhdXhfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1jbGllbnRfcnRwYXV4X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGNsaWVudF9ydHBhdXhfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotYW1fc2VydmVyX2Fsc2FzcmNfUENNQV9PQkpFQ1RTID0gIFwKLQlzZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEuJChPQkpFWFQpCi1zZXJ2ZXJfYWxzYXNyY19QQ01BX09CSkVDVFMgPSAkKGFtX3NlcnZlcl9hbHNhc3JjX1BDTUFfT0JKRUNUUykKLXNlcnZlcl9hbHNhc3JjX1BDTUFfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXNlcnZlcl9hbHNhc3JjX1BDTUFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKHNlcnZlcl9hbHNhc3JjX1BDTUFfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotYW1fc2VydmVyX3J0cGF1eF9PQkpFQ1RTID0gc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4LiQoT0JKRVhUKQotc2VydmVyX3J0cGF1eF9PQkpFQ1RTID0gJChhbV9zZXJ2ZXJfcnRwYXV4X09CSkVDVFMpCi1zZXJ2ZXJfcnRwYXV4X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotc2VydmVyX3J0cGF1eF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChzZXJ2ZXJfcnRwYXV4X0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLVNDUklQVFMgPSAkKG5vaW5zdF9TQ1JJUFRTKQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQoY2xpZW50X1BDTUFfU09VUkNFUykgJChjbGllbnRfcnRwYXV4X1NPVVJDRVMpIFwKLQkkKHNlcnZlcl9hbHNhc3JjX1BDTUFfU09VUkNFUykgJChzZXJ2ZXJfcnRwYXV4X1NPVVJDRVMpCi1ESVNUX1NPVVJDRVMgPSAkKGNsaWVudF9QQ01BX1NPVVJDRVMpICQoY2xpZW50X3J0cGF1eF9TT1VSQ0VTKSBcCi0JJChzZXJ2ZXJfYWxzYXNyY19QQ01BX1NPVVJDRVMpICQoc2VydmVyX3J0cGF1eF9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi0KLSMgRklYTUUgMC4xMTogaWdub3JlIEdWYWx1ZUFycmF5IHdhcm5pbmdzIGZvciBub3cgdW50aWwgdGhpcyBpcyBzb3J0ZWQKLUVSUk9SX0NGTEFHUyA9IAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotc2VydmVyX3J0cGF1eF9TT1VSQ0VTID0gc2VydmVyLXJ0cGF1eC5jCi1zZXJ2ZXJfcnRwYXV4X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLXNlcnZlcl9ydHBhdXhfTERBREQgPSAkKEdTVF9MSUJTKQotY2xpZW50X3J0cGF1eF9TT1VSQ0VTID0gY2xpZW50LXJ0cGF1eC5jCi1jbGllbnRfcnRwYXV4X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykgJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykKLWNsaWVudF9ydHBhdXhfTERBREQgPSAkKEdTVF9MSUJTKQotc2VydmVyX2Fsc2FzcmNfUENNQV9TT1VSQ0VTID0gc2VydmVyLWFsc2FzcmMtUENNQS5jCi1zZXJ2ZXJfYWxzYXNyY19QQ01BX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLXNlcnZlcl9hbHNhc3JjX1BDTUFfTERBREQgPSAkKEdTVF9MSUJTKSAkKExJQk0pCi1jbGllbnRfUENNQV9TT1VSQ0VTID0gY2xpZW50LVBDTUEuYwotY2xpZW50X1BDTUFfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotY2xpZW50X1BDTUFfTERBREQgPSAkKEdTVF9MSUJTKSAkKExJQk0pCi1ub2luc3RfU0NSSVBUUyA9IGNsaWVudC1IMjYzcC1BTVIuc2ggXAotICAgICAgICAgICAgICAgY2xpZW50LUgyNjNwLVBDTUEuc2ggXAotICAgICAgICAgICAgICAgY2xpZW50LUgyNjQtUENNQS5zaCBcCi0gICAgICAgICAgICAgICBjbGllbnQtVlA4LU9QVVMuc2ggXAotICAgICAgICAgICAgICAgY2xpZW50LVBDTUEuc2ggXAotICAgICAgICAgICAgICAgc2VydmVyLWFsc2FzcmMtUENNQS5zaCBcCi0gICAgICAgICAgICAgICBzZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaCBcCi0gICAgICAgICAgICAgICBzZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaCBcCi0gICAgICAgICAgICAgICBzZXJ2ZXItVlRTLUgyNjNwLUFUUy1QQ01BLnNoIFwKLSAgICAgICAgICAgICAgIHNlcnZlci1WVFMtVlA4LUFUUy1PUFVTLnNoCi0KLUVYVFJBX0RJU1QgPSAkKG5vaW5zdF9TQ1JJUFRTKSBcCi0JICAgIGNsaWVudC1IMjYzcC1QQ01BLnNkcCBcCi0gICAgICAgICAgICBjbGllbnQtSDI2NC1QQ01BLnNkcAotCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9ydHAvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvcnRwL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWNsaWVudC1QQ01BJChFWEVFWFQpOiAkKGNsaWVudF9QQ01BX09CSkVDVFMpICQoY2xpZW50X1BDTUFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NsaWVudF9QQ01BX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGNsaWVudC1QQ01BJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChjbGllbnRfUENNQV9MSU5LKSAkKGNsaWVudF9QQ01BX09CSkVDVFMpICQoY2xpZW50X1BDTUFfTERBREQpICQoTElCUykKLQotY2xpZW50LXJ0cGF1eCQoRVhFRVhUKTogJChjbGllbnRfcnRwYXV4X09CSkVDVFMpICQoY2xpZW50X3J0cGF1eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfY2xpZW50X3J0cGF1eF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBjbGllbnQtcnRwYXV4JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChjbGllbnRfcnRwYXV4X0xJTkspICQoY2xpZW50X3J0cGF1eF9PQkpFQ1RTKSAkKGNsaWVudF9ydHBhdXhfTERBREQpICQoTElCUykKLQotc2VydmVyLWFsc2FzcmMtUENNQSQoRVhFRVhUKTogJChzZXJ2ZXJfYWxzYXNyY19QQ01BX09CSkVDVFMpICQoc2VydmVyX2Fsc2FzcmNfUENNQV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfc2VydmVyX2Fsc2FzcmNfUENNQV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBzZXJ2ZXItYWxzYXNyYy1QQ01BJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChzZXJ2ZXJfYWxzYXNyY19QQ01BX0xJTkspICQoc2VydmVyX2Fsc2FzcmNfUENNQV9PQkpFQ1RTKSAkKHNlcnZlcl9hbHNhc3JjX1BDTUFfTERBREQpICQoTElCUykKLQotc2VydmVyLXJ0cGF1eCQoRVhFRVhUKTogJChzZXJ2ZXJfcnRwYXV4X09CSkVDVFMpICQoc2VydmVyX3J0cGF1eF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfc2VydmVyX3J0cGF1eF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBzZXJ2ZXItcnRwYXV4JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChzZXJ2ZXJfcnRwYXV4X0xJTkspICQoc2VydmVyX3J0cGF1eF9PQkpFQ1RTKSAkKHNlcnZlcl9ydHBhdXhfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2NsaWVudF9QQ01BLWNsaWVudC1QQ01BLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXguUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NlcnZlcl9hbHNhc3JjX1BDTUEtc2VydmVyLWFsc2FzcmMtUENNQS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4LlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLWNsaWVudF9QQ01BLWNsaWVudC1QQ01BLm86IGNsaWVudC1QQ01BLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfUENNQV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2xpZW50X1BDTUEtY2xpZW50LVBDTUEubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xpZW50X1BDTUEtY2xpZW50LVBDTUEuVHBvIC1jIC1vIGNsaWVudF9QQ01BLWNsaWVudC1QQ01BLm8gYHRlc3QgLWYgJ2NsaWVudC1QQ01BLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNsaWVudC1QQ01BLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsaWVudF9QQ01BLWNsaWVudC1QQ01BLlRwbyAkKERFUERJUikvY2xpZW50X1BDTUEtY2xpZW50LVBDTUEuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdjbGllbnQtUENNQS5jJyBvYmplY3Q9J2NsaWVudF9QQ01BLWNsaWVudC1QQ01BLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNsaWVudF9QQ01BX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNsaWVudF9QQ01BLWNsaWVudC1QQ01BLm8gYHRlc3QgLWYgJ2NsaWVudC1QQ01BLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNsaWVudC1QQ01BLmMKLQotY2xpZW50X1BDTUEtY2xpZW50LVBDTUEub2JqOiBjbGllbnQtUENNQS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X1BDTUFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNsaWVudF9QQ01BLWNsaWVudC1QQ01BLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xpZW50X1BDTUEtY2xpZW50LVBDTUEuVHBvIC1jIC1vIGNsaWVudF9QQ01BLWNsaWVudC1QQ01BLm9iaiBgaWYgdGVzdCAtZiAnY2xpZW50LVBDTUEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjbGllbnQtUENNQS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jbGllbnQtUENNQS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9jbGllbnRfUENNQS1jbGllbnQtUENNQS5UcG8gJChERVBESVIpL2NsaWVudF9QQ01BLWNsaWVudC1QQ01BLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2xpZW50LVBDTUEuYycgb2JqZWN0PSdjbGllbnRfUENNQS1jbGllbnQtUENNQS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNsaWVudF9QQ01BX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNsaWVudF9QQ01BLWNsaWVudC1QQ01BLm9iaiBgaWYgdGVzdCAtZiAnY2xpZW50LVBDTUEuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjbGllbnQtUENNQS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jbGllbnQtUENNQS5jJzsgZmlgCi0KLWNsaWVudF9ydHBhdXgtY2xpZW50LXJ0cGF1eC5vOiBjbGllbnQtcnRwYXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfcnRwYXV4X0NGTEFHUykgJChDRkxBR1MpIC1NVCBjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXgubyAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xpZW50X3J0cGF1eC1jbGllbnQtcnRwYXV4LlRwbyAtYyAtbyBjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXgubyBgdGVzdCAtZiAnY2xpZW50LXJ0cGF1eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjbGllbnQtcnRwYXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsaWVudF9ydHBhdXgtY2xpZW50LXJ0cGF1eC5UcG8gJChERVBESVIpL2NsaWVudF9ydHBhdXgtY2xpZW50LXJ0cGF1eC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NsaWVudC1ydHBhdXguYycgb2JqZWN0PSdjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXgubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X3J0cGF1eF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXgubyBgdGVzdCAtZiAnY2xpZW50LXJ0cGF1eC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BjbGllbnQtcnRwYXV4LmMKLQotY2xpZW50X3J0cGF1eC1jbGllbnQtcnRwYXV4Lm9iajogY2xpZW50LXJ0cGF1eC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoY2xpZW50X3J0cGF1eF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgY2xpZW50X3J0cGF1eC1jbGllbnQtcnRwYXV4Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvY2xpZW50X3J0cGF1eC1jbGllbnQtcnRwYXV4LlRwbyAtYyAtbyBjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXgub2JqIGBpZiB0ZXN0IC1mICdjbGllbnQtcnRwYXV4LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnY2xpZW50LXJ0cGF1eC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9jbGllbnQtcnRwYXV4LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2NsaWVudF9ydHBhdXgtY2xpZW50LXJ0cGF1eC5UcG8gJChERVBESVIpL2NsaWVudF9ydHBhdXgtY2xpZW50LXJ0cGF1eC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2NsaWVudC1ydHBhdXguYycgb2JqZWN0PSdjbGllbnRfcnRwYXV4LWNsaWVudC1ydHBhdXgub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjbGllbnRfcnRwYXV4X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNsaWVudF9ydHBhdXgtY2xpZW50LXJ0cGF1eC5vYmogYGlmIHRlc3QgLWYgJ2NsaWVudC1ydHBhdXguYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjbGllbnQtcnRwYXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NsaWVudC1ydHBhdXguYyc7IGZpYAotCi1zZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEubzogc2VydmVyLWFsc2FzcmMtUENNQS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc2VydmVyX2Fsc2FzcmNfUENNQV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc2VydmVyX2Fsc2FzcmNfUENNQS1zZXJ2ZXItYWxzYXNyYy1QQ01BLm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3NlcnZlcl9hbHNhc3JjX1BDTUEtc2VydmVyLWFsc2FzcmMtUENNQS5UcG8gLWMgLW8gc2VydmVyX2Fsc2FzcmNfUENNQS1zZXJ2ZXItYWxzYXNyYy1QQ01BLm8gYHRlc3QgLWYgJ3NlcnZlci1hbHNhc3JjLVBDTUEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VydmVyLWFsc2FzcmMtUENNQS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEuVHBvICQoREVQRElSKS9zZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzZXJ2ZXItYWxzYXNyYy1QQ01BLmMnIG9iamVjdD0nc2VydmVyX2Fsc2FzcmNfUENNQS1zZXJ2ZXItYWxzYXNyYy1QQ01BLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNlcnZlcl9hbHNhc3JjX1BDTUFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc2VydmVyX2Fsc2FzcmNfUENNQS1zZXJ2ZXItYWxzYXNyYy1QQ01BLm8gYHRlc3QgLWYgJ3NlcnZlci1hbHNhc3JjLVBDTUEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc2VydmVyLWFsc2FzcmMtUENNQS5jCi0KLXNlcnZlcl9hbHNhc3JjX1BDTUEtc2VydmVyLWFsc2FzcmMtUENNQS5vYmo6IHNlcnZlci1hbHNhc3JjLVBDTUEuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNlcnZlcl9hbHNhc3JjX1BDTUFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNlcnZlcl9hbHNhc3JjX1BDTUEtc2VydmVyLWFsc2FzcmMtUENNQS5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3NlcnZlcl9hbHNhc3JjX1BDTUEtc2VydmVyLWFsc2FzcmMtUENNQS5UcG8gLWMgLW8gc2VydmVyX2Fsc2FzcmNfUENNQS1zZXJ2ZXItYWxzYXNyYy1QQ01BLm9iaiBgaWYgdGVzdCAtZiAnc2VydmVyLWFsc2FzcmMtUENNQS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NlcnZlci1hbHNhc3JjLVBDTUEuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2VydmVyLWFsc2FzcmMtUENNQS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEuVHBvICQoREVQRElSKS9zZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzZXJ2ZXItYWxzYXNyYy1QQ01BLmMnIG9iamVjdD0nc2VydmVyX2Fsc2FzcmNfUENNQS1zZXJ2ZXItYWxzYXNyYy1QQ01BLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc2VydmVyX2Fsc2FzcmNfUENNQV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzZXJ2ZXJfYWxzYXNyY19QQ01BLXNlcnZlci1hbHNhc3JjLVBDTUEub2JqIGBpZiB0ZXN0IC1mICdzZXJ2ZXItYWxzYXNyYy1QQ01BLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc2VydmVyLWFsc2FzcmMtUENNQS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zZXJ2ZXItYWxzYXNyYy1QQ01BLmMnOyBmaWAKLQotc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4Lm86IHNlcnZlci1ydHBhdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNlcnZlcl9ydHBhdXhfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNlcnZlcl9ydHBhdXgtc2VydmVyLXJ0cGF1eC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9zZXJ2ZXJfcnRwYXV4LXNlcnZlci1ydHBhdXguVHBvIC1jIC1vIHNlcnZlcl9ydHBhdXgtc2VydmVyLXJ0cGF1eC5vIGB0ZXN0IC1mICdzZXJ2ZXItcnRwYXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNlcnZlci1ydHBhdXguYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4LlRwbyAkKERFUERJUikvc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2VydmVyLXJ0cGF1eC5jJyBvYmplY3Q9J3NlcnZlcl9ydHBhdXgtc2VydmVyLXJ0cGF1eC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzZXJ2ZXJfcnRwYXV4X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNlcnZlcl9ydHBhdXgtc2VydmVyLXJ0cGF1eC5vIGB0ZXN0IC1mICdzZXJ2ZXItcnRwYXV4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNlcnZlci1ydHBhdXguYwotCi1zZXJ2ZXJfcnRwYXV4LXNlcnZlci1ydHBhdXgub2JqOiBzZXJ2ZXItcnRwYXV4LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzZXJ2ZXJfcnRwYXV4X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzZXJ2ZXJfcnRwYXV4LXNlcnZlci1ydHBhdXgub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9zZXJ2ZXJfcnRwYXV4LXNlcnZlci1ydHBhdXguVHBvIC1jIC1vIHNlcnZlcl9ydHBhdXgtc2VydmVyLXJ0cGF1eC5vYmogYGlmIHRlc3QgLWYgJ3NlcnZlci1ydHBhdXguYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzZXJ2ZXItcnRwYXV4LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NlcnZlci1ydHBhdXguYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4LlRwbyAkKERFUERJUikvc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2VydmVyLXJ0cGF1eC5jJyBvYmplY3Q9J3NlcnZlcl9ydHBhdXgtc2VydmVyLXJ0cGF1eC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNlcnZlcl9ydHBhdXhfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc2VydmVyX3J0cGF1eC1zZXJ2ZXItcnRwYXV4Lm9iaiBgaWYgdGVzdCAtZiAnc2VydmVyLXJ0cGF1eC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NlcnZlci1ydHBhdXguYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc2VydmVyLXJ0cGF1eC5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKFNDUklQVFMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1BTVIuc2ggYi90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLUFNUi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmJhNTE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLUFNUi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBBIHNpbXBsZSBSVFAgcmVjZWl2ZXIgCi0jCi0KLVZJREVPX0NBUFM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpdmlkZW8sY2xvY2stcmF0ZT0oaW50KTkwMDAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylIMjYzLTE5OTgiCi1BVURJT19DQVBTPSJhcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKWF1ZGlvLGNsb2NrLXJhdGU9KGludCk4MDAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylBTVIsZW5jb2RpbmctcGFyYW1zPShzdHJpbmcpMSxvY3RldC1hbGlnbj0oc3RyaW5nKTEiCi0KLVZJREVPX0RFQz0icnRwaDI2M3BkZXBheSAhIGF2ZGVjX2gyNjMiCi1BVURJT19ERUM9InJ0cGFtcmRlcGF5ICEgYW1ybmJkZWMiCi0KLVZJREVPX1NJTks9InZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsiCi1BVURJT19TSU5LPSJhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luayIKLQotZ3N0LWxhdW5jaC0xLjAgLXYgcnRwYmluIG5hbWU9cnRwYmluIGxhdGVuY3k9MTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB1ZHBzcmMgY2Fwcz0kVklERU9fQ0FQUyBwb3J0PTUwMDAgISBydHBiaW4ucmVjdl9ydHBfc2lua18wICAgICAgICAgICAgICBcCi0JICAgICAgICAgcnRwYmluLiAhICRWSURFT19ERUMgISAkVklERU9fU0lOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB1ZHBzcmMgcG9ydD01MDAxICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzAgISB1ZHBzaW5rIHBvcnQ9NTAwNSBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlICAgICAgIFwKLQkgICB1ZHBzcmMgY2Fwcz0kQVVESU9fQ0FQUyBwb3J0PTUwMDIgISBydHBiaW4ucmVjdl9ydHBfc2lua18xICAgICAgICAgICAgICBcCi0JICAgICAgICAgcnRwYmluLiAhICRBVURJT19ERUMgISAkQVVESU9fU0lOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB1ZHBzcmMgcG9ydD01MDAzICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzEgISB1ZHBzaW5rIHBvcnQ9NTAwNyBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLVBDTUEuc2RwIGIvdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjYzcC1QQ01BLnNkcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQyMjY0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLVBDTUEuc2RwCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotdj0wCi1vPS0gMTE4ODM0MDY1NjE4MDg4MyAxIElOIElQNCAxMjcuMC4wLjEKLXM9U2Vzc2lvbiBzdHJlYW1lZCBieSBHU3RyZWFtZXIKLWk9c2VydmVyLnNoCi10PTAgMAotYT10b29sOkdTdHJlYW1lcgotYT10eXBlOmJyb2FkY2FzdAotbT12aWRlbyA1MDAwIFJUUC9BVlAgOTYKLWM9SU4gSVA0IDEyNy4wLjAuMQotYT1ydHBtYXA6OTYgSDI2My0xOTk4LzkwMDAwCi1tPWF1ZGlvIDUwMDIgUlRQL0FWUCA4Ci1jPUlOIElQNCAxMjcuMC4wLjEKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3AtUENNQS5zaCBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2M3AtUENNQS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTc5NDE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjNwLVBDTUEuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQSBzaW1wbGUgUlRQIHJlY2VpdmVyIAotIwotCi1WSURFT19DQVBTPSJhcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKXZpZGVvLGNsb2NrLXJhdGU9KGludCk5MDAwMCxlbmNvZGluZy1uYW1lPShzdHJpbmcpSDI2My0xOTk4IgotQVVESU9fQ0FQUz0iYXBwbGljYXRpb24veC1ydHAsbWVkaWE9KHN0cmluZylhdWRpbyxjbG9jay1yYXRlPShpbnQpODAwMCxlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNQSIKLQotI0RFU1Q9MTkyLjE2OC4xLjEyNgotREVTVD1sb2NhbGhvc3QKLQotVklERU9fREVDPSJydHBoMjYzcGRlcGF5ICEgYXZkZWNfaDI2MyIKLUFVRElPX0RFQz0icnRwcGNtYWRlcGF5ICEgYWxhd2RlYyIKLQotVklERU9fU0lOSz0idmlkZW9jb252ZXJ0ICEgYXV0b3ZpZGVvc2luayIKLUFVRElPX1NJTks9ImF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISBhdXRvYXVkaW9zaW5rIgotCi1MQVRFTkNZPTEwMAotCi1nc3QtbGF1bmNoLTEuMCAtdiBydHBiaW4gbmFtZT1ydHBiaW4gbGF0ZW5jeT0kTEFURU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgdWRwc3JjIGNhcHM9JFZJREVPX0NBUFMgcG9ydD01MDAwICEgcnRwYmluLnJlY3ZfcnRwX3NpbmtfMCAgICAgICAgICAgICAgICAgICBcCi0JICAgICAgICAgcnRwYmluLiAhICRWSURFT19ERUMgISAkVklERU9fU0lOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHVkcHNyYyBwb3J0PTUwMDEgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18wICEgdWRwc2luayBob3N0PSRERVNUIHBvcnQ9NTAwNSBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlIFwKLQkgICB1ZHBzcmMgY2Fwcz0kQVVESU9fQ0FQUyBwb3J0PTUwMDIgISBydHBiaW4ucmVjdl9ydHBfc2lua18xICAgICAgICAgICAgICAgICAgIFwKLQkgICAgICAgICBydHBiaW4uICEgJEFVRElPX0RFQyAhICRBVURJT19TSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgdWRwc3JjIHBvcnQ9NTAwMyAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzEgISB1ZHBzaW5rIGhvc3Q9JERFU1QgcG9ydD01MDA3IHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC1QQ01BLnNkcCBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC1QQ01BLnNkcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhYTc1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LUgyNjQtUENNQS5zZHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi12PTAKLW89LSAxMTg4MzQwNjU2MTgwODgzIDEgSU4gSVA0IDEyNy4wLjAuMQotcz1TZXNzaW9uIHN0cmVhbWVkIGJ5IEdTdHJlYW1lcgotaT1zZXJ2ZXIuc2gKLXQ9MCAwCi1hPXRvb2w6R1N0cmVhbWVyCi1hPXR5cGU6YnJvYWRjYXN0Ci1tPXZpZGVvIDUwMDAgUlRQL0FWUCA5NgotYz1JTiBJUDQgMTI3LjAuMC4xCi1hPXJ0cG1hcDo5NiBIMjY0LzkwMDAwCi1tPWF1ZGlvIDUwMDIgUlRQL0FWUCA4Ci1jPUlOIElQNCAxMjcuMC4wLjEKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtSDI2NC1QQ01BLnNoIGIvdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LVBDTUEuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDgyMGQ0ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1IMjY0LVBDTUEuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQSBzaW1wbGUgUlRQIHJlY2VpdmVyCi0jCi0jICByZWNlaXZlcyBIMjY0IGVuY29kZWQgUlRQIHZpZGVvIG9uIHBvcnQgNTAwMCwgUlRDUCBpcyByZWNlaXZlZCBvbiAgcG9ydCA1MDAxLgotIyAgdGhlIHJlY2VpdmVyIFJUQ1AgcmVwb3J0cyBhcmUgc2VudCB0byBwb3J0IDUwMDUKLSMgIHJlY2VpdmVzIGFsYXcgZW5jb2RlZCBSVFAgYXVkaW8gb24gcG9ydCA1MDAyLCBSVENQIGlzIHJlY2VpdmVkIG9uICBwb3J0IDUwMDMuCi0jICB0aGUgcmVjZWl2ZXIgUlRDUCByZXBvcnRzIGFyZSBzZW50IHRvIHBvcnQgNTAwNwotIwotIyAgICAgICAgICAgICAuLS0tLS0tLS4gICAgICAuLS0tLS0tLS0tLS4gICAgIC4tLS0tLS0tLS0uICAgLi0tLS0tLS0uICAgLi0tLS0tLS0tLS0tLgotIyAgUlRQICAgICAgICB8dWRwc3JjIHwgICAgICB8IHJ0cGJpbiAgIHwgICAgIHxoMjY0ZGVwYXl8ICAgfGgyNjRkZWN8ICAgfHh2aW1hZ2VzaW5rfAotIyAgcG9ydD01MDAwICB8ICAgICAgc3JjLT5yZWN2X3J0cCByZWN2X3J0cC0+c2luayAgICAgc3JjLT5zaW5rICAgc3JjLT5zaW5rICAgICAgICAgfAotIyAgICAgICAgICAgICAnLS0tLS0tLScgICAgICB8ICAgICAgICAgIHwgICAgICctLS0tLS0tLS0nICAgJy0tLS0tLS0nICAgJy0tLS0tLS0tLS0tJwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAuLS0tLS0tLS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8dWRwc2lua3wgIFJUQ1AKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBzZW5kX3J0Y3AtPnNpbmsgICAgIHwgcG9ydD01MDA1Ci0jICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0nIHN5bmM9ZmFsc2UKLSMgIFJUQ1AgICAgICAgfHVkcHNyYyB8ICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgYXN5bmM9ZmFsc2UKLSMgIHBvcnQ9NTAwMSAgfCAgICAgc3JjLT5yZWN2X3J0Y3AgICAgICB8Ci0jICAgICAgICAgICAgICctLS0tLS0tJyAgICAgIHwgICAgICAgICAgfAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSMgICAgICAgICAgICAgLi0tLS0tLS0uICAgICAgfCAgICAgICAgICB8ICAgICAuLS0tLS0tLS0tLiAgIC4tLS0tLS0tLiAgIC4tLS0tLS0tLS0tLS0tLgotIyAgUlRQICAgICAgICB8dWRwc3JjIHwgICAgICB8IHJ0cGJpbiAgIHwgICAgIHxwY21hZGVwYXl8ICAgfGFsYXdkZWN8ICAgfGF1dG9hdWRpb3Npbmt8Ci0jICBwb3J0PTUwMDIgIHwgICAgICBzcmMtPnJlY3ZfcnRwIHJlY3ZfcnRwLT5zaW5rICAgICBzcmMtPnNpbmsgICBzcmMtPnNpbmsgICAgICAgICAgIHwKLSMgICAgICAgICAgICAgJy0tLS0tLS0nICAgICAgfCAgICAgICAgICB8ICAgICAnLS0tLS0tLS0tJyAgICctLS0tLS0tJyAgICctLS0tLS0tLS0tLS0tJwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAuLS0tLS0tLS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8dWRwc2lua3wgIFJUQ1AKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBzZW5kX3J0Y3AtPnNpbmsgICAgIHwgcG9ydD01MDA3Ci0jICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0nIHN5bmM9ZmFsc2UKLSMgIFJUQ1AgICAgICAgfHVkcHNyYyB8ICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgYXN5bmM9ZmFsc2UKLSMgIHBvcnQ9NTAwMyAgfCAgICAgc3JjLT5yZWN2X3J0Y3AgICAgICB8Ci0jICAgICAgICAgICAgICctLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJwotCi0jIHRoZSBkZXN0aW5hdGlvbiBtYWNoaW5lIHRvIHNlbmQgUlRDUCB0by4gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgc2VuZGVyIGFuZAotIyBpcyB1c2VkIHRvIHNlbmQgYmFjayB0aGUgUlRDUCByZXBvcnRzIG9mIHRoaXMgcmVjZWl2ZXIuIElmIHRoZSBkYXRhIGlzIHNlbnQKLSMgZnJvbSBhbm90aGVyIG1hY2hpbmUsIGNoYW5nZSB0aGlzIGFkZHJlc3MuCi1ERVNUPTEyNy4wLjAuMQotCi0jIHRoaXMgYWRqdXN0cyB0aGUgbGF0ZW5jeSBpbiB0aGUgcmVjZWl2ZXIKLUxBVEVOQ1k9MjAwCi0KLSMgdGhlIGNhcHMgb2YgdGhlIHNlbmRlciBSVFAgc3RyZWFtLiBUaGlzIGlzIHVzdWFsbHkgbmVnb3RpYXRlZCBvdXQgb2YgYmFuZCB3aXRoCi0jIFNEUCBvciBSVFNQLiBub3JtYWxseSB0aGVzZSBjYXBzIHdpbGwgYWxzbyBpbmNsdWRlIFNQUyBhbmQgUFBTIGJ1dCB3ZSBkb24ndAotIyBoYXZlIGEgbWVjaGFuaXNtIHRvIGdldCB0aGlzIGZyb20gdGhlIHNlbmRlciB3aXRoIGEgLWxhdW5jaCBsaW5lLgotVklERU9fQ0FQUz0iYXBwbGljYXRpb24veC1ydHAsbWVkaWE9KHN0cmluZyl2aWRlbyxjbG9jay1yYXRlPShpbnQpOTAwMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKUgyNjQiCi1BVURJT19DQVBTPSJhcHBsaWNhdGlvbi94LXJ0cCxtZWRpYT0oc3RyaW5nKWF1ZGlvLGNsb2NrLXJhdGU9KGludCk4MDAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylQQ01BIgotCi1WSURFT19ERUM9InJ0cGgyNjRkZXBheSAhIGF2ZGVjX2gyNjQiCi1BVURJT19ERUM9InJ0cHBjbWFkZXBheSAhIGFsYXdkZWMiCi0KLVZJREVPX1NJTks9InZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsiCi1BVURJT19TSU5LPSJhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luayIKLQotZ3N0LWxhdW5jaC0xLjAgLXYgcnRwYmluIG5hbWU9cnRwYmluIGxhdGVuY3k9JExBVEVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB1ZHBzcmMgY2Fwcz0kVklERU9fQ0FQUyBwb3J0PTUwMDAgISBydHBiaW4ucmVjdl9ydHBfc2lua18wICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgcnRwYmluLiAhICRWSURFT19ERUMgISAkVklERU9fU0lOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgdWRwc3JjIHBvcnQ9NTAwMSAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMCAhIHVkcHNpbmsgcG9ydD01MDA1IGhvc3Q9JERFU1Qgc3luYz1mYWxzZSBhc3luYz1mYWxzZSBcCi0gICAgIHVkcHNyYyBjYXBzPSRBVURJT19DQVBTIHBvcnQ9NTAwMiAhIHJ0cGJpbi5yZWN2X3J0cF9zaW5rXzEgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICBydHBiaW4uICEgJEFVRElPX0RFQyAhICRBVURJT19TSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICB1ZHBzcmMgcG9ydD01MDAzICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18xICEgdWRwc2luayBwb3J0PTUwMDcgaG9zdD0kREVTVCBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuYyBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDdkYTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtUENNQS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDA5IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotLyoKLSAqIEEgc2ltcGxlIFJUUCByZWNlaXZlciAKLSAqCi0gKiAgcmVjZWl2ZXMgYWxhdyBlbmNvZGVkIFJUUCBhdWRpbyBvbiBwb3J0IDUwMDIsIFJUQ1AgaXMgcmVjZWl2ZWQgb24gIHBvcnQgNTAwMy4KLSAqICB0aGUgcmVjZWl2ZXIgUlRDUCByZXBvcnRzIGFyZSBzZW50IHRvIHBvcnQgNTAwNwotICoKLSAqICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIC4tLS0tLS0tLS0tLiAgICAgLi0tLS0tLS0tLS4gICAuLS0tLS0tLS4gICAuLS0tLS0tLS0uCi0gKiAgUlRQICAgICAgICB8dWRwc3JjIHwgICAgICB8IHJ0cGJpbiAgIHwgICAgIHxwY21hZGVwYXl8ICAgfGFsYXdkZWN8ICAgfGFsc2FzaW5rfAotICogIHBvcnQ9NTAwMiAgfCAgICAgIHNyYy0+cmVjdl9ydHAgcmVjdl9ydHAtPnNpbmsgICAgIHNyYy0+c2luayAgIHNyYy0+c2luayAgICAgIHwKLSAqICAgICAgICAgICAgICctLS0tLS0tJyAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0tLScgICAnLS0tLS0tLScgICAnLS0tLS0tLS0nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgLi0tLS0tLS0uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHx1ZHBzaW5rfCAgUlRDUAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBzZW5kX3J0Y3AtPnNpbmsgICAgIHwgcG9ydD01MDA3Ci0gKiAgICAgICAgICAgICAuLS0tLS0tLS4gICAgICB8ICAgICAgICAgIHwgICAgICctLS0tLS0tJyBzeW5jPWZhbHNlCi0gKiAgUlRDUCAgICAgICB8dWRwc3JjIHwgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICBhc3luYz1mYWxzZQotICogIHBvcnQ9NTAwMyAgfCAgICAgc3JjLT5yZWN2X3J0Y3AgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgICAgICctLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJyAgICAgICAgICAgICAgCi0gKi8KLQotLyogdGhlIGNhcHMgb2YgdGhlIHNlbmRlciBSVFAgc3RyZWFtLiBUaGlzIGlzIHVzdWFsbHkgbmVnb3RpYXRlZCBvdXQgb2YgYmFuZCB3aXRoCi0gKiBTRFAgb3IgUlRTUC4gKi8KLSNkZWZpbmUgQVVESU9fQ0FQUyAiYXBwbGljYXRpb24veC1ydHAsbWVkaWE9KHN0cmluZylhdWRpbyxjbG9jay1yYXRlPShpbnQpODAwMCxlbmNvZGluZy1uYW1lPShzdHJpbmcpUENNQSIKLQotI2RlZmluZSBBVURJT19ERVBBWSAicnRwcGNtYWRlcGF5IgotI2RlZmluZSBBVURJT19ERUMgICAiYWxhd2RlYyIKLSNkZWZpbmUgQVVESU9fU0lOSyAgImF1dG9hdWRpb3NpbmsiCi0KLS8qIHRoZSBkZXN0aW5hdGlvbiBtYWNoaW5lIHRvIHNlbmQgUlRDUCB0by4gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgc2VuZGVyIGFuZAotICogaXMgdXNlZCB0byBzZW5kIGJhY2sgdGhlIFJUQ1AgcmVwb3J0cyBvZiB0aGlzIHJlY2VpdmVyLiBJZiB0aGUgZGF0YSBpcyBzZW50Ci0gKiBmcm9tIGFub3RoZXIgbWFjaGluZSwgY2hhbmdlIHRoaXMgYWRkcmVzcy4gKi8KLSNkZWZpbmUgREVTVF9IT1NUICIxMjcuMC4wLjEiCi0KLS8qIHByaW50IHRoZSBzdGF0cyBvZiBhIHNvdXJjZSAqLwotc3RhdGljIHZvaWQKLXByaW50X3NvdXJjZV9zdGF0cyAoR09iamVjdCAqIHNvdXJjZSkKLXsKLSAgR3N0U3RydWN0dXJlICpzdGF0czsKLSAgZ2NoYXIgKnN0cjsKLQotICBnX3JldHVybl9pZl9mYWlsIChzb3VyY2UgIT0gTlVMTCk7Ci0KLSAgLyogZ2V0IHRoZSBzb3VyY2Ugc3RhdHMgKi8KLSAgZ19vYmplY3RfZ2V0IChzb3VyY2UsICJzdGF0cyIsICZzdGF0cywgTlVMTCk7Ci0KLSAgLyogc2ltcGx5IGR1bXAgdGhlIHN0YXRzIHN0cnVjdHVyZSAqLwotICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3RhdHMpOwotICBnX3ByaW50ICgic291cmNlIHN0YXRzOiAlc1xuIiwgc3RyKTsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0YXRzKTsKLSAgZ19mcmVlIChzdHIpOwotfQotCi0vKiB3aWxsIGJlIGNhbGxlZCB3aGVuIHJ0cGJpbiBzaWduYWxzIG9uLXNzcmMtYWN0aXZlLiBJdCBtZWFucyB0aGF0IGFuIFJUQ1AKLSAqIHBhY2tldCB3YXMgcmVjZWl2ZWQgZnJvbSBhbm90aGVyIHNvdXJjZS4gKi8KLXN0YXRpYyB2b2lkCi1vbl9zc3JjX2FjdGl2ZV9jYiAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgZ3VpbnQgc2Vzc2lkLCBndWludCBzc3JjLAotICAgIEdzdEVsZW1lbnQgKiBkZXBheSkKLXsKLSAgR09iamVjdCAqc2Vzc2lvbiwgKmlzcmMsICpvc3JjOwotCi0gIGdfcHJpbnQgKCJnb3QgUlRDUCBmcm9tIHNlc3Npb24gJXUsIFNTUkMgJXVcbiIsIHNlc3NpZCwgc3NyYyk7Ci0KLSAgLyogZ2V0IHRoZSByaWdodCBzZXNzaW9uICovCi0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAocnRwYmluLCAiZ2V0LWludGVybmFsLXNlc3Npb24iLCBzZXNzaWQsICZzZXNzaW9uKTsKLQotI2lmIDAKLSAgLyogRklYTUU6IFRoaXMgaXMgYnJva2VuIGluIHJ0cGJpbiAqLwotICAvKiBnZXQgdGhlIGludGVybmFsIHNvdXJjZSAodGhlIFNTUkMgYWxsb2NhdGVkIHRvIHVzLCB0aGUgcmVjZWl2ZXIgKi8KLSAgZ19vYmplY3RfZ2V0IChzZXNzaW9uLCAiaW50ZXJuYWwtc291cmNlIiwgJmlzcmMsIE5VTEwpOwotICBwcmludF9zb3VyY2Vfc3RhdHMgKGlzcmMpOwotICBnX29iamVjdF91bnJlZiAoaXNyYyk7Ci0jZW5kaWYKLQotICAvKiBnZXQgdGhlIHJlbW90ZSBzb3VyY2UgdGhhdCBzZW50IHVzIFJUQ1AgKi8KLSAgZ19zaWduYWxfZW1pdF9ieV9uYW1lIChzZXNzaW9uLCAiZ2V0LXNvdXJjZS1ieS1zc3JjIiwgc3NyYywgJm9zcmMpOwotICBwcmludF9zb3VyY2Vfc3RhdHMgKG9zcmMpOwotICBnX29iamVjdF91bnJlZiAob3NyYyk7Ci0gIGdfb2JqZWN0X3VucmVmIChzZXNzaW9uKTsKLX0KLQotLyogd2lsbCBiZSBjYWxsZWQgd2hlbiBydHBiaW4gaGFzIHZhbGlkYXRlZCBhIHBheWxvYWQgdGhhdCB3ZSBjYW4gZGVwYXlsb2FkICovCi1zdGF0aWMgdm9pZAotcGFkX2FkZGVkX2NiIChHc3RFbGVtZW50ICogcnRwYmluLCBHc3RQYWQgKiBuZXdfcGFkLCBHc3RFbGVtZW50ICogZGVwYXkpCi17Ci0gIEdzdFBhZCAqc2lua3BhZDsKLSAgR3N0UGFkTGlua1JldHVybiBscmVzOwotCi0gIGdfcHJpbnQgKCJuZXcgcGF5bG9hZCBvbiBwYWQ6ICVzXG4iLCBHU1RfUEFEX05BTUUgKG5ld19wYWQpKTsKLQotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGRlcGF5LCAic2luayIpOwotICBnX2Fzc2VydCAoc2lua3BhZCk7Ci0KLSAgbHJlcyA9IGdzdF9wYWRfbGluayAobmV3X3BhZCwgc2lua3BhZCk7Ci0gIGdfYXNzZXJ0IChscmVzID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotfQotCi0vKiBidWlsZCBhIHBpcGVsaW5lIGVxdWl2YWxlbnQgdG86Ci0gKgotICogZ3N0LWxhdW5jaC0xLjAgLXYgcnRwYmluIG5hbWU9cnRwYmluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICogICAgICB1ZHBzcmMgY2Fwcz0kQVVESU9fQ0FQUyBwb3J0PTUwMDIgISBydHBiaW4ucmVjdl9ydHBfc2lua18wICAgICAgICAgICAgICBcCi0gKiAgICAgICAgcnRwYmluLiAhIHJ0cHBjbWFkZXBheSAhIGFsYXdkZWMgISBhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlICEgYXV0b2F1ZGlvc2luayBcCi0gKiAgICAgIHVkcHNyYyBwb3J0PTUwMDMgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18wICEgdWRwc2luayBwb3J0PTUwMDcgaG9zdD0kREVTVCBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlCi0gKi8KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqcnRwYmluLCAqcnRwc3JjLCAqcnRjcHNyYywgKnJ0Y3BzaW5rOwotICBHc3RFbGVtZW50ICphdWRpb2RlcGF5LCAqYXVkaW9kZWMsICphdWRpb3JlcywgKmF1ZGlvY29udiwgKmF1ZGlvc2luazsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgZ2Jvb2xlYW4gcmVzOwotICBHc3RQYWRMaW5rUmV0dXJuIGxyZXM7Ci0gIEdzdFBhZCAqc3JjcGFkLCAqc2lua3BhZDsKLQotICAvKiBhbHdheXMgaW5pdCBmaXJzdCAqLwotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICAvKiB0aGUgcGlwZWxpbmUgdG8gaG9sZCBldmVyeXRoaW5nICovCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoTlVMTCk7Ci0gIGdfYXNzZXJ0IChwaXBlbGluZSk7Ci0KLSAgLyogdGhlIHVkcCBzcmMgYW5kIHNvdXJjZSB3ZSB3aWxsIHVzZSBmb3IgUlRQIGFuZCBSVENQICovCi0gIHJ0cHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNyYyIsICJydHBzcmMiKTsKLSAgZ19hc3NlcnQgKHJ0cHNyYyk7Ci0gIGdfb2JqZWN0X3NldCAocnRwc3JjLCAicG9ydCIsIDUwMDIsIE5VTEwpOwotICAvKiB3ZSBuZWVkIHRvIHNldCBjYXBzIG9uIHRoZSB1ZHBzcmMgZm9yIHRoZSBSVFAgZGF0YSAqLwotICBjYXBzID0gZ3N0X2NhcHNfZnJvbV9zdHJpbmcgKEFVRElPX0NBUFMpOwotICBnX29iamVjdF9zZXQgKHJ0cHNyYywgImNhcHMiLCBjYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIHJ0Y3BzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzcmMiLCAicnRjcHNyYyIpOwotICBnX2Fzc2VydCAocnRjcHNyYyk7Ci0gIGdfb2JqZWN0X3NldCAocnRjcHNyYywgInBvcnQiLCA1MDAzLCBOVUxMKTsKLQotICBydGNwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNpbmsiLCAicnRjcHNpbmsiKTsKLSAgZ19hc3NlcnQgKHJ0Y3BzaW5rKTsKLSAgZ19vYmplY3Rfc2V0IChydGNwc2luaywgInBvcnQiLCA1MDA3LCAiaG9zdCIsIERFU1RfSE9TVCwgTlVMTCk7Ci0gIC8qIG5vIG5lZWQgZm9yIHN5bmNocm9uaXNhdGlvbiBvciBwcmVyb2xsIG9uIHRoZSBSVENQIHNpbmsgKi8KLSAgZ19vYmplY3Rfc2V0IChydGNwc2luaywgImFzeW5jIiwgRkFMU0UsICJzeW5jIiwgRkFMU0UsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcnRwc3JjLCBydGNwc3JjLCBydGNwc2luaywgTlVMTCk7Ci0KLSAgLyogdGhlIGRlcGF5bG9hZGluZyBhbmQgZGVjb2RpbmcgKi8KLSAgYXVkaW9kZXBheSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoQVVESU9fREVQQVksICJhdWRpb2RlcGF5Iik7Ci0gIGdfYXNzZXJ0IChhdWRpb2RlcGF5KTsKLSAgYXVkaW9kZWMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEFVRElPX0RFQywgImF1ZGlvZGVjIik7Ci0gIGdfYXNzZXJ0IChhdWRpb2RlYyk7Ci0gIC8qIHRoZSBhdWRpbyBwbGF5YmFjayBhbmQgZm9ybWF0IGNvbnZlcnNpb24gKi8KLSAgYXVkaW9jb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImF1ZGlvY29udiIpOwotICBnX2Fzc2VydCAoYXVkaW9jb252KTsKLSAgYXVkaW9yZXMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdWRpb3Jlc2FtcGxlIiwgImF1ZGlvcmVzIik7Ci0gIGdfYXNzZXJ0IChhdWRpb3Jlcyk7Ci0gIGF1ZGlvc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoQVVESU9fU0lOSywgImF1ZGlvc2luayIpOwotICBnX2Fzc2VydCAoYXVkaW9zaW5rKTsKLQotICAvKiBhZGQgZGVwYXlsb2FkaW5nIGFuZCBwbGF5YmFjayB0byB0aGUgcGlwZWxpbmUgYW5kIGxpbmsgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBhdWRpb2RlcGF5LCBhdWRpb2RlYywgYXVkaW9jb252LAotICAgICAgYXVkaW9yZXMsIGF1ZGlvc2luaywgTlVMTCk7Ci0KLSAgcmVzID0gZ3N0X2VsZW1lbnRfbGlua19tYW55IChhdWRpb2RlcGF5LCBhdWRpb2RlYywgYXVkaW9jb252LCBhdWRpb3JlcywKLSAgICAgIGF1ZGlvc2luaywgTlVMTCk7Ci0gIGdfYXNzZXJ0IChyZXMgPT0gVFJVRSk7Ci0KLSAgLyogdGhlIHJ0cGJpbiBlbGVtZW50ICovCi0gIHJ0cGJpbiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cGJpbiIsICJydHBiaW4iKTsKLSAgZ19hc3NlcnQgKHJ0cGJpbik7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcnRwYmluKTsKLQotICAvKiBub3cgbGluayBhbGwgdG8gdGhlIHJ0cGJpbiwgc3RhcnQgYnkgZ2V0dGluZyBhbiBSVFAgc2lua3BhZCBmb3Igc2Vzc2lvbiAwICovCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydHBzcmMsICJzcmMiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwYmluLCAicmVjdl9ydHBfc2lua18wIik7Ci0gIGxyZXMgPSBnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCk7Ci0gIGdfYXNzZXJ0IChscmVzID09IEdTVF9QQURfTElOS19PSyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgLyogZ2V0IGFuIFJUQ1Agc2lua3BhZCBpbiBzZXNzaW9uIDAgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0Y3BzcmMsICJzcmMiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZCAocnRwYmluLCAicmVjdl9ydGNwX3NpbmtfMCIpOwotICBscmVzID0gZ3N0X3BhZF9saW5rIChzcmNwYWQsIHNpbmtwYWQpOwotICBnX2Fzc2VydCAobHJlcyA9PSBHU1RfUEFEX0xJTktfT0spOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiBnZXQgYW4gUlRDUCBzcmNwYWQgZm9yIHNlbmRpbmcgUlRDUCBiYWNrIHRvIHRoZSBzZW5kZXIgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJzZW5kX3J0Y3Bfc3JjXzAiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydGNwc2luaywgInNpbmsiKTsKLSAgbHJlcyA9IGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKTsKLSAgZ19hc3NlcnQgKGxyZXMgPT0gR1NUX1BBRF9MSU5LX09LKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2lua3BhZCk7Ci0KLSAgLyogdGhlIFJUUCBwYWQgdGhhdCB3ZSBoYXZlIHRvIGNvbm5lY3QgdG8gdGhlIGRlcGF5bG9hZGVyIHdpbGwgYmUgY3JlYXRlZAotICAgKiBkeW5hbWljYWxseSBzbyB3ZSBjb25uZWN0IHRvIHRoZSBwYWQtYWRkZWQgc2lnbmFsLCBwYXNzIHRoZSBkZXBheWxvYWRlciBhcwotICAgKiB1c2VyX2RhdGEgc28gdGhhdCB3ZSBjYW4gbGluayB0byBpdC4gKi8KLSAgZ19zaWduYWxfY29ubmVjdCAocnRwYmluLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyAocGFkX2FkZGVkX2NiKSwgYXVkaW9kZXBheSk7Ci0KLSAgLyogZ2l2ZSBzb21lIHN0YXRzIHdoZW4gd2UgcmVjZWl2ZSBSVENQICovCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKHJ0cGJpbiwgIm9uLXNzcmMtYWN0aXZlIiwgR19DQUxMQkFDSyAob25fc3NyY19hY3RpdmVfY2IpLAotICAgICAgYXVkaW9kZXBheSk7Ci0KLSAgLyogc2V0IHRoZSBwaXBlbGluZSB0byBwbGF5aW5nICovCi0gIGdfcHJpbnQgKCJzdGFydGluZyByZWNlaXZlciBwaXBlbGluZVxuIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAvKiB3ZSBuZWVkIHRvIHJ1biBhIEdMaWIgbWFpbiBsb29wIHRvIGdldCB0aGUgbWVzc2FnZXMgKi8KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdfcHJpbnQgKCJzdG9wcGluZyByZWNlaXZlciBwaXBlbGluZVxuIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlbGluZSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuc2ggYi90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVBDTUEuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDBlOTY5YjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1QQ01BLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIEEgc2ltcGxlIFJUUCByZWNlaXZlcgotIwotIyAgcmVjZWl2ZXMgYWxhdyBlbmNvZGVkIFJUUCBhdWRpbyBvbiBwb3J0IDUwMDIsIFJUQ1AgaXMgcmVjZWl2ZWQgb24gIHBvcnQgNTAwMy4KLSMgIHRoZSByZWNlaXZlciBSVENQIHJlcG9ydHMgYXJlIHNlbnQgdG8gcG9ydCA1MDA3Ci0jCi0jICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIC4tLS0tLS0tLS0tLiAgICAgLi0tLS0tLS0tLS4gICAuLS0tLS0tLS4gICAuLS0tLS0tLS0tLS0tLS4KLSMgIFJUUCAgICAgICAgfHVkcHNyYyB8ICAgICAgfCBydHBiaW4gICB8ICAgICB8cGNtYWRlcGF5fCAgIHxhbGF3ZGVjfCAgIHxhdXRvYXVkaW9zaW5rfAotIyAgcG9ydD01MDAyICB8ICAgICAgc3JjLT5yZWN2X3J0cCByZWN2X3J0cC0+c2luayAgICAgc3JjLT5zaW5rICAgc3JjLT5zaW5rICAgICAgICAgICB8Ci0jICAgICAgICAgICAgICctLS0tLS0tJyAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0tLScgICAnLS0tLS0tLScgICAnLS0tLS0tLS0tLS0tLScKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgLi0tLS0tLS0uCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfHVkcHNpbmt8ICBSVENQCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgc2VuZF9ydGNwLT5zaW5rICAgICB8IHBvcnQ9NTAwNwotIyAgICAgICAgICAgICAuLS0tLS0tLS4gICAgICB8ICAgICAgICAgIHwgICAgICctLS0tLS0tJyBzeW5jPWZhbHNlCi0jICBSVENQICAgICAgIHx1ZHBzcmMgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIGFzeW5jPWZhbHNlCi0jICBwb3J0PTUwMDMgIHwgICAgIHNyYy0+cmVjdl9ydGNwICAgICAgfAotIyAgICAgICAgICAgICAnLS0tLS0tLScgICAgICAnLS0tLS0tLS0tLScKLQotCi0jIHRoZSBjYXBzIG9mIHRoZSBzZW5kZXIgUlRQIHN0cmVhbS4gVGhpcyBpcyB1c3VhbGx5IG5lZ290aWF0ZWQgb3V0IG9mIGJhbmQgd2l0aAotIyBTRFAgb3IgUlRTUC4KLUFVRElPX0NBUFM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpYXVkaW8sY2xvY2stcmF0ZT0oaW50KTgwMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKVBDTUEiCi0KLUFVRElPX0RFQz0icnRwcGNtYWRlcGF5ICEgYWxhd2RlYyIKLQotQVVESU9fU0lOSz0iYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsiCi0KLSMgdGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgdG8gc2VuZCBSVENQIHRvLiBUaGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBzZW5kZXIgYW5kCi0jIGlzIHVzZWQgdG8gc2VuZCBiYWNrIHRoZSBSVENQIHJlcG9ydHMgb2YgdGhpcyByZWNlaXZlci4gSWYgdGhlIGRhdGEgaXMgc2VudAotIyBmcm9tIGFub3RoZXIgbWFjaGluZSwgY2hhbmdlIHRoaXMgYWRkcmVzcy4KLURFU1Q9MTI3LjAuMC4xCi0KLWdzdC1sYXVuY2gtMS4wIC12IHJ0cGJpbiBuYW1lPXJ0cGJpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICB1ZHBzcmMgY2Fwcz0kQVVESU9fQ0FQUyBwb3J0PTUwMDIgISBydHBiaW4ucmVjdl9ydHBfc2lua18wICAgICAgICAgICAgICBcCi0JICAgICAgICAgcnRwYmluLiAhICRBVURJT19ERUMgISAkQVVESU9fU0lOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB1ZHBzcmMgcG9ydD01MDAzICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18wICEgdWRwc2luayBwb3J0PTUwMDcgaG9zdD0kREVTVCBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVZQOC1PUFVTLnNoIGIvdGVzdHMvZXhhbXBsZXMvcnRwL2NsaWVudC1WUDgtT1BVUy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjIwYmU3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LVZQOC1PUFVTLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIEEgc2ltcGxlIFJUUCByZWNlaXZlciAKLSMKLQotVklERU9fQ0FQUz0iYXBwbGljYXRpb24veC1ydHAsbWVkaWE9KHN0cmluZyl2aWRlbyxjbG9jay1yYXRlPShpbnQpOTAwMDAsZW5jb2RpbmctbmFtZT0oc3RyaW5nKVZQOCIKLUFVRElPX0NBUFM9ImFwcGxpY2F0aW9uL3gtcnRwLG1lZGlhPShzdHJpbmcpYXVkaW8sY2xvY2stcmF0ZT0oaW50KTQ4MDAwLGVuY29kaW5nLW5hbWU9KHN0cmluZylPUFVTIgotCi1TUkM9bG9jYWxob3N0Ci1ERVNUPWxvY2FsaG9zdAotCi1WSURFT19ERUM9InJ0cHZwOGRlcGF5ICEgdnA4ZGVjIgotQVVESU9fREVDPSJydHBvcHVzZGVwYXkgISBvcHVzZGVjIgotCi1WSURFT19TSU5LPSJ2aWRlb2NvbnZlcnQgISBhdXRvdmlkZW9zaW5rIgotQVVESU9fU0lOSz0iYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSAhIGF1dG9hdWRpb3NpbmsiCi0KLUxBVEVOQ1k9MTAwCi0KLWdzdC1sYXVuY2gtMS4wIC12IHJ0cGJpbiBuYW1lPXJ0cGJpbiBsYXRlbmN5PSRMQVRFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB1ZHBzcmMgY2Fwcz0kVklERU9fQ0FQUyBhZGRyZXNzPSRTUkMgcG9ydD01MDAwICEgcnRwYmluLnJlY3ZfcnRwX3NpbmtfMCAgICAgICAgICAgICAgICAgICBcCi0JICAgICAgICAgcnRwYmluLiAhICRWSURFT19ERUMgISAkVklERU9fU0lOSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHVkcHNyYyBhZGRyZXNzPSRTUkMgcG9ydD01MDAxICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMCAhIHVkcHNpbmsgaG9zdD0kREVTVCBwb3J0PTUwMDUgc3luYz1mYWxzZSBhc3luYz1mYWxzZSBcCi0JICAgdWRwc3JjIGNhcHM9JEFVRElPX0NBUFMgYWRkcmVzcz0kU1JDIHBvcnQ9NTAwMiAhIHJ0cGJpbi5yZWN2X3J0cF9zaW5rXzEgICAgICAgICAgICAgICAgICAgXAotCSAgICAgICAgIHJ0cGJpbi4gISAkQVVESU9fREVDICEgJEFVRElPX1NJTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICB1ZHBzcmMgYWRkcmVzcz0kU1JDIHBvcnQ9NTAwMyAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzEgISB1ZHBzaW5rIGhvc3Q9JERFU1QgcG9ydD01MDA3IHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtcnRwYXV4LmMgYi90ZXN0cy9leGFtcGxlcy9ydHAvY2xpZW50LXJ0cGF1eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTBkYzFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9jbGllbnQtcnRwYXV4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KLSAqICAgQGF1dGhvciBUb3JyaWUgRmlzY2hlciA8dG9ycmllLmZpc2NoZXJAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9ydHAvcnRwLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qCi0gKiBSVFAgcmVjZWl2ZXIgd2l0aCBSRkM0NTg4IHJldHJhbnNtaXNzaW9uIGhhbmRsaW5nIGVuYWJsZWQKLSAqCi0gKiAgSW4gdGhpcyBleGFtcGxlIHdlIGhhdmUgdHdvIFJUUCBzZXNzaW9ucywgb25lIGZvciB2aWRlbyBhbmQgb25lIGZvciBhdWRpby4KLSAqICBWaWRlbyBpcyByZWNlaXZlZCBvbiBwb3J0IDUwMDAsIHdpdGggaXRzIFJUQ1Agc3RyZWFtIHJlY2VpdmVkIG9uIHBvcnQgNTAwMQotICogIGFuZCBzZW50IG9uIHBvcnQgNTAwNS4gQXVkaW8gaXMgcmVjZWl2ZWQgb24gcG9ydCA1MDA1LCB3aXRoIGl0cyBSVENQIHN0cmVhbQotICogIHJlY2VpdmVkIG9uIHBvcnQgNTAwNiBhbmQgc2VudCBvbiBwb3J0IDUwMTEuCi0gKgotICogIEluIGJvdGggc2Vzc2lvbnMsIHdlIHNldCAicnRwcnR4cmVjZWl2ZSIgYXMgdGhlIHNlc3Npb24ncyAiYXV4IiBlbGVtZW50Ci0gKiAgaW4gcnRwYmluLCB3aGljaCBlbmFibGVzIFJGQzQ1ODggcmV0cmFuc21pc3Npb24gaGFuZGxpbmcgZm9yIHRoYXQgc2Vzc2lvbi4KLSAqCi0gKiAgICAgICAgICAgICAuLS0tLS0tLS4gICAgICAuLS0tLS0tLS0tLS4gICAgICAgIC4tLS0tLS0tLS0tLS4gICAuLS0tLS0tLS0tLiAgIC4tLS0tLS0tLS0tLS0tLgotICogIFJUUCAgICAgICAgfHVkcHNyYyB8ICAgICAgfCBydHBiaW4gICB8ICAgICAgICB8dGhlb3JhZGVwYXl8ICAgfHRoZW9yYWRlY3wgICB8YXV0b3ZpZGVvc2lua3wKLSAqICBwb3J0PTUwMDAgIHwgICAgICBzcmMtPnJlY3ZfcnRwXzAgcmVjdl9ydHBfMC0+c2luayAgICAgICBzcmMtPnNpbmsgICAgIHNyYy0+c2luayAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAnLS0tLS0tLScgICAgICB8ICAgICAgICAgIHwgICAgICAgICctLS0tLS0tLS0tLScgICAnLS0tLS0tLS0tJyAgICctLS0tLS0tLS0tLS0tJwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIC4tLS0tLS0tLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8dWRwc2lua3wgIFJUQ1AKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHNlbmRfcnRjcF8wLT5zaW5rICAgICB8IHBvcnQ9NTAwNQotICogICAgICAgICAgICAgLi0tLS0tLS0uICAgICAgfCAgICAgICAgICB8ICAgICAnLS0tLS0tLScgc3luYz1mYWxzZQotICogIFJUQ1AgICAgICAgfHVkcHNyYyB8ICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgYXN5bmM9ZmFsc2UKLSAqICBwb3J0PTUwMDEgIHwgICAgIHNyYy0+cmVjdl9ydGNwXzAgICAgfAotICogICAgICAgICAgICAgJy0tLS0tLS0nICAgICAgfCAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSAqICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIHwgICAgICAgICAgfCAgICAgICAgLi0tLS0tLS0tLS4gICAuLS0tLS0tLS4gICAuLS0tLS0tLS0tLS0tLS4KLSAqICBSVFAgICAgICAgIHx1ZHBzcmMgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgfHBjbWFkZXBheXwgICB8YWxhd2RlY3wgICB8YXV0b2F1ZGlvc2lua3wKLSAqICBwb3J0PTUwMDYgIHwgICAgICBzcmMtPnJlY3ZfcnRwXzEgcmVjdl9ydHBfMS0+c2luayAgICAgc3JjLT5zaW5rICAgc3JjLT5zaW5rICAgICAgICAgIHwKLSAqICAgICAgICAgICAgICctLS0tLS0tJyAgICAgIHwgICAgICAgICAgfCAgICAgICAgJy0tLS0tLS0tLScgICAnLS0tLS0tLScgICAnLS0tLS0tLS0tLS0tLScKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAuLS0tLS0tLS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfHVkcHNpbmt8ICBSVENQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZW5kX3J0Y3BfMS0+c2luayAgICAgfCBwb3J0PTUwMTEKLSAqICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0nIHN5bmM9ZmFsc2UKLSAqICBSVENQICAgICAgIHx1ZHBzcmMgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIGFzeW5jPWZhbHNlCi0gKiAgcG9ydD01MDA3ICB8ICAgICBzcmMtPnJlY3ZfcnRjcF8xICAgIHwKLSAqICAgICAgICAgICAgICctLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJwotICoKLSAqLwotCi1HTWFpbkxvb3AgKmxvb3AgPSBOVUxMOwotCi10eXBlZGVmIHN0cnVjdCBfU2Vzc2lvbkRhdGEKLXsKLSAgaW50IHJlZjsKLSAgR3N0RWxlbWVudCAqcnRwYmluOwotICBndWludCBzZXNzaW9uTnVtOwotICBHc3RDYXBzICpjYXBzOwotICBHc3RFbGVtZW50ICpvdXRwdXQ7Ci19IFNlc3Npb25EYXRhOwotCi1zdGF0aWMgU2Vzc2lvbkRhdGEgKgotc2Vzc2lvbl9yZWYgKFNlc3Npb25EYXRhICogZGF0YSkKLXsKLSAgZ19hdG9taWNfaW50X2luYyAoJmRhdGEtPnJlZik7Ci0gIHJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgdm9pZAotc2Vzc2lvbl91bnJlZiAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgU2Vzc2lvbkRhdGEgKnNlc3Npb24gPSAoU2Vzc2lvbkRhdGEgKikgZGF0YTsKLSAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZzZXNzaW9uLT5yZWYpKSB7Ci0gICAgZ19vYmplY3RfdW5yZWYgKHNlc3Npb24tPnJ0cGJpbik7Ci0gICAgZ3N0X2NhcHNfdW5yZWYgKHNlc3Npb24tPmNhcHMpOwotICAgIGdfZnJlZSAoc2Vzc2lvbik7Ci0gIH0KLX0KLQotc3RhdGljIFNlc3Npb25EYXRhICoKLXNlc3Npb25fbmV3IChndWludCBzZXNzaW9uTnVtKQotewotICBTZXNzaW9uRGF0YSAqcmV0ID0gZ19uZXcwIChTZXNzaW9uRGF0YSwgMSk7Ci0gIHJldC0+c2Vzc2lvbk51bSA9IHNlc3Npb25OdW07Ci0gIHJldHVybiBzZXNzaW9uX3JlZiAocmV0KTsKLX0KLQotc3RhdGljIHZvaWQKLXNldHVwX2dob3N0X3NpbmsgKEdzdEVsZW1lbnQgKiBzaW5rLCBHc3RCaW4gKiBiaW4pCi17Ci0gIEdzdFBhZCAqc2lua1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzaW5rLCAic2luayIpOwotICBHc3RQYWQgKmJpblBhZCA9IGdzdF9naG9zdF9wYWRfbmV3ICgic2luayIsIHNpbmtQYWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChHU1RfRUxFTUVOVCAoYmluKSwgYmluUGFkKTsKLX0KLQotc3RhdGljIFNlc3Npb25EYXRhICoKLW1ha2VfYXVkaW9fc2Vzc2lvbiAoZ3VpbnQgc2Vzc2lvbk51bSkKLXsKLSAgU2Vzc2lvbkRhdGEgKnJldCA9IHNlc3Npb25fbmV3IChzZXNzaW9uTnVtKTsKLSAgR3N0QmluICpiaW4gPSBHU1RfQklOIChnc3RfYmluX25ldyAoImF1ZGlvIikpOwotICBHc3RFbGVtZW50ICpxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInF1ZXVlIiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKnNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvYXVkaW9zaW5rIiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvY29udmVydCIsIE5VTEwpOwotICBHc3RFbGVtZW50ICphdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9yZXNhbXBsZSIsIE5VTEwpOwotICBHc3RFbGVtZW50ICpkZXBheWxvYWRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHBjbWFkZXBheSIsIE5VTEwpOwotICBHc3RFbGVtZW50ICpkZWNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYWxhd2RlYyIsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKGJpbiwgcXVldWUsIGRlcGF5bG9hZGVyLCBkZWNvZGVyLCBhdWRpb2NvbnZlcnQsCi0gICAgICBhdWRpb3Jlc2FtcGxlLCBzaW5rLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChxdWV1ZSwgZGVwYXlsb2FkZXIsIGRlY29kZXIsIGF1ZGlvY29udmVydCwKLSAgICAgIGF1ZGlvcmVzYW1wbGUsIHNpbmssIE5VTEwpOwotCi0gIHNldHVwX2dob3N0X3NpbmsgKHF1ZXVlLCBiaW4pOwotCi0gIHJldC0+b3V0cHV0ID0gR1NUX0VMRU1FTlQgKGJpbik7Ci0gIHJldC0+Y2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAiYXVkaW8iLAotICAgICAgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA4MDAwLAotICAgICAgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCAiUENNQSIsIE5VTEwpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBTZXNzaW9uRGF0YSAqCi1tYWtlX3ZpZGVvX3Nlc3Npb24gKGd1aW50IHNlc3Npb25OdW0pCi17Ci0gIFNlc3Npb25EYXRhICpyZXQgPSBzZXNzaW9uX25ldyAoc2Vzc2lvbk51bSk7Ci0gIEdzdEJpbiAqYmluID0gR1NUX0JJTiAoZ3N0X2Jpbl9uZXcgKCJ2aWRlbyIpKTsKLSAgR3N0RWxlbWVudCAqcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOwotICBHc3RFbGVtZW50ICpkZXBheWxvYWRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHRoZW9yYWRlcGF5IiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKmRlY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0aGVvcmFkZWMiLCBOVUxMKTsKLSAgR3N0RWxlbWVudCAqY29udmVydGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9jb252ZXJ0IiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKnNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhdXRvdmlkZW9zaW5rIiwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoYmluLCBkZXBheWxvYWRlciwgZGVjb2RlciwgY29udmVydGVyLCBxdWV1ZSwgc2luaywgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAocXVldWUsIGRlcGF5bG9hZGVyLCBkZWNvZGVyLCBjb252ZXJ0ZXIsIHNpbmssIE5VTEwpOwotCi0gIHNldHVwX2dob3N0X3NpbmsgKHF1ZXVlLCBiaW4pOwotCi0gIHJldC0+b3V0cHV0ID0gR1NUX0VMRU1FTlQgKGJpbik7Ci0gIHJldC0+Y2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJhcHBsaWNhdGlvbi94LXJ0cCIsCi0gICAgICAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLAotICAgICAgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA5MDAwMCwKLSAgICAgICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgIlRIRU9SQSIsIE5VTEwpOwotCi0gIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBHc3RDYXBzICoKLXJlcXVlc3RfcHRfbWFwIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaW9uLCBndWludCBwdCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIFNlc3Npb25EYXRhICpkYXRhID0gKFNlc3Npb25EYXRhICopIHVzZXJfZGF0YTsKLSAgZ2NoYXIgKmNhcHNfc3RyOwotICBnX3ByaW50ICgiTG9va2luZyBmb3IgY2FwcyBmb3IgcHQgJXUgaW4gc2Vzc2lvbiAldSwgaGF2ZSAldVxuIiwgcHQsIHNlc3Npb24sCi0gICAgICBkYXRhLT5zZXNzaW9uTnVtKTsKLSAgaWYgKHNlc3Npb24gPT0gZGF0YS0+c2Vzc2lvbk51bSkgewotICAgIGNhcHNfc3RyID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChkYXRhLT5jYXBzKTsKLSAgICBnX3ByaW50ICgiUmV0dXJuaW5nICVzXG4iLCBjYXBzX3N0cik7Ci0gICAgZ19mcmVlIChjYXBzX3N0cik7Ci0gICAgcmV0dXJuIGdzdF9jYXBzX3JlZiAoZGF0YS0+Y2Fwcyk7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYl9lb3MgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gIGdfcHJpbnQgKCJHb3QgRU9TXG4iKTsKLSAgZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYl9zdGF0ZSAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR3N0T2JqZWN0ICpwaXBlID0gR1NUX09CSkVDVCAoZGF0YSk7Ci0gIEdzdFN0YXRlIG9sZCwgbmV3LCBwZW5kaW5nOwotICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFuZ2VkIChtZXNzYWdlLCAmb2xkLCAmbmV3LCAmcGVuZGluZyk7Ci0gIGlmIChtZXNzYWdlLT5zcmMgPT0gcGlwZSkgewotICAgIGdfcHJpbnQgKCJQaXBlbGluZSAlcyBjaGFuZ2VkIHN0YXRlIGZyb20gJXMgdG8gJXNcbiIsCi0gICAgICAgIEdTVF9PQkpFQ1RfTkFNRSAobWVzc2FnZS0+c3JjKSwKLSAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUgKG9sZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChuZXcpKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotY2Jfd2FybmluZyAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gIGdzdF9tZXNzYWdlX3BhcnNlX3dhcm5pbmcgKG1lc3NhZ2UsICZlcnJvciwgTlVMTCk7Ci0gIGdfcHJpbnRlcnIgKCJHb3Qgd2FybmluZyBmcm9tICVzOiAlc1xuIiwgR1NUX09CSkVDVF9OQU1FIChtZXNzYWdlLT5zcmMpLAotICAgICAgZXJyb3ItPm1lc3NhZ2UpOwotICBnX2Vycm9yX2ZyZWUgKGVycm9yKTsKLX0KLQotc3RhdGljIHZvaWQKLWNiX2Vycm9yIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZlcnJvciwgTlVMTCk7Ci0gIGdfcHJpbnRlcnIgKCJHb3QgZXJyb3IgZnJvbSAlczogJXNcbiIsIEdTVF9PQkpFQ1RfTkFNRSAobWVzc2FnZS0+c3JjKSwKLSAgICAgIGVycm9yLT5tZXNzYWdlKTsKLSAgZ19lcnJvcl9mcmVlIChlcnJvcik7Ci0gIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX25ld19zdHJlYW0gKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBHc3RQYWQgKiBuZXdQYWQsIGdwb2ludGVyIGRhdGEpCi17Ci0gIFNlc3Npb25EYXRhICpzZXNzaW9uID0gKFNlc3Npb25EYXRhICopIGRhdGE7Ci0gIGdjaGFyICpwYWROYW1lOwotICBnY2hhciAqbXlQcmVmaXg7Ci0KLSAgcGFkTmFtZSA9IGdzdF9wYWRfZ2V0X25hbWUgKG5ld1BhZCk7Ci0gIG15UHJlZml4ID0gZ19zdHJkdXBfcHJpbnRmICgicmVjdl9ydHBfc3JjXyV1Iiwgc2Vzc2lvbi0+c2Vzc2lvbk51bSk7Ci0KLSAgZ19wcmludCAoIk5ldyBwYWQ6ICVzLCBsb29raW5nIGZvciAlc18qXG4iLCBwYWROYW1lLCBteVByZWZpeCk7Ci0KLSAgaWYgKGdfc3RyX2hhc19wcmVmaXggKHBhZE5hbWUsIG15UHJlZml4KSkgewotICAgIEdzdFBhZCAqb3V0cHV0U2lua1BhZDsKLSAgICBHc3RFbGVtZW50ICpwYXJlbnQ7Ci0KLSAgICBwYXJlbnQgPSBHU1RfRUxFTUVOVCAoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudCAoc2Vzc2lvbi0+cnRwYmluKSk7Ci0gICAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBhcmVudCksIHNlc3Npb24tPm91dHB1dCk7Ci0gICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudCAoc2Vzc2lvbi0+b3V0cHV0KTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwYXJlbnQpOwotCi0gICAgb3V0cHV0U2lua1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzZXNzaW9uLT5vdXRwdXQsICJzaW5rIik7Ci0gICAgZ19hc3NlcnRfY21waW50IChnc3RfcGFkX2xpbmsgKG5ld1BhZCwgb3V0cHV0U2lua1BhZCksID09LCBHU1RfUEFEX0xJTktfT0spOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKG91dHB1dFNpbmtQYWQpOwotCi0gICAgZ19wcmludCAoIkxpbmtlZCFcbiIpOwotICB9Ci0gIGdfZnJlZSAobXlQcmVmaXgpOwotICBnX2ZyZWUgKHBhZE5hbWUpOwotfQotCi1zdGF0aWMgR3N0RWxlbWVudCAqCi1yZXF1ZXN0X2F1eF9yZWNlaXZlciAoR3N0RWxlbWVudCAqIHJ0cGJpbiwgZ3VpbnQgc2Vzc2lkLCBTZXNzaW9uRGF0YSAqIHNlc3Npb24pCi17Ci0gIEdzdEVsZW1lbnQgKnJ0eCwgKmJpbjsKLSAgR3N0UGFkICpwYWQ7Ci0gIGdjaGFyICpuYW1lOwotICBHc3RTdHJ1Y3R1cmUgKnB0X21hcDsKLQotICBHU1RfSU5GTyAoImNyZWF0aW5nIEFVWCByZWNlaXZlciIpOwotICBiaW4gPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIHJ0eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHJ0eHJlY2VpdmUiLCBOVUxMKTsKLSAgcHRfbWFwID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1wdC1tYXAiLAotICAgICAgIjgiLCBHX1RZUEVfVUlOVCwgOTgsICI5NiIsIEdfVFlQRV9VSU5ULCA5OSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocnR4LCAicGF5bG9hZC10eXBlLW1hcCIsIHB0X21hcCwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHRfbWFwKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHJ0eCk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0eCwgInNyYyIpOwotICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyV1Iiwgc2Vzc2lkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAobmFtZSwgcGFkKSk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0eCwgInNpbmsiKTsKLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmtfJXUiLCBzZXNzaWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3IChuYW1lLCBwYWQpKTsKLSAgZ19mcmVlIChuYW1lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICByZXR1cm4gYmluOwotfQotCi1zdGF0aWMgdm9pZAotam9pbl9zZXNzaW9uIChHc3RFbGVtZW50ICogcGlwZWxpbmUsIEdzdEVsZW1lbnQgKiBydHBCaW4sIFNlc3Npb25EYXRhICogc2Vzc2lvbikKLXsKLSAgR3N0RWxlbWVudCAqcnRwU3JjOwotICBHc3RFbGVtZW50ICpydGNwU3JjOwotICBHc3RFbGVtZW50ICpydGNwU2luazsKLSAgZ2NoYXIgKnBhZE5hbWU7Ci0gIGd1aW50IGJhc2VQb3J0OwotCi0gIGdfcHJpbnQgKCJKb2luaW5nIHNlc3Npb24gJXBcbiIsIHNlc3Npb24pOwotCi0gIHNlc3Npb24tPnJ0cGJpbiA9IGdfb2JqZWN0X3JlZiAocnRwQmluKTsKLQotICBiYXNlUG9ydCA9IDUwMDAgKyAoc2Vzc2lvbi0+c2Vzc2lvbk51bSAqIDYpOwotCi0gIHJ0cFNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNyYyIsIE5VTEwpOwotICBydGNwU3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidWRwc3JjIiwgTlVMTCk7Ci0gIHJ0Y3BTaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidWRwc2luayIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJ0cFNyYywgInBvcnQiLCBiYXNlUG9ydCwgImNhcHMiLCBzZXNzaW9uLT5jYXBzLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChydGNwU2luaywgInBvcnQiLCBiYXNlUG9ydCArIDUsICJob3N0IiwgIjEyNy4wLjAuMSIsICJzeW5jIiwKLSAgICAgIEZBTFNFLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocnRjcFNyYywgInBvcnQiLCBiYXNlUG9ydCArIDEsIE5VTEwpOwotCi0gIGdfcHJpbnQgKCJDb25uZWN0aW5nIHRvICVpLyVpLyVpXG4iLCBiYXNlUG9ydCwgYmFzZVBvcnQgKyAxLCBiYXNlUG9ydCArIDUpOwotCi0gIC8qIGVuYWJsZSBSRkM0NTg4IHJldHJhbnNtaXNzaW9uIGhhbmRsaW5nIGJ5IHNldHRpbmcgcnRwcnR4cmVjZWl2ZQotICAgKiBhcyB0aGUgImF1eCIgZWxlbWVudCBvZiBydHBiaW4gKi8KLSAgZ19zaWduYWxfY29ubmVjdCAocnRwQmluLCAicmVxdWVzdC1hdXgtcmVjZWl2ZXIiLAotICAgICAgKEdDYWxsYmFjaykgcmVxdWVzdF9hdXhfcmVjZWl2ZXIsIHNlc3Npb24pOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgcnRwU3JjLCBydGNwU3JjLCBydGNwU2luaywgTlVMTCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdF9kYXRhIChydHBCaW4sICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLIChoYW5kbGVfbmV3X3N0cmVhbSksCi0gICAgICBzZXNzaW9uX3JlZiAoc2Vzc2lvbiksIChHQ2xvc3VyZU5vdGlmeSkgc2Vzc2lvbl91bnJlZiwgMCk7Ci0KLSAgZ19zaWduYWxfY29ubmVjdF9kYXRhIChydHBCaW4sICJyZXF1ZXN0LXB0LW1hcCIsIEdfQ0FMTEJBQ0sgKHJlcXVlc3RfcHRfbWFwKSwKLSAgICAgIHNlc3Npb25fcmVmIChzZXNzaW9uKSwgKEdDbG9zdXJlTm90aWZ5KSBzZXNzaW9uX3VucmVmLCAwKTsKLQotICBwYWROYW1lID0gZ19zdHJkdXBfcHJpbnRmICgicmVjdl9ydHBfc2lua18ldSIsIHNlc3Npb24tPnNlc3Npb25OdW0pOwotICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHJ0cFNyYywgInNyYyIsIHJ0cEJpbiwgcGFkTmFtZSk7Ci0gIGdfZnJlZSAocGFkTmFtZSk7Ci0KLSAgcGFkTmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInJlY3ZfcnRjcF9zaW5rXyV1Iiwgc2Vzc2lvbi0+c2Vzc2lvbk51bSk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAocnRjcFNyYywgInNyYyIsIHJ0cEJpbiwgcGFkTmFtZSk7Ci0gIGdfZnJlZSAocGFkTmFtZSk7Ci0KLSAgcGFkTmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNlbmRfcnRjcF9zcmNfJXUiLCBzZXNzaW9uLT5zZXNzaW9uTnVtKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19wYWRzIChydHBCaW4sIHBhZE5hbWUsIHJ0Y3BTaW5rLCAic2luayIpOwotICBnX2ZyZWUgKHBhZE5hbWUpOwotCi0gIHNlc3Npb25fdW5yZWYgKHNlc3Npb24pOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgR3N0UGlwZWxpbmUgKnBpcGU7Ci0gIFNlc3Npb25EYXRhICp2aWRlb1Nlc3Npb247Ci0gIFNlc3Npb25EYXRhICphdWRpb1Nlc3Npb247Ci0gIEdzdEVsZW1lbnQgKnJ0cEJpbjsKLSAgR3N0QnVzICpidXM7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBwaXBlID0gR1NUX1BJUEVMSU5FIChnc3RfcGlwZWxpbmVfbmV3IChOVUxMKSk7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoR1NUX0VMRU1FTlQgKHBpcGUpKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZXJyb3IiLCBHX0NBTExCQUNLIChjYl9lcnJvciksIHBpcGUpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjp3YXJuaW5nIiwgR19DQUxMQkFDSyAoY2Jfd2FybmluZyksIHBpcGUpOwotICBnX3NpZ25hbF9jb25uZWN0IChidXMsICJtZXNzYWdlOjpzdGF0ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAoY2Jfc3RhdGUpLCBwaXBlKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZTo6ZW9zIiwgR19DQUxMQkFDSyAoY2JfZW9zKSwgTlVMTCk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLQotICBydHBCaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBiaW4iLCBOVUxMKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBydHBCaW4pOwotICBnX29iamVjdF9zZXQgKHJ0cEJpbiwgImxhdGVuY3kiLCAyMDAsICJkby1yZXRyYW5zbWlzc2lvbiIsIFRSVUUsCi0gICAgICAicnRwLXByb2ZpbGUiLCBHU1RfUlRQX1BST0ZJTEVfQVZQRiwgTlVMTCk7Ci0KLSAgdmlkZW9TZXNzaW9uID0gbWFrZV92aWRlb19zZXNzaW9uICgwKTsKLSAgYXVkaW9TZXNzaW9uID0gbWFrZV9hdWRpb19zZXNzaW9uICgxKTsKLQotICBqb2luX3Nlc3Npb24gKEdTVF9FTEVNRU5UIChwaXBlKSwgcnRwQmluLCB2aWRlb1Nlc3Npb24pOwotICBqb2luX3Nlc3Npb24gKEdTVF9FTEVNRU5UIChwaXBlKSwgcnRwQmluLCBhdWRpb1Nlc3Npb24pOwotCi0gIGdfcHJpbnQgKCJzdGFydGluZyBjbGllbnQgcGlwZWxpbmVcbiIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZ19wcmludCAoInN0b3BpbmcgY2xpZW50IHBpcGVsaW5lXG4iKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZSksIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1WVFMtSDI2M3AtQVRTLVBDTUEuc2ggYi90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1IMjYzcC1BVFMtUENNQS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggN2M3MzZmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1IMjYzcC1BVFMtUENNQS5zaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBBIHNpbXBsZSBSVFAgc2VydmVyIAotIwotCi1WQ0FQUz0idmlkZW8veC1yYXcsd2lkdGg9MzUyLGhlaWdodD0yODgsZnJhbWVyYXRlPTE1LzEiCi0KLWdzdC1sYXVuY2gtMS4wIC12IHJ0cGJpbiBuYW1lPXJ0cGJpbiBcCi0gICAgICAgICAgIHZpZGVvdGVzdHNyYyAhICRWQ0FQUyAhIGF2ZW5jX2gyNjNwICEgcnRwaDI2M3BwYXkgISBydHBiaW4uc2VuZF9ydHBfc2lua18wICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0cF9zcmNfMCAhIHVkcHNpbmsgcG9ydD01MDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMCAhIHVkcHNpbmsgcG9ydD01MDAxIHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICB1ZHBzcmMgcG9ydD01MDA1ICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgYXVkaW90ZXN0c3JjIHNhbXBsZXNwZXJidWZmZXI9MTAwMCAhIGFsYXdlbmMgISBydHBwY21hcGF5ICEgcnRwYmluLnNlbmRfcnRwX3NpbmtfMSAgXAotCSAgICAgICAgICAgICBydHBiaW4uc2VuZF9ydHBfc3JjXzEgISB1ZHBzaW5rIHBvcnQ9NTAwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMSAhIHVkcHNpbmsgcG9ydD01MDAzIHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICB1ZHBzcmMgcG9ydD01MDA3ICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzEKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItVlRTLVZQOC1BVFMtT1BVUy5zaCBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItVlRTLVZQOC1BVFMtT1BVUy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWY4NzAwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLVZUUy1WUDgtQVRTLU9QVVMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQSBzaW1wbGUgUlRQIHNlcnZlciAKLSMKLQotU1JDPWxvY2FsaG9zdAotREVTVD1sb2NhbGhvc3QKLVZDQVBTPSJ2aWRlby94LXJhdyx3aWR0aD0zNTIsaGVpZ2h0PTI4OCxmcmFtZXJhdGU9MTUvMSIKLQotZ3N0LWxhdW5jaC0xLjAgLXYgcnRwYmluIG5hbWU9cnRwYmluIFwKLSAgICAgICAgICAgdmlkZW90ZXN0c3JjICEgJFZDQVBTICEgdnA4ZW5jICEgcnRwdnA4cGF5ICEgcnRwYmluLnNlbmRfcnRwX3NpbmtfMCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICBydHBiaW4uc2VuZF9ydHBfc3JjXzAgISB1ZHBzaW5rIGhvc3Q9JERFU1QgcG9ydD01MDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMCAhIHVkcHNpbmsgaG9zdD0kREVTVCBwb3J0PTUwMDEgc3luYz1mYWxzZSBhc3luYz1mYWxzZSAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIHVkcHNyYyBhZGRyZXNzPSRTUkMgIHBvcnQ9NTAwNSAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIGF1ZGlvdGVzdHNyYyAhIG9wdXNlbmMgISBydHBvcHVzcGF5ICEgcnRwYmluLnNlbmRfcnRwX3NpbmtfMSAgXAotCSAgICAgICAgICAgICBydHBiaW4uc2VuZF9ydHBfc3JjXzEgISB1ZHBzaW5rIGhvc3Q9JERFU1QgcG9ydD01MDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICAgICAgICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18xICEgdWRwc2luayBob3N0PSRERVNUIHBvcnQ9NTAwMyBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgdWRwc3JjIGFkZHJlc3M9JFNSQyBwb3J0PTUwMDcgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYyBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItYWxzYXNyYy1QQ01BLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOGY3ZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBXaW0gVGF5bWFucyA8d2ltLnRheW1hbnNAZ21haWwuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLS8qCi0gKiBBIHNpbXBsZSBSVFAgc2VydmVyIAotICogIHNlbmRzIHRoZSBvdXRwdXQgb2YgYWxzYXNyYyBhcyBhbGF3IGVuY29kZWQgUlRQIG9uIHBvcnQgNTAwMiwgUlRDUCBpcyBzZW50IG9uCi0gKiAgcG9ydCA1MDAzLiBUaGUgZGVzdGluYXRpb24gaXMgMTI3LjAuMC4xLgotICogIHRoZSByZWNlaXZlciBSVENQIHJlcG9ydHMgYXJlIHJlY2VpdmVkIG9uIHBvcnQgNTAwNwotICoKLSAqIC4tLS0tLS0tLiAgICAuLS0tLS0tLS4gICAgLi0tLS0tLS0uICAgICAgLi0tLS0tLS0tLS0uICAgICAuLS0tLS0tLS4KLSAqIHxhbHNhc3JjfCAgICB8YWxhd2VuY3wgICAgfHBjbWFwYXl8ICAgICAgfCBydHBiaW4gICB8ICAgICB8dWRwc2lua3wgIFJUUAotICogfCAgICAgIHNyYy0+c2luayAgICBzcmMtPnNpbmsgICAgc3JjLT5zZW5kX3J0cCBzZW5kX3J0cC0+c2luayAgICAgfCBwb3J0PTUwMDIKLSAqICctLS0tLS0tJyAgICAnLS0tLS0tLScgICAgJy0tLS0tLS0nICAgICAgfCAgICAgICAgICB8ICAgICAnLS0tLS0tLScKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgLi0tLS0tLS0uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfHVkcHNpbmt8ICBSVENQCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgc2VuZF9ydGNwLT5zaW5rICAgICB8IHBvcnQ9NTAwMwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS4gICAgICB8ICAgICAgICAgIHwgICAgICctLS0tLS0tJyBzeW5jPWZhbHNlCi0gKiAgICAgICAgICAgICAgICBSVENQICAgICAgIHx1ZHBzcmMgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIGFzeW5jPWZhbHNlCi0gKiAgICAgICAgICAgICAgcG9ydD01MDA3ICAgIHwgICAgIHNyYy0+cmVjdl9ydGNwICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICctLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJyAgICAgICAgICAgICAgCi0gKi8KLQotLyogY2hhbmdlIHRoaXMgdG8gc2VuZCB0aGUgUlRQIGRhdGEgYW5kIFJUQ1AgdG8gYW5vdGhlciBob3N0ICovCi0jZGVmaW5lIERFU1RfSE9TVCAiMTI3LjAuMC4xIgotCi0vKiAjZGVmaW5lIEFVRElPX1NSQyAgImFsc2FzcmMiICovCi0jZGVmaW5lIEFVRElPX1NSQyAgImF1ZGlvdGVzdHNyYyIKLQotLyogdGhlIGVuY29kZXIgYW5kIHBheWxvYWRlciBlbGVtZW50cyAqLwotI2RlZmluZSBBVURJT19FTkMgICJhbGF3ZW5jIgotI2RlZmluZSBBVURJT19QQVkgICJydHBwY21hcGF5IgotCi0vKiBwcmludCB0aGUgc3RhdHMgb2YgYSBzb3VyY2UgKi8KLXN0YXRpYyB2b2lkCi1wcmludF9zb3VyY2Vfc3RhdHMgKEdPYmplY3QgKiBzb3VyY2UpCi17Ci0gIEdzdFN0cnVjdHVyZSAqc3RhdHM7Ci0gIGdjaGFyICpzdHI7Ci0KLSAgLyogZ2V0IHRoZSBzb3VyY2Ugc3RhdHMgKi8KLSAgZ19vYmplY3RfZ2V0IChzb3VyY2UsICJzdGF0cyIsICZzdGF0cywgTlVMTCk7Ci0KLSAgLyogc2ltcGx5IGR1bXAgdGhlIHN0YXRzIHN0cnVjdHVyZSAqLwotICBzdHIgPSBnc3Rfc3RydWN0dXJlX3RvX3N0cmluZyAoc3RhdHMpOwotICBnX3ByaW50ICgic291cmNlIHN0YXRzOiAlc1xuIiwgc3RyKTsKLQotICBnc3Rfc3RydWN0dXJlX2ZyZWUgKHN0YXRzKTsKLSAgZ19mcmVlIChzdHIpOwotfQotCi0vKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBldmVyeSBzZWNvbmQgYW5kIGR1bXBzIHRoZSBSVFAgbWFuYWdlciBzdGF0cyAqLwotc3RhdGljIGdib29sZWFuCi1wcmludF9zdGF0cyAoR3N0RWxlbWVudCAqIHJ0cGJpbikKLXsKLSAgR09iamVjdCAqc2Vzc2lvbjsKLSAgR1ZhbHVlQXJyYXkgKmFycjsKLSAgR1ZhbHVlICp2YWw7Ci0gIGd1aW50IGk7Ci0KLSAgZ19wcmludCAoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKLQotICAvKiBnZXQgc2Vzc2lvbiAwICovCi0gIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSAocnRwYmluLCAiZ2V0LWludGVybmFsLXNlc3Npb24iLCAwLCAmc2Vzc2lvbik7Ci0KLSAgLyogcHJpbnQgYWxsIHRoZSBzb3VyY2VzIGluIHRoZSBzZXNzaW9uLCB0aGlzIGluY2x1ZGVzIHRoZSBpbnRlcm5hbCBzb3VyY2UgKi8KLSAgZ19vYmplY3RfZ2V0IChzZXNzaW9uLCAic291cmNlcyIsICZhcnIsIE5VTEwpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBhcnItPm5fdmFsdWVzOyBpKyspIHsKLSAgICBHT2JqZWN0ICpzb3VyY2U7Ci0KLSAgICB2YWwgPSBnX3ZhbHVlX2FycmF5X2dldF9udGggKGFyciwgaSk7Ci0gICAgc291cmNlID0gZ192YWx1ZV9nZXRfb2JqZWN0ICh2YWwpOwotCi0gICAgcHJpbnRfc291cmNlX3N0YXRzIChzb3VyY2UpOwotICB9Ci0gIGdfdmFsdWVfYXJyYXlfZnJlZSAoYXJyKTsKLQotICBnX29iamVjdF91bnJlZiAoc2Vzc2lvbik7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLS8qIGJ1aWxkIGEgcGlwZWxpbmUgZXF1aXZhbGVudCB0bzoKLSAqCi0gKiBnc3QtbGF1bmNoLTEuMCAtdiBydHBiaW4gbmFtZT1ydHBiaW4gXAotICogICAgJEFVRElPX1NSQyAhIGF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUgISAkQVVESU9fRU5DICEgJEFVRElPX1BBWSAhIHJ0cGJpbi5zZW5kX3J0cF9zaW5rXzAgIFwKLSAqICAgICAgICAgICBydHBiaW4uc2VuZF9ydHBfc3JjXzAgISB1ZHBzaW5rIHBvcnQ9NTAwMiBob3N0PSRERVNUICAgICAgICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICAgICBydHBiaW4uc2VuZF9ydGNwX3NyY18wICEgdWRwc2luayBwb3J0PTUwMDMgaG9zdD0kREVTVCBzeW5jPWZhbHNlIGFzeW5jPWZhbHNlIFwKLSAqICAgICAgICB1ZHBzcmMgcG9ydD01MDA3ICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzAKLSAqLwotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICphdWRpb3NyYywgKmF1ZGlvY29udiwgKmF1ZGlvcmVzLCAqYXVkaW9lbmMsICphdWRpb3BheTsKLSAgR3N0RWxlbWVudCAqcnRwYmluLCAqcnRwc2luaywgKnJ0Y3BzaW5rLCAqcnRjcHNyYzsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0UGFkICpzcmNwYWQsICpzaW5rcGFkOwotCi0gIC8qIGFsd2F5cyBpbml0IGZpcnN0ICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIHRoZSBwaXBlbGluZSB0byBob2xkIGV2ZXJ5dGhpbmcgKi8KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLSAgZ19hc3NlcnQgKHBpcGVsaW5lKTsKLQotICAvKiB0aGUgYXVkaW8gY2FwdHVyZSBhbmQgZm9ybWF0IGNvbnZlcnNpb24gKi8KLSAgYXVkaW9zcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEFVRElPX1NSQywgImF1ZGlvc3JjIik7Ci0gIGdfYXNzZXJ0IChhdWRpb3NyYyk7Ci0gIGF1ZGlvY29udiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvY29udmVydCIsICJhdWRpb2NvbnYiKTsKLSAgZ19hc3NlcnQgKGF1ZGlvY29udik7Ci0gIGF1ZGlvcmVzID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9yZXNhbXBsZSIsICJhdWRpb3JlcyIpOwotICBnX2Fzc2VydCAoYXVkaW9yZXMpOwotICAvKiB0aGUgZW5jb2RpbmcgYW5kIHBheWxvYWRpbmcgKi8KLSAgYXVkaW9lbmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKEFVRElPX0VOQywgImF1ZGlvZW5jIik7Ci0gIGdfYXNzZXJ0IChhdWRpb2VuYyk7Ci0gIGF1ZGlvcGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChBVURJT19QQVksICJhdWRpb3BheSIpOwotICBnX2Fzc2VydCAoYXVkaW9wYXkpOwotCi0gIC8qIGFkZCBjYXB0dXJlIGFuZCBwYXlsb2FkaW5nIHRvIHRoZSBwaXBlbGluZSBhbmQgbGluayAqLwotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChwaXBlbGluZSksIGF1ZGlvc3JjLCBhdWRpb2NvbnYsIGF1ZGlvcmVzLAotICAgICAgYXVkaW9lbmMsIGF1ZGlvcGF5LCBOVUxMKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFueSAoYXVkaW9zcmMsIGF1ZGlvY29udiwgYXVkaW9yZXMsIGF1ZGlvZW5jLAotICAgICAgICAgIGF1ZGlvcGF5LCBOVUxMKSkgewotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBhdWRpb3NyYywgYXVkaW9jb252LCBhdWRpb3Jlc2FtcGxlLCAiCi0gICAgICAgICJhdWRpbyBlbmNvZGVyIGFuZCBhdWRpbyBwYXlsb2FkZXIiKTsKLSAgfQotCi0gIC8qIHRoZSBydHBiaW4gZWxlbWVudCAqLwotICBydHBiaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJydHBiaW4iLCAicnRwYmluIik7Ci0gIGdfYXNzZXJ0IChydHBiaW4pOwotCi0gIGdzdF9iaW5fYWRkIChHU1RfQklOIChwaXBlbGluZSksIHJ0cGJpbik7Ci0KLSAgLyogdGhlIHVkcCBzaW5rcyBhbmQgc291cmNlIHdlIHdpbGwgdXNlIGZvciBSVFAgYW5kIFJUQ1AgKi8KLSAgcnRwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNpbmsiLCAicnRwc2luayIpOwotICBnX2Fzc2VydCAocnRwc2luayk7Ci0gIGdfb2JqZWN0X3NldCAocnRwc2luaywgInBvcnQiLCA1MDAyLCAiaG9zdCIsIERFU1RfSE9TVCwgTlVMTCk7Ci0KLSAgcnRjcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzaW5rIiwgInJ0Y3BzaW5rIik7Ci0gIGdfYXNzZXJ0IChydGNwc2luayk7Ci0gIGdfb2JqZWN0X3NldCAocnRjcHNpbmssICJwb3J0IiwgNTAwMywgImhvc3QiLCBERVNUX0hPU1QsIE5VTEwpOwotICAvKiBubyBuZWVkIGZvciBzeW5jaHJvbmlzYXRpb24gb3IgcHJlcm9sbCBvbiB0aGUgUlRDUCBzaW5rICovCi0gIGdfb2JqZWN0X3NldCAocnRjcHNpbmssICJhc3luYyIsIEZBTFNFLCAic3luYyIsIEZBTFNFLCBOVUxMKTsKLQotICBydGNwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidWRwc3JjIiwgInJ0Y3BzcmMiKTsKLSAgZ19hc3NlcnQgKHJ0Y3BzcmMpOwotICBnX29iamVjdF9zZXQgKHJ0Y3BzcmMsICJwb3J0IiwgNTAwNywgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBydHBzaW5rLCBydGNwc2luaywgcnRjcHNyYywgTlVMTCk7Ci0KLSAgLyogbm93IGxpbmsgYWxsIHRvIHRoZSBydHBiaW4sIHN0YXJ0IGJ5IGdldHRpbmcgYW4gUlRQIHNpbmtwYWQgZm9yIHNlc3Npb24gMCAqLwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJzZW5kX3J0cF9zaW5rXzAiKTsKLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGF1ZGlvcGF5LCAic3JjIik7Ci0gIGlmIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBhdWRpbyBwYXlsb2FkZXIgdG8gcnRwYmluIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgLyogZ2V0IHRoZSBSVFAgc3JjcGFkIHRoYXQgd2FzIGNyZWF0ZWQgd2hlbiB3ZSByZXF1ZXN0ZWQgdGhlIHNpbmtwYWQgYWJvdmUgYW5kCi0gICAqIGxpbmsgaXQgdG8gdGhlIHJ0cHNpbmsgc2lua3BhZCovCi0gIHNyY3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydHBiaW4sICJzZW5kX3J0cF9zcmNfMCIpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0cHNpbmssICJzaW5rIik7Ci0gIGlmIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBydHBiaW4gdG8gcnRwc2luayIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiBnZXQgYW4gUlRDUCBzcmNwYWQgZm9yIHNlbmRpbmcgUlRDUCB0byB0aGUgcmVjZWl2ZXIgKi8KLSAgc3JjcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJzZW5kX3J0Y3Bfc3JjXzAiKTsKLSAgc2lua3BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChydGNwc2luaywgInNpbmsiKTsKLSAgaWYgKGdzdF9wYWRfbGluayAoc3JjcGFkLCBzaW5rcGFkKSAhPSBHU1RfUEFEX0xJTktfT0spCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIHJ0cGJpbiB0byBydGNwc2luayIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rcGFkKTsKLQotICAvKiB3ZSBhbHNvIHdhbnQgdG8gcmVjZWl2ZSBSVENQLCByZXF1ZXN0IGFuIFJUQ1Agc2lua3BhZCBmb3Igc2Vzc2lvbiAwIGFuZAotICAgKiBsaW5rIGl0IHRvIHRoZSBzcmNwYWQgb2YgdGhlIHVkcHNyYyBmb3IgUlRDUCAqLwotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAocnRjcHNyYywgInNyYyIpOwotICBzaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkIChydHBiaW4sICJyZWN2X3J0Y3Bfc2lua18wIik7Ci0gIGlmIChnc3RfcGFkX2xpbmsgKHNyY3BhZCwgc2lua3BhZCkgIT0gR1NUX1BBRF9MSU5LX09LKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBydGNwc3JjIHRvIHJ0cGJpbiIpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwotCi0gIC8qIHNldCB0aGUgcGlwZWxpbmUgdG8gcGxheWluZyAqLwotICBnX3ByaW50ICgic3RhcnRpbmcgc2VuZGVyIHBpcGVsaW5lXG4iKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIHByaW50IHN0YXRzIGV2ZXJ5IHNlY29uZCAqLwotICBnX3RpbWVvdXRfYWRkX3NlY29uZHMgKDEsIChHU291cmNlRnVuYykgcHJpbnRfc3RhdHMsIHJ0cGJpbik7Ci0KLSAgLyogd2UgbmVlZCB0byBydW4gYSBHTGliIG1haW4gbG9vcCB0byBnZXQgdGhlIG1lc3NhZ2VzICovCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLSAgZ19tYWluX2xvb3BfcnVuIChsb29wKTsKLQotICBnX3ByaW50ICgic3RvcHBpbmcgc2VuZGVyIHBpcGVsaW5lXG4iKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1hbHNhc3JjLVBDTUEuc2ggYi90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWFsc2FzcmMtUENNQS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYWFmZTA5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLWFsc2FzcmMtUENNQS5zaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBBIHNpbXBsZSBSVFAgc2VydmVyCi0jICBzZW5kcyB0aGUgb3V0cHV0IG9mIGF1dG9hdWRpb3NyYyBhcyBhbGF3IGVuY29kZWQgUlRQIG9uIHBvcnQgNTAwMiwgUlRDUCBpcyBzZW50IG9uCi0jICBwb3J0IDUwMDMuIFRoZSBkZXN0aW5hdGlvbiBpcyAxMjcuMC4wLjEuCi0jICB0aGUgcmVjZWl2ZXIgUlRDUCByZXBvcnRzIGFyZSByZWNlaXZlZCBvbiBwb3J0IDUwMDcKLSMKLSMgLi0tLS0tLS0tLiAgICAuLS0tLS0tLS4gICAgLi0tLS0tLS0uICAgICAgLi0tLS0tLS0tLS0uICAgICAuLS0tLS0tLS4KLSMgfGF1ZGlvc3JjfCAgICB8YWxhd2VuY3wgICAgfHBjbWFwYXl8ICAgICAgfCBydHBiaW4gICB8ICAgICB8dWRwc2lua3wgIFJUUAotIyB8ICAgICAgIHNyYy0+c2luayAgICBzcmMtPnNpbmsgICAgc3JjLT5zZW5kX3J0cCBzZW5kX3J0cC0+c2luayAgICAgfCBwb3J0PTUwMDIKLSMgJy0tLS0tLS0tJyAgICAnLS0tLS0tLScgICAgJy0tLS0tLS0nICAgICAgfCAgICAgICAgICB8ICAgICAnLS0tLS0tLScKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgLi0tLS0tLS0uCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgfHVkcHNpbmt8ICBSVENQCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgc2VuZF9ydGNwLT5zaW5rICAgICB8IHBvcnQ9NTAwMwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS4gICAgICB8ICAgICAgICAgIHwgICAgICctLS0tLS0tJyBzeW5jPWZhbHNlCi0jICAgICAgICAgICAgICAgICBSVENQICAgICAgIHx1ZHBzcmMgfCAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIGFzeW5jPWZhbHNlCi0jICAgICAgICAgICAgICAgcG9ydD01MDA3ICAgIHwgICAgIHNyYy0+cmVjdl9ydGNwICAgICAgfAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0tLS0tLScgICAgICAnLS0tLS0tLS0tLScKLQotIyBjaGFuZ2UgdGhpcyB0byBzZW5kIHRoZSBSVFAgZGF0YSBhbmQgUlRDUCB0byBhbm90aGVyIGhvc3QKLURFU1Q9MTI3LjAuMC4xCi0KLSNBRUxFTT1hdXRvYXVkaW9zcmMKLUFFTEVNPWF1ZGlvdGVzdHNyYwotCi0jIFBDTUEgZW5jb2RlIGZyb20gYW4gdGhlIHNvdXJjZQotQVNPVVJDRT0iJEFFTEVNICEgYXVkaW9jb252ZXJ0IgotQUVOQz0iYWxhd2VuYyAhIHJ0cHBjbWFwYXkiCi0KLWdzdC1sYXVuY2gtMS4wIC12IHJ0cGJpbiBuYW1lPXJ0cGJpbiBcCi0gICAgICRBU09VUkNFICEgJEFFTkMgISBydHBiaW4uc2VuZF9ydHBfc2lua18wICBcCi0gICAgICAgICAgICBydHBiaW4uc2VuZF9ydHBfc3JjXzAgISB1ZHBzaW5rIHBvcnQ9NTAwMiBob3N0PSRERVNUICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzAgISB1ZHBzaW5rIHBvcnQ9NTAwMyBob3N0PSRERVNUIHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UgXAotICAgICAgICAgdWRwc3JjIHBvcnQ9NTAwNyAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18wCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXJ0cGF1eC5jIGIvdGVzdHMvZXhhbXBsZXMvcnRwL3NlcnZlci1ydHBhdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyN2YyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXJ0cGF1eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk3ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCi0gKiAgIEBhdXRob3IgVG9ycmllIEZpc2NoZXIgPHRvcnJpZS5maXNjaGVyQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgotCi0vKgotICogQW4gUlRQIHNlcnZlcgotICogIGNyZWF0ZXMgdHdvIHNlc3Npb25zIGFuZCBzdHJlYW1zIGF1ZGlvIG9uIG9uZSwgdmlkZW8gb24gdGhlIG90aGVyLCB3aXRoIFJUQ1AKLSAqICBvbiBib3RoIHNlc3Npb25zLiBUaGUgZGVzdGluYXRpb24gaXMgMTI3LjAuMC4xLgotICoKLSAqICBJbiBib3RoIHNlc3Npb25zLCB3ZSBzZXQgInJ0cHJ0eHNlbmQiIGFzIHRoZSBzZXNzaW9uJ3MgImF1eCIgZWxlbWVudAotICogIGluIHJ0cGJpbiwgd2hpY2ggZW5hYmxlcyBSRkM0NTg4IHJldHJhbnNtaXNzaW9uIGZvciB0aGF0IHNlc3Npb24uCi0gKgotICogIC4tLS0tLS0tLiAgICAuLS0tLS0tLS4gICAgLi0tLS0tLS0uICAgICAgLi0tLS0tLS0tLS0tLS4gICAgICAgLi0tLS0tLS0uCi0gKiAgfGF1ZGlvdHN8ICAgIHxhbGF3ZW5jfCAgICB8cGNtYXBheXwgICAgICB8IHJ0cGJpbiAgICAgfCAgICAgICB8dWRwc2lua3wKLSAqICB8ICAgICAgc3JjLT5zaW5rICAgIHNyYy0+c2luayAgICBzcmMtPnNlbmRfcnRwXzAgc2VuZF9ydHBfMC0+c2luayAgICAgfAotICogICctLS0tLS0tJyAgICAnLS0tLS0tLScgICAgJy0tLS0tLS0nICAgICAgfCAgICAgICAgICAgIHwgICAgICAgJy0tLS0tLS0nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgCi0gKiAgLi0tLS0tLS0uICAgIC4tLS0tLS0tLS0uICAgIC4tLS0tLS0tLS0uICB8ICAgICAgICAgICAgfCAgICAgICAuLS0tLS0tLS4KLSAqICB8YXVkaW90c3wgICAgfHRoZW9yYWVuY3wgICAgfHRoZW9yYXBheXwgIHwgICAgICAgICAgICB8ICAgICAgIHx1ZHBzaW5rfAotICogIHwgICAgICBzcmMtPnNpbmsgICAgICBzcmMtPnNpbmsgIHNyYy0+c2VuZF9ydHBfMSBzZW5kX3J0cF8xLT5zaW5rICAgICB8Ci0gKiAgJy0tLS0tLS0nICAgICctLS0tLS0tLS0nICAgICctLS0tLS0tLS0nICB8ICAgICAgICAgICAgfCAgICAgICAnLS0tLS0tLScKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLiAgICB8ICAgICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHVkcHNyY3wgICAgfCAgICAgICAgICAgIHwgICAgICAgLi0tLS0tLS0uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBzcmMtPnJlY3ZfcnRjcF8wICAgfCAgICAgICB8dWRwc2lua3wKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLS0tLS0nICAgIHwgICAgICAgc2VuZF9ydGNwXzAtPnNpbmsgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgJy0tLS0tLS0nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLiAgICB8ICAgICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHVkcHNyY3wgICAgfCAgICAgICAgICAgIHwgICAgICAgLi0tLS0tLS0uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBzcmMtPnJlY3ZfcnRjcF8xICAgfCAgICAgICB8dWRwc2lua3wKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLS0tLS0nICAgIHwgICAgICAgc2VuZF9ydGNwXzEtPnNpbmsgICAgfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tLS0tLS0tLS0tLScgICAgICAgJy0tLS0tLS0nCi0gKgotICogVG8ga2VlcCB0aGUgc2V0IG9mIHBvcnRzIGNvbnNpc3RlbnQgYWNyb3NzIGJvdGggdGhpcyBzZXJ2ZXIgYW5kIHRoZQotICogY29ycmVzcG9uZGluZyBjbGllbnQsIGEgU2Vzc2lvbkRhdGEgc3RydWN0IG1hcHMgYSBydHBiaW4gc2Vzc2lvbiBudW1iZXIgdG8KLSAqIGEgR3N0QmluIGFuZCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyB1ZHAgc2lua3Mgd2l0aCBjb3JyZWN0Ci0gKiBwb3J0cy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBfU2Vzc2lvbkRhdGEKLXsKLSAgaW50IHJlZjsKLSAgZ3VpbnQgc2Vzc2lvbk51bTsKLSAgR3N0RWxlbWVudCAqaW5wdXQ7Ci19IFNlc3Npb25EYXRhOwotCi1zdGF0aWMgU2Vzc2lvbkRhdGEgKgotc2Vzc2lvbl9yZWYgKFNlc3Npb25EYXRhICogZGF0YSkKLXsKLSAgZ19hdG9taWNfaW50X2luYyAoJmRhdGEtPnJlZik7Ci0gIHJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgdm9pZAotc2Vzc2lvbl91bnJlZiAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgU2Vzc2lvbkRhdGEgKnNlc3Npb24gPSAoU2Vzc2lvbkRhdGEgKikgZGF0YTsKLSAgaWYgKGdfYXRvbWljX2ludF9kZWNfYW5kX3Rlc3QgKCZzZXNzaW9uLT5yZWYpKSB7Ci0gICAgZ19mcmVlIChzZXNzaW9uKTsKLSAgfQotfQotCi1zdGF0aWMgU2Vzc2lvbkRhdGEgKgotc2Vzc2lvbl9uZXcgKGd1aW50IHNlc3Npb25OdW0pCi17Ci0gIFNlc3Npb25EYXRhICpyZXQgPSBnX25ldzAgKFNlc3Npb25EYXRhLCAxKTsKLSAgcmV0LT5zZXNzaW9uTnVtID0gc2Vzc2lvbk51bTsKLSAgcmV0dXJuIHNlc3Npb25fcmVmIChyZXQpOwotfQotCi0vKgotICogVXNlZCB0byBnZW5lcmF0ZSBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBkdXJpbmcgcGlwZWxpbmUgc3RhcnR1cAotICovCi1zdGF0aWMgdm9pZAotY2Jfc3RhdGUgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gIEdzdE9iamVjdCAqcGlwZSA9IEdTVF9PQkpFQ1QgKGRhdGEpOwotICBHc3RTdGF0ZSBvbGQsIG5ldywgcGVuZGluZzsKLSAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RhdGVfY2hhbmdlZCAobWVzc2FnZSwgJm9sZCwgJm5ldywgJnBlbmRpbmcpOwotICBpZiAobWVzc2FnZS0+c3JjID09IHBpcGUpIHsKLSAgICBnX3ByaW50ICgiUGlwZWxpbmUgJXMgY2hhbmdlZCBzdGF0ZSBmcm9tICVzIHRvICVzXG4iLAotICAgICAgICBHU1RfT0JKRUNUX05BTUUgKG1lc3NhZ2UtPnNyYyksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lIChvbGQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSAobmV3KSk7Ci0gIH0KLX0KLQotLyoKLSAqIENyZWF0ZXMgYSBHc3RHaG9zdFBhZCBuYW1lZCAic3JjIiBvbiB0aGUgZ2l2ZW4gYmluLCBwb2ludGVkIGF0IHRoZSAic3JjIiBwYWQKLSAqIG9mIHRoZSBnaXZlbiBlbGVtZW50Ci0gKi8KLXN0YXRpYyB2b2lkCi1zZXR1cF9naG9zdCAoR3N0RWxlbWVudCAqIHNyYywgR3N0QmluICogYmluKQotewotICBHc3RQYWQgKnNyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkIChzcmMsICJzcmMiKTsKLSAgR3N0UGFkICpiaW5QYWQgPSBnc3RfZ2hvc3RfcGFkX25ldyAoInNyYyIsIHNyY1BhZCk7Ci0gIGdzdF9lbGVtZW50X2FkZF9wYWQgKEdTVF9FTEVNRU5UIChiaW4pLCBiaW5QYWQpOwotfQotCi1zdGF0aWMgU2Vzc2lvbkRhdGEgKgotbWFrZV9hdWRpb19zZXNzaW9uIChndWludCBzZXNzaW9uTnVtKQotewotICBTZXNzaW9uRGF0YSAqc2Vzc2lvbjsKLSAgR3N0QmluICphdWRpb0JpbiA9IEdTVF9CSU4gKGdzdF9iaW5fbmV3IChOVUxMKSk7Ci0gIEdzdEVsZW1lbnQgKmF1ZGlvU3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKmVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbGF3ZW5jIiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKnBheWxvYWRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHBjbWFwYXkiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChhdWRpb1NyYywgImlzLWxpdmUiLCBUUlVFLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChhdWRpb0JpbiwgYXVkaW9TcmMsIGVuY29kZXIsIHBheWxvYWRlciwgTlVMTCk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfbWFueSAoYXVkaW9TcmMsIGVuY29kZXIsIHBheWxvYWRlciwgTlVMTCk7Ci0KLSAgc2V0dXBfZ2hvc3QgKHBheWxvYWRlciwgYXVkaW9CaW4pOwotCi0gIHNlc3Npb24gPSBzZXNzaW9uX25ldyAoc2Vzc2lvbk51bSk7Ci0gIHNlc3Npb24tPmlucHV0ID0gR1NUX0VMRU1FTlQgKGF1ZGlvQmluKTsKLQotICByZXR1cm4gc2Vzc2lvbjsKLX0KLQotc3RhdGljIFNlc3Npb25EYXRhICoKLW1ha2VfdmlkZW9fc2Vzc2lvbiAoZ3VpbnQgc2Vzc2lvbk51bSkKLXsKLSAgR3N0QmluICp2aWRlb0JpbiA9IEdTVF9CSU4gKGdzdF9iaW5fbmV3IChOVUxMKSk7Ci0gIEdzdEVsZW1lbnQgKnZpZGVvU3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKmVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ0aGVvcmFlbmMiLCBOVUxMKTsKLSAgR3N0RWxlbWVudCAqcGF5bG9hZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwdGhlb3JhcGF5IiwgTlVMTCk7Ci0gIEdzdENhcHMgKnZpZGVvQ2FwczsKLSAgU2Vzc2lvbkRhdGEgKnNlc3Npb247Ci0gIGdfb2JqZWN0X3NldCAodmlkZW9TcmMsICJpcy1saXZlIiwgVFJVRSwgImhvcml6b250YWwtc3BlZWQiLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChwYXlsb2FkZXIsICJjb25maWctaW50ZXJ2YWwiLCAyLCBOVUxMKTsKLQotICBnc3RfYmluX2FkZF9tYW55ICh2aWRlb0JpbiwgdmlkZW9TcmMsIGVuY29kZXIsIHBheWxvYWRlciwgTlVMTCk7Ci0gIHZpZGVvQ2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUgKCJ2aWRlby94LXJhdyIsCi0gICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzNTIsCi0gICAgICAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgMjg4LCAiZnJhbWVyYXRlIiwgR1NUX1RZUEVfRlJBQ1RJT04sIDE1LCAxLCBOVUxMKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19maWx0ZXJlZCAodmlkZW9TcmMsIGVuY29kZXIsIHZpZGVvQ2Fwcyk7Ci0gIGdzdF9lbGVtZW50X2xpbmsgKGVuY29kZXIsIHBheWxvYWRlcik7Ci0KLSAgc2V0dXBfZ2hvc3QgKHBheWxvYWRlciwgdmlkZW9CaW4pOwotCi0gIHNlc3Npb24gPSBzZXNzaW9uX25ldyAoc2Vzc2lvbk51bSk7Ci0gIHNlc3Npb24tPmlucHV0ID0gR1NUX0VMRU1FTlQgKHZpZGVvQmluKTsKLQotICByZXR1cm4gc2Vzc2lvbjsKLX0KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotcmVxdWVzdF9hdXhfc2VuZGVyIChHc3RFbGVtZW50ICogcnRwYmluLCBndWludCBzZXNzaWQsIFNlc3Npb25EYXRhICogc2Vzc2lvbikKLXsKLSAgR3N0RWxlbWVudCAqcnR4LCAqYmluOwotICBHc3RQYWQgKnBhZDsKLSAgZ2NoYXIgKm5hbWU7Ci0gIEdzdFN0cnVjdHVyZSAqcHRfbWFwOwotCi0gIEdTVF9JTkZPICgiY3JlYXRpbmcgQVVYIHNlbmRlciIpOwotICBiaW4gPSBnc3RfYmluX25ldyAoTlVMTCk7Ci0gIHJ0eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInJ0cHJ0eHNlbmQiLCBOVUxMKTsKLSAgcHRfbWFwID0gZ3N0X3N0cnVjdHVyZV9uZXcgKCJhcHBsaWNhdGlvbi94LXJ0cC1wdC1tYXAiLAotICAgICAgIjgiLCBHX1RZUEVfVUlOVCwgOTgsICI5NiIsIEdfVFlQRV9VSU5ULCA5OSwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocnR4LCAicGF5bG9hZC10eXBlLW1hcCIsIHB0X21hcCwgTlVMTCk7Ci0gIGdzdF9zdHJ1Y3R1cmVfZnJlZSAocHRfbWFwKTsKLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKGJpbiksIHJ0eCk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0eCwgInNyYyIpOwotICBuYW1lID0gZ19zdHJkdXBfcHJpbnRmICgic3JjXyV1Iiwgc2Vzc2lkKTsKLSAgZ3N0X2VsZW1lbnRfYWRkX3BhZCAoYmluLCBnc3RfZ2hvc3RfcGFkX25ldyAobmFtZSwgcGFkKSk7Ci0gIGdfZnJlZSAobmFtZSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKHJ0eCwgInNpbmsiKTsKLSAgbmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNpbmtfJXUiLCBzZXNzaWQpOwotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3IChuYW1lLCBwYWQpKTsKLSAgZ19mcmVlIChuYW1lKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKLQotICByZXR1cm4gYmluOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBVRFAgc2lua3MgYW5kIHNvdXJjZXMgZm9yIFJUUC9SVENQLCBhZGRzIHRoZQotICogZ2l2ZW4gc2Vzc2lvbidzIGJpbiBpbnRvIHRoZSBwaXBlbGluZSwgYW5kIGxpbmtzIGl0IHRvIHRoZSBwcm9wZXJseSBudW1iZXJlZAotICogcGFkcyBvbiB0aGUgcnRwYmluCi0gKi8KLXN0YXRpYyB2b2lkCi1hZGRfc3RyZWFtIChHc3RQaXBlbGluZSAqIHBpcGUsIEdzdEVsZW1lbnQgKiBydHBCaW4sIFNlc3Npb25EYXRhICogc2Vzc2lvbikKLXsKLSAgR3N0RWxlbWVudCAqcnRwU2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInVkcHNpbmsiLCBOVUxMKTsKLSAgR3N0RWxlbWVudCAqcnRjcFNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzaW5rIiwgTlVMTCk7Ci0gIEdzdEVsZW1lbnQgKnJ0Y3BTcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ1ZHBzcmMiLCBOVUxMKTsKLSAgR3N0RWxlbWVudCAqaWRlbnRpdHkgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJpZGVudGl0eSIsIE5VTEwpOwotICBpbnQgYmFzZVBvcnQ7Ci0gIGdjaGFyICpwYWROYW1lOwotCi0gIGJhc2VQb3J0ID0gNTAwMCArIChzZXNzaW9uLT5zZXNzaW9uTnVtICogNik7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZSksIHJ0cFNpbmssIHJ0Y3BTaW5rLCBydGNwU3JjLCBpZGVudGl0eSwKLSAgICAgIHNlc3Npb24tPmlucHV0LCBOVUxMKTsKLQotICAvKiBlbmFibGUgcmV0cmFuc21pc3Npb24gYnkgc2V0dGluZyBydHBydHhzZW5kIGFzIHRoZSAiYXV4IiBlbGVtZW50IG9mIHJ0cGJpbiAqLwotICBnX3NpZ25hbF9jb25uZWN0IChydHBCaW4sICJyZXF1ZXN0LWF1eC1zZW5kZXIiLAotICAgICAgKEdDYWxsYmFjaykgcmVxdWVzdF9hdXhfc2VuZGVyLCBzZXNzaW9uKTsKLQotICBnX29iamVjdF9zZXQgKHJ0cFNpbmssICJwb3J0IiwgYmFzZVBvcnQsICJob3N0IiwgIjEyNy4wLjAuMSIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHJ0Y3BTaW5rLCAicG9ydCIsIGJhc2VQb3J0ICsgMSwgImhvc3QiLCAiMTI3LjAuMC4xIiwgInN5bmMiLAotICAgICAgRkFMU0UsICJhc3luYyIsIEZBTFNFLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChydGNwU3JjLCAicG9ydCIsIGJhc2VQb3J0ICsgNSwgTlVMTCk7Ci0KLSAgLyogdGhpcyBpcyBqdXN0IHRvIGRyb3Agc29tZSBydHAgcGFja2V0cyBhdCByYW5kb20sIHRvIGRlbW9uc3RyYXRlCi0gICAqIHRoYXQgcnRwcnR4c2VuZCBhY3R1YWxseSB3b3JrcyAqLwotICBnX29iamVjdF9zZXQgKGlkZW50aXR5LCAiZHJvcC1wcm9iYWJpbGl0eSIsIDAuMDEsIE5VTEwpOwotCi0gIHBhZE5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzZW5kX3J0cF9zaW5rXyV1Iiwgc2Vzc2lvbi0+c2Vzc2lvbk51bSk7Ci0gIGdzdF9lbGVtZW50X2xpbmtfcGFkcyAoc2Vzc2lvbi0+aW5wdXQsICJzcmMiLCBydHBCaW4sIHBhZE5hbWUpOwotICBnX2ZyZWUgKHBhZE5hbWUpOwotCi0gIC8qIGxpbmsgcnRwYmluIHRvIHVkcHNpbmsgZGlyZWN0bHkgaGVyZSBpZiB5b3UgZG9uJ3Qgd2FudAotICAgKiBhcnRpZmljaWFsIHBhY2tldCBsb3NzICovCi0gIHBhZE5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJzZW5kX3J0cF9zcmNfJXUiLCBzZXNzaW9uLT5zZXNzaW9uTnVtKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19wYWRzIChydHBCaW4sIHBhZE5hbWUsIGlkZW50aXR5LCAic2luayIpOwotICBnc3RfZWxlbWVudF9saW5rIChpZGVudGl0eSwgcnRwU2luayk7Ci0gIGdfZnJlZSAocGFkTmFtZSk7Ci0KLSAgcGFkTmFtZSA9IGdfc3RyZHVwX3ByaW50ZiAoInNlbmRfcnRjcF9zcmNfJXUiLCBzZXNzaW9uLT5zZXNzaW9uTnVtKTsKLSAgZ3N0X2VsZW1lbnRfbGlua19wYWRzIChydHBCaW4sIHBhZE5hbWUsIHJ0Y3BTaW5rLCAic2luayIpOwotICBnX2ZyZWUgKHBhZE5hbWUpOwotCi0gIHBhZE5hbWUgPSBnX3N0cmR1cF9wcmludGYgKCJyZWN2X3J0Y3Bfc2lua18ldSIsIHNlc3Npb24tPnNlc3Npb25OdW0pOwotICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHJ0Y3BTcmMsICJzcmMiLCBydHBCaW4sIHBhZE5hbWUpOwotICBnX2ZyZWUgKHBhZE5hbWUpOwotCi0gIGdfcHJpbnQgKCJOZXcgUlRQIHN0cmVhbSBvbiAlaS8laS8laVxuIiwgYmFzZVBvcnQsIGJhc2VQb3J0ICsgMSwKLSAgICAgIGJhc2VQb3J0ICsgNSk7Ci0KLSAgc2Vzc2lvbl91bnJlZiAoc2Vzc2lvbik7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RQaXBlbGluZSAqcGlwZTsKLSAgR3N0QnVzICpidXM7Ci0gIFNlc3Npb25EYXRhICp2aWRlb1Nlc3Npb247Ci0gIFNlc3Npb25EYXRhICphdWRpb1Nlc3Npb247Ci0gIEdzdEVsZW1lbnQgKnJ0cEJpbjsKLSAgR01haW5Mb29wICpsb29wOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIGxvb3AgPSBnX21haW5fbG9vcF9uZXcgKE5VTEwsIEZBTFNFKTsKLQotICBwaXBlID0gR1NUX1BJUEVMSU5FIChnc3RfcGlwZWxpbmVfbmV3IChOVUxMKSk7Ci0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKEdTVF9FTEVNRU5UIChwaXBlKSk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGJ1cywgIm1lc3NhZ2U6OnN0YXRlLWNoYW5nZWQiLCBHX0NBTExCQUNLIChjYl9zdGF0ZSksIHBpcGUpOwotICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2ggKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgcnRwQmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicnRwYmluIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocnRwQmluLCAicnRwLXByb2ZpbGUiLCBHU1RfUlRQX1BST0ZJTEVfQVZQRiwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGQgKEdTVF9CSU4gKHBpcGUpLCBydHBCaW4pOwotCi0gIHZpZGVvU2Vzc2lvbiA9IG1ha2VfdmlkZW9fc2Vzc2lvbiAoMCk7Ci0gIGF1ZGlvU2Vzc2lvbiA9IG1ha2VfYXVkaW9fc2Vzc2lvbiAoMSk7Ci0gIGFkZF9zdHJlYW0gKHBpcGUsIHJ0cEJpbiwgdmlkZW9TZXNzaW9uKTsKLSAgYWRkX3N0cmVhbSAocGlwZSwgcnRwQmluLCBhdWRpb1Nlc3Npb24pOwotCi0gIGdfcHJpbnQgKCJzdGFydGluZyBzZXJ2ZXIgcGlwZWxpbmVcbiIpOwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKEdTVF9FTEVNRU5UIChwaXBlKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZ19wcmludCAoInN0b3BwaW5nIHNlcnZlciBwaXBlbGluZVxuIik7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZSk7Ci0gIGdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaCBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjYzcC1hbHNhc3JjLUFNUi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTNlZjVhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXY0bDItSDI2M3AtYWxzYXNyYy1BTVIuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQSBzaW1wbGUgUlRQIHNlcnZlcgotIwotCi0jIGNoYW5nZSB0aGVzZSB0byBjaGFuZ2UgdGhlIHNlcnZlciBzeW5jLiBUaGlzIGNhdXNlcyB0aGUgc2VydmVyIHRvIHNlbmQgdGhlCi0jIHBhY2tldHMgbGFyZ2x5IG91dC1vZi1zeW5jLCB0aGUgY2xpZW50IHNob3VsZCB1c2UgdGhlIFJUQ1AgU1IgcGFja2V0cyB0bwotIyByZXN0b3JlIHByb3BlciBsaXAtc3luYyBiZXR3ZWVuIHRoZSBzdHJlYW1zLgotQU9GRlNFVD0wCi1WT0ZGU0VUPTAKLQotVkNBUFM9InZpZGVvL3gtcmF3LHdpZHRoPTM1MixoZWlnaHQ9Mjg4LGZyYW1lcmF0ZT0xNS8xIgotCi0jREVTVD0xOTIuMTY4LjEuMTI2Ci1ERVNUPWxvY2FsaG9zdAotCi1nc3QtbGF1bmNoLTEuMCAtdiBydHBiaW4gbmFtZT1ydHBiaW4gXAotICAgICAgICAgICB2NGwyc3JjICEgdmlkZW9yYXRlICEgdmlkZW9jb252ZXJ0ICEgJFZDQVBTICEgYXZlbmNfaDI2M3AgISBydHBoMjYzcHBheSAhIHJ0cGJpbi5zZW5kX3J0cF9zaW5rXzAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICBydHBiaW4uc2VuZF9ydHBfc3JjXzAgISBxdWV1ZSAhIHVkcHNpbmsgaG9zdD0kREVTVCBwb3J0PTUwMDAgdHMtb2Zmc2V0PSRBT0ZGU0VUICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMCAhIHVkcHNpbmsgaG9zdD0kREVTVCBwb3J0PTUwMDEgc3luYz1mYWxzZSBhc3luYz1mYWxzZSAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIHVkcHNyYyBwb3J0PTUwMDUgISBydHBiaW4ucmVjdl9ydGNwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIGF1dG9hdWRpb3NyYyAhIGF1ZGlvY29udmVydCAhIGFtcm5iZW5jICEgcnRwYW1ycGF5ICEgcnRwYmluLnNlbmRfcnRwX3NpbmtfMSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0cF9zcmNfMSAhIHF1ZXVlICEgdWRwc2luayBob3N0PSRERVNUIHBvcnQ9NTAwMiB0cy1vZmZzZXQ9JFZPRkZTRVQgICAgICBcCi0JICAgICAgICAgICAgIHJ0cGJpbi5zZW5kX3J0Y3Bfc3JjXzEgISB1ZHBzaW5rIGhvc3Q9JERFU1QgcG9ydD01MDAzIHN5bmM9ZmFsc2UgYXN5bmM9ZmFsc2UgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICB1ZHBzcmMgcG9ydD01MDA3ICEgcnRwYmluLnJlY3ZfcnRjcF9zaW5rXzEKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaCBiL3Rlc3RzL2V4YW1wbGVzL3J0cC9zZXJ2ZXItdjRsMi1IMjY0LWFsc2FzcmMtUENNQS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYWM3MjdhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9ydHAvc2VydmVyLXY0bDItSDI2NC1hbHNhc3JjLVBDTUEuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQSBzaW1wbGUgUlRQIHNlcnZlcgotIyAgc2VuZHMgdGhlIG91dHB1dCBvZiB2NGwyc3JjIGFzIGgyNjQgZW5jb2RlZCBSVFAgb24gcG9ydCA1MDAwLCBSVENQIGlzIHNlbnQgb24KLSMgIHBvcnQgNTAwMS4gVGhlIGRlc3RpbmF0aW9uIGlzIDEyNy4wLjAuMS4KLSMgIHRoZSB2aWRlbyByZWNlaXZlciBSVENQIHJlcG9ydHMgYXJlIHJlY2VpdmVkIG9uIHBvcnQgNTAwNQotIyAgc2VuZHMgdGhlIG91dHB1dCBvZiBhdXRvYXVkaW9zcmMgYXMgYWxhdyBlbmNvZGVkIFJUUCBvbiBwb3J0IDUwMDIsIFJUQ1AgaXMgc2VudCBvbgotIyAgcG9ydCA1MDAzLiBUaGUgZGVzdGluYXRpb24gaXMgMTI3LjAuMC4xLgotIyAgdGhlIHJlY2VpdmVyIFJUQ1AgcmVwb3J0cyBhcmUgcmVjZWl2ZWQgb24gcG9ydCA1MDA3Ci0jCi0jICAuLS0tLS0tLS4gICAgLi0tLS0tLS0uICAgIC4tLS0tLS0tLiAgICAgIC4tLS0tLS0tLS0tLiAgICAgLi0tLS0tLS0uCi0jICB8djRsc3NyY3wgICAgfGgyNjRlbmN8ICAgIHxoMjY0cGF5fCAgICAgIHwgcnRwYmluICAgfCAgICAgfHVkcHNpbmt8ICBSVFAKLSMgIHwgICAgICBzcmMtPnNpbmsgICAgc3JjLT5zaW5rICAgIHNyYy0+c2VuZF9ydHAgc2VuZF9ydHAtPnNpbmsgICAgIHwgcG9ydD01MDAwCi0jICAnLS0tLS0tLScgICAgJy0tLS0tLS0nICAgICctLS0tLS0tJyAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0nCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIC4tLS0tLS0tLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgIHx1ZHBzaW5rfCAgUlRDUAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHNlbmRfcnRjcC0+c2luayAgICAgfCBwb3J0PTUwMDEKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi0tLS0tLS0uICAgICAgfCAgICAgICAgICB8ICAgICAnLS0tLS0tLScgc3luYz1mYWxzZQotIyAgICAgICAgICAgICAgICAgUlRDUCAgICAgICB8dWRwc3JjIHwgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICBhc3luYz1mYWxzZQotIyAgICAgICAgICAgICAgIHBvcnQ9NTAwNSAgICB8ICAgICBzcmMtPnJlY3ZfcnRjcCAgICAgIHwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tLS0tLS0nICAgICAgfCAgICAgICAgICB8Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAotIyAuLS0tLS0tLS0uICAgIC4tLS0tLS0tLiAgICAuLS0tLS0tLS4gICAgICB8ICAgICAgICAgIHwgICAgIC4tLS0tLS0tLgotIyB8YXVkaW9zcmN8ICAgIHxhbGF3ZW5jfCAgICB8cGNtYXBheXwgICAgICB8IHJ0cGJpbiAgIHwgICAgIHx1ZHBzaW5rfCAgUlRQCi0jIHwgICAgICAgc3JjLT5zaW5rICAgIHNyYy0+c2luayAgICBzcmMtPnNlbmRfcnRwIHNlbmRfcnRwLT5zaW5rICAgICB8IHBvcnQ9NTAwMgotIyAnLS0tLS0tLS0nICAgICctLS0tLS0tJyAgICAnLS0tLS0tLScgICAgICB8ICAgICAgICAgIHwgICAgICctLS0tLS0tJwotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAuLS0tLS0tLS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICB8dWRwc2lua3wgIFJUQ1AKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBzZW5kX3J0Y3AtPnNpbmsgICAgIHwgcG9ydD01MDAzCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4tLS0tLS0tLiAgICAgIHwgICAgICAgICAgfCAgICAgJy0tLS0tLS0nIHN5bmM9ZmFsc2UKLSMgICAgICAgICAgICAgICAgIFJUQ1AgICAgICAgfHVkcHNyYyB8ICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgYXN5bmM9ZmFsc2UKLSMgICAgICAgICAgICAgICBwb3J0PTUwMDcgICAgfCAgICAgc3JjLT5yZWN2X3J0Y3AgICAgICB8Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLS0tLS0tJyAgICAgICctLS0tLS0tLS0tJwotIwotIyBpZGVhbGx5IHdlIHNob3VsZCB0cmFuc3BvcnQgdGhlIHByb3BlcnRpZXMgb24gdGhlIFJUUCB1ZHBzaW5rIHBhZHMgdG8gdGhlCi0jIHJlY2VpdmVyIGluIG9yZGVyIHRvIHRyYW5zbWl0IHRoZSBTUFMgYW5kIFBQUyBlYXJsaWVyLgotCi0jIGNoYW5nZSB0aGlzIHRvIHNlbmQgdGhlIFJUUCBkYXRhIGFuZCBSVENQIHRvIGFub3RoZXIgaG9zdAotREVTVD0xMjcuMC4wLjEKLQotIyB0dW5pbmcgcGFyYW1ldGVycyB0byBtYWtlIHRoZSBzZW5kZXIgc2VuZCB0aGUgc3RyZWFtcyBvdXQgb2Ygc3luYy4gQ2FuIGJlIHVzZWQKLSMgb3QgdGVzdCB0aGUgY2xpZW50IFJUQ1Agc3luY2hyb25pc2F0aW9uLgotI1ZPRkZTRVQ9OTAwMDAwMDAwCi1WT0ZGU0VUPTAKLUFPRkZTRVQ9MAotCi0jIEgyNjQgZW5jb2RlIGZyb20gdGhlIHNvdXJjZQotVkVMRU09InY0bDJzcmMiCi0jVkVMRU09InZpZGVvdGVzdHNyYyBpcy1saXZlPTEiCi1WQ0FQUz0idmlkZW8veC1yYXcsd2lkdGg9MzUyLGhlaWdodD0yODgsZnJhbWVyYXRlPTE1LzEiCi1WU09VUkNFPSIkVkVMRU0gISBxdWV1ZSAhIHZpZGVvcmF0ZSAhIHZpZGVvY29udmVydCAhICRWQ0FQUyIKLVZFTkM9IngyNjRlbmMgdHVuZT16ZXJvbGF0ZW5jeSBieXRlLXN0cmVhbT10cnVlIGJpdHJhdGU9MzAwICEgcnRwaDI2NHBheSIKLQotVlJUUFNJTks9InVkcHNpbmsgcG9ydD01MDAwIGhvc3Q9JERFU1QgdHMtb2Zmc2V0PSRWT0ZGU0VUIG5hbWU9dnJ0cHNpbmsiCi1WUlRDUFNJTks9InVkcHNpbmsgcG9ydD01MDAxIGhvc3Q9JERFU1Qgc3luYz1mYWxzZSBhc3luYz1mYWxzZSBuYW1lPXZydGNwc2luayIKLVZSVENQU1JDPSJ1ZHBzcmMgcG9ydD01MDA1IG5hbWU9dnJ0cHNyYyIKLQotIyBQQ01BIGVuY29kZSBmcm9tIHRoZSBzb3VyY2UKLUFFTEVNPSJhdXRvYXVkaW9zcmMiCi0jQUVMRU09ImF1ZGlvdGVzdHNyYyBpcy1saXZlPTEiCi1BU09VUkNFPSIkQUVMRU0gISBxdWV1ZSAhIGF1ZGlvcmVzYW1wbGUgISBhdWRpb2NvbnZlcnQiCi1BRU5DPSJhbGF3ZW5jICEgcnRwcGNtYXBheSIKLQotQVJUUFNJTks9InVkcHNpbmsgcG9ydD01MDAyIGhvc3Q9JERFU1QgdHMtb2Zmc2V0PSRBT0ZGU0VUIG5hbWU9YXJ0cHNpbmsiCi1BUlRDUFNJTks9InVkcHNpbmsgcG9ydD01MDAzIGhvc3Q9JERFU1Qgc3luYz1mYWxzZSBhc3luYz1mYWxzZSBuYW1lPWFydGNwc2luayIKLUFSVENQU1JDPSJ1ZHBzcmMgcG9ydD01MDA3IG5hbWU9YXJ0cHNyYyIKLQotZ3N0LWxhdW5jaC0xLjAgLXYgcnRwYmluIG5hbWU9cnRwYmluIFwKLSAgICAkVlNPVVJDRSAhICRWRU5DICEgcnRwYmluLnNlbmRfcnRwX3NpbmtfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnRwYmluLnNlbmRfcnRwX3NyY18wICEgJFZSVFBTSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMCAhICRWUlRDUFNJTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICRWUlRDUFNSQyAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAkQVNPVVJDRSAhICRBRU5DICEgcnRwYmluLnNlbmRfcnRwX3NpbmtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnRwYmluLnNlbmRfcnRwX3NyY18xICEgJEFSVFBTSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnRwYmluLnNlbmRfcnRjcF9zcmNfMSAhICRBUlRDUFNJTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICRBUlRDUFNSQyAhIHJ0cGJpbi5yZWN2X3J0Y3Bfc2lua18xCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZTkyMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1ub2luc3RfUFJPR1JBTVMgPSBzaGFwZXdpcGUtZXhhbXBsZQotCi1zaGFwZXdpcGVfZXhhbXBsZV9TT1VSQ0VTID0gc2hhcGV3aXBlLWV4YW1wbGUuYwotc2hhcGV3aXBlX2V4YW1wbGVfQ0ZMQUdTID0gJChHU1RfQ09OVFJPTExFUl9DRkxBR1MpICQoR1NUX0NGTEFHUykKLXNoYXBld2lwZV9leGFtcGxlX0xEQUREID0gJChHU1RfQ09OVFJPTExFUl9MSUJTKSAkKEdTVF9MSUJTKQotCi1ub2luc3RfSEVBREVSUyA9IAotCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNzg1MDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODU4ICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IHNoYXBld2lwZS1leGFtcGxlJChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKG5vaW5zdF9IRUFERVJTKSBcCi0JJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fc2hhcGV3aXBlX2V4YW1wbGVfT0JKRUNUUyA9ICBcCi0Jc2hhcGV3aXBlX2V4YW1wbGUtc2hhcGV3aXBlLWV4YW1wbGUuJChPQkpFWFQpCi1zaGFwZXdpcGVfZXhhbXBsZV9PQkpFQ1RTID0gJChhbV9zaGFwZXdpcGVfZXhhbXBsZV9PQkpFQ1RTKQotYW1fX0RFUEVOREVOQ0lFU18xID0KLXNoYXBld2lwZV9leGFtcGxlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1zaGFwZXdpcGVfZXhhbXBsZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoc2hhcGV3aXBlX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1ERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKQotZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAotYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKLWFtX19tdiA9IG12IC1mCi1DT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKLQkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCi0JJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCi0JJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotQU1fVl9DQyA9ICQoYW1fX3ZfQ0NfQEFNX1ZAKQotYW1fX3ZfQ0NfID0gJChhbV9fdl9DQ19AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDXzAgPSBAZWNobyAiICBDQyAgICAgICIgJEA7Ci1hbV9fdl9DQ18xID0gCi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCi1hbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKLWFtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKLWFtX192X0NDTERfMSA9IAotU09VUkNFUyA9ICQoc2hhcGV3aXBlX2V4YW1wbGVfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoc2hhcGV3aXBlX2V4YW1wbGVfU09VUkNFUykKLWFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXAotICBjYXNlICQkQU1fVVBEQVRFX0lORk9fRElSIGluIFwKLSAgICBufG5vfE5PKSBmYWxzZTs7IFwKLSAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAotICBlc2FjCi1IRUFERVJTID0gJChub2luc3RfSEVBREVSUykKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotc2hhcGV3aXBlX2V4YW1wbGVfU09VUkNFUyA9IHNoYXBld2lwZS1leGFtcGxlLmMKLXNoYXBld2lwZV9leGFtcGxlX0NGTEFHUyA9ICQoR1NUX0NPTlRST0xMRVJfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi1zaGFwZXdpcGVfZXhhbXBsZV9MREFERCA9ICQoR1NUX0NPTlRST0xMRVJfTElCUykgJChHU1RfTElCUykKLW5vaW5zdF9IRUFERVJTID0gCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLXNoYXBld2lwZS1leGFtcGxlJChFWEVFWFQpOiAkKHNoYXBld2lwZV9leGFtcGxlX09CSkVDVFMpICQoc2hhcGV3aXBlX2V4YW1wbGVfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3NoYXBld2lwZV9leGFtcGxlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHNoYXBld2lwZS1leGFtcGxlJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChzaGFwZXdpcGVfZXhhbXBsZV9MSU5LKSAkKHNoYXBld2lwZV9leGFtcGxlX09CSkVDVFMpICQoc2hhcGV3aXBlX2V4YW1wbGVfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3NoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLlBvQGFtX19xdW90ZUAKLQotLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKLQotLmMubG86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLXNoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm86IHNoYXBld2lwZS1leGFtcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzaGFwZXdpcGVfZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc2hhcGV3aXBlX2V4YW1wbGUtc2hhcGV3aXBlLWV4YW1wbGUubyAtTUQgLU1QIC1NRiAkKERFUERJUikvc2hhcGV3aXBlX2V4YW1wbGUtc2hhcGV3aXBlLWV4YW1wbGUuVHBvIC1jIC1vIHNoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm8gYHRlc3QgLWYgJ3NoYXBld2lwZS1leGFtcGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNoYXBld2lwZS1leGFtcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3NoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLlRwbyAkKERFUERJUikvc2hhcGV3aXBlX2V4YW1wbGUtc2hhcGV3aXBlLWV4YW1wbGUuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzaGFwZXdpcGUtZXhhbXBsZS5jJyBvYmplY3Q9J3NoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNoYXBld2lwZV9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm8gYHRlc3QgLWYgJ3NoYXBld2lwZS1leGFtcGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNoYXBld2lwZS1leGFtcGxlLmMKLQotc2hhcGV3aXBlX2V4YW1wbGUtc2hhcGV3aXBlLWV4YW1wbGUub2JqOiBzaGFwZXdpcGUtZXhhbXBsZS5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoc2hhcGV3aXBlX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvc2hhcGV3aXBlX2V4YW1wbGUtc2hhcGV3aXBlLWV4YW1wbGUuVHBvIC1jIC1vIHNoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm9iaiBgaWYgdGVzdCAtZiAnc2hhcGV3aXBlLWV4YW1wbGUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaGFwZXdpcGUtZXhhbXBsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaGFwZXdpcGUtZXhhbXBsZS5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9zaGFwZXdpcGVfZXhhbXBsZS1zaGFwZXdpcGUtZXhhbXBsZS5UcG8gJChERVBESVIpL3NoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc2hhcGV3aXBlLWV4YW1wbGUuYycgb2JqZWN0PSdzaGFwZXdpcGVfZXhhbXBsZS1zaGFwZXdpcGUtZXhhbXBsZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNoYXBld2lwZV9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNoYXBld2lwZV9leGFtcGxlLXNoYXBld2lwZS1leGFtcGxlLm9iaiBgaWYgdGVzdCAtZiAnc2hhcGV3aXBlLWV4YW1wbGUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzaGFwZXdpcGUtZXhhbXBsZS5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zaGFwZXdpcGUtZXhhbXBsZS5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKSAkKEhFQURFUlMpCi1pbnN0YWxsZGlyczoKLWluc3RhbGw6IGluc3RhbGwtYW0KLWluc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCi1pbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQotdW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KLQotaW5zdGFsbC1hbTogYWxsLWFtCi0JQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KLQotaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KLWluc3RhbGwtc3RyaXA6Ci0JaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAgIGluc3RhbGw7IFwKLQllbHNlIFwKLQkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCi0JICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAotCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAotCWZpCi1tb3N0bHljbGVhbi1nZW5lcmljOgotCi1jbGVhbi1nZW5lcmljOgotCi1kaXN0Y2xlYW4tZ2VuZXJpYzoKLQktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKLQktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKLQotbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgotCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKLQlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCi1jbGVhbjogY2xlYW4tYW0KLQotY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCi0JbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tdGFncwotCi1kdmk6IGR2aS1hbQotCi1kdmktYW06Ci0KLWh0bWw6IGh0bWwtYW0KLQotaHRtbC1hbToKLQotaW5mbzogaW5mby1hbQotCi1pbmZvLWFtOgotCi1pbnN0YWxsLWRhdGEtYW06Ci0KLWluc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQotCi1pbnN0YWxsLWR2aS1hbToKLQotaW5zdGFsbC1leGVjLWFtOgotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46Ci0KLWluc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQotCi1pbnN0YWxsLXBkZi1hbToKLQotaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQotCi1pbnN0YWxsLXBzLWFtOgotCi1pbnN0YWxsY2hlY2stYW06Ci0KLW1haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKLQltb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKLQljdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCi0JaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKLQlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCi0JbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWNvbXBpbGUgXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQotCi0uUFJFQ0lPVVM6IE1ha2VmaWxlCi0KLQotIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KLSMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgotLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvdGVzdHMvZXhhbXBsZXMvc2hhcGV3aXBlL3NoYXBld2lwZS1leGFtcGxlLmMgYi90ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNzM0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9zaGFwZXdpcGUvc2hhcGV3aXBlLWV4YW1wbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKiBHU3RyZWFtZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW4uZHJvZWdlQGNvbGxhYm9yYS5jby51az4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGxmb2NvbnRyb2xzb3VyY2UuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RkaXJlY3Rjb250cm9sYmluZGluZy5oPgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXN0YXRpYyBnYm9vbGVhbgotb25fbWVzc2FnZSAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHTWFpbkxvb3AgKmxvb3AgPSAoR01haW5Mb29wICopIHVzZXJfZGF0YTsKLQotICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUgKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0gICAgICBnY2hhciAqZGVidWcgPSBOVUxMOwotCi0gICAgICBnX3dhcm5pbmcgKCJHb3QgRVJST1IiKTsKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZXJyLCAmZGVidWcpOwotICAgICAgZ193YXJuaW5nICgiJXM6ICVzIiwgZXJyLT5tZXNzYWdlLCBkZWJ1Zyk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX1dBUk5JTkc6ewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgICAgZ2NoYXIgKmRlYnVnID0gTlVMTDsKLQotICAgICAgZ193YXJuaW5nICgiR290IFdBUk5JTkciKTsKLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtZXNzYWdlLCAmZXJyLCAmZGVidWcpOwotICAgICAgZ193YXJuaW5nICgiJXM6ICVzIiwgZXJyLT5tZXNzYWdlLCBkZWJ1Zyk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWdpbnQKLW1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdEVsZW1lbnQgKnNoYXBld2lwZTsKLSAgR3N0Q29udHJvbFNvdXJjZSAqY3M7Ci0gIEdNYWluTG9vcCAqbG9vcDsKLSAgR3N0QnVzICpidXM7Ci0gIGdjaGFyICpwaXBlbGluZV9zdHJpbmc7Ci0gIGdmbG9hdCBib3JkZXIgPSAwLjA1OwotCi0gIGlmIChhcmdjIDwgMikgewotICAgIGdfcHJpbnQgKCJVc2FnZTogc2hhcGV3aXBlIG1hc2sucG5nIDxib3JkZXI+XG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBpZiAoYXJnYyA+IDIpIHsKLSAgICBib3JkZXIgPSBhdG9mIChhcmd2WzJdKTsKLSAgfQotCi0gIHBpcGVsaW5lX3N0cmluZyA9Ci0gICAgICBnX3N0cmR1cF9wcmludGYKLSAgICAgICgidmlkZW90ZXN0c3JjICEgdmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpQVlVVix3aWR0aD02NDAsaGVpZ2h0PTQ4MCAhIHNoYXBld2lwZSBuYW1lPXNoYXBlIGJvcmRlcj0lZiAhIHZpZGVvbWl4ZXIgbmFtZT1taXhlciAhIHZpZGVvY29udmVydCAhIGF1dG92aWRlb3NpbmsgICAgIGZpbGVzcmMgbG9jYXRpb249JXMgISB0eXBlZmluZCAhIGRlY29kZWJpbiAhIHZpZGVvY29udmVydCAhIHZpZGVvc2NhbGUgISBxdWV1ZSAhIHNoYXBlLm1hc2tfc2luayAgICB2aWRlb3Rlc3RzcmMgcGF0dGVybj1zbm93ICEgdmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpQVlVVix3aWR0aD02NDAsaGVpZ2h0PTQ4MCAhIHF1ZXVlICEgbWl4ZXIuIiwKLSAgICAgIGJvcmRlciwgYXJndlsxXSk7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoIChwaXBlbGluZV9zdHJpbmcsIE5VTEwpOwotICBnX2ZyZWUgKHBpcGVsaW5lX3N0cmluZyk7Ci0KLSAgaWYgKHBpcGVsaW5lID09IE5VTEwpIHsKLSAgICBnX3ByaW50ICgiRmFpbGVkIHRvIGNyZWF0ZSBwaXBlbGluZVxuIik7Ci0gICAgcmV0dXJuIC0yOwotICB9Ci0KLSAgc2hhcGV3aXBlID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZWxpbmUpLCAic2hhcGUiKTsKLQotICBjcyA9IGdzdF9sZm9fY29udHJvbF9zb3VyY2VfbmV3ICgpOwotCi0gIGdzdF9vYmplY3RfYWRkX2NvbnRyb2xfYmluZGluZyAoR1NUX09CSkVDVF9DQVNUIChzaGFwZXdpcGUpLAotICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChHU1RfT0JKRUNUX0NBU1QgKHNoYXBld2lwZSksICJwb3NpdGlvbiIsCi0gICAgICAgICAgY3MpKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoc2hhcGV3aXBlKTsKLQotICBnX29iamVjdF9zZXQgKGNzLAotICAgICAgImFtcGxpdHVkZSIsIDAuNSwKLSAgICAgICJvZmZzZXQiLCAwLjUsICJmcmVxdWVuY3kiLCAwLjI1LCAidGltZXNoaWZ0IiwgNTAwICogR1NUX01TRUNPTkQsIE5VTEwpOwotCi0gIGdfb2JqZWN0X3VucmVmIChjcyk7Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlIiwgR19DQUxMQkFDSyAob25fbWVzc2FnZSksIGxvb3ApOwotICBnc3Rfb2JqZWN0X3VucmVmIChHU1RfT0JKRUNUIChidXMpKTsKLQotICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwKLSAgICAgICAgICBHU1RfU1RBVEVfUExBWUlORykgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7Ci0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBnbyBpbnRvIFBMQVlJTkcgc3RhdGUiKTsKLSAgICByZXR1cm4gLTQ7Ci0gIH0KLQotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLQotICBnX21haW5fbG9vcF91bnJlZiAobG9vcCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoR19PQkpFQ1QgKHBpcGVsaW5lKSk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9NYWtlZmlsZS5hbSBiL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2VkNWVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotaWYgSEFWRV9HVEsKLW5vaW5zdF9QUk9HUkFNUyA9IGRlbW8tb3Nzc3JjIGRlbW8tYXVkaW90ZXN0IHNwZWN0cnVtLWV4YW1wbGUKLWVuZGlmCi0KLWRlbW9fb3Nzc3JjX1NPVVJDRVMgPSBkZW1vLW9zc3NyYy5jCi1kZW1vX29zc3NyY19DRkxBR1MgID0gJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotZGVtb19vc3NzcmNfTERBREQgPSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoR1RLX0xJQlMpCi0KLWRlbW9fYXVkaW90ZXN0X1NPVVJDRVMgPSBkZW1vLWF1ZGlvdGVzdC5jCi1kZW1vX2F1ZGlvdGVzdF9DRkxBR1MgID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotICAgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotZGVtb19hdWRpb3Rlc3RfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgLWxnc3RmZnQtJChHU1RfQVBJX1ZFUlNJT04pIFwKLSAgICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChHVEtfTElCUykKLQotc3BlY3RydW1fZXhhbXBsZV9TT1VSQ0VTID0gc3BlY3RydW0tZXhhbXBsZS5jCi1zcGVjdHJ1bV9leGFtcGxlX0NGTEFHUyAgPSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKSAkKEdUS19DRkxBR1MpCi1zcGVjdHJ1bV9leGFtcGxlX0xEQUREID0gJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdUS19MSUJTKQotCmRpZmYgLS1naXQgYS90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9NYWtlZmlsZS5pbiBiL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGE4OTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsOTIyICswLDAgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTUgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1ASEFWRV9HVEtfVFJVRUBub2luc3RfUFJPR1JBTVMgPSBkZW1vLW9zc3NyYyQoRVhFRVhUKSBcCi1ASEFWRV9HVEtfVFJVRUAJZGVtby1hdWRpb3Rlc3QkKEVYRUVYVCkgXAotQEhBVkVfR1RLX1RSVUVACXNwZWN0cnVtLWV4YW1wbGUkKEVYRUVYVCkKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtCi1BQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Ci1hbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYWMtZXhwYW5kLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hdXRvLWFsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtY29tcGlsZXItZmxhZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtZ2NjLWlubGluZS1hc3NlbWJseS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtbGlidG9vbC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtdmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfY3JlYXRlX3N0ZGludF9oLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9wdGhyZWFkLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJjaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyZ3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1jaGVjay5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRlZmF1bHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kb3doaWxlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZXJyb3IubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1mZWF0dXJlLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdsaWIyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGFja2FnZS1yZWxlYXNlLWRhdGV0aW1lLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGxhdGZvcm0ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW4tZG9jcy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbmRpci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9ndGstZG9jLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9vcmMubTQgJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvcGtnLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2FhbGliLm00ICQodG9wX3NyY2RpcikvbTQvZ2V0dGV4dC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9nc3QtZmlvbnJlYWQubTQgJCh0b3Bfc3JjZGlyKS9tNC9pY29udi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9pbnRsbWFjb3N4Lm00ICQodG9wX3NyY2RpcikvbTQvbGliLWxkLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYi1saW5rLm00ICQodG9wX3NyY2RpcikvbTQvbGliLXByZWZpeC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWJ0b29sLm00ICQodG9wX3NyY2RpcikvbTQvbHRvcHRpb25zLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0c3VnYXIubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdHZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHR+b2Jzb2xldGUubTQgJCh0b3Bfc3JjZGlyKS9tNC9ubHMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvcG8ubTQgJCh0b3Bfc3JjZGlyKS9tNC9wcm9ndGVzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKLWFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCi0JJChBQ0xPQ0FMX000KQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChhbV9fRElTVF9DT01NT04pCi1ta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAotQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAotQ09ORklHX0NMRUFOX0ZJTEVTID0KLUNPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9Ci1QUk9HUkFNUyA9ICQobm9pbnN0X1BST0dSQU1TKQotYW1fZGVtb19hdWRpb3Rlc3RfT0JKRUNUUyA9IGRlbW9fYXVkaW90ZXN0LWRlbW8tYXVkaW90ZXN0LiQoT0JKRVhUKQotZGVtb19hdWRpb3Rlc3RfT0JKRUNUUyA9ICQoYW1fZGVtb19hdWRpb3Rlc3RfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1kZW1vX2F1ZGlvdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotZGVtb19hdWRpb3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKGRlbW9fYXVkaW90ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCi0JJEAKLWFtX2RlbW9fb3Nzc3JjX09CSkVDVFMgPSBkZW1vX29zc3NyYy1kZW1vLW9zc3NyYy4kKE9CSkVYVCkKLWRlbW9fb3Nzc3JjX09CSkVDVFMgPSAkKGFtX2RlbW9fb3Nzc3JjX09CSkVDVFMpCi1kZW1vX29zc3NyY19ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLWRlbW9fb3Nzc3JjX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKGRlbW9fb3Nzc3JjX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLWFtX3NwZWN0cnVtX2V4YW1wbGVfT0JKRUNUUyA9ICBcCi0Jc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLiQoT0JKRVhUKQotc3BlY3RydW1fZXhhbXBsZV9PQkpFQ1RTID0gJChhbV9zcGVjdHJ1bV9leGFtcGxlX09CSkVDVFMpCi1zcGVjdHJ1bV9leGFtcGxlX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi0JJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotc3BlY3RydW1fZXhhbXBsZV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoc3BlY3RydW1fZXhhbXBsZV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgXAotCS1vICRACi1BTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQotYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9QXzAgPSBmYWxzZQotYW1fX3ZfUF8xID0gOgotQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCi1hbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKLWFtX192X0dFTl8xID0gCi1BTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCi1hbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfYXRfMCA9IEAKLWFtX192X2F0XzEgPSAKLURFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIpCi1kZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1hbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwotYW1fX212ID0gbXYgLWYKLUNPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAotCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUxUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKLQkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKLQkkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1BTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKLWFtX192X0NDXzEgPSAKLUNDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKLWFtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOwotYW1fX3ZfQ0NMRF8xID0gCi1TT1VSQ0VTID0gJChkZW1vX2F1ZGlvdGVzdF9TT1VSQ0VTKSAkKGRlbW9fb3Nzc3JjX1NPVVJDRVMpIFwKLQkkKHNwZWN0cnVtX2V4YW1wbGVfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoZGVtb19hdWRpb3Rlc3RfU09VUkNFUykgJChkZW1vX29zc3NyY19TT1VSQ0VTKSBcCi0JJChzcGVjdHJ1bV9leGFtcGxlX1NPVVJDRVMpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1kZW1vX29zc3NyY19TT1VSQ0VTID0gZGVtby1vc3NzcmMuYwotZGVtb19vc3NzcmNfQ0ZMQUdTID0gJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotZGVtb19vc3NzcmNfTERBREQgPSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0xJQlMpICQoR1RLX0xJQlMpCi1kZW1vX2F1ZGlvdGVzdF9TT1VSQ0VTID0gZGVtby1hdWRpb3Rlc3QuYwotZGVtb19hdWRpb3Rlc3RfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotICAgJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotCi1kZW1vX2F1ZGlvdGVzdF9MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGZmdC0kKEdTVF9BUElfVkVSU0lPTikgXAotICAgJChHU1RfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKSAkKEdUS19MSUJTKQotCi1zcGVjdHJ1bV9leGFtcGxlX1NPVVJDRVMgPSBzcGVjdHJ1bS1leGFtcGxlLmMKLXNwZWN0cnVtX2V4YW1wbGVfQ0ZMQUdTID0gJChHU1RfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotc3BlY3RydW1fZXhhbXBsZV9MREFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykgJChHVEtfTElCUykKLWFsbDogYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLSQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCUBmb3IgZGVwIGluICQ/OyBkbyBcCi0JICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKLQkgICAgKiQkZGVwKikgXAotCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAotCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKLQkgICAgICBleGl0IDE7OyBcCi0JICBlc2FjOyBcCi0JZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZ251IHRlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWRlbW8tYXVkaW90ZXN0JChFWEVFWFQpOiAkKGRlbW9fYXVkaW90ZXN0X09CSkVDVFMpICQoZGVtb19hdWRpb3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2RlbW9fYXVkaW90ZXN0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGRlbW8tYXVkaW90ZXN0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChkZW1vX2F1ZGlvdGVzdF9MSU5LKSAkKGRlbW9fYXVkaW90ZXN0X09CSkVDVFMpICQoZGVtb19hdWRpb3Rlc3RfTERBREQpICQoTElCUykKLQotZGVtby1vc3NzcmMkKEVYRUVYVCk6ICQoZGVtb19vc3NzcmNfT0JKRUNUUykgJChkZW1vX29zc3NyY19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZGVtb19vc3NzcmNfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZGVtby1vc3NzcmMkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGRlbW9fb3Nzc3JjX0xJTkspICQoZGVtb19vc3NzcmNfT0JKRUNUUykgJChkZW1vX29zc3NyY19MREFERCkgJChMSUJTKQotCi1zcGVjdHJ1bS1leGFtcGxlJChFWEVFWFQpOiAkKHNwZWN0cnVtX2V4YW1wbGVfT0JKRUNUUykgJChzcGVjdHJ1bV9leGFtcGxlX0RFUEVOREVOQ0lFUykgJChFWFRSQV9zcGVjdHJ1bV9leGFtcGxlX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHNwZWN0cnVtLWV4YW1wbGUkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKHNwZWN0cnVtX2V4YW1wbGVfTElOSykgJChzcGVjdHJ1bV9leGFtcGxlX09CSkVDVFMpICQoc3BlY3RydW1fZXhhbXBsZV9MREFERCkgJChMSUJTKQotCi1tb3N0bHljbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLiQoT0JKRVhUKQotCi1kaXN0Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi50YWIuYwotCi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RlbW9fb3Nzc3JjLWRlbW8tb3Nzc3JjLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zcGVjdHJ1bV9leGFtcGxlLXNwZWN0cnVtLWV4YW1wbGUuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QubzogZGVtby1hdWRpb3Rlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRlbW9fYXVkaW90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBkZW1vX2F1ZGlvdGVzdC1kZW1vLWF1ZGlvdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9kZW1vX2F1ZGlvdGVzdC1kZW1vLWF1ZGlvdGVzdC5UcG8gLWMgLW8gZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QubyBgdGVzdCAtZiAnZGVtby1hdWRpb3Rlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVtby1hdWRpb3Rlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QuVHBvICQoREVQRElSKS9kZW1vX2F1ZGlvdGVzdC1kZW1vLWF1ZGlvdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RlbW8tYXVkaW90ZXN0LmMnIG9iamVjdD0nZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZGVtb19hdWRpb3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QubyBgdGVzdCAtZiAnZGVtby1hdWRpb3Rlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVtby1hdWRpb3Rlc3QuYwotCi1kZW1vX2F1ZGlvdGVzdC1kZW1vLWF1ZGlvdGVzdC5vYmo6IGRlbW8tYXVkaW90ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkZW1vX2F1ZGlvdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9kZW1vX2F1ZGlvdGVzdC1kZW1vLWF1ZGlvdGVzdC5UcG8gLWMgLW8gZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3Qub2JqIGBpZiB0ZXN0IC1mICdkZW1vLWF1ZGlvdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RlbW8tYXVkaW90ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RlbW8tYXVkaW90ZXN0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2RlbW9fYXVkaW90ZXN0LWRlbW8tYXVkaW90ZXN0LlRwbyAkKERFUERJUikvZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkZW1vLWF1ZGlvdGVzdC5jJyBvYmplY3Q9J2RlbW9fYXVkaW90ZXN0LWRlbW8tYXVkaW90ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZGVtb19hdWRpb3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZGVtb19hdWRpb3Rlc3QtZGVtby1hdWRpb3Rlc3Qub2JqIGBpZiB0ZXN0IC1mICdkZW1vLWF1ZGlvdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RlbW8tYXVkaW90ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RlbW8tYXVkaW90ZXN0LmMnOyBmaWAKLQotZGVtb19vc3NzcmMtZGVtby1vc3NzcmMubzogZGVtby1vc3NzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGRlbW9fb3Nzc3JjX0NGTEFHUykgJChDRkxBR1MpIC1NVCBkZW1vX29zc3NyYy1kZW1vLW9zc3NyYy5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9kZW1vX29zc3NyYy1kZW1vLW9zc3NyYy5UcG8gLWMgLW8gZGVtb19vc3NzcmMtZGVtby1vc3NzcmMubyBgdGVzdCAtZiAnZGVtby1vc3NzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVtby1vc3NzcmMuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZGVtb19vc3NzcmMtZGVtby1vc3NzcmMuVHBvICQoREVQRElSKS9kZW1vX29zc3NyYy1kZW1vLW9zc3NyYy5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2RlbW8tb3Nzc3JjLmMnIG9iamVjdD0nZGVtb19vc3NzcmMtZGVtby1vc3NzcmMubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZGVtb19vc3NzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZGVtb19vc3NzcmMtZGVtby1vc3NzcmMubyBgdGVzdCAtZiAnZGVtby1vc3NzcmMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZGVtby1vc3NzcmMuYwotCi1kZW1vX29zc3NyYy1kZW1vLW9zc3NyYy5vYmo6IGRlbW8tb3Nzc3JjLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChkZW1vX29zc3NyY19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZGVtb19vc3NzcmMtZGVtby1vc3NzcmMub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9kZW1vX29zc3NyYy1kZW1vLW9zc3NyYy5UcG8gLWMgLW8gZGVtb19vc3NzcmMtZGVtby1vc3NzcmMub2JqIGBpZiB0ZXN0IC1mICdkZW1vLW9zc3NyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RlbW8tb3Nzc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RlbW8tb3Nzc3JjLmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2RlbW9fb3Nzc3JjLWRlbW8tb3Nzc3JjLlRwbyAkKERFUERJUikvZGVtb19vc3NzcmMtZGVtby1vc3NzcmMuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdkZW1vLW9zc3NyYy5jJyBvYmplY3Q9J2RlbW9fb3Nzc3JjLWRlbW8tb3Nzc3JjLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZGVtb19vc3NzcmNfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZGVtb19vc3NzcmMtZGVtby1vc3NzcmMub2JqIGBpZiB0ZXN0IC1mICdkZW1vLW9zc3NyYy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2RlbW8tb3Nzc3JjLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2RlbW8tb3Nzc3JjLmMnOyBmaWAKLQotc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLm86IHNwZWN0cnVtLWV4YW1wbGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNwZWN0cnVtX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNwZWN0cnVtX2V4YW1wbGUtc3BlY3RydW0tZXhhbXBsZS5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9zcGVjdHJ1bV9leGFtcGxlLXNwZWN0cnVtLWV4YW1wbGUuVHBvIC1jIC1vIHNwZWN0cnVtX2V4YW1wbGUtc3BlY3RydW0tZXhhbXBsZS5vIGB0ZXN0IC1mICdzcGVjdHJ1bS1leGFtcGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNwZWN0cnVtLWV4YW1wbGUuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLlRwbyAkKERFUERJUikvc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3BlY3RydW0tZXhhbXBsZS5jJyBvYmplY3Q9J3NwZWN0cnVtX2V4YW1wbGUtc3BlY3RydW0tZXhhbXBsZS5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzcGVjdHJ1bV9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNwZWN0cnVtX2V4YW1wbGUtc3BlY3RydW0tZXhhbXBsZS5vIGB0ZXN0IC1mICdzcGVjdHJ1bS1leGFtcGxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNwZWN0cnVtLWV4YW1wbGUuYwotCi1zcGVjdHJ1bV9leGFtcGxlLXNwZWN0cnVtLWV4YW1wbGUub2JqOiBzcGVjdHJ1bS1leGFtcGxlLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChzcGVjdHJ1bV9leGFtcGxlX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcGVjdHJ1bV9leGFtcGxlLXNwZWN0cnVtLWV4YW1wbGUub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9zcGVjdHJ1bV9leGFtcGxlLXNwZWN0cnVtLWV4YW1wbGUuVHBvIC1jIC1vIHNwZWN0cnVtX2V4YW1wbGUtc3BlY3RydW0tZXhhbXBsZS5vYmogYGlmIHRlc3QgLWYgJ3NwZWN0cnVtLWV4YW1wbGUuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzcGVjdHJ1bS1leGFtcGxlLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NwZWN0cnVtLWV4YW1wbGUuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLlRwbyAkKERFUERJUikvc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3BlY3RydW0tZXhhbXBsZS5jJyBvYmplY3Q9J3NwZWN0cnVtX2V4YW1wbGUtc3BlY3RydW0tZXhhbXBsZS5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHNwZWN0cnVtX2V4YW1wbGVfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3BlY3RydW1fZXhhbXBsZS1zcGVjdHJ1bS1leGFtcGxlLm9iaiBgaWYgdGVzdCAtZiAnc3BlY3RydW0tZXhhbXBsZS5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NwZWN0cnVtLWV4YW1wbGUuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2Rpcikvc3BlY3RydW0tZXhhbXBsZS5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmMgYi90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLWF1ZGlvdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE5MGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tYXVkaW90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0vKiBUT0RPOiBhZGQgd2F2ZSBzZWxlY3Rpb24gKi8KLS8qIGZhc3QgdnMuIHNsb3cgbW9kZSAtIHNlZSB1cGRhdGVfc3BlY3RydW1fYmFuZHMoKQotICogd2UgYXJlIHN0aWxsIGNoZWF0aW5nIGJlbG93LCB3ZSBvbmx5IGRyYXcgdGhlIGZpcnN0IHNwZWN0X2JhbmRzIGFuZCBpZ25vcmUgYSBmZXcgOi8KLSAqCi0gKiB4dGltZSBnc3QtbGF1bmNoLTAuMTAgLXEgYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMDAwICEgc3BlY3RydW0gYmFuZHM9MTQ0MSAhIGZha2VzaW5rCi0gKiAyLjI5dSAwLjAycyAyLjE0ciAyNTUwNGtCIGdzdC1sYXVuY2gtMC4xMCAtcSBhdWRpb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAwMDAgISBzcGVjdHJ1bSBiYW5kcz0xNDQxICEgZmFrZXNpbmsKLSAqIDIuMjB1IDAuMDVzIDIuMTByIDI1NjY0a0IgZ3N0LWxhdW5jaC0wLjEwIC1xIGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMDAwMCAhIHNwZWN0cnVtIGJhbmRzPTE0NDEgISBmYWtlc2luawotICogMi4yM3UgMC4wNHMgMi4xMHIgMjU2NjRrQiBnc3QtbGF1bmNoLTAuMTAgLXEgYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMDAwICEgc3BlY3RydW0gYmFuZHM9MTQ0MSAhIGZha2VzaW5rCi0gKiAKLSAqIHh0aW1lIGdzdC1sYXVuY2gtMC4xMCAtcSBhdWRpb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAwMDAgISBzcGVjdHJ1bSBiYW5kcz0xNDQwICEgZmFrZXNpbmsKLSAqIDI1LjAxdSAwLjA4cyAyNS4wMHIgMjU1NTJrQiBnc3QtbGF1bmNoLTAuMTAgLXEgYXVkaW90ZXN0c3JjIG51bS1idWZmZXJzPTEwMDAwICEgc3BlY3RydW0gYmFuZHM9MTQ0MCAhIGZha2VzaW5rCi0gKiAyNC45NnUgMC4wM3MgMjQuODhyIDI1NTY4a0IgZ3N0LWxhdW5jaC0wLjEwIC1xIGF1ZGlvdGVzdHNyYyBudW0tYnVmZmVycz0xMDAwMCAhIHNwZWN0cnVtIGJhbmRzPTE0NDAgISBmYWtlc2luawotICogMjUuMTF1IDAuMDNzIDI1LjAzciAyNTUzNmtCIGdzdC1sYXVuY2gtMC4xMCAtcSBhdWRpb3Rlc3RzcmMgbnVtLWJ1ZmZlcnM9MTAwMDAgISBzcGVjdHJ1bSBiYW5kcz0xNDQwICEgZmFrZXNpbmsKLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLS8qIFRPRE86IFdlIHVzZSBnZGtfY2Fpcm9fY3JlYXRlKCkgYW5kIG90aGVycywgd2hpY2ggYXJlIGRlcHJlY2F0ZWQgKi8KLSNkZWZpbmUgR0RLX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvZmZ0L2dzdGZmdC5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmbmRlZiBERUZBVUxUX0FVRElPU0lOSwotI2RlZmluZSBERUZBVUxUX0FVRElPU0lOSyAiYXV0b2F1ZGlvc2luayIKLSNlbmRpZgotCi1zdGF0aWMgZ3VpbnQgc3BlY3RfaGVpZ2h0ID0gNjQ7Ci1zdGF0aWMgZ3VpbnQgc3BlY3RfYmFuZHMgPSAyNTY7Ci1zdGF0aWMgZ2Zsb2F0IGhlaWdodF9zY2FsZSA9IDEuMDsKLXN0YXRpYyBnYm9vbGVhbiBmYXN0ID0gRkFMU0U7Ci0KLXN0YXRpYyBHdGtXaWRnZXQgKmRyYXdpbmdhcmVhID0gTlVMTDsKLXN0YXRpYyBHdGtXaWRnZXQgKmJhbmRzX3VzZWQgPSBOVUxMOwotc3RhdGljIEdzdENsb2NrICpzeW5jX2Nsb2NrID0gTlVMTDsKLQotc3RhdGljIHZvaWQKLW9uX3dpbmRvd19kZXN0cm95IChHT2JqZWN0ICogb2JqZWN0LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGRyYXdpbmdhcmVhID0gTlVMTDsKLSAgZ3RrX21haW5fcXVpdCAoKTsKLX0KLQotLyogY29udHJvbCBhdWRpb3Rlc3RzcmMgZnJlcXVlbmN5ICovCi1zdGF0aWMgdm9pZAotb25fZnJlcXVlbmN5X2NoYW5nZWQgKEd0a1JhbmdlICogcmFuZ2UsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqbWFjaGluZSA9IEdTVF9FTEVNRU5UICh1c2VyX2RhdGEpOwotICBnZG91YmxlIHZhbHVlID0gZ3RrX3JhbmdlX2dldF92YWx1ZSAocmFuZ2UpOwotCi0gIGdfb2JqZWN0X3NldCAobWFjaGluZSwgImZyZXEiLCB2YWx1ZSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi11cGRhdGVfc3BlY3RydW1fYmFuZHMgKEdzdEVsZW1lbnQgKiBzcGVjdHJ1bSkKLXsKLSAgZ3VpbnQgYmFuZHMgPSBzcGVjdF9iYW5kczsKLSAgZ2NoYXIgc3RyWzUwXTsKLQotICBpZiAoZmFzdCkKLSAgICBiYW5kcyA9ICgoZ3N0X2ZmdF9uZXh0X2Zhc3RfbGVuZ3RoICgyICogYmFuZHMgLSAyKSArIDIpIC8gMik7Ci0KLSAgc3ByaW50ZiAoc3RyLCAidXNpbmcgJXUgYmFuZHMiLCBiYW5kcyk7Ci0KLSAgZ19vYmplY3Rfc2V0IChiYW5kc191c2VkLCAibGFiZWwiLCBzdHIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcGVjdHJ1bSksICJiYW5kcyIsIGJhbmRzLCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1vbl9jb25maWd1cmVfZXZlbnQgKEd0a1dpZGdldCAqIHdpZGdldCwgR2RrRXZlbnRDb25maWd1cmUgKiBldmVudCwKLSAgICBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIC8qR1NUX0lORk8gKCIlZCB4ICVkIiwgZXZlbnQtPndpZHRoLCBldmVudC0+aGVpZ2h0KTsgKi8KLSAgc3BlY3RfaGVpZ2h0ID0gZXZlbnQtPmhlaWdodDsKLSAgaGVpZ2h0X3NjYWxlID0gZXZlbnQtPmhlaWdodCAvIDY0LjA7Ci0gIHNwZWN0X2JhbmRzID0gZXZlbnQtPndpZHRoOwotCi0gIHVwZGF0ZV9zcGVjdHJ1bV9iYW5kcyAoR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSkpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9mYXN0X3Nsb3dfbW9kZV9jaGFuZ2VkIChHdGtUb2dnbGVCdXR0b24gKiB0b2dnbGVidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZmFzdCA9IGd0a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUgKHRvZ2dsZWJ1dHRvbik7Ci0gIHVwZGF0ZV9zcGVjdHJ1bV9iYW5kcyAoR1NUX0VMRU1FTlQgKHVzZXJfZGF0YSkpOwotfQotCi0vKiBkcmF3IGZyZXF1ZW5jeSBzcGVjdHJ1bSBhcyBhIGJ1bmNoIG9mIGJhcnMgKi8KLXN0YXRpYyB2b2lkCi1kcmF3X3NwZWN0cnVtIChnZmxvYXQgKiBkYXRhKQotewotICBnaW50IGk7Ci0gIEdka1JlY3RhbmdsZSByZWN0ID0geyAwLCAwLCBzcGVjdF9iYW5kcywgc3BlY3RfaGVpZ2h0IH07Ci0gIGNhaXJvX3QgKmNyOwotCi0gIGlmICghZHJhd2luZ2FyZWEpCi0gICAgcmV0dXJuOwotCi0gIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVjdCAoZ3RrX3dpZGdldF9nZXRfd2luZG93IChkcmF3aW5nYXJlYSksICZyZWN0KTsKLSAgY3IgPSBnZGtfY2Fpcm9fY3JlYXRlIChndGtfd2lkZ2V0X2dldF93aW5kb3cgKGRyYXdpbmdhcmVhKSk7Ci0KLSAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IgKGNyLCAwLCAwLCAwKTsKLSAgY2Fpcm9fcmVjdGFuZ2xlIChjciwgMCwgMCwgc3BlY3RfYmFuZHMsIHNwZWN0X2hlaWdodCk7Ci0gIGNhaXJvX2ZpbGwgKGNyKTsKLSAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IgKGNyLCAxLCAxLCAxKTsKLSAgZm9yIChpID0gMDsgaSA8IHNwZWN0X2JhbmRzOyBpKyspIHsKLSAgICBjYWlyb19yZWN0YW5nbGUgKGNyLCBpLCAtZGF0YVtpXSwgMSwgc3BlY3RfaGVpZ2h0ICsgZGF0YVtpXSk7Ci0gICAgY2Fpcm9fZmlsbCAoY3IpOwotICB9Ci0gIGNhaXJvX2Rlc3Ryb3kgKGNyKTsKLQotICBnZGtfd2luZG93X2VuZF9wYWludCAoZ3RrX3dpZGdldF9nZXRfd2luZG93IChkcmF3aW5nYXJlYSkpOwotfQotCi0vKiBwcm9jZXNzIGRlbGF5ZWQgbWVzc2FnZSAqLwotc3RhdGljIGdib29sZWFuCi1kZWxheWVkX2lkbGVfc3BlY3RydW1fdXBkYXRlIChncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGRyYXdfc3BlY3RydW0gKChnZmxvYXQgKikgdXNlcl9kYXRhKTsKLSAgZ19mcmVlICh1c2VyX2RhdGEpOwotICByZXR1cm4gKEZBTFNFKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kZWxheWVkX3NwZWN0cnVtX3VwZGF0ZSAoR3N0Q2xvY2sgKiBzeW5jX2Nsb2NrLCBHc3RDbG9ja1RpbWUgdGltZSwKLSAgICBHc3RDbG9ja0lEIGlkLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodGltZSkpCi0gICAgZ19pZGxlX2FkZCAoZGVsYXllZF9pZGxlX3NwZWN0cnVtX3VwZGF0ZSwgdXNlcl9kYXRhKTsKLSAgZWxzZQotICAgIGdfZnJlZSAodXNlcl9kYXRhKTsKLSAgcmV0dXJuIChUUlVFKTsKLX0KLQotLyogcmVjZWl2ZSBzcGVjdHJhbCBkYXRhIGZyb20gZWxlbWVudCBtZXNzYWdlICovCi1zdGF0aWMgZ2Jvb2xlYW4KLW1lc3NhZ2VfaGFuZGxlciAoR3N0QnVzICogYnVzLCBHc3RNZXNzYWdlICogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgaWYgKG1lc3NhZ2UtPnR5cGUgPT0gR1NUX01FU1NBR0VfRUxFTUVOVCkgewotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSAqcyA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUgKG1lc3NhZ2UpOwotICAgIGNvbnN0IGdjaGFyICpuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAocyk7Ci0KLSAgICBpZiAoc3RyY21wIChuYW1lLCAic3BlY3RydW0iKSA9PSAwKSB7Ci0gICAgICBHc3RFbGVtZW50ICpzcGVjdHJ1bSA9IEdTVF9FTEVNRU5UIChHU1RfTUVTU0FHRV9TUkMgKG1lc3NhZ2UpKTsKLSAgICAgIEdzdENsb2NrVGltZSB0aW1lc3RhbXAsIGR1cmF0aW9uOwotICAgICAgR3N0Q2xvY2tUaW1lIHdhaXR0aW1lID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLQotICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKHMsICJydW5uaW5nLXRpbWUiLCAmdGltZXN0YW1wKSAmJgotICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2Nsb2NrX3RpbWUgKHMsICJkdXJhdGlvbiIsICZkdXJhdGlvbikpIHsKLSAgICAgICAgLyogd2FpdCBmb3IgbWlkZGxlIG9mIGJ1ZmZlciAqLwotICAgICAgICB3YWl0dGltZSA9IHRpbWVzdGFtcCArIGR1cmF0aW9uIC8gMjsKLSAgICAgIH0gZWxzZSBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgImVuZHRpbWUiLCAmdGltZXN0YW1wKSkgewotICAgICAgICB3YWl0dGltZSA9IHRpbWVzdGFtcDsKLSAgICAgIH0KLSAgICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAod2FpdHRpbWUpKSB7Ci0gICAgICAgIEdzdENsb2NrSUQgY2xvY2tfaWQ7Ci0gICAgICAgIEdzdENsb2NrVGltZSBiYXNldGltZSA9IGdzdF9lbGVtZW50X2dldF9iYXNlX3RpbWUgKHNwZWN0cnVtKTsKLSAgICAgICAgZ2Zsb2F0ICpzcGVjdCA9IGdfbmV3IChnZmxvYXQsIHNwZWN0X2JhbmRzKTsKLSAgICAgICAgY29uc3QgR1ZhbHVlICpsaXN0OwotICAgICAgICBjb25zdCBHVmFsdWUgKnZhbHVlOwotICAgICAgICBndWludCBpOwotCi0gICAgICAgIGxpc3QgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgIm1hZ25pdHVkZSIpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BlY3RfYmFuZHM7ICsraSkgewotICAgICAgICAgIHZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChsaXN0LCBpKTsKLSAgICAgICAgICBzcGVjdFtpXSA9IGhlaWdodF9zY2FsZSAqIGdfdmFsdWVfZ2V0X2Zsb2F0ICh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbG9ja19pZCA9Ci0gICAgICAgICAgICBnc3RfY2xvY2tfbmV3X3NpbmdsZV9zaG90X2lkIChzeW5jX2Nsb2NrLCB3YWl0dGltZSArIGJhc2V0aW1lKTsKLSAgICAgICAgZ3N0X2Nsb2NrX2lkX3dhaXRfYXN5bmMgKGNsb2NrX2lkLCBkZWxheWVkX3NwZWN0cnVtX3VwZGF0ZSwKLSAgICAgICAgICAgIChncG9pbnRlcikgc3BlY3QsIE5VTEwpOwotICAgICAgICBnc3RfY2xvY2tfaWRfdW5yZWYgKGNsb2NrX2lkKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RFbGVtZW50ICpzcmMsICpzcGVjdHJ1bSwgKmF1ZGlvY29udmVydCwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHdGtXaWRnZXQgKmFwcHdpbmRvdywgKnZib3gsICpoYm94LCAqd2lkZ2V0OwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBndGtfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgiYmluIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW90ZXN0c3JjIiwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcmMpLCAid2F2ZSIsIDAsIE5VTEwpOwotCi0gIHNwZWN0cnVtID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgic3BlY3RydW0iLCAic3BlY3RydW0iKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3BlY3RydW0pLCAiYmFuZHMiLCBzcGVjdF9iYW5kcywgInRocmVzaG9sZCIsIC04MCwKLSAgICAgICJwb3N0LW1lc3NhZ2VzIiwgVFJVRSwgTlVMTCk7Ci0KLSAgYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImF1ZGlvY29udmVydCIpOwotCi0gIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKERFRkFVTFRfQVVESU9TSU5LLCAic2luayIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgc3BlY3RydW0sIGF1ZGlvY29udmVydCwgc2luaywgTlVMTCk7Ci0gIGlmICghZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIHNwZWN0cnVtLCBhdWRpb2NvbnZlcnQsIHNpbmssIE5VTEwpKSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiY2FuJ3QgbGluayBlbGVtZW50c1xuIik7Ci0gICAgZXhpdCAoMSk7Ci0gIH0KLQotICBidXMgPSBnc3RfZWxlbWVudF9nZXRfYnVzIChiaW4pOwotICBnc3RfYnVzX2FkZF93YXRjaCAoYnVzLCBtZXNzYWdlX2hhbmRsZXIsIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChidXMpOwotCi0gIHN5bmNfY2xvY2sgPSBnc3RfcGlwZWxpbmVfZ2V0X2Nsb2NrIChHU1RfUElQRUxJTkUgKGJpbikpOwotCi0gIGFwcHdpbmRvdyA9IGd0a193aW5kb3dfbmV3IChHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGFwcHdpbmRvdyksICJkZXN0cm95IiwKLSAgICAgIEdfQ0FMTEJBQ0sgKG9uX3dpbmRvd19kZXN0cm95KSwgTlVMTCk7Ci0gIHZib3ggPSBndGtfYm94X25ldyAoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCA2KTsKLQotICBoYm94ID0gZ3RrX2JveF9uZXcgKEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCA2KTsKLSAgd2lkZ2V0ID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbCAoIkZhc3QiKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdpZGdldCksICJ0b2dnbGVkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKG9uX2Zhc3Rfc2xvd19tb2RlX2NoYW5nZWQpLCAoZ3BvaW50ZXIpIHNwZWN0cnVtKTsKLSAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChoYm94KSwgd2lkZ2V0LCBGQUxTRSwgRkFMU0UsIDApOwotICBiYW5kc191c2VkID0gZ3RrX2xhYmVsX25ldyAoIiIpOwotICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGhib3gpLCBiYW5kc191c2VkLCBGQUxTRSwgRkFMU0UsIDApOwotCi0gIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJveCksIGhib3gsIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgd2lkZ2V0ID0gZ3RrX3NjYWxlX25ld193aXRoX3JhbmdlIChHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwKLSAgICAgIDUwLjAsIDIwMDAwLjAsIDEwKTsKLSAgZ3RrX3NjYWxlX3NldF9kcmF3X3ZhbHVlIChHVEtfU0NBTEUgKHdpZGdldCksIFRSVUUpOwotICBndGtfc2NhbGVfc2V0X3ZhbHVlX3BvcyAoR1RLX1NDQUxFICh3aWRnZXQpLCBHVEtfUE9TX1RPUCk7Ci0gIGd0a19yYW5nZV9zZXRfdmFsdWUgKEdUS19SQU5HRSAod2lkZ2V0KSwgNDQwLjApOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2lkZ2V0KSwgInZhbHVlLWNoYW5nZWQiLAotICAgICAgR19DQUxMQkFDSyAob25fZnJlcXVlbmN5X2NoYW5nZWQpLCAoZ3BvaW50ZXIpIHNyYyk7Ci0gIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJveCksIHdpZGdldCwgRkFMU0UsIEZBTFNFLCAwKTsKLQotICBkcmF3aW5nYXJlYSA9IGd0a19kcmF3aW5nX2FyZWFfbmV3ICgpOwotICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QgKGRyYXdpbmdhcmVhLCBzcGVjdF9iYW5kcywgc3BlY3RfaGVpZ2h0KTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGRyYXdpbmdhcmVhKSwgImNvbmZpZ3VyZS1ldmVudCIsCi0gICAgICBHX0NBTExCQUNLIChvbl9jb25maWd1cmVfZXZlbnQpLCAoZ3BvaW50ZXIpIHNwZWN0cnVtKTsKLSAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YICh2Ym94KSwgZHJhd2luZ2FyZWEsIFRSVUUsIFRSVUUsIDApOwotCi0gIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChhcHB3aW5kb3cpLCB2Ym94KTsKLSAgZ3RrX3dpZGdldF9zaG93X2FsbCAoYXBwd2luZG93KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBndGtfbWFpbiAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzeW5jX2Nsb2NrKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmMgYi90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9kZW1vLW9zc3NyYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTViMTk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL2RlbW8tb3Nzc3JjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotLyogVE9ETzogV2UgdXNlIGdka19jYWlyb19jcmVhdGUoKSBhbmQgb3RoZXJzLCB3aGljaCBhcmUgZGVwcmVjYXRlZCAqLwotI2RlZmluZSBHREtfRElTQUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotI2lmbmRlZiBERUZBVUxUX0FVRElPU1JDCi0jZGVmaW5lIERFRkFVTFRfQVVESU9TUkMgImFsc2FzcmMiCi0jZW5kaWYKLQotc3RhdGljIGd1aW50IHNwZWN0X2hlaWdodCA9IDY0Owotc3RhdGljIGd1aW50IHNwZWN0X2JhbmRzID0gMjU2Owotc3RhdGljIGdmbG9hdCBoZWlnaHRfc2NhbGUgPSAxLjA7Ci0KLXN0YXRpYyBHdGtXaWRnZXQgKmRyYXdpbmdhcmVhID0gTlVMTDsKLXN0YXRpYyBHc3RDbG9jayAqc3luY19jbG9jayA9IE5VTEw7Ci0KLXN0YXRpYyB2b2lkCi1vbl93aW5kb3dfZGVzdHJveSAoR09iamVjdCAqIG9iamVjdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBkcmF3aW5nYXJlYSA9IE5VTEw7Ci0gIGd0a19tYWluX3F1aXQgKCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotb25fY29uZmlndXJlX2V2ZW50IChHdGtXaWRnZXQgKiB3aWRnZXQsIEdka0V2ZW50Q29uZmlndXJlICogZXZlbnQsCi0gICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICBHc3RFbGVtZW50ICpzcGVjdHJ1bSA9IEdTVF9FTEVNRU5UICh1c2VyX2RhdGEpOwotCi0gIC8qR1NUX0lORk8gKCIlZCB4ICVkIiwgZXZlbnQtPndpZHRoLCBldmVudC0+aGVpZ2h0KTsgKi8KLSAgc3BlY3RfaGVpZ2h0ID0gZXZlbnQtPmhlaWdodDsKLSAgaGVpZ2h0X3NjYWxlID0gZXZlbnQtPmhlaWdodCAvIDY0LjA7Ci0gIHNwZWN0X2JhbmRzID0gZXZlbnQtPndpZHRoOwotCi0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNwZWN0cnVtKSwgImJhbmRzIiwgc3BlY3RfYmFuZHMsIE5VTEwpOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLS8qIGRyYXcgZnJlcXVlbmN5IHNwZWN0cnVtIGFzIGEgYnVuY2ggb2YgYmFycyAqLwotc3RhdGljIHZvaWQKLWRyYXdfc3BlY3RydW0gKGdmbG9hdCAqIGRhdGEpCi17Ci0gIGdpbnQgaTsKLSAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIHNwZWN0X2JhbmRzLCBzcGVjdF9oZWlnaHQgfTsKLSAgY2Fpcm9fdCAqY3I7Ci0KLSAgaWYgKCFkcmF3aW5nYXJlYSkKLSAgICByZXR1cm47Ci0KLSAgZ2RrX3dpbmRvd19iZWdpbl9wYWludF9yZWN0IChndGtfd2lkZ2V0X2dldF93aW5kb3cgKGRyYXdpbmdhcmVhKSwgJnJlY3QpOwotICBjciA9IGdka19jYWlyb19jcmVhdGUgKGd0a193aWRnZXRfZ2V0X3dpbmRvdyAoZHJhd2luZ2FyZWEpKTsKLQotICBjYWlyb19zZXRfc291cmNlX3JnYiAoY3IsIDAsIDAsIDApOwotICBjYWlyb19yZWN0YW5nbGUgKGNyLCAwLCAwLCBzcGVjdF9iYW5kcywgc3BlY3RfaGVpZ2h0KTsKLSAgY2Fpcm9fZmlsbCAoY3IpOwotICBjYWlyb19zZXRfc291cmNlX3JnYiAoY3IsIDEsIDEsIDEpOwotICBmb3IgKGkgPSAwOyBpIDwgc3BlY3RfYmFuZHM7IGkrKykgewotICAgIGNhaXJvX3JlY3RhbmdsZSAoY3IsIGksIC1kYXRhW2ldLCAxLCBzcGVjdF9oZWlnaHQgKyBkYXRhW2ldKTsKLSAgICBjYWlyb19maWxsIChjcik7Ci0gIH0KLSAgY2Fpcm9fZGVzdHJveSAoY3IpOwotCi0gIGdka193aW5kb3dfZW5kX3BhaW50IChndGtfd2lkZ2V0X2dldF93aW5kb3cgKGRyYXdpbmdhcmVhKSk7Ci19Ci0KLS8qIHByb2Nlc3MgZGVsYXllZCBtZXNzYWdlICovCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlbGF5ZWRfaWRsZV9zcGVjdHJ1bV91cGRhdGUgKGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgZHJhd19zcGVjdHJ1bSAoKGdmbG9hdCAqKSB1c2VyX2RhdGEpOwotICBnX2ZyZWUgKHVzZXJfZGF0YSk7Ci0gIHJldHVybiAoRkFMU0UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4KLWRlbGF5ZWRfc3BlY3RydW1fdXBkYXRlIChHc3RDbG9jayAqIHN5bmNfY2xvY2ssIEdzdENsb2NrVGltZSB0aW1lLAotICAgIEdzdENsb2NrSUQgaWQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh0aW1lKSkKLSAgICBnX2lkbGVfYWRkIChkZWxheWVkX2lkbGVfc3BlY3RydW1fdXBkYXRlLCB1c2VyX2RhdGEpOwotICBlbHNlCi0gICAgZ19mcmVlICh1c2VyX2RhdGEpOwotICByZXR1cm4gKFRSVUUpOwotfQotCi0vKiByZWNlaXZlIHNwZWN0cmFsIGRhdGEgZnJvbSBlbGVtZW50IG1lc3NhZ2UgKi8KLXN0YXRpYyBnYm9vbGVhbgotbWVzc2FnZV9oYW5kbGVyIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtZXNzYWdlLCBncG9pbnRlciBkYXRhKQotewotICBpZiAobWVzc2FnZS0+dHlwZSA9PSBHU1RfTUVTU0FHRV9FTEVNRU5UKSB7Ci0gICAgY29uc3QgR3N0U3RydWN0dXJlICpzID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobWVzc2FnZSk7Ci0gICAgY29uc3QgZ2NoYXIgKm5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKTsKLQotICAgIGlmIChzdHJjbXAgKG5hbWUsICJzcGVjdHJ1bSIpID09IDApIHsKLSAgICAgIEdzdEVsZW1lbnQgKnNwZWN0cnVtID0gR1NUX0VMRU1FTlQgKEdTVF9NRVNTQUdFX1NSQyAobWVzc2FnZSkpOwotICAgICAgR3N0Q2xvY2tUaW1lIHRpbWVzdGFtcCwgZHVyYXRpb247Ci0gICAgICBHc3RDbG9ja1RpbWUgd2FpdHRpbWUgPSBHU1RfQ0xPQ0tfVElNRV9OT05FOwotCi0gICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgInJ1bm5pbmctdGltZSIsICZ0aW1lc3RhbXApICYmCi0gICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfY2xvY2tfdGltZSAocywgImR1cmF0aW9uIiwgJmR1cmF0aW9uKSkgewotICAgICAgICAvKiB3YWl0IGZvciBtaWRkbGUgb2YgYnVmZmVyICovCi0gICAgICAgIHdhaXR0aW1lID0gdGltZXN0YW1wICsgZHVyYXRpb24gLyAyOwotICAgICAgfSBlbHNlIGlmIChnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChzLCAiZW5kdGltZSIsICZ0aW1lc3RhbXApKSB7Ci0gICAgICAgIHdhaXR0aW1lID0gdGltZXN0YW1wOwotICAgICAgfQotICAgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEICh3YWl0dGltZSkpIHsKLSAgICAgICAgR3N0Q2xvY2tJRCBjbG9ja19pZDsKLSAgICAgICAgR3N0Q2xvY2tUaW1lIGJhc2V0aW1lID0gZ3N0X2VsZW1lbnRfZ2V0X2Jhc2VfdGltZSAoc3BlY3RydW0pOwotICAgICAgICBnZmxvYXQgKnNwZWN0ID0gZ19uZXcgKGdmbG9hdCwgc3BlY3RfYmFuZHMpOwotICAgICAgICBjb25zdCBHVmFsdWUgKmxpc3Q7Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSAqdmFsdWU7Ci0gICAgICAgIGd1aW50IGk7Ci0KLSAgICAgICAgbGlzdCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzLCAibWFnbml0dWRlIik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGVjdF9iYW5kczsgKytpKSB7Ci0gICAgICAgICAgdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKGxpc3QsIGkpOwotICAgICAgICAgIHNwZWN0W2ldID0gaGVpZ2h0X3NjYWxlICogZ192YWx1ZV9nZXRfZmxvYXQgKHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNsb2NrX2lkID0KLSAgICAgICAgICAgIGdzdF9jbG9ja19uZXdfc2luZ2xlX3Nob3RfaWQgKHN5bmNfY2xvY2ssIHdhaXR0aW1lICsgYmFzZXRpbWUpOwotICAgICAgICBnc3RfY2xvY2tfaWRfd2FpdF9hc3luYyAoY2xvY2tfaWQsIGRlbGF5ZWRfc3BlY3RydW1fdXBkYXRlLAotICAgICAgICAgICAgKGdwb2ludGVyKSBzcGVjdCwgTlVMTCk7Ci0gICAgICAgIGdzdF9jbG9ja19pZF91bnJlZiAoY2xvY2tfaWQpOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBHc3RFbGVtZW50ICpiaW47Ci0gIEdzdEVsZW1lbnQgKnNyYywgKnNwZWN0cnVtLCAqc2luazsKLSAgR3N0QnVzICpidXM7Ci0gIEd0a1dpZGdldCAqYXBwd2luZG93OwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotICBndGtfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICBiaW4gPSBnc3RfcGlwZWxpbmVfbmV3ICgiYmluIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChERUZBVUxUX0FVRElPU1JDLCAic3JjIik7Ci0KLSAgc3BlY3RydW0gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJzcGVjdHJ1bSIsICJzcGVjdHJ1bSIpOwotICBnX29iamVjdF9zZXQgKEdfT0JKRUNUIChzcGVjdHJ1bSksICJiYW5kcyIsIHNwZWN0X2JhbmRzLCAidGhyZXNob2xkIiwgLTgwLAotICAgICAgInBvc3QtbWVzc2FnZXMiLCBUUlVFLCBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmFrZXNpbmsiLCAic2luayIpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgc3BlY3RydW0sIHNpbmssIE5VTEwpOwotICBpZiAoIWdzdF9lbGVtZW50X2xpbmtfbWFueSAoc3JjLCBzcGVjdHJ1bSwgc2luaywgTlVMTCkpIHsKLSAgICBmcHJpbnRmIChzdGRlcnIsICJjYW4ndCBsaW5rIGVsZW1lbnRzXG4iKTsKLSAgICBleGl0ICgxKTsKLSAgfQotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG1lc3NhZ2VfaGFuZGxlciwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgc3luY19jbG9jayA9IGdzdF9waXBlbGluZV9nZXRfY2xvY2sgKEdTVF9QSVBFTElORSAoYmluKSk7Ci0KLSAgYXBwd2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoYXBwd2luZG93KSwgImRlc3Ryb3kiLAotICAgICAgR19DQUxMQkFDSyAob25fd2luZG93X2Rlc3Ryb3kpLCBOVUxMKTsKLQotICBkcmF3aW5nYXJlYSA9IGd0a19kcmF3aW5nX2FyZWFfbmV3ICgpOwotICBndGtfd2lkZ2V0X3NldF9zaXplX3JlcXVlc3QgKGRyYXdpbmdhcmVhLCBzcGVjdF9iYW5kcywgc3BlY3RfaGVpZ2h0KTsKLSAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGRyYXdpbmdhcmVhKSwgImNvbmZpZ3VyZS1ldmVudCIsCi0gICAgICBHX0NBTExCQUNLIChvbl9jb25maWd1cmVfZXZlbnQpLCAoZ3BvaW50ZXIpIHNwZWN0cnVtKTsKLSAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGFwcHdpbmRvdyksIGRyYXdpbmdhcmVhKTsKLSAgZ3RrX3dpZGdldF9zaG93X2FsbCAoYXBwd2luZG93KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBndGtfbWFpbiAoKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9OVUxMKTsKLQotICBnc3Rfb2JqZWN0X3VucmVmIChzeW5jX2Nsb2NrKTsKLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL3NwZWN0cnVtLWV4YW1wbGUuYyBiL3Rlc3RzL2V4YW1wbGVzL3NwZWN0cnVtL3NwZWN0cnVtLWV4YW1wbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1MmI0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9leGFtcGxlcy9zcGVjdHJ1bS9zcGVjdHJ1bS1leGFtcGxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU3RlZmFuIEtvc3QgPGVuc29uaWNAdXNlcnMuc2YubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBTY2htaWR0IDxqYW4uc2NobWlkdEBzdW4uY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIGd1aW50IHNwZWN0X2JhbmRzID0gMjA7Ci0KLSNkZWZpbmUgQVVESU9GUkVRIDMyMDAwCi0KLS8qIHJlY2VpdmUgc3BlY3RyYWwgZGF0YSBmcm9tIGVsZW1lbnQgbWVzc2FnZSAqLwotc3RhdGljIGdib29sZWFuCi1tZXNzYWdlX2hhbmRsZXIgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gIGlmIChtZXNzYWdlLT50eXBlID09IEdTVF9NRVNTQUdFX0VMRU1FTlQpIHsKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnMgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlIChtZXNzYWdlKTsKLSAgICBjb25zdCBnY2hhciAqbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUgKHMpOwotICAgIEdzdENsb2NrVGltZSBlbmR0aW1lOwotCi0gICAgaWYgKHN0cmNtcCAobmFtZSwgInNwZWN0cnVtIikgPT0gMCkgewotICAgICAgY29uc3QgR1ZhbHVlICptYWduaXR1ZGVzOwotICAgICAgY29uc3QgR1ZhbHVlICpwaGFzZXM7Ci0gICAgICBjb25zdCBHVmFsdWUgKm1hZywgKnBoYXNlOwotICAgICAgZ2RvdWJsZSBmcmVxOwotICAgICAgZ3VpbnQgaTsKLQotICAgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldF9jbG9ja190aW1lIChzLCAiZW5kdGltZSIsICZlbmR0aW1lKSkKLSAgICAgICAgZW5kdGltZSA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0KLSAgICAgIGdfcHJpbnQgKCJOZXcgc3BlY3RydW0gbWVzc2FnZSwgZW5kdGltZSAlIiBHU1RfVElNRV9GT1JNQVQgIlxuIiwKLSAgICAgICAgICBHU1RfVElNRV9BUkdTIChlbmR0aW1lKSk7Ci0KLSAgICAgIG1hZ25pdHVkZXMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZSAocywgIm1hZ25pdHVkZSIpOwotICAgICAgcGhhc2VzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHMsICJwaGFzZSIpOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgc3BlY3RfYmFuZHM7ICsraSkgewotICAgICAgICBmcmVxID0gKGdkb3VibGUpICgoQVVESU9GUkVRIC8gMikgKiBpICsgQVVESU9GUkVRIC8gNCkgLyBzcGVjdF9iYW5kczsKLSAgICAgICAgbWFnID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlIChtYWduaXR1ZGVzLCBpKTsKLSAgICAgICAgcGhhc2UgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUgKHBoYXNlcywgaSk7Ci0KLSAgICAgICAgaWYgKG1hZyAhPSBOVUxMICYmIHBoYXNlICE9IE5VTEwpIHsKLSAgICAgICAgICBnX3ByaW50ICgiYmFuZCAlZCAoZnJlcSAlZyk6IG1hZ25pdHVkZSAlZiBkQiBwaGFzZSAlZlxuIiwgaSwgZnJlcSwKLSAgICAgICAgICAgICAgZ192YWx1ZV9nZXRfZmxvYXQgKG1hZyksIGdfdmFsdWVfZ2V0X2Zsb2F0IChwaGFzZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBnX3ByaW50ICgiXG4iKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLSAgR3N0RWxlbWVudCAqYmluOwotICBHc3RFbGVtZW50ICpzcmMsICphdWRpb2NvbnZlcnQsICpzcGVjdHJ1bSwgKnNpbms7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RDYXBzICpjYXBzOwotICBHTWFpbkxvb3AgKmxvb3A7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoImJpbiIpOwotCi0gIHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvdGVzdHNyYyIsICJzcmMiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc3JjKSwgIndhdmUiLCAwLCAiZnJlcSIsIDYwMDAuMCwgTlVMTCk7Ci0gIGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvY29udmVydCIsIE5VTEwpOwotICBnX2Fzc2VydCAoYXVkaW9jb252ZXJ0KTsKLQotICBzcGVjdHJ1bSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInNwZWN0cnVtIiwgInNwZWN0cnVtIik7Ci0gIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QgKHNwZWN0cnVtKSwgImJhbmRzIiwgc3BlY3RfYmFuZHMsICJ0aHJlc2hvbGQiLCAtODAsCi0gICAgICAicG9zdC1tZXNzYWdlcyIsIFRSVUUsICJtZXNzYWdlLXBoYXNlIiwgVFJVRSwgTlVMTCk7Ci0KLSAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImZha2VzaW5rIiwgInNpbmsiKTsKLSAgZ19vYmplY3Rfc2V0IChHX09CSkVDVCAoc2luayksICJzeW5jIiwgVFJVRSwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgc3JjLCBhdWRpb2NvbnZlcnQsIHNwZWN0cnVtLCBzaW5rLCBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgQVVESU9GUkVRLCBOVUxMKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKHNyYywgYXVkaW9jb252ZXJ0KSB8fAotICAgICAgIWdzdF9lbGVtZW50X2xpbmtfZmlsdGVyZWQgKGF1ZGlvY29udmVydCwgc3BlY3RydW0sIGNhcHMpIHx8Ci0gICAgICAhZ3N0X2VsZW1lbnRfbGluayAoc3BlY3RydW0sIHNpbmspKSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiY2FuJ3QgbGluayBlbGVtZW50c1xuIik7Ci0gICAgZXhpdCAoMSk7Ci0gIH0KLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIGJ1cyA9IGdzdF9lbGVtZW50X2dldF9idXMgKGJpbik7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG1lc3NhZ2VfaGFuZGxlciwgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChiaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAvKiB3ZSBuZWVkIHRvIHJ1biBhIEdMaWIgbWFpbiBsb29wIHRvIGdldCB0aGUgbWVzc2FnZXMgKi8KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYmluKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3Y0bDIvTWFrZWZpbGUuYW0gYi90ZXN0cy9leGFtcGxlcy92NGwyL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjgwYzllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3Y0bDIvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW5vaW5zdF9QUk9HUkFNUyA9IGNhbWN0cmwKLQotY2FtY3RybF9TT1VSQ0VTID0gY2FtY3RybC5jCi1jYW1jdHJsX0NGTEFHUyAgPSAkKEdTVF9CQVNFX0NGTEFHUykgJChHU1RfQ09OVFJPTExFUl9DRkxBR1MpICQoR1NUX0NGTEFHUykKLWNhbWN0cmxfTERBREQgPSAkKEdTVF9CQVNFX0xJQlMpICQoR1NUX0NPTlRST0xMRVJfTElCUykgJChHU1RfTElCUykKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3Y0bDIvTWFrZWZpbGUuaW4gYi90ZXN0cy9leGFtcGxlcy92NGwyL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjYxYmExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2V4YW1wbGVzL3Y0bDIvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4NTIgKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi0KLVZQQVRIID0gQHNyY2RpckAKLWFtX19pc19nbnVfbWFrZSA9IHsgXAotICBpZiB0ZXN0IC16ICckKE1BS0VMRVZFTCknOyB0aGVuIFwKLSAgICBmYWxzZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9IT1NUKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfVkVSU0lPTiknICYmIHRlc3QgLW4gJyQoQ1VSRElSKSc7IHRoZW4gXAotICAgIHRydWU7IFwKLSAgZWxzZSBcCi0gICAgZmFsc2U7IFwKLSAgZmk7IFwKLX0KLWFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCi0gIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKLSAgICAgID8pIDs7IFwKLSAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCi0gICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCi0gICAgICAgICBleGl0IDE7OyBcCi0gIGVzYWM7IFwKLSAgaGFzX29wdD1ubzsgXAotICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAotICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAotICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCi0gIGVsc2UgXAotICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBicz1cXDsgXAotICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKLSAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKLSAgICBlc2FjOyBcCi0gIGZpOyBcCi0gIHNraXBfbmV4dD1ubzsgXAotICBzdHJpcF90cmFpbG9wdCAoKSBcCi0gIHsgXAotICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCi0gIH07IFwKLSAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCi0gICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAotICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCi0gICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKLSAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAotICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAotICAgIGVzYWM7IFwKLSAgICBjYXNlICQkZmxnIGluIFwKLSAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCi0gICAgZXNhYzsgXAotICBkb25lOyBcCi0gIHRlc3QgJCRoYXNfb3B0ID0geWVzCi1hbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLXBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACi1wa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKLWFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKLWluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0Ci1pbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCi1pbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKLUlOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCi10cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCi1OT1JNQUxfSU5TVEFMTCA9IDoKLVBSRV9JTlNUQUxMID0gOgotUE9TVF9JTlNUQUxMID0gOgotTk9STUFMX1VOSU5TVEFMTCA9IDoKLVBSRV9VTklOU1RBTEwgPSA6Ci1QT1NUX1VOSU5TVEFMTCA9IDoKLWJ1aWxkX3RyaXBsZXQgPSBAYnVpbGRACi1ob3N0X3RyaXBsZXQgPSBAaG9zdEAKLXRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKLW5vaW5zdF9QUk9HUkFNUyA9IGNhbWN0cmwkKEVYRUVYVCkKLXN1YmRpciA9IHRlc3RzL2V4YW1wbGVzL3Y0bDIKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1hYy1leHBhbmQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWF1dG8tYWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1jb21waWxlci1mbGFnLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1nY2MtaW5saW5lLWFzc2VtYmx5Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy1saWJ0b29sLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9hcy12ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9heF9jcmVhdGVfc3RkaW50X2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X3B0aHJlYWQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmNoLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtYXJncy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWNoZWNrLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZGVmYXVsdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWRvd2hpbGUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1lcnJvci5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWZlYXR1cmUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZ2xpYjIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wYWNrYWdlLXJlbGVhc2UtZGF0ZXRpbWUubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbGF0Zm9ybS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsdWdpbi1kb2NzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luZGlyLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2d0ay1kb2MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L29yYy5tNCAkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9wa2cubTQgXAotCSQodG9wX3NyY2RpcikvbTQvYWFsaWIubTQgJCh0b3Bfc3JjZGlyKS9tNC9nZXR0ZXh0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2dzdC1maW9ucmVhZC5tNCAkKHRvcF9zcmNkaXIpL200L2ljb252Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2ludGxtYWNvc3gubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItbGQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGliLWxpbmsubTQgJCh0b3Bfc3JjZGlyKS9tNC9saWItcHJlZml4Lm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCAkKHRvcF9zcmNkaXIpL200L25scy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9wby5tNCAkKHRvcF9zcmNkaXIpL200L3Byb2d0ZXN0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKGFtX19ESVNUX0NPTU1PTikKLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLVBST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCi1hbV9jYW1jdHJsX09CSkVDVFMgPSBjYW1jdHJsLWNhbWN0cmwuJChPQkpFWFQpCi1jYW1jdHJsX09CSkVDVFMgPSAkKGFtX2NhbWN0cmxfT0JKRUNUUykKLWFtX19ERVBFTkRFTkNJRVNfMSA9Ci1jYW1jdHJsX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAotCSQoYW1fX0RFUEVOREVOQ0lFU18xKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQotYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2x0XzAgPSAtLXNpbGVudAotYW1fX3ZfbHRfMSA9IAotY2FtY3RybF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChjYW1jdHJsX0NGTEFHUykgXAotCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGNhbWN0cmxfU09VUkNFUykKLURJU1RfU09VUkNFUyA9ICQoY2FtY3RybF9TT1VSQ0VTKQotYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCi0gIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAotICAgIG58bm98Tk8pIGZhbHNlOzsgXAotICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCi0gIGVzYWMKLWFtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0jIFJlYWQgYSBsaXN0IG9mIG5ld2xpbmUtc2VwYXJhdGVkIHN0cmluZ3MgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsCi0jIGFuZCBwcmludCBlYWNoIG9mIHRoZW0gb25jZSwgd2l0aG91dCBkdXBsaWNhdGVzLiAgSW5wdXQgb3JkZXIgaXMKLSMgKm5vdCogcHJlc2VydmVkLgotYW1fX3VuaXF1aWZ5X2lucHV0ID0gJChBV0spICdcCi0gIEJFR0lOIHsgbm9uZW1wdHkgPSAwOyB9IFwKLSAgeyBpdGVtc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLSAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBpdGVtcykgcHJpbnQgaTsgfTsgfSBcCi0nCi0jIE1ha2Ugc3VyZSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIHVuaXF1ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UsCi0jIGUuZy4sIHRoZSBzYW1lIHNvdXJjZSBmaWxlIG1pZ2h0IGJlIHNoYXJlZCBhbW9uZyBfU09VUkNFUyB2YXJpYWJsZXMKLSMgZm9yIGRpZmZlcmVudCBwcm9ncmFtcy9saWJyYXJpZXMuCi1hbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzID0gXAotICBsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotICB1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotICBkb25lIHwgJChhbV9fdW5pcXVpZnlfaW5wdXQpYAotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotYW1fX0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX3NyY2RpcikvZGVwY29tcAotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotY2FtY3RybF9TT1VSQ0VTID0gY2FtY3RybC5jCi1jYW1jdHJsX0NGTEFHUyA9ICQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DT05UUk9MTEVSX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotY2FtY3RybF9MREFERCA9ICQoR1NUX0JBU0VfTElCUykgJChHU1RfQ09OVFJPTExFUl9MSUJTKSAkKEdTVF9MSUJTKQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZXhhbXBsZXMvdjRsMi9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9leGFtcGxlcy92NGwyL01ha2VmaWxlCi1NYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCi0JQGNhc2UgJyQ/JyBpbiBcCi0JICAqY29uZmlnLnN0YXR1cyopIFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAotCSAgKikgXAotCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCi0JZXNhYzsKLQotJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKGFtX19hY2xvY2FsX200X2RlcHMpOgotCi1jbGVhbi1ub2luc3RQUk9HUkFNUzoKLQlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgdGVzdCAtbiAiJCRsaXN0IiB8fCBleGl0IDA7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdCB8fCBleGl0ICQkPzsgXAotCXRlc3QgLW4gIiQoRVhFRVhUKSIgfHwgZXhpdCAwOyBcCi0JbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0Ci0KLWNhbWN0cmwkKEVYRUVYVCk6ICQoY2FtY3RybF9PQkpFQ1RTKSAkKGNhbWN0cmxfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2NhbWN0cmxfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgY2FtY3RybCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoY2FtY3RybF9MSU5LKSAkKGNhbWN0cmxfT0JKRUNUUykgJChjYW1jdHJsX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0KLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jYW1jdHJsLWNhbWN0cmwuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAICQ8Ci0KLS5jLm9iajoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotY2FtY3RybC1jYW1jdHJsLm86IGNhbWN0cmwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNhbWN0cmxfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGNhbWN0cmwtY2FtY3RybC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS9jYW1jdHJsLWNhbWN0cmwuVHBvIC1jIC1vIGNhbWN0cmwtY2FtY3RybC5vIGB0ZXN0IC1mICdjYW1jdHJsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNhbWN0cmwuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2FtY3RybC1jYW1jdHJsLlRwbyAkKERFUERJUikvY2FtY3RybC1jYW1jdHJsLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2FtY3RybC5jJyBvYmplY3Q9J2NhbWN0cmwtY2FtY3RybC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjYW1jdHJsX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGNhbWN0cmwtY2FtY3RybC5vIGB0ZXN0IC1mICdjYW1jdHJsLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGNhbWN0cmwuYwotCi1jYW1jdHJsLWNhbWN0cmwub2JqOiBjYW1jdHJsLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChjYW1jdHJsX0NGTEFHUykgJChDRkxBR1MpIC1NVCBjYW1jdHJsLWNhbWN0cmwub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS9jYW1jdHJsLWNhbWN0cmwuVHBvIC1jIC1vIGNhbWN0cmwtY2FtY3RybC5vYmogYGlmIHRlc3QgLWYgJ2NhbWN0cmwuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdjYW1jdHJsLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2NhbWN0cmwuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvY2FtY3RybC1jYW1jdHJsLlRwbyAkKERFUERJUikvY2FtY3RybC1jYW1jdHJsLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nY2FtY3RybC5jJyBvYmplY3Q9J2NhbWN0cmwtY2FtY3RybC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGNhbWN0cmxfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gY2FtY3RybC1jYW1jdHJsLm9iaiBgaWYgdGVzdCAtZiAnY2FtY3RybC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2NhbWN0cmwuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvY2FtY3RybC5jJzsgZmlgCi0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi0KLUlEOiAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiB0YWdzLWFtCi1UQUdTOiB0YWdzCi0KLXRhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCi0Jc2hpZnQ7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAotCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgaWYgdGVzdCAkJCMgLWd0IDA7IHRoZW4gXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgIiQkQCIgJCR1bmlxdWU7IFwKLQkgIGVsc2UgXAotCSAgICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCi0JICAgICAgJCR1bmlxdWU7IFwKLQkgIGZpOyBcCi0JZmkKLWN0YWdzOiBjdGFncy1hbQotCi1DVEFHUzogY3RhZ3MKLWN0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KLQotY3Njb3BlbGlzdC1hbTogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCWxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0JY2FzZSAiJChzcmNkaXIpIiBpbiBcCi0JICBbXFwvXSogfCA/OltcXC9dKikgc2Rpcj0iJChzcmNkaXIpIiA7OyBcCi0JICAqKSBzZGlyPSQoc3ViZGlyKS8kKHNyY2RpcikgOzsgXAotCWVzYWM7IFwKLQlmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gXAotCSAgICBlY2hvICIkKHN1YmRpcikvJCRpIjsgXAotCSAgZWxzZSBcCi0JICAgIGVjaG8gIiQkc2Rpci8kJGkiOyBcCi0JICBmaTsgXAotCWRvbmUgPj4gJCh0b3BfYnVpbGRkaXIpL2NzY29wZS5maWxlcwotCi1kaXN0Y2xlYW4tdGFnczoKLQktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAotCW1vc3RseWNsZWFuLWFtCi0KLWRpc3RjbGVhbjogZGlzdGNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLXRhZ3MKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOgotCi0uTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCi0KLS5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlbGlzdC1hbSBjdGFncyBcCi0JY3RhZ3MtYW0gZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAotCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCi0JaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdGFncyB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2V4YW1wbGVzL3Y0bDIvY2FtY3RybC5jIGIvdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ODM0MTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvZXhhbXBsZXMvdjRsMi9jYW1jdHJsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlZmFuIEtvc3QgPHN0ZWZhbi5rb3N0QG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotLyogZGVtbyBmb3IgdXNpbmcgZ3N0Y29udHJvbGVyIHdpdGggY2FtZXJhIGNhcHR1cmUgZm9yIGUuZy4gYnJhY2tldGluZwotICoKLSAqIGdjYyBgcGtnLWNvbmZpZyAtLWNmbGFncyAtLWxpYnMgZ3N0cmVhbWVyLTAuMTAgZ3N0cmVhbWVyLWNvbnRyb2xsZXItMC4xMGAgY2FtY3RybC5jIC1vIGNhbWN0cmwKLSAqCi0gKiBUT0RPOgotICogLSBoYW5kbGUgc3RyZWFtIHN0YXR1cyBhbmQgc3dpdGNoIGNhcHR1cmUgdGhyZWFkIHRvIFNDSEVEX1JSL0ZJRk8KLSAqIC0gdGhlIHF1ZXVlLXNpemUgY29udHJvbHMgdGhlIGNvbnRyb2xlciBvZmZzZXQKLSAqICAgLSByaWdodCBub3cgd2Ugd29yayB3aXRoIDEgcXVldWVkIHBpY3R1cmUgYW5kIHRodXMgYWN0aXZlIHNldHRpbmdzIGZvciBuZXh0Ci0gKiAgICAgZnJhbWUKLSAqIC0gd2Ugd2FudCBzb21lIGZlZWRiYWNrIGFib3V0IGhvdyBwcmVjaXNlbHkgYSBwcm9ncmFtIGNhbiBiZSByZWFsaXplZAotICogICAtIHdlIG1pZ2h0IHdhbnQgdG8gYWRqdXN0IHRoZSBmcmFtZXJhdGUgdG8gaGFuZGxlIGhhcmR3YXJlIGxpbW1pdHMKLSAqIC0gd2UgZS5nLiBjYW4ndCBjaGFuZ2UgcmVzb2x1dGlvbiBwZXIgZnJhbWUgcmlnaHQgbm93Ci0gKi8KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvY29udHJvbGxlci9nc3RpbnRlcnBvbGF0aW9uY29udHJvbHNvdXJjZS5oPgotI2luY2x1ZGUgPGdzdC9jb250cm9sbGVyL2dzdGRpcmVjdGNvbnRyb2xiaW5kaW5nLmg+Ci0KLXN0YXRpYyB2b2lkCi1ldmVudF9sb29wIChHc3RFbGVtZW50ICogYmluKQotewotICBHc3RCdXMgKmJ1czsKLSAgR3N0TWVzc2FnZSAqbWVzc2FnZSA9IE5VTEw7Ci0KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoR1NUX0VMRU1FTlQgKGJpbikpOwotCi0gIHdoaWxlIChUUlVFKSB7Ci0gICAgbWVzc2FnZSA9IGdzdF9idXNfcG9sbCAoYnVzLCBHU1RfTUVTU0FHRV9BTlksIC0xKTsKLQotICAgIHN3aXRjaCAobWVzc2FnZS0+dHlwZSkgewotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9XQVJOSU5HOgotICAgICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjp7Ci0gICAgICAgIEdFcnJvciAqZ2Vycm9yOwotICAgICAgICBnY2hhciAqZGVidWc7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1lc3NhZ2UsICZnZXJyb3IsICZkZWJ1Zyk7Ci0gICAgICAgIGdzdF9vYmplY3RfZGVmYXVsdF9lcnJvciAoR1NUX01FU1NBR0VfU1JDIChtZXNzYWdlKSwgZ2Vycm9yLCBkZWJ1Zyk7Ci0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtZXNzYWdlKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlIChnZXJyb3IpOwotICAgICAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQKLXNldF9wcm9ncmFtIChHc3RPYmplY3QgKiBlbGVtLCBHc3RTdHJ1Y3R1cmUgKiBwcm9nKQotewotICBjb25zdCBHc3RTdHJ1Y3R1cmUgKnM7Ci0gIEdzdENvbnRyb2xTb3VyY2UgKmNzOwotICBHc3RDbG9ja1RpbWUgdHMsIGR1cjsKLSAgZ2RvdWJsZSB2OwotICBjb25zdCBHVmFsdWUgKmZyYW1lOwotICBHSGFzaFRhYmxlICpjc3M7Ci0gIGdpbnQgaSwgajsKLSAgY29uc3QgZ2NoYXIgKm5hbWU7Ci0KLSAgY3NzID0gZ19oYXNoX3RhYmxlX25ldyAoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwpOwotCi0gIHRzID0gMDsKLSAgZHVyID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludCAoR1NUX1NFQ09ORCwgMSwgMTUpOwotCi0gIC8qIGxvb3Agb3ZlciBlYWNoIGltYWdlIGluIHByb2cgKi8KLSAgZm9yIChpID0gMDsgaSA8IGdzdF9zdHJ1Y3R1cmVfbl9maWVsZHMgKHByb2cpOyBpKyspIHsKLSAgICBHU1RfREVCVUcgKCJjdHJsIG9uICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyAodHMpKTsKLQotICAgIGZyYW1lID0KLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUgKHByb2csIGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKHByb2csIGkpKTsKLSAgICBzID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUgKGZyYW1lKTsKLSAgICBmb3IgKGogPSAwOyBqIDwgZ3N0X3N0cnVjdHVyZV9uX2ZpZWxkcyAocyk7IGorKykgewotICAgICAgbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfbnRoX2ZpZWxkX25hbWUgKHMsIGopOwotICAgICAgY3MgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjc3MsIG5hbWUpOwotICAgICAgaWYgKCFjcykgewotICAgICAgICBjcyA9IGdzdF9pbnRlcnBvbGF0aW9uX2NvbnRyb2xfc291cmNlX25ldyAoKTsKLSAgICAgICAgZ3N0X29iamVjdF9hZGRfY29udHJvbF9iaW5kaW5nIChlbGVtLAotICAgICAgICAgICAgZ3N0X2RpcmVjdF9jb250cm9sX2JpbmRpbmdfbmV3IChlbGVtLCBuYW1lLCBjcykpOwotICAgICAgICBnX29iamVjdF9zZXQgKGNzLCAibW9kZSIsIEdTVF9JTlRFUlBPTEFUSU9OX01PREVfTk9ORSwgTlVMTCk7Ci0gICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQgKGNzcywgKGdwb2ludGVyKSBuYW1lLCBjcyk7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYgKGNzKTsKLSAgICAgIH0KLSAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZSAocywgbmFtZSwgJnYpOwotICAgICAgZ3N0X3RpbWVkX3ZhbHVlX2NvbnRyb2xfc291cmNlX3NldCAoKEdzdFRpbWVkVmFsdWVDb250cm9sU291cmNlICopIGNzLCB0cywKLSAgICAgICAgICB2KTsKLSAgICAgIEdTVF9ERUJVRyAoIiAgJXMgPSAlbGYiLCBuYW1lLCB2KTsKLSAgICB9Ci0gICAgdHMgKz0gZHVyOwotICB9Ci0KLSAgZ19oYXNoX3RhYmxlX3VucmVmIChjc3MpOwotfQotCi1naW50Ci1tYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCi17Ci0gIEdzdEVsZW1lbnQgKmJpbjsKLSAgR3N0RWxlbWVudCAqc3JjLCAqZm10LCAqZW5jLCAqc2luazsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0U3RydWN0dXJlICpwcm9nOwotCi0gIC8qIGluaXQgZ3N0cmVhbWVyICovCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNyZWF0ZSBhIG5ldyBiaW4gdG8gaG9sZCB0aGUgZWxlbWVudHMgKi8KLSAgYmluID0gZ3N0X3BpcGVsaW5lX25ldyAoImNhbWVyYSIpOwotCi0gIC8qIGNyZWF0ZSBlbGVtZW50cyAqLwotICBpZiAoIShzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgibXVsdGlmaWxlc2luayIsIE5VTEwpKSkgewotICAgIEdTVF9XQVJOSU5HICgiQ2FuJ3QgY3JlYXRlIGVsZW1lbnQgXCJtdWx0aWZpbGVzaW5rXCIiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAibG9jYXRpb24iLCAiaW1hZ2UlMDJkLmpwZyIsIE5VTEwpOwotCi0gIGlmICghKGVuYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImpwZWdlbmMiLCBOVUxMKSkpIHsKLSAgICBHU1RfV0FSTklORyAoIkNhbid0IGNyZWF0ZSBlbGVtZW50IFwianBlZ2VuY1wiIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaWYgKCEoZm10ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpKSkgewotICAgIEdTVF9XQVJOSU5HICgiQ2FuJ3QgY3JlYXRlIGVsZW1lbnQgXCJjYXBzZmlsdGVyXCIiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgY2FwcyA9Ci0gICAgICBnc3RfY2Fwc19mcm9tX3N0cmluZwotICAgICAgKCJ2aWRlby94LXJhdywgd2lkdGg9NjQwLCBoZWlnaHQ9NDgwLCBmcmFtZXJhdGU9KGZyYWN0aW9uKTE1LzEiKTsKLSAgZ19vYmplY3Rfc2V0IChmbXQsICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0KLSAgaWYgKCEoc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidjRsMnNyYyIsIE5VTEwpKSkgewotICAgIEdTVF9XQVJOSU5HICgiQ2FuJ3QgY3JlYXRlIGVsZW1lbnQgXCJ2NGwyc3JjXCIiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZ19vYmplY3Rfc2V0IChzcmMsICJxdWV1ZS1zaXplIiwgMSwgTlVMTCk7Ci0KLSAgLyogYWRkIG9iamVjdHMgdG8gdGhlIG1haW4gYmluICovCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGJpbiksIHNyYywgZm10LCBlbmMsIHNpbmssIE5VTEwpOwotCi0gIC8qIGxpbmsgZWxlbWVudHMgKi8KLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rX21hbnkgKHNyYywgZm10LCBlbmMsIHNpbmssIE5VTEwpKSB7Ci0gICAgR1NUX1dBUk5JTkcgKCJDYW4ndCBsaW5rIGVsZW1lbnRzIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLyogcHJvZ3JhbW0gYSBwYXR0ZXJuIG9mIGV2ZW50cyAqLwotI2lmIDAKLSAgcHJvZyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCJwcm9ncmFtIgotICAgICAgIiwgaW1hZ2UwMD0oc3RydWN0dXJlKVwiaW1hZ2VcXCxjb250cmFzdFxcPTAuMFxcO1wiIgotICAgICAgIiwgaW1hZ2UwMT0oc3RydWN0dXJlKVwiaW1hZ2VcXCxjb250cmFzdFxcPTAuM1xcO1wiIgotICAgICAgIiwgaW1hZ2UwMj0oc3RydWN0dXJlKVwiaW1hZ2VcXCxjb250cmFzdFxcPTEuMFxcO1wiIgotICAgICAgIiwgaW1hZ2UwMz0oc3RydWN0dXJlKVwiaW1hZ2VcXCxjb250cmFzdFxcPTAuMDVcXDtcIjsiLCBOVUxMKTsKLSNlbmRpZgotI2lmIDEKLSAgcHJvZyA9IGdzdF9zdHJ1Y3R1cmVfZnJvbV9zdHJpbmcgKCJwcm9ncmFtIgotICAgICAgIiwgaW1hZ2UwMD0oc3RydWN0dXJlKVwiaW1hZ2VcXCxicmlnaHRuZXNzXFw9MS4wXFwsY29udHJhc3RcXD0wLjBcXDtcIiIKLSAgICAgICIsIGltYWdlMDE9KHN0cnVjdHVyZSlcImltYWdlXFwsYnJpZ2h0bmVzc1xcPTAuNVxcLGNvbnRyYXN0XFw9MC4zXFw7XCIiCi0gICAgICAiLCBpbWFnZTAyPShzdHJ1Y3R1cmUpXCJpbWFnZVxcLGJyaWdodG5lc3NcXD0wLjI1XFwsY29udHJhc3RcXD0xLjBcXDtcIiIKLSAgICAgICIsIGltYWdlMDM9KHN0cnVjdHVyZSlcImltYWdlXFwsYnJpZ2h0bmVzc1xcPTAuMFxcLGNvbnRyYXN0XFw9MC4wNVxcO1wiOyIsCi0gICAgICBOVUxMKTsKLSNlbmRpZgotICBzZXRfcHJvZ3JhbSAoR1NUX09CSkVDVCAoc3JjKSwgcHJvZyk7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibnVtLWJ1ZmZlcnMiLCBnc3Rfc3RydWN0dXJlX25fZmllbGRzIChwcm9nKSwgTlVMTCk7Ci0KLSAgLyogcHJlcGFyZSBwbGF5YmFjayAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogcGxheSBhbmQgd2FpdCAqLwotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKGJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gIC8qIG1haW5sb29wIGFuZCB3YWl0IGZvciBlb3MgKi8KLSAgZXZlbnRfbG9vcCAoYmluKTsKLQotICAvKiBzdG9wIGFuZCBjbGVhbnVwICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoYmluLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKEdTVF9PQkpFQ1QgKGJpbikpOwotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL01ha2VmaWxlLmFtIGIvdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZjZhZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0KLUVYVFJBX0RJU1QgPSBcCi0JYXVkaW90ZXN0c3JjLmZsYWMgXAotCWF1ZGlvdGVzdHNyYy53YXYgXAotCWdyYWRpZW50LmoyayBcCi0JaWQzLTQwNzM0OS0xLnRhZyBcCi0JaWQzLTQwNzM0OS0yLnRhZyBcCi0JaWQzLTQ0NzAwMC13Y29wLnRhZyBcCi0JaWQzLTU3NzQ2OC11bnN5bmNlZC10YWcudGFnIFwKLQlpZDMtNTg4MTQ4LXVuc3luY2VkLXYyNC50YWcgXAotCWltYWdlLmpwZyBcCi0JcGNtMTZzaW5lLmZsdiBcCi0JcGlua25vaXNlLXZvcmJpcy5ta3YgXAotCXRlc3QtY2VydC5wZW0gXAotCXRlc3Qta2V5LnBlbSBcCi0Jc3BsaXR2aWRlbzAwLm9nZyBzcGxpdHZpZGVvMDEub2dnIFwKLQlzcGxpdHZpZGVvMDIub2dnCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL01ha2VmaWxlLmluIGIvdGVzdHMvZmlsZXMvTWFrZWZpbGUuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NjBlYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw2OTggKzAsMCBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xNSBmcm9tIE1ha2VmaWxlLmFtLgotIyBAY29uZmlndXJlX2lucHV0QAotCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0Ci0jIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSMgUEFSVElDVUxBUiBQVVJQT1NFLgotCi1AU0VUX01BS0VACi1WUEFUSCA9IEBzcmNkaXJACi1hbV9faXNfZ251X21ha2UgPSB7IFwKLSAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCi0gICAgZmFsc2U7IFwKLSAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKLSAgICB0cnVlOyBcCi0gIGVsc2UgXAotICAgIGZhbHNlOyBcCi0gIGZpOyBcCi19Ci1hbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAotICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCi0gICAgICA/KSA7OyBcCi0gICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAotICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAotICAgICAgICAgZXhpdCAxOzsgXAotICBlc2FjOyBcCi0gIGhhc19vcHQ9bm87IFwKLSAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKLSAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKLSAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAotICBlbHNlIFwKLSAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKLSAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgYnM9XFw7IFwKLSAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCi0gICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCi0gICAgZXNhYzsgXAotICBmaTsgXAotICBza2lwX25leHQ9bm87IFwKLSAgc3RyaXBfdHJhaWxvcHQgKCkgXAotICB7IFwKLSAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAotICB9OyBcCi0gIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAotICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKLSAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAotICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCi0gICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKLSAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKLSAgICBlc2FjOyBcCi0gICAgY2FzZSAkJGZsZyBpbiBcCi0gICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAotICAgIGVzYWM7IFwKLSAgZG9uZTsgXAotICB0ZXN0ICQkaGFzX29wdCA9IHllcwotYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKLWFtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1zdWJkaXIgPSB0ZXN0cy9maWxlcwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKLWFtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfUF8wID0gZmFsc2UKLWFtX192X1BfMSA9IDoKLUFNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7Ci1hbV9fdl9HRU5fMSA9IAotQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKLWFtX192X2F0XzAgPSBACi1hbV9fdl9hdF8xID0gCi1TT1VSQ0VTID0KLURJU1RfU09VUkNFUyA9Ci1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLWFtX19ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbgotRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKLUFBTElCX0NGTEFHUyA9IEBBQUxJQl9DRkxBR1NACi1BQUxJQl9DT05GSUcgPSBAQUFMSUJfQ09ORklHQAotQUFMSUJfTElCUyA9IEBBQUxJQl9MSUJTQAotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQUNMT0NBTF9BTUZMQUdTID0gQEFDTE9DQUxfQU1GTEFHU0AKLUFNVEFSID0gQEFNVEFSQAotQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACi1BUiA9IEBBUkAKLUFTID0gQEFTQAotQVVUT0NPTkYgPSBAQVVUT0NPTkZACi1BVVRPSEVBREVSID0gQEFVVE9IRUFERVJACi1BVVRPTUFLRSA9IEBBVVRPTUFLRUAKLUFXSyA9IEBBV0tACi1CWjJfTElCUyA9IEBCWjJfTElCU0AKLUNBSVJPX0NGTEFHUyA9IEBDQUlST19DRkxBR1NACi1DQUlST19MSUJTID0gQENBSVJPX0xJQlNACi1DQyA9IEBDQ0AKLUNDQVMgPSBAQ0NBU0AKLUNDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAotQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKLUNDREVQTU9ERSA9IEBDQ0RFUE1PREVACi1DRkxBR1MgPSBAQ0ZMQUdTQAotQ1BQID0gQENQUEAKLUNQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKLUNZR1BBVEhfVyA9IEBDWUdQQVRIX1dACi1ERUZBVUxUX0FVRElPU0lOSyA9IEBERUZBVUxUX0FVRElPU0lOS0AKLURFRkFVTFRfQVVESU9TUkMgPSBAREVGQVVMVF9BVURJT1NSQ0AKLURFRkFVTFRfVklERU9TSU5LID0gQERFRkFVTFRfVklERU9TSU5LQAotREVGQVVMVF9WSURFT1NSQyA9IEBERUZBVUxUX1ZJREVPU1JDQAotREVGQVVMVF9WSVNVQUxJWkVSID0gQERFRkFVTFRfVklTVUFMSVpFUkAKLURFRlMgPSBAREVGU0AKLURFUERJUiA9IEBERVBESVJACi1ERVBSRUNBVEVEX0NGTEFHUyA9IEBERVBSRUNBVEVEX0NGTEFHU0AKLURJUkVDVFNPVU5EX0NGTEFHUyA9IEBESVJFQ1RTT1VORF9DRkxBR1NACi1ESVJFQ1RTT1VORF9MREZMQUdTID0gQERJUkVDVFNPVU5EX0xERkxBR1NACi1ESVJFQ1RTT1VORF9MSUJTID0gQERJUkVDVFNPVU5EX0xJQlNACi1ETExUT09MID0gQERMTFRPT0xACi1EU1lNVVRJTCA9IEBEU1lNVVRJTEAKLURVTVBCSU4gPSBARFVNUEJJTkAKLURWMTM5NF9DRkxBR1MgPSBARFYxMzk0X0NGTEFHU0AKLURWMTM5NF9MSUJTID0gQERWMTM5NF9MSUJTQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FUlJPUl9DRkxBR1MgPSBARVJST1JfQ0ZMQUdTQAotRVJST1JfQ1hYRkxBR1MgPSBARVJST1JfQ1hYRkxBR1NACi1FUlJPUl9PQkpDRkxBR1MgPSBARVJST1JfT0JKQ0ZMQUdTQAotRVhFRVhUID0gQEVYRUVYVEAKLUZGTEFHUyA9IEBGRkxBR1NACi1GR1JFUCA9IEBGR1JFUEAKLUZMQUNfQ0ZMQUdTID0gQEZMQUNfQ0ZMQUdTQAotRkxBQ19MSUJTID0gQEZMQUNfTElCU0AKLUdDT1YgPSBAR0NPVkAKLUdDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAotR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKLUdES19QSVhCVUZfQ0ZMQUdTID0gQEdES19QSVhCVUZfQ0ZMQUdTQAotR0RLX1BJWEJVRl9MSUJTID0gQEdES19QSVhCVUZfTElCU0AKLUdFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IEBHRVRURVhUX01BQ1JPX1ZFUlNJT05ACi1HRVRURVhUX1BBQ0tBR0UgPSBAR0VUVEVYVF9QQUNLQUdFQAotR0lPX0NGTEFHUyA9IEBHSU9fQ0ZMQUdTQAotR0lPX0xERkxBR1MgPSBAR0lPX0xERkxBR1NACi1HSU9fTElCUyA9IEBHSU9fTElCU0AKLUdMSUJfQ0ZMQUdTID0gQEdMSUJfQ0ZMQUdTQAotR0xJQl9FWFRSQV9DRkxBR1MgPSBAR0xJQl9FWFRSQV9DRkxBR1NACi1HTElCX0dFTk1BUlNIQUwgPSBAR0xJQl9HRU5NQVJTSEFMQAotR0xJQl9MSUJTID0gQEdMSUJfTElCU0AKLUdMSUJfTUtFTlVNUyA9IEBHTElCX01LRU5VTVNACi1HTElCX1BSRUZJWCA9IEBHTElCX1BSRUZJWEAKLUdMSUJfUkVRID0gQEdMSUJfUkVRQAotR01TR0ZNVCA9IEBHTVNHRk1UQAotR01TR0ZNVF8wMTUgPSBAR01TR0ZNVF8wMTVACi1HUkVQID0gQEdSRVBACi1HU1RQQl9QTFVHSU5TX0RJUiA9IEBHU1RQQl9QTFVHSU5TX0RJUkAKLUdTVFBCX1BSRUZJWCA9IEBHU1RQQl9QUkVGSVhACi1HU1RfQUdFID0gQEdTVF9BR0VACi1HU1RfQUxMX0xERkxBR1MgPSBAR1NUX0FMTF9MREZMQUdTQAotR1NUX0FQSV9WRVJTSU9OID0gQEdTVF9BUElfVkVSU0lPTkAKLUdTVF9CQVNFX0NGTEFHUyA9IEBHU1RfQkFTRV9DRkxBR1NACi1HU1RfQkFTRV9MSUJTID0gQEdTVF9CQVNFX0xJQlNACi1HU1RfQ0ZMQUdTID0gQEdTVF9DRkxBR1NACi1HU1RfQ0hFQ0tfQ0ZMQUdTID0gQEdTVF9DSEVDS19DRkxBR1NACi1HU1RfQ0hFQ0tfTElCUyA9IEBHU1RfQ0hFQ0tfTElCU0AKLUdTVF9DT05UUk9MTEVSX0NGTEFHUyA9IEBHU1RfQ09OVFJPTExFUl9DRkxBR1NACi1HU1RfQ09OVFJPTExFUl9MSUJTID0gQEdTVF9DT05UUk9MTEVSX0xJQlNACi1HU1RfQ1VSUkVOVCA9IEBHU1RfQ1VSUkVOVEAKLUdTVF9DWFhGTEFHUyA9IEBHU1RfQ1hYRkxBR1NACi1HU1RfTEVWRUxfREVGQVVMVCA9IEBHU1RfTEVWRUxfREVGQVVMVEAKLUdTVF9MSUJTID0gQEdTVF9MSUJTQAotR1NUX0xJQlZFUlNJT04gPSBAR1NUX0xJQlZFUlNJT05ACi1HU1RfTElDRU5TRSA9IEBHU1RfTElDRU5TRUAKLUdTVF9MVF9MREZMQUdTID0gQEdTVF9MVF9MREZMQUdTQAotR1NUX05FVF9DRkxBR1MgPSBAR1NUX05FVF9DRkxBR1NACi1HU1RfTkVUX0xJQlMgPSBAR1NUX05FVF9MSUJTQAotR1NUX09CSkNGTEFHUyA9IEBHU1RfT0JKQ0ZMQUdTQAotR1NUX09QVElPTl9DRkxBR1MgPSBAR1NUX09QVElPTl9DRkxBR1NACi1HU1RfT1BUSU9OX0NYWEZMQUdTID0gQEdTVF9PUFRJT05fQ1hYRkxBR1NACi1HU1RfT1BUSU9OX09CSkNGTEFHUyA9IEBHU1RfT1BUSU9OX09CSkNGTEFHU0AKLUdTVF9QQUNLQUdFX05BTUUgPSBAR1NUX1BBQ0tBR0VfTkFNRUAKLUdTVF9QQUNLQUdFX09SSUdJTiA9IEBHU1RfUEFDS0FHRV9PUklHSU5ACi1HU1RfUEtHX0NPTkZJR19QQVRIID0gQEdTVF9QS0dfQ09ORklHX1BBVEhACi1HU1RfUExVR0lOU19BTEwgPSBAR1NUX1BMVUdJTlNfQUxMQAotR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MgPSBAR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1NACi1HU1RfUExVR0lOU19CQVNFX0RJUiA9IEBHU1RfUExVR0lOU19CQVNFX0RJUkAKLUdTVF9QTFVHSU5TX0JBU0VfTElCUyA9IEBHU1RfUExVR0lOU19CQVNFX0xJQlNACi1HU1RfUExVR0lOU19ESVIgPSBAR1NUX1BMVUdJTlNfRElSQAotR1NUX1BMVUdJTlNfTk9OUE9SVEVEID0gQEdTVF9QTFVHSU5TX05PTlBPUlRFREAKLUdTVF9QTFVHSU5TX1NFTEVDVEVEID0gQEdTVF9QTFVHSU5TX1NFTEVDVEVEQAotR1NUX1BMVUdJTl9MREZMQUdTID0gQEdTVF9QTFVHSU5fTERGTEFHU0AKLUdTVF9QTFVHSU5fTElCVE9PTEZMQUdTID0gQEdTVF9QTFVHSU5fTElCVE9PTEZMQUdTQAotR1NUX1BSRUZJWCA9IEBHU1RfUFJFRklYQAotR1NUX1JFVklTSU9OID0gQEdTVF9SRVZJU0lPTkAKLUdTVF9UT09MU19ESVIgPSBAR1NUX1RPT0xTX0RJUkAKLUdUS0RPQ19DSEVDSyA9IEBHVEtET0NfQ0hFQ0tACi1HVEtET0NfREVQU19DRkxBR1MgPSBAR1RLRE9DX0RFUFNfQ0ZMQUdTQAotR1RLRE9DX0RFUFNfTElCUyA9IEBHVEtET0NfREVQU19MSUJTQAotR1RLRE9DX01LUERGID0gQEdUS0RPQ19NS1BERkAKLUdUS0RPQ19SRUJBU0UgPSBAR1RLRE9DX1JFQkFTRUAKLUdUS19DRkxBR1MgPSBAR1RLX0NGTEFHU0AKLUdUS19MSUJTID0gQEdUS19MSUJTQAotR1RLX1gxMV9DRkxBR1MgPSBAR1RLX1gxMV9DRkxBR1NACi1HVEtfWDExX0xJQlMgPSBAR1RLX1gxMV9MSUJTQAotR1VERVZfQ0ZMQUdTID0gQEdVREVWX0NGTEFHU0AKLUdVREVWX0xJQlMgPSBAR1VERVZfTElCU0AKLUhBVkVfQVZDMTM5NCA9IEBIQVZFX0FWQzEzOTRACi1IQVZFX0NYWCA9IEBIQVZFX0NYWEAKLUhBVkVfRElSRUNUU09VTkQgPSBASEFWRV9ESVJFQ1RTT1VOREAKLUhBVkVfUk9NMTM5NCA9IEBIQVZFX1JPTTEzOTRACi1IQVZFX1pMSUIgPSBASEFWRV9aTElCQAotSFRNTF9ESVIgPSBASFRNTF9ESVJACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUlOVExMSUJTID0gQElOVExMSUJTQAotSU5UTF9NQUNPU1hfTElCUyA9IEBJTlRMX01BQ09TWF9MSUJTQAotSkFDS18wXzEyMF8xX0NGTEFHUyA9IEBKQUNLXzBfMTIwXzFfQ0ZMQUdTQAotSkFDS18wXzEyMF8xX0xJQlMgPSBASkFDS18wXzEyMF8xX0xJQlNACi1KQUNLXzFfOV83X0NGTEFHUyA9IEBKQUNLXzFfOV83X0NGTEFHU0AKLUpBQ0tfMV85XzdfTElCUyA9IEBKQUNLXzFfOV83X0xJQlNACi1KQUNLX0NGTEFHUyA9IEBKQUNLX0NGTEFHU0AKLUpBQ0tfTElCUyA9IEBKQUNLX0xJQlNACi1KUEVHX0xJQlMgPSBASlBFR19MSUJTQAotTEQgPSBATERACi1MREZMQUdTID0gQExERkxBR1NACi1MSUJDQUNBX0NGTEFHUyA9IEBMSUJDQUNBX0NGTEFHU0AKLUxJQkNBQ0FfTElCUyA9IEBMSUJDQUNBX0xJQlNACi1MSUJEVl9DRkxBR1MgPSBATElCRFZfQ0ZMQUdTQAotTElCRFZfTElCUyA9IEBMSUJEVl9MSUJTQAotTElCSUNPTlYgPSBATElCSUNPTlZACi1MSUJJRUM2MTg4M19DRkxBR1MgPSBATElCSUVDNjE4ODNfQ0ZMQUdTQAotTElCSUVDNjE4ODNfTElCUyA9IEBMSUJJRUM2MTg4M19MSUJTQAotTElCSU5UTCA9IEBMSUJJTlRMQAotTElCTSA9IEBMSUJNQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUE5HX0NGTEFHUyA9IEBMSUJQTkdfQ0ZMQUdTQAotTElCUE5HX0xJQlMgPSBATElCUE5HX0xJQlNACi1MSUJSVCA9IEBMSUJSVEAKLUxJQlMgPSBATElCU0AKLUxJQlRPT0wgPSBATElCVE9PTEAKLUxJQlY0TDJfQ0ZMQUdTID0gQExJQlY0TDJfQ0ZMQUdTQAotTElCVjRMMl9MSUJTID0gQExJQlY0TDJfTElCU0AKLUxJUE8gPSBATElQT0AKLUxOX1MgPSBATE5fU0AKLUxPQ0FMRURJUiA9IEBMT0NBTEVESVJACi1MVExJQklDT05WID0gQExUTElCSUNPTlZACi1MVExJQklOVEwgPSBATFRMSUJJTlRMQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLUxUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NS0RJUl9QID0gQE1LRElSX1BACi1NU0dGTVQgPSBATVNHRk1UQAotTVNHRk1UXzAxNSA9IEBNU0dGTVRfMDE1QAotTVNHTUVSR0UgPSBATVNHTUVSR0VACi1OTSA9IEBOTUAKLU5NRURJVCA9IEBOTUVESVRACi1PQkpDID0gQE9CSkNACi1PQkpDREVQTU9ERSA9IEBPQkpDREVQTU9ERUAKLU9CSkNGTEFHUyA9IEBPQkpDRkxBR1NACi1PQkpEVU1QID0gQE9CSkRVTVBACi1PQkpFWFQgPSBAT0JKRVhUQAotT1JDQyA9IEBPUkNDQAotT1JDQ19GTEFHUyA9IEBPUkNDX0ZMQUdTQAotT1JDX0NGTEFHUyA9IEBPUkNfQ0ZMQUdTQAotT1JDX0xJQlMgPSBAT1JDX0xJQlNACi1PVE9PTCA9IEBPVE9PTEAKLU9UT09MNjQgPSBAT1RPT0w2NEAKLVBBQ0tBR0UgPSBAUEFDS0FHRUAKLVBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAotUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKLVBBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAotUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKLVBBQ0tBR0VfVVJMID0gQFBBQ0tBR0VfVVJMQAotUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKLVBBQ0tBR0VfVkVSU0lPTl9NQUpPUiA9IEBQQUNLQUdFX1ZFUlNJT05fTUFKT1JACi1QQUNLQUdFX1ZFUlNJT05fTUlDUk8gPSBAUEFDS0FHRV9WRVJTSU9OX01JQ1JPQAotUEFDS0FHRV9WRVJTSU9OX01JTk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NSU5PUkAKLVBBQ0tBR0VfVkVSU0lPTl9OQU5PID0gQFBBQ0tBR0VfVkVSU0lPTl9OQU5PQAotUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0UgPSBAUEFDS0FHRV9WRVJTSU9OX1JFTEVBU0VACi1QQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKLVBLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKLVBMVUdJTkRJUiA9IEBQTFVHSU5ESVJACi1QT1NVQiA9IEBQT1NVQkAKLVBST0ZJTEVfQ0ZMQUdTID0gQFBST0ZJTEVfQ0ZMQUdTQAotUFRIUkVBRF9DQyA9IEBQVEhSRUFEX0NDQAotUFRIUkVBRF9DRkxBR1MgPSBAUFRIUkVBRF9DRkxBR1NACi1QVEhSRUFEX0xJQlMgPSBAUFRIUkVBRF9MSUJTQAotUFVMU0VfQ0ZMQUdTID0gQFBVTFNFX0NGTEFHU0AKLVBVTFNFX0xJQlMgPSBAUFVMU0VfTElCU0AKLVBZVEhPTiA9IEBQWVRIT05ACi1QWVRIT05fRVhFQ19QUkVGSVggPSBAUFlUSE9OX0VYRUNfUFJFRklYQAotUFlUSE9OX1BMQVRGT1JNID0gQFBZVEhPTl9QTEFURk9STUAKLVBZVEhPTl9QUkVGSVggPSBAUFlUSE9OX1BSRUZJWEAKLVBZVEhPTl9WRVJTSU9OID0gQFBZVEhPTl9WRVJTSU9OQAotUkFOTElCID0gQFJBTkxJQkAKLVJBVzEzOTRfQ0ZMQUdTID0gQFJBVzEzOTRfQ0ZMQUdTQAotUkFXMTM5NF9MSUJTID0gQFJBVzEzOTRfTElCU0AKLVNFRCA9IEBTRURACi1TRVRfTUFLRSA9IEBTRVRfTUFLRUAKLVNIRUxMID0gQFNIRUxMQAotU0hPVVQyX0NGTEFHUyA9IEBTSE9VVDJfQ0ZMQUdTQAotU0hPVVQyX0xJQlMgPSBAU0hPVVQyX0xJQlNACi1TT1VQX0NGTEFHUyA9IEBTT1VQX0NGTEFHU0AKLVNPVVBfTElCUyA9IEBTT1VQX0xJQlNACi1TUEVFWF9DRkxBR1MgPSBAU1BFRVhfQ0ZMQUdTQAotU1BFRVhfTElCUyA9IEBTUEVFWF9MSUJTQAotU1RSSVAgPSBAU1RSSVBACi1UQUdMSUJfQ0ZMQUdTID0gQFRBR0xJQl9DRkxBR1NACi1UQUdMSUJfQ1hYRkxBR1MgPSBAVEFHTElCX0NYWEZMQUdTQAotVEFHTElCX0xJQlMgPSBAVEFHTElCX0xJQlNACi1VU0VfTkxTID0gQFVTRV9OTFNACi1WQUxHUklORF9DRkxBR1MgPSBAVkFMR1JJTkRfQ0ZMQUdTQAotVkFMR1JJTkRfTElCUyA9IEBWQUxHUklORF9MSUJTQAotVkFMR1JJTkRfUEFUSCA9IEBWQUxHUklORF9QQVRIQAotVkVSU0lPTiA9IEBWRVJTSU9OQAotVlBYXzEzMF9DRkxBR1MgPSBAVlBYXzEzMF9DRkxBR1NACi1WUFhfMTMwX0xJQlMgPSBAVlBYXzEzMF9MSUJTQAotVlBYXzE0MF9DRkxBR1MgPSBAVlBYXzE0MF9DRkxBR1NACi1WUFhfMTQwX0xJQlMgPSBAVlBYXzE0MF9MSUJTQAotVlBYX0NGTEFHUyA9IEBWUFhfQ0ZMQUdTQAotVlBYX0xJQlMgPSBAVlBYX0xJQlNACi1XQVJOSU5HX0NGTEFHUyA9IEBXQVJOSU5HX0NGTEFHU0AKLVdBUk5JTkdfQ1hYRkxBR1MgPSBAV0FSTklOR19DWFhGTEFHU0AKLVdBUk5JTkdfT0JKQ0ZMQUdTID0gQFdBUk5JTkdfT0JKQ0ZMQUdTQAotV0FWUEFDS19DRkxBR1MgPSBAV0FWUEFDS19DRkxBR1NACi1XQVZQQUNLX0xJQlMgPSBAV0FWUEFDS19MSUJTQAotWERBTUFHRV9DRkxBR1MgPSBAWERBTUFHRV9DRkxBR1NACi1YREFNQUdFX0xJQlMgPSBAWERBTUFHRV9MSUJTQAotWEVYVF9DRkxBR1MgPSBAWEVYVF9DRkxBR1NACi1YRVhUX0xJQlMgPSBAWEVYVF9MSUJTQAotWEZJWEVTX0NGTEFHUyA9IEBYRklYRVNfQ0ZMQUdTQAotWEZJWEVTX0xJQlMgPSBAWEZJWEVTX0xJQlNACi1YR0VUVEVYVCA9IEBYR0VUVEVYVEAKLVhHRVRURVhUXzAxNSA9IEBYR0VUVEVYVF8wMTVACi1YR0VUVEVYVF9FWFRSQV9PUFRJT05TID0gQFhHRVRURVhUX0VYVFJBX09QVElPTlNACi1YU0hNX0NGTEFHUyA9IEBYU0hNX0NGTEFHU0AKLVhTSE1fTElCUyA9IEBYU0hNX0xJQlNACi1YX0NGTEFHUyA9IEBYX0NGTEFHU0AKLVhfTElCUyA9IEBYX0xJQlNACi1aTElCX0xJQlMgPSBAWkxJQl9MSUJTQAotYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKLWFic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKLWFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKLWFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAotYWNfY3RfQVIgPSBAYWNfY3RfQVJACi1hY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hY19jdF9PQkpDID0gQGFjX2N0X09CSkNACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWF4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAotYmluZGlyID0gQGJpbmRpckAKLWJ1aWxkID0gQGJ1aWxkQAotYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACi1idWlsZF9jcHUgPSBAYnVpbGRfY3B1QAotYnVpbGRfb3MgPSBAYnVpbGRfb3NACi1idWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAotYnVpbGRkaXIgPSBAYnVpbGRkaXJACi1kYXRhZGlyID0gQGRhdGFkaXJACi1kYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKLWRvY2RpciA9IEBkb2NkaXJACi1kdmlkaXIgPSBAZHZpZGlyQAotZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACi1ob3N0ID0gQGhvc3RACi1ob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACi1ob3N0X2NwdSA9IEBob3N0X2NwdUAKLWhvc3Rfb3MgPSBAaG9zdF9vc0AKLWhvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAotaHRtbGRpciA9IEBodG1sZGlyQAotaW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAotaW5mb2RpciA9IEBpbmZvZGlyQAotaW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAotbGliZGlyID0gQGxpYmRpckAKLWxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKLWxvY2FsZWRpciA9IEBsb2NhbGVkaXJACi1sb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACi1tYW5kaXIgPSBAbWFuZGlyQAotbWtkaXJfcCA9IEBta2Rpcl9wQAotb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAotcGRmZGlyID0gQHBkZmRpckAKLXBrZ3B5ZXhlY2RpciA9IEBwa2dweWV4ZWNkaXJACi1wa2dweXRob25kaXIgPSBAcGtncHl0aG9uZGlyQAotcGx1Z2luZGlyID0gQHBsdWdpbmRpckAKLXByZWZpeCA9IEBwcmVmaXhACi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACi1wc2RpciA9IEBwc2RpckAKLXB5ZXhlY2RpciA9IEBweWV4ZWNkaXJACi1weXRob25kaXIgPSBAcHl0aG9uZGlyQAotcnVuc3RhdGVkaXIgPSBAcnVuc3RhdGVkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotRVhUUkFfRElTVCA9IFwKLQlhdWRpb3Rlc3RzcmMuZmxhYyBcCi0JYXVkaW90ZXN0c3JjLndhdiBcCi0JZ3JhZGllbnQuajJrIFwKLQlpZDMtNDA3MzQ5LTEudGFnIFwKLQlpZDMtNDA3MzQ5LTIudGFnIFwKLQlpZDMtNDQ3MDAwLXdjb3AudGFnIFwKLQlpZDMtNTc3NDY4LXVuc3luY2VkLXRhZy50YWcgXAotCWlkMy01ODgxNDgtdW5zeW5jZWQtdjI0LnRhZyBcCi0JaW1hZ2UuanBnIFwKLQlwY20xNnNpbmUuZmx2IFwKLQlwaW5rbm9pc2Utdm9yYmlzLm1rdiBcCi0JdGVzdC1jZXJ0LnBlbSBcCi0JdGVzdC1rZXkucGVtIFwKLQlzcGxpdHZpZGVvMDAub2dnIHNwbGl0dmlkZW8wMS5vZ2cgXAotCXNwbGl0dmlkZW8wMi5vZ2cKLQotYWxsOiBhbGwtYW0KLQotLlNVRkZJWEVTOgotJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JQGZvciBkZXAgaW4gJD87IGRvIFwKLQkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAotCSAgICAqJCRkZXAqKSBcCi0JICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCi0JICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZmlsZXMvTWFrZWZpbGUnOyBcCi0JJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1nbnUgdGVzdHMvZmlsZXMvTWFrZWZpbGUKLU1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKLQlAY2FzZSAnJD8nIGluIFwKLQkgICpjb25maWcuc3RhdHVzKikgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCi0JICAqKSBcCi0JICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLQotJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCi0JY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCi0kKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLW1vc3RseWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mICoubG8KLQotY2xlYW4tbGlidG9vbDoKLQktcm0gLXJmIC5saWJzIF9saWJzCi10YWdzIFRBR1M6Ci0KLWN0YWdzIENUQUdTOgotCi1jc2NvcGUgY3Njb3BlbGlzdDoKLQotCi1kaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCi0JdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKLQkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCi0JICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAotCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKLQljYXNlICQkZGlzdF9maWxlcyBpbiBcCi0JICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCi0JCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCi0JCQkgICBzb3J0IC11YCA7OyBcCi0JZXNhYzsgXAotCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAotCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKLQkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKLQkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCi0JICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAotCSAgICBmaTsgXAotCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCi0JICBlbHNlIFwKLQkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKLQkgICAgfHwgZXhpdCAxOyBcCi0JICBmaTsgXAotCWRvbmUKLWNoZWNrLWFtOiBhbGwtYW0KLWNoZWNrOiBjaGVjay1hbQotYWxsLWFtOiBNYWtlZmlsZQotaW5zdGFsbGRpcnM6Ci1pbnN0YWxsOiBpbnN0YWxsLWFtCi1pbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQotaW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KLXVuaW5zdGFsbDogdW5pbnN0YWxsLWFtCi0KLWluc3RhbGwtYW06IGFsbC1hbQotCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCi0KLWluc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCi1pbnN0YWxsLXN0cmlwOgotCWlmIHRlc3QgLXogJyQoU1RSSVApJzsgdGhlbiBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgICBpbnN0YWxsOyBcCi0JZWxzZSBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKLQkgICAgIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciIGluc3RhbGw7IFwKLQlmaQotbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKLQotY2xlYW4tZ2VuZXJpYzoKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKLQotZHZpOiBkdmktYW0KLQotZHZpLWFtOgotCi1odG1sOiBodG1sLWFtCi0KLWh0bWwtYW06Ci0KLWluZm86IGluZm8tYW0KLQotaW5mby1hbToKLQotaW5zdGFsbC1kYXRhLWFtOgotCi1pbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KLQotaW5zdGFsbC1kdmktYW06Ci0KLWluc3RhbGwtZXhlYy1hbToKLQotaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KLQotaW5zdGFsbC1odG1sLWFtOgotCi1pbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQotCi1pbnN0YWxsLWluZm8tYW06Ci0KLWluc3RhbGwtbWFuOgotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mIE1ha2VmaWxlCi1tYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCi0KLW1vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQotCi1tb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCi0KLXBkZjogcGRmLWFtCi0KLXBkZi1hbToKLQotcHM6IHBzLWFtCi0KLXBzLWFtOgotCi11bmluc3RhbGwtYW06Ci0KLS5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCi0JY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0KLQotLlBSRUNJT1VTOiBNYWtlZmlsZQotCi0KLSMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCi0jIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KLS5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL2F1ZGlvdGVzdHNyYy5mbGFjIGIvdGVzdHMvZmlsZXMvYXVkaW90ZXN0c3JjLmZsYWMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMTJjM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvYXVkaW90ZXN0c3JjLmZsYWMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9maWxlcy9hdWRpb3Rlc3RzcmMud2F2IGIvdGVzdHMvZmlsZXMvYXVkaW90ZXN0c3JjLndhdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3ZjAyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9maWxlcy9hdWRpb3Rlc3RzcmMud2F2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsZXMvZ3JhZGllbnQuajJrIGIvdGVzdHMvZmlsZXMvZ3JhZGllbnQuajJrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDJjOTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ZpbGVzL2dyYWRpZW50LmoyaworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL2lkMy00MDczNDktMS50YWcgYi90ZXN0cy9maWxlcy9pZDMtNDA3MzQ5LTEudGFnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWNkNGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ZpbGVzL2lkMy00MDczNDktMS50YWcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9maWxlcy9pZDMtNDA3MzQ5LTIudGFnIGIvdGVzdHMvZmlsZXMvaWQzLTQwNzM0OS0yLnRhZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2YTQyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9maWxlcy9pZDMtNDA3MzQ5LTIudGFnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsZXMvaWQzLTQ0NzAwMC13Y29wLnRhZyBiL3Rlc3RzL2ZpbGVzL2lkMy00NDcwMDAtd2NvcC50YWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MTA5Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvaWQzLTQ0NzAwMC13Y29wLnRhZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL2lkMy01Nzc0NjgtdW5zeW5jZWQtdGFnLnRhZyBiL3Rlc3RzL2ZpbGVzL2lkMy01Nzc0NjgtdW5zeW5jZWQtdGFnLnRhZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4ODBlOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9maWxlcy9pZDMtNTc3NDY4LXVuc3luY2VkLXRhZy50YWcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9maWxlcy9pZDMtNTg4MTQ4LXVuc3luY2VkLXYyNC50YWcgYi90ZXN0cy9maWxlcy9pZDMtNTg4MTQ4LXVuc3luY2VkLXYyNC50YWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OWQ5MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvaWQzLTU4ODE0OC11bnN5bmNlZC12MjQudGFnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsZXMvaW1hZ2UuanBnIGIvdGVzdHMvZmlsZXMvaW1hZ2UuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTJmZDc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ZpbGVzL2ltYWdlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL3BjbTE2c2luZS5mbHYgYi90ZXN0cy9maWxlcy9wY20xNnNpbmUuZmx2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTI1YTJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ZpbGVzL3BjbTE2c2luZS5mbHYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9maWxlcy9waW5rbm9pc2Utdm9yYmlzLm1rdiBiL3Rlc3RzL2ZpbGVzL3Bpbmtub2lzZS12b3JiaXMubWt2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODMwMDZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ZpbGVzL3Bpbmtub2lzZS12b3JiaXMubWt2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsZXMvc3BsaXR2aWRlbzAwLm9nZyBiL3Rlc3RzL2ZpbGVzL3NwbGl0dmlkZW8wMC5vZ2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZWZiN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvc3BsaXR2aWRlbzAwLm9nZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbGVzL3NwbGl0dmlkZW8wMS5vZ2cgYi90ZXN0cy9maWxlcy9zcGxpdHZpZGVvMDEub2dnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDFmNTM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ZpbGVzL3NwbGl0dmlkZW8wMS5vZ2cKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9maWxlcy9zcGxpdHZpZGVvMDIub2dnIGIvdGVzdHMvZmlsZXMvc3BsaXR2aWRlbzAyLm9nZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEyMzVkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9maWxlcy9zcGxpdHZpZGVvMDIub2dnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsZXMvdGVzdC1jZXJ0LnBlbSBiL3Rlc3RzL2ZpbGVzL3Rlc3QtY2VydC5wZW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMjA2MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvdGVzdC1jZXJ0LnBlbQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJQ3BEQ0NBWXdDQ1FDOFN1YzhoamZndWpBTkJna3Foa2lHOXcwQkFRVUZBREFVTVJJd0VBWURWUVFEREFreAotTWpjdU1DNHdMakV3SGhjTk1URXdPVEU1TVRreU1qQTFXaGNOTWpFd09URTJNVGt5TWpBMVdqQVVNUkl3RUFZRAotVlFRRERBa3hNamN1TUM0d0xqRXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDcgotT0g3a2JsdSs1emtZVGsvWkcyMU9nYkl5bHR4aExESFBtVXBsNHlEVUZxWDVCRXRvVmZnME1zNFp1YW9lRGk0dAotYjJMVjZFbTNVRFF3bXdQTW0yU2FrZkp2UmQzbmZMNkczVWtrQnNWcVQzVjA0TTl1OGZrNllnSFBUOFBOMUxqNwotNWJ2OUFNUnlRUlYxUUlQb25kTWhidDhKaGxtQ1I2QUxieFl0c1hrYlFGN3F6Ymo3WTJjanZvSHpQUVNrMFFwQgotckVVcGo2U2NobTFOa1BlbjQ4WjFYMWZhR0wwRjNyb0ZIRXNmNlUxQWpQNUE0QS9VR1FzUnRxMzVWelZuS2d4VwotTjdqdW1VZXZFTUl2eXFMam12Szg2NEFITUlSVkNPbHM5R2NJdGE4MGJWaXVWcWd0dUdnVkdNLzdTb1pmSXZQRgotQTEwakllN0tRb1hXQXdSaTRXY2xBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKZmloWTYzNGRScgotRGVFQTRTUTFlMC9rQjZFRjhvZWFDKzVFdUdPSnh0b1greVhKZldKc0V0bWpSd29ieU9CVlY5OTdoZE90ZFpqbwotbWRKT0NLZXJPRktjY085UExOSlorL2w0K05IdjlPd09jdTRVcXZyU3Nwcy9wbXIvMjJTSXlRc3diTExKZlBBVAotS2pHVERMbGovL3pyTHh6VUdzdTdsZ0dzWTRzNGZWYmZ0Rlp2N1A1QXlFcnB3aUZrOHFNMUJQME5Na240WFdTQQotdVN5VGVCNk8rdFdZZGgzYkExQmVLQzJQODVzbDZ4RkpJMmd4dk5UeHRkY2c5YmVEcU51RWhlSittRXREM1A0dwotSERHMXZGYUFYME1IMVJKU0RPL2RJb0plck42TFRqaVRZWVlnOHlWMGxtQnhpanYyNVovM0dpMzNPdUc5amtkUgotdlhEd0pwQysva289Ci0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9maWxlcy90ZXN0LWtleS5wZW0gYi90ZXN0cy9maWxlcy90ZXN0LWtleS5wZW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YmJjYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvZmlsZXMvdGVzdC1rZXkucGVtCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJRW93SUJBQUtDQVFFQXF6aCs1RzVidnVjNUdFNVAyUnR0VG9HeU1wYmNZU3d4ejVsS1plTWcxQmFsK1FSTAotYUZYNE5ETE9HYm1xSGc0dUxXOWkxZWhKdDFBME1Kc0R6SnRrbXBIeWIwWGQ1M3kraHQxSkpBYkZhazkxZE9EUAotYnZINU9tSUJ6MC9EemRTNCsrVzcvUURFY2tFVmRVQ0Q2SjNUSVc3ZkNZWlpna2VnQzI4V0xiRjVHMEJlNnMyNAotKzJObkk3NkI4ejBFcE5FS1FheEZLWStrbkladFRaRDNwK1BHZFY5WDJoaTlCZDY2QlJ4TEgrbE5RSXorUU9BUAotMUJrTEViYXQrVmMxWnlvTVZqZTQ3cGxIcnhEQ0w4cWk0NXJ5dk91QUJ6Q0VWUWpwYlBSbkNMV3ZORzFZcmxhbwotTGJob0ZSalArMHFHWHlMenhRTmRJeUh1eWtLRjFnTUVZdUZuSlFJREFRQUJBb0lCQUJoK01YQzk5TFBmWWNSLwotVjE3SVZKK1pZQU5xbjBYclM0alY5ZFdUWXh2VHpaUk1yL2pSNjNxVUZmV0tJTExCOW9zYlZ2a2dqSU1EbnlPZwotMlM5SXYyQjVKa1FTcTRhMHlwQ0NVVGN0SE1wemFXcjV5ZEttSEsva1d6dnJ2aWZRbVZHM2NHZmwxelE4NlRQbgotc2JieDlNVGdsbGxIZGNCMFBJbkdMMWNEL3o0TmdFYlJyMUI2YUJjcTBBSHFKSklJSHZRTlBtSDZIR0FTZzQ4agotaFZBWjJzWWpwOURTSzk3SEtTQUJwQkNzUk44WHJNZ1lPQXN1NWExcnRYaGp0TVVabzZMcEV3RXdIOTRyRE9ndgotWnZKTEdycFN2S0tXUEdjeUFOeUsxYTVuek84SU5jWFkrWDU0YThWQjFZQWp5bXpEeS9XTTFPWC9qQmZaZW01MwotSHdDN201VUNnWUVBM2NyY0JJOWYzYURnQ1lFVURXWjhoVFFVVmh2TjNwaThRV3I3UXViTUptSXl4QmozOTR3bQotaFRvOHdvWXhOcXk5VmtPMFgranhIQTByek4xS3ZTOWoyQ0F6Sit0WU5oRXNSYzZvbmpFWEtHTGhPLzFnSGJrVAotclJ4MkoxdUEySFFUYlpOR2h3czlRZGwzQTdzeXc2ZkZ3OVQvNXJvb1diaXY1U0RxU0NSRnpsY0NnWUVBeGFEagotSll5TExsK0pic2x0a3Y3MXRoNVR2TGkxNHE2S2xaSkdFVWVTc3ltVXg5ZXZCUzdzL2g2MkJvZTkvN1k2M1prbAotZFIzSXZ4WDdITnFXL2ZHanVRcjlqUXZNTWR1aWw4TDIxOGxDaHVSLzRIRXNYclN2eXc4TUlNbER0alRXYWpCNgotYzhlaVUrei81enJsaHpvb0trMkxhUUhUVXJyYnhrOXJOMHJhRU9NQ2dZRUEyS2x6MXd5TVZMLzBPN1NaZHlHMwotNEpQb2pkbXBlWnJ3eEdNU3d0OGRiUjJlaEF2MEtDSUQrei9SM1NFajhFbzh4NGxxS2dzdmhmeWozZ1FMSDlhcwotalpPZkJZOFU0L1JRc0h6YUlYYkpMWTJ5ZzF6WVNSRGtWTWFwOFhhazNrNCtNRnVmbVFwMHMrQVJNRmJ0bDA1TQotbGlwOE5kT0MyV3JlZ1ZGdkxEd3E2UThDZ1lCeTNneW9xb1BMTkdSaExGcXY4ZGxIUFdGV2M5WGtKNmNOUUxQUgotSDFTNUpoWUFBZkVNaGpYaGptQW1jNGVQdFkrSmRaWTcrRS9TSVNpUG9NM2FWRFRoUE80YXFSektiZXFYWXc2dQotWmFCeFh5YWtnYU5VZUprazRWNGZRRnhHNzNjZ3lZU2kvd251MWZYM3BGZjh2V1RURWJkU0ZXbUswR2tsWHN2bQotbTI4Y0dRS0JnR3ZHLy9XOE5HZlhXTC9rb215S1h3OEdKNDFJcDBzYTIwS05rTlp3QWFBMUJWVGFISVlUK3J4bwotU2dWUVBIbXpQOEo5cDRVMGQ5bFE1QlcwTFdFUlZrRkhPZzhrMGV2RHNTbTNGVmJlUkNCamxLcVZVT0xvbzRIawotQStmU1lXV1dsMWo5RTl1cnBpVC9kNEFRWTFiRlV4Y1VlYkRTSzlYVDZaUE91c3lYMGZTZQotLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL2ljbGVzL01ha2VmaWxlLmFtIGIvdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZmU4NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvaWNsZXMvTWFrZWZpbGUuYW0KKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1pZiBIQVZFX0dUSwotR1RLX1RFU1RTID0gZ2RrcGl4YnVmc2luay10ZXN0IGdka3BpeGJ1Zm92ZXJsYXktdGVzdAotCi1nZGtwaXhidWZzaW5rX3Rlc3RfU09VUkNFUyA9IGdka3BpeGJ1ZnNpbmstdGVzdC5jCi1nZGtwaXhidWZzaW5rX3Rlc3RfQ0ZMQUdTICA9ICQoR1NUX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQotZ2RrcGl4YnVmc2lua190ZXN0X0xEQUREICAgPSAkKEdTVF9MSUJTKSAkKEdUS19MSUJTKQotCi1nZGtwaXhidWZvdmVybGF5X3Rlc3RfU09VUkNFUyA9IGdka3BpeGJ1Zm92ZXJsYXktdGVzdC5jCi1nZGtwaXhidWZvdmVybGF5X3Rlc3RfQ0ZMQUdTICA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgXAotCSQoR0RLX1BJWEJVRl9DRkxBR1MpICQoR0lPX0NGTEFHUykKLWdka3BpeGJ1Zm92ZXJsYXlfdGVzdF9MREFERCAgID0gJChHU1RfTElCUykgJChHREtfUElYQlVGX0xJQlMpICQoR0lPX0xJQlMpIFwKLQkkKExJQk0pCi1lbHNlCi1HVEtfVEVTVFMgPQotZW5kaWYKLQotVjRMMl9URVNUUyA9IHY0bDJzcmMtdGVzdAotCi12NGwyc3JjX3Rlc3RfU09VUkNFUyA9IHY0bDJzcmMtdGVzdC5jCi12NGwyc3JjX3Rlc3RfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotdjRsMnNyY190ZXN0X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpIFwKLQkJICAgICAtbGdzdHZpZGVvLSQoR1NUX0FQSV9WRVJTSU9OKQotCi1pZiBVU0VfT1NTNAotT1NTNF9URVNUUz10ZXN0LW9zczQKLQotdGVzdF9vc3M0X1NPVVJDRVMgPSB0ZXN0LW9zczQuYwotdGVzdF9vc3M0X0NGTEFHUyAgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi10ZXN0X29zczRfTERBREQgICA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAkKEdTVF9MSUJTKQotdGVzdF9vc3M0X0xERkxBR1MgPSAkKEdTVF9QTFVHSU5fTERGTEFHUykKLWVsc2UKLU9TUzRfVEVTVFM9Ci1lbmRpZgotCi1pZiBVU0VfWAotWF9URVNUUyA9IHhpbWFnZXNyYy10ZXN0Ci0KLXhpbWFnZXNyY190ZXN0X1NPVVJDRVMgPSB4aW1hZ2VzcmMtdGVzdC5jCi14aW1hZ2VzcmNfdGVzdF9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpCi14aW1hZ2VzcmNfdGVzdF9MREFERCA9ICQoR1NUX0xJQlMpCi1lbHNlCi1YX1RFU1RTID0KLWVuZGlmCi0KLWVxdWFsaXplcl90ZXN0X1NPVVJDRVMgPSBlcXVhbGl6ZXItdGVzdC5jCi1lcXVhbGl6ZXJfdGVzdF9DRkxBR1MgID0gJChHU1RfQ0ZMQUdTKQotZXF1YWxpemVyX3Rlc3RfTERBREQgICA9ICQoR1NUX0xJQlMpCi0KLXRlc3RfYWNjdXJhdGVfc2Vla19TT1VSQ0VTID0gdGVzdC1hY2N1cmF0ZS1zZWVrLmMKLXRlc3RfYWNjdXJhdGVfc2Vla19DRkxBR1MgID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi10ZXN0X2FjY3VyYXRlX3NlZWtfTERBREQgICA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGFwcC0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLQotdGVzdF9zZWdtZW50X3NlZWtzX1NPVVJDRVMgPSB0ZXN0LXNlZ21lbnQtc2Vla3MuYwotdGVzdF9zZWdtZW50X3NlZWtzX0NGTEFHUyAgPSAkKEdTVF9DRkxBR1MpCi10ZXN0X3NlZ21lbnRfc2Vla3NfTERBREQgICA9ICQoR1NUX0xJQlMpCi0KLXZpZGVvY3JvcF90ZXN0X1NPVVJDRVMgPSB2aWRlb2Nyb3AtdGVzdC5jCi12aWRlb2Nyb3BfdGVzdF9DRkxBR1MgID0gJChHU1RfQ0ZMQUdTKQotdmlkZW9jcm9wX3Rlc3RfTERBREQgICA9ICQoR1NUX0xJQlMpCi0KLXZpZGVvYm94X3Rlc3RfU09VUkNFUyA9IHZpZGVvYm94LXRlc3QuYwotdmlkZW9ib3hfdGVzdF9DRkxBR1MgID0gJChHU1RfQ0ZMQUdTKQotdmlkZW9ib3hfdGVzdF9MREFERCAgID0gJChHU1RfTElCUykKLQotdmlkZW9jcm9wMl90ZXN0X1NPVVJDRVMgPSB2aWRlb2Nyb3AyLXRlc3QuYwotdmlkZW9jcm9wMl90ZXN0X0NGTEFHUyAgPSAkKEdTVF9DRkxBR1MpCi12aWRlb2Nyb3AyX3Rlc3RfTERBREQgICA9ICQoR1NUX0xJQlMpCi0KLW5vaW5zdF9QUk9HUkFNUyA9ICQoR1RLX1RFU1RTKSAkKE9TUzRfVEVTVFMpICQoVjRMMl9URVNUUykgJChYX1RFU1RTKSBcCi0JZXF1YWxpemVyLXRlc3QgXAotCXRlc3QtYWNjdXJhdGUtc2VlayBcCi0JdGVzdC1zZWdtZW50LXNlZWtzIFwKLQl2aWRlb2Nyb3AtdGVzdCBcCi0JdmlkZW9ib3gtdGVzdCBcCi0JdmlkZW9jcm9wMi10ZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy9NYWtlZmlsZS5pbiBiL3Rlc3RzL2ljbGVzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmY4OGNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ljbGVzL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTE5MCArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLUBTRVRfTUFLRUAKLQotVlBBVEggPSBAc3JjZGlyQAotYW1fX2lzX2dudV9tYWtlID0geyBcCi0gIGlmIHRlc3QgLXogJyQoTUFLRUxFVkVMKSc7IHRoZW4gXAotICAgIGZhbHNlOyBcCi0gIGVsaWYgdGVzdCAtbiAnJChNQUtFX0hPU1QpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbGlmIHRlc3QgLW4gJyQoTUFLRV9WRVJTSU9OKScgJiYgdGVzdCAtbiAnJChDVVJESVIpJzsgdGhlbiBcCi0gICAgdHJ1ZTsgXAotICBlbHNlIFwKLSAgICBmYWxzZTsgXAotICBmaTsgXAotfQotYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKLSAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAotICAgICAgPykgOzsgXAotICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKLSAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKLSAgICAgICAgIGV4aXQgMTs7IFwKLSAgZXNhYzsgXAotICBoYXNfb3B0PW5vOyBcCi0gIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCi0gIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCi0gICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKLSAgZWxzZSBcCi0gICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0gICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGJzPVxcOyBcCi0gICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAotICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAotICAgIGVzYWM7IFwKLSAgZmk7IFwKLSAgc2tpcF9uZXh0PW5vOyBcCi0gIHN0cmlwX3RyYWlsb3B0ICgpIFwKLSAgeyBcCi0gICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKLSAgfTsgXAotICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKLSAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCi0gICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKLSAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCi0gICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAotICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKLSAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCi0gICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAotICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCi0gICAgZXNhYzsgXAotICAgIGNhc2UgJCRmbGcgaW4gXAotICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKLSAgICBlc2FjOyBcCi0gIGRvbmU7IFwKLSAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKLWFtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCi1hbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQotcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKLXBrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAotYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAotaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKLWluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKLWluc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYwotSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKLXRyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKLU5PUk1BTF9JTlNUQUxMID0gOgotUFJFX0lOU1RBTEwgPSA6Ci1QT1NUX0lOU1RBTEwgPSA6Ci1OT1JNQUxfVU5JTlNUQUxMID0gOgotUFJFX1VOSU5TVEFMTCA9IDoKLVBPU1RfVU5JTlNUQUxMID0gOgotYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKLWhvc3RfdHJpcGxldCA9IEBob3N0QAotdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAotbm9pbnN0X1BST0dSQU1TID0gJChhbV9fRVhFRVhUXzEpICQoYW1fX0VYRUVYVF8yKSAkKGFtX19FWEVFWFRfMykgXAotCSQoYW1fX0VYRUVYVF80KSBlcXVhbGl6ZXItdGVzdCQoRVhFRVhUKSBcCi0JdGVzdC1hY2N1cmF0ZS1zZWVrJChFWEVFWFQpIHRlc3Qtc2VnbWVudC1zZWVrcyQoRVhFRVhUKSBcCi0JdmlkZW9jcm9wLXRlc3QkKEVYRUVYVCkgdmlkZW9ib3gtdGVzdCQoRVhFRVhUKSBcCi0JdmlkZW9jcm9wMi10ZXN0JChFWEVFWFQpCi1zdWJkaXIgPSB0ZXN0cy9pY2xlcwotQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAotYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWFjLWV4cGFuZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXMtYXV0by1hbHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWNvbXBpbGVyLWZsYWcubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWdjYy1pbmxpbmUtYXNzZW1ibHkubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLWxpYnRvb2wubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2FzLXZlcnNpb24ubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2F4X2NyZWF0ZV9zdGRpbnRfaC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvYXhfcHRocmVhZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWFyY2gubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1hcmdzLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtY2hlY2subTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1kZWZhdWx0Lm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZG93aGlsZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWVycm9yLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtZmVhdHVyZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LWdldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1nbGliMi5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBhY2thZ2UtcmVsZWFzZS1kYXRldGltZS5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3N0LXBsYXRmb3JtLm00IFwKLQkkKHRvcF9zcmNkaXIpL2NvbW1vbi9tNC9nc3QtcGx1Z2luLWRvY3MubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC1wbHVnaW5kaXIubTQgXAotCSQodG9wX3NyY2RpcikvY29tbW9uL200L2dzdC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvZ3RrLWRvYy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9jb21tb24vbTQvb3JjLm00ICQodG9wX3NyY2RpcikvY29tbW9uL200L3BrZy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9hYWxpYi5tNCAkKHRvcF9zcmNkaXIpL200L2dldHRleHQubTQgXAotCSQodG9wX3NyY2RpcikvbTQvZ3N0LWZpb25yZWFkLm00ICQodG9wX3NyY2RpcikvbTQvaWNvbnYubTQgXAotCSQodG9wX3NyY2RpcikvbTQvaW50bG1hY29zeC5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1sZC5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9saWItbGluay5tNCAkKHRvcF9zcmNkaXIpL200L2xpYi1wcmVmaXgubTQgXAotCSQodG9wX3NyY2RpcikvbTQvbGlidG9vbC5tNCAkKHRvcF9zcmNkaXIpL200L2x0b3B0aW9ucy5tNCBcCi0JJCh0b3Bfc3JjZGlyKS9tNC9sdHN1Z2FyLm00ICQodG9wX3NyY2RpcikvbTQvbHR2ZXJzaW9uLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L2x0fm9ic29sZXRlLm00ICQodG9wX3NyY2RpcikvbTQvbmxzLm00IFwKLQkkKHRvcF9zcmNkaXIpL200L3BvLm00ICQodG9wX3NyY2RpcikvbTQvcHJvZ3Rlc3QubTQgXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCi1hbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAotCSQoQUNMT0NBTF9NNCkKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoYW1fX0RJU1RfQ09NTU9OKQotbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKLUNPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKLUNPTkZJR19DTEVBTl9GSUxFUyA9Ci1DT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQotQEhBVkVfR1RLX1RSVUVAYW1fX0VYRUVYVF8xID0gZ2RrcGl4YnVmc2luay10ZXN0JChFWEVFWFQpIFwKLUBIQVZFX0dUS19UUlVFQAlnZGtwaXhidWZvdmVybGF5LXRlc3QkKEVYRUVYVCkKLUBVU0VfT1NTNF9UUlVFQGFtX19FWEVFWFRfMiA9IHRlc3Qtb3NzNCQoRVhFRVhUKQotYW1fX0VYRUVYVF8zID0gdjRsMnNyYy10ZXN0JChFWEVFWFQpCi1AVVNFX1hfVFJVRUBhbV9fRVhFRVhUXzQgPSB4aW1hZ2VzcmMtdGVzdCQoRVhFRVhUKQotUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKLWFtX2VxdWFsaXplcl90ZXN0X09CSkVDVFMgPSBlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC4kKE9CSkVYVCkKLWVxdWFsaXplcl90ZXN0X09CSkVDVFMgPSAkKGFtX2VxdWFsaXplcl90ZXN0X09CSkVDVFMpCi1hbV9fREVQRU5ERU5DSUVTXzEgPQotZXF1YWxpemVyX3Rlc3RfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi1BTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCi1hbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQotYW1fX3ZfbHRfMCA9IC0tc2lsZW50Ci1hbV9fdl9sdF8xID0gCi1lcXVhbGl6ZXJfdGVzdF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKLQkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAotCSQoZXF1YWxpemVyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vIFwKLQkkQAotYW1fX2dka3BpeGJ1Zm92ZXJsYXlfdGVzdF9TT1VSQ0VTX0RJU1QgPSBnZGtwaXhidWZvdmVybGF5LXRlc3QuYwotQEhBVkVfR1RLX1RSVUVAYW1fZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X09CSkVDVFMgPSBnZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LiQoT0JKRVhUKQotZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X09CSkVDVFMgPSAkKGFtX2dka3BpeGJ1Zm92ZXJsYXlfdGVzdF9PQkpFQ1RTKQotQEhBVkVfR1RLX1RSVUVAZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X0RFUEVOREVOQ0lFUyA9ICBcCi1ASEFWRV9HVEtfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKSBcCi1ASEFWRV9HVEtfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChnZGtwaXhidWZvdmVybGF5X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotYW1fX2dka3BpeGJ1ZnNpbmtfdGVzdF9TT1VSQ0VTX0RJU1QgPSBnZGtwaXhidWZzaW5rLXRlc3QuYwotQEhBVkVfR1RLX1RSVUVAYW1fZ2RrcGl4YnVmc2lua190ZXN0X09CSkVDVFMgPSBnZGtwaXhidWZzaW5rX3Rlc3QtZ2RrcGl4YnVmc2luay10ZXN0LiQoT0JKRVhUKQotZ2RrcGl4YnVmc2lua190ZXN0X09CSkVDVFMgPSAkKGFtX2dka3BpeGJ1ZnNpbmtfdGVzdF9PQkpFQ1RTKQotQEhBVkVfR1RLX1RSVUVAZ2RrcGl4YnVmc2lua190ZXN0X0RFUEVOREVOQ0lFUyA9ICBcCi1ASEFWRV9HVEtfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpICQoYW1fX0RFUEVOREVOQ0lFU18xKQotZ2RrcGl4YnVmc2lua190ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJChnZGtwaXhidWZzaW5rX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotYW1fdGVzdF9hY2N1cmF0ZV9zZWVrX09CSkVDVFMgPSAgXAotCXRlc3RfYWNjdXJhdGVfc2Vlay10ZXN0LWFjY3VyYXRlLXNlZWsuJChPQkpFWFQpCi10ZXN0X2FjY3VyYXRlX3NlZWtfT0JKRUNUUyA9ICQoYW1fdGVzdF9hY2N1cmF0ZV9zZWVrX09CSkVDVFMpCi10ZXN0X2FjY3VyYXRlX3NlZWtfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLQkkKGFtX19ERVBFTkRFTkNJRVNfMSkgJChhbV9fREVQRU5ERU5DSUVTXzEpCi10ZXN0X2FjY3VyYXRlX3NlZWtfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKHRlc3RfYWNjdXJhdGVfc2Vla19DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpIFwKLQkkKExERkxBR1MpIC1vICRACi1hbV9fdGVzdF9vc3M0X1NPVVJDRVNfRElTVCA9IHRlc3Qtb3NzNC5jCi1AVVNFX09TUzRfVFJVRUBhbV90ZXN0X29zczRfT0JKRUNUUyA9IHRlc3Rfb3NzNC10ZXN0LW9zczQuJChPQkpFWFQpCi10ZXN0X29zczRfT0JKRUNUUyA9ICQoYW1fdGVzdF9vc3M0X09CSkVDVFMpCi1AVVNFX09TUzRfVFJVRUB0ZXN0X29zczRfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpIFwKLUBVU0VfT1NTNF9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKLXRlc3Rfb3NzNF9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJCh0ZXN0X29zczRfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQodGVzdF9vc3M0X0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLWFtX3Rlc3Rfc2VnbWVudF9zZWVrc19PQkpFQ1RTID0gIFwKLQl0ZXN0X3NlZ21lbnRfc2Vla3MtdGVzdC1zZWdtZW50LXNlZWtzLiQoT0JKRVhUKQotdGVzdF9zZWdtZW50X3NlZWtzX09CSkVDVFMgPSAkKGFtX3Rlc3Rfc2VnbWVudF9zZWVrc19PQkpFQ1RTKQotdGVzdF9zZWdtZW50X3NlZWtzX0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotdGVzdF9zZWdtZW50X3NlZWtzX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJCh0ZXN0X3NlZ21lbnRfc2Vla3NfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAotYW1fdjRsMnNyY190ZXN0X09CSkVDVFMgPSB2NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0LiQoT0JKRVhUKQotdjRsMnNyY190ZXN0X09CSkVDVFMgPSAkKGFtX3Y0bDJzcmNfdGVzdF9PQkpFQ1RTKQotdjRsMnNyY190ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotdjRsMnNyY190ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHY0bDJzcmNfdGVzdF9DRkxBR1MpIFwKLQkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1hbV92aWRlb2JveF90ZXN0X09CSkVDVFMgPSB2aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QuJChPQkpFWFQpCi12aWRlb2JveF90ZXN0X09CSkVDVFMgPSAkKGFtX3ZpZGVvYm94X3Rlc3RfT0JKRUNUUykKLXZpZGVvYm94X3Rlc3RfREVQRU5ERU5DSUVTID0gJChhbV9fREVQRU5ERU5DSUVTXzEpCi12aWRlb2JveF90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHZpZGVvYm94X3Rlc3RfQ0ZMQUdTKSBcCi0JJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAotYW1fdmlkZW9jcm9wX3Rlc3RfT0JKRUNUUyA9IHZpZGVvY3JvcF90ZXN0LXZpZGVvY3JvcC10ZXN0LiQoT0JKRVhUKQotdmlkZW9jcm9wX3Rlc3RfT0JKRUNUUyA9ICQoYW1fdmlkZW9jcm9wX3Rlc3RfT0JKRUNUUykKLXZpZGVvY3JvcF90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotdmlkZW9jcm9wX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKHZpZGVvY3JvcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCi0JJEAKLWFtX3ZpZGVvY3JvcDJfdGVzdF9PQkpFQ1RTID0gIFwKLQl2aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0LiQoT0JKRVhUKQotdmlkZW9jcm9wMl90ZXN0X09CSkVDVFMgPSAkKGFtX3ZpZGVvY3JvcDJfdGVzdF9PQkpFQ1RTKQotdmlkZW9jcm9wMl90ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQotdmlkZW9jcm9wMl90ZXN0X0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgXAotCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSBcCi0JJCh2aWRlb2Nyb3AyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIFwKLQktbyAkQAotYW1fX3hpbWFnZXNyY190ZXN0X1NPVVJDRVNfRElTVCA9IHhpbWFnZXNyYy10ZXN0LmMKLUBVU0VfWF9UUlVFQGFtX3hpbWFnZXNyY190ZXN0X09CSkVDVFMgPSAgXAotQFVTRV9YX1RSVUVACXhpbWFnZXNyY190ZXN0LXhpbWFnZXNyYy10ZXN0LiQoT0JKRVhUKQoteGltYWdlc3JjX3Rlc3RfT0JKRUNUUyA9ICQoYW1feGltYWdlc3JjX3Rlc3RfT0JKRUNUUykKLUBVU0VfWF9UUlVFQHhpbWFnZXNyY190ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQoteGltYWdlc3JjX3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCi0JJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKLQkkKHhpbWFnZXNyY190ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCi0JJEAKLUFNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCi1hbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKLWFtX192X1BfMCA9IGZhbHNlCi1hbV9fdl9QXzEgPSA6Ci1BTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKLWFtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKLWFtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOwotYW1fX3ZfR0VOXzEgPSAKLUFNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKLWFtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9hdF8wID0gQAotYW1fX3ZfYXRfMSA9IAotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AgLUkkKHRvcF9idWlsZGRpcikKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKLWFtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOwotYW1fX3ZfQ0NfMSA9IAotQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCi0JJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1BTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7Ci1hbV9fdl9DQ0xEXzEgPSAKLVNPVVJDRVMgPSAkKGVxdWFsaXplcl90ZXN0X1NPVVJDRVMpICQoZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X1NPVVJDRVMpIFwKLQkkKGdka3BpeGJ1ZnNpbmtfdGVzdF9TT1VSQ0VTKSAkKHRlc3RfYWNjdXJhdGVfc2Vla19TT1VSQ0VTKSBcCi0JJCh0ZXN0X29zczRfU09VUkNFUykgJCh0ZXN0X3NlZ21lbnRfc2Vla3NfU09VUkNFUykgXAotCSQodjRsMnNyY190ZXN0X1NPVVJDRVMpICQodmlkZW9ib3hfdGVzdF9TT1VSQ0VTKSBcCi0JJCh2aWRlb2Nyb3BfdGVzdF9TT1VSQ0VTKSAkKHZpZGVvY3JvcDJfdGVzdF9TT1VSQ0VTKSBcCi0JJCh4aW1hZ2VzcmNfdGVzdF9TT1VSQ0VTKQotRElTVF9TT1VSQ0VTID0gJChlcXVhbGl6ZXJfdGVzdF9TT1VSQ0VTKSBcCi0JJChhbV9fZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X1NPVVJDRVNfRElTVCkgXAotCSQoYW1fX2dka3BpeGJ1ZnNpbmtfdGVzdF9TT1VSQ0VTX0RJU1QpIFwKLQkkKHRlc3RfYWNjdXJhdGVfc2Vla19TT1VSQ0VTKSAkKGFtX190ZXN0X29zczRfU09VUkNFU19ESVNUKSBcCi0JJCh0ZXN0X3NlZ21lbnRfc2Vla3NfU09VUkNFUykgJCh2NGwyc3JjX3Rlc3RfU09VUkNFUykgXAotCSQodmlkZW9ib3hfdGVzdF9TT1VSQ0VTKSAkKHZpZGVvY3JvcF90ZXN0X1NPVVJDRVMpIFwKLQkkKHZpZGVvY3JvcDJfdGVzdF9TT1VSQ0VTKSAkKGFtX194aW1hZ2VzcmNfdGVzdF9TT1VSQ0VTX0RJU1QpCi1hbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKLSAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCi0gICAgbnxub3xOTykgZmFsc2U7OyBcCi0gICAgKikgKGluc3RhbGwtaW5mbyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTs7IFwKLSAgZXNhYwotYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKLSMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKLSMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcwotIyAqbm90KiBwcmVzZXJ2ZWQuCi1hbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKLSAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAotICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKLScKLSMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKLSMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcwotIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KLWFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCi0gIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCi0gIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0gICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0gIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCi1FVEFHUyA9IGV0YWdzCi1DVEFHUyA9IGN0YWdzCi1hbV9fRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3Bfc3JjZGlyKS9kZXBjb21wCi1ESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQotQUFMSUJfQ0ZMQUdTID0gQEFBTElCX0NGTEFHU0AKLUFBTElCX0NPTkZJRyA9IEBBQUxJQl9DT05GSUdACi1BQUxJQl9MSUJTID0gQEFBTElCX0xJQlNACi1BQ0xPQ0FMID0gQEFDTE9DQUxACi1BQ0xPQ0FMX0FNRkxBR1MgPSBAQUNMT0NBTF9BTUZMQUdTQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUJaMl9MSUJTID0gQEJaMl9MSUJTQAotQ0FJUk9fQ0ZMQUdTID0gQENBSVJPX0NGTEFHU0AKLUNBSVJPX0xJQlMgPSBAQ0FJUk9fTElCU0AKLUNDID0gQENDQAotQ0NBUyA9IEBDQ0FTQAotQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACi1DQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAotQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKLURFRkFVTFRfQVVESU9TSU5LID0gQERFRkFVTFRfQVVESU9TSU5LQAotREVGQVVMVF9BVURJT1NSQyA9IEBERUZBVUxUX0FVRElPU1JDQAotREVGQVVMVF9WSURFT1NJTksgPSBAREVGQVVMVF9WSURFT1NJTktACi1ERUZBVUxUX1ZJREVPU1JDID0gQERFRkFVTFRfVklERU9TUkNACi1ERUZBVUxUX1ZJU1VBTElaRVIgPSBAREVGQVVMVF9WSVNVQUxJWkVSQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURFUFJFQ0FURURfQ0ZMQUdTID0gQERFUFJFQ0FURURfQ0ZMQUdTQAotRElSRUNUU09VTkRfQ0ZMQUdTID0gQERJUkVDVFNPVU5EX0NGTEFHU0AKLURJUkVDVFNPVU5EX0xERkxBR1MgPSBARElSRUNUU09VTkRfTERGTEFHU0AKLURJUkVDVFNPVU5EX0xJQlMgPSBARElSRUNUU09VTkRfTElCU0AKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRFYxMzk0X0NGTEFHUyA9IEBEVjEzOTRfQ0ZMQUdTQAotRFYxMzk0X0xJQlMgPSBARFYxMzk0X0xJQlNACi1FQ0hPX0MgPSBARUNIT19DQAotRUNIT19OID0gQEVDSE9fTkAKLUVDSE9fVCA9IEBFQ0hPX1RACi1FR1JFUCA9IEBFR1JFUEAKLUVSUk9SX0NGTEFHUyA9IEBFUlJPUl9DRkxBR1NACi1FUlJPUl9DWFhGTEFHUyA9IEBFUlJPUl9DWFhGTEFHU0AKLUVSUk9SX09CSkNGTEFHUyA9IEBFUlJPUl9PQkpDRkxBR1NACi1FWEVFWFQgPSBARVhFRVhUQAotRkZMQUdTID0gQEZGTEFHU0AKLUZHUkVQID0gQEZHUkVQQAotRkxBQ19DRkxBR1MgPSBARkxBQ19DRkxBR1NACi1GTEFDX0xJQlMgPSBARkxBQ19MSUJTQAotR0NPViA9IEBHQ09WQAotR0NPVl9DRkxBR1MgPSBAR0NPVl9DRkxBR1NACi1HQ09WX0xJQlMgPSBAR0NPVl9MSUJTQAotR0RLX1BJWEJVRl9DRkxBR1MgPSBAR0RLX1BJWEJVRl9DRkxBR1NACi1HREtfUElYQlVGX0xJQlMgPSBAR0RLX1BJWEJVRl9MSUJTQAotR0VUVEVYVF9NQUNST19WRVJTSU9OID0gQEdFVFRFWFRfTUFDUk9fVkVSU0lPTkAKLUdFVFRFWFRfUEFDS0FHRSA9IEBHRVRURVhUX1BBQ0tBR0VACi1HSU9fQ0ZMQUdTID0gQEdJT19DRkxBR1NACi1HSU9fTERGTEFHUyA9IEBHSU9fTERGTEFHU0AKLUdJT19MSUJTID0gQEdJT19MSUJTQAotR0xJQl9DRkxBR1MgPSBAR0xJQl9DRkxBR1NACi1HTElCX0VYVFJBX0NGTEFHUyA9IEBHTElCX0VYVFJBX0NGTEFHU0AKLUdMSUJfR0VOTUFSU0hBTCA9IEBHTElCX0dFTk1BUlNIQUxACi1HTElCX0xJQlMgPSBAR0xJQl9MSUJTQAotR0xJQl9NS0VOVU1TID0gQEdMSUJfTUtFTlVNU0AKLUdMSUJfUFJFRklYID0gQEdMSUJfUFJFRklYQAotR0xJQl9SRVEgPSBAR0xJQl9SRVFACi1HTVNHRk1UID0gQEdNU0dGTVRACi1HTVNHRk1UXzAxNSA9IEBHTVNHRk1UXzAxNUAKLUdSRVAgPSBAR1JFUEAKLUdTVFBCX1BMVUdJTlNfRElSID0gQEdTVFBCX1BMVUdJTlNfRElSQAotR1NUUEJfUFJFRklYID0gQEdTVFBCX1BSRUZJWEAKLUdTVF9BR0UgPSBAR1NUX0FHRUAKLUdTVF9BTExfTERGTEFHUyA9IEBHU1RfQUxMX0xERkxBR1NACi1HU1RfQVBJX1ZFUlNJT04gPSBAR1NUX0FQSV9WRVJTSU9OQAotR1NUX0JBU0VfQ0ZMQUdTID0gQEdTVF9CQVNFX0NGTEFHU0AKLUdTVF9CQVNFX0xJQlMgPSBAR1NUX0JBU0VfTElCU0AKLUdTVF9DRkxBR1MgPSBAR1NUX0NGTEFHU0AKLUdTVF9DSEVDS19DRkxBR1MgPSBAR1NUX0NIRUNLX0NGTEFHU0AKLUdTVF9DSEVDS19MSUJTID0gQEdTVF9DSEVDS19MSUJTQAotR1NUX0NPTlRST0xMRVJfQ0ZMQUdTID0gQEdTVF9DT05UUk9MTEVSX0NGTEFHU0AKLUdTVF9DT05UUk9MTEVSX0xJQlMgPSBAR1NUX0NPTlRST0xMRVJfTElCU0AKLUdTVF9DVVJSRU5UID0gQEdTVF9DVVJSRU5UQAotR1NUX0NYWEZMQUdTID0gQEdTVF9DWFhGTEFHU0AKLUdTVF9MRVZFTF9ERUZBVUxUID0gQEdTVF9MRVZFTF9ERUZBVUxUQAotR1NUX0xJQlMgPSBAR1NUX0xJQlNACi1HU1RfTElCVkVSU0lPTiA9IEBHU1RfTElCVkVSU0lPTkAKLUdTVF9MSUNFTlNFID0gQEdTVF9MSUNFTlNFQAotR1NUX0xUX0xERkxBR1MgPSBAR1NUX0xUX0xERkxBR1NACi1HU1RfTkVUX0NGTEFHUyA9IEBHU1RfTkVUX0NGTEFHU0AKLUdTVF9ORVRfTElCUyA9IEBHU1RfTkVUX0xJQlNACi1HU1RfT0JKQ0ZMQUdTID0gQEdTVF9PQkpDRkxBR1NACi1HU1RfT1BUSU9OX0NGTEFHUyA9IEBHU1RfT1BUSU9OX0NGTEFHU0AKLUdTVF9PUFRJT05fQ1hYRkxBR1MgPSBAR1NUX09QVElPTl9DWFhGTEFHU0AKLUdTVF9PUFRJT05fT0JKQ0ZMQUdTID0gQEdTVF9PUFRJT05fT0JKQ0ZMQUdTQAotR1NUX1BBQ0tBR0VfTkFNRSA9IEBHU1RfUEFDS0FHRV9OQU1FQAotR1NUX1BBQ0tBR0VfT1JJR0lOID0gQEdTVF9QQUNLQUdFX09SSUdJTkAKLUdTVF9QS0dfQ09ORklHX1BBVEggPSBAR1NUX1BLR19DT05GSUdfUEFUSEAKLUdTVF9QTFVHSU5TX0FMTCA9IEBHU1RfUExVR0lOU19BTExACi1HU1RfUExVR0lOU19CQVNFX0NGTEFHUyA9IEBHU1RfUExVR0lOU19CQVNFX0NGTEFHU0AKLUdTVF9QTFVHSU5TX0JBU0VfRElSID0gQEdTVF9QTFVHSU5TX0JBU0VfRElSQAotR1NUX1BMVUdJTlNfQkFTRV9MSUJTID0gQEdTVF9QTFVHSU5TX0JBU0VfTElCU0AKLUdTVF9QTFVHSU5TX0RJUiA9IEBHU1RfUExVR0lOU19ESVJACi1HU1RfUExVR0lOU19OT05QT1JURUQgPSBAR1NUX1BMVUdJTlNfTk9OUE9SVEVEQAotR1NUX1BMVUdJTlNfU0VMRUNURUQgPSBAR1NUX1BMVUdJTlNfU0VMRUNURURACi1HU1RfUExVR0lOX0xERkxBR1MgPSBAR1NUX1BMVUdJTl9MREZMQUdTQAotR1NUX1BMVUdJTl9MSUJUT09MRkxBR1MgPSBAR1NUX1BMVUdJTl9MSUJUT09MRkxBR1NACi1HU1RfUFJFRklYID0gQEdTVF9QUkVGSVhACi1HU1RfUkVWSVNJT04gPSBAR1NUX1JFVklTSU9OQAotR1NUX1RPT0xTX0RJUiA9IEBHU1RfVE9PTFNfRElSQAotR1RLRE9DX0NIRUNLID0gQEdUS0RPQ19DSEVDS0AKLUdUS0RPQ19ERVBTX0NGTEFHUyA9IEBHVEtET0NfREVQU19DRkxBR1NACi1HVEtET0NfREVQU19MSUJTID0gQEdUS0RPQ19ERVBTX0xJQlNACi1HVEtET0NfTUtQREYgPSBAR1RLRE9DX01LUERGQAotR1RLRE9DX1JFQkFTRSA9IEBHVEtET0NfUkVCQVNFQAotR1RLX0NGTEFHUyA9IEBHVEtfQ0ZMQUdTQAotR1RLX0xJQlMgPSBAR1RLX0xJQlNACi1HVEtfWDExX0NGTEFHUyA9IEBHVEtfWDExX0NGTEFHU0AKLUdUS19YMTFfTElCUyA9IEBHVEtfWDExX0xJQlNACi1HVURFVl9DRkxBR1MgPSBAR1VERVZfQ0ZMQUdTQAotR1VERVZfTElCUyA9IEBHVURFVl9MSUJTQAotSEFWRV9BVkMxMzk0ID0gQEhBVkVfQVZDMTM5NEAKLUhBVkVfQ1hYID0gQEhBVkVfQ1hYQAotSEFWRV9ESVJFQ1RTT1VORCA9IEBIQVZFX0RJUkVDVFNPVU5EQAotSEFWRV9ST00xMzk0ID0gQEhBVkVfUk9NMTM5NEAKLUhBVkVfWkxJQiA9IEBIQVZFX1pMSUJACi1IVE1MX0RJUiA9IEBIVE1MX0RJUkAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLUlOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACi1JTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAotSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACi1JTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAotSU5UTExJQlMgPSBASU5UTExJQlNACi1JTlRMX01BQ09TWF9MSUJTID0gQElOVExfTUFDT1NYX0xJQlNACi1KQUNLXzBfMTIwXzFfQ0ZMQUdTID0gQEpBQ0tfMF8xMjBfMV9DRkxBR1NACi1KQUNLXzBfMTIwXzFfTElCUyA9IEBKQUNLXzBfMTIwXzFfTElCU0AKLUpBQ0tfMV85XzdfQ0ZMQUdTID0gQEpBQ0tfMV85XzdfQ0ZMQUdTQAotSkFDS18xXzlfN19MSUJTID0gQEpBQ0tfMV85XzdfTElCU0AKLUpBQ0tfQ0ZMQUdTID0gQEpBQ0tfQ0ZMQUdTQAotSkFDS19MSUJTID0gQEpBQ0tfTElCU0AKLUpQRUdfTElCUyA9IEBKUEVHX0xJQlNACi1MRCA9IEBMREAKLUxERkxBR1MgPSBATERGTEFHU0AKLUxJQkNBQ0FfQ0ZMQUdTID0gQExJQkNBQ0FfQ0ZMQUdTQAotTElCQ0FDQV9MSUJTID0gQExJQkNBQ0FfTElCU0AKLUxJQkRWX0NGTEFHUyA9IEBMSUJEVl9DRkxBR1NACi1MSUJEVl9MSUJTID0gQExJQkRWX0xJQlNACi1MSUJJQ09OViA9IEBMSUJJQ09OVkAKLUxJQklFQzYxODgzX0NGTEFHUyA9IEBMSUJJRUM2MTg4M19DRkxBR1NACi1MSUJJRUM2MTg4M19MSUJTID0gQExJQklFQzYxODgzX0xJQlNACi1MSUJJTlRMID0gQExJQklOVExACi1MSUJNID0gQExJQk1ACi1MSUJPQkpTID0gQExJQk9CSlNACi1MSUJQTkdfQ0ZMQUdTID0gQExJQlBOR19DRkxBR1NACi1MSUJQTkdfTElCUyA9IEBMSUJQTkdfTElCU0AKLUxJQlJUID0gQExJQlJUQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElCVjRMMl9DRkxBR1MgPSBATElCVjRMMl9DRkxBR1NACi1MSUJWNEwyX0xJQlMgPSBATElCVjRMMl9MSUJTQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTE9DQUxFRElSID0gQExPQ0FMRURJUkAKLUxUTElCSUNPTlYgPSBATFRMSUJJQ09OVkAKLUxUTElCSU5UTCA9IEBMVExJQklOVExACi1MVExJQk9CSlMgPSBATFRMSUJPQkpTQAotTFRfU1lTX0xJQlJBUllfUEFUSCA9IEBMVF9TWVNfTElCUkFSWV9QQVRIQAotTUFJTlQgPSBATUFJTlRACi1NQUtFSU5GTyA9IEBNQUtFSU5GT0AKLU1BTklGRVNUX1RPT0wgPSBATUFOSUZFU1RfVE9PTEAKLU1LRElSX1AgPSBATUtESVJfUEAKLU1TR0ZNVCA9IEBNU0dGTVRACi1NU0dGTVRfMDE1ID0gQE1TR0ZNVF8wMTVACi1NU0dNRVJHRSA9IEBNU0dNRVJHRUAKLU5NID0gQE5NQAotTk1FRElUID0gQE5NRURJVEAKLU9CSkMgPSBAT0JKQ0AKLU9CSkNERVBNT0RFID0gQE9CSkNERVBNT0RFQAotT0JKQ0ZMQUdTID0gQE9CSkNGTEFHU0AKLU9CSkRVTVAgPSBAT0JKRFVNUEAKLU9CSkVYVCA9IEBPQkpFWFRACi1PUkNDID0gQE9SQ0NACi1PUkNDX0ZMQUdTID0gQE9SQ0NfRkxBR1NACi1PUkNfQ0ZMQUdTID0gQE9SQ19DRkxBR1NACi1PUkNfTElCUyA9IEBPUkNfTElCU0AKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFDS0FHRV9WRVJTSU9OX01BSk9SID0gQFBBQ0tBR0VfVkVSU0lPTl9NQUpPUkAKLVBBQ0tBR0VfVkVSU0lPTl9NSUNSTyA9IEBQQUNLQUdFX1ZFUlNJT05fTUlDUk9ACi1QQUNLQUdFX1ZFUlNJT05fTUlOT1IgPSBAUEFDS0FHRV9WRVJTSU9OX01JTk9SQAotUEFDS0FHRV9WRVJTSU9OX05BTk8gPSBAUEFDS0FHRV9WRVJTSU9OX05BTk9ACi1QQUNLQUdFX1ZFUlNJT05fUkVMRUFTRSA9IEBQQUNLQUdFX1ZFUlNJT05fUkVMRUFTRUAKLVBBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAotUEtHX0NPTkZJRyA9IEBQS0dfQ09ORklHQAotUExVR0lORElSID0gQFBMVUdJTkRJUkAKLVBPU1VCID0gQFBPU1VCQAotUFJPRklMRV9DRkxBR1MgPSBAUFJPRklMRV9DRkxBR1NACi1QVEhSRUFEX0NDID0gQFBUSFJFQURfQ0NACi1QVEhSRUFEX0NGTEFHUyA9IEBQVEhSRUFEX0NGTEFHU0AKLVBUSFJFQURfTElCUyA9IEBQVEhSRUFEX0xJQlNACi1QVUxTRV9DRkxBR1MgPSBAUFVMU0VfQ0ZMQUdTQAotUFVMU0VfTElCUyA9IEBQVUxTRV9MSUJTQAotUFlUSE9OID0gQFBZVEhPTkAKLVBZVEhPTl9FWEVDX1BSRUZJWCA9IEBQWVRIT05fRVhFQ19QUkVGSVhACi1QWVRIT05fUExBVEZPUk0gPSBAUFlUSE9OX1BMQVRGT1JNQAotUFlUSE9OX1BSRUZJWCA9IEBQWVRIT05fUFJFRklYQAotUFlUSE9OX1ZFUlNJT04gPSBAUFlUSE9OX1ZFUlNJT05ACi1SQU5MSUIgPSBAUkFOTElCQAotUkFXMTM5NF9DRkxBR1MgPSBAUkFXMTM5NF9DRkxBR1NACi1SQVcxMzk0X0xJQlMgPSBAUkFXMTM5NF9MSUJTQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TSE9VVDJfQ0ZMQUdTID0gQFNIT1VUMl9DRkxBR1NACi1TSE9VVDJfTElCUyA9IEBTSE9VVDJfTElCU0AKLVNPVVBfQ0ZMQUdTID0gQFNPVVBfQ0ZMQUdTQAotU09VUF9MSUJTID0gQFNPVVBfTElCU0AKLVNQRUVYX0NGTEFHUyA9IEBTUEVFWF9DRkxBR1NACi1TUEVFWF9MSUJTID0gQFNQRUVYX0xJQlNACi1TVFJJUCA9IEBTVFJJUEAKLVRBR0xJQl9DRkxBR1MgPSBAVEFHTElCX0NGTEFHU0AKLVRBR0xJQl9DWFhGTEFHUyA9IEBUQUdMSUJfQ1hYRkxBR1NACi1UQUdMSUJfTElCUyA9IEBUQUdMSUJfTElCU0AKLVVTRV9OTFMgPSBAVVNFX05MU0AKLVZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACi1WQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACi1WQUxHUklORF9QQVRIID0gQFZBTEdSSU5EX1BBVEhACi1WRVJTSU9OID0gQFZFUlNJT05ACi1WUFhfMTMwX0NGTEFHUyA9IEBWUFhfMTMwX0NGTEFHU0AKLVZQWF8xMzBfTElCUyA9IEBWUFhfMTMwX0xJQlNACi1WUFhfMTQwX0NGTEFHUyA9IEBWUFhfMTQwX0NGTEFHU0AKLVZQWF8xNDBfTElCUyA9IEBWUFhfMTQwX0xJQlNACi1WUFhfQ0ZMQUdTID0gQFZQWF9DRkxBR1NACi1WUFhfTElCUyA9IEBWUFhfTElCU0AKLVdBUk5JTkdfQ0ZMQUdTID0gQFdBUk5JTkdfQ0ZMQUdTQAotV0FSTklOR19DWFhGTEFHUyA9IEBXQVJOSU5HX0NYWEZMQUdTQAotV0FSTklOR19PQkpDRkxBR1MgPSBAV0FSTklOR19PQkpDRkxBR1NACi1XQVZQQUNLX0NGTEFHUyA9IEBXQVZQQUNLX0NGTEFHU0AKLVdBVlBBQ0tfTElCUyA9IEBXQVZQQUNLX0xJQlNACi1YREFNQUdFX0NGTEFHUyA9IEBYREFNQUdFX0NGTEFHU0AKLVhEQU1BR0VfTElCUyA9IEBYREFNQUdFX0xJQlNACi1YRVhUX0NGTEFHUyA9IEBYRVhUX0NGTEFHU0AKLVhFWFRfTElCUyA9IEBYRVhUX0xJQlNACi1YRklYRVNfQ0ZMQUdTID0gQFhGSVhFU19DRkxBR1NACi1YRklYRVNfTElCUyA9IEBYRklYRVNfTElCU0AKLVhHRVRURVhUID0gQFhHRVRURVhUQAotWEdFVFRFWFRfMDE1ID0gQFhHRVRURVhUXzAxNUAKLVhHRVRURVhUX0VYVFJBX09QVElPTlMgPSBAWEdFVFRFWFRfRVhUUkFfT1BUSU9OU0AKLVhTSE1fQ0ZMQUdTID0gQFhTSE1fQ0ZMQUdTQAotWFNITV9MSUJTID0gQFhTSE1fTElCU0AKLVhfQ0ZMQUdTID0gQFhfQ0ZMQUdTQAotWF9MSUJTID0gQFhfTElCU0AKLVpMSUJfTElCUyA9IEBaTElCX0xJQlNACi1hYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAotYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAotYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAotYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACi1hY19jdF9BUiA9IEBhY19jdF9BUkAKLWFjX2N0X0NDID0gQGFjX2N0X0NDQAotYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKLWFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKLWFjX2N0X09CSkMgPSBAYWNfY3RfT0JKQ0AKLWFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAotYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKLWFtX19xdW90ZSA9IEBhbV9fcXVvdGVACi1hbV9fdGFyID0gQGFtX190YXJACi1hbV9fdW50YXIgPSBAYW1fX3VudGFyQAotYXhfcHRocmVhZF9jb25maWcgPSBAYXhfcHRocmVhZF9jb25maWdACi1iaW5kaXIgPSBAYmluZGlyQAotYnVpbGQgPSBAYnVpbGRACi1idWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKLWJ1aWxkX2NwdSA9IEBidWlsZF9jcHVACi1idWlsZF9vcyA9IEBidWlsZF9vc0AKLWJ1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACi1idWlsZGRpciA9IEBidWlsZGRpckAKLWRhdGFkaXIgPSBAZGF0YWRpckAKLWRhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAotZG9jZGlyID0gQGRvY2RpckAKLWR2aWRpciA9IEBkdmlkaXJACi1leGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKLWhvc3QgPSBAaG9zdEAKLWhvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKLWhvc3RfY3B1ID0gQGhvc3RfY3B1QAotaG9zdF9vcyA9IEBob3N0X29zQAotaG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACi1odG1sZGlyID0gQGh0bWxkaXJACi1pbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACi1pbmZvZGlyID0gQGluZm9kaXJACi1pbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACi1saWJkaXIgPSBAbGliZGlyQAotbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAotbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKLWxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKLW1hbmRpciA9IEBtYW5kaXJACi1ta2Rpcl9wID0gQG1rZGlyX3BACi1vbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACi1wZGZkaXIgPSBAcGRmZGlyQAotcGtncHlleGVjZGlyID0gQHBrZ3B5ZXhlY2RpckAKLXBrZ3B5dGhvbmRpciA9IEBwa2dweXRob25kaXJACi1wbHVnaW5kaXIgPSBAcGx1Z2luZGlyQAotcHJlZml4ID0gQHByZWZpeEAKLXByb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKLXBzZGlyID0gQHBzZGlyQAotcHlleGVjZGlyID0gQHB5ZXhlY2RpckAKLXB5dGhvbmRpciA9IEBweXRob25kaXJACi1ydW5zdGF0ZWRpciA9IEBydW5zdGF0ZWRpckAKLXNiaW5kaXIgPSBAc2JpbmRpckAKLXNoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAotc3JjZGlyID0gQHNyY2RpckAKLXN5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKLXRhcmdldCA9IEB0YXJnZXRACi10YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAotdGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAotdGFyZ2V0X29zID0gQHRhcmdldF9vc0AKLXRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKLXRvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKLXRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACi10b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACi1ASEFWRV9HVEtfRkFMU0VAR1RLX1RFU1RTID0gCi1ASEFWRV9HVEtfVFJVRUBHVEtfVEVTVFMgPSBnZGtwaXhidWZzaW5rLXRlc3QgZ2RrcGl4YnVmb3ZlcmxheS10ZXN0Ci1ASEFWRV9HVEtfVFJVRUBnZGtwaXhidWZzaW5rX3Rlc3RfU09VUkNFUyA9IGdka3BpeGJ1ZnNpbmstdGVzdC5jCi1ASEFWRV9HVEtfVFJVRUBnZGtwaXhidWZzaW5rX3Rlc3RfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKSAkKEdUS19DRkxBR1MpCi1ASEFWRV9HVEtfVFJVRUBnZGtwaXhidWZzaW5rX3Rlc3RfTERBREQgPSAkKEdTVF9MSUJTKSAkKEdUS19MSUJTKQotQEhBVkVfR1RLX1RSVUVAZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X1NPVVJDRVMgPSBnZGtwaXhidWZvdmVybGF5LXRlc3QuYwotQEhBVkVfR1RLX1RSVUVAZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X0NGTEFHUyA9ICQoR1NUX1BMVUdJTlNfQkFTRV9DRkxBR1MpICQoR1NUX0NGTEFHUykgXAotQEhBVkVfR1RLX1RSVUVACSQoR0RLX1BJWEJVRl9DRkxBR1MpICQoR0lPX0NGTEFHUykKLQotQEhBVkVfR1RLX1RSVUVAZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X0xEQUREID0gJChHU1RfTElCUykgJChHREtfUElYQlVGX0xJQlMpICQoR0lPX0xJQlMpIFwKLUBIQVZFX0dUS19UUlVFQAkkKExJQk0pCi0KLVY0TDJfVEVTVFMgPSB2NGwyc3JjLXRlc3QKLXY0bDJzcmNfdGVzdF9TT1VSQ0VTID0gdjRsMnNyYy10ZXN0LmMKLXY0bDJzcmNfdGVzdF9DRkxBR1MgPSAkKEdTVF9QTFVHSU5TX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi12NGwyc3JjX3Rlc3RfTERBREQgPSAkKEdTVF9QTFVHSU5TX0JBU0VfTElCUykgXAotCQkgICAgIC1sZ3N0dmlkZW8tJChHU1RfQVBJX1ZFUlNJT04pCi0KLUBVU0VfT1NTNF9GQUxTRUBPU1M0X1RFU1RTID0gCi1AVVNFX09TUzRfVFJVRUBPU1M0X1RFU1RTID0gdGVzdC1vc3M0Ci1AVVNFX09TUzRfVFJVRUB0ZXN0X29zczRfU09VUkNFUyA9IHRlc3Qtb3NzNC5jCi1AVVNFX09TUzRfVFJVRUB0ZXN0X29zczRfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgJChHU1RfQ0ZMQUdTKQotQFVTRV9PU1M0X1RSVUVAdGVzdF9vc3M0X0xEQUREID0gJChHU1RfUExVR0lOU19CQVNFX0xJQlMpICQoR1NUX0xJQlMpCi1AVVNFX09TUzRfVFJVRUB0ZXN0X29zczRfTERGTEFHUyA9ICQoR1NUX1BMVUdJTl9MREZMQUdTKQotQFVTRV9YX0ZBTFNFQFhfVEVTVFMgPSAKLUBVU0VfWF9UUlVFQFhfVEVTVFMgPSB4aW1hZ2VzcmMtdGVzdAotQFVTRV9YX1RSVUVAeGltYWdlc3JjX3Rlc3RfU09VUkNFUyA9IHhpbWFnZXNyYy10ZXN0LmMKLUBVU0VfWF9UUlVFQHhpbWFnZXNyY190ZXN0X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLUBVU0VfWF9UUlVFQHhpbWFnZXNyY190ZXN0X0xEQUREID0gJChHU1RfTElCUykKLWVxdWFsaXplcl90ZXN0X1NPVVJDRVMgPSBlcXVhbGl6ZXItdGVzdC5jCi1lcXVhbGl6ZXJfdGVzdF9DRkxBR1MgPSAkKEdTVF9DRkxBR1MpCi1lcXVhbGl6ZXJfdGVzdF9MREFERCA9ICQoR1NUX0xJQlMpCi10ZXN0X2FjY3VyYXRlX3NlZWtfU09VUkNFUyA9IHRlc3QtYWNjdXJhdGUtc2Vlay5jCi10ZXN0X2FjY3VyYXRlX3NlZWtfQ0ZMQUdTID0gJChHU1RfUExVR0lOU19CQVNFX0NGTEFHUykgXAotCSQoR1NUX0JBU0VfQ0ZMQUdTKSAkKEdTVF9DRkxBR1MpCi0KLXRlc3RfYWNjdXJhdGVfc2Vla19MREFERCA9ICQoR1NUX1BMVUdJTlNfQkFTRV9MSUJTKSAtbGdzdGFwcC0kKEdTVF9BUElfVkVSU0lPTikgXAotCSQoR1NUX0JBU0VfTElCUykgJChHU1RfTElCUykKLQotdGVzdF9zZWdtZW50X3NlZWtzX1NPVVJDRVMgPSB0ZXN0LXNlZ21lbnQtc2Vla3MuYwotdGVzdF9zZWdtZW50X3NlZWtzX0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLXRlc3Rfc2VnbWVudF9zZWVrc19MREFERCA9ICQoR1NUX0xJQlMpCi12aWRlb2Nyb3BfdGVzdF9TT1VSQ0VTID0gdmlkZW9jcm9wLXRlc3QuYwotdmlkZW9jcm9wX3Rlc3RfQ0ZMQUdTID0gJChHU1RfQ0ZMQUdTKQotdmlkZW9jcm9wX3Rlc3RfTERBREQgPSAkKEdTVF9MSUJTKQotdmlkZW9ib3hfdGVzdF9TT1VSQ0VTID0gdmlkZW9ib3gtdGVzdC5jCi12aWRlb2JveF90ZXN0X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLXZpZGVvYm94X3Rlc3RfTERBREQgPSAkKEdTVF9MSUJTKQotdmlkZW9jcm9wMl90ZXN0X1NPVVJDRVMgPSB2aWRlb2Nyb3AyLXRlc3QuYwotdmlkZW9jcm9wMl90ZXN0X0NGTEFHUyA9ICQoR1NUX0NGTEFHUykKLXZpZGVvY3JvcDJfdGVzdF9MREFERCA9ICQoR1NUX0xJQlMpCi1hbGw6IGFsbC1hbQotCi0uU1VGRklYRVM6Ci0uU1VGRklYRVM6IC5jIC5sbyAubyAub2JqCi0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKLQkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCi0JICAgICAgZXhpdCAxOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9pY2xlcy9NYWtlZmlsZSc7IFwKLQkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCi0JICAkKEFVVE9NQUtFKSAtLWdudSB0ZXN0cy9pY2xlcy9NYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKLQkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAotCWVzYWM7Ci0KLSQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotCi0kKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKLQljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAotJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKLQotY2xlYW4tbm9pbnN0UFJPR1JBTVM6Ci0JQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKLQl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAotCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKLQllY2hvICIgcm0gLWYiICQkbGlzdDsgXAotCXJtIC1mICQkbGlzdAotCi1lcXVhbGl6ZXItdGVzdCQoRVhFRVhUKTogJChlcXVhbGl6ZXJfdGVzdF9PQkpFQ1RTKSAkKGVxdWFsaXplcl90ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9lcXVhbGl6ZXJfdGVzdF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBlcXVhbGl6ZXItdGVzdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoZXF1YWxpemVyX3Rlc3RfTElOSykgJChlcXVhbGl6ZXJfdGVzdF9PQkpFQ1RTKSAkKGVxdWFsaXplcl90ZXN0X0xEQUREKSAkKExJQlMpCi0KLWdka3BpeGJ1Zm92ZXJsYXktdGVzdCQoRVhFRVhUKTogJChnZGtwaXhidWZvdmVybGF5X3Rlc3RfT0JKRUNUUykgJChnZGtwaXhidWZvdmVybGF5X3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2dka3BpeGJ1Zm92ZXJsYXlfdGVzdF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBnZGtwaXhidWZvdmVybGF5LXRlc3QkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKGdka3BpeGJ1Zm92ZXJsYXlfdGVzdF9MSU5LKSAkKGdka3BpeGJ1Zm92ZXJsYXlfdGVzdF9PQkpFQ1RTKSAkKGdka3BpeGJ1Zm92ZXJsYXlfdGVzdF9MREFERCkgJChMSUJTKQotCi1nZGtwaXhidWZzaW5rLXRlc3QkKEVYRUVYVCk6ICQoZ2RrcGl4YnVmc2lua190ZXN0X09CSkVDVFMpICQoZ2RrcGl4YnVmc2lua190ZXN0X0RFUEVOREVOQ0lFUykgJChFWFRSQV9nZGtwaXhidWZzaW5rX3Rlc3RfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgZ2RrcGl4YnVmc2luay10ZXN0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChnZGtwaXhidWZzaW5rX3Rlc3RfTElOSykgJChnZGtwaXhidWZzaW5rX3Rlc3RfT0JKRUNUUykgJChnZGtwaXhidWZzaW5rX3Rlc3RfTERBREQpICQoTElCUykKLQotdGVzdC1hY2N1cmF0ZS1zZWVrJChFWEVFWFQpOiAkKHRlc3RfYWNjdXJhdGVfc2Vla19PQkpFQ1RTKSAkKHRlc3RfYWNjdXJhdGVfc2Vla19ERVBFTkRFTkNJRVMpICQoRVhUUkFfdGVzdF9hY2N1cmF0ZV9zZWVrX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHRlc3QtYWNjdXJhdGUtc2VlayQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQodGVzdF9hY2N1cmF0ZV9zZWVrX0xJTkspICQodGVzdF9hY2N1cmF0ZV9zZWVrX09CSkVDVFMpICQodGVzdF9hY2N1cmF0ZV9zZWVrX0xEQUREKSAkKExJQlMpCi0KLXRlc3Qtb3NzNCQoRVhFRVhUKTogJCh0ZXN0X29zczRfT0JKRUNUUykgJCh0ZXN0X29zczRfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3Rlc3Rfb3NzNF9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiB0ZXN0LW9zczQkKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKHRlc3Rfb3NzNF9MSU5LKSAkKHRlc3Rfb3NzNF9PQkpFQ1RTKSAkKHRlc3Rfb3NzNF9MREFERCkgJChMSUJTKQotCi10ZXN0LXNlZ21lbnQtc2Vla3MkKEVYRUVYVCk6ICQodGVzdF9zZWdtZW50X3NlZWtzX09CSkVDVFMpICQodGVzdF9zZWdtZW50X3NlZWtzX0RFUEVOREVOQ0lFUykgJChFWFRSQV90ZXN0X3NlZ21lbnRfc2Vla3NfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgdGVzdC1zZWdtZW50LXNlZWtzJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJCh0ZXN0X3NlZ21lbnRfc2Vla3NfTElOSykgJCh0ZXN0X3NlZ21lbnRfc2Vla3NfT0JKRUNUUykgJCh0ZXN0X3NlZ21lbnRfc2Vla3NfTERBREQpICQoTElCUykKLQotdjRsMnNyYy10ZXN0JChFWEVFWFQpOiAkKHY0bDJzcmNfdGVzdF9PQkpFQ1RTKSAkKHY0bDJzcmNfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdjRsMnNyY190ZXN0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHY0bDJzcmMtdGVzdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQodjRsMnNyY190ZXN0X0xJTkspICQodjRsMnNyY190ZXN0X09CSkVDVFMpICQodjRsMnNyY190ZXN0X0xEQUREKSAkKExJQlMpCi0KLXZpZGVvYm94LXRlc3QkKEVYRUVYVCk6ICQodmlkZW9ib3hfdGVzdF9PQkpFQ1RTKSAkKHZpZGVvYm94X3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3ZpZGVvYm94X3Rlc3RfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgdmlkZW9ib3gtdGVzdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQodmlkZW9ib3hfdGVzdF9MSU5LKSAkKHZpZGVvYm94X3Rlc3RfT0JKRUNUUykgJCh2aWRlb2JveF90ZXN0X0xEQUREKSAkKExJQlMpCi0KLXZpZGVvY3JvcC10ZXN0JChFWEVFWFQpOiAkKHZpZGVvY3JvcF90ZXN0X09CSkVDVFMpICQodmlkZW9jcm9wX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3ZpZGVvY3JvcF90ZXN0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHZpZGVvY3JvcC10ZXN0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJCh2aWRlb2Nyb3BfdGVzdF9MSU5LKSAkKHZpZGVvY3JvcF90ZXN0X09CSkVDVFMpICQodmlkZW9jcm9wX3Rlc3RfTERBREQpICQoTElCUykKLQotdmlkZW9jcm9wMi10ZXN0JChFWEVFWFQpOiAkKHZpZGVvY3JvcDJfdGVzdF9PQkpFQ1RTKSAkKHZpZGVvY3JvcDJfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfdmlkZW9jcm9wMl90ZXN0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHZpZGVvY3JvcDItdGVzdCQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQodmlkZW9jcm9wMl90ZXN0X0xJTkspICQodmlkZW9jcm9wMl90ZXN0X09CSkVDVFMpICQodmlkZW9jcm9wMl90ZXN0X0xEQUREKSAkKExJQlMpCi0KLXhpbWFnZXNyYy10ZXN0JChFWEVFWFQpOiAkKHhpbWFnZXNyY190ZXN0X09CSkVDVFMpICQoeGltYWdlc3JjX3Rlc3RfREVQRU5ERU5DSUVTKSAkKEVYVFJBX3hpbWFnZXNyY190ZXN0X0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIHhpbWFnZXNyYy10ZXN0JChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJCh4aW1hZ2VzcmNfdGVzdF9MSU5LKSAkKHhpbWFnZXNyY190ZXN0X09CSkVDVFMpICQoeGltYWdlc3JjX3Rlc3RfTERBREQpICQoTElCUykKLQotbW9zdGx5Y2xlYW4tY29tcGlsZToKLQktcm0gLWYgKi4kKE9CSkVYVCkKLQotZGlzdGNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICoudGFiLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2VxdWFsaXplcl90ZXN0LWVxdWFsaXplci10ZXN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9nZGtwaXhidWZzaW5rX3Rlc3QtZ2RrcGl4YnVmc2luay10ZXN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0X29zczQtdGVzdC1vc3M0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90ZXN0X3NlZ21lbnRfc2Vla3MtdGVzdC1zZWdtZW50LXNlZWtzLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS92aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ZpZGVvY3JvcDJfdGVzdC12aWRlb2Nyb3AyLXRlc3QuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ZpZGVvY3JvcF90ZXN0LXZpZGVvY3JvcC10ZXN0LlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS94aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5Qb0BhbV9fcXVvdGVACi0KLS5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKLQotLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi0KLS5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAotCi1lcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vOiBlcXVhbGl6ZXItdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZXF1YWxpemVyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGVxdWFsaXplcl90ZXN0LWVxdWFsaXplci10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2VxdWFsaXplcl90ZXN0LWVxdWFsaXplci10ZXN0LlRwbyAtYyAtbyBlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vIGB0ZXN0IC1mICdlcXVhbGl6ZXItdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlcXVhbGl6ZXItdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9lcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5UcG8gJChERVBESVIpL2VxdWFsaXplcl90ZXN0LWVxdWFsaXplci10ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZXF1YWxpemVyLXRlc3QuYycgb2JqZWN0PSdlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlcXVhbGl6ZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vIGB0ZXN0IC1mICdlcXVhbGl6ZXItdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BlcXVhbGl6ZXItdGVzdC5jCi0KLWVxdWFsaXplcl90ZXN0LWVxdWFsaXplci10ZXN0Lm9iajogZXF1YWxpemVyLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGVxdWFsaXplcl90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2VxdWFsaXplcl90ZXN0LWVxdWFsaXplci10ZXN0LlRwbyAtYyAtbyBlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2VxdWFsaXplci10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZXF1YWxpemVyLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZXF1YWxpemVyLXRlc3QuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZXF1YWxpemVyX3Rlc3QtZXF1YWxpemVyLXRlc3QuVHBvICQoREVQRElSKS9lcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2VxdWFsaXplci10ZXN0LmMnIG9iamVjdD0nZXF1YWxpemVyX3Rlc3QtZXF1YWxpemVyLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChlcXVhbGl6ZXJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBlcXVhbGl6ZXJfdGVzdC1lcXVhbGl6ZXItdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2VxdWFsaXplci10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZXF1YWxpemVyLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZXF1YWxpemVyLXRlc3QuYyc7IGZpYAotCi1nZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0Lm86IGdka3BpeGJ1Zm92ZXJsYXktdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL2dka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3QuVHBvIC1jIC1vIGdka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3QubyBgdGVzdCAtZiAnZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdka3BpeGJ1Zm92ZXJsYXktdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS9nZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LlRwbyAkKERFUERJUikvZ2RrcGl4YnVmb3ZlcmxheV90ZXN0LWdka3BpeGJ1Zm92ZXJsYXktdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J2dka3BpeGJ1Zm92ZXJsYXktdGVzdC5jJyBvYmplY3Q9J2dka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2RrcGl4YnVmb3ZlcmxheV90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3QubyBgdGVzdCAtZiAnZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGdka3BpeGJ1Zm92ZXJsYXktdGVzdC5jCi0KLWdka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3Qub2JqOiBnZGtwaXhidWZvdmVybGF5LXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdka3BpeGJ1Zm92ZXJsYXlfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgZ2RrcGl4YnVmb3ZlcmxheV90ZXN0LWdka3BpeGJ1Zm92ZXJsYXktdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL2dka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3QuVHBvIC1jIC1vIGdka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdnZGtwaXhidWZvdmVybGF5LXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZGtwaXhidWZvdmVybGF5LXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dka3BpeGJ1Zm92ZXJsYXlfdGVzdC1nZGtwaXhidWZvdmVybGF5LXRlc3QuVHBvICQoREVQRElSKS9nZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMnIG9iamVjdD0nZ2RrcGl4YnVmb3ZlcmxheV90ZXN0LWdka3BpeGJ1Zm92ZXJsYXktdGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGdka3BpeGJ1Zm92ZXJsYXlfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBnZGtwaXhidWZvdmVybGF5X3Rlc3QtZ2RrcGl4YnVmb3ZlcmxheS10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL2dka3BpeGJ1Zm92ZXJsYXktdGVzdC5jJzsgZmlgCi0KLWdka3BpeGJ1ZnNpbmtfdGVzdC1nZGtwaXhidWZzaW5rLXRlc3QubzogZ2RrcGl4YnVmc2luay10ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZGtwaXhidWZzaW5rX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIGdka3BpeGJ1ZnNpbmtfdGVzdC1nZGtwaXhidWZzaW5rLXRlc3QubyAtTUQgLU1QIC1NRiAkKERFUERJUikvZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5UcG8gLWMgLW8gZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5vIGB0ZXN0IC1mICdnZGtwaXhidWZzaW5rLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2RrcGl4YnVmc2luay10ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL2dka3BpeGJ1ZnNpbmtfdGVzdC1nZGtwaXhidWZzaW5rLXRlc3QuVHBvICQoREVQRElSKS9nZGtwaXhidWZzaW5rX3Rlc3QtZ2RrcGl4YnVmc2luay10ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nZ2RrcGl4YnVmc2luay10ZXN0LmMnIG9iamVjdD0nZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChnZGtwaXhidWZzaW5rX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5vIGB0ZXN0IC1mICdnZGtwaXhidWZzaW5rLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgZ2RrcGl4YnVmc2luay10ZXN0LmMKLQotZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5vYmo6IGdka3BpeGJ1ZnNpbmstdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2RrcGl4YnVmc2lua190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBnZGtwaXhidWZzaW5rX3Rlc3QtZ2RrcGl4YnVmc2luay10ZXN0Lm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5UcG8gLWMgLW8gZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5vYmogYGlmIHRlc3QgLWYgJ2dka3BpeGJ1ZnNpbmstdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ2dka3BpeGJ1ZnNpbmstdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9nZGtwaXhidWZzaW5rLXRlc3QuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvZ2RrcGl4YnVmc2lua190ZXN0LWdka3BpeGJ1ZnNpbmstdGVzdC5UcG8gJChERVBESVIpL2dka3BpeGJ1ZnNpbmtfdGVzdC1nZGtwaXhidWZzaW5rLXRlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdnZGtwaXhidWZzaW5rLXRlc3QuYycgb2JqZWN0PSdnZGtwaXhidWZzaW5rX3Rlc3QtZ2RrcGl4YnVmc2luay10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoZ2RrcGl4YnVmc2lua190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIGdka3BpeGJ1ZnNpbmtfdGVzdC1nZGtwaXhidWZzaW5rLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICdnZGtwaXhidWZzaW5rLXRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdnZGtwaXhidWZzaW5rLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvZ2RrcGl4YnVmc2luay10ZXN0LmMnOyBmaWAKLQotdGVzdF9hY2N1cmF0ZV9zZWVrLXRlc3QtYWNjdXJhdGUtc2Vlay5vOiB0ZXN0LWFjY3VyYXRlLXNlZWsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3RfYWNjdXJhdGVfc2Vla19DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGVzdF9hY2N1cmF0ZV9zZWVrLXRlc3QtYWNjdXJhdGUtc2Vlay5vIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLlRwbyAtYyAtbyB0ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLm8gYHRlc3QgLWYgJ3Rlc3QtYWNjdXJhdGUtc2Vlay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0LWFjY3VyYXRlLXNlZWsuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVzdF9hY2N1cmF0ZV9zZWVrLXRlc3QtYWNjdXJhdGUtc2Vlay5UcG8gJChERVBESVIpL3Rlc3RfYWNjdXJhdGVfc2Vlay10ZXN0LWFjY3VyYXRlLXNlZWsuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0ZXN0LWFjY3VyYXRlLXNlZWsuYycgb2JqZWN0PSd0ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3RfYWNjdXJhdGVfc2Vla19DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLm8gYHRlc3QgLWYgJ3Rlc3QtYWNjdXJhdGUtc2Vlay5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B0ZXN0LWFjY3VyYXRlLXNlZWsuYwotCi10ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLm9iajogdGVzdC1hY2N1cmF0ZS1zZWVrLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X2FjY3VyYXRlX3NlZWtfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRlc3RfYWNjdXJhdGVfc2Vlay10ZXN0LWFjY3VyYXRlLXNlZWsub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS90ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLlRwbyAtYyAtbyB0ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLm9iaiBgaWYgdGVzdCAtZiAndGVzdC1hY2N1cmF0ZS1zZWVrLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdC1hY2N1cmF0ZS1zZWVrLmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3QtYWNjdXJhdGUtc2Vlay5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90ZXN0X2FjY3VyYXRlX3NlZWstdGVzdC1hY2N1cmF0ZS1zZWVrLlRwbyAkKERFUERJUikvdGVzdF9hY2N1cmF0ZV9zZWVrLXRlc3QtYWNjdXJhdGUtc2Vlay5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Rlc3QtYWNjdXJhdGUtc2Vlay5jJyBvYmplY3Q9J3Rlc3RfYWNjdXJhdGVfc2Vlay10ZXN0LWFjY3VyYXRlLXNlZWsub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X2FjY3VyYXRlX3NlZWtfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVzdF9hY2N1cmF0ZV9zZWVrLXRlc3QtYWNjdXJhdGUtc2Vlay5vYmogYGlmIHRlc3QgLWYgJ3Rlc3QtYWNjdXJhdGUtc2Vlay5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3QtYWNjdXJhdGUtc2Vlay5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0LWFjY3VyYXRlLXNlZWsuYyc7IGZpYAotCi10ZXN0X29zczQtdGVzdC1vc3M0Lm86IHRlc3Qtb3NzNC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9vc3M0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXN0X29zczQtdGVzdC1vc3M0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3Rlc3Rfb3NzNC10ZXN0LW9zczQuVHBvIC1jIC1vIHRlc3Rfb3NzNC10ZXN0LW9zczQubyBgdGVzdCAtZiAndGVzdC1vc3M0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3Qtb3NzNC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS90ZXN0X29zczQtdGVzdC1vc3M0LlRwbyAkKERFUERJUikvdGVzdF9vc3M0LXRlc3Qtb3NzNC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Rlc3Qtb3NzNC5jJyBvYmplY3Q9J3Rlc3Rfb3NzNC10ZXN0LW9zczQubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9vc3M0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3Rfb3NzNC10ZXN0LW9zczQubyBgdGVzdCAtZiAndGVzdC1vc3M0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHRlc3Qtb3NzNC5jCi0KLXRlc3Rfb3NzNC10ZXN0LW9zczQub2JqOiB0ZXN0LW9zczQuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfb3NzNF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdGVzdF9vc3M0LXRlc3Qtb3NzNC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3Rlc3Rfb3NzNC10ZXN0LW9zczQuVHBvIC1jIC1vIHRlc3Rfb3NzNC10ZXN0LW9zczQub2JqIGBpZiB0ZXN0IC1mICd0ZXN0LW9zczQuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0LW9zczQuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdC1vc3M0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfb3NzNC10ZXN0LW9zczQuVHBvICQoREVQRElSKS90ZXN0X29zczQtdGVzdC1vc3M0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGVzdC1vc3M0LmMnIG9iamVjdD0ndGVzdF9vc3M0LXRlc3Qtb3NzNC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHRlc3Rfb3NzNF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB0ZXN0X29zczQtdGVzdC1vc3M0Lm9iaiBgaWYgdGVzdCAtZiAndGVzdC1vc3M0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndGVzdC1vc3M0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Rlc3Qtb3NzNC5jJzsgZmlgCi0KLXRlc3Rfc2VnbWVudF9zZWVrcy10ZXN0LXNlZ21lbnQtc2Vla3MubzogdGVzdC1zZWdtZW50LXNlZWtzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NlZ21lbnRfc2Vla3NfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHRlc3Rfc2VnbWVudF9zZWVrcy10ZXN0LXNlZ21lbnQtc2Vla3MubyAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5UcG8gLWMgLW8gdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5vIGB0ZXN0IC1mICd0ZXN0LXNlZ21lbnQtc2Vla3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdC1zZWdtZW50LXNlZWtzLmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3Rlc3Rfc2VnbWVudF9zZWVrcy10ZXN0LXNlZ21lbnQtc2Vla3MuVHBvICQoREVQRElSKS90ZXN0X3NlZ21lbnRfc2Vla3MtdGVzdC1zZWdtZW50LXNlZWtzLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0ndGVzdC1zZWdtZW50LXNlZWtzLmMnIG9iamVjdD0ndGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh0ZXN0X3NlZ21lbnRfc2Vla3NfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5vIGB0ZXN0IC1mICd0ZXN0LXNlZ21lbnQtc2Vla3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdGVzdC1zZWdtZW50LXNlZWtzLmMKLQotdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5vYmo6IHRlc3Qtc2VnbWVudC1zZWVrcy5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zZWdtZW50X3NlZWtzX0NGTEFHUykgJChDRkxBR1MpIC1NVCB0ZXN0X3NlZ21lbnRfc2Vla3MtdGVzdC1zZWdtZW50LXNlZWtzLm9iaiAtTUQgLU1QIC1NRiAkKERFUERJUikvdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5UcG8gLWMgLW8gdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5vYmogYGlmIHRlc3QgLWYgJ3Rlc3Qtc2VnbWVudC1zZWVrcy5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Rlc3Qtc2VnbWVudC1zZWVrcy5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS90ZXN0LXNlZ21lbnQtc2Vla3MuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdGVzdF9zZWdtZW50X3NlZWtzLXRlc3Qtc2VnbWVudC1zZWVrcy5UcG8gJChERVBESVIpL3Rlc3Rfc2VnbWVudF9zZWVrcy10ZXN0LXNlZ21lbnQtc2Vla3MuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd0ZXN0LXNlZ21lbnQtc2Vla3MuYycgb2JqZWN0PSd0ZXN0X3NlZ21lbnRfc2Vla3MtdGVzdC1zZWdtZW50LXNlZWtzLm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodGVzdF9zZWdtZW50X3NlZWtzX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHRlc3Rfc2VnbWVudF9zZWVrcy10ZXN0LXNlZ21lbnQtc2Vla3Mub2JqIGBpZiB0ZXN0IC1mICd0ZXN0LXNlZ21lbnQtc2Vla3MuYyc7IHRoZW4gJChDWUdQQVRIX1cpICd0ZXN0LXNlZ21lbnQtc2Vla3MuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdGVzdC1zZWdtZW50LXNlZWtzLmMnOyBmaWAKLQotdjRsMnNyY190ZXN0LXY0bDJzcmMtdGVzdC5vOiB2NGwyc3JjLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHY0bDJzcmNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdjRsMnNyY190ZXN0LXY0bDJzcmMtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS92NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0LlRwbyAtYyAtbyB2NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0Lm8gYHRlc3QgLWYgJ3Y0bDJzcmMtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2NGwyc3JjLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdjRsMnNyY190ZXN0LXY0bDJzcmMtdGVzdC5UcG8gJChERVBESVIpL3Y0bDJzcmNfdGVzdC12NGwyc3JjLXRlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2NGwyc3JjLXRlc3QuYycgb2JqZWN0PSd2NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHY0bDJzcmNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB2NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0Lm8gYHRlc3QgLWYgJ3Y0bDJzcmMtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2NGwyc3JjLXRlc3QuYwotCi12NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0Lm9iajogdjRsMnNyYy10ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh2NGwyc3JjX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHY0bDJzcmNfdGVzdC12NGwyc3JjLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS92NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0LlRwbyAtYyAtbyB2NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndjRsMnNyYy10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndjRsMnNyYy10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3Y0bDJzcmMtdGVzdC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS92NGwyc3JjX3Rlc3QtdjRsMnNyYy10ZXN0LlRwbyAkKERFUERJUikvdjRsMnNyY190ZXN0LXY0bDJzcmMtdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3Y0bDJzcmMtdGVzdC5jJyBvYmplY3Q9J3Y0bDJzcmNfdGVzdC12NGwyc3JjLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh2NGwyc3JjX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdjRsMnNyY190ZXN0LXY0bDJzcmMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3Y0bDJzcmMtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3Y0bDJzcmMtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS92NGwyc3JjLXRlc3QuYyc7IGZpYAotCi12aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QubzogdmlkZW9ib3gtdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodmlkZW9ib3hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdmlkZW9ib3hfdGVzdC12aWRlb2JveC10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3ZpZGVvYm94X3Rlc3QtdmlkZW9ib3gtdGVzdC5UcG8gLWMgLW8gdmlkZW9ib3hfdGVzdC12aWRlb2JveC10ZXN0Lm8gYHRlc3QgLWYgJ3ZpZGVvYm94LXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmlkZW9ib3gtdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS92aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QuVHBvICQoREVQRElSKS92aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2aWRlb2JveC10ZXN0LmMnIG9iamVjdD0ndmlkZW9ib3hfdGVzdC12aWRlb2JveC10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHZpZGVvYm94X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdmlkZW9ib3hfdGVzdC12aWRlb2JveC10ZXN0Lm8gYHRlc3QgLWYgJ3ZpZGVvYm94LXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmlkZW9ib3gtdGVzdC5jCi0KLXZpZGVvYm94X3Rlc3QtdmlkZW9ib3gtdGVzdC5vYmo6IHZpZGVvYm94LXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHZpZGVvYm94X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHZpZGVvYm94X3Rlc3QtdmlkZW9ib3gtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3ZpZGVvYm94X3Rlc3QtdmlkZW9ib3gtdGVzdC5UcG8gLWMgLW8gdmlkZW9ib3hfdGVzdC12aWRlb2JveC10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndmlkZW9ib3gtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ZpZGVvYm94LXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvdmlkZW9ib3gtdGVzdC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS92aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QuVHBvICQoREVQRElSKS92aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2aWRlb2JveC10ZXN0LmMnIG9iamVjdD0ndmlkZW9ib3hfdGVzdC12aWRlb2JveC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodmlkZW9ib3hfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB2aWRlb2JveF90ZXN0LXZpZGVvYm94LXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd2aWRlb2JveC10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndmlkZW9ib3gtdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS92aWRlb2JveC10ZXN0LmMnOyBmaWAKLQotdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3QubzogdmlkZW9jcm9wLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHZpZGVvY3JvcF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB2aWRlb2Nyb3BfdGVzdC12aWRlb2Nyb3AtdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS92aWRlb2Nyb3BfdGVzdC12aWRlb2Nyb3AtdGVzdC5UcG8gLWMgLW8gdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3QubyBgdGVzdCAtZiAndmlkZW9jcm9wLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmlkZW9jcm9wLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3QuVHBvICQoREVQRElSKS92aWRlb2Nyb3BfdGVzdC12aWRlb2Nyb3AtdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3ZpZGVvY3JvcC10ZXN0LmMnIG9iamVjdD0ndmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodmlkZW9jcm9wX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3QubyBgdGVzdCAtZiAndmlkZW9jcm9wLXRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgdmlkZW9jcm9wLXRlc3QuYwotCi12aWRlb2Nyb3BfdGVzdC12aWRlb2Nyb3AtdGVzdC5vYmo6IHZpZGVvY3JvcC10ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh2aWRlb2Nyb3BfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS92aWRlb2Nyb3BfdGVzdC12aWRlb2Nyb3AtdGVzdC5UcG8gLWMgLW8gdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd2aWRlb2Nyb3AtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ZpZGVvY3JvcC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3ZpZGVvY3JvcC10ZXN0LmMnOyBmaWAKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpL3ZpZGVvY3JvcF90ZXN0LXZpZGVvY3JvcC10ZXN0LlRwbyAkKERFUERJUikvdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2aWRlb2Nyb3AtdGVzdC5jJyBvYmplY3Q9J3ZpZGVvY3JvcF90ZXN0LXZpZGVvY3JvcC10ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQodmlkZW9jcm9wX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdmlkZW9jcm9wX3Rlc3QtdmlkZW9jcm9wLXRlc3Qub2JqIGBpZiB0ZXN0IC1mICd2aWRlb2Nyb3AtdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ZpZGVvY3JvcC10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3ZpZGVvY3JvcC10ZXN0LmMnOyBmaWAKLQotdmlkZW9jcm9wMl90ZXN0LXZpZGVvY3JvcDItdGVzdC5vOiB2aWRlb2Nyb3AyLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHZpZGVvY3JvcDJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgdmlkZW9jcm9wMl90ZXN0LXZpZGVvY3JvcDItdGVzdC5vIC1NRCAtTVAgLU1GICQoREVQRElSKS92aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0LlRwbyAtYyAtbyB2aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0Lm8gYHRlc3QgLWYgJ3ZpZGVvY3JvcDItdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2aWRlb2Nyb3AyLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikvdmlkZW9jcm9wMl90ZXN0LXZpZGVvY3JvcDItdGVzdC5UcG8gJChERVBESVIpL3ZpZGVvY3JvcDJfdGVzdC12aWRlb2Nyb3AyLXRlc3QuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSd2aWRlb2Nyb3AyLXRlc3QuYycgb2JqZWN0PSd2aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0Lm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHZpZGVvY3JvcDJfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB2aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0Lm8gYHRlc3QgLWYgJ3ZpZGVvY3JvcDItdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B2aWRlb2Nyb3AyLXRlc3QuYwotCi12aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0Lm9iajogdmlkZW9jcm9wMi10ZXN0LmMKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh2aWRlb2Nyb3AyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHZpZGVvY3JvcDJfdGVzdC12aWRlb2Nyb3AyLXRlc3Qub2JqIC1NRCAtTVAgLU1GICQoREVQRElSKS92aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0LlRwbyAtYyAtbyB2aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0Lm9iaiBgaWYgdGVzdCAtZiAndmlkZW9jcm9wMi10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAndmlkZW9jcm9wMi10ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3ZpZGVvY3JvcDItdGVzdC5jJzsgZmlgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS92aWRlb2Nyb3AyX3Rlc3QtdmlkZW9jcm9wMi10ZXN0LlRwbyAkKERFUERJUikvdmlkZW9jcm9wMl90ZXN0LXZpZGVvY3JvcDItdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3ZpZGVvY3JvcDItdGVzdC5jJyBvYmplY3Q9J3ZpZGVvY3JvcDJfdGVzdC12aWRlb2Nyb3AyLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh2aWRlb2Nyb3AyX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gdmlkZW9jcm9wMl90ZXN0LXZpZGVvY3JvcDItdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3ZpZGVvY3JvcDItdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3ZpZGVvY3JvcDItdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS92aWRlb2Nyb3AyLXRlc3QuYyc7IGZpYAotCi14aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vOiB4aW1hZ2VzcmMtdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoeGltYWdlc3JjX3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHhpbWFnZXNyY190ZXN0LXhpbWFnZXNyYy10ZXN0Lm8gLU1EIC1NUCAtTUYgJChERVBESVIpL3hpbWFnZXNyY190ZXN0LXhpbWFnZXNyYy10ZXN0LlRwbyAtYyAtbyB4aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vIGB0ZXN0IC1mICd4aW1hZ2VzcmMtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B4aW1hZ2VzcmMtdGVzdC5jCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS94aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5UcG8gJChERVBESVIpL3hpbWFnZXNyY190ZXN0LXhpbWFnZXNyYy10ZXN0LlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0neGltYWdlc3JjLXRlc3QuYycgb2JqZWN0PSd4aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh4aW1hZ2VzcmNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB4aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vIGB0ZXN0IC1mICd4aW1hZ2VzcmMtdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2B4aW1hZ2VzcmMtdGVzdC5jCi0KLXhpbWFnZXNyY190ZXN0LXhpbWFnZXNyYy10ZXN0Lm9iajogeGltYWdlc3JjLXRlc3QuYwotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHhpbWFnZXNyY190ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCB4aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vYmogLU1EIC1NUCAtTUYgJChERVBESVIpL3hpbWFnZXNyY190ZXN0LXhpbWFnZXNyYy10ZXN0LlRwbyAtYyAtbyB4aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3hpbWFnZXNyYy10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAneGltYWdlc3JjLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikveGltYWdlc3JjLXRlc3QuYyc7IGZpYAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSAkKERFUERJUikveGltYWdlc3JjX3Rlc3QteGltYWdlc3JjLXRlc3QuVHBvICQoREVQRElSKS94aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3hpbWFnZXNyYy10ZXN0LmMnIG9iamVjdD0neGltYWdlc3JjX3Rlc3QteGltYWdlc3JjLXRlc3Qub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJCh4aW1hZ2VzcmNfdGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyB4aW1hZ2VzcmNfdGVzdC14aW1hZ2VzcmMtdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3hpbWFnZXNyYy10ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAneGltYWdlc3JjLXRlc3QuYyc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikveGltYWdlc3JjLXRlc3QuYyc7IGZpYAotCi1tb3N0bHljbGVhbi1saWJ0b29sOgotCS1ybSAtZiAqLmxvCi0KLWNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1yZiAubGlicyBfbGlicwotCi1JRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQotdGFnczogdGFncy1hbQotVEFHUzogdGFncwotCi10YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCi0Jc2V0IHg7IFwKLQloZXJlPWBwd2RgOyBcCi0JJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAotCXNoaWZ0OyBcCi0JaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKLQkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCi0JICBlbHNlIFwKLQkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAgICQkdW5pcXVlOyBcCi0JICBmaTsgXAotCWZpCi1jdGFnczogY3RhZ3MtYW0KLQotQ1RBR1M6IGN0YWdzCi1jdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQotCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKLQkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdW5pcXVlCi0KLUdUQUdTOgotCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi1jc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCi0KLWNzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKLQlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAotCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAotCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAotCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKLQllc2FjOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKLQkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKLQkgIGVsc2UgXAotCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAotCSAgZmk7IFwKLQlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLQotZGlzdGRpcjogJChESVNURklMRVMpCi0JQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAotCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKLQlsaXN0PSckKERJU1RGSUxFUyknOyBcCi0JICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAotCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKLQkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCi0JY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAotCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAotCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAotCQkJICAgc29ydCAtdWAgOzsgXAotCWVzYWM7IFwKLQlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKLQkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKLQkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCi0JICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCi0JICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCi0JICAgIGZpOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKLQkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKLQkgICAgZmk7IFwKLQkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAotCSAgZWxzZSBcCi0JICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCi0JICAgIHx8IGV4aXQgMTsgXAotCSAgZmk7IFwKLQlkb25lCi1jaGVjay1hbTogYWxsLWFtCi1jaGVjazogY2hlY2stYW0KLWFsbC1hbTogTWFrZWZpbGUgJChQUk9HUkFNUykKLWluc3RhbGxkaXJzOgotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQlpZiB0ZXN0IC16ICckKFNUUklQKSc7IHRoZW4gXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICAgaW5zdGFsbDsgXAotCWVsc2UgXAotCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKLQkgICAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICAgICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknIiBpbnN0YWxsOyBcCi0JZmkKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0KLWRpc3RjbGVhbi1nZW5lcmljOgotCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQotCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQotCi1tYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6Ci0JQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgotCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKLWNsZWFuOiBjbGVhbi1hbQotCi1jbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIFwKLQltb3N0bHljbGVhbi1hbQotCi1kaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLWRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbToKLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06Ci0KLWluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCi0KLWluc3RhbGwtaHRtbC1hbToKLQotaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KLQotaW5zdGFsbC1pbmZvLWFtOgotCi1pbnN0YWxsLW1hbjoKLQotaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCi0KLWluc3RhbGwtcGRmLWFtOgotCi1pbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCi0KLWluc3RhbGwtcHMtYW06Ci0KLWluc3RhbGxjaGVjay1hbToKLQotbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQotCS1ybSAtcmYgLi8kKERFUERJUikKLQktcm0gLWYgTWFrZWZpbGUKLW1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKLQotbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCi0KLW1vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wKLQotcGRmOiBwZGYtYW0KLQotcGRmLWFtOgotCi1wczogcHMtYW0KLQotcHMtYW06Ci0KLXVuaW5zdGFsbC1hbToKLQotLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAotCi0uUEhPTlk6IENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGNzY29wZWxpc3QtYW0gY3RhZ3MgXAotCWN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAotCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAotCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgXAotCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBcCi0JaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAotCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtCi0KLS5QUkVDSU9VUzogTWFrZWZpbGUKLQotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jIGIvdGVzdHMvaWNsZXMvZXF1YWxpemVyLXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgzYmEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9pY2xlcy9lcXVhbGl6ZXItdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS8qIEdTdHJlYW1lciB0ZXN0IGZvciB0aGUgZXF1YWxpemVyIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qCi0gKiBXaWxsIHRlc3RzIHRoZSBlcXVhbGl6ZXIgYnkgZmFkaW5nIGFsbCBiYW5kcyBpbiBhbmQgb3V0IG9uZSBieSBvbmUgYW5kCi0gKiBmaW5hbHkgYWxsIHRvZ2V0aGVyLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGVxdWFsaXplcl90ZXN0X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGVxdWFsaXplcl90ZXN0X2RlYnVnCi0KLXN0YXRpYyBHc3RCdXMgKnBpcGVsaW5lX2J1czsKLQotc3RhdGljIGdib29sZWFuCi1jaGVja19idXMgKEdzdENsb2NrVGltZSBtYXhfd2FpdF90aW1lKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChwaXBlbGluZV9idXMsIEdTVF9NRVNTQUdFX0VSUk9SIHwgR1NUX01FU1NBR0VfRU9TLAotICAgICAgbWF4X3dhaXRfdGltZSk7Ci0KLSAgaWYgKG1zZyA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUikgewotICAgIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgICBnY2hhciAqZGVidWcgPSBOVUxMOwotCi0gICAgZ19hc3NlcnQgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfRVJST1IpOwotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkZWJ1Zyk7Ci0gICAgR1NUX0VSUk9SICgiRVJST1I6ICVzIFslc10iLCBlcnItPm1lc3NhZ2UsIGRlYnVnKTsKLSAgICBnX3ByaW50ICgiXG49PT09PT09PT09PT4gRVJST1I6ICVzXG4lc1xuXG4iLCBlcnItPm1lc3NhZ2UsIGRlYnVnKTsKLSAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICBnX2ZyZWUgKGRlYnVnKTsKLSAgfQotCi0gIGlmIChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUykgewotICAgIGdfcHJpbnQgKCJcbiA9PT0gRU9TID09PVxuXG4iKTsKLSAgfQotCi0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICByZXR1cm4gVFJVRTsKLX0KLQotLy8gZml4IGJlbG93Ci0KLXN0YXRpYyB2b2lkCi1lcXVhbGl6ZXJfc2V0X2JhbmRfdmFsdWUgKEdzdEVsZW1lbnQgKiBlcSwgZ3VpbnQgYmFuZCwgZ2RvdWJsZSB2YWwpCi17Ci0gIEdPYmplY3QgKmNoaWxkOwotCi0gIGNoaWxkID0gZ3N0X2NoaWxkX3Byb3h5X2dldF9jaGlsZF9ieV9pbmRleCAoR1NUX0NISUxEX1BST1hZIChlcSksIGJhbmQpOwotICBnX29iamVjdF9zZXQgKGNoaWxkLCAiZ2FpbiIsIHZhbCwgTlVMTCk7Ci0gIGdfb2JqZWN0X3VucmVmIChjaGlsZCk7Ci0gIGdfcHJpbnQgKCJCYW5kICUyZDogJS4yZlxuIiwgYmFuZCwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQKLWVxdWFsaXplcl9zZXRfYWxsX2JhbmRfdmFsdWVzIChHc3RFbGVtZW50ICogZXEsIGd1aW50IG51bSwgZ2RvdWJsZSB2YWwpCi17Ci0gIGdpbnQgaTsKLSAgR09iamVjdCAqY2hpbGQ7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgY2hpbGQgPSBnc3RfY2hpbGRfcHJveHlfZ2V0X2NoaWxkX2J5X2luZGV4IChHU1RfQ0hJTERfUFJPWFkgKGVxKSwgaSk7Ci0gICAgZ19vYmplY3Rfc2V0IChjaGlsZCwgImdhaW4iLCB2YWwsIE5VTEwpOwotICAgIGdfb2JqZWN0X3VucmVmIChjaGlsZCk7Ci0gIH0KLSAgZ19wcmludCAoIkFsbCBiYW5kczogJS4yZlxuIiwgdmFsKTsKLX0KLQotLy8gZml4IGFib3ZlCi0KLXN0YXRpYyBnYm9vbGVhbgotZXF1YWxpemVyX3NldF9iYW5kX3ZhbHVlX2FuZF93YWl0IChHc3RFbGVtZW50ICogZXEsIGd1aW50IGJhbmQsIGdkb3VibGUgdmFsKQotewotICBlcXVhbGl6ZXJfc2V0X2JhbmRfdmFsdWUgKGVxLCBiYW5kLCB2YWwpOwotICByZXR1cm4gY2hlY2tfYnVzICgxMDAgKiBHU1RfTVNFQ09ORCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZXF1YWxpemVyX3NldF9hbGxfYmFuZF92YWx1ZXNfYW5kX3dhaXQgKEdzdEVsZW1lbnQgKiBlcSwgZ3VpbnQgbnVtLCBnZG91YmxlIHZhbCkKLXsKLSAgZXF1YWxpemVyX3NldF9hbGxfYmFuZF92YWx1ZXMgKGVxLCBudW0sIHZhbCk7Ci0gIHJldHVybiBjaGVja19idXMgKDEwMCAqIEdTVF9NU0VDT05EKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3NsaWRlcl9maWRkbGluZyAoR3N0RWxlbWVudCAqIHBsYXliaW4sIEdzdEVsZW1lbnQgKiBlcSkKLXsKLSAgZ2Jvb2xlYW4gc3RvcDsKLSAgZ3VpbnQgbnVtX2JhbmRzLCBpOwotICBnZG91YmxlIGQsIHN0ZXAgPSAwLjU7Ci0KLSAgc3RvcCA9IEZBTFNFOwotCi0gIGdfb2JqZWN0X2dldCAoZXEsICJudW0tYmFuZHMiLCAmbnVtX2JhbmRzLCBOVUxMKTsKLQotICBnX3ByaW50ICgiJXUgYmFuZHMuXG4iLCBudW1fYmFuZHMpOwotCi0gIHdoaWxlICghc3RvcCkgewotICAgIGZvciAoaSA9IDA7ICFzdG9wICYmIGkgPCBudW1fYmFuZHM7ICsraSkgewotICAgICAgZCA9IC0yNC4wOwotICAgICAgd2hpbGUgKCFzdG9wICYmIGQgPD0gMTIuMCkgewotICAgICAgICBzdG9wID0gZXF1YWxpemVyX3NldF9iYW5kX3ZhbHVlX2FuZF93YWl0IChlcSwgaSwgZCk7Ci0gICAgICAgIGQgKz0gc3RlcDsKLSAgICAgIH0KLSAgICAgIGQgPSAxMi4wOwotICAgICAgd2hpbGUgKCFzdG9wICYmIGQgPj0gLTI0LjApIHsKLSAgICAgICAgc3RvcCA9IGVxdWFsaXplcl9zZXRfYmFuZF92YWx1ZV9hbmRfd2FpdCAoZXEsIGksIGQpOwotICAgICAgICBkIC09IHN0ZXA7Ci0gICAgICB9Ci0gICAgICBkID0gLTI0LjA7Ci0gICAgICB3aGlsZSAoIXN0b3AgJiYgZCA8PSAxMi4wKSB7Ci0gICAgICAgIHN0b3AgPSBlcXVhbGl6ZXJfc2V0X2JhbmRfdmFsdWVfYW5kX3dhaXQgKGVxLCBpLCBkKTsKLSAgICAgICAgZCArPSBzdGVwOwotICAgICAgfQotICAgIH0KLQotICAgIGQgPSAwLjA7Ci0gICAgd2hpbGUgKCFzdG9wICYmIGQgPD0gMTIuMCkgewotICAgICAgc3RvcCA9IGVxdWFsaXplcl9zZXRfYWxsX2JhbmRfdmFsdWVzX2FuZF93YWl0IChlcSwgbnVtX2JhbmRzLCBkKTsKLSAgICAgIGQgKz0gc3RlcDsKLSAgICB9Ci0gICAgZCA9IDEyLjA7Ci0gICAgd2hpbGUgKCFzdG9wICYmIGQgPj0gLTI0LjApIHsKLSAgICAgIHN0b3AgPSBlcXVhbGl6ZXJfc2V0X2FsbF9iYW5kX3ZhbHVlc19hbmRfd2FpdCAoZXEsIG51bV9iYW5kcywgZCk7Ci0gICAgICBkIC09IHN0ZXA7Ci0gICAgfQotICAgIGQgPSAtMjQuMDsKLSAgICB3aGlsZSAoIXN0b3AgJiYgZCA8PSAwLjApIHsKLSAgICAgIHN0b3AgPSBlcXVhbGl6ZXJfc2V0X2FsbF9iYW5kX3ZhbHVlc19hbmRfd2FpdCAoZXEsIG51bV9iYW5kcywgZCk7Ci0gICAgICBkICs9IHN0ZXA7Ci0gICAgfQotICB9Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBnY2hhciAqb3B0X2F1ZGlvc2lua19zdHIgPSBOVUxMOwotICBnY2hhciAqKmZpbGVuYW1lcyA9IE5VTEw7Ci0gIGNvbnN0IEdPcHRpb25FbnRyeSB0ZXN0X2dvcHRpb25zW10gPSB7Ci0gICAgeyJhdWRpb3NpbmsiLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfU1RSSU5HLCAmb3B0X2F1ZGlvc2lua19zdHIsCi0gICAgICAgICJhdWRpb3NpbmsgdG8gdXNlIChkZWZhdWx0OiBhdXRvYXVkaW9zaW5rKSIsIE5VTEx9LAotICAgIHtHX09QVElPTl9SRU1BSU5JTkcsIDAsIDAsIEdfT1BUSU9OX0FSR19GSUxFTkFNRV9BUlJBWSwgJmZpbGVuYW1lcywgTlVMTH0sCi0gICAge05VTEwsICdcMCcsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEx9Ci0gIH07Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdFcnJvciAqb3B0X2VyciA9IE5VTEw7Ci0KLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICBHc3RFbGVtZW50ICpwbGF5YmluLCAqc2luaywgKmJpbiwgKmVxLCAqYXVjb252OwotICBHc3RQYWQgKmVxX3NpbmtwYWQ7Ci0gIGdjaGFyICp1cmk7Ci0KLSAgLyogY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzaW5nICovCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiRklMRU5BTUUiKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCB0ZXN0X2dvcHRpb25zLCBOVUxMKTsKLQotICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmb3B0X2VycikpIHsKLSAgICBnX2Vycm9yICgiRXJyb3IgcGFyc2luZyBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiLCBvcHRfZXJyLT5tZXNzYWdlKTsKLSAgICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJm9wdF9lcnIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0KLSAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQgKGVxdWFsaXplcl90ZXN0X2RlYnVnLCAiZXF1YWxpemVydGVzdCIsIDAsICJlcXRlc3QiKTsKLQotICBpZiAoZmlsZW5hbWVzID09IE5VTEwgfHwgKmZpbGVuYW1lcyA9PSBOVUxMKSB7Ci0gICAgZ19wcmludGVyciAoIlBsZWFzZSBzcGVjaWZ5IGEgZmlsZSB0byBwbGF5IGJhY2tcbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIHBsYXliaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5YmluIiwgInBsYXliaW4iKTsKLSAgaWYgKHBsYXliaW4gPT0gTlVMTCkgewotICAgIGdfZXJyb3IgKCJDb3VsZG4ndCBjcmVhdGUgJ3BsYXliaW4nIGVsZW1lbnQiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpZiAob3B0X2F1ZGlvc2lua19zdHIpIHsKLSAgICBnX3ByaW50ICgiVHJ5aW5nIGF1ZGlvc2luayAnJXMnIC4uLiIsIG9wdF9hdWRpb3Npbmtfc3RyKTsKLSAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChvcHRfYXVkaW9zaW5rX3N0ciwgInNpbmsiKTsKLSAgICBnX3ByaW50ICgiJXNcbiIsIChzaW5rKSA/ICJvayIgOiAiZWxlbWVudCBjb3VsZG4ndCBiZSBjcmVhdGVkIik7Ci0gIH0gZWxzZSB7Ci0gICAgc2luayA9IE5VTEw7Ci0gIH0KLSAgaWYgKHNpbmsgPT0gTlVMTCkgewotICAgIGdfcHJpbnQgKCJUcnlpbmcgYXVkaW9zaW5rICclcycgLi4uIiwgImF1dG9hdWRpb3NpbmsiKTsKLSAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXV0b2F1ZGlvc2luayIsICJzaW5rIik7Ci0gICAgZ19wcmludCAoIiVzXG4iLCAoc2luaykgPyAib2siIDogImVsZW1lbnQgY291bGRuJ3QgYmUgY3JlYXRlZCIpOwotICB9Ci0gIGlmIChzaW5rID09IE5VTEwpIHsKLSAgICBnX3ByaW50ICgiVHJ5aW5nIGF1ZGlvc2luayAnJXMnIC4uLiIsICJhbHNhc2luayIpOwotICAgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhbHNhc2luayIsICJzaW5rIik7Ci0gICAgZ19wcmludCAoIiVzXG4iLCAoc2luaykgPyAib2siIDogImVsZW1lbnQgY291bGRuJ3QgYmUgY3JlYXRlZCIpOwotICB9Ci0gIGlmIChzaW5rID09IE5VTEwpIHsKLSAgICBnX3ByaW50ICgiVHJ5aW5nIGF1ZGlvc2luayAnJXMnIC4uLiIsICJvc3NzaW5rIik7Ci0gICAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoIm9zc3NpbmsiLCAic2luayIpOwotICAgIGdfcHJpbnQgKCIlc1xuIiwgKHNpbmspID8gIm9rIiA6ICJlbGVtZW50IGNvdWxkbid0IGJlIGNyZWF0ZWQiKTsKLSAgfQotCi0gIGdfYXNzZXJ0IChzaW5rICE9IE5VTEwpOwotCi0gIGJpbiA9IGdzdF9iaW5fbmV3ICgiYXVzaW5rYmluIik7Ci0gIGdfYXNzZXJ0IChiaW4gIT0gTlVMTCk7Ci0KLSAgZXEgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJlcXVhbGl6ZXItbmJhbmRzIiwgImVxdWFsaXplciIpOwotICBnX2Fzc2VydCAoZXEgIT0gTlVMTCk7Ci0KLSAgYXVjb252ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiYXVkaW9jb252ZXJ0IiwgImVxYXVjb252Iik7Ci0gIGdfYXNzZXJ0IChhdWNvbnYgIT0gTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAoYmluKSwgZXEsIGF1Y29udiwgc2luaywgTlVMTCk7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChlcSwgYXVjb252KSkKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGxpbmsgZXF1YWxpemVyIHRvIGF1ZGlvY29udmVydCIpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfbGluayAoYXVjb252LCBzaW5rKSkKLSAgICBnX2Vycm9yICgiRmFpbGVkIHRvIGxpbmsgYXVkaW9jb252ZXJ0IHRvIGF1ZGlvIHNpbmsiKTsKLQotICBlcV9zaW5rcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVxLCAic2luayIpOwotICBnX2Fzc2VydCAoZXFfc2lua3BhZCAhPSBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9hZGRfcGFkIChiaW4sIGdzdF9naG9zdF9wYWRfbmV3IChOVUxMLCBlcV9zaW5rcGFkKSk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGVxX3NpbmtwYWQpOwotCi0gIGdfb2JqZWN0X3NldCAocGxheWJpbiwgImF1ZGlvLXNpbmsiLCBiaW4sIE5VTEwpOwotCi0gIC8qIHdvbid0IHdvcms6IHVyaSA9IGdzdF91cmlfY29uc3RydWN0ICgiZmlsZSIsIGZpbGVuYW1lc1swXSk7ICovCi0gIHVyaSA9IGdfc3RyZHVwX3ByaW50ZiAoImZpbGU6Ly8lcyIsIGZpbGVuYW1lc1swXSk7Ci0gIGdfb2JqZWN0X3NldCAocGxheWJpbiwgInVyaSIsIHVyaSwgTlVMTCk7Ci0gIGdfZnJlZSAodXJpKTsKLQotICBwaXBlbGluZV9idXMgPSBHU1RfRUxFTUVOVF9CVVMgKHBsYXliaW4pOwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheWJpbiwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBpZiAocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkgewotICAgIGdfcHJpbnRlcnIgKCJGYWlsZWQgdG8gc2V0IHBsYXliaW4gdG8gUExBWUlOR1xuIik7Ci0gICAgY2hlY2tfYnVzICgxICogR1NUX1NFQ09ORCk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgcmV0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwbGF5YmluLCBOVUxMLCBOVUxMLCA1ICogR1NUX1NFQ09ORCk7Ci0gIGlmIChyZXQgPT0gR1NUX1NUQVRFX0NIQU5HRV9BU1lOQykgewotICAgIGdfcHJpbnRlcnIgKCJGYWlsZWQgdG8gZ28gdG8gUExBWUlORyBpbiA1IHNlY29uZHMsIGJhaWxpbmcgb3V0XG4iKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0gZWxzZSBpZiAocmV0ICE9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUykgewotICAgIGdfcHJpbnRlcnIgKCJTdGF0ZSBjaGFuZ2UgdG8gUExBWUlORyBmYWlsZWRcbiIpOwotICAgIGNoZWNrX2J1cyAoMSAqIEdTVF9TRUNPTkQpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGdfcHJpbnQgKCJQbGF5aW5nIC4uLlxuIik7Ci0gIGRvX3NsaWRlcl9maWRkbGluZyAocGxheWJpbiwgZXEpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheWJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwbGF5YmluKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2ljbGVzL2dka3BpeGJ1Zm92ZXJsYXktdGVzdC5jIGIvdGVzdHMvaWNsZXMvZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1Mjc2ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvaWNsZXMvZ2RrcGl4YnVmb3ZlcmxheS10ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLyogR1N0cmVhbWVyIGdka3BpeGJ1Zm92ZXJsYXkgdGVzdCBhcHAKLSAqIENvcHlyaWdodCAoQykgMjAxNCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgY29tPgotCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgotI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jZGVmaW5lIFZJREVPX1dJRFRIIDcyMAotI2RlZmluZSBWSURFT19IRUlHSFQgNDgwCi0jZGVmaW5lIFZJREVPX0ZQUyA1MAotCi0vKiBHZGtQaXhidWYgUkdCQSBDLVNvdXJjZSBpbWFnZSBkdW1wIGZyb20gZ2RrLXBpeGJ1Zi1jc291cmNlIC0tcmF3LAotICogZ3ppcHBlZCBhbmQgdGhlbiBiYXNlNjQgZW5jb2RlZCAqLwotY29uc3QgZ2NoYXIgZ3ppcHBlZF9waXhkYXRhX2Jhc2U2NFtdID0KLSAgICAiSDRzSUNQWC9aMVFBQTJ4dloyOHVjR2w0QU8yZHNaSHJOaENHK2V3SzJJSTY0Q2x5cmhtblR0U0JoNGtMVU9MUUFVdXdFaFNnRnRpQSIKLSAgICAiQTdhZ3dBMndCVDVBWEo1dzRQNUxnS0xFTzk3ZXpEZjJTQ0FJQWZ0akZ3dVE3L2MvLy9vankvNzcrOGVQN0pjcysvV2ZMTXYrdC96VyIKLSAgICAiZFYzMnBTbUszSEs2c1haYkZPWFY5UFpmV2lwTGJXa3NIZEhRWnhWcFpQK0VlN3U2Mi9kN3J0MGZpdklxaW1Kbk9YK3cvemhhdXE2OCIKLSAgICAiYVdqZXZmZFVSMWgzdlhxL0tNcXp1ZnVlRk4xSjFGRStzdGY4S2ZDem9iWjNxL2VQb2p5VDN2OGdEU3lCMDlHRk5EN2cvTjAxNHJwbCIKLSAgICAiNDF4RitXejAvaTgxN253RmplcFArUmIwUG5Ed09VT2VoZVB5UXExZXVybHJTa1haT2tWeDdPYmxiR0s0M3VwZit6Y3F5bGRoT1QyMiIKLSAgICAiNUd2Vjl5bktYSXJpUURwS3llMjQyTGRjdmUyS3NrWDZkZWFSV1ZlZWJucGR1MzJLb3J5YzR0L2lhS2tzbW05VnZnM1czbmVXaytWcyIKLSAgICAicVMydHBTT3U5Tm1adExHNGY3UjE1cGFTN2pYY3QxcTdYeFRsMlpEZDE1N2RwMUEvNnE5SSsxV2crUUgxZzhwbWNiN00wc3pVSHNlViIKLSAgICAiL0tUVHRKZzM5WHl1ZEgvTkFTbWJoZnpPVXRxVE5IbWhldzFjZ2xoVDlhZDhPMTZrdjdtNGVGVDMvcFZOUTc3SVg4c2hMZ1cvUm5zVyIKLSAgICAiTGk3VjV5NFVKYURvOXduT1Q5U2pxMWZ6bjRvU1FYSGZ0NHRaMDBWcHI1akkzeWlLd21PMXN5LzYzR1pLek5wUytkVnlMc2FZbmVWayIKLSAgICAiVWQrcmJJcWkzMk0va0M3RHRhWHpuNnZ0OVZtOTVaYlMwbGc2NHJ4Mm55bktkeUhRM29DK0EwNlp4ZHRia3p0V3VuZHBxUzFmS281aiIKLSAgICAiOU9mUTgraktKTmJXOTg3ZXllNDdRR081V0U2dS9CUGFrSlAycnQ0OTI3WDdKaGFuTmFCQnpRVXBFTWJtVTJoSms2Nk8yZnR0N2xyUyIKLSAgICAiZjh2YzR5bCswUDdsbHNweVdhcE9sM3RoOUhkZGU0eVZ6NG0xN2VNRDJwUDhaQlhqSTBsM0o3b0cxUmYxRGxIN2R5Qk9wS3VCMitkQiIKLSAgICAiMlp6S1hTM3VndzkrbG5LWkI0OW9IMmJMMW93R0g5SzR2WDVQN1lnKzArTzEvVWovWFNSbThlcDlXczZMY2xyUmZlK04xK3hZSXhqeiIKLSAgICAiNDlKcmg2RCttNjhpblN5cFBlUWphN3BYUlpwMy96MVA2TTdYTSt4WCs3ZXpuRWxIYzNFNjNIdjJ4V21vbzg5SDR5TEVucERnK29ycSIKLSAgICAiRHNuSkZxN29XcVl0TGhkN3NiVGczaTNkTDJWTzJYbHQ1T283RHpZMVVjOFZ0T25nOWVNWnRQMGN0cG5tSmE3ODdUY20vamJVdG1IYyIKLSAgICAieGZtRytwMGJ3ejBSOXQxaFlyMzNXVGdqL1pFZmUxUjdIZm5KM05OQ2pJYktvUDhmMVNCbjJ3Mk5xM2h0WUk5bzd1Qm9wblJJOW5tTyIKLSAgICAick0vWnZlaWpoV3VsZWUrREZyeDJ4WlNIZTBHbW45OWl4NXNkOTZBKzFFOTd3ODhwQjhiWDFBQnViZllLNER4Ryttc1lQYldXa3NxVSIKLSAgICAiZ3U1YTB1L082OFBRM3Q5OWhXRjhrVzl2QzJnUWFXVHlXdEQyc0I1VVZ6T2hHZVJMSlIyeS9wQjBrOVJIZ0NxeFhhUDJrUDVRbjlUVSIKLSAgICAibitIZTdydW13Ty9qNW9TcjBGYW5RWmYvaklwMzMrNjUwcVhYalNqMkZQMit5NThBYllWclBzNVBqdXlPeHNUdnE1SCt5WWI4TW9mZyIKLSAgICAidThyZ21LYjJ2cS9DK2xQdE1MajJLT2pCYnlQU3FUUzNOOVQyWS9ENVNiQXRkdDFyNHVhcG9aOWlmZStWcm9IemxRbjJaQ2YwZHc3SyIKLSAgICAiN3JrMkNuMlZNbzZ6MTVwUDFLUHp0NU43MkxUKzQvUTM2aHY3ZCtSOElOTi9vUjJ6ZHVuWkVjeXZBTnVFUGozU05sa05tdkhjSVk2eCIKLSAgICAiNGVlSFdia2lTZnVndkJUM2plTFlpZktkQ2RhSGdnYkMrUTdWaStZT3Jpem5XNVBHOEJFTkFqM0c1RllRVHNzbFd2Y3h1cXFBQmtlNiIKLSAgICAib1h6b3FHeUVmY0Mxa3VublhSUnZjZk9tMk45bU9vNHN6WDFkZi9EbkI0UDlCYnNPTW1BTk5YZjhGOVRnYUIxcDVMbHBwQmVoZnIrLyIKLSAgICAiMFBpd3VoSitZK2hicFhwYkdzTmJMdFRjYzY2TFB6UDMxdStyRHpuUGVzSlBEbm5TNU55Mm9NR1JuU2RvRU9WRVJqcEUycVR2VG1BYyIKLSAgICAicEd1UTdZZzVFeVA3UURZM2dqUW96UkV6TkloaU5YVHYxTmkxQmVPQ3l2dnhPSnF6VUp0elVENk1XYVgxd0tkNFA5SGJnbWZkaEZ3TCIKLSAgICAicDBGT3I5eDZFT25nbXRLSHB0OFRHTlV4Y1EyeVRYR2VOTEwvbEh6NFF4bzA5LzB0Tk44Z0g0emFpbkljeUs3WnVGN1E0RDZpRGFsMSIKLSAgICAiMWtFNVpEK2JmRCtEc0I0OEJ1WHk3TDcvL21Fdmd1bHJLV2QzaXlVaTdaUHpTK0o2QzF3eitYeUZrZk1XQjBEMDJ0SHJsMkZmTURZWCIKLSAgICAieWZVdml0WGcyUXZCcmxITXlNNEpFVzNvcUMrNS9vcnltd2JFVVd0cjVjazY1UEtpZFZDR3k0bGVoNzFBWmd3bHY5Sk42VkRRc1pTUCIKLSAgICAiUWRkTStpVXc3bk01QkhXbjdqV0tiUmY2VnNySmNqRUZ0R3VnMmRyN0h2bnRPWVFhNU9hblRUOGpZLy8ydE1jWGF1eEN1VkJPbys5biIKLSAgICAiWVlSeG5OSWh2TjdnMkFuR0kraWFtRDR3NmJud3FOODEwUWN0YVVNNlY4TGxESkZQazlhN3FmbGx6bWRWRVcyWWcxOHZta2MveFRydyIKLSAgICAieVRxVTl1REQvZmdLK2I5RUhjSzFuVERHY0YwSHJvazZHeXUwMGMzM0tCWmxpZnp0WVk2ZlBiY0cycG9VcXdsMkxlV1h1WHY0T1ZFcCIKLSAgICAiOTVYVVgvNllvajViV3g4djBGOE9mTjNnNzJyUzNURldld2s2Ukh1SFhPd2tqb1hoZlZuc09jZEZjNXhVSi9KdG83Z0tsRVg1eFVsTiIKLSAgICAieC9UL1JOdkZ2aEEwR0RYbkNmZWRQWTkrWlVoanZ1NFdmeTVQMENIS29YR2FFTWNpMVRZajdzZnFKYkkrdUJmd1NOdUZlbFBQWGtwKyIKLSAgICAiazgyM0JHWFFXdUdoM0FtWVJ6Zjl6cEtNT2Z2eVlCOHVFaXVDOFpYTzAwenVaMDIwRzgzcnM4WS94VThnbXdjYVJQVkthK3VrL0xMaCIKLSAgICAiOHkxTlVFYktmYythd3czZVAveFM3M3hJQmV6NVhiS1B6d3VXM0g0aDZFYzNqNkU5YmE2UGtSOU1HZ3ZCTm1QYkxlWGE1OFRmS1JxTSIKLSAgICAiYnJ0SlBKdVRvbS92R200ZHdKMmxRWG1zV2UvY000bDdtRnRCT0NjalBSK0I5aU1HVzRMbkdXTEhhNGJkek5xYmo2d2oyUVlFWFlYKyIKLSAgICAiSlBXTUtsY092cGRFYUljVXUwYmxVQTFlWDdCbmJ4N29zMDIvTjRpTFJTTVk3UXVhY1d3U2MyNFlqaFhRZ3hRL3NUNHMwUWJRczJrTyIKLSAgICAiZGwxbytoaVlzMDlwLzh4LzdrUGFxdy8zR1pHZmtQYm1rYTlDNXdpUTMwUnpKZHAzUjJjVGgzTUtvems2dGExYmdmWUdVelU0MnNNWCIKLSAgICAieHNQMXE0dHR1THhmY2k3UHMxOC9Sd2ZQSTZmMng0UU9HMDg3L204YXJSbE4ydk45eVArRzV5aVRjcEVUYlVCeENwbzdrR1p6b2YzRCIKLSAgICAiT3dHRzU2Y2E3L053RGtkcndjMXFVTmlYVDRIcng5aG4xV0xPajBuN3dERjdWY2thOUd3MzlseUw5R3o1MVA3OGViQXYxRzlCZldpdiIKLSAgICAiQTJrUSttS2h6YlAyYUV6OHM4RHNtV0dEZmJ4amMvK09FTkRmaWI0YjN1TlVlam1acUdkOGcvNUVZM2sxQ1d0MmN6OW5PTlIzODBYTSIKLSAgICAiK0hQdkhsbml2VS9jZTE5YUE5NkZBL1RzUDI5ODRxNmpjcGVnL2Y3NWtUeW94d2ZGaVNXNlprSkxIREh2dDhucDkzSHYzeGxpQ0xUMiIKLSAgICAiT0lFeDNPVGVJTE1mMkV6dENZS1lOY1lHMmZNUWl2S2RZYlFVcFkxcy9NNlpUY2JwaXZKTU12NVpwZGhuN21kcFYxR1VPMWwvTmpUVSIKLSAgICAiVXN4N1o4SXozWnVNMHhYbEZXVDhzNENzRGttekpaUEQwVGhVVVdhU3llOFRIWjZScU9qL3VmMkwxZjc5VDBYWkNwbjh2SkowUGtiOSIKLSAgICAibjZJc0NPVm9CcC9IdlMrbW9lODMrVDRkUlZFVVpSbXluMkY5c3dsOXlBQUEiOwotCi1zdGF0aWMgR2RrUGl4YnVmICpsb2dvX3BpeGJ1ZjsKLQotc3RhdGljIEdNYWluTG9vcCAqbWFpbl9sb29wOwotc3RhdGljIGdpbnQgY291bnQ7Ci0KLXN0YXRpYyBHZGtQaXhidWYgKgotY3JlYXRlX292ZXJsYXlfcGl4YnVmICh2b2lkKQotewotICBHWmxpYkRlY29tcHJlc3NvciAqZGVjb21wcmVzczsKLSAgR0NvbnZlcnRlclJlc3VsdCBkZWNvbXBfcmVzOwotICBndWNoYXIgKmd6aXBwZWRfcGl4ZGF0YSwgKnBpeGRhdGEsICpwaXhlbHNfY29weTsKLSAgZ3NpemUgZ3ppcHBlZF9zaXplLCBieXRlc19yZWFkLCBwaXhkYXRhX3NpemU7Ci0gIGd1aW50IHN0cmlkZSwgd2lkdGgsIGhlaWdodDsKLSAgR2RrUGl4YnVmICpwaXhidWY7Ci0KLSAgZ3ppcHBlZF9waXhkYXRhID0gZ19iYXNlNjRfZGVjb2RlIChnemlwcGVkX3BpeGRhdGFfYmFzZTY0LCAmZ3ppcHBlZF9zaXplKTsKLSAgZ19hc3NlcnQgKGd6aXBwZWRfcGl4ZGF0YSAhPSBOVUxMKTsKLQotICBwaXhkYXRhID0gZ19tYWxsb2MgKDY0ICogMTAyNCk7Ci0KLSAgZGVjb21wcmVzcyA9IGdfemxpYl9kZWNvbXByZXNzb3JfbmV3IChHX1pMSUJfQ09NUFJFU1NPUl9GT1JNQVRfR1pJUCk7Ci0gIGRlY29tcF9yZXMgPSBnX2NvbnZlcnRlcl9jb252ZXJ0IChHX0NPTlZFUlRFUiAoZGVjb21wcmVzcyksCi0gICAgICBnemlwcGVkX3BpeGRhdGEsIGd6aXBwZWRfc2l6ZSwgcGl4ZGF0YSwgNjQgKiAxMDI0LAotICAgICAgR19DT05WRVJURVJfSU5QVVRfQVRfRU5ELCAmYnl0ZXNfcmVhZCwgJnBpeGRhdGFfc2l6ZSwgTlVMTCk7Ci0gIGdfYXNzZXJ0IChkZWNvbXBfcmVzID09IEdfQ09OVkVSVEVSX0ZJTklTSEVEKTsKLSAgZ19hc3NlcnQgKGJ5dGVzX3JlYWQgPT0gZ3ppcHBlZF9zaXplKTsKLSAgZ19mcmVlIChnemlwcGVkX3BpeGRhdGEpOwotICBnX29iamVjdF91bnJlZiAoZGVjb21wcmVzcyk7Ci0KLSAgLyogMDogUGl4YnVmIG1hZ2ljICgweDQ3NjQ2YjUwKSAqLwotICBnX2Fzc2VydCAoR1NUX1JFQURfVUlOVDMyX0JFIChwaXhkYXRhKSA9PSAweDQ3NjQ2YjUwKTsKLQotICAvKiBwaXhkYXRhIGxlbmd0aCAqLwotICBwaXhkYXRhX3NpemUgPSBHU1RfUkVBRF9VSU5UMzJfQkUgKHBpeGRhdGEgKyA0KTsKLSAgZ19hc3NlcnQgKHBpeGRhdGFfc2l6ZSA+IDQgKyA0ICsgNCArIDQgKyA0ICsgNCk7Ci0KLSAgLyogcmF3LCA4LWJpdCBkZXB0aCwgUkdCQSAqLwotICBnX2Fzc2VydCAoR1NUX1JFQURfVUlOVDMyX0JFIChwaXhkYXRhICsgOCkgPT0gMHgwMTAxMDAwMik7Ci0KLSAgc3RyaWRlID0gR1NUX1JFQURfVUlOVDMyX0JFIChwaXhkYXRhICsgMTIpOwotICB3aWR0aCA9IEdTVF9SRUFEX1VJTlQzMl9CRSAocGl4ZGF0YSArIDE2KTsKLSAgaGVpZ2h0ID0gR1NUX1JFQURfVUlOVDMyX0JFIChwaXhkYXRhICsgMjApOwotCi0gIGdfYXNzZXJ0IChwaXhkYXRhX3NpemUgPT0gMjQgKyBoZWlnaHQgKiBzdHJpZGUpOwotCi0gIHBpeGVsc19jb3B5ID0gZ19tZW1kdXAgKHBpeGRhdGEgKyAyNCwgaGVpZ2h0ICogc3RyaWRlKTsKLQotICBwaXhidWYgPQotICAgICAgZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9kYXRhIChwaXhlbHNfY29weSwgR0RLX0NPTE9SU1BBQ0VfUkdCLCBUUlVFLCA4LAotICAgICAgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCAoR2RrUGl4YnVmRGVzdHJveU5vdGlmeSkgZ19mcmVlLCBwaXhlbHNfY29weSk7Ci0KLSAgZ19hc3NlcnQgKHBpeGJ1ZiAhPSBOVUxMKTsKLQotICBnX2ZyZWUgKHBpeGRhdGEpOwotCi0gIHJldHVybiBwaXhidWY7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotYnVzX2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR01haW5Mb29wICpsb29wID0gdXNlcl9kYXRhOwotCi0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgICAgZ2NoYXIgKmRiZzsKLQotICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRiZyk7Ci0gICAgICBnc3Rfb2JqZWN0X2RlZmF1bHRfZXJyb3IgKG1zZy0+c3JjLCBlcnIsIGRiZyk7Ci0gICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIGdfZnJlZSAoZGJnKTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotICByZXR1cm4gVFJVRTsKLX0KLQotI2RlZmluZSBTUEVFRF9TQ0FMRV9GQUNUT1IgKFZJREVPX0ZQUyAqIDQpCi0KLS8qIG5pY2tlZCBmcm9tIHZpZGVvdGVzdHNyYydzIGJhbGwgcGF0dGVybiByZW5kZXJlciAqLwotc3RhdGljIHZvaWQKLWNhbGN1bGF0ZV9wb3NpdGlvbiAoZ2ludCAqIHgsIGdpbnQgKiB5LCBndWludCBsb2dvX3csIGd1aW50IGxvZ29faCwgZ3VpbnQgbikKLXsKLSAgZ3VpbnQgcl94ID0gbG9nb193IC8gMjsKLSAgZ3VpbnQgcl95ID0gbG9nb19oIC8gMjsKLSAgZ3VpbnQgdyA9IFZJREVPX1dJRFRIICsgbG9nb193OwotICBndWludCBoID0gVklERU9fSEVJR0hUICsgbG9nb19oOwotCi0gICp4ID0gcl94ICsgKDAuNSArIDAuNSAqIHNpbiAoMiAqIEdfUEkgKiBuIC8gU1BFRURfU0NBTEVfRkFDVE9SKSkKLSAgICAgICogKHcgLSAyICogcl94KTsKLSAgKnkgPSByX3kgKyAoMC41ICsgMC41ICogc2luICgyICogR19QSSAqIHNxcnQgKDIpICogbiAvIFNQRUVEX1NDQUxFX0ZBQ1RPUikpCi0gICAgICAqIChoIC0gMiAqIHJfeSk7Ci0KLSAgKnggLT0gbG9nb193OwotICAqeSAtPSBsb2dvX2g7Ci19Ci0KLXN0YXRpYyBHc3RQYWRQcm9iZVJldHVybgotYnVmZmVyX2NiIChHc3RQYWQgKiBwYWQsIEdzdFBhZFByb2JlSW5mbyAqIGluZm8sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLSAgR3N0RWxlbWVudCAqb3ZlcmxheSA9IEdTVF9QQURfUEFSRU5UIChwYWQpOwotICBnaW50IHgsIHksIHcsIGg7Ci0KLSAgdyA9IGdka19waXhidWZfZ2V0X3dpZHRoIChsb2dvX3BpeGJ1Zik7Ci0gIGggPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQgKGxvZ29fcGl4YnVmKTsKLQotICBjYWxjdWxhdGVfcG9zaXRpb24gKCZ4LCAmeSwgdywgaCwgKytjb3VudCk7Ci0KLSAgR1NUX0xPRyAoIiUzZCwgJTNkIiwgeCwgeSk7Ci0KLSAgZ19vYmplY3Rfc2V0IChvdmVybGF5LCAib2Zmc2V0LXgiLCB4LCAib2Zmc2V0LXkiLCB5LCBOVUxMKTsKLQotICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLX0KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIEdPcHRpb25FbnRyeSBvcHRpb25zW10gPSB7Ci0gICAge05VTEx9Ci0gIH07Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdFcnJvciAqZXJyID0gTlVMTDsKLSAgR3N0RWxlbWVudCAqc3JjLCAqcSwgKmNhcHNmaWx0ZXIsICpvdmVybGF5LCAqc2luazsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdzdFBhZCAqc2lua19wYWQ7Ci0gIEdzdENhcHMgKmZpbHRlcl9jYXBzOwotCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCBvcHRpb25zLCBHRVRURVhUX1BBQ0tBR0UpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKLSAgICBnX3ByaW50ICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotCi0gIGxvZ29fcGl4YnVmID0gY3JlYXRlX292ZXJsYXlfcGl4YnVmICgpOwotCi0gIG1haW5fbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoInBpcGVsaW5lIik7Ci0KLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgTlVMTCk7Ci0gIGdzdF91dGlsX3NldF9vYmplY3RfYXJnIChHX09CSkVDVCAoc3JjKSwgInBhdHRlcm4iLCAid2hpdGUiKTsKLQotICBvdmVybGF5ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZ2RrcGl4YnVmb3ZlcmxheSIsIE5VTEwpOwotCi0gIC8qIHNldCBwb3NpdGlvbmluZy1tb2RlIHRvIGFic29sdXRlIHNvIHdlIGNhbiBzZXQgbmVnYXRpdmUgcG9zaXRpb25zICovCi0gIGdfb2JqZWN0X3NldCAob3ZlcmxheSwgInBpeGJ1ZiIsIGxvZ29fcGl4YnVmLCAicG9zaXRpb25pbmctbW9kZSIsIDEsIE5VTEwpOwotCi0gIHNpbmtfcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKG92ZXJsYXksICJzaW5rIik7Ci0gIGdzdF9wYWRfYWRkX3Byb2JlIChzaW5rX3BhZCwgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUiwgYnVmZmVyX2NiLCBOVUxMLAotICAgICAgTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtfcGFkKTsKLQotICBxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgicXVldWUiLCBOVUxMKTsKLQotICBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsIE5VTEwpOwotICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nICgidmlkZW8veC1yYXcsIGZvcm1hdCA9ICIKLSAgICAgIEdTVF9WSURFT19PVkVSTEFZX0NPTVBPU0lUSU9OX0JMRU5EX0ZPUk1BVFMpOwotICBnc3RfY2Fwc19zZXRfc2ltcGxlIChmaWx0ZXJfY2FwcywKLSAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIFZJREVPX1dJRFRILAotICAgICAgImhlaWdodCIsIEdfVFlQRV9JTlQsIFZJREVPX0hFSUdIVCwKLSAgICAgICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwgVklERU9fRlBTLCAxLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChjYXBzZmlsdGVyLCAiY2FwcyIsIGZpbHRlcl9jYXBzLCBOVUxMKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGZpbHRlcl9jYXBzKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieGltYWdlc2luayIsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKHBpcGVsaW5lKSwgc3JjLCBxLCBvdmVybGF5LCBjYXBzZmlsdGVyLCBzaW5rLAotICAgICAgTlVMTCk7Ci0KLSAgZ3N0X2VsZW1lbnRfbGlua19tYW55IChzcmMsIHEsIG92ZXJsYXksIGNhcHNmaWx0ZXIsIHNpbmssIE5VTEwpOwotCi0gIGNvdW50ID0gMDsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgZ3N0X2J1c19hZGRfd2F0Y2ggKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBidXNfY2IsIG1haW5fbG9vcCk7Ci0KLSAgZ19tYWluX2xvb3BfcnVuIChtYWluX2xvb3ApOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX29iamVjdF91bnJlZiAobG9nb19waXhidWYpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaWNsZXMvZ2RrcGl4YnVmc2luay10ZXN0LmMgYi90ZXN0cy9pY2xlcy9nZGtwaXhidWZzaW5rLXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyODI1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9pY2xlcy9nZGtwaXhidWZzaW5rLXRlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0vKiBHU3RyZWFtZXIgaW50ZXJhY3RpdmUgdGVzdCBmb3IgdGhlIGdka3BpeGJ1ZnNpbmsgZWxlbWVudAotICogQ29weXJpZ2h0IChDKSAyMDA4IFRpbS1QaGlsaXBwIE3DvGxsZXIgPHRpbSBjZW50cmljdWxhciBuZXQ+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSMgaW5jbHVkZSAiY29uZmlnLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIEdzdEVsZW1lbnQgKnBpcGU7Ci0gIEdzdEVsZW1lbnQgKnNpbms7Ci0gIGdib29sZWFuIGdvdF92aWRlbzsKLQotICBHdGtXaWRnZXQgKndpbjsKLSAgR3RrV2lkZ2V0ICppbWc7Ci0gIEd0a1dpZGdldCAqc2xpZGVyOwotICBHdGtXaWRnZXQgKmFjY3VyYXRlX2NiOwotCi0gIGdib29sZWFuIGFjY3VyYXRlOyAgICAgICAgICAgIC8qIHdoZXRoZXIgdG8gdHJ5IGFjY3VyYXRlIHNlZWtzICovCi0KLSAgZ2ludDY0IGN1cl9wb3M7Ci0gIGdib29sZWFuIHByZXJvbGxlZDsKLX0gQXBwSW5mbzsKLQotc3RhdGljIHZvaWQgc2Vla190byAoQXBwSW5mbyAqIGluZm8sIGdkb3VibGUgcGVyY2VudCk7Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLWNyZWF0ZV9lbGVtZW50IChjb25zdCBnY2hhciAqIGZhY3RvcnlfbmFtZSkKLXsKLSAgR3N0RWxlbWVudCAqZWxlbWVudDsKLQotICBlbGVtZW50ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChmYWN0b3J5X25hbWUsIE5VTEwpOwotCi0gIGlmIChlbGVtZW50ID09IE5VTEwpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBjcmVhdGUgJyVzJyBlbGVtZW50IiwgZmFjdG9yeV9uYW1lKTsKLQotICByZXR1cm4gZWxlbWVudDsKLX0KLQotc3RhdGljIHZvaWQKLW5ld19kZWNvZGVkX3BhZCAoR3N0RWxlbWVudCAqIGRlYywgR3N0UGFkICogbmV3X3BhZCwgQXBwSW5mbyAqIGluZm8pCi17Ci0gIGNvbnN0IGdjaGFyICpzbmFtZTsKLSAgR3N0RWxlbWVudCAqY3NwLCAqc2NhbGUsICpmaWx0ZXI7Ci0gIEdzdFN0cnVjdHVyZSAqczsKLSAgR3N0Q2FwcyAqY2FwczsKLSAgR3N0UGFkICpzaW5rcGFkOwotCi0gIC8qIGFscmVhZHkgZm91bmQgYSB2aWRlbyBzdHJlYW0/ICovCi0gIGlmIChpbmZvLT5nb3RfdmlkZW8pCi0gICAgcmV0dXJuOwotCi0gIC8qIEZJWE1FOiBpcyB0aGlzIHJhY3kgb3IgZG9lcyBkZWNvZGViaW4gbWFrZSBzdXJlIGNhcHMgYXJlIGFsd2F5cwotICAgKiBuZWdvdGlhdGVkIGF0IHRoaXMgcG9pbnQ/ICovCi0gIGNhcHMgPSBnc3RfcGFkX3F1ZXJ5X2NhcHMgKG5ld19wYWQsIE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChjYXBzICE9IE5VTEwpOwotCi0gIHMgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCAwKTsKLSAgc25hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lIChzKTsKLSAgaWYgKCFnX3N0cl9oYXNfcHJlZml4IChzbmFtZSwgInZpZGVvL3gtcmF3IikpCi0gICAgZ290byBub3RfdmlkZW87Ci0KLSAgY3NwID0gY3JlYXRlX2VsZW1lbnQgKCJ2aWRlb2NvbnZlcnQiKTsKLSAgc2NhbGUgPSBjcmVhdGVfZWxlbWVudCAoInZpZGVvc2NhbGUiKTsKLSAgZmlsdGVyID0gY3JlYXRlX2VsZW1lbnQgKCJjYXBzZmlsdGVyIik7Ci0gIGluZm8tPnNpbmsgPSBjcmVhdGVfZWxlbWVudCAoImdka3BpeGJ1ZnNpbmsiKTsKLSAgZ19vYmplY3Rfc2V0IChpbmZvLT5zaW5rLCAicW9zIiwgRkFMU0UsICJtYXgtbGF0ZW5lc3MiLCAoZ2ludDY0KSAtIDEsIE5VTEwpOwotCi0gIGdzdF9iaW5fYWRkX21hbnkgKEdTVF9CSU4gKGluZm8tPnBpcGUpLCBjc3AsIHNjYWxlLCBmaWx0ZXIsIGluZm8tPnNpbmssIE5VTEwpOwotCi0gIHNpbmtwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoY3NwLCAic2luayIpOwotICBpZiAoR1NUX1BBRF9MSU5LX0ZBSUxFRCAoZ3N0X3BhZF9saW5rIChuZXdfcGFkLCBzaW5rcGFkKSkpCi0gICAgZ19lcnJvciAoIkNhbid0IGxpbmsgbmV3IGRlY29kZWQgcGFkIHRvIHZpZGVvY29udmVydCdzIHNpbmsgcGFkIik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHNpbmtwYWQpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfbGluayAoY3NwLCBzY2FsZSkpCi0gICAgZ19lcnJvciAoIkNhbid0IGxpbmsgdmlkZW9jb252ZXJ0IHRvIHZpZGVvc2NhbGUiKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChzY2FsZSwgZmlsdGVyKSkKLSAgICBnX2Vycm9yICgiQ2FuJ3QgbGluayB2aWRlb3NjYWxlIHRvIGNhcHNmaWx0ZXIiKTsKLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChmaWx0ZXIsIGluZm8tPnNpbmspKQotICAgIGdfZXJyb3IgKCJDYW4ndCBsaW5rIGNhcHNmaWx0ZXIgdG8gZ2RrcGl4YnVmc2luayIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoaW5mby0+c2luaywgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZmlsdGVyLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChzY2FsZSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoY3NwLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICBpbmZvLT5nb3RfdmlkZW8gPSBUUlVFOwotICByZXR1cm47Ci0KLW5vdF92aWRlbzoKLSAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotbm9fbW9yZV9wYWRzIChHc3RFbGVtZW50ICogZGVjb2RlYmluLCBBcHBJbmZvICogaW5mbykKLXsKLSAgaWYgKCFpbmZvLT5nb3RfdmlkZW8pIHsKLSAgICBnX2Vycm9yICgiVGhpcyBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYSB2aWRlbyB0cmFjaywgb3IgeW91IGRvIG5vdCBoYXZlICIKLSAgICAgICAgInRoZSBuZWNlc3NhcnkgZGVjb2RlcihzKSBpbnN0YWxsZWQiKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZAotYnVzX21lc3NhZ2VfY2IgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgQXBwSW5mbyAqIGluZm8pCi17Ci0gIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfQVNZTkNfRE9ORTp7Ci0gICAgICAvKiBvbmx5IGludGVyZXN0ZWQgaW4gYXN5bmMtZG9uZSBtZXNzYWdlcyBmcm9tIHRoZSB0b3AtbGV2ZWwgcGlwZWxpbmUgKi8KLSAgICAgIGlmIChtc2ctPnNyYyAhPSBHU1RfT0JKRUNUX0NBU1QgKGluZm8tPnBpcGUpKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKCFpbmZvLT5wcmVyb2xsZWQpIHsKLSAgICAgICAgLyogbWFrZSBzbGlkZXIgdmlzaWJsZSBpZiBpdCdzIG5vdCB2aXNpYmxlIGFscmVhZHkgKi8KLSAgICAgICAgZ3RrX3dpZGdldF9zaG93IChpbmZvLT5zbGlkZXIpOwotCi0gICAgICAgIC8qIGluaXRpYWwgZnJhbWUgaXMgb2Z0ZW4gYmxhY2ssIHNvIHNlZWsgdG8gYmVnaW5uaW5nIHBsdXMgYSBiaXQgKi8KLSAgICAgICAgc2Vla190byAoaW5mbywgMC4wMDEpOwotICAgICAgICBpbmZvLT5wcmVyb2xsZWQgPSBUUlVFOwotICAgICAgfQotCi0gICAgICAvKiB1cGRhdGUgcG9zaXRpb24gKi8KLSAgICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfcG9zaXRpb24gKGluZm8tPnBpcGUsIEdTVF9GT1JNQVRfVElNRSwKLSAgICAgICAgICAgICAgJmluZm8tPmN1cl9wb3MpKQotICAgICAgICBpbmZvLT5jdXJfcG9zID0gLTE7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FTEVNRU5UOnsKLSAgICAgIGNvbnN0IEdWYWx1ZSAqdmFsOwotICAgICAgR2RrUGl4YnVmICpwaXhidWYgPSBOVUxMOwotICAgICAgY29uc3QgR3N0U3RydWN0dXJlICpzdHJ1Y3R1cmU7Ci0KLSAgICAgIC8qIG9ubHkgaW50ZXJlc3RlZCBpbiBlbGVtZW50IG1lc3NhZ2VzIGZyb20gb3VyIGdka3BpeGJ1ZnNpbmsgKi8KLSAgICAgIGlmIChtc2ctPnNyYyAhPSBHU1RfT0JKRUNUX0NBU1QgKGluZm8tPnNpbmspKQotICAgICAgICBicmVhazsKLQotICAgICAgLyogb25seSBpbnRlcmVzdGVkIGluIHRoZXNlIHR3byBtZXNzYWdlcyAqLwotICAgICAgaWYgKCFnc3RfbWVzc2FnZV9oYXNfbmFtZSAobXNnLCAicHJlcm9sbC1waXhidWYiKSAmJgotICAgICAgICAgICFnc3RfbWVzc2FnZV9oYXNfbmFtZSAobXNnLCAicGl4YnVmIikpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGdfcHJpbnQgKCJwaXhidWZcbiIpOwotICAgICAgc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZSAobXNnKTsKLSAgICAgIHZhbCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlIChzdHJ1Y3R1cmUsICJwaXhidWYiKTsKLSAgICAgIGdfcmV0dXJuX2lmX2ZhaWwgKHZhbCAhPSBOVUxMKTsKLQotICAgICAgcGl4YnVmID0gR0RLX1BJWEJVRiAoZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWwpKTsKLSAgICAgIGd0a19pbWFnZV9zZXRfZnJvbV9waXhidWYgKEdUS19JTUFHRSAoaW5mby0+aW1nKSwgcGl4YnVmKTsKLSAgICAgIGdfb2JqZWN0X3VucmVmIChwaXhidWYpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgICAgZ2NoYXIgKmRiZyA9IE5VTEw7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yIChtc2csICZlcnIsICZkYmcpOwotICAgICAgZ19lcnJvciAoIkVycm9yOiAlc1xuJXNcbiIsIGVyci0+bWVzc2FnZSwgKGRiZykgPyBkYmcgOiAiIik7Ci0gICAgICBnX2NsZWFyX2Vycm9yICgmZXJyKTsKLSAgICAgIGdfZnJlZSAoZGJnKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1jcmVhdGVfcGlwZWxpbmUgKEFwcEluZm8gKiBpbmZvLCBjb25zdCBnY2hhciAqIGZpbGVuYW1lKQotewotICBHc3RFbGVtZW50ICpzcmMsICpkZWM7Ci0gIEdzdEJ1cyAqYnVzOwotCi0gIGluZm8tPnBpcGUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gY3JlYXRlX2VsZW1lbnQgKCJmaWxlc3JjIik7Ci0gIGdfb2JqZWN0X3NldCAoc3JjLCAibG9jYXRpb24iLCBmaWxlbmFtZSwgTlVMTCk7Ci0KLSAgZGVjID0gY3JlYXRlX2VsZW1lbnQgKCJkZWNvZGViaW4iKTsKLQotICBnc3RfYmluX2FkZF9tYW55IChHU1RfQklOIChpbmZvLT5waXBlKSwgc3JjLCBkZWMsIE5VTEwpOwotICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKHNyYywgZGVjKSkKLSAgICBnX2Vycm9yICgiQ2FuJ3QgbGluayBmaWxlc3JjIHRvIGRlY29kZWJpbiIpOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGRlYywgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sgKG5ld19kZWNvZGVkX3BhZCksIGluZm8pOwotCi0gIGdfc2lnbmFsX2Nvbm5lY3QgKGRlYywgIm5vLW1vcmUtcGFkcyIsIEdfQ0FMTEJBQ0sgKG5vX21vcmVfcGFkcyksIGluZm8pOwotCi0gIC8qIHNldCB1cCBidXMgKi8KLSAgYnVzID0gZ3N0X2VsZW1lbnRfZ2V0X2J1cyAoaW5mby0+cGlwZSk7Ci0gIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaCAoYnVzKTsKLSAgZ19zaWduYWxfY29ubmVjdCAoYnVzLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0sgKGJ1c19tZXNzYWdlX2NiKSwgaW5mbyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zZWVrX3RvIChBcHBJbmZvICogaW5mbywgZ2RvdWJsZSBwZXJjZW50KQotewotICBHc3RTZWVrRmxhZ3Mgc2Vla19mbGFnczsKLSAgZ2ludDY0IHNlZWtfcG9zLCBkdXIgPSAtMTsKLQotICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uIChpbmZvLT5waXBlLCBHU1RfRk9STUFUX1RJTUUsICZkdXIpCi0gICAgICB8fCBkdXIgPD0gMCkgewotICAgIGdfcHJpbnRlcnIgKCJDb3VsZCBub3QgcXVlcnkgZHVyYXRpb25cbiIpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHNlZWtfcG9zID0gZ3N0X2dkb3VibGVfdG9fZ3VpbnQ2NCAoZ3N0X2d1aW50NjRfdG9fZ2RvdWJsZSAoZHVyKSAqIHBlcmNlbnQpOwotICBnX3ByaW50ICgiU2Vla2luZyB0byAlIiBHU1RfVElNRV9GT1JNQVQgIiwgYWNjdXJhdGU6ICVkXG4iLAotICAgICAgR1NUX1RJTUVfQVJHUyAoc2Vla19wb3MpLCBpbmZvLT5hY2N1cmF0ZSk7Ci0KLSAgc2Vla19mbGFncyA9IEdTVF9TRUVLX0ZMQUdfRkxVU0g7Ci0KLSAgaWYgKGluZm8tPmFjY3VyYXRlKQotICAgIHNlZWtfZmxhZ3MgfD0gR1NUX1NFRUtfRkxBR19BQ0NVUkFURTsKLSAgZWxzZQotICAgIHNlZWtfZmxhZ3MgfD0gR1NUX1NFRUtfRkxBR19LRVlfVU5JVDsKLQotICBpZiAoIWdzdF9lbGVtZW50X3NlZWtfc2ltcGxlIChpbmZvLT5waXBlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtfZmxhZ3MsCi0gICAgICAgICAgc2Vla19wb3MpKSB7Ci0gICAgZ19wcmludGVyciAoIlNlZWsgZmFpbGVkLlxuIik7Ci0gICAgcmV0dXJuOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zbGlkZXJfY2IgKEd0a1JhbmdlICogcmFuZ2UsIEFwcEluZm8gKiBpbmZvKQotewotICBnZG91YmxlIHZhbDsKLQotICB2YWwgPSBndGtfcmFuZ2VfZ2V0X3ZhbHVlIChyYW5nZSk7Ci0gIHNlZWtfdG8gKGluZm8sIHZhbCk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqCi1zbGlkZXJfZm9ybWF0X3ZhbHVlX2NiIChHdGtTY2FsZSAqIHNjYWxlLCBnZG91YmxlIHZhbHVlLCBBcHBJbmZvICogaW5mbykKLXsKLSAgZ2NoYXIgc1s2NF07Ci0KLSAgaWYgKGluZm8tPmN1cl9wb3MgPCAwKQotICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYgKCIlMC4xZyUlIiwgdmFsdWUgKiAxMDAuMCk7Ci0KLSAgZ19zbnByaW50ZiAocywgNjQsICIlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MgKGluZm8tPmN1cl9wb3MpKTsKLSAgc1sxMF0gPSAnXDAnOwotICByZXR1cm4gZ19zdHJkdXAgKHMpOwotfQotCi1zdGF0aWMgdm9pZAotYWNjdXJhdGVfdG9nZ2xlZF9jYiAoR3RrVG9nZ2xlQnV0dG9uICogdG9nZ2xlLCBBcHBJbmZvICogaW5mbykKLXsKLSAgaW5mby0+YWNjdXJhdGUgPSBndGtfdG9nZ2xlX2J1dHRvbl9nZXRfYWN0aXZlICh0b2dnbGUpOwotfQotCi1zdGF0aWMgdm9pZAotcnVuX2d1aSAoY29uc3QgZ2NoYXIgKiBmaWxlbmFtZSkKLXsKLSAgR3RrV2lkZ2V0ICp2Ym94LCAqaGJveDsKLSAgQXBwSW5mbyAqaW5mbzsKLQotICBpbmZvID0gZ19uZXcwIChBcHBJbmZvLCAxKTsKLQotICAvKiBjcmVhdGUgcGlwZWxpbmUgKi8KLSAgaWYgKCFjcmVhdGVfcGlwZWxpbmUgKGluZm8sIGZpbGVuYW1lKSkKLSAgICBnb3RvIGRvbmU7Ci0KLSAgLyogY3JlYXRlIHdpbmRvdyAqLwotICBpbmZvLT53aW4gPSBndGtfd2luZG93X25ldyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gIGdfc2lnbmFsX2Nvbm5lY3QgKGluZm8tPndpbiwgImRlbGV0ZS1ldmVudCIsIEdfQ0FMTEJBQ0sgKGd0a19tYWluX3F1aXQpLAotICAgICAgTlVMTCk7Ci0KLSAgdmJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIDYpOwotICBndGtfY29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGggKEdUS19DT05UQUlORVIgKHZib3gpLCAxMik7Ci0gIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChpbmZvLT53aW4pLCB2Ym94KTsKLQotICBpbmZvLT5pbWcgPSBndGtfaW1hZ2VfbmV3ICgpOwotICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKHZib3gpLCBpbmZvLT5pbWcsIEZBTFNFLCBGQUxTRSwgNik7Ci0KLSAgaGJveCA9IGd0a19ib3hfbmV3IChHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgNik7Ci0gIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJveCksIGhib3gsIEZBTFNFLCBGQUxTRSwgNik7Ci0KLSAgaW5mby0+YWNjdXJhdGVfY2IgPSBndGtfY2hlY2tfYnV0dG9uX25ld193aXRoX2xhYmVsICgiYWNjdXJhdGUgc2VlayAiCi0gICAgICAiKG1pZ2h0IG5vdCB3b3JrIHJlbGlhYmx5IHdpdGggYWxsIGRlbXV4ZXJzKSIpOwotICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGhib3gpLCBpbmZvLT5hY2N1cmF0ZV9jYiwgRkFMU0UsIEZBTFNFLCA2KTsKLSAgZ19zaWduYWxfY29ubmVjdCAoaW5mby0+YWNjdXJhdGVfY2IsICJ0b2dnbGVkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKGFjY3VyYXRlX3RvZ2dsZWRfY2IpLCBpbmZvKTsKLQotICBpbmZvLT5zbGlkZXIgPSBndGtfc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLAotICAgICAgMC4wLCAxLjAsIDAuMDAxKTsKLSAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YICh2Ym94KSwgaW5mby0+c2xpZGVyLCBGQUxTRSwgRkFMU0UsIDYpOwotICBnX3NpZ25hbF9jb25uZWN0IChpbmZvLT5zbGlkZXIsICJ2YWx1ZS1jaGFuZ2VkIiwKLSAgICAgIEdfQ0FMTEJBQ0sgKHNsaWRlcl9jYiksIGluZm8pOwotICBnX3NpZ25hbF9jb25uZWN0IChpbmZvLT5zbGlkZXIsICJmb3JtYXQtdmFsdWUiLAotICAgICAgR19DQUxMQkFDSyAoc2xpZGVyX2Zvcm1hdF92YWx1ZV9jYiksIGluZm8pOwotCi0gIC8qIGFuZCBnbyEgKi8KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChpbmZvLT5waXBlLCBHU1RfU1RBVEVfUEFVU0VEKTsKLQotICBndGtfd2lkZ2V0X3Nob3dfYWxsIChpbmZvLT53aW4pOwotICBndGtfd2lkZ2V0X2hpZGUgKGluZm8tPnNsaWRlcik7ICAgICAgIC8qIGhpZGUgdW50aWwgd2UncmUgcHJlcm9sbGVkICovCi0gIGd0a19tYWluICgpOwotCi1kb25lOgotCi0gIGdfZnJlZSAoaW5mbyk7Ci19Ci0KLXN0YXRpYyBnY2hhciAqKmZpbGVuYW1lcyA9IE5VTEw7Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBzdGF0aWMgY29uc3QgR09wdGlvbkVudHJ5IHRlc3RfZ29wdGlvbnNbXSA9IHsKLSAgICB7R19PUFRJT05fUkVNQUlOSU5HLCAwLCAwLCBHX09QVElPTl9BUkdfRklMRU5BTUVfQVJSQVksICZmaWxlbmFtZXMsIE5VTEx9LAotICAgIHtOVUxMLCAnXDAnLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMfQotICB9OwotICBHT3B0aW9uQ29udGV4dCAqY3R4OwotICBHRXJyb3IgKm9wdF9lcnIgPSBOVUxMOwotCi0gIGd0a19pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIC8qIGNvbW1hbmQgbGluZSBvcHRpb24gcGFyc2luZyAqLwotICBjdHggPSBnX29wdGlvbl9jb250ZXh0X25ldyAoIiBWSURFT0ZJTEUiKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAgKGN0eCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCAoKSk7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyAoY3R4LCB0ZXN0X2dvcHRpb25zLCBOVUxMKTsKLQotICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UgKGN0eCwgJmFyZ2MsICZhcmd2LCAmb3B0X2VycikpIHsKLSAgICBnX2Vycm9yICgiRXJyb3IgcGFyc2luZyBjb21tYW5kIGxpbmUgb3B0aW9uczogJXMiLCBvcHRfZXJyLT5tZXNzYWdlKTsKLSAgICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJm9wdF9lcnIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlmIChmaWxlbmFtZXMgPT0gTlVMTCB8fCBmaWxlbmFtZXNbMF0gPT0gTlVMTCB8fCBmaWxlbmFtZXNbMF1bMF0gPT0gJ1wwJykgewotICAgIGdfcHJpbnRlcnIgKCJQbGVhc2Ugc3BlY2lmeSBhIHBhdGggdG8gYSB2aWRlbyBmaWxlXG5cbiIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIHJ1bl9ndWkgKGZpbGVuYW1lc1swXSk7Ci0KLSAgZ19mcmVlIChmaWxlbmFtZXMpOwotICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy90ZXN0LWFjY3VyYXRlLXNlZWsuYyBiL3Rlc3RzL2ljbGVzL3Rlc3QtYWNjdXJhdGUtc2Vlay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmUxMzdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ljbGVzL3Rlc3QtYWNjdXJhdGUtc2Vlay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLS8qIEdTdHJlYW1lciBpbnRlcmFjdGl2ZSB0ZXN0IGZvciBhY2N1cmF0ZSBzZWVraW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKiBCYXNlZCBvbiBweXRob24gc2NyaXB0IGJ5IEtpYmVvbSBLaW0gPGtrYjExMEBnbWFpbC5jb20+Ci0gKi8KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNkZWZpbmUgX0dOVV9TT1VSQ0UgICAgICAgICAgICAgLyogZm9yIG1lbW1lbSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9iYXNlL2Jhc2UuaD4KLSNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8uaD4KLSNpbmNsdWRlIDxnc3QvYXBwL2FwcC5oPgotCi0jZGVmaW5lIFNBTVBMRV9GUkVRIDQ0MTAwCi0KLXN0YXRpYyBHc3RDbG9ja1RpbWUKLXNhbXBsZV90b19uYW5vdGltZSAoZ3VpbnQgc2FtcGxlKQotewotICByZXR1cm4gKGd1aW50NjQpICgoMS4wICogc2FtcGxlICogR1NUX1NFQ09ORCAvIFNBTVBMRV9GUkVRKSArIDAuNSk7Ci19Ci0KLXN0YXRpYyBndWludAotbmFub3RpbWVfdG9fc2FtcGxlIChHc3RDbG9ja1RpbWUgbmFub3RpbWUpCi17Ci0gIHJldHVybiBnc3RfdXRpbF91aW50NjRfc2NhbGVfcm91bmQgKG5hbm90aW1lLCBTQU1QTEVfRlJFUSwgR1NUX1NFQ09ORCk7Ci19Ci0KLXN0YXRpYyBHc3RCdWZmZXIgKgotZ2VuZXJhdGVfdGVzdF9kYXRhIChndWludCBOKQotewotICBnaW50MTYgKmxlZnQsICpyaWdodCwgKnN0ZXJlbzsKLSAgZ3VpbnQgbGFyZ2VOLCBpLCBqOwotCi0gIC8qIDMyNzY3ID0gKDIgKiogMTUpIC0gMSAqLwotICAvKiAzMjc2OCA9ICgyICoqIDE1KSAqLwotICBsYXJnZU4gPSAoKE4gKyAzMjc2NykgLyAzMjc2OCkgKiAzMjc2ODsKLSAgbGVmdCA9IGdfbmV3MCAoZ2ludDE2LCBsYXJnZU4pOwotICByaWdodCA9IGdfbmV3MCAoZ2ludDE2LCBsYXJnZU4pOwotICBzdGVyZW8gPSBnX25ldzAgKGdpbnQxNiwgMiAqIGxhcmdlTik7Ci0KLSAgZm9yIChpID0gMDsgaSA8IChsYXJnZU4gLyAzMjc2OCk7ICsraSkgewotICAgIGdpbnQgYyA9IDA7Ci0KLSAgICBmb3IgKGogPSBpICogMzI3Njg7IGogPCAoKGkgKyAxKSAqIDMyNzY4KTsgKytqKSB7Ci0gICAgICBsZWZ0W2pdID0gaTsKLQotICAgICAgaWYgKGkgJSAyID09IDApIHsKLSAgICAgICAgcmlnaHRbal0gPSBjOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmlnaHRbal0gPSAzMjc2NyAtIGM7Ci0gICAgICB9Ci0gICAgICArK2M7Ci0gICAgfQotICB9Ci0KLSAgLyogY291bGQganVzdCBmaWxsIHN0ZXJlbyBkaXJlY3RseSBmcm9tIHRoZSBzdGFydCwgYnV0IGtlZXBpbmcgb3JpZ2luYWwgY29kZSBmb3Igbm93ICovCi0gIGZvciAoaSA9IDA7IGkgPCBsYXJnZU47ICsraSkgewotICAgIHN0ZXJlb1soMiAqIGkpICsgMF0gPSBsZWZ0W2ldOwotICAgIHN0ZXJlb1soMiAqIGkpICsgMV0gPSByaWdodFtpXTsKLSAgfQotICBnX2ZyZWUgKGxlZnQpOwotICBnX2ZyZWUgKHJpZ2h0KTsKLQotICByZXR1cm4gZ3N0X2J1ZmZlcl9uZXdfd3JhcHBlZCAoc3RlcmVvLCAyICogbGFyZ2VOICogc2l6ZW9mIChnaW50MTYpKTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbmVyYXRlX3Rlc3Rfc291bmQgKGNvbnN0IGdjaGFyICogZm4sIGNvbnN0IGdjaGFyICogbGF1bmNoX3N0cmluZywKLSAgICBndWludCBudW1fc2FtcGxlcykKLXsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpwYXJzZSwgKmVuY19iaW4sICpzaW5rOwotICBHc3RGbG93UmV0dXJuIGZsb3c7Ci0gIEdzdE1lc3NhZ2UgKm1zZzsKLSAgR3N0QnVmZmVyICpidWY7Ci0gIEdzdENhcHMgKmNhcHM7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3IChOVUxMKTsKLQotICBzcmMgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJhcHBzcmMiLCBOVUxMKTsKLQotICBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSAoImF1ZGlvL3gtcmF3IiwKLSAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBHU1RfQVVESU9fTkUgKFMxNiksCi0gICAgICAicmF0ZSIsIEdfVFlQRV9JTlQsIFNBTVBMRV9GUkVRLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAyLAotICAgICAgImxheW91dCIsIEdfVFlQRV9TVFJJTkcsICJpbnRlcmxlYXZlZCIsCi0gICAgICAiY2hhbm5lbC1tYXNrIiwgR1NUX1RZUEVfQklUTUFTSywgKGd1aW50NjQpIDMsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNyYywgImNhcHMiLCBjYXBzLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCBOVUxMKTsKLSAgZ3N0X2Jhc2Vfc3JjX3NldF9mb3JtYXQgKEdTVF9CQVNFX1NSQyAoc3JjKSwgR1NUX0ZPUk1BVF9USU1FKTsKLSAgZ3N0X2NhcHNfdW5yZWYgKGNhcHMpOwotCi0gIC8qIGF1ZGlvcGFyc2UgdG8gcHV0IHByb3BlciB0aW1lc3RhbXBzIG9uIGJ1ZmZlcnMgZm9yIHVzLCB3aXRob3V0IHdoaWNoCi0gICAqIHZvcmJpc2VuYyBpbiBwYXJ0aWN1bGFyIGlzIHVuaGFwcHkgKG9yIG9nZ211eCwgcmF0aGVyKSAqLwotICBwYXJzZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImF1ZGlvcGFyc2UiLCBOVUxMKTsKLSAgaWYgKHBhcnNlICE9IE5VTEwpIHsKLSAgICBnX29iamVjdF9zZXQgKHBhcnNlLCAidXNlLXNpbmstY2FwcyIsIFRSVUUsIE5VTEwpOwotICB9IGVsc2UgewotICAgIHBhcnNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiaWRlbnRpdHkiLCBOVUxMKTsKLSAgICBnX3dhcm5pbmcgKCJhdWRpb3BhcnNlIGVsZW1lbnQgbm90IGF2YWlsYWJsZSwgdm9yYmlzL29nZyBtaWdodCBub3Qgd29ya1xuIik7Ci0gIH0KLQotICBlbmNfYmluID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uIChsYXVuY2hfc3RyaW5nLCBUUlVFLCBOVUxMKTsKLQotICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiZmlsZXNpbmsiLCBOVUxMKTsKLSAgZ19vYmplY3Rfc2V0IChzaW5rLCAibG9jYXRpb24iLCBmbiwgTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIHBhcnNlLCBlbmNfYmluLCBzaW5rLCBOVUxMKTsKLQotICBnc3RfZWxlbWVudF9saW5rX21hbnkgKHNyYywgcGFyc2UsIGVuY19iaW4sIHNpbmssIE5VTEwpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICBidWYgPSBnZW5lcmF0ZV90ZXN0X2RhdGEgKG51bV9zYW1wbGVzKTsKLSAgZmxvdyA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyIChHU1RfQVBQX1NSQyAoc3JjKSwgYnVmKTsKLSAgZ19hc3NlcnQgKGZsb3cgPT0gR1NUX0ZMT1dfT0spOwotCi0gIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0gKEdTVF9BUFBfU1JDIChzcmMpKTsKLQotICAvKmdfcHJpbnQgKCJnZW5lcmF0aW5nIHRlc3Qgc291bmQgJXMsIHdhaXRpbmcgZm9yIEVPUy4uXG4iLCBmbik7ICovCi0KLSAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLAotICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX01FU1NBR0VfRU9TIHwgR1NUX01FU1NBR0VfRVJST1IpOwotCi0gIGdfYXNzZXJ0IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpID09IEdTVF9NRVNTQUdFX0VPUyk7Ci0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIC8qIGdfcHJpbnQgKCJEb25lICVzXG4iLCBmbik7ICovCi19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3NlZWtfRk9STUFUX1RJTUVfYnlfc2FtcGxlIChjb25zdCBnY2hhciAqIGZuLCBHTGlzdCAqIHNlZWtfcG9zaXRpb25zKQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZSwgKnNyYywgKnNpbms7Ci0gIEdzdEFkYXB0ZXIgKmFkYXB0ZXI7Ci0gIEdzdFNhbXBsZSAqc2FtcGxlOwotICBHc3RDYXBzICpjYXBzOwotICBnY29uc3Rwb2ludGVyIGFuc3dlcjsKLSAgZ3VpbnQgYW5zd2VyX3NpemU7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGFyc2VfbGF1bmNoICgiZmlsZXNyYyBuYW1lPXNyYyAhIGRlY29kZWJpbiAhICIKLSAgICAgICJhdWRpb2NvbnZlcnQgZGl0aGVyaW5nPTAgISBhcHBzaW5rIG5hbWU9c2luayIsIE5VTEwpOwotCi0gIHNyYyA9IGdzdF9iaW5fZ2V0X2J5X25hbWUgKEdTVF9CSU4gKHBpcGVsaW5lKSwgInNyYyIpOwotICBnX29iamVjdF9zZXQgKHNyYywgImxvY2F0aW9uIiwgZm4sIE5VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzcmMpOwotCi0gIHNpbmsgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlbGluZSksICJzaW5rIik7Ci0gIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxlICgiYXVkaW8veC1yYXciLAotICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIEdTVF9BVURJT19ORSAoUzE2KSwKLSAgICAgICJyYXRlIiwgR19UWVBFX0lOVCwgU0FNUExFX0ZSRVEsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDIsIE5VTEwpOwotICBnX29iamVjdF9zZXQgKHNpbmssICJjYXBzIiwgY2FwcywgInN5bmMiLCBGQUxTRSwgTlVMTCk7Ci0gIGdzdF9jYXBzX3VucmVmIChjYXBzKTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgLyogd2FpdCBmb3IgcHJlcm9sbCwgc28gd2UgY2FuIHNlZWsgKi8KLSAgZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKEdTVF9FTEVNRU5UX0JVUyAocGlwZWxpbmUpLCBHU1RfQ0xPQ0tfVElNRV9OT05FLAotICAgICAgR1NUX01FU1NBR0VfQVNZTkNfRE9ORSk7Ci0KLSAgLyogZmlyc3QsIHJlYWQgZW50aXJlIGZpbGUgdG8gZW5kICovCi0gIGFkYXB0ZXIgPSBnc3RfYWRhcHRlcl9uZXcgKCk7Ci0gIHdoaWxlICgoc2FtcGxlID0gZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlIChHU1RfQVBQX1NJTksgKHNpbmspKSkpIHsKLSAgICBnc3RfYWRhcHRlcl9wdXNoIChhZGFwdGVyLCBnc3RfYnVmZmVyX3JlZiAoZ3N0X3NhbXBsZV9nZXRfYnVmZmVyIChzYW1wbGUpKSk7Ci0gICAgZ3N0X3NhbXBsZV91bnJlZiAoc2FtcGxlKTsKLSAgfQotICBhbnN3ZXJfc2l6ZSA9IGdzdF9hZGFwdGVyX2F2YWlsYWJsZSAoYWRhcHRlcik7Ci0gIGFuc3dlciA9IGdzdF9hZGFwdGVyX21hcCAoYWRhcHRlciwgYW5zd2VyX3NpemUpOwotICAvKiBnX3ByaW50ICgiJXM6IHJlYWQgJXUgYnl0ZXNcbiIsIGZuLCBhbnN3ZXJfc2l6ZSk7ICovCi0KLSAgZ19wcmludCAoIiUxMHNcdCUxMHNcdCUxMHNcbiIsICJyZXF1ZXN0ZWQiLCAic2FtcGxlIHBlciB0cyIsICJhY3R1YWwoZGF0YSkiKTsKLQotICB3aGlsZSAoc2Vla19wb3NpdGlvbnMgIT0gTlVMTCkgewotICAgIGdjb25zdHBvaW50ZXIgZm91bmQ7Ci0gICAgR3N0TWFwSW5mbyBtYXA7Ci0gICAgR3N0QnVmZmVyICpidWY7Ci0gICAgZ2Jvb2xlYW4gcmV0OwotICAgIGd1aW50IGFjdHVhbF9wb3NpdGlvbiwgYnVmZmVyX3RpbWVzdGFtcF9wb3NpdGlvbjsKLSAgICBndWludCBzZWVrX3NhbXBsZTsKLQotICAgIHNlZWtfc2FtcGxlID0gR1BPSU5URVJfVE9fVUlOVCAoc2Vla19wb3NpdGlvbnMtPmRhdGEpOwotCi0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2Vla19zaW1wbGUgKHBpcGVsaW5lLCBHU1RfRk9STUFUX1RJTUUsCi0gICAgICAgIEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFLAotICAgICAgICBzYW1wbGVfdG9fbmFub3RpbWUgKHNlZWtfc2FtcGxlKSk7Ci0KLSAgICBnX2Fzc2VydCAocmV0KTsKLQotICAgIHNhbXBsZSA9IGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZSAoR1NUX0FQUF9TSU5LIChzaW5rKSk7Ci0KLSAgICBidWYgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIgKHNhbXBsZSk7Ci0gICAgZ3N0X2J1ZmZlcl9tYXAgKGJ1ZiwgJm1hcCwgR1NUX01BUF9SRUFEKTsKLSAgICBmb3VuZCA9IG1lbW1lbSAoYW5zd2VyLCBhbnN3ZXJfc2l6ZSwgbWFwLmRhdGEsIG1hcC5zaXplKTsKLSAgICBnc3RfYnVmZmVyX3VubWFwIChidWYsICZtYXApOwotCi0gICAgZ19hc3NlcnQgKGZvdW5kICE9IE5VTEwpOwotICAgIGFjdHVhbF9wb3NpdGlvbiA9ICgoZ29mZnNldCkgKChndWludDggKikgZm91bmQgLSAoZ3VpbnQ4ICopIGFuc3dlcikpIC8gNDsKLSAgICBidWZmZXJfdGltZXN0YW1wX3Bvc2l0aW9uID0gbmFub3RpbWVfdG9fc2FtcGxlIChHU1RfQlVGRkVSX1BUUyAoYnVmKSk7Ci0gICAgZ19wcmludCAoIiUxMHVcdCUxMHVcdCUxMHVcbiIsIHNlZWtfc2FtcGxlLCBidWZmZXJfdGltZXN0YW1wX3Bvc2l0aW9uLAotICAgICAgICBhY3R1YWxfcG9zaXRpb24pOwotICAgIGdzdF9zYW1wbGVfdW5yZWYgKHNhbXBsZSk7Ci0KLSAgICBzZWVrX3Bvc2l0aW9ucyA9IHNlZWtfcG9zaXRpb25zLT5uZXh0OwotICB9Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChzaW5rKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotICBnX29iamVjdF91bnJlZiAoYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyBHTGlzdCAqCi1jcmVhdGVfdGVzdF9zYW1wbGVzIChndWludCBmcm9tLCBndWludCB0bywgZ3VpbnQgc3RlcCkKLXsKLSAgR1F1ZXVlIHEgPSBHX1FVRVVFX0lOSVQ7Ci0gIGd1aW50IGk7Ci0KLSAgZm9yIChpID0gZnJvbTsgaSA8IHRvOyBpICs9IHN0ZXApCi0gICAgZ19xdWV1ZV9wdXNoX3RhaWwgKCZxLCBHVUlOVF9UT19QT0lOVEVSIChpKSk7Ci0KLSAgcmV0dXJuIHEuaGVhZDsKLX0KLQotI2RlZmluZSBTRUNTIDEwCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHTGlzdCAqdGVzdF9zYW1wbGVzOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIHRlc3Rfc2FtcGxlcyA9IGNyZWF0ZV90ZXN0X3NhbXBsZXMgKFNBTVBMRV9GUkVRLCBTQU1QTEVfRlJFUSAqIDIsIDUwMDApOwotCi0gIGdfcHJpbnQgKCJcbndhdjpcbiIpOwotICBnZW5lcmF0ZV90ZXN0X3NvdW5kICgidGVzdC53YXYiLCAid2F2ZW5jIiwgU0FNUExFX0ZSRVEgKiBTRUNTKTsKLSAgdGVzdF9zZWVrX0ZPUk1BVF9USU1FX2J5X3NhbXBsZSAoInRlc3Qud2F2IiwgdGVzdF9zYW1wbGVzKTsKLQotICBnX3ByaW50ICgiXG5mbGFjOlxuIik7Ci0gIGdlbmVyYXRlX3Rlc3Rfc291bmQgKCJ0ZXN0LmZsYWMiLCAiZmxhY2VuYyIsIFNBTVBMRV9GUkVRICogU0VDUyk7Ci0gIHRlc3Rfc2Vla19GT1JNQVRfVElNRV9ieV9zYW1wbGUgKCJ0ZXN0LmZsYWMiLCB0ZXN0X3NhbXBsZXMpOwotCi0gIGdfcHJpbnQgKCJcbm9nZzpcbiIpOwotICBnZW5lcmF0ZV90ZXN0X3NvdW5kICgidGVzdC5vZ2ciLAotICAgICAgImF1ZGlvY29udmVydCBkaXRoZXJpbmc9MCAhIHZvcmJpc2VuYyBxdWFsaXR5PTEgISBvZ2dtdXgiLAotICAgICAgU0FNUExFX0ZSRVEgKiBTRUNTKTsKLSAgdGVzdF9zZWVrX0ZPUk1BVF9USU1FX2J5X3NhbXBsZSAoInRlc3Qub2dnIiwgdGVzdF9zYW1wbGVzKTsKLQotICBnX3ByaW50ICgiXG5tcDM6XG4iKTsKLSAgZ2VuZXJhdGVfdGVzdF9zb3VuZCAoInRlc3QubXAzIiwgImxhbWVtcDNlbmMgYml0cmF0ZT0zMjAiLAotICAgICAgU0FNUExFX0ZSRVEgKiBTRUNTKTsKLSAgdGVzdF9zZWVrX0ZPUk1BVF9USU1FX2J5X3NhbXBsZSAoInRlc3QubXAzIiwgdGVzdF9zYW1wbGVzKTsKLQotICBnX2xpc3RfZnJlZSAodGVzdF9zYW1wbGVzKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy90ZXN0LW9zczQuYyBiL3Rlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGJlNDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ljbGVzL3Rlc3Qtb3NzNC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qIEdTdHJlYW1lciBPU1M0IGF1ZGlvIHRlc3RzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLS8qIEZJWE1FIDAuMTE6IHN1cHByZXNzIHdhcm5pbmdzIGZvciBkZXByZWNhdGVkIEFQSSBzdWNoIGFzIEdWYWx1ZUFycmF5Ci0gKiB3aXRoIG5ld2VyIEdMaWIgdmVyc2lvbnMgKD49IDIuMzEuMCkgKi8KLSNkZWZpbmUgR0xJQl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi1zdGF0aWMgZ2Jvb2xlYW4gb3B0X3Nob3dfbWl4ZXJfbWVzc2FnZXMgPSBGQUxTRTsKLQotI2RlZmluZSBXQUlUX1RJTUUgIDYwLjAgICAgICAgICAvKiBpbiBzZWNvbmRzICovCi0KLXN0YXRpYyB2b2lkCi1wcm9iZV9wYWQgKEdzdEVsZW1lbnQgKiBlbGVtZW50LCBjb25zdCBnY2hhciAqIHBhZF9uYW1lKQotewotICBHc3RDYXBzICpjYXBzID0gTlVMTDsKLSAgR3N0UGFkICpwYWQ7Ci0gIGd1aW50IGk7Ci0KLSAgcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQgKGVsZW1lbnQsIHBhZF9uYW1lKTsKLSAgaWYgKHBhZCA9PSBOVUxMKQotICAgIHJldHVybjsKLQotICBjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzIChwYWQsIE5VTEwpOwotICBnX3JldHVybl9pZl9mYWlsIChjYXBzICE9IE5VTEwpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoY2Fwcyk7ICsraSkgewotICAgIGdjaGFyICpzOwotCi0gICAgcyA9IGdzdF9zdHJ1Y3R1cmVfdG9fc3RyaW5nIChnc3RfY2Fwc19nZXRfc3RydWN0dXJlIChjYXBzLCBpKSk7Ci0gICAgZ19wcmludCAoIiAgJTRzWyVkXTogJXNcbiIsIEdTVF9QQURfTkFNRSAocGFkKSwgaSwgcyk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9iZV9kZXRhaWxzIChHc3RFbGVtZW50ICogZWxlbWVudCkKLXsKLSAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotCi0gIHJldCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX1JFQURZKTsKLSAgaWYgKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICBnX3ByaW50ICgiQ291bGQgbm90IHNldCBlbGVtZW50ICVzIHRvIFJFQURZLiIsIEdTVF9FTEVNRU5UX05BTUUgKGVsZW1lbnQpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBwcm9iZV9wYWQgKGVsZW1lbnQsICJzaW5rIik7Ci0gIHByb2JlX3BhZCAoZWxlbWVudCwgInNyYyIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvYmVfZWxlbWVudCAoY29uc3QgZ2NoYXIgKiBuYW1lKQotewotICBHc3RFbGVtZW50ICplbGVtZW50OwotICBnY2hhciAqZGV2bmFtZSA9IE5VTEw7Ci0KLSAgZWxlbWVudCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAobmFtZSwgbmFtZSk7Ci0KLSAgLyogbWFrZSBzdXJlIHdlIGRvbid0IGRlYWRsb2NrIG9uIEdTVF9FTEVNRU5UX0VSUk9SIG9yIGRvIG90aGVyIHNpbGx5IHRoaW5ncwotICAgKiBpZiB3ZSB0cnkgdG8gcXVlcnkgdGhlICJkZXZpY2UtbmFtZSIgcHJvcGVydHkgd2hlbiB0aGUgZGV2aWNlIGlzbid0IG9wZW4gKi8KLSAgZ19vYmplY3Rfc2V0IChlbGVtZW50LCAiZGV2aWNlIiwgIi9kZXYvZG9lcy9ub3QvZXhpc3QiLCBOVUxMKTsKLSAgZ19vYmplY3RfZ2V0IChlbGVtZW50LCAiZGV2aWNlLW5hbWUiLCAmZGV2bmFtZSwgTlVMTCk7Ci0gIEdTVF9MT0cgKCJkZXZuYW1lOiAnJXMnIiwgR1NUX1NUUl9OVUxMIChkZXZuYW1lKSk7Ci0gIGdfYXNzZXJ0IChkZXZuYW1lID09IE5VTEwgfHwgKmRldm5hbWUgPT0gJ1wwJyk7Ci0KLSAgLyogYW5kIG5vdyBmb3IgcmVhbCAqLwotCi0gIHByb2JlX2RldGFpbHMgKGVsZW1lbnQpOwotCi0gIGdzdF9vYmplY3RfdW5yZWYgKGVsZW1lbnQpOwotfQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgR09wdGlvbkVudHJ5IG9wdGlvbnNbXSA9IHsKLSAgICB7InNob3ctbWl4ZXItbWVzc2FnZXMiLCAnbScsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAmb3B0X3Nob3dfbWl4ZXJfbWVzc2FnZXMsCi0gICAgICAgICJGb3IgbWl4ZXIgZWxlbWVudHMsIHdhaXQgNjAgc2Vjb25kcyBhbmQgc2hvdyBhbnkgbWl4ZXIgbWVzc2FnZXMgIgotICAgICAgICAgICIoZm9yIGRlYnVnZ2luZyBhdXRvLW5vdGlmaWNhdGlvbnMpIiwgTlVMTH0sCi0gICAge05VTEwsfQotICB9OwotICBHT3B0aW9uQ29udGV4dCAqY3R4OwotICBHRXJyb3IgKmVyciA9IE5VTEw7Ci0KLSAgY3R4ID0gZ19vcHRpb25fY29udGV4dF9uZXcgKCIiKTsKLSAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzIChjdHgsIG9wdGlvbnMsIE5VTEwpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJmVycikpIHsKLSAgICBnX3ByaW50ICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyLT5tZXNzYWdlKTsKLSAgICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7Ci0gICAgZ19jbGVhcl9lcnJvciAoJmVycik7Ci0gICAgZXhpdCAoMSk7Ci0gIH0KLSAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotCi0gIHByb2JlX2VsZW1lbnQgKCJvc3M0c2luayIpOwotICBwcm9iZV9lbGVtZW50ICgib3NzNHNyYyIpOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaWNsZXMvdGVzdC1zZWdtZW50LXNlZWtzLmMgYi90ZXN0cy9pY2xlcy90ZXN0LXNlZ21lbnQtc2Vla3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM5YjY3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9pY2xlcy90ZXN0LXNlZ21lbnQtc2Vla3MuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKiBHU3RyZWFtZXIgaW50ZXJhY3RpdmUgdGVzdCBmb3IgYWNjdXJhdGUgc2VnbWVudCBzZWVraW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGltLVBoaWxpcHAgTcO8bGxlciA8dGltIGNlbnRyaWN1bGFyIGNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotLyogUGxheXMgdGhlIHByb3ZpZGVkIGZpbGUgb25lIHNlY29uZCBhdCBhIHRpbWUgdXNpbmcgc2VnbWVudCBzZWVrcy4KLSAqIFRoZW9yZXRpY2FsbHkgdGhpcyBzaG91bGQgYmUganVzdCBhcyBzbW9vdGggYXMgaWYgd2UgcGxheWVkIHRoZQotICogZmlsZSBmcm9tIHN0YXJ0IHRvIHN0b3AgaW4gb25lIGdvLCBjZXJ0YWlubHkgd2l0aG91dCBoaWNrdXBzLgotICovCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotIyBpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotCi0jZGVmaW5lIFNFR01FTlRfRFVSQVRJT04gKDEgKiBHU1RfU0VDT05EKQotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgR3N0RWxlbWVudCAqcGxheWJpbjsKLSAgR3N0TWVzc2FnZSAqbXNnOwotICBnY2hhciAqdXJpOwotICBnaW50NjQgZHVyLCBzdGFydCwgc3RvcDsKLSAgZ2Jvb2xlYW4gcHJlcm9sbGVkID0gRkFMU0U7Ci0KLSAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgZ19wcmludGVyciAoIlVzYWdlOiAlcyBGSUxFTkFNRVxuIiwgYXJndlswXSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgaWYgKGdzdF91cmlfaXNfdmFsaWQgKGFyZ3ZbMV0pKQotICAgIHVyaSA9IGdfc3RyZHVwIChhcmd2WzFdKTsKLSAgZWxzZQotICAgIHVyaSA9IGdzdF9maWxlbmFtZV90b191cmkgKGFyZ3ZbMV0sIE5VTEwpOwotCi0gIGdfcHJpbnQgKCJ1cmk6ICVzXG4iLCB1cmkpOwotCi0gIHBsYXliaW4gPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJwbGF5YmluIiwgTlVMTCk7Ci0gIGdfb2JqZWN0X3NldCAocGxheWJpbiwgInVyaSIsIHVyaSwgTlVMTCk7Ci0KLSNpZiAwCi0gIHsKLSAgICBHc3RFbGVtZW50ICpzcmM7Ci0KLSAgICBwbGF5YmluID0gZ3N0X3BhcnNlX2xhdW5jaCAoInVyaWRlY29kZWJpbiBuYW1lPWQgISBxdWV1ZSAhICIKLSAgICAgICAgImZpbGVzaW5rIGxvY2F0aW9uPS90bXAvcmF3MS5kYXRhIiwgTlVMTCk7Ci0gICAgc3JjID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGxheWJpbiksICJkIik7Ci0gICAgZ19vYmplY3Rfc2V0IChzcmMsICJ1cmkiLCB1cmksIE5VTEwpOwotICAgIGdzdF9vYmplY3RfdW5yZWYgKHNyYyk7Ci0gIH0KLSNlbmRpZgotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheWJpbiwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0KLSAgLyogd2FpdCBmb3IgcHJlcm9sbCAqLwotICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoR1NUX0VMRU1FTlRfQlVTIChwbGF5YmluKSwKLSAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEdTVF9NRVNTQUdFX0FTWU5DX0RPTkUgfCBHU1RfTUVTU0FHRV9FUlJPUik7Ci0KLSAgZ19hc3NlcnQgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgIT0gR1NUX01FU1NBR0VfRVJST1IpOwotICBwcmVyb2xsZWQgPSBUUlVFOwotCi0gIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24gKHBsYXliaW4sIEdTVF9GT1JNQVRfVElNRSwgJmR1cikpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBxdWVyeSBkdXJhdGlvbiFcbiIpOwotCi0gIGdfcHJpbnQgKCJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFUICJcbiIsIEdTVF9USU1FX0FSR1MgKGR1cikpOwotCi0gIHN0YXJ0ID0gMDsKLSAgZG8gewotICAgIEdzdFNlZWtGbGFncyBzZWVrX2ZsYWdzOwotICAgIGdib29sZWFuIHJldDsKLSAgICBnYm9vbGVhbiBzZWdtZW50X2RvbmUgPSBGQUxTRTsKLQotICAgIHNlZWtfZmxhZ3MgPSBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFIHwgR1NUX1NFRUtfRkxBR19TRUdNRU5UOwotCi0gICAgaWYgKHN0YXJ0ID09IDApIHsKLSAgICAgIHByZXJvbGxlZCA9IEZBTFNFOwotICAgICAgc2Vla19mbGFncyB8PSBHU1RfU0VFS19GTEFHX0ZMVVNIOwotICAgIH0KLQotICAgIHN0b3AgPSBzdGFydCArIFNFR01FTlRfRFVSQVRJT047Ci0KLSAgICBnX3ByaW50ICgiU2VnbWVudDogJSIgR1NUX1RJTUVfRk9STUFUICItJSIgR1NUX1RJTUVfRk9STUFUICJcbiIsCi0gICAgICAgIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSwgR1NUX1RJTUVfQVJHUyAoc3RvcCkpOwotCi0gICAgcmV0ID0gZ3N0X2VsZW1lbnRfc2VlayAocGxheWJpbiwgMS4wLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtfZmxhZ3MsCi0gICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCBzdGFydCwgR1NUX1NFRUtfVFlQRV9TRVQsIHN0b3ApOwotCi0gICAgZ19hc3NlcnQgKHJldCk7Ci0KLSAgICBpZiAoIXByZXJvbGxlZCkgewotICAgICAgd2hpbGUgKCFwcmVyb2xsZWQpIHsKLSAgICAgICAgLyogd2FpdCBmb3IgcHJlcm9sbCBhZ2FpbiAqLwotICAgICAgICBtc2cgPSBnc3RfYnVzX3RpbWVkX3BvcF9maWx0ZXJlZCAoR1NUX0VMRU1FTlRfQlVTIChwbGF5YmluKSwKLSAgICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUsIEdTVF9NRVNTQUdFX1NFR01FTlRfRE9ORSB8Ci0gICAgICAgICAgICBHU1RfTUVTU0FHRV9BU1lOQ19ET05FIHwgR1NUX01FU1NBR0VfRVJST1IpOwotCi0gICAgICAgIGdfYXNzZXJ0IChHU1RfTUVTU0FHRV9UWVBFIChtc2cpICE9IEdTVF9NRVNTQUdFX0VSUk9SKTsKLSAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUgKG1zZykgPT0gR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FKSB7Ci0gICAgICAgICAgc2VnbWVudF9kb25lID0gVFJVRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwcmVyb2xsZWQgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICAgICAgfQotCi0gICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBsYXliaW4sIEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICB9Ci0KLSAgICAvKiB3YWl0IGZvciBlbmQgb2Ygc2VnbWVudCBpZiB3ZSBkaWRuJ3QgZ2V0IGl0IGFib3ZlIGFscmVhZHkgKi8KLSAgICBpZiAoIXNlZ21lbnRfZG9uZSkgewotICAgICAgbXNnID0gZ3N0X2J1c190aW1lZF9wb3BfZmlsdGVyZWQgKEdTVF9FTEVNRU5UX0JVUyAocGxheWJpbiksCi0gICAgICAgICAgR1NUX0NMT0NLX1RJTUVfTk9ORSwgR1NUX01FU1NBR0VfU0VHTUVOVF9ET05FIHwgR1NUX01FU1NBR0VfRVJST1IpOwotCi0gICAgICBnX2Fzc2VydCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSAhPSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0KLSAgICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICAgIH0KLQotICAgIHN0YXJ0ID0gc3RvcDsKLSAgfQotICB3aGlsZSAoc3RhcnQgPCBkdXIpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGxheWJpbiwgR1NUX1NUQVRFX05VTEwpOwotICBnc3Rfb2JqZWN0X3VucmVmIChwbGF5YmluKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy92NGwyc3JjLXRlc3QuYyBiL3Rlc3RzL2ljbGVzL3Y0bDJzcmMtdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTYyZTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL2ljbGVzL3Y0bDJzcmMtdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE0ICswLDAgQEAKLS8qIEdTdHJlYW1lcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBFZGdhcmQgTGltYSA8ZWRnYXJkIGRvdCBsaW1hIGF0IGluZHQgZG90IG9yZyBkb3QgYnI+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2NvbG9yYmFsYW5jZS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlb29yaWVudGF0aW9uLmg+Ci0KLUdzdEVsZW1lbnQgKnBpcGVsaW5lLCAqc291cmNlLCAqc2luazsKLUdNYWluTG9vcCAqbG9vcDsKLXZvbGF0aWxlIGludCBleGl0X3JlYWQgPSAwOwotCi1zdGF0aWMgdm9pZAotcHJpbnRfb3B0aW9ucyAodm9pZCkKLXsKLSAgcHJpbnRmICgiXG5mIC0gdG8gY2hhbmdlIHRoZSBmZXF1ZW5jeVxuIik7Ci0gIHByaW50ZiAoImkgLSB0byBjaGFuZ2UgdGhlIGlucHV0XG4iKTsKLSAgcHJpbnRmICgibiAtIHRvIGNoYW5nZSB0aGUgbm9ybVxuIik7Ci0gIHByaW50ZiAoImMgLSBsaXN0IGNvbG9yIGJhbGFuY2VcbiIpOwotICBwcmludGYgKCJ2IC0gY2hhbmdlIHZpZGVvIG9yaWVudGFyaW9uXG4iKTsKLSAgcHJpbnRmICgiZSAtIHRvIGV4aXRcbiIpOwotfQotCi1zdGF0aWMgdm9pZAotcnVuX29wdGlvbnMgKGNoYXIgb3B0KQotewotICBpbnQgcmVzOwotCi0gIHN3aXRjaCAob3B0KSB7Ci0jaWYgMAotICAgIGNhc2UgJ2YnOgotICAgIHsKLSAgICAgIEdzdFR1bmVyICp0dW5lciA9IEdTVF9UVU5FUiAoc291cmNlKTsKLSAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbDsKLSAgICAgIGd1aW50IGZyZXE7Ci0KLSAgICAgIGNoYW5uZWwgPSBnc3RfdHVuZXJfZ2V0X2NoYW5uZWwgKHR1bmVyKTsKLQotICAgICAgZnJlcSA9IGdzdF90dW5lcl9nZXRfZnJlcXVlbmN5ICh0dW5lciwgY2hhbm5lbCk7Ci0KLSAgICAgIHByaW50ZiAoIlxudHlwZSB0aGUgbmV3IGZyZXF1ZW5jeSAoY3VycmVudCA9ICV1KSAoLTEgdG8gY2FuY2VsKTogIiwgZnJlcSk7Ci0gICAgICByZXMgPSBzY2FuZiAoIiV1IiwgJmZyZXEpOwotICAgICAgaWYgKHJlcyAhPSAxIHx8IGZyZXEgIT0gLTEpCi0gICAgICAgIGdzdF90dW5lcl9zZXRfZnJlcXVlbmN5ICh0dW5lciwgY2hhbm5lbCwgZnJlcSk7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnbic6Ci0gICAgewotICAgICAgR3N0VHVuZXIgKnR1bmVyID0gR1NUX1RVTkVSIChzb3VyY2UpOwotICAgICAgY29uc3QgR0xpc3QgKml0ZW0sICpsaXN0OwotICAgICAgY29uc3QgR3N0VHVuZXJOb3JtICpjdXJyZW50X25vcm07Ci0gICAgICBHc3RUdW5lck5vcm0gKm5vcm0gPSBOVUxMOwotICAgICAgZ2ludCBpbmRleCwgbmV4dF9ub3JtOwotCi0KLSAgICAgIGxpc3QgPSBnc3RfdHVuZXJfbGlzdF9ub3JtcyAodHVuZXIpOwotCi0gICAgICBjdXJyZW50X25vcm0gPSBnc3RfdHVuZXJfZ2V0X25vcm0gKHR1bmVyKTsKLQotICAgICAgcHJpbnRmICgiXG5saXN0IG9mIG5vcm1zOlxuIik7Ci0gICAgICBmb3IgKGl0ZW0gPSBsaXN0LCBpbmRleCA9IDA7IGl0ZW0gIT0gTlVMTDsgaXRlbSA9IGl0ZW0tPm5leHQsICsraW5kZXgpIHsKLSAgICAgICAgbm9ybSA9IGl0ZW0tPmRhdGE7Ci0gICAgICAgIGlmIChjdXJyZW50X25vcm0gPT0gbm9ybSkgewotICAgICAgICAgIHByaW50ZiAoIiAqICV1IC0gJXNcbiIsIGluZGV4LCBub3JtLT5sYWJlbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHJpbnRmICgiICAgJXUgLSAlc1xuIiwgaW5kZXgsIG5vcm0tPmxhYmVsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHJpbnRmICgiXG50eXBlIHRoZSBudW1iZXIgb2Ygbm9ybSB5b3Ugd2FudCAoLTEgdG8gY2FuY2VsKTogIik7Ci0gICAgICByZXMgPSBzY2FuZiAoIiVkIiwgJm5leHRfbm9ybSk7Ci0gICAgICBpZiAocmVzICE9IDEgfHwgbmV4dF9ub3JtIDwgMCkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChpbmRleCA8PSBuZXh0X25vcm0pIHsKLSAgICAgICAgcHJpbnRmICgiTm9ybSAlZCBub3QgYXZhaWxhYmxlXG4iLCBuZXh0X25vcm0pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGZvciAoaXRlbSA9IGxpc3QsIGluZGV4ID0gMDsgaXRlbSAhPSBOVUxMICYmIGluZGV4IDw9IG5leHRfbm9ybTsKLSAgICAgICAgICBpdGVtID0gaXRlbS0+bmV4dCwgKytpbmRleCkgewotICAgICAgICBub3JtID0gaXRlbS0+ZGF0YTsKLSAgICAgIH0KLSAgICAgIGlmIChub3JtKQotICAgICAgICBnc3RfdHVuZXJfc2V0X25vcm0gKHR1bmVyLCBub3JtKTsKLSAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdpJzoKLSAgICB7Ci0gICAgICBHc3RUdW5lciAqdHVuZXIgPSBHU1RfVFVORVIgKHNvdXJjZSk7Ci0gICAgICBjb25zdCBHTGlzdCAqaXRlbSwgKmxpc3Q7Ci0gICAgICBjb25zdCBHc3RUdW5lckNoYW5uZWwgKmN1cnJlbnRfY2hhbm5lbDsKLSAgICAgIEdzdFR1bmVyQ2hhbm5lbCAqY2hhbm5lbCA9IE5VTEw7Ci0gICAgICBnaW50IGluZGV4LCBuZXh0X2NoYW5uZWw7Ci0KLQotICAgICAgbGlzdCA9IGdzdF90dW5lcl9saXN0X2NoYW5uZWxzICh0dW5lcik7Ci0KLSAgICAgIGN1cnJlbnRfY2hhbm5lbCA9IGdzdF90dW5lcl9nZXRfY2hhbm5lbCAodHVuZXIpOwotCi0gICAgICBwcmludGYgKCJcbmxpc3Qgb2YgaW5wdXRzOlxuIik7Ci0gICAgICBmb3IgKGl0ZW0gPSBsaXN0LCBpbmRleCA9IDA7IGl0ZW0gIT0gTlVMTDsgaXRlbSA9IGl0ZW0tPm5leHQsICsraW5kZXgpIHsKLSAgICAgICAgY2hhbm5lbCA9IGl0ZW0tPmRhdGE7Ci0gICAgICAgIGlmIChjdXJyZW50X2NoYW5uZWwgPT0gY2hhbm5lbCkgewotICAgICAgICAgIHByaW50ZiAoIiAqICV1IC0gJXNcbiIsIGluZGV4LCBjaGFubmVsLT5sYWJlbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcHJpbnRmICgiICAgJXUgLSAlc1xuIiwgaW5kZXgsIGNoYW5uZWwtPmxhYmVsKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcHJpbnRmICgiXG50eXBlIHRoZSBudW1iZXIgb2YgaW5wdXQgeW91IHdhbnQgKC0xIHRvIGNhbmNlbCk6ICIpOwotICAgICAgcmVzID0gc2NhbmYgKCIlZCIsICZuZXh0X2NoYW5uZWwpOwotICAgICAgaWYgKHJlcyAhPSAxIHx8IG5leHRfY2hhbm5lbCA8IDApIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAoaW5kZXggPD0gbmV4dF9jaGFubmVsKSB7Ci0gICAgICAgIHByaW50ZiAoIklucHV0ICVkIG5vdCBhdmFpbGFibGVcbiIsIG5leHRfY2hhbm5lbCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZm9yIChpdGVtID0gbGlzdCwgaW5kZXggPSAwOyBpdGVtICE9IE5VTEwgJiYgaW5kZXggPD0gbmV4dF9jaGFubmVsOwotICAgICAgICAgIGl0ZW0gPSBpdGVtLT5uZXh0LCArK2luZGV4KSB7Ci0gICAgICAgIGNoYW5uZWwgPSBpdGVtLT5kYXRhOwotICAgICAgfQotICAgICAgaWYgKGNoYW5uZWwpCi0gICAgICAgIGdzdF90dW5lcl9zZXRfY2hhbm5lbCAodHVuZXIsIGNoYW5uZWwpOwotICAgIH0KLSAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSAnZSc6Ci0gICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIHByaW50ZiAoIkJ5ZVxuIik7Ci0gICAgICBnX3RocmVhZF9leGl0ICgwKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2MnOgotICAgIHsKLSAgICAgIEdzdENvbG9yQmFsYW5jZSAqYmFsYW5jZSA9IEdTVF9DT0xPUl9CQUxBTkNFIChzb3VyY2UpOwotICAgICAgY29uc3QgR0xpc3QgKmNvbnRyb2xzOwotICAgICAgR3N0Q29sb3JCYWxhbmNlQ2hhbm5lbCAqY2hhbm5lbDsKLSAgICAgIGNvbnN0IEdMaXN0ICppdGVtOwotICAgICAgZ2ludCBpbmRleCwgbmV3X3ZhbHVlOwotCi0gICAgICBjb250cm9scyA9IGdzdF9jb2xvcl9iYWxhbmNlX2xpc3RfY2hhbm5lbHMgKGJhbGFuY2UpOwotCi0gICAgICBwcmludGYgKCJcbiIpOwotCi0gICAgICBpZiAoY29udHJvbHMgPT0gTlVMTCkgewotICAgICAgICBwcmludGYgKCJUaGVyZSBpcyBubyBsaXN0IG9mIGNvbG9yYmFsYW5jZSBjb250cm9sc1xuIik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGNvbnRyb2xzKSB7Ci0gICAgICAgIHByaW50ZiAoImxpc3Qgb2YgY29udHJvbHM6XG4iKTsKLSAgICAgICAgZm9yIChpdGVtID0gY29udHJvbHMsIGluZGV4ID0gMDsgaXRlbSAhPSBOVUxMOwotICAgICAgICAgICAgaXRlbSA9IGl0ZW0tPm5leHQsICsraW5kZXgpIHsKLSAgICAgICAgICBjaGFubmVsID0gaXRlbS0+ZGF0YTsKLSAgICAgICAgICBwcmludGYgKCIgICAldSAtICVzICglZCAtICVkKSA9ICVkXG4iLCBpbmRleCwgY2hhbm5lbC0+bGFiZWwsCi0gICAgICAgICAgICAgIGNoYW5uZWwtPm1pbl92YWx1ZSwgY2hhbm5lbC0+bWF4X3ZhbHVlLAotICAgICAgICAgICAgICBnc3RfY29sb3JfYmFsYW5jZV9nZXRfdmFsdWUgKGJhbGFuY2UsIGNoYW5uZWwpKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYgKCJcbnR5cGUgdGhlIG51bWJlciBvZiBjb2xvciBjb250cm9sIHlvdSB3YW50ICgtMSB0byBjYW5jZWwpOiAiKTsKLSAgICAgICAgcmVzID0gc2NhbmYgKCIlZCIsICZuZXdfdmFsdWUpOwotICAgICAgICBpZiAocmVzICE9IDEgfHwgbmV3X3ZhbHVlID09IC0xKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBmb3IgKGl0ZW0gPSBjb250cm9scywgaW5kZXggPSAwOyBpdGVtICE9IE5VTEwgJiYgaW5kZXggPD0gbmV3X3ZhbHVlOwotICAgICAgICAgICAgaXRlbSA9IGl0ZW0tPm5leHQsICsraW5kZXgpIHsKLSAgICAgICAgICBjaGFubmVsID0gaXRlbS0+ZGF0YTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYgKCIgICAldSAtICVzICglZCAtICVkKSA9ICVkLCB0eXBlIHRoZSBuZXcgdmFsdWU6ICIsIGluZGV4IC0gMSwKLSAgICAgICAgICAgIGNoYW5uZWwtPmxhYmVsLCBjaGFubmVsLT5taW5fdmFsdWUsIGNoYW5uZWwtPm1heF92YWx1ZSwKLSAgICAgICAgICAgIGdzdF9jb2xvcl9iYWxhbmNlX2dldF92YWx1ZSAoYmFsYW5jZSwgY2hhbm5lbCkpOwotICAgICAgICByZXMgPSBzY2FuZiAoIiVkIiwgJm5ld192YWx1ZSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMSB8fCBuZXdfdmFsdWUgPT0gLTEpCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGdzdF9jb2xvcl9iYWxhbmNlX3NldF92YWx1ZSAoYmFsYW5jZSwgY2hhbm5lbCwgbmV3X3ZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgY2FzZSAndic6Ci0gICAgewotICAgICAgR3N0VmlkZW9PcmllbnRhdGlvbiAqdmlkb3JpZW50ID0gR1NUX1ZJREVPX09SSUVOVEFUSU9OIChzb3VyY2UpOwotICAgICAgZ2Jvb2xlYW4gZmxpcCA9IEZBTFNFOwotICAgICAgZ2ludCBjZW50ZXIgPSAwOwotCi0gICAgICBwcmludGYgKCJcbiIpOwotCi0gICAgICBpZiAoZ3N0X3ZpZGVvX29yaWVudGF0aW9uX2dldF9oZmxpcCAodmlkb3JpZW50LCAmZmxpcCkpIHsKLSAgICAgICAgZ2ludCBuZXdfdmFsdWU7Ci0KLSAgICAgICAgcHJpbnRmICgiSG9yaXpvbnRhbCBmbGlwIGlzICVzXG4iLCBmbGlwID8gIm9uIiA6ICJvZmYiKTsKLSAgICAgICAgcHJpbnRmICgiXG50eXBlIDEgdG8gdG9nZ2xlICgtMSB0byBjYW5jZWwpOiAiKTsKLSAgICAgICAgcmVzID0gc2NhbmYgKCIlZCIsICZuZXdfdmFsdWUpOwotICAgICAgICBpZiAocmVzICE9IDEgfHwgbmV3X3ZhbHVlID09IDEpIHsKLSAgICAgICAgICBmbGlwID0gIWZsaXA7Ci0gICAgICAgICAgaWYgKGdzdF92aWRlb19vcmllbnRhdGlvbl9zZXRfaGZsaXAgKHZpZG9yaWVudCwgZmxpcCkpIHsKLSAgICAgICAgICAgIGdzdF92aWRlb19vcmllbnRhdGlvbl9nZXRfaGZsaXAgKHZpZG9yaWVudCwgJmZsaXApOwotICAgICAgICAgICAgcHJpbnRmICgiTm93IGhvcml6b250YWwgZmxpcCBpcyAlc1xuIiwgZmxpcCA/ICJvbiIgOiAib2ZmIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZiAoIkVycm9yIHRvZ2dsaW5nIGhvcml6b250YWwgZmxpcFxuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGYgKCJIb3Jpem9udGFsIGZsaXAgY29udHJvbCBub3QgYXZhaWxhYmxlXG4iKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGdzdF92aWRlb19vcmllbnRhdGlvbl9nZXRfdmZsaXAgKHZpZG9yaWVudCwgJmZsaXApKSB7Ci0gICAgICAgIGdpbnQgbmV3X3ZhbHVlOwotCi0gICAgICAgIHByaW50ZiAoIlxuVmVydGljYWwgZmxpcCBpcyAlc1xuIiwgZmxpcCA/ICJvbiIgOiAib2ZmIik7Ci0gICAgICAgIHByaW50ZiAoIlxudHlwZSAxIHRvIHRvZ2dsZSAoLTEgdG8gY2FuY2VsKTogIik7Ci0gICAgICAgIHJlcyA9IHNjYW5mICgiJWQiLCAmbmV3X3ZhbHVlKTsKLSAgICAgICAgaWYgKHJlcyAhPSAxIHx8IG5ld192YWx1ZSA9PSAxKSB7Ci0gICAgICAgICAgZmxpcCA9ICFmbGlwOwotICAgICAgICAgIGlmIChnc3RfdmlkZW9fb3JpZW50YXRpb25fc2V0X3ZmbGlwICh2aWRvcmllbnQsIGZsaXApKSB7Ci0gICAgICAgICAgICBnc3RfdmlkZW9fb3JpZW50YXRpb25fZ2V0X3ZmbGlwICh2aWRvcmllbnQsICZmbGlwKTsKLSAgICAgICAgICAgIHByaW50ZiAoIk5vdyB2ZXJ0aWNhbCBmbGlwIGlzICVzXG4iLCBmbGlwID8gIm9uIiA6ICJvZmYiKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmICgiRXJyb3IgdG9nZ2xpbmcgdmVydGljYWwgZmxpcFxuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGYgKCJWZXJ0aWNhbCBmbGlwIGNvbnRyb2wgbm90IGF2YWlsYWJsZVxuIik7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChnc3RfdmlkZW9fb3JpZW50YXRpb25fZ2V0X2hjZW50ZXIgKHZpZG9yaWVudCwgJmNlbnRlcikpIHsKLSAgICAgICAgcHJpbnRmICgiSG9yaXpvbnRhbCBjZW50ZXIgaXMgJWRcbiIsIGNlbnRlcik7Ci0gICAgICAgIHByaW50ZiAoIlxudHlwZSB0aGUgbmV3IGhvcml6b250YWwgY2VudGVyIHZhbHVlICgtMSB0byBjYW5jZWwpOiAiKTsKLSAgICAgICAgcmVzID0gc2NhbmYgKCIlZCIsICZjZW50ZXIpOwotICAgICAgICBpZiAocmVzICE9IDEgfHwgY2VudGVyICE9IC0xKSB7Ci0gICAgICAgICAgaWYgKGdzdF92aWRlb19vcmllbnRhdGlvbl9zZXRfaGNlbnRlciAodmlkb3JpZW50LCBjZW50ZXIpKSB7Ci0gICAgICAgICAgICBnc3RfdmlkZW9fb3JpZW50YXRpb25fZ2V0X2hjZW50ZXIgKHZpZG9yaWVudCwgJmNlbnRlcik7Ci0gICAgICAgICAgICBwcmludGYgKCJOb3cgaG9yaXpvbnRhbCBjZW50ZXIgaXMgJWRcbiIsIGNlbnRlcik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZiAoIkVycm9yIHNldHRpbmcgaG9yaXpvbnRhbCBjZW50ZXJcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICgiSG9yaXpvbnRhbCBjZW50ZXIgY29udHJvbCBub3QgYXZhaWxhYmxlXG4iKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGdzdF92aWRlb19vcmllbnRhdGlvbl9nZXRfdmNlbnRlciAodmlkb3JpZW50LCAmY2VudGVyKSkgewotICAgICAgICBwcmludGYgKCJWZXJ0aWNhbCBjZW50ZXIgaXMgJWRcbiIsIGNlbnRlcik7Ci0gICAgICAgIHByaW50ZiAoIlxudHlwZSB0aGUgbmV3IHZlcnRpY2FsIGNlbnRlciB2YWx1ZSAoLTEgdG8gY2FuY2VsKTogIik7Ci0gICAgICAgIHJlcyA9IHNjYW5mICgiJWQiLCAmY2VudGVyKTsKLSAgICAgICAgaWYgKHJlcyAhPSAxIHx8IGNlbnRlciAhPSAtMSkgewotICAgICAgICAgIGlmIChnc3RfdmlkZW9fb3JpZW50YXRpb25fc2V0X3ZjZW50ZXIgKHZpZG9yaWVudCwgY2VudGVyKSkgewotICAgICAgICAgICAgZ3N0X3ZpZGVvX29yaWVudGF0aW9uX2dldF92Y2VudGVyICh2aWRvcmllbnQsICZjZW50ZXIpOwotICAgICAgICAgICAgcHJpbnRmICgiTm93IHZlcnRpY2FsIGNlbnRlciBpcyAlZFxuIiwgY2VudGVyKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmICgiRXJyb3Igc2V0dGluZyB2ZXJ0aWNhbCBjZW50ZXJcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICgiVmVydGljYWwgY2VudGVyIGNvbnRyb2wgbm90IGF2YWlsYWJsZVxuIik7Ci0gICAgICB9Ci0KLSAgICB9Ci0gICAgICBicmVhazsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBpZiAob3B0ICE9IDEwKQotICAgICAgICBwcmludGYgKCJlcnJvcjogaW52YWxpZCBvcHRpb24gJWMiLCBvcHQpOwotICAgICAgYnJlYWs7Ci0gIH0KLQotZG9uZToKLQotICByZXR1cm47Ci0KLX0KLQotc3RhdGljIGdwb2ludGVyCi1yZWFkX3VzZXIgKGdwb2ludGVyIGRhdGEpCi17Ci0KLSAgY2hhciBvcHQ7Ci0KLSAgd2hpbGUgKCFleGl0X3JlYWQpIHsKLQotICAgIHByaW50X29wdGlvbnMgKCk7Ci0KLSAgICBkbyB7Ci0gICAgICBvcHQgPSBnZXRjaGFyICgpOwotICAgICAgaWYgKGV4aXRfcmVhZCkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChvcHQgPT0gJ1xuJyk7Ci0KLSAgICBydW5fb3B0aW9ucyAob3B0KTsKLQotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci0KLX0KLQotc3RhdGljIGdib29sZWFuCi1teV9idXNfY2FsbGJhY2sgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0KLSAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFIChtZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6ewotICAgICAgR0Vycm9yICplcnI7Ci0gICAgICBnY2hhciAqZGVidWc7Ci0gICAgICBnY2hhciAqc3RyOwotCi0gICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvciAobWVzc2FnZSwgJmVyciwgJmRlYnVnKTsKLSAgICAgIHN0ciA9IGdzdF9lbGVtZW50X2dldF9uYW1lIChtZXNzYWdlLT5zcmMpOwotICAgICAgZ19wcmludCAoIiVzIGVycm9yOiAlc1xuIiwgc3RyLCBlcnItPm1lc3NhZ2UpOwotICAgICAgZ19mcmVlIChzdHIpOwotICAgICAgZ19wcmludCAoIkRlYnVnOiAlc1xuIiwgZGVidWcpOwotCi0gICAgICBnX2Vycm9yX2ZyZWUgKGVycik7Ci0gICAgICBnX2ZyZWUgKGRlYnVnKTsKLQotICAgICAgcHJpbnRmICgicHJlc3NlIDxFTlRFUj4ga2V5IHRvIGV4aXRcbiIpOwotICAgICAgZXhpdF9yZWFkID0gMTsKLSAgICAgIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6Ci0gICAgICAvKiBlbmQtb2Ytc3RyZWFtICovCi0gICAgICBwcmludGYgKCJwcmVzc2UgYW55IGtleSB0byBleGl0XG4iKTsKLSAgICAgIGV4aXRfcmVhZCA9IDE7Ci0gICAgICBnX21haW5fbG9vcF9xdWl0IChsb29wKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQotICBHVGhyZWFkICppbnB1dF90aHJlYWQ7Ci0gIGdpbnQgbnVtYnVmZmVycyA9IC0xOwotICBnY2hhciBkZXZpY2VbMTI4XSA9IHsgJ1wwJyB9OwotICBnY2hhciBpbnB1dFsxMjhdID0geyAnXDAnIH07Ci0gIGd1bG9uZyBmcmVxdWVuY3kgPSAwOwotICBHc3RCdXMgKmJ1czsKLQotICAvKiBzZWUgZm9yIGlucHV0IG9wdGlvbiAqLwotCi0gIGludCBjOwotCi0gIHdoaWxlICgxKSB7Ci0gICAgc3RhdGljIGNoYXIgbG9uZ19vcHRpb25zX2Rlc2NbXVs2NF0gPSB7Ci0gICAgICB7Ik51bWJlciBvZiBidWZmZXJzIHRvIG91dHB1dCBiZWZvcmUgc2VuZGluZyBFT1MifSwKLSAgICAgIHsiRGV2aWNlIGxvY2F0aW9uLiBDb21tb24gaW4gL2Rldi92aWRlbzAifSwKLSAgICAgIHsiaW5wdXQvb3V0cHV0IChjaGFubmVsKSB0byBzd2l0Y2ggdG8ifSwKLSAgICAgIHsiZnJlcXVlbmN5IHRvIHR1bmUgdG8gKGluIEh6KSJ9LAotICAgICAgezAsIDAsIDAsIDB9Ci0gICAgfTsKLSAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKLSAgICAgIHsibnVtYnVmZmVycyIsIDEsIDAsICduJ30sCi0gICAgICB7ImRldmljZSIsIDEsIDAsICdkJ30sCi0gICAgICB7ImlucHV0IiwgMSwgMCwgJ2knfSwKLSAgICAgIHsiZnJlcXVlbmN5IiwgMSwgMCwgJ2YnfSwKLSAgICAgIHswLCAwLCAwLCAwfQotICAgIH07Ci0gICAgLyogZ2V0b3B0X2xvbmcgc3RvcmVzIHRoZSBvcHRpb24gaW5kZXggaGVyZS4gKi8KLSAgICBpbnQgb3B0aW9uX2luZGV4ID0gMDsKLQotICAgIGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIm46ZDppOmY6aCIsIGxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCk7Ci0KLSAgICAvKiBEZXRlY3QgdGhlIGVuZCBvZiB0aGUgb3B0aW9ucy4gKi8KLSAgICBpZiAoYyA9PSAtMSkgewotICAgICAgcHJpbnRmICgidGlwOiB1c2UgLWggdG8gc2VlIGhlbHAgbWVzc2FnZS5cbiIpOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNoIChjKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgIC8qIElmIHRoaXMgb3B0aW9uIHNldCBhIGZsYWcsIGRvIG5vdGhpbmcgZWxzZSBub3cuICovCi0gICAgICAgIGlmIChsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5mbGFnICE9IDApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHByaW50ZiAoIm9wdGlvbiAlcyIsIGxvbmdfb3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUpOwotICAgICAgICBpZiAob3B0YXJnKQotICAgICAgICAgIHByaW50ZiAoIiB3aXRoIGFyZyAlcyIsIG9wdGFyZyk7Ci0gICAgICAgIHByaW50ZiAoIlxuIik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICduJzoKLSAgICAgICAgbnVtYnVmZmVycyA9IGF0b2kgKG9wdGFyZyk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICdkJzoKLSAgICAgICAgc3RybmNweSAoZGV2aWNlLCBvcHRhcmcsIHNpemVvZiAoZGV2aWNlKSAvIHNpemVvZiAoZGV2aWNlWzBdKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICdpJzoKLSAgICAgICAgc3RybmNweSAoaW5wdXQsIG9wdGFyZywgc2l6ZW9mIChpbnB1dCkgLyBzaXplb2YgKGlucHV0WzBdKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICdmJzoKLSAgICAgICAgZnJlcXVlbmN5ID0gYXRvbCAob3B0YXJnKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJ2gnOgotICAgICAgICBwcmludGYgKCJVc2FnZTogdjRsMnNyYy10ZXN0IFtPUFRJT05dLi4uXG4iKTsKLSAgICAgICAgZm9yIChjID0gMDsgbG9uZ19vcHRpb25zW2NdLm5hbWU7ICsrYykgewotICAgICAgICAgIHByaW50ZiAoIi0lYywgLS0lc1xyXHRcdFx0XHQlc1xuIiwgbG9uZ19vcHRpb25zW2NdLnZhbCwKLSAgICAgICAgICAgICAgbG9uZ19vcHRpb25zW2NdLm5hbWUsIGxvbmdfb3B0aW9uc19kZXNjW2NdKTsKLSAgICAgICAgfQotICAgICAgICBleGl0ICgwKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgJz8nOgotICAgICAgICAvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IHByaW50ZWQgYW4gZXJyb3IgbWVzc2FnZS4gKi8KLSAgICAgICAgcHJpbnRmICgiVXNlIC1oIHRvIHNlZSBoZWxwIG1lc3NhZ2UuXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFib3J0ICgpOwotICAgIH0KLSAgfQotCi0gIC8qIFByaW50IGFueSByZW1haW5pbmcgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAobm90IG9wdGlvbnMpLiAqLwotICBpZiAob3B0aW5kIDwgYXJnYykgewotICAgIHByaW50ZiAoIlVzZSAtaCB0byBzZWUgaGVscCBtZXNzYWdlLlxuIiAibm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzOiAiKTsKLSAgICB3aGlsZSAob3B0aW5kIDwgYXJnYykKLSAgICAgIHByaW50ZiAoIiVzICIsIGFyZ3Zbb3B0aW5kKytdKTsKLSAgICBwdXRjaGFyICgnXG4nKTsKLSAgfQotCi0gIC8qIGluaXQgKi8KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgLyogY3JlYXRlIGVsZW1lbnRzICovCi0gIGlmICghKHBpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyAoIm15X3BpcGVsaW5lIikpKSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiZXJyb3I6IGdzdF9waXBlbGluZV9uZXcgcmV0dXJuIE5VTEwiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpZiAoIShzb3VyY2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2NGwyc3JjIiwgTlVMTCkpKSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLAotICAgICAgICAiZXJyb3I6IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoXCJ2NGwyc3JjXCIsIE5VTEwpIHJldHVybiBOVUxMIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaWYgKCEoc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInh2aW1hZ2VzaW5rIiwgTlVMTCkpKSB7Ci0gICAgZnByaW50ZiAoc3RkZXJyLAotICAgICAgICAiZXJyb3I6IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoXCJ4dmltYWdlc2lua1wiLCBOVUxMKSByZXR1cm4gTlVMTCIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlmIChudW1idWZmZXJzID4gLTEpIHsKLSAgICBnX29iamVjdF9zZXQgKHNvdXJjZSwgIm51bS1idWZmZXJzIiwgbnVtYnVmZmVycywgTlVMTCk7Ci0gIH0KLSAgaWYgKGRldmljZVswXSkgewotICAgIGdfb2JqZWN0X3NldCAoc291cmNlLCAiZGV2aWNlIiwgZGV2aWNlLCBOVUxMKTsKLSAgfQotICBpZiAoaW5wdXRbMF0pIHsKLSAgICBnX29iamVjdF9zZXQgKHNvdXJjZSwgImlucHV0IiwgaW5wdXQsIE5VTEwpOwotICB9Ci0gIGlmIChmcmVxdWVuY3kpIHsKLSAgICBnX29iamVjdF9zZXQgKHNvdXJjZSwgImZyZXF1ZW5jeSIsIGZyZXF1ZW5jeSwgTlVMTCk7Ci0gIH0KLQotICAvKiB5b3Ugd291bGQgbm9ybWFsbHkgY2hlY2sgdGhhdCB0aGUgZWxlbWVudHMgd2VyZSBjcmVhdGVkIHByb3Blcmx5ICovCi0gIGJ1cyA9IGdzdF9waXBlbGluZV9nZXRfYnVzIChHU1RfUElQRUxJTkUgKHBpcGVsaW5lKSk7Ci0gIGdzdF9idXNfYWRkX3dhdGNoIChidXMsIG15X2J1c19jYWxsYmFjaywgTlVMTCk7Ci0KLSAgLyogcHV0IHRvZ2V0aGVyIGEgcGlwZWxpbmUgKi8KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzb3VyY2UsIHNpbmssIE5VTEwpOwotICBnc3RfZWxlbWVudF9saW5rX3BhZHMgKHNvdXJjZSwgInNyYyIsIHNpbmssICJzaW5rIik7Ci0KLSAgLyogc3RhcnQgdGhlIHBpcGVsaW5lICovCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAoR1NUX0VMRU1FTlQgKHBpcGVsaW5lKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotICBsb29wID0gZ19tYWluX2xvb3BfbmV3IChOVUxMLCBGQUxTRSk7Ci0KLSAgaW5wdXRfdGhyZWFkID0gZ190aHJlYWRfdHJ5X25ldyAoInY0bDJzcmMtdGVzdCIsIHJlYWRfdXNlciwgc291cmNlLCBOVUxMKTsKLQotICBpZiAoaW5wdXRfdGhyZWFkID09IE5VTEwpIHsKLSAgICBmcHJpbnRmIChzdGRlcnIsICJlcnJvcjogZ190aHJlYWRfdHJ5X25ldygpIGZhaWxlZCIpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0gIGdfdGhyZWFkX2pvaW4gKGlucHV0X3RocmVhZCk7Ci0KLSAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChHU1RfRUxFTUVOVCAocGlwZWxpbmUpLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgZ3N0X29iamVjdF91bnJlZiAoYnVzKTsKLSAgZ3N0X29iamVjdF91bnJlZiAocGlwZWxpbmUpOwotCi0gIGdzdF9kZWluaXQgKCk7Ci0KLSAgcmV0dXJuIDA7Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2ljbGVzL3ZpZGVvYm94LXRlc3QuYyBiL3Rlc3RzL2ljbGVzL3ZpZGVvYm94LXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM4NWEzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9pY2xlcy92aWRlb2JveC10ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyIGludGVyYWN0aXZlIHZpZGVvYm94IHRlc3QKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggV2ltIFRheW1hbnMgPHdpbS50YXltYW5zQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLQotc3RhdGljIEdzdEVsZW1lbnQgKgotbWFrZV9waXBlbGluZSAoZ2ludCB0eXBlKQotewotICBHc3RFbGVtZW50ICpyZXN1bHQ7Ci0gIGdjaGFyICpwc3RyOwotCi0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgMDoKLSAgICAgIHBzdHIgPSBnX3N0cmR1cF9wcmludGYgKCJ2aWRlb3Rlc3RzcmMgISB2aWRlb2JveCBuYW1lPWJveCAhICIKLSAgICAgICAgICAieHZpbWFnZXNpbmsiKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJlc3VsdCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAocHN0ciwgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwgTlVMTCk7Ci0gIGdfcHJpbnQgKCJjcmVhdGVkIHRlc3QgJWQ6IFwiJXNcIlxuIiwgdHlwZSwgcHN0cik7Ci0gIGdfZnJlZSAocHN0cik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2RlZmluZSBNQVhfUk9VTkQgNTAwCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RFbGVtZW50ICpwaXBlLCAqYm94OwotICBnaW50IGxlZnQsIHJpZ2h0OwotICBnaW50IHRvcCwgYm90dG9tOwotICBnaW50IGxkaXIsIHJkaXI7Ci0gIGdpbnQgdGRpciwgYmRpcjsKLSAgZ2ludCByb3VuZCwgdHlwZSwgc3RvcDsKLQotICBnc3RfaW5pdCAoJmFyZ2MsICZhcmd2KTsKLQotICB0eXBlID0gMDsKLSAgc3RvcCA9IC0xOwotCi0gIGlmIChhcmdjID4gMSkgewotICAgIHR5cGUgPSBhdG9pIChhcmd2WzFdKTsKLSAgICBzdG9wID0gdHlwZSArIDE7Ci0gIH0KLQotICB3aGlsZSAoVFJVRSkgewotICAgIEdzdE1lc3NhZ2UgKm1lc3NhZ2U7Ci0KLSAgICBwaXBlID0gbWFrZV9waXBlbGluZSAodHlwZSk7Ci0gICAgaWYgKHBpcGUgPT0gTlVMTCkKLSAgICAgIGJyZWFrOwotCi0gICAgYm94ID0gZ3N0X2Jpbl9nZXRfYnlfbmFtZSAoR1NUX0JJTiAocGlwZSksICJib3giKTsKLSAgICBnX2Fzc2VydCAoYm94KTsKLQotICAgIHRvcCA9IGJvdHRvbSA9IGxlZnQgPSByaWdodCA9IDA7Ci0gICAgdGRpciA9IGJkaXIgPSAtMTA7Ci0gICAgbGRpciA9IHJkaXIgPSAxMDsKLQotICAgIGZvciAocm91bmQgPSAwOyByb3VuZCA8IE1BWF9ST1VORDsgcm91bmQrKykgewotICAgICAgZ19wcmludCAoImJveCB0byAlNGQgJTRkICU0ZCAlNGQgKCVkLyVkKSAgIFxyIiwgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0LAotICAgICAgICAgIHJvdW5kLCBNQVhfUk9VTkQpOwotCi0gICAgICBnX29iamVjdF9zZXQgKGJveCwgInRvcCIsIHRvcCwgImJvdHRvbSIsIGJvdHRvbSwgImxlZnQiLCBsZWZ0LCAicmlnaHQiLAotICAgICAgICAgIHJpZ2h0LCBOVUxMKTsKLQotICAgICAgaWYgKHJvdW5kID09IDApCi0gICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwotCi0gICAgICB0b3AgKz0gdGRpcjsKLSAgICAgIGlmICh0b3AgPj0gNTApCi0gICAgICAgIHRkaXIgPSAtMTA7Ci0gICAgICBlbHNlIGlmICh0b3AgPCAtNTApCi0gICAgICAgIHRkaXIgPSAxMDsKLQotICAgICAgYm90dG9tICs9IGJkaXI7Ci0gICAgICBpZiAoYm90dG9tID49IDQwKQotICAgICAgICBiZGlyID0gLTEwOwotICAgICAgZWxzZSBpZiAoYm90dG9tIDwgLTYwKQotICAgICAgICBiZGlyID0gMTA7Ci0KLSAgICAgIGxlZnQgKz0gbGRpcjsKLSAgICAgIGlmIChsZWZ0ID49IDYwKQotICAgICAgICBsZGlyID0gLTEwOwotICAgICAgZWxzZSBpZiAobGVmdCA8IC04MCkKLSAgICAgICAgbGRpciA9IDEwOwotCi0gICAgICByaWdodCArPSByZGlyOwotICAgICAgaWYgKHJpZ2h0ID49IDgwKQotICAgICAgICByZGlyID0gLTEwOwotICAgICAgZWxzZSBpZiAocmlnaHQgPCAtOTApCi0gICAgICAgIHJkaXIgPSAxMDsKLQotICAgICAgbWVzc2FnZSA9Ci0gICAgICAgICAgZ3N0X2J1c19wb2xsIChHU1RfRUxFTUVOVF9CVVMgKHBpcGUpLCBHU1RfTUVTU0FHRV9FUlJPUiwKLSAgICAgICAgICA1MCAqIEdTVF9NU0VDT05EKTsKLSAgICAgIGlmIChtZXNzYWdlKSB7Ci0gICAgICAgIGdfcHJpbnQgKCJnb3QgZXJyb3IgICAgICAgICAgIFxuIik7Ci0KLSAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYgKG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgICBnX3ByaW50ICgidGVzdCAlZCBkb25lICAgICAgICAgICAgICAgICAgICBcbiIsIHR5cGUpOwotCi0gICAgZ3N0X29iamVjdF91bnJlZiAoYm94KTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLQotICAgIHR5cGUrKzsKLSAgICBpZiAodHlwZSA9PSBzdG9wKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy92aWRlb2Nyb3AtdGVzdC5jIGIvdGVzdHMvaWNsZXMvdmlkZW9jcm9wLXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFjZmEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9pY2xlcy92aWRlb2Nyb3AtdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzU2ICswLDAgQEAKLS8qIEdTdHJlYW1lciBpbnRlcmFjdGl2ZSB0ZXN0IGZvciB0aGUgdmlkZW9jcm9wIGVsZW1lbnQKLSAqIENvcHlyaWdodCAoQykgMjAwNiBUaW0tUGhpbGlwcCBNw7xsbGVyIDx0aW0gY2VudHJpY3VsYXIgbmV0PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZmRlZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLUdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKHZpZGVvY3JvcF90ZXN0X2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHZpZGVvY3JvcF90ZXN0X2RlYnVnCi0KLSNkZWZpbmUgT1VUX1dJRFRIICAgICAgNjQwCi0jZGVmaW5lIE9VVF9IRUlHSFQgICAgIDQ4MAotI2RlZmluZSBUSU1FX1BFUl9URVNUICAgMTAgICAgICAvKiBzZWNvbmRzIGVhY2ggZm9ybWF0IGlzIHRlc3RlZCAqLwotI2RlZmluZSBGUkFNRVJBVEUgICAgICAgMTUgICAgICAvKiBmcmFtZXMgcGVyIHNlY29uZCAgICAgICAgICAgICAqLwotCi0jaWZuZGVmIERFRkFVTFRfVklERU9TSU5LCi0jZGVmaW5lIERFRkFVTFRfVklERU9TSU5LICJ4dmltYWdlc2luayIKLSNlbmRpZgotCi1zdGF0aWMgZ2Jvb2xlYW4KLWNoZWNrX2J1c19mb3JfZXJyb3JzIChHc3RCdXMgKiBidXMsIEdzdENsb2NrVGltZSBtYXhfd2FpdF90aW1lKQotewotICBHc3RNZXNzYWdlICptc2c7Ci0KLSAgbXNnID0gZ3N0X2J1c19wb2xsIChidXMsIEdTVF9NRVNTQUdFX0VSUk9SLCBtYXhfd2FpdF90aW1lKTsKLQotICBpZiAobXNnKSB7Ci0gICAgR0Vycm9yICplcnIgPSBOVUxMOwotICAgIGdjaGFyICpkZWJ1ZyA9IE5VTEw7Ci0KLSAgICBnX2Fzc2VydCAoR1NUX01FU1NBR0VfVFlQRSAobXNnKSA9PSBHU1RfTUVTU0FHRV9FUlJPUik7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IgKG1zZywgJmVyciwgJmRlYnVnKTsKLSAgICBHU1RfRVJST1IgKCJFUlJPUjogJXMgWyVzXSIsIGVyci0+bWVzc2FnZSwgZGVidWcpOwotICAgIGdfcHJpbnQgKCJcbj09PT09PT09PT09PiBFUlJPUjogJXNcbiVzXG5cbiIsIGVyci0+bWVzc2FnZSwgZGVidWcpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZlcnIpOwotICAgIGdfZnJlZSAoZGVidWcpOwotICAgIGdzdF9tZXNzYWdlX3VucmVmIChtc2cpOwotICB9Ci0KLSAgcmV0dXJuIChtc2cgIT0gTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dpdGhfY2FwcyAoR3N0RWxlbWVudCAqIHNyYywgR3N0RWxlbWVudCAqIHZpZGVvY3JvcCwgR3N0Q2FwcyAqIGNhcHMpCi17Ci0gIEdzdENsb2NrVGltZSB0aW1lX3J1bjsKLSAgR3N0RWxlbWVudCAqcGlwZWxpbmU7Ci0gIEdUaW1lciAqdGltZXI7Ci0gIEdzdEJ1cyAqYnVzOwotICBHc3RQYWQgKnBhZDsKLSAgZ3VpbnQgaGNyb3A7Ci0gIGd1aW50IHZjcm9wOwotCi0gIC8qIGNhcHMgbXVzdCBiZSB3cml0YWJsZSwgd2UgY2FuJ3QgY2hlY2sgdGhhdCBoZXJlIHRob3VnaCAqLwotICBnX2Fzc2VydCAoR1NUX0NBUFNfUkVGQ09VTlRfVkFMVUUgKGNhcHMpID09IDEpOwotCi0gIHRpbWVyID0gZ190aW1lcl9uZXcgKCk7Ci0gIHZjcm9wID0gMDsKLSAgaGNyb3AgPSAwOwotCi0gIHBpcGVsaW5lID0gR1NUX0VMRU1FTlQgKGdzdF9lbGVtZW50X2dldF9wYXJlbnQgKHZpZGVvY3JvcCkpOwotICBnX2Fzc2VydCAoR1NUX0lTX1BJUEVMSU5FIChwaXBlbGluZSkpOwotCi0gIC8qIGF0IHRoaXMgcG9pbnQgdGhlIHBpcGVsaW5lIGlzIGluIFBMQVlJTkcgc3RhdGU7IHdlIG9ubHkgd2FudCB0byBjYXB0dXJlCi0gICAqIGVycm9ycyByZXN1bHRpbmcgZnJvbSBvdXIgb24tdGhlLWZseSBjaGFuZ2luZyBvZiB0aGUgZmlsdGVyY2FwcyAqLwotICBidXMgPSBnc3RfcGlwZWxpbmVfZ2V0X2J1cyAoR1NUX1BJUEVMSU5FIChwaXBlbGluZSkpOwotCi0gIC8qIHBhZCB0byBibG9jayAqLwotICBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAoc3JjLCAic3JjIik7Ci0KLSAgdGltZV9ydW4gPSAwOwotICBkbyB7Ci0gICAgR3N0Q2xvY2tUaW1lIHdhaXRfdGltZSwgd2FpdGVkX2Zvcl9ibG9jazsKLQotICAgIGlmIChjaGVja19idXNfZm9yX2Vycm9ycyAoYnVzLCAwKSkKLSAgICAgIGJyZWFrOwotCi0gICAgd2FpdF90aW1lID0gR1NUX1NFQ09ORCAvIEZSQU1FUkFURTsKLQotICAgIEdTVF9MT0cgKCJoY3JvcCA9ICUzZCwgdmNyb3AgPSAlM2QiLCB2Y3JvcCwgaGNyb3ApOwotCi0gICAgZ190aW1lcl9yZXNldCAodGltZXIpOwotCi0gICAgLyogbmVlZCB0byBibG9jayB0aGUgc3RyZWFtaW5nIHRocmVhZCB3aGlsZSBjaGFuZ2luZyB0aGVzZSBwcm9wZXJ0aWVzLAotICAgICAqIG90aGVyd2lzZSB3ZSBtaWdodCBnZXQgcmFuZG9tIG5vdC1uZWdvdGlhdGVkIGVycm9ycyAod2hlbiBjYXBzIGFyZQotICAgICAqIGNoYW5nZWQgaW4gYmV0d2VlbiB1cHN0cmVhbSBjYWxsaW5nIHBhZF9hbGxvY19idWZmZXIoKSBhbmQgcHVzaGluZwotICAgICAqIHRoZSBwcm9jZXNzZWQgYnVmZmVyPykgIEZJWE1FIHNob3VsZCBub3QgYmUgbmVlZGVkICovCi0gICAgLyogZ3N0X3BhZF9zZXRfYmxvY2tlZCAocGFkLCBUUlVFKTsgKi8KLSAgICBnX29iamVjdF9zZXQgKHZpZGVvY3JvcCwgImxlZnQiLCBoY3JvcCwgInRvcCIsIHZjcm9wLCBOVUxMKTsKLSAgICAvKiBnc3RfcGFkX3NldF9ibG9ja2VkIChwYWQsIEZBTFNFKTsgKi8KLQotICAgIHdhaXRlZF9mb3JfYmxvY2sgPSBnX3RpbWVyX2VsYXBzZWQgKHRpbWVyLCBOVUxMKSAqIChkb3VibGUpIEdTVF9TRUNPTkQ7Ci0gICAgLyogR1NUX0xPRyAoIndhaXRlZDogJSIgR1NUX1RJTUVfRk9STUFUICIsIGZyYW1lIGxlbjogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgIEdTVF9USU1FX0FSR1MgKHdhaXRlZF9mb3JfYmxvY2spLCBHU1RfVElNRV9BUkdTICh3YWl0X3RpbWUpKTsgKi8KLSAgICArK3Zjcm9wOwotICAgICsraGNyb3A7Ci0KLSAgICBpZiAod2FpdF90aW1lID4gd2FpdGVkX2Zvcl9ibG9jaykgewotICAgICAgZ191c2xlZXAgKCh3YWl0X3RpbWUgLSB3YWl0ZWRfZm9yX2Jsb2NrKSAvIEdTVF9NU0VDT05EKTsKLSAgICB9Ci0KLSAgICB0aW1lX3J1biArPSB3YWl0X3RpbWU7Ci0gIH0KLSAgd2hpbGUgKHRpbWVfcnVuIDwgKFRJTUVfUEVSX1RFU1QgKiBHU1RfU0VDT05EKSk7Ci0KLSAgZ190aW1lcl9kZXN0cm95ICh0aW1lcik7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKGJ1cyk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBhZCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLX0KLQotLyogcmV0dXJuIGEgbGlzdCBvZiBjYXBzIHdoZXJlIHdlIG9ubHkgbmVlZCB0byBzZXQKLSAqIHdpZHRoIGFuZCBoZWlnaHQgdG8gZ2V0IGZpeGVkIGNhcHMgKi8KLXN0YXRpYyBHTGlzdCAqCi12aWRlb19jcm9wX2dldF90ZXN0X2NhcHMgKEdzdEVsZW1lbnQgKiB2aWRlb2Nyb3ApCi17Ci0gIGNvbnN0IEdzdENhcHMgKmFsbG93ZWRfY2FwczsKLSAgR3N0UGFkICpzcmNwYWQ7Ci0gIEdMaXN0ICpsaXN0ID0gTlVMTDsKLSAgZ3VpbnQgaTsKLQotICBzcmNwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCAodmlkZW9jcm9wLCAic3JjIik7Ci0gIGdfYXNzZXJ0IChzcmNwYWQgIT0gTlVMTCk7Ci0gIGFsbG93ZWRfY2FwcyA9IGdzdF9wYWRfZ2V0X3BhZF90ZW1wbGF0ZV9jYXBzIChzcmNwYWQpOwotICBnX2Fzc2VydCAoYWxsb3dlZF9jYXBzICE9IE5VTEwpOwotCi0gIGZvciAoaSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZSAoYWxsb3dlZF9jYXBzKTsgKytpKSB7Ci0gICAgR3N0U3RydWN0dXJlICpuZXdfc3RydWN0dXJlOwotICAgIEdzdENhcHMgKnNpbmdsZV9jYXBzOwotCi0gICAgc2luZ2xlX2NhcHMgPSBnc3RfY2Fwc19uZXdfZW1wdHkgKCk7Ci0gICAgbmV3X3N0cnVjdHVyZSA9Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfY29weSAoZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSAoYWxsb3dlZF9jYXBzLCBpKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKG5ld19zdHJ1Y3R1cmUsICJmcmFtZXJhdGUiLCBHU1RfVFlQRV9GUkFDVElPTiwKLSAgICAgICAgRlJBTUVSQVRFLCAxLCBOVUxMKTsKLSAgICBnc3Rfc3RydWN0dXJlX3JlbW92ZV9maWVsZCAobmV3X3N0cnVjdHVyZSwgIndpZHRoIik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9yZW1vdmVfZmllbGQgKG5ld19zdHJ1Y3R1cmUsICJoZWlnaHQiKTsKLSAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlIChzaW5nbGVfY2FwcywgbmV3X3N0cnVjdHVyZSk7Ci0KLSAgICAvKiBzaG91bGQgYmUgZml4ZWQgd2l0aG91dCB3aWR0aC9oZWlnaHQgKi8KLSAgICBnX2Fzc2VydCAoZ3N0X2NhcHNfaXNfZml4ZWQgKHNpbmdsZV9jYXBzKSk7Ci0KLSAgICBsaXN0ID0gZ19saXN0X3ByZXBlbmQgKGxpc3QsIHNpbmdsZV9jYXBzKTsKLSAgfQotCi0gIGdzdF9vYmplY3RfdW5yZWYgKHNyY3BhZCk7Ci0KLSAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXN0YXRpYyBnY2hhciAqb3B0X3ZpZGVvc2lua19zdHI7ICAgICAgICAvKiBOVUxMICovCi1zdGF0aWMgZ2NoYXIgKm9wdF9maWx0ZXJjYXBzX3N0cjsgICAgICAgLyogTlVMTCAqLwotc3RhdGljIGdib29sZWFuIG9wdF93aXRoX3ZpZGVvY29udmVydDsgIC8qIEZBTFNFICovCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBzdGF0aWMgY29uc3QgR09wdGlvbkVudHJ5IHRlc3RfZ29wdGlvbnNbXSA9IHsKLSAgICB7InZpZGVvc2luayIsICdcMCcsIDAsIEdfT1BUSU9OX0FSR19TVFJJTkcsICZvcHRfdmlkZW9zaW5rX3N0ciwKLSAgICAgICAgInZpZGVvc2luayB0byB1c2UgKGRlZmF1bHQ6ICIgREVGQVVMVF9WSURFT1NJTksgIikiLCBOVUxMfSwKLSAgICB7ImNhcHMiLCAnXDAnLCAwLCBHX09QVElPTl9BUkdfU1RSSU5HLCAmb3B0X2ZpbHRlcmNhcHNfc3RyLAotICAgICAgICAiZmlsdGVyIGNhcHMgdG8gbmFycm93IGRvd24gZm9ybWF0cyB0byB0ZXN0IiwgTlVMTH0sCi0gICAgeyJ3aXRoLXZpZGVvY29udmVydCIsICdcMCcsIDAsIEdfT1BUSU9OX0FSR19OT05FLAotICAgICAgICAgICZvcHRfd2l0aF92aWRlb2NvbnZlcnQsCi0gICAgICAgICAgIndoZXRoZXIgdG8gYWRkIGFuIHZpZGVvY29udmVydCBlbGVtZW50IGluIGZyb250IG9mIHRoZSBzaW5rIiwKLSAgICAgICAgTlVMTH0sCi0gICAge05VTEwsICdcMCcsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEx9Ci0gIH07Ci0gIEdPcHRpb25Db250ZXh0ICpjdHg7Ci0gIEdFcnJvciAqb3B0X2VyciA9IE5VTEw7Ci0KLSAgR3N0RWxlbWVudCAqcGlwZWxpbmUsICpzcmMsICpmaWx0ZXIxLCAqY3JvcCwgKnNjYWxlLCAqZmlsdGVyMiwgKmNzcCwgKnNpbms7Ci0gIEdzdENhcHMgKmZpbHRlcl9jYXBzID0gTlVMTDsKLSAgR0xpc3QgKmNhcHNfbGlzdCwgKmw7Ci0KLSAgLyogY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzaW5nICovCi0gIGN0eCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3ICgiIik7Ci0gIGdfb3B0aW9uX2NvbnRleHRfYWRkX2dyb3VwIChjdHgsIGdzdF9pbml0X2dldF9vcHRpb25fZ3JvdXAgKCkpOwotICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2VudHJpZXMgKGN0eCwgdGVzdF9nb3B0aW9ucywgTlVMTCk7Ci0KLSAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlIChjdHgsICZhcmdjLCAmYXJndiwgJm9wdF9lcnIpKSB7Ci0gICAgZ19lcnJvciAoIkVycm9yIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICVzIiwgb3B0X2Vyci0+bWVzc2FnZSk7Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotICAgIGdfY2xlYXJfZXJyb3IgKCZvcHRfZXJyKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZ19vcHRpb25fY29udGV4dF9mcmVlIChjdHgpOwotCi0gIEdTVF9ERUJVR19DQVRFR09SWV9JTklUICh2aWRlb2Nyb3BfdGVzdF9kZWJ1ZywgInZpZGVvY3JvcHRlc3QiLCAwLCAidmN0ZXN0Iik7Ci0KLSAgcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3ICgicGlwZWxpbmUiKTsKLSAgc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW90ZXN0c3JjIiwgInZpZGVvdGVzdHNyYyIpOwotICBnX2Fzc2VydCAoc3JjICE9IE5VTEwpOwotICBmaWx0ZXIxID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgiY2Fwc2ZpbHRlciIsICJjYXBzZmlsdGVyMSIpOwotICBnX2Fzc2VydCAoZmlsdGVyMSAhPSBOVUxMKTsKLSAgY3JvcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInZpZGVvY3JvcCIsICJ2aWRlb2Nyb3AiKTsKLSAgZ19hc3NlcnQgKGNyb3AgIT0gTlVMTCk7Ci0gIHNjYWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgidmlkZW9zY2FsZSIsICJ2aWRlb3NjYWxlIik7Ci0gIGdfYXNzZXJ0IChzY2FsZSAhPSBOVUxMKTsKLSAgZmlsdGVyMiA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImNhcHNmaWx0ZXIiLCAiY2Fwc2ZpbHRlcjIiKTsKLSAgZ19hc3NlcnQgKGZpbHRlcjIgIT0gTlVMTCk7Ci0KLSAgaWYgKG9wdF93aXRoX3ZpZGVvY29udmVydCkgewotICAgIGdfcHJpbnQgKCJBZGRpbmcgdmlkZW9jb252ZXJ0XG4iKTsKLSAgICBjc3AgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJ2aWRlb2NvbnZlcnQiLCAiY29sb3JzcGFjZSIpOwotICB9IGVsc2UgewotICAgIGNzcCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoImlkZW50aXR5IiwgImNvbG9yc3BhY2UiKTsKLSAgfQotICBnX2Fzc2VydCAoY3NwICE9IE5VTEwpOwotCi0gIGlmIChvcHRfZmlsdGVyY2Fwc19zdHIpIHsKLSAgICBmaWx0ZXJfY2FwcyA9IGdzdF9jYXBzX2Zyb21fc3RyaW5nIChvcHRfZmlsdGVyY2Fwc19zdHIpOwotICAgIGlmIChmaWx0ZXJfY2FwcyA9PSBOVUxMKSB7Ci0gICAgICBnX2Vycm9yICgiSW52YWxpZCBmaWx0ZXIgY2FwcyBzdHJpbmcgJyVzJyIsIG9wdF9maWx0ZXJjYXBzX3N0cik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGdfcHJpbnQgKCJVc2luZyBmaWx0ZXIgY2FwcyAnJXMnXG4iLCBvcHRfZmlsdGVyY2Fwc19zdHIpOwotICAgIH0KLSAgfQotCi0gIGlmIChvcHRfdmlkZW9zaW5rX3N0cikgewotICAgIGdfcHJpbnQgKCJUcnlpbmcgdmlkZW9zaW5rICclcycgLi4uIiwgb3B0X3ZpZGVvc2lua19zdHIpOwotICAgIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKG9wdF92aWRlb3Npbmtfc3RyLCAic2luayIpOwotICAgIGdfcHJpbnQgKCIlc1xuIiwgKHNpbmspID8gIm9rIiA6ICJlbGVtZW50IGNvdWxkbid0IGJlIGNyZWF0ZWQiKTsKLSAgfSBlbHNlIHsKLSAgICBzaW5rID0gTlVMTDsKLSAgfQotCi0gIGlmIChzaW5rID09IE5VTEwpIHsKLSAgICBnX3ByaW50ICgiVHJ5aW5nIHZpZGVvc2luayAnJXMnIC4uLiIsIERFRkFVTFRfVklERU9TSU5LKTsKLSAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlIChERUZBVUxUX1ZJREVPU0lOSywgInNpbmsiKTsKLSAgICBnX3ByaW50ICgiJXNcbiIsIChzaW5rKSA/ICJvayIgOiAiZWxlbWVudCBjb3VsZG4ndCBiZSBjcmVhdGVkIik7Ci0gIH0KLSAgaWYgKHNpbmsgPT0gTlVMTCkgewotICAgIGdfcHJpbnQgKCJUcnlpbmcgdmlkZW9zaW5rICclcycgLi4uIiwgInh2aW1hZ2VzaW5rIik7Ci0gICAgc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSAoInh2aW1hZ2VzaW5rIiwgInNpbmsiKTsKLSAgICBnX3ByaW50ICgiJXNcbiIsIChzaW5rKSA/ICJvayIgOiAiZWxlbWVudCBjb3VsZG4ndCBiZSBjcmVhdGVkIik7Ci0gIH0KLSAgaWYgKHNpbmsgPT0gTlVMTCkgewotICAgIGdfcHJpbnQgKCJUcnlpbmcgdmlkZW9zaW5rICclcycgLi4uIiwgInhpbWFnZXNpbmsiKTsKLSAgICBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlICgieGltYWdlc2luayIsICJzaW5rIik7Ci0gICAgZ19wcmludCAoIiVzXG4iLCAoc2luaykgPyAib2siIDogImVsZW1lbnQgY291bGRuJ3QgYmUgY3JlYXRlZCIpOwotICB9Ci0KLSAgZ19hc3NlcnQgKHNpbmsgIT0gTlVMTCk7Ci0KLSAgZ3N0X2Jpbl9hZGRfbWFueSAoR1NUX0JJTiAocGlwZWxpbmUpLCBzcmMsIGZpbHRlcjEsIGNyb3AsIHNjYWxlLCBmaWx0ZXIyLAotICAgICAgY3NwLCBzaW5rLCBOVUxMKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKHNyYywgZmlsdGVyMSkpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIHZpZGVvdGVzdHNyYyB0byBjYXBzZmlsdGVyMSIpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfbGluayAoZmlsdGVyMSwgY3JvcCkpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIGNhcHNmaWx0ZXIxIHRvIHZpZGVvY3JvcCIpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfbGluayAoY3JvcCwgc2NhbGUpKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayB2aWRlb2Nyb3AgdG8gdmlkZW9zY2FsZSIpOwotCi0gIGlmICghZ3N0X2VsZW1lbnRfbGluayAoc2NhbGUsIGZpbHRlcjIpKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayB2aWRlb3NjYWxlIHRvIGNhcHNmaWx0ZXIyIik7Ci0KLSAgaWYgKCFnc3RfZWxlbWVudF9saW5rIChmaWx0ZXIyLCBjc3ApKQotICAgIGdfZXJyb3IgKCJGYWlsZWQgdG8gbGluayBjYXBzZmlsdGVyMiB0byB2aWRlb2NvbnZlcnQiKTsKLQotICBpZiAoIWdzdF9lbGVtZW50X2xpbmsgKGNzcCwgc2luaykpCi0gICAgZ19lcnJvciAoIkZhaWxlZCB0byBsaW5rIHZpZGVvY29udmVydCB0byB2aWRlbyBzaW5rIik7Ci0KLSAgY2Fwc19saXN0ID0gdmlkZW9fY3JvcF9nZXRfdGVzdF9jYXBzIChjcm9wKTsKLSAgZm9yIChsID0gY2Fwc19saXN0OyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7Ci0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0OwotICAgIEdzdENhcHMgKmNhcHMsICpvdXRfY2FwczsKLSAgICBnYm9vbGVhbiBza2lwID0gRkFMU0U7Ci0gICAgZ2NoYXIgKnM7Ci0KLSAgICBpZiAoZmlsdGVyX2NhcHMpIHsKLSAgICAgIEdzdENhcHMgKmljYXBzOwotCi0gICAgICBpY2FwcyA9IGdzdF9jYXBzX2ludGVyc2VjdCAoZmlsdGVyX2NhcHMsIEdTVF9DQVBTIChsLT5kYXRhKSk7Ci0gICAgICBza2lwID0gZ3N0X2NhcHNfaXNfZW1wdHkgKGljYXBzKTsKLSAgICAgIGdzdF9jYXBzX3VucmVmIChpY2Fwcyk7Ci0gICAgfQotCi0gICAgLyogdGhpcyBpcyB0aGUgc2l6ZSBvZiBvdXIgd2luZG93IChzdGF5cyBmaXhlZCkgKi8KLSAgICBvdXRfY2FwcyA9IGdzdF9jYXBzX2NvcHkgKEdTVF9DQVBTIChsLT5kYXRhKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQgKGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUgKG91dF9jYXBzLCAwKSwgIndpZHRoIiwKLSAgICAgICAgR19UWVBFX0lOVCwgT1VUX1dJRFRILCAiaGVpZ2h0IiwgR19UWVBFX0lOVCwgT1VUX0hFSUdIVCwgTlVMTCk7Ci0KLSAgICBnX29iamVjdF9zZXQgKGZpbHRlcjIsICJjYXBzIiwgb3V0X2NhcHMsIE5VTEwpOwotCi0gICAgLyogZmlsdGVyMSBnZXRzIHRoZXNlIHRvbyB0byBwcmV2ZW50IHZpZGVvdGVzdHNyYyBmcm9tIHJlbmVnb3RpYXRpbmcgKi8KLSAgICBnX29iamVjdF9zZXQgKGZpbHRlcjEsICJjYXBzIiwgb3V0X2NhcHMsIE5VTEwpOwotICAgIGdzdF9jYXBzX3VucmVmIChvdXRfY2Fwcyk7Ci0KLSAgICBjYXBzID0gZ3N0X2NhcHNfY29weSAoR1NUX0NBUFMgKGwtPmRhdGEpKTsKLSAgICBHU1RfSU5GTyAoInRlc3RpbmcgZm9ybWF0OiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcyk7Ci0KLSAgICBzID0gZ3N0X2NhcHNfdG9fc3RyaW5nIChjYXBzKTsKLQotICAgIGlmIChza2lwKSB7Ci0gICAgICBnX3ByaW50ICgiU2tpcHBpbmcgZm9ybWF0OiAlc1xuIiwgcyk7Ci0gICAgICBnX2ZyZWUgKHMpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZ19wcmludCAoIkZvcm1hdDogJXNcbiIsIHMpOwotCi0gICAgY2FwcyA9IGdzdF9jYXBzX21ha2Vfd3JpdGFibGUgKGNhcHMpOwotCi0gICAgLyogRklYTUU6IGNoZWNrIHJldHVybiB2YWx1ZXMgKi8KLSAgICByZXQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0gICAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICAgIHJldCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZSAocGlwZWxpbmUsIE5VTEwsIE5VTEwsIC0xKTsKLQotICAgICAgaWYgKHJldCAhPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKLSAgICAgICAgdGVzdF93aXRoX2NhcHMgKHNyYywgY3JvcCwgY2Fwcyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX3ByaW50ICgiRm9ybWF0OiAlcyBub3Qgc3VwcG9ydGVkIChmYWlsZWQgdG8gZ28gdG8gUExBWUlORylcbiIsIHMpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBnX3ByaW50ICgiRm9ybWF0OiAlcyBub3Qgc3VwcG9ydGVkXG4iLCBzKTsKLSAgICB9Ci0KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0KLSAgICBnc3RfY2Fwc191bnJlZiAoY2Fwcyk7Ci0gICAgZ19mcmVlIChzKTsKLSAgfQotCi0gIGdfbGlzdF9mb3JlYWNoIChjYXBzX2xpc3QsIChHRnVuYykgZ3N0X2NhcHNfdW5yZWYsIE5VTEwpOwotICBnX2xpc3RfZnJlZSAoY2Fwc19saXN0KTsKLQotICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gIGdzdF9vYmplY3RfdW5yZWYgKHBpcGVsaW5lKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2ljbGVzL3ZpZGVvY3JvcDItdGVzdC5jIGIvdGVzdHMvaWNsZXMvdmlkZW9jcm9wMi10ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNjgwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvaWNsZXMvdmlkZW9jcm9wMi10ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyogR1N0cmVhbWVyIGludGVyYWN0aXZlIHZpZGVvY3JvcCB0ZXN0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFdpbSBUYXltYW5zIDx3aW0udGF5bWFuc0BnbWFpbC5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHc3RFbGVtZW50ICoKLW1ha2VfcGlwZWxpbmUgKGdpbnQgdHlwZSkKLXsKLSAgR3N0RWxlbWVudCAqcmVzdWx0OwotICBnY2hhciAqcHN0cjsKLQotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIDA6Ci0gICAgICBwc3RyID0gZ19zdHJkdXBfcHJpbnRmICgidmlkZW90ZXN0c3JjICEgdmlkZW9jcm9wIG5hbWU9Y3JvcCAhICIKLSAgICAgICAgICAieHZpbWFnZXNpbmsiKTsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJlc3VsdCA9IGdzdF9wYXJzZV9sYXVuY2hfZnVsbCAocHN0ciwgTlVMTCwgR1NUX1BBUlNFX0ZMQUdfTk9ORSwgTlVMTCk7Ci0gIGdfcHJpbnQgKCJjcmVhdGVkIHRlc3QgJWQ6IFwiJXNcIlxuIiwgdHlwZSwgcHN0cik7Ci0gIGdfZnJlZSAocHN0cik7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2RlZmluZSBNQVhfUk9VTkQgNTAwCi0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RFbGVtZW50ICpwaXBlLCAqY3JvcDsKLSAgZ2ludCBsZWZ0LCByaWdodDsKLSAgZ2ludCB0b3AsIGJvdHRvbTsKLSAgZ2ludCBsZGlyLCByZGlyOwotICBnaW50IHRkaXIsIGJkaXI7Ci0gIGdpbnQgcm91bmQsIHR5cGUsIHN0b3A7Ci0KLSAgZ3N0X2luaXQgKCZhcmdjLCAmYXJndik7Ci0KLSAgdHlwZSA9IDA7Ci0gIHN0b3AgPSAtMTsKLQotICBpZiAoYXJnYyA+IDEpIHsKLSAgICB0eXBlID0gYXRvaSAoYXJndlsxXSk7Ci0gICAgc3RvcCA9IHR5cGUgKyAxOwotICB9Ci0KLSAgd2hpbGUgKFRSVUUpIHsKLSAgICBHc3RNZXNzYWdlICptZXNzYWdlOwotCi0gICAgcGlwZSA9IG1ha2VfcGlwZWxpbmUgKHR5cGUpOwotICAgIGlmIChwaXBlID09IE5VTEwpCi0gICAgICBicmVhazsKLQotICAgIGNyb3AgPSBnc3RfYmluX2dldF9ieV9uYW1lIChHU1RfQklOIChwaXBlKSwgImNyb3AiKTsKLSAgICBnX2Fzc2VydCAoY3JvcCk7Ci0KLSAgICB0b3AgPSBib3R0b20gPSBsZWZ0ID0gcmlnaHQgPSAwOwotICAgIHRkaXIgPSBiZGlyID0gMTA7Ci0gICAgbGRpciA9IHJkaXIgPSAxMDsKLQotICAgIGZvciAocm91bmQgPSAwOyByb3VuZCA8IE1BWF9ST1VORDsgcm91bmQrKykgewotICAgICAgZ19wcmludCAoImNyb3AgdG8gJTRkICU0ZCAlNGQgJTRkICglZC8lZCkgICBcciIsIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwKLSAgICAgICAgICByb3VuZCwgTUFYX1JPVU5EKTsKLQotICAgICAgZ19vYmplY3Rfc2V0IChjcm9wLCAidG9wIiwgdG9wLCAiYm90dG9tIiwgYm90dG9tLCAibGVmdCIsIGxlZnQsICJyaWdodCIsCi0gICAgICAgICAgcmlnaHQsIE5VTEwpOwotCi0gICAgICBpZiAocm91bmQgPT0gMCkKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlIChwaXBlLCBHU1RfU1RBVEVfUExBWUlORyk7Ci0KLSAgICAgIHRvcCArPSB0ZGlyOwotICAgICAgaWYgKHRvcCA+PSA4MCkKLSAgICAgICAgdGRpciA9IC0xMDsKLSAgICAgIGVsc2UgaWYgKHRvcCA8IDEwKQotICAgICAgICB0ZGlyID0gMTA7Ci0KLSAgICAgIGJvdHRvbSArPSBiZGlyOwotICAgICAgaWYgKGJvdHRvbSA+PSA2MCkKLSAgICAgICAgYmRpciA9IC0xMDsKLSAgICAgIGVsc2UgaWYgKGJvdHRvbSA8IDEwKQotICAgICAgICBiZGlyID0gMTA7Ci0KLSAgICAgIGxlZnQgKz0gbGRpcjsKLSAgICAgIGlmIChsZWZ0ID49IDEwMCkKLSAgICAgICAgbGRpciA9IC0xMDsKLSAgICAgIGVsc2UgaWYgKGxlZnQgPCAxMCkKLSAgICAgICAgbGRpciA9IDEwOwotCi0gICAgICByaWdodCArPSByZGlyOwotICAgICAgaWYgKHJpZ2h0ID49IDgwKQotICAgICAgICByZGlyID0gLTEwOwotICAgICAgZWxzZSBpZiAocmlnaHQgPCAxMCkKLSAgICAgICAgcmRpciA9IDEwOwotCi0gICAgICBtZXNzYWdlID0KLSAgICAgICAgICBnc3RfYnVzX3BvbGwgKEdTVF9FTEVNRU5UX0JVUyAocGlwZSksIEdTVF9NRVNTQUdFX0VSUk9SLAotICAgICAgICAgIDUwICogR1NUX01TRUNPTkQpOwotICAgICAgaWYgKG1lc3NhZ2UpIHsKLSAgICAgICAgZ19wcmludCAoImdvdCBlcnJvciAgICAgICAgICAgXG4iKTsKLQotICAgICAgICBnc3RfbWVzc2FnZV91bnJlZiAobWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGdfcHJpbnQgKCJ0ZXN0ICVkIGRvbmUgICAgICAgICAgICAgICAgICAgIFxuIiwgdHlwZSk7Ci0KLSAgICBnc3Rfb2JqZWN0X3VucmVmIChjcm9wKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUgKHBpcGUsIEdTVF9TVEFURV9OVUxMKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmIChwaXBlKTsKLQotICAgIHR5cGUrKzsKLSAgICBpZiAodHlwZSA9PSBzdG9wKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9pY2xlcy94aW1hZ2VzcmMtdGVzdC5jIGIvdGVzdHMvaWNsZXMveGltYWdlc3JjLXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRjYzU4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9pY2xlcy94aW1hZ2VzcmMtdGVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyogR1N0cmVhbWVyCi0gKiBDb3B5cmlnaHQgKEMpIDwyMDA2PiBaYWhlZXIgQWJiYXMgTWVyYWxpIDx6YWhlZXJhYmJhcyBhdCBtZXJhbGkgZG90IG9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0KLXN0YXRpYyBHTWFpbkxvb3AgKmxvb3A7Ci0KLXN0YXRpYyBnYm9vbGVhbgotdGVybWluYXRlX3BsYXliYWNrIChHc3RFbGVtZW50ICogcGlwZWxpbmUpCi17Ci0gIGdfcHJpbnQgKCJUZXJtaW5hdGluZyBwbGF5YmFja1xuIik7Ci0gIGdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOwotICByZXR1cm4gRkFMU0U7Ci19Ci0KLWludAotbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICBHc3RFbGVtZW50ICpwaXBlbGluZTsKLSAgR3N0U3RhdGUgc3RhdGU7Ci0gIEdFcnJvciAqZXJyb3IgPSBOVUxMOwotCi0gIGdzdF9pbml0ICgmYXJnYywgJmFyZ3YpOwotCi0gIHBpcGVsaW5lID0gZ3N0X3BhcnNlX2xhdW5jaCAoInhpbWFnZXNyYyAhIGZha2VzaW5rIiwgJmVycm9yKTsKLSAgaWYgKGVycm9yKSB7Ci0gICAgZ19wcmludCAoIkVycm9yIHdoaWxlIHBhcnNpbmcgcGlwZWxpbmUgZGVzY3JpcHRpb246ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyAoTlVMTCwgRkFMU0UpOwotCi0gIGdzdF9lbGVtZW50X3NldF9zdGF0ZSAocGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKLQotICAvKiBsZXRzIGNoZWNrIGl0IGdldHMgdG8gUExBWUlORyAqLwotICBpZiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlIChwaXBlbGluZSwgJnN0YXRlLCBOVUxMLAotICAgICAgICAgIEdTVF9DTE9DS19USU1FX05PTkUpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSB8fAotICAgICAgc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICBnX3dhcm5pbmcgKCJTdGF0ZSBjaGFuZ2UgdG8gcGxheWluZyBmYWlsZWQiKTsKLSAgfQotCi0gIC8qIFdlIHdhbnQgdG8gZ2V0IG91dCBhZnRlciA1IHNlY29uZHMgKi8KLSAgZ190aW1lb3V0X2FkZF9zZWNvbmRzICg1LCAoR1NvdXJjZUZ1bmMpIHRlcm1pbmF0ZV9wbGF5YmFjaywgcGlwZWxpbmUpOwotCi0gIGdfbWFpbl9sb29wX3J1biAobG9vcCk7Ci0KLSAgZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOwotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvd2luMzIvTUFOSUZFU1QgYi93aW4zMi9NQU5JRkVTVApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVjNjQ0My4uMDAwMDAwMAotLS0gYS93aW4zMi9NQU5JRkVTVAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotd2luMzIvTUFOSUZFU1QKLXdpbjMyL2NvbW1vbi9jb25maWcuaApkaWZmIC0tZ2l0IGEvd2luMzIvY29tbW9uL2NvbmZpZy5oIGIvd2luMzIvY29tbW9uL2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTVlZjA4Li4wMDAwMDAwCi0tLSBhL3dpbjMyL2NvbW1vbi9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKiBBdXRvZ2VuZXJhdGVkIGNvbmZpZy5oIGNyZWF0ZWQgZm9yIHdpbjMyIFZpc3VhbCBTdHVkaW8gYnVpbGRzICovCi0KLS8qIFBSRUZJWCAtLSBzcGVjaWZpY2FsbHkgYWRkZWQgZm9yIFdpbmRvd3MgZm9yIGVhc2llciBtb3ZpbmcgKi8KLSNkZWZpbmUgUFJFRklYICJDOlxcZ3N0cmVhbWVyIgotCi0jZGVmaW5lIEdTVF9JTlNUQUxMX1BMVUdJTlNfSEVMUEVSIFBSRUZJWCAiXFxsaWJleGVjXFxnc3QtaW5zdGFsbC1wbHVnaW5zLWhlbHBlci5leGUiCi0KLS8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KLSN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKLQotLyogRGVmYXVsdCBhdWRpbyBzaW5rICovCi0jZGVmaW5lIERFRkFVTFRfQVVESU9TSU5LICJkaXJlY3Rzb3VuZHNpbmsiCi0KLS8qIERlZmF1bHQgYXVkaW8gc291cmNlICovCi0jZGVmaW5lIERFRkFVTFRfQVVESU9TUkMgImF1ZGlvdGVzdHNyYyIKLQotLyogRGVmYXVsdCB2aWRlbyBzaW5rICovCi0jdW5kZWYgREVGQVVMVF9WSURFT1NJTksKLQotLyogRGVmYXVsdCB2aWRlbyBzb3VyY2UgKi8KLSNkZWZpbmUgREVGQVVMVF9WSURFT1NSQyAidmlkZW90ZXN0c3JjIgotCi0vKiBEZWZhdWx0IHZpc3VhbGl6ZXIgKi8KLSNkZWZpbmUgREVGQVVMVF9WSVNVQUxJWkVSICJnb29tIgotCi0vKiBEaXNhYmxlIE9yYyAqLwotI3VuZGVmIERJU0FCTEVfT1JDCi0KLS8qIERlZmluZSB0byAxIGlmIHRyYW5zbGF0aW9uIG9mIHByb2dyYW0gbWVzc2FnZXMgdG8gdGhlIHVzZXIncyBuYXRpdmUKLSAgIGxhbmd1YWdlIGlzIHJlcXVlc3RlZC4gKi8KLSN1bmRlZiBFTkFCTEVfTkxTCi0KLS8qIGdldHRleHQgcGFja2FnZSBuYW1lICovCi0jZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSAiZ3N0LXBsdWdpbnMtZ29vZC0xLjAiCi0KLS8qIFRoZSBHSU8gbGlicmFyeSBkaXJlY3RvcnkuICovCi0jdW5kZWYgR0lPX0xJQkRJUgotCi0vKiBUaGUgR0lPIG1vZHVsZXMgZGlyZWN0b3J5LiAqLwotI3VuZGVmIEdJT19NT0RVTEVfRElSCi0KLS8qIFRoZSBHSU8gaW5zdGFsbCBwcmVmaXguICovCi0jdW5kZWYgR0lPX1BSRUZJWAotCi0vKiBHU3RyZWFtZXIgQVBJIFZlcnNpb24gKi8KLSNkZWZpbmUgR1NUX0FQSV9WRVJTSU9OICIxLjAiCi0KLS8qIERlZmluZSBpZiBleHRyYSBydW50aW1lIGNoZWNrcyBzaG91bGQgYmUgZW5hYmxlZCAqLwotI3VuZGVmIEdTVF9FTkFCTEVfRVhUUkFfQ0hFQ0tTCi0KLS8qIERlZmluZWQgaWYgZ2NvdiBpcyBlbmFibGVkIHRvIGZvcmNlIGEgcmVidWlsZCBkdWUgdG8gY29uZmlnLmggY2hhbmdpbmcgKi8KLSN1bmRlZiBHU1RfR0NPVl9FTkFCTEVECi0KLS8qIERlZmF1bHQgZXJyb3JsZXZlbCB0byB1c2UgKi8KLSNkZWZpbmUgR1NUX0xFVkVMX0RFRkFVTFQgR1NUX0xFVkVMX0VSUk9SCi0KLS8qIEdTdHJlYW1lciBsaWNlbnNlICovCi0jZGVmaW5lIEdTVF9MSUNFTlNFICJMR1BMIgotCi0vKiBwYWNrYWdlIG5hbWUgaW4gcGx1Z2lucyAqLwotI2RlZmluZSBHU1RfUEFDS0FHRV9OQU1FICJHU3RyZWFtZXIgR29vZCBQbHVnLWlucyBzb3VyY2UgcmVsZWFzZSIKLQotLyogcGFja2FnZSBvcmlnaW4gKi8KLSNkZWZpbmUgR1NUX1BBQ0tBR0VfT1JJR0lOICJVbmtub3duIHBhY2thZ2Ugb3JpZ2luIgotCi0vKiBHU3RyZWFtZXIgcGFja2FnZSByZWxlYXNlIGRhdGUvdGltZSBmb3IgcGx1Z2lucyBhcyBZWVlZLU1NLUREICovCi0jZGVmaW5lIEdTVF9QQUNLQUdFX1JFTEVBU0VfREFURVRJTUUgIjIwMTctMDItMjMiCi0KLS8qIERlZmluZSBpZiBzdGF0aWMgcGx1Z2lucyBzaG91bGQgYmUgYnVpbHQgKi8KLSN1bmRlZiBHU1RfUExVR0lOX0JVSUxEX1NUQVRJQwotCi0vKiBEZWZpbmUgaWYgVmlkZW80TGludXggcHJvYmUgc2hhbGwgYmUgcnVuIGF0IHBsdWdpbiBsb2FkICovCi0jdW5kZWYgR1NUX1Y0TDJfRU5BQkxFX1BST0JFCi0KLS8qIERlZmluZSB0byBlbmFibGUgYWFsaWIgQVNDSUkgQXJ0IGxpYnJhcnkgKHVzZWQgYnkgYWFzaW5rKS4gKi8KLSN1bmRlZiBIQVZFX0FBTElCCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNpbmgnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfQVNJTkgKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBiejIgbGlicmFyeSBmb3IgbWF0cm9za2EgLiAqLwotI3VuZGVmIEhBVkVfQloyCi0KLS8qIERlZmluZSB0byBlbmFibGUgQ2Fpcm8gZ3JhcGhpY3MgcmVuZGVyaW5nIGFuZCBnb2JqZWN0IGJpbmRpbmdzICh1c2VkIGJ5Ci0gICBjYWlybykuICovCi0jdW5kZWYgSEFWRV9DQUlSTwotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRkxvY2FsZUNvcHlDdXJyZW50IGluIHRoZQotICAgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotI3VuZGVmIEhBVkVfQ0ZMT0NBTEVDT1BZQ1VSUkVOVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTWFjT1MgWCBmdW5jdGlvbiBDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlIGluCi0gICB0aGUgQ29yZUZvdW5kYXRpb24gZnJhbWV3b3JrLiAqLwotI3VuZGVmIEhBVkVfQ0ZQUkVGRVJFTkNFU0NPUFlBUFBWQUxVRQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrX2dldHRpbWUnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNvc2gnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfQ09TSAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgQUFSQ0g2NCAqLwotI3VuZGVmIEhBVkVfQ1BVX0FBUkNINjQKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFscGhhICovCi0jdW5kZWYgSEFWRV9DUFVfQUxQSEEKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGFuIEFSQyAqLwotI3VuZGVmIEhBVkVfQ1BVX0FSQwotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYW4gQVJNICovCi0jdW5kZWYgSEFWRV9DUFVfQVJNCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIENSSVMgKi8KLSN1bmRlZiBIQVZFX0NQVV9DUklTCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIENSSVN2MzIgKi8KLSN1bmRlZiBIQVZFX0NQVV9DUklTVjMyCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIEhQUEEgKi8KLSN1bmRlZiBIQVZFX0NQVV9IUFBBCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhbiB4ODYgKi8KLSNkZWZpbmUgSEFWRV9DUFVfSTM4NiAxCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIElBNjQgKi8KLSN1bmRlZiBIQVZFX0NQVV9JQTY0Ci0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIE02OEsgKi8KLSN1bmRlZiBIQVZFX0NQVV9NNjhLCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIE1JUFMgKi8KLSN1bmRlZiBIQVZFX0NQVV9NSVBTCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIFBvd2VyUEMgKi8KLSN1bmRlZiBIQVZFX0NQVV9QUEMKLQotLyogRGVmaW5lIGlmIHRoZSB0YXJnZXQgQ1BVIGlzIGEgNjQgYml0IFBvd2VyUEMgKi8KLSN1bmRlZiBIQVZFX0NQVV9QUEM2NAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBTMzkwICovCi0jdW5kZWYgSEFWRV9DUFVfUzM5MAotCi0vKiBEZWZpbmUgaWYgdGhlIHRhcmdldCBDUFUgaXMgYSBTUEFSQyAqLwotI3VuZGVmIEhBVkVfQ1BVX1NQQVJDCi0KLS8qIERlZmluZSBpZiB0aGUgdGFyZ2V0IENQVSBpcyBhIHg4Nl82NCAqLwotI3VuZGVmIEhBVkVfQ1BVX1g4Nl82NAotCi0vKiBEZWZpbmUgaWYgdGhlIEdOVSBkY2dldHRleHQoKSBmdW5jdGlvbiBpcyBhbHJlYWR5IHByZXNlbnQgb3IgcHJlaW5zdGFsbGVkLgotICAgKi8KLSN1bmRlZiBIQVZFX0RDR0VUVEVYVAotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIERpcmVjdFNvdW5kIHBsdWctaW4gKHVzZWQgYnkgZGlyZWN0c291bmRzaW5rKS4gKi8KLSN1bmRlZiBIQVZFX0RJUkVDVFNPVU5ECi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9ETEZDTl9ICi0KLS8qIGRlZmluZSBmb3Igd29ya2luZyBkbyB3aGlsZSgwKSBtYWNyb3MgKi8KLSN1bmRlZiBIQVZFX0RPV0hJTEVfTUFDUk9TCi0KLS8qIERlZmluZSB0byBlbmFibGUgcmF3MTM5NCBhbmQgYXZjMTM5NCBsaWJyYXJ5ICh1c2VkIGJ5IDEzOTQpLiAqLwotI3VuZGVmIEhBVkVfRFYxMzk0Ci0KLS8qIERlZmluZSB0byBlbmFibGUgYnVpbGRpbmcgb2YgZXhwZXJpbWVudGFsIHBsdWctaW5zLiAqLwotI3VuZGVmIEhBVkVfRVhQRVJJTUVOVEFMCi0KLS8qIERlZmluZSB0byBlbmFibGUgYnVpbGRpbmcgb2YgcGx1Zy1pbnMgd2l0aCBleHRlcm5hbCBkZXBzLiAqLwotI3VuZGVmIEhBVkVfRVhURVJOQUwKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0ZDTlRMX0gKLQotLyogRklPTlJFQUQgaW9jdGwgZm91bmQgaW4gc3lzL2ZpbGlvLmggKi8KLSN1bmRlZiBIQVZFX0ZJT05SRUFEX0lOX1NZU19GSUxJTwotCi0vKiBGSU9OUkVBRCBpb2N0bCBmb3VuZCBpbiBzeXMvaW9jbHQuaCAqLwotI3VuZGVmIEhBVkVfRklPTlJFQURfSU5fU1lTX0lPQ1RMCi0KLS8qIERlZmluZSB0byBlbmFibGUgRkxBQyBsb3NzbGVzcyBhdWRpbyAodXNlZCBieSBmbGFjKS4gKi8KLSN1bmRlZiBIQVZFX0ZMQUMKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcGNsYXNzJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0ZQQ0xBU1MKLQotLyogRGVmaW5lIGlmIGNvbXBpbGVyIHN1cHBvcnRzIGdjYyBpbmxpbmUgYXNzZW1ibHkgKi8KLSN1bmRlZiBIQVZFX0dDQ19BU00KLQotLyogRGVmaW5lIHRvIGVuYWJsZSBHREsgcGl4YnVmICh1c2VkIGJ5IGdka3BpeGJ1ZikuICovCi0jdW5kZWYgSEFWRV9HREtfUElYQlVGCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGFnZXNpemUnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfR0VUUEFHRVNJWkUKLQotLyogRGVmaW5lIGlmIHRoZSBHTlUgZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuICovCi0jdW5kZWYgSEFWRV9HRVRURVhUCi0KLS8qIERlZmluZSB0byBlbmFibGUgVmlkZW8gNCBMaW51eCAyICh1c2VkIGJ5IHZpZGVvNGxpbnV4MikuICovCi0jdW5kZWYgSEFWRV9HU1RfVjRMMgotCi0vKiBXaGV0aGVyIGd1ZGV2IGlzIGF2YWlsYWJsZSBmb3IgZGV2aWNlIGRldGVjdGlvbiAqLwotI3VuZGVmIEhBVkVfR1VERVYKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpY29udigpIGZ1bmN0aW9uIGFuZCBpdCB3b3Jrcy4gKi8KLSN1bmRlZiBIQVZFX0lDT05WCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9JTlRUWVBFU19ICi0KLS8qIGJ1aWxkaW5nIGZvciBpT1MgcGxhdG9mcm0gKi8KLSN1bmRlZiBIQVZFX0lPUwotCi0vKiBEZWZpbmUgaWYgd2UgaGF2ZSBzdHJ1Y3QgaXBfbXJlcW4gKi8KLSN1bmRlZiBIQVZFX0lQX01SRVFOCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNpbmYnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfSVNJTkYKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBKYWNrICh1c2VkIGJ5IGphY2spLiAqLwotI3VuZGVmIEhBVkVfSkFDSwotCi0vKiBkZWZpbmVkIGlmIGphY2sgPj0gMC4xMjAuMSBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX0pBQ0tfMF8xMjBfMQotCi0vKiBkZWZpbmVkIGlmIGphY2sgPj0gMS45LjcgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9KQUNLXzFfOV83Ci0KLS8qIERlZmluZSB0byBlbmFibGUganBlZyBsaWJyYXJ5ICh1c2VkIGJ5IGpwZWcpLiAqLwotI3VuZGVmIEhBVkVfSlBFRwotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIGxpYmNhY2EgY29sb3VyZWQgQVNDSUkgYXJ0ICh1c2VkIGJ5IGNhY2FzaW5rKS4gKi8KLSN1bmRlZiBIQVZFX0xJQkNBQ0EKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBsaWJkdiBEViBkZW11eGVyL2RlY29kZXIgKHVzZWQgYnkgZHYpLiAqLwotI3VuZGVmIEhBVkVfTElCRFYKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIGxpYnJhcnkgKHVzZWQgYnkgcG5nKS4gKi8KLSN1bmRlZiBIQVZFX0xJQlBORwotCi0vKiBXaGV0aGVyIGxpYnY0bDIgaXMgYXZhaWxhYmxlIGZvciB2aWRlbyBidWZmZXIgY29udmVyc2lvbiAqLwotI3VuZGVmIEhBVkVfTElCVjRMMgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX01FTU9SWV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBgbW1hcCcgc3lzdGVtIGNhbGwuICovCi0jdW5kZWYgSEFWRV9NTUFQCi0KLS8qIFVzZSBPcmMgKi8KLSN1bmRlZiBIQVZFX09SQwotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIE9TUyBhdWRpbyAodXNlZCBieSBvc3NhdWRpbykuICovCi0jdW5kZWYgSEFWRV9PU1MKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBPcGVuIFNvdW5kIFN5c3RlbSA0ICh1c2VkIGJ5IG9zczQpLiAqLwotI3VuZGVmIEhBVkVfT1NTNAotCi0vKiBEZWZpbmUgaWYgT1NTIGluY2x1ZGVzIGFyZSBpbiAvbWFjaGluZS8gKi8KLSN1bmRlZiBIQVZFX09TU19JTkNMVURFX0lOX01BQ0hJTkUKLQotLyogRGVmaW5lIGlmIE9TUyBpbmNsdWRlcyBhcmUgaW4gLyAqLwotI3VuZGVmIEhBVkVfT1NTX0lOQ0xVREVfSU5fUk9PVAotCi0vKiBEZWZpbmUgaWYgT1NTIGluY2x1ZGVzIGFyZSBpbiAvc3lzLyAqLwotI3VuZGVmIEhBVkVfT1NTX0lOQ0xVREVfSU5fU1lTCi0KLS8qIERlZmluZSB0byBlbmFibGUgT1NYIGF1ZGlvICh1c2VkIGJ5IG9zeGF1ZGlvKS4gKi8KLSN1bmRlZiBIQVZFX09TWF9BVURJTwotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIE9TWCB2aWRlbyAodXNlZCBieSBvc3h2aWRlb3NpbmspLiAqLwotI3VuZGVmIEhBVkVfT1NYX1ZJREVPCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9QUk9DRVNTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBIQVZFX1BUSFJFQUQKLQotLyogSGF2ZSBQVEhSRUFEX1BSSU9fSU5IRVJJVC4gKi8KLSN1bmRlZiBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUCi0KLS8qIERlZmluZSB0byBlbmFibGUgcHVsc2VhdWRpbyBwbHVnLWluICh1c2VkIGJ5IHB1bHNlYXVkaW8pLiAqLwotI3VuZGVmIEhBVkVfUFVMU0UKLQotLyogRGVmaW5lIGlmIFJEVFNDIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfUkRUU0MKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByaW50JyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1JJTlQKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBTaG91dGNhc3QvSWNlY2FzdCBjbGllbnQgbGlicmFyeSAodXNlZCBieSBzaG91dDIpLiAqLwotI3VuZGVmIEhBVkVfU0hPVVQyCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2luaCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TSU5ICi0KLS8qIERlZmluZSB0byBlbmFibGUgc291cCBodHRwIGNsaWVudCBwbHVnaW4gKDIuNCkgKHVzZWQgYnkgc291cGh0dHBzcmMpLiAqLwotI3VuZGVmIEhBVkVfU09VUAotCi0vKiBEZWZpbmUgdG8gZW5hYmxlIHNwZWV4IHNwZWVjaCBjb2RlYyAodXNlZCBieSBzcGVleCkuICovCi0jdW5kZWYgSEFWRV9TUEVFWAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NURElOVF9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NURExJQl9IIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1RSSU5HU19ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUUklOR19IIDEKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBTdW4gQXVkaW8gKHVzZWQgYnkgc3VuYXVkaW8pLiAqLwotI3VuZGVmIEhBVkVfU1VOQVVESU8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9TWVNfSU9DVExfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1lTX1RJTUVfSAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCi0KLS8qIERlZmluZSB0byBlbmFibGUgdGFnbGliIHRhZ2dpbmcgbGlicmFyeSAodXNlZCBieSB0YWdsaWIpLiAqLwotI3VuZGVmIEhBVkVfVEFHTElCCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfVU5JU1REX0gKLQotLyogRGVmaW5lIGlmIHZhbGdyaW5kIHNob3VsZCBiZSB1c2VkICovCi0jdW5kZWYgSEFWRV9WQUxHUklORAotCi0vKiBEZWZpbmVkIGlmIHRoZSBWUDggZGVjb2RlciBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX1ZQOF9ERUNPREVSCi0KLS8qIERlZmluZWQgaWYgdGhlIFZQOCBlbmNvZGVyIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfVlA4X0VOQ09ERVIKLQotLyogRGVmaW5lZCBpZiB0aGUgVlA5IGRlY29kZXIgaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9WUDlfREVDT0RFUgotCi0vKiBEZWZpbmVkIGlmIHRoZSBWUDkgZW5jb2RlciBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX1ZQOV9FTkNPREVSCi0KLS8qIERlZmluZSB0byBlbmFibGUgVlBYIGRlY29kZXIgKHVzZWQgYnkgdnB4KS4gKi8KLSN1bmRlZiBIQVZFX1ZQWAotCi0vKiBEZWZpbmVkIGlmIHRoZSBWUFggbGlicmFyeSB2ZXJzaW9uIGlzIDEuNCBvciBiaWdnZXIgKi8KLSN1bmRlZiBIQVZFX1ZQWF8xXzQKLQotLyogRGVmaW5lIHRvIGVuYWJsZSBXaW4zMiBXYXZlRm9ybSAodXNlZCBieSB3YXZlZm9ybXNpbmspLiAqLwotI3VuZGVmIEhBVkVfV0FWRUZPUk0KLQotLyogRGVmaW5lIHRvIGVuYWJsZSB3YXZwYWNrIHBsdWctaW4gKHVzZWQgYnkgd2F2cGFjaykuICovCi0jdW5kZWYgSEFWRV9XQVZQQUNLCi0KLS8qIERlZmluZSB0byBlbmFibGUgWCBsaWJyYXJpZXMgYW5kIHBsdWdpbnMgKHVzZWQgYnkgeGltYWdlc3JjKS4gKi8KLSN1bmRlZiBIQVZFX1gKLQotLyogRGVmaW5lZCBpZiBYZGFtYWdlIGlzIGF2YWlsYWJsZSAqLwotI3VuZGVmIEhBVkVfWERBTUFHRQotCi0vKiBEZWZpbmVkIGlmIFhmaXhlcyBpcyBhdmFpbGFibGUgKi8KLSN1bmRlZiBIQVZFX1hGSVhFUwotCi0vKiBEZWZpbmVkIGlmIFhTaG0gaXMgYXZhaWxhYmxlICovCi0jdW5kZWYgSEFWRV9YU0hNCi0KLS8qIERlZmluZSB0byBlbmFibGUgemxpYiBzdXBwb3J0IGZvciBxdGRlbXV4L21hdHJvc2thLiAqLwotI3VuZGVmIEhBVkVfWkxJQgotCi0vKiB0aGUgaG9zdCBDUFUgKi8KLSNkZWZpbmUgSE9TVF9DUFUgImk2ODYiCi0KLS8qIGdldHRleHQgbG9jYWxlIGRpciAqLwotI2RlZmluZSBMT0NBTEVESVIgUFJFRklYICJcXHNoYXJlXFxsb2NhbGUiCi0KLS8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuICovCi0jdW5kZWYgTFRfT0JKRElSCi0KLS8qIE5hbWUgb2YgcGFja2FnZSAqLwotI2RlZmluZSBQQUNLQUdFICJnc3QtcGx1Z2lucy1nb29kIgotCi0vKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdTdHJlYW1lciIKLQotLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwotI2RlZmluZSBQQUNLQUdFX05BTUUgIkdTdHJlYW1lciBHb29kIFBsdWctaW5zIgotCi0vKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICJHU3RyZWFtZXIgR29vZCBQbHVnLWlucyAxLjEwLjQiCi0KLS8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJnc3QtcGx1Z2lucy1nb29kIgotCi0vKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLwotI3VuZGVmIFBBQ0tBR0VfVVJMCi0KLS8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMS4xMC40IgotCi0vKiBkaXJlY3Rvcnkgd2hlcmUgcGx1Z2lucyBhcmUgbG9jYXRlZCAqLwotI2lmZGVmIF9ERUJVRwotIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcZGVidWdcXGxpYlxcZ3N0cmVhbWVyLTAuMTEiCi0jZWxzZQotIyAgZGVmaW5lIFBMVUdJTkRJUiBQUkVGSVggIlxcbGliXFxnc3RyZWFtZXItMC4xMSIKLSNlbmRpZgotCi0vKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgotICAgeW91ciBzeXN0ZW0uICovCi0jdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKLQotLyogVGhlIHNpemUgb2YgYGNoYXInLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jdW5kZWYgU0laRU9GX0NIQVIKLQotLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfSU5UCi0KLS8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9MT05HCi0KLS8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSN1bmRlZiBTSVpFT0ZfU0hPUlQKLQotLyogVGhlIHNpemUgb2YgYHZvaWQqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwotI3VuZGVmIFNJWkVPRl9WT0lEUAotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KLSN1bmRlZiBTVERDX0hFQURFUlMKLQotLyogdGhlIHRhcmdldCBDUFUgKi8KLSN1bmRlZiBUQVJHRVRfQ1BVCi0KLS8qIFZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2UgKi8KLSNkZWZpbmUgVkVSU0lPTiAiMS4xMC40IgotCi0vKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKLSAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLwotI2lmIGRlZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECi0jIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18KLSMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQotIyBlbmRpZgotI2Vsc2UKLSMgaWZuZGVmIFdPUkRTX0JJR0VORElBTgotIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOCi0jIGVuZGlmCi0jZW5kaWYK